diff --git a/.circleci/.gitattributes b/.circleci/.gitattributes new file mode 100644 index 00000000000..f7c6b31eb8a --- /dev/null +++ b/.circleci/.gitattributes @@ -0,0 +1 @@ +/config.yml linguist-generated diff --git a/.circleci/.gitignore b/.circleci/.gitignore new file mode 100644 index 00000000000..3018b3a6813 --- /dev/null +++ b/.circleci/.gitignore @@ -0,0 +1 @@ +.tmp/ diff --git a/.circleci/Makefile b/.circleci/Makefile new file mode 100644 index 00000000000..3852d19f7af --- /dev/null +++ b/.circleci/Makefile @@ -0,0 +1,80 @@ +# Set SHELL to 'strict mode' without using .SHELLFLAGS for max compatibility. +# See https://fieldnotes.tech/how-to-shell-for-compatible-makefiles/ +SHELL := /usr/bin/env bash -euo pipefail -c + +CIRCLECI := circleci --skip-update-check + +# Set up some documentation/help message variables. +# We do not attempt to install the CircleCI CLI from this Makefile. +CCI_INSTALL_LINK := https://circleci.com/docs/2.0/local-cli/\#installation +CCI_INSTALL_MSG := Please install CircleCI CLI. See $(CCI_INSTALL_LINK) +CCI_VERSION := $(shell $(CIRCLECI) version 2> /dev/null) +ifeq ($(CCI_VERSION),) +# Attempting to use the CLI fails with installation instructions. +CIRCLECI := echo '$(CCI_INSTALL_MSG)'; exit 1; \# +endif + +SOURCE_DIR := config +SOURCE_YML := $(shell [ ! -d $(SOURCE_DIR) ] || find $(SOURCE_DIR) -name '*.yml') +CONFIG_SOURCE := Makefile $(SOURCE_YML) | $(SOURCE_DIR) +OUT := config.yml +TMP := .tmp/config-processed +CONFIG_PACKED := .tmp/config-packed + +default: help + +help: + @echo "Usage:" + @echo " make ci-config: recompile config.yml from $(SOURCE_DIR)/" + @echo " make ci-verify: verify that config.yml is a true mapping from $(SOURCE_DIR)/" + @echo + @echo "Diagnostics:" + @[ -z "$(CCI_VERSION)" ] || echo " circleci-cli version $(CCI_VERSION)" + @[ -n "$(CCI_VERSION)" ] || echo " $(CCI_INSTALL_MSG)" + +$(SOURCE_DIR): + @echo No source directory $(SOURCE_DIR) found.; exit 1 + +# Make sure our .tmp dir exists. +$(shell [ -d .tmp ] || mkdir .tmp) + +.PHONY: ci-config +ci-config: $(OUT) + +.PHONY: ci-verify +ci-verify: config-up-to-date + @$(CIRCLECI) config validate $(OUT) + +define GENERATED_FILE_HEADER +### *** +### WARNING: DO NOT manually EDIT or MERGE this file, it is generated by 'make ci-config'. +### INSTEAD: Edit or merge the source in $(SOURCE_DIR)/ then run 'make ci-config'. +### *** +endef +export GENERATED_FILE_HEADER + +# GEN_CONFIG writes the config to a temporary file. If the whole process succeeds, +# it then moves that file to $@. This makes is an atomic operation, so if it fails +# make doesn't consider a half-baked file up to date. +define GEN_CONFIG + @$(CIRCLECI) config pack $(SOURCE_DIR) > $(CONFIG_PACKED) + @echo "$$GENERATED_FILE_HEADER" > $@.tmp || { rm -f $@; exit 1; } + @$(CIRCLECI) config process $(CONFIG_PACKED) >> $@.tmp || { rm -f $@.tmp; exit 1; } + @mv -f $@.tmp $@ +endef + +$(OUT): $(CONFIG_SOURCE) + $(GEN_CONFIG) + @echo "$@ updated" + +$(TMP): $(CONFIG_SOURCE) + $(GEN_CONFIG) + +.PHONY: config-up-to-date +config-up-to-date: $(TMP) # Note this must not depend on $(OUT)! + @if diff config.yml $<; then \ + echo "Generated $(OUT) is up to date!"; \ + else \ + echo "Generated $(OUT) is out of date, run make $(CONFIG) to update."; \ + exit 1; \ + fi diff --git a/.circleci/README.md b/.circleci/README.md new file mode 100644 index 00000000000..c2107009793 --- /dev/null +++ b/.circleci/README.md @@ -0,0 +1,3 @@ +# How to use CircleCI multi-file config + +Refer to https://github.com/hashicorp/vault/blob/master/.circleci/README.md . diff --git a/.circleci/config.yml b/.circleci/config.yml index 3e0989cb7d7..76fdf280176 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,363 +1,936 @@ -version: 2.1 - -references: - common_envs: &COMMON_ENVS - GOMAXPROCS: 1 - NOMAD_SLOW_TEST: 1 - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml - ignore_for_ui_branches: &IGNORE_FOR_UI_BRANCHES - filters: - branches: - ignore: /^.-ui\b.*/ - - -workflows: - build-test: - jobs: - - lint-go: - <<: *IGNORE_FOR_UI_BRANCHES - - test-machine: - name: "test-client" - test_packages: "./client/..." - <<: *IGNORE_FOR_UI_BRANCHES - - test-machine: - name: "test-nomad" - test_packages: "./nomad/..." - <<: *IGNORE_FOR_UI_BRANCHES - - test-machine: - # API Tests run in a VM rather than container due to the FS tests - # requiring `mount` priviliges. - name: "test-api" - test_packages: "./api/..." - <<: *IGNORE_FOR_UI_BRANCHES - - test-container: - name: "test-devices" - test_packages: "./devices/..." - <<: *IGNORE_FOR_UI_BRANCHES - - test-machine: - name: "test-other" - exclude_packages: "./api|./client|./drivers/docker|./drivers/exec|./drivers/rkt|./drivers/shared/executor|./nomad|./devices" - <<: *IGNORE_FOR_UI_BRANCHES - - test-machine: - name: "test-docker" - test_packages: "./drivers/docker" - # docker is misbehaving in docker-machine-recent image - # and we get unexpected failures - # e.g. https://circleci.com/gh/hashicorp/nomad/3854 - executor: go-machine - <<: *IGNORE_FOR_UI_BRANCHES - - test-machine: - name: "test-exec" - test_packages: "./drivers/exec" - <<: *IGNORE_FOR_UI_BRANCHES - - test-machine: - name: "test-shared-exec" - test_packages: "./drivers/shared/executor" - <<: *IGNORE_FOR_UI_BRANCHES - - test-machine: - name: "test-32bit" - # Currently we only explicitly test fingerprinting on 32bit - # architectures. - test_packages: "./client/fingerprint" - goarch: "386" - <<: *IGNORE_FOR_UI_BRANCHES - - test-rkt: - <<: *IGNORE_FOR_UI_BRANCHES - - test-e2e: - <<: *IGNORE_FOR_UI_BRANCHES - - test-ui - - test-website - - website: - jobs: - - build-website: - context: static-sites - filters: - branches: - only: stable-website -executors: - go: - working_directory: /go/src/github.com/hashicorp/nomad - docker: - - image: circleci/golang:1.12.9 - go-machine: - working_directory: ~/go/src/github.com/hashicorp/nomad +### *** +### WARNING: DO NOT manually EDIT or MERGE this file, it is generated by 'make ci-config'. +### INSTEAD: Edit or merge the source in config/ then run 'make ci-config'. +### *** +version: 2 +jobs: + test-nomad: machine: - image: circleci/classic:201808-01 - docker-builder: + image: ubuntu-1604:201903-01 working_directory: ~/go/src/github.com/hashicorp/nomad - machine: true # TODO: Find latest docker image id + environment: + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: ./nomad/... + - GOTEST_PKGS_EXCLUDE: '' + - GOTESTARCH: amd64 + steps: + - checkout + - run: + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz + name: install golang + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + name: Install 32bit gcc libs + - run: + command: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi - # uses a more recent image with unattended upgrades disabled properly - # but seems to break docker builds - go-machine-recent: - working_directory: ~/go/src/github.com/hashicorp/nomad + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi + + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports + test-api: machine: image: ubuntu-1604:201903-01 - -jobs: - build-deps-image: - executor: docker-builder - steps: - - checkout - - run: docker build -t hashicorpnomad/ci-build-image:$CIRCLE_SHA1 . -f ./Dockerfile.ci - - run: docker push hashicorpnomad/ci-build-image:$CIRCLE_SHA1 - - lint-go: - executor: go + working_directory: ~/go/src/github.com/hashicorp/nomad environment: - <<: *COMMON_ENVS - GOPATH: /go + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: ./api/... + - GOTEST_PKGS_EXCLUDE: '' + - GOTESTARCH: amd64 steps: - - checkout - - install-protoc - - run: sudo apt-get update && sudo apt-get install shellcheck - - run: make deps lint-deps - - run: make check - - run: make checkscripts + - checkout + - run: + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz + name: install golang + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + name: Install 32bit gcc libs + - run: + command: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi - test-container: - executor: go - parameters: - test_packages: - type: string - default: "" - exclude_packages: - type: string - default: "" - goarch: - type: string - default: "amd64" - environment: - <<: *COMMON_ENVS - GOTEST_PKGS: "<< parameters.test_packages >>" - GOTEST_PKGS_EXCLUDE: "<< parameters.exclude_packages >>" - GOPATH: /go - GOTESTARCH: "<< parameters.goarch >>" - steps: - - checkout - - run: make deps - - install-protoc - - install-consul - - install-vault - - run-tests - - store_test_results: - path: /tmp/test-reports - - store_artifacts: - path: /tmp/test-reports + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi - test-e2e: - executor: go + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports + test-exec: + machine: + image: ubuntu-1604:201903-01 + working_directory: ~/go/src/github.com/hashicorp/nomad environment: - <<: *COMMON_ENVS - GOPATH: /go + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: ./drivers/exec + - GOTEST_PKGS_EXCLUDE: '' + - GOTESTARCH: amd64 steps: - - checkout - - run: make deps - - run: make e2e-test + - checkout + - run: + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz + name: install golang + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + name: Install 32bit gcc libs + - run: + command: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi - test-website: - executor: go-machine-recent - environment: - <<: *COMMON_ENVS - steps: - - checkout - - run: make test-website + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi - test-rkt: - executor: go-machine-recent + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports + test-client: + machine: + image: ubuntu-1604:201903-01 + working_directory: ~/go/src/github.com/hashicorp/nomad environment: - <<: *COMMON_ENVS - GOTEST_PKGS: "./drivers/rkt" - GOPATH: /home/circleci/go - RKT_VERSION: 1.29.0 + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: ./client/... + - GOTEST_PKGS_EXCLUDE: '' + - GOTESTARCH: amd64 steps: - - checkout - - install-golang - - install-protoc - - run: - name: install rkt - command: | - gpg --recv-key 18AD5014C99EF7E3BA5F6CE950BDD3E0FC8A365E - wget https://github.com/rkt/rkt/releases/download/v$RKT_VERSION/rkt_$RKT_VERSION-1_amd64.deb - wget https://github.com/rkt/rkt/releases/download/v$RKT_VERSION/rkt_$RKT_VERSION-1_amd64.deb.asc - gpg --verify rkt_$RKT_VERSION-1_amd64.deb.asc - sudo dpkg -i rkt_$RKT_VERSION-1_amd64.deb - - run: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap - - run-tests - - store_test_results: - path: /tmp/test-reports - - store_artifacts: - path: /tmp/test-reports + - checkout + - run: + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz + name: install golang + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + name: Install 32bit gcc libs + - run: + command: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi + + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi - test-machine: - executor: "<< parameters.executor >>" - parameters: - test_packages: - type: string - default: "" - exclude_packages: - type: string - default: "" - executor: - type: string - default: "go-machine-recent" - goarch: - type: string - default: "amd64" + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports + test-shared-exec: + machine: + image: ubuntu-1604:201903-01 + working_directory: ~/go/src/github.com/hashicorp/nomad environment: - <<: *COMMON_ENVS - GOTEST_PKGS_EXCLUDE: "<< parameters.exclude_packages >>" - GOTEST_PKGS: "<< parameters.test_packages >>" - GOPATH: /home/circleci/go - GOTESTARCH: "<< parameters.goarch >>" + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: ./drivers/shared/executor + - GOTEST_PKGS_EXCLUDE: '' + - GOTESTARCH: amd64 steps: - - checkout - - install-golang - - install-protoc - - install-consul - - install-vault - - run: - name: Install 32bit gcc libs - command: | - if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then - sudo apt-get update - sudo apt-get install -y gcc-multilib - else - echo "Skipping 32bit lib installation while building for not 386" - fi - - run: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap - - run-tests - - store_test_results: - path: /tmp/test-reports - - store_artifacts: - path: /tmp/test-reports + - checkout + - run: + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz + name: install golang + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + name: Install 32bit gcc libs + - run: + command: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi + + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi + + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports test-ui: docker: - - image: circleci/node:10-browsers - environment: - # See https://git.io/vdao3 for details. - JOBS: 2 + - environment: + JOBS: 2 + image: circleci/node:10-browsers steps: - - checkout - - restore_cache: - keys: - - v1-deps-{{ checksum "ui/yarn.lock" }} - - v1-deps- - - run: - name: yarn install - command: cd ui && yarn install - - save_cache: - key: v1-deps-{{ checksum "ui/yarn.lock" }} - paths: - - ./ui/node_modules - - run: - name: lint:js - command: cd ui && yarn run lint:js - - run: - name: lint:hbs - command: cd ui && yarn run lint:hbs - - run: - name: Ember tests - command: cd ui && yarn test - + - checkout + - restore_cache: + keys: + - v1-deps-{{ checksum "ui/yarn.lock" }} + - v1-deps- + - run: + command: cd ui && yarn install + name: yarn install + - save_cache: + key: v1-deps-{{ checksum "ui/yarn.lock" }} + paths: + - ./ui/node_modules + - run: + command: cd ui && yarn run lint:js + name: lint:js + - run: + command: cd ui && yarn run lint:hbs + name: lint:hbs + - run: + command: cd ui && yarn test + name: Ember tests + lint-go: + docker: + - image: golang:1.12.16 + working_directory: /go/src/github.com/hashicorp/nomad + steps: + - checkout + - run: + command: apt-get update; apt-get install -y shellcheck sudo unzip + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: "CCI_VERSION=\"0.1.5879\"\nCCI_SHA256=\"f178ea62c781aec06267017404f87983c87f171fd0e66ef3737916246ae66dd6\"\n\nURL=\"https://github.com/CircleCI-Public/circleci-cli/releases/download/v${CCI_VERSION}/circleci-cli_${CCI_VERSION}_linux_amd64.tar.gz\"\n\nmkdir -p /tmp/circleci-cli/\ncurl --fail --show-error --location \\\n -o /tmp/circleci-cli/cli.tar.gz \"${URL}\"\n\necho \"$CCI_SHA256 /tmp/circleci-cli/cli.tar.gz\" | sha256sum -c\n\ntar -xz --strip-components=1 \\\n -C /tmp/circleci-cli \\\n -f /tmp/circleci-cli/cli.tar.gz \\\n \"circleci-cli_${CCI_VERSION}_linux_amd64/circleci\" \n\nsudo cp /tmp/circleci-cli/circleci /usr/bin/circleci-local-cli\n\ncircleci-local-cli version\n" + name: Install CircleCI CLI 0.1.5879 + - run: + command: make deps lint-deps + - run: + command: make check + - run: + command: make checkscripts + - run: + command: make -C .circleci CIRCLECI="circleci-local-cli --skip-update-check" ci-verify + name: check .circleci/config.yml is up-to-date + environment: + - GIT_PAGER: cat + - GOMAXPROCS: 1 + - GOPATH: /go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat build-website: - # setting the working_directory along with the checkout path allows us to not have - # to cd into the website/ directory for commands - working_directory: ~/project/website docker: - - image: hashicorp/middleman-hashicorp:0.3.35 + - image: hashicorp/middleman-hashicorp:0.3.35 steps: - - checkout: - path: ~/project - - # restores gem cache - - restore_cache: - key: static-site-gems-v1-{{ checksum "Gemfile.lock" }} - - - run: - name: install gems - command: bundle check || bundle install --path vendor/bundle --retry=3 + - checkout: + path: ~/project + - restore_cache: + key: static-site-gems-v1-{{ checksum "Gemfile.lock" }} + - run: + command: bundle check || bundle install --path vendor/bundle --retry=3 + name: install gems + - save_cache: + key: static-site-gems-v1-{{ checksum "Gemfile.lock" }} + paths: + - ~/project/website/vendor/bundle + - run: + command: bundle exec middleman build + name: middleman build + - run: + command: ./scripts/deploy.sh + name: website deploy + working_directory: ~/project/website + test-other: + machine: + image: ubuntu-1604:201903-01 + working_directory: ~/go/src/github.com/hashicorp/nomad + environment: + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: '' + - GOTEST_PKGS_EXCLUDE: ./api|./client|./drivers/docker|./drivers/exec|./drivers/rkt|./drivers/shared/executor|./nomad|./devices + - GOTESTARCH: amd64 + steps: + - checkout + - run: + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz + name: install golang + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + name: Install 32bit gcc libs + - run: + command: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi - # saves gem cache if we have changed the Gemfile - - save_cache: - key: static-site-gems-v1-{{ checksum "Gemfile.lock" }} - paths: - - ~/project/website/vendor/bundle + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi - - run: - name: middleman build - command: bundle exec middleman build + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports + test-devices: + docker: + - image: golang:1.12.16 + working_directory: /go/src/github.com/hashicorp/nomad + environment: + - GIT_PAGER: cat + - GOMAXPROCS: 1 + - GOPATH: /go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: ./devices/... + - GOTEST_PKGS_EXCLUDE: '' + - GOTESTARCH: amd64 + steps: + - checkout + - run: + command: apt-get update; apt-get install -y shellcheck sudo unzip + - run: + command: make deps + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi - - run: - name: website deploy - command: ./scripts/deploy.sh + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi -commands: - install-golang: - parameters: - version: - type: string - default: "1.12.9" + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports + test-website: + machine: + image: ubuntu-1604:201903-01 + working_directory: ~/go/src/github.com/hashicorp/nomad steps: - - run: - name: install golang << parameters.version >> - command: | - sudo rm -rf /usr/local/go - wget -q -O /tmp/golang.tar.gz https://dl.google.com/go/go<< parameters.version >>.linux-amd64.tar.gz - sudo tar -C /usr/local -xzf /tmp/golang.tar.gz - rm -rf /tmp/golang.tar.gz - - install-vault: - parameters: - version: - type: string - default: 1.0.0 + - checkout + - run: + command: make test-website + environment: + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + test-docker: + machine: + image: circleci/classic:201808-01 + working_directory: ~/go/src/github.com/hashicorp/nomad + environment: + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: ./drivers/docker + - GOTEST_PKGS_EXCLUDE: '' + - GOTESTARCH: amd64 steps: - - run: - name: Install Vault << parameters.version >> - command: | - wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/<< parameters.version >>/vault_<< parameters.version>>_linux_amd64.zip - sudo unzip -d /usr/local/bin /tmp/vault.zip - rm -rf /tmp/vault* + - checkout + - run: + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz + name: install golang + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + name: Install 32bit gcc libs + - run: + command: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi - install-consul: - parameters: - version: - type: string - default: 1.6.0-rc1 - steps: - - run: - name: Install Consul << parameters.version >> - command: | - wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/<< parameters.version >>/consul_<< parameters.version >>_linux_amd64.zip - sudo unzip -d /usr/local/bin /tmp/consul.zip - rm -rf /tmp/consul* + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi - install-protoc: + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports + build-binaries: + docker: + - image: golang:1.12.16 + working_directory: /go/src/github.com/hashicorp/nomad + environment: + - GIT_PAGER: cat + - GOMAXPROCS: 1 + - GOPATH: /go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GO_TAGS: codegen_generated steps: - - run: - name: install protoc - command: | - sudo rm -rf /usr/bin/protoc - sudo ./scripts/vagrant-linux-priv-protoc.sh - - run-tests: + - checkout + - run: + command: apt-get update; apt-get install -y sudo unzip zip + - run: + command: make deps + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + - run: + command: make pkg/windows_amd64.zip pkg/linux_amd64.zip + - store_artifacts: + destination: /builds/nomad_windows_amd64.zip + path: pkg/windows_amd64.zip + - store_artifacts: + destination: /builds/nomad_linux_amd64.zip + path: pkg/linux_amd64.zip + test-e2e: + docker: + - image: golang:1.12.16 + working_directory: /go/src/github.com/hashicorp/nomad steps: - - run: - name: Running Nomad Tests - command: | - if [ -z $GOTEST_PKGS_EXCLUDE ]; - then - unset GOTEST_PKGS_EXCLUDE - else - unset GOTEST_PKGS - fi + - checkout + - run: + command: apt-get update; apt-get install -y sudo unzip + - run: + command: | + groupadd --gid 3434 circleci + useradd --uid 3434 --gid circleci --shell /bin/bash --create-home circleci + echo 'circleci ALL=NOPASSWD: ALL' >> /etc/sudoers.d/50-circleci + echo 'Defaults env_keep += "DEBIAN_FRONTEND"' >> /etc/sudoers.d/env_keep + chown -R circleci:circleci /go + name: prepare non-root user + - run: + command: sudo -E -H -u circleci PATH=${PATH} make deps + - run: + command: sudo -E -H -u circleci PATH=${PATH} make e2e-test + environment: + - GIT_PAGER: cat + - GOMAXPROCS: 1 + - GOPATH: /go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + test-32bit: + machine: + image: ubuntu-1604:201903-01 + working_directory: ~/go/src/github.com/hashicorp/nomad + environment: + - GIT_PAGER: cat + - GOLANG_VERSION: 1.12.16 + - GOMAXPROCS: 1 + - GOPATH: /home/circleci/go + - GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + - NOMAD_SLOW_TEST: 1 + - PAGER: cat + - GOTEST_PKGS: ./client/fingerprint + - GOTEST_PKGS_EXCLUDE: '' + - GOTESTARCH: '386' + steps: + - checkout + - run: + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz + name: install golang + - run: + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh + name: install protoc + - run: + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* + name: Install Consul 1.6.1 + - run: + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/1.2.3/vault_1.2.3_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* + name: Install Vault 1.2.3 + - run: + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + name: Install 32bit gcc libs + - run: + command: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run: + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi - if [ ! -z $GOTESTARCH ]; then - export GOARCH="$GOTESTARCH"; - fi + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi - mkdir -p /tmp/test-reports - sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs - sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad + name: Running Nomad Tests + no_output_timeout: 20m + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports +workflows: + build-test: + jobs: + - build-binaries: + filters: + branches: + ignore: + - stable-website + - lint-go: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-client: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-nomad: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-api: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-devices: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-other: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-docker: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-exec: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-shared-exec: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-32bit: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-e2e: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + - test-ui: + filters: + branches: + ignore: + - stable-website + - /^docs-.*/ + - test-website: + filters: + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website + website: + jobs: + - build-website: + filters: + branches: + only: stable-website + context: static-sites + version: 2 diff --git a/.circleci/config/commands/install-circleci-local-cli.yml b/.circleci/config/commands/install-circleci-local-cli.yml new file mode 100644 index 00000000000..5b89a3f698c --- /dev/null +++ b/.circleci/config/commands/install-circleci-local-cli.yml @@ -0,0 +1,31 @@ +parameters: + version: + type: string + default: 0.1.5879 + + sha256: + type: string + default: f178ea62c781aec06267017404f87983c87f171fd0e66ef3737916246ae66dd6 +steps: + - run: + name: Install CircleCI CLI << parameters.version >> + command: | + CCI_VERSION="<< parameters.version >>" + CCI_SHA256="<< parameters.sha256 >>" + + URL="https://github.com/CircleCI-Public/circleci-cli/releases/download/v${CCI_VERSION}/circleci-cli_${CCI_VERSION}_linux_amd64.tar.gz" + + mkdir -p /tmp/circleci-cli/ + curl --fail --show-error --location \ + -o /tmp/circleci-cli/cli.tar.gz "${URL}" + + echo "$CCI_SHA256 /tmp/circleci-cli/cli.tar.gz" | sha256sum -c + + tar -xz --strip-components=1 \ + -C /tmp/circleci-cli \ + -f /tmp/circleci-cli/cli.tar.gz \ + "circleci-cli_${CCI_VERSION}_linux_amd64/circleci" + + sudo cp /tmp/circleci-cli/circleci /usr/bin/circleci-local-cli + + circleci-local-cli version diff --git a/.circleci/config/commands/install-consul.yml b/.circleci/config/commands/install-consul.yml new file mode 100644 index 00000000000..75aeb3b81f2 --- /dev/null +++ b/.circleci/config/commands/install-consul.yml @@ -0,0 +1,11 @@ +parameters: + version: + type: string + default: 1.6.1 +steps: + - run: + name: Install Consul << parameters.version >> + command: | + wget -q -O /tmp/consul.zip https://releases.hashicorp.com/consul/<< parameters.version >>/consul_<< parameters.version >>_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/consul.zip + rm -rf /tmp/consul* diff --git a/.circleci/config/commands/install-golang.yml b/.circleci/config/commands/install-golang.yml new file mode 100644 index 00000000000..485ffd9e1c2 --- /dev/null +++ b/.circleci/config/commands/install-golang.yml @@ -0,0 +1,10 @@ +steps: + - run: + name: install golang + command: | + set -x + echo installing golang ${GOLANG_VERSION} + sudo rm -rf /usr/local/go + wget -O /tmp/golang.tar.gz https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz + sudo tar -C /usr/local -xzf /tmp/golang.tar.gz + rm -rf /tmp/golang.tar.gz diff --git a/.circleci/config/commands/install-protoc.yml b/.circleci/config/commands/install-protoc.yml new file mode 100644 index 00000000000..db0d0dad7e4 --- /dev/null +++ b/.circleci/config/commands/install-protoc.yml @@ -0,0 +1,6 @@ +steps: + - run: + name: install protoc + command: | + sudo rm -rf /usr/bin/protoc + sudo ./scripts/vagrant-linux-priv-protoc.sh diff --git a/.circleci/config/commands/install-vault.yml b/.circleci/config/commands/install-vault.yml new file mode 100644 index 00000000000..3e52cbee22c --- /dev/null +++ b/.circleci/config/commands/install-vault.yml @@ -0,0 +1,11 @@ +parameters: + version: + type: string + default: 1.2.3 +steps: + - run: + name: Install Vault << parameters.version >> + command: | + wget -q -O /tmp/vault.zip https://releases.hashicorp.com/vault/<< parameters.version >>/vault_<< parameters.version>>_linux_amd64.zip + sudo unzip -d /usr/local/bin /tmp/vault.zip + rm -rf /tmp/vault* diff --git a/.circleci/config/commands/run-tests.yml b/.circleci/config/commands/run-tests.yml new file mode 100644 index 00000000000..9a90841d382 --- /dev/null +++ b/.circleci/config/commands/run-tests.yml @@ -0,0 +1,19 @@ +steps: + - run: + name: Running Nomad Tests + no_output_timeout: 20m + command: | + if [ -z $GOTEST_PKGS_EXCLUDE ]; + then + unset GOTEST_PKGS_EXCLUDE + else + unset GOTEST_PKGS + fi + + if [ ! -z $GOTESTARCH ]; then + export GOARCH="$GOTESTARCH"; + fi + + mkdir -p /tmp/test-reports + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make test-nomad diff --git a/.circleci/config/config.yml b/.circleci/config/config.yml new file mode 100644 index 00000000000..b7046d0b732 --- /dev/null +++ b/.circleci/config/config.yml @@ -0,0 +1,44 @@ +version: 2.1 + +references: + # environment specific references - aim to avoid conflicts + go-machine-image: &go_machine_image + circleci/classic:201808-01 + go-machine-recent-image: &go_machine_recent_image + ubuntu-1604:201903-01 + + # common references + common_envs: &common_envs + GOMAXPROCS: 1 + NOMAD_SLOW_TEST: 1 + GOTESTSUM_JUNITFILE: /tmp/test-reports/results.xml + # disable implicit git paging. CircleCI runs commands with in a tty + # making git assume it's an interactive session. + PAGER: cat + GIT_PAGER: cat + +executors: + go: + working_directory: /go/src/github.com/hashicorp/nomad + docker: + - image: golang:1.12.16 + environment: + <<: *common_envs + GOPATH: /go + + go-machine: + working_directory: ~/go/src/github.com/hashicorp/nomad + machine: + image: *go_machine_image + environment: &machine_env + <<: *common_envs + GOPATH: /home/circleci/go + GOLANG_VERSION: 1.12.16 + + # uses a more recent image with unattended upgrades disabled properly + # but seems to break docker builds + go-machine-recent: + working_directory: ~/go/src/github.com/hashicorp/nomad + machine: + image: *go_machine_recent_image + environment: *machine_env diff --git a/.circleci/config/jobs/build-binaries.yml b/.circleci/config/jobs/build-binaries.yml new file mode 100644 index 00000000000..21a0079c524 --- /dev/null +++ b/.circleci/config/jobs/build-binaries.yml @@ -0,0 +1,17 @@ +executor: go +environment: + # TODO: add ui tag here + GO_TAGS: "codegen_generated" +steps: + - checkout + - run: apt-get update; apt-get install -y sudo unzip zip + - run: make deps + - install-protoc + - run: sudo -E PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make generate-structs + - run: make pkg/windows_amd64.zip pkg/linux_amd64.zip + - store_artifacts: + path: pkg/windows_amd64.zip + destination: /builds/nomad_windows_amd64.zip + - store_artifacts: + path: pkg/linux_amd64.zip + destination: /builds/nomad_linux_amd64.zip diff --git a/.circleci/config/jobs/build-website.yml b/.circleci/config/jobs/build-website.yml new file mode 100644 index 00000000000..3dc1384c3b2 --- /dev/null +++ b/.circleci/config/jobs/build-website.yml @@ -0,0 +1,30 @@ +# setting the working_directory along with the checkout path allows us to not have +# to cd into the website/ directory for commands +working_directory: ~/project/website +docker: + - image: hashicorp/middleman-hashicorp:0.3.35 +steps: + - checkout: + path: ~/project + + # restores gem cache + - restore_cache: + key: static-site-gems-v1-{{ checksum "Gemfile.lock" }} + + - run: + name: install gems + command: bundle check || bundle install --path vendor/bundle --retry=3 + + # saves gem cache if we have changed the Gemfile + - save_cache: + key: static-site-gems-v1-{{ checksum "Gemfile.lock" }} + paths: + - ~/project/website/vendor/bundle + + - run: + name: middleman build + command: bundle exec middleman build + + - run: + name: website deploy + command: ./scripts/deploy.sh diff --git a/.circleci/config/jobs/lint-go.yml b/.circleci/config/jobs/lint-go.yml new file mode 100644 index 00000000000..72e95501033 --- /dev/null +++ b/.circleci/config/jobs/lint-go.yml @@ -0,0 +1,12 @@ +executor: go +steps: + - checkout + - run: apt-get update; apt-get install -y shellcheck sudo unzip + - install-protoc + - install-circleci-local-cli + - run: make deps lint-deps + - run: make check + - run: make checkscripts + - run: + name: check .circleci/config.yml is up-to-date + command: make -C .circleci CIRCLECI="circleci-local-cli --skip-update-check" ci-verify diff --git a/.circleci/config/jobs/test-container.yml b/.circleci/config/jobs/test-container.yml new file mode 100644 index 00000000000..744f931d030 --- /dev/null +++ b/.circleci/config/jobs/test-container.yml @@ -0,0 +1,27 @@ +executor: go +parameters: + test_packages: + type: string + default: "" + exclude_packages: + type: string + default: "" + goarch: + type: string + default: "amd64" +environment: + GOTEST_PKGS: "<< parameters.test_packages >>" + GOTEST_PKGS_EXCLUDE: "<< parameters.exclude_packages >>" + GOTESTARCH: "<< parameters.goarch >>" +steps: + - checkout + - run: apt-get update; apt-get install -y shellcheck sudo unzip + - run: make deps + - install-protoc + - install-consul + - install-vault + - run-tests + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports diff --git a/.circleci/config/jobs/test-e2e.yml b/.circleci/config/jobs/test-e2e.yml new file mode 100644 index 00000000000..103cc7fb964 --- /dev/null +++ b/.circleci/config/jobs/test-e2e.yml @@ -0,0 +1,17 @@ +executor: go +steps: + - checkout + - run: apt-get update; apt-get install -y sudo unzip + # e2e tests require privileged mount/umount permissions when running as root + # TODO: switch to using machine executor and run as root to test e2e path + - run: + name: prepare non-root user + command: | + groupadd --gid 3434 circleci + useradd --uid 3434 --gid circleci --shell /bin/bash --create-home circleci + echo 'circleci ALL=NOPASSWD: ALL' >> /etc/sudoers.d/50-circleci + echo 'Defaults env_keep += "DEBIAN_FRONTEND"' >> /etc/sudoers.d/env_keep + chown -R circleci:circleci /go + + - run: sudo -E -H -u circleci PATH=${PATH} make deps + - run: sudo -E -H -u circleci PATH=${PATH} make e2e-test diff --git a/.circleci/config/jobs/test-machine.yml b/.circleci/config/jobs/test-machine.yml new file mode 100644 index 00000000000..755a99fcc3b --- /dev/null +++ b/.circleci/config/jobs/test-machine.yml @@ -0,0 +1,39 @@ +executor: "<< parameters.executor >>" +parameters: + test_packages: + type: string + default: "" + exclude_packages: + type: string + default: "" + executor: + type: string + default: "go-machine-recent" + goarch: + type: string + default: "amd64" +environment: + GOTEST_PKGS_EXCLUDE: "<< parameters.exclude_packages >>" + GOTEST_PKGS: "<< parameters.test_packages >>" + GOTESTARCH: "<< parameters.goarch >>" +steps: + - checkout + - install-golang + - install-protoc + - install-consul + - install-vault + - run: + name: Install 32bit gcc libs + command: | + if [ ! -z $GOTESTARCH ] && [ $GOTESTARCH == "386" ]; then + sudo apt-get update + sudo apt-get install -y gcc-multilib + else + echo "Skipping 32bit lib installation while building for not 386" + fi + - run: PATH="$GOPATH/bin:/usr/local/go/bin:$PATH" make bootstrap + - run-tests + - store_test_results: + path: /tmp/test-reports + - store_artifacts: + path: /tmp/test-reports diff --git a/.circleci/config/jobs/test-ui.yml b/.circleci/config/jobs/test-ui.yml new file mode 100644 index 00000000000..d29c0f92bfc --- /dev/null +++ b/.circleci/config/jobs/test-ui.yml @@ -0,0 +1,27 @@ +docker: + - image: circleci/node:10-browsers + environment: + # See https://git.io/vdao3 for details. + JOBS: 2 +steps: + - checkout + - restore_cache: + keys: + - v1-deps-{{ checksum "ui/yarn.lock" }} + - v1-deps- + - run: + name: yarn install + command: cd ui && yarn install + - save_cache: + key: v1-deps-{{ checksum "ui/yarn.lock" }} + paths: + - ./ui/node_modules + - run: + name: lint:js + command: cd ui && yarn run lint:js + - run: + name: lint:hbs + command: cd ui && yarn run lint:hbs + - run: + name: Ember tests + command: cd ui && yarn test diff --git a/.circleci/config/jobs/test-website.yml b/.circleci/config/jobs/test-website.yml new file mode 100644 index 00000000000..0a54aa06a07 --- /dev/null +++ b/.circleci/config/jobs/test-website.yml @@ -0,0 +1,4 @@ +executor: go-machine-recent +steps: + - checkout + - run: make test-website diff --git a/.circleci/config/workflows/build-test.yml b/.circleci/config/workflows/build-test.yml new file mode 100644 index 00000000000..f3d7f7b767b --- /dev/null +++ b/.circleci/config/workflows/build-test.yml @@ -0,0 +1,70 @@ +jobs: +- build-binaries: + # almost always build binaries as they may be needed + # for e2e tests + filters: + branches: + ignore: + - stable-website +- lint-go: + filters: &backend_branches_filter + branches: + ignore: + - /^.-ui\b.*/ + - /^docs-.*/ + - stable-website +- test-machine: + name: "test-client" + test_packages: "./client/..." + filters: *backend_branches_filter +- test-machine: + name: "test-nomad" + test_packages: "./nomad/..." + filters: *backend_branches_filter +- test-machine: + # API Tests run in a VM rather than container due to the FS tests + # requiring `mount` priviliges. + name: "test-api" + test_packages: "./api/..." + filters: *backend_branches_filter +- test-container: + name: "test-devices" + test_packages: "./devices/..." + filters: *backend_branches_filter +- test-machine: + name: "test-other" + exclude_packages: "./api|./client|./drivers/docker|./drivers/exec|./drivers/rkt|./drivers/shared/executor|./nomad|./devices" + filters: *backend_branches_filter +- test-machine: + name: "test-docker" + test_packages: "./drivers/docker" + # docker is misbehaving in docker-machine-recent image + # and we get unexpected failures + # e.g. https://circleci.com/gh/hashicorp/nomad/3854 + executor: go-machine + filters: *backend_branches_filter +- test-machine: + name: "test-exec" + test_packages: "./drivers/exec" + filters: *backend_branches_filter +- test-machine: + name: "test-shared-exec" + test_packages: "./drivers/shared/executor" + filters: *backend_branches_filter +- test-machine: + name: "test-32bit" + # Currently we only explicitly test fingerprinting on 32bit + # architectures. + test_packages: "./client/fingerprint" + goarch: "386" + filters: *backend_branches_filter +- test-e2e: + filters: *backend_branches_filter +- test-ui: + filters: + branches: + ignore: + - stable-website + - /^docs-.*/ +- test-website: + filters: *backend_branches_filter diff --git a/.circleci/config/workflows/website.yml b/.circleci/config/workflows/website.yml new file mode 100644 index 00000000000..519c460e591 --- /dev/null +++ b/.circleci/config/workflows/website.yml @@ -0,0 +1,6 @@ +jobs: + - build-website: + context: static-sites + filters: + branches: + only: stable-website diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000000..7ddae79070e --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,3 @@ +# Code-freeze: Docs will require approval by the Digital Marketing team +# during the website infrastructure migration. +/website/ @hashicorp/digital-marketing diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 407a32c3bf0..1d4b00868ea 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,3 +1,5 @@ +For reporting security vulnerabilities [please refer to the website.](https://www.nomadproject.io/security.html) + If you have a question, prepend your issue with `[question]` or preferably use the [nomad mailing list](https://www.nomadproject.io/community.html). If filing a bug please include the following: diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 00000000000..cb9e95a7ebe --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,3 @@ +# Security Policy + +Please see https://www.nomadproject.io/security.html diff --git a/.gitignore b/.gitignore index 25e622ddf04..3713b3b558a 100644 --- a/.gitignore +++ b/.gitignore @@ -28,8 +28,8 @@ _testmain.go *.test *.prof -tags -bin/ +/tags +/bin/ /pkg/ .vagrant/ website/build/ @@ -86,6 +86,8 @@ rkt-* /ui/libpeerconnection.log /ui/npm-debug.log* /ui/testem.log +/ui/.env* +/ui/.pnp* .ignore # ember-try diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000000..09b63e45d07 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,71 @@ +run: + # timeout for analysis, e.g. 30s, 5m, default is 1m + deadline: 10m + + tests: false + + # which dirs to skip: they won't be analyzed; + # can use regexp here: generated.*, regexp is applied on full path; + # default value is empty list, but next dirs are always skipped independently + # from this option's value: + # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ + skip-dirs: + - ui + + # which files to skip: they will be analyzed, but issues from them + # won't be reported. Default value is empty list, but there is + # no need to include all autogenerated files, we confidently recognize + # autogenerated files. If it's not please let us know. + skip-files: + - ".*\\.generated\\.go$" + - ".*bindata_assetfs\\.go$" + +# output configuration options +output: + # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" + format: colored-line-number + + # print lines of code with issue, default is true + print-issued-lines: true + + # print linter name in the end of issue text, default is true + print-linter-name: true + +# all available settings of specific linters +linters-settings: + errcheck: + # report about not checking of errors in type assetions: `a := b.(MyStruct)`; + # default is false: such cases aren't reported by default. + check-type-assertions: false + + # [deprecated] comma-separated list of pairs of the form pkg:regex + # the regex is used to ignore names within pkg. (default "fmt:.*"). + # see https://github.com/kisielk/errcheck#the-deprecated-method for details + ignore: fmt:.*,io/ioutil:^Read.* + + # path to a file containing a list of functions to exclude from checking + # see https://github.com/kisielk/errcheck#excluding-functions for details + # exclude: /path/to/file.txt + govet: + # report about shadowed variables + check-shadowing: false + gofmt: + # simplify code: gofmt with `-s` option, true by default + simplify: true + +linters: + disable-all: true + enable: + - goimports + - misspell + - govet + - deadcode + - varcheck + - ineffassign + - structcheck + - unconvert + - gofmt + # Stretch Goal + #- maligned + fast: false + diff --git a/CHANGELOG.md b/CHANGELOG.md index ec6cd292901..fade46942df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,26 +1,194 @@ -## 0.10.0 (Unreleased) +## 0.10.4 (Unreleased) + +FEATURES: + + * api: Nomad now supports ability to remotely request /debug/pprof endpoints from a remote agent. [[GH-6841](https://github.com/hashicorp/nomad/issues/6841)] + * consul/connect: Nomad may now register Consul Connect services when Consul is configured with ACLs enabled [[GH-6701](https://github.com/hashicorp/nomad/issues/6701)] + * jobspec: Add `shutdown_delay` to task groups so task groups can delay shutdown after deregistering from Consul [[GH-6746](https://github.com/hashicorp/nomad/issues/6746)] + +IMPROVEMENTS: + + * Our Windows 32-bit and 64-bit executables for this version and up will be signed with a HashiCorp cert. Windows users will no longer see a warning about an "unknown publisher" when running our software. + * build: Updated to Go 1.12.16 [[GH-7009](https://github.com/hashicorp/nomad/issues/7009)] + * cli: Included namespace in output when querying job status [[GH-6912](https://github.com/hashicorp/nomad/issues/6912)] + * cli: Added option to change the name of the file created by the `nomad init` command [[GH-6520]](https://github.com/hashicorp/nomad/pull/6520) + * client: Supported AWS EC2 Instance Metadata Service Version 2 (IMDSv2) [[GH-6779](https://github.com/hashicorp/nomad/issues/6779)] + * consul: Add support for service `canary_meta` [[GH-6690](https://github.com/hashicorp/nomad/pull/6690)] + * driver/docker: Added a `disable_log_collection` parameter to disable nomad log collection [[GH-6820](https://github.com/hashicorp/nomad/issues/6820)] + * server: Introduced a `default_scheduler_config` config parameter to seed initial preemption configuration. [[GH-6935](https://github.com/hashicorp/nomad/issues/6935)] + * scheduler: Removed penalty for allocation's previous node if the allocation did not fail. [[GH-6781](https://github.com/hashicorp/nomad/issues/6781)] + * scheduler: Reduced logging verbosity during preemption [[GH-6849](https://github.com/hashicorp/nomad/issues/6849)] + * ui: Updated Run Job button to be conditionally enabled according to ACLs [[GH-5944](https://github.com/hashicorp/nomad/pull/5944)] + +BUG FIXES: + + * agent: Fixed a panic when using `nomad monitor` on a client node [[GH-7053](https://github.com/hashicorp/nomad/issues/7053)] + * agent: Fixed race condition in logging when using `nomad monitor` command [[GH-6872](https://github.com/hashicorp/nomad/issues/6872)] + * agent: Fixed a bug where `nomad monitor -server-id` only work for a server's name instead of uuid or name [[GH-7015](https://github.com/hashicorp/nomad/issues/7015)] + * core: Addressed an inconsistency where allocations created prior to 0.9 had missing fields [[GH-6922](https://github.com/hashicorp/nomad/issues/6922)] + * cli: Fixed a bug where error messages appeared interleaved with help text inconsistently [[GH-6865](https://github.com/hashicorp/nomad/issues/6865)] + * cli: Fixed a bug where `nomad monitor -node-id` would cause a cli panic when no nodes where found [[GH-6828](https://github.com/hashicorp/nomad/issues/6828)] + * config: Fixed a bug where agent startup would fail if the `consul.timeout` configuration was set [[GH-6907](https://github.com/hashicorp/nomad/issues/6907)] + * consul: Fixed a bug where script-based health checks would fail if the service configuration included interpolation [[GH-6916](https://github.com/hashicorp/nomad/issues/6916)] + * consul/connect: Fixed a bug where Connect-enabled jobs failed to validate when service names used interpolation [[GH-6855](https://github.com/hashicorp/nomad/issues/6855)] + * drivers: Fixed a bug where exec, java, and raw_exec drivers collected and emited stats every second regardless of the telemetry config [[GH-7043](https://github.com/hashicorp/nomad/issues/7043)] + * driver/exec: Fixed a bug where systemd cgroup wasn't removed upon a task completion [[GH-6839](https://github.com/hashicorp/nomad/issues/6839)] + * server: Fixed a deadlock that may occur when server leadership flaps very quickly [[GH-6977](https://github.com/hashicorp/nomad/issues/6977)] + * scheduler: Fixed a bug that caused evicted allocs on a lost node to be stuck in running [[GH-6902](https://github.com/hashicorp/nomad/issues/6902)] + * scheduler: Fixed a bug where `nomad job plan/apply` returned errors instead of ignoring system job updates for ineligible nodes. [[GH-6996](https://github.com/hashicorp/nomad/issues/6996)] + +SECURITY: + + * client: Nomad will no longer pass through the `CONSUL_HTTP_TOKEN` environment variable when launching a task. [[GH-7131](https://github.com/hashicorp/nomad/issues/7131)] + +## 0.10.3 (January 29, 2020) + +SECURITY: + + * agent: Added unauthenticated connection timeouts and limits to prevent resource exhaustion. CVE-2020-7218 [[GH-7002](https://github.com/hashicorp/nomad/issues/7002)] + * server: Fixed insufficient validation for role and region for RPC connections when TLS enabled. CVE-2020-7956 [[GH-7003](https://github.com/hashicorp/nomad/issues/7003)] + +IMPROVEMENTS: + + * build: Updated to Go 1.12.16 + +## 0.10.2 (December 4, 2019) + +NOTES: + +* cli: Our [nomad_0.10.2_darwin_amd64_notarized](https://releases.hashicorp.com/nomad/0.10.2/nomad_0.10.2_darwin_amd64_notarized.zip) release has been signed and notarized according to Apple's requirements. In the future, darwin releases will be signed and notarized with our standard naming convention. + + Prior to this release, MacOS 10.15+ users attempting to run our software may see the error: "'nomad' cannot be opened because the developer cannot be verified." This error affected all MacOS 10.15+ users who downloaded our software directly via web browsers, and was caused by [changes to Apple's third-party software requirements](https://developer.apple.com/news/?id=04102019a). + + MacOS 10.15+ users should plan to upgrade to 0.10.2+. + +FEATURES: + + * **Nomad Monitor**: New `nomad monitor` command allows remotely following + the logs of any Nomad Agent (clients or servers). See + https://nomadproject.io/docs/commands/monitor.html + * **Docker Container Cleanup**: Nomad will now automatically remove Docker + containers for tasks leaked due to Nomad or Docker crashes or bugs. + +IMPROVEMENTS: + + * agent: Added support for running under Windows Service Manager [[GH-6220](https://github.com/hashicorp/nomad/issues/6220)] + * api: Added `StartedAt` field to `Node.DrainStrategy` [[GH-6698](https://github.com/hashicorp/nomad/issues/6698)] + * api: Added JSON representation of rules to policy endpoint response [[GH-6017](https://github.com/hashicorp/nomad/pull/6017)] + * api: Update policy endpoint to permit anonymous access [[GH-6021](https://github.com/hashicorp/nomad/issues/6021)] + * build: Updated to Go 1.12.13 [[GH-6606](https://github.com/hashicorp/nomad/issues/6606)] + * cli: Show full ID in node and alloc individual status views [[GH-6425](https://github.com/hashicorp/nomad/issues/6425)] + * client: Enable setting tags on Consul Connect sidecar service [[GH-6448](https://github.com/hashicorp/nomad/issues/6448)] + * client: Added support for downloading artifacts from Google Cloud Storage [[GH-6692](https://github.com/hashicorp/nomad/pull/6692)] + * command: Added -tls-server-name flag [[GH-6370](https://github.com/hashicorp/nomad/issues/6370)] + * command: Added `nomad monitor` command to stream logs at a specified level for debugging [[GH-6499](https://github.com/hashicorp/nomad/issues/6499)] + * quota: Added support for network bandwidth quota limits in Nomad enterprise + +BUG FIXES: + + * core: Ignore `server` config values if `server` is disabled [[GH-6047](https://github.com/hashicorp/nomad/issues/6047)] + * core: Added `semver` constraint for strict Semver 2.0 version comparisons [[GH-6699](https://github.com/hashicorp/nomad/issues/6699)] + * core: Fixed server panic caused by a plan evicting and preempting allocs on a node [[GH-6792](https://github.com/hashicorp/nomad/issues/6792)] + * api: Return a 404 if endpoint not found instead of redirecting to /ui/ [[GH-6658](https://github.com/hashicorp/nomad/issues/6658)] + * api: Decompress web socket response body if gzipped on error responses [[GH-6650](https://github.com/hashicorp/nomad/issues/6650)] + * api: Fixed a bug where some FS/Allocation API endpoints didn't return error messages [[GH-6427](https://github.com/hashicorp/nomad/issues/6427)] + * api: Return 40X status code for failing ACL requests, rather than 500 [[GH-6421](https://github.com/hashicorp/nomad/issues/6421)] + * cli: Made scoring column orders consistent `nomad alloc status` [[GH-6609](https://github.com/hashicorp/nomad/issues/6609)] + * cli: Fixed a bug where `nomad alloc exec` fails if stdout is being redirected and not a TTY [[GH-6684](https://github.com/hashicorp/nomad/issues/6684)] + * cli: Fixed a bug where a cli user may fail to query FS/Allocation API endpoints if they lack `node:read` capability [[GH-6423](https://github.com/hashicorp/nomad/issues/6423)] + * client: client: Return empty values when host stats fail [[GH-6349](https://github.com/hashicorp/nomad/issues/6349)] + * client: Fixed a bug where a client may not restart dead internal processes upon client's restart on Windows [[GH-6426](https://github.com/hashicorp/nomad/issues/6426)] + * consul/connect: Fixed registering multiple Connect-enabled services in the same task group [[GH-6646](https://github.com/hashicorp/nomad/issues/6646)] + * drivers: Fixed a bug where client may panic if a restored task failed to shutdown cleanly [[GH-6763](https://github.com/hashicorp/nomad/issues/6763)] + * driver/exec: Fixed a bug where exec tasks can spawn processes that live beyond task lifecycle [[GH-6722](https://github.com/hashicorp/nomad/issues/6722)] + * driver/docker: Added mechanism for detecting running unexpectedly running docker containers [[GH-6325](https://github.com/hashicorp/nomad/issues/6325)] + * scheduler: Changes to devices in resource stanza should cause rescheduling [[GH-6644](https://github.com/hashicorp/nomad/issues/6644)] + * scheduler: Fixed a bug that allowed inplace updates after affinity or spread were changed [[GH-6703](https://github.com/hashicorp/nomad/issues/6703)] + * ui: Fixed client sorting [[GH-6817](https://github.com/hashicorp/nomad/issues/6817)] + * vault: Allow overriding implicit Vault version constraint [[GH-6687](https://github.com/hashicorp/nomad/issues/6687)] + * vault: Supported Vault auth role's new fields, `token_period` and `token_explicit_max_ttl` [[GH-6574](https://github.com/hashicorp/nomad/issues/6574)], [[GH-6580](https://github.com/hashicorp/nomad/issues/6580)] + +## 0.10.1 (November 4, 2019) + +BUG FIXES: + + * core: Fixed server panic when upgrading from 0.8 -> 0.10 and performing an + inplace update of an allocation. [[GH-6541](https://github.com/hashicorp/nomad/issues/6541)] + * api: Fixed panic when submitting Connect-enabled job without using a bridge + network [[GH-6575](https://github.com/hashicorp/nomad/issues/6575)] + * client: Fixed client panic when upgrading from 0.8 -> 0.10 and performing an + inplace update of an allocation. [[GH-6605](https://github.com/hashicorp/nomad/issues/6605)] + +## 0.10.0 (October 22, 2019) + +FEATURES: + * **Consul Connect**: Nomad may now register Consul Connect services and + manages an Envoy proxy sidecar to provide secured service-to-service + communication. + * **Network Namespaces**: Task Groups may now define a shared network + namespace. Each allocation will receive its own network namespace and + loopback interface. Ports may be forwarded from the host into the network + namespace. + * **Host Volumes**: Nomad expanded support of stateful workloads through locally mounted storage volumes. + * **UI Allocation File Explorer**: Nomad UI enhanced operability with a visual file system explorer for allocations. IMPROVEMENTS: - * core: Added host volumes [[GH-6100](https://github.com/hashicorp/nomad/pull/6100)] - * core: Exposed network namespace as environment variable in allocation [[GH-6192](https://github.com/hashicorp/nomad/pull/6192)] * core: Added rolling deployments for service jobs by default and max_parallel=0 disables deployments [[GH-6191](https://github.com/hashicorp/nomad/pull/6100)] * agent: Allowed the job GC interval to be configured [[GH-5978](https://github.com/hashicorp/nomad/issues/5978)] * agent: Added `log_level` to be reloaded on SIGHUP [[GH-5996](https://github.com/hashicorp/nomad/pull/5996)] - * client: Upgraded `go-getter` to support GCP links [[GH-6215](https://github.com/hashicorp/nomad/pull/6215)] * api: Added follow parameter to file streaming endpoint to support older browsers [[GH-6049](https://github.com/hashicorp/nomad/issues/6049)] - * cli: Added `-dev-connect` parameter to support running in dev mode with Consul Connect [[GH-6126](https://github.com/hashicorp/nomad/issues/6126)] - * metrics: Add job status (pending, running, dead) metrics [[GH-6003](https://github.com/hashicorp/nomad/issues/6003)] - * ui: Added Consul Connect features [[GH-6108](https://github.com/hashicorp/nomad/pull/6108)] + * client: Upgraded `go-getter` to support GCP links [[GH-6215](https://github.com/hashicorp/nomad/pull/6215)] + * client: Remove consul service stanza from `job init --short` jobspec [[GH-6179](https://github.com/hashicorp/nomad/issues/6179)] + * drivers: Exposed namespace as `NOMAD_NAMESPACE` environment variable in running tasks [[GH-6192](https://github.com/hashicorp/nomad/pull/6192)] + * metrics: Added job status (pending, running, dead) metrics [[GH-6003](https://github.com/hashicorp/nomad/issues/6003)] + * metrics: Added status and scheduling ability to client metrics [[GH-6130](https://github.com/hashicorp/nomad/issues/6130)] + * server: Added an option to configure job GC interval [[GH-5978](https://github.com/hashicorp/nomad/issues/5978)] * ui: Added allocation filesystem explorer [[GH-5871](https://github.com/hashicorp/nomad/pull/5871)] * ui: Added creation time to evaluations table [[GH-6050](https://github.com/hashicorp/nomad/pull/6050)] BUG FIXES: - * command/run: Fixed `nomad run ...` on Windows so it works with unprivileged accounts [[GH-6009](https://github.com/hashicorp/nomad/issues/6009)] + * cli: Fixed `nomad run ...` on Windows so it works with unprivileged accounts [[GH-6009](https://github.com/hashicorp/nomad/issues/6009)] + * client: Fixed a bug in client fingerprinting on 32-bit nodes [[GH-6239](https://github.com/hashicorp/nomad/issues/6239)] + * client: Fixed a bug where completed allocations may re-run after client restart [[GH-6216](https://github.com/hashicorp/nomad/issues/6216)] + * client: Fixed failure to start if another client is already running with the same data directory [[GH-6348](https://github.com/hashicorp/nomad/pull/6348)] + * client: Fixed a panic that may occur when an `nomad alloc exec` is initiated while process is terminating [[GH-6065](https://github.com/hashicorp/nomad/issues/6065)] + * devices: Fixed a bug causing CPU usage spike when a device is detected [[GH-6201](https://github.com/hashicorp/nomad/issues/6201)] + * drivers: Allowd user-defined environment variable keys to contain dashes [[GH-6080](https://github.com/hashicorp/nomad/issues/6080)] + * driver/docker: Set gc image_delay default to 3 minutes [[GH-6078](https://github.com/hashicorp/nomad/pull/6078)] + * driver/docker: Improved docker driver handling of container creation or starting failures [[GH-6326](https://github.com/hashicorp/nomad/issues/6326)], [[GH-6346](https://github.com/hashicorp/nomad/issues/6346)] + * ui: Fixed a bug where the allocation log viewer would render HTML or hide content that matched XML syntax [[GH-6048](https://github.com/hashicorp/nomad/issues/6048)] + * ui: Fixed a bug where allocation log viewer doesn't show all content in Firefox [[GH-6466](https://github.com/hashicorp/nomad/issues/6466)] + * ui: Fixed navigation via clicking recent allocation row [[GH-6087](https://github.com/hashicorp/nomad/pull/6087)] + * ui: Fixed a bug where the allocation log viewer would render HTML or hide content that matched XML syntax [[GH-6048](https://github.com/hashicorp/nomad/issues/6048)] + * ui: Fixed a bug where allocation log viewer doesn't show all content in Firefox [[GH-6466](https://github.com/hashicorp/nomad/issues/6466)] + +## 0.9.7 (December 4, 2019) + +BUG FIXES: + + * core: Fixed server panic caused by a plan evicting and preempting allocs on a node [[GH-6792](https://github.com/hashicorp/nomad/issues/6792)] + +## 0.9.6 (October 7, 2019) + +SECURITY: + + * core: Redacted replication token in agent/self API endpoint. The replication token is a management token that can be used for further privilege escalation. CVE-2019-12741 [[GH-6430](https://github.com/hashicorp/nomad/issues/6430)] + * core: Fixed a bug where a user may start raw_exec task on clients despite driver being disabled. CVE-2019-15928 [[GH-6227](https://github.com/hashicorp/nomad/issues/6227)] [[GH-6431](https://github.com/hashicorp/nomad/issues/6431)] + * enterprise/acl: Fix ACL access checks in Nomad Enterprise where users may query allocation information and perform lifecycle actions in namespaces they are not authorized to. CVE-2019-16742 [[GH-6432](https://github.com/hashicorp/nomad/issues/6432)] + +IMPROVEMENTS: + + * client: Reduced memory footprint of nomad logging and executor processes [[GH-6341](https://github.com/hashicorp/nomad/issues/6341)] + +BUG FIXES: + + * core: Fixed a bug where scheduler may schedule an allocation on a node without required drivers [[GH-6227](https://github.com/hashicorp/nomad/issues/6227)] + * client: Fixed a bug where completed allocations may re-run after client restart [[GH-6216](https://github.com/hashicorp/nomad/issues/6216)] [[GH-6207](https://github.com/hashicorp/nomad/issues/6207)] + * devices: Fixed a bug causing CPU usage spike when a device is detected [[GH-6201](https://github.com/hashicorp/nomad/issues/6201)] * drivers: Fixed port mapping for docker and qemu drivers [[GH-6251](https://github.com/hashicorp/nomad/pull/6251)] * drivers/docker: Fixed a case where a `nomad alloc exec` would never time out [[GH-6144](https://github.com/hashicorp/nomad/pull/6144)] - * ui: Fixed navigation via clicking recent allocation row [[GH-6087](https://github.com/hashicorp/nomad/pull/6087)] - * ui: Fixed links containing IPv6 addresses to include required square brackets [[GH-6007](https://github.com/hashicorp/nomad/pull/6007)] + * ui: Fixed a bug where allocation log viewer doesn't show all content. [[GH-6048](https://github.com/hashicorp/nomad/issues/6048)] ## 0.9.5 (21 August 2019) diff --git a/GNUmakefile b/GNUmakefile index 325e5d19715..a09f5fdc34c 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -6,14 +6,14 @@ GIT_COMMIT := $(shell git rev-parse HEAD) GIT_DIRTY := $(if $(shell git status --porcelain),+CHANGES) GO_LDFLAGS := "-X github.com/hashicorp/nomad/version.GitCommit=$(GIT_COMMIT)$(GIT_DIRTY)" -GO_TAGS ?= +GO_TAGS ?= codegen_generated GO_TEST_CMD = $(if $(shell which gotestsum),gotestsum --,go test) ifeq ($(origin GOTEST_PKGS_EXCLUDE), undefined) GOTEST_PKGS ?= "./..." else -GOTEST_PKGS=$(shell go list ./... | sed 's/github.com\/hashicorp\/nomad/./' | egrep -v "^($(GOTEST_PKGS_EXCLUDE))$$") +GOTEST_PKGS=$(shell go list ./... | sed 's/github.com\/hashicorp\/nomad/./' | egrep -v "^($(GOTEST_PKGS_EXCLUDE))(/.*)?$$") endif default: help @@ -147,14 +147,15 @@ deps: ## Install build and development dependencies go get -u github.com/a8m/tree/cmd/tree go get -u github.com/magiconair/vendorfmt/cmd/vendorfmt go get -u gotest.tools/gotestsum + go get -u github.com/fatih/hclfmt @bash -C "$(PROJECT_ROOT)/scripts/install-codecgen.sh" @bash -C "$(PROJECT_ROOT)/scripts/install-protoc-gen-go.sh" .PHONY: lint-deps lint-deps: ## Install linter dependencies @echo "==> Updating linter dependencies..." - go get -u github.com/alecthomas/gometalinter - gometalinter --install + go get -u github.com/golangci/golangci-lint/cmd/golangci-lint + go get -u github.com/client9/misspell/cmd/misspell .PHONY: git-hooks git-dir = $(shell git rev-parse --git-dir) @@ -166,26 +167,8 @@ $(git-dir)/hooks/%: dev/hooks/% .PHONY: check check: ## Lint the source code @echo "==> Linting source code..." - @gometalinter \ - --deadline 10m \ - --vendor \ - --exclude='.*\.generated\.go' \ - --exclude='.*bindata_assetfs\.go' \ - --skip="ui/" \ - --sort="path" \ - --aggregate \ - --enable-gc \ - --disable-all \ - --enable goimports \ - --enable misspell \ - --enable vet \ - --enable deadcode \ - --enable varcheck \ - --enable ineffassign \ - --enable structcheck \ - --enable unconvert \ - --enable gofmt \ - ./... + @golangci-lint run -j 1 + @echo "==> Spell checking website..." @misspell -error -source=text website/source/ @@ -194,7 +177,7 @@ check: ## Lint the source code @if (git status | grep -q .pb.go); then echo the following proto files are out of sync; git status |grep .pb.go; exit 1; fi @echo "==> Check API package is isolated from rest" - @! go list -f '{{ join .Deps "\n" }}' ./api | grep github.com/hashicorp/nomad/ | grep -v -e /vendor/ -e /nomad/api/ + @if go list --test -f '{{ join .Deps "\n" }}' ./api | grep github.com/hashicorp/nomad/ | grep -v -e /vendor/ -e /nomad/api/ -e nomad/api.test; then echo " /api package depends the ^^ above internal nomad packages. Remove such dependency"; exit 1; fi .PHONY: checkscripts checkscripts: ## Lint shell scripts @@ -223,21 +206,31 @@ generate-examples: command/job_init.bindata_assetfs.go command/job_init.bindata_assetfs.go: command/assets/* go-bindata-assetfs -pkg command -o command/job_init.bindata_assetfs.go ./command/assets/... +.PHONY: vendorfmt vendorfmt: @echo "--> Formatting vendor/vendor.json" test -x $(GOPATH)/bin/vendorfmt || go get -u github.com/magiconair/vendorfmt/cmd/vendorfmt vendorfmt + +.PHONY: changelogfmt changelogfmt: @echo "--> Making [GH-xxxx] references clickable..." @sed -E 's|([^\[])\[GH-([0-9]+)\]|\1[[GH-\2](https://github.com/hashicorp/nomad/issues/\2)]|g' CHANGELOG.md > changelog.tmp && mv changelog.tmp CHANGELOG.md +## We skip the terraform directory as there are templated hcl configurations +## that do not successfully compile without rendering +.PHONY: hclfmt +hclfmt: + @echo "--> Formatting HCL" + @find . -path ./terraform -prune -o -name 'upstart.nomad' -prune -o \( -name '*.nomad' -o -name '*.hcl' \) -exec \ +sh -c 'hclfmt -w {} || echo in path {}' ';' .PHONY: dev dev: GOOS=$(shell go env GOOS) dev: GOARCH=$(shell go env GOARCH) dev: GOPATH=$(shell go env GOPATH) dev: DEV_TARGET=pkg/$(GOOS)_$(GOARCH)/nomad -dev: vendorfmt changelogfmt ## Build for the current development platform +dev: vendorfmt changelogfmt hclfmt ## Build for the current development platform @echo "==> Removing old development build..." @rm -f $(PROJECT_ROOT)/$(DEV_TARGET) @rm -f $(PROJECT_ROOT)/bin/nomad @@ -251,11 +244,11 @@ dev: vendorfmt changelogfmt ## Build for the current development platform @cp $(PROJECT_ROOT)/$(DEV_TARGET) $(GOPATH)/bin .PHONY: prerelease -prerelease: GO_TAGS=ui release +prerelease: GO_TAGS=ui codegen_generated release prerelease: generate-all ember-dist static-assets ## Generate all the static assets for a Nomad release .PHONY: release -release: GO_TAGS=ui release +release: GO_TAGS=ui codegen_generated release release: clean $(foreach t,$(ALL_TARGETS),pkg/$(t).zip) ## Build all release packages which can be built on this platform. @echo "==> Results:" @tree --dirsfirst $(PROJECT_ROOT)/pkg @@ -282,6 +275,7 @@ test-nomad: dev ## Run Nomad test suites $(if $(ENABLE_RACE),-race) $(if $(VERBOSE),-v) \ -cover \ -timeout=15m \ + -tags "$(GO_TAGS)" \ $(GOTEST_PKGS) $(if $(VERBOSE), >test.log ; echo $$? > exit-code) @if [ $(VERBOSE) ] ; then \ bash -C "$(PROJECT_ROOT)/scripts/test_check.sh" ; \ @@ -294,6 +288,7 @@ e2e-test: dev ## Run the Nomad e2e test suite $(if $(ENABLE_RACE),-race) $(if $(VERBOSE),-v) \ -cover \ -timeout=900s \ + -tags "$(GO_TAGS)" \ github.com/hashicorp/nomad/e2e/vault/ \ -integration diff --git a/README.md b/README.md index 799785457d5..37657a2a1fb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Nomad [![Build Status](https://travis-ci.org/hashicorp/nomad.svg)](https://travis-ci.org/hashicorp/nomad) [![Join the chat at https://gitter.im/hashicorp-nomad/Lobby](https://badges.gitter.im/hashicorp-nomad/Lobby.svg)](https://gitter.im/hashicorp-nomad/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +Nomad [![Build Status](https://circleci.com/gh/hashicorp/nomad.svg?style=svg)](https://circleci.com/gh/hashicorp/nomad) [![Discuss](https://img.shields.io/badge/discuss-nomad-00BC7F?style=flat)](https://discuss.hashicorp.com/c/nomad) =========

@@ -16,11 +16,11 @@ Nomad is an easy-to-use, flexible, and performant workload orchestrator that dep Nomad enables developers to use declarative infrastructure-as-code for deploying their applications (jobs). Nomad uses bin packing to efficiently schedule jobs and optimize for resource utilization. Nomad is supported on macOS, Windows, and Linux. -Nomad is widely adopted and used in production by PagerDuty, Target, Citadel, Trivago, SAP, Pandora, Roblox, eBay, Deluxe Entertainment, and more. +Nomad is widely adopted and used in production by PagerDuty, Target, Citadel, Trivago, SAP, Pandora, Roblox, eBay, Deluxe Entertainment, and more. * **Deploy Containers and Legacy Applications**: Nomad’s flexibility as an orchestrator enables an organization to run containers, legacy, and batch applications together on the same infrastructure. Nomad brings core orchestration benefits to legacy applications without needing to containerize via pluggable task drivers. -* **Simple & Reliable**: Nomad runs as a single 75MB binary and is entirely self contained - combining resource management and scheduling into a single system. Nomad does not require any external services for storage or coordination. Nomad automatically handles application, node, and driver failures. Nomad is distributed and resilient, using leader election and state replication to provide high availability in the event of failures. +* **Simple & Reliable**: Nomad runs as a single 75MB binary and is entirely self contained - combining resource management and scheduling into a single system. Nomad does not require any external services for storage or coordination. Nomad automatically handles application, node, and driver failures. Nomad is distributed and resilient, using leader election and state replication to provide high availability in the event of failures. * **Device Plugins & GPU Support**: Nomad offers built-in support for GPU workloads such as machine learning (ML) and artificial intelligence (AI). Nomad uses device plugins to automatically detect and utilize resources from hardware devices such as GPU, FPGAs, and TPUs. @@ -48,10 +48,10 @@ Documentation & Guides ------------------------------- * [Installing Nomad for Production](https://www.nomadproject.io/guides/operations/deployment-guide.html) -* [Advanced Job Scheduling on Nomad with Affinities](https://www.nomadproject.io/guides/advanced-scheduling/affinity.html) -* [Increasing Nomad Fault Tolerance with Spread](https://www.nomadproject.io/guides/advanced-scheduling/spread.html) -* [Load Balancing on Nomad with Fabio & Consul](https://www.nomadproject.io/guides/load-balancing/fabio.html) -* [Deploying Stateful Workloads via Portworx](https://www.nomadproject.io/guides/stateful-workloads/portworx.html) +* [Advanced Job Scheduling on Nomad with Affinities](https://www.nomadproject.io/guides/operating-a-job/advanced-scheduling/affinity.html) +* [Increasing Nomad Fault Tolerance with Spread](https://www.nomadproject.io/guides/operating-a-job/advanced-scheduling/spread.html) +* [Load Balancing on Nomad with Fabio & Consul](https://learn.hashicorp.com/nomad/load-balancing/fabio) +* [Deploying Stateful Workloads via Portworx](https://learn.hashicorp.com/nomad/stateful-workloads/portworx) * [Running Apache Spark on Nomad](https://www.nomadproject.io/guides/spark/spark.html) * [Integrating Vault with Nomad for Secrets Management](https://www.nomadproject.io/guides/operations/vault-integration/index.html) * [Securing Nomad with TLS](https://www.nomadproject.io/guides/security/securing-nomad.html) @@ -107,7 +107,7 @@ Who Uses Nomad * [Nomad at Target: Scaling Microservices Across Public and Private Clouds](https://www.hashicorp.com/resources/nomad-scaling-target-microservices-across-cloud) * [Playing with Nomad from HashiCorp](https://danielparker.me/nomad/hashicorp/schedulers/nomad/) * Trivago - * [Maybe You Don’t Need Kubernetes](https://matthias-endler.de/2019/maybe-you-dont-need-kubernetes/) + * [Maybe You Don’t Need Kubernetes](https://endler.dev/2019/maybe-you-dont-need-kubernetes/) * [Nomad - Our Experiences and Best Practices](https://tech.trivago.com/2019/01/25/nomad-our-experiences-and-best-practices/) * Roblox * [How Roblox runs a platform for 70 million gamers on HashiCorp Nomad](https://portworx.com/architects-corner-roblox-runs-platform-70-million-gamers-hashicorp-nomad/) @@ -123,8 +123,6 @@ Who Uses Nomad * [Tech at N26 - The Bank in the Cloud](https://medium.com/insiden26/tech-at-n26-the-bank-in-the-cloud-e5ff818b528b) * Elsevier * [Eslevier’s Container Framework with Nomad, Terraform, and Consul](https://www.hashicorp.com/resources/elsevier-nomad-container-framework-demo) -* Palantir - * [Enterprise Security at Palantir with the HashiCorp stack](https://www.hashicorp.com/resources/enterprise-security-hashicorp-stack) * Graymeta * [Backend Batch Processing At Scale with Nomad](https://www.hashicorp.com/resources/backend-batch-processing-nomad) * NIH NCBI @@ -140,7 +138,7 @@ Who Uses Nomad Contributing to Nomad -------------------- -If you wish to contribute to Nomad, you will need [Go](https://www.golang.org) installed on your machine (version 1.12.9+ is *required*). +If you wish to contribute to Nomad, you will need [Go](https://www.golang.org) installed on your machine (version 1.12.16+ is *required*, and `gcc-go` is not supported). See the [`contributing`](contributing/) directory for more developer documentation. @@ -173,6 +171,12 @@ $ make bootstrap ... ``` +Nomad creates many file handles for communicating with tasks, log handlers, etc. +In some development environments, particularly macOS, the default number of file +descriptors is too small to run Nomad's test suite. You should set +`ulimit -n 1024` or higher in your shell. This setting is scoped to your current +shell and doesn't affect other running shells or future shells. + Afterwards type `make test`. This will run the tests. If this exits with exit status 0, then everything is working! diff --git a/Vagrantfile b/Vagrantfile index 7fab7e2247b..3737ce96c5f 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -3,7 +3,9 @@ # LINUX_BASE_BOX = "bento/ubuntu-16.04" -FREEBSD_BASE_BOX = "freebsd/FreeBSD-11.2-STABLE" +FREEBSD_BASE_BOX = "freebsd/FreeBSD-11.3-STABLE" + +LINUX_IP_ADDRESS = "10.199.0.200" Vagrant.configure(2) do |config| # Compilation and development boxes @@ -21,6 +23,10 @@ Vagrant.configure(2) do |config| vmCfg.vm.provision "shell", privileged: false, path: './scripts/vagrant-linux-unpriv-bootstrap.sh' + + vmCfg.vm.provider "virtualbox" do |_| + vmCfg.vm.network :private_network, ip: LINUX_IP_ADDRESS + end end config.vm.define "linux-ui", autostart: false, primary: false do |vmCfg| @@ -38,12 +44,13 @@ Vagrant.configure(2) do |config| privileged: false, path: './scripts/vagrant-linux-unpriv-bootstrap.sh' - # Expose the nomad api and ui to the host - vmCfg.vm.network "forwarded_port", guest: 4646, host: 4646, auto_correct: true + # Expose the nomad api and ui to the host + vmCfg.vm.network :forwarded_port, guest: 4646, host: 4646, auto_correct: true + vmCfg.vm.network :forwarded_port, guest: 8500, host: 8500, auto_correct: true - # Expose Ember ports to the host (one for the site, one for livereload) - vmCfg.vm.network :forwarded_port, guest: 4201, host: 4201, auto_correct: true - vmCfg.vm.network :forwarded_port, guest: 49153, host: 49153, auto_correct: true + # Expose Ember ports to the host (one for the site, one for livereload) + vmCfg.vm.network :forwarded_port, guest: 4201, host: 4201, auto_correct: true + vmCfg.vm.network :forwarded_port, guest: 49153, host: 49153, auto_correct: true end config.vm.define "freebsd", autostart: false, primary: false do |vmCfg| @@ -137,6 +144,10 @@ def configureLinuxProvisioners(vmCfg) privileged: true, path: './scripts/vagrant-linux-priv-consul.sh' + vmCfg.vm.provision "shell", + privileged: true, + path: './scripts/vagrant-linux-priv-cni.sh' + vmCfg.vm.provision "shell", privileged: true, path: './scripts/vagrant-linux-priv-vault.sh' @@ -172,7 +183,7 @@ def configureProviders(vmCfg, cpus: "2", memory: "2048") end vmCfg.vm.provider "virtualbox" do |v| - v.customize ["modifyvm", :id, "--cableconnected1", "on"] + v.customize ["modifyvm", :id, "--cableconnected1", "on", "--audio", "none"] v.memory = memory v.cpus = cpus end diff --git a/acl/acl.go b/acl/acl.go index 54c07533d3e..a509acc8fa0 100644 --- a/acl/acl.go +++ b/acl/acl.go @@ -511,3 +511,25 @@ func (a *ACL) AllowQuotaWrite() bool { func (a *ACL) IsManagement() bool { return a.management } + +// NamespaceValidator returns a func that wraps ACL.AllowNamespaceOperation in +// a list of operations. Returns true (allowed) if acls are disabled or if +// *any* capabilities match. +func NamespaceValidator(ops ...string) func(*ACL, string) bool { + return func(acl *ACL, ns string) bool { + // Always allow if ACLs are disabled. + if acl == nil { + return true + } + + for _, op := range ops { + if acl.AllowNamespaceOperation(ns, op) { + // An operation is allowed, return true + return true + } + } + + // No operations are allowed by this ACL, return false + return false + } +} diff --git a/api/agent.go b/api/agent.go index 46979403c21..b3a43d56698 100644 --- a/api/agent.go +++ b/api/agent.go @@ -3,7 +3,9 @@ package api import ( "encoding/json" "fmt" + "io/ioutil" "net/url" + "strconv" ) // Agent encapsulates an API client which talks to Nomad's @@ -237,6 +239,136 @@ func (a *Agent) Health() (*AgentHealthResponse, error) { return nil, fmt.Errorf("unable to unmarshal response with status %d: %v", resp.StatusCode, err) } +// Monitor returns a channel which will receive streaming logs from the agent +// Providing a non-nil stopCh can be used to close the connection and stop log streaming +func (a *Agent) Monitor(stopCh <-chan struct{}, q *QueryOptions) (<-chan *StreamFrame, <-chan error) { + errCh := make(chan error, 1) + r, err := a.client.newRequest("GET", "/v1/agent/monitor") + if err != nil { + errCh <- err + return nil, errCh + } + + r.setQueryOptions(q) + _, resp, err := requireOK(a.client.doRequest(r)) + if err != nil { + errCh <- err + return nil, errCh + } + + frames := make(chan *StreamFrame, 10) + go func() { + defer resp.Body.Close() + + dec := json.NewDecoder(resp.Body) + + for { + select { + case <-stopCh: + close(frames) + return + default: + } + + // Decode the next frame + var frame StreamFrame + if err := dec.Decode(&frame); err != nil { + close(frames) + errCh <- err + return + } + + // Discard heartbeat frame + if frame.IsHeartbeat() { + continue + } + + frames <- &frame + } + }() + + return frames, errCh +} + +// PprofOptions contain a set of parameters for profiling a node or server. +type PprofOptions struct { + // ServerID is the server ID, name, or special value "leader" to + // specify the server that a given profile should be run on. + ServerID string + + // NodeID is the node ID that a given profile should be run on. + NodeID string + + // Seconds specifies the amount of time a profile should be run for. + // Seconds only applies for certain runtime profiles like CPU and Trace. + Seconds int + + // GC determines if a runtime.GC() should be called before a heap + // profile. + GC int + + // Debug specifies if the output of a lookup profile should be returned + // in human readable format instead of binary. + Debug int +} + +// CPUProfile returns a runtime/pprof cpu profile for a given server or node. +// The profile will run for the amount of seconds passed in or default to 1. +// If no serverID or nodeID are provided the current Agents server will be +// used. +// +// The call blocks until the profile finishes, and returns the raw bytes of the +// profile. +func (a *Agent) CPUProfile(opts PprofOptions, q *QueryOptions) ([]byte, error) { + return a.pprofRequest("profile", opts, q) +} + +// Trace returns a runtime/pprof trace for a given server or node. +// The trace will run for the amount of seconds passed in or default to 1. +// If no serverID or nodeID are provided the current Agents server will be +// used. +// +// The call blocks until the profile finishes, and returns the raw bytes of the +// profile. +func (a *Agent) Trace(opts PprofOptions, q *QueryOptions) ([]byte, error) { + return a.pprofRequest("trace", opts, q) +} + +// Lookup returns a runtime/pprof profile using pprof.Lookup to determine +// which profile to run. Accepts a client or server ID but not both simultaneously. +// +// The call blocks until the profile finishes, and returns the raw bytes of the +// profile unless debug is set. +func (a *Agent) Lookup(profile string, opts PprofOptions, q *QueryOptions) ([]byte, error) { + return a.pprofRequest(profile, opts, q) +} + +func (a *Agent) pprofRequest(req string, opts PprofOptions, q *QueryOptions) ([]byte, error) { + if q == nil { + q = &QueryOptions{} + } + if q.Params == nil { + q.Params = make(map[string]string) + } + + q.Params["seconds"] = strconv.Itoa(opts.Seconds) + q.Params["debug"] = strconv.Itoa(opts.Debug) + q.Params["gc"] = strconv.Itoa(opts.GC) + q.Params["node_id"] = opts.NodeID + q.Params["server_id"] = opts.ServerID + + body, err := a.client.rawQuery(fmt.Sprintf("/v1/agent/pprof/%s", req), q) + if err != nil { + return nil, err + } + + resp, err := ioutil.ReadAll(body) + if err != nil { + return nil, err + } + return resp, nil +} + // joinResponse is used to decode the response we get while // sending a member join request. type joinResponse struct { diff --git a/api/agent_test.go b/api/agent_test.go index b8658ae08d2..8fff6cfb0c5 100644 --- a/api/agent_test.go +++ b/api/agent_test.go @@ -1,9 +1,15 @@ package api import ( + "fmt" "reflect" "sort" + "strings" "testing" + "time" + + "github.com/kr/pretty" + "github.com/stretchr/testify/require" "github.com/hashicorp/nomad/api/internal/testutil" "github.com/stretchr/testify/assert" @@ -257,3 +263,196 @@ func TestAgent_Health(t *testing.T) { assert.Nil(err) assert.True(health.Server.Ok) } + +// TestAgent_MonitorWithNode tests the Monitor endpoint +// passing in a log level and node ie, which tests monitor +// functionality for a specific client node +func TestAgent_MonitorWithNode(t *testing.T) { + t.Parallel() + rpcPort := 0 + c, s := makeClient(t, nil, func(c *testutil.TestServerConfig) { + rpcPort = c.Ports.RPC + c.Client = &testutil.ClientConfig{ + Enabled: true, + } + }) + defer s.Stop() + + require.NoError(t, c.Agent().SetServers([]string{fmt.Sprintf("127.0.0.1:%d", rpcPort)})) + + agent := c.Agent() + + index := uint64(0) + var node *NodeListStub + // grab a node + testutil.WaitForResult(func() (bool, error) { + nodes, qm, err := c.Nodes().List(&QueryOptions{WaitIndex: index}) + if err != nil { + return false, err + } + index = qm.LastIndex + if len(nodes) != 1 { + return false, fmt.Errorf("expected 1 node but found: %s", pretty.Sprint(nodes)) + } + if nodes[0].Status != "ready" { + return false, fmt.Errorf("node not ready: %s", nodes[0].Status) + } + node = nodes[0] + return true, nil + }, func(err error) { + t.Fatalf("err: %v", err) + }) + + doneCh := make(chan struct{}) + q := &QueryOptions{ + Params: map[string]string{ + "log_level": "debug", + "node_id": node.ID, + }, + } + + frames, errCh := agent.Monitor(doneCh, q) + defer close(doneCh) + + // make a request to generate some logs + _, err := agent.NodeName() + require.NoError(t, err) + + // Wait for a log message +OUTER: + for { + select { + case f := <-frames: + if strings.Contains(string(f.Data), "[DEBUG]") { + break OUTER + } + case err := <-errCh: + t.Errorf("Error: %v", err) + case <-time.After(2 * time.Second): + require.Fail(t, "failed to get a DEBUG log message") + } + } +} + +// TestAgent_Monitor tests the Monitor endpoint +// passing in only a log level, which tests the servers +// monitor functionality +func TestAgent_Monitor(t *testing.T) { + t.Parallel() + c, s := makeClient(t, nil, nil) + defer s.Stop() + + agent := c.Agent() + + q := &QueryOptions{ + Params: map[string]string{ + "log_level": "debug", + }, + } + + doneCh := make(chan struct{}) + frames, errCh := agent.Monitor(doneCh, q) + defer close(doneCh) + + // make a request to generate some logs + _, err := agent.Region() + require.NoError(t, err) + + // Wait for a log message +OUTER: + for { + select { + case log := <-frames: + if log == nil { + continue + } + if strings.Contains(string(log.Data), "[DEBUG]") { + break OUTER + } + case err := <-errCh: + t.Fatalf("error: %v", err) + case <-time.After(2 * time.Second): + require.Fail(t, "failed to get a DEBUG log message") + } + } +} + +func TestAgentCPUProfile(t *testing.T) { + t.Parallel() + + c, s, token := makeACLClient(t, nil, nil) + defer s.Stop() + + agent := c.Agent() + + q := &QueryOptions{ + AuthToken: token.SecretID, + } + + // Valid local request + { + opts := PprofOptions{ + Seconds: 1, + } + resp, err := agent.CPUProfile(opts, q) + require.NoError(t, err) + require.NotNil(t, resp) + } + + // Invalid server request + { + opts := PprofOptions{ + Seconds: 1, + ServerID: "unknown.global", + } + resp, err := agent.CPUProfile(opts, q) + require.Error(t, err) + require.Contains(t, err.Error(), "500 (unknown Nomad server unknown.global)") + require.Nil(t, resp) + } + +} + +func TestAgentTrace(t *testing.T) { + t.Parallel() + + c, s, token := makeACLClient(t, nil, nil) + defer s.Stop() + + agent := c.Agent() + + q := &QueryOptions{ + AuthToken: token.SecretID, + } + + resp, err := agent.Trace(PprofOptions{}, q) + require.NoError(t, err) + require.NotNil(t, resp) +} + +func TestAgentProfile(t *testing.T) { + t.Parallel() + + c, s, token := makeACLClient(t, nil, nil) + defer s.Stop() + + agent := c.Agent() + + q := &QueryOptions{ + AuthToken: token.SecretID, + } + + { + resp, err := agent.Lookup("heap", PprofOptions{}, q) + require.NoError(t, err) + require.NotNil(t, resp) + } + + // unknown profile + { + resp, err := agent.Lookup("invalid", PprofOptions{}, q) + require.Error(t, err) + require.Contains(t, err.Error(), "Unexpected response code: 404") + require.Nil(t, resp) + } +} diff --git a/api/allocations.go b/api/allocations.go index 3a22af78e8c..05892a77e05 100644 --- a/api/allocations.go +++ b/api/allocations.go @@ -210,12 +210,7 @@ func (a *Allocations) Exec(ctx context.Context, func (a *Allocations) execFrames(ctx context.Context, alloc *Allocation, task string, tty bool, command []string, errCh chan<- error, q *QueryOptions) (sendFn func(*ExecStreamingInput) error, output <-chan *ExecStreamingOutput) { - - nodeClient, err := a.client.GetNodeClientWithTimeout(alloc.NodeID, ClientConnTimeout, q) - if err != nil { - errCh <- err - return nil, nil - } + nodeClient, _ := a.client.GetNodeClientWithTimeout(alloc.NodeID, ClientConnTimeout, q) if q == nil { q = &QueryOptions{} @@ -236,15 +231,17 @@ func (a *Allocations) execFrames(ctx context.Context, alloc *Allocation, task st reqPath := fmt.Sprintf("/v1/client/allocation/%s/exec", alloc.ID) - conn, _, err := nodeClient.websocket(reqPath, q) - if err != nil { - // There was an error talking directly to the client. Non-network - // errors are fatal, but network errors can attempt to route via RPC. - if _, ok := err.(net.Error); !ok { + var conn *websocket.Conn + + if nodeClient != nil { + conn, _, err = nodeClient.websocket(reqPath, q) + if _, ok := err.(net.Error); err != nil && !ok { errCh <- err return nil, nil } + } + if conn == nil { conn, _, err = a.client.websocket(reqPath, q) if err != nil { errCh <- err diff --git a/api/allocations_test.go b/api/allocations_test.go index a18b7e1477a..d9543ccf29e 100644 --- a/api/allocations_test.go +++ b/api/allocations_test.go @@ -1,13 +1,15 @@ package api import ( + "context" + "fmt" + "os" "reflect" "sort" "testing" "time" - "github.com/hashicorp/go-uuid" "github.com/stretchr/testify/require" ) @@ -146,20 +148,12 @@ func TestAllocations_RescheduleInfo(t *testing.T) { } job.Canonicalize() - uuidGen := func() string { - ret, err := uuid.GenerateUUID() - if err != nil { - t.Fatal(err) - } - return ret - } - alloc := &Allocation{ - ID: uuidGen(), + ID: generateUUID(), Namespace: DefaultNamespace, - EvalID: uuidGen(), + EvalID: generateUUID(), Name: "foo-bar[1]", - NodeID: uuidGen(), + NodeID: generateUUID(), TaskGroup: *job.TaskGroups[0].Name, JobID: *job.ID, Job: job, @@ -247,6 +241,53 @@ func TestAllocations_RescheduleInfo(t *testing.T) { } +// TestAllocations_ExecErrors ensures errors are properly formatted +func TestAllocations_ExecErrors(t *testing.T) { + c, s := makeClient(t, nil, nil) + defer s.Stop() + a := c.Allocations() + + job := &Job{ + Name: stringToPtr("foo"), + Namespace: stringToPtr(DefaultNamespace), + ID: stringToPtr("bar"), + ParentID: stringToPtr("lol"), + TaskGroups: []*TaskGroup{ + { + Name: stringToPtr("bar"), + Tasks: []*Task{ + { + Name: "task1", + }, + }, + }, + }, + } + job.Canonicalize() + + allocID := generateUUID() + + alloc := &Allocation{ + ID: allocID, + Namespace: DefaultNamespace, + EvalID: generateUUID(), + Name: "foo-bar[1]", + NodeID: generateUUID(), + TaskGroup: *job.TaskGroups[0].Name, + JobID: *job.ID, + Job: job, + } + // Querying when no allocs exist returns nothing + sizeCh := make(chan TerminalSize, 1) + + // make a request that will result in an error + // ensure the error is what we expect + exitCode, err := a.Exec(context.Background(), alloc, "bar", false, []string{"command"}, os.Stdin, os.Stdout, os.Stderr, sizeCh, nil) + + require.Equal(t, exitCode, -2) + require.Equal(t, err.Error(), fmt.Sprintf("Unknown allocation \"%s\"", allocID)) +} + func TestAllocations_ShouldMigrate(t *testing.T) { t.Parallel() require.True(t, DesiredTransition{Migrate: boolToPtr(true)}.ShouldMigrate()) diff --git a/api/api.go b/api/api.go index bacb7c3c9ef..3951ed13d63 100644 --- a/api/api.go +++ b/api/api.go @@ -178,12 +178,22 @@ type TLSConfig struct { // the Nomad server SSL certificate. CAPath string + // CACertPem is the PEM-encoded CA cert to use to verify the Nomad server + // SSL certificate. + CACertPEM []byte + // ClientCert is the path to the certificate for Nomad communication ClientCert string + // ClientCertPEM is the PEM-encoded certificate for Nomad communication + ClientCertPEM []byte + // ClientKey is the path to the private key for Nomad communication ClientKey string + // ClientKeyPEM is the PEM-encoded private key for Nomad communication + ClientKeyPEM []byte + // TLSServerName, if set, is used to set the SNI host when connecting via // TLS. TLSServerName string @@ -257,6 +267,9 @@ func DefaultConfig() *Config { if v := os.Getenv("NOMAD_CLIENT_KEY"); v != "" { config.TLSConfig.ClientKey = v } + if v := os.Getenv("NOMAD_TLS_SERVER_NAME"); v != "" { + config.TLSConfig.TLSServerName = v + } if v := os.Getenv("NOMAD_SKIP_VERIFY"); v != "" { if insecure, err := strconv.ParseBool(v); err == nil { config.TLSConfig.Insecure = insecure @@ -341,12 +354,24 @@ func ConfigureTLS(httpClient *http.Client, tlsConfig *TLSConfig) error { } else { return fmt.Errorf("Both client cert and client key must be provided") } + } else if len(tlsConfig.ClientCertPEM) != 0 || len(tlsConfig.ClientKeyPEM) != 0 { + if len(tlsConfig.ClientCertPEM) != 0 && len(tlsConfig.ClientKeyPEM) != 0 { + var err error + clientCert, err = tls.X509KeyPair(tlsConfig.ClientCertPEM, tlsConfig.ClientKeyPEM) + if err != nil { + return err + } + foundClientCert = true + } else { + return fmt.Errorf("Both client cert and client key must be provided") + } } clientTLSConfig := httpClient.Transport.(*http.Transport).TLSClientConfig rootConfig := &rootcerts.Config{ - CAFile: tlsConfig.CACert, - CAPath: tlsConfig.CAPath, + CAFile: tlsConfig.CACert, + CAPath: tlsConfig.CAPath, + CACertificate: tlsConfig.CACertPEM, } if err := rootcerts.ConfigureTLS(clientTLSConfig, rootConfig); err != nil { return err @@ -592,10 +617,11 @@ func (c *Client) newRequest(method, path string) (*request, error) { config: &c.config, method: method, url: &url.URL{ - Scheme: base.Scheme, - User: base.User, - Host: base.Host, - Path: u.Path, + Scheme: base.Scheme, + User: base.User, + Host: base.Host, + Path: u.Path, + RawPath: u.RawPath, }, params: make(map[string][]string), } @@ -741,7 +767,16 @@ func (c *Client) websocket(endpoint string, q *QueryOptions) (*websocket.Conn, * // check resp status code, as it's more informative than handshake error we get from ws library if resp != nil && resp.StatusCode != 101 { var buf bytes.Buffer - io.Copy(&buf, resp.Body) + + if resp.Header.Get("Content-Encoding") == "gzip" { + greader, err := gzip.NewReader(resp.Body) + if err != nil { + return nil, nil, fmt.Errorf("Unexpected response code: %d", resp.StatusCode) + } + io.Copy(&buf, greader) + } else { + io.Copy(&buf, resp.Body) + } resp.Body.Close() return nil, nil, fmt.Errorf("Unexpected response code: %d (%s)", resp.StatusCode, buf.Bytes()) diff --git a/api/api_test.go b/api/api_test.go index 18fc214d370..e15897da46a 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -11,7 +11,6 @@ import ( "testing" "time" - "github.com/hashicorp/go-uuid" "github.com/hashicorp/nomad/api/internal/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -318,24 +317,16 @@ func TestQueryString(t *testing.T) { func TestClient_NodeClient(t *testing.T) { http := "testdomain:4646" tlsNode := func(string, *QueryOptions) (*Node, *QueryMeta, error) { - uu, err := uuid.GenerateUUID() - if err != nil { - t.Fatal(err) - } return &Node{ - ID: uu, + ID: generateUUID(), Status: "ready", HTTPAddr: http, TLSEnabled: true, }, nil, nil } noTlsNode := func(string, *QueryOptions) (*Node, *QueryMeta, error) { - uu, err := uuid.GenerateUUID() - if err != nil { - t.Fatal(err) - } return &Node{ - ID: uu, + ID: generateUUID(), Status: "ready", HTTPAddr: http, TLSEnabled: false, diff --git a/api/constraint.go b/api/constraint.go index 7b18ade9ffa..3233a3bfdcd 100644 --- a/api/constraint.go +++ b/api/constraint.go @@ -5,6 +5,7 @@ const ( ConstraintDistinctHosts = "distinct_hosts" ConstraintRegex = "regexp" ConstraintVersion = "version" + ConstraintSemver = "semver" ConstraintSetContains = "set_contains" ConstraintSetContainsAll = "set_contains_all" ConstraintSetContainsAny = "set_contains_any" diff --git a/api/fs.go b/api/fs.go index b769236f76f..e5340c9668b 100644 --- a/api/fs.go +++ b/api/fs.go @@ -92,72 +92,24 @@ func (a *AllocFS) Stat(alloc *Allocation, path string, q *QueryOptions) (*AllocF // ReadAt is used to read bytes at a given offset until limit at the given path // in an allocation directory. If limit is <= 0, there is no limit. func (a *AllocFS) ReadAt(alloc *Allocation, path string, offset int64, limit int64, q *QueryOptions) (io.ReadCloser, error) { - nodeClient, err := a.client.GetNodeClientWithTimeout(alloc.NodeID, ClientConnTimeout, q) - if err != nil { - return nil, err - } - - if q == nil { - q = &QueryOptions{} - } - if q.Params == nil { - q.Params = make(map[string]string) - } - - q.Params["path"] = path - q.Params["offset"] = strconv.FormatInt(offset, 10) - q.Params["limit"] = strconv.FormatInt(limit, 10) - reqPath := fmt.Sprintf("/v1/client/fs/readat/%s", alloc.ID) - r, err := nodeClient.rawQuery(reqPath, q) - if err != nil { - // There was a networking error when talking directly to the client. - if _, ok := err.(net.Error); !ok { - return nil, err - } - // Try via the server - r, err = a.client.rawQuery(reqPath, q) - if err != nil { - return nil, err - } - } - - return r, nil + return queryClientNode(a.client, alloc, reqPath, q, + func(q *QueryOptions) { + q.Params["path"] = path + q.Params["offset"] = strconv.FormatInt(offset, 10) + q.Params["limit"] = strconv.FormatInt(limit, 10) + }) } // Cat is used to read contents of a file at the given path in an allocation // directory func (a *AllocFS) Cat(alloc *Allocation, path string, q *QueryOptions) (io.ReadCloser, error) { - nodeClient, err := a.client.GetNodeClientWithTimeout(alloc.NodeID, ClientConnTimeout, q) - if err != nil { - return nil, err - } - - if q == nil { - q = &QueryOptions{} - } - if q.Params == nil { - q.Params = make(map[string]string) - } - - q.Params["path"] = path reqPath := fmt.Sprintf("/v1/client/fs/cat/%s", alloc.ID) - r, err := nodeClient.rawQuery(reqPath, q) - if err != nil { - // There was a networking error when talking directly to the client. - if _, ok := err.(net.Error); !ok { - return nil, err - } - - // Try via the server - r, err = a.client.rawQuery(reqPath, q) - if err != nil { - return nil, err - } - } - - return r, nil + return queryClientNode(a.client, alloc, reqPath, q, + func(q *QueryOptions) { + q.Params["path"] = path + }) } // Stream streams the content of a file blocking on EOF. @@ -172,38 +124,17 @@ func (a *AllocFS) Stream(alloc *Allocation, path, origin string, offset int64, cancel <-chan struct{}, q *QueryOptions) (<-chan *StreamFrame, <-chan error) { errCh := make(chan error, 1) - nodeClient, err := a.client.GetNodeClientWithTimeout(alloc.NodeID, ClientConnTimeout, q) - if err != nil { - errCh <- err - return nil, errCh - } - - if q == nil { - q = &QueryOptions{} - } - if q.Params == nil { - q.Params = make(map[string]string) - } - - q.Params["path"] = path - q.Params["offset"] = strconv.FormatInt(offset, 10) - q.Params["origin"] = origin reqPath := fmt.Sprintf("/v1/client/fs/stream/%s", alloc.ID) - r, err := nodeClient.rawQuery(reqPath, q) + r, err := queryClientNode(a.client, alloc, reqPath, q, + func(q *QueryOptions) { + q.Params["path"] = path + q.Params["offset"] = strconv.FormatInt(offset, 10) + q.Params["origin"] = origin + }) if err != nil { - // There was a networking error when talking directly to the client. - if _, ok := err.(net.Error); !ok { - errCh <- err - return nil, errCh - } - - // Try via the server - r, err = a.client.rawQuery(reqPath, q) - if err != nil { - errCh <- err - return nil, errCh - } + errCh <- err + return nil, errCh } // Create the output channel @@ -244,6 +175,40 @@ func (a *AllocFS) Stream(alloc *Allocation, path, origin string, offset int64, return frames, errCh } +func queryClientNode(c *Client, alloc *Allocation, reqPath string, q *QueryOptions, customizeQ func(*QueryOptions)) (io.ReadCloser, error) { + nodeClient, _ := c.GetNodeClientWithTimeout(alloc.NodeID, ClientConnTimeout, q) + + if q == nil { + q = &QueryOptions{} + } + if q.Params == nil { + q.Params = make(map[string]string) + } + if customizeQ != nil { + customizeQ(q) + } + + var r io.ReadCloser + var err error + + if nodeClient != nil { + r, err = nodeClient.rawQuery(reqPath, q) + if _, ok := err.(net.Error); err != nil && !ok { + // found a non networking error talking to client directly + return nil, err + } + + } + + // failed to query node, access through server directly + // or network error when talking to the client directly + if r == nil { + return c.rawQuery(reqPath, q) + } + + return r, err +} + // Logs streams the content of a tasks logs blocking on EOF. // The parameters are: // * allocation: the allocation to stream from. @@ -264,42 +229,20 @@ func (a *AllocFS) Logs(alloc *Allocation, follow bool, task, logType, origin str errCh := make(chan error, 1) - nodeClient, err := a.client.GetNodeClientWithTimeout(alloc.NodeID, ClientConnTimeout, q) + reqPath := fmt.Sprintf("/v1/client/fs/logs/%s", alloc.ID) + r, err := queryClientNode(a.client, alloc, reqPath, q, + func(q *QueryOptions) { + q.Params["follow"] = strconv.FormatBool(follow) + q.Params["task"] = task + q.Params["type"] = logType + q.Params["origin"] = origin + q.Params["offset"] = strconv.FormatInt(offset, 10) + }) if err != nil { errCh <- err return nil, errCh } - if q == nil { - q = &QueryOptions{} - } - if q.Params == nil { - q.Params = make(map[string]string) - } - - q.Params["follow"] = strconv.FormatBool(follow) - q.Params["task"] = task - q.Params["type"] = logType - q.Params["origin"] = origin - q.Params["offset"] = strconv.FormatInt(offset, 10) - - reqPath := fmt.Sprintf("/v1/client/fs/logs/%s", alloc.ID) - r, err := nodeClient.rawQuery(reqPath, q) - if err != nil { - // There was a networking error when talking directly to the client. - if _, ok := err.(net.Error); !ok { - errCh <- err - return nil, errCh - } - - // Try via the server - r, err = a.client.rawQuery(reqPath, q) - if err != nil { - errCh <- err - return nil, errCh - } - } - // Create the output channel frames := make(chan *StreamFrame, 10) diff --git a/api/go.mod b/api/go.mod index dd8d5f43f22..75514eeb625 100644 --- a/api/go.mod +++ b/api/go.mod @@ -5,9 +5,9 @@ go 1.12 require ( github.com/docker/go-units v0.3.3 github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 + github.com/gorilla/websocket v1.4.1 github.com/hashicorp/go-cleanhttp v0.5.1 - github.com/hashicorp/go-rootcerts v1.0.0 - github.com/hashicorp/go-uuid v1.0.1 + github.com/hashicorp/go-rootcerts v1.0.2 github.com/kr/pretty v0.1.0 github.com/mitchellh/go-testing-interface v1.0.0 github.com/stretchr/testify v1.3.0 diff --git a/api/go.sum b/api/go.sum index c7297afe395..b9745b0c08b 100644 --- a/api/go.sum +++ b/api/go.sum @@ -4,12 +4,14 @@ github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 h1:f0n1xnMSmBLzVfsMMvriDyA75NB/oBgILX2GcHXIQzY= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= +github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -17,6 +19,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/api/jobs.go b/api/jobs.go index b240b394f49..c5b85a3164d 100644 --- a/api/jobs.go +++ b/api/jobs.go @@ -146,7 +146,7 @@ func (j *Jobs) PrefixList(prefix string) ([]*JobListStub, *QueryMeta, error) { // job given its unique ID. func (j *Jobs) Info(jobID string, q *QueryOptions) (*Job, *QueryMeta, error) { var resp Job - qm, err := j.client.query("/v1/job/"+jobID, &resp, q) + qm, err := j.client.query("/v1/job/"+url.PathEscape(jobID), &resp, q) if err != nil { return nil, nil, err } @@ -157,7 +157,7 @@ func (j *Jobs) Info(jobID string, q *QueryOptions) (*Job, *QueryMeta, error) { // unique ID. func (j *Jobs) Versions(jobID string, diffs bool, q *QueryOptions) ([]*Job, []*JobDiff, *QueryMeta, error) { var resp JobVersionsResponse - qm, err := j.client.query(fmt.Sprintf("/v1/job/%s/versions?diffs=%v", jobID, diffs), &resp, q) + qm, err := j.client.query(fmt.Sprintf("/v1/job/%s/versions?diffs=%v", url.PathEscape(jobID), diffs), &resp, q) if err != nil { return nil, nil, nil, err } @@ -167,7 +167,7 @@ func (j *Jobs) Versions(jobID string, diffs bool, q *QueryOptions) ([]*Job, []*J // Allocations is used to return the allocs for a given job ID. func (j *Jobs) Allocations(jobID string, allAllocs bool, q *QueryOptions) ([]*AllocationListStub, *QueryMeta, error) { var resp []*AllocationListStub - u, err := url.Parse("/v1/job/" + jobID + "/allocations") + u, err := url.Parse("/v1/job/" + url.PathEscape(jobID) + "/allocations") if err != nil { return nil, nil, err } @@ -188,7 +188,7 @@ func (j *Jobs) Allocations(jobID string, allAllocs bool, q *QueryOptions) ([]*Al // ID. func (j *Jobs) Deployments(jobID string, all bool, q *QueryOptions) ([]*Deployment, *QueryMeta, error) { var resp []*Deployment - u, err := url.Parse("/v1/job/" + jobID + "/deployments") + u, err := url.Parse("/v1/job/" + url.PathEscape(jobID) + "/deployments") if err != nil { return nil, nil, err } @@ -208,7 +208,7 @@ func (j *Jobs) Deployments(jobID string, all bool, q *QueryOptions) ([]*Deployme // the given job ID. func (j *Jobs) LatestDeployment(jobID string, q *QueryOptions) (*Deployment, *QueryMeta, error) { var resp *Deployment - qm, err := j.client.query("/v1/job/"+jobID+"/deployment", &resp, q) + qm, err := j.client.query("/v1/job/"+url.PathEscape(jobID)+"/deployment", &resp, q) if err != nil { return nil, nil, err } @@ -219,7 +219,7 @@ func (j *Jobs) LatestDeployment(jobID string, q *QueryOptions) (*Deployment, *Qu // ID. func (j *Jobs) Evaluations(jobID string, q *QueryOptions) ([]*Evaluation, *QueryMeta, error) { var resp []*Evaluation - qm, err := j.client.query("/v1/job/"+jobID+"/evaluations", &resp, q) + qm, err := j.client.query("/v1/job/"+url.PathEscape(jobID)+"/evaluations", &resp, q) if err != nil { return nil, nil, err } @@ -232,7 +232,7 @@ func (j *Jobs) Evaluations(jobID string, q *QueryOptions) ([]*Evaluation, *Query // eventually GC'ed from the system. Most callers should not specify purge. func (j *Jobs) Deregister(jobID string, purge bool, q *WriteOptions) (string, *WriteMeta, error) { var resp JobDeregisterResponse - wm, err := j.client.delete(fmt.Sprintf("/v1/job/%v?purge=%t", jobID, purge), &resp, q) + wm, err := j.client.delete(fmt.Sprintf("/v1/job/%v?purge=%t", url.PathEscape(jobID), purge), &resp, q) if err != nil { return "", nil, err } @@ -242,7 +242,7 @@ func (j *Jobs) Deregister(jobID string, purge bool, q *WriteOptions) (string, *W // ForceEvaluate is used to force-evaluate an existing job. func (j *Jobs) ForceEvaluate(jobID string, q *WriteOptions) (string, *WriteMeta, error) { var resp JobRegisterResponse - wm, err := j.client.write("/v1/job/"+jobID+"/evaluate", nil, &resp, q) + wm, err := j.client.write("/v1/job/"+url.PathEscape(jobID)+"/evaluate", nil, &resp, q) if err != nil { return "", nil, err } @@ -258,7 +258,7 @@ func (j *Jobs) EvaluateWithOpts(jobID string, opts EvalOptions, q *WriteOptions) } var resp JobRegisterResponse - wm, err := j.client.write("/v1/job/"+jobID+"/evaluate", req, &resp, q) + wm, err := j.client.write("/v1/job/"+url.PathEscape(jobID)+"/evaluate", req, &resp, q) if err != nil { return "", nil, err } @@ -268,7 +268,7 @@ func (j *Jobs) EvaluateWithOpts(jobID string, opts EvalOptions, q *WriteOptions) // PeriodicForce spawns a new instance of the periodic job and returns the eval ID func (j *Jobs) PeriodicForce(jobID string, q *WriteOptions) (string, *WriteMeta, error) { var resp periodicForceResponse - wm, err := j.client.write("/v1/job/"+jobID+"/periodic/force", nil, &resp, q) + wm, err := j.client.write("/v1/job/"+url.PathEscape(jobID)+"/periodic/force", nil, &resp, q) if err != nil { return "", nil, err } @@ -301,7 +301,7 @@ func (j *Jobs) PlanOpts(job *Job, opts *PlanOptions, q *WriteOptions) (*JobPlanR } var resp JobPlanResponse - wm, err := j.client.write("/v1/job/"+*job.ID+"/plan", req, &resp, q) + wm, err := j.client.write("/v1/job/"+url.PathEscape(*job.ID)+"/plan", req, &resp, q) if err != nil { return nil, nil, err } @@ -310,7 +310,7 @@ func (j *Jobs) PlanOpts(job *Job, opts *PlanOptions, q *WriteOptions) (*JobPlanR func (j *Jobs) Summary(jobID string, q *QueryOptions) (*JobSummary, *QueryMeta, error) { var resp JobSummary - qm, err := j.client.query("/v1/job/"+jobID+"/summary", &resp, q) + qm, err := j.client.query("/v1/job/"+url.PathEscape(jobID)+"/summary", &resp, q) if err != nil { return nil, nil, err } @@ -325,7 +325,7 @@ func (j *Jobs) Dispatch(jobID string, meta map[string]string, Meta: meta, Payload: payload, } - wm, err := j.client.write("/v1/job/"+jobID+"/dispatch", req, &resp, q) + wm, err := j.client.write("/v1/job/"+url.PathEscape(jobID)+"/dispatch", req, &resp, q) if err != nil { return nil, nil, err } @@ -336,16 +336,17 @@ func (j *Jobs) Dispatch(jobID string, meta map[string]string, // enforceVersion is set, the job is only reverted if the current version is at // the passed version. func (j *Jobs) Revert(jobID string, version uint64, enforcePriorVersion *uint64, - q *WriteOptions, vaultToken string) (*JobRegisterResponse, *WriteMeta, error) { + q *WriteOptions, consulToken, vaultToken string) (*JobRegisterResponse, *WriteMeta, error) { var resp JobRegisterResponse req := &JobRevertRequest{ JobID: jobID, JobVersion: version, EnforcePriorVersion: enforcePriorVersion, - VaultToken: vaultToken, + // ConsulToken: consulToken, // TODO(shoenig) enable! + VaultToken: vaultToken, } - wm, err := j.client.write("/v1/job/"+jobID+"/revert", req, &resp, q) + wm, err := j.client.write("/v1/job/"+url.PathEscape(jobID)+"/revert", req, &resp, q) if err != nil { return nil, nil, err } @@ -362,7 +363,7 @@ func (j *Jobs) Stable(jobID string, version uint64, stable bool, JobVersion: version, Stable: stable, } - wm, err := j.client.write("/v1/job/"+jobID+"/stable", req, &resp, q) + wm, err := j.client.write("/v1/job/"+url.PathEscape(jobID)+"/stable", req, &resp, q) if err != nil { return nil, nil, err } @@ -670,6 +671,7 @@ type Job struct { Reschedule *ReschedulePolicy Migrate *MigrateStrategy Meta map[string]string + ConsulToken *string `mapstructure:"consul_token"` VaultToken *string `mapstructure:"vault_token"` Status *string StatusDescription *string @@ -722,6 +724,9 @@ func (j *Job) Canonicalize() { if j.AllAtOnce == nil { j.AllAtOnce = boolToPtr(false) } + if j.ConsulToken == nil { + j.ConsulToken = stringToPtr("") + } if j.VaultToken == nil { j.VaultToken = stringToPtr("") } @@ -966,6 +971,12 @@ type JobRevertRequest struct { // version before reverting. EnforcePriorVersion *uint64 + // ConsulToken is the Consul token that proves the submitter of the job revert + // has access to the Service Identity policies associated with the job's + // Consul Connect enabled services. This field is only used to transfer the + // token and is not stored after the Job revert. + ConsulToken string `json:",omitempty"` + // VaultToken is the Vault token that proves the submitter of the job revert // has access to any Vault policies specified in the targeted job version. This // field is only used to authorize the revert and is not stored after the Job diff --git a/api/jobs_test.go b/api/jobs_test.go index 34de8e8d0de..df4cb23628a 100644 --- a/api/jobs_test.go +++ b/api/jobs_test.go @@ -99,6 +99,7 @@ func TestJobs_Canonicalize(t *testing.T) { ParentID: stringToPtr(""), Priority: intToPtr(50), AllAtOnce: boolToPtr(false), + ConsulToken: stringToPtr(""), VaultToken: stringToPtr(""), Status: stringToPtr(""), StatusDescription: stringToPtr(""), @@ -186,6 +187,7 @@ func TestJobs_Canonicalize(t *testing.T) { ParentID: stringToPtr(""), Priority: intToPtr(50), AllAtOnce: boolToPtr(false), + ConsulToken: stringToPtr(""), VaultToken: stringToPtr(""), Status: stringToPtr(""), StatusDescription: stringToPtr(""), @@ -256,6 +258,7 @@ func TestJobs_Canonicalize(t *testing.T) { ParentID: stringToPtr("lol"), Priority: intToPtr(50), AllAtOnce: boolToPtr(false), + ConsulToken: stringToPtr(""), VaultToken: stringToPtr(""), Stop: boolToPtr(false), Stable: boolToPtr(false), @@ -416,6 +419,7 @@ func TestJobs_Canonicalize(t *testing.T) { Region: stringToPtr("global"), Type: stringToPtr("service"), AllAtOnce: boolToPtr(false), + ConsulToken: stringToPtr(""), VaultToken: stringToPtr(""), Stop: boolToPtr(false), Stable: boolToPtr(false), @@ -566,6 +570,7 @@ func TestJobs_Canonicalize(t *testing.T) { Type: stringToPtr("service"), Priority: intToPtr(50), AllAtOnce: boolToPtr(false), + ConsulToken: stringToPtr(""), VaultToken: stringToPtr(""), Stop: boolToPtr(false), Stable: boolToPtr(false), @@ -650,6 +655,7 @@ func TestJobs_Canonicalize(t *testing.T) { ParentID: stringToPtr("lol"), Priority: intToPtr(50), AllAtOnce: boolToPtr(false), + ConsulToken: stringToPtr(""), VaultToken: stringToPtr(""), Stop: boolToPtr(false), Stable: boolToPtr(false), @@ -846,13 +852,13 @@ func TestJobs_Revert(t *testing.T) { assertWriteMeta(t, wm) // Fail revert at incorrect enforce - _, _, err = jobs.Revert(*job.ID, 0, uint64ToPtr(10), nil, "") + _, _, err = jobs.Revert(*job.ID, 0, uint64ToPtr(10), nil, "", "") if err == nil || !strings.Contains(err.Error(), "enforcing version") { t.Fatalf("expected enforcement error: %v", err) } // Works at correct index - revertResp, wm, err := jobs.Revert(*job.ID, 0, uint64ToPtr(1), nil, "") + revertResp, wm, err := jobs.Revert(*job.ID, 0, uint64ToPtr(1), nil, "", "") if err != nil { t.Fatalf("err: %s", err) } @@ -876,13 +882,15 @@ func TestJobs_Info(t *testing.T) { // Trying to retrieve a job by ID before it exists // returns an error - _, _, err := jobs.Info("job1", nil) + id := "job-id/with\\troublesome:characters\n?&字\000" + _, _, err := jobs.Info(id, nil) if err == nil || !strings.Contains(err.Error(), "not found") { t.Fatalf("expected not found error, got: %#v", err) } // Register the job job := testJob() + job.ID = &id _, wm, err := jobs.Register(job, nil) if err != nil { t.Fatalf("err: %s", err) @@ -890,7 +898,7 @@ func TestJobs_Info(t *testing.T) { assertWriteMeta(t, wm) // Query the job again and ensure it exists - result, qm, err := jobs.Info("job1", nil) + result, qm, err := jobs.Info(id, nil) if err != nil { t.Fatalf("err: %s", err) } diff --git a/api/nodes.go b/api/nodes.go index bf72034f094..4a264eb4d33 100644 --- a/api/nodes.go +++ b/api/nodes.go @@ -126,7 +126,7 @@ func (m *MonitorMessage) String() string { // MonitorDrain emits drain related events on the returned string channel. The // channel will be closed when all allocations on the draining node have -// stopped or the context is canceled. +// stopped, when an error occurs, or if the context is canceled. func (n *Nodes) MonitorDrain(ctx context.Context, nodeID string, index uint64, ignoreSys bool) <-chan *MonitorMessage { outCh := make(chan *MonitorMessage, 8) nodeCh := make(chan *MonitorMessage, 1) @@ -335,7 +335,7 @@ func (n *Nodes) monitorDrainAllocs(ctx context.Context, nodeID string, ignoreSys // Exit if all allocs are terminal if runningAllocs == 0 { - msg := Messagef(MonitorMsgLevelInfo, "All allocations on node %q have stopped.", nodeID) + msg := Messagef(MonitorMsgLevelInfo, "All allocations on node %q have stopped", nodeID) select { case allocCh <- msg: case <-ctx.Done(): @@ -521,6 +521,9 @@ type DrainStrategy struct { // ForceDeadline is the deadline time for the drain after which drains will // be forced ForceDeadline time.Time + + // StartedAt is the time the drain process started + StartedAt time.Time } // DrainSpec describes a Node's drain behavior. diff --git a/api/services.go b/api/services.go index 91ce8626b42..6b1220ea367 100644 --- a/api/services.go +++ b/api/services.go @@ -107,6 +107,7 @@ type Service struct { CheckRestart *CheckRestart `mapstructure:"check_restart"` Connect *ConsulConnect Meta map[string]string + CanaryMeta map[string]string } // Canonicalize the Service by ensuring its name and address mode are set. Task @@ -143,6 +144,7 @@ type ConsulConnect struct { // ConsulSidecarService represents a Consul Connect SidecarService jobspec // stanza. type ConsulSidecarService struct { + Tags []string Port string Proxy *ConsulProxy } @@ -165,8 +167,10 @@ type SidecarTask struct { // ConsulProxy represents a Consul Connect sidecar proxy jobspec stanza. type ConsulProxy struct { - Upstreams []*ConsulUpstream - Config map[string]interface{} + LocalServiceAddress string `mapstructure:"local_service_address"` + LocalServicePort int `mapstructure:"local_service_port"` + Upstreams []*ConsulUpstream + Config map[string]interface{} } // ConsulUpstream represents a Consul Connect upstream jobspec stanza. diff --git a/api/services_test.go b/api/services_test.go index 4aac6f5d79f..9dc2eb07cdf 100644 --- a/api/services_test.go +++ b/api/services_test.go @@ -54,3 +54,32 @@ func TestService_CheckRestart(t *testing.T) { assert.Equal(t, *service.Checks[2].CheckRestart.Grace, 11*time.Second) assert.True(t, service.Checks[2].CheckRestart.IgnoreWarnings) } + +// TestService_Connect asserts Service.Connect settings are properly +// inherited by Checks. +func TestService_Connect(t *testing.T) { + job := &Job{Name: stringToPtr("job")} + tg := &TaskGroup{Name: stringToPtr("group")} + task := &Task{Name: "task"} + service := &Service{ + Connect: &ConsulConnect{ + SidecarService: &ConsulSidecarService{ + Proxy: &ConsulProxy{ + Upstreams: []*ConsulUpstream{ + { + DestinationName: "upstream", + LocalBindPort: 80, + }, + }, + LocalServicePort: 8000, + }, + }, + }, + } + + service.Canonicalize(task, tg, job) + proxy := service.Connect.SidecarService.Proxy + assert.Equal(t, proxy.Upstreams[0].LocalBindPort, 80) + assert.Equal(t, proxy.Upstreams[0].DestinationName, "upstream") + assert.Equal(t, proxy.LocalServicePort, 8000) +} diff --git a/api/tasks.go b/api/tasks.go index 95fb1fb6b1a..763093257a5 100644 --- a/api/tasks.go +++ b/api/tasks.go @@ -366,17 +366,32 @@ func (m *MigrateStrategy) Copy() *MigrateStrategy { type VolumeRequest struct { Name string Type string + Source string ReadOnly bool `mapstructure:"read_only"` - - Config map[string]interface{} } +const ( + VolumeMountPropagationPrivate = "private" + VolumeMountPropagationHostToTask = "host-to-task" + VolumeMountPropagationBidirectional = "bidirectional" +) + // VolumeMount represents the relationship between a destination path in a task // and the task group volume that should be mounted there. type VolumeMount struct { - Volume string - Destination string - ReadOnly bool `mapstructure:"read_only"` + Volume *string + Destination *string + ReadOnly *bool `mapstructure:"read_only"` + PropagationMode *string `mapstructure:"propagation_mode"` +} + +func (vm *VolumeMount) Canonicalize() { + if vm.PropagationMode == nil { + vm.PropagationMode = stringToPtr(VolumeMountPropagationPrivate) + } + if vm.ReadOnly == nil { + vm.ReadOnly = boolToPtr(false) + } } // TaskGroup is the unit of scheduling. @@ -396,6 +411,7 @@ type TaskGroup struct { Networks []*NetworkResource Meta map[string]string Services []*Service + ShutdownDelay *time.Duration `mapstructure:"shutdown_delay"` } // NewTaskGroup creates a new TaskGroup. @@ -643,6 +659,9 @@ func (t *Task) Canonicalize(tg *TaskGroup, job *Job) { for _, a := range t.Affinities { a.Canonicalize() } + for _, vm := range t.VolumeMounts { + vm.Canonicalize() + } } // TaskArtifact is used to download artifacts before running a task. diff --git a/api/tasks_test.go b/api/tasks_test.go index 29d9cf69161..f83a91e24ff 100644 --- a/api/tasks_test.go +++ b/api/tasks_test.go @@ -368,6 +368,14 @@ func TestTask_Artifact(t *testing.T) { } } +func TestTask_VolumeMount(t *testing.T) { + t.Parallel() + vm := &VolumeMount{} + vm.Canonicalize() + require.NotNil(t, vm.PropagationMode) + require.Equal(t, *vm.PropagationMode, "private") +} + // Ensures no regression on https://github.com/hashicorp/nomad/issues/3132 func TestTaskGroup_Canonicalize_Update(t *testing.T) { // Job with an Empty() Update diff --git a/api/util_test.go b/api/util_test.go index 9b2358db2f0..2ebf502d7a9 100644 --- a/api/util_test.go +++ b/api/util_test.go @@ -1,6 +1,8 @@ package api import ( + crand "crypto/rand" + "fmt" "testing" ) @@ -90,3 +92,18 @@ func int64ToPtr(i int64) *int64 { func float64ToPtr(f float64) *float64 { return &f } + +// generateUUID generates a uuid useful for testing only +func generateUUID() string { + buf := make([]byte, 16) + if _, err := crand.Read(buf); err != nil { + panic(fmt.Errorf("failed to read random bytes: %v", err)) + } + + return fmt.Sprintf("%08x-%04x-%04x-%04x-%12x", + buf[0:4], + buf[4:6], + buf[6:8], + buf[8:10], + buf[10:16]) +} diff --git a/appveyor.yml b/appveyor.yml index 25deb5f400f..84c083d7435 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -23,10 +23,10 @@ install: cd %APPVEYOR_BUILD_FOLDER% rmdir /Q/S C:\go - # install go 1.12.9 to match version used for cutting a release + # install the go version used for cutting a release - cmd: | mkdir c:\go - appveyor DownloadFile "https://dl.google.com/go/go1.12.9.windows-amd64.zip" -FileName "%TEMP%\\go.zip" + appveyor DownloadFile "https://dl.google.com/go/go1.12.16.windows-amd64.zip" -FileName "%TEMP%\\go.zip" - ps: Expand-Archive $Env:TEMP\go.zip -DestinationPath C:\ diff --git a/client/acl_test.go b/client/acl_test.go index 12493e30107..eef97b7e57c 100644 --- a/client/acl_test.go +++ b/client/acl_test.go @@ -13,8 +13,8 @@ import ( ) func TestClient_ACL_resolveTokenValue(t *testing.T) { - s1, _, _ := testACLServer(t, nil) - defer s1.Shutdown() + s1, _, _, cleanupS1 := testACLServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) c1, cleanup := TestClient(t, func(c *config.Config) { @@ -62,8 +62,8 @@ func TestClient_ACL_resolveTokenValue(t *testing.T) { } func TestClient_ACL_resolvePolicies(t *testing.T) { - s1, _, root := testACLServer(t, nil) - defer s1.Shutdown() + s1, _, root, cleanupS1 := testACLServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) c1, cleanup := TestClient(t, func(c *config.Config) { @@ -102,8 +102,8 @@ func TestClient_ACL_resolvePolicies(t *testing.T) { } func TestClient_ACL_ResolveToken_Disabled(t *testing.T) { - s1, _ := testServer(t, nil) - defer s1.Shutdown() + s1, _, cleanupS1 := testServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) c1, cleanup := TestClient(t, func(c *config.Config) { @@ -118,8 +118,8 @@ func TestClient_ACL_ResolveToken_Disabled(t *testing.T) { } func TestClient_ACL_ResolveToken(t *testing.T) { - s1, _, _ := testACLServer(t, nil) - defer s1.Shutdown() + s1, _, _, cleanupS1 := testACLServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) c1, cleanup := TestClient(t, func(c *config.Config) { diff --git a/client/agent_endpoint.go b/client/agent_endpoint.go new file mode 100644 index 00000000000..0618cc7e788 --- /dev/null +++ b/client/agent_endpoint.go @@ -0,0 +1,212 @@ +package client + +import ( + "bytes" + "context" + "errors" + "io" + "time" + + "github.com/hashicorp/nomad/command/agent/monitor" + "github.com/hashicorp/nomad/command/agent/pprof" + "github.com/hashicorp/nomad/helper" + "github.com/hashicorp/nomad/nomad/structs" + "github.com/ugorji/go/codec" + + metrics "github.com/armon/go-metrics" + log "github.com/hashicorp/go-hclog" + sframer "github.com/hashicorp/nomad/client/lib/streamframer" + cstructs "github.com/hashicorp/nomad/client/structs" +) + +type Agent struct { + c *Client +} + +func NewAgentEndpoint(c *Client) *Agent { + a := &Agent{c: c} + a.c.streamingRpcs.Register("Agent.Monitor", a.monitor) + return a +} + +func (a *Agent) Profile(args *structs.AgentPprofRequest, reply *structs.AgentPprofResponse) error { + // Check ACL for agent write + aclObj, err := a.c.ResolveToken(args.AuthToken) + if err != nil { + return err + } else if aclObj != nil && !aclObj.AllowAgentWrite() { + return structs.ErrPermissionDenied + } + + // If ACLs are disabled, EnableDebug must be enabled + if aclObj == nil && !a.c.config.EnableDebug { + return structs.ErrPermissionDenied + } + + var resp []byte + var headers map[string]string + + // Determine which profile to run and generate profile. + // Blocks for args.Seconds + // Our RPC endpoints currently don't support context + // or request cancellation so stubbing with TODO + switch args.ReqType { + case pprof.CPUReq: + resp, headers, err = pprof.CPUProfile(context.TODO(), args.Seconds) + case pprof.CmdReq: + resp, headers, err = pprof.Cmdline() + case pprof.LookupReq: + resp, headers, err = pprof.Profile(args.Profile, args.Debug, args.GC) + case pprof.TraceReq: + resp, headers, err = pprof.Trace(context.TODO(), args.Seconds) + } + + if err != nil { + if pprof.IsErrProfileNotFound(err) { + return structs.NewErrRPCCoded(404, err.Error()) + } + return structs.NewErrRPCCoded(500, err.Error()) + } + + // Copy profile response to reply + reply.Payload = resp + reply.AgentID = a.c.NodeID() + reply.HTTPHeaders = headers + + return nil +} + +func (a *Agent) monitor(conn io.ReadWriteCloser) { + defer metrics.MeasureSince([]string{"client", "agent", "monitor"}, time.Now()) + defer conn.Close() + + // Decode arguments + var args cstructs.MonitorRequest + decoder := codec.NewDecoder(conn, structs.MsgpackHandle) + encoder := codec.NewEncoder(conn, structs.MsgpackHandle) + + if err := decoder.Decode(&args); err != nil { + handleStreamResultError(err, helper.Int64ToPtr(500), encoder) + return + } + + // Check acl + if aclObj, err := a.c.ResolveToken(args.AuthToken); err != nil { + handleStreamResultError(err, helper.Int64ToPtr(403), encoder) + return + } else if aclObj != nil && !aclObj.AllowAgentRead() { + handleStreamResultError(structs.ErrPermissionDenied, helper.Int64ToPtr(403), encoder) + return + } + + logLevel := log.LevelFromString(args.LogLevel) + if args.LogLevel == "" { + logLevel = log.LevelFromString("INFO") + } + + if logLevel == log.NoLevel { + handleStreamResultError(errors.New("Unknown log level"), helper.Int64ToPtr(400), encoder) + return + } + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + monitor := monitor.New(512, a.c.logger, &log.LoggerOptions{ + JSONFormat: args.LogJSON, + Level: logLevel, + }) + + frames := make(chan *sframer.StreamFrame, streamFramesBuffer) + errCh := make(chan error) + var buf bytes.Buffer + frameCodec := codec.NewEncoder(&buf, structs.JsonHandle) + + framer := sframer.NewStreamFramer(frames, 1*time.Second, 200*time.Millisecond, 1024) + framer.Run() + + defer framer.Destroy() + + // goroutine to detect remote side closing + go func() { + if _, err := conn.Read(nil); err != nil { + // One end of the pipe explicitly closed, exit + cancel() + return + } + select { + case <-ctx.Done(): + return + } + }() + + logCh := monitor.Start() + defer monitor.Stop() + initialOffset := int64(0) + + // receive logs and build frames + go func() { + defer framer.Destroy() + LOOP: + for { + select { + case log := <-logCh: + if err := framer.Send("", "log", log, initialOffset); err != nil { + select { + case errCh <- err: + case <-ctx.Done(): + } + break LOOP + } + case <-ctx.Done(): + break LOOP + } + } + }() + + var streamErr error +OUTER: + for { + select { + case frame, ok := <-frames: + if !ok { + // frame may have been closed when an error + // occurred. Check once more for an error. + select { + case streamErr = <-errCh: + // There was a pending error! + default: + // No error, continue on + } + + break OUTER + } + + var resp cstructs.StreamErrWrapper + if args.PlainText { + resp.Payload = frame.Data + } else { + if err := frameCodec.Encode(frame); err != nil { + streamErr = err + break OUTER + } + + resp.Payload = buf.Bytes() + buf.Reset() + } + + if err := encoder.Encode(resp); err != nil { + streamErr = err + break OUTER + } + encoder.Reset(conn) + case <-ctx.Done(): + break OUTER + } + } + + if streamErr != nil { + handleStreamResultError(streamErr, helper.Int64ToPtr(500), encoder) + return + } +} diff --git a/client/agent_endpoint_test.go b/client/agent_endpoint_test.go new file mode 100644 index 00000000000..6d391824a02 --- /dev/null +++ b/client/agent_endpoint_test.go @@ -0,0 +1,355 @@ +package client + +import ( + "encoding/json" + "fmt" + "io" + "net" + "strings" + "testing" + "time" + + "github.com/hashicorp/nomad/acl" + "github.com/hashicorp/nomad/client/config" + sframer "github.com/hashicorp/nomad/client/lib/streamframer" + cstructs "github.com/hashicorp/nomad/client/structs" + "github.com/hashicorp/nomad/command/agent/pprof" + "github.com/hashicorp/nomad/nomad" + "github.com/hashicorp/nomad/nomad/mock" + "github.com/hashicorp/nomad/nomad/structs" + "github.com/hashicorp/nomad/testutil" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/ugorji/go/codec" +) + +func TestMonitor_Monitor(t *testing.T) { + t.Parallel() + require := require.New(t) + + // start server and client + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() + testutil.WaitForLeader(t, s.RPC) + + c, cleanupC := TestClient(t, func(c *config.Config) { + c.Servers = []string{s.GetConfig().RPCAddr.String()} + }) + defer cleanupC() + + req := cstructs.MonitorRequest{ + LogLevel: "debug", + NodeID: c.NodeID(), + } + + handler, err := c.StreamingRpcHandler("Agent.Monitor") + require.Nil(err) + + // create pipe + p1, p2 := net.Pipe() + defer p1.Close() + defer p2.Close() + + errCh := make(chan error) + streamMsg := make(chan *cstructs.StreamErrWrapper) + + go handler(p2) + + // Start decoder + go func() { + decoder := codec.NewDecoder(p1, structs.MsgpackHandle) + for { + var msg cstructs.StreamErrWrapper + if err := decoder.Decode(&msg); err != nil { + if err == io.EOF || strings.Contains(err.Error(), "closed") { + return + } + errCh <- fmt.Errorf("error decoding: %v", err) + } + + streamMsg <- &msg + } + }() + + // send request + encoder := codec.NewEncoder(p1, structs.MsgpackHandle) + require.Nil(encoder.Encode(req)) + + timeout := time.After(5 * time.Second) + expected := "[DEBUG]" + received := "" + +OUTER: + for { + select { + case <-timeout: + t.Fatal("timeout waiting for logs") + case err := <-errCh: + t.Fatal(err) + case msg := <-streamMsg: + if msg.Error != nil { + t.Fatalf("Got error: %v", msg.Error.Error()) + } + + var frame sframer.StreamFrame + err := json.Unmarshal(msg.Payload, &frame) + assert.NoError(t, err) + + received += string(frame.Data) + if strings.Contains(received, expected) { + require.Nil(p2.Close()) + break OUTER + } + } + } +} + +func TestMonitor_Monitor_ACL(t *testing.T) { + t.Parallel() + require := require.New(t) + + // start server + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() + testutil.WaitForLeader(t, s.RPC) + + c, cleanupC := TestClient(t, func(c *config.Config) { + c.ACLEnabled = true + c.Servers = []string{s.GetConfig().RPCAddr.String()} + }) + defer cleanupC() + + policyBad := mock.NodePolicy(acl.PolicyDeny) + tokenBad := mock.CreatePolicyAndToken(t, s.State(), 1005, "invalid", policyBad) + + policyGood := mock.AgentPolicy(acl.PolicyRead) + tokenGood := mock.CreatePolicyAndToken(t, s.State(), 1009, "valid", policyGood) + + cases := []struct { + Name string + Token string + ExpectedErr string + }{ + { + Name: "bad token", + Token: tokenBad.SecretID, + ExpectedErr: structs.ErrPermissionDenied.Error(), + }, + { + Name: "good token", + Token: tokenGood.SecretID, + ExpectedErr: "Unknown log level", + }, + { + Name: "root token", + Token: root.SecretID, + ExpectedErr: "Unknown log level", + }, + } + + for _, tc := range cases { + t.Run(tc.Name, func(t *testing.T) { + req := &cstructs.MonitorRequest{ + LogLevel: "unknown", + QueryOptions: structs.QueryOptions{ + Namespace: structs.DefaultNamespace, + Region: "global", + AuthToken: tc.Token, + }, + } + + handler, err := c.StreamingRpcHandler("Agent.Monitor") + require.Nil(err) + + // create pipe + p1, p2 := net.Pipe() + defer p1.Close() + defer p2.Close() + + errCh := make(chan error) + streamMsg := make(chan *cstructs.StreamErrWrapper) + + go handler(p2) + + // Start decoder + go func() { + decoder := codec.NewDecoder(p1, structs.MsgpackHandle) + for { + var msg cstructs.StreamErrWrapper + if err := decoder.Decode(&msg); err != nil { + if err == io.EOF || strings.Contains(err.Error(), "closed") { + return + } + errCh <- fmt.Errorf("error decoding: %v", err) + } + + streamMsg <- &msg + } + }() + + // send request + encoder := codec.NewEncoder(p1, structs.MsgpackHandle) + require.Nil(encoder.Encode(req)) + + timeout := time.After(5 * time.Second) + OUTER: + for { + select { + case <-timeout: + t.Fatal("timeout") + case err := <-errCh: + t.Fatal(err) + case msg := <-streamMsg: + if msg.Error == nil { + continue + } + + if strings.Contains(msg.Error.Error(), tc.ExpectedErr) { + break OUTER + } else { + t.Fatalf("Bad error: %v", msg.Error) + } + } + } + }) + } +} + +// Test that by default with no acl, endpoint is disabled +func TestAgentProfile_DefaultDisabled(t *testing.T) { + t.Parallel() + require := require.New(t) + + // start server and client + s1, cleanup := nomad.TestServer(t, nil) + defer cleanup() + + testutil.WaitForLeader(t, s1.RPC) + + c, cleanupC := TestClient(t, func(c *config.Config) { + c.Servers = []string{s1.GetConfig().RPCAddr.String()} + }) + defer cleanupC() + + req := structs.AgentPprofRequest{ + ReqType: pprof.CPUReq, + NodeID: c.NodeID(), + } + + reply := structs.AgentPprofResponse{} + + err := c.ClientRPC("Agent.Profile", &req, &reply) + require.EqualError(err, structs.ErrPermissionDenied.Error()) +} + +func TestAgentProfile(t *testing.T) { + t.Parallel() + require := require.New(t) + + // start server and client + s1, cleanup := nomad.TestServer(t, nil) + defer cleanup() + + testutil.WaitForLeader(t, s1.RPC) + + c, cleanupC := TestClient(t, func(c *config.Config) { + c.Servers = []string{s1.GetConfig().RPCAddr.String()} + c.EnableDebug = true + }) + defer cleanupC() + + // Successful request + { + req := structs.AgentPprofRequest{ + ReqType: pprof.CPUReq, + NodeID: c.NodeID(), + } + + reply := structs.AgentPprofResponse{} + + err := c.ClientRPC("Agent.Profile", &req, &reply) + require.NoError(err) + + require.NotNil(reply.Payload) + require.Equal(c.NodeID(), reply.AgentID) + } + + // Unknown profile request + { + req := structs.AgentPprofRequest{ + ReqType: pprof.LookupReq, + Profile: "unknown", + NodeID: c.NodeID(), + } + + reply := structs.AgentPprofResponse{} + + err := c.ClientRPC("Agent.Profile", &req, &reply) + require.EqualError(err, "RPC Error:: 404,Pprof profile not found profile: unknown") + } +} + +func TestAgentProfile_ACL(t *testing.T) { + t.Parallel() + require := require.New(t) + + // start server + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() + testutil.WaitForLeader(t, s.RPC) + + c, cleanupC := TestClient(t, func(c *config.Config) { + c.ACLEnabled = true + c.Servers = []string{s.GetConfig().RPCAddr.String()} + }) + defer cleanupC() + + policyBad := mock.AgentPolicy(acl.PolicyRead) + tokenBad := mock.CreatePolicyAndToken(t, s.State(), 1005, "invalid", policyBad) + + policyGood := mock.AgentPolicy(acl.PolicyWrite) + tokenGood := mock.CreatePolicyAndToken(t, s.State(), 1009, "valid", policyGood) + + cases := []struct { + Name string + Token string + authErr bool + }{ + { + Name: "bad token", + Token: tokenBad.SecretID, + authErr: true, + }, + { + Name: "good token", + Token: tokenGood.SecretID, + }, + { + Name: "root token", + Token: root.SecretID, + }, + } + + for _, tc := range cases { + t.Run(tc.Name, func(t *testing.T) { + req := &structs.AgentPprofRequest{ + ReqType: pprof.CmdReq, + QueryOptions: structs.QueryOptions{ + Namespace: structs.DefaultNamespace, + Region: "global", + AuthToken: tc.Token, + }, + } + + reply := &structs.AgentPprofResponse{} + + err := c.ClientRPC("Agent.Profile", req, reply) + if tc.authErr { + require.EqualError(err, structs.ErrPermissionDenied.Error()) + } else { + require.NoError(err) + require.NotNil(reply.Payload) + } + }) + } +} diff --git a/client/alloc_endpoint.go b/client/alloc_endpoint.go index e97e98812c7..18fcdd83a33 100644 --- a/client/alloc_endpoint.go +++ b/client/alloc_endpoint.go @@ -49,10 +49,15 @@ func (a *Allocations) GarbageCollectAll(args *nstructs.NodeSpecificRequest, repl func (a *Allocations) GarbageCollect(args *nstructs.AllocSpecificRequest, reply *nstructs.GenericResponse) error { defer metrics.MeasureSince([]string{"client", "allocations", "garbage_collect"}, time.Now()) - // Check submit job permissions + alloc, err := a.c.GetAlloc(args.AllocID) + if err != nil { + return err + } + + // Check namespace submit job permission. if aclObj, err := a.c.ResolveToken(args.AuthToken); err != nil { return err - } else if aclObj != nil && !aclObj.AllowNsOp(args.Namespace, acl.NamespaceCapabilitySubmitJob) { + } else if aclObj != nil && !aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilitySubmitJob) { return nstructs.ErrPermissionDenied } @@ -68,10 +73,15 @@ func (a *Allocations) GarbageCollect(args *nstructs.AllocSpecificRequest, reply func (a *Allocations) Signal(args *nstructs.AllocSignalRequest, reply *nstructs.GenericResponse) error { defer metrics.MeasureSince([]string{"client", "allocations", "signal"}, time.Now()) - // Check alloc-lifecycle permissions + alloc, err := a.c.GetAlloc(args.AllocID) + if err != nil { + return err + } + + // Check namespace alloc-lifecycle permission. if aclObj, err := a.c.ResolveToken(args.AuthToken); err != nil { return err - } else if aclObj != nil && !aclObj.AllowNsOp(args.Namespace, acl.NamespaceCapabilityAllocLifecycle) { + } else if aclObj != nil && !aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityAllocLifecycle) { return nstructs.ErrPermissionDenied } @@ -82,9 +92,15 @@ func (a *Allocations) Signal(args *nstructs.AllocSignalRequest, reply *nstructs. func (a *Allocations) Restart(args *nstructs.AllocRestartRequest, reply *nstructs.GenericResponse) error { defer metrics.MeasureSince([]string{"client", "allocations", "restart"}, time.Now()) + alloc, err := a.c.GetAlloc(args.AllocID) + if err != nil { + return err + } + + // Check namespace alloc-lifecycle permission. if aclObj, err := a.c.ResolveToken(args.AuthToken); err != nil { return err - } else if aclObj != nil && !aclObj.AllowNsOp(args.Namespace, acl.NamespaceCapabilityAllocLifecycle) { + } else if aclObj != nil && !aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityAllocLifecycle) { return nstructs.ErrPermissionDenied } @@ -95,10 +111,15 @@ func (a *Allocations) Restart(args *nstructs.AllocRestartRequest, reply *nstruct func (a *Allocations) Stats(args *cstructs.AllocStatsRequest, reply *cstructs.AllocStatsResponse) error { defer metrics.MeasureSince([]string{"client", "allocations", "stats"}, time.Now()) - // Check read job permissions + alloc, err := a.c.GetAlloc(args.AllocID) + if err != nil { + return err + } + + // Check read-job permission. if aclObj, err := a.c.ResolveToken(args.AuthToken); err != nil { return err - } else if aclObj != nil && !aclObj.AllowNsOp(args.Namespace, acl.NamespaceCapabilityReadJob) { + } else if aclObj != nil && !aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityReadJob) { return nstructs.ErrPermissionDenied } @@ -148,6 +169,20 @@ func (a *Allocations) execImpl(encoder *codec.Encoder, decoder *codec.Decoder, e return nil, structs.ErrPermissionDenied } + if req.AllocID == "" { + return helper.Int64ToPtr(400), allocIDNotPresentErr + } + ar, err := a.c.getAllocRunner(req.AllocID) + if err != nil { + code := helper.Int64ToPtr(500) + if structs.IsErrUnknownAllocation(err) { + code = helper.Int64ToPtr(404) + } + + return code, err + } + alloc := ar.Alloc() + aclObj, token, err := a.c.resolveTokenAndACL(req.QueryOptions.AuthToken) { // log access @@ -167,20 +202,14 @@ func (a *Allocations) execImpl(encoder *codec.Encoder, decoder *codec.Decoder, e ) } - // Check read permissions + // Check alloc-exec permission. if err != nil { return nil, err - } else if aclObj != nil { - exec := aclObj.AllowNsOp(req.QueryOptions.Namespace, acl.NamespaceCapabilityAllocExec) - if !exec { - return nil, structs.ErrPermissionDenied - } + } else if aclObj != nil && !aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityAllocExec) { + return nil, structs.ErrPermissionDenied } // Validate the arguments - if req.AllocID == "" { - return helper.Int64ToPtr(400), allocIDNotPresentErr - } if req.Task == "" { return helper.Int64ToPtr(400), taskNotPresentErr } @@ -188,16 +217,6 @@ func (a *Allocations) execImpl(encoder *codec.Encoder, decoder *codec.Decoder, e return helper.Int64ToPtr(400), errors.New("command is not present") } - ar, err := a.c.getAllocRunner(req.AllocID) - if err != nil { - code := helper.Int64ToPtr(500) - if structs.IsErrUnknownAllocation(err) { - code = helper.Int64ToPtr(404) - } - - return code, err - } - capabilities, err := ar.GetTaskDriverCapabilities(req.Task) if err != nil { code := helper.Int64ToPtr(500) @@ -210,7 +229,7 @@ func (a *Allocations) execImpl(encoder *codec.Encoder, decoder *codec.Decoder, e // check node access if aclObj != nil && capabilities.FSIsolation == drivers.FSIsolationNone { - exec := aclObj.AllowNsOp(req.QueryOptions.Namespace, acl.NamespaceCapabilityAllocNodeExec) + exec := aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityAllocNodeExec) if !exec { return nil, structs.ErrPermissionDenied } diff --git a/client/alloc_endpoint_test.go b/client/alloc_endpoint_test.go index 4031aa737cb..380099c411e 100644 --- a/client/alloc_endpoint_test.go +++ b/client/alloc_endpoint_test.go @@ -69,18 +69,29 @@ func TestAllocations_Restart(t *testing.T) { func TestAllocations_Restart_ACL(t *testing.T) { t.Parallel() require := require.New(t) - server, addr, root := testACLServer(t, nil) - defer server.Shutdown() - client, cleanup := TestClient(t, func(c *config.Config) { + server, addr, root, cleanupS := testACLServer(t, nil) + defer cleanupS() + + client, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} c.ACLEnabled = true }) - defer cleanup() + defer cleanupC() + + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, server.RPC, job, root.SecretID)[0] // Try request without a token and expect failure { req := &nstructs.AllocRestartRequest{} + req.AllocID = alloc.ID var resp nstructs.GenericResponse err := client.ClientRPC("Allocations.Restart", &req, &resp) require.NotNil(err) @@ -91,6 +102,7 @@ func TestAllocations_Restart_ACL(t *testing.T) { { token := mock.CreatePolicyAndToken(t, server.State(), 1005, "invalid", mock.NamespacePolicy(nstructs.DefaultNamespace, "", []string{})) req := &nstructs.AllocRestartRequest{} + req.AllocID = alloc.ID req.AuthToken = token.SecretID var resp nstructs.GenericResponse @@ -106,20 +118,27 @@ func TestAllocations_Restart_ACL(t *testing.T) { token := mock.CreatePolicyAndToken(t, server.State(), 1007, "valid", policyHCL) require.NotNil(token) req := &nstructs.AllocRestartRequest{} + req.AllocID = alloc.ID req.AuthToken = token.SecretID req.Namespace = nstructs.DefaultNamespace var resp nstructs.GenericResponse err := client.ClientRPC("Allocations.Restart", &req, &resp) - require.True(nstructs.IsErrUnknownAllocation(err), "Expected unknown alloc, found: %v", err) + require.NoError(err) + //require.True(nstructs.IsErrUnknownAllocation(err), "Expected unknown alloc, found: %v", err) } // Try request with a management token { req := &nstructs.AllocRestartRequest{} + req.AllocID = alloc.ID req.AuthToken = root.SecretID var resp nstructs.GenericResponse err := client.ClientRPC("Allocations.Restart", &req, &resp) - require.True(nstructs.IsErrUnknownAllocation(err), "Expected unknown alloc, found: %v", err) + // Depending on how quickly the alloc restarts there may be no + // error *or* a task not running error; either is fine. + if err != nil { + require.Contains(err.Error(), "Task not running", err) + } } } @@ -137,14 +156,15 @@ func TestAllocations_GarbageCollectAll(t *testing.T) { func TestAllocations_GarbageCollectAll_ACL(t *testing.T) { t.Parallel() require := require.New(t) - server, addr, root := testACLServer(t, nil) - defer server.Shutdown() - client, cleanup := TestClient(t, func(c *config.Config) { + server, addr, root, cleanupS := testACLServer(t, nil) + defer cleanupS() + + client, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} c.ACLEnabled = true }) - defer cleanup() + defer cleanupC() // Try request without a token and expect failure { @@ -230,18 +250,29 @@ func TestAllocations_GarbageCollect(t *testing.T) { func TestAllocations_GarbageCollect_ACL(t *testing.T) { t.Parallel() require := require.New(t) - server, addr, root := testACLServer(t, nil) - defer server.Shutdown() - client, cleanup := TestClient(t, func(c *config.Config) { + server, addr, root, cleanupS := testACLServer(t, nil) + defer cleanupS() + + client, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} c.ACLEnabled = true }) - defer cleanup() + defer cleanupC() + + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, server.RPC, job, root.SecretID)[0] // Try request without a token and expect failure { req := &nstructs.AllocSpecificRequest{} + req.AllocID = alloc.ID var resp nstructs.GenericResponse err := client.ClientRPC("Allocations.GarbageCollect", &req, &resp) require.NotNil(err) @@ -252,6 +283,7 @@ func TestAllocations_GarbageCollect_ACL(t *testing.T) { { token := mock.CreatePolicyAndToken(t, server.State(), 1005, "invalid", mock.NodePolicy(acl.PolicyDeny)) req := &nstructs.AllocSpecificRequest{} + req.AllocID = alloc.ID req.AuthToken = token.SecretID var resp nstructs.GenericResponse @@ -266,6 +298,7 @@ func TestAllocations_GarbageCollect_ACL(t *testing.T) { token := mock.CreatePolicyAndToken(t, server.State(), 1005, "test-valid", mock.NamespacePolicy(nstructs.DefaultNamespace, "", []string{acl.NamespaceCapabilitySubmitJob})) req := &nstructs.AllocSpecificRequest{} + req.AllocID = alloc.ID req.AuthToken = token.SecretID req.Namespace = nstructs.DefaultNamespace @@ -308,24 +341,35 @@ func TestAllocations_Signal(t *testing.T) { err = client.ClientRPC("Allocations.Signal", &req, &resp2) require.Error(t, err, "Expected error, got: %s, resp: %#+v", err, resp2) - require.Equal(t, "1 error(s) occurred:\n\n* Failed to signal task: web, err: Task not running", err.Error()) + require.Contains(t, err.Error(), "Failed to signal task: web, err: Task not running") } func TestAllocations_Signal_ACL(t *testing.T) { t.Parallel() require := require.New(t) - server, addr, root := testACLServer(t, nil) - defer server.Shutdown() - client, cleanup := TestClient(t, func(c *config.Config) { + server, addr, root, cleanupS := testACLServer(t, nil) + defer cleanupS() + + client, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} c.ACLEnabled = true }) - defer cleanup() + defer cleanupC() + + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, server.RPC, job, root.SecretID)[0] // Try request without a token and expect failure { req := &nstructs.AllocSignalRequest{} + req.AllocID = alloc.ID var resp nstructs.GenericResponse err := client.ClientRPC("Allocations.Signal", &req, &resp) require.NotNil(err) @@ -336,6 +380,7 @@ func TestAllocations_Signal_ACL(t *testing.T) { { token := mock.CreatePolicyAndToken(t, server.State(), 1005, "invalid", mock.NodePolicy(acl.PolicyDeny)) req := &nstructs.AllocSignalRequest{} + req.AllocID = alloc.ID req.AuthToken = token.SecretID var resp nstructs.GenericResponse @@ -350,22 +395,24 @@ func TestAllocations_Signal_ACL(t *testing.T) { token := mock.CreatePolicyAndToken(t, server.State(), 1005, "test-valid", mock.NamespacePolicy(nstructs.DefaultNamespace, "", []string{acl.NamespaceCapabilityAllocLifecycle})) req := &nstructs.AllocSignalRequest{} + req.AllocID = alloc.ID req.AuthToken = token.SecretID req.Namespace = nstructs.DefaultNamespace var resp nstructs.GenericResponse err := client.ClientRPC("Allocations.Signal", &req, &resp) - require.True(nstructs.IsErrUnknownAllocation(err)) + require.NoError(err) } // Try request with a management token { req := &nstructs.AllocSignalRequest{} + req.AllocID = alloc.ID req.AuthToken = root.SecretID var resp nstructs.GenericResponse err := client.ClientRPC("Allocations.Signal", &req, &resp) - require.True(nstructs.IsErrUnknownAllocation(err)) + require.NoError(err) } } @@ -405,18 +452,29 @@ func TestAllocations_Stats(t *testing.T) { func TestAllocations_Stats_ACL(t *testing.T) { t.Parallel() require := require.New(t) - server, addr, root := testACLServer(t, nil) - defer server.Shutdown() - client, cleanup := TestClient(t, func(c *config.Config) { + server, addr, root, cleanupS := testACLServer(t, nil) + defer cleanupS() + + client, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} c.ACLEnabled = true }) - defer cleanup() + defer cleanupC() + + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, server.RPC, job, root.SecretID)[0] // Try request without a token and expect failure { req := &cstructs.AllocStatsRequest{} + req.AllocID = alloc.ID var resp cstructs.AllocStatsResponse err := client.ClientRPC("Allocations.Stats", &req, &resp) require.NotNil(err) @@ -427,6 +485,7 @@ func TestAllocations_Stats_ACL(t *testing.T) { { token := mock.CreatePolicyAndToken(t, server.State(), 1005, "invalid", mock.NodePolicy(acl.PolicyDeny)) req := &cstructs.AllocStatsRequest{} + req.AllocID = alloc.ID req.AuthToken = token.SecretID var resp cstructs.AllocStatsResponse @@ -441,22 +500,24 @@ func TestAllocations_Stats_ACL(t *testing.T) { token := mock.CreatePolicyAndToken(t, server.State(), 1005, "test-valid", mock.NamespacePolicy(nstructs.DefaultNamespace, "", []string{acl.NamespaceCapabilityReadJob})) req := &cstructs.AllocStatsRequest{} + req.AllocID = alloc.ID req.AuthToken = token.SecretID req.Namespace = nstructs.DefaultNamespace var resp cstructs.AllocStatsResponse err := client.ClientRPC("Allocations.Stats", &req, &resp) - require.True(nstructs.IsErrUnknownAllocation(err)) + require.NoError(err) } // Try request with a management token { req := &cstructs.AllocStatsRequest{} + req.AllocID = alloc.ID req.AuthToken = root.SecretID var resp cstructs.AllocStatsResponse err := client.ClientRPC("Allocations.Stats", &req, &resp) - require.True(nstructs.IsErrUnknownAllocation(err)) + require.NoError(err) } } @@ -465,14 +526,14 @@ func TestAlloc_ExecStreaming(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() expectedStdout := "Hello from the other side\n" expectedStderr := "Hello from the other side\n" @@ -569,14 +630,14 @@ func TestAlloc_ExecStreaming_NoAllocation(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() // Make the request req := &cstructs.AllocExecRequest{ @@ -624,15 +685,15 @@ func TestAlloc_ExecStreaming_DisableRemoteExec(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} c.DisableRemoteExec = true }) - defer cleanup() + defer cleanupC() // Make the request req := &cstructs.AllocExecRequest{ @@ -677,18 +738,17 @@ func TestAlloc_ExecStreaming_DisableRemoteExec(t *testing.T) { func TestAlloc_ExecStreaming_ACL_Basic(t *testing.T) { t.Parallel() - require := require.New(t) // Start a server and client - s, root := nomad.TestACLServer(t, nil) - defer s.Shutdown() + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - client, cleanup := TestClient(t, func(c *config.Config) { + client, cleanupC := TestClient(t, func(c *config.Config) { c.ACLEnabled = true c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() // Create a bad token policyBad := mock.NamespacePolicy("other", "", []string{acl.NamespaceCapabilityDeny}) @@ -698,6 +758,15 @@ func TestAlloc_ExecStreaming_ACL_Basic(t *testing.T) { []string{acl.NamespaceCapabilityAllocExec, acl.NamespaceCapabilityReadFS}) tokenGood := mock.CreatePolicyAndToken(t, s.State(), 1009, "valid2", policyGood) + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, s.RPC, job, root.SecretID)[0] + cases := []struct { Name string Token string @@ -711,12 +780,12 @@ func TestAlloc_ExecStreaming_ACL_Basic(t *testing.T) { { Name: "good token", Token: tokenGood.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + ExpectedError: "task not found", }, { Name: "root token", Token: root.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + ExpectedError: "task not found", }, } @@ -725,7 +794,7 @@ func TestAlloc_ExecStreaming_ACL_Basic(t *testing.T) { // Make the request req := &cstructs.AllocExecRequest{ - AllocID: uuid.Generate(), + AllocID: alloc.ID, Task: "testtask", Tty: true, Cmd: []string{"placeholder command"}, @@ -738,7 +807,7 @@ func TestAlloc_ExecStreaming_ACL_Basic(t *testing.T) { // Get the handler handler, err := client.StreamingRpcHandler("Allocations.Exec") - require.Nil(err) + require.Nil(t, err) // Create a pipe p1, p2 := net.Pipe() @@ -754,15 +823,15 @@ func TestAlloc_ExecStreaming_ACL_Basic(t *testing.T) { // Send the request encoder := codec.NewEncoder(p1, nstructs.MsgpackHandle) - require.Nil(encoder.Encode(req)) + require.Nil(t, encoder.Encode(req)) select { case <-time.After(3 * time.Second): - require.FailNow("timed out") + require.FailNow(t, "timed out") case err := <-errCh: - require.Contains(err.Error(), c.ExpectedError) + require.Contains(t, err.Error(), c.ExpectedError) case f := <-frames: - require.Fail("received unexpected frame", "frame: %#v", f) + require.Fail(t, "received unexpected frame", "frame: %#v", f) } }) } @@ -775,11 +844,11 @@ func TestAlloc_ExecStreaming_ACL_WithIsolation_Image(t *testing.T) { isolation := drivers.FSIsolationImage // Start a server and client - s, root := nomad.TestACLServer(t, nil) - defer s.Shutdown() + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - client, cleanup := TestClient(t, func(c *config.Config) { + client, cleanupC := TestClient(t, func(c *config.Config) { c.ACLEnabled = true c.Servers = []string{s.GetConfig().RPCAddr.String()} @@ -794,7 +863,7 @@ func TestAlloc_ExecStreaming_ACL_WithIsolation_Image(t *testing.T) { c.PluginLoader = catalog.TestPluginLoaderWithOptions(t, "", map[string]string{}, pluginConfig) }) - defer cleanup() + defer cleanupC() // Create a bad token policyBad := mock.NamespacePolicy("other", "", []string{acl.NamespaceCapabilityDeny}) @@ -924,8 +993,8 @@ func TestAlloc_ExecStreaming_ACL_WithIsolation_Chroot(t *testing.T) { isolation := drivers.FSIsolationChroot // Start a server and client - s, root := nomad.TestACLServer(t, nil) - defer s.Shutdown() + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) client, cleanup := TestClient(t, func(c *config.Config) { @@ -1068,8 +1137,8 @@ func TestAlloc_ExecStreaming_ACL_WithIsolation_None(t *testing.T) { isolation := drivers.FSIsolationNone // Start a server and client - s, root := nomad.TestACLServer(t, nil) - defer s.Shutdown() + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) client, cleanup := TestClient(t, func(c *config.Config) { diff --git a/client/alloc_watcher_e2e_test.go b/client/alloc_watcher_e2e_test.go index 5c8df9bf0a8..9cdc6fab0d7 100644 --- a/client/alloc_watcher_e2e_test.go +++ b/client/alloc_watcher_e2e_test.go @@ -29,7 +29,7 @@ func TestPrevAlloc_StreamAllocDir_TLS(t *testing.T) { t.Parallel() require := require.New(t) - server := nomad.TestServer(t, func(c *nomad.Config) { + server, cleanupS := nomad.TestServer(t, func(c *nomad.Config) { c.TLSConfig = &config.TLSConfig{ EnableHTTP: true, EnableRPC: true, @@ -39,7 +39,7 @@ func TestPrevAlloc_StreamAllocDir_TLS(t *testing.T) { KeyFile: serverKeyFn, } }) - defer server.Shutdown() + defer cleanupS() testutil.WaitForLeader(t, server.RPC) t.Logf("[TEST] Leader started: %s", server.GetConfig().RPCAddr.String()) diff --git a/client/allochealth/tracker.go b/client/allochealth/tracker.go index abc92364870..9b158828c31 100644 --- a/client/allochealth/tracker.go +++ b/client/allochealth/tracker.go @@ -419,7 +419,7 @@ OUTER: type taskHealthState struct { task *structs.Task state *structs.TaskState - taskRegistrations *consul.TaskRegistration + taskRegistrations *consul.ServiceRegistrations } // event takes the deadline time for the allocation to be healthy and the update diff --git a/client/allocrunner/alloc_runner.go b/client/allocrunner/alloc_runner.go index bbee6a02239..00515439ac8 100644 --- a/client/allocrunner/alloc_runner.go +++ b/client/allocrunner/alloc_runner.go @@ -22,6 +22,7 @@ import ( cstate "github.com/hashicorp/nomad/client/state" cstructs "github.com/hashicorp/nomad/client/structs" "github.com/hashicorp/nomad/client/vaultclient" + agentconsul "github.com/hashicorp/nomad/command/agent/consul" "github.com/hashicorp/nomad/helper" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/plugins/device" @@ -61,6 +62,10 @@ type allocRunner struct { // registering services and checks consulClient consul.ConsulServiceAPI + // sidsClient is the client used by the service identity hook for + // managing SI tokens + sidsClient consul.ServiceIdentityAPI + // vaultClient is the used to manage Vault tokens vaultClient vaultclient.VaultClient @@ -156,6 +161,7 @@ func NewAllocRunner(config *Config) (*allocRunner, error) { alloc: alloc, clientConfig: config.ClientConfig, consulClient: config.Consul, + sidsClient: config.ConsulSI, vaultClient: config.Vault, tasks: make(map[string]*taskrunner.TaskRunner, len(tg.Tasks)), waitCh: make(chan struct{}), @@ -209,6 +215,7 @@ func (ar *allocRunner) initTaskRunners(tasks []*structs.Task) error { StateDB: ar.stateDB, StateUpdater: ar, Consul: ar.consulClient, + ConsulSI: ar.sidsClient, Vault: ar.vaultClient, DeviceStatsReporter: ar.deviceStatsReporter, DeviceManager: ar.devicemanager, @@ -270,6 +277,10 @@ func (ar *allocRunner) Run() { ar.runTasks() POST: + if ar.isShuttingDown() { + return + } + // Run the postrun hooks if err := ar.postrun(); err != nil { ar.logger.Error("postrun failed", "error", err) @@ -495,6 +506,9 @@ func (ar *allocRunner) killTasks() map[string]*structs.TaskState { var mu sync.Mutex states := make(map[string]*structs.TaskState, len(ar.tasks)) + // run alloc prekill hooks + ar.preKillHooks() + // Kill leader first, synchronously for name, tr := range ar.tasks { if !tr.IsLeader() { @@ -859,6 +873,14 @@ func (ar *allocRunner) IsWaiting() bool { return ar.prevAllocWatcher.IsWaiting() } +// isShuttingDown returns true if the alloc runner is in a shutdown state +// due to a call to Shutdown() or Destroy() +func (ar *allocRunner) isShuttingDown() bool { + ar.destroyedLock.Lock() + defer ar.destroyedLock.Unlock() + return ar.shutdownLaunched +} + // DestroyCh is a channel that is closed when an allocrunner is closed due to // an explicit call to Destroy(). func (ar *allocRunner) DestroyCh() <-chan struct{} { @@ -989,6 +1011,39 @@ func (ar *allocRunner) RestartTask(taskName string, taskEvent *structs.TaskEvent return tr.Restart(context.TODO(), taskEvent, false) } +// Restart satisfies the WorkloadRestarter interface restarts all task runners +// concurrently +func (ar *allocRunner) Restart(ctx context.Context, event *structs.TaskEvent, failure bool) error { + waitCh := make(chan struct{}) + var err *multierror.Error + var errMutex sync.Mutex + + go func() { + var wg sync.WaitGroup + defer close(waitCh) + for tn, tr := range ar.tasks { + wg.Add(1) + go func(taskName string, r agentconsul.WorkloadRestarter) { + defer wg.Done() + e := r.Restart(ctx, event, failure) + if e != nil { + errMutex.Lock() + defer errMutex.Unlock() + err = multierror.Append(err, fmt.Errorf("failed to restart task %s: %v", taskName, e)) + } + }(tn, tr) + } + wg.Wait() + }() + + select { + case <-waitCh: + case <-ctx.Done(): + } + + return err.ErrorOrNil() +} + // RestartAll signalls all task runners in the allocation to restart and passes // a copy of the task event to each restart event. // Returns any errors in a concatenated form. diff --git a/client/allocrunner/alloc_runner_hooks.go b/client/allocrunner/alloc_runner_hooks.go index 25c3ba84afb..81c1e7ceed3 100644 --- a/client/allocrunner/alloc_runner_hooks.go +++ b/client/allocrunner/alloc_runner_hooks.go @@ -7,6 +7,7 @@ import ( multierror "github.com/hashicorp/go-multierror" "github.com/hashicorp/nomad/client/allocrunner/interfaces" clientconfig "github.com/hashicorp/nomad/client/config" + "github.com/hashicorp/nomad/client/taskenv" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/plugins/drivers" ) @@ -125,7 +126,13 @@ func (ar *allocRunner) initRunnerHooks(config *clientconfig.Config) error { newDiskMigrationHook(hookLogger, ar.prevAllocMigrator, ar.allocDir), newAllocHealthWatcherHook(hookLogger, alloc, hs, ar.Listener(), ar.consulClient), newNetworkHook(hookLogger, ns, alloc, nm, nc), - newGroupServiceHook(hookLogger, alloc, ar.consulClient), + newGroupServiceHook(groupServiceHookConfig{ + alloc: alloc, + consul: ar.consulClient, + restarter: ar, + taskEnvBuilder: taskenv.NewBuilder(config.Node, ar.Alloc(), nil, config.Region).SetAllocDir(ar.allocDir.AllocDir), + logger: hookLogger, + }), newConsulSockHook(hookLogger, alloc, ar.allocDir, config.ConsulConfig), } @@ -196,7 +203,7 @@ func (ar *allocRunner) update(update *structs.Allocation) error { var start time.Time if ar.logger.IsTrace() { start = time.Now() - ar.logger.Trace("running pre-run hook", "name", name, "start", start) + ar.logger.Trace("running update hook", "name", name, "start", start) } if err := h.Update(req); err != nil { @@ -288,6 +295,29 @@ func (ar *allocRunner) destroy() error { return merr.ErrorOrNil() } +func (ar *allocRunner) preKillHooks() { + for _, hook := range ar.runnerHooks { + pre, ok := hook.(interfaces.RunnerPreKillHook) + if !ok { + continue + } + + name := pre.Name() + var start time.Time + if ar.logger.IsTrace() { + start = time.Now() + ar.logger.Trace("running alloc pre shutdown hook", "name", name, "start", start) + } + + pre.PreKill() + + if ar.logger.IsTrace() { + end := time.Now() + ar.logger.Trace("finished alloc pre shutdown hook", "name", name, "end", end, "duration", end.Sub(start)) + } + } +} + // shutdownHooks calls graceful shutdown hooks for when the agent is exiting. func (ar *allocRunner) shutdownHooks() { for _, hook := range ar.runnerHooks { diff --git a/client/allocrunner/alloc_runner_test.go b/client/allocrunner/alloc_runner_test.go index 548602f1ebb..90e5b5c85b3 100644 --- a/client/allocrunner/alloc_runner_test.go +++ b/client/allocrunner/alloc_runner_test.go @@ -141,6 +141,133 @@ func TestAllocRunner_TaskLeader_KillTG(t *testing.T) { }) } +func TestAllocRunner_TaskGroup_ShutdownDelay(t *testing.T) { + t.Parallel() + + alloc := mock.Alloc() + tr := alloc.AllocatedResources.Tasks[alloc.Job.TaskGroups[0].Tasks[0].Name] + alloc.Job.TaskGroups[0].RestartPolicy.Attempts = 0 + + // Create a group service + tg := alloc.Job.TaskGroups[0] + tg.Services = []*structs.Service{ + { + Name: "shutdown_service", + }, + } + + // Create two tasks in the group + task := alloc.Job.TaskGroups[0].Tasks[0] + task.Name = "follower1" + task.Driver = "mock_driver" + task.Config = map[string]interface{}{ + "run_for": "10s", + } + + task2 := alloc.Job.TaskGroups[0].Tasks[0].Copy() + task2.Name = "leader" + task2.Driver = "mock_driver" + task2.Leader = true + task2.Config = map[string]interface{}{ + "run_for": "10s", + } + + alloc.Job.TaskGroups[0].Tasks = append(alloc.Job.TaskGroups[0].Tasks, task2) + alloc.AllocatedResources.Tasks[task.Name] = tr + alloc.AllocatedResources.Tasks[task2.Name] = tr + + // Set a shutdown delay + shutdownDelay := 1 * time.Second + alloc.Job.TaskGroups[0].ShutdownDelay = &shutdownDelay + + conf, cleanup := testAllocRunnerConfig(t, alloc) + defer cleanup() + ar, err := NewAllocRunner(conf) + require.NoError(t, err) + defer destroy(ar) + go ar.Run() + + // Wait for tasks to start + upd := conf.StateUpdater.(*MockStateUpdater) + last := upd.Last() + testutil.WaitForResult(func() (bool, error) { + last = upd.Last() + if last == nil { + return false, fmt.Errorf("No updates") + } + if n := len(last.TaskStates); n != 2 { + return false, fmt.Errorf("Not enough task states (want: 2; found %d)", n) + } + for name, state := range last.TaskStates { + if state.State != structs.TaskStateRunning { + return false, fmt.Errorf("Task %q is not running yet (it's %q)", name, state.State) + } + } + return true, nil + }, func(err error) { + t.Fatalf("err: %v", err) + }) + + // Reset updates + upd.Reset() + + // Stop alloc + shutdownInit := time.Now() + update := alloc.Copy() + update.DesiredStatus = structs.AllocDesiredStatusStop + ar.Update(update) + + // Wait for tasks to stop + testutil.WaitForResult(func() (bool, error) { + last := upd.Last() + if last == nil { + return false, fmt.Errorf("No updates") + } + + fin := last.TaskStates["leader"].FinishedAt + + if fin.IsZero() { + return false, nil + } + + return true, nil + }, func(err error) { + last := upd.Last() + for name, state := range last.TaskStates { + t.Logf("%s: %s", name, state.State) + } + t.Fatalf("err: %v", err) + }) + + // Get consul client operations + consulClient := conf.Consul.(*cconsul.MockConsulServiceClient) + consulOpts := consulClient.GetOps() + var groupRemoveOp cconsul.MockConsulOp + for _, op := range consulOpts { + // Grab the first deregistration request + if op.Op == "remove" && op.Name == "group-web" { + groupRemoveOp = op + break + } + } + + // Ensure remove operation is close to shutdown initiation + require.True(t, groupRemoveOp.OccurredAt.Sub(shutdownInit) < 100*time.Millisecond) + + last = upd.Last() + minShutdown := shutdownInit.Add(task.ShutdownDelay) + leaderFinished := last.TaskStates["leader"].FinishedAt + followerFinished := last.TaskStates["follower1"].FinishedAt + + // Check that both tasks shut down after min possible shutdown time + require.Greater(t, leaderFinished.UnixNano(), minShutdown.UnixNano()) + require.Greater(t, followerFinished.UnixNano(), minShutdown.UnixNano()) + + // Check that there is at least shutdown_delay between consul + // remove operation and task finished at time + require.True(t, leaderFinished.Sub(groupRemoveOp.OccurredAt) > shutdownDelay) +} + // TestAllocRunner_TaskLeader_StopTG asserts that when stopping an alloc with a // leader the leader is stopped before other tasks. func TestAllocRunner_TaskLeader_StopTG(t *testing.T) { @@ -528,7 +655,7 @@ func TestAllocRunner_DeploymentHealth_Unhealthy_Checks(t *testing.T) { consulClient := conf.Consul.(*cconsul.MockConsulServiceClient) consulClient.AllocRegistrationsFn = func(allocID string) (*consul.AllocRegistration, error) { return &consul.AllocRegistration{ - Tasks: map[string]*consul.TaskRegistration{ + Tasks: map[string]*consul.ServiceRegistrations{ task.Name: { Services: map[string]*consul.ServiceRegistration{ "123": { @@ -847,7 +974,7 @@ func TestAllocRunner_TaskFailed_KillTG(t *testing.T) { consulClient := conf.Consul.(*cconsul.MockConsulServiceClient) consulClient.AllocRegistrationsFn = func(allocID string) (*consul.AllocRegistration, error) { return &consul.AllocRegistration{ - Tasks: map[string]*consul.TaskRegistration{ + Tasks: map[string]*consul.ServiceRegistrations{ task.Name: { Services: map[string]*consul.ServiceRegistration{ "123": { diff --git a/client/allocrunner/alloc_runner_unix_test.go b/client/allocrunner/alloc_runner_unix_test.go index 981d68ed92f..7cc83051046 100644 --- a/client/allocrunner/alloc_runner_unix_test.go +++ b/client/allocrunner/alloc_runner_unix_test.go @@ -33,6 +33,12 @@ func TestAllocRunner_Restore_RunningTerminal(t *testing.T) { // 5. Assert task and logmon are cleaned up alloc := mock.Alloc() + alloc.Job.TaskGroups[0].Services = []*structs.Service{ + { + Name: "foo", + PortLabel: "8888", + }, + } task := alloc.Job.TaskGroups[0].Tasks[0] task.Driver = "mock_driver" task.Config = map[string]interface{}{ @@ -117,13 +123,12 @@ func TestAllocRunner_Restore_RunningTerminal(t *testing.T) { // 2 removals (canary+noncanary) during prekill // 2 removals (canary+noncanary) during exited // 2 removals (canary+noncanary) during stop - // 1 remove group during stop + // 2 removals (canary+noncanary) group during stop consulOps := conf2.Consul.(*consul.MockConsulServiceClient).GetOps() - require.Len(t, consulOps, 7) - for _, op := range consulOps[:6] { + require.Len(t, consulOps, 8) + for _, op := range consulOps { require.Equal(t, "remove", op.Op) } - require.Equal(t, "remove_group", consulOps[6].Op) // Assert terminated task event was emitted events := ar2.AllocState().TaskStates[task.Name].Events diff --git a/client/allocrunner/config.go b/client/allocrunner/config.go index 42cea978ea6..a9240b3a312 100644 --- a/client/allocrunner/config.go +++ b/client/allocrunner/config.go @@ -30,6 +30,9 @@ type Config struct { // Consul is the Consul client used to register task services and checks Consul consul.ConsulServiceAPI + // ConsulSI is the Consul client used to manage service identity tokens. + ConsulSI consul.ServiceIdentityAPI + // Vault is the Vault client to use to retrieve Vault tokens Vault vaultclient.VaultClient diff --git a/client/allocrunner/consulsock_hook.go b/client/allocrunner/consulsock_hook.go index a0c19be897a..470b060b49f 100644 --- a/client/allocrunner/consulsock_hook.go +++ b/client/allocrunner/consulsock_hook.go @@ -157,6 +157,18 @@ func (s *sockProxy) run(alloc *structs.Allocation) error { } hostGRPCSockPath := filepath.Join(s.allocDir.AllocDir, allocdir.AllocGRPCSocket) + + // if the socket already exists we'll try to remove it, but if not then any + // other errors will bubble up to the caller here or when we try to listen + _, err := os.Stat(hostGRPCSockPath) + if err == nil { + err := os.Remove(hostGRPCSockPath) + if err != nil { + return fmt.Errorf( + "unable to remove existing unix socket for Consul gRPC endpoint: %v", err) + } + } + listener, err := net.Listen("unix", hostGRPCSockPath) if err != nil { return fmt.Errorf("unable to create unix socket for Consul gRPC endpoint: %v", err) diff --git a/client/allocrunner/groupservice_hook.go b/client/allocrunner/groupservice_hook.go index b9c65b0bf4f..39a8c7993ae 100644 --- a/client/allocrunner/groupservice_hook.go +++ b/client/allocrunner/groupservice_hook.go @@ -2,31 +2,75 @@ package allocrunner import ( "sync" + "time" - hclog "github.com/hashicorp/go-hclog" log "github.com/hashicorp/go-hclog" "github.com/hashicorp/nomad/client/allocrunner/interfaces" "github.com/hashicorp/nomad/client/consul" + "github.com/hashicorp/nomad/client/taskenv" + agentconsul "github.com/hashicorp/nomad/command/agent/consul" "github.com/hashicorp/nomad/nomad/structs" + "github.com/hashicorp/nomad/plugins/drivers" ) // groupServiceHook manages task group Consul service registration and // deregistration. type groupServiceHook struct { - alloc *structs.Allocation + allocID string + group string + restarter agentconsul.WorkloadRestarter consulClient consul.ConsulServiceAPI prerun bool - mu sync.Mutex + delay time.Duration + deregistered bool logger log.Logger + + // The following fields may be updated + canary bool + services []*structs.Service + networks structs.Networks + taskEnvBuilder *taskenv.Builder + + // Since Update() may be called concurrently with any other hook all + // hook methods must be fully serialized + mu sync.Mutex +} + +type groupServiceHookConfig struct { + alloc *structs.Allocation + consul consul.ConsulServiceAPI + restarter agentconsul.WorkloadRestarter + taskEnvBuilder *taskenv.Builder + logger log.Logger } -func newGroupServiceHook(logger hclog.Logger, alloc *structs.Allocation, consulClient consul.ConsulServiceAPI) *groupServiceHook { +func newGroupServiceHook(cfg groupServiceHookConfig) *groupServiceHook { + var shutdownDelay time.Duration + tg := cfg.alloc.Job.LookupTaskGroup(cfg.alloc.TaskGroup) + + if tg.ShutdownDelay != nil { + shutdownDelay = *tg.ShutdownDelay + } + h := &groupServiceHook{ - alloc: alloc, - consulClient: consulClient, + allocID: cfg.alloc.ID, + group: cfg.alloc.TaskGroup, + restarter: cfg.restarter, + consulClient: cfg.consul, + taskEnvBuilder: cfg.taskEnvBuilder, + delay: shutdownDelay, + } + h.logger = cfg.logger.Named(h.Name()) + h.services = cfg.alloc.Job.LookupTaskGroup(h.group).Services + + if cfg.alloc.AllocatedResources != nil { + h.networks = cfg.alloc.AllocatedResources.Shared.Networks + } + + if cfg.alloc.DeploymentStatus != nil { + h.canary = cfg.alloc.DeploymentStatus.Canary } - h.logger = logger.Named(h.Name()) return h } @@ -41,14 +85,39 @@ func (h *groupServiceHook) Prerun() error { h.prerun = true h.mu.Unlock() }() - return h.consulClient.RegisterGroup(h.alloc) + + if len(h.services) == 0 { + return nil + } + + services := h.getWorkloadServices() + return h.consulClient.RegisterWorkload(services) } func (h *groupServiceHook) Update(req *interfaces.RunnerUpdateRequest) error { h.mu.Lock() defer h.mu.Unlock() - oldAlloc := h.alloc - h.alloc = req.Alloc + oldWorkloadServices := h.getWorkloadServices() + + // Store new updated values out of request + canary := false + if req.Alloc.DeploymentStatus != nil { + canary = req.Alloc.DeploymentStatus.Canary + } + + var networks structs.Networks + if req.Alloc.AllocatedResources != nil { + networks = req.Alloc.AllocatedResources.Shared.Networks + } + + // Update group service hook fields + h.networks = networks + h.services = req.Alloc.Job.LookupTaskGroup(h.group).Services + h.canary = canary + h.taskEnvBuilder.UpdateTask(req.Alloc, nil) + + // Create new task services struct with those new values + newWorkloadServices := h.getWorkloadServices() if !h.prerun { // Update called before Prerun. Update alloc and exit to allow @@ -56,11 +125,81 @@ func (h *groupServiceHook) Update(req *interfaces.RunnerUpdateRequest) error { return nil } - return h.consulClient.UpdateGroup(oldAlloc, h.alloc) + return h.consulClient.UpdateWorkload(oldWorkloadServices, newWorkloadServices) +} + +func (h *groupServiceHook) PreKill() { + h.mu.Lock() + defer h.mu.Unlock() + + // If we have a shutdown delay deregister + // group services and then wait + // before continuing to kill tasks + h.deregister() + h.deregistered = true + + if h.delay == 0 { + return + } + + h.logger.Debug("waiting before removing group service", "shutdown_delay", h.delay) + + // Wait for specified shutdown_delay + // this will block an agent from shutting down + <-time.After(h.delay) } func (h *groupServiceHook) Postrun() error { h.mu.Lock() defer h.mu.Unlock() - return h.consulClient.RemoveGroup(h.alloc) + + if !h.deregistered { + h.deregister() + } + return nil +} + +func (h *groupServiceHook) driverNet() *drivers.DriverNetwork { + if len(h.networks) == 0 { + return nil + } + + //TODO(schmichael) only support one network for now + net := h.networks[0] + //TODO(schmichael) there's probably a better way than hacking driver network + return &drivers.DriverNetwork{ + AutoAdvertise: true, + IP: net.IP, + // Copy PortLabels from group network + PortMap: net.PortLabels(), + } +} + +// deregister services from Consul. +func (h *groupServiceHook) deregister() { + if len(h.services) > 0 { + workloadServices := h.getWorkloadServices() + h.consulClient.RemoveWorkload(workloadServices) + + // Canary flag may be getting flipped when the alloc is being + // destroyed, so remove both variations of the service + workloadServices.Canary = !workloadServices.Canary + h.consulClient.RemoveWorkload(workloadServices) + } +} + +func (h *groupServiceHook) getWorkloadServices() *agentconsul.WorkloadServices { + // Interpolate with the task's environment + interpolatedServices := taskenv.InterpolateServices(h.taskEnvBuilder.Build(), h.services) + + // Create task services struct with request's driver metadata + return &agentconsul.WorkloadServices{ + AllocID: h.allocID, + Group: h.group, + Restarter: h.restarter, + Services: interpolatedServices, + DriverNetwork: h.driverNet(), + Networks: h.networks, + Canary: h.canary, + } } diff --git a/client/allocrunner/groupservice_hook_test.go b/client/allocrunner/groupservice_hook_test.go index b3b11c632e6..f479a27b4a0 100644 --- a/client/allocrunner/groupservice_hook_test.go +++ b/client/allocrunner/groupservice_hook_test.go @@ -1,10 +1,15 @@ package allocrunner import ( + "io/ioutil" "testing" + "time" + consulapi "github.com/hashicorp/consul/api" + ctestutil "github.com/hashicorp/consul/testutil" "github.com/hashicorp/nomad/client/allocrunner/interfaces" "github.com/hashicorp/nomad/client/consul" + "github.com/hashicorp/nomad/client/taskenv" agentconsul "github.com/hashicorp/nomad/command/agent/consul" "github.com/hashicorp/nomad/helper/testlog" "github.com/hashicorp/nomad/nomad/mock" @@ -15,6 +20,7 @@ import ( var _ interfaces.RunnerPrerunHook = (*groupServiceHook)(nil) var _ interfaces.RunnerUpdateHook = (*groupServiceHook)(nil) var _ interfaces.RunnerPostrunHook = (*groupServiceHook)(nil) +var _ interfaces.RunnerPreKillHook = (*groupServiceHook)(nil) // TestGroupServiceHook_NoGroupServices asserts calling group service hooks // without group services does not error. @@ -22,10 +28,20 @@ func TestGroupServiceHook_NoGroupServices(t *testing.T) { t.Parallel() alloc := mock.Alloc() + alloc.Job.TaskGroups[0].Services = []*structs.Service{{ + Name: "foo", + PortLabel: "9999", + }} logger := testlog.HCLogger(t) consulClient := consul.NewMockConsulServiceClient(t, logger) - h := newGroupServiceHook(logger, alloc, consulClient) + h := newGroupServiceHook(groupServiceHookConfig{ + alloc: alloc, + consul: consulClient, + restarter: agentconsul.NoopRestarter(), + taskEnvBuilder: taskenv.NewBuilder(mock.Node(), alloc, nil, alloc.Job.Region), + logger: logger, + }) require.NoError(t, h.Prerun()) req := &interfaces.RunnerUpdateRequest{Alloc: alloc} @@ -34,10 +50,10 @@ func TestGroupServiceHook_NoGroupServices(t *testing.T) { require.NoError(t, h.Postrun()) ops := consulClient.GetOps() - require.Len(t, ops, 3) - require.Equal(t, "add_group", ops[0].Op) - require.Equal(t, "update_group", ops[1].Op) - require.Equal(t, "remove_group", ops[2].Op) + require.Len(t, ops, 4) + require.Equal(t, "add", ops[0].Op) + require.Equal(t, "update", ops[1].Op) + require.Equal(t, "remove", ops[2].Op) } // TestGroupServiceHook_GroupServices asserts group service hooks with group @@ -49,7 +65,13 @@ func TestGroupServiceHook_GroupServices(t *testing.T) { logger := testlog.HCLogger(t) consulClient := consul.NewMockConsulServiceClient(t, logger) - h := newGroupServiceHook(logger, alloc, consulClient) + h := newGroupServiceHook(groupServiceHookConfig{ + alloc: alloc, + consul: consulClient, + restarter: agentconsul.NoopRestarter(), + taskEnvBuilder: taskenv.NewBuilder(mock.Node(), alloc, nil, alloc.Job.Region), + logger: logger, + }) require.NoError(t, h.Prerun()) req := &interfaces.RunnerUpdateRequest{Alloc: alloc} @@ -58,18 +80,19 @@ func TestGroupServiceHook_GroupServices(t *testing.T) { require.NoError(t, h.Postrun()) ops := consulClient.GetOps() - require.Len(t, ops, 3) - require.Equal(t, "add_group", ops[0].Op) - require.Equal(t, "update_group", ops[1].Op) - require.Equal(t, "remove_group", ops[2].Op) + require.Len(t, ops, 4) + require.Equal(t, "add", ops[0].Op) + require.Equal(t, "update", ops[1].Op) + require.Equal(t, "remove", ops[2].Op) } // TestGroupServiceHook_Error asserts group service hooks with group // services but no group network returns an error. -func TestGroupServiceHook_Error(t *testing.T) { +func TestGroupServiceHook_NoNetwork(t *testing.T) { t.Parallel() alloc := mock.Alloc() + alloc.Job.TaskGroups[0].Networks = []*structs.NetworkResource{} tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) tg.Services = []*structs.Service{ { @@ -82,15 +105,147 @@ func TestGroupServiceHook_Error(t *testing.T) { } logger := testlog.HCLogger(t) - // No need to set Consul client or call Run. This hould fail before - // attempting to register. - consulClient := agentconsul.NewServiceClient(nil, logger, false) + consulClient := consul.NewMockConsulServiceClient(t, logger) - h := newGroupServiceHook(logger, alloc, consulClient) - require.Error(t, h.Prerun()) + h := newGroupServiceHook(groupServiceHookConfig{ + alloc: alloc, + consul: consulClient, + restarter: agentconsul.NoopRestarter(), + taskEnvBuilder: taskenv.NewBuilder(mock.Node(), alloc, nil, alloc.Job.Region), + logger: logger, + }) + require.NoError(t, h.Prerun()) req := &interfaces.RunnerUpdateRequest{Alloc: alloc} - require.Error(t, h.Update(req)) + require.NoError(t, h.Update(req)) + + require.NoError(t, h.Postrun()) + + ops := consulClient.GetOps() + require.Len(t, ops, 4) + require.Equal(t, "add", ops[0].Op) + require.Equal(t, "update", ops[1].Op) + require.Equal(t, "remove", ops[2].Op) +} + +func TestGroupServiceHook_getWorkloadServices(t *testing.T) { + t.Parallel() + + alloc := mock.Alloc() + alloc.Job.TaskGroups[0].Networks = []*structs.NetworkResource{} + tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) + tg.Services = []*structs.Service{ + { + Name: "testconnect", + PortLabel: "9999", + Connect: &structs.ConsulConnect{ + SidecarService: &structs.ConsulSidecarService{}, + }, + }, + } + logger := testlog.HCLogger(t) + + consulClient := consul.NewMockConsulServiceClient(t, logger) + + h := newGroupServiceHook(groupServiceHookConfig{ + alloc: alloc, + consul: consulClient, + restarter: agentconsul.NoopRestarter(), + taskEnvBuilder: taskenv.NewBuilder(mock.Node(), alloc, nil, alloc.Job.Region), + logger: logger, + }) + + services := h.getWorkloadServices() + require.Len(t, services.Services, 1) +} + +// TestGroupServiceHook_Update08Alloc asserts that adding group services to a previously +// 0.8 alloc works. +// +// COMPAT(0.11) Only valid for upgrades from 0.8. +func TestGroupServiceHook_Update08Alloc(t *testing.T) { + // Create an embedded Consul server + testconsul, err := ctestutil.NewTestServerConfig(func(c *ctestutil.TestServerConfig) { + // If -v wasn't specified squelch consul logging + if !testing.Verbose() { + c.Stdout = ioutil.Discard + c.Stderr = ioutil.Discard + } + }) + if err != nil { + t.Fatalf("error starting test consul server: %v", err) + } + defer testconsul.Stop() + + consulConfig := consulapi.DefaultConfig() + consulConfig.Address = testconsul.HTTPAddr + consulClient, err := consulapi.NewClient(consulConfig) + require.NoError(t, err) + serviceClient := agentconsul.NewServiceClient(consulClient.Agent(), testlog.HCLogger(t), true) + + // Lower periodicInterval to ensure periodic syncing doesn't improperly + // remove Connect services. + //const interval = 50 * time.Millisecond + //serviceClient.periodicInterval = interval + + // Disable deregistration probation to test syncing + //serviceClient.deregisterProbationExpiry = time.Time{} + + go serviceClient.Run() + defer serviceClient.Shutdown() + + // Create new 0.10-style alloc + alloc := mock.Alloc() + alloc.AllocatedResources.Shared.Networks = []*structs.NetworkResource{ + { + Mode: "bridge", + IP: "10.0.0.1", + DynamicPorts: []structs.Port{ + { + Label: "connect-proxy-testconnect", + Value: 9999, + To: 9998, + }, + }, + }, + } + tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) + tg.Services = []*structs.Service{ + { + Name: "testconnect", + PortLabel: "9999", + Connect: &structs.ConsulConnect{ + SidecarService: &structs.ConsulSidecarService{ + Proxy: &structs.ConsulProxy{ + LocalServicePort: 9000, + }, + }, + }, + }, + } + + // Create old 0.8-style alloc from new alloc + oldAlloc := alloc.Copy() + oldAlloc.AllocatedResources = nil + oldAlloc.Job.LookupTaskGroup(alloc.TaskGroup).Services = nil + + // Create the group service hook + h := newGroupServiceHook(groupServiceHookConfig{ + alloc: oldAlloc, + consul: serviceClient, + restarter: agentconsul.NoopRestarter(), + taskEnvBuilder: taskenv.NewBuilder(mock.Node(), oldAlloc, nil, oldAlloc.Job.Region), + logger: testlog.HCLogger(t), + }) + + require.NoError(t, h.Prerun()) + require.NoError(t, h.Update(&interfaces.RunnerUpdateRequest{Alloc: alloc})) + + // Assert the group and sidecar services are registered + require.Eventually(t, func() bool { + services, err := consulClient.Agent().Services() + require.NoError(t, err) + return len(services) == 2 + }, 3*time.Second, 100*time.Millisecond) - require.Error(t, h.Postrun()) } diff --git a/client/allocrunner/health_hook_test.go b/client/allocrunner/health_hook_test.go index 75a4f399b6a..e4e3cfd2cf3 100644 --- a/client/allocrunner/health_hook_test.go +++ b/client/allocrunner/health_hook_test.go @@ -243,7 +243,7 @@ func TestHealthHook_SetHealth(t *testing.T) { Name: task.Services[0].Checks[0].Name, Status: consulapi.HealthPassing, } - taskRegs := map[string]*agentconsul.TaskRegistration{ + taskRegs := map[string]*agentconsul.ServiceRegistrations{ task.Name: { Services: map[string]*agentconsul.ServiceRegistration{ task.Services[0].Name: { diff --git a/client/allocrunner/interfaces/runner_lifecycle.go b/client/allocrunner/interfaces/runner_lifecycle.go index 8bbaba4af37..33713b2c100 100644 --- a/client/allocrunner/interfaces/runner_lifecycle.go +++ b/client/allocrunner/interfaces/runner_lifecycle.go @@ -16,6 +16,15 @@ type RunnerPrerunHook interface { Prerun() error } +// RunnerPreKillHooks are executed inside of KillTasks before +// iterating and killing each task. It will run before the Leader +// task is killed. +type RunnerPreKillHook interface { + RunnerHook + + PreKill() +} + // RunnerPostrunHooks are executed after calling TaskRunner.Run, even for // terminal allocations. Therefore Postrun hooks must be safe to call without // first calling Prerun hooks. diff --git a/client/allocrunner/interfaces/task_lifecycle.go b/client/allocrunner/interfaces/task_lifecycle.go index 680c0d9c269..ee99a507bd5 100644 --- a/client/allocrunner/interfaces/task_lifecycle.go +++ b/client/allocrunner/interfaces/task_lifecycle.go @@ -89,7 +89,7 @@ type TaskPrestartHook interface { // Prestart is called before the task is started including after every // restart. Prestart is not called if the allocation is terminal. // - // The context is cancelled if the task is killed. + // The context is cancelled if the task is killed or shutdown. Prestart(context.Context, *TaskPrestartRequest, *TaskPrestartResponse) error } diff --git a/client/allocrunner/network_hook.go b/client/allocrunner/network_hook.go index 7e6936f3e22..aef13f219b1 100644 --- a/client/allocrunner/network_hook.go +++ b/client/allocrunner/network_hook.go @@ -61,7 +61,8 @@ func (h *networkHook) Prerun() error { return nil } - spec, err := h.manager.CreateNetwork(h.alloc.ID) + spec, created, err := h.manager.CreateNetwork(h.alloc.ID) + if err != nil { return fmt.Errorf("failed to create network for alloc: %v", err) } @@ -71,8 +72,10 @@ func (h *networkHook) Prerun() error { h.setter.SetNetworkIsolation(spec) } - if err := h.networkConfigurator.Setup(context.TODO(), h.alloc, spec); err != nil { - return fmt.Errorf("failed to configure networking for alloc: %v", err) + if created { + if err := h.networkConfigurator.Setup(context.TODO(), h.alloc, spec); err != nil { + return fmt.Errorf("failed to configure networking for alloc: %v", err) + } } return nil } diff --git a/client/allocrunner/network_hook_test.go b/client/allocrunner/network_hook_test.go index e54f81943f0..f95475967dd 100644 --- a/client/allocrunner/network_hook_test.go +++ b/client/allocrunner/network_hook_test.go @@ -45,9 +45,9 @@ func TestNetworkHook_Prerun_Postrun(t *testing.T) { destroyCalled := false nm := &testutils.MockDriver{ MockNetworkManager: testutils.MockNetworkManager{ - CreateNetworkF: func(allocID string) (*drivers.NetworkIsolationSpec, error) { + CreateNetworkF: func(allocID string) (*drivers.NetworkIsolationSpec, bool, error) { require.Equal(t, alloc.ID, allocID) - return spec, nil + return spec, false, nil }, DestroyNetworkF: func(allocID string, netSpec *drivers.NetworkIsolationSpec) error { diff --git a/client/allocrunner/network_manager_linux.go b/client/allocrunner/network_manager_linux.go index e9f2e687c25..87da239c433 100644 --- a/client/allocrunner/network_manager_linux.go +++ b/client/allocrunner/network_manager_linux.go @@ -54,7 +54,7 @@ func newNetworkManager(alloc *structs.Allocation, driverManager drivermanager.Ma caps, err := driver.Capabilities() if err != nil { - return nil, fmt.Errorf("failed to retrive capabilities for driver %s: %v", + return nil, fmt.Errorf("failed to retrieve capabilities for driver %s: %v", task.Driver, err) } @@ -89,10 +89,10 @@ func newNetworkManager(alloc *structs.Allocation, driverManager drivermanager.Ma // defaultNetworkManager creates a network namespace for the alloc type defaultNetworkManager struct{} -func (*defaultNetworkManager) CreateNetwork(allocID string) (*drivers.NetworkIsolationSpec, error) { +func (*defaultNetworkManager) CreateNetwork(allocID string) (*drivers.NetworkIsolationSpec, bool, error) { netns, err := nsutil.NewNS(allocID) if err != nil { - return nil, err + return nil, false, err } spec := &drivers.NetworkIsolationSpec{ @@ -101,7 +101,7 @@ func (*defaultNetworkManager) CreateNetwork(allocID string) (*drivers.NetworkIso Labels: make(map[string]string), } - return spec, nil + return spec, true, nil } func (*defaultNetworkManager) DestroyNetwork(allocID string, spec *drivers.NetworkIsolationSpec) error { diff --git a/client/allocrunner/networking_bridge_linux.go b/client/allocrunner/networking_bridge_linux.go index e529afab1d6..4bb17cb63f5 100644 --- a/client/allocrunner/networking_bridge_linux.go +++ b/client/allocrunner/networking_bridge_linux.go @@ -163,7 +163,7 @@ func (b *bridgeNetworkConfigurator) Setup(ctx context.Context, alloc *structs.Al if _, err := b.cni.Setup(ctx, alloc.ID, spec.Path, cni.WithCapabilityPortMap(getPortMapping(alloc))); err != nil { b.logger.Warn("failed to configure bridge network", "err", err, "attempt", attempt) if attempt == retry { - return err + return fmt.Errorf("failed to configure bridge network: %v", err) } // Sleep for 1 second + jitter time.Sleep(time.Second + (time.Duration(b.rand.Int63n(1000)) * time.Millisecond)) diff --git a/client/allocrunner/taskrunner/envoybootstrap_hook.go b/client/allocrunner/taskrunner/envoybootstrap_hook.go index 766864b11e8..09efccb798c 100644 --- a/client/allocrunner/taskrunner/envoybootstrap_hook.go +++ b/client/allocrunner/taskrunner/envoybootstrap_hook.go @@ -4,23 +4,38 @@ import ( "bytes" "context" "fmt" + "io/ioutil" "os" "os/exec" "path/filepath" "time" - log "github.com/hashicorp/go-hclog" + "github.com/hashicorp/go-hclog" "github.com/hashicorp/nomad/client/allocdir" "github.com/hashicorp/nomad/client/allocrunner/interfaces" agentconsul "github.com/hashicorp/nomad/command/agent/consul" + "github.com/hashicorp/nomad/helper" "github.com/hashicorp/nomad/nomad/structs" + "github.com/pkg/errors" ) -var _ interfaces.TaskPrestartHook = &envoyBootstrapHook{} +const envoyBootstrapHookName = "envoy_bootstrap" + +type envoyBootstrapHookConfig struct { + alloc *structs.Allocation + consulHTTPAddr string + logger hclog.Logger +} + +const ( + envoyBaseAdminPort = 19000 + envoyAdminBindEnvPrefix = "NOMAD_ENVOY_ADMIN_ADDR_" +) // envoyBootstrapHook writes the bootstrap config for the Connect Envoy proxy // sidecar. type envoyBootstrapHook struct { + // alloc is the allocation with the envoy task being bootstrapped. alloc *structs.Allocation // Bootstrapping Envoy requires talking directly to Consul to generate @@ -28,20 +43,20 @@ type envoyBootstrapHook struct { // Consul's gRPC endpoint. consulHTTPAddr string - logger log.Logger + // logger is used to log things + logger hclog.Logger } -func newEnvoyBootstrapHook(alloc *structs.Allocation, consulHTTPAddr string, logger log.Logger) *envoyBootstrapHook { - h := &envoyBootstrapHook{ - alloc: alloc, - consulHTTPAddr: consulHTTPAddr, +func newEnvoyBootstrapHook(c *envoyBootstrapHookConfig) *envoyBootstrapHook { + return &envoyBootstrapHook{ + alloc: c.alloc, + consulHTTPAddr: c.consulHTTPAddr, + logger: c.logger.Named(envoyBootstrapHookName), } - h.logger = logger.Named(h.Name()) - return h } func (envoyBootstrapHook) Name() string { - return "envoy_bootstrap" + return envoyBootstrapHookName } func (h *envoyBootstrapHook) Prestart(ctx context.Context, req *interfaces.TaskPrestartRequest, resp *interfaces.TaskPrestartResponse) error { @@ -53,7 +68,7 @@ func (h *envoyBootstrapHook) Prestart(ctx context.Context, req *interfaces.TaskP serviceName := req.Task.Kind.Value() if serviceName == "" { - return fmt.Errorf("Connect proxy sidecar does not specify service name") + return errors.New("connect proxy sidecar does not specify service name") } tg := h.alloc.Job.LookupTaskGroup(h.alloc.TaskGroup) @@ -67,34 +82,53 @@ func (h *envoyBootstrapHook) Prestart(ctx context.Context, req *interfaces.TaskP } if service == nil { - return fmt.Errorf("Connect proxy sidecar task exists but no services configured with a sidecar") + return errors.New("connect proxy sidecar task exists but no services configured with a sidecar") } h.logger.Debug("bootstrapping Connect proxy sidecar", "task", req.Task.Name, "service", serviceName) - //TODO Should connect directly to Consul if the sidecar is running on - // the host netns. + //TODO Should connect directly to Consul if the sidecar is running on the host netns. grpcAddr := "unix://" + allocdir.AllocGRPCSocket + // Envoy runs an administrative API on the loopback interface. If multiple sidecars + // are running, the bind addresses need to have unique ports. + // TODO: support running in host netns, using freeport to find available port + envoyAdminBind := buildEnvoyAdminBind(h.alloc, req.Task.Name) + resp.Env = map[string]string{ + helper.CleanEnvVar(envoyAdminBindEnvPrefix+serviceName, '_'): envoyAdminBind, + } + // Envoy bootstrap configuration may contain a Consul token, so write // it to the secrets directory like Vault tokens. - fn := filepath.Join(req.TaskDir.SecretsDir, "envoy_bootstrap.json") + bootstrapFilePath := filepath.Join(req.TaskDir.SecretsDir, "envoy_bootstrap.json") + + id := agentconsul.MakeAllocServiceID(h.alloc.ID, "group-"+tg.Name, service) - id := agentconsul.MakeTaskServiceID(h.alloc.ID, "group-"+tg.Name, service) - h.logger.Debug("bootstrapping envoy", "sidecar_for", service.Name, "boostrap_file", fn, "sidecar_for_id", id, "grpc_addr", grpcAddr) + h.logger.Debug("bootstrapping envoy", "sidecar_for", service.Name, "bootstrap_file", bootstrapFilePath, "sidecar_for_id", id, "grpc_addr", grpcAddr, "admin_bind", envoyAdminBind) + + siToken, err := h.maybeLoadSIToken(req.Task.Name, req.TaskDir.SecretsDir) + if err != nil { + h.logger.Error("failed to generate envoy bootstrap config", "sidecar_for", service.Name) + return errors.Wrap(err, "failed to generate envoy bootstrap config") + } + h.logger.Debug("check for SI token for task", "task", req.Task.Name, "exists", siToken != "") + + bootstrapArgs := envoyBootstrapArgs{ + sidecarFor: id, + grpcAddr: grpcAddr, + consulHTTPAddr: h.consulHTTPAddr, + envoyAdminBind: envoyAdminBind, + siToken: siToken, + }.args() // Since Consul services are registered asynchronously with this task // hook running, retry a small number of times with backoff. for tries := 3; ; tries-- { - cmd := exec.CommandContext(ctx, "consul", "connect", "envoy", - "-grpc-addr", grpcAddr, - "-http-addr", h.consulHTTPAddr, - "-bootstrap", - "-sidecar-for", id, - ) + + cmd := exec.CommandContext(ctx, "consul", bootstrapArgs...) // Redirect output to secrets/envoy_bootstrap.json - fd, err := os.Create(fn) + fd, err := os.Create(bootstrapFilePath) if err != nil { return fmt.Errorf("error creating secrets/envoy_bootstrap.json for envoy: %v", err) } @@ -123,7 +157,7 @@ func (h *envoyBootstrapHook) Prestart(ctx context.Context, req *interfaces.TaskP // occurs, and (b) the file will either be rewritten on // retry or eventually garbage collected if the task // fails. - os.Remove(fn) + os.Remove(bootstrapFilePath) // ExitErrors are recoverable since they indicate the // command was runnable but exited with a unsuccessful @@ -148,3 +182,89 @@ func (h *envoyBootstrapHook) Prestart(ctx context.Context, req *interfaces.TaskP resp.Done = true return nil } + +func buildEnvoyAdminBind(alloc *structs.Allocation, taskName string) string { + port := envoyBaseAdminPort + for idx, task := range alloc.Job.LookupTaskGroup(alloc.TaskGroup).Tasks { + if task.Name == taskName { + port += idx + break + } + } + return fmt.Sprintf("localhost:%d", port) +} + +func (h *envoyBootstrapHook) writeConfig(filename, config string) error { + if err := ioutil.WriteFile(filename, []byte(config), 0440); err != nil { + _ = os.Remove(filename) + return err + } + return nil +} + +func (h *envoyBootstrapHook) execute(cmd *exec.Cmd) (string, error) { + var ( + stdout bytes.Buffer + stderr bytes.Buffer + ) + + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + if err := cmd.Run(); err != nil { + _, recoverable := err.(*exec.ExitError) + // ExitErrors are recoverable since they indicate the + // command was runnable but exited with a unsuccessful + // error code. + return stderr.String(), structs.NewRecoverableError(err, recoverable) + } + return stdout.String(), nil +} + +// envoyBootstrapArgs is used to accumulate CLI arguments that will be passed +// along to the exec invocation of consul which will then generate the bootstrap +// configuration file for envoy. +type envoyBootstrapArgs struct { + sidecarFor string + grpcAddr string + envoyAdminBind string + consulHTTPAddr string + siToken string +} + +// args returns the CLI arguments consul needs in the correct order, with the +// -token argument present or not present depending on whether it is set. +func (e envoyBootstrapArgs) args() []string { + arguments := []string{ + "connect", + "envoy", + "-grpc-addr", e.grpcAddr, + "-http-addr", e.consulHTTPAddr, + "-admin-bind", e.envoyAdminBind, + "-bootstrap", + "-sidecar-for", e.sidecarFor, + } + if e.siToken != "" { + arguments = append(arguments, "-token", e.siToken) + } + return arguments +} + +// maybeLoadSIToken reads the SI token saved to disk in the secrets directory +// by the service identities prestart hook. This envoy bootstrap hook blocks +// until the sids hook completes, so if the SI token is required to exist (i.e. +// Consul ACLs are enabled), it will be in place by the time we try to read it. +func (h *envoyBootstrapHook) maybeLoadSIToken(task, dir string) (string, error) { + tokenPath := filepath.Join(dir, sidsTokenFile) + token, err := ioutil.ReadFile(tokenPath) + if err != nil { + if !os.IsNotExist(err) { + h.logger.Error("failed to load SI token", "task", task, "error", err) + return "", errors.Wrapf(err, "failed to load SI token for %s", task) + } + h.logger.Trace("no SI token to load", "task", task) + return "", nil // token file does not exist + } + h.logger.Trace("recovered pre-existing SI token", "task", task) + return string(token), nil +} diff --git a/client/allocrunner/taskrunner/envoybootstrap_hook_test.go b/client/allocrunner/taskrunner/envoybootstrap_hook_test.go index 0531f91be11..276a9bd1b40 100644 --- a/client/allocrunner/taskrunner/envoybootstrap_hook_test.go +++ b/client/allocrunner/taskrunner/envoybootstrap_hook_test.go @@ -1,3 +1,7 @@ +// +build !windows +// todo(shoenig): Once Connect is supported on Windows, we'll need to make this +// set of tests work there too. + package taskrunner import ( @@ -17,13 +21,231 @@ import ( agentconsul "github.com/hashicorp/nomad/command/agent/consul" "github.com/hashicorp/nomad/helper/args" "github.com/hashicorp/nomad/helper/testlog" + "github.com/hashicorp/nomad/helper/uuid" "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" "github.com/stretchr/testify/require" + "golang.org/x/sys/unix" ) var _ interfaces.TaskPrestartHook = (*envoyBootstrapHook)(nil) +func writeTmp(t *testing.T, s string, fm os.FileMode) string { + dir, err := ioutil.TempDir("", "envoy-") + require.NoError(t, err) + + fPath := filepath.Join(dir, sidsTokenFile) + err = ioutil.WriteFile(fPath, []byte(s), fm) + require.NoError(t, err) + + return dir +} + +func TestEnvoyBootstrapHook_maybeLoadSIToken(t *testing.T) { + t.Parallel() + + // This test fails when running as root because the test case for checking + // the error condition when the file is unreadable fails (root can read the + // file even though the permissions are set to 0200). + if unix.Geteuid() == 0 { + t.Skip("test only works as non-root") + } + + t.Run("file does not exist", func(t *testing.T) { + h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{logger: testlog.HCLogger(t)}) + config, err := h.maybeLoadSIToken("task1", "/does/not/exist") + require.NoError(t, err) // absence of token is not an error + require.Equal(t, "", config) + }) + + t.Run("load token from file", func(t *testing.T) { + token := uuid.Generate() + f := writeTmp(t, token, 0440) + defer cleanupDir(t, f) + + h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{logger: testlog.HCLogger(t)}) + config, err := h.maybeLoadSIToken("task1", f) + require.NoError(t, err) + require.Equal(t, token, config) + }) + + t.Run("file is unreadable", func(t *testing.T) { + token := uuid.Generate() + f := writeTmp(t, token, 0200) + defer cleanupDir(t, f) + + h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{logger: testlog.HCLogger(t)}) + config, err := h.maybeLoadSIToken("task1", f) + require.Error(t, err) + require.False(t, os.IsNotExist(err)) + require.Equal(t, "", config) + }) +} + +func TestEnvoyBootstrapHook_envoyBootstrapArgs(t *testing.T) { + t.Parallel() + + t.Run("excluding SI token", func(t *testing.T) { + ebArgs := envoyBootstrapArgs{ + sidecarFor: "s1", + grpcAddr: "1.1.1.1", + consulHTTPAddr: "2.2.2.2", + envoyAdminBind: "localhost:3333", + } + args := ebArgs.args() + require.Equal(t, []string{"connect", "envoy", + "-grpc-addr", "1.1.1.1", + "-http-addr", "2.2.2.2", + "-admin-bind", "localhost:3333", + "-bootstrap", + "-sidecar-for", "s1", + }, args) + }) + + t.Run("including SI token", func(t *testing.T) { + token := uuid.Generate() + ebArgs := envoyBootstrapArgs{ + sidecarFor: "s1", + grpcAddr: "1.1.1.1", + consulHTTPAddr: "2.2.2.2", + envoyAdminBind: "localhost:3333", + siToken: token, + } + args := ebArgs.args() + require.Equal(t, []string{"connect", "envoy", + "-grpc-addr", "1.1.1.1", + "-http-addr", "2.2.2.2", + "-admin-bind", "localhost:3333", + "-bootstrap", + "-sidecar-for", "s1", + "-token", token, + }, args) + }) +} + +// dig through envoy config to look for consul token +type envoyConfig struct { + DynamicResources struct { + ADSConfig struct { + GRPCServices struct { + InitialMetadata []struct { + Key string `json:"key"` + Value string `json:"value"` + } `json:"initial_metadata"` + } `json:"grpc_services"` + } `json:"ads_config"` + } `json:"dynamic_resources"` +} + +// TestEnvoyBootstrapHook_with_SI_token asserts the bootstrap file written for +// Envoy contains a Consul SI token. +func TestEnvoyBootstrapHook_with_SI_token(t *testing.T) { + t.Parallel() + testutil.RequireConsul(t) + + testconsul, err := consultest.NewTestServerConfig(func(c *consultest.TestServerConfig) { + // If -v wasn't specified squelch consul logging + if !testing.Verbose() { + c.Stdout = ioutil.Discard + c.Stderr = ioutil.Discard + } + }) + if err != nil { + t.Fatalf("error starting test consul server: %v", err) + } + defer testconsul.Stop() + + alloc := mock.Alloc() + alloc.AllocatedResources.Shared.Networks = []*structs.NetworkResource{ + { + Mode: "bridge", + IP: "10.0.0.1", + DynamicPorts: []structs.Port{ + { + Label: "connect-proxy-foo", + Value: 9999, + To: 9999, + }, + }, + }, + } + tg := alloc.Job.TaskGroups[0] + tg.Services = []*structs.Service{ + { + Name: "foo", + PortLabel: "9999", // Just need a valid port, nothing will bind to it + Connect: &structs.ConsulConnect{ + SidecarService: &structs.ConsulSidecarService{}, + }, + }, + } + sidecarTask := &structs.Task{ + Name: "sidecar", + Kind: "connect-proxy:foo", + } + tg.Tasks = append(tg.Tasks, sidecarTask) + + logger := testlog.HCLogger(t) + + allocDir, cleanup := allocdir.TestAllocDir(t, logger, "EnvoyBootstrap") + defer cleanup() + + // Register Group Services + consulConfig := consulapi.DefaultConfig() + consulConfig.Address = testconsul.HTTPAddr + consulAPIClient, err := consulapi.NewClient(consulConfig) + require.NoError(t, err) + + consulClient := agentconsul.NewServiceClient(consulAPIClient.Agent(), logger, true) + go consulClient.Run() + defer consulClient.Shutdown() + require.NoError(t, consulClient.RegisterWorkload(agentconsul.BuildAllocServices(mock.Node(), alloc, agentconsul.NoopRestarter()))) + + // Run Connect bootstrap Hook + h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{ + alloc: alloc, + consulHTTPAddr: testconsul.HTTPAddr, + logger: logger, + }) + req := &interfaces.TaskPrestartRequest{ + Task: sidecarTask, + TaskDir: allocDir.NewTaskDir(sidecarTask.Name), + } + require.NoError(t, req.TaskDir.Build(false, nil)) + + // Insert service identity token in the secrets directory + token := uuid.Generate() + siTokenFile := filepath.Join(req.TaskDir.SecretsDir, sidsTokenFile) + err = ioutil.WriteFile(siTokenFile, []byte(token), 0440) + require.NoError(t, err) + + resp := &interfaces.TaskPrestartResponse{} + + // Run the hook + require.NoError(t, h.Prestart(context.Background(), req, resp)) + + // Assert it is Done + require.True(t, resp.Done) + + // Ensure the default path matches + env := map[string]string{ + taskenv.SecretsDir: req.TaskDir.SecretsDir, + } + f, err := os.Open(args.ReplaceEnv(structs.EnvoyBootstrapPath, env)) + require.NoError(t, err) + defer f.Close() + + // Assert bootstrap configuration is valid json + var out envoyConfig + require.NoError(t, json.NewDecoder(f).Decode(&out)) + + // Assert the SI token got set + key := out.DynamicResources.ADSConfig.GRPCServices.InitialMetadata[0].Key + value := out.DynamicResources.ADSConfig.GRPCServices.InitialMetadata[0].Value + require.Equal(t, "x-consul-token", key) + require.Equal(t, token, value) +} + // TestTaskRunner_EnvoyBootstrapHook_Prestart asserts the EnvoyBootstrapHook // creates Envoy's bootstrap.json configuration based on Connect proxy sidecars // registered for the task. @@ -83,13 +305,18 @@ func TestTaskRunner_EnvoyBootstrapHook_Ok(t *testing.T) { consulConfig.Address = testconsul.HTTPAddr consulAPIClient, err := consulapi.NewClient(consulConfig) require.NoError(t, err) + consulClient := agentconsul.NewServiceClient(consulAPIClient.Agent(), logger, true) go consulClient.Run() defer consulClient.Shutdown() - require.NoError(t, consulClient.RegisterGroup(alloc)) + require.NoError(t, consulClient.RegisterWorkload(agentconsul.BuildAllocServices(mock.Node(), alloc, agentconsul.NoopRestarter()))) // Run Connect bootstrap Hook - h := newEnvoyBootstrapHook(alloc, testconsul.HTTPAddr, logger) + h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{ + alloc: alloc, + consulHTTPAddr: testconsul.HTTPAddr, + logger: logger, + }) req := &interfaces.TaskPrestartRequest{ Task: sidecarTask, TaskDir: allocDir.NewTaskDir(sidecarTask.Name), @@ -104,6 +331,9 @@ func TestTaskRunner_EnvoyBootstrapHook_Ok(t *testing.T) { // Assert it is Done require.True(t, resp.Done) + require.NotNil(t, resp.Env) + require.Equal(t, "localhost:19001", resp.Env[envoyAdminBindEnvPrefix+"foo"]) + // Ensure the default path matches env := map[string]string{ taskenv.SecretsDir: req.TaskDir.SecretsDir, @@ -113,8 +343,14 @@ func TestTaskRunner_EnvoyBootstrapHook_Ok(t *testing.T) { defer f.Close() // Assert bootstrap configuration is valid json - var out map[string]interface{} + var out envoyConfig require.NoError(t, json.NewDecoder(f).Decode(&out)) + + // Assert no SI token got set + key := out.DynamicResources.ADSConfig.GRPCServices.InitialMetadata[0].Key + value := out.DynamicResources.ADSConfig.GRPCServices.InitialMetadata[0].Value + require.Equal(t, "x-consul-token", key) + require.Equal(t, "", value) } // TestTaskRunner_EnvoyBootstrapHook_Noop asserts that the Envoy bootstrap hook @@ -131,7 +367,11 @@ func TestTaskRunner_EnvoyBootstrapHook_Noop(t *testing.T) { // Run Envoy bootstrap Hook. Use invalid Consul address as it should // not get hit. - h := newEnvoyBootstrapHook(alloc, "http://127.0.0.2:1", logger) + h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{ + alloc: alloc, + consulHTTPAddr: "http://127.0.0.2:1", + logger: logger, + }) req := &interfaces.TaskPrestartRequest{ Task: task, TaskDir: allocDir.NewTaskDir(task.Name), @@ -211,7 +451,11 @@ func TestTaskRunner_EnvoyBootstrapHook_RecoverableError(t *testing.T) { // not running. // Run Connect bootstrap Hook - h := newEnvoyBootstrapHook(alloc, testconsul.HTTPAddr, logger) + h := newEnvoyBootstrapHook(&envoyBootstrapHookConfig{ + alloc: alloc, + consulHTTPAddr: testconsul.HTTPAddr, + logger: logger, + }) req := &interfaces.TaskPrestartRequest{ Task: sidecarTask, TaskDir: allocDir.NewTaskDir(sidecarTask.Name), @@ -222,7 +466,7 @@ func TestTaskRunner_EnvoyBootstrapHook_RecoverableError(t *testing.T) { // Run the hook err = h.Prestart(context.Background(), req, resp) - require.Error(t, err) + require.EqualError(t, err, "error creating bootstrap configuration for Connect proxy sidecar: exit status 1") require.True(t, structs.IsRecoverable(err)) // Assert it is not Done diff --git a/client/allocrunner/taskrunner/getter/getter.go b/client/allocrunner/taskrunner/getter/getter.go index a7698d9b74a..c896d6f9292 100644 --- a/client/allocrunner/taskrunner/getter/getter.go +++ b/client/allocrunner/taskrunner/getter/getter.go @@ -18,7 +18,7 @@ var ( lock sync.Mutex // supported is the set of download schemes supported by Nomad - supported = []string{"http", "https", "s3", "hg", "git"} + supported = []string{"http", "https", "s3", "hg", "git", "gcs"} ) const ( diff --git a/client/allocrunner/taskrunner/getter/getter_test.go b/client/allocrunner/taskrunner/getter/getter_test.go index ef961bbc129..2816be10b1e 100644 --- a/client/allocrunner/taskrunner/getter/getter_test.go +++ b/client/allocrunner/taskrunner/getter/getter_test.go @@ -342,6 +342,13 @@ func TestGetGetterUrl_Queries(t *testing.T) { }, output: "bucket.s3-eu-west-1.amazonaws.com/foo/bar?aws_access_key_id=abcd1234", }, + { + name: "gcs", + artifact: &structs.TaskArtifact{ + GetterSource: "gcs::https://www.googleapis.com/storage/v1/b/d/f", + }, + output: "gcs::https://www.googleapis.com/storage/v1/b/d/f", + }, { name: "local file", artifact: &structs.TaskArtifact{ diff --git a/client/allocrunner/taskrunner/logmon_hook.go b/client/allocrunner/taskrunner/logmon_hook.go index 92b177c62a3..20a8486b657 100644 --- a/client/allocrunner/taskrunner/logmon_hook.go +++ b/client/allocrunner/taskrunner/logmon_hook.go @@ -15,6 +15,7 @@ import ( "github.com/hashicorp/nomad/helper/uuid" "github.com/hashicorp/nomad/nomad/structs" bstructs "github.com/hashicorp/nomad/plugins/base/structs" + "github.com/hashicorp/nomad/plugins/drivers" pstructs "github.com/hashicorp/nomad/plugins/shared/structs" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -28,6 +29,8 @@ const ( // logmonHook launches logmon and manages task logging type logmonHook struct { + runner *TaskRunner + // logmon is the handle to the log monitor process for the task. logmon logmon.LogMon logmonPluginClient *plugin.Client @@ -43,9 +46,10 @@ type logmonHookConfig struct { stderrFifo string } -func newLogMonHook(cfg *logmonHookConfig, logger hclog.Logger) *logmonHook { +func newLogMonHook(tr *TaskRunner, logger hclog.Logger) *logmonHook { hook := &logmonHook{ - config: cfg, + runner: tr, + config: tr.logmonHookConfig, logger: logger, } @@ -99,6 +103,11 @@ func reattachConfigFromHookData(data map[string]string) (*plugin.ReattachConfig, func (h *logmonHook) Prestart(ctx context.Context, req *interfaces.TaskPrestartRequest, resp *interfaces.TaskPrestartResponse) error { + if h.isLoggingDisabled() { + h.logger.Debug("logging is disabled by driver") + return nil + } + attempts := 0 for { err := h.prestartOneLoop(ctx, req) @@ -130,6 +139,16 @@ func (h *logmonHook) Prestart(ctx context.Context, } } +func (h *logmonHook) isLoggingDisabled() bool { + ic, ok := h.runner.driver.(drivers.InternalCapabilitiesDriver) + if !ok { + return false + } + + caps := ic.InternalCapabilities() + return caps.DisableLogCollection +} + func (h *logmonHook) prestartOneLoop(ctx context.Context, req *interfaces.TaskPrestartRequest) error { // attach to a running logmon if state indicates one if h.logmonPluginClient == nil { diff --git a/client/allocrunner/taskrunner/logmon_hook_test.go b/client/allocrunner/taskrunner/logmon_hook_test.go index 426a9ea2fd2..b3a08799543 100644 --- a/client/allocrunner/taskrunner/logmon_hook_test.go +++ b/client/allocrunner/taskrunner/logmon_hook_test.go @@ -72,7 +72,8 @@ func TestTaskRunner_LogmonHook_StartStop(t *testing.T) { }() hookConf := newLogMonHookConfig(task.Name, dir) - hook := newLogMonHook(hookConf, testlog.HCLogger(t)) + runner := &TaskRunner{logmonHookConfig: hookConf} + hook := newLogMonHook(runner, testlog.HCLogger(t)) req := interfaces.TaskPrestartRequest{ Task: task, diff --git a/client/allocrunner/taskrunner/logmon_hook_unix_test.go b/client/allocrunner/taskrunner/logmon_hook_unix_test.go index 4a8a461536a..09392d6d2bb 100644 --- a/client/allocrunner/taskrunner/logmon_hook_unix_test.go +++ b/client/allocrunner/taskrunner/logmon_hook_unix_test.go @@ -36,7 +36,8 @@ func TestTaskRunner_LogmonHook_StartCrashStop(t *testing.T) { }() hookConf := newLogMonHookConfig(task.Name, dir) - hook := newLogMonHook(hookConf, testlog.HCLogger(t)) + runner := &TaskRunner{logmonHookConfig: hookConf} + hook := newLogMonHook(runner, testlog.HCLogger(t)) req := interfaces.TaskPrestartRequest{ Task: task, @@ -104,7 +105,8 @@ func TestTaskRunner_LogmonHook_ShutdownMidStart(t *testing.T) { }() hookConf := newLogMonHookConfig(task.Name, dir) - hook := newLogMonHook(hookConf, testlog.HCLogger(t)) + runner := &TaskRunner{logmonHookConfig: hookConf} + hook := newLogMonHook(runner, testlog.HCLogger(t)) req := interfaces.TaskPrestartRequest{ Task: task, diff --git a/client/allocrunner/taskrunner/script_check_hook.go b/client/allocrunner/taskrunner/script_check_hook.go index a7d8935ba79..f10486ac526 100644 --- a/client/allocrunner/taskrunner/script_check_hook.go +++ b/client/allocrunner/taskrunner/script_check_hook.go @@ -35,8 +35,8 @@ type scriptCheckHookConfig struct { // checks in the context of a task type scriptCheckHook struct { consul consul.ConsulServiceAPI - allocID string - taskName string + alloc *structs.Allocation + task *structs.Task logger log.Logger shutdownWait time.Duration // max time to wait for scripts to shutdown shutdownCh chan struct{} // closed when all scripts should shutdown @@ -45,7 +45,7 @@ type scriptCheckHook struct { driverExec tinterfaces.ScriptExecutor taskEnv *taskenv.TaskEnv - // These maintain state + // These maintain state and are populated by Poststart() or Update() scripts map[string]*scriptCheck runningScripts map[string]*taskletHandle @@ -54,55 +54,15 @@ type scriptCheckHook struct { mu sync.Mutex } +// newScriptCheckHook returns a hook without any scriptChecks. +// They will get created only once their task environment is ready +// in Poststart() or Update() func newScriptCheckHook(c scriptCheckHookConfig) *scriptCheckHook { - scriptChecks := make(map[string]*scriptCheck) - for _, service := range c.task.Services { - for _, check := range service.Checks { - if check.Type != structs.ServiceCheckScript { - continue - } - sc := newScriptCheck(&scriptCheckConfig{ - allocID: c.alloc.ID, - taskName: c.task.Name, - check: check, - service: service, - agent: c.consul, - }) - scriptChecks[sc.id] = sc - } - } - - // Walk back through the task group to see if there are script checks - // associated with the task. If so, we'll create scriptCheck tasklets - // for them. The group-level service and any check restart behaviors it - // needs are entirely encapsulated within the group service hook which - // watches Consul for status changes. - tg := c.alloc.Job.LookupTaskGroup(c.alloc.TaskGroup) - for _, service := range tg.Services { - for _, check := range service.Checks { - if check.Type != structs.ServiceCheckScript { - continue - } - if check.TaskName != c.task.Name { - continue - } - groupTaskName := "group-" + tg.Name - sc := newScriptCheck(&scriptCheckConfig{ - allocID: c.alloc.ID, - taskName: groupTaskName, - service: service, - check: check, - agent: c.consul, - }) - scriptChecks[sc.id] = sc - } - } - h := &scriptCheckHook{ consul: c.consul, - allocID: c.alloc.ID, - taskName: c.task.Name, - scripts: scriptChecks, + alloc: c.alloc, + task: c.task, + scripts: make(map[string]*scriptCheck), runningScripts: make(map[string]*taskletHandle), shutdownWait: defaultShutdownWait, shutdownCh: make(chan struct{}), @@ -119,72 +79,69 @@ func (h *scriptCheckHook) Name() string { return "script_checks" } -// PostStart implements interfaces.TaskPoststartHook. It adds the current -// task context (driver and env) to the script checks and starts up the -// scripts. +// Prestart implements interfaces.TaskPrestartHook. It stores the +// initial structs.Task +func (h *scriptCheckHook) Prestart(ctx context.Context, req *interfaces.TaskPrestartRequest, _ *interfaces.TaskPrestartResponse) error { + h.mu.Lock() + defer h.mu.Unlock() + h.task = req.Task + return nil +} + +// PostStart implements interfaces.TaskPoststartHook. It creates new +// script checks with the current task context (driver and env), and +// starts up the scripts. func (h *scriptCheckHook) Poststart(ctx context.Context, req *interfaces.TaskPoststartRequest, _ *interfaces.TaskPoststartResponse) error { h.mu.Lock() defer h.mu.Unlock() if req.DriverExec == nil { - return fmt.Errorf("driver doesn't support script checks") + h.logger.Debug("driver doesn't support script checks") + return nil } - - // Store the TaskEnv for interpolating now and when Updating h.driverExec = req.DriverExec h.taskEnv = req.TaskEnv - h.scripts = h.getTaskScriptChecks() - // Handle starting scripts - for checkID, script := range h.scripts { - // If it's already running, cancel and replace - if oldScript, running := h.runningScripts[checkID]; running { - oldScript.cancel() - } - // Start and store the handle - h.runningScripts[checkID] = script.run() - } - return nil + return h.upsertChecks() } -// Updated implements interfaces.TaskUpdateHook. It adds the current -// task context (driver and env) to the script checks and replaces any -// that have been changed. +// Updated implements interfaces.TaskUpdateHook. It creates new +// script checks with the current task context (driver and env and possibly +// new structs.Task), and starts up the scripts. func (h *scriptCheckHook) Update(ctx context.Context, req *interfaces.TaskUpdateRequest, _ *interfaces.TaskUpdateResponse) error { h.mu.Lock() defer h.mu.Unlock() - // Get current script checks with request's driver metadata as it - // can't change due to Updates - oldScriptChecks := h.getTaskScriptChecks() - - task := req.Alloc.LookupTask(h.taskName) + task := req.Alloc.LookupTask(h.task.Name) if task == nil { - return fmt.Errorf("task %q not found in updated alloc", h.taskName) + return fmt.Errorf("task %q not found in updated alloc", h.task.Name) } - - // Update service hook fields + h.alloc = req.Alloc + h.task = task h.taskEnv = req.TaskEnv - // Create new script checks struct with those new values - newScriptChecks := h.getTaskScriptChecks() + return h.upsertChecks() +} - // Handle starting scripts - for checkID, script := range newScriptChecks { - if _, ok := oldScriptChecks[checkID]; ok { - // If it's already running, cancel and replace - if oldScript, running := h.runningScripts[checkID]; running { - oldScript.cancel() - } - // Start and store the handle - h.runningScripts[checkID] = script.run() +func (h *scriptCheckHook) upsertChecks() error { + // Create new script checks struct with new task context + oldScriptChecks := h.scripts + h.scripts = h.newScriptChecks() + + // Run new or replacement scripts + for id, script := range h.scripts { + // If it's already running, cancel and replace + if oldScript, running := h.runningScripts[id]; running { + oldScript.cancel() } + // Start and store the handle + h.runningScripts[id] = script.run() } // Cancel scripts we no longer want - for checkID := range oldScriptChecks { - if _, ok := newScriptChecks[checkID]; !ok { - if oldScript, running := h.runningScripts[checkID]; running { + for id := range oldScriptChecks { + if _, ok := h.scripts[id]; !ok { + if oldScript, running := h.runningScripts[id]; running { oldScript.cancel() } } @@ -215,26 +172,69 @@ func (h *scriptCheckHook) Stop(ctx context.Context, req *interfaces.TaskStopRequ return nil } -// getTaskScriptChecks returns an interpolated copy of services and checks with -// values from the task's environment. -func (h *scriptCheckHook) getTaskScriptChecks() map[string]*scriptCheck { - // Guard against not having a valid taskEnv. This can be the case if the - // PreKilling or Exited hook is run before Poststart. - if h.taskEnv == nil || h.driverExec == nil { - return nil +func (h *scriptCheckHook) newScriptChecks() map[string]*scriptCheck { + scriptChecks := make(map[string]*scriptCheck) + interpolatedTaskServices := taskenv.InterpolateServices(h.taskEnv, h.task.Services) + for _, service := range interpolatedTaskServices { + for _, check := range service.Checks { + if check.Type != structs.ServiceCheckScript { + continue + } + serviceID := agentconsul.MakeAllocServiceID( + h.alloc.ID, h.task.Name, service) + sc := newScriptCheck(&scriptCheckConfig{ + allocID: h.alloc.ID, + taskName: h.task.Name, + check: check, + serviceID: serviceID, + agent: h.consul, + driverExec: h.driverExec, + taskEnv: h.taskEnv, + logger: h.logger, + shutdownCh: h.shutdownCh, + }) + if sc != nil { + scriptChecks[sc.id] = sc + } + } } - newChecks := make(map[string]*scriptCheck) - for _, orig := range h.scripts { - sc := orig.Copy() - sc.exec = h.driverExec - sc.logger = h.logger - sc.shutdownCh = h.shutdownCh - sc.callback = newScriptCheckCallback(sc) - sc.Command = h.taskEnv.ReplaceEnv(orig.Command) - sc.Args = h.taskEnv.ParseAndReplace(orig.Args) - newChecks[sc.id] = sc + + // Walk back through the task group to see if there are script checks + // associated with the task. If so, we'll create scriptCheck tasklets + // for them. The group-level service and any check restart behaviors it + // needs are entirely encapsulated within the group service hook which + // watches Consul for status changes. + tg := h.alloc.Job.LookupTaskGroup(h.alloc.TaskGroup) + interpolatedGroupServices := taskenv.InterpolateServices(h.taskEnv, tg.Services) + for _, service := range interpolatedGroupServices { + for _, check := range service.Checks { + if check.Type != structs.ServiceCheckScript { + continue + } + if check.TaskName != h.task.Name { + continue + } + groupTaskName := "group-" + tg.Name + serviceID := agentconsul.MakeAllocServiceID( + h.alloc.ID, groupTaskName, service) + sc := newScriptCheck(&scriptCheckConfig{ + allocID: h.alloc.ID, + taskName: groupTaskName, + check: check, + serviceID: serviceID, + agent: h.consul, + driverExec: h.driverExec, + taskEnv: h.taskEnv, + logger: h.logger, + shutdownCh: h.shutdownCh, + isGroup: true, + }) + if sc != nil { + scriptChecks[sc.id] = sc + } + } } - return newChecks + return scriptChecks } // heartbeater is the subset of consul agent functionality needed by script @@ -248,17 +248,23 @@ type heartbeater interface { type scriptCheck struct { id string agent heartbeater + check *structs.ServiceCheck lastCheckOk bool // true if the last check was ok; otherwise false tasklet } // scriptCheckConfig is a parameter struct for newScriptCheck type scriptCheckConfig struct { - allocID string - taskName string - service *structs.Service - check *structs.ServiceCheck - agent heartbeater + allocID string + taskName string + serviceID string + check *structs.ServiceCheck + agent heartbeater + driverExec tinterfaces.ScriptExecutor + taskEnv *taskenv.TaskEnv + logger log.Logger + shutdownCh chan struct{} + isGroup bool } // newScriptCheck constructs a scriptCheck. we're only going to @@ -266,20 +272,41 @@ type scriptCheckConfig struct { // rest being configured during the Poststart hook so that we have // the rest of the task execution environment func newScriptCheck(config *scriptCheckConfig) *scriptCheck { - serviceID := agentconsul.MakeTaskServiceID( - config.allocID, config.taskName, config.service) - checkID := agentconsul.MakeCheckID(serviceID, config.check) + // Guard against not having a valid taskEnv. This can be the case if the + // PreKilling or Exited hook is run before Poststart. + if config.taskEnv == nil || config.driverExec == nil { + return nil + } + + orig := config.check sc := &scriptCheck{ - id: checkID, agent: config.agent, + check: config.check.Copy(), lastCheckOk: true, // start logging on first failure } + // we can't use the promoted fields of tasklet in the struct literal - sc.Command = config.check.Command - sc.Args = config.check.Args + sc.Command = config.taskEnv.ReplaceEnv(config.check.Command) + sc.Args = config.taskEnv.ParseAndReplace(config.check.Args) sc.Interval = config.check.Interval sc.Timeout = config.check.Timeout + sc.exec = config.driverExec + sc.callback = newScriptCheckCallback(sc) + sc.logger = config.logger + sc.shutdownCh = config.shutdownCh + sc.check.Command = sc.Command + sc.check.Args = sc.Args + + if config.isGroup { + // group services don't have access to a task environment + // at creation, so their checks get registered before the + // check can be interpolated here. if we don't use the + // original checkID, they can't be updated. + sc.id = agentconsul.MakeCheckID(config.serviceID, orig) + } else { + sc.id = agentconsul.MakeCheckID(config.serviceID, sc.check) + } return sc } @@ -315,7 +342,7 @@ func newScriptCheckCallback(s *scriptCheck) taskletCallback { } // heartbeat the check to Consul - err = s.updateTTL(ctx, s.id, outputMsg, state) + err = s.updateTTL(ctx, outputMsg, state) select { case <-ctx.Done(): // check has been removed; don't report errors @@ -347,9 +374,9 @@ const ( // updateTTL updates the state to Consul, performing an expontential backoff // in the case where the check isn't registered in Consul to avoid a race between // service registration and the first check. -func (s *scriptCheck) updateTTL(ctx context.Context, id, msg, state string) error { +func (s *scriptCheck) updateTTL(ctx context.Context, msg, state string) error { for attempts := 0; ; attempts++ { - err := s.agent.UpdateTTL(id, msg, state) + err := s.agent.UpdateTTL(s.id, msg, state) if err == nil { return nil } diff --git a/client/allocrunner/taskrunner/script_check_hook_test.go b/client/allocrunner/taskrunner/script_check_hook_test.go index 4373674fbae..9fba3a67f66 100644 --- a/client/allocrunner/taskrunner/script_check_hook_test.go +++ b/client/allocrunner/taskrunner/script_check_hook_test.go @@ -10,23 +10,30 @@ import ( "github.com/hashicorp/consul/api" hclog "github.com/hashicorp/go-hclog" "github.com/hashicorp/nomad/client/allocrunner/taskrunner/interfaces" + "github.com/hashicorp/nomad/client/consul" + "github.com/hashicorp/nomad/client/taskenv" + agentconsul "github.com/hashicorp/nomad/command/agent/consul" "github.com/hashicorp/nomad/helper/testlog" + "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" "github.com/stretchr/testify/require" ) func newScriptMock(hb heartbeater, exec interfaces.ScriptExecutor, logger hclog.Logger, interval, timeout time.Duration) *scriptCheck { script := newScriptCheck(&scriptCheckConfig{ - allocID: "allocid", - taskName: "testtask", - agent: hb, - service: &structs.Service{Name: "xx"}, - check: &structs.ServiceCheck{}, + allocID: "allocid", + taskName: "testtask", + serviceID: "serviceid", + check: &structs.ServiceCheck{ + Interval: interval, + Timeout: timeout, + }, + agent: hb, + driverExec: exec, + taskEnv: &taskenv.TaskEnv{}, + logger: logger, + shutdownCh: nil, }) - script.exec = exec - script.logger = logger - script.Interval = interval - script.Timeout = timeout script.callback = newScriptCheckCallback(script) script.lastCheckOk = true return script @@ -213,3 +220,69 @@ func TestScript_Exec_Codes(t *testing.T) { } } } + +// TestScript_TaskEnvInterpolation asserts that script check hooks are +// interpolated in the same way that services are +func TestScript_TaskEnvInterpolation(t *testing.T) { + + logger := testlog.HCLogger(t) + consulClient := consul.NewMockConsulServiceClient(t, logger) + exec, cancel := newBlockingScriptExec() + defer cancel() + + alloc := mock.ConnectAlloc() + task := alloc.Job.TaskGroups[0].Tasks[0] + + task.Services[0].Name = "${NOMAD_JOB_NAME}-${TASK}-${SVC_NAME}" + task.Services[0].Checks[0].Name = "${NOMAD_JOB_NAME}-${SVC_NAME}-check" + alloc.Job.Canonicalize() // need to re-canonicalize b/c the mock already did it + + env := taskenv.NewBuilder(mock.Node(), alloc, task, "global").SetHookEnv( + "script_check", + map[string]string{"SVC_NAME": "frontend"}).Build() + + svcHook := newServiceHook(serviceHookConfig{ + alloc: alloc, + task: task, + consul: consulClient, + logger: logger, + }) + // emulate prestart having been fired + svcHook.taskEnv = env + + scHook := newScriptCheckHook(scriptCheckHookConfig{ + alloc: alloc, + task: task, + consul: consulClient, + logger: logger, + shutdownWait: time.Hour, // heartbeater will never be called + }) + // emulate prestart having been fired + scHook.taskEnv = env + scHook.driverExec = exec + + expectedSvc := svcHook.getWorkloadServices().Services[0] + expected := agentconsul.MakeCheckID(agentconsul.MakeAllocServiceID( + alloc.ID, task.Name, expectedSvc), expectedSvc.Checks[0]) + + actual := scHook.newScriptChecks() + check, ok := actual[expected] + require.True(t, ok) + require.Equal(t, "my-job-frontend-check", check.check.Name) + + // emulate an update + env = taskenv.NewBuilder(mock.Node(), alloc, task, "global").SetHookEnv( + "script_check", + map[string]string{"SVC_NAME": "backend"}).Build() + scHook.taskEnv = env + svcHook.taskEnv = env + + expectedSvc = svcHook.getWorkloadServices().Services[0] + expected = agentconsul.MakeCheckID(agentconsul.MakeAllocServiceID( + alloc.ID, task.Name, expectedSvc), expectedSvc.Checks[0]) + + actual = scHook.newScriptChecks() + check, ok = actual[expected] + require.True(t, ok) + require.Equal(t, "my-job-backend-check", check.check.Name) +} diff --git a/client/allocrunner/taskrunner/service_hook.go b/client/allocrunner/taskrunner/service_hook.go index edea8673cbf..02b8d75b71a 100644 --- a/client/allocrunner/taskrunner/service_hook.go +++ b/client/allocrunner/taskrunner/service_hook.go @@ -27,7 +27,7 @@ type serviceHookConfig struct { consul consul.ConsulServiceAPI // Restarter is a subset of the TaskLifecycle interface - restarter agentconsul.TaskRestarter + restarter agentconsul.WorkloadRestarter logger log.Logger } @@ -36,7 +36,7 @@ type serviceHook struct { consul consul.ConsulServiceAPI allocID string taskName string - restarter agentconsul.TaskRestarter + restarter agentconsul.WorkloadRestarter logger log.Logger // The following fields may be updated @@ -63,15 +63,8 @@ func newServiceHook(c serviceHookConfig) *serviceHook { delay: c.task.ShutdownDelay, } - // COMPAT(0.10): Just use the AllocatedResources - if c.alloc.AllocatedResources != nil { - if res := c.alloc.AllocatedResources.Tasks[c.task.Name]; res != nil { - h.networks = res.Networks - } - } else { - if res := c.alloc.TaskResources[c.task.Name]; res != nil { - h.networks = res.Networks - } + if res := c.alloc.AllocatedResources.Tasks[c.task.Name]; res != nil { + h.networks = res.Networks } if c.alloc.DeploymentStatus != nil && c.alloc.DeploymentStatus.Canary { @@ -96,9 +89,9 @@ func (h *serviceHook) Poststart(ctx context.Context, req *interfaces.TaskPoststa h.taskEnv = req.TaskEnv // Create task services struct with request's driver metadata - taskServices := h.getTaskServices() + workloadServices := h.getWorkloadServices() - return h.consul.RegisterTask(taskServices) + return h.consul.RegisterWorkload(workloadServices) } func (h *serviceHook) Update(ctx context.Context, req *interfaces.TaskUpdateRequest, _ *interfaces.TaskUpdateResponse) error { @@ -107,7 +100,7 @@ func (h *serviceHook) Update(ctx context.Context, req *interfaces.TaskUpdateRequ // Create old task services struct with request's driver metadata as it // can't change due to Updates - oldTaskServices := h.getTaskServices() + oldWorkloadServices := h.getWorkloadServices() // Store new updated values out of request canary := false @@ -115,16 +108,9 @@ func (h *serviceHook) Update(ctx context.Context, req *interfaces.TaskUpdateRequ canary = req.Alloc.DeploymentStatus.Canary } - // COMPAT(0.10): Just use the AllocatedResources var networks structs.Networks - if req.Alloc.AllocatedResources != nil { - if res := req.Alloc.AllocatedResources.Tasks[h.taskName]; res != nil { - networks = res.Networks - } - } else { - if res := req.Alloc.TaskResources[h.taskName]; res != nil { - networks = res.Networks - } + if res := req.Alloc.AllocatedResources.Tasks[h.taskName]; res != nil { + networks = res.Networks } task := req.Alloc.LookupTask(h.taskName) @@ -140,9 +126,9 @@ func (h *serviceHook) Update(ctx context.Context, req *interfaces.TaskUpdateRequ h.canary = canary // Create new task services struct with those new values - newTaskServices := h.getTaskServices() + newWorkloadServices := h.getWorkloadServices() - return h.consul.UpdateTask(oldTaskServices, newTaskServices) + return h.consul.UpdateWorkload(oldWorkloadServices, newWorkloadServices) } func (h *serviceHook) PreKilling(ctx context.Context, req *interfaces.TaskPreKillRequest, resp *interfaces.TaskPreKillResponse) error { @@ -174,13 +160,13 @@ func (h *serviceHook) Exited(context.Context, *interfaces.TaskExitedRequest, *in // deregister services from Consul. func (h *serviceHook) deregister() { - taskServices := h.getTaskServices() - h.consul.RemoveTask(taskServices) + workloadServices := h.getWorkloadServices() + h.consul.RemoveWorkload(workloadServices) // Canary flag may be getting flipped when the alloc is being // destroyed, so remove both variations of the service - taskServices.Canary = !taskServices.Canary - h.consul.RemoveTask(taskServices) + workloadServices.Canary = !workloadServices.Canary + h.consul.RemoveWorkload(workloadServices) } @@ -191,14 +177,14 @@ func (h *serviceHook) Stop(ctx context.Context, req *interfaces.TaskStopRequest, return nil } -func (h *serviceHook) getTaskServices() *agentconsul.TaskServices { +func (h *serviceHook) getWorkloadServices() *agentconsul.WorkloadServices { // Interpolate with the task's environment - interpolatedServices := interpolateServices(h.taskEnv, h.services) + interpolatedServices := taskenv.InterpolateServices(h.taskEnv, h.services) // Create task services struct with request's driver metadata - return &agentconsul.TaskServices{ + return &agentconsul.WorkloadServices{ AllocID: h.allocID, - Name: h.taskName, + Task: h.taskName, Restarter: h.restarter, Services: interpolatedServices, DriverExec: h.driverExec, @@ -207,62 +193,3 @@ func (h *serviceHook) getTaskServices() *agentconsul.TaskServices { Canary: h.canary, } } - -// interpolateServices returns an interpolated copy of services and checks with -// values from the task's environment. -func interpolateServices(taskEnv *taskenv.TaskEnv, services []*structs.Service) []*structs.Service { - // Guard against not having a valid taskEnv. This can be the case if the - // PreKilling or Exited hook is run before Poststart. - if taskEnv == nil || len(services) == 0 { - return nil - } - - interpolated := make([]*structs.Service, len(services)) - - for i, origService := range services { - // Create a copy as we need to reinterpolate every time the - // environment changes - service := origService.Copy() - - for _, check := range service.Checks { - check.Name = taskEnv.ReplaceEnv(check.Name) - check.Type = taskEnv.ReplaceEnv(check.Type) - check.Command = taskEnv.ReplaceEnv(check.Command) - check.Args = taskEnv.ParseAndReplace(check.Args) - check.Path = taskEnv.ReplaceEnv(check.Path) - check.Protocol = taskEnv.ReplaceEnv(check.Protocol) - check.PortLabel = taskEnv.ReplaceEnv(check.PortLabel) - check.InitialStatus = taskEnv.ReplaceEnv(check.InitialStatus) - check.Method = taskEnv.ReplaceEnv(check.Method) - check.GRPCService = taskEnv.ReplaceEnv(check.GRPCService) - if len(check.Header) > 0 { - header := make(map[string][]string, len(check.Header)) - for k, vs := range check.Header { - newVals := make([]string, len(vs)) - for i, v := range vs { - newVals[i] = taskEnv.ReplaceEnv(v) - } - header[taskEnv.ReplaceEnv(k)] = newVals - } - check.Header = header - } - } - - service.Name = taskEnv.ReplaceEnv(service.Name) - service.PortLabel = taskEnv.ReplaceEnv(service.PortLabel) - service.Tags = taskEnv.ParseAndReplace(service.Tags) - service.CanaryTags = taskEnv.ParseAndReplace(service.CanaryTags) - - if len(service.Meta) > 0 { - meta := make(map[string]string, len(service.Meta)) - for k, v := range service.Meta { - meta[k] = taskEnv.ReplaceEnv(v) - } - service.Meta = meta - } - - interpolated[i] = service - } - - return interpolated -} diff --git a/client/allocrunner/taskrunner/service_hook_test.go b/client/allocrunner/taskrunner/service_hook_test.go index 86772f0f5e0..4c246cb91d4 100644 --- a/client/allocrunner/taskrunner/service_hook_test.go +++ b/client/allocrunner/taskrunner/service_hook_test.go @@ -1,12 +1,7 @@ package taskrunner import ( - "testing" - "github.com/hashicorp/nomad/client/allocrunner/interfaces" - "github.com/hashicorp/nomad/client/taskenv" - "github.com/hashicorp/nomad/nomad/structs" - "github.com/stretchr/testify/require" ) // Statically assert the stats hook implements the expected interfaces @@ -14,80 +9,3 @@ var _ interfaces.TaskPoststartHook = (*serviceHook)(nil) var _ interfaces.TaskExitedHook = (*serviceHook)(nil) var _ interfaces.TaskPreKillHook = (*serviceHook)(nil) var _ interfaces.TaskUpdateHook = (*serviceHook)(nil) - -// TestTaskRunner_ServiceHook_InterpolateServices asserts that all service -// and check fields are properly interpolated. -func TestTaskRunner_ServiceHook_InterpolateServices(t *testing.T) { - t.Parallel() - services := []*structs.Service{ - { - Name: "${name}", - PortLabel: "${portlabel}", - Tags: []string{"${tags}"}, - Checks: []*structs.ServiceCheck{ - { - Name: "${checkname}", - Type: "${checktype}", - Command: "${checkcmd}", - Args: []string{"${checkarg}"}, - Path: "${checkstr}", - Protocol: "${checkproto}", - PortLabel: "${checklabel}", - InitialStatus: "${checkstatus}", - Method: "${checkmethod}", - Header: map[string][]string{ - "${checkheaderk}": {"${checkheaderv}"}, - }, - }, - }, - }, - } - - env := &taskenv.TaskEnv{ - EnvMap: map[string]string{ - "name": "name", - "portlabel": "portlabel", - "tags": "tags", - "checkname": "checkname", - "checktype": "checktype", - "checkcmd": "checkcmd", - "checkarg": "checkarg", - "checkstr": "checkstr", - "checkpath": "checkpath", - "checkproto": "checkproto", - "checklabel": "checklabel", - "checkstatus": "checkstatus", - "checkmethod": "checkmethod", - "checkheaderk": "checkheaderk", - "checkheaderv": "checkheaderv", - }, - } - - interpolated := interpolateServices(env, services) - - exp := []*structs.Service{ - { - Name: "name", - PortLabel: "portlabel", - Tags: []string{"tags"}, - Checks: []*structs.ServiceCheck{ - { - Name: "checkname", - Type: "checktype", - Command: "checkcmd", - Args: []string{"checkarg"}, - Path: "checkstr", - Protocol: "checkproto", - PortLabel: "checklabel", - InitialStatus: "checkstatus", - Method: "checkmethod", - Header: map[string][]string{ - "checkheaderk": {"checkheaderv"}, - }, - }, - }, - }, - } - - require.Equal(t, exp, interpolated) -} diff --git a/client/allocrunner/taskrunner/sids_hook.go b/client/allocrunner/taskrunner/sids_hook.go new file mode 100644 index 00000000000..b22a31d050b --- /dev/null +++ b/client/allocrunner/taskrunner/sids_hook.go @@ -0,0 +1,277 @@ +package taskrunner + +import ( + "context" + "io/ioutil" + "os" + "path/filepath" + "sync" + "time" + + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/nomad/client/allocrunner/interfaces" + ti "github.com/hashicorp/nomad/client/allocrunner/taskrunner/interfaces" + "github.com/hashicorp/nomad/client/consul" + "github.com/hashicorp/nomad/nomad/structs" + "github.com/pkg/errors" +) + +const ( + // the name of this hook, used in logs + sidsHookName = "consul_si_token" + + // sidsBackoffBaseline is the baseline time for exponential backoff when + // attempting to retrieve a Consul SI token + sidsBackoffBaseline = 5 * time.Second + + // sidsBackoffLimit is the limit of the exponential backoff when attempting + // to retrieve a Consul SI token + sidsBackoffLimit = 3 * time.Minute + + // sidsDerivationTimeout limits the amount of time we may spend trying to + // derive a SI token. If the hook does not get a token within this amount of + // time, the result is a failure. + sidsDerivationTimeout = 5 * time.Minute + + // sidsTokenFile is the name of the file holding the Consul SI token inside + // the task's secret directory + sidsTokenFile = "si_token" + + // sidsTokenFilePerms is the level of file permissions granted on the file + // in the secrets directory for the task + sidsTokenFilePerms = 0440 +) + +type sidsHookConfig struct { + alloc *structs.Allocation + task *structs.Task + sidsClient consul.ServiceIdentityAPI + lifecycle ti.TaskLifecycle + logger hclog.Logger +} + +// Service Identities hook for managing SI tokens of connect enabled tasks. +type sidsHook struct { + // alloc is the allocation + alloc *structs.Allocation + + // taskName is the name of the task + task *structs.Task + + // sidsClient is the Consul client [proxy] for requesting SI tokens + sidsClient consul.ServiceIdentityAPI + + // lifecycle is used to signal, restart, and kill a task + lifecycle ti.TaskLifecycle + + // derivationTimeout is the amount of time we may wait for Consul to successfully + // provide a SI token. Making this configurable for testing, otherwise + // default to sidsDerivationTimeout + derivationTimeout time.Duration + + // logger is used to log + logger hclog.Logger + + // lock variables that can be manipulated after hook creation + lock sync.Mutex + // firstRun keeps track of whether the hook is being called for the first + // time (for this task) during the lifespan of the Nomad Client process. + firstRun bool +} + +func newSIDSHook(c sidsHookConfig) *sidsHook { + return &sidsHook{ + alloc: c.alloc, + task: c.task, + sidsClient: c.sidsClient, + lifecycle: c.lifecycle, + derivationTimeout: sidsDerivationTimeout, + logger: c.logger.Named(sidsHookName), + firstRun: true, + } +} + +func (h *sidsHook) Name() string { + return sidsHookName +} + +func (h *sidsHook) Prestart( + ctx context.Context, + req *interfaces.TaskPrestartRequest, + resp *interfaces.TaskPrestartResponse) error { + + h.lock.Lock() + defer h.lock.Unlock() + + // do nothing if we have already done things + if h.earlyExit() { + resp.Done = true + return nil + } + + // optimistically try to recover token from disk + token, err := h.recoverToken(req.TaskDir.SecretsDir) + if err != nil { + return err + } + + // need to ask for a new SI token & persist it to disk + if token == "" { + if token, err = h.deriveSIToken(ctx); err != nil { + return err + } + if err := h.writeToken(req.TaskDir.SecretsDir, token); err != nil { + return err + } + } + + h.logger.Info("derived SI token", "task", h.task.Name, "si_task", h.task.Kind.Value()) + + resp.Done = true + return nil +} + +// earlyExit returns true if the Prestart hook has already been executed during +// the instantiation of this task runner. +// +// assumes h is locked +func (h *sidsHook) earlyExit() bool { + if h.firstRun { + h.firstRun = false + return false + } + return true +} + +// writeToken writes token into the secrets directory for the task. +func (h *sidsHook) writeToken(dir string, token string) error { + tokenPath := filepath.Join(dir, sidsTokenFile) + if err := ioutil.WriteFile(tokenPath, []byte(token), sidsTokenFilePerms); err != nil { + return errors.Wrap(err, "failed to write SI token") + } + return nil +} + +// recoverToken returns the token saved to disk in the secrets directory for the +// task if it exists, or the empty string if the file does not exist. an error +// is returned only for some other (e.g. disk IO) error. +func (h *sidsHook) recoverToken(dir string) (string, error) { + tokenPath := filepath.Join(dir, sidsTokenFile) + token, err := ioutil.ReadFile(tokenPath) + if err != nil { + if !os.IsNotExist(err) { + h.logger.Error("failed to recover SI token", "error", err) + return "", errors.Wrap(err, "failed to recover SI token") + } + h.logger.Trace("no pre-existing SI token to recover", "task", h.task.Name) + return "", nil // token file does not exist yet + } + h.logger.Trace("recovered pre-existing SI token", "task", h.task.Name) + return string(token), nil +} + +// siDerivationResult is used to pass along the result of attempting to derive +// an SI token between the goroutine doing the derivation and its caller +type siDerivationResult struct { + token string + err error +} + +// deriveSIToken spawns and waits on a goroutine which will make attempts to +// derive an SI token until a token is successfully created, or ctx is signaled +// done. +func (h *sidsHook) deriveSIToken(ctx context.Context) (string, error) { + ctx, cancel := context.WithTimeout(ctx, h.derivationTimeout) + defer cancel() + + resultCh := make(chan siDerivationResult) + + // keep trying to get the token in the background + go h.tryDerive(ctx, resultCh) + + // wait until we get a token, or we get a signal to quit + for { + select { + case result := <-resultCh: + if result.err != nil { + h.logger.Error("failed to derive SI token", "error", result.err) + h.kill(ctx, errors.Wrap(result.err, "failed to derive SI token")) + return "", result.err + } + return result.token, nil + case <-ctx.Done(): + return "", ctx.Err() + } + } +} + +func (h *sidsHook) kill(ctx context.Context, reason error) { + if err := h.lifecycle.Kill(ctx, + structs.NewTaskEvent(structs.TaskKilling). + SetFailsTask(). + SetDisplayMessage(reason.Error()), + ); err != nil { + h.logger.Error("failed to kill task", "kill_reason", reason, "error", err) + } +} + +// tryDerive loops forever until a token is created, or ctx is done. +func (h *sidsHook) tryDerive(ctx context.Context, ch chan<- siDerivationResult) { + for attempt := 0; backoff(ctx, attempt); attempt++ { + + tokens, err := h.sidsClient.DeriveSITokens(h.alloc, []string{h.task.Name}) + + switch { + case err == nil: + token, exists := tokens[h.task.Name] + if !exists { + err := errors.New("response does not include token for task") + h.logger.Error("derive SI token is missing token for task", "error", err, "task", h.task.Name) + ch <- siDerivationResult{token: "", err: err} + return + } + ch <- siDerivationResult{token: token, err: nil} + return + case structs.IsServerSide(err): + // the error is known to be a server problem, just die + h.logger.Error("failed to derive SI token", "error", err, "task", h.task.Name, "server_side", true) + ch <- siDerivationResult{token: "", err: err} + return + case !structs.IsRecoverable(err): + // the error is known not to be recoverable, just die + h.logger.Error("failed to derive SI token", "error", err, "task", h.task.Name, "recoverable", false) + ch <- siDerivationResult{token: "", err: err} + return + + default: + // the error is marked recoverable, retry after some backoff + h.logger.Error("failed attempt to derive SI token", "error", err, "recoverable", true) + } + } +} + +func backoff(ctx context.Context, attempt int) bool { + next := computeBackoff(attempt) + select { + case <-ctx.Done(): + return false + case <-time.After(next): + return true + } +} + +func computeBackoff(attempt int) time.Duration { + switch attempt { + case 0: + return 0 + case 1: + // go fast on first retry, because a unit test should be fast + return 100 * time.Millisecond + default: + wait := time.Duration(attempt) * sidsBackoffBaseline + if wait > sidsBackoffLimit { + wait = sidsBackoffLimit + } + return wait + } +} diff --git a/client/allocrunner/taskrunner/sids_hook_test.go b/client/allocrunner/taskrunner/sids_hook_test.go new file mode 100644 index 00000000000..41c872ce6df --- /dev/null +++ b/client/allocrunner/taskrunner/sids_hook_test.go @@ -0,0 +1,333 @@ +// +build !windows +// todo(shoenig): Once Connect is supported on Windows, we'll need to make this +// set of tests work there too. + +package taskrunner + +import ( + "context" + "io/ioutil" + "os" + "path/filepath" + "testing" + "time" + + "github.com/hashicorp/nomad/client/allocrunner/interfaces" + "github.com/hashicorp/nomad/client/consul" + consulapi "github.com/hashicorp/nomad/client/consul" + "github.com/hashicorp/nomad/helper" + "github.com/hashicorp/nomad/helper/testlog" + "github.com/hashicorp/nomad/helper/uuid" + "github.com/hashicorp/nomad/nomad/mock" + "github.com/hashicorp/nomad/nomad/structs" + "github.com/hashicorp/nomad/testutil" + "github.com/stretchr/testify/require" + "golang.org/x/sys/unix" +) + +var _ interfaces.TaskPrestartHook = (*sidsHook)(nil) + +func tmpDir(t *testing.T) string { + dir, err := ioutil.TempDir("", "sids-") + require.NoError(t, err) + return dir +} + +func cleanupDir(t *testing.T, dir string) { + err := os.RemoveAll(dir) + require.NoError(t, err) +} + +func sidecar(task string) (string, structs.TaskKind) { + name := structs.ConnectProxyPrefix + "-" + task + kind := structs.TaskKind(structs.ConnectProxyPrefix + ":" + task) + return name, kind +} + +func TestSIDSHook_recoverToken(t *testing.T) { + t.Parallel() + r := require.New(t) + + secrets := tmpDir(t) + defer cleanupDir(t, secrets) + + taskName, taskKind := sidecar("foo") + h := newSIDSHook(sidsHookConfig{ + task: &structs.Task{ + Name: taskName, + Kind: taskKind, + }, + logger: testlog.HCLogger(t), + }) + + expected := uuid.Generate() + err := h.writeToken(secrets, expected) + r.NoError(err) + + token, err := h.recoverToken(secrets) + r.NoError(err) + r.Equal(expected, token) +} + +func TestSIDSHook_recoverToken_empty(t *testing.T) { + t.Parallel() + r := require.New(t) + + secrets := tmpDir(t) + defer cleanupDir(t, secrets) + + taskName, taskKind := sidecar("foo") + h := newSIDSHook(sidsHookConfig{ + task: &structs.Task{ + Name: taskName, + Kind: taskKind, + }, + logger: testlog.HCLogger(t), + }) + + token, err := h.recoverToken(secrets) + r.NoError(err) + r.Empty(token) +} + +func TestSIDSHook_recoverToken_unReadable(t *testing.T) { + // This test fails when running as root because the test case for checking + // the error condition when the file is unreadable fails (root can read the + // file even though the permissions are set to 0200). + if unix.Geteuid() == 0 { + t.Skip("test only works as non-root") + } + + t.Parallel() + r := require.New(t) + + secrets := tmpDir(t) + defer cleanupDir(t, secrets) + + err := os.Chmod(secrets, 0000) + r.NoError(err) + + taskName, taskKind := sidecar("foo") + h := newSIDSHook(sidsHookConfig{ + task: &structs.Task{ + Name: taskName, + Kind: taskKind, + }, + logger: testlog.HCLogger(t), + }) + + _, err = h.recoverToken(secrets) + r.Error(err) +} + +func TestSIDSHook_writeToken(t *testing.T) { + t.Parallel() + r := require.New(t) + + secrets := tmpDir(t) + defer cleanupDir(t, secrets) + + id := uuid.Generate() + h := new(sidsHook) + err := h.writeToken(secrets, id) + r.NoError(err) + + content, err := ioutil.ReadFile(filepath.Join(secrets, sidsTokenFile)) + r.NoError(err) + r.Equal(id, string(content)) +} + +func TestSIDSHook_writeToken_unWritable(t *testing.T) { + // This test fails when running as root because the test case for checking + // the error condition when the file is unreadable fails (root can read the + // file even though the permissions are set to 0200). + if unix.Geteuid() == 0 { + t.Skip("test only works as non-root") + } + + t.Parallel() + r := require.New(t) + + secrets := tmpDir(t) + defer cleanupDir(t, secrets) + + err := os.Chmod(secrets, 0000) + r.NoError(err) + + id := uuid.Generate() + h := new(sidsHook) + err = h.writeToken(secrets, id) + r.Error(err) +} + +func Test_SIDSHook_writeToken_nonExistent(t *testing.T) { + t.Parallel() + r := require.New(t) + + base := tmpDir(t) + defer cleanupDir(t, base) + secrets := filepath.Join(base, "does/not/exist") + + id := uuid.Generate() + h := new(sidsHook) + err := h.writeToken(secrets, id) + r.Error(err) +} + +func TestSIDSHook_deriveSIToken(t *testing.T) { + t.Parallel() + r := require.New(t) + + taskName, taskKind := sidecar("task1") + h := newSIDSHook(sidsHookConfig{ + alloc: &structs.Allocation{ID: "a1"}, + task: &structs.Task{ + Name: taskName, + Kind: taskKind, + }, + logger: testlog.HCLogger(t), + sidsClient: consul.NewMockServiceIdentitiesClient(), + }) + + ctx := context.Background() + token, err := h.deriveSIToken(ctx) + r.NoError(err) + r.True(helper.IsUUID(token), "token: %q", token) +} + +func TestSIDSHook_deriveSIToken_timeout(t *testing.T) { + t.Parallel() + r := require.New(t) + + siClient := consul.NewMockServiceIdentitiesClient() + siClient.DeriveTokenFn = func(allocation *structs.Allocation, strings []string) (m map[string]string, err error) { + select { + // block forever, hopefully triggering a timeout in the caller + } + } + + taskName, taskKind := sidecar("task1") + h := newSIDSHook(sidsHookConfig{ + alloc: &structs.Allocation{ID: "a1"}, + task: &structs.Task{ + Name: taskName, + Kind: taskKind, + }, + logger: testlog.HCLogger(t), + sidsClient: siClient, + }) + + // set the timeout to a really small value for testing + h.derivationTimeout = time.Duration(1 * time.Millisecond) + + ctx := context.Background() + _, err := h.deriveSIToken(ctx) + r.EqualError(err, "context deadline exceeded") +} + +func TestSIDSHook_computeBackoff(t *testing.T) { + t.Parallel() + + try := func(i int, exp time.Duration) { + result := computeBackoff(i) + require.Equal(t, exp, result) + } + + try(0, time.Duration(0)) + try(1, 100*time.Millisecond) + try(2, 10*time.Second) + try(3, 15*time.Second) + try(4, 20*time.Second) + try(5, 25*time.Second) +} + +func TestSIDSHook_backoff(t *testing.T) { + t.Parallel() + r := require.New(t) + + ctx := context.Background() + stop := !backoff(ctx, 0) + r.False(stop) +} + +func TestSIDSHook_backoffKilled(t *testing.T) { + t.Parallel() + r := require.New(t) + + ctx, cancel := context.WithTimeout(context.Background(), 1) + defer cancel() + + stop := !backoff(ctx, 1000) + r.True(stop) +} + +func TestTaskRunner_DeriveSIToken_UnWritableTokenFile(t *testing.T) { + // Normally this test would live in test_runner_test.go, but since it requires + // root and the check for root doesn't like Windows, we put this file in here + // for now. + + // This test fails when running as root because the test case for checking + // the error condition when the file is unreadable fails (root can read the + // file even though the permissions are set to 0200). + if unix.Geteuid() == 0 { + t.Skip("test only works as non-root") + } + + t.Parallel() + r := require.New(t) + + alloc := mock.BatchConnectAlloc() + task := alloc.Job.TaskGroups[0].Tasks[0] + task.Config = map[string]interface{}{ + "run_for": "0s", + } + + trConfig, cleanup := testTaskRunnerConfig(t, alloc, task.Name) + defer cleanup() + + // make the si_token file un-writable, triggering a failure after a + // successful token derivation + secrets := tmpDir(t) + defer cleanupDir(t, secrets) + trConfig.TaskDir.SecretsDir = secrets + err := ioutil.WriteFile(filepath.Join(secrets, sidsTokenFile), nil, 0400) + r.NoError(err) + + // set a consul token for the nomad client, which is what triggers the + // SIDS hook to be applied + trConfig.ClientConfig.ConsulConfig.Token = uuid.Generate() + + // derive token works just fine + deriveFn := func(*structs.Allocation, []string) (map[string]string, error) { + return map[string]string{task.Name: uuid.Generate()}, nil + } + siClient := trConfig.ConsulSI.(*consulapi.MockServiceIdentitiesClient) + siClient.DeriveTokenFn = deriveFn + + // start the task runner + tr, err := NewTaskRunner(trConfig) + r.NoError(err) + defer tr.Kill(context.Background(), structs.NewTaskEvent("cleanup")) + useMockEnvoyBootstrapHook(tr) // mock the envoy bootstrap + + go tr.Run() + + // wait for task runner to finish running + select { + case <-tr.WaitCh(): + case <-time.After(time.Duration(testutil.TestMultiplier()*15) * time.Second): + r.Fail("timed out waiting for task runner") + } + + // assert task exited un-successfully + finalState := tr.TaskState() + r.Equal(structs.TaskStateDead, finalState.State) + r.True(finalState.Failed) // should have failed to write SI token + r.Contains(finalState.Events[2].DisplayMessage, "failed to write SI token") + + // assert the token is *not* on disk, as secrets dir was un-writable + tokenPath := filepath.Join(trConfig.TaskDir.SecretsDir, sidsTokenFile) + token, err := ioutil.ReadFile(tokenPath) + r.NoError(err) + r.Empty(token) +} diff --git a/client/allocrunner/taskrunner/task_runner.go b/client/allocrunner/taskrunner/task_runner.go index a4cf6b37ad0..297ac431176 100644 --- a/client/allocrunner/taskrunner/task_runner.go +++ b/client/allocrunner/taskrunner/task_runner.go @@ -50,7 +50,7 @@ const ( // giving up and potentially leaking resources. killFailureLimit = 5 - // triggerUpdatechCap is the capacity for the triggerUpdateCh used for + // triggerUpdateChCap is the capacity for the triggerUpdateCh used for // triggering updates. It should be exactly 1 as even if multiple // updates have come in since the last one was handled, we only need to // handle the last one. @@ -158,6 +158,10 @@ type TaskRunner struct { // registering services and checks consulClient consul.ConsulServiceAPI + // sidsClient is the client used by the service identity hook for managing + // service identity tokens + siClient consul.ServiceIdentityAPI + // vaultClient is the client to use to derive and renew Vault tokens vaultClient vaultclient.VaultClient @@ -210,11 +214,16 @@ type TaskRunner struct { type Config struct { Alloc *structs.Allocation ClientConfig *config.Config - Consul consul.ConsulServiceAPI Task *structs.Task TaskDir *allocdir.TaskDir Logger log.Logger + // Consul is the client to use for managing Consul service registrations + Consul consul.ConsulServiceAPI + + // ConsulSI is the client to use for managing Consul SI tokens + ConsulSI consul.ServiceIdentityAPI + // Vault is the client to use to derive and renew Vault tokens Vault vaultclient.VaultClient @@ -271,6 +280,7 @@ func NewTaskRunner(config *Config) (*TaskRunner, error) { taskLeader: config.Task.Leader, envBuilder: envBuilder, consulClient: config.Consul, + siClient: config.ConsulSI, vaultClient: config.Vault, state: tstate, localState: state.NewLocalState(), @@ -294,31 +304,15 @@ func NewTaskRunner(config *Config) (*TaskRunner, error) { // Pull out the task's resources ares := tr.alloc.AllocatedResources - if ares != nil { - tres, ok := ares.Tasks[tr.taskName] - if !ok { - return nil, fmt.Errorf("no task resources found on allocation") - } - tr.taskResources = tres - } else { - // COMPAT(0.10): Upgrade from old resources to new resources - // Grab the old task resources - oldTr, ok := tr.alloc.TaskResources[tr.taskName] - if !ok { - return nil, fmt.Errorf("no task resources found on allocation") - } + if ares == nil { + return nil, fmt.Errorf("no task resources found on allocation") + } - // Convert the old to new - tr.taskResources = &structs.AllocatedTaskResources{ - Cpu: structs.AllocatedCpuResources{ - CpuShares: int64(oldTr.CPU), - }, - Memory: structs.AllocatedMemoryResources{ - MemoryMB: int64(oldTr.MemoryMB), - }, - Networks: oldTr.Networks, - } + tres, ok := ares.Tasks[tr.taskName] + if !ok { + return nil, fmt.Errorf("no task resources found on allocation") } + tr.taskResources = tres // Build the restart tracker. tg := tr.alloc.Job.LookupTaskGroup(tr.alloc.TaskGroup) @@ -1286,15 +1280,9 @@ func (tr *TaskRunner) UpdateStats(ru *cstructs.TaskResourceUsage) { func (tr *TaskRunner) setGaugeForMemory(ru *cstructs.TaskResourceUsage) { alloc := tr.Alloc() var allocatedMem float32 - if alloc.AllocatedResources != nil { - if taskRes := alloc.AllocatedResources.Tasks[tr.taskName]; taskRes != nil { - // Convert to bytes to match other memory metrics - allocatedMem = float32(taskRes.Memory.MemoryMB) * 1024 * 1024 - } - } else if taskRes := alloc.TaskResources[tr.taskName]; taskRes != nil { - // COMPAT(0.11) Remove in 0.11 when TaskResources is removed - allocatedMem = float32(taskRes.MemoryMB) * 1024 * 1024 - + if taskRes := alloc.AllocatedResources.Tasks[tr.taskName]; taskRes != nil { + // Convert to bytes to match other memory metrics + allocatedMem = float32(taskRes.Memory.MemoryMB) * 1024 * 1024 } if !tr.clientConfig.DisableTaggedMetrics { @@ -1334,6 +1322,12 @@ func (tr *TaskRunner) setGaugeForMemory(ru *cstructs.TaskResourceUsage) { //TODO Remove Backwardscompat or use tr.Alloc()? func (tr *TaskRunner) setGaugeForCPU(ru *cstructs.TaskResourceUsage) { + alloc := tr.Alloc() + var allocatedCPU float32 + if taskRes := alloc.AllocatedResources.Tasks[tr.taskName]; taskRes != nil { + allocatedCPU = float32(taskRes.Cpu.CpuShares) + } + if !tr.clientConfig.DisableTaggedMetrics { metrics.SetGaugeWithLabels([]string{"client", "allocs", "cpu", "total_percent"}, float32(ru.ResourceUsage.CpuStats.Percent), tr.baseLabels) @@ -1347,15 +1341,22 @@ func (tr *TaskRunner) setGaugeForCPU(ru *cstructs.TaskResourceUsage) { float32(ru.ResourceUsage.CpuStats.ThrottledPeriods), tr.baseLabels) metrics.SetGaugeWithLabels([]string{"client", "allocs", "cpu", "total_ticks"}, float32(ru.ResourceUsage.CpuStats.TotalTicks), tr.baseLabels) + if allocatedCPU > 0 { + metrics.SetGaugeWithLabels([]string{"client", "allocs", "cpu", "allocated"}, + allocatedCPU, tr.baseLabels) + } } if tr.clientConfig.BackwardsCompatibleMetrics { - metrics.SetGauge([]string{"client", "allocs", tr.alloc.Job.Name, tr.alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "total_percent"}, float32(ru.ResourceUsage.CpuStats.Percent)) - metrics.SetGauge([]string{"client", "allocs", tr.alloc.Job.Name, tr.alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "system"}, float32(ru.ResourceUsage.CpuStats.SystemMode)) - metrics.SetGauge([]string{"client", "allocs", tr.alloc.Job.Name, tr.alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "user"}, float32(ru.ResourceUsage.CpuStats.UserMode)) - metrics.SetGauge([]string{"client", "allocs", tr.alloc.Job.Name, tr.alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "throttled_time"}, float32(ru.ResourceUsage.CpuStats.ThrottledTime)) - metrics.SetGauge([]string{"client", "allocs", tr.alloc.Job.Name, tr.alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "throttled_periods"}, float32(ru.ResourceUsage.CpuStats.ThrottledPeriods)) - metrics.SetGauge([]string{"client", "allocs", tr.alloc.Job.Name, tr.alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "total_ticks"}, float32(ru.ResourceUsage.CpuStats.TotalTicks)) + metrics.SetGauge([]string{"client", "allocs", alloc.Job.Name, alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "total_percent"}, float32(ru.ResourceUsage.CpuStats.Percent)) + metrics.SetGauge([]string{"client", "allocs", alloc.Job.Name, alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "system"}, float32(ru.ResourceUsage.CpuStats.SystemMode)) + metrics.SetGauge([]string{"client", "allocs", alloc.Job.Name, alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "user"}, float32(ru.ResourceUsage.CpuStats.UserMode)) + metrics.SetGauge([]string{"client", "allocs", alloc.Job.Name, alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "throttled_time"}, float32(ru.ResourceUsage.CpuStats.ThrottledTime)) + metrics.SetGauge([]string{"client", "allocs", alloc.Job.Name, alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "throttled_periods"}, float32(ru.ResourceUsage.CpuStats.ThrottledPeriods)) + metrics.SetGauge([]string{"client", "allocs", alloc.Job.Name, alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "total_ticks"}, float32(ru.ResourceUsage.CpuStats.TotalTicks)) + if allocatedCPU > 0 { + metrics.SetGauge([]string{"client", "allocs", alloc.Job.Name, alloc.TaskGroup, tr.allocID, tr.taskName, "cpu", "allocated"}, allocatedCPU) + } } } @@ -1368,10 +1369,14 @@ func (tr *TaskRunner) emitStats(ru *cstructs.TaskResourceUsage) { if ru.ResourceUsage.MemoryStats != nil { tr.setGaugeForMemory(ru) + } else { + tr.logger.Debug("Skipping memory stats for allocation", "reason", "MemoryStats is nil") } if ru.ResourceUsage.CpuStats != nil { tr.setGaugeForCPU(ru) + } else { + tr.logger.Debug("Skipping cpu stats for allocation", "reason", "CpuStats is nil") } } diff --git a/client/allocrunner/taskrunner/task_runner_hooks.go b/client/allocrunner/taskrunner/task_runner_hooks.go index 25d1b59bccd..549b8316ebf 100644 --- a/client/allocrunner/taskrunner/task_runner_hooks.go +++ b/client/allocrunner/taskrunner/task_runner_hooks.go @@ -6,6 +6,7 @@ import ( "sync" "time" + "github.com/LK4D4/joincontext" multierror "github.com/hashicorp/go-multierror" "github.com/hashicorp/nomad/client/allocrunner/interfaces" "github.com/hashicorp/nomad/client/allocrunner/taskrunner/state" @@ -44,7 +45,7 @@ func (h *hookResources) getMounts() []*drivers.MountConfig { return h.Mounts } -// initHooks intializes the tasks hooks. +// initHooks initializes the tasks hooks. func (tr *TaskRunner) initHooks() { hookLogger := tr.logger.Named("task_hook") task := tr.Task() @@ -60,13 +61,12 @@ func (tr *TaskRunner) initHooks() { tr.runnerHooks = []interfaces.TaskHook{ newValidateHook(tr.clientConfig, hookLogger), newTaskDirHook(tr, hookLogger), - newLogMonHook(tr.logmonHookConfig, hookLogger), + newLogMonHook(tr, hookLogger), newDispatchHook(alloc, hookLogger), newVolumeHook(tr, hookLogger), newArtifactHook(tr, hookLogger), newStatsHook(tr, tr.clientConfig.StatsCollectionInterval, hookLogger), newDeviceHook(tr.devicemanager, hookLogger), - newEnvoyBootstrapHook(alloc, tr.clientConfig.ConsulConfig.Addr, hookLogger), } // If Vault is enabled, add the hook @@ -95,7 +95,7 @@ func (tr *TaskRunner) initHooks() { })) } - // If there are any services, add the hook + // If there are any services, add the service hook if len(task.Services) != 0 { tr.runnerHooks = append(tr.runnerHooks, newServiceHook(serviceHookConfig{ alloc: tr.Alloc(), @@ -106,6 +106,29 @@ func (tr *TaskRunner) initHooks() { })) } + // If this is a Connect sidecar proxy (or a Connect Native) service, + // add the sidsHook for requesting a Service Identity token (if ACLs). + if task.UsesConnect() { + // Enable the Service Identity hook only if the Nomad client is configured + // with a consul token, indicating that Consul ACLs are enabled + if tr.clientConfig.ConsulConfig.Token != "" { + tr.runnerHooks = append(tr.runnerHooks, newSIDSHook(sidsHookConfig{ + alloc: tr.Alloc(), + task: tr.Task(), + sidsClient: tr.siClient, + lifecycle: tr, + logger: hookLogger, + })) + } + + // envoy bootstrap must execute after sidsHook maybe sets SI token + tr.runnerHooks = append(tr.runnerHooks, newEnvoyBootstrapHook(&envoyBootstrapHookConfig{ + alloc: alloc, + consulHTTPAddr: tr.clientConfig.ConsulConfig.Addr, + logger: hookLogger, + })) + } + // If there are any script checks, add the hook scriptCheckHook := newScriptCheckHook(scriptCheckHookConfig{ alloc: tr.Alloc(), @@ -130,7 +153,7 @@ func (tr *TaskRunner) emitHookError(err error, hookName string) { // prestart is used to run the runners prestart hooks. func (tr *TaskRunner) prestart() error { - // Determine if the allocation is terminaland we should avoid running + // Determine if the allocation is terminal and we should avoid running // prestart hooks. alloc := tr.Alloc() if alloc.TerminalStatus() { @@ -192,8 +215,11 @@ func (tr *TaskRunner) prestart() error { } // Run the prestart hook + // use a joint context to allow any blocking pre-start hooks + // to be canceled by either killCtx or shutdownCtx + joinedCtx, _ := joincontext.Join(tr.killCtx, tr.shutdownCtx) var resp interfaces.TaskPrestartResponse - if err := pre.Prestart(tr.killCtx, &req, &resp); err != nil { + if err := pre.Prestart(joinedCtx, &req, &resp); err != nil { tr.emitHookError(err, name) return structs.WrapRecoverable(fmt.Sprintf("prestart hook %q failed: %v", name, err), err) } diff --git a/client/allocrunner/taskrunner/task_runner_test.go b/client/allocrunner/taskrunner/task_runner_test.go index 8a6ab8cf50c..9d1fc71acc2 100644 --- a/client/allocrunner/taskrunner/task_runner_test.go +++ b/client/allocrunner/taskrunner/task_runner_test.go @@ -2,6 +2,7 @@ package taskrunner import ( "context" + "errors" "fmt" "io/ioutil" "net/http" @@ -27,6 +28,7 @@ import ( mockdriver "github.com/hashicorp/nomad/drivers/mock" "github.com/hashicorp/nomad/drivers/rawexec" "github.com/hashicorp/nomad/helper/testlog" + "github.com/hashicorp/nomad/helper/uuid" "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/plugins/device" @@ -97,10 +99,11 @@ func testTaskRunnerConfig(t *testing.T, alloc *structs.Allocation, taskName stri conf := &Config{ Alloc: alloc, ClientConfig: clientConf, - Consul: consulapi.NewMockConsulServiceClient(t, logger), Task: thisTask, TaskDir: taskDir, Logger: clientConf.Logger, + Consul: consulapi.NewMockConsulServiceClient(t, logger), + ConsulSI: consulapi.NewMockServiceIdentitiesClient(), Vault: vaultclient.NewMockVaultClient(), StateDB: cstate.NoopDB{}, StateUpdater: NewMockTaskStateUpdater(), @@ -1080,14 +1083,222 @@ func TestTaskRunner_CheckWatcher_Restart(t *testing.T) { actualEvents[i] = string(e.Type) } require.Equal(t, actualEvents, expectedEvents) - require.Equal(t, structs.TaskStateDead, state.State) require.True(t, state.Failed, pretty.Sprint(state)) } -// TestTaskRunner_BlockForVault asserts tasks do not start until a vault token +type mockEnvoyBootstrapHook struct { + // nothing +} + +func (_ *mockEnvoyBootstrapHook) Name() string { + return "mock_envoy_bootstrap" +} + +func (_ *mockEnvoyBootstrapHook) Prestart(_ context.Context, _ *interfaces.TaskPrestartRequest, resp *interfaces.TaskPrestartResponse) error { + resp.Done = true + return nil +} + +// The envoy bootstrap hook tries to connect to consul and run the envoy +// bootstrap command, so turn it off when testing connect jobs that are not +// using envoy. +func useMockEnvoyBootstrapHook(tr *TaskRunner) { + mock := new(mockEnvoyBootstrapHook) + for i, hook := range tr.runnerHooks { + if _, ok := hook.(*envoyBootstrapHook); ok { + tr.runnerHooks[i] = mock + } + } +} + +// TestTaskRunner_BlockForSIDSToken asserts tasks do not start until a Consul +// Service Identity token is derived. +func TestTaskRunner_BlockForSIDSToken(t *testing.T) { + t.Parallel() + r := require.New(t) + + alloc := mock.BatchConnectAlloc() + task := alloc.Job.TaskGroups[0].Tasks[0] + task.Config = map[string]interface{}{ + "run_for": "0s", + } + + trConfig, cleanup := testTaskRunnerConfig(t, alloc, task.Name) + defer cleanup() + + // set a consul token on the Nomad client's consul config, because that is + // what gates the action of requesting SI token(s) + trConfig.ClientConfig.ConsulConfig.Token = uuid.Generate() + + // control when we get a Consul SI token + token := uuid.Generate() + waitCh := make(chan struct{}) + deriveFn := func(*structs.Allocation, []string) (map[string]string, error) { + <-waitCh + return map[string]string{task.Name: token}, nil + } + siClient := trConfig.ConsulSI.(*consulapi.MockServiceIdentitiesClient) + siClient.DeriveTokenFn = deriveFn + + // start the task runner + tr, err := NewTaskRunner(trConfig) + r.NoError(err) + defer tr.Kill(context.Background(), structs.NewTaskEvent("cleanup")) + useMockEnvoyBootstrapHook(tr) // mock the envoy bootstrap hook + + go tr.Run() + + // assert task runner blocks on SI token + select { + case <-tr.WaitCh(): + r.Fail("task_runner exited before si unblocked") + case <-time.After(100 * time.Millisecond): + } + + // assert task state is still pending + r.Equal(structs.TaskStatePending, tr.TaskState().State) + + // unblock service identity token + close(waitCh) + + // task runner should exit now that it has been unblocked and it is a batch + // job with a zero sleep time + select { + case <-tr.WaitCh(): + case <-time.After(15 * time.Second * time.Duration(testutil.TestMultiplier())): + r.Fail("timed out waiting for batch task to exist") + } + + // assert task exited successfully + finalState := tr.TaskState() + r.Equal(structs.TaskStateDead, finalState.State) + r.False(finalState.Failed) + + // assert the token is on disk + tokenPath := filepath.Join(trConfig.TaskDir.SecretsDir, sidsTokenFile) + data, err := ioutil.ReadFile(tokenPath) + r.NoError(err) + r.Equal(token, string(data)) +} + +func TestTaskRunner_DeriveSIToken_Retry(t *testing.T) { + t.Parallel() + r := require.New(t) + + alloc := mock.BatchConnectAlloc() + task := alloc.Job.TaskGroups[0].Tasks[0] + task.Config = map[string]interface{}{ + "run_for": "0s", + } + + trConfig, cleanup := testTaskRunnerConfig(t, alloc, task.Name) + defer cleanup() + + // set a consul token on the Nomad client's consul config, because that is + // what gates the action of requesting SI token(s) + trConfig.ClientConfig.ConsulConfig.Token = uuid.Generate() + + // control when we get a Consul SI token (recoverable failure on first call) + token := uuid.Generate() + deriveCount := 0 + deriveFn := func(*structs.Allocation, []string) (map[string]string, error) { + if deriveCount > 0 { + + return map[string]string{task.Name: token}, nil + } + deriveCount++ + return nil, structs.NewRecoverableError(errors.New("try again later"), true) + } + siClient := trConfig.ConsulSI.(*consulapi.MockServiceIdentitiesClient) + siClient.DeriveTokenFn = deriveFn + + // start the task runner + tr, err := NewTaskRunner(trConfig) + r.NoError(err) + defer tr.Kill(context.Background(), structs.NewTaskEvent("cleanup")) + useMockEnvoyBootstrapHook(tr) // mock the envoy bootstrap + go tr.Run() + + // assert task runner blocks on SI token + select { + case <-tr.WaitCh(): + case <-time.After(time.Duration(testutil.TestMultiplier()*15) * time.Second): + r.Fail("timed out waiting for task runner") + } + + // assert task exited successfully + finalState := tr.TaskState() + r.Equal(structs.TaskStateDead, finalState.State) + r.False(finalState.Failed) + + // assert the token is on disk + tokenPath := filepath.Join(trConfig.TaskDir.SecretsDir, sidsTokenFile) + data, err := ioutil.ReadFile(tokenPath) + r.NoError(err) + r.Equal(token, string(data)) +} + +// TestTaskRunner_DeriveSIToken_Unrecoverable asserts that an unrecoverable error +// from deriving a service identity token will fail a task. +func TestTaskRunner_DeriveSIToken_Unrecoverable(t *testing.T) { + t.Parallel() + r := require.New(t) + + alloc := mock.BatchConnectAlloc() + tg := alloc.Job.TaskGroups[0] + tg.RestartPolicy.Attempts = 0 + tg.RestartPolicy.Interval = 0 + tg.RestartPolicy.Delay = 0 + tg.RestartPolicy.Mode = structs.RestartPolicyModeFail + task := tg.Tasks[0] + task.Config = map[string]interface{}{ + "run_for": "0s", + } + + trConfig, cleanup := testTaskRunnerConfig(t, alloc, task.Name) + defer cleanup() + + // set a consul token on the Nomad client's consul config, because that is + // what gates the action of requesting SI token(s) + trConfig.ClientConfig.ConsulConfig.Token = uuid.Generate() + + // SI token derivation suffers a non-retryable error + siClient := trConfig.ConsulSI.(*consulapi.MockServiceIdentitiesClient) + siClient.SetDeriveTokenError(alloc.ID, []string{task.Name}, errors.New("non-recoverable")) + + tr, err := NewTaskRunner(trConfig) + r.NoError(err) + + defer tr.Kill(context.Background(), structs.NewTaskEvent("cleanup")) + useMockEnvoyBootstrapHook(tr) // mock the envoy bootstrap hook + go tr.Run() + + // Wait for the task to die + select { + case <-tr.WaitCh(): + case <-time.After(time.Duration(testutil.TestMultiplier()*15) * time.Second): + require.Fail(t, "timed out waiting for task runner to fail") + } + + // assert we have died and failed + finalState := tr.TaskState() + r.Equal(structs.TaskStateDead, finalState.State) + r.True(finalState.Failed) + r.Equal(5, len(finalState.Events)) + /* + + event: Task received by client + + event: Building Task Directory + + event: consul: failed to derive SI token: non-recoverable + + event: consul_sids: context canceled + + event: Policy allows no restarts + */ + r.Equal("true", finalState.Events[2].Details["fails_task"]) +} + +// TestTaskRunner_BlockForVaultToken asserts tasks do not start until a vault token // is derived. -func TestTaskRunner_BlockForVault(t *testing.T) { +func TestTaskRunner_BlockForVaultToken(t *testing.T) { t.Parallel() alloc := mock.BatchAlloc() @@ -1742,6 +1953,69 @@ func TestTaskRunner_Template_Artifact(t *testing.T) { require.NoErrorf(t, err, "%v not rendered", f2) } +// TestTaskRunner_Template_BlockingPreStart asserts that a template +// that fails to render in PreStart can gracefully be shutdown by +// either killCtx or shutdownCtx +func TestTaskRunner_Template_BlockingPreStart(t *testing.T) { + t.Parallel() + + alloc := mock.BatchAlloc() + task := alloc.Job.TaskGroups[0].Tasks[0] + task.Templates = []*structs.Template{ + { + EmbeddedTmpl: `{{ with secret "foo/secret" }}{{ .Data.certificate }}{{ end }}`, + DestPath: "local/test", + ChangeMode: structs.TemplateChangeModeNoop, + }, + } + + task.Vault = &structs.Vault{Policies: []string{"default"}} + + conf, cleanup := testTaskRunnerConfig(t, alloc, task.Name) + defer cleanup() + + tr, err := NewTaskRunner(conf) + require.NoError(t, err) + go tr.Run() + defer tr.Shutdown() + + testutil.WaitForResult(func() (bool, error) { + ts := tr.TaskState() + + if len(ts.Events) == 0 { + return false, fmt.Errorf("no events yet") + } + + for _, e := range ts.Events { + if e.Type == "Template" && strings.Contains(e.DisplayMessage, "vault.read(foo/secret)") { + return true, nil + } + } + + return false, fmt.Errorf("no missing vault secret template event yet: %#v", ts.Events) + + }, func(err error) { + require.NoError(t, err) + }) + + shutdown := func() <-chan bool { + finished := make(chan bool) + go func() { + tr.Shutdown() + finished <- true + }() + + return finished + } + + select { + case <-shutdown(): + // it shut down like it should have + case <-time.After(10 * time.Second): + require.Fail(t, "timeout shutting down task") + } +} + // TestTaskRunner_Template_NewVaultToken asserts that a new vault token is // created when rendering template and that it is revoked on alloc completion func TestTaskRunner_Template_NewVaultToken(t *testing.T) { diff --git a/client/allocrunner/taskrunner/volume_hook.go b/client/allocrunner/taskrunner/volume_hook.go index b2c0ab3e701..1e0935aeab6 100644 --- a/client/allocrunner/taskrunner/volume_hook.go +++ b/client/allocrunner/taskrunner/volume_hook.go @@ -33,20 +33,14 @@ func (*volumeHook) Name() string { func validateHostVolumes(requestedByAlias map[string]*structs.VolumeRequest, clientVolumesByName map[string]*structs.ClientHostVolumeConfig) error { var result error - for n, req := range requestedByAlias { + for _, req := range requestedByAlias { if req.Type != structs.VolumeTypeHost { continue } - cfg, err := structs.ParseHostVolumeConfig(req.Config) - if err != nil { - result = multierror.Append(result, fmt.Errorf("failed to parse config for %s: %v", n, err)) - continue - } - - _, ok := clientVolumesByName[cfg.Source] + _, ok := clientVolumesByName[req.Source] if !ok { - result = multierror.Append(result, fmt.Errorf("missing %s", cfg.Source)) + result = multierror.Append(result, fmt.Errorf("missing %s", req.Source)) } } @@ -65,16 +59,11 @@ func (h *volumeHook) hostVolumeMountConfigurations(taskMounts []*structs.VolumeM return nil, fmt.Errorf("No group volume declaration found named: %s", m.Volume) } - cfg, err := structs.ParseHostVolumeConfig(req.Config) - if err != nil { - return nil, fmt.Errorf("failed to parse config for %s: %v", m.Volume, err) - } - - hostVolume, ok := clientVolumesByName[cfg.Source] + hostVolume, ok := clientVolumesByName[req.Source] if !ok { // Should never happen, but unless the client volumes were mutated during // the execution of this hook. - return nil, fmt.Errorf("No host volume named: %s", cfg.Source) + return nil, fmt.Errorf("No host volume named: %s", req.Source) } mcfg := &drivers.MountConfig{ diff --git a/client/allocrunner/testing.go b/client/allocrunner/testing.go index 75806644bb8..02751687bb4 100644 --- a/client/allocrunner/testing.go +++ b/client/allocrunner/testing.go @@ -60,6 +60,7 @@ func testAllocRunnerConfig(t *testing.T, alloc *structs.Allocation) (*Config, fu ClientConfig: clientConf, StateDB: state.NoopDB{}, Consul: consul.NewMockConsulServiceClient(t, clientConf.Logger), + ConsulSI: consul.NewMockServiceIdentitiesClient(), Vault: vaultclient.NewMockVaultClient(), StateUpdater: &MockStateUpdater{}, PrevAllocWatcher: allocwatcher.NoopPrevAlloc{}, diff --git a/client/allocwatcher/alloc_watcher_unix_test.go b/client/allocwatcher/alloc_watcher_unix_test.go index 21f95cdf9bd..aa75ab8eaf0 100644 --- a/client/allocwatcher/alloc_watcher_unix_test.go +++ b/client/allocwatcher/alloc_watcher_unix_test.go @@ -76,6 +76,10 @@ func TestPrevAlloc_StreamAllocDir_Ok(t *testing.T) { tw := tar.NewWriter(buf) walkFn := func(path string, fileInfo os.FileInfo, err error) error { + // filepath.Walk passes in an error + if err != nil { + return fmt.Errorf("error from filepath.Walk(): %s", err) + } // Include the path of the file name relative to the alloc dir // so that we can put the files in the right directories link := "" diff --git a/client/client.go b/client/client.go index 76990a40494..4039e79562e 100644 --- a/client/client.go +++ b/client/client.go @@ -1,7 +1,6 @@ package client import ( - "errors" "fmt" "io/ioutil" "net" @@ -46,6 +45,7 @@ import ( "github.com/hashicorp/nomad/plugins/device" "github.com/hashicorp/nomad/plugins/drivers" vaultapi "github.com/hashicorp/vault/api" + "github.com/pkg/errors" "github.com/shirou/gopsutil/host" ) @@ -95,7 +95,8 @@ const ( // defaultConnectSidecarImage is the image set in the node meta by default // to be used by Consul Connect sidecar tasks - defaultConnectSidecarImage = "envoyproxy/envoy:v1.11.1" + // Update sidecar_task.html when updating this. + defaultConnectSidecarImage = "envoyproxy/envoy:v1.11.2@sha256:a7769160c9c1a55bb8d07a3b71ce5d64f72b1f665f10d81aa1581bc3cf850d09" // defaultConnectLogLevel is the log level set in the node meta by default // to be used by Consul Connect sidecar tasks @@ -162,7 +163,7 @@ type Client struct { configCopy *config.Config configLock sync.RWMutex - logger hclog.Logger + logger hclog.InterceptLogger rpcLogger hclog.Logger connPool *pool.ConnPool @@ -235,6 +236,10 @@ type Client struct { // Shutdown() blocks on Wait() after closing shutdownCh. shutdownGroup group + // tokensClient is Nomad Client's custom Consul client for requesting Consul + // Service Identity tokens through Nomad Server. + tokensClient consulApi.ServiceIdentityAPI + // vaultClient is used to interact with Vault for token and secret renewals vaultClient vaultclient.VaultClient @@ -303,7 +308,7 @@ func NewClient(cfg *config.Config, consulCatalog consul.CatalogAPI, consulServic } // Create the logger - logger := cfg.Logger.ResetNamed("client") + logger := cfg.Logger.ResetNamedIntercept("client") // Create the client c := &Client{ @@ -444,6 +449,10 @@ func NewClient(cfg *config.Config, consulCatalog consul.CatalogAPI, consulServic } } + if err := c.setupConsulTokenClient(); err != nil { + return nil, errors.Wrap(err, "failed to setup consul tokens client") + } + // Setup the vault client for token and secret renewals if err := c.setupVaultClient(); err != nil { return nil, fmt.Errorf("failed to setup vault client: %v", err) @@ -736,6 +745,16 @@ func (c *Client) Stats() map[string]map[string]string { return stats } +// GetAlloc returns an allocation or an error. +func (c *Client) GetAlloc(allocID string) (*structs.Allocation, error) { + ar, err := c.getAllocRunner(allocID) + if err != nil { + return nil, err + } + + return ar.Alloc(), nil +} + // SignalAllocation sends a signal to the tasks within an allocation. // If the provided task is empty, then every allocation will be signalled. // If a task is provided, then only an exactly matching task will be signalled. @@ -783,6 +802,8 @@ func (c *Client) Node() *structs.Node { return c.configCopy.Node } +// getAllocRunner returns an AllocRunner or an UnknownAllocation error if the +// client has no runner for the given alloc ID. func (c *Client) getAllocRunner(allocID string) (AllocRunner, error) { c.allocLock.RLock() defer c.allocLock.RUnlock() @@ -887,7 +908,6 @@ func (c *Client) GetAllocFS(allocID string) (allocdir.AllocDirFS, error) { if err != nil { return nil, err } - return ar.GetAllocDir(), nil } @@ -1035,6 +1055,7 @@ func (c *Client) restoreState() error { StateUpdater: c, DeviceStatsReporter: c, Consul: c.consulService, + ConsulSI: c.tokensClient, Vault: c.vaultClient, PrevAllocWatcher: prevAllocWatcher, PrevAllocMigrator: prevAllocMigrator, @@ -1284,11 +1305,13 @@ func (c *Client) setupNode() error { if node.Name == "" { node.Name, _ = os.Hostname() } - // TODO(dani): Fingerprint these to handle volumes that don't exist/have bad perms. if node.HostVolumes == nil { if l := len(c.config.HostVolumes); l != 0 { node.HostVolumes = make(map[string]*structs.ClientHostVolumeConfig, l) for k, v := range c.config.HostVolumes { + if _, err := os.Stat(v.Path); err != nil { + return fmt.Errorf("failed to validate volume %s, err: %v", v.Name, err) + } node.HostVolumes[k] = v.Copy() } } @@ -1893,6 +1916,7 @@ func (c *Client) watchAllocations(updates chan *allocUpdates) { QueryOptions: structs.QueryOptions{ Region: c.Region(), AllowStale: true, + AuthToken: c.secretNodeID(), }, } var allocsResp structs.AllocsGetResponse @@ -1997,6 +2021,10 @@ OUTER: // Ensure that we received all the allocations we wanted pulledAllocs = make(map[string]*structs.Allocation, len(allocsResp.Allocs)) for _, alloc := range allocsResp.Allocs { + + // handle an old Server + alloc.Canonicalize() + pulledAllocs[alloc.ID] = alloc } @@ -2293,6 +2321,7 @@ func (c *Client) addAlloc(alloc *structs.Allocation, migrateToken string) error ClientConfig: c.configCopy, StateDB: c.stateDB, Consul: c.consulService, + ConsulSI: c.tokensClient, Vault: c.vaultClient, StateUpdater: c, DeviceStatsReporter: c, @@ -2315,6 +2344,14 @@ func (c *Client) addAlloc(alloc *structs.Allocation, migrateToken string) error return nil } +// setupConsulTokenClient configures a tokenClient for managing consul service +// identity tokens. +func (c *Client) setupConsulTokenClient() error { + tc := consulApi.NewIdentitiesClient(c.logger, c.deriveSIToken) + c.tokensClient = tc + return nil +} + // setupVaultClient creates an object to periodically renew tokens and secrets // with vault. func (c *Client) setupVaultClient() error { @@ -2340,33 +2377,10 @@ func (c *Client) setupVaultClient() error { // client and returns a map of unwrapped tokens, indexed by the task name. func (c *Client) deriveToken(alloc *structs.Allocation, taskNames []string, vclient *vaultapi.Client) (map[string]string, error) { vlogger := c.logger.Named("vault") - if alloc == nil { - return nil, fmt.Errorf("nil allocation") - } - if taskNames == nil || len(taskNames) == 0 { - return nil, fmt.Errorf("missing task names") - } - - group := alloc.Job.LookupTaskGroup(alloc.TaskGroup) - if group == nil { - return nil, fmt.Errorf("group name in allocation is not present in job") - } - - verifiedTasks := []string{} - // Check if the given task names actually exist in the allocation - for _, taskName := range taskNames { - found := false - for _, task := range group.Tasks { - if task.Name == taskName { - found = true - } - } - if !found { - vlogger.Error("task not found in the allocation", "task_name", taskName) - return nil, fmt.Errorf("task %q not found in the allocation", taskName) - } - verifiedTasks = append(verifiedTasks, taskName) + verifiedTasks, err := verifiedTasks(vlogger, alloc, taskNames) + if err != nil { + return nil, err } // DeriveVaultToken of nomad server can take in a set of tasks and @@ -2441,6 +2455,90 @@ func (c *Client) deriveToken(alloc *structs.Allocation, taskNames []string, vcli return unwrappedTokens, nil } +// deriveSIToken takes an allocation and a set of tasks and derives Consul +// Service Identity tokens for each of the tasks by requesting them from the +// Nomad Server. +func (c *Client) deriveSIToken(alloc *structs.Allocation, taskNames []string) (map[string]string, error) { + tasks, err := verifiedTasks(c.logger, alloc, taskNames) + if err != nil { + return nil, err + } + + req := &structs.DeriveSITokenRequest{ + NodeID: c.NodeID(), + SecretID: c.secretNodeID(), + AllocID: alloc.ID, + Tasks: tasks, + QueryOptions: structs.QueryOptions{Region: c.Region()}, + } + + // Nicely ask Nomad Server for the tokens. + var resp structs.DeriveSITokenResponse + if err := c.RPC("Node.DeriveSIToken", &req, &resp); err != nil { + c.logger.Error("error making derive token RPC", "error", err) + return nil, fmt.Errorf("DeriveSIToken RPC failed: %v", err) + } + if err := resp.Error; err != nil { + c.logger.Error("error deriving SI tokens", "error", err) + return nil, structs.NewWrappedServerError(err) + } + if len(resp.Tokens) == 0 { + c.logger.Error("error deriving SI tokens", "error", "invalid_response") + return nil, fmt.Errorf("failed to derive SI tokens: invalid response") + } + + // NOTE: Unlike with the Vault integration, Nomad Server replies with the + // actual Consul SI token (.SecretID), because otherwise each Nomad + // Client would need to be blessed with 'acl:write' permissions to read the + // secret value given the .AccessorID, which does not fit well in the Consul + // security model. + // + // https://www.consul.io/api/acl/tokens.html#read-a-token + // https://www.consul.io/docs/internals/security.html + + m := helper.CopyMapStringString(resp.Tokens) + return m, nil +} + +// verifiedTasks asserts each task in taskNames actually exists in the given alloc, +// otherwise an error is returned. +func verifiedTasks(logger hclog.Logger, alloc *structs.Allocation, taskNames []string) ([]string, error) { + if alloc == nil { + return nil, fmt.Errorf("nil allocation") + } + + if len(taskNames) == 0 { + return nil, fmt.Errorf("missing task names") + } + + group := alloc.Job.LookupTaskGroup(alloc.TaskGroup) + if group == nil { + return nil, fmt.Errorf("group name in allocation is not present in job") + } + + verifiedTasks := make([]string, 0, len(taskNames)) + + // confirm the requested task names actually exist in the allocation + for _, taskName := range taskNames { + if !taskIsPresent(taskName, group.Tasks) { + logger.Error("task not found in the allocation", "task_name", taskName) + return nil, fmt.Errorf("task %q not found in allocation", taskName) + } + verifiedTasks = append(verifiedTasks, taskName) + } + + return verifiedTasks, nil +} + +func taskIsPresent(taskName string, tasks []*structs.Task) bool { + for _, task := range tasks { + if task.Name == taskName { + return true + } + } + return false +} + // triggerDiscovery causes a Consul discovery to begin (if one hasn't already) func (c *Client) triggerDiscovery() { select { @@ -2594,12 +2692,11 @@ func (c *Client) emitStats() { next.Reset(c.config.StatsCollectionInterval) if err != nil { c.logger.Warn("error fetching host resource usage stats", "error", err) - continue - } - - // Publish Node metrics if operator has opted in - if c.config.PublishNodeMetrics { - c.emitHostStats() + } else { + // Publish Node metrics if operator has opted in + if c.config.PublishNodeMetrics { + c.emitHostStats() + } } c.emitClientMetrics() diff --git a/client/client_stats_endpoint_test.go b/client/client_stats_endpoint_test.go index 2349d26ad00..9802d84e618 100644 --- a/client/client_stats_endpoint_test.go +++ b/client/client_stats_endpoint_test.go @@ -28,14 +28,15 @@ func TestClientStats_Stats(t *testing.T) { func TestClientStats_Stats_ACL(t *testing.T) { t.Parallel() require := require.New(t) - server, addr, root := testACLServer(t, nil) - defer server.Shutdown() - client, cleanup := TestClient(t, func(c *config.Config) { + server, addr, root, cleanupS := testACLServer(t, nil) + defer cleanupS() + + client, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} c.ACLEnabled = true }) - defer cleanup() + defer cleanupC() // Try request without a token and expect failure { diff --git a/client/client_test.go b/client/client_test.go index f1a4c00134f..95bf51069ad 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -3,6 +3,7 @@ package client import ( "fmt" "io/ioutil" + "net" "os" "path/filepath" "runtime" @@ -18,6 +19,7 @@ import ( "github.com/hashicorp/nomad/client/state" "github.com/hashicorp/nomad/command/agent/consul" "github.com/hashicorp/nomad/helper/pluginutils/catalog" + "github.com/hashicorp/nomad/helper/pluginutils/singleton" "github.com/hashicorp/nomad/helper/testlog" "github.com/hashicorp/nomad/helper/uuid" "github.com/hashicorp/nomad/nomad" @@ -29,20 +31,18 @@ import ( "github.com/hashicorp/nomad/testutil" "github.com/stretchr/testify/assert" - hclog "github.com/hashicorp/go-hclog" cstate "github.com/hashicorp/nomad/client/state" - ctestutil "github.com/hashicorp/nomad/client/testutil" "github.com/stretchr/testify/require" ) -func testACLServer(t *testing.T, cb func(*nomad.Config)) (*nomad.Server, string, *structs.ACLToken) { - server, token := nomad.TestACLServer(t, cb) - return server, server.GetConfig().RPCAddr.String(), token +func testACLServer(t *testing.T, cb func(*nomad.Config)) (*nomad.Server, string, *structs.ACLToken, func()) { + server, token, cleanup := nomad.TestACLServer(t, cb) + return server, server.GetConfig().RPCAddr.String(), token, cleanup } -func testServer(t *testing.T, cb func(*nomad.Config)) (*nomad.Server, string) { - server := nomad.TestServer(t, cb) - return server, server.GetConfig().RPCAddr.String() +func testServer(t *testing.T, cb func(*nomad.Config)) (*nomad.Server, string, func()) { + server, cleanup := nomad.TestServer(t, cb) + return server, server.GetConfig().RPCAddr.String(), cleanup } func TestClient_StartStop(t *testing.T) { @@ -83,13 +83,14 @@ func TestClient_BaseLabels(t *testing.T) { func TestClient_RPC(t *testing.T) { t.Parallel() - s1, addr := testServer(t, nil) - defer s1.Shutdown() - c1, cleanup := TestClient(t, func(c *config.Config) { + _, addr, cleanupS1 := testServer(t, nil) + defer cleanupS1() + + c1, cleanupC1 := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} }) - defer cleanup() + defer cleanupC1() // RPC should succeed testutil.WaitForResult(func() (bool, error) { @@ -103,13 +104,14 @@ func TestClient_RPC(t *testing.T) { func TestClient_RPC_FireRetryWatchers(t *testing.T) { t.Parallel() - s1, addr := testServer(t, nil) - defer s1.Shutdown() - c1, cleanup := TestClient(t, func(c *config.Config) { + _, addr, cleanupS1 := testServer(t, nil) + defer cleanupS1() + + c1, cleanupC1 := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} }) - defer cleanup() + defer cleanupC1() watcher := c1.rpcRetryWatcher() @@ -131,13 +133,14 @@ func TestClient_RPC_FireRetryWatchers(t *testing.T) { func TestClient_RPC_Passthrough(t *testing.T) { t.Parallel() - s1, _ := testServer(t, nil) - defer s1.Shutdown() - c1, cleanup := TestClient(t, func(c *config.Config) { + s1, _, cleanupS1 := testServer(t, nil) + defer cleanupS1() + + c1, cleanupC1 := TestClient(t, func(c *config.Config) { c.RPCHandler = s1 }) - defer cleanup() + defer cleanupC1() // RPC should succeed testutil.WaitForResult(func() (bool, error) { @@ -257,7 +260,7 @@ func TestClient_MixedTLS(t *testing.T) { foocert = "../helper/tlsutil/testdata/nomad-foo.pem" fookey = "../helper/tlsutil/testdata/nomad-foo-key.pem" ) - s1, addr := testServer(t, func(c *nomad.Config) { + s1, addr, cleanupS1 := testServer(t, func(c *nomad.Config) { c.TLSConfig = &nconfig.TLSConfig{ EnableHTTP: true, EnableRPC: true, @@ -267,7 +270,7 @@ func TestClient_MixedTLS(t *testing.T) { KeyFile: fookey, } }) - defer s1.Shutdown() + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) c1, cleanup := TestClient(t, func(c *config.Config) { @@ -299,6 +302,7 @@ func TestClient_MixedTLS(t *testing.T) { // unable to communicate. func TestClient_BadTLS(t *testing.T) { t.Parallel() + const ( cafile = "../helper/tlsutil/testdata/ca.pem" foocert = "../helper/tlsutil/testdata/nomad-foo.pem" @@ -307,7 +311,7 @@ func TestClient_BadTLS(t *testing.T) { badcert = "../helper/tlsutil/testdata/nomad-bad.pem" badkey = "../helper/tlsutil/testdata/nomad-bad-key.pem" ) - s1, addr := testServer(t, func(c *nomad.Config) { + s1, addr, cleanupS1 := testServer(t, func(c *nomad.Config) { c.TLSConfig = &nconfig.TLSConfig{ EnableHTTP: true, EnableRPC: true, @@ -317,10 +321,10 @@ func TestClient_BadTLS(t *testing.T) { KeyFile: fookey, } }) - defer s1.Shutdown() + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) - c1, cleanup := TestClient(t, func(c *config.Config) { + c1, cleanupC1 := TestClient(t, func(c *config.Config) { c.Servers = []string{addr} c.TLSConfig = &nconfig.TLSConfig{ EnableHTTP: true, @@ -331,7 +335,7 @@ func TestClient_BadTLS(t *testing.T) { KeyFile: badkey, } }) - defer cleanup() + defer cleanupC1() req := structs.NodeSpecificRequest{ NodeID: c1.Node().ID, @@ -354,14 +358,15 @@ func TestClient_BadTLS(t *testing.T) { func TestClient_Register(t *testing.T) { t.Parallel() - s1, _ := testServer(t, nil) - defer s1.Shutdown() + + s1, _, cleanupS1 := testServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) - c1, cleanup := TestClient(t, func(c *config.Config) { + c1, cleanupC1 := TestClient(t, func(c *config.Config) { c.RPCHandler = s1 }) - defer cleanup() + defer cleanupC1() req := structs.NodeSpecificRequest{ NodeID: c1.Node().ID, @@ -386,16 +391,17 @@ func TestClient_Register(t *testing.T) { func TestClient_Heartbeat(t *testing.T) { t.Parallel() - s1, _ := testServer(t, func(c *nomad.Config) { + + s1, _, cleanupS1 := testServer(t, func(c *nomad.Config) { c.MinHeartbeatTTL = 50 * time.Millisecond }) - defer s1.Shutdown() + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) - c1, cleanup := TestClient(t, func(c *config.Config) { + c1, cleanupC1 := TestClient(t, func(c *config.Config) { c.RPCHandler = s1 }) - defer cleanup() + defer cleanupC1() req := structs.NodeSpecificRequest{ NodeID: c1.Node().ID, @@ -422,8 +428,9 @@ func TestClient_Heartbeat(t *testing.T) { // the server. func TestClient_UpdateAllocStatus(t *testing.T) { t.Parallel() - s1, _ := testServer(t, nil) - defer s1.Shutdown() + + s1, _, cleanupS1 := testServer(t, nil) + defer cleanupS1() _, cleanup := TestClient(t, func(c *config.Config) { c.RPCHandler = s1 @@ -447,9 +454,9 @@ func TestClient_UpdateAllocStatus(t *testing.T) { func TestClient_WatchAllocs(t *testing.T) { t.Parallel() - ctestutil.ExecCompatible(t) - s1, _ := testServer(t, nil) - defer s1.Shutdown() + + s1, _, cleanupS1 := testServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) c1, cleanup := TestClient(t, func(c *config.Config) { @@ -462,6 +469,11 @@ func TestClient_WatchAllocs(t *testing.T) { // Create mock allocations job := mock.Job() + job.TaskGroups[0].Count = 3 + job.TaskGroups[0].Tasks[0].Driver = "mock_driver" + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "10s", + } alloc1 := mock.Alloc() alloc1.JobID = job.ID alloc1.Job = job @@ -543,15 +555,15 @@ func waitTilNodeReady(client *Client, t *testing.T) { func TestClient_SaveRestoreState(t *testing.T) { t.Parallel() - s1, _ := testServer(t, nil) - defer s1.Shutdown() + s1, _, cleanupS1 := testServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) - c1, cleanup := TestClient(t, func(c *config.Config) { + c1, cleanupC1 := TestClient(t, func(c *config.Config) { c.DevMode = false c.RPCHandler = s1 }) - defer cleanup() + defer cleanupC1() // Wait until the node is ready waitTilNodeReady(c1, t) @@ -603,10 +615,14 @@ func TestClient_SaveRestoreState(t *testing.T) { // Create a new client logger := testlog.HCLogger(t) c1.config.Logger = logger - catalog := consul.NewMockCatalog(logger) + consulCatalog := consul.NewMockCatalog(logger) mockService := consulApi.NewMockConsulServiceClient(t, logger) - c2, err := NewClient(c1.config, catalog, mockService) + // ensure we use non-shutdown driver instances + c1.config.PluginLoader = catalog.TestPluginLoaderWithOptions(t, "", c1.config.Options, nil) + c1.config.PluginSingletonLoader = singleton.NewSingletonLoader(logger, c1.config.PluginLoader) + + c2, err := NewClient(c1.config, consulCatalog, mockService) if err != nil { t.Fatalf("err: %v", err) } @@ -637,110 +653,19 @@ func TestClient_SaveRestoreState(t *testing.T) { } } -func TestClient_RestoreError(t *testing.T) { - t.Parallel() - require := require.New(t) - - s1, _ := testServer(t, nil) - defer s1.Shutdown() - testutil.WaitForLeader(t, s1.RPC) - - c1, cleanup := TestClient(t, func(c *config.Config) { - c.DevMode = false - c.RPCHandler = s1 - }) - defer cleanup() - - // Wait until the node is ready - waitTilNodeReady(c1, t) - - // Create mock allocations - job := mock.Job() - alloc1 := mock.Alloc() - alloc1.NodeID = c1.Node().ID - alloc1.Job = job - alloc1.JobID = job.ID - alloc1.Job.TaskGroups[0].Tasks[0].Driver = "mock_driver" - alloc1.Job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ - "run_for": "10s", - } - alloc1.ClientStatus = structs.AllocClientStatusRunning - - state := s1.State() - err := state.UpsertJob(100, job) - require.Nil(err) - - err = state.UpsertJobSummary(101, mock.JobSummary(alloc1.JobID)) - require.Nil(err) - - err = state.UpsertAllocs(102, []*structs.Allocation{alloc1}) - require.Nil(err) - - // Allocations should get registered - testutil.WaitForResult(func() (bool, error) { - c1.allocLock.RLock() - ar := c1.allocs[alloc1.ID] - c1.allocLock.RUnlock() - if ar == nil { - return false, fmt.Errorf("nil alloc runner") - } - if ar.Alloc().ClientStatus != structs.AllocClientStatusRunning { - return false, fmt.Errorf("client status: got %v; want %v", ar.Alloc().ClientStatus, structs.AllocClientStatusRunning) - } - return true, nil - }, func(err error) { - t.Fatalf("err: %v", err) - }) - - // Shutdown the client, saves state - if err := c1.Shutdown(); err != nil { - t.Fatalf("err: %v", err) - } - - // Create a new client with a stateDB implementation that errors - logger := testlog.HCLogger(t) - c1.config.Logger = logger - catalog := consul.NewMockCatalog(logger) - mockService := consulApi.NewMockConsulServiceClient(t, logger) - - // This stateDB returns errors for all methods called by restore - stateDBFunc := func(hclog.Logger, string) (cstate.StateDB, error) { - return &cstate.ErrDB{Allocs: []*structs.Allocation{alloc1}}, nil - } - c1.config.StateDBFactory = stateDBFunc - - c2, err := NewClient(c1.config, catalog, mockService) - require.Nil(err) - defer c2.Shutdown() - - // Ensure the allocation has been marked as failed on the server - testutil.WaitForResult(func() (bool, error) { - alloc, err := s1.State().AllocByID(nil, alloc1.ID) - require.Nil(err) - failed := alloc.ClientStatus == structs.AllocClientStatusFailed - if !failed { - return false, fmt.Errorf("Expected failed client status, but got %v", alloc.ClientStatus) - } - return true, nil - }, func(err error) { - require.NoError(err) - }) - -} - func TestClient_AddAllocError(t *testing.T) { t.Parallel() require := require.New(t) - s1, _ := testServer(t, nil) - defer s1.Shutdown() + s1, _, cleanupS1 := testServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) - c1, cleanup := TestClient(t, func(c *config.Config) { + c1, cleanupC1 := TestClient(t, func(c *config.Config) { c.DevMode = false c.RPCHandler = s1 }) - defer cleanup() + defer cleanupC1() // Wait until the node is ready waitTilNodeReady(c1, t) @@ -832,8 +757,9 @@ func TestClient_Init(t *testing.T) { func TestClient_BlockedAllocations(t *testing.T) { t.Parallel() - s1, _ := testServer(t, nil) - defer s1.Shutdown() + + s1, _, cleanupS1 := testServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) c1, cleanup := TestClient(t, func(c *config.Config) { @@ -988,10 +914,10 @@ func TestClient_ReloadTLS_UpgradePlaintextToTLS(t *testing.T) { t.Parallel() assert := assert.New(t) - s1, addr := testServer(t, func(c *nomad.Config) { + s1, addr, cleanupS1 := testServer(t, func(c *nomad.Config) { c.Region = "global" }) - defer s1.Shutdown() + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) const ( @@ -1064,10 +990,10 @@ func TestClient_ReloadTLS_DowngradeTLSToPlaintext(t *testing.T) { t.Parallel() assert := assert.New(t) - s1, addr := testServer(t, func(c *nomad.Config) { + s1, addr, cleanupS1 := testServer(t, func(c *nomad.Config) { c.Region = "global" }) - defer s1.Shutdown() + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) const ( @@ -1254,8 +1180,7 @@ func TestClient_UpdateNodeFromFingerprintKeepsConfig(t *testing.T) { // Client without network configured updates to match fingerprint client, cleanup := TestClient(t, nil) defer cleanup() - // capture the platform fingerprinted device name for the next test - dev := client.config.Node.NodeResources.Networks[0].Device + client.updateNodeFromFingerprint(&fingerprint.FingerprintResponse{ NodeResources: &structs.NodeResources{ Cpu: structs.NodeCpuResources{CpuShares: 123}, @@ -1271,6 +1196,14 @@ func TestClient_UpdateNodeFromFingerprintKeepsConfig(t *testing.T) { assert.Equal(t, 80, client.config.Node.Resources.CPU) assert.Equal(t, "any-interface", client.config.Node.Resources.Networks[0].Device) + // lookup an interface. client.Node starts with a hardcoded value, eth0, + // and is only updated async through fingerprinter. + // Let's just lookup network device; anyone will do for this test + interfaces, err := net.Interfaces() + require.NoError(t, err) + require.NotEmpty(t, interfaces) + dev := interfaces[0].Name + // Client with network interface configured keeps the config // setting on update name := "TestClient_UpdateNodeFromFingerprintKeepsConfig2" @@ -1687,3 +1620,71 @@ func TestClient_hasLocalState(t *testing.T) { require.True(t, c.hasLocalState(alloc)) }) } + +func Test_verifiedTasks(t *testing.T) { + t.Parallel() + logger := testlog.HCLogger(t) + + // produce a result and check against expected tasks and/or error output + try := func(t *testing.T, a *structs.Allocation, tasks, expTasks []string, expErr string) { + result, err := verifiedTasks(logger, a, tasks) + if expErr != "" { + require.EqualError(t, err, expErr) + } else { + require.NoError(t, err) + require.Equal(t, expTasks, result) + } + } + + // create an alloc with TaskGroup=g1, tasks configured given g1Tasks + alloc := func(g1Tasks []string) *structs.Allocation { + var tasks []*structs.Task + for _, taskName := range g1Tasks { + tasks = append(tasks, &structs.Task{Name: taskName}) + } + + return &structs.Allocation{ + Job: &structs.Job{ + TaskGroups: []*structs.TaskGroup{ + {Name: "g0", Tasks: []*structs.Task{{Name: "g0t1"}}}, + {Name: "g1", Tasks: tasks}, + }, + }, + TaskGroup: "g1", + } + } + + t.Run("nil alloc", func(t *testing.T) { + tasks := []string{"g1t1"} + try(t, nil, tasks, nil, "nil allocation") + }) + + t.Run("missing task names", func(t *testing.T) { + var tasks []string + tgTasks := []string{"g1t1"} + try(t, alloc(tgTasks), tasks, nil, "missing task names") + }) + + t.Run("missing group", func(t *testing.T) { + tasks := []string{"g1t1"} + a := alloc(tasks) + a.TaskGroup = "other" + try(t, a, tasks, nil, "group name in allocation is not present in job") + }) + + t.Run("nonexistent task", func(t *testing.T) { + tasks := []string{"missing"} + try(t, alloc([]string{"task1"}), tasks, nil, `task "missing" not found in allocation`) + }) + + t.Run("matching task", func(t *testing.T) { + tasks := []string{"g1t1"} + try(t, alloc(tasks), tasks, tasks, "") + }) + + t.Run("matching task subset", func(t *testing.T) { + tasks := []string{"g1t1", "g1t3"} + tgTasks := []string{"g1t1", "g1t2", "g1t3"} + try(t, alloc(tgTasks), tasks, tasks, "") + }) +} diff --git a/client/config/config.go b/client/config/config.go index c400ff8ae1a..6f3dfc4a1ef 100644 --- a/client/config/config.go +++ b/client/config/config.go @@ -23,6 +23,7 @@ var ( // filtered when passing the environment variables of the host to a task. DefaultEnvBlacklist = strings.Join([]string{ "CONSUL_TOKEN", + "CONSUL_HTTP_TOKEN", "VAULT_TOKEN", "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN", "GOOGLE_APPLICATION_CREDENTIALS", @@ -71,6 +72,10 @@ type Config struct { // avoids persistent storage. DevMode bool + // EnableDebug is used to enable debugging RPC endpoints + // in the absence of ACLs + EnableDebug bool + // StateDir is where we store our state StateDir string @@ -81,7 +86,7 @@ type Config struct { LogOutput io.Writer // Logger provides a logger to thhe client - Logger log.Logger + Logger log.InterceptLogger // Region is the clients region Region string diff --git a/client/config/testing.go b/client/config/testing.go index 8966ac831c6..642cafdf7da 100644 --- a/client/config/testing.go +++ b/client/config/testing.go @@ -18,8 +18,18 @@ func TestClientConfig(t testing.T) (*Config, func()) { conf.Node = mock.Node() conf.Logger = testlog.HCLogger(t) + // On macOS, os.TempDir returns a symlinked path under /var which + // is outside of the directories shared into the VM used for Docker. + // Expand the symlink to get the real path in /private, which is ok. + dirName := os.TempDir() + tmpDir, err := filepath.EvalSymlinks(dirName) + if err != nil { + t.Fatalf("Could not resolve temporary directory links for %s: %v", tmpDir, err) + } + tmpDir = filepath.Clean(tmpDir) + // Create a tempdir to hold state and alloc subdirs - parent, err := ioutil.TempDir("", "nomadtest") + parent, err := ioutil.TempDir(tmpDir, "nomadtest") if err != nil { t.Fatalf("error creating client dir: %v", err) } diff --git a/client/consul/consul.go b/client/consul/consul.go index df1c455cfe9..f8348c2202e 100644 --- a/client/consul/consul.go +++ b/client/consul/consul.go @@ -8,12 +8,31 @@ import ( // ConsulServiceAPI is the interface the Nomad Client uses to register and // remove services and checks from Consul. type ConsulServiceAPI interface { - RegisterGroup(*structs.Allocation) error - RemoveGroup(*structs.Allocation) error - UpdateGroup(oldAlloc, newAlloc *structs.Allocation) error - RegisterTask(*consul.TaskServices) error - RemoveTask(*consul.TaskServices) - UpdateTask(old, newTask *consul.TaskServices) error + // RegisterWorkload with Consul. Adds all service entries and checks to Consul. + RegisterWorkload(*consul.WorkloadServices) error + + // RemoveWorkload from Consul. Removes all service entries and checks. + RemoveWorkload(*consul.WorkloadServices) + + // UpdateWorkload in Consul. Does not alter the service if only checks have + // changed. + UpdateWorkload(old, newTask *consul.WorkloadServices) error + + // AllocRegistrations returns the registrations for the given allocation. AllocRegistrations(allocID string) (*consul.AllocRegistration, error) + + // UpdateTTL is used to update the TTL of a check. UpdateTTL(id, output, status string) error } + +// TokenDeriverFunc takes an allocation and a set of tasks and derives a +// service identity token for each. Requests go through nomad server. +type TokenDeriverFunc func(*structs.Allocation, []string) (map[string]string, error) + +// ServiceIdentityAPI is the interface the Nomad Client uses to request Consul +// Service Identity tokens through Nomad Server. +type ServiceIdentityAPI interface { + // DeriveSITokens contacts the nomad server and requests consul service + // identity tokens be generated for tasks in the allocation. + DeriveSITokens(alloc *structs.Allocation, tasks []string) (map[string]string, error) +} diff --git a/client/consul/consul_testing.go b/client/consul/consul_testing.go index ce276b02a90..0384e4c9541 100644 --- a/client/consul/consul_testing.go +++ b/client/consul/consul_testing.go @@ -3,19 +3,19 @@ package consul import ( "fmt" "sync" + "time" log "github.com/hashicorp/go-hclog" - "github.com/hashicorp/nomad/command/agent/consul" - "github.com/hashicorp/nomad/nomad/structs" testing "github.com/mitchellh/go-testing-interface" ) // MockConsulOp represents the register/deregister operations. type MockConsulOp struct { - Op string // add, remove, or update - AllocID string - Name string // task or group name + Op string // add, remove, or update + AllocID string + Name string // task or group name + OccurredAt time.Time } func NewMockConsulOp(op, allocID, name string) MockConsulOp { @@ -26,9 +26,10 @@ func NewMockConsulOp(op, allocID, name string) MockConsulOp { panic(fmt.Errorf("invalid consul op: %s", op)) } return MockConsulOp{ - Op: op, - AllocID: allocID, - Name: name, + Op: op, + AllocID: allocID, + Name: name, + OccurredAt: time.Now(), } } @@ -54,60 +55,33 @@ func NewMockConsulServiceClient(t testing.T, logger log.Logger) *MockConsulServi return &m } -func (m *MockConsulServiceClient) RegisterGroup(alloc *structs.Allocation) error { - m.mu.Lock() - defer m.mu.Unlock() - tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) - m.logger.Trace("RegisterGroup", "alloc_id", alloc.ID, "num_services", len(tg.Services)) - m.ops = append(m.ops, NewMockConsulOp("add_group", alloc.ID, alloc.TaskGroup)) - return nil -} - -func (m *MockConsulServiceClient) UpdateGroup(_, alloc *structs.Allocation) error { - m.mu.Lock() - defer m.mu.Unlock() - tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) - m.logger.Trace("UpdateGroup", "alloc_id", alloc.ID, "num_services", len(tg.Services)) - m.ops = append(m.ops, NewMockConsulOp("update_group", alloc.ID, alloc.TaskGroup)) - return nil -} - -func (m *MockConsulServiceClient) RemoveGroup(alloc *structs.Allocation) error { - m.mu.Lock() - defer m.mu.Unlock() - tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) - m.logger.Trace("RemoveGroup", "alloc_id", alloc.ID, "num_services", len(tg.Services)) - m.ops = append(m.ops, NewMockConsulOp("remove_group", alloc.ID, alloc.TaskGroup)) - return nil -} - -func (m *MockConsulServiceClient) UpdateTask(old, newSvcs *consul.TaskServices) error { +func (m *MockConsulServiceClient) UpdateWorkload(old, newSvcs *consul.WorkloadServices) error { m.mu.Lock() defer m.mu.Unlock() - m.logger.Trace("UpdateTask", "alloc_id", newSvcs.AllocID, "task", newSvcs.Name, + m.logger.Trace("UpdateWorkload", "alloc_id", newSvcs.AllocID, "name", newSvcs.Name(), "old_services", len(old.Services), "new_services", len(newSvcs.Services), ) - m.ops = append(m.ops, NewMockConsulOp("update", newSvcs.AllocID, newSvcs.Name)) + m.ops = append(m.ops, NewMockConsulOp("update", newSvcs.AllocID, newSvcs.Name())) return nil } -func (m *MockConsulServiceClient) RegisterTask(task *consul.TaskServices) error { +func (m *MockConsulServiceClient) RegisterWorkload(svcs *consul.WorkloadServices) error { m.mu.Lock() defer m.mu.Unlock() - m.logger.Trace("RegisterTask", "alloc_id", task.AllocID, "task", task.Name, - "services", len(task.Services), + m.logger.Trace("RegisterWorkload", "alloc_id", svcs.AllocID, "name", svcs.Name(), + "services", len(svcs.Services), ) - m.ops = append(m.ops, NewMockConsulOp("add", task.AllocID, task.Name)) + m.ops = append(m.ops, NewMockConsulOp("add", svcs.AllocID, svcs.Name())) return nil } -func (m *MockConsulServiceClient) RemoveTask(task *consul.TaskServices) { +func (m *MockConsulServiceClient) RemoveWorkload(svcs *consul.WorkloadServices) { m.mu.Lock() defer m.mu.Unlock() - m.logger.Trace("RemoveTask", "alloc_id", task.AllocID, "task", task.Name, - "services", len(task.Services), + m.logger.Trace("RemoveWorkload", "alloc_id", svcs.AllocID, "name", svcs.Name(), + "services", len(svcs.Services), ) - m.ops = append(m.ops, NewMockConsulOp("remove", task.AllocID, task.Name)) + m.ops = append(m.ops, NewMockConsulOp("remove", svcs.AllocID, svcs.Name())) } func (m *MockConsulServiceClient) AllocRegistrations(allocID string) (*consul.AllocRegistration, error) { diff --git a/client/consul/identities.go b/client/consul/identities.go new file mode 100644 index 00000000000..e07dfaf33dd --- /dev/null +++ b/client/consul/identities.go @@ -0,0 +1,32 @@ +package consul + +import ( + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/nomad/nomad/structs" +) + +// Implementation of ServiceIdentityAPI used to interact with Nomad Server from +// Nomad Client for acquiring Consul Service Identity tokens. +// +// This client is split from the other consul client(s) to avoid a circular +// dependency between themselves and client.Client +type identitiesClient struct { + tokenDeriver TokenDeriverFunc + logger hclog.Logger +} + +func NewIdentitiesClient(logger hclog.Logger, tokenDeriver TokenDeriverFunc) *identitiesClient { + return &identitiesClient{ + tokenDeriver: tokenDeriver, + logger: logger, + } +} + +func (c *identitiesClient) DeriveSITokens(alloc *structs.Allocation, tasks []string) (map[string]string, error) { + tokens, err := c.tokenDeriver(alloc, tasks) + if err != nil { + c.logger.Error("error deriving SI token", "error", err, "alloc_id", alloc.ID, "task_names", tasks) + return nil, err + } + return tokens, nil +} diff --git a/client/consul/identities_test.go b/client/consul/identities_test.go new file mode 100644 index 00000000000..0ac7ac275e2 --- /dev/null +++ b/client/consul/identities_test.go @@ -0,0 +1,31 @@ +package consul + +import ( + "errors" + "testing" + + "github.com/hashicorp/nomad/helper/testlog" + "github.com/hashicorp/nomad/nomad/structs" + "github.com/stretchr/testify/require" +) + +func TestSI_DeriveTokens(t *testing.T) { + logger := testlog.HCLogger(t) + dFunc := func(alloc *structs.Allocation, taskNames []string) (map[string]string, error) { + return map[string]string{"a": "b"}, nil + } + tc := NewIdentitiesClient(logger, dFunc) + tokens, err := tc.DeriveSITokens(nil, nil) + require.NoError(t, err) + require.Equal(t, map[string]string{"a": "b"}, tokens) +} + +func TestSI_DeriveTokens_error(t *testing.T) { + logger := testlog.HCLogger(t) + dFunc := func(alloc *structs.Allocation, taskNames []string) (map[string]string, error) { + return nil, errors.New("some failure") + } + tc := NewIdentitiesClient(logger, dFunc) + _, err := tc.DeriveSITokens(&structs.Allocation{ID: "a1"}, nil) + require.Error(t, err) +} diff --git a/client/consul/identities_testing.go b/client/consul/identities_testing.go new file mode 100644 index 00000000000..a091c006063 --- /dev/null +++ b/client/consul/identities_testing.go @@ -0,0 +1,82 @@ +package consul + +import ( + "sync" + + "github.com/hashicorp/nomad/helper/uuid" + "github.com/hashicorp/nomad/nomad/structs" +) + +// MockServiceIdentitiesClient is used for testing the client for managing consul service +// identity tokens. +type MockServiceIdentitiesClient struct { + // deriveTokenErrors maps an allocation ID and tasks to an error when the + // token is derived + deriveTokenErrors map[string]map[string]error + + // DeriveTokenFn allows the caller to control the DeriveToken function. If + // not set an error is returned if found in DeriveTokenErrors and otherwise + // a token is generated and returned + DeriveTokenFn TokenDeriverFunc + + // lock around everything + lock sync.Mutex +} + +var _ ServiceIdentityAPI = (*MockServiceIdentitiesClient)(nil) + +// NewMockServiceIdentitiesClient returns a MockServiceIdentitiesClient for testing. +func NewMockServiceIdentitiesClient() *MockServiceIdentitiesClient { + return &MockServiceIdentitiesClient{ + deriveTokenErrors: make(map[string]map[string]error), + } +} + +func (mtc *MockServiceIdentitiesClient) DeriveSITokens(alloc *structs.Allocation, tasks []string) (map[string]string, error) { + mtc.lock.Lock() + defer mtc.lock.Unlock() + + // if the DeriveTokenFn is explicitly set, use that + if mtc.DeriveTokenFn != nil { + return mtc.DeriveTokenFn(alloc, tasks) + } + + // generate a token for each task, unless the mock has an error ready for + // one or more of the tasks in which case return that + tokens := make(map[string]string, len(tasks)) + for _, task := range tasks { + if m, ok := mtc.deriveTokenErrors[alloc.ID]; ok { + if err, ok := m[task]; ok { + return nil, err + } + } + tokens[task] = uuid.Generate() + } + return tokens, nil +} + +func (mtc *MockServiceIdentitiesClient) SetDeriveTokenError(allocID string, tasks []string, err error) { + mtc.lock.Lock() + defer mtc.lock.Unlock() + + if _, ok := mtc.deriveTokenErrors[allocID]; !ok { + mtc.deriveTokenErrors[allocID] = make(map[string]error, 10) + } + + for _, task := range tasks { + mtc.deriveTokenErrors[allocID][task] = err + } +} + +func (mtc *MockServiceIdentitiesClient) DeriveTokenErrors() map[string]map[string]error { + mtc.lock.Lock() + defer mtc.lock.Unlock() + + m := make(map[string]map[string]error) + for aID, tasks := range mtc.deriveTokenErrors { + for task, err := range tasks { + m[aID][task] = err + } + } + return m +} diff --git a/client/fingerprint/env_aws.go b/client/fingerprint/env_aws.go index 8eac273ad7f..fdd46f5841b 100644 --- a/client/fingerprint/env_aws.go +++ b/client/fingerprint/env_aws.go @@ -2,7 +2,6 @@ package fingerprint import ( "fmt" - "io/ioutil" "net/http" "net/url" "os" @@ -10,6 +9,10 @@ import ( "strings" "time" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/session" log "github.com/hashicorp/go-hclog" cleanhttp "github.com/hashicorp/go-cleanhttp" @@ -17,10 +20,6 @@ import ( ) const ( - // This is where the AWS metadata server normally resides. We hardcode the - // "instance" path as well since it's the only one we access here. - DEFAULT_AWS_URL = "http://169.254.169.254/latest/meta-data/" - // AwsMetadataTimeout is the timeout used when contacting the AWS metadata // service AwsMetadataTimeout = 2 * time.Second @@ -50,15 +49,18 @@ var ec2InstanceSpeedMap = map[*regexp.Regexp]int{ // EnvAWSFingerprint is used to fingerprint AWS metadata type EnvAWSFingerprint struct { StaticFingerprinter - timeout time.Duration - logger log.Logger + + // endpoint for EC2 metadata as expected by AWS SDK + endpoint string + + logger log.Logger } // NewEnvAWSFingerprint is used to create a fingerprint from AWS metadata func NewEnvAWSFingerprint(logger log.Logger) Fingerprint { f := &EnvAWSFingerprint{ - logger: logger.Named("env_aws"), - timeout: AwsMetadataTimeout, + logger: logger.Named("env_aws"), + endpoint: strings.TrimSuffix(os.Getenv("AWS_ENV_URL"), "/meta-data/"), } return f } @@ -66,12 +68,19 @@ func NewEnvAWSFingerprint(logger log.Logger) Fingerprint { func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *FingerprintResponse) error { cfg := request.Config + timeout := AwsMetadataTimeout + // Check if we should tighten the timeout if cfg.ReadBoolDefault(TightenNetworkTimeoutsConfig, false) { - f.timeout = 1 * time.Millisecond + timeout = 1 * time.Millisecond + } + + ec2meta, err := ec2MetaClient(f.endpoint, timeout) + if err != nil { + return fmt.Errorf("failed to setup ec2Metadata client: %v", err) } - if !f.isAWS() { + if !ec2meta.Available() { return nil } @@ -80,16 +89,6 @@ func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *F Device: "eth0", } - metadataURL := os.Getenv("AWS_ENV_URL") - if metadataURL == "" { - metadataURL = DEFAULT_AWS_URL - } - - client := &http.Client{ - Timeout: f.timeout, - Transport: cleanhttp.DefaultTransport(), - } - // Keys and whether they should be namespaced as unique. Any key whose value // uniquely identifies a node, such as ip, should be marked as unique. When // marked as unique, the key isn't included in the computed node class. @@ -105,23 +104,19 @@ func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *F "placement/availability-zone": false, } for k, unique := range keys { - res, err := client.Get(metadataURL + k) - if err != nil { + resp, err := ec2meta.GetMetadata(k) + if awsErr, ok := err.(awserr.RequestFailure); ok { + f.logger.Debug("could not read attribute value", "attribute", k, "error", awsErr) + continue + } else if awsErr, ok := err.(awserr.Error); ok { // if it's a URL error, assume we're not in an AWS environment // TODO: better way to detect AWS? Check xen virtualization? - if _, ok := err.(*url.Error); ok { + if _, ok := awsErr.OrigErr().(*url.Error); ok { return nil } + // not sure what other errors it would return return err - } else if res.StatusCode != http.StatusOK { - f.logger.Debug("could not read attribute value", "attribute", k) - continue - } - resp, err := ioutil.ReadAll(res.Body) - res.Body.Close() - if err != nil { - f.logger.Error("error reading response body for AWS attribute", "attribute", k, "error", err) } // assume we want blank entries @@ -130,7 +125,7 @@ func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *F key = structs.UniqueNamespace(key) } - response.AddAttribute(key, strings.Trim(string(resp), "\n")) + response.AddAttribute(key, strings.Trim(resp, "\n")) } // copy over network specific information @@ -141,10 +136,11 @@ func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *F } // find LinkSpeed from lookup - throughput := f.linkSpeed() - if cfg.NetworkSpeed != 0 { - throughput = cfg.NetworkSpeed - } else if throughput == 0 { + throughput := cfg.NetworkSpeed + if throughput == 0 { + throughput = f.linkSpeed(ec2meta) + } + if throughput == 0 { // Failed to determine speed. Check if the network fingerprint got it found := false if request.Node.Resources != nil && len(request.Node.Resources.Networks) > 0 { @@ -177,75 +173,16 @@ func (f *EnvAWSFingerprint) Fingerprint(request *FingerprintRequest, response *F return nil } -func (f *EnvAWSFingerprint) isAWS() bool { - // Read the internal metadata URL from the environment, allowing test files to - // provide their own - metadataURL := os.Getenv("AWS_ENV_URL") - if metadataURL == "" { - metadataURL = DEFAULT_AWS_URL - } - - client := &http.Client{ - Timeout: f.timeout, - Transport: cleanhttp.DefaultTransport(), - } - - // Query the metadata url for the ami-id, to verify we're on AWS - resp, err := client.Get(metadataURL + "ami-id") - if err != nil { - f.logger.Debug("error querying AWS Metadata URL, skipping") - return false - } - defer resp.Body.Close() - - if resp.StatusCode >= 400 { - // URL not found, which indicates that this isn't AWS - return false - } - - instanceID, err := ioutil.ReadAll(resp.Body) - if err != nil { - f.logger.Debug("error reading AWS Instance ID, skipping") - return false - } - - match, err := regexp.MatchString("ami-*", string(instanceID)) - if err != nil || !match { - return false - } - - return true -} - // EnvAWSFingerprint uses lookup table to approximate network speeds -func (f *EnvAWSFingerprint) linkSpeed() int { - - // Query the API for the instance type, and use the table above to approximate - // the network speed - metadataURL := os.Getenv("AWS_ENV_URL") - if metadataURL == "" { - metadataURL = DEFAULT_AWS_URL - } - - client := &http.Client{ - Timeout: f.timeout, - Transport: cleanhttp.DefaultTransport(), - } +func (f *EnvAWSFingerprint) linkSpeed(ec2meta *ec2metadata.EC2Metadata) int { - res, err := client.Get(metadataURL + "instance-type") + resp, err := ec2meta.GetMetadata("instance-type") if err != nil { f.logger.Error("error reading instance-type", "error", err) return 0 } - body, err := ioutil.ReadAll(res.Body) - res.Body.Close() - if err != nil { - f.logger.Error("error reading response body for instance-type", "error", err) - return 0 - } - - key := strings.Trim(string(body), "\n") + key := strings.Trim(resp, "\n") netSpeed := 0 for reg, speed := range ec2InstanceSpeedMap { if reg.MatchString(key) { @@ -256,3 +193,21 @@ func (f *EnvAWSFingerprint) linkSpeed() int { return netSpeed } + +func ec2MetaClient(endpoint string, timeout time.Duration) (*ec2metadata.EC2Metadata, error) { + client := &http.Client{ + Timeout: timeout, + Transport: cleanhttp.DefaultTransport(), + } + + c := aws.NewConfig().WithHTTPClient(client).WithMaxRetries(0) + if endpoint != "" { + c = c.WithEndpoint(endpoint) + } + + session, err := session.NewSession(c) + if err != nil { + return nil, err + } + return ec2metadata.New(session, c), nil +} diff --git a/client/fingerprint/env_aws_test.go b/client/fingerprint/env_aws_test.go index 16bb464f051..93198978fcf 100644 --- a/client/fingerprint/env_aws_test.go +++ b/client/fingerprint/env_aws_test.go @@ -5,17 +5,18 @@ import ( "fmt" "net/http" "net/http/httptest" - "os" "testing" "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/helper/testlog" "github.com/hashicorp/nomad/nomad/structs" + "github.com/stretchr/testify/require" ) func TestEnvAWSFingerprint_nonAws(t *testing.T) { - os.Setenv("AWS_ENV_URL", "http://127.0.0.1/latest/meta-data/") f := NewEnvAWSFingerprint(testlog.HCLogger(t)) + f.(*EnvAWSFingerprint).endpoint = "http://127.0.0.1/latest" + node := &structs.Node{ Attributes: make(map[string]string), } @@ -23,43 +24,25 @@ func TestEnvAWSFingerprint_nonAws(t *testing.T) { request := &FingerprintRequest{Config: &config.Config{}, Node: node} var response FingerprintResponse err := f.Fingerprint(request, &response) - if err != nil { - t.Fatalf("err: %v", err) - } - - if len(response.Attributes) > 0 { - t.Fatalf("Should not apply") - } + require.NoError(t, err) + require.Empty(t, response.Attributes) } func TestEnvAWSFingerprint_aws(t *testing.T) { + endpoint, cleanup := startFakeEC2Metadata(t) + defer cleanup() + f := NewEnvAWSFingerprint(testlog.HCLogger(t)) + f.(*EnvAWSFingerprint).endpoint = endpoint + node := &structs.Node{ Attributes: make(map[string]string), } - // configure mock server with fixture routes, data - routes := routes{} - if err := json.Unmarshal([]byte(aws_routes), &routes); err != nil { - t.Fatalf("Failed to unmarshal JSON in AWS ENV test: %s", err) - } - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - for _, e := range routes.Endpoints { - if r.RequestURI == e.Uri { - w.Header().Set("Content-Type", e.ContentType) - fmt.Fprintln(w, e.Body) - } - } - })) - defer ts.Close() - os.Setenv("AWS_ENV_URL", ts.URL+"/latest/meta-data/") - request := &FingerprintRequest{Config: &config.Config{}, Node: node} var response FingerprintResponse err := f.Fingerprint(request, &response) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) keys := []string{ "platform.aws.ami-id", @@ -78,9 +61,7 @@ func TestEnvAWSFingerprint_aws(t *testing.T) { assertNodeAttributeContains(t, response.Attributes, k) } - if len(response.Links) == 0 { - t.Fatalf("Empty links for Node in AWS Fingerprint test") - } + require.NotEmpty(t, response.Links) // confirm we have at least instance-id and ami-id for _, k := range []string{"aws.ec2"} { @@ -88,86 +69,13 @@ func TestEnvAWSFingerprint_aws(t *testing.T) { } } -type routes struct { - Endpoints []*endpoint `json:"endpoints"` -} -type endpoint struct { - Uri string `json:"uri"` - ContentType string `json:"content-type"` - Body string `json:"body"` -} - -const aws_routes = ` -{ - "endpoints": [ - { - "uri": "/latest/meta-data/ami-id", - "content-type": "text/plain", - "body": "ami-1234" - }, - { - "uri": "/latest/meta-data/hostname", - "content-type": "text/plain", - "body": "ip-10-0-0-207.us-west-2.compute.internal" - }, - { - "uri": "/latest/meta-data/placement/availability-zone", - "content-type": "text/plain", - "body": "us-west-2a" - }, - { - "uri": "/latest/meta-data/instance-id", - "content-type": "text/plain", - "body": "i-b3ba3875" - }, - { - "uri": "/latest/meta-data/instance-type", - "content-type": "text/plain", - "body": "m3.2xlarge" - }, - { - "uri": "/latest/meta-data/local-hostname", - "content-type": "text/plain", - "body": "ip-10-0-0-207.us-west-2.compute.internal" - }, - { - "uri": "/latest/meta-data/local-ipv4", - "content-type": "text/plain", - "body": "10.0.0.207" - }, - { - "uri": "/latest/meta-data/public-hostname", - "content-type": "text/plain", - "body": "ec2-54-191-117-175.us-west-2.compute.amazonaws.com" - }, - { - "uri": "/latest/meta-data/public-ipv4", - "content-type": "text/plain", - "body": "54.191.117.175" - } - ] -} -` - func TestNetworkFingerprint_AWS(t *testing.T) { - // configure mock server with fixture routes, data - routes := routes{} - if err := json.Unmarshal([]byte(aws_routes), &routes); err != nil { - t.Fatalf("Failed to unmarshal JSON in AWS ENV test: %s", err) - } - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - for _, e := range routes.Endpoints { - if r.RequestURI == e.Uri { - w.Header().Set("Content-Type", e.ContentType) - fmt.Fprintln(w, e.Body) - } - } - })) - - defer ts.Close() - os.Setenv("AWS_ENV_URL", ts.URL+"/latest/meta-data/") + endpoint, cleanup := startFakeEC2Metadata(t) + defer cleanup() f := NewEnvAWSFingerprint(testlog.HCLogger(t)) + f.(*EnvAWSFingerprint).endpoint = endpoint + node := &structs.Node{ Attributes: make(map[string]string), } @@ -175,48 +83,27 @@ func TestNetworkFingerprint_AWS(t *testing.T) { request := &FingerprintRequest{Config: &config.Config{}, Node: node} var response FingerprintResponse err := f.Fingerprint(request, &response) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) assertNodeAttributeContains(t, response.Attributes, "unique.network.ip-address") - if response.NodeResources == nil || len(response.NodeResources.Networks) == 0 { - t.Fatal("Expected to find Network Resources") - } + require.NotNil(t, response.NodeResources) + require.Len(t, response.NodeResources.Networks, 1) // Test at least the first Network Resource net := response.NodeResources.Networks[0] - if net.IP == "" { - t.Fatal("Expected Network Resource to have an IP") - } - if net.CIDR == "" { - t.Fatal("Expected Network Resource to have a CIDR") - } - if net.Device == "" { - t.Fatal("Expected Network Resource to have a Device Name") - } + require.NotEmpty(t, net.IP, "Expected Network Resource to have an IP") + require.NotEmpty(t, net.CIDR, "Expected Network Resource to have a CIDR") + require.NotEmpty(t, net.Device, "Expected Network Resource to have a Device Name") } func TestNetworkFingerprint_AWS_network(t *testing.T) { - // configure mock server with fixture routes, data - routes := routes{} - if err := json.Unmarshal([]byte(aws_routes), &routes); err != nil { - t.Fatalf("Failed to unmarshal JSON in AWS ENV test: %s", err) - } - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - for _, e := range routes.Endpoints { - if r.RequestURI == e.Uri { - w.Header().Set("Content-Type", e.ContentType) - fmt.Fprintln(w, e.Body) - } - } - })) - - defer ts.Close() - os.Setenv("AWS_ENV_URL", ts.URL+"/latest/meta-data/") + endpoint, cleanup := startFakeEC2Metadata(t) + defer cleanup() f := NewEnvAWSFingerprint(testlog.HCLogger(t)) + f.(*EnvAWSFingerprint).endpoint = endpoint + { node := &structs.Node{ Attributes: make(map[string]string), @@ -225,34 +112,21 @@ func TestNetworkFingerprint_AWS_network(t *testing.T) { request := &FingerprintRequest{Config: &config.Config{}, Node: node} var response FingerprintResponse err := f.Fingerprint(request, &response) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) - if !response.Detected { - t.Fatalf("expected response to be applicable") - } + require.True(t, response.Detected, "expected response to be applicable") assertNodeAttributeContains(t, response.Attributes, "unique.network.ip-address") - if response.NodeResources == nil || len(response.NodeResources.Networks) == 0 { - t.Fatal("Expected to find Network Resources") - } + require.NotNil(t, response.NodeResources) + require.Len(t, response.NodeResources.Networks, 1) // Test at least the first Network Resource net := response.NodeResources.Networks[0] - if net.IP == "" { - t.Fatal("Expected Network Resource to have an IP") - } - if net.CIDR == "" { - t.Fatal("Expected Network Resource to have a CIDR") - } - if net.Device == "" { - t.Fatal("Expected Network Resource to have a Device Name") - } - if net.MBits != 1000 { - t.Fatalf("Expected Network Resource to have speed %d; got %d", 1000, net.MBits) - } + require.NotEmpty(t, net.IP, "Expected Network Resource to have an IP") + require.NotEmpty(t, net.CIDR, "Expected Network Resource to have a CIDR") + require.NotEmpty(t, net.Device, "Expected Network Resource to have a Device Name") + require.Equal(t, 1000, net.MBits) } // Try again this time setting a network speed in the config @@ -268,48 +142,99 @@ func TestNetworkFingerprint_AWS_network(t *testing.T) { request := &FingerprintRequest{Config: cfg, Node: node} var response FingerprintResponse err := f.Fingerprint(request, &response) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(t, err) assertNodeAttributeContains(t, response.Attributes, "unique.network.ip-address") - if response.NodeResources == nil || len(response.NodeResources.Networks) == 0 { - t.Fatal("Expected to find Network Resources") - } + require.NotNil(t, response.NodeResources) + require.Len(t, response.NodeResources.Networks, 1) // Test at least the first Network Resource net := response.NodeResources.Networks[0] - if net.IP == "" { - t.Fatal("Expected Network Resource to have an IP") - } - if net.CIDR == "" { - t.Fatal("Expected Network Resource to have a CIDR") - } - if net.Device == "" { - t.Fatal("Expected Network Resource to have a Device Name") - } - if net.MBits != 10 { - t.Fatalf("Expected Network Resource to have speed %d; got %d", 10, net.MBits) - } + require.NotEmpty(t, net.IP, "Expected Network Resource to have an IP") + require.NotEmpty(t, net.CIDR, "Expected Network Resource to have a CIDR") + require.NotEmpty(t, net.Device, "Expected Network Resource to have a Device Name") + require.Equal(t, 10, net.MBits) } } -func TestNetworkFingerprint_notAWS(t *testing.T) { - os.Setenv("AWS_ENV_URL", "http://127.0.0.1/latest/meta-data/") - f := NewEnvAWSFingerprint(testlog.HCLogger(t)) - node := &structs.Node{ - Attributes: make(map[string]string), - } +/// Utility functions for tests - request := &FingerprintRequest{Config: &config.Config{}, Node: node} - var response FingerprintResponse - err := f.Fingerprint(request, &response) - if err != nil { - t.Fatalf("err: %v", err) +func startFakeEC2Metadata(t *testing.T) (endpoint string, cleanup func()) { + routes := routes{} + if err := json.Unmarshal([]byte(aws_routes), &routes); err != nil { + t.Fatalf("Failed to unmarshal JSON in AWS ENV test: %s", err) } - if len(response.Attributes) > 0 { - t.Fatalf("Should not apply") - } + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + for _, e := range routes.Endpoints { + if r.RequestURI == e.Uri { + w.Header().Set("Content-Type", e.ContentType) + fmt.Fprintln(w, e.Body) + } + } + })) + + return ts.URL + "/latest", ts.Close +} + +type routes struct { + Endpoints []*endpoint `json:"endpoints"` +} +type endpoint struct { + Uri string `json:"uri"` + ContentType string `json:"content-type"` + Body string `json:"body"` } + +const aws_routes = ` +{ + "endpoints": [ + { + "uri": "/latest/meta-data/ami-id", + "content-type": "text/plain", + "body": "ami-1234" + }, + { + "uri": "/latest/meta-data/hostname", + "content-type": "text/plain", + "body": "ip-10-0-0-207.us-west-2.compute.internal" + }, + { + "uri": "/latest/meta-data/placement/availability-zone", + "content-type": "text/plain", + "body": "us-west-2a" + }, + { + "uri": "/latest/meta-data/instance-id", + "content-type": "text/plain", + "body": "i-b3ba3875" + }, + { + "uri": "/latest/meta-data/instance-type", + "content-type": "text/plain", + "body": "m3.2xlarge" + }, + { + "uri": "/latest/meta-data/local-hostname", + "content-type": "text/plain", + "body": "ip-10-0-0-207.us-west-2.compute.internal" + }, + { + "uri": "/latest/meta-data/local-ipv4", + "content-type": "text/plain", + "body": "10.0.0.207" + }, + { + "uri": "/latest/meta-data/public-hostname", + "content-type": "text/plain", + "body": "ec2-54-191-117-175.us-west-2.compute.amazonaws.com" + }, + { + "uri": "/latest/meta-data/public-ipv4", + "content-type": "text/plain", + "body": "54.191.117.175" + } + ] +} +` diff --git a/client/fingerprint/fingerprint_test.go b/client/fingerprint/fingerprint_test.go index 186a52f132f..ee03643c087 100644 --- a/client/fingerprint/fingerprint_test.go +++ b/client/fingerprint/fingerprint_test.go @@ -7,65 +7,37 @@ import ( "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/nomad/structs" + "github.com/stretchr/testify/require" ) func assertFingerprintOK(t *testing.T, fp Fingerprint, node *structs.Node) *FingerprintResponse { request := &FingerprintRequest{Config: new(config.Config), Node: node} var response FingerprintResponse err := fp.Fingerprint(request, &response) - if err != nil { - t.Fatalf("Failed to fingerprint: %s", err) - } + require.NoError(t, err) - if len(response.Attributes) == 0 { - t.Fatalf("Failed to apply node attributes") - } + require.NotEmpty(t, response.Attributes, "Failed to apply node attributes") return &response } func assertNodeAttributeContains(t *testing.T, nodeAttributes map[string]string, attribute string) { - if nodeAttributes == nil { - t.Errorf("expected an initialized map for node attributes") - return - } + require.NotNil(t, nodeAttributes, "expected an initialized map for node attributes") - actual, found := nodeAttributes[attribute] - if !found { - t.Errorf("Expected to find Attribute `%s`\n\n[DEBUG] %#v", attribute, nodeAttributes) - return - } - if actual == "" { - t.Errorf("Expected non-empty Attribute value for `%s`\n\n[DEBUG] %#v", attribute, nodeAttributes) - } + require.Contains(t, nodeAttributes, attribute) + require.NotEmpty(t, nodeAttributes[attribute]) } func assertNodeAttributeEquals(t *testing.T, nodeAttributes map[string]string, attribute string, expected string) { - if nodeAttributes == nil { - t.Errorf("expected an initialized map for node attributes") - return - } - actual, found := nodeAttributes[attribute] - if !found { - t.Errorf("Expected to find Attribute `%s`; unable to check value\n\n[DEBUG] %#v", attribute, nodeAttributes) - return - } - if expected != actual { - t.Errorf("Expected `%s` Attribute to be `%s`, found `%s`\n\n[DEBUG] %#v", attribute, expected, actual, nodeAttributes) - } + require.NotNil(t, nodeAttributes, "expected an initialized map for node attributes") + + require.Contains(t, nodeAttributes, attribute) + require.Equal(t, expected, nodeAttributes[attribute]) } func assertNodeLinksContains(t *testing.T, nodeLinks map[string]string, link string) { - if nodeLinks == nil { - t.Errorf("expected an initialized map for node links") - return - } - actual, found := nodeLinks[link] - if !found { - t.Errorf("Expected to find Link `%s`\n\n[DEBUG]", link) - return - } - if actual == "" { - t.Errorf("Expected non-empty Link value for `%s`\n\n[DEBUG]", link) - } + require.NotNil(t, nodeLinks, "expected an initialized map for node links") + + require.Contains(t, nodeLinks, link) + require.NotEmpty(t, nodeLinks[link]) } diff --git a/client/fs_endpoint.go b/client/fs_endpoint.go index c694b9312bc..6c77be24627 100644 --- a/client/fs_endpoint.go +++ b/client/fs_endpoint.go @@ -98,10 +98,15 @@ func handleStreamResultError(err error, code *int64, encoder *codec.Encoder) { func (f *FileSystem) List(args *cstructs.FsListRequest, reply *cstructs.FsListResponse) error { defer metrics.MeasureSince([]string{"client", "file_system", "list"}, time.Now()) - // Check read permissions + alloc, err := f.c.GetAlloc(args.AllocID) + if err != nil { + return err + } + + // Check namespace read-fs permission. if aclObj, err := f.c.ResolveToken(args.QueryOptions.AuthToken); err != nil { return err - } else if aclObj != nil && !aclObj.AllowNsOp(args.Namespace, acl.NamespaceCapabilityReadFS) { + } else if aclObj != nil && !aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityReadFS) { return structs.ErrPermissionDenied } @@ -122,10 +127,15 @@ func (f *FileSystem) List(args *cstructs.FsListRequest, reply *cstructs.FsListRe func (f *FileSystem) Stat(args *cstructs.FsStatRequest, reply *cstructs.FsStatResponse) error { defer metrics.MeasureSince([]string{"client", "file_system", "stat"}, time.Now()) - // Check read permissions + alloc, err := f.c.GetAlloc(args.AllocID) + if err != nil { + return err + } + + // Check namespace read-fs permission. if aclObj, err := f.c.ResolveToken(args.QueryOptions.AuthToken); err != nil { return err - } else if aclObj != nil && !aclObj.AllowNsOp(args.Namespace, acl.NamespaceCapabilityReadFS) { + } else if aclObj != nil && !aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityReadFS) { return structs.ErrPermissionDenied } @@ -158,20 +168,26 @@ func (f *FileSystem) stream(conn io.ReadWriteCloser) { return } + if req.AllocID == "" { + handleStreamResultError(allocIDNotPresentErr, helper.Int64ToPtr(400), encoder) + return + } + alloc, err := f.c.GetAlloc(req.AllocID) + if err != nil { + handleStreamResultError(structs.NewErrUnknownAllocation(req.AllocID), helper.Int64ToPtr(404), encoder) + return + } + // Check read permissions if aclObj, err := f.c.ResolveToken(req.QueryOptions.AuthToken); err != nil { handleStreamResultError(err, helper.Int64ToPtr(403), encoder) return - } else if aclObj != nil && !aclObj.AllowNsOp(req.Namespace, acl.NamespaceCapabilityReadFS) { + } else if aclObj != nil && !aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityReadFS) { handleStreamResultError(structs.ErrPermissionDenied, helper.Int64ToPtr(403), encoder) return } // Validate the arguments - if req.AllocID == "" { - handleStreamResultError(allocIDNotPresentErr, helper.Int64ToPtr(400), encoder) - return - } if req.Path == "" { handleStreamResultError(pathNotPresentErr, helper.Int64ToPtr(400), encoder) return @@ -331,13 +347,23 @@ func (f *FileSystem) logs(conn io.ReadWriteCloser) { return } + if req.AllocID == "" { + handleStreamResultError(allocIDNotPresentErr, helper.Int64ToPtr(400), encoder) + return + } + alloc, err := f.c.GetAlloc(req.AllocID) + if err != nil { + handleStreamResultError(structs.NewErrUnknownAllocation(req.AllocID), helper.Int64ToPtr(404), encoder) + return + } + // Check read permissions if aclObj, err := f.c.ResolveToken(req.QueryOptions.AuthToken); err != nil { handleStreamResultError(err, nil, encoder) return } else if aclObj != nil { - readfs := aclObj.AllowNsOp(req.QueryOptions.Namespace, acl.NamespaceCapabilityReadFS) - logs := aclObj.AllowNsOp(req.QueryOptions.Namespace, acl.NamespaceCapabilityReadLogs) + readfs := aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityReadFS) + logs := aclObj.AllowNsOp(alloc.Namespace, acl.NamespaceCapabilityReadLogs) if !readfs && !logs { handleStreamResultError(structs.ErrPermissionDenied, nil, encoder) return @@ -345,10 +371,6 @@ func (f *FileSystem) logs(conn io.ReadWriteCloser) { } // Validate the arguments - if req.AllocID == "" { - handleStreamResultError(allocIDNotPresentErr, helper.Int64ToPtr(400), encoder) - return - } if req.Task == "" { handleStreamResultError(taskNotPresentErr, helper.Int64ToPtr(400), encoder) return diff --git a/client/fs_endpoint_test.go b/client/fs_endpoint_test.go index b7ccb9f46a6..0c82ada9a81 100644 --- a/client/fs_endpoint_test.go +++ b/client/fs_endpoint_test.go @@ -80,14 +80,14 @@ func TestFS_Stat(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() // Create and add an alloc job := mock.BatchJob() @@ -114,11 +114,10 @@ func TestFS_Stat(t *testing.T) { func TestFS_Stat_ACL(t *testing.T) { t.Parallel() - require := require.New(t) // Start a server - s, root := nomad.TestACLServer(t, nil) - defer s.Shutdown() + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) client, cleanup := TestClient(t, func(c *config.Config) { @@ -135,6 +134,15 @@ func TestFS_Stat_ACL(t *testing.T) { []string{acl.NamespaceCapabilityReadLogs, acl.NamespaceCapabilityReadFS}) tokenGood := mock.CreatePolicyAndToken(t, s.State(), 1009, "valid2", policyGood) + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, s.RPC, job, root.SecretID)[0] + cases := []struct { Name string Token string @@ -146,22 +154,19 @@ func TestFS_Stat_ACL(t *testing.T) { ExpectedError: structs.ErrPermissionDenied.Error(), }, { - Name: "good token", - Token: tokenGood.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + Name: "good token", + Token: tokenGood.SecretID, }, { - Name: "root token", - Token: root.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + Name: "root token", + Token: root.SecretID, }, } for _, c := range cases { t.Run(c.Name, func(t *testing.T) { - // Make the request with bad allocation id req := &cstructs.FsStatRequest{ - AllocID: uuid.Generate(), + AllocID: alloc.ID, Path: "/", QueryOptions: structs.QueryOptions{ Region: "global", @@ -172,8 +177,12 @@ func TestFS_Stat_ACL(t *testing.T) { var resp cstructs.FsStatResponse err := client.ClientRPC("FileSystem.Stat", req, &resp) - require.NotNil(err) - require.Contains(err.Error(), c.ExpectedError) + if c.ExpectedError == "" { + require.NoError(t, err) + } else { + require.NotNil(t, err) + require.Contains(t, err.Error(), c.ExpectedError) + } }) } } @@ -204,14 +213,14 @@ func TestFS_List(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() // Create and add an alloc job := mock.BatchJob() @@ -238,11 +247,10 @@ func TestFS_List(t *testing.T) { func TestFS_List_ACL(t *testing.T) { t.Parallel() - require := require.New(t) // Start a server - s, root := nomad.TestACLServer(t, nil) - defer s.Shutdown() + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) client, cleanup := TestClient(t, func(c *config.Config) { @@ -259,6 +267,15 @@ func TestFS_List_ACL(t *testing.T) { []string{acl.NamespaceCapabilityReadLogs, acl.NamespaceCapabilityReadFS}) tokenGood := mock.CreatePolicyAndToken(t, s.State(), 1009, "valid2", policyGood) + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, s.RPC, job, root.SecretID)[0] + cases := []struct { Name string Token string @@ -270,14 +287,12 @@ func TestFS_List_ACL(t *testing.T) { ExpectedError: structs.ErrPermissionDenied.Error(), }, { - Name: "good token", - Token: tokenGood.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + Name: "good token", + Token: tokenGood.SecretID, }, { - Name: "root token", - Token: root.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + Name: "root token", + Token: root.SecretID, }, } @@ -285,7 +300,7 @@ func TestFS_List_ACL(t *testing.T) { t.Run(c.Name, func(t *testing.T) { // Make the request with bad allocation id req := &cstructs.FsListRequest{ - AllocID: uuid.Generate(), + AllocID: alloc.ID, Path: "/", QueryOptions: structs.QueryOptions{ Region: "global", @@ -296,8 +311,11 @@ func TestFS_List_ACL(t *testing.T) { var resp cstructs.FsListResponse err := client.ClientRPC("FileSystem.List", req, &resp) - require.NotNil(err) - require.Contains(err.Error(), c.ExpectedError) + if c.ExpectedError == "" { + require.NoError(t, err) + } else { + require.EqualError(t, err, c.ExpectedError) + } }) } } @@ -379,11 +397,10 @@ OUTER: func TestFS_Stream_ACL(t *testing.T) { t.Parallel() - require := require.New(t) // Start a server - s, root := nomad.TestACLServer(t, nil) - defer s.Shutdown() + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) client, cleanup := TestClient(t, func(c *config.Config) { @@ -400,6 +417,15 @@ func TestFS_Stream_ACL(t *testing.T) { []string{acl.NamespaceCapabilityReadLogs, acl.NamespaceCapabilityReadFS}) tokenGood := mock.CreatePolicyAndToken(t, s.State(), 1009, "valid2", policyGood) + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, s.RPC, job, root.SecretID)[0] + cases := []struct { Name string Token string @@ -411,14 +437,12 @@ func TestFS_Stream_ACL(t *testing.T) { ExpectedError: structs.ErrPermissionDenied.Error(), }, { - Name: "good token", - Token: tokenGood.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + Name: "good token", + Token: tokenGood.SecretID, }, { - Name: "root token", - Token: root.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + Name: "root token", + Token: root.SecretID, }, } @@ -426,7 +450,7 @@ func TestFS_Stream_ACL(t *testing.T) { t.Run(c.Name, func(t *testing.T) { // Make the request with bad allocation id req := &cstructs.FsStreamRequest{ - AllocID: uuid.Generate(), + AllocID: alloc.ID, Path: "foo", Origin: "start", QueryOptions: structs.QueryOptions{ @@ -438,7 +462,7 @@ func TestFS_Stream_ACL(t *testing.T) { // Get the handler handler, err := client.StreamingRpcHandler("FileSystem.Stream") - require.Nil(err) + require.Nil(t, err) // Create a pipe p1, p2 := net.Pipe() @@ -457,10 +481,8 @@ func TestFS_Stream_ACL(t *testing.T) { for { var msg cstructs.StreamErrWrapper if err := decoder.Decode(&msg); err != nil { - if err == io.EOF || strings.Contains(err.Error(), "closed") { - return - } - errCh <- fmt.Errorf("error decoding: %v", err) + errCh <- err + return } streamMsg <- &msg @@ -469,7 +491,7 @@ func TestFS_Stream_ACL(t *testing.T) { // Send the request encoder := codec.NewEncoder(p1, structs.MsgpackHandle) - require.Nil(encoder.Encode(req)) + require.NoError(t, encoder.Encode(req)) timeout := time.After(5 * time.Second) @@ -479,6 +501,11 @@ func TestFS_Stream_ACL(t *testing.T) { case <-timeout: t.Fatal("timeout") case err := <-errCh: + eof := err == io.EOF || strings.Contains(err.Error(), "closed") + if c.ExpectedError == "" && eof { + // No error was expected! + return + } t.Fatal(err) case msg := <-streamMsg: if msg.Error == nil { @@ -501,14 +528,14 @@ func TestFS_Stream(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() expected := "Hello from the other side" job := mock.BatchJob() @@ -617,14 +644,14 @@ func TestFS_Stream_Follow(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() expectedBase := "Hello from the other side" repeat := 10 @@ -714,8 +741,8 @@ func TestFS_Stream_Limit(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) c, cleanup := TestClient(t, func(c *config.Config) { @@ -886,14 +913,14 @@ func TestFS_Logs_TaskPending(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() job := mock.BatchJob() job.TaskGroups[0].Count = 1 @@ -905,6 +932,7 @@ func TestFS_Logs_TaskPending(t *testing.T) { args := &structs.JobRegisterRequest{} args.Job = job args.WriteRequest.Region = "global" + args.Namespace = job.Namespace var jobResp structs.JobRegisterResponse require.NoError(s.RPC("Job.Register", args, &jobResp)) @@ -1000,8 +1028,8 @@ func TestFS_Logs_ACL(t *testing.T) { require := require.New(t) // Start a server - s, root := nomad.TestACLServer(t, nil) - defer s.Shutdown() + s, root, cleanupS := nomad.TestACLServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) client, cleanup := TestClient(t, func(c *config.Config) { @@ -1018,6 +1046,15 @@ func TestFS_Logs_ACL(t *testing.T) { []string{acl.NamespaceCapabilityReadLogs, acl.NamespaceCapabilityReadFS}) tokenGood := mock.CreatePolicyAndToken(t, s.State(), 1009, "valid2", policyGood) + job := mock.BatchJob() + job.TaskGroups[0].Count = 1 + job.TaskGroups[0].Tasks[0].Config = map[string]interface{}{ + "run_for": "20s", + } + + // Wait for client to be running job + alloc := testutil.WaitForRunningWithToken(t, s.RPC, job, root.SecretID)[0] + cases := []struct { Name string Token string @@ -1029,14 +1066,12 @@ func TestFS_Logs_ACL(t *testing.T) { ExpectedError: structs.ErrPermissionDenied.Error(), }, { - Name: "good token", - Token: tokenGood.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + Name: "good token", + Token: tokenGood.SecretID, }, { - Name: "root token", - Token: root.SecretID, - ExpectedError: structs.ErrUnknownAllocationPrefix, + Name: "root token", + Token: root.SecretID, }, } @@ -1044,8 +1079,8 @@ func TestFS_Logs_ACL(t *testing.T) { t.Run(c.Name, func(t *testing.T) { // Make the request with bad allocation id req := &cstructs.FsLogsRequest{ - AllocID: uuid.Generate(), - Task: "foo", + AllocID: alloc.ID, + Task: job.TaskGroups[0].Tasks[0].Name, LogType: "stdout", Origin: "start", QueryOptions: structs.QueryOptions{ @@ -1076,10 +1111,8 @@ func TestFS_Logs_ACL(t *testing.T) { for { var msg cstructs.StreamErrWrapper if err := decoder.Decode(&msg); err != nil { - if err == io.EOF || strings.Contains(err.Error(), "closed") { - return - } - errCh <- fmt.Errorf("error decoding: %v", err) + errCh <- err + return } streamMsg <- &msg @@ -1098,6 +1131,11 @@ func TestFS_Logs_ACL(t *testing.T) { case <-timeout: t.Fatal("timeout") case err := <-errCh: + eof := err == io.EOF || strings.Contains(err.Error(), "closed") + if c.ExpectedError == "" && eof { + // No error was expected! + return + } t.Fatal(err) case msg := <-streamMsg: if msg.Error == nil { @@ -1105,6 +1143,7 @@ func TestFS_Logs_ACL(t *testing.T) { } if strings.Contains(msg.Error.Error(), c.ExpectedError) { + // Ok! Error matched expectation. break OUTER } else { t.Fatalf("Bad error: %v", msg.Error) @@ -1120,14 +1159,14 @@ func TestFS_Logs(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() expected := "Hello from the other side\n" job := mock.BatchJob() @@ -1221,14 +1260,14 @@ func TestFS_Logs_Follow(t *testing.T) { require := require.New(t) // Start a server and client - s := nomad.TestServer(t, nil) - defer s.Shutdown() + s, cleanupS := nomad.TestServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, s.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() expectedBase := "Hello from the other side\n" repeat := 10 @@ -1845,13 +1884,14 @@ func TestFS_logsImpl_NoFollow(t *testing.T) { }() // Start streaming logs - go func() { - if err := c.endpoints.FileSystem.logsImpl( - context.Background(), false, false, 0, - OriginStart, task, logType, ad, frames); err != nil { - t.Fatalf("logs() failed: %v", err) - } - }() + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + + if err := c.endpoints.FileSystem.logsImpl( + ctx, false, false, 0, + OriginStart, task, logType, ad, frames); err != nil { + t.Fatalf("logsImpl failed: %v", err) + } select { case <-resultCh: diff --git a/client/gc_test.go b/client/gc_test.go index 101b91c4768..e1f12a689fd 100644 --- a/client/gc_test.go +++ b/client/gc_test.go @@ -351,8 +351,8 @@ func TestAllocGarbageCollector_MakeRoomFor_MaxAllocs(t *testing.T) { const maxAllocs = 6 require := require.New(t) - server, serverAddr := testServer(t, nil) - defer server.Shutdown() + server, serverAddr, cleanupS := testServer(t, nil) + defer cleanupS() testutil.WaitForLeader(t, server.RPC) client, cleanup := TestClient(t, func(c *config.Config) { diff --git a/client/logmon/client.go b/client/logmon/client.go index ae2a5c83bd6..fe1a26bb439 100644 --- a/client/logmon/client.go +++ b/client/logmon/client.go @@ -2,6 +2,7 @@ package logmon import ( "context" + "time" "github.com/hashicorp/nomad/client/logmon/proto" "github.com/hashicorp/nomad/helper/pluginutils/grpcutils" @@ -14,6 +15,8 @@ type logmonClient struct { doneCtx context.Context } +const logmonRPCTimeout = 1 * time.Minute + func (c *logmonClient) Start(cfg *LogConfig) error { req := &proto.StartRequest{ LogDir: cfg.LogDir, @@ -25,12 +28,18 @@ func (c *logmonClient) Start(cfg *LogConfig) error { StderrFifo: cfg.StderrFifo, FileExtension: cfg.FileExtension, } - _, err := c.client.Start(context.Background(), req) + ctx, cancel := context.WithTimeout(context.Background(), logmonRPCTimeout) + defer cancel() + + _, err := c.client.Start(ctx, req) return grpcutils.HandleGrpcErr(err, c.doneCtx) } func (c *logmonClient) Stop() error { req := &proto.StopRequest{} - _, err := c.client.Stop(context.Background(), req) + ctx, cancel := context.WithTimeout(context.Background(), logmonRPCTimeout) + defer cancel() + + _, err := c.client.Stop(ctx, req) return grpcutils.HandleGrpcErr(err, c.doneCtx) } diff --git a/client/logmon/logging/rotator.go b/client/logmon/logging/rotator.go index acfadb61def..b8526affb08 100644 --- a/client/logmon/logging/rotator.go +++ b/client/logmon/logging/rotator.go @@ -258,6 +258,7 @@ func (f *FileRotator) Close() error { f.doneCh <- struct{}{} close(f.purgeCh) f.closed = true + f.currentFile.Close() } return nil diff --git a/client/rpc.go b/client/rpc.go index beaec6f2cd7..b502587cf50 100644 --- a/client/rpc.go +++ b/client/rpc.go @@ -23,6 +23,7 @@ type rpcEndpoints struct { ClientStats *ClientStats FileSystem *FileSystem Allocations *Allocations + Agent *Agent } // ClientRPC is used to make a local, client only RPC call @@ -218,6 +219,7 @@ func (c *Client) setupClientRpc() { c.endpoints.ClientStats = &ClientStats{c} c.endpoints.FileSystem = NewFileSystemEndpoint(c) c.endpoints.Allocations = NewAllocationsEndpoint(c) + c.endpoints.Agent = NewAgentEndpoint(c) // Create the RPC Server c.rpcServer = rpc.NewServer() @@ -234,6 +236,7 @@ func (c *Client) setupClientRpcServer(server *rpc.Server) { server.Register(c.endpoints.ClientStats) server.Register(c.endpoints.FileSystem) server.Register(c.endpoints.Allocations) + server.Register(c.endpoints.Agent) } // rpcConnListener is a long lived function that listens for new connections diff --git a/client/rpc_test.go b/client/rpc_test.go index 404e47c1264..943ca6f1e61 100644 --- a/client/rpc_test.go +++ b/client/rpc_test.go @@ -15,14 +15,15 @@ import ( func TestRpc_streamingRpcConn_badEndpoint(t *testing.T) { t.Parallel() require := require.New(t) - s1 := nomad.TestServer(t, nil) - defer s1.Shutdown() + + s1, cleanupS1 := nomad.TestServer(t, nil) + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Servers = []string{s1.GetConfig().RPCAddr.String()} }) - defer cleanup() + defer cleanupC() // Wait for the client to connect testutil.WaitForResult(func() (bool, error) { @@ -59,7 +60,7 @@ func TestRpc_streamingRpcConn_badEndpoint_TLS(t *testing.T) { fookey = "../helper/tlsutil/testdata/nomad-foo-key.pem" ) - s1 := nomad.TestServer(t, func(c *nomad.Config) { + s1, cleanupS1 := nomad.TestServer(t, func(c *nomad.Config) { c.Region = "regionFoo" c.BootstrapExpect = 1 c.DevDisableBootstrap = true @@ -72,10 +73,10 @@ func TestRpc_streamingRpcConn_badEndpoint_TLS(t *testing.T) { KeyFile: fookey, } }) - defer s1.Shutdown() + defer cleanupS1() testutil.WaitForLeader(t, s1.RPC) - c, cleanup := TestClient(t, func(c *config.Config) { + c, cleanupC := TestClient(t, func(c *config.Config) { c.Region = "regionFoo" c.Servers = []string{s1.GetConfig().RPCAddr.String()} c.TLSConfig = &sconfig.TLSConfig{ @@ -87,7 +88,7 @@ func TestRpc_streamingRpcConn_badEndpoint_TLS(t *testing.T) { KeyFile: fookey, } }) - defer cleanup() + defer cleanupC() // Wait for the client to connect testutil.WaitForResult(func() (bool, error) { diff --git a/client/state/db_test.go b/client/state/db_test.go index 230c7ad869e..c37ed8bd27c 100644 --- a/client/state/db_test.go +++ b/client/state/db_test.go @@ -76,12 +76,6 @@ func TestStateDB_Allocations(t *testing.T) { alloc1 := mock.Alloc() alloc2 := mock.BatchAlloc() - //XXX Sadly roundtripping allocs loses time.Duration type - // information from the Config map[string]interface{}. As - // the mock driver itself with unmarshal run_for into the - // proper type, we can safely ignore it here. - delete(alloc2.Job.TaskGroups[0].Tasks[0].Config, "run_for") - require.NoError(db.PutAllocation(alloc1)) require.NoError(db.PutAllocation(alloc2)) diff --git a/client/state/state_database.go b/client/state/state_database.go index bb42a59ae0a..6d1e65fb297 100644 --- a/client/state/state_database.go +++ b/client/state/state_database.go @@ -6,6 +6,8 @@ import ( "path/filepath" "time" + "github.com/boltdb/bolt" + hclog "github.com/hashicorp/go-hclog" trstate "github.com/hashicorp/nomad/client/allocrunner/taskrunner/state" dmstate "github.com/hashicorp/nomad/client/devicemanager/state" @@ -120,9 +122,14 @@ func NewBoltStateDB(logger hclog.Logger, stateDir string) (StateDB, error) { } firstRun := fi == nil + // Timeout to force failure when accessing a data dir that is already in use + timeout := &bolt.Options{Timeout: 5 * time.Second} + // Create or open the boltdb state database - db, err := boltdd.Open(fn, 0600, nil) - if err != nil { + db, err := boltdd.Open(fn, 0600, timeout) + if err == bolt.ErrTimeout { + return nil, fmt.Errorf("timed out while opening database, is another Nomad process accessing data_dir %s?", stateDir) + } else if err != nil { return nil, fmt.Errorf("failed to create state database: %v", err) } @@ -200,6 +207,10 @@ func (s *BoltStateDB) getAllAllocations(tx *boltdd.Tx) ([]*structs.Allocation, m continue } + // Handle upgrade path + ae.Alloc.Canonicalize() + ae.Alloc.Job.Canonicalize() + allocs = append(allocs, ae.Alloc) } diff --git a/client/stats/host.go b/client/stats/host.go index c82676f4c8a..198cd7709a7 100644 --- a/client/stats/host.go +++ b/client/stats/host.go @@ -1,7 +1,6 @@ package stats import ( - "fmt" "math" "runtime" "sync" @@ -118,21 +117,25 @@ func (h *HostStatsCollector) collectLocked() error { // Determine up-time uptime, err := host.Uptime() if err != nil { - return fmt.Errorf("failed to collect uptime: %v", err) + h.logger.Error("failed to collect upstime stats", "error", err) + uptime = 0 } hs.Uptime = uptime // Collect memory stats mstats, err := h.collectMemoryStats() if err != nil { - return fmt.Errorf("failed to collect memory stats: %v", err) + h.logger.Error("failed to collect memory stats", "error", err) + mstats = &MemoryStats{} } hs.Memory = mstats // Collect cpu stats cpus, ticks, err := h.collectCPUStats() if err != nil { - return fmt.Errorf("failed to collect cpu stats: %v", err) + h.logger.Error("failed to collect cpu stats", "error", err) + cpus = []*CPUStats{} + ticks = 0 } hs.CPU = cpus hs.CPUTicksConsumed = ticks @@ -140,17 +143,19 @@ func (h *HostStatsCollector) collectLocked() error { // Collect disk stats diskStats, err := h.collectDiskStats() if err != nil { - return fmt.Errorf("error collecting disk stats: %v", err) + h.logger.Error("failed to collect disk stats", "error", err) + hs.DiskStats = []*DiskStats{} } hs.DiskStats = diskStats // Getting the disk stats for the allocation directory usage, err := disk.Usage(h.allocDir) if err != nil { - return fmt.Errorf("failed to find disk usage of alloc_dir %q: %v", h.allocDir, err) + h.logger.Error("failed to find disk usage of alloc", "alloc_dir", h.allocDir, "error", err) + hs.AllocDirStats = &DiskStats{} + } else { + hs.AllocDirStats = h.toDiskStats(usage, nil) } - hs.AllocDirStats = h.toDiskStats(usage, nil) - // Collect devices stats deviceStats := h.collectDeviceGroupStats() hs.DeviceStats = deviceStats diff --git a/client/structs/structs.generated.go b/client/structs/structs.generated.go new file mode 100644 index 00000000000..1361cd0eacd --- /dev/null +++ b/client/structs/structs.generated.go @@ -0,0 +1,9709 @@ +// +build codec_generated + +// Code generated by codecgen - DO NOT EDIT. + +package structs + +import ( + "errors" + pkg1_stats "github.com/hashicorp/nomad/client/stats" + pkg4_structs "github.com/hashicorp/nomad/nomad/structs" + pkg2_device "github.com/hashicorp/nomad/plugins/device" + pkg3_structs "github.com/hashicorp/nomad/plugins/shared/structs" + codec1978 "github.com/ugorji/go/codec" + "runtime" + "strconv" + "time" +) + +const ( + // ----- content types ---- + codecSelferCcUTF8102 = 1 + codecSelferCcRAW102 = 255 + // ----- value types used ---- + codecSelferValueTypeArray102 = 10 + codecSelferValueTypeMap102 = 9 + codecSelferValueTypeString102 = 6 + codecSelferValueTypeInt102 = 2 + codecSelferValueTypeUint102 = 3 + codecSelferValueTypeFloat102 = 4 + codecSelferBitsize102 = uint8(32 << (^uint(0) >> 63)) +) + +var ( + errCodecSelferOnlyMapOrArrayEncodeToStruct102 = errors.New(`only encoded map or array can be decoded into a struct`) +) + +type codecSelfer102 struct{} + +func init() { + if codec1978.GenVersion != 10 { + _, file, _, _ := runtime.Caller(0) + panic("codecgen version mismatch: current: 10, need " + strconv.FormatInt(int64(codec1978.GenVersion), 10) + ". Re-generate file: " + file) + } + if false { + var _ byte = 0 // reference the types, but skip this branch at build/run time + var v0 pkg1_stats.HostStats + var v1 pkg4_structs.QueryMeta + var v2 pkg2_device.DeviceGroupStats + var v3 pkg3_structs.StatValue + var v4 time.Time + _, _, _, _, _ = v0, v1, v2, v3, v4 + } +} + +func (x *RpcError) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(2) + } else { + r.WriteMapStart(2) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Message))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Message)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Message\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Message`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Message))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Message)) + } + } + } + var yyn6 bool + if x.Code == nil { + yyn6 = true + goto LABEL6 + } + LABEL6: + if yyr2 || yy2arr2 { + if yyn6 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.Code == nil { + r.EncodeNil() + } else { + yy7 := *x.Code + if false { + } else { + r.EncodeInt(int64(yy7)) + } + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Code\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Code`) + } + r.WriteMapElemValue() + if yyn6 { + r.EncodeNil() + } else { + if x.Code == nil { + r.EncodeNil() + } else { + yy9 := *x.Code + if false { + } else { + r.EncodeInt(int64(yy9)) + } + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *RpcError) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *RpcError) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "Message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = (string)(r.DecodeString()) + } + case "Code": + if r.TryDecodeAsNil() { + if true && x.Code != nil { + x.Code = nil + } + } else { + if x.Code == nil { + x.Code = new(int64) + } + + if false { + } else { + *x.Code = (int64)(r.DecodeInt64()) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *RpcError) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj7 int + var yyb7 bool + var yyhl7 bool = l >= 0 + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = (string)(r.DecodeString()) + } + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.Code != nil { + x.Code = nil + } + } else { + if x.Code == nil { + x.Code = new(int64) + } + + if false { + } else { + *x.Code = (int64)(r.DecodeInt64()) + } + } + for { + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj7-1, "") + } + r.ReadArrayEnd() +} + +func (x *ClientStatsResponse) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(4) + } else { + r.WriteMapStart(4) + } + var yyn3 bool + if x.HostStats == nil { + yyn3 = true + goto LABEL3 + } + LABEL3: + if yyr2 || yy2arr2 { + if yyn3 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.HostStats == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt4 := z.Extension(z.I2Rtid(x.HostStats)); yyxt4 != nil { + z.EncExtension(x.HostStats, yyxt4) + } else { + z.EncFallback(x.HostStats) + } + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"HostStats\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `HostStats`) + } + r.WriteMapElemValue() + if yyn3 { + r.EncodeNil() + } else { + if x.HostStats == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt5 := z.Extension(z.I2Rtid(x.HostStats)); yyxt5 != nil { + z.EncExtension(x.HostStats, yyxt5) + } else { + z.EncFallback(x.HostStats) + } + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.Index)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Index\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Index`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.Index)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt10 := z.Extension(z.I2Rtid(x.LastContact)); yyxt10 != nil { + z.EncExtension(x.LastContact, yyxt10) + } else { + r.EncodeInt(int64(x.LastContact)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"LastContact\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `LastContact`) + } + r.WriteMapElemValue() + if false { + } else if yyxt11 := z.Extension(z.I2Rtid(x.LastContact)); yyxt11 != nil { + z.EncExtension(x.LastContact, yyxt11) + } else { + r.EncodeInt(int64(x.LastContact)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.KnownLeader)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"KnownLeader\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `KnownLeader`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.KnownLeader)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *ClientStatsResponse) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *ClientStatsResponse) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "HostStats": + if r.TryDecodeAsNil() { + if true && x.HostStats != nil { + x.HostStats = nil + } + } else { + if x.HostStats == nil { + x.HostStats = new(pkg1_stats.HostStats) + } + + if false { + } else if yyxt5 := z.Extension(z.I2Rtid(x.HostStats)); yyxt5 != nil { + z.DecExtension(x.HostStats, yyxt5) + } else { + z.DecFallback(x.HostStats, false) + } + } + case "Index": + if r.TryDecodeAsNil() { + x.QueryMeta.Index = 0 + } else { + x.Index = (uint64)(r.DecodeUint64()) + } + case "LastContact": + if r.TryDecodeAsNil() { + x.QueryMeta.LastContact = 0 + } else { + if false { + } else if yyxt8 := z.Extension(z.I2Rtid(x.LastContact)); yyxt8 != nil { + z.DecExtension(x.LastContact, yyxt8) + } else { + x.LastContact = (time.Duration)(r.DecodeInt64()) + } + } + case "KnownLeader": + if r.TryDecodeAsNil() { + x.QueryMeta.KnownLeader = false + } else { + x.KnownLeader = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *ClientStatsResponse) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.HostStats != nil { + x.HostStats = nil + } + } else { + if x.HostStats == nil { + x.HostStats = new(pkg1_stats.HostStats) + } + + if false { + } else if yyxt12 := z.Extension(z.I2Rtid(x.HostStats)); yyxt12 != nil { + z.DecExtension(x.HostStats, yyxt12) + } else { + z.DecFallback(x.HostStats, false) + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.Index = 0 + } else { + x.Index = (uint64)(r.DecodeUint64()) + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.LastContact = 0 + } else { + if false { + } else if yyxt15 := z.Extension(z.I2Rtid(x.LastContact)); yyxt15 != nil { + z.DecExtension(x.LastContact, yyxt15) + } else { + x.LastContact = (time.Duration)(r.DecodeInt64()) + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.KnownLeader = false + } else { + x.KnownLeader = (bool)(r.DecodeBool()) + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj10-1, "") + } + r.ReadArrayEnd() +} + +func (x *MonitorRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(13) + } else { + r.WriteMapStart(13) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.LogLevel))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.LogLevel)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"LogLevel\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `LogLevel`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.LogLevel))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.LogLevel)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.LogJSON)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"LogJSON\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `LogJSON`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.LogJSON)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.NodeID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.NodeID)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"NodeID\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `NodeID`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.NodeID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.NodeID)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.ServerID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.ServerID)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"ServerID\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `ServerID`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.ServerID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.ServerID)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.PlainText)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"PlainText\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `PlainText`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.PlainText)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Region\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Region`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Namespace\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Namespace`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MinQueryIndex\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MinQueryIndex`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt28 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt28 != nil { + z.EncExtension(x.MaxQueryTime, yyxt28) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MaxQueryTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MaxQueryTime`) + } + r.WriteMapElemValue() + if false { + } else if yyxt29 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt29 != nil { + z.EncExtension(x.MaxQueryTime, yyxt29) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllowStale\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllowStale`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Prefix\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Prefix`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AuthToken\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AuthToken`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Forwarded\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Forwarded`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *MonitorRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *MonitorRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "LogLevel": + if r.TryDecodeAsNil() { + x.LogLevel = "" + } else { + x.LogLevel = (string)(r.DecodeString()) + } + case "LogJSON": + if r.TryDecodeAsNil() { + x.LogJSON = false + } else { + x.LogJSON = (bool)(r.DecodeBool()) + } + case "NodeID": + if r.TryDecodeAsNil() { + x.NodeID = "" + } else { + x.NodeID = (string)(r.DecodeString()) + } + case "ServerID": + if r.TryDecodeAsNil() { + x.ServerID = "" + } else { + x.ServerID = (string)(r.DecodeString()) + } + case "PlainText": + if r.TryDecodeAsNil() { + x.PlainText = false + } else { + x.PlainText = (bool)(r.DecodeBool()) + } + case "Region": + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + case "Namespace": + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + case "MinQueryIndex": + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + case "MaxQueryTime": + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt13 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt13 != nil { + z.DecExtension(x.MaxQueryTime, yyxt13) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + case "AllowStale": + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + case "Prefix": + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + case "AuthToken": + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + case "Forwarded": + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *MonitorRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj18 int + var yyb18 bool + var yyhl18 bool = l >= 0 + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.LogLevel = "" + } else { + x.LogLevel = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.LogJSON = false + } else { + x.LogJSON = (bool)(r.DecodeBool()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.NodeID = "" + } else { + x.NodeID = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.ServerID = "" + } else { + x.ServerID = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.PlainText = false + } else { + x.PlainText = (bool)(r.DecodeBool()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt28 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt28 != nil { + z.DecExtension(x.MaxQueryTime, yyxt28) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + for { + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj18-1, "") + } + r.ReadArrayEnd() +} + +func (x *AllocFileInfo) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + var yyq2 = [6]bool{ // should field at this index be written? + true, // Name + true, // IsDir + true, // Size + true, // FileMode + true, // ModTime + x.ContentType != "", // ContentType + } + _ = yyq2 + if yyr2 || yy2arr2 { + r.WriteArrayStart(6) + } else { + var yynn2 int + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.WriteMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Name))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Name)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Name\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Name`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Name))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Name)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.IsDir)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"IsDir\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `IsDir`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.IsDir)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeInt(int64(x.Size)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Size\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Size`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeInt(int64(x.Size)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.FileMode))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.FileMode)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"FileMode\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `FileMode`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.FileMode))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.FileMode)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if !z.EncBasicHandle().TimeNotBuiltin { + r.EncodeTime(x.ModTime) + } else if yyxt16 := z.Extension(z.I2Rtid(x.ModTime)); yyxt16 != nil { + z.EncExtension(x.ModTime, yyxt16) + } else if z.EncBinary() { + z.EncBinaryMarshal(x.ModTime) + } else if !z.EncBinary() && z.IsJSONHandle() { + z.EncJSONMarshal(x.ModTime) + } else { + z.EncFallback(x.ModTime) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"ModTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `ModTime`) + } + r.WriteMapElemValue() + if false { + } else if !z.EncBasicHandle().TimeNotBuiltin { + r.EncodeTime(x.ModTime) + } else if yyxt17 := z.Extension(z.I2Rtid(x.ModTime)); yyxt17 != nil { + z.EncExtension(x.ModTime, yyxt17) + } else if z.EncBinary() { + z.EncBinaryMarshal(x.ModTime) + } else if !z.EncBinary() && z.IsJSONHandle() { + z.EncJSONMarshal(x.ModTime) + } else { + z.EncFallback(x.ModTime) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if yyq2[5] { + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.ContentType))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.ContentType)) + } + } + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw([]byte{}) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, "") + } + } + } else { + if yyq2[5] { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"ContentType\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `ContentType`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.ContentType))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.ContentType)) + } + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *AllocFileInfo) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *AllocFileInfo) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "Name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = (string)(r.DecodeString()) + } + case "IsDir": + if r.TryDecodeAsNil() { + x.IsDir = false + } else { + x.IsDir = (bool)(r.DecodeBool()) + } + case "Size": + if r.TryDecodeAsNil() { + x.Size = 0 + } else { + x.Size = (int64)(r.DecodeInt64()) + } + case "FileMode": + if r.TryDecodeAsNil() { + x.FileMode = "" + } else { + x.FileMode = (string)(r.DecodeString()) + } + case "ModTime": + if r.TryDecodeAsNil() { + x.ModTime = time.Time{} + } else { + if false { + } else if !z.DecBasicHandle().TimeNotBuiltin { + x.ModTime = r.DecodeTime() + } else if yyxt9 := z.Extension(z.I2Rtid(x.ModTime)); yyxt9 != nil { + z.DecExtension(x.ModTime, yyxt9) + } else if z.DecBinary() { + z.DecBinaryUnmarshal(&x.ModTime) + } else if !z.DecBinary() && z.IsJSONHandle() { + z.DecJSONUnmarshal(&x.ModTime) + } else { + z.DecFallback(&x.ModTime, false) + } + } + case "ContentType": + if r.TryDecodeAsNil() { + x.ContentType = "" + } else { + x.ContentType = (string)(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *AllocFileInfo) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj11 int + var yyb11 bool + var yyhl11 bool = l >= 0 + yyj11++ + if yyhl11 { + yyb11 = yyj11 > l + } else { + yyb11 = r.CheckBreak() + } + if yyb11 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = (string)(r.DecodeString()) + } + yyj11++ + if yyhl11 { + yyb11 = yyj11 > l + } else { + yyb11 = r.CheckBreak() + } + if yyb11 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.IsDir = false + } else { + x.IsDir = (bool)(r.DecodeBool()) + } + yyj11++ + if yyhl11 { + yyb11 = yyj11 > l + } else { + yyb11 = r.CheckBreak() + } + if yyb11 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Size = 0 + } else { + x.Size = (int64)(r.DecodeInt64()) + } + yyj11++ + if yyhl11 { + yyb11 = yyj11 > l + } else { + yyb11 = r.CheckBreak() + } + if yyb11 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.FileMode = "" + } else { + x.FileMode = (string)(r.DecodeString()) + } + yyj11++ + if yyhl11 { + yyb11 = yyj11 > l + } else { + yyb11 = r.CheckBreak() + } + if yyb11 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.ModTime = time.Time{} + } else { + if false { + } else if !z.DecBasicHandle().TimeNotBuiltin { + x.ModTime = r.DecodeTime() + } else if yyxt17 := z.Extension(z.I2Rtid(x.ModTime)); yyxt17 != nil { + z.DecExtension(x.ModTime, yyxt17) + } else if z.DecBinary() { + z.DecBinaryUnmarshal(&x.ModTime) + } else if !z.DecBinary() && z.IsJSONHandle() { + z.DecJSONUnmarshal(&x.ModTime) + } else { + z.DecFallback(&x.ModTime, false) + } + } + yyj11++ + if yyhl11 { + yyb11 = yyj11 > l + } else { + yyb11 = r.CheckBreak() + } + if yyb11 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.ContentType = "" + } else { + x.ContentType = (string)(r.DecodeString()) + } + for { + yyj11++ + if yyhl11 { + yyb11 = yyj11 > l + } else { + yyb11 = r.CheckBreak() + } + if yyb11 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj11-1, "") + } + r.ReadArrayEnd() +} + +func (x *FsListRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(10) + } else { + r.WriteMapStart(10) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllocID\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllocID`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Path))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Path)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Path\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Path`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Path))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Path)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Region\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Region`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Namespace\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Namespace`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MinQueryIndex\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MinQueryIndex`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt19 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt19 != nil { + z.EncExtension(x.MaxQueryTime, yyxt19) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MaxQueryTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MaxQueryTime`) + } + r.WriteMapElemValue() + if false { + } else if yyxt20 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt20 != nil { + z.EncExtension(x.MaxQueryTime, yyxt20) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllowStale\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllowStale`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Prefix\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Prefix`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AuthToken\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AuthToken`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Forwarded\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Forwarded`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *FsListRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *FsListRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "AllocID": + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + case "Path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = (string)(r.DecodeString()) + } + case "Region": + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + case "Namespace": + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + case "MinQueryIndex": + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + case "MaxQueryTime": + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt10 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt10 != nil { + z.DecExtension(x.MaxQueryTime, yyxt10) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + case "AllowStale": + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + case "Prefix": + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + case "AuthToken": + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + case "Forwarded": + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *FsListRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj15 int + var yyb15 bool + var yyhl15 bool = l >= 0 + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt22 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt22 != nil { + z.DecExtension(x.MaxQueryTime, yyxt22) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + for { + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj15-1, "") + } + r.ReadArrayEnd() +} + +func (x *FsListResponse) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(4) + } else { + r.WriteMapStart(4) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.Files == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encSlicePtrtoAllocFileInfo(([]*AllocFileInfo)(x.Files), e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Files\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Files`) + } + r.WriteMapElemValue() + if x.Files == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encSlicePtrtoAllocFileInfo(([]*AllocFileInfo)(x.Files), e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.Index)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Index\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Index`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.Index)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt10 := z.Extension(z.I2Rtid(x.LastContact)); yyxt10 != nil { + z.EncExtension(x.LastContact, yyxt10) + } else { + r.EncodeInt(int64(x.LastContact)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"LastContact\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `LastContact`) + } + r.WriteMapElemValue() + if false { + } else if yyxt11 := z.Extension(z.I2Rtid(x.LastContact)); yyxt11 != nil { + z.EncExtension(x.LastContact, yyxt11) + } else { + r.EncodeInt(int64(x.LastContact)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.KnownLeader)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"KnownLeader\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `KnownLeader`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.KnownLeader)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *FsListResponse) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *FsListResponse) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "Files": + if r.TryDecodeAsNil() { + x.Files = nil + } else { + if false { + } else { + h.decSlicePtrtoAllocFileInfo((*[]*AllocFileInfo)(&x.Files), d) + } + } + case "Index": + if r.TryDecodeAsNil() { + x.QueryMeta.Index = 0 + } else { + x.Index = (uint64)(r.DecodeUint64()) + } + case "LastContact": + if r.TryDecodeAsNil() { + x.QueryMeta.LastContact = 0 + } else { + if false { + } else if yyxt8 := z.Extension(z.I2Rtid(x.LastContact)); yyxt8 != nil { + z.DecExtension(x.LastContact, yyxt8) + } else { + x.LastContact = (time.Duration)(r.DecodeInt64()) + } + } + case "KnownLeader": + if r.TryDecodeAsNil() { + x.QueryMeta.KnownLeader = false + } else { + x.KnownLeader = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *FsListResponse) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Files = nil + } else { + if false { + } else { + h.decSlicePtrtoAllocFileInfo((*[]*AllocFileInfo)(&x.Files), d) + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.Index = 0 + } else { + x.Index = (uint64)(r.DecodeUint64()) + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.LastContact = 0 + } else { + if false { + } else if yyxt15 := z.Extension(z.I2Rtid(x.LastContact)); yyxt15 != nil { + z.DecExtension(x.LastContact, yyxt15) + } else { + x.LastContact = (time.Duration)(r.DecodeInt64()) + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.KnownLeader = false + } else { + x.KnownLeader = (bool)(r.DecodeBool()) + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj10-1, "") + } + r.ReadArrayEnd() +} + +func (x *FsStatRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(10) + } else { + r.WriteMapStart(10) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllocID\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllocID`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Path))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Path)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Path\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Path`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Path))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Path)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Region\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Region`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Namespace\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Namespace`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MinQueryIndex\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MinQueryIndex`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt19 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt19 != nil { + z.EncExtension(x.MaxQueryTime, yyxt19) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MaxQueryTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MaxQueryTime`) + } + r.WriteMapElemValue() + if false { + } else if yyxt20 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt20 != nil { + z.EncExtension(x.MaxQueryTime, yyxt20) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllowStale\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllowStale`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Prefix\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Prefix`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AuthToken\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AuthToken`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Forwarded\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Forwarded`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *FsStatRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *FsStatRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "AllocID": + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + case "Path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = (string)(r.DecodeString()) + } + case "Region": + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + case "Namespace": + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + case "MinQueryIndex": + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + case "MaxQueryTime": + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt10 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt10 != nil { + z.DecExtension(x.MaxQueryTime, yyxt10) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + case "AllowStale": + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + case "Prefix": + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + case "AuthToken": + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + case "Forwarded": + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *FsStatRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj15 int + var yyb15 bool + var yyhl15 bool = l >= 0 + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt22 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt22 != nil { + z.DecExtension(x.MaxQueryTime, yyxt22) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + for { + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj15-1, "") + } + r.ReadArrayEnd() +} + +func (x *FsStatResponse) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(4) + } else { + r.WriteMapStart(4) + } + var yyn3 bool + if x.Info == nil { + yyn3 = true + goto LABEL3 + } + LABEL3: + if yyr2 || yy2arr2 { + if yyn3 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.Info == nil { + r.EncodeNil() + } else { + x.Info.CodecEncodeSelf(e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Info\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Info`) + } + r.WriteMapElemValue() + if yyn3 { + r.EncodeNil() + } else { + if x.Info == nil { + r.EncodeNil() + } else { + x.Info.CodecEncodeSelf(e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.Index)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Index\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Index`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.Index)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt10 := z.Extension(z.I2Rtid(x.LastContact)); yyxt10 != nil { + z.EncExtension(x.LastContact, yyxt10) + } else { + r.EncodeInt(int64(x.LastContact)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"LastContact\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `LastContact`) + } + r.WriteMapElemValue() + if false { + } else if yyxt11 := z.Extension(z.I2Rtid(x.LastContact)); yyxt11 != nil { + z.EncExtension(x.LastContact, yyxt11) + } else { + r.EncodeInt(int64(x.LastContact)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.KnownLeader)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"KnownLeader\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `KnownLeader`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.KnownLeader)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *FsStatResponse) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *FsStatResponse) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "Info": + if r.TryDecodeAsNil() { + if true && x.Info != nil { + x.Info = nil + } + } else { + if x.Info == nil { + x.Info = new(AllocFileInfo) + } + + x.Info.CodecDecodeSelf(d) + } + case "Index": + if r.TryDecodeAsNil() { + x.QueryMeta.Index = 0 + } else { + x.Index = (uint64)(r.DecodeUint64()) + } + case "LastContact": + if r.TryDecodeAsNil() { + x.QueryMeta.LastContact = 0 + } else { + if false { + } else if yyxt7 := z.Extension(z.I2Rtid(x.LastContact)); yyxt7 != nil { + z.DecExtension(x.LastContact, yyxt7) + } else { + x.LastContact = (time.Duration)(r.DecodeInt64()) + } + } + case "KnownLeader": + if r.TryDecodeAsNil() { + x.QueryMeta.KnownLeader = false + } else { + x.KnownLeader = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *FsStatResponse) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj9 int + var yyb9 bool + var yyhl9 bool = l >= 0 + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.Info != nil { + x.Info = nil + } + } else { + if x.Info == nil { + x.Info = new(AllocFileInfo) + } + + x.Info.CodecDecodeSelf(d) + } + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.Index = 0 + } else { + x.Index = (uint64)(r.DecodeUint64()) + } + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.LastContact = 0 + } else { + if false { + } else if yyxt13 := z.Extension(z.I2Rtid(x.LastContact)); yyxt13 != nil { + z.DecExtension(x.LastContact, yyxt13) + } else { + x.LastContact = (time.Duration)(r.DecodeInt64()) + } + } + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.KnownLeader = false + } else { + x.KnownLeader = (bool)(r.DecodeBool()) + } + for { + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj9-1, "") + } + r.ReadArrayEnd() +} + +func (x *FsStreamRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(15) + } else { + r.WriteMapStart(15) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllocID\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllocID`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Path))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Path)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Path\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Path`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Path))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Path)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeInt(int64(x.Offset)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Offset\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Offset`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeInt(int64(x.Offset)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Origin))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Origin)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Origin\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Origin`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Origin))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Origin)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.PlainText)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"PlainText\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `PlainText`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.PlainText)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeInt(int64(x.Limit)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Limit\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Limit`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeInt(int64(x.Limit)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Follow)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Follow\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Follow`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Follow)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Region\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Region`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Namespace\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Namespace`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MinQueryIndex\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MinQueryIndex`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt34 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt34 != nil { + z.EncExtension(x.MaxQueryTime, yyxt34) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MaxQueryTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MaxQueryTime`) + } + r.WriteMapElemValue() + if false { + } else if yyxt35 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt35 != nil { + z.EncExtension(x.MaxQueryTime, yyxt35) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllowStale\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllowStale`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Prefix\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Prefix`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AuthToken\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AuthToken`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Forwarded\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Forwarded`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *FsStreamRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *FsStreamRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "AllocID": + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + case "Path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = (string)(r.DecodeString()) + } + case "Offset": + if r.TryDecodeAsNil() { + x.Offset = 0 + } else { + x.Offset = (int64)(r.DecodeInt64()) + } + case "Origin": + if r.TryDecodeAsNil() { + x.Origin = "" + } else { + x.Origin = (string)(r.DecodeString()) + } + case "PlainText": + if r.TryDecodeAsNil() { + x.PlainText = false + } else { + x.PlainText = (bool)(r.DecodeBool()) + } + case "Limit": + if r.TryDecodeAsNil() { + x.Limit = 0 + } else { + x.Limit = (int64)(r.DecodeInt64()) + } + case "Follow": + if r.TryDecodeAsNil() { + x.Follow = false + } else { + x.Follow = (bool)(r.DecodeBool()) + } + case "Region": + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + case "Namespace": + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + case "MinQueryIndex": + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + case "MaxQueryTime": + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt15 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt15 != nil { + z.DecExtension(x.MaxQueryTime, yyxt15) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + case "AllowStale": + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + case "Prefix": + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + case "AuthToken": + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + case "Forwarded": + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *FsStreamRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj20 int + var yyb20 bool + var yyhl20 bool = l >= 0 + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Offset = 0 + } else { + x.Offset = (int64)(r.DecodeInt64()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Origin = "" + } else { + x.Origin = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.PlainText = false + } else { + x.PlainText = (bool)(r.DecodeBool()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Limit = 0 + } else { + x.Limit = (int64)(r.DecodeInt64()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Follow = false + } else { + x.Follow = (bool)(r.DecodeBool()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt32 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt32 != nil { + z.DecExtension(x.MaxQueryTime, yyxt32) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + for { + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj20-1, "") + } + r.ReadArrayEnd() +} + +func (x *FsLogsRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(15) + } else { + r.WriteMapStart(15) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllocID\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllocID`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Task))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Task)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Task\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Task`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Task))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Task)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.LogType))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.LogType)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"LogType\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `LogType`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.LogType))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.LogType)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeInt(int64(x.Offset)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Offset\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Offset`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeInt(int64(x.Offset)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Origin))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Origin)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Origin\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Origin`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Origin))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Origin)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.PlainText)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"PlainText\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `PlainText`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.PlainText)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Follow)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Follow\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Follow`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Follow)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Region\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Region`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Namespace\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Namespace`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MinQueryIndex\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MinQueryIndex`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt34 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt34 != nil { + z.EncExtension(x.MaxQueryTime, yyxt34) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MaxQueryTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MaxQueryTime`) + } + r.WriteMapElemValue() + if false { + } else if yyxt35 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt35 != nil { + z.EncExtension(x.MaxQueryTime, yyxt35) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllowStale\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllowStale`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Prefix\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Prefix`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AuthToken\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AuthToken`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Forwarded\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Forwarded`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *FsLogsRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *FsLogsRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "AllocID": + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + case "Task": + if r.TryDecodeAsNil() { + x.Task = "" + } else { + x.Task = (string)(r.DecodeString()) + } + case "LogType": + if r.TryDecodeAsNil() { + x.LogType = "" + } else { + x.LogType = (string)(r.DecodeString()) + } + case "Offset": + if r.TryDecodeAsNil() { + x.Offset = 0 + } else { + x.Offset = (int64)(r.DecodeInt64()) + } + case "Origin": + if r.TryDecodeAsNil() { + x.Origin = "" + } else { + x.Origin = (string)(r.DecodeString()) + } + case "PlainText": + if r.TryDecodeAsNil() { + x.PlainText = false + } else { + x.PlainText = (bool)(r.DecodeBool()) + } + case "Follow": + if r.TryDecodeAsNil() { + x.Follow = false + } else { + x.Follow = (bool)(r.DecodeBool()) + } + case "Region": + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + case "Namespace": + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + case "MinQueryIndex": + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + case "MaxQueryTime": + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt15 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt15 != nil { + z.DecExtension(x.MaxQueryTime, yyxt15) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + case "AllowStale": + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + case "Prefix": + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + case "AuthToken": + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + case "Forwarded": + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *FsLogsRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj20 int + var yyb20 bool + var yyhl20 bool = l >= 0 + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Task = "" + } else { + x.Task = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.LogType = "" + } else { + x.LogType = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Offset = 0 + } else { + x.Offset = (int64)(r.DecodeInt64()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Origin = "" + } else { + x.Origin = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.PlainText = false + } else { + x.PlainText = (bool)(r.DecodeBool()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Follow = false + } else { + x.Follow = (bool)(r.DecodeBool()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt32 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt32 != nil { + z.DecExtension(x.MaxQueryTime, yyxt32) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + for { + yyj20++ + if yyhl20 { + yyb20 = yyj20 > l + } else { + yyb20 = r.CheckBreak() + } + if yyb20 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj20-1, "") + } + r.ReadArrayEnd() +} + +func (x *StreamErrWrapper) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(2) + } else { + r.WriteMapStart(2) + } + var yyn3 bool + if x.Error == nil { + yyn3 = true + goto LABEL3 + } + LABEL3: + if yyr2 || yy2arr2 { + if yyn3 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.Error == nil { + r.EncodeNil() + } else { + x.Error.CodecEncodeSelf(e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Error\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Error`) + } + r.WriteMapElemValue() + if yyn3 { + r.EncodeNil() + } else { + if x.Error == nil { + r.EncodeNil() + } else { + x.Error.CodecEncodeSelf(e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.Payload == nil { + r.EncodeNil() + } else { + if false { + } else { + r.EncodeStringBytesRaw([]byte(x.Payload)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Payload\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Payload`) + } + r.WriteMapElemValue() + if x.Payload == nil { + r.EncodeNil() + } else { + if false { + } else { + r.EncodeStringBytesRaw([]byte(x.Payload)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *StreamErrWrapper) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *StreamErrWrapper) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "Error": + if r.TryDecodeAsNil() { + if true && x.Error != nil { + x.Error = nil + } + } else { + if x.Error == nil { + x.Error = new(RpcError) + } + + x.Error.CodecDecodeSelf(d) + } + case "Payload": + if r.TryDecodeAsNil() { + x.Payload = nil + } else { + if false { + } else { + x.Payload = r.DecodeBytes(([]byte)(x.Payload), false) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *StreamErrWrapper) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj7 int + var yyb7 bool + var yyhl7 bool = l >= 0 + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.Error != nil { + x.Error = nil + } + } else { + if x.Error == nil { + x.Error = new(RpcError) + } + + x.Error.CodecDecodeSelf(d) + } + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Payload = nil + } else { + if false { + } else { + x.Payload = r.DecodeBytes(([]byte)(x.Payload), false) + } + } + for { + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj7-1, "") + } + r.ReadArrayEnd() +} + +func (x *AllocExecRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(12) + } else { + r.WriteMapStart(12) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllocID\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllocID`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Task))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Task)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Task\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Task`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Task))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Task)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Tty)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Tty\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Tty`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Tty)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.Cmd == nil { + r.EncodeNil() + } else { + if false { + } else { + z.F.EncSliceStringV(x.Cmd, e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Cmd\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Cmd`) + } + r.WriteMapElemValue() + if x.Cmd == nil { + r.EncodeNil() + } else { + if false { + } else { + z.F.EncSliceStringV(x.Cmd, e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Region\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Region`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Namespace\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Namespace`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MinQueryIndex\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MinQueryIndex`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt25 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt25 != nil { + z.EncExtension(x.MaxQueryTime, yyxt25) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MaxQueryTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MaxQueryTime`) + } + r.WriteMapElemValue() + if false { + } else if yyxt26 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt26 != nil { + z.EncExtension(x.MaxQueryTime, yyxt26) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllowStale\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllowStale`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Prefix\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Prefix`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AuthToken\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AuthToken`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Forwarded\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Forwarded`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *AllocExecRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *AllocExecRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "AllocID": + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + case "Task": + if r.TryDecodeAsNil() { + x.Task = "" + } else { + x.Task = (string)(r.DecodeString()) + } + case "Tty": + if r.TryDecodeAsNil() { + x.Tty = false + } else { + x.Tty = (bool)(r.DecodeBool()) + } + case "Cmd": + if r.TryDecodeAsNil() { + x.Cmd = nil + } else { + if false { + } else { + z.F.DecSliceStringX(&x.Cmd, d) + } + } + case "Region": + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + case "Namespace": + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + case "MinQueryIndex": + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + case "MaxQueryTime": + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt13 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt13 != nil { + z.DecExtension(x.MaxQueryTime, yyxt13) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + case "AllowStale": + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + case "Prefix": + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + case "AuthToken": + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + case "Forwarded": + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *AllocExecRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj18 int + var yyb18 bool + var yyhl18 bool = l >= 0 + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Task = "" + } else { + x.Task = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Tty = false + } else { + x.Tty = (bool)(r.DecodeBool()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Cmd = nil + } else { + if false { + } else { + z.F.DecSliceStringX(&x.Cmd, d) + } + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt28 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt28 != nil { + z.DecExtension(x.MaxQueryTime, yyxt28) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + for { + yyj18++ + if yyhl18 { + yyb18 = yyj18 > l + } else { + yyb18 = r.CheckBreak() + } + if yyb18 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj18-1, "") + } + r.ReadArrayEnd() +} + +func (x *AllocStatsRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(10) + } else { + r.WriteMapStart(10) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllocID\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllocID`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AllocID))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AllocID)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Task))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Task)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Task\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Task`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Task))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Task)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Region\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Region`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Region))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Region)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Namespace\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Namespace`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Namespace))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MinQueryIndex\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MinQueryIndex`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.MinQueryIndex)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt19 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt19 != nil { + z.EncExtension(x.MaxQueryTime, yyxt19) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MaxQueryTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MaxQueryTime`) + } + r.WriteMapElemValue() + if false { + } else if yyxt20 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt20 != nil { + z.EncExtension(x.MaxQueryTime, yyxt20) + } else { + r.EncodeInt(int64(x.MaxQueryTime)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AllowStale\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AllowStale`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.AllowStale)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Prefix\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Prefix`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.Prefix))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.Prefix)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"AuthToken\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `AuthToken`) + } + r.WriteMapElemValue() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(x.AuthToken))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(x.AuthToken)) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Forwarded\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Forwarded`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Forwarded)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *AllocStatsRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *AllocStatsRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "AllocID": + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + case "Task": + if r.TryDecodeAsNil() { + x.Task = "" + } else { + x.Task = (string)(r.DecodeString()) + } + case "Region": + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + case "Namespace": + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + case "MinQueryIndex": + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + case "MaxQueryTime": + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt10 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt10 != nil { + z.DecExtension(x.MaxQueryTime, yyxt10) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + case "AllowStale": + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + case "Prefix": + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + case "AuthToken": + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + case "Forwarded": + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *AllocStatsRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj15 int + var yyb15 bool + var yyhl15 bool = l >= 0 + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.AllocID = "" + } else { + x.AllocID = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Task = "" + } else { + x.Task = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Region = "" + } else { + x.Region = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Namespace = "" + } else { + x.Namespace = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MinQueryIndex = 0 + } else { + x.MinQueryIndex = (uint64)(r.DecodeUint64()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.MaxQueryTime = 0 + } else { + if false { + } else if yyxt22 := z.Extension(z.I2Rtid(x.MaxQueryTime)); yyxt22 != nil { + z.DecExtension(x.MaxQueryTime, yyxt22) + } else { + x.MaxQueryTime = (time.Duration)(r.DecodeInt64()) + } + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AllowStale = false + } else { + x.AllowStale = (bool)(r.DecodeBool()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.Prefix = "" + } else { + x.Prefix = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.AuthToken = "" + } else { + x.AuthToken = (string)(r.DecodeString()) + } + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryOptions.InternalRpcInfo.Forwarded = false + } else { + x.Forwarded = (bool)(r.DecodeBool()) + } + for { + yyj15++ + if yyhl15 { + yyb15 = yyj15 > l + } else { + yyb15 = r.CheckBreak() + } + if yyb15 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj15-1, "") + } + r.ReadArrayEnd() +} + +func (x *AllocStatsResponse) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(4) + } else { + r.WriteMapStart(4) + } + var yyn3 bool + if x.Stats == nil { + yyn3 = true + goto LABEL3 + } + LABEL3: + if yyr2 || yy2arr2 { + if yyn3 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.Stats == nil { + r.EncodeNil() + } else { + x.Stats.CodecEncodeSelf(e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Stats\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Stats`) + } + r.WriteMapElemValue() + if yyn3 { + r.EncodeNil() + } else { + if x.Stats == nil { + r.EncodeNil() + } else { + x.Stats.CodecEncodeSelf(e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.Index)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Index\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Index`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.Index)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt10 := z.Extension(z.I2Rtid(x.LastContact)); yyxt10 != nil { + z.EncExtension(x.LastContact, yyxt10) + } else { + r.EncodeInt(int64(x.LastContact)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"LastContact\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `LastContact`) + } + r.WriteMapElemValue() + if false { + } else if yyxt11 := z.Extension(z.I2Rtid(x.LastContact)); yyxt11 != nil { + z.EncExtension(x.LastContact, yyxt11) + } else { + r.EncodeInt(int64(x.LastContact)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.KnownLeader)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"KnownLeader\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `KnownLeader`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.KnownLeader)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *AllocStatsResponse) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *AllocStatsResponse) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "Stats": + if r.TryDecodeAsNil() { + if true && x.Stats != nil { + x.Stats = nil + } + } else { + if x.Stats == nil { + x.Stats = new(AllocResourceUsage) + } + + x.Stats.CodecDecodeSelf(d) + } + case "Index": + if r.TryDecodeAsNil() { + x.QueryMeta.Index = 0 + } else { + x.Index = (uint64)(r.DecodeUint64()) + } + case "LastContact": + if r.TryDecodeAsNil() { + x.QueryMeta.LastContact = 0 + } else { + if false { + } else if yyxt7 := z.Extension(z.I2Rtid(x.LastContact)); yyxt7 != nil { + z.DecExtension(x.LastContact, yyxt7) + } else { + x.LastContact = (time.Duration)(r.DecodeInt64()) + } + } + case "KnownLeader": + if r.TryDecodeAsNil() { + x.QueryMeta.KnownLeader = false + } else { + x.KnownLeader = (bool)(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *AllocStatsResponse) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj9 int + var yyb9 bool + var yyhl9 bool = l >= 0 + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.Stats != nil { + x.Stats = nil + } + } else { + if x.Stats == nil { + x.Stats = new(AllocResourceUsage) + } + + x.Stats.CodecDecodeSelf(d) + } + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.Index = 0 + } else { + x.Index = (uint64)(r.DecodeUint64()) + } + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.LastContact = 0 + } else { + if false { + } else if yyxt13 := z.Extension(z.I2Rtid(x.LastContact)); yyxt13 != nil { + z.DecExtension(x.LastContact, yyxt13) + } else { + x.LastContact = (time.Duration)(r.DecodeInt64()) + } + } + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.QueryMeta.KnownLeader = false + } else { + x.KnownLeader = (bool)(r.DecodeBool()) + } + for { + yyj9++ + if yyhl9 { + yyb9 = yyj9 > l + } else { + yyb9 = r.CheckBreak() + } + if yyb9 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj9-1, "") + } + r.ReadArrayEnd() +} + +func (x *MemoryStats) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(8) + } else { + r.WriteMapStart(8) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.RSS)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"RSS\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `RSS`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.RSS)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.Cache)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Cache\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Cache`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.Cache)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.Swap)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Swap\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Swap`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.Swap)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.Usage)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Usage\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Usage`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.Usage)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.MaxUsage)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MaxUsage\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MaxUsage`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.MaxUsage)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.KernelUsage)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"KernelUsage\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `KernelUsage`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.KernelUsage)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.KernelMaxUsage)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"KernelMaxUsage\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `KernelMaxUsage`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.KernelMaxUsage)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.Measured == nil { + r.EncodeNil() + } else { + if false { + } else { + z.F.EncSliceStringV(x.Measured, e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Measured\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Measured`) + } + r.WriteMapElemValue() + if x.Measured == nil { + r.EncodeNil() + } else { + if false { + } else { + z.F.EncSliceStringV(x.Measured, e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *MemoryStats) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *MemoryStats) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "RSS": + if r.TryDecodeAsNil() { + x.RSS = 0 + } else { + x.RSS = (uint64)(r.DecodeUint64()) + } + case "Cache": + if r.TryDecodeAsNil() { + x.Cache = 0 + } else { + x.Cache = (uint64)(r.DecodeUint64()) + } + case "Swap": + if r.TryDecodeAsNil() { + x.Swap = 0 + } else { + x.Swap = (uint64)(r.DecodeUint64()) + } + case "Usage": + if r.TryDecodeAsNil() { + x.Usage = 0 + } else { + x.Usage = (uint64)(r.DecodeUint64()) + } + case "MaxUsage": + if r.TryDecodeAsNil() { + x.MaxUsage = 0 + } else { + x.MaxUsage = (uint64)(r.DecodeUint64()) + } + case "KernelUsage": + if r.TryDecodeAsNil() { + x.KernelUsage = 0 + } else { + x.KernelUsage = (uint64)(r.DecodeUint64()) + } + case "KernelMaxUsage": + if r.TryDecodeAsNil() { + x.KernelMaxUsage = 0 + } else { + x.KernelMaxUsage = (uint64)(r.DecodeUint64()) + } + case "Measured": + if r.TryDecodeAsNil() { + x.Measured = nil + } else { + if false { + } else { + z.F.DecSliceStringX(&x.Measured, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *MemoryStats) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj13 int + var yyb13 bool + var yyhl13 bool = l >= 0 + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.RSS = 0 + } else { + x.RSS = (uint64)(r.DecodeUint64()) + } + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Cache = 0 + } else { + x.Cache = (uint64)(r.DecodeUint64()) + } + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Swap = 0 + } else { + x.Swap = (uint64)(r.DecodeUint64()) + } + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Usage = 0 + } else { + x.Usage = (uint64)(r.DecodeUint64()) + } + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.MaxUsage = 0 + } else { + x.MaxUsage = (uint64)(r.DecodeUint64()) + } + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.KernelUsage = 0 + } else { + x.KernelUsage = (uint64)(r.DecodeUint64()) + } + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.KernelMaxUsage = 0 + } else { + x.KernelMaxUsage = (uint64)(r.DecodeUint64()) + } + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Measured = nil + } else { + if false { + } else { + z.F.DecSliceStringX(&x.Measured, d) + } + } + for { + yyj13++ + if yyhl13 { + yyb13 = yyj13 > l + } else { + yyb13 = r.CheckBreak() + } + if yyb13 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj13-1, "") + } + r.ReadArrayEnd() +} + +func (x *CpuStats) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(7) + } else { + r.WriteMapStart(7) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeFloat64(float64(x.SystemMode)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"SystemMode\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `SystemMode`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeFloat64(float64(x.SystemMode)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeFloat64(float64(x.UserMode)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"UserMode\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `UserMode`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeFloat64(float64(x.UserMode)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeFloat64(float64(x.TotalTicks)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"TotalTicks\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `TotalTicks`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeFloat64(float64(x.TotalTicks)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.ThrottledPeriods)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"ThrottledPeriods\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `ThrottledPeriods`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.ThrottledPeriods)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeUint(uint64(x.ThrottledTime)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"ThrottledTime\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `ThrottledTime`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeUint(uint64(x.ThrottledTime)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeFloat64(float64(x.Percent)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Percent\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Percent`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeFloat64(float64(x.Percent)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.Measured == nil { + r.EncodeNil() + } else { + if false { + } else { + z.F.EncSliceStringV(x.Measured, e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Measured\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Measured`) + } + r.WriteMapElemValue() + if x.Measured == nil { + r.EncodeNil() + } else { + if false { + } else { + z.F.EncSliceStringV(x.Measured, e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *CpuStats) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *CpuStats) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "SystemMode": + if r.TryDecodeAsNil() { + x.SystemMode = 0 + } else { + x.SystemMode = (float64)(r.DecodeFloat64()) + } + case "UserMode": + if r.TryDecodeAsNil() { + x.UserMode = 0 + } else { + x.UserMode = (float64)(r.DecodeFloat64()) + } + case "TotalTicks": + if r.TryDecodeAsNil() { + x.TotalTicks = 0 + } else { + x.TotalTicks = (float64)(r.DecodeFloat64()) + } + case "ThrottledPeriods": + if r.TryDecodeAsNil() { + x.ThrottledPeriods = 0 + } else { + x.ThrottledPeriods = (uint64)(r.DecodeUint64()) + } + case "ThrottledTime": + if r.TryDecodeAsNil() { + x.ThrottledTime = 0 + } else { + x.ThrottledTime = (uint64)(r.DecodeUint64()) + } + case "Percent": + if r.TryDecodeAsNil() { + x.Percent = 0 + } else { + x.Percent = (float64)(r.DecodeFloat64()) + } + case "Measured": + if r.TryDecodeAsNil() { + x.Measured = nil + } else { + if false { + } else { + z.F.DecSliceStringX(&x.Measured, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *CpuStats) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj12 int + var yyb12 bool + var yyhl12 bool = l >= 0 + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.SystemMode = 0 + } else { + x.SystemMode = (float64)(r.DecodeFloat64()) + } + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.UserMode = 0 + } else { + x.UserMode = (float64)(r.DecodeFloat64()) + } + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.TotalTicks = 0 + } else { + x.TotalTicks = (float64)(r.DecodeFloat64()) + } + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.ThrottledPeriods = 0 + } else { + x.ThrottledPeriods = (uint64)(r.DecodeUint64()) + } + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.ThrottledTime = 0 + } else { + x.ThrottledTime = (uint64)(r.DecodeUint64()) + } + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Percent = 0 + } else { + x.Percent = (float64)(r.DecodeFloat64()) + } + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Measured = nil + } else { + if false { + } else { + z.F.DecSliceStringX(&x.Measured, d) + } + } + for { + yyj12++ + if yyhl12 { + yyb12 = yyj12 > l + } else { + yyb12 = r.CheckBreak() + } + if yyb12 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj12-1, "") + } + r.ReadArrayEnd() +} + +func (x *ResourceUsage) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(3) + } else { + r.WriteMapStart(3) + } + var yyn3 bool + if x.MemoryStats == nil { + yyn3 = true + goto LABEL3 + } + LABEL3: + if yyr2 || yy2arr2 { + if yyn3 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.MemoryStats == nil { + r.EncodeNil() + } else { + x.MemoryStats.CodecEncodeSelf(e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"MemoryStats\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `MemoryStats`) + } + r.WriteMapElemValue() + if yyn3 { + r.EncodeNil() + } else { + if x.MemoryStats == nil { + r.EncodeNil() + } else { + x.MemoryStats.CodecEncodeSelf(e) + } + } + } + var yyn6 bool + if x.CpuStats == nil { + yyn6 = true + goto LABEL6 + } + LABEL6: + if yyr2 || yy2arr2 { + if yyn6 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.CpuStats == nil { + r.EncodeNil() + } else { + x.CpuStats.CodecEncodeSelf(e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"CpuStats\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `CpuStats`) + } + r.WriteMapElemValue() + if yyn6 { + r.EncodeNil() + } else { + if x.CpuStats == nil { + r.EncodeNil() + } else { + x.CpuStats.CodecEncodeSelf(e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.DeviceStats == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encSlicePtrtodevice_DeviceGroupStats(([]*pkg2_device.DeviceGroupStats)(x.DeviceStats), e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"DeviceStats\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `DeviceStats`) + } + r.WriteMapElemValue() + if x.DeviceStats == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encSlicePtrtodevice_DeviceGroupStats(([]*pkg2_device.DeviceGroupStats)(x.DeviceStats), e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *ResourceUsage) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *ResourceUsage) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "MemoryStats": + if r.TryDecodeAsNil() { + if true && x.MemoryStats != nil { + x.MemoryStats = nil + } + } else { + if x.MemoryStats == nil { + x.MemoryStats = new(MemoryStats) + } + + x.MemoryStats.CodecDecodeSelf(d) + } + case "CpuStats": + if r.TryDecodeAsNil() { + if true && x.CpuStats != nil { + x.CpuStats = nil + } + } else { + if x.CpuStats == nil { + x.CpuStats = new(CpuStats) + } + + x.CpuStats.CodecDecodeSelf(d) + } + case "DeviceStats": + if r.TryDecodeAsNil() { + x.DeviceStats = nil + } else { + if false { + } else { + h.decSlicePtrtodevice_DeviceGroupStats((*[]*pkg2_device.DeviceGroupStats)(&x.DeviceStats), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *ResourceUsage) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.MemoryStats != nil { + x.MemoryStats = nil + } + } else { + if x.MemoryStats == nil { + x.MemoryStats = new(MemoryStats) + } + + x.MemoryStats.CodecDecodeSelf(d) + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.CpuStats != nil { + x.CpuStats = nil + } + } else { + if x.CpuStats == nil { + x.CpuStats = new(CpuStats) + } + + x.CpuStats.CodecDecodeSelf(d) + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.DeviceStats = nil + } else { + if false { + } else { + h.decSlicePtrtodevice_DeviceGroupStats((*[]*pkg2_device.DeviceGroupStats)(&x.DeviceStats), d) + } + } + for { + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj8-1, "") + } + r.ReadArrayEnd() +} + +func (x *TaskResourceUsage) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(3) + } else { + r.WriteMapStart(3) + } + var yyn3 bool + if x.ResourceUsage == nil { + yyn3 = true + goto LABEL3 + } + LABEL3: + if yyr2 || yy2arr2 { + if yyn3 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.ResourceUsage == nil { + r.EncodeNil() + } else { + x.ResourceUsage.CodecEncodeSelf(e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"ResourceUsage\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `ResourceUsage`) + } + r.WriteMapElemValue() + if yyn3 { + r.EncodeNil() + } else { + if x.ResourceUsage == nil { + r.EncodeNil() + } else { + x.ResourceUsage.CodecEncodeSelf(e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeInt(int64(x.Timestamp)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Timestamp\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Timestamp`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeInt(int64(x.Timestamp)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.Pids == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encMapstringPtrtoResourceUsage((map[string]*ResourceUsage)(x.Pids), e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Pids\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Pids`) + } + r.WriteMapElemValue() + if x.Pids == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encMapstringPtrtoResourceUsage((map[string]*ResourceUsage)(x.Pids), e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *TaskResourceUsage) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *TaskResourceUsage) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "ResourceUsage": + if r.TryDecodeAsNil() { + if true && x.ResourceUsage != nil { + x.ResourceUsage = nil + } + } else { + if x.ResourceUsage == nil { + x.ResourceUsage = new(ResourceUsage) + } + + x.ResourceUsage.CodecDecodeSelf(d) + } + case "Timestamp": + if r.TryDecodeAsNil() { + x.Timestamp = 0 + } else { + x.Timestamp = (int64)(r.DecodeInt64()) + } + case "Pids": + if r.TryDecodeAsNil() { + x.Pids = nil + } else { + if false { + } else { + h.decMapstringPtrtoResourceUsage((*map[string]*ResourceUsage)(&x.Pids), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *TaskResourceUsage) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.ResourceUsage != nil { + x.ResourceUsage = nil + } + } else { + if x.ResourceUsage == nil { + x.ResourceUsage = new(ResourceUsage) + } + + x.ResourceUsage.CodecDecodeSelf(d) + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Timestamp = 0 + } else { + x.Timestamp = (int64)(r.DecodeInt64()) + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Pids = nil + } else { + if false { + } else { + h.decMapstringPtrtoResourceUsage((*map[string]*ResourceUsage)(&x.Pids), d) + } + } + for { + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj8-1, "") + } + r.ReadArrayEnd() +} + +func (x *AllocResourceUsage) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(3) + } else { + r.WriteMapStart(3) + } + var yyn3 bool + if x.ResourceUsage == nil { + yyn3 = true + goto LABEL3 + } + LABEL3: + if yyr2 || yy2arr2 { + if yyn3 { + r.WriteArrayElem() + r.EncodeNil() + } else { + r.WriteArrayElem() + if x.ResourceUsage == nil { + r.EncodeNil() + } else { + x.ResourceUsage.CodecEncodeSelf(e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"ResourceUsage\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `ResourceUsage`) + } + r.WriteMapElemValue() + if yyn3 { + r.EncodeNil() + } else { + if x.ResourceUsage == nil { + r.EncodeNil() + } else { + x.ResourceUsage.CodecEncodeSelf(e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.Tasks == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encMapstringPtrtoTaskResourceUsage((map[string]*TaskResourceUsage)(x.Tasks), e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Tasks\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Tasks`) + } + r.WriteMapElemValue() + if x.Tasks == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encMapstringPtrtoTaskResourceUsage((map[string]*TaskResourceUsage)(x.Tasks), e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeInt(int64(x.Timestamp)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Timestamp\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Timestamp`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeInt(int64(x.Timestamp)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *AllocResourceUsage) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *AllocResourceUsage) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "ResourceUsage": + if r.TryDecodeAsNil() { + if true && x.ResourceUsage != nil { + x.ResourceUsage = nil + } + } else { + if x.ResourceUsage == nil { + x.ResourceUsage = new(ResourceUsage) + } + + x.ResourceUsage.CodecDecodeSelf(d) + } + case "Tasks": + if r.TryDecodeAsNil() { + x.Tasks = nil + } else { + if false { + } else { + h.decMapstringPtrtoTaskResourceUsage((*map[string]*TaskResourceUsage)(&x.Tasks), d) + } + } + case "Timestamp": + if r.TryDecodeAsNil() { + x.Timestamp = 0 + } else { + x.Timestamp = (int64)(r.DecodeInt64()) + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *AllocResourceUsage) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj8 int + var yyb8 bool + var yyhl8 bool = l >= 0 + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + if true && x.ResourceUsage != nil { + x.ResourceUsage = nil + } + } else { + if x.ResourceUsage == nil { + x.ResourceUsage = new(ResourceUsage) + } + + x.ResourceUsage.CodecDecodeSelf(d) + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Tasks = nil + } else { + if false { + } else { + h.decMapstringPtrtoTaskResourceUsage((*map[string]*TaskResourceUsage)(&x.Tasks), d) + } + } + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Timestamp = 0 + } else { + x.Timestamp = (int64)(r.DecodeInt64()) + } + for { + yyj8++ + if yyhl8 { + yyb8 = yyj8 > l + } else { + yyb8 = r.CheckBreak() + } + if yyb8 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj8-1, "") + } + r.ReadArrayEnd() +} + +func (x *HealthCheckRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(0) + } else { + r.WriteMapStart(0) + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *HealthCheckRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *HealthCheckRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *HealthCheckRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4 int + var yyb4 bool + var yyhl4 bool = l >= 0 + for { + yyj4++ + if yyhl4 { + yyb4 = yyj4 > l + } else { + yyb4 = r.CheckBreak() + } + if yyb4 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj4-1, "") + } + r.ReadArrayEnd() +} + +func (x *HealthCheckResponse) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(1) + } else { + r.WriteMapStart(1) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if x.Drivers == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encMapstringPtrtostructs_DriverInfo((map[string]*pkg4_structs.DriverInfo)(x.Drivers), e) + } + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Drivers\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Drivers`) + } + r.WriteMapElemValue() + if x.Drivers == nil { + r.EncodeNil() + } else { + if false { + } else { + h.encMapstringPtrtostructs_DriverInfo((map[string]*pkg4_structs.DriverInfo)(x.Drivers), e) + } + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *HealthCheckResponse) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *HealthCheckResponse) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "Drivers": + if r.TryDecodeAsNil() { + x.Drivers = nil + } else { + if false { + } else { + h.decMapstringPtrtostructs_DriverInfo((*map[string]*pkg4_structs.DriverInfo)(&x.Drivers), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *HealthCheckResponse) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj6 int + var yyb6 bool + var yyhl6 bool = l >= 0 + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Drivers = nil + } else { + if false { + } else { + h.decMapstringPtrtostructs_DriverInfo((*map[string]*pkg4_structs.DriverInfo)(&x.Drivers), d) + } + } + for { + yyj6++ + if yyhl6 { + yyb6 = yyj6 > l + } else { + yyb6 = r.CheckBreak() + } + if yyb6 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj6-1, "") + } + r.ReadArrayEnd() +} + +func (x *HealthCheckIntervalRequest) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(0) + } else { + r.WriteMapStart(0) + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *HealthCheckIntervalRequest) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *HealthCheckIntervalRequest) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *HealthCheckIntervalRequest) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4 int + var yyb4 bool + var yyhl4 bool = l >= 0 + for { + yyj4++ + if yyhl4 { + yyb4 = yyj4 > l + } else { + yyb4 = r.CheckBreak() + } + if yyb4 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj4-1, "") + } + r.ReadArrayEnd() +} + +func (x *HealthCheckIntervalResponse) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.EncExtension(x, yyxt1) + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + _, _ = yysep2, yy2arr2 + const yyr2 bool = false // struct tag has 'toArray' + if yyr2 || yy2arr2 { + r.WriteArrayStart(2) + } else { + r.WriteMapStart(2) + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else { + r.EncodeBool(bool(x.Eligible)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Eligible\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Eligible`) + } + r.WriteMapElemValue() + if false { + } else { + r.EncodeBool(bool(x.Eligible)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayElem() + if false { + } else if yyxt7 := z.Extension(z.I2Rtid(x.Period)); yyxt7 != nil { + z.EncExtension(x.Period, yyxt7) + } else { + r.EncodeInt(int64(x.Period)) + } + } else { + r.WriteMapElemKey() + if z.IsJSONHandle() { + z.WriteStr("\"Period\"") + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, `Period`) + } + r.WriteMapElemValue() + if false { + } else if yyxt8 := z.Extension(z.I2Rtid(x.Period)); yyxt8 != nil { + z.EncExtension(x.Period, yyxt8) + } else { + r.EncodeInt(int64(x.Period)) + } + } + if yyr2 || yy2arr2 { + r.WriteArrayEnd() + } else { + r.WriteMapEnd() + } + } + } +} + +func (x *HealthCheckIntervalResponse) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + if false { + } else if yyxt1 := z.Extension(z.I2Rtid(x)); yyxt1 != nil { + z.DecExtension(x, yyxt1) + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap102 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + r.ReadMapEnd() + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray102 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + r.ReadArrayEnd() + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(errCodecSelferOnlyMapOrArrayEncodeToStruct102) + } + } +} + +func (x *HealthCheckIntervalResponse) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + r.ReadMapElemKey() + yys3 := z.StringView(r.DecodeStringAsBytes()) + r.ReadMapElemValue() + switch yys3 { + case "Eligible": + if r.TryDecodeAsNil() { + x.Eligible = false + } else { + x.Eligible = (bool)(r.DecodeBool()) + } + case "Period": + if r.TryDecodeAsNil() { + x.Period = 0 + } else { + if false { + } else if yyxt6 := z.Extension(z.I2Rtid(x.Period)); yyxt6 != nil { + z.DecExtension(x.Period, yyxt6) + } else { + x.Period = (time.Duration)(r.DecodeInt64()) + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + r.ReadMapEnd() +} + +func (x *HealthCheckIntervalResponse) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj7 int + var yyb7 bool + var yyhl7 bool = l >= 0 + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Eligible = false + } else { + x.Eligible = (bool)(r.DecodeBool()) + } + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + r.ReadArrayEnd() + return + } + r.ReadArrayElem() + if r.TryDecodeAsNil() { + x.Period = 0 + } else { + if false { + } else if yyxt10 := z.Extension(z.I2Rtid(x.Period)); yyxt10 != nil { + z.DecExtension(x.Period, yyxt10) + } else { + x.Period = (time.Duration)(r.DecodeInt64()) + } + } + for { + yyj7++ + if yyhl7 { + yyb7 = yyj7 > l + } else { + yyb7 = r.CheckBreak() + } + if yyb7 { + break + } + r.ReadArrayElem() + z.DecStructFieldNotFound(yyj7-1, "") + } + r.ReadArrayEnd() +} + +func (x codecSelfer102) encSlicePtrtoAllocFileInfo(v []*AllocFileInfo, e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.WriteArrayStart(len(v)) + for _, yyv1 := range v { + r.WriteArrayElem() + if yyv1 == nil { + r.EncodeNil() + } else { + yyv1.CodecEncodeSelf(e) + } + } + r.WriteArrayEnd() +} + +func (x codecSelfer102) decSlicePtrtoAllocFileInfo(v *[]*AllocFileInfo, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []*AllocFileInfo{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else { + yyhl1 := yyl1 > 0 + var yyrl1 int + _ = yyrl1 + if yyhl1 { + if yyl1 > cap(yyv1) { + yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]*AllocFileInfo, yyrl1) + } + yyc1 = true + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + } + var yyj1 int + // var yydn1 bool + for yyj1 = 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || r.CheckBreak()); yyj1++ { // bounds-check-elimination + if yyj1 == 0 && yyv1 == nil { + if yyhl1 { + yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) + } else { + yyrl1 = 8 + } + yyv1 = make([]*AllocFileInfo, yyrl1) + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + + var yydb1 bool + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, nil) + yyc1 = true + + } + if yydb1 { + z.DecSwallow() + } else { + if r.TryDecodeAsNil() { + yyv1[yyj1] = nil + } else { + if yyv1[yyj1] == nil { + yyv1[yyj1] = new(AllocFileInfo) + } + yyv1[yyj1].CodecDecodeSelf(d) + } + + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = make([]*AllocFileInfo, 0) + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} + +func (x codecSelfer102) encSlicePtrtodevice_DeviceGroupStats(v []*pkg2_device.DeviceGroupStats, e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.WriteArrayStart(len(v)) + for _, yyv1 := range v { + r.WriteArrayElem() + if yyv1 == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt2 := z.Extension(z.I2Rtid(yyv1)); yyxt2 != nil { + z.EncExtension(yyv1, yyxt2) + } else { + z.EncFallback(yyv1) + } + } + } + r.WriteArrayEnd() +} + +func (x codecSelfer102) decSlicePtrtodevice_DeviceGroupStats(v *[]*pkg2_device.DeviceGroupStats, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []*pkg2_device.DeviceGroupStats{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else { + yyhl1 := yyl1 > 0 + var yyrl1 int + _ = yyrl1 + if yyhl1 { + if yyl1 > cap(yyv1) { + yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]*pkg2_device.DeviceGroupStats, yyrl1) + } + yyc1 = true + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + } + var yyj1 int + // var yydn1 bool + for yyj1 = 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || r.CheckBreak()); yyj1++ { // bounds-check-elimination + if yyj1 == 0 && yyv1 == nil { + if yyhl1 { + yyrl1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) + } else { + yyrl1 = 8 + } + yyv1 = make([]*pkg2_device.DeviceGroupStats, yyrl1) + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + + var yydb1 bool + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, nil) + yyc1 = true + + } + if yydb1 { + z.DecSwallow() + } else { + if r.TryDecodeAsNil() { + yyv1[yyj1] = nil + } else { + if yyv1[yyj1] == nil { + yyv1[yyj1] = new(pkg2_device.DeviceGroupStats) + } + if false { + } else if yyxt3 := z.Extension(z.I2Rtid(yyv1[yyj1])); yyxt3 != nil { + z.DecExtension(yyv1[yyj1], yyxt3) + } else { + z.DecFallback(yyv1[yyj1], false) + } + } + + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = make([]*pkg2_device.DeviceGroupStats, 0) + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} + +func (x codecSelfer102) encMapstringPtrtoResourceUsage(v map[string]*ResourceUsage, e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.WriteMapStart(len(v)) + for yyk1, yyv1 := range v { + r.WriteMapElemKey() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(yyk1))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(yyk1)) + } + } + r.WriteMapElemValue() + if yyv1 == nil { + r.EncodeNil() + } else { + yyv1.CodecEncodeSelf(e) + } + } + r.WriteMapEnd() +} + +func (x codecSelfer102) decMapstringPtrtoResourceUsage(v *map[string]*ResourceUsage, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyl1 := r.ReadMapStart() + yybh1 := z.DecBasicHandle() + if yyv1 == nil { + yyrl1 := z.DecInferLen(yyl1, yybh1.MaxInitLen, 24) + yyv1 = make(map[string]*ResourceUsage, yyrl1) + *v = yyv1 + } + var yymk1 string + var yymv1 *ResourceUsage + var yymg1, yymdn1, yyms1, yymok1 bool + if yybh1.MapValueReset { + yymg1 = true + } + if yyl1 != 0 { + yyhl1 := yyl1 > 0 + for yyj1 := 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || r.CheckBreak()); yyj1++ { + r.ReadMapElemKey() + if r.TryDecodeAsNil() { + yymk1 = "" + } else { + yymk1 = (string)(r.DecodeString()) + } + + yyms1 = true + if yymg1 { + yymv1, yymok1 = yyv1[yymk1] + if yymok1 { + yyms1 = false + } + } else { + yymv1 = nil + } + r.ReadMapElemValue() + yymdn1 = false + if r.TryDecodeAsNil() { + yymdn1 = true + } else { + if yymv1 == nil { + yymv1 = new(ResourceUsage) + } + yymv1.CodecDecodeSelf(d) + } + + if yymdn1 { + if yybh1.DeleteOnNilMapValue { + delete(yyv1, yymk1) + } else { + yyv1[yymk1] = nil + } + } else if yyms1 && yyv1 != nil { + yyv1[yymk1] = yymv1 + } + } + } // else len==0: TODO: Should we clear map entries? + r.ReadMapEnd() +} + +func (x codecSelfer102) encMapstringPtrtoTaskResourceUsage(v map[string]*TaskResourceUsage, e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.WriteMapStart(len(v)) + for yyk1, yyv1 := range v { + r.WriteMapElemKey() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(yyk1))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(yyk1)) + } + } + r.WriteMapElemValue() + if yyv1 == nil { + r.EncodeNil() + } else { + yyv1.CodecEncodeSelf(e) + } + } + r.WriteMapEnd() +} + +func (x codecSelfer102) decMapstringPtrtoTaskResourceUsage(v *map[string]*TaskResourceUsage, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyl1 := r.ReadMapStart() + yybh1 := z.DecBasicHandle() + if yyv1 == nil { + yyrl1 := z.DecInferLen(yyl1, yybh1.MaxInitLen, 24) + yyv1 = make(map[string]*TaskResourceUsage, yyrl1) + *v = yyv1 + } + var yymk1 string + var yymv1 *TaskResourceUsage + var yymg1, yymdn1, yyms1, yymok1 bool + if yybh1.MapValueReset { + yymg1 = true + } + if yyl1 != 0 { + yyhl1 := yyl1 > 0 + for yyj1 := 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || r.CheckBreak()); yyj1++ { + r.ReadMapElemKey() + if r.TryDecodeAsNil() { + yymk1 = "" + } else { + yymk1 = (string)(r.DecodeString()) + } + + yyms1 = true + if yymg1 { + yymv1, yymok1 = yyv1[yymk1] + if yymok1 { + yyms1 = false + } + } else { + yymv1 = nil + } + r.ReadMapElemValue() + yymdn1 = false + if r.TryDecodeAsNil() { + yymdn1 = true + } else { + if yymv1 == nil { + yymv1 = new(TaskResourceUsage) + } + yymv1.CodecDecodeSelf(d) + } + + if yymdn1 { + if yybh1.DeleteOnNilMapValue { + delete(yyv1, yymk1) + } else { + yyv1[yymk1] = nil + } + } else if yyms1 && yyv1 != nil { + yyv1[yymk1] = yymv1 + } + } + } // else len==0: TODO: Should we clear map entries? + r.ReadMapEnd() +} + +func (x codecSelfer102) encMapstringPtrtostructs_DriverInfo(v map[string]*pkg4_structs.DriverInfo, e *codec1978.Encoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.WriteMapStart(len(v)) + for yyk1, yyv1 := range v { + r.WriteMapElemKey() + if false { + } else { + if z.EncBasicHandle().StringToRaw { + r.EncodeStringBytesRaw(z.BytesView(string(yyk1))) + } else { + r.EncodeStringEnc(codecSelferCcUTF8102, string(yyk1)) + } + } + r.WriteMapElemValue() + if yyv1 == nil { + r.EncodeNil() + } else { + if false { + } else if yyxt3 := z.Extension(z.I2Rtid(yyv1)); yyxt3 != nil { + z.EncExtension(yyv1, yyxt3) + } else { + z.EncFallback(yyv1) + } + } + } + r.WriteMapEnd() +} + +func (x codecSelfer102) decMapstringPtrtostructs_DriverInfo(v *map[string]*pkg4_structs.DriverInfo, d *codec1978.Decoder) { + var h codecSelfer102 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyl1 := r.ReadMapStart() + yybh1 := z.DecBasicHandle() + if yyv1 == nil { + yyrl1 := z.DecInferLen(yyl1, yybh1.MaxInitLen, 24) + yyv1 = make(map[string]*pkg4_structs.DriverInfo, yyrl1) + *v = yyv1 + } + var yymk1 string + var yymv1 *pkg4_structs.DriverInfo + var yymg1, yymdn1, yyms1, yymok1 bool + if yybh1.MapValueReset { + yymg1 = true + } + if yyl1 != 0 { + yyhl1 := yyl1 > 0 + for yyj1 := 0; (yyhl1 && yyj1 < yyl1) || !(yyhl1 || r.CheckBreak()); yyj1++ { + r.ReadMapElemKey() + if r.TryDecodeAsNil() { + yymk1 = "" + } else { + yymk1 = (string)(r.DecodeString()) + } + + yyms1 = true + if yymg1 { + yymv1, yymok1 = yyv1[yymk1] + if yymok1 { + yyms1 = false + } + } else { + yymv1 = nil + } + r.ReadMapElemValue() + yymdn1 = false + if r.TryDecodeAsNil() { + yymdn1 = true + } else { + if yymv1 == nil { + yymv1 = new(pkg4_structs.DriverInfo) + } + if false { + } else if yyxt4 := z.Extension(z.I2Rtid(yymv1)); yyxt4 != nil { + z.DecExtension(yymv1, yyxt4) + } else { + z.DecFallback(yymv1, false) + } + } + + if yymdn1 { + if yybh1.DeleteOnNilMapValue { + delete(yyv1, yymk1) + } else { + yyv1[yymk1] = nil + } + } else if yyms1 && yyv1 != nil { + yyv1[yymk1] = yymv1 + } + } + } // else len==0: TODO: Should we clear map entries? + r.ReadMapEnd() +} diff --git a/client/structs/structs.go b/client/structs/structs.go index 169cf824c4c..a676e557a71 100644 --- a/client/structs/structs.go +++ b/client/structs/structs.go @@ -1,6 +1,6 @@ package structs -//go:generate codecgen -d 102 -o structs.generated.go structs.go +//go:generate codecgen -d 102 -t codec_generated -o structs.generated.go structs.go import ( "errors" @@ -34,6 +34,26 @@ type ClientStatsResponse struct { structs.QueryMeta } +// MonitorRequest is used to request and stream logs from a client node. +type MonitorRequest struct { + // LogLevel is the log level filter we want to stream logs on + LogLevel string + + // LogJSON specifies if log format should be unstructured or json + LogJSON bool + + // NodeID is the node we want to track the logs of + NodeID string + + // ServerID is the server we want to track the logs of + ServerID string + + // PlainText disables base64 encoding. + PlainText bool + + structs.QueryOptions +} + // AllocFileInfo holds information about a file inside the AllocDir type AllocFileInfo struct { Name string diff --git a/client/taskenv/env.go b/client/taskenv/env.go index 377de9d93a7..8612651c3e4 100644 --- a/client/taskenv/env.go +++ b/client/taskenv/env.go @@ -490,22 +490,19 @@ func (b *Builder) Build() *TaskEnv { } // Clean keys (see #2405) + prefixesToClean := [...]string{AddrPrefix, IpPrefix, PortPrefix, HostPortPrefix, MetaPrefix} cleanedEnv := make(map[string]string, len(envMap)) for k, v := range envMap { - cleanedK := helper.CleanEnvVar(k, '_') - cleanedEnv[cleanedK] = v - } - - var cleanedDeviceEnvs map[string]string - if deviceEnvs != nil { - cleanedDeviceEnvs = make(map[string]string, len(deviceEnvs)) - for k, v := range deviceEnvs { - cleanedK := helper.CleanEnvVar(k, '_') - cleanedDeviceEnvs[cleanedK] = v + cleanedK := k + for i := range prefixesToClean { + if strings.HasPrefix(k, prefixesToClean[i]) { + cleanedK = helper.CleanEnvVar(k, '_') + } } + cleanedEnv[cleanedK] = v } - return NewTaskEnv(cleanedEnv, cleanedDeviceEnvs, nodeAttrs) + return NewTaskEnv(cleanedEnv, deviceEnvs, nodeAttrs) } // Update task updates the environment based on a new alloc and task. @@ -550,6 +547,9 @@ func (b *Builder) SetDeviceHookEnv(hookName string, envs map[string]string) *Bui // setTask is called from NewBuilder to populate task related environment // variables. func (b *Builder) setTask(task *structs.Task) *Builder { + if task == nil { + return b + } b.taskName = task.Name b.envvars = make(map[string]string, len(task.Env)) for k, v := range task.Env { @@ -603,8 +603,10 @@ func (b *Builder) setAlloc(alloc *structs.Allocation) *Builder { tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) - // COMPAT(0.11): Remove in 0.11 b.otherPorts = make(map[string]string, len(tg.Tasks)*2) + + // Protect against invalid allocs where AllocatedResources isn't set. + // TestClient_AddAllocError explicitly tests for this condition if alloc.AllocatedResources != nil { // Populate task resources if tr, ok := alloc.AllocatedResources.Tasks[b.taskName]; ok { @@ -634,28 +636,15 @@ func (b *Builder) setAlloc(alloc *structs.Allocation) *Builder { } } } - } else if alloc.TaskResources != nil { - if tr, ok := alloc.TaskResources[b.taskName]; ok { - // Copy networks to prevent sharing - b.networks = make([]*structs.NetworkResource, len(tr.Networks)) - for i, n := range tr.Networks { - b.networks[i] = n.Copy() - } - - } - for taskName, resources := range alloc.TaskResources { - // Add ports from other tasks - if taskName == b.taskName { - continue + // Add ports from group networks + //TODO Expose IPs but possibly only via variable interpolation + for _, nw := range alloc.AllocatedResources.Shared.Networks { + for _, p := range nw.ReservedPorts { + addGroupPort(b.otherPorts, p) } - for _, nw := range resources.Networks { - for _, p := range nw.ReservedPorts { - addPort(b.otherPorts, taskName, nw.IP, p.Label, p.Value) - } - for _, p := range nw.DynamicPorts { - addPort(b.otherPorts, taskName, nw.IP, p.Label, p.Value) - } + for _, p := range nw.DynamicPorts { + addGroupPort(b.otherPorts, p) } } } @@ -852,3 +841,15 @@ func addPort(m map[string]string, taskName, ip, portLabel string, port int) { key = fmt.Sprintf("%s%s_%s", PortPrefix, taskName, portLabel) m[key] = strconv.Itoa(port) } + +// addGroupPort adds a group network port. The To value is used if one is +// specified. +func addGroupPort(m map[string]string, port structs.Port) { + if port.To > 0 { + m[PortPrefix+port.Label] = strconv.Itoa(port.To) + } else { + m[PortPrefix+port.Label] = strconv.Itoa(port.Value) + } + + m[HostPortPrefix+port.Label] = strconv.Itoa(port.Value) +} diff --git a/client/taskenv/env_test.go b/client/taskenv/env_test.go index 0f2c280129c..03529143628 100644 --- a/client/taskenv/env_test.go +++ b/client/taskenv/env_test.go @@ -266,6 +266,10 @@ func TestEnvironment_AsList_Old(t *testing.T) { }, }, } + + // simulate canonicalization on restore or fetch + a.Canonicalize() + task := a.Job.TaskGroups[0].Tasks[0] task.Env = map[string]string{ "taskEnvKey": "taskEnvVal", @@ -334,7 +338,7 @@ func TestEnvironment_AllValues(t *testing.T) { "nested.meta.key": "a", "invalid...metakey": "b", } - a := mock.Alloc() + a := mock.ConnectAlloc() a.AllocatedResources.Tasks["web"].Networks[0] = &structs.NetworkResource{ Device: "eth0", IP: "127.0.0.1", @@ -355,6 +359,22 @@ func TestEnvironment_AllValues(t *testing.T) { }, }, } + + sharedNet := a.AllocatedResources.Shared.Networks[0] + + // Add group network port with only a host port. + sharedNet.DynamicPorts = append(sharedNet.DynamicPorts, structs.Port{ + Label: "hostonly", + Value: 9998, + }) + + // Add group network reserved port with a To value. + sharedNet.ReservedPorts = append(sharedNet.ReservedPorts, structs.Port{ + Label: "static", + Value: 9997, + To: 97, + }) + task := a.Job.TaskGroups[0].Tasks[0] task.Env = map[string]string{ "taskEnvKey": "taskEnvVal", @@ -402,41 +422,47 @@ func TestEnvironment_AllValues(t *testing.T) { "node.attr.nomad.version": "0.5.0", // Env - "taskEnvKey": "taskEnvVal", - "NOMAD_ADDR_http": "127.0.0.1:80", - "NOMAD_PORT_http": "80", - "NOMAD_IP_http": "127.0.0.1", - "NOMAD_ADDR_https": "127.0.0.1:8080", - "NOMAD_PORT_https": "443", - "NOMAD_IP_https": "127.0.0.1", - "NOMAD_HOST_PORT_http": "80", - "NOMAD_HOST_PORT_https": "8080", - "NOMAD_TASK_NAME": "web", - "NOMAD_GROUP_NAME": "web", - "NOMAD_ADDR_ssh_other": "192.168.0.100:1234", - "NOMAD_ADDR_ssh_ssh": "192.168.0.100:22", - "NOMAD_IP_ssh_other": "192.168.0.100", - "NOMAD_IP_ssh_ssh": "192.168.0.100", - "NOMAD_PORT_ssh_other": "1234", - "NOMAD_PORT_ssh_ssh": "22", - "NOMAD_CPU_LIMIT": "500", - "NOMAD_DC": "dc1", - "NOMAD_NAMESPACE": "default", - "NOMAD_REGION": "global", - "NOMAD_MEMORY_LIMIT": "256", - "NOMAD_META_ELB_CHECK_INTERVAL": "30s", - "NOMAD_META_ELB_CHECK_MIN": "3", - "NOMAD_META_ELB_CHECK_TYPE": "http", - "NOMAD_META_FOO": "bar", - "NOMAD_META_OWNER": "armon", - "NOMAD_META_elb_check_interval": "30s", - "NOMAD_META_elb_check_min": "3", - "NOMAD_META_elb_check_type": "http", - "NOMAD_META_foo": "bar", - "NOMAD_META_owner": "armon", - "NOMAD_JOB_NAME": "my-job", - "NOMAD_ALLOC_ID": a.ID, - "NOMAD_ALLOC_INDEX": "0", + "taskEnvKey": "taskEnvVal", + "NOMAD_ADDR_http": "127.0.0.1:80", + "NOMAD_PORT_http": "80", + "NOMAD_IP_http": "127.0.0.1", + "NOMAD_ADDR_https": "127.0.0.1:8080", + "NOMAD_PORT_https": "443", + "NOMAD_IP_https": "127.0.0.1", + "NOMAD_HOST_PORT_http": "80", + "NOMAD_HOST_PORT_https": "8080", + "NOMAD_TASK_NAME": "web", + "NOMAD_GROUP_NAME": "web", + "NOMAD_ADDR_ssh_other": "192.168.0.100:1234", + "NOMAD_ADDR_ssh_ssh": "192.168.0.100:22", + "NOMAD_IP_ssh_other": "192.168.0.100", + "NOMAD_IP_ssh_ssh": "192.168.0.100", + "NOMAD_PORT_ssh_other": "1234", + "NOMAD_PORT_ssh_ssh": "22", + "NOMAD_CPU_LIMIT": "500", + "NOMAD_DC": "dc1", + "NOMAD_NAMESPACE": "default", + "NOMAD_REGION": "global", + "NOMAD_MEMORY_LIMIT": "256", + "NOMAD_META_ELB_CHECK_INTERVAL": "30s", + "NOMAD_META_ELB_CHECK_MIN": "3", + "NOMAD_META_ELB_CHECK_TYPE": "http", + "NOMAD_META_FOO": "bar", + "NOMAD_META_OWNER": "armon", + "NOMAD_META_elb_check_interval": "30s", + "NOMAD_META_elb_check_min": "3", + "NOMAD_META_elb_check_type": "http", + "NOMAD_META_foo": "bar", + "NOMAD_META_owner": "armon", + "NOMAD_JOB_NAME": "my-job", + "NOMAD_ALLOC_ID": a.ID, + "NOMAD_ALLOC_INDEX": "0", + "NOMAD_PORT_connect_proxy_testconnect": "9999", + "NOMAD_HOST_PORT_connect_proxy_testconnect": "9999", + "NOMAD_PORT_hostonly": "9998", + "NOMAD_HOST_PORT_hostonly": "9998", + "NOMAD_PORT_static": "97", + "NOMAD_HOST_PORT_static": "9997", // 0.9 style env map `env["taskEnvKey"]`: "taskEnvVal", @@ -660,11 +686,17 @@ func TestEnvironment_AppendHostEnvvars(t *testing.T) { func TestEnvironment_DashesInTaskName(t *testing.T) { a := mock.Alloc() task := a.Job.TaskGroups[0].Tasks[0] - task.Env = map[string]string{"test-one-two": "three-four"} + task.Env = map[string]string{ + "test-one-two": "three-four", + "NOMAD_test_one_two": "three-five", + } envMap := NewBuilder(mock.Node(), a, task, "global").Build().Map() - if envMap["test_one_two"] != "three-four" { - t.Fatalf("Expected test_one_two=three-four in TaskEnv; found:\n%#v", envMap) + if envMap["test-one-two"] != "three-four" { + t.Fatalf("Expected test-one-two=three-four in TaskEnv; found:\n%#v", envMap) + } + if envMap["NOMAD_test_one_two"] != "three-five" { + t.Fatalf("Expected NOMAD_test_one_two=three-five in TaskEnv; found:\n%#v", envMap) } } @@ -804,3 +836,18 @@ func TestEnvironment_SetPortMapEnvs(t *testing.T) { } require.Equal(t, expected, envs) } + +func TestEnvironment_TasklessBuilder(t *testing.T) { + node := mock.Node() + alloc := mock.Alloc() + alloc.Job.Meta["jobt"] = "foo" + alloc.Job.TaskGroups[0].Meta["groupt"] = "bar" + require := require.New(t) + var taskEnv *TaskEnv + require.NotPanics(func() { + taskEnv = NewBuilder(node, alloc, nil, "global").SetAllocDir("/tmp/alloc").Build() + }) + + require.Equal("foo", taskEnv.ReplaceEnv("${NOMAD_META_jobt}")) + require.Equal("bar", taskEnv.ReplaceEnv("${NOMAD_META_groupt}")) +} diff --git a/client/taskenv/services.go b/client/taskenv/services.go new file mode 100644 index 00000000000..74bf673b18d --- /dev/null +++ b/client/taskenv/services.go @@ -0,0 +1,64 @@ +package taskenv + +import ( + "github.com/hashicorp/nomad/nomad/structs" +) + +// InterpolateServices returns an interpolated copy of services and checks with +// values from the task's environment. +func InterpolateServices(taskEnv *TaskEnv, services []*structs.Service) []*structs.Service { + // Guard against not having a valid taskEnv. This can be the case if the + // PreKilling or Exited hook is run before Poststart. + if taskEnv == nil || len(services) == 0 { + return nil + } + + interpolated := make([]*structs.Service, len(services)) + + for i, origService := range services { + // Create a copy as we need to reinterpolate every time the + // environment changes + service := origService.Copy() + + for _, check := range service.Checks { + check.Name = taskEnv.ReplaceEnv(check.Name) + check.Type = taskEnv.ReplaceEnv(check.Type) + check.Command = taskEnv.ReplaceEnv(check.Command) + check.Args = taskEnv.ParseAndReplace(check.Args) + check.Path = taskEnv.ReplaceEnv(check.Path) + check.Protocol = taskEnv.ReplaceEnv(check.Protocol) + check.PortLabel = taskEnv.ReplaceEnv(check.PortLabel) + check.InitialStatus = taskEnv.ReplaceEnv(check.InitialStatus) + check.Method = taskEnv.ReplaceEnv(check.Method) + check.GRPCService = taskEnv.ReplaceEnv(check.GRPCService) + if len(check.Header) > 0 { + header := make(map[string][]string, len(check.Header)) + for k, vs := range check.Header { + newVals := make([]string, len(vs)) + for i, v := range vs { + newVals[i] = taskEnv.ReplaceEnv(v) + } + header[taskEnv.ReplaceEnv(k)] = newVals + } + check.Header = header + } + } + + service.Name = taskEnv.ReplaceEnv(service.Name) + service.PortLabel = taskEnv.ReplaceEnv(service.PortLabel) + service.Tags = taskEnv.ParseAndReplace(service.Tags) + service.CanaryTags = taskEnv.ParseAndReplace(service.CanaryTags) + + if len(service.Meta) > 0 { + meta := make(map[string]string, len(service.Meta)) + for k, v := range service.Meta { + meta[k] = taskEnv.ReplaceEnv(v) + } + service.Meta = meta + } + + interpolated[i] = service + } + + return interpolated +} diff --git a/client/taskenv/services_test.go b/client/taskenv/services_test.go new file mode 100644 index 00000000000..88577d6de37 --- /dev/null +++ b/client/taskenv/services_test.go @@ -0,0 +1,85 @@ +package taskenv + +import ( + "testing" + + "github.com/hashicorp/nomad/nomad/structs" + "github.com/stretchr/testify/require" +) + +// TestInterpolateServices asserts that all service +// and check fields are properly interpolated. +func TestInterpolateServices(t *testing.T) { + t.Parallel() + services := []*structs.Service{ + { + Name: "${name}", + PortLabel: "${portlabel}", + Tags: []string{"${tags}"}, + Checks: []*structs.ServiceCheck{ + { + Name: "${checkname}", + Type: "${checktype}", + Command: "${checkcmd}", + Args: []string{"${checkarg}"}, + Path: "${checkstr}", + Protocol: "${checkproto}", + PortLabel: "${checklabel}", + InitialStatus: "${checkstatus}", + Method: "${checkmethod}", + Header: map[string][]string{ + "${checkheaderk}": {"${checkheaderv}"}, + }, + }, + }, + }, + } + + env := &TaskEnv{ + EnvMap: map[string]string{ + "name": "name", + "portlabel": "portlabel", + "tags": "tags", + "checkname": "checkname", + "checktype": "checktype", + "checkcmd": "checkcmd", + "checkarg": "checkarg", + "checkstr": "checkstr", + "checkpath": "checkpath", + "checkproto": "checkproto", + "checklabel": "checklabel", + "checkstatus": "checkstatus", + "checkmethod": "checkmethod", + "checkheaderk": "checkheaderk", + "checkheaderv": "checkheaderv", + }, + } + + interpolated := InterpolateServices(env, services) + + exp := []*structs.Service{ + { + Name: "name", + PortLabel: "portlabel", + Tags: []string{"tags"}, + Checks: []*structs.ServiceCheck{ + { + Name: "checkname", + Type: "checktype", + Command: "checkcmd", + Args: []string{"checkarg"}, + Path: "checkstr", + Protocol: "checkproto", + PortLabel: "checklabel", + InitialStatus: "checkstatus", + Method: "checkmethod", + Header: map[string][]string{ + "checkheaderk": {"checkheaderv"}, + }, + }, + }, + }, + } + + require.Equal(t, exp, interpolated) +} diff --git a/client/testutil/rpc.go b/client/testutil/rpc.go new file mode 100644 index 00000000000..602d259771e --- /dev/null +++ b/client/testutil/rpc.go @@ -0,0 +1,86 @@ +package testutil + +import ( + "fmt" + "io" + "net" + "strings" + "testing" + "time" + + cstructs "github.com/hashicorp/nomad/client/structs" + "github.com/hashicorp/nomad/nomad/structs" + "github.com/stretchr/testify/require" + "github.com/ugorji/go/codec" +) + +// StreamingRPC may be satisfied by client.Client or server.Server. +type StreamingRPC interface { + StreamingRpcHandler(method string) (structs.StreamingRpcHandler, error) +} + +// StreamingRPCErrorTestCase is a test case to be passed to the +// assertStreamingRPCError func. +type StreamingRPCErrorTestCase struct { + Name string + RPC string + Req interface{} + Assert func(error) bool +} + +// AssertStreamingRPCError asserts a streaming RPC's error matches the given +// assertion in the test case. +func AssertStreamingRPCError(t *testing.T, s StreamingRPC, tc StreamingRPCErrorTestCase) { + handler, err := s.StreamingRpcHandler(tc.RPC) + require.NoError(t, err) + + // Create a pipe + p1, p2 := net.Pipe() + defer p1.Close() + defer p2.Close() + + errCh := make(chan error, 1) + streamMsg := make(chan *cstructs.StreamErrWrapper, 1) + + // Start the handler + go handler(p2) + + // Start the decoder + go func() { + decoder := codec.NewDecoder(p1, structs.MsgpackHandle) + for { + var msg cstructs.StreamErrWrapper + if err := decoder.Decode(&msg); err != nil { + if err == io.EOF || strings.Contains(err.Error(), "closed") { + return + } + errCh <- fmt.Errorf("error decoding: %v", err) + } + + streamMsg <- &msg + } + }() + + // Send the request + encoder := codec.NewEncoder(p1, structs.MsgpackHandle) + require.NoError(t, encoder.Encode(tc.Req)) + + timeout := time.After(5 * time.Second) + + for { + select { + case <-timeout: + t.Fatal("timeout") + case err := <-errCh: + require.NoError(t, err) + case msg := <-streamMsg: + // Convert RpcError to error + var err error + if msg.Error != nil { + err = msg.Error + } + require.True(t, tc.Assert(err), "(%T) %s", msg.Error, msg.Error) + return + } + } +} diff --git a/client/vaultclient/vaultclient.go b/client/vaultclient/vaultclient.go index 5e47358d3af..df6e0f4a02a 100644 --- a/client/vaultclient/vaultclient.go +++ b/client/vaultclient/vaultclient.go @@ -45,14 +45,6 @@ type VaultClient interface { // StopRenewToken removes the token from the min-heap, stopping its // renewal. StopRenewToken(string) error - - // RenewLease renews a vault secret's lease and adds the lease - // identifier to the min-heap for periodic renewal. - RenewLease(string, int) (<-chan error, error) - - // StopRenewLease removes a secret's lease ID from the min-heap, - // stopping its renewal. - StopRenewLease(string) error } // Implementation of VaultClient interface to interact with vault and perform @@ -325,44 +317,6 @@ func (c *vaultClient) RenewToken(token string, increment int) (<-chan error, err return errCh, nil } -// RenewLease renews the supplied lease identifier for a supplied duration (in -// seconds) and adds it to the min-heap so that it gets renewed periodically by -// the renewal loop. Any error returned during renewal will be written to a -// buffered channel and the channel is returned instead of an actual error. -// This helps the caller be notified of a renewal failure asynchronously for -// appropriate actions to be taken. The caller of this function need not have -// to close the error channel. -func (c *vaultClient) RenewLease(leaseId string, increment int) (<-chan error, error) { - if leaseId == "" { - err := fmt.Errorf("missing lease ID") - return nil, err - } - - if increment < 1 { - err := fmt.Errorf("increment cannot be less than 1") - return nil, err - } - - // Create a buffered error channel - errCh := make(chan error, 1) - - // Create a renewal request using the supplied lease and duration - renewalReq := &vaultClientRenewalRequest{ - errCh: errCh, - id: leaseId, - increment: increment, - } - - // Renew the secret and send any error to the dedicated error channel - if err := c.renew(renewalReq); err != nil { - c.logger.Error("error during renewal of lease", "error", err) - metrics.IncrCounter([]string{"client", "vault", "renew_lease_error"}, 1) - return nil, err - } - - return errCh, nil -} - // renew is a common method to handle renewal of both tokens and secret leases. // It invokes a token renewal or a secret's lease renewal. If renewal is // successful, min-heap is updated based on the duration after which it needs @@ -558,12 +512,6 @@ func (c *vaultClient) StopRenewToken(token string) error { return c.stopRenew(token) } -// StopRenewLease removes the item from the heap which represents the given -// lease identifier. -func (c *vaultClient) StopRenewLease(leaseId string) error { - return c.stopRenew(leaseId) -} - // stopRenew removes the given identifier from the heap and signals the renewal // loop to compute the next best candidate for renewal. func (c *vaultClient) stopRenew(id string) error { diff --git a/client/vaultclient/vaultclient_testing.go b/client/vaultclient/vaultclient_testing.go index ed99f4cc455..c3c25c90d45 100644 --- a/client/vaultclient/vaultclient_testing.go +++ b/client/vaultclient/vaultclient_testing.go @@ -67,7 +67,7 @@ func (vc *MockVaultClient) SetDeriveTokenError(allocID string, tasks []string, e vc.deriveTokenErrors = make(map[string]map[string]error, 10) } - if _, ok := vc.renewTokenErrors[allocID]; !ok { + if _, ok := vc.deriveTokenErrors[allocID]; !ok { vc.deriveTokenErrors[allocID] = make(map[string]error, 10) } @@ -111,12 +111,10 @@ func (vc *MockVaultClient) StopRenewToken(token string) error { return nil } -func (vc *MockVaultClient) RenewLease(leaseId string, interval int) (<-chan error, error) { - return nil, nil -} -func (vc *MockVaultClient) StopRenewLease(leaseId string) error { return nil } -func (vc *MockVaultClient) Start() {} -func (vc *MockVaultClient) Stop() {} +func (vc *MockVaultClient) Start() {} + +func (vc *MockVaultClient) Stop() {} + func (vc *MockVaultClient) GetConsulACL(string, string) (*vaultapi.Secret, error) { return nil, nil } // StoppedTokens tracks the tokens that have stopped renewing diff --git a/command/acl_policy_info_test.go b/command/acl_policy_info_test.go index 19bf13088a6..4147f0e6744 100644 --- a/command/acl_policy_info_test.go +++ b/command/acl_policy_info_test.go @@ -5,7 +5,6 @@ import ( "strings" "testing" - "github.com/hashicorp/nomad/acl" "github.com/hashicorp/nomad/command/agent" "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" @@ -31,7 +30,7 @@ func TestACLPolicyInfoCommand(t *testing.T) { // Create a test ACLPolicy policy := &structs.ACLPolicy{ Name: "testPolicy", - Rules: acl.PolicyWrite, + Rules: "node { policy = \"read\" }", } policy.SetHash() assert.Nil(state.UpsertACLPolicies(1000, []*structs.ACLPolicy{policy})) diff --git a/command/agent/agent.go b/command/agent/agent.go index 932b5888fc2..1e3be7ea366 100644 --- a/command/agent/agent.go +++ b/command/agent/agent.go @@ -53,7 +53,7 @@ type Agent struct { config *Config configLock sync.Mutex - logger log.Logger + logger log.InterceptLogger httpLogger log.Logger logOutput io.Writer @@ -64,6 +64,9 @@ type Agent struct { // consulCatalog is the subset of Consul's Catalog API Nomad uses. consulCatalog consul.CatalogAPI + // consulACLs is Nomad's subset of Consul's ACL API Nomad uses. + consulACLs consul.ACLsAPI + // client is the launched Nomad Client. Can be nil if the agent isn't // configured to run a client. client *client.Client @@ -87,7 +90,7 @@ type Agent struct { } // NewAgent is used to create a new agent with the given configuration -func NewAgent(config *Config, logger log.Logger, logOutput io.Writer, inmem *metrics.InmemSink) (*Agent, error) { +func NewAgent(config *Config, logger log.InterceptLogger, logOutput io.Writer, inmem *metrics.InmemSink) (*Agent, error) { a := &Agent{ config: config, logOutput: logOutput, @@ -132,6 +135,8 @@ func convertServerConfig(agentConfig *Config) (*nomad.Config, error) { conf = nomad.DefaultConfig() } conf.DevMode = agentConfig.DevMode + conf.EnableDebug = agentConfig.EnableDebug + conf.Build = agentConfig.Version.VersionNumber() if agentConfig.Region != "" { conf.Region = agentConfig.Region @@ -281,7 +286,9 @@ func convertServerConfig(agentConfig *Config) (*nomad.Config, error) { if gcInterval := agentConfig.Server.JobGCInterval; gcInterval != "" { dur, err := time.ParseDuration(gcInterval) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to parse job_gc_interval: %v", err) + } else if dur <= time.Duration(0) { + return nil, fmt.Errorf("job_gc_interval should be greater than 0s") } conf.JobGCInterval = dur } @@ -321,6 +328,11 @@ func convertServerConfig(agentConfig *Config) (*nomad.Config, error) { return nil, fmt.Errorf("server_service_name must be set when auto_advertise is enabled") } + // handle system scheduler preemption default + if agentConfig.Server.DefaultSchedulerConfig != nil { + conf.DefaultSchedulerConfig = *agentConfig.Server.DefaultSchedulerConfig + } + // Add the Consul and Vault configs conf.ConsulConfig = agentConfig.Consul conf.VaultConfig = agentConfig.Vault @@ -334,6 +346,26 @@ func convertServerConfig(agentConfig *Config) (*nomad.Config, error) { conf.DisableDispatchedJobSummaryMetrics = agentConfig.Telemetry.DisableDispatchedJobSummaryMetrics conf.BackwardsCompatibleMetrics = agentConfig.Telemetry.BackwardsCompatibleMetrics + // Parse Limits timeout from a string into durations + if d, err := time.ParseDuration(agentConfig.Limits.RPCHandshakeTimeout); err != nil { + return nil, fmt.Errorf("error parsing rpc_handshake_timeout: %v", err) + } else if d < 0 { + return nil, fmt.Errorf("rpc_handshake_timeout must be >= 0") + } else { + conf.RPCHandshakeTimeout = d + } + + // Set max rpc conns; nil/0 == unlimited + // Leave a little room for streaming RPCs + minLimit := config.LimitsNonStreamingConnsPerClient + 5 + if agentConfig.Limits.RPCMaxConnsPerClient == nil || *agentConfig.Limits.RPCMaxConnsPerClient == 0 { + conf.RPCMaxConnsPerClient = 0 + } else if limit := *agentConfig.Limits.RPCMaxConnsPerClient; limit <= minLimit { + return nil, fmt.Errorf("rpc_max_conns_per_client must be > %d; found: %d", minLimit, limit) + } else { + conf.RPCMaxConnsPerClient = limit + } + return conf, nil } @@ -434,6 +466,8 @@ func convertClientConfig(agentConfig *Config) (*clientconfig.Config, error) { conf.Servers = agentConfig.Client.Servers conf.LogLevel = agentConfig.LogLevel conf.DevMode = agentConfig.DevMode + conf.EnableDebug = agentConfig.EnableDebug + if agentConfig.Region != "" { conf.Region = agentConfig.Region } @@ -583,7 +617,7 @@ func (a *Agent) setupServer() error { } // Create the server - server, err := nomad.NewServer(conf, a.consulCatalog) + server, err := nomad.NewServer(conf, a.consulCatalog, a.consulACLs) if err != nil { return fmt.Errorf("server setup failed: %v", err) } @@ -835,40 +869,6 @@ func (a *Agent) reservePortsForClient(conf *clientconfig.Config) error { return nil } -// findLoopbackDevice iterates through all the interfaces on a machine and -// returns the ip addr, mask of the loopback device -func (a *Agent) findLoopbackDevice() (string, string, string, error) { - var ifcs []net.Interface - var err error - ifcs, err = net.Interfaces() - if err != nil { - return "", "", "", err - } - for _, ifc := range ifcs { - addrs, err := ifc.Addrs() - if err != nil { - return "", "", "", err - } - for _, addr := range addrs { - var ip net.IP - switch v := addr.(type) { - case *net.IPNet: - ip = v.IP - case *net.IPAddr: - ip = v.IP - } - if ip.IsLoopback() { - if ip.To4() == nil { - continue - } - return ifc.Name, ip.String(), addr.String(), nil - } - } - } - - return "", "", "", fmt.Errorf("no loopback devices with IPV4 addr found") -} - // Leave is used gracefully exit. Clients will inform servers // of their departure so that allocations can be rescheduled. func (a *Agent) Leave() error { @@ -1056,11 +1056,12 @@ func (a *Agent) setupConsul(consulConfig *config.ConsulConfig) error { return err } - // Determine version for TLSSkipVerify - // Create Consul Catalog client for service discovery. a.consulCatalog = client.Catalog() + // Create Consul ACL client for managing tokens. + a.consulACLs = client.ACL() + // Create Consul Service client for service advertisement and checks. isClient := false if a.config.Client != nil && a.config.Client.Enabled { diff --git a/command/agent/agent_endpoint.go b/command/agent/agent_endpoint.go index cc1564e69f1..c7cc6c5d123 100644 --- a/command/agent/agent_endpoint.go +++ b/command/agent/agent_endpoint.go @@ -1,16 +1,26 @@ package agent import ( + "bytes" + "context" "encoding/json" + "fmt" + "io" "net" "net/http" "sort" + "strconv" "strings" + "github.com/docker/docker/pkg/ioutils" + log "github.com/hashicorp/go-hclog" "github.com/hashicorp/nomad/acl" + cstructs "github.com/hashicorp/nomad/client/structs" + "github.com/hashicorp/nomad/command/agent/pprof" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/serf/serf" "github.com/mitchellh/copystructure" + "github.com/ugorji/go/codec" ) type Member struct { @@ -87,6 +97,18 @@ func (s *HTTPServer) AgentSelfRequest(resp http.ResponseWriter, req *http.Reques self.Config.Vault.Token = "" } + if self.Config != nil && self.Config.ACL != nil && self.Config.ACL.ReplicationToken != "" { + self.Config.ACL.ReplicationToken = "" + } + + if self.Config != nil && self.Config.Consul != nil && self.Config.Consul.Token != "" { + self.Config.Consul.Token = "" + } + + if self.Config != nil && self.Config.Telemetry != nil && self.Config.Telemetry.CirconusAPIToken != "" { + self.Config.Telemetry.CirconusAPIToken = "" + } + return self, nil } @@ -133,6 +155,147 @@ func (s *HTTPServer) AgentMembersRequest(resp http.ResponseWriter, req *http.Req return out, nil } +func (s *HTTPServer) AgentMonitor(resp http.ResponseWriter, req *http.Request) (interface{}, error) { + // Get the provided loglevel. + logLevel := req.URL.Query().Get("log_level") + if logLevel == "" { + logLevel = "INFO" + } + + if log.LevelFromString(logLevel) == log.NoLevel { + return nil, CodedError(400, fmt.Sprintf("Unknown log level: %s", logLevel)) + } + + logJSON := false + logJSONStr := req.URL.Query().Get("log_json") + if logJSONStr != "" { + parsed, err := strconv.ParseBool(logJSONStr) + if err != nil { + return nil, CodedError(400, fmt.Sprintf("Unknown option for log json: %v", err)) + } + logJSON = parsed + } + + plainText := false + plainTextStr := req.URL.Query().Get("plain") + if plainTextStr != "" { + parsed, err := strconv.ParseBool(plainTextStr) + if err != nil { + return nil, CodedError(400, fmt.Sprintf("Unknown option for plain: %v", err)) + } + plainText = parsed + } + + nodeID := req.URL.Query().Get("node_id") + // Build the request and parse the ACL token + args := cstructs.MonitorRequest{ + NodeID: nodeID, + ServerID: req.URL.Query().Get("server_id"), + LogLevel: logLevel, + LogJSON: logJSON, + PlainText: plainText, + } + + // if node and server were requested return error + if args.NodeID != "" && args.ServerID != "" { + return nil, CodedError(400, "Cannot target node and server simultaneously") + } + + s.parse(resp, req, &args.QueryOptions.Region, &args.QueryOptions) + + // Make the RPC + var handler structs.StreamingRpcHandler + var handlerErr error + if nodeID != "" { + // Determine the handler to use + useLocalClient, useClientRPC, useServerRPC := s.rpcHandlerForNode(nodeID) + if useLocalClient { + handler, handlerErr = s.agent.Client().StreamingRpcHandler("Agent.Monitor") + } else if useClientRPC { + handler, handlerErr = s.agent.Client().RemoteStreamingRpcHandler("Agent.Monitor") + } else if useServerRPC { + handler, handlerErr = s.agent.Server().StreamingRpcHandler("Agent.Monitor") + } else { + handlerErr = CodedError(400, "No local Node and node_id not provided") + } + // No node id monitor current server/client + } else if srv := s.agent.Server(); srv != nil { + handler, handlerErr = srv.StreamingRpcHandler("Agent.Monitor") + } else { + handler, handlerErr = s.agent.Client().StreamingRpcHandler("Agent.Monitor") + } + + if handlerErr != nil { + return nil, CodedError(500, handlerErr.Error()) + } + httpPipe, handlerPipe := net.Pipe() + decoder := codec.NewDecoder(httpPipe, structs.MsgpackHandle) + encoder := codec.NewEncoder(httpPipe, structs.MsgpackHandle) + + ctx, cancel := context.WithCancel(req.Context()) + go func() { + <-ctx.Done() + httpPipe.Close() + }() + + // Create an output that gets flushed on every write + output := ioutils.NewWriteFlusher(resp) + + // create an error channel to handle errors + errCh := make(chan HTTPCodedError, 2) + + // stream response + go func() { + defer cancel() + + // Send the request + if err := encoder.Encode(args); err != nil { + errCh <- CodedError(500, err.Error()) + return + } + + for { + select { + case <-ctx.Done(): + errCh <- nil + return + default: + } + + var res cstructs.StreamErrWrapper + if err := decoder.Decode(&res); err != nil { + errCh <- CodedError(500, err.Error()) + return + } + decoder.Reset(httpPipe) + + if err := res.Error; err != nil { + if err.Code != nil { + errCh <- CodedError(int(*err.Code), err.Error()) + return + } + } + + if _, err := io.Copy(output, bytes.NewReader(res.Payload)); err != nil { + errCh <- CodedError(500, err.Error()) + return + } + } + }() + + handler(handlerPipe) + cancel() + codedErr := <-errCh + + if codedErr != nil && + (codedErr == io.EOF || + strings.Contains(codedErr.Error(), "closed") || + strings.Contains(codedErr.Error(), "EOF")) { + codedErr = nil + } + return nil, codedErr +} + func (s *HTTPServer) AgentForceLeaveRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) { if req.Method != "PUT" && req.Method != "POST" { return nil, CodedError(405, ErrInvalidMethod) @@ -163,6 +326,92 @@ func (s *HTTPServer) AgentForceLeaveRequest(resp http.ResponseWriter, req *http. return nil, err } +func (s *HTTPServer) AgentPprofRequest(resp http.ResponseWriter, req *http.Request) ([]byte, error) { + path := strings.TrimPrefix(req.URL.Path, "/v1/agent/pprof/") + switch path { + case "": + // no root index route + return nil, CodedError(404, ErrInvalidMethod) + case "cmdline": + return s.agentPprof(pprof.CmdReq, resp, req) + case "profile": + return s.agentPprof(pprof.CPUReq, resp, req) + case "trace": + return s.agentPprof(pprof.TraceReq, resp, req) + default: + // Add profile to request + values := req.URL.Query() + values.Add("profile", path) + req.URL.RawQuery = values.Encode() + + // generic pprof profile request + return s.agentPprof(pprof.LookupReq, resp, req) + } +} + +func (s *HTTPServer) agentPprof(reqType pprof.ReqType, resp http.ResponseWriter, req *http.Request) ([]byte, error) { + + // Parse query param int values + // Errors are dropped here and default to their zero values. + // This is to mimick the functionality that net/pprof implements. + seconds, _ := strconv.Atoi(req.URL.Query().Get("seconds")) + debug, _ := strconv.Atoi(req.URL.Query().Get("debug")) + gc, _ := strconv.Atoi(req.URL.Query().Get("gc")) + + // default to 1 second + if seconds == 0 { + seconds = 1 + } + + // Create the request + args := &structs.AgentPprofRequest{ + NodeID: req.URL.Query().Get("node_id"), + Profile: req.URL.Query().Get("profile"), + ServerID: req.URL.Query().Get("server_id"), + Debug: debug, + GC: gc, + ReqType: reqType, + Seconds: seconds, + } + + // if node and server were requested return error + if args.NodeID != "" && args.ServerID != "" { + return nil, CodedError(400, "Cannot target node and server simultaneously") + } + + s.parse(resp, req, &args.QueryOptions.Region, &args.QueryOptions) + + var reply structs.AgentPprofResponse + var rpcErr error + if args.NodeID != "" { + // Make the RPC + localClient, remoteClient, localServer := s.rpcHandlerForNode(args.NodeID) + if localClient { + rpcErr = s.agent.Client().ClientRPC("Agent.Profile", &args, &reply) + } else if remoteClient { + rpcErr = s.agent.Client().RPC("Agent.Profile", &args, &reply) + } else if localServer { + rpcErr = s.agent.Server().RPC("Agent.Profile", &args, &reply) + } + // No node id, profile current server/client + } else if srv := s.agent.Server(); srv != nil { + rpcErr = srv.RPC("Agent.Profile", &args, &reply) + } else { + rpcErr = s.agent.Client().RPC("Agent.Profile", &args, &reply) + } + + if rpcErr != nil { + return nil, rpcErr + } + + // Set headers from profile request + for k, v := range reply.HTTPHeaders { + resp.Header().Set(k, v) + } + + return reply.Payload, nil +} + // AgentServersRequest is used to query the list of servers used by the Nomad // Client for RPCs. This endpoint can also be used to update the list of // servers for a given agent. diff --git a/command/agent/agent_endpoint_test.go b/command/agent/agent_endpoint_test.go index 211cd74cf6f..01457ad4fb7 100644 --- a/command/agent/agent_endpoint_test.go +++ b/command/agent/agent_endpoint_test.go @@ -4,63 +4,86 @@ import ( "bytes" "encoding/json" "fmt" + "io/ioutil" "net" "net/http" "net/http/httptest" "net/url" + "strings" "testing" "time" msgpackrpc "github.com/hashicorp/net-rpc-msgpackrpc" "github.com/hashicorp/nomad/acl" + "github.com/hashicorp/nomad/helper" "github.com/hashicorp/nomad/helper/pool" "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/testutil" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestHTTP_AgentSelf(t *testing.T) { t.Parallel() + require := require.New(t) + httpTest(t, nil, func(s *TestAgent) { // Make the HTTP request req, err := http.NewRequest("GET", "/v1/agent/self", nil) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(err) respW := httptest.NewRecorder() // Make the request obj, err := s.Server.AgentSelfRequest(respW, req) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(err) // Check the job self := obj.(agentSelf) - if self.Config == nil { - t.Fatalf("bad: %#v", self) - } - if len(self.Stats) == 0 { - t.Fatalf("bad: %#v", self) - } + require.NotNil(self.Config) + require.NotNil(self.Config.ACL) + require.NotEmpty(self.Stats) // Check the Vault config - if self.Config.Vault.Token != "" { - t.Fatalf("bad: %#v", self) - } + require.Empty(self.Config.Vault.Token) // Assign a Vault token and require it is redacted. s.Config.Vault.Token = "badc0deb-adc0-deba-dc0d-ebadc0debadc" respW = httptest.NewRecorder() obj, err = s.Server.AgentSelfRequest(respW, req) - if err != nil { - t.Fatalf("err: %v", err) - } + require.NoError(err) self = obj.(agentSelf) - if self.Config.Vault.Token != "" { - t.Fatalf("bad: %#v", self) - } + require.Equal("", self.Config.Vault.Token) + + // Assign a ReplicationToken token and require it is redacted. + s.Config.ACL.ReplicationToken = "badc0deb-adc0-deba-dc0d-ebadc0debadc" + respW = httptest.NewRecorder() + obj, err = s.Server.AgentSelfRequest(respW, req) + require.NoError(err) + self = obj.(agentSelf) + require.Equal("", self.Config.ACL.ReplicationToken) + + // Check the Consul config + require.Empty(self.Config.Consul.Token) + + // Assign a Consul token and require it is redacted. + s.Config.Consul.Token = "badc0deb-adc0-deba-dc0d-ebadc0debadc" + respW = httptest.NewRecorder() + obj, err = s.Server.AgentSelfRequest(respW, req) + require.NoError(err) + self = obj.(agentSelf) + require.Equal("", self.Config.Consul.Token) + + // Check the Circonus config + require.Empty(self.Config.Telemetry.CirconusAPIToken) + + // Assign a Consul token and require it is redacted. + s.Config.Telemetry.CirconusAPIToken = "badc0deb-adc0-deba-dc0d-ebadc0debadc" + respW = httptest.NewRecorder() + obj, err = s.Server.AgentSelfRequest(respW, req) + require.NoError(err) + self = obj.(agentSelf) + require.Equal("", self.Config.Telemetry.CirconusAPIToken) }) } @@ -230,6 +253,380 @@ func TestHTTP_AgentMembers_ACL(t *testing.T) { }) } +func TestHTTP_AgentMonitor(t *testing.T) { + t.Parallel() + + t.Run("invalid log_json parameter", func(t *testing.T) { + httpTest(t, nil, func(s *TestAgent) { + req, err := http.NewRequest("GET", "/v1/agent/monitor?log_json=no", nil) + require.Nil(t, err) + resp := newClosableRecorder() + + // Make the request + _, err = s.Server.AgentMonitor(resp, req) + httpErr := err.(HTTPCodedError).Code() + require.Equal(t, 400, httpErr) + }) + }) + + t.Run("unknown log_level", func(t *testing.T) { + httpTest(t, nil, func(s *TestAgent) { + req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=unknown", nil) + require.Nil(t, err) + resp := newClosableRecorder() + + // Make the request + _, err = s.Server.AgentMonitor(resp, req) + httpErr := err.(HTTPCodedError).Code() + require.Equal(t, 400, httpErr) + }) + }) + + t.Run("check for specific log level", func(t *testing.T) { + httpTest(t, nil, func(s *TestAgent) { + req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn", nil) + require.Nil(t, err) + resp := newClosableRecorder() + defer resp.Close() + + go func() { + _, err = s.Server.AgentMonitor(resp, req) + assert.NoError(t, err) + }() + + // send the same log until monitor sink is set up + maxLogAttempts := 10 + tried := 0 + testutil.WaitForResult(func() (bool, error) { + if tried < maxLogAttempts { + s.Server.logger.Warn("log that should be sent") + tried++ + } + + got := resp.Body.String() + want := `{"Data":"` + if strings.Contains(got, want) { + return true, nil + } + + return false, fmt.Errorf("missing expected log, got: %v, want: %v", got, want) + }, func(err error) { + require.Fail(t, err.Error()) + }) + }) + }) + + t.Run("plain output", func(t *testing.T) { + httpTest(t, nil, func(s *TestAgent) { + req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=debug&plain=true", nil) + require.Nil(t, err) + resp := newClosableRecorder() + defer resp.Close() + + go func() { + _, err = s.Server.AgentMonitor(resp, req) + assert.NoError(t, err) + }() + + // send the same log until monitor sink is set up + maxLogAttempts := 10 + tried := 0 + testutil.WaitForResult(func() (bool, error) { + if tried < maxLogAttempts { + s.Server.logger.Debug("log that should be sent") + tried++ + } + + got := resp.Body.String() + want := `[DEBUG] http: log that should be sent` + if strings.Contains(got, want) { + return true, nil + } + + return false, fmt.Errorf("missing expected log, got: %v, want: %v", got, want) + }, func(err error) { + require.Fail(t, err.Error()) + }) + }) + }) + + t.Run("logs for a specific node", func(t *testing.T) { + httpTest(t, nil, func(s *TestAgent) { + req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn&node_id="+s.client.NodeID(), nil) + require.Nil(t, err) + resp := newClosableRecorder() + defer resp.Close() + + go func() { + _, err = s.Server.AgentMonitor(resp, req) + assert.NoError(t, err) + }() + + // send the same log until monitor sink is set up + maxLogAttempts := 10 + tried := 0 + out := "" + testutil.WaitForResult(func() (bool, error) { + if tried < maxLogAttempts { + s.Server.logger.Debug("log that should not be sent") + s.Server.logger.Warn("log that should be sent") + tried++ + } + output, err := ioutil.ReadAll(resp.Body) + if err != nil { + return false, err + } + + out += string(output) + want := `{"Data":"` + if strings.Contains(out, want) { + return true, nil + } + + return false, fmt.Errorf("missing expected log, got: %v, want: %v", out, want) + }, func(err error) { + require.Fail(t, err.Error()) + }) + }) + }) + + t.Run("logs for a local client with no server running on agent", func(t *testing.T) { + httpTest(t, nil, func(s *TestAgent) { + req, err := http.NewRequest("GET", "/v1/agent/monitor?log_level=warn", nil) + require.Nil(t, err) + resp := newClosableRecorder() + defer resp.Close() + + go func() { + // set server to nil to monitor as client + s.Agent.server = nil + _, err = s.Server.AgentMonitor(resp, req) + assert.NoError(t, err) + }() + + // send the same log until monitor sink is set up + maxLogAttempts := 10 + tried := 0 + out := "" + testutil.WaitForResult(func() (bool, error) { + if tried < maxLogAttempts { + s.Agent.logger.Warn("log that should be sent") + tried++ + } + output, err := ioutil.ReadAll(resp.Body) + if err != nil { + return false, err + } + + out += string(output) + want := `{"Data":"` + if strings.Contains(out, want) { + return true, nil + } + + return false, fmt.Errorf("missing expected log, got: %v, want: %v", out, want) + }, func(err error) { + require.Fail(t, err.Error()) + }) + }) + }) +} + +// Scenarios when Pprof requests should be available +// see https://github.com/hashicorp/nomad/issues/6496 +// +---------------+------------------+--------+------------------+ +// | Endpoint | `enable_debug` | ACLs | **Available?** | +// +---------------+------------------+--------+------------------+ +// | /debug/pprof | unset | n/a | no | +// | /debug/pprof | `true` | n/a | yes | +// | /debug/pprof | `false` | n/a | no | +// | /agent/pprof | unset | off | no | +// | /agent/pprof | unset | on | **yes** | +// | /agent/pprof | `true` | off | yes | +// | /agent/pprof | `false` | on | **yes** | +// +---------------+------------------+--------+------------------+ +func TestAgent_PprofRequest_Permissions(t *testing.T) { + trueP, falseP := helper.BoolToPtr(true), helper.BoolToPtr(false) + cases := []struct { + acl *bool + debug *bool + ok bool + }{ + // manually set to false because test helpers + // enable to true by default + // enableDebug: helper.BoolToPtr(false), + {debug: nil, ok: false}, + {debug: trueP, ok: true}, + {debug: falseP, ok: false}, + {debug: falseP, acl: falseP, ok: false}, + {acl: trueP, ok: true}, + {acl: falseP, debug: trueP, ok: true}, + {debug: falseP, acl: trueP, ok: true}, + } + + for _, tc := range cases { + ptrToStr := func(val *bool) string { + if val == nil { + return "unset" + } else if *val == true { + return "true" + } else { + return "false" + } + } + + t.Run( + fmt.Sprintf("debug %s, acl %s", + ptrToStr(tc.debug), + ptrToStr(tc.acl)), + func(t *testing.T) { + cb := func(c *Config) { + if tc.acl != nil { + c.ACL.Enabled = *tc.acl + } + if tc.debug == nil { + var nodebug bool + c.EnableDebug = nodebug + } else { + c.EnableDebug = *tc.debug + } + } + + httpTest(t, cb, func(s *TestAgent) { + state := s.Agent.server.State() + url := "/v1/agent/pprof/cmdline" + req, err := http.NewRequest("GET", url, nil) + require.NoError(t, err) + respW := httptest.NewRecorder() + + if tc.acl != nil && *tc.acl { + token := mock.CreatePolicyAndToken(t, state, 1007, "valid", mock.AgentPolicy(acl.PolicyWrite)) + setToken(req, token) + } + + resp, err := s.Server.AgentPprofRequest(respW, req) + if tc.ok { + require.NoError(t, err) + require.NotNil(t, resp) + } else { + require.Error(t, err) + require.Equal(t, structs.ErrPermissionDenied.Error(), err.Error()) + } + }) + }) + } +} + +func TestAgent_PprofRequest(t *testing.T) { + cases := []struct { + desc string + url string + addNodeID bool + addServerID bool + expectedErr string + clientOnly bool + }{ + { + desc: "cmdline local server request", + url: "/v1/agent/pprof/cmdline", + }, + { + desc: "cmdline local node request", + url: "/v1/agent/pprof/cmdline", + clientOnly: true, + }, + { + desc: "cmdline node request", + url: "/v1/agent/pprof/cmdline", + addNodeID: true, + }, + { + desc: "cmdline server request", + url: "/v1/agent/pprof/cmdline", + addServerID: true, + }, + { + desc: "invalid server request", + url: "/v1/agent/pprof/unknown", + addServerID: true, + expectedErr: "RPC Error:: 404,Pprof profile not found profile: unknown", + }, + { + desc: "cpu profile request", + url: "/v1/agent/pprof/profile", + addNodeID: true, + }, + { + desc: "trace request", + url: "/v1/agent/pprof/trace", + addNodeID: true, + }, + { + desc: "pprof lookup request", + url: "/v1/agent/pprof/goroutine", + addNodeID: true, + }, + { + desc: "unknown pprof lookup request", + url: "/v1/agent/pprof/latency", + addNodeID: true, + expectedErr: "RPC Error:: 404,Pprof profile not found profile: latency", + }, + } + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + httpTest(t, nil, func(s *TestAgent) { + + // add node or server id query param + url := tc.url + if tc.addNodeID { + url = url + "?node_id=" + s.client.NodeID() + } else if tc.addServerID { + url = url + "?server_id=" + s.server.LocalMember().Name + } + + if tc.clientOnly { + s.Agent.server = nil + } + + req, err := http.NewRequest("GET", url, nil) + require.Nil(t, err) + respW := httptest.NewRecorder() + + resp, err := s.Server.AgentPprofRequest(respW, req) + + if tc.expectedErr != "" { + require.Error(t, err) + require.EqualError(t, err, tc.expectedErr) + } else { + require.NoError(t, err) + require.NotNil(t, resp) + } + }) + }) + } +} + +type closableRecorder struct { + *httptest.ResponseRecorder + closer chan bool +} + +func newClosableRecorder() *closableRecorder { + r := httptest.NewRecorder() + closer := make(chan bool) + return &closableRecorder{r, closer} +} + +func (r *closableRecorder) Close() { + close(r.closer) +} + +func (r *closableRecorder) CloseNotify() <-chan bool { + return r.closer +} + func TestHTTP_AgentForceLeave(t *testing.T) { t.Parallel() httpTest(t, nil, func(s *TestAgent) { diff --git a/command/agent/agent_test.go b/command/agent/agent_test.go index 149c88b9639..09a5cde4e3d 100644 --- a/command/agent/agent_test.go +++ b/command/agent/agent_test.go @@ -12,6 +12,7 @@ import ( "github.com/hashicorp/nomad/helper" "github.com/hashicorp/nomad/helper/testlog" "github.com/hashicorp/nomad/nomad/structs" + "github.com/hashicorp/nomad/nomad/structs/config" sconfig "github.com/hashicorp/nomad/nomad/structs/config" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -53,37 +54,21 @@ func TestAgent_ServerConfig(t *testing.T) { t.Fatalf("error normalizing config: %v", err) } out, err := a.serverConfig() - if err != nil { - t.Fatalf("err: %s", err) - } + require.NoError(t, err) + serfAddr := out.SerfConfig.MemberlistConfig.AdvertiseAddr - if serfAddr != "127.0.0.1" { - t.Fatalf("expect 127.0.0.1, got: %s", serfAddr) - } + require.Equal(t, "127.0.0.1", serfAddr) + serfPort := out.SerfConfig.MemberlistConfig.AdvertisePort - if serfPort != 4000 { - t.Fatalf("expected 4000, got: %d", serfPort) - } - if out.AuthoritativeRegion != "global" { - t.Fatalf("bad: %#v", out.AuthoritativeRegion) - } - if !out.ACLEnabled { - t.Fatalf("ACL not enabled") - } - if out.ACLEnforceNode { - t.Fatalf("ACLEnforceNode should be disabled by default") - } + require.Equal(t, 4000, serfPort) + + require.Equal(t, "global", out.AuthoritativeRegion) + require.True(t, out.ACLEnabled) // Assert addresses weren't changed - if addr := conf.AdvertiseAddrs.RPC; addr != "127.0.0.1:4001" { - t.Fatalf("bad rpc advertise addr: %#v", addr) - } - if addr := conf.AdvertiseAddrs.HTTP; addr != "10.10.11.1:4005" { - t.Fatalf("expect 10.11.11.1:4005, got: %v", addr) - } - if addr := conf.Addresses.RPC; addr != "0.0.0.0" { - t.Fatalf("expect 0.0.0.0, got: %v", addr) - } + require.Equal(t, "127.0.0.1:4001", conf.AdvertiseAddrs.RPC) + require.Equal(t, "10.10.11.1:4005", conf.AdvertiseAddrs.HTTP) + require.Equal(t, "0.0.0.0", conf.Addresses.RPC) // Sets up the ports properly conf.Addresses.RPC = "" @@ -91,19 +76,12 @@ func TestAgent_ServerConfig(t *testing.T) { conf.Ports.RPC = 4003 conf.Ports.Serf = 4004 - if err := conf.normalizeAddrs(); err != nil { - t.Fatalf("error normalizing config: %v", err) - } + require.NoError(t, conf.normalizeAddrs()) + out, err = a.serverConfig() - if err != nil { - t.Fatalf("err: %s", err) - } - if addr := out.RPCAddr.Port; addr != 4003 { - t.Fatalf("expect 4003, got: %d", out.RPCAddr.Port) - } - if port := out.SerfConfig.MemberlistConfig.BindPort; port != 4004 { - t.Fatalf("expect 4004, got: %d", port) - } + require.NoError(t, err) + require.Equal(t, 4003, out.RPCAddr.Port) + require.Equal(t, 4004, out.SerfConfig.MemberlistConfig.BindPort) // Prefers advertise over bind addr conf.BindAddr = "127.0.0.3" @@ -114,88 +92,51 @@ func TestAgent_ServerConfig(t *testing.T) { conf.AdvertiseAddrs.RPC = "" conf.AdvertiseAddrs.Serf = "10.0.0.12:4004" - if err := conf.normalizeAddrs(); err != nil { - t.Fatalf("error normalizing config: %v", err) - } + require.NoError(t, conf.normalizeAddrs()) + out, err = a.serverConfig() - if err != nil { - t.Fatalf("err: %s", err) - } - if addr := out.RPCAddr.IP.String(); addr != "127.0.0.2" { - t.Fatalf("expect 127.0.0.2, got: %s", addr) - } - if port := out.RPCAddr.Port; port != 4003 { - t.Fatalf("expect 4647, got: %d", port) - } - if addr := out.SerfConfig.MemberlistConfig.BindAddr; addr != "127.0.0.2" { - t.Fatalf("expect 127.0.0.2, got: %s", addr) - } - if port := out.SerfConfig.MemberlistConfig.BindPort; port != 4004 { - t.Fatalf("expect 4648, got: %d", port) - } - if addr := conf.Addresses.HTTP; addr != "127.0.0.2" { - t.Fatalf("expect 127.0.0.2, got: %s", addr) - } - if addr := conf.Addresses.RPC; addr != "127.0.0.2" { - t.Fatalf("expect 127.0.0.2, got: %s", addr) - } - if addr := conf.Addresses.Serf; addr != "127.0.0.2" { - t.Fatalf("expect 10.0.0.12, got: %s", addr) - } - if addr := conf.normalizedAddrs.HTTP; addr != "127.0.0.2:4646" { - t.Fatalf("expect 127.0.0.2:4646, got: %s", addr) - } - if addr := conf.normalizedAddrs.RPC; addr != "127.0.0.2:4003" { - t.Fatalf("expect 127.0.0.2:4003, got: %s", addr) - } - if addr := conf.normalizedAddrs.Serf; addr != "127.0.0.2:4004" { - t.Fatalf("expect 10.0.0.12:4004, got: %s", addr) - } - if addr := conf.AdvertiseAddrs.HTTP; addr != "10.0.0.10:4646" { - t.Fatalf("expect 10.0.0.10:4646, got: %s", addr) - } - if addr := conf.AdvertiseAddrs.RPC; addr != "127.0.0.2:4003" { - t.Fatalf("expect 127.0.0.2:4003, got: %s", addr) - } - if addr := conf.AdvertiseAddrs.Serf; addr != "10.0.0.12:4004" { - t.Fatalf("expect 10.0.0.12:4004, got: %s", addr) - } + require.Equal(t, "127.0.0.2", out.RPCAddr.IP.String()) + require.Equal(t, 4003, out.RPCAddr.Port) + require.Equal(t, "127.0.0.2", out.SerfConfig.MemberlistConfig.BindAddr) + require.Equal(t, 4004, out.SerfConfig.MemberlistConfig.BindPort) + require.Equal(t, "127.0.0.2", conf.Addresses.HTTP) + require.Equal(t, "127.0.0.2", conf.Addresses.RPC) + require.Equal(t, "127.0.0.2", conf.Addresses.Serf) + require.Equal(t, "127.0.0.2:4646", conf.normalizedAddrs.HTTP) + require.Equal(t, "127.0.0.2:4003", conf.normalizedAddrs.RPC) + require.Equal(t, "127.0.0.2:4004", conf.normalizedAddrs.Serf) + require.Equal(t, "10.0.0.10:4646", conf.AdvertiseAddrs.HTTP) + require.Equal(t, "127.0.0.2:4003", conf.AdvertiseAddrs.RPC) + require.Equal(t, "10.0.0.12:4004", conf.AdvertiseAddrs.Serf) conf.Server.NodeGCThreshold = "42g" - if err := conf.normalizeAddrs(); err != nil { - t.Fatalf("error normalizing config: %v", err) - } - out, err = a.serverConfig() + require.NoError(t, conf.normalizeAddrs()) + + _, err = a.serverConfig() if err == nil || !strings.Contains(err.Error(), "unknown unit") { t.Fatalf("expected unknown unit error, got: %#v", err) } conf.Server.NodeGCThreshold = "10s" - if err := conf.normalizeAddrs(); err != nil { - t.Fatalf("error normalizing config: %v", err) - } + require.NoError(t, conf.normalizeAddrs()) out, err = a.serverConfig() - if threshold := out.NodeGCThreshold; threshold != time.Second*10 { - t.Fatalf("expect 10s, got: %s", threshold) - } + require.NoError(t, err) + require.Equal(t, 10*time.Second, out.NodeGCThreshold) conf.Server.HeartbeatGrace = 37 * time.Second out, err = a.serverConfig() - if threshold := out.HeartbeatGrace; threshold != time.Second*37 { - t.Fatalf("expect 37s, got: %s", threshold) - } + require.NoError(t, err) + require.Equal(t, 37*time.Second, out.HeartbeatGrace) conf.Server.MinHeartbeatTTL = 37 * time.Second out, err = a.serverConfig() - if min := out.MinHeartbeatTTL; min != time.Second*37 { - t.Fatalf("expect 37s, got: %s", min) - } + require.NoError(t, err) + require.Equal(t, 37*time.Second, out.MinHeartbeatTTL) conf.Server.MaxHeartbeatsPerSecond = 11.0 out, err = a.serverConfig() - if max := out.MaxHeartbeatsPerSecond; max != 11.0 { - t.Fatalf("expect 11, got: %v", max) - } + require.NoError(t, err) + require.Equal(t, float64(11.0), out.MaxHeartbeatsPerSecond) // Defaults to the global bind addr conf.Addresses.RPC = "" @@ -207,61 +148,218 @@ func TestAgent_ServerConfig(t *testing.T) { conf.Ports.HTTP = 4646 conf.Ports.RPC = 4647 conf.Ports.Serf = 4648 - if err := conf.normalizeAddrs(); err != nil { - t.Fatalf("error normalizing config: %v", err) - } + require.NoError(t, conf.normalizeAddrs()) + out, err = a.serverConfig() - if err != nil { - t.Fatalf("err: %s", err) - } - if addr := out.RPCAddr.IP.String(); addr != "127.0.0.3" { - t.Fatalf("expect 127.0.0.3, got: %s", addr) - } - if addr := out.SerfConfig.MemberlistConfig.BindAddr; addr != "127.0.0.3" { - t.Fatalf("expect 127.0.0.3, got: %s", addr) - } - if addr := conf.Addresses.HTTP; addr != "127.0.0.3" { - t.Fatalf("expect 127.0.0.3, got: %s", addr) - } - if addr := conf.Addresses.RPC; addr != "127.0.0.3" { - t.Fatalf("expect 127.0.0.3, got: %s", addr) - } - if addr := conf.Addresses.Serf; addr != "127.0.0.3" { - t.Fatalf("expect 127.0.0.3, got: %s", addr) - } - if addr := conf.normalizedAddrs.HTTP; addr != "127.0.0.3:4646" { - t.Fatalf("expect 127.0.0.3:4646, got: %s", addr) - } - if addr := conf.normalizedAddrs.RPC; addr != "127.0.0.3:4647" { - t.Fatalf("expect 127.0.0.3:4647, got: %s", addr) - } - if addr := conf.normalizedAddrs.Serf; addr != "127.0.0.3:4648" { - t.Fatalf("expect 127.0.0.3:4648, got: %s", addr) - } + require.NoError(t, err) + + require.Equal(t, "127.0.0.3", out.RPCAddr.IP.String()) + require.Equal(t, "127.0.0.3", out.SerfConfig.MemberlistConfig.BindAddr) + require.Equal(t, "127.0.0.3", conf.Addresses.HTTP) + require.Equal(t, "127.0.0.3", conf.Addresses.RPC) + require.Equal(t, "127.0.0.3", conf.Addresses.Serf) + require.Equal(t, "127.0.0.3:4646", conf.normalizedAddrs.HTTP) + require.Equal(t, "127.0.0.3:4647", conf.normalizedAddrs.RPC) + require.Equal(t, "127.0.0.3:4648", conf.normalizedAddrs.Serf) // Properly handles the bootstrap flags conf.Server.BootstrapExpect = 1 out, err = a.serverConfig() - if err != nil { - t.Fatalf("err: %s", err) + require.NoError(t, err) + require.True(t, out.Bootstrap) + require.Equal(t, int32(0), out.BootstrapExpect) + + conf.Server.BootstrapExpect = 3 + out, err = a.serverConfig() + require.NoError(t, err) + require.False(t, out.Bootstrap) + require.Equal(t, int32(3), out.BootstrapExpect) +} + +func TestAgent_ServerConfig_SchedulerFlags(t *testing.T) { + cases := []struct { + name string + input *structs.SchedulerConfiguration + expected structs.SchedulerConfiguration + }{ + { + "default case", + nil, + structs.SchedulerConfiguration{ + PreemptionConfig: structs.PreemptionConfig{ + SystemSchedulerEnabled: true, + }, + }, + }, + { + "empty value: preemption is disabled", + &structs.SchedulerConfiguration{}, + structs.SchedulerConfiguration{ + PreemptionConfig: structs.PreemptionConfig{ + SystemSchedulerEnabled: false, + }, + }, + }, + { + "all explicitly set", + &structs.SchedulerConfiguration{ + PreemptionConfig: structs.PreemptionConfig{ + SystemSchedulerEnabled: true, + BatchSchedulerEnabled: true, + ServiceSchedulerEnabled: true, + }, + }, + structs.SchedulerConfiguration{ + PreemptionConfig: structs.PreemptionConfig{ + SystemSchedulerEnabled: true, + BatchSchedulerEnabled: true, + ServiceSchedulerEnabled: true, + }, + }, + }, } - if !out.Bootstrap { - t.Fatalf("should have set bootstrap mode") + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + conf := DefaultConfig() + conf.Server.DefaultSchedulerConfig = c.input + + a := &Agent{config: conf} + conf.AdvertiseAddrs.Serf = "127.0.0.1:4000" + conf.AdvertiseAddrs.RPC = "127.0.0.1:4001" + conf.AdvertiseAddrs.HTTP = "10.10.11.1:4005" + conf.ACL.Enabled = true + require.NoError(t, conf.normalizeAddrs()) + + out, err := a.serverConfig() + require.NoError(t, err) + require.Equal(t, c.expected, out.DefaultSchedulerConfig) + }) } - if out.BootstrapExpect != 0 { - t.Fatalf("bootstrap expect should be 0") +} + +// TestAgent_ServerConfig_Limits_Errors asserts invalid Limits configurations +// cause errors. This is the server-only (RPC) counterpart to +// TestHTTPServer_Limits_Error. +func TestAgent_ServerConfig_Limits_Error(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + expectedErr string + limits sconfig.Limits + }{ + { + name: "Negative Timeout", + expectedErr: "rpc_handshake_timeout must be >= 0", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "-5s", + RPCMaxConnsPerClient: helper.IntToPtr(100), + }, + }, + { + name: "Invalid Timeout", + expectedErr: "error parsing rpc_handshake_timeout", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "s", + RPCMaxConnsPerClient: helper.IntToPtr(100), + }, + }, + { + name: "Missing Timeout", + expectedErr: "error parsing rpc_handshake_timeout", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "", + RPCMaxConnsPerClient: helper.IntToPtr(100), + }, + }, + { + name: "Negative Connection Limit", + expectedErr: "rpc_max_conns_per_client must be > 25; found: -100", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "5s", + RPCMaxConnsPerClient: helper.IntToPtr(-100), + }, + }, + { + name: "Low Connection Limit", + expectedErr: "rpc_max_conns_per_client must be > 25; found: 20", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "5s", + RPCMaxConnsPerClient: helper.IntToPtr(sconfig.LimitsNonStreamingConnsPerClient), + }, + }, } - conf.Server.BootstrapExpect = 3 - out, err = a.serverConfig() - if err != nil { - t.Fatalf("err: %s", err) + for i := range cases { + tc := cases[i] + t.Run(tc.name, func(t *testing.T) { + conf := DevConfig(nil) + require.NoError(t, conf.normalizeAddrs()) + + conf.Limits = tc.limits + serverConf, err := convertServerConfig(conf) + assert.Nil(t, serverConf) + require.Contains(t, err.Error(), tc.expectedErr) + }) } - if out.Bootstrap { - t.Fatalf("bootstrap mode should be disabled") +} + +// TestAgent_ServerConfig_Limits_OK asserts valid Limits configurations do not +// cause errors. This is the server-only (RPC) counterpart to +// TestHTTPServer_Limits_OK. +func TestAgent_ServerConfig_Limits_OK(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + limits sconfig.Limits + }{ + { + name: "Default", + limits: config.DefaultLimits(), + }, + { + name: "Zero+nil is valid to disable", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "0", + RPCMaxConnsPerClient: nil, + }, + }, + { + name: "Zeros are valid", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "0s", + RPCMaxConnsPerClient: helper.IntToPtr(0), + }, + }, + { + name: "Low limits are valid", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "1ms", + RPCMaxConnsPerClient: helper.IntToPtr(26), + }, + }, + { + name: "High limits are valid", + limits: sconfig.Limits{ + RPCHandshakeTimeout: "5h", + RPCMaxConnsPerClient: helper.IntToPtr(100000), + }, + }, } - if out.BootstrapExpect != 3 { - t.Fatalf("should have bootstrap-expect = 3") + + for i := range cases { + tc := cases[i] + t.Run(tc.name, func(t *testing.T) { + conf := DevConfig(nil) + require.NoError(t, conf.normalizeAddrs()) + + conf.Limits = tc.limits + serverConf, err := convertServerConfig(conf) + assert.NoError(t, err) + require.NotNil(t, serverConf) + }) } } @@ -310,7 +408,7 @@ func TestAgent_ClientConfig(t *testing.T) { } // Clients should inherit telemetry configuration -func TestAget_Client_TelemetryConfiguration(t *testing.T) { +func TestAgent_Client_TelemetryConfiguration(t *testing.T) { assert := assert.New(t) conf := DefaultConfig() diff --git a/command/agent/alloc_endpoint_test.go b/command/agent/alloc_endpoint_test.go index 6d9f3fa6487..c8092b000fe 100644 --- a/command/agent/alloc_endpoint_test.go +++ b/command/agent/alloc_endpoint_test.go @@ -346,7 +346,7 @@ func TestHTTP_AllocRestart_ACL(t *testing.T) { respW := httptest.NewRecorder() _, err = s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.Equal(err.Error(), structs.ErrPermissionDenied.Error()) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with an invalid token and expect it to fail @@ -360,7 +360,7 @@ func TestHTTP_AllocRestart_ACL(t *testing.T) { setToken(req, token) _, err = s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.Equal(err.Error(), structs.ErrPermissionDenied.Error()) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with a valid token @@ -376,7 +376,7 @@ func TestHTTP_AllocRestart_ACL(t *testing.T) { setToken(req, token) _, err = s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.True(structs.IsErrUnknownAllocation(err)) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with a management token @@ -523,7 +523,7 @@ func TestHTTP_AllocStats_ACL(t *testing.T) { respW := httptest.NewRecorder() _, err := s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.Equal(err.Error(), structs.ErrPermissionDenied.Error()) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with an invalid token and expect failure @@ -533,7 +533,7 @@ func TestHTTP_AllocStats_ACL(t *testing.T) { setToken(req, token) _, err := s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.Equal(err.Error(), structs.ErrPermissionDenied.Error()) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with a valid token @@ -545,7 +545,7 @@ func TestHTTP_AllocStats_ACL(t *testing.T) { setToken(req, token) _, err := s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.True(structs.IsErrUnknownAllocation(err)) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with a management token @@ -812,7 +812,7 @@ func TestHTTP_AllocGC_ACL(t *testing.T) { respW := httptest.NewRecorder() _, err := s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.Equal(err.Error(), structs.ErrPermissionDenied.Error()) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with an invalid token and expect failure @@ -822,7 +822,7 @@ func TestHTTP_AllocGC_ACL(t *testing.T) { setToken(req, token) _, err := s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.Equal(err.Error(), structs.ErrPermissionDenied.Error()) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with a valid token @@ -834,7 +834,7 @@ func TestHTTP_AllocGC_ACL(t *testing.T) { setToken(req, token) _, err := s.Server.ClientAllocRequest(respW, req) require.NotNil(err) - require.True(structs.IsErrUnknownAllocation(err)) + require.True(structs.IsErrUnknownAllocation(err), "(%T) %v", err, err) } // Try request with a management token diff --git a/command/agent/bindata_assetfs.go b/command/agent/bindata_assetfs.go index ad3308ba2db..ee1b3b53349 100644 --- a/command/agent/bindata_assetfs.go +++ b/command/agent/bindata_assetfs.go @@ -1,10 +1,10 @@ // Code generated by go-bindata. // sources: // ui/dist/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js -// ui/dist/assets/nomad-ui-80bd290f31e717fefbf81265e9fd5591.css -// ui/dist/assets/nomad-ui-b1d9a065040a9f727f900c02bfb30b88.js -// ui/dist/assets/vendor-1192528ac070501feaf347024c2cae41.js -// ui/dist/assets/vendor-74b43ac401038fb6d346e85abd3bb536.css +// ui/dist/assets/nomad-ui-e485eabcbd50a177816ec937c7214bf8.js +// ui/dist/assets/nomad-ui-f6c608b5a74057913290b94581fa3648.css +// ui/dist/assets/vendor-d62e8ec23cd05cedaa719acf0f8b5554.js +// ui/dist/assets/vendor-d8602bc1ee5a13b26e7066b76b62d063.css // ui/dist/crossdomain.xml // ui/dist/ember-fetch/fetch-fastboot-5e5d008c8b65b0ac116f7635d0c6c6b9.js // ui/dist/favicon-1c2527a7a07d130ecbafce75e4615a69.png @@ -14,6 +14,7 @@ // ui/dist/images/icons/history.svg // ui/dist/images/icons/media-pause.svg // ui/dist/images/icons/media-play.svg +// ui/dist/images/icons/node-init-circle-fill.svg // ui/dist/images/icons/search.svg // ui/dist/images/icons/warning.svg // ui/dist/index.html @@ -108,82 +109,82 @@ func distAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs() (*asset, e return a, nil } -var _distAssetsNomadUi80bd290f31e717fefbf81265e9fd5591Css = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xbd\xdd\x8e\x33\x3b\x92\x20\xf6\x2a\xb9\xa7\x71\x80\xaf\xfa\x48\xea\xd4\x6f\x55\x49\x98\x83\xb1\x67\xb1\xeb\x05\x76\x6d\xc0\xb3\x0b\xec\xa0\xd1\x17\x29\x25\x55\xca\x39\xa9\x4c\x4d\x66\xea\xab\xaa\xa3\x2d\xc3\x57\x6b\xf8\xd6\x8f\xe0\x6b\xdf\xfb\xc2\x77\x7e\x94\x7d\x12\x23\xf9\x97\x0c\x32\x82\x64\xaa\xea\xeb\xf6\xd4\xf4\xf9\xaa\x92\xf1\x47\x32\x18\x0c\x92\xc1\xe0\xdf\x1f\x4e\x59\xd3\xb2\x2e\xf9\xe9\x3f\xfd\xc7\x7f\x33\x7d\xfa\x69\x37\xdb\x5f\xcf\x17\xd6\x4c\x9b\xe2\xe5\xd4\x4d\x66\xd5\xf5\xbc\x67\xcd\xed\x9c\x35\x2f\x45\x25\x3e\x6e\xe7\xb3\x75\xc3\xce\x1f\xfb\x3a\x7f\x9f\x1c\xea\x9c\xdd\x8e\x75\xd5\x4d\x5f\x19\x2f\x5c\xa5\xe9\x47\xd6\x74\xc5\xa1\x64\x93\xac\x2d\x72\x36\x39\x16\x2f\xd7\x86\x4d\x8e\x75\xdd\xb1\x66\x72\x62\x59\xde\xff\xf3\xd2\xd4\xd7\xcb\xe4\xd4\x4c\x5a\x76\xe8\x8a\xba\xba\xe5\x45\x7b\x29\xb3\xf7\xed\xbe\xac\x0f\xbf\x7d\x64\xd7\xbc\xa8\x27\xec\xbc\x67\xf9\xa4\x38\xbf\x4c\xea\xfd\x3f\xb3\x43\x37\xf9\x5e\xe4\xac\xbe\x9d\xb3\xb7\xe9\x6b\x91\x77\xa7\xed\x3c\x4d\x7f\xfe\xe8\x65\x98\x5c\x1a\x76\xdb\x67\x87\xdf\x7a\xba\x55\x3e\x3d\xd4\x65\xdd\x6c\xff\x70\x5c\xf7\x3f\x42\xd4\x1e\x42\x7e\x4e\xb3\xfe\xe7\x63\x76\xa8\xab\x8e\x55\x5d\x72\x69\x04\x81\xd7\xba\xc9\xa7\xaf\x4d\x76\xd9\x56\x75\x73\xce\xca\x8f\x2c\x69\xbb\xa6\xae\x5e\xfa\xd2\x84\xd7\x55\x50\x38\x5c\x9b\x86\x55\xdd\x3f\xf4\x7f\x7c\x48\x90\x2e\xdb\x97\x2c\xe9\x4e\x8a\xc9\x72\xd3\xff\x7c\xcc\xf6\xd7\xae\xab\xab\x49\x2f\xc3\xad\x2c\x2a\x36\x3d\x31\xd5\x8c\xba\x30\xbb\x1d\xae\x4d\x5b\x37\xdb\x4b\x5d\x54\x1d\x6b\x54\x41\x3b\x3b\x65\xed\x34\xcb\xf3\xba\x6a\x13\xf9\x6d\x56\xb4\xd3\x53\xfd\x9d\x35\x2c\x9f\x78\xc0\xb6\x1c\x66\x32\x3b\x16\xac\xcc\x41\x79\x5f\xeb\xa6\x2e\x51\x7a\x41\xe8\x08\xb2\x45\x75\xb9\x76\xb1\x54\x39\x70\x04\xd1\x96\x95\xec\xd0\x25\xe2\x9f\x58\xe2\x00\x49\x30\xb9\xfd\x3e\x2d\xaa\x9c\xbd\x6d\x17\x1f\x46\xfd\x3b\xf6\xd6\x2b\x7b\xdd\x15\xc7\xe2\x90\xf5\xfa\x98\x64\xdb\xaa\xee\xbe\x49\x98\x87\x49\x36\xeb\xb2\x17\x49\xa2\x87\x9e\xe6\xec\x50\x37\x1c\x74\x7b\xad\x72\xd6\xf4\x5d\x2b\x14\xad\xff\xcf\xaf\xb3\x5e\x77\x9b\xe9\xf7\x82\xbd\x4e\x4e\xdd\xb9\xbc\xa9\x5e\x4f\xd3\x9f\x77\x86\xf2\xaa\xf1\x56\xb2\x63\xa7\x86\x59\xff\xbb\x1a\x65\xbd\x74\x59\xdb\xd6\x87\x22\xeb\x8a\xef\x4c\x81\x74\xf5\x65\x3b\x9d\x3d\xae\xd9\xf9\xe3\x4f\x7f\xfc\x57\xc9\xfe\x5a\x9e\xb3\x59\x51\x27\xdf\xd3\xd9\x66\x36\x4f\xfe\x4b\xf2\x1f\xfe\xdd\x7f\x4c\xfe\x7d\x71\x60\x55\xcb\x92\xff\x92\xbc\x14\xdd\xe9\xba\x9f\x1d\xea\xf3\x9f\xfe\xf9\xa5\x3b\x9d\xdb\x3f\x71\x8c\xe4\x8f\x7f\xfa\xfb\xdf\xd8\xfb\xb1\xc9\xce\xac\x4d\xda\x4b\x51\xfd\x77\x7c\xf8\xdc\x8e\x4d\x7d\xbe\x75\x4d\x56\xb5\xc7\xba\x39\x6f\x9b\xba\xcb\x3a\xf6\x2d\x7d\xf8\xe8\x6a\xf7\xf3\x72\xfd\x9c\xb3\x97\x87\x0f\x2e\xc9\xb9\xa8\x8a\x86\xb5\xac\x9b\x1d\xda\xb6\x17\x27\x9d\x2d\x22\xc4\x81\x68\x7f\xfc\x13\xb7\x02\xff\x72\xad\x3b\xc6\x9b\x73\x92\xe7\x93\xbc\x9c\xe4\xdd\x84\xf7\x76\xcb\x3a\x65\x56\x4e\xf3\xc9\x69\x31\x39\x2d\x27\xa7\xd5\xe4\xb4\x9e\x9c\x36\xbd\x4d\xe9\x1b\x7c\x52\xf0\x6a\x4d\x4a\xf6\xc2\xaa\x7c\x52\x16\x93\xba\x9c\x5c\xfa\x81\x3c\xe9\xfb\x2f\x6b\x58\x36\xb9\x96\xb2\x3d\xb7\xe9\xee\x92\xe5\x79\x51\xbd\x6c\xd3\x0f\x87\xa4\x30\x70\x6d\xf1\x3b\x13\xdd\x67\xdb\xbb\x6b\x79\x2b\x8b\xb6\x9b\xb6\xdd\x7b\xc9\xb6\x55\xdd\x2b\x82\x18\xd7\x5c\xbb\x27\x42\xff\x34\x5b\xcd\xf3\x83\x2b\xc6\xbe\x7e\xeb\x69\xf7\xbc\xf7\x75\x93\xb3\x66\xba\xaf\xdf\x76\x88\x2d\x3b\x1e\x77\x86\x20\xab\xcb\xdb\x6e\x7a\xae\x7f\x9f\xd6\xed\xdb\x54\x7c\x3f\xd7\x75\x77\xea\xe9\xbc\x34\xd9\x7b\x7b\xc8\x4a\xb6\x9b\xbe\xb2\xfd\x6f\x45\x67\x03\x64\x55\x57\x64\x65\x91\xb5\x2c\xdf\x9d\x8b\x4a\x5a\xd3\x65\x9a\x5e\xde\x76\xbd\x8a\x1f\xcb\xfa\x75\xfa\xb6\x3d\x15\x79\xce\xaa\xe1\xcb\xfb\xb6\x3d\x34\x75\x59\xee\xf8\x08\x68\x58\xaf\xf7\x3d\xb9\xfa\xd2\x15\xe7\xe2\x77\xf6\xef\xd9\x4b\xb1\x2f\xca\xa2\x7b\x17\x10\xbd\xa4\xd3\x2c\xff\xe7\x6b\x2b\x14\xff\xe3\x8f\x93\x6d\x76\xec\xa7\x81\xed\x9e\x1d\xeb\xde\x64\x0f\x95\x2f\xaa\x13\x6b\x8a\xee\x43\x8e\x9c\x7d\xd6\x16\x87\x69\xde\xd4\x97\xbc\x7e\xad\x26\xe8\xd7\xa9\x34\xe0\xfe\xd2\xe4\x8f\xaa\xfc\x52\xbf\xb2\x66\x2a\xba\x43\x83\x25\x7f\xc4\xbb\xe0\x43\x28\xd0\x4d\x7c\xd9\xa6\x1f\xdc\xc0\xcb\x3f\xfb\x4e\x29\xb3\x4b\xcb\xb6\xea\x97\x9d\x2c\x68\x2f\xd9\x41\xe8\x51\x97\x4f\xba\xd3\x4d\xeb\x95\x68\x92\xac\x2c\x5e\xaa\x6d\x3f\xc2\xa5\xb1\xf0\x29\x0a\xef\xb5\x63\x76\x2e\xca\xf7\xed\x34\xbb\x5c\x4a\x36\x6d\xdf\xdb\x8e\x9d\x27\xff\x7d\x59\x54\xbf\xfd\x87\xec\xf0\x8f\xfc\xcf\x7f\x53\x57\xdd\xe4\xa7\x7f\x64\x2f\x35\x4b\xfe\xd3\xbf\xfb\x69\xf2\x3f\xd7\xfb\xba\xab\x27\xff\xd3\xdb\xfb\x0b\xab\xa6\xff\x98\x55\xed\xe4\x3f\xed\xaf\x55\x77\x9d\xfc\x43\x56\xf5\xa4\xcb\x72\xf2\xd3\xff\xc0\xca\xef\xac\x2b\x0e\x59\xf2\x3f\xb2\x2b\xfb\x69\xd2\x66\x55\x3b\x6d\x59\x53\x1c\x87\x19\x95\x52\xb0\xec\xda\xd5\xa4\x6e\xf5\x65\xa6\xe4\xe7\xba\xaa\xfb\x56\x11\xe6\xd1\x1c\x4c\xbd\x81\xeb\x07\x64\x7b\xce\xca\xd2\x28\x98\x3d\x71\xcb\x76\x6a\x90\x29\x3d\xdf\xf7\x3f\xb2\xb5\xf9\x60\xdb\x29\xd3\x7a\x79\xdb\xc9\xa1\x25\x8c\x67\x92\x7e\x14\xe7\x17\x65\x79\x7b\xb9\x3e\x78\x3b\xff\xb9\x7b\xbf\xb0\xbf\x3b\x9c\xd8\xe1\xb7\x7d\xfd\xf6\x97\x89\xf1\xb1\xc9\xf2\xa2\xfe\xcb\xed\x3b\xeb\x5d\x98\xac\x94\xdd\xb5\xcf\x5a\xc6\xed\x7b\x7b\xc9\x2a\x29\x27\x1f\xeb\x52\x67\x81\x45\x50\x7a\x2c\xdc\x02\xe0\x1c\x3d\xa6\xe9\x07\x6f\x56\xd9\x72\x7a\x60\x89\x61\xd5\xb7\x5e\x57\x5f\x0f\x27\x73\x0c\xf2\xe6\x54\x4a\x34\x9f\x2d\x78\xc5\x44\xfd\x76\xaf\xa7\xa2\x63\x5c\xe3\xd8\xf6\xd2\xb0\x0f\xed\xa5\x38\xcd\xc6\x8d\xf6\x25\xeb\x9d\x16\xd3\x88\xb0\xb3\x61\xf7\x66\xfb\xfa\x4d\x79\x14\x98\x2f\x75\x3c\x7e\x48\x1f\x27\x1f\x9c\x1d\x4b\xa9\x77\x56\xcb\x75\xf5\x85\x4f\x61\x87\x92\x65\xcd\xb1\x78\x13\xc3\xff\xc6\xff\xdc\xee\xeb\xee\xb4\x93\x83\x74\xfb\x53\xf2\xd3\x4e\xf9\x80\x9c\x3a\xc7\xbb\x5c\xcb\x92\xe5\x62\x76\x3c\x96\x75\xd6\x71\x2e\xff\xaa\x38\x5f\xea\xa6\xcb\xaa\xce\x04\xe2\xde\xa9\x84\xe2\xbf\x5b\x60\x87\xb2\xb8\x5c\x58\x7e\x53\x8d\x2b\xcd\x9b\x09\x65\x3a\x84\xb3\x73\x9d\x67\xe5\xf4\x90\x35\xf9\x94\x2b\x6e\xa8\xd7\x38\x93\xbe\xb0\xcc\xde\x6f\xfb\xba\xeb\xea\xf3\x36\xdd\xf1\xc9\x3c\xdd\x5d\xea\xb6\xe0\xce\x42\xb6\x6f\xeb\xf2\xda\xb1\x9d\x70\xa6\xd3\x5d\x3f\x95\xa7\x1c\x97\x9b\xcb\xb9\x31\x0e\x96\x0d\x3b\x5b\x95\xe0\x30\x0b\x03\x66\xc1\x55\x01\x83\x5a\x9a\x50\x04\xcc\xca\x1c\x8e\x33\x8a\xdf\x1a\x40\xcd\x29\x86\x1b\x6b\x6c\x63\x30\x8f\x60\x98\x5b\x94\xfe\xfe\xcc\xf2\x22\x4b\xda\x43\xc3\x58\x95\x64\x55\x9e\x7c\x1b\x7c\xfd\xc7\xcd\xd3\xe5\xed\xe1\x36\x34\xd4\xf4\x5c\xef\x8b\x92\xc5\xb4\x97\x0b\xea\x69\x36\x04\x98\x6a\x3d\x17\xd4\xd3\x88\x18\x30\xdd\x96\x08\x34\xd5\xa4\x2e\xa8\xd3\xb2\xdc\x3f\xe6\x63\xf5\xc0\xfa\x05\x06\xcb\x15\x92\x31\x80\x45\x91\x81\x85\x76\x88\x76\x17\x1e\x37\xcf\x97\xb7\x87\xc9\xa5\x29\xaa\xce\xec\x16\x3e\x7a\xbb\xa8\x6e\x71\x40\x7d\xdd\xe2\x02\x93\xdd\xe2\x80\xfa\xba\x05\x01\xf6\x74\x8b\x0b\x4d\x76\x8b\x03\x1a\xd3\x2d\x12\x69\x74\xb7\x18\x6b\xe2\xc5\xd2\x1a\x28\xdc\x3c\xc5\x75\x88\x05\xe9\xed\x0f\x1b\x96\xee\x0e\x0b\xd2\xdb\x1b\x0e\xac\xaf\x33\x6c\x60\xba\x2f\x2c\xc8\xa8\xae\xe0\x38\xf7\x0f\x90\x79\xba\x58\x59\x3d\x91\xb3\xf6\xb7\xae\xbe\x44\xf5\x85\x0b\xeb\xeb\x0d\x04\x9a\xec\x0f\x17\xd6\xd7\x23\x18\xb4\xa7\x4f\x10\x70\xb2\x57\x5c\xd8\x98\x7e\x51\x58\xde\x9e\x71\xf1\xbc\xf0\x11\x96\x8e\x1c\x68\xd4\x20\x9e\xd6\x55\xf9\xfe\x79\xfd\x71\xf8\x2e\xe6\x6b\x82\xaf\x6c\x99\x4f\x33\x5e\xcc\x37\x96\xe2\xbe\x16\x39\x13\xc0\x51\xba\x8b\x82\xfb\xd4\x17\x47\x20\x35\x18\x05\xf7\x29\x31\x81\xe0\xd1\x63\x1c\x83\x54\x65\x14\x3c\x46\x9b\x0d\xc4\x4f\xf7\x98\xa3\x2a\xab\xf4\x91\x50\x95\x81\xed\xa7\xb5\x65\x95\xda\x9e\xd9\xf1\x5a\x96\xa7\x3c\x4a\x53\x1c\x50\x9f\x96\xb8\xc0\xa4\x86\x38\xa0\x3e\xed\x40\x80\x3d\x9a\xe1\x42\x93\x5a\xe1\x80\xc6\x68\x84\x44\xf2\xf5\xc8\x80\xf5\xcf\xd7\xb6\x2b\x8e\x05\x8a\x26\xca\xde\x71\xb3\xa8\x11\xfd\x18\x51\x3e\x39\x22\x8d\xeb\x5e\x22\xd2\x8c\xf0\x2f\x11\x16\xae\xab\x74\x1f\x8b\xb0\x61\xb7\x79\x3a\x43\x26\x92\x71\x1c\x0b\xdb\xed\x18\x5b\x2b\xed\x77\x20\xc4\x91\xb9\xf3\x4e\xf2\xe1\x69\xc9\xe1\x7a\x6f\xb3\xb9\x13\x13\xc2\x03\xb7\xa3\x77\x72\x08\x1b\x52\x8c\x71\x44\xfd\x06\x02\x25\x3b\x76\x3e\x5c\x6b\xa3\xc3\xc2\xf4\x40\x8e\x1b\xb1\x5c\x0c\x77\xb0\xda\xdc\xef\x19\xa9\x9c\xb4\x3b\x48\xef\x20\x1d\x1e\x3e\x06\xaf\x60\x4b\x8e\x1c\x99\x82\xb4\x3d\x28\x47\xd5\xc2\x1d\x91\x9c\x28\x32\x18\xef\x21\x1b\x1e\x89\x26\xb7\xbb\x9a\xc7\x33\x02\x2d\x3d\xbe\x9f\xb2\x72\x23\x20\x65\x77\x56\xb3\x77\x00\x35\x3c\xdf\x51\x43\x10\xec\xcd\x40\x1b\xc5\x07\xcb\x37\x0e\xb3\x4b\xd1\x65\x65\xf1\xbb\x9a\x2b\x87\x23\xb0\xa1\xc8\xc2\x29\xeb\x57\xd6\x1c\xb2\x96\xd9\x18\xba\xc0\x42\xb8\x5e\x2e\x38\x82\x2e\x00\x75\x66\x59\x5e\x54\x2f\x93\xd9\x99\x55\xd7\x69\x99\xed\x59\x39\xe1\x27\x94\x55\xdd\x7d\xdb\xd7\xf9\xfb\x03\x49\xc6\xa8\x3d\xdf\x3f\xbe\x0d\xfb\xbb\x06\x87\xcc\x82\xda\x1e\xeb\xc3\xb5\x9d\x38\x9f\xc5\x89\xa8\x24\xc1\x36\xfd\x0f\xda\x37\xfb\x32\x3b\xfc\x06\xcf\xdf\x71\x6e\x1c\xd0\xe5\x26\x3e\x03\x6e\x69\x9a\xe2\x86\x95\xf7\x29\x88\x00\xc0\x59\x71\x40\x97\x95\xf8\x0c\x58\x89\x43\x07\x94\x5b\x9e\x35\xba\x5e\x8b\xe5\x0a\xe7\xd4\x03\xb9\x8c\xf8\x57\xc0\x67\x3e\x9f\x67\x8b\x05\xca\xe7\xd2\x14\xe7\xac\x79\xd7\xac\xd6\xfb\xec\x69\x8e\x73\x93\xa0\x2e\x43\x55\x00\x79\xe6\x4f\xc7\xcd\x92\x68\xc9\x4a\xd7\x6d\xbe\xde\x2c\x29\x0d\xe9\xe1\xb0\x76\xac\x9c\x1e\x5b\xed\xd9\x1c\x65\x55\x54\xc7\x3a\x86\x55\x0f\xe7\xb2\xe2\x5f\x63\x59\xb5\xd7\xc3\x81\xb5\xad\x6e\x49\xb6\x4f\x97\xcf\x38\x37\x09\xea\x32\x54\x05\x80\xe7\x62\xf9\xf4\xb4\x38\xa0\x3c\x5f\xb3\xa6\x2a\xaa\x17\xad\x95\xd9\x13\x5b\x2c\x89\xe1\x26\x40\x91\x01\x27\x0b\xe0\x90\x5b\x3f\xae\xd2\x35\xa1\x99\xd5\xcb\x00\x78\x78\x5a\xa5\xb4\x7a\xf6\x90\x98\x82\xf2\xef\x80\x61\x96\x2e\x97\x8b\x67\x7a\x8c\x4f\xf7\x85\x6e\xda\xf9\xa2\xff\xf1\xc0\x76\x46\xe3\xad\xfa\x1f\x14\xf6\xa5\x61\xef\x7c\xb0\x0c\xd0\x22\xb8\xc6\x0f\xad\x60\x57\x59\xff\x43\xc2\x2a\xb0\xc7\xac\xff\xa1\x49\x02\xb3\xb2\x5f\xf7\x3f\x01\xe0\x28\xfb\x21\xce\xf0\x0c\x58\xc7\x62\xd9\xb0\x46\x03\x1f\xb3\xfe\x07\x87\xe5\x47\x8e\x52\x6a\xf3\x10\x72\x49\x98\x4d\x89\x20\x22\x9f\xec\x98\x2e\x1f\x46\xcb\xce\xc5\xbe\x2e\x73\x80\xb3\xf1\xe3\x38\xf0\x8f\x10\xbe\x68\xa7\x3c\x04\x04\x86\x85\xdd\xed\xe4\x0a\xcf\xc0\xf5\x72\xb1\xd9\x9e\x73\x52\xb0\x14\xfb\xbb\xfc\x61\x21\x85\xeb\x10\xd3\x52\x48\xd8\xcf\x48\x11\xf6\x6f\x4d\xb1\x1c\xe7\x30\x24\x9b\x40\x18\x25\x60\x58\x14\xdb\xd7\xf6\x08\xc1\x41\xef\x6b\x1f\xd7\x29\x17\xec\x11\xaf\x9c\x16\x40\x01\x7f\x4a\x84\xb0\x03\x0f\x24\x1b\xd1\x49\x00\xe3\x4e\x19\x1d\x8f\x5f\x08\x83\xbb\xfc\xb4\x28\x06\xfc\xa7\x04\x09\x2f\xcd\x6d\xf9\x46\xb4\x97\x8d\x74\xa7\xa4\xc6\x8e\xa8\xa0\x2b\x17\x25\x14\xb9\x1e\xf0\x58\xb2\x37\x1b\xae\xff\x06\x16\x2e\x12\x8e\x02\x88\x3d\x40\xe7\xbc\x2c\x13\x67\xf3\x1a\x77\xf6\xcb\x29\x5a\xe6\xea\x0e\x8a\xbe\xc3\x4c\x83\x05\xec\x9c\x18\x3e\x1e\x8a\xc0\x84\x8c\x92\xd9\x3c\xe0\xe3\xb4\x6c\x6b\x70\x0f\x35\xd2\x18\x58\x4c\xc6\xb7\x01\x7a\xbe\xc3\x49\x22\x63\xf3\x1e\x82\xe4\xd0\x74\xf9\x78\xa5\xef\xe1\x8b\x8a\x07\x4b\x53\x18\xa2\xd8\x1e\x1b\xe2\x2b\x0d\x14\x3b\x3e\x24\x73\x6b\x84\xb8\x3c\xc7\x8d\x11\x49\xd5\x1a\x25\x77\x51\xf5\x69\x35\x60\x13\x6a\xb5\xe8\xb1\xa2\xa8\x82\xd1\x32\x52\x76\x73\xbc\x48\x7a\xf6\x88\xb9\x8f\xa2\x6f\xcc\x40\x46\xf7\xb4\x07\x3a\x6e\x1c\xfd\xbc\x9b\xa8\x31\x59\x48\xa2\xd6\x2c\xe0\x10\x34\x40\xd1\xe9\xc5\x2c\xc3\x87\x88\xe5\x5d\x13\x08\x23\x87\x0b\xea\x39\x53\xb2\xdc\x35\x74\x50\xaf\xf8\x13\x1c\x22\x14\x9e\x76\x76\xc7\xf0\x8d\xe0\x80\x0c\xac\x91\x75\x42\x86\x17\xee\xa4\x7e\x86\x7a\xc4\x50\xf3\xb8\x9e\xf7\x71\x76\x87\x1d\xe9\x52\x7e\x86\x81\x6f\xfa\x22\xf8\x46\xd5\xce\x1c\xd9\xbe\x59\xd0\x80\x21\x46\x2d\xf0\xfd\x70\xf0\x91\x63\x16\xf3\x04\x09\x39\xee\x1a\xb1\x98\x5f\x78\x3f\xfd\x88\xd1\x44\x7a\x89\x23\xb8\x86\xe9\x63\x83\xf5\x6e\xd7\xd1\xa4\x4c\x0c\xd5\xaf\x76\x24\x11\x96\x77\xb7\x96\x6f\x9c\x52\xde\xe5\x5d\xe4\x91\x89\x12\x59\x33\xe1\xa4\xf9\x95\x31\x1e\xef\x6d\xc3\x57\xb5\xeb\x47\x0a\x48\x0a\x44\x08\xf0\xbd\x68\x8b\x7d\xc9\x6e\xfc\x5f\x7e\xe9\xc5\x0d\x28\x8f\x1d\x8c\x52\x32\x6b\x1c\xfa\xd8\x2a\x58\x1f\xf7\x91\x23\x56\x0a\x61\x0d\x56\xaf\x10\x12\xf6\xb3\x42\xf8\x86\x1d\x90\x0a\xea\x68\x84\x68\x02\x61\xb4\x7c\x5e\x49\xc0\xd8\xf7\xcb\xc0\x41\xef\x6f\x1d\xd3\x48\x48\xee\xb6\x7d\xf0\xf2\x57\xc0\x9f\x96\xc0\x67\x4a\xa0\x60\x23\x7a\x08\x60\x7c\x42\x44\xc3\xea\x48\x59\x10\x83\xe3\x95\xc4\x80\xff\xb4\x1c\x3e\x27\xc2\x11\x6f\x44\x6b\xd9\x48\x5e\x41\x7b\x54\x71\x15\xaa\x64\x6d\xab\x2f\x1c\x5a\xc4\xe5\xd5\x1f\x0e\xa2\xaf\x01\x59\x30\x4d\x96\x17\xd7\x96\x83\xc8\x0b\x6e\xe2\x8b\x03\xd8\x9e\xb2\xbc\x7e\x95\x80\x6f\xf2\x4f\xac\x4a\xd7\x4a\x5c\x73\xe3\xb7\xe9\xd4\x9d\x1a\x3e\x52\xa6\x87\xac\x2c\xeb\x6b\x27\x6e\x75\xa9\xa2\x6b\xab\xef\xec\xc9\x82\x73\xfd\x3b\xf6\xb5\x75\x3f\xda\x1f\xf4\x85\xeb\xd9\xb1\x30\xb8\x7f\x86\x05\x5d\x03\x7e\xa1\xca\x6a\xb5\xf5\xe5\x6d\x67\x34\x4f\x9a\x2c\x2e\x6f\xc9\xf2\xf2\x96\x34\x2f\xfb\xec\xdb\x3c\x9d\x88\xff\x9f\xcd\x1f\x26\x69\xd2\xff\xcc\xb1\xb2\x1d\x38\x47\xdf\x81\x5d\x45\xfb\xae\x18\x97\x82\x87\x05\x6c\xcb\xac\xed\xa6\x87\x53\x51\xe6\x0f\xea\x1e\xb1\xbc\xa6\x24\x2f\x1b\x67\x1c\x56\x1d\x03\xf6\xbf\x8b\xa3\xbf\xd1\x12\xcb\x23\x5c\x49\x30\x3b\xf0\xab\xcb\x06\x95\xa2\x6a\x59\x27\x61\x17\x2e\xad\x05\x46\x4b\xdd\x4c\xe3\x7d\x93\x5d\x2e\x2c\x6b\xb2\xea\xc0\x60\x2f\xd8\xdf\xf9\x7e\xef\xb4\xe8\xd8\xb9\x95\x41\x94\x3b\xd8\x21\x8b\xcb\xdb\x0e\xf1\x1c\x76\x30\xb8\x53\x5d\x31\x5c\xcc\x16\xeb\xe1\xce\x9c\x6a\xbd\x43\x56\x1e\xbe\xcd\x96\x8f\x6b\x76\x4e\xa6\xbd\xcc\x0f\x1a\xa2\xab\x2f\x68\xb1\xba\x0d\xd6\xb0\x92\xdf\xeb\x46\xee\xcd\x39\xca\xbb\x03\x67\x9f\x3b\x19\x5b\xa6\x6e\xb9\xaa\xea\x29\xce\xfc\xde\x19\xbf\x21\xae\x3f\x89\x1b\x67\xe2\x9b\x13\x5c\x0a\x2e\x13\x56\xf5\x6b\x93\x5d\x54\x93\xcb\x24\x08\xf2\xd0\x51\xdf\xd3\x95\x85\xb3\xe2\xd0\x0f\x28\xf3\x2f\x1e\x00\x93\x35\x2f\xcc\xfd\xdc\x5b\xd0\xeb\xd9\xfd\x2e\xae\x80\x0e\xa9\x11\xd8\x59\xdd\x92\xef\x7f\x87\xcc\xb6\xc7\xa2\x51\x9a\x4c\x6a\x36\xaf\x3f\x6f\xfa\x29\x6c\x7b\x90\xcb\x62\x36\x17\x57\x4d\x21\xfd\x81\x9c\x20\x6f\xf0\x83\xf4\x25\x3a\xa4\x89\x30\xf5\xc8\x3f\xf0\x1a\x27\xb9\x87\xcb\xcc\xcd\x10\xa1\x07\xb2\xba\xbc\x3c\x1c\x62\xef\xd0\x7c\x15\x7c\xcb\xb6\x37\x04\x06\x0d\xfe\xb7\x45\x43\x0c\xce\x20\x0d\xd1\x8e\xc2\x10\x3c\x40\x82\xa0\x08\x9a\x9a\xfe\x67\x36\xef\x87\x9c\xb0\x10\x8b\xf9\xe4\xf9\x79\xb2\x58\xaf\x27\xb3\xc5\x1a\x54\x57\xa0\x6b\xc2\xda\xe2\x98\xa2\x8a\x38\x00\x5a\xd4\x7e\x48\xf8\x6f\xce\x02\x7a\x66\x81\x95\x57\x04\xd2\x44\x9a\xd2\x2c\xb2\x7a\x4a\x15\x49\x33\x6c\x7f\x95\xfd\x48\x64\x3a\xf1\x57\xce\x6d\x28\x4d\x56\x35\x98\x43\x97\x3d\xf5\x3f\x34\x5d\x6e\x35\x70\xc2\xba\x08\xa9\xbc\x2e\x43\x6a\x2f\x02\xcb\x08\x7a\x6e\xb3\x20\x71\x68\x78\x3f\xfc\x39\x2f\xda\xde\xe9\xc8\xff\x72\x67\x2f\x5b\x7e\x8d\xd3\x0c\xf8\xa5\x69\x5a\x39\xec\x06\x42\x07\x89\x55\xf3\x31\xa3\x65\xbd\x9e\xa8\xff\xd9\xe3\x85\x53\xf4\x35\x08\x97\xfc\xee\x96\x90\xae\x2b\x6b\x3a\x96\x23\xb4\xa5\xdf\x62\x5c\x2c\xf7\x11\x20\x75\x3e\x4d\x53\x2f\xa2\xb7\x7e\x52\x86\xd8\x2a\x86\x84\xad\xaf\x5d\xef\x3c\xe0\x4a\xae\x0a\x63\x35\x30\xc0\xab\xac\x79\xf0\xa7\xbc\x4b\x4f\xd5\x20\x31\x7f\x97\xd5\x4d\xdc\xd0\x4b\x9f\xbc\xf7\x32\x3b\x1e\x8f\x89\x15\x4f\x1a\xdb\x2c\xc0\x62\x0b\x1d\x8c\x57\xb5\x60\x47\x60\x80\x77\x99\x05\x4b\x85\x3d\x63\x3b\xc4\x92\xae\x1e\x0f\x91\xc3\x4d\xab\x2e\x42\x4c\xab\x2e\x43\x4c\xab\x88\xa2\x25\xe8\xb9\xa6\x15\x09\xba\xb5\x74\x52\x84\xf5\x8e\x1c\xe1\xb6\xf4\xa4\xdd\x33\xc4\x1a\x61\xf7\x8c\x75\x04\x34\x7a\x9c\xdc\x57\x1a\x05\xb4\x52\x1e\xbb\xe7\x9d\x0d\x1c\x02\xf4\x5c\xbf\xe8\x7f\xbc\xb8\x5f\x66\xda\x23\xe4\xc5\x46\x9c\x53\x38\xd2\xf4\x79\xd8\x7d\xbd\x41\x72\x84\xfd\x91\x46\xd6\xdb\x32\x98\x89\x19\xa3\x73\xc1\xee\xf8\x3a\x03\x68\xe8\x32\x35\xbc\xef\x37\x7d\x3c\x6a\x15\x37\x7d\xba\x08\x31\x7d\xba\x0c\x31\x7d\x22\xaa\x9f\xa0\xe7\x9a\x3e\xe4\x12\xc0\x62\xb9\x72\x64\x0c\x7a\xe2\x18\x52\x8c\xe9\x33\xc4\x1a\xe3\xf2\xad\xd6\x13\xf5\x3f\xdb\xfa\x71\x8a\x7e\xbb\x20\x24\xbf\xc7\xfa\xe9\x7a\x79\xac\xdf\x62\xb9\xda\xc1\xbc\x8c\x3e\x02\xa4\xf5\x9b\x67\x8b\xcd\x72\xe9\xc5\xf5\xd6\xb2\x17\x63\xb4\xd7\x47\xcb\x8b\x0d\x37\xa7\x70\xac\xe3\x47\xb3\xbb\xc7\x2c\x2d\x96\xab\xc4\xba\x9b\xe2\x13\xf6\x6e\x23\xcb\xa5\x4e\x90\x00\xf6\xc8\x96\x81\xf6\x45\x29\x63\xbc\xce\x05\xbb\xe3\xeb\xac\x9f\xa1\xcb\xd4\x08\xbf\xdf\xfa\xe5\x59\x43\xf8\x7d\xaa\x04\xb1\x7d\xaa\x08\x31\x7d\xfc\x9e\x11\x4e\xcc\x35\x7c\xee\xa5\x24\x57\x1b\xf9\xed\x8a\x91\x03\xdc\x12\x9d\x34\x7c\x83\x54\x23\xec\xde\x72\x35\x59\xcf\x27\x9b\x27\xc7\xe8\xf5\xd4\xbe\xcc\x1a\x60\xd5\xf1\x79\x7b\xbe\x89\xc0\xc6\x27\xcd\x9d\xd8\x80\xf1\xa1\x7e\xa5\x4d\x0f\x48\x8b\x8d\x2e\xbb\x6c\xa4\xad\x23\x38\xfd\x28\x03\x64\x4b\xfb\x63\x6c\xaa\xaf\x4d\x1c\x3b\x32\x42\xcb\x42\x7d\xf0\x85\xee\x1d\x50\x5e\x7a\x38\xdf\x6f\xe5\xe4\x65\x44\xdc\xd0\x19\x85\x88\xad\x33\x4a\x11\x73\xa7\x6e\x39\x92\x54\x5d\xa3\x87\x5e\x8c\xb4\xdc\x5a\x75\x01\x13\xb1\x21\xfc\x2e\x26\xe1\x0d\xbb\x35\x21\x4d\x1f\x10\x6f\x8c\xf5\x7b\x9c\xcc\x9f\x36\x93\xf9\xe2\xd9\xb1\x7f\x92\xa4\xdf\x04\x0a\xf1\xef\xb1\x82\x46\xe5\xe2\x96\xbd\x82\x57\x80\xc4\x88\x85\x2f\x82\xfd\xe5\x4b\x5f\xaf\xcc\x5f\xbf\x1a\x35\x88\xab\x01\x15\x67\x48\x7d\x62\x7e\xda\xdc\x71\xe2\x89\x7b\xed\xd8\xcf\xee\x4e\xe7\x4a\x29\xe4\xf8\xee\xc0\xcc\xd1\xd7\xac\x6a\x03\x4c\xee\x5f\x44\xc7\x6d\x34\xf3\xab\xd8\xc8\x62\x08\x1c\xbf\x21\x38\xe4\x4a\xb9\xa2\xbc\x45\xe3\x32\xb7\xfd\xd5\x67\x1e\x2d\x66\x9e\x85\x6d\x35\xde\xbf\xa3\x0f\xfe\x14\x5b\x6c\x61\x5f\x29\xaf\xd7\x23\xb2\xd7\x5a\xc8\xd6\xbd\x6f\x41\x5c\x8d\xd8\x0d\x84\x21\x0e\x18\xfe\x08\x9b\x68\xa3\x7e\xb9\x41\xa4\xa5\xfd\x7a\x6b\xa8\x28\x8f\x32\x85\xb4\x80\x9f\xb5\x83\x82\x72\xe2\xa6\x28\xf0\xf0\xba\xcf\x34\x68\xdd\x1b\xd9\x05\x3f\xce\x02\xfa\x38\xfc\x68\xf3\xc7\xd3\x43\x8c\x34\x7f\x3d\x0e\x61\xfe\x54\x11\x62\xfe\x8c\x04\x13\xf6\x57\x9f\xf9\xb3\x98\x91\xe6\x6f\x20\xff\x25\xe6\x4f\xb1\x75\xcd\x1f\x67\xe4\x35\x7f\x3d\xc4\x8f\x32\x7f\x4a\xae\x7b\xcd\x9f\x8d\x3f\xc2\xfc\xd9\xa8\x7f\x05\xf3\xa7\x58\x7e\xbd\xf9\x53\x94\x3f\x69\xfe\x6c\x32\x3f\xd2\xfc\xd9\xbc\xfe\x3a\xe6\xcf\xee\xf5\xaf\x37\x7f\x3e\x0e\x3f\xda\xfc\xa9\x94\x35\xc8\xe2\x8d\x67\xaf\xf1\xa3\x11\x46\xd0\x28\x45\xec\x20\x4c\x7d\x83\x14\xf8\xac\xa1\xcb\x98\x34\x88\x80\xcf\x08\x9b\xb8\xda\x4c\xe6\x8f\x9b\xc9\xfa\xd1\xb1\x89\x06\x73\xd7\x2c\x2a\x76\x5e\xcb\x28\x81\xfc\xab\x66\xd1\xf0\xf7\x18\x47\x43\xc0\xc8\x55\x33\xe7\x15\x20\x31\xc2\x44\x22\xd8\x5f\xbf\x6a\xf6\xc9\xfc\xf5\x86\xd2\x20\x3e\x6e\xd5\xec\x13\xf3\xd3\xab\x66\x4e\x3c\x71\x53\x4c\xf9\xd9\xdd\xb9\x6a\x56\x0a\x39\xbe\x3b\x7e\x9c\xd1\x0c\x30\xf9\xd1\x76\x53\xa5\xdd\x42\x54\x9a\x67\xe0\xf2\xa3\x11\x76\xd3\x28\xc5\xa2\x17\x41\xfa\x2e\xa4\xc0\x67\x37\x5d\xc6\x74\x4c\xa0\xc9\x67\x54\x54\x60\x3a\x99\xaf\x16\x93\x25\x12\x14\x38\x70\x47\xa2\x2f\x25\x3f\xaf\xe1\x94\x40\x7e\x63\x22\x5a\xfe\xae\xd8\xc2\x41\xc0\x38\xc3\x29\x78\x05\x48\x8c\x30\x9c\x08\xf6\x97\x1b\x4e\xaf\xcc\x3f\x20\x1a\x6f\x20\x3e\xca\x70\x7a\xc5\xfc\xf4\x51\x32\x27\x9e\xb8\x79\xf2\xfc\xec\xee\x34\x27\x4a\x21\xc7\x77\xc7\x8f\x33\x9c\x01\x26\x3f\xda\x70\xca\xdc\x81\xae\x46\x8b\x34\x82\x5e\x2c\xc2\x6c\x0e\x85\xe8\x11\xb5\x91\x81\xd0\xfd\xee\xb3\x99\x0e\x53\xcf\xd1\xf2\xc0\x64\x8c\xc5\x4c\xd3\xc9\x66\x35\x59\x2f\x90\xd3\x65\xc5\x1a\x3b\x5d\xe7\xcc\xbc\xe6\x52\xc0\x78\x2d\x88\x6c\xef\xfb\x8e\xa8\x95\x74\x71\xc6\x52\xb0\xf2\x53\x18\x61\x2b\x5d\xe4\x2f\x37\x95\x3e\x89\xf1\x63\x52\xbb\x74\xe4\x61\xb5\x8f\xe1\xd7\x9b\x66\x57\xdc\x7b\xf9\x08\xb9\x13\x37\x09\x68\x74\xe3\x00\x3b\xa2\x95\x72\x84\xee\x85\xfb\xe4\xaf\x11\x9b\x18\xcf\xcd\xb3\x7c\xe3\x57\xd5\xdc\x6b\x84\xf6\x23\x0f\x26\x8e\xb8\xf6\xe6\x3e\x30\x01\xf6\x57\xb3\xe6\xc5\x7d\x4a\x4c\x41\x18\xb2\xc9\xb7\x82\xab\xba\x9b\x66\x65\x59\xbf\xb2\x9c\x78\x2e\x14\xb6\x8a\x7e\x39\x11\x8e\xa5\xfa\x92\x1d\x8a\xee\x7d\x3b\x03\xe7\xfb\x6d\x97\x75\xc5\x61\xa2\x5f\xc4\x33\x1e\x64\xd5\xdf\xe4\x23\x80\x4d\xe0\x52\x92\x49\xf6\x78\x2d\x4b\x7e\xaf\x0f\xa4\xfe\xb2\x1e\xc4\xd5\x0d\x22\x34\xfd\xe6\x74\xf7\xa0\xc0\x3b\xf9\x60\xf2\x94\x7d\x67\x55\xd7\xba\xc7\x30\x60\xb0\x64\x55\x71\x16\x4f\xf6\x0e\x6f\xdd\x26\xb3\x75\x9b\x14\xd5\xb1\xa8\x8a\x8e\x25\xbd\x1a\x64\xea\x8e\x68\xdf\xab\x49\x5b\x97\x45\x9e\xc0\x67\x27\x75\xaf\x3f\xa7\xab\xa7\x0d\xbf\xd2\x2b\x3e\xf3\xc4\x83\xa4\x76\x76\xf5\x05\x35\x2d\xf2\x01\xc4\x9f\xac\x8b\xbc\xea\x32\xe4\x70\x15\x92\x9d\x77\xc3\xe5\xc0\x75\xfa\x73\x32\x4d\xbe\xcd\xd9\x39\xf9\x53\xb2\x78\x78\xd8\xe9\xbb\xa6\x4e\x89\xf3\xf8\x20\xb1\x14\xe5\x7d\x7e\x43\xb5\x46\xfe\x25\x92\xe4\x3a\x3a\xe4\xe9\x85\xf6\x86\xdc\xc1\x05\x9d\x2f\x72\x84\x34\xd9\x65\xdb\xff\xc7\xb9\xd7\xca\x8b\xdb\x2e\x6b\xb4\xac\xfa\x8d\x6b\xeb\x16\xf3\xcc\x1c\x51\xc3\x43\xd8\xd4\x0d\x51\x79\x03\x14\x20\x21\xd7\x31\x25\xf1\xa9\x05\x18\xba\x51\x6d\x02\x63\xcf\x73\xbb\x17\x4b\xf5\xd3\xb3\x3d\x01\x91\xfc\x5e\xdd\xb5\x37\x35\x08\x14\x84\x59\x98\x22\x42\x0e\x42\x5b\x31\x16\x56\x09\x68\xaf\xe9\xfc\xf2\xe6\xe5\xea\xb6\xa0\x7c\xe9\xd2\x87\xe5\xfa\x50\x14\x94\xe5\x59\x52\x60\xe2\xde\x74\xe0\x89\xf4\x30\x47\x79\xe7\x55\x3d\x1a\xbe\x8c\xab\x83\x7a\xcf\x3c\xaa\x26\x71\xc0\xaa\x3e\x61\xe8\x6d\xac\x0c\xd2\x11\x86\xcf\xa2\xaf\x86\x1a\x16\xed\xf0\x74\x1a\x7e\xd9\x1c\xc0\x8a\xa7\x14\xd0\xd1\xcb\xaa\x5c\xbc\xad\x9a\x15\x15\x6b\x74\x3a\x8a\x44\xbc\x6d\x6b\xdf\x85\x8f\xcc\x89\x62\xd2\x53\xc9\x36\x9e\x37\xe9\x45\xcd\x26\xfc\x77\x83\x2d\x6f\xf2\xf2\x5a\xc0\x7b\xd6\xcb\x85\x7e\x35\x58\xea\xa9\xfc\xa2\x48\x72\xfb\x26\x7e\xe5\x2f\x08\x07\xf2\xc5\xa8\xc4\x28\x80\xad\x91\x5f\xc4\x00\x9d\xaf\x17\x5a\xd8\x18\xd2\x2a\x91\x08\xac\x91\x48\x66\x64\x80\x2d\x57\xab\x08\xb2\x6e\xfa\x14\xac\x3d\x81\x8c\xe2\x8f\x51\x49\x9a\x54\xf2\x12\x29\xa5\x2f\x67\x09\xce\xdf\xac\x8c\xf8\xe3\x43\xbf\xd2\x1b\x99\xd4\x42\xbb\x2b\x65\xf1\x4b\x59\x98\x0f\xe8\xf3\x64\x0e\x1f\x88\x8b\xe3\x50\x1e\x7c\x9e\xbc\xf4\x14\xd6\xbe\xc2\x8b\xaf\xac\xf1\xf1\xe4\x7e\x96\xa7\xfc\xea\xb2\xb5\x9b\xc2\xac\xe7\x69\x3e\xa0\x9e\x16\xc6\xef\x4b\xe3\xf7\x95\xf1\xfb\xda\xf8\x7d\x03\x33\xf0\xdb\x6f\xe1\xef\x78\x06\x0d\x9d\xc6\x61\xbe\x58\x9b\x7c\xcd\x87\xdb\x86\xac\x09\x7a\xf6\x86\x42\xd2\xa9\x17\xfa\xbe\x83\x35\x5a\x00\xb7\xd9\x4c\xc9\xa0\x89\x3f\xce\x57\x10\x25\x40\x7f\x36\x5f\x2d\x9e\x00\xc6\x12\x30\x41\x78\x6c\x36\x9b\x0d\xc4\x08\xf1\x58\x2e\x97\x4b\x13\xa3\x2e\xcd\x5e\xb5\xea\xbb\x33\xed\xd6\x02\x30\x82\xcf\x38\x2f\x10\xd9\x60\x55\xac\x07\x9d\x51\x84\xa7\x27\x88\x03\x5e\x77\x76\xe0\xe7\xf8\x48\x52\x2e\x07\x97\x79\xed\xb8\xd3\x66\xae\x1a\xf1\xac\x39\x6c\x8d\x5b\x59\xb4\xea\xad\xf5\x9c\x1d\x8a\x73\x56\x7e\x98\x0d\x64\x16\x17\xed\xc1\x2c\x83\xc5\xd3\xee\xfd\xc2\xb6\x87\xa2\x39\x94\x6c\x67\x9a\x00\xc0\x90\x63\x61\x88\xed\xbf\x5c\xb3\x86\x0d\x80\x39\x9c\x44\x40\x67\x1c\x8b\x97\x6b\xc3\xec\x72\x38\xc7\x2c\xb0\x0c\x2c\x36\x09\xbf\xf2\x20\x3c\x43\x56\x00\x41\x49\x8a\xf3\x0b\x9a\xbe\xd2\x01\x3c\x16\x2f\x87\xec\xd2\x4f\xd4\xe0\x01\xfc\x2e\x2b\x8b\x03\x78\x38\xfd\xe6\x7b\xbc\x5e\x75\xb2\xf3\x74\xfd\x6c\xdf\xb0\x2c\x3f\x34\xd7\xf3\x5e\x24\x67\x52\x8f\x1a\xf1\xdf\xab\xec\xcc\x26\xb3\x53\xf1\x72\xe2\xd7\x6b\x26\xb3\x4b\x53\xbf\x34\xac\x6d\xed\xc7\xdc\x07\x49\xda\xeb\x7e\x62\xfc\x61\xbe\x31\xfb\xb8\xfe\xf9\x03\x1a\xd7\x9b\xb9\x00\xb5\x96\xb7\xb9\xb3\xe0\x3d\x49\xad\xde\xce\xa9\xf5\xa1\x20\x27\x33\x18\xe9\x06\xe8\x2b\x9e\x08\xeb\x84\x3e\x93\x5f\x5d\xae\xdd\x64\x26\x3c\xbd\x44\xfc\x33\x99\xf5\x6a\x92\x35\x2c\xbb\x7d\x3a\xe9\x90\x99\xd5\x0e\xa9\xe7\xc9\xb2\xec\xd6\x8b\x5b\x2e\x3c\xcb\x72\xb4\x75\xf8\x77\xd5\x46\x46\x53\xf4\x9e\x04\x60\xe1\x90\x3c\xd6\x75\x87\x91\x14\xdf\x2d\x92\xfd\xe2\x3c\x4d\xd2\x00\xc9\x7d\x9d\xbf\x27\x5d\x63\x8c\x0a\x8c\x01\x06\x75\xb2\x96\x4b\xb2\x22\x9a\xc3\xb0\x15\xe4\x6e\xfc\x18\x20\xf4\xce\x8f\x01\x44\x6d\xfd\x48\x95\x70\x74\x60\xd8\x05\x98\x6d\x16\x88\x06\x18\x29\x82\x20\x80\xd9\xff\x9c\xf8\x76\xcb\xf3\x69\x5d\xca\xec\xc0\x4e\x75\x99\xf7\x4b\x06\xc5\xce\x2d\x93\x2a\xc2\xb7\xc5\xd7\xab\x89\xf8\xff\xd9\xf2\x61\x20\x26\xf3\x70\xf1\x3f\x49\xaa\x14\x50\x88\xbc\x47\xd4\xb1\x92\x4e\xcf\xad\x57\x48\xb4\x3c\x40\xd4\x5c\xc4\xea\x0f\x7a\xbd\x2a\xf8\x82\x72\x75\xde\xa1\xb8\x9a\x04\xcc\x6f\x9a\x86\x16\xcf\x86\xd2\xb9\x99\xa2\xa3\x08\x77\x72\xd3\xb3\xd7\x68\x2e\xcc\xb0\xc1\x38\x90\xa5\x37\x44\xe1\x86\x90\x43\xc2\xa7\x56\x3e\x28\xb3\x85\xe7\x8b\xc5\x44\xfd\x6f\x68\x64\x80\x1d\xd6\xb6\x28\xf0\x51\x5c\xa3\x2a\xf6\xa9\x7a\x05\x74\x33\x04\x19\xc1\xab\x77\x6a\xfe\xae\x65\x59\x73\x38\x99\xbd\x6d\x7e\xb6\x37\xb8\xe5\x56\xa7\xa2\xd0\xcf\xd6\x75\x55\xbe\x9b\xe8\xfa\x9b\xbb\x7b\xae\x87\x03\x9f\xf7\xa1\x76\xcb\xdc\x49\xf6\x0e\xbe\x8d\x84\x8e\x2e\x37\xc7\x14\x2c\xda\xe2\x18\xd8\xc0\x73\x98\xa0\x85\xce\x50\x74\x59\xb9\x25\x31\x83\xd3\x49\xd6\xa4\x25\xe6\xf9\x14\x20\x59\x99\x76\x05\x49\x17\x61\xe3\xa1\xad\xe6\xa6\x8f\x81\x45\x6e\xab\x81\x04\x31\x8e\x24\x54\xab\xb9\x7c\x9c\x52\xb4\xd5\x0c\x6e\xa3\x52\xbd\x68\x71\xa5\x97\x68\xd2\x94\xe9\x1a\x90\x4b\x8e\x36\x1e\xda\x64\x6e\xda\x09\x58\xe4\x36\x19\x48\x2c\xe1\x48\x42\x35\x99\xcb\xc7\x29\x45\x9b\xcc\xe0\x36\x36\x45\x84\x96\x38\xcf\x1a\x4b\xcf\xc4\x45\x6f\xfb\xc6\xaa\x85\x82\xb6\x97\x73\x53\x1d\x94\xb8\xad\x65\x5e\x46\xb7\x25\xa0\xda\xca\xe1\x61\x17\xa2\x2d\x35\x70\x1a\x75\xa7\x5c\x4b\x2a\x2f\x82\x41\xa2\xfa\x72\x28\x72\x91\xcd\xc0\x2d\xaa\x63\x0d\x54\xa4\xb2\x1a\x5c\x00\xc0\x8e\xad\xec\x2e\x50\xd1\xcf\xb6\x48\x68\x47\x60\x37\x69\xed\x42\xb7\x3b\xac\x9b\xb2\x48\x55\xa9\x4e\xc1\xf8\x21\xe5\x68\xd7\x00\xae\x23\xef\xbc\x82\x36\x46\x5b\xc2\xb9\x0f\x02\x4a\xdc\x36\x30\x6f\x82\x80\x2e\x23\x0c\x44\x45\x28\xbc\x71\x11\xcd\xfe\x8a\x34\xaf\x2d\x3e\x56\x86\x36\x2c\xa8\x84\x53\x80\xda\xa1\x8a\x1c\x5a\x4e\x6d\xec\x42\xc2\x08\x55\x51\x43\xcb\xbe\xcf\xa2\x1b\x45\x86\x8b\x42\xaa\x3a\xf8\x1d\x09\x77\x75\x71\xd1\xce\xc1\x02\xe1\xed\x42\xb7\x8b\xac\x10\x78\x44\x26\xaa\xf9\x30\x7e\x48\x39\xda\x88\x80\xeb\xb8\x18\xf8\xc1\xc9\x11\xd1\x63\x96\x2f\xa2\x82\x61\x91\xe8\x37\x17\x17\x77\xb7\x90\xc0\x58\xbb\x10\x71\xb9\x60\x48\x2c\x22\x13\xe9\x76\x21\xfc\x90\x72\xdc\xf5\x32\xb9\x8e\x8c\x89\x35\xa6\xa5\xea\xc5\xf4\xbd\x67\x46\x6c\x1c\x12\x12\xe3\x60\x12\x73\xa3\x13\x26\x67\x95\x61\xf3\xa3\x19\x20\xe7\x8a\x43\xcf\x91\x0e\x2f\xb7\x98\x98\x27\x07\x8e\xe3\x02\xe4\x86\x01\x74\xce\xca\xd2\xd2\xee\xe8\xe0\x19\x4d\x45\xa5\x8c\x36\xc9\xd0\xbb\x2a\x83\x81\x15\x09\xa8\x81\x7d\xf2\x6d\xb3\xcc\xcc\xf0\x14\x6b\xfd\xed\x44\xad\x88\x08\x0d\x67\x37\x65\xa6\x9f\x26\xb1\x4d\x30\xf2\x2e\x9d\x79\x46\x37\x3b\x9c\xd8\xe1\xb7\x7d\xfd\x36\x99\xf5\x8d\x52\xab\x6d\x40\x74\x6f\x16\x39\x32\x35\xda\x5c\x06\x71\x7c\x45\x86\x5b\x98\x4c\x3c\xb5\xb6\x97\xd2\x8f\x61\x63\x0a\xee\x2d\xee\xcc\xe3\xda\xf4\xe7\x5d\xc3\x78\x73\xab\x4d\xcf\x01\x8f\xef\x58\xff\xb9\xa9\x5f\xdb\xbf\x3c\x70\x1a\x27\xfd\x7a\xf0\xe5\x8d\x53\x51\x47\x49\x0b\x7e\x98\x3b\x2c\x35\x7b\x14\x95\x2e\xfc\x5a\xb5\xac\x1b\x0a\xf9\x51\xf7\xb1\x78\x63\x39\xef\xe5\x9b\xe4\x2e\x16\xa2\x56\x3b\xab\x58\x2a\x19\xc0\x62\x1d\x5f\x2d\xd6\x1f\x62\xff\xf9\xd0\x65\x60\x27\x1a\xec\xd1\x62\x01\x2e\x90\xce\x7a\x37\x2a\x69\x3d\xb6\x39\xac\xe4\x4e\xe4\x96\x20\x97\x5e\xfc\x61\xd5\x61\x80\x55\x21\x00\x1c\x16\xc6\xd0\xea\xdd\x52\x09\x6a\x6e\xfe\x70\x70\x33\xdc\x0c\x84\xfe\xb8\xc1\x67\x1f\x02\xe3\x17\xd9\xa2\x20\x3f\x3a\x3f\x5e\x91\xcd\x64\xe9\x08\x56\x4b\x9d\xed\xbe\xfb\xc6\x47\xf9\xb5\xec\x8a\x4b\xc9\x1e\x6e\x20\xff\x3e\x0d\xb7\x05\x51\x91\xe6\xfe\x3c\xbc\xcb\x2a\x15\xd8\x88\x79\xd9\xa6\x43\x20\x56\x42\x44\x62\xf1\x83\x0b\x24\xd4\xc9\x8d\xaf\xda\xf1\x41\x75\xac\x9b\xf3\xb6\xa9\xbb\xac\x63\xdf\xa6\xab\x75\xce\x5e\x1e\x86\x82\x69\xdd\x14\x2f\xc5\x90\x7d\x9f\x37\x8c\x79\xaa\xd8\x0b\x25\xf3\xbb\xef\x9a\xe1\x3c\x95\x9d\x79\xa0\xd7\x3a\xfd\x79\x67\xc4\x6c\xf4\xb2\x37\x75\x39\x33\x42\xde\x44\x53\x28\x5d\x75\x4b\x6e\x46\xe0\x59\x6c\x60\xdc\x87\xa5\xf9\xa1\x73\x10\xc3\xc0\xdb\xa6\x05\xbe\xa8\x40\x07\x7d\xed\x3e\xbd\xe7\xed\x3e\xb6\xe0\x0d\x83\x96\xc7\x1f\x96\x61\x80\x0a\x01\x4f\x42\x8d\x9d\x54\xd0\x3c\x63\xf6\xcf\x6d\xc4\xf1\x5b\xe4\x90\xc2\xbd\x9c\x47\xee\x7b\x03\xe4\x99\x19\xdb\x0f\xc9\xd2\xcf\x0f\x20\x34\x94\x37\xe2\x14\x68\x17\x06\x12\x47\xe1\xa5\xe3\xa2\xfb\x26\x78\xbf\x38\xbc\x4c\x01\xf4\x47\xc7\xe3\x22\x89\xd8\x88\x24\x87\xf6\xde\x3a\xc1\x77\xe4\xee\x39\x4d\xe5\xae\x6d\x71\x8a\xdc\x97\xc8\x34\x7e\x5f\xdb\x19\x78\xed\x94\xbd\x5d\xb2\x0a\xbe\xf3\x46\x73\xc4\x14\x54\x6d\x0f\x42\xda\xdc\x65\x51\x33\xce\x5f\x1e\x6e\xd0\xfe\x2c\xcc\x29\x4f\xb1\xd1\xd0\xc0\x63\xd1\xe7\xc2\xb6\xdd\x18\xe0\x93\x5a\x9c\xb8\x83\x13\xe4\xb9\x31\x03\x72\xb1\xb7\xd8\x5d\x00\x3d\xc5\x0f\xc3\x87\x6f\x46\x43\xd3\x0d\xf6\xdb\x71\x48\x77\x44\x62\x10\xd6\xd0\xb4\x41\xb6\x7e\x0a\xf7\xed\x90\x0f\xb4\xf8\x86\x31\x5e\x33\xb5\x2d\x8e\x03\xe3\x95\xb3\x21\x90\xca\x99\x20\x48\xe5\x40\xf1\xf8\x8d\x6c\x63\xce\xee\xf5\x85\xe8\x33\xa0\x9e\x36\x30\x5e\x33\x1b\x02\xa9\x99\x09\x82\xd4\x0c\x14\xdf\xb5\xdf\x3c\xd0\xca\xb3\x86\xe8\x35\xbe\xcb\x8c\x02\xe2\xf5\xb2\x00\x90\x6a\x19\x10\x48\xad\xcc\xd2\xf1\x7b\xc3\x03\x1d\xb9\x83\x49\x54\x4a\x6e\x07\x0f\xe0\x45\x75\xac\x75\xa4\x87\xd9\xc6\x15\xd1\x2e\x6a\xeb\x97\xe2\x88\xb7\x8e\x0b\x83\x34\x10\x04\x42\xda\xc8\x02\xb8\x67\x93\x16\xad\x39\x2e\xb3\x05\x80\x08\x6c\x40\x20\xd2\x9a\xa5\x72\xd7\x04\x6d\x60\x6a\x9c\x54\x01\x7d\x32\x20\xd0\x51\x52\x8d\xd1\x27\xdc\xd3\x30\x76\x03\x09\x85\x92\x7b\xa0\x14\x38\x5e\x37\x17\x06\xa9\x1e\x04\x42\x6a\x68\x01\xdc\xb1\x5b\x69\x4c\x05\x62\xab\x8e\x30\x73\x72\x83\x92\x02\x27\xe6\x27\x07\x06\x9b\xa1\x00\x10\x36\x47\x41\x80\x7b\xb6\x12\x4d\x1b\x53\xbd\xb0\x06\xaf\xa4\xda\x3e\x24\xa0\x29\xa3\x67\x81\xa0\x66\xcf\x80\x41\x0d\x9f\x59\x7e\xc7\x66\x9f\xa1\x11\xd1\x5b\x7b\x03\x0e\xbd\x8f\x67\x8c\x25\x62\xd7\xce\xa8\x84\x74\xe3\x70\x47\x08\xba\xd1\xd6\x36\x1f\xf2\x51\xf5\x90\xb9\xbb\x67\x48\x03\x17\xd1\x7f\xcd\x9b\x62\x11\xd7\xc3\x8c\xbd\x83\x14\xd9\x96\x90\x57\x9e\x36\x7a\x1b\x41\xfd\xaa\xb7\x2b\x84\x97\x7c\x2c\x4a\x66\x86\x61\xde\x90\x1d\x47\xb5\xe5\x70\xca\xda\x29\x7f\xc5\x4f\xfd\x22\x2a\xa7\xde\x05\xb4\xc1\x5a\xb3\x78\xa6\xef\x8d\xe8\x2d\x45\xa7\xa5\xb5\x6a\xc9\x16\xf7\xa9\x93\x81\x22\x34\xcb\xc1\xc1\xf4\x6b\x40\xe2\xaa\x86\xe0\x08\x85\xe3\x6f\x86\x3a\xaf\x32\x9a\xbb\x7f\x6d\xd7\xb0\xee\x70\x82\xf7\xdb\xbc\x17\xda\x8c\xa8\xd7\x9c\x95\xac\xf3\x3e\x4a\xea\x3e\x3f\x2a\x84\x1a\xdc\x69\xbd\x5d\x39\xf6\x86\xb5\xe5\x2d\x03\xaa\xc6\xba\x3e\xb1\xf6\x43\x67\xf0\x01\x36\x3f\xff\xe7\xfe\xe7\x7e\x11\xa4\x75\xa3\x45\xe0\x00\xa6\x08\x11\xdb\xdc\xdc\xbc\x91\x6b\x8c\xa0\x4c\xc2\xa0\xd2\x22\xd9\xe5\xe4\xcd\xf9\xd1\xcd\x22\x56\x18\x3e\xc2\xa1\xc7\x8c\xcc\xa5\x1f\xa0\x1a\xe8\x6f\xe3\x55\x28\x3f\xff\x55\xff\x73\x27\x7f\x4f\x67\x1b\xd1\x41\x9f\xea\x6c\xb0\xe6\xf2\x4b\x43\x77\xb3\x19\xc4\xe4\x6f\x8d\x34\x1d\xd7\x14\x62\xa1\xe5\xd5\x9c\x40\x6e\x7f\x73\x2d\x05\xa8\x06\x3a\xd8\x78\xfb\xc6\xcb\x9f\x31\x76\x27\x73\x4f\xef\x1a\x81\x4c\x9f\x1b\xca\xd6\xba\xd3\x2f\x10\xdd\xc1\x66\xc8\x95\xbf\x35\xc4\x4b\x99\xa3\x1a\x84\x2f\x3b\x7d\x44\xbd\xcf\x53\x58\xfb\x00\x26\xd1\x40\x0f\x0f\x8f\x7c\x78\xb9\xcf\xd9\x22\x5f\x1e\xee\x16\xc0\xd3\xcb\x43\x10\xd6\xa7\x3a\x19\xac\xc3\x43\xe2\xd0\x7d\x6c\xc4\x8a\xf9\xdb\x83\x3f\x3d\x34\xba\x3d\xd4\xc2\xd9\xdb\xd1\x81\x24\xfc\x98\x85\x70\x9f\x41\xc0\x2a\x07\xde\x36\x08\x28\x5b\x76\x7c\x1c\x39\x61\xb8\xe1\x5e\x3e\x19\xbe\xa0\xc7\xe1\x96\x02\x2a\x93\x15\x26\x85\x09\x34\xc4\x44\xe1\x63\xbe\x0a\x29\xf0\x10\xea\x04\xaa\x43\x19\x23\x18\x7a\x7f\x6f\x0b\xd3\x1a\x0c\xa3\xea\xfc\xbd\x3c\xcf\xd6\x8f\x61\x7f\xc3\x9a\x8b\x2a\xbf\x9d\x0a\xa5\x0a\xa6\x88\x06\x67\xa2\x2a\xca\xd3\x78\x5a\xef\xef\xe5\xee\xb3\xfc\x55\xe4\xcc\xbe\x5e\x1d\xf7\xe3\xb8\xf3\xdd\xa9\xaf\x6e\x50\x2b\xab\x35\xa9\xf7\x3f\xa6\x41\x61\xe0\x22\xc9\xfc\x07\x35\xa8\xda\x8e\xf2\x6a\x7e\x20\x65\xab\x87\x6e\xa0\x59\x41\x4e\x5c\xbf\x0c\xfb\x6c\xb3\xdc\xdc\x2d\x83\xc7\x22\x81\xb8\xc1\x4f\xd9\x58\xb8\x51\x17\x12\x89\xee\x6f\x18\xe5\xe8\x6f\x96\xe7\xe7\xc3\x72\xa4\x51\x52\x9b\x73\x5e\x17\x39\x90\x6c\xd2\x43\x37\xb4\xea\x35\xd3\x79\x86\x64\x78\x9a\x3f\xde\x2d\x83\x6f\xd9\x6b\x86\x38\x7e\x72\xe1\x0b\xb6\x2d\x43\x32\x79\x96\xbd\x20\x22\x33\xb0\x1f\xf0\x34\x1f\xbb\x3e\x95\xdb\x95\x3e\xb2\xa1\x8c\x79\x34\xd9\xa0\xd3\x3c\xe4\x22\xf4\x4a\xb0\x67\xcb\x7c\x39\xd2\x97\x73\xe2\x34\x3d\x12\x7c\x41\x77\x83\x4d\xdc\x80\x40\x3e\xbf\xd9\x88\x1e\xf5\x37\xc9\x6a\x99\x2d\x46\x4e\x28\xd4\xe5\x5a\x55\x4e\xef\x1d\x43\x08\x29\x58\x71\xa8\xab\x64\x76\xcc\xcc\x24\x14\x3c\x97\x91\x9e\xef\x89\x7d\x66\x50\xee\x21\xf6\xa4\x89\x9d\xb2\x96\x07\x0a\xba\x7d\x34\x32\xf5\x12\x4e\xaf\xff\xf5\xce\x6c\x51\x80\x5c\x5f\x29\x76\xbe\x74\xef\xae\x9c\xc3\xf6\x7d\x00\x87\xcb\x02\x43\x2c\x54\x7b\x05\x93\x07\x29\xc0\x50\xe6\x20\x05\xb7\xaf\xdf\xf4\xb8\x10\xdb\xd2\x1c\x26\x2f\x1a\x76\xe0\x9b\xd3\x87\xba\xbc\x9e\x2b\x1c\xa1\xaf\x1c\x0a\xae\x36\xd2\x61\xae\x02\x76\x4e\x96\x66\xe7\x9b\xa4\xcc\xf6\x57\xd7\xdb\xe7\x97\xb7\x04\x68\x93\x89\xd0\x6b\xcb\x6d\x88\x06\x1d\x76\xec\x45\xb0\x08\x85\xe2\xd5\x56\x0e\xac\x87\x09\x8d\x35\x5f\xa1\x58\xc1\xa1\xf1\x84\xa2\x05\xc6\xc0\x72\xed\x62\xd1\x83\x61\x50\xb2\x44\x5e\xe6\x0f\xe0\x9a\x0d\xaf\x74\x5a\x24\x16\x48\x16\xc3\xd9\x0a\xd9\x25\x8d\xbd\xa3\x66\x51\xd2\x82\xe0\x28\x08\x77\x29\xb6\xcb\x7d\xce\x0b\xa4\x04\x3b\x71\x46\x34\x9d\x0f\x74\x87\xc3\x26\x53\x9d\xcd\x13\x27\x0a\x92\x4b\xc1\x15\xf9\xa5\xa9\x5f\xb7\x73\x2b\x55\xd5\x87\x49\x2f\x78\x34\x61\x05\x39\xfa\x4e\x2a\x06\xb2\x91\x3b\x83\x56\x18\x12\x81\x6f\x36\xaa\xc4\xc8\xd7\xfd\x0f\xc0\x88\xdf\x7e\xc3\xb8\xf2\x39\xab\xaa\xbb\xe2\x58\x1c\x78\x94\xab\x27\x55\x25\xc5\x14\x91\xf3\x70\xec\x7f\x24\x8a\x88\xc4\x56\x81\xc2\xa9\x4e\xd5\x98\x0e\xd1\xa1\x58\x98\x30\x3f\xa7\x93\xb1\xbf\xe9\x5c\x19\x03\x2b\xde\xdc\x17\x66\x0b\x03\x07\xad\xdb\x02\xbc\x8f\x47\x07\xda\xde\x9d\x60\x04\x09\xb4\xf5\x1c\x06\xf7\x4d\x04\x62\x7b\xcd\x0f\xcd\x70\xb6\x69\x24\x8a\xa9\xea\xd7\x26\xbb\xb8\x47\x8f\x22\x10\x1c\x9e\x3f\x3e\x24\x2a\x7b\x86\x7b\x02\xd9\xb3\x0b\x16\x83\x90\x3c\x98\x79\x63\x61\x64\x0e\xf3\x1f\x81\x52\x2c\x22\xcb\x71\x19\x1a\x10\x0b\xaf\x14\x66\x66\xc4\x08\x98\xdf\x74\x50\x80\xfa\xb8\xb5\xa1\x54\x7c\x8c\x56\x38\x87\x94\xfa\x08\x69\xf5\x5f\xb7\x0e\x9c\x1d\x78\x3b\x48\x68\x5e\x32\xd0\xe0\xde\x38\xda\x01\x57\xdd\x42\x58\x65\xfd\xcf\x07\x6d\x3c\xc0\xe9\xbb\x48\x52\xc4\xc7\x8c\x6b\x9f\xd5\xff\x52\xeb\x60\xdd\xb8\xa7\xb0\x81\x79\x9a\xfa\xce\x17\x7f\xeb\xb4\x43\xac\x2c\x8b\x4b\x5b\xb4\x1f\xc6\x4c\x1f\x4a\x78\x6a\x9c\xdc\xe3\xae\xd1\xce\xca\x50\x6a\x1e\xf1\x7f\xcc\x4e\xac\xbc\x4c\x66\xc2\xc2\x03\xc9\x3f\x02\x4e\x80\x40\x01\x16\xd2\x1c\x8f\x0d\x3b\x83\x74\x6e\x8f\x69\x2a\x71\x42\x89\xa5\x84\x1b\xc3\x41\x7d\x8e\xbb\x06\xa0\x3d\x77\x0d\x42\x39\xe3\x7d\xe5\x1d\xd2\x3b\x98\xd4\x4f\x03\xea\x73\x58\x90\x7f\x5d\x95\x88\x24\x0a\xd6\xf1\xaa\x2a\x14\xe9\x02\xac\xc9\x41\x15\xf2\x6b\xf1\xe6\x79\x8e\x2a\x50\xd7\xc0\xc1\xa6\xfe\x50\x2c\x6e\x77\x0f\x2c\x2a\x4d\x45\xc5\xf5\xa9\x32\x75\xe7\x15\xec\x5c\x19\x95\x92\x57\x39\xc1\x2e\x87\x29\x1f\xbf\xa1\x08\x16\xc4\xbd\x72\xb0\x32\x0f\x76\xe5\xa3\x5a\x42\xb1\x32\x37\x92\x86\xde\xa2\x43\x1a\x6c\xcc\x44\x99\xb7\x40\x22\xde\xa9\xf4\xd5\x28\x6c\x23\x11\x9a\xca\x60\x3a\x89\x05\x97\x76\x36\x12\x1a\x5a\x5d\x7a\xa1\x65\x78\x7d\xf6\x52\x6b\xe1\xaf\x8b\x91\x67\x2a\xa2\x2a\x26\x74\xb0\x26\x26\xb0\xaf\x22\x60\xa1\x69\xd5\xc4\x2e\xf3\x54\x25\x42\xfe\xb0\xd0\x84\xa4\xe6\xb2\x35\xc0\x1e\xce\x58\x11\xc0\xc6\x4c\x16\x80\xde\x46\xd3\x1d\xe6\x51\x7f\x4b\x44\x0a\xeb\xa6\x90\x0a\x01\xc7\x88\x0a\x12\x4f\xc5\xf6\x48\xa4\xc4\x0e\x4e\x8c\xe4\x00\x29\xa6\x06\x10\xc1\x49\xd0\x3c\x42\x57\xd4\x05\xc9\x31\x1a\x13\x8d\xb3\x1d\xc9\xc3\x4c\xc7\x3c\x46\x87\xc6\x60\xc4\xd7\xc1\xd4\xa7\x68\xf0\xd8\x1a\x10\xba\x75\x0f\x66\x7c\x8d\x30\x3d\x1b\x8d\x46\xa4\xcc\x26\xf1\xf9\x76\x19\xbf\x87\xc4\x72\x73\xd5\xee\xa2\x18\xbf\xc6\xec\x9c\xd1\xc8\xe1\xdd\x34\x1a\xd7\xd8\x6c\x90\x15\x00\x5b\x0d\x62\x9a\x3f\x35\x45\xf5\xdb\x60\x95\x8b\xb6\x2f\xbe\x5e\x58\x3e\xd6\x47\x18\x30\x7f\x85\xec\x68\x16\xbf\x06\x9d\x09\xe9\xc7\x58\x59\xeb\xa1\x5b\x83\xd0\xa3\x3a\x0a\xd4\x79\xee\x12\x30\x7e\x8d\xed\x36\x1c\x39\xae\xdb\x70\x5c\x7e\x5f\x8c\x67\x18\x80\x6f\x29\x44\x62\xfd\x8a\x38\x0f\x93\xb1\xa8\xa3\xfc\xca\x00\x55\xdf\x2b\x0c\xa3\xe8\x84\x94\x44\xd2\x11\x1b\x3e\x89\x5c\x20\x0d\xab\x8b\xa2\x3a\xb1\xa6\xe8\xfc\x79\xd9\x1f\x37\x22\xe1\xb9\x41\x09\x7d\x97\x42\xf1\xe2\xb9\x46\xc5\xef\xf2\x1f\x47\x2a\x6f\x86\xf5\xc7\xcd\xf3\xe5\xed\x61\x72\x69\x8a\xaa\xbb\x0d\xed\x70\xaa\x9b\xe2\xf7\xba\xea\xb2\x12\x0c\x43\x50\x43\xa1\x1e\xfb\xac\x2d\xda\x6d\xba\x23\x47\x36\x1c\x3a\x22\x8d\xba\xb9\x0c\xe6\xdf\x01\x61\x7a\xd5\x07\xf6\x8c\xc4\x76\x91\x83\x59\xd5\xcd\x39\x2b\x6f\x11\x90\xd4\xc2\x31\x86\x0b\xbe\xa2\xf4\x60\xf6\x1d\x75\x73\x5f\x2a\x71\x9b\x6f\x8d\x1a\x09\xb3\xa3\x29\xbd\xeb\x41\x7e\x95\x20\x24\x8d\x5f\x8d\x95\x1b\x6f\xae\xac\x69\xea\xd7\x07\x64\x3a\x71\xc0\x3d\xcf\x9e\x3c\x4a\xa5\x2c\xce\xd9\x0b\x9b\x88\x7f\x92\xe2\xfc\x62\xe4\x56\xb6\x36\x17\xcc\x1d\x54\x24\x1b\xbd\x42\x43\x8a\x44\x8e\x65\x3a\x3b\x3f\x37\xfc\x70\x23\xc2\xdd\x4b\x44\xf3\x11\x9b\xbb\x66\xe2\x4a\xc1\x0d\x6e\x04\xc1\xdd\xcf\xc8\xe4\x0d\xc6\xae\xac\x44\x44\x52\x2d\x18\x6c\x07\xe7\xe7\x17\xf2\xd6\x83\xb1\xe7\x28\x40\xff\x97\x00\xa8\xe9\x71\xd0\xb0\xe6\x46\x62\x24\xac\x4b\x18\xa6\xf8\x20\xab\xa8\x47\xb9\xa8\x25\x91\xf7\x98\x40\x14\x43\xd7\xc1\x04\xd9\x90\x09\x54\x3e\x72\x11\xcc\x25\x8a\x48\x6d\x06\xf7\xd8\x62\x4b\xde\xc5\x01\xdd\xa3\xab\x19\xd7\x43\x11\xe0\x66\x27\xc5\x83\xa3\xe4\x23\x1a\xdd\xa9\x8c\x68\xfa\xf8\xda\x84\xe0\xed\xea\x44\xc2\xe3\x0c\x62\x74\xc1\xa9\x11\xd7\x88\xf8\x0a\x05\xc0\xed\xfa\xc4\x81\xa3\xe4\x23\xf4\x53\x57\x26\x7c\x3d\xea\x87\xdb\x32\xd3\xa4\x27\x2a\x21\xf9\xc4\xfa\xdc\x5e\xf7\x5d\xd1\x95\xcc\xfe\x8e\x7d\x6c\xbb\xa6\xd6\xfb\x92\x87\x6b\xd3\xb0\xaa\xfb\x87\xfe\x0f\x7f\x3b\xf0\x56\x64\xc7\xce\x19\xa0\xff\xbf\xbf\x70\xe7\x79\x5a\x8d\xba\x6d\x87\xd5\x6e\x16\xbc\xe4\x86\xe3\x84\x6e\xb9\xe1\x58\xfe\x6b\x6e\xdc\x15\xc0\x6e\xfc\x69\x1f\xe1\x66\x86\x4c\x80\x24\x68\x3d\x44\xcf\x61\xbe\xd9\xbf\x3f\x0b\x77\x62\xf8\xb6\x7f\x9f\x5b\x9f\x16\xee\xa7\xe5\xfe\x7d\x61\x7d\x5a\xed\xdf\x97\xd6\x27\xf1\x20\x07\x97\x45\x2f\xf8\x54\x92\x32\xe2\xd6\x63\x2a\xc7\x82\xea\xc6\x34\xfd\x99\x90\x7d\xff\x3e\x77\x58\x01\xef\xd4\x42\xe8\xe5\x03\xe5\xfc\x81\x09\x50\x23\x50\xbc\xd9\xf0\xa7\x62\x9c\xf6\x02\x40\xeb\xcd\x6c\x01\xc8\xf4\x6d\x05\x21\xac\x16\x7f\x9b\x6f\x74\x90\xc9\x66\x78\x35\x49\x24\xed\xd6\x54\x56\x6f\x8b\x95\x4e\xa7\x35\x3c\xae\xb4\x58\x01\xb0\xe5\xe2\x6d\xb9\x50\x60\xcb\xe1\x0d\xa8\xe5\x02\x80\xad\x9e\xde\x56\x4f\x0a\x6c\xf5\xa4\xc1\x56\x4f\x00\x6c\xb3\x7a\xdb\x68\xa6\x9b\x81\xe9\x06\x32\x7d\xde\xbc\x3d\xeb\x2a\x3c\x6f\x8c\x97\xbc\x00\xd8\x7c\xf1\xf4\x36\x5f\x68\xb6\xf3\xc5\xc0\x77\x2e\xc2\x56\xe0\x59\xbf\x73\x06\x8d\xa8\x36\x30\x62\x22\x2d\x9d\xdc\x96\x7b\x40\x8d\x19\x80\x3f\xd4\xb9\x6d\x07\x2f\x0d\x33\x82\x0c\xe4\xc1\x93\x0d\xc1\x11\x4d\x30\x1e\x01\x63\x42\xfd\xaa\x2e\x85\x92\x57\x79\xb5\x69\xe1\x86\x45\x40\xab\xcc\x5f\xf2\xaf\x3d\x3b\xd6\x0d\xeb\xbd\xf0\x17\x5e\xb1\x7e\x91\xf0\xc0\x8f\x89\x00\x34\x55\x2c\xd0\x85\x65\x5e\xa7\x3f\xeb\xec\x63\xc3\x9d\x61\xfe\x5b\x99\x75\xec\x3f\x7f\x9b\xae\xd3\x9f\x1f\x12\xfd\xe1\x9f\xe4\x07\x99\x04\x4d\xe6\x40\x1b\x12\x8f\xc1\xda\x0e\xc7\x75\xe8\xe5\x55\x17\x58\xa6\x41\x27\x6e\x3e\xba\xf0\x32\x07\x38\x19\xfc\x61\xc3\x8b\xf4\xd7\xd8\xa5\x2c\x17\x56\x67\x80\x26\xae\xf6\xb8\x18\xe2\x34\xd0\x95\xb1\xc2\x78\xaa\x03\x42\x1b\x5c\x27\xc7\x25\xa2\xdd\x91\x16\x56\x69\x60\x89\x60\x69\xac\x19\xbc\x8f\x81\x7f\x0c\x2b\xc6\x51\x69\x0e\xe5\x4c\x6e\xfc\xee\x4c\xde\x6a\x88\x1b\x0b\x75\xed\xcd\x08\x23\xac\x57\x9d\x3a\x8d\x95\xfa\x32\xdd\x67\x98\xcc\xc2\x5b\xf0\x22\x7e\xcf\xca\x2b\xa6\x83\x4a\xad\x0c\x54\x9e\xec\xca\xcf\x10\xc3\x6a\xa7\xc7\xa2\x2c\x43\x77\x76\x65\x40\x97\x42\xd4\xc3\x63\x84\xc8\x7c\xd8\x60\x04\x22\x04\xa7\x71\x49\xf1\x1d\x14\x71\x3d\xf6\xfe\x26\x36\x69\xdc\xd1\xd6\x00\x3d\xd0\xe8\x10\x4b\x5c\xfb\x1c\xd1\xd0\xd2\x84\x60\x34\x62\xda\xda\x87\x4e\x37\x37\x82\xc5\xef\x32\xc6\xcb\xbd\x30\xc7\xaf\x81\x1f\x21\x33\x89\x4a\xca\xeb\x60\xa8\x6b\x6b\x23\xe4\x95\xc6\x14\xa7\x12\x23\xb5\x9f\x00\x2d\x3b\x82\xc7\x6f\x88\xc5\xcb\xae\x6c\x38\x42\x22\x42\x70\x1f\x36\x29\x35\x86\xc4\xaf\x61\x7d\x4e\x6a\x49\xe2\x4e\xa9\x15\xf6\x28\xa9\xd5\x65\xa2\x11\xaa\x22\x27\x40\x9c\x4a\x8c\xaa\xf8\x09\xd0\xaa\x82\xe0\xa9\x7b\x31\x23\x2c\x8a\x9c\x8d\x71\x2a\x31\x36\xc5\x4f\x80\xb6\x2a\x08\x9e\xbc\xe9\x11\x2f\xbd\xed\x1a\x00\x22\x11\xc2\xfb\xf1\x49\xd9\x31\x34\x79\x68\x30\x3c\x4a\x2a\x96\xc6\x60\x1c\xf1\xb3\x01\x0d\x21\xd6\xc1\x62\xd7\x9a\x98\xe4\x86\xc7\x01\xf5\xf3\x79\x58\x42\x63\x05\x36\x33\x9e\x3e\x92\xf0\x01\x6f\xd7\xce\x14\x3a\x24\xa8\x55\xd3\x95\x49\x5b\xbd\x11\x64\xd0\xf6\x3b\xc7\x3b\x2c\x4b\xe2\x0e\xab\xe1\xcc\x78\x4f\xc7\x20\xef\xf7\xa5\xf1\x3c\xa7\xe6\x34\x60\x92\x97\x0f\xcf\x18\xd4\x69\xcf\x7b\xe7\x24\x0a\xb4\xaf\xdd\x9b\x94\x87\xc7\x5a\x0c\xe2\x21\x57\xdd\x66\x21\x3e\x52\x6d\x23\x9f\x6c\x01\xad\x55\x59\xd5\x01\x30\xa7\xa0\x9b\x8f\xe7\xaa\xa5\x04\x18\x1e\xcd\x30\xe8\x87\xd6\x05\x76\x1d\xc5\x47\x8a\xc5\xf0\x9e\x84\xa9\xbc\x81\x85\x84\xad\x03\xe2\x23\xc5\x42\xbf\xb4\x00\xb4\xc0\xbb\xf0\xd8\x61\x39\xd4\x48\x06\xe2\xd8\x0c\x32\x10\xdf\x6e\x6e\x8c\xb9\x5a\x63\xfc\x6c\x35\x35\xdf\xf3\x65\xb9\xd5\xd6\xf2\x2b\xad\x50\x64\xd7\x49\xcc\x24\x9b\xe0\xdf\xc5\x7e\x2a\xce\xce\x40\x3a\x21\x48\xe8\xbe\x45\xec\x5b\x9f\x12\xae\xb9\xbb\x7a\x0d\x21\x69\x33\x52\x52\x08\x6f\xd8\x5b\xab\xe0\xe4\x26\xb4\xdd\xf9\x1a\x40\x3d\x5e\x1a\xf1\x68\xa9\x46\xd2\xcf\x93\xde\xf1\x2c\xa9\xff\x39\xd2\x7b\x9e\x21\xe5\x38\xdc\xd0\xf3\x72\xb3\x75\xe0\x57\x4b\xc0\xb9\xae\x11\x04\xc3\x85\xf2\xc1\xe0\xa2\x41\xfa\xc3\xd3\x19\xe6\xaa\x5d\x17\xf3\x48\x2a\x58\x79\x75\xcc\xad\xfa\xf6\x41\xe5\x66\x46\xcc\x4c\xff\x83\x51\xe3\xf8\x5d\x53\x5c\x7a\xa1\xef\x20\x6c\xce\x24\x83\x9d\x80\xad\xa2\xbe\x9d\x86\xec\xcc\x3c\x4b\xa2\xd8\x89\xeb\x46\x88\x51\x75\x27\xd1\xa4\xdf\xd8\x77\x56\x3d\x78\x6b\xfa\xd2\x06\xaf\x17\xc0\x18\x20\x6f\x1c\x56\x4f\x2f\xe9\xff\x8b\x46\xac\x0c\xc5\xa1\x60\x82\x01\xdc\x17\xba\x63\x40\x85\xde\xab\xe7\x90\xfc\xd8\x05\x09\x27\x50\x07\x52\x58\xa4\x01\xfa\x9d\x08\x3d\xe8\x25\x01\x41\x7b\x46\x43\x0c\x4f\x9c\x20\x40\xc8\xcb\xdc\xf7\x5d\xc7\xa5\x89\x9b\xd2\xdf\x7b\x77\x98\x53\x8f\xb9\x88\x6b\x03\x22\x2d\x21\xae\x55\x80\x27\xe8\xd5\x4d\x0b\x85\x1d\x8a\x60\x03\x70\x54\x3b\xc2\xd7\x43\x5c\xfa\x31\xea\x28\xaa\x3e\x6c\x66\x63\x23\x86\x74\x5c\xa1\x43\x8c\x5d\xa8\x23\xee\xec\x80\x1b\x62\xe2\x95\x6f\x78\x61\x4b\x7c\xc3\xee\xb3\x01\x69\x13\xb5\xe7\x6f\xb5\xb5\xfd\x86\xfc\x54\x45\x2b\x39\x1b\xf7\xbe\x55\x85\xb3\x86\xb0\x70\x03\xab\x06\x38\xd3\x5b\xb8\xa1\xed\x75\xf7\x84\x81\xf6\xf2\x43\xa8\xe1\xed\x76\x07\x45\x39\xe1\x8e\xd4\x3e\x4f\xdc\x5b\xe1\xa0\x93\xed\xc5\x0e\xfa\xcf\x5e\xec\x90\x6f\xec\x45\x76\xe3\xe8\x1a\x54\x93\xdc\x98\xb9\xf9\xda\x85\x14\x67\xf8\xe6\x38\x26\x07\x28\x57\x66\xf5\xaa\x0d\x34\x30\xf3\x27\x44\x9d\x25\xe9\x81\x52\xc8\x64\x08\x2a\x31\x23\x05\x91\xda\x9d\xbb\x68\x79\xe9\xe1\x87\x0c\xdf\xf9\xe5\xcd\x38\xbf\x70\x63\xdb\xa4\xeb\xe8\x21\x17\x79\x4a\xe7\xa8\x83\xe9\xfd\x5a\xf1\x0c\x9e\x57\x8b\xe0\xe3\x44\x89\x31\x4f\xf8\x98\xab\xfd\x13\x7d\x1c\xbb\x16\xbe\x9e\xa7\x42\x0a\x67\x3d\x1c\xc6\x0b\xf7\x11\xc7\x51\xcf\xdf\x11\xc5\x94\x3f\x27\xee\x86\x7b\x44\xe1\x97\x01\x3c\x87\x45\x0e\x22\x87\xea\x97\x44\xe8\xb9\xd5\x87\x11\x33\xc3\xff\xb9\xbd\xd6\x4d\x3e\xdd\x37\x2c\xfb\x6d\xcb\xff\x3b\xed\x3f\x0c\x60\x09\x3b\x0f\x6e\x4d\xd2\x5e\xb2\x4a\x22\xf2\x82\xe1\xeb\xcd\xbc\x9f\xa9\xa2\x93\x07\xc4\x5e\x4e\x05\xce\xa7\x70\x6b\x4b\xea\x5c\xe4\x79\xc9\x3e\xa4\x4c\xe4\x45\x50\x11\x1b\x0a\xee\x82\x6e\xd2\xd4\x7a\xd3\x6c\xbe\x58\x7f\x28\xc9\xcc\x55\x9c\x94\x6a\x87\x4a\xca\xe1\x7f\x99\x9d\x8a\x97\x93\x98\x2c\xc0\x5b\x57\x32\xb4\x1b\xb8\x77\xdc\xcc\xf6\x93\x65\xfe\xf0\xcb\xcc\x6c\x52\xb7\x54\xe1\x01\xa2\xda\xd7\xeb\x4b\x78\xf4\x80\x99\xae\x02\x16\x2d\xcc\xfc\x17\x36\xde\xd2\x2c\x84\x45\x2b\x24\x88\x46\x17\xae\x51\xf3\xa9\x4a\x37\xae\x0d\x56\x45\x8f\x58\xa6\x6b\x55\x45\x70\x1b\x7a\xe7\xc6\x43\x9b\xad\xbf\x72\xfa\xae\xef\xba\x41\xdb\xcc\xde\x03\xda\x30\xf4\xbd\x99\xa8\x3a\xc9\xd4\xad\x19\xe3\x5b\x59\xcc\x86\x4c\x41\x99\x71\xdd\x76\x57\x5f\xb2\x43\xd1\xbd\x6f\xe7\x03\x4b\xbc\x1b\xcc\x52\xac\x27\xcc\x72\xb7\x33\xcc\x52\xac\x3f\xcc\x72\xb4\x4b\x4c\x00\xb7\x57\xcc\x52\xac\x63\xac\xdc\xdd\x5d\x7d\x3d\x9c\xa6\x87\xac\x2c\xeb\xab\xce\xde\x5d\xff\xee\xe6\xf4\x46\x92\x7c\x8f\x39\x41\xb7\x0d\x96\x9d\xd7\xf8\x21\xe6\x90\x9d\x78\xe9\x0c\xbc\x38\x39\xc4\x9a\xa7\xd6\x5d\x81\xa1\x2d\x74\x68\xd5\x82\x3f\xde\x38\xbc\xe6\xa8\xff\x96\xd3\x9c\xf5\xb6\xa3\xfe\xdb\x28\x46\x92\x66\xe8\xc9\xd2\xdd\x67\xdf\x0d\x98\xde\x18\x18\xc2\x27\xfe\xec\xb4\x78\xc8\x9a\x7c\xc2\xff\x3b\x95\xd1\xf4\x79\x53\x5f\xf2\xfa\xb5\x9a\xcc\xca\x3a\xcb\x59\x83\x45\xd3\xa1\x73\xe7\x02\xce\x9d\xfe\xa9\x72\x61\x54\x57\xce\x8c\xfe\x89\xd0\x52\x8f\xe5\xc3\xc0\x81\x98\x01\x2d\x8c\x95\xc6\x98\xe9\x1b\x1f\x66\xc8\x99\xd1\xe9\xfa\xef\x21\x0c\x0d\x3c\xe8\xb9\x01\x9d\xee\x04\xac\x0d\x5c\xe0\xf1\x0d\x0f\x59\x33\x75\x6b\x05\x75\x6b\x65\xe9\xd6\x0a\xea\x96\x1d\xf0\x36\xb0\x01\x47\x40\x3c\xe2\xcd\xe0\xa2\xff\x1e\xa2\xe0\x4c\x2e\xfa\x6f\xa3\xd8\x8c\x97\x3b\x31\x1e\x7a\x79\x23\x1f\x11\xec\x5d\xa6\x92\x75\x5d\x6f\x0c\x7a\x7b\x59\xbd\x70\x2f\x0a\x6e\x5b\xf0\xdc\x4a\x83\xcd\x45\x76\x3f\xf4\xbc\x1a\xbb\x03\x32\x4c\xc4\xf6\x84\x61\x3d\xd6\x69\x3c\x55\xa6\x71\x78\x90\x9b\x4e\x84\xc1\x63\x41\x21\xd6\x87\xd2\xfe\xd8\xe7\x25\x77\x7f\xcd\xe0\x5e\xe3\xf9\xcb\x70\x9c\xef\xc7\xac\xba\x9e\xf7\x7d\x55\x46\x6c\x25\x10\x42\x63\x7b\x0a\xee\x0c\xae\x14\xd8\x93\x24\x64\x50\xeb\x99\xb1\xdb\x20\xf7\x65\x12\xe7\xda\x96\x44\xc3\x8e\x29\x07\xad\xfa\x82\x29\x2c\x98\x75\xca\xba\xea\xa3\x54\x68\xfa\x26\x03\x8a\x91\x1d\x92\x73\x9d\x67\xe5\xf4\x50\xd6\x2d\x9b\xcc\x2e\xd9\x4b\x51\x71\x7d\x9a\xaa\xf4\x2b\xe0\xa3\x38\x7f\x33\x3e\x54\xec\xad\x03\x1f\x2e\x0d\xfb\x5e\xd4\xd7\xd6\xf7\xd8\x06\x56\x57\xec\x09\x8e\x9d\xa7\xc5\x90\xa9\x6a\xcc\x04\x0f\xdd\x2e\xcb\xe1\x0a\xed\x03\x43\x64\xd3\x25\xf3\x6f\x60\x89\x47\x06\x67\x62\x71\xeb\xba\x7d\x20\x95\x0a\x10\x08\x24\xd1\xc8\x60\xc6\xa4\xf4\x23\xce\x5b\x94\xbe\x48\xce\x8e\xd9\xb5\xec\xb0\x3b\x0e\x16\xa1\x5f\xca\x62\xab\xe6\x50\xfb\x50\x4a\x8e\xef\x3f\xfd\x04\x70\xea\x12\x34\xe4\xb5\x8c\xdb\x50\x47\x2f\x4a\xc6\x3d\xed\xe2\xee\x34\xd8\xdb\xe7\x56\x53\xdb\x9b\x1e\xc8\x9b\xca\x03\x34\xd8\xb8\x85\x95\x03\x45\xd7\x92\xdc\xff\x85\x18\x62\x9f\xd5\xa5\x24\xbe\x23\x64\x86\x2d\x5e\x88\x40\xe5\x01\x82\x50\x74\x32\x20\x08\x47\x65\x04\x32\xa0\xf8\x4e\x7a\xd3\xd4\xaf\xd3\x96\x5d\xb2\x26\xeb\xea\xc6\x51\x11\xa9\x14\xff\xed\xbf\xfe\x1f\x3f\x39\xb8\xfb\x6b\x59\xb2\x2e\x02\xf9\x7f\xfd\x3f\x5d\xe4\xbc\x8e\xc0\xfc\x7f\xff\x6f\x17\x91\xef\x22\xb2\xbc\x8d\xe0\xfb\xbf\xff\x3f\x3f\x09\x77\x93\x8c\x19\x31\x12\xbe\xf6\xb3\xe8\xf2\xf2\x66\x3f\x76\x32\x7f\x98\x88\x57\xbd\xe6\x58\x99\xb5\xff\x6d\x4f\xe8\xdc\xc9\xed\xdd\x19\x6b\x2a\x54\x76\x1e\x08\x30\x97\xf9\x14\x5d\x26\xd0\x4e\x19\x44\xa7\x62\x79\x8b\x8c\x48\xb8\x3e\xa5\xc7\x27\x4c\x60\x35\x18\x35\xb9\xb9\xe0\xf0\x8a\x3a\x20\x31\xb1\xa8\x14\x5f\xc4\x32\x2a\xe2\xc8\x00\x0a\x27\xae\xdf\x58\x77\x6f\x79\x89\xc4\xd6\xe7\x8d\xfa\x0a\x6d\x5f\x78\xac\x6b\xe3\xe9\x33\x7e\x4b\xc5\xf1\xa2\x42\x33\x33\x20\xc5\xe1\xe2\x6c\x63\xf8\x46\xf9\x98\x06\x30\xd8\x93\x67\x61\x8d\xda\x69\x84\x35\x14\x14\x92\x19\xbf\x3f\x1f\x9b\x92\x40\x2d\xd6\x6e\x98\x63\x86\x79\x4b\x0a\xc1\x98\xc4\xf4\xb7\xe9\x99\x55\xd7\x09\x00\xd1\xa7\xd2\x2a\xf1\x25\x80\xb5\x7b\xda\xc4\x94\x27\x5e\x10\x9e\x4f\x02\xdc\x51\xd2\xa7\x5d\x26\xce\xf5\x62\x23\x28\x9f\xdf\xf0\xe3\x55\x13\xac\x86\x7d\x69\xae\x32\xe2\x5d\xe2\xfe\xb7\x9e\xc1\x07\x21\x29\x77\x59\xe4\x6d\x2b\x63\x09\xb7\xb0\xaf\xd3\xaf\xcc\xbb\x36\xe0\x46\x22\x97\x45\xdd\x43\x5c\xa4\xd2\xbf\x9b\x48\x37\x6f\xb0\x6d\xf2\x3e\xa0\x75\x83\x6b\xb8\x45\xaf\xe5\x53\x43\xc3\x1b\x4a\x87\xbf\x46\x7f\xaf\xa1\xb4\x9a\x72\xe6\xe6\x21\x80\xea\x25\xc6\x13\xdc\xb8\xa3\x16\x84\xb3\x27\xb1\x05\x0b\xb7\xed\xd6\xc3\x78\x59\xf2\xf2\x04\xbf\x2a\xff\x31\xeb\xbb\x6b\x5a\x16\x6d\x37\x99\x9d\x59\xdb\x66\x2f\x4c\x19\x6d\x67\x23\x30\xb3\x04\x84\x67\x96\x3c\x45\x02\xe2\x90\x5b\x58\x81\x48\x0a\xeb\xd4\xd1\x42\x1e\x86\x51\xdc\x31\x9c\x46\xce\x8b\xef\x45\x8e\xb2\x05\xab\x46\x98\x1a\x15\xae\xf1\xf4\x22\x5b\xf4\x56\xd2\xab\x22\xcf\xbd\x21\xfe\x99\x88\x7f\x7e\x11\xff\xe0\xc6\x55\x3e\xf0\xf2\x3c\x51\xff\x9b\xad\x1f\x3e\x66\x25\xfb\xce\x4a\x79\x33\x4c\xf7\x46\x92\xe9\xfe\xc0\x12\x6d\x73\x1c\xcc\xe2\xda\xd6\x93\x77\xc5\x74\xcf\xba\x57\xc6\x2a\x89\x17\xbb\xe4\xe7\xc0\x9c\xbc\x79\xb3\xd7\xfc\x6a\x7e\xe2\x0e\x5a\xbd\x2f\x4a\x96\x18\x30\x11\x79\x55\x44\xfd\x8b\xf3\x8b\x6d\x55\x45\xfb\x63\x66\x75\xa0\xef\x30\x27\xa5\xe9\xed\x03\x59\xd8\x88\xa8\x55\xd1\x77\x70\x9e\xf3\x90\xfb\xc5\xc4\x36\xcf\x12\x52\x12\x8d\x0f\x1c\x34\xdf\x50\xa8\x11\x67\x44\x3e\x8f\x11\x19\x60\x84\xd6\x20\xd5\xfb\x35\x96\x99\x51\x79\x6f\x2f\x4f\xcc\x96\x89\xd2\x07\x2b\xd7\x88\xd1\x5a\x88\x96\x1b\xae\x04\x9f\xde\xe8\x3d\x67\xca\x4d\x73\x74\x42\x76\x62\x34\x65\xaa\x29\x78\x24\x5b\xc9\xde\x8a\xfd\x30\x58\x9c\x56\x30\x81\xa8\xf6\x8d\x19\xdd\xc6\x22\x32\x2a\xf1\x50\xfc\xb8\x04\x5a\xe9\x57\xf6\xf9\x0c\xf4\x99\x28\x8f\x15\xbe\x5f\x0b\x8e\xd5\x60\xa4\xdb\x80\x4e\x4b\xc3\x0c\x64\x30\x92\x57\x3b\x11\xac\xd2\x8c\x2b\xb9\x22\x5b\xc6\x34\xfe\x30\xf7\x0f\x98\xd9\x11\x68\x9a\xd5\x04\x81\x8b\xc9\x98\x85\xf1\x10\x82\x21\x5e\x06\x02\xa6\x66\x2d\x33\x39\xae\x01\x8c\x14\xcf\x6d\x17\x66\x3e\x80\xcf\x86\x44\x2c\x2e\x9e\xeb\xfc\xcc\x4d\x56\xb2\x6f\xc5\xef\xa3\x87\xe4\x40\x02\x9a\x15\x43\x38\xa8\xbf\x22\xe4\xc2\x28\x55\xde\x21\xcd\xd4\xca\xf3\x86\xa9\x53\x75\x75\x4e\x05\xfb\x8f\xbe\x8d\x0e\x55\x4e\x6f\x71\x28\x08\x6a\x73\xc3\x70\x1d\x6e\x78\x64\x9a\x3c\xb4\x42\xf6\xee\x0c\xdc\x48\xff\x4c\x05\x2b\x1b\x98\x63\x9d\xb3\x01\xb5\x2c\x92\xab\x7e\x0e\x5c\x45\xc1\x58\x0b\x52\xe5\x7b\x81\x68\xb9\x21\x80\x4e\x91\x33\xf3\x56\x8b\x1c\x45\xa6\xaf\xcc\x91\xad\xd3\x93\xd9\x1c\x62\xd3\x61\x43\x5c\x59\x31\x60\x8f\x2b\x25\xc0\xa5\x1f\x47\xb5\xa9\xab\x2c\x1c\x21\xd6\x4f\x93\xe0\xbe\x10\x79\x05\x02\xf3\x15\x88\x3f\xba\xec\x05\xcb\x5c\x20\x14\x3b\x67\x87\xba\x11\x07\x32\xd7\x2a\x67\x4d\xef\x98\x69\x72\x7e\x85\xd6\x20\x3e\x9d\xd6\x40\xb4\x5a\x6b\x10\xef\x85\x7f\x1b\x2e\xb1\x97\x33\x51\x41\x8e\x34\x15\x9e\xe2\x8d\xbc\x68\xb5\xca\xfb\x1f\x80\x4f\x85\x47\xaa\x00\x6d\x1b\x34\x42\x60\x24\xb2\x92\xa6\x82\x08\x0c\xf1\x91\x3a\x93\x61\x99\xae\xcc\xf2\xcd\xe1\x70\x23\xbb\xf7\xb9\x68\x2a\x58\x23\x03\xfc\xd5\xb1\xff\x01\x24\x88\xc8\xd0\xe3\xd3\x31\x3b\x1e\x1c\xc8\x08\x89\x91\x98\x52\x92\x08\x22\xb0\x81\x3e\x3f\x2c\x9e\x85\x91\xd4\xe8\x74\x30\xea\x71\x73\xcc\x8f\x7b\x0c\x38\x46\x66\xf7\x76\x8d\x8f\x0e\x26\x36\xa0\x30\x4f\x97\x8f\x8b\x27\xab\xab\xd0\xe0\xd7\xe3\xfa\xf8\x64\xb1\x13\x4f\x80\x06\x65\x46\xa7\x04\x82\x08\x22\x30\x44\x4f\x37\xab\xcd\x01\x36\x75\x51\x1d\xeb\x38\x81\xc5\x13\x9b\x9f\x14\x18\x12\xb9\x47\x60\x3a\x46\xf8\xf8\x78\xcc\x8f\x8f\x18\x70\x8c\x6e\xb8\x01\xc6\x3e\x3a\x98\x6e\x00\x0a\xf3\xc7\xd5\x62\x0e\x15\xd5\x13\x9f\x7c\x3c\x66\xd6\x08\xd2\x8f\x31\x86\x6d\x87\x1b\xdc\xec\xa3\x83\x59\x0f\x40\xe1\x71\xb1\x64\xe9\xde\x1a\xce\x44\x6c\x74\xdf\xe0\x56\x93\xab\x17\x05\x83\x72\x23\x71\xd5\x1e\x32\x88\xd8\x90\xc0\x53\xb6\x5c\x2c\x06\xb1\xb1\x43\x15\x32\xbe\x00\x5e\xe1\x75\x9f\xd1\xda\x21\xc1\x4d\xe8\x39\x04\xd8\x48\x42\x9c\x48\x7c\x6f\xd1\x14\x58\xdf\x56\xa0\x57\xeb\xe0\xf0\x52\xb9\x75\x26\x8d\x5f\xd0\x56\x73\xae\xcb\xd0\x57\x5d\x8c\x12\x79\x46\x8c\x10\x44\x9f\x4f\xb2\xf7\x85\x61\x03\x9b\xaf\xc1\xcd\xe5\x73\x3b\x26\x65\xbd\xbf\x67\x7c\xba\x50\x61\x66\x1f\x0e\x9c\x9d\xff\xc9\x0d\x52\x91\x1b\xe3\xbe\x53\x18\xbe\xb9\x49\x1c\xaf\xe8\xe0\x9c\x53\x91\xe7\x7d\x07\xab\xde\x3c\x16\x6f\x2c\x77\x37\xe0\x0d\x67\x1f\xee\x27\x39\xfb\xf2\xee\xb6\x7e\x28\x74\xec\x69\xf3\xa0\xc3\x38\x78\xbc\x9c\xfc\x5d\x2e\xcd\xe4\x4a\x20\x4d\xec\xe0\x41\xfe\xce\xd4\x3c\x4d\xbf\x9f\x92\x69\x32\xdf\xa4\x97\xb7\x87\x1d\x0c\x3a\xa2\xc2\xe9\xf9\x89\xe5\x88\x6d\x88\x08\xe1\x74\x90\x13\x26\xdc\x8a\xcb\xa6\x32\x9b\xa5\x17\xbe\x67\x31\xc4\xad\xdc\x9c\xc0\x91\xbf\x6a\x6c\xe6\x57\xc5\x63\xc2\x74\x65\x6a\x23\xbd\xaf\xae\xad\x5e\xcd\x40\xad\x1f\x98\xfc\x17\x99\x1e\x8e\x07\x6a\x1a\x6d\xa3\xa2\x35\xcd\x4f\xde\x90\x4d\x32\x78\x4b\xa7\x29\xc3\x0f\x9e\x3e\x97\xb8\x2c\x14\x08\x8a\x88\x8f\xc7\x75\x3a\x55\x27\x82\x3b\x4d\x38\x19\xe1\x69\x7e\x8a\x0f\xf3\x04\x0c\xe3\x63\x3d\x0d\xb4\x1f\x1d\xf0\x69\xb1\xfa\xa1\x51\x9f\x16\xaf\x1f\x19\xfa\x39\x18\x15\x24\x95\xb8\xf3\x14\xa9\xdf\xb4\x58\xe6\xdc\x24\xce\x0f\xcd\x27\xe6\x87\x7e\x6a\x1d\x15\xad\xe8\x8a\x17\x11\xe6\xa4\xa7\xc8\x45\x8a\x27\x56\x34\x24\xea\xa7\xbd\xc9\xac\xca\xbe\xef\xb3\x46\xfd\x1b\xde\x01\xb0\x6a\x04\xee\xc2\xd2\x53\xba\xed\x3c\xac\x3d\x0f\x1c\xad\x61\x3f\x4d\xd1\xdb\x31\x64\x64\x83\x93\x50\x1e\x9c\xb0\x3a\x7d\xe4\xb9\x28\x6c\xc8\x88\x5d\xf5\x85\x55\xc0\x62\x1f\x2c\x56\xfa\x61\x19\xff\xe9\xcc\x3c\xb5\xea\xcf\x7d\x26\x7a\x6b\xd4\x9a\x7c\x8d\xfe\xff\x90\x9d\x3a\xed\xb2\xbd\x48\x47\x32\x04\x58\xea\x20\xcf\xf6\xd0\xd4\x65\xd9\xa3\xf0\x78\x49\x85\x73\x33\xc7\x94\xbc\x6c\x8c\xe5\xe9\x84\x5a\xe3\xa8\x51\xa2\x44\xd8\x37\xfd\x5c\xaf\xfe\x12\x11\xa1\x5e\xd8\x5f\xd5\x5f\xe6\x31\xbd\x4e\x24\x19\xcd\x65\x66\xbc\x94\x14\x8f\xa5\x6e\xd4\xf8\x25\xcc\x4c\x11\xa3\x19\x41\x34\x7a\x27\x78\xd1\xff\xd8\xdb\x48\x23\xaa\x00\xf2\x33\x5b\xa9\xf5\xbc\x5e\xd8\x3c\xed\xad\xf2\xc3\x8d\x64\xc6\xee\x68\x63\x1b\x27\xd4\xc2\xec\x9e\xf6\x75\x90\x42\x5c\x38\x61\x1e\x2c\x88\x84\x10\x45\xe9\xaa\x43\x41\x05\x15\x45\x61\x73\x9b\x3d\xba\x2d\x5d\xac\x50\x3d\x39\xc6\xf8\xf6\x44\xd0\xbe\x48\x5f\x6d\x75\xf0\xf7\xa9\x29\xc0\x98\x66\x09\xd5\xec\x1e\x13\xe3\x28\xb2\xf2\x95\x47\xf4\x96\x6f\x68\x92\x74\x94\x82\x25\x44\x37\x46\xed\xbd\x9b\xe4\x47\xa4\x16\xb0\x90\x22\xad\x3a\x02\x8b\x36\xf9\x48\x16\xb8\xe6\x86\xb0\xdc\x21\x82\x89\x17\x31\x44\x82\x68\xe4\x10\x49\xd3\xf4\xce\x56\xc5\x35\xa6\x27\x32\xd6\x92\x43\x4e\x71\x96\xdc\x8f\x13\x6a\xd8\x48\x4b\x1e\x40\x0a\x71\xb9\xc7\x92\x07\x28\x04\x2c\x39\xc4\x8e\xb5\xe4\x21\xac\x50\x3d\xa3\x2d\x79\x10\xed\xd3\x6a\xea\xb3\xe1\x6e\x6f\x52\x36\x3c\xd4\x20\xa1\x3a\x8d\x36\x28\x11\x06\x3c\xd8\x49\xe4\x70\x24\x89\xdc\x61\xbd\x5d\x3b\x6c\x92\x0f\xe4\x7b\x34\x8f\x02\x2d\xa4\x48\xeb\x8d\xc0\xa2\x8d\x3d\x92\x05\xae\xad\x21\x2c\x77\x58\x60\xe2\x45\x0c\x8b\x20\x5a\x20\x69\xc5\x9d\x0d\x8b\x6b\x4c\x4f\x64\xac\x01\x87\x9c\xe2\x0c\xb8\x1f\x27\xd4\xb6\x91\x06\x3c\x80\x14\xe2\x72\x8f\x01\x0f\x50\x08\x18\x70\x88\x1d\x6b\xc0\x43\x58\xa1\x7a\x46\x1b\xf0\x20\xda\x57\x68\xaa\xcf\x86\xbb\x1d\x4a\xd9\xf0\x50\x9b\x84\xaa\x35\xda\xac\x44\xd8\xf0\x60\x3f\x91\x23\x92\x24\x72\x8f\x07\xee\x58\x63\x93\x7c\x7c\xbe\x2d\x88\x13\x69\xc1\x5d\x50\x7c\xb6\x1c\xcb\x03\xd7\xd7\x00\x92\x3b\x2e\x10\xf1\x22\x86\x45\x08\x8b\x1c\x15\xf3\x6c\xb1\x59\x2e\xef\x6e\x58\x62\xce\x17\x64\xc6\x1a\x71\xc0\x2b\xce\x86\x7b\x51\x02\x8d\x1b\x69\xc1\xfd\x38\x01\x1e\xf7\xd8\x6f\x3f\x81\x80\xf9\x06\xc8\xb1\xd6\x3b\x80\x14\xa8\x63\xb4\xed\x0e\x61\x7d\x8d\x92\xfa\x8c\xb7\xd3\x97\x94\xed\x0e\xb4\x48\xa0\x56\x77\xd8\x93\x08\xdb\x1d\xea\x25\xdf\x50\xa4\xc8\xdc\x61\xbc\x5d\x3b\x0c\xa9\x8b\x08\x93\x90\xc5\x30\x2b\x26\xc2\x97\xc6\x60\x88\x08\xad\x31\x18\x3a\x0e\x6d\x0c\x92\x0e\x50\x1a\x83\xa4\x63\x83\xc6\x1a\x4d\xb8\x50\x8a\x78\xa9\x69\x44\xe5\x82\x4d\x11\xb3\x62\x0c\xb3\xc1\xc7\x7d\x44\xdb\x3b\x16\x06\x17\x32\xc2\xc8\x44\x20\x92\x76\x66\x31\xcf\xd6\x8f\x8b\xdd\x27\x36\x92\x6c\xee\x71\xb3\x58\x08\x2b\xdc\x3c\x91\x73\x59\x10\x2d\xcc\xe9\x9e\x19\x2d\x48\x23\x30\xa9\xd9\xf8\xb1\xf3\x5a\x18\x2f\x5c\xdf\xe8\xd9\x2d\x02\x71\x84\xe2\x8d\xd0\x8e\x50\x07\x53\x73\x5c\xb8\x75\xc2\xd5\xbb\xc3\x6a\x44\xcc\x74\x11\xfd\x36\xc2\x84\x7e\x6a\xb2\x73\x82\x9b\x3f\xac\x69\x28\x2e\x58\x37\x7a\xea\xf2\xcf\x72\x31\xed\x1d\x60\x40\x2d\xab\xfd\x13\x2a\xb2\x7c\x77\x64\x8b\x5a\xbd\xfb\xb1\x3c\xbb\xaf\xeb\xd5\x71\xff\x19\xcb\x0c\x58\xc7\x6e\x10\x79\x50\x02\x4d\x12\xbd\x3d\xe4\xc3\x09\xf0\xb8\x6f\x73\xc8\x47\x20\xb8\x37\x54\x8d\x5f\x5c\x04\x90\x02\x75\x1c\xb1\x31\xe4\xc7\x1a\xa1\x5a\xb1\x2a\xe0\xed\x48\xca\xea\x06\x9a\x23\x50\xa5\xb1\xe3\x3f\x6a\x4b\xc8\xdf\x3f\x31\x96\x16\xd0\xb8\xc3\xcc\xba\x16\xd3\xa4\x4e\xdc\xa6\xf0\x9a\xd9\xc0\x9a\xc2\xbf\xfc\x88\x69\xe6\x00\x03\x5c\x49\x43\x2b\x1d\x67\x2c\x20\xb2\x45\x8c\x85\x10\xd6\x0f\x34\xb3\x80\x75\x9c\x99\xf5\xa2\x04\x9a\x24\xd2\xcc\xfa\x71\x02\x3c\xee\x31\xb3\x7e\x02\x01\x33\x0b\x90\x63\xcd\x6c\x00\x29\x50\xc7\x68\x33\x1b\xc2\xba\xcf\xcc\x7a\x55\xc0\xdb\x91\x94\x99\x0d\x34\x47\xa0\x4a\x63\xc7\x7f\x84\x99\x0d\xf5\x4f\x8c\x99\x05\x34\xbe\xdc\xcc\x8e\x7a\x27\xc2\x41\x8b\x34\xb6\x28\x74\x4c\x7b\x87\xd9\xe0\x0a\x1b\xb1\x87\xe3\x0c\x0d\x5c\xc8\x88\xd1\x11\x81\x48\xaf\x01\x9f\x9f\x0f\xcb\x4f\x6d\x3e\xd8\xdc\xe3\xcc\x6f\x08\x2b\xdc\x3c\x91\x46\x38\x88\x16\xe6\x74\x8f\x29\x0e\xd2\x08\x58\x63\x1b\x3f\xd6\x20\x87\xf1\xc2\xf5\x8d\x36\xcb\x11\x88\x23\x14\x6f\x84\x76\x84\x3a\x98\xb2\xcf\xe1\xd6\x09\x57\xef\x0e\xab\x11\x61\xa8\x23\xfa\x2d\xc6\x56\xdb\x64\xee\xd9\x7c\x70\xcc\x2e\x88\x83\x1c\xf3\x30\x8f\x83\x16\x69\xae\x51\xe8\x98\x86\x0f\xb3\xc1\x15\x39\x62\xf7\xdc\x8d\xea\x45\x85\x8c\x89\xeb\x0d\x23\xd2\x91\xbd\xcf\x4f\x73\x18\x87\x34\x3a\x7c\xdc\xe2\x1e\x19\x40\x1e\xc0\x0a\x37\x4f\x6c\x10\x79\x08\x2d\xcc\xe9\xae\x40\xf2\x10\x8d\x50\x28\xb9\x85\x1f\x1d\x4c\x1e\xc4\x0b\xd7\x37\x3e\xa0\x3c\x8c\x38\x42\xf1\x46\x68\x47\xa8\x83\x29\x73\x1d\x6e\x9d\x70\xf5\xee\xb0\x1a\x31\x61\xe5\xe1\x7e\x8b\x31\xd7\x36\x99\x7b\xa2\x5a\x1c\xb3\xeb\x1e\x8c\xc6\xdd\xd8\xb7\xb1\x22\x8d\x35\x06\x1c\xd3\xea\x41\x26\xb8\x12\x87\x8f\x7a\x91\xb8\x01\x44\xc2\xa8\xc8\x81\x10\x1e\x39\x5c\xf6\xab\x65\xb6\x38\x7e\xc6\x4e\x5b\xcc\x63\x03\x53\xbc\x48\xc1\xa6\x89\x0e\x4e\xf1\x63\x05\xf9\xdc\x17\xa0\xe2\x27\x11\x0c\x51\x01\xe8\xf1\x41\x2a\x01\xb4\x60\x5d\x47\x04\xaa\x84\xf0\x46\xa8\x5b\xbc\x52\x04\x3a\x96\xb2\xcd\xc1\x86\x09\x56\x6d\xbc\x8d\x88\x0a\x57\x09\xf5\x57\x8c\x5d\xb6\xa8\xdc\x61\x96\x5d\xfb\xaa\xe8\xff\xca\x93\x1c\x66\x45\x45\xa4\x89\x07\x77\x8d\x91\x9b\x9f\x66\xca\x79\x29\x31\xcf\x94\xcf\x33\x36\xdf\xe2\x92\x37\x9b\x75\xe5\x09\x09\xe4\xad\xda\x89\xf3\xbd\xab\x2f\x2a\xd1\x34\x9a\xc2\x20\xd5\x99\x32\x96\x29\x45\xf5\x36\xa4\xbe\xc5\x01\xc8\x0a\x4c\x47\xd4\xa0\x97\x54\xa4\xa2\x3d\x75\xe7\x92\x93\x94\x9d\x35\x94\x9b\x59\x18\x65\x7b\x12\xd0\x52\x72\x2b\x91\xb5\xc2\x01\x53\x82\x6a\x34\x7e\xb5\x37\xdc\xa5\x56\x02\x18\xa7\x83\xc1\x4d\xe1\x1b\x78\x64\xe0\xfb\xab\xf3\x20\x8c\xfe\xfb\x5d\xdf\x7c\x57\xb2\x5d\x9b\x7e\xea\x27\xb2\x64\x80\x54\xcf\xe4\xa5\x62\x75\x5d\x1f\x79\xe1\x58\x24\x41\x07\xbc\xc4\x33\x8c\x63\x9e\xd9\x34\x52\x4d\x73\xa2\xfc\x62\xff\x3a\xfd\x39\x99\x26\x4f\x97\xb7\x87\xf8\xf7\xc6\xc4\x77\x0e\x3b\xcd\xaf\x32\x7f\xdf\xd3\xe6\xdc\x9a\x05\x97\xa6\xbe\xb0\xa6\x7b\xdf\xda\x22\x4e\xe4\x43\x7c\x13\x4d\xdd\x44\xeb\x8a\x73\xaf\x02\xc7\x6b\x25\xf2\x11\xb0\xac\x65\xd3\xfa\xda\x81\x14\x0d\x6e\x43\x18\x4f\x97\xcf\x1f\xb8\x66\x1a\xb5\xdb\x5c\xde\x1e\x02\x48\x0b\x07\x69\x1e\x46\x5a\x5a\x48\xbf\x24\x2b\x17\xc9\x9b\x1b\x23\x9d\xf4\x3f\xb3\x74\x6d\x63\x19\x53\x34\x52\x3d\x37\x6f\xc8\x3f\x7d\x5b\x5f\xde\xac\x2c\x21\xd1\x24\x17\x0f\x37\xf5\x38\x62\x1a\x8d\xb4\x24\xe4\x98\x9a\x82\x4c\x2d\x49\x9c\xec\xfd\x1f\xd8\x8c\x27\x82\x2e\xa4\x35\x47\x13\xd4\x93\xe9\xe8\x7d\xc9\xe8\x29\xaf\x00\xf3\xa6\x32\xc2\x59\xc9\x5c\x6f\x24\x18\xfc\x2e\xb6\xe4\x41\x4d\xe9\x24\x55\x00\x8c\xa7\x2d\x37\x33\x9b\xa8\x7c\xbf\x94\x5b\x76\x33\x9e\x47\xb3\x2a\xcb\xde\x2e\x19\x7f\x29\x96\x4c\xa8\xe0\xa0\x74\xd9\x9e\x4c\x73\x61\x3e\x60\x86\x65\x4c\x80\xa6\x9c\x0f\x11\xd1\x39\xd6\xc8\x32\x78\xb9\x8e\x9a\x59\x4a\x35\x36\xf2\xcc\x9a\x4c\x5a\x41\x37\xbf\xc3\xd0\x4a\x86\xd1\x76\xef\x25\xdb\xf2\x8a\x5a\x34\xa5\x89\x1e\x12\x74\xc9\xf3\x16\x5f\x7d\x97\x66\x7d\x41\x06\x60\x6f\x2f\xf0\x41\x00\x1f\x41\x58\x88\x27\x97\x2c\x47\xe9\xe6\x3e\xd7\x10\xfb\x24\x84\xed\x72\x01\x1d\x05\x69\x70\xad\xcc\xca\x8d\x1a\x7a\x80\xcc\x3d\xcf\x20\xf0\x3f\xe8\x57\x10\xbc\x89\xc7\xe7\xe9\x62\x69\xac\xe4\x4c\x67\xcf\x7a\xcc\x04\x5d\xc0\x02\x9b\xd3\x3b\x00\xb0\xfe\xc1\x67\xcd\x4c\xa3\x16\xf1\x0c\xd2\xd3\xe5\x2d\xe9\xe7\x2f\xfa\x09\x8f\xe1\xed\x07\x83\xf4\xcc\xcd\x85\x06\x2a\x65\xfb\x77\xe2\xf9\x37\xd4\xb9\x14\x45\x9f\x76\x31\x25\x99\x90\xa3\x29\xc0\xbe\xca\xdd\x94\x4c\xe5\xfb\x07\x08\x40\x62\x36\x9a\xa7\xfa\x00\x2e\x98\x16\x86\xcc\x84\x24\x2d\x9d\x95\x03\x8e\x76\x87\xa5\xfc\x63\x9d\x62\x0b\xcd\x72\x8d\x47\x6d\x74\x4c\x8c\x95\xdd\x04\x6b\x2c\xb1\x80\x0b\x3a\xd5\x9e\x4c\x39\x66\xc7\x18\x86\xf9\x53\x5b\x11\xd1\x74\x9c\xe7\x8d\x22\x08\x46\xec\x14\x90\xe0\xee\x66\x04\x0a\x4a\x6f\x77\x90\xe0\x11\x73\xdd\xbf\x2a\xce\x97\xba\xe9\xb2\xaa\x0b\xb5\x39\xbe\x9e\x1e\xf7\x50\xce\x5d\x2c\xfc\x3b\xa9\x3e\x17\x49\xae\xa6\x22\x1d\xc5\x58\x3b\xed\x7a\x4b\x88\xa6\xd3\xd0\xfc\x41\x2b\x64\x6f\x63\xf0\x82\xa5\xd3\x3b\x5f\x72\xa7\x77\xc8\xe1\xf7\x8d\x67\xec\x9c\x4c\xf9\x3f\x0f\x71\x1c\xb4\x8c\x91\x79\xc6\x86\xdc\x5c\xc9\x5a\xe6\x5e\xb5\x72\x91\xee\xcc\xe7\xb7\xa0\x25\xee\x67\xa6\x27\x74\x62\x1a\x5e\xe0\x42\x3b\xd6\x11\xd7\xf1\xdc\xa8\x41\xe9\xbc\x75\x06\x27\xea\x00\x9b\xbe\x68\x5f\xbf\xb1\x7c\x34\x3f\x8d\xa9\x97\x3c\x73\xfb\x71\x4f\xbe\xd4\x47\xd7\x36\xe9\xc3\x07\xbd\xbb\x65\xf6\x8d\xf4\x0a\xc1\x1b\x71\xa0\x43\xd2\x21\x71\x64\x42\x3c\xfb\x2b\x9e\xd2\x75\xdf\x1d\xf5\xad\xd3\xb7\x70\xdd\x45\x2e\xe0\xc5\xfc\xc0\x39\x18\xaf\x0f\x4c\x67\x4b\x9e\x6b\x57\x39\x77\xf3\x5e\x5f\x55\xb6\x4a\xe8\xee\x90\x69\xe8\x3e\xe0\x5c\xe2\x49\xd8\x07\x72\xbf\x01\x1d\x63\x95\xfb\x00\xa2\x7a\xce\x85\xde\x16\x19\x46\x8c\xef\xe9\xb5\xaf\x4f\x77\xe7\x3a\x79\xf8\x50\x02\x0e\x2f\xf2\xc2\x9a\xf3\x8c\x5d\x4a\x26\x0f\x75\x5e\xad\x8b\xf1\xe3\xe1\x5b\x6d\xd8\xdb\xc6\x5e\x6b\x8e\xbc\xc7\x16\xc0\xb8\x6b\x8a\xf9\xf2\xb9\xc4\x1d\xf8\x8e\xc5\x44\x2c\x65\x4c\x8f\x7a\x1f\xe5\x83\x43\x5a\x6f\xaf\xa0\x03\x5a\x6f\x22\xf5\xfd\x9a\xfc\x92\x7c\x9b\xf6\x6e\xdb\x03\x6e\x83\xf8\xfe\xca\xb8\x1d\x38\x67\xc3\x0d\x6d\x1c\xf1\x72\x0d\xf2\xa8\xa3\xb5\xba\xb3\x1f\x04\x55\x4b\x2e\x75\xc4\x90\xa0\xfb\xb5\xc6\xda\x0c\x02\x80\xb7\x72\xa6\xe2\x85\x12\x9a\xa6\xe9\xae\x62\x24\xb9\x71\x02\x96\x45\x92\x24\x96\x28\x39\x6b\x7f\xeb\xea\x0b\xbe\x5c\x90\x85\x9f\x5f\x2f\x29\x42\xc1\x15\x93\x04\xfc\xb2\x35\x93\x62\x1c\xd8\xaa\xd7\x70\xa3\x57\x27\x36\xa2\xb5\x3e\x09\x6e\xb9\x41\xe7\xd8\x4a\x45\x47\x60\x8b\x34\xa2\xdc\xb8\x3c\x50\x94\x4c\x98\x40\x62\xf3\x3b\x97\x26\x51\x67\xa2\xa4\xb1\xfa\x10\xcf\xfc\x24\xf0\x49\x46\xbe\x07\x91\xdd\x86\x31\xbc\x1d\x7a\x3f\x99\xcd\xdb\x84\xef\x86\x17\xd5\xb4\xbe\x76\x1f\xc6\x33\xf2\xd6\x7b\x50\x6a\x0f\x65\xaa\x16\x65\x03\xe4\xcc\xf3\xa6\x0e\x84\xa2\x9f\xd5\x81\x70\xd4\xcb\x3a\x03\x94\xf5\x24\x7e\x8b\x3e\xdf\x16\xf3\x4a\xb1\xf1\x16\x96\x4a\x74\xfd\x85\x2f\xf0\x63\x29\x8a\x6d\xc7\x0e\xd9\x6c\xc4\xdf\x72\x05\x5b\x5c\xe6\x33\xbe\x2a\x31\x34\x5f\x0b\x50\xfb\xd8\x70\x1b\x91\x3b\x65\x72\xdf\x14\x6c\xe2\x61\xc5\xce\xa1\x92\x93\xec\xdd\xe8\x2a\xe7\xad\xab\xb5\xb3\xc5\xc7\x3f\x11\xfd\xa1\xb6\xea\xc4\x96\x2f\xda\x3b\x15\x2b\x45\x72\xf8\xa4\xa8\x2e\xd7\xee\xcf\xdd\xfb\x85\xfd\xdd\xe1\xc4\x0e\xbf\xed\xeb\xb7\xbf\x4c\x24\x04\x7f\xc9\xda\x7e\xa9\x11\x2a\x91\xee\x5e\x73\x29\x4d\x14\xf3\x04\xe5\xfd\xda\x00\x29\xdf\x7a\x70\x55\x66\x73\x4b\x7f\x08\x8e\xaa\x08\xe3\xc6\x57\x07\x04\x0e\xc2\xa5\x57\x4a\x82\x8b\x2a\xc2\xb8\xf4\x65\x18\x17\xfe\xdd\xe5\xa2\x34\x9d\xe0\x64\x16\x63\xdc\x54\x39\xc6\x51\x97\x71\xc4\x9b\x4e\xd2\x8f\xf6\xe0\x9f\xf3\xa2\xed\x57\x68\xf9\x5f\x9c\xb6\x21\x8a\xfa\x0a\x11\x45\x8a\xf3\x50\xac\x0e\x61\xab\xba\x57\xc7\xb2\x7e\x65\xf9\xc7\x9d\x26\x01\x86\x2d\xa8\xa7\xe2\x86\x74\xee\xf2\x25\x0e\xbb\x83\xe5\xbe\x90\xdd\x23\xee\x67\xdd\x6c\xd2\x53\x06\xec\xf6\xeb\xfe\xc7\x7e\x11\x2f\x4e\x99\x3c\xbd\x2f\xbb\x08\x7b\x3c\xc8\xa5\x4e\x29\x97\x4f\x05\xf4\x89\x8a\x36\x86\x45\xd5\xb2\x2e\x21\x9f\xe1\x5f\x3c\x38\x8c\xbf\x44\x0f\x02\xc7\x10\xce\x47\x68\xbc\x65\xa9\x7c\xe5\x4f\x39\xf0\xb3\xf5\x47\x9c\xea\xb8\x6f\x08\xda\x86\x95\x7f\xc3\x96\x61\x88\x8d\x91\xa7\xfa\xf4\x7d\x1f\xdf\x5b\x50\x47\xd1\xb3\xbd\xa1\x3d\xb1\xac\x17\x41\x78\x1a\x7a\x45\xa4\x9e\x65\x9c\x64\xa6\xc5\x96\xdf\xf8\x43\x84\xee\x77\xda\xb3\xc1\x86\xfc\x0d\xea\x34\xb2\x08\xfa\x70\x9c\x04\xbe\xe2\xef\x5b\x64\xcb\x9b\x25\xea\x05\x5a\xd3\x25\x82\xe8\x36\xf9\xa4\x2c\x22\x8d\x00\x7d\x52\x37\xe6\x4d\x17\xb4\x76\x68\x5a\x7b\xcf\x96\x89\x74\x47\x3e\x50\x39\x45\xe1\xc2\xd1\x4f\x59\xb0\x04\x0e\x63\xe0\x21\x6f\xe8\xe2\x89\xe9\x9c\xe5\x89\x87\xef\x3c\x0a\x89\x57\x9d\x7a\x23\xc8\x95\x9f\xa4\x43\xd5\x4b\xaf\x63\x47\x89\xea\x62\x18\xf4\x1d\x81\x5c\x68\xb4\x56\x7a\xc3\x4a\x89\x29\xc7\xa0\xf3\x76\x2b\xff\x1a\xfb\x18\xa7\x31\x0e\x27\xf6\x98\x16\x7f\xf2\x40\xa6\xc8\x4d\x63\xe2\x31\x54\xb0\x6d\x89\x3c\xef\x60\x1a\x03\xe3\x25\x53\x4b\x20\xac\xa8\x17\xce\xfc\x8e\x3f\x64\x6f\x31\x92\xf4\xdc\x87\xea\xed\x57\xc6\xd4\x13\x19\xc6\x5a\x84\x7b\xd9\xfc\xc3\xab\x3c\xa8\x4a\x53\xcb\xeb\x5e\xac\xd1\x47\x6b\x8d\xd6\x74\x5e\x7a\xee\xbb\x15\x86\x99\x81\xed\x3c\xd2\x63\x36\xa9\x26\x59\xb0\x97\xa0\x0a\x4c\xe7\x97\x37\x20\x29\xa4\x46\x06\x33\xc0\x38\x1a\xc7\x9d\xe8\x29\x60\xef\xfa\xc2\x32\x69\xf4\x1d\x77\x41\x2b\x02\xb6\x7c\x82\xdd\xe2\x5d\xe1\x21\x0f\xb9\x98\x9d\xc1\xab\x78\x2d\x07\x7b\x30\x31\x3f\xf1\x17\x99\x91\xd9\x15\x08\xf8\xab\x7a\xee\xda\x63\x7a\xcd\x68\x4f\x03\x95\x5f\x1e\x68\xb2\xcb\x45\x45\xcf\x80\x69\x05\x80\xc1\x1e\xe0\xbb\xcc\xe8\x9c\x0c\xdb\xdf\x42\x4f\xcc\x65\x11\x6c\x72\x30\x43\xbb\x73\xb3\x15\x80\xf8\x61\x12\xc2\x9f\xec\x1a\xc6\xca\xea\xa2\x57\xa7\x73\x7b\x69\x8a\x2d\xef\x76\xdf\x59\xd3\x15\x87\xac\x94\x5f\xbb\xfa\xa2\x1a\x90\x9d\xa1\xfb\x64\xca\x91\xcc\x8e\x99\x61\x03\x8b\xea\xc4\x9a\xa2\x03\xec\xe4\xb7\x0f\xf8\x70\x0b\x3f\x08\x9f\x1e\x7a\x97\xfe\x2a\x97\xb2\xaa\xc8\x59\xe3\x4e\xcf\xf5\xef\xd8\xd7\xd6\xfd\xe8\x7c\x08\xc7\x94\xc2\xcd\x16\xff\x53\x86\xf6\xcb\x77\x76\x48\x29\xe6\x00\x72\x2b\x19\x39\x21\x48\x53\x72\xe7\x8e\x0a\x62\x61\xdc\x5e\x95\x4c\xca\xc2\xde\xfa\x95\x9f\x0d\xc5\xcd\x70\xdb\x03\x75\x5f\x59\x0f\x39\x82\xe9\x8d\x17\x8b\x0a\x9c\x9d\x22\x43\xb5\xfa\x2a\xb9\x11\xc1\xe8\x03\x4a\xb4\x4d\x42\x0c\x10\x37\x04\xde\x37\x0f\xb1\x57\xc4\x0d\x32\x62\xbb\x9d\xf4\x1a\x48\xec\x59\x3f\x88\xc0\x1c\x0a\x37\x4e\x6c\xc8\x41\x85\xc0\x4e\xfb\x00\x07\x9c\xac\x6b\x49\xb8\x67\x03\xac\xf0\x7f\x10\x40\x25\xfb\x87\xbd\xba\x70\x0f\x48\xbd\xfb\x68\x6a\x5a\x77\xe8\xc0\x65\x32\xa6\x1c\x36\x8a\xad\x9c\xbe\x93\x41\x9f\x96\x79\xc3\x2f\x14\xcb\xe3\xb5\x2c\xb9\xd2\xf5\x43\xc5\x73\x40\xaa\xe0\xbb\xfa\xe5\xa5\x34\xc6\x0c\x2a\x00\xa2\xdf\x83\x62\xc3\xe1\x9b\x62\xef\x54\xd9\xcc\x42\x87\x72\xe8\x1e\x84\x3e\x6a\x74\xe8\x95\xc5\x2f\x65\x61\x1d\xe1\x5c\xde\x10\x30\x53\x63\x87\x2a\x1b\x9d\x9e\x26\xfc\x0a\x05\x86\x3a\xa8\xb0\x83\x29\xae\x5d\x70\x7c\x04\x33\xd0\xf9\x71\x6b\x67\x5d\xfb\xf9\xc7\xec\xc4\x9a\x3a\x51\xa3\x78\x62\x33\xbc\x96\x96\x4b\x27\x16\xb6\x0a\x8a\xda\x77\x57\xe5\xf4\x8e\xbb\x82\xa0\xf6\xda\xc5\xa3\x7d\xd0\x3c\x0b\xad\xdb\x67\x6d\xd1\xaa\x18\x63\xd4\xe7\xd1\xee\x96\x0c\x2d\x16\xb4\x84\x40\xf5\xbe\x28\xd9\xaf\xf2\x53\xff\xa5\xca\x9a\xa6\x7e\x1d\x6c\x5f\x00\xbc\x1f\x11\x86\xa1\x34\xdd\x2b\x2f\x5e\x77\x6a\x18\x9b\xfe\xcb\x35\x6b\x3a\xd6\xb4\x0e\x85\xc7\x75\x90\xc0\x6b\x3d\xed\x4e\x45\x93\xbb\xc8\x9b\xcd\x6c\xb3\xd9\x6c\x42\x14\x4e\x59\x79\x74\x70\xd7\x41\xc9\xeb\x8a\x09\xc6\x0e\xee\x72\x39\x5b\x2e\x97\xcb\x18\x02\xb2\xe2\x0e\x89\x45\xb0\xde\x3d\xf6\xb1\x38\x76\x27\x17\x37\xdc\xe8\xaf\xb5\xc0\x75\xdb\x6c\x15\xd9\x63\x04\xfa\x26\x88\x7e\xac\xaf\x0d\x85\xfd\x14\x6e\xf4\xe3\xb1\x65\x9d\xad\x35\xa6\x51\x0a\x6b\x8c\xa2\x31\x28\x8e\x89\x1f\xa9\x34\x92\x08\xd7\x1d\x13\x3d\x42\x6f\x04\xe6\xa0\x3e\x26\x7a\xac\xea\x0c\x34\x94\x06\x99\x54\x22\xb4\x67\x20\x20\x94\x08\xa0\x47\x77\xc3\xa0\x47\x26\x7e\x58\x87\x40\x37\x22\x14\xc2\x6a\x24\x29\x98\xda\x64\x12\x08\x6b\xd2\xdc\xd5\x3e\xde\xf4\xe2\xff\x22\xd9\xcf\x21\xd3\x11\x04\x16\xae\xb1\x14\x8a\xc7\xff\xef\x31\x92\xff\x02\xf0\x1f\x45\x61\x79\x8f\xcd\x11\x5c\x97\x23\x95\x6d\x45\x59\xc8\x51\x6d\xbd\xc2\x06\x4a\x1c\x85\xb5\x6b\xe6\xe6\xe3\x1b\x7b\x0d\x95\x7c\x0c\x85\xcd\x3d\xf3\x8b\xe0\xba\x19\x69\x5e\x1e\x5d\x56\x77\x28\xf6\x23\xe4\x3a\x86\xc2\x13\x35\x0f\x8f\x6a\xec\x27\xcc\x28\xc7\x51\x78\xbe\xc3\x8b\x90\x5c\x9f\x47\x4e\x25\xf3\xd4\xb5\x22\x77\xa8\xf6\x3c\x85\x76\x64\x0c\x89\xb9\x6b\xc8\x9e\xef\x50\xee\x39\x34\x65\xa3\x48\xcc\x11\x63\x16\xf6\xfc\x14\x63\xcb\x86\x51\x0f\xe8\x3b\x07\x40\xb6\xab\x2a\x59\xb8\x1e\xab\x72\x4f\x1d\x00\x44\x56\xd7\x25\xa5\xb0\x0c\xe5\x80\x6e\x28\x85\x60\x3b\x16\xca\xf5\xa4\xe0\xd7\x50\x2a\xed\x2f\x50\xf0\xb6\xeb\x60\xb9\x98\x14\xda\x62\xed\x60\xf0\xf9\x94\x84\x4f\x9d\x7a\x8b\xf9\x97\x42\x58\x61\xad\xeb\x47\xd9\x40\x14\x63\x92\xa7\x30\x9e\xac\xc6\xc2\xdc\x44\x85\x4b\x0c\x71\xd4\x35\xc4\x70\xb0\x8e\x34\xdc\x41\x0c\xc5\xee\x4b\xcb\x05\xc4\x50\xd0\xee\x74\xdc\x3e\x0c\xd3\xee\x51\xcb\xd5\x43\x51\xf0\xe6\x73\xfa\x96\xf0\xf2\x08\x97\x0e\x6d\x3c\x14\x0b\xe9\x61\xc2\x9b\xe3\xf6\x86\xd4\x02\xcc\x6e\x9a\xb6\x06\x25\x4e\x21\x2d\x48\x83\x81\xce\x46\xa6\x5b\x86\xf1\xa1\xb1\x96\xb1\x63\x53\xba\x5f\x11\x9d\xbe\x0a\x58\x09\xba\x8d\x56\x1e\x65\x44\xb0\xd6\xe4\xb0\x47\x67\x10\xd3\x9d\x42\x95\x8a\xc4\xda\xc4\xda\x49\xe9\x36\x45\x0c\xc3\x47\x92\x64\x48\x91\x1e\x51\xea\x24\xd6\x53\x60\x4e\xa0\x1b\xe9\xc9\x63\x80\x10\xac\xe7\xc8\xd9\x4a\xb9\x3b\x11\x26\x71\x9e\x92\xa3\x2d\xa4\x4a\x03\x6a\xd8\xbb\x11\xae\x0c\xc5\x0a\x77\x47\x80\xfb\x82\xb1\xa2\xd1\xe6\xf4\xe0\x4e\x51\x7d\x9a\xe3\x63\xba\x07\x1e\x13\x1b\x62\x3b\x2d\x13\xd7\x8d\xe9\xb2\x7d\xc9\x3a\xda\x8d\x99\xd8\x6e\x8d\x8d\x10\xe5\xd6\x4c\x68\x87\x87\xa0\x47\x3a\x3c\x13\xdc\x0d\x22\xc8\x50\x6e\xd0\xc4\x76\x8b\x08\x7c\xca\x2d\x9a\xa0\xbe\x12\x41\x24\xe0\x2b\xd9\xb4\xd4\x64\x4b\x50\xa3\x5c\x28\x9b\x8c\x98\x7e\x29\x22\x94\x5f\x65\x37\xaf\x9c\x26\x09\x32\x1e\x6f\xcb\xed\x72\x3f\x29\xda\x0b\x9b\x10\xce\x19\x41\x28\xc6\x39\x9b\x04\xbd\x37\x49\x7c\x8c\xf7\x86\x11\x75\x14\x74\x84\x6b\x87\xd0\x33\x55\x75\x84\xc7\x87\x50\x72\x94\x76\xbc\x37\x48\x50\xb5\xd4\x77\x84\xaf\x48\x10\x04\x8a\x3c\xc6\x8f\x24\x3a\x04\xaa\xcf\x38\x27\x93\x54\x1c\x9a\x68\xd0\x07\x45\x68\x22\x6a\xee\xf3\x50\x27\xc0\x5d\xa5\xc6\x45\x68\xfe\x44\xe4\x98\xa3\xdc\x49\x17\x76\x02\xfc\x59\x6a\xa6\x08\xfa\xb3\x88\x20\x0b\x4c\x10\x8f\x8f\x3b\x01\x0e\x6f\xa4\x25\x95\x0e\x2f\xc2\x7e\x19\xa1\xcd\xab\x09\xf0\x88\xfd\x73\x81\xc7\x23\x46\xd8\xaf\x3c\x83\x14\xf3\x92\x27\xc0\x65\xa6\x6c\x77\xd0\x65\x46\x24\x59\xa3\xc3\x86\x76\xa3\x27\xc0\xa7\x8e\x9c\x64\xa5\x4f\x8d\xb0\xdf\x44\x18\xbf\xc7\x09\x70\xba\x29\x9e\x41\xa7\x1b\x61\xff\x88\xb2\xa7\x1d\xf1\x09\xf0\xca\xfd\x2e\x8a\xc7\x2b\x47\x24\x79\xf2\xcc\x27\x98\xa7\x3e\x01\x6e\x7b\x9c\xcf\xa5\xdc\x76\x84\xfd\x73\xc4\xfc\x38\x4f\x27\xd0\xb1\xa7\xec\x52\xd8\xb1\xc7\x2c\x53\x8a\x9a\x26\x8f\xb7\x3f\x81\xbe\x3f\x21\x4d\x84\xef\x8f\x49\x83\x1a\x4a\xdf\x82\x60\x02\x97\x07\x91\x5e\xb5\x5e\x1e\x60\x32\xe0\x36\xd2\xdc\x1a\xe5\xb1\x5f\x3d\x8a\xbc\x5d\xf9\x70\x03\xf9\x2c\x22\x73\x22\xb9\x6b\x08\x9e\x49\x86\xde\x09\xb5\xca\xe3\x36\x42\x71\x24\x7a\x1f\x14\x87\x27\xb7\x41\x71\x70\x72\x17\x14\x07\x0f\x6d\x82\xe2\x58\xe4\x1e\x28\x01\x4e\x6e\x81\xe2\xf0\xbe\x1d\x50\xa2\x91\xe8\x0d\x50\x1c\x21\x6a\xff\x53\xa0\x8e\xda\xfe\x74\x51\x42\xbb\x9f\x2e\x46\x68\xf3\xd3\xc5\x88\xdc\xfb\x74\x11\x43\x5b\x9f\x08\x46\x68\xe7\xd3\x45\x89\xd8\xf8\x44\x9a\x2d\xb8\xef\xe9\xe2\x38\xdb\x9e\x44\xdf\x07\x77\x3d\x11\xd2\xf4\xa6\x27\x61\x1b\xc2\x7b\x9e\x2e\x17\xdf\x96\x67\xdc\x48\xd4\xce\x5e\xa8\xab\x57\x7e\x83\xe0\xdb\xef\x24\xf5\x0f\xdd\xee\x24\x86\x78\x78\xb7\x13\x51\x24\xcf\x66\x67\x9c\x35\xd4\x3e\x58\x68\xd0\x3d\x52\x04\xc3\x3b\x9d\x08\x6d\xcf\x46\xa7\xd7\xe8\xfb\xf6\x39\x49\x4b\x83\x6e\x73\x46\xcd\x45\x83\x6b\x14\x32\x7c\xbd\xef\x82\x8f\xad\x88\x3d\x4e\x64\x74\xf9\xb6\x38\x71\x46\x31\x3b\x9c\x2e\x23\xef\x06\x67\xdc\x24\x6f\xf8\x2a\xee\xf8\x0d\x6f\x6f\xea\xc4\x73\x8e\x0f\xa2\xf2\x45\xd0\x5e\x88\x03\x11\xe7\x87\x50\x68\xb4\x27\x42\x61\x90\xbe\x08\x85\x40\x7a\x23\x14\x42\xc8\x1f\xa1\xf0\x48\x8f\x84\x44\x20\x7d\x12\x0a\xc3\xe7\x95\x90\x0d\x46\xfb\x25\x14\x4a\x94\x67\xa2\x90\x47\xf9\x26\x18\x52\xc8\x3b\xc1\x70\x42\xfe\x09\x86\x13\xe9\xa1\x60\xa8\x21\x1f\x05\xc5\x09\x79\x29\x18\x52\x84\x9f\x82\x36\x61\xd0\x53\xc1\xb0\x1c\x5f\x85\xd4\x87\xa0\xb7\x82\x92\xa7\xfd\x15\xd2\x8a\x84\x3d\x16\x8c\x93\xcf\x67\x89\x1d\xad\xca\x6b\x89\xe8\xfe\x55\xc8\x74\xf8\x3c\x17\x8f\x66\xa2\xbe\x0b\x69\x0a\xc2\xde\x0b\xaa\x60\x1e\xff\x25\xd6\x82\x2a\x0f\x26\x62\x60\x3e\xd2\x44\xc3\x5e\x0c\x4a\xdf\xe3\xc7\x04\xa6\x0c\x9f\x27\xe3\xb1\x4b\xa8\x2f\x13\x39\x9f\x69\x6f\x26\xc2\x58\xce\x53\x7a\xfc\x45\x78\x34\xe8\x08\xf4\xf9\x34\x14\xb3\x18\xaf\x06\x63\xe6\xf5\x6b\x62\xdd\x86\xc1\xb3\x41\xc7\xb9\x1d\xa1\xa6\x80\xc2\x1b\x30\x83\xf3\xb3\x98\x6f\x70\xe7\xe7\xb5\xc8\x99\xc0\xf1\xf8\x3f\x18\x50\x9c\x0b\xe4\xc1\xa4\xbd\x20\x0f\x12\xe9\x08\x79\x70\x48\x5f\xc8\x83\x13\x72\x87\x3c\xa8\xa4\x47\xe4\xc3\x21\x9d\x22\x0f\x92\xcf\x2f\xf2\x35\x21\xed\x1a\x79\xb0\xa2\xbc\x23\x03\x7f\x94\x83\x44\xe0\x85\x7c\x24\x02\x2d\xe4\x26\x11\x68\x91\x9e\x12\x81\x1d\x72\x96\x28\xb4\x90\xbf\x44\xe0\x45\xb8\x4c\x54\xa3\x06\xbd\x26\x02\xd1\x71\x9c\x7c\xda\x12\xf4\x9d\x28\x26\xb4\xfb\xe4\x33\x42\x61\x0f\x8a\xe0\xe7\x73\xa2\x46\x8c\x71\xe5\x47\xc5\x29\xc7\x2a\xc2\xf2\xf8\xbc\x29\xbf\x02\xa3\x0e\x95\xcf\x8c\x84\x7d\x2a\x4a\x09\x3d\x6e\xd5\x08\x7b\xac\x3c\xab\xb8\xe1\xfc\xe8\x25\x1d\xf6\xaf\x28\x2e\x1e\x17\x2b\x3c\x1f\xf9\xbc\x2c\xbf\x71\x43\x1d\xad\xf8\x59\x53\xfb\x5a\x71\xa6\x77\x9e\x7a\x47\x6d\x84\xc7\x45\x8d\x5b\x9f\xd3\xe5\x61\x19\xe3\x77\x11\x2c\xbd\xae\xd7\x08\x8f\x65\xf0\xbe\x28\x1b\x11\xb1\xb9\xb4\x4a\x89\x58\xff\xde\x7f\x3a\xe5\x1e\xdf\xca\x06\x88\xf3\xab\x08\x2c\xda\xa7\x22\x10\x48\x7f\x8a\x80\x27\x7d\x29\x02\x3e\xe4\x47\x11\x68\xa4\x0f\x45\xc1\x93\xfe\x13\x81\xe0\xf3\x9d\xa8\xa6\xa2\xfd\x26\x02\x23\xca\x67\x92\xb8\xa3\xfc\x25\x04\x27\xe4\x2b\x21\x28\x21\x3f\x09\x41\x89\xf4\x91\x10\xcc\x90\x7f\x84\xa1\x84\x7c\x23\x04\x27\xc2\x2f\xc2\x1a\x2f\xe8\x13\x21\x48\x8e\x3f\x44\x69\x41\xd0\x17\xc2\x88\xd3\x7e\x10\x65\x30\xc2\x3e\x10\xc2\xc7\xe7\xff\x44\x8e\x4d\xe5\xfb\x84\x3b\x7d\x15\xb0\x12\x3e\x9f\x87\x56\x46\xd4\xdf\xa1\x86\x7d\xd8\xd7\xc1\x94\xca\xe3\xe7\x44\xda\x49\xe5\xe3\x84\x87\xe1\x23\x49\x32\xec\xdb\x60\xd4\x3d\x7e\x8d\x7f\x4e\xf0\xf9\x34\xb4\x01\x42\xfd\x99\xb8\xd9\x4a\xfb\x32\x61\x93\x38\x4f\xc9\xd1\x16\xe1\xc3\x60\xe3\xcd\xe7\xbf\x10\xac\x62\x7c\x17\x84\x95\xd7\x6f\x89\xf4\x06\x06\x9f\x05\x1b\xd3\xdc\x5f\x51\x3b\x46\xa0\x68\x2a\x32\x6a\xc0\x77\x2e\xac\x8f\xe2\xd5\x0d\x98\x79\x03\xc9\xd8\xa3\xf2\x33\xd9\x90\x81\x1c\x51\xe2\x4d\x01\xf5\x0c\x9d\x40\x7e\x00\xdb\x5b\x2a\xef\x0f\x99\xf4\xc7\x80\x7d\xc9\x2e\x25\x6b\x61\x1d\x53\x58\xbb\xd4\xac\x57\x8a\x61\xab\xbb\x9e\x92\xca\x36\xd5\xf9\x47\x52\x33\xa5\x8e\x8b\x18\x9b\x0f\x0b\xc1\x24\xdb\x13\x4a\x28\x6f\x72\xc0\xa7\x83\xcc\xf2\x6b\xd9\x15\x65\x51\x89\xdb\x21\x66\x0e\x38\x03\xe8\xbb\x6e\x51\x37\xab\x15\x04\xcc\x9a\x22\xdb\x97\xec\x36\x9d\x8a\xaf\xff\x36\xbb\x6c\x53\xa8\x1d\xbc\x89\x79\x27\x4e\xe7\xc9\x1f\x93\xef\x59\xf3\xcd\x80\x7e\x78\x80\x8d\xef\x01\x44\x39\x27\xaa\x2b\x40\xaa\x29\x1b\xd7\xca\x5a\x6b\x17\xa3\x94\xfb\xdf\x53\x58\x31\xbb\x6f\x4c\xd0\xb9\xd5\x06\x0b\xa7\x27\x4d\xe8\x85\x05\xed\x05\x5e\x62\xcd\x4b\x42\xaf\x00\xf4\xdc\x07\xba\x86\xa0\x01\x99\x37\x16\xb4\x17\xf8\xd1\x02\xf6\xcb\xfc\x04\xa0\x17\x22\x5d\x50\xaf\xc7\xbe\x34\x76\xa3\x12\x04\x19\xaf\xbc\xf5\xbf\x4a\x0b\x21\xb8\xf4\x12\x64\xd5\x81\xb5\x5d\xdd\x7c\xce\xf8\xd9\xd4\x22\xac\xa0\x83\x12\x30\x11\x36\x9e\x49\x1c\x9a\x1f\x05\x21\x72\x7d\xdd\xec\x14\x49\xaa\x58\xa5\xca\x13\x06\x21\x2f\x1a\x26\xde\x2c\x16\xfd\xe1\xc2\xfd\x0a\x59\xc7\x99\x34\x43\xae\x11\x57\xca\x7a\x46\x3a\x8c\x54\x52\x87\x96\x4d\x89\x12\x4c\x79\xa2\x00\xc3\xc9\x49\x14\x24\x91\x45\x44\x15\x87\x33\x7f\x28\xc8\x70\x8a\x0e\x05\x49\xe4\xd2\x50\xc5\xe1\xfc\x17\x0a\x32\x9c\xa8\x42\x41\x12\x19\x25\x74\xbb\x86\xb3\x40\x68\xd0\x70\xb6\x06\x0d\x4a\x64\x55\x10\xa9\xc9\x22\xdf\x43\xb7\x35\xd5\x9f\xc2\x52\x65\x3d\x93\x8f\x3e\x0e\x69\xd4\xb6\x3c\x47\x5f\x5f\xd8\x4b\xc6\x13\x59\x12\x19\xf6\xac\xc4\xb2\x00\x25\xc9\x84\x9e\xee\xaf\x5d\x57\x57\x0f\x13\xab\xb4\xed\x9a\xba\x7a\x91\x59\x50\x75\x62\x50\x08\x33\xeb\x8a\xae\xb4\x1f\x8f\xb1\x61\xda\xeb\xde\x04\xb3\x72\xd0\x3f\x3f\x90\x08\x01\x01\x07\x38\x20\xaa\x12\x23\x2e\x56\xdb\x22\x19\x7c\x58\xf6\xc3\x91\x16\xbc\x8e\x88\x97\x19\xaf\x6a\x5b\xb5\x7f\x74\x6b\x4f\x3c\x5e\x49\x43\xa9\xe7\x0d\xac\xce\xa5\xde\xd7\xf4\x80\xd1\x29\x0a\x17\xfd\x8f\x5f\x9b\x54\x42\x54\x00\x34\xa4\xef\x7f\x26\xe0\x71\xe9\xd1\x0c\xa7\xfa\xdd\x40\x94\xd4\x6c\x48\x57\x89\x52\x9b\x99\x89\x1f\xc3\x35\x99\x39\x39\xfa\x43\x44\xbd\xef\xcd\xc3\x17\xa3\xbc\xfc\x60\xad\x49\xb6\x18\x70\x9c\xa4\x91\x0c\x50\x68\x52\x45\x64\x7f\xc3\x94\x8e\xf2\xa3\xf9\x1c\x02\x60\x26\xea\x51\xe6\x26\xbd\xe2\x9c\xbd\xb0\x6d\xef\xee\x67\xcd\xf4\xa5\xc9\xf2\x82\x55\xdd\xb7\xf9\x6a\x9e\xb3\x97\xc9\x1f\xd8\x13\x5b\xb2\x55\x92\x4e\x7a\x6a\xc9\xe3\xfc\x67\xf1\x4b\x6f\x8a\x1f\xe2\x12\xd5\xa0\x02\x90\x23\xff\x13\xd2\x68\x4e\xfb\x32\x13\x49\xa6\x3f\xc1\x29\x4d\xd3\x9e\x8d\x68\x50\xc1\x69\xfe\x34\xdf\xcc\x37\x92\x99\xc5\x8d\xee\x20\xac\x2f\x38\x0a\x69\x6d\x45\xa9\x7f\x3a\x10\x30\x70\x3a\x40\x58\xa0\x73\xc1\x62\xbd\x9e\xa8\xff\x81\xe9\xc0\xc2\x09\x08\x48\x4d\x07\xbd\x18\xe3\xe6\x02\x49\xcf\x3f\x17\x48\xd3\xe1\x48\x8b\x4e\x07\xb0\xcc\x9e\x0e\x40\x03\x3c\xba\x0d\x10\x98\x11\x5c\x28\xdb\x0c\xc8\xfe\x0d\xcd\x08\x08\x18\x3d\xdc\xd3\xd4\xa3\x4a\xd6\x5c\xd0\x7b\x22\xd8\x44\x00\x80\x71\xa1\x63\x27\x02\x03\x1a\x9d\x08\xac\x72\x7b\x22\xa0\xea\xe0\x99\x05\x08\x8a\x77\xcc\x02\x28\x3f\xca\x48\x47\x00\xc7\x49\x1a\xc9\x60\xdc\x2c\xe0\x66\x75\xf6\x78\xa1\xc0\x2e\x7e\x9d\x29\xd4\xf4\x4b\x9e\xe8\x3b\xf4\x6a\xe9\x62\xb9\xb2\x50\x48\x43\x23\x4a\xfd\x96\x50\xc0\x40\x4b\x88\xb0\x40\x2d\xe1\x72\x35\x59\xcf\x27\x9b\x27\x68\x06\x2d\x84\x80\x74\x94\x19\xec\x65\x18\x67\x06\x25\xbd\x80\x4b\xac\x1e\x55\xc4\xb1\xa0\x19\x84\x65\xb6\x19\x1c\x6a\xff\xe8\xd6\x3e\x60\x03\x5d\x28\x7b\x10\xc8\x9e\x0d\xd9\x40\x04\x8c\x54\x76\xf6\xd4\xff\x78\xf4\xc8\x32\x83\x8b\xe5\x0a\x35\x83\x00\x18\x97\x3b\xd6\x0c\x1a\xd0\xa8\x19\xb4\xca\x6d\x33\x48\xd5\xc1\x63\x06\x09\x8a\x77\x98\x41\x94\x1f\x65\xa5\x22\x80\xe3\x24\x8d\x64\x30\xce\x0c\xf6\x3d\x0d\xcd\x60\xff\xc5\x7a\xad\x0b\x70\x1a\x6f\x06\xf3\x63\xfe\x94\x3f\x73\xdf\x93\x13\xfc\x94\x33\x0c\x64\xb8\xd3\x45\x0d\x09\xa4\x99\xe5\x59\xf3\x69\x77\x98\xcd\xf3\xc5\xba\xe7\xb5\x58\xae\x04\xa3\xc5\xe3\xf2\x69\xfd\xe4\xb8\xc3\x3d\x33\xa2\x87\x88\xfe\xe8\x31\x48\x23\xcb\x0b\xfd\x33\x00\x07\xb1\x5c\x61\x8c\x05\xee\x0c\xaf\xd6\x13\xf5\x3f\x30\x0b\x40\x14\xbf\x7c\xa4\x2b\x2c\xc4\x18\x37\x0d\x08\x8a\xfe\x59\xa0\xb7\x1b\xb6\xa8\xe8\x0c\x00\x8a\x1c\x3f\xd8\xac\xfb\xa3\x53\xf7\xc0\x14\xe0\x00\xd9\xe3\x5f\xf4\x6b\x68\x02\x70\xa1\xc8\x51\x3e\xcf\x16\x9b\xe5\xd2\xab\x46\xb6\x23\x2c\x3c\x0f\x6c\x12\x30\xc1\x51\xc9\x63\xa7\x80\x01\x18\x9d\x01\x60\xb1\xe3\x07\x93\x95\xf0\x4c\x01\x38\xc9\x3b\x66\x00\x8c\x1b\x65\x9f\xc3\xb0\x51\x62\xc6\x91\x1f\xe9\x04\x63\x0f\x7a\x78\x9c\x4e\xd3\x1e\x7e\x9d\x09\xd4\xe4\x2f\x4d\x71\xce\x9a\x77\x6c\xd8\xae\xf7\xd9\xd3\x1c\x5d\xc7\x49\x24\xd2\xce\xa8\x72\xbf\x29\x54\x50\x9e\x8d\x01\x0d\x32\x6a\x6b\xc0\xc1\x0a\x0a\xfa\x75\xdb\x03\x9a\x62\xc0\x26\xf2\xc6\xfd\x40\x64\x46\x2d\xa3\x5d\x1a\xbd\x49\x80\x21\x62\x86\x0d\x83\xb3\x87\x88\xee\xf5\x90\x95\x44\x01\x69\x77\x68\x9e\xad\x1f\x17\x5e\x3d\x8b\xdc\x31\xb0\xc0\x29\xf9\x63\x6d\x25\x80\x47\xcd\xa5\x03\xe1\xdd\x39\xa0\xe8\x79\xe5\xfc\xa4\xd1\x24\x78\x52\x86\x2d\x0a\x3c\x56\xde\x68\x26\x5f\xb8\x8b\x20\xc7\x95\xcd\x6b\xbc\x01\x9d\xaf\x9e\x9f\x56\x47\x6e\x40\x39\x49\x69\x43\x97\xf9\x3a\xbb\xcb\x87\xb6\x04\xb9\xd3\xb3\x8d\x90\xca\xf0\xda\xab\xcf\xef\x2b\x3f\xce\xd9\xbc\x67\x27\x9e\x5f\x92\xec\x8e\xeb\xb9\xf6\xdb\x07\x7e\x45\x75\xac\x15\xbf\x09\x2a\xc5\x97\x32\x06\x1c\xe8\x57\xa4\xb0\x81\xd8\x63\x78\x36\x4a\xaa\x90\x0f\xcf\x41\x3c\xb3\x96\x28\x1f\x35\x65\x41\x14\xbf\x70\x5f\x37\x59\x09\x72\xfe\x99\x4a\x3e\x0b\x68\x8b\x4a\x6c\xe1\x54\x77\x6c\x64\x3b\x58\xd8\x9c\xe2\x00\xb9\x0b\xf8\x2a\xc2\x81\x77\xa1\x3c\x9b\xd8\xeb\xd5\x71\x4f\x2b\x50\xe4\xa4\x64\xc2\xa2\x32\xc7\xef\xde\x54\x3e\xd7\x1d\x16\x7b\x27\x22\x94\x12\x2d\xdb\x27\xa7\x20\x8c\x1b\xbd\xaf\x12\x82\x8d\x12\x33\x8e\xfc\x17\x4e\x3b\xea\xed\x4c\xd3\x16\x8e\xb3\x49\x3d\x06\x39\xec\x79\xa1\xdf\x26\x71\x10\x8f\x4d\x12\xe5\xa3\x6c\x12\x44\xf1\x0b\xf7\x75\x36\x49\x90\x1b\x69\x93\x00\x12\xb4\x49\xa0\x28\xda\x26\x39\x58\x98\x31\x71\x80\x6c\xe5\x14\x9d\x1a\xb2\x49\x2e\xd4\x3d\x36\x49\x2a\x40\x94\x4d\x32\x61\x51\x99\x63\x6d\xd2\x00\x8c\xda\x24\x58\xec\xb5\x49\x28\x25\x5a\xb6\x4f\xda\x24\x8c\x1b\x65\x34\xc2\xb0\x51\x62\xc6\x91\xff\x7a\x9b\x34\xca\x4b\x35\x7d\xb8\x1f\xe7\x33\x6a\x76\xed\xf5\x70\x60\x6d\xfb\x49\x8e\x8b\xf5\x73\x3a\xdf\x73\xa7\x98\xed\xd3\xe5\xb3\xe4\x98\x1f\xb2\xf5\xda\xf1\x52\x25\x4b\x6c\x1d\xca\x91\xd1\xb1\x25\x91\x48\x13\xa8\xca\xfd\x26\x5a\x41\x79\xac\xb4\x06\x19\x65\xa8\x1d\xac\xa0\xa0\x5f\x67\xae\x35\xc5\xc0\x7e\x07\x6f\x5c\xb7\x1f\x08\xa3\x6d\x97\x46\xdb\x6d\x0c\x11\xb3\xb9\x18\x9c\x3d\x8c\x75\xaf\x87\x0c\x38\x0a\x48\xef\x77\x3c\x3f\x1f\x96\xf8\x7e\xc7\xa0\x21\x51\x66\xdc\x02\xa7\xe4\x8f\x35\xe6\x00\x1e\xb5\xe7\x0e\x84\xd7\xa4\x53\xf4\xbc\x72\x7e\xd2\xb0\x13\x3c\x29\xe3\x1b\x05\x1e\x2b\x6f\x34\x93\xaf\xdc\xef\x10\xe3\x8a\xb2\xa8\x5f\x6a\x44\x35\x93\xd7\xac\xa9\x8a\xea\x05\x93\x35\x7b\x62\x8b\x25\x1e\xd2\x27\x90\xe8\xb0\x5d\x59\x1e\x88\x2c\x96\x50\x1e\x1b\xaa\x41\x46\xd9\x50\x07\x2b\x28\xe8\xd7\xd9\x50\x4d\x31\x10\x4d\xc1\x1b\xf7\x03\x91\x19\x8f\x32\xb6\x4a\xa3\x6d\x28\x86\x88\x99\x3d\x0c\xce\x89\x31\x55\xbd\x1e\x0c\x38\xc6\x00\xe9\x31\xf1\xfc\x34\xa7\x42\x47\xb5\x86\x44\xd9\x50\x0b\x9c\x92\x3f\x3a\xe4\xd8\x84\x47\x6d\xa8\x03\xe1\xb5\xa1\x14\x3d\xaf\x9c\x9f\xb4\xa1\x04\x4f\x32\x30\x38\x06\x3c\x56\xde\x68\x26\x5f\x68\x43\xe5\xb8\xb2\x79\x8d\xb7\xa1\x2c\x5b\xe5\x22\xfc\x4c\x90\x54\x31\x0e\xfb\xc3\xf2\xe9\xae\x20\x64\x28\xc8\xbd\x61\xc8\x61\xa9\x34\xc7\x3c\xab\x5e\x58\xf3\x49\x86\x59\x36\x3f\x2e\xf8\x54\x72\x78\x5a\xa5\xea\xf8\x31\x5f\x6f\xd6\xab\x39\x12\x81\xd1\x73\x44\xba\x4c\xe0\xa2\x43\x5c\xe0\x78\xa2\x1c\x78\x71\x28\x0e\x83\x03\x79\xe6\x11\x05\x31\x6a\x1a\xb1\x91\x42\x42\x7e\xdd\x24\xa2\x08\xfa\xe7\x10\xd1\xaa\x4e\xfb\x93\x01\x19\xa0\x30\x7a\x06\x41\xf0\x30\x9b\x8f\x80\xb9\xc7\xf2\xa2\xab\xc3\x81\x19\x2e\x1c\x69\x0d\xf6\xab\x65\xb6\xc0\xb7\xe1\xb4\x5a\x44\x4d\x1e\x10\x9a\x90\x3d\x3e\x34\x63\x00\x47\x67\x0e\x1b\xc0\x3b\x71\x10\xd4\x7c\x32\x7e\x72\xda\xc0\x39\xd2\x21\x14\x61\xe8\x48\x61\x63\x59\x7c\xe1\x94\x21\x87\x11\x61\x37\xbf\xd4\x54\x0e\xae\xfd\x39\x2b\xcb\x84\xff\x39\xdd\xd7\xf9\xbb\xbe\x20\x0e\xee\xa5\xea\x8b\xe1\x5d\x3d\x5c\x69\x56\x24\x78\xa6\x04\x26\x62\x17\x35\x9d\xa1\xc1\x4e\x59\x79\x74\x8a\x91\x1b\xf3\x3b\x78\x65\xd5\x4b\xfd\xd7\xd9\xa1\xae\xba\xac\xa8\xcc\x8e\x44\x19\x19\x90\x37\xf2\xda\xf3\x07\x42\xe3\x66\x5c\x85\x5e\xa7\xdf\x4f\x98\x44\x26\xcc\x3c\xd5\x40\xd3\xef\x45\xce\xea\x9b\x4a\x3c\xb0\x93\xd9\x13\x2e\x75\x5b\xf0\x8b\x98\xd9\xbe\xad\xcb\x6b\xc7\x76\x2a\x91\x02\xcf\xa0\xb0\xeb\x55\xe6\x58\xd6\xaf\xdb\x53\x91\xe7\xea\x2a\xa6\xa0\x95\x08\x8a\x2a\xad\xc9\x0e\xf2\x15\x7f\x0f\x17\x44\x11\x4e\x3d\x87\x1e\xb1\x6b\xb2\xaa\x3d\xd6\xcd\x79\xcb\x7f\x2b\xb3\x8e\x2d\xf3\x6f\xd3\x75\xfa\xf3\x84\xff\x27\x7d\xf8\x98\x15\xd5\xe5\xda\x4d\xa4\xcd\x9b\x11\x51\x24\xbf\x40\xdb\xde\xb1\xb7\x2e\x6b\x58\x76\xd3\xac\x1b\x56\x66\xfd\x60\x30\xab\xc1\xc7\x4b\xcf\x57\xde\xb5\xd6\xd6\x4f\xfa\x49\x53\x31\xa1\xe9\xb4\x13\x86\xb6\x45\xbb\x38\xb2\xf1\x95\x32\x89\xd4\x60\x26\xf1\x44\x4e\x9b\x37\x57\xdf\x6c\x90\xc8\x4b\xe6\x63\xee\x6a\x2b\x25\xea\x31\xae\x67\xcf\xc0\x7b\xb6\x87\xdd\x33\x18\x74\x65\xd6\xbc\x30\xdf\xb8\x7d\x72\x86\xed\x93\x26\xa0\xdb\x19\x5c\x17\xa6\xd2\x82\x8c\x6a\x19\xa1\xd2\xb2\xd3\x24\xee\xb1\xae\x3b\x31\x4c\xa7\x27\x96\xe5\xc6\x38\x4c\xc1\x38\x4c\x3f\x8c\xfa\x50\x83\x75\x48\x22\xb2\x6c\xd8\x39\xf1\xa8\x87\xfb\x42\x41\x2b\x6e\x42\x0f\xed\xaf\x6f\xfb\x3f\x1b\xb4\x4c\x30\xde\xcc\x1a\x8a\x37\x61\xa2\x2b\xd7\xd7\xcb\x17\x8d\x87\x08\x9a\x6c\x38\x07\xa9\x81\xc7\xba\xea\xa6\xaf\x62\x1c\x3f\xa6\xe9\x6e\x5f\xf7\xd5\xcc\xf2\xbe\x65\x92\xc5\xe5\x2d\x49\x93\x34\x11\x93\xe3\x62\x31\x51\xff\x9b\x2d\x1e\xe4\x1c\xb2\x9d\x5f\xde\x92\xb6\x2e\x8b\x3c\x31\x86\xd5\xae\x1f\x8c\xd3\x9c\x1d\xea\x26\xe3\x43\x51\x8c\x01\xc1\x93\x1b\xb9\xde\xd2\xb0\x7c\xa2\xfa\x52\x4c\x56\x21\x2c\xe5\x1c\x0d\x5f\x8e\xf5\xe1\xda\x1a\x74\x20\xc4\x96\x17\xdf\xea\x6b\xd7\xcf\x53\xdb\x31\xb5\x0b\x89\x52\x54\xdf\x59\xd3\xb1\xbc\xff\x5d\xd2\xcf\x6f\x06\x79\x7e\x61\xde\xbe\xbb\x6e\xa2\xf3\xcc\x2e\x2a\x53\xc3\x94\xcf\x45\xdb\x73\x91\xe7\x25\x60\x73\xa8\xcf\x97\xec\x60\xa4\x84\x58\xac\xd9\x39\x99\x3d\xae\x75\x5a\x8b\xed\x54\x7c\x83\xff\xa4\x08\x91\xd9\xe5\x5a\x96\x62\x74\xc0\xa1\x32\x9d\x0f\x0a\x21\xa6\xfa\xbe\x67\x79\xf2\x1d\xd9\xc9\xa0\xe5\xec\xa6\xd0\x57\x4a\xdd\xee\xd1\x45\x56\x3f\xe9\xb2\x2d\x81\x23\x7b\x0e\xfa\x29\x6c\xd3\xff\xc4\x77\xa2\x23\x24\x4a\x0f\xad\x8a\xa5\x9f\x83\x5c\xf1\x5e\x95\x87\x3a\x55\x69\xf1\x9d\xbc\x89\x8e\xd2\x32\x94\xcf\xe4\x9e\xef\xfb\x1f\x2f\x06\xd7\x43\x95\xec\xe3\xe6\xb8\x84\x41\x5c\xaa\x4f\x6d\x38\xaa\x2d\x4d\x38\xd1\xdf\x7e\x10\xa2\xe9\x4d\xb3\x83\xea\xcb\x88\x2a\x79\x34\x58\x8b\x41\x75\x52\xac\x1c\x1e\xbd\x20\x8c\x8a\x41\xcb\x5a\xa6\xac\x1f\x76\xe8\xf7\x67\x57\xf7\x29\xfa\xa1\x9e\xa4\x70\x7c\xbd\x8a\xe1\x78\x7a\x18\x05\x1f\xdd\xdb\xf0\xa6\xb7\xba\x75\x39\xa2\x46\x9e\xce\x47\x25\xa4\x14\xc1\x59\x4a\x46\x08\xea\xb3\xaf\xfa\xc2\xa8\x2b\xa0\x2e\x42\x7a\x90\x97\x21\xf6\x55\x7c\xc7\xec\x6b\x3a\x66\xfe\x77\x24\x74\x89\xa1\x95\x40\xf4\x46\x48\x44\xde\x37\x79\xec\x7f\xec\x36\x24\xa8\x53\xd5\x25\x2d\x2b\x45\x28\xda\xac\x3a\x18\x3e\xb3\xea\x6a\x25\x8a\x4e\xf5\x66\xc4\x18\x74\xe0\xdc\x71\xe7\x82\x8c\x1f\x6b\xc3\x3d\xf8\xc8\x2a\x79\x74\xf7\x13\x96\xd5\x94\x83\xe8\xc8\x48\x9b\x0a\xb6\xfc\xa0\x59\x75\xf6\x44\x23\xb9\x84\x7a\x72\x84\x65\xf5\xe2\x78\x7a\xf8\x6b\x2c\xeb\xd1\x0a\xed\x1b\x51\x17\x4f\xb7\x8f\xb7\xa9\xa0\x23\x1c\xb3\x0a\xa5\xf4\x19\x54\x7d\xed\xd3\x95\x4e\x17\x21\x1d\xc7\xcb\x10\x83\x2a\xbe\x2b\x83\x3a\x6e\xf9\x44\xdb\x15\x79\x8d\x3f\x06\x8a\x50\x1a\x21\x57\xbc\xc3\xea\xa1\x4e\x55\x9a\x34\xab\xe2\x92\x38\x4a\x2b\xda\xb2\x3a\x18\x5e\x87\x55\x5e\xe1\x0b\xa0\x53\xdd\x1a\x31\x06\x1d\x38\x77\xdc\xb9\x20\xa3\xc7\x9a\x68\x06\xfb\x76\x65\x40\x5a\x8f\x1e\x7f\xc2\xb8\x42\x51\x3c\xfd\x13\x69\x62\x87\x4c\x07\xd0\xbe\xc2\xfc\x0f\x91\xf4\x43\x9d\x39\xc2\xb8\x7a\x71\x3c\x9d\xfc\x35\xc6\xd5\xb8\x92\xcd\xaf\x47\x8e\xa8\x8b\xa7\xdb\xc7\x1b\xd7\xa1\x17\x1c\xcb\x0a\x45\xf4\x59\x56\x75\xa7\xd3\x95\x4c\x95\x20\x7d\xd6\x17\x21\x66\x95\x7f\xc6\xdc\xd4\xf9\x7c\x9e\x2d\x16\xf7\x79\xaa\xe2\x5e\x3c\x42\x0e\xab\x05\xa2\x2b\x5c\x28\x32\x00\x6e\xbf\x4a\xd7\xf6\x0d\x58\x9a\x3c\x51\x65\xd2\xa6\x8a\x8b\xd7\x18\xa5\x68\x93\x6a\x23\xf8\x2c\xaa\xa5\x8d\x18\x2a\xd1\x99\x11\x63\xce\x06\x73\x87\x99\x03\x31\x7a\x64\x49\x3d\x89\xaf\x0e\xad\xb5\x9f\xb0\xa2\x50\x0a\x5a\x1b\x62\xfd\x54\x33\x5b\x80\xe5\xa7\xda\x49\x14\xe2\x98\x04\x3a\x72\x84\x21\xf5\xa1\xd0\x1d\xfc\x45\x3e\x2a\xb8\x68\xee\xce\x9b\xa1\xea\xd0\x7d\x7f\x87\x9f\x6a\x76\x84\xeb\xa7\x22\x92\xfa\x6c\xaa\x71\xc1\xd2\x15\xd2\x28\x44\xfa\x50\x96\x22\xc6\x55\x95\xa0\xf6\x35\x7f\x3a\x6e\x96\xf7\xd9\x57\x7d\xeb\x1e\xa1\x48\x54\x0a\x51\x24\x25\x1d\x1d\x69\x7c\x38\x3e\xa7\xf6\x40\xf3\x31\xa1\x5b\x80\x34\xb7\xe2\xfa\x36\x41\x2f\xda\xe2\x22\x38\x5e\xa3\x2b\xaf\xf9\x06\x09\xd0\xbd\x1d\x31\x50\x11\x48\x77\x7c\x62\x40\xe3\x6d\xb0\xd0\xa5\xb1\xb5\xf3\x2a\xfa\x67\x8c\x31\x10\xc7\xab\x31\x3f\x74\xdf\x20\xc0\x27\xdc\xc1\x23\xac\x72\x00\xcb\xdb\xf1\x3f\x7a\xff\x20\xa2\x46\x5e\x55\xf8\x5b\xee\x21\x54\x84\x13\xa7\x4a\xd0\xd5\x49\x85\x79\xba\xfc\x33\xbe\x21\xbb\xda\xb3\xf9\x7d\x96\x58\xdc\x1e\x47\xc8\x61\xb5\x40\x57\x45\x95\xc7\xd3\x3d\x3e\xae\x9c\xfd\x03\x9a\x3c\x51\x65\xcf\xa6\xec\x7a\x75\xdc\x63\x94\x46\x6c\x1e\x54\xd1\x9e\xae\xba\xe4\xea\xc7\x26\xfa\x33\x62\x04\xda\x60\xd8\x9a\xb2\xfa\xf4\x8e\x2c\x57\x95\x51\x35\xa2\x75\xf7\x53\x5b\xb2\xa6\x20\xb4\x4e\xfc\x50\xfb\xea\x63\x12\xe8\xcb\x51\x1b\x07\x34\x0a\xdd\xc7\x3f\xda\xa6\x86\x2a\x42\xf7\xfa\xdf\xce\x9a\xaa\xeb\x99\xae\x6c\xaa\x04\xe9\xb1\xbe\x08\xb1\xa6\xfc\xf3\x57\x5b\x53\x71\xef\x3d\x60\xee\x94\xac\x88\xaa\x70\xa1\x3e\x69\x4d\xfd\x8d\x34\xc6\x9a\x2a\x4a\xd1\xd6\xd4\x46\x18\x67\x4d\x31\x6c\xa2\x3f\x23\x46\x9d\x0d\xe6\x8e\x34\x07\xe2\xcb\xad\x29\x26\x2a\xad\xbb\x3f\xd0\x9a\x2a\x16\x3f\xd4\x9a\xfa\x98\x04\xfa\x72\x84\x35\xf5\xa1\xd0\x7d\xfc\xa3\xad\x69\xa8\x22\x74\xaf\xff\xed\xac\xa9\x71\x57\xd2\x15\xcf\x28\x44\xfa\x4d\x96\x22\x66\x55\x95\x60\x96\x75\xb1\x7c\x7a\x5a\x1c\xee\xb3\xac\xfa\xde\x3a\x42\x91\xa8\x14\xa2\x3c\x4a\x3a\xca\xc4\x2e\x97\x87\xd5\xca\xde\x31\xf0\x32\xa1\x5b\x80\xde\x31\xe0\x17\xa0\x09\x7a\xd1\xb6\x16\xc1\xf1\x99\x5b\x75\x51\x36\x48\x80\xee\xed\x88\xc1\x89\x40\xba\x63\x12\x03\xba\xe3\x3c\x84\xeb\xd2\xd8\xda\x79\x15\xfd\x13\x06\xd8\x12\xc7\xa7\x31\x3f\xd4\x06\x07\xf8\x84\x3b\x78\x84\x25\x0e\x60\x79\x3b\xfe\x47\xdb\xe3\x88\x1a\x79\x55\xe1\x6f\x67\x95\x8d\x4b\x8f\x48\xa4\xd9\x50\x88\x05\xe3\x89\x52\x2c\x58\x56\x96\xa0\xe1\xb2\xeb\xc7\x55\xba\xbe\x33\x5c\x56\xdd\x84\x47\x28\x12\x95\xc2\x02\x02\xa5\x74\x64\x0c\xc2\xfe\x79\xbf\x3c\xd8\xd1\x92\x3e\x26\x74\x0b\xd0\xb1\xb3\xfc\x4a\x35\x41\x2f\x3e\x7a\xd6\xc5\xf1\x59\x65\x75\xf5\x36\x48\x80\xee\xed\x88\x81\x8a\x40\x22\x61\x96\x08\xd0\xf8\x50\x5a\xa1\x4b\x63\x6b\xe7\x55\xf4\xcf\x44\xd4\x02\x71\xbc\x1a\xf3\x43\xad\x72\x80\x4f\xb8\x83\xc7\x44\xd7\xfa\xb1\xbc\x1d\xff\xa3\xad\x72\x44\x8d\xbc\xaa\xf0\xb7\xb3\xca\xc3\x05\x47\xec\x04\x50\x95\xa1\xe7\xa3\x7d\x21\x1a\xb7\xc0\x0b\x30\x8b\x9c\xa5\xcb\xe5\xe2\xf9\xde\xc8\x05\x71\x9f\x1c\x21\x88\xd7\x07\x3d\xa0\xe5\xa2\x51\xe6\xf8\x70\x5c\x2f\x56\x9b\x5d\x3c\x0b\xb2\xf2\xa4\x31\x16\x37\x94\x71\x6a\x23\xa2\x18\x6c\x14\x9f\x29\x56\x57\x5a\x43\xf8\x64\x1f\x47\x8c\x4d\x17\x10\x3b\xef\x76\x60\x46\x8f\x40\xa9\x40\x23\x6b\xe6\xd3\xec\x4f\x18\x61\x28\x8c\x4f\x4f\x7e\xa8\x0d\xf6\xb3\x09\xf6\xec\xa8\xf8\x06\x1f\x92\xaf\xc7\x7f\xb4\xfd\x0d\x57\xc7\xa7\x03\x7f\x1b\xeb\x9b\xcc\x8a\x83\x90\xa4\x63\x6f\xdd\xf6\x58\x34\xea\x26\xa7\x71\xa9\x73\x12\x06\xb6\xaf\x81\x12\x28\x03\x84\xc0\x30\x48\x3c\x78\xdf\x98\xff\x98\xed\x1b\x96\xe5\x87\xe6\x7a\xde\xeb\xd7\x9b\xf5\x45\xcd\xa1\x2c\xc9\xd0\xfb\x8b\x43\x7e\x85\x47\x08\xed\xbd\xf3\x28\x5f\xdf\x56\x6f\xa6\xcf\xcc\xb7\xf3\xc5\xbd\xf5\x96\x95\x47\x75\x6d\x5d\x5d\x9b\x35\xbf\x71\xba\xe2\x5a\xa1\xf5\x1c\xbc\x49\xf4\x5c\x54\xc5\xf9\x7a\x36\xef\xc3\xea\xdb\xd7\xfa\x42\xf5\xf4\x5c\xff\x3e\xcd\x2e\x17\x96\x35\x59\x75\x60\xa2\x5a\xd3\x57\xb6\xff\xad\xe8\x9c\xef\xc8\xad\x7a\xe7\xa6\xe8\x1f\xf6\xfb\xc3\x2a\x9f\x2b\xb5\x69\xb2\xbc\xb8\xb6\xdb\xc5\xe5\x4d\x5f\xc0\x17\xf7\x23\xa7\xe2\x0d\xe1\xba\xea\xa6\x6d\xf1\x3b\xe3\x4f\xa4\x3b\x77\x84\xc5\xcd\xdc\x2e\x6b\xba\x1d\xc7\x51\x97\xd2\x67\xeb\x9d\x75\xbd\xb2\xab\x2f\x3b\x3c\x10\x5a\xed\xaf\xa2\x77\x71\xf4\x25\xda\xd9\x4a\xdf\xbd\x94\x4c\xb2\x6b\x57\xcb\xf6\xfa\x73\x5e\xb4\xd9\xbe\x64\xf9\x5f\x86\x96\x1b\xbe\xdd\x0e\xd7\xa6\x15\x4f\x86\x4f\xb3\xb2\xac\x5f\x59\x8e\x88\x02\x9b\x45\x19\xd6\xc3\xfe\xf1\xf0\x28\xb9\x98\x43\x59\x7f\xd0\xf6\x4d\x7f\xd1\xc6\x8b\x7f\xd9\x02\x0c\x65\xa7\xc4\x1f\x32\x13\x85\x92\xd8\xa4\x6f\x7e\xd3\x2c\xcc\x8f\x9a\x8b\xfa\xb8\xb5\x51\x15\x2f\xfd\xb7\xb4\x79\x74\x05\xb7\xdb\x4b\x99\x1d\xd8\xa9\x2e\x73\x53\x2e\xf0\xf9\x06\x9a\xcb\x68\x19\x79\xd1\x15\x4a\xf9\x89\x2b\xb4\xc7\x82\x95\xc2\xb7\x10\xd7\x75\x2d\xed\xe4\xcf\xda\x7f\x70\x33\xe3\x4b\x26\x61\xea\x32\x7e\xc1\xdd\x51\xd4\x7e\xec\xf6\xda\xaa\x75\x99\xbf\xf7\xaf\x1e\xe0\x96\x7f\x1d\x8b\xb2\x1c\xee\xdf\x28\x63\xc7\xb3\x69\x4c\x80\xed\xbb\x29\x32\x06\x0d\x6e\xbc\x14\x90\xbc\x89\x3e\x8c\x1c\x93\xd9\x1a\x80\x8a\xdb\xe8\x12\x72\x31\xc0\x2d\x00\xd4\x31\xcb\x59\x7e\x13\x02\xee\xd7\xfd\xcf\x50\x26\x6e\xe2\x8a\x32\x3e\x8d\xa9\x02\x71\x8b\x0c\xaf\x95\xb8\x0d\x21\x91\x64\x70\x9f\x2a\xe3\x31\xbd\xa2\x88\x07\x79\xaa\xef\x2a\x16\x4d\x16\xc9\xd8\x23\x55\x5a\x54\xc7\x7a\x62\xd0\xaf\x14\x0d\x75\xda\xa3\x1b\x54\x6e\x50\x4b\x32\x72\x43\xf2\x70\xca\x9a\x6e\x96\x17\x6d\xd7\x14\xfb\x6b\x6f\xb9\xa7\xfb\xac\x49\xda\xef\x2f\xc9\x6c\x9f\x35\x6d\x32\x6b\xcb\xe2\xc0\xa6\xe9\xc0\x43\xed\xa9\xc8\x5a\xc8\x35\xf4\x50\x0b\xee\xdf\x8b\x42\xe5\xd9\x95\xec\x3b\x2b\x13\xf1\x8f\x4e\x11\x74\xb9\x96\x25\xcb\xe5\x45\x6e\xd4\x1a\xb2\x2a\xf7\xe3\xf6\x13\x1d\x8e\xca\x0d\xe9\xc7\xec\xcc\xaa\x6b\xc2\xff\x3b\x2d\x8b\xb6\x4b\x32\x90\x28\x60\x93\x0e\x29\x10\x44\x4e\x01\xa9\x33\xd0\xa0\x83\xdb\x84\x45\xd5\xb2\x8e\xaf\x74\x52\x6d\xff\xf1\xb9\xcf\xe1\x6d\x1a\x25\xa7\xd0\x71\xa3\xb6\x69\x82\x30\x9e\x2e\xe5\x3a\xcb\xca\x55\xae\x7a\xdb\xc3\x54\x38\x12\x24\x6b\x51\x6c\x29\x8f\x03\x2b\xa1\x80\x6b\x31\x5b\xeb\x51\xbc\x7e\xec\x7f\x5c\x3c\xf1\x6b\xdf\x7b\xca\xf5\x30\xdb\xdb\x07\xcf\x35\xae\xc8\x99\x85\xe7\x60\x65\x7b\x56\x2a\x98\xbe\x34\x11\x19\x45\x12\x37\xe9\x8e\xf8\x22\xdb\xed\x91\x3d\x1d\xb3\xa7\x5d\xc9\xba\x8e\x35\xd3\xb6\xf7\x71\xaa\x97\xde\x79\xb0\x69\x9b\x8e\x96\x99\x54\x25\x85\x99\x41\x50\xb9\x10\x4f\x4d\x6a\x18\xc7\xb1\xfd\x09\x45\xe0\x50\x97\x65\x76\x69\x59\x3e\xad\xab\xf2\xfd\x17\xb3\xa2\x06\x3a\x57\x36\x99\xb4\xa3\x87\xc3\x13\xbb\x24\xdb\xe7\x4d\xca\x33\x77\x8c\xa1\xed\x8a\xd6\xcb\xd6\xb6\xd9\x8b\xe9\x51\x4b\xfb\x27\x0b\x12\xf5\x0b\xcf\x50\x02\x55\x1a\x71\x52\x0c\xaf\x68\x36\x17\xf3\x01\x3e\x42\x95\x57\xab\xfe\xd4\x6e\xad\xc3\x97\x27\x3d\x71\x9d\x35\x79\x0f\xc8\x71\xd6\x08\x0a\x33\x99\x9f\x68\xba\x2f\x19\xcb\xf5\xb4\x4b\x31\xe4\x69\xac\x4a\x66\xa5\xb5\x49\x3f\x64\x72\x1f\x2b\x45\x8e\x93\x11\xc8\x6c\xa5\xd2\x4a\x46\xd5\xd5\x09\xaf\xec\xe4\x0f\xf3\xcd\x63\xba\xca\x27\x7f\x98\xe7\xcf\xab\xcd\xe3\x83\x9a\x57\x97\x40\xa5\xfb\x36\x06\x6d\xb6\x48\x2f\x6f\x56\xb3\xf1\x4f\x4e\x96\x24\x7f\x9e\x22\x32\xb3\xdc\x13\x95\x66\xc4\x4f\x4f\x5a\x3c\x73\x85\x65\xe5\x19\xf1\xe3\xcf\x94\x2d\x0d\x80\x69\x03\x08\x58\x09\x2d\x10\xdd\x34\x35\x57\xa3\x23\x92\x35\x6d\xb7\x7b\x76\xac\x1b\x76\x93\x3e\xc6\xe5\x4d\x7b\x3a\xfd\x24\x32\xd4\x86\xd8\x16\x10\xf3\xd5\x4f\xc9\x4f\xda\xc7\xe2\xae\x18\x92\x74\x4a\xea\xbe\xc8\xe2\xd4\xbb\x75\x3e\x39\x59\x95\xc3\x74\x44\xa6\x53\xd7\x76\x0d\xeb\x0e\x27\x7c\xf9\xc1\xaa\x7c\x67\xae\x21\xc5\xba\xc0\xcb\xe9\xd7\x2c\x52\x47\x46\xd1\xf9\x8c\x6e\xec\x9b\x8c\x20\x47\xd3\x68\xd9\xa1\xae\x72\xfc\x9d\x3d\x31\xd8\xb4\xa3\x20\xdd\xd6\xa4\x1f\x42\x89\xfa\x23\x55\x1d\xbf\x9a\xa1\x36\x0c\x57\x30\xcd\x15\x8e\x33\xd3\x24\x2e\x9b\xa1\xaf\x21\x14\xd9\xc3\x6a\x99\x8c\x20\xf5\x4c\x5f\xae\xfd\x54\x27\x55\x76\xb1\x4e\x8d\xd5\xaa\xd4\x3e\x65\xe9\xf8\x2c\x6b\x1a\x68\x42\x94\x81\xea\xaf\x7f\x54\x53\xf0\x74\xdd\xfb\x29\x63\xe6\x25\xbf\xb8\x20\x09\xd9\xc7\xac\xaa\xbb\xe2\x58\x1c\xb8\xb1\xb9\x59\x2e\xdc\xe0\xc0\x61\x53\xab\x89\xc9\xb5\x87\x55\x39\xcc\x95\xad\xd7\xaf\xae\xb9\xb0\x16\x6c\x36\xad\xe6\x5a\x55\x36\x2d\x36\x67\x7b\xdb\x4d\xb3\xa3\xf9\xa5\xb3\x65\x93\x63\x4d\x53\x5b\xd3\xe7\x2a\x7f\xcc\x57\x70\xdf\x74\x87\x6f\x13\xdb\xc4\x0e\x59\x75\x60\xbd\xd3\x6c\xcf\xc7\x2b\x96\xc1\xf3\x30\x7b\x17\x4c\x3a\xf8\x36\x41\x99\x89\x08\x9f\xdc\xd1\xe4\x8c\x2e\x0d\x99\x70\xc3\xa0\xf1\x98\xf6\x3f\xce\x46\x06\x96\x7c\xc2\x26\x66\xbd\x15\xbc\xfd\xc3\xe3\xf3\x1e\xde\xf7\x74\xae\x05\x3a\xca\xe0\x4e\xc6\x7f\xd8\x67\xc7\x79\x7e\x80\x57\x3f\x6c\x5a\x72\x4d\x66\x93\x13\x6b\x33\xfb\xab\xf5\x1e\xda\xa7\x54\xc4\x7d\x2d\x63\xfb\x87\xfd\x81\xb1\xc3\x1c\x46\x9e\xd8\x02\xcb\xd5\x9f\xd3\xa7\x4e\xe2\xf8\x4f\xa9\x88\x93\x3b\xf8\x53\x1a\x2c\x33\x09\xe0\x0a\x27\xfd\x78\x7c\x9c\x5e\xb2\x97\xa2\x12\xb6\x42\x81\x67\xfd\x8f\x59\x92\x18\xbf\x4f\xab\xeb\x79\xcf\x9a\x76\xb0\x2c\xe6\x5a\x82\x2b\x3e\x5f\x2a\xb0\x6d\x55\xbf\x36\xd9\x65\x27\xac\xcd\x82\xa4\xd7\x77\xf9\x84\x64\xc6\xde\x3a\xb2\xf0\xd2\xb0\xef\x45\x7d\x6d\x6f\xd8\x88\x90\xd9\xd9\xac\xc5\xaa\xda\xdb\xdd\xa1\xd2\x1b\x3b\x7e\x84\xd7\xe6\xa9\x83\xda\x66\xf3\xd4\x24\x00\xa2\xea\xa3\x77\xd0\xa8\x4c\x73\xfa\x88\x5c\x66\x60\xf0\x49\xa5\x1c\x41\x9f\x58\x01\x18\x2d\x17\x79\xe4\xa7\xce\xef\x2e\x4d\xfd\xd2\xc8\x28\x1c\xbe\x49\xa5\x76\x91\x36\xfd\x52\x42\x26\x3c\x1c\xf2\x1c\x8a\x56\x37\xf2\x42\x2f\xd2\xb4\x07\xe4\x4b\x0b\xfe\x69\xaa\x70\xcc\xe4\xd1\xe9\xcf\x1f\x72\x41\x81\x9a\x42\x63\xab\x39\xb4\x2b\xad\x56\x7a\xdb\x96\x5d\xb2\x26\xeb\xd8\xce\xe1\xc1\x97\x3a\xc5\x1b\xcb\x6f\xfc\xcf\x69\x99\xbd\xd7\xd7\x6e\xcb\x3f\xd9\x20\x49\x97\x8b\xbd\x7e\xbd\x7a\x60\x65\x59\x5c\xda\xa2\x75\xd7\x13\x1a\xb3\x68\xeb\x32\xeb\x58\xee\xae\x8e\x04\xc8\x6b\xd1\x9d\x78\x6e\x4b\x1b\xc0\xf2\xd3\x7b\xa7\xd4\xdc\x95\x31\xcb\xf8\xc2\x46\x17\x3a\x94\x7f\x11\x1f\x30\x2e\x6a\x13\x42\x8b\x2b\xb7\x5a\x93\x2e\x9f\x20\x1f\x4f\xa6\x59\x00\x78\xfd\x0c\xc4\xaa\xbe\x8d\xf8\x8a\xb0\x6b\x44\x6e\x71\xee\xe9\x95\xec\xd0\xb1\x7e\xe1\x8f\x3c\x1b\xd1\xff\x8c\x23\xa3\xf7\xbb\x6d\x1c\x0e\xd5\x35\xc5\xc5\x8f\x5e\x75\x27\xb1\x13\xf1\x8d\x7d\x67\x15\x2a\x95\xdc\x9d\xfc\x22\x0e\xe4\x61\xbd\x1a\xdf\x9c\xcf\xd0\xe2\x4e\x33\x27\x73\xbe\xcd\x64\x18\xbe\x01\x87\x6f\x10\x9f\x1a\xc6\xa6\xff\x72\xcd\x9a\x8e\x35\xed\x40\xc5\x2d\x93\xae\xef\xe3\xfa\x67\x8b\xc2\x6b\x3d\xed\x4e\x45\x93\xdb\xd8\xfa\xbb\xc4\xdc\x6c\x66\x9b\x8d\x85\x7c\xca\xca\x23\x44\xeb\xbf\x48\x84\x75\x6a\x41\xd7\x15\x13\x24\x21\x8a\xfe\x2c\xf1\x96\xcb\xd9\x72\x89\xa0\xca\x9a\xb8\xc8\xb2\x40\x3b\xf7\x76\x0d\x9b\x6b\x75\xc8\xf8\x17\xab\x8a\x43\xc1\xcd\x1a\xc5\x3b\x62\xb0\xbb\xb3\x20\xe4\x55\x65\x4d\x53\xbf\x42\x36\xe2\xdb\xcd\x5c\x49\xf5\x6b\xa7\x44\xfe\x32\x1b\x46\x13\x20\xf2\x8b\xa1\x15\xe0\xf3\x09\x23\x6f\x42\x83\xcf\x5a\xa1\xc4\xda\xd6\xe5\xc6\x2d\x33\xc4\xe5\x9f\x54\x73\xf6\xbf\x1b\x96\x5c\x1a\x72\x93\xc2\x1c\x62\xcf\x25\xe6\xd3\x6c\xa9\xff\xef\x67\x83\x02\xf8\x6e\xc9\x62\xc9\xa1\xb6\x18\x7a\xd5\x93\xff\xf7\x68\x92\x82\x05\x90\xd6\x12\xd2\x5a\x0e\xea\x61\xd6\xc6\x56\x96\x15\xc4\x5a\x99\x3a\x89\x55\x06\x16\x40\x5a\x6b\x48\x6b\x2d\x69\xad\xe6\x44\x6d\x60\x01\xa4\xb5\x81\xb4\x36\xc3\x18\x33\x08\x38\x23\xee\x11\x62\x3d\x2a\x2c\xaa\x6b\xd6\x9e\xbe\x79\x82\xb4\x9e\x4c\xb3\x80\xd5\x66\xe3\xe9\x9b\x67\x48\xeb\x79\x30\x4e\x06\x01\xc7\x54\xcd\x53\x4b\xd1\x52\xa5\x69\x54\xef\x3c\x79\x7a\x67\x6e\xab\xad\xd2\xdb\x67\xaa\x7f\x9e\x89\xfe\x49\xb2\x81\xd2\xf0\xee\x81\x5c\xd1\xd8\xde\xe6\xb5\xca\x59\x53\x16\x15\x03\xbb\x25\xab\x34\x35\xe9\x19\xab\x32\x93\xb4\xb9\x58\x83\x0e\x12\x1a\xbb\x60\x6d\xc7\x68\x06\x3c\x87\x36\x58\x51\xa8\x34\x16\xd4\xf6\x81\x81\xd8\xcf\x7b\xc4\xac\xa6\x5f\x33\x01\xe0\x86\x5d\xe2\x7f\x9f\xf4\x01\x30\x3f\x5a\xb4\x9b\xc1\x3e\x4d\x15\xde\x0a\xf4\x7a\x30\x11\x39\xd1\x69\xfb\x9a\x75\x87\x53\xbf\xfa\xcc\xd9\xb4\xed\xb2\xee\x2a\x57\x50\x93\x59\x57\xd7\x65\x57\x5c\xb6\xdb\xec\x28\x66\x91\xd7\x7a\xda\x76\xec\x22\x33\x93\x53\xd9\x9c\x61\x5d\x86\xd9\x1e\x4e\x27\xa2\x66\xb0\xd4\xdc\x3c\xf7\x51\x31\xd5\x07\xa3\x93\x64\x37\x7c\xab\xca\xf4\x10\x8c\xe4\xfd\xf8\xfa\xc6\x2f\x01\xf0\xac\x48\x39\x62\xdd\x19\x83\x89\x8e\x29\x70\x08\xcb\x25\x07\x92\xef\x9f\xa2\x32\x74\x1d\x41\x4c\x02\xdc\xf4\x1e\xf3\x4f\xba\x5d\x2e\x6f\x3b\x9d\x59\x9e\x9d\xf9\x96\xb2\x08\x22\x18\x32\xf1\xb3\x33\xb2\x05\x6d\x6f\x51\x17\x55\xc7\x9a\x69\xef\xdc\x75\x2d\xd9\xb2\x42\x9a\x59\xd6\x1e\x82\x22\x1b\x40\x83\xd8\xff\xed\xff\xfa\xdf\x7e\xf2\xd0\xcd\x59\x0c\x61\x03\xca\xa4\xfc\x5f\x1d\xca\xae\xfe\x0d\x46\x4c\xed\x18\xc8\x72\xe9\xf8\x8a\x5d\x9e\x8e\x35\xea\x84\x41\x84\xc7\xc8\xd6\x11\xc7\xb7\xc5\xef\xbd\x8a\xea\x61\xfb\x86\xd1\x70\x56\x9d\x72\x0b\x7d\x3e\x79\x7e\x56\xd1\x69\x34\x5e\xd2\xe5\xe0\x78\x92\xd6\xa4\x10\xaa\x6a\x26\xb7\xfb\x1d\x4d\x5a\x5e\xde\xe4\x6b\x1b\xf0\x75\x8e\xe9\xdc\xd9\x51\x36\x2d\xac\xda\xc9\x02\x02\x89\x51\x78\xdd\xf7\xad\xce\x43\x0b\xec\x6c\xfe\xf8\xa6\x0f\x4e\x0b\x39\xfa\x83\x2b\x62\x21\x7f\xda\x3b\x9e\xc3\xc1\x98\xf2\x46\xe7\xc0\x2f\x34\xc4\xeb\xfd\x6b\x1e\x3d\x43\x7b\xbe\x43\xc8\x08\x30\xec\x9a\x9a\x78\xbd\xc1\x5d\x87\xf6\xcd\xc8\x9b\x6d\xc4\x54\xe4\x5b\xfd\x0e\xdb\x02\xd8\xc2\x79\x81\x1d\xfd\x89\x17\x92\x26\xf2\x5f\xcb\x5e\xb5\xde\x28\x3f\x6b\x46\x02\xa6\xa0\xaf\xa5\xb9\xcf\x62\xd6\xde\xfc\x3e\xcc\x10\x7a\xfb\x4a\xc8\x84\xcd\xce\xd8\x6c\xde\x26\xd7\x12\xfa\xf7\x73\xe3\xd8\xbf\x51\x87\x72\xaa\xa2\xc3\x1a\x44\xcf\x1b\xf6\x46\xa2\x2f\xe2\xe3\x23\xd4\x4e\x08\xba\x8c\xdc\x20\xe2\x36\xe4\x1b\x54\x70\x18\x83\x83\xef\x01\x66\x08\x01\xbd\x39\x87\xe1\xea\x2d\xa5\xf6\xba\xaf\xb2\xef\xc3\x38\xe6\x7b\x37\xe2\xfc\x70\xde\x2b\x80\x38\x18\x5e\x0f\xb3\x41\xba\xfb\x7d\x5a\x54\x39\x7b\xeb\xd7\x35\x36\x9d\x5f\xfe\x68\xaa\xea\x7a\x78\x25\x24\xe6\x60\xc7\x12\x49\xd6\xa6\x67\xf1\xc2\xf7\x0d\xfa\x31\xa6\x03\x22\x94\x8e\xf2\xb5\x96\xed\x10\x0d\x47\x51\xb3\x27\xbe\xad\x06\x02\x25\x87\x28\x33\x39\x82\x0d\xf2\xb3\xaa\x9e\x8a\x68\x34\xf5\x6a\xcf\xe4\x50\xe7\xec\x06\xbf\x69\xdd\x35\x31\x8b\xc1\x6f\xb2\xbf\x47\x9d\x1d\x21\xf4\xb0\x73\x22\xa8\x16\x38\x1e\x76\x3c\x21\x0f\x24\xbc\x78\x87\xfa\x7c\x29\x99\x75\x5a\x23\x8f\x35\xbd\x88\xee\x09\x14\xf2\xea\x9f\xcb\x0e\x3f\x6a\x72\x9f\x9e\x75\x30\x4f\x75\x59\xd6\xaf\x4e\x8c\x96\x35\x34\xad\x53\x5c\x87\x8a\x11\x9a\x6f\x5c\x50\x91\xf6\x3e\x91\xac\x8b\x4e\x6c\x6b\xf5\xcb\x5c\xf5\xfb\xda\xf8\x7d\x63\x3f\x50\x24\xf7\x08\x79\x39\xdf\x55\xec\x27\xab\xa6\xae\xcf\xe0\x89\xa5\x1e\x28\x9b\x64\xf0\xfc\x3a\xb4\x00\xfa\xe0\xba\x28\x80\x0f\xd7\xa6\x61\x55\xf7\x0f\xfd\x1f\x56\x55\x87\x93\x59\xe7\x50\x96\x4f\x43\xe8\xcc\xe4\x75\x50\x3e\x66\xec\xbc\xef\x4d\x77\xd6\x16\x87\x69\xde\xd4\x97\xbc\x7e\xad\x30\xff\x01\x83\x53\xb1\x03\x88\xb7\x20\xa6\x58\x7e\xc8\xa0\xcc\xca\x3c\x05\x13\x39\x38\x17\xf4\x51\x9f\x8a\x28\x3f\x65\x04\xfd\xa0\x22\x98\x50\x5b\x43\x14\xb8\xef\x99\x32\x7b\xb7\x6d\xa3\xed\x7b\xa5\x93\xfe\x67\xb6\x7e\x30\x57\x14\xe6\x4b\x61\x43\xc5\xa4\x1f\xa4\x1f\x27\x43\x5c\x63\xaf\xd8\xaf\x75\x73\x3e\xd5\x25\x9b\xd6\x4d\xf1\x52\x54\x56\x7c\xae\x42\xbe\xd4\xaf\xac\x91\xab\x90\x69\xd7\x14\x2f\xf8\xbb\x9c\xbd\x7f\x04\x03\xc8\x1f\xd7\x7a\xbe\x9f\xbe\x05\xb6\xf5\xcc\xe7\xd0\xc4\x4a\xe0\xda\x6a\xae\x30\x62\xde\x29\xb0\xd6\xbe\xb4\xd4\xee\xe2\x44\xd5\x98\x7b\x07\xbb\x43\xc9\xb2\xa6\x5f\xef\x9e\x7c\x54\xa6\x7a\xea\xf5\x70\x02\xd7\xd7\xac\x90\xb6\x2c\xcb\xe8\xd5\xb4\x51\x28\xbd\x07\xb4\x4c\xb8\x1a\x76\x91\x75\x51\x04\xed\x7c\x5d\x8b\x3d\x2b\xeb\x57\x4f\x1d\xfe\x9c\x35\x45\x36\x65\x6f\x97\xac\xca\x59\xfe\x77\x5d\x73\x65\x7f\x99\x04\x68\x16\xd5\x94\x07\x9a\x8f\x24\x7b\xbb\xff\xb8\xc5\x2f\x4f\xb6\xaf\xbf\xdf\x2b\x4c\x57\x5f\x70\x49\xfa\x02\x5c\x0c\xc0\x02\x89\xb8\x7f\x7e\x7e\xb6\x96\x28\xee\x00\x41\x8e\x79\xf1\x31\x83\x32\x95\x3b\x2e\x3c\x58\x96\x5e\x4b\x9b\x01\xf8\xd2\xcc\xe8\x48\xa2\xd4\x5e\x5d\x49\xc7\x98\x1b\x55\xd9\x02\x6d\xf7\x5e\xb2\x2d\x57\x3d\xb8\xb8\x79\xbc\xbc\x25\xab\xde\xdf\xb4\x2f\x61\x64\x99\xf9\xbe\x19\x78\xeb\x4c\xa8\xf9\xfa\xf2\xe6\xef\x4c\xac\xab\x92\x50\x13\x0c\x2e\x56\x53\x77\x59\xc7\xbe\xcd\x9f\xd2\x9c\xbd\x3c\xa0\x6d\xc7\x87\xff\x74\xdf\x61\x2d\x67\x2d\xb0\x65\x34\xa3\x21\x34\x6a\x29\xce\xd7\xb2\x2b\x2e\x25\x9b\xf2\x2b\x16\xc2\xbf\x38\x66\xe7\xa2\x7c\x57\xe6\xca\x98\x51\xd5\x17\xf3\x8c\x1d\xed\x30\xd3\xca\x2a\x24\xea\x3a\x91\xf4\x49\xb6\x60\x12\x2f\xeb\xac\xdb\xf6\xaa\xed\xce\x8b\xce\x23\x74\xfd\x5c\x53\x75\x22\x5e\x35\xba\xa6\x5b\x75\x71\x07\xdb\xa9\x62\xde\x99\xc5\xa6\x04\x2e\xae\xe8\xd7\x71\x77\xc3\x80\x1a\x45\x4c\x35\x13\xff\x73\xfa\xb5\xa4\xcf\xf5\xef\x5f\x4d\xb1\xfd\x8c\xa0\x9a\x5c\x7d\xe9\x75\xb9\x45\xd7\xba\x61\x3c\x77\x5b\xe3\xa5\xc9\xde\xad\x80\x80\xd5\xe5\x4d\x89\xb3\x5c\x2e\xb1\x70\x8a\x55\xff\x63\xc4\xf8\xad\xdc\xdb\x6a\xae\x76\xcf\x67\xab\xb5\xa9\xae\x52\x6e\x71\xe7\xbb\xff\xef\x92\x50\x4b\x5d\x87\x86\x9d\xeb\xef\x8c\x0f\x6a\xdc\x05\x0d\xa1\x89\x18\x7a\xee\x56\x3f\x0c\xaf\x9d\xae\x71\xe3\xcb\xb2\xe6\x30\x9c\x1f\xaf\x08\xe1\x04\x98\xb4\x09\xee\x3e\x8b\xe9\x01\xa8\x99\xc7\x70\x05\x5d\x83\x81\xd9\x83\xa1\xa1\xb9\x8d\xda\x67\xf9\x0b\x9b\xcc\xf8\x63\xca\x53\xe3\x71\x4c\x11\x48\x62\xaf\x6f\x83\x52\x03\xf7\x26\xd2\x0d\x01\xc4\xb4\xcb\xef\x75\x67\x68\x2f\xc8\x71\x34\x5d\x75\xb4\x43\x7c\xec\xf3\xe5\xb0\xd7\xa8\x84\x0c\xf8\xfe\xdc\xc7\x88\x76\xf5\xdc\x9d\xab\x3b\xdc\x9d\x7b\xc4\xe4\xee\x1e\xea\xb3\x46\x12\x50\xbe\x9d\x7d\x09\x24\xca\x97\xfd\xac\x33\x35\x56\x46\x33\xd6\x08\x21\xa7\x4c\x62\x59\xb4\x9d\xf4\x66\x78\x55\xa2\x17\x1d\x3e\xaa\x7f\x6e\xea\x92\xfd\x5d\x4f\x7a\x5f\xbf\xfd\x45\x07\x36\x4c\xdf\x85\x0f\xa5\x48\xea\xef\xed\xa1\xa9\xcb\xb2\x1f\xad\x5d\x7d\x3d\x9c\xf8\x79\xa7\xd2\xed\x85\x8c\xba\x27\xb9\xd9\x5b\xff\xc3\xc0\x7f\x22\xcc\x4f\x6f\x98\x2f\xc2\x9b\x52\xd3\xb4\x74\x7c\x0d\x2f\xd5\xbd\x6f\x3b\x8e\x16\xea\x99\x09\x89\x51\x1d\x14\x45\x21\xa9\x90\x25\x6e\xac\xa4\x26\x03\x15\x2d\xa4\xfc\x7d\x37\xe6\x2e\x0f\x13\x91\x1b\x26\x24\x8d\xf5\xd3\xf3\xe3\x71\xbf\x73\xb7\x1b\xdc\x06\x9c\x56\xd9\x59\x6f\x91\xe4\xec\x98\x5d\xcb\x6e\x67\x9d\x45\xf8\x3c\x07\xb4\xd9\xe2\x3d\x2f\x70\x63\x18\xb5\xfc\xa2\xb9\xcc\x7b\x74\xc2\x62\x7b\x55\x0c\x55\x81\x40\x89\x68\x09\x78\x8b\x88\x9a\x46\xef\x61\x22\xc7\x0c\x60\xb0\x4a\x47\x33\xc0\xc8\xdc\x2b\x27\x52\x65\xaa\x59\x55\x77\xe7\x45\xf3\x77\x4d\x57\xfe\x65\xf0\xe8\xc4\x2e\xe3\x26\x12\x0f\x15\x26\xa4\x05\x51\x44\x50\x55\x11\x33\x78\x6c\xa5\x50\xba\x96\x4f\x7a\xbf\x80\xd4\xca\x8c\xfb\x98\x5c\xd0\xfb\x85\x34\x17\x9e\xe2\x9d\x7f\x7d\xca\x51\x54\x45\x57\x64\xe5\xfd\xb4\x87\xb5\xa9\x3c\x41\x89\x22\xad\x26\x48\x3f\xed\x2f\x1a\xad\x72\x4d\x4c\x0d\x83\x1f\x27\x8b\x35\x1a\x1b\x79\x6e\xf3\x83\xe4\x40\xb9\xfd\xd8\x5a\x63\xed\xcc\x87\x53\x76\x38\xd4\x4d\xce\x63\xca\xf5\xaf\xfc\x56\xe8\x04\x2f\x12\x71\x47\x51\x27\xbb\x56\xea\x8e\x47\xe3\x8c\x9a\xe4\x6a\x9e\x22\x7a\x24\x00\x87\x8d\x84\x7f\x68\x1c\x25\x3b\x1e\xe2\xc2\x5b\x75\x90\xfd\x86\x96\xc1\x38\xcc\x0c\x44\x36\x05\x8e\xb4\xfd\xe7\xe1\x84\xa0\xbc\x23\xc0\x4d\x3a\xec\xbc\xb9\x64\x6f\xdb\xb9\x87\x02\x79\x3b\x25\x80\x53\x54\xf0\x62\xaa\x0a\x17\x20\x91\xec\xbf\xf5\x09\x8c\xb1\x2e\x05\xc6\xde\xa7\x29\x36\xc1\xae\x7e\x79\x29\x99\x48\xa1\xd3\xfb\xf5\x7c\xbd\x8b\x9c\x28\xf1\x35\xec\xcd\x3c\x6c\xb5\xce\x61\xdd\x3b\x0a\x58\xce\x12\x10\xc9\xfd\x0f\x75\xce\xfe\x43\xd1\x34\x75\x33\x99\x1d\xce\xd3\x76\xda\x7b\xe8\x92\xa2\x51\x78\x03\xf9\x6a\xb8\x20\xd8\x55\x34\x32\x25\x8e\x8d\x63\x07\x6c\x58\x4f\x5e\x3f\x3d\x60\x08\xf2\x90\x92\x3c\x5c\xa4\xa2\x55\xf4\x83\xe9\x0e\xc5\xf6\xba\xef\x4a\x24\xfa\xc7\xbc\x40\xbb\x7c\x80\x39\xb3\x14\x11\xfb\x0a\x1d\xbc\x25\xe7\xc1\x41\xeb\xee\xdc\xd9\x75\x71\xbc\xd5\x57\xb7\x54\x88\x2b\xff\xfc\x6d\x63\x87\x22\x51\xfd\xa1\x1f\xa8\xba\xdb\x63\x0e\xde\x5d\x80\x2f\xe6\x01\x1c\xb4\xee\xc3\xcb\x91\xa0\xe2\xc6\xd3\xb4\xbe\x7e\x97\xd1\x3a\x78\xc5\x75\xee\x3f\x87\x28\xd5\xf5\xe6\xd3\x6b\x54\xf5\xad\x0b\x8f\xc6\xcd\x46\xe7\xfd\x38\x13\x05\xef\x78\x93\x21\xa8\xff\xf0\x8a\xa4\xa7\xfa\xfc\x7e\x25\x11\xa4\xa5\x9e\x0a\xb4\x09\x12\x55\x1f\xba\x81\xaa\xb7\x1b\x06\x01\x2f\x62\x7a\xb1\x46\xaa\x3d\x78\xe0\xcd\xd7\x00\xf2\x5e\x28\xd1\x06\xea\x85\x2e\x84\x2c\xd5\x0c\x8f\x93\xf9\xd3\x66\x32\x5f\x3c\xfb\xf4\xbf\xc2\x14\x00\x09\x25\x01\x28\x23\x9b\x60\x78\x5c\xc9\x53\x7f\x75\x6b\x95\x1a\xf8\xf2\xc1\x07\x9b\x26\xa5\xfe\x43\xdc\x23\x55\x77\xf1\x92\xc9\xa8\xba\xeb\x37\x58\xe2\xeb\x3e\x3c\x85\xf2\x75\x75\x57\x34\xef\xaf\xbb\x7b\xeb\x17\x5e\xec\xf5\x62\x8d\x6c\x01\xf0\x5e\x81\x6f\x00\xc8\x7b\xc6\x78\x23\xe8\x84\xf3\x08\x59\xa2\x1d\x56\x9b\xc9\xfc\x71\x33\x59\x3f\xd2\xed\xe0\x5e\x57\x86\x37\x92\xbd\x58\x23\xdb\x01\x64\x08\xf7\x4d\x04\xf2\x82\x34\xe1\x03\xa8\x14\xcf\x08\x59\xd2\x0b\x48\x27\xf3\xd5\x62\xb2\xf4\xce\x04\x15\x1e\x0c\x82\x84\x6b\x59\x48\x23\x9b\xc1\xcc\xcb\xeb\x69\x05\x75\xb1\x1b\x6f\x05\x9d\x63\xd5\xa5\x4a\x35\x42\x9a\x4e\x36\xab\xc9\x7a\x41\xb7\x41\xac\x1f\x27\x8e\x5a\xb4\x47\x3a\x1f\x6e\x9e\x0d\x20\x3a\x1b\x88\xe4\xb4\x59\x3c\xae\x9f\xa1\x75\xcf\x9f\x73\xc6\x36\x1f\x32\x0f\xa9\xf0\x89\xed\x93\x2d\x70\xcc\xe3\x5e\x3a\xe5\x3c\x4d\x10\x73\x31\xe4\xdc\x94\x05\x90\x09\xfc\x73\x2a\x22\x8b\xbd\x20\x7c\xa9\xe3\xb9\x52\x89\xac\xb7\xdc\xa5\x10\x58\x2a\xf1\x95\x42\x5e\x34\x52\xf8\xa6\x7e\x05\x79\x48\xf6\x59\xcb\xc4\xf5\x9e\x1e\xae\x5f\x3b\x6c\xe5\x02\x22\x54\x93\x64\x76\xb9\x96\xa5\x58\xc2\x44\xd4\xca\x04\xbf\xb9\xe9\x6b\xc2\xad\x72\xef\xda\x37\x48\xd9\xb3\x30\x8c\xc2\xd5\x63\xcc\x3d\xb9\xb2\x82\x20\x47\x90\xfb\xc5\x2a\x35\xd2\x65\x0d\x67\x49\x20\x61\xda\xa3\xab\xaa\x18\x0b\x94\xb0\x71\x11\x7e\x48\xac\x37\xea\x14\xca\xcb\x17\xf0\x00\x5a\x6d\x99\x1e\x52\xcb\x9d\x18\x7c\x37\x3f\x58\x50\x82\x19\x91\x2b\x0c\x2e\x72\x47\x92\xf9\x55\xee\x43\x7d\x2f\xd8\xab\xb9\x55\xf3\x2b\xdc\xde\x19\x4b\x35\x66\xd7\xe7\x73\xfd\x81\xac\x4d\xd4\xab\xef\x56\x38\xd2\x7a\xfd\x94\x66\xd6\x22\x35\x48\x7d\x48\x16\x70\xff\xf1\x6d\xd0\x04\xb9\x57\x33\x3e\xb5\xf9\xe4\xe5\xd7\xd4\xaf\xe6\x06\x0e\x99\xd8\x49\x19\xd4\x30\x39\x7b\x24\xf6\x1c\x8c\x0a\x21\x53\x8f\xde\x8f\xf8\x15\x35\x90\xe8\x60\xf2\x6d\xb3\x44\xd1\x36\x2d\x0f\xa9\x03\x24\xb6\xa9\x02\x66\xda\x21\x32\x23\x11\x42\x98\xef\x41\x04\xab\xec\x49\x43\x74\x07\x79\xa4\xd6\x64\xb3\xa1\x04\x90\x8a\x23\xfb\x2e\x58\x26\x25\x84\x03\x9f\x9e\xc2\x9d\x6e\x5e\x46\xf2\x6d\xb3\x44\x91\xc7\xfa\x5d\xed\x54\x44\x11\xc0\xba\xde\xbb\x01\x43\x92\xef\xed\x54\xb0\xf6\x68\xf6\xa8\xbb\x48\x23\x35\xc7\xdb\x0d\x43\x46\x6a\x6d\xef\xbb\xc0\x94\x57\x08\x5d\xb9\xf1\x10\xae\x32\x9d\xe7\xca\xaf\xf2\x04\x03\xac\xe2\xea\x15\xf5\x48\x12\x58\xf5\xdd\x5d\x17\x2c\x5d\x17\xaa\x56\x55\xb8\xdf\x3d\xa9\xb8\xfc\x8d\x80\x51\x47\x5a\x40\x3f\xc8\x19\x83\x8f\x54\x1f\xd9\x78\xc0\x72\x89\x21\x0c\x8a\xea\x58\xff\xb8\xea\x63\xd4\xc7\x54\x1f\xc3\xff\xd2\xea\xcb\xdd\x87\xf0\x28\xa0\x93\xa7\xf9\x5b\x80\x60\x80\x8d\x02\xf5\x32\x60\x24\x09\x6c\x14\xb8\x5b\x2f\x58\x0e\x38\x6c\x5e\x15\xbb\x0f\x61\xf3\x4f\x67\x7d\xf3\xb7\x03\xc1\x00\x9b\x00\xd4\x5b\x5c\x91\x24\xb0\x29\x00\xdd\x7a\x71\x92\xd7\xa1\xd6\xb6\x7a\x61\x4d\xb0\x19\x3c\xe9\xea\xfc\xcd\x80\xd3\x47\x5a\x41\x3f\x85\x13\x47\x01\x69\x04\x6c\xe7\x05\xc9\xb9\x67\x1e\xb9\xc9\xc0\xb7\x9b\x71\xf7\x67\x2d\x72\xdb\xf0\xa3\xb8\x53\xd6\x9e\x8a\x69\xc3\x32\x91\x2b\xda\x3d\xab\xe3\x00\xe6\x29\x1d\xb2\x2d\xcb\x0f\x01\x94\x08\xe0\x3c\xd7\xc8\xd0\x21\x43\xf2\xcf\x75\x55\xf3\x23\x47\x1d\xa2\x27\x02\x63\xcf\x75\xdd\x9d\xf8\x1b\x79\xd7\xae\xb6\xe3\x93\x4d\x61\x13\xb3\x72\x22\x81\x68\x3b\x41\x2b\x83\x41\x62\xe2\x9b\x8b\x17\xf5\xb4\x09\xce\x4e\xec\x01\x45\x70\x13\x80\x20\xf0\x56\x2c\x4c\xfb\x3a\x26\xda\xad\x20\xd8\xf4\xb5\x17\x59\x0a\x23\x58\x0d\xc0\x6a\x43\x6b\x79\x58\x3f\x3f\x3e\x06\x3b\x58\xbd\x97\x91\xe4\xc5\x77\xa0\x30\x32\xbc\x88\x50\x80\x10\x9a\xff\xa4\x73\xfe\xe0\xad\xf5\x76\x2b\xc8\xf0\xf0\x23\x0f\xdc\xaf\xed\x25\xab\x46\x01\xfb\x30\x3c\x2d\x3b\x1e\xe3\x4e\x46\xa8\x90\xa3\xda\xb2\xc7\xed\xff\x3e\xd4\xe7\x33\xab\x3a\x82\xaf\x05\x65\x67\xc0\x40\xe8\xb5\x5d\x53\x54\x2f\x13\xba\x68\xba\x08\xf0\x72\x29\x90\x40\xd3\xc5\xcd\xf2\xee\x10\xb6\xde\xb1\x01\x81\x6e\x3a\xd8\x74\xc5\xd6\x4f\x28\xb5\xef\x59\x53\x88\x34\x37\x9e\xc2\x60\x1d\x31\x2a\x1e\xb0\xa1\x9e\xf3\x3c\x63\xfd\xbc\x82\x30\xcf\xd9\x31\x40\x2e\x67\xc7\x88\xf6\xaa\x2f\xac\xc9\x3a\xd2\x70\xd9\x60\x11\x3a\xf1\x1b\x7b\x7f\xad\x9b\x3c\x40\x50\x42\x0d\x99\xbe\xf3\x7c\xfd\x88\xd2\xcb\xba\xfa\x1c\x20\xd6\x83\x28\x4a\x4f\xe9\x63\xce\x70\xc9\xce\xac\xcb\xd0\x9e\xec\xb2\x90\x06\xda\xa8\x08\x48\x97\xbd\x44\xb4\x77\xd6\x89\x07\x57\x70\x95\xfa\x97\x6b\x56\x16\xc7\x22\xa8\xc0\x28\x15\x04\x4e\xd3\x1b\xda\x39\x4d\x9f\xf0\x76\xbe\x34\x7d\x27\x77\xef\x01\x92\x0a\x2c\xa2\xae\xfb\x6b\x51\x76\x45\xe5\x1f\x3c\xcb\x00\x3f\x84\x88\x6f\xec\x2c\x3d\x35\x35\xed\xaa\x08\xc0\x12\xd7\x9e\xb4\x21\x8d\xb0\xc7\x28\x1e\x5c\x3b\xac\xfa\x1f\x92\xf1\x39\xeb\x0e\xbd\x33\xb3\x6f\xb2\xc3\x6f\x8c\x32\xc5\x1e\x0c\x27\x17\xcb\x90\x4f\xcd\xf4\x45\x63\xbd\x1e\x5c\x80\x80\x57\xc7\xdd\xa2\x8f\xd9\xa1\xbe\xbc\xab\xe4\x61\x56\x8e\xc5\x46\xbf\x4e\xa5\x8e\x2f\xf8\x7e\xa8\x81\x91\xc8\x77\xee\x64\x87\xe9\x8b\x40\x08\x08\x5f\x16\x75\x59\x57\x1c\x3c\x29\xd7\x10\xbc\xa4\xfd\x2e\x9f\x2b\x32\xb3\x2b\x7c\xcc\x0e\x65\x31\x7d\x2d\xaa\xbc\x7e\xb5\xdf\xdd\x31\xf6\x13\x4d\x8f\x78\xb8\xbc\x24\x8e\x96\x06\x02\x09\x4f\xe1\x60\xa4\x07\x00\x85\xc3\x39\x90\xb5\x1d\x37\xc0\xf0\x74\x1b\x65\xd6\xf6\x95\x03\x51\x6e\xf6\xfd\x5b\x5f\xcc\xb5\x9b\xb9\x61\x08\xbd\x5b\xb2\x33\x8f\x4c\x4f\xf8\x6f\xfd\x7f\xd0\x64\xc2\x91\x4f\xba\xc2\x05\x06\xcf\x60\x8b\x1d\xb1\x88\xc4\x76\xc3\xe5\x57\xfb\x84\xd4\xae\x9c\x7a\x68\x2d\xe2\x46\x7f\xa4\xa0\x13\x33\x7d\x4f\x0f\xa8\x83\xb1\x6c\xde\x66\xea\x10\x9f\x04\xb3\x7b\x5e\xff\x44\xde\xb0\x88\x6f\xec\x89\x92\xbd\xff\x9f\x75\xb6\xdd\x7b\x78\xbe\x9a\x84\x22\xe4\x63\x6b\x1a\x8c\xb4\x37\x4e\x8c\xa8\xd6\x78\x5c\xdf\x23\xec\xa5\x61\xc7\xe2\xed\x53\x72\x0a\x12\x64\x84\x03\x97\x4b\x98\x8a\xa9\xf9\x56\x0f\x78\xbd\xd1\x3d\xec\x1e\xfd\xfe\x31\x7f\x5a\x4d\x37\x00\x8c\x3b\x46\x72\xae\x60\x48\xbf\x0c\xe8\xe6\x49\xf7\x74\xce\x4f\x99\x10\x84\xc1\x6c\x98\xa5\xbe\x8c\x22\xd6\x95\x57\xe2\xd9\x53\x9c\x0b\x7c\x3c\x36\xc4\xcb\x1d\xcb\xe4\x60\xc5\x98\x9a\x27\x99\xa1\x0a\xe3\x38\xe1\x66\xf0\xc4\x04\xe0\x47\x81\x84\xa8\x43\x64\x47\xb4\xa4\x26\x4a\x9c\xa0\x81\x24\x70\xee\xb1\xa4\x93\xa8\xc3\x7c\x46\x4d\xdf\x81\xda\xd9\xf7\x87\x88\xfc\x15\x48\xac\xb8\x66\x50\x74\xec\x1c\x71\xa9\x6d\x44\xb2\x69\x4d\xda\x63\x1f\xc0\xb8\xd7\x8b\x95\x21\x13\xd0\x45\x9c\x9f\x3a\xa4\x1c\x88\x71\x66\x89\xa4\xeb\x81\xa5\xa5\x07\x4f\xdf\xd8\xa2\xe1\x73\xa5\x2e\x1b\x5e\xd4\x2b\x8b\xe4\x5a\xfa\xae\xe0\x3a\xcf\x46\xa4\x2e\x33\xec\xce\x8a\x98\xe2\xed\xe3\x72\xe3\xee\xec\x0a\xf3\x9c\x6c\xca\xbf\x5e\x4b\x70\x57\xd8\x2e\x4f\xec\x2f\x88\xbc\x58\xca\x16\xfb\x82\x7a\x04\xe5\x44\x0c\x02\x3c\xd3\xec\xf2\xf2\x96\xf0\x21\x51\x54\xc3\x5b\x0d\x97\x37\xda\xb1\xa1\xb8\xfc\xe2\x54\x08\xbf\xb9\xee\x78\x2b\x14\x41\x65\x7a\xc3\x80\xce\x63\x58\xca\x81\x1b\xfc\x34\x73\x57\x72\x31\x08\xa3\x0e\x54\x22\x85\x11\x2d\x19\x2d\x92\x6c\x78\xb0\x82\xd8\x80\xb6\x7e\x7e\x02\x56\xcb\x25\xc7\xce\x97\xee\x9d\xe8\xba\xa7\xcb\x5b\xc2\x73\x1f\xaa\x5d\x68\x79\xdb\x86\xe3\x4c\xd5\xb3\x86\xd6\xc3\x1d\xf4\x21\xb8\x69\x47\x01\x89\x04\xfe\xc9\x8f\x11\x78\xe2\xd0\x21\xbd\xc3\xc2\x7c\x81\x92\x5b\x25\xec\x9d\x6b\x2f\x55\x10\xf8\x94\x26\x0b\x95\xee\xd8\x24\xb1\xb3\x0c\x5f\x90\x60\xd2\x76\x4d\x5d\xbd\xd8\x06\x93\x89\x0d\xeb\xba\xea\xb2\xa2\xd2\xcf\x0b\x38\x09\xd1\xcc\x98\xb1\xc5\xfa\xfb\xc9\x1b\x2d\x28\xde\xee\x76\x9e\xa1\x13\x0f\x60\x63\x8f\x6f\x3b\x1d\xe1\xc8\x95\xc8\x0f\xaa\x2b\xa5\xce\xac\xbf\xbf\x9a\xc9\xd8\xc5\xc9\x86\x1f\x35\x11\x79\xfe\x6e\x58\xa7\xe0\x88\x6d\x97\x1d\x7e\x9b\x76\xcd\x90\x97\x21\xe6\xe9\x49\xfb\xac\x8a\x24\x5f\x16\xd5\x6f\x3a\x71\x8c\x30\x11\xeb\x61\x62\xd6\x7f\xfb\x4c\xc8\x8e\x6e\x0e\x4c\xf9\xe4\xbb\x6b\x66\xff\x52\x89\x40\xe4\x71\x8e\x93\x53\x56\x90\xb0\xdf\x1a\x85\xf3\xd9\x88\x3c\xa2\x52\x22\x20\x85\x98\x13\x45\x09\x5f\x05\x5c\x58\x65\x87\x24\x2f\x53\x7e\x33\x69\x3d\xdf\xcf\x17\x41\xa1\xd4\x36\x02\x06\xd8\x4f\xa6\x40\x7a\xd7\x69\xb7\x5e\xe4\x34\x1f\xd9\x1b\x52\x60\xf1\xdf\xca\xac\x63\xff\xf9\x1b\x2f\x7a\x18\x52\xaf\x2e\x52\x01\x27\xa8\x6a\x94\x84\x65\x2d\x9b\x16\x55\xbf\xca\x49\x66\x8b\x96\x92\x4e\x37\x01\xca\x2c\x7d\xa0\xf0\x12\xf9\x5d\xde\x01\x9c\x90\x60\x55\x7d\xce\xf2\x69\x59\xbf\xd4\xd6\xab\xd8\x14\x42\x0f\x6a\x58\x8e\xc0\xa3\x85\x98\x39\x31\x9f\xf5\x33\x1d\xd3\x05\x1f\xc7\x8a\x2f\xef\x1b\xa3\x19\x55\x09\xdf\x9d\xeb\xa7\x07\x7b\x52\x20\x93\x3f\xfe\x21\x65\xab\xf5\x32\xdd\xa9\x1c\x43\x2a\xe9\xcf\x21\x2b\x0f\xdf\xe6\x69\xfa\xfd\x35\xf9\x25\x91\xfd\x36\x88\xfb\xfd\x04\x93\x40\x22\x1d\xf0\x4f\xdf\xa6\x7d\xbd\x1e\xcc\x1e\x96\x4c\xec\xfe\x1d\x14\x62\xfe\x3c\x7e\x88\x90\x3a\x2b\x1f\x7a\xb7\x5a\xc6\xa7\x34\xff\xf4\x2d\x7d\xd0\x2d\x31\x7b\xd4\xc3\x42\x5d\x16\xc5\x47\x83\xfd\x6c\xa9\xfd\x74\xe6\xec\xb1\xef\x4c\x9d\x3f\x13\xf4\xba\x50\xab\xa7\xf4\xb0\xce\x32\xc7\xab\x02\xcc\x7f\x6d\xbf\xbf\xa8\xa9\x68\x7d\x79\x1b\xdf\x4e\x76\x25\xc0\x73\xf8\x1f\x33\xf9\x67\xce\x8e\xfc\x6a\x3f\x77\x34\x84\x87\x62\x65\x0d\xbe\x5e\x2e\xac\x39\x64\xad\x9d\x26\xce\xca\x5b\x0b\x56\x51\x0b\xf8\xb4\x26\xc8\x42\x67\xa6\xb6\xc6\x84\xb8\x64\x45\x03\x73\x3a\x2c\xf8\xa3\xf5\x04\x68\x32\xeb\x58\x73\x76\x92\xea\x3a\x4f\x78\xd3\x14\xec\xeb\x15\xb2\x46\x3e\x96\xa7\xac\xed\x9d\xb1\x53\xd6\x16\xf6\xdb\x75\x4e\x1d\xff\xb9\xde\x4f\xf3\xe2\xa8\x8f\xa9\xe4\x7c\x82\x86\x04\x0c\xd0\xbd\x50\x59\x9e\xb3\x7c\x02\x3e\xe5\xac\x64\x1d\xb3\x92\x67\xcf\x0f\x27\x88\xc8\xf2\xc2\x01\x5a\x98\x40\xc9\xac\xff\xaf\x0e\xb4\x30\xfa\x5d\x26\xe2\xb3\xde\xa5\x0e\x22\x6b\x71\x01\x95\x69\x14\x9e\x94\x16\x20\xae\x62\x10\x55\x63\x8c\x63\x99\xcc\xce\x59\xf3\x9b\x98\x50\x85\xc8\xd6\x19\x4f\x2c\xb2\x94\xdb\x8a\xbe\x89\xc5\x56\xc2\x5b\x71\x2b\x04\x3a\x1f\xb5\x4e\xca\x74\x0a\xb8\x2e\x0d\xb5\xb1\x0a\x0f\xa7\xac\x7a\x01\x8f\x45\x3b\x29\x80\x08\x4c\xf1\xd8\x09\xc8\x65\xeb\x87\xe5\x81\xd9\x00\xbe\xff\x12\xc0\x39\xb0\xb2\xb4\x90\xfa\x4f\x11\x58\xbf\x90\xe4\x4c\x05\xe1\x83\xa5\xac\xf9\x4b\x0c\xd3\xf6\x52\x54\x83\xcb\xbf\x4a\x87\x27\xae\x57\xa9\x76\x40\xc5\x1a\x38\x11\x2b\x7b\x0b\x33\xb1\x3f\x4c\xdb\x7f\xb9\x66\xfa\xcd\xec\xe5\x52\xaf\x21\xfa\x5f\xc9\x2b\xbd\x46\xf2\xc1\xac\x2a\xce\xe2\xc4\x0b\xa7\xfc\x6f\x9b\x22\xff\xc7\x43\x56\xb2\x7f\xcd\xca\xec\x3d\x99\xcf\x96\x6d\x52\x54\xdc\x42\x31\x73\xa2\x8d\x16\x75\x7e\xd3\x2c\x7b\xa5\xcc\xde\xb7\xdc\x05\x8b\xc4\x5e\xb8\xd8\xcb\x78\xec\xa5\x8b\xbd\x8a\xc7\x5e\xb9\xd8\xf3\x78\xec\xf5\xa7\xea\xbd\xf9\x54\xbd\x1f\x1d\xec\x34\x1e\xf9\xe9\x53\xd5\x7e\x46\xab\xfd\xf7\x2a\x16\xed\x37\xf6\x7e\x6c\xb2\x33\x6b\x93\x18\xf5\xbb\xa5\x3f\x4f\x7a\xbf\x66\xf2\x98\xfe\x6c\x38\x58\x6d\x0f\xb0\xfc\xd7\xdf\xe6\x93\xf9\x64\xfe\xf0\xb1\x5c\x63\x85\xe9\x24\xed\x0b\x3f\xfe\xfe\xaf\xcf\x72\x76\x66\x5d\x53\x1c\x44\xda\x1b\xf4\x3c\xc4\xc8\xf0\x6e\xfa\xf1\x7c\x95\xcf\x17\xf1\x90\x46\x22\xff\xb2\xef\x6a\xf9\xee\x1f\xba\xfb\x19\x11\x1b\x0a\xc6\xc6\x9c\x58\x21\x60\x52\xfc\xa2\xa4\x71\xcf\x50\x30\xf0\x91\x89\x72\xa8\x83\x01\x94\xb4\x9b\xff\xe6\xae\x9d\x7c\x8c\xf6\x6c\x48\x8d\x42\xdd\xd7\x41\x2e\xcc\x04\x68\x29\x1f\xd8\x8c\x31\xa0\x10\x64\x6e\x12\xcf\xb5\x19\xf2\xde\x4a\x80\xa8\x25\x85\x3a\x4e\xa7\x70\xe4\x1d\x4c\xcf\xed\x15\xfc\xfa\x48\x80\xa2\xdd\x16\x72\x5b\x8a\xc2\x11\x77\xe2\xa8\x7b\x24\xc8\x55\x0e\x3f\x29\x8b\x3b\xbf\xef\x41\xc1\xeb\x94\x19\x9e\xfb\x1c\xe4\x65\x8a\x20\x59\x5b\x12\xe9\x26\xd2\x6d\x57\xd9\xed\x80\x3d\x8a\x83\x04\xf6\xfb\x69\x5a\x62\xa8\xcd\x6a\x0a\x45\x64\x90\xf8\x5a\x31\x7a\x9a\x23\xc5\xd0\xc9\x1c\x3c\x97\x0c\xc8\x08\xff\x20\x59\xbb\x6b\xe4\x4d\x00\x72\x88\xab\x8c\x0a\xbe\x48\x7f\x2a\xcc\x3e\x48\xd6\x1e\x2f\xff\x1f\x6d\x57\xdf\xdb\x28\x8f\xc4\xbf\x0a\xba\x55\xa5\xad\x2e\xa0\xbc\x91\x3e\xed\x49\xfd\xf7\x3e\x07\x4d\x9c\x94\x2b\x05\x0e\x48\x9b\x2a\xea\x77\x3f\x61\x8f\xcd\xcc\x78\x0c\x34\xf7\xac\x56\xda\x06\xb0\xc7\x63\x63\xec\x79\xf3\xfc\x40\x21\x08\x4f\xf2\x12\x39\x38\xc5\x70\xfb\x60\xb4\xfb\x14\x55\xc6\x8a\x55\x2e\x42\x95\x28\xaa\x17\xc7\xd7\xc6\x37\xe7\x2e\x20\x9a\x22\xe3\xc2\x82\x4b\x49\x75\x6c\x51\x84\xfc\x92\xac\xac\x0d\xc1\x57\xeb\x87\xbc\x01\x32\xb1\x8f\xac\x38\x13\x8f\x84\x17\xa7\xb5\xfc\xf6\xb1\x23\x45\x53\x89\x95\xdf\x4d\x5a\x2f\xb3\xf7\xe2\x14\x5f\x76\x9f\x4a\x36\x0f\xfc\x60\xb6\x5d\xb7\xbd\x86\x92\x46\x65\x07\x09\xe8\x48\x2a\x6b\x12\x58\x7b\xe7\x34\xa4\xa2\x90\xa4\x51\x43\xf2\x91\xc8\x69\x55\xab\xac\xd3\x9a\x63\x5e\xaa\xac\x89\x4f\x3d\xd3\xaa\xec\x7e\xc7\xdb\xf4\xa0\x4e\x0b\x30\xa2\xdb\xbf\xd1\xa6\xbe\x2c\x7e\x3d\xee\xfb\x7f\xe4\xf7\xae\xbe\xdc\xcb\x0d\xab\x22\x3f\xe5\x2f\x34\xb7\x85\xfb\x04\x90\x5d\x15\x46\x73\xbd\xa3\x5e\x54\x7d\x6d\x8c\x63\x7a\x5e\x0d\x35\xa2\xc4\xcc\x4e\x64\xa6\x4b\xea\xec\x64\x61\xdc\xf1\xb1\x0e\xff\x7c\xb1\x28\x44\x91\xfa\x91\xb9\x78\x55\xd9\x01\x07\x98\x19\xbb\x29\xf2\x04\x0d\x26\x4b\x07\x61\x61\xa0\xc6\x3c\xbf\x80\x4f\x5c\x3b\xb3\x3c\xbe\x9e\x56\x52\xd4\x8d\xe7\x31\xaa\xb3\xbd\x8a\x5f\x54\xf7\xa9\x54\x49\x3c\x22\x2b\x2d\x19\xc9\xad\xc1\x4f\xd3\xdf\xab\xcd\xf0\x37\xa3\xac\xde\x6c\xd4\xd1\x0c\x2b\xb6\xef\x63\x28\xe5\xfe\x9a\x5b\x98\x2d\x8c\xc7\x80\xc1\x86\xad\xfe\xde\xba\x31\x93\x15\x3f\xe9\x85\x6e\xfd\x27\xc6\xd0\x9f\x74\xda\xd8\xb8\x45\xef\x42\x0c\x36\xf1\x79\xfe\x8b\x1f\x34\x3a\xed\xd4\xb8\x79\xac\x96\xdf\xdf\x09\xc8\x30\x31\x68\x04\xc1\xb8\x46\x31\x9f\xe1\x03\x42\x0e\xdc\x66\xfd\x3f\x4e\xd0\xba\x12\xa9\xb7\xd7\x43\x3c\xe6\x95\xec\xf5\xa9\xc9\xea\xd7\x21\x24\x74\xa5\x5f\xae\x57\xda\x25\xac\x71\xe5\xa9\x9a\x65\xfe\x17\x36\x87\x49\x42\xcf\x09\x7c\x22\xd4\x1b\x93\x3c\x18\x7c\x02\x5e\x3f\x2b\xcb\xaa\x63\x88\x8e\x90\xef\x11\x47\x88\xd8\xea\x80\x65\xf0\x52\x5d\x68\x06\x4b\x87\x03\x6e\x20\xd7\x87\x2f\x6d\x49\xbe\xac\x21\x54\x6e\x20\xd4\x0f\x9d\x3a\xe6\x17\x08\x6e\xc4\x0f\xda\xf3\xd1\x3e\x10\x90\x65\xec\xd7\x98\x2e\x83\xe4\xa2\x3a\xeb\x5e\x83\x34\xf5\x53\x70\x8b\x59\xcf\x79\xa0\x28\x84\x47\x8c\x92\x83\x98\x08\x44\xd4\xfa\xda\x02\xdc\x99\x8c\xc4\x66\xb0\x35\x4c\xe3\xf2\x2e\xe0\x86\x4a\x97\x77\x0e\xd5\x2c\x1d\x2c\x7a\xda\x8b\x12\xec\x7b\xfb\x71\x62\x3e\x34\x39\x0c\x20\xd8\x69\x58\x3c\x2c\xdc\x24\xde\x92\x80\x12\x7c\x4e\x0c\x43\x97\x07\xcd\xa2\x33\x78\xa1\x37\xd1\xf3\x3a\x85\x60\xec\xda\xaf\x2f\x18\x1b\xd9\x8e\xdc\xa8\x1f\xaf\x1f\xc0\xef\xa4\xcb\xdf\xf5\x09\x80\xc8\xfd\x8a\xcb\xaa\x53\x4f\x4f\x2f\xea\x58\x35\x6a\xe1\x6e\xdb\x3b\x03\xe2\x59\xf4\x0f\xc6\x8d\x85\x2c\x9d\x98\x32\x57\x17\xa2\x43\x0b\xf6\x84\x9b\x8a\x86\x50\xe1\xe7\x3a\xbb\x36\x99\x6a\x26\xdf\x36\x7a\x85\xee\x03\xdf\xea\x1c\x3a\x66\xdd\xe8\x7f\x5b\xe8\x03\x8f\x5e\x02\xd0\x92\xd9\x5e\x20\x8d\x1e\x5e\x85\xf4\xaf\x91\xf9\xed\x68\xe7\xef\x75\xa1\x74\xa4\x1a\xc6\x82\x38\xe4\xed\x3e\xca\xcb\x36\x3f\x28\xe2\xfb\x5d\x01\x1a\xe3\xfe\x35\x6b\xba\xc8\xfc\x89\x01\xd6\x3c\xaa\x8a\x61\xe4\x39\xb0\x04\x69\x29\x2a\x72\x0f\xe4\x51\x33\x63\x04\xb7\x4e\x5d\x3a\xee\x35\x23\x0f\x8d\x98\x67\x24\x55\x77\x52\xeb\x71\xbb\x7b\x10\x4a\x69\x19\x95\x29\x1b\x5e\x21\x22\x9d\xb2\x18\x1c\x5c\xd8\xd9\x75\xb0\x11\x86\x15\x30\xb6\x17\x66\x1f\x61\x65\xc8\x91\x04\x6b\xbd\x60\x65\xb4\xd1\x02\x9b\x18\xd8\x73\x86\xc2\x6f\xa5\x74\x56\xaa\xd7\x8b\x17\x7e\xf3\xe5\x1b\xd7\x92\x59\x11\xab\x1c\x33\xf5\x95\x0f\x06\x68\xad\x4c\xaf\xf4\x7a\xa2\xd5\x49\xf6\x12\xdc\x4c\xf1\x63\x39\x10\x72\xe5\xb7\xff\x2d\xfb\xeb\x0b\xc3\x6b\x83\x6f\x8b\x45\xf9\x80\x9e\x68\x69\x3f\x3e\x0e\xa4\x9f\x8b\x7c\x2e\x17\x6c\xc9\x61\x8e\x4c\xba\xdb\x6e\xfa\xfd\x20\xbc\x0f\x50\x27\xb5\x0f\x41\x14\x5a\xe5\xb0\x4d\x14\xb5\x16\x66\x72\x64\xe4\xd0\xfa\x8b\x97\x65\x2a\x78\x91\xe5\x59\xe8\x50\x2f\x81\xde\x2d\x4c\xa7\xe6\xe5\xb4\x33\x40\xb0\x1e\xb3\xd5\xcb\x7f\xd4\xbe\xe3\xf9\xfa\x02\x63\x61\x0a\x3f\x8f\xe6\xfa\xeb\xc7\xa4\xaa\x0a\x7c\xb4\x40\x2b\x39\x6c\xf1\xd1\xbb\xdf\xb8\x7a\x43\x53\xe9\x91\x35\x31\x06\xfd\x9a\xf8\xf5\xe1\xa6\x6b\x3f\xb2\x3f\x08\x30\x04\x45\xfe\x27\x07\xb8\x36\xe4\x1e\x04\x0b\x98\x9b\xc6\xec\xdf\xaa\xe2\x68\xcd\xf3\x9a\xbb\x53\x53\x7d\xf6\xba\x94\xd8\xa2\x13\xc3\x8d\x5d\x5f\x1d\xae\x43\x9d\xe5\xbf\xbc\xdc\x7d\xa0\xc5\x88\x0a\xcc\xd3\xc3\xee\x2f\xad\xbf\x20\x21\x12\x19\xff\x8d\xa0\x1c\x64\xe2\xbd\x7a\xc9\x0b\x65\xf2\xa2\xe9\x1a\x88\x91\x15\x61\x04\x83\x7e\x7d\x1b\x8a\x5d\x5e\x4b\x27\xad\x28\x28\x4e\x56\x14\xae\x34\xc0\xea\x2f\x86\x6b\xf7\x29\xf8\x40\x3a\x43\xe0\x51\x20\xa0\x26\xc5\xda\x76\xba\xe4\xad\x38\x29\x23\xeb\xba\xe6\xb7\x86\xa4\xd1\xa6\xa3\x7b\xc1\xf4\x22\xe8\x36\xa2\x89\x87\x2b\xb7\xdc\x39\x8e\x41\xb9\x39\xc0\x57\x20\xa6\x9f\x46\x66\xaf\x53\x29\x7a\xdb\x0a\x0e\x69\x7d\x89\x56\xc8\xdf\xec\x56\x59\x2d\xb9\xc8\xea\x68\xca\x42\xad\x4c\x8d\x28\x59\xb5\xd4\x09\xcc\x5f\x09\x95\xcb\x10\x46\xad\x87\xcf\x89\xa2\x2d\x77\xc3\x42\xc3\x06\xd6\x48\x0e\xee\x31\xc6\x75\xc4\x41\xd6\x72\x09\xb3\xa3\x90\xaf\x7c\x67\x43\x09\x41\xc5\xae\xea\x60\x97\x92\xac\xf8\xcc\xbe\x2c\x42\xbd\x37\x07\xb5\x7e\x61\xe7\xcc\x80\x66\x68\x47\x76\xdd\xcb\x90\x01\x4a\x4e\xc0\xa5\xa4\x60\x04\x07\x5a\x5a\xd9\x33\x84\x3e\xab\xb8\xed\x54\x6d\x8f\x89\x8a\xb3\xcc\xff\xa6\x90\xb5\x73\x5b\x5f\xe8\x9c\xf1\x88\x6a\x31\xf8\x98\x37\xe0\xbb\xd5\xf2\x5b\x30\x26\xcd\x9c\x54\xd0\xa9\x22\xc7\x1a\xf1\x30\xe8\xe9\x76\x29\x1d\x4c\xd1\xd2\x68\x72\xc8\x5b\x73\x36\x3b\x67\x87\xca\x98\xf6\xa1\x4f\x8a\x8a\x35\x88\xc6\x25\x19\x5c\xb1\xea\x34\x41\x27\x4a\x5e\xb2\xa6\x8d\x9a\x7e\x5f\x13\xc2\x0f\x93\x0d\x99\x41\x6e\x09\x5a\xcd\xa0\x99\x38\x14\x0b\x67\x80\x5c\xcf\xa9\xd6\x65\xcd\x49\x75\xae\xd2\x72\x4e\x9d\xb6\xc8\xf7\x2a\x5e\x5d\xad\x1d\x14\x92\x05\xcc\xac\xb7\x86\x7a\x56\x8a\x9c\x5b\x6f\x03\xf5\x96\xcb\xc3\xea\x65\x56\xdf\x4c\xbd\x2d\xd4\xb3\xb2\xed\xdc\x7a\x29\xd4\x4b\xf7\x5b\xa5\xd2\xf9\xf5\x76\x50\xcf\x8a\xb6\x72\xbd\xa4\xad\x8b\xbc\xd3\x59\x45\x7d\x93\xeb\x48\x3a\x5f\x1b\x18\x3e\x49\x35\x1a\xe2\x32\xd3\xc1\x34\xb0\x31\x09\x85\x26\x2b\x27\x85\x3a\xa9\xf2\xe0\x21\x02\x0e\x04\x69\x46\xd9\xa9\x2e\x30\x89\x49\x88\x39\xe6\x12\xd7\xfc\x8e\x02\xaf\xbd\x1e\x49\xbf\xee\x71\x38\x5f\xb4\x27\xb1\x72\x7c\x29\x0f\xcb\xb1\x12\xa2\x0a\x6c\x8e\xfa\x96\xb0\xb1\x43\xc0\x55\x1a\x5c\x28\xe4\xae\x81\xe3\x69\xf1\xc3\x4a\xc6\xc1\xc4\x02\x62\x3d\xb3\xa7\xa1\xa9\x97\x36\xfd\x73\xe1\xdd\x11\xec\x4e\x33\xd6\x4e\x99\x2b\x1d\xd0\x68\xd6\x2a\xef\x0d\xf1\xdc\xfb\x3a\x73\xce\x0f\x69\x9b\xd3\x47\x74\x87\xa0\x39\xa3\x6e\x21\xc8\x9c\x84\x36\xf6\x56\x1c\x28\x64\xcf\x71\x12\xd7\x47\xde\xe6\x3a\x12\xd1\xab\x91\xec\xb3\xf2\x23\x6b\xa3\xc4\x1c\x4f\xea\x17\x0f\x3c\x51\xdb\xae\xa9\xde\x94\x15\xa8\x93\x75\x3a\x46\x42\x8b\x00\x31\x2c\xea\x01\x52\xf8\x96\x44\x2b\xbb\xe4\x6d\xd4\xdf\x10\xa6\x81\x79\xa8\xad\xa1\x40\xcc\xb9\x4b\x03\x65\x8d\xfd\xc6\x98\x63\x43\x63\x96\x9c\x9a\x5c\x1f\xce\x22\xa4\xa1\xcb\xc2\xfc\xc4\x15\xf4\xa0\x59\x5e\x4c\x3a\x78\x3b\x64\x87\xac\x7d\xcd\x9a\x26\xfb\x7a\x4a\xa3\x95\x48\xc6\x0c\x1b\x8e\xaa\xc1\xd4\x8e\xc3\x76\x81\x2a\x19\xd7\xe4\xbf\xc1\x33\x89\xf2\xe2\xea\x78\xab\x6b\x3b\x1c\xbd\xd7\x82\xb9\xbe\x76\x7b\xf2\xee\x27\x04\xfb\x05\x78\x9c\xdc\x72\x64\x32\xe0\x28\x1d\xdc\x2b\x97\xf4\x62\x9a\x0f\xc8\x7b\xeb\x77\x0c\xa4\xeb\x5b\xfa\x06\x34\x79\xdf\x44\x8a\x53\xdd\xb3\xe1\x3f\xe4\xa5\xd9\x8c\x6d\xd3\xac\x40\x52\x5b\xe1\xbd\x99\x30\xa4\x5b\xba\x07\x34\xbd\x57\x27\x51\x9c\xea\x1e\x84\x17\xe1\xde\xad\x07\x89\x62\x94\x0d\x93\xb8\xd6\xef\xd9\x7a\xb3\xbd\xa9\x5b\x86\x1e\xef\x95\x4f\x6d\xaa\x4b\x43\xa8\x12\xe9\x95\xcd\x5a\x34\x52\x13\x62\x7a\x02\xcb\x12\x9e\x13\x25\x1f\x34\x2a\xf9\x8d\xf6\xd3\x25\xbd\x15\x86\xce\x04\x66\xdd\x32\x7a\x8e\xaa\x37\x80\x12\x4d\x71\x0c\xa5\x99\x56\x8a\xaf\x18\xe2\xa5\x6e\x9b\xbc\xa5\xf0\x96\x45\x82\x33\x99\x34\x39\x64\xff\x56\x26\x0d\xc9\xdb\x99\x44\x73\x65\x88\xce\x22\xb3\x91\x28\x26\xa3\xbc\xb8\xec\xb0\xc2\x74\x31\xc1\x62\xb7\xf4\xd0\x51\xf5\xa6\x8b\x44\x73\xaa\x93\x43\xd4\x17\x59\x26\xc1\x3a\x3f\x67\x37\xb2\xa9\x5f\x85\x85\xd2\x04\xa1\xdd\xb4\xc7\x59\xaa\xde\x52\x29\xd1\x9c\x5e\x2a\x21\x9c\x0c\xf7\x91\x6a\x60\x13\xeb\x9b\x49\xec\xea\x77\x11\x62\xdb\x6e\x5b\x34\x0d\x51\xde\x43\x91\xa4\xeb\xa1\x6f\xd3\x94\x3d\x6c\x41\xd7\x07\x39\x0d\x28\x67\x62\x67\xd9\x8b\x76\x92\xa9\x1e\x62\x24\x98\x31\x97\xa6\x98\x08\x9c\xa8\xd5\x66\xbf\x85\x7f\xce\x32\x59\xb7\x51\x57\xd5\x46\xb7\xaa\xce\xdd\xa2\xbf\x51\xa8\x63\xe7\xee\x88\x98\xe6\xc4\xca\x2a\x0d\x85\x33\xaa\xc9\x0f\x47\xac\xbc\xa2\x61\x67\xcc\xda\x28\x99\x7e\x7d\x0b\xb1\xcc\xa6\xfe\xb6\xcb\xac\xae\xbf\xae\x63\x83\x92\x2e\xdf\xd9\xa8\x84\x7a\x0d\x1d\x43\x16\xd0\x07\xef\xfd\x11\x0b\xe8\xc3\xa4\x05\x54\x2e\x21\xdb\x76\x1f\xea\xcb\xbd\x35\x54\xc6\x7f\x39\xc3\x82\xfc\x72\xae\xb2\x9d\x16\xe1\x58\xfc\x9f\x46\x5a\x91\xc5\x1d\x66\x71\x17\x62\x31\x01\x75\x94\x9d\xd0\x0d\xf8\xb5\x9f\x8b\x5c\x9e\x69\x51\x2d\x98\x72\xb4\xf2\x47\x4d\x20\x60\x56\x1f\xf7\x31\x21\xd3\x82\x0e\xf5\x19\x75\xb5\x3f\x17\x26\x97\x63\x88\x2f\xfb\xb0\xff\xf8\xe3\xf6\x33\xeb\xf6\xaf\xf2\x79\xdb\xb1\x06\x88\x05\xc2\x6f\x02\x47\xc6\x0e\xa7\xf4\xd8\x11\x03\xeb\x39\x98\xd1\x90\xd3\xbc\x27\x5a\xe4\x2a\xbf\x9f\xfa\x6b\x77\x3f\xa3\x39\x19\xb3\x6c\xbc\x6a\x42\x81\x83\x25\xd8\x55\xac\x8d\x8c\xd1\x08\x1c\xa5\x08\xd7\xfb\x67\x91\x07\x72\xd5\xd8\x00\x25\xa8\x5b\xab\xf2\x00\x51\xdf\x5f\xaa\x89\x97\x6e\x38\xff\x7b\x56\x67\x9d\x3c\xda\x5c\xea\xad\x0f\x17\x04\xad\xdd\xa6\xbe\x91\xc9\xad\x82\xf5\xc1\x3e\x7c\x6e\x8a\xdf\xbf\x0e\x79\x76\xaa\xca\xac\xd0\xb9\x83\x6b\x15\x6f\xee\x75\x10\x6d\xec\xd9\xaa\xa3\xa4\x39\x97\x3a\x8a\x00\x8c\xc4\x58\x33\x88\x92\x7d\xf5\x5e\x17\xaa\x53\xd6\xa4\x0b\x71\x1e\xf0\xf4\x98\xe5\x85\x3a\x48\xe6\xd7\x28\x29\xaa\xd6\x9a\x21\x8c\x0e\x85\x3f\x05\x6b\xca\x1a\x92\x45\xe0\x3c\x07\xe0\x6e\x5d\x9b\x4c\x34\x7e\xda\x19\x4c\x2a\x31\x7f\xe2\xa5\x18\x5f\x2c\x95\x5c\x31\x58\x1f\x30\xa6\x0b\x25\xd7\x02\x28\x82\x5c\x72\x43\x71\x73\xac\xc1\x5c\x28\xb9\x15\xa0\x26\xe4\x92\x29\x29\xe9\x8c\xe2\x42\xc9\x9d\x18\x05\x4e\x4a\x9a\xa9\x17\x4a\x39\xb7\xf2\xf3\x2b\x6e\xa8\xdb\xd4\xcd\x49\x4c\x14\x66\xe6\x82\x31\x05\xd3\xf2\x0f\xc6\x99\x93\xf6\xec\xfc\x95\x82\xe6\x49\x41\x37\x97\xc9\x1b\xb0\x33\x1a\x97\x84\x79\x3d\x39\xaa\x7a\x8e\x33\xc4\x1c\x56\x44\x80\xe9\xb6\x76\x2e\x56\x8c\x23\x5a\xa3\x35\x89\x95\x14\xa0\xf5\xec\xaa\xc7\x4a\x7a\x70\x64\x22\x83\x3e\xb0\x70\x60\x04\x5d\x44\x93\xcf\x51\xf9\x36\x3d\xb1\x45\x08\xd7\xc0\x87\x25\xc2\x9c\x06\x3e\x6c\x09\x09\x74\x78\x63\xb0\xdd\x1a\x51\x7f\x80\x6f\x6f\xb8\x13\x45\x72\xfa\xe0\xba\x89\x03\xd1\xb4\x3e\x19\x1d\x36\xfa\x71\x8a\xeb\xac\xeb\x54\x53\x5e\x79\x04\x40\xc0\x09\xab\xc5\xf4\xef\x5f\xda\xc9\x73\x3a\xe7\x07\x15\x25\xef\xd5\xfe\xcd\x81\xda\xd3\x58\x99\xe1\x14\x83\x09\x41\xc0\x5e\x80\x20\x0d\x77\x55\x7f\x2d\xa6\x0a\xe5\xef\xd9\x49\x79\xa7\x25\x3c\x64\x7d\x1d\x09\x34\x8f\x16\x7a\x0b\xfc\x73\xef\x2a\x2d\x7a\x1b\x88\x4b\x24\x4d\x46\x4b\x72\xb5\x7d\xbc\x5b\x80\x9d\x9b\xfc\x4e\x57\x77\xa4\x1c\xbf\xd6\x0a\xd0\x42\x68\x14\xa2\x20\xfe\x68\xbb\xb3\x5e\xc7\xbc\x55\xd1\x71\x6c\x39\x18\x38\xa9\x2f\x94\x13\x76\xbd\xda\xf6\x2b\xe4\x14\x27\x1f\xd9\xe9\x4c\x97\x24\xf5\xa8\xf6\xc7\x65\x28\xb6\xd9\xa7\xd7\xcb\xce\xfd\xc7\x69\xa5\xe6\xb5\x7a\xff\xfe\x5f\x00\x00\x00\xff\xff\x8e\x19\x49\xa1\x95\x39\x03\x00") +var _distAssetsNomadUiE485eabcbd50a177816ec937c7214bf8Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x77\x1b\x37\xb2\x20\xfe\xbf\x3e\x05\x85\xdf\x0e\xb7\x31\x06\x5b\xa4\x63\x27\x13\x66\x7a\x74\x1d\x3f\x26\xce\x26\x8e\xaf\xe5\xb9\x77\x67\x75\xb9\x39\x50\x37\x48\x21\x6e\x02\x0c\x00\x4a\x62\x24\xee\x67\xff\x1d\x3c\x1a\x8d\x7e\xf1\x21\xbf\xa4\xb9\x3e\x73\x26\x16\xbb\x01\x34\xaa\x50\x28\x54\x15\xea\x01\x96\x92\xf4\xa4\x12\x34\x55\xe0\x20\x23\x53\xca\x48\x04\x18\x9f\xe3\x6c\xb0\xa4\x47\xf8\x8c\xe6\x54\x51\x22\x8f\xd2\x9c\x12\xa6\x00\x3a\x05\xe4\x6a\xc1\x85\x92\x00\x01\x32\x3f\x23\x62\x90\x62\x06\x26\x68\xba\x64\xa9\xa2\x9c\x45\x04\x29\x78\xfd\xcb\xd9\x6f\x24\x55\xb1\x1d\xef\xb5\xe0\x0b\x22\xd4\x2a\x22\x08\xfc\xfa\x2b\x91\x3f\xf3\x6c\x99\x13\x80\xae\x2f\x70\xbe\x24\xe3\xc3\xe1\x1a\x22\xa2\xdb\xe2\x65\xae\x92\x0b\x4e\xb3\xde\xf0\xe0\x02\x8b\x1e\x4b\x54\xfc\xc4\xcc\x60\x15\x93\x2b\x45\x58\x16\x5d\x2b\xfe\x8e\xb0\xf1\x73\xfd\xe5\x98\x32\xf3\x15\x49\xc4\x05\x4d\x49\x04\x51\x8a\xd9\x7f\x0a\xaa\x88\x7b\x9f\xf2\xf9\x62\xa9\x48\x16\x73\x11\x81\xb3\xd5\x02\x4b\xf9\x64\xa9\xce\xb9\xa0\x7f\x60\x3d\x57\x80\x80\x24\xf9\xf4\xad\x1e\xf2\xa5\xfc\x19\x33\x3c\x23\x73\x03\x25\x58\xf0\x9c\xa6\x94\xc8\x97\x2c\xcd\x97\x19\x79\xc5\x33\x62\x46\x06\x10\xb5\x0c\x54\xff\x1e\xe3\x2a\x02\x66\xa6\x31\x4e\xf3\xe7\x0c\x9f\xe5\x24\x03\x10\xb5\x7e\xad\xde\x99\xfc\xbe\xc4\x79\xd1\xdd\xf7\x88\xd5\x6a\x41\x00\x02\xf3\x72\x96\x10\x75\xcd\xb2\x36\x64\x63\xb0\xd7\xae\x5f\x7c\x3a\x01\xe5\xca\xc1\x6b\x41\xd4\x52\xb0\x48\x9d\x53\x19\xcf\x88\xea\xec\x07\xe0\xcd\xcd\xe9\x04\xc6\x8a\x3f\x11\x02\xaf\x22\x18\xcf\xf1\x22\x2a\x49\xa0\x18\xa9\x67\xe7\xa1\x87\x22\x08\x88\x65\x4e\xe4\x8f\x27\xbf\xbc\x8a\xf5\x44\x63\x33\xd8\x0a\xc0\x35\x34\x13\xc5\xa9\x8a\x60\x2c\xf9\x9c\xb4\x0c\x04\x2e\x0d\xf2\x93\x24\x21\x6b\xa8\xff\x77\x50\x12\x0c\x5b\x43\xb4\x81\x70\x7f\xe3\x67\x9f\x9f\x6a\xe5\x4a\x2a\x32\xef\x22\xdb\x6d\x34\xfd\x66\xd9\xa0\xb0\xdb\x53\xf4\xc9\x72\xa1\x31\xf1\x66\xc9\x18\x65\xb3\xbb\x45\xcf\x38\x55\xf4\x82\xbc\xc2\x73\x22\x17\x38\x6d\x92\xb1\x45\x63\x5c\x6b\x16\x33\x3c\x27\x2d\x74\xdc\x2b\xe9\x78\x53\x47\x78\x73\x03\xdc\x32\x82\x35\x44\x86\x4a\x5f\x70\xf1\x64\xcb\x5c\x6a\x63\x01\xb4\xeb\x26\xd3\x34\x42\x12\x3d\x37\xa4\xcc\x3f\xf5\x69\x1d\xdc\x7e\x1b\x0a\x92\x2d\xd3\x60\x03\x31\x84\xed\x07\x45\x52\x6e\x45\x5c\xd9\x8a\xc5\x57\xdd\x68\x88\x27\x24\xfe\x75\x4a\x59\xf6\x33\x56\xe9\x39\x65\x33\xdf\x22\x12\x48\x41\x37\xb9\x1e\xef\xf7\x59\xbc\x58\xca\xf3\x48\xc4\xba\x75\xdb\xee\x27\x66\xf4\x24\x49\xf8\x1a\x42\xc4\xd6\xe8\x74\x02\xd7\x25\xd7\xaa\x52\x62\x03\xc1\x1d\x0b\x11\xff\x1b\xc1\xe9\x79\x9c\xe2\x85\xdf\xe3\x9d\x6b\xdf\x35\x44\x07\x97\x89\x2a\xec\xea\x69\xf8\x05\x87\x69\x6a\x19\xad\x8c\x80\x5c\x9e\xcd\xa9\x1a\x68\xee\x62\x18\x12\x6a\xc7\xd9\xb8\xca\x61\x2c\x7f\x20\x9a\x5d\x7e\xbf\x8a\xc0\x2b\x43\x7f\x07\x74\x1a\xb1\x72\x68\x05\x61\x01\x83\xe1\x27\x38\x61\xf1\x94\xe6\x8a\x88\x76\x1c\x97\x73\xfa\xb3\x61\xa6\x75\x1a\x20\x88\xd9\x0f\xe3\x84\x91\xcb\xde\x1b\x32\x7b\x7e\xb5\x88\x58\x2c\xc8\x22\xd7\xab\x7a\xf4\x5f\x7f\x3e\x9a\x21\x10\xff\x19\x40\x88\x44\xa2\xe2\x9c\xb0\x99\x3a\x1f\x30\xf7\x47\xb1\xe2\xe2\xaf\x24\x9e\x73\xa9\x0a\x18\x9f\x9e\x63\x81\x53\x45\xc4\x33\x3a\x9d\x12\x41\x58\x4a\xfa\x7d\x15\xcf\xf5\xeb\x08\xc3\xe3\xeb\xb0\xb1\x47\x88\xfe\x63\xcc\xd0\x96\x81\xc6\x62\x3d\x26\x6b\xb4\x69\x88\x65\x9e\x6f\x1d\xe5\xd5\xd2\x2c\xe8\xcf\x4f\xfe\xf7\xaf\x27\x4f\x5e\x3c\xff\xf5\xe5\xab\xb7\xcf\xff\xfe\xfc\xcd\x1a\xc6\x9d\x03\x17\xd0\xe2\x9b\x9b\x70\x51\x3c\x87\x80\xc7\xfe\xcf\xb1\x65\xfa\x70\xbd\xc3\x71\x94\xe1\x85\x22\x42\x1e\xe1\x59\x43\x8a\x6a\x69\xb4\x58\xe4\x34\xb5\x0c\xbd\x7e\x46\x15\xbf\x7a\x21\x11\x84\x74\x41\xa7\x91\xe1\x06\x31\x95\x96\x2b\x10\x08\xaf\xa7\x5c\x44\x9a\x04\x54\x32\x44\xcc\x90\x81\x7b\xe7\xd6\x18\x7e\xa7\xfe\x5a\xfc\xfd\x9d\x7a\xf0\x00\xb2\x53\x35\x49\xc8\xa9\x9a\x14\xf8\x60\xeb\x75\x44\xe0\xcd\x4d\xed\x53\x27\xab\xf9\x19\xcf\x63\xaa\x88\xc0\x8a\x8b\x1e\x65\x3d\x7b\x8a\x9a\xc6\xe0\x94\x9b\x1f\xbd\x27\x62\xb6\xd4\x3c\x5e\x4e\xf4\x19\xee\xce\xd9\x85\xe0\x8a\xeb\x63\x20\x56\xfc\x44\x09\xca\x66\x71\x8a\xf3\x5c\x4f\xd8\x7d\xd4\x02\x32\x15\x7c\x1e\x11\x58\xfb\x3e\xbc\x56\xe7\x82\x5f\xf6\x34\x30\x6f\x57\x0b\xf2\x5c\x08\x7d\x28\xbe\x64\x17\x38\xa7\x59\x0f\x2b\x45\xe6\x0b\xd5\x53\xbc\x27\x17\x82\xe0\xac\xc7\x38\x1b\x98\x79\x9e\xe5\xa4\x47\x99\x54\x98\xa5\x04\xc0\x75\x04\xd7\x1f\xe6\xe0\xc7\x89\x2a\x1e\xfb\x83\x7f\x81\xd5\xf9\x0b\x2e\xf4\x04\xc7\x0d\x26\x05\x0c\x35\x1c\xcd\x8d\x44\x22\xc1\x1a\x2d\x45\xfe\x82\x8b\x17\x94\x65\x6f\x48\xca\x45\x36\x6e\x1c\x1b\x16\x23\x25\xe6\x64\x4e\x53\x62\xd1\x86\x0b\x1c\x43\xfb\x34\x1a\x79\x66\x6d\x98\x61\x39\xf8\x93\x3c\x8f\x35\x8d\xad\xcc\x11\x83\xf4\x5a\xd6\x88\x18\x6f\x26\xe2\x3c\xe7\x8e\x3c\xb7\x50\xf2\xa5\xde\x62\x1a\xe1\xe1\xdb\xa5\xa2\xb9\x3c\xc2\x59\x36\x50\x7c\xa0\x11\x54\x23\x72\xcd\xaf\x3e\xde\x8a\x48\xc5\x17\xe3\x90\x8a\xed\xbe\xf0\xd8\x73\xbb\xe0\x6f\xa3\x7e\xdf\x8e\x74\x98\x94\x2f\x4f\x47\x93\xe3\xf0\xc7\x18\xbc\xfe\xe5\xe4\x2d\x38\xa8\xef\x43\x7f\xea\x46\x43\xc4\x8a\x29\xc0\xa8\xb6\x0e\x76\x91\x23\x1c\xd3\x0c\x81\x00\xa9\x10\x91\xea\xd2\xe1\xdf\xf0\x95\x39\x7d\xd7\xeb\x08\x1c\x69\x08\x00\x44\x82\x48\x85\x85\x6a\x3d\x61\x00\x88\x53\xce\x52\xac\xec\x27\xcf\xb9\x54\x37\x37\xe0\x08\xc0\xca\xe3\xa5\xc8\x5f\x0b\x32\xa5\x57\x11\x84\x08\x07\x9d\x18\x02\x4e\xe1\x0b\xd6\x3a\xe8\x4d\xcc\x8c\x8f\xdc\x0c\x40\xcb\x64\x31\x02\xaf\xff\xf1\x16\xa0\xeb\x0c\x2b\x3c\x56\xfd\xfe\xf5\x5b\x2c\xdf\x19\xce\xad\xd6\xeb\xfd\xa8\x2d\xe0\x86\x2d\x82\xbc\xfe\x40\xd9\x58\x4f\xa9\x49\x6b\x29\xcf\x88\x1c\x4c\xb9\x18\x10\xcd\x25\x9a\x0d\x04\x99\xf3\x0b\x32\x10\x66\x41\x9a\xaf\x19\x1f\xe4\x04\x67\xa4\xe8\x5f\xa7\x57\x84\x91\x78\x2f\x9a\xb5\xa2\xa8\x39\x84\x0a\xfa\x0d\x1f\x81\x8b\x11\x30\x04\xcd\x5b\x08\xda\x37\x1b\xeb\x66\xe8\x3d\x54\x8d\x73\x03\xa3\xec\xd4\x1e\x53\x41\x54\x87\x28\x5b\x95\x53\x4d\x43\x23\xd7\x10\xc7\xca\xaf\xc1\xff\x1e\xbc\x32\x48\x35\x12\x2c\x18\x93\xf5\x1a\xa2\x73\xcc\xb2\x9c\xbc\x21\x72\xc1\x99\xac\xca\x4a\x9a\x09\x38\xaa\x7a\x3c\x1c\x6a\xc5\xaf\xdf\x67\x49\x92\x88\xf8\xd5\x2f\xbf\xfe\xf4\xfc\xc9\xb3\xe7\x6f\x8e\x35\xeb\x17\x05\x3e\xc6\x66\x1a\xbf\xca\xe5\x82\x88\x90\xbb\x95\x6c\x71\x8d\xa6\x96\xf9\x35\x39\x71\x6f\x6b\xe7\x38\x35\x72\x4d\xed\xf8\xab\x6e\x6f\x12\x0a\x88\x8f\x87\x23\x50\x1c\x64\xa7\x93\x03\x7b\x58\x69\xed\x15\xe9\x0d\xf2\xcb\x42\x8f\x22\x5b\x37\x6f\x83\x15\x3d\x6c\x65\x45\x0f\x43\x56\xf4\x70\x32\xbe\x5e\x5b\x41\x52\x6f\x08\x23\xbc\xe8\x3f\x92\xeb\x35\x44\x0d\x3d\x48\x9e\xf3\x65\x9e\x39\xab\xc1\x1b\x32\x33\x4c\xa7\x10\x12\x3b\xb4\xa6\xa2\xd9\x01\xee\xf7\xdd\xe0\xb1\x30\xcf\x12\x0c\xd7\x4d\x34\xba\x45\xb4\x48\xff\x01\x6b\x05\x71\x55\x5b\x61\xbd\x69\x76\xc6\xbf\x3a\x27\x2c\x50\x6c\xec\x6c\x79\x22\x8c\x22\x89\x64\xa2\x62\xbb\x7b\x63\xca\x2e\x88\x90\xe4\x05\x17\x91\x88\xdf\x91\x95\xe7\x4e\xb2\xdf\x27\xf1\x82\x90\x77\x4f\xf2\x3c\xe2\x70\xa3\x50\x6d\xe0\xf7\xfc\x50\x9a\xbd\x88\x40\x4c\x33\x00\x61\x92\x24\x2a\xa6\xd9\x1a\xc6\x53\x2e\x9e\xe3\x90\x2a\x14\xbc\x8e\x86\x08\x07\x24\xa1\x99\xb6\xd6\x7d\x60\xcb\xe9\x2e\xdd\xa3\x7f\x2c\x32\xac\x48\xf1\x70\x0d\x0f\xbc\x90\x27\x03\xba\x40\x38\x39\x9d\xa0\x50\x91\x33\x28\x02\x9a\xb9\x03\x88\x78\x52\xe7\xe9\x9e\x2b\xeb\x05\x4b\x54\x9c\xe2\x39\xc9\xe9\x1f\x24\x82\xb0\xdf\xc7\x56\x79\x63\x10\x11\xff\x83\x30\xcd\x28\xff\xf1\xe6\xe5\x53\x3e\x5f\x70\x46\x98\x96\xe2\x20\xe2\xba\xc1\x92\xc9\x73\x3a\x55\x11\xd7\x27\x05\x8e\x7f\xe3\x94\x45\xfa\x40\x41\x87\xa2\xdf\xc7\xfd\x3e\x38\x02\x9a\x3a\xe3\xf4\x1c\x8b\x27\x2a\x1a\xc2\x7e\x3f\xc2\x09\x38\x02\x0f\x30\x44\x78\x5d\xb2\x3a\xbe\x91\xd9\x67\x64\x91\xf3\xd5\x7c\x07\x21\xb9\x14\x2d\x36\x89\xc8\xfa\xf7\x8e\x42\x72\xb1\xf6\x75\x39\x57\x0f\x41\xa7\xd1\xe1\xc7\x92\x75\xdd\x87\x9d\xed\xe8\x74\x82\x70\x72\x38\x44\x22\x39\x1c\x21\x5e\x1c\x06\x4a\xac\xbc\x0c\x2f\x51\x9e\x90\xd3\xda\x64\x26\x11\xfc\xee\x30\xc2\x49\x24\x93\x3c\x66\xe4\x4a\x45\x10\xc6\x19\x67\x04\x9a\xdd\x6a\x96\x57\xc6\xe6\xec\x81\xe8\x50\xdd\xdc\x14\xda\xdd\x61\x92\x28\xf8\x9d\xfe\x24\xfc\x6e\x6d\x79\x1c\x85\xd7\x42\x4f\x81\x27\x74\x3d\xa5\x0c\xe7\xf9\xea\x5a\x4f\x00\xdf\xdc\x68\xad\x2b\x49\xf2\xd8\x4e\xf9\xe6\xa6\xf8\x2b\x82\xbe\x25\x9d\x46\x02\x5a\x6e\xc7\xd7\x6b\xaf\x3d\x18\x3c\xde\x4a\x7c\xcf\x88\x54\x62\x99\xaa\xa5\x20\x9f\x49\x86\x17\x7c\xce\x15\x69\x11\x1a\x1d\x9f\xd0\x5c\x01\xe1\xe4\xc3\x09\x95\x00\xe1\x84\x45\x24\x96\x8b\x9c\xaa\x08\x1c\x03\x88\x1e\x6a\xdd\x1c\x9f\x0e\x27\x88\x27\xf8\x74\x34\x41\x32\x11\xc5\x7b\xbd\x0d\xf3\x44\xc6\x0b\xbe\x88\x20\xa2\x49\xc8\xb8\xfc\x46\x2d\x45\x3f\x14\x0a\x82\x39\x3c\xe0\xfd\x7e\x44\x1f\x24\xe0\xd8\x77\xe3\xd0\x33\x0f\xba\xee\x90\x5a\x15\x02\xc1\x66\x85\x08\x1c\x39\x3c\x75\x89\x83\x5a\x50\x76\xf2\xe0\xf5\x33\xdf\xf3\x65\x36\x56\x48\x9f\xc9\x87\xc3\x3d\xe5\xc2\xdf\xf8\xd9\x40\x2e\xe7\x73\x2c\x56\x5f\x78\xc5\x17\x5e\x71\x37\x78\x45\xb7\x06\xaf\x25\x1e\xaf\x16\xb2\xc8\x18\x5f\x17\x58\x48\x12\x11\xb3\xbb\x79\x22\xf4\xee\x96\x89\xd0\xbb\x3b\x4f\x42\x51\x8a\x23\x60\xae\x31\x30\x7c\x00\x8e\x0a\x9a\x0f\xc4\x1a\x6f\x92\x3a\x4c\x12\xd9\xef\x47\xb9\xde\xcd\x81\xfa\xe0\xd9\x01\x84\x28\xdf\x73\x8f\x7d\x34\x15\xdf\x6f\x3d\xfc\x65\xeb\x7d\xd9\x7a\xfb\x6d\x3d\xd1\x66\xd8\xd9\xa8\xf8\xb6\xa8\x7e\x75\xed\xb5\xfd\x92\xa8\x76\x9c\xed\xa1\xa3\x94\x34\xad\x5a\x35\x05\x55\x5e\xbe\x24\xe4\x38\x90\x25\xc6\xe1\x7d\x94\x5a\x3b\x1d\xaa\x8d\xa1\x18\x15\xca\x2a\x42\x38\x64\x29\x4c\xb3\x14\x2b\x25\xf0\x2a\x7b\xe0\xc7\x81\xc1\x80\xaf\xb5\xd6\xd8\xa5\xbb\x21\x81\x64\x45\x6d\x69\x57\x9d\x79\xb4\x15\x31\x4d\x0d\xb4\x7e\x13\x67\x14\xab\x4d\x06\x50\xc7\x34\xec\xe2\xe3\x26\xfb\x94\x96\x7d\xe6\x86\x7d\x1e\xb4\x4d\x2d\x92\x66\x08\x94\xfb\xef\x54\xf4\xae\x8f\xf4\xa5\xab\x73\xf1\xbf\xc8\xea\x03\xeb\xf9\x7b\x60\xde\x6a\xea\xfd\xbe\xd3\xd8\xfd\xda\xc3\x35\x12\x24\x37\x56\x35\x79\x4e\x17\x2f\x70\x9e\x9f\xe1\xf4\xdd\x4f\x94\xbd\x93\xe3\x6b\x77\xc6\x8c\xcb\xd3\x66\x8d\xa6\x44\xa5\xe7\x6f\xf0\xe5\x33\xbd\x75\xa9\xb9\x26\x6e\x4a\xbc\xed\xb2\x62\x28\x27\x9b\x93\xac\x45\x44\x54\x08\xfc\xfd\xf9\x5b\xa0\x89\x9d\x8b\x94\xbc\x26\x82\xf2\x8c\xa6\xe3\xda\x79\xe0\x86\x5a\xb8\xd7\x85\xd9\x42\xed\x64\x69\x6d\xce\x43\x8b\xad\x6e\xa8\x23\xf3\xdd\x8e\xa9\x19\xe9\x15\xae\xd7\xa8\xc3\x7c\xfc\x5e\x70\x3f\x7b\xfe\xd3\xf3\xb7\xcf\x35\xe8\x86\xce\x5a\x86\xdf\x08\xdc\x93\x3c\x8f\x4a\x68\xf4\x08\x9b\x80\x28\x44\xf0\x1f\xf9\xd9\x0f\x4f\x7f\x1a\x13\xf4\x14\x33\xce\x68\x8a\x73\xfa\x07\x71\x52\x38\x5a\xe4\xb8\x6d\x75\x03\x78\x6e\x6e\xdc\x8f\x5f\x69\xf6\x3d\x99\x72\x41\x4e\xf0\x85\x75\x28\x70\x26\x24\xa9\xb8\x20\x68\x37\x13\xb8\x0a\x96\x23\xc7\xac\x6d\xfe\xa2\x39\xff\x71\x31\x05\x46\x02\xaa\xd4\x1b\x16\x40\xf4\x8c\x4e\xa7\x16\x9c\x1a\x5b\x0e\xcd\x3c\x2f\x9f\x25\x0a\x59\xeb\xc7\x6b\xbc\xca\x39\xce\x0c\x26\x07\x66\x12\xe8\xfa\x37\x7e\xf6\x3a\xc7\x4c\x8e\x4f\xc9\x64\x0d\x75\x43\x42\xde\xb9\x29\x07\xed\x14\xd4\x38\x13\xcb\x2a\xca\x9a\x2b\x50\x82\xfe\x54\x10\xcf\x79\xfc\xda\xed\x03\x9e\x59\xa5\xa5\xe1\x5f\xb7\x5d\xa7\x16\x12\x29\x27\x18\xb2\xc6\x60\x75\xf6\x9d\x62\x68\xcb\xe2\x15\x31\x4f\x55\x8f\x25\xd5\xef\x47\xa4\x43\x6a\x55\x10\x22\x12\x58\x90\xc4\x46\x91\x95\x95\x1e\x19\xbb\xdf\xb2\x6e\xbd\x31\xf8\x94\x37\x54\x5d\x87\x3d\xfe\x44\xd6\xea\x6b\x73\x4d\x83\xf7\x54\xc7\x19\xcf\xb6\xa2\xfc\x2e\x5e\x07\x12\xf5\x3c\xa7\x33\x7a\x96\x93\xce\xdd\xeb\xdb\x18\xa7\xae\x88\xa0\xc3\x21\x5c\x23\x49\xd4\x4b\x46\xf6\xef\x3b\xb2\x7d\x83\xa7\x2d\xd2\x01\xde\xf1\x3c\xa3\x99\xc6\x64\x46\x0c\xeb\x24\xe5\x90\xbb\x18\x61\x5e\xf1\x8c\xbc\x7c\x36\x36\x83\x84\xb3\x51\xc7\xa0\x00\x0b\x8c\x01\xf5\x30\x02\xc3\x74\x32\x81\x29\xfb\x50\x33\x36\x83\xed\x3b\xd7\x67\xba\xd3\xc9\x82\xa4\x63\x47\x16\x58\x4a\x3a\x63\xd1\xf5\x33\x82\xb3\x9c\x32\x32\x1e\xa2\x97\x33\xa6\x59\x9d\x11\x36\x7f\xe4\x67\x52\x53\x85\xb9\x3f\x2d\xe4\x8b\x67\x2d\x60\x84\xb3\x30\x33\x8b\x08\xaa\x7d\x62\x8d\x14\x2a\xbf\x33\x18\xad\xb5\xd4\x9a\x6a\xf5\x26\xaf\x8f\xb8\x9f\x60\xb2\x1b\x5a\xea\x87\x78\x3b\x5a\xb4\xfa\xb7\xe7\xee\x5d\x58\x67\xcc\xf7\x70\x4c\xf9\x70\xce\x93\xdd\x17\x9c\xaa\x94\x5f\x1f\x80\x23\x9c\xe6\x60\x0f\xd7\x1b\x85\xe5\xbb\x81\x54\x58\xed\x75\x32\x6c\x36\x18\xda\xab\x5f\xc4\x91\x84\x46\xf7\xd6\x20\x68\xb5\x9f\x4f\x22\x09\x11\x4d\x72\xab\xcb\x3b\x8d\x7d\xe9\x49\xcc\x40\xcc\xa2\x25\x5c\xe7\x46\xfd\x3f\x56\x11\x85\xe3\xd7\x82\xcf\xa9\x24\xb1\x20\x92\xe7\x17\x24\xa2\x4e\x74\xc1\x48\x7c\x4c\x9b\xd5\xc6\x3b\xe1\xbc\x7e\x47\x19\xd2\xa4\x73\x09\x75\xae\xa3\x24\x7b\x43\x7e\x5f\x12\xa9\x22\x70\x74\x31\x2a\x1c\x08\xa6\xf2\x28\x97\x47\xa0\x74\x1d\x28\x3d\x0a\x0c\xd1\x1f\x6b\x96\x9f\x04\xbe\x05\xcd\x4b\x28\x05\xa1\xc3\x84\xd0\xbc\x53\xe1\xba\xd3\xc3\x2d\xe6\xa4\x47\xf9\x80\xb3\x0a\x05\x1d\x11\x9c\x01\xbc\xe3\x2a\x3a\x90\x8a\x9c\x21\xa2\xd8\xec\x24\x11\x64\x46\x98\xb5\x17\xbd\x59\x32\x45\xe7\x24\x9e\x63\xf1\xce\x9f\xe6\x3d\x12\x95\x77\x82\x48\x78\xff\xbc\x66\xb7\x4b\x51\x73\xcb\x9e\x72\x11\x7d\xf7\x1d\x94\x97\x54\xd3\x23\x89\x17\x82\x5c\x24\xc4\x58\xa2\xe0\x75\x8a\x25\xe9\x0d\xc7\x74\x1a\x1d\xaa\x98\xbf\x83\xd7\xf6\x45\xf2\xe8\xe0\x4c\x10\xfc\x6e\xed\xa5\x66\x7c\x26\x96\x0b\x15\x01\xe7\xc5\x84\x54\xfc\x9b\xe4\x2c\x82\xf0\xc0\x0c\xf1\x68\xec\x5b\x9a\xfe\x5f\x23\x15\x2b\x63\xeb\xb2\xef\xbf\x1e\x3b\x9b\x52\x42\x62\x49\x98\x42\x38\xb1\x57\xfc\x2a\xd6\xab\xb2\x94\x48\x24\xa1\xeb\x1d\xe3\x3d\xb9\x4c\xcf\x7b\x53\x9a\x93\x1e\x17\xbd\x8c\x0a\x92\x2a\x2e\x56\x00\xa2\x6b\xbd\x2c\x63\xdc\xef\x8b\xe3\x47\xc3\x47\x63\x3f\x42\x61\xbe\x6b\xb1\x57\xb0\xf5\xda\xce\x63\x34\x1a\xeb\x7f\x01\x61\x19\x28\xa7\xac\x15\xbc\x48\x6b\x7a\x04\xae\x21\x8a\x78\x52\xb3\x18\x59\x5d\x0f\xe1\x52\x43\xf7\x2e\x72\xe4\xb2\xe7\xb6\x70\x89\x74\x81\xb8\xed\x27\x13\x52\xd0\x02\xc2\x01\xb5\xe4\x7a\x5d\x58\x24\x0d\x1b\xc9\x11\x45\x40\x23\x0d\xe8\xcf\xfb\x36\xb4\xd1\xc6\x60\xd0\x34\xca\xa3\xc2\x0d\x11\xae\x61\x07\xb5\xed\x7a\x0a\x98\xbd\x73\x37\x0f\x01\xa3\x4d\x76\x31\xa9\x4d\x27\x84\xb1\x9d\x9d\x90\x7c\xda\x6e\xfa\x6b\x9e\xb1\x35\xdf\xa9\xb3\x25\xcd\xb3\x7f\xbc\xf9\x29\xd2\x07\xb3\x41\xd0\x91\x24\xf9\x54\x9f\xd3\xc6\x5e\xd1\x34\xfa\x15\x4e\xbe\x66\xca\x9e\x38\xaa\x4a\xa6\xc3\xb4\xe5\xbd\x72\x7c\xaa\xb4\x7e\xc9\x2a\xfa\xa5\x6b\xc2\x62\xc6\xc5\xdc\x68\xe7\xfe\x99\x82\xd6\x9a\x43\x33\x58\x3f\xe6\x37\x9f\x81\x81\x00\x1e\x2e\xf2\xef\x4b\x22\x56\x03\x69\x76\xcc\x0e\xba\xd2\xbf\x35\x3d\xaf\x8e\xba\x1c\xa3\x82\x13\x53\x7c\xb1\xf3\x7f\xb1\xf3\xef\xc7\x09\x78\xc2\x1a\x9c\xc0\xd0\xf0\x4f\x54\xaa\x2e\x6e\xb0\x91\x55\x74\x39\x5f\x95\x4e\xf2\xdb\x6d\xaa\x22\x89\xd8\xcd\xcd\xb5\x66\xb7\x67\x5c\x28\xe3\xd1\x76\x60\x10\x7d\x9d\x91\x9c\x28\xd2\x63\xe1\x1b\x67\x9f\x8f\xcf\xac\xf9\x85\xb0\xec\x20\xfc\x51\xf1\x1b\x10\x71\x8a\x17\x1a\xb7\x11\x31\x8e\x37\x85\xfc\x60\x71\x12\xf2\xf4\x62\x2d\x71\x8b\x5b\x9b\xdf\x7b\xce\x88\x5d\x37\x34\x3f\x6a\x35\x34\x3f\x0a\x0d\xcd\x8f\x26\xe3\xeb\x35\xe2\xce\xdb\xc8\xa9\x3f\x25\x43\xfc\x77\xcd\x31\x22\x88\x04\x44\xb2\x6e\xfc\x7c\x92\xe7\x91\x8a\xe7\x3c\x23\xf9\x2b\x3c\x27\xf0\x20\x08\x3d\xd1\x68\x43\xc0\x31\x0d\xb7\x0e\xb1\x59\x51\xa0\xb7\x06\x8f\x29\xcb\xc8\x95\x1d\xd1\x2f\xb4\xee\xfa\x52\x3f\x7f\xc1\x45\x24\x21\x3c\xb0\x62\xf6\xb6\x61\xcb\x25\x68\x53\xa5\xa4\xe5\xdf\xe8\xba\x6c\x36\xce\x91\x51\xab\x78\xf7\x95\x0b\xb3\xb2\xbe\x9d\xc0\xed\xf1\x4a\x13\x51\x3b\x5d\x58\x89\x30\xfd\x09\x04\xca\xef\x03\x58\x73\x04\x59\x26\xf4\x74\x38\x41\x69\x42\x4f\x47\x93\x83\xb4\xb6\x46\x7e\xc3\xd8\x4b\x8b\x14\x1a\xe4\x34\x97\x2e\x87\xa8\xc4\xa0\xdc\xb2\x30\xe9\xf6\x85\x59\xba\x85\xc9\x92\x6d\xc3\x6e\x5e\x98\x65\xcb\xc2\x64\x76\x61\xd2\x75\x87\x65\xeb\x30\x2a\xf9\x0f\x9f\xf6\x70\xfc\x44\xf7\x35\x4c\x0c\xc2\xc0\xf5\x52\x10\x7d\xfc\xbe\x09\x2e\x3e\xc6\xcd\x38\x19\x61\x25\x3c\x7e\xeb\x0b\x1a\x83\x9f\xf1\xe1\x08\x05\x10\x18\x9d\x1c\xc9\x84\x5b\xec\xa1\x3c\xe1\x01\x1e\x10\x4d\xb4\xda\x17\xdc\xc7\x70\x11\x31\xe3\x41\x0b\xce\x48\xce\xd9\x4c\xbe\xe5\xe0\x30\x49\x68\xfc\x8e\xb2\xac\xdf\x07\xe7\xd6\xa3\xb2\x7c\x06\x4b\x06\xee\x98\xb7\x97\x63\x68\xfc\x8e\xac\x10\xe8\xcd\x97\x52\xf5\xce\x48\x0f\xf7\xfc\x98\x5a\x9e\x76\x43\x21\x83\x41\x82\xb3\x1e\x55\xbd\x4b\x2c\x7b\xa5\xf6\xe3\xbe\x60\xd7\x77\x99\x90\x53\xfb\x60\x62\x47\x86\x71\x4e\xd9\xbb\x08\xa2\x34\xb1\x3e\xa8\x72\x67\x82\x41\xcb\x40\xce\x3f\x2e\x2e\x73\xb2\xa4\x4e\xc4\xcb\x60\x07\x9c\x8e\x26\xf0\xc0\x1d\x2f\xef\xc8\x4a\x46\x59\x8b\x23\x26\xf1\xac\x38\x35\xb6\xfb\xf5\x4e\x64\x96\x97\x64\xd6\xb8\x33\xb0\xb2\xbf\x70\xd7\x1a\x2c\x09\xd6\x25\x29\xd6\xe0\x18\x78\x59\x4d\x33\xc2\xef\x8b\x16\x85\x87\x33\x18\x57\x1b\x38\xb7\x58\xff\x1a\x69\xf5\x5c\x12\x41\x4d\x0b\xa1\x91\x44\x8d\x7f\xab\x71\xef\xb4\x1c\x22\x7c\x28\x13\x7c\xca\x26\x91\x42\x1c\x11\x78\xa0\x9c\x5c\xa1\x99\x57\xed\xd2\xac\x73\x73\x38\x15\xae\x0d\x96\xeb\xf5\xb8\xea\xb7\xbc\xd1\x5b\xbb\x3c\x6d\xd4\x29\xb8\x1a\x58\x11\xd2\x90\x00\x98\xdc\xdc\xa8\x53\xef\xff\xfd\xd2\x3e\xf3\x5a\x6b\xbf\x5f\x23\x11\x19\x90\x08\xd6\xc7\x8a\x3e\x64\xb6\x3b\x77\x57\xa4\xe0\x76\x27\xd3\xc5\xa2\x43\xb7\x71\x06\x17\xe1\x83\x0a\x34\x97\x18\x98\xdb\x0c\xbb\x12\x95\xd6\x29\x67\x53\x3a\x3b\x22\xec\x82\x0a\xce\x8c\xfb\x5b\x9b\xdc\x6b\xb0\x71\xf0\xde\x72\x90\xf7\xf8\x7d\x52\xca\xe0\x5e\x16\x9a\x9b\x01\xac\xc3\xef\xd8\xbb\x1d\xc7\xe1\x63\xb4\xe0\xd9\xcf\xed\xcd\x6a\x6f\xd0\x1b\x87\x86\xb1\xdf\x7e\x5a\x03\xae\x98\x2f\x05\x6a\xff\x0a\x74\x52\x8e\xd8\xb6\x08\xc6\x94\xb0\xe0\x94\xe9\x15\x28\x17\x63\x52\x21\xd9\xf7\x17\x1e\xcb\x07\xd7\x73\x7e\x46\x73\x32\x06\xd1\x1c\x5f\x0d\x2e\x69\xa6\xce\xc7\xbd\x6f\xbe\xfe\xcb\xe2\x0a\x02\xa4\xb4\xe4\xaa\xf4\x3b\xca\xca\x77\xdf\x9a\x77\x19\x91\xef\x14\x5f\x54\x5f\x8e\x86\x7f\xb1\x3d\x67\x4b\xa5\x88\xc8\x89\x94\xd5\x91\xbf\xfd\x7a\xa8\xdf\xaf\xdb\x60\x4f\x0b\xdb\x91\x3c\x1a\x64\x2b\x86\xe7\x34\x1d\x90\xdc\x04\x3f\x0f\x70\xae\x3e\x26\x3e\x2c\xf7\xb2\x84\xe4\x4d\x58\x01\x96\xd4\x9e\xf3\xbd\xcb\x73\xc5\x59\xc6\xd9\x20\xe5\x8b\xd5\xe0\x6c\xa9\x54\x7b\xd8\x50\x9a\x53\xfd\xff\xc5\x19\xc7\x22\x0b\x7b\x87\xfd\xde\xdb\xbc\xd1\xd9\xa1\xb8\xfa\x44\xd7\x84\x2d\xe7\x56\x83\x1a\x1f\x0e\xd1\x8c\xa8\xb6\xe8\x14\xbf\x1f\x4d\xa8\xf1\x46\xe0\xbd\x1d\x73\x60\x2c\x44\x4d\xc8\xf9\x05\x11\x82\x66\xfa\x8b\x83\x22\xc6\xa7\x44\x0b\x67\xe9\x52\x08\xc2\xd2\x55\xc8\xf2\xce\x49\xbe\x20\x42\x1e\xe5\xf8\x8f\x95\x46\x5b\xfa\xae\xe5\xca\x34\xc7\x52\x92\xca\x0c\xa4\xc2\x4a\x0e\x94\xc0\xe9\x3b\xf2\x11\xa2\xa6\x2a\x8a\x62\x8d\x5e\x76\x33\x1c\x6d\x34\x7d\x2b\x6c\x42\x83\xc7\x40\x09\x80\x0c\x74\xc6\x5f\x69\x7c\x0a\xea\x48\x06\x54\x0e\x28\xd3\x8a\xb0\x71\x6b\x02\x13\x54\xb6\xb0\x91\xca\x29\x67\x8a\x5c\x29\xfb\xc3\xa0\xc5\x9c\xbf\x5a\x48\x24\x26\x9d\xc2\x6b\x9e\xe7\x94\xcd\xc6\xd1\x10\x29\x1f\x7a\x05\xa3\x06\x2d\x1c\xda\xc9\x2a\x22\x15\x65\xb3\x35\xb4\x83\x35\xb3\x13\x04\x21\x9a\x20\xb4\x6d\xcb\x22\xf1\x43\x7b\x1c\x97\x16\xdf\x4a\x67\xad\xd6\x8e\xde\x34\xe3\x43\xaf\xe2\xd4\xb8\x33\x44\xd7\xc6\x45\x68\xdc\xe2\x00\x47\x3a\xcd\xf2\x0a\xae\x43\x64\x59\xf9\xcc\xff\x36\xe4\x9e\x2e\x96\xf5\x9c\x12\x38\xa7\x58\x46\xc0\xc0\x1e\xa7\x8b\x65\x9c\x63\xa9\x2c\x25\x01\x88\xe6\x64\xce\xc5\x6a\x63\x1f\xdb\xa4\xda\x8d\xb3\xa7\x9a\xb2\xc3\xfd\xb7\x46\x69\xf5\x11\x71\x01\x3e\x7a\x23\x98\xd6\x30\x3a\x35\x73\x76\x9d\x11\x99\xc0\x35\xca\xa8\x56\xdd\x08\xbd\x20\x4f\x94\x12\x72\x5c\x31\xb3\x54\x00\x3c\xb6\x93\x14\x4b\x16\xcb\xf4\x9c\x68\x6a\xff\x85\xa5\x24\x02\x78\xaa\x88\x78\x43\x58\xa6\xa5\x12\x23\xeb\x48\x68\xb1\x63\x90\x7c\x62\x21\x37\x17\x8f\x5a\xdf\x86\xce\x3f\xcb\x3c\x1f\x9b\x33\x5b\x61\xf9\x0e\x46\x3b\x5c\x26\xf8\x55\xfa\xa0\x37\x08\xd6\x05\x08\x2b\xe9\xef\x11\x46\xc3\xfa\x45\x82\xe9\x3c\x42\xc5\x3d\x43\xe8\x26\x68\xe0\x5b\xf0\x3c\x07\x30\x5e\x10\x31\xe5\x62\x1e\xf9\xfb\x85\xe2\x66\xdd\xb5\x7b\x6e\x83\x3a\x0f\x47\x10\xd5\x3e\x65\x3b\x7c\x33\x76\x9f\xfa\x06\x91\x58\x0d\x13\xe2\x94\xc8\x91\x93\x2b\x9b\x23\x0d\xdd\xa7\x46\xc3\xda\x5d\xc6\xe8\xa1\x15\x88\x34\x72\xf8\x52\xc1\xe8\xf1\xd0\xb7\x7d\x38\x2e\x36\x4f\x65\x4b\x7b\xf8\x0b\xf0\x6d\xeb\xaf\x36\x5f\x3e\xd8\x35\x3f\x3d\x1d\xa1\x6f\x26\x13\xb8\x86\x30\xce\x84\x79\x57\x89\x0e\x6b\xcd\x26\xe2\x89\xcb\xeb\xd6\xb1\xd5\x7b\xa3\xba\x5a\xe3\x3c\xea\x02\x8a\xf2\xa8\x46\xaa\xdf\x57\x76\x2d\x8c\xef\x4f\xbf\x7f\x58\xfe\x8c\xa9\x7c\x4d\x58\x66\xb8\x41\xf9\x42\x13\xdc\xdf\x05\x5f\x2e\x0a\x3d\x8e\x25\x41\x17\xc3\x01\x99\x02\xf0\x80\xf5\xfb\xcc\xcf\x48\x9f\x68\x5b\x44\xc6\xf6\xd3\xcd\x5e\xf4\x0c\xce\xb0\xe8\x10\xea\x83\x6e\x19\x95\x4a\xd0\xb3\xa5\xe9\xa8\x7b\x7c\xba\x7b\x8b\x1c\xaf\xf8\x52\xd9\x73\x64\xd3\x8c\x02\x26\xf8\x94\x33\x85\x29\x23\xc2\x9e\x16\x40\xeb\xa4\x03\xcd\xf0\x07\xed\xe0\x6b\xb9\xc1\xe8\xad\xdd\x87\x80\x1f\x32\xbe\xfe\x7d\x49\x96\x24\x7b\xa2\x5f\x49\xa4\xdb\x6a\x2d\xd9\xfd\x9c\x62\x9a\xfb\x77\xc2\xf2\x7b\xf7\xcb\x44\x7a\xfb\x9f\xeb\xca\xf1\xe1\xf7\x7b\xcb\x07\xcb\x08\xd8\xc0\xdd\xba\x6d\x62\x33\xa2\x1c\xe2\x29\x91\x11\x08\xa7\x09\x10\xa8\x4e\x14\x20\x10\x4e\x15\x20\x50\x99\x2c\x40\xa0\x3a\x5d\x80\x40\xce\xa5\x72\x3f\x0a\x9b\xd3\xe9\x75\x8e\xcf\x48\x3e\x06\xff\x6e\xbe\x05\x90\x5d\x5f\x12\x57\x51\x54\x1c\xfc\x63\x37\x27\xb0\x46\x45\xc7\x13\xf7\x95\xb2\x6b\xf5\xbb\x61\x67\xe9\xdb\xe6\x78\x45\x84\x1c\x3f\x2c\xc7\xf1\x67\x72\x31\x4c\x15\xf7\xc1\x28\xee\x45\x30\x87\xa7\x0e\x33\x65\xe7\xda\xa2\x06\xbd\x8b\x37\x41\xf7\x17\x06\x8f\x65\xe7\x0a\x09\x04\x5d\xed\xf3\xa0\xe3\x4f\x5c\xaa\xb2\x5b\x89\xde\xb0\x93\x7e\x0a\xd6\x93\x5d\x12\x76\x85\x9b\x7c\xb1\x18\x68\x4e\x99\xa5\x62\x39\x3f\xfb\xa8\x6a\x62\xab\xaa\xe1\xf7\x6e\x30\x89\x13\x2b\x15\xb6\x8b\x8a\x20\x9c\x6d\x20\x37\x02\x14\xbc\xa8\x8b\x23\xfa\x8d\xac\x74\x75\xdf\x88\x2b\xa3\x55\x30\xb7\x55\xf3\x51\x96\xa9\x10\x39\x90\x24\x55\xb5\x8c\x09\x9f\x16\x79\x25\x16\xf6\x02\xe1\x0c\x4b\x9a\x0e\xf4\x59\x97\xf1\x4b\xad\xc5\xd9\x53\xa3\x45\x8f\xa9\xb6\xdc\x61\x8c\x7b\xa8\xcd\xd5\x20\x51\x82\xce\x66\x44\xbc\x17\x36\x8a\x31\xee\x3d\x36\xde\x07\x0b\xf7\x11\xfa\xf4\x9c\xe6\x99\x20\xff\x7a\x92\xcf\x6f\xfc\xac\x21\xe9\xb4\x01\xdb\x29\xe7\x68\xf1\xf2\x7a\x61\x05\xd2\xa7\xae\x63\x21\xbe\xf8\xdf\x19\xc1\x59\xf1\xa3\x43\x7c\xf9\x8d\x9f\xb5\x8a\x2b\x7a\xfc\x9a\x78\x52\xfb\x5a\x29\x81\x04\x4f\xc2\x2f\x36\x85\x8e\x42\x80\xf6\x47\x68\x1d\x80\x4d\x82\x47\x97\xc0\xd0\xd6\xb9\x29\x32\x3c\x23\x38\x38\xf1\xc3\x69\xb6\x0b\x0b\xfb\x1e\xe0\xd6\xcb\x6e\xc0\x78\x46\x9a\x46\xa8\xbd\x6c\x4a\x0b\x8f\x72\xeb\xba\x12\xb6\x98\xd3\x2b\xca\xe4\xd1\x25\x55\xe7\x03\xff\xf1\xc1\x05\x95\xce\x8f\x79\x90\x11\xe5\x0e\xc1\x36\xf3\xfc\x87\x0a\x44\xec\x38\xff\xbc\x99\x1c\x6d\xb1\x40\x75\x1a\x99\x1a\x58\x6c\x5a\x99\xf4\x3b\xbb\x75\x76\xb7\x5d\xa8\xdb\xdb\x2e\x9a\xba\xa6\x9e\xc0\x81\xd1\x14\x3b\x35\x4c\x62\xaf\x76\xbc\x66\xa9\xd0\x68\x68\x9c\xd5\x50\xb9\x54\x3f\x98\x9b\x25\x31\xae\x6e\xca\x8c\xa7\xe6\x72\x27\x3e\xa7\x59\x46\x18\x2c\xef\x89\x42\xc3\xc7\x01\xc9\x25\x09\x63\x39\xcd\x9c\x48\x78\xad\xe4\xbf\x4d\xec\xb7\xd7\xe8\x92\xe6\xf9\x33\x22\x95\xe0\xab\x86\x71\xa6\xf1\x85\x1d\x2e\x9f\x90\xbd\xf2\x35\xa6\x01\xf3\x67\x78\xc5\x0c\x43\x4d\x4c\x0b\x88\x86\x5a\x25\x55\xe4\xc4\x30\xb7\xa7\x7a\xd5\x1b\x4c\x4d\x83\x11\xd7\x5a\x6e\x4c\xbe\xd4\xda\xa1\x60\x3b\xc0\xb8\x94\x6b\x36\x90\x24\x09\x39\x06\x8e\xad\x2a\x72\xa5\x7a\x86\xac\xa6\xbc\xea\xeb\xdf\xda\xec\x12\x0b\x33\xc6\x18\x98\x43\xb4\xb5\x4d\x86\x99\x16\x2f\x8c\xdc\x57\xe1\x1a\xad\x61\x3b\x1d\x86\xf7\x36\x83\x7d\x60\x99\xfe\x58\x87\x58\x97\x2c\x5b\xdd\x97\x95\x0b\x02\x7f\x87\xf0\xb6\x62\xde\x75\xdb\x92\xb2\x8c\xa6\x58\x91\x93\x65\x9a\x12\x29\xad\x75\xf7\xf3\x19\xe6\x6a\x81\x29\xd6\xe8\x45\xb4\xba\x6c\xe7\x07\xbc\x01\xed\x2b\x64\xa7\x5a\x98\xb9\x1e\x92\xaf\x9c\x99\xeb\xab\x71\xa3\xbb\x06\xd5\xdb\xe6\xb6\x5b\xb5\x8c\x35\xcb\xe5\x8e\xd3\xd2\x51\xb4\xdf\xe9\xd2\x14\x20\xda\x88\x65\xb1\xd2\x27\xf0\x57\x03\x49\xf2\x42\x13\xd2\x3f\x95\xc0\x4c\xd2\x7a\xcc\x97\x3f\x4a\x58\xc6\x2f\x07\x82\x48\xfa\x47\x7b\x94\x52\x70\x1e\x49\xb5\xca\x49\xe1\x33\xd9\x76\xb5\x81\xf8\x87\x22\x4c\x99\xb4\xba\xbb\x93\x07\x6a\x8d\xf2\x2e\xa2\x15\xe5\x01\x54\x25\xdf\x73\x2c\x94\x46\x46\x53\x32\xf4\xed\xbe\xa7\x46\x14\xd1\xcd\xa9\x7c\x85\x85\xe0\x97\x63\x2a\x07\xcc\xfc\xa5\x1b\xea\x31\x2c\x85\x1b\x81\xcc\xfc\x65\x4f\xa5\x67\x58\x2d\xe7\x8e\xf8\x8b\xae\x87\x23\xa4\x38\xcf\x15\x5d\x9c\x68\xa4\xe9\x5d\xc0\xcb\x2b\x65\xe0\xde\xbd\xe6\x6e\x61\x20\x9a\x63\xf9\xee\x65\x66\x47\xf9\xb5\x55\xe4\xd3\x0f\x5b\xb8\xa1\xbb\x3d\x59\xac\x5c\xa0\x8d\x6e\x86\x0e\x87\x10\x05\x49\x77\x0d\xb6\x81\xcf\x93\x2b\xd1\xd0\x3b\x21\x91\x6a\x1e\xf3\x20\x61\x87\x3e\x35\xcf\x48\x6e\xdc\x30\xcc\x00\xae\x8b\x13\xa9\x84\x93\xa6\x78\x20\x40\xa9\xd8\xff\x5d\x98\x7c\xf4\x28\xfa\x0f\x64\x1c\x23\xc6\x18\x2d\x88\x48\x09\x53\x63\x7e\xc4\x10\x9f\x4e\x25\x51\x63\x97\xd3\x33\x1a\x22\x0c\x37\x4c\xf9\x88\x39\x8d\x81\x66\x2f\x99\x24\x42\x3d\xb7\x17\xb3\x9d\xe7\x75\xe9\x48\x69\xb7\x84\x45\xd0\xff\x88\x80\xbc\x98\x01\x78\x3a\x9c\x98\x14\x90\x9a\x2a\x06\x1a\xfd\x03\xef\x3d\xe4\xbc\xb9\x96\x34\x7b\xc1\xad\xd7\x1a\x84\x07\x05\x0f\x08\x64\xe2\x6b\x4b\x15\xaa\x58\x3d\x5c\x64\x9e\xb3\xdf\xe8\x69\x4e\xf9\x1a\xab\x73\x00\x63\xac\x94\x30\xe1\xa9\x08\x43\xa4\x62\xce\x22\x30\xe7\x4b\x3d\x2f\x7c\x51\xcd\xe4\xed\xaf\x47\xaa\x22\x85\xe1\x3e\x54\xda\xbc\xce\x85\xe5\xdf\x3c\x0c\xa8\xd0\x31\x26\x54\x40\x6c\xe2\xa4\x67\x00\xda\x75\x29\x73\x78\x9b\xfe\xe5\x43\xca\x82\xc7\x06\xc7\x36\x97\xb4\xb9\x8b\x79\xaa\x61\x8c\xac\x98\x64\x63\x64\xdb\x6f\x78\x6a\xad\x6d\xa4\xae\xf9\xe9\x48\x99\x9f\x69\x19\x90\x88\x08\x18\x02\x77\x59\xad\x2d\x2b\x40\x96\xd6\x3c\xf9\x54\xd5\x95\x96\xf1\x21\x0a\x7e\x6f\x96\xd8\xcc\x22\x15\x21\xda\xe6\xd3\xc8\xfa\xbb\xc5\xc5\x76\x2d\x32\xc9\x15\xa4\x11\x1b\xcf\x86\xc8\x78\x1b\x6d\xcc\x99\x67\xe6\xfe\xb7\xe1\x1a\x1e\xc8\x16\x87\x2c\xcd\xb8\x2c\xe8\xd2\xe6\xd7\xb6\xce\x41\x26\x78\xda\x39\x74\x7a\xd2\x04\xf1\x19\x16\x12\xc0\xfa\xc2\xe9\xe9\x46\x12\xb5\x7e\xdd\xe0\x6c\x0d\x11\x4d\x0a\x77\xbd\x83\x3c\x26\x57\x54\x99\xb4\xe8\x73\x7e\x41\xa2\xc2\x7f\x2d\x8f\x89\x16\xa3\x23\x13\x2e\xa1\x79\xa5\x19\xdc\x53\xa1\x79\x19\xa0\x5c\x75\x90\xa1\xf7\xf3\xd7\xfb\x55\xa2\x6d\x79\xba\xcd\x04\x4d\x94\x8b\x9b\xea\x01\xdb\x9d\x12\x87\x10\xe1\x96\xd6\xc3\x2e\xba\x6d\xdd\x0e\x0a\x3a\x9d\x05\x1b\x21\x39\x82\x5a\x70\xfc\xfe\x7b\x7e\x15\x99\xf4\x43\xf1\xd5\x03\x61\x17\xfb\xe8\xe1\x41\xf3\x5e\xb2\x76\x27\x49\x5a\x92\xae\x37\x37\xa6\x96\xf4\x8b\xb9\xd4\xf9\x3c\xba\xce\xc9\x54\x19\x6f\x5b\xb8\x86\xdf\x45\x79\x92\xc7\x73\x22\x66\x24\x5a\xc2\x82\x47\x18\xe8\xaa\x6b\x51\xd8\x1b\xfc\xf6\xb8\xb9\x01\x66\x09\x4a\x96\x85\xad\xf3\xe1\x2f\x53\x13\x3b\x2e\x12\x12\x07\x78\x28\x14\x71\x86\x44\xbf\x2f\xea\xcb\xd2\xef\x7b\xec\x96\xaf\x0f\xc3\xd7\x1e\xcf\x93\xa0\x6e\x85\x4d\xb3\xd6\x03\x9e\x5d\x58\xf9\xc8\x50\x06\x40\xb9\x45\x7c\xda\x92\x22\xee\x61\x71\xf6\x98\x1c\xa7\x76\xde\xfd\xbe\x1a\x0c\x90\xfb\x91\x24\x09\x1d\x8c\xec\xa3\xd2\xa5\x93\xff\x99\xc4\xee\xf0\x18\x28\x04\x16\x57\x40\xf3\xa4\xa4\x49\x78\xd5\x2e\xf6\x8c\x79\x10\x05\x1f\x3b\x1e\x8e\x47\xb0\x18\x61\x9e\xe4\xe1\x9e\x8b\x15\x16\x33\xa2\x8a\x9d\xd7\x1c\xdd\xf8\x56\x1e\xcc\x1b\xfb\x49\x98\x1b\xf5\xea\x1a\x02\x3f\x98\x7d\x6c\x28\x0d\xa0\xb4\xf8\x7d\x4e\xe8\xec\x5c\x4b\x26\xa3\xe1\xf0\x4f\xbe\xd5\x15\x40\x19\x74\x64\x31\x87\x71\x29\xbf\x45\x30\xce\x96\xc2\xe8\x54\xd1\xc3\xe1\xb0\x6b\x54\xd3\xdf\x60\x7f\x51\x83\x4d\xcb\x3c\x0d\xc0\x02\xf1\xaa\x92\x25\xdd\x1c\xdb\x37\x37\x23\x93\x35\x34\x8f\x2a\x1e\xd7\xd7\xf6\x34\x57\x6b\x44\xa0\x66\x66\x8b\xcd\xe8\x68\x9d\xa1\xfb\x7b\xd5\x56\xca\x40\x1c\x83\xc7\xc3\x3f\x81\xf1\x70\x5d\x62\x94\x2e\x6c\xa8\x3c\x02\x4b\x91\x47\xff\x5f\x35\x64\xc9\x1e\xc0\x08\x40\x00\xeb\xc8\x6d\x1d\xfd\xeb\xc5\x15\x18\x5b\xb4\xfb\x4f\x18\x44\x6b\xa5\xb9\xa3\x8f\x79\x9f\x63\xa5\x05\x95\xde\xe0\x2b\x68\x15\x3e\xb7\x50\x8b\xae\xed\x1b\xe0\x17\x9c\x69\x9e\xaf\xf1\x3a\x08\x32\x3d\xac\x6f\xbb\xc4\x7a\xb7\xb6\x8b\x38\xce\x63\x0d\x96\x87\x8b\xc6\x0f\x68\x90\x9d\xc6\x42\xb0\x0e\x06\xe7\x5a\xb3\x37\x4a\xc1\x1b\xad\x13\x90\x16\x3b\x45\xc9\x27\x39\x4b\x89\x35\x0c\xd4\x4f\xe8\x9a\x73\xaa\x66\xfd\x1b\x15\x1c\xad\xaa\x0f\x16\x7c\xc1\x2f\xda\x6d\xfd\x7b\x78\x70\x15\xf8\x1b\xfc\x26\x3f\x87\x15\x2c\xb8\x05\x42\xd6\x9e\x55\xa8\x06\xcf\xa8\x34\x55\x64\xb4\x72\xc0\x99\x75\x86\xaa\x18\xaf\x38\xab\x05\xd4\xeb\x87\xc6\x1b\xdc\x36\x06\xc0\x98\x74\x73\xca\x88\x2b\x48\xa3\x87\x0a\x62\xfb\x0f\x47\x36\x57\x41\x25\x09\x00\xb2\x44\x40\xb2\x67\x0e\x31\xff\xbe\xa4\xe9\x3b\x1b\x98\xb0\xd5\xf7\xca\x65\x06\x68\xf6\x94\xa7\xc3\x89\x96\xc5\xdd\x9b\x97\xf2\xe9\x52\x2a\x3e\xef\xa8\x84\xb3\x61\x0a\x56\x86\x02\x08\xa4\x66\x00\x00\x91\xfd\xa3\x68\x6a\xa0\x6e\xf9\x7e\x5d\x3f\x6a\x4c\xdd\x9b\x9d\x47\xbd\x1f\xf8\x52\x14\xd6\x5f\x30\x3a\x0f\xec\xc2\x8f\xcc\x3b\xe9\x5f\x3e\x0a\x5f\xfe\xa5\xf6\xf2\x2f\xe1\xcb\xd1\xc3\xda\xdb\xd1\xc3\xca\xeb\xde\x33\xbc\x2a\xdf\x85\x96\x6c\x8b\x29\xff\xce\xc1\xbd\x36\xe8\x2c\xd2\x2c\x34\x94\xbf\xea\xba\x07\x64\x5e\x60\xde\x63\xb0\x40\x9c\x2d\x8c\xb4\x0d\xed\x5d\x2b\x5e\xfd\xde\x71\x85\x0c\x8a\x4f\xda\xa7\xb5\xe5\x72\xa2\xc0\x96\x0f\x6b\xce\xee\xf2\x6a\xec\xe7\xb9\xe5\xc3\xc0\x05\xe2\x1f\x21\x0c\xdc\x42\x64\xb6\xad\x77\x62\x7a\xb8\x25\x18\xdc\xd9\x81\x1e\x8e\x59\x12\x74\x8f\xa9\x7c\xe6\x0c\x90\xc8\x7d\xee\x2b\x24\x4c\x21\x12\x6f\x28\x8f\x2a\xb8\x86\x31\xc3\x8c\x4b\x92\x72\x96\xc9\xa8\x74\xec\x1a\x55\x1d\xbb\xaa\xae\x64\x35\xff\xae\xaf\x42\x59\xac\x64\x1d\xc0\xb4\x8a\xe7\x44\x4a\x3c\x23\x7a\xe8\x76\x18\x46\x23\x8d\x04\x9e\x94\xf9\x3e\x44\x4b\x5e\x91\x32\x5b\x48\xf9\x74\x8d\x94\x99\xb2\xf5\x6f\xfb\x0a\xd9\x46\x25\x6f\x2a\x5d\xe2\xbe\xad\xa3\xd3\x3e\xfe\x06\x85\xc8\x2b\x3b\x46\xbc\x98\xdb\x37\xe3\x62\x41\x2a\x18\x19\x7d\x5b\x73\x58\x7b\x38\xaa\x0c\x95\x55\x46\x79\x38\x1a\xbb\x0b\x00\x3b\x3a\xf3\x78\x7e\xf8\x4d\x38\xea\xc3\x47\x85\x07\xdd\xc3\x47\x1a\x79\xa3\xd2\x85\xae\xc0\xb1\xe3\xe1\x91\x7e\x5b\x8c\xfe\xcd\x6e\x2e\x6e\x5f\xa1\x6f\x26\xe8\x74\xf4\x15\x7a\xf8\xc8\xba\xba\x21\xfd\x29\xc2\xd4\x33\x97\xd9\x3f\x24\x5d\x3b\x8f\xf2\x65\x54\x3b\x5c\xb7\x59\x99\xa7\xf2\x6e\xf8\x96\xf8\x83\x91\xe1\x8b\xda\xc5\x4f\x39\x3f\x30\x09\xef\x44\x6b\x53\xd7\xa7\x99\xe6\x14\xf6\x44\xd5\xd2\xa0\xfd\xab\xdb\xe7\x44\x6f\x02\x2d\x39\xb5\x5f\x22\xe8\x77\x41\x46\xe9\x58\x10\x13\x4c\xed\xee\xad\xe4\xf3\xf9\x42\xad\xda\xaa\x4b\x95\xa1\xb3\xa6\xfe\xc0\xdf\x86\x85\xcd\x8c\x9c\xb2\xc1\x68\x72\x10\x16\x16\x11\xe6\x2b\x95\x04\xd4\x0a\xae\x49\x2e\x49\x0f\x27\xaa\x34\xc3\x99\x40\x26\x93\xf8\x65\xac\x2c\x68\x58\xa3\xd8\x54\x10\x2b\x5b\x59\x35\xbf\xdf\x8f\xc8\x69\xf1\x63\x30\x9a\xc4\x54\xfe\x84\xa5\x4a\xb4\xce\x4c\xd6\xfb\x39\xd0\x4c\xe5\xc0\x67\x97\x18\x10\xa6\xaa\xa9\xa5\x3f\x97\x03\x8d\xc1\xc0\x5b\xfe\x5c\xcf\xa7\x63\x49\x81\x99\xac\x49\x28\xba\xf1\x92\x68\x61\x0d\x70\xbe\xf6\xd7\xff\xfd\xaf\xa3\x23\x04\x00\x44\x2a\x69\x4b\x71\xe2\xfb\x05\xc3\x97\xb9\xc1\x2b\xa4\x11\x11\x78\xac\xc6\xe5\x52\x93\xfa\x2a\xef\xb7\x12\xb3\x9c\x9f\xe1\x7c\x60\x4b\x92\x7c\xbe\x45\x08\xb6\x5f\x75\x46\x7a\xf7\x71\xf6\x03\x9e\x9f\x2d\xc5\x8c\x88\xe6\xed\xeb\x7e\xd0\x9a\x68\xa2\xc1\x9c\xb0\xe5\xe7\x83\x75\x73\x02\x5d\xc1\x97\x8a\x88\xce\x98\x7b\x2e\x14\xc9\xca\x62\x82\x5d\xa5\x1b\x7d\x76\x0e\xe9\x2c\x9e\x1d\xb5\x1b\xa3\x46\xc6\x58\x16\x14\x2a\x2c\x2b\x1e\xda\xb2\x7c\xfa\xeb\x51\x33\x25\x19\x2b\x12\x21\xda\x3a\x8f\x26\xba\x32\xf8\xed\xaf\x46\x9d\xc7\x4e\x92\x24\xec\x78\x30\x1a\x87\x0f\xf0\xf1\x68\xcc\xfe\x8a\xf5\x63\xf6\x37\xfd\x63\x68\x2c\xc2\x1b\x57\x1e\xcd\xb8\xe2\x5a\x0c\x78\xc1\x45\x5b\x21\x40\x78\x4d\xfa\xfd\x20\x45\xa3\xbb\xaa\xb6\x08\x0e\xd4\xdf\xb7\xdc\xb8\xb6\x48\x80\xae\x4d\x82\x8e\xd7\x58\xe0\xb9\x1c\x07\xf9\xb0\x82\x41\x1a\xf9\xbe\xb6\x91\x9c\xa6\xe3\x76\xf7\x3a\xdf\x5a\x91\xf9\x42\xab\xf8\xb6\xf1\x27\xbf\x75\x0d\x18\xa0\x89\x7c\xed\x70\xbe\x34\x80\x98\xfb\x20\x88\xac\xcf\x51\x18\xbf\xb8\xc7\xc5\xa2\x19\xc8\x8e\xd0\x15\x31\xa6\x9b\x74\x75\xb9\x87\x2e\x65\x74\x8e\x67\x64\x30\xa5\xd5\x7c\x30\x9f\xe9\x98\x9b\xd2\xd9\x52\x90\x8a\x2c\x04\xc2\x09\x06\xac\x38\x78\x6c\x74\x7a\x91\xba\x2b\xc8\xbc\xb8\x82\xa7\x7f\xb8\x1b\x78\x1b\x96\x39\x44\xd6\xcc\x33\x1e\x22\xdd\xcb\x7c\xb0\xc1\xa1\x44\x5a\x77\x0b\xb3\xda\x83\x48\x61\xe5\xe2\x5c\xa4\x41\xd0\xfa\x11\x80\xc7\xfe\xb1\xad\x7d\x79\xf4\x7f\xe3\x3f\xff\xd7\x51\x14\xff\x19\xfe\x8f\x23\x78\x3a\x9a\x8c\x8b\xf7\x6b\xe8\x2e\x82\x5e\xea\xf9\xff\x4c\x14\x6e\xcd\xdd\x6a\xed\xa4\xad\x57\x6c\x16\x1a\x15\x33\xac\x96\x02\xe7\xff\xa9\x7f\x16\xa0\xf9\xa7\x3f\x98\xdf\xfb\xf2\x03\x7a\xb1\x1a\x68\x01\x60\x4e\xad\x8e\x14\x6e\x80\xea\xbb\x0d\xbd\xee\xe1\x1e\xf8\x8d\x9f\x0d\xda\xab\x0e\x7d\xda\x7d\x50\x51\x01\xea\x93\x02\x67\xfc\x8a\x64\xde\xa9\x7b\x82\xca\x97\x85\x41\xed\x97\x05\x61\xe3\xc3\xd1\x5e\x6b\x5e\xfd\x4c\x50\x7c\x69\x30\x27\x4a\xd0\xf4\x2e\xe8\x47\xfb\xb9\x8f\x57\x21\x92\x03\xa9\x04\xc1\xf3\x3d\x8c\xa8\x73\xde\x1a\xd0\xff\xe1\x52\xd0\x6e\x05\x98\xe7\x35\x7d\x50\xd1\x39\xc9\x29\x23\x95\x65\x97\x5b\xad\x95\xa7\x93\x75\x21\x97\x3d\x0b\xba\x35\x8d\x69\xfe\x9d\x13\xc9\x2e\x88\x90\x94\xb3\x13\x53\xe1\xf8\x2d\xdd\x50\x5b\x3b\xec\xab\xbf\x64\x7c\x15\x1a\xbd\xb5\xba\x61\x4a\xb2\x99\x9b\x6a\xcc\x18\x57\x78\xcb\xa4\x1a\xd3\xae\x4e\xad\x4b\xc5\x69\x74\xdb\xee\xd8\x61\x33\x96\x0c\xb5\xa8\x07\x45\x2c\xcf\xf9\xe5\x33\xac\x48\x72\x38\x2c\xfd\x0a\x79\x42\x62\x9b\x4c\xec\x89\x8a\xf0\x60\x04\xad\xd4\xe5\xe6\x12\xcb\x00\x52\x53\x87\xce\x4a\xad\xc1\xd3\x03\xd9\xef\xf3\x7e\xbf\x9a\x49\x81\x43\x1b\x2c\xf4\xcb\x34\x02\x19\x5e\x01\x18\x67\x74\x5a\xcf\xd1\x2c\xeb\x8d\xf4\x29\xb8\x92\x00\xfe\x6d\xd8\xef\x47\x95\xf9\x16\x29\x4e\xae\x03\xd6\xa0\xd0\x5c\x1f\x32\x62\xdd\x28\x9a\xdf\x9a\x07\xb0\xbe\x8f\xe8\x74\x3a\x98\x52\x92\x67\x72\x80\x59\x36\xb0\x38\xb8\xa7\x3c\x81\x4e\xa7\x77\x89\xb7\xeb\xe9\x74\x39\x5c\x3d\xcf\xa8\x22\xd9\x98\xca\x01\x31\x7f\x19\xcf\xdf\x27\x59\x66\x9f\x61\xfd\x87\x79\xf4\xcc\x24\xb8\x31\x0f\x6d\xae\x1b\x2d\xa2\xeb\x91\xed\x91\x70\x41\xc4\x19\x97\xe6\x90\xf4\x63\xb6\x5f\x48\xe8\x3e\xf1\x5b\x5b\x8f\xdf\x36\x04\x10\x15\x9f\xdc\xde\xc5\xb4\x33\x3d\x8a\x19\x6d\xef\xe3\x5a\xee\x19\xdf\xa4\x51\xa7\x71\x52\x97\x4f\x36\xe6\x2e\xb0\x9e\x7b\xce\xda\x3b\x98\x0a\x3e\x1f\xb8\x7c\x54\x5d\xd5\x60\x03\x2f\xbf\x9c\xa7\x38\x1f\x48\xc5\x05\x9e\xd5\xab\x87\x7d\x9a\x1b\xb4\x8d\xde\xe3\x36\x15\x4d\xd7\xdb\x40\x62\x0e\x30\xa7\x09\xc2\x87\x5c\x14\x8c\xba\xe6\x38\xee\xb2\x15\xd4\xd8\xf2\x75\x87\xb0\x65\x5c\x89\x5c\x1f\x93\xdb\x7c\x43\x7a\x5e\x63\x8b\x2f\x1a\x03\xa4\x20\xd2\x32\x1a\xfa\xb5\x92\x20\x21\xb8\xe6\xb3\xbf\x73\xcc\x82\x9f\x62\xc9\x6a\x2f\x7f\x59\xaa\xc5\xb2\x90\xfd\xcf\xf9\xe5\xeb\x1c\xb3\x9f\xed\x8a\x8f\xab\x05\x39\xed\x5a\xbb\x77\x3f\xda\xfa\x0e\xd6\xbf\x46\xf7\x7b\x6e\x50\xb4\x5b\xcf\xe7\x8e\x10\x4d\x5f\xa5\xdb\x37\x4c\x73\x7e\x66\x9d\x27\x68\xd9\xe4\xd8\x34\x07\x63\xe0\x96\x69\x0d\x6d\x15\x8e\x7d\x5d\x86\x0d\x27\xfa\x18\x79\x81\xc3\x69\x0b\xa2\xd7\xb1\xbc\xe2\xa8\x85\xf0\xff\xc6\xcf\x5c\xe2\x2e\xef\x16\xec\xe3\xe7\xc3\x7b\x85\xaf\x6b\xf7\x37\x5f\x37\xe3\xf3\x6b\xe9\xd3\xf5\x7b\x78\x73\x03\x9e\xf2\x65\x9e\xf5\x18\x57\x3d\xf3\x9d\x1e\x65\x06\xcb\xed\xd7\x3d\xaa\xb8\x07\x4a\x05\xcf\xf3\xb7\xdc\xde\x54\x6c\xb8\xf8\x79\x58\x9b\xd7\xe8\xa1\xbf\x7f\x7a\x1c\x40\x98\x63\x56\x00\x38\x7a\x3c\xc6\x45\x3a\xe3\x60\x12\x01\x01\xe0\xf2\x6e\xe5\x51\xed\xc6\xa6\xf8\xca\xb7\xb5\xbb\x15\x53\xf3\xb1\x01\xff\xa8\x06\x7f\x8e\x59\xcf\xd4\x69\xab\x7e\xd7\xc1\x2e\xda\x61\xf7\xf7\x3a\x3b\x26\x21\xf8\x7a\x82\x4e\x47\x0f\xd1\xe8\xdb\x4a\x32\x02\x64\xa5\x9c\xbb\x43\xa3\x26\x9d\x81\x79\x31\x44\x80\x91\x4b\x53\x5a\xc4\x5c\x7f\x59\xf6\xe2\x2f\xde\xbe\x6e\xbd\x77\x0b\xc8\x57\x2c\x59\x83\x78\xff\xd2\x41\xbb\xf6\x65\xd9\xd7\x2a\xf9\x45\xf7\xbf\x8c\x55\x60\x80\x77\x84\x43\xd9\xcb\xac\x2c\x95\xe3\xdf\x78\xd3\x9e\xb5\x8b\xea\x95\xf6\x8a\x6f\x65\xe3\xb9\x3b\x37\xcb\xbc\x8d\x3c\xeb\xa9\xab\x92\xfa\x62\xe4\x6f\xee\x46\x8f\xaa\x9b\x6b\xd8\x4a\x5c\xb5\xcd\x65\xd7\xb7\x4e\x5e\x05\xff\x0d\xa8\xab\x4e\xed\xce\xf3\xb6\x9b\xf2\x86\xbb\x51\xde\x10\x8d\x8a\x4b\x41\x03\x7a\xc3\xd1\x76\xe3\x97\x6b\x7b\xa1\xf1\x2a\xe0\x11\xf5\x77\x25\x8c\xe6\xcd\x1a\x55\xc0\x68\x4c\xc3\xac\xa0\x3d\x8d\x63\x2a\xdf\x12\xa9\xf4\xe2\x59\xdf\x21\x8f\x81\x68\x88\x86\x7b\x5e\x57\x9a\x22\x43\x78\x46\x8e\xf0\x99\x54\x02\xa7\x9f\xd1\x40\xb1\xf9\x7a\xc0\x4b\x14\x5a\x07\x2b\xbe\x5e\x3e\x79\x46\x64\x6a\xe3\x1b\xed\xb3\x19\x57\xfc\x6d\x91\x2f\xa4\xd5\x7a\x5e\x7d\x68\x24\xb5\xe2\x5c\xf6\xe1\x06\x9c\xc9\xf1\x75\x9a\x13\x2c\x9e\x87\xef\x5b\x69\x24\x1c\xc1\x2f\xaa\x4d\x69\x58\x5b\x52\xd2\xdd\x8d\xc0\xf5\x7e\x56\x35\xbf\x7e\x67\x36\x7c\x71\x5b\xbc\x6e\x73\xbd\x3f\x59\xc0\xee\x3e\xa6\x72\x3f\xcd\x05\x16\x78\x4e\x14\x31\x39\x9d\x6c\xd4\xee\x1e\x40\x16\xa5\xd7\x5c\xc7\x4f\x17\x9b\xbc\xb0\x79\xd8\x3b\x52\x44\x69\x4e\x9c\x91\x94\x67\x24\x73\x09\xdb\x01\x44\xae\xcb\x8f\x27\xbf\xbc\x6a\xb9\x83\xb5\xad\x1a\x66\x09\x93\x29\x9c\x24\x41\x0d\x41\x77\xd5\x6e\xda\x43\x97\xe1\x5b\xc1\x6b\x7f\x10\xed\x19\x6a\xdb\xbe\x10\xff\x92\x74\x16\x84\xc0\x77\xc0\xe7\xc2\xb8\x34\xbf\x69\x2d\xf6\xfc\x91\x2f\xac\x54\x19\x71\xe5\xb9\x61\xd5\xb1\xa3\x66\xc4\xdd\x8d\x55\x5a\x9d\x56\xbd\xf6\x9c\xaf\x95\x41\x6a\x2c\x9d\xd0\x3f\xc8\x78\x64\xbd\x42\x0c\x63\x6d\x1a\xd6\x34\x69\x97\xaf\xe3\xd3\x49\xa7\x66\xe2\x65\x92\xb2\x39\x30\xd7\xad\x6b\x88\x8a\x75\x68\x1d\xbe\x78\xb9\xd3\xe0\x7e\x45\x8b\xa1\x73\x2a\xd5\x5b\x7e\xc2\x45\x5d\xfb\x2c\x36\x67\xd9\xc3\x19\x37\x9f\xb6\x4f\xa6\x68\xaf\x07\x3c\x31\x0d\xc1\xed\xb7\x96\x92\xae\xc0\xc1\x1d\xb0\x7d\xb5\x9c\x85\x9c\x3d\xa3\x72\x4e\xa5\xbc\xbd\x07\x42\x0d\x5a\x73\xed\xab\x3a\x2e\x46\xde\xd7\xe0\xf2\xe9\x8d\xeb\x7e\x3f\x06\x68\x6c\x3d\xfb\xf5\x56\xa2\xf2\xe4\x9c\x5f\x52\x36\x2b\x0d\xc9\xcf\x88\xc2\x34\x97\xe3\xc3\x11\x72\x55\xee\x6f\xa7\xf3\x7c\x24\x9d\xdc\xeb\x3c\x3e\x7a\xb7\xba\xcb\xec\x6a\x96\xe0\x94\xc9\xd8\x62\x07\x4e\xe4\xa3\x7b\x5b\x33\xe8\x3d\x2e\xb4\x88\xc7\x0d\x25\x22\x6a\x55\xd1\x61\xbf\x0f\x5e\x70\x71\x66\x22\xf7\x8d\x16\x76\x73\x13\xa9\x04\xfc\x93\x2f\x45\xef\xc9\xd3\x9f\x7a\x26\x1f\x64\x2f\xe3\x44\x1a\x45\x63\x26\x30\x53\xbd\x05\x11\x9a\x8a\x35\xca\x14\xef\xb9\xa9\xf5\xc2\x5b\x06\xe0\x64\xf4\x60\xf1\xa2\x6b\x45\x55\x4e\xc6\x4e\x6d\x79\xc5\x95\xa9\xc2\xa3\x7b\x3e\x0b\xc8\x37\x23\x32\x15\xd4\x3a\x7a\xab\x75\x99\xdf\x6f\x47\x35\xe4\xb1\xd5\x42\xf6\x36\xa2\x07\x7b\xca\xb8\x5c\x99\xdb\xb5\x29\xa6\xf9\x52\x90\xcf\x68\x4a\x6f\xd9\x10\xef\xc3\x2e\x04\x49\x6d\x12\xe3\x32\xcd\x41\xfb\x11\x5d\x4d\x15\xbb\xb0\xd5\x92\x06\x58\x08\xfc\x99\xa3\xfa\xeb\x67\xf3\x76\x77\x27\x7f\x72\x83\x39\xcf\xe8\x74\x65\x13\x9b\xd7\x8f\xf0\xc3\xa1\x3b\xa6\x9e\x94\xb8\x69\x3d\x36\x03\xdc\xb9\xcb\xae\xca\xb0\x1b\xee\xb8\x7d\xfa\x55\x87\xce\x71\x75\xf3\x57\x72\x4f\x6c\xa8\x85\x5b\x5c\xe0\x85\x9f\x0d\xae\xee\x7c\x58\xf2\x63\x68\x6f\x93\x4a\x0d\x4c\x0b\x24\x25\x78\x4d\x45\xaa\xd5\xb3\x29\x84\x37\xcc\x56\x4b\x4c\x55\xa3\x1d\x8a\x1a\x75\x53\x63\x51\xb3\xfa\xf3\xef\xae\x8d\x24\x46\xe5\xf3\xab\x05\x66\xcd\x4b\x96\x7a\x90\x29\x49\x9c\x21\xc1\xdc\x46\x9c\xd8\xcb\x88\xd8\x20\xc2\x8e\xf0\x23\x3f\x3b\xb1\x30\xfb\x72\x53\xa6\x32\x10\xb9\xb9\xa9\x94\x2f\x5f\x43\xb4\x20\x42\x52\x59\xb7\xd0\xef\x3c\x7e\xe2\xcc\x9b\x8c\x2b\x3a\x5d\x15\xa8\x7b\x7a\x8e\xd9\x8c\x44\xa0\x84\x08\xec\xe9\x7d\x52\x5b\x41\x53\xab\x71\x66\x85\xce\xff\x4e\xb2\xfe\x06\xb3\xc8\x47\x17\xea\xb7\x4a\xde\x61\x1f\xc7\xd4\xde\x76\x4d\xea\x43\x4b\xdf\xe6\x88\xbf\xdf\x32\x68\x20\x7a\x96\xa7\xaf\x91\x5c\xcc\x9f\x9d\xe2\xa8\x96\x46\xb4\xba\x77\x27\x05\x4e\xe5\x33\xa4\x05\x57\x40\x4e\x80\xaa\x64\x6b\xd6\x44\xe7\x73\xc6\x2c\xa5\x4b\x8f\x06\xf6\xcc\xd8\x3c\xdc\x49\xfc\x3b\x51\x7c\xd1\xfb\x91\x9f\x55\x85\xbe\xbd\x64\x4f\x0d\x41\xef\x37\x7e\x26\x63\xb0\xbf\xac\xe8\x32\x36\xdb\x9c\xb9\xb7\x5e\xba\x8f\x79\x87\xd7\x58\xb5\xaf\x90\xb2\x69\xa0\xdf\xe0\xa0\x90\x7b\xa9\x15\xb8\x8e\xd6\xcf\x20\x2a\xae\xba\x60\xac\x51\x6d\x12\x6c\x34\x8a\xc0\x03\x64\x8e\x1e\x9b\x20\x87\x4e\x57\x11\x86\xfe\xbe\xf0\xeb\xe2\xb3\xdf\x22\x55\xbd\x28\xac\x87\x2f\x8d\x46\x48\xd5\xee\x53\x46\xa3\xb1\xaa\x91\x52\x91\xe2\xae\xa4\xa6\x6f\x77\xbb\x04\xf9\x1a\xa2\xa8\xf5\x16\xa4\xa1\xbf\x88\x9b\x9b\x48\xec\xa7\xbf\x04\x34\xb4\x23\xd9\x62\xa1\x9a\x74\x2b\x3c\x01\x7e\xbb\x1b\x01\x7e\xed\xef\x4c\x6e\xa9\xad\x54\xad\xb2\x77\xd9\x96\x78\xbd\x29\xd8\xc9\xa4\x85\x64\x78\x4e\x10\xcd\xd6\x00\x01\x77\x2b\xad\x79\x72\xf0\xb8\xdd\x93\x4c\x6f\x8d\xc6\xb5\x9d\xe9\xdb\xcc\xe4\xf8\xa3\xf1\xd1\xc7\x62\xe6\xbc\x7b\x24\x98\xf8\xf8\x56\x55\x0d\x40\x28\xdb\xc4\xf6\x4e\xad\x6c\xe9\x7c\xf9\x95\xa0\xf3\xb9\x8d\xa4\x68\xeb\x40\x26\x7b\x67\x63\x6c\xac\xeb\xdd\x5e\xd1\x8d\xfe\x2e\x1b\xae\x81\x4c\x90\xe4\x4f\x78\xc9\xc2\x0a\x14\x95\xd2\x16\xfe\x1c\x32\x4d\x5f\x3b\x6c\x44\x8d\x92\x72\x3e\xc1\x50\xf5\xee\xa7\xb9\x61\x5f\xe8\x71\x7a\xf6\x9b\xef\x73\xd6\xf8\x4b\x56\x73\xda\xac\xe1\x1a\xbd\xc7\x9d\xd6\x2d\x35\x27\x87\xe3\x3b\x4d\x1b\x35\xc0\x36\x26\x51\x28\x01\x33\xd7\x96\xf7\x09\xae\xad\x0b\xb6\x57\x4e\xd5\x4f\x6d\x55\xb9\x65\xb6\x53\x0f\x57\x33\xcb\x69\xe0\xac\xf6\x81\x92\x9c\xee\xbd\x45\xbc\xdf\xf1\xc7\xb6\x28\x9c\x3a\x6f\xca\xd2\x43\xd2\xbb\x64\x4e\xd0\x8e\xa6\xac\xca\x84\x1b\x8a\xa8\x7b\x53\x0b\x1b\x08\xbd\x45\x53\xa3\xcd\x3f\xe5\x4b\xd6\xf0\x00\xf4\x4e\xcf\xd6\x9f\x76\x43\xa0\x69\xa5\xa1\x09\x2f\x8d\x4b\x65\x51\x6b\x9c\xde\x35\xfb\x98\x47\x04\x3e\x50\x61\x72\xbb\x07\x91\x2a\x52\xdf\xe9\x4e\x4e\x47\xf5\xc1\xc7\x18\x05\x3f\x74\x7b\x93\x40\xc1\x9f\x04\x8a\xcf\x66\x39\x79\x46\xa7\xd3\x06\xd7\xb4\xaf\xfc\xfa\x00\x0b\x3f\x68\x70\x4d\xa7\xca\xb5\xa7\x5d\x0c\x62\x5a\x91\x08\xdb\xb0\xc0\x36\xe7\x23\x84\x98\x71\x79\x85\xc7\xe4\xc1\x68\x4c\xd6\x65\xf1\x16\x5e\x1a\xdf\x22\x12\xbf\x30\x6e\xd6\x15\x28\x85\x41\x04\x89\x2d\x69\x55\xdf\x69\xa0\xcb\xf2\xf0\xb2\xea\x66\x79\x4c\x1e\xf0\x48\xc1\x31\xd9\x56\x84\x2e\x20\x94\x7f\xb9\x48\x89\x02\xae\xdd\xc2\x24\x02\xea\xf7\xf1\x09\xff\x51\x8c\xd0\xb1\x07\x1a\x86\x96\x60\x0b\xf8\x26\x85\x51\x55\xb6\x86\x43\x7c\x9c\xf0\x04\x24\x6b\x1a\x0d\x6f\x86\x24\x34\xe2\x0a\xf2\x5a\x9f\x96\x30\x86\x7a\x9f\x03\x69\x43\x16\xf2\x1d\x82\x12\x0a\xae\xf3\x1e\x11\x09\x92\xb3\xc1\x05\x25\x97\x9f\x33\x1c\xbc\xca\x67\x83\x19\x4d\x90\xfe\x65\x99\xaa\xfe\xeb\x44\x89\xa6\x3e\x22\x6b\x91\x2b\x6e\xf5\x6b\x7a\xb2\x15\x53\x25\x67\x46\xa0\x43\x0f\xf7\x8d\x9c\xd7\x1b\x60\xe0\xb2\xbc\xee\xbc\x99\x9b\x99\x72\x65\x8a\x6d\xd4\xe5\x57\x03\x7c\x45\xa5\xfb\xcb\x5c\xd4\xd8\xf7\xe7\x78\xe1\xde\x4f\xb9\x98\x63\xe5\x12\xec\xd2\x39\x29\x1f\x7c\xec\x0c\xbb\x48\xa2\x1c\x51\xb4\x44\x29\xbc\xf6\xec\x30\x0b\xae\x35\xa6\x11\x09\xcb\xdc\xdb\x72\xb8\xb5\x62\xfd\x3d\xca\x7a\x96\x70\x4c\x63\x70\x6a\x77\x53\xef\x49\x91\xdf\x7b\x02\x92\x24\x71\xa4\xb5\x10\x5c\x71\xb5\x5a\x90\x58\xf1\x13\x33\xb5\x38\xc5\x79\x1e\x11\x5f\x16\xcf\x44\xa6\xc7\x53\xc1\xe7\x11\x81\x6b\x33\xa4\x56\xd0\xfd\xf4\xe6\x15\x6e\x5d\x9f\xa0\x7e\x65\x0a\x5a\x7f\xa4\x49\xba\x59\x3a\x21\xee\x74\x82\x70\x72\x38\x44\x22\x39\x1c\x21\x5e\xec\x01\x25\x56\xc6\x9a\x64\x72\x0f\xa3\x3c\x21\xa7\xb5\xc9\x4c\x22\xf8\xdd\x61\x84\x93\x48\x26\xb9\x31\xb8\x44\x10\xc6\x19\x67\x04\xf6\xfb\x11\x73\x65\x88\x6d\x6e\x23\x88\x0e\xd5\xcd\x0d\x73\xe9\x39\x0e\x93\x44\xc1\xef\xf4\x27\xe1\x77\xce\xf9\x89\xc2\x6b\xa1\xa7\xc0\x13\xba\x9e\x52\x86\xf3\x7c\x75\xad\x27\x80\x6f\x6e\xec\x25\x46\x1e\xdb\x29\xdf\xdc\x14\x7f\x69\x6c\xba\x96\xa6\xea\xbe\xad\x51\xcc\x7d\x49\x7c\xb6\x36\x78\xac\xe1\x7d\x61\x84\x80\xa2\x46\xb6\x3e\x94\x5d\x9d\xec\x97\xec\x02\xe7\x34\xeb\x61\xa5\xc8\x7c\xa1\xb4\x4a\x96\x11\xa9\xc4\x32\x55\x4b\x41\x7a\x8c\xb3\x81\x01\xfc\x2c\x2f\xeb\x28\x83\x60\xe0\xa9\x23\x2b\xbb\xf0\x54\xba\xa4\x81\x9e\x20\xc8\xfa\xc3\xb0\xa5\xb3\xa4\x9a\xfa\xa9\x38\xef\xc3\xe2\xce\xe6\xdb\xc7\x46\x7a\x8a\x08\x1c\xff\x8c\xd5\x79\x2c\xf8\x92\x65\x46\x5a\x39\xef\x62\x6c\xcb\x78\x73\xb2\xe8\x80\xa7\x4c\x82\x94\xcf\x57\x1a\x16\xfb\xe7\xaa\xfc\x53\xb3\x00\x49\x04\x25\xc6\x5f\xc2\xf4\xb2\x29\xee\xb5\x68\xbf\x10\xd4\xde\xcd\x39\x6d\xfa\x27\xca\x48\xef\xa9\xfd\x4c\xa8\x41\xb7\x07\x6f\x17\x99\x45\x4d\xaa\x37\x9a\xe7\x2f\x37\x5d\x9d\x39\xa7\xfe\x72\xee\x03\xdd\x65\x73\x62\xe3\xb5\x4f\x3e\xbd\xcf\xb8\xdb\x13\x26\x3b\xf9\xb4\x92\x1f\x3b\x78\xf0\x93\x31\x01\x35\xea\xb7\x85\xc9\x5b\xdb\x05\x8d\x30\xaf\x29\x9d\x06\x51\xe4\x56\xe9\x31\x0b\x34\xa9\xd4\xd8\xbf\x7a\x61\x98\xb3\x3d\x66\xca\xa5\x82\x91\x49\x53\x18\x4e\xea\x3f\x0c\x3d\x7e\xf8\x49\xad\x9a\x93\x5a\xb9\x49\x15\xb3\x70\x93\x1c\xb7\x5d\x54\x1f\x53\xaf\x3f\xeb\xe9\xbb\x9e\xe0\x4f\x67\x00\x8e\x73\xff\x6a\xea\x1e\x23\x00\xd7\x68\x55\x1f\xce\x8f\xd6\xd2\x21\x7e\xf8\xff\x84\xee\x54\x4b\x57\xeb\x68\xbb\x96\xc7\x3c\x8d\x37\xe5\x31\xbf\x3a\xd1\x87\x68\x6b\xf2\x72\x23\x3c\x02\xb3\x3e\x00\x81\x72\x1d\x00\x02\xab\x27\x57\x54\xfe\x62\x32\xb5\x76\x61\xd8\xf4\x2b\x0c\x94\x65\xe7\xe3\xb2\x38\xb7\x39\xbe\xb5\xdc\x16\xc1\x71\xed\xa9\xde\x72\x58\x44\x10\xb9\x14\x6d\x66\x3a\x96\x3f\x1f\xf3\xaa\x6d\x42\x05\x69\xd4\x4b\xf1\xb4\x64\x3d\x26\xff\xeb\xf8\x74\x88\x46\x93\xa0\xd8\xa4\x56\x1f\xdf\x18\xa6\x73\x3a\x1a\x5a\xcb\x77\x00\xd3\x44\x1f\x15\x73\x97\x6e\x4c\x0b\x33\x57\x6f\x74\x87\x4d\x58\x7a\x51\xc8\x13\x6d\xf8\xda\x0b\x43\x21\xcc\x08\x27\x0d\x70\x59\x37\x98\x45\x9e\x6c\xbf\x81\xbc\xf8\x8e\x0d\xbb\x15\x7a\x93\xaf\xb6\xc1\xb2\xf2\xb0\xac\x2c\x2c\xed\xd3\x5f\xb9\xe9\xdf\x66\x3d\x0a\x18\xfd\xa6\x2a\x97\x46\xcf\x93\x99\x79\x6e\xa3\x4c\x37\x3b\x70\xb5\x9d\x18\x9b\x73\x9d\xe3\xab\x5d\x26\x7a\x73\x33\xf2\x53\xfb\xdb\xa8\xdf\x8f\x54\x72\x66\x32\x36\x77\x10\x6c\x85\xb2\xec\x5a\x94\xb3\x43\xa3\x61\x49\x59\xa7\x43\xa4\x26\x1a\x4e\xd3\xa0\x01\xa6\xdd\x97\x9d\xa4\xd3\xc1\x21\x0f\x1a\x75\x8f\xb5\x60\xfc\x3d\x57\x8a\xcf\x23\x68\xa7\x6a\x3b\xd9\xf1\x61\xac\x68\xfa\x4e\x46\x8f\xed\x1f\x6e\x54\xe3\x85\xb1\x7a\xab\xdf\x34\xe7\xb5\xc3\xce\x0f\x20\x56\xc9\xc3\x3f\x9b\x13\x3e\x25\x34\x8f\xc8\xd1\xe8\xe1\x10\x3e\x18\xf9\xe5\x37\x93\x28\x30\x02\x51\xdd\x9c\x51\x48\x78\x2c\xd1\x12\xe9\x43\xdd\x80\x9d\x0e\x27\x48\x24\x11\x3b\x1d\x4d\x06\x18\x1e\x45\x4a\xab\x93\x5c\x8b\x89\x32\x19\x7e\x27\xff\xaa\xbe\x93\x0f\x1e\x40\x6e\x25\x3c\xfc\x40\xfc\xb9\xc4\x0a\x5f\x47\x0c\x95\x7b\xc2\x0c\xa1\xc7\xfb\xdb\xe8\xf8\x2c\xc2\xd0\x24\x70\x5b\xb5\xae\xc6\x6a\xe3\x6a\x34\xa8\xb8\x8a\xfe\x37\x5a\x32\xa8\x62\x7f\x15\x60\xdf\x9c\x61\xd2\x3d\x37\x48\x6f\x59\x8c\xbf\x0b\x6a\xf2\x3b\xee\x31\xb5\xac\x3a\xa4\xf5\x8d\x1a\xbd\xd7\x1c\xdd\xaf\x13\xfa\x07\x89\x06\x75\xa6\x59\x99\x35\x00\x9e\xb4\x6d\xae\x97\x0d\xc2\x8a\x2f\x6e\x56\xa4\x41\x76\x33\x1c\x85\x05\xce\xdc\xbb\xd8\xa4\x99\x3a\x31\x7a\xa0\x16\x8c\xe3\x2b\xab\xfa\x95\x76\x0a\x97\xb7\xca\xe6\x8c\x8f\xcf\x5d\xa2\x19\xbb\xae\x26\x19\xcd\xc7\x9a\xc9\x6a\xf3\x4c\x8c\xa0\x58\xe0\xc4\x62\xac\x6e\xf8\x29\x13\x3d\x07\x88\xeb\x74\x94\xb1\x8d\x07\xe5\x96\xfb\xa1\x02\xab\xfb\x44\x9d\x5c\x5c\x66\x6a\x50\xe2\xa3\xf3\x03\xa6\x69\xb0\xcc\xff\xe9\x20\x68\x4f\x78\x5b\x1e\x85\x8e\x20\xb7\x6c\x1a\xdb\xac\x38\xfe\x6c\xdb\x82\x2f\xd8\x93\x11\x07\xbc\xbb\x40\xaa\xf4\x54\xab\x67\x11\x41\xa7\xb0\x64\x6d\xfe\x82\x5a\x1a\x3a\x4c\xc8\x29\x9e\xac\x61\x7c\x15\xb5\xf0\x78\x12\xa9\x53\xa6\x99\x70\xbc\x6a\x1b\x40\x45\xba\x33\x5c\x07\x95\x5a\x8c\x94\x2c\x48\x7b\xb5\x97\x4f\x0a\xbf\x9e\xc5\x07\x84\x7f\x18\xa9\x68\x08\x61\xbc\x1a\xed\x81\x89\xdd\x2a\xbb\xd8\x5b\x4d\xeb\x21\xf1\x8c\xce\x09\x33\x76\x47\x57\xea\xa2\xab\xea\x4b\xd7\x2e\x4b\x31\xbb\xc0\x12\x40\x1f\x98\x6a\xc7\x7d\x52\xca\xf3\xf1\x19\x65\x96\xf7\x15\xf2\xd0\x81\xea\xae\x9c\x51\x4c\xb4\x9c\x85\x69\x66\xfb\x9f\x0e\x27\x07\xb6\x18\x08\xb0\xfe\xe9\x3f\xeb\x77\xff\x1b\x20\x02\x11\x8e\x08\x44\x5b\x4b\x50\x88\xb6\xd4\xf4\xad\x25\x28\xd6\x95\x32\x33\x73\x7e\xd1\x46\x39\xb7\x9a\xe5\x7a\xd7\x02\x36\xef\x57\x47\x63\x14\xd4\xd1\x68\x96\xb8\x59\xdf\xb2\x20\x4d\xb0\xb0\x2d\x99\xc8\xc2\x9d\xd4\xba\x77\xec\x2b\x11\x4a\x81\xb2\x14\xaf\xb5\xea\x27\xfb\xfd\xa2\x1a\x8b\x1d\x35\x47\x34\x90\x13\xcf\xa8\xb4\xa4\xd7\xa6\xe7\x9d\x32\xbd\xb5\x72\x32\x55\x68\x99\xa8\x98\xb2\x0b\x22\xf4\x89\x8d\xd2\x84\x46\x12\x2d\xd1\x08\xa2\x2c\x91\xa7\xe9\x60\x34\x41\x73\xfd\xc7\xe4\x20\x4f\xb2\x7e\xff\x70\x7e\x9c\x8d\x97\x83\xec\x94\x4d\xfe\x36\x3f\x65\x93\xc1\xf2\x78\x3e\xce\x82\xd8\xde\x0a\x02\x2b\x51\xbf\x1d\x25\x4a\x54\x94\xeb\xad\x8c\x14\x5f\x8c\x71\x94\x9f\x8a\x09\x1c\x8c\x86\x6b\xb8\xde\x5c\xd9\xc7\xb3\xad\xcd\x8b\xb1\x43\xf5\x9e\x83\x70\xdb\x6a\x41\x59\xff\x9c\xf3\x25\x53\xcf\xbe\x72\xec\x41\x46\xe1\x8e\x31\x46\xb9\x8a\x47\x43\xbb\xc7\x6e\x78\x16\x1a\xef\xa9\xd6\x56\xc1\x79\xa6\x1b\x35\x3f\x4c\xe2\x82\x56\xf5\xb9\xdc\x20\x2e\x53\x41\xa3\xdc\x3c\xc6\x35\x09\xd5\x46\x69\x50\x2c\x95\xae\x42\x23\xc9\x6e\x6e\xaa\x4f\x28\x9b\xdd\xdc\x44\xfb\xf1\xb6\x42\x96\x81\xd6\x14\x5a\x9e\xec\x10\xed\x37\xd0\xaa\x65\xa0\xd5\xed\x06\x9a\x15\x82\x67\x6d\x34\x2f\x90\xc2\xf7\x28\x40\x51\x3f\x13\xfc\xae\x2f\x1f\xb5\x13\x9b\xaf\xfc\x64\x6e\x6d\x8b\xea\x4f\x2c\x21\x4e\x2a\x8a\xda\xcb\x7f\xb9\xdc\x84\x85\xb1\x8e\xb5\x17\xce\xaa\x5c\x65\x9c\x6f\xbd\xca\x90\x6a\x80\xd3\x94\x8b\x8c\xb6\x57\x85\x6c\xbd\xce\xf8\xac\x81\x24\xe5\x74\x27\xe8\x1d\x59\x8d\x4d\x99\x33\xc9\x97\x22\x25\xbb\xdd\x45\x72\xf6\xd6\xdc\x52\xd7\xbd\x80\xb1\x50\x3e\x5e\xe0\x70\x84\x32\x92\x72\x81\x15\xc9\x4e\xec\xd8\xcd\x14\x6a\xfa\xf1\x86\x3b\x4a\x53\xbc\xf1\x29\x4e\xcf\xbd\x9c\xf4\x8e\xac\x10\x4b\x00\x55\x64\x1e\x07\x35\x59\x0a\x7e\x5f\x99\x42\xc1\xf6\xdd\x67\x2a\xf7\x97\x02\xfa\x8b\xc9\x29\x65\xd9\xf7\xab\x88\x39\xd6\x34\x23\x2a\x12\x48\xf9\x14\xd2\xd7\xfa\x5b\x63\x51\xf8\x21\xf0\xe3\xc3\x43\x1e\xbb\x1f\x58\xd3\x4a\x23\x75\x50\x39\x6b\x93\x7d\x42\xac\x21\x2a\x1f\xed\x84\xe0\xbd\x9c\x3f\xaa\x14\x78\xe4\xff\x1a\x9c\xf1\xec\x6e\xe4\x06\xbf\x5d\xe6\xc7\x4e\xb8\x4c\xa6\xdf\xbb\x71\xbf\x5a\x9b\x54\x57\xba\x34\x03\xfe\x98\xca\x41\xee\xf4\xbb\x22\x0a\xc5\xa4\x08\x1d\x1b\x77\x22\xef\x4b\x14\xa4\xc4\xaa\x0d\x3f\x3e\x1c\x22\x5b\xd5\xd5\x1a\xe3\x81\xf5\x15\x09\x10\x8c\x2a\x03\x1f\x0e\x91\x21\x5e\xef\x99\xc4\x25\xa9\x57\xb0\x31\x1d\x6f\x1d\x92\x6b\xd6\x68\x81\x67\x94\xb9\xd0\xa8\x3b\xca\xfe\xf6\x61\x6e\x26\x31\xef\xc3\xc7\x26\x5c\x7d\x3c\x42\x72\x21\x08\xce\xc6\x0f\x2d\x7b\x93\x4f\x9a\x2a\xb5\xee\x00\x10\x58\x18\x0f\xc7\xc6\x98\x45\x3a\x85\x19\x19\x8c\xe0\x9f\x2d\x97\xa0\x7f\x90\x07\x23\x0d\x05\xcb\x5a\x07\x2c\xf9\xe2\x96\xc1\x7b\xc6\xb6\x36\xa7\xc1\x57\xca\x4f\x04\x11\xb6\x6e\x44\x2b\xe6\x02\x73\xd7\x93\x63\x69\x03\xf6\xb7\x7f\xbd\xe3\xb3\xc6\xa4\xd7\xf9\x8d\x23\x3f\x0f\x13\xd3\x85\x67\xe4\x27\xca\x5a\x0c\x8a\xe1\xe7\x2c\x94\xc0\xa2\xbc\xf3\x50\x30\x6f\x8b\x03\x41\x77\x29\x44\xff\x02\x24\x2d\xd6\x8f\x92\x24\x61\xd5\x52\xf9\x38\xb1\xd8\xc2\x57\xd1\x08\xa9\x01\xd1\xea\xa1\xc7\x1f\x43\xea\x01\x81\x0f\xbc\xb5\xd7\xde\x90\x8a\x01\x76\xe5\xd4\x8c\x12\x53\x3d\x43\x82\x3b\xf2\x6b\x3d\x8d\x57\x4b\x0d\xda\x18\x3f\x70\x29\x7d\xf5\xe6\xd8\x09\xdc\x3a\x92\x43\x60\xcd\x3a\x26\x55\x22\x22\xd5\x33\xc7\x8e\x68\xed\x7b\xca\x80\x71\x9b\x13\xa4\xdc\xc5\xfe\xf7\xe7\x74\x63\xb9\x65\xd0\xaf\x99\xba\x0d\xb7\xbb\xab\xbc\xa8\x74\x30\xb5\xd3\xac\xba\x87\xb9\x48\xc1\x7d\x18\xd6\xed\xc4\xac\x16\x12\x9a\xd7\xc2\x75\x1c\x6d\xdb\xcc\xf6\xa4\xe9\x0f\xb5\x13\x5d\x19\x88\x4c\x10\xe4\xe0\xec\x2e\x88\x23\xea\x1c\x20\xac\x6c\x5d\xe9\xf0\x94\xb6\xe1\x7b\x13\x9f\xcb\x44\xf0\x85\xa9\x6b\xe2\xfe\xad\xac\x12\x95\xce\x15\xc9\xad\x56\xfb\xa9\xef\xfc\x00\xa8\x1c\x14\xe5\x3a\x41\x2d\xa0\x32\x23\x32\x1d\x63\x99\x9a\x48\x5b\xd7\xbc\xbe\x7a\xc1\x7c\x34\xcb\xa8\x5f\xc8\x85\xcb\x18\x34\x4d\x5c\x52\x39\xdd\x7e\x6d\x12\x47\x2e\xf3\xec\xa4\xfa\xf5\xb6\x8c\xc6\xe5\x6b\x9b\xd2\xd5\x4d\xbc\xf1\xc1\x43\xa7\xed\xda\x06\x37\x37\x87\x8e\x8e\xc2\x11\xf6\x76\x0a\xf3\xd4\x62\xfe\x7b\x57\xe4\x57\x65\xe6\xf1\x7e\xa0\x7c\x5e\x91\x35\xa0\x7d\x3d\x8f\xbd\x40\x99\x2f\x73\x45\x1d\xb5\x0f\x32\xc1\x17\x19\xbf\xbc\xbb\x72\x5e\x65\x97\xfa\xd9\x4e\x10\x77\x35\x08\x77\x13\x00\x0b\x2f\xc3\x5d\x95\x61\x6b\x30\xa9\x67\x68\x29\x44\xf2\x62\x1a\x2e\x02\x1b\x2f\xd4\x52\x90\x8e\x54\x6e\x25\x82\x89\xb5\x97\xbe\x21\x29\xa1\x17\x4d\x83\x69\x20\x22\x14\x7d\x0e\xdc\x96\xd4\xdf\xed\xf7\x49\xbf\xdf\xb4\xeb\xfe\xc2\xd2\xba\x6d\xb7\x62\x80\x73\xfe\xe9\xb1\x20\x0b\x5e\xd4\x37\x5d\xc3\x75\xdd\x6f\xbd\xb5\x24\x84\xd5\xcc\x1d\x28\x0e\x81\x4e\x28\x81\x07\xac\x74\x36\x57\xf0\x98\xb9\x6a\xd7\xce\x59\x50\xc1\x31\x8b\x71\x96\xf9\x9f\x3e\x75\xa4\xb5\x50\x31\xb8\x46\x7c\x41\xd8\x2f\xec\x89\x10\xfc\xf2\x99\xc6\x65\xc3\x1b\xd1\x32\x40\x8b\xdc\x88\xb8\x21\x2c\x32\x6e\x6e\x1e\x0d\x4d\x79\xe4\x77\x64\xf5\x94\x67\xa4\x6c\x5f\x20\x2b\xfa\x36\x09\xde\xeb\xf6\xe1\x6f\xe8\x0b\x3a\x6f\x32\x95\x15\xcb\x30\x50\x82\xce\xb4\xe8\x64\x72\xb0\x3f\x29\x4e\x9a\x08\x60\x41\xf1\x80\x5f\x32\x69\x92\x6a\x66\x3c\x5d\xb6\x8d\x53\xd6\xc9\x65\x08\xf4\xca\x51\x2d\x05\x03\x08\x0f\x70\xbf\x1f\xe1\x78\xca\xd3\xa5\x8c\x20\x52\x8d\x62\x73\x70\x6d\xab\x95\x95\xcb\xa9\x91\x67\xd0\xda\x2c\x4c\x87\x94\xc0\xc6\xd3\xfb\xa7\x66\xc6\x05\x3a\x8d\x1e\x7e\x53\x41\x44\x88\x07\x4f\x76\x74\x1a\x31\x78\xcd\xfc\xd7\x52\xad\x66\x46\xae\x90\x37\xde\x17\x69\x1a\xbc\x4d\xd0\xa1\xb6\xcd\xe2\xc2\xca\x0c\xd8\x74\x1a\x7d\xf5\x97\xe6\xac\x45\xa2\x5c\xd5\x12\x33\x24\xe5\x4b\xe9\xcc\xba\x27\xf4\x2c\xa7\x6c\x76\x20\x8c\x67\xf8\x26\xbc\x16\xe3\xd7\xc8\xc3\x59\x92\xfc\xf8\x8c\x5c\xa9\xda\xd8\xbc\xdf\x8f\xf8\xf6\xb1\xbf\x7a\x18\x0e\x5c\x18\xd1\xa5\x29\xd0\x5c\xe8\xfa\xa4\x63\xcd\xf7\x92\xcc\x8c\x26\xd1\xac\x23\xf4\x19\x2d\x29\xe1\x8c\xb4\x34\xf4\x77\x53\x6e\xec\x36\x76\xa3\x46\x0e\xa3\xcf\x79\xf0\x16\x79\x32\x0c\xef\xd7\xf3\x21\xd9\xdb\xbf\x9b\x44\x34\x3e\x33\xb8\x9d\xec\x0b\x97\x6f\xa9\x9e\xa4\x42\x6f\x13\x3f\x4c\xdc\x68\x0e\x10\xa8\x8c\xba\x67\xb6\x7a\x57\xc1\xf9\x13\x55\x75\x3b\x05\x78\xcc\xb8\x8a\x4e\x33\x57\x59\x79\x02\x01\x02\xd6\xa2\xd5\x7c\xf1\x3f\x4d\xc2\xec\xfa\x73\xfb\x5b\xad\x16\x24\x01\xe7\x36\xf4\x7d\x02\xff\x27\x02\x8a\x5c\x29\x73\x31\xdf\x1c\xe7\x54\xe1\x33\x53\xff\x7c\xd2\x31\x98\x7b\x9d\x80\xc1\x48\x0f\x36\x71\xa5\xf2\x51\x0f\xc0\x6d\x01\x6d\xac\x20\x5f\x57\x0a\x7b\x82\x1c\x27\x73\xee\xc4\x55\xdb\x5c\x58\x51\xda\x45\x66\x83\x7f\x29\xf9\x60\xc3\x31\xcd\xea\xc7\xae\x3b\x96\xd9\x96\x63\x99\xd5\x8e\x65\x56\x3b\x96\xb7\x9c\x30\x05\x85\xef\x72\x2a\x8b\x1d\x4e\x65\x0c\x61\xed\xa5\x82\xb5\xa3\x83\xed\x7a\x24\xb3\xb6\xb6\xfb\x72\x72\x7e\x49\x44\x21\x9f\x1b\x61\x7d\xd1\x6e\xfb\x08\x1b\x6e\x1f\xe0\x1e\x56\xc9\x6a\x05\xe4\xa8\x58\xf7\xf7\xc5\x88\x1f\xe8\x9e\x63\xe6\xb6\x88\xb8\xef\x70\x1f\x9d\x91\x29\x17\xc4\xc9\xd1\xf2\xb6\x68\xa8\x0f\x73\xdf\xb1\xf2\xbe\xe8\xf8\x57\xc1\x83\x11\xac\xce\x79\x9e\xdd\x9e\x55\x54\xc6\xb8\xf7\xf8\x08\x79\xa0\xc9\x72\x77\x7b\xb4\x34\x87\xba\xef\xd8\x91\x04\x8b\xf4\x7c\x30\x2f\xd2\x9a\xdc\x12\x33\xb5\x61\xee\x3b\x56\xde\xf3\xa8\xbd\xd7\x27\xac\x0d\x19\x74\x35\x29\xb7\x25\x01\xfc\xe4\x37\x4e\xfc\x9d\xcf\x3d\xde\xcc\x13\xab\xb0\x92\x6f\x05\x4e\xdf\x11\x21\xdf\x90\x19\x95\x65\x09\xf7\x7a\x1d\x63\xd3\x76\xa0\x5c\xe3\x81\x70\xad\x01\xac\x5e\x8f\xd4\xb0\x31\x41\x82\xb8\xfb\x2c\xa3\xe2\xd8\xc7\xf6\xef\xc0\xd9\xa1\xd6\x4b\xaf\x8b\xfb\x52\xe3\xa6\xc2\x3e\xcf\xde\xb8\x61\x01\x02\xca\xd4\x6c\x6b\x57\x80\x6a\xad\xab\x97\xa7\x6d\xd0\x6b\x15\xc1\x3d\x73\xee\xb3\xab\x45\xf3\x62\x46\xf8\xaf\xb7\x7f\x56\xd4\xbe\x67\xfc\x0e\x53\xce\x6c\xd8\x2e\x17\xb1\xb9\x57\xd3\x38\xd3\x5f\xa8\xce\x71\xc3\xc7\x9a\xa0\xba\x60\x4f\x93\x90\xd4\x38\x1a\x81\xe2\xf6\x47\x37\x3d\x2e\x6f\xe8\x8b\x41\xc2\x64\xb6\x70\x5c\x99\xec\x1a\xba\xe5\x69\x0f\xf7\x2c\xe8\xbb\x1d\x62\xfb\xb6\xf0\x9b\x4a\x17\xcb\x31\x78\xfa\xfa\x1f\x00\xcd\xc9\x9c\x8b\xd5\x18\xfc\x6c\xfe\x05\xeb\x53\x32\xb9\xb9\xd1\x9f\x32\x61\xba\x1b\x40\x2d\x3e\xd7\x84\xd9\x47\x6a\x38\x12\xa9\xde\xf4\x57\xe7\x43\xa7\x51\x17\x72\x2a\x7e\xc4\x2e\xb9\x99\x19\xcf\xa4\x42\x94\x00\x16\xde\x61\x66\x00\x80\x5a\x70\x69\xf3\xa6\x95\x6e\x60\xfd\xbe\x89\x1c\x6b\xa4\x34\x2d\x06\xf6\x9a\x24\x81\xd6\xaf\xd6\xb8\xe2\x66\x4f\xe6\xad\xc9\x6c\x76\x42\x86\x05\x19\xa4\x8b\xa5\x07\xce\x36\x3e\x06\xc5\xf0\x7a\x1d\xc6\xfe\x97\x5b\x88\x83\x9d\x29\xe7\xb6\x58\x39\x25\x93\xf1\x56\x14\x04\xe1\xd7\x3b\xd0\x5b\x48\x5d\xc6\x71\x6a\xca\x4b\x0a\xa3\x72\x90\x61\xa6\x0f\x91\xf5\x69\x80\x87\xc9\xcd\x4d\x18\xd8\xbd\x86\x68\xc1\xf3\x9c\x88\xbd\xb3\x5e\x7e\xc4\x7a\x75\x15\x0c\xe9\xe9\x01\x18\x2f\x88\x98\x72\x31\x8f\x60\x99\x03\xd3\xce\x98\xce\x09\x5f\x2a\x18\x8d\x86\x43\x9f\xff\x52\x6f\x09\x8b\x3f\xcd\x4e\x29\x9b\xf9\x4a\x62\x2e\x6f\xe9\xda\x25\x3b\xdd\x9e\xa1\xd1\xa4\x06\xdd\x60\x5d\x0a\x77\x5e\xbf\x6f\x2f\x9a\x0d\x42\xcb\x19\xaf\xd1\x25\xcd\x73\xe7\x0c\xdd\xe8\xeb\x5a\xa7\x98\xa5\x24\x7f\x92\xe7\x85\x5d\xbf\x82\x04\x49\x67\x0c\xe7\xaf\xf1\x52\x92\x10\x17\x7b\xda\x47\x04\xbf\x5a\x0d\x14\x9e\xdd\x81\xeb\xd7\xc6\xcd\xeb\xc6\xf4\x70\xfa\x74\xe5\x6c\x60\x09\xe8\x73\xba\xe2\x6c\xae\xaa\xb5\x25\x0b\xfd\xa6\x54\x6b\x36\x41\xf3\x1b\x03\x67\x8b\x63\x98\xf9\x6c\x6c\xd1\x20\x37\xe7\x8b\xae\xb5\x85\xb1\xe2\xd6\x81\x0b\x1a\x9f\x04\x13\xc1\x30\xe3\x8a\xdb\x6f\xed\x98\xfe\xdd\xe4\xc9\x44\xd7\xc6\xda\xf7\x1a\x0b\x3c\x97\xe3\x6b\xfb\x05\xeb\x0c\xb3\x97\xa5\x5d\x90\xc2\xc8\x3a\x30\xf6\xbe\x66\x86\xbc\x3b\x74\x8d\xbe\x5b\x82\x3c\x80\x4a\x39\xe2\x65\xe6\x12\x46\x94\x39\xf6\xeb\xc1\x8d\x61\xe3\x6e\x4f\x24\xfd\x65\x73\xbc\xbc\x21\x29\x17\x59\xd8\xcd\x1d\x34\xe1\x38\x46\x38\xa3\x73\x27\x58\xe6\x94\xbd\x7b\x1b\xa6\xf9\x3f\x1c\x7a\x33\xfb\x5e\x4c\xc3\x29\x66\x67\xfc\xea\x33\xee\x3a\x33\x87\xb7\x44\x38\xff\xdd\x5f\x83\x07\xb5\x3b\x22\x41\x70\x26\x23\x50\x36\x00\x1a\xbc\x33\xbe\x64\x29\x19\x8f\x1e\x0f\x11\x67\x36\x4c\xa6\x9e\x96\x30\x90\xd9\x43\x90\x81\xa9\xa8\x0d\x10\x38\xc7\xa6\x98\xb3\x35\xf0\x78\x23\xbf\x24\xea\xa4\x9c\x4b\xfb\x45\x45\x30\x5b\x80\x48\x71\x33\xea\xd2\xed\x94\x17\x0f\xc5\x2c\x6d\x4c\x08\xb3\x0b\x5c\x3c\x2c\x92\x8c\xb6\x27\x16\xad\x7c\x01\x80\x3d\x46\xd5\x1b\xd7\x9f\xea\x35\x11\x36\x18\xf5\xc0\x79\x21\xb8\x08\x23\x12\x5e\x3d\x57\xa0\x83\xeb\xdd\xd9\x80\x8d\xbb\x1a\xe0\x59\x2b\x0b\xb8\x4b\x49\x32\x7f\xdd\xc4\xd8\xc1\x40\xbf\xb5\xf9\xac\x2b\xed\xea\xc9\xf5\xdd\x28\x8e\xc1\x82\x4d\xe9\x35\x9b\xa8\x69\xe6\xd9\xdc\xd1\xd1\x6e\x82\xcc\x28\x45\x02\xc9\x0e\xcf\x3a\xd3\x06\x20\xe0\xa6\xe8\xbc\xe7\xfe\xf1\xe6\xa7\x4e\x8d\xce\x34\x34\x21\x47\x4e\xfe\xd3\x3a\xb1\x99\xb6\x8c\xed\xbf\x05\x8f\xd2\x43\x17\x3a\x01\x28\xe5\x5d\x27\x25\x73\x6e\x3e\x53\x16\x2c\x19\x8c\x20\xac\x35\x0a\xa6\x03\x63\xb9\xc8\xa9\x8a\xc0\x31\x80\xa7\x43\x93\x62\xd1\xd8\x1a\xa3\xa3\x3f\x3d\x1a\x1e\xcd\x10\xf8\x37\x00\x8d\xe3\x40\xcb\x73\x2d\x5f\xd7\x33\x92\x96\x20\x7d\xd7\x48\x44\xda\x16\xe9\xd9\x7a\x3a\xd6\xe1\x26\x0e\xe8\x35\x32\xe7\xdb\xbe\x29\x4c\x9d\x69\x81\xce\xc9\xa0\xc8\x9a\x12\xee\x0c\x97\xc9\xb1\x25\x7f\x5b\x2d\xb9\x5b\x98\x13\xce\x65\x82\xdb\x96\x81\xae\x9e\xdf\xcd\x0e\x37\xc8\x96\xc2\x1e\x3b\xdd\x79\xdd\x82\x8c\x6e\xb4\x9a\x32\x2d\x60\x8a\x1b\xd3\x6e\x7d\x49\xad\xf6\xf1\x52\xab\x55\x8e\x8d\x0f\x97\x54\x2d\x82\x1f\x28\x59\xda\x32\x91\x71\x3d\xb5\xb8\x4d\x57\x66\x93\x07\x29\x3c\x5f\x00\x97\xb5\x0c\x2c\x88\x48\xcd\x0e\x08\x53\x97\x0d\x9b\x59\xa8\xca\xe8\xff\xf6\x14\x54\x3f\x8c\xff\xf4\xf3\xf8\x4f\x27\x9b\x53\x4e\xe1\x46\xca\xa9\x78\xf4\xff\xfe\x64\x32\x4e\xd9\x94\x68\x27\x7a\xb7\xf6\xde\xd2\x39\xe9\x9d\x98\xb9\xb4\xe5\x47\xdb\x9e\x53\x6a\x63\x7e\xa1\x4a\x7a\x24\x1b\xba\xbd\x7b\x66\xa4\x30\x48\x5b\xd9\xcc\x48\x7b\x25\x52\x92\xb5\xcc\x2e\x88\x26\xd1\x10\xe5\x65\x2a\x2d\x71\x3a\x9a\x0c\xc4\xe9\x70\x82\xc0\x5c\x9a\x10\xfe\x82\xdb\x1b\xac\xd8\x15\xea\xe9\x99\xf6\xa6\x5c\xf4\xd4\x39\xe9\xe5\x58\xaa\x9e\x3f\x0b\x28\x02\xa8\x77\x49\xd5\x79\xcf\xd0\x89\xec\x09\xcc\x66\x94\xcd\x7a\x53\xc1\xe7\x3d\xe0\x8f\x03\x19\x61\xcd\xf3\x11\xd0\xf4\x59\x7d\x3c\x9a\x18\xfb\xc9\x47\x4e\xe1\xc5\x1a\x29\xbc\x44\x6b\x0a\x2f\xd1\x91\xc2\x0b\x07\x8b\x26\x13\x1a\x35\xd6\x61\x53\x9e\xa8\x87\x10\xe5\x89\xd4\x68\x5e\x26\xf2\x74\x34\x41\x69\x62\x8e\x2c\xbf\x0e\x4b\x18\xcb\xe5\x99\xc9\x86\x1e\x3d\x46\x60\x4e\xd9\x52\x11\xab\x01\x3e\x33\x15\x39\x50\x96\xf8\xd4\x61\xa7\x3e\xdc\x27\x47\x29\x44\xcb\xc9\xf8\x34\x45\x9a\x2b\xe8\xa6\x3e\x3d\x18\xdb\x3d\x3d\x58\x06\x11\xfb\x48\xa9\xaa\xca\x4c\x1b\x36\xad\xb2\x4d\x36\x4d\x20\x62\xc9\x10\xe1\x64\x74\x40\xa7\x91\xd5\xaf\x34\xe8\xb0\x92\xc2\xa0\x15\xcd\x4a\x63\xf3\x80\x59\x6c\x62\x83\xcd\x75\x23\x17\xd0\x6d\x93\x59\x79\xc4\x0e\x11\x83\x28\x88\xb3\xc2\x70\x52\x0f\x1b\x59\x6e\x15\x05\x04\xc1\x73\xca\x66\x83\x29\xdd\xab\xa2\x52\x57\x06\xd7\x4f\x9e\xff\x99\x95\xb9\x2a\xbd\xbc\xbb\x10\xf5\x58\x9f\x34\xa7\x03\x3b\xd7\x6a\xd4\x67\xce\x67\x5a\xe6\x37\x37\x20\x73\x9e\x91\x31\xf0\x18\x01\x88\xca\x93\xe2\x87\x51\x6f\xf9\x6c\x46\x84\x15\x74\x77\x72\x07\xb3\x5a\x8d\xed\xb6\xc1\x05\x2c\x55\x0d\xa3\x8b\xb7\x64\xce\x8d\xb3\x96\xb1\x22\xda\xb0\x54\x12\xeb\x7f\x4b\x0b\x5d\x50\xd8\x06\x28\x4c\x73\xdd\x42\xff\xdb\xde\xa2\x04\x6e\x4c\xe2\x00\xbc\x63\x12\xdb\x57\x65\xb7\x31\x71\x33\xf7\x06\x4b\xeb\x05\xd7\x99\x84\xc6\x00\x3b\xa5\x79\xfe\xe4\x02\xd3\x5c\x13\xc3\x0f\x2e\x3f\xc0\xed\x93\x16\xb4\x0c\x07\xd7\xa8\xe5\x69\x87\x3f\x9e\xf3\x54\x3b\xd0\xe0\xad\xf2\x22\x63\x41\x52\x6a\x09\xae\xd2\x1d\x65\x8c\x08\x3b\xd2\x80\xc4\xdc\x6c\xba\xb7\x7c\x31\xf8\x6a\x88\xc0\xe2\x4a\x1f\xc6\x1a\xeb\xb7\x2b\xdc\x64\x49\xe1\x63\x15\xde\x32\x46\xe7\x87\x81\x45\xd7\x2d\xda\x8c\x2b\xfe\x83\x29\xa9\x15\x50\x82\xe9\xfc\x70\xbc\xaf\x33\xa2\xf2\x1e\x7f\x32\x15\x3c\xcf\xdf\xf2\x45\x32\x5c\x7b\x63\xf8\x8e\x36\x6e\x4d\x95\xf7\x0d\x83\x6f\xf5\x8e\xfa\x00\x18\x74\x24\x19\xd2\xa3\xc7\x64\xf1\x77\x91\x52\x6c\x4f\xb4\xca\x15\x4b\xcf\x05\x67\xf4\x0f\x72\x62\xc6\xf1\x19\x4a\x1b\xdf\xc7\x85\x06\xe3\x0e\xb0\xbf\x0d\xfb\x7d\xcb\x62\x0f\x93\xf2\xe5\xe9\x70\xd2\xef\x87\xbf\x0a\xb9\xd0\x4d\xfe\xbb\x48\x55\x66\x3c\x08\xc8\xe2\xaf\xa3\xe1\xcd\x8d\xd1\x4d\x42\x5a\xa9\xb6\x87\x6b\x64\x79\xcd\xdd\x23\x86\x80\x5f\xc7\x5c\x1f\x99\x8a\xa6\xef\xb6\xe4\x6f\xda\xbc\xf0\xde\xbd\xa1\x73\x99\x22\x9f\x91\xaa\xf2\xf1\xe2\xdb\x86\x17\x82\xe2\x63\xb6\xeb\x89\x1f\xcb\xdd\x2b\x07\xc5\xf6\x82\x41\x4c\x10\xbd\x67\xf1\xb5\x02\x7c\xc5\x87\xa6\xd3\xbd\xbe\x54\xd4\x7f\xde\x95\x38\x37\x8d\xd6\x71\x68\xde\x12\xc5\x64\x03\x8a\x8d\xe3\xf4\xa6\x3b\xb2\xfa\x49\xb7\x47\x21\x02\x73\xa1\xdb\x14\x9e\x3a\x4a\x1c\xe7\x7c\xd6\x7c\xe9\xae\x18\x3f\x47\xed\x8c\x4d\xde\x2a\x1b\x0a\x98\x22\x7b\x8f\xad\xa1\xa9\x88\x53\x1a\x0f\x45\x0d\x04\x53\x3d\xa3\xbc\x1f\x70\xe5\xa5\xe5\x3b\x17\x9f\x41\x8b\x4a\x97\x52\x61\x67\x3d\x5c\x4a\x72\x62\x2c\x5c\xe3\xc3\x11\x62\xfc\x29\x67\xcc\x05\x07\x1e\x8e\x50\x9a\x53\xc2\x4c\xe9\x09\xbe\x54\xe3\x11\xf9\x0a\x59\x6b\x58\xf1\xe4\x31\xf9\xca\x49\x70\x36\x00\x54\x7f\xc0\x03\xdc\xbc\xf0\x52\x58\xc5\x4f\x6d\xd9\xf3\xb7\x1b\xfc\x59\xea\xed\x6e\x6e\x00\x38\x08\x48\x1e\x0b\x25\xff\x93\xaa\xf3\x08\xd0\x39\x9e\x91\x23\x00\x8f\xed\x5f\x5a\xc0\x0a\x5f\x2b\x72\xa5\x8e\x00\xbc\xb9\xa9\x3e\xc6\x8b\x45\x4e\x2d\x86\x4c\x49\x0b\xdd\xdf\x95\x5e\x19\x83\x25\x7b\xc7\xf8\x25\x03\x6b\x88\xa8\xfc\x09\x8b\x46\x02\x89\x78\xe6\x52\xe0\xc4\x27\x26\xaf\xc1\x63\xf2\x08\x1a\xc0\xf5\x54\x5f\xca\x7f\xd8\xfe\xf5\x4e\xe4\xf7\x25\xce\x23\x50\x41\x10\x40\xfe\x6b\xd0\xcb\xbd\xc6\x65\x6b\xb7\xce\x6e\xce\xb0\x2a\x33\x8f\x50\x8a\xd5\x3f\x44\x4b\x2a\x73\x4f\x17\x31\xcd\x1c\x35\x59\x3f\x06\x04\xec\x5e\x6a\x2c\x07\x61\x29\xcf\xc8\x3f\xde\xbc\xf4\x9f\x8d\x4a\x31\xce\x6a\xcd\xc5\x20\x08\x1c\x95\xca\x7b\x21\x47\x12\xef\x37\x02\x8e\x2e\x46\x47\x96\x9c\x8e\xa6\xf2\x28\xc5\xea\xa8\x3a\x50\x65\x76\x08\x1c\x2f\xb0\x3a\x4f\xca\x11\x8d\x9b\x92\xa9\x8e\xf9\xb3\xa6\xb7\x3a\x6c\x6e\xa9\x8c\x21\x35\x6b\xf5\x1e\x2a\xa5\x70\xef\x42\xc2\x33\x52\x2e\xbc\x0b\xcc\x30\xc3\x1c\x5b\x72\x0e\x1b\xde\xdc\x58\x49\xbf\xda\x59\x10\x9c\x61\x05\xc6\x76\xdf\x8f\x41\x8a\x95\x26\x1c\x0d\xf9\x2e\x2b\x10\xfc\x66\x3c\x23\xf1\xb9\x52\x8b\x27\x59\x26\xf4\x82\x14\xa0\x6a\x22\x29\xb6\xe8\xc6\x6a\x4f\x9d\x83\x41\xa4\x92\x1a\xfa\xab\xa8\xf7\xdf\x6a\xae\x61\x65\xc6\xd5\x54\x50\x7e\x56\xc7\x6a\x0c\x8e\x8e\x02\x9f\x97\xa0\x38\x93\xc5\x85\xbb\x5c\x6e\x78\xb9\x35\x08\xb0\xb9\x7a\xce\xf5\x67\x3f\xa2\x3b\x70\x72\x87\x5f\xa9\x8a\x36\xe7\x33\x9a\xa8\xf3\x31\x41\x56\xef\x18\x0f\x51\x4e\xe7\x54\x73\xb4\x47\xeb\x50\xb1\x6b\x6d\x5c\x72\x29\xcd\x02\x06\x8f\xc9\xa3\x46\xef\x40\xe9\x6b\x1d\x42\xf7\xe1\x82\xce\x28\x1b\x9b\x23\x7d\x7d\xe0\xce\x90\x6a\xf3\xf5\x7a\x0d\x0b\x1d\xb8\x8e\x3e\x47\x65\x0e\x79\x16\xc7\xdd\x28\x34\x92\x06\x4e\x76\xa3\xec\x22\xb3\x58\xb0\xc6\xf6\x6a\x30\x64\xfe\x36\x22\x39\x3c\x21\x0e\xea\x8e\xa5\xbe\x2c\x7e\xce\x67\x2f\x34\x95\x8d\x5b\x2c\x61\x16\xae\x37\x27\xff\xf1\x3a\x16\x38\x25\xd1\x29\x89\xcd\x11\x19\xe3\xa5\x3a\xe7\x82\xfe\x41\xb2\x37\xe4\xf7\x25\x91\xc6\xc4\x53\x2d\x91\x24\xe0\xa4\x5e\x4f\x3f\x30\xb1\xf5\xfb\x2a\xe6\xef\x34\xfb\x37\x21\xab\x42\x70\x71\xa2\xf4\x7c\x14\x44\x6a\xdd\x66\x95\x6b\x69\xa9\xc5\x98\x45\x8e\x29\x7b\x4b\xae\xd4\x18\xa3\x85\x25\x66\x4f\x6d\x16\xf1\x68\x29\xf2\xf2\xd9\x3f\x44\x6e\xc4\xcb\xea\x60\xb5\xab\x64\xc1\x2f\x1b\x3b\xc9\x5f\xc0\x86\x27\xb1\xb1\xbe\x8e\x83\x50\xd9\x29\xa6\x39\xd7\x2b\xc1\x1d\x5f\x80\x88\x34\x82\xd8\xed\x91\xd0\x7e\xb7\x6c\x69\x24\x20\x52\x27\x09\x37\x6b\xb3\x9d\x94\x4d\xd6\xa8\xd0\x6f\x37\x0e\x7a\x6e\x6b\x4a\x97\xcf\xc3\x41\x4c\x16\x55\x54\x68\x79\x1b\xc7\x31\x44\xb9\x79\x9c\x3a\x1e\xda\xc7\x0b\xd8\xa7\x16\xfb\x6f\x21\x69\x1a\xa7\xfe\xbb\x7d\x9b\xdd\x7d\xed\x5c\x87\xa0\x79\xe9\x5c\x8b\xe2\xfd\x3c\x25\x1e\xbd\x6c\xfb\xdf\x55\xa2\xef\x16\xdb\xdf\x5b\x44\xaf\xd9\x54\xed\xb6\xff\xb9\x6e\x79\x2d\x4c\xb1\x99\x09\x9a\xcf\xf9\xec\x3d\x45\x98\x0f\x20\xb6\xb4\x36\xa3\x99\x09\x5b\xae\x89\x34\x39\x9f\x85\x72\x4d\x97\xac\xc2\x3a\x64\x15\x53\x91\x23\xe7\xb3\x0d\xa2\x4a\xb7\x70\x69\xe2\xe0\xc7\x5e\x34\xb1\xee\xf4\xfe\x30\x0d\x8e\x70\xbb\x67\xcc\xdf\xd0\xd8\xbc\xec\xf9\xed\xbf\xdb\x75\x6e\xab\xf7\x3a\x8e\xfd\x98\xf8\x36\x67\x2e\xae\x9f\xb9\xaa\x79\xe6\x06\xb7\x91\xd5\x63\xd5\x9e\x72\x24\x98\x39\xe9\x3a\xdf\x48\xf7\xe1\xa6\xd6\xbe\x2e\x52\xe1\xa0\x65\xa8\xb7\xe1\x9a\x55\x31\x29\xa0\xfa\x91\x42\x4c\x45\xa1\x6d\x67\x63\xb9\x3b\x3e\xf8\x09\x59\x19\xfa\xbd\xcf\xc9\xca\x68\x77\xe8\xb4\xec\x70\xfc\xec\xb8\xd3\xda\x7a\x76\x7e\x0a\x06\xbe\xd9\x1f\xf4\xe3\x47\x17\x6d\x39\xbd\x37\x9c\xdb\xa5\x39\x47\x1a\x41\x53\x1f\x09\x84\xe1\xb3\x9c\xbc\xe6\x79\xde\x92\x05\xad\xc1\xbc\xaa\x3e\xf5\x2e\x97\x6f\x27\x07\x34\xaa\x17\x95\x6f\x96\x8c\x19\xca\xaa\x86\xac\x04\x3e\xee\xd5\x76\xde\x23\x68\xb7\xa0\xa4\xda\x38\x61\x38\x8f\xb1\xda\x62\xf9\xee\xa4\x73\x96\x85\x4a\x69\xbe\x62\x23\x3a\xea\xb9\x01\x8b\xa9\x9a\x26\xb0\xe9\x6d\x5d\xf6\xdc\x10\x0b\x52\x7e\xcb\x46\x79\x2c\x96\x1d\x3e\x82\x7e\xba\x71\xba\x58\x9a\x24\x9e\x96\x9e\x01\x2c\xe2\x3a\xb6\xf5\xb3\xcd\xaa\x5d\x77\x17\xd3\xd8\x66\x31\xcd\x9a\x55\x2c\x3e\x3f\x73\xbc\x88\x8f\x7a\xb2\x0b\x53\xc4\x77\x8c\x8a\x00\x0f\xaf\xa5\x99\xce\xa3\x9a\x09\x3e\x58\xbb\x7a\x7c\x49\xc5\x0c\xef\x93\x58\xdb\x2d\x63\xd8\x23\xaa\x7d\xca\x76\xf8\x66\xec\x3e\xf5\x0d\x22\xb1\x1a\x26\x24\xb6\x5e\x5d\xa3\x8a\xaf\x6c\x38\x52\x11\xae\x32\xaa\x5f\x76\x8d\x1e\xd6\x42\x5b\x1e\xfb\xd0\x96\xd1\xc3\x71\x41\x90\x95\xad\xdb\x1e\xdf\x32\xda\xe5\x96\x0a\x9d\x9e\x8e\xd0\x37\x93\x09\x5c\x43\x68\x12\xa4\x44\xdb\xe3\x5d\xda\xf7\xdb\x71\x69\x22\xb2\xb4\x58\x5e\x56\xd7\xdf\x04\xd1\x2e\xb7\x38\x36\xe4\xf2\x8c\xe1\x8b\xcf\xe7\x8f\xbe\x39\xce\x23\x08\x0a\x98\xca\x97\xed\x1e\xb7\x85\x9d\xb6\xea\x6f\xfb\x46\xff\x7a\x65\x59\x52\x89\xd8\x8a\x69\xcd\x20\x7d\x2a\x01\x44\x53\xf9\x86\x73\xf5\x91\xc6\x1f\x08\xce\x35\xe7\x98\xd2\x9c\xc8\x9f\x28\x7b\xd7\xfe\x15\x2e\x22\x50\xc2\x08\x10\xa8\x4e\x6a\xcf\x0c\x4c\x45\x5a\xaf\xcf\x1e\x9c\x64\x02\x25\xea\xa7\xab\x9d\x5c\x97\xdf\xb5\x4f\x67\x44\xe5\xa0\x48\xaa\x14\xa4\x0d\xad\x38\x64\x87\xfe\x2d\xe6\x4b\x26\x3b\x79\x50\x2b\xb5\x9a\x1d\xa9\xb5\xc2\xc0\x7e\x88\xbd\xe4\x03\xa9\xc8\x62\x60\xf3\x4b\xdd\xb5\x98\xec\x2a\x9e\x6b\x73\x9d\x20\x9a\xe5\xc4\x18\xd4\x00\x40\x96\x6f\xf8\x5f\x9c\x4d\xa9\x98\xd7\x7e\x1a\x42\xfe\xd9\x26\x12\x30\x91\x39\x97\x98\x6a\x79\xe5\x69\xf0\xda\x24\xa3\x0c\x70\x8c\x73\x3a\x63\xa6\xf0\x9b\xc5\xff\x4b\x36\xe5\x4f\xbc\xe2\xcc\x99\xeb\x5b\xcf\x18\xff\xd4\x4c\xa7\x51\xfa\x41\x91\x31\xd0\xb3\x06\x7a\xa4\xac\xf3\x92\xc6\x86\x99\x22\xdb\x14\x22\x2a\x5f\xdb\x64\xb1\x95\x89\x6e\xee\xba\x10\x7c\xbe\xd0\x1b\xd5\x22\xe6\x17\x7b\x56\xff\xb2\x54\x92\x66\xe4\x56\x17\xf8\xec\xe3\x3a\x72\xb8\xa8\x4d\xbd\x24\x2f\xb8\x78\x7e\x41\x98\x82\x91\x4f\x35\x75\xc6\xb3\x15\x02\x56\xb4\xf7\x8e\x16\x2c\x31\xfa\x9e\x42\xa1\x97\x83\x56\xc6\x15\xa6\x4c\x46\xcc\x45\xd4\x40\x57\x76\xa6\x6d\xb9\xdd\x2b\xab\x35\x1a\xdf\xa1\x97\x16\xe7\xd5\x53\xb3\x38\xc9\x77\xbc\x3d\x0f\x95\x4c\x3b\x62\x97\xf6\x55\x59\x67\xab\x7d\xb7\xac\x57\xe5\x54\x44\x76\x69\x5f\x70\x51\x21\x87\x0d\x8e\x6c\x95\x6f\x79\xc2\xd8\x54\x64\xa8\x75\x12\x65\x70\x29\x5c\x17\x5b\x6a\xa3\x2b\x80\x35\x0d\x10\xc9\xf3\x0b\x57\x2e\xd1\xef\x97\x08\xd6\xd5\x7f\xfd\xd9\xc6\x32\xac\x77\xcc\xf4\xc5\x94\x30\xc1\xb2\xf2\x28\x38\xbd\x82\xbf\x8f\x4c\xee\xba\x3d\xea\xe8\xef\xe2\x42\x29\xb9\x50\xf5\xe2\xf7\x2d\x9a\xe8\xa6\xd2\xf8\x97\x5a\x12\xec\x88\x9d\xf8\x50\xec\x55\x7a\xf6\x5a\x60\xa9\xe0\xaf\x38\xf0\xc0\xdc\xa4\x9f\x56\x82\x3b\x35\xd4\xc5\x5c\xc6\x26\x1d\x36\x40\xb5\x8c\xdd\x20\x23\x32\x05\x6b\x54\x6d\x6a\x35\xaa\x5a\xd3\xc3\x91\xa9\x00\xf0\x96\x9f\x70\x51\xbf\xec\x2f\x54\x18\x93\x02\xc2\x96\xb9\xd1\xe2\x8d\x0d\x88\x35\x97\x21\x8d\x44\x90\xae\x87\x1e\xf2\xc4\x34\x03\x10\x2d\x04\x21\xf3\x85\x2a\x1c\x40\x89\xd1\x70\xb7\x25\x2d\x36\x75\x01\xcd\xe5\x8b\xba\xe4\xe2\xdd\xc6\x99\x39\x32\x2b\x13\x53\xc8\xd8\x75\x93\xf1\x94\x8a\x40\xdd\x72\x28\x6d\x09\xe1\x37\x03\x95\x29\x2c\x8b\x86\xf1\xbf\x11\x9c\x9e\x3b\x65\x74\x53\x6c\x6f\xd7\x00\xc0\xc6\xf6\x6a\xd5\xd3\x6a\x99\x26\x17\xf3\x33\x2a\xe7\x54\x36\xa5\x77\xc3\x28\x88\xd5\x42\x6c\xba\x58\x64\x28\xf4\x95\x3e\x47\xa3\x21\xe2\xb1\xf9\x69\xa3\x4e\x2b\xd1\xaa\x5a\x97\xb4\xf5\xd2\xfe\xd3\x77\xa8\x97\x51\xb3\x73\xd4\xcc\xa6\x8c\x3e\x75\xc6\x46\xbd\x9a\xcb\xce\x1a\xd0\x6d\x1d\x0f\x8a\x4c\x21\x8a\x30\x65\xf5\x0b\x3f\x55\xcf\xa9\x88\xd3\x2f\xca\x37\x21\x23\x35\x81\xd7\x8b\x27\x95\x60\x5c\xf6\xf9\x13\x1d\xb8\x97\xc3\x32\x9d\x41\x80\x04\x7b\xda\x14\x07\x60\xf8\xc2\x84\xc3\x55\x90\x09\x34\x7d\xe5\x44\x05\xc7\xd9\xb7\xe1\x71\xf6\x75\xa1\x98\x7e\x5d\x55\x4c\x87\xa1\x62\xea\xa8\xe1\xda\xc5\xb4\x3c\xe5\xcb\x3c\xeb\xbd\xe2\xaa\x77\xa2\xf8\xa2\xf7\x24\x88\x3b\x0e\xa3\x5a\xc0\x3f\xf9\x52\xf4\x9e\x3c\xfd\xa9\x67\x18\x4b\x2f\xe3\x44\xf6\x18\x57\xbd\x99\xc0\x4c\xf5\x4a\xba\xe9\xe5\x74\x4a\xd2\x55\x9a\x93\xde\x82\x08\x4d\x94\x46\xef\x00\x85\x37\xe5\xb7\xbb\xe9\xa9\x43\xf4\xb5\xd5\x53\x91\x20\xc6\x4b\xe7\x7e\xad\xaa\x9b\x74\xb9\xb0\xae\xd1\x5f\xc2\xe5\x7a\x5c\x2c\xd7\xe3\xdb\x2c\xd7\x1b\xfb\x89\x8f\xbf\x62\x7f\xd9\x75\xc5\x1e\xbb\x15\xf3\xc2\x92\xb5\x54\xcb\x77\xb5\x0c\xdb\xca\xe5\xd1\xf0\x61\x95\x46\x59\x8d\x36\xe9\xa9\x00\x29\xb8\x36\x16\xbe\x9a\x79\xcb\x99\x82\xcb\x94\xa8\xdf\x45\x43\x24\xb6\xc4\x76\x62\x27\x97\x14\xf3\x03\x1a\x0a\xb8\x46\x6c\x52\x97\x4e\xe4\x2d\xa5\x13\x3d\xd3\xa3\x42\xb7\x6e\xbf\xbb\xdc\x7d\x94\x8f\xa6\xa5\xa9\x7a\x20\xde\x87\x10\xcc\x8a\x49\x7f\x32\xdd\xbe\x2e\x04\x5d\x7f\x18\xe9\xe6\x55\x87\x74\x63\x5c\x70\x6a\x77\xb1\x19\x15\x26\x2b\xee\xea\x39\x53\x26\x46\xd1\x85\x60\xbf\x68\x71\xad\x2c\xda\xd2\xa6\xb0\x33\xa5\xb9\x22\x42\x1f\xed\xf5\x01\x01\x02\x2f\xe5\x33\x2a\x0a\x3b\xcd\x2d\x7a\x1a\x7b\xa6\x9e\xfc\x7f\x52\x75\xfe\x13\xc1\x1a\x9e\x93\x1c\xcb\x46\x65\x70\xa0\x1b\x75\x9d\xdc\xfa\x5d\xbb\xd7\xe5\x11\x80\xc7\x64\x0c\xc2\x6b\xd4\x75\x21\xdb\x3d\xab\xe3\xa7\x11\x33\x56\x6b\xe0\xea\x70\x05\x0b\xd2\x28\x23\xd3\xe9\x27\x1a\x74\x42\x2a\x01\xc6\x1f\x33\x49\x12\x72\x6c\x97\x74\xec\x0b\x67\x05\x2b\x51\xc8\x54\x65\x4d\x45\x83\xe6\xe2\xb1\x29\x9a\xc5\xca\x64\xc8\xb5\x4a\x54\xe1\xb4\x8e\x45\x2c\x88\xa9\x2d\x10\xc1\xb1\xd8\xad\x18\xcc\x6e\x7b\xea\xfd\x35\x9e\x8f\x7f\x85\xd6\xd8\x8b\xbb\x88\xdb\x62\x9b\x94\x6d\xc0\x6d\xd0\x8c\x6b\x1c\x17\xe9\xbd\x5e\xeb\x56\x96\x70\x8a\x57\xd9\x8a\xe1\x39\x4d\xcb\x37\x8d\xb3\x20\xb8\x54\x6a\x1d\x0f\x40\x1f\x87\xd8\x56\x24\x4a\x8b\xe0\x63\x12\x9b\xb4\x71\x66\x9a\x63\x12\xff\x87\xc6\x16\xa2\xf2\x99\xfd\xf8\xf8\x70\xb4\x5e\x7b\x8f\x82\x96\xef\x85\x93\xfc\x10\x9f\x1b\xae\xd7\xb0\x45\x49\xd8\x4f\x4d\xda\x4b\xa5\x70\xd2\x8e\x39\xea\xbf\x08\x67\xa1\x70\x66\xa5\x8b\x3b\x21\x96\xed\x72\xf7\x12\x30\xa2\xd2\x1b\x7e\xb3\xef\x15\xcf\x88\x1c\x4c\xb9\x18\x38\x5c\xd4\x1b\x30\x3e\xc8\x09\xce\x48\xd1\xe0\x33\xf0\x20\x63\xd9\x9a\x75\xde\xd5\x6f\xcc\xf3\xd5\x96\x06\x0b\xd8\x7f\x81\x26\xfc\x99\xf7\xcc\xb2\xfb\xab\xfc\xf3\x44\x35\x9d\x73\x1d\x8e\x3a\xf4\x7e\xf3\xd6\x67\xaf\x88\xfc\xa6\x7d\xaa\x71\xbc\xf3\x58\xd5\x40\xf1\x72\x60\x68\x62\x17\x1e\x0d\xbf\x6a\x1f\xc9\x7c\x64\x53\xb5\xbc\xa0\x95\xaf\x6a\x04\x1e\x0d\xbf\x02\xc5\xc0\x8f\x3e\xec\xc0\x8f\xdc\xc0\x8f\x87\xc3\x0f\x39\xf0\xe3\xe1\xd0\x0d\xfc\x8a\xff\x64\x08\xf3\x36\xab\xe4\x33\x63\xf0\x69\x99\x72\xc2\x44\x8e\x09\x7e\x69\x5d\x2e\xea\xc6\x92\xe6\xa8\x75\xab\xae\x4d\x80\x63\x88\xd5\x54\x54\xbf\x00\xf0\xb8\xdb\xa6\x5b\x38\x51\x99\x71\xd7\x70\x5c\x71\xd8\xb8\xb9\xe9\xee\x98\x72\x26\x79\x4e\xe2\x4b\x2c\x58\x04\xfe\xf1\xea\xcd\xf3\xa7\xbf\xfc\xc7\xf3\x37\x4f\xbe\xff\xe9\x79\xef\xf9\x9b\x37\xbf\xbc\x19\x03\x44\x3c\xcd\xac\xf7\x64\x1c\xd6\x62\xf1\x39\xc5\x7f\x2a\x5f\x70\x71\x66\x8a\xa4\xec\x58\x44\xa7\x31\x7b\xf7\xef\xfe\x41\xf8\x6d\x16\xe4\xe2\x95\x49\x9e\x55\x7f\x69\x99\xa4\xcb\x85\x3d\x98\x0a\x3e\x1f\xe0\x0c\x2f\x54\x27\xbf\x44\x18\x89\x0f\x85\x44\xde\x89\xc4\x32\x94\x3f\x30\x29\x57\x78\x61\x51\x75\xd1\xdc\xbc\xd9\x92\xae\x41\xaa\x36\x97\x2a\x0c\xa0\x9d\xd5\x2f\xc4\x59\xbe\x7a\x6d\x2d\xbb\xc6\x7a\x00\x16\xe5\x0f\xb0\x46\xd3\x1c\xcf\x9e\xc8\x67\x02\x53\x56\x04\x34\x05\x33\x18\x99\x52\xbb\x5a\xd4\x1f\xff\xa5\xf6\xcd\x39\xcf\xe8\x74\xf5\xd2\x0a\xcf\x75\x75\x6e\xe8\x26\xad\x9b\x37\x58\x6c\x83\x01\x9c\x02\x79\xce\x85\x7a\xa9\xa5\x6b\x23\x57\xd9\x42\x78\xd5\x79\x1f\x8e\xd0\x05\x95\xf4\x2c\x27\xa5\x65\xa6\xcb\x3e\x1c\x5a\x3c\x6c\x6d\xdc\x72\x20\xfb\xa0\x36\x7a\x27\x57\xaa\xb5\xb3\xf6\xd3\x60\xb4\xd0\xb2\x18\x7c\xd5\xd5\xeb\xdd\x68\xad\x6f\x42\x03\x7c\x2f\x83\xbc\x5d\x6c\xf6\x56\x0f\xec\xc6\x48\xa5\x93\x19\xd5\x74\x23\x39\x9d\xd1\x33\x9a\x53\xb5\x7a\x5e\x9e\xaf\x5a\xca\x31\x94\x10\x3c\xcb\x6a\xbf\xe5\x39\xbf\x34\x6d\x5e\x71\x45\xa7\x34\xf5\x77\xc1\xfe\xc5\x3f\x16\x19\x56\xa4\xf3\xf5\x89\xe2\x8b\x05\xc9\xea\xef\x43\x9c\x6e\x5f\x54\x6b\xed\xbf\xc4\xd2\xad\x0d\xe9\xce\x01\xd9\xec\x5c\x2a\xf5\x95\x01\x4a\xb5\xda\xdc\xa9\x76\x4d\xc3\xe4\x23\x2b\x66\xa0\x05\xea\x5d\xee\x1b\x6c\xa7\xe0\x8e\xc1\x74\x84\xa5\x4a\x5b\xaa\xf4\x82\xea\x47\x1d\x1f\xcf\xec\xdb\x3d\x6f\x3b\x5c\xaf\xb6\x2b\x0e\x49\xd4\xf3\x92\x16\xf6\xbc\xee\x56\x1f\xfb\xbe\xbb\xa1\x6c\x1c\x57\x0d\xf9\x76\xea\x39\x29\xdc\xa3\xfc\x8b\x97\x8c\xf8\x57\x35\x6d\xe4\xdb\x1d\xb5\x11\x96\x18\x8b\xa7\x97\xf8\xf4\x7b\x78\x73\xe3\x94\x11\xad\x59\x48\xa2\x7a\xc1\x46\x02\xa1\x02\x53\xdb\x5f\x00\xb1\x7d\xed\xf4\x8f\xab\xfe\x64\x7e\x6f\xde\x2e\xa7\xc0\xc7\x5e\xa2\x12\xf4\xea\x81\x52\x71\xf7\x7b\x14\x6a\x8b\xf6\x82\xc9\xb4\x6b\xf5\x18\xdc\xc0\x2f\x8c\xe7\x9f\xf7\x21\x7c\xb8\x8b\x0f\x61\x45\xbd\x6c\x4c\x51\xbf\xdd\xbe\xdc\x8a\x2f\x7a\x86\x1d\x82\x8a\x3f\x62\xc8\x33\x01\x52\xa5\x9b\xe1\x8e\x0b\x5d\x73\x1c\x9c\x72\x91\x92\x3b\xbc\xd2\x6d\x9a\x7f\x39\xe7\xe8\xfa\xe5\x8c\x71\x41\x4e\x8c\xf6\xf7\x23\x3f\xab\x9c\x90\x99\x5d\x50\x81\x15\x99\xad\x62\x5a\x6b\xb9\xbe\xed\x56\xdd\xbe\x76\x66\x82\xcd\xc5\xcb\x5a\x16\xee\xb6\x1b\xd4\xd5\x1b\x69\x9e\x8d\xed\xb7\xbb\x34\xa0\xbf\x80\x83\x1f\x06\xd8\x2a\x9b\xb8\xac\xe8\x55\xba\x75\x0f\xab\xbb\xa5\xb9\x4d\xba\xc9\xbe\xf5\x53\x70\x5d\xbb\x68\x0a\x2e\x08\x1b\x11\x20\x3b\x5f\x36\xd9\x70\x10\x49\x54\x29\x4b\xbd\x30\xa7\x70\x47\xc2\xdf\x86\x78\x66\x0a\x14\x7a\x00\x57\x1d\xdd\x36\xc8\x20\xc1\x10\x56\x9a\x09\x47\xb0\x9a\x4f\x8d\x88\xaa\x14\x24\x96\xcc\xd1\xcf\x41\x17\xfd\xd4\xee\xb8\xf8\xae\x4a\x51\x8b\x01\x3a\xe7\x19\x96\xe7\xb1\x89\x40\x28\xe3\xd7\xba\xb4\xa2\xc1\x14\x1b\x23\xff\x9e\xda\xd1\xef\x0b\x93\x1c\x15\xe7\xf4\x8f\x66\x56\xb3\x4f\xa3\x0f\x55\x63\x9d\x4e\x01\xf5\x2a\x80\xbd\x94\xe7\x92\x2a\xe2\xaf\xe9\x33\xac\x70\x4a\x34\x4e\xc0\x04\x86\x1a\x94\xc3\x64\x39\x7e\xd5\xec\x54\x22\xbd\xb8\xf9\xd7\xa2\x36\x6b\x31\xff\x54\x0d\xe8\xa6\x05\x80\x36\xfd\xef\xe6\xa6\xb6\x09\xa8\x19\xb6\x3e\xb8\x32\xf7\xfb\xc2\x55\x02\x35\x0e\x9f\xfa\xb7\x8d\x75\x2e\x9c\xd6\x7e\x5f\x3c\xf3\x38\x1a\x83\x2c\x05\xeb\xcf\xa2\xce\x85\xcb\x18\x2e\xda\x1a\x96\x10\x04\x93\xaf\xcf\x1b\x94\x45\xd3\x6d\x63\xb7\x33\x3d\xb5\x66\xff\xee\xb1\x0c\x23\xe0\x86\x04\x41\xad\x75\x3b\xf0\xb6\x6e\xa6\x55\xd8\x2d\x98\xc4\xb6\xbe\x65\x53\x00\x8b\x82\xf0\xed\x55\x47\x58\x9b\x3d\x2d\x08\x37\x64\x89\x4d\xe8\x3b\x15\x7c\x1e\x31\x72\xd9\x3b\x21\x2e\xbd\x82\xed\x69\x53\x35\x9a\x61\x1c\x9c\x26\xbb\xb3\xcb\xd4\x78\x50\x89\x31\xdc\x2d\xf7\x9e\x8b\x0a\x2c\xf0\x86\x0c\xac\x1e\x52\x18\x55\x4d\x9d\x0c\x91\xb8\xba\x1e\xd0\x84\xe0\x30\x57\x0c\xa1\xeb\x52\xe5\x1d\x59\x8d\x89\xcb\x98\x4f\x6c\xd1\x2b\x87\x27\xbb\x3a\x5b\xc9\xc8\x8c\x00\x28\xa3\xca\x4c\xcc\x9c\x59\x2e\x01\xff\xcb\xf0\xe1\x1a\xd9\x96\x82\xe0\x6c\xe5\x9b\xbc\x31\xbf\x8a\x77\xb6\xcc\xad\x7b\xf5\xcc\xa4\x9c\x41\xc5\xf8\x85\xaa\x10\x8c\xee\x1f\xf9\xfe\xfe\xd4\x2c\xc6\x28\x1e\xac\x27\x25\x60\x01\xfd\x7c\x24\x2a\x08\x76\xd3\x87\x23\x83\x80\x96\xf7\xa1\x85\xb2\xdb\xad\x09\xc2\xaa\xe2\x5a\xba\x6f\x33\xc5\x97\x38\x03\x55\x02\x0c\x1f\x9c\x38\x77\xdd\x96\x69\x75\x5e\x65\x57\x06\x2b\xe2\x7d\xab\x23\x16\x97\xd9\x2d\xc3\x22\x9c\xa8\xc0\xf2\x1d\x10\x10\x44\xa2\xf2\xca\x53\x0d\x44\x3c\x51\xf1\x25\x55\xe7\x7c\xa9\xaa\x5d\xca\xa7\x65\xeb\xca\x3d\xb8\xc5\x82\xc5\x54\x4b\xe2\x8d\xc3\x88\xb8\x64\x77\xfd\xfe\x21\x29\x3f\xae\xdc\x6d\x68\xc8\x36\xfa\xfd\xe8\x30\xe2\x65\x73\xde\x68\x2e\xed\x59\x5b\xb4\x65\x65\x5b\xd6\x68\x5b\xa5\xc5\x7e\x3f\x8a\x0e\xf1\xcd\xcd\xa1\x7b\x4b\xe5\x73\x0f\x23\xec\xf7\x0f\x23\xd1\xef\x97\xef\xfc\xf6\x81\xd0\x10\xcf\x2e\x06\xb3\x0a\xb1\xdc\xda\x56\xd6\x46\x6a\x1d\x56\xb2\xd0\xe2\xdd\xde\xa1\x21\x78\xc4\x41\x1f\x73\xb2\xa8\x17\x38\x25\xaa\x3c\x3c\xda\x7c\xb6\xf4\x36\x24\x8d\x9d\xa7\x60\x58\x0b\x5b\x8b\xe2\xaf\x5a\xc3\xb0\x5b\x84\x70\x37\xad\xb8\x30\xb7\x93\xbd\x65\xd3\xa9\x20\xc4\x24\x14\x6d\xb3\xd5\xfb\x97\x1d\x5d\x3e\x99\x5f\xd5\x76\xd3\xf9\xee\x5e\x4a\x55\x39\x69\x17\x8f\xec\x21\x32\xe8\x78\x51\xc0\xdd\x71\xd7\xb9\x9f\x5b\xbe\x2d\x13\xf4\xd9\x2e\x79\xf6\xb8\xb5\xfd\x8d\x9f\x99\x88\xa3\x05\x4e\x89\x45\x91\xf9\x13\xac\x51\xf5\xa6\x08\x55\x1b\x16\x55\x33\xf7\xbb\x40\xd2\x68\x79\x7f\x45\xe9\xfe\x29\x48\xad\x17\x46\x9b\x17\x49\xa3\x6a\x17\x4d\xc8\x50\xda\x2e\x4c\xae\x3a\x60\x8d\xc3\x7d\x6c\x7d\xe7\xed\x6a\x41\xc6\xae\x48\xa1\x95\xd8\x97\x72\x5c\x1c\x53\x4d\x7d\x07\xfd\xbe\x78\x2d\xc8\x94\x5e\x99\x7b\xae\x29\xbd\xea\xd6\x80\x46\xc3\x4f\xa3\x02\x69\xf9\x70\xba\xfc\xe3\x8f\xd5\xc9\x5e\x03\xb4\xf5\x7d\xce\x5c\xb8\xdd\xd0\x63\x26\xc4\x4a\x53\x8f\x2a\xb1\x11\xe8\x54\xa6\xe3\x36\xfd\xc6\xa4\x8c\xac\x69\x54\xcb\xed\x9a\x98\xd3\xd5\x3f\x80\x4e\xe5\x07\x70\x10\x6c\xeb\x6c\x9b\x95\xca\xd8\xdb\x96\x2a\xab\x5d\x3a\xc6\x99\x89\x2e\x2a\x44\xfb\xef\xcd\xaf\x42\xf2\x37\x19\xc8\x88\x22\x26\x4d\x8b\x6f\xf3\xba\xf2\xd4\xb7\x25\x82\xf2\x8c\xa6\x65\xb3\xe2\x41\xd1\xc2\x6d\x53\xdf\xe0\xc4\xfd\xf6\xef\xcd\xd6\x2e\x5f\xdb\x9f\xa1\x8e\xe1\x16\x62\x47\xc8\x16\x85\x53\xa7\x9f\x90\xfd\xed\x75\xa6\x22\xb5\x44\xa1\x35\xb9\xdf\x5e\xef\x31\x99\x46\x0b\x9d\x47\xff\xd8\x51\xdf\x71\xb7\x9b\x3f\xf2\xb3\xcd\x5a\x4f\x45\xd5\x09\x3b\x35\x14\x1e\x69\xee\xcb\xb2\x65\x4a\xa2\xaa\x78\xe1\xad\xb4\x65\x26\x44\x74\x3a\x81\x10\xe1\x8a\x4e\xf5\xe9\xb5\x25\xbc\x49\x5b\xc2\xb7\x56\x9f\xdd\x86\xb8\x2d\xc6\x8f\xe2\xd3\x41\xfc\xeb\xe4\xa8\xf0\xc8\x6d\x41\xba\xbd\x1e\x6c\xc7\x36\x9d\x46\xcc\xb8\xc3\x68\x01\xb5\x08\x10\x88\xe7\xc6\x16\x7f\x14\xc5\x0f\x8e\xa1\x1d\x1e\x9e\x8e\x26\x07\xe4\x14\x4f\x12\xfd\x9f\x63\xfd\x9f\x07\xa3\xf1\x68\x5d\xa6\x2e\xba\xd6\x20\x15\x65\x86\xde\x91\x95\x8c\x70\x27\x36\x2c\x33\x1f\x13\x94\x9a\xc2\xb6\xf8\x94\x4c\xd6\x6b\xd8\xd0\x8a\x48\x85\x1a\x96\x4c\xfd\x6d\x64\xca\xaf\xf0\x02\x32\x77\x28\xbc\x1f\x05\x38\x56\xb3\x65\xf5\x65\xb8\xfa\xb6\x8b\x5d\x79\xee\xaf\x61\x8b\xd9\x6c\xa4\x81\xd8\xb6\xf2\xb5\x07\xcb\xca\x5e\xee\x05\xe8\x45\x41\xea\x56\x0b\x37\x02\x10\x40\x4b\x35\xc1\xfa\x76\xdc\x2a\x1b\x0d\xdb\xfe\x69\x2f\x96\x17\x58\x18\xbd\x61\x43\x26\x31\x57\x23\xd3\x8b\x7d\x45\xc6\xf5\x5a\x26\x31\xd7\xcc\x06\xee\x7b\x29\xd0\x64\x15\xbb\xb9\xf1\xb2\xe0\x41\xf3\xc2\xbe\x2c\x45\x52\x5f\x63\xe6\x35\x5f\x72\x73\xc3\x9c\x96\x5b\x19\x39\x49\xb4\x40\xd9\x4d\x1c\x87\xae\x28\x9a\x05\xb3\x88\x8d\x03\xb0\x62\x92\x68\xc5\x57\x7d\x8f\x81\xca\xa1\x5a\x37\x4b\x2c\x65\x97\x5d\x02\xd4\x08\x63\xab\xa5\x42\x0f\xdf\x6a\xa8\x58\xca\x2d\x96\x8a\xca\x2b\xfb\xb5\x0a\xba\x43\x90\xea\x18\x13\x66\xbb\xb7\xdb\x17\x84\x33\x02\x50\xb9\xc8\xf1\xca\x8a\x0b\x45\xe2\xa1\x43\x57\x4f\xc6\xf7\x53\x8d\x7e\xa5\xa1\x21\xec\x12\xd8\x1b\x44\xdd\xc8\x50\x64\x07\x6a\xdb\xed\x81\x71\x82\xc0\x75\x30\xa6\x95\xae\x45\x49\x25\x7e\xeb\x1f\x46\xb8\xfc\x18\xee\x1c\x99\x87\xc1\x18\xc4\x3a\xfc\xee\x63\xac\xf8\xd1\x4a\xd9\xb7\xb3\x55\xb4\xd0\x60\xa7\xa9\xe2\xe4\x9c\x5f\x52\x36\x7b\x46\x16\x39\x5f\xcd\x09\x53\xcf\x88\xc2\x34\x37\x8e\x53\x1f\xd6\x0c\xf1\x23\x3f\xdb\xc9\x0a\xa1\xf5\x86\xf8\x37\x7e\x06\x50\xb1\xdf\x72\x4c\xd9\xcb\x0c\xc0\xbd\xcd\x11\x46\xfd\xfb\x8d\x9f\x85\x81\x1c\x1d\xfe\xd3\xb7\x55\xf9\x7c\xb9\x1f\x75\x3e\xf0\xec\x64\x20\x88\x24\xca\x94\xa6\x6c\xea\x7f\x1f\x4a\xfb\x13\x9d\xda\x9f\x3f\x4d\xd0\xa7\x77\x1c\xec\xd4\x9b\x1e\x3e\xde\x4f\x6f\xfa\x8d\x9f\x6d\xba\x3a\x33\xa2\xfe\x7b\xf8\x0a\xda\x2c\x69\x26\x98\xfb\x55\xa1\x32\xe1\xbd\x3d\x04\xb7\x3b\x51\x85\x94\x67\xa2\x49\x76\xe1\x02\xf8\x73\x38\xf7\x7d\xa4\xeb\xfb\xea\x96\x15\x3b\x6f\x59\xd3\x8a\xaa\xee\x88\x87\xfd\x76\xde\x87\x4f\xa6\xd3\xbd\xeb\xae\xb7\xd0\xae\xe1\x6e\x0e\x0f\x54\xb5\xe4\x9a\xa9\x34\x0e\x10\xa1\x19\xf6\xf3\xcc\x24\x59\x31\x39\x04\x33\xda\x2c\x34\xf5\x1b\x3f\x73\xb5\x89\x19\xb9\x7c\x16\x20\xf1\xc7\x93\x5f\x5e\xc5\xd2\x04\x33\xd0\xe9\xca\x55\x76\xf3\xef\x4d\xf0\x10\x7a\x08\xab\xe9\x29\xdd\xc7\x6c\x9a\xc9\xd6\xb4\x3b\xed\xad\x47\xa6\xf5\xc9\xf2\x6c\x1e\xce\x70\x63\xb8\x71\xc0\xf6\x6b\x2c\xaa\x62\x08\x54\x8d\xa2\xe7\x3b\xd9\x46\x1d\x49\x15\x87\xdc\x96\x53\xe0\x1e\xd2\x14\xb8\x85\xc1\xd8\x20\x85\xe8\xd9\xed\x72\x34\x76\x22\x65\xc3\x29\xfa\xe9\xc3\x8b\xda\xce\xbe\x0f\x14\x82\xfc\xde\x07\x56\x80\xea\x8d\x3b\x3e\x5c\x92\x1d\x4e\x8b\x6a\xf3\xc2\x17\x79\xdb\xa7\xc2\x23\x63\xbf\x98\x12\x4f\x3a\x2d\x86\xf5\xfb\xb0\x93\xf6\xb8\xac\xf8\x90\x77\x43\x3b\x08\x34\x3b\xe5\xf3\x69\xe4\x73\xb0\x69\xe1\xf7\x11\xad\xe3\x32\xdf\xbc\x97\xb2\xed\x99\x44\x5c\x46\xe3\x5b\x08\xeb\x9b\xb8\x36\xa9\xeb\xdb\xce\x93\x7c\xff\xfc\x53\x9e\xf8\x42\x10\xbe\x48\xf4\x9f\x43\xa2\xff\xb8\x37\x21\x2d\xb1\x3d\x5f\xe4\xf3\x4f\x21\x9f\x1f\xec\xb6\xff\x2e\x88\x90\xef\x21\x34\xfc\x8b\x49\x52\x62\xc9\x3e\xe3\xf5\xfb\xa7\x12\xb5\xb7\xde\xb7\x5b\x67\xf5\x5d\x6d\x2c\x9f\x91\x06\x3e\x93\x17\xef\x7b\xf3\xdc\xba\xff\x2d\x95\x36\x6a\xba\x8d\xdf\xd6\xfc\x29\xb6\x73\xb5\x02\x0c\xc7\xa0\x36\x01\xde\x29\x3d\x6e\xdd\x2e\x8e\x44\x9a\xc2\xe3\xa7\x76\x59\xb1\xf3\xd8\xc5\xe5\xa1\xa0\xea\x5d\xbc\x1e\x1a\xc3\x56\x1d\x1f\x6e\xb5\x9d\xdc\xbf\x9f\x11\x59\xf6\x22\xe6\x2d\x3e\x1b\x03\x85\x67\x12\x38\x12\x79\x8b\x67\xdd\xb9\x16\x67\x9d\xf9\x06\x2b\x19\x15\x67\xe6\xdc\xbd\x5e\x17\xb7\x0b\xe1\xc5\x1e\xa9\x5d\x71\xa9\x6a\xea\x15\x85\x2c\x48\xe4\x54\x99\x6b\xbd\x46\x98\x62\x25\x4f\x2c\x6e\x91\x68\x8d\xe1\xc2\x03\xd7\x72\x1e\xee\xb0\x44\xe6\x3c\x93\x47\x26\x7f\xc8\xe7\xf4\xc1\xda\x5c\x02\x63\xa3\xce\xb3\xb1\xb4\x86\x24\xa9\x20\x0d\x9e\x21\x08\xce\x64\x04\x6c\x41\x1a\xdb\x04\xb8\x32\x1c\x2f\xe5\x7f\xe0\x9c\x9a\xec\xce\xee\xf7\x4b\x76\x51\x79\x62\x13\x5c\x76\x55\x54\x70\x43\xe6\xd3\xb7\xfa\x2f\x60\x72\x0e\x12\x75\x62\xe6\xd8\xb0\x3c\xe9\xa7\xf1\x92\xe5\x1c\x67\x2e\x7d\xaf\x5f\xf4\x34\x27\x58\x98\x31\x5e\xfb\x8c\xb0\x8d\x01\x8a\xaf\xa9\xb2\x8d\xe6\x0d\x06\x64\x8b\xf7\x75\x69\x12\x0b\xdb\x6c\x05\xb5\xe8\x57\xce\x3e\xf2\xf5\x69\xf4\x37\xcd\x73\x3d\xe1\x0b\x22\xe8\x74\x65\x26\xda\x9e\xee\xb7\xbc\xc1\xd3\xd3\x42\xc5\x01\x37\x23\xea\x97\x4b\xe6\x2a\x71\xc0\x38\xe7\xfc\xdd\x72\x11\x01\x97\xb0\x60\xac\x2c\xf6\x82\xb8\xa3\xca\x62\x21\x05\x11\x33\xf7\x57\x27\x24\x9f\x46\xad\xe9\x82\xed\x2d\xac\x9b\x28\x22\x55\x50\x9c\x4e\x67\x07\xb5\x15\x06\x8a\x35\x7b\xc2\xb2\xd7\x3c\xa7\x29\x35\x09\x52\x7d\x5e\x63\x17\x7a\x07\xcd\x0d\xf7\x06\x64\x0e\xdb\x90\xb9\x6e\xb9\x53\xaf\x02\x64\x97\x6b\xeb\xe8\xcd\xa5\x1a\xae\x9b\x89\x90\x5b\x37\x7e\x91\x7d\x78\xe0\x72\x61\xb7\x79\xb9\xba\x57\x03\xdb\xb6\xd9\xe5\xbd\x85\x9e\xce\x0e\xc5\xb5\x38\xba\x26\x6c\x39\x27\xc2\x54\xa9\x3d\x1c\xa2\x19\xa9\x58\x89\xeb\xf5\x1f\xed\x75\x7f\x27\xac\x98\x65\x6d\x60\x2a\xb1\x54\xe7\x83\xa2\x51\xd8\xf8\x2e\x02\xd8\x3d\xa6\x01\x6f\xc7\xf1\x30\xcb\xb6\x21\x6b\xb1\x20\xed\xf8\xb2\x61\x69\x26\xec\xae\x81\x34\xdb\xe9\x9e\xe1\xcd\x41\xba\x2b\xea\x4c\xf3\x6d\xd8\x13\x02\xaf\xf6\x45\x9e\xe9\x73\xcf\x70\x67\xe1\xdc\x15\x75\xba\xf5\x16\xcc\xa5\x78\x4e\x8c\xbb\x71\x1b\xf2\x72\x3a\xb0\xd7\x3e\x0d\xe4\xf9\x6e\xf7\x0b\x7f\x25\xb4\x3b\x0e\x5a\x74\xd8\x8a\xc5\xf6\x0a\x1d\x98\x55\x9a\xdc\x45\x64\x6d\x01\x2b\x25\xf9\x00\xe7\xf9\x96\x0c\x4a\x6d\x3d\xee\x21\xb0\xac\x9e\xe4\xb7\x75\x19\x75\xab\xfb\x07\xdc\x82\x2a\x7c\xab\x8d\xee\x3b\xde\x45\x98\x37\x6d\xf5\x12\xe2\x9d\x37\x7b\xd1\x65\x1b\x36\xcf\x97\xec\xdd\x9e\xc7\x8d\xed\x73\xcf\x70\x68\xe1\xdc\x15\x7d\xba\xf5\x36\xcc\xe5\x58\x4a\x3a\x6d\x3f\xab\x37\x50\x61\xd1\xed\x9e\xe1\xcf\x43\xbb\x2b\x0a\x5d\x87\x6d\x58\xb4\xbe\xaa\xfb\x52\xa0\xeb\x75\x17\x71\xb8\x0d\xda\xa5\x6a\x67\x5c\x9b\xa1\xd5\xbd\xee\x22\xb4\x1b\x28\xa6\x80\x75\x57\x82\xb1\xed\xb7\x62\xd0\x16\x5e\xda\x1b\x85\xae\xdb\x7d\xc3\x61\x01\xed\xce\x48\xb4\x1d\xb6\x61\x51\xca\x81\x4b\x83\xd1\x65\xaa\xf3\xd9\x91\x54\x25\x52\x24\x6c\x42\xa7\x91\x0d\x12\xa1\xd2\xfc\x1b\x11\x5f\x3d\x95\xac\x4d\x12\x98\x46\xf8\xc3\x61\x74\xb2\x9a\x9f\xf1\x3c\xa6\xca\xe6\x57\xea\xd1\xc2\xda\x69\xb3\xc6\x9c\x72\xf3\xa3\xf7\x44\xcc\x4c\x51\x2e\x39\x01\x49\x52\x04\x3a\x2c\x04\x57\x5c\xad\x16\xc4\x67\xa4\x8d\x53\x9c\xe7\xfa\xbb\xee\xc3\xee\xf2\xe3\x74\x82\x70\x72\x38\x44\x22\x39\x1c\x21\x5e\xd8\x0e\x95\x58\x99\xb4\x4d\xa6\x60\x11\xca\x13\x72\x5a\x9b\xcc\x24\x82\xdf\x1d\x46\x38\x89\x64\x62\x4b\xc1\x44\x10\xc6\x19\x67\x04\xf6\xfb\x11\x8b\x17\x4b\x79\x1e\xc9\xd8\x10\x03\x44\x87\xea\xe6\xa6\xf0\xb9\x3e\x4c\x12\x05\xbf\xd3\x9f\x84\xdf\xad\xad\x81\x87\xc2\x6b\xa1\xa7\xc0\x13\xba\x9e\x52\x86\xf3\x7c\x75\xad\x27\x80\x6f\x6e\xd8\x32\xcf\x93\x24\x8f\xed\x94\x6f\x6e\x8a\xbf\x22\xe8\x5b\xd2\x69\x24\xa0\x4d\xa7\xca\xd7\x45\xdc\x07\x5b\x1b\x3c\x06\x68\x2d\x52\xae\x32\x72\xd9\x7b\xbb\x5a\x10\x93\x4f\x27\x02\xce\xa8\xd3\xc3\x4a\x91\xf9\x42\xf5\x14\xef\x65\x44\x2a\xb1\x4c\xd5\x52\x90\x1e\xe3\x6c\x60\x40\x3e\xcb\x89\xcf\x1a\x0b\xe0\x5a\x7f\xbf\x58\xf5\xd0\x8f\x5b\x53\xc0\x08\x9e\x0e\x27\xb1\x20\x8b\x1c\xa7\x24\x3a\xfa\xaf\xa3\xa3\x19\x02\x03\x00\xe3\x0c\xcb\x73\x13\xca\x15\xc1\xf5\x2d\xcc\xbb\xa9\xb4\xa9\x3f\x12\xb6\xd9\xc9\xe9\x07\x43\xb9\xb1\x25\xe0\x88\x6d\xf5\xd5\x29\x28\xdd\x4f\x6f\xcf\x63\xba\xec\x77\xbf\x38\x46\x00\xef\xae\xa3\x16\x3d\xb6\xf0\x8c\x8c\xa4\x7b\x32\x5d\xdd\xe3\x9e\x61\x4f\xc3\xb8\xf3\x78\xe9\x36\x8c\x09\xbe\xd8\x17\x65\xba\xcb\x5d\xc4\xd9\x26\x38\x2d\x54\x0b\x7e\x49\xc4\xc0\x86\xcb\x0c\xa8\x6c\x73\x4b\x6a\x36\xdc\x69\x8c\xbb\x88\x8f\xee\x31\x0d\x24\xaf\x35\x20\x27\x06\x8e\x97\xf2\xef\x16\x13\x3b\x7e\xa3\xa3\xff\xad\xd6\xc0\xfe\x45\x5a\x8d\xb1\x7b\x2c\x83\x1f\xe6\xbe\xaf\xc4\x89\xc7\xc7\xad\x17\xa3\x18\x62\xdb\x7a\xfc\xbe\xfb\x85\x81\xa9\xaa\x7a\xdf\x70\x6b\xe6\xbc\x33\x1a\x75\xeb\x2d\x18\xb3\x51\x5f\x83\xb3\x7d\x8d\xdf\x65\xbf\xbb\x88\xc1\xed\x10\xdf\x0a\xdc\x7b\x08\x2b\xcb\x6e\xb3\xb6\xb6\xd7\xdd\x84\xb6\xe9\x24\xe8\xe7\x9d\x6b\xd1\xbb\xa3\xd4\x75\x37\xb4\xae\xd7\x5d\x84\xb6\x7b\x4c\x0f\xeb\x8e\x63\xba\xf6\xdb\xe8\x85\x8b\x39\x56\x83\xb3\x95\x22\x5f\x94\xd4\x2f\x4a\x6a\x45\x49\xbd\x85\x9a\x69\xc9\xe9\x7b\x4d\x4d\x09\xee\x72\x99\x3c\x05\xdf\x5b\x72\x03\xff\x8b\x7e\x0f\x10\xf8\x99\x7e\x0f\x26\x07\x9e\xc6\x70\x91\xee\x16\x27\x5e\x23\x3e\xc0\x37\x37\x11\x4e\x86\xf0\xa0\x58\x33\x91\x0c\xbf\xc3\x7f\x4b\x46\xc3\x87\x8f\xfa\x7d\xf1\xd7\x02\xf9\x83\xd1\x77\x10\x1f\x99\xc7\x48\x3c\x78\xe0\x1c\xbd\xca\x8c\x04\x3f\x63\x75\x1e\x4f\x73\xce\x45\x84\x21\x02\xbd\x32\x2b\x01\x3b\x15\x13\xb8\x0e\x5d\xe3\xab\xba\x30\xde\x1a\x5a\x58\xdb\x53\x19\xae\x5b\x20\xe7\xbc\xd5\x2b\x23\x34\x06\x7c\xd9\x5d\xff\x5d\x76\x57\x1b\xbd\x33\x4f\xef\x6d\x05\x9d\x30\x74\xfb\x2b\x02\x3f\xff\xfc\xf3\xcf\xbd\x67\xa8\xf7\xcf\x7f\xfe\xf3\x9f\xe0\x3d\x76\xea\xdb\xce\x6d\xfa\xa1\x36\xc1\x52\x6c\xaf\x24\x56\x6f\xfb\x65\x83\x7c\xd9\x20\xb7\x22\xea\x9d\x0d\x9b\x01\x31\x60\xbb\xf9\x44\xb9\xf9\x10\x4f\x70\xbc\x64\x54\x49\x24\x13\x1c\xe7\x9c\xcd\x5e\x70\x31\x6f\xdd\x93\x02\x71\x24\x77\x88\x69\xac\x6d\x8b\x39\x67\xea\x7c\x50\x0f\x0d\xfe\x72\x3e\x7c\x21\xff\x0f\x76\x3e\xf4\x9e\x3d\xeb\xfd\xf0\xc3\x78\x3e\x1f\x4b\xd9\xfb\x3f\xff\xe7\x7d\x4e\x89\x9f\x35\xb5\x7e\xf4\xa3\x62\x41\x44\x4a\x98\x32\xc1\x2b\xbb\x28\x22\xae\x26\x02\xc2\x09\x2e\x28\xd4\xd1\xc0\xdf\x46\xfd\xbe\x9d\xdf\x61\x52\xbe\x3c\x1d\x4d\x8e\xc3\x1f\xe3\xeb\x35\x32\xbb\xfe\x74\x38\x81\x66\xcf\xdb\x1a\xfb\xfa\xbd\xd9\xf8\x8a\x2b\x9c\x17\xa1\x02\xc3\xbf\x46\x4a\x53\xa3\x1f\x57\x1e\xb3\x48\xc2\xb1\xff\xcd\x8f\xc5\x03\x16\x71\x38\x16\xf0\x58\x1c\xc9\xf1\x10\xf6\xfb\xea\xaf\xf1\x70\x74\x0c\xfe\xda\x1b\xfd\x09\x8c\x8d\xe8\x29\xf8\x92\x65\xd1\x68\x38\xfc\xb3\x82\x0f\xc0\x9f\x40\xfb\x4d\x10\x95\xaf\xf0\xab\x88\xc0\xe3\xe1\xf8\x01\xb9\xfd\xba\xbd\xf6\x18\x4d\xd4\x3e\xdc\x51\xed\xcb\xce\xbe\x30\xb2\x2f\x8c\xec\x63\x32\x32\xd4\xfb\x9f\xff\xfc\xe7\x87\xe2\x66\x1f\x8f\x91\x99\x6b\x94\xfd\xad\x6f\xbe\xdb\x5d\x34\x48\x6d\x84\xb7\xd5\x9f\xa8\xdd\xf8\x3e\xbb\x9b\x5e\x44\xdd\x63\xce\x76\x1f\x6e\xb6\x1d\x51\xad\xf7\xe2\x5d\x98\xba\x6f\x97\xe1\xb3\x3d\xdc\x8f\x66\x5b\x5d\x8f\xce\xb1\x1c\x68\x46\xb9\xe7\x2e\xf2\xdd\xee\x17\xee\xce\xb1\x7c\x65\x80\xdd\x71\x4c\xd7\x7e\x07\x1c\x2e\x04\xb9\xa0\x7c\xb9\xaf\x0b\x57\xa5\xeb\xbd\xc3\xe5\x6b\x0f\xf4\xee\xf8\x2c\xfa\x6c\xc3\xa9\x9a\xe7\x03\x89\xa7\xfb\xba\xb8\x94\xfd\xee\x19\x36\xd5\x3c\x3f\x31\xe0\xee\x8a\x4a\xd7\x61\x1b\x1e\x97\x73\xcc\xf6\xf7\x14\xf2\xdd\xee\x19\x16\x3d\xb4\xbb\x62\xd1\x75\xd8\x82\x45\xca\xf6\x75\x13\xd2\x3d\xee\x17\xee\x0c\x8c\x3b\x8e\x47\xd9\x36\x37\x21\xca\x72\xca\xc8\x40\x5e\xcc\xda\x10\x57\xbe\x6d\xed\x50\x0e\x27\x2f\x66\x75\xbe\x88\x58\xa0\xdb\xe0\x2f\xba\xcd\x7f\x1f\xdd\xe6\xc3\xe6\x62\xb2\x7a\x47\xbf\xdf\xa2\x85\x1c\x6f\xb1\x62\x0a\xab\x59\xf1\x04\xb7\x69\x56\x96\x92\x4f\x2e\x66\x30\xa8\xd6\xc1\x91\x80\x6b\xe8\x02\xe3\x7f\xc0\x2c\xcb\xc9\x19\x16\x32\x9e\xe3\x77\xe4\x7b\xbe\x64\xd9\x0f\x6d\xb6\xd2\x6d\xa3\x12\x84\xf5\x99\x7a\x7e\x73\x73\xbd\x86\xdb\xd3\x71\x96\x7b\xcd\x55\x47\xd9\x9b\xa9\x15\xfd\xee\x22\x6b\xdb\x0c\xf1\x05\x7f\xb7\x6f\x88\x82\xeb\x74\x17\x61\xdd\xc4\xc6\x2d\xa4\x3b\x73\x72\xdd\x7c\x1b\xf6\xe4\x00\x4f\x3b\xbc\x7a\xac\xf5\xa9\xd9\xf4\x2e\x62\x6d\x1b\x8c\x5d\x51\xca\xed\xaa\xa3\xef\x71\x17\x41\xdd\x40\x20\xf6\x3c\xdc\x9d\x42\x6c\xfb\xed\xe8\x3b\x23\x53\x2e\x5a\xf7\x58\x93\x46\x5c\xdb\xbb\x88\xb9\xad\x50\xaa\x4b\xd2\xee\x05\xd5\x06\xa6\x6d\x7c\x0f\xe1\x4c\x73\xba\x38\xe3\x58\x64\x03\xb9\x5c\x2c\x6c\x42\xa8\x0e\x1d\xc2\x37\xdd\xd6\xff\x2e\xa2\x61\xd3\x46\x79\x5a\xc0\x70\x52\xa2\x60\xe7\x5d\xd3\xec\xbc\x1d\xe9\x5a\x20\xda\x8f\x03\xd9\x1e\x77\x11\xb1\xdb\x40\xb5\xbe\xb6\xfb\x80\x7a\x0f\x3d\x8a\xa9\x7c\xbe\x97\x4f\xb1\x6b\xbf\x1d\x7d\x56\x13\xd9\xf5\xee\xce\xc9\x91\x2a\x01\xc5\x73\x90\x24\x5a\x57\xe1\xd3\x9e\x55\x33\xfa\x7d\x20\xcd\x1f\xf5\x17\x5e\xff\x38\x0e\x87\x2f\x26\x6c\x5b\x92\xf5\xb8\xe5\x25\xe9\xf7\x37\x7c\xce\x54\x67\xb2\x62\x3f\x17\x49\x92\xf8\xe7\x87\xc5\xdf\xa5\x46\x75\x5c\xcc\x6d\xec\x3f\x08\x23\x52\x0d\xec\xfa\xa2\x06\xfe\x77\x51\x03\x77\xb9\xe2\x3a\xac\x2e\x3a\x86\xfd\xbe\x86\xe8\x30\x49\x70\xbf\x0f\xdc\xe6\x49\x92\x44\x45\xf8\x56\x7a\x25\x95\xb6\xd3\xc7\xba\xdc\xa2\x72\x20\xf1\x9c\x0c\xb8\xd8\x47\xf2\xae\x76\xb9\x8b\x9c\x72\x47\x98\xf7\x11\x25\x6b\x7d\xee\x29\xd4\xbb\xc3\x7a\xef\x20\xfc\x8d\xd3\x7d\x83\x06\x4c\x97\xbb\x09\x67\x77\x7c\x44\x8e\xff\x58\x69\xb1\x37\xad\xa5\x1e\xf9\xcd\x24\x8f\xfd\xe2\x9f\xf1\xe5\xf0\xda\x70\x78\x3d\x84\x48\x24\xd8\xf9\x43\x9e\x8e\x26\xdf\x55\x9d\x34\x78\xac\xb0\x98\x11\x05\x63\x2a\x23\x80\x01\xbc\xb9\x11\x11\xbf\xd5\xd1\xa5\xc9\xf4\xa9\xa6\xd2\x8f\x75\x76\xe5\xfc\x92\x88\x14\xcb\x7d\xef\x9c\xca\x7e\x77\x71\xe7\x77\x8f\x19\xc0\xbb\xe3\xa8\xbe\xc7\x16\xce\x99\xef\xe1\xf2\x91\xdf\x4d\xa3\xec\x06\xb4\xed\x3e\xdc\xd6\x23\x26\xdf\xc7\xe5\x23\xbf\x77\x2e\x1f\xf9\x1e\x2e\x1f\xf9\x56\x97\x8f\x39\xbe\x85\xdb\x94\xeb\x74\x17\xf1\xb6\x05\xd6\xfd\x01\xbd\x7f\x50\x92\x8c\xe2\x36\x38\x05\x91\x0b\xce\x24\xbd\x20\xb5\xb6\x77\x11\xc2\xee\x31\x1d\x7c\x3b\x8e\x68\x5a\x6f\xc3\x98\x11\xad\x07\x38\x6b\x35\x6a\xd6\x04\xef\xa0\xf1\x5d\xc4\xdb\x0e\x70\xa6\x38\x27\x2c\xc3\xbb\xa8\x91\xf5\x1e\xf7\x14\xe2\x8c\x4e\xa7\xbb\x43\x6b\x5a\xdf\x57\x48\x5b\x83\xbe\x36\x42\xdb\x15\xfa\x75\x4f\x20\xb6\x9e\xc5\xbb\xc3\xeb\xda\xdf\x57\x68\x05\x9f\x0f\x18\xbf\xdc\x03\xde\xa2\xc7\x3d\x86\x78\x3f\x68\xef\x2b\xa4\x72\x79\xa6\x44\x47\xa6\xc8\x76\x68\x7d\x8f\x7b\x0a\xb1\xe2\x2d\xa1\xda\x9b\x00\x2e\x3a\xdc\x5f\x78\xf7\xda\xbb\xae\xfd\xbd\x85\x76\x1f\x48\xef\x2b\x94\x4b\x46\xaf\x76\x80\xd3\x34\xbb\x9f\x20\xee\xbc\x8a\xf7\x0e\xbe\x5b\xc4\x3a\xdc\xc3\x38\x07\xb6\x4f\x90\x03\xdb\x1e\xe1\xc0\xb8\x1a\xec\x93\xfc\xcb\xb6\xbf\x7f\xd7\xf5\x8c\xab\xe7\xbf\xef\x8e\x38\xdd\x7a\x3b\xe6\xf6\x42\xdb\xfd\x43\xd8\x3e\xe8\xda\x8a\xac\x5d\x4e\xca\xfb\x78\x3e\xda\x4b\x97\x41\xbb\xd6\xb2\x81\xf7\x94\xfd\xee\x22\xc4\xdd\x63\xda\x79\x3f\xd9\x7d\xd0\xa2\xc3\x36\x3c\x2e\x74\xc7\x76\xc7\xa1\x4d\x68\x2c\xba\xdd\x33\x2c\x7a\x68\x77\xc5\xa2\xeb\xb0\x0d\x8b\xad\x86\xa0\x76\x9e\xc4\xef\xa6\x09\x68\x03\xd2\xc4\xee\xe8\x12\x5b\x10\xb5\xc0\x33\x32\x50\x54\xe5\xad\x0a\x4b\xf9\xb6\xad\xc3\xc7\xaa\x81\xea\xb1\xb0\xad\x36\xa7\x9f\x93\xad\xd2\xb6\x6b\x89\x98\xa2\xf9\x5d\x5c\xf5\x8d\x60\xd2\x05\x19\xd8\x12\x81\x7b\x72\x87\xb0\xe7\xdd\x84\xba\xdb\xe9\x40\xcf\xfd\x16\xe0\xde\x49\x38\xbb\xc7\xb4\x50\xee\x38\xa0\x6e\xbc\x8d\x56\xf2\xa5\xc0\x5d\xd5\x76\x28\x9b\xe6\x24\x55\x2d\x8c\xef\x8b\xcb\xc6\x17\x97\x8d\x16\x97\x8d\x22\x6b\xcd\x28\x49\x8c\xef\xc6\xb1\x18\x1b\xef\x0d\x4f\x65\x30\x12\xb7\x72\xd5\xf0\x03\x58\x57\x8c\x8f\xe5\xb0\x71\xcb\xd8\xf5\x7b\x1a\xb7\xbe\xd8\x37\x68\x7d\xb1\x5b\xc4\xfa\xef\x4b\xb2\xdc\x97\x15\xdb\x3e\xf7\x0b\x7f\x0e\xce\x1d\x47\x34\xad\xb7\x60\x4e\x60\x36\xdb\x17\x73\xb6\xcf\xfd\xc2\x9c\x83\x73\xc7\x11\x4d\xeb\x6d\x98\x23\xd9\x32\xdd\x1b\x75\xb6\xd3\x5d\xc4\xdd\x66\x58\x8d\x2a\xbc\xb7\xe7\x4a\xd9\xef\xfe\x41\xbc\x20\x7b\x5b\x0c\x5c\xa7\xbb\x08\xeb\x86\x9d\xe1\x20\xdd\x75\x6b\x98\xe6\x5b\xb1\x77\x41\x44\x87\x13\xe2\x26\xf4\xd9\x5e\x77\x11\x7f\x9b\xa0\x95\xe7\xcb\xe9\xb4\x5d\x4d\xdd\x00\x6d\xd1\xeb\x2e\x42\xdb\x3d\xa6\x87\x75\xc7\x31\x5d\xfb\x6d\x18\xa4\x6c\xb6\xcc\x71\x57\x59\x25\xaf\x15\x1c\xe5\xf4\xac\xb5\xd3\x9d\x51\xf8\x65\x4e\xf7\x3e\x14\x6c\x9f\xbb\x48\x07\x1b\x21\xe5\xe2\x16\x27\x42\xd1\xeb\xbe\x41\xab\xf0\xde\x29\x0c\x4c\x97\xfb\x07\xa7\xec\xa8\xde\xda\xb4\x56\x99\xb6\xf7\x0e\x40\xaa\x72\xb2\x7f\x52\x26\xdf\xed\x2e\xc2\xdb\x3d\x66\x09\xed\x8e\x83\x16\x1d\xb6\x61\x91\xcf\x66\xf9\x2d\x4d\x7e\xd5\xbe\x77\x11\x9f\xdb\x21\xbf\x15\xc8\x77\x12\xd6\x0d\xb4\xe3\x20\xdd\x95\x72\x4c\xf3\x6d\xd8\x13\xb4\xdd\x18\xbe\x61\xe7\xe9\x2e\xf7\x0c\x73\x06\xca\x5d\xf1\x26\xe8\x7c\x2b\xd6\x96\x2c\xed\xf0\xdc\xda\x88\x39\xd7\xed\xbe\x61\xaf\x80\x76\x67\x0c\xda\x0e\x5b\xb0\xb8\x64\x19\x11\x32\xed\x08\x6e\xdd\x80\xc7\xa0\xe3\xfd\xc2\x64\x08\xf1\x8e\xc3\x96\x5d\xb6\x62\x73\x7f\xce\x6f\xfb\xdc\x45\x1c\x6e\x81\xf4\x5f\xd6\xe5\x6c\xb9\x58\xdc\x2a\x5e\xb0\xec\x77\x17\x21\xde\xb0\x23\x4a\x78\x77\xdd\x10\x45\x8f\x6d\x98\x54\xad\x69\x2a\xeb\x44\xa2\xee\x5b\x6a\x4a\x03\xd7\xae\xb8\x52\xdb\x52\x53\xb6\xfa\x18\x6d\xa0\xb3\xbb\xe9\x6d\xd4\x3d\xe6\xe5\xce\xa3\x5d\x6e\xc3\x14\x55\xe7\x7c\xb9\xaf\x05\xb2\xe8\x75\xcf\xb0\x56\xc0\xba\x2b\xee\x6c\xfb\x2d\x18\xbc\x1a\xd0\xb4\xfd\x88\xfa\xa0\x29\x50\x7d\x59\x1d\x62\x23\xc8\x4f\x71\x6c\x2a\xe1\x23\x60\x3f\x6f\xfe\x19\x50\x39\xf0\xa5\xd9\x04\x9c\x98\x0a\x1c\x38\x55\x11\x8c\x7f\xe3\x94\x45\xa0\x07\xe0\xd6\x3c\x96\x02\x5d\x9b\x91\xc7\x7c\x7d\xab\x2b\xcd\xab\x97\x29\x67\x1f\xeb\x22\xf3\x6a\x1f\xc7\xa6\xab\x7b\xe7\xd9\x74\xb5\x87\x6b\xd3\x55\xa7\x6f\x13\x65\x54\x51\x73\xab\x2c\xe4\x11\x5e\x2c\x06\x84\x5d\xec\x94\x47\xca\xd2\x18\xa9\xd4\x78\xb9\xb9\x29\x7f\x0d\x27\x07\x24\xa6\xcc\xf8\x2d\x80\x94\x33\x25\x78\x9e\x13\x01\x90\xfe\x31\xa5\x9a\xa8\x25\x11\x17\x34\x25\x63\xf7\xc0\x64\xd2\xf1\x1d\xe6\x0b\xce\x8c\xef\x79\x77\xfb\x5b\xa5\xea\xf1\xf0\x76\xd5\x65\x61\xc9\x35\xc3\x73\x32\x06\x1a\x1b\xc5\xb7\xcb\x6e\x63\xb5\xae\x5a\x5e\x9b\xde\x38\x0d\x9c\x2a\xfe\xae\x9a\x23\xf0\x23\x60\xd5\x7d\xc3\x23\xc9\xfe\xee\xc2\x69\x47\xeb\x4f\x80\x51\xf7\xe5\x0d\x08\xdd\x42\xa4\x1a\x6a\x4c\x19\x11\x83\x8c\x9c\x2d\x67\x03\x9c\xe1\x45\x47\x4e\x24\x41\x24\xcf\x2f\x88\x38\x2a\xfe\x90\x47\x86\x5d\xd1\xb4\x73\x94\x8f\x65\xb6\x77\x18\xe8\x9c\x7c\x80\x8f\x60\x03\xef\x40\x0c\x82\xcc\xa8\x54\x44\x44\x5d\x63\x8f\xe7\x98\x32\x10\xa4\x0f\x41\x55\x0a\xea\xee\x02\xf4\x9c\xe5\x02\xa7\x04\x20\xbd\x76\x39\x4d\x4d\xa4\xa8\x7d\x0d\xd7\xfb\xad\x5b\x29\x59\xcd\xa9\xd8\x58\x69\xea\xfd\x71\x5e\x3e\x70\x78\x6f\x7e\xbc\x1d\xe1\xeb\xf5\xae\x70\x94\xd6\xe7\x6d\xc6\xe9\x2d\xbd\xef\xe2\xa9\xb3\x23\x12\x32\xac\x5a\x13\x0d\xe8\xe7\x47\x92\xa8\xa5\x61\xa0\x96\xc2\x2a\x2f\x5b\x24\x98\x0f\xb3\xd1\xf0\xff\xcf\xde\x9b\x3f\xb7\x6d\x64\x8d\xa2\xbf\xfb\xaf\x80\xf1\xd5\xd5\x25\x6e\x80\x36\x1a\x3b\x98\x61\x7c\x1d\x3b\xf9\xe4\xf9\xe4\x8c\xcb\x76\x34\xaf\x9e\x9e\x6a\x0a\x22\x5b\x22\x62\x10\xe0\x00\x20\x65\x2d\xfc\xdf\x5f\x9d\xd3\x8d\x1d\xe0\x62\xd3\x19\x27\x33\x95\x98\x22\xd1\x0b\x4e\x9f\xee\x3e\x7b\x9f\x6e\x4e\x38\x07\xb0\x4e\x6b\xca\x41\xee\xba\x66\xab\x67\xb8\x55\xfe\x04\xed\x2a\x65\xc1\xc7\x65\x12\xc6\xed\xeb\xb7\x3a\x99\x16\x1a\xfd\x54\xcf\xff\xf5\xfe\xc1\xe6\x00\x71\x00\x5a\x6d\x93\x6b\x37\x51\x72\xd5\x0e\xad\x2f\x1b\x73\xbe\xf8\x8c\xc5\xeb\x30\x4d\xe2\x5d\x37\x8e\xed\x41\xc8\xc2\xeb\xd1\x53\xfa\x74\x52\x81\x4f\xf8\x5b\x5f\x54\x10\xfd\x37\x02\xc4\xfb\x8a\xa1\x01\x5a\x93\x60\x54\x33\xf9\x69\x91\x50\xf2\x36\x8c\x67\xc9\xad\x12\x4f\xf8\x97\x27\x2c\xca\x98\x34\x50\x97\x8f\x50\x89\x27\xfc\x0b\xd6\x7d\x68\xd6\x2d\x13\x55\x66\x2c\xba\x2e\x22\x28\xe3\x09\xfc\xc2\xfb\x8a\x03\x35\xdd\x0d\xf2\x93\x60\x22\x73\x6d\xb2\xea\x2f\x7d\x9e\x8a\xf4\xef\x45\x98\x26\x32\xa6\xeb\xbb\x51\xd5\xdd\x02\x67\xfd\x6d\xca\xae\xc3\x4f\x8a\x1a\x5f\x04\x97\x8f\x8f\x23\xf8\x33\x61\x2a\x10\xfe\x64\xc9\xe2\xd1\xc3\x6d\x18\x45\xaf\x58\x96\xa7\xc9\xdd\xb8\x11\xf6\x18\x66\xe4\x1f\xd9\x0a\x44\x67\x98\xd6\xbb\x11\x3c\x51\x4b\xa4\xc3\x8a\x88\x58\xce\x24\xe8\x70\xb3\x51\x94\xcd\x17\x32\xff\x78\xd7\x8e\x1c\x5e\x62\xb5\x0d\x1a\x1f\xb6\x31\xaf\xd3\xe0\x86\x9f\x84\x66\xa9\x78\x38\xb0\x62\xab\x0a\x55\xab\xad\x21\xbd\xca\x43\x9d\xb9\x56\xcd\xc7\x5a\xd9\xbc\xc6\x54\xbf\x32\xf2\x7a\xc7\xf9\xf9\x68\x5b\x24\x33\x16\x95\xe3\xe8\x25\x61\x40\x3a\xb5\x76\xbd\xe3\x13\xad\x0e\xa7\x2e\x5e\xf6\x21\x0d\xe2\x8c\x9f\x54\xe0\xb9\x1c\x07\x69\x7a\x5d\x74\xa8\x44\x9b\xbc\x6a\x2f\x67\x39\x1a\x9c\x4b\x69\x97\xff\x56\xf6\x60\xf6\x9c\x89\x09\xa6\x1d\xf4\x5b\x97\x83\x78\x7b\x9b\x6f\x91\xc1\x6f\xbb\x31\xa0\x18\xca\x01\xb7\x06\x14\x4d\x06\x45\x07\x1e\x41\xad\x1d\x2a\x43\x54\xf5\x35\x9c\x33\x4d\xcc\xe0\xd7\x16\xd3\x0f\x91\x1e\x06\x98\x6b\xdf\x88\xe7\x2c\x98\x69\x57\x69\x72\x9b\x35\xc9\xd4\x57\x17\x7f\x9b\x2f\x3e\x44\xf4\x5d\x84\x9f\xc2\x18\xd6\x74\x90\x4e\xe7\xb0\x10\x9a\x73\x75\xbd\xca\x18\xf9\xad\x4b\x18\x9a\x84\x74\xcf\x93\x11\xe5\xd1\x83\x7c\xa2\xab\xf1\x24\x66\xb7\x92\x28\x13\x87\x08\x94\xef\xf3\xbf\x14\xdf\xbf\xcf\xbf\xfb\x4e\x89\x2f\xf2\xcb\x09\xbb\xc8\xcb\xa0\xfb\x78\xd3\x3e\x56\x81\xaf\xfa\x4a\x47\x2a\xc4\x4b\xf9\x40\xae\xd3\x64\x31\x62\x4a\xeb\xfd\xfb\x9f\x3f\xc8\x96\x29\x0b\x66\xbf\xdf\xad\xdc\x6f\x60\x66\xc9\x34\x65\x41\xce\x46\x0f\x7c\x82\x3f\xb0\x74\x31\x96\x65\x35\x0a\xb3\xfc\x43\xf2\x1e\x9f\x09\x31\x65\x9a\x2c\x96\xab\x9c\xcd\x46\x1d\x0a\x70\x71\xb9\x51\x54\xde\x1e\x80\xca\xc6\xf1\x2a\x8a\x54\xf6\x29\x98\xe6\x6f\x82\x7c\x3a\x7f\x5f\x2b\x6a\xf6\x45\x60\xc4\x19\x30\xd7\xb2\x86\xac\xa8\x29\xbb\x61\x9f\x0e\x6d\x74\xbd\xba\xbf\xbf\x3b\xb4\x51\x05\xe3\x4f\x31\xe0\x7b\x06\x54\xae\xd6\x53\xf9\x94\x72\xa0\x6a\xb5\x52\x96\xb1\xfc\x6d\x70\x13\xc6\x5c\x25\xae\x61\x85\xa7\x96\x46\xf9\x8b\x2b\x79\x50\x8f\x9d\x9c\xe0\x93\x8c\x81\xda\x5d\x3d\x96\x55\xaa\x6c\x54\xd8\x46\x6d\x3c\xcb\xf5\x49\x20\x17\x97\xb8\xdb\x9a\x83\xc4\xa7\x5d\x8a\x0c\x6b\xad\x24\x55\x28\xf6\x91\x7a\x5f\xea\x43\x36\x4f\x56\xd1\xec\x7d\x92\xe6\x30\x94\x7c\x9e\xb2\x6c\x9e\x44\xb3\x31\xb1\xd4\x28\x11\x3a\xbe\xae\xce\x42\xbe\xf8\xc6\x54\xd7\x55\x34\xdb\x00\xc5\x78\xaa\xab\x0b\xc0\xd8\x8b\x28\xfa\x00\xcf\x32\xfe\xe4\xd3\x5b\x58\xca\x69\x7c\x86\x9b\x73\x6c\x1a\xea\x22\x8c\x11\xb5\x2f\xe7\x41\x2a\x9e\x52\xf5\x23\xbb\xcb\xc6\x08\x51\x7b\x2c\x8f\x8f\x17\x97\xc0\x61\x7e\xae\xe1\xb2\x7e\xac\x8a\x63\xe7\x86\xe5\xf8\x94\x33\x1a\x18\x15\xef\x82\xcd\x3a\xe8\xab\x56\xb4\xac\xf6\xe0\xb2\x33\xf7\x4d\xfc\x56\x0f\xeb\x33\xdf\x68\xd7\x9e\x88\xfe\xe9\x91\xdb\xcb\xb9\x3d\x69\x5c\x35\x12\x8b\xa3\x00\x19\x63\x30\x46\x0a\xaa\x45\xec\xf1\xf1\x69\x49\x01\x0b\xa6\xdb\x9e\xd4\x27\x9c\x6e\x5e\x94\x94\x10\x6b\x74\x06\x79\x72\x92\xe3\x21\xad\x42\x25\x50\xe3\x51\x5b\x11\x0f\xaf\x47\x9d\xb7\x91\xeb\x30\xca\xeb\xf7\x51\x55\xf3\x12\x93\x2c\x59\xb0\xaa\x24\xee\x99\x31\xe8\x77\x32\x99\x30\x98\x34\x3c\xa1\xd5\x59\x92\x2d\x68\x6b\xe8\x52\x14\x45\x6d\x2f\x98\xe1\xc1\x88\x9a\x19\x13\xb8\xc4\x83\x6f\xbc\x7d\x7d\x1e\x0f\x44\x03\x1e\x4b\x13\x47\xbd\xd8\xad\xf4\x8e\xdd\xfc\xf4\x69\x89\xc2\x52\xe9\x23\xe9\xc1\x11\x1b\xc4\x51\x85\xbd\x80\xe4\x2c\xcb\x47\xcd\xc5\xad\x20\x9e\xf8\x21\xb9\x54\x79\xd8\x94\x64\x76\x0b\xee\xda\xab\x0c\x87\x4d\x56\x71\xf8\xcf\x91\xd2\xba\x0c\xac\x57\x3d\x28\xf8\x7c\x92\xe6\xe8\xc6\xbb\x0e\xa6\x79\x92\xde\xed\x69\xb4\x3e\x12\x8f\x6b\x4a\x0d\xbf\x33\xdf\x6e\x1e\xec\xfb\x7a\xf2\xc9\x17\x70\xf1\xda\x1a\x2d\x2f\x9d\x63\x64\x11\x2c\x7b\x16\x5d\x41\xf2\x92\x34\x27\xff\x97\x05\xd3\x39\x29\xbd\x7d\x0c\xd6\x43\x63\x93\xb6\x64\x81\x24\xcd\x0b\xc0\x38\x33\x87\x27\xaf\x58\x36\x65\xf1\x2c\x8c\x6f\x80\xe2\x57\xbd\xef\x27\x1f\xfc\xa3\x58\x59\x3f\xf3\x85\xf5\xf7\x20\x8d\xc3\xf8\xe6\x6d\x1a\xc6\x39\xe7\xb0\x48\xcc\xf1\x66\x9c\x36\xef\xe6\x9b\x94\x8b\x30\xea\x28\x9b\x24\x6a\x30\xca\x94\xc7\xc7\x18\x3f\xf1\x08\xaa\x18\xd9\x45\x7d\xd4\x48\x7d\xeb\x63\x11\x3f\xab\x81\x34\xe8\x30\x90\x5a\x61\x34\xd9\x06\xea\xc9\xc9\x53\x0e\x1e\x6c\xdc\x30\xbe\x51\x1e\xd2\x93\x13\x59\xfa\x30\x67\xd2\x7b\xd1\x4e\xc2\xcd\x24\x85\x99\x34\x63\xcb\x94\x4d\x83\x9c\xcd\x60\xe9\x5e\x07\xeb\x24\x95\x92\xeb\xb2\xa2\x78\x01\x91\xd5\x4a\x36\xd8\xfe\x76\x59\x7d\xaa\x2b\x9b\x1a\xcb\xa8\x8d\xb7\x72\xe0\x42\x17\x3f\x72\x83\x0f\xa9\x23\x40\x69\x30\x87\x26\x2e\x9e\x33\x22\x4e\xbb\x8c\x94\x31\xdb\x5c\x02\x15\x42\xa6\x92\x6d\xd5\x0b\x04\xb0\x03\x46\x97\x21\xaa\xf2\xb5\xd4\xb7\x66\x9a\xf4\x8b\x4b\xc0\xd6\x2e\x55\x4d\xc0\xc8\xed\x85\x5a\xca\xb2\xf0\xbe\x3b\xa2\x81\xac\xfd\xc7\x82\xbb\x6f\x17\x72\x80\xde\x01\x3c\x8c\x5f\x11\x99\x36\xd4\x35\x15\xed\x0c\x7f\xaf\xd5\x12\xfb\x26\x89\x47\xf2\x2c\x9c\xbd\x8e\x33\x96\xe6\x3f\x45\x8c\x9b\xaa\x7a\x25\x8e\x27\xbc\x45\xba\x8a\x49\x06\x42\xd4\x2a\x62\x7f\x8b\xa7\x6c\x24\xe3\x9d\x21\xef\x58\x3c\x03\x7d\x11\x0d\x87\xb5\xf6\x4c\xac\xd4\x1e\x08\x65\x95\x91\x9e\xc7\xe4\x2a\x8c\x67\x40\x42\xd5\xe6\x0c\x09\x6b\x2d\x82\x8c\x98\x67\xd0\x41\x5f\xc7\xc8\xc4\xd4\x94\x2d\x92\x35\x1b\x18\x73\xcd\x10\xda\x37\xea\x81\x37\x5f\x5f\x57\xaf\xe6\xdb\x7f\xe8\xed\x7b\x2f\xa4\x7c\xae\x95\xbe\x56\x6d\x1d\x66\xe1\x55\x18\x85\xf9\x9d\x36\x63\x39\xeb\x84\xa7\x1f\x5b\xf7\xe7\xfc\xa9\x6f\x41\x55\x90\x0c\x2f\xa7\x57\xc9\x14\x39\xe9\x79\x59\xb7\x86\xe0\x30\x0e\x9b\x28\x6d\x10\xc2\xc7\xc7\x51\x8d\x8a\x75\x5e\x26\xb0\xdb\x79\xce\x97\x06\x94\x29\x8a\x3a\x13\xaf\x27\xc1\x6c\xf6\xd3\x9a\xc5\xf9\x59\x98\xe5\x2c\x66\xe9\x48\xae\x1a\x4e\xe7\xfc\xe4\x2c\x9f\xad\x4e\x87\x4a\xb5\x50\xbe\x68\x34\x25\x2c\xbc\xaf\xcf\x06\xa7\xb5\x74\xf2\x5d\x4b\xe7\x3a\x49\xaf\xc2\xd9\x8c\xc5\x5a\x96\xb7\x22\xac\x7f\xbf\xb5\x82\x8b\xe1\x65\x19\x5f\xd0\xb0\xb1\xe2\x40\xc3\xec\xe7\x02\xce\x93\x93\xda\xc4\xd7\x9e\xcb\x2a\x7f\x0d\xbc\xb8\x5b\xf6\x54\x2f\x04\xf3\x6d\x4e\x8a\x0d\x57\xb4\x07\x20\xe9\xed\x97\xee\xd3\xed\x61\x53\xc2\xcd\xe0\x0c\xc4\x5a\x6d\x0e\xd3\x8a\xb2\x43\x2f\xc7\x5b\xe5\x61\x84\xa9\xdb\xc2\xeb\x3b\xde\xe2\x77\x65\x1a\x08\x69\x9f\x91\x76\x17\x46\x08\x57\x37\x9a\x44\x92\xef\xca\xcd\x61\xa4\xaf\x0c\x1a\xd0\x70\xea\xf2\x16\xae\x7e\xc7\x35\x7c\x97\xe5\x6c\x21\x76\x3c\x77\x0b\x10\x61\x3f\x1e\x29\xea\x6f\xc9\x55\x56\x5b\x56\x8d\x5a\x55\x60\xcd\x48\x86\x7a\xb2\xa2\xf2\xb3\x41\xd9\xf8\xe1\x26\xc9\x93\xbf\x26\x57\x59\x77\x4b\xe0\x5a\xe4\x2f\x25\x50\x7d\xcd\x7e\xa9\xe2\x27\xb0\x06\x28\x78\x72\xf3\xc5\xe4\xb7\xe4\xaa\xaa\x56\x6c\x89\x6c\x57\x45\x95\xf1\xce\xc2\x59\xd9\x06\x1d\x1e\x21\x40\xf4\x21\x79\x97\xac\x72\x56\xc0\xbe\x39\x70\xb5\xa7\xd0\xf8\xcf\xc4\xb7\x70\x32\x90\x94\xfe\x59\x78\xd7\x8c\xed\x33\xa6\x7f\x15\x07\xbb\x05\x52\xc2\xd2\x6c\xbb\x52\xb0\x6b\xad\xfd\x8e\x64\xb3\x24\x79\xea\x43\x01\xfb\x7e\x5a\xed\x34\x88\xa7\x2c\x7a\x11\x45\x7f\x2f\x9a\xb5\x3d\xf0\x45\x7f\xe4\x3a\x49\x7f\x0a\xa6\xf3\x51\x93\x7f\x95\x1d\xa0\x95\x46\xcd\xf2\x20\xcd\xfb\xfa\x12\xcb\xbc\x8f\x0f\x36\x69\x7c\xa3\x87\x01\xc7\xff\x1e\x5c\x77\xeb\x9e\x2b\xd7\xd5\x1c\x79\xee\x73\x6e\xea\x6e\xa3\x62\xa4\x8c\xbb\x10\xf1\x6d\x56\xd1\x57\xb5\xf5\x9b\x53\x35\xe4\x62\xb2\xa2\x6c\x2a\xb2\x0b\xc2\xfd\x87\x92\xc2\xf5\x5e\x30\x4a\x40\x43\x8e\x73\x02\x0c\xe8\xe4\xa4\xf1\x93\x03\x91\xfd\x3d\xcc\xe7\x1c\x02\x5c\x77\x40\x4e\x95\xc7\xc7\x21\xf0\xd5\xa7\xfa\x66\x1f\xde\x07\xc0\x66\xcf\x82\x9b\x81\x4c\xc9\xe8\xc8\xe4\x23\x6a\x3c\x0a\xf2\xbc\x2d\x1b\x1c\x33\x0e\xaa\x1e\x95\x92\xb3\x78\xb6\x8b\x1f\xa2\xa3\x70\xa4\xab\x71\xc5\xfe\x8b\xa0\x15\x45\x0d\x66\xb3\x94\x65\xd9\x60\x79\xc6\xd2\xeb\xb7\x49\x9a\x0f\x56\x48\x97\xd3\xad\xe5\x79\x70\xd3\xee\xfd\x41\x7c\x3b\xc7\xa1\x76\x96\x3b\xf7\x57\x82\x88\xbc\x1a\x86\x0b\x10\x3d\x65\x71\xce\xd2\x61\xc8\xd8\x0d\x2c\xa8\x2d\x80\xbf\x98\xcd\xd2\x8e\x77\x41\x60\x44\x56\x65\x98\xed\x21\x83\xbe\xa8\xa5\xe6\xfc\xa7\xc0\x42\x61\x85\x61\x27\x27\xf9\xc9\x89\x5c\xd9\xe5\x54\x79\x2c\x97\xb6\xac\x1c\x78\x41\x98\x9d\xb1\x60\xc6\xba\xef\x17\x72\x46\x84\xa5\x44\x40\xd9\xe7\x0c\xaa\x04\x8f\xfe\x26\xca\x64\x52\x02\x07\x0f\xf6\x32\x16\x8b\x25\x1f\x15\xde\xa2\x83\xd7\x7d\xe3\x49\xca\x22\xec\x25\x9b\x87\xcb\xed\x01\x28\xd8\x38\xbc\x5a\xe5\x0c\xea\x45\xc9\x2c\xc8\xe6\xb8\xcf\xd3\xac\x90\x50\xda\xa2\xf8\x92\x6f\xa1\x90\x65\xcf\xb2\x79\x92\xe6\xda\x6a\x15\xb6\x6f\xee\x51\x63\x35\x50\x53\x35\x51\xb3\x63\xed\xbf\x68\xf2\xb0\x14\xc6\x52\xaa\xa6\xab\x38\x86\x6f\x86\x0a\xf3\x17\xb1\x9c\x8d\x4d\xf5\x3a\x08\x23\x36\x1b\x5b\x6a\x94\x64\xf9\xd8\xde\xa8\x61\xcf\x96\x45\xaf\xdb\xd0\x8e\xc5\xe1\xbc\x9e\xc1\xd2\xcd\x6a\x4b\x17\x44\x42\x90\x6e\xe1\x79\x40\xae\x58\x94\xc4\x37\xd9\x87\x44\x41\x71\x50\x56\xd4\x38\x99\xb1\x6e\x19\x3c\x95\x77\x50\x81\x3c\xc8\x3e\xfe\x77\x9a\xac\x96\xbf\x6c\xab\x95\xb2\x2c\x59\xa5\x53\x86\xbb\x32\x25\xc5\xdc\x29\x68\x66\xe1\x25\x40\x51\xf8\xda\x61\xb3\x77\x7b\x55\xff\x2d\xb9\x3a\x67\x69\xd6\xb3\x53\xe3\x15\x60\x47\x56\xd4\x45\x32\x0b\xaf\xef\x5e\xc7\x33\xf6\x69\x47\x9d\x0f\x61\x17\x7c\xbc\x55\x42\x51\xb9\x40\xb0\xbd\x13\x5e\x67\x5b\x27\x51\xc8\xe2\xfc\xfd\x0e\xd2\xc4\xb2\x30\x65\xb3\x1d\xb5\x38\x7d\xe3\xf0\xb4\x49\x40\xfd\x35\x7d\x3b\x3f\xba\xe0\x9c\xad\x56\xed\xf2\xf1\x91\xea\x3a\xd2\x95\x77\x62\x51\xb6\x6c\xed\x98\xa7\xbd\xdd\xb7\x2c\x56\xb0\x0c\x0d\xdf\x84\x37\x69\x00\x02\x66\x1b\xe8\xab\x24\x89\x58\x10\xcb\x8a\x5a\xe4\xc8\x7b\x51\x12\x88\xee\x82\xab\x13\x8f\x87\x30\x46\xcb\xf3\x18\x53\xd5\x57\xad\xe4\x8d\xa2\x36\x9f\xec\xdb\x4f\x17\x02\xe8\x6b\x99\x32\xb6\x58\xe6\x6c\x56\x3d\xce\x78\x8f\xf3\x20\x7b\x13\xc4\x77\xdb\xfa\xe3\x2d\x7f\xbc\x1b\xe8\xb2\x5e\x70\x00\x94\x1d\x78\xa0\xd3\xdb\x20\x7b\x5b\x14\x0d\x63\xf9\x3a\x89\xa2\xe4\xf6\xd7\xe5\x4f\x40\x8c\x06\xde\xcb\xca\xb2\x72\x31\xbd\xc4\x03\x5b\x07\x2e\xa6\x92\x9a\xc9\x61\xa6\x2d\x0b\xef\x49\x41\xd8\xf0\x61\x1a\x2e\x82\xf4\x4e\xae\x68\x1c\x3c\x2d\x7e\xc8\x05\xbd\x83\x87\xdc\x2c\xc2\x09\x1f\xfc\x8e\xc2\x9b\x79\x2e\x6f\x7a\x97\x2b\x94\xcf\x82\xf4\x23\xa0\xa5\xa4\x3f\x1d\xe8\x1b\x94\x49\x56\x81\xd2\x91\xf2\xd9\x36\x8f\x7b\xa1\x91\xd7\x6a\x57\x2e\x5d\x94\x22\xaf\xc3\x78\xf6\xe3\xdd\x08\xcf\x42\x08\x15\xa9\xf1\x36\xe0\xd2\xab\x78\xce\x82\x28\x9f\xdf\xbd\x4a\xc3\x75\x8f\xf2\x50\xc1\x47\x66\xbc\x06\x77\x4e\x01\xd1\x25\xad\xc6\xa8\xe3\xef\x82\xb8\xd3\x1f\x50\xe7\x5a\xf9\x60\xc7\x8d\xc1\xe5\xcf\x47\xba\x9a\x54\x6b\x0b\xd4\xac\x31\x8f\xe6\xc9\x83\xbc\x4d\x91\xd1\xd5\xa9\xf0\x77\x0b\xd3\x24\x12\x7b\xe1\x37\x40\xed\x72\xa0\x49\x55\x4b\x63\x50\x4d\x56\xd4\x79\x90\xbd\x6b\xb7\x6d\x63\xad\xdd\xb9\xf0\xac\xca\x6a\x9b\x4c\x6c\x15\x7b\x86\x7a\x51\x7e\xd0\x85\xec\xdf\xec\x6d\x83\xc0\xbd\xcf\x93\xe5\x12\xb9\x13\x6f\xdc\x25\x95\xa3\x0e\x14\x6d\xaa\xd9\xdd\xa0\xa8\xe9\xb4\x1d\x13\x1c\xe2\xa7\xb5\xd9\x6b\xf4\x5b\xb6\x51\x4e\x4e\x6a\x95\xb6\x74\xae\x9c\x9c\xc8\x7c\xbb\xc9\x85\x70\x57\x87\x0c\xe7\x37\x59\x0e\x6b\x90\x49\xca\x88\x38\x09\xf4\x73\x92\x36\x88\x97\x02\xc5\x4b\x6e\xf2\x40\xdb\x2c\xe8\x55\x7d\xda\xd8\x3e\x5d\x89\xe6\x5c\xfb\x64\x2d\x3b\x63\xb8\x45\xf0\x9c\x26\x71\xb6\x8a\xb4\x69\x12\xc7\xac\xff\xba\xac\x5e\xe1\xb1\x8a\xdb\xde\x53\xc4\xfc\x5d\xb5\xb3\x70\xc6\xa6\x41\xfa\x5e\x84\x28\x23\xd5\xaf\x09\x43\xa2\xb8\x0c\x80\xdd\x5f\x4a\x9f\xb1\x65\x94\xdc\x0d\xdd\xe3\xf3\xf5\xa5\xf4\xbd\xe4\xf1\xad\xd5\x56\x0b\x2d\xb8\xb9\x49\xd9\x4d\xdf\x3d\x85\x5f\x43\x76\xef\x99\x9d\x4a\xd6\x4e\xf6\x96\xb5\x6b\x9c\xbe\x9a\x04\x64\xf0\xbf\x25\x57\x3f\x27\xe9\x19\x10\xd9\x7c\x67\xdb\x08\xab\xbd\xaa\xa6\x71\xa3\xa8\x6b\x2e\x0c\xff\x82\x32\xe9\xa0\xa4\x9a\xb2\x7f\xae\xc2\x94\x65\x6f\xd3\x64\x91\xa0\x80\x30\xc8\x98\xde\xaf\x16\x8b\x20\x0d\x59\x26\x82\x45\x96\xd8\x84\xcd\x7a\x28\x55\x29\x0d\x16\xc4\x85\xcb\x15\x22\xc0\xb1\xa7\xc7\x3c\xe1\x61\x32\x4a\x2b\x0c\xaa\x6e\xbb\x11\xa4\xba\x05\x2f\xd2\x3c\x51\x58\x42\xc4\x5d\xc1\x3b\x34\x7f\x5e\xfc\x8a\x65\xd3\x34\x5c\xe6\xdb\x34\xfc\x5d\xa2\x70\xd6\x15\x82\xbb\x63\xdc\xc2\x2a\x6f\xa0\xa2\x56\x2d\x00\x2d\xc3\x46\x77\x95\x12\xb4\x5d\x0c\x05\xde\x2e\xa6\xbb\x33\x7d\x8d\x65\x20\xe4\x1e\xf1\x2c\x2b\xd8\x81\x98\x50\xb1\x28\xba\xd3\x39\x6a\x0a\x42\x45\x73\x59\x79\x7c\xbc\xb8\x54\x2a\xf9\x47\xb4\xe7\x96\xf0\xfa\x7b\x95\x6a\x3d\xbe\x5f\x5d\x2d\xc2\x1c\x55\xa3\x76\x0c\x4f\x14\x06\x59\x09\x30\xc9\xca\x8a\xa0\x2e\x44\xc1\x94\xcd\x5e\x06\x71\x89\xca\xba\x3e\xdb\x45\xb6\xac\xca\xcd\x26\x95\x3a\x75\x50\x27\xad\x36\x55\x2f\x1f\x92\x3c\x88\x0e\xe9\x02\x1b\x94\x23\x41\xde\x7d\xc8\x38\x78\x03\x90\x8a\xb8\xc0\x76\x40\x07\x8d\x16\x72\x4d\x14\x3d\xa0\x8f\x56\x9b\x1d\x9a\x42\x36\xa8\x23\xd4\xd5\x81\x62\xb3\xa8\xd9\x6a\x3a\x65\x59\x76\xbd\x8a\x9a\x6a\xc2\x32\x58\x65\x42\x1f\xe0\xf2\x7f\x8f\x86\xc0\x8d\xb2\xc5\xc3\xf2\x57\xa1\x2a\x64\x7d\x4a\x82\x20\x13\xfb\x4b\x37\x35\xfe\xa8\x14\x64\x4f\x08\x38\x0d\x1e\x1b\x6d\xe3\xb1\x69\x10\xc6\x5a\x96\xa7\x41\xce\x6e\x7a\x0f\x04\xf7\x33\xd5\x61\x11\xe5\xeb\x89\x1e\x71\x87\xb9\xcd\x58\x30\x8b\xc2\x98\x8d\x9b\xde\xdf\x8a\x8f\x5c\x27\xe9\x94\xbd\x1a\xa8\x25\x8c\x1e\xe1\x4d\x9c\xa4\xec\x3d\xda\x18\xd1\x3f\xda\xaa\x56\xe9\xad\xe8\xae\x9f\x76\xc3\xfc\xa2\x1c\x1d\x5b\xf8\x12\x59\xd5\x51\x0c\xff\x25\x29\x5f\xdb\x4f\x9d\xeb\x0d\xf6\x16\x89\x6a\x5a\xf1\xb7\x2b\x12\xf5\x8b\x39\xc7\x5a\x07\xd9\x81\x42\xce\x32\x0d\x93\x34\xcc\xef\x06\x65\x8d\xfc\x6e\xb9\xc5\x72\x98\x86\x37\x37\x2c\x65\xb3\x1f\x3b\x1d\xb4\x38\xf6\x11\x18\x3a\xa7\x23\x1f\xfe\xbb\xa2\x80\x5d\xce\x8c\x74\x97\x5f\x18\x1c\x84\xd1\x0a\xd3\xd1\x6d\xf7\x37\x5c\x5c\x6e\xb8\x66\xf8\xb6\x68\xfa\x33\x6f\xd9\x39\x6a\x02\x2b\x7d\x24\x37\xa1\x28\x95\x4e\x35\xcc\x7e\x8c\x92\xe9\xc7\xee\xf2\x6f\x8b\x1b\x57\xbc\xda\x76\x63\xee\xb7\x63\xf4\xbc\x0d\xc2\xfc\xd7\x38\x0f\xa3\xfe\xf2\xc6\xde\xcc\xb6\xec\xcd\xdf\x92\x2b\x6d\x19\xf5\x1f\xb5\xdc\x7b\x67\x6e\xdf\x7e\x83\x3b\xb8\x6f\xcb\x1d\x6b\xc3\x25\x3d\x1b\x6e\x16\x5e\x5f\xb7\xd0\xd5\xb7\x7c\x83\xa3\x2d\x5f\x61\x70\x2c\x04\xce\xb4\xdf\xee\xd9\x9c\xac\x64\xc7\x64\x15\xe2\xec\xb7\x46\x49\xf7\xd2\x1a\xbf\x26\x39\xdd\xb2\x6d\x3f\x43\x81\xa8\xb4\x06\xbc\x44\xa5\x26\x64\x26\xbb\xe4\xbb\x7a\x03\x4e\x49\xd3\x3c\x8c\x6f\x0e\xe8\xa1\xd9\x04\x34\x4b\x2e\xde\x1d\xd0\x45\xa3\x05\x10\x14\x61\x19\x3e\xa0\x8b\x66\x93\x92\xd2\x1f\xd0\x43\xbd\x81\xac\xa0\x05\xfa\x80\xd6\x55\xf5\x42\x77\xcb\xce\xc2\xac\x7d\x00\x82\x4c\x93\x28\xc2\x23\xe8\x0d\xbc\x77\x90\xd8\x46\x49\x67\x7c\x2d\x70\x5b\xef\xcf\x41\xe5\x10\xc0\xb7\x00\xc8\x56\x0b\xb1\x9f\x11\x3e\xe0\xde\xdc\x62\xff\x72\x1e\x46\xb3\x94\x0d\xfb\xd0\x04\x44\x3b\xeb\x81\xd4\xb5\xb3\xd2\x54\x54\xd8\x8a\xa3\x16\x64\x15\x56\x6a\x4f\xea\x6f\x2b\x46\x5e\xbe\xbd\x6f\xec\xf5\x37\x77\x59\x4f\x37\x61\x57\x8d\x9a\x09\x05\xf5\x98\xd4\xac\x4b\x79\x8e\x45\x75\xd2\xc3\xa8\x4e\x86\x87\x30\x86\x1d\x4a\x95\x52\x3e\xc0\xe3\xe3\xed\xe6\xa6\x3e\x76\xb6\xd9\x99\xae\xaf\x42\xfe\xbf\x82\x85\xf4\xb3\xfc\xf2\x2c\x58\xf2\x9f\xe3\xeb\xdf\xd8\xf1\xf5\x6c\x72\x51\xe4\xf1\x00\x21\x39\xc8\xa7\x73\xa0\xad\xa8\x77\xca\x97\x6a\x9f\xf1\x76\x47\x88\xcf\xd6\x98\x87\x65\x14\x84\xf1\xeb\x8e\x17\xb6\xd2\x6c\xb6\xa9\x3d\x3b\x95\xa6\x20\x8a\x5e\xe4\x7f\x8b\xa7\xdb\x36\xe5\xb1\xd4\xa2\x7d\xa4\xfc\x7d\xd4\x89\x25\x4b\xc3\x64\x16\x4e\xb7\xb8\xff\x83\x34\x58\xb0\x9c\xa5\xe1\xfd\x36\xff\xf5\x2c\xcc\x96\x18\x6c\xb7\xa5\x4e\xf1\xb2\x57\x2c\x0f\xc2\xa8\x8d\x86\xd6\xab\x86\x2a\xcd\x83\x6c\x80\x5d\x00\xff\xe1\x2f\x90\x55\xb9\xd1\x17\xb0\x9d\x12\xbe\x41\x07\x63\xd1\x5a\x38\x12\x1b\x3d\x14\xde\xba\xaa\x9b\x0d\xc2\xcb\xe2\xdd\x26\xff\x82\x81\xc9\x9b\x8a\x8d\xb6\x2d\xc4\xad\x26\xbc\x67\x74\x93\xa7\xe1\x62\xc1\x66\x18\xa4\xd3\x71\x59\x72\xff\xb8\xa8\xbc\xd5\x6f\xca\xeb\x54\x4e\x45\x1e\xe6\x89\xd1\x94\x29\x43\x05\x64\xf4\x8c\x7c\xf7\xfc\xff\x7b\xf6\x4c\x95\x65\x11\xeb\x09\xa5\x1b\x3e\xb3\x51\x70\x07\x04\xa3\xeb\x71\xb8\x5b\x22\x04\x83\x78\xdf\x81\xea\xe7\x55\xd3\x71\x17\xe9\xcf\x5b\xbd\xf1\x2a\xf0\x4e\x40\x0c\x5b\x2c\x23\xd0\x62\x3f\x0b\xae\x02\x21\xcd\x1a\xf8\x64\x70\x00\x35\xbf\x3d\xf4\xff\x64\x08\xc9\x65\x9f\x4a\x35\x3c\x0d\x27\x5e\x8c\xa0\x51\xb9\xf1\x3a\xa5\x35\xe4\x46\xb3\xcf\x44\x5a\x46\xc2\x78\x1a\xad\x66\x2c\x1b\x31\x31\xef\x48\xe7\x4a\xc2\xbb\xa9\x87\x56\x76\x37\x5c\x15\x4c\xb1\x4b\xad\xd9\x53\x6f\x15\xca\x4f\xef\xbe\xa9\x69\x46\x61\xf6\x16\x44\xec\x20\x1a\xb0\xad\xd4\x42\x42\x8a\x50\x02\xbd\x06\xed\xcb\x64\x15\x77\x24\x55\x60\x77\x3d\xed\xfa\x3c\x67\xa5\x8d\xa7\x47\xbd\xeb\x77\x87\x08\xd0\x7b\x9c\x66\x6d\x3d\x6f\x7b\xfb\xed\x1a\xde\xf6\xb6\x3b\x74\xbb\xed\x8d\x77\x68\x75\xdb\x1b\x6f\xd7\xe7\xb6\xb7\x1d\xd6\xe4\xb6\xb7\xdb\x57\x87\x6a\x4f\x50\x55\xb3\x47\x9d\xda\xde\xb6\xad\xe2\x74\xd5\xac\xbd\x70\x5c\x6b\xdf\x50\xbf\xb6\x37\x3e\x44\x77\xea\x1b\x73\xad\xed\x7a\x47\x00\x66\xe1\x39\xec\x61\x54\x5a\xe5\x55\xdc\xdf\xe9\x59\xf3\x99\xb7\x2b\xd6\xdd\xe9\x8a\x5a\x99\xf3\x3b\x15\x6b\x45\x42\xd2\xc3\xf3\x53\x3d\xf1\xaf\xd5\x19\x2c\x75\xb6\x2b\x8a\xab\x70\x92\x17\xc1\x57\x43\x3c\xab\xd6\x60\x11\x2c\x7f\xbc\x1b\xc9\x65\xb8\x16\xe1\xf7\xae\x8e\x7a\x73\xdd\xb0\x7a\x72\x12\xa6\x26\xa3\x5c\x51\x54\xb6\x51\x2f\x2e\x95\x32\xa5\xc7\xee\xa0\xb3\x1a\x36\x05\xbc\xed\x26\x03\xf9\x83\x78\xe8\x7a\xad\xb5\x00\xbe\xdd\xfc\x18\xa3\x98\x07\x85\x3d\xbc\x16\xc6\xd8\x1e\x49\x6d\x16\xc5\x48\x4a\x2b\xfa\x20\xfc\xf5\x36\x7b\x07\x20\x54\xdd\xf2\x20\x83\x7d\xcc\xfd\x41\x3c\x1b\x89\x18\x0d\x51\xe5\xa7\x9a\x7b\x49\xee\x1b\x20\x10\x2c\x6c\x70\xd0\x98\x6b\xc2\x39\xa8\xb7\xb5\xf2\x30\x7b\xdb\x93\xd0\xa2\x26\x7c\xd4\x2a\x0b\x19\xe4\x29\x7b\x7c\x2c\x07\x5d\xb4\x56\x9e\xc7\xab\x28\x1a\xb3\x22\x81\x84\x5c\x7f\xa5\xc2\x6b\x47\x41\x96\x73\x4d\x4e\xc6\x14\x4c\xfd\x03\xff\xfd\x86\x23\x32\x24\x75\xc7\x52\xa8\xb7\x30\x24\x71\xba\x90\x89\x1c\x3d\x30\xb4\xbe\xa9\xad\x65\xf3\x79\x9e\xef\x8b\x84\x31\x57\x4e\x51\x4a\x59\xa2\xf1\xe2\x55\x8d\x70\x0d\x08\x22\x5c\xd8\x2c\x83\xb9\xd4\x76\x8c\x4f\x97\x40\xd5\xc3\xb8\x2a\xa9\xbf\x1e\x48\x04\x52\x99\xe0\x15\xb5\x8e\x3a\x59\xc5\xda\xd1\x44\x6a\xe7\x11\x29\x43\x62\x86\x26\xa0\xdd\xe2\x09\x66\x4b\x12\x33\x50\xb4\x2d\x67\x00\x64\xef\x6b\x96\x4f\xe7\xef\x82\xdb\x57\xa0\xfd\xb7\xce\x70\xed\xf2\xd0\xa3\xf5\x8a\x74\x7b\x28\xc2\x10\xd1\x3d\xfd\xb6\x50\x4b\x0f\xed\xb6\xde\xb8\xe8\xf1\xb0\xf8\x48\xde\x51\x3d\x30\x72\x19\x05\x07\x8f\x0f\xda\x94\x81\x95\xab\x83\x9b\xa7\xab\xb2\xf5\x6a\x39\x0b\x0e\x89\x80\xe0\x1d\xf0\x56\xe5\x08\x02\x58\x5f\xed\xd9\x17\x41\xc6\x6a\xcc\x97\xc1\x3f\x62\x56\x9b\x8e\x27\x55\x96\xac\xbf\xbe\xff\xdb\x2f\x04\xbb\x18\xc5\xca\x93\xda\xd1\xda\x46\x03\xa8\x25\xab\x81\x38\x90\x18\x66\xbf\xb0\xdb\x2a\x4b\xde\xeb\xd9\x8f\x77\x6f\x83\xbb\x28\x09\x66\xa3\x40\x51\x99\x38\xb7\xf9\xee\xfd\xf9\x5b\x22\xd2\xf9\x8f\xe2\x5a\x96\xac\x22\x85\xda\x10\x76\x11\x98\x1e\xa8\x15\x92\xcf\x59\xdc\xe0\x09\xf9\x30\xb0\x4c\x51\xf3\x36\x74\x0c\x78\x45\xb9\xd4\xd5\x66\x69\x23\x36\xb6\xa0\x42\xe5\x39\xee\xc7\xc7\x2a\x87\x6b\x2c\x0a\x6a\xe8\x12\xc6\x27\x59\x8d\xeb\xe7\xc2\xff\x11\xce\x7e\xc4\x8c\xb8\xef\x83\x35\xee\x51\xc4\x36\xb7\xf3\x84\xd7\x77\xa3\x8b\x58\xcd\x2f\x15\xa5\x88\x34\xad\xb0\xb2\x64\xec\xe3\x3b\x36\x4d\xd2\x59\x5d\xde\x51\x73\xe5\x49\x50\xcf\x4e\x58\x2b\x0a\x8a\x04\x0c\xaf\x67\x9d\x93\xad\x99\x38\x7f\xde\x79\x3d\x57\x30\x39\xe8\xb5\x73\xef\x65\xb7\x68\x25\x90\x95\xda\xd8\x2f\x15\x7e\xf6\xf5\x33\x62\x8e\xf6\x3f\x97\x00\x92\x70\xf7\xb8\x41\x7f\x0c\x91\x98\xbb\xe1\xb3\x3b\xd3\x64\xc6\x66\xc5\x14\x77\x6c\x4a\xfc\x79\x9f\x68\xc2\x73\xcb\x90\x20\x4f\xae\x46\x42\x11\xc7\xba\x8f\x8f\x32\xb2\xd3\xe6\x9a\x1b\x04\xa0\xbb\x34\x87\xaa\xee\x1d\xc2\x54\x9b\xf5\x6f\xf8\x0c\x6b\xdc\x35\x6a\x61\x6a\xcf\xbf\xc5\xd1\x9d\x88\x54\x99\x07\xd9\x7c\xdb\xa9\xab\x5d\x86\xd2\xbd\xa3\x88\x62\x96\xdf\x26\x69\xef\xdd\xc4\x87\x46\x7b\x7d\xbe\xb7\xe2\x78\xae\xa4\xbe\xb8\xb0\x22\x14\x3d\xef\x35\x28\x87\xb3\x74\xb0\x30\x5c\x0e\x16\x2d\xc4\x01\xc4\xfe\xc2\xab\x30\xef\xc4\x8e\x55\xb6\x67\xc0\x32\x97\x8d\x02\x6e\x4b\xda\xdf\xc1\x14\x27\x33\xa6\xd5\x83\x07\x8e\x31\x6d\xd7\x51\xd0\x8d\xd5\x3b\xe6\xac\x04\xe5\xac\xac\x62\x78\x59\xce\x62\x35\xe9\x99\x2b\x18\xdd\x8b\x72\x70\x2d\x04\x2a\x6a\x35\xee\xf7\x79\xba\x9a\xe6\xab\xb4\x27\x63\x6a\xb3\x8f\x21\xd9\xaf\x59\x0b\x25\xbf\x82\xb3\x89\x41\x7f\x64\x77\xd9\x88\xf1\x34\x74\xa3\xae\x8e\x88\x24\xa2\x90\x48\x2e\xe2\xcb\x09\xbb\x88\x2f\xd5\x7c\xa3\x3e\x54\x69\x09\xd3\x51\xae\x3e\x24\x6b\x96\xde\xa6\x61\xce\x31\xb4\x41\x9d\xf7\x63\x9c\xdc\xc6\x65\x72\xc2\x96\x9f\x8c\x2b\xae\x3d\x43\x55\xba\x29\x49\x87\xaa\x76\x0e\xa2\x6c\x8b\x7f\xc1\x35\xc5\x75\xfa\x2f\x3b\x85\x72\x58\x08\xd3\xef\xeb\x51\xae\x0e\x0c\x17\xc0\xfc\xed\x36\x66\x69\x73\x59\x35\x2b\x88\x03\xc5\xf5\xed\xd6\x58\x83\xf3\x9e\xbc\x91\x85\x6f\xa2\xaa\xd6\x3b\x3f\x5b\xcf\xc5\xed\x6a\xdb\x4a\x7b\xc9\x13\xae\x0a\xa3\x4c\x95\x1f\xb3\x74\x65\x60\x3a\x96\xad\xee\x41\x9e\xae\x64\xd8\x83\xd5\x32\x6f\x3f\xa5\x9b\x32\xc8\xfb\xf0\x26\xfb\x78\xf9\xb8\x14\xbf\xc5\x87\xcf\xbb\xea\x17\xb3\x04\x64\x83\x36\x15\x51\xfe\xbc\x3c\x0a\x31\x2e\xce\x99\x6d\x0e\xa4\xc3\xfc\x18\xe0\xbf\xe3\x96\x59\xb0\x2c\x0b\x6e\x86\x57\x54\xb6\xba\x12\x89\x3a\xb6\xac\xb9\x5e\x37\x67\x3e\x3c\xe9\x7c\x85\x0f\xd8\x7b\x45\x7f\xc2\x9a\x29\x1f\x36\x93\xdf\x5c\xd8\xdf\x96\x33\x65\xe1\x52\x5b\x06\xed\xdc\x55\xbf\xd7\x09\xb2\xed\x64\x64\x77\x9e\x12\x40\x36\xdf\xb5\xc3\x07\x99\x5e\xa5\x41\x18\x6f\x3d\x99\x5f\x9d\x66\xfd\x29\x0a\x6f\x8a\xc4\x52\x5f\x3d\x24\x7b\x5b\x64\xf9\x3e\x31\x07\xf3\x3c\x5f\x62\x1a\x96\xc1\x30\x8c\x28\x2b\x92\xf3\x0f\x8e\xbd\xc9\xac\xd2\xed\xcc\x6a\xc1\xf2\x60\x8f\x6a\xfb\x25\xbb\x00\x15\x3a\x5d\x73\xd8\x06\x2b\xe1\x19\x92\xf7\xe2\x08\x49\xa7\x66\xeb\x84\x09\xcc\x36\x9f\xc1\x68\xe8\x64\x44\xef\x54\xc3\x1e\x13\xcd\x6a\x69\x7d\x3a\x7c\x40\xa0\xbb\xef\xb4\x58\xe3\x3c\x11\xe7\x0a\xa2\xb6\x52\xa4\xbb\xd9\x70\x41\xfd\x68\xdd\x42\x67\x9b\x61\xef\xee\xd6\x8e\xd1\xfc\x2b\xce\x29\x16\xd5\x36\x7b\x3b\xa1\xea\x99\x29\x80\xd8\x6d\x5a\x1e\x4e\xd1\xc3\x6e\xcf\xcb\xae\x5c\x1d\x1d\x97\x4b\x65\xa8\x6e\x1d\x2a\x2f\x33\x2a\x28\x9b\xa6\xab\x76\x6f\x58\xfa\xad\xbb\xbb\x01\xa9\x59\x76\x37\x8a\xba\x28\xd2\x80\x1c\xf6\xf2\x87\x5a\x02\x91\xea\xe8\xe5\xe6\x00\x50\xfa\xdd\x37\x65\x57\x98\xf9\xab\x7a\x07\xbf\x27\x22\xc8\x72\xfe\x84\xf5\x9c\x4d\xdc\x1f\xcc\xda\x51\x8a\xcd\x60\xca\xa7\x1d\xb8\x53\x9f\x52\xa5\x51\x50\xbe\x47\x56\x5a\x2e\x07\x7e\x3c\xb2\x4a\xcb\x2d\xee\xc9\x63\xa5\x5d\x9d\xd4\xe0\xa9\xdc\x96\xbd\x21\x17\x75\x4d\x45\x51\xd9\x96\x64\x0d\x35\xf9\xac\x92\x6f\x87\x7c\x8c\x45\x3a\x0b\xe1\x0f\x15\xb5\x07\x67\xb3\xa8\x5e\x8d\xbf\x6c\xb2\x97\x4b\xb3\x05\x8e\x78\xed\x2e\xb1\xb5\xdd\xaa\xe6\x04\x2a\x5a\x3e\xa5\x3d\xef\x47\x33\x6d\x07\x86\x8e\x13\x55\x9c\xaf\x45\xed\x65\x00\x82\x4e\x1b\xe1\x51\xe5\x96\x50\x41\x55\x92\x2c\xcc\x99\xc8\x07\xd4\x7e\x69\xc5\xdb\x65\x55\xae\x48\x3f\x8f\x2a\xdf\x46\x53\xaa\x86\xcf\x39\x0f\x41\xb1\x5d\x14\x15\xdd\x3c\xaf\x99\x42\xc7\x72\x18\x97\x2c\xa2\x0b\xd9\xeb\x69\x8f\x73\xef\x08\xd0\x3d\x3e\x3e\x6d\x03\x25\x07\x11\x4b\x73\x6d\x1a\xa6\xd3\x88\x69\xd7\x61\x14\xc9\x63\x79\x96\xdc\xc6\xad\x83\xe7\xcf\x65\x7e\x32\xb4\x55\xb3\xbc\xe5\xaa\x7b\x54\xfd\x39\x5f\xe4\x50\xa3\xd5\x68\x3a\x67\xd3\x8f\x8d\x67\x78\xb7\x51\x5e\xf2\xda\xc1\x81\x94\x60\xf7\xf8\x29\x94\x71\x2d\xbd\xe8\x1e\x7c\x79\xc0\x93\xc1\x73\x74\x91\x1a\x38\x45\x86\x5e\x74\x3a\x94\xd3\xb6\x07\x90\x7b\xc0\x53\x5b\x06\x7b\x40\x54\xbd\x5d\xc0\x34\xee\xc3\xc3\x86\x4b\x39\x07\x24\x0c\x11\x6f\xc0\x66\x65\xa2\x10\x71\x20\xf5\xf3\xba\xaa\xda\x56\xfd\xf1\x05\xd4\xea\x70\xcf\xfe\x6a\x6d\x0f\x3d\x36\xdc\x73\x8c\xeb\x8f\x75\x72\xb8\x50\x6a\xfa\xed\xc3\x49\x10\xb1\x6c\xca\x66\x65\xe4\xc4\x90\x59\x17\x30\x99\x89\xe0\x01\x2e\x25\x6f\xa9\xf6\x69\x1e\xac\xb2\x9d\xd5\x5e\xac\x83\x30\x2a\x8e\x3b\x34\x4c\xa1\x78\xd1\xea\xcf\xc8\x02\x3a\x9d\x00\xd0\x31\x08\xd9\x61\x9c\x0f\x57\x81\x0e\x86\xc0\x50\xd4\x59\xb8\x60\x71\x16\x26\xf1\x70\x95\x7f\xae\x92\x3c\x18\x2e\xce\xa6\x49\x17\x5b\xfb\xfb\x25\x96\x49\x14\xf6\xdf\x4a\xfd\x6d\xb9\x71\xbe\xc0\x47\xa3\xa6\xab\x88\x0d\x2b\xa6\x58\xda\xe3\x15\xdb\x1f\x87\x9d\x8c\x55\xbf\xa3\xa9\xea\x0b\xce\x87\x7f\xcd\xc3\xaa\x41\x2b\xbd\x5d\xc7\xb2\xd5\xcd\xb9\xb7\xe5\xdc\x44\x51\xf9\x97\x64\xc6\xb6\x1d\xaf\xd8\x62\xd3\x62\x51\x30\x6c\xba\xe8\x02\xf3\xbe\xb2\x41\xa4\xb5\x16\x7d\x50\xb7\xe0\xdb\xd1\xb2\x56\xe5\x80\xa3\xb3\x95\xea\xff\xa7\xf5\x1f\x4e\x97\xab\x41\x22\xbd\x60\x8b\x84\x07\x74\xf7\x16\xcf\xc2\xec\xe3\x60\x61\x98\x2c\xb7\xf0\x12\xee\x95\x1d\x38\x38\x5d\xfa\x6c\xf7\x09\x3b\xdf\xdb\x10\x5a\x9e\x47\xfa\xb3\xce\xe4\x56\x3e\x0f\x03\x3e\x0b\xae\x58\x34\x58\xa3\xc8\xee\xdc\xe6\xb4\x31\x9b\xe6\x1d\xc7\x51\x2b\xb9\xdb\x01\xb3\x20\x52\xa4\x2d\xd3\xe4\xd3\x9d\xb6\x5a\x66\x79\xca\x82\xc5\x31\x28\xf7\xef\xc9\x1a\x67\x98\xbd\x1f\x09\xd1\xd6\x34\xbb\x40\xad\xa2\x1f\xc3\x78\xb6\x2d\xaf\xf6\xde\xfc\xae\x81\xbb\x3f\x47\x42\xbd\x62\x01\x08\x31\xa1\x4d\x09\x06\x56\xcb\xe1\x28\xdb\xb1\xf9\xff\x58\x48\x43\x6c\x8c\x87\x92\x0f\xf2\xd5\xb1\x3f\x8a\xf0\x9c\xcf\x9f\xdc\xd5\x87\x99\x50\x07\x24\xa2\xad\x87\x43\xb3\xf0\x26\x0e\x3a\xd9\x52\x4a\x3e\xc6\x3e\x85\xf9\x4b\xe1\x46\xec\x4f\xb8\x33\x2c\x1a\x41\xd1\x2f\x41\x9c\x74\x24\xe4\x1a\xfb\xdd\xea\x85\xdc\x9b\xe6\x6e\xcf\x70\xf7\xa7\x9d\xf4\x59\x2b\x50\xbb\x33\xf3\xdb\x6f\x53\x58\xe5\xc9\x3b\xb6\x66\x5d\xba\x5d\x4f\xa1\xcd\xb3\x1d\x0e\xd7\xd8\x95\xdc\x91\xdc\x60\x3e\xad\x66\x8a\x3b\x55\x6f\xa4\xdb\xbb\x6b\x25\xc2\xde\xff\xfa\x05\x91\x4f\xa6\x99\xb9\xaf\xdf\xbf\x3c\xf0\xbe\xea\xb8\x5c\x4f\xee\xbe\x81\xac\x13\xcd\xec\x7c\xfd\xc7\x93\x5b\x29\xf8\xfa\xfd\x89\xed\x1c\x79\xbd\xb5\x7a\x72\xe9\x6d\x4b\xb3\xf9\x36\x4d\x6e\x52\x96\x65\xdd\x1c\x57\x3d\x29\x90\xf6\xdc\x54\x7f\xfa\x9d\x54\xa6\xab\x38\x6c\x0b\xb5\x73\xe0\xf4\xce\x4b\x37\xd1\xcd\xb6\xa4\x27\x3b\x6a\x75\xf3\xd5\xf4\x56\x6b\xa7\xa4\xe9\xad\xd4\xcc\x3b\x33\x94\x19\xe0\x0f\x93\x5e\xe6\x33\x16\xf6\x37\x63\x4f\xd9\x23\x4b\xd4\xf1\x8c\x2a\x7d\x9e\xcb\xc7\xc7\x8b\xcb\x8d\xba\x35\x7f\xd4\x61\x5b\x63\x8a\xa7\x98\x07\xa5\x86\x20\x1b\xd2\x8d\xa1\x88\xdf\xe5\x03\xf2\xec\x40\xa5\xea\xc8\xd2\xb6\x53\x92\xcd\x03\x92\x5b\xcf\x47\xb6\x8e\x46\xca\xb5\xb3\x81\xc1\x16\xcf\xf2\x6f\xc9\x15\xe9\xba\x6d\xcb\x03\x97\x7d\xaf\x4c\x5a\x99\x6e\x1b\xa7\x4d\xeb\x3e\xd9\xd6\x6d\x02\x55\x38\xe0\xa6\x0a\xe5\x78\xf9\xf6\xd7\xb6\x3d\x08\x47\x83\x17\xfe\x97\x55\x6a\xb1\x1f\x6f\x4a\x83\xc7\xb6\x36\xbc\x56\xad\xd9\x2b\x61\x08\xd9\xd6\x08\xea\xd4\x9a\xfc\xb4\x9c\xb3\x05\x4b\x83\xa8\x68\x3b\xcc\x27\xb7\x9c\x6b\xe4\x38\x1a\x38\xde\x47\x5a\xd9\x0d\xf7\xb8\x60\x61\xbf\x9e\x76\x5f\xbe\x50\x4c\x04\xa7\x7e\x7f\x4b\xdf\x6f\x3b\xeb\x5e\x1d\x66\x7e\xa8\x53\xcb\x16\x67\x18\x8e\x3e\xe0\xf7\x26\xf5\x1e\xb2\xff\xae\x5b\xa1\x7d\x92\xbe\x96\xb8\xa0\x0f\xb7\x3d\x19\x04\xfa\xcf\xe3\xb6\x17\x6e\x5f\xb6\x00\x65\x0b\xae\xf6\xce\xbd\x58\xbb\xda\xe1\x4f\x2b\x70\xec\x34\x63\x6f\x25\xae\xa5\xb6\x37\x54\x9a\xe6\x6c\xf6\xa2\x43\x7e\x85\x5e\x76\x1d\xc6\x61\x36\xdf\x56\x81\xa7\x40\x1e\x94\xf9\xc3\xec\x05\x5e\x2c\xda\x66\xc9\x71\x02\xd3\x59\x75\xbf\x2d\xad\x39\x9e\x57\x2e\x3a\x92\xd5\x5a\xf0\x4b\x2d\x32\x08\xda\xbf\xe4\x16\xb8\xb7\x68\x12\xe8\xa3\xf2\xe4\x63\x18\xf7\xc5\x7a\x8c\x9a\x17\x95\xf0\x6a\x0a\x1e\x71\xaa\x5f\xc4\x27\x0b\x13\x1f\x37\x2b\x8c\x71\xbf\x40\xfd\xc1\xc0\xf0\x0a\xd0\xea\xfe\x13\xce\x42\x76\xd0\x9f\xe1\x96\xfb\xd3\x9b\xad\x21\xb4\x38\xcc\x32\xba\x86\x7f\x19\x88\xe4\xa8\x57\x6d\x8c\x09\xef\x6c\x99\x6d\x3b\x98\x3f\xea\x1d\x51\xbd\x5d\x27\x69\x7b\x35\x8e\x6a\x3a\x0a\x38\x05\x3b\xab\xe2\x17\x83\xa1\xd0\xc4\x2a\x5c\xa8\x5f\x6a\x28\xc3\x85\x70\x7b\x0c\x1f\xe1\xeb\x0b\x90\x39\xe0\x04\x5f\xb1\xbe\x77\xdd\x2c\x54\x3b\xda\xc7\x5a\x27\xfb\x3a\x37\x96\x0c\x45\x9b\x35\x2e\x27\x11\x8b\x40\x8d\xb2\x03\xc2\x0d\xea\xf7\xe4\x90\x28\xab\x82\x0d\xe0\xd9\xe7\xf6\x03\x7f\xfb\xef\x4b\xd9\x25\x77\xff\xa9\x42\x0b\xc4\x66\x1c\x2a\x06\x82\x33\x58\xd8\x15\xc8\x7a\xfd\x48\x2d\x41\x6f\x6b\x9d\x57\xdb\xbc\x55\x83\x62\x59\x5f\xed\xfd\x4d\xab\xc9\x47\xf6\x07\xce\x52\x99\xb1\x69\xca\x86\xaf\x03\xdd\xca\x83\x6f\xa2\xe4\xaa\x6b\x00\xaa\x98\xe4\xce\x54\xd5\xdb\x73\xf6\x25\x51\x38\x0d\x59\x27\x2c\x58\x44\x55\x88\x0a\x77\x3c\x36\xb0\x7d\x04\x23\xc0\xbb\x0e\x92\x21\x36\x11\xb6\x1d\xc4\x43\x9b\x36\xbc\x0e\x59\x9a\x3d\x9b\x85\x33\x2d\x8c\x33\x96\xb6\xec\xe7\xff\x17\x67\xf1\x59\xca\xe2\x19\x4b\xb5\xaa\x7e\x6f\xcb\x2f\xbe\x47\x79\xb0\x81\x18\x85\xac\x3e\xb0\x78\xb5\xe0\x39\x1f\xc7\x4f\x75\xf5\x86\xf5\x12\xd8\x62\xd4\xe8\x59\xdd\x35\x6c\x7e\x8e\xe9\x73\x86\x2d\x5a\xfe\xf1\x86\x7d\x1b\x46\x91\x36\x63\x59\x9e\x26\x77\x87\x0e\xbc\xd1\xf6\x8f\x32\x74\x11\x16\xd8\x7b\x74\xb2\x2c\xfb\x5a\xd7\x80\x97\xc0\xed\xba\xdf\x19\xaf\x8a\x4e\x07\xee\x32\x9f\x26\xf1\x75\x78\xf3\x8c\xc5\xeb\x30\x4d\xe2\x1e\x26\x79\xec\x7b\xcb\xf1\x66\xff\xb4\xa4\xa3\xa5\x2e\x53\x91\xd8\xe2\xd1\x87\xbb\x25\x53\xd3\x24\xc9\x7f\x7d\x77\x56\x2b\x16\x4f\x36\xca\x93\x98\x2c\x82\xe5\xa8\x9d\xd6\x01\x87\x8b\x7a\x66\x33\x6c\xb7\x5e\x98\xae\xe2\x22\x26\xb4\xaa\x2e\xab\x0f\xcb\x20\x9f\x8f\xe5\x67\xe3\xdf\x92\xab\x7f\xa0\xe8\xb9\x19\xea\xa1\x91\x01\xb0\x68\xc6\x9b\x34\x3b\x9e\x95\x59\x0e\x5a\x6f\xac\x65\x14\x6b\xd6\xaf\x67\x06\xab\x97\x34\x53\x81\xd5\x4b\x1a\x86\x20\x5c\xaa\xf5\x52\x7e\xfe\x62\x18\x19\xbc\xbc\x3e\x8c\x64\xc6\xfe\x11\xf2\x33\x91\x8d\x9e\x50\x0e\x48\x87\x7b\xe2\xe5\xb5\x9e\xf0\x4e\xf1\xde\xae\x1a\x87\x54\x06\xba\x6b\xdc\x39\x5a\x76\x59\x3e\xc4\x7e\xb7\xcd\x4f\x67\x66\x86\x2a\x47\xc9\x4d\x1b\xa5\xd7\x99\x06\x0b\xad\xea\xe2\x3a\x6b\xcf\xec\x75\x56\x2f\x7d\xf6\x7f\xe0\x2b\x0e\xb4\x07\x6f\x79\x1e\xc6\x37\xc3\x23\x45\x61\x88\x1b\x5c\xea\x8f\xe3\x24\xd7\xae\x93\x15\xe8\xa8\xc5\x8b\xfe\x0f\x3f\xa9\x2a\x84\xce\x5d\xb2\x16\xf6\x53\xbf\xe7\x7a\xf8\xce\xeb\x61\x13\xf3\xad\x48\x51\x5c\x51\xfc\xf0\x53\x18\x03\xc9\xce\xe7\xda\xad\xb8\x6d\xbe\xdb\x43\x9c\xe4\xe1\xf5\x5d\x71\x13\x52\xbb\x14\x63\x50\x59\xf6\xec\x9f\x2b\x96\xde\x69\x98\xbe\xb3\xa7\x8f\xab\x94\x05\xb3\x69\xba\x5a\x5c\x69\xf8\x60\xf0\x12\x84\x32\xdf\x75\xf6\x9f\x7c\xd7\xdf\x58\xbe\xeb\xa8\x4e\xf8\x0b\xba\x5f\x0a\x9d\xea\x03\x6a\xa9\x7f\x17\xcb\x68\xdc\x64\x3d\xf9\xc9\x09\xe3\x41\xfe\x62\x9d\x09\x5b\x00\xfe\x22\x4b\x96\x5e\x27\xe9\x62\x94\x2b\xca\x46\xad\x96\x4a\xd6\x93\xb2\x08\x0d\xd0\xff\x5c\xfe\xb8\x0a\xa3\x19\x4b\x15\xf4\x4d\x94\x49\x8c\xc6\xac\x32\x4d\x6e\x49\xf2\x53\x26\x77\xb8\x78\x88\x30\x5a\x4c\xfe\x2b\xf2\x98\x20\xbd\xc9\xc6\x17\xc8\x70\x48\xc8\xb3\xc1\xe5\x97\x9b\xcb\xe2\x30\x7e\x36\xc2\x43\xa3\xbf\x25\x57\x2f\x11\x3a\x65\x54\xbd\x4e\x56\x14\x45\x2d\xba\x63\xad\xab\x71\xd1\x78\xaf\x34\xba\x2f\x8c\xa7\x05\xe7\xa9\x01\x5e\xa4\x5a\x52\xd4\x81\x7e\xf2\xcb\x8d\xda\x7c\x53\x56\xc4\x7c\x16\xef\xa8\xfb\x23\xea\x74\x82\x5d\x6e\x2e\x95\x0d\xe6\x3d\x89\x86\x2c\x0f\xff\xc8\x56\x4b\x96\x8a\x64\x89\xa8\xe0\x07\xc5\xea\xee\xc9\x50\xd5\xcc\x5a\xc8\x33\x5c\x35\x2b\x55\x75\x80\xe0\x11\x9e\x26\x0b\x55\x9a\x52\x5d\x29\xce\x8e\xe0\x6a\xe0\x0a\x29\x7e\xe5\x29\xa2\x5a\x57\xc2\xa8\x05\xa5\x1a\x74\x47\x72\x3a\xb7\x47\xc2\xa1\xad\x54\xf5\x99\x58\x02\x15\x6d\xad\xd3\xac\x63\x49\x53\x79\xdf\xa6\x7a\xc8\x58\xbe\x5a\xbe\x4c\xe2\x3c\x85\x31\xa5\xad\xcd\x14\x5e\x8f\x72\xbe\x1f\xe2\x49\x0f\x9a\x45\xc6\x2e\x71\x6d\x37\xec\x34\xd2\x7b\x37\xb8\xb2\x79\x32\x50\xc2\x67\x30\x56\xe3\x32\x9b\xd8\xce\x95\x21\xb2\x73\x0d\xc2\x8c\x04\x00\x27\xe6\x17\xf6\x29\x17\x47\x55\x5e\x44\xd1\xa8\x65\x3c\xca\xfb\x6e\xc5\xd8\x3e\x4f\x6d\x9b\xd2\xef\x38\x4d\x79\x92\x16\x16\xf0\x30\xc6\xf7\x08\xaf\xe4\x48\x19\xa4\x63\xc5\x34\x3d\x6f\x91\x8b\xb8\x41\x25\xfa\x77\x30\xe1\x63\x65\x6d\xd3\x2b\x10\x8b\xcb\xcd\xe5\xf8\xe2\xb2\xb3\xb9\x6b\xc9\xde\xe0\x0d\x45\xc2\x3c\xac\xd5\xba\x08\xb9\x41\x2b\x94\x27\xe1\xf5\x28\x56\x1e\x0a\xab\x18\x27\x34\x78\x1b\xb7\xdc\x31\xeb\x62\xe5\xa7\x01\xaf\x9d\x22\x03\xe6\x58\x11\x5c\xeb\x43\x90\x7d\x94\xaa\xac\x26\xaa\x2c\xc5\x49\x2e\xa1\x44\x24\x5d\x27\xa9\x54\xbd\x57\x92\x95\xa2\x9a\x78\x67\x38\x03\xe2\xfa\x04\x36\xfa\x8c\x4d\x64\x4b\xb7\x04\xef\x98\x96\x6b\x8d\x8f\x63\xb9\x8c\xc2\xea\x72\x68\x68\x2a\x44\x96\xb4\x5c\xc6\xc1\xa6\xb3\xda\x0e\xa5\x0a\x30\x03\xcf\x4a\xa1\xb2\x57\xf0\xda\xab\x83\xaf\xaf\x4e\x96\xcb\xb4\xc8\x36\x8f\x51\xbc\xf2\x0e\xb0\x1a\xf8\x19\x56\x43\x77\x0e\x6f\x9b\x4c\xda\x90\x28\xdb\x78\x28\x25\xc0\x66\x0e\xdf\x5d\x32\x60\xc9\x64\x5a\x62\x9c\x20\x98\x4f\xbf\x96\x28\x27\x5e\x2c\x90\x7f\x71\xa9\x06\x93\xa7\xba\x9a\x4e\x9e\x52\x35\x29\x26\x26\x4f\xef\x4a\x11\x35\x53\xa3\x09\xbb\x68\x01\x73\x39\x52\xbe\x7f\x3a\x0a\x26\xa3\x6c\x12\xe1\x25\xf0\x23\x45\x21\xb3\x24\x66\xca\xc9\xc9\x28\xc6\xec\xc5\xa3\x8c\xe0\xdc\x2b\xea\xd3\xfc\xf1\x31\x16\xc2\xec\xd3\xc9\x24\x57\xbe\x87\x57\x2a\xdf\x8b\x0c\x94\xa1\xf2\x90\x02\x08\xc9\x24\xdc\x5c\x87\x71\x10\x45\x77\x0f\x00\x40\xf0\xf8\xc8\x33\x10\x44\x84\x83\xfc\xf8\x58\x7c\x1b\x29\x65\xcd\xf0\x7a\x94\x2a\x5c\xf2\x4c\x36\x9b\x52\x38\x46\x3c\x7e\x96\x74\x8a\xa6\x20\x9e\xf5\xe8\xeb\x8b\xa8\x41\x2f\x99\xee\xa7\x88\x3c\x21\xa5\x9a\x4e\x18\x01\x95\x4c\x4d\x26\x3c\x99\xe2\xaf\xef\x5e\xbf\x4c\x16\xcb\x24\x66\x71\x3e\xe2\x7d\x4f\x26\x93\xf4\xb9\xfc\x4c\x1e\xa7\x8a\x9a\xed\x47\x3f\x89\x88\x61\x89\x26\x72\x49\xf7\x84\xf7\xa6\xf8\x99\x34\x5c\x90\xcf\x64\xe5\xb9\x2c\x8f\xe1\x6f\x59\xa1\x74\x09\x66\x95\x43\xb4\x7e\xaa\x17\x96\xe0\x05\x77\x2f\x8d\x22\x45\xed\xf7\xc8\xc9\xca\x65\x8f\xdc\x26\x08\xf5\x88\xa9\x14\x4f\xf3\x17\xd9\xce\xc8\xeb\xec\x55\x98\xd6\x5f\x32\x0f\xb2\xf9\x88\x6b\xad\x09\xf7\x8a\x66\xea\x2c\x4c\xd9\x34\x4f\xd2\xbb\x9f\xe2\x1c\x03\x25\x33\x12\x65\xa3\xa8\x26\xdd\xd5\x5c\x0a\x81\x82\x37\xad\x86\x11\x4f\x21\x35\x6e\xf5\x55\x14\xe9\xdc\x1d\x95\x6e\x36\xfd\xdd\x88\xc3\xbc\xcd\xd6\x1b\x3c\x70\x3c\x20\x2b\x15\x9c\xaf\x94\x52\xc4\xa6\xf9\x81\x9e\x9c\xf0\x89\x7d\x3a\xa9\x0a\x2f\xe8\xe5\xf3\xfa\x8f\xf1\xc3\x06\x98\x25\x5f\x1c\xc1\x24\xc7\x19\x55\xd1\x85\xd0\x1a\xbd\x9a\x4c\x72\xc2\x87\x81\xe1\x53\x30\x8e\x27\x3b\x25\x26\x15\x05\xb5\xb7\xa5\x7a\x2e\x70\x1c\xf3\x91\x05\x5d\x1c\xa7\x05\xaa\x12\x8e\xa9\x6c\xd3\x92\x9d\x0e\xb7\x1c\x70\x6a\x8d\x56\x93\x7f\x89\x00\xd5\x51\x44\x6a\xfe\xf2\x6d\xb8\x6b\xb8\xca\xfb\x17\xfd\x36\x2d\x64\x7f\x19\xa0\x26\x53\xf4\xd8\xc1\x85\x3f\x8b\xbb\x48\x9f\xf5\xb3\xb3\xaf\x60\x74\xad\x8e\xb5\xa1\xcd\x77\x48\x00\x15\xc9\xbb\x86\x4a\xb7\xc9\xae\x68\xc6\x1a\x2a\x44\x4b\xcf\x5b\x34\xf4\x8c\x8b\x1b\xad\x1e\x52\x76\x9d\xb2\x6c\xfe\x06\x27\xf4\xa9\xbe\xd9\x4b\x1f\xa8\x0b\x69\xc0\x9b\x40\xfb\xc7\x7c\xc2\x6f\x06\x64\xd8\x7a\xca\x67\xae\x1b\x03\xa0\x3c\x21\xf7\x7b\x16\x5d\x7f\x80\x9f\x2f\xe2\xd9\x5b\xe1\x3a\x93\x95\xd2\xb6\x50\x10\x95\x56\xe2\xbd\x8a\x8e\xd6\xa2\xa8\x10\x71\x84\x0f\xad\xb4\x27\xd6\x8b\xc4\x0c\xbd\xc3\x1a\xb2\xa2\xc6\x1d\x12\x1b\x73\xa9\x23\x6f\x34\xcb\xe6\xc9\x2a\x9a\xbd\x9f\x27\xb7\xef\x8a\xbe\xcb\xdc\xf0\x82\x7f\x81\x84\x41\x6a\x18\x16\x50\x20\xdd\x19\x84\x40\x54\x92\x15\xa4\x44\xf5\x6a\x01\xc6\xd6\x14\x70\x3e\x3e\xa6\x62\xf4\xa3\xe0\xe4\x24\x78\x3a\x99\x24\x8f\x8f\x4f\x83\x93\x93\xe4\xe9\x64\x92\x82\xac\x91\x93\x72\xf0\x30\x39\x98\x63\x1a\xe3\x00\x56\x71\x94\x04\x33\x54\xd8\x44\xe2\xe9\xfe\x77\xa8\xc1\xe3\x63\xaa\xa8\xf1\xa6\x6b\x66\xa8\x5b\x0b\x38\xc0\xdb\x88\x77\x4d\xf4\xcb\x8b\x9c\x19\xbb\x11\x70\x72\xc2\xa7\x35\x5d\xc5\x5c\x8e\xaa\x11\x00\xb1\xde\x44\x55\xb1\xe0\xc4\xe4\x6e\x57\x6d\x83\x29\x0f\xfd\x7c\x98\x85\xb3\x0f\x69\x10\x67\x9d\xb4\xf1\x15\x78\x7c\x4f\x92\x30\xfb\xc0\xb2\x1c\x50\x2e\x12\x2d\x67\x53\x18\xe2\x87\x64\xa4\xab\xba\xb2\x51\x6f\xc3\x28\xda\xd2\xd5\xde\xba\x8d\xd8\x36\xf8\xab\x81\xea\x4a\xc0\x4a\xae\xa5\x9c\xbc\xb8\x4a\xd2\x1c\xa5\x34\x71\x43\xd8\xde\x6f\x60\x4a\x4b\x69\xda\xa6\x14\x94\x2e\x8a\x5e\xe9\xbf\x6e\x6f\xbe\x4e\xd2\xab\x70\x36\x63\x71\x11\xe6\x37\xa0\x24\x94\xf5\xbe\x62\xcc\x47\x0f\x6d\xcd\xeb\x76\xcd\x2d\x94\x72\x3b\x91\xad\xdb\x00\x4a\x63\xe3\xcb\x02\x47\x42\xd5\x17\x38\x13\x26\xc7\xcb\xcd\x65\x3f\x11\xec\x8b\x07\xe5\x5b\x21\x62\xc1\x0c\x43\x36\x06\x0d\x7b\x1d\x71\x0e\x33\x53\x8c\x6b\x71\x3e\xa0\xd0\xc3\xee\x16\xb9\x44\x54\x74\xf8\xf4\xd7\xc0\x22\xb9\x61\xcb\x8b\x3b\xb6\xbc\xbd\x05\x13\x31\xfa\x67\x85\xf3\x6a\x5f\xb5\xf1\xcb\x1d\x1d\x5f\x33\xce\xa4\x67\x45\x05\x7b\xae\xa8\xcf\x37\xce\x0e\x4b\xcd\xc3\x56\xf5\x21\x6b\x54\xc7\xa4\x5c\xac\xd2\x62\x9e\x58\x65\x9d\x29\x2c\x4f\xc1\x75\xce\xd2\x2e\xeb\xee\xc8\x6a\x65\xfa\x3c\x59\x79\x0e\xac\x00\xef\x2e\xd8\x69\x5b\x6e\xf9\x46\xc7\x7d\xb2\x1f\x94\xec\xc7\x53\x04\x33\xb8\x8e\x82\x9b\x17\xb5\x9c\x51\xf9\xc9\x49\x5e\xcb\x05\xb5\x17\x77\x18\x16\x74\x04\xcf\xa9\xcb\xf8\xac\xca\x6c\x84\xd4\x78\x0c\x04\x1c\x6f\xf9\xc0\x77\xd6\x9e\xcd\x5a\xbf\x9b\xa0\x8e\x9f\x52\x35\x9b\x27\xb7\xf8\xfb\x17\xd8\x18\x82\x7a\x37\x0a\x7e\xc5\x08\x94\xc1\xe2\xf7\x79\xb2\x5c\xb2\x59\xab\x7c\xc3\x23\x03\xb7\xf9\x72\x46\x75\x67\xce\x1b\x1e\xe2\xd5\xef\xcf\x51\xeb\x35\x5f\xd4\x7d\xc5\x55\xfd\xfa\x51\xbc\x5a\xd3\xba\x43\x20\x6e\x39\x04\x04\x95\x6a\x37\x6f\x54\xad\x62\xca\x3a\x17\x7a\xed\xe9\x42\x50\xbb\x60\xef\x11\x35\xd5\x22\x6c\x1d\x37\xc2\xf1\x29\xd7\x57\xe5\x84\x7b\x78\xf8\x4a\xd9\x6a\x9b\x73\xaf\xcf\xc1\xf3\x22\x8a\x5a\x93\x79\xa8\x5f\x67\x1b\x6b\xb9\x4e\x19\xcb\xf2\xbb\x88\xfd\x6b\x94\x5b\x54\x11\x7f\x2e\x60\x18\x14\x11\xfa\x79\x7d\xfd\x8e\xa9\x46\x3f\xa5\xea\x4b\x58\x9c\xad\x52\x76\x1a\xfd\x96\x75\x88\x67\x1f\xe3\x47\x25\xa7\xde\xea\x2c\x88\x6f\x56\xc1\x0d\x1b\xc9\xf3\x20\x9e\x45\xec\x2a\x48\x31\xc4\xba\xbf\x4a\xbe\x88\x78\x85\x4b\xe5\x10\x0d\xfa\x5f\xe8\x44\x4b\x19\x37\xa1\x74\x84\xeb\xbc\x94\xbb\x3f\x24\x22\xbe\xe8\x80\x11\xf1\x78\xa4\x3f\x93\x7c\xfb\xf9\x76\x82\x5e\xf9\x76\xc8\x99\x0e\x92\x6d\xc3\x76\xd0\x70\xdd\xf7\x58\x10\x76\xdb\x02\xba\xd7\xd8\x0a\x91\xb8\xf4\xfe\x67\x1d\x4b\x50\xe9\xd3\xea\xa8\xda\x65\xa3\xb2\xdb\x1e\x3d\xf7\x97\xda\x9d\x44\xb5\x98\x82\x7e\x95\xb7\x2f\xa2\xbe\x94\xa3\x79\xa4\x1a\x17\x7f\x70\xfa\xb6\xc9\xd3\x95\x0e\x2a\xf0\x84\xb3\xd9\x59\xda\xa2\x70\xd4\xd6\xd9\xb6\x91\x49\x98\xa2\x7f\x2b\x2e\x85\x93\xf4\x77\x3e\x86\x83\x18\x15\x86\x37\x1c\x9f\x4f\xe1\x04\xe0\x6a\xf8\x6c\xe5\x67\x67\x7c\xd5\x57\x45\xfe\x76\x85\x66\xab\x31\xb1\x4e\x41\xe2\x2a\xb6\x46\xcd\x58\x8a\x29\x53\x59\x8f\x2a\xf1\x50\x44\x75\x16\xca\x4a\x19\x32\xb3\xe9\x1a\x9d\xd4\x9a\x0f\x7b\x68\xbf\x0b\x93\x48\xd7\x70\x56\x6e\x76\x82\x09\xe2\xd3\x09\x23\xc5\xbb\xd5\x64\xd2\xbe\x6e\x2c\x6d\x50\x84\x4b\xe5\x49\xff\xe6\x2f\x2e\x3e\xc3\x19\x4f\x9a\x14\x60\x48\x07\xea\xf2\xf1\xae\xe6\x53\xa8\x64\x8d\xf0\xd2\x8e\x61\x72\x28\x1c\xa7\xab\x33\x1e\xbc\x7e\x9f\x35\x62\x41\xff\x0c\xa4\x64\x9b\x7f\xa2\xf2\x00\x16\x11\x5d\xf2\x56\xbf\x44\x97\x13\x35\xa6\x62\x97\xca\xf5\xf9\x7a\xd4\xa6\x57\x4d\xca\x8f\xa6\x26\x0d\xab\x47\x7b\x2d\x9a\x5a\x5c\xf5\x37\xe7\x83\xea\x9d\xe3\x66\xe2\xf3\x9e\xcb\x40\xdb\xf3\x9c\xd7\x09\xd7\x98\xa9\xd5\x88\xc7\x78\x20\x61\x87\xab\xa4\x1e\xee\x85\xf4\xe7\x49\x4c\xa0\xe2\x55\x30\xfd\x58\x5d\x7f\x35\x52\xd4\x98\x88\x1b\x12\x47\xa5\xda\x1d\x66\x3f\xcd\xc2\xbc\xc8\xf6\x7e\x40\xf4\x4b\x6d\x7a\xaa\x30\xf6\x7f\xf7\x3d\x3d\x40\x85\x5b\x77\x80\xf3\x87\xd5\xa9\x80\xed\x24\xf8\x20\x53\xcb\xab\xfa\x64\x54\x1b\xbf\xf6\x78\xd0\xf6\x72\x5e\xc0\x53\x6b\x57\x3c\xeb\xb3\xba\xbc\x6a\xde\x79\xde\x4f\x2e\x9a\x23\x6f\xf4\x39\xdc\xa8\x76\x5e\x62\x3f\x02\xd3\x18\x75\x6b\x34\x9f\x41\x70\xea\xfc\xf1\xdf\x7d\x45\xf7\x89\x0c\xc7\xe2\x52\x3f\xd5\xf1\x5c\x2d\xba\xda\xe3\x1e\x2e\xf5\x53\xf3\x06\xfd\xfe\x15\xd4\x3c\x40\xb3\xdf\x22\xaa\x43\xf3\x19\x8b\xe6\xdf\x40\x3f\xea\x8d\xd3\xcf\xe4\x62\x7d\xf5\xda\x77\xcb\xb4\x22\x55\xe9\x7b\x91\x83\xa4\xac\xd4\x48\x4d\x22\x2b\xcd\x6c\x3a\xbb\xa4\x17\xb5\x36\xd7\xe3\x5d\x8b\xa8\x7b\x79\x79\xf9\xf2\xce\x7d\xe8\xb2\x22\x6e\x1a\xc6\xfe\xce\xda\x17\x8f\xd7\x3b\x0d\xb3\xb2\xa3\x79\x90\xbd\x9c\x87\xd1\x2c\x65\x71\xb3\x83\x17\x51\x54\x29\x90\x9b\x6d\xb1\xec\x35\x25\xf2\x45\x14\x6d\xd3\x31\x05\x26\x07\x3a\x29\x33\xb2\xf5\x9b\xc1\xf7\x96\xef\x3e\x77\xc7\xb5\x51\x36\xdc\xb8\x73\xd1\xfb\x67\x18\xe0\x8b\xaf\xef\x8b\x34\x74\x3d\x92\x70\x0f\xd9\x91\x7b\x41\xfd\x1c\x02\x30\x94\x31\xec\xe8\xc7\xad\xf6\x3b\x50\xb5\x25\x84\xf6\xd8\xb9\xc2\xb6\x53\x93\x2f\x0b\x73\xdf\x71\x18\xa6\x12\xa7\x44\x33\x3c\x37\xf2\xc5\xc7\x7f\x3e\x37\x54\xbe\xa9\x04\xc4\x42\x09\x28\x03\xd5\x6b\x6e\xcd\xb8\x74\x6b\xf6\xde\x3e\xd2\xe5\xb1\x9c\x65\xc7\xad\x13\x3f\x83\xa1\xf6\x65\x0c\x6b\x7f\xa8\x3d\x22\xb2\x19\x70\x7f\x9d\xa4\xd2\x6f\xc9\x55\x37\xbe\x5e\x60\xb6\x16\x92\x2f\x2b\xca\x13\x1e\xde\x1b\xd4\x83\xee\x83\x32\x1c\xb8\x48\x46\xd0\x56\x6f\x07\x5c\xb9\x43\x26\x87\xb4\x6b\xe5\xdc\xc6\x9b\xea\x7a\x50\x5e\x5b\x22\x4f\xba\x1c\x0b\xf4\xac\x8a\x36\xff\x35\xb9\x2a\x69\x73\xbc\x0f\xcb\x8a\xbf\x80\x65\xc5\xe8\x1e\x51\x8b\x17\xef\xe0\x00\xbf\x0f\x89\xdf\x49\x68\xff\x9a\x5c\xed\x41\x60\xf7\xb8\x52\xa0\x4d\x35\x4b\x59\xff\x4f\x21\x39\x7d\xb9\xa0\x5d\xe9\x3e\xc7\x92\xb2\x9b\xde\xd6\x3e\x8d\x6e\xf3\xd5\x14\xb3\xcf\xd5\xc2\xd2\xd5\xbf\xc8\xd6\x33\x0d\x06\x0d\xd1\xc7\x8e\xf2\x7a\x07\x63\xac\x73\x39\x18\xf4\x96\xe0\x2e\x1e\x94\x17\xc4\xf0\x2f\x4e\x72\x4c\x6d\x20\xe1\x2a\x12\x62\x66\xaf\xd7\x72\x1f\x87\x13\xcf\x42\xd3\xb0\x3a\x3f\x94\xec\x71\xbc\xcb\xf2\x8d\x79\x08\xf6\x09\xe6\x45\x48\xc8\x8c\x45\xac\x7c\xd9\x01\x5e\xd5\xda\x09\xf9\x6f\xc8\x08\xd8\xe1\xae\x6f\x83\x1b\x56\x67\x94\x4f\xd8\xe7\x1f\x4b\x6b\xe7\xcd\xda\x86\x9e\x32\x61\xc3\x9f\xc9\xef\x7c\xe4\x1d\xf7\xbe\xc0\x91\xd8\x75\x02\x67\xff\xa6\x71\x95\x62\xf4\xcf\x8a\x54\x1e\x3b\x17\x0e\xcf\xb5\x86\x6b\x53\xc3\x80\x90\x30\xbe\xf9\x3d\x4f\x33\x54\x0e\xa8\x5d\xb1\xc6\xa5\x6f\x30\xcd\x9e\x71\xa4\xf5\x8f\xae\x51\xaf\x7e\x92\x63\xef\xe3\x1b\x5f\xf7\x8a\x8b\x20\xcf\xd3\x6c\xfc\x50\xbb\x72\x5b\x9e\x4d\xe5\xf2\x2e\x64\x99\x5f\x24\x9c\xb1\xf4\x1a\x6f\x56\x91\xe1\x53\xde\xa8\x71\x92\x2e\xda\xae\xd1\xe2\x94\x63\x5e\xd7\x0b\xca\xd5\x33\xba\x78\x28\xae\xd4\x04\x3a\xb5\xb9\xac\xe4\x7b\x71\xfd\xc2\x44\x7e\xc7\xfe\xb9\x62\x59\xce\x66\xd2\x0b\x40\xa9\x74\x1b\x64\xb5\x43\xba\x61\x2c\x65\x2c\x97\x92\x6b\x29\x28\xae\xb3\xe3\xf5\xb2\x9a\x5e\x90\x93\xd7\xaf\x26\x39\x01\xd6\xa1\xe6\xe4\x55\x39\xac\x49\x4e\x3e\x04\x37\xd9\xc9\x09\xff\x4b\x66\x53\x35\x27\x3c\x70\xbf\x5d\x24\x4e\x3b\xe4\xe4\xdd\x72\x0a\xc3\x6d\x97\xc3\x1c\xd7\x63\x32\x71\xe4\x35\x94\xbc\x63\xd9\x32\x89\xb3\x26\x6a\x60\x16\x8b\xe3\x97\x41\xe7\x34\x98\x9a\xd6\x12\x86\x04\x3f\x98\xcf\x03\xcd\x1c\xeb\x8a\x9a\x4c\xcc\xef\x93\xbf\x04\xdf\x27\xdf\x7d\xa7\xa4\x17\x89\x66\x5e\xd6\xce\x8a\x25\x97\x4f\xb6\x87\xe5\x5e\xe0\x7b\xc9\x1b\x5c\x68\xd9\xe3\xe3\xc5\x65\x99\x47\x22\x55\xea\x10\xbf\x0f\xe3\x9b\x68\x08\x6e\x35\xa8\x20\x4f\xbb\x90\x27\x35\xc8\xd3\x1f\xac\xe7\xa9\x66\x01\xe4\xd9\xc4\xfa\x3e\xfb\x4b\xfa\x7d\xf6\xdd\x77\x4a\x72\x91\x69\x56\x1d\xf2\x6c\x4f\xc8\x0b\xb5\x93\x67\x9e\x0e\x14\x35\xb8\xac\xce\x25\xee\x43\x87\x1a\xbb\x6f\x57\xae\x9a\xa1\xad\xfa\xfb\x1d\x92\xde\xce\x70\xc4\x56\x6d\xa4\xe2\x18\xa3\xae\x2d\x92\x7c\xf3\x93\xf1\xfc\xd1\x7b\x7e\x4a\x7e\x78\xa7\x16\x30\x54\x95\x1f\x1f\x1f\x36\x55\xd4\x51\xf5\xbc\x38\x80\xfc\x91\xdd\x65\xa3\x58\x69\xe6\xc9\xaa\x8c\x00\x17\xec\x12\x7a\x50\xd3\xc9\x03\x42\xc6\xca\xce\xea\xed\x03\xbc\x72\xf4\xa7\x60\x3a\xef\x0b\x31\x48\x2f\xd8\xe5\x24\xb8\x60\x97\x1b\x45\x4d\xc9\xbb\x22\xe9\xaa\x00\xb3\xfc\xcd\xb7\x62\xed\xc1\x05\xbb\x54\xd3\x8d\xa2\xe6\xe4\xaf\xc9\x95\xd0\x08\x26\xf1\x2a\x8a\x9e\x4e\xea\x8f\x9e\xd7\x7f\x08\x34\x03\xb3\xcd\x55\x19\xf4\x73\x51\x20\x43\x3f\x6f\xa3\x20\x8c\xff\x9a\x5c\xbd\x9e\xf1\x1e\x5e\xbf\x52\x39\x55\x41\x81\x74\x52\xfb\xfe\xf8\xd8\xe9\xa8\x26\xb8\xee\x19\xd6\x51\x33\x0d\xa9\xe2\x7d\x9d\xd0\x8e\x1e\x38\x2e\x01\xd4\x37\xe5\xb5\xd7\x78\xcb\xcd\xa4\xfe\xe4\x7f\x51\xe6\x34\xaa\x4c\xde\x04\xf9\x9c\x5c\x47\x49\x92\x8e\xea\xcf\x9f\x51\xe6\x40\x67\x2f\xcb\x74\x91\x45\x67\xd5\x13\xd1\x59\xf5\xa0\xd9\x59\xf5\xbc\xe8\xec\x5d\x79\x6f\xe4\x4f\x98\x33\x77\x32\xaa\x3f\xfb\x90\x06\xd3\x8f\x2c\x85\x45\xa3\x10\x5e\x41\xcd\xc9\xeb\xea\x0a\x70\xa8\xfe\x4a\xdc\x72\x52\x2a\x1e\xbc\xba\xb8\xbf\x1c\x26\xaa\x7b\x63\x21\x30\x80\xee\xe3\xe7\x7d\x0f\x79\x58\x7b\x4e\x7e\x61\x9f\xf2\x56\x0f\xcd\x47\xcf\xdb\x0f\x8a\x96\x3f\x27\x51\x94\xdc\xfe\xba\xac\x4c\xbe\xd8\x9a\x3f\x5e\xe1\xe3\xd7\xaf\x9e\xb7\x1f\x14\xad\xdf\x16\xa9\x4f\xea\x2f\xcf\x26\xbd\x05\x48\xc1\xeb\x6d\xea\xe9\x52\x8a\x41\x77\x4b\xf8\x91\x7b\x35\x27\x7f\x0f\xb2\xb2\xc2\xe4\xe9\xd3\xc1\x8e\xd4\x9c\x88\x9f\x6c\x56\xdf\x82\xdd\x87\xb0\x0f\xbb\x4f\xc9\xfb\x79\x90\xb2\x59\x97\x45\xee\x3e\xc1\x35\x28\x2d\x75\x53\x22\x4e\x93\xe5\x5d\x33\x83\x6b\xbd\xf1\x6f\x19\xca\x58\xbc\x34\x8c\xaf\x23\x3c\xc6\xdc\x55\x44\x52\xb6\x48\xd6\x4c\x4b\x51\x57\x1c\xb0\x61\x97\xc9\x20\x92\xff\xa4\x03\xfb\xc6\xd2\x81\x65\x3d\xa9\x92\x45\x82\xec\xff\x61\x77\x63\xf9\xf5\x2b\x59\xfd\xc8\xee\x7e\x4e\xd2\x32\x48\xa5\xff\x2c\xe8\x34\x58\x30\x58\x3a\x78\x44\x77\x19\xe6\x01\xff\xb1\x11\xad\xeb\x46\xaa\x5e\x3e\x5a\x25\x58\x40\xef\x40\x16\xc6\x37\xab\x28\x48\xc3\x7b\xa6\x8c\x98\x32\xd4\xbd\x0a\x00\x16\x16\x3a\x59\x18\xb4\xf1\x76\xf6\xe7\xd8\xcd\x32\x5a\xa5\x58\x55\x19\xc5\xca\x38\xde\xa8\xcb\x55\x36\x7f\x1b\xdc\x61\xac\x5e\x2f\x3b\xc7\x73\x41\x13\x14\xe7\xc7\x17\x97\x6a\x18\x4f\xa3\xd5\x8c\xcd\xc6\x17\x97\x9b\x27\x75\x36\x9c\xf7\xb0\xe1\x94\xf7\x02\x38\x45\x3d\x0c\xb8\xcc\xcf\x69\xb2\x10\x2f\xfc\x1f\x76\x37\x4a\x15\x35\x9a\x30\x52\xed\xb4\x9f\x93\x74\x94\x29\x6a\x38\x61\x95\xf1\x31\x53\x9e\x70\x8e\xb8\x08\x3e\x32\xbe\xe8\xf3\x8b\xf4\xb2\x9f\xf1\xe3\x16\x51\xe3\x49\x44\x4a\x41\x65\x14\xaa\x4c\xc5\x2c\x17\x31\x81\x81\xa8\xab\x49\x4c\x8a\x91\x7c\x3f\x0a\xf0\xa1\xc8\x47\xa2\xa8\x2b\x3c\x32\x3c\x09\xca\x1a\x0a\x16\x15\xd2\xa4\x9a\x8c\x56\x0a\x4f\xa2\xc8\x78\x9b\xa0\x2e\xf9\xfe\xcc\x15\xdf\x5e\xd1\xb7\x8e\xd4\xbd\x32\x01\x70\xd3\xcb\x2a\x8a\xde\x83\x52\x0d\x5d\x54\x88\x54\xf9\x58\x14\x35\xde\xa8\x65\x95\x46\x88\xa8\x2a\x52\x17\x25\xdd\x5c\x11\x66\x6f\xae\x08\xb3\x9e\x2b\xc2\xbc\xec\x9a\x06\x9e\xea\x1b\x35\x9b\xa0\xa9\x15\xa8\xa5\x82\xc2\x17\xde\xeb\x32\x1c\xde\x09\x82\x0a\x53\xab\xdc\xcc\x4b\xc6\x3e\xbe\x88\x22\x90\xfb\x0e\x6a\x5a\xd4\x4e\x7a\xa6\xbd\xc4\x6c\x86\x12\xfe\x5e\x3d\x4e\x26\x93\x86\x98\x25\x00\x8c\x9f\x83\xbe\x06\x34\x5c\xd0\xc0\x58\x69\xdd\x0f\x83\x9c\xa7\x30\x9f\x74\x97\x74\x0f\x39\xe8\xd9\xc1\x64\x16\x64\x73\x96\xe2\xa6\x6d\xf1\xb1\xde\x1b\x44\xea\xac\xa8\x8a\x4f\xfa\x66\xf5\x0e\xa1\x59\x08\xdb\xfb\x2f\x98\x7d\x1d\xcf\x50\x14\x12\xf1\x56\x85\xbf\xa5\x4c\x70\xa7\x21\x2a\x13\xb5\x07\xe5\xe5\x2c\xfb\x68\x13\x39\x6a\x13\xcd\x24\x09\x41\x96\x85\x37\xf1\xa8\xd0\x2d\x70\x56\xbf\x0d\x39\x1d\xff\xfe\x9c\xa4\xdc\xc3\xbf\xaf\xe0\xde\x93\xd5\x4e\x18\x12\xd8\xa7\x3c\x0d\xa6\x79\x9d\xe7\xb4\xfd\x2f\x35\xc2\xd4\xb9\x22\x81\x55\x44\x47\xa9\xbc\xab\x62\x98\x6a\x20\xce\x73\xf1\x77\xbc\x9e\x61\x7f\xfd\x98\xae\xfb\x1b\x1f\xa2\x30\xfe\x88\x07\x3f\x22\x90\xf5\xc6\xf2\xb3\x92\xe1\xc5\xaa\x5c\x5b\xe3\x8d\x24\x2f\x95\x9f\x37\x50\x36\x9b\x4d\x47\x22\x3c\x54\x24\xc4\xe3\xa8\x5a\x96\x83\xe8\x7f\x73\xf7\xcd\x6e\xa7\xa1\xbd\x22\xf8\xbc\xae\xeb\x54\xc3\xff\x3f\xe8\xfa\x18\xff\xff\x7f\x91\xe9\x93\x9f\x93\x74\xca\x5e\xb1\x60\x16\x85\x31\xc3\x4c\x18\x8d\x27\xa8\xd1\x2a\x5f\x2a\x57\x57\x61\x34\xdf\x2c\x02\xb7\xdb\x41\x76\x59\x34\x7e\x6e\xdc\xa1\xd5\xb4\x6a\x34\xcb\xf6\xa7\x45\xf5\x5e\xbe\x75\x7a\xf4\x87\xb7\x1b\xec\x5a\xdf\xdd\xe4\x9c\xf5\x25\x5b\xdd\xc1\xf5\x8d\xae\xee\xc3\xb6\xeb\x6f\xc9\x95\xb6\x8c\x82\x6f\x77\xb3\xfe\x7e\xdb\x71\xeb\xfe\x2b\x76\xa9\xd8\x86\xdc\xb4\x21\xcc\x29\xa3\xc6\x4e\x7b\x11\xc7\x49\x2e\x22\x66\x9a\x66\x96\xf2\xc6\x28\x71\x09\x23\x68\x67\x7b\x64\x5f\x38\x7c\x42\x7b\x2f\xb2\xfd\x03\xcc\xe9\x00\x7d\xdb\x8f\xe8\x34\xce\xa5\xd5\xa4\xa7\xd7\xaf\x4a\x38\x44\xe0\xcf\x11\x84\x47\x34\x45\x07\x5b\x4d\xd1\x7d\x3a\x70\xb5\xca\x82\x8b\x4a\xa7\x67\xaa\x5c\xac\x8f\xcb\x49\xce\xcd\xd3\x41\x99\x38\xbf\xb1\xb8\xaa\xc8\xdc\xe2\x95\xc1\xc9\xc9\xfe\x06\xf0\xbc\xf9\xd6\xaa\xb7\xd2\x2c\xfe\x85\xdc\x1f\x56\x9f\x90\xf3\xbf\xd9\xd5\x27\xd4\x91\x58\xe8\x21\x3d\x4a\x08\xa8\xed\xa7\xdc\x5c\x32\xe8\xb5\x52\xd3\x42\x9f\x8e\x49\x19\x92\xd4\x5c\x30\xb5\x5c\x2c\x4d\xa2\xb2\x51\x99\xfa\xf0\x2a\xbc\xbe\x1e\xc7\x04\xfe\x64\x27\x27\xe2\xcb\x45\x7e\xa9\xbe\x7e\x35\xae\xcd\x12\x79\xfd\x4a\x95\xb5\x4a\xd4\x65\xc5\xdb\x14\x15\x57\xf8\xb8\xbd\x35\xb0\x05\x1b\xda\x17\xef\x57\x57\x8b\x30\xc7\xfb\x9a\x6a\x5c\x92\x91\xea\x39\xe7\x92\xd5\x6f\x7e\xb7\x7d\xbd\x06\x30\x5c\xbc\xd9\xa1\x5f\xc7\x50\x13\x81\x9f\xc3\xd7\xce\xc1\x5e\x6e\x1e\x41\x2c\xee\x93\xea\x3a\xb6\x4b\xdb\x6a\xf0\x9f\x44\xbb\xff\x49\xb4\x7b\x84\xfb\x4c\x39\xe9\xc0\x88\x75\x96\xa3\xc5\x66\x36\x96\xdf\xd6\x7f\xfe\x35\xb9\xda\x62\xcf\x28\x45\x93\x72\x7b\x96\xf1\x04\xf8\xab\x10\xf1\x91\xff\x0d\x33\xbf\x26\xe7\x7b\xfd\xaa\xcd\xfb\xde\x06\x29\x8b\x73\x74\x0c\x15\x5f\x7b\x7a\x29\x8a\xb6\xf4\x35\xae\x75\x20\xfc\x3c\x82\x89\x0a\xde\x0a\x2f\x63\x69\x98\xcc\xc2\x69\x3d\x1b\x1f\x9f\x02\xd4\x31\x8b\xe2\x57\x2c\x0f\xc2\x08\x9d\x4f\xe2\x49\xad\x2d\x2c\x3a\x0e\x77\x03\x93\x43\x5d\xd6\xab\xd5\xfa\x6d\xb5\xee\xe9\x50\xbc\xe7\xaf\xc9\x95\x18\x86\x88\x3c\xe4\x66\x8e\x9a\xfd\xbb\x19\x9c\xac\x3e\x34\x7e\x8e\x2f\xea\x5d\xf4\xb2\xcd\x03\xcc\x2c\x75\xe4\x9f\x9c\x94\xc8\x87\xed\x58\x2f\x7a\xde\xf8\x35\xe6\x2b\x15\xcf\xeb\x57\x56\xe0\x6c\x12\x8c\xfa\xcd\x36\xa9\x42\xae\x56\x61\x34\xfb\xf5\xdd\xd9\x28\x55\xf9\xcc\xa9\x72\x75\x56\x5f\x56\x48\xb6\x8c\xc2\x7c\x24\x3f\x97\x95\x66\xc2\xe4\x06\xef\xda\x9d\xf3\x77\xab\x61\x27\x19\xd5\x72\x45\xab\xf2\xb3\x66\x24\x77\x2d\x66\x33\xc6\x10\xf3\x22\x5c\x77\x67\x3f\xb5\xb8\xde\x7a\x27\xea\x0c\x98\x2a\x6e\xf2\xcd\x46\xad\x1d\xe5\xdc\xd9\x61\xf3\xd8\x67\x07\xb0\xce\x29\xac\xfd\xfb\xeb\xeb\xae\x7e\x02\x6c\x57\x4f\xcd\x73\x4a\xed\xae\x78\xe2\xa2\xba\x4f\x51\xad\x02\xa6\x4a\x7a\x56\x91\x81\xca\x3a\x17\x3c\x6f\xc8\x86\xcf\xeb\xd6\xb5\x31\xdb\xec\xc8\x08\x56\x67\xd1\x95\x41\xf0\x5b\x15\x01\xeb\x4e\xbc\x5f\xf8\x45\x68\x87\x48\x2a\x31\xcb\x6f\x93\xf4\xe3\xc1\xd2\x4a\x98\x69\xe1\xf2\x5f\x11\x7f\x37\x0d\x67\xe9\x58\x7e\xf9\xfa\xd5\x3b\x59\x0d\x97\x63\xf9\xf5\x5b\x59\x5d\x5c\x85\x79\x36\x96\xdf\xfc\x18\xe6\xbb\x02\x79\xa0\xe7\xd7\x6f\x9f\x54\xeb\x67\xed\x8c\x02\x9e\x4b\xf7\xf5\xdb\x89\x7c\x51\xae\x9b\x40\x95\x2f\x65\x45\x11\xfc\x93\x87\x63\xe0\x7d\xac\x6f\x01\x49\xa5\xf2\xdb\xa3\x9a\x3c\x88\x64\x27\x67\xc1\x15\x8b\x54\xc0\xe9\x98\x91\x73\x18\xb1\x9a\x27\x63\x46\x3e\x24\x6a\x98\xbd\xba\x8b\x83\x45\x38\x1d\x3f\xa5\x9b\x8d\xa2\x26\x18\xc0\xc1\x1f\x1d\xb9\x7f\x7d\x53\x93\x6e\x09\x76\x3e\x49\xab\xd8\x30\x92\x25\x69\x5e\x1e\x58\x3a\x58\x87\xdf\x19\x4b\x16\x27\x33\xa6\xd5\x2e\x6d\xff\x56\xb7\xd1\x2e\x29\xa7\xc1\x14\x1f\x7e\x49\x66\xac\x4a\xe6\x30\xce\xdb\x39\xd6\x76\x6f\x3b\x40\x0b\xbf\xfd\xfa\x5b\xc5\x48\x11\x44\x17\x62\xec\x5c\xb8\x60\x59\x1e\x2c\x96\xf2\x67\x0c\xf4\x9b\x1d\xe2\xf6\x8c\xec\x02\x01\x55\x7e\xd1\xb1\x8c\xdf\x64\x75\x9e\xe7\xcb\x17\x33\xa0\x43\xa7\x1f\x3e\xbc\xc5\xc0\xdf\xdd\xe1\x83\xaf\xf8\x55\xeb\x4d\xb3\x9e\x78\xf8\x59\xf6\x3c\x6e\xc9\x53\x0b\xc3\x8d\xf2\x65\xb2\x5b\x5d\xf6\x0a\x06\x1c\x66\x71\x4d\xf2\x8a\xd5\x1e\xf7\x58\x5b\x10\x13\x03\xdd\xee\x20\xab\x93\xdc\xa6\x14\xb5\xd9\xec\x93\xcc\xba\xbe\x8e\xc4\x6d\xcb\xdf\xea\x82\xdb\xa9\x4b\xd5\x42\xb2\xbf\xcc\x7a\x95\x96\xc1\x83\xdf\x38\x99\xd9\x89\x92\xba\xa7\xa4\x16\x12\x59\x79\x4b\xba\x7e\x92\x66\xb5\xc2\xf1\xd2\x13\xff\x38\x13\xf1\x8f\xf8\x88\xeb\x98\xd5\xaf\x5a\xe4\x21\xb6\x03\xa2\x5f\xb6\xc0\x1f\x45\x03\xfe\x43\xd4\xff\xe2\x79\xe3\xb1\x81\xdf\xec\x84\x15\x72\xd8\x72\x35\x96\x5f\xbe\xfd\x55\x56\x17\xfc\x42\x7c\x99\x5f\x8c\xff\xe6\x47\x59\x9d\x85\xd9\xc7\xb1\xfc\x2a\xcc\x3e\xc2\xaf\x30\x59\x66\x63\xf9\xf5\xdf\xde\xbe\x3f\x94\x79\x08\x5a\xfc\xcd\xa3\x22\x89\x63\x36\xcd\xc7\xf2\x4b\xfe\x65\x1f\xa3\xc9\x87\xe0\x26\x7b\x7c\x1c\xf1\x2f\x93\x8b\xcb\x2f\x36\x57\xe3\x91\xfc\x6f\x7b\xab\x0b\x74\x89\x43\x2c\xb8\x40\x96\x51\x70\xf7\x86\xff\xde\x0b\x6b\x35\x5a\xb0\x95\x02\x1c\xe0\x23\xdd\x03\xad\x78\x40\x5f\xab\xf4\xde\x3f\xac\x57\xaa\xd2\x03\xa2\x60\xca\x66\x2f\x83\x38\x48\x6b\x11\xcd\x68\x79\xaa\x4a\x42\xc6\x03\xa9\xf9\x29\x51\xa9\x5d\x76\x3c\xd4\x6e\x89\x5a\x3e\x10\xa9\xc7\x54\x41\xbb\x01\xb3\xbd\x68\x8d\x4b\xb4\xc6\xe8\x87\xcb\x7a\xbd\x56\x8c\xfc\xb4\x9c\xb3\x05\x4b\x83\x08\xe8\x62\x3d\xd6\x30\x6e\x16\x81\x1c\x17\x97\xda\x66\xb3\x55\xab\x2a\x79\x1f\xde\xb3\x37\x3f\xaa\x31\x79\xcf\x29\x65\x36\xa9\xbe\xf2\x18\xf8\xc6\x14\xc5\x87\x6a\x6f\x38\x45\xe2\x64\xea\x1f\x72\xa9\x6f\x0b\x21\x0a\xe3\x30\x9b\xb3\xd9\x0b\x6e\x88\xad\x7e\x1e\x27\x78\xa8\x7d\xcf\xe9\x1f\x02\x69\x45\xfd\xf2\x84\x42\x19\x61\x8f\x38\x2a\x16\x25\xe7\xf4\x13\x3c\x30\x87\x2c\x5f\xad\xca\x5e\xbe\xfd\x75\x12\x93\x97\x6f\x7f\xad\x3d\x13\x6b\x97\x0b\x04\xb5\xe7\xcd\xc5\x9d\xf7\x2e\xee\x2f\x9f\x88\xe4\x23\xdb\x76\x2e\xe2\x9b\xa2\x30\x75\x6b\xde\x8b\xe9\x94\x65\x59\x92\xbe\x7e\x25\x17\xba\x68\xc6\xa6\x29\xcb\xc7\xf2\x7b\xfc\xfb\xfa\xd5\x10\xcf\xac\xd3\x24\xbc\x5d\xeb\xee\xf5\x2b\xa0\x0d\xc5\x4d\x5b\x6a\xf1\x18\xcd\xf0\x4d\x62\x54\xd4\x69\x23\x7e\x5f\xe2\x81\xc4\xe7\x59\xf0\x5b\xf0\xa9\x0f\xe9\xf0\xbc\x55\xeb\x8b\x97\xfd\x60\x83\x32\xe0\xeb\x81\xc5\xab\x05\x77\xb0\x8d\x9f\xea\xea\x0d\xcb\xfb\x4e\x94\x17\x43\xdb\xa0\x2e\x3d\x3c\xb6\xda\x79\xf6\xe1\xfc\x07\xa5\xdd\x3a\xff\xcf\x59\x98\x6f\xec\x2c\x4c\x71\xa0\x5d\x70\xca\xea\x0a\x82\x64\x95\xb3\x74\x9f\x2c\x06\xcd\x3c\x2b\x23\x99\xb7\x24\xd3\x55\x9a\xb2\x38\xff\xf5\xdd\x99\xac\xb6\x9e\xe1\xe1\x79\x7e\x3a\xb7\x93\xb7\xa2\x0c\x8b\xf9\xdb\x6d\xcc\x52\x9e\x3b\x40\x8d\x27\xa3\x2a\xae\x71\xa8\x2f\x98\xba\xca\xdd\x45\x64\x85\xdc\x86\xf9\x3c\x59\xe5\x23\x78\xdc\x0e\xe1\x68\x90\x85\x2c\x82\x61\xe9\x6a\xfe\x1d\x55\xc8\x6f\x49\x18\x63\xfb\x8d\xa2\x06\x93\x8b\x6a\x31\x75\x65\x19\x91\xa0\x3b\x55\x93\x09\x23\x51\x92\x7c\x5c\x2d\x05\x7c\xe3\x2a\xd0\x59\x51\x9e\x24\x3c\xbd\xed\x8f\x15\xd6\x4e\x4e\x46\xd0\xb7\x22\xce\x23\x25\xa4\x86\x51\x10\x56\x9e\xc8\xc5\x4b\xe4\xc9\x04\x96\x5b\x72\x2d\x41\xa3\x6c\x92\x8d\x92\xf2\xba\x36\x91\xad\x83\x5b\xab\x64\x85\x87\xa1\xa9\xa3\x74\x12\x34\x8e\xb3\xa4\x6a\x3e\xca\x14\x85\x87\x1f\xed\xc5\x30\xf8\xde\x9e\xb6\xe3\x07\x05\xaf\x08\xe2\x66\x9d\x3f\x1c\xd1\x9a\x26\x33\xa6\x2d\x42\x9e\xcc\xa4\x3e\xc0\x70\x7d\xa7\x41\x21\x2f\xeb\x6f\xf0\x07\x1c\x6d\x7c\x1d\xde\x0c\xc8\x5f\xbc\xf0\x19\x8b\xd7\x61\x9a\xc4\xe8\xc8\xfc\xba\x99\x33\xda\x84\x66\x15\x7f\x8c\x93\xdb\xb8\xe8\xb7\xef\xa0\x5d\x2d\x54\xae\xe8\x59\x65\xca\x46\x0d\xb3\x57\x6c\xdd\xce\xf3\xc4\xfe\xb9\x0a\xa2\x91\x5c\x1f\x10\x60\x76\xcd\xa2\x64\x29\xfc\xb4\x61\xf6\x36\x4d\x66\x7b\x35\x5c\xa6\xc9\x6c\xc5\xf7\x21\xb4\xfb\xc0\xb2\x7c\xaf\x76\x39\x5e\xa1\x78\xc0\x5e\xe3\x5b\xab\xf7\xde\x9f\x62\xdf\x95\x85\xc3\xad\x7e\x3f\xa9\x59\xfc\xfe\x00\x42\xea\x58\xce\x12\x7e\xe8\x69\xa6\x45\xe1\xcd\x3c\xdf\xcf\xef\xca\x87\x30\x67\xc1\x0c\x4f\xe2\xf6\x92\x9a\x28\xd4\xa0\x42\x5f\xf5\x3f\xdc\x3e\x5c\xb0\x59\xd8\x3b\xca\x94\x07\x23\x86\x6b\xd6\xae\xfc\xd5\xe7\x73\xef\x69\x5a\x24\xdd\xe8\x78\x0e\x3d\x2f\xe9\xd6\x3c\x80\xc6\x1c\x3f\x73\xd3\x0d\xcb\xd5\xbe\x48\x2f\xf1\xfb\x67\x50\x14\xf2\x71\x50\x4b\x91\x27\x73\xb8\x49\xb2\xca\x97\x2b\x51\x61\x9f\x3b\xd3\xca\x71\x2f\x83\x1b\xa6\xe5\x61\x1e\x31\x2d\x0a\xb3\x5e\x54\x55\x55\xb6\x34\xfb\x17\xe1\xed\x61\xf3\xfd\x85\x9c\xb1\x65\x80\x32\x31\x92\x3e\xb6\x64\xf1\x0c\xa4\x37\xb6\x8c\x82\x29\x93\x2f\x7b\xad\x39\x95\xe2\x06\x43\xf9\x00\x23\x39\x39\xe9\x79\x78\xc1\x2e\x41\xea\xb9\x28\xb7\x57\x21\x21\xf5\x1f\xad\x9e\x07\xe9\x8b\x7c\xa4\x2b\x24\x4f\x7e\x5d\x2e\x59\xfa\x32\xc8\xd8\x48\xf9\x8e\x09\x61\x8d\xa2\x68\xad\x5c\x4e\xfa\xdf\xa4\x6c\x94\xa1\x68\xbf\xa0\x35\xa5\xbd\xe7\x42\xf8\xdc\x64\x79\x90\x67\x5a\xce\x33\x4e\x64\x5a\xca\x6e\xc2\x2c\x6f\x9b\x3a\xa3\x74\xf5\x8f\x45\xb0\x1c\x4e\x87\x8b\xfe\xed\x46\x57\xc3\x75\x2b\x97\x5f\xab\xc5\x57\xbc\xf2\x53\x4d\x06\x58\xf3\xd6\xeb\x6f\xc2\x38\xec\xde\x4f\xb6\x35\x82\x8c\x67\x2b\xca\xc9\xd9\xbb\x5f\xdf\x04\xcb\x11\xd5\x31\x3b\x1f\x47\xe9\x3b\x76\xdd\x56\x24\xba\x94\x16\xf6\xdf\x0d\xcb\x45\x06\x90\xa1\x8b\xb5\xf0\x92\x0b\x11\xc3\x8d\xe9\x2b\xa7\x49\xcc\xe3\x4b\x93\xb4\x11\x53\x57\x39\x5b\x13\x55\x1e\xd7\x43\xb1\xcb\xfb\x41\x15\x35\x9a\xf0\xfc\x67\x93\xc9\x24\x79\x5e\xae\xb5\x71\x75\x25\x6a\x58\xaf\xc0\xbf\x8e\xe5\x7a\xd6\xa0\xd5\x84\xcb\x2e\x19\xe6\xbf\x5d\x29\x1d\xf5\xb7\x71\xb7\x27\x4a\x39\xca\xc9\xc9\xd3\xe2\x2b\x01\x29\x27\xcb\xd3\xe4\x8e\xcd\x7a\x1f\x87\xf1\xcd\x66\xb4\x52\x43\xe5\xf1\x71\x85\x59\xfa\x42\x95\x29\xea\x0a\xe7\x76\x3a\x89\x44\x12\xc5\x21\xe5\x27\x07\xed\x97\x3d\x1f\x5a\x4a\x79\xb1\x7e\x62\xb5\xc9\x0b\x39\x6d\x5a\x95\xbf\x6f\xd3\x30\x17\xdf\x37\xca\x18\x94\xf0\x49\xac\xb2\xcd\xe8\x01\x6f\x19\xe9\x93\xea\x72\xc2\xaf\x40\x0f\x56\xf9\x3c\x41\xe1\x41\x24\xf2\x02\xb5\x79\xa3\xc2\x28\xca\x60\x9d\x14\x07\x96\xa9\x53\x45\x9d\xb6\xdc\xe0\xbd\xc9\x5c\xab\x1d\x8c\x87\xe0\xb6\xe6\x70\x2d\xb6\xde\x32\x4d\x16\x61\xc6\x34\xae\xfd\xef\xae\x17\x80\x9e\x5f\xaf\x26\x82\x03\xda\xd1\x61\xad\x6e\x7e\xcb\x92\x58\xc3\xb4\x75\x65\x38\xee\xef\x90\x03\xfb\xa0\xad\xbd\x35\xbd\x21\x4f\x2d\xd8\xd1\xfa\x9b\x57\xa9\x77\xd4\xfa\xfa\xf5\xf7\xf8\xee\x27\x6d\xe9\xa9\x58\xa7\x0f\x02\xbf\xe3\xbe\x95\x51\x3b\x40\x1c\x54\x89\xb2\x55\xf9\x19\x4f\x12\xf7\xac\xc8\x7b\xb8\xed\x4a\x5e\x98\x80\x91\x32\x7c\x63\xd5\x43\xba\x9c\x62\x40\x0b\xdb\x74\x2a\xd5\x77\x2a\xcf\x46\x59\xcc\xcc\xcb\x79\x10\xdf\xb0\x91\xcc\x21\x20\xa2\x0f\x59\x51\xf3\x8d\x52\xc8\x85\x41\x79\xeb\xfb\x16\x5a\x57\x4b\xcc\xbb\x27\xa2\x58\x1d\x51\xc1\xed\x4e\x5c\x61\xe2\xc1\x67\x0b\x9e\xdf\xad\xc4\x55\x33\xff\xc1\xc3\x66\x18\x87\x0f\x3c\xd5\xdd\x98\x11\x9e\xb7\x92\x0f\x69\x23\xc6\xc9\x0b\x3b\x66\xa1\x3d\x46\x18\x1f\x6d\x84\x02\x86\x81\xb1\x5d\x5c\x8a\xd4\x1e\xf5\x35\xdb\x35\x63\xf1\x3e\xc8\xc5\xa5\xac\x3e\xb4\x24\xff\xda\x08\x44\x35\x35\x9f\x88\xdb\xf2\x81\xf0\x63\x9e\x8e\xe0\x06\xd6\xc8\x22\x98\xbd\xa8\xbd\xa6\xba\x03\x55\x24\x1e\xc9\x46\xb9\xf2\x3c\xc7\x70\x09\xbc\xff\xb9\x9b\x28\x41\x24\x24\x2b\x1d\x12\xdf\xc9\x72\xd1\xcb\x5e\xaf\x9c\xc4\x6a\xbc\xe9\xab\xc9\x33\x60\xbc\xce\xd9\x42\x50\xce\x7a\x2b\xbc\x57\x54\xcd\xe6\xc9\x2a\x9a\xbd\x9f\x27\xb7\xef\xfa\xa7\xb5\x81\xa6\x1e\xdd\xa8\xb2\xda\x89\x7a\xdc\x5c\x2b\x2b\x3f\xd0\xb2\xfb\xd7\x1c\x13\x03\xf3\xd0\x24\x2c\x72\x63\x1b\x09\xec\xcb\xaa\xdc\x01\x74\x10\x9a\x4e\x4d\x71\x54\xa0\xfe\x9e\xa7\x93\x49\x05\x79\xef\x1b\xd1\x31\x59\xde\xd4\xb9\x3f\x35\xdc\xb9\xd4\x7b\x13\xb0\x56\x07\xbc\xb7\xd0\x35\x78\x7b\x30\xcd\xf1\x0e\x0f\xa5\x31\x77\xbf\x0c\x03\x5a\x8d\xa1\x3d\x83\xb5\x35\x5e\xab\x94\x27\xdc\x06\x5f\x25\x08\x17\x33\x8a\xa9\xbd\x93\x05\xeb\x81\xad\x7e\xf4\xa1\x26\x5b\xd5\xb6\x60\x75\x0f\xc2\x0e\xf8\xfa\x37\xe2\x8e\x6d\xd0\x77\x64\x4e\xcd\x3b\x43\x2b\xd2\x46\x86\x33\x59\x65\x55\x98\xf0\xe3\xe3\xe8\x80\xcd\x53\x3b\x8b\xaf\x6e\x7b\x41\x75\xfb\xaa\xb2\x63\xdb\x0b\x1c\x8a\xb3\x70\xa5\x31\x38\x7f\xde\x0b\x56\x1f\x28\x93\x7c\x2b\x28\xb9\xa2\x8c\x0f\xe8\xab\x71\xf5\x42\xae\x3c\xf9\x3c\xe4\x6c\x90\x53\x64\xac\xab\x42\x60\x9e\xe9\xce\x85\xb5\xe8\x86\x3e\x44\xf0\xcb\xd9\xa7\x5c\x5b\xb0\x20\x5b\xa5\xed\x1c\xc2\x5c\x17\x6f\x54\x18\x6a\xf7\x87\xb3\x31\x6d\x71\xf0\xc6\xdc\x63\x32\xbd\x6b\x9f\xaf\xec\x88\xa8\x28\xb2\x7f\x4d\x8d\x73\x40\x28\xfd\x82\xb4\xda\xc1\x34\xfa\x29\x06\x1c\xce\x00\x89\xc2\x35\xdc\x22\x26\x6d\xe2\xb1\x8b\x89\x7e\x00\x5c\x72\xef\x72\xdf\x1e\x2d\x48\x39\x1e\x98\xcc\x9f\xef\xb5\x0f\x6a\x5d\xca\xca\x78\x9f\x37\xc3\xe6\x85\xcd\x82\x73\xf2\x9e\x45\xd7\x58\xc6\x6f\x42\xc8\x83\xec\xa3\x32\x4a\xd9\x0d\x8b\xb9\x27\xf3\xdd\x2a\xce\xc3\x05\x23\x8b\x20\xfd\x58\x12\x62\x89\x09\x42\x99\x97\xda\x54\xb7\xc5\x6d\xda\x8a\xb2\xbe\x4e\xd2\xd1\xf7\xdf\x2b\xd9\x6d\x98\x4f\xe7\x23\x46\x96\x29\x5b\x4f\x18\x1e\x3c\x55\x1e\xa6\x41\xc6\x24\x7d\x5c\x2c\xce\x5e\xa7\x5d\xe9\x0f\x13\x6a\xd1\x98\x2f\x4d\x4c\xa8\x06\x7d\x51\x95\xf7\x36\xb1\xd4\x1c\xe9\x11\x0c\x6e\xa4\x3c\xc1\xbe\xad\x71\xc9\x5e\x82\xab\x74\xb5\x44\x01\x02\xe9\x20\xde\x0c\x18\xe7\xa2\x9e\x5b\xd5\xc3\x4e\x5d\x95\x91\x5c\x9f\x30\x91\x87\x9c\x2a\xea\x08\x1e\x10\xcc\x90\x9d\x3d\xaf\x7d\x2f\x92\x35\xcc\xf0\x98\xa1\xac\x8c\x2f\x2e\x95\xa1\xbc\x62\xf2\x8b\x97\x67\x92\xb8\x88\x4b\x9a\x85\x19\xae\x33\x50\xf8\xd9\xa6\xb8\xe2\x40\x50\xad\x62\x11\xe2\x9d\x95\x6a\x17\x78\x24\x63\x1c\x74\x6a\x8c\xe1\xaf\xcc\xe2\x99\x5c\x8d\x22\xcb\x93\xe5\x08\x8f\x8e\xa9\x3c\xa5\xf1\x05\x55\xdd\xcb\x4b\x65\xa3\x28\x6a\x56\xce\x7e\x9b\x4b\xf2\xf5\x2e\xab\x72\x73\x95\x90\x28\xc8\xf2\xf7\x2b\x0c\x9d\xb8\x5e\x45\xfc\x70\x70\x83\xc9\x87\xd7\xe2\x5c\x21\x76\xa0\x74\xa4\xb6\x7d\xfa\x53\x3a\xab\xb3\x88\x9a\xf8\x36\x56\x69\x78\x5d\x14\xe8\xea\x53\x31\x5a\x01\xa8\xf2\x20\xd6\xa0\xfb\xe4\x2a\x65\xc1\xc7\x4d\xa5\xdc\x89\x95\xd9\xa8\x2e\xae\x6c\x16\xa3\x93\x3f\x7f\xad\x62\xef\xbe\x3a\x70\xbb\x72\x11\xb7\x2f\x07\x71\x12\xdf\x2d\x92\x55\xf9\x2a\xbf\xda\x72\xbc\xeb\x9e\x25\x76\x91\x5f\x16\x2b\x8c\x8e\xc5\xab\xa8\xc3\xc7\x27\x9e\x9b\xad\x5d\x43\xcd\xe6\xb6\xd1\xfb\x96\xee\x45\xd9\xad\xb3\xdf\xc2\xd5\x55\x6a\xb6\x57\x6e\xb9\x32\x5a\x3e\xb4\x20\x0a\x83\xac\xbd\xdc\x8a\xca\x03\xcb\xae\xb5\xe8\x5e\xc4\xb3\xcf\x5e\x77\x5f\x87\x2e\x0a\xe4\x1b\x7c\x9e\x5b\x5b\xa9\xbc\x71\x8f\x23\xd5\x18\x63\x0e\x7c\xae\x88\x14\x54\xa4\x5c\x9e\x76\xef\xf2\xb4\xfb\x3a\x2e\x91\xd6\x7a\x81\xbd\xc7\xa4\xe1\x5c\xf5\x69\xda\x3d\xa6\xd6\x4e\xb6\x49\xda\x9b\x6d\x92\xd6\xb3\x4d\xd2\xcb\xf1\xc3\x34\x65\x33\x16\xe7\x61\x10\x65\x63\x59\xe8\xc0\xf2\x46\x8d\x27\x98\x03\xbc\x46\x8c\x4a\x32\x70\x72\x32\x8a\x2f\xe4\xff\x47\xfb\x05\x85\x14\x1c\xa4\x7c\x39\x49\xc5\x8d\x6a\xa5\x56\xcf\xd4\xe6\x81\x66\xf5\x61\x8e\xa6\x98\x6c\x1c\x6f\x40\xc8\xee\x18\x93\x7a\x52\x12\xb6\x73\x67\xf5\xe8\xa7\xb2\x52\x9e\x9d\xec\xcf\xb4\x55\x54\x7b\x12\x9c\x9c\x8c\xd8\xa4\xef\xd4\x65\xff\x81\x5d\x3c\xf3\x5d\x5a\x05\xe4\xe7\xb2\xf2\x5c\x3e\x91\xc7\xf2\xf3\x42\xdd\xaf\x9d\xe3\x55\xaa\x8c\xfc\xb5\x5c\x79\x23\xa6\x16\xb6\x99\x00\xc6\x5c\x27\xe7\xbd\x06\x14\x7e\x2c\xaa\x5f\x0e\x6f\xad\xd7\x69\x10\x4f\x59\x04\xea\xe8\x03\xd6\xc7\x24\xef\x5c\xc6\xdb\xb6\x0a\x0f\x6b\x56\xdb\xc3\x5b\x5a\x6e\x0e\x70\xca\xe1\x65\x4f\x83\xfe\x38\x8c\x7a\xfc\x5a\x3e\x56\xcc\x24\xd4\x2f\xe8\xe2\xbd\x9c\x2d\x12\x98\xb2\x60\xf6\xb7\x38\xba\xeb\xfa\x3d\xea\x11\x89\xea\x53\x1d\xf8\xed\xe1\xce\x17\x80\x67\x03\xda\xc5\xeb\x78\xc6\x3e\xfd\x9c\xa4\x7d\x26\x79\x9e\x02\x89\xa2\xb4\xdb\x53\x0f\xb0\x03\x55\x26\xdf\xe5\xfb\x84\x3f\xae\x6f\xb6\x84\x04\x7e\x39\x96\xab\x07\x0f\x72\x10\xb1\x34\xd7\xa6\x61\x3a\x8d\x98\x76\x1d\x46\x91\x3c\xfe\xdf\x7f\xc9\xd6\x37\xd2\x3a\x64\xb7\x3f\x26\x9f\x26\xb2\x2e\xe9\x92\x61\x49\x86\x25\x4b\x9f\x16\x51\x9c\x4d\xe4\x79\x9e\x2f\xc7\xcf\x9e\xdd\xde\xde\x92\x5b\x93\x24\xe9\xcd\x33\x43\xd7\x75\x00\x5b\xfe\xe1\x2f\xcb\x20\x9f\x4b\xb3\x89\xfc\x86\x1a\x92\xf1\xd2\x21\x96\x27\x19\x92\x21\x89\x2f\xd4\xc8\x2c\xf8\x46\xf5\xf2\x7f\x4d\x3c\xd0\xa8\xfe\x9e\xba\xc4\x36\xb0\x9a\x64\xdc\x2f\xa8\x44\xed\xb9\x66\xac\x35\x63\x6e\xac\x8d\xfb\x85\xae\x59\x73\xcd\x38\x77\xe7\xc6\xda\xb9\x97\x25\x80\x76\x22\x8b\x68\xb6\x97\x49\x94\xa4\xf2\xb3\x1f\xfe\x02\x60\xfc\xf0\xbf\xd5\xe6\xc0\x92\x55\x1e\x85\x31\x3b\xde\xd8\x10\x34\x63\x6d\x70\xf0\x00\x34\x0f\xa0\x42\xf0\xee\x17\xc4\xf7\x35\x1b\xc6\xee\x76\xc7\xee\xc2\xa8\x7d\xe2\xfb\x12\xd5\x5f\x8a\xf1\xe2\xff\xe5\x77\x6a\x54\x78\xa0\x50\xd1\xb8\x47\x64\xea\x53\x40\x95\x21\xe9\x9a\xa7\x99\xc4\xf6\x34\x4f\xf3\x32\xfe\x45\xc2\x7f\x12\xfc\x90\xe0\x07\xff\x02\xcf\xf6\xc4\x53\x9e\x86\x41\x7c\x13\x1d\x11\x43\x92\x41\xe7\x86\x71\x46\x71\x18\x92\x41\xef\x17\xd4\xd0\xcc\xee\x74\xae\x35\x6b\x6e\xac\xad\xdd\x70\xa6\x69\x72\xab\xcd\x92\xdb\xf8\x98\xb3\x68\xae\xa9\x45\x8c\x48\x33\x89\x03\xff\xce\x1c\x89\xda\x91\x23\x39\x92\xa3\x39\x1a\x25\x16\xfe\x33\x89\x23\x99\xc4\x39\x07\xe8\xf7\x84\x33\x62\xd7\xf9\xd1\xe0\x34\xa8\x44\xe9\xa9\x43\x3c\x33\xc2\xe9\x36\x89\xed\x9f\xf9\x92\x13\x69\x08\xa9\xe4\x48\x94\x58\x14\x40\xa5\x67\x50\x4b\xa2\xe6\xa9\x41\xf7\x84\x34\xc5\xb0\xa3\x63\x81\x0a\xef\x9e\x97\x28\x05\xac\x9d\x51\x5b\xa2\x5e\x04\xf8\x14\x38\x05\x68\x25\x51\x7a\x6a\xae\xf7\x45\xe9\x6a\x79\xbc\x89\x37\x25\x83\x9e\x3b\xc4\x8b\x4a\x20\x3d\xc9\x8f\x38\x88\x1c\x9d\xf0\xef\x8c\x52\xc9\x21\xde\x39\xac\xe4\x5d\x40\x5e\x25\x49\x2e\xc0\xbb\x0d\x67\xf9\x7c\x22\x53\xcf\x91\xa5\x39\x03\xf4\x8a\x1f\x0d\xb8\xa9\xe7\x48\xf8\xf4\x30\xc8\x75\x9d\xf8\x9e\x29\x39\x26\x71\xfc\xc8\x24\xa6\x6e\x4a\x1e\x71\x74\x5b\x32\x74\xe2\x9a\x8e\xe6\x12\xdf\x99\x52\x9f\x58\x9a\x4b\x2c\xcb\x95\x2c\x4a\x74\x03\x46\x63\x18\x8e\x64\xeb\x84\x52\x43\x82\x62\xcb\x0d\x0c\x9d\xe8\x2e\x95\xc4\x1f\x84\x49\x32\x24\x93\x78\x7e\xe4\x12\xea\x78\x12\xf5\x88\xe3\xd2\xa9\x49\x7c\x1b\x08\x34\x31\xa9\xa1\x51\x42\x7d\xc0\x1e\xf1\x3c\x8d\x52\x62\xc3\x9b\x6d\xe2\x59\x91\xe6\xf9\xc4\x31\x4c\xc9\xb4\x88\xa5\x9b\xd8\xb9\xcf\x3b\xf7\x45\xe7\x9a\x49\x3c\xcf\x97\x28\xd1\x1d\x1a\x69\x50\xe2\x50\xc9\x25\xae\x4e\x03\xa0\x5a\xbc\x0e\xbc\xc6\x74\x34\x8b\x38\xba\x71\x46\x3c\xc7\x95\x2c\x9b\x38\x96\x53\x55\x91\xb0\x8c\x57\xb4\xcf\x5c\x4a\x5c\xdb\x94\x7c\xa8\x5a\xab\xc3\x4b\x79\xd5\x33\xdf\x20\xd4\x92\x2c\x9d\x38\xb6\x11\x18\xc4\xf2\x3c\x89\x7f\x42\x5d\x1d\x86\x44\x5d\xe2\x19\x53\xcd\x24\xd4\x82\x46\xba\x0b\x63\xa3\x2e\x40\xa7\x19\x26\xf1\x01\x6c\x9d\xd8\x7e\x60\x10\x5b\x82\x7f\x3a\x7f\x0f\x01\x68\x3c\xd7\x9b\x52\x83\x78\xbe\x66\x10\x5f\x77\x00\x39\xb6\xee\x68\x0e\xb1\x7d\x0f\x90\xe3\x53\x0b\xba\x33\xa9\x17\xd9\x44\xa7\x96\x44\x4d\xa2\x3b\x00\x88\x0f\x9d\xc1\x67\x01\x88\x6e\x11\xd7\xe7\x70\x58\x15\x1c\x8e\x57\x01\xe2\xed\x01\x88\xe1\x69\x00\x8e\x01\x90\x58\x86\x09\x90\x38\x06\x4e\x93\x0d\xfd\x19\xf6\x7d\x6d\xe1\x4e\x83\x88\xc5\xb3\x20\x3d\xda\xde\x02\x1e\xe5\xc3\x1a\xa3\x96\x39\x07\x00\xbc\x35\xec\x7a\xc3\x3f\x85\x22\x73\x8d\xdf\xef\x17\x00\xa2\xed\x49\xfa\x29\x35\x45\xf9\x9c\xff\x69\x54\x70\x25\x7d\xce\x9f\x8a\x3e\x3c\xe2\x52\x6b\x7b\x15\x18\xa7\x5b\x54\xa1\xf8\x97\x57\x6c\x40\xc3\xdf\xe6\xf5\x76\xf5\x8d\x41\x7c\x4e\x8d\xad\xd0\x9e\x53\x63\x10\xd2\xb2\xed\x00\x94\xd0\x76\x0b\x84\x50\x3c\x04\x9d\x27\xde\xce\x67\xba\x06\xa0\xd7\x01\x10\xab\xd4\x60\xf4\x9a\x30\xd6\x7a\xf0\x7b\x7b\xf0\x45\x0f\x15\xa4\xde\xfd\xc2\x85\x47\x9a\x0d\x8f\x44\xa5\x72\xa8\xd8\xf6\x7e\xa1\x79\xc4\x06\xd2\x26\xa0\x30\x4e\x5d\x62\x78\x8e\x28\x7d\xc3\x17\xaa\xa1\x43\x9d\x39\xc5\x7e\xce\x5d\xf8\x3c\xb5\x38\x20\xa2\x9e\xa1\xc3\x8b\x24\x93\x54\x30\x02\x41\x99\xea\x12\xb1\x34\x62\x52\x8b\xb8\xd4\xd6\xa0\x21\x7c\x99\x73\xc0\x03\xe2\xea\x40\xdb\x5c\x41\xd7\xa0\x18\x3e\xec\x73\xde\x8f\x25\x20\x19\xec\xe7\xd4\x21\xbb\x7a\x01\x38\xcd\x17\x94\x58\xa6\x84\x1f\x9c\x16\x98\x40\x09\x60\xc2\x70\x44\x2f\x91\x58\x9b\xb6\x0b\x6c\xce\x32\x41\xbe\x14\xe3\x36\xc4\x98\xa7\xc4\xf5\x1c\xa4\x21\x96\xe1\x69\x58\x89\x7f\xe5\x38\xc5\xce\xa6\xba\x06\xb5\xa0\xd4\xd0\xaa\x52\xf1\x29\x78\xa3\x96\xae\x22\x36\x91\xd9\x9a\xc5\xc9\x6c\xb6\x8b\xa9\x73\x2d\xf5\xab\x6a\x1e\xa5\xf4\xed\x36\xa5\xef\xba\xe6\xe1\xd6\x34\x0f\xb3\xd4\x3c\x6c\xa0\xd1\xb6\x7f\x46\x6d\x62\xfb\x12\x75\xe1\x31\x35\x89\x45\x25\x0f\x3e\x80\x33\x48\xa2\x4c\xc7\x4f\x43\x72\x79\x11\x7e\xf0\xfa\xbc\x04\x6b\xb9\xd0\x84\x37\xc5\x5e\xa0\x58\xf4\xb0\x53\xfa\x69\x22\xea\xe8\x9a\x8c\x05\xf0\x79\x67\x25\xc0\x3e\x8e\x42\xf2\xf8\x97\x72\x78\x9e\xc4\x6b\xf2\xa7\x4e\x85\x10\xfe\x18\x9e\x38\xc5\xf7\x72\x88\x8e\xa8\xce\xdf\x71\x7f\x84\x89\x01\xb9\x09\xd5\x20\x5a\xa8\x41\x7e\xa1\x06\xf9\x75\x35\xc8\x2f\xd4\x20\x7f\x4f\x35\x48\x60\x79\x19\x05\xe1\x11\x15\x0c\x1f\x06\x49\xcf\x60\x0c\xbe\x64\x57\xab\x02\x9e\x4a\xb6\x64\xf3\x2f\x25\x92\x6d\x89\xd7\xe4\x4f\xfd\x1a\x92\xf1\x31\xe5\xff\xbb\x75\x24\xef\x3b\xb0\xec\x9f\xab\x20\x3d\xf6\x3e\xf3\x25\x73\x0a\xa2\x87\x2e\x19\x12\xf1\x61\x52\xd7\x48\xcf\x28\xa1\x1a\xfc\xd6\x0c\xc9\x38\xb5\xa7\x1a\xd6\xd1\x0c\x8d\xf8\x9a\xa1\x19\xe7\xf6\x14\x85\x2e\xf8\x05\x75\xe6\xd4\x02\x72\x2f\x51\x03\xb7\x5c\x6d\x83\xf0\x1d\x53\xec\xa0\x02\x79\x62\x8b\x15\xc5\xd5\x06\xe4\x35\x8b\x1d\x5a\x21\xaf\xdc\xc4\x07\x6e\x39\x81\xb3\xa3\x6f\x39\x5f\xb2\xd7\xd4\x3a\xb5\xcf\x6d\x1c\xba\xae\xd5\x91\x24\x71\xb4\x94\x88\xe4\x78\x95\x00\x4b\x05\xae\x05\x6e\x0b\x3c\x0a\xb4\x6a\xc6\xfd\x82\xef\x0c\xfb\x77\xd9\xcd\x3b\x90\xc8\x71\xd8\x52\x89\xac\x9a\x46\x64\xb5\x15\x22\x4b\xa2\x87\x53\x2f\x54\x7d\xcf\x70\xe9\x48\xba\xe4\x4a\x7c\xae\x91\x3e\x70\x9e\x46\x25\xb1\x7e\x74\xbe\xc0\xf8\x33\x6a\x95\xeb\x87\x3f\xb4\xf0\x7f\xa3\x5a\x5f\xf7\xcd\x05\x91\xb2\xfc\xb8\xc6\x07\xa0\x6f\x11\x90\x00\x5b\xb3\xf7\x58\x90\xf0\xfe\x23\x6a\xc0\xae\x44\xad\xc8\xd6\xf0\xfd\xbb\xdf\x3e\x67\xd3\x8f\xdf\xa8\x8d\x10\xe8\x86\x1d\x69\x30\x94\xca\x08\x02\x6d\x2c\x42\xdd\x08\x48\xa5\xe6\x22\x59\xf1\x25\x2f\xd2\x7c\x69\x8f\xcd\x5f\x1f\xed\xd1\xf7\xfe\x97\x0e\xf8\x0d\xac\xd2\xa9\xce\x37\x7a\xc5\xf5\xb2\x5e\xae\x57\xe3\x90\xf7\x0b\x53\xd2\xa3\x1a\x8a\x50\x14\xa1\x6e\x04\xbb\x43\xb3\x11\x45\x68\x03\x71\x25\x57\xb3\xb4\xdd\xf6\x38\x8e\xa6\xe3\xf2\x4b\xa0\x3c\x84\xba\x67\x16\x1a\xb1\x8c\x08\xc5\x4b\xbe\xc3\x91\xf5\x19\x54\x72\xf1\x21\x1f\xc4\x3e\x30\xae\xd3\x24\x3e\xb2\xd5\xd0\xe1\x44\x02\x30\x66\x70\x24\x4a\x2e\x17\xfd\x80\x75\xc3\xb6\x16\x06\xc4\xbd\xe1\x3b\xaa\xb5\x10\xa4\x7a\xc0\xa3\x1f\x69\x16\x41\x4b\x8a\x24\xfe\x96\x06\xcd\x9a\xd9\x10\x7e\xef\x0d\xe7\x71\x6d\x85\x1e\x31\x25\x97\xb8\x51\x0d\x42\xf8\x5b\x58\xdf\xa4\x96\xc9\x70\x6f\x28\x8f\x49\x26\xe1\xd5\x4e\x54\x87\x4e\x40\xc8\xf1\xc8\xed\x85\x67\xbc\xda\x6e\x00\xa3\x64\xfa\xf1\xab\x10\x50\x5b\x90\x13\xbb\xa0\x26\x76\x8b\x98\xd8\x35\x5a\x52\xd2\x4e\x8b\x18\x40\x27\x0d\x4e\x0c\xce\xdd\x39\x25\xf6\xda\x26\x46\x64\xa1\x71\xc9\xd5\x88\x27\x51\x62\xee\x39\xae\xe3\xfb\x58\xd0\xf7\xf1\x8d\xb8\x51\x16\xc4\xd6\xa8\x79\x4a\xe9\xda\x89\x6c\x62\xd8\x92\x49\x60\xa3\xd9\x1a\x25\x86\x09\x08\xd6\x0c\xe2\xb8\xe7\xee\x4e\xb1\x08\x70\x25\x50\xb4\x1b\x1d\x85\xe0\xe4\x55\x72\x93\xd7\x12\x9b\x3c\xc9\xab\x63\xcd\x92\xf4\x97\x94\x08\x33\x28\xfe\xb5\x32\xf8\x6b\xf1\xff\x34\xfc\xae\xe1\x5f\x20\xf3\x9a\x85\x3a\xd5\x94\x12\xc7\x41\xdb\x01\x25\xa6\x25\x99\x92\xf9\xde\x86\x27\xae\x04\x72\x12\x88\x50\x8e\x23\x51\xec\xca\xb4\x34\x53\x32\x35\xf3\x7e\xa1\xc1\xaa\x5a\x1b\xc4\x30\x22\x02\x74\xdb\x24\x36\xb1\x89\x69\x11\xd3\x23\xae\xa1\xe1\x3f\xd3\xd3\xa0\x85\xf8\x77\x6e\x10\xdd\x98\x6b\xb4\x61\x7f\x4c\x66\xec\x68\xfc\x03\xf7\x21\x71\x80\x81\x00\xff\x10\xfb\xf6\xcc\x6b\xf9\x4a\x90\xe8\x2d\x6c\x62\x48\x7a\x51\xa7\xf8\x77\x46\x1d\xc9\x89\x90\x7c\x4b\x25\xc1\xdc\xbd\x03\x92\xe5\x9d\x16\xf0\xd3\xee\xc7\x73\x52\x10\xcf\x90\xcc\x97\x20\x80\xc3\x54\xa2\x78\x6a\x4a\x54\x82\xdd\x0a\xea\x82\x09\xea\x02\xb1\x88\x67\x69\x06\x54\x35\x4e\xad\xae\x16\xe1\x1c\xac\x45\xcc\x35\x8b\x50\xef\x1e\x98\xb1\x79\xea\xac\x8d\xb9\x89\x1e\x4e\xcd\x94\x9c\xb9\xbd\xd6\x0c\x78\x76\xff\xc6\x91\xfc\xb5\x31\x77\xce\xfd\x53\xe7\x7e\x61\x6b\xce\x94\xd8\x36\x5a\xde\x89\x65\x03\x8c\x99\x86\x5f\x34\x0a\xff\xe0\xbb\x06\xdf\xf1\x2f\x3c\xb9\x5f\xf8\x44\xd7\x4d\x89\xea\xa7\x86\x89\x6e\x54\xe2\xfb\xee\xda\x38\xa5\xde\xda\x3a\xb5\xce\xed\xb9\xb1\xa6\x44\xd7\xdd\x39\xd5\xf1\x87\x4d\x7c\xdf\x98\x1b\xd0\xe8\x9c\x9a\xb0\x68\xf5\x53\x0a\x0f\xd7\x9a\x89\x7c\xd8\x8a\x4c\xd8\xe4\xd6\x5a\x33\xe7\x16\xd1\x29\x42\xbd\xd7\xbc\x65\x3c\x40\xea\x98\x26\x15\x3e\x71\x56\x39\x71\x26\x9f\x38\x63\x68\xe2\x7a\xd4\x3f\x87\xe8\x86\xfd\xd9\x93\x47\x0d\xc9\x3c\x78\x4a\x84\x2c\x6d\x69\x56\x4b\x96\xb6\x41\x50\x04\xb1\x07\x9d\x1a\x20\x28\x52\x3d\xda\xc7\xac\x52\x84\x7c\x7e\x33\xe2\x73\x65\x40\x6a\x32\x00\xf4\xbe\x78\x36\x71\x4c\x78\x04\xba\x84\xe3\x6b\x16\xf1\xcf\x40\x90\x92\xa8\x47\x4c\xfa\xc2\x25\xbe\x6e\x48\xfc\x53\x78\x99\x80\x9d\xdc\x2f\x1c\x62\x52\xcd\x24\xf4\xcc\x25\x48\x2a\xfd\xfe\xaa\xd6\x94\xbf\xb6\xc6\x61\x38\x91\xb6\x35\xe2\x98\xf0\x0c\xb8\x89\xe3\x4b\x16\xd9\xa9\xa5\xcc\x92\x69\x76\x34\xa4\x7a\x40\xc8\xe9\xa9\xa1\xaf\x7d\x02\x4b\x8e\x9b\x7a\x5d\x54\xae\x01\x24\x40\x87\x3d\xd7\xa8\x35\xd5\xb8\xad\x18\x9e\x71\x5b\xb4\xa8\xb0\xd6\xa8\xfb\xd2\x04\x99\x81\x5a\x92\x89\x9f\x86\x84\x52\xc4\x29\x35\xd7\x94\xd8\xa7\x16\xb1\xd7\xd4\x9d\x53\xeb\x9c\xd2\x7b\x50\x3f\xd1\xd2\x3e\x17\x2e\x10\xef\xd4\x2d\xac\xfa\xba\xf0\x7c\xf8\xe7\x14\x6d\xdc\x45\x01\xb4\x31\xe6\xa5\xcb\xc4\x3d\xa7\x3c\x84\x80\x18\x9e\x73\xee\xc0\xe7\xdc\x5e\x8b\xbe\xee\xdf\x50\x57\x32\x88\x7d\x4e\xe7\xce\xda\x99\x03\x84\xe7\x26\x34\x83\xa5\x0b\x1a\x84\x86\xba\x13\x4c\xf5\x29\xdd\xc9\xb2\x41\x7b\xc0\x1b\xc0\x8f\x67\xff\xf1\xe7\x9a\x75\x6e\x9e\xfa\x6b\xe7\xd4\x8e\x5c\x09\x74\x2e\xf7\xfe\x8d\x2d\x51\x6f\x0d\xbb\x1c\xa8\xac\x8d\xfb\xd1\x98\x1b\x6b\xcd\x3a\x35\xd7\xd6\xfd\x82\x3a\x92\x8e\x3f\xe7\xda\x1e\x01\x13\x6c\x16\xe6\xc7\x82\xd8\x06\x12\xe0\xfa\xce\xda\x24\xba\xed\xcd\xf1\x33\xf2\x08\xb5\x4d\x0d\x3e\x2d\x0d\x9e\xb8\xfc\xf3\xac\xa8\x7c\xbf\xa0\x04\x96\xff\x9c\x12\x9d\x7a\x40\xcd\x0d\xf8\x8a\x74\x9d\x7a\xa7\x40\xdf\xd6\x9a\x41\x74\xd3\xbb\x5f\x50\x83\xd8\xe8\xbc\xb6\xac\x33\xea\x12\xc3\x94\x7c\xe2\x78\x11\xf6\xe8\xf1\x7e\x41\x32\x31\x60\xb1\x99\x86\x13\x40\x17\xb0\x2a\xe1\x53\xec\x2f\x62\x99\x8e\x46\x74\x9d\xce\x89\xae\x1b\x11\x25\x0e\x68\x8e\x8e\x61\x4c\x89\xe9\xbb\xc5\x3f\x68\x63\x71\xc3\x90\xb9\x73\xe2\xd9\xa7\xa3\xa2\xd0\x3f\xb7\xe7\x36\xf1\x2d\x98\x79\x3b\x00\x92\xc4\xdd\xbe\xdc\xda\x57\x3d\xe8\x27\xf5\x6b\xcd\x26\xbe\x37\xd7\x8c\x73\xea\xc3\xe2\xf0\x35\x8a\xcc\x99\xd8\x7e\xa4\xf9\xa0\x30\xe3\x07\xb7\x6e\x21\xe1\xe6\x76\xe4\x73\xaa\xcf\x8d\x73\x73\xae\xed\x1c\xae\xcc\x3e\x2d\x83\x78\xa6\x45\xc7\x64\x86\xb6\x44\xcd\x08\xe4\x16\x83\x98\xe8\x95\x96\x0c\xe2\xb9\x52\xa1\xd8\x1b\x67\x1e\xd7\x56\x5d\x14\x6b\xfc\xb5\xe6\xc0\xe0\xa8\xa5\x19\x91\xc6\x9b\x40\x53\xf4\xad\x7b\x2e\xee\x7d\xfc\x38\xa3\x36\x6a\x8f\xa6\x44\x4d\xc9\x5e\x3b\xf3\xdd\xda\x97\x18\xdd\x22\x49\x8f\xe9\x3d\x91\xac\xad\xa3\x03\x32\x07\x4a\xae\x64\x00\x5b\x3a\xb7\xe6\x9a\x73\xbf\xd0\x50\xa9\xdc\x3a\x3c\x07\x46\x06\x1f\x96\x44\xad\xbd\x86\x77\x1d\x1e\xdd\x38\x87\xde\x56\x09\x09\xf5\x19\xfa\x6e\x0b\x1f\xa8\xbe\xa6\x2e\xa1\x16\x06\xfa\x78\x36\x77\x9a\x96\x7e\x52\x77\x0d\x9a\x80\x4b\x4b\x46\x52\x78\x14\x7d\x4e\xba\xf9\xf7\xca\x77\xc9\x9d\x97\xa6\xd8\xc7\xa6\x70\xc8\xa2\x83\x13\x59\x8a\x83\xef\x45\xdf\x65\xe1\xba\x9c\x53\x1d\x5e\x19\xd9\x92\x7d\xff\x06\xdd\xd3\x05\x3f\xa1\xba\x60\x28\x1c\xca\x26\x4b\xa1\x3a\xe7\x29\xfd\x65\x95\x4f\x5f\xaf\xf3\x96\x39\x77\x0c\x23\x87\xa9\xb9\xc2\x77\x7b\x94\x70\x42\x8e\xad\x14\xff\x6b\x70\xbc\xe0\xbd\xa2\x6f\x1c\x17\xc2\xf9\xb6\x85\xb0\x03\x31\xd7\x61\x94\xb3\xe3\x85\x9b\x80\x40\x37\x07\x8e\x39\xd7\x2c\x50\x4c\x4c\x09\xc8\x22\xf5\xce\x9d\x53\xf3\x7e\x61\x4a\xee\x9c\x1a\x85\xd6\xb2\x0b\xb2\x28\xb8\x39\x66\x18\x8c\xe4\x9c\x01\x81\x38\x45\xc9\xc7\x58\x6b\xee\xdc\x26\x4e\x44\x2c\xc9\x98\xbb\xe7\x7b\xec\xe8\x24\x9a\xb1\xf4\xc8\x7b\x5a\x97\xac\x4a\x4d\xa4\xc4\xf7\x89\xaf\x71\xeb\xc8\x99\x01\xa2\x71\x4b\xe1\x70\xda\x0a\x87\xd7\x51\x38\xbc\x08\x7d\x4f\x7b\x8e\xe6\xf8\x1b\x42\x72\x0a\x18\x8e\x3a\x30\x54\x15\x8c\x53\xeb\xdc\x9b\x53\x67\x4d\xf5\x9d\x03\xbc\x09\x73\xed\x2a\x0d\xe2\xe9\xfc\x98\xa6\x66\xc3\x73\x40\x16\xf2\xfd\x80\x12\xdb\x76\x24\xfe\x29\x62\xe5\x88\x6d\x99\xfc\x73\xaa\x6b\xc4\x33\x1d\xe2\xea\x2e\x7f\x20\xd5\x0a\x89\x67\xa2\x22\x88\xdf\x5d\xdd\x95\x6a\x35\x24\x5d\x82\x62\x8d\xb8\xba\x57\x6f\xc3\xbf\xbf\xf1\x08\xd0\x56\x9f\xf8\x9e\x35\x00\x80\x51\x07\xc0\x2e\x01\x30\xa4\xaa\xd0\x00\xd0\x06\x00\x30\x38\x00\xa0\x6f\x14\xcf\xeb\x00\x2c\x74\x0d\xb4\x7c\xdb\x9e\x12\xcf\xf2\x3f\xaf\x0f\x00\xdc\x41\x5d\xc6\xb1\x6a\x80\xef\x01\xf7\x82\xea\x38\x01\x16\xa1\x20\xa0\x11\xdb\x01\x62\x09\x9f\x42\x72\x03\x2a\x8a\x9f\xc6\x0b\x83\x07\xd9\xe1\xa7\x08\xca\xb3\x31\x0c\xd1\xb6\xd6\xc4\xf4\x9c\xa9\x46\x74\xc3\x21\x8e\xe3\x6b\xc4\xf0\x01\x8f\x86\xa3\x11\x0f\x84\x35\xd7\xb5\x34\x62\x53\x8b\xd8\x14\x04\x5c\xaa\x3b\xc4\xf5\xe0\x9b\xeb\x5a\xc4\x03\x68\x75\xc7\x85\xd6\xb0\xa0\x75\x93\x18\xba\xc3\x5f\x4a\x6c\x0f\x68\xae\x67\xbe\xe8\xc0\x26\x79\xc4\x76\x24\x7c\x64\x1b\xe2\x93\x17\x38\x92\x0d\x60\x07\x08\xbc\xc4\x3f\x8b\x28\x42\x18\xac\x41\x0c\x6a\xac\x3d\x62\x99\xd6\x4b\x87\xd8\x06\x8a\x67\x8e\xe3\x4a\x0e\x30\x59\x0b\x5d\x1c\x50\xda\xff\x4e\xe8\x92\x76\x51\x85\xef\x31\x38\xc2\x00\xe5\x8e\x67\x68\xc4\xb0\x01\xe7\x06\xf2\x2f\x0f\x50\xee\x5a\x3e\xa1\x14\xc4\x78\xd7\x25\x0e\xf5\x34\x62\x1b\x0e\x71\x6d\x5f\x23\x8e\x6e\x11\xd3\xa0\x1a\xa1\x96\x81\x96\x45\x83\x02\x97\x33\x74\xbf\xf8\x0a\x8b\x58\x77\x2c\x78\x93\xee\x6a\xc4\x76\x51\xcd\x36\x51\xa7\xc6\x65\xa1\x23\x77\xd4\x91\x3b\xc2\x12\x31\x88\x6d\xc1\x3c\x38\xba\x8b\xa1\xa9\xe6\x5c\x43\x9b\x0b\x71\x3d\x4b\x23\x96\x83\xc6\x50\x4a\x39\x88\xe2\xbb\x41\x0c\xd8\xc5\xbb\x29\xc1\x34\x59\x2c\xc2\x23\x3a\x75\xd0\x52\xef\xe3\xb4\x79\x30\x9f\x9e\x30\x2c\xa0\x05\x09\xc5\x47\xc3\x7b\xd1\x2a\x93\xa8\x21\xf9\xc4\xc4\xa5\xdb\x2c\xc0\x46\xfc\xb3\xaf\x11\xbe\xea\x7e\x61\x11\xdf\x31\x35\x5c\xfc\x2f\x41\x18\xf5\x2c\xc9\x23\x8e\x85\x91\x01\xa6\x08\xc9\x70\x33\xcd\xc2\x12\x0a\x25\x1a\x36\x91\x4c\x10\x93\x4e\xcd\x35\x4e\xfa\xdc\x22\xba\xe9\xbe\x84\x09\x75\x40\x35\x74\x2c\x20\x68\x18\xd3\x82\x78\x35\xc4\xb7\x0c\xfb\xd1\xb0\x1f\x89\xbf\x9a\xf7\x63\xd0\x35\x5f\xee\x73\x0d\xbb\xda\x8b\x12\x2f\x57\x51\xa4\xa5\xfc\xb4\xd6\x11\xdd\x41\xa6\xef\x49\x1e\xd1\xd1\x12\xe2\x1b\xc8\x69\x2c\x4b\x23\x8e\xc3\xbf\xc0\x87\x84\xb1\x72\xc5\x23\xa9\x7c\x4e\x5c\x6e\xee\xb1\x2c\x34\xa6\x17\x65\x12\x8a\x70\x5a\xf1\xac\x6a\xb4\xe0\xdf\x74\x62\x3b\x28\xe6\xf9\x46\x4f\x25\x0d\x7b\x1d\x84\x82\x6e\x07\x83\x47\x43\x88\xd7\x11\xdf\xd1\xd0\xb5\x4c\x89\x69\x1a\x48\x74\x3c\xcd\x20\x56\xf1\x2f\x30\x88\xe9\xc3\xd2\x31\x45\x40\x37\xd4\x44\x71\xd1\xb1\xd6\x2e\xf1\x90\x06\x9a\x3e\x56\x10\x9b\x9e\xe3\x0b\xe9\x41\xb3\x80\x12\x43\xc3\x86\xe7\x80\x28\xec\x1a\x29\x8f\xe9\x39\xb5\x1a\x06\xec\xe7\x85\x4b\x78\x70\xca\x6e\x9c\x1f\x30\xda\x6d\x58\x37\x34\x93\xd8\xba\x75\xee\x03\xc9\x06\xae\xe2\xc3\x87\xa5\x7b\x40\xa1\x1c\xa8\x4b\x31\xc2\xda\x72\x8d\xf7\xd4\x26\xb6\x69\x49\x36\xb1\x4c\x11\x30\xe3\xc1\x8f\x39\xa0\xe6\xdc\x2c\x0f\x41\x14\xff\xce\x5d\xe2\xcd\x29\x31\xa6\xc4\x34\x2c\xa2\x1b\x16\xb1\x5d\x87\x50\x13\xb7\x2f\x31\x5d\x23\x23\xa6\x03\x2f\x87\xef\xf0\x6c\xed\x12\xdb\x74\x10\x7f\x86\xc4\x3f\x4b\xfc\x70\xd4\x4b\x83\xb8\xdd\xb5\x4d\xe6\x2c\x5a\x7e\xa3\x51\x1d\x40\x1d\xea\x47\x85\x0c\xa2\xbb\x9a\x4b\x5c\x3b\xd2\x88\x4f\x7c\x03\x9d\x22\xb6\x44\x0d\xe2\x4b\xd4\xc4\x60\x4d\xfc\xcb\x8f\x8b\x91\x22\xc0\xcc\xb2\x35\x83\x00\x87\xa5\x2e\x50\x48\x33\xa2\xc4\x80\xf9\x33\x9c\x29\x31\x5d\x0d\x71\xed\x6b\xc4\xc3\x3f\x3c\x68\xa8\x21\x03\x66\xa5\x3d\xfe\x14\xc4\x43\xe0\x8c\xc0\xae\x7d\xcd\x92\x2c\xcd\xca\x2c\xfc\x21\x59\x12\xc6\xf0\x7a\x1e\x74\x08\x74\xd0\x83\x25\x03\x7c\xd4\xfe\xac\xc8\xd8\xfa\xbc\x7c\x8d\x83\x6b\xde\x1c\x11\xab\x21\x66\xa9\x46\x9d\x23\x59\xd4\x0f\x0d\xc9\x04\xd9\xce\x9a\x72\xac\xea\x9a\x55\x62\x76\x6e\x34\xe3\x03\xb3\x22\xb8\x70\x0a\xe2\x3a\x70\x65\xd7\xd6\x4c\xc9\xc6\x7a\x06\xfa\x62\x81\x3f\x48\xa6\x66\x4b\x7c\x92\x34\xde\xd5\x3e\x71\x2c\xf3\x30\xcb\x93\xf4\xee\x2b\x7a\x64\x75\x49\x5f\x5b\x73\xeb\x5c\x3f\xd5\xef\x17\xb6\x64\xac\xcd\x53\x63\x4d\xe7\xd6\x39\xda\x78\x0d\x7c\x60\xe1\x03\xeb\xb4\x19\x75\x16\xc6\xd7\xc9\x57\xdb\xa0\x53\x1b\x44\x4e\x09\xa7\x17\xe6\xd6\xe1\xf3\x9c\x69\xc5\x0f\x0d\x7f\xbf\xe7\x1e\x75\x4b\x84\xe0\x3a\x58\x58\x6e\x53\x6e\x6b\xd0\x89\x4e\xb9\x7a\x80\x9e\x02\xbb\x38\xcf\x42\x2c\xcb\xd4\x88\xef\xd9\x53\x8d\x4b\x79\x06\x08\x6e\x40\x4b\x0d\x1f\x9e\x3b\x58\x43\xc4\xd4\x4f\x35\x62\x7a\x36\xd1\x31\x06\xdd\xb3\x09\xf5\x6c\x6c\x0b\x55\x02\xd8\xca\x68\x56\xb3\xdd\x5a\xdf\x50\x5c\x9c\x80\x70\x88\x39\x05\xd9\x0e\x58\x08\xa1\x36\x9a\xae\x44\x1d\x54\xa2\x88\xe1\xd9\xc4\x29\x9f\x58\xe2\x6c\x8a\x3f\x85\xb7\x02\x37\x70\xe0\x7d\xd0\xd0\x87\x2f\x50\xaf\x00\x99\x83\xeb\x14\xa3\x71\x4e\xd1\x88\x74\x4e\x8d\x35\x8c\xfb\x1e\xf6\x94\x4b\x5c\x00\xd2\x04\x9a\x84\x9f\x22\x5c\xdf\xd2\x50\xda\xb5\x08\x85\x2e\x5c\xcb\x84\x27\x12\x31\x5c\x0a\xd2\xaf\x87\xb8\xc0\x7a\x19\x16\x52\xc3\x43\x77\xdd\x14\x44\x63\xa8\x45\x2c\x78\x2f\xba\xee\xa8\xe1\x13\xd7\x32\xb0\x41\xd0\xb1\xe9\xa0\x23\xcf\xf0\xa6\x50\xac\xe3\x9b\x60\x30\x2e\xfa\xf9\x86\x6c\x55\x7d\xa4\x69\x60\xf5\x7d\x8d\x30\xb8\x63\x2c\x40\x74\x9f\x81\x6e\xc5\xdb\xe8\x9a\x27\x8e\x6a\x38\x86\x27\xbe\x7b\x20\xbe\x4a\xc5\x2b\x4c\xe2\xd8\xae\x54\x96\x94\x9f\xa2\x3d\xff\xa5\x71\x53\x18\xff\xce\xcb\x31\x86\x46\xc3\xd6\xf0\xc4\xf0\xb5\xb2\xd4\xf0\x61\x1d\xd8\xc5\x6e\x80\x27\xde\xbf\xf5\x66\xf0\xfe\x88\x9b\xa1\x5a\xf8\x11\x0b\xd2\xf8\x78\x0b\x9d\x58\xba\x2f\xd9\xc4\x70\xcd\xc8\x23\x3e\xb5\x25\x3c\x4e\x39\x25\x96\x43\x0c\xdd\x22\x8e\xeb\x10\x07\x24\x57\x17\x44\x07\xaa\x83\xb8\x4a\x2c\xc3\x05\xad\xd6\x21\xbe\x0e\x82\x6e\x51\x04\xe2\x24\x05\x0e\x4e\x4c\x8f\xae\x4d\xe2\x3a\x2e\x08\x1e\xd4\x02\xcd\x17\x5e\xe1\x6b\x84\x62\xfc\x0d\xce\x9e\x8b\x2a\xb1\x65\x5a\xc4\x31\x4d\x8e\x70\xcf\x06\x21\xc5\x05\x74\x5a\x1a\xf1\x6c\x9b\xd8\x3a\x88\xfa\xa6\x4f\x1c\xd4\xbd\x74\xd7\x24\xa6\x03\x62\x93\xe5\x80\xce\x05\x0c\xdb\x77\x4c\xfc\x46\x09\xe7\xaf\x1e\xaa\xdc\x26\x96\x18\xa8\x68\x6b\xe8\xbd\x23\x14\x95\x78\x9d\x82\xf6\x4c\xb1\x57\x0d\xbb\x25\x26\xcc\xb0\x61\x6b\xc4\x86\x55\x64\xeb\x38\xfd\x08\x80\x17\x80\x9e\x0f\xff\x8a\x55\x42\x01\x56\xd3\xb3\xd7\xa8\xd3\x5a\x11\xaa\xed\xc4\xb7\xec\x33\x9b\xa0\xc4\x67\xe3\xe6\x20\x36\xf4\xe7\xa1\x47\xcf\x32\x1d\x54\xec\xd1\xe2\x60\x3a\x01\x08\xe8\x86\xc4\x3f\xb9\x4e\x4b\x74\xb4\x00\xf8\xd4\x98\xc2\x5e\x25\xd4\x73\x89\x4e\x31\x3a\x49\xd7\x5d\x62\x3b\x4e\x60\x12\x8f\x6b\xae\x4e\xb1\x8a\x88\x6e\x1a\xc4\xb0\xdc\x39\xec\x43\x40\xb4\xae\x5b\x44\xd7\x4d\xf8\x49\x74\xea\x10\xdd\xb5\xb0\x37\xdd\x36\x88\x0e\x6a\xb2\x8f\x86\x0b\xea\xf3\x22\x6a\x3b\x84\x7a\x0e\x31\x4d\x93\x98\x86\x4b\x2c\xdf\x25\x26\x31\x6d\x20\x4e\xc4\x36\x4d\xe2\xc3\xe7\x19\x3f\x13\x6a\xe8\x30\x2c\xcb\xc1\x05\x6b\xc0\x5e\xb3\xf1\xb0\x2d\x68\x78\x36\x20\xcd\x43\xa5\x44\x9c\x11\xb5\x61\xc0\xa6\x8b\xdf\x22\xd0\x4d\x2c\xd8\x8c\x2e\x48\xb5\xa8\xd9\xe8\xa6\x46\x0c\xc7\x21\x3e\x8c\xd0\xa3\x06\xa1\xd4\x80\x27\x84\x7a\x54\x23\x36\xae\x3d\x57\x23\x9e\x0e\xc8\x72\x0c\x8c\x77\x30\x4a\x4a\xa5\x53\x57\x23\x16\xda\xa8\x3a\x88\x34\xd1\x88\xe2\xbb\xce\x14\x96\x1a\x40\xe8\x9a\xc4\x36\x50\x59\xb3\x28\xf1\x2d\xf8\xe6\x38\x5e\xa4\x51\xe2\x51\x10\xae\x75\xef\x25\xc8\x64\x8e\x44\x41\xfa\x46\x32\xae\x13\xd7\x71\xf8\x17\xd3\x42\x9a\x60\xb8\x50\x45\x83\x05\x0f\xeb\x5d\xe3\xeb\x1d\x37\x8c\x26\x36\x8c\x01\x8b\x8d\x52\x87\xd8\x80\x0f\xf8\xe2\xc1\xaa\xb9\x5f\xc0\x1a\x37\x24\x93\xb8\x96\x1d\x69\x36\x8a\xa6\xc4\xb5\x78\x74\xae\x45\x0c\xc3\x8d\x3c\xe2\xa2\x1b\xd9\xf3\xf0\xa0\x93\x43\xa0\x26\x3e\xc4\xe3\xce\x12\xe0\x87\xf8\xa6\x7b\x86\xd4\xcb\x8e\x88\xef\xba\xc4\xa6\x1e\x9a\x40\x7c\x4b\xb2\x88\xe9\x18\x11\xb0\x00\x34\xf1\xe9\x86\x1d\x50\xa2\xeb\x80\x1a\xbd\x88\xf0\xd0\x38\x38\x67\xb0\xb0\x30\xe0\xc7\xa5\x11\xa0\xd2\x14\x07\x06\x9d\x80\xd8\xb6\x09\xff\xaa\x35\xe9\x11\xdd\x70\x81\x52\x83\x7e\xe3\x13\xaa\xbb\xc4\x30\x2c\x62\xda\x1e\xb1\xe0\xbb\x65\x11\xea\x7a\xc4\x21\x26\x1a\x5e\x75\xdb\x27\x36\xe8\x3c\xd4\x25\x26\x85\xd5\x4e\x1d\x80\x13\x06\x6f\xc3\x76\xa5\x46\x66\x10\x07\xc8\x01\x7f\x64\x6a\xf0\x0c\x68\x8d\x86\xab\xd1\x83\xe5\x64\x9a\x16\xf6\xe5\x61\x21\x31\x6c\xd8\x74\x9e\x89\xc7\xae\x89\x09\x6a\x28\x14\x59\xba\xdb\x03\xb0\xaf\x01\xc4\x6b\x0d\xf6\xc0\xb6\x20\x0b\x10\xca\x1d\xe2\xda\x12\x75\x25\x27\xda\x3f\xd4\x22\x0a\xe3\x8f\x47\x74\x95\xe9\xae\xc5\xa5\x53\x3b\x02\xbd\x00\x8f\x5b\x1b\xbe\x15\x98\x44\xc7\xbd\xae\x97\x7b\x1d\xf0\x40\x7c\xc3\x99\x72\x9a\x02\xfa\x87\xe3\x50\xc0\x87\x89\x2d\x61\x7f\xb9\xa0\x7c\xba\xc4\x77\xa7\xc4\xb1\x5c\x20\xaa\x84\x93\x1f\x1d\x36\x04\xa8\xe0\x3a\x32\x4f\xcf\x03\x0a\xa6\xe3\xa6\x02\x26\x49\xf1\xb5\x16\x82\xe0\xc2\xfa\x31\x3c\x63\xaa\x11\x07\xf6\x1c\xee\x63\xbe\x4f\x39\x08\xb8\x61\x3d\x93\x43\x00\x94\xcf\xd4\x81\x1a\x1b\x16\x76\x14\xe1\x53\xf8\xa0\x2f\x4d\x62\x72\xdb\x19\xd2\x2d\xf8\x42\xa9\x2b\xa1\xdb\xd8\xe0\xbb\xca\xf3\x00\x26\xd8\xaf\x8e\x69\xc0\xe8\xf0\x1d\x11\x62\x42\x1b\xc0\x04\xaa\xad\x1a\xa2\x82\x63\x42\x42\x4c\x00\x22\x38\xf2\x00\x0f\xc4\x77\x01\x15\x81\x49\xa8\x0e\x2b\x8d\x56\x9b\xc0\x07\x4d\xdb\xd4\x6d\xfe\x7e\x13\xc1\x87\xf7\xe3\x4e\x46\x34\x20\x16\x34\x8e\x05\x02\x38\x76\x0c\xb4\xae\xa2\xa1\xc5\x2b\xde\x6f\x7a\x1c\x0d\x48\x99\x7c\x44\x27\xb4\x46\x24\x14\xb1\x1d\x74\x0a\x6d\x89\x83\x9b\x17\x43\x95\x6d\xb7\xe8\xc3\xe2\x33\x61\x00\x02\x7d\x9c\x09\x03\x47\x85\xfd\x2f\x34\x9f\x58\xa6\x2b\x59\xc4\x33\x23\x0d\xf9\xb0\x41\x03\x4e\x50\x04\x59\xe1\xa3\x31\x4c\x97\x18\xd8\x21\x6e\x7c\xa7\x1c\xa6\xa1\xfb\x84\x3a\x0e\xf1\x3c\x0b\xfe\x15\x8f\x81\x4a\x53\x9c\x5d\xc3\x47\xd9\xc3\x46\xd9\x43\x47\xf6\x0b\x93\x09\xd2\x8a\x8e\xf4\x56\x37\x4a\xc1\xc8\xd4\x3d\xa0\xf2\xc4\xf3\x81\x18\x89\xcd\x06\xcc\x14\xf8\x25\xa6\x2a\x30\xc4\xa7\x28\xb3\x74\x10\x65\x2c\x2f\x02\x5d\x17\xc0\x7f\x41\x89\x8e\x38\xd1\x4b\xef\x83\x87\xdc\x84\x9a\xc0\x56\x74\x8a\xb0\xd8\x84\x22\x1c\xc4\xf0\x3d\xbe\x21\x70\x4a\xfd\x0e\x4c\x3a\xc2\x44\x5c\x1b\x1d\xcc\x86\xe7\xc2\x10\x88\x0d\xa2\x05\x3c\xb6\x60\x06\xd0\xe6\xee\x50\x10\xcf\x80\xbf\xf8\x3e\x4a\x0c\x86\x0f\xe5\x1e\xfe\x45\x14\x48\x25\x0a\x0a\x0c\xc0\x02\x40\xcb\xa2\x01\x0c\xcb\xd0\x81\x5a\xe9\x0e\x47\x82\x65\x3b\x05\x36\x10\x64\x10\x1c\x28\x8c\x11\x85\x0c\x13\xb6\x93\xa7\xbb\x0b\x8f\xe8\xb6\xad\xb9\xc4\xb7\x2c\xdc\x11\x14\xd7\x38\x45\x34\xd8\x1e\xa7\x6e\x85\x35\xcc\x21\xa6\x61\x4b\xf6\x36\x34\x38\xb8\x62\x3c\x6f\x07\x1e\x4c\x60\x84\x14\x40\x01\x48\x00\x90\x08\x70\x0f\xc2\xd0\x14\x94\x0c\x60\x4a\x1e\xa1\x3e\x0c\xd7\x87\x75\x03\x42\x9c\xe9\x05\xad\xc5\x23\x71\xa7\x45\x67\xf5\x48\xb0\x7a\x50\x88\x9a\xd6\x50\x57\x60\x0e\xde\x6e\x80\x90\xc7\x51\x55\x60\x8a\xb8\x76\x50\x5f\x37\xd8\xbe\x7f\xd9\x68\x48\xa8\x60\xd5\x00\xc4\x00\xf9\x94\x18\x06\x31\x4c\x50\xa9\x6c\x62\xda\x16\x71\x7d\x13\xff\x6e\x99\x39\x1f\xd7\x8d\xb7\x6b\xe2\x0c\xcf\x15\xeb\xde\xc6\xd0\x6f\x2c\xda\x65\x91\x8c\x92\x60\x16\xc6\x37\xfb\xdb\x62\xb0\xca\xf8\x13\x70\x8d\xbe\x8a\xd4\xf7\xfd\x67\x58\x2a\xf7\xb2\x13\xbc\x97\x62\x22\xf3\x2b\x4e\x56\x29\xd3\xc2\x69\x12\x6b\x02\x0a\xf9\x87\xbf\xcc\xd8\x75\x26\x18\x4a\x96\xa7\xc9\x47\xd6\x56\xa0\xf9\x53\x4d\x98\x84\xcc\x62\x78\x71\x12\x33\x59\x0a\x67\x13\x39\x90\x0b\x75\xd7\x8e\x1c\xc9\x5c\x7b\x91\xe6\x48\xa6\xe6\x68\xe6\xb9\xc7\x4d\x3d\xfc\x1d\xab\x8c\x49\x08\xe8\x78\x9e\xb2\xeb\x89\xfc\x5f\xc1\x0e\xe8\xb4\xab\x20\x63\xd0\xc1\xe1\x2d\x97\x69\x72\x93\xb2\x2c\xab\xeb\xfa\x78\x80\x63\x1a\x25\x19\x9b\x1d\x31\x7c\x48\xf2\xe6\x1a\x3d\x77\xd0\x4a\xe7\x3a\x9c\x8b\xd9\xf0\xdf\x7b\x57\x32\x81\x44\xbb\x92\xb3\x36\x4e\x9d\x6e\xf0\xb3\xde\x76\xd7\x1b\x6d\x77\x3d\x54\x69\x1f\x7e\x35\x89\xe7\x3a\x92\x0d\x7a\xd1\xa9\x4f\x2c\x17\x03\xcf\xa8\x0f\x1a\x17\xd2\x70\xd3\x34\x34\xfc\x7e\xff\x06\x74\x00\xc9\x3b\xf5\x88\x8f\xf0\x51\xe2\xa2\x5a\xe5\x83\x86\x05\x0c\x0d\xff\xe2\x53\x5d\xe2\x5f\x4d\x5f\x12\x65\x7b\x64\x2c\x42\x7c\x96\xf9\x6e\x8f\x98\x07\xca\xa0\xc4\xf5\xce\x40\xaa\x95\x6c\xc9\x94\x1c\x62\x18\x11\x48\xde\x20\x95\x5a\x2f\x31\xbe\xd8\x23\x8e\x64\x49\x3e\x88\x60\x20\xfd\xf4\x22\x93\x18\xe8\xf8\x17\x8a\xa3\x03\xe2\xa1\x71\x46\x7d\xe2\x7a\x12\xf0\x79\xf1\x9e\xfb\x37\x1e\xf1\xa5\xcf\xc0\xcf\xa9\x4f\x1c\xe7\xcc\xd0\x31\x70\xda\xea\xce\xd5\xc0\xb2\xd0\x0c\x62\x3b\x68\x6a\x41\x77\xbd\x6f\x6a\x16\x41\xe9\xdb\x3a\x03\x40\x40\x20\xde\x23\x6c\x86\x1f\x46\x5a\xb2\x23\x9e\xc4\xd8\x6b\x25\xcf\x29\xf1\x3f\x03\x55\xc7\x5a\xfd\x18\xad\xe2\x9c\x53\x7d\x4e\xa1\x8b\x62\x3b\x68\x20\x0d\x9a\x3b\xb6\xc3\x2e\x94\xe2\x95\x7a\xda\x32\x58\x65\xa5\x09\xf0\x6b\x58\xca\xa9\x44\xd7\xce\xdc\x38\xa7\xa7\xf4\x7e\x61\x49\xba\xf8\xd1\x48\x57\x54\xc0\x12\x05\x77\x5f\x1d\x94\xc8\xd1\x90\x56\xd7\xdf\xbf\x60\xf1\xea\x58\xeb\xca\x92\x28\x06\x17\x69\xc6\xa9\xc5\x13\xe2\xd9\xcd\x9f\xee\xda\x98\x53\xe7\xdc\x39\xdd\x7d\x02\x69\x11\xc6\xab\xec\x1b\xf5\xe6\xe1\xe9\x02\x77\xad\x19\x73\xaa\xef\x41\x3c\x1b\x43\x39\xb6\xe5\xd9\x95\x28\x5d\x23\x20\x9a\x71\xea\xde\x2f\x6c\xcd\xff\x17\xb9\xbf\xf6\x43\xc3\xd1\x13\x92\x50\xf3\xd4\x5e\xf3\xa4\x1b\xfb\x41\xf0\xb5\x32\x87\x1c\x2d\xe7\x85\x21\x51\xfd\x90\xe5\x95\xa4\x4c\xc3\x8c\xbe\x49\x9c\x07\xc7\x1b\x93\x23\x51\xbd\x3d\xa2\xac\x18\x49\x39\x80\x1a\xe0\xd4\x90\x0e\x6b\xa0\x39\x87\x35\xd8\x0b\x13\x6b\x96\xe6\xe1\xf4\x88\x78\xa0\x86\xe4\xb5\x66\x2d\x2b\x61\x2a\xe1\x96\x0a\xb8\x61\x07\x19\x07\xa1\x41\x97\x3a\x3c\xf3\x4b\xb0\x80\x97\x4c\x86\x71\xd8\x9b\x05\x77\x7f\xde\x62\xd4\x72\x9b\x18\xed\xdc\x26\x1c\x8f\x3f\xfc\xe5\xa6\xa1\x21\xf4\xf8\xdf\x7e\xf8\x0b\x07\x42\x9a\x7e\x9a\xc8\x54\x97\xa5\xe9\x1d\xff\x9b\xf2\x3f\x7d\x6e\xbc\x3c\x0d\xe2\xec\x3a\x49\x17\x13\x19\xbf\x46\x41\xce\x46\x86\x64\x28\x30\x4a\x9c\x16\xde\xea\xbf\x7e\xfe\xf9\x67\xb9\x10\x68\xa8\xb9\xb6\x4e\x9d\xb5\x66\xcd\xa9\x71\xff\xc6\x93\xa8\x15\x50\x89\xa2\x1e\xca\x8f\xa0\x50\xa9\x08\x0b\xd4\x01\x89\x45\x57\x42\xb7\xb8\x02\x95\x03\xb4\xa4\xbe\xbe\x5d\xe8\xfa\xdc\x15\x3d\x7b\xdb\x3b\x96\x92\x65\x30\x0d\xf3\xbb\x89\x4c\x6c\xdd\xc0\x89\xb9\xa9\x26\x67\x19\x7d\xd3\x5c\x6d\xae\x59\x6b\x91\xc4\x96\x53\x20\x0b\xb3\x13\x5b\x73\x6b\x0f\x42\x54\x1f\xdb\xd1\x1d\xac\xa6\x84\x01\x34\x00\x96\x31\x07\x20\xf1\xe0\x98\x88\x93\x3f\x77\xef\x17\x1a\xe5\x29\x8a\xbf\x41\xce\x87\x88\xf9\x0a\x8c\x6f\xae\xa1\xa1\xda\xc0\x43\x46\x80\x09\x07\x8f\x16\xef\x73\xba\x06\x41\xfa\x7a\x9c\xf0\xe0\xd3\x60\x43\x7c\xf0\x4b\x16\xe4\x3f\x57\x6c\x75\xb4\xa3\xf8\xd4\x97\xfc\x53\x03\x24\x2d\xf7\xdc\x47\xd1\xb6\xf8\x65\xdd\xbf\x31\x24\xea\xcc\xf1\x84\xf6\x29\x0f\xef\xd2\x25\x6b\xad\x39\x91\x06\x3a\xad\x2d\xed\xcc\x38\x91\xb2\xeb\x94\x65\xf3\xa3\xc1\xea\x12\xc7\x96\x1c\x62\xda\x2f\x5c\xcc\x75\xcb\x3f\x85\x01\xd1\x90\xac\xf2\xc0\xb0\x4b\x7c\x1f\x0f\xef\xf2\x6f\xb8\xd6\x5d\x09\x1b\xf8\x92\x37\x35\x89\x0b\x7a\xb5\xc3\x4f\x76\xdb\x36\xc6\x85\x68\xb0\xe4\x88\xee\xbd\xb0\xa1\x12\x7e\x54\x81\xb6\xde\x54\x33\x89\x09\x1b\x08\xb4\x4a\xc7\xd7\x1c\xcd\xc9\xf8\x17\xc9\xd1\x9c\x32\x2f\x03\xa1\x16\x3f\x19\x8c\xfe\x38\xd7\x3b\xa3\x26\x90\x1f\xf7\x1c\xdd\x0a\xa6\x0d\xea\xdc\xce\x44\x4e\xe9\xea\xcb\xfc\xda\x03\x86\xa5\x74\x15\x1f\xce\xda\x0c\xc1\xda\x0c\x64\x6d\x9e\xbc\x97\x85\xcd\x82\xc1\x0c\xf7\x62\xef\xd7\x8b\xb1\x65\x20\x0d\xeb\xd8\xf0\x9b\x86\x2d\x99\x15\xef\xca\x58\x90\x4e\xe7\xed\x9c\xd0\xf5\x94\xd0\x9d\x8c\xd0\x12\x3c\x3b\x34\xbe\x80\xf3\x21\xe2\xfa\x91\x46\x0c\x4f\x23\x86\xfb\xc2\x21\x96\x4b\x25\xfe\x29\x56\xb1\x89\xd9\x61\x8a\x7f\x9c\x1b\x3b\x18\x35\x09\x6b\x8c\xdb\x26\x74\x5f\x03\x22\x6d\x11\x03\xcf\x4f\xb8\x11\x31\x5c\x62\x78\x6b\xe8\xdb\x96\x2c\xe2\xfb\x67\xfc\x04\x00\x75\x22\xcd\xc2\x24\xf7\x5c\x28\x7d\x69\xa1\xd3\x93\x4a\x86\xe4\xe1\x91\x1b\xe8\xfa\x3d\x3e\x2c\xb3\xd2\x50\xa9\xa8\x04\x0f\xb0\x9a\xf8\x4e\x1b\xf9\x40\x32\x96\xe7\x61\x7c\x73\xbc\xd3\xed\x3e\xe6\x47\x35\x88\xef\x4d\x89\x6e\x69\xc4\xc4\x60\x52\xe2\x60\x7a\x65\xe2\x7b\x68\xe5\xb7\x34\xa2\x9b\x18\x53\x2c\x9e\x46\x06\xc1\xd0\x7f\xc7\x9e\x12\xea\x6b\x84\xda\xe8\x83\xb3\x0c\x42\x0d\x68\x1c\x69\x86\x66\x12\xcb\x99\x6a\xf8\xc0\x30\x34\x0c\x77\x80\x3e\x30\xd8\x01\xb6\x25\x60\x6a\xaa\x11\xdb\xc0\xd8\x17\x82\x36\x70\x13\x8f\xf8\xe3\x1b\x30\x3b\x8a\x41\x1c\xfb\x05\xb1\x3c\xaf\x4a\x48\x2d\x51\x4b\x02\x2e\x3d\xd5\x88\x61\x63\x74\x8f\x43\xa8\xa7\x11\xcb\x27\x96\x81\xad\x24\x68\xc5\x5d\x88\x78\x24\x1a\x53\x42\x62\xc7\x84\xbb\x34\x2c\x5f\x83\x37\x1b\xa6\x86\x93\x6a\xf9\xd0\x0d\xd4\x06\xb8\xa4\x02\x6e\x13\xc1\xd6\x61\x4a\x09\x35\x60\x50\x30\x68\x89\xf2\xce\xf1\xc0\x05\x16\x3b\x36\xfe\xf1\x31\x36\xc5\x34\x89\x6e\x12\xc7\xe1\x4f\xe0\x65\x55\x13\xea\x13\x6a\x6b\xc4\x00\x6a\xa9\x15\x5d\xf2\xd7\xc1\x2f\xc3\x20\xa6\x4f\x4c\x01\x88\x80\x92\xd8\x06\xa6\xc9\xd0\x3d\x20\x9e\xc5\x18\xca\x41\xc2\xcb\x0c\x8b\x77\xc9\x31\x30\xc7\x88\x20\x34\x5f\x62\xcc\x09\x74\x03\x88\x29\xb0\xc9\x9d\x8a\xe8\xc7\xa1\xae\xc6\x33\xfe\x09\x8c\x8b\x29\x21\x06\xac\x75\xc4\x8a\x54\x4c\x97\x98\x4d\x31\x99\xb8\x08\xa0\xdf\x72\xb2\x8b\xd5\x80\xa9\x35\xa8\x4d\x50\x79\xf5\x4d\x49\x07\xc1\x06\x77\x8b\x26\xdc\xdc\x59\xf1\xa3\x48\x31\x20\x99\x3c\x83\x82\x2b\x15\x0f\x8b\x1f\x45\xe9\x4e\xf1\x23\xcb\x83\x63\x1f\x04\xe4\xc7\x2e\xdc\x33\xea\x11\xea\x49\x06\x45\x47\x9a\xa5\xb9\x44\x37\xcf\x0c\x43\xf2\xd1\x63\xed\xe2\xda\x77\x28\xbf\xc6\xc1\x27\xd4\x97\x3c\xe2\x98\x92\x28\xb7\x09\x1e\xd5\x70\xcd\x33\x1b\x0f\x91\xec\xce\xc8\x86\x03\x39\xfa\x19\xc0\x16\xb8\xc6\xbe\xe0\x16\x87\x4f\x5c\xa9\x81\x05\xb3\x81\x85\x62\xc6\xad\x48\x33\x89\x8b\x0e\x64\x57\xa2\x78\x38\x18\x78\xb7\xa1\x19\xc4\xf3\x24\x8b\xa7\x3a\x12\xf1\x25\x34\x42\x83\xaf\x45\x74\x0c\x1e\xf1\xa0\x10\xea\x4a\x58\x17\x0a\x0c\x9e\x72\xd7\xde\x23\xb9\x50\xb6\xba\xd2\xbe\xc2\xad\x12\x94\x4a\x7e\x54\x3f\x87\xef\x99\x12\xb5\x4e\xa9\x77\x0e\xca\x02\xa6\x05\xe7\x17\x4e\x70\x89\xe7\x0c\xc8\x3b\xc5\x3b\x12\x0e\x80\xf8\xb8\x19\xe3\x40\x8a\xb7\xa3\x22\x33\x53\x95\x09\x80\xba\x12\x75\x4e\x2d\x0e\xb8\x3e\xf7\x09\x75\x23\xae\x8f\x70\xc8\xcd\x3d\xd2\x3e\x66\xb7\xc1\xf2\xab\x98\x85\x38\xa7\x3b\x33\x01\xf4\x32\x45\xd1\x29\x4f\xf2\xe1\xf0\x04\x46\xf7\x6f\x0c\x98\x0c\x0d\x8a\x35\x6b\x6d\x9e\x52\x7d\x6d\xcc\x5d\xa2\xd3\xb5\x79\x06\x45\xfb\x41\x7f\x7c\x53\x0e\x1e\xf9\xd3\x31\x87\x84\x66\xac\xe1\xeb\x5c\x33\xcf\xa8\x0d\x2b\xc1\x42\x70\xe7\x00\xbd\x2f\x99\x67\x20\x58\xf8\xfe\xdc\x3c\xa7\xd6\xdc\x38\xe7\xdf\xcf\xfc\xdd\xb2\xbc\x9c\x87\x2c\xd5\x58\x9c\xb3\x74\x99\x86\xd9\x17\x52\x85\x03\x5c\xc2\x0d\xff\x6e\xb1\xba\x28\x71\xed\x73\x2f\xd2\x5c\xcd\xd2\x5c\xc9\x5a\x7b\x11\xa6\x40\xd3\xac\x35\x6c\x78\x3c\x09\x2f\x11\xdb\xa5\xc0\x46\x29\xa1\x96\x79\xee\x13\x4c\xb7\xeb\x62\x8e\x5d\x7b\x6d\x12\x9f\x0b\x07\xbc\xd4\x23\x76\xe4\x68\x26\xc6\x43\x49\xf0\x67\x6d\x12\xcf\xa0\x3c\x13\x5d\x84\x89\x80\xf5\x48\xf3\x25\x5b\xf3\x35\xfb\xdc\x8d\x50\xa4\x02\xc9\xcc\xb0\xf1\xe2\x14\x7d\x0d\x64\x07\x8f\x3c\x9c\xf9\x12\x2c\x1a\x2b\x02\x11\xc2\x15\x8c\xc8\xc5\xde\x5d\x7b\x8d\x91\x3d\x1a\x7f\x87\xc6\xdf\xb8\xc6\x70\x1f\x24\x33\xee\x7d\xe1\x8f\x7e\xf6\xc3\x5f\x80\xf6\x06\xe9\x7f\xa7\xc1\x2c\x64\x71\x2e\x7d\xa2\x13\xd9\xd6\xff\x97\x2c\xdd\xd1\x89\x0c\x7f\x3f\x19\xc5\x03\x63\x22\x53\x1d\xbe\x41\xdb\x2b\xf9\x87\xbf\x64\x79\xb2\x94\xe0\x43\x9b\xc2\x34\x16\x76\x1f\x7c\x52\xd9\x71\x0c\x5b\x96\x92\xeb\xeb\x8c\xe5\xd8\xe1\xb3\x7d\xdb\xd5\x9a\xe1\x6b\x61\x91\x34\x81\x2d\x1d\xe6\x7b\x68\x1b\x8b\x20\xfb\x88\x80\x4f\x4b\x23\xd5\xf5\xf5\xb5\xdc\xeb\x32\x87\x37\x41\x7d\x5e\xd8\x67\x64\xeb\x36\xa8\x59\xd6\x56\x69\x34\xfa\xaf\x2b\xa5\x61\xcb\x92\x25\xe8\x50\x94\x4d\x95\x32\x10\xa0\x31\xeb\xf7\x6d\x7b\x17\x6e\x86\xe4\x4b\xf3\xaf\x7c\xd1\x2e\xd8\xba\x30\x8d\x33\x5b\xf2\xaa\x5d\x21\xb6\xca\xfd\x82\xe8\x20\xdb\x9f\x51\x4f\xf2\x88\xbd\x76\xcf\xa8\xc1\x9f\xe0\x69\x61\x9b\xd8\x6b\xad\x7c\x66\xff\x67\x2d\xfe\x21\xd6\x62\x9e\x06\x47\x34\xb1\x38\x92\x8b\x52\x45\x3b\x3b\xbc\xd7\xc9\x0e\xcf\xeb\xcd\xbd\x73\xf7\x7e\x61\x6a\xf4\xd4\x3e\xb7\xe6\x26\xb1\x23\xaa\xd1\xb9\x1d\x51\x89\x9e\x52\x7f\x6d\xdc\x2f\x34\x24\xd7\xd4\xf3\xce\xdd\x39\x5d\xd3\xff\x9f\xbd\xbf\xdd\x6e\x1b\xc7\xf2\xc5\xe1\xef\xe7\x2a\xf8\x70\xd6\x39\xdd\xbd\x5a\x54\x2c\xc9\xaf\x59\xe7\x9c\x1e\x97\x9d\x54\x92\x4a\x5c\xe9\xd8\xa9\xea\xea\xb4\xd7\x34\x44\x42\x12\x62\x8a\x60\x81\x90\x15\x67\xce\xac\x35\xf7\x70\x3e\x3c\xeb\xb9\x81\xe7\x46\xfe\x77\x32\x57\xf2\x5f\x78\x21\x09\x90\x00\x09\x4a\xb4\xe5\x54\xb9\x66\x56\xc7\x92\x48\x10\xdc\xd8\xd8\xd8\xaf\xbf\xbd\xc7\xfe\x5c\x04\x23\x0e\x74\x5c\xf9\xaa\xe5\x08\xa2\xab\xa4\x37\xbf\xd7\xc4\x1b\x1d\xdd\x8e\x17\x3c\x8a\x3b\xf9\xfa\x6e\xe2\x1d\xf0\x68\xe3\x4f\x07\xaf\x26\x5f\x97\xa3\x3d\x8f\xc7\x77\x17\xc7\xdc\x0f\x7b\x2c\xcb\xf0\x0e\x17\xe3\xaf\xef\x8e\xbc\x93\xdb\xf1\xab\x09\xf7\xd6\x8e\x17\xe3\x9f\x4e\x5e\x1d\x7d\x5d\x8e\xf6\x3d\xae\x27\xc8\x98\x25\xb3\xb6\x03\x76\xbc\x1e\x2d\xf6\x7f\x3a\xe0\x18\x62\xfc\xfe\xd6\x33\x76\x95\xcc\x70\xdc\x33\xb2\x13\xc7\x3c\x1e\x71\x1c\x64\xae\x3b\x8e\xf7\x04\x4a\x3c\xd7\x23\xb9\x4e\x36\xd6\x00\xa7\x39\x46\x63\xb0\x2f\x3c\x0c\x07\x27\x5f\x97\x27\xcc\xaa\x1d\x4d\x86\xa3\x63\xa9\xc3\xed\xf3\x82\xf2\x21\x07\xfe\x3f\x9e\x30\x09\x23\xe0\xdb\x25\xfe\xfc\x5e\xcc\xee\xe3\x23\xb8\xbe\x70\xbf\x60\x4f\x63\xef\x60\x78\x3c\x91\x93\x3d\xd1\xdf\x6d\x22\x26\x7b\x24\xb0\xa1\x8f\x27\x9e\x68\xe8\x30\x3c\x9e\x88\xd4\x8c\xe1\x64\x5f\xaa\xd8\x07\x02\xc1\x3a\x07\xae\xe7\xaa\x54\xfe\x5e\xb9\x32\x2b\x5a\x45\x1c\x0f\xdb\x33\xa6\x57\x69\x9f\xd0\x74\x4c\xe3\x58\x70\xbc\xa9\xdb\xe0\x70\xc1\x2c\x2a\xf6\x7f\xde\x11\x7b\x87\xfe\xa0\xe9\xfc\x55\xc6\x4e\x39\x32\x07\x09\xfa\x0a\xfa\x05\x4d\x1d\x7b\x47\x3f\xf1\x02\xcb\xe3\xc5\x78\xef\xa7\xa3\x57\x23\x8e\x55\x3a\x3a\x79\xb5\xaf\xf6\x1d\xac\x7e\xfa\xe9\x44\xfd\x70\x20\x3e\x30\x76\x7c\x75\xac\x5d\x58\xf9\xa4\xde\x76\x9c\xdf\xc6\x36\x79\xbe\xb9\xf3\x42\xdb\xf2\xcf\x9f\x4e\x16\xc7\x22\x3d\x67\x1c\x1c\xf3\x1a\xdc\x85\xec\x20\xe9\xed\x2b\x1f\x9d\x28\xd8\x73\x88\x64\xec\x8d\xc6\xa1\xa8\xc6\xe5\x40\xc1\x47\x27\xbc\xca\x59\x29\xa6\x55\x8a\x74\x8b\xd2\x67\x6f\x5f\x46\x70\xc7\xc3\xc3\x23\x6f\x2f\xe0\x79\xd8\xfb\xc1\xb1\xb7\xcf\x93\x57\x6e\x03\x51\xa5\x7b\x78\x18\x1c\x0c\x27\x93\x60\x3f\x38\x76\x00\x97\xe7\xaf\x77\x1f\xe1\x96\x09\x6f\xbd\xd1\x39\xba\x52\x8d\xd0\xf0\xe0\xbd\x40\x67\xe5\x90\x03\x93\x7d\x6f\x12\x4c\xbc\x49\x16\x4c\x02\x01\x91\x1c\x08\x28\x65\x81\x95\xac\xe0\x2a\xf3\x73\x8b\x17\x93\x7b\xfb\x3c\x33\x8c\xe9\xea\xa3\x8c\xd7\xda\x70\x13\x61\x74\x3b\x7a\x75\x78\xdb\x7e\x68\x69\x34\xfa\xa6\x5a\x94\x78\x47\x8f\x80\x70\x14\x82\x65\xaf\x2d\x01\x3c\x9e\xa5\x37\x39\xe6\x58\x37\xfb\x27\x1c\x25\x42\xfc\x35\x1e\x1e\x5c\x8e\x8e\x86\xc7\xc7\x1e\x87\xd2\x39\xf0\x8e\x2a\xdd\xfb\xf6\xbc\x03\x0e\xb7\x5c\xc0\x70\x8f\x87\x27\x27\x82\x38\xfc\xaf\xc9\xe5\x68\x8f\xfd\x70\xe0\x9d\x78\x07\x67\x47\xec\x7b\x66\x4e\x1e\xb2\x3f\x0e\xbd\xe3\x2c\x27\x11\x23\xd2\xd1\xf0\xc0\x9b\xb0\x95\xe2\x35\x24\x07\xc3\x83\xe1\xc9\x98\xfd\xe3\x8d\x99\x65\x3b\x3a\x59\x8c\x46\xc2\x2e\xe4\x0b\x73\xcc\x6b\x5d\x8f\x02\xf6\x23\xbb\x8a\xff\x21\xa0\x9f\xd9\x86\x9e\xb0\x31\x8e\x84\x23\x95\x3b\x2c\xd9\x00\x47\xc5\xfd\xc3\x63\xbe\xa5\xc7\x62\xa2\x93\xa3\x60\x32\xdc\x3f\x3a\x1b\xed\xf1\xb0\xc2\x70\xe4\x9d\x70\x78\x0d\x7e\x14\xb6\xbb\x01\x6e\x51\x86\xa6\x28\x46\xf4\x2e\x58\xa0\xa8\xd7\x53\xfb\x28\x1c\x0f\x8f\x18\x5d\x45\x0d\x09\x6f\xbc\xb4\xe7\x71\xb7\xf6\x68\x22\x81\x98\x38\x72\xc3\xf1\x24\x1e\x0f\x39\xd0\xc6\x09\x5b\xcc\x03\x8e\xfd\x73\xc8\xa1\xf0\x39\xb8\xe3\x64\xb8\x3f\x09\xf6\x05\xea\xfb\x11\xfb\x6b\x72\x12\x1c\x06\x47\xc3\x83\x60\x34\x12\xff\xf0\x8a\xd3\xf1\xf0\x68\x9f\x99\xe1\x93\xe1\xc9\xf1\xf0\x28\x1e\x0f\x47\x87\xbc\x56\x8b\x91\xe6\x88\x69\x35\x3c\x78\x37\x9c\x1c\x48\x08\x9d\xaf\xef\xc6\xde\xfe\x70\xcc\xae\x1c\x8b\x52\x84\xe1\xfe\xe1\x70\xff\xf0\x74\x34\x1a\x1e\xef\xed\x7b\xf2\x9f\xbd\x22\x6e\x18\xb2\xc7\x7b\x1c\x84\xe7\x90\xa9\x1c\x1e\x2f\x41\x17\xf5\xc6\x22\x92\x33\x09\x86\x13\xe9\x93\x3c\xde\x8f\xb9\xef\x5c\x24\xf8\xf2\x0e\x70\xe3\x91\x68\x17\xea\x4d\x86\xe3\x23\x4f\x80\xfe\x8d\x8f\xbe\xbe\xe3\xad\xb6\x4e\x86\xc7\xf1\x68\x28\xab\x97\x43\x51\x59\x3a\x0a\x86\x7b\xc7\xec\xe5\xd9\x3f\x87\x07\xb2\x2a\xc8\x2b\x19\xcf\x1b\xf2\x12\x41\x0e\xcc\xb2\x37\x11\x11\x03\x7d\x98\xc3\x23\xc6\x2b\x4c\xe9\x19\x1e\xf0\x9a\x2a\xf1\x0f\x5b\x97\xe0\xa0\xc8\xa8\xe5\xe5\x8f\x27\x43\x8e\xbf\x35\x91\x17\x7e\x5d\xee\xf3\x42\x90\xa3\xe3\x78\x32\x1c\x49\xe4\xfd\xbd\x71\x30\x1c\x89\xd4\x64\x29\x48\x98\xe8\x08\x26\x71\x30\xe4\x2e\xab\x2e\xfc\x96\x2d\xf0\xba\x4f\x7e\xdb\x1f\x1e\x9c\x1d\x79\xb2\x89\x02\x53\x0c\x0f\x47\x4d\xcb\x96\x9d\x0c\xc7\x47\xbc\xb4\xd7\x13\x6c\x14\x5a\xd8\x4b\xba\x7c\xc2\x3a\xd9\x32\xf1\x87\x27\x3a\xfa\xe4\x4c\x1e\x88\x3f\x02\x0e\xe1\xb8\x17\x70\x53\x8b\xc9\x17\x45\xc4\x2a\xb2\xc3\x9b\x14\xf2\x58\xa1\x67\x1b\x1d\xd7\x80\x24\x9d\x6a\x36\x3a\xa7\xe2\x4e\x86\x7b\x27\xde\x1e\x63\x44\x5e\x1c\x3b\xe2\x41\xbc\x11\xfb\xf6\xed\x70\x6f\xec\x1d\x0e\x39\x4e\xcf\x78\xb8\x77\xc0\x59\x6f\x34\x11\xff\x9c\xdc\x0e\x8f\x79\xd9\xce\xde\xc1\x70\x6f\x7f\xb8\x77\x22\xfe\x7f\x71\xc8\xbe\x1e\x8a\x4a\x3d\x5e\xcf\xb8\x2f\xfe\x39\xb9\x0d\xf8\x0d\x81\x18\x88\x23\x8d\x89\xa0\xe0\xe8\xe4\xed\xfe\x70\x6f\x34\xdc\x3b\x39\xe5\xe8\x63\xa3\xfd\x5c\x79\x98\x30\xa1\xbe\xb7\x60\x37\x32\x53\x6f\xb2\x18\x31\x13\xee\x27\xae\xf2\xb3\x0f\xa3\x57\x93\x9f\x0e\x95\xe0\xe6\x7f\x98\xba\xbd\x53\xb8\x4c\x63\x40\x61\xf6\x0c\xc4\x31\x0e\xb9\x3e\x7c\xaf\xed\xdf\x6f\x01\xf1\xa8\xec\xaf\xff\xea\xea\xdd\xdb\xef\x00\xc9\x86\xf9\x2c\xfe\xf8\xef\x28\x7a\xee\x7f\xff\xe6\xe2\xea\x22\x5b\xff\xdd\x1f\x4c\x45\xbf\x8a\x7f\xf7\xb3\xbb\xe5\x14\xc7\x99\xff\xfc\xd3\x35\x0f\xe3\x50\xc8\xfb\xe3\xfb\xcf\x3f\x7d\xda\x1f\xf8\x29\x98\xc3\x20\x06\x77\x78\x45\xfd\x41\xb2\x8a\x63\xf1\x3f\xff\x5e\xb9\x72\x6f\xe0\x7b\x9e\x7f\x3d\xf8\x34\x1a\x7c\x1a\x8f\x07\x3e\xd3\x5b\x20\x65\x6f\x08\xe2\x0c\x5e\x0f\xd8\x05\xff\xf8\x47\xe2\x5f\x5f\xb3\x21\x09\x58\x42\x0a\x09\x7f\xe6\x7f\xf0\x01\xd9\xf7\x0b\x90\xbd\xb8\x05\xb1\xff\x9c\xdf\xf3\x1f\x7f\x18\x2c\x21\x05\xcf\xff\x7d\xc9\x5f\xfd\x02\x2c\xe1\xf3\x16\xda\x0e\x17\xd3\xcc\xd7\xdb\xf0\x53\xe7\x85\x51\xfe\xde\xf1\x1a\x8d\xf6\xe7\x3f\x8f\xde\x9f\x7f\x75\x5b\x23\x07\x82\x6f\x4d\x58\xe5\xef\xbe\x68\xfc\x0c\x25\x11\xfc\xb2\x63\x4a\x7f\x9c\x1d\x7e\xf7\x62\x3c\x3f\x37\x52\xda\xa7\xfe\xc0\x27\x78\xed\x0f\x94\xbf\x56\x69\x46\x09\xd3\x30\x07\x86\x9f\x8d\x6b\x73\x2c\xf7\x10\x45\x94\x4d\xf9\x93\x7f\x5a\xd0\xc0\xf3\x07\x9f\xc6\xfb\x83\x4f\xfe\x12\x47\x30\xf6\x07\x7e\x02\x96\xd0\xbf\xbe\xbe\x16\x5b\xa2\xb6\x94\x83\x4f\x47\x03\x3f\x83\xa2\x1b\xc9\x80\x92\x15\xfb\x71\xb4\x37\xf0\x79\xd6\x8b\x5f\xfe\x76\x3d\xf8\x74\xac\xdd\xb7\x3f\xf0\xd1\xcc\x1f\x7c\x12\x8f\x83\x84\x60\x52\x3c\xc7\xbc\x97\xc5\x6e\x3e\x1a\xf8\x11\xba\x35\x3e\x2b\xc1\x14\xcd\x90\x7c\x11\x94\x05\x11\x48\xe6\x90\xe8\x8f\xf6\x3c\x87\x81\x42\x1c\xaf\x96\x49\x66\xba\xd3\xf1\x5e\xf3\xad\xc5\xcd\x8b\x89\xf1\x5e\xbe\x20\x6c\xe6\xfb\xf9\xfd\xa3\x81\x4a\x1f\x79\x05\xdb\x41\xf9\x42\x9c\xd8\x1f\x92\x16\xcf\x30\x8d\x14\xc1\x2c\x24\x28\x15\x8b\xd3\x34\x9e\x6f\xfd\xb6\x95\x0a\xec\x55\x42\x1e\x6e\x83\x11\xfb\x7b\x89\x12\xb4\x5c\x2d\x5b\x88\x33\x5d\x51\x6a\xe1\x26\xf1\x93\xbe\xb6\xa3\xd1\xc0\xc7\x49\x18\xa3\xf0\xc6\x17\xcc\x2d\x9b\xe3\x30\xde\x9a\x0c\xf6\x06\x9f\xae\xaf\xe5\xbb\xe3\xe4\x1c\x65\x4b\x94\x65\x25\x47\x97\x53\xf9\xf1\x06\xdc\xd9\xdf\xb5\xfa\x6d\xfd\x3b\xfd\x1b\xfb\xb1\x52\xde\x93\x33\xc3\xa8\x81\x19\xd6\x88\x2e\x82\x05\x04\x11\xc1\xd8\x40\x38\x75\xe7\x2a\x8b\x5c\xd9\xbd\x95\x6d\xab\xd0\x3a\x4b\x81\x42\xe9\x51\xf1\xf4\x4f\xe3\x93\xc1\x27\x7f\xba\x5a\xa6\x90\xf0\x54\x00\x8f\x82\x79\x4d\x38\xb0\x4d\xba\xca\xce\xf8\x2d\xd7\xec\x3f\x9d\xd5\xf2\xcb\xc2\x18\xc1\x84\x5e\xf2\x8b\xed\xbc\x66\x9c\x91\x4a\x0f\x30\x67\x0b\xbf\xc0\x71\x8c\xd7\xec\xaf\x6c\x09\xe2\xd8\x4b\x70\x40\xe1\x17\x1a\x14\x99\xe9\xb6\xfd\x5e\x9d\x15\x8a\xcc\x94\x29\xaf\x3e\x96\x4d\x7b\x72\x86\xe4\xa2\xe9\xd3\x27\xf6\x3e\xe9\x14\x03\x12\x5d\xc1\x2f\xec\x7c\xfb\x64\x18\xf8\xda\x4a\xf5\x93\x06\x31\x58\x0c\x91\x7d\x58\x25\x4c\xd7\x6d\x15\x89\xda\x6c\xe9\x1a\x07\x19\x85\x69\x6d\xc6\x28\x8a\x21\x9f\x6c\xde\x6f\x36\xff\x80\x93\x19\x22\x4b\xfd\x13\x67\xa7\x77\x30\xcb\xc0\x1c\xfa\x03\x1f\xac\x01\xa2\x28\x99\x9f\x29\xbf\x32\xf9\x91\x57\x9c\xb2\xdd\x27\x7f\x63\x53\xf1\x2f\x29\x4e\xfd\x81\x7f\xc6\x9f\xe3\x0f\xfc\x5f\x60\x36\xf0\xe4\x97\xa7\x04\x7a\x77\x78\xe5\x65\x2b\x02\xff\xe2\x5d\x2d\x50\xe6\xad\x51\x1c\x7b\x04\x66\xe1\x02\xb2\x13\xd4\xa3\x0b\xe8\x95\x67\xb2\x87\x13\x0f\x78\x11\x9a\xcd\x20\xb3\x08\x3c\xc1\x4a\xc3\x9c\x11\x33\x8a\xd3\x53\x45\x49\xd2\x08\x27\x68\xc2\x84\xdd\x27\xb7\xab\xd9\x35\x04\x66\x14\x10\x6a\xbd\x2c\x3f\x08\xc5\x29\x0a\x09\xe7\x38\xcb\x03\x4a\x21\xd3\xce\x68\x8f\x62\xe9\x3e\x88\x97\xaf\xad\x5e\xf9\x7d\xc3\x02\xb2\x2b\xaa\xab\x87\x92\x20\x8d\x41\x08\x8b\x05\x6b\x23\xef\xc3\xaf\x59\xfd\xe6\x86\x65\x6b\x91\xea\xd5\x0d\xae\x4a\x79\xdb\x49\x39\xc5\x5f\x60\x14\x48\x35\xa9\x10\x6b\x75\x21\xd6\x65\x98\x60\x8a\xa3\x3b\x0f\x25\x31\x4a\x60\xc0\xf5\x55\x24\x2c\x3d\xbb\x2a\x64\x15\xbb\x31\x98\x42\x75\x3a\xca\x89\x73\x0e\x29\x40\x71\x66\x3b\x1e\x9b\x46\x4d\x01\x22\xde\x67\x3c\x0d\x78\x62\x80\x1c\xbd\x51\xfa\x43\x4d\xb2\xbf\xc1\x53\xfb\x59\xbd\x3f\xf0\xd9\xb0\x01\xc5\xe5\x36\xfa\x75\x05\xc9\x1d\x57\x8a\x57\x94\x6d\x0d\x21\x69\xb9\xec\x3e\xe6\xe6\xc8\xa2\xbc\xf6\x33\x9e\x32\x13\x24\x4b\x41\x08\xeb\xe2\xfd\x33\x9e\xca\x93\x55\x5c\xa0\x08\x7c\xf6\x5b\x36\xe4\x17\xd4\xef\xe1\x57\x54\xa5\x78\xf5\x50\x2a\x07\x2f\x0f\xa7\x76\x45\xa2\x49\x49\x69\x5d\x05\x5e\x93\xb6\xe1\x32\x9c\x71\x71\xdc\x6d\x25\x6a\x2b\x20\xf5\x83\x6c\x28\xfe\xad\x59\x20\x38\x82\x6e\xc4\xe3\x57\x0e\xfc\x6c\x81\x09\x7d\x1d\x6d\x4f\xc0\xea\x37\x5b\x6e\xee\x2d\xf7\x34\x53\x02\x4b\x05\xc8\xb4\x95\x3f\xc0\x0c\xaf\x48\x08\xbd\x8f\x14\xc5\x32\xda\x69\x79\x95\x0d\xe4\x49\x9b\x09\xb7\x89\xee\xb2\x9d\x25\xb6\xa5\x2d\xa6\x9d\xbf\x29\x41\x4b\x40\xee\x82\x25\xa4\x04\x85\x0a\xb7\x4a\x9a\x32\x86\x15\x3f\x55\x04\x02\xe3\xae\x30\x5d\xf9\xb6\x33\xde\x6e\x42\x3d\x9a\xe9\x2f\xe1\x12\x93\xbb\x0d\xde\xc0\xc1\xe4\xd9\x7c\xe9\xe1\x32\xa5\xec\x85\x84\x32\xb3\x91\x3d\xad\x0d\xc1\x37\x10\x8f\x5c\x1a\x0f\x33\x94\x25\xff\xf8\x03\xf5\x48\xce\xbb\x8e\xa6\xb5\xfd\x71\x95\x3d\xf3\x63\x12\xdf\xe5\xa3\x2b\x2a\x52\xe6\xad\xf8\x66\x85\x5e\xbe\x54\xd9\x70\x53\x62\xe7\x4a\xc8\x63\x94\x5c\xa6\x05\xbc\x02\xd9\x4d\xd6\x49\x40\xd5\x0c\xd4\xba\xd6\x23\x7d\x00\x8a\x60\xca\x30\xa1\x30\x62\xe6\x27\xe4\x0a\x0d\x4c\xe6\x74\xc1\xe9\x87\xb2\x60\xb6\x8a\xe3\x60\x1a\x43\xc8\x66\x58\x68\x7d\x8d\x82\xce\x36\x9e\x45\xd8\xf1\x33\x30\xa3\x01\x65\x3a\x77\xb9\x33\x8b\x7d\xc9\x86\xcb\xbd\x89\xf2\xe3\x39\xcc\x42\x98\x70\x64\xa8\xfc\x85\xaf\x8d\x4f\x2f\x54\x60\x6d\x10\xed\x5b\x65\x2c\xf9\xca\x19\x25\x28\x85\xfc\x7c\x34\xcc\x35\xc4\xcb\x14\x27\xe2\x1c\xe6\x94\x0c\x40\x96\x41\x42\x03\xb4\x4c\x63\x14\x8a\x76\x23\xe2\x8a\x60\x01\xe3\x14\x92\x00\x90\xf9\x6a\x99\xdf\x31\x19\x1c\x0f\x3e\xf9\x62\xc9\xaf\x79\x27\x3c\x18\x52\x18\x79\xff\xa4\x43\xf6\xe5\x3f\x3d\x8a\xbd\x29\xf4\x80\x17\xe2\x84\x19\xee\x2b\x10\x7b\xc5\x88\xde\x74\x45\xbd\x19\x5e\x25\x91\x07\x3c\x36\xcf\x64\x3e\xf4\xce\x51\xc4\x6d\x8e\x25\x04\x89\xf7\xcf\x3f\x96\x17\x8b\x11\xff\xf4\xcf\xbf\x78\x7f\xfc\xc7\x1f\x3a\xba\x79\x87\x8b\x69\xf6\x8f\x3f\x78\xff\xea\xbd\x3d\x19\x3f\x3f\x1b\x4d\xfe\xe4\x15\xeb\xdf\x7a\x66\x29\xdc\x49\x17\x46\xfe\x47\x59\x90\xf0\xa2\x84\x9c\xed\x4d\xb2\xa4\x50\x91\xfa\x21\x39\x5b\xec\x60\x7a\x57\xa3\xba\xfc\xbe\x5f\xc2\xcb\x41\xb7\xa6\xfd\xfe\xf3\xb3\xd1\x81\x4a\xfb\x4f\x9f\xfc\x94\xe0\x94\xeb\x85\xb9\x1a\x6c\x58\x8a\x0b\xf9\x93\x8b\x62\xf7\x44\x6b\x41\xeb\x83\x26\x5a\x73\x0a\x5b\x88\x7d\x99\xff\xd6\x8d\xda\xfa\xf6\x90\x12\xf5\x2d\xc8\xa8\xf7\xe2\xd6\x6a\x35\x3c\x2d\x15\x5b\xaa\xa3\xa6\xa5\x82\xb7\xdc\x5a\x8a\x41\x46\x65\x48\x8a\x22\xeb\x46\xb9\x42\x9b\x6c\x14\xe3\xd2\x9d\x46\x11\x81\x59\x06\x8d\x06\x7f\xcb\xbd\x67\xef\x3f\x6e\x70\xd7\x3b\xa9\x98\xba\x3a\xd6\x7b\x63\x1a\xa1\xbb\x55\x38\x86\x7d\xd9\x2f\xbb\xb0\x11\xb7\xe5\x95\xd1\xde\xc6\xe7\x57\xee\x7a\x04\xd9\x4d\xc0\xc3\x86\xb9\x6e\xc2\xbe\x11\xce\x41\x1e\x55\xb9\x16\x84\x39\x51\x8d\x06\x5b\xa0\x85\xdf\x7b\x96\x07\x63\xd4\x9b\x06\x3e\x50\x7d\x6c\x83\xea\x90\x1d\x9c\x6e\x27\x4a\x88\x5e\xfb\xe1\xd8\xf6\xc3\xa3\xb7\x44\x2e\xb0\x50\x87\xfb\x37\x3c\x4e\x15\x5b\x83\xfb\x6a\x13\x4c\xbd\x05\xb8\x85\x1e\x5b\xaa\xcc\x5b\x25\x14\xc5\x1e\x5d\xc0\x3b\x0f\x10\xe8\xa1\xc4\x03\x85\x9d\xc2\x29\xf6\x10\xf6\x48\x5d\xcb\x4e\x20\x5d\x63\xc2\xd8\x50\xc4\xe2\xdb\x15\x6d\xb7\x20\x71\x8b\x61\xd3\x93\x69\xe3\x79\xef\xd9\xac\x5d\xbc\x73\x5d\x3c\xba\x15\x7b\xa5\x6e\xa6\x34\x58\x1a\xd7\x36\xca\x1a\x7d\x6b\xbd\x88\xd2\xc3\x6f\xcb\x12\x18\x8d\x0f\xee\xc5\x14\x18\xab\xfb\x9c\x2b\xae\xee\x27\x61\x65\xa8\x91\x32\xd4\xf9\x5d\x02\x96\x28\xfc\xcb\x06\x07\xeb\x2b\x9c\x51\x4f\x9e\xe7\x9b\x9c\xcb\x20\x4d\x61\xc4\x59\xfc\x81\x0f\xe7\xc3\x6f\xec\x70\x9e\x8c\xb6\xe1\x28\x52\x25\x7c\x65\x81\xca\x2b\xa3\x5a\xae\xc7\x64\x70\xd4\x90\x08\x60\x5e\xf0\xa6\xf1\x4a\x9f\x8a\x3e\x32\xca\x24\x1f\xf2\x25\xf9\x85\xbb\x44\x2e\xb0\x5f\x4d\x18\xea\xf6\x40\xd3\x95\xc5\xb5\x40\xf3\x07\x2d\x08\x9c\xe5\xee\x20\x99\x0b\x9a\x47\x10\x4a\x41\x87\x52\x3e\xbb\xe7\x7e\x8d\x30\x29\xe7\x61\xe1\xf4\x61\x7b\x8d\x02\x32\x87\xd4\x1f\xf8\xff\x36\x8d\x81\x88\x89\xb0\xaf\x89\x0c\x30\xe0\x14\x26\x90\x78\x09\x26\x70\x06\x09\x29\xb3\x8b\x46\x96\x67\x2a\xaa\xcc\x73\xdf\xb8\x34\x72\x06\x4e\x94\xea\xbe\x6c\xfa\xb3\x28\x6e\x7f\x52\xdb\x8e\x3e\xb2\xe9\x58\x87\x95\x58\xa8\x79\xd2\xee\x02\xc3\xea\x7f\x83\xe4\x16\x85\x4e\xbe\xb7\xc7\xa5\x12\x5c\xca\x89\x3f\x4a\xad\xa0\xa0\xea\xfd\xa9\x03\x93\x6f\x4c\x1d\x38\x98\x7c\x4b\xea\x40\xfd\x34\x76\x92\xb3\x57\x60\xee\xa0\x02\xd4\x6e\x3b\xc3\x49\x02\x43\xea\xa0\x7c\xd4\x6e\xfd\x28\x13\x56\xb3\x07\xd6\x1d\x26\xdf\x98\xee\x70\xb8\xb7\x3b\xdd\xa1\x29\x89\x70\x93\x43\x68\xbf\x72\xe0\xbd\x15\x59\x25\x5b\x2a\x24\x9f\x31\xe2\x99\xf1\x03\xcf\xaf\x3d\x85\x72\xbe\xae\x25\x2e\x6f\xa7\xf8\x68\x59\x8d\x62\x07\xf4\xaf\xf6\x48\xa1\x0d\x41\xb8\x68\x78\xec\xc0\xcf\x50\x04\x43\x40\xe4\xa9\xc2\x08\x4b\xf0\x97\x3b\x25\x23\x3c\x73\x8a\xc0\xeb\x93\x12\xcb\x75\x30\xf8\xe4\x47\x30\xa3\x28\xe1\xac\x79\x51\x4f\x23\x7d\xae\x5f\xcc\x98\x38\xfe\x0e\x25\xd1\xfb\x8a\x36\x63\xdb\xdb\x07\x06\x65\x41\x9d\xc7\x66\xba\xc9\xbe\x4d\x37\x99\x3c\x90\x6e\x92\xaf\xd2\x02\x64\x1f\x8a\x9c\x46\xee\xee\x6e\x5f\x8c\x07\xd7\x52\x9a\xb3\x49\x78\x3e\x49\x9e\x95\x29\x5e\xa1\x5f\xc5\xc5\xfc\x50\xc5\x31\x59\x66\x85\x06\xdc\xe7\x1d\x50\xb4\x84\xdc\x6f\x56\x68\x31\xaa\x4b\xb1\x9a\xd8\xd0\x94\x75\x79\x5f\xeb\xbe\x06\xd9\x7b\x02\xe1\x32\xa5\x3c\xc0\xda\xdf\x82\xb3\xb5\x92\xf5\x6f\x7d\x6b\xa8\xc5\x84\xbd\xef\x8c\x09\xf0\x5b\x2e\xac\x4e\xac\x63\x5e\xa6\x51\xd0\x2d\x95\xcf\x26\x6a\x46\x7e\xbb\xc4\xea\xc3\x61\xdb\x6f\xf2\x88\x37\xc7\x49\xbb\x26\xb7\x81\xfb\x96\xe7\xd8\x2a\x29\xb5\x0b\x90\x79\x53\x08\x13\x0e\x22\x94\xc2\xc8\x03\x49\xe4\xcd\x01\x99\x82\x39\xf4\x42\x1c\xc7\x5c\xad\xb1\xf8\x6c\xb7\x4d\xd9\xe9\x2d\x9b\x75\x93\xe1\xba\x64\xb5\x56\xc6\x6f\xcc\x80\x6c\xba\xdf\xb1\x50\x42\x2d\x8e\x28\x59\xda\x5a\x20\x61\x7e\x92\x5e\xa6\xa0\x0e\x63\x2b\xa0\xb0\xcf\x78\x0b\x27\x42\xdf\xb4\xb2\x64\x8f\x9a\xde\xd3\x55\xd3\xec\x92\x5c\xaa\x16\x63\x6a\xf5\x94\x75\xf9\x63\xcf\x30\xd5\xd6\x74\xb3\xf4\xd2\xbe\x56\xe0\x5e\xb2\xa6\xdb\xc8\xba\x7d\xf6\xb4\x4a\xc1\x2e\x19\xd4\xd5\xfb\x9c\x97\x69\xf3\x4c\xea\x5e\x57\x2a\x25\x08\x13\x44\xef\x36\x58\xad\xf7\xca\xad\xcd\x4b\x56\x1d\xd4\xb6\xbf\x04\x4d\xca\x29\xf5\xe2\x74\xdc\x4d\x76\x79\x77\x41\x60\xce\x32\xd7\xc4\x4f\x6b\xa6\x79\xed\xea\x9d\x8b\x83\x0d\xc8\xfa\x01\x66\x90\xdc\xc2\xc8\x6b\x4c\xca\xe8\xca\x5b\x45\xfa\xaa\x9f\xe7\x43\xab\xc7\x94\xf7\xee\xd5\xd7\x87\x38\x97\x36\x21\x83\x29\xcb\xa4\x2f\x4a\x14\xa9\xd5\x3a\x31\xd0\x77\x9b\x11\x63\x73\xad\xee\x3e\x0d\xdf\xe3\x81\x0f\x92\xa8\x66\x0b\xe5\x34\x89\x4e\x55\xac\x09\x1f\x65\x2f\x57\xf1\x0c\xc5\xb1\x48\x41\x75\xba\xa7\xe2\xe7\x7f\x6c\x86\xb4\xd1\x98\x52\xdf\xe0\xde\xac\xaa\xc6\xcc\xe2\x4a\xe6\x70\x23\x8d\xd9\x92\xab\x59\xe9\x28\x0b\x50\x86\x63\x40\xef\x31\x51\x78\xf4\x6d\xc5\x03\xc6\x93\x93\x9d\x66\x0a\x1b\x43\xf1\xaf\xcf\xbb\x84\x0f\x0a\x9f\x7f\x76\xe3\x7d\x4f\xf0\x2a\xdd\xe0\xe6\x33\x02\x05\x57\x74\x4f\x1b\xc0\x11\x9a\xa1\x8d\x6e\xcd\x6d\x9f\xce\x37\xfe\x04\x49\x26\xb7\x79\xc7\x3b\x2f\xb8\x36\xf0\x5b\xce\x74\x1c\x7d\x5b\x01\x91\xf1\xc1\xc6\xc9\x14\xd2\xa1\x58\x8e\xad\xe7\x3b\xaa\x76\xa1\x2f\x5f\xd7\x97\x59\x8f\x63\xad\x54\x4a\x9a\x20\xad\xee\xed\xb1\xcd\x11\x3d\xea\xd9\x11\x5d\xb9\xaa\x4f\x5c\x9d\x92\xfe\xbd\xa0\xeb\x88\xa4\xd2\x9d\x82\xeb\xd0\xd1\x5e\x94\xcd\x6e\xc2\x47\x09\x63\xc4\x09\xd4\x2b\xb5\x9f\xcd\x76\x8d\xed\xf5\xf2\xcf\x3f\xfc\x1d\x86\xd1\xb2\x19\xcd\xc8\x09\xa4\x48\xea\xd9\x80\x2e\x7e\x46\x74\xf1\x16\xf2\x06\xf3\x97\x31\xc8\x44\x29\x97\x17\x88\x7a\xb2\xc2\x0d\x27\x73\x98\x73\x07\x00\x87\x96\x83\xd9\x5d\x46\xe1\xb2\x16\xa5\x2b\x55\x2a\x35\x25\x3a\x5b\x4d\x13\x70\x5b\xc9\x8a\x2e\xb4\x29\xf1\xc9\x98\xae\x6c\x06\x45\xaa\xfa\x0c\x15\x27\x29\xef\x86\x4f\x0c\xa5\x6b\x28\x7b\x89\x04\xde\x8f\xcf\x53\x3c\x38\xa0\x9d\xa2\xba\xba\x15\xac\x49\x52\x38\x14\xe6\xee\x9b\x9f\x6e\xbf\x9a\x13\x8a\x51\xd6\x22\x4c\xe5\xa3\xc5\x15\xfc\xf6\xba\x5e\x2a\xaf\xa9\x66\x87\x2b\x44\x1e\x94\x8b\xaf\x14\xb7\xb1\xc1\x38\x65\xb2\x00\x7e\x49\x63\xcc\xb3\xb1\x8c\x45\x10\x86\xa3\x60\x96\x05\x53\x02\x41\x14\x92\xd5\x72\x9a\xd5\x52\xdf\xc5\xa3\x2a\x6b\xad\x4f\xa3\x0b\x3a\x44\x17\x2f\x7b\x8b\x61\xa0\xbc\xad\xd7\x6a\xc9\xf4\x96\xba\x74\xef\xb4\x53\x1f\xd3\x84\x90\x13\x21\x02\x43\x8a\xc9\xdd\x8b\x84\x12\x04\x1b\xa2\xaa\xf7\x52\x77\x79\x5e\x7f\x7c\xd7\x0a\xcc\xb6\x0c\x2e\x2e\x10\xf0\x32\x05\x22\xb7\xe0\x77\x69\x79\xc9\xd3\x4b\xd1\xfd\xf6\xaa\x15\x51\x6e\x69\x0d\x7e\x9f\xba\xf2\x37\x51\x4a\x56\x27\x1d\xd3\x9a\x8f\x4c\xc5\x64\x0a\x8f\x8b\x44\x34\x6e\x8e\xd2\x35\x0e\xe8\x02\x91\x28\xeb\xad\xf6\xf2\x69\x1d\xd8\x3a\x8c\x5d\xd6\xe1\x12\x7d\x85\x22\x7f\x44\xc0\x9a\x89\xa6\x66\xe6\x85\x60\xa7\xb3\xc7\x6f\x78\x5a\x8d\xce\xab\x31\x71\x59\x8d\x77\x38\xe2\x05\x94\x8e\x0b\xc2\x8b\x5b\x4b\x2f\x47\xbb\x17\xf5\x77\x6e\xe0\xd7\x57\xa5\x56\xa3\xec\x2e\xe6\x4b\xe5\xa4\xd0\x11\x02\x98\x50\x72\x57\x9e\xfd\x5c\xfb\x28\x94\x52\xf1\xe3\xb5\x6a\x5a\x98\x34\x4f\xdd\x05\xd0\x8f\xf1\x7f\x9f\x59\x17\x0d\xb9\x55\x0e\x43\x39\xa6\xce\xf4\x51\xef\xc8\xc4\x57\x83\x4b\x6f\x9b\xa4\x19\x43\x04\xa7\xd0\xdc\x3c\x94\x79\x12\x60\x3c\xbe\xf3\xf8\x30\xc3\x1d\x87\x60\x8c\x57\xbb\xf3\xc8\xb6\x4b\xba\xe5\x52\x72\xb3\x1b\x65\xbc\xae\xf4\x83\x1d\x3e\xa7\x97\xd5\x3c\x03\x09\x7b\x0c\x08\x43\x98\x65\xc2\xa4\xf7\xf0\xcc\x03\xbc\x96\xd5\xa3\x0b\x40\xf3\x99\xc8\x12\xd6\xe1\x56\x69\x7f\xf7\xec\x60\x53\xe4\x5f\x7f\x4e\x9f\xc7\x80\x62\x4d\x7e\x38\xf8\xe1\xc3\xf9\xdf\x0e\x5d\x51\xac\xdd\x60\xaa\x35\xff\x8e\x33\x40\xb5\xbb\x4b\xa7\x49\xc6\x3f\x01\x5d\x77\x43\x27\x6b\x96\x29\x4f\x40\xd7\x4f\x40\xd7\x3a\x33\xd4\x49\xe5\x3b\xe3\x59\xd7\x77\x59\x59\x9c\x2a\xeb\x94\xde\xf3\xd2\x88\x4e\x60\xca\xbc\x9a\x22\xa0\x60\xae\x02\x3f\xe7\x86\x81\x82\x8c\xed\x14\x0f\xaa\x45\x7d\x8c\x49\x2d\x15\x17\x31\x9f\xc6\x2a\xe1\x9d\x14\x5b\xdf\x6c\xa0\xcf\x49\x3e\xce\xb7\xe2\x76\xc3\x56\xd8\xee\x02\x12\xa8\xbe\x65\x9a\x28\xfe\xed\x22\x57\xf7\x03\x7f\xcc\x35\x11\x1b\xf0\xf1\x55\xdd\x15\xef\x72\x81\x1d\xb7\xf8\x4a\x86\x21\x9e\x10\x8b\xad\x88\xc5\x5c\x6d\xd8\x12\xab\xb8\xf1\x84\x74\xcd\x38\xbb\x64\x0b\x06\x23\xef\xb4\x01\x31\x37\xb7\x62\x31\xe3\xd7\x80\xd6\x37\x7e\x26\x06\x39\xa5\x56\xa5\xc7\x6c\x61\xd8\x36\x2c\x23\x75\xb6\xd0\x06\x74\x80\xca\xd9\x28\x49\xbc\x23\xb9\x5e\xca\x99\x59\xe9\xe5\x48\x31\xc3\x1b\xba\x46\x1f\x5a\xc5\xf8\x03\x72\xcf\x39\x41\xb7\x42\x11\xb0\x73\x8e\x5e\x00\xc9\x25\x49\x24\x6f\xdb\xac\x16\x6a\x6b\xf9\xb0\xa5\x58\x78\x02\x3d\xb6\x6e\xa3\x5d\xa3\x06\x3f\x81\x1e\x6f\x52\x41\xd5\x87\xfb\xad\x1f\x7f\xcd\x03\xc2\x1d\x4b\xa0\xb1\x5d\x00\x1d\xd7\xb7\xec\xb7\x0e\x2c\x56\xc0\x30\x3e\x4a\x18\x91\x87\x03\x17\x7b\xec\x68\x22\xa5\x33\xae\x8c\x6f\x1c\x1f\xdd\x4b\x06\xf1\xb6\xa8\x60\x3d\x02\x94\xe8\x58\xa1\xee\xfa\xd4\xef\x02\xe1\xc3\xc4\x12\xdb\xc1\x4f\x6f\x83\xf2\x61\x03\xb6\xb8\x17\x44\xaf\xbe\x61\x45\x1a\xcb\x74\xb6\x46\x08\xab\xc2\x95\xf4\x81\x10\x66\x9e\xb1\xae\xbb\xbb\xa1\x87\x19\x66\x77\x2f\x25\xc1\x6d\xbb\xf7\x81\xd1\x36\x1e\xdc\xf0\x30\x9b\x1b\x21\x13\x00\x1a\x1e\x46\x0f\x76\xc6\x76\xa7\xaf\x96\xac\xc6\x81\x33\x6e\x21\xc9\x60\xcd\x4a\x81\x3a\x10\xc9\xc3\xb4\x03\xf8\x26\x72\xcd\xaa\xd8\x4b\xa3\xfd\xe7\x67\xa3\x51\x37\xa9\xdc\x7a\xae\x4e\x54\x25\x1c\xd9\xcf\xd5\x4e\xe7\xfd\xd5\x5d\xda\x61\xa0\x5c\x49\x50\x63\x22\x4f\x35\x27\xad\xdc\x70\xb2\x39\x37\xb4\x9d\xd0\x8d\xe7\xb3\xee\xd4\x52\x33\x51\x06\xbe\x04\x7d\x77\x3b\x96\x9b\x0e\x65\x6d\x50\xce\x4d\x9b\x8d\x66\xf2\x91\xe8\xa3\x17\x76\x6d\x07\x58\x2a\xdf\x38\xcf\x72\x24\x17\x7f\xb7\xe3\x63\x8e\x98\x4d\x5b\x2f\x03\xf3\x14\x73\xdc\x3d\xc3\xa3\xf9\x70\x6d\x1b\xab\x43\xfd\x50\xb3\x09\x6c\x78\x50\xff\x29\x0c\xfd\x17\x0a\x3d\x8b\xf1\x7c\xd7\xc5\x2b\x7f\x03\xa7\x53\xfc\xf3\xfb\x1f\xdc\xab\x85\x3a\x65\x2c\x0c\x7c\x8f\xbf\xe4\x63\xc9\x5c\xf0\x8c\x15\x26\x9a\xd4\xaa\x4e\x2a\xc6\xf3\xa6\xba\x8f\x5a\xe5\xb1\xa9\xc4\xa3\x9a\xc7\x61\x7c\x83\x7b\xe7\x60\xb6\x12\x1b\x30\x70\xca\x4e\xbd\xc7\xd0\xa0\x1f\x87\xef\x5f\xe0\xaf\xb3\xef\x3b\x55\xb6\x31\x75\x29\x88\xc1\x1d\x5e\x99\xca\xdb\x06\x96\x32\xac\x4a\x73\x2d\x51\x51\xc5\x71\x30\x56\x71\x74\xb9\xc0\xeb\x0f\x70\x9e\x97\x94\xcb\x1e\xca\x49\x08\x68\xfd\x0e\x10\x52\x74\x0b\xc5\xd5\x79\x0d\x97\x7e\xc2\x5e\x33\xf1\xbb\x14\x8a\xf8\x27\x3f\x83\x4c\x12\x52\xcc\x2d\x2a\x71\xb1\x91\x59\x46\x07\x03\x3f\xbb\x9d\x07\x29\xa0\x14\x92\x84\x89\x91\xeb\xea\xf1\x54\x89\xaa\xbb\x64\xe5\xe4\x14\x69\x29\x09\x74\x3a\x7b\xda\xbc\xc0\x6c\x3a\x01\xd3\x81\x00\x4a\x4c\x16\xa4\xd3\xfd\x46\x2f\x72\xdd\x1f\x8a\xb2\x0b\xfc\x16\x82\x08\xb6\xa7\x25\x29\x8f\x6e\x6c\x5a\xce\xac\x8a\x14\x84\x9a\x21\x73\x81\xbd\xb3\x78\x95\x51\x48\xbc\xfc\x69\x0d\xe9\x36\x66\x8f\x73\xb6\x9a\x5a\x92\x45\xc4\x7f\x57\x0b\xe8\x85\xf2\x21\x0b\x90\x79\x09\xf6\x62\xfe\xac\xa1\xc1\x33\xb0\x97\x7b\x06\xb8\x53\x20\x7b\xfe\xec\xd9\x7a\xbd\x1e\xf2\x5d\x9e\x12\xcc\xf7\x2c\xc2\xcf\xe6\x2b\x14\xc1\xec\x19\x5e\x51\x30\x87\xc3\x05\x5d\xaa\x91\x65\xef\x03\x04\x91\x07\xa6\x78\x45\xbd\x1f\xf9\x15\xcc\x3e\xc4\xb7\x90\xdc\x6d\xec\xdb\x6e\xad\xc9\x3b\xd8\xdb\xbb\xd7\x85\xba\x84\xe4\x16\x12\xef\x85\xd8\x12\x7d\xac\xd1\xa9\x97\x89\x31\x39\x5f\x7a\x29\xe1\x76\x28\x8c\xbc\x08\x50\xe0\xcd\x08\x5e\x7a\x53\xc8\xdb\x8d\x70\xc5\x1d\xf3\x34\x8a\xbc\xd3\xf7\xf6\x04\xdb\xdf\xdb\xbf\x67\xce\xa6\xde\x4b\x66\x96\xf4\x43\xad\x9f\x17\x80\x32\x93\xe6\x1f\x7f\x20\xd0\x8b\x31\xbe\x61\x94\x99\x61\xe2\x85\x4c\xc0\xf2\xa8\xcd\x14\x0a\x3b\x68\xe8\xbd\xa6\x1e\x44\x74\x01\x89\x17\x61\x28\x42\x3a\xf0\x0b\xca\xa8\x87\x09\x37\x8b\x00\x81\x3c\x1b\x16\xac\xe8\x02\x13\xf4\x15\x46\x8c\xbe\x19\x84\x1e\xea\x89\xb6\x93\x7b\xa7\xed\x69\x31\xf7\xba\x6a\x5b\x29\x74\xc5\x37\x30\x11\x1a\x0d\x81\x6e\xf9\x0c\xdd\xd7\xe7\x17\xbc\x22\x9e\xdf\x08\x3b\xc5\x1b\xaa\x41\x4a\x51\x32\xcf\x86\x7c\x52\xb6\x5a\xaa\xd3\xb3\xb7\x9e\x98\x75\x4b\xae\x01\x5b\x5e\xbe\x92\x29\xc1\xb7\x28\x12\x7d\xf2\x09\xfc\x75\x85\x08\x8c\xbc\x14\x92\x25\xca\x32\x0e\x72\xe7\x9d\xb1\x73\x23\xe4\x3c\x44\x3c\x10\x2d\x51\x82\x32\xca\x0f\x4e\x0f\xcd\x3c\xba\x40\x99\x87\x32\x0f\x24\x62\x3b\x6e\xc2\x05\x5b\xd1\xef\xbd\x7c\x01\x90\x3c\x3c\x15\xd7\x88\x2e\x04\xd5\x32\x44\xa1\x4a\x36\xb6\x2d\x6e\x11\x5c\x73\xfa\x38\xd0\x64\xb3\xb0\x6f\x67\xfe\xef\x51\x0a\x5f\xe2\x25\xa4\x0b\x26\x4c\xd6\x4c\xcc\xae\x09\x4e\xe6\xc6\x53\xca\xf1\x75\x1d\xbf\xaa\x00\x45\xc1\x5f\x8b\xdd\xca\x93\xf6\xe6\xbc\x10\xe7\x16\x11\x9c\x70\x2f\x11\x1b\x22\x82\xb7\x30\xc6\xa9\xf8\xec\xea\x71\xc9\xc9\x41\x60\x83\x4a\x94\x51\x10\xde\x04\x94\x48\x68\x42\x89\x18\x16\x72\x24\xb7\x8a\x5f\x64\x2c\xef\xb9\xa4\xc4\xd7\xfd\x21\x92\x5e\x8e\x49\x9e\x9d\x1c\xc3\x62\x96\x6c\x3f\x58\x33\xdf\x4c\xfb\x25\xbf\xbd\xdc\x37\x65\xfe\xf0\x7a\x81\x38\x10\xde\x67\x3c\xb5\x6d\x9f\xef\x31\xe3\xfe\x37\xf2\x02\xd7\x5e\xe9\x9b\x4e\x44\xe2\xf0\x35\xce\xe5\xac\xbc\xa6\x7d\x3a\x6d\x0e\x10\x33\x9f\x16\x36\x24\x5b\x06\x67\x13\xb2\x34\xf8\xba\x5b\x8b\xf9\x8b\xef\xd6\x52\x7c\xf3\xe1\xaf\x97\x5f\x7e\x3d\xb9\x73\xb3\x14\xf7\xa5\xf9\x27\xad\x44\xb1\xd0\xbd\xdb\x48\xb9\xa7\x6b\x33\xbb\x3e\x07\x76\xdc\x74\x41\x9e\x15\x88\x90\xbb\x5c\x17\xf4\xf5\x6f\x77\xd1\x87\xaf\x6b\x73\xc9\x0c\x50\x8a\x65\xb8\xcc\xef\x58\x3a\x23\x36\x54\x8e\x30\x82\x49\x2d\x34\x94\x3b\xa5\x2a\xc9\xa6\x05\xb8\x65\xc5\x2e\xdf\xd8\xc9\xc4\x4e\x60\x1e\x5c\x2b\xf0\x61\x1b\xab\x65\x62\x34\x47\x53\x14\x23\x7a\xf7\xa2\x8f\xc2\x99\x86\xcc\x3a\xa7\x3b\xcd\x86\x67\xcb\xad\xee\xd5\x3a\xde\x06\x85\x33\x4c\x49\x28\xa9\xd4\x64\xb6\x35\xd4\xcb\xb0\xc3\xae\x46\xea\x8e\xa5\x32\xb6\xef\xfa\x2d\x9e\xf1\xef\xb3\x74\xe6\x78\xe0\x2f\x57\xb4\x9d\xfb\xae\xd9\xe9\xef\x5a\x56\xb3\x4d\xe0\xbb\xd2\xf8\x8a\xe2\xf4\x9c\x00\x94\x3c\xed\x05\xeb\x5e\xb8\xa4\x38\xf5\x38\x91\x36\xdf\x0a\x55\x3a\xff\xee\x37\x82\x85\xf1\x76\xb4\x0d\xa2\xa7\x2d\xd0\xb8\x05\xb6\xe4\xfe\xe8\x89\xf3\x69\x13\xaf\xed\x4a\xf8\x2f\xf0\x9a\xaf\xec\xa5\xe8\xfb\x71\xa1\xb0\x51\xdf\xf5\xc4\x28\x99\xe1\x8d\x37\xc5\x63\xa8\x26\x2e\x76\x81\x24\x56\xa7\x7d\xc0\x9b\xae\x40\x8f\x2f\xbd\xb9\xdd\x0a\x5d\x40\x0e\x6c\xaf\xfc\x0a\xb9\xe3\x1a\x25\x42\x67\x88\xdd\x9a\x66\x77\xa2\xcd\x3d\xd6\x18\xe7\xeb\xbd\xe1\xe9\xe0\xc2\x99\x85\x28\xd9\x59\x31\xb2\x65\x3b\x7d\x4c\x23\x40\xe1\xd3\x6e\x72\xd9\x4d\x82\x56\x1b\xed\xa6\x04\xae\xe5\x8e\xca\x52\x18\x96\xf4\x29\x76\x10\x77\xad\x58\x1b\x17\xfd\xa6\xf7\x4d\x03\x0b\x3e\xda\x6d\xf3\xb4\x61\x5c\x36\xcc\x19\x5e\xa6\x31\xa4\x6d\x09\x9a\xb5\x1d\xa3\x20\xf3\x7b\x0b\x70\x0b\xc5\x16\xe1\xfb\xe7\xe9\x08\x6a\xda\x4a\x8f\x74\x13\xb9\x24\x7d\x50\x8c\xe3\x29\xe8\x9e\xec\x21\xef\x0b\x10\x85\x4b\x46\x49\x8a\xd3\x00\xc4\x68\x9e\xb4\xae\x91\xdf\x56\x80\x6c\xcf\xb5\x30\xde\x5a\x45\x38\xe6\xbd\x7f\x44\x0b\xb4\x20\x46\xf3\x05\xad\xa5\xc2\xf1\x74\xdd\x0c\x51\x58\xf4\x36\xb3\xf6\x48\xf3\xcb\x84\xa4\x2f\x01\x0a\x25\x47\x34\x0c\xf6\x3a\x34\xb1\x40\x0f\x0b\xdd\x71\x4d\x1a\x28\xdf\x18\x0e\xe4\x9e\xd2\x6c\x35\x5d\x08\xa8\x6b\xfb\x3a\x8c\xb6\x75\xea\x3a\x56\x86\xdb\xc5\x55\x9d\x31\x04\x06\x83\x25\x7d\x1d\x31\x09\x22\xb2\xbf\x7c\x93\x03\x98\xe2\xf9\x5c\xad\x72\x40\xd9\xa9\xb8\x98\xd7\x26\xa9\xe8\x1d\x57\xe2\xca\x5a\xa2\x21\xca\x5e\x48\x21\x58\x64\xa1\x29\xe4\xc9\x20\x55\x5c\xa6\x66\x38\x0e\xa5\x18\x8a\xc9\x15\x15\x89\x23\xe4\x18\x64\xfe\xe0\x93\xbf\x26\x88\xe6\x99\x2a\xd5\xcc\x35\x23\x68\x47\xe5\xc9\xf9\x88\x6a\x47\x4c\xe3\x2b\xe8\x63\x37\x83\x5c\xb3\xff\xf2\x5b\x5d\x41\x0c\x9c\xa4\x01\xc6\x31\x45\xbc\x63\x08\xfb\x1a\x10\x04\x02\xb9\xcc\xa2\xda\x37\x3f\x77\x24\x41\x32\x2f\x04\x89\x47\x60\x08\xd1\x2d\x54\x3a\x58\x36\xf4\x6b\x34\xed\x71\x9f\x9d\x0c\x41\x88\x48\x18\xc3\x00\xaf\x68\x5e\xcc\xac\xa2\xf1\xa0\x2c\x98\x81\x48\x76\x5c\xdd\xa6\x9a\xdb\x99\x16\x60\x5e\xa2\x12\x14\x10\x28\x5e\x82\x05\x46\x28\x25\x20\xc9\xf8\xc2\xb7\x08\x33\x6d\xc1\xa3\xa6\x3a\x2e\x85\x34\x21\x4e\xef\x6a\x38\x39\x61\x8c\xd2\x29\x06\x24\xba\x2a\x7a\x57\xd4\x06\x77\x45\xdd\xbe\x17\x31\xc8\xa8\xc4\xb1\x53\xd5\xc3\x49\x39\xab\x8c\x92\xc0\x88\xb4\xa0\x6c\x48\xb7\xb4\x80\x1d\x60\x0c\xe9\xc0\x42\xa5\x53\xba\x86\x2d\xc4\x7e\xaa\x00\x0b\xf1\x3f\xd6\x40\xa4\xc2\x65\xec\x56\x9e\xb3\xc3\xb5\xbf\xbf\xf8\x83\x8a\x4b\xd6\x09\x2c\xa8\xbc\x7a\x1b\xa8\xa0\x07\xe5\x80\xda\xf2\xf1\xf7\x0f\x52\x9c\xe2\x5b\x48\x34\xc6\xe7\xc1\xdb\xea\xd1\x90\x13\x07\x17\xbe\xcc\x2a\x04\x84\x83\x30\xb7\x6a\xa0\x62\x36\x5c\xdb\xbc\x73\xbc\x38\x9f\x86\x85\xfa\x26\xf2\xfa\xbf\x79\x6c\x26\x19\x97\x7e\x24\xe8\x4c\xd6\x16\x53\x4e\xea\xae\xd4\x74\xd9\x09\x20\xda\x5e\x9a\x60\xd7\x56\xad\x90\x6b\x7a\x8b\xdf\x0e\x2e\xf6\xfb\x27\x91\xb1\xaa\xbf\xe9\x4c\x5b\x50\x9a\xb2\x9b\xdc\xe1\x87\x1e\xf0\x6d\xce\x01\x05\xc2\x9a\x75\x7f\xa1\x48\xb9\xe7\x31\xbe\x12\x07\x7b\xaa\xc1\x2e\xd8\xce\xd2\x55\xb2\x80\x20\xa6\x8b\xbb\xfc\x3e\x67\x2c\x94\x06\x7d\x4d\xe9\x52\x5f\xd1\xd1\xf8\xce\x50\xfb\xd8\x3b\xe8\x3b\xae\xd3\xd5\xfa\x6b\xe2\x99\x79\xf1\x20\xe5\xe5\xa6\x6d\xb7\x2b\xaf\x95\xc6\x2b\x02\x62\x8e\xc9\xff\x29\x87\xd2\x72\x1f\xd5\x60\x5f\x79\xc5\x4b\x6c\x94\x6c\x7b\x1a\xc7\x5e\xf3\xfd\xaa\x5a\xdf\xae\xc2\xd5\x4e\x18\x3b\xb3\x44\xc2\xc5\x4f\x00\x85\xf3\x76\x28\xcd\xae\xe7\xd4\x86\x3e\x3f\x57\xd0\x9c\x4e\xc3\x10\x0d\x69\x2c\x0f\x24\xe5\x2f\xbe\x81\xf7\xac\x69\x78\x93\xc7\xcc\x36\x4e\xfd\x0c\xb6\x1c\xf1\x7e\x35\xed\xd6\x64\x61\xea\x0b\xca\xb3\xef\x2e\xf0\x79\x81\x17\xe5\xd6\x6b\xb5\x36\xf7\x07\x6a\x1f\xcf\x16\x66\x45\x80\xa9\x82\xdd\x8d\x81\x79\x23\x5a\x4c\x42\x18\x75\x2a\x47\x36\xcf\x52\xce\x28\x08\x1c\x5c\x82\x1b\x3f\xc4\x66\x8c\x8f\x74\x63\x5c\x2d\x1c\x8f\x72\x12\xb5\xd1\x22\x32\x2c\x7b\x23\x6a\x89\x26\xfc\xb7\x7f\x5a\x0b\x7e\x89\x8b\xaf\xb5\xea\xcf\x70\xbb\xcb\xe8\x0a\xd9\x9e\x99\xbb\xb0\xf2\xa8\xd6\xf6\xcd\x75\x87\x0e\xfc\xe2\xc3\xc0\xff\x00\x97\xb9\x5d\x6c\x85\x04\x70\xdf\x1c\x66\x61\xd0\xa1\x92\xde\xb4\x3f\x2e\xb0\x17\x29\x78\x74\x5b\xd5\x1e\xf5\xba\xab\x1f\x60\x4f\xf7\xb4\xa3\x0d\xf8\xa6\x55\x0a\xcc\xd8\xfb\x9b\xe4\xb8\x13\x0c\xd1\xf1\xc0\x5f\x62\xf6\x22\xc1\x8c\xe0\x65\x90\xe0\xf5\x06\x0f\xfc\xf4\xc9\xe7\x4e\xde\x5b\xc0\xad\x00\x14\xc1\xd3\xd9\x0c\x7d\x11\xbe\xc3\xbd\x3d\xf1\xfe\x5b\xa2\x16\xb9\x96\x9f\x38\x22\x32\x3c\xec\x9e\xdf\x1b\xf8\x9c\x4d\xa5\x57\xe8\x21\x4f\xb0\x7e\x95\x76\xef\x17\x0e\x44\xb8\xe9\xae\xb8\xc0\x5b\x43\x69\x3c\xf8\xc2\x49\x85\x90\x97\xb1\xcb\xaa\x99\x66\x74\x2d\x77\x01\x8f\xe6\x09\x26\x50\x0c\x5d\xd4\xe3\x5c\x60\xe1\x2c\xb4\x20\x45\xb8\xd0\xa8\x89\xc1\x1c\xb5\xc3\x1a\xaf\x75\x43\xaa\xb3\xa9\xb4\xe9\x2a\x8e\xf3\x9e\x5a\xcd\x2b\xd4\xe6\xc5\xe5\x5e\xc4\x0f\x7c\x24\x36\xdb\xd7\xc9\x0c\x9f\x4a\x5f\xdc\xbd\x7b\x78\xd9\x8b\xf1\xb7\xd3\xb7\x75\xd5\xd9\xab\xff\x66\xf5\xf9\x72\x79\x5a\xf1\xf7\x0a\x19\xeb\xec\xf0\x55\x2e\x6f\xf0\xf8\xda\x59\xc7\x51\x55\x72\x8b\x1b\x6c\xe0\x6e\xdc\xc8\x8a\xeb\x03\x37\xd9\x4b\xf0\x9a\x80\xd4\x21\xbb\xa1\x75\x40\x81\x3d\x1c\xcc\xf3\x3e\xfb\x2d\xe2\xa7\x79\x18\x36\x21\x89\x77\xec\x64\x44\x59\x72\x55\x6a\xfe\xd7\x96\x04\x15\x6d\x4c\x73\xa9\x29\xaf\x7b\xf2\x2d\x0e\xcd\x50\x8e\xaf\x24\xb4\x18\xdd\x2e\xdb\x82\x13\xee\x6a\x59\xfa\x5c\x8b\x77\x68\xce\xec\x27\x3b\x1a\xf3\xb6\x8b\xb1\xcc\x1f\xf0\xb4\x1a\xed\xab\xa1\x9a\x53\xf7\xb2\x1a\x12\x1c\xfb\xe1\xd6\xa2\xe9\xfb\x2d\x01\xd9\x3b\x17\xe9\xd4\x43\x2d\x76\xad\x37\x06\x19\x15\x7b\x03\x5e\xa9\x98\x77\xce\x2e\xa9\x7a\x99\x43\x69\xe4\x50\x6c\x34\x71\x4c\xcf\xdc\xc0\xa8\xf1\x32\x94\x84\x1c\xea\xa0\xcc\x7f\xf0\xd6\x20\xf3\xb2\x15\xef\x60\x37\x5b\xc5\xf1\x9d\x27\xf6\x65\x2d\xf7\x75\x33\x9d\xda\xf8\xce\xc2\xf6\x56\x72\x30\xba\x3c\xd3\x94\x28\xf2\x20\x29\x73\x9d\x03\x9e\x75\x26\xed\xec\x3e\x7e\x3c\xcd\x26\x3a\x6c\xce\xfb\xca\x79\xbd\xff\x36\x11\x1b\xb9\xd3\x1f\x66\xe2\xad\x0d\x22\x36\xe1\xf8\xad\x63\xfa\x3d\xb0\xb8\x23\x9b\xd5\x69\xab\x1c\x55\xf5\xc5\x32\x64\xf9\x12\x1c\xc3\x22\xc9\xd7\xaf\xce\x0b\x44\x73\x58\xe2\x42\xb8\xa6\xfe\xfa\x19\xa4\xef\x09\x84\x4b\x0e\x5e\xfb\x12\xc5\x14\x12\xdf\x92\xdf\xdb\x1a\x50\x04\x2d\x67\x6f\xd3\x7a\xd7\xcf\xab\xb4\x98\xd6\x46\x81\xd4\xad\x68\x58\xba\x6f\xb6\xa0\xa2\x78\x6c\xb3\xb3\x50\x25\xa3\xe5\x85\x9d\x62\xa9\xe5\xbd\x7e\xf3\x68\x6d\x4e\x8f\x0d\xec\x56\xdb\xc6\x95\xf3\xcc\x20\x20\xe1\x22\x98\xe2\x2f\x0a\xd0\x36\xff\xee\x0a\x32\x13\x9b\x99\xfe\x0b\x90\x70\xe7\x00\x6f\xf2\xb6\xc0\x71\xc4\xe8\xa7\xc4\xe9\xd2\x15\x3d\xd3\x20\xb9\xb5\x6c\xf5\x72\xb0\xeb\xeb\xb6\xe4\xa1\xa2\xdb\x1b\xa4\xef\xc1\x1c\x25\xd5\xd4\x76\xff\x92\x8f\xa6\x1e\xee\xc3\xe1\x30\x4f\xb4\x8d\x51\x02\x3d\xc5\xc7\xc2\xbf\x66\x46\x19\x08\x4d\x8d\x0b\x7b\x3a\xc8\x5c\xd1\xcc\xd3\xf2\x85\xea\x90\xe6\x99\xe8\x84\x9f\x4a\x08\x43\x49\x3a\xcc\x9b\x9f\xa9\xc9\xa4\x39\x89\xd8\x85\x79\x33\x7c\x09\x30\x24\xba\x3c\xbf\x97\x90\xc3\x46\x7c\xf3\x46\x54\x75\xf6\xb4\x1c\xef\x43\x7e\x3c\x87\x59\x08\x13\x9e\x90\xad\xa1\xae\x0b\x54\x7e\x36\x5a\xf9\x7c\xed\x76\xed\x5b\x65\x14\xc6\xb0\x3c\xd5\x7b\x86\xb1\xb1\xaf\x7c\x2f\xb0\xdb\x07\x8f\x05\x84\x5d\xc7\x5c\x29\x31\xb6\x27\x7b\x7b\xf7\xd2\x1a\x25\x01\x44\x89\xb7\xdb\x0d\xa6\xde\xa8\xcc\x96\x37\x98\xd6\xf1\xcd\xe5\xf7\xfd\xd2\x5a\x0e\xba\x09\xb9\xc7\xd5\x4e\xfb\x9f\x98\x08\xc6\xdc\x08\x57\x4a\x04\x4c\x0b\xf0\xfa\xdc\x15\x27\xea\x77\x4c\xdf\x89\x8d\xbe\x4a\x5d\x0d\x53\x44\xd0\xec\xee\xb5\xe8\xd8\xed\xbf\xe3\x9f\x3c\xf1\xd1\x4c\x7a\x7e\x09\x12\xdd\x1a\x9e\x16\xa0\x71\x01\xf6\x5d\x16\x20\x24\x10\x50\x98\x2f\xc0\x19\xff\xd4\xb8\x00\xe2\x92\x27\xfa\xb7\xd3\xff\xa0\x51\xc0\x88\x12\xad\x06\x42\x17\x15\x61\x4f\x74\x6e\xa6\xf3\x61\x13\x9d\x3f\xe3\xe9\x30\xaf\x02\x33\x10\xf9\x0d\x9e\x3e\x51\xb8\x95\xc2\x47\x2d\x14\xfe\x09\x92\x4c\x62\x98\x1b\x68\xac\xfc\xda\x8d\xce\xc6\xce\x2d\x67\xef\x3f\xb6\xfa\xda\xeb\x77\xbd\x93\xbe\x8c\x0e\x45\xdf\xfd\x2c\xf1\xa3\x68\xf5\x62\x5d\xd9\xd1\x68\x53\x9d\x53\x9a\x8a\xa5\xd1\xc5\xb3\x3a\xcd\xbd\x10\xe4\x0b\x0a\xc3\x91\xdb\xe5\xd2\x62\x38\xd4\xfc\x4d\x09\x47\x21\xb5\x5a\xec\x73\x4c\xf1\xa9\x32\x6c\x75\x80\x0e\x65\x3d\x87\xb6\xe6\x22\x07\xd6\x20\x6f\x53\x89\x0f\x33\x9e\xa4\xf5\xd2\x18\x78\xe5\xfd\x2b\x8c\xe9\x19\xa5\x59\xbb\x61\xa8\xb5\x1c\x22\x48\x56\xcb\xa9\x4c\x81\x6f\xcb\x26\x10\x36\x1b\x6f\xa8\x9d\x9d\x56\xbb\xa8\xfd\xd7\x7f\xfe\x5f\xfd\x3a\x98\x44\xf5\xab\xaa\xa9\xe6\x75\xfb\xb4\xdd\xaf\xe4\xb5\x46\x73\x7a\xd9\x8e\xd2\xc7\x72\x5b\xd9\x8e\xe9\x90\x7d\xd9\xe7\x76\x14\x23\x6e\xb0\x1d\xc7\x26\x95\xad\x4c\x46\x52\x16\x99\x3d\x00\xe1\x95\x0d\x44\xd6\xfb\x9f\xc6\xfc\xb0\x07\x38\xd6\x44\x13\xbf\x2f\xb4\x46\x64\xf6\x65\xbf\x44\x66\x23\x6e\x42\x64\x93\x5e\x66\x24\x72\xfe\x1e\x26\x02\xff\xef\x0d\x08\x7c\x34\xf0\x57\xe6\x9a\x70\xe5\xa1\xc2\x83\x62\xb7\xd6\x5d\x82\x4f\x0d\x9d\x0a\x0b\xc1\xf6\x6d\xb8\xe5\x65\x79\xdc\x23\xee\x36\x58\x0a\xbd\x17\xb7\x05\x64\xf3\x03\x74\x15\x1c\x3f\x7a\x87\xd6\x64\x8b\xa6\x71\x4e\xad\x79\xb7\x6a\x21\xa8\x0e\x74\xb9\x9a\xca\xa6\x3c\xce\xa3\x15\x7a\xa5\x63\x67\xb4\x5e\x15\xcb\xf1\xa3\x57\x2c\xf7\xb7\x68\x1f\xd9\x6b\xc3\xc0\xc9\x7d\x34\x0c\x54\x07\xcd\x4a\xde\xe9\xb3\x6b\xe0\xa4\x4b\xd7\x40\xdb\x8d\xb2\x5e\x6f\xfb\xf2\x1e\x63\xcc\x2d\x83\x21\x4e\x22\x40\xee\x6a\x35\x58\x75\x2a\x15\x33\x31\xd6\x64\x38\x57\xa5\x78\x9a\xf2\x6a\xa6\xd1\x6f\xb3\x1f\xe2\xc4\x66\xb2\x8c\xbf\xd1\x93\x5d\x54\x8b\x7a\xc2\xcb\x75\x5f\x29\x24\xea\x59\x0e\xc2\x10\x93\xc8\x1c\x6a\xbb\x81\x77\xd5\xd3\xbc\xa8\x24\xbe\x2e\x61\x84\x1e\xb2\x3d\x30\xe8\xfd\x20\x07\x9b\x1e\xe4\x47\x7b\x55\x61\xfe\x29\xef\x6b\xf1\x56\xe2\xdf\xa0\xec\xc5\x97\x14\x24\x11\xd7\x97\x98\x1a\x1d\x49\x40\x83\x41\xfe\x8a\x48\xf4\xbc\xcb\x8b\x85\xcd\xf1\x48\xd3\x79\xa0\xad\x7d\x15\x72\x40\xa6\xff\x18\xc0\x19\x72\xa8\x7f\xa5\xd1\x9d\x6d\x22\x03\x05\x3f\xa7\x74\x22\x6c\x66\x88\x97\x38\x71\xa3\x36\x0b\xdc\x54\x6f\x35\xaa\xd2\xcb\xad\x49\x7c\xab\x47\xac\x7d\xba\x63\xe3\xce\x29\x8e\x15\xcb\x12\xf6\x51\x60\x66\xad\xc6\x6a\x05\x9c\x08\x71\x8c\x49\x90\xad\x01\x0d\x17\x5e\x8d\xd5\x44\x99\xb8\xcc\x42\x28\x97\xd4\x9e\xca\x6a\x2a\x56\x31\x8c\x28\xd4\xae\x57\xf2\xef\x81\xff\x31\x29\xbe\x77\xaa\xe5\xdc\x20\x61\xa3\x97\x55\xee\xca\x8f\xf7\x5b\xbb\x5c\x30\x91\x43\x72\xb1\x71\x9b\x58\xd6\x48\xdb\xd7\xbf\x40\xf6\xe8\x0b\xdc\x50\x11\xda\xb4\x36\xdd\xde\x10\x65\x41\xba\x8a\x63\x18\xb5\x97\xf3\xf4\x41\xf0\xce\x24\x7f\x0b\x32\xda\x86\x60\xeb\x3c\x74\x53\xb1\xe6\x89\x3c\x0a\xab\xba\xb8\xb2\x4a\x2b\x3e\x0d\x2d\x9b\xb9\x49\xe8\xaa\xd3\x6a\xa8\xd1\x6c\x7a\x84\x9a\xbc\x2c\x13\x96\xdb\x0b\x30\x9b\x19\xa2\x9d\x5d\xb6\xc9\x4f\xbf\x77\x2b\xd2\xd2\x89\x1e\xf4\x6e\x45\x82\x4d\xad\xc8\x93\xcd\x3d\x08\xe6\x7a\x84\x4a\x47\xd8\xda\x69\x2b\x04\xf9\x39\xcc\x42\x82\xd2\xbc\x4d\x73\x93\xcc\xd8\x4e\x91\xde\x64\x94\x06\x8c\x8f\xfa\x26\x09\x41\x8a\x68\x9e\x72\x68\xd6\x2c\x4c\x10\x2d\xa7\x94\x12\x34\x5d\x51\x98\xb5\xd4\xc8\x59\x75\x04\x50\x8c\xa0\x7d\xb8\xa4\x64\x15\xd2\x15\xe9\xa4\x3c\xf4\xea\xdd\x6b\x90\x28\xe5\x34\xab\x7e\x3f\xed\x6d\xb4\x9c\x37\xe3\x2b\x5f\x2e\x30\x11\x0e\xf0\xda\x90\x6d\x22\xc7\x41\x04\xf4\x4f\x2f\xa7\x93\xca\xda\xb1\x6f\x99\xd2\x3b\x73\xab\xe5\xea\x48\x6d\xa5\x32\xda\x50\x9c\xcf\x73\xa0\x84\xd2\xf4\x96\x66\x63\xc9\xa1\x7d\x09\xe8\xee\x85\x1f\x8d\x9d\xdc\xb4\xef\x47\xdf\xa8\x8d\x5e\x93\x03\xf7\xec\x7a\xef\x61\x4b\x6a\xd9\xed\x0e\x42\xc8\x79\x8f\x6e\xf9\xea\x36\x12\xbf\x83\x14\x58\x4a\x83\x6c\xe5\x60\x4b\x48\xc1\xe6\x52\xf5\x5e\xa4\x69\x6f\x4b\xd6\xfc\x6e\x1d\x04\xea\x36\x82\xb4\x27\x01\xda\x87\xe0\xdc\x5e\x60\x32\x06\x73\x10\x97\x8d\x6a\x93\xfe\x9c\xca\x1b\x5f\x2d\x50\x26\x51\x43\x3d\xf6\x17\x6f\x6a\xcb\x16\x4c\x34\x1b\x4e\xb0\xc7\x16\xd5\x2b\x57\xae\x03\x2c\xbf\xbb\x88\xae\x6f\x9e\xca\x7d\x5b\xb5\xd6\x54\x54\xd3\xcd\x3a\x6c\x22\x91\x60\xb9\xd3\x06\x9b\x7f\xfe\xfc\x05\xfc\xfd\xf8\xc3\xa9\xb9\xc1\xe6\xa6\x2d\x35\x6d\xa8\x1c\xb9\x05\xd9\xde\x12\xb3\xc9\xf1\x24\x9a\xac\xbf\xc4\x64\x8a\xa2\x08\xba\x35\xda\x18\x1d\x70\x2e\xa1\x08\xc4\xd9\xb3\x59\x7e\x6b\xb1\xd3\x44\x51\x49\x77\xb9\xd0\xb2\x9d\xad\xdd\x0b\x5c\xef\x34\x60\xe5\xd7\x69\x91\xe0\x08\x6e\x83\x52\xb9\x69\x69\xcf\x83\x55\xf1\xe4\xbd\x6c\x87\x43\x83\x68\xdf\xaa\xb8\x69\x1b\x90\xe6\x25\x9e\xa2\x18\x8a\x63\x70\x8d\x22\x46\xf9\x4d\x40\x16\xb9\xcb\x3c\xb0\x70\x49\x65\xa5\x96\xab\x98\xa2\x20\x83\x31\x0c\x69\x10\x11\x9c\x46\x78\xad\x84\x2e\x72\xe0\x79\x5c\x14\x8c\x89\x4b\x73\x6c\x96\x4b\xfe\x89\xbb\xe2\xcf\x72\x97\x29\x5b\x01\x79\x7d\xee\x15\xcd\xb3\xb6\xf2\x7b\x95\xef\x9b\xd6\x31\x83\xf4\x25\x08\x21\xfd\xeb\x0a\x92\xbb\xf7\x6c\x41\xf8\xd2\xfc\x9a\xe6\x35\x5f\xad\x78\x2b\xf7\xf2\xa6\x97\x6c\x0f\x54\xde\x54\x7c\x57\x7f\x53\xe5\xfb\x8d\xde\x54\xde\xbf\xa3\x37\x55\xa0\x7b\xf5\xd7\x3d\xd7\xf0\x79\x2b\xef\x5c\xfd\x71\xa3\x17\xd7\x50\x83\x5b\xde\xbe\xfd\x4c\x77\x51\x7c\x45\x40\xee\x82\x8b\xbe\xa6\x18\xf8\x56\x25\x75\xf9\xf0\x8f\xa4\x98\x6e\xf4\x98\x8b\xe9\x1e\x5d\xee\x11\x57\xaf\x4a\xc7\xe1\xfe\xf1\xb7\x5f\x4a\x37\x7e\xb4\xf5\x01\x15\x62\x1f\xec\x35\x55\x07\xa0\x47\x57\x43\xf7\xed\x10\x76\x64\x4d\x54\x1d\x28\x04\xce\x82\xf1\xde\x5e\xfa\x85\xf7\x92\x20\xab\x24\x04\x52\xfe\x58\xb3\x16\x98\x5d\x28\x7f\x7a\x22\x7f\x03\xf9\x1b\x0b\x44\xeb\x8d\xbb\x6c\x35\x5c\x1b\x10\xda\x98\x6a\xd8\xd8\x7b\xe0\x77\xba\x44\xd6\x12\x47\x9e\x82\xa2\x69\x3b\x86\xd5\xd1\xd5\xa1\x1e\x96\xe8\x5f\x04\x42\x48\x0d\xd8\xe9\xf7\x96\x0e\x5a\x5d\xa6\xa3\x2d\xab\x8c\xc4\xb8\x01\xef\x29\xa2\x95\x19\x89\x92\xa1\x6a\x59\xd1\xa4\xd6\xe4\xc6\x56\x4f\x74\x21\x4b\x8e\xf4\x7b\x3a\x54\x12\x75\x48\xcb\x73\xb1\x43\xbf\xe1\x4a\xa2\x91\x63\x25\xd1\xa8\x5b\x25\xd1\x45\xd5\xe1\xb1\xdb\x1a\xa2\xd1\x63\xab\x21\xaa\x6c\xb5\x43\x53\x31\xec\xb7\x55\x41\x34\x7a\x6c\x15\x44\x55\x12\x9b\xaa\x61\x7f\xeb\xf5\x43\x23\x9b\x9c\xdb\x22\x8e\xd2\x10\x00\xf1\xab\x00\xcd\xf0\x57\xbb\x0b\x74\xb0\xd7\x3d\x3d\x64\x8b\x80\x4a\xe9\xf6\xee\x39\x90\x52\x59\xf1\xab\x05\xf4\xc2\x78\x95\x51\x48\x3c\xe9\x7b\x88\xef\x78\xb7\xe3\x04\xe7\xf1\x16\x4e\x8b\x61\xd7\x24\x22\x7b\xf9\x80\x4e\xe9\x19\x87\xc5\x32\xc9\xe0\x87\xa5\xf8\x3b\x40\xc3\xc5\x7d\x84\xae\x2a\x14\xbf\xc0\x45\xe7\xce\x25\x4f\x29\xbd\xc3\xab\x82\xf6\x9e\xa0\x86\x57\x38\xd3\x7a\x24\xbb\xc5\x9b\xfe\xcd\xd2\xb5\x46\x48\xba\x80\x1e\x85\x64\x59\xe4\x15\x52\x82\x93\x79\x2d\xa5\x73\x3c\xd0\xc8\xa0\x65\x5e\x99\x64\x96\x6b\xfe\x45\x6b\x67\x04\x87\x38\xa3\x71\x00\x5b\x8c\x91\xbd\x57\xd7\x10\x63\x71\xcc\x6c\x16\x61\x8c\xb1\xe8\x92\xbc\xdb\x18\xe3\x77\x3f\xdd\xde\xbe\xf8\xfb\x8f\x23\x63\x8c\xb1\x16\x56\x74\x8b\x0f\x32\x99\x27\xda\xca\xe6\xad\xd7\x73\x56\xd3\x22\x7d\x92\x00\x41\x96\xa2\x24\xe1\x7e\xf1\xeb\x9e\x57\x48\x3e\x61\x83\x35\xca\x75\x8e\xec\x59\x15\x30\x61\xa7\xab\xf5\xf1\x62\xf2\xfe\x87\xf4\x8d\x39\x22\x6c\x5a\x2d\xa5\x74\xad\xd1\x37\x6a\xf3\xe4\x6b\xb0\x10\x9b\x37\xdf\xf3\xdd\xb2\x93\x3d\x85\x69\x7c\x1d\x4e\xb2\xa9\x97\x73\x09\x5e\xe0\x45\x30\x65\xb6\x8a\x87\x93\xb2\x6d\x9d\x17\x95\x3d\x06\x1b\x52\x97\x5c\x5a\x8b\x34\xf7\x01\xec\xe4\x45\xb0\x11\x99\xe9\xa0\x0a\x6a\xc6\xa3\xa1\xec\x1a\x64\x1e\x81\x59\xb8\x80\x8c\x95\xdb\xf2\xc0\x4a\x62\x2e\x50\x46\x25\x92\x4b\x87\x06\xd8\xbd\x90\x72\x0d\x32\x09\x19\xea\x90\x68\xf5\xa0\x84\x4c\xcb\x69\x39\x92\x71\x2a\x7d\x0c\xf7\x42\xc3\x93\x6a\x12\x48\x53\xc5\x6b\x8c\x92\x9b\x80\x62\xb5\x9f\xb1\xa0\x10\xc1\x2b\xca\x01\x8a\x85\x57\x46\x4c\x30\xef\x00\xa1\x41\xd7\x0e\x81\x06\x0b\x53\x59\xb8\xa6\x42\x33\xd5\xdf\xa0\xad\xb5\x82\xff\xe7\x9e\x82\xd0\xd0\x60\x46\xd1\xaa\x73\x34\x1c\x36\xd0\x67\x3c\x75\x71\x8a\x6d\x42\xc6\x5f\x57\x90\xd3\x49\x23\x63\x09\xc7\xba\x00\xd9\xa2\xbc\xf8\x33\x9e\xb2\xd3\x2f\x4b\x41\xa8\x04\x46\x35\x8a\xb0\xa9\x8a\x98\x82\xb8\x4a\x69\xa9\xce\x7e\xcb\x86\x9f\xf1\x74\x48\x41\x76\x23\x5b\x19\x48\xc7\x1b\x21\xe0\xce\xbc\x9d\x3e\x0b\xe8\x2d\xc3\x2f\x6c\x94\xef\xd9\x20\x17\x40\xaf\x0f\x69\x36\x35\x8d\x0b\x59\x1d\xab\x6b\x46\x89\x3b\xd7\xb7\x95\xa4\x2f\x71\x42\x17\x6a\xfb\x32\x1d\x23\x89\xc3\xea\x5d\xb5\x55\xa8\x37\x71\x42\xbf\x55\x3b\xcd\xd3\x15\xb8\x8d\xad\xf5\x3b\x7e\x73\xbd\x8e\xd3\xb0\x35\x51\xd4\x9c\xea\x57\xa5\x4f\x45\x4f\xc1\x09\x0c\x2a\x96\x90\x9d\x74\xad\xf5\x86\xf5\x65\xe4\xaa\xe2\x65\xad\xcf\xb5\x9c\xa1\x9d\x4f\x2b\x37\x1a\x92\xe9\x1a\xa4\x0b\x26\x2d\x72\xa6\xd8\x05\x7a\xab\x76\x57\xa9\xb4\x81\x70\x32\xbe\xa4\x0e\x15\x67\xaa\xab\x31\x0f\x66\x92\x6f\xf5\xe3\x21\x4f\x1d\xcb\x1b\xe2\x9b\xb4\x21\x1c\x59\x92\x37\x8c\xf3\x95\xe1\x85\xda\x61\xe0\x76\x04\x6c\xe1\x79\x51\x57\x43\xcc\xb9\x97\x43\xa2\xc6\x31\x16\x29\x8f\xb2\xf7\x65\x3e\x49\xc3\x55\x1f\x60\x6e\x75\x3a\xf7\x44\x1b\x0e\x87\x1b\xe5\x63\x3b\x1f\x71\xf7\x7b\xc2\x19\xb9\x4a\x9c\x64\xae\x4c\x55\x3e\xc6\x85\xa1\x0c\x59\x8c\x4d\x05\xa8\x79\x15\x7b\xbe\xf6\xcf\x1c\x4e\xc6\xc6\x2a\x73\xf7\x9c\x6b\x13\x07\x56\x66\x57\x94\xc4\x6f\x24\x1d\x3a\xf9\x7b\xda\x66\x62\x77\x2a\x38\xd9\xae\x6a\x03\xba\x56\x50\x16\xa6\x07\x25\x91\xa9\xd7\x60\xde\x1b\x24\x97\xc9\xdc\xeb\x0a\x69\xb8\x60\x07\x41\x66\x7c\x4e\x9f\x3b\xac\xe2\x81\x64\xcf\x7c\x41\x08\x76\x41\x8c\xb9\x5f\xfb\xe6\x0c\xaf\xe2\x28\xf9\xc7\x1f\xa8\x17\xe2\x38\x86\x21\xf5\xf8\xe4\xcc\xae\xdb\x5e\x8d\xee\x7b\xad\x1c\x91\x28\x15\xe1\x02\x10\x5a\x80\xe6\x78\x15\x42\x18\xc8\x63\xd6\xd5\x72\x06\x1a\xf8\xab\x4c\x96\xc7\x78\xcf\x0a\xb5\x24\x93\x1c\x44\x60\x06\xc9\x2d\x8c\x38\x6e\x2a\xbb\xe4\xdd\xab\xaf\xbe\xa5\xd4\x3a\xf7\xf8\x12\x3c\xe7\xa9\x26\xc6\x50\x93\xfc\x31\xef\x59\xaf\x81\xff\xb0\x99\x8a\x9e\x5f\xf5\x49\xa6\x90\x30\x3e\xc8\xb5\x22\x36\xe6\x12\x7c\xf1\x07\xbe\x15\x28\x43\x15\x5d\xd5\x31\xb6\x4c\x38\x75\x73\xf0\x6e\x66\xe2\x3e\x4e\x51\xa3\x74\xf3\xf9\xed\x4a\x9b\x72\x4f\x3d\x89\x1d\x8b\xd8\xd9\x54\xda\x94\x96\xe1\xf4\x8e\x97\xf0\xe9\x7c\x55\x08\xa1\xa2\xa0\xa3\x41\x16\xe5\x68\xcc\x5c\x1c\xa1\xef\xfa\x12\x47\x11\x48\xe6\x90\x38\x08\xa4\x62\xce\xdb\xc9\x24\xc3\x30\x8f\x48\x2c\x6d\x5e\xf3\x66\x8b\x56\x6c\x17\xf8\x48\xd3\x60\x4a\x20\x88\x42\xb2\x5a\x4e\xb3\x1d\x47\x3e\x0e\xfe\xfa\x2b\x7a\xf6\xf9\x22\x31\xd7\xc2\x95\xf3\xe4\xbb\x87\x63\xf4\x57\xa3\x21\xfb\x03\x1f\x82\x70\x51\xec\x03\xf5\xdd\x9a\x05\x9a\x64\xeb\x18\x59\x1d\x0d\x2a\xb8\x4d\x69\x18\xb2\xef\x92\xb0\xcc\xf9\xab\x8a\x72\x8d\xba\xf5\xfe\x51\x4c\x08\x81\x90\xa2\x5b\x68\x41\xb9\xf2\x4d\x70\x0e\x8a\x25\xe8\x28\xa4\x81\xb6\x4f\x17\x04\xce\xfc\x81\xff\x2f\x46\x79\x5b\x58\x8f\xc5\x34\xfe\xeb\x3f\xff\xff\x9b\x45\xd2\x6b\xc6\x21\xbf\x47\x2b\xa7\x00\x64\x9e\xb5\xc2\x8e\xf9\x5a\xa2\x9a\xec\x89\xea\xee\x35\x74\x2f\x50\xad\x65\xd8\x0c\xc6\xca\x20\xdb\xef\x5c\x7d\xbb\x6d\xb7\x75\xcb\xa2\xeb\x22\x5c\xbb\xd3\xdd\x7b\xfe\x12\x86\xaf\x3e\xa7\xef\xcd\xbb\x57\xca\x7b\x09\xea\xd7\xb0\x6d\x8f\x07\x7e\xc0\x3e\x04\x28\x29\x55\x2f\xa5\x52\xba\x45\x07\xd2\xb4\x2e\x94\x05\x98\xbf\x7a\xb9\x79\x1c\x75\x28\xbf\x15\xf6\xb4\x55\xc5\xcc\x56\xd3\x05\x2c\xb6\x12\xff\x11\xc7\x42\x59\xf2\xc7\x76\xed\xa5\xd6\xbd\x8f\x37\x73\xb5\x4d\xb7\x8b\xe7\x41\x26\x73\xe4\x43\xaa\xdb\x47\x56\x7f\xdb\xcf\x30\xb1\xfb\xb8\x7c\x73\x50\x94\xec\xdf\xd4\xf1\x08\x0a\xe6\x2d\x64\x84\x98\x9f\x86\x14\x71\xad\x8b\x5f\x8d\x32\x32\x1b\x19\x27\x21\xa0\x86\x5f\xfd\xa1\x3f\x30\xc8\x66\xc3\x17\x82\x3b\xb6\xc2\x2a\xdd\x84\x6d\x7e\xdb\x6c\x60\xdc\x28\xa3\xbc\xd9\x51\x7e\xb2\x2a\xc4\xd7\x31\xa0\xac\x48\x4f\xed\x07\xd2\xbd\x0b\xf3\x1a\x0f\xf7\x25\xcf\x65\xad\xd0\x4e\xa5\xf9\x9b\xec\xef\xf3\xf1\xd1\xf8\x8d\x7b\x16\x8a\x98\xb4\x2d\x81\xde\x2b\xd1\xd7\x39\x76\x09\xfa\x22\xfe\x90\x5d\x1f\x85\xa5\x40\x6e\x60\x52\x8f\x97\xe7\x0c\xc4\x8b\x1b\xcd\xbb\xc6\x7d\xdf\x59\xeb\x08\x71\x02\x03\xba\x40\x44\x7d\xbc\x08\x4f\xda\x59\xba\x56\x6b\xf2\x53\xde\x5a\xbd\x4b\xb7\xdd\x72\x3c\x9e\xb1\x67\x7f\x43\x07\xe1\x59\x95\x99\xf5\xd3\xd3\xb0\x73\x9b\x63\x77\x3d\xef\x15\xce\x0d\x5b\xed\x94\x5a\xe1\xc9\x4e\x37\x4a\x7c\x70\xf9\x72\x79\x85\xdd\x93\xeb\xb6\x4d\xd7\x92\xf1\xaf\xc7\x9a\xa8\x25\x9b\x43\x2c\x40\xf6\xa8\xb3\xb3\xda\xa2\xf7\x5b\x24\xc1\x98\x43\x9e\x72\xd9\x90\x05\x64\x79\xa4\x5f\xb6\x61\x74\xb3\x45\x25\x35\xd6\xa4\x1a\x0f\x64\x65\x2a\x39\x24\xe1\x75\x25\x4c\xa4\xff\xbc\x83\xb4\x08\x95\x5c\x65\x5b\x3e\xe9\xe1\x3a\x36\xed\x19\x94\x9d\x13\x80\x92\xbc\x26\x3f\xca\x3f\x70\xa7\xac\x57\x7c\xac\x7a\xcb\x2c\x63\xbd\x88\xd1\x1c\x09\xb8\xab\x81\x0f\xf3\x0f\x62\xac\xe2\x63\x73\x1a\x46\x5b\x72\x03\xd7\xd4\x2a\x55\xad\x25\x76\xb2\x71\x3d\x0c\x35\xb0\xb6\x98\xbe\x7b\xbe\x86\xe1\x39\x0b\x4a\xd3\xd3\x28\xb2\xb6\x0f\x70\x18\x42\xaf\x05\xed\xc6\x40\x56\xb9\xa8\x77\x4f\x77\x77\x95\x74\x8f\x81\xfb\xf5\x37\x72\x6b\xdd\x6e\x09\xdf\xf6\x7d\xe8\x56\xce\xc9\xed\xce\x5c\x9c\xde\x05\x79\x23\xf8\x9d\x9e\xb7\x18\x46\x1f\x57\x1f\xc9\xd4\xed\xbc\xb5\xe5\x72\x64\x45\x0d\x78\xb6\x0a\x43\xa8\xc0\xe3\xb4\xfb\x08\x9b\x91\x84\x98\x78\x9d\x62\x12\x41\x12\x4b\x0f\xb8\x08\x7e\x70\xfd\x17\x50\x14\xd6\x0f\xc1\x0d\x0e\x64\x0f\xc4\x6b\x70\xa7\xf8\x0e\xdd\xa3\x29\x29\x82\xd1\xff\xc7\xf9\x24\xe6\x0b\x5f\xa1\x91\x03\x10\xe3\x66\xfe\xc2\x96\xa5\x82\x22\x30\xf5\x4d\x2d\x54\x87\xa5\xe1\x71\x37\x8f\x11\x5c\x77\xbf\x36\x2f\x10\x88\x21\xa1\x01\x25\x08\x24\xf3\xf2\xbc\xb9\xb7\x25\x02\x51\x84\x93\x40\x13\x07\x55\xf5\x28\x8c\x51\x3a\xc5\x80\x44\x57\xa2\xbf\x64\xce\x3d\xe5\x02\x7e\x6a\x5e\x82\x5c\x65\xd2\x07\xca\x3d\x3d\x29\x24\x33\x4c\x96\x25\x12\x5d\x12\xa1\x10\x50\x78\x99\x33\xa9\x03\xec\x59\x15\x34\x4d\xb2\x58\x71\xf0\xeb\x9c\xd6\x9a\xa9\x5c\xdf\x31\x20\x07\xd1\x33\xa3\xf0\x6d\x57\x23\xd5\xcb\xe1\x50\xae\xe0\x56\x07\x43\x84\x32\x61\xda\x21\x09\xa2\xb6\xdb\xd3\xe1\xfd\xfa\x7c\x9c\x5c\xfc\x19\x98\x9d\xd0\x11\xa0\xab\x65\x11\x3d\x1a\xf8\xff\x43\x3e\xa0\xee\x91\x66\xbb\xfc\x76\xde\xa4\xb8\x46\x70\x96\x35\x7b\x23\x18\xfb\xbe\x07\x75\x27\x41\xd5\x8d\x40\xb8\x83\xda\x04\x8c\x0e\xb2\x9b\x5c\x52\xb0\xe9\xee\xe5\x1f\xee\xd4\x0f\x02\xfa\x6e\xe0\x8f\xf6\xf6\xfe\x7b\xfe\xdd\x02\xf2\x66\x07\xfa\x97\x84\x8d\x31\x4e\xbf\x14\x9f\xef\xca\xcf\xf5\xc2\x64\x47\x9f\xc5\xdc\xd2\x8e\xaa\x34\xf6\x9a\xb4\xcc\x52\xe6\x1f\x0c\x26\xad\x22\x7d\xb4\x3f\x98\x18\xf3\x08\x99\x22\xe9\x8b\xad\x7e\x0b\xcf\xf9\x22\x17\xde\x8f\x7f\xe3\x3f\x96\x29\x93\xea\x35\xd7\xd2\xac\xe9\xea\xe8\x35\x9d\x2f\xb5\xb4\xe4\x05\x60\x72\x59\x9e\x08\x75\x33\x02\x65\xa7\xf2\xec\xbe\xce\x67\xce\x39\xd3\x10\x0d\x64\x63\x67\xf4\x4e\x98\x67\xe3\xe2\x10\xb9\xe4\x5f\x59\x0d\x0b\x1c\xdb\xd5\x66\x2d\x48\x9a\x53\xa8\xbd\xbe\x75\xd3\x20\x69\x25\x6e\x57\x5f\x89\x41\xf1\x63\x21\x82\x1b\xa3\xa2\x7a\xe8\xbf\x35\x45\x9c\x0f\x5e\x59\x83\xea\xec\x44\x80\x4a\x29\xa3\xe6\x16\x33\xaf\xa8\x75\x6f\x40\xd4\x31\x53\xbd\xda\x2d\x85\x5f\x9d\xd7\x44\x58\xbe\x54\x63\x1d\xbe\x18\x2b\xa8\x47\x38\xaa\x33\xb6\x23\x70\xb4\xc6\x55\xf5\xcb\x1b\x6a\x92\xad\x6a\xd1\x6d\xee\x15\xd5\xdb\x3b\x14\x14\xb7\xf7\x72\xe8\x10\x9f\x1d\x7c\x72\x42\x71\xb7\x45\x0a\xb6\x3e\x50\xab\x07\xe1\x76\xa7\x2a\x01\x28\x09\x52\x9c\xe2\x5b\xb8\xeb\x23\xf5\xf8\xea\x6f\x57\xc9\xec\xc5\xcc\x7c\xa4\x2e\x05\x34\xa6\x31\xa6\x2b\xe7\x1f\x2c\x61\xb2\x2a\x85\x35\xca\xce\x51\x06\xa6\x31\x8c\x8a\x6d\x5f\xea\xc5\x03\x9f\x12\x34\x9f\x43\x72\xa6\x43\x91\x2b\x37\xe5\xbb\x40\x91\xa5\xb9\xa7\xad\xea\xe0\x11\x7d\x75\x3c\xfe\x9d\x3f\xf0\xc5\xbf\x9a\x76\xa8\x09\x64\xf5\x11\xfe\x05\xa6\x1e\x33\xe7\xd7\x30\xf2\x28\x16\xce\xa1\xbc\x80\x5e\x1f\xa3\xdc\x8e\x85\x0d\x51\x17\xf7\x91\x9c\x83\x9a\xcd\xc7\x25\x8c\x4c\xb7\xf0\x5c\xe7\xa5\x64\xd5\x69\x88\xb8\xd5\xe2\x10\x8b\xd2\x2a\xf7\xaa\xd0\xa0\x15\x41\x85\x93\x6c\x35\x5d\x22\x6a\xef\xf5\xce\xbf\xff\x75\x05\x57\xb0\x48\x6a\xb4\xc1\x94\xa6\x04\xde\xc2\x84\x9e\xe7\xda\x95\xae\x91\x57\x15\x78\x41\x1a\x45\xe2\x89\x71\x85\x29\x81\x33\x58\x8d\xf9\x97\xff\x68\x52\x86\x8d\x59\x6b\x7a\x59\x3b\x15\x17\xfb\x46\x11\xc5\xcb\xe3\x02\x25\x5e\x9f\x77\xc4\xe2\xcb\xfe\xa3\xc4\x7e\xed\xda\x6d\x60\x86\x60\x6c\x2d\xff\x3c\x2a\xb8\xdf\x70\xa7\x38\xb1\x78\x36\x2f\x85\xa4\xb4\xf2\x6b\x27\x39\xc5\xf3\xb9\x0a\x6c\x5a\xa8\x15\x6c\x49\xaf\xc4\x8f\xc5\x2e\x8a\x24\xe2\xc4\x8b\x44\xdf\x4a\x2e\x36\x52\xfd\x5e\x15\x6a\xa7\x10\xf1\x3e\x05\x64\x0e\xe9\x30\x5c\xc0\xf0\x06\xe6\xa5\x1a\x8d\x98\x19\xe7\x72\x64\xf7\xbe\x6b\xae\x76\x38\x87\xf6\xcd\x0b\xcb\x6a\xf6\xf6\xd5\x02\x7a\x60\x89\x57\x09\xf5\xf0\xcc\xa3\x68\x09\x3d\x20\xf7\xf9\x72\x95\x51\x8e\x60\x14\x43\x0a\x39\x64\x3e\x4a\x86\xe6\x9c\x0d\x8b\x15\x88\x92\x19\x0e\x42\x44\xc2\x18\x06\x78\x45\xf3\x49\x74\x28\xed\x6d\x8a\xa7\x77\x83\xea\xb5\x2d\xdd\xc6\xb9\xab\x9c\xaf\x3d\x91\xe3\x12\x18\x98\x5c\x4e\x21\xc5\x6b\x48\x24\xb2\x72\xc9\xa1\x14\xcc\xb9\x36\x53\x87\x54\xe6\x27\x42\x81\x75\xce\xd1\x02\xd9\x04\xe4\x4b\xac\x08\x77\xac\xfe\x75\x85\xc2\x9b\x62\x43\xea\x68\xca\x30\x3a\xaf\x5f\xd5\x89\xcb\x9b\xc7\x71\x13\xb1\x75\xed\x6a\xdc\x25\x6b\xcd\x04\x52\xd7\xba\xc2\x72\xba\xaf\xb3\xb3\x55\x46\xb1\x1b\x5a\xcd\x96\x8b\x5c\xd3\xff\x5a\xa4\x99\x2a\x55\x15\xe4\x9b\x06\x85\x12\x25\xe9\x8a\xda\xd5\x69\xfe\xb3\xe1\xa8\x4d\x01\xc9\x60\x9e\xc4\xce\xcf\x58\x91\x83\xac\xdb\x54\x7b\x3a\x96\xfe\xc0\x1f\x2d\x26\x7b\x4b\xbf\x38\x0e\xe5\xc3\xb7\x3c\x0d\x2b\xec\xa5\x4d\xad\xb0\x33\xfc\xce\x0e\xab\x90\xaf\x72\xce\xa4\x6d\xb2\x38\x57\xb4\xcd\xe7\x27\xbd\x4b\xb9\x67\x92\xfb\xd8\x4c\x26\xfb\xbe\x9d\xba\x9d\x30\x9c\x95\xae\xcd\x2a\x73\x2c\x60\x9c\x7a\xea\x22\x69\x59\x4a\xca\xd3\x36\xef\x52\xed\x1a\x16\x6e\x1d\xec\x1b\x3b\xef\x67\x98\x84\xf0\xbc\x54\xaf\x1c\xb9\x4b\xbb\xad\xaf\x53\xfe\x25\x1b\x54\xa8\xe2\x0f\x7d\xd0\xbf\x5e\x2e\x61\x84\x00\x85\xf1\x9d\x47\xe0\x12\xdf\x42\x4f\x09\xd4\x79\x33\x82\x97\x1c\x0c\x4b\xf6\x93\xf9\x46\xce\xf9\x6f\x90\x1f\xb9\x72\x75\xc9\x1b\xf3\xbf\xc1\xd3\x96\x96\x16\x55\xfd\xb3\x76\x6f\x6f\xfa\x27\x57\xf9\xc4\xd0\x1e\x1b\xfb\xa1\xf9\xf3\x92\xe2\x54\xe7\x48\x4c\xbc\x4c\xcc\x87\xd7\x38\xff\x76\x38\x32\x77\x09\xe4\x26\x9e\x9d\x37\xf3\xe8\x52\xeb\x20\x9e\x92\x7c\x53\x9c\xde\x21\x87\x1e\xde\xde\xde\x54\x4f\x48\x39\x23\xe3\x5a\xe4\x72\xad\x99\x78\x5d\x5e\xcb\xfc\x2e\xc6\x9d\xb2\xdd\x5b\x9c\x81\x24\x14\xda\x59\x97\x00\x40\x33\x1a\xe9\xf6\xde\x34\xd5\x01\xb6\x95\x2b\x6d\x96\x3d\xa2\x0a\xa7\x3f\xcf\x2e\x3e\xbc\x7a\xb3\x7a\xdb\x5a\xe1\x64\x0a\x48\xad\x4c\x0e\xfd\x56\xa7\xbc\xae\x1b\xeb\x05\x51\x03\xdf\x37\x55\x20\xb9\x20\x19\x89\x5b\xce\x4c\x19\x71\x85\x8c\x29\xa2\x1a\x66\x58\x28\x0e\x4c\x34\x9c\x65\x01\xc1\x98\x1a\xa1\x89\xd8\x05\xda\xed\xa5\xc1\xc7\x7f\xea\x8c\x42\x24\x07\xac\xe6\xac\x39\x2a\x93\x46\x2b\x6c\xc3\x7a\xb3\x0e\xeb\x96\x17\x7d\xbd\x05\xa2\xf3\xcc\xee\x57\x6c\xc3\xc5\x2a\x44\x55\x0a\xd4\x22\xb8\x2e\xb5\x5f\x1b\xae\x5c\x07\xe9\x25\x0b\x20\xb6\x96\x60\xba\xdc\xd9\x56\x84\x45\x88\xc0\x90\x62\x72\x17\xc0\x84\x92\xbb\x1d\x8b\xb1\xd7\x78\x1f\x9f\x5d\x8e\xb1\x7b\xce\xb3\x39\x31\xdf\xdf\x00\x42\xed\x51\xb0\xf1\xbe\x64\xe2\x2b\xfc\x82\x2f\x47\x13\x2f\xeb\xe6\xb3\x5c\x3e\xff\x75\x76\x8e\xdc\x2c\x68\xa3\x92\x37\xe3\x5e\x0b\x45\xbf\x73\xce\x33\xe9\xfc\x24\xa4\xe9\x91\xae\xcf\x31\x6b\x3f\x56\x45\x39\x91\x95\x16\x6a\x96\x68\x4e\xaa\x2a\x48\x5c\x07\xf3\xdf\x92\xb4\x60\xc9\x90\x2e\x20\x21\x78\x60\xc5\x2f\x33\xc1\x57\x49\xcc\x13\x98\xba\xad\xa1\x8e\x34\xa7\x17\xe8\xe7\x43\xc8\x6e\x66\x3a\x5d\x5d\x72\xbd\xbb\xbf\x8b\x96\xe4\x5d\xce\x8b\xd6\x27\xf5\x0e\x47\x15\x10\x39\x0d\x3a\x4f\x01\x8d\x6b\xbc\x95\x59\x83\xcc\x7a\x64\x62\x94\xcf\x6e\x6f\xef\xda\x9a\xe7\xdb\x77\xf2\x6b\x5d\x66\x6e\x25\x82\xe7\x31\x9e\x82\x98\x07\x88\x76\x1e\x90\x3d\xf9\x75\xb5\xca\xee\x52\x73\xc5\x49\x73\x4e\x93\xad\x45\x49\x02\x6e\xa7\x80\x54\x2c\x29\x53\xd2\x93\xc5\xac\x13\xf7\x07\x53\x02\x12\x83\xbf\xa1\x6d\xf3\xcf\x57\x94\x42\x12\xd0\xc2\x5b\x50\xb3\x90\x79\x04\xd9\xdd\x20\xe2\xad\x17\x93\x57\x60\x39\x5d\x11\x1e\x4b\xe6\x7d\x68\xae\x4d\xda\x92\x22\xf9\x54\xdc\xea\x45\x7e\xaf\x0c\x5e\x2b\xed\x69\x4d\xda\x84\x4b\xbd\xc8\x35\x57\x5f\x6e\xd5\x96\xa6\x31\x9e\x63\x81\xb1\x65\xed\xf8\x61\x9e\x9e\x60\x56\x71\x7b\x5b\xe7\x5c\x07\x79\xd8\xb2\xac\xb0\x61\x51\x8d\xc0\x02\x0b\x4a\xd3\xec\xf9\x33\x31\xcd\x94\x60\xbe\x29\x10\x7e\x16\xc9\x36\x4c\x86\x67\x54\xfa\xec\x9e\xe3\x90\xb7\x1f\x29\xda\xe6\xd4\x6d\xd3\xce\x14\xe7\x71\x26\x4a\x51\x32\xcf\x86\x14\xdf\xc0\xc4\x46\xf4\xd3\xb3\xb7\xde\x55\x71\x41\x1b\x08\x5c\x9d\x17\x6a\x15\x0c\xcd\xf4\xe5\x31\x16\x18\xe2\x24\xda\x78\xe3\xe5\x0c\x25\x76\x92\x79\xb1\xa4\xf4\x26\x70\x8e\x70\x12\x64\x6b\x44\xc3\x05\x93\x65\x45\x12\x1d\x0c\x31\x29\xe8\xcd\x4b\x22\xc5\xa9\x6f\x76\x13\x59\x58\xc9\x26\x61\x4a\x5d\x98\x33\x3e\x20\xa6\xf6\xea\x7e\xad\x9f\x8a\x71\xa3\xee\x0f\x46\x9d\x3c\x15\x3d\x01\xce\x5b\x4e\x83\xed\xce\x15\x21\xfa\xa4\x90\xd9\xe9\xa9\xf2\xe5\x87\xcb\xaf\x2f\x7f\xf8\xde\x7c\xaa\xa8\x00\x8c\x8d\x27\x4c\x63\x4e\x24\x6f\x55\x1e\xe2\x78\xb5\xe4\x5e\xbb\x18\xce\x4c\xf1\x3b\x94\xfd\x98\xc2\x24\xb7\x74\x31\xff\xdb\x92\x80\x67\xda\x1d\xd5\x87\x0a\x12\x6f\xf7\x9c\x32\x7d\x44\x2a\x00\x0d\x29\x7e\x31\x48\x33\x18\xf1\x25\xdd\xf6\xa1\xdf\xc2\xd1\xd9\xfd\xf0\x6c\xf4\x8f\x5a\xdf\x94\x1d\x76\x41\x88\x13\x0a\x50\x62\x12\x71\x5d\xce\xc9\xce\xee\x6c\x90\xa1\xc8\x5c\xdc\x9e\x93\xb7\xa9\x32\x4d\xb8\xf2\x45\x55\xe7\x2a\x8e\x2e\x17\x78\xfd\x81\x4b\xe1\x76\x27\x91\x83\x4b\xbd\x64\x39\x9c\xc4\xd6\x46\x3a\x7e\x53\xdf\x18\xf6\x12\x41\x35\x48\x5f\xc9\x15\x15\x33\xee\x92\x0f\x6a\x69\x8b\x25\x1e\xa6\x34\xc4\xb2\x66\xd3\x2a\xae\xb1\xa6\x56\x77\x0d\xb4\xe1\xcf\xca\x0f\xc7\x35\x8a\x0c\x67\x4e\x75\x34\x19\x78\xae\x1e\x93\x4d\x2d\xee\xec\x94\x68\xa6\x51\xf7\x7c\x57\x4b\x6a\xc8\xc6\x0b\xfb\x33\x26\x37\x31\x06\x91\xcb\xce\xec\xb6\x9c\x4e\xbb\xa0\x00\xff\x75\xdb\x08\xee\x8c\xb1\x1d\x5b\xf8\x4d\xe9\x4b\xc6\xa4\x25\xd1\x20\xe9\x25\x0f\xb7\xe6\x9f\xf2\x6c\x2b\x25\xa5\x69\xa0\x24\x3f\x85\x7a\x82\xab\x6c\xac\xa8\x12\x64\x50\xa1\x9b\xf0\x6a\x29\x80\xc9\xd7\xd2\x6f\x22\xc4\xf9\x5c\xc9\x62\xaa\x0e\xa6\xd6\xa2\x8e\xf6\xda\xd3\x4d\xd8\x20\x73\x4c\xf1\x1b\x3c\xcd\x5e\x62\xa2\x3e\xb3\xc8\x5a\xe1\xc4\x2d\x15\x03\x65\xab\x34\xf9\xc0\xaa\x69\xf7\xb9\x43\xd7\x2f\x95\x0a\x07\x78\x26\xfd\x3f\x99\x67\xea\x15\xd3\xdc\xc0\xf7\x55\x17\x02\x5d\x1d\xce\x4d\x2e\x65\x43\x42\x4c\xbb\x50\xe8\x16\x83\xae\xec\x09\x57\xd7\x69\xd5\x63\xda\x60\x8b\xe6\x21\x7b\x17\xe7\x54\x8b\x2c\xd9\x4c\x5a\x9d\x89\xc6\x7b\xfd\x0b\xab\xfb\x21\x65\x91\x2c\x6e\xa4\xe6\x59\xf9\xab\x2b\x41\xfb\x9e\x20\xc7\xfd\x24\xd6\x36\xd9\xe5\xaf\x9b\xaf\x78\x37\xd3\xac\xad\x07\xae\x6a\x3c\x68\x3e\x5a\x75\xf8\xd1\xfe\x60\xdc\xe1\x09\x66\x73\x21\x98\x82\xf0\x26\x22\xd8\x5c\xb9\xd5\xa8\xc2\xf7\xa9\x68\xf7\x6d\xb7\x96\xd6\xa6\xd9\x6a\xfd\x6f\x6e\x56\x2b\x5a\xb2\xb5\x98\xa1\x9d\xa3\x54\xcd\x6e\xb2\x83\x25\xb8\xfa\xc1\x39\x10\x05\xb4\x85\x17\xee\x2a\xd1\xe2\x90\x84\x7e\x91\x29\xc1\x53\x88\xfc\x81\xff\x6f\xd3\x18\x24\x45\x09\x26\xe1\xf6\x54\x82\xd9\x8a\x43\xe2\x25\x98\xc0\x19\x24\xa4\xac\xf1\x2e\x90\x56\x0a\xf2\x04\xfc\x4f\x8b\x4f\x07\x2d\xe7\xda\x6c\xd8\x14\x2a\x93\x19\x0d\x7c\x10\xe7\xb1\x71\xad\x3d\x04\x2d\x15\x04\xf6\xa0\x4a\x53\x9e\x8a\xb7\x7f\x3c\x50\x2f\xca\x59\x94\x29\x7e\x6d\x1c\xba\xe2\x15\x34\xaf\xd9\x5b\xbc\x83\x4a\x95\xa0\x89\x41\x0d\x3b\x6d\x86\xe6\x21\x48\xad\xbd\x04\x15\x42\xe5\x97\x75\x44\x89\xa9\x8f\x60\xf3\x60\x97\x63\x59\xdb\x5c\x96\x34\xb2\x04\x29\x8c\x90\xde\x8c\x4c\xa2\x06\xb7\xa0\x9a\x2c\xbf\x75\xc6\xeb\x36\xbd\xa5\x9c\xfb\x1f\x15\x9b\x44\x3e\x45\xd5\x45\xd2\x2f\xde\xff\xf3\xff\x55\xed\x96\xfc\xd1\xfa\x45\x06\x6d\x5c\x0d\x3c\x99\x66\x36\x50\x9d\x86\xc6\x18\x56\xd6\x2d\x76\xb5\x37\xf0\xff\xd4\x51\xc1\x31\x9d\x16\x7d\x04\x87\x4a\xae\xd9\xca\x79\xf7\x19\x4f\x83\x08\xa6\x31\xbe\xe3\x01\xb1\x08\x52\x80\xe2\x5d\xa7\x18\x1d\xc5\xc7\x87\xf4\xd7\x38\xed\x1a\x1d\x1a\xed\x33\x7d\xd7\x50\x5c\xbd\x84\x94\xa0\x30\x53\x9b\x93\x64\x15\xa8\x9b\x1c\x9e\x53\xed\x33\xee\xeb\xd4\x79\xa6\x10\x2a\x1f\xf1\x5a\xb8\x9d\xf3\xef\x7d\xa5\x4e\xa9\xfc\x4e\x1c\xaa\x6d\xa3\x97\x3d\xce\x7a\x1d\x56\x99\x74\xf5\x7d\x9d\x9e\x50\xaf\x2f\xdf\x9a\x77\xcd\x4c\xd7\x23\x1f\xef\x98\x7f\xf7\xd2\xd9\xdf\x0f\x63\xf0\x57\x0b\x82\x43\xbb\xd3\x59\x0d\x3a\xe0\x2f\x30\xca\x41\x12\xb9\xbb\x9e\xbb\x9d\x99\x84\xf4\x24\xfe\x3e\x7f\x19\x64\x4c\x46\xb5\x49\xe5\x3c\x3f\x41\x25\x99\xa9\x37\xa1\x21\x3a\xd2\x5c\x1f\x3e\x5d\x2d\x53\x48\x84\x5b\x9c\x82\x79\x81\xd4\xaf\x3f\xa8\x02\x02\xd6\x38\xa9\x06\x08\xb0\xfa\x91\xa0\xdd\x4a\xe0\xaf\x2b\x44\x60\xf6\x9e\xe0\x25\xee\xa5\x4b\xa9\xfa\x76\x53\x10\xcd\x39\x24\xa8\x84\xf3\x63\x7f\x2e\x70\x1c\x6b\xe8\x87\x1f\xe4\x14\x3c\x65\x0e\x9d\x8f\x8f\xa6\x19\xa5\xab\x38\x36\xdb\x11\x0e\xf7\x02\xc4\x03\x77\xd5\xde\x4e\xce\xfe\x6c\x2a\xba\x69\x17\xc8\xa1\x79\x93\xa5\xee\x9e\xf1\x05\xe0\x38\x05\x0b\x90\x21\x95\x87\xff\xc5\xb7\xb1\xc5\xad\x7c\xd6\xc0\x4f\x56\x6c\x2b\x36\xd5\xe0\x37\xa8\x26\xff\xa7\x6e\x98\xf6\xd2\xe4\x50\xc9\x48\xb1\x4c\x5b\x94\x2a\xb7\x36\x3a\xd4\xfd\x39\x0d\xed\x0e\x3b\x3c\xe6\x7e\xd2\xe5\xf3\xac\xf0\x7c\xf0\xd1\xd8\x84\x56\x25\x05\x57\x09\x9a\xab\x33\xf0\xc4\x5e\x48\x91\x57\x69\x14\xc6\xeb\xa0\xb8\xa0\x4c\x5c\xcb\xa9\x97\xeb\x31\xfa\x64\xdb\x2c\xf7\x7d\xb3\x8d\xbc\x0d\x4c\x97\x26\xbd\x2b\xdd\xec\xcb\xa7\xda\xb4\xb0\x32\xae\xdd\x7a\x4e\xb7\x27\x0f\x0b\x67\x60\xa1\xb8\xd8\xd1\xaf\xcb\x8b\x15\x6d\xc9\xe9\x7a\x4d\xc1\x68\x77\x38\x56\xbd\x8b\xae\xb2\xb1\x7f\x1d\xa4\x47\xdd\xc3\xa6\x70\xed\x56\x25\x99\x1c\xad\xdf\x9c\x24\xaf\x3f\x9b\x55\x12\x7e\x5a\xf2\x83\x6b\x43\xc5\xc4\xa2\x77\xb8\x2b\x35\xf5\xe3\xa7\x6c\x45\x9d\x35\x25\x6b\xb8\xef\x3c\x7e\xd4\x31\x69\x33\x8d\xa1\xa5\x55\x56\x8c\x32\x9a\x43\x97\xe7\x7b\x2f\xc3\x2b\x12\x1a\xa2\x1d\x9a\xc0\xad\x30\x7e\xf5\xb3\x21\x96\xa0\xaa\xec\xa2\x63\x04\xc8\x32\x48\x68\x80\x96\x69\x8c\x42\x44\x83\xe2\x8a\x60\x01\x63\xa6\x76\x00\x32\x5f\x2d\xf3\x3b\xc4\x86\x13\xa4\xbb\x1e\x30\xd6\xe2\x81\x1c\xef\x9f\x74\xc8\xbe\xfc\xa7\x47\xb1\x37\x85\x1e\xf0\x64\xcb\xcf\x15\x88\xbd\x62\x44\x6f\xba\xa2\xde\x0c\xaf\x92\xc8\x03\x5e\x46\x09\x4a\xe6\x43\xef\x1c\x45\xde\x1d\x5e\x79\x4b\x08\x12\xef\x9f\x7f\x2c\x2f\x16\x23\xfe\xe9\x9f\x7f\xf1\xfe\xf8\x8f\x3f\xf4\xb0\x15\xd8\x66\xfb\xc7\x1f\xbc\x7f\xf5\xde\x9e\x3c\x3f\x3b\xf9\x93\xe7\x1e\x2f\xf1\xdb\x10\xd0\x75\xf8\x69\xab\xf3\xb9\x0e\x68\xf6\xfa\xdc\x1e\xcd\x34\xde\x70\x05\xb2\x1b\x2f\x6f\x7d\xdb\xe5\xc6\x33\xde\x90\x39\xea\x78\xd7\x3b\x1c\xa1\x19\xea\x7c\x5b\x0e\xa0\xdb\xe9\xa6\x06\x3d\xae\xe1\xae\x0b\xd1\x4e\xb6\x13\x29\xde\x7f\xec\x4a\x06\xd9\xe0\xcb\x55\x87\xee\x6d\xa3\x89\xa3\xbb\xb2\xd1\xd8\x97\xfd\x6e\x34\x36\xe2\x7d\x6c\xb4\xf1\x68\x83\x9d\x96\x63\xf5\x6b\xbd\xba\x94\xf0\x8c\xd6\x66\x3a\x6f\x2c\x5c\x74\x91\xca\xa1\xc5\xaf\x8b\x3e\xb6\xee\xb0\x11\x5d\x15\x85\xfe\x73\xaf\x9d\xe9\x7b\x0f\x5a\x43\xe1\xad\xda\xa9\xc6\xf0\xf3\xc7\xef\x0f\xf6\x0e\xc7\x5f\x9d\xe3\x12\x0d\xc9\x3d\xab\x65\x92\x79\x66\xef\x59\x07\xad\x41\x06\xce\x12\xbc\x26\x20\xb5\x9a\xbb\xf6\x84\x09\xf6\x4c\xe1\x60\x6b\x30\x76\x1b\x03\x6b\x62\x0c\x2b\x0a\x5f\x4d\x2d\xe0\xe8\x1c\xd1\x19\x48\x00\x41\x6a\x3e\x84\x76\x51\x04\x33\x44\xb4\xab\x54\xf4\xbe\x32\x14\x20\xbf\x73\x7f\x7a\x7d\x60\x1d\x18\x30\xb7\xfb\x9b\x6c\x4f\x49\x95\xc5\xc4\x09\x14\xa5\x7c\x54\x83\x54\x37\x07\xce\x6b\x00\x7b\x0e\xc4\x54\xe4\x89\xa7\x37\xa4\x6e\xa3\x43\x93\xab\xa0\xc9\xde\xbd\x3f\x56\xab\xdd\xde\x18\xde\x77\x5c\x8f\xf7\x9c\x64\xf7\xb8\x1a\x5c\x49\xef\x48\xd1\x07\x7c\xff\x73\xb1\xf2\xf7\x42\x00\xc9\x55\x57\x98\x82\xf8\x71\xb2\x94\xab\xf4\x9a\x53\xb3\xfc\x90\x9d\x4f\xca\x35\xde\x33\x09\xa6\x7b\x12\x25\xaf\xc4\xc3\xef\x65\xe9\x6a\x2f\xf6\xdb\x5b\xbb\xa2\x6f\x8d\x65\xf5\x24\x52\xd1\x3d\x2d\xde\xc7\xfc\xe9\xf7\xb2\x7c\x86\x77\xdb\x74\x01\x3b\xbb\x15\x84\x0e\xe2\xa6\x7c\x54\xd7\x30\xc1\x14\xcd\x90\xd0\x1d\x3b\x05\x46\x4c\x0e\x37\xcb\xbd\xe7\x30\x0b\x09\x2a\x40\xe3\xba\x43\xe8\x3f\xa4\x2a\x2d\xd5\xc0\x3e\xd5\x68\x35\x88\xba\x5b\xfd\xf9\x2a\x7c\xb6\x77\xb5\xa2\x97\xdf\x8e\xc7\xad\x74\x69\x7c\x03\x1e\xb7\xc2\x35\x7d\xb9\x5a\x2e\x0b\xbd\xce\xd7\x82\xe8\xbf\x5f\xc7\x9b\x42\x86\x3e\xbd\x6d\xb9\xab\xc7\xd2\x53\xb0\xe9\x16\x08\x23\x25\x0a\xfa\x97\x8e\xb7\x9f\xae\x28\xf6\x3e\xc0\x5b\x48\x68\xd7\x5b\x9d\x6c\x12\xc3\x13\xe5\xd9\xd2\xe9\x26\xa9\xb4\x78\x1b\xdd\x5c\x1c\x9a\x9b\xdd\xfe\x3e\x6f\x58\x6f\x46\xa6\x7c\xf2\x92\x59\x76\xc5\x68\xd3\x6d\x61\x6f\xd4\xa9\x5e\x55\xef\x1e\xa6\x7a\xc7\x9a\x7a\xcf\xb5\x8d\x65\x8a\x5b\xea\x63\x77\x4f\x80\xd0\x9f\x39\xaa\x60\xf8\xa8\x63\xa7\x7c\xcc\x02\x68\xdc\x1f\xf8\xbf\x40\x5b\x77\xa5\xcd\x0a\x19\x2e\x9e\x9d\x36\x02\x73\xe8\x73\x75\xa7\x5b\xd3\x5b\x81\x15\xc5\x42\xcc\xf0\xe7\xfe\xc2\xeb\x4e\x2e\x70\xed\xbd\x3a\x3f\x4d\x26\xbe\x56\x68\x58\xf3\x68\xec\x19\x08\xa8\xb8\x36\xf4\xdb\x3b\xf8\x35\xba\x70\xa4\xcd\xb2\x77\x98\x4a\xab\x31\xdc\x65\x1e\xce\x4a\x7e\x97\x41\x3b\xd8\x0e\x6d\x3b\xaf\xba\x5b\x1a\xb1\x61\x34\x9f\xe5\xc8\x84\x5e\x62\xdc\xba\xb9\x50\xff\xee\xce\x90\xbe\xd1\x5f\x4d\x5e\x2f\x8e\xf7\xfb\x32\x18\x2a\x52\xbb\x27\x4b\x81\xb7\x72\x86\x60\xb9\x63\x2b\xe1\x65\x9a\xa2\x1f\xe3\xd7\xaf\xcd\x56\x02\x81\x21\x26\x86\x7c\xc1\x2a\x66\x1b\x48\x12\xcc\x2e\x88\xce\xcb\xf7\xcb\xf1\x6b\x6e\x20\xb7\xc2\x15\xed\x79\xc8\x1b\xb8\x36\x14\xb8\x15\x99\x22\x40\x64\x05\xae\xcf\xd5\xde\x62\x1d\xc0\xe0\xd4\xec\x29\xb4\x84\x3c\x5b\x31\xc1\xd4\x5c\xab\xa8\x3d\xdc\x3d\x9d\xc9\x31\x8a\x25\x37\x5b\xc4\xde\x64\x93\xc7\x6c\x7b\xa6\x7d\x4c\x6e\x12\xbc\x4e\x38\x46\x7f\xeb\xb1\xe6\xae\xba\xa9\x49\x48\x6d\x94\xc7\x9c\xa1\xcd\xbe\x0b\x49\xa5\x6a\x1a\xad\x2d\x01\xa9\x46\x3d\xb7\xae\xdc\xf7\x8a\xb7\x69\xde\xdf\xdb\x8b\x0c\x34\x9b\x09\xec\xf8\x2c\x00\x49\x24\xa9\xb8\x6b\xef\x42\x76\x9b\x9e\xfd\x7a\xf2\xec\xd0\x2c\x37\xe4\x4a\x97\xe8\xc9\xee\x4e\x06\xfe\xba\xb9\x11\x5f\x74\x57\xae\x6d\x56\x4d\xfc\x08\xea\xb8\x0a\x88\x46\x1f\x59\xfd\xf1\x01\xc1\xeb\xdc\xef\x59\xb6\xa9\xd1\xae\x2b\x90\x9e\xe5\x65\x31\x5e\x43\x12\x82\x0c\x2a\x07\xeb\xd5\x5d\x6a\xe8\xc2\xb2\x09\x5e\x85\x61\x8a\x21\x34\xb5\x6b\xb1\x0e\x56\x73\xee\x02\x72\x53\xc2\x7b\x68\xbd\x78\xb6\x7c\x23\xbf\x5a\xf1\x23\x63\x85\x4e\x43\xf2\x4e\x99\xd5\xae\x3c\x6d\x7a\xfb\x9f\xb7\xe9\x95\xea\x38\xad\x08\xc6\x90\x76\x9d\x58\xf0\x00\x13\x83\x11\xea\x3c\xaf\x3f\x3f\x0b\x2a\x1a\xdc\x76\x9d\x35\x07\xd5\x03\xd0\xac\x0e\x96\xaa\x71\x15\x9b\x70\x6f\xe0\x3f\xb7\x38\xd0\x1f\x96\x9d\x36\xdc\x88\x9e\xf6\x7d\x58\x74\x62\x29\x76\x85\x5f\x79\x7f\xb8\xae\xb9\xca\x7d\x87\x13\x78\x97\x0c\xfd\x40\xa4\xf9\x31\x8e\x76\x4d\x9a\xae\x5b\x6a\x97\x94\xf1\xfe\xd7\xff\xf6\xee\x8d\xbd\xb6\x7f\xc7\x2d\x37\x81\x5d\x3c\x75\x95\x4c\xce\xe6\x68\xcd\xbc\xac\xeb\x1e\xb9\x3a\xd6\x3d\x4d\xdf\xd4\xf6\x73\x43\x05\x63\xd4\x41\xc1\xb8\x27\x8d\xc0\x75\x0a\x1d\x44\x78\x7d\xc8\xce\x22\xbc\x6f\x6d\xc0\x34\xa5\xce\xc2\xb3\x6f\x4d\xc0\x34\xa9\xae\x62\x4b\xd5\x02\x7a\xd3\x00\xcc\xd1\xef\xb2\x5c\xc3\x70\xf2\x7b\xff\xee\x9a\xa5\x53\xdf\x20\x76\x0d\x58\xb5\x2e\x6d\xe6\x54\x6e\x6a\x4a\x63\x62\x50\xee\xec\x92\xca\x2f\x73\x43\xa3\x78\x85\x1f\xcb\xed\xdf\x50\xa1\xa2\x13\xe1\x3f\x76\x64\x9b\x9a\xdf\xbc\x17\x03\x75\xc7\xd6\xe8\xe7\x97\xb3\xef\xc9\xec\x67\x4b\x75\x89\x48\x7c\x19\x14\xb0\xe4\xc2\x59\x25\x3c\x2d\x79\x1b\xf3\x10\xaf\x44\x6e\x07\x07\x6b\x10\xbb\xa9\x23\x34\x63\xad\x5d\x29\xa7\x4b\xbe\x33\xb7\x30\x20\xeb\x83\x99\x7b\x79\x5a\x90\x1d\xfb\x95\xf4\xad\x93\xd9\x50\xdc\x5b\xc7\xed\x28\xf3\xfb\x95\xf8\x0d\xb3\xea\x28\xf6\xfb\x15\xfa\x0d\xf3\xea\x26\xf9\x4b\xb9\xdf\x93\xd4\xb7\x24\x6d\xb8\xe9\x8a\x53\xac\xf5\xda\x7a\x83\xa7\xcf\x55\x85\x56\x79\xeb\xd7\xe7\xed\x4a\xad\x59\x7b\x2b\x89\xab\x80\xc1\xdc\x42\x32\x15\x0d\x7f\x06\x7d\xd2\x7d\x9b\xd2\x4d\x97\xf3\xad\x9f\xb3\x4d\x79\x29\xf5\x80\x53\xbe\x6e\x3e\xe5\x3a\x79\x8b\x2d\x6a\x74\x4e\x54\xb5\xe0\xb3\x0f\x85\x5a\x73\xea\x6f\x2f\x8a\x9b\xf4\xdc\x27\x8d\xfb\x49\xe3\x7e\x9c\x1a\xf7\xa6\xf2\xb7\x4c\xc8\x7b\xae\xfb\x15\x2c\xca\xbb\x51\x06\x57\x23\x6b\xa2\xa1\xbc\x0b\x5a\xe9\x1f\xab\x82\xe2\x78\xe0\x07\xec\x43\x80\x92\x86\x01\x1b\xc6\xed\xea\x18\x2f\x84\xaa\x50\x0b\x03\xae\x25\x16\x7b\x34\xcb\x82\xfc\x6a\x36\x97\x43\x0d\x0a\x40\xcb\x00\x38\xe0\x30\x02\xaa\x99\x53\xd2\xf2\x50\xfb\xad\xdd\xdd\x71\x30\x38\xd4\x01\xa1\xba\xc8\xdc\xda\xe1\xb7\x25\x9b\x0f\xaa\xc7\x67\x37\xb4\xae\xdf\x96\x6d\xd7\xfd\xe4\x93\x24\x06\xd9\x8d\xcb\x7e\xe8\x7c\xe6\x8d\x7b\x3a\xf3\xec\xd1\x9e\xae\x61\xac\xdf\x6e\xe4\xe9\x91\xc6\x9d\x1e\x67\xd4\x49\x8f\x39\xf5\x18\x71\x32\x79\x8c\xd9\xf6\x7a\x6e\xf0\x8b\x1b\xcf\x2f\x4b\x46\xe3\x69\xe1\x33\x70\x85\xd9\xae\x1d\x5e\xdd\x06\x72\xc9\xef\x32\x3a\x90\x2b\x87\xd2\xc4\x7e\x28\x4d\x1a\x0f\x9e\xf2\xb9\x7a\xf3\x2e\x15\x7c\x7a\xbf\x44\xc7\x89\x60\x68\x79\x4b\x05\x37\xdb\xd5\x36\x1a\xb8\xf4\x8c\xb1\x73\xcf\x64\xb0\xdf\xe9\x84\xdc\xd6\x28\x74\xdf\x15\xce\x00\xed\x7d\x1c\x6a\xe3\xda\xa1\x36\x6e\x39\xd4\x9c\xc1\xf2\x1d\x83\x27\x4e\xa0\x3a\xf7\xe2\xe7\xdc\xda\xa9\xc9\x56\x0f\xef\xba\x4b\xd9\xea\x87\x0f\xa3\xd7\xdf\x3f\x9b\x35\x97\xf0\xc8\x8c\x59\xc6\x4c\x2f\x01\x8a\x57\xc4\xe0\xba\xd4\x91\xa5\x52\x40\x32\xf8\x82\x10\xdc\xd6\x3d\xb1\x45\x4d\xd3\x0a\xca\xca\xa2\x3e\x6b\xe3\x17\x73\xf1\x1e\x87\xd8\x65\xb7\xef\x2b\x77\xbe\x67\x53\xf4\xe4\x1c\x2d\x36\x4d\x6a\x02\xa0\x55\xdf\xcd\x0a\x23\xe8\x5c\x96\xa0\x12\x2d\x06\xc9\x23\xa7\x59\x0c\x92\x8d\x48\x56\xbe\x59\xaf\x14\x23\xab\x47\x4e\xb0\x0f\xab\x8d\xe8\x55\xbe\xd7\x96\xe4\x6a\xd6\x54\x39\x3e\x30\xe5\xd8\xd7\xf2\x38\xe1\x8f\x6c\x3a\x47\xac\xe0\xca\xd9\x02\xaf\x5f\xf0\x11\xde\xc1\x2c\x93\x63\x56\x1f\x56\x60\xa8\x5c\x0f\xfc\x04\xae\x3b\x1d\x5d\x1d\x17\x11\x25\x33\x6c\x32\xe9\x5a\x86\x91\x50\x1e\x8d\xa9\x6e\x5d\x2b\x67\xb5\x9b\xbb\x72\x0f\xf0\xde\xe0\xa9\x39\xc9\xc9\xc2\x43\x5c\xb6\x65\x14\x7a\x98\x78\x60\x45\x17\x98\x78\xaf\xce\xde\xb2\x4f\x6f\x2e\x7f\xbc\xf0\x28\xf6\x44\xf2\x2f\xfb\xeb\x0e\xaf\x88\x17\x8a\x8e\x0d\x43\xef\xd4\x63\x1b\xd5\x5b\xa3\x38\xf6\xa6\xd0\x23\xf0\xd7\x15\xcc\x28\x8c\xbc\x29\x9c\x61\x02\x3d\xba\x80\xde\x67\x3c\xf5\x50\x26\x87\xa0\x30\x1a\xda\x13\xb0\xac\xa5\x5d\x2d\xf0\x27\x28\x0b\x42\x98\x50\x48\x20\x47\x82\x5d\xa2\x04\x2d\x57\xcb\x16\xba\x36\xb4\xec\x2f\xb1\x19\x73\xa6\xa8\xa3\xff\x0b\xec\xc5\xa0\x80\x66\x34\xf0\x73\x1d\x8d\xb1\x98\xd0\x8f\x37\xa0\xa1\x10\xbc\x6b\xc9\xb6\x6b\x36\xf4\x46\x55\xb4\xbd\xd4\xd1\x7a\x8c\x29\xbd\xf3\x02\x95\xd7\x88\x2e\x19\x82\x24\x84\xb1\xc8\xaf\x75\x4f\x6b\x72\x5a\xc7\x16\x8c\xcd\x4e\xcd\x1d\xce\xf8\x34\x4d\xdd\xd3\xf2\x5f\x3a\xb6\x7b\xb1\x8a\xfa\x7e\xca\x8a\x6b\x2a\x3c\xba\xbd\x0b\x42\x1c\xc1\x25\xe2\x47\x46\xa1\xb5\x0b\x98\x01\x09\x37\x20\x5c\x98\xbc\xcf\x51\xaa\xc3\x81\x2b\xe6\xc8\x67\x3c\xf5\x07\xfe\xbf\x25\x70\x5d\x2e\x6d\x19\xa9\xf9\x8c\xa7\x97\x29\x0c\x15\x0b\xc4\x4e\xda\xe3\x81\xbf\x5c\xd1\xb6\x81\x75\xf1\x3f\x30\xc1\x9a\xe3\x88\x37\x64\x5a\xc0\xa5\x68\xcc\x34\xe5\xbd\x98\x79\x2b\x15\x78\xc1\x71\x71\x45\x3f\xf1\xcf\xe0\x16\x08\x5c\x00\x81\xb5\xbb\x40\xfe\x60\x2c\x88\x6d\x73\xae\x99\xe2\x88\x9d\x70\x12\x12\x0a\x13\xce\x85\x20\xcb\x70\x88\x80\x6c\xf6\x6f\xde\x6e\x55\xbe\xae\xc3\x4a\xe7\xcc\x2d\x61\x47\x0c\x3d\x4d\x98\x74\xe6\x80\x16\x1f\x56\x49\x82\x92\x79\xde\xdd\x24\xc6\x20\xe2\x1f\x15\x2b\xbc\xbe\x07\x52\x48\x66\x98\x2c\xf5\xd1\xaa\xdd\x28\x22\x94\xc9\x86\x58\x55\xe6\x30\x3d\x9c\x5f\x93\xe0\x8e\x0b\x2d\x09\x49\x99\x39\x5b\x10\x46\x57\x32\x9b\xd7\xa6\x2f\x8d\x47\x50\xc0\x51\xdf\xc9\x95\x1c\x36\xbd\x52\xc5\x79\xd2\x59\x2a\x3a\x0b\x3b\x18\x4c\x2b\xd8\xa6\xb2\x5c\x2d\x50\xc6\x14\x0b\xa6\x63\x20\x21\xd4\x89\x60\x34\x8f\xb2\x9f\x98\xde\xc1\x15\x93\x05\xb8\x85\x1e\x4e\x74\xd5\xe5\x37\xac\x84\xa8\xfc\xf6\xa4\x82\x34\x31\xd8\x46\xc7\x6c\x04\xc8\x4d\xcb\x01\x5b\xa6\xa0\xe5\xc7\x92\xcc\x25\x28\xdc\x77\xaa\x8c\xfc\x71\x45\xd3\x15\x95\x21\xa6\xd2\xfd\xdb\xdb\x11\x54\x3b\x38\xd4\xd7\xb2\x1c\x1a\xc5\x9c\x66\x00\xc5\x30\xba\xfa\xbe\xac\x0d\xf6\x4b\x7c\x7f\xdf\x04\xc7\x67\xcf\x36\xd8\x68\xf5\x2e\xc3\x05\x8c\x56\x31\x24\x5e\x44\xee\x02\xb2\xea\x63\x19\xfd\x86\xb0\x4c\x3b\x05\xec\x82\x5f\x4b\x1f\xd9\x68\x10\x9b\xd7\xb5\x70\xa7\x05\x33\xe9\x4f\x2b\x7d\xad\xea\xd0\xb9\xa3\x55\xf8\xd8\x1d\xbc\xa9\x13\x7b\x5c\xa3\x69\x72\xa7\x71\xec\x51\x90\xdd\x30\xbb\x2e\x0c\x61\x96\x31\xe5\xf3\xce\x93\x40\xa0\x30\x1a\x76\xac\xe7\x6c\xad\xaa\x51\x3d\x07\x1a\x65\x53\x02\xe1\xb2\x68\xde\x89\xb2\x97\xab\x78\x86\xe2\x58\xa0\x30\xb4\x5e\x6f\x8e\x03\x6c\x78\x3a\xeb\x1b\x4b\xd9\x26\xdd\x4f\x68\x37\x9b\xca\xf3\xde\x97\x6f\xe3\xfd\x11\xcd\x38\x3a\x48\xb8\xc0\x38\x83\xcc\x58\x27\xab\xa4\x38\x0b\x07\xec\xa0\xcc\xa0\xa7\x60\xb5\x16\x76\x7b\x46\x71\x9a\xc2\xe8\x4f\x0d\xd2\xbe\xaf\x5d\xd6\x05\xdc\xc8\xba\x6e\x15\x38\x71\x7e\x46\x66\x38\x06\x12\x7b\xe3\x77\x85\x70\x24\x9c\x70\x0a\x76\xcb\xde\xde\xf3\xb3\xd1\xa4\x0b\x7a\x8b\x67\xc4\xd0\xe9\x08\x23\x6e\x1e\xa4\x05\x4a\xbc\xf1\xa6\x36\x38\xf1\xc6\x9b\x1b\x21\xc5\x1b\xef\x6c\x86\x15\x6f\xbc\xb5\x09\x5a\xbc\xf1\xc6\x46\x78\xf1\xc6\x3b\xed\x10\xe3\xcd\xe4\xb1\xc1\x8c\x37\x93\xe6\x09\x6a\xbc\x61\xe3\x8d\xc6\x9b\x6e\xbc\xc7\x8b\x2a\x6e\x3e\x0c\xfa\x55\xfd\x77\xe0\x17\x11\xce\xe8\xfe\x3c\x23\x72\xbc\x26\xdf\x88\xf5\xb1\x2d\xce\x8d\x0f\x0d\x1a\xaf\xbb\xeb\xb3\xa3\x93\x93\xc0\x0c\x56\x5e\xa7\x61\x8a\x26\xb7\xa7\x3b\x93\xf4\x15\x63\x2f\xf7\xe3\x56\x51\xf6\x14\xcc\xe1\xb3\x29\xa0\x5c\x93\xdf\x69\x01\xd1\xe1\xab\xd7\x5f\xcf\xff\xfa\xa3\x1b\xd8\xbc\xec\x98\xc4\x67\x9f\x02\x42\xb3\x67\x5c\x66\x16\x32\xe4\xb3\x88\x09\x95\x4e\x37\x7b\x83\xa4\x8a\x21\xab\x0c\x09\x75\x7f\x31\xff\x58\x78\x1a\x7c\x9c\x9c\xa3\x6c\x89\x54\x0d\x4e\xbb\xe2\xda\xee\xff\xf5\xc3\x18\x02\xf2\x42\xbb\xba\xdc\x80\xba\x34\x2b\x98\xcb\x3c\x47\xd9\x1d\x57\x7d\x6f\xc6\x60\x49\x14\x17\x21\x78\x8d\x0a\xf6\x39\xe9\x37\xb5\xcd\xc6\xd9\x2e\x60\xf3\x65\x54\x37\xb8\xdf\xb6\x54\xb1\xb5\xd3\xbb\xd6\xda\xcd\xdc\x23\x77\x4f\x54\x8d\x3c\x57\x76\x6b\x41\xdc\xd2\x3f\x4b\x65\xc6\xa6\x9a\x2e\xfc\x7f\x9a\xac\x04\xf7\xa7\xbf\x27\x08\x13\x44\xef\x5a\x66\x90\xca\xcb\xaa\xb3\xe8\x60\x36\x8a\x81\x12\xb0\x84\x59\x0a\x42\x58\xda\x87\xd9\x5d\x46\xe1\x52\xe0\x3a\xad\xe2\xe8\x72\x81\xd7\x17\xf9\x55\x4e\x39\xdc\x15\xc5\xc9\xd4\x55\x4f\x92\xcb\x4a\x86\xe2\x81\x2d\x74\x28\xa7\xdf\x84\x93\xb8\x41\xd0\xc9\xaf\xa3\x78\xdb\x37\x59\xc6\x01\x66\xdb\xc4\x4b\xc7\x9d\x5b\xf3\x71\x64\xfd\x8e\xaf\xe1\x20\xeb\xf2\x21\xc3\x84\xe6\x72\x5c\x7e\x3c\x87\x59\x08\x93\x48\x78\xb9\xe6\x98\xe2\xa2\x0e\xc8\x20\x41\x38\x17\xa9\x63\x68\xdf\x2a\x43\x15\xdf\x57\x46\xec\xfe\x36\x04\x86\xb5\x76\x6a\x9d\xa8\x75\xff\x27\x72\x79\x94\xf6\x73\x2a\x17\x93\x45\x5f\x61\x14\x84\x0b\x14\x47\x3b\x3e\xa3\xbf\xff\xf2\x39\xd9\xfb\x3e\xa3\x4f\x67\xf4\xf6\x67\xb4\xfc\xb2\xe5\xac\x56\xce\x24\x82\x96\x4b\x18\x15\xdd\xef\x9f\x8e\xf1\xdf\xcc\x31\xde\x7a\x9a\x1a\x8a\xa6\xcc\xb3\x02\x04\x26\xf4\xb9\x51\x49\x88\x51\x72\x13\x50\x5c\xb2\xe1\xaf\x2b\xc8\x7b\x77\x10\xbc\xa2\x8c\x11\xa5\x59\x3d\x30\x75\x4f\xff\x8c\xa7\x17\xa5\x22\xa1\x6b\x18\x29\x7f\xa8\xf9\xac\xbe\x96\x56\x7a\x36\xe4\xd7\x1a\x6e\x6b\x6e\x5c\xaa\x7a\x0c\x2c\x4f\xac\xf7\x38\xd8\x28\x87\xfa\x49\x91\x7a\x52\xa4\x9e\x14\xa9\x4e\xd4\xda\x4d\x78\xfb\x3d\xb8\x8b\x31\x30\xb8\xab\x3b\x1f\x43\xe6\xe8\xb6\x21\x3c\x2a\x9e\xf8\xe6\xf2\xc7\x8b\xae\x90\xb3\x9f\x33\x9c\x04\xb7\x08\xae\xa1\xa2\xa3\xb0\x2f\x95\xa8\x8f\x3e\xba\x9b\x34\x6b\x97\x25\x29\x81\x66\xef\x63\x8c\x82\x35\x4a\x22\xbc\x66\xaf\x0f\x63\x90\xd1\xb2\xd1\xd6\xd1\xc0\x0f\x79\x42\x99\x29\xa9\x3f\x27\xbb\x2a\x35\xe4\x0a\x6c\x17\xfa\x7c\x10\xbd\xdc\xa0\x4c\xdf\x83\x96\xbe\x63\xfd\xfc\xe0\xa7\x8f\x04\xbc\x7c\x37\x79\xd2\xcf\x6b\x22\xcb\x2f\xdb\xac\x3f\x9c\xf7\xac\x25\xb0\x6e\x45\x04\xa0\x60\xce\x76\xe7\x02\xc7\x71\x19\x83\x14\xfa\x9d\xc2\x6b\x1d\x53\xfe\xbe\x75\x85\x5f\x06\x0d\x5b\xf4\x9c\x1c\xc1\xfb\x1b\x50\xfb\x9f\x94\xce\xc7\xac\x74\x36\x8d\xc8\x8f\x0f\x02\x93\xae\xea\x60\xb8\x22\xcc\x72\x79\x2f\x84\x1f\x53\xe5\xde\xd4\xa7\xb2\x91\x5a\xa8\x8e\xac\xe9\x8a\x6f\x76\xeb\x0e\xd3\x4e\xc7\xde\x0e\xdc\xe2\xa8\xda\xe9\x69\x4b\xf6\xbe\x7b\x76\xb1\xff\xd3\xd2\x5c\x1b\xfa\x3f\xe4\x80\xf5\x4a\xd0\xd1\x81\xb0\x89\xd9\x2b\x3d\xcb\x56\xd3\x04\xdc\xfa\x22\x18\x59\xca\x05\xb6\xf5\xa4\xf6\x6c\x12\xb1\x0d\x1d\xe0\x46\xfb\x83\x91\x36\x54\x65\xa3\x15\x6b\xcb\x86\xdd\x72\x69\xe5\x3a\xf4\xb9\xae\xe5\xd6\xda\xad\x26\x75\x3e\x02\xe3\x37\xf1\x9f\xcd\x6b\xcb\xa1\x0c\xb7\x6d\xdf\x67\x4c\x73\x7b\x83\xa7\xde\x5b\xb0\x4a\xc2\x05\xcc\x0c\xeb\xd7\x31\xdb\x55\x98\x39\x86\x7c\x00\x4c\x28\x8c\xce\x0a\x52\x97\x79\x81\xa2\x1b\xa8\x5a\x59\xd3\x8e\xec\x61\x18\xb1\x29\x6b\x94\xa7\xc4\xa5\x60\x8e\x12\x99\xe3\x51\xcb\x8b\xcb\x44\x09\x4b\x2a\x74\x3a\xdb\x13\xf2\x6c\x47\x30\x87\xbc\xe6\xc5\x22\x0b\xcd\x09\x72\x8d\x79\x79\xad\x62\xbc\xcc\xdb\x13\xf9\x3a\x6c\xb4\xee\x92\xdb\x5f\x23\xba\x08\x66\x18\xd3\x7b\xcb\xe2\x1b\x3f\xd2\x2c\x3e\xc3\x86\x57\x32\x8b\x0e\x9e\x9f\x8d\x46\xdd\x12\x8b\xfc\xbe\xd2\xaf\xc6\x72\xa9\x82\x69\x3d\x03\x4b\x7e\xdf\x2f\xdd\xe4\xa0\x3d\x91\xee\xb0\x9a\x93\xf5\xe9\x93\x9f\x12\xcc\x7d\x4f\x85\x0a\x66\xa0\x64\x1e\x56\x70\x87\xfc\x78\xa2\x37\xa3\xf7\x51\x13\xbd\x33\x99\x1f\x69\xa4\xf8\x65\xf1\xe3\x13\xcd\xbb\xd1\xfc\xb8\x89\xe6\x79\xcc\xc7\x40\xf1\x1c\x87\xeb\x89\xde\xdd\xe8\x7d\xd2\x44\x6f\xd5\xd4\x35\xd0\xfc\xbd\xf2\x73\x17\xba\x1b\xf3\x71\x73\x58\xd2\xe6\x46\x7d\xd6\x94\xee\x89\xa2\x6c\x5d\x4a\x9b\xf0\x61\x73\x7b\xc7\x8f\x34\xb7\xb7\x71\xfd\xc7\x93\xea\x71\xac\xb4\x94\xe3\x41\x43\x4b\x37\xb9\x26\x48\x25\x2d\xe1\x57\x18\xcf\x38\x39\xe3\xb9\x9a\x65\x49\x4f\x99\xe9\xdb\x9c\xbe\x59\xda\xb9\x83\xea\x9d\x56\x97\x60\x87\xd2\xa0\x2a\x9c\x92\x83\x0b\x4c\x74\xdc\x10\xaa\x5d\x43\x14\x97\x5b\x7e\x86\xdb\x15\xed\xb8\xb9\x9e\xd2\xf6\xfc\x72\x80\x20\x29\x8b\xc0\xed\x8d\x2b\x4b\x4c\xd1\x8c\x32\x36\x38\xa5\x15\xd7\xd5\x7f\xfd\xe7\xff\xd5\xaf\x83\x49\x54\xbf\xca\xc3\x33\xcd\x0b\xd4\x60\x67\x98\xb0\x1c\x4d\x9e\x9e\xde\x85\xf1\x88\x0b\x2d\x78\x5b\xd9\x83\xe9\x90\x7d\xd9\xe7\x1e\x14\x23\xf6\xb3\x07\x27\xb5\x5c\xfb\x4f\x9f\x4a\x33\x44\x5d\x6e\xf6\x4c\x84\xad\x5a\x87\xf7\x3f\x1b\xb0\xfe\xee\x99\xea\x49\x8e\x6c\xa3\x52\x9d\x7d\xd9\x2f\xd5\xd9\x88\x3d\x51\x7d\xe2\x4a\xf5\xfc\xd5\x4c\x14\xff\xdf\x9d\x29\x7e\x34\xf0\x57\x71\xdb\xbe\x16\x36\xa7\xad\x3c\xc9\xe6\xed\x76\x85\x81\x73\x0c\x38\xb6\x88\x21\xb8\x4c\xe9\x5d\xb0\x2c\xc2\x33\xb6\x20\x80\xa5\x7e\x5e\xbb\x9d\xbb\x4b\xf2\xa6\xe6\x45\x35\x90\xe6\x30\x69\x70\xf1\xa7\x0e\x0f\xa8\x44\x2a\x2e\xb0\x47\xe0\x12\x20\x5e\x62\x1f\xa3\x5b\xf6\xcf\x67\x3c\xf5\x62\xf9\x34\x43\x4d\x7d\xbb\x3a\xd1\xe0\x8f\xeb\xc3\xd7\x5a\x61\xe3\xbe\x9c\x72\x32\x88\xb7\x53\x8f\x1c\x5a\x1f\xde\xc4\xcf\xc2\xd0\x39\xb6\xa9\x78\xa7\x2a\x31\xc5\x87\x83\x42\xdb\x00\x91\xc2\xe9\xce\x46\xad\xc2\x19\x8d\x22\x3f\xa6\x2b\x41\x59\x11\x14\x6d\x04\x26\xad\xed\xaa\x86\xe1\x22\x28\x70\x67\x2a\x51\xb9\x76\xc4\x85\xfb\x40\xa2\xf0\x3b\x54\x12\x95\x6b\xdb\x09\x2f\xa9\x88\x68\xbb\x63\x50\xb4\x49\x92\xdd\xe5\x4c\xe4\x9b\xbf\x4f\x69\xc2\x7f\xa7\x5a\x93\xe1\xdd\x4a\x96\xf9\xed\xe4\x5d\xf8\xe5\x17\xb3\xaf\xdf\xdc\x7b\x5b\x11\x2e\xc2\x7a\x11\x2f\x75\xae\xb5\x43\xee\x28\x66\xba\x02\x57\x58\x1e\x6c\xa8\xf2\x93\x88\x2a\xf7\x81\x57\xb1\x59\xbd\x3c\xd1\xd2\x1a\x2a\xfb\x73\xb4\xe9\x9b\x9e\x86\xbc\x92\x72\xe0\xbf\xe5\x57\x16\x08\xf9\xaa\x85\x52\xde\x6e\x48\xaa\x6d\x04\x4a\x9f\x82\x68\xce\xe5\xe7\x7a\x81\x28\xdc\x6a\x3d\xb2\xd5\x94\x8b\x58\x39\x3f\xdf\x9b\xae\x96\x4c\x69\x8e\xe1\x4c\x30\x8e\x26\x4f\xad\xe3\x66\x0b\x4c\xe8\xeb\xc8\x16\x55\xaf\xc6\x68\xac\xe3\x6c\xdc\x5c\xbd\x3d\x93\xa5\xc4\x9d\x93\x88\x88\x01\x45\x4b\xe8\x51\x8c\x63\x8a\xd2\x5c\xb6\x02\x82\x80\x6c\x32\xa0\x00\x69\xcb\x7e\xed\x34\xdb\xf2\x0d\xcc\xe0\xf8\x35\x7e\x5b\x62\x91\x43\x4a\xf0\x32\x48\xf0\x7a\xdb\x87\x3a\x5a\xb8\x1b\x24\x2b\xf7\xbd\xdf\x5a\x39\x5f\xa6\x23\xe1\x15\x65\xfa\x77\xe4\xf9\xad\x8c\xc9\x7d\xdb\x67\xc2\x52\xb2\x93\xbf\x9e\x30\x62\x1d\xcb\xee\x32\x68\xca\xa9\x69\x1c\x98\xc0\x5f\x57\x88\xc0\xec\x3d\xc1\x4b\xac\xe1\xb0\x39\xb1\xbc\x7b\x5d\xb6\x84\x45\x61\x7f\x66\x4b\x10\xc7\x0a\x18\xa3\x09\x8e\x88\x4f\x07\x76\x29\xd6\xae\xd6\x5d\x9b\x87\x70\xc3\xbc\x93\xb7\xba\xd6\x42\x0b\xe2\x41\xef\x0c\x24\x9d\xdc\xa9\xce\xd5\xf6\x9d\x59\x9d\x87\xbc\x95\xc8\xaa\x21\x6e\xcd\xf1\xaa\x0a\x56\x08\x22\x48\x01\x8a\x95\x34\x68\x45\x33\xb9\x6e\x3f\xe5\x1b\x1d\x9f\xba\xd3\x6c\x09\x29\x41\xa1\x81\x99\xeb\x6c\x8b\xb2\xcb\x05\x5e\xa3\x64\x5e\x3e\xec\x5c\xce\xb3\x1b\x9a\x92\x78\x32\x55\xbb\x7a\x35\x8a\xa6\xf2\x1e\x35\x45\xbc\x5b\xfe\x50\x0b\xc6\xc2\x96\x2b\x6c\x73\xab\xca\x41\x80\x5f\x4c\x75\x34\x36\x9d\x44\xec\xba\x89\x1d\x97\x53\x80\xcc\xf9\xcd\x6b\x50\x07\x9a\xeb\xa0\xce\x34\xae\xed\xc0\x7f\x85\x38\xa6\x27\xbb\xc6\xa8\xc2\x94\xec\xc9\x31\xa9\x3c\x51\x9a\xe0\x81\x24\x52\xd1\x8e\xbe\x0d\xe3\xa2\x66\x0b\xf4\x69\x68\x98\x0a\x43\x76\x6b\x69\x5c\xdc\x7d\x7f\x3a\x9e\x1e\x58\xba\x09\x28\x85\x22\x0e\x16\xc7\x02\x64\xef\x2b\x5d\x07\x36\x69\xd9\xd7\x04\xe8\xb5\xa1\x77\xc3\xcd\x60\x28\x26\xef\xe5\xb3\xef\xef\x00\x30\x8a\x7d\x0d\xae\x4e\x56\x08\xba\x36\x3b\xac\x6d\xe7\x06\x84\x3a\xaa\x17\xfc\x70\x61\xea\x96\x82\xd9\x2e\x2a\x77\xb8\x55\xeb\xbb\xa9\xcf\xbd\x6a\x2a\x4b\xda\xe9\x5e\xfd\x48\xe9\xdf\x2f\x0e\x3e\xbf\x6c\xee\xfc\xb1\x71\xf6\x9f\x29\x75\x73\xcb\x2d\xf5\x81\x93\xd0\x3b\xad\x9c\x01\x26\x16\xea\x25\x8b\x50\x6c\x21\x6d\xc5\xb6\x4f\x24\x6c\x1c\xb4\x25\xa9\xb0\x87\x7c\xbe\x32\x6a\x79\xaa\x6b\x3f\x8f\x2e\xb5\xef\xb1\x02\xf4\x35\xee\x69\x25\xab\x64\xbc\x59\x92\xdf\x96\xa0\x7d\xd6\xdc\x12\x3b\x64\x9f\xf5\x96\x76\xc0\x3e\xeb\xad\x2d\x70\x7d\xd6\xfb\xda\xc0\xfa\xac\x37\x36\x43\xf5\x59\x6f\x6b\x01\xea\xb3\xbf\x5f\x8c\xa4\xf5\xd4\xed\x36\x3b\x4c\x9f\x9d\x24\x4f\x20\x7d\x9d\x37\xdf\x78\x7f\xb3\xcd\xb7\x09\x70\x5f\x2d\xb1\xa7\x0e\xe1\x67\xaf\xaa\x9b\x63\x8a\x4f\x95\x51\xab\xf7\x77\x48\xef\x69\xc7\x00\xec\x52\x67\xbb\x6d\xe0\xbb\x8f\xd0\xb7\x76\x42\x39\x45\xe9\xba\xc4\xbe\x55\xc0\x59\x0e\x29\x3f\x85\x30\xf1\xb8\x12\x68\xee\x69\xe3\x14\xfc\x36\xf6\xa3\xeb\x43\x07\xd8\x00\xb2\xb8\xcd\x91\x60\xa6\x9b\xee\x47\x38\xb6\x80\x6b\xd4\x40\x35\x0a\x14\x8c\xa1\xae\xe2\xb6\x16\xd7\x2a\xeb\xf9\x13\x82\x6b\xb6\x2e\x06\xc7\xa9\x4d\x0b\x33\x35\x3c\xe6\xd6\xcb\x8a\x80\x98\x97\x59\xe8\xdb\xd6\x79\x01\x6c\xdd\x78\xed\x82\x77\x53\x4c\xcd\x7b\xce\x97\x30\xcb\xc9\xbe\xcc\x9a\xa2\xf6\x70\xa7\xb6\xcc\xed\xcf\x97\xeb\xe9\xf2\x67\x64\xb6\x65\x00\x93\xd6\x0b\x40\x38\x26\x3f\xa0\xab\x25\x53\xa6\x92\x08\x7e\x31\xfa\x21\xb8\xa6\x0d\xc2\x10\x93\xc8\x5c\xbd\x73\x03\xef\x84\xdb\x9e\xd0\x17\x5f\x52\x90\x44\xa2\xab\x4e\x72\x25\xfc\x6a\x39\xc0\x0c\x20\x04\xdc\xf9\x95\x2a\xcc\x3c\x20\x86\x0a\x5f\x36\xca\x8a\x41\x5a\xf3\x40\x53\xa6\xad\x64\x2a\x90\xe7\xc3\xea\xde\xa0\x77\xdd\x1b\x6c\xac\x7b\x4b\xc6\x53\xce\xfc\xe7\x67\x07\x95\x54\x36\xe1\xcd\x7f\x9b\x37\xf7\xd6\x3b\x57\x8f\x38\xf1\x7f\x4c\x45\xad\x95\x1f\xe2\x38\x06\x69\xc6\x16\x18\xf2\x05\x71\xae\x72\xbf\xaf\x1c\x18\x25\xd7\xc3\x4b\xf0\x9a\x80\xd4\xe8\xf5\xd1\x5f\x48\x94\x4e\x2f\x40\xd6\x5e\xaa\xa6\x69\x3f\xf9\xe5\x9e\x50\xa4\x4d\xaa\xa9\x4b\xf4\x58\x37\xa2\x6b\x44\xce\x83\xcb\xc2\x9a\xc9\x91\x6c\x5d\x63\x98\xda\x2b\x16\x82\xc7\xa7\x98\x82\x58\xad\x9b\xdb\x22\x30\xd9\x48\xa3\x52\x1f\xf9\x56\xa9\x54\x76\xfd\xd8\x9c\x46\xf6\xe0\x96\xa9\xe4\x3f\xef\x0d\x55\x79\xc9\xae\x45\xfc\x5b\x75\x2f\xb2\xdd\x8c\x12\xa6\x73\x06\xfc\x68\xd0\x33\x14\xfa\xdc\x66\x1a\x39\xe6\xb4\x3e\x4a\x8d\x7f\xf7\x3a\x01\x8e\x57\x6c\x97\x3c\x3d\x32\x10\x71\xe5\x60\x0a\x48\xb5\x10\x01\x65\x17\x85\x1f\x41\x9b\xcb\xf5\x75\xde\x30\x6d\x4b\x8c\x9e\xca\x02\xb0\xd7\x34\x3b\x34\x66\x20\xd2\xda\xdb\x5d\x60\xaf\xa4\x44\x2b\x27\x6e\x32\x29\xb3\x99\x67\x22\x56\xf9\xf3\x19\x4e\x28\x40\x09\x24\xbd\x11\x4f\xdd\x44\xf5\x8d\xd4\x41\x60\x35\x79\xd3\x77\xe5\x25\x00\xbd\x7b\x09\xc0\xc6\x5e\x82\x9a\x9a\x30\x39\xa8\xe8\x09\xb6\x4d\x5b\x23\x4f\xbb\x04\xb0\xec\x3e\x0b\xa3\xa9\x9a\x8a\x99\xd7\xc4\x76\xad\x55\x63\x57\x64\xbb\xac\x0a\x32\xff\xe2\x67\x69\x8c\x28\x87\xe8\x6a\x28\x61\x92\xfb\x14\x9b\x93\xf2\x63\x38\x87\x49\xd4\x1c\x72\x12\x6e\x8b\x08\x50\xd0\xa5\xd7\x67\x8c\xac\x47\x65\x5e\xe8\xc4\xbf\x2b\xaa\x77\x2b\x47\x67\xd9\xd7\x4f\x5c\x2c\x52\xac\x94\x56\xf4\x80\x67\xcc\x9d\x4b\xa5\x3f\xff\xb9\x54\xc3\xb3\x40\x5c\xa1\xa4\xaa\x35\x3f\x41\xf4\xd4\x54\x84\x34\x1f\x84\xfb\x1a\x5a\xcf\x68\x27\x0d\x21\xc4\x31\x26\x41\xb6\x06\x34\x5c\xd4\x14\x85\x1a\x41\x2c\x5f\x1e\x73\xf7\x54\x08\x78\xe6\xa9\x18\x2b\x10\xce\xa5\x7d\xad\x77\x9c\x3e\xdf\x06\xb7\xa4\x35\xff\x4d\xd2\xa3\x4c\xe8\xab\x90\xc9\x9e\x62\xdd\x3e\x76\x9c\x2b\xee\x6d\x0a\x8f\xb6\xf4\xdd\x0a\xaf\xda\x24\xe6\x64\xb0\xdf\x59\xca\x5a\x3d\x71\x6e\x19\x24\xf7\xe5\x08\x50\x44\x61\x5f\xd6\xbf\x86\x1c\xb9\x53\x0f\x00\xfc\xf8\xfe\xdd\xcf\xd9\x47\xf0\xed\x44\x33\xcb\xe8\x8a\x7b\x18\x73\xe3\x9e\xc1\xbe\x43\xb7\xae\xe6\x28\x62\x25\x7a\x78\xa5\xe5\x5b\x75\x0a\x1e\xfe\x8e\x03\x86\xca\x7e\x51\x3b\x7c\x3d\x3f\x3b\xe9\x12\xab\xf0\xfb\xd4\xdf\xbe\x95\xba\x7d\x33\xe9\x46\x86\xd2\xed\xfe\xe1\x40\x9e\x08\x6e\x8f\x6a\xab\x04\x0f\xf1\x2a\xb1\x95\x89\x9e\xe5\xbf\x3d\x91\xbc\x23\xc9\x4d\xf0\x04\x9c\xe4\x8a\x69\xe0\xff\xba\x82\x2b\x18\xfd\x48\x2e\x29\x20\x14\x25\x73\xe9\xe9\xc9\x71\x21\x8c\x4b\x52\xf3\x67\x3d\x2d\xcf\x06\xcb\x53\x0b\x35\xab\x3b\x82\xc0\x0c\x92\x5b\x18\xf1\xc0\xbf\x71\x11\x3e\xc8\x2b\x3c\x79\xc9\x13\xfd\x3b\xd2\xbf\x06\xa6\x65\xa2\x7f\x9e\x44\xd1\xbc\x04\xe5\x55\x4f\xab\xd0\x71\x15\x0e\x5d\x56\xe1\x45\xba\x80\x4b\x48\x40\x7c\x8e\xb2\x9b\xb6\xc5\xc8\xaf\x69\xeb\xf3\xff\x94\x09\x63\x5e\x91\xe3\x0d\xb4\x4a\xe9\x18\x2d\x07\xd4\xf3\x5f\xca\xc4\xdf\xe6\xa4\x97\x76\x34\x1b\x15\xe1\xff\x7e\x93\x5e\xac\x29\x19\xf7\x1c\x76\xaf\x2c\x4a\x6f\x16\xb7\x00\xf4\xde\xa9\xad\xbd\x1c\x4d\xc6\xe1\xc9\x0f\x27\x5d\x71\x61\x8f\x06\xfe\x62\x64\x2f\xdd\x37\xd9\xd8\x92\x21\x39\x38\x83\xe0\x9e\xa2\x78\xbf\x8a\xc3\xdc\x90\xb9\xe1\x16\x9a\x2b\x03\x40\x1e\x05\xf3\x4a\x11\xa0\xa5\xe2\x6f\x64\xb8\xc8\xe6\xf6\xf2\x4d\xe0\xb5\xc6\x60\x59\xe9\x74\x34\x8d\xed\x47\xc2\x9f\xa0\xf9\xf0\x5a\x93\x86\xf2\xad\xbd\xc6\x41\x46\x61\x1a\xe4\xe5\x7d\xf9\xde\x46\x51\x0c\xaf\x44\x3e\x5b\xc8\xfb\x7f\xe6\x1f\x70\x32\x43\x64\xa9\x7f\xe2\x4a\x63\x89\x80\x00\xd6\x00\x31\xa5\xf3\x4c\xf9\x55\x88\x08\xf1\x05\x3f\x04\x2e\x29\x57\x59\x65\x73\xd1\x81\xff\x0b\xcc\x06\x9e\xfc\xf2\x94\x40\x2e\x14\xb3\x95\xfc\x63\x0d\x98\x44\xc4\xbc\x93\x79\xd1\xf2\xfc\x2f\x45\xdf\x55\x8a\xd3\x37\x32\x94\xa5\x94\x10\x9a\x5b\xb9\xca\x6b\x3b\x89\x95\x66\x40\x98\x47\x40\x4a\x91\xcc\x52\xa5\xa5\xf8\xb6\x81\x98\x80\x50\x13\x35\x01\xa1\xee\xe4\x94\x17\x77\xa4\xe7\x03\x08\x5c\x26\x18\x7a\x12\xb5\x90\x20\x1c\xa1\xf0\x51\xf4\xa4\xfb\xe9\xc3\xfb\xf0\xf3\x5e\x68\x46\x6a\xfe\x7d\xf7\xbc\x68\x9a\xe3\x53\x4f\xba\xa7\x9e\x74\x4f\x3d\xe9\x9e\x7a\xd2\x3d\xb5\x07\x79\xea\x49\xf7\xed\xf7\xa4\x7b\xa8\x42\x58\x4d\xf1\xe9\x57\x99\xda\xb1\x1a\x95\x5e\xec\xbd\x5e\xbf\xff\x3e\x7b\x52\xa3\xb6\x69\x1d\xf6\xa0\x0a\x54\xdf\xdd\xc5\x0a\x4e\xb4\xd5\xdf\x3b\xa1\xe6\xd5\xd0\x6e\x38\xfe\x58\x5e\xbd\xe4\x84\xa4\xe7\xcf\x30\x09\xa1\x40\xf5\xf4\x6b\x20\x7a\x2f\xd9\x8f\x5e\xf1\xeb\x53\x0f\xb4\xa7\x1e\x68\xbf\x0b\x25\x67\xab\xd9\x9e\x11\x03\xd7\xd8\xda\x7d\x2a\x8b\x28\x45\x42\x01\x7b\xe3\x5f\xa6\x30\xac\xbe\x42\x17\x74\x99\xa7\x5e\x6d\x8f\xb7\x57\x9b\x5c\xec\x7e\xf4\x9a\x0c\x92\x5b\x14\xee\xda\x17\xff\xf1\xa7\xfd\xef\x7f\xdc\x3b\xc4\x4f\x6a\xcd\xf6\xde\xa1\xfe\xfa\xa2\x3e\xb9\x7e\x9e\xce\xe4\xdf\xc4\x99\xfc\xfb\x73\x3c\x18\xc0\x9b\x1f\x5c\x4a\x3c\xb9\x44\x1e\x8f\x4b\x44\x1e\xf3\x3d\xe9\x0c\x52\x86\xec\x54\x65\xf8\x31\xc3\x37\x3f\xfc\xf0\xd7\xd5\x93\xca\xf0\xa4\x32\x3c\xa9\x0c\x4f\x2a\xc3\x93\xca\xf0\x14\xab\xf8\x16\x0f\x66\xbe\xb9\xb6\x3e\x97\x79\x82\xe3\x4e\xcf\xe3\xe4\xfd\xcb\xe8\xc3\x5f\xbf\x3b\x72\x3b\x8f\x8f\x06\x3e\x8d\xb4\x4d\x6e\x8a\x33\xe7\x92\xbd\x0e\xd3\x84\xb2\x20\x25\x48\x82\x42\x58\xa2\xc4\x31\x40\x09\x6f\xbb\x60\x38\xc9\xeb\x52\xa3\x94\x14\x6e\x18\x47\x03\xc3\x3b\x74\xca\xd4\xbb\x87\xec\xbc\xba\xb4\xaf\xcf\x51\x1f\x2d\x42\x59\x1a\x83\xbb\xab\xca\x01\xd6\x6d\x10\xd3\xe1\xe3\x46\x2a\xdf\x02\x2a\x56\xa4\xe8\xe6\xf5\x36\x6e\x99\x81\x0d\x03\x6c\x91\x2c\x17\x04\x6e\xd9\x60\x0e\x1c\xe1\x82\xe1\xe1\x3b\x51\x68\x63\xd0\x0e\x85\x46\x9b\x23\x76\xf8\x5b\x20\x75\x28\x27\x43\x3f\x30\x1d\xfe\xe3\x81\xe7\xf0\x7b\x85\xe5\xd8\x88\x52\xb9\x0a\x53\x97\x05\xf7\x91\xb9\x48\xf0\x7a\xeb\xb3\xab\x68\xd0\xb2\xd3\xf3\xeb\x87\x2f\x3f\xcd\x4e\x66\xaf\xde\x39\x9f\x5f\xee\x55\xd3\x5e\x8e\x7f\xe4\xc9\x7d\xce\xdf\x04\x15\x90\x90\xaa\xa0\x90\xa1\x43\xef\x5f\x54\x99\x56\xb6\xb0\x11\x6d\x62\x4d\x00\x01\x6d\xe1\x64\x35\x31\x3c\x05\x88\x78\x86\x8d\xa1\xdb\x59\xf6\xc8\x34\x24\x6a\xdf\xb6\x4b\x51\x8a\x6d\x0b\x47\xdb\x67\x94\x77\x6a\x92\xb4\xa9\xcc\xa7\x29\xec\xa5\xf4\xf4\x91\x0f\xb7\x87\xba\x4c\x9a\x7c\x63\x2f\xa4\x7e\x89\xc3\x7b\x0e\x19\x41\x84\xdb\x46\x92\x9d\x98\x22\x40\x35\x68\x0a\x63\xcb\x25\xc7\x26\x47\x4d\x18\xf5\xd5\x73\xa6\x1c\x32\x42\xb3\x99\x2b\xa4\x67\x9e\x7c\x60\xea\xed\x51\x66\x1f\x14\x2b\xce\x44\x01\x08\xa9\xe7\xd2\xf6\x43\xb6\xfc\x38\x17\xb3\x29\x09\x32\xe6\xb8\x88\xc9\x1c\xca\xb3\xde\x09\x4d\xf3\x8c\xdf\x91\xeb\x5f\xda\xfd\x0d\x54\xeb\x9a\x63\xef\xd6\x73\xab\x7a\x34\xb1\xb9\x64\x0e\x27\x53\xf3\xfa\x55\x50\xca\xb6\x6f\x35\x51\xc0\x33\x44\x80\xdc\x98\x37\x86\x62\x8b\x71\xa6\x29\x8e\x3b\xf1\x89\xf1\xd4\x14\x67\x4a\x1e\x68\x8d\xc9\xca\x0d\x2e\x2e\xb4\x86\x91\x1f\xb2\xbd\x82\x9c\x65\x5f\x27\x5d\x16\x64\x94\x40\xb0\x6b\x0f\xea\xcd\x87\xaf\x2f\xcf\x57\x5f\xbe\x9a\x0b\xa0\x08\x0c\x31\x31\x77\x55\xd4\x3a\x74\x80\x24\xc1\xec\x82\x48\x9e\x5c\xc2\x23\xa4\xf4\x9e\xcf\x89\x67\xee\x3e\x5f\xc5\xa4\x63\xcb\x23\x5c\x4d\xeb\x73\x40\xdb\xfb\xdb\xf9\x75\x08\x26\xad\x22\x6b\x09\xf9\x89\x9b\x60\x6a\xed\x6c\xac\x0b\x55\x2e\x6e\xcb\xf9\x74\xee\x1e\xe7\xca\x9b\x03\x6d\x03\xb6\xcd\x1f\x73\x86\x68\xdd\x74\xc5\x6c\xf3\x7d\x57\x4e\x5f\xdb\x7a\xfa\xbb\xf5\xb4\xeb\x46\xf7\xb4\xed\xf2\xed\xb2\xdd\xf6\xcb\x70\xc2\xf1\xc3\xe0\xae\x3b\x24\xdf\xfd\xb0\x3a\x58\xfc\xf2\x16\xba\x29\x9a\x79\x5b\xaa\xdb\xbb\x80\x69\x43\x4b\xa4\xc7\x18\x04\x42\xd5\xc0\xc7\x69\xa1\x4d\x4a\xbb\x21\xc3\xc9\x25\x25\x85\x07\x5f\x4f\xca\x5f\x72\xc5\xca\xa7\x0b\xb8\xe4\xff\x82\xe9\x25\x3f\x17\x7d\xc6\x6c\x17\x5c\xc7\xe4\x7e\x17\x08\xa2\x1f\x93\x58\xec\xe3\xcf\xe0\x16\x88\x16\xc1\xc2\xfc\x5c\xa0\x80\xfd\x1e\x60\x76\xc1\x60\xcc\xd9\x37\xb7\x53\x2c\xa6\xca\xf6\x5c\x51\xae\xa2\x99\x1b\xfe\x9b\x1b\x37\x28\xd6\xf6\x6e\x99\xe1\xeb\xd1\xcb\xd7\xe9\xf9\xe2\x6f\xce\x56\x47\x76\x3b\xd7\x24\x05\xc1\x3c\x93\x15\x2d\x39\xb6\x91\xde\xa5\x33\x86\xd1\xf4\x4e\x6d\xd5\x59\xa2\xa9\xf1\x30\x50\x90\xab\x3f\x30\xe6\xcf\x10\xce\xb2\x2a\x84\x5c\x79\x53\x04\xb3\xb0\xe9\x9e\x1a\x64\x5c\xee\x13\x11\x31\x27\xc5\x11\x26\x80\xa3\x37\x98\xd6\x75\x45\xf1\xcb\x4b\x6e\x6d\x0a\xee\x91\xde\xd8\xda\x65\x0e\x1d\xdf\xb2\xae\x78\xe9\x9d\xb4\xdb\x9c\x29\x7e\xf9\x32\xda\x8d\x5b\x39\x45\xfe\x16\x80\x2f\x28\xf3\x38\x73\x66\x1e\x61\x0a\xa5\x37\x23\x78\xa9\x79\xca\xbe\x7c\x10\x2a\xb0\x3f\x43\x24\xa3\x3f\xca\x13\x46\x57\x9f\x29\x36\xdf\x12\x03\xcb\x1d\x83\xe2\x68\x05\x49\xe4\xfd\xe2\x32\x8f\xbb\xee\xf3\xb8\x6b\x9d\xc7\xb0\x93\x7b\x44\x61\x96\x59\x66\x29\xa1\x2a\x4e\xea\x04\x02\xf2\x3d\x01\x11\xef\x9d\xa2\xee\xc5\x2f\x23\x7f\xe0\xef\xf9\xf9\xa7\xb1\xfa\xe9\x4e\xfb\xed\x8e\xfd\x36\xf2\x8d\x80\x91\x63\x09\xf3\x5e\xfa\x81\x6b\xfc\x3a\x66\xb4\x8a\xe3\xdc\xb9\x6d\x8d\x71\xf2\xb2\x64\x93\x65\x49\xa5\x9f\x91\x7d\x89\x67\xb3\x0c\x32\x99\xbe\xf7\xdf\x7d\x0b\x84\x62\xdb\x78\x12\x57\x53\x1b\x6d\xb4\x67\x1b\xcf\x6a\x09\x87\x31\x4a\xdf\x03\xb5\x6f\x50\xed\xb5\x97\x20\xbb\x69\x7b\xed\x14\x58\x5a\x0f\x31\x9a\xe5\x34\xd7\x46\x05\x04\x02\xdf\x86\x20\xd9\x1c\x09\x2c\x9e\x3a\x37\x3e\xf2\x2e\x98\x13\xc4\x9b\x82\x64\x5e\xf1\x57\x3e\x07\x4a\x40\x92\xc9\xba\x64\x11\x12\x60\x5f\xf0\xc3\xc1\x17\x12\xe1\xee\xf4\x0b\xca\x7e\x14\x24\xbd\x1e\xf8\x03\x6f\xef\x4f\xbe\x71\x9a\xf5\x49\xd4\x10\x39\x41\x72\x0b\x32\xcf\x1f\x98\x39\xcc\xc8\xeb\x56\x4a\xaa\x75\x02\x1a\x25\xc5\x0f\x0d\x94\x3c\x62\x5a\x45\x48\x8d\xa3\x8a\x65\x90\xbb\x47\xdb\x2e\xc5\x87\xd1\xc0\x5f\xa3\x88\xcd\xaa\x7c\xa6\x46\xa4\x62\xbb\x2c\x20\x37\xad\x95\xeb\xbe\x18\xaf\xe3\x4c\x21\x69\xb4\x22\xf1\x1f\xff\x45\x52\x28\xdf\x60\x03\xff\x4f\x65\x57\x5e\xc6\xa1\x81\xa0\x4a\xfd\x8e\x9c\x37\x8b\x3b\xba\x53\x60\x81\x6f\x21\x09\x28\x20\x73\x48\x1f\x94\x12\x26\x7e\x6a\x65\x72\xae\x69\x2c\x50\x14\xc1\x84\x17\xc9\x08\x08\x55\xf5\x7d\xbe\x08\xf9\xcf\xfe\xc7\x81\xe9\xf7\x06\x39\x7b\x7e\xd1\xf9\xde\x99\xe9\x9d\x26\x75\xd7\x69\x52\xdd\x76\xa2\x31\x02\xd7\xd8\xc3\x8f\xef\xc4\x40\x76\x5a\xe7\xe5\x38\x09\x48\x53\x53\x23\x3f\x94\xc9\xce\xf9\xec\x58\x03\x79\x13\x7d\x94\xe8\xd8\xbf\xc5\xb2\x67\xf4\x8e\x63\xac\x70\x35\x49\x0c\x7f\xc9\xbf\xb2\x68\x69\x69\xf3\xb9\xd7\x1d\xdf\xd6\x29\x0a\x5a\x03\x0a\xb6\x09\x27\xd3\x99\x24\xf5\x26\x05\x1e\x39\xef\x92\xd1\x66\x97\xbb\xbc\x58\x0d\x14\x58\x7f\xd4\x4f\xf2\x67\x37\xdf\x6a\xdf\xc1\x97\xd2\x82\xd9\xca\x2c\xae\xb6\x89\xd9\xa9\x31\xf4\xea\x74\x96\xd0\x25\x34\xa7\x10\xe4\xa8\xe0\x76\x60\x9e\xaa\x67\x2a\x82\x21\x26\x80\xc2\xe8\x52\x60\xc3\xb6\x7b\x42\x47\xfb\x83\xb1\xb1\x88\x9d\x03\xb2\x0e\x04\x82\xd6\x20\x9f\x49\xee\x60\x2d\x2c\x88\x12\xa4\xab\xd2\x7e\xe7\x59\xf1\x57\x81\xa2\x5b\xf8\x67\x07\x3e\x4e\x8a\x3f\xce\xe2\x8a\x8b\xa6\xec\xa7\x61\x47\xa3\x3a\x1e\x08\xdc\xc4\x22\xa9\xcb\x72\xd1\x72\xd5\xd4\xc4\x42\xee\x00\xe9\x9b\x6a\x84\xbe\x2a\x9b\x04\x55\x30\xdb\xd5\xcf\xc6\x1e\x19\xd7\xed\x0f\xe8\xe9\x6d\xe4\xae\x7c\x98\xd7\xb9\x2e\xe1\xca\x5d\x78\x20\x4f\x4d\xfc\xa4\xb1\x50\xf5\x41\x4e\xb3\x11\x97\x3d\x88\x47\x4e\x7f\x9d\x1e\xa5\x4e\x95\x32\xbb\x15\x42\xe1\x45\xf4\xf9\xcf\xeb\x5f\xce\xbb\xc2\x82\xf5\x1f\x7c\xa9\x33\x8c\xc1\xf7\xab\x22\x71\x3d\x6c\x60\xa4\x71\x11\xef\x87\x3d\x84\x18\xde\x29\x7b\x64\xb3\x63\xf0\xf6\xfd\xcf\x66\x87\x5d\x33\x6a\x5c\xfb\x3a\xb3\xf7\x0b\x38\x06\x63\x52\xf3\xf5\xd7\x56\xdb\xa8\x6a\x56\x6b\xbf\xeb\xf0\x70\x0e\x21\x58\xaf\x9c\x91\x08\xb9\xe6\xca\xe8\x2a\x89\x61\x96\x29\x4c\x2e\x9a\xbe\xe5\x11\x78\x9f\xd7\x90\xdf\xa2\x0c\x89\x7c\x00\x5d\x1f\x6d\xad\x27\xaf\xeb\xbb\xe5\xd9\x27\xe4\xb4\x3c\x1e\xcb\x2f\x2a\x42\x5f\xde\x27\xa4\x65\xad\x22\x5d\xcb\x18\x1d\x0f\x2a\x7d\xd5\xaa\xee\xb6\xfb\x50\xd9\x1a\xd8\x7a\xfb\x0d\x93\x82\x39\x4a\xf2\xfe\x90\xbb\xdc\x22\xdf\xff\x7a\x7a\xf4\x1a\xec\xcd\xb6\x93\xa0\x05\xa0\xbf\x53\x4b\xd1\x7c\x77\x18\xb5\x37\xee\x57\xe4\x79\x8a\xf0\xd6\x1f\xf8\x89\x40\xae\x8b\x81\xf8\x12\xcc\xe1\x5b\x94\xdc\x64\xb5\x62\x62\x9e\x1f\xc7\xfe\x2e\x5c\x66\xd9\x29\x15\xde\x2e\xf1\x47\xcc\xbb\x18\x5a\xd5\xbf\x72\x41\x8a\x05\x82\xa2\xbe\xc2\xa7\xb0\x78\x36\x33\x34\x8a\x1d\x53\xcc\x55\x86\x7d\xcc\x50\x8a\xa9\x2c\x17\x19\x39\x6b\x21\x1b\x4d\x45\x90\x8b\x8f\x18\xc1\xb0\xfa\x74\x4d\xb7\xda\xe9\x3c\xc5\x7a\x0a\xe9\x91\x6c\x33\x4f\xf1\x89\xf1\xc5\x7b\xed\xde\x7b\x9a\xb7\x60\xc0\xda\x43\x7b\x9b\x69\x7e\x83\xe0\x6e\xed\x2b\xe3\x18\x2a\x90\x22\x63\xf0\xe2\x1b\xc9\xf0\xe5\x3d\xb2\x7b\x67\xb3\xf2\xd9\xbb\xae\x51\x12\xb9\x4f\x61\xa9\x2e\xd8\x6e\xe5\xe6\x19\x7e\x9b\xbe\xba\xda\x3b\x6b\x91\x9b\x03\xff\x5f\x73\xc0\xfc\x46\x01\x5a\xb0\x5a\x43\x76\xb0\x35\xe3\x5e\x20\xbc\x95\xa8\xc8\xe6\x30\xb2\x06\x91\x50\xdd\x77\x4d\xf0\x6c\x06\x65\xc6\xb5\xcb\xd0\x3d\xb2\x95\xc2\x0a\xdb\x73\x98\xec\x4f\xb3\x53\x8e\xfa\x0e\xa4\x2f\xdf\xbc\xf9\x7c\xd9\xf5\x24\xb6\x9e\xa4\xba\x1f\xa4\xc0\x7a\xb7\x1e\x81\x9c\x08\xcf\xf8\xff\xe6\x9e\x0f\x45\x1a\x37\x5f\x5f\x5a\xc9\x04\xaf\x95\xcc\x06\x83\x5b\xc7\x2e\x98\xc5\x80\xea\x44\x0b\xa6\x15\xbd\x27\x9a\xfa\x03\x39\x75\x01\x32\x88\xc1\x7e\xf8\x92\x4f\xbd\x27\x3e\x2c\x28\xb0\xe3\x06\xd7\xaf\xde\x7e\x77\x70\xf8\xec\xc3\x06\x9a\xa1\x05\x83\xd2\x8c\x39\xe9\xd8\x03\x4a\x20\xfb\x17\x6b\x2b\xaa\x1b\x8d\x2b\xdc\xac\x74\x3e\xe4\x21\xa8\x2d\x67\x5f\xdc\xa1\x6c\xb8\xdd\x32\xc8\xd1\xbb\x37\x27\xe9\x18\x4e\x2c\x29\x89\x78\xdd\xc9\x01\x2c\xe4\x86\x96\x8d\x28\x7e\xe0\x1f\xda\x96\x75\x5c\x38\xe5\x1e\xda\xc9\x56\x5d\x94\x7e\x97\xf9\x11\x38\x51\xc2\xb3\xe4\xfc\x10\x1f\xff\xb4\x81\x13\x85\x12\x6b\x7d\x55\xa3\x77\xe4\x5e\x16\x67\x6b\xc3\x7d\xb9\x8a\x29\x0a\x32\x18\xc3\x90\x06\x11\xc1\x69\x84\xd7\xbb\x36\xdf\x7f\xfa\xfb\x39\x3a\xf8\xf5\xa3\x19\x8b\xc9\x8f\xa2\x22\xdb\xb0\xbe\x3e\x07\x03\x7f\x0a\x32\x14\xaa\xaf\xc2\x77\xdf\xbf\x2e\x30\x41\x5f\x71\xc2\x0c\x6a\x9c\x21\x09\x07\xff\xaf\x45\xe4\xe3\x5f\x95\xd0\x87\xcf\x9b\x57\xf7\x18\x21\x30\xf8\x63\xbb\x44\x3b\x42\x90\xd2\x15\x31\x18\x59\x2e\xa1\x8c\xc6\x39\xa8\x31\x0a\xb3\x30\x2a\x78\xfb\xb0\xf0\xfd\x5f\x11\x34\x9f\x8b\x12\xa0\x4f\x5a\x75\x45\x4e\xf3\x80\xe6\x57\xf0\x42\x0a\xe1\x0e\xba\x81\x77\x72\x3d\x6c\x70\x0e\x38\x85\xc9\x8f\xc9\x29\x21\x78\x7d\x2e\xaf\xcc\x85\x9f\x62\x54\xb2\xe5\x6c\x98\x6a\xab\x4f\xbb\x3a\xc9\xa0\x31\x7a\x2c\x1d\x75\xb1\xd5\x45\x57\x71\x19\xf1\x7d\x24\x78\xcb\xc9\x6b\xd4\x10\xa7\xae\x03\x71\xc6\x95\x52\x8d\x5a\x5b\xd6\x3c\x39\xcd\x38\x0d\x4b\x43\xd7\x8e\xd9\xe2\x9b\x84\xb1\x6b\x24\x47\x21\x4e\x3c\xc8\x44\x40\x90\xe2\x35\x24\xb9\xfc\x91\x65\x8a\xec\x67\x53\xe2\x96\x3d\x9b\xce\xc0\xa5\x67\xb9\x13\xdb\xca\xa5\x45\xc6\x72\x07\xae\x5a\xc5\xa6\xdc\x57\x26\x96\xa7\xf8\x8b\xdf\xd8\xd9\x99\xfb\x8b\x8b\x47\x6a\x05\x0a\x42\x1b\xe8\xd8\xe7\xd9\x44\xe0\x42\x2c\xf2\x9f\x29\x98\xa2\x24\x82\x5f\xd4\x4c\x3f\x9c\xb4\x6f\x44\x4a\xc0\x2d\x24\x19\x7c\x8b\x84\x7b\x48\xda\xdf\x66\x77\x76\x75\x86\x7c\xa7\xd8\x21\xe0\x95\x4b\x51\x92\xae\xf4\x24\x24\x65\xc2\x41\x99\x9b\xb8\x80\xe1\x0d\x8c\xca\x5c\x60\x0a\x50\x92\x29\xcd\xb2\x25\xf5\xaa\xac\xaf\x4e\x58\x7a\xff\x8b\x8a\x2b\xdb\x8b\x8b\x28\xac\xe9\x95\xf9\xf4\xee\x52\xb6\xda\x7c\x42\xca\x72\x9b\x5a\x32\x97\xfb\x51\xcc\xf1\x9e\xba\x2a\x8f\xb7\xa9\x4b\x2e\xb8\x26\xef\xba\x6d\x5c\xae\x0b\xec\x49\xae\xed\x24\x34\x9a\x70\x4c\x1a\x76\xb1\x51\xb9\xed\x45\x75\x32\x2a\x3a\x5b\xa9\x4e\x29\x98\xc3\x20\x06\x77\x78\xb5\xeb\x1c\xfe\x5f\xf0\xe9\xf4\xdd\x2f\x87\x1f\x37\xb0\x6a\xe7\x31\x9e\x82\x98\xeb\x91\x90\xd4\xbd\x70\x38\x79\x05\x96\xd3\x15\x99\x43\x52\xb4\x29\xe3\xfe\xb5\xe2\x8e\x0e\xca\xc7\xf7\x2b\x4a\x21\xb1\xab\x41\x6d\x78\x57\xe3\x81\x0f\xd2\x34\x98\x12\x08\xa2\x90\xac\x96\xd3\xcc\x2d\x49\x3d\x29\xda\xd8\xcd\xf9\x0c\x82\x25\x4c\x56\xf5\x77\x55\xd2\x61\x6c\x2f\x2d\x0d\x54\xd3\xfb\x6c\x4d\x88\x76\x5d\xec\xc1\xed\x7d\x85\xc3\xb7\xdb\x29\x55\xe0\xa0\x1d\xef\x97\x3f\x23\x74\xbe\x0c\x97\x96\x10\x7a\x09\x6e\xe4\x67\x21\x26\x05\x90\x13\xd3\x29\x97\x30\x91\xd5\x6c\xbf\xae\x30\xaf\x13\x14\xbd\x7a\xf5\xdf\xf2\xef\x72\xce\x2a\x3e\xe3\x24\xa3\x04\x20\xf9\x41\xbf\x08\xdc\x02\x14\x0b\x97\xad\x1f\x01\x0a\x42\x98\x50\xae\x43\x37\xfa\xd8\x0b\xd2\xbe\xcc\x67\xdd\xe4\x6d\x5f\x23\xba\xd8\xe4\x56\xbd\xd4\x71\x31\xb1\x37\x9f\x63\x7a\xea\x41\x93\x36\x6d\x7e\xb2\xad\x1d\x8a\x9b\x7e\xac\xd7\xf1\xfb\x7a\xa9\x7a\x1e\x91\x13\x6a\x61\x88\x41\x0c\xb3\x10\x46\xb5\x97\xd6\xcb\x3d\x56\x09\x9f\xa4\xa5\x68\xde\xa8\xff\x56\x74\xc3\xa2\xd4\x01\x2d\xd3\x18\x06\x79\xa8\xd6\x56\xb7\x53\x86\xd9\xc4\x44\x13\x1c\x41\xbe\x7d\x57\x80\xd7\xee\x77\x05\x47\xd1\xb5\xc5\xb2\xb8\x9b\x8f\xeb\xad\x21\x81\x1e\x8c\xd1\x1c\x4d\x63\xe8\xcd\x30\xf1\xa0\x78\x94\x54\x1f\xdd\x2c\x02\x55\xbd\x3d\x1e\xf8\x01\xfb\x10\xa0\xa4\xfa\x16\xa7\x05\x67\xb7\x41\xb5\x59\xc8\xb1\xcf\x05\xa9\xfb\xfb\xbb\x50\x00\x10\xe8\x15\x5b\xce\x43\x89\x57\xee\x39\x45\x77\x1b\x1d\xf0\x47\x77\x01\x70\xab\x29\x30\xfb\x83\xd1\x41\x17\x9a\x71\xc6\x79\x89\x62\x0a\x09\x8c\x36\x40\xb7\xab\xbf\x34\xcf\x64\x56\xdf\x6a\xa2\xbd\x15\x1b\x62\x26\x9f\xa7\x5e\x35\xae\x5d\xe5\x5b\xb0\x0c\x12\x5e\xcd\x59\xde\xd4\x05\xbf\x60\x34\x1e\x8c\x26\x9d\xe8\x53\x48\xd1\x7e\x89\x54\x0c\x5b\x54\x03\x99\xc0\x3f\x26\x83\xd1\xc8\xc4\x13\x46\x0a\xee\x6d\x42\xc1\xbd\xce\x14\xdc\x1b\x8c\x46\x1a\x05\xb5\x82\x76\x21\x49\xbe\x2c\xc0\x2a\xa3\x0a\xad\x36\x22\xd2\x07\x28\xb2\x62\x32\x0f\xe6\x03\x7a\x38\x51\x5f\xd9\xf4\xc0\xae\x14\xb0\x4f\xba\x2b\x96\xa2\xe3\x6e\x33\x3c\xa8\xc7\xed\x76\x52\xe3\x02\x0b\xf1\x8e\x37\x60\x97\xe3\xae\xdc\x72\x3c\x38\xe9\x42\x9f\x42\xaf\xe9\x97\x46\xe7\xf9\xb0\xca\xeb\x1f\xb9\xd2\xe9\x70\x03\x3a\x1d\x76\xa5\xd3\xe1\xe0\xa8\x0b\x9d\xb8\x3e\xd8\x2f\x8d\xfe\xca\x86\xf4\x62\xb4\x44\xd4\x5b\x20\xaa\x10\x60\xdf\xf9\x54\xda\x1f\x74\x3a\x7b\xb8\xc2\xbb\x09\xa4\x6a\x7d\xf6\x97\x6c\x28\x65\xce\xf5\x33\xe7\x7f\xe9\x4e\x12\xc7\x37\x1a\x0f\x26\x2d\x3e\xc9\xe6\x08\xd9\xfd\x59\x4b\x55\x2b\x67\x3b\x9b\x09\xa7\xbc\x14\x4f\xd8\xaa\x3b\x35\x97\xd6\x7b\x3f\x7d\xb9\x7b\xf9\xf6\x65\x43\x3c\xc6\xee\x63\xe8\x1a\x91\x89\x50\xc6\x34\xb2\xc8\x1e\x9d\x21\x79\x31\xe1\x98\xd9\xec\xe7\xf9\xf5\x7d\x96\x74\xfc\x3e\x02\x36\x15\xd8\x81\x9c\xe3\xa4\x97\xde\x2b\x33\xb5\x25\xd0\x69\x01\x16\x2a\xaf\xc8\x0b\xe4\x0c\x79\xd3\xe5\xaa\x5c\x0f\x7c\x8e\xd8\x54\x2e\x93\x4e\x11\x3e\xa1\x12\x31\x42\x2f\x17\xe4\x83\xef\x26\x84\x64\x8f\xfc\xa8\x87\xcd\x17\x11\xac\xe0\x55\x94\xf0\x96\xe0\x24\xe0\x33\xbc\x2e\xfd\x4a\x12\x2b\x96\xc2\x2f\x02\xd8\xab\x8e\x69\xd3\x47\x50\x23\x5f\xbb\x50\xbd\xc0\xe9\x35\x6d\x69\x06\x1b\x39\x6a\xfb\x8d\x76\xab\x22\x70\x3b\x59\x2a\xf8\x37\x58\x42\x4a\x76\xde\x40\xf1\x97\x31\xfd\xe1\x3c\xfd\x3c\x72\x06\x5c\x59\xec\x3b\xba\x5b\x24\xcb\x8a\xb7\xac\x56\x15\x34\xd7\x04\xab\xa8\x70\x92\x58\x73\x02\xd2\x85\x68\xf2\x67\x2a\x5f\x38\x16\x33\xcd\x02\x8a\x96\x30\xc8\x20\x41\x2a\x1c\x38\x33\xa6\x7d\xbd\x8e\xb6\xc8\x9e\x63\x3f\x95\xa2\x52\xaf\xb4\x6d\xab\x82\x68\x9c\x79\x88\xe3\xd5\x32\xc9\xbc\x0c\x86\x38\x89\x5a\xde\xa1\x75\x1c\x73\xb9\xd3\x46\x10\xba\x9a\xa6\x94\x12\x3c\x27\xbc\x88\xc5\x56\x22\x93\x5f\x61\xaa\x46\x16\xd2\x94\x37\x4c\x2c\x41\x01\x24\x06\x93\x2c\xaf\x2f\x88\xac\x81\x93\xf0\x1e\x6d\x61\xde\xb5\x58\x4e\x7d\x09\x8a\xe0\xa0\xb9\x5b\x73\xee\xb1\x6b\x1e\xcf\xea\xb4\xdb\x08\xc7\xa2\x79\x59\xd8\xeb\x2f\x51\x82\x96\xab\xa5\x75\x85\xac\x8e\xc2\x04\xaf\x09\x48\x7d\x23\x96\xa5\x7c\x1d\x9e\x25\xef\x46\x45\x9e\x5c\x8f\x29\x10\x90\x1e\xd7\x46\xfd\xb5\xad\x12\xbb\xb9\xfe\x4e\x20\xdb\x21\x9c\xb8\x79\x0e\xf7\x05\x7c\x1d\x93\x71\xbc\x67\x47\xba\xf2\x9d\xf4\x78\xdf\xda\xf8\xa0\x69\xfd\x57\x59\xdd\xb8\x7f\xb7\xf8\xaa\xbc\xa1\xf7\x4c\x3d\x4a\x09\xcc\x20\xb9\x85\xd1\xe9\xd2\x80\x92\xf9\x6e\xf1\xd5\xcb\x2f\x70\x05\x1b\x72\x20\xc1\x12\x2e\x31\x4f\xd2\xdc\x9a\x0a\x25\xa3\x4c\xef\x28\xcc\x1a\x79\x44\x52\xc6\x62\x6d\x76\xa1\x0a\xfa\xae\x33\x55\x7a\x5d\xd3\xee\x53\x56\xa6\x6b\x51\x21\x5a\x71\x44\x7b\xd1\x1d\xb4\x23\x7f\x4b\xed\x01\x7f\xb9\x0b\x28\x98\xef\xba\x45\xe1\xc7\x29\xfc\xdb\x07\x92\xba\x23\xb5\x39\xe2\x1e\x17\xca\xb6\x96\xd4\x52\xf9\x56\x55\xd1\xb9\xaf\x74\x15\x7b\x67\x38\x49\x60\x48\x3d\x4e\x21\x8f\x82\xac\x06\xca\xfa\x9e\xfd\x52\x88\xbd\x7e\x16\x56\xae\xc6\x56\x6b\x4a\xe0\x9c\xe3\xa2\xaf\x11\x0d\x17\x3b\xaf\xbb\x39\xfe\x39\xfa\xb8\x3a\xfe\x1e\xd8\x70\x50\xe7\xc6\x5c\xc7\x4a\xea\x59\xbd\x47\xce\x07\x7e\x63\x73\x44\x50\xcd\xbf\x2a\xd5\x37\x0a\xe6\x17\x22\xe4\xa9\x99\x7a\x25\xca\xe3\x40\x26\xda\x70\x3b\x3d\x83\x80\x84\x8b\x17\x49\x6e\xb7\xe3\x44\x62\x1b\x5f\x73\xff\xe1\x6d\x6e\x36\xca\xba\x09\x0d\xf0\x33\xc3\x84\xc2\xa8\x9c\x69\xb5\xe3\x8f\x80\x3b\xf9\x20\x49\x20\x45\x4d\x8b\xf9\x3d\xc7\x14\x17\x77\x6c\xdd\x05\xdb\x90\xa7\x96\x12\x38\x43\x6a\xba\x97\x78\xda\xf3\xe2\xac\x1f\x95\x86\x67\x6b\x82\xc2\x83\xf8\xa6\x2a\xfc\xbe\xe5\xde\xc9\xc2\x05\x64\x4f\x0e\xe0\x2d\x4c\xe8\x63\x68\xfd\x42\xe7\x07\x37\xe7\x93\xb7\xce\xa2\xb1\x3b\x5a\x6f\x3d\xd9\x33\xcf\xe9\xda\x46\xab\x30\x78\x18\x3a\x42\xf7\x5a\x01\xd9\x69\x13\x4e\xb0\x51\x0d\xdd\x0c\x02\xb8\x45\x87\xd5\x00\xbc\x8d\x24\xad\xd4\xf4\xc7\x28\xb9\xb9\xc2\xa7\x45\x77\x0a\x47\x04\xcb\x4e\xfd\x10\xcc\x06\xcf\xd5\x02\x65\x5e\xf9\x60\x8b\x25\xe3\x98\x22\xdb\x11\xd3\xbc\xb5\x2d\x83\xc3\xb8\xd2\xfe\xb5\x5b\x73\x4e\xc6\x95\x88\x81\xc3\xa8\xd1\xd0\x6a\xc8\xcb\x68\xea\x32\x54\xf6\x1c\xb1\x37\x1b\xb2\xa7\x52\xd6\x46\x08\x63\x04\x13\x7a\x59\xeb\x47\xb4\x49\x72\x65\x27\x3a\xb5\x10\xc4\x6d\xe1\x65\x97\x95\xc6\x1c\xd9\xc6\x1e\x11\xf6\xbb\x1d\x52\xca\xf5\x26\x11\xea\x76\x6b\x06\xf5\x77\xdf\x9e\xa6\x9a\xb9\x7a\x1f\x2d\xa5\x3f\xda\x50\x5d\x5c\xc3\x72\x23\x4b\x2b\x2d\x2d\xf3\xa3\x42\x00\x6b\x03\x0f\x9d\x15\x17\x98\x08\x88\xdd\xad\x52\x3d\x9a\xb3\x71\x1f\x66\x66\xa5\x14\x6a\xe6\xf3\x1d\x30\xd9\x19\xdf\xae\xf6\xe9\x98\x07\xac\x9d\x17\x0e\x4c\x25\x04\x43\x36\x14\xff\x1a\x99\x49\x44\x86\xef\x91\xa7\xd4\x07\x6c\xd6\x01\xd2\x75\x09\x4d\xbf\xb8\x8b\xbc\xae\x7e\x3a\xc3\x69\xd8\x83\x7a\x5a\x57\x29\xfb\xd5\x51\x73\x25\x66\xc7\x8a\xea\xc1\xdd\xc7\xd7\xa7\xb7\x20\x33\x5b\x7a\x7c\xaa\xc6\xa2\x43\x6c\xce\x2d\x2c\xde\xaa\x45\x55\xd5\x19\x13\x7e\xa1\x1d\xd4\x2b\x45\xc9\x34\x6b\xfe\xf9\x36\xcc\x9d\x03\xda\xc3\x84\x16\x3a\xf8\xe4\x5f\xc0\x2f\x54\x51\xae\xcc\x7b\xb2\x3a\x33\x87\x8b\xf8\xb6\x47\xb3\xbb\xbc\x2d\x46\x87\x36\x9a\x8d\x54\x5a\x80\xec\x92\xe2\x34\x65\xc6\xa9\x7c\x6b\x59\x8e\xed\xa2\xee\xf7\xd0\x0d\xa4\x0c\x2d\xae\x01\x49\xf2\xb2\x71\x3d\xaa\x28\x7f\xf1\x2c\x01\x46\xef\x82\x6d\x12\x6f\x01\x32\x2f\x13\xef\xe2\x01\xca\x18\x92\xb2\x9b\x28\xf6\xca\x05\xf5\x28\x53\x7e\x4b\x0a\x0c\x3b\x37\x13\xb1\xb6\xf5\xd5\xc8\x3a\xc3\x71\x8c\xd7\x1f\xd3\x17\x65\xba\xe9\xc0\x5f\x03\x44\x3f\x26\x14\xc5\x35\xf0\x19\x57\xe6\x75\xcb\x57\xb9\x8f\xc5\x09\xd9\x3e\x36\x2c\x0d\x4a\x66\xb8\x65\x5d\xd6\x28\x8e\xf3\x05\xd1\x57\xc3\x39\xf3\x59\x75\xd2\x8d\xaa\x71\xf4\xbc\xb3\x40\xdd\x36\xec\xb6\x24\xb6\xe6\x0a\x35\xaa\x2c\xb1\x48\x7f\x21\x78\x19\x24\xdc\x29\xb0\xd9\xe3\x3e\x7d\xf2\x11\x33\x42\x6e\x65\x68\x65\x6f\x6f\xcf\x14\x3a\x77\x39\xbd\xba\xd8\xd0\xcd\xe2\x4d\x7b\x89\x9a\x16\x5c\x4a\xba\xda\x2b\x2b\x5e\xab\x1a\x31\x5a\x64\x97\xa1\x8c\x90\xcf\x93\x97\xe7\x99\xc9\x5b\xbe\xc4\x8b\x5b\xce\xfe\x8e\xb9\x5c\x1b\xd0\xe1\x75\xa4\xbd\xb6\x48\x51\x48\x09\xbc\x45\x78\x95\x9d\xaa\x97\x29\xc8\xa1\xd4\x5d\x4e\x8f\xcc\x7d\x6f\xef\x45\xe1\xc8\x37\xff\x56\x5a\x87\x70\x84\x06\x53\xfc\x65\xc7\x6a\xc6\xbb\xf3\xbf\xbe\xbb\xdc\x7b\x67\x6e\xac\xd5\x05\x19\x32\xc4\x09\x25\xb8\x56\x1e\xdd\x6a\x38\x70\x07\xa9\x56\xc8\x5b\x13\x9c\x82\x58\x7e\x5b\x83\xc0\x7a\xa1\x68\xd5\xc1\xc0\x7f\xce\x63\xe5\xfc\x43\xb5\x71\x05\xcf\xcc\x5b\xe0\x58\x16\xac\x8d\xf5\x6f\x6a\x51\xf4\xf1\xc0\xff\x37\x31\xbb\x2b\x6e\xc0\x14\x05\xa4\x72\x22\xd6\xf4\xa3\x0c\xd2\x4b\xe5\x3e\xad\x78\x34\x13\xed\x8d\x46\xbe\x5e\x4c\x2a\x8e\x07\x2b\xb2\x7c\x15\x4d\x53\x6b\xce\x38\x53\x69\xec\x04\x70\xe9\x87\x31\x04\xc4\xd7\x2b\x79\xeb\x47\x1a\x48\x42\x6e\x48\xd9\x93\x65\xfb\xdf\x91\xe5\xde\xd9\x72\x0b\x92\x5b\x48\x02\x30\x7f\x1c\x8e\xe9\x9f\x6f\x7e\xfa\x7e\xfa\x2a\x34\xa7\x4e\xde\x6f\x4f\x72\x41\x89\x6c\x28\xfe\x2d\xf4\xed\x39\x37\x88\xad\x76\xef\xa8\x72\x5d\x5f\x8d\xc9\xab\xe3\xb6\x35\x11\x37\x8f\xa0\xa7\x19\x16\xef\x92\xbd\x15\xc5\xa8\x6c\x7e\x57\x84\xb7\x23\x7b\xc9\x46\x6d\x61\xe1\xf6\x59\x82\x28\xe2\xa9\x3a\x1b\x34\x26\x2f\x5e\x14\x92\xd9\x7b\x4c\xe8\x36\x63\xa8\xe5\x80\x56\x5f\x42\x0f\x3b\x50\xdf\x3a\xdb\xed\xc3\x7a\x6e\xd8\x4e\x37\xe2\x9b\xb7\xbf\x9c\xa0\xcf\x3f\x98\x01\x7f\xea\xf0\x73\x07\x0a\x94\x5b\xa5\x59\x9b\x0d\x6a\x8d\xad\xdf\x26\x54\xaf\x12\x6a\x4b\xb2\x13\x08\x96\x28\x99\x07\x33\xb4\x73\xf0\xbf\xaf\xeb\xc5\xc9\x1a\xd1\xb1\xb3\xf0\xb3\x3a\xd6\x62\xcc\x13\x98\x07\x3e\x5e\x51\x76\x04\x6b\xbb\xa0\x17\xde\xd7\xe8\xb6\xd5\x12\x50\x90\xdd\x3c\x06\xea\xbf\x20\x20\xbc\xfd\x7e\x9d\x6c\x07\x82\x9c\x60\x99\xe4\xd1\xee\x2a\x6a\x09\x7e\x24\x98\xa2\x19\x12\x26\x01\x33\x8c\x21\xef\x23\x69\x4b\xe1\x6b\xab\x31\xde\x57\xfd\xca\x3c\x4f\xce\x9b\x41\x1a\x2e\x3c\x4e\x79\x5b\x89\x6e\xad\xc3\xcc\xd5\x02\xf2\x3b\x32\x5e\x03\xcb\x7d\x20\x6c\xfd\x78\x75\x28\x4a\x40\x18\xc2\x8c\x63\x98\x0e\xbd\xb3\x05\x0c\x6f\x3c\xba\x80\x5e\x88\x93\x88\xc7\xe8\x3c\x3c\x13\x5f\x70\x2f\x33\xff\xb3\x34\x8e\x3c\x94\x79\x38\x19\xb6\xf9\x52\xed\x27\xea\x56\x01\x4d\xbf\x0a\x14\xe0\xa0\xb3\x9b\xba\x41\x6b\x36\x68\xe9\xde\x51\xdd\x33\x8c\x7c\x57\x77\x29\x7c\x9d\x7d\x4c\x6e\x12\x9e\xfd\xee\x5a\x3d\x24\xa7\x04\x2c\xed\xe2\xf3\xf2\x83\xf5\x02\x51\xa8\x00\xc5\xe7\xea\xee\x82\xc0\x99\xd6\xb4\x0e\xd0\x8f\x24\xf6\xcb\xf4\x56\xd9\xc6\x6a\xe0\xff\xdb\x34\x06\xc9\x4d\x91\xe0\xc4\xdd\x94\x09\xc6\x29\x4c\x20\xf1\x12\x4c\xe0\x0c\x12\x02\x55\x6e\xfc\x09\xc1\xb5\xf7\x01\xac\xbd\x97\x35\x7e\xda\xc8\x09\x86\xb2\xb7\x6c\x32\xa5\x4f\x13\x65\x97\x5c\xe6\x38\xd5\x45\x57\x29\xd6\x60\x16\xb4\x93\xad\xdd\x4a\x98\x63\x8a\x5f\x29\x60\xa9\x25\x59\xe4\xb7\xb6\xfe\x7c\x0f\x30\xaf\x2b\x80\xe2\xfa\xbc\xe4\xb7\x9d\x57\xc9\xba\x12\xbb\x5e\x02\x01\x45\x24\x26\x56\x7f\x5d\xb3\xfb\xad\xb0\xe0\xaa\x8a\x72\x71\x7c\xe6\xaf\x2a\x3c\xd9\x03\x7f\x09\x23\x04\x82\x14\xac\x32\x6e\x48\x88\x4f\x31\x50\x12\x66\x9d\xeb\x58\x36\x74\xbd\x6d\xd3\xb8\xcc\x90\x47\xa1\xf7\x2c\xd3\xd3\x82\x99\xa0\x3a\x2b\xf0\x79\xb9\xbd\xae\x91\x97\x77\x8f\x88\x00\xb9\x61\x0b\x36\x63\xd2\x70\x1a\x43\xa5\x62\xa9\xa9\xeb\x6a\xb7\x27\x39\x7b\xe2\xaa\xea\x5c\x11\x6a\xc9\x17\x54\xb6\x51\xd6\xd6\xb5\xb2\xea\x85\xc4\xe1\xd7\xd6\xe4\x4f\x81\x31\xbb\x49\xbb\x57\x77\x02\xa0\xa5\x80\xe8\xee\xf6\xfe\xfc\xae\xca\xbb\x67\x24\xe4\x41\x26\x6e\x5c\xa1\xaf\x8a\xcf\xb5\x90\xff\x25\x8e\x3c\xbb\xe8\x42\x9a\xb0\xda\x97\xbc\xdb\xf4\xc6\xef\xed\x96\xe7\xc3\x71\xb5\x82\x25\xcc\x32\x20\xd2\x6d\x17\xdc\xf5\xdd\x90\xd9\x63\xd1\x7a\xb4\x81\xf8\x79\x5f\x09\xfa\x7d\x4c\xb2\x55\x9a\xf2\x54\x4a\x7e\x60\x79\xec\x40\x6e\x90\xd3\x96\x26\xaa\xda\x63\xf8\x7e\x92\x1f\x7c\x5d\x63\x12\xe1\x8b\x8f\xaf\xbd\x10\xaf\xe2\xc8\x63\xca\x17\x81\x49\x04\xa5\x06\xc5\xd6\x6b\xe0\x4d\x57\xd4\xbb\xc3\x2b\x2f\x04\x89\x97\x51\x14\xc7\xde\x2d\x3b\x53\xa9\xd4\xb8\xbc\x08\x11\x18\xd2\xf8\xae\xa6\x22\x6d\x30\xcf\xc6\x94\xa7\x36\xf5\xa2\x00\x8d\xd9\xa1\x4e\xe1\x1e\x8a\xdf\x55\x42\x7d\x61\xd6\x6c\x6f\x1c\xcd\x09\x5e\xa5\x8f\xc0\x39\x77\xf7\xeb\xbb\xfd\x57\x3f\xef\x1f\x6f\xea\x9c\x6b\xce\x4a\x31\xba\xe9\xb2\xba\x9f\xee\x33\x9e\x66\xc3\xcf\x78\x3a\x2c\x69\x93\xeb\x05\x84\x80\xbb\x32\x9f\x13\x64\x37\xdf\x8b\x5f\xd9\x3d\xa5\x44\x2b\x7f\x70\xcc\x76\x1e\xd5\x6e\xb4\xc1\x2f\x35\x1d\xe1\xae\x4e\x2c\xf5\x29\x02\xf3\xaa\x83\x27\xcc\x31\xc9\xd4\x54\x7a\x27\x8f\x90\xd2\x22\xcb\xe1\x45\xa7\x80\x98\xa2\x59\x67\x02\x59\x52\xea\x49\x17\x80\xc8\xfc\xbc\xfa\x5b\x64\xab\x25\x5f\xbb\x6b\x59\x13\x6e\x7d\x9f\x4d\x48\x94\xd7\xcf\x9c\xbd\xff\x58\x2b\xae\x7a\xf5\x75\xdb\x51\xdf\xc9\x7a\xa8\x5a\x99\xd1\xb6\x03\xbf\x48\x17\x70\x09\x09\x88\xcf\x51\x76\xe3\x30\x7e\x6f\x22\xa9\x10\x26\xdb\xcb\xa5\x18\xef\xba\xc4\xe7\xec\xcb\xcb\x53\xfc\x72\xb2\x72\x93\x48\xdf\xb8\xa7\x26\xc6\xf3\xac\x9b\xa7\x86\xdd\xb1\x8d\xa3\x26\xc1\x11\x7c\x74\x6e\x1a\x7b\xbe\xa3\xc1\xda\xcc\x77\x95\x86\xe2\xa0\xb4\xd5\x6b\xb2\x7f\x72\xfd\xdf\xcf\x68\x84\x57\x54\x33\x7b\x50\x32\xc3\x9a\xa1\x33\xb1\x46\x38\xdf\x09\x93\x23\x1f\xa4\x9c\x71\x31\xac\x79\x45\xfb\x7e\x05\x48\x48\xc5\x72\x4b\x04\xe6\x78\xb7\x97\xe0\xc3\x68\x2f\x21\x06\x76\xa9\x54\xee\xec\x4b\xdb\xc8\x7f\x70\x7f\x7e\x9b\x7b\x9e\x8a\xab\xab\xe6\x9e\xa7\xe2\xe8\x4a\x79\x3c\x8e\x94\x36\x61\xd4\xa1\x82\xdc\x54\x6a\x62\x71\x72\xd8\x51\x1e\x7a\xf4\x41\x88\xc1\xde\x75\xf4\x44\xdc\x93\xea\x10\xe3\xed\x8a\x48\xf9\x20\xbb\x37\x63\xc8\x5f\xff\xfe\x31\xc2\x5f\xa8\x39\xd0\x93\x40\xba\xc6\xe4\x86\x63\xc4\x10\x4b\x47\x93\xc8\xac\x54\x67\x41\x52\x68\xc1\x0d\x8e\x2f\x35\x18\xc0\x6b\x80\x07\x7e\x44\xd0\x2d\x24\xb2\x30\x67\xe0\x2f\x20\x88\xe9\xe2\xae\x4b\x2a\x9a\x43\xd2\xa3\xc7\xb6\x50\x50\xc0\xe4\xda\x12\x20\x6b\xd3\xca\x31\x89\xbc\x55\xa2\x4e\xac\xa7\x5c\x5c\xa7\x3d\xbd\xa9\x5d\x65\xc7\xb2\xe8\xc7\x16\x35\x17\xe3\x0c\x05\xf9\x2c\x36\xa9\x9e\xf1\xad\x59\xa5\x9b\x18\xa4\x0d\xb6\x68\xd5\x71\x2f\x2f\x47\x99\x54\x7c\x79\xb1\xb9\xa3\x07\x3f\x07\x0b\x2c\x6b\xfb\x75\x5a\x5d\x73\x85\x64\x99\x42\x12\xf0\x6e\x30\x5d\xf2\xca\xfb\xb1\x99\x65\x92\x0c\xec\x6e\x2e\x5b\x29\x05\x45\x46\x68\x05\xf3\xa1\xf0\xf1\x39\xfa\x65\x3b\x0c\xb8\xbd\x6f\x55\xe9\x5d\x50\x22\xf8\x2a\x5e\xc9\xd6\x62\x28\xc7\xb4\x22\x43\xfd\x6c\xd3\x2b\x5a\x8a\x6b\x3b\xba\x33\x56\xa6\x4e\x19\x72\xf5\x34\xa8\x6e\x39\x17\x92\xa3\xaf\xf2\x44\x78\x2e\xd7\xd9\x9f\xbc\x63\xaf\x9c\x5a\x53\x35\x5e\x91\x43\x2c\x33\x75\xc5\x81\xb5\x0d\xc6\xa3\xb1\x1a\xd4\x5c\xe9\x2c\xfa\x60\x18\xb6\xf6\x73\x93\x27\xd4\xec\xbe\xd5\xfd\xb3\xfe\x82\xd2\xf4\xf9\xb3\x67\x25\x68\xac\x00\x8c\xf3\x9f\x17\x1d\x3c\xe4\x99\xb7\xbd\xf7\x76\x54\x79\x46\x75\xfe\xa3\xea\x13\x8d\xf9\xac\x6e\x51\xb2\xb1\x15\x49\xba\x7b\xfc\xcc\x7e\xb4\x8f\xbc\x05\x10\x5a\x68\x51\xf1\xdb\x74\xce\x6b\xf2\xf6\xc3\x2a\x49\x1a\x8b\x61\x8c\x61\xf0\x8a\xaa\xc0\xd1\x89\x2a\x8d\xd3\xb9\x63\x80\xa9\x0d\x99\xf1\x39\xad\xac\x3a\x1c\x0e\xbb\x87\xae\xf2\xa8\x50\xf6\x42\xf8\x39\x5c\x23\xc0\x9d\xf5\x13\x57\x6c\x95\x55\x1c\x25\xff\xf8\x03\xf5\x42\x1c\xc7\x30\xa4\x1e\x9f\x9c\x3d\xc4\xd1\x9b\x8e\xe2\xa4\xa5\x6c\x5a\x84\xaf\xba\x68\x0b\x08\x33\x07\xe8\x19\xbb\x52\xc7\x18\xa8\x44\x2c\xe2\x18\x45\xca\xe9\x94\x73\x51\xc5\x9f\x2a\xbd\xa8\xf6\x58\xba\x11\xa1\x4d\x4b\x6d\x97\xe0\x6c\x4a\x8d\x8f\x84\x63\xb3\x81\xb1\x89\x89\x76\x85\x5f\xd3\x0f\xdc\xea\x18\x4e\xdd\xbc\xec\x51\x25\xb7\x28\xd2\xf6\x4a\xea\x63\x10\x34\x39\x06\xd8\x6f\x5a\xd6\x94\x3b\xea\x49\xe8\x58\x84\xce\xa6\xb2\xc6\x86\xfc\x26\xf9\xaa\x06\xf7\xd6\x26\x89\xca\x18\x8c\x8c\x8c\xf4\x23\x8c\x84\xff\xd3\x41\x1c\x15\xf3\xde\x4e\x22\x19\x86\x79\x44\x42\xa9\x37\x27\x51\x2f\x91\xa5\x6c\x35\x4d\xc0\xed\x8e\xfd\x44\x17\x7f\x3e\xf9\xf8\x2a\xfa\x65\x6f\xeb\xa2\x30\x0a\xa6\x9c\xe3\xe4\x5b\x75\xb0\x6d\xec\xc6\x84\xc9\x6b\x21\xb0\xbf\xce\x1a\x7d\x17\xe2\x9a\x66\xd7\xc5\x50\x36\x15\xec\xdf\x81\xf1\xe3\x2d\x24\xb7\x08\xae\xdd\xfc\x39\x3b\x7a\x7b\x1e\x67\xbb\x87\x97\x7f\xcb\xe3\x77\xfd\xbf\xb8\xdd\x59\x55\x75\xc7\xf3\xcc\xed\xb7\x28\xb9\x39\x15\x74\xb8\x16\x91\x20\x49\x95\x42\x1e\x37\x11\x67\x96\x05\x04\x63\x7a\x1f\xf4\x79\xc9\x66\xe7\x4a\xa0\x66\x5b\xae\x37\x69\x26\xb6\xec\x76\x02\x2d\x6f\x92\xb9\x4b\x59\x36\xfe\xfa\xf9\xf0\xe8\xe5\x5d\xb4\x41\xff\x6e\x43\x35\x69\xd9\x61\x94\xb7\x14\x28\xb9\x89\xff\x5c\x76\x24\xa8\xb5\x1c\xa8\xa9\x1b\xe9\x4a\xcd\xf1\x6d\xe9\x37\x2a\x7b\xc2\x26\x57\x82\xa2\x9d\xdb\x8d\xb6\xeb\x86\x6c\x5c\x62\xbe\xb1\xde\x46\x70\x7b\x0e\xe3\xcf\xdb\x8e\xb9\xd6\x38\xc8\x28\x4c\x83\x3c\x10\xb8\x53\x2e\xfb\xfb\xdf\xdf\xbd\xbc\x39\xda\x33\xf7\xd5\x6c\x49\xc7\x40\xd9\xeb\xa8\x35\x9f\xdc\x12\xf5\xac\x25\x3a\x9b\x22\xe3\xf2\x21\xc9\x0c\x9f\xe6\x39\x1f\x03\x55\xdd\x56\x82\xe2\xec\xb0\xc6\x2b\xca\x74\xe1\xa8\x14\x8b\xdc\x82\x5d\x32\xe2\x82\x84\x1a\x50\xc5\x2b\x7c\x1f\x69\x5c\xef\x14\x79\x4d\x09\x5e\xa6\xf4\x25\x26\x67\x38\x99\x21\xa6\x42\x0b\x80\x31\x03\x97\x4b\x12\x18\xb5\x05\x09\x94\x88\xa2\x18\x5e\x89\x72\xe9\x7a\x13\x85\xce\x26\x44\x75\xb5\xde\xc3\x24\x42\xc9\x5c\x9f\xa9\xcb\xe2\x35\xa3\xdf\x85\xca\x78\xdc\x08\x76\x5a\xc5\x64\x01\x09\xa2\x41\x88\x63\xac\x24\x39\x18\x6e\x05\x31\x9a\x27\x1f\x44\xa2\x81\x58\x7e\x9e\x75\x10\xf0\xef\xad\xb9\xeb\x15\xc2\xaa\x73\x7c\x57\xb8\xd6\x9b\x69\x7c\x3f\xbc\x5b\xb2\x6b\xc1\x98\x7e\x91\x96\xaf\x73\x6e\xce\xcf\xed\x8c\x0b\xd6\x00\xd1\xfa\xd2\x3a\x32\xb1\x53\xf3\x18\x3f\x83\xf4\x0a\x8b\x0d\x5f\x38\x19\x9a\x85\xfe\x99\x2c\xb2\x37\xb7\x88\xe9\xbc\x39\x44\xcd\xbe\xd3\xf6\x78\x30\xb1\xa3\x2f\x98\x70\x4f\x18\x58\xd8\xb2\x3c\x6c\x9c\x18\x83\x48\x38\x15\x4a\x36\xee\x7d\x85\x73\xfe\xb7\xe6\x86\xd4\xb7\xca\xe6\x62\xc8\x12\x20\xec\xe7\xfc\xd5\x0f\x4f\xf3\x41\xfc\xdf\x1a\x0e\x62\x9e\xa2\xb6\xdb\x23\xf7\xed\xe7\x7d\xf0\x13\xf8\x9b\x59\xb1\x33\x26\x2f\x20\x1a\x9b\x8b\x86\x05\x2e\x42\x7e\x45\xdf\x85\xf3\x8c\x56\xdd\x55\x9d\xdc\x12\xdd\x29\x26\xc5\xcb\x8b\xab\x09\x78\xff\xc6\x89\xc4\x1b\xd3\x87\xbf\x69\x77\x02\x7d\xc6\xd3\x5d\x43\x05\x7c\x9f\xbe\x5b\xec\xbf\x99\xbd\x76\xd6\xfa\xb4\x46\xf0\x5c\x5f\x68\x56\x1a\xa4\x2c\x61\x27\x18\xac\x8b\x91\x46\xb1\xb1\xd9\x5a\xf0\x12\x83\x8d\x96\xe2\x51\x30\x2c\x98\x9d\x87\xf3\x1f\xc9\xd2\x6c\xec\xa5\x6c\x8b\x73\x77\xc1\xba\x6e\xef\xe5\x69\x1e\x6c\x85\xa4\xa4\xf8\xe4\xbf\xc1\xbc\x73\xbc\x0d\x17\x9b\xe9\x74\x32\x8d\xda\x88\xbb\xd3\x00\x65\xad\x9d\x91\x2f\x31\x99\xa2\x28\x82\x8e\x10\x8b\x07\x7c\xd5\x29\x02\x71\xf6\x6c\x96\xdf\x9a\x57\x39\xd5\x71\x27\xfa\x29\x51\xa3\x18\xc7\x53\x60\x04\x79\x75\xbb\x33\x40\x14\x2e\xdb\x68\x71\x8b\x78\x6e\x36\xa7\xfb\xc0\x8f\x61\x32\xa7\x0b\xa7\xc4\x03\x3d\x11\x51\x41\xd7\x2a\x8a\x01\x4b\xb8\x25\xa5\xef\x40\x05\xdf\x49\xea\x6d\x6a\x63\x3d\x0d\xde\xc9\x4d\x65\x23\x30\x83\xf4\x3d\x98\xa3\xa4\x02\x3d\x38\xf0\x05\xe8\x93\xc7\xb7\xd9\x70\xd8\x29\x57\x68\xa0\xc7\x32\x6c\xc8\xcb\xc7\x32\xa9\xd4\xe7\x9c\xf5\x0e\x4f\x51\xec\x58\x4d\xd9\x71\x29\x3d\x83\x09\xd1\x94\xfc\x17\x02\x6e\xa4\x93\x55\xe2\xf1\xa2\x24\xd7\x29\xe5\xd3\x6a\x77\x00\x5e\x97\x9a\x68\xbd\x6e\x8a\xac\x38\x6d\x0d\x0f\xfa\xb0\x4a\xbc\x37\xa2\x4c\xaa\x81\xf2\x9d\x03\x4e\x1a\x41\x9d\xb2\x95\xf3\xe6\x89\x4a\x13\x44\x4f\x89\xda\xd5\x88\x5d\x8b\xcd\xfd\x82\x57\x5e\x84\x93\xff\xfa\xcf\xff\x1f\xf5\x16\xe0\x16\x7a\x29\x24\x4b\x94\xf1\xe6\xb9\x14\x7b\x92\xf4\x59\x7e\xaf\xd2\x40\x53\x59\xbb\xff\x97\xbd\x6f\xdd\x6e\xdb\xd6\x1a\xfc\xef\xa7\x60\x38\xf3\xb9\xe4\x17\x88\x16\x75\xf1\x45\x3d\xac\xbf\xd4\x49\x9a\xe4\x4b\x52\x37\x76\xd3\xd3\xba\x5e\x3d\x30\x09\x49\x68\x28\x42\x05\x41\xdb\xaa\xad\xb5\xe6\x1d\xe6\x59\xe6\x05\xe6\x51\xe6\x49\x66\xe1\xc2\x9b\x78\x11\x25\xcb\xb1\x4f\x9b\x9e\x75\x1c\x8a\x17\x60\x63\x63\x63\x63\x63\x5f\x13\x74\xac\x96\x3f\xba\xb9\xdb\x62\x53\x93\x5c\x2d\xb1\x89\x9c\xf3\x82\xb8\xa5\x6f\xf2\x15\xf6\x38\xa7\x58\x23\x9f\xbd\xc4\x7f\xab\x82\xb7\x2d\x70\x96\x49\xe4\x33\x1c\x17\xf7\x48\xeb\x94\x06\x0b\x89\x6d\x17\x8b\x9f\xc8\x84\x8b\x24\x38\x91\xd5\x53\x38\xa1\x8a\xb8\xdb\xf8\x8c\x27\x5f\x97\xa1\xb8\x89\x03\x74\xfc\x65\x7a\xbb\x8e\xe9\x84\x88\xbd\x84\x2e\x62\x3f\x44\x88\xce\x8e\x39\xe6\xc5\x1c\xfc\x31\x55\x01\xbe\xc9\xb1\xa8\x2e\xf5\xfd\xc6\x47\x19\x3b\xf6\xe6\xc6\x99\xa6\xe1\x5f\x18\x69\xf6\xc1\x5a\x63\x8d\x1b\x78\xa0\xd1\x3e\x4f\xb3\x6f\xe5\x47\xfc\x3c\x97\x96\x6b\x61\xd4\x8b\x0f\xd7\x1a\x79\xb6\x91\x07\x1a\xfd\xb1\xac\x75\x93\x1f\xb9\xba\x59\x1c\x75\xf6\xc1\x5a\x23\x8e\x1b\x58\x36\xda\xe5\x36\xe5\xc2\x56\x15\xfb\x84\x2c\xdf\x4b\xbf\x6c\xa9\x5f\xb6\xd4\xc7\xb3\xa5\xd6\x91\x75\x5a\x42\x4b\x1e\x6a\x6a\x6b\x71\x84\xac\x35\x4d\xe5\xd7\x54\x86\x16\x3e\xc5\x7a\x92\xa2\x74\xaa\x5c\xab\x4b\x5a\x57\xab\x97\xbf\xa1\x12\x68\xc4\xee\x69\x11\xa5\x28\xe0\xe2\x31\x2a\xcf\x2b\x19\x03\xc0\x44\x96\x9d\x92\xbe\x09\x65\xf1\xf9\x51\xfd\x7c\x8e\x42\x57\x2a\xe5\x75\x90\x7a\x14\xc5\x7e\xb8\xbc\x35\x3d\x57\x46\x2c\xf9\x3c\x77\x37\xd3\x0a\x47\xf5\x15\x66\xe3\xd6\x90\x10\x56\x46\xe3\xbd\x4c\xd6\xbf\xa4\x48\x3e\x0c\x43\x44\x59\x0b\x4f\xa6\x3e\x76\x85\x52\x5e\xbd\xd1\x1a\x23\x7f\x8a\x68\x0b\xd2\x51\x34\x89\xbf\x90\x4e\xc0\x32\xd6\xf3\x1c\xf0\x53\xb3\xa8\x92\xa6\xfd\x8b\x59\xfc\xe6\xbf\x38\x79\x5d\x20\x0d\x6a\xa2\x52\xf3\x35\x8b\xa0\xaf\x25\x2d\x8a\x9c\x19\x43\x12\x05\x9e\x06\xb5\x90\x51\x1c\x8c\x2c\xed\x39\xf6\x44\x1e\x8d\x09\x82\x81\xf6\x2f\x23\x7d\x59\xb6\x68\xfe\xeb\x50\x33\x7e\xfd\xaa\xf6\xfc\xce\xcf\xfe\xbf\x7e\xa5\xfd\x97\xf6\x76\xbf\x3b\x38\xb2\xbb\xa6\xb6\x16\x57\xd9\x0c\x6e\xf8\xa4\xb4\x2e\x66\x05\xf4\xa8\xfb\x9b\xc5\x90\x6a\x74\x45\x24\xf5\x06\x47\x76\x3f\x8b\xa4\x33\x51\x94\x57\x38\x89\x25\x2e\xec\x25\x38\x8b\x33\xcd\xd4\x73\xc7\xbf\x33\x66\xfb\x75\x98\x4d\x73\xc2\x96\xe0\x36\x95\x22\xbf\x60\xb7\x0a\xbb\xbb\x75\xd8\x65\xea\xc0\x51\x82\xdb\xf8\x2c\xf2\x05\xb3\x55\x98\xdd\xab\xc3\xec\x94\x62\x42\xb1\xdc\x78\x4a\xb0\x7b\x9c\x79\xbc\x1a\x86\xf7\x80\xce\xc6\x8b\x6e\x74\x22\xf3\x46\x49\xe2\x84\xea\x0f\x17\x1c\xb2\xbb\x19\x19\xe6\x24\x4e\x65\xb2\x42\xea\xbc\xcd\x4c\xba\x4c\xdb\xb4\x30\xe3\xfc\xe6\x66\xa7\x9b\xb7\xb8\xda\x5c\x1f\xd8\x8b\x5b\xe4\xd9\x99\xfe\x09\x09\x1c\x49\x9b\x92\x25\x6b\x3a\x35\xd8\x34\xd5\x69\xec\x77\x72\x91\xaf\xa1\xc0\xe5\x7a\xa1\xaf\x14\x96\x49\x25\xd5\x74\x13\x9b\x55\xcd\xf1\x49\x04\xd6\x73\xa9\x13\x2c\x7e\x52\x79\x64\x2a\x4e\x67\xb7\xca\x10\xd9\x29\xad\x41\xb5\xec\xac\xc3\x45\x3a\x25\x53\xd5\x46\x86\x09\x17\xd8\xd2\x32\x63\xa9\x52\x75\x49\x3d\xbc\x2a\x18\xd2\x26\x5a\x41\x34\xb9\xe0\xa3\x59\x52\xb7\x2c\x8d\xe8\x0a\x19\xa4\x2c\x7c\xb6\xe8\xc0\xfc\xff\xfe\xd7\xff\xce\xbf\x87\x02\xaf\xf8\x96\x46\x86\x39\xaf\xe8\x8c\xb8\x9c\xd1\x74\x2f\x0d\x65\x2d\xd1\x47\xaf\x50\x4a\xae\x18\x24\x69\x64\xa8\xcf\x43\x6e\xd9\x59\x21\x0b\x5e\xe2\x4e\x29\xc2\x33\xca\xf5\xf4\xf9\x61\x8f\x85\x79\x42\xbb\x98\x69\x12\x74\x8d\x21\x3a\x31\xd7\x50\x17\x96\x1d\x8a\xee\x65\xa7\x89\x8b\x93\x2c\x30\x9d\xa9\xc5\x6f\x6e\x92\xe9\xc8\x16\x57\x63\x3a\x76\xbb\x5b\xb2\xc3\xa4\x61\x14\x19\xfa\x8e\x0b\xac\x54\xb1\xa0\x7f\x94\x7a\xd2\x7f\x86\xad\x9c\x23\x38\x90\x59\x2d\xf2\x08\xe6\x37\x37\x8b\x60\xde\xe2\xaa\x08\x2e\x13\xea\x4b\x11\x1c\x8f\xa1\x0c\xb9\xdf\xac\x81\xdc\xbc\x33\x7c\x05\xd7\x92\xc7\xd9\x62\x1d\x90\xfa\x05\xb2\x6c\xbd\xd5\xd5\x96\x5e\x37\xa6\x26\x97\x7d\x71\x89\x2a\x2b\x93\xba\xa7\xc2\x06\x08\xda\x2b\x9c\x44\xf5\xbb\x65\xc9\x7c\x4f\x34\x65\xfa\xad\x8b\x37\xbe\x5b\xce\x49\x4d\xd4\x11\x46\x9a\xeb\x47\x21\x13\xae\x6c\x9a\xd2\x8d\xf8\x33\x4d\x34\x62\xd5\xcc\xeb\x8a\x9e\x8b\x85\xa4\xab\xa5\xec\xfb\x33\xa3\xf8\x1d\x64\xee\x18\xdd\x3f\x96\xdf\x13\xa1\xa3\xd3\x26\xbc\x3f\xce\x28\x68\x8c\x69\x4d\x62\x42\x4b\xb4\xd2\x1b\x44\xf9\x5a\x9b\xf5\x23\x46\x6a\x1e\x8b\x6c\x8c\xc4\x46\xbe\x24\x96\xbf\x03\x72\x38\xc8\x39\x56\x95\x31\xa9\xd5\xfc\xe0\x6a\xb4\xa7\x0d\x74\xad\x2b\x25\x43\x5d\xa5\x66\x47\x7e\x57\x59\xc3\x95\x46\x08\xfd\x0f\x9b\xf0\xf4\xc2\x1f\xbe\x0a\xbc\xf7\x0d\x8b\xa0\x2c\x77\x53\x5a\xdf\x1d\x89\xff\x59\x1f\x8f\x3b\x99\x90\x9e\x07\xc6\xe9\xf4\xe5\xec\xcd\x3f\x23\xfc\xc3\x06\x9d\x93\x92\xe8\x51\x79\x4c\x8c\x15\x8e\xba\x96\x1d\x75\xb5\xff\x92\xdd\x97\x96\x1c\x81\xa8\x24\xf2\xf0\xfc\x1e\x7c\x9c\x72\xb3\xd0\xd4\xaf\x67\x89\x78\x21\xc4\xc3\xa0\xf4\x28\x59\xf2\x65\x6d\x70\xf2\xa3\x77\x18\xca\x06\xa6\x95\xfa\x0d\x55\xc9\x7e\xcd\x4c\x42\xcf\xb2\xe4\xb2\x31\xcb\x50\xce\x16\x53\xd5\x59\x43\x43\x51\x2e\x36\xaf\xc2\x22\xf3\xc5\x6c\xf4\x00\x66\xa3\x05\x1e\x9b\x9e\xa3\x3a\xfd\x75\x0d\x48\xb5\x3a\xc9\x7c\xa2\xb9\x7b\xd6\x04\x3c\x52\x9d\x73\x35\xce\x6b\xb5\xcf\xe1\x98\x50\xf6\xba\x4a\x23\xf9\xfa\xf9\x17\xc5\x7e\x33\x24\xef\xd7\x1a\x4f\xe2\x94\xd7\xef\xab\xad\x7f\xa7\x30\xfc\xa4\xc5\x89\xd8\xbf\xa0\xbc\x01\xca\x0f\xaa\x50\x9e\x04\x6d\xf0\x1d\x83\x22\xc8\xd0\x6b\xe9\x87\xae\x1f\x89\x5f\x9a\xfc\x59\x3e\x0f\xf2\x15\xef\xcb\x24\x34\x9a\x84\x6e\xbb\xc9\x24\xc8\x3a\xd5\xf1\x24\xbc\x13\xbf\x6a\x27\x41\xbc\x82\xbf\xcc\x42\xd3\x59\xb0\x97\x1b\xc6\xeb\xd0\xfd\xc5\x3a\xbe\x0a\xb2\x3b\x75\xc8\xfe\x9d\x5c\x7c\x44\x34\x54\x21\x84\x25\xb8\xce\x3c\xfd\x82\xec\xe5\xc8\x2e\x33\x6c\xa4\xce\x34\xc4\x43\x56\xbd\x04\x73\x24\xaa\x2b\x6e\xc8\x78\x2e\xb2\xc0\x35\xb7\x9c\xab\xaf\xe2\x8c\x4d\x7f\x63\x23\x79\xf5\xfc\xee\xad\x7b\x20\x28\x16\x68\xc9\xd9\xc8\x33\x69\x57\x94\x56\xe0\x9a\x2d\x31\x9a\x4b\x85\x49\xad\xe9\xfc\x59\xa6\xd5\x2f\x16\xf4\xc7\x6b\x41\x7f\x56\xae\x5a\xaa\xf4\x7d\xff\x1b\x9a\x90\x2b\x97\x64\xbf\x4c\xa4\xfb\x62\x4b\x5e\xdf\x96\x5c\x8d\xe9\x32\xb1\xed\x8b\x51\x79\x75\xa3\x72\xb1\x4e\x45\x39\xf7\x59\xdf\x36\x5d\x40\xdf\x23\xb5\xc6\x65\xe8\xec\x7e\x8d\x72\xcb\xe3\x67\x9a\x25\x5f\x5c\x4f\xcd\xdf\x6c\xc2\xef\x3e\xdd\x77\x9f\xec\x9c\x62\xbb\x0a\x95\x1b\x99\x6e\x11\x89\x72\x81\x50\xa0\x09\x6b\x84\x57\x59\x19\xb3\xde\x18\x70\xbf\x16\xd0\x12\x5e\xb8\xa6\x0d\x4f\xbc\x83\x95\x28\xf6\x90\x26\x3c\xfb\xfb\x37\xd3\xfd\x6e\x74\xd9\xdc\x2c\xba\x92\xd5\x2e\x33\xce\x07\x33\xda\x45\x81\x2f\x72\xc8\x26\xc9\x09\x5e\x78\x22\x63\xce\x5d\xad\x75\xb9\x65\xbc\xc6\x0a\x5e\x5e\x22\x4d\xfe\xc7\xf1\xfb\x3c\xc1\x63\x71\xf1\x35\x0a\x1b\x13\x85\x5e\x33\xd5\xb8\xb5\x7c\x99\xae\x86\xe9\xa0\x38\xfe\x90\x87\x59\x55\xbe\xbe\x42\xb2\xa6\x17\xe2\xe5\x26\x2b\x79\x0d\xae\x59\x5f\xc6\x29\x2f\xac\xef\x03\xfd\xf7\x90\x04\xad\x4b\x8c\xae\x50\xa6\x06\x26\xbf\x99\x9a\xf3\xb2\xe4\x5a\x19\x80\xb9\x0e\x17\x6a\x50\xef\xf9\x77\x72\xd1\xe2\xb8\x25\x74\xd1\x57\x5a\xe6\xb7\x92\x56\xc0\xfc\x69\x50\xe6\xd1\x12\x51\xab\xd1\xc5\x44\xa2\x3a\x5d\x88\xaa\x46\x27\x90\x53\xb6\x72\x56\xae\xa5\x1f\xc4\x7d\xae\x72\x78\xdc\x3c\x43\x4e\xe7\xec\x4e\xfc\x78\xea\x93\x99\x9c\x9d\x87\x65\xc8\x17\x3f\x76\x3b\xfb\xd7\x15\x09\x5f\x36\xc1\x90\xd3\x81\x7e\x7e\x8e\x5c\x20\xf8\x0c\x38\x2d\x55\x27\x3e\x21\xfe\x3c\xa8\x67\xf9\xc4\x56\xb9\x87\x2b\x16\x4e\x5b\x93\xcc\x92\x0e\xef\x40\x67\x88\x53\xc7\xa3\xf0\xdd\x39\xb9\xfa\xf1\xbf\xa7\x6f\xbe\xff\xb6\xdc\x77\x67\x73\x7e\x3b\xd9\x11\x3f\x06\xbf\x1d\xa9\x62\x79\x91\x9d\x87\xa5\xde\x3b\x77\xf3\xc4\x38\xaf\xee\x7a\x55\x67\x8c\xfb\x72\xc0\xb0\x1f\x9d\x03\x46\x86\x6c\x32\xe1\x49\x83\xa3\x83\x55\xb4\xad\x95\x4a\xed\xd7\xcf\xab\x8f\x33\x1b\x43\xe8\x23\xb5\x54\x94\x62\xd6\xb6\x07\x47\xb6\xfd\xd9\x82\xfc\xfe\xbe\x78\xee\xd4\xe1\x59\x9a\xfb\x4f\x71\xa5\x9b\xc5\xca\xe6\xfd\xbf\x2f\xa2\xbb\x75\x88\x66\x14\x8f\x46\x88\x22\xef\xdb\x2a\x9a\x3e\x8d\xdf\xd0\xbe\xfd\x42\xd7\x0d\xd0\xdd\xab\x43\xf7\x46\x83\xdb\xff\xbe\x38\xee\xd7\xe1\x78\x0c\xc3\x63\x1f\xba\x02\xb5\x2f\x21\xf6\x23\x8a\xaa\x30\x9e\xbc\xa7\x65\x5f\x5c\x23\xad\xcd\x26\x4d\xbe\xf6\xa3\x33\xf9\x96\x4f\xc2\xde\x9a\x32\x08\x6d\x52\x3f\xb2\xa4\x3e\xa7\x34\x86\xc7\xc7\x9e\x8c\xbb\x40\x75\x91\xc5\xe6\xcd\x65\x37\xf6\xf5\xda\x4b\x0b\x44\x4d\x48\xc0\xc6\x71\x11\xd1\x7c\x37\xb9\x7d\xad\xba\x6e\xe8\xea\xf0\x2f\xf0\xf1\x4d\x34\x99\xf2\xaa\xd5\x5b\xab\x8f\x04\xac\xea\x47\x17\x07\xb0\x4c\xc2\xfa\x86\x21\xd0\xef\x77\x9e\x69\x2d\xed\x75\xa0\x1d\xab\x4a\x58\xab\x47\x74\xe5\x41\xaa\x60\x21\x4d\xe1\x39\xa5\x11\x5a\x33\x01\x96\xa6\xbd\xe4\xc8\x2e\xd8\xfa\x56\x0e\x92\x2a\xd7\xcf\x15\xef\x16\x9b\x5e\x5e\x79\x74\x63\xf6\x9f\xa5\xa6\x9b\xbb\x1b\x6e\x72\x87\xcc\x4a\x55\xeb\x1a\x66\x9b\xd3\x31\x0e\x35\x1c\x6a\x13\x12\x32\xcd\xc7\x9f\x90\x3f\xd3\xbc\x08\x71\xfe\x3c\x82\xf4\x02\x8e\x50\x5c\x45\x0f\x93\xa0\xc4\x88\xf3\xf9\x0d\x36\x0b\x6c\x7c\x4d\xc5\xcd\x63\xc8\x05\xfd\xc7\x8b\x17\xef\xbf\x0d\xd1\xf3\x0d\xa9\x06\xe3\x65\xaf\x74\x35\x35\xca\x19\xd9\x52\x61\x8f\x77\x49\xe0\x42\xfe\x4b\xa8\xf2\x78\x47\x3b\x8b\x6d\xc7\x03\x50\x59\x76\xb2\x92\x8b\x54\x14\x2d\x0d\x62\xc9\xc4\xcc\x64\x12\x80\x88\xab\xd3\xd8\x31\x7d\x51\x3d\xb8\x72\x8c\x4b\x69\x7c\xce\xd2\x34\x24\xcb\xf4\xe4\x05\x20\xeb\xb4\xe4\x77\x0b\x27\xbc\x6b\x70\xe6\x4e\x5c\x6d\xe2\x61\x29\xfc\x87\x7f\x92\x68\x1c\x7e\xff\x67\x43\x0a\xdf\x98\xd2\xb0\xba\x4c\x6b\x2e\x35\xb9\x42\x52\x2b\x9c\xe2\x20\x10\x29\x51\xcf\x37\xcd\xad\x54\x17\x77\x98\xc9\x47\x51\x6f\x91\x51\x76\x6c\xbf\xf7\xa7\x7f\x85\x7a\x8b\xfa\x62\xc1\x41\x91\x2a\xf4\x77\x72\x91\xd6\x56\x4c\x2d\x6e\x8f\xaa\x56\x62\x35\xe4\x39\xff\x83\xa5\xe0\x3f\xcf\x9a\x45\x1f\xc7\x00\x2e\xa5\x23\x7a\xd8\x04\xfc\x8f\xf1\xbb\x8d\x80\x2f\x9a\x0c\xd4\x4e\x15\x4d\xc5\x72\x7a\x9e\xb7\x3c\x2d\x11\x8e\xef\x7d\x1e\xb3\x76\xcb\x06\x13\x99\x85\xbd\x69\x31\xd9\xe5\x29\x5a\xef\x71\x84\xf9\x68\xf7\xa5\x23\x5c\x08\xc5\x7d\x14\xb4\x9a\x37\xfa\x2d\x1d\xc2\x82\x81\xe8\x01\x2b\x68\x2e\xec\x29\x77\xd8\x94\x44\x01\xce\x91\x10\x83\x1e\x76\x63\xfa\x99\xbc\x0e\xde\xb4\x7f\xfa\x69\x79\xca\x02\xa0\x8b\xd2\xd9\x3a\xd0\x3d\xc8\xa2\x89\x28\x71\x29\x82\x90\x1a\x09\xda\x22\x20\x52\x0c\xb8\x4a\xde\x06\xba\xd6\xd2\xca\xe4\xf1\x9c\x05\xb5\xb6\x54\xcb\x23\xde\x34\x8b\x65\x7a\x93\xe5\x90\xa3\x85\x62\xe5\xd9\x2c\x1a\x12\xd1\xbc\x10\xa6\xb0\x89\x5d\xb6\x7e\xd5\xdc\xc5\xc3\x81\x1f\xde\xed\xf2\xa9\x89\xc3\x0a\xcb\xcb\xac\x95\xd1\x49\x7d\xa5\xb5\x6c\x9f\x8d\x5c\xa7\x72\x55\xd2\x4b\x67\x7e\x15\x0f\x2c\x59\x64\x3e\x15\x27\x4a\x23\x27\xf4\x25\xc5\x5a\x65\x6a\xf2\x8c\x92\x21\x89\x26\xd6\x9e\x23\x06\xb1\x1f\x96\x8c\xb9\x49\xc3\x53\x88\x93\x1a\x18\xb5\xd5\x62\xa5\xdb\x70\xdc\xff\xff\xd0\x38\x04\xd9\x4e\x4b\x27\x88\x89\x97\xca\x22\x34\x2a\xf4\x2d\x9b\x86\xf3\x83\xaa\xaa\xaf\xe5\x43\xbb\x4a\x81\x8d\x2b\xf0\x8b\x57\xf3\x41\x28\xef\x5e\xfd\x59\xa3\x24\xba\x37\xa0\x0b\x91\x65\xb5\x70\xc7\x6f\x2f\x80\x8e\xbf\x7d\x08\xd0\x9f\xe3\xf0\x53\x53\xc0\x5f\x4c\xc7\x68\x82\x28\xf4\xe5\x47\x0d\xe0\x5f\xbc\x73\xc7\x05\x7f\xc7\x75\x5e\xe5\x98\x5a\xd2\x88\x7a\x25\x95\xc1\x34\x69\xdc\x5b\x3a\x1f\x17\xd0\x1b\x21\xce\x98\xae\xc6\x98\x25\xec\x31\xc6\x68\x45\xaa\x9d\x1a\x2f\xff\x72\x9c\xde\xc1\x25\x5f\x1d\x0a\x32\xf1\x7a\x52\x7f\x2f\x8a\xec\x94\x84\xed\x1d\x91\x80\x41\x2c\x74\x04\x8b\x29\x63\x12\x03\x40\x9c\x7e\x98\x0b\x14\x53\x1f\xb3\x56\xbc\x77\x2d\xb7\x26\x91\xf2\xf0\x17\x1f\x8d\x50\x50\x5e\x62\x03\x41\x77\xac\x94\x53\xc2\xd1\x15\x32\xd8\x58\xb5\x5f\x14\x08\x16\xcb\xa5\xf2\x66\xfb\x40\x85\xff\x24\x99\xe0\x17\x0a\x9e\x66\x2d\x21\xfc\x65\xc5\xf5\xcf\x41\x0c\x94\x14\x15\x9e\x2b\x69\x2b\x7e\x9c\x24\x0e\x2a\xa9\x6e\xbf\xa4\x07\x21\x2b\x66\xb3\x00\x8a\x46\x84\x7e\xbb\xa6\x3a\x70\x61\xe0\xcb\xaa\x1c\xfb\x84\xb6\xc2\x2b\x11\xaf\x92\x87\xa7\x04\x29\x15\x37\x73\xda\x54\xd9\x56\x4b\x06\x69\xee\x82\xb3\x42\x9d\xdc\xf3\xda\x5c\x31\xcb\xd9\x9f\xc2\x4b\xd6\x04\x96\x43\x57\x9d\xe5\x6b\x9d\xfd\xbc\xd0\x40\x36\x88\x32\x47\x0a\xd5\x21\x8e\xcb\x82\x1c\xeb\xce\xac\x7d\xb0\x5b\x19\x9a\x5a\xf7\x5d\x6f\x49\x3d\x92\xc7\xca\x9a\x33\x87\xe0\x1c\xbb\x6e\x9a\x1b\x2c\x9b\x10\x2c\x97\x29\x2c\x57\xec\xff\x28\xe5\x6b\x4d\x12\x86\x55\x24\xfe\x5a\x3f\x91\x18\x0e\x5b\x52\xfc\xcc\xc6\x32\x88\xdb\x2a\xc6\xa1\x22\xa9\xd8\x06\x36\x87\xba\xc8\x83\xa2\xfe\xe8\x4b\x46\xb2\x2f\x19\xc9\xee\xec\x10\x9b\x9e\x9a\x53\x67\x94\xdd\x42\xd1\x8b\x66\x96\x7a\x7d\x13\x29\xc9\xfe\x1e\x79\x3d\x4a\xd1\xbe\x3f\x38\xb2\xf7\x3e\x4f\x4e\xb2\xbf\x31\x96\x0f\xaa\xb0\xfc\xf9\x33\x64\xfd\x7d\x67\x61\xaf\xdd\x64\x16\x3e\x53\x8a\xac\xbf\xf1\x34\xd8\xb5\x2c\xe7\x5e\x72\x64\xfd\x8d\xb1\xdd\xa9\xc3\xf6\xfd\x24\xc9\xfa\x1b\x63\xbb\x5b\x87\xed\x7b\xca\x92\xb5\x6e\x9e\xac\x2f\x99\xb2\xd6\x9a\xe2\x42\x16\xd7\xe6\x82\xea\x3d\xa4\xca\x4a\x32\x9a\x3e\xca\x84\x59\x1b\x48\x99\xb5\x91\xa4\x59\x1b\x4e\x9b\xf5\x28\x13\x67\xd5\x69\x95\xfe\xd2\xc9\xb3\xca\x56\xa9\xa8\xa1\xb8\xc8\x88\x3f\x4b\xee\xac\xbf\x74\xf6\xac\x52\x54\xef\x35\x45\xf5\x26\x93\x67\x6d\x30\x7d\x56\xf5\xc2\x59\xb6\x01\xae\xe2\x4f\xbf\x81\x92\x0b\x8d\x38\x59\xd3\x14\x5c\x0d\x9a\x6a\x94\x86\x4b\xfb\x1c\xa9\xb8\xb4\x7f\x93\x74\x5c\x77\x21\xa6\x65\xa1\x25\x7f\xc9\x79\x5f\x9a\x95\x6b\xc3\x73\xdf\x28\x37\xd7\x5d\xe7\xb1\x36\xb0\xa7\xde\xec\x52\xd2\xf8\x1d\xfd\xdd\xf2\x2c\x7b\x4d\x9f\xb7\x8c\x8b\xea\x43\x7a\xbc\x5d\xb9\x01\x7a\xf1\xe9\x87\x17\xf7\x94\x50\x26\x19\xe5\x23\xc8\x26\x13\xc3\x52\x48\x25\x93\x4e\x05\xbf\xbc\x20\x21\x2a\xda\xe3\x2f\x33\x5e\xc2\x02\x82\xfb\xcf\x29\x13\x77\xb9\x26\x91\x3d\x8e\x98\x8d\x37\xfd\x68\xd8\xbf\x64\xfd\xc6\xae\xfe\xff\x36\xf1\x18\x77\x8b\xc5\xa0\xd1\x43\xe7\xf6\x3b\xfa\x21\x7c\x36\x75\x3f\xed\xdd\x61\xe5\x7f\x88\x02\x0d\x6a\xbf\x67\x82\x9d\x4a\x1d\x51\xef\xbe\x74\x2b\x32\x9f\x65\xce\xf3\x8b\x19\xce\xd2\xe3\x7c\x80\xae\x96\x67\x37\x6b\x92\xac\x6c\x93\xdb\x08\x8d\xd6\xc8\x47\xf6\x38\x56\x34\x7c\x7f\xe2\xbf\xfb\xee\x25\x6b\x46\x37\x3d\x45\x33\x3e\x9c\x91\x88\xa9\x19\xac\x96\xc8\x9b\x53\xcc\x26\x99\x40\x55\x09\xc6\xb5\x98\xc3\xda\x7c\x21\x81\x79\x48\xe8\x85\x28\x22\x9d\x08\x8c\x0f\x1c\x77\x77\xf5\xe6\xf5\x0f\xaf\xc6\xbd\x3b\x87\x6b\xd5\x4a\xc1\x77\x96\x7c\x99\xf6\x2c\x62\x63\x42\xf1\x9f\x92\x16\x16\x45\xc2\xb5\x6b\xab\x16\x7d\x36\x18\xf9\x84\x02\x49\x8b\x14\xb1\x06\xa7\xcc\x9f\x49\x44\x63\x2d\x46\xc1\x51\x5e\xba\xc6\x0b\x53\x0d\x62\x0c\x07\xa3\xd0\x12\x1d\x54\x29\x50\x9e\x1d\xbd\xd5\x24\x04\x4b\xe2\x6f\x3c\x82\x42\x2d\x20\x4c\x9b\x52\x72\x89\x3d\x24\x4e\x68\x14\xfd\x11\x61\x8a\x3c\x6d\x8a\xe8\x04\x87\x52\xc4\xd0\x84\x4b\xa2\xcb\x64\xb5\x58\xe8\x4d\x70\x80\x43\x46\x21\x23\x54\xc3\x43\x8d\xa9\xb8\x6e\x18\x68\x88\x52\x42\xad\x95\x8f\x5b\xc7\x0a\x02\x18\x7c\x7e\x34\x5c\x61\x36\x96\xc3\x0e\x31\x43\xd9\x71\x6b\x8c\x68\x97\x18\x5d\x89\x01\x56\x0d\x2a\x3e\x68\xdc\xd3\xb1\xa2\x7a\xd9\xdf\x81\x85\x8c\xe1\xe4\x22\xa2\x23\x44\x5b\x13\x14\x44\x0f\xcc\x3f\x3e\xbe\xfd\xa5\x8f\x5f\x4e\x48\x73\x19\xf0\x72\x54\xba\x50\x17\x46\xa5\x9e\xf2\x09\xfc\x96\x5c\xeb\x40\x6f\x6b\x6d\xcd\x6e\x8b\xff\xc7\x0f\xaf\x27\xbe\x10\xec\xc7\x8c\x4d\x07\x3b\x3b\x57\x57\x57\xd6\x55\xd7\x22\x74\xb4\xd3\x69\xb7\xdb\x3b\xa2\xa7\xaa\x87\xe2\xdb\x9d\x0a\x3e\x45\x91\xcb\x72\x40\x0a\x00\xe2\x6e\x67\xd9\x1f\x57\xd8\x63\x63\x1d\xe8\x19\xb0\xc6\x48\xf9\xa3\xd9\xbb\x65\x7a\xb4\xc6\x7d\xf4\x3a\x9f\xa1\x93\xfd\xde\xba\x9d\x6c\x7e\x91\xe4\x49\xe0\x0e\x2b\xa4\x28\x18\x3c\xe4\x12\x79\x7d\xe4\x5d\xbd\x3d\x7d\xd5\xf0\x18\x5e\xb3\xc5\x2e\x0e\xab\x9c\x78\x1b\x7e\xdd\x0a\xff\x88\x20\x45\x5a\xf9\x6d\xbb\x86\xa8\x36\xd2\x41\xe7\xbe\x3b\xe8\xde\x77\x07\xbd\xfb\xee\xa0\x7f\xdf\x1d\xd4\x71\x8e\x8d\x74\xb0\x77\xdf\x1d\xec\xdf\x77\x07\x07\x9f\x83\xef\x2d\x74\x7d\x07\xc6\x27\x9f\xf9\x64\x44\x1e\x5a\x01\xf1\xcf\xee\x5b\x82\x48\x73\x9e\x57\x25\x16\x64\x46\xb4\xd1\x5d\xbf\x28\x5c\x74\xda\xbb\x56\xd7\xd6\x76\xdb\x56\x7b\xaf\x82\xb5\x8e\xea\xe3\x66\xab\x1e\xa7\x47\x14\xb8\xe0\x78\xeb\xe9\x40\x7f\xb7\xb7\x6f\xf5\x0e\x40\xc7\xb6\xf6\xbb\x1f\x7b\xbb\x56\x7b\x6f\xdc\xea\x5b\x07\x97\xad\x6e\x67\xbc\x6f\xb5\x77\xdf\x1e\x74\xac\xbd\x03\xd0\xdd\xb7\xba\x07\x1f\xed\x9e\x65\x8f\xf9\xd3\x6e\xe7\xd5\x41\xdb\xda\xed\xfe\x52\x65\xaa\xab\xed\xd2\xb6\xbb\x56\xfb\x00\xf4\x76\xad\x7e\xdf\x6d\xed\x83\x76\xcb\x6e\x5b\xf6\x7e\xab\x67\xf5\x3a\xea\xf2\xc0\xea\x74\x3e\x76\x6d\xab\xd7\x75\xdb\xad\x9e\xb5\x0f\x3a\x96\xbd\x2b\xee\x82\xf4\x85\x50\x5c\x02\xfe\x99\xbc\x0b\xf8\xdd\xcb\xbe\x75\x60\x1f\xd9\x9d\xae\xd5\xd9\x03\xbd\x8e\x65\x77\x81\xdd\xb1\x2d\xdb\x96\x1d\x82\x6c\xef\xbf\x4c\xda\x2d\xfb\xc0\xea\xf6\xdd\x56\xd7\xb2\x3b\x80\xf7\xd5\xed\x00\xdb\xea\x1e\xc8\xab\xde\xe5\xae\xd5\x39\x70\xdb\xa0\x63\xed\xf6\x80\x6d\x75\x40\x0f\xc8\x07\x21\xff\xa7\xc5\xdf\x14\x37\x5a\x3d\x0e\x6e\xa7\x77\x64\xdb\x7b\x56\xcf\x06\x9d\x7d\x6b\x17\xd8\xf6\xae\xd5\xb1\x41\x67\xcf\xea\xc4\xdd\xf2\xeb\x35\xb1\xd6\xb3\xad\xf6\x3e\x10\x73\xf4\xb1\x73\x60\xed\xf5\xdd\x76\xcb\xb6\x3a\xfd\x96\xd5\xef\xb6\x6c\x6b\x7f\x2f\xfd\x03\xed\x5d\xcb\xde\x05\xf2\x6f\x9b\xff\xaf\xb5\x6b\xd9\xa0\x93\xce\xf0\xfe\xee\xc7\x4e\xc7\xda\x3d\x18\xf7\xac\xde\xae\x6f\xf5\xf7\x41\x07\x76\xba\x56\xaf\x0b\xe4\x5f\xfe\x91\x0d\x0e\xac\xee\x6e\xab\x63\xf5\xfa\x1c\xc9\x3d\xf9\x47\x3e\x11\x48\xef\x58\x7d\xd0\xe1\x5f\x24\xaf\xf7\xec\x56\xc7\xea\xbb\x5d\x6b\xff\x00\xb4\x41\xdf\xea\xf0\x99\xdb\xeb\xc9\xab\x5d\xeb\xc0\x96\x10\xbc\xb2\xfb\x3d\xeb\x60\xf9\x28\xfa\x56\x1f\x88\x3f\x85\x31\xac\x89\xc3\xfd\x8e\xb5\xaf\x70\x38\xe6\x74\xe5\xb7\xac\x1e\xef\xb6\xbf\x0f\x6d\x41\xe8\xf2\xaf\x18\x4e\x6b\x0f\x74\xac\xf6\xae\xdb\xea\x71\x4a\x12\xbd\xb7\x3a\xd6\x41\x57\x5c\xec\x09\x5a\xd9\xeb\x8b\x57\x5a\xbb\x1c\x81\xbb\xd6\x7e\x47\x5c\xbd\xb2\xf7\xf6\x3e\x76\xdb\x56\x7f\xd7\x6d\x73\x74\x1c\xb4\xac\xbd\x4e\xab\x6b\xf5\x39\x85\xef\xf2\x0b\xd8\xed\x58\x7b\x36\x90\x7f\xe3\xb1\xf5\xf6\xad\xbd\x8e\x2f\xde\xe5\xef\x41\xde\x42\x07\xc8\xbf\x12\xbf\xfb\x2d\xdb\xb2\xdd\x3d\xab\xcb\x67\xe1\x80\x23\xdf\xea\x1f\x88\x8b\x7d\xab\xd7\xff\xe5\x9d\xbd\xb7\x07\xba\x7b\x56\xa7\x37\x16\xd4\xeb\xb6\x6c\xeb\x80\x13\x35\x9f\x41\x8e\x5e\x31\x93\x1d\xab\x1b\x5a\xfd\x2e\xff\xb7\x9f\xfe\x81\x07\x56\x87\x2f\x1f\x09\x0d\x90\x4b\x71\x6d\x52\xdd\xe7\xa3\xe1\xa0\xf7\xf6\xdc\x76\xab\xcf\x97\x66\xc7\xea\xb6\xf6\xad\xce\x2e\xd8\xb3\xf6\xe4\x15\x47\x42\xa7\x03\xe4\x5f\x39\xc0\x5d\xab\xd3\xb3\x76\xf7\x3e\xda\x5d\xcb\xee\xf9\x9c\x4a\x5b\xd6\x7e\x42\xb5\x3d\x6b\x77\xd7\x6f\x59\xfd\xfd\x56\x87\xcf\x56\xd7\x06\xf2\xaf\x9a\x2d\xbe\x14\xf9\x08\xf9\x84\xf1\xe9\xd9\xb3\x3a\x2d\x3e\x9b\xe2\x62\xdf\xb2\xed\x5f\x26\x76\xaf\xc5\x17\x32\xec\xec\x82\x4e\xbc\x30\x38\x74\x2d\x6b\xb7\xe3\xb6\x3a\x9c\x49\xb4\xc5\x1c\x03\x39\xd5\x80\x73\x85\x4b\x0e\xac\xdb\x06\x1c\x99\xd6\x5e\x07\x70\xd4\xed\xef\x83\x2e\xdc\xe7\x44\x2d\xfe\x48\xa4\xf5\xad\x4e\x57\x34\xb2\x14\x6b\xc4\x9f\x8d\x2a\x94\x90\x43\xe8\x49\x25\x13\xbf\x39\x25\x58\x64\x58\xd1\xbb\xfb\x56\xbb\xa3\x75\xba\x96\xdd\xd5\xe4\x75\xb7\x6b\xb5\xf7\xb5\xae\x6d\xb5\x0f\xb4\xee\x1e\xff\xdb\xd9\xb5\x3a\x7d\xad\xdb\x4b\xaf\xf9\x6e\xb2\xcb\xaf\xbb\xfb\x72\x67\xd1\xfa\x1d\xab\x77\xa0\xf5\xfa\xe9\xb5\xdd\xb7\x6c\x9b\x5f\xb7\x6d\x75\x9d\xe9\x6b\x8d\x71\x24\x20\x77\x76\xad\x76\x57\x13\xbd\xb6\x55\xcb\xf6\x9e\xd5\xdf\xd5\x3a\x7d\xab\xd7\xd5\x04\x4b\xd6\x04\x97\xd6\x04\x1f\xd0\x3a\xfb\x7c\x44\xf2\xda\x16\xd7\x12\x12\x4e\x0c\x39\xa8\x16\x21\x97\xd7\xed\x3d\x2d\xed\xf2\x4e\x80\x77\x38\x04\xdd\x8e\xc0\xa3\xb8\xee\x75\x38\x34\x76\xcf\xda\xdf\xd3\x7a\x7b\xe9\x75\x47\x5e\xef\x59\xfb\x62\x54\x9d\xbe\xd6\xb6\xec\xbe\x02\xac\x9d\xfc\xdb\x8b\x81\xcb\x4e\x49\x3a\x55\x69\x77\xe5\x50\x7f\x26\x23\x74\x89\x18\xb7\xba\x2c\x28\x42\xcf\xe9\x43\x9b\x9e\x5f\xbf\x98\xd1\xef\xa6\xe3\x70\x79\xb2\x95\xcf\x67\x55\x58\xa6\xf8\xc5\xe1\xcb\x58\x4b\xd7\x30\xbd\x53\xce\x1a\x51\xa6\xd9\x3f\x5f\xcd\x81\x65\xe5\x18\xc0\xc5\xd8\xbf\x51\x9c\xdf\xa9\x59\xd8\xdf\x97\x40\xbf\xc7\x10\xe8\xa7\x56\xec\x42\xba\xef\xb5\x8a\x0b\xff\x45\x83\x08\x8a\x18\x2a\x84\x3f\xe6\x02\x07\x60\x65\x19\x85\x24\x43\xc1\x97\x12\xe6\x65\x68\x2d\x38\xeb\xdf\x5b\x2e\xff\xbf\x1d\x6a\xf7\xeb\x50\x8b\xc3\xb7\x08\x7a\x88\x56\x20\x37\x7d\xf8\x05\xb9\xa5\xc8\x3d\xa8\x43\x2e\xf4\x3c\x8a\xc2\x4a\x4b\x63\xfa\xf4\x0b\x72\xcb\x90\xdb\x29\xab\xab\x9d\x32\x05\x44\x87\xc7\x84\x56\x39\xaa\x4f\xd5\xa3\x2f\xa8\x2d\x45\x6d\x59\x21\xed\x04\xb5\x1e\x64\x50\xfa\xbf\x54\x20\xf7\x79\xee\x85\x07\xae\xe2\xf1\x68\xc2\xd1\x8a\x58\xee\xae\x2b\x4e\x25\x59\x53\x78\x8b\x2d\xc8\xa5\xeb\x85\x10\xb4\x91\x08\x3f\x2c\x46\x9a\xdd\x43\x70\xd8\x12\xb3\xc6\xf2\xd0\x30\xfd\xee\x81\x61\x4b\x60\x58\x2d\x2c\x4c\xbf\xf7\xa0\x30\x79\x1c\x6a\x16\x0f\x56\xef\xd9\xfe\xd7\x8a\x05\x2b\x2c\x91\x6e\xa7\x69\x45\xff\x4d\xc7\x7f\x6d\x14\xb9\x8f\x22\xfa\xab\x88\xdc\x6e\x53\xe4\x6e\x32\xe2\x4b\xdf\x54\xbc\x57\xf9\xc2\x28\x51\x7a\x95\xc7\x7a\x81\x05\x95\x89\x0c\x12\x22\x11\xf3\x11\xd3\x1b\x56\x0d\x2e\x75\xd1\xda\xb4\x6f\x67\x66\xde\xd6\xd2\xb8\x3d\x8a\x42\x21\x07\xdf\x5f\x5c\x3f\x0f\x49\xc3\xec\xfb\xa5\x8e\xdf\x27\x4a\x81\x98\x77\xfb\x5e\x5b\xa9\x99\xc3\xce\xfa\xc8\x7d\x1c\xfe\xd1\xb3\x37\xbf\xff\xf8\x0e\x1d\x8c\x9b\xa1\xf7\x01\xbd\x9e\xef\xb2\x02\xd6\xf7\x72\x8e\x1b\x90\xff\x3e\xf4\x5c\xb5\xc7\x9d\xf7\xef\x8f\xcb\x5d\x10\x74\x06\x47\x0d\xf3\x79\xcb\xf5\xb0\x7a\xed\x9c\x1a\x39\xc9\x25\x7e\x34\x29\x26\x4c\x6e\xf4\x95\x86\xc3\xd6\x18\xfa\xc3\xa2\x64\xb5\xe4\xf3\xe5\x55\xa7\x96\x7c\x29\x3c\xb3\x8b\x6e\x67\xf2\xbf\x53\x38\xca\x67\x1c\xac\xb0\xfb\x28\xbd\x72\x95\x00\xab\x29\x59\x9b\xc1\x51\x85\xec\x18\xb7\x23\x54\xb7\x4d\x0a\xeb\xd5\x97\xdf\x4b\xdf\x2b\xb4\x26\x75\x85\x75\x52\x61\xe9\x67\x1f\xe3\x14\x9b\xeb\x6e\xa6\x8b\x3d\x88\x53\x55\x65\xb1\xb9\x24\xbd\x6b\x2a\xf7\x9e\x0a\xe4\xad\x96\xe2\x75\x29\x9a\xaa\x46\x9c\x4a\xe6\x8b\x59\xcb\x97\xa5\x51\xa9\x6a\xa7\x61\x32\xd2\x75\x24\x90\x6a\xd2\x7c\x10\x83\x5f\x9e\x5f\xae\xc3\x6f\xa5\x2f\xfd\x43\xc7\x99\xbe\x79\x1d\x7c\xd8\x39\xf9\x78\x6f\x51\x43\xab\x0b\x8d\x45\x51\x70\xc5\x89\x51\x41\x0a\x6b\x4f\xc9\x8e\x0a\x6f\x78\xd8\x99\x19\x7d\x37\xf6\x7f\x7e\xd3\x79\x5b\x61\x86\x25\x3e\x76\x67\x4d\xcb\x5a\xa8\x70\x8d\x7b\x08\x06\x6c\x5e\x33\xe1\x99\xeb\xa2\x30\x14\x01\x2d\x94\xf8\x5a\x02\xd3\x2a\xfe\x9f\x15\x9b\xef\x0a\xdb\x2f\xbb\x22\x2d\x36\xc6\xd4\xab\x2b\x79\x50\x1e\x8e\x54\xdc\x84\x8f\xfc\x28\xe4\x64\xab\xb1\x31\x64\x5a\x14\x22\x6d\x61\x90\x6f\x71\xc8\xc2\x38\xb2\x47\x06\xc5\x88\xd8\x96\x29\xa2\x43\x42\x27\x9a\x8b\x28\x83\x38\xd0\x44\x4d\x02\x4b\xfb\x76\xa6\x22\x82\x70\x30\xd2\xa0\x7c\xbf\x26\x69\x43\x1b\xe8\x27\x22\xd0\x49\xcb\x55\xc6\x07\x1a\xdf\x57\xb4\x61\xc4\x22\x2a\xc3\x8a\x50\xc8\xb4\x2b\xec\xfb\xe2\x18\x1d\xb1\x31\x0a\x18\x76\x21\x43\x1e\xd0\xa6\x84\xf1\x5f\xd0\xf7\x67\xe2\x11\xa1\xf8\x4f\xde\x3b\x45\xd0\xd3\xa0\x1c\x0d\x23\x1a\xf4\x3c\x51\x28\x02\xfa\x1a\x0e\x64\xe9\x58\x4c\x82\x75\x20\x96\x18\x22\x74\x11\x66\x36\x46\x9a\x20\x6a\x8c\x42\x0d\x06\x9e\x46\x23\x1f\x85\xda\x90\x50\x99\xbf\x42\xb4\x1c\x0f\x82\x9f\x7b\x0b\x19\x0d\x9a\x8a\x44\x01\x61\x78\x88\x55\xaa\x7b\x91\x8e\x78\x48\x6a\xe5\x95\x95\xa9\x71\x85\xaf\x97\xea\xeb\x2a\xe2\xee\xc4\xea\xe2\xd0\xf7\x32\x2d\x88\x35\xa5\x9d\x30\x42\x15\x9d\xd6\x8a\x3f\xd3\xc5\xa9\x91\x4b\x52\x83\x14\x69\x21\x23\x14\x79\x9a\x2b\x72\xb4\xb5\x42\xec\x21\x0d\x27\x13\x0b\x73\x10\x8d\x29\x1a\x2a\xaf\xdd\x70\xb0\xb3\xe3\xa1\x4b\xe4\x73\x8e\x68\x4d\xc8\x9f\xd8\xf7\xa1\xf0\xe0\x45\x41\xeb\xc7\x93\x1d\x8f\xb8\xe1\xce\x4f\xe8\x62\xe7\xd9\xf1\xeb\x9d\x9f\x70\xe0\x91\xab\x1d\x9f\xb8\xd0\xcf\x80\xac\x60\x11\xb7\x05\x18\xf9\xa1\x58\x9a\xa8\x65\x2a\x08\x61\x8a\x68\x88\x43\x15\x1b\x27\x09\x04\xba\x94\x84\xa1\x16\xa2\x38\x7e\xee\x67\x12\x69\x2e\x0c\xb4\x09\x0c\x22\x41\xe4\xae\x8f\x20\xcd\x7e\x32\x46\x14\x55\xe6\xc6\xa8\xbb\xdf\x88\xdf\xc4\xc7\x41\x7e\x3d\xc1\x01\x9e\x44\x93\xa5\x53\x7e\x11\x31\xc6\x39\x71\xcc\xa7\xed\x4e\x26\xf7\x89\x78\x96\x25\xdb\x6e\x79\x26\x34\x31\x4e\x31\xa3\x6a\x83\xc2\xb2\x60\x78\xca\xbb\x38\x1e\x4e\x65\x9c\xde\x5d\x05\xde\xc2\x42\xd4\x17\xab\x29\x07\x84\xe5\xa3\x34\x5f\x87\x1f\xa1\x8f\x3d\x7d\x21\x4d\x7e\x83\x32\x0a\x55\x48\x1f\x62\xe4\x97\x26\x56\xcf\x7c\x2b\x53\xd6\x37\xc9\x7e\x5f\xc6\x59\x57\x23\x01\xb1\x05\x2c\x9d\x6c\x91\x94\xbd\x3c\xa3\xb3\x78\x12\xfb\xd7\xe5\x92\xbb\xff\x53\xfd\xd7\x2a\xf9\x13\xff\xa7\xab\xb2\x07\x52\x24\x07\x95\x01\xb2\xe2\x25\x12\x28\x38\xaa\x03\xf2\x0b\xd9\xe2\x73\x21\xb6\x52\x33\x9a\x94\x28\xd0\x19\xa4\x23\xc4\xac\xf8\x3c\x70\xae\x86\xc1\x66\x53\x24\x2a\xb4\x5c\xaf\xa1\xb7\x5c\xb2\x3f\x8f\x91\x3f\xcd\x4d\x60\xc0\x64\x88\x29\xba\x44\x74\x96\x6c\x84\x8c\x68\x1e\x17\x36\x27\x38\x40\xc9\x96\x97\xd8\x4e\x96\xd1\x7b\x71\x77\x28\x07\x46\xe8\xaa\x83\x64\x90\x8d\x57\xf5\x94\x62\x59\x5f\xa4\x72\x61\x5f\x22\x8a\x87\xb3\xd3\x38\xc0\x36\x1d\x2e\xcb\xaf\xe6\xc6\xe5\x00\xab\x23\xa9\x17\xd7\xe8\x1d\x16\xe7\xe2\xa6\x1b\x46\x42\x0e\xb8\xd3\xde\x59\x63\xa1\xba\xe3\xde\x7b\x87\xdd\xf7\x59\x56\xbe\x7a\x52\xbd\x09\x57\x6f\xc3\x3f\xa7\x7b\x13\x0e\xb5\x4b\x3e\x03\x42\x20\x82\x49\x14\x7d\x22\x15\x0d\x89\xef\x93\x2b\x2e\x7b\xc5\xa2\xd3\x9d\xb3\x3c\x95\xdf\xbd\x03\x09\xbd\x0e\x2e\xef\x8b\x88\x3c\x18\x8c\xaa\x94\x5a\xff\xce\x34\xf4\x12\x62\x1f\x79\x9c\x53\x65\xa9\x69\x1d\x5a\x3a\x4d\x44\x67\xc9\xaf\x85\x59\x4c\x64\x06\x53\xa9\x07\xbc\x34\x19\x81\x4c\x16\x07\x03\x0d\x5d\xe3\x90\x1f\x84\xe5\x97\x8f\x8d\xa2\x3e\x20\x97\xd0\x95\xc8\x69\xe5\x09\x18\xe4\x0c\xd2\xd9\x5e\x8b\xf5\xfd\x2a\x75\x7f\x75\x82\x41\x66\x67\x68\x40\xb5\x0b\x27\xa7\xd7\xcf\x07\xf1\x5b\x2e\xf1\x50\x41\x13\x57\x84\x19\xaa\x2f\xeb\xcb\x6f\x2d\xeb\x5f\x4a\x44\xab\xf7\x9e\x48\x0a\x4b\xfa\xae\xd5\xa4\xae\x32\x87\xc7\x8a\x17\x16\x35\x7f\xbd\x92\xa2\x53\x45\x80\x99\x2c\x7b\x0f\xf4\x09\x0c\xe0\x48\x50\xd6\x2a\xfe\x27\x4b\xe6\x7f\x49\x29\xa1\x75\x5a\x91\xd5\x6d\xc6\x30\x3d\x6e\xb4\xb2\x12\x56\x19\xc3\xe0\x8c\x21\x1d\x5e\x7c\x14\x82\xa1\x06\xe5\xc1\x2a\xce\xc4\x71\x7f\x19\x1f\x17\xf5\xdf\xf9\x39\x98\x26\x73\xb8\x9a\x2e\xfc\x8e\x58\x5f\x11\xef\x55\xa5\x9c\xf2\xcd\x55\xab\xd9\xab\x00\x58\xc2\xe6\x37\x91\x18\x53\x5b\x51\x82\x2d\x5b\x44\x72\x50\x1e\x0a\x5d\x8a\xa7\xb9\x42\x4f\xcb\x93\x84\x97\xa1\x27\xdf\x52\x13\x55\xf1\x0a\xdd\xec\x01\x1d\x4d\x0a\x76\x22\x7e\x18\xc8\x74\xba\x34\xdf\x25\x28\xeb\xa2\x6e\xca\x52\x2c\xd3\x3c\xb3\xac\x62\xa0\x12\x15\x42\xfb\x55\xc1\x33\x9b\x76\xbe\x6c\x38\x35\x39\x7d\x9b\x15\x10\x6f\x6a\x66\xb9\xab\xa5\x25\xa7\x96\x5f\x43\xaf\x7f\x39\x6a\x4d\x21\x63\x88\x3e\xb8\x52\xff\x17\x7f\x34\xe9\xf4\xe9\x7f\xdf\x39\xb6\x3e\x33\x26\x7d\x31\xe3\x4b\x21\xc1\xcd\x86\xb3\xee\x88\xf8\x7b\x55\x2d\x03\xe8\xb6\x65\x2f\x70\x99\x98\x4b\xa1\x61\x58\x62\x98\x54\xd4\x11\x17\x60\x95\x61\xb0\x62\x1c\xd9\x71\x62\xbe\x09\x78\x18\x8e\x48\x00\xfd\x56\xc8\x28\x9e\xa2\x56\x37\xd1\x86\xc8\x2f\x7e\x0c\xb0\xf0\x11\x8c\x42\x44\x4f\xa6\xd0\x45\xdf\x07\x3f\xca\x24\xa1\xf9\xa4\x38\x05\x0c\xc9\x5b\x25\xb6\x0c\x3c\x11\xc1\x5f\xd9\xac\x3b\x3e\x0e\x3e\x0d\x94\x92\xd3\x83\x0c\x0e\xc4\x3b\x1c\x57\x4f\xaf\x27\xfe\xd7\x17\x30\x44\xbb\x3d\x70\xfc\xea\x7d\xe7\x97\xd9\xb7\xbd\x8b\x9f\xae\x23\xf7\xcf\x76\x00\x5f\x7d\x68\xbb\xcf\xc9\xe5\xdb\xae\xd7\xf5\x66\xfd\xee\xbb\x59\xff\xd2\x9d\xb8\x97\xef\x7e\x7f\x76\xf5\xee\xe8\xe0\x4f\x6f\xe2\x06\xaf\x5f\x79\xd3\x5f\x5e\x7d\x20\xc7\x27\xee\xf5\xbb\x23\x77\x04\xbf\xfb\x38\xfd\xa5\x33\x6e\xab\xdf\x4f\x8f\xf0\xb3\xd1\xf1\xab\x37\xfe\xcf\xdd\x1f\x46\x5e\xc7\xff\xe4\x7d\x37\x3a\x78\xf3\xe7\x8b\xab\x37\xb3\x6f\xc9\x2f\x3f\xf9\x01\x7c\xf5\x43\xfc\x7b\x02\x7f\xba\x0e\x8f\x4f\xbc\x2e\xfc\xce\x6f\xff\x72\xe2\x5e\x1e\x8f\xc8\xe8\xf5\xf3\xeb\xab\x9f\xff\xf9\x81\xbc\xfe\xee\x87\x83\x37\xed\x36\x7b\x77\x72\x75\xfd\xfa\xbb\xab\xd9\xdb\xa3\xf6\x8c\xb7\xfd\xfa\x28\xfd\xff\xe9\xe9\xb3\xf0\xdd\xe9\xb3\xd1\xc5\xf3\x17\x57\x6f\x8f\xda\xd7\xef\x9e\x91\xdc\xf3\xd7\x2f\xda\xfd\xb7\xcf\x5f\x24\xdf\xbf\x99\x7d\xfb\xa7\xf7\xea\xcd\x25\xec\xfc\x78\xf0\xa6\xf3\x26\xfc\xf9\xa7\xf7\x34\x73\x8f\xa5\xf0\xbe\x0b\xde\xfe\xd9\xfb\xef\x63\x39\xe6\xa7\xa5\xf4\x65\x1f\x1c\x1c\xec\x08\x44\xeb\x2b\x24\x6d\xaa\x99\xd5\x83\x3c\x31\xe6\xd5\x37\x75\x9c\xea\x2e\x6c\x2a\xc3\x65\x1a\xf3\x28\x0a\x83\x70\x48\xe8\x24\xdc\x89\xcb\xa9\x27\xdc\x89\x6f\x57\x17\x88\xb6\x38\xcd\xb5\x84\xe7\x4a\x6b\x48\xe1\x48\x30\x87\xe2\x87\x59\x5e\x06\xd8\xa6\xb8\x59\xe0\xb0\xf8\x76\x66\x28\xc1\x92\xa1\xc4\x60\xb6\xd6\x1e\xd3\x42\x0b\x9f\x79\x70\x5b\x4d\x06\x77\x97\x61\x3d\xfc\x6c\x45\x0c\xfb\xe1\x0e\xf4\xbc\x16\x23\x2d\x99\x86\xe0\x1e\xf6\xc5\x6c\x33\x72\x73\x8c\x1d\x7f\x43\x4b\xfa\x75\x7f\x63\x6f\x6f\xcb\x11\x3c\x71\xd2\x87\x67\xf6\xf9\x61\xf6\xc7\x40\xd7\x41\xe0\x18\xa1\x83\x2c\x51\x73\xd9\xd0\x0f\x75\x13\xf8\x4e\x27\x07\x28\x1e\x1a\xcf\x38\xb9\x58\x38\x14\xff\x1a\xc8\x34\x29\x62\x11\x0d\x34\x34\x37\x42\xf3\xf6\x36\x8f\x74\x3c\x34\x4e\xc4\xde\x6b\x61\x86\x54\x4a\xc5\x40\x93\xc3\x35\x90\x79\x7b\xab\x9f\x11\xf1\x43\x7b\x16\xc3\x72\xae\x3b\x8e\xa3\x10\x32\xa5\x84\x11\x7e\x54\xb4\x18\x39\x91\x8e\xc7\x2e\xf4\x7d\xde\xeb\x8d\x9c\x8d\xb3\x73\x00\x9d\x27\x6d\x40\x9d\x27\x36\x20\xf1\x4c\x31\x3a\xbb\x19\x12\x6a\xf0\x77\x42\xe0\x3b\xe8\x6c\x01\x8a\x73\xc3\xfc\xfa\x89\x01\xf9\x78\x7d\xe1\xaf\x6c\x98\xa6\xe5\x91\x00\x99\xdb\xdb\x46\x60\x4d\xa3\x70\x6c\x84\x52\xb3\x6e\x82\x27\xec\xf6\x36\x50\xc8\x7c\xe2\x38\xcc\xfc\x9a\x77\x69\x7e\x3d\x77\x21\x73\xc7\x06\x36\x6f\x28\x07\x81\x38\x78\x3e\xc4\x01\xf4\xfd\xd9\x0d\x07\x00\xde\xde\x72\x71\xce\x71\x7c\x4b\xa2\xe8\xf6\x36\xbe\x32\xcc\xe4\x4d\x3c\x34\xa8\xc9\xc6\x94\x5c\x69\x64\x3e\x57\xb8\x0c\xe6\x73\x23\x04\x7e\x16\x9d\xe6\x8d\x7c\x29\x40\x57\xda\xe9\x6c\x8a\x5e\x50\x4a\xa8\xa1\x2b\xcd\x9f\xc6\x99\xe2\x64\xaa\x34\xef\x21\xa3\x91\x2b\x2c\xd3\x01\x09\x5a\x62\xcc\x17\xfc\x08\x1f\x84\x0c\x06\x2e\xd2\xcd\xb9\x61\x9a\x00\x3a\xc1\x59\xfb\x1c\x50\x27\x38\xb3\xcf\x01\x71\x74\xdd\x92\x95\x96\x0d\x68\xc6\x57\xcc\xdc\x52\x38\xdc\xa2\xdb\xdb\x06\x79\xea\xe8\x87\xc9\x6b\xd4\x34\xb7\x14\xc0\x64\x5e\xbd\x02\x2e\x28\x82\x9e\x4b\xa3\xc9\x45\x4b\xdc\xc8\xaf\xea\x85\x97\x85\xec\x85\xc2\x9d\x29\x25\x13\x1c\xa2\x96\xa4\x8e\xea\xf7\xfe\x88\x10\x9d\xb5\x84\x18\x1d\x2e\x2c\x79\x10\xac\xb5\xb0\x7e\x27\x17\x47\x1c\x58\xbe\x12\xe2\xeb\x2c\x07\x80\xb9\x25\x27\xc7\x7f\x23\x2c\x5b\x03\x64\x8d\x10\x33\x74\x46\xf1\x64\x82\x3c\xe1\x1f\x67\x02\x48\x47\xe1\x40\xa4\x6d\x0e\x79\x7b\x96\x72\x83\x56\xef\x4e\x7d\x88\x83\xd7\x9e\x6e\x02\xa3\x0d\x02\xeb\x8f\xe9\xb7\x11\xf6\x3d\x44\x4d\xe3\xe6\x77\x72\xc1\x9b\x08\xb9\xd0\x15\x37\x1d\xc4\x37\x2c\x71\xcc\xe5\x0b\x48\x31\x02\x7d\x6e\x9e\xcf\xe7\x5b\x19\x98\xe1\x56\x76\x30\x45\xa0\x35\x74\x18\x03\x01\x29\x0a\x98\x15\x9f\x46\xcd\xc3\xb3\x84\xc9\x59\xb2\x8c\xa4\x71\xa3\x26\x64\x90\xfb\x44\x37\x2d\x36\x46\x81\x51\xd2\x38\x34\x90\x39\x37\xe7\x26\xe0\x17\xe7\x83\x33\xf5\xcf\x79\x0d\xa1\xb8\xd0\x77\x23\xbe\xd1\xb7\xa6\x24\xc4\xca\x2a\x53\xd8\x00\x2e\x60\x88\xdd\x96\x47\xc9\xd4\x23\x57\x41\xf5\xa7\x77\xe6\xff\x95\x1f\xc4\x18\x07\x37\x28\x88\x26\x72\x71\x0d\x9e\xb4\xc1\x08\xb1\x41\x66\xbd\x2a\x44\x24\xa8\x9c\x0b\x74\x54\x8d\x5d\xd1\x33\xbc\x08\x19\x85\x2e\x6b\xf9\x64\x34\xca\xfb\x08\xc7\x08\x20\x97\x88\x52\xec\x89\x78\x26\x97\x4c\xa6\x11\x43\x5c\x90\x97\x2b\x41\x86\x67\x6c\x66\x25\x94\x6c\x7f\x50\x1d\xbd\xde\xe1\x6b\x1c\x24\xb4\x11\x51\x9f\x6f\x1f\x72\x15\x0e\x8c\x36\xe0\xb4\x24\x01\x33\x8d\x02\x46\x6e\x38\x09\xf8\x64\xf4\x12\x31\x77\x9c\x45\xd8\x1c\xa0\xc0\xfb\x7e\x38\x0c\x11\x1b\x08\x05\x07\x11\xd7\xc7\xb2\x59\xd9\x71\xdc\xae\xa1\x27\xef\xea\x20\xd3\x06\x07\x12\x39\x22\xa5\x6d\xf2\xc2\x56\x42\xef\x37\x84\xe2\x11\x0e\x06\x32\x9a\x4a\x57\x1d\x0c\xd0\x7c\x90\x3c\x41\x81\x97\xdc\xef\xa3\x1e\x87\x35\x75\xcc\x39\x5e\x61\x84\xc3\xc8\xf7\x7f\xa4\x7e\x01\xee\x88\xfa\xba\x3a\xf8\xf3\x39\xcd\x8e\x51\x07\xfa\x62\x5f\x25\x83\x0b\x92\xb5\x29\x27\x1b\x0f\x67\x86\xec\x04\x86\x21\x1e\x05\xc6\xcd\x1c\x08\x04\xc8\x3e\xe4\x75\xb6\x1b\x79\x67\xb1\xa7\x84\x99\xa7\xfb\x80\x78\x2f\xa2\x3e\xe0\xb2\x40\x7c\x53\x2e\xeb\x8c\xf0\x03\x57\xa0\x6a\x7e\xf6\x0e\x5b\xfc\xfa\x53\x39\x71\xf3\x4e\x44\x0e\x0e\x77\x56\x64\xfa\xbf\x87\x24\x68\x89\xcc\x17\xf1\x12\x7c\x10\x3a\xbf\x88\x86\x43\x44\x4f\xf0\x9f\x68\xd0\x6f\xb7\xc1\x04\x5e\xbf\xa4\x70\x82\xde\x61\x3e\xd6\x41\x1f\x0c\x8b\x84\x0d\xa7\x53\x14\x78\xf9\x7b\x53\x18\x85\x28\x7f\x6b\x98\x69\xa7\x0d\xc6\x30\xf0\x7c\xf4\x01\x85\x53\x12\x64\xdf\x94\x72\x18\xb2\x44\x3a\xea\x58\xfc\x12\x73\x85\x03\x97\x0a\xd5\x46\x32\x70\x3d\xd3\xa4\x6e\x02\x3e\x44\x39\xad\x99\xfb\xdf\xc8\xf5\x92\x1f\xc7\xf6\xb6\xa1\x88\x28\x0a\x91\x61\x4a\x9a\x09\x39\xeb\xcf\xb6\x08\xda\xa6\x69\x6e\x55\x3e\x53\x94\x26\x06\xcf\x09\x07\x4c\x89\xef\xcb\xe5\xc3\x60\xf8\xc9\x34\x28\x1a\xa1\x40\x8a\x64\x1f\xa2\x80\xe1\x09\xb2\x26\x90\x7e\x4a\x96\x94\x86\x14\xd9\x43\x40\x05\x94\xf1\x5a\x2e\xf9\xf0\x8a\xc2\x69\x6e\x27\xe2\x12\xe0\xd7\x5f\x9b\xe1\x15\xe6\x62\x1a\x12\x41\x7f\x0e\x92\xe1\x69\x37\x2e\x0c\x91\xd6\x1e\x64\xb1\xc7\x17\x0f\x5f\x0d\x51\x88\x2c\x97\x0b\x4a\xfe\x33\xdf\x37\x38\x85\x88\x2f\x6d\x00\x9d\x64\x45\xc8\x66\x9c\x5d\x39\x42\x31\xe3\x5c\x6c\x12\xbb\xa1\xd8\xc9\x15\x51\x99\xc6\x8d\x98\x26\x41\x6b\xd5\xbb\x25\xb5\xf2\x93\x2d\x56\xd9\x96\x80\x71\x77\xa0\xfa\xb2\xed\x2d\x2e\x4a\x7d\x92\xb7\xf7\x07\x52\x1e\x54\xc0\xed\x03\x64\xb1\xb6\xc3\x01\xe7\xa0\xd8\x26\xe0\x82\xa2\x14\x12\xf9\x13\xd5\x98\x6d\xc7\x23\x8e\x1b\xed\x02\x39\x1d\x78\x82\x48\xc4\x4c\xc5\x49\x18\x12\xd6\xc9\xc3\xf6\xa0\x83\xba\xf1\xb7\xdd\x01\xff\x57\x70\xc8\xb4\x95\x90\x91\xa9\x61\xce\xe7\x00\x09\x54\x80\xb3\x33\x1b\xec\x9f\x9f\x9b\x7c\xb4\x7c\x93\x36\x4c\x90\xc1\xeb\xca\x73\x7f\x3f\xd3\xad\x06\xdf\x69\x3c\xf6\xce\x20\xbb\x18\xe4\xbd\x26\xe8\xc8\xa0\x61\x65\x9e\x99\x96\xf5\xac\xe1\x9a\x15\x1f\x53\xe2\xfb\x38\x18\xc5\xda\x81\x15\xf9\xf2\x46\xb8\xaa\x68\xd2\xc9\xcb\x60\x0a\x4d\x0b\x5b\x22\x02\x45\xa9\x89\x24\x4c\x57\x72\x53\x26\x0f\x7e\x02\xa7\x20\x45\x8d\x9c\x16\x2e\x91\xca\x6d\x69\x5e\xc5\xce\x4b\xe1\x40\xdb\xdb\xec\x10\xed\xb0\x41\x7b\x0e\x68\x99\x58\xcf\x29\x23\x64\x70\x32\x1d\x20\x10\x85\xc8\x93\x62\xc9\x14\x51\x17\x05\x52\x46\x99\xcf\x01\x51\x7b\x85\xc2\x11\xba\x66\x9c\xdb\x25\x1c\x00\xdc\x64\xc0\x15\xdf\x47\x25\x52\x41\xb6\x58\x6b\x01\x1b\xfa\xce\xa5\xbd\x23\xfd\x44\x33\x64\xb1\x93\xdf\xa7\x85\x58\x9e\x3e\xb5\x30\x3f\x54\xe8\x3b\x62\x1a\x74\x21\x88\x2f\xec\x41\x89\xc2\x80\x73\x8a\xe7\x1c\xd7\xef\x20\x1b\x5b\x43\x9f\x08\x9e\x71\x1a\x8f\x7d\xc7\x46\xbb\xa6\x09\x02\x27\xf7\xf8\x03\x92\x39\xaf\x7e\x14\xd9\xfa\x8f\xa6\xd1\x09\xef\xc8\x3a\x25\x0c\xfa\xa7\xd8\xfd\x14\x9a\xb7\xb7\x6d\xb9\x33\xb8\xd3\x48\x9c\xa8\xd5\xb1\x3f\x83\x55\xa6\xb0\x9a\xa0\x14\x1a\x81\xe4\xa8\x14\x89\xa0\x0f\xef\xe8\xf8\x47\xbe\x72\x38\xa0\xd4\x59\xec\x55\xd6\x15\x96\x1d\x7f\x38\x39\xd9\x8a\x8f\xfc\x44\xc3\x8a\xa5\x4f\xc4\x1b\xf5\xbd\xd3\x4c\xef\x74\xc7\x6e\x77\x7a\xe2\x4f\x1e\x0e\xd9\x95\x29\x28\xfb\x14\x86\x9f\x42\x89\x3c\x7e\x48\x14\x3f\xcf\xc8\x39\xf0\xe5\xf6\x20\x1d\xcd\x87\x38\xf0\xbe\x9d\x19\xa2\xa2\xae\x0e\x88\xb9\x85\x87\x86\x2f\x3f\xc2\xa5\x18\x0f\x0b\x18\x8f\x9c\xdc\xe3\x66\x18\xf7\x6b\xd0\x8d\xe5\x80\xa3\xcc\x80\x23\xe0\x97\xe1\xda\x75\x16\xfb\x5b\xc4\xb5\x5f\x8f\x5b\xd5\x95\x9b\xe9\xca\xcd\xe0\xd6\x2f\x22\x76\x3e\x2f\x11\x89\x94\xc4\xab\xd0\xb5\x55\x31\xa7\xd4\x40\xa6\x92\x35\x16\x06\x9f\x79\xa2\xa6\x85\xd0\x17\xd0\x1d\xa7\x1b\x07\x33\x6f\x58\x75\x93\xa5\xed\x71\x36\x93\xc1\xd9\xc2\x5a\xb6\xa0\x8f\x61\x98\x5b\x8a\x49\x55\xe5\x2c\xaa\x75\x13\xe4\x71\xb0\x4e\x3b\xaa\xb2\xb6\x09\xdc\x69\xb4\x1a\x4f\x11\x3b\x5f\x22\xa4\x08\x0c\xa5\x72\x2d\xa7\xf3\x49\x19\x50\x77\x6d\x54\x4c\x42\xd3\x36\x33\x67\xb9\xb4\x15\x25\x00\x96\xf3\xbc\x14\x41\xa2\x23\xdd\xbc\xbd\x3d\x3b\x37\xad\x49\x56\x52\x08\x52\xee\x0e\xc3\x4f\x0a\x16\xde\x50\xa0\x1c\x8f\xcc\x92\xc9\x55\xcf\x1b\x4c\xdf\xc2\x9b\xb9\x09\xca\xa3\x07\x25\x38\x5e\xbc\x2f\x34\x05\x73\x13\x84\x0e\xc9\xc8\x0c\xe1\x72\x99\xc1\x27\xa3\x75\x35\x06\x8d\x0e\x60\x71\x3f\xb2\x8a\x60\xa2\xa3\xa8\x54\xe2\x11\xdf\xaf\x7c\x49\xb5\x21\x4e\x0c\xe2\xe4\x1b\x84\x25\xa2\x07\x80\x80\x02\x02\x42\xe0\xaf\x25\x84\xc8\xce\x9d\x45\x71\xa6\x4a\x0e\x61\x25\x92\x48\x94\x48\x22\x89\xce\x22\xc8\x0a\x23\x4a\xeb\x91\xd0\x23\x33\xc5\x06\x5f\x23\x98\x20\x79\x5e\x78\x09\xb1\x1f\x51\x94\x95\x53\x70\x99\x9a\xae\x08\x92\x4b\x82\x90\xf8\xc8\xba\x82\x34\x30\xf4\xb7\xdf\x7f\xa7\xbd\x7c\x71\x7a\xf4\x6a\xa0\x1d\x91\xc8\xf7\x82\xaf\x18\x7f\x23\x40\xae\x50\x07\xeb\xe9\xc1\xdd\x14\x0a\xc2\x5c\xe7\x58\xf4\x1b\x95\x8a\x30\xf2\xde\x8b\x4b\x14\x30\xe4\x81\x75\xb4\x3c\x42\xbb\x79\x8a\xae\xd9\xe0\x89\x5d\xa1\xf2\xc1\xe1\x89\x20\x04\x1c\x8c\x2a\x18\xa0\x4f\x46\xf2\x15\x44\x2d\x4e\x51\x16\x0e\x3f\x44\x41\xc0\x89\x56\xe8\x91\x8e\x09\x0e\x18\xa2\x52\xb6\xca\xbc\x2c\x6f\x8c\x11\xf4\x38\xd8\x0c\x62\x01\x3e\x89\xd8\x34\x62\x05\x16\x94\xb6\x23\xbc\xdc\xa1\xf0\x51\x83\xd8\x2f\x61\x48\xf2\xb1\xe3\x48\xce\x94\x7e\x78\x28\x7e\x8b\xfe\xd4\x86\x83\xfd\x2d\xe4\x20\x8b\x22\x11\x59\x60\xec\xfc\x63\x67\x04\xf4\x6d\x9f\x7d\xad\x9b\xe9\xcd\x6f\xc4\xcd\x11\xbf\xa9\xbc\x1b\xfc\x44\xc1\x03\x83\x10\x9f\x92\x57\x6c\xe2\x1b\x28\xd1\xb5\x4b\xd0\x95\x39\x64\xcc\x26\xfe\x09\x1c\x22\x83\x71\x86\x81\x03\xcc\x8a\xdb\xa7\x38\x37\x0b\x90\x7e\x0b\xa3\x29\xa2\x46\xdc\x51\x4c\xa3\x69\xf4\x4a\x41\x3d\x15\x4f\x9a\x6e\x6e\x31\xeb\x8a\x62\x86\x9c\xec\xd6\x29\x8d\x30\x48\x8c\xf5\x29\xdb\x8a\xad\x24\xdf\xf4\x51\x6f\x7b\xdb\x08\x9c\xc0\x0a\x23\x7e\xc6\x30\xe2\x27\xad\x3e\xea\x99\xe2\x78\x20\x34\xe5\x02\xc3\x01\xff\xcd\x28\xe6\x4b\xd5\xd0\x19\x76\x3f\xe9\x80\xf1\x3d\x36\xc1\x03\x0e\x4f\xa2\xe9\x54\x04\x6f\x1f\xa6\xca\x86\xcc\x5c\xeb\x99\x97\xd5\x72\x65\xa6\x39\xa8\x78\x97\x94\xbc\x3b\x07\xc2\x6e\x42\x66\x83\x9c\xc9\x85\x7f\x2f\x8e\x74\x20\x87\xc0\x39\x18\x11\x46\x5e\xf1\xb9\x36\xda\x00\xae\xaa\xcd\x60\x8a\xad\xf9\xf7\xa5\xce\x48\x68\x53\x4c\x1e\x80\x0d\x94\x86\xe5\xaa\xd1\x76\x4e\x97\x68\x9a\x80\x3a\x4b\xf4\x83\x30\xd6\x15\x49\xb4\xa5\x8a\x12\x83\x56\xeb\x3f\x90\xc5\x84\x11\x6e\x0e\xb0\x30\x2b\x29\xcd\x07\x71\x38\xa1\x04\x0c\x18\x4a\xb6\x4e\x18\xca\x21\xe1\x88\x0f\x2d\x0f\xb9\xc4\x43\xa6\x41\x4c\x4b\xc5\x8e\x9a\xdb\xdb\x7e\x9e\x0c\x7d\xc7\x8f\xc9\xb0\x0d\x38\xfd\x01\xff\xa9\xf3\xd5\xaf\xc1\xaf\x41\x2b\xf9\x4f\x3b\xfd\xf0\xe3\xfb\xa3\x67\xa7\x2f\x9e\x0f\xb4\x23\x1f\xbb\x9f\x34\x49\x9c\x99\x2a\x69\x48\xbb\x20\x8c\x91\x89\x46\x86\xe2\x97\x4f\x46\x5a\xda\xc0\x57\x59\x15\x99\x64\x20\x7e\xf6\x56\x91\xc1\xa4\x2a\x99\x66\x7a\x04\x41\x72\xa7\x9c\x8d\xfd\xd5\x48\x6e\x51\xe7\xfe\x28\x48\xae\x39\xc5\x65\x66\x59\x32\xb4\xea\x89\x17\xcf\xe3\x89\x6f\x37\x9d\x78\xb1\x24\xd3\x6d\xb2\xc4\xc6\x54\xd7\x1b\x88\x27\x26\xd9\x45\x45\x7b\x7c\xe4\xbc\xb3\x02\xbf\xcb\xbf\x29\xa1\x31\x81\xeb\x44\x19\x59\xd4\x5d\x2e\x8b\x06\xc4\x43\x5f\x34\x57\x0b\x9a\x2b\x8e\x94\x7f\x0b\x9d\x95\x00\xb4\x52\x5b\x15\x08\xa7\xda\x5a\x3d\x95\x40\xe2\x21\x7f\xf1\x37\xec\x39\x25\xaa\x2a\xfe\x48\x28\xa9\x36\xaf\x9b\x3a\x3a\xfe\x51\x28\x44\x8e\x48\x10\x46\x13\xe4\xdd\x8b\x2a\x4a\x9e\xec\xac\x1f\x43\xe4\x55\xe9\x25\xee\xaa\x6b\xba\x2f\x85\x48\x13\xf5\x85\x98\x1e\xaa\x54\x40\xa2\x99\xa6\x0a\x8b\x85\x2f\x27\x75\x2a\x8a\x0a\x42\x5a\x57\x39\xb1\x66\x73\xeb\x1c\xb5\x73\x67\xdb\x15\xed\x98\x8b\x47\xdf\xa6\xbe\x00\x75\xc7\xfe\xb2\x83\xf3\xa6\xac\xa1\xe5\xdc\x02\xa6\xdc\x42\x6c\x38\x97\xd0\x1f\xd8\xa8\x2b\x77\xab\xaa\x4d\x4a\x1c\xe0\x7c\x1c\x7c\x42\x9e\x61\x5a\x2a\x47\x47\xd9\x56\x54\xf8\x28\x63\x91\xbb\x93\x1d\x51\x28\x13\x00\x06\x11\x70\x81\xb7\x69\x61\x48\x59\x08\x63\x7c\x00\x92\x97\x8a\xd4\xc6\x1f\xef\xf6\xa1\x7c\xaa\x3c\x05\x62\xb9\xa5\x0f\x88\x11\xd6\xc8\x2d\x73\x60\xb4\x01\xcd\x1d\xe3\x4d\x23\x8c\x25\x98\xfe\x00\x0f\x0d\x5f\x09\x31\xe6\x8d\x6a\x73\x5f\x9a\x0e\xe7\x89\x98\x01\x2f\x68\x34\x65\x86\xae\x18\xb7\x19\x1b\x15\x17\xac\x83\x6d\xe0\x2b\x31\x29\x91\x59\xd4\x92\xc2\x71\x17\xdb\xdb\x46\xe4\x28\x93\xa7\x94\x8c\xb0\x90\x16\x94\xcb\x01\x30\x3c\x27\xca\xc8\xe6\x46\x2a\xab\x64\x3c\x38\x5c\xc5\xad\xc4\x09\xd3\xf0\x4c\x33\x91\xe2\xec\xde\x82\x91\x0e\xc6\xa0\xf4\x12\xc3\x68\xd6\x2e\x6a\xef\x36\x94\xaa\x72\xf6\x38\xd2\x60\xc1\x2b\x8f\xb4\x82\xc3\xed\x7d\x86\x38\x08\x27\xcb\x63\x4a\xae\x67\x79\xa5\xcc\xb1\x04\x46\x3c\x11\x3e\x0a\x4b\xdd\xa0\xeb\xdd\xeb\x3e\xcf\x68\x64\x6b\xf7\x30\x9c\x9c\x17\xe0\x7d\x0c\x06\xa5\x9e\x79\xd5\x03\x8b\xc7\x74\x83\xc3\x1f\x38\x40\xca\x5b\xe8\x49\x1b\x88\x36\x43\x29\x7c\xf1\xa1\xa5\x8d\x95\x2c\xf0\xd4\xe7\x4e\x7d\x86\xe6\xe6\x3c\x76\x3e\x6e\xe6\x74\x5c\x21\x4c\x57\x21\x26\xe1\x92\xcc\x40\x72\xdf\x88\x95\xec\x4e\x86\x23\xe3\xa1\xa1\x47\x81\xec\xd1\xd3\x1d\x87\xcd\xa6\x88\x0c\xb5\x0f\x68\xe8\x23\x97\xdd\xde\x3e\x51\x57\x5c\xd4\x93\x1e\xa8\xca\x37\xe5\x89\xbd\x85\x87\x46\xe1\xa9\x15\x8e\xe1\x24\xf7\x8a\x1e\xf7\x96\xb6\x2e\x48\x22\x7e\x49\x3a\xf6\x2a\x34\x71\xf9\xa7\xd2\x41\xb8\xd0\x99\xc1\x5f\x07\x67\xe7\x59\xe1\x80\x1f\xad\x9e\xb4\x95\x17\x6f\x82\xff\x27\xf6\x7c\x6e\x98\x87\x85\x16\x06\xb9\xfd\x15\xca\xed\x84\x3a\x67\x22\x64\x6b\x8b\x0a\x21\xcb\x82\xd3\xa9\x3f\x33\x28\x50\x7e\xb3\x84\x4b\x6a\xc6\x4b\xf5\xa1\x75\x81\x03\x4f\xbd\x82\x40\xc6\x7b\x16\x6e\x6f\x07\x06\x01\x30\x1d\x8e\x09\xc8\xdc\x54\xaf\x0a\x29\x3c\x71\xd5\x36\xe7\xc9\x6c\xe5\x0e\x06\x46\x10\x3b\x4d\x87\x42\xa1\x27\xdb\xf9\x7e\xb8\xe8\x91\x9d\xb0\xc4\xdf\x7e\x13\xbd\xfd\xf6\x9b\xc3\x00\x9a\x9b\xe2\xe9\x7c\x43\x8e\xe8\xb1\x21\x36\x28\x38\xa3\x03\x28\x84\x57\xe9\x3c\x1e\x7c\x63\x1f\x06\x2d\x7b\xd0\x36\x81\xef\xd8\x5f\xfb\xff\x08\xbe\xf6\x9f\x3e\x35\xe1\x99\xdf\xb2\xcf\x33\xae\xea\xfe\xb9\xd2\x8e\x33\xe9\x7d\x0e\x60\x82\x3a\x6c\x4d\xe0\xf5\x5b\xd1\xb4\x83\x00\xb6\x7e\xf3\xf1\x04\xe7\xc8\x36\x63\x45\x52\x2a\xc8\xd8\xdb\x49\x7e\xb6\x85\xbe\x69\x6f\x6f\xcb\x5d\x69\xea\x63\x17\x19\x6d\x80\xcc\x39\xc0\x62\x46\xb3\x2d\xc5\xa3\x42\xc5\x51\xb1\xcc\xa8\x10\x3f\x8f\xb4\xbf\x0e\xfe\x81\xbe\x0e\x9e\x3e\x35\xd9\x59\x90\x1d\x4b\x70\x9e\xc8\x1c\x6a\x7e\x85\xdb\x0c\x8b\x15\x8c\x02\xfe\x58\xdd\x28\x5b\xe7\xb0\x48\xd0\xee\x03\x1a\x79\xd6\x24\x79\x60\xb6\xb2\xe2\x57\x02\x13\xe4\x90\xe0\x20\x44\x94\x3d\x63\xf7\x07\x4b\xd8\x04\x16\xe9\x59\xc6\x9b\x3d\x92\x6e\xcb\xcf\xb1\x77\x34\x86\xc1\x08\xc5\x80\x46\x41\x38\xc6\xc3\x1c\x9c\xa9\x0b\xbd\x72\x9f\x3f\x82\x41\x40\x98\xa6\x5e\xd5\x48\xc0\x88\x06\xb5\x0f\x92\x6d\x0a\xa0\x75\x4e\x0a\x73\x05\x99\x8c\x7d\x48\x56\x29\xa0\x0e\x14\x54\x02\x88\x03\xd5\x14\x81\x70\xf1\xad\x04\x63\xcb\xf9\xf5\x82\x5d\x6d\xc5\x63\x45\xdc\x8a\xc8\x91\x2c\x85\xb1\x06\x76\xb7\xfb\x3a\x7c\x00\x92\xd9\x58\xc2\x1c\xf3\x69\x1e\x51\x82\xca\x22\x4a\x9e\xdc\x57\x4c\x89\xea\x78\xeb\xaf\x1d\x5a\x22\xf0\x78\x8f\x91\x25\x77\xd9\x44\x32\xb2\x95\x3a\xa3\x95\x4a\x58\x34\x3d\x7a\x52\x91\x74\x59\xaa\xaa\x0a\x8e\xda\x0b\xfa\x81\xa2\x91\x52\x26\xf7\xe1\x50\xcc\xcd\x06\x07\xd7\x9a\xf3\x6a\x66\x9b\x91\x20\x6d\xa5\x0a\xbb\xd8\x9d\x34\x66\x5b\x1b\x3c\xcf\x32\x40\xd3\xd3\xec\xbd\x7a\xc8\xe6\xcf\xaa\x74\x41\xdd\xaf\x8e\x62\x3d\x40\x0d\x56\x72\x76\x95\xc2\x32\x12\xa5\x69\xac\x11\x62\x1f\x04\x8a\x0c\xe1\x15\xe5\x2d\x58\x75\x13\x8f\xe6\x2d\x96\xe0\x4d\x9c\x79\xc9\xc2\x99\x97\xc5\x67\xde\x5e\xe9\x99\x77\xaf\xd9\x99\x77\x2f\x63\x25\x94\x33\x27\x14\xf8\x98\xaf\xfa\xc8\xd1\x75\xe0\x8a\x1d\x2c\xd1\x8d\x26\x56\x1b\x3c\xe4\xeb\x33\x3e\x83\xee\x2e\xf6\x16\x9f\x5e\x7d\x41\x0f\x46\x0d\x52\xc4\x4a\x00\x81\x83\x04\x9b\xe0\x28\xc1\x4e\x00\x5a\xf6\x13\xc7\x31\xa2\xa7\x8e\xab\x0e\xd6\x06\x03\x37\x92\x79\x2b\x67\x62\x11\x49\xf4\xfd\xd0\xd0\xe7\xba\x19\x8b\xa3\xa1\x11\x59\x22\xc9\x90\xb1\x63\x58\xff\xf9\xeb\xdc\x34\xac\xff\x34\xff\xe7\x8e\x09\xba\x26\x20\x0e\x3d\xb3\xcf\x81\xef\xd0\xb3\xce\xf9\x56\xe4\xf8\x62\x9d\x4d\x1c\x61\x4e\x4a\xcd\x1a\x60\xea\x4c\xe2\xc3\xfb\xd0\x99\xc4\x67\xf7\xad\xe1\xf6\xb6\xe1\x15\x4e\xee\x53\x13\x78\xea\xd8\x3e\x34\xcd\xf9\xbc\x78\x3a\x5f\xf7\x78\x6e\x51\x44\xa6\x28\x38\xe2\xfb\x0c\x3f\x53\x25\x26\xe0\xc1\x13\xe3\xc9\x95\xc8\x6c\x69\x71\x3a\xe2\x1c\x48\x1a\x2c\x6e\x6f\x0d\xdf\xd9\x49\x24\x76\x42\x77\xb0\xf0\xe6\x35\xd4\xdb\xaf\x4e\xdf\xbd\x7d\xe1\x0b\x07\x79\x13\x44\x4e\xdc\x48\x08\x87\x90\xe2\xdb\xdb\x24\x48\x32\x77\x7f\x7b\x3b\xf7\x53\x30\xf0\xf7\x99\x24\x59\x00\x3b\xc9\x86\x73\x22\x5e\xf9\x80\x26\x84\xa1\xec\x3b\x62\xff\x89\x92\x0d\xc7\x30\x81\x7f\x7b\x8b\x17\x74\x10\x0d\x6c\x2a\xf9\x9d\xfd\xbe\x0f\xed\x6a\xdc\xa7\xe8\x9a\x3d\x97\x7d\x2e\xec\x1a\x38\xb6\x86\x95\x0a\xff\xcc\x11\x21\xa5\x5d\x2e\xef\x59\x17\x33\x86\xa4\xbc\x2d\x45\xbf\xa7\x8e\xda\x7b\x87\x94\x4c\x8e\xc6\x90\x1e\x71\x0a\x47\x67\xc1\x79\x2a\xef\x09\x6f\x95\x15\xb4\x00\xd7\x63\xda\x52\xc9\x17\x1b\x9d\x74\x59\xf6\xa0\xc2\xc5\x52\xa6\x76\x62\x01\xa2\x54\x17\x3a\x5c\x48\xdd\x82\x56\x1a\xe9\xe5\x64\x7f\xdc\xde\x3e\xb1\x01\xe4\x87\xc4\x21\x1e\x45\xf2\xf9\x93\x76\x9c\x10\x12\x8b\xa3\x9d\x01\xc5\xfa\x50\xcf\xaa\xe3\xca\xa0\xf5\x09\xf1\xa3\xcd\x7c\x43\x1b\x68\x90\x93\xd0\xb3\x1b\x87\x51\x22\x52\xa5\x9b\x38\x19\x6a\xcc\x34\x4b\x65\x02\x25\x2e\x73\x79\x49\x83\x9a\xc0\xbb\x06\x43\x0d\x26\x12\x9d\x6e\xce\xa5\x82\x9d\x1f\xa1\x04\x10\x5c\x14\x8c\x67\x34\x70\x10\x30\xa0\x73\x76\xf3\x09\xcd\x06\xba\x0b\xa7\x5c\x92\xd0\xa5\x76\x24\x67\xfb\x91\xa2\xfe\xf5\x98\x3a\x68\x3e\x07\xf2\x75\x78\x41\x28\x2b\xbc\x9c\x79\x57\x1d\xe2\xf8\xa5\x25\x5e\xe6\x1c\xe5\xdc\xdc\xde\x66\x5c\xec\x4a\x64\x76\x68\x02\x2a\xee\x01\x6a\x02\x34\x37\xcc\x86\x2a\x15\xe2\xa1\xb0\x35\x24\xb4\x25\xe2\x39\x3e\x53\x2c\xf7\x19\xb2\x78\xc7\xe7\x5b\x2a\xda\x27\xe4\xc2\x84\xbc\x2a\xba\xb2\x72\xc4\x49\xf9\x52\xda\x30\x23\xce\x48\xb7\x52\xad\x12\x99\x4c\xa1\xcb\x0c\xd3\x8a\x02\xfc\x87\xb1\xe0\x16\x99\xe8\x3f\x74\xfd\x29\x9a\x9b\x35\x61\x9a\x62\x13\xce\x1f\x4e\xd4\xad\xf4\x4d\xb9\x20\x76\x50\x70\x89\x29\x09\x4a\xe2\xf1\x37\x19\xaa\xa5\x4f\x29\xf1\x22\x49\x7f\x4f\x9c\x8c\xdf\x41\xa6\xfb\xed\xed\xe4\xf6\x59\x7c\x96\xf2\x71\x6b\x82\x65\xee\xe3\xed\xed\x27\x76\xf6\xd3\xb2\x77\x2c\x14\xf0\x35\xec\x01\xea\xe4\x02\x45\x6e\x6f\xe1\x61\x62\x5e\x1a\x28\xa6\x29\x30\x72\x7b\x5b\x96\x2c\x80\xd6\xa0\x56\x64\xfd\x6e\x79\x11\x55\xde\xb0\x59\x24\x4f\x88\xcc\x89\xa0\x40\xc3\x81\x50\x50\x91\x0d\x19\xbd\x0b\x34\x18\x8b\xb4\x85\x74\x02\xed\xd2\x74\x02\xed\x6c\x3a\x81\xf6\xf9\xa0\x0d\x8a\xca\x9f\xa6\x99\x08\x82\x50\xe7\x27\xea\xc5\xaf\x3b\xa5\x5f\x77\xce\xb7\xb7\xb3\xbf\x40\xe8\xdc\xcc\xb7\x78\x1b\x8e\xe3\x04\x87\x46\x68\x05\x30\x20\x21\x72\x49\xe0\x85\x0e\xfa\x0f\x61\xa2\xb2\x26\xd8\xa5\xc9\xcd\xac\xf1\xf8\x3f\x6c\xb4\xbb\x63\xa3\xae\x09\x50\xee\xbe\xb4\x34\x0f\xf4\xc9\x44\x36\xbc\xbd\x6d\x2c\xb4\x22\x9b\x2e\x7c\xd5\x35\xa5\x2e\xd0\x77\x02\x01\xd5\x13\xf1\xb1\x68\x87\x5f\x0a\x99\x45\x9f\x84\xca\xfb\x0f\xa7\xf9\x25\xac\x98\x0c\x0c\x04\x7c\x73\x0b\x5a\x43\xec\x33\x44\xbf\x9d\x19\x3a\x0e\xde\x49\x62\x10\x8b\x98\xdf\x91\x9e\xcb\xa5\x3c\x21\x3c\x43\xe7\x0e\x3e\x43\xe7\x46\x6c\xbe\x8e\x1c\x68\x51\xe4\x45\x2e\x2a\xee\x04\xe1\x19\x13\xb1\xe5\xe7\xb1\x73\x5f\x72\x63\x0b\x49\xe6\x42\x8d\x00\x30\x40\x4c\x73\x9e\x5a\xa4\xce\xce\x85\x28\x1f\xa9\xa9\x32\x13\xdf\xd9\xdf\x09\x0e\x0c\x5d\xd3\x13\x3e\x44\x85\xb4\x19\x47\x47\x84\xd1\x70\x88\xaf\x85\x0b\x20\x31\x63\x2d\xcb\xd9\x4d\x20\x12\xc0\xcc\x10\xa4\xa1\x0e\xe4\x3b\xf2\xa7\x0e\xe2\xa1\x0f\x9e\xb4\xc1\xd4\x8f\x28\xf4\xf1\x9f\x2a\x00\x7b\x0e\xd4\x87\x13\x12\xb0\x71\xe6\x4b\xf1\xbb\xd9\xa7\x1e\x9c\x65\x3e\xf4\xe0\xac\xd9\x67\x63\x12\x65\x41\x1d\xeb\xc0\x27\xc1\xe8\x24\xfe\x49\xa2\x5a\xc8\xed\x14\x72\x1c\x44\x0c\x65\x41\xcf\xb7\x24\x9f\x37\x6b\x4b\xd1\x65\xda\x56\x98\x6f\x4b\x3e\x6f\x0a\x97\xef\xe3\x42\x83\x93\xb0\xe9\xd7\xe9\x32\x49\xbf\xfe\xbf\xff\x27\xf7\xb9\x5d\xf9\x79\x66\xfd\xa6\x5f\x07\x4b\x3e\x3e\x07\x0b\x6e\xdf\xb1\xc6\x7e\x8b\x3a\x70\x7b\x9b\x59\x29\x2a\x0e\x6d\xc7\x71\xd0\x61\xf6\xd6\x40\x18\x34\xe3\x36\xf9\x59\x33\xf3\xd0\x1c\xf0\xbd\x02\xf1\x46\xb2\xbd\x1e\x16\xbf\x09\xd5\xfb\xf1\x95\x32\x0a\xe4\xbf\xbb\xbd\x5d\x80\xa7\x10\x87\x8d\x12\x4f\x37\x72\xa8\x6b\xfa\x40\x4f\x5d\xdf\x68\xdd\x4e\x8d\xa7\xad\x29\x14\x9b\xc7\x67\x11\x56\xd0\x61\x92\x3b\x66\xa0\x9b\x83\xb3\x44\xd3\xdd\x76\x1c\x27\x96\xad\x0f\x6f\x54\xbd\xe9\x01\x02\x1c\xa2\x81\x64\xe9\xf3\x41\xa7\xf4\x25\x76\xd6\x3e\x97\xef\xb1\x33\xfb\x7c\x3e\x40\xd2\x79\x2d\xfc\x09\xb3\xb1\xa1\x9f\xe9\x66\xe6\x55\x2b\x54\xea\xfb\xb8\x99\x96\x6d\x2a\x06\x34\xd0\xcd\xb8\x95\xf4\xe1\xf9\x7c\x50\x01\x4c\x0d\x4e\x8b\x31\xe8\xa5\x6a\xda\xe9\xfd\x65\x54\xaa\x0b\x11\x48\x63\x1b\x02\x8b\x7c\x3a\x0c\x2c\x0e\xae\x61\xc6\xde\xfa\xd3\x99\x69\x20\xf0\xa4\x6d\xe6\x8e\x56\x35\x52\x6f\x5c\xda\x8c\x9f\xd2\x5a\xd0\x83\x53\x86\x3e\x97\x00\x9c\x86\xb8\x87\x89\x42\x38\x16\x7d\xd5\xa6\xe7\x21\xe9\xe1\xa8\x26\xf9\xd7\xe0\x57\x7e\x00\xa9\x1e\x4d\x40\x5a\xbe\xd0\xf0\x14\x87\x00\xf4\xff\x4a\xf3\x4b\xed\xa8\x91\xee\xc8\xd7\x36\x38\x91\xc8\x7a\xff\xfd\x6f\x6f\x5f\x3c\x7b\xfe\xe2\x43\x3c\xa9\xd9\x5b\xfa\x7b\xa2\xb9\xb2\xe0\x8d\x26\x21\xd5\x17\xb3\x4e\x25\x46\x66\x35\x35\x83\x92\x6f\xe6\x0d\xcf\x34\x22\xd7\xf7\xec\x33\xcd\xe7\x22\xa9\x0a\x45\x9d\xaa\xe0\xe0\x23\xfa\x92\x9f\x2f\xe1\x74\xea\x2b\x95\x89\x6e\x2a\x55\x93\x04\x8e\x99\x75\x8b\x52\x0d\x64\x48\xe8\x05\xf6\x3c\x14\xd4\x7b\x9a\x2e\x9c\xe4\x36\x38\xbd\x4b\x96\xa6\x38\x68\xe7\x7c\xd1\x02\xd3\xc2\x81\xeb\x47\x1e\x0a\x0d\xbd\xd7\xee\xea\xc9\xc1\x7b\x4b\x85\x48\xe0\xf0\x65\x3a\x2a\xb1\x72\xab\xd1\x30\x4d\xe2\x38\x64\xc9\x97\x56\x5c\xdb\xe5\x7e\xe7\xb6\xda\x3f\xf6\x66\x21\x25\x8e\xa4\x65\x75\x44\xca\x56\xa5\xb1\x46\x88\xbd\x66\x68\x92\x09\x73\x09\x0e\xdf\x9c\x7c\xff\xde\x9a\x42\x1a\x22\x23\x30\x07\x6c\x0e\xc2\x6c\x6b\xd9\x40\xae\xb2\x16\xc3\xb8\x45\x20\xda\x49\x7d\xd0\x03\xd3\x04\xc1\xbc\xf6\x88\x9b\x41\x64\x38\x26\x94\xb5\xa2\x08\x7b\x9f\x6b\x85\x34\xf0\x31\xce\x78\x10\xc7\x3b\x6e\x4b\x37\xcf\xda\xe7\x8d\x47\xc5\x66\x3e\x4a\x42\xff\x1e\x7e\x5c\xf9\x78\x24\x69\x28\xd6\xf5\x44\x77\x21\x62\x89\x14\x34\x9f\xd0\x2c\x34\x98\x59\x72\x80\x09\x72\x3a\xbb\x64\xcf\x10\x87\x96\xe0\xa9\x3e\xd0\x9f\x1a\xba\xac\xbb\x9e\xfa\x97\xc0\x43\x68\x31\xf2\x12\x5f\x23\xcf\xe8\x98\x4f\xf5\xe9\xb5\x3e\x80\xa6\x09\xe4\x99\x46\x6d\x2c\x5f\xeb\x9c\x64\xd2\x58\x2b\xb3\x31\x9a\xa3\x49\x0b\x8e\x46\x14\x8d\x0a\xe7\xf9\xcf\xba\x0e\x33\xa2\x24\xd0\xad\xff\x42\xd0\x1d\x5b\x7a\x26\xc9\xdb\x12\x12\x93\xdb\x6d\x29\xce\x33\x1e\x25\x4f\xd9\x1c\xb4\x25\x6a\x8a\xd9\x1d\x0b\xa8\xb9\x82\x05\x2d\x52\x03\x13\xf7\x15\xc4\x35\xc9\xe0\x32\x0a\xe0\x95\x54\x51\xd2\xe7\x29\x51\x91\x92\x94\x68\x0d\xe2\x94\x38\x25\x49\x8b\xef\xf6\xb6\xca\x2b\xbc\xf8\x20\x31\x05\x1f\x96\x79\x77\xc9\x37\xd1\x7c\x50\xe6\xdb\xb9\xbd\x5d\xd3\x1d\xb2\x32\xa6\x0d\xc7\x71\x92\xfb\x4f\xe2\xeb\x54\xcd\x79\x18\xc3\x36\x48\x3a\x14\x91\xc5\x6b\x10\x9a\x98\x29\x99\x34\xbe\x64\x59\xaf\x62\xb4\xe4\xc7\x95\x9b\xc4\xb6\x9b\xea\x70\x1a\x9b\x2c\xd9\xa2\xc9\x92\x49\x93\x25\xcb\x9b\x2c\x7d\x27\x2a\xd3\x38\x45\x67\xf6\xf9\x21\xff\x33\xe8\xa0\x2e\x90\x59\x18\x52\x27\x66\x5d\xf9\x42\x3a\x8e\x43\x0c\x6a\x6e\x6f\x1b\xb1\x9e\x8f\xaf\x02\x2a\xd2\x25\x9b\x49\xea\x17\xbe\x95\x87\xb7\xb7\x39\x45\xa0\x79\xc3\x94\xc9\xeb\x20\x6f\x0c\x54\x50\xf6\x80\x7a\xbe\x07\xe4\x77\x1f\x4e\x3e\x1e\x5b\xd0\xf7\x8d\xb3\x38\x7c\x89\x22\xa1\x1a\x91\xd8\x36\x10\xa0\xe0\x86\x22\x9f\x40\x8f\x1f\xaf\x95\x54\xfa\xbd\xc8\xa3\x1e\x0e\x6e\xc4\xc4\x88\x07\x17\x84\x32\x59\x55\x03\x73\xc6\x94\x4f\x40\xe4\x9b\xe7\xa9\xa9\x33\x36\x4b\x66\x6d\x72\x07\x83\x3c\x9c\x07\x7c\x46\xdb\x0e\x53\xb9\x84\x7a\x66\x0c\xb7\xdd\x15\x4f\x92\x74\x40\xc9\x67\xb1\x65\x55\x34\xaa\x03\xfb\x20\xb5\x02\xe6\x9b\xb6\x7b\x00\xc7\xca\x79\xc0\xf8\x58\x71\x38\x36\xec\x5e\xfc\x7e\x02\x61\x37\x67\x34\x3c\x28\x1a\x0d\x59\x6a\x34\x64\x71\xe6\xa1\x1e\x38\x00\x76\x0f\xd8\x7b\xb9\xfc\x43\xf3\x94\x86\x7d\xc1\x86\xc3\x31\x9e\x6e\x8a\x92\x09\xf0\x01\xbe\x3f\x4a\x26\x0e\x2e\xa3\x64\xcc\x29\x19\xc7\x94\xec\xe7\x29\x39\xce\x58\x54\x4f\xa2\xfb\xa5\x24\xda\x8d\xa7\x7a\xb7\x8e\x44\x15\x21\x72\x91\x9d\x66\x79\x92\x25\xf2\xf2\xbe\x87\x13\xc4\xb7\x0a\x4e\xb6\x59\x94\x1b\x14\x20\x50\x4a\xb4\x7e\x81\x66\x49\x42\xb3\xbb\x09\xcd\x76\xf3\xe9\xaf\xf2\x80\xef\xe7\x69\xb6\x9b\xd2\x6c\x27\x4b\xb3\x9d\x6a\x9a\xdd\x37\x8b\x74\x2d\x69\xb6\x0b\xfc\x12\x9a\x4d\xd2\x62\x25\x10\x76\x72\x34\xbb\xdf\x8c\x66\xbb\x60\x1f\xd8\x5d\x60\xef\x96\xd3\xec\x33\xdf\xbf\x33\xa9\x2a\xc5\x17\x20\xc0\xbf\x3f\x4a\xa5\x8e\x5f\x66\x20\xf0\xcf\xda\xe7\x87\xfc\x8f\xa0\x54\xf2\xb9\x29\x95\x33\xd3\x67\xbe\x6f\xa0\x55\xf9\x28\x29\xf2\x51\xfa\xb8\x68\x92\x7c\x76\x9a\x94\xa9\x80\x1d\x61\x29\x4b\xc3\xed\x9f\x1d\x1f\x5b\xa2\xd0\x02\x0e\x46\x3f\x44\x88\x62\x54\x13\x3d\xf5\xc7\xb4\x15\x22\x8a\x85\x82\x74\xc3\xd2\x70\xd2\xae\x97\x3a\xdf\x3b\xb9\x07\xc2\x41\x28\xbe\x4e\xb4\x2f\xe9\xad\xd2\x20\x61\xa5\x90\x5c\x38\x43\x22\x73\xa0\xeb\x73\xe5\x27\x91\x33\xc0\xa6\x0e\xea\x99\xe3\xab\x50\xe0\xc6\xd6\xd7\x2b\xcc\xc6\x24\x62\x86\xae\x9b\xca\xcd\x2f\x11\xa2\xcf\xce\x95\x62\x2e\x05\x8a\x6d\x55\x0e\x6e\xcd\xb3\xa3\x91\x11\xed\xeb\x4f\x32\x14\x4d\xc8\x25\x6a\x51\x55\x30\xe8\xde\x0f\x2f\xb1\xdf\xe5\x16\xb3\xf8\x11\x25\xb7\x79\x14\xdf\x84\x0e\xb3\x3e\xe1\xc0\xdb\x52\x4e\x95\xc2\x4d\x00\x01\x7e\x6b\x00\xe7\x32\x55\x97\x7c\x20\x4a\x4a\xdc\x60\x6f\xc0\x64\xe8\xa9\x48\x8d\xc6\xe5\xe2\x01\x2b\xdf\xbe\x00\xcd\x74\x1d\x0e\x82\xfa\x83\xcf\x99\x38\x94\x9e\x3b\xb2\x1f\x7d\x0c\xc3\x77\x30\x98\x89\x0c\x21\x02\xc0\xc3\xb3\x73\x19\xfa\xc1\x4f\x95\x37\x12\xe3\xc8\x8a\x02\xb9\x41\x0a\x49\x8f\xd5\x4d\xc3\x82\xc7\xee\x46\xa7\xa1\xe0\xbd\x13\x3b\xa5\x25\xf9\x49\x7e\x9d\xff\x7a\xb3\x33\x02\xfa\xfc\xd7\xe0\x46\x4f\xd4\x0d\xbf\x06\x7a\x8e\x92\x2b\x9c\x09\xf2\x8b\x60\x6e\x2a\x1b\x66\x79\x3c\xfe\x73\xc8\xe0\x5c\xd8\x11\xd9\x82\x1d\x91\x95\x1a\x36\x73\x1f\xc6\x5a\x25\xc8\xc8\x85\x21\x6f\x71\x12\xb8\x51\x69\x05\x72\x7a\x7f\x4b\x3a\xaf\x81\x58\x85\xca\x62\x85\x32\xff\x2a\x51\x27\xeb\xe6\x7c\x2b\xc9\x65\x53\x37\x3b\x33\x1f\x8d\x22\xec\xa1\x1d\xe5\x87\xd0\x9a\x20\x06\x39\x2d\xdc\xa7\x8b\x56\x7a\x23\x36\x97\xbe\xe7\x70\xe9\xc0\x87\xc1\x68\xa0\x8f\x08\xff\x57\x07\x1e\x0a\x5d\xf5\x48\xc3\xc2\x53\xc7\x47\xd7\xf8\xc2\x47\x40\x13\x65\xcc\xa6\x14\x87\xa8\x35\xa2\xd0\x43\x89\x16\x39\x74\xc7\x88\x43\x40\x35\x0f\x85\x78\x14\xc8\x32\x89\x08\x86\xd8\x9f\x69\x38\x60\x68\x44\x21\x43\xfc\x8a\xa4\x75\x0c\xaf\x08\xfd\x34\xf4\xc9\x55\x68\x69\xb2\x37\x17\x06\x1a\x8d\x02\x0d\x6a\x1e\xbe\x44\x34\x44\xe2\x15\x4e\xf3\x1a\x19\x6a\xc2\x24\xc8\xf7\x82\x4b\xec\x22\xa0\x5d\x70\x3e\x08\x34\x97\x04\x0c\xe2\x00\xc9\x0a\x9c\x30\xf0\x84\x9b\xf1\xc2\xdd\x54\x47\x1c\x5a\x3a\x10\xa5\x63\x92\xca\xd8\x57\x57\x57\x96\x98\x9f\x29\x25\x02\xc3\x98\xec\xe8\x89\x21\xf1\x14\x51\x0a\x87\x84\x4e\xca\xb1\x94\x3c\x96\x98\x62\x84\xf8\xa2\x0a\xe8\x45\x84\x7d\x0f\x07\x23\xa0\xb9\x63\x18\x8c\xc4\x15\x87\xcd\x25\x93\x0b\x1c\xf0\xc1\xe3\x60\x48\x61\xea\x1b\x1d\xc2\x21\xf2\x67\xe2\x1d\x34\x1c\x62\x17\xa3\x80\xf9\xb3\x52\x60\x59\xdc\x67\x1e\xd2\x8f\xd2\xb2\x54\x06\xe5\xb3\x14\x30\x59\xf5\x2f\xcc\x14\x99\xe3\xb3\xea\xd2\x99\x90\x6c\xa4\x67\x56\x82\x62\x0e\xcd\x94\xe2\x4b\xec\xa3\x11\x4a\xea\xce\x67\xca\xef\x95\x40\x77\xc9\xc1\x28\x45\xa5\x08\xad\xf7\xcb\x21\x94\xcf\x24\x12\x3d\xcc\x37\xcd\x8b\x48\x14\xc2\x1f\xe3\xd1\x98\xe3\xe5\x12\x62\x1f\x0a\x1a\xe4\x40\xf1\x95\xa2\xc9\xa2\x7a\x1a\xbc\x12\x95\xd1\x89\x1f\x49\xd9\x95\x24\x99\xac\x24\xc2\xa5\x9b\x1d\xca\x11\x41\x5c\x90\xdc\x9b\x05\x70\x82\x5d\x90\xed\x73\x61\x66\x4a\xa7\xc0\x15\xe0\x2e\xe2\x7f\x44\x61\x90\xcc\x00\x8d\x2e\x66\xf1\xe8\xd4\xa3\x0a\x1a\x91\x23\x8a\x01\xe0\x37\x54\xb1\x76\x51\x02\x30\xa3\x84\x2a\xa7\xdd\x4b\xd9\x78\x34\xe5\x7b\x78\x06\x9e\x63\x95\x40\xa3\x0c\xdd\xf2\xd9\x02\x3c\x22\x84\x50\x90\xa6\x27\x6b\x9b\xfa\xda\x04\xba\x63\x1c\x20\x4d\xd4\x56\x92\x55\xff\x27\x91\xcf\xf0\xd4\x47\xda\xd4\x87\x4c\xd4\x4f\xd1\x86\x94\x4c\x38\xd9\xe0\x60\xe4\xf3\x99\x88\xa8\x8b\x12\xc4\xcb\x2c\x7b\x65\x80\x4f\x05\x10\x12\x89\xe7\xd5\xcc\x52\x45\xf1\x7e\x2e\x95\xb3\x88\xf4\x49\x4f\x07\x2a\xcc\xd4\xc8\xdb\x10\x42\xc4\x4e\x25\x58\xd9\x00\x81\xc0\xd0\xd5\x5d\xce\xae\xb2\xfa\xd3\x49\xa8\xa1\x6b\x17\x21\x0f\x89\xe4\x15\x00\xd5\x0b\x51\xa2\x7c\xe6\x82\xb8\x0b\x32\xee\x65\x52\xa8\x6c\x8d\x91\x3f\x45\x34\x5c\xfc\xe8\xdf\xab\x8a\x81\x54\xcf\x3e\x92\xb9\xad\x9a\x59\x66\xe8\x3f\x41\xcc\x99\x43\x7e\x56\xeb\x27\xb3\x44\x8d\xbc\x10\x4e\xca\x45\x7f\x95\x21\xae\xf6\x2b\xe6\x78\xc4\x15\x87\x70\x4b\xc4\x2d\x9f\x20\xe9\xc7\x67\x7c\xc5\xe5\x86\x33\xbe\xe0\x1d\xfd\xab\xa7\xe8\xe9\x57\xfa\xf9\x57\x26\x97\x58\x9f\x31\xc5\xcf\x8c\xa4\x62\xa4\x09\x02\xe7\x26\xf6\x39\xcc\x08\x59\x52\xa2\xfb\xf1\xc3\xeb\x23\x32\x99\x92\x00\x05\x4c\x24\x37\x8b\x4f\xfb\xe5\x53\x10\x54\x4f\x41\xa0\x8e\x28\xb0\x18\x3c\xf7\x95\xc8\x36\x28\xca\x1a\x53\x04\x63\xee\x2c\x19\x08\x1f\x89\xc6\xe0\x48\x16\x87\xe7\x43\xd2\xd4\x90\xac\xaf\x04\x7e\xa9\x8c\xf5\x38\x45\x21\x0b\x6f\x6f\x29\xfa\x23\xc2\x34\x8b\x6e\x38\x9d\xea\x66\xa1\x08\xc9\xc2\x39\x93\x93\xab\xf4\xce\x3c\x71\x51\x00\x29\x26\x03\x3d\x9c\x40\xdf\x3f\x92\x92\x8c\xae\x9e\xfe\x84\xd9\x38\x29\xa5\x92\xf9\x8a\xdf\x17\xc7\xfd\x85\x7b\x1f\xd0\x48\x68\x06\x38\x06\xb6\xfe\x7f\x00\x00\x00\xff\xff\x6b\xc8\xf9\x3e\x8d\x9d\x08\x00") -func distAssetsNomadUi80bd290f31e717fefbf81265e9fd5591CssBytes() ([]byte, error) { +func distAssetsNomadUiE485eabcbd50a177816ec937c7214bf8JsBytes() ([]byte, error) { return bindataRead( - _distAssetsNomadUi80bd290f31e717fefbf81265e9fd5591Css, - "dist/assets/nomad-ui-80bd290f31e717fefbf81265e9fd5591.css", + _distAssetsNomadUiE485eabcbd50a177816ec937c7214bf8Js, + "dist/assets/nomad-ui-e485eabcbd50a177816ec937c7214bf8.js", ) } -func distAssetsNomadUi80bd290f31e717fefbf81265e9fd5591Css() (*asset, error) { - bytes, err := distAssetsNomadUi80bd290f31e717fefbf81265e9fd5591CssBytes() +func distAssetsNomadUiE485eabcbd50a177816ec937c7214bf8Js() (*asset, error) { + bytes, err := distAssetsNomadUiE485eabcbd50a177816ec937c7214bf8JsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "dist/assets/nomad-ui-80bd290f31e717fefbf81265e9fd5591.css", size: 211349, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} + info := bindataFileInfo{name: "dist/assets/nomad-ui-e485eabcbd50a177816ec937c7214bf8.js", size: 564621, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _distAssetsNomadUiB1d9a065040a9f727f900c02bfb30b88Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x77\xdb\x38\x92\x28\xfe\xbf\x3f\x85\xcc\xbd\xe3\x1f\xb9\x81\x68\x4a\x7e\xc4\x66\xaf\x26\x9b\x8e\x93\xe9\xf4\xe6\xb5\xb6\x7b\xe6\xee\xf1\xe8\xcc\x81\x48\x48\x42\x4c\x01\x6a\x00\xb2\xad\xb6\x75\x3f\xfb\xef\xe0\x41\x10\x7c\xe8\xe5\xbc\x67\xa7\xe7\x4c\x2c\x92\x40\x01\x55\x28\x00\x55\x85\x42\x95\x37\xe3\xa8\xc5\x05\xc3\x89\xf0\x76\x52\x34\xc4\x04\xf9\x1e\xa1\x13\x98\xb6\x67\x78\x1f\xa6\x70\x2a\x10\xe3\xfb\x70\x84\x88\xf0\xc0\x95\x87\xee\xa6\x94\x09\xee\x81\xa6\x42\xd3\x69\x86\x13\x28\x30\x25\x5e\x1f\x0c\x67\x24\x91\x3f\x7d\x04\x44\x70\x9f\x3f\xb5\x88\x8f\x82\x7b\x86\xc4\x8c\x91\x56\x51\x24\xb8\xc7\x43\xff\x39\x63\x70\x1e\x62\xae\xfe\xfa\x28\x08\xee\x87\x94\xf9\x37\x90\xb5\x44\x2f\x02\xa4\x47\xd0\x6d\xcb\x7c\x0b\x33\x44\x46\x62\x1c\xfc\x24\xfe\x23\xff\xfd\x93\x78\xf2\x24\x20\x57\xa2\xdf\x43\x57\xa2\xbf\x63\x9a\x20\x8b\x85\x8f\x82\x87\x87\x4a\x53\x17\xf3\xc9\x80\x66\x21\x16\x88\x41\x41\x59\x0b\x93\xd6\xfb\xc1\x47\x94\x08\x55\xd8\xbb\xa2\xea\xa1\xf5\x9c\x8d\x66\x13\x44\x04\xef\x7b\xbd\x5e\x4f\x97\x08\xa7\x8c\x0a\x2a\xe6\x53\x14\x0a\x7a\x21\x18\x26\xa3\x30\x81\x59\x26\x3b\x6c\x1a\xd5\x88\x0c\x19\x9d\xf8\x28\xa8\xb4\x1f\xdc\x8b\x31\xa3\xb7\x2d\x89\xcc\xe5\x7c\x8a\x5e\x32\x46\x99\xef\xbd\x26\x37\x30\xc3\x69\x0b\x0a\x81\x26\x53\xd1\x12\xb4\xc5\xa7\x0c\xc1\xb4\x45\x28\x69\xab\x7e\x0e\x32\xd4\xc2\x84\x0b\x48\x12\xe4\x05\x0b\x3f\x58\x98\x0e\xe9\x61\xfb\xc0\xe8\x14\x31\x31\xf7\x11\xf0\xfe\xf1\x0f\xc4\xdf\xd2\x74\x96\x21\x0f\xdc\xdf\xc0\x6c\x86\xe2\xdd\x68\x11\x00\x24\xcb\xc2\x59\x26\x7a\x37\x14\xa7\xad\x68\x47\x12\x17\xf6\x44\xfe\x3a\x44\x77\x02\x91\xd4\xbf\x9f\x42\x31\x7e\x45\x99\xec\x60\xec\x74\x5d\xe3\xe7\x29\x6e\xd8\x9f\xa0\xc9\x00\x31\xee\x2d\xc0\x8c\x65\xaf\x28\x7b\x85\x49\x7a\x8e\x12\xca\x52\xb7\x8a\x6c\x01\xf5\x34\x45\x0a\xca\xf1\x0c\x27\x48\x93\x0d\xe6\x34\x0e\xf4\x5b\xbf\x13\xe4\x83\x27\xc6\x98\x87\x05\xf0\xe7\x59\x16\x4a\x1e\x9b\xfb\xf2\x03\x90\x63\x19\x2c\x16\xc1\x4e\x81\x15\x5c\x04\x60\x05\x13\x67\x19\x35\xec\xb9\x86\x93\x6f\xa1\x48\xc6\x92\xe0\xee\xd7\x99\xc0\x19\xdf\x87\x69\xda\x16\xb4\x2d\x09\x54\x61\x72\x40\x82\xfb\x2f\x37\x22\x5c\xd0\x69\xec\x72\xb1\x9e\x17\x96\x7a\x66\x16\xfc\xb9\xb3\xb7\xa7\x21\xed\xf6\x8a\x8f\x57\x9d\xfe\x33\xf7\x21\xf6\x3e\xbc\xbf\xb8\xf4\x76\xaa\xf3\x10\x6a\xb0\xbc\xe7\x47\x80\xe4\x5d\x08\xfc\xca\x38\xe8\x41\xf6\x61\x88\x53\xe0\x39\x44\x0d\x00\x2a\x0f\x1d\xfc\x08\xef\x7c\x0e\x44\xb0\x58\xf8\xde\xbe\xc4\xc0\x0b\x00\x43\x5c\x40\x26\xe2\xf2\xfa\x20\x9b\x25\x3d\xcf\x0b\x13\x4a\x12\x28\x74\x93\x63\xca\xc5\xc3\x83\xb7\xef\x05\xa5\xd7\x33\x96\x7d\x60\x68\x88\xef\xfc\x20\x00\xd0\xa9\x44\x80\xb7\x9f\x64\x58\x32\x67\xd1\x2d\xa7\x36\x52\x3d\xde\x37\x3d\xf0\x1a\x3a\x0b\x81\xf7\xe1\xb7\x4b\x0f\xdc\xa7\x50\xc0\x58\xec\xed\xdd\x5f\x42\x7e\xfd\x0e\x4e\x50\x2c\x16\x8b\xed\xb8\xcd\x59\x0d\x4b\xec\xa6\xa6\x4d\x5b\x36\x50\x14\x96\x5d\xaa\xf3\x5a\x42\x53\xc4\xdb\x43\xca\xda\x48\xae\x12\xf5\x02\x0c\x4d\xe8\x0d\x6a\x33\x35\x20\xf5\xcf\x84\xb6\x33\x04\x53\x94\xd7\xaf\xf2\x2b\x80\x80\x7f\x12\xcf\xa2\x90\xc0\x09\xe2\x53\x98\xa0\x9c\x7f\xdd\x57\xde\x4d\xc7\x53\x0c\x9d\x35\x30\xb4\x2d\x16\xcb\x62\x80\xcf\xb9\x40\x93\xf8\xa5\x24\x4e\x88\x89\xea\x12\x47\xec\x46\xae\x08\x01\x10\xf4\x1a\x91\x65\x1f\xc7\x0a\x47\x6e\x3e\x27\x74\x32\x9d\x09\x94\xfa\x9e\xaa\x14\x72\x94\x30\x24\x3c\x50\x5b\x93\xd4\xa8\x8f\x90\xa8\x14\x0c\x76\xf0\xd0\x47\x66\x29\xbf\xf7\xfe\x6f\xfb\x9d\x22\xea\xa5\x2c\xe3\xc5\x68\xb1\x08\xc0\x18\x92\x34\x43\xe7\x88\x4f\x29\xe1\x28\xae\x2e\x02\x86\xab\x8e\xa2\xa8\xd7\xeb\xa1\xbd\x3d\xd2\xeb\xf5\x78\xf8\xee\xfd\x3f\xde\xbc\x7c\x7e\xf6\xf2\xfc\x99\x5c\xfa\x79\x4e\x8f\x58\x75\xe3\x1f\x7c\x36\x45\xcc\x5d\xdd\x8a\x65\x71\x01\x86\x7a\xf1\xab\xaf\xc4\xad\xb5\x95\xc3\x44\x2e\x65\x7e\x65\xfb\x2b\x4f\x6f\x14\x84\x98\x24\xd9\x2c\x45\xdc\xf7\x8e\xa2\x8e\x97\x6f\x64\x57\xfd\x1d\xbd\x59\xa1\x45\xb0\x00\x72\x82\xbc\x9f\x4a\x28\xbc\x71\xf2\xd6\x96\xa2\x6e\xe3\x52\xd4\x75\x97\xa2\x6e\x3f\xbe\x5f\x48\x82\x93\x50\x4e\x88\x87\x07\xf3\xa3\x77\xbf\x08\x40\x31\x40\x9a\x39\x42\x3e\xa6\xb3\x2c\x7d\xad\xfb\x7a\x8e\x46\x6a\xd1\xd1\xcd\xc3\x5e\xad\x34\x4c\x04\xbe\xb1\xc5\x76\xe0\xde\x9e\x01\x1e\x32\xf5\xae\x07\x83\x45\x9d\x8c\x66\x10\x35\xd1\x7f\x81\xfc\x2d\x24\xf3\xca\x08\xcb\x49\xb3\x31\xfd\xc5\x18\x91\x82\xfc\x44\xf7\x36\xeb\xf1\x50\xee\x83\x80\xf6\x44\xa8\x67\x6f\x88\xc9\x0d\x62\x1c\xbd\xa2\xcc\xe7\xe1\x35\x9a\xdb\xd5\x89\xee\xed\xa1\x70\x8a\xd0\xf5\xf3\x2c\xf3\xb3\x20\x1c\xe2\x4c\x20\x56\x1a\x52\x53\x12\x69\xfc\xed\x7a\x48\xd5\x5c\x04\x5e\x88\x53\x2f\x08\x7a\xbd\x9e\x08\x71\xba\x08\xc2\x21\x65\x2f\xa1\xcb\x15\x22\xb8\xf7\x23\x00\x1d\x96\x90\x8b\x76\x00\x88\x1c\xf7\xda\xee\x4e\xcd\xab\xdf\xa6\x29\x14\x28\x7f\xb9\x08\x76\xac\x90\x47\x1d\xbe\x00\xb0\x77\xd5\x07\xbc\xa7\x67\xa7\xec\xa0\x22\x91\x27\x17\x77\x2f\x00\x59\xaf\xba\xa6\xdb\x55\x59\x0e\x58\x4f\x84\x09\x9c\xa0\x0c\xff\x81\xfc\x20\xd8\xdb\x83\xe1\x74\xc6\xc7\x3e\x09\x00\xb2\x0f\x88\xc8\x85\xf2\xb7\xf3\xd7\x2f\xe8\x64\x4a\x09\x22\x52\x8a\x0b\x40\x26\x0b\xcc\x08\x1f\xe3\xa1\xf0\x33\xb9\x53\xc0\xf0\x23\xc5\xc4\x97\x1b\x0a\xd8\xe5\x7b\x7b\x70\x6f\xcf\xdb\xf7\x24\x77\x86\xc9\x18\xb2\xe7\xc2\x8f\x82\xbd\x3d\x1f\xf6\xbc\x7d\xef\x09\x0c\x00\x5c\x14\x4b\x5d\xb6\x72\xb1\x4f\xd1\x34\xa3\xf3\xc9\x06\x42\x72\x21\x5a\xac\x12\x91\xe5\xf3\x86\x42\x72\x3e\xf6\x55\x39\xb7\x98\x98\x57\x7d\x00\x7b\xbb\x11\xe0\xbd\xdd\x0e\xc8\xf2\x85\x5a\xb0\xb9\x95\xaf\x29\x60\x3d\x74\x55\x11\x8a\xfb\x7e\xf0\xd3\xae\x0f\x7b\x3e\xed\xb1\x90\xa0\x3b\xe1\x07\x41\x98\x52\x82\x02\x35\x93\x14\xe9\x69\xa8\xf6\x85\x00\xec\x8a\x87\x07\x62\x26\xfe\x6e\xaf\x27\x82\x9f\x64\x93\xc1\x4f\x0b\xbd\xfe\xe0\xe0\x9e\xcb\x2e\x64\x3d\xbc\x18\x62\x02\xb3\x6c\x7e\x2f\x3b\x00\x1f\x1e\xc8\x2c\xcb\x7a\x3d\x16\x6a\x3c\x1e\x1e\xf2\x5f\x7e\x60\x4b\xe2\xa1\xcf\x03\xbd\x12\x65\x8b\x85\x95\xec\x15\x8e\x8f\x12\xad\x53\xc4\x05\x9b\x25\x62\xc6\xd0\x37\x92\xaf\x19\x9d\x50\x81\x1a\x04\x3a\x33\x87\xe5\x8c\x05\xb0\xf7\xf9\x04\x3e\x0f\xc0\x1e\xf1\x51\xc8\xa7\x19\x16\xbe\xf7\xcc\x0b\x40\x37\x00\xbc\x07\xaf\xa2\x3e\xc8\x7a\xf0\xaa\xd3\x07\xb4\xc7\xf3\xef\x72\x8a\xb0\x1e\x0d\xa7\x74\xea\x07\x00\xf7\xdc\x45\xc5\x4e\xa2\x42\x2c\x03\xae\x90\xc6\x82\x9d\x6c\x6f\xcf\xc7\x4f\x7a\xde\x33\x5b\x2d\x0b\xec\xc4\xc6\x8b\x25\x12\xa5\x00\x9e\x33\x91\x02\xe0\xed\x1b\x3a\x2d\x13\xd5\xa4\x10\x6b\x64\xb5\xfb\x33\x5b\xf3\x75\x1a\x0b\x20\xf7\xcb\xdd\x68\x4b\x99\xed\x23\x1d\xb4\xf9\x6c\x32\x81\x6c\xfe\xaf\x79\xfc\xaf\x79\xbc\x7e\x1e\x2f\xd7\x7c\xa5\xa4\x60\xd5\x29\xe2\xff\x7a\xf1\xfe\x5d\x38\x85\x8c\x23\x1f\xa9\x99\x97\xf5\xb8\x9c\x79\xb4\x27\xa7\x27\x60\x3d\x57\x04\xc9\x80\xf7\x91\x0e\x3c\x00\x83\x27\xde\x7e\xce\x8f\x8e\x38\xe0\x99\x6e\xc8\xad\x8b\xee\xed\xf9\x4c\xce\x34\x47\xec\xb6\x53\x35\x08\x00\xdb\x92\xff\xbf\x98\x6a\x6c\xa7\x05\xfc\xd7\xb4\xf8\x67\x9a\x16\xbc\xc9\x58\xb1\x52\x99\x6b\x50\x67\xaa\x1a\x59\x49\x84\x7f\x97\x73\x76\x65\x1b\xd8\x42\xee\x2e\xf8\x4d\x34\x4a\xbf\x22\xb4\x8d\xf4\xd0\x33\x67\x0f\x8e\xed\x5c\x93\x0a\xc9\xc2\xe8\x05\x4d\x93\x5d\xa9\x05\x5a\xb8\x87\xee\x74\x27\x72\xba\xeb\xdd\x35\x2b\x4f\xdd\xec\x99\xa3\x04\x67\x0b\xa9\x09\x2d\xd3\x47\x00\x07\xb4\x24\x8a\x37\xab\x83\x99\xbf\x96\x30\x75\xad\xaa\x42\x64\xad\x2c\xac\x32\xea\x99\x09\xad\x07\x1f\xd6\x97\x36\xaa\x97\x36\xa6\x96\xb6\x9d\xa6\xae\xf9\x54\x81\x00\xcc\xb6\x53\xd2\x25\xbe\x50\x4b\x77\x63\xf6\x5f\x68\xfe\x99\x75\xd7\x2d\x28\xaf\xb5\xcf\xbd\x3d\xa3\x85\xda\xb1\x0f\x16\x80\xa1\x4c\x59\x8a\xf8\x18\x4f\x5f\xc1\x2c\x1b\xc0\xe4\xfa\x0d\x26\xd7\x3c\xbe\x37\xeb\x7f\x5c\xec\x04\x0b\x30\x44\x22\x19\x9f\xc3\xdb\x33\x39\x75\xb1\xac\xd8\x20\x49\x36\xcb\x58\xae\x7c\xa9\x76\x99\x06\xd1\x4a\x00\xef\x2f\x2f\x2f\x3d\xc9\xec\x94\x25\xe8\x03\x62\x98\xa6\x38\x89\x2b\x6b\xb5\x01\x35\x35\x9f\x73\x55\x5c\x6c\x64\x3d\xac\xf7\x43\x8a\x7b\x06\xd4\xbe\x6a\x77\x49\xd7\x94\xd4\x17\x2c\x16\x60\x89\x49\xf4\x93\xf0\x3e\x7b\xf9\xe6\xe5\xe5\x4b\x89\xba\xe2\xb3\x06\xf0\x2b\x91\x93\x2a\x7a\x81\x8d\x84\xb0\x0a\x89\x5c\x74\xfd\x95\x0e\x7e\x79\xf1\x26\x46\xe0\x05\x24\x94\xe0\x04\x4a\x75\xd7\x48\xaf\x60\x9a\xc1\xa6\xd1\x2d\xeb\x09\x0a\x36\x17\x94\x21\xb0\x99\xf1\x56\x38\x44\xcf\x20\x69\xea\x25\xaf\xf7\x32\x36\xad\xfe\x83\x20\x87\xf7\xe4\xb4\xf4\x02\x70\x86\x87\x43\xdd\xe9\xca\xe2\xeb\x1a\x28\x5e\x9f\xf5\x04\xd0\x7a\xfb\x07\x38\xcf\x28\x4c\x15\xbd\xda\xaa\x13\xe0\xfe\x23\x1d\x7c\xc8\x20\xe1\xf1\x15\xea\x2f\x02\x59\x10\xa1\x6b\xd3\x65\xa7\x9c\x08\x24\x65\xd8\xac\x4c\x98\x3a\x9d\x0b\xd4\x5f\x30\x64\xd7\x17\x3b\x42\xdb\xa0\xa7\xc6\x62\xa6\x56\xa9\x8d\x1b\x75\x17\xb5\x46\x86\xdf\xb6\x03\xae\x8d\x25\x2b\x89\x51\xa2\xbc\xb5\x88\xbd\x3d\x1f\x2d\x91\x0a\x45\x10\x00\xe4\x58\x36\xf8\x4a\x91\xd0\x02\xd8\xe6\xf4\x6f\xad\x25\xfb\x6b\x9e\x9c\x2c\xdb\xb0\xe1\x57\xb2\xa2\xde\xab\xe3\x03\xb8\xa5\x2a\x4a\x68\xba\x96\xe4\xcb\x75\xd0\xcf\x43\x4d\x52\xa7\xa6\x8b\x00\x59\x89\xc0\x94\x66\x38\x59\xab\x46\xaf\x3a\x33\xfe\x62\x48\x38\x62\x97\x28\xb6\xe1\x27\xde\x3e\x4c\x32\x6f\xb1\x39\x8a\xea\xdc\xe0\xfb\xc4\x50\xed\x05\xcb\x04\xf0\x55\xe8\x2b\xf9\xf6\x02\x65\xc3\x66\xf1\xbc\xbe\x4d\x54\xce\xec\x06\x33\x9c\xa5\xbf\x9d\xbf\xf1\xe5\xd6\xa2\x08\xb4\xcf\x51\x36\x94\xab\x9d\x92\x29\xea\x82\xb9\x46\x01\xe9\xed\xcb\x9e\xdb\x97\xb7\x08\x43\xe9\x7b\xf5\x97\xc7\x57\x42\xee\x0e\xa4\xb4\x3b\x98\x22\x24\x24\x94\x4d\xd4\x0e\x6a\xdf\x89\x40\x4b\x5c\x38\x0d\xaa\x93\x70\xf5\x00\x3b\xca\xae\x3b\xc8\xbf\xcf\x10\x9b\xb7\xb9\x3a\xfb\xdf\x60\x2d\x6c\x3a\xf0\x53\xcb\x20\x6f\x38\x91\x73\x14\x65\xfe\x2f\x45\xf9\x9f\x49\x51\xce\x7a\xa4\x36\x4d\x15\x83\xbd\xc1\x5c\x2c\x9b\xaa\x2b\xe7\xf1\xb2\x13\xb9\x5c\x67\x82\xbd\xf5\x4a\x09\xef\xf9\xe4\xe1\xe1\x7e\x11\x84\x70\x40\x99\x50\xc7\x9c\x3b\x8a\xd0\xf7\x29\xca\x90\x40\x2d\xe2\x7e\x31\x0a\x6e\x38\x40\x43\xca\xd0\x05\x22\xe9\x8e\xfb\x50\x32\x58\xf3\x30\x81\x53\x49\x5b\xa9\xad\x65\x7b\x7b\xb9\xf7\x86\xa6\x89\x7b\xc2\x99\x8f\x25\x6c\x38\xeb\xb4\xf3\xc2\x68\x81\x55\x4d\xed\xb0\x51\x53\x3b\x74\x35\xb5\x43\xa9\xa9\x81\xcc\x1c\x41\x41\xce\xf1\x88\x38\xab\xd5\x7f\xcb\xe9\x2c\x69\x2d\x15\xca\x06\x81\x5e\x84\x13\x9a\xa2\x4c\x6e\xe3\xc1\x4e\x71\x8c\x05\x25\xd9\x80\x67\xa6\xb4\x19\x87\x50\x8d\xa8\x27\xa7\x46\x16\x62\x92\xa2\x3b\x0d\xd1\x0e\xb4\xac\xfa\x5a\xbe\x7f\x45\x99\x4f\x83\x40\x51\x94\xf5\xd6\x81\x2d\x86\xa0\x49\x54\xa7\x7a\x71\x05\xf7\x45\xb1\x98\x01\x25\x56\x66\xcb\x6d\x16\x04\x64\x80\x6a\xba\xb2\x4f\xa0\x2b\xee\xf1\xca\xd2\x4f\x0a\x82\xc9\x26\x80\x57\xb4\xef\x05\x95\x13\x88\x59\x0f\x4b\x15\x3e\xed\x61\xa9\xc2\xa7\x95\x31\xb2\x13\x46\x6b\xfd\x69\xa0\x88\x53\x1f\x3a\x16\x80\x82\x82\x74\xcd\xc0\xa4\xeb\x07\x66\x66\x06\x26\xe9\xad\x03\xbb\x7a\x60\x66\x0d\x03\x93\xe8\x81\x49\x17\x4b\xc4\xca\x5d\xbf\x58\x7f\xe8\xb0\x05\xc3\xe7\xb2\xae\x5a\xc4\x82\xc0\x39\x8f\x67\x48\xee\x8d\xe7\x8e\xe5\xa0\x34\xb8\xf9\x84\x51\x13\x3e\x7b\xb4\x85\x43\xd1\x27\xde\xed\x00\x07\x03\xb9\x54\x2f\x00\xed\x65\x9a\x7a\x80\xf5\x32\x87\x0e\x00\xf7\x50\x58\x32\x68\x50\xe6\x13\xe5\x56\xe1\x0d\x50\x46\xc9\x88\x5f\x52\xa9\xa4\xe0\xf0\x1a\x93\x74\x6f\xcf\x1b\xeb\x63\xf6\xe2\x5d\x50\x2c\xe0\x66\xf1\xb6\x42\x06\x0e\xaf\xd1\x1c\x78\xad\xc9\x8c\x8b\xd6\x00\xb5\x60\xcb\xc2\x6c\x51\xd6\x32\xa0\x80\xa2\x20\x82\x69\x0b\x8b\xd6\x2d\xe4\xad\xe2\x74\xca\xb4\xa0\xc7\x77\xd6\x43\x57\xfa\x45\x5f\x43\x0e\xc2\x0c\x93\x6b\x3f\x00\x69\x4f\x3b\x26\xd0\x8d\x19\x06\xcc\x1c\x05\xe0\x59\x6e\x0d\x49\x7a\x55\x26\x9e\x39\x33\xe0\xaa\xd3\x0f\x76\xcc\xf6\x72\x8d\xe6\xdc\x4f\x1a\x4e\xe7\x91\x5d\x8a\x53\xa5\x16\x2f\x36\x62\x33\x56\xb0\x59\x4d\x1d\xd7\x26\x84\xdc\x62\x40\x7a\xce\xb8\xf4\xf2\x31\x78\xe6\x59\x41\x4a\x2e\x84\x3f\xe7\x25\x72\xb7\x17\x2f\x2e\x17\x30\xbe\x12\xf6\x33\x90\xba\x18\x47\x0c\xab\x12\x4c\x12\x09\x2b\xa7\x07\x75\xe6\xaf\x57\x08\xf7\x25\xed\xc1\x2b\xd2\xf7\x05\xc8\x00\x0a\x76\x84\x91\x2b\xe4\xe2\x55\xb1\x3a\x2d\x9d\x1c\xc6\x3b\xb1\x09\x97\xfb\x45\x5c\x76\x66\x59\xe9\xc2\x53\xec\x36\xe2\xca\xbb\x6b\x6b\xf9\x4e\xb1\x80\xd7\x7f\x78\x10\x57\xd6\x29\xe8\xb5\x7e\x97\xcf\x7b\xbe\xb7\x57\x61\x11\xee\xb0\x08\x94\xdb\x0a\xc8\x2d\xb0\x2b\x3d\x7e\x4a\x22\x6a\xb3\xe7\xc1\x74\xba\x44\xf1\x60\x88\xd3\xec\x06\x31\x2b\x78\xca\x55\xa2\xad\x4c\x09\x7a\x24\x4a\xa5\x13\x4a\x86\x78\xb4\x8f\xc8\x0d\x66\x94\xa8\x73\xd7\x26\x99\x54\x51\x63\xe7\x93\xe5\x20\xeb\x06\xf2\xbc\x10\x90\xad\x2c\x34\x51\x00\xb4\x17\x48\x6c\x7d\x51\x42\xf7\x35\x98\xd2\xf4\x6d\x73\xb1\xca\x17\x70\x6e\xc8\x10\xdb\xe9\xb7\x08\x40\x59\x63\xe7\xa0\xb9\x95\xc0\x48\x39\x7c\xdd\x20\x0c\x18\x82\xd7\x53\x8a\x89\x1c\x81\x62\x30\xfa\x25\x96\xfd\x74\xe1\xb1\x78\x71\x3f\xa1\x03\x9c\xa1\xd8\xf3\x27\xf0\xae\x7d\x8b\x53\x31\x8e\x5b\x4f\x8f\x4f\xa6\x77\x81\x07\x84\x94\x5c\x85\xfc\x86\x49\xf1\xed\x54\x7d\x4b\x11\xbf\x16\x74\x5a\xfe\xd8\x89\x4e\x74\xcd\xd1\x4c\x08\xc4\x32\xc4\x79\x19\xf2\xe9\x71\x24\xbf\x2f\x9a\x70\x4f\x72\x5f\x1b\x75\xee\x47\x49\x3b\xa1\xd3\x79\x7b\x30\x13\xa2\xd9\xdf\x31\xc9\xb0\xfc\xff\x74\x40\x21\x4b\xdd\xda\x6e\xbd\x4f\xd6\x8f\x97\x56\xc8\x6d\x63\xe0\x1e\x91\xd9\x44\x4b\xf9\xf1\x6e\x04\x46\x48\x34\xb9\xd5\x59\x9e\x59\x04\xeb\x90\xb7\x8e\xa6\x6d\x46\x6f\x1b\x31\xa7\x24\x99\x31\x86\x48\x32\x77\x67\xde\x18\x65\x53\xa9\x09\x66\xf0\x8f\xb9\xa4\x4c\x72\xdd\x60\x36\xcb\x20\xe7\xa8\xd4\x08\x17\x50\xf0\xb6\x60\x30\xb9\x46\x4d\x1e\x9d\x9f\xcb\xa8\x90\xcf\x54\xeb\x53\xb5\x99\x69\x61\xa5\xa3\xa6\x80\x23\x65\x0b\xf3\x04\xf3\x80\xc2\x4d\x9d\x3a\xc5\x57\x5e\x95\x8a\x1e\xe6\x6d\x4c\xa4\x36\xa6\x0e\xa7\xbc\x3e\x28\x4a\x28\xf1\x03\x24\x94\x08\x74\x27\xf4\x83\x22\x8a\xda\x04\xa4\xa4\x82\x88\x1c\xdd\x0f\x34\xcb\x30\x19\x55\xbd\x42\x6b\x83\xbd\xab\x0b\x08\xc4\x05\x26\xa3\x45\xa0\x81\xd5\x9c\x49\x5d\xe7\x71\xe7\x21\xc4\xfc\x7c\x46\x88\x32\x04\x34\x1b\x4c\xf0\xd0\x2f\x8e\xdc\x1a\x2b\x5a\xdd\xbd\x58\x8e\x12\x65\xae\xf6\xef\xd5\x41\x4f\xdc\x70\x8c\x89\x42\xed\xb4\x0a\x67\x62\x4c\x19\xfe\x03\xa5\xe7\xe8\xf7\x19\xe2\xc2\x17\xc1\xc2\x25\x96\x16\x12\xec\xb3\xe2\xe7\x64\x3a\xab\xe0\x17\xc2\x0c\x43\xee\x7b\x0a\xf7\x30\x99\xce\xc2\x0c\x72\xa1\x39\xc9\x0b\xc0\x04\x4d\x28\x9b\xaf\xac\xa3\x8b\x94\xab\x51\xf2\x42\xf2\xb5\x3b\xc1\x16\x20\x29\xbf\x42\xca\xf5\x90\x84\x72\x1a\xa8\xd2\x81\x7f\xa5\xfa\x6c\x2a\x03\xd4\x0f\x16\x20\xc5\x52\x7f\x40\xf8\x06\x3d\x17\x82\xf1\xb8\xa4\xeb\x97\x10\x7c\xa6\x3b\xc9\x66\x24\xe4\xc9\x18\x49\x6e\x7f\x4f\x12\xe4\x7b\x70\x28\x10\x3b\x47\x24\x95\x5b\xa3\x16\x8a\x03\x4d\x1d\x45\xe4\x0b\x8d\xb9\x94\x2b\x32\xa9\xf4\x05\xe6\x94\x4d\xbd\x8f\xfd\x08\x88\x50\x40\x7e\x1d\xf8\x0c\x8d\x10\xd1\x96\x91\xf3\x19\x11\x78\x82\xc2\x09\x64\xd7\x96\xb1\x5a\xa8\x58\x47\x1a\xca\xde\x32\x38\x2d\xc9\x62\x43\xca\xfc\x9f\x7e\x0a\xf8\x2d\x96\xba\x00\x0a\xa7\x0c\xdd\xf4\x90\x32\xb4\x04\xf7\x09\xe4\xa8\x15\xc5\x52\x2b\x30\x47\x3c\x50\xf0\xe0\x5e\x7f\xee\x75\xa2\x1d\xb5\x05\x2d\x2c\x53\xa8\xca\x1d\x60\xbe\x1f\xba\x87\xbd\x0a\xbf\x29\xcd\x32\x2f\x08\xa7\x88\x0d\x29\x9b\xf8\xc1\x8e\x6a\xe0\x50\xd3\x81\xdb\x72\x2f\xb5\xbb\xf9\x6e\x27\x00\x95\xa6\x74\x85\xa7\xb1\x69\xea\x29\x40\xa1\x88\x7a\xc8\x68\x32\x1d\x23\xdc\xd4\x21\x45\xa6\xa9\x4e\x14\xdb\xce\x6a\xc0\x5d\xa0\x89\x8b\x27\x88\xce\x44\xe0\x1f\x45\xb6\x6c\x37\xce\x27\x4f\x69\x4a\x5b\xfc\x73\xf4\x75\xe9\x83\x58\xfe\xf5\x10\x49\xbd\xa2\x0d\x2e\xe8\xd4\x0f\x16\x0b\x80\xf4\x98\x5f\x5d\x75\xc0\xd3\x7e\x3f\x58\x04\x41\x98\x32\xf5\xad\x74\xa6\xe2\x4e\x5d\x60\xce\x12\x0b\xe6\xb2\x0a\x5e\xa8\x95\x2f\xbf\x2a\x5b\x9b\x73\x51\x87\xa3\x2c\xa9\x81\xd8\xdb\x13\x7a\x2c\xd4\xe9\xcf\xde\xde\x6e\xf1\x18\x62\xfe\x01\x91\x54\xad\x06\xc5\x07\xc9\x70\x7f\x61\x74\x36\xcd\x95\x09\xd2\x73\xaa\xa8\x15\x90\x08\x2f\xd8\x21\x7b\x7b\xc4\xf6\x48\x6e\x59\x6b\x0e\x77\x9a\xb7\x2f\x39\x5e\x33\xde\x1e\x40\xb6\x44\xb2\x74\xaa\xa5\x98\x0b\x86\x07\x33\x55\x51\xd6\xf8\x7a\x96\xed\x0c\xce\xe9\x4c\xe8\x7d\x64\x55\x8f\x9c\x45\xf0\x05\x25\x02\x62\x82\x98\xde\x2d\x3c\xa9\x18\xb5\xe5\x82\xdf\x6e\x46\x5f\x0a\x06\x4a\x79\x5a\xbe\x09\x58\x90\xe1\xfd\xef\x33\x34\x43\xe9\x73\xf9\x89\x03\x59\x56\xaa\x6a\xe6\x71\x08\x71\x66\xbf\x31\xbd\xde\x9b\x27\x75\x07\xc5\x3e\x2e\x4a\xdb\x87\x9d\xef\x0d\x0d\x16\xbe\xf9\x8e\xd3\x4c\x53\xc7\x46\x48\x18\xc2\x63\xa9\x91\xba\xdd\xf4\x80\x57\xee\xa8\x07\x3c\xb7\xab\x1e\xf0\x4a\x9d\xf5\x80\x57\xee\xae\x07\xbc\x8c\x72\x61\x1e\x72\xc3\xc7\xd5\x7d\x06\x07\x28\x8b\xbd\xff\x56\x6d\x79\x40\x8f\x2f\x0a\xcb\x24\xca\x37\xfe\xd8\xf4\xc9\x5b\x80\xbc\xe2\x85\x69\xa5\xa8\x5a\x6e\xd7\xad\xcc\x6d\xd9\x0c\xce\x11\xe3\x71\xb7\x80\x63\xf7\xe4\x1c\x4c\x99\xf6\x0e\x14\xf3\xc1\xe9\xc3\x0b\x43\x99\xa2\x72\x65\x50\x9d\xda\xf9\x17\xa7\xfa\x2b\x45\xc7\xa2\x72\x89\x05\x9c\xaa\xfa\xbd\x53\xf1\x0d\xe5\xa2\xa8\x56\x90\xd7\xad\x24\xdf\x7a\x8b\xbe\xdc\xc5\xd7\x1d\x62\xb8\x93\x7c\x3a\x6d\xcb\x95\x32\x4d\xd8\x6c\x32\xf8\xa2\xba\x8a\xb6\x2c\x2c\x13\x1d\x9d\x4e\x5c\x68\xa9\xb0\x59\x54\xf4\xdc\xde\x3a\x72\xa3\x07\x9c\x0f\x55\x71\x44\x7e\xe1\xa5\xaa\xa6\x8d\xb0\x04\xad\x44\x39\xb1\x8e\x72\x42\x2f\x2a\x88\xb7\x39\x4a\xaa\x77\xb9\xbe\x2e\xf1\x0a\x2a\x6c\x85\xc2\x00\x72\x9c\xb4\xe5\x5e\x97\xd2\xdb\x46\xd5\xac\x5c\x62\x45\xdd\x1f\x50\x3d\xab\xe1\xa6\xf6\xcc\x36\xca\x50\xfd\xb2\xc6\x76\xd4\xa8\xc1\xfa\xa7\xa1\xce\xe7\xa0\xca\x3f\x01\x35\x04\xc3\xa3\x11\x62\x9f\x44\x8d\x1c\xc6\x0f\x48\x8d\x64\x8c\xb3\x94\xa1\x7f\x3e\xb9\xf0\x23\x1d\xd4\xe4\xc0\x26\x64\x97\x4a\x81\x52\xf8\xbe\x9f\x6a\x71\xfd\x85\xa9\x98\x0b\x77\xf6\x39\x45\x30\xcd\x1f\x96\x08\x77\x1f\xe9\xa0\x51\x98\x93\xf0\x2b\xc2\x5b\xa5\xb5\x42\x3e\x73\xde\xb8\x2d\xd6\x45\xb2\x5c\xbd\xb0\x02\x46\x15\x81\x55\x62\xd9\x32\x71\xaa\xa9\x72\x5d\xa0\x3a\x43\xd0\x91\x87\xdc\x6e\x36\x8b\x52\xdb\x8a\x37\xfa\xca\x77\x9b\xd0\x14\xd5\x6d\x70\x5b\xd9\xdb\xa6\x96\xe4\xda\xf5\xc3\x2d\x31\xc1\x77\x98\xf0\xfd\x5b\x2c\xc6\x6d\xdb\x78\xfb\x06\x73\x3c\xc0\x19\x16\xf3\x76\x8a\x84\x11\x11\xbe\x81\x55\xce\x9a\x8e\xc0\x1a\xfb\xdc\x52\x13\x5c\x8d\x8a\x75\x1b\x9c\xfc\xa6\xa7\xce\xe6\x96\x1d\xf1\x78\xcb\x4e\x5d\x13\x97\x1d\xd8\x51\x7a\xf4\x52\xfd\x1b\xe9\xd3\x17\xab\x77\x0b\xd0\x89\x22\xe5\x2e\x5a\x0c\xd5\x2f\xea\xf0\x87\xc5\xe5\x49\x99\xd2\x44\x9d\xbf\x84\x63\x9c\xa6\x88\x04\xc5\x51\x8e\x6b\x16\xda\x41\x19\x47\xee\x7d\x05\xd5\x27\xe4\x9e\xfc\xd8\xb6\x91\x6e\x7b\x01\x6e\x71\x96\x9d\x21\x2e\x18\x9d\xd7\x4c\x57\xb5\x16\x36\x38\x1f\x02\xfa\x54\x56\x19\xce\xd4\x4f\xf7\x14\x38\x70\xf5\xd4\xaa\xc0\xbb\xce\x1e\xb0\xce\x8a\xef\xd8\xb2\xbf\xd4\xd2\xbe\x4c\xfe\x2d\x73\x6b\xe9\xd4\xc0\x1e\x2c\x5c\x96\x4c\xc2\x86\x59\x31\x49\x71\x02\x05\xba\x98\x25\x09\xe2\xdf\xdc\x98\xe7\x9e\xde\x5a\x43\x19\x92\x2a\xb6\xee\x9f\x67\x8d\x6e\x07\x15\xd3\x58\x17\x1d\x18\xd3\xd8\x41\x5c\xab\x2e\x51\xb5\xf6\xbc\xf5\x96\x30\x65\x01\x33\x91\x30\xa4\xcc\xe0\x6f\xb7\xe6\xd6\xb7\xd5\x26\x66\x99\xce\xe5\xbe\x74\xd0\xe6\x28\xcb\xb5\x27\xf9\x28\x18\x24\x1c\x57\x3d\x85\xed\x02\x4b\x52\x7a\xdb\x66\x88\xe3\x3f\x9a\xef\x99\x39\xab\x34\x17\xf3\x0c\xe5\x9e\x78\x4d\xe1\x2d\x40\xf6\xb9\x18\x93\xf6\xca\xec\x9e\x13\xf6\x89\x58\x00\xb6\x8c\x69\x79\xb1\x2c\x97\xd9\x77\x0c\x99\x90\xc4\xa8\xcb\x4b\xb6\xdc\xcf\x58\x6d\xd0\xb2\x38\xe6\xef\x20\x63\xf4\x36\xc6\xbc\x4d\xd4\x2f\x59\x50\xc2\xd0\x1c\xae\xc4\x14\xf5\x4b\xaf\xd5\x67\x50\xcc\x26\x86\xf9\xf3\xaa\xbb\x1d\x20\x28\xcd\x04\x9e\x5e\x48\xa2\xc9\x59\x90\x15\x67\xa1\x9e\xf9\xf6\x81\x9a\x81\x09\xc0\x04\xf2\xeb\xd7\xa9\x86\xf2\x8f\x46\x41\x48\xbe\x6c\x38\xf6\x50\x4c\x2b\x07\xdf\x5c\x3e\x90\xc5\xc0\x6e\x14\x00\xd2\x93\xd3\x6b\xfa\xf3\xdc\xf7\x14\xb5\x3d\xc9\x81\xe9\x2c\x41\x3e\x05\x91\xf5\x9e\x51\x65\x1c\x0f\x51\xe7\x34\x3e\x54\x12\x85\xf2\x1f\x50\x00\x4c\x15\x23\x68\x70\x23\x63\x64\x8e\x58\x21\x42\xfb\x3b\x37\x13\x49\x28\xf2\x07\x50\x27\xfa\x31\x04\x53\xc4\x12\x44\x44\x9c\xed\x13\x40\x87\x43\x8e\x44\x6c\x22\x14\xf9\x11\x80\xc1\x8a\x2e\xef\x13\x23\x47\xe3\xf4\x35\xe1\x88\x89\x97\x5a\x17\x5c\xba\x8b\x15\x1e\x80\x7a\x4a\x68\x02\xfd\x1f\xdf\xe3\x37\x23\x2f\xb8\x8a\xfa\x2a\xa0\x8d\xe4\x8a\xb6\x24\x7f\xdb\xba\xbd\x18\x37\xa4\x19\x4e\x5f\x51\xa6\x6a\x05\xc1\x4e\xbe\x06\x38\x92\xe2\xbd\xe6\x0a\x91\x8f\x1e\xcc\xe3\x68\xe8\x36\x5a\x72\xa5\xfc\x00\xc5\xd8\x0b\x42\x28\x04\x53\xf7\x11\x00\x0c\x80\x08\x29\xf1\xbd\x09\x9d\xc9\x7e\xc1\x1b\x54\x1a\x56\x7b\xa4\x52\xde\x68\xd5\xea\x83\xf9\x73\x2d\x1e\x98\xd3\x02\xf5\xd2\xe1\x42\xb3\x30\x81\x1c\x63\x75\x43\x66\xe4\x05\x7a\x5c\x94\x51\xb5\xa8\x5f\xbc\xc4\xc4\x79\xad\x68\xac\xb0\x60\xea\xfc\xe6\x85\xc4\xd1\xd7\xc2\x83\xbe\x63\xd1\x7c\x2a\x54\x29\xad\x6f\x6f\xa8\x47\xc3\xca\x74\x20\x25\x23\xc4\x7c\x4f\x31\x78\xf8\x9f\x08\x26\xe3\x50\x2f\x05\x40\xf3\x9a\x65\x9f\xb2\x10\xdf\x00\x3f\x00\xce\xf3\x6a\x39\x46\x0d\x52\x7e\x6d\x47\x35\x0d\xb4\xa3\x56\x98\x4f\xd7\x3c\x2e\x46\xce\x1a\xa1\x3a\x92\xf7\x95\x9b\xcc\xca\x08\x20\xaa\xef\x7f\x8e\x16\xc1\x0e\x6d\xf0\x24\x92\x0b\x97\x46\x5d\x8e\x13\x02\x9e\xf6\x6a\x51\x17\x6a\x8c\x27\xa2\x65\x4d\x2f\x1c\x40\xc6\xbd\xa0\x3a\x70\xb2\xbb\x3e\x05\x8d\xad\x2b\x9a\x2d\x02\x80\x7b\xd4\xf8\x99\xed\xb0\x10\xdd\x61\xe1\xcb\x79\x33\xa1\x37\xc8\xcf\x1d\xaf\x58\x88\xa4\x70\xe9\x07\x52\xc6\x91\x6b\xa5\x02\x6e\xb9\x50\x7d\x74\x48\x2e\x96\xb0\xa1\xf5\x1e\x97\xf3\x95\x03\xd8\x23\x2b\xc9\xa3\x3a\xa8\x22\xa1\x98\xae\xee\x90\xcd\x39\x31\x0a\x00\x6c\x28\x1d\x2d\xe3\xdb\xc6\xe9\x20\x02\x23\xc9\x43\x25\x3a\xfa\x81\xd4\xf5\x7e\xfe\x99\xde\xf9\xea\x52\x78\x78\xf7\x84\xeb\xc1\xde\xef\xee\xd4\xcf\x32\x2b\xe7\x98\x08\xd4\x75\xfc\xfa\xc4\x94\xf2\x6f\xde\x97\xea\x3a\x0f\xee\x33\x34\x14\xca\x4d\x34\x58\x04\x3f\xf9\xac\xc7\xc2\x09\x62\x23\xe4\xcf\x82\x7c\x8d\x50\xd8\x95\xc7\x22\xd7\xc2\xed\xf4\x78\x78\xf0\xd4\x10\x14\x4b\x16\xd4\x5e\x73\xef\x87\xea\xc6\x11\xef\xa1\xd0\xa1\x43\xae\x9e\x12\xc0\xf7\xf6\x78\x75\x58\xf6\xf6\x2c\x75\x8b\xcf\xbb\xee\x67\x4b\xe7\xbe\xda\x8f\x60\x22\x39\x4c\x07\xa6\x68\x79\x76\xb9\xd0\xf2\x91\xe2\x0c\x0f\x30\x4d\xf8\xb4\x21\xa8\x46\x37\xdf\x7b\x54\xc4\x26\xdd\xef\xbd\x3d\xd1\x6e\x03\xf3\xd0\xeb\xf5\x70\xbb\xa3\x5f\x15\xbe\x88\xd9\xbf\x4b\x35\x5a\x6d\x1e\x6d\x01\xbc\xe9\x9d\x17\x2c\x40\xd2\xab\x33\x5e\xb9\x8a\xde\x63\x9e\xf8\x4e\x63\xcf\xa2\xb8\x13\xe4\x10\x26\x3d\xe6\xce\xb9\x50\x40\x36\x42\x22\x9f\x79\x75\xe8\xca\x29\x70\x67\x52\x9b\x4f\x4c\x9d\xc2\x97\xc7\xd0\xb3\xc0\xf4\x6b\xc5\x69\x1e\x48\xf3\xe7\x31\xc2\xa3\xb1\x94\x4c\x3a\x51\xf4\x27\x5b\xea\xce\x03\x49\x60\xd8\x62\x12\x84\x85\xfc\xe6\x07\x61\x3a\x63\x4a\xd3\xf0\xbb\x51\xb4\x0c\xaa\xaa\xaf\xa8\x3f\xad\xe0\x26\x65\x9e\x1a\x62\x8e\x78\x55\x8a\xf9\xa8\xb6\xed\x87\x87\x8e\x8a\x81\x94\xf9\x25\x57\xe1\x7b\xbd\x9b\x8b\x05\x40\x81\x5c\xcc\xa6\xab\xc9\xd1\xd8\x43\xf3\x7b\xee\x35\xcc\x2a\xfe\xcc\x3b\x8a\xfe\xe4\xc5\xd1\xa2\xa0\x28\x9e\xea\x60\x07\xc0\x9b\xb1\xcc\xff\xb7\xf2\x45\x18\xbd\x01\x03\x2f\xf0\x82\x2a\x71\x1b\xa1\x1f\x4f\xef\xbc\x58\x93\xdd\x36\xa1\x08\x2d\x55\xc9\x25\x75\xd4\xf7\x0c\x0a\x29\xa8\xb4\xda\x07\x81\xa7\x0e\x07\xcc\x40\x4d\x97\x4d\x5f\x87\xbe\xde\x00\xb2\x96\xa2\x6b\xdb\xb9\x1f\xb8\x78\xec\x10\xcb\xd9\xda\x2c\xe2\x18\x23\x79\x50\x6c\x2e\x92\x3e\x5e\x8d\xed\x24\x15\x9c\x71\x50\x34\x97\xfa\xae\x52\x0a\xce\xa5\x4e\x80\x1a\xb4\xf7\x62\x9d\xa4\x24\x41\x5a\x5d\xae\xee\xd0\x15\xaf\x4a\xb6\x46\xc1\x19\x32\x84\x94\x76\xb1\xcf\x47\x6d\x98\x24\x94\xa5\xcb\x03\x47\x6a\xbd\x44\x15\x97\x22\x1a\x92\x2a\x4a\x3a\x4b\x44\x7b\x82\x04\x54\x52\xf2\xd7\x56\x96\x4d\x07\xb8\xeb\xfe\xb8\x85\x7a\x57\xc2\x7e\x40\xef\x50\xfa\xed\xcf\xbf\x6e\x20\xc3\x90\xd4\x5d\xb3\x6a\x33\xe3\xea\xfe\x1a\xcd\x63\xef\x9d\xf2\x4e\xf6\x80\xc0\x22\x43\xc5\x23\xcf\x66\x23\x39\x4d\x80\x2e\xf5\x9a\x0c\xa9\x2d\xa3\x1f\x74\x09\x65\xfd\x1a\x52\x5b\xf0\x6f\x90\x69\x1b\xa8\x29\x6b\x9f\x6d\xf1\x5b\xf3\x26\xaf\x71\x06\x89\x3a\x3f\x30\x15\xf2\x47\x5b\x3e\xd5\x2f\x6a\xf6\xce\x75\x27\x7a\xa5\xc1\x49\x68\x46\xd9\x37\x3c\xd2\x55\x1d\xbc\x1c\xa3\x09\xda\x60\x5c\x88\x32\x3d\x7e\x60\x58\x47\x58\x1a\x40\x8e\x62\xef\xdf\xba\x47\x03\x78\xd2\x91\x64\x2b\x7d\x6f\x9d\x41\x76\x6d\x0b\x75\xd2\xd3\xc3\xe3\xa7\x45\xa1\x4b\x74\x27\xec\xc7\x08\xca\xff\x15\x1f\xdf\x60\xe2\xd4\x3c\x3a\x3e\x18\x0e\x8b\x8f\x7f\x61\xb0\x68\x7b\x30\x48\x0e\x53\xa7\xed\xf7\xc3\x61\xfb\x76\x8c\x05\xb2\x25\x86\x47\xf2\x7f\x6a\x94\x80\x99\x55\x2f\x14\xcd\x37\xc6\xf7\x05\x25\x7c\x96\xb5\x3e\xb8\x9d\x1a\x0e\xa3\xe8\xc4\x41\xc7\x29\x53\xc6\x3b\x39\xee\xc2\xa7\x2e\x71\x94\xe3\x67\xeb\x67\xa9\x8b\x16\xb4\x81\xc8\xc5\xd0\x29\x53\x27\x62\x9a\xba\x44\x64\x0c\xca\xfd\xa5\xf5\x61\xc6\xa6\x59\x01\xf1\x28\x39\x44\xe8\x68\x79\xc1\x32\xd8\xc3\xe8\x30\x1a\x74\x8b\xd2\x7f\x85\x23\x06\x89\xa8\x74\xb2\x32\x0c\x6e\xa1\x4a\x2f\xa3\x43\xe4\x82\x53\xbe\xf6\xad\xbf\x30\x84\xc8\x52\x9e\x71\xca\xac\xe6\x9b\x6a\x41\x39\x23\xf3\xa2\xc7\x4f\xa3\xc3\x54\x8f\x34\x9a\x50\x29\x5e\x6e\x39\xd2\xc6\xc2\x58\xf4\xf2\x20\xed\x1c\x47\x45\xe3\x76\xcd\xc8\xb9\x00\x9e\xa0\xee\x41\xf1\x3d\x5f\x22\xf2\xb1\x3f\x39\x8c\x0e\x0e\x8b\xcf\x7a\x79\xaa\xd0\xf3\x93\x56\x8f\x14\x0f\x87\xed\x1b\x8c\x6e\xcb\xe7\x9c\x5f\x66\x09\xa9\x4b\xae\xf7\xaf\x30\xca\x52\xae\x6d\x4c\xaf\xcf\x62\x0f\x2b\x2b\x0a\xa6\x84\xb7\x29\xc9\xe6\x9e\x39\xf7\x34\x25\x2e\x73\x7f\x38\x1e\x5f\xe5\x55\xaf\xee\x9f\x13\x42\x85\x36\x76\xeb\x62\xef\xcc\x8c\x9a\x11\xe1\x81\x77\xe8\x36\xf6\xba\x1e\x78\x9f\xa5\xea\xaf\x0a\x69\xed\xbd\xa3\x04\x79\x8b\xbe\x29\x9a\xc0\x64\x8c\x8a\xb6\x2c\x6c\x64\xbe\x9f\x6b\x33\xe9\x07\x73\xa3\xbd\xdc\x27\x05\xef\x65\x8a\x05\x92\xac\x53\x7e\x06\xda\x3a\xa1\x8b\x56\x3f\x2e\x16\x60\xf9\xfe\x5d\x10\xe2\x3d\xc9\xe6\xb1\xf0\x97\xe2\xf9\x5c\x5f\x67\xe5\x06\xd5\xce\x91\xc1\x55\xfe\x70\x91\x05\xcb\x00\x9c\xa1\x4c\x2e\x88\x9a\x50\x47\x51\xfe\x9f\x01\x93\x03\x79\x9e\xa6\xfa\x48\x70\x09\x94\xd7\x52\xda\xbe\x91\x1b\xac\x02\x74\x1a\x45\x8f\x85\xf4\x56\x45\x3e\x50\x50\x52\xdd\x35\x55\xdd\xfc\x2e\x8d\x9f\xe4\xf4\x0c\x7d\x0f\x64\x2a\xbd\xd9\x08\xde\x7a\x82\x95\x5f\x6d\x04\xd4\xa1\x5d\x13\xd9\xce\xd4\x35\xb2\x54\x51\x0e\xa5\x58\xfc\x33\x52\xcd\x81\x69\x81\xe6\x33\xee\xf3\xf0\x5c\x26\x55\x68\x15\xed\xa6\xb6\x7e\xa1\x3b\x38\x51\xfb\xe8\xda\x75\xcb\x69\xbc\xb2\xfc\xd8\x2a\x8d\x8b\xdb\xba\x65\xef\x2d\x12\xf0\x8a\x12\xd4\x37\xe8\x0c\x33\x74\xdb\xa2\x37\x88\xb5\xc4\x18\xb5\x92\x59\x72\x4d\xe9\xff\xc7\x5b\x44\x05\x1c\xdf\x6e\x5e\x4a\xc8\xe2\x96\xe6\x90\x07\x98\xa5\xbc\x45\x49\x0b\xb6\x6e\x31\x43\xcd\xd0\xf2\x25\x96\xa1\x14\xf3\x86\x25\x76\x29\x1e\x78\x02\x47\xf9\x90\xa8\xca\xf1\x41\x78\x68\xda\xc8\x9f\xbb\x1b\x8f\xaf\xdc\xd6\xfe\x31\x81\xd3\xab\xa8\x7f\x95\x0e\x72\x0c\x8e\x0f\x4e\x72\xae\x39\x3e\x78\x7a\x5a\x85\xd6\xb7\x3b\x09\x19\xe2\xd1\xca\x75\x1f\xac\xdf\x8e\x3e\xfc\x96\x4f\xa2\x82\x57\x8f\xb6\x60\xd1\x33\xcc\xaf\xdf\xfe\x6c\x60\xe4\x00\x36\x9e\x36\xef\x3f\x5c\x3c\xb2\xea\x5b\x75\xb1\xc3\xb6\x7c\xd4\xb1\x9b\xe9\xd1\xf1\x32\x8a\x9d\x23\x4e\x67\x4c\x59\xdd\x36\x1f\xf1\xb7\x3f\xe3\x62\xa1\x59\xb6\x6b\xe4\x2d\xbc\x43\xe2\x96\x4a\x31\x6f\x73\xf8\x6f\xe0\x00\xe5\xeb\x46\x3a\x58\x0d\xfe\x6c\x4e\xe0\x04\x27\xad\x0f\x94\x89\xc6\x81\xb7\xe5\x2b\x73\x67\x1b\x24\xf3\xb5\x34\xaa\x2f\xcf\x9f\x07\xcb\x7c\x15\x1b\x2c\x6d\x60\x2d\x9e\x4e\x8d\x25\x2f\x36\x9f\x02\xcf\xd3\x94\x21\xce\x9d\xb5\x16\xce\x04\x35\x9d\xd4\x3f\x37\xe2\x48\xf9\xaf\xbb\x32\xb4\xf3\x05\xd4\xae\x0d\xf9\x9b\x8d\xc0\x49\xdc\x1b\x79\xa3\xa0\x5b\x59\x5c\x34\x6e\xc5\xdb\x8c\xca\x25\x1c\x71\xb7\xcb\x5b\x2e\xbd\x4e\x75\x17\xd7\x6d\xb0\x74\x40\x8c\x32\x3a\x90\x3b\xa8\x82\x91\x3f\x34\x21\xaa\xeb\x2c\xe7\xfe\xc7\x0c\x79\x05\xf3\x35\xbd\x7e\x41\x27\x13\x48\xd2\x47\xd5\xfd\xcb\xf9\x87\x17\x76\xa8\x1e\x59\xff\x37\x8e\x2e\xdf\xe4\x2b\xe7\x10\x66\x3c\x27\xbd\xf9\xbd\xa1\xcc\xa2\xee\x5e\x5f\x28\xd7\xc2\x47\x75\xa5\x22\xf5\x74\x6a\x82\x54\xe7\x31\x32\x0f\x12\x63\xfa\x38\xd2\x3a\x33\x10\x66\xea\x98\x46\xcf\x61\xfd\x7b\xb3\x59\xa7\x0c\xe7\x8f\x68\xbb\x3a\x5d\xb7\xac\xcd\xa8\xa0\x09\x7d\x5c\xe5\xcb\x37\x17\x17\xd7\x78\xfa\x57\xc4\xf0\x70\xfe\x89\x4c\x71\xa9\x9d\x7a\x0c\x94\xa7\x35\x29\x76\xfb\xf1\x94\xc5\x0c\x38\x91\x4c\x0d\x1c\xf5\xab\x69\x6e\xbf\x18\xa3\xe4\x7a\x1b\x5d\x76\xdd\x73\x59\xd7\xdd\x40\x20\x72\xf4\xf3\xce\x63\x44\xd1\x6b\x34\xcf\x05\x39\xed\x9a\xf1\x08\x18\x0c\xa5\x56\x50\xc6\x7c\xbc\x5a\x28\x50\xcb\x6d\x77\x9b\x65\xbf\xa2\x3e\x75\xb7\xec\xa2\xab\x3c\xd5\xe7\xfc\x23\x35\xf3\xce\xc9\x67\x51\xcd\x87\x10\x67\xab\xc9\xb5\xde\x6a\xb2\xb9\xd4\x84\x47\x4c\x39\xb9\xd5\xa6\xdc\xa6\x3d\xbf\xc0\x7f\x20\x2b\xc3\x1e\x6c\x8d\xf8\x85\xc0\xc9\x75\xd3\x94\x5f\x82\xfb\xcb\xe9\x18\x4d\x10\x83\x99\x94\xda\xd7\x08\x90\x8f\xd5\xf4\xce\x18\x56\x61\x3e\xb4\xd0\x42\x55\x3c\x80\xed\xb0\xfa\x2f\x9c\x65\xe5\x75\xe8\xd1\x4c\xf6\x46\xe5\x60\xfa\x94\x01\x1a\xcf\x44\x4a\x6f\x89\xcb\xf3\x6b\x74\x80\xcf\xa2\x53\x6e\x3b\x27\x97\x69\x92\x52\x7d\x5c\xd5\xd9\x15\x4a\xe4\xc6\xd3\xa0\xd0\x21\x8f\xb6\x1e\xa0\x46\xf5\x71\xe3\x25\xa4\xae\x3e\x6e\xbe\xcc\x96\xd4\x47\xa5\x34\xae\x59\x35\x3e\x55\x75\xfc\x11\x35\xc7\x6d\x1e\xd7\x58\x95\x2b\xe7\xbc\xf5\xac\x9e\xcb\x0f\x03\xca\xce\xa8\xed\x8f\xb3\xc9\x80\x7e\xbb\xa3\x45\xb7\x3f\x3f\x43\x76\xd6\xe0\x82\xda\x70\x12\x63\x2e\x9d\x48\x61\xc7\xf8\x83\x76\xa2\xe2\x2e\x8a\xb8\xa5\xf9\xeb\xae\xfb\x7a\xcc\x90\x2d\xef\xbc\x1f\xd2\x19\xcb\x5f\x1f\x1c\x7d\xea\x59\xcb\x72\x97\xe9\xaf\x7c\x93\x14\x4f\x10\xbb\xc4\xc9\x35\x8f\x23\x7d\x0f\x5d\xee\x02\x6c\x49\xc4\xd7\xc2\x93\x4a\xd5\xf3\x80\x0a\x6a\xa5\x65\x8a\xb2\x43\x28\x26\x09\x53\x6e\x1e\xb6\xcf\x5e\xd1\x94\x17\x2c\xc0\x51\x14\x05\xc1\x42\x39\xf9\x61\x82\x85\x17\x2c\xbb\x19\x91\x64\x08\x32\xdb\x88\xea\x81\x82\xa4\x7c\x3e\xab\x5c\x31\x9b\x3c\x96\x2d\xfa\xca\x77\xf7\xdb\x70\xd9\xc1\xd2\xe6\xff\x86\xc5\xf8\x85\x8e\xfc\xb3\x79\x4f\xca\x57\xee\x3b\xd1\xca\xfb\x5c\xd5\x2b\xee\xdd\x68\xab\x4b\xed\x07\x51\xd3\x45\xf6\x25\xd8\x9c\xab\x15\xb5\x1e\x88\xc7\x65\x8d\xba\x77\x53\x13\x85\xdf\x42\x31\x0e\x19\x9d\x91\xd4\x3f\x8a\xfe\x5d\x3f\x41\x92\xd2\x89\x1f\x04\x8d\xb4\xdf\xb0\x82\x3b\x2a\x2b\xab\x7c\xda\xf4\x6f\xb8\x81\xfd\x75\xa7\x3d\x35\xa1\x62\xcb\x7e\x09\x95\xa3\xf1\xaa\x17\x41\x83\x0f\x40\xed\x0c\xdf\x7d\xa1\x52\xa5\xf4\xc1\x04\x92\x79\x1e\x9a\xf6\xca\x7b\x2f\x07\xd1\xbb\x94\x23\xe3\x5d\x6a\x72\x7b\xaf\xd4\xd2\xea\xbd\x52\x26\x03\xef\x02\xdf\xc9\x7f\xd1\x8d\xba\xca\xf8\xd2\x78\x83\xbd\xc3\xba\xa2\x7e\x99\x99\xaf\x97\xb7\x28\x53\x95\x2e\xc7\x98\x09\xe5\x15\xa0\xa0\xe5\x3f\xf1\x50\xfd\xea\x97\xef\x11\x14\x87\xce\xaa\xab\x68\xf1\x29\x83\xf9\x91\x53\xf2\xd5\xce\xcd\x97\x8d\xa7\xec\xc4\xc5\x04\x66\x59\x7c\x3f\xa4\x34\xf6\xd4\x9e\x42\x66\xb2\x74\xdc\xe9\x1e\x1c\x1e\x1d\x3f\x3d\x39\x05\xd6\x13\xec\x2a\x1f\x70\x60\x46\x1a\xe4\x43\x0c\x9c\xb1\x05\x76\x50\x81\x19\xcd\x3e\xd0\x57\xbe\xd4\x26\x11\xfb\x04\xdd\xb6\xce\xa0\x40\x41\x28\xe8\xeb\x8b\xf7\x3a\x03\xb6\x1f\x00\x82\xb8\x40\x69\x7c\x4f\x07\x1f\x63\x4f\x05\x80\x5a\x00\x42\x09\xba\xc3\x5c\x20\x62\x2e\xaa\x8c\x67\xe3\xd8\x84\x02\xc4\xfc\x92\x49\xc4\x3b\x0b\x20\x11\x79\x03\xd9\x08\xc5\xf7\x17\x82\x4e\xe3\xdd\x0e\xd0\x69\x3b\x0b\xf3\xe4\xbb\x22\x5b\xac\xbd\xf1\xfc\xfa\x2c\xf6\xf8\x9c\x67\x74\xe4\x81\x0f\x50\xf6\x50\xbe\xf1\x8c\x20\x96\x7f\xd1\xd2\x91\xce\x75\xe3\x81\x0f\x0c\x53\x86\xc5\x3c\x3e\x8a\xc0\xf3\x2c\x7b\x2e\xde\x93\x44\x76\x02\xc8\xa5\x2a\x51\x2e\xa3\x92\x52\x69\xd2\xf1\x80\x97\x26\x5d\xaf\x0f\x24\xd5\x04\x83\x98\x34\x1e\xe7\x95\x1b\x53\x46\x8d\xb8\x63\x24\x34\x89\x0e\x1c\x8d\xe4\x70\xa0\x4e\x04\xde\xc2\xbb\x0f\x90\xc1\x2c\x43\x59\xdc\x01\xbf\x20\x98\x89\xb1\x32\xc3\xc4\x5e\x22\xff\x70\x0f\xbc\xc5\x44\xbf\x9f\x2b\x62\xab\x6a\xe6\xc5\x19\x82\x69\x86\x09\x8a\x0f\x50\xa7\x03\x3e\x30\x3a\x62\x88\x73\xfb\xf6\x58\xbe\x7d\x3e\x13\xf4\x1c\xdd\x20\x26\x24\x4a\x2f\x20\x81\x6c\x2e\xc5\x19\xa3\x3f\xeb\xee\xbb\xf8\x5c\xdd\xbf\xb9\x54\x0e\xc1\x92\x6e\xe7\xc5\xcf\xf7\x53\x24\x97\xbd\x58\x5d\x45\xc1\x24\x11\xff\x18\x53\x2e\xb8\x9c\xd9\x25\xb5\x3e\xbe\xcf\x4d\x1c\x72\xcb\xc9\x37\x6c\xdd\x45\xa5\xc9\xc5\xdd\x23\x74\x0a\xde\xd2\x14\xe5\xa7\xa9\x0b\xab\xf1\x96\x49\xa7\xd5\xd9\x42\x93\xfd\x8d\xcb\x27\x49\x52\xa9\x38\xc5\xf7\xb9\xe2\x15\x5f\xdd\x8b\x64\x1a\x1f\x47\x1d\x30\x4b\xa7\xf1\x51\xe7\x70\xd1\x07\x4a\xb3\x93\x33\x20\x83\x03\x2c\xf6\x35\xcc\x36\x19\xc5\x99\x14\x94\x25\x2b\xbe\x24\x37\x1a\x7d\x63\x12\x36\x63\xa9\x58\xdc\x0c\x2b\x9a\x4c\x33\x2b\x57\xd7\x87\xdd\x6a\x26\xf1\xfd\x8b\x0f\xbf\xc5\x47\x51\x04\x72\xe5\x26\xee\x1e\x1d\x03\xad\x61\xc5\x11\x90\xda\x52\x1c\x01\xa3\x68\x48\x4c\xcf\x90\x8a\x75\x22\xb1\x79\x7d\x76\x2e\xff\xbe\xfe\x20\xff\x55\x7a\x8b\xa4\xdc\x39\x52\x17\x51\x52\xa9\x35\xa8\x51\xd1\x5b\xd3\x2c\x9d\x7a\xe0\xaf\x6a\x81\x90\x78\x82\xfc\xbd\xb2\xea\xe9\xf7\xc7\x51\x67\xd1\x07\x46\xeb\xd0\xd5\xb5\x5a\xb0\x90\x1d\x9a\x42\x91\xe4\x51\xf4\x35\x16\x6f\x51\x7e\x55\xcc\xd1\xfe\x63\x39\x48\x6f\xe8\x28\xa7\xf5\x5b\x78\xf7\x0a\x67\x48\x75\xcd\xfc\xd6\x06\x14\x25\xe5\x3c\x67\x02\x0f\xa1\x55\x6b\xb4\xea\x2f\x19\xae\xa4\xc3\xc7\x91\x6a\xe1\x02\x8f\x08\xcc\x62\x4f\xb2\x4e\xc9\x2a\x22\x27\x07\x4e\xae\xe7\xaa\xa2\x06\x7e\x20\x49\x6a\x58\x55\xae\x0b\x45\x5f\xcf\x51\x7e\x01\xc2\xf0\x9d\x51\x7d\xb6\x9d\x67\xb5\x19\x56\x9f\x5e\x51\x7d\x6e\x45\x4b\x27\x96\x4d\x8d\xa4\x7a\x29\x5b\x9d\x20\x81\x54\x3c\xbe\x5f\xf3\x30\x03\xf9\x30\xa0\x54\xd6\x5d\x32\x18\x8a\x0f\x75\xe0\x5e\xcf\x03\xfa\xa8\xa0\xb8\x4b\x6f\x5e\x9c\x21\x9e\x30\xac\x76\x55\x53\x4a\x05\x7b\xe8\x80\xbf\x22\xc6\xe5\xcb\x08\x5c\xcc\x06\x13\xac\x57\xea\xe8\xae\x73\x74\x30\x48\x8f\x8f\x50\x9a\x74\x61\x92\x46\x11\xd0\x59\x70\x54\x44\xda\xb8\xfb\x54\x4e\x4b\x3c\x9c\xdb\xc7\x5f\xe9\xa0\xfc\x66\xf1\xf8\x0d\x52\xd2\xad\x6d\x6e\x39\xba\x2e\xd3\xe9\x41\x5b\xca\x7d\x6d\xb9\xd7\xc0\xcf\x10\x25\x64\x4b\xb7\xe8\x6f\xa4\xf9\xec\xe4\x39\x9b\x24\x59\x94\x37\xfa\x1b\x7c\x83\x76\x44\x08\xd3\x54\xa3\xec\xdf\x0b\x1e\xcb\x6d\x35\x24\xf4\xd6\x0f\x80\x5a\x45\x2b\x02\xe8\x93\xae\xc4\x58\xe4\x01\xbc\x8f\xa3\xbd\x3d\xa1\x62\x49\xab\x8b\x8a\xf9\xfb\xf6\x71\xf4\x99\x34\x2d\xdb\xd9\x0d\x75\xa2\x39\x82\x2c\xee\x46\x9d\xc8\xd5\x88\xf2\x97\x9d\xa6\x97\x5d\x57\x49\xca\x5f\x1e\x14\x0a\x52\xf1\xf2\xd0\xbc\x3c\x72\x5f\x1e\x99\x97\x27\xee\xcb\xe3\xbc\xa1\x52\xfd\xa7\x79\x4b\xa5\xf6\x4f\xf2\xa6\x0e\xb5\x32\x66\x31\x7e\x8b\xb3\xf4\x51\x18\x37\xa1\x7c\xda\x84\x72\xa7\x11\xe7\x4e\x23\xd2\x9d\xce\x51\x03\xd6\x9d\xe8\xa8\x01\xed\xd3\x26\xac\x4f\x8e\x1a\x90\x3e\xad\xe0\xfc\x17\x38\xfd\xe2\x03\x6d\xce\x86\x3e\xf3\x50\x57\xa0\x6e\x39\xd6\x72\x2a\xae\x47\x5a\x56\xe1\x28\xa1\x24\xe5\xaf\xd4\xda\xb5\x2a\xba\x8e\x9a\x42\xba\x98\xef\xfd\xe9\x97\xf8\x4f\x6f\xe3\x3f\x5d\x78\x9b\xa4\x9e\x59\xba\x9e\xd2\x51\x9b\x0b\x86\xe0\xe4\xdb\xe9\x1b\x13\x9a\xa2\x4e\xec\x71\x91\xaa\x03\x03\xcc\x3f\x64\x70\x8e\xc9\xa8\x13\xef\x46\x80\x2b\xc7\xb7\xf7\x33\x31\x9d\x89\xd8\xbb\x50\x4f\x2d\xaa\x1e\xff\x4e\xfe\xdc\xea\xc8\x7f\xba\xf2\x9f\x83\xbf\x93\xab\x28\x8a\x3b\xdd\xf8\xe8\xa4\xdf\x7a\x43\x47\xa6\x54\x6b\x8c\x18\x32\xdf\x8e\xe2\xee\x69\xbf\x75\xf5\xf2\xfc\xbc\xdf\xfa\x6d\xdc\xa2\xe3\xbf\x93\x37\x14\xa6\x98\x8c\xc2\xe2\x97\xfb\x33\xfc\x3b\xf9\x3b\x69\xb5\xfe\xfc\xe7\xd6\x19\x25\x68\xb7\xf5\x1f\xff\x21\x5f\x78\xa6\x57\x3a\x32\x70\xde\x29\x95\x7a\x47\x7e\xbe\xea\xf5\x7a\xbd\x87\x76\xc3\x7f\xfd\x56\x37\xfa\x93\x2c\xb2\xbb\xbb\xdb\xfa\x8d\x30\x94\xd0\x1b\x93\x19\x46\xd5\x8e\x75\x73\x2f\x20\x21\x54\xb4\x12\x4a\x04\x26\x33\xd4\x1a\xa0\x39\x25\xa9\x8a\xec\xd0\x52\x61\xc1\xc3\xd6\xcb\xbb\x04\xa9\x0d\xbb\xc5\xc7\x74\x96\xa5\xad\x01\x6a\x25\x70\x36\x1a\x8b\x50\x42\xb8\x94\x45\x31\x6f\x49\x30\xb0\x35\xc1\x5c\xc0\x6b\x14\xb6\xfe\x87\xce\x5a\x29\x4e\x5b\x9c\x4e\x90\x18\x63\x32\x6a\xdd\x32\x4a\x46\x61\x4b\x89\x31\xda\x93\x8f\xa6\x48\x81\x78\x47\x41\x6b\x4e\x67\x2d\xb9\xbe\x2b\x38\x4c\x87\x53\x69\x41\x32\x6f\x4d\x28\x43\xad\x14\x09\x88\x33\xde\xa2\xac\x35\x9a\xe1\x14\x92\x04\xb5\x86\x8c\x4e\x54\x47\x25\x08\x85\x53\x6b\x82\x38\x87\x23\xa4\x48\xb9\x5d\x88\xb9\x12\xa7\x4e\x66\x99\xc0\x26\xe2\xc3\xf7\x63\xf4\xe8\x6c\x7a\x6b\x48\x97\x6f\x77\x3c\x60\xcc\x43\xda\x8a\xd1\x7a\xaf\x4f\xf3\xdd\x32\xdd\x6a\x99\xcb\x5b\x5a\x2d\x73\x50\x2b\xa3\xcc\x1f\x95\x52\x87\xd5\x52\xca\x38\x52\x29\x74\x54\x2b\x84\x6f\x74\xb4\x24\x60\xe3\x6b\x6c\x80\xa6\xd3\x7b\xa7\xf9\xa2\x11\x09\xcf\x10\xed\x2d\x24\xd5\xa0\xcf\x75\x80\xe6\x7a\x66\x27\x8a\xcc\xb5\x4c\x75\xdf\xbf\x62\x7b\x29\x6e\x1c\xde\x97\x71\x70\x6e\x1d\x02\x17\x59\xf7\x36\xa2\xba\xfe\x6f\x51\xdc\xa8\x53\x57\x0e\x16\x85\x66\xbf\x29\x0f\x4c\xd3\x3b\x87\x01\xf4\x53\x3e\x18\x1f\x87\xd7\xce\x37\xfd\xe4\x7e\xeb\x96\xbe\x75\xed\xb7\xc9\x2c\x71\xea\xe9\xa7\xf2\xd8\x6d\xd3\xcf\xbc\x1b\xa6\x11\x07\x5b\x65\xee\xd8\x10\xcf\x81\x8e\x71\x65\xfa\xf4\xb3\x7a\xca\xfb\xcb\x73\xcf\xa9\x3c\x32\xab\x79\xb6\xdf\x8d\x41\x25\xff\xac\x1f\xf3\xaf\x36\x27\x2c\xb0\xe1\xc7\xcc\x0b\x5b\xc2\xd5\x95\x8a\x62\xa5\xb7\x65\xfa\x6c\x86\x99\xed\x98\xc5\xc0\x21\x8e\xd1\xab\x36\x65\x83\x3c\x64\x5a\x25\x84\x5a\x8e\x82\xd5\xce\x2a\x51\xd2\xf2\xef\xa9\x8a\x7b\xe6\x06\x41\x2b\x23\xb4\x69\x6f\x3e\xc9\xec\x3c\x35\xca\xec\xff\xd2\x13\xa7\x0e\x3a\xf8\xf4\x13\x27\x44\xe8\x04\x13\x28\x68\x6d\x66\xae\x3e\xc4\x68\x39\xa7\x09\x1d\x74\x50\x3d\x4e\x08\xf2\xc8\x33\x70\x54\x63\xec\x2d\x00\x47\xd5\x73\x8a\x7d\xa9\x86\x04\x40\x87\x83\x6c\xea\xb4\x83\x90\x07\xbc\xa2\x13\x6b\x5a\xd2\xc1\x7c\x8a\xba\xff\xae\x5e\x14\xd5\xff\x5d\xee\x01\xa6\xf1\x0c\xdf\xa0\x33\x2d\x77\xac\x69\xde\x76\x73\x6d\x57\xf2\x60\xf6\x6e\x60\xc4\x8d\x60\x05\x9f\x32\x81\x4c\xc2\x0d\x3c\x41\x6d\x8e\x18\x46\x7c\xa5\x41\x03\x78\x13\xda\x98\x45\xe7\xf3\x65\xb8\xfd\xba\x73\x2c\xb7\x5c\x4c\x90\x60\x38\xe1\xbf\xe0\xd1\x18\x90\x5e\x6e\x6c\x78\x26\xae\xac\xdd\xa1\xd3\xd7\xc1\x67\xe2\xf0\x74\x07\x99\xa8\x0b\x97\x17\xca\x4a\xe9\x0b\xa0\xf8\x68\x82\x89\xaf\x7f\xc0\x3b\x9f\x3c\x09\xa3\xa3\x32\xeb\xb6\xc3\xa8\x7b\x04\xc2\xa3\x00\x74\x4c\x82\x2e\x58\x34\xfd\x86\xde\x02\xde\x83\x79\xcb\xf0\x0a\xd6\x5b\xee\xd4\x5a\x86\x0d\x2d\xf3\x65\x2d\x47\x81\x6c\xbc\x71\xd9\x28\x41\xfd\x9c\x39\xe4\x0f\xa2\x48\x76\xda\x31\x04\xe1\x09\xe2\x02\x4e\xa6\x15\x7b\xd0\x0c\xc5\x42\x71\x85\x01\x4f\xf6\xf6\x50\x61\xfe\xc9\x5f\xb7\x49\xb0\x34\xde\xe0\x8a\x35\xce\x19\xde\xcd\x84\xab\x62\x50\x36\xd4\x9d\x05\x14\x38\x79\xab\x6b\xad\xa8\xa2\x59\xb4\x7e\x6a\x57\x4e\xdd\x14\x84\x7c\x36\x10\x0c\x26\x2a\x88\xd1\xc4\x0b\x42\x41\x25\xb5\xfc\x60\x61\x03\x9f\x16\x74\x44\x7e\x37\xca\x49\x18\x1e\x2d\x40\xe9\x53\xe7\x64\xf9\xa7\x63\xfb\xe9\xb0\xfa\xe9\xd0\x7e\x3a\xa8\x7e\xea\xda\x4f\xa7\xd5\x4f\xd1\xd2\x5a\x27\x4b\xbf\x2c\xef\xc4\xe1\xd2\x9e\x17\x5d\x38\xae\x7c\x89\x9c\x2f\x9f\xdf\xa6\xd1\x98\xd3\x7a\xd9\xca\xaa\xcc\xd7\x6d\x9d\x81\xcc\x44\x18\xf9\x76\x12\x4a\x11\xe9\x3d\xd6\xd2\x9b\xf2\x98\x4d\x11\x9a\xba\xcf\x52\x9f\x8e\x3d\x2e\x66\xea\x26\x3b\x94\x9a\x4f\x7c\xa5\x7d\x14\xb4\xe3\x41\xee\x4d\xa0\x3d\x87\xfa\xe0\x06\xb1\x79\x7c\x5f\x80\xb9\xc7\x24\x91\x1b\xd6\x28\xbe\xa7\x04\xc5\x1d\x20\x6e\x69\xdc\x05\xaa\x56\x7c\x00\x64\xad\xd8\xe3\x33\x36\x65\x98\x63\x32\xca\xe6\xad\x8c\x92\x51\x4b\xe1\xd5\x12\x63\x28\x5a\x98\xb7\x66\x24\xc3\xd7\x48\x99\x01\xa8\x18\x23\xd6\x2a\x22\x22\xb6\xb0\xde\x27\x5b\x54\x27\xe1\x59\xa8\xff\x1e\xbd\xf9\x89\x7a\xf2\xe3\xef\x38\xe8\x09\x47\x90\x25\xe3\x4b\xc4\x26\xb1\xe7\xe5\xa7\xd6\x1f\xa4\x74\xd5\x01\x9c\x32\x2b\x24\xc6\x1e\x51\x17\x18\xe4\xbb\x33\xc4\x13\x2d\xd7\xc7\xbb\x1d\xc0\xc7\x94\x09\x95\x8f\xd7\xf2\x3d\x90\x03\xa0\x5e\x5d\xdd\x27\x58\x56\x7e\x87\x6e\x5b\xff\xa3\x5c\x08\x47\x8c\xde\x8a\x71\x1c\x46\x87\x27\x60\x4a\xa7\x33\x1d\x84\x35\xf6\x4e\x0e\xa3\xa3\x93\x83\xa7\x1e\x60\x90\x5c\x2b\xf7\x76\x1d\x8e\xb4\xa8\xba\x00\x06\xd8\x1b\xca\x5b\xcf\xc9\x08\x65\x52\xb0\x58\x06\xef\xe0\xe4\xe4\xf0\x20\xb2\xf0\xba\x16\xde\x0b\x98\xe1\x21\x65\x04\xc3\x02\xe2\x8b\x31\x4e\xe0\x88\x5a\x68\xed\x30\x3a\xee\x94\xc0\x75\x9f\x76\x4e\x9e\x9e\x74\x73\x70\x07\x16\xdc\xeb\x2c\xc3\x84\x62\x5e\x00\xfb\x85\xce\xb8\x8a\x05\x9b\x77\xad\x53\x01\xd5\x39\x3d\x3a\xed\x1c\xe6\xa0\x0e\x2d\xa8\x4b\x74\x07\x1d\x38\x1f\xc6\x38\x83\x29\xca\xa6\x63\x0c\x1d\x3c\xbb\xc7\x25\x68\x9d\xa3\xa3\x83\xce\xf1\x51\x0e\xed\xc8\x42\xfb\x80\x08\xe1\xf3\xec\x06\x96\x30\xfd\x30\xa6\x88\xe0\x3b\xa7\x73\x87\x15\x70\x9d\x83\x83\x63\x4b\xb6\x63\x0b\xee\x39\xc3\x7f\x50\xe2\x40\xba\x80\xa4\xf5\x9c\x08\x4a\x70\x41\xb7\xb0\x5b\x46\xb5\x73\x18\x9d\x46\x9d\xd3\x1c\xda\xd3\x65\xa8\x4a\x58\x67\x18\x39\x23\x10\x76\xa2\xa3\x32\xa8\x83\xa3\xa3\x93\xd3\xe3\x1c\xd4\xc9\xca\xf1\x3c\x83\x59\x06\x5d\xe6\x38\xaa\x10\xad\x7b\xf4\xf4\xf8\xa9\x05\x76\xba\xaa\x5f\xbf\x52\x8e\x96\x77\xeb\xf4\xf4\xe4\xc8\xe1\xda\x68\x65\xb7\x9e\xcf\xb8\xc0\x0e\x63\x1c\x74\x9e\x96\xe7\xc0\xc9\xd1\x61\x14\x59\x60\x9d\x65\xdd\x7a\x4d\x52\x0c\x09\x9c\xd2\x0c\xbb\x48\x3e\xad\xce\xa8\x83\x83\xd3\x03\x0b\xad\x98\x01\xa6\x7a\x01\xef\x57\x98\x5c\x73\x4a\x6e\x70\x96\xb9\xa8\x1e\x1e\x54\xe0\x75\x8f\x4e\x0a\x78\xc5\x14\x78\x95\x51\x86\xd3\x0a\x6b\xbc\x62\x90\x24\x98\x27\xd4\xed\x60\x05\xdd\x83\xa7\x87\x87\x76\x4a\x75\x0e\x57\x4f\x51\x9a\xcd\x26\x83\x19\x77\xfb\x57\xc1\xb7\xdb\x3d\x3a\x2a\xfa\x57\xcc\x84\xf7\x63\x4c\xdd\xb9\x0e\x59\x46\x85\x70\x30\x3d\x38\x2d\xb3\xed\xd3\xd3\xee\xc9\x71\xd1\xb1\x62\x12\xbc\xa3\x4c\x8c\x5b\x2f\x20\xa3\x19\x76\x09\xf8\x8a\x32\xd1\xfa\x9b\xfc\x58\x00\x3d\x3c\xaa\x01\x7d\xda\x2d\x38\x65\xe9\x5c\x38\x43\x82\x51\x2c\x9c\xb5\xa8\xfb\xb4\x0c\xe9\xf8\xe4\xe4\x69\xd4\xb1\x90\x8a\xa9\xf0\x16\x27\x63\x3c\x82\xa4\x00\xf6\x32\x6b\x7d\x80\xdc\x9d\x56\xa7\xe5\xf9\x7e\xfc\xf4\xf0\xf0\xa0\x20\xda\xd2\x99\xf0\x16\x4d\xa6\x63\x87\xdb\xda\x61\x74\x54\x66\x8f\xe3\xa3\x83\xc3\x23\xcb\xbc\xdd\xc8\x81\x44\x08\xe2\x5c\x9b\x70\x0d\x83\x20\x28\x44\x89\xd7\x2a\x13\xf4\xf8\xa8\x7b\x18\xd9\x45\xad\x5b\xcc\x84\xbf\x41\x3e\xc6\x64\x24\xd7\x57\x87\x62\x44\xdd\xea\xb0\xc0\x8e\xcb\x7c\x76\x7c\x78\x7a\x78\x5a\x00\x73\xb6\x02\x9a\x51\x06\x53\x87\x39\x1c\xf0\x05\xb8\x0a\x9e\x87\xc7\x87\x87\x76\x49\xeb\x16\xd3\xe0\x4c\x39\x72\x26\xa2\x45\x87\x2d\xcd\xad\x2e\xff\xfe\x4c\xcb\x9b\x42\x54\x1d\x88\xc3\xa3\xd3\x63\xbb\x22\x75\x8b\xc9\xf0\x16\x72\x0e\x93\xf1\x8c\x23\x21\x9c\x01\x79\x07\xf9\x58\x4d\xd8\xf6\x19\xbc\xc1\x29\x2f\xf5\xf8\xb8\x5b\x86\x7d\x70\x78\x78\x6c\x37\x9c\xee\xd1\xaa\xa1\xf9\x19\x66\x02\x4b\x99\xcd\x1d\xea\x4a\x57\xbb\xdd\x4e\x54\x80\x3b\x76\xba\xca\xe6\x19\x24\x69\x01\xed\xfd\x75\x06\xc7\x74\x02\x5b\x2f\xb0\x98\x3b\xdb\x44\x54\xe9\x60\x27\x3a\xee\x58\x2e\xec\x16\x73\x23\xaf\xef\x6e\xfe\x33\xcc\x15\xe2\xfb\xbf\xa2\xe1\x10\x31\x4e\x49\x4b\xf9\x90\x39\xf0\x2b\xf3\x25\x3a\x3d\x29\x16\xc2\x6e\x31\x5f\xfe\x0b\x11\x31\x4b\xae\xe7\xce\xf6\x48\x99\x50\x18\x38\x9c\x59\x85\x75\x78\x54\x0c\x53\x31\x5f\xde\x33\x34\x72\x99\xf2\x0d\xe4\xad\xbf\xa2\x91\xbb\x0b\x75\x0f\xab\xb0\x0e\x0e\x4f\x4e\xac\x48\x11\x39\x22\xcf\x0d\x74\xd7\xd3\xb7\x38\xbb\x85\xb3\x6b\xe4\x4c\x98\x28\x2a\x73\xe5\xd1\xe9\x69\xa7\x18\xe2\x03\x67\xc2\xc8\x35\x98\x70\xec\x74\xed\x79\x36\x98\xfd\x3e\x43\xec\xf7\x99\x03\xb0\x7b\x50\xee\xdc\xd1\xd1\xb1\x33\x69\x0e\xba\x25\x79\xec\x2d\xba\xc3\x89\x33\x6d\x2e\x67\x49\x89\x01\xa3\xa7\x15\x60\xdd\xe3\x4e\xc7\x52\xed\xe0\x60\xb9\x54\xf1\x8a\x21\x4e\xdc\xf5\xea\xa4\x82\x67\x74\x7a\xda\x2d\xf0\x5c\xbd\x67\x5c\xc0\x84\xc1\x09\x22\xc2\x05\xf8\xb4\xcc\x7a\x87\x4f\x4f\x8f\x4f\x8a\xae\x1d\xad\x04\xf8\x46\x2a\x16\x3f\x23\x98\x38\xeb\x7c\x54\xe1\x90\xc3\xe3\xd3\xc3\x6e\x31\xaa\xc7\x2b\x01\xfe\x17\x24\x1c\xf2\xca\xec\x88\x8e\xaa\x10\x9f\x46\x85\x24\x7b\xf0\xd4\x59\xef\x39\xa7\x33\x86\xdd\x65\x9a\x43\x77\xe5\xaa\x00\x3a\x7a\x7a\x74\x52\x00\x3a\x59\x3e\x0c\x7f\xc5\x6c\x84\x09\x86\x35\x64\x2b\x9b\xda\xe1\xe1\xc9\xe1\x53\xbb\x18\x1e\x14\xd3\x21\x07\xe0\x70\x9d\x9c\x58\xc2\x95\x64\x2b\xab\xd4\xe1\xe1\xd3\x93\x43\xbb\xad\x1d\x16\xd3\xe1\x2f\x88\xb2\x51\x45\x16\x50\xeb\x76\xeb\x62\xca\x30\x19\xb9\x53\xac\x22\xce\x1e\x1e\x9c\x9e\x14\xa3\x7b\xd8\x59\xb1\xf4\xbf\x9f\xc0\xb1\xdb\xbb\xa3\xd3\x0a\xa4\xc3\x83\x42\xba\x38\x74\xe7\xc3\x80\x41\x7e\xed\x74\xef\x1c\x66\x08\x8f\x5c\x51\xe0\xe4\x69\x05\x56\xe7\xe9\x61\xd1\xab\x83\xb5\xf2\xc5\x5b\x0c\x27\xd8\x95\x7c\x2a\x7d\xeb\x3c\x3d\x2e\xb6\xde\xc3\xc3\xe5\x92\xd9\x7b\x78\x5d\x5e\xde\xa2\xca\xee\x76\x18\x1d\x77\x1d\x34\x57\x4f\x87\xb7\x98\x10\x54\x13\x43\x2b\xab\xdc\x61\x14\x45\x4f\x8b\xce\x39\xbb\x85\xac\xcd\xa9\x80\xee\x3a\x92\xb9\xfc\x5b\xed\xdc\xc1\xe9\x49\xa7\x5b\x70\xc8\xaa\x6d\xe2\x45\x86\x6e\x50\x09\xd5\x76\xd8\x39\xe9\x54\xc0\x45\x9d\x62\xd7\x39\x3c\x59\x22\x30\xfe\x4d\x4a\x55\x25\xc6\x3d\x7d\x5a\x51\x35\x8f\x8f\x8e\xac\xb8\x78\x58\x4c\x02\x3d\xbb\x9d\x29\xc0\xb2\xba\x70\x51\x41\xf1\xe9\xe9\xd1\x53\x3b\x45\x8f\xa2\xaa\x3c\xd6\x07\x3a\x54\x37\x4a\x2f\xac\xde\x5d\x3d\x2c\x28\x74\x7a\x0f\x78\x56\x3d\x0f\xaf\xfa\x4b\xf2\x2d\x87\x45\x85\x50\xd0\x37\xf4\x16\xb1\x17\x90\x23\xdf\xa6\x17\xd0\x85\x2c\xa0\x6a\xb0\x70\xe1\x58\xbe\x08\x9c\xa0\x32\x90\x10\x93\x24\x9b\xa5\x88\xfb\x48\x47\xa5\xe7\x94\x89\x95\xdd\x2f\xf5\xd8\x73\xad\x10\xe6\xb1\x30\x40\x2c\xc5\xc8\xc2\x90\xe5\x7f\xd6\xe9\x60\x42\x17\x54\x05\xb9\x12\xd4\x67\x28\x64\xe8\x06\x31\xd9\xfd\x18\x6d\x99\x5a\xa9\x6c\x0c\xc2\x13\x94\xa9\x1b\x19\xae\x3d\xa8\xf1\xbc\xe3\xcb\xdb\x7a\xe6\x88\x0b\xc4\x52\xb8\xde\x17\x40\xf9\x46\x36\x59\x8e\x3b\xc0\x4b\x75\xac\x70\xfa\x08\x38\x5b\x52\x52\x5f\x64\x68\x8f\xcd\x3d\xe9\x6f\x65\xe6\x74\x72\x9e\x95\x7b\x14\xef\x46\x80\x92\x5f\xe0\x64\x30\x63\x23\xc4\xea\xe9\x9d\xb6\x32\x22\x8e\x66\x42\x20\xd6\x9e\x20\x32\xfb\x76\xb8\x6a\x4f\x80\x65\x99\xb0\x18\x9d\x15\xae\x16\xb5\xaf\x7a\x5e\xdb\x5b\x27\xf5\x43\x4c\x0d\x5c\x2d\x11\xba\x84\x49\x1e\xa1\x2d\x8b\x75\xe6\x71\x32\x71\x57\x6b\xaa\xd3\x0b\xed\x45\x13\x3c\x3c\x5c\xf5\x03\x35\x83\xfd\xa6\x33\x26\xa4\x41\xa8\x46\x02\x00\xf3\x74\xd0\xfa\xd9\x2c\x02\xf6\x82\x4c\xaf\xd7\x23\xcf\xda\x9d\xd8\x7d\x01\x9f\x75\x62\xf2\x1f\x50\xbe\x26\x7f\x96\x0f\x91\x5a\xc6\x56\x8e\x3c\x18\x51\x41\x7f\xa5\x03\xfe\x8a\xb2\xe2\x1e\x8e\x3b\x92\x68\x6f\xcf\xf4\x0c\xa7\x5e\x60\x72\x61\x69\x02\x3b\x91\xc4\x2f\xa9\xca\x9d\xc7\x3d\x70\x2f\x25\xf6\xb9\x72\xf6\xe0\xf1\xbd\xa5\x44\xec\x00\x59\x2c\x82\xed\x58\x4e\xf2\x71\xbb\x31\x83\xa5\x2d\x2d\xf2\x1b\x1e\xaa\xf0\xd7\x77\x3e\x2f\xd2\xd8\x4e\x68\x8a\xb2\x25\xb9\x6f\x15\x22\xca\x7e\x1e\x00\x9d\xd4\xf0\x91\x41\xbc\x15\x20\x0d\xa1\x31\x3d\x53\x86\xd5\xe4\x5f\x56\xe5\x07\xcc\x59\x89\x6f\xe6\xed\x84\xa6\x68\x82\x75\xda\x79\x17\xe9\xf2\xb7\x15\xb5\x7e\x40\xbc\x3f\xd2\x41\x3b\x45\xd3\x8c\xce\xab\x59\x6d\xbf\xee\x8a\x5b\xca\x71\x55\xed\x94\x57\x8e\x23\xdf\x07\xc5\xc7\x3c\x55\xd5\xfb\x29\x22\xf1\x6e\x67\xab\x79\x5f\x6e\x66\xbf\xf8\xd9\x36\x47\xd4\x3f\x5c\xc6\xe6\x32\x46\xbc\xc1\xef\xfb\x9b\x49\x5d\x16\x23\x9a\x55\xd2\x47\x5a\xe1\xd0\x1d\xd7\xcd\x9c\xdb\xcc\x66\x7b\xb6\xbc\x9a\xe7\x80\x34\xfb\xec\x8d\xbe\xf2\x54\xdc\x77\x5a\xea\x31\xe4\xd6\x35\x02\xb4\x57\xaf\x1d\x14\x52\xf2\x22\x00\x50\x07\x02\x59\xdd\xa9\x5a\xb7\xcb\x5d\x5b\x2a\xce\x57\xab\x2d\x49\x7c\x46\x8a\xc4\x67\xf7\x8b\x1d\x3c\x54\xf9\x62\x60\xa0\xf4\x81\xdb\x33\x28\x50\x6f\x37\x2a\xb2\x51\x66\x3d\x14\xea\x33\xdf\xe7\xc2\x87\xed\x4e\xa0\xb7\x52\xd3\x17\x29\xf4\x5a\x4c\x01\xed\x11\x23\x8a\x38\x6f\x77\xe8\xde\x5e\xb6\xb7\x57\x96\x72\xb3\x40\x27\xe0\x7f\x3f\xf4\xbd\x14\xce\xbd\x20\x4c\xf1\x70\xe8\x97\x0b\xd1\x6a\x21\x20\xff\x70\x2f\xf8\x73\xb4\xb7\xe7\x97\xfa\x1b\x2c\x8c\x17\xb0\x3b\xf7\xc1\x04\x09\x18\xf3\xc5\x62\x5b\x99\x5a\x4d\x14\x3c\x1c\xb6\x87\x2a\x80\x4b\x1b\x92\xb4\xad\x69\xf0\x83\x4e\x7a\x3c\x1c\x7e\x4f\x8b\xb7\xec\xce\xb2\x84\x84\x3a\xdc\x4c\x8c\x79\x1b\x99\xf8\x6f\x1e\xe6\x2a\x3e\x8d\x7c\x07\x75\xa0\x1a\x0f\x73\x13\x2f\x54\xbe\x4c\x4d\xe8\xd0\x3e\x90\x90\xf5\x9a\x7f\x83\xd8\x80\x72\xb5\x0b\x5a\x98\x95\xbc\xfe\xe8\xf7\x19\xcc\x7c\x4f\xd6\x09\x75\x8c\xbb\x3c\xd6\x4d\x00\xf2\x26\xd7\x57\xd1\xa1\x73\x64\x8d\xbc\x47\xeb\xeb\xe4\xb1\x4e\xb7\xf3\x1e\x94\xa4\x93\x34\xa9\x0a\x20\xf5\x0c\xaa\x35\x67\x0a\x73\x05\xa3\x3d\x64\x74\xd2\x86\x29\x9c\x4a\x25\x0a\x69\x59\x66\x45\x16\xcc\x8c\x26\x30\x6b\x73\x41\x19\x1c\xa1\x6f\x91\x7d\x78\x75\xce\x61\xed\xe1\xb3\xec\xab\xa3\x91\x3a\x94\x93\x0c\x61\x13\x75\xe7\x0b\x75\x25\xdd\xb0\x94\xf5\xef\x6a\x26\x97\xfb\x25\xd2\x94\x4a\xb5\x67\xea\x2c\x00\x77\x0b\xb9\x09\xa7\x0a\xbf\xc8\xbc\xb0\x07\x44\x00\xa4\x10\x06\xf2\x37\xba\x57\x53\xc8\xb8\xb9\x5a\xa4\x9f\x33\x48\x9c\x47\x36\x23\x95\x8f\xe6\x72\x94\x4e\x4f\x3b\xa6\xb7\x1f\x32\x48\xde\xea\x11\x8f\xfd\x08\x40\x27\x1b\xa7\x1a\x6b\xf3\xed\x57\x3a\x90\x25\x75\xfe\x39\x59\xef\xa5\x22\xd1\x66\x35\x5f\x1a\x46\x54\x75\x1b\x1d\x8d\x8b\x9e\x2d\xdd\x41\x8b\x22\xcf\x54\x71\x2f\xf6\xcc\x30\x2d\x02\x85\xd9\xd6\x29\x75\xd5\x4a\x04\x20\xb0\x7b\xdf\x97\x48\xae\xcb\x90\x1c\x47\xc9\xcb\xaa\x64\x27\x4f\xab\x7b\x08\x6c\x9a\x75\x35\x86\xbe\x4d\x9b\x6b\x0a\x74\xba\x3b\x03\x86\xe0\xb5\x7e\x7d\x5c\xe4\xd0\x55\x70\x8e\x01\x0a\x45\xd4\x43\x61\x02\x65\x3f\x3a\x01\x10\xbd\xb2\x77\xa2\xfc\x1e\x3c\x3c\x78\x2f\xd4\x8d\x2f\x42\x45\x4b\xb5\xd3\xc2\x44\x51\xb9\x60\xb1\x82\x85\x34\x93\xa9\x0f\x09\xa3\x59\x76\x49\xd5\x6b\xd5\x7b\x38\x60\xb3\xa9\xf0\x3d\xa3\xde\x9b\xde\x76\xba\x95\x7e\x75\xba\x39\x82\x9d\x23\x07\xc3\x0c\x92\x1c\xc1\xce\x51\x0c\x7b\x28\xe4\x88\x08\xb7\x13\x0e\x03\x40\x9b\x7b\xb8\x7b\xe8\xd2\xa0\x73\x1a\xe7\xad\x9c\x4a\xf4\x3b\x05\xfa\xdd\x00\xf0\x3a\xfe\x9d\x0a\xfe\x19\x24\xad\x8f\x74\xe0\x55\xda\x35\xb8\xf3\x66\xdc\x75\xdb\xdd\x4d\xd2\x19\x83\xab\xab\x0e\x38\xee\x83\xab\x4e\x17\x74\x4e\xfb\x7d\x95\xde\x38\x65\xb2\x0c\xd0\x52\xce\xf7\xc3\xa3\x78\x98\x7f\x88\x80\x47\xd0\xad\xb7\xdb\x33\x69\x41\xf5\xf2\x12\xdc\x9b\x31\x38\xd6\x43\xb0\xb0\x48\x57\xd9\x97\xcd\x48\x8d\x79\x4f\x96\xf0\xae\xfe\x58\xd4\xd5\xd9\x50\xf3\xea\x27\xb1\x49\x4d\xaa\xe4\x42\xc3\x38\x98\xbc\x4e\xb5\x99\xa9\xf4\xc5\xda\x6b\xb4\xb1\x4b\x8e\xb4\xd5\x6c\x4b\x13\xcf\x64\x7b\xd7\x8b\xb7\x4a\xe4\x6b\xb9\x2b\x2a\x71\xd7\xa1\xe5\xae\xc3\xf2\xe4\x8a\x1a\x99\xab\x32\xb9\xf4\xf8\x56\xd9\x2b\x5f\x7f\x1d\xee\xaa\x72\xbb\xc9\x4c\xbb\x9c\xf3\xa2\xcd\x38\x2f\x02\x9d\x43\xcd\x72\x40\xa1\x5e\x4b\x44\xbb\xb2\xe5\xca\x5c\xa8\x7d\x72\xd6\x88\xea\xb7\x02\x47\xf5\x65\x01\x4a\x68\xd4\xba\xa1\x46\x50\xef\xc6\x21\xe6\x97\x88\x0b\x39\x78\x3a\xb7\x9e\xa5\x80\x1f\x81\xa8\x62\x7a\x5b\x97\x34\x5e\xee\xdb\x53\x38\x42\xfb\x70\xc0\x95\x69\xfd\x7b\xb5\xf9\x5a\x89\xa2\xe4\x0d\x6a\xdf\x38\xbe\xa0\xea\xdd\x88\x0a\x6a\x83\xfd\x34\x9a\x44\xcb\x2f\x95\xa4\x96\xef\xcb\x24\x4f\xc7\x4d\x09\x8f\xb5\xeb\xfd\x4b\xf7\x7b\x23\x8f\xb8\x10\xec\xa0\x8e\x55\xc2\xc3\xca\x90\xa2\xe5\xd5\x50\xb0\xa5\xcb\xaf\x1d\x3f\x73\x21\xb0\xd1\x78\xba\x72\xbc\xbf\x94\x1d\xa2\xf0\x3e\x37\x03\xbc\xad\x7a\xa8\xba\x59\xba\x6b\xd8\x4e\xc6\x38\x4b\xb7\x40\x32\xbf\xcb\x68\x2a\x7e\x35\x54\xef\xa7\x26\x54\x4c\x45\x51\x81\x19\x86\x5c\xaf\xc4\x29\x4a\x68\x8a\x52\x13\x53\xc6\x0b\x80\xa9\xf2\xeb\xc5\xfb\x77\x75\x41\xcf\x94\xaa\x99\x25\x76\x04\x9b\xdf\xa3\x9e\xac\x64\x04\x22\x2d\xf5\xe9\xf2\xc1\x42\x2f\xc5\x22\xb8\xb7\x1b\xd1\x23\xf4\xf4\xfa\x40\xfc\x53\xf2\x99\xe0\xfb\x8a\x4d\x18\x5a\x96\x2b\x74\x82\xef\x30\xe1\xfb\x72\xbd\x51\xce\xf5\x5f\xd9\x84\x57\xf8\xb5\xdf\xdb\xd5\xb0\xa4\xf9\x57\xad\xb4\x9b\x2d\x95\xae\xb3\xbd\x5d\x3b\x6b\x0b\xa4\xa4\xd2\x05\xfe\x43\xc5\xa7\x14\x45\x14\xb5\x2a\xa7\x4a\xd6\x2e\x3e\x57\xcf\xfa\x2b\xb7\x01\xab\xc5\x3d\x75\x86\xb6\x08\x40\x3e\x0e\x8d\xe0\xf3\x8f\x1b\x01\xb7\x23\x9a\x83\xce\x30\x17\x97\xf4\x82\xb2\xaa\xf6\x99\x4f\xce\xa2\x86\x31\x6e\xbe\x68\xee\x4c\x5e\x5e\x02\xbc\x50\x05\xbd\xc7\x4f\x2d\xc1\xf7\x51\xf5\xdc\xe3\x5b\xd9\xbe\x1a\xf6\x42\x4a\xce\x30\x9f\x60\xce\x1f\x7f\xac\x5c\xc1\x56\x07\x77\x5b\x72\xf2\xf1\xa9\x06\x97\xaf\x7f\x81\xd3\xce\x47\x87\x8c\x8d\x7b\xbf\x9c\x4a\x98\x5f\x8c\xe9\x2d\x26\xa3\xc2\x90\x9c\xdf\xb7\xdd\xed\x80\x29\xa3\x13\x2a\xd0\xe3\x74\x9e\x2f\xa4\x93\x5b\x9d\xc7\xe8\x00\x07\xa0\x3c\xcb\xf4\x68\x16\xe8\x84\xf9\x61\x6e\x10\x1a\x74\x72\xb9\xfc\xc0\x2a\xea\x25\x35\xe2\x28\xd7\x22\x8e\x6a\x4a\x84\xdf\xa8\xa2\x07\x7b\x7b\xde\x2b\xca\x06\x38\x4d\x11\x51\x5a\xd8\xc3\x83\x2f\x7a\xde\xff\xd0\x19\x6b\x3d\x7f\xf1\xa6\x25\xe8\x35\x22\xad\x94\x22\x1d\xa1\x45\x27\x2c\x9d\x22\x26\xb9\x58\x92\x4c\xd0\x96\xe9\x5a\xcb\x3d\x65\xf0\x8c\x8c\xee\x0c\x9e\x7f\x6f\xb2\x00\x6b\xb5\xe5\x1d\x15\xad\x0f\xa6\xe6\x99\xc3\xbe\xa9\x13\xe1\x4d\x2c\x72\xb5\x7d\x63\x35\xe4\x48\x6b\x21\xd5\x2b\x79\x2b\x43\x80\x57\xe6\xd4\x34\x83\x89\xba\x51\xdf\x1e\x42\x9c\xcd\x18\xfa\x86\xa6\xf4\x86\x09\xf1\x29\xcb\x05\x43\x2a\x53\x3f\xcc\x32\x9a\xe8\x20\xef\x2b\x6f\xb6\x25\x3a\x04\xf3\xbe\x1c\x61\xcc\x51\x5b\xdd\xf6\xfb\xea\x27\x6e\x9b\xef\xcd\xde\xa4\x08\xde\x57\xbf\xdb\x16\x99\x8d\xe8\x79\x81\x7d\xe3\xc6\xe8\x50\xc7\x1c\x67\x95\xc0\xd6\xb7\x4a\x82\x6e\x8b\xa3\x6a\x95\x78\x5c\x52\x2b\x2e\xcf\x6d\x97\xe6\x41\x28\xc6\x88\x34\x04\xe6\x95\x4c\x6d\xce\xe7\xdc\x36\x9d\x93\xb9\x90\x9b\xdb\xce\x47\x81\x3e\x2c\x2a\x14\x2c\x29\x6f\x14\xb8\xd5\xf5\x24\xd7\x0d\xe5\x9c\xce\x04\xf2\x3d\x17\xd5\xe2\x77\x83\xfe\xb4\xe5\x26\xcc\x67\x13\x9d\xdf\xfa\x9b\xcf\x9b\x95\xcc\x83\xf9\xcb\xbb\x29\x24\xf5\xe3\x93\xfa\x75\x6c\x63\x22\x50\xe7\x0c\x17\xfa\x98\x21\x54\x84\xd0\x10\x7e\xa5\x83\x0b\x8d\x73\xbe\x75\xc8\xd6\x7b\x3d\xf4\xf0\xe0\x28\x15\xc8\x44\xbc\xe0\x98\x57\x6d\xef\x1b\xc3\xef\x19\xc3\x25\xa1\x02\x0f\xe7\x39\xe9\x5e\x8c\x21\x19\x21\xdf\x2b\x30\xaa\xde\x4b\xde\x72\xa5\x90\x3b\x66\x7b\xa4\xc5\xc9\xff\x4d\x52\xfc\x0a\x83\xc7\x17\x17\xd7\xd7\xca\xd4\x6e\x1d\xb3\x98\x5d\x2e\xeb\xd4\xe7\x96\xab\xd5\xe6\xfd\x63\x4b\x97\x8e\x50\x59\xec\xab\x4a\x26\xd1\x91\xb9\x97\x09\x9a\x52\xce\x90\x8a\xdc\x77\x29\x4a\x1a\xa3\xf5\x47\x3a\x70\x0e\x77\x8c\x68\x94\xdb\xc5\xad\xc5\x5b\x99\xca\xb8\xc9\xc2\xa7\xa3\x33\x59\x83\x74\x59\x92\x7c\x9a\x4b\x92\x4f\x6b\x92\xe4\x06\x82\xdd\x85\xa0\xd3\xd6\xaf\x74\x50\x16\xe7\xb6\x92\x2a\x25\x06\xad\x8f\x74\xc0\x43\x6f\x7b\x29\xf0\xa9\xb1\x45\x2b\xa7\x8c\x47\x0f\xdd\x97\x3c\x9d\xab\x8d\xda\x01\x10\xe1\x10\x89\x64\x7c\x0e\x6f\xcf\xe4\x0c\xc0\x9a\xff\x72\x79\xdf\x54\xd4\x1e\x04\x7e\x7e\x88\x15\x84\x92\xd4\x72\xc0\xd5\x79\x2d\x41\x4e\x5d\x0f\xa8\xad\x87\xab\xf0\xf4\x78\x38\xf7\x61\x60\x4f\x02\x8f\xf3\x66\x4f\x81\x28\x1f\x01\x9e\x56\xce\x4b\x3a\x1d\x20\x2a\x27\x25\x9d\x4e\x2c\x2a\xac\x94\x07\x02\x2b\xb8\xe9\x74\xb3\xe3\x8d\xe3\x00\xf8\x8d\xe7\x1b\x35\xcd\x84\x3f\x3c\xf8\x7c\x3b\xcd\xc4\xe1\xa1\x0d\xd9\x16\x32\x51\xe7\x5b\x6e\x19\xf0\x74\x33\x06\x3c\xb6\xa7\x21\x5b\x85\x06\x59\x66\x6f\xfd\x9e\xad\x84\xf7\x72\x94\xd3\x84\xcd\x26\x83\xe6\x6d\x51\xf9\x36\x03\x9c\x2e\x3c\xe0\x99\xf3\x66\xb9\x26\x3b\xaf\x9b\x7d\xc4\xe4\xd4\xa8\x1d\xc8\xa9\xba\xd6\xcd\xdb\x66\x48\xf9\x55\xb9\x54\x43\x36\x32\x7e\x3b\xdc\xeb\xdb\xe4\x26\xa2\xec\x2f\x5e\x94\x09\xf5\x69\x59\x51\xd2\xb8\x5e\x0b\x86\x27\x13\xed\xf8\xde\x54\x01\xf5\x6b\x49\x50\x36\xdf\x49\x6d\x4c\xc0\xef\x79\x44\x57\x7a\xb2\xac\x38\xe0\x19\x52\x96\xa0\x37\x70\x46\x92\xf1\xaa\x88\x5b\x72\x20\x55\xd1\x3c\x20\xa2\x1f\x98\xb5\xa0\x14\xd7\xae\xe1\x54\xa7\x3e\x61\x5f\x49\x38\x2d\xdd\xe6\xa7\xec\x35\xf6\xf8\x54\xed\x36\x8b\x60\x01\x3e\xe1\xb4\xea\x91\x9a\x93\x0d\x37\xf9\x1d\xf3\xc6\xe3\x10\x33\xe1\x28\xff\x89\xf0\x62\xf4\x76\x09\x3e\x63\x94\x49\x05\x6f\x3f\x83\x7f\xcc\xdb\x49\x86\x93\xeb\xaf\x1f\x03\x68\xd5\xfc\xb5\x32\xb0\x60\x15\xf7\x65\x8b\x97\x87\x79\x1b\x13\x81\xe4\x10\xe0\x1b\xa9\xd8\x39\x6e\x68\x0d\x77\x63\x92\xf2\x2b\x14\xdc\xeb\x58\xfc\xf0\x8f\xb9\x2a\x1d\xf8\x57\xc6\x0d\x42\x3d\x02\xd4\xdf\x32\x0c\xb8\xec\x99\xf5\x28\xfe\xd2\x16\x85\xab\x3c\xc5\xa0\xf5\x7d\xb4\xce\x96\x7d\xb0\xa1\x91\xaa\xd4\xe1\x9a\x22\x6a\xbe\x54\x3c\xfe\x5d\x3f\xd0\x44\x69\xf3\x3a\x93\x4e\x75\x4f\xcd\xdd\x99\xb5\xa7\x6c\xf3\xde\x59\xf2\x7b\x56\x05\x03\x20\x7a\x28\x2c\x94\x45\xa9\x71\x5a\xa7\xeb\x67\x99\x8f\x82\x27\x22\x64\x28\x9d\x25\xc8\xa7\x20\x0a\x9e\xf8\x22\x9c\xc0\xe9\xcf\x73\xdf\x53\xb9\x6a\x3c\x73\x2d\xcb\x14\x81\xc0\x79\x90\xe5\xe3\xc8\xb5\x44\x09\x3a\x1a\x65\xe8\x0c\x0f\x87\xb5\x55\x53\x7f\x2a\x62\x95\x6a\xfc\xbd\xda\xaa\x69\x54\xb9\x46\x07\x45\xe4\x44\x46\x06\xdc\x2d\x43\x9c\xab\x23\xf6\x9e\x2a\x51\xce\xac\xc1\x33\xf4\xa4\x13\xa3\xc5\x8e\x95\xf3\x33\x27\xb4\x1e\x0a\x75\x06\xcc\x12\x96\x5c\x11\x02\x85\x26\x85\x65\xe9\x9b\x44\x7a\x61\x41\xd1\xb2\x03\xe5\x33\xf4\x24\xf3\x45\xa0\x32\x6c\x6d\xca\xd9\x3f\xde\x25\x87\xbc\xe3\x9b\xdd\x70\x70\xd8\xdb\x5e\x2d\xf8\xeb\x12\x08\x39\xef\xd6\x2c\x29\x0e\x8f\xdb\x22\xb9\xc1\x94\x37\xde\x64\xf8\x32\x37\x0b\x00\xed\x55\x6e\x09\xd4\x6f\x13\xd4\xae\x04\xb0\x4a\x9d\x86\x1b\x08\xd5\x3a\x3b\x54\xdf\x36\x60\x1b\xdc\x27\xb0\xcb\xca\xe3\x2f\x13\x7c\x0f\x29\xdd\xca\x0b\xa9\xd3\xa3\xbe\x4a\x92\xa6\x57\x4d\x95\xf7\x4d\xd4\xc3\xfa\x7e\xe4\x95\x4b\x27\x66\xf4\x2b\x8a\xb0\x96\x43\x39\x25\x4a\x62\x03\xdd\x6d\xa3\xe3\xae\x48\xed\x63\x43\x5b\x9b\xc7\x04\x4a\x7a\xc8\x9f\xf0\x0e\x9b\x32\xfa\x18\x45\x7f\x1f\xc3\xa9\xf9\x6e\xc3\xe7\xd6\xe2\xe9\x56\x4d\xae\xda\x56\xdc\x66\x88\xe3\x3f\x74\x74\xc2\x15\x9e\xf1\xea\xee\x7a\x5b\xe3\xde\xe0\x18\x0f\x38\xc8\x00\x05\x0c\x60\x30\x0b\xee\xed\x82\x96\x3a\x67\x12\x53\x1f\x05\x0f\x0f\x2e\x0f\xe0\xa1\x7f\x31\x9f\x0c\x68\x16\x62\xa1\x6d\x22\x2d\x4c\x5a\x26\x7a\xab\x2c\xec\x5d\xe9\xe9\xd2\x7a\x9e\xc7\x79\xed\x7b\xbd\x5e\xcf\xf0\xce\x94\x51\x41\xc5\x7c\x8a\x42\x41\x75\xf2\xbc\x30\x81\x99\x5c\x8e\x03\x37\xa0\x7e\x38\x64\x74\xe2\xa3\x60\xa1\x40\x4e\x7c\x67\xbd\x4d\x4a\xeb\x6d\xb5\x83\xc5\x65\xe1\xab\x3e\x80\xbd\xdd\x08\xf0\xde\x6e\x07\x64\x39\x03\x0a\x36\x57\xb6\x1a\x59\x86\x02\xd6\x43\x57\x15\x6c\xfa\x7e\xf0\xd3\xae\x0f\x7b\x3e\xed\x31\x65\xce\xf0\x83\x20\x4c\x29\x41\xc1\xde\x9e\x4f\xc2\xe9\x8c\x8f\x7d\xaa\x03\xee\x06\x60\x57\x3c\x3c\x10\x13\x7a\x76\xb7\xd7\x13\xc1\x4f\xb2\xc9\xe0\x27\xe3\x34\x84\x83\x7b\x2e\xbb\x90\xf5\xf0\x62\x88\x09\xcc\xb2\xf9\xbd\xec\x00\x7c\x78\xd0\x47\x04\x2c\xd4\x68\x3c\x3c\xe4\xbf\x24\xa6\xa6\x24\x1e\xfa\x3c\x10\x63\x46\x6f\x5b\xd9\x22\x77\x3e\x22\x0b\x85\x63\x85\x26\x13\xb5\xc5\xca\x92\x04\xdd\xb6\xe4\x96\xa7\xcd\x1c\xde\x6b\x72\x03\x33\x9c\xb6\xa0\xce\x53\x27\x15\x9e\x14\x71\xc1\x66\x89\x98\x31\xd4\x22\x94\xb4\x15\xe2\x83\x0c\xb5\x30\xe1\x02\x92\x04\x79\x0e\xe0\xa9\x19\x72\x3d\x28\x98\xeb\x7b\xda\xc5\x60\xa1\xc5\xe7\x59\x13\x86\x3d\xc7\x04\xe7\xec\xa6\xb6\x53\x74\xa8\x19\xe3\x99\x92\x4d\x7c\x14\xb8\xb9\x4a\xa5\x2c\x30\x58\xb6\xaa\xe0\xe2\xb0\xa0\xb4\xbe\x98\x39\xec\x39\x13\xba\x0f\x52\x98\xa7\x24\xbb\x93\xb8\xe8\x9f\xf3\xe2\xa7\x8a\x25\xab\xe2\x60\x4b\xb1\x4d\xd5\x52\xb9\x6a\x63\x29\x38\x4f\x19\xd6\x27\x5f\x46\x57\x7d\x83\x09\x6a\xbd\xd0\xcd\xb8\xfa\xa9\x82\x74\x8b\x53\x31\x8e\x23\x30\x46\x78\x34\x16\x71\x04\x30\x7f\xae\x64\x6e\x09\x78\x88\xb3\xec\xf5\xfa\x14\x4c\x4e\xdf\xdb\xb2\x4a\x91\x37\x42\xd7\x1c\xcd\x70\xfa\x8a\x32\xb5\xe6\xa9\x88\xeb\x13\xc8\xaf\xb7\x84\x2b\xab\xac\x85\xab\xb5\x05\x9d\x8c\xd8\x1a\x06\xcc\x0b\x9d\xb4\xaf\xba\x5a\x3b\x05\x96\xed\xf2\x4e\x11\xb9\x4b\x23\x1b\x8d\x5b\xab\x14\x6a\x80\xfa\xa5\xd0\x1f\x77\x26\x40\xaf\x8d\xed\xac\x87\x2a\xd0\x69\x34\xdc\x4e\xe9\x38\xd6\x9f\xbf\x53\xf3\x7a\xa7\xe6\xa6\x53\x79\x2f\xee\xaa\xc1\x86\x9d\x13\xe0\x67\x2c\x6c\x8c\x37\x3c\xf0\x82\x98\xda\x4f\x43\xf3\x1a\x78\xc1\x02\xcc\x97\xc6\x2e\x6e\xa8\x10\x76\xff\x1f\x93\x95\x04\xa5\x99\xc0\xd3\x0f\x54\x9f\x09\x1b\xde\xd6\x2f\x2f\xe4\xa6\x11\xfb\x11\x98\x39\xf7\x6a\x2a\x15\xbc\x00\xdc\x5d\xc8\xed\xad\x7e\x55\x15\x0a\xa8\x83\xbd\xa8\xf1\xf1\x80\x57\x8c\x83\x07\xbc\xf9\xf3\x3b\xcc\xdf\x0f\x87\x1c\x89\x65\x14\x56\xf5\x72\xf3\x5f\x51\xf9\x99\x35\x12\x87\x6a\x63\x95\x42\x93\x1f\xc4\x95\xb7\x72\xca\x41\xe6\x5b\xaf\x7d\xd5\x1d\x13\x32\x9d\x97\x35\x7f\xc3\x26\xb2\x04\x68\x8a\x7f\x73\x85\xfa\x8b\x20\xbe\x8a\x40\xa7\x18\xcf\x90\x49\xe5\xec\x5c\x2d\x3a\x57\x9d\x48\xdb\x95\x1d\x9c\xfa\x72\xab\x98\x40\x4c\x7c\x18\x00\x29\x49\xdc\x9d\xcb\x0a\xab\xa8\xf4\x2a\xdf\xe9\x9b\xe8\xb5\x15\x85\x00\x29\x70\x06\xb0\x57\x43\x97\x2c\x47\x13\x64\xbd\xf2\x04\xb2\xb2\x33\x54\xcb\x6d\x26\x27\xf9\x7c\x1d\x2e\x73\x8b\xcb\x5c\xe3\xd2\xdc\xfd\xb9\xe9\xfe\x63\xc6\x23\xc7\xd1\x4e\xaa\x62\x68\x64\x3f\x89\xea\xe7\x3a\xce\x34\xbd\xf3\xee\xd6\x33\x63\xbd\xaf\x13\x78\xb7\x49\x47\x1f\x1e\x3a\xb6\x6b\x7f\xee\xec\xed\xf9\xa2\x37\xf4\x45\x10\x80\x25\x0c\x5b\xe2\x2c\x3d\x16\x45\xef\x40\x27\x2a\x38\xeb\x2a\x02\xa2\x2f\xf1\x54\x05\x6a\x68\xea\x79\xb9\x94\x75\x96\xac\x90\xc5\x70\xe7\xbd\x93\x22\xeb\xcf\x54\x08\x3a\xf1\x03\xdd\x55\x5d\x49\xc3\x0f\x42\x81\x93\x6b\xee\x1f\xe9\x1f\x06\xaa\xf2\x71\x98\xeb\x24\x0c\xb5\x7e\x6d\x30\xf3\x1d\x8c\x45\xaf\xab\x53\x14\x24\x08\x67\x3e\xda\xef\x74\xa3\xe0\x49\xc7\x0e\xbf\xea\x44\x4e\x11\x39\xdb\xcb\x12\x60\x2e\xe1\x91\x9e\x94\x16\xbb\xb2\x00\xb9\x8a\xfa\x80\xf7\x7c\x72\xd5\xe9\xb7\x61\xb0\xef\x0b\xa9\xcb\x65\x52\x4c\xa4\xbd\xe8\x27\xfa\x1f\xe2\x27\xfa\xe4\x49\x90\x69\x09\x0f\x3e\xe1\xff\x4e\x2d\x55\xb2\x85\x4f\x40\x31\x27\x14\x08\x09\xef\xcf\x9d\x67\x43\x1f\x06\x31\x94\x68\x37\x8e\xc6\x7c\xe5\x68\xd4\xb8\xb8\x4c\xfe\x73\x29\x19\x94\xa9\x3f\x77\xa8\xaf\xf6\x30\x6e\xde\x2b\xa2\x37\x0c\xc6\x5f\x18\x56\x59\x5c\xb7\xe8\x5a\x5a\x06\xa9\x9d\x8e\x3a\x9f\xd4\x47\xf3\x74\x81\xff\x40\x7e\xbb\xba\x68\x96\x7a\xed\x79\x96\xb5\x7f\xd1\x92\xd1\x72\x61\x05\x0f\xfd\x5d\x05\x0c\x65\xca\x67\x2f\x17\x4a\x3b\x3b\x0e\x8d\xcd\xb7\x50\xc5\xdc\xb9\x50\x1a\x9a\x14\x8c\xc3\x3b\xad\x94\x15\x46\x02\x13\xc4\xe7\xe7\x9f\xe9\x9d\x1f\x84\x5a\x2c\xcb\xc7\xf5\x6f\x4a\x58\xfb\x42\x3d\x99\xaf\xee\x89\x12\x14\x73\x9a\x68\x8a\xd5\xc6\x52\xf7\x36\x5f\xd2\x7e\x31\x4f\x4b\xdc\x50\x74\xe1\x76\x31\xe5\x7e\x29\xe1\xba\xa4\x09\xd5\x8d\x7c\x07\xff\x9b\x7e\x58\xd2\x80\x2a\xea\x0c\xf3\xdf\x0c\x06\x2a\x9b\xf0\x8a\xad\xd0\x30\xe4\x9a\x49\xa3\x8b\xe5\xdb\x9f\x2e\x9b\xaf\x0b\x7a\x67\x84\xce\xda\x6d\xa7\xb0\xe5\x5a\xd9\x0b\x3f\x30\x0a\x4b\xda\xe4\x88\x27\xa5\xa1\xdd\x1e\xba\x82\xfd\x45\x10\xde\x35\x05\xc7\x43\xbe\xb8\x22\x72\x11\x0e\xe7\x4d\x00\x84\x2f\x2b\x07\x8b\xa0\xd8\x29\x94\x94\xcc\x50\x2d\xbf\xe8\xd7\xc7\x5f\xf6\xe2\x33\xe2\x1f\xf9\xc2\x8f\x82\x20\x9c\x77\xb6\xa0\x44\x8a\xd3\xd7\x84\x23\x26\x5e\xea\x39\xb1\xea\xcc\x50\xfb\x1f\x9c\xe1\x09\x22\xca\xe8\xe7\x07\xb5\x93\x1c\x6d\x78\xf1\x57\xce\xb2\x04\x92\x1b\xc8\xbd\xc0\x8a\x86\x1a\xee\xf3\x42\x9e\x0f\x07\xd8\xa4\x79\x0a\x00\xd7\x1d\x20\x2a\x07\xce\x84\xce\x38\x52\xa9\xe9\x9a\xc6\xa4\x90\x0c\x64\x31\x5d\xff\x2a\xea\xef\x98\x53\x42\xed\xd7\xfd\x56\x7e\xfb\xbf\x1e\x40\x01\x80\x3e\x0a\x80\xe6\x02\x36\x23\x61\x9e\xd9\xdb\xf7\xe0\x50\x20\x76\x8e\x88\x8a\x90\xc7\x1b\x26\x97\x81\x98\x2b\x8a\xea\x5a\xbb\x72\x03\x75\xba\x39\xa1\x37\x8d\x9c\xf3\x98\x5e\x96\x21\x67\x08\x56\x40\xaf\x45\x02\x35\x20\x81\x6a\x48\x74\x02\x65\x15\x50\xaf\x4b\x1a\x98\x3e\x52\x0d\x16\x92\x5d\x74\xaa\xf3\xe7\x42\x30\x5e\x3b\x57\x60\xaa\x39\xa5\x68\xfb\xc1\x02\xd4\x06\xb6\xa4\x6a\x69\x75\xcd\x9d\x49\x8d\x73\x47\x7f\xca\x5c\x29\x90\x16\xe2\xb5\x54\xfd\xe8\xde\x1e\x35\xaa\x85\x86\xca\x00\x76\xe4\xc4\x01\xe6\x9a\xf5\x9a\xf4\xbc\x2b\x22\xa7\x56\x86\x86\x02\xcc\x7a\x22\xc4\xe4\x06\x31\xb9\x63\x83\xb4\x87\x7d\x0a\x66\xa0\x13\x80\xa4\x47\xaf\xd2\x76\xa7\x0f\x26\xf2\x47\x7f\x87\xf5\x92\xbd\xbd\xdd\xc9\xb3\x24\x9e\xb5\x93\x2b\xd2\xff\xf3\xe4\x8a\xf4\xdb\xb3\x67\x93\x38\x71\xee\xc4\x96\x08\xc8\xdc\xdb\xb2\x55\x15\x0e\xdc\xcb\xf6\x63\xe1\x33\x39\x95\x81\xa0\xd3\x18\xfa\xec\x2a\xeb\x07\xed\x4e\xb4\x08\x16\x39\x21\x15\x5d\xcd\xb2\x45\x07\x1c\xb1\x1b\xc4\x9c\x65\x6b\xf5\x60\x04\xc0\x79\x5e\x35\xcb\xcd\xb4\x95\x82\xb2\x7c\x9c\xd0\x19\x11\x67\x07\x66\x79\xe0\xbe\x3b\x63\x94\x51\xae\xe4\x2f\xd0\xec\x0f\xeb\xee\x85\xca\x37\xa9\xb1\x94\xb3\x9f\xc9\x42\xf5\x86\x51\x98\xf3\xaa\xdc\x97\x6b\xcc\xe5\xa3\xd0\x9d\x3c\xca\xf1\x07\x54\xa0\xd4\x38\x16\x73\x93\x9f\x0a\xa5\x0f\x0f\xe5\x37\x98\x8c\x1e\x1e\xfc\xed\xd6\xb6\x5c\x96\x09\xb4\x2d\xb5\xd8\xd9\x03\xb0\x1d\xa0\x79\x03\xa0\xf9\xe3\x00\x8d\x72\xc1\xb3\x02\xcd\x0a\xa4\x81\xca\xd4\x45\x52\x7a\x7b\x8e\x38\xfe\x03\xfd\xa2\xdc\xb3\x4a\xee\x97\xc5\x98\x53\x92\xe8\x45\x0b\x34\xee\x09\x76\xd6\x17\xaf\x9a\x99\x2d\xfc\x3f\xbe\xc7\x6f\x46\xe6\x4c\x54\x09\x2a\xbe\x54\x2a\x91\x91\x8a\xfc\xc0\xa6\x86\x73\xf2\xec\xdd\x6b\x63\x9d\xc8\x8d\x75\x64\x11\x80\x06\x66\x2f\x9d\x23\x0c\xd6\x9e\x23\x70\xd1\x86\x49\x42\x59\xfa\x4d\x33\x3f\x95\x6c\xa2\x45\x7f\xfa\x3a\x1f\x2d\x4e\x3d\xc0\xe9\x8c\x25\x1b\xe6\x08\xa7\xe4\x52\x1d\xf2\x56\x9d\x68\x21\x13\xd6\xdd\x7e\xb7\x03\x52\x94\x50\x06\x05\x4a\x2f\x1a\x61\x7b\xba\xc9\x55\x61\x8e\x85\x5c\x99\x60\x32\xb6\x82\xd0\x35\x9a\x03\xd2\xf3\xb0\x40\x93\xd0\x4d\xab\x0b\x6d\x85\xa2\x0b\x66\x7b\x0f\x4d\x33\xa5\xd3\x41\x1e\xd8\x63\xbf\x21\x26\xe9\xcf\x73\x9f\x98\xb5\x67\x84\x84\xcf\x81\x08\x72\x41\xfd\x5e\xb6\x15\xf3\xfc\x18\x3f\x7b\xb6\xbb\x9b\x85\xe6\x01\x4a\x66\xa8\xc5\xd4\x29\x7a\xad\xc2\x32\x70\x93\x18\x4e\xbf\xfa\xfc\x99\x50\xcb\x2c\xb6\x6f\x7f\xb5\x07\x34\xfd\x86\xf7\x33\x1c\x57\xec\xc7\xc5\x3c\x5c\x8a\x97\x8a\x6b\xfa\x9d\xcd\xa4\xb6\x09\xb6\xda\x1c\x47\x4c\xa1\x1f\x63\xde\xce\x8c\x02\x97\x5f\xe2\x50\xc1\x31\x63\xe5\x8d\x63\x5d\x71\x9c\x58\x51\x15\xf0\xf1\x6e\x04\x06\x33\x21\x28\xd1\xd6\x76\x4f\xbb\x5a\x38\x04\x06\x25\xc0\xbb\x11\x50\xcc\x6b\x1d\x7b\x28\xaf\x4c\x59\x4a\x54\xc5\x47\xdf\x55\x55\x63\x34\x85\x23\x4c\xbe\x71\x66\xbb\x6d\x56\x2f\xb9\x0d\xc5\xdd\x23\x75\x51\x3b\xee\x00\x3e\x65\x08\xa6\x71\x57\xaf\x5f\xfc\x79\x43\x7c\x73\xfc\x87\x54\xd8\xa6\xcd\x29\x5b\xf3\x40\x02\x23\xd4\xee\x04\x3a\x5d\xac\xac\xf0\xa4\x23\xb1\x20\x69\x23\xc0\x62\xe1\x5b\x03\xbc\x65\x13\x7b\xda\x56\x8a\x26\x9c\xbb\xa5\x06\xa2\x16\x54\x3d\x75\x5a\x93\x41\xae\xaf\xaa\xaf\x6f\x7d\x49\xb3\xca\x28\xb7\xb4\x8d\x7d\xdb\x0f\x75\xe7\x09\x8e\xd0\x1b\x4c\x1a\x4c\x82\x6e\x73\x1a\x4b\x4f\x93\x7c\xe9\xaa\xaf\xbe\xe6\x2b\xbe\xac\x92\x0b\xef\x39\x4a\x52\x30\xef\xf4\x7a\x3d\x12\xe4\xc3\x6a\x9c\x89\x6c\xf6\xd3\x0e\x10\x6d\x24\x15\x3c\x4b\x3f\x02\xc4\x13\x14\x3c\xb1\xf6\x5a\x7d\xc6\xc9\xdb\x70\xb3\x8c\xee\xb2\x1b\xef\x66\x12\xb5\x18\x3e\x31\xd1\x6a\xb3\xc6\x60\xf8\x0d\xe8\x56\x89\xec\x22\xab\xc6\xb1\x57\x66\x22\x54\x09\x75\xaf\x20\x6a\x0b\x9d\x50\x68\x3c\x66\x8b\x28\xa6\xa9\x7d\xfe\x96\x5e\x20\x8f\xbc\xee\xaa\xba\x5e\xcb\xd8\xf8\x8d\xba\x6e\xfa\x51\x76\x9f\x32\x57\xe5\xb6\x59\x91\x1e\x27\x28\x35\xf0\xc8\xa4\x72\x5f\xc5\x30\xaf\x8e\xc4\x8d\xea\xfe\x42\x9b\x53\x5b\xdd\x02\x6c\x0f\xbe\x07\x81\x42\x8c\x3d\x60\x33\x99\x3a\xfb\xac\xbe\xbf\xd6\xb7\x61\x3a\x18\x9d\x4a\xe9\x63\x6a\xfe\x96\x46\x09\x73\xe3\xc7\x63\x46\xab\x79\xdf\x36\x47\xf5\x98\xb7\xcd\xee\x5c\xcd\x66\x11\xa7\x88\x27\x31\xe4\x89\xba\x6a\x6a\x8a\x57\x47\xcf\xe9\x8f\x5c\x13\xaa\x67\x66\xee\x30\x3a\x45\x7b\x26\x5e\x9a\x2c\xbf\x50\x31\x11\x67\x59\x7a\x51\x6e\xbd\x29\x58\xaf\x9b\x6a\xc3\xb1\xbf\xd4\x1a\xdc\x35\x0a\xa9\x2e\xf0\xf0\xb0\x6b\xf8\xc8\x85\xf0\x78\x6e\xd1\x69\x6f\xbf\x13\x09\x54\xa8\x7e\x7c\x1a\x2a\xdf\x56\xe8\x74\x78\x5f\xf6\x63\x2b\x54\x26\xb3\x4c\x60\xc3\xed\xed\x94\xd1\x69\x4a\x6f\xbf\x17\x4d\xd4\x76\xa7\x0f\xe8\x54\x6c\xee\x6a\x6a\x7d\xf0\x36\xd5\x57\xb5\xd1\xa2\x1a\x5d\x24\x97\x9a\xf3\x6e\x98\x3b\xc6\x70\x2a\x66\x0c\x2d\x09\x43\x56\x50\x10\x69\x9b\xe5\x39\x4a\x10\xbe\xa9\x1b\x2d\x9d\x4d\x3e\xaf\xb3\x63\xe6\x9c\x6c\x77\x6f\x0f\xed\xed\xd5\x6d\xab\xef\x49\x52\xb5\xaf\x96\x8c\x60\xc6\x03\x3b\x64\x68\x6a\x4c\x7c\x2a\x4b\x4b\xd5\x33\xbb\xc1\x18\x8a\x8c\xf2\x6c\x50\x31\x04\x34\x62\x45\xb0\x43\x0a\x77\x6a\x11\x3c\x23\x21\x53\x46\x66\xe3\xf1\x27\x82\x98\x38\xe9\xdb\x45\x11\xf6\x50\x5b\x89\x48\xb0\x00\x74\x8a\xc8\x7b\xf2\x9c\x31\x7a\x7b\x26\x69\x59\x16\xa3\xf0\x50\x8b\x38\x86\xb8\x3e\x32\x20\x34\x31\x1e\x1e\x0e\xa3\xdd\x5e\x4f\xc8\x2e\xbe\xa0\x29\x2a\xca\xe7\xc4\xf2\x4f\x7b\xce\x77\x59\xde\x7d\x0e\x72\x77\xc0\x95\xe6\xaa\x7c\x18\xda\x82\xe1\x91\x14\x7e\x54\xfc\xf0\xe7\xf9\x56\xe2\x7b\x90\x61\xd8\xa6\xb7\x84\xab\x80\x90\x29\x4d\x66\x4d\x70\xfe\xcd\x1a\x1e\x08\xf0\x5a\x05\x54\xcd\xc1\x5e\x10\xec\xc0\xbd\x3d\x1f\x86\x43\x9a\xcc\xb8\x1f\x00\xa1\xee\x45\xaa\xd8\x35\x3a\x7e\x44\x10\x2c\x16\x28\xe3\xa8\x55\x0c\xa7\x24\x9e\x22\x6b\xad\xec\x02\x08\x06\x95\xab\xf3\x9b\x7a\x4c\x01\x3c\xf4\xbb\x4f\x4b\x84\x70\xe9\x60\xd9\x0e\x0f\x7d\x12\xdc\x13\xdb\x5a\x22\x35\x41\x5f\x04\x46\x6a\xde\x92\x68\x12\xbd\x55\xd8\x81\xa6\xc9\x62\x2e\x4e\x29\xb4\xf1\xd0\x3f\x38\xa9\xf7\x9a\xf7\x44\x28\x20\x1b\x21\x0d\x12\xd3\x19\x37\xa6\xd5\x0b\x3c\xc8\x30\x19\xed\x70\xe5\x1a\xbd\x8a\xae\x39\xfc\x0a\x7b\x18\x63\x8f\x85\x4f\xd0\x9d\xa8\xc0\xce\xf6\xf6\xfc\x6c\x3d\xec\x83\xae\x0b\x38\x37\x64\x73\xb9\xb4\x59\x75\x1c\x2d\x19\xf3\xad\x96\x6d\xa5\x0b\xd4\x13\x9b\x7c\xc3\xc5\xda\xed\x91\x14\x77\xfe\xa2\xf2\x1f\x3d\xc6\xb4\x53\x8b\xbf\xf3\x2d\x77\xd6\x3c\x12\x84\x5a\xfb\x65\x7f\x50\x7a\xf9\x17\x15\x65\xc5\x46\xb5\xd6\x9d\x7d\x65\x62\x05\x55\xc3\x30\xc8\x69\x62\xc1\x84\xb5\xe2\x1e\xf0\x4a\x50\xb7\x8c\xb4\x3e\xa5\xb7\x88\xe5\xdb\xb7\xda\xcb\xa7\xcd\x51\x1a\xdc\x82\xeb\x01\xfc\x80\x09\x60\x1a\x11\xd9\xcf\x97\xa5\x4f\xa5\x88\x05\xf4\x83\x53\xe6\xb1\x84\xf8\xd1\xf1\xde\x1f\xa0\x21\x65\xc8\xec\xc2\xfc\xb1\x64\xa8\x82\xf9\x3e\xa9\xb2\x32\xd8\x59\x09\x9d\x4f\x25\xc7\xf7\x4d\x87\xcd\xb9\x43\x2d\xcb\x63\x9a\xa5\x8f\x5f\x2a\x4a\x30\x7e\x78\x7a\xb8\x6b\xa0\x8a\x02\xf5\x78\xb2\xd4\x41\xfd\xe8\xd4\xd1\xf9\x55\xdb\x93\xfc\xda\xff\x23\x29\x53\x01\xf3\xa3\x53\xe5\x13\xb7\xda\x1f\x7a\x87\xd5\x97\x7e\x4c\xba\xb5\x75\x41\xb2\xbe\xfa\x65\x5e\x7a\x6d\xa3\xee\xd6\xb3\x7c\x0a\x28\xf8\x25\x83\xc9\x35\x62\xfc\x1c\x8d\x30\x17\x6c\xbe\x24\x2d\xa3\x2a\xdb\x16\xa6\x70\x9b\x99\xd2\x5e\x50\xb6\x9e\x56\xa8\xd1\x07\x0c\x19\x73\xb7\x92\x98\xf5\x6b\xfd\xdb\x39\xcd\xac\xd4\x92\xe3\x62\x5a\xaa\x19\x32\xf5\xfb\xf4\xdc\x80\xf5\x80\x27\x54\xb6\xa2\x66\xf3\x4a\xa5\x74\xf9\xf0\xa4\x09\x7b\xa9\xf6\x9b\x77\xda\x01\x4e\x42\xaf\x75\x82\xd9\xd6\x9b\x9b\x65\x95\xf6\x94\xe7\x50\x42\x89\xbe\x78\x47\x59\xa8\xcc\xee\x92\x66\xb2\x85\x72\x1f\x57\x34\x56\x47\xd5\x5c\xd7\x52\x01\xfb\x94\x27\x81\x97\x1b\x87\x65\xd1\x67\xc5\x09\x5d\x0e\xc4\x8d\xf4\x18\xc4\xa5\xce\x2e\x02\x33\x3c\xcd\x17\xb6\x72\xfe\x6e\xc6\x58\x7f\xcd\x1d\x23\x92\xe9\x2c\xf6\x5e\x7c\xf8\xcd\x03\x13\x34\xa1\x4c\x25\xb3\x97\x7f\xbd\xc5\x15\xea\x3f\x3c\xc8\xa6\xd4\x45\xbb\x15\xa8\xe6\xcd\xd5\x71\xb6\xbe\xd6\x86\x45\xca\x27\x7d\xe5\xfe\xe0\xa1\xbf\x8c\x38\x25\x4f\x40\x13\xfc\x47\xc1\x53\xa1\xc2\xb8\x17\xe4\xee\x1f\x0a\x80\x07\x1a\x68\xa9\xe3\x0a\x15\x7e\x1e\x7b\x7b\xea\xee\x47\x2d\xe4\x5f\x0e\xd8\x5a\x87\x50\xa0\x3d\xe3\x94\x33\x5d\xfa\x7c\xd2\x18\xec\x61\x23\x62\x68\x94\xbd\x64\x3a\xb3\xc8\xe9\xc2\xcf\xbc\x1c\xbc\x1c\x87\xd8\x3e\x99\x81\xd8\xd9\x98\x73\x1e\x4b\x95\x2b\xd4\x8f\xd7\x92\xc0\xb9\x40\xb9\x01\xbf\xb9\xdc\xa5\x3c\x23\x86\xb4\xe0\x30\xcc\xdb\x29\x24\x72\x13\x59\x5c\x39\x74\xe8\x3f\x3c\xb8\x57\x33\x17\x01\x98\xd2\x2c\x43\x6c\xeb\xa8\x70\x5f\x30\x53\x53\x89\x42\xb2\x7b\x5e\x10\x4e\x11\x1b\x52\x36\xf1\x83\x22\x46\x9c\xee\x31\x9e\x20\x3a\x13\x81\xdf\x89\x22\x1b\x1f\x4e\x4e\x09\x4d\x3f\xb9\x9c\x62\x32\xb2\x39\x74\x4c\x5c\xbf\x85\x09\x06\xb8\x3e\x82\x99\x0a\x9d\xb7\xc2\x76\xed\xce\x3c\x93\xe9\x58\x13\xb4\xe8\xf1\x02\xdc\xe2\x2c\x33\xee\x8c\xb5\xba\xa6\x74\x02\x49\x82\xb2\xe7\x59\x96\x5b\x05\x4b\x44\xe0\x78\x44\x60\xf6\x01\xce\x38\x72\x69\xb1\x5d\xe8\x18\xb9\x47\x51\xd2\xd6\xc3\xf0\x2d\x0f\xb4\x3f\x29\x13\xf7\xaa\x80\x3e\x3a\x0c\xe8\xb9\xc2\x73\x69\x8e\x6e\x4d\x06\xbe\x3a\x2a\x69\xa5\xac\x93\x92\x5b\x67\xe3\x96\x93\x75\x44\x05\xd5\x6d\xd5\x0f\x40\x36\xce\x76\xad\x5b\xd0\x27\xce\x5b\x59\xbb\x18\xca\x0f\x42\xda\xca\x7c\x5a\x8d\xc3\xf4\x95\x87\x74\xa3\x38\x4b\x1e\x28\xb6\xdb\xd7\xa9\xb9\x19\x5d\x44\x69\xae\x5d\x3f\x76\x0a\x2f\x3f\xcf\x97\x2d\xab\x55\xf8\x1c\x25\x94\x95\xaa\x99\xf5\xd8\x85\xa3\x64\x18\x3c\x31\xf2\x57\x86\xc9\xf5\xa5\x1b\x28\x7a\x37\x02\x26\x8e\xde\x76\x47\x87\x46\x7f\x19\xd0\xbb\x6f\x38\x06\xaa\x0f\x97\x88\x19\x3f\xb6\x7f\x38\x2f\x2a\x86\x58\x86\x60\xca\x7d\xaf\x28\xe0\x49\xf4\x06\x74\x46\x12\x14\x77\x8e\x22\x40\x89\xf6\x07\xaf\x46\xb7\x72\x44\x5b\x17\x65\x4f\xa5\x5c\xf5\x80\x37\x86\x2a\xdb\xa7\xb6\x83\xd8\x93\x36\x8e\xc4\x45\xd1\x97\xe6\xd3\x42\xa7\xb7\x1e\x40\xf9\xf1\x83\x89\x2b\x51\x9c\xfe\xe5\xbd\xd4\xce\xcf\x44\x0f\x70\xfe\x32\x8f\x55\xd7\x1c\x9f\xae\xd4\x82\xe7\x6d\x01\x55\xce\x4c\xbb\xf9\x55\x24\x3d\x07\xea\x8e\x39\xea\x33\xae\xf4\xc8\x3d\xdf\x29\x61\x17\x2c\xb6\xe1\x2c\x76\x83\x58\x1b\x8e\x1a\xe6\xf8\xf7\x15\x6b\xed\x1f\xab\x56\x6e\xaf\x2d\xbf\xea\xb0\xa8\xa5\x72\xd5\x18\xcd\x06\x8a\x59\x41\xbd\x55\x51\xda\xea\xa4\xa9\x87\x6b\xdb\xd0\x5d\xa5\x0f\x14\x94\x3c\x0e\xd9\x12\xff\x14\x55\xc6\x03\x9e\xe9\xa2\xf1\x41\xf9\xed\xfc\xcd\x52\xc5\x47\x15\x54\xbe\xf5\x46\x4c\x92\xaa\xa3\xea\x36\x0f\xf5\xdf\x7c\x8d\x92\xa0\x73\xd1\xd9\x2b\xc4\x42\x23\x4c\x52\xaa\x9a\x29\x42\xde\xb7\x3b\x41\x50\x29\xe4\x74\x27\x08\xf9\x34\xc3\xc2\xf7\x9e\x79\xc1\x55\xa4\x22\x75\x29\x93\x9c\xbf\xff\xa7\xc3\x68\x7f\x04\xbc\xff\xf4\x02\x75\x3a\xd7\xf0\x5e\x8a\xa1\xd5\xc0\x76\x05\x4a\x3f\xd5\xe2\xd9\x35\x5d\x69\x6a\xdc\xfe\xaa\x78\x23\x83\xf4\x02\xa8\x0d\x6c\xdb\x48\x78\x46\x03\xc7\x13\xd4\xce\xc3\x03\x34\x44\x0b\x6b\x08\x21\x54\x89\x2f\xe4\x86\x25\x32\xc1\x88\xd6\xc5\x39\xaa\x86\x18\xd2\xe0\xda\xe9\x8c\xe9\x6d\x67\x79\x68\x21\x27\xac\x10\x2e\xc5\xed\x71\x17\xc5\x95\xf1\x65\xfe\xb7\xc6\xf7\x29\x2d\xe9\x9f\x2f\xb2\x8f\x1f\x7c\xa6\x88\x3d\xb3\x1e\xad\x46\xd2\xbc\xd7\x31\x73\x74\x04\x0b\x01\x27\x53\xcf\x84\xce\xf1\xa6\x88\x25\x8a\x3b\xdd\xf8\x39\x51\x3d\x14\x4a\x71\x05\xb5\x39\x0e\xca\x2f\xf1\x9f\xde\xc6\x7f\xba\x58\x1d\xf7\x04\xd6\xe2\x9e\x84\x9d\xff\xf7\x27\x15\xf6\x44\xc7\xe5\xb9\x90\x33\xa9\x75\x89\x27\xa8\x75\xa1\xfa\xd2\x14\xa4\x67\x7d\x60\x93\x95\x41\x2e\x4a\x31\x3a\xf4\xfd\xc1\x72\x78\x8e\x6c\x45\x78\x0e\xf7\xa6\xa0\x50\x5e\x4d\x2b\x8b\xd7\x82\x64\xd0\x4a\x78\x01\x80\x7b\x7e\x04\x58\x11\xcf\x85\x5f\x75\xfa\x6d\x7e\x15\xf5\x81\x37\xe1\xea\x1e\x69\xbe\x12\x2b\xaa\xe8\x11\x6a\xc9\x9e\xb6\x86\x94\xb5\xc4\x18\xb5\x32\xc8\x45\xcb\xae\xd3\x18\x78\xa0\x75\x8b\xc5\xb8\xa5\xf8\x84\xb7\x18\x24\x23\x4c\x46\xad\x21\xa3\x93\x96\x67\x97\x6a\xea\x43\xb9\x1e\x03\x4f\xf2\x67\xf9\x75\xa7\xaf\x4c\x00\x5f\x38\x8e\x0c\xa9\xc5\x91\xe1\x8d\x71\x64\xf8\xfa\x38\x32\x80\xf6\xb0\x5f\x1b\x87\x55\xc1\x4a\xba\x01\x60\x3d\x2a\xc9\x3c\xeb\xd1\xab\x4e\x1f\xa4\x95\x30\x80\xb3\x20\xe4\xb3\x81\x0a\x78\xeb\x1f\x01\x6f\x82\xc9\x4c\x20\xad\x7e\x9d\xa9\xa0\xeb\x20\xe9\xd9\xf8\x35\x57\xd6\x63\x9d\x81\x34\x00\xb3\x7e\x7c\x95\x02\xb9\x2a\xc8\xa2\x36\x46\x0d\xd9\x3c\x46\x4d\x12\x00\xf2\x85\xe2\xa5\x14\xd7\xbd\x75\xe4\x4c\x1d\x4f\x14\x05\x80\xf4\x22\x00\x7b\x9d\x1d\x3c\xf4\x85\x6a\x4c\xa2\x1e\x94\xee\xd1\x36\x92\x59\x48\x6a\xee\x10\x4d\x4d\xa8\xa8\xb9\xb0\xd7\xa2\x3f\x35\xa2\x8a\x25\x6c\x04\x48\x00\x9c\xab\x02\x30\xe8\x57\x1d\xa3\x67\x6b\xb6\xe9\x22\x79\xca\xf7\x2d\xbd\x2e\x17\x33\xab\x18\xd4\x85\xcc\x8a\x6b\xcc\xb7\x89\x0c\xac\xba\x99\xd1\xd1\xd6\x79\x49\xf2\xcc\x56\xaa\xee\x23\x02\x2c\x1a\x13\x5c\xa3\xd4\xf3\xb9\xc6\x2d\x5b\x36\x6e\xb0\x88\x66\xb7\xf2\x6c\x67\x45\x3a\x1c\xe0\x59\xd2\xf5\x5d\x73\x84\xc9\x35\xc6\xaf\xf5\xaf\x19\x47\x17\x4a\x72\x8d\x77\x3b\x80\xd0\x17\x94\x10\xe3\x59\xbb\xdb\x91\xa3\x8b\x88\x0a\x5c\x4a\x67\x22\xee\xa0\x03\xa0\xa5\xdc\xfc\xcd\x11\x3a\x58\x6b\x45\x2c\x9a\x36\x86\x44\xd9\xb6\xf9\xe9\xba\xcd\x5d\xe8\xd8\xb8\xda\xa7\x76\x69\xd8\x08\x55\x6d\x88\xb3\xec\xf9\x0d\xc4\x99\x1c\xb9\x5f\xcc\x8d\xde\xc7\x5f\x33\x6e\x00\x17\x2c\x40\xc3\xdb\xe5\x97\x8d\xc3\x24\xc3\x6d\xdd\xbe\x27\xb9\xdb\x5c\x33\x36\x29\x9f\x30\x21\x88\x69\x10\x6d\x14\x52\xb5\x34\xf9\x72\xf5\x9f\xb6\xbb\x47\xea\x1e\x79\x8a\x62\x8f\x8b\x54\xf9\xfa\x65\x74\xf4\x1b\x6b\x08\xa5\x67\xe9\x18\xe2\xd4\x03\xee\x33\xa1\x29\x0a\xc7\x42\x4c\x9f\xa7\x29\xf3\x80\x67\xc7\x74\x65\xf4\xe8\xa5\x00\x82\x52\x56\x86\x72\xbb\x72\x69\xf7\xf6\x6f\x3a\xfb\x9a\x35\xf6\x87\x6a\x82\xf1\x7d\xe7\x2e\x6e\xe9\xf8\xcd\x76\xe5\x19\x89\xbd\xfd\x7d\xe7\x60\xc0\xfa\xd0\xaa\x9b\x54\x74\x64\x4c\x87\xb5\x93\x40\x75\x00\xe1\x49\x12\x35\x9d\x12\x28\x46\xb6\x6c\xa5\xcf\xf1\x4c\x68\x81\x54\xc5\x66\xce\xe8\x68\xa4\xcf\x01\x48\xa8\x7f\x07\xbe\xa7\x49\xec\x01\xcf\xb6\xbb\x84\x52\x39\x25\x0a\x34\x0c\xdf\xba\xb3\x40\xfb\x35\xbb\x53\x65\xa7\xaa\xfe\x14\x51\xab\x35\x7e\xe7\x17\x7f\xfd\x10\x32\xa9\xa2\x5e\xa1\x50\xcd\xf0\x10\xce\xc4\x98\xaa\x9c\xc1\xe7\xe8\xf7\x19\xe2\x92\x32\xc0\x8f\x00\x2f\xe4\x08\x11\xf4\x57\xe4\x95\x5b\x94\x44\x14\xad\x4d\x20\xa7\xe7\x26\xf6\x86\x3b\xc7\x95\x4c\x18\xfb\xc8\x4c\xc4\x21\xc4\x19\x95\x88\x51\xc3\x3e\x2a\x60\x87\x9a\x97\x85\x75\x5e\x45\xbc\x93\x94\x1d\x23\x98\x3e\x2e\xeb\x8e\x0e\x08\xf1\xa5\xb2\x26\xe9\xdc\xfb\xce\x71\x83\x1e\xf6\x70\x44\x05\xfd\x45\xe5\x43\x2a\x90\x31\x29\xf0\xe3\x6d\xfd\xf0\x45\x6d\xd2\xdb\xd4\xf2\x53\x3f\x0a\x16\xf6\xcc\x66\xc3\xa3\x18\x01\x71\xf6\xa3\xd1\xf2\x12\xe2\xec\x73\xd0\x32\x0f\x5d\xd3\xb0\x8c\x16\x34\x45\x57\x51\xdf\x3c\xe6\x2b\xf4\xb6\x34\xd6\x8c\xfc\xfd\x51\x59\xdf\x6c\xd5\x74\xa5\xc4\xf7\x84\x94\x13\x57\x07\xe0\xf9\x42\x04\x5d\x04\x95\xb4\xb5\xa6\x57\xea\x62\xb4\xde\x9f\x31\x19\x15\x09\xab\x4a\x3d\x1f\x0e\x4d\xd7\x6d\x4e\xb2\x0d\xc7\x65\xd5\x31\xa2\xed\x80\xaa\x56\x32\xbd\xbf\x95\x9b\x66\xcd\xe8\x5e\xaa\xe0\x18\xaa\xf5\xfe\x61\x6d\xd7\x95\x35\x6d\x01\x5c\x19\xa4\xd6\x0b\x97\xf3\x31\xb7\x84\xf0\x82\x67\xf5\x36\xe3\x25\x0d\x54\xd7\xd6\x66\x63\xbe\xb3\x73\xef\x46\xd5\x1b\x03\xd9\x26\xa2\x72\x4d\x1b\x59\x29\x2a\xaf\xd5\x50\xbe\x46\xd2\xbe\xd5\xa7\x6c\x5f\xde\xb5\x69\x8d\x8e\xb4\x42\x3b\x32\x49\x26\x25\x64\x9d\x54\x70\xb7\x03\x10\x91\x02\xe3\x07\x9a\x65\x0d\x37\x34\xeb\xb7\x30\x4b\x07\xfa\x26\x52\xc8\x52\x29\x48\xfe\x09\x31\x3f\x37\xa9\xd8\x2a\xfe\x32\xce\x01\x7b\xb9\x9c\xb5\xb3\x6e\xe6\x11\x55\x81\xe3\xfa\x12\xa9\x73\x46\xc8\xaf\x2f\x96\xf6\x52\x3b\x86\x00\x4d\x6e\xed\x4e\x52\xbd\xb7\x9c\x77\x55\x15\x09\xea\x87\xd4\x45\xcd\x15\x8e\x28\x45\x5b\xda\xc5\x64\x3a\x5b\x91\x51\x53\x75\x37\x4c\xa6\x33\x15\x41\x40\xf3\xb3\x17\xe4\x4e\x25\xeb\xea\xe9\x62\xe5\xaa\x9b\x2b\xc3\x64\xb5\x32\x0c\x54\x46\x40\x4d\xcf\x6f\xec\xac\x62\x5d\xae\xf4\xc0\xdc\x57\xb2\x46\x2e\xec\x2a\xae\xd3\xfc\x39\xc9\x28\x2b\x63\x57\x75\x6e\x29\x25\xa9\xb4\x21\x72\xf4\x94\x51\x91\xe1\xb6\x4b\x50\xd9\x29\x9d\x40\xba\x90\xa2\x22\x8d\x64\x59\x84\xe9\x74\x2b\x7e\x35\x47\xd6\xaf\xa6\xd3\x8d\x73\x86\x2c\x4d\xdd\x66\xe7\x9a\xce\x26\xe2\x06\xb8\xba\xea\xe4\x09\x2a\xd5\xfd\x39\x7f\xbd\xb3\x4d\xf3\x7c\xd3\x1b\x4c\xc1\x22\x05\x4d\xe3\xea\x17\xc7\xd5\x66\xb1\x55\x4e\x42\x71\x4b\xdb\x5c\xa0\x69\x5b\x87\x96\xf9\xde\x7c\x5b\xcb\x0b\x72\xa5\xaf\x7d\x80\xd3\x0c\x5d\xa2\x3b\xa1\x6e\xf8\x2b\x12\xd8\x27\x4a\x86\x98\x4d\x2a\x8f\x8a\xb0\x79\xc2\x37\xcf\x03\xf0\x16\x62\xb9\xf4\xbe\x70\x3e\xab\x2b\xc1\x98\x4b\x66\x50\x71\xac\x28\x31\x5f\xab\xc1\x73\x5e\xa8\x06\x6b\x51\xb0\x04\x8a\x3d\xd9\x2f\x0f\x60\xfe\x3a\xad\x19\x5d\x43\xf4\xfb\x0c\x66\x26\x4e\x94\xdc\x5a\x64\xd1\x00\x60\xfe\x41\xdf\xba\x2f\x75\x65\x75\xd5\x29\xa3\x93\xa9\x5c\x8f\x34\xea\xef\xf5\xc2\xf2\x7e\x26\x38\x4e\xd1\xa3\x44\x5d\xf2\x65\x75\x09\xe3\xdf\x26\x89\xfe\x8a\xb2\x97\x37\x88\x88\xc0\xb7\x17\x6d\x07\x34\x9d\x03\x4f\xcb\x21\x56\xca\x24\x26\x11\x2a\x28\x5d\x53\x4d\x28\x11\x10\x13\xee\x13\xe3\x54\x11\x98\x10\x7b\x4d\x03\x6a\x3e\x69\x2d\x97\x23\x71\x49\x5f\x6b\x9a\x97\xa7\x78\xbe\xec\x6c\x28\xb8\xba\xd2\xa8\x86\xd8\x2c\xd4\x55\xc6\xd9\x5c\x83\xae\x8f\x57\x69\x0a\x03\x3d\xb4\xaf\x28\x2b\xb1\x43\xa3\x95\x62\xa7\xde\x96\x65\x8c\x55\x01\x15\x1b\x3b\x51\xc8\xac\xc1\x22\x9f\x34\x4b\x9a\x75\x6d\x19\x88\xd3\xec\xc6\x84\x86\xb6\xf3\xc5\x0f\xaa\xf6\x0a\x9d\xf7\xb1\x32\x0c\x8b\x0d\x33\x2a\x12\xc1\x94\x5b\x21\xdf\x77\xb2\xda\x3b\xbf\xf7\xb1\xce\xdf\xbf\xb1\xf8\x5b\x4d\x70\xbe\x5a\x32\x5e\x95\x83\xe7\x56\xee\x4c\x5f\xc9\x56\x9c\x93\x21\x5f\x22\xc9\x86\xc6\xe2\x92\x87\x5e\x29\x57\xba\x0a\x1c\xe2\x55\xb3\xa5\x7b\x29\xe2\x89\xb7\x28\xa7\x55\xd7\x69\x56\xab\x45\x77\x3b\xeb\x53\x9b\x2b\x6f\x78\x1d\xd2\xaf\x48\x6e\x7e\xa1\x1e\x37\x48\x6c\x0e\xa6\x0c\xa1\xc9\x54\x20\xa6\x85\x6e\x95\x96\x73\xad\x78\xad\x82\x1c\xab\x00\x10\x67\x98\x4f\x30\xaf\xef\xbb\x45\x8e\xcf\xfc\x8e\x3a\x50\x63\xf9\x4e\x6e\x1b\xca\xfc\xa6\x1e\xb5\x17\x5e\x50\x72\xc3\x0b\x80\x09\x94\xfa\x37\x5b\xa1\x1a\x3f\x55\xe3\x2c\x67\x5e\xe1\x8d\x67\x4c\x85\x17\x26\xb1\xf2\x12\x4f\xfb\x86\x8a\x3b\xf9\x05\x03\x81\x88\xd0\x92\x81\xed\xaa\x9d\xb6\xc8\x48\x06\xc5\x17\x77\x55\x51\x9e\xa6\x53\xc7\x33\xf0\xfb\xf0\x8f\xb6\xa9\xce\xcb\xe6\x87\x9c\x63\x8a\x44\xe7\x07\xb1\xfb\x41\xb9\x07\x95\x88\xe9\x49\x56\xc8\x90\x70\xd6\xf6\x52\x96\xea\xe3\xd8\xc9\x8e\xdd\x90\xf3\xdc\xe5\x86\x25\x39\xcf\x9f\x3b\x7e\x98\x5b\xa4\xa3\x2d\xf8\xa6\x95\xe1\x21\x4a\xe6\x49\x86\x9c\x1c\xb5\x4e\x0e\xf4\x0d\x33\x50\x47\xe0\xd8\xa4\x40\x67\x48\x19\x68\x7e\xac\x51\x35\x9d\x2e\x06\xd6\x14\x3a\x71\x87\xeb\x28\x1f\xae\xa3\xc7\x0c\xd7\xb9\x6e\xe2\xcb\x8f\xd8\xc9\xa6\x23\x76\x64\x46\xcc\x4a\x0e\xda\x8e\xca\xaf\x2b\x61\x3d\x72\xf7\x7b\xeb\x66\x76\x4e\x75\x7c\x92\x62\xdb\x73\xd4\x84\xd0\xe8\xc6\xc1\x42\xe9\xe6\x15\xc5\xd4\x18\x71\x4c\x80\x0d\xe3\xeb\x06\xd7\xf8\xba\xe5\xb2\x52\xde\x3f\x4f\x62\x11\x2c\x00\xe9\x6f\x68\x94\x5a\xbb\x55\xcb\x9e\x6e\xb6\x5f\x7f\x69\x85\xa3\xba\x9d\xde\x13\x24\x6e\x29\xbb\x5e\xb9\x8d\xe5\xf7\x60\x78\x68\x4a\xf3\x70\x88\x99\x63\x20\x50\xf8\xd4\x2c\x24\xa6\x70\x98\xdf\xd3\xf9\x20\x4b\x69\xf7\x8b\xfc\x53\x3a\x27\x70\x82\x93\xe2\x4b\x6d\x74\x1c\x03\x4d\x23\xbc\x3c\x93\xeb\x92\x60\x70\x72\x03\x8f\x51\xa8\xee\x7f\xa9\x6e\xc6\x28\x54\x09\x3c\x00\xe6\x67\xba\xf1\x78\xb7\xb3\x58\xd8\x13\xba\x86\xf6\xdc\x4e\x7e\x8e\xe6\xa2\x85\x54\x95\xf3\x3c\x9f\xda\xac\xb3\x08\xbe\xe4\x26\x6f\xd6\x1f\x35\xf9\xfe\xb5\x5c\xba\xcb\xa5\x9e\xef\xdf\xc5\x42\xb9\xa5\x52\x30\x9d\x66\x38\xa9\x05\xa2\xad\x7b\x86\xd0\x14\xf1\xf6\x90\xb2\xb6\xa1\x45\xb5\x00\xa1\xed\x0c\xc1\x14\xe5\x05\xbe\xbc\x49\xbc\xb6\x06\x29\xc5\x6b\xb4\xd4\xee\xbd\xf2\xaa\x51\xd3\x4d\x1c\x4f\xff\xf5\x24\xe3\x8f\xac\x1b\x88\x9e\x5f\xc5\xcf\xa6\x84\xab\x86\x46\x4b\xee\xa9\xa8\xaf\x36\xc9\xa7\x6f\x27\xed\x0b\x49\xe3\x8d\x61\x95\xdd\xe5\x0a\xc0\x12\x1c\xe6\x87\xd1\x41\x33\x24\xd5\xc8\xaa\xa8\x98\x4e\x29\x1b\xdc\xcc\x3b\x8c\x0e\xbc\x1c\xf0\xe1\xe7\x05\x7c\x68\x00\x1f\x45\xd1\xe7\x04\x7c\x14\x45\x06\xf0\x3b\xfa\x46\x31\xe6\x63\x46\xc9\x4d\xb2\x69\x55\x46\x15\xe2\x9e\xd1\xdb\x97\xce\x4a\x5b\xa8\x2f\x75\xa8\x55\xa3\x83\x76\xd1\x57\xcc\xaa\x92\x1b\xdc\x78\xc1\xb3\xe5\x26\x87\xdc\x29\x41\xc1\x5d\x04\x71\xe9\xf0\xe3\xe1\x61\x79\xc5\x84\x12\x4e\x33\x14\xde\x42\x46\x7c\xef\xb7\x77\xe7\x2f\x5f\xbc\xff\xeb\xcb\xf3\xe7\x3f\xbf\x79\xd9\x7a\x79\x7e\xfe\xfe\x3c\xf6\x00\xb2\x3c\x53\xf1\xe5\x5b\x62\x00\x2d\x16\x0e\xad\x43\xf0\xaf\x77\xc7\xa9\x36\xdd\x31\x7f\x45\xd9\x00\xa7\xe9\xc6\xb1\xb4\x6a\xbd\x37\x7f\x97\xac\x7c\x2b\x2c\x1d\xf9\x27\x75\x95\xc7\x84\x43\xfd\xda\xeb\x9d\x9d\xfd\xc0\x31\x66\x94\xd6\xb1\x3c\x32\xaa\x32\xdb\xea\xb8\xca\xce\x45\x30\x73\x11\xc9\x03\x1b\x9b\x35\x00\x25\xd9\xfc\x83\xb6\x29\x28\x59\xdc\x9b\x16\x0f\xde\x02\xb8\xed\x75\x54\x74\xeb\x0b\xfc\x07\x8a\x4f\x2a\x2d\x4c\x68\x8a\x87\xf3\xd7\x5a\x8e\xad\x1a\x45\x22\xd3\x45\x59\x7c\x83\xc0\x96\x1e\x1f\x53\x26\x5e\xa7\x72\x70\xa4\x04\xa4\x23\x57\x96\x7b\xb9\xdb\x01\x37\x98\xe3\x41\x86\x0a\xad\xa6\xe1\x56\xb5\x92\x19\x5c\x6d\x41\x87\xa3\x2e\x00\xe9\x17\x15\xe8\x4b\xd7\x8f\x4a\x39\x6d\x7b\x70\xa0\xb9\x5a\xb9\xd3\xaa\x09\x91\xbd\xd2\x2a\x54\xc7\xc6\xb3\xb5\x14\xf1\x36\xb1\x0d\x69\x5b\xd2\x72\x8a\x94\x2a\x29\xa8\xae\x49\x69\x43\x12\xfe\x27\x82\xc9\x38\xbc\x85\xdc\x50\x02\x2d\xbf\xbd\x59\xaf\x3c\xc4\x99\x40\x4c\x0a\xb7\x25\x00\xca\x22\xa3\x3a\xaf\x4c\xe1\xcb\xba\xa1\x6e\x12\xe5\x3d\x90\x82\xe6\xea\x6b\xbe\x6e\x25\xaf\x10\xab\x45\x25\x71\xbe\x6d\xfb\x8c\x61\xf9\x6a\x49\xe3\xa9\xfe\x6a\x5a\xd7\xe6\xbf\xf5\xad\x9b\x5a\x5e\x83\x54\x5f\xd2\x7e\x1d\xab\x45\xcd\x99\x63\x63\x0d\x58\xc7\x62\x55\xd9\x5c\xf2\x11\x7d\xa5\x08\xbe\xe4\x56\x66\x8d\xef\x51\x55\xad\xdd\x74\xcf\x68\x52\x61\x33\x9a\x42\x3e\x0e\x95\xbb\x40\xe1\x8d\xfb\xb8\xa5\xb8\x26\x9b\xfe\x3e\x55\xf7\xc2\x60\x86\xff\xa8\x2f\xd4\x5f\xdb\xde\xec\xb8\x29\x1b\x7a\x14\xa5\xcb\xd2\x69\x41\xba\xdc\x64\x27\xe7\x39\x69\x90\x12\xcb\x7a\xb6\x2a\xe1\x05\xfa\x1e\xe3\xea\xa2\xba\x88\x57\x91\x7f\x3f\xfb\xbe\xf1\xfb\xd4\xa4\x02\x57\x07\x93\xf2\xf9\x42\x9f\xf8\x99\xa3\x97\xdf\xa7\x67\x50\xc0\x44\x25\x92\x8b\xbd\x34\xf9\x46\x7b\x09\xb6\xdb\x88\x0e\xc1\xa3\x3b\xa4\xf6\x14\x8b\x81\xd3\xf9\x6a\xbf\xbd\x22\xc4\xb2\x2e\x6c\x3c\x51\x2d\xef\xa5\xff\x6d\xa9\x1c\xf8\x9e\x01\xe9\x39\x91\x99\x35\xe0\x75\xd5\x54\x29\xb7\x9a\xd3\x89\x75\x75\x8b\xa2\x5e\x90\x87\x8f\x6e\x8e\x32\x42\x9a\xc4\x6e\xc7\xcb\x97\xf4\xf4\xcd\xc4\x21\xa3\x13\x9f\xa0\xdb\xd6\x05\x32\x99\xaf\x74\x4d\x7d\xaf\x45\x81\x31\x78\xaa\x6b\xaa\xe6\x5a\xcb\x4e\xc9\xb5\xb7\xc1\x4f\x2f\xa9\xef\xae\xc6\x19\x37\xa7\x9b\x76\xf4\xb5\x98\x06\x7e\x59\x23\x22\x2a\x71\x9e\x3b\x1e\x41\xa0\xf3\xf6\xe9\xb0\x0d\xcb\x6c\x2f\xd7\x68\x1e\x23\x73\xf5\x5f\x47\xff\xcf\xe9\xa4\x47\x67\x2d\x1b\xdd\xeb\xf4\x50\x04\x0b\xd5\x31\xe5\x74\x64\x22\x09\xbc\x76\x5f\x2e\x80\x2e\xc9\x10\x4c\xe7\xb6\xc8\xb9\x7a\xca\xbf\xe9\x38\xc0\xe6\xd3\x99\x7c\xc8\xbf\x60\x82\x32\x3c\xc2\x6a\xbd\xb3\xd0\xed\x2b\x5b\x9f\x41\x4c\xdc\x1e\x9c\xe5\x2f\x16\xfd\x02\x31\x87\x7f\xbe\x10\x17\x38\xb3\xe9\xf3\xb1\x81\xc3\xcb\xdb\xf0\x42\x51\xed\xd1\x0c\xa1\x25\x13\x94\xbe\x6b\xd4\xd8\x0b\x9a\x79\x65\x06\x74\x5f\x5c\x98\x43\xe7\x86\x6e\x2d\x4d\x7b\x52\x02\x96\xbb\xd9\x97\x21\xd6\x62\x95\x17\x60\x01\x54\xf9\x14\x73\x05\xd9\x61\x20\x95\xd4\xd3\xf9\x64\xb9\x46\x65\x3f\x0f\x6f\xb1\x18\xd3\x99\x28\x57\x29\xde\x16\xa5\x4b\xb7\x18\x34\x15\x34\xa5\x1a\x12\xa5\xee\xfa\x79\x56\x9c\xbd\xbd\x5d\xe4\xc4\x51\x37\x46\x53\x77\xd9\xd8\xdb\xf3\x77\xfd\xac\x28\x9e\xd5\x8a\x73\x7d\x96\x95\x97\x25\x45\x59\x52\x2b\x5b\xe6\xc5\xbd\x3d\xdf\xdf\x85\x0f\x0f\xbb\xe6\x2b\xe6\x2f\x2d\x8e\xc1\xde\xde\xae\xcf\xf7\xf6\x8a\x6f\x76\xfa\x04\x81\x62\x9e\x4d\xa4\xf5\x12\xb3\x3c\x5a\x50\x6f\x62\xb5\x25\x22\xba\xab\x18\x37\x57\xa8\x09\x1e\xa1\x53\x47\xed\x2c\xe2\x15\x4c\x90\x28\x36\x8f\xa6\xc3\x16\x39\x0d\x51\x6d\xe6\x89\xc0\x75\x3a\x96\xe2\xea\xbb\x46\xaf\xe3\x06\x41\xd5\x74\x2b\xcc\xb5\xf2\x9a\x84\xb9\xf6\xe0\x64\xc8\x10\xe2\x62\xde\x1c\xec\xd9\x7e\x5c\x52\xe5\x4b\x1d\x9a\x88\xda\x6d\xf0\xb5\xd2\xd6\xe6\x8e\x06\x65\x39\x69\x13\xb7\x83\x08\x28\x72\xbc\xca\xf1\x5e\x62\x12\xdd\xce\x8e\xac\x03\x1a\x7d\x33\x5b\xd0\x16\xc6\xdd\x8f\x74\xa0\x3c\xe3\xa6\x30\x41\x9a\x44\xea\xa7\xb7\x00\x65\x83\x12\x28\x17\xcc\xa3\x64\x6e\x67\x67\x92\x64\xf9\x97\xba\x63\xd4\x9d\xd5\x83\x24\x49\xb5\x89\x26\xa4\x38\x6d\x93\x45\xae\x0c\xb0\xb2\xc2\x7d\x69\x7d\xe7\x72\x3e\x45\xb1\x09\x4a\xa8\x25\xf6\x19\x8f\xf3\x6d\xaa\xae\xef\x80\xdf\xa7\x1f\x18\x1a\xe2\x3b\x65\x52\x1b\xe2\xbb\xe5\x1a\x50\x27\xfa\x3a\x2a\x90\x94\x0f\x87\xb3\x3f\xfe\x98\x5f\x6c\x05\xa0\xa9\xee\x4b\x62\xdc\x42\x23\x4b\x19\x97\x2a\x75\x3d\xaa\xa0\x86\xa3\x53\xa9\x8a\xeb\xf4\x1b\x59\xa8\xaa\x51\xcd\xd6\x6b\x62\xc6\x17\xe6\x33\xe8\x54\x16\x80\xc1\x60\x5d\x65\x5d\xac\x50\xc6\x2e\x1b\xa2\xaa\x2e\xd3\x31\x06\xca\x81\x2e\x17\xed\x7f\x56\x4f\xb9\xe4\x3f\x95\x2d\x20\x81\xd4\xed\x48\x5b\xe6\x43\xe9\xad\x2d\x8b\x18\xa6\x29\x4e\x8a\x62\xf9\x8b\xbc\x84\x99\xa6\xb6\xc0\x85\x79\xb6\xdf\xd5\xd4\x2e\x3e\xeb\x47\x57\xc7\x30\x03\xb1\x21\x66\xd3\x3c\x1b\x97\xed\x90\x7e\xb6\x3a\x53\x7e\x9b\x23\xd7\x9a\xcc\xb3\xd5\x7b\x54\xe6\xa9\x5c\xe7\x51\xe9\x9f\x36\xd3\x77\x8c\x69\xf5\x57\x3a\x58\xad\xf5\x94\x54\x1d\xb7\x52\x4d\xe1\xe1\xca\x7c\x98\xce\x12\xd4\x98\x24\xb1\x85\x8a\x5b\xc0\x0b\x70\xd5\x57\x59\xf8\x5d\x9d\xea\xeb\x6b\x4b\x70\x95\xb6\x04\x1f\xad\x3e\x9b\x09\xf1\x58\x8a\xef\x87\x57\xed\xf0\x1f\xfd\xfd\x3c\xee\x48\x03\xd1\xb5\xb5\xb4\x99\xda\x78\xe8\x13\x75\x6a\x26\x05\xd4\x7b\x93\xc3\x27\x9c\xa8\xb3\xfe\x7d\x3f\x7c\xf2\x2c\xd0\xe0\x83\xab\x4e\x7f\x07\x5d\xc1\x7e\x4f\xfe\xf3\x4c\xfe\xf3\xa4\x13\x77\x16\xc5\x8d\xe1\x7b\x29\xf4\xf7\xcc\x0e\x7a\x8d\xe6\xdc\x87\x4b\xa9\xa1\x17\xf3\x18\x81\x44\x05\xb2\x85\x57\xa8\xbf\x58\x04\x35\xad\x08\x95\xb8\x61\x46\xc4\x9f\x3b\x2a\x56\x4d\x96\x63\x66\x36\x85\x4f\xe3\x00\xb3\xd4\xac\x19\x7d\xea\x8e\xbe\xae\xa2\x47\x3e\xb3\x56\xe9\xbc\x37\x2b\x79\x20\xd4\xa5\x6c\x10\xc5\x22\x44\x99\xf9\xe0\xb5\x7c\xcf\x09\x5c\xa6\xf0\x06\x5e\xe0\x05\x9a\x6b\x9c\xf1\x5d\x62\x64\x57\x1a\xb6\xfe\xa9\xed\xec\x53\xc8\x94\xde\xb0\xe2\x02\xbf\x89\xe6\x69\xc5\x3e\x6e\x53\xb3\x96\x2e\xf0\x9b\x62\xfa\xe2\x9a\x95\x02\xd5\x65\xfe\x87\x07\x2b\x0b\xee\xd4\xcf\x2f\x8a\xb8\x2d\xd5\x31\xb6\xd7\xd9\x77\xd1\xc3\x03\x31\x5a\x6e\x09\x72\xaf\x27\x05\xca\xe5\xcc\xb1\x6b\xa2\xbb\x69\x34\x73\xa7\x56\x2f\x28\x99\x24\x1a\xe9\x55\x9d\x63\x5e\x69\x53\xad\x9a\x25\x66\x7c\x99\x5d\xc2\xab\x30\xc6\x5a\x4b\x85\x04\xdf\x68\xa8\x98\xf1\x35\x96\x8a\xd2\x27\xdd\x5a\x89\xdc\x2e\x4a\x55\x8a\x71\x35\xdd\x9b\xed\x0b\x66\x80\x53\xcc\xa7\x19\x9c\x6b\x71\x21\xbf\xeb\xb7\x6b\x82\xef\xd8\x7a\xa2\x56\xaf\x30\x34\xb8\x55\x1c\x7b\x03\xaf\x1a\x19\xf2\x0b\x79\x4d\xb3\xdd\x31\x4e\xa0\x60\xe1\xc0\xd4\xd2\x35\x2f\xb8\xc4\x4e\xfd\x5d\x1f\x16\x8d\xc1\xa5\x90\x33\x7d\x01\x99\xff\x0d\x8b\xb1\x86\xbd\x9d\xb1\xe2\x57\x2d\x65\x3f\xce\x56\xd1\xc0\x83\x4b\x4d\x15\x17\x63\x7a\x8b\xc9\xe8\x0c\x4d\x33\x3a\x9f\xa8\xe4\x5f\x02\xe2\x4c\x9d\xda\x7e\x5e\x33\xc4\xaf\x74\xb0\x91\x15\x42\xea\x0d\xe1\x47\x3a\xf0\x40\x3e\xdf\x32\x88\xc9\xeb\xd4\xab\xa5\x23\x5b\x6b\x8e\x50\xea\xdf\x47\x3a\x70\x1d\x3a\x3f\x87\xb3\x41\x53\x6c\x1e\x31\x6e\xdb\xe5\xa4\xcd\x10\x47\x42\xc5\xd8\xac\xeb\x7f\x9f\x4b\xfb\xe3\x5b\x79\x26\xc0\xaf\xe4\xa3\xb0\x54\x6f\xea\x1e\x6d\xa7\x37\x7d\xa4\x83\x55\x47\x67\x4a\xd4\xff\x04\x47\x05\x50\xa4\x3f\x7b\x97\xab\x4c\x70\x6b\xf7\x84\xf5\x67\xca\x2e\xe7\x29\xa7\xd3\x4d\x56\x01\xf8\x2d\x3c\x0b\xbe\xd0\x11\x77\x79\xca\xf2\x8d\xa7\xac\x2a\x85\xc5\x72\xc7\xc8\xed\x66\xde\x97\xf7\xc1\x2e\x66\xdd\xfd\x1a\xde\x55\xab\x9b\xa1\x83\xc2\x70\x65\x61\x87\x10\x72\xc1\x7e\x99\xaa\xab\x82\xea\xda\x7e\x8a\xeb\x81\xa6\x3e\xd2\x81\x09\xb2\x4c\xd0\xed\x99\x43\xc4\x5f\x2f\xde\xbf\x0b\xb9\xf2\x79\xc4\xc3\xb9\x09\x83\x67\xbf\x2b\x1f\x63\xd0\x0d\x5c\xb7\x5b\xdb\x98\x8e\xec\xd0\x78\x79\xb4\xb9\x74\x47\x95\xbe\x98\x0d\x26\xb8\x9a\xfe\x73\x83\x65\xbf\xb2\x44\x95\x0c\x81\xa2\x16\x9e\x7d\x23\xdb\xa8\x61\xa9\x7c\x93\x5b\xb3\x0b\xfc\x80\x3c\xe5\x3d\xc2\x60\xac\x88\x82\x64\xef\x36\xd9\x1a\x97\x12\x65\xc5\x2e\xfa\x3d\x7a\xe5\x3d\xfa\x16\xe1\x27\x6f\x58\x0e\xa9\x57\xce\x78\x77\x48\x36\xd8\x2d\xca\xc5\x73\xd7\xac\x75\x4d\xb9\x5b\xc6\x76\x6e\x44\x96\x75\x1a\x0c\xeb\x3f\xc2\x4c\xda\xe2\xb0\xe2\x73\x9e\x0d\x6d\x20\xd0\x6c\x74\x69\xb5\x76\x11\x4b\xc7\xbb\xdc\x46\xb4\x0e\x8b\x40\x9a\x56\xca\xd6\x7b\x12\x0a\x16\xe0\x91\xc2\xfa\xaa\x55\x1b\x55\xf5\x6d\xe3\x58\xb7\xfd\x2d\x6a\xcb\x7c\x2e\x0a\xff\x92\xe8\xbf\x85\x44\xff\x65\x4f\x42\x1a\x1c\x8b\xff\x25\x9f\x7f\x0d\xf9\xbc\x29\x4f\x6b\xc3\xfc\xbb\x41\x8c\x7f\x82\xd0\xf0\x4f\x26\x49\xb1\x19\xf9\x86\xc7\xef\x5f\x4b\xd4\x5e\x7b\xde\x6e\x12\x4b\x6c\xb8\x22\x7f\x43\x1e\xf8\x46\x5e\xbc\x9f\xbc\xe6\x56\xfd\x6f\x31\xd7\x97\xab\x9a\xd6\xdb\x8a\x3f\xc5\xfa\x55\x2d\x47\xc3\x2c\x50\xab\x10\x5f\x2a\x3d\xae\x9d\x2e\x86\x45\xea\xc2\xe3\xd7\x76\x59\xd1\xfd\xd8\xc4\xe5\x21\xe7\xea\x4d\xbc\x1e\x6a\x60\xcb\x8e\x0f\x8f\x9a\x4e\xfb\x79\x9e\x96\x6f\x46\x2c\x7d\x10\x73\x09\x07\xb1\x27\xe0\x88\x7b\x86\x45\x2e\xe1\x68\xd9\x4e\xac\x8b\xad\x38\x09\x72\x8a\x05\x0f\x0f\xf7\x8b\xfc\x74\xc1\x3d\xd8\x43\x95\x23\x2e\x51\xbe\xa1\x2d\x80\x46\x49\xa5\xa2\x58\xac\xba\xb5\xc1\x91\x90\x9d\x6f\xbe\x59\x61\x91\x6b\xd8\x0f\x37\x18\x22\xb5\x9f\xf1\x7d\x75\xcd\xf8\x5b\xfa\x60\xad\x8e\x3a\xb9\x52\xe7\x59\x9d\xca\x0f\x25\x0c\xd5\xd6\x0c\x93\xb7\x4c\xc7\x81\xd6\x45\x3c\x13\xf9\xf2\x35\xff\x2b\xcc\xb0\x8a\x42\x66\x9e\x4d\x46\x18\xfb\x46\x47\xa6\xd1\x97\x78\x95\x48\x70\xa1\x3a\x50\x33\x2b\xa9\x84\x72\x33\x92\x51\x98\x9a\x08\x53\x76\x44\x55\x76\xb1\x4b\x09\xec\x83\x8d\x68\x54\xcf\x06\x69\x7a\x27\x8a\x32\x72\xe2\x2b\x7c\x34\x51\x17\x85\xbd\xcb\x2d\xb3\x3d\x1e\x39\xa0\x02\x1d\xd9\xdd\x1b\xc4\xf0\x70\xae\xba\xd9\x1c\x8f\xaa\x38\x9c\x93\x9d\x02\xf9\xde\x35\x42\xe2\xfd\x2d\x31\x71\x2d\x83\x30\xa3\xf4\x7a\x36\xf5\x3d\x98\x42\x15\x4d\x48\x35\xee\x05\x4e\x0c\xad\xd2\x38\x00\x11\x00\xa2\x8e\xa6\x2e\x50\x36\xf4\xab\xf1\xac\x6c\x9e\xa2\xdc\xad\x36\xd5\x71\x76\xf3\x44\x8b\x2a\xd2\x3b\x40\x25\x54\x8c\xd5\x05\x35\x24\xf9\xd3\x9d\x01\x44\xc1\x58\x45\xc6\x68\x0d\x19\xe1\x22\x58\x34\x1c\x9c\x97\x51\xd3\xc3\xa6\x82\x7c\x6f\x37\x64\x51\xc3\x90\xd5\xd4\xcf\xc6\xe9\x9e\x87\xd5\x82\x24\x6d\x72\x6b\x15\x6c\x26\xc6\xed\xbc\x90\x5b\xf8\x7b\xcc\x19\xbe\x1c\xa6\x42\x6f\x43\x78\x90\xa4\x4b\xf2\x8f\x5b\xfc\xa7\x53\xd4\x4c\x2f\x15\xc6\x51\x05\x2a\xac\x13\x4d\x57\xfa\xc1\xe8\x66\x30\xdd\x94\x74\xaa\xf8\x3a\xea\xe9\xf4\x67\xdb\x11\x4f\xd5\xf9\xc1\x68\xa7\xf1\xdc\x94\x74\xb2\xf4\x1a\xca\x25\x70\x82\x94\xe3\x6d\x13\xf1\x32\xdc\xd6\x07\x20\x35\xe2\xd9\x6a\x3f\x16\xfd\x0a\x6c\x37\x04\x9a\x57\x58\x4b\x45\x92\xa0\xac\x0d\xb3\x6c\x4d\xa4\xa3\xa6\x1a\xdf\x23\x09\x57\x23\x3b\xc5\x02\x3e\x8a\x69\x6c\xc5\xef\x11\xe7\x55\x6c\x53\x60\xbc\x31\xe3\xe4\x55\xd6\x51\x73\x3c\x23\xd7\x5b\x2e\x5d\xba\xce\x0f\x46\x43\x8d\xe7\xa6\xe4\x93\xa5\xd7\x51\x2e\x83\x9c\xe3\x61\xf3\xba\xbf\x82\x0b\xf3\x6a\x3f\x18\xfd\x2c\xb6\x9b\x92\xd0\x54\x58\x47\x45\xed\x01\xb8\x2d\x07\x9a\x5a\xdf\x23\x0d\xd7\x61\x3b\x13\xcd\x0b\xd7\x6a\x6c\x65\xad\xef\x11\xdb\x15\x1c\x93\xe3\xba\x29\xc3\xe8\xf2\x6b\x29\xa8\x83\x32\x6f\x4d\x42\x53\xed\x47\xa3\x61\x8e\xed\xc6\x44\xd4\x15\xd6\x51\x91\xf3\xb6\x09\x2e\xb0\xcc\x00\x62\xc3\xd1\x89\x7f\xa5\xdb\xfd\x3e\xd2\xed\xda\x11\x71\x3d\x57\xe5\xe8\x74\x82\xab\xa8\x5f\x64\xa4\xfe\xfb\xfe\xfe\x08\x78\x6d\x2f\x08\x53\xc8\xc7\xea\xf2\xca\xe3\x92\xf5\x26\x5c\x07\x3b\xe8\x91\xd5\x6e\x1d\xbf\x28\xae\x0a\x35\x73\xf9\x64\xad\x77\x42\xce\x85\xb6\x7b\x5b\x6e\xa1\x45\xbd\x1f\x6b\x36\x3b\xf8\x6e\x0a\x35\xaf\xb1\x66\x3e\xa7\x28\xd9\x72\x41\x94\x35\x7e\x30\xea\x49\x1c\x37\x86\x97\xac\xa3\x98\xca\x44\xbb\x1d\xc9\x64\x95\xef\x91\x66\xab\xf0\xd4\x58\x4d\xe9\x2d\x62\x6d\x7d\x41\xa0\x8d\x79\x93\x23\x46\xbd\xe0\x46\x30\xbe\x47\x7a\x2c\x87\xa9\x30\xf9\x20\x11\xb9\x50\x78\xbc\xe6\x7f\xd1\x94\xd8\xb0\x8d\x25\xf5\x1f\x35\x06\xfa\x17\x6a\x34\xba\x6d\x31\x0c\x16\xcc\x8f\x3e\x12\x17\x96\x1e\x8f\x1e\x8c\x1c\xc4\xf6\xe3\x21\xd8\x0c\xe5\xdb\x0d\x1e\xb6\xa7\x0c\xf1\x5a\xa4\xc3\xed\x86\x66\x09\xc4\x1f\x7b\x94\x2e\xd9\x0c\xe9\x38\xac\xaf\x87\x1f\x72\x1a\x3d\x72\xb8\x1a\x60\xad\x1b\xb7\xdf\x37\x37\xe8\xab\x2c\x36\x3f\x1a\xb5\x55\x9f\x37\xa6\xe7\xff\xcf\xde\xbb\x77\xb7\x6d\x24\x89\xa3\xff\xfb\x53\xc0\xd8\xb3\xfa\x11\xbf\x00\x6d\xbc\x1f\x4c\x18\x5f\xc7\x4e\x56\x9e\x95\x33\x3e\xb6\xa3\xbd\xb3\xba\x3a\x73\x20\xb2\x25\x22\x06\x01\x0e\x00\xd2\xd6\x83\xdf\xfd\x9e\xaa\x6e\xbc\x01\x12\x94\xa9\x8c\x34\x93\x93\x98\x22\x81\x7e\x54\x57\x57\x57\x57\x55\x57\x55\x43\xe9\x1d\x18\x63\xf1\x49\xca\xc5\xbe\xc6\xe9\xb2\xde\x63\xc4\xe0\xee\x11\xdf\x6b\xb8\x4f\x70\xac\xd1\xec\x3e\x73\xcb\x6a\x3d\xb9\xd1\x86\xa0\x32\xf5\x5c\x1e\xd6\x3f\x5a\x5e\xeb\x31\x8e\xb6\xbf\xcd\x62\xac\x03\xdb\xe4\xe5\x77\x61\x30\x4e\x16\x7e\xa6\x5c\x5c\x67\xf4\x4f\xc5\xff\x09\x29\xfe\xf7\x50\xdd\xd9\x54\xff\x04\x33\x3d\xf1\xfb\x1c\xef\xce\xc4\x9f\x18\x29\x88\xff\x1d\xfc\x24\xca\xe2\xbb\xe0\x27\xf1\xfc\x59\x31\xff\x3e\x4c\x35\x0f\xfd\xcf\xad\x0c\xcf\xfc\xbb\xbb\x91\x3f\x51\xa5\x67\xf9\x9c\xa5\x13\xf5\x7b\xff\xc7\x89\xa6\xea\xe6\xd1\x51\xfa\x43\x8e\x7c\x45\xfb\x5e\xf2\x5f\xe0\x63\x39\xfd\xee\x3b\xee\x2e\x54\xc6\xb5\xbf\xf3\xb3\x39\xb9\x0c\xe3\x38\x19\xf9\x92\x2c\x0a\x65\x6c\x7b\x74\x96\x9e\x4b\x9b\xaa\x83\x75\xdd\xbe\xe0\xef\x74\x80\x6d\xd0\xfb\xcc\x6f\x5a\x5c\x17\xf1\xa2\x4b\x16\xab\x1a\x58\xfe\xa4\xfc\xc7\x40\xf9\x5d\xb4\x18\x15\xb4\xd8\x95\xd9\xdf\x97\x38\xed\x8f\xc4\x77\xef\xde\xbd\x13\xde\xc8\xc2\xdf\xfe\xf6\xb7\xbf\x89\xdf\xb0\x8a\x3e\xf5\x2e\xa1\x61\x04\xba\x93\x21\xcf\x56\xc9\xee\x2b\x25\x9a\x65\xff\x24\xde\xc7\x4e\xbc\x87\x8d\x9d\xab\xd3\x58\x65\xa2\xfc\xfc\xe6\xa5\x62\x61\xc8\xe1\xc4\x27\xab\x28\xc8\x52\x39\x9e\xf8\x24\x8c\xa3\xab\x5f\xe2\x64\xd1\xb9\x5e\x52\x39\x94\xe3\x01\x11\x65\x0d\x92\x5d\xc4\x51\x36\x57\x9a\x81\x99\x7f\xf2\xd5\x27\x42\x9a\xdf\xca\x57\x85\x37\x6f\x84\xe3\xe3\xf1\x62\x31\x4e\x53\xe1\x7f\xff\xf7\x5b\xb8\xeb\x3b\xa0\xa4\x07\x67\xb1\x4b\x9a\x4c\x69\x94\xa1\x5b\xff\x10\xc1\x97\x21\x25\x93\xfd\x89\x9f\x5c\xe1\xcd\xb1\x79\xea\x9b\x1f\xb5\xa3\x23\x06\xdf\xf3\x49\xf9\xf2\x4c\x3b\x7f\x59\xfd\x31\xbe\xdd\xc8\xb8\x22\xcf\xd4\x73\x09\xd7\x23\xbb\x36\x10\xde\xe3\xa2\xcc\xe2\xcc\x0f\x73\x27\x6a\xf5\x87\x51\x06\xd4\x58\xb4\x1b\xbf\x8c\x46\xb1\x34\x2e\x7e\x87\x2f\xd3\xef\xa2\x51\x28\x8d\x53\xe9\x65\xfa\x22\x1e\xab\xd2\xd1\x51\xf6\x03\x51\xb5\x97\xe2\x0f\x82\xf6\x9f\xe2\x18\xc5\xa9\x24\x5e\x45\xb3\x91\xa6\xaa\xff\x37\x93\xbe\x13\xff\x53\xec\x3e\x31\x0a\xd2\x5f\xfd\x5f\x47\x54\x7a\xa9\x8e\xbf\xa3\xf7\x9f\xb7\xf7\x05\x46\x27\xd9\x3e\x9c\x2b\xdb\x97\xd5\xfc\xc9\x64\xfe\x7d\x99\x8c\x2c\xfc\x9f\xbf\xfd\xed\x50\x9c\xe6\xe1\x98\x0c\x1e\x85\xec\x6f\x89\x29\xaa\x3d\x46\xe3\xc4\xd6\xf1\x76\x5a\xc6\xbb\x0d\xb1\x57\x4f\xcd\xe6\x7d\x35\xbc\xb9\xab\xdd\x88\xea\x3c\xdb\xee\xc3\xd4\x53\x3b\xd0\xbe\xda\xc3\xbd\xe7\x6a\xa7\x6b\xcf\xdc\x4f\x15\x60\x94\x7b\xae\xa2\xa2\xda\xd3\xc2\xdd\xdc\x4f\x7f\xc5\xc1\x0e\x6c\x93\x97\x1f\x80\xc3\x65\x42\xd7\x41\xbc\xda\xd7\x45\xaa\x56\xf5\xc9\xe1\xf2\x7d\x31\xe8\xe1\xf8\xcc\xeb\xec\xc2\x69\xb6\x08\x95\xd4\xbf\xdc\xd7\x4d\xa5\xac\xf7\xc4\xb0\x99\x2d\xc2\x8f\x38\xdc\xa1\xa8\xe4\x15\x76\xe1\x71\xb5\xf0\xa3\xfd\xbd\x7d\x8a\x6a\x4f\x0c\x8b\xc5\x68\x87\x62\x91\x57\xd8\x81\xc5\x20\xda\xd7\xd5\x07\x6a\x3c\x2d\xdc\xe1\x18\x07\xb6\x17\x44\xbb\x5c\x7d\x82\x28\x0c\x22\xaa\xa4\xeb\xab\x2e\xc4\x95\x6f\x3b\x2b\x94\xcd\xa5\xeb\xab\x26\x5f\x94\xa3\x8a\xde\xe1\xff\xa9\x77\x3c\x0e\xbd\xe3\xb0\xd9\x5d\x98\x4e\x70\x74\xd4\xa1\x21\xbc\xdc\x61\x99\x4b\xd9\x54\x86\x13\xbf\x4b\xeb\x61\x54\xf6\x71\x7d\x25\x55\xf2\xff\x87\x72\x2a\x15\xb7\x96\x1e\xfb\xd1\x2c\xa4\x17\x7e\x92\x92\x85\xff\x99\xfe\x04\xea\xfd\x71\x97\xfd\x6f\x57\xab\x54\xf6\x61\xbf\x9b\xdf\xdd\xdd\x36\x2e\x2e\xdd\xaa\xd6\x14\xf7\x2d\xec\xcd\x70\xf2\x7a\x8f\x91\xed\x6c\x1f\xf1\x3a\xfe\xbc\xaf\x7b\x3e\xaf\xf4\x18\xc7\xba\x8d\xc5\xb2\x91\x0e\xe6\xb2\x50\x7c\x17\xf6\x52\xc5\xbf\xec\xf1\xbe\x60\x56\x9b\x76\xd1\xc7\x88\xb5\x5d\x63\xec\x8b\xf6\xec\x56\xeb\x8a\x1a\x8f\x71\xa8\x5b\x08\x84\xed\x55\xc3\x29\x84\x95\xdf\x8d\xbe\x0b\x7a\x19\x27\x9d\x6b\xac\x4d\x23\xbc\xec\x63\xc4\xdc\xce\x51\x66\x5f\x68\xb7\xb7\x4a\xd7\x30\x59\xe1\x27\x38\xce\x69\x18\x2c\x2f\x62\x3f\x99\x29\xe9\x6a\xb9\x64\x29\x66\x7a\xe4\xfb\xa2\xe8\xae\xfa\x8f\x11\x0d\xdb\x16\xca\xeb\x7c\x0c\x1f\x4b\x14\x0c\x5e\x35\xed\xca\xbb\x91\x0e\x02\xd1\x7e\x1c\x88\xd5\x78\x8c\x88\xdd\x35\x54\xe6\x13\xb9\xcf\x50\x9f\xa0\xe7\x67\x90\xfe\xbc\x97\xef\x27\x2f\xbf\x1b\x7d\x31\xf6\x38\xf4\xcc\x8b\xcb\x91\xd9\x44\xcc\x9f\x8b\x93\x49\x76\xbd\xa4\xf1\xa5\xc0\xd4\x8c\xa3\x23\x31\xc5\x2f\xcd\x17\x85\xfe\xf1\xb2\xda\x7c\x0e\x30\x2b\x49\x37\xe3\x8e\x97\xf4\xe8\x68\x4b\x77\x78\xdf\x0b\x13\xfb\xe3\x64\x32\x99\x14\xcf\x9f\xe7\xdf\xc9\x32\x89\xb3\x18\xaa\xbd\xcc\x61\x1b\x17\x1d\x4a\x23\x5a\x0f\x9c\xfa\x53\x45\x7b\x0c\x2a\xda\x90\xa3\xa1\xe7\xf5\x09\xf1\xa5\xa3\x23\x18\xd1\xf3\xc9\xc4\x3f\x3a\x12\x39\x61\x4f\x26\x93\x6c\xe4\xdf\x4b\xe7\x0b\x52\x56\xe9\xa1\x0e\x85\x82\x54\x49\xfd\x05\x55\xe2\x64\x1f\xa9\xb8\x5e\xe5\x31\x72\xb1\x81\x63\xde\x47\xcc\x6b\xd4\x79\xa2\xa3\x1e\x3e\xd6\x27\x37\xc2\xdf\xe3\x60\x5f\xc7\x6b\xac\xf2\xd4\xc6\x19\xfa\x37\xd7\x20\x92\x4e\x1b\x29\x31\x7e\xc7\x54\x91\x7f\xfa\x1c\x3c\xd9\x8d\x45\x97\xe4\x74\xe2\x73\xdf\xb8\x33\xed\xfc\xfb\xba\xe3\x41\x48\x32\x3f\xb9\xa2\x99\x44\x82\x74\x24\xfa\xa2\x74\x77\x97\x8e\xc2\x7b\x6d\x2b\x40\x42\xaf\x81\x82\x1e\x6a\x5f\x09\xe3\x2f\x34\x99\xfa\xe9\xbe\xe7\x28\x65\xbd\xc7\xb8\x2a\xfb\xdb\xac\x8c\x77\x60\xab\x45\x0d\x5c\xed\xfd\xfe\xe1\xe1\x1e\x6e\x0c\xe1\xe3\x34\x66\x6e\x41\xdb\xf0\xe6\x76\xb3\xc5\x7d\xdc\x18\xc2\x27\xe7\xc6\x10\xee\xe1\xc6\x10\xee\x74\x63\x58\xf8\xf7\x70\x05\xe2\x95\x1e\x23\xde\x76\x8c\x75\xff\x81\x3e\xbd\x51\xd2\x59\xe0\x77\x8d\x33\xa1\xe9\x32\x8e\xd2\x60\x4d\x1b\x65\x1f\xe3\x08\xfb\xdb\xe4\xe3\x1b\xd8\x22\x96\xde\x85\x31\x14\x7b\x15\x7f\xd6\x69\x0c\x6c\x08\xc5\x95\xc2\x8f\x11\x6f\x03\xc6\x39\xf5\x43\x1a\xcd\xfc\x21\x2a\x5e\xb3\xc6\x13\x1d\xf1\x2c\xb8\xbc\x1c\x3e\x5a\x2c\xfd\x54\x47\xda\x19\x9c\xb3\x75\xb4\x7d\x21\x3a\x4f\x64\xc4\xcc\x5b\x76\xf8\x78\x79\xf9\xa7\x3a\xda\x24\x5e\x28\x51\xfc\x65\x8f\xf1\xe6\x35\x9e\xf0\x88\xf7\x1b\xed\x53\x1d\x69\xba\xba\xc8\x92\x9e\xec\x82\xdd\xa3\x2d\x6a\x3c\xd1\x11\x67\x71\x47\xb8\xeb\xb6\x01\xe7\x15\x9e\xee\x78\xf7\x5a\xbb\xbc\xfc\x93\x1d\xed\x3e\x23\x7d\xaa\xa3\x5c\x45\xc1\xd7\x01\xe3\xc4\x62\x4f\x73\x88\x83\x67\xf1\xc9\x8d\xef\x1e\xfe\xfb\x4f\xd0\x77\x3f\xda\xc7\x71\x3f\xda\xed\xb5\x1f\xc5\x99\xb2\x4f\x72\x23\x56\xfe\xe9\x1d\x73\x47\x71\xf6\xf3\x3f\x86\x23\x0e\x4a\xef\xc6\xdc\x5e\x68\x7b\x7a\x08\xdb\x07\x5d\x3b\x91\x35\x64\xa7\x7c\x8a\xfb\x23\x3b\x0d\x56\xba\xb5\x96\x2d\xbc\xa7\xac\xf7\x18\x47\xdc\xdf\x26\x83\xfb\xd5\xf0\x46\xf3\x0a\xbb\xf0\xb8\x84\x8a\xdd\x0e\x37\xdb\xd0\x98\x57\x7b\x62\x58\x2c\x46\x3b\x14\x8b\xbc\xc2\x2e\x2c\x76\x1a\x82\xba\x79\x52\xfc\x38\x4d\x40\x5b\x90\x96\x0c\x47\x57\xb2\x03\x51\x4b\xff\x8a\x2a\x59\x90\x85\x9d\x0a\x4b\xf9\xb6\xab\xc2\x43\xdd\x46\x58\x60\x61\xd7\x2d\x79\x05\x4c\x34\xb9\x8c\x93\x4e\x8d\xba\xeb\xe6\x8d\xbc\xf8\x63\x9c\xf5\xad\xc3\x0c\x96\x54\x61\xf7\x79\xed\xc9\x1d\xaa\x35\x9f\xe2\xa8\xef\x31\xdc\x47\x39\xce\xfe\x36\xd9\x28\x07\x36\x08\x85\x77\x61\x2d\x5c\x25\x7e\xdf\x0d\x2d\x41\x74\x19\xd2\x69\xd6\xc1\xf8\xfe\x74\xa7\x78\x72\xee\x14\x79\x06\x13\x6d\x32\x41\xbf\x8a\x97\xe9\x18\x3d\x2b\x0a\x0a\x90\x46\xe9\xbd\xdc\x28\x8a\x06\x98\x9b\xc4\xb7\x39\x53\xf4\xbb\x00\xdc\x33\x56\xfa\x89\xc6\x49\x2f\xf7\x0d\x92\x5e\x0e\x8b\x90\xfe\xc7\x8a\xae\xf6\x65\x93\xac\xce\xd3\xc2\x1f\x1f\xe7\xc0\x16\xb1\xf4\x0e\xcc\x25\x7e\x74\xb5\x2f\xe6\x58\x9d\xa7\x85\x39\x3e\xce\x81\x2d\x62\xe9\x5d\x98\xa3\xb3\xd5\x74\x6f\xd4\xb1\x4a\x8f\x11\x77\xdb\xc7\x8a\x6a\xea\xde\x5e\x25\x65\xbd\xa7\x37\xe2\x25\xdd\x5b\x9b\xe7\x95\x1e\xe3\x58\xb7\xac\x0c\x3e\xd2\xa1\x4b\x03\x8b\xef\xc4\xde\x9a\x26\x3d\x0e\x82\xdb\xd0\xc7\x6a\x3d\x46\xfc\x6d\x1b\x6d\x3a\x5f\x5d\x5e\x76\xab\x90\x5b\x46\x9b\xd7\x7a\x8c\xa3\xed\x6f\xb3\x18\xeb\xc0\x36\x79\xf9\x5d\x18\x0c\xa2\xab\x55\xe8\xf7\x5d\xc5\x53\x48\xec\x2f\xc2\xe0\xa2\xb3\xd2\xa3\x51\xc6\xd3\x30\xd8\x7b\x53\x60\x75\x1e\x23\x1d\x6c\x1d\x69\x9c\xdc\x63\x47\xc8\x6b\x3d\xb5\xd1\x66\xfe\xde\x61\xf9\x58\xe5\xe9\x8d\x33\xed\xb9\x8d\xb3\x6d\x49\xc2\xb2\x4f\x6e\x80\x41\x16\xd2\xfd\x93\x00\x15\xd5\x1e\xe3\x78\xfb\xdb\x2c\x47\x3b\xb0\xd1\xbc\xc2\x2e\x2c\xc6\x57\x57\xe1\x3d\xcd\x71\xf5\xba\x8f\x11\x9f\xbb\x47\x7e\xaf\x21\x3f\xca\xb1\x6e\xa1\x1d\x3e\xd2\xa1\x94\x83\xc5\x77\x61\x2f\x09\xba\x0d\xd5\x5b\x56\x1e\x54\x79\x62\x98\xc3\x51\x0e\xc5\x5b\x12\x2c\x76\x62\x6d\x15\x4d\x7b\xbc\xaa\xb6\x62\x8e\x57\x7b\x6a\xd8\xcb\x47\x3b\x18\x83\xac\xc2\x0e\x2c\xae\xa2\x19\x4d\xd2\x69\x4f\x50\xe8\x16\x3c\x56\x2a\x3e\x2d\x4c\x56\x47\x3c\xb0\xd9\xb2\xca\x4e\x6c\xee\xcf\xf9\x59\x9d\xc7\x88\xc3\x1d\x23\xfd\x97\x75\x07\x5b\x2d\x97\xf7\x8a\xe5\x2b\xeb\x3d\xc6\x11\x6f\x59\x11\xe5\x78\x87\x2e\x88\xbc\xc6\x2e\x4c\x66\x9d\x69\x11\x9b\x44\x92\x3d\xb5\x54\x88\x38\xae\xa1\xb8\xca\x76\xa5\x42\xec\xf4\xff\xd9\x42\x67\x8f\xd3\x13\xa8\xbf\xcd\x2f\x83\x5b\xfb\xb2\x0b\x53\x41\x36\x8f\x57\xfb\x5a\x20\xf3\x5a\x4f\x0c\x6b\xf9\x58\x87\xe2\x8e\x95\xdf\x81\xc1\xaf\x4a\x30\xed\xde\xa2\x0e\x9a\x72\xb3\xb8\xfe\x84\xb2\xe8\xee\x33\x9f\xe0\xcd\xe6\xb2\xc8\xba\xc7\x3f\x4a\x90\x2a\xc5\xd5\x53\xa9\x74\x8e\xb7\x31\xf8\xd3\x6c\x24\x91\xdf\xe3\x20\x1a\x89\x82\x28\xed\xcc\xcd\x98\xca\xb7\xd8\xf2\x38\xdc\xdc\xeb\x48\xf3\xeb\xdb\x69\x1c\x3d\x54\x54\xf8\xd7\x7d\x9c\x8e\xbe\x3e\x39\xaf\xa3\xaf\x7b\xb8\x1d\x7d\xed\xf5\x3b\x0a\xa2\x20\x0b\xf0\x54\x39\x49\x5f\xf8\xcb\xa5\x42\xa3\xf5\xa0\xdc\x48\x8c\xc6\x68\xed\xbe\x8f\xbb\xbb\xf2\x97\x7a\xfe\x8c\x92\x20\x02\xe0\x47\x78\x69\x7f\x12\x87\x21\x4d\x44\xbc\xc1\xff\x32\x00\xa2\x4e\x69\xb2\x0e\xa6\x74\xcc\x1f\x60\x06\x9a\xa2\xc2\x62\x19\x47\xe8\x17\xde\x5f\xfe\x5e\x29\x6e\x8a\xf1\xf6\xdd\xd1\x11\x4d\x6e\x23\x7f\x41\xc7\x22\x60\x23\xef\xbb\xac\x36\xce\x36\xbb\x2c\xaf\x2d\x9c\x66\xf1\xe7\x7a\xde\xbb\x07\xc0\x2a\xef\xa3\x40\x12\xfb\xdd\x87\xd3\x9e\xd2\x7f\x00\x46\x79\xcf\xf7\x47\x28\x8c\xda\x0f\x22\x9a\x28\x33\x7a\xb1\xba\x52\xfc\x99\xbf\xec\xc9\x25\x94\xd0\x34\x0e\xd7\x34\x79\x91\x7f\x49\x5f\x20\xbb\x0a\xa6\xbd\xad\x3c\x94\xd9\x9e\x63\xa0\x17\xf8\x0a\x3e\x2a\x0b\x78\x00\x31\x24\xf4\x2a\x48\x33\x9a\x8c\xfa\xda\x1e\x2f\xfc\x20\x12\x2b\xa9\x3d\xe4\x3a\x05\xf5\x57\x11\x01\xe6\x74\xe9\x4f\xa9\x28\xc3\xdc\x85\xc1\x14\xa3\x38\xd9\x6b\x69\xd3\x98\xb7\xb6\x4b\x49\x6d\xde\x4a\xc9\x6a\x11\x24\x5b\x6f\x1d\xfa\x76\x9c\x97\x0f\x38\xde\xdb\x9d\x77\x23\x7c\xb3\xd9\x49\x7f\x2d\xeb\xf3\x2e\xe3\xf4\x8e\xda\x8f\x71\xd7\x19\x88\x84\x99\x9f\x75\x26\x01\x80\xe7\x2f\x52\x9a\xad\x90\x81\x32\x0a\xab\xbd\xec\x90\x60\x0e\xb3\xd0\xfc\xfa\x84\x33\x00\xab\xbc\xa6\x18\xe4\xae\x2b\x97\x3a\x86\x5b\xe6\x36\x50\x2e\x12\xea\x7f\x5e\xc6\x41\xd4\xbc\x8a\xa9\x95\x05\xa1\xd6\x4e\xf9\xfc\x9f\x7f\x3e\x58\x1f\x20\x0e\x40\xa9\x2c\x72\xe5\x2a\x8c\x2f\x9a\x6e\xef\x45\x65\xb6\x2f\xbe\xa0\xd1\x3a\x48\xe2\x68\xd7\xed\x53\x03\x18\x59\x70\x39\x7a\xae\x3d\x9f\x94\xe0\x13\xd6\xeb\xab\x12\xa2\xff\x42\x80\xb8\x03\x23\x54\x40\x6b\x12\x8c\x6a\x26\x3e\xcf\x93\x24\x7e\x09\xa2\x59\xfc\x45\x8a\x26\xec\xcb\x33\x1a\xa6\x54\xe8\x29\xcb\x46\x28\x45\x13\xf6\x05\xcb\xde\xd6\xcb\x16\xc9\x17\x53\x1a\x5e\x72\xb7\xca\x67\xd1\x04\x7e\xe1\x7d\xac\xbe\x9c\xee\x06\xf9\x99\x3f\x11\x99\x36\x59\x69\xef\x65\xca\x53\x9a\xb3\x0b\xdf\x99\x84\x1e\x5c\x5e\x8f\xca\xe6\x16\x38\xeb\xef\x13\x7a\x19\x7c\x95\xe4\xe8\xcc\x3f\xbf\xbb\x1b\xc1\x9f\x09\x95\x81\xf1\xc7\x4b\x1a\x8d\x6e\xbf\x04\x61\xf8\x86\xa6\x59\x12\x5f\x8f\x6b\x6e\x8f\x41\x4a\xfe\x9e\xae\x40\x74\x86\x69\xbd\x1e\xc1\x13\xb9\x40\x3a\x50\x44\x48\x33\x2a\x40\x83\x9b\x8d\x24\x6d\xbe\x71\xf3\x8f\x76\xad\xc8\x7e\x12\xab\x2c\xd0\x68\xbf\x85\x79\x99\xf8\x57\x2c\x4a\x99\x26\xfc\x61\x0f\xc5\x96\x05\xca\x5a\x5b\xdd\x6d\xa5\xdb\xea\xe6\x5a\x56\x1f\x2b\x45\xf5\xca\xa6\xfa\xc0\xc8\xeb\x1c\xe7\xfd\xd1\xb6\x88\x67\x34\x2c\xc6\xd1\xc9\xc2\x80\x75\x2a\xcd\x72\x87\x67\x5a\xad\x9d\x3a\xef\xec\x53\xe2\x47\x29\x8b\x22\x60\x39\x10\x7b\x79\x7a\x55\x74\x28\x45\x9b\xac\xac\x2f\xa6\x19\x1a\x9c\x0b\x69\x97\xfd\x96\xfa\x36\x7b\xe6\xee\xab\xec\xbb\xe1\x95\xe5\x15\xec\x40\xe1\xdd\x3d\xb4\x4c\xb9\xcf\x56\xd7\xb3\x13\x74\x8d\x78\x4e\xfd\x99\x72\x91\xc4\x5f\xd2\xfa\x9a\x7a\x70\x59\xad\xde\xf1\x3e\x72\xda\x22\xf8\x1a\x44\xe9\x8b\x94\xfa\xc9\x74\x0e\xd2\x4e\x7d\xae\x2e\x57\x29\x25\xbf\xb7\xa9\xb8\xbe\xea\x07\xba\xd8\x17\x7e\xf2\xd9\x44\x95\xa3\x49\x44\xbf\x08\xfc\x1d\xf7\x78\x97\xbe\xcf\x7e\xc8\xbf\x7f\x9f\x7d\xf7\x9d\x14\x9d\x65\xe7\x13\x7a\x96\x15\x1e\xe2\xd1\xa6\xe9\x9f\x8f\x5d\x35\x5c\xee\x85\x20\x12\x18\x96\xb1\xb0\x78\xc6\x02\xd7\x84\x57\x39\x27\x3f\x17\x27\x93\x09\x9f\x87\x22\xf1\x2f\xc9\xe2\x7c\x63\xf1\xc3\xb0\x12\x13\xc0\x06\x72\x99\xc4\x8b\x11\x95\x1a\xfd\x0f\x77\x96\x4f\x97\x09\xf5\x67\x7f\xdc\x55\xbf\xef\x60\x66\xc9\x34\xa1\x7e\x46\x47\xb7\x6c\x82\x3f\xd1\x64\x31\x16\x45\x39\x0c\xd2\xec\x53\xfc\x11\x9f\xf1\x3d\x15\x54\xdd\x55\x46\x67\xa3\x96\x98\x7b\x76\xbe\x91\x64\x56\x1f\x80\x4a\xc7\xd1\x2a\x0c\x65\xfa\xd5\x9f\x66\xef\xfc\x6c\x3a\xff\x58\x79\x55\x6f\x8b\xc0\x88\x53\xd8\x09\x8a\x12\xa2\x24\x27\xf4\x8a\x7e\xdd\xb7\xd2\xe5\xea\xe6\xe6\x7a\xdf\x4a\x25\x8c\x3f\x47\x80\xef\x19\x88\xf2\x95\x96\x8a\xa7\x1a\x03\xaa\x52\x2a\xa1\x29\xcd\xde\xfb\x57\x41\xc4\xf4\xb7\x0a\x56\x58\xfe\x60\x14\x16\x98\x46\x02\xe5\xe8\xd1\x11\x3e\x49\x29\xe8\x88\xe5\x63\x51\xd6\xa4\x8d\x0c\xcb\xa8\x89\x67\xb1\x3a\x09\xe4\xec\x1c\x57\x5b\x7d\x90\xf8\xb4\xad\x76\x00\xad\x15\xac\x0a\x65\x14\x52\x6d\x4b\xbe\x4d\xe7\xf1\x2a\x9c\x7d\x8c\x93\x0c\x86\x92\xcd\x13\x9a\xce\xe3\x70\x36\x26\xa6\x1c\xc6\x5c\x21\x55\xe5\x59\xc0\x88\x6f\xac\xa9\xaa\x8c\x36\x06\xe0\x18\xcf\x55\x79\x01\x18\x7b\x15\x86\x9f\xe0\x59\xca\x9e\x7c\x7d\x0f\xa4\x9c\x44\x27\xb8\x38\xc7\x86\x2e\x2f\x82\x08\x51\xfb\x7a\xee\x27\xfc\xa9\x26\x7f\xa6\xd7\xe9\x18\x21\x6a\x8e\xe5\xee\xee\xec\x1c\xd4\xa8\x5f\x2a\xb8\xac\xc6\xe7\x30\xec\x5c\xd1\x0c\x9f\x32\x85\x0a\x46\xc5\x9a\xa0\xb3\x16\xfa\x4a\x8a\x16\xe5\x0e\x5c\xb6\xe6\xbe\x8e\xdf\xf2\x61\x75\xe6\x6b\xf5\x9a\x13\xd1\x3d\x3d\x62\x93\x9c\x9b\x93\xc6\xe4\x78\x4e\x1c\x39\xc8\xe8\x30\x30\x92\x50\x86\xa7\x77\x77\xcf\x0b\x0e\x98\x6b\x96\xcd\x49\x7d\xc6\xf8\xe6\x59\xc1\x09\xb1\x44\x6b\x90\x47\x47\x19\x46\x14\xe5\xf2\xab\x1c\x8d\x9a\x5a\x63\x70\x39\x6a\xf5\x46\x2e\x83\x30\xab\x5e\x08\x54\xce\x4b\x44\xd2\x78\x41\xcb\x37\x51\xc7\x8c\x41\xbb\x93\xc9\x84\xc2\xa4\x61\x38\x51\x8b\x24\x1b\xd0\x56\xd0\x25\x49\x92\xdc\x24\x98\xfe\xc1\xf0\x92\x29\xe5\xb8\x04\x2e\xcd\xeb\x57\xe7\x71\x4f\x34\x60\x0c\x15\x8f\x4b\xa2\x5f\x84\x0f\xf4\xea\xe7\xaf\x4b\x60\xbc\x41\x61\xd0\xef\xc0\x11\xed\xc5\x51\x89\x3d\x9f\x64\x34\xcd\x46\x75\xe2\x96\x10\x4f\x2c\xa2\x2b\x95\x6e\x37\x05\x9b\xdd\x82\xbb\x26\x95\xe1\xb0\xc9\x2a\x0a\xfe\x31\x92\x36\x03\x6e\x5e\xcf\xf7\xf9\x38\xc9\x9a\xbb\xfc\xa1\xa5\x13\x46\xa9\x9d\x9b\x50\x9c\x64\x79\x93\x6c\x17\x81\x27\x6f\x68\x3a\xa5\xd1\x2c\x88\xae\x80\xd5\xf0\xa1\x03\xef\x1a\xb4\x31\x21\x8f\xc0\x1b\x2f\xfa\x18\x6c\x9c\x64\x6c\xa5\x56\xbb\xe7\x3f\xcb\xbe\xfb\xd6\x6c\xa5\x91\xf2\xb8\x07\xaa\xfe\xc4\xd4\x43\x52\x6d\x55\xaa\xad\xce\x7a\x07\x2f\x41\x37\x42\xdf\xf8\x91\x34\xa6\x8d\x39\xcb\xb6\xcc\x19\x53\xcb\x95\x84\xa6\xc1\x4d\x5b\x42\xeb\x49\x2a\x7d\x28\x81\xb9\x6b\x1a\x19\x40\x1f\x00\x1e\xca\x6e\x17\x4b\x6a\x82\xa6\x8c\x76\xac\xff\xa9\x94\x6a\x1b\x68\x01\x41\xcf\x58\xe3\xc9\x2a\x22\x29\xb0\xf8\x55\x48\xff\x1a\x4d\xe9\x48\xc4\xb4\xf5\x1f\x68\x34\x03\x69\x16\x75\xf0\x4a\x7d\xca\xf6\xd8\xbf\x77\x40\x21\xca\x94\x74\x3c\x26\x17\x41\x34\x03\x4e\x21\xd7\xf3\x35\x73\xc3\x07\x89\xa3\x91\x88\xd8\xa5\xd0\x40\x57\xc3\xb0\xc4\xb0\xd8\x2c\x98\xbd\x8d\x52\x9a\x64\x3f\xb3\x5b\xd8\x51\x9c\x59\xc4\x6b\xda\x37\xda\x9e\x1e\x2f\x2f\xcb\x2e\x99\xd9\xa1\xb3\x57\xec\xb3\x62\xad\x28\x7a\xad\x11\x4f\xa7\x86\x52\x10\x4f\x36\x57\x8a\x63\x0c\x65\x1d\xa4\xc1\x45\x10\x06\xd9\xb5\x32\xa3\x19\x6d\x79\x7e\xfe\x71\xbc\xa0\x84\xa4\x9f\x84\xde\xc4\x53\x94\xd7\x4f\x8b\xb2\xd5\x42\xac\x55\xe0\xaf\x41\x74\x75\x77\x37\x2a\xe5\xaf\xbf\xb7\x1a\xe7\x58\x6e\x3d\x67\xa4\x01\xef\x24\x49\x9e\xf1\xee\x88\x3f\x9b\xfd\xbc\xa6\x51\x76\x12\xa4\x19\x8d\x68\x32\x12\xcb\x8a\xd3\x39\x0b\x42\x63\xb3\xd6\x6a\x50\xe2\x93\x06\x3a\x58\x41\x1c\x7b\x8d\xa3\x80\x82\xd5\xbd\x37\x20\x2d\xe2\x11\xf7\x61\x39\xd9\x5c\xb9\x8c\x93\x8b\x60\x36\xa3\x91\x92\x66\x0d\xbf\xc5\x3f\x70\xcb\x00\x3a\x78\x5d\x9c\xda\xd5\x2c\x17\x38\xf2\x20\xfd\x25\x87\xf3\xe8\xa8\x42\x03\x95\xe7\xa2\xcc\xba\x81\x8e\xdb\xef\x9e\xab\xb9\x04\xb1\xcd\xf4\xb7\x61\x1a\x41\x0f\x24\x9d\xed\x6a\x43\x9a\xdd\x6f\x4a\x98\x71\x89\x82\x8e\xa9\xcc\x61\x9e\x71\xe3\xea\x34\xde\xad\xb2\x20\xc4\x64\x45\xc1\xe5\x35\xab\xf1\x87\xee\x11\x08\x69\xd7\x91\xc9\x2e\x8c\x10\x26\x17\xd5\xf9\x26\x5b\xa0\x9b\xfd\xb8\x5e\x71\x14\xa7\xe0\xd4\x65\x0d\x5c\xfd\x81\x34\x7c\x9d\x66\x74\xc1\xc5\x13\x66\x6c\x23\xdc\xd0\x35\x92\xe4\xdf\xe3\x8b\xb4\x42\x56\xb5\x52\xe5\x71\xf5\x48\x84\x72\xa2\x24\x33\x8f\xfb\x74\x7c\x7b\x15\x67\xf1\x5f\xe2\x8b\xb4\xbd\x24\x90\x16\x59\xa7\x04\x8a\xaf\xe9\xaf\xe5\xa9\x24\x96\x00\x49\x54\xac\x77\x4c\x7e\x8f\x2f\xca\x62\xf9\x92\x48\x77\x15\x94\x29\x6b\x2c\x98\x15\x75\xd0\x8c\x18\x00\x44\x9f\xe2\x0f\xf1\x2a\xa3\x39\xec\x9b\x3d\xa9\x3d\x81\xca\x7f\x6e\x59\x7f\xd4\x96\x85\xa4\x02\x8c\xfe\x11\x6c\x5b\x33\x5a\x42\xb3\x1f\xd1\x7c\x01\xf6\x41\x93\xb4\x87\x2d\x0e\xa4\xaf\x3f\x90\x55\x16\x6c\x4e\xbe\xcd\x61\x1f\xa6\xf9\x4c\xfd\x68\x4a\xc3\x57\x61\xf8\x3f\x79\xb5\xe6\x59\x56\xde\x1e\xb9\x8c\x93\x9f\xfd\xe9\x7c\x54\xdf\xb3\x8a\x06\x50\x85\x94\xd3\xcc\x4f\xb2\xae\xb6\x38\x69\x77\xed\x7d\x75\xbe\x5e\x6b\xa1\xe7\x08\x6d\xc0\x4e\xbb\x75\x9d\x15\x74\x36\xc7\x7d\xf6\x25\xb3\xc3\x35\x51\x31\x92\xc6\x6d\x88\xd8\x72\x2b\x79\xaa\xdc\xf8\xcd\x38\x19\xee\x5c\xa2\x24\x6d\x4a\x56\x0b\x42\xd4\xa7\x82\xab\x75\x5e\x3f\x47\x82\x28\x03\xa8\x60\xd3\x39\x3a\xaa\xfd\x64\x40\xa4\xff\x13\x64\x73\x06\x01\xd2\x1d\xb0\x50\xe9\xee\xae\x0f\x7c\xf9\xb9\xba\x19\xb2\xdf\x01\xb0\xe9\x0b\xff\xaa\x27\x1f\x28\x9e\xb2\xb0\x11\xd5\x1e\xf9\x59\xd6\x94\x07\x0e\xe9\x51\x50\x3d\xdf\xcd\x68\x34\xdb\xb5\x07\xe2\x29\xc6\x48\x95\xa3\x72\xcb\xcf\x8f\x7f\x25\xd9\x9f\xcd\x12\x9a\xa6\xbd\xef\x53\x9a\x5c\xbe\x8f\x93\xac\xb7\x40\xb2\x9c\x6e\x7d\x9f\xf9\x57\xcd\xd6\x6f\xf9\xb7\x53\x1c\x6a\x8b\xdc\xd9\x61\x0a\x88\xc5\xab\x7e\xb8\x00\xd1\x53\x1a\x65\x34\xe9\x87\x8c\x5e\x01\x41\x6d\x01\xfc\xd5\x6c\x96\xb4\x0c\x1b\x1c\x23\xa2\x2c\xc2\x6c\xf7\x59\x2e\x78\x29\x39\x63\x3f\x39\x16\x9e\x95\x17\x26\x66\x47\x47\x62\xe1\xcf\x4a\x65\x71\x2c\x4a\xf9\xaf\x4c\xda\x48\x72\x90\x9e\x50\x7f\x46\xdb\xfd\x73\xd9\x22\xc4\xb7\x84\x43\xd9\x65\xa9\x2e\x85\x8d\xee\x2a\xd2\x64\x52\x00\x07\x0f\x06\x59\xb2\x38\xc9\x87\xb9\x29\x7b\x6f\xba\xaf\x3d\x49\x68\x88\xad\xa4\xf3\x60\xb9\xfd\x28\x17\x2b\x07\x17\xab\x8c\x42\xb9\x30\x9e\xf9\xe9\x9c\x14\xb7\x94\x23\x20\x4d\xf1\x7b\xc9\x96\x50\x40\xd3\x17\xe9\x3c\x4e\x32\x65\xb5\x0a\x9a\xf7\x53\xc8\x91\xec\xcb\xa9\x1c\xca\xf1\xa1\xd6\x5f\x32\xb9\x5d\x72\x83\x9a\x26\x27\xab\x28\x82\x6f\xba\x0c\xf3\x17\xd2\x8c\x8e\x0d\xf9\xd2\x0f\x42\x3a\x1b\x9b\x72\x18\xa7\xd9\xd8\xda\xc8\x41\xc7\x92\xc5\x23\x81\xbe\x15\x8b\xc3\x79\x3b\x03\xd2\x8d\x2b\xa4\x0b\x62\x20\x48\xb4\xf0\xdc\x27\x17\x34\x8c\xa3\xab\xf4\x53\x2c\xa1\x08\x28\x4a\x72\x14\xcf\x68\xfb\x1d\x3c\x15\x77\x70\x81\xcc\x4f\x3f\xff\x57\x12\xaf\x96\xbf\x6e\x2b\x95\xd0\x34\x5e\x25\x53\x8a\xab\x32\x25\xf9\xdc\x49\x68\x6d\x61\x6f\x18\x80\xa7\x34\x49\x3b\x96\x5e\xb4\x82\xe1\x8a\x92\xbc\x88\x67\xc1\xe5\xf5\xdb\x68\x46\xbf\xee\x28\xf3\x29\x68\xc3\x33\x63\x62\x14\xdb\xe1\xb7\x37\xc2\xca\x6c\x6b\x24\x0c\x68\x94\x7d\xdc\xc1\x6b\x68\x1a\x24\x74\xb6\xa3\x14\x63\x58\x0c\x9e\xe6\x9a\xae\x76\xd3\xb5\x94\x93\x33\xb6\x55\x55\x8a\x9d\xdf\xdd\x69\xaa\x8a\x8c\xe2\x03\xa7\xb2\xc6\xa9\x1c\xa6\x17\x6e\xb6\x2d\x72\x92\x14\x25\x39\xcf\x0c\xf5\xaa\x58\xcc\x6d\xe2\xa8\x2e\xf4\xdb\x20\x42\x0b\xea\x18\x93\x27\x97\xb5\xc4\x8d\x24\xd7\x9f\x0c\x6d\xa7\x0d\x01\xb4\xb5\x4c\x28\x5d\x2c\x33\x3a\x2b\x1f\xa7\xac\xc5\xb9\x9f\xbe\xf3\xa3\xeb\x6d\xed\xb1\x9a\x3f\x5d\xf7\x34\x59\x7d\xb1\x07\x94\x2d\x78\xa0\xd1\x2f\x7e\xfa\x3e\x7f\xd5\x9c\xf5\x8b\x38\x0e\xa9\x1f\x89\x92\x7c\x19\x87\x61\xfc\xe5\xb7\xe5\xcf\xc0\x38\x7a\xfa\xa5\xc5\xbb\x82\x4e\x5e\x63\x98\xc2\x9e\x74\x52\x70\x1e\x31\x48\x95\x65\x6e\x5a\xcf\x99\x10\x3e\x4c\x82\x85\x9f\x5c\x8b\x25\x3f\x82\xa7\xf9\x0f\x31\xe7\x4d\xf0\x90\x99\x2d\x18\x93\x82\xdf\x61\x70\x35\xcf\xc4\x4d\x27\x25\xc2\xfb\x99\x9f\x7c\x06\xb4\x14\xbc\xa2\x05\x7d\x8d\x8b\x88\x32\x70\x25\x52\x3c\xdb\x76\x74\x97\x6b\xcc\x95\xd2\xe5\xd9\x10\x4a\x7c\x97\x41\x34\xfb\xe9\x7a\x84\x1e\xc0\x5c\xbd\xa9\xf5\x06\x3b\xea\x2a\x9a\x53\x3f\xcc\xe6\xd7\x6f\x92\x60\xdd\x21\xe8\x97\xf0\x91\x19\x2b\xc1\x4e\x2e\x80\x41\x92\x46\x65\xd4\xc1\x77\x41\xdc\x6a\x0f\x38\x69\xe5\x7d\x6f\xc3\xb5\xc1\x65\x2f\x47\xaa\x1c\x96\xb4\x05\x2a\xd1\x98\xb9\x05\x64\x7e\xd6\x64\xb6\xe8\x2e\x21\xb1\xbe\xb9\xe9\x10\x19\x33\x37\xf1\xa3\x66\xd8\x53\xa5\x2c\xa5\xd0\x35\x33\xaf\xcf\xfd\xf4\x43\xb3\x6e\x13\x6b\xcd\xc6\xf9\xb9\x9e\x28\x37\xd9\xc4\x56\x11\xa5\xaf\x15\xe9\x47\x95\xcb\xe9\xf5\xd6\x36\x08\xdc\xc7\x2c\x5e\x2e\xe9\xac\x80\xb1\xcd\x05\x47\x2d\x28\x9a\x0c\xb1\xbd\x40\x51\x2b\x41\x99\xbe\x05\xf1\xf3\xca\xec\xd5\xda\x2d\xea\x48\x47\x47\x95\x42\x5b\x1a\x97\x8e\x8e\x44\xb6\xdc\xc4\x5c\x10\xab\x42\x86\xf3\x1b\x2f\xfb\xb5\xbd\x38\xa1\x84\xfb\xbf\xff\x12\x27\x35\xe6\x25\xc1\xeb\x25\x33\x53\xa0\xed\x14\x74\xa0\x2e\xcd\x69\x48\x53\xbc\x3a\xd3\x14\x69\xc3\x0e\x18\x6c\x11\x12\x67\x74\x19\xc6\xd7\x7d\x97\x25\x3c\xbc\x90\x38\x48\x1c\xdc\x5a\x6c\xb5\x50\xfc\xab\xab\x84\x5e\x75\x5d\x06\xf5\x10\xa2\x63\x87\xea\x56\x8a\x7a\xe1\x60\x51\xaf\xb2\x79\x95\x93\x80\x7b\xd6\xef\xf1\xc5\x2f\x71\x72\x02\x7c\x23\xdb\x59\x37\xc4\x62\x6f\xca\x69\xdc\x48\xf2\x9a\x89\x6e\xbf\xa2\x04\xd5\x2b\x57\x25\xf4\x1f\xab\x20\xa1\xe9\xfb\x24\x5e\xc4\xb8\xe7\xf5\xf2\xda\x8f\xab\xc5\xc2\x4f\x02\x9a\x92\xff\x87\xfa\xd3\x39\x59\x62\x15\x3a\xeb\x58\x7c\x85\xec\x92\xaf\x17\xb6\x55\x72\xe7\x9f\x8e\x16\xb3\x98\xb9\xb8\x49\x0d\x17\x81\xaa\xe9\x80\x73\x9f\x06\xbc\xb8\x8c\xf9\xcb\x02\x22\x3c\xeb\xdf\xa5\x78\xb2\xd7\x6f\x68\x3a\x4d\x82\x65\xb6\x4d\xc1\xdc\x25\xb8\xa5\x6d\x91\xad\x3d\xc6\x2d\xdc\xff\x0a\x0a\x2a\x25\x01\x28\x29\x56\xba\x06\xad\x7e\x88\x64\x05\xdb\x15\x9f\xee\xd6\xf4\xd5\xc8\x80\x6f\xe5\xfc\x59\x9a\x73\x38\x3e\xa1\x9c\x28\xda\xd3\x39\xaa\xef\xed\x79\x75\x51\xba\xbb\x3b\x3b\x97\xca\x2d\x9d\xd7\x67\x06\xd9\x6a\xbf\x52\x49\x8f\x1f\x57\x17\x8b\x20\x43\x41\xbe\x81\x4c\x3f\x0c\xfc\xb4\x00\x98\xa4\x45\x41\x90\x80\x43\x7f\x4a\x67\xaf\xfd\xa8\x40\x65\x55\x9d\x6a\x23\x1b\x74\xfe\x5a\x95\x52\xf8\xdf\xab\x91\x46\x9d\xb2\x95\x4f\x71\xe6\x87\xfb\x34\x81\x15\x8a\x91\xe0\x76\xb4\xcf\x38\x58\x05\xd8\xe8\x99\x0c\xb2\x47\x03\xb5\x1a\x62\x45\xba\xda\xa3\x8d\x46\x9d\x1d\xc2\x6f\xda\x2b\xf6\x56\x25\xdc\x7c\xb1\xc8\xe9\x6a\x3a\xa5\x69\x7a\xb9\x0a\xeb\x92\xef\xd2\x5f\xa5\x5c\xc4\x65\x22\x6d\x87\xd0\xcb\x6c\x82\xf9\xc3\xe2\x57\x2e\xfd\xa6\x5d\x72\x2f\x67\x13\xc3\x37\xec\xca\xfe\x28\xe5\x6c\x8f\xef\xd9\xb5\x3d\x36\xd9\xb6\xc7\x26\x7e\x10\x29\x69\x96\xf8\x19\xbd\xea\x8c\xec\xea\xde\x54\x5b\x3b\x67\x4f\x88\xc1\x21\xed\x92\x51\x6b\x73\x9b\x51\x7f\x16\x06\x11\x1d\xd7\x0f\x1c\xcb\x7d\xe4\x32\x4e\xa6\xf4\x4d\x4f\x29\xae\xa2\x07\x57\x51\x9c\xd0\x8f\x68\xe2\xc2\x23\xb9\x46\xb1\x52\x15\xc3\x13\xe2\x69\xcb\x57\x89\x84\x19\x9e\x79\x60\x27\xa2\xac\xa2\x64\xf9\x6b\x5c\x74\xdb\xcd\x9d\xab\x15\x06\xdb\xcd\x2a\x8a\xde\xe3\x15\x89\xba\xc5\x9c\x43\xd1\x41\xbc\xa7\x90\xb3\x4c\x82\x38\x09\xb2\xeb\x5e\x59\x23\xbb\x5e\x6e\x31\x5c\x25\xc1\xd5\x15\x4d\x40\xf1\xdf\xb1\x63\x1f\x60\x43\x67\x7c\xe4\xd3\x7f\x95\x1c\xb0\xbd\x33\x23\xdf\x65\xb7\x32\xfa\x41\xb8\xc2\xbc\x42\xdb\xcd\xdd\x67\xe7\x1b\xa6\xec\xbc\xcf\xab\xfe\xc2\x6a\xb6\xdc\xb0\x81\xd2\x47\x62\x1d\x8a\x42\x8f\x92\x83\xf4\xa7\x30\x9e\x7e\x6e\x93\x7f\x53\xdc\xb8\x60\xc5\xb6\xdb\x12\x87\x98\xe8\xbe\xf8\x41\xf6\x5b\x94\x05\x61\xb7\x71\xad\xb6\x6a\xe2\x2d\xab\xe6\xf7\xf8\x42\x59\x86\xfe\xb7\xad\x99\xed\x0b\xa3\x77\x6d\x75\x2d\x86\x43\x2d\x85\xb0\x63\x29\xcc\x82\xcb\xcb\x06\xba\xba\x08\xcb\x3f\x18\x61\x71\xeb\x56\x2e\x0a\xa6\xdd\x46\xb6\xfa\x64\x85\x3b\x26\x2b\x17\x34\x1f\x1b\x8f\x1b\xa4\xcf\x3d\x24\xa3\xdb\xb2\xa0\xee\x21\xda\x97\xf2\x3c\xe6\xa9\xaf\x88\x7f\xe1\x2e\xc9\xab\x5a\x81\xf1\xb8\x24\x0b\xa2\xab\x3d\x5a\xa8\x57\x01\x9d\x8f\x09\x5e\x7b\x34\x51\xab\x21\x4a\x85\x4d\x72\x8f\x26\xea\x55\x0a\x1e\xbc\x47\x0b\xd5\x0a\xa2\x84\xe6\xce\x3d\x6a\x97\xc5\x73\xad\x2a\x3d\x09\xd2\xa6\xf7\x34\x99\xc6\x61\x88\x51\x7e\x35\xbc\xb7\x90\xd8\x44\x49\x6b\x7c\x0d\x70\x1b\xfd\x67\xa0\x0c\x70\xe0\x1b\x00\xa4\xab\x05\x5f\xcf\x08\x1f\xec\xab\xcc\x3c\xfc\x7a\x1e\x84\xb3\x84\xf6\x9f\xc5\x70\x88\x76\x96\x03\x79\x68\x67\xa1\x29\x2f\xb0\x15\x47\x0d\xc8\x4a\xac\x54\x9e\x54\x7b\xcb\x47\x5e\xf4\xde\x35\xf6\x6a\xcf\x7b\x6e\x3d\x5c\x75\x3c\x24\x37\x6b\x73\x9e\x43\x71\x9d\x74\x3f\xae\x93\x62\x40\x42\xff\xe9\x45\xa9\x2e\xf7\x1c\x90\x45\xdb\x0d\x41\x5d\xdb\xd9\x66\x67\x46\xa4\x12\xf9\xff\x8c\x2d\xa4\x7b\xcb\x2f\x82\x2e\xc3\x3f\x83\x2e\x1f\x59\xd0\x65\x3c\x39\xcb\x43\xa5\x41\x7c\xf5\xb3\xe9\x1c\x78\x2b\x6a\x84\xe2\xb9\xdc\x65\x56\xdd\xe1\xfb\xb1\xf5\x30\x7c\x19\xfa\x41\xf4\xb6\x75\xe4\x57\xea\x1c\xdb\x14\x92\x9d\xea\x8c\x1f\x86\xaf\xb2\xbf\x46\xd3\x6d\x8b\xf2\x50\x0a\xcb\x90\x23\xf2\x21\x82\xfe\x92\x26\x41\x3c\x0b\xa6\xfd\x20\x2f\xfd\xc4\x5f\xd0\x8c\x26\xc1\xcd\xb6\xc3\xd2\x59\x90\x2e\xd1\x0b\x6b\x4b\x99\xbc\xb3\x37\x34\xf3\x83\xb0\x89\x86\x46\x57\x7d\x85\xe6\x7e\xda\xb3\x5d\xc0\xfe\xc3\x3a\x10\x65\xb1\xd6\x16\x6c\x3b\x05\x7c\xbd\xa7\x59\x79\x6d\x7e\x6a\x55\x6b\x21\x3f\x1a\x2a\x9b\xd9\x20\xbc\x34\xda\x6d\x8c\xcf\x37\x30\x71\x53\x6e\xa3\x4d\xdb\x6d\xa3\x0a\x6b\x19\xcf\x64\x93\x60\xb1\xa0\x33\xf4\xde\x68\x9d\x8f\xb1\xc3\x58\x5e\x78\xeb\x21\x1d\x2b\x53\x9e\x60\x31\xff\x3f\x74\xb3\x4b\x28\x2a\x20\xa3\x17\xe4\xbb\x97\xff\xdf\x8b\x17\xb2\x28\x72\x27\x40\x78\xbb\x61\x33\x1b\xfa\xd7\xc0\x30\xda\x67\x01\xd7\x4b\x84\xa0\x17\xef\x3b\x50\xfd\xb2\xac\x3a\x6e\x23\xfd\x65\xa3\x35\x56\x04\xfa\x04\xc4\xd0\xc5\x32\xf4\x33\x7a\x3f\xb8\x72\x84\xd4\x4b\xe0\x93\xde\x01\x54\x0e\x89\xa1\xfd\x67\x7d\x48\x2e\xda\x94\xca\xe1\x29\x38\xf1\x7c\x04\xb5\xc2\xb5\xee\xa4\xc6\x90\x6b\xd5\xee\x89\xb4\x98\x04\xd1\x34\x5c\xcd\x68\x3a\xa2\x7c\xde\x91\xcf\x15\x8c\x77\x53\xf5\xb9\x6b\x2f\xb8\xf2\xe4\x7e\x97\x5a\x33\x50\x6f\xe5\xca\x4f\xe7\xba\xa9\x68\x46\x41\xfa\x1e\x44\x6c\x3f\xec\xb1\x7a\x54\xfc\x0f\xf2\x73\x6b\xb5\x02\xed\xeb\x78\x15\xb5\x24\x55\xd8\xee\x3a\xea\x75\x9d\x69\x15\xd6\x97\x0e\xf5\xae\xfb\xa0\x82\x83\xde\x71\x9c\xd5\xd4\xf3\xb6\xd7\xdf\xae\xe1\x6d\xaf\xbb\x43\xb7\xdb\x5e\x79\x87\x56\xb7\xbd\xf2\x76\x7d\x6e\x7b\xdd\x7e\x4d\x6e\x7b\xbd\xa1\x3a\x54\x73\x82\xca\x92\x1d\xea\xd4\xf6\xba\x4d\x15\xa7\xad\x66\x0d\xc2\x71\xa5\x7e\x4d\xfd\xda\x5e\x79\x1f\xdd\xa9\x6b\xcc\x95\xba\xeb\x1d\x8e\x7c\xf9\x99\x5e\xc7\x46\xa5\x94\xe7\x7d\xc3\x8f\x23\x2b\xa7\xd9\xcd\x82\xd5\x83\x6e\x49\x2e\x0d\xed\xad\x82\x95\x57\x5c\xd2\xc3\x60\x9a\x0e\xc7\xc8\x32\x20\x47\x9e\xed\x72\x19\xca\x8f\xaf\x73\x4f\x9f\xbe\x3d\xab\x52\x61\xe1\x2f\x7f\xba\x1e\x89\x85\x6f\x10\x61\x57\xdb\x8d\x3a\x33\x34\xd0\x6a\x48\x3d\x95\xc3\x51\x26\x49\x32\xdd\xc8\x67\xe7\x52\x11\x88\xbe\xdb\xc3\xa9\x82\x4d\x0e\x6f\xb3\x4a\x4f\xd6\x0b\xe6\xd3\x5c\xa9\xcd\x81\x6f\x56\x3f\xc4\x28\xe6\x7e\x6e\xa9\xae\xf8\xcc\x35\x47\x52\x99\x45\x3e\x92\xc2\xbe\xdd\x0b\x7f\xb5\xce\x60\xd7\x80\xb2\x59\x76\xfc\x3f\xc4\x10\xef\x47\xb3\x11\xf7\x9e\xe0\x45\x7e\xae\x1c\xfc\x88\x5d\x03\x04\x86\x85\x15\xf6\x1a\x73\x45\x38\x07\xf5\xb6\xf2\x3e\x48\xdf\x6f\x0f\xad\xaf\x14\xe6\x32\xc8\x73\x7a\x77\x57\x0c\x3a\xaf\x2d\xbd\x8c\x56\x61\x38\xa6\x79\xd4\xbd\x58\xed\x52\x62\xa5\x43\x3f\xcd\x98\x26\x27\x62\xe2\x90\xee\x81\xff\x71\xc3\xe1\x79\x3d\xda\x63\xc9\xd5\x5b\x18\x12\x0f\x35\xa3\x3c\xb3\x04\x0c\xad\x6b\x6a\x2b\x39\x28\x5e\x66\x43\x91\x30\x66\xca\x29\x4a\x29\x4b\x34\x5e\xbc\xa9\x30\xae\x1e\x41\x84\x09\x9b\xb9\x38\x95\xa3\xb1\xac\xd8\x66\x50\x55\x07\xab\x52\xea\xaf\xba\xf8\x80\x54\xc6\xf7\x8a\x4a\x43\xad\x54\x0d\x4d\x3f\x1f\xb9\xf5\x88\x14\xce\x2a\xbd\xa9\x1a\x1a\x35\x9e\x61\x8e\x0f\x3e\x03\x79\xdd\xca\x4d\xcf\x92\x7c\x49\xb3\xe9\xfc\x83\xff\xe5\x0d\x68\xff\x8d\xe0\x9e\x5d\x67\xe7\x68\xbd\x22\xed\x16\x72\x9f\x37\x3c\x38\x7e\x9f\xab\xa5\xfb\x36\x5b\xad\x9c\xb7\xb8\x9f\x33\x1e\x6b\xa8\xea\x85\xb7\x0c\xfd\xbd\xc7\x07\x75\x0a\x2f\xbe\xd5\xde\xd5\x93\x55\x51\x7b\xb5\x9c\xf9\xfb\xf8\x26\xb0\x06\x58\xad\x62\x04\x3e\xd0\x57\x73\xf6\xb9\x47\xab\x1c\x31\x32\xf8\x7b\x44\x2b\xd3\xf1\xac\xcc\xed\xf2\x97\x8f\x7f\xfd\x95\x60\x13\xa3\x48\x7a\x56\x89\xbd\xac\x55\x80\x52\xa2\xec\xf3\x48\xb5\x20\xfd\x95\x7e\x29\x73\x3b\xbd\x9d\xfd\x74\xfd\xde\xbf\x0e\x63\x7f\x36\xf2\x25\x99\xf2\x80\xbe\x0f\x1f\x4f\xdf\x13\x9e\x31\x79\x14\x55\x72\xbb\xe4\x89\x7f\xfa\xb0\x8b\xc0\x74\x40\x2d\x91\x6c\x4e\xa3\xda\x9e\x90\xf5\x03\x4b\x25\x39\x6b\x42\x47\x61\xaf\x28\x48\x5d\xae\xbf\xad\x39\x62\xe6\x5c\xa8\x08\xea\xbd\xbb\x2b\xf3\xe0\x46\xfc\x45\x05\x5d\xdc\xf8\x24\xca\x51\x35\x48\x38\x98\x89\x32\x22\x98\x99\x76\x82\xcb\xeb\xd1\x59\x24\x67\xe7\x92\x94\xc7\x84\x95\x88\x58\x52\xfa\xf9\x03\x9d\xc6\xc9\xac\x2a\xe2\xc8\x99\xf4\xcc\xaf\xa6\xd1\xaa\xbc\xf2\xf3\x00\xfc\xb7\xb3\x56\x94\x63\x6f\xf7\x4c\xa7\x64\xd0\x56\xe2\x9e\x8b\x66\xd1\x30\x20\x4a\x95\xe1\x9e\x4b\x2c\x0e\xf2\x1e\x0e\x40\xc3\xfd\xde\x41\xf8\x6d\xbb\xb3\x77\x3b\xf4\xf0\xe9\xea\x0f\xfb\x98\xc6\x33\x3a\xcb\x67\xb5\x65\x46\x62\xcf\xbb\xa4\x11\x96\x6e\x84\xf8\x59\x7c\x31\xe2\xba\x37\x96\xbd\xbb\x13\x71\x07\xad\x93\x59\x2f\x00\x6d\x6a\xec\x2b\x3a\xd8\x9f\xa8\x32\xeb\x8f\x38\x9e\x31\x6a\xdb\xb1\x30\x07\xdd\x5f\xa3\xf0\x9a\xbb\x8d\xcc\xfd\x74\xbe\x2d\x60\x67\x97\x6d\x74\xb0\x4b\x4f\x44\xb3\x2f\x71\xd2\x79\xe3\xe3\xbe\xae\x57\xf7\x3f\xa0\x38\xdc\xe9\x51\x97\x93\x16\xe6\x20\x6d\x78\x55\x95\x36\xe4\x60\x96\xf4\xbe\x0c\x96\xbd\xaf\x16\x17\x41\xd6\xf2\xd5\xaa\x38\x10\x83\x20\x44\x67\xef\x01\xa1\x4c\xf2\xf1\x99\xa5\x48\x92\x67\xd7\x91\xbf\x08\xa6\x1d\xaf\x06\x9f\x2c\x45\xf1\x8c\x2a\x55\xaf\x81\x43\x4c\xde\x65\xd8\xba\xb9\xfa\xb0\x73\xe3\x17\x73\xb3\x8a\xa0\xb3\x8c\x46\x72\xd8\x31\x63\xe5\xc0\x1a\xf8\x95\xe4\xf2\xd5\xc7\x2c\x59\x4d\xb3\x55\xd2\x91\xba\xab\x8a\x98\x9e\xe8\xd6\xa2\x04\x8a\x79\xf9\x36\xc6\x07\xfa\x99\x5e\xa7\x23\xca\x12\x75\x8d\xda\x0a\x21\x32\x87\x5c\xfc\x38\x8b\xce\x27\xf4\x2c\x3a\x97\xb3\x8d\x7c\xbb\x29\x84\xed\x74\x94\xc9\xb7\xf1\x9a\x26\x5f\x92\x20\x63\x58\xd9\xa0\x82\xfb\x39\x8a\xbf\x44\x45\x1a\xb3\x0e\xb5\xad\x92\x18\xaf\x0e\x69\x39\xe0\x56\x14\x43\xd8\x75\x19\x40\x95\x54\x98\x8e\x3e\x34\xed\x70\xf7\x8a\xde\xcf\x25\xe9\x8f\x3d\x21\x2e\x23\x43\x73\x60\xfe\xfa\x25\xa2\x49\x9d\x62\xea\x05\x78\xe4\x68\x75\x15\xd5\xc8\x6b\xde\x91\x44\x2e\x3f\x6b\x28\x8b\x75\xce\xcf\xd6\xa0\xaa\x5d\x75\x0b\x12\xaa\xa6\xfd\xe3\x46\x16\x52\x04\x5c\x17\x47\x13\x12\xec\xb7\x5b\x8f\xfb\x58\x5e\x8a\xfe\x13\xa9\x86\xb9\xfa\xb9\xb6\x29\xdc\xa9\xf7\xaf\x32\xe4\xd4\x8e\x49\xe5\x5b\xce\xe4\x59\x53\xdd\x32\x14\x87\xac\xd7\x46\xc2\xdf\xbf\x2c\x82\x0e\xc6\x79\x90\xd2\x66\x4f\xf6\xca\x62\xc8\xfe\x1d\x97\xcc\x82\xa6\xa9\x7f\xd5\x4f\x51\xe9\xea\x82\x67\x64\xd8\x42\x73\x9d\xc7\x96\x59\xff\xa4\x33\x0a\xef\xb1\xdf\xf2\xf6\xb8\x75\x52\xdc\x6f\x26\x1f\x9d\x1b\xdf\x96\xe8\xad\x60\xa9\x2c\xfd\x66\x62\xa2\x3f\x2a\x56\x6b\x3b\x1b\xd9\x9d\x90\x02\x90\xcd\x56\x6d\x7f\xc8\xd0\x9b\xc4\x0f\x50\xab\xe9\xf7\x0e\x28\x42\x21\x7f\x0e\x83\xab\x3c\x77\xd0\x83\x3b\x3f\x6f\xf3\xe1\x1e\xe2\x43\x30\xcf\xb2\x25\xe6\xdb\xe8\x75\xab\x08\xd3\x3c\x45\x74\xef\xd8\xeb\x9b\x55\xba\x7d\xb3\x5a\xd0\xcc\x1f\x50\x6c\x58\x56\x83\x5c\x60\xdd\x5a\x08\xa3\x35\x3e\xf2\x60\x8d\x56\xc9\x46\x2c\x07\xcc\x36\x9b\xc1\xb0\x2f\x06\xa1\x73\xaa\x61\x8d\xf1\x6a\x95\xfc\x2d\xad\x7d\x80\xa3\xbb\x2b\x2e\xab\x16\xb9\xc3\x76\x05\x5e\x5a\xca\xf3\x9a\x80\x7a\xdc\xb5\xc1\xdf\xb7\x59\x68\x6c\xd3\x7f\x5a\xbb\xb5\x61\x34\xe7\xf2\x88\xc0\xbc\xd8\x66\xf0\xa1\x52\x35\xad\x01\x30\xbb\x4d\x79\xd8\xd3\x79\x50\x5d\x95\x07\x25\x99\x6e\x89\xa7\xae\xec\x82\xa5\x14\xd1\x77\x32\x93\x47\x9c\xf3\x53\x24\x5e\xba\x77\x9b\xce\x8b\x97\xc6\xeb\xa2\xca\xa0\x83\xa0\x06\x38\xbc\xdb\x5d\xc2\x41\xb3\x56\xc5\x74\x9e\xd7\x7c\xae\x75\xf4\x8f\xc6\xad\x16\x0c\xad\xa3\x27\x1e\x2f\x88\x32\x62\x0f\x04\xad\x3a\xfc\x1c\x8a\x19\x93\x36\xec\xb4\x39\x4e\x83\x8c\xf2\x6c\x1c\x7d\x36\x24\xb1\x5c\x5c\xbd\x9d\x95\x45\x5e\x56\xac\x44\x63\x31\x88\x8a\x05\xb6\x19\x6e\x5a\xe9\x70\xd0\x7f\x5a\xd1\x5a\xf9\xf6\xd6\x6d\x06\x88\xfd\x90\xa6\x53\x3a\x2b\xce\xc4\xfa\x54\x7b\x58\x16\x29\x3f\x16\x62\xfc\x72\x4b\xb1\xaf\x73\x7f\x95\xee\x2c\xf6\x6a\xed\x07\x61\xee\xc8\x5a\xd3\x77\xf1\x96\xa2\x5f\x90\x4c\x5b\x8d\x00\xd0\x11\xb0\xdb\x20\xca\xfa\x8b\x40\x03\x7d\x60\x48\xf2\x2c\x58\xd0\x28\x0d\xe2\xa8\xbf\xc8\x3f\x56\x71\xe6\xf7\xbf\xc6\x9b\xc2\x5b\x8a\xfa\x60\xf3\xd3\x32\x0e\x83\xee\x2b\xdd\x1e\x97\xb5\xee\x1b\x4c\x71\x72\xb2\x0a\x69\xaf\x88\x32\x18\x53\xad\xf4\x16\x7f\xa0\x6a\xf2\x0d\x91\x77\x0f\x19\x6c\xe4\x37\x72\xe1\xb4\x34\x99\x76\x82\x9e\x2d\x7e\xaf\x79\xe1\x5f\xe3\x19\xdd\xe6\x1e\xbb\x45\x87\xa1\xa1\xdf\x2f\xaa\xb6\x81\xf9\x58\xca\x9c\x69\xa5\x46\x17\xd4\x0d\xf8\x76\xd4\xac\x14\xd9\x23\xf4\xa9\x14\xf5\xfe\x65\x8d\xc1\xd3\xe5\xaa\x97\x15\x2f\xe8\x22\x66\x0e\x79\x9d\xaf\x67\x41\xfa\xb9\xf7\x65\x10\x2f\xb7\xec\x18\xcc\xc4\xde\x13\xf8\x56\x18\xe0\x87\xb8\x0d\x0e\x56\x7c\xd1\x1f\xf1\x5f\xdc\x84\x81\xe9\x81\x7a\x56\xfe\x56\x27\xf6\x34\xb8\x8a\xfc\x56\x54\x67\x31\x5f\xf4\x6b\x90\xbd\xe6\xe6\x91\xee\x90\xdd\x7e\x16\x00\xaf\x7e\xf5\xa3\xb8\xc5\xef\x2b\x64\xb6\xd5\xba\xb2\xdf\x0c\xf7\xe6\xc8\xf8\x97\x9d\xf4\x59\xc3\xa1\xa4\x35\xf3\xdb\xd3\x81\xae\xb2\xf8\x03\x5d\xd3\x76\x42\xcf\x8a\x83\x3e\xcf\x97\xd2\x5f\x62\x57\x7a\x18\x72\x85\x11\xf9\xf5\x24\x19\xb2\x5a\x4b\xd8\x71\xdd\xc8\x0e\x37\x3c\x7f\x28\x8f\x7b\xad\xe7\xfe\xe8\xb6\x9b\xf5\xf4\x57\xba\xf5\x76\x64\xff\xe8\x89\x8e\xab\xe7\xf7\xe8\x0e\xa3\x68\x24\xf1\xe8\xb6\x93\x34\xb3\x6c\x74\x96\xea\xc8\xc6\xb1\x2d\x51\xcf\xfb\x24\xbe\x02\xb5\xbe\x1d\x25\xdf\x11\xaa\x3d\x70\x51\xfd\xcb\xaf\xa4\x22\xac\x6e\xbf\x25\xd4\x8c\xd5\xed\x9c\x97\x76\x40\xee\xb6\xe0\xcc\x1d\xa5\xda\x71\xb5\x9d\xc5\x9a\xa1\xb3\x9d\x85\xea\xf1\xb1\x7d\x11\x4c\x4f\x26\x0c\xf6\x1e\x84\xfd\x68\xf4\x86\x01\xd1\xec\x87\x53\x1e\xba\x1c\x64\xef\xee\xce\xce\x37\xf2\xd6\x38\xf7\xfd\x96\xc6\x14\xa3\x2d\x7a\xa5\x06\x3f\xed\x93\x01\xe1\xd5\x0e\x2f\xed\xba\x83\xf6\x56\xff\xec\x86\x6b\xb6\x58\xf1\x4d\xae\x1a\x15\x9b\xbd\xfc\x1e\x5f\x90\xb6\x83\x75\xe1\xf0\xdd\xd5\x65\xd8\xc8\x81\x55\xf3\x76\x97\x2a\xf6\xb5\x46\xea\xcc\xf2\xf8\x72\x53\x9a\x9e\x5f\xbf\xff\xad\xa9\xcf\xe0\x68\xf0\x9a\xbc\xa2\x48\xc5\x56\xfd\xae\x10\xd8\xb7\xd5\x61\xa5\x2a\xd5\xde\x70\x41\x7e\x5b\x25\x28\x53\xa9\xf2\xf3\x72\x4e\x17\x34\xf1\xc3\xbc\x6e\xff\xfe\xb7\xc5\xaf\x9a\xe1\xa8\xc7\xbd\x98\x34\xf2\x9e\x0c\xc8\x26\x3a\xac\xa5\xdd\x99\x46\xf3\x89\x60\x5c\xed\xaf\xc9\xc7\x6d\xb1\x36\x65\x30\xc5\x6d\x95\x0b\x36\x38\xfe\x66\x47\x42\xef\xce\x20\x9f\xef\xda\x05\x9a\x91\x3c\x95\xc0\xa9\x2e\xdc\x76\x44\x30\x75\xc7\x03\x34\x09\xb7\x2b\x5a\x49\xda\x82\xab\xc1\x01\xf8\x95\x3c\xa6\xff\xb2\x82\xc4\x4e\x33\xcc\x56\xa6\x59\x68\x71\x7d\x6f\x93\x8c\xce\x5e\xb5\xd8\x2a\xd7\xb7\x2e\x83\x28\x48\xe7\xdb\x0a\xb0\xe4\x68\xbd\xb2\x7c\x90\xbe\xc2\x5b\x6e\x9a\x5b\x6d\x14\xc3\x74\x96\xcd\x6f\x4b\x78\x88\xf1\x12\x79\x43\xa2\x5c\x39\x9f\xa9\xf8\x9d\xb3\x0d\x60\x4b\x48\x4b\x49\x84\x9c\x8b\xef\x60\x01\xfd\x35\x87\x2f\xf9\xad\xa7\xee\xd0\x56\x71\xe4\xce\x8b\xf6\x1c\x4b\x54\x8b\xd6\xc6\x8f\x39\x82\x67\xdb\x62\x73\x46\x9d\x23\xaa\xd6\x6b\x65\x54\x2c\xc7\x51\xe4\x29\x2e\xe0\xe4\x3b\x4a\x79\xe4\xe9\xf7\x9d\x66\x96\x67\x5f\xdd\x1b\x72\x71\xf6\x85\x14\xda\xef\xd2\xdb\x75\x00\xb3\x87\x47\x6f\x4e\x62\xbb\x32\x59\x57\x5c\x7d\x69\xc3\xd3\xb7\x95\x21\xb7\x2f\xee\xa9\x96\x0c\x97\x13\xc1\x5e\x22\xe4\xbf\xd4\x99\x0f\x27\xfe\xbe\xd7\x6d\x31\x63\xab\xab\x27\x17\x5f\xb6\x96\x79\xb3\xcd\x86\xd8\x2b\x6c\x74\x95\x1e\x7c\x6c\x80\x17\x31\x3c\xdd\xdc\x2f\x29\x9d\x26\xb4\xff\xf6\x95\xad\x3b\xcb\x55\x18\x5f\xb4\xcd\x15\x25\xeb\xdf\x79\x7b\xc2\xf6\x4c\x18\x71\x18\x4c\x03\xda\x3a\x9c\xe7\x27\x5a\xbc\xc0\x35\x3b\x3b\x6e\x3a\x42\xf9\x98\xdb\x33\xee\xe3\xbc\x41\xd3\x6c\xdf\xb9\x2e\x79\xcc\x48\xa7\x5f\x67\xf1\xee\xa1\x2e\xa3\x2a\xa6\x6a\xd7\x2d\x43\x78\x61\x51\xd2\x73\xa3\xd6\x34\x8e\x2e\x83\xab\x17\x34\x5a\x07\x49\x1c\x75\xb0\x87\x43\xdf\x9e\x85\x77\xca\x25\x05\x79\x15\x82\x4b\x49\x79\xf9\xa3\x4f\xd7\x4b\x2a\x27\x71\x9c\xfd\xf6\xe1\xa4\xf2\x9a\x3f\xd9\x48\xcf\x22\x50\xb3\x46\xcd\x80\x92\xa4\x72\x69\x9d\xdc\xf3\x32\x59\x61\xe0\x72\xbd\xb8\x28\xdf\x2e\xfd\x6c\x3e\x16\x5f\x8c\x7f\x8f\x2f\xfe\x8e\x9b\xdc\xa6\xaf\x85\x5a\xba\x81\xbc\x1a\xab\x52\x6f\x78\x56\xc4\x57\x34\x7a\xac\x84\x2f\xd7\xcb\x57\xc3\x90\xab\x6f\xea\x71\xc7\xd5\x37\x35\xad\x0f\x83\x4c\xab\x6f\x59\x52\xf8\x7e\x64\xb0\xf7\xd5\x61\xc4\x33\xfa\xf7\x80\x39\x6c\xd6\x5a\x42\xf6\x98\xf4\xb7\xc4\xde\x57\x5a\xc2\x9b\xad\x3a\x9b\xaa\x79\xd0\xf4\x34\x57\xbb\x4d\xa3\x68\xb2\x78\x88\xed\x6e\x9b\x9f\xd6\xcc\xf4\x15\x0e\xe3\x2b\x8e\xb8\xd6\x80\xf1\xe2\xc9\x7e\x10\x91\xb9\x33\xb5\x48\x9c\xd1\x35\x0d\xe3\x25\xae\xa1\xc9\xa4\xca\x4a\xcb\xc5\xc5\x03\xa4\x78\xed\xcb\x84\xd2\x34\xbb\x46\x3f\xab\xea\xf3\x28\xce\x94\xcb\x78\x15\xcd\xca\x11\xfc\x5f\xe6\x29\xc2\xb7\xd9\x5d\x5b\x0f\xb6\x53\xbd\x65\xa9\xff\xc6\xa5\x7e\xfb\xd0\x17\x9e\x07\x69\xc7\x45\x7d\x5b\x2f\x2d\x6d\xbd\x45\x77\x08\x9a\xbe\xc0\x7b\xaf\x15\xcc\x11\xd2\xd1\xc6\x45\x42\xfd\xd9\x34\x59\x2d\x2e\x14\x7c\xd0\x9b\x69\xb1\x48\xaa\x15\xff\x99\x54\xeb\x91\x25\xd5\x4a\xaa\x0c\x3f\xe7\xf7\xc5\x1e\x2c\xdf\xf6\x5c\x58\x88\x5b\x4e\x06\x5a\x13\x46\x06\x72\x3a\xe3\xda\x06\xfe\x22\x4b\x9a\x5c\xc6\xc9\x62\x94\x49\xd2\x46\x2e\x49\x25\xed\x88\x8b\x44\x2b\xd3\x3f\x96\x3f\xad\x82\x70\x06\xaa\xf0\x6d\xf5\xfa\xd3\x31\x2d\xed\x0f\x5b\xc2\x0a\x8b\xa0\x92\xb3\xdb\xd0\xbf\xa0\xe1\x58\xfc\x0b\xee\x2d\x7e\x72\x95\x8e\xcf\x70\xa3\x21\x01\x0b\x39\xcf\xce\x37\xe7\x79\x84\x40\x3c\x42\x4f\xd6\xdf\xe3\x8b\xd7\x08\x9d\x34\x2a\xbb\x13\x25\x49\x92\xf3\xe6\x68\xe3\xb2\x17\xb4\xd0\x49\xb5\xe6\x73\x0b\x49\xbe\xe3\x54\x00\xcf\xe3\x39\x25\xb9\xa7\x9d\xec\x7c\x23\xd7\x7b\x4a\x73\xc7\x84\xbc\x8f\xaa\xd1\xb1\xca\x27\xe8\xf9\xe6\x5c\xda\xc8\xf7\xbf\x0d\xb8\x15\x06\x5b\x4f\x8d\xc0\xc2\x68\xeb\x85\xca\x32\xc0\xf0\xca\xfb\x84\x7d\x52\x73\xfd\x84\xa9\x47\x6a\x60\xf2\x39\x7e\x65\x41\xa9\x8d\xbc\xb3\x72\xcf\xb5\x9c\xe5\x59\x02\xe3\x73\x03\xfc\xf0\xb6\x72\xd5\x17\x9c\x04\xfe\x98\xab\x6d\x6b\x8b\x6a\xcb\x35\xdb\xb0\x98\x82\xcb\x51\xc6\xd6\x43\x34\xe9\x40\x33\x0f\x0b\xe6\x17\x51\xc1\x4a\x23\x9d\xb7\x5d\x49\x9b\x67\x3d\x6f\xd8\x0c\x46\x72\x54\x84\x2c\xef\xa4\x8c\x6d\x17\x72\x17\x0c\x00\x27\xe6\x57\xfa\x35\xab\xdd\x75\xba\xfb\x42\xd9\xed\xf3\xd4\xd4\xa2\xff\xc0\x69\xca\xe2\x84\xf6\x5d\xc9\xd7\xc7\xc7\xf2\x69\x7a\xd9\x60\x17\x51\x8d\x4b\x74\xaf\x60\xc2\xc6\x4a\x9b\xc6\x1d\x60\x16\xe7\x9b\xf3\xf1\xd9\x79\x6b\x71\x57\x22\xca\xa1\x87\x3c\x2a\x1f\x4b\x35\xae\xf6\xa9\xf1\x0a\xe9\x59\x70\x39\x8a\xa4\xdb\xdc\x0e\xc0\x18\x0d\xde\x2f\x25\xb6\x0c\x47\x58\xf8\xb9\xcf\x4a\xa7\xb8\x01\x33\xac\xf0\x5d\xeb\x93\x9f\x7e\x16\xca\x50\x2b\x59\x14\xa2\x38\x13\x50\x22\x12\x2e\xe3\x44\x28\xfb\x15\xca\x4b\x2f\xa3\xca\x55\xd6\xd2\xb3\x94\x4c\xe3\x19\x9d\x88\xa6\x6a\x8a\xcd\x9b\x62\xd9\x38\x96\xcb\x30\x28\xaf\x3b\x82\xaa\x5c\x64\x49\x0b\x32\xf6\x87\xdc\x79\xbd\x9b\xda\x5e\xa0\x7c\xf9\x4f\x21\xb9\x16\xeb\xae\xd8\x30\xb7\xad\xcf\x9a\xf9\xb2\xcb\x34\xb8\x9d\x6f\x0f\xc7\x5a\x65\x16\x7a\x2d\x5b\x2c\xf1\x42\xfa\x02\xe7\xa7\x29\x0b\x3e\x88\x7e\x5a\xba\xab\xa1\x7a\xdc\x7b\x8d\xe6\xd6\x6b\x71\xb7\x2e\x77\x94\x7f\xdf\xa3\xf8\x3b\xce\x93\x89\xde\x26\xf4\x32\xa1\xe9\xfc\x1d\x4e\xda\x73\x75\x33\x88\x4b\x56\x49\x37\x5a\x85\x21\xc8\x44\xf4\x32\x4e\xe8\xbb\x9e\x95\x0d\x53\x5d\x8f\x71\xc4\x04\x18\x20\x6b\x9e\x65\xcd\x2b\x5f\x19\x68\x85\xc2\x59\x7d\xc5\x91\xf8\x01\x4b\x88\xd2\x79\x93\x22\x22\xdc\x7a\x9e\x67\xb5\x4a\xe9\x3c\x5e\x85\xb3\x8f\xf3\xf8\xcb\x87\xbc\xe5\x22\xa9\x0e\xd7\x6e\x28\xa9\x20\x87\x03\x20\xa7\x93\xac\xbf\x73\x5e\x48\x94\xe4\xb0\x51\x8c\x5d\xa0\x9f\x83\x78\x77\x97\x0f\x7c\xe4\x1f\x1d\xf9\xcf\x27\x93\xf0\xee\xee\xb9\x7f\x74\x14\x3e\x9f\x4c\x52\xe9\xe8\x68\x94\x91\x62\xdc\x80\x57\xcc\xcc\x81\x49\x2f\x56\x51\x18\xfb\x33\xdc\x81\x78\xba\x8e\xee\x3e\x64\xff\xee\x2e\x95\xe4\x68\xd3\x96\x9b\xaa\xe2\x0f\x03\x78\xcb\xd5\xdc\xd5\xa4\x57\x59\x7e\x5d\xd5\x6e\x04\x1c\x1d\xb1\x19\x4d\x56\x11\xde\x77\x57\x5d\x9f\x9c\x54\x78\x51\x4e\x2b\x83\xae\xf4\x2e\xae\xd2\x9e\x05\xb3\xae\x9b\xb4\xb9\x4e\x8c\xe0\xb1\x15\x43\x82\xf4\x13\x4d\x33\x40\x39\xcf\x55\x91\x4e\x61\x88\x9f\xe2\x91\x2a\xab\x20\xbb\xf5\x5c\xca\xcd\x9b\x1a\xcc\xac\x39\xc5\xe3\xaf\x1a\xaa\x4b\xa5\x26\xbe\x14\x32\xf2\xea\x22\x4e\x32\xdc\x5e\xf2\x5b\xbb\x87\xf6\x40\xa5\x21\x57\x79\x73\x7e\x56\xd8\x5a\x76\x5e\x5f\x7f\x19\x27\x17\x78\x07\x7a\x7e\x38\xd9\xa3\x47\x17\xe5\x1e\xd0\x6c\xdf\xc1\xf9\xb2\xaa\xa2\xb6\x85\x8f\x6d\x67\x81\x55\xa1\xa6\xd0\x9e\x5e\xe7\x38\xe2\xb2\x0b\xc7\x19\xd7\xa1\xce\x37\xe7\xdd\xfc\x6b\xd7\xb5\xd4\xe2\x16\x4d\xa5\xc2\xe6\xe6\x7e\x3a\x67\xc1\xb7\xe9\xb8\x92\xd4\x06\x24\x14\x58\xdd\xf9\x6d\xc6\x68\xb9\xea\x2e\xc1\xae\x6b\xaf\x29\x27\x51\x4b\x39\xd9\x7d\x3c\x50\xa7\x98\x17\xb9\x15\x6e\x8b\x6d\x66\xbb\x65\x65\x6f\xcb\xcd\x43\x9e\x23\x74\x50\x94\x3f\x90\xa2\xee\xaf\x6d\x16\xd3\x91\xb5\x75\xc5\x7d\xc5\xeb\x96\x8e\x9c\x53\x69\x3e\x4f\xb4\x14\x37\x73\x51\xda\xbf\xcc\x68\xd2\xde\x75\x5b\xa2\x54\x11\xa4\x28\x4a\x2f\x61\x2b\xc0\x8c\x4f\x3b\x95\xe5\x86\x91\x77\xdc\x25\x9a\xc1\x1b\x79\x87\x61\x65\x54\xb5\xac\xbc\x63\xc7\x4f\xdd\xc6\x15\xb9\x5a\xb2\x7a\x77\x71\xa5\x7c\xd5\xa9\xb5\x52\xb5\xaa\x9d\x47\x0d\xed\x9c\xaf\xb0\x66\xf5\x5a\xd1\xf2\xbc\xab\x95\xc2\x73\xa0\x3e\x2f\xb7\xc1\x1e\x72\xa2\x53\x5f\x94\x2d\x9d\xfe\xf0\xab\xee\x41\xb9\xf8\x00\x73\x5b\x21\x17\x6c\xb3\xb4\x75\x59\x5b\x5e\x85\x61\x63\x32\xf7\x35\xb2\x6c\x63\x8b\xa5\x69\xfc\x9f\xa2\x37\xa1\xfa\xf1\x4b\x0e\x43\xef\xf6\xd6\xbd\x4f\x55\xb3\x4a\xd6\xda\x29\xb4\x2a\x42\xa3\x74\x95\xd0\xe3\xf0\xf7\xb4\xb5\xf0\xbb\x36\x2d\x94\xcd\xab\xb5\x4e\xfc\xe8\x6a\xe5\x5f\xd1\x91\x38\xf7\xa3\x59\x48\x2f\x7c\xbc\x1c\xba\xa7\x48\xb6\x08\x59\x81\x73\x69\x1f\xe5\xec\x9f\x68\xd1\x4a\xe8\x2c\x48\xe8\x34\x6b\x09\x86\x59\x21\x33\x7e\x8a\xf9\x21\xdf\x1e\x23\x62\x87\x82\xff\x4a\xb2\xd9\xfd\x35\xd0\x4e\xd9\xac\xcf\xb2\x0d\x52\x59\x4d\x65\xad\xd9\xd1\x3b\x14\xd7\xe1\x2a\x68\x4b\x9c\x2b\x4c\xf1\x69\xcb\xc8\x50\x18\x98\xea\x3a\x62\x51\xa3\x68\xb3\x43\x41\xfb\xb5\x92\x8f\xb0\x62\xdd\xef\xd6\xd5\xba\xd2\x5b\x16\x02\x20\x3b\x2b\x66\xfb\x36\xce\xdd\x36\x41\xb0\x54\x9e\x38\x92\x70\x2a\x5b\x74\xcd\x5f\x8e\x9a\xca\xc6\x36\x1e\x09\xf3\xf3\x6f\xb5\x45\xe1\x24\xfd\x0f\x1b\xc3\x5e\xbb\x14\xbb\xab\xe8\xe0\x9b\x14\x4e\x40\xeb\x92\xa1\xbd\xa4\xf6\x9d\x27\x9d\x0f\x8a\xfc\xed\x92\x38\x1e\x6e\x0f\x61\x1f\x51\x79\xca\x25\xa7\x34\x09\xfc\x30\xb8\xa1\x1d\x32\xf0\x6d\xee\x57\x91\x4b\xd9\xc5\xe1\xd5\xa6\x6d\x2d\x91\x2b\xd6\xe4\xce\xc5\xce\x15\xf9\xb6\xb9\xa7\x58\xe9\x04\x93\xc7\xa4\x13\x4a\xf2\x8e\xe5\x70\xd2\xcc\x33\x9a\xd6\xd8\xc1\xb9\xf4\xac\x7b\xe5\xe7\x19\x4f\x71\xba\xc3\xfa\xf2\xef\x93\xdc\xdb\x3b\x78\x5b\x5e\xcf\x15\x89\x9a\x77\x47\xcb\x96\xd6\x77\x2a\xd6\xd6\x74\xf6\x26\xde\x17\x35\x57\x8c\x7f\x05\x3e\xb2\xcd\xe8\x5d\x1e\x64\xe4\x07\xab\xe2\x56\x63\x77\x7b\x0f\xaa\x4d\xc5\x2e\x65\xeb\xfe\x1a\xd4\xa6\x53\x41\xca\x0e\xa6\x20\xf5\x2b\x46\x7e\x57\x32\xc3\x26\xd1\x54\xdc\x9a\x1e\xdd\xc1\x46\xe7\x1c\x63\x9a\xc9\x42\xfe\xee\x48\xfc\xdd\x9c\xe7\xac\xca\xb5\xc6\x54\x2e\x47\x3c\xce\x36\x9b\x9d\x27\x98\xd5\x53\x57\xe4\x3f\xcf\x22\x02\x05\x2f\xfc\xe9\xe7\x57\x45\xa0\xc0\x48\x92\x23\xc2\x53\x23\x8f\x0a\x85\x3b\x48\x7f\x9e\x05\x19\x7a\x2c\x3f\xd7\x9a\x12\xc1\x2e\xf9\x96\x4f\x4f\xe9\x45\xf6\xef\xbe\xa6\x7b\xb8\x70\xe3\xbe\x0f\xf6\xb0\x74\xca\xdb\xce\x82\xf7\x32\xb2\xbc\xa9\x4e\x46\xb9\xf0\x2b\x8f\x7b\xad\x2e\xa7\x39\x3c\x95\x7a\xf9\xb3\x2e\x7b\xcb\x9b\xfa\xfd\x26\xdd\xec\xa2\x3e\xf2\x5a\x9b\xfd\x95\x2a\xee\x8a\xc3\x18\x4c\x6d\xd4\x8d\xd1\xec\x2f\x62\xbd\xa8\xee\x8f\xff\xee\x14\xdd\x25\x32\x1c\x6a\x97\xfa\xb9\x8a\xe7\x92\xe8\x2a\x8f\x3b\x76\xa9\x9f\xeb\xb7\xe5\x74\x53\x50\xdd\x7f\x75\x18\x11\x55\xa1\xb9\x07\xd1\xfc\x1b\x28\x47\x9d\xee\x72\xa9\x98\xd3\x57\xa7\x65\xb7\x08\xe1\x2b\xdf\x7e\x2c\x2e\x96\xe2\x85\x6a\x61\x80\xa2\x54\x8f\x5c\xdd\x25\xbd\xd4\xae\x4f\xda\x45\x44\xed\x8b\x4a\x8a\xce\x5b\x77\x9f\x88\x12\xf7\xa0\xc5\xf6\x4e\x9a\x97\x8c\x54\x1b\x0d\xd2\xa2\xa1\xca\x65\x8d\xf5\x06\x5e\x85\x61\xa9\x3d\x6e\xb6\xb9\x94\x55\x34\xc8\x57\x61\xb8\x4d\xc1\xfc\x58\xde\x2b\xd7\xd1\x48\xe5\x66\xb9\x6f\x92\xef\xee\xbb\xe2\x9a\x28\xeb\xaf\xdc\xba\xd4\xe5\x1e\xa6\xf7\xfc\xeb\xc7\x3c\x95\x43\x87\x24\xdc\xc1\x76\xc4\x4e\x50\xef\xc3\x00\xfa\xa2\xee\x0f\xee\xf5\x3c\xcc\xaf\xb9\x66\x0b\x78\xd8\x78\xfb\xed\xdc\xe4\xdb\xbc\xcd\x76\xf8\xa4\x96\xe2\x14\xaf\x86\xee\x9b\xdf\xec\x85\x7b\x5f\x8f\xb5\xba\x12\x10\x71\x25\xa0\xf0\x17\xab\x1c\xc6\x45\xc5\x61\xdc\xb8\xe3\x66\x18\xa9\xbd\xc7\xb2\x2d\x3b\x6a\x38\xde\xf6\x7a\xbc\xd1\xc2\xa2\xd1\xe9\xf1\x86\x88\xac\xfb\xbd\x5d\xc6\x89\xf0\x7b\x7c\xd1\x76\x73\xe3\x98\xad\x78\xc6\x89\x92\xf4\x8c\xf9\x80\xfb\x55\xdf\x37\x3f\x77\x66\x8b\xf2\x10\xa9\xa6\x7a\xdb\x73\x00\xd9\x67\x72\x48\xdb\x26\xce\x6d\x7b\x53\x55\x0f\xca\x2a\x24\xf2\xac\xbd\x63\x81\x9e\x55\xf2\xe6\xbf\xc4\x17\x05\x6f\x8e\x86\x6c\x59\xd1\x37\x6c\x59\x11\x1e\x8c\xc8\x79\xc7\x3b\x76\x80\x3f\x86\xc5\xef\x64\xb4\x7f\x89\x2f\x06\x30\xd8\x01\xe9\xe7\x9a\x5c\xb3\x90\xf5\xff\x25\x24\xa7\x6f\x17\xb4\x4b\xdd\xe7\x50\x52\x76\xfd\x9c\xb5\x4b\xa3\xdb\x3c\x98\x62\x76\x5f\x2d\x2c\x59\xfd\x93\x6c\x3d\x87\x76\x40\xfa\x00\x03\xa9\x6e\x65\x30\xb2\xf3\xcd\xf9\x90\x43\x20\x16\xb2\x5a\x33\x06\xdf\x96\x57\x80\xee\x32\x48\x63\x90\xd9\x10\xa7\x4e\x84\x84\xcc\x68\x48\x8b\xce\xf6\x38\xe6\xac\xc4\x8f\x3d\x22\xdb\x5c\x6b\xd3\x7b\xef\x5f\xd1\xea\xfe\xf5\x8c\xde\xdf\x69\xbb\x19\x47\xbf\x0d\x3d\x45\x18\xe3\xbf\xd2\x41\xf0\x81\xd7\xc8\xc7\x1c\x47\x7c\x9d\x70\x9c\xfd\x9b\x3a\xe9\xf1\xd1\xbf\xc8\x03\x5c\x77\x12\x0e\xcb\xbd\x80\xb4\xa9\xa0\x87\x46\x10\x5d\xfd\x91\x8e\xeb\xe5\xb9\xd0\x2e\xc7\xd5\xe2\xbc\x2e\x49\x5f\x30\xa4\x75\x8f\xae\x56\xae\xea\xb5\x3f\xdc\x55\xff\x61\xb3\x44\xfb\x59\x96\xa4\xe3\xdb\xca\x35\x19\xe2\x6c\x2a\x16\xf7\x17\x88\x2c\xf9\x7f\x4a\x93\xcb\xf7\x71\x92\x8d\x45\xf8\x14\x37\x72\x14\x27\x8b\xe6\x79\x25\x97\x5b\x9f\x67\x55\x79\x3d\x22\xaf\xd8\xe8\x18\xf7\x3a\xbb\xcd\xb3\xb9\x03\xb7\xda\x9c\x97\xc2\x37\xcf\x2f\x3a\x11\x3f\xd0\x7f\xac\x68\x9a\xd1\x99\xf0\x0a\x10\x2b\x7c\xf1\xd3\x4a\x20\x4b\x10\x09\x29\xcd\x84\xf8\x52\xf0\xf3\xec\xe3\xac\x5c\x5a\x11\xda\x33\xf2\xf6\xcd\x24\xc3\x3b\x1c\xe5\x8c\xbc\x29\xc6\x36\xc9\xc8\x27\xff\x2a\x3d\x3a\x62\x7f\xc9\x6c\x2a\x67\x84\xf9\x82\x37\x5f\x71\x07\xfa\x8c\x7c\x58\xe2\x95\x67\xcd\xf7\x30\xd3\x55\x27\x70\x1c\x7e\x05\x2f\x1f\x68\xba\x8c\xa3\xb4\x8e\x1f\x98\xca\x3c\x8a\xd6\x9f\x14\x3e\x98\x3c\x66\x56\x4e\x2b\x41\xb5\xfe\x8f\xc6\x4b\x5f\x31\xc6\xaa\x24\x87\x13\xe3\xfb\xf0\x07\xff\xfb\xf0\xbb\xef\xa4\xf4\x2c\x54\x8c\xf3\xb2\xea\x59\x78\xfe\x6c\xbb\xa7\xe7\x19\xf6\x4b\xde\x21\xbd\xa5\x77\x77\x67\xe7\x45\xac\x25\x6a\x21\x05\xc4\x1f\x83\xe8\x2a\xec\x83\x5b\xf6\x4b\xc8\xd3\x36\xe4\x61\x05\xf2\xf4\x47\xf3\x65\xaa\x98\x00\x79\x3c\x31\xbf\x8f\x7f\x48\xbf\x8f\xbf\xfb\x4e\x0a\xcf\x62\xc5\xac\x42\x1e\x0f\x84\x3c\xd7\x09\x59\x0a\x36\x5f\x92\xfd\x62\x00\xe1\x20\x6e\x54\x5b\x83\xbb\xe2\xb9\xfb\x16\xec\x83\xe7\xa3\x28\xe5\xb6\xad\xdb\x0e\x5f\xaf\xb5\x70\xd5\x31\x2a\xc2\x3c\xdb\x1d\x8b\x1e\x63\x8f\x3e\xb2\x48\xb2\xfe\xe5\x9a\xc3\x50\x16\xbe\xbb\xbb\xdd\x94\xfe\x40\xe5\xf3\xda\x25\x73\x91\x54\xcf\x21\x51\x6a\xe8\x67\xf4\x1c\x5a\x90\xd3\xc9\x2d\x42\x46\x8b\xc6\xaa\xf5\x7d\xbc\xec\xf7\x67\x7f\x3a\xef\x3a\xff\x4f\xcf\xe8\xf9\xc4\x3f\xa3\xe7\x1b\x49\x4e\xc9\x87\x3c\xf5\x11\x07\xb3\xf8\xcd\x96\x62\xe5\xc1\x19\x3d\x97\xd3\x8d\x24\x67\xe4\x2f\xf1\x05\x17\xd7\x27\xd1\x2a\x0c\x9f\x4f\xaa\x8f\x5e\x56\x7f\x8c\x2b\xf7\xd6\xc9\x22\x28\xcf\xfc\x85\x08\xed\xbc\x0f\xfd\x20\xfa\x4b\x7c\xf1\x76\xc6\x5a\x78\xfb\x46\xce\xca\x2b\x63\x27\x59\xf5\xfa\xd8\x56\x43\x15\xf1\x75\xa0\xcf\x45\xf5\x0e\x5a\xde\x5f\xcb\xef\xa2\x03\x8e\x73\x00\xf5\x1d\xde\xf5\xf3\x29\x4f\xe3\x3c\xa9\x3e\xf9\x4f\x8d\xda\xb5\x22\x93\x77\x7e\x36\x27\x97\x61\x1c\x27\xa3\xea\xf3\x17\x1a\xb5\xa1\xb1\xd7\x45\x86\x99\xbc\xb1\xf2\x09\x6f\xac\x7c\x50\x6f\xac\x7c\x9e\x37\xf6\xa1\xb8\x00\xe0\x67\xcc\x5c\x35\x19\x55\x9f\x7d\x4a\xfc\xe9\x67\x9a\x00\xd1\x48\x84\x15\x00\xc4\xb7\x53\xc9\x03\x43\x6f\x3f\x7e\xd9\xf5\x70\x0c\x93\x0e\x18\xa2\x5f\xb3\x46\x0b\xf5\x47\x2f\x9b\x0f\xf2\x9a\xbf\xc4\x61\x18\x7f\xf9\x6d\x59\xda\x57\xb1\x36\x7b\xbc\xc2\xc7\x6f\xdf\xbc\x6c\x3e\xc8\x6b\xbf\xcf\xc3\x7d\xab\x9d\xa7\x93\xce\x17\xc8\x91\xab\x75\xaa\x21\xc2\xf9\xa0\xdb\x6f\xee\xee\x78\x5f\xff\xe3\xa7\x45\x81\xc9\xf3\xe7\xbd\x0d\xb5\xf7\xaa\xdd\xd1\x39\xbd\xc2\x4b\x3b\xe4\x70\x1a\x2f\xaf\xeb\x42\x4d\xb5\xf2\xef\x69\x45\xe4\x09\xa2\x4b\x50\xab\xbb\xdc\xba\x12\xba\x88\xd7\x54\x49\x50\x75\xeb\xb1\xf4\x16\xb9\x2b\xc2\x3f\x73\x57\x3c\xb2\xdc\x15\x71\x47\x26\x33\x9e\x2f\xee\xbf\xe9\xf5\x58\x7c\xfb\x46\x94\x3f\xd3\xeb\x5f\xe2\xa4\x70\xe5\xe8\x8e\xf3\x9b\xfa\x0b\x0a\xa4\x33\x02\x3d\x64\x19\x64\x3e\xfb\xb1\xe1\xb5\xab\xa6\x9c\xce\x0d\x4d\x2c\xac\xc1\x68\x43\x4f\x83\xe8\x6a\x15\xfa\x49\x70\x43\xa5\x11\x95\xfa\x9a\x97\x01\xc0\xdc\x8e\x25\x72\xb3\x2f\xe6\xa4\x79\x89\xcd\x2c\xc3\x55\x82\x45\xa5\x51\x24\x8d\xa3\x8d\xbc\x5c\xa5\xf3\xf6\xe5\xe2\x95\x7d\x15\x23\x6d\x26\x28\x5c\x8f\xcf\xce\xe5\x20\x9a\x86\xab\x19\x9d\x8d\xcf\xce\x37\xcf\xaa\xfb\x61\xd6\xb1\x1f\xa6\xac\x15\xc0\x29\xaa\x45\xc0\xee\x7f\x49\xe2\x05\xef\xf0\xbf\xe9\xf5\x28\x95\xe4\x64\x42\x49\xb9\xd2\x40\xdb\x8f\x25\x39\x98\xd0\xd2\x44\x17\x4b\xcf\xd8\xd6\xb4\xf0\x3f\x53\x46\xf4\xd9\x59\x7a\xde\xbd\x03\xe3\x12\x91\xa3\x49\x42\x0a\x89\x61\x14\xc8\x54\x4e\x41\x96\x8b\x08\x0c\x44\x5e\x4d\x22\x92\x8f\xe4\xfb\x91\x8f\x0f\x09\xa0\x02\xba\x5e\x61\x38\xe8\xc4\x2f\x4a\x48\xf8\x2a\x17\xeb\xe4\x70\xb4\x92\x58\xc2\x20\xca\xea\xf8\x55\x11\xf4\x17\xa6\x87\x76\xca\xa0\x55\xa4\x0e\x0a\xc2\x66\x96\x90\x55\x18\x7e\x04\x1d\x17\x9a\x28\x11\x29\xb3\xb1\x48\x72\xb4\x91\x8b\x22\x35\x2f\x4a\x99\xc7\xd9\x87\x2d\x61\xf7\x47\xe3\xe8\x88\x11\xfd\xf3\x49\x45\x9c\x35\xce\x5f\x56\x7f\xb4\x35\xf5\xe7\xea\x46\x8e\x27\x68\x90\x04\x6e\x29\xa1\x14\x84\x99\x86\xfb\x9d\x20\xf9\x35\xaa\x45\x5e\xb5\x25\xa5\x9f\x41\x51\x8f\xf6\xac\x9a\x97\x0e\x3b\xa6\xbd\xc0\x6c\x8c\xa2\xf6\xa0\x16\x27\x93\x49\x4d\xde\xe1\x00\x46\x2f\x63\xc2\x78\x38\xe7\x81\x91\xd4\xc8\x58\x8c\x3b\x4f\x6e\xcd\x68\x93\x74\x07\x3b\xe8\x58\xc1\x64\xe6\xa7\x73\x9a\xe0\xa2\x6d\xec\x63\x9d\x39\x6d\xab\x5b\x51\xe9\xc5\xf3\x68\x15\x00\x2e\xe2\x73\x0b\xf5\xaf\x98\x39\x11\x63\x0c\x72\xd1\x74\xab\xfa\xdd\x90\xea\xd9\xd1\x1a\x4a\xf5\x95\x07\x45\xba\xe0\x21\x62\x7d\x86\x62\x7d\x3d\xf6\xdd\x4f\xd3\xe0\x2a\x1a\xe5\x42\x3e\xce\xea\xe3\x10\x98\xf1\xef\x2f\x71\xc2\xce\xc1\x87\x4a\xd0\x1d\x29\x58\xb8\x46\x4f\xbf\x66\x89\x3f\xcd\xaa\x7b\x4e\xf3\x94\xa2\xc2\x98\x98\x3d\x8d\x1b\x74\x80\xfd\xd2\x92\xe9\x48\xe5\x19\x24\x1f\xa6\xec\xf3\x78\x27\xd6\xc7\xdb\x19\xb6\xd7\x8d\xe9\xea\xa9\xdc\x6d\x18\x44\x9f\x31\x36\x22\xc4\xcb\xdc\xc4\x17\xc5\x86\x17\xc9\x62\x85\xc6\x6b\xf9\x35\xca\xd3\x50\x5f\xda\x6c\x36\x2d\x89\x70\x5f\x91\xb0\x71\x71\xe6\x63\x5d\x4e\x7d\x6b\x85\xef\xf3\xaa\xaa\x6a\x0a\xfe\xff\x49\x55\xc7\xf8\xff\xff\xb2\x44\x74\xbf\xc4\xc9\x94\xbe\xa1\xfe\x2c\x0c\x22\x8a\x59\x0e\x6a\x4f\x50\xb5\x94\xbe\x55\xae\x2e\x9d\x4d\x1e\x2d\x02\xb7\x1b\x24\x76\x99\x16\x7e\xa9\x65\x75\xaf\x9b\x17\xea\xef\x86\xf3\xa2\x6a\x2b\x8f\x9d\x1f\x0d\x54\xe0\xbf\x8d\x8a\xca\xdc\xeb\x8f\x94\x86\xf6\x1b\xce\xef\xf1\x85\xb2\x0c\xfd\xc7\xbb\x24\xfe\x38\xa2\xdf\x4a\xe5\xf9\x5a\xe0\xc4\xce\x34\x7f\x6e\x6d\x18\xd5\xe8\xf9\x55\x14\xc5\x19\xf7\xde\xa8\x5b\x21\x8a\x34\xe5\xfc\xf2\x0d\xd0\x81\x06\x64\x37\xd9\x7f\x42\x3b\x2f\x26\x7a\x02\x73\xda\xc3\x45\x86\x2d\xed\x5a\x8c\x54\x45\x46\x79\xfb\xa6\x80\x83\x3b\xa1\x1c\x40\x44\x43\xcb\xab\xbf\xd5\xf2\xda\xa5\x69\x96\x54\xe6\x9f\x95\x9a\x33\x95\xc5\x9c\x3e\xce\x27\x19\xb3\xc6\xfa\x45\x2e\xd5\x1a\x71\x95\x5e\xa2\x79\x97\xfe\xd1\xd1\x70\x7b\x6f\x56\xef\xb5\x6c\xad\xb0\x02\x7f\x23\x77\x04\xea\xe3\xd2\xf4\xa3\xa5\x3e\x2e\xf4\x47\x5c\xda\xef\x10\xf5\x41\x39\x3e\x66\x46\x89\xde\x43\x1a\x39\xcd\xb5\xd6\x88\x14\xee\x31\x75\x82\xa9\x64\x48\xaa\x33\x95\x8d\x4c\xe5\xdb\x37\xc1\xe5\xe5\x38\x22\xf0\x27\x3d\x3a\xe2\x5f\xce\xb2\x73\xf9\xed\x9b\x71\x65\x96\xc8\xdb\x37\xb2\xa8\x94\x02\x25\xcd\x7b\x93\x64\xa4\xf0\x71\x73\x69\x60\x0d\xda\xb7\x2e\x3e\xae\x2e\x16\x41\x86\x19\xcd\x2b\xc6\x64\x4a\xca\xe7\xcc\x98\x5c\xfe\x66\x77\x15\x56\x4b\xfc\xa7\x46\x6d\x4c\xf6\xdb\x2d\xc9\xcb\x21\xc7\xcf\xfe\xb4\xb3\xf7\xd1\x2e\xf3\x66\xe5\x19\xd7\xdb\x87\xb9\x85\x05\xd3\xaf\xcd\xc6\x2e\x1b\x66\xe1\x33\xd5\x30\x43\x96\xfb\xce\xd9\xb9\xec\x4f\x9e\xab\x72\x3a\x79\xae\xc9\x61\x4e\x71\x59\x72\x5d\x98\x3f\x63\x39\x99\xd0\xb3\x86\xcd\xf2\x7c\x24\x7d\xff\x7c\xe4\x4f\x46\xf1\x24\x61\xe9\xaf\x24\x89\xcc\xe2\x88\x4a\x47\x47\xa3\x88\x9b\x76\x08\x12\xb5\x24\x3f\xcf\xee\xee\x22\x6e\x09\x79\x3e\x99\x64\xd2\xf7\xd0\xa5\xf4\xfd\x86\x39\x0c\x04\xd2\x6d\x0a\x20\x84\x93\x60\x73\x19\x44\x7e\x18\x5e\xdf\x02\x00\x3e\x33\x58\x4f\x26\x09\x61\xe3\xb8\xbb\xcb\xbf\x8d\xa4\xa2\x64\x70\x39\x4a\x25\x66\xd5\x0c\x37\x85\x07\xe6\x06\xc7\x78\x2f\xcb\xe7\x8c\xa6\x59\xb2\x9a\x66\xab\x84\x3e\xbc\xf9\xb3\xf3\x8e\x19\xb6\xac\xd1\xb3\x99\x66\x68\xb3\x98\x8d\xc5\xf7\xd5\x9f\x7f\x89\x2f\xb6\x68\xf4\x85\xd8\x50\x2c\x9d\xe2\x68\x1b\x7f\xe5\x42\x2e\xee\x4d\xfd\x1b\x53\x7d\x57\x7a\xfb\xa6\xb9\x2f\xbd\xf7\x13\x1a\x65\x78\xa6\x91\x7f\xed\x68\x25\x7f\xb5\xa5\xad\x71\xa5\x01\x7e\x44\xc1\x37\x38\xbe\xef\x41\x67\x34\x09\xe2\x59\x30\xad\xe6\x1a\x63\x53\x80\x5a\x56\xfe\xfa\x0d\xcd\xfc\x20\xc4\x73\x13\xfe\xa4\x52\x17\x88\x8e\xc1\x5d\xc3\x64\x5f\x93\xd5\x62\x95\x76\x1b\xb5\x3b\x1a\xe4\xfd\xfc\x25\xbe\xe0\xc3\xe0\x81\x10\x4c\xd1\xaf\x58\x80\xeb\x4e\xac\xf2\x6d\xed\xe7\xf8\xac\xda\x44\xe7\x96\xb6\x87\xa1\xa1\x8a\xfc\xa3\xa3\x02\xf9\xb0\x1c\xab\xaf\x5e\xd6\x7e\x8d\x19\xa5\x62\x5c\x77\x69\x07\x8d\x27\xfe\xa8\xdb\x70\x91\x4a\xe4\x62\x15\x84\xb3\xdf\x3e\x9c\x8c\x52\x99\xcd\x9c\x2c\x96\x31\xdd\xa2\x44\xd2\x65\x18\x64\x23\xf1\xa5\x28\xc9\x9a\x74\xa6\x76\x9b\x88\x76\x8a\x92\xf2\x56\xd3\x46\x38\x2a\xb7\x9d\x58\x16\x5f\xd4\x3d\x7e\x2b\x4e\x84\x11\xba\x22\xe7\x6e\x9d\x3b\xdb\xa9\xf8\x7f\x56\x1b\x91\x67\xb0\xe1\xe1\x22\xdf\x6c\xe4\x4a\xc8\xdf\xce\x06\xeb\xe1\x81\x2d\xc0\x5a\xd1\x3a\xc3\xdb\xeb\x6a\xae\x1a\x29\xb4\xab\xa5\x7a\x3c\x4b\xb3\x29\x96\xda\xa6\x7a\xaa\x26\x97\x0e\x3c\x05\x3f\x2b\xd9\x40\x69\x9f\xf2\x5f\xd6\xe4\xb6\x97\x55\xfb\xd2\x98\x6e\x76\xe4\x8c\xaa\x6e\x9f\xa5\x49\xec\xb1\x8a\x67\xd5\x63\xac\x5f\xd9\x7d\x15\xfb\x48\x11\xc5\x65\xd9\x8f\x74\x78\x7c\x9b\x9a\x06\xb3\x64\x2c\xbe\x7e\xfb\xe6\x83\x28\x07\xcb\xb1\xf8\xf6\xbd\x28\x2f\x2e\x82\x2c\x1d\x8b\xef\x7e\x0a\xb2\x54\xdc\x53\x78\x8a\xe2\x19\x55\xaa\xf7\x6a\x3e\xd2\xe1\xef\xda\x7c\x6b\xbc\xfa\xb6\x8c\x43\x1f\x67\xcd\xc4\x50\xc3\x50\xd2\x71\xc1\xf9\x23\xc2\x46\xee\x62\x14\xa0\x67\x51\xb0\xa0\x69\xe6\x2f\x96\xf7\x99\xfb\x47\x3b\xc4\xed\x09\x8a\x39\x02\x82\xf4\x4d\xe2\x07\xec\xe6\x33\xfc\x26\xca\xf3\x2c\x5b\xbe\x9a\xc1\x22\x39\xfe\xf4\xe9\x3d\xfa\x46\xee\x76\xae\x7a\xc3\xae\x83\xab\x5b\x81\xf8\xc3\x7b\x99\x7f\x98\xe1\x47\xce\xf5\x7c\xe9\xdb\xc4\x89\xaa\x38\xe0\xf7\x9c\x62\x44\x15\x61\x20\x92\x3b\xce\x2c\x9a\xb2\x01\x1f\xe8\xf6\x53\x8b\x62\xf7\xf0\x9b\x1b\xfb\x66\x33\x24\x7b\x6c\x95\x8e\xf8\xf5\x55\x8f\x95\xe0\x76\x8a\xf7\x15\x87\xd5\x6f\x33\x76\x24\x85\x6b\xd5\x23\x67\x33\x3b\x51\x52\xf5\x3f\xab\x38\x8c\x95\x3e\x68\x6d\xef\xb3\x7a\xb1\xdc\x03\xad\xc3\x9b\x6c\xc6\xbd\xc9\xf0\x11\x53\x7b\xca\x5f\x15\x3f\x2e\xac\xf7\x6b\x3c\xa3\x45\x0d\xfc\x91\x57\x60\x3f\x78\xf9\x6f\x9e\x37\x7e\xc5\xe3\x63\x9d\xb0\x5c\x48\x58\xae\xc6\xe2\xeb\xf7\xbf\x89\xf2\x82\xdd\x30\x28\xb2\x9b\x06\xdf\xfd\x24\xca\xb3\x20\xfd\x3c\x16\xdf\x04\xe9\x67\xf8\x15\xc4\xcb\x74\x2c\xbe\xfd\xeb\xfb\x8f\xfb\x6e\x1e\x95\x7b\x2c\x1f\x39\x36\xb8\xdb\x3a\x0e\x7a\x19\xfa\xd7\xef\xd8\xef\x21\x1a\x7d\x95\xbe\xb7\x52\x75\x85\x96\x77\xd1\x58\x3b\x05\x51\x0b\xad\x18\x2f\xab\x94\xea\xc5\x93\x35\xcc\x17\x88\x7c\x1f\xfa\x53\x3a\x7b\xed\x47\x7e\x52\xf1\x79\x44\x05\xbf\x7c\x13\x50\xe6\x6a\xc9\xa2\xc3\x84\xe6\xbb\x6f\x5d\xbe\xdb\x2f\xaa\xe7\xee\x91\x7b\x22\xf5\x81\xef\x18\xed\x42\x6b\x54\xa0\x35\xc2\xa3\x88\xb4\xd3\x70\x4f\x49\xed\xb2\xcf\xaa\x53\x53\x54\x7f\x05\xb2\x49\x04\x6c\xb9\x7d\x45\xe8\xa4\x51\x94\x7c\x0c\x6e\xe8\xbb\x9f\x1a\x13\x11\xed\xeb\xe1\xdf\x77\x73\xf5\x93\x21\xe8\x6d\x1e\x09\xc5\xb5\xce\xcc\x1d\xa1\xf8\x79\x18\x5f\x84\xf6\x4d\xb9\x4f\x00\x69\x79\xf9\x22\x0c\xa0\x70\xd8\x45\x1c\x7d\xa8\xdd\x86\x3b\xc1\x40\x18\xdc\xac\xe4\xf2\xdd\xeb\xf7\xbf\x4d\x22\xf2\xfa\xfd\x6f\x95\x67\x9c\x42\xd9\x56\x56\x79\x5e\x27\xe1\xac\x93\x84\xbf\x7d\x22\xfa\x2e\xbf\x7d\x8c\x7c\xa4\x6a\x1a\x79\xc5\xef\x87\x7d\xfb\x46\xcc\xb5\x28\x7e\x13\xae\xf8\x11\xff\xbe\x7d\xd3\xb7\x33\x56\x39\xcf\x7b\x14\xe6\xdf\xbe\x49\x27\xfc\x3b\x30\xe8\xfc\x31\xda\x34\xeb\x2c\x27\x2f\xd3\x44\xfc\x50\xe6\x01\x7a\x5f\xfa\xc2\xff\xdd\xff\xda\x85\x74\x78\xde\x28\xf5\xcd\x64\xdf\x5b\xa1\xf0\x1f\xb9\xa5\xd1\x6a\xc1\x4e\x2b\xc6\xcf\x55\xf9\x8a\x76\xde\x93\x9d\x0f\x6d\x83\x5a\x60\xff\xd8\x2a\xd1\xaa\xfd\xd1\xcd\x85\x11\x30\xfb\xd3\xb5\xfe\x91\xb9\xd6\xe7\xe1\xaa\x1f\xd9\x84\x96\x19\xbf\xf1\x5e\xe0\x21\x31\xca\xcd\x2b\xe0\x59\x4d\x32\x5d\x25\x09\x8d\xb2\xdf\x3e\x9c\x88\x72\xe3\x19\x86\xc6\xb2\xa8\xbb\x56\x54\x7a\x71\xfe\xff\xd7\x2f\x11\x4d\x58\x64\xb0\x1c\x4d\x2a\x97\xe2\xf7\xb5\x05\x53\x57\x9e\x1d\x10\x51\x22\x5f\x82\x6c\x1e\xaf\xb2\x11\x3c\x6e\x9e\x55\xd7\xd8\x42\x1a\xc2\xb0\x54\x39\xfb\x4e\x93\xc8\xef\x71\x10\x61\xfd\x8d\x24\xfb\x93\xb3\x92\x98\xda\x12\x0b\x4f\x89\x9b\xca\xe1\x84\x92\x30\x8e\x3f\xaf\x96\x1c\xbe\x71\xe9\x37\x29\x49\xcf\x42\x96\x53\xf2\xa7\x12\x6b\x47\x47\x23\x68\x5b\xe2\xe1\x0d\x21\xa9\x60\x14\xa4\xc9\x67\x62\xde\x89\x38\x99\x00\xb9\xc5\x97\x42\x7c\x74\x34\x8a\x27\xf1\x28\x2c\x6e\xf6\xe1\xb1\xf8\xcc\xce\x22\x4a\xcc\xdf\x46\x1e\xa5\x13\xbf\xe6\x1d\x9f\xca\xd9\x28\x96\x24\xe6\x67\x31\x68\xc3\x60\x6b\x7b\x1a\xcf\xa8\xb2\x08\x58\x44\x7f\x95\x7d\x05\xeb\x6b\x05\x5e\xb2\x77\xdd\x15\x9e\x1c\x27\x63\xa6\xbb\xc7\x72\x2f\x77\x73\x3d\xae\xa2\xcf\x51\xfc\x25\xca\xdb\xed\x0a\x6f\xa9\xb8\xce\x14\x89\x08\xa8\xb4\x91\x83\xf4\x0d\x5d\x37\x73\x90\xd0\x7f\xac\xfc\x70\x24\x56\x07\x54\xbf\x32\x59\x92\x83\xf4\x7d\x12\xcf\x06\x55\x5c\x26\xf1\x6c\xc5\xc8\x15\xea\x7d\xa2\x69\x36\xa8\x5e\x86\x97\x52\xed\x41\x92\x6c\xe3\xec\xbc\x8d\x22\xdf\x55\x8b\x97\xfd\xb5\xfe\x38\xe1\x92\xff\xfe\x04\xb2\xdc\x58\x4c\x63\x16\x6a\x30\x53\xc2\xe0\x6a\x9e\x0d\x3b\xeb\x61\x43\x98\x53\x7f\x86\xf1\x6f\x9d\xd2\x5b\x18\x28\x50\xa0\xab\xf8\x93\x5b\x87\x0b\x3a\x0b\x3a\x47\x99\x30\xe7\xa4\x60\x4d\x9b\x85\xff\xe9\x77\xfa\x97\xf0\xc4\x6d\x6f\x59\x06\x3d\x7b\xd3\x2e\xb9\x07\x8f\x39\x7c\xfa\x92\x2b\x9a\xc9\x5d\xde\x25\xfc\xf7\x2f\x20\x4f\x67\x63\xbf\x92\xbe\x49\x64\x70\x93\x78\x95\x2d\x57\xbc\xc0\x90\x9b\x7c\x8a\x71\x2f\xfd\x2b\xaa\x64\x41\x16\x52\x25\x0c\xd2\x4e\x54\x95\x45\xb6\x54\xfb\x27\xe1\xed\x76\xf3\xfd\x99\x98\xd2\xa5\x8f\xa2\x23\xb2\x3e\xba\xa4\xd1\x0c\x84\x1c\xba\x0c\xfd\x29\x15\xcf\x3b\x4d\x1b\xa5\x7e\x03\x43\xf9\x04\x23\x39\x3a\xea\x78\x78\x46\xcf\x41\x38\x38\x2b\x96\x57\x2e\x48\x74\x07\x34\xce\xfd\xe4\x55\x36\x52\x25\x92\xc5\xbf\x2d\x97\x34\x79\xed\xa7\x74\x24\x7d\x47\xb9\x4c\xa3\xa1\x04\x2a\x9d\x4f\xba\x7b\xca\xef\xb0\xef\xa0\x01\x7f\xf8\x94\xa6\x99\x9f\xa5\x4a\xc6\x02\xae\x53\x25\xa1\x57\x41\x9a\x35\xed\x7e\x61\xb2\xfa\xfb\xc2\x5f\xf6\xa7\x6a\xc4\x03\xcc\x5a\x53\xfd\x65\xcb\x33\x9d\x46\x8d\x07\xbc\x44\x4d\x0e\x7b\xb6\xe6\xad\xf7\x32\x04\x51\x50\xe3\x86\x2c\x15\x47\x46\x4e\x3e\xfc\xf6\xce\x5f\x8e\x34\x15\x13\x50\x31\x84\x7d\xa0\x97\x4d\x69\xba\xcd\x47\x61\x2a\xae\x68\xc6\xc3\xdb\xfb\x2e\x73\xc1\xf4\xea\xdc\x63\x13\x13\xa7\x4d\xe3\x88\x79\xac\xc5\x49\xcd\x4b\xa7\x3c\x2b\x0b\x65\x71\x5c\x75\xbc\x2c\xaf\xef\x95\x93\x09\x4b\xf1\x33\x99\x4c\xc2\x97\x05\x25\x8d\xcb\x2b\xe4\x82\x6a\x01\xf6\x75\x5c\xbd\xe0\x58\x5e\x4d\x98\xf4\x1e\x63\xe6\xc5\x95\xd4\xd2\x01\x2b\x76\x57\xd6\x75\x26\x1d\x1d\x3d\xcf\xbf\x12\x90\x61\xd2\x2c\x89\xaf\xe9\xac\xf3\x71\x10\x5d\x6d\x46\x2b\x39\x90\xee\xee\x56\x98\x88\x2a\x90\xa9\x24\xaf\x70\xe6\x66\x93\x84\xe7\x09\xeb\xd3\x00\x32\x50\x01\xe9\xcb\x3e\x42\xc9\x72\xea\x88\xe4\xfa\x4e\xc7\x38\xcf\xaa\xf8\xfd\x25\x09\x32\xfe\x7d\x23\x8d\x41\x13\x9d\x44\x32\xdd\x8c\x6e\x31\xbf\x7d\x97\xcc\x96\x11\xa4\x1e\xe2\xaf\xb2\x79\x8c\xa2\x01\xcf\x52\x03\xba\xe3\x46\x86\x51\x14\x6e\x31\x29\x0e\x2c\x96\x67\x92\x3c\x6b\x9c\x62\x76\xa6\x11\x2c\xd7\x27\x06\x96\x6c\xcd\x1e\x98\x2f\xac\x65\x12\x2f\x82\x94\x2a\x4c\x05\xde\x5d\xce\x07\x65\xb7\x5a\xac\x48\x39\x54\xf7\x5c\x6d\x34\xf3\x7b\x1a\x47\x0a\x66\x66\x2a\x1c\xfc\xfe\x80\xec\xab\x7b\x2d\xdc\xad\x19\xbc\x58\xf6\xac\x96\xea\x5b\xbf\x7a\xb6\x33\xc5\x61\x9e\x0f\x15\xfb\x7e\xd6\x94\x8d\x72\x3a\xbd\xe5\xf8\x1d\x77\x51\x46\x25\x28\xcf\x2f\x53\xb4\xca\xe2\x0b\x96\x01\xe9\x45\x9e\xda\x6b\xdb\x15\x86\x30\x01\x23\xa9\xff\xae\x94\xdb\x64\x39\x45\x7f\x04\xba\x69\x15\xaa\xae\x54\x96\x70\x2d\x9f\x99\xd7\x73\x3f\xba\xa2\x23\x91\x41\x40\x78\x1b\xa2\x24\x67\x1b\x29\x97\xfa\xfc\xe2\x96\xdc\x2d\xbc\xae\x92\x12\x72\x20\xa2\x68\x15\x51\xfe\x97\x9d\xb8\xc2\xdc\x5a\x2f\x16\x2c\x79\x51\x81\xab\x7a\x4c\xf1\xed\xa6\x1f\x87\xf9\x25\xd1\x94\xb0\xd4\x6c\x6c\x48\x1b\x3e\x4e\x7e\x4d\xf3\x3d\x46\x18\x1d\x6c\x84\xc5\x55\xd1\x9d\x63\x3b\x3b\xe7\xe1\xf2\x55\x9a\x6d\xdb\x72\x58\x1b\xe4\xec\x5c\x94\x6f\x1b\x72\x7d\x65\x04\xbc\x98\x9c\x4d\xf8\xed\xc2\xc0\xf8\x31\xf6\xdd\xbf\x02\x1a\x59\xf8\xb3\x57\x95\x6e\xca\x7b\xf7\x78\x30\x7f\x3a\xca\xa4\x97\x19\x9e\x76\xe3\x1d\xcc\xed\xe0\x63\x9e\x6d\xa7\xb0\xca\x7f\x27\x8a\x79\x2b\x83\xba\x9c\x44\x72\xb4\xe9\x2a\xc9\xa2\xca\xdf\x66\x74\xc1\x39\xe7\xab\xda\x15\xd5\x9b\x8d\x24\xb7\xee\xc8\xde\x8a\xa6\x6d\xb9\xf7\xf2\x72\xcc\x66\x29\x4a\x3f\x6a\x45\xf3\x6f\x19\x26\x7a\xe6\xa1\xce\x58\xc4\xda\x32\xca\x2f\x9b\x96\xc5\xf6\x65\xde\x7d\xd0\xb4\x4a\x72\xe7\xe3\x6a\x3f\xcf\xab\xb7\x5c\x77\xf6\x88\x67\x70\xc5\xed\x70\xc3\xb9\xe1\x4e\x52\xef\xcc\x31\x58\x06\x4d\x6e\xe1\x6b\xd0\xbb\x3f\xcd\x30\x7b\xbc\x54\x9b\xbb\x5f\xfb\x01\x2d\xc7\xd0\x9c\xc1\x0a\x8d\x57\x0a\x65\x31\x33\x44\x97\xa9\x69\xf9\x8c\x62\x52\xd9\x78\x41\x3b\x60\xab\x3a\x53\x57\x64\xab\xca\x12\x2c\x33\x70\xef\x80\xaf\x7b\x21\xee\x58\x06\x5d\x01\x32\x72\xd6\x1a\x5a\x9e\x13\x2d\x98\x89\x32\x2d\x43\x5e\xee\xee\x46\x7b\x2c\x9e\x4a\x7c\xab\xbc\xad\x83\xf2\xd2\x3f\x69\xc7\xb2\xe7\x38\xe4\x91\x2f\x85\x45\x34\x7b\xd9\x09\x56\x17\x28\x93\x6c\x2b\x28\x99\x24\x8d\xf7\x68\xab\x96\xf4\x3b\x93\x9e\xdd\x0f\x39\x1b\xdc\x29\x52\xda\xbe\x56\x13\x53\xa9\xb6\xee\x49\x64\x97\xab\xef\x21\xf8\x65\xf4\x6b\xa6\x2c\xa8\x9f\xae\x92\x66\x9a\x4c\xa6\x69\xd7\x0a\xf4\xd5\x7b\x72\x16\xa4\x8e\x53\xce\x5a\xe4\x54\x4b\x1c\x45\xf1\xfc\xc1\x8d\x2d\x4d\xf1\x73\xc7\x65\xa1\xec\x78\xb3\xc1\x0b\x9a\x6b\x7f\xd7\x1e\xf8\x09\x50\xc1\x4e\x48\xbb\x96\x58\xce\x89\x31\x82\x2a\x7b\x39\x88\x8c\x2b\x4d\x8a\xd2\x78\x48\xcf\xb0\xf6\x80\xd6\xbb\xe4\x97\x0e\x05\xb6\x95\x17\x47\xeb\xcc\x8b\xa3\x55\xf3\xe2\x68\xe7\xe3\xdb\x69\x42\x67\x34\xca\x02\x3f\x4c\xc7\x22\x97\x2c\x44\x8c\x5b\xdd\xc8\x29\xf7\x3f\x45\x78\x0a\x85\x8a\x19\x5a\xfe\x5f\xe5\x57\x24\x07\x84\x58\x3c\x9f\xa4\x78\x43\x42\x25\x3d\x2d\x95\xeb\x81\x27\xf2\xed\x1c\x05\xdc\x74\xec\x6f\xf0\x4a\xd1\xa6\x88\xde\x38\x7e\x0e\x2e\x47\xad\x28\xff\x8e\x5d\x5f\x94\xf2\xf0\x88\x9e\x9c\x00\x79\xb1\x67\xfe\xd1\xd1\x88\x4e\xea\x9d\x34\xf3\xb0\x96\x81\x15\x11\xbb\x73\xb1\x90\xb5\xc4\x97\xa2\xf4\x52\x3c\x12\xc7\xe2\xcb\x5c\x88\xaa\xc4\x5b\x48\x65\x12\xcf\x4a\x56\x8f\x11\x95\x73\x89\x17\xc7\x5c\x15\x26\x3a\xc5\xd2\x7d\xcf\xc8\x31\x15\x7a\xaf\x45\x10\xdd\x13\x1e\xca\xca\x8b\xb1\xcd\xdd\x4b\x14\x6f\xad\x69\x1c\x64\x24\xd4\x9f\xfd\x35\x0a\xaf\xdb\xb6\x99\xaa\xeb\x80\xfc\x5c\x05\x26\xd5\x34\xff\x40\x6f\x1b\xe0\x6f\x6f\xa3\x19\xfd\xfa\x4b\x9c\x74\x19\x05\x58\xc8\xb5\x86\x0b\xb6\xa3\x1c\x8c\x1d\x8a\x4c\xbe\xcb\x86\x60\x78\x7d\xb5\xe5\x64\xfe\xdb\x71\x58\x3e\xb8\x15\xfd\x90\x26\x99\x32\x0d\x92\x69\x48\x95\xcb\x20\x0c\xc5\xf1\xff\xf9\x21\x5d\x5f\x09\xeb\x80\x7e\xf9\x29\xfe\x3a\x11\x55\x41\x15\x74\x53\xd0\x4d\x51\xf8\xba\x08\xa3\x74\x22\xce\xb3\x6c\x39\x7e\xf1\xe2\xcb\x97\x2f\xe4\x8b\x41\xe2\xe4\xea\x85\xae\xaa\x2a\x80\x2d\xfe\xf8\xc3\xd2\xcf\xe6\xc2\x6c\x22\xbe\xd3\x74\x41\x7f\x6d\x13\xd3\x15\x74\x41\x17\xf8\x17\x4d\x4f\x4d\xf8\xa6\xa9\xc5\xff\x0a\x7f\xa0\x68\xea\x47\xcd\x21\x96\x8e\xc5\x04\xfd\x66\xa1\x09\x9a\x35\x57\xf4\xb5\xa2\xcf\xf5\xb5\x7e\xb3\x50\x15\x73\xae\xe8\xa7\xce\x5c\x5f\xdb\x37\xa2\x00\xd0\x4e\x44\x7e\xa8\xfc\x3a\x0e\xe3\x44\x7c\xf1\xe3\x0f\x00\xc6\x8f\xff\x47\xae\x0f\x2c\x5e\x65\x61\x10\xd1\xc3\x8d\x0d\x41\xd3\xd7\x3a\x03\x0f\x40\x73\x01\x2a\x04\xef\x66\x41\x3c\x4f\xb1\x60\xec\x4e\x7b\xec\x0e\x8c\xda\x23\x9e\x27\x68\xea\x6b\x3e\x5e\xfc\xbf\xf8\xae\xe9\x25\x1e\x34\x28\xa8\xdf\x20\x32\xd5\x29\xa0\x4a\x17\x54\xc5\x55\x0c\x62\xb9\x8a\xab\xb8\x29\xfb\x22\xe0\x3f\x01\x7e\x08\xf0\x83\x7d\x81\x67\x03\xf1\x94\x25\x81\x1f\x5d\x85\x07\xc4\x90\xa0\x6b\x73\x5d\x3f\xd1\x70\x18\x82\xae\xdd\x2c\x34\x5d\x31\xda\xd3\xb9\x56\xcc\xb9\xbe\x36\x77\xc3\x99\x24\xf1\x17\x65\x16\x7f\x89\x0e\x39\x8b\xc6\x5a\x33\x89\x1e\x2a\x06\xb1\xe1\xdf\x89\x2d\x68\x56\x68\x0b\xb6\x60\x2b\xb6\xa2\x11\x13\xff\x19\xc4\x16\x0c\x62\x9f\x02\xf4\x03\xe1\x0c\xe9\x65\x76\x30\x38\x75\x4d\xd0\xb4\x63\x9b\xb8\x46\x88\xd3\x6d\x10\xcb\x3b\xf1\x04\x3b\x54\x10\x52\xc1\x16\x34\x62\x6a\x00\xaa\x76\x02\xa5\x04\xcd\x38\xd6\xb5\x81\x90\x26\x78\xac\x79\x28\x50\xa1\xef\x79\x81\x52\xc0\xda\x89\x66\x09\x9a\x1b\x02\x3e\x39\x4e\x01\x5a\x81\xbf\x3d\x36\xd6\x43\x51\xba\x5a\x1e\x6e\xe2\x0d\x41\xd7\x4e\x6d\xe2\x86\x05\x90\xae\xe0\x85\x0c\x44\x86\x4e\xf8\x77\xa2\x69\x82\x4d\xdc\x53\xa0\xe4\x5d\x40\x5e\xc4\x71\xc6\xc1\xfb\x12\xcc\xb2\xf9\x44\xd4\x5c\x5b\x14\xe6\x14\xd0\xcb\x7f\xd4\xe0\xd6\x5c\x5b\xc0\xa7\xfb\x41\xae\xaa\xc4\x73\x0d\xc1\x36\x88\xed\x85\x06\x31\x54\x43\x70\x89\xad\x5a\x82\xae\x12\xc7\xb0\x15\x87\x78\xf6\x54\xf3\x88\xa9\x38\xc4\x34\x1d\xc1\xd4\x88\xaa\xc3\x68\x74\xdd\x16\x2c\x95\x68\x9a\x2e\xc0\x6b\xd3\xf1\x75\x95\xa8\x8e\x26\xf0\x3f\x08\x93\xa0\x0b\x06\x71\xbd\xd0\x21\x9a\xed\x0a\x9a\x4b\x6c\x47\x9b\x1a\xc4\xb3\x80\x41\x13\x43\xd3\x15\x8d\x68\x1e\x60\x8f\xb8\xae\xa2\x69\xc4\x82\x9e\x2d\xe2\x9a\xa1\xe2\x7a\xc4\xd6\x0d\xc1\x30\x89\xa9\x1a\xd8\xb8\xc7\x1a\xf7\x78\xe3\x8a\x41\x5c\xd7\x13\x34\xa2\xda\x5a\xa8\xc0\x1b\x5b\x13\x1c\xe2\xa8\x9a\x0f\x5c\x8b\x95\x81\x6e\x0c\x5b\x31\x89\xad\xea\x27\xc4\xb5\x1d\xc1\xb4\x88\x6d\xda\x65\x11\x01\xdf\xb1\x82\xd6\x89\xa3\x11\xc7\x32\x04\x0f\x8a\x56\xca\xb0\xb7\xac\xe8\x89\xa7\x13\xcd\x14\x4c\x95\xd8\x96\xee\xeb\xc4\x74\x5d\x81\x7d\x42\x59\x15\x86\xa4\x39\xc4\xd5\xa7\x8a\x41\x34\x13\x2a\xa9\x0e\x8c\x4d\x73\x00\x3a\x45\x37\x88\x07\x60\xab\xc4\xf2\x7c\x9d\x58\x02\xfc\x53\x59\x3f\x04\xa0\x71\x1d\x77\xaa\xe9\xc4\xf5\x14\x9d\x78\xaa\x0d\xc8\xb1\x54\x5b\xb1\x89\xe5\xb9\x80\x1c\x4f\x33\xa1\x39\x43\x73\x43\x8b\xa8\x9a\x29\x68\x06\x51\x6d\x00\xc4\x83\xc6\xe0\x33\x07\x44\x35\x89\xe3\x31\x38\xcc\x12\x0e\xdb\x2d\x01\x71\x07\x00\xa2\xbb\x0a\x80\xa3\x03\x24\xa6\x6e\x00\x24\xb6\x8e\xd3\x64\x41\x7b\xba\x75\x53\x21\xdc\xa9\x1f\xd2\x68\xe6\x27\x07\x5b\x5b\xb0\x47\x79\x40\x63\x9a\x69\xcc\x01\x00\x77\x0d\xab\x5e\xf7\x8e\xe1\x95\xb1\xc6\xef\x37\x0b\x00\xd1\x72\x05\xf5\x58\x33\xf8\xfb\x39\xfb\x53\x2b\xe0\x08\xea\x9c\x3d\xe5\x6d\xb8\xc4\xd1\xcc\xed\x45\x60\x9c\x4e\x5e\x44\xc3\xbf\xac\x60\x0d\x1a\xd6\x9b\xdb\xd9\xd4\x23\x83\xf8\x54\xd3\xb7\x42\x7b\xaa\xe9\xbd\x90\x16\x75\x7b\xa0\x84\xba\x5b\x20\x84\xd7\x7d\xd0\xb9\xbc\x77\x36\xd3\x15\x00\xdd\x16\x80\x58\xa4\x02\xa3\x5b\x87\xb1\xd2\x82\xd7\xd9\x82\xc7\x5b\x28\x21\x75\x6f\x16\x0e\x3c\x52\x2c\x78\xc4\x0b\x15\x43\xc5\xba\x37\x0b\xc5\x25\x16\xb0\x36\x0e\x85\x7e\xec\x10\xdd\xb5\xf9\xdb\x77\x8c\x50\x75\x15\xca\xcc\x35\x6c\xe7\xd4\x81\xcf\x63\x93\x01\xc2\xcb\xe9\x2a\x74\x24\x18\xa4\x84\x11\x18\xca\x54\x15\x88\xa9\x10\x43\x33\x89\xa3\x59\x0a\x54\x84\x2f\x73\x06\xb8\x4f\x1c\x15\x78\x9b\xc3\xf9\x1a\xbc\x86\x0f\xeb\x94\xb5\x63\x72\x48\x7a\xdb\x39\xb6\xc9\xae\x56\x00\x4e\xe3\x95\x46\x4c\x43\xc0\x0f\xc6\x0b\x0c\xe0\x04\x30\x61\x38\xa2\xd7\xc8\xac\x0d\xcb\x81\x6d\xce\x34\x40\xbe\xe4\xe3\xd6\xf9\x98\xa7\xc4\x71\x6d\xe4\x21\xa6\xee\x2a\x58\x88\x7d\x65\x38\xc5\xc6\xa6\xaa\x02\xa5\xe0\xad\xae\x94\x6f\xf9\x27\xdf\x1b\x95\x64\x15\xd2\x89\x48\xd7\x34\x8a\x67\xb3\x5d\x9b\xfa\xd4\x8f\xa6\x34\x7c\x50\xcd\xa3\x90\xbe\x9d\xba\xf4\x5d\xd5\x3c\x9c\x8a\xe6\x61\x14\x9a\x87\x05\x3c\xda\xf2\x4e\x34\x8b\x58\x9e\xa0\x39\xf0\x58\x33\x88\xa9\x09\x2e\x7c\xc0\xce\x20\xf0\x77\x2a\x7e\xea\x82\xc3\x5e\xe1\x07\x2b\xcf\xde\x60\x29\x07\xaa\xb0\xaa\xd8\x0a\xbc\xe6\x2d\xec\x94\x7e\xea\x88\x3a\xb8\x26\x63\x02\x7c\xee\x49\x01\xb0\x87\xa3\x10\x5c\xf6\xa5\x18\x9e\x2b\xb0\x92\xec\xa9\x5d\x22\x84\x3d\x86\x27\x76\xfe\xbd\x18\xa2\xcd\x8b\xb3\x3e\x6e\x0e\x30\x31\x20\x37\xa1\x1a\xa4\xe5\x6a\x90\x97\xab\x41\x5e\x55\x0d\xf2\x72\x35\xc8\x1b\xa8\x06\x71\x2c\x2f\x43\x3f\x38\xa0\x82\xe1\xc1\x20\xb5\x13\x18\x83\x27\x58\x25\x55\xc0\x53\xc1\x12\x2c\xf6\xa5\x40\xb2\x25\xb0\x92\xec\xa9\x57\x41\x32\x3e\xd6\xd8\xff\x4e\x15\xc9\x43\x07\x96\xfe\x63\xe5\x27\x87\x5e\x67\x9e\x60\x4c\x41\xf4\x50\x05\x5d\x20\x1e\x4c\xea\x1a\xf9\x99\x46\x34\x05\x7e\x2b\xba\xa0\x1f\x5b\x53\x05\xcb\x28\xba\x42\x3c\x45\x57\xf4\x53\x6b\x8a\x42\x17\xfc\x82\x32\x73\xcd\x04\x76\x2f\x68\x3a\x2e\xb9\xca\x02\x61\x2b\x26\x5f\x41\x39\xf2\xf8\x12\xcb\x5f\x97\x0b\x90\x95\xcc\x57\x68\x89\xbc\x62\x11\xef\xb9\xe4\x38\xce\x0e\xbe\xe4\x3c\xc1\x5a\x6b\xe6\xb1\x75\x6a\xe1\xd0\x55\xa5\x8a\x24\x81\xa1\xa5\x40\x24\xc3\xab\x00\x58\xca\x71\xcd\x71\x9b\xe3\x91\xa3\x55\xd1\x6f\x16\x6c\x65\x58\x7f\xc8\x6a\xde\x81\x44\x86\xc3\x86\x4a\x64\x56\x34\x22\xb3\xa9\x10\x99\x82\xb6\x3f\xf7\x42\xd5\xf7\x04\x49\x47\x50\x05\x47\x60\x73\x8d\xfc\x81\xed\x69\x9a\xc0\xe9\x47\x65\x04\xc6\x9e\x69\x66\x41\x3f\xec\xa1\x89\xff\xeb\x25\x7d\xdd\xd4\x09\x22\xa1\xd9\x61\x8d\x0f\xc0\xdf\x42\x60\x01\x96\x62\x0d\x20\x48\xe8\xff\x80\x1a\xb0\x23\x68\x66\x68\x29\xd8\xff\xee\xde\xe7\x74\xfa\xf9\x91\xda\x08\x81\x6f\x58\xa1\x02\x43\x29\x8d\x20\x50\xc7\x24\x9a\x13\x02\xab\x54\x1c\x64\x2b\x9e\xe0\x86\x8a\x27\x0c\x58\xfc\xd5\xd1\x1e\x7c\xed\x7f\xeb\x80\xdf\x01\x95\x4e\x55\xb6\xd0\xcb\x5d\x2f\xed\xdc\xf5\x2a\x3b\xe4\xcd\xc2\x10\xd4\xb0\x82\x22\x14\x45\x34\x27\x84\xd5\xa1\x58\x88\x22\xb4\x81\x38\x82\xa3\x98\xca\x6e\x7b\x1c\x43\xd3\x61\xf7\x4b\xe0\x3c\x44\x73\x4e\x4c\x34\x62\xe9\x21\x8a\x97\x6c\x85\xe3\xd6\xa7\x6b\x82\x83\x0f\xd9\x20\x86\xc0\xb8\x4e\xe2\xe8\xc0\x56\x43\x9b\x31\x09\xc0\x98\xce\x90\x28\x38\x4c\xf4\x83\xad\x1b\x96\x35\x37\x20\x0e\x86\xef\xa0\xd6\x42\x90\xea\x01\x8f\x5e\xa8\x98\x04\x2d\x29\x02\xff\x5b\x18\x34\x2b\x66\x43\xf8\x3d\x18\xce\xc3\xda\x0a\x5d\x62\x08\x0e\x71\xc2\x0a\x84\xf0\x37\xb7\xbe\x09\x0d\x93\xe1\x60\x28\x0f\xc9\x26\xa1\x6b\x3b\xac\x42\xc7\x21\x64\x78\x64\xf6\xc2\x13\x56\x6c\x37\x80\x61\x3c\xfd\xfc\x20\x0c\xd4\xe2\xec\xc4\xca\xb9\x89\xd5\x60\x26\x56\x85\x97\x14\xbc\xd3\x24\x3a\xf0\x49\x9d\x31\x83\x53\x67\xae\x11\x6b\x6d\x11\x3d\x34\xd1\xb8\xe4\x28\xc4\x15\x34\x62\x0c\x1c\xd7\xe1\xcf\x58\xf0\xec\xe3\x91\x1c\xa3\x2c\x88\xa5\x68\xc6\xb1\xa6\xad\xed\xd0\x22\xba\x25\x18\x04\x16\x9a\xa5\x68\x44\x37\x00\xc1\x8a\x4e\x6c\xe7\xd4\xd9\x29\x16\x01\xae\x38\x8a\x76\xa3\x23\x17\x9c\xdc\x52\x6e\x72\x1b\x62\x93\x2b\xb8\x55\xac\x99\x82\xfa\x5a\x23\xdc\x0c\x8a\x7f\xcd\x14\xfe\x9a\xec\x3f\x05\xbf\x2b\xf8\x17\xd8\xbc\x62\xa2\x4e\x35\xd5\x88\x6d\xa3\xed\x40\x23\x86\x29\x18\x82\xf1\xd1\x82\x27\x8e\x00\x72\x12\x88\x50\xb6\x2d\x68\xd8\x94\x61\x2a\x86\x60\x28\xc6\xcd\x42\x01\xaa\x5a\xeb\x44\xd7\x43\x02\x7c\xdb\x20\x16\xb1\x88\x61\x12\xc3\x25\x8e\xae\xe0\x3f\xc3\x55\xa0\x06\xff\x77\xaa\x13\x55\x9f\x2b\x5a\xcd\xfe\x18\xcf\xe8\xc1\xf6\x0f\x5c\x87\xc4\x86\x0d\x04\xf6\x0f\xbe\x6e\x4f\xdc\xc6\x59\x09\x32\xbd\x85\x45\x74\x41\xcd\xcb\xe4\xff\x4e\x34\x5b\xb0\x43\x64\xdf\x42\xc1\x30\x77\xaf\x80\x78\x79\xad\xf8\x2c\x9a\xee\x70\x87\x14\xc4\xd5\x05\xe3\x35\x08\xe0\x30\x95\x28\x9e\x1a\x82\x26\xc0\x6a\x05\x75\xc1\x00\x75\x81\x98\xc4\x35\x15\x1d\x8a\xea\xc7\x66\x5b\x8b\xb0\xf7\xd6\x22\xe6\x8a\x49\x34\xf7\x06\x36\x63\xe3\xd8\x5e\xeb\x73\x03\x4f\x38\x15\x43\xb0\xe7\xd6\x5a\xd1\xe1\xd9\xcd\x3b\x5b\xf0\xd6\xfa\xdc\x3e\xf5\x8e\xed\x9b\x85\xa5\xd8\x53\x62\x59\x68\x79\x27\xa6\x05\x30\xa6\x0a\x7e\x51\x34\xf8\x07\xdf\x15\xf8\x8e\x7f\xe1\xc9\xcd\xc2\x23\xaa\x6a\x08\x9a\x7a\xac\x1b\x78\x8c\x4a\x3c\xcf\x59\xeb\xc7\x9a\xbb\x36\x8f\xcd\x53\x6b\xae\xaf\x35\xa2\xaa\xce\x5c\x53\xf1\x87\x45\x3c\x4f\x9f\xeb\x50\xe9\x54\x33\x80\x68\xd5\x63\x0d\x1e\xae\x15\x03\xf7\x61\x33\x34\x60\x91\x9b\x6b\xc5\x98\x9b\x44\xd5\x10\xea\x41\xf3\x96\xae\x30\x53\xc1\x21\x4d\x2a\x6c\xe2\xcc\x62\xe2\x0c\x36\x71\x7a\xdf\xc4\x75\xa8\x7f\x36\x51\x75\xeb\xde\x93\xa7\xe9\x82\xb1\xf7\x94\x70\x59\xda\x54\xcc\x86\x2c\x6d\x81\xa0\x08\x62\x0f\x1e\x6a\x80\xa0\xa8\xa9\xe1\x10\xb3\xca\x2c\x48\xfd\x8b\x90\xce\x1e\x8d\xf8\x5c\x1a\x90\xea\x1b\x00\x9e\xbe\xb8\x16\xb1\x0d\x78\x04\xba\x84\xed\x29\x26\xf1\x4e\x40\x90\x12\x34\x97\x18\xda\x2b\x87\x78\xaa\x2e\xb0\x4f\x7e\xca\x04\xdb\xc9\xcd\xc2\x26\x86\xa6\x18\x44\x3b\x71\x08\xb2\x4a\xaf\xbb\xa8\x39\x65\xdd\x56\x76\x18\xc6\xa4\x2d\x85\xd8\x06\x3c\x83\xdd\xc4\xf6\x04\x93\xec\xd4\x52\x66\xf1\x34\x3d\x18\x52\x5d\x60\xe4\xda\xb1\xae\xae\x3d\x02\x24\xc7\x4c\xbd\x0e\x2a\xd7\x00\x12\xa0\xc3\x9a\x2b\x9a\x39\x55\x98\xad\x18\x9e\x31\x5b\x34\x2f\xb0\x56\x34\xe7\xb5\x01\x32\x83\x66\x0a\x06\x7e\xea\x02\x4a\x11\xc7\x9a\xb1\xd6\x88\x75\x6c\x12\x6b\xad\x39\x73\xcd\x3c\xd5\xb4\x1b\x50\x3f\xd1\xd2\x3e\xe7\x47\x20\xee\xb1\x93\x5b\xf5\x55\x7e\xf2\xe1\x9d\x6a\x68\xe3\xce\x5f\x40\x1d\x7d\x5e\x1c\x99\x38\xa7\x1a\x73\x21\x20\xba\x6b\x9f\xda\xf0\x39\xb7\xd6\xbc\xad\x9b\x77\x9a\x23\xe8\xc4\x3a\xd5\xe6\xf6\xda\x9e\x03\x84\xa7\x06\x54\x03\xd2\x05\x0d\x42\x41\xdd\x09\xa6\xfa\x58\xdb\xb9\x65\x83\xf6\x80\xf7\xfa\x1d\xce\xfe\xe3\xcd\x15\xf3\xd4\x38\xf6\xd6\xf6\xb1\x15\x3a\x02\xe8\x5c\xce\xcd\x3b\x4b\xd0\xdc\x35\xac\x72\xe0\xb2\x16\xae\x47\x7d\xae\xaf\x15\xf3\xd8\x58\x9b\x37\x0b\xcd\x16\x54\xfc\x39\x57\x06\x38\x4c\xd0\x59\x90\x1d\x0a\x62\x0b\x58\x80\xe3\xd9\x6b\x83\xa8\x96\x3b\xc7\xcf\xd0\x25\x9a\x65\x28\xf0\x69\x2a\xf0\xc4\x61\x9f\x27\x79\xe1\x9b\x85\x46\x80\xfc\xe7\x1a\x51\x35\x17\xb8\xb9\x0e\x5f\x91\xaf\x6b\xee\x31\xf0\xb7\xb5\xa2\x13\xd5\x70\x6f\x16\x9a\x4e\x2c\x3c\xbc\x36\xcd\x13\xcd\x21\xba\x21\x78\xc4\x76\x43\x6c\xd1\x65\xed\x82\x64\xa2\x03\xb1\x19\xba\xed\x43\x13\x40\x95\xf0\xc9\xd7\x17\x31\x0d\x5b\x21\xaa\xaa\xcd\x89\xaa\xea\xa1\x46\x6c\xd0\x1c\x6d\x5d\x9f\x12\xc3\x73\xf2\x7f\x50\xc7\x64\x86\x21\x63\xe7\xc4\xd3\xaf\x07\x45\xa1\x77\x6a\xcd\x2d\xe2\x99\x30\xf3\x96\x0f\x2c\x89\x1d\xfb\x32\x6b\x5f\xf9\xa0\x9b\xd5\xaf\x15\x8b\x78\xee\x5c\xd1\x4f\x35\x0f\x88\xc3\x53\x34\xdc\x9c\x89\xe5\x85\x8a\x07\x0a\x33\x7e\x30\xeb\x16\x32\x6e\x66\x47\x3e\xd5\xd4\xb9\x7e\x6a\xcc\x95\x9d\xc3\x15\xe9\xd7\xa5\x1f\xcd\x94\xf0\x90\x9b\xa1\x25\x68\x46\x08\x72\x8b\x4e\x0c\x3c\x95\x16\x74\xe2\x3a\x42\xae\xd8\xeb\x27\x2e\xd3\x56\x1d\x14\x6b\xbc\xb5\x62\xc3\xe0\x34\x53\xd1\x43\x85\x55\x81\xaa\x78\xb6\xee\x3a\xb8\xf6\xf1\xe3\x44\xb3\x50\x7b\x34\x04\xcd\x10\xac\xb5\x3d\xdf\xad\x7d\xf1\xd1\x2d\xe2\xe4\x90\xa7\x27\x82\xb9\x75\x74\xc0\xe6\x40\xc9\x15\x74\xd8\x96\x4e\xcd\xb9\x62\xdf\x2c\x14\x54\x2a\xb7\x0e\xcf\x86\x91\xc1\x87\x29\x68\xe6\xa0\xe1\x5d\x06\x07\x37\xce\xe1\x69\xab\x80\x8c\xfa\x04\xcf\x6e\xf3\x33\x50\x75\xad\x39\x44\x33\xd1\xd1\xc7\xb5\xd8\xa1\x69\x71\x4e\xea\xac\x41\x13\x70\xb4\x62\x23\xc9\x4f\x14\x3d\xc6\xba\xd9\xf7\xf2\xec\x92\x1d\x5e\x1a\x7c\x1d\x1b\xfc\x40\x16\x0f\x38\x71\x4b\xb1\xb1\x5f\x3c\xbb\xcc\x8f\x2e\xe7\x9a\x0a\x5d\x86\x96\x60\xdd\xbc\xc3\xe3\xe9\x7c\x3f\xd1\x54\xbe\xa1\x30\x28\xeb\x5b\x8a\xa6\xb2\x3d\xa5\xfb\x5d\x79\xa6\xaf\x56\xf7\x96\x39\x3b\x18\xc6\x1d\xa6\x72\x14\xbe\xfb\x44\x09\x27\xe4\xd0\x4a\xf1\x3f\x07\xc7\x0b\xd6\x2a\x9e\x8d\x23\x21\x9c\x6e\x23\x84\x1d\x88\x61\xd7\x8f\x1e\x8c\x48\x41\xa0\x9b\xc3\x8e\x39\x57\x4c\x50\x4c\x0c\x01\xd8\xa2\xe6\x9e\xda\xc7\xc6\xcd\xc2\x10\x9c\xb9\xa6\xe7\x5a\xcb\x2e\xc8\x42\xff\xea\x90\x6e\x30\x82\x7d\x02\x0c\xe2\x18\x25\x1f\x7d\xad\x38\x73\x8b\xd8\x21\x31\x05\x7d\xee\x9c\x0e\x58\xd1\x71\x38\xa3\xc9\x81\xd7\xb4\x2a\x98\xa5\x9a\xa8\x11\xcf\x23\x9e\xc2\xac\x23\x27\x3a\x88\xc6\x0d\x85\xc3\x6e\x2a\x1c\x6e\x4b\xe1\x70\x43\x3c\x7b\x1a\x38\x9a\xc3\x2f\x08\xc1\xce\x61\x38\xe8\xc0\x50\x55\xd0\x8f\xcd\x53\x77\xae\xd9\x6b\x4d\xdd\x39\xc0\xab\x20\x53\x2e\x12\x3f\x9a\xce\x0f\x69\x6a\xd6\x5d\x1b\x64\x21\xcf\xf3\x35\x62\x59\xb6\xc0\x3e\xb9\xaf\x1c\xb1\x4c\x83\x7d\x4e\x55\x85\xb8\x86\x4d\x1c\xd5\x61\x0f\x84\xca\x4b\xe2\x1a\xa8\x08\xe2\x77\x47\x75\x84\x4a\x09\x41\x15\xe0\xb5\x42\x1c\xd5\xad\xd6\x61\xdf\xdf\xb9\x04\x78\xab\x47\x3c\xd7\xec\x01\x40\xaf\x02\x60\x15\x00\xe8\x42\xf9\x52\x07\xd0\x7a\x00\xd0\x19\x00\xa0\x6f\xe4\xcf\xab\x00\x2c\x54\x05\xb4\x7c\xcb\x9a\x12\xd7\xf4\xee\xd7\x06\x00\x6e\xa3\x2e\x63\x9b\x15\xc0\x07\xc0\xbd\xd0\x54\x9c\x00\x93\x68\x20\xa0\x11\xcb\x06\x66\x09\x9f\x5c\x72\x03\x2e\x8a\x9f\xfa\x2b\x9d\x39\xd9\xe1\x27\x77\xca\xb3\xd0\x0d\xd1\x32\xd7\xc4\x70\xed\xa9\x42\x54\xdd\x26\xb6\xed\x29\x44\xf7\x00\x8f\xba\xad\x10\x17\x84\x35\xc7\x31\x15\x62\x69\x26\xb1\x34\x10\x70\x35\xd5\x26\x8e\x0b\xdf\x1c\xc7\x24\x2e\x40\xab\xda\x0e\xd4\x06\x82\x56\x0d\xa2\xab\x36\xeb\x94\x58\x2e\xf0\x5c\xd7\x78\xd5\x82\x4d\x70\x89\x65\x0b\xf8\xc8\xd2\xf9\x27\x7b\x61\x0b\x16\x80\xed\x23\xf0\x02\xfb\xcc\xbd\x08\x61\xb0\x3a\xd1\x35\x7d\xed\x12\xd3\x30\x5f\xdb\xc4\xd2\x51\x3c\xb3\x6d\x47\xb0\x61\x93\x35\xf1\x88\x03\xde\x76\xf7\x09\x4d\x6a\x6d\x54\x61\x3f\x3a\x43\x18\xa0\xdc\x76\x75\x85\xe8\x16\xe0\x5c\xc7\xfd\xcb\x05\x94\x3b\xa6\x47\x34\x0d\xc4\x78\xc7\x21\xb6\xe6\x2a\xc4\xd2\x6d\xe2\x58\x9e\x42\x6c\xd5\x24\x86\xae\x29\x44\x33\x75\xb4\x2c\xea\x1a\xec\x72\xba\xea\xe5\x5f\x81\x88\x55\xdb\x84\x9e\x54\x47\x21\x96\x83\x6a\xb6\x81\x3a\x35\x92\x85\x8a\xbb\xa3\x8a\xbb\x23\x90\x88\x4e\x2c\x13\xe6\xc1\x56\x1d\x74\x4d\x35\xe6\x0a\xda\x5c\x88\xe3\x9a\x0a\x31\x6d\x34\x86\x6a\x1a\x03\x91\x7f\xd7\x89\x0e\xab\x78\x37\x27\x98\xc6\x8b\x45\x70\xc0\x43\x1d\xb4\xd4\x7b\x38\x6d\x2e\xcc\xa7\xcb\x0d\x0b\x68\x41\x42\xf1\x51\x77\x5f\x35\xde\x09\x9a\x2e\x78\xc4\x40\xd2\xad\xbf\xc0\x4a\xec\xb3\xab\x12\x76\x75\xb3\x30\x89\x67\x1b\x0a\x12\xff\x6b\x10\x46\x5d\x53\x70\x89\x6d\xa2\x67\x80\xc1\x5d\x32\x9c\x54\x31\xf1\x8d\x06\x6f\x14\xac\x22\x18\x20\x26\x1d\x1b\x6b\x9c\xf4\xb9\x49\x54\xc3\x79\x0d\x13\x6a\x83\x6a\x68\x9b\xc0\xd0\xd0\xa7\x05\xf1\xaa\xf3\x6f\x29\xb6\xa3\x60\x3b\x02\xeb\x9a\xb5\xa3\x6b\x6b\x46\xee\x73\x05\x9b\x1a\xc4\x89\x97\xab\x30\x54\x12\x16\xd9\x74\xc0\xe3\x20\xc3\x73\x05\x97\xa8\x68\x09\xf1\x74\xdc\x69\x4c\x53\x21\xb6\xcd\xbe\xc0\x87\x80\xbe\x72\xf9\x23\xa1\x78\x4e\x1c\x66\xee\x31\x4d\x34\xa6\xe7\xef\x04\x14\xe1\x94\xfc\x59\x59\x69\xc1\xbe\xa9\xc4\xb2\x51\xcc\xf3\xf4\x8e\x42\x0a\xb6\xda\x0b\x85\xb6\x1d\x0c\xe6\x0d\xc1\xbb\x23\x9e\xad\xe0\xd1\xb2\x46\x0c\x43\x47\xa6\xe3\x2a\x3a\x31\xf3\x7f\xbe\x4e\x0c\x0f\x48\xc7\xe0\x0e\xdd\x50\x12\xc5\x45\xdb\x5c\x3b\xc4\x45\x1e\x68\x78\x58\x80\x2f\x7a\x86\x2f\xe4\x07\xf5\x17\x1a\xd1\x15\xac\x78\x0a\x88\xc2\xa6\x91\xf3\x18\xae\x5d\x29\xa1\xc3\x7a\x5e\x38\x84\x39\xa7\xec\xc6\xf9\x1e\xa3\xdd\x86\x75\x5d\x31\x88\xa5\x9a\xa7\x1e\xb0\x6c\xd8\x55\x3c\xf8\x30\x55\x17\x38\x94\x0d\x65\x35\xf4\xb0\x36\x1d\xfd\xa3\x66\x11\xcb\x30\x05\x8b\x98\x06\x77\x98\x71\xe1\xc7\x1c\x50\x73\x6a\x14\x41\x10\xf9\xbf\x53\x87\xb8\x73\x8d\xe8\x53\x62\xe8\x26\x51\x75\x93\x58\x8e\x4d\x34\x03\x97\x2f\x31\x1c\x3d\x25\x86\x0d\x9d\xc3\x77\x78\xb6\x76\x88\x65\xd8\x88\x3f\x5d\x60\x9f\x05\x7e\x18\xea\x85\x5e\xdc\xee\x5a\x26\x73\x1a\x2e\x1f\xa9\x57\x07\x70\x87\x6a\xa8\x90\x4e\x54\x47\x71\x88\x63\x85\x0a\xf1\x88\xa7\xe3\xa1\x88\x25\x68\x3a\xf1\x04\xcd\x40\x67\x4d\xfc\xcb\xc2\xc5\x48\xee\x60\x66\x5a\x8a\x4e\x60\x87\xd5\x1c\xe0\x90\x46\xa8\x11\x1d\xe6\x4f\xb7\xa7\xc4\x70\x14\xc4\xb5\xa7\x10\x17\xff\x30\xa7\xa1\x9a\x0c\x98\x16\xf6\xf8\x63\x10\x0f\x61\x67\x84\xed\xda\x53\x4c\xc1\x54\xcc\xd4\xc4\x1f\x82\x29\xa0\x0f\xaf\xeb\x42\x83\xc0\x07\x5d\x20\x19\xd8\x47\xad\x7b\x79\xc6\x56\xe7\xe5\x21\x02\xd7\xdc\x39\x22\x56\x41\xcc\x6a\x8a\x66\x1f\xc8\xa2\xbe\xaf\x4b\x26\xc8\x76\xe6\x94\x61\x55\x55\xcc\x02\xb3\x73\xbd\xee\x1f\x98\xe6\xce\x85\x53\x10\xd7\x61\x57\x76\x2c\xc5\x10\x2c\x2c\xa7\xe3\x59\x2c\xec\x0f\x82\xa1\x58\x02\x9b\x24\x85\x35\x35\xc4\x8f\x65\x1e\xa4\x59\x9c\x5c\x3f\xe0\x89\xac\x2a\xa8\x6b\x73\x6e\x9e\xaa\xc7\xea\xcd\xc2\x12\xf4\xb5\x71\xac\xaf\xb5\xb9\x79\x8a\x36\x5e\x1d\x1f\x98\xf8\xc0\x3c\xae\x7b\x9d\x05\xd1\x65\xfc\x60\x0b\x74\x6a\x81\xc8\x29\xe0\xf4\xc2\xdc\xda\x6c\x9e\x53\x25\xff\xa1\xe0\xef\x8f\xec\x44\xdd\xe4\x2e\xb8\x36\xbe\x2c\x96\x29\xb3\x35\xa8\x44\xd5\x98\x7a\x80\x27\x05\x56\x1e\xcf\x42\x4c\xd3\x50\x88\xe7\x5a\x53\x85\x49\x79\x3a\x08\x6e\xc0\x4b\x75\x0f\x9e\xdb\x58\x82\xfb\xd4\x4f\x15\x62\xb8\x16\x51\xd1\x07\xdd\xb5\x88\xe6\x5a\x58\x17\x8a\xf8\xb0\x94\xd1\xac\x66\x39\x95\xb6\xe1\x75\x1e\x01\x61\x13\x63\x0a\xb2\x1d\x6c\x21\x44\xb3\xd0\x74\xc5\xcb\xa0\x12\x45\x74\xd7\x22\x76\xf1\xc4\xe4\xb1\x29\xde\x14\x7a\x85\xdd\xc0\x86\xfe\xa0\xa2\x07\x5f\xa0\x5c\x0e\x32\x03\xd7\xce\x47\x63\x1f\xa3\x11\xe9\x54\xd3\xd7\x30\xee\x1b\x58\x53\x0e\x71\x00\x48\x03\x78\x12\x7e\x72\x77\x7d\x53\x41\x69\xd7\x24\x1a\x34\xe1\x98\x06\x3c\x11\x88\xee\x68\x20\xfd\xba\x88\x0b\x2c\x97\xe2\x4b\x4d\x77\xf1\xb8\x6e\x0a\xa2\x31\x94\x22\x26\xf4\x8b\x47\x77\x9a\xee\x11\xc7\xd4\xb1\x82\xdf\xb2\xe9\xe0\x41\x9e\xee\x4e\xe1\xb5\x8a\x3d\xc1\x60\x1c\x3c\xe7\xeb\xb3\x55\x75\xb1\xa6\x1e\xea\x7b\x08\x37\xb8\x43\x10\x20\x1e\x9f\x81\x6e\xc5\xea\xa8\x8a\xcb\x43\x35\x6c\xdd\xe5\xdf\x5d\x10\x5f\x85\xbc\x0b\x83\xd8\x96\x23\x14\x6f\x8a\x4f\x5e\x9f\xfd\x52\x98\x29\x8c\x7d\x67\xef\xd1\x87\x46\xc1\xda\xf0\x44\xf7\x94\xe2\xad\xee\x01\x1d\x58\xf9\x6a\x80\x27\xee\xbf\xf5\x62\x70\x9f\xe2\x62\x28\x09\x3f\xa4\x7e\x12\x1d\x8e\xd0\x89\xa9\x7a\x82\x45\x74\xc7\x08\x5d\xe2\x69\x96\x80\xe1\x94\x53\x62\xda\x44\x57\x4d\x62\x3b\x36\xb1\x41\x72\x75\x40\x74\xd0\x54\x10\x57\x89\xa9\x3b\xa0\xd5\xda\xc4\x53\x41\xd0\xcd\x5f\x81\x38\xa9\xc1\x0e\x4e\x0c\x57\x5b\x1b\xc4\xb1\x1d\x10\x3c\x34\x13\x34\x5f\xe8\xc2\x53\x88\x86\xfe\x37\x38\x7b\x0e\xaa\xc4\xa6\x61\x12\xdb\x30\x18\xc2\x5d\x0b\x84\x14\x07\xd0\x69\x2a\xc4\xb5\x2c\x62\xa9\x20\xea\x1b\x1e\xb1\x51\xf7\x52\x1d\x83\x18\x36\x88\x4d\xa6\x0d\x3a\x17\x6c\xd8\x9e\x6d\xe0\x37\x8d\xb0\xfd\xd5\x45\x95\xdb\xc0\x37\x3a\x2a\xda\x0a\x9e\xde\x11\x0d\x95\x78\x55\x03\xed\x59\xc3\x56\x15\x6c\x96\x18\x30\xc3\xba\xa5\x10\x0b\xa8\xc8\x52\x71\xfa\x11\x00\xd7\x07\x3d\x1f\xfe\xe5\x54\xa2\x01\xac\x86\x6b\xad\x51\xa7\x35\x43\x54\xdb\x89\x67\x5a\x27\x16\x41\x89\xcf\xc2\xc5\x41\x2c\x68\xcf\xc5\x13\x3d\xd3\xb0\x51\xb1\x47\x8b\x83\x61\xfb\x20\xa0\xeb\x02\xfb\x64\x3a\x2d\x51\xd1\x02\xe0\x69\xfa\x14\xd6\x2a\xd1\x5c\x87\xa8\x1a\x7a\x27\xa9\xaa\x43\x2c\xdb\xf6\x0d\xe2\x32\xcd\xd5\xce\xa9\x88\xa8\x86\x4e\x74\xd3\x99\xc3\x3a\x04\x44\xab\xaa\x49\x54\xd5\x80\x9f\x44\xd5\x6c\xa2\x3a\x26\xb6\xa6\x5a\x3a\x51\x41\x4d\xf6\xd0\x70\xa1\x79\xec\x95\x66\xd9\x44\x73\x6d\x62\x18\x06\x31\x74\x87\x98\x9e\x43\x0c\x62\x58\xc0\x9c\x88\x65\x18\xc4\x83\xcf\x13\x16\x13\xaa\xab\x30\x2c\xd3\x46\x82\xd5\x61\xad\x59\x18\x6c\x0b\x1a\x9e\x05\x48\x73\x51\x29\xe1\x31\xa2\x16\x0c\xd8\x70\xf0\x5b\x08\xba\x89\x09\x8b\xd1\x01\xa9\x16\x35\x1b\xd5\x50\x88\x6e\xdb\xc4\x83\x11\xba\x9a\x4e\x34\x4d\x87\x27\x44\x73\x35\x85\x58\x48\x7b\x8e\x42\x5c\x15\x90\x65\xeb\xe8\xef\xa0\x17\x9c\x4a\xd5\x1c\x85\x98\x68\xa3\x6a\x21\xd2\x40\x23\x8a\xe7\xd8\x53\x20\x35\x80\xd0\x31\x88\xa5\xa3\xb2\x66\x6a\xc4\x33\xe1\x9b\x6d\xbb\xa1\xa2\x11\x57\x03\xe1\x5a\x75\x5f\x83\x4c\x66\x0b\x1a\x48\xdf\xc8\xc6\x55\xe2\xd8\x36\xfb\x62\x98\xc8\x13\x74\x07\x8a\x28\x40\xf0\x40\xef\x0a\xa3\x77\x5c\x30\x0a\x5f\x30\x3a\x10\x9b\xa6\xd9\xc4\x02\x7c\xc0\x17\x17\xa8\xe6\x66\x01\x34\xae\x0b\x06\x71\x4c\x2b\x54\x2c\x14\x4d\x89\x63\x32\xef\x5c\x93\xe8\xba\x13\xba\xc4\xc1\x63\x64\xd7\xc5\x40\x27\x9b\x40\x49\x7c\x88\xe1\xce\x02\xe0\x87\x78\x86\x73\x82\xdc\xcb\x0a\x89\xe7\x38\xc4\xd2\x5c\x34\x81\x78\xa6\x60\x12\xc3\xd6\x43\xd8\x02\xd0\xc4\xa7\xea\x96\xaf\x11\x55\x05\xd4\xa8\xb9\x87\x87\xc2\xc0\x39\x01\xc2\x42\x87\x1f\x47\x0b\x01\x95\x06\x0f\x18\xb4\x7d\x62\x59\x06\xfc\x2b\x69\xd2\x25\xaa\xee\x00\xa7\x06\xfd\xc6\x23\x9a\xea\x10\x5d\x37\x89\x61\xb9\xc4\x84\xef\xa6\x49\x34\xc7\x25\x36\x31\xd0\xf0\xaa\x5a\x1e\xb1\x40\xe7\xd1\x1c\x62\x68\x40\xed\x9a\x0d\x70\xc2\xe0\x2d\x58\xae\x9a\x9e\xea\xc4\x06\x76\xc0\x1e\x19\x0a\x3c\x03\x5e\xa3\x20\x35\xba\x40\x4e\x86\x61\x62\x5b\x2e\xbe\x24\xba\x05\x8b\xce\x35\x30\xec\x9a\x18\xa0\x86\xc2\x2b\x53\x75\x3a\x00\xf6\x14\x80\x78\xad\xc0\x1a\xd8\xe6\x64\x01\x42\xb9\x4d\x1c\x4b\xd0\x1c\xc1\x0e\x87\xbb\x5a\x84\x41\xf4\xf9\x80\x47\x65\xaa\x63\x32\xe9\xd4\x0a\x41\x2f\xc0\x70\x6b\xdd\x33\x7d\x83\xa8\xb8\xd6\xd5\x62\xad\x03\x1e\x88\xa7\xdb\x53\xc6\x53\x40\xff\xb0\x6d\x0d\xf0\x61\x60\x4d\x58\x5f\x0e\x28\x9f\x0e\xf1\x9c\x29\xb1\x4d\x07\x98\x2a\x61\xec\x47\x85\x05\x01\x2a\xb8\x8a\x9b\xa7\xeb\x02\x07\x53\x71\x51\xc1\x26\xa9\x61\xb7\x26\x82\xe0\x00\xfd\xe8\xae\x3e\x55\x88\x0d\x6b\x0e\xd7\x31\x5b\xa7\x0c\x04\x5c\xb0\xae\xc1\x20\x00\xce\x67\xa8\xc0\x8d\x75\x13\x1b\x0a\xf1\x29\x7c\x68\xaf\x0d\x62\x30\xdb\x19\xf2\x2d\xf8\xa2\x69\x8e\x80\xc7\xc6\x3a\x5b\x55\xae\x0b\x30\xc1\x7a\xb5\x0d\x1d\x46\x87\x7d\x84\x88\x09\xa5\x07\x13\xa8\xb6\x2a\x88\x0a\x86\x09\x01\x31\x01\x88\x60\xc8\x03\x3c\x10\xcf\x01\x54\xf8\x06\xd1\x54\xa0\x34\xad\x5c\x04\x1e\x68\xda\x86\x6a\xb1\xfe\x0d\x04\x1f\xfa\xc7\x95\x8c\x68\x40\x2c\x28\x0c\x0b\x04\x70\x6c\xeb\x68\x5d\x45\x43\x8b\x9b\xf7\x6f\xb8\x0c\x0d\xc8\x99\x3c\x44\x27\xd4\x46\x24\xe4\xbe\x1d\xda\x14\xea\x12\x1b\x17\x2f\xba\x2a\x5b\x4e\xde\x86\xc9\x66\x42\x07\x04\x7a\x38\x13\x3a\x8e\x0a\xdb\x5f\x28\x1e\x31\x0d\x47\x30\x89\x6b\x84\x0a\xee\xc3\xba\xe6\x33\x86\xc2\xd9\x0a\x1b\x8d\x6e\x38\x44\xc7\x06\x71\xe1\xdb\xc5\x30\x75\xd5\x23\x9a\x6d\x13\xd7\x35\xe1\x5f\xfe\x18\xb8\xb4\x86\xb3\xab\x7b\x28\x7b\x58\x28\x7b\xa8\xb8\xfd\xc2\x64\x82\xb4\xa2\x22\xbf\x55\xf5\x42\x30\x32\x54\x17\xb8\x3c\x71\x3d\x60\x46\x7c\xb1\xc1\x66\x0a\xfb\x25\xa6\x2a\xd0\xf9\x27\x7f\x67\xaa\x20\xca\x98\x6e\x08\xba\x2e\x80\xff\x4a\x23\x2a\xe2\x44\x2d\x4e\x1f\x5c\xdc\x4d\x34\x03\xb6\x15\x55\x43\x58\x2c\xa2\x21\x1c\x44\xf7\x5c\xb6\x20\x70\x4a\xbd\x16\x4c\x2a\xc2\x44\x1c\x0b\x0f\x98\x75\xd7\x81\x21\x10\x0b\x44\x0b\x78\x6c\xc2\x0c\xa0\xcd\xdd\xd6\x40\x3c\x83\xfd\xc5\xf3\x50\x62\xd0\x3d\x78\xef\xe2\x5f\x44\x81\x50\xa0\x20\xc7\x00\x10\x00\x5a\x16\x75\xd8\xb0\x74\x15\xb8\x95\x6a\x33\x24\x98\x96\x9d\x63\x03\x41\x06\xc1\x41\x83\x31\xa2\x90\x61\xc0\x72\x72\x55\x67\xe1\x12\xd5\xb2\x14\x87\x78\xa6\x89\x2b\x42\x43\x1a\xd7\x10\x0d\x96\xcb\xb8\x5b\x6e\x0d\xb3\x89\xa1\x5b\x82\xb5\x0d\x0d\x36\x52\x8c\xeb\xee\xc0\x83\x01\x1b\xa1\x06\xa0\x00\x24\x00\x48\x08\xb8\x07\x61\x68\x0a\x4a\x06\x6c\x4a\x2e\xd1\x3c\x18\xae\x07\x74\x03\x42\x9c\xe1\xfa\x0d\xe2\x11\xd8\xa1\x45\x8b\x7a\x04\xa0\x1e\x14\xa2\xa6\x15\xd4\xe5\x98\x83\xde\x75\x10\xf2\x18\xaa\x72\x4c\x11\xc7\xf2\xab\x74\x83\xf5\xbb\xc9\x46\x41\x46\x05\x54\x03\x10\x03\xe4\x53\xa2\xeb\x44\x37\x40\xa5\xb2\x88\x61\x99\xc4\xf1\x0c\xfc\xbb\x65\xe6\x3c\xa4\x1b\x77\xd7\xc4\xe9\xae\xc3\xe9\xde\x42\xd7\x6f\x7c\xb5\xcb\x22\x19\xc6\xfe\x2c\x88\xae\x86\xdb\x62\xb0\xc8\xf8\x2b\xec\x1a\x5d\x05\x35\xcf\xf3\x5e\xe0\x5b\xb1\x73\x3b\xc1\xcc\xd8\x13\x91\x25\x59\x5f\x25\x54\x09\xa6\x71\xa4\x70\x28\xc4\x1f\x7f\x98\xd1\xcb\x94\x6f\x28\x69\x96\xc4\x9f\x69\x53\x81\x66\x4f\x15\x6e\x12\x32\xf2\xe1\x45\x71\x44\x45\x21\x98\x4d\x44\x5f\xcc\xd5\x5d\x2b\xb4\x05\x63\xed\x86\x8a\x2d\x18\x8a\xad\x18\xa7\x2e\x33\xf5\xb0\x3e\x56\x29\x15\x10\xd0\xf1\x3c\xa1\x97\x13\xf1\x3f\xfc\x1d\xd0\x29\x17\x7e\x4a\xa1\x81\xfd\x6b\x2e\x93\xf8\x2a\xa1\x69\x5a\xd5\xf5\x31\x80\x63\x1a\xc6\x29\x9d\x1d\xd0\x7d\x48\x70\xe7\x8a\x76\x6a\xa3\x95\xce\xb1\xd9\x2e\x66\xc1\x7f\x1f\x1d\xc1\x00\x16\xed\x08\xf6\x5a\x3f\xb6\xdb\xce\xcf\x6a\xf3\xb8\x5e\x6f\x1e\xd7\x43\x91\x66\xf0\xab\x41\x5c\xc7\x16\x2c\xd0\x8b\x8e\x3d\x62\x3a\xe8\x78\xa6\x79\xa0\x71\x21\x0f\x37\x0c\x5d\xc1\xef\x37\xef\x40\x07\x10\xdc\x63\x97\x78\x08\x9f\x46\x1c\x54\xab\x3c\xd0\xb0\x60\x43\xc3\xbf\xf8\x54\x15\xd8\x57\xc3\x13\xf8\xbb\x01\x19\x8b\x10\x9f\xb9\xf3\xf3\x21\xf3\x40\xe9\x1a\x71\xdc\x13\x90\x6a\x05\x4b\x30\x04\x9b\xe8\x7a\x08\x92\x37\x48\xa5\xe6\x6b\xf4\x2f\x76\x89\x2d\x98\x82\x07\x22\x18\x48\x3f\x9d\xc8\x24\x3a\x1e\xfc\x73\xc5\xd1\x06\xf1\x50\x3f\xd1\x3c\xe2\xb8\x02\xec\xf3\xbc\x9f\x9b\x77\x2e\xf1\x84\x7b\xe0\xe7\xd8\x23\xb6\x7d\xa2\xab\xe8\x38\x6d\xb6\xe7\xaa\x87\x2c\x14\x9d\x58\x36\x9a\x5a\xf0\xb8\xde\x33\x14\x93\xa0\xf4\x6d\x9e\x00\x20\x20\x10\x0f\x70\x9b\x61\xc1\x48\x4b\x7a\xc0\x48\x8c\x41\x94\x3c\xd7\x88\x77\x0f\x54\x1d\x8a\xfa\xd1\x5b\xc5\x3e\xd5\xd4\xb9\x06\x4d\xe4\xcb\x41\x01\x69\xd0\xd8\xb1\x1c\x76\xa1\x14\xaf\xec\x51\x96\xfe\x2a\x2d\x4c\x80\x0f\x61\x29\xd7\x04\x6d\x6d\xcf\xf5\x53\xed\x58\xbb\x59\x98\x82\xca\x7f\xd4\xd2\x15\xe5\xb0\x84\xfe\xf5\x83\x83\x12\xda\x0a\xf2\xea\x6a\xff\x0b\x1a\xad\x0e\x45\x57\xa6\xa0\xa1\x73\x91\xa2\x1f\x9b\x2c\x21\x9e\x55\xff\xe9\xac\xf5\xb9\x66\x9f\xda\xc7\xbb\x23\x90\x16\x41\xb4\x4a\x1f\xe9\x69\x1e\x46\x17\x38\x6b\x45\x9f\x6b\xea\x00\xe6\x59\x1b\xca\xa1\x2d\xcf\x8e\xa0\x69\x6b\x04\x44\xd1\x8f\x9d\x9b\x85\xa5\x78\xff\xa4\xe3\xaf\x61\x68\x38\x78\x42\x12\xcd\x38\xb6\xd6\x2c\xe9\xc6\x30\x08\x1e\x2a\x73\xc8\xc1\x72\x5e\xe8\x82\xa6\xee\x43\x5e\x71\x42\x15\xcc\x7e\x1b\x47\x99\x7f\xb8\x31\xd9\x82\xa6\x36\x47\x94\xe6\x23\x29\x06\x50\x01\x5c\xd3\x85\xfd\x2a\x28\xf6\x7e\x15\x06\x61\x62\x4d\x93\x2c\x98\x1e\x10\x0f\x9a\x2e\xb8\x8d\x59\x4b\x0b\x98\x0a\xb8\x85\x1c\x6e\x58\x41\xfa\x5e\x68\x50\x85\xd6\x9e\xf9\x2d\x58\x58\x86\x8f\x9a\x71\xce\x15\x73\xcd\xf3\xa4\x32\x22\x37\x31\x01\xae\x39\x37\x07\xd0\x7a\x75\x6c\x07\x3f\xc3\x33\x04\xf4\xd1\x00\xb0\xf4\x39\x00\x89\xb1\x49\xdc\x15\xfb\xd4\xb9\x59\x28\x1a\xcb\x82\xfb\x08\x99\x2b\x22\xe6\x01\x78\xeb\x5c\x41\x5b\xa8\x8e\x71\x2c\x80\x09\x1b\xa3\x57\x87\x04\x70\x20\x48\x0f\xc7\x6c\xf7\x0e\x38\xea\x63\xb5\xdf\x42\x90\xff\x58\xd1\xd5\xc1\xa2\xbd\x35\x4f\xf0\x8e\x75\xd8\xcc\x9d\x53\x0f\xa5\xa7\xfc\x97\x79\xf3\x4e\x17\x34\x7b\x8e\x41\xc0\xc7\xcc\x83\x48\x15\xcc\xb5\x62\x87\x0a\xa8\x4d\x96\xb0\x33\xa9\x41\x42\x2f\x13\x9a\xce\x0f\x06\xab\x43\x6c\x4b\xb0\x89\x61\xbd\x72\x30\x9d\x2a\xfb\xe4\x36\x2a\x5d\x30\x8b\x98\x54\x87\x78\x1e\xc6\x87\xb2\x6f\x48\xeb\x8e\x80\x15\x3c\xc1\x9d\x1a\xc4\x01\xd5\xcd\x66\xc1\xc3\x96\x85\xae\x07\x0a\x90\x1c\x51\xdd\x57\x16\x14\xc2\x8f\xd2\x97\xd3\x9d\x2a\x06\x31\x60\x01\x81\xe2\x62\x7b\x8a\xad\xd8\x29\xfb\x22\xd8\x8a\x5d\x84\xfe\x13\xcd\x64\xc1\xa7\x78\xe4\xe3\xb8\x27\x9a\x01\xec\xc7\x39\x45\xcb\xb5\x61\x81\xc6\xb0\x33\x57\x50\xb2\xfa\xb6\xa3\xd3\x1e\xdb\x45\xb2\x8a\xc4\x1f\x7f\xb8\xaa\xd9\x57\x3a\xbc\x17\x7e\xfc\x81\xf1\x3a\x61\xfa\x75\x22\x6a\xba\x28\x4c\xaf\xd9\xdf\x04\x05\xfe\x21\x46\x1c\x13\x06\xd3\xdf\x8a\x35\xac\x15\x7d\xcb\x40\x6a\x06\x98\xfe\x9e\xfa\x8d\x65\x57\x05\xb6\x53\xea\x27\xd3\x79\x33\xed\x70\x35\xeb\x70\x2b\xe9\xb0\x00\xcf\xf6\x3d\xc2\x66\xfb\x10\x71\xbc\x50\x21\xba\xab\x10\xdd\x79\x65\x13\xd3\xd1\x04\xf6\xc9\xa9\xd8\xc0\x04\x24\xf9\x3f\x20\x3f\x15\xbf\x69\x06\xd0\x18\x53\x7f\x55\x4f\x01\x26\x6d\x12\x1d\x5d\xf4\x9d\x90\xe8\x0e\xd1\xdd\x35\xb4\x6d\x09\x26\xf1\xbc\x13\xe6\x64\xae\xd9\x21\x68\xff\x9e\x62\x31\xb9\xe7\xb5\x89\xe7\x6a\x9a\xa0\x0b\x2e\x46\x75\x40\xd3\x1f\xf1\x61\x91\xf8\x44\x13\xf2\x42\xf0\x00\x8b\xf1\xef\x5a\x2d\xe5\x44\x4a\xb3\x2c\x88\xae\x0e\x17\x40\xed\x61\x0a\x4e\x9d\x78\xee\x94\xa8\xa6\x42\x0c\xf4\x57\x24\x36\x66\xf0\x25\x9e\x8b\x86\x64\x53\x21\xaa\x81\x6e\xab\xfc\x69\xa8\x13\xf4\x2e\xb7\xad\x29\xd1\x3c\x85\x68\x16\x1e\xf3\x98\x3a\xd1\x74\xa8\x1c\x2a\xa0\x9f\x9b\xf6\x54\xc1\x07\xba\xae\xe0\x89\x3a\xb4\x81\xe7\xe9\xb0\x2c\x01\x53\x53\x85\x58\x3a\xba\x57\x10\x34\xb3\x1a\x18\x45\x8e\x3d\x60\x02\x0e\x9d\xd8\xd6\x2b\x62\xba\x6e\x99\xf3\x58\xd0\x4c\x01\x76\xe9\xa9\x42\x74\x0b\x1d\x48\x6c\xa2\xb9\x0a\x31\x3d\x62\xea\x58\x4b\x80\x5a\xec\x94\x0a\xa3\x6e\x31\xeb\x20\x36\x4c\x98\xd5\xdc\xf4\x14\xe8\x59\x37\x14\x9c\x54\xd3\x83\x66\xa0\x34\xc0\x25\xe4\x70\x1b\x08\xb6\x0a\x53\x4a\x34\x1d\x06\x05\x83\x16\x34\xd6\x38\xfa\xf4\xe3\x6b\xdb\xc2\x3f\x1e\xba\x3f\x18\x06\x51\x0d\x62\xdb\xec\x09\x74\x56\x56\xd1\x3c\xa2\x59\x0a\xd1\x81\x5b\x2a\x79\x93\xac\x3b\xf8\xa5\xeb\xc4\xf0\x88\xc1\x01\xe1\x50\x12\x4b\xc7\x4c\x0c\xaa\x0b\xcc\x33\x1f\x43\x31\x48\xe8\x4c\x37\x59\x93\x0c\x03\x73\x74\x3a\x41\x0b\x19\xba\x35\x40\x33\x80\x98\x1c\x9b\xec\xdc\x0a\x8f\x0a\x34\x47\x61\x49\xe5\x38\xc6\xf9\x94\x10\x1d\x68\x1d\xb1\x22\xe4\xd3\xc5\x67\x93\x4f\x26\x12\x01\xb4\x5b\x4c\x76\x4e\x0d\x98\xbd\x41\xb3\x08\xea\x47\x9e\x21\xa8\x20\xd8\xe0\x6a\x51\xf8\x49\x6a\x9a\xff\xc8\xa3\xd8\x05\x83\x05\xe9\x3b\x42\xfe\x30\xff\x91\xbf\xdd\x29\x7e\xa4\x99\x7f\xe8\x58\x33\xe6\xd9\xef\x9c\x68\x2e\xd1\x5c\x41\xd7\xf0\xac\xc6\x54\x1c\xa2\x1a\x27\xba\x2e\x78\x78\x28\xea\x20\xed\xdb\x1a\xbb\x29\xc0\x23\x9a\x27\xb8\xc4\x36\x04\xfe\xde\x22\x18\x0d\xe0\x18\x27\x16\xc6\x29\xec\x4e\xfa\x85\x03\x39\x78\x98\x59\x03\x5c\x7d\x28\xb8\x79\x7c\x83\x23\xd4\xb0\x60\xd4\xb0\x90\xcf\xb8\x19\x2a\x06\x71\xf0\x8c\xd2\x11\x34\x8c\x3f\x85\xbd\x5b\x57\x74\xe2\xba\x82\xc9\xb2\xe9\x70\x17\x06\x2d\x44\x9b\xa2\x49\x54\xf4\x4f\x70\xe1\x25\x94\x15\xb0\x2c\xbc\xd0\x59\x56\x57\x6b\x40\xfe\x9a\x74\x75\xa1\x3c\xc0\xc5\x05\x9a\x26\x78\x61\x35\xd4\xdb\x35\x04\xcd\x3c\xd6\xdc\x53\x50\x16\x30\xf3\x34\xbb\xd3\x80\x49\x3c\x27\xc0\xde\x35\x4c\xc3\xbf\x07\xc4\x87\x4d\x4a\x06\x52\xbc\x15\xe6\xc9\x7f\xca\x60\x73\xcd\x11\x34\xfb\xd8\x64\x80\xab\x73\x8f\x68\x4e\xc8\xf4\x11\x06\xb9\x31\x20\xb3\x60\xfa\xc5\x5f\x3e\x88\xe5\x81\xed\x74\x27\x06\x80\x5e\x64\xc1\x39\x66\x79\x24\x6c\x96\x23\xe7\xe6\x9d\x0e\x93\xa1\xc0\x6b\xc5\x5c\x1b\xc7\x9a\xba\xd6\xe7\x0e\x51\xb5\xb5\x71\x02\xaf\x86\x41\x7f\x78\x6b\x01\x46\x95\xa9\x98\xa6\x40\xd1\xd7\xf0\x75\xae\x18\x27\x9a\x05\x94\x60\x22\xb8\x73\x80\xde\x13\x8c\x13\x10\x2c\x3c\x6f\x6e\x9c\x6a\xe6\x5c\x3f\x65\xdf\x4f\xbc\xdd\xb2\xbc\x98\x05\x34\x51\x68\x94\xd1\x64\x99\x04\xe9\x37\x72\x85\x3d\x4e\x1d\x6b\x47\x88\x39\x75\x69\xc4\xb1\x4e\xdd\x50\x71\x14\x53\x71\x04\x73\xed\x86\x98\x65\x4b\x31\xd7\xb0\xe0\x31\xd8\x5a\x20\x96\xa3\xc1\x36\xaa\x11\xcd\x34\x4e\x3d\x82\x19\x5d\x1d\x4c\xe3\x6a\xad\x0d\xe2\x31\xe1\x80\xbd\x75\x89\x15\xda\x8a\x81\x2e\x37\x02\xfc\x59\x1b\xc4\xd5\x35\x96\xec\x2c\xc4\x5c\xb3\x6a\xa8\x78\x82\xa5\x78\x8a\x75\xea\x84\x28\x52\x81\x64\xa6\x5b\x78\x37\x87\xba\x06\xb6\x83\x5e\xf5\x27\x9e\x00\x44\x63\x86\x20\x42\x38\x7c\x23\x72\xb0\x75\xc7\x5a\xa3\xf3\x88\xc2\xfa\x50\x58\x8f\x6b\xf4\x28\x41\x36\xe3\xdc\xe4\x47\x9e\x2f\x7e\xfc\x01\x78\xaf\x9f\xfc\x57\xe2\xcf\x02\x1a\x65\xc2\x57\x6d\x22\x5a\xea\x7f\x8a\xc2\xb5\x36\x11\xe1\xef\x57\x3d\x7f\xa0\x4f\x44\x4d\x85\x6f\x50\xf7\x42\xfc\xf1\x87\x34\x8b\x97\x02\x7c\x28\x53\x98\xc6\x89\xf8\x1f\xbf\xfc\xf2\x8b\xc8\x9e\xc4\x4b\x7f\x1a\x64\xd7\x13\x91\xe8\x96\x28\xc4\x97\x97\x29\xcd\xb0\xc1\x17\x43\xeb\x55\xaa\x61\xb7\x40\x24\x75\x60\x8b\x33\xd9\x01\xda\xc6\xc2\x4f\x3f\x23\xe0\xd3\x9c\x02\xff\xe3\xf2\xf2\x52\xec\x3c\x95\x85\x9e\xa0\x3c\x7b\xd9\xe5\x8e\xdd\xae\x80\x74\xc3\x8a\xae\x92\x70\xf4\x1f\x17\x92\x28\xd4\xc6\x02\x0d\xf2\x77\x53\xa9\x38\x6b\xae\xcd\xfa\x4d\x43\x67\x60\x8b\x21\xfe\xd6\x14\x1f\xdf\xb4\x0a\xb6\x12\xa6\x7e\x62\x09\x6e\xb9\x2a\xf8\x52\xb9\x59\x10\x15\x64\xfb\x13\xcd\x15\x5c\x62\xad\x9d\x13\x4d\x67\x4f\x30\x20\xd5\x22\xd6\x5a\x29\x9e\x59\x7f\xd2\xe2\x93\xa0\xc5\x2c\xf1\x0f\x68\x62\xb1\x05\x07\xa5\x8a\x66\x02\x72\xb7\x95\x80\x9c\x95\x9b\xbb\xa7\xce\xcd\xc2\x50\xb4\x63\xeb\xd4\x9c\xff\xff\xec\xfd\xf9\x72\x1b\xb9\x9a\x20\x8a\xff\x3f\x4f\x81\x5f\x76\xcc\x9c\x73\xa2\x98\xb4\x48\x4a\x96\x54\x33\xbf\x39\x61\x4b\x76\xd9\x75\xbc\x1d\x4b\x76\x75\x95\xcb\xd1\x01\x66\x82\x24\xac\x24\x90\x05\x20\x45\xd1\x7d\x3b\xa2\xdf\x61\xde\xe1\x3e\xc4\xfd\xf3\x3e\x4a\x3f\xc9\x0d\x2c\xb9\x23\x37\x32\x49\xca\x2e\x55\x77\x1c\x8b\xb9\x20\x81\x0f\x1f\xbe\x7d\x99\x0c\x4f\x82\x91\x3b\x5a\x9c\x04\x23\x30\x7a\x31\x3a\xbf\x1d\x7f\x5d\xba\x8a\x5c\x8f\xce\xce\x3e\x9e\x2e\x46\xb7\xa3\x23\xf9\xe7\xc2\x1d\xa9\x5a\xba\x85\x4b\x0d\x2c\x48\x44\xa4\x37\xbb\xd7\x04\x8c\x4e\x6f\xc7\x0b\xe5\x28\x9c\x7c\x7d\x3d\x01\x27\xca\xa1\xf5\xf1\xe4\xc5\xe4\xeb\x72\x74\x04\x94\x0b\x71\x71\xa6\xec\xb0\x67\x26\xd3\xeb\xf1\x62\xfc\xf5\xf5\x29\x38\xbf\x1d\xbf\x98\x28\x6b\xed\x78\x31\xfe\x78\xfe\xe2\xf4\xeb\x72\x74\x0c\x94\x9c\x60\xdc\x62\x52\xdb\x76\x25\x7b\x3d\x5d\x1c\x7f\x3c\x51\x65\xaa\xd4\xfb\x8d\x3c\x36\x22\x33\x1a\xf4\x5c\x3c\x48\x95\xd5\x1d\xa9\x52\xbb\x4a\x76\x1c\x1f\xe9\x42\xe4\x4a\x8e\x54\x32\xd9\x38\x57\xd3\x58\x95\x01\x74\x8f\xb5\x85\xe1\xe4\xfc\xeb\xf2\x5c\x6a\xb5\xa3\xc9\x70\x74\x66\x64\xb8\x63\x95\xb3\x3c\x54\xb5\xe5\xcf\x26\x92\xc2\xe8\x0a\xe1\xa6\xc4\xf9\x51\x20\xdf\x53\x23\xb4\x5d\x70\xbf\xf5\x84\xc6\xe0\x64\x78\x36\x31\x93\x3d\xcf\xaf\x6d\xa2\x27\x7b\xaa\xcb\x0f\x9f\x4d\x80\xee\x19\x30\x3c\x9b\x68\xef\xff\x70\x72\x6c\x44\xec\x13\x5d\x24\x39\xae\x8d\xae\x44\xa9\x78\x5d\xb1\x30\xab\xbb\x11\x9c\x0d\x9b\x83\x72\xa3\xb0\xcf\xea\x67\x52\xe2\x58\xa8\x92\x46\xb7\xee\xe3\x85\xd4\xa8\xe4\xff\x81\x53\xb9\x86\xfe\xaa\x9f\x39\x11\x97\x5c\x8e\xcd\x21\xc1\x5f\x61\xbf\x75\x39\xc7\xe0\xf4\xa3\xca\xe1\x3b\x5b\x8c\x8f\x3e\x9e\xbe\x18\xa9\x72\x98\xa3\xf3\x17\xc7\xd9\xd6\x76\xc5\x5f\x1f\xcf\xb3\x3f\x4e\xf4\x0f\x89\x8e\x2f\xce\x72\x0f\x16\x7e\x65\x5f\x3b\x8b\x5f\x93\x87\x3c\x3e\xdc\x71\x2e\x67\xfa\xe7\xc7\xf3\xc5\x99\x8e\x00\x19\xbb\x67\x2a\xcd\x73\x61\x9a\x14\x82\xe3\xcc\xcf\x56\x10\xec\xd9\x45\x32\x06\xa3\xb1\xa7\x13\x3e\x55\x2d\xda\xd3\x73\x95\x48\x9b\xc9\xd7\xcc\xe4\x81\x26\xd9\xb5\xe0\xd8\x38\x09\xc7\xc3\xc7\xa7\xe0\xc8\x55\xa1\xbe\xc7\xee\x19\x38\x56\xf1\x11\xb7\xae\x4e\x04\x7d\xfc\xd8\x3d\x19\x4e\x26\xee\xb1\x7b\xd6\xa2\x7e\xb9\x5a\xde\x2e\xdc\x2d\x13\xd5\xdd\xa1\xb3\x77\xa5\xe8\xa1\x51\xfe\x61\x5d\x00\x54\x65\xb5\x4f\x8e\xc1\xc4\x9d\x80\x09\x77\x27\xae\xae\xc2\xeb\xea\x6a\xbd\xba\x1c\x6f\xa6\x74\xaf\xe2\x5b\x2a\x5f\x19\x1c\xab\xe0\x23\x29\xab\x8f\xb8\x4a\xe7\x50\x2a\xc2\xe8\x76\xf4\xe2\xf1\x6d\x33\xd3\xca\xc1\xe8\x9b\xea\x82\x01\x4e\xef\x01\xe0\x04\x82\xcb\x5e\xab\xce\x03\x15\x08\x36\x39\x53\xe5\x54\x8e\xcf\x55\x21\x02\xfd\xd7\x78\x78\x72\x35\x3a\x1d\x9e\x9d\x01\x55\xad\xe5\x04\x9c\x16\x1a\xc4\x1d\x81\x13\x55\xd1\x37\xa9\xf4\x3c\x1e\x9e\x9f\x6b\xe0\xa8\xbf\x26\x57\xa3\x23\x79\xe3\x04\x9c\x83\x93\x8b\x53\x79\x5d\xaa\x93\x8f\xe5\x1f\x8f\xc1\x19\x8f\x41\x24\x81\x74\x3a\x3c\x01\x13\xb9\x53\x2a\x4d\xe1\x64\x78\x32\x3c\x1f\xcb\x7f\xc0\x58\x6a\xb6\xa3\xf3\xc5\x68\xa4\xf5\x42\xb5\x31\x67\x2a\x9d\xf2\xd4\x95\x37\xe5\x53\xea\x0f\x5d\x5d\x58\x1e\xe8\x89\x1c\xe3\x54\x1b\x52\x95\xc1\x52\x0e\x70\x9a\xbc\x3f\x3c\x53\x47\x7a\xac\x27\x3a\x39\x75\x27\xc3\xe3\xd3\x8b\xd1\x91\x72\x2b\x0c\x47\xe0\x5c\x55\x70\x50\xac\xb0\xd9\x0c\x70\x8b\x39\x9e\xe2\x00\x8b\xb5\xbb\xc0\x7e\xaf\x5c\xfb\xd4\x1b\x0f\x4f\x25\x5c\x75\x9a\x82\xea\xed\x73\x04\x94\x59\x7b\x34\x31\xb5\x7e\x54\x71\x80\xb3\x49\x30\x1e\xaa\x5a\x0e\xe7\x72\x33\x4f\x54\x79\x99\xc7\xaa\xda\xba\xaa\x1f\x38\x19\x1e\x4f\xdc\x63\x5d\x58\xfc\x54\xfe\x35\x39\x77\x1f\xbb\xa7\xc3\x13\x77\x34\xd2\xff\xa8\xa4\xc6\xf1\xf0\xf4\x58\xaa\xe1\x93\xe1\xf9\xd9\xf0\x34\x18\x0f\x47\x8f\x55\x3a\x90\x04\xcd\xa9\x94\x6a\x94\xf3\x6e\x38\x39\x31\x55\x5a\xbe\xbe\x1e\x83\xe3\xe1\x58\x3e\x39\xd6\xd1\xee\xc3\xe3\xc7\xc3\xe3\xc7\x4f\x46\xa3\xe1\xd9\xd1\x31\x30\xff\x1c\x25\x7e\x43\x4f\x7e\x1e\xa8\x3a\x2f\x8f\xa5\xc8\x01\x54\x96\xb3\x4e\x69\xd5\x9e\x9c\x89\x3b\x9c\x18\x9b\xe4\xd9\x71\xa0\x6c\xe7\x3a\x86\x54\x35\x19\x1b\x8f\x74\x47\x4a\x30\x19\x8e\x4f\x81\xae\x2b\x37\x3e\xfd\xfa\x5a\x75\x73\x3a\x1f\x9e\x05\xa3\xa1\x49\x90\xf5\x74\xf2\xe2\xc8\x1d\x1e\x9d\xc9\xc5\xcb\x7f\x1e\x9f\x98\xc4\x13\x90\x22\x1e\x18\xaa\x2c\x34\x55\xfb\xe3\x68\xa2\x3d\x06\xf9\x61\x1e\x9f\x4a\x5c\x91\x42\xcf\xf0\x44\xa5\xed\xe8\x7f\xe4\xbe\xb8\x27\x49\xd0\xa6\xca\xb0\x3b\x1f\xaa\x12\x4f\x13\xf3\xe0\xd7\xe5\xb1\xca\x35\x38\x3d\x0b\x26\xc3\x91\x29\xee\x7e\x34\x76\x87\x23\x1d\xfd\x6a\x08\x89\x24\x1d\xee\x24\x70\x87\xca\x64\xd5\x05\xdf\xf8\x82\xae\xfa\xc4\xb7\xe3\xe1\xc9\xc5\x29\x30\x75\xfa\xa5\x60\xf8\x78\x54\xb7\x6d\xfc\x7c\x38\x3e\x55\xd9\xa3\x40\xa3\x91\x57\x81\x5e\xc6\xe4\xe3\x95\xc1\xc6\xf5\x1f\x40\x37\x8d\x89\x91\xdc\xd5\x7f\xb8\xaa\x4a\xe0\x91\xab\x54\x2d\x49\x5f\x32\x24\x36\x43\x3b\xc0\x24\xa1\xc7\x19\x78\x36\xc1\x71\x05\x19\xe9\x94\x16\xd0\x39\xda\x73\x32\x3c\x3a\x07\x47\x12\x11\x55\xfe\xe5\x48\x39\xf1\x46\xf2\xea\xab\xe1\xd1\x18\x3c\x1e\xaa\x52\x30\xe3\xe1\xd1\x89\x42\xbd\xd1\x44\xff\x73\x7e\x3b\x3c\x53\x99\x21\x47\x27\xc3\xa3\xe3\xe1\xd1\xb9\xfe\xff\xc5\x63\x79\x79\xa8\x93\xc1\x54\xca\xdc\xb1\xfe\xe7\xfc\xd6\x55\x2f\xb8\x7a\x20\x55\xcc\x4a\x3b\x05\x47\xe7\xaf\x8e\x87\x47\xa3\xe1\xd1\xf9\x13\x55\xe0\x6a\x74\x1c\x0b\x0f\x13\x49\xd4\x8f\x16\xf2\x45\xa9\xea\x4d\x16\x23\xa9\xc2\x7d\x54\x22\xbf\xfc\x31\x7a\x31\xf9\xf8\x38\xe3\xdc\xfc\x0f\x5b\x43\x71\x81\x96\x61\x00\x05\xe2\x8f\x60\x10\x50\x4f\xc9\xc3\x3b\xed\x30\x7e\x0b\x19\x10\xa6\x41\xfb\x8b\xeb\xd7\xaf\x9e\x42\xc6\x87\xf1\x2c\xfe\xfa\xef\xd8\xff\xd1\x79\x76\x2c\x16\x77\x2f\xdf\xfe\xd3\x19\x4c\x75\x4b\x84\x7f\x77\xf8\x7a\x39\xa5\x01\x77\x7e\xfc\xf4\x59\xb9\x71\x04\x5a\x22\x22\xe4\xef\x4f\xc7\x03\x27\x84\x73\xe4\x06\x70\x4d\x23\xe1\x0c\x48\x14\x04\xfa\x7f\xfe\xbd\xf0\xe4\xd1\xc0\x01\xc0\xf9\x3c\xf8\x34\x1a\x7c\x1a\x8f\x06\x8e\x94\x5b\x90\x90\x2b\x84\x01\x47\x9f\x07\xf2\x81\xdf\x7f\x27\xce\xe7\xcf\x72\x48\x06\x97\x48\x20\xa6\xbe\xf9\x1f\x6a\x40\x79\x7d\x01\xf9\xb3\x5b\x18\x38\x3f\xaa\x77\xfe\xe3\x2f\x83\x25\x12\xf0\xc7\x7f\x5f\xaa\xa5\xbf\x81\x4b\xf4\x63\x03\x6c\x87\x8b\x29\x77\xf2\x9d\xde\x45\xeb\x8d\xc9\xfc\x7d\xe0\x3d\xf2\xa7\xf4\x37\xef\xf1\x8b\xa0\xdd\x1e\xb5\x00\xf8\xd6\x80\xcd\xfc\xdd\x17\x8c\x1f\x61\xe2\xa3\xbb\x03\x43\xfa\xd4\x9b\x3f\xbf\x38\x9b\x5d\x59\x21\xed\x08\x67\xe0\x30\xba\x72\x06\xc9\x5f\x56\xe0\x9f\x9a\x43\x22\xb0\x90\x73\xfa\xe4\x3c\x49\x16\x09\x9c\xc1\xa7\xf1\x64\xf0\xc9\x59\x52\x1f\x05\xce\xc0\x21\x70\x89\x9c\xcf\x9f\x3f\x6b\x9c\x2f\xed\xd5\xe0\xd3\xe9\xc0\xe1\x48\x77\xb4\x90\x87\x69\x34\x70\x54\x44\x8b\x93\xbb\x7c\x9e\x7b\xe5\x78\xe0\xe0\x99\x33\xf8\xa4\xbf\x84\x18\xa3\x2c\xf9\x84\xfd\x9c\xea\x93\x7a\x3a\x70\x7c\x7c\x5b\xfc\x0c\xa1\x02\xcf\xb0\x99\x3e\xe6\xae\x0f\xc9\x1c\xb1\xfc\x57\x01\xa8\x1f\xc3\xa3\x41\xb4\x24\xdc\xf6\x52\xf3\x6b\xf6\xb7\x92\xf7\x16\x93\xe2\x6b\x0a\xee\x72\xaa\xc7\xf1\xab\xa3\x41\x16\x16\xe6\x09\x79\x12\x62\x78\x8f\x8e\xaa\x3f\x10\x56\x8d\xe2\x23\xee\x31\x1c\xea\x4d\xa8\x1d\xcb\xa9\xbe\x5c\xb7\x72\xb9\x06\x4f\xf9\xcb\x90\x2f\xff\x5e\x62\x82\x97\xd1\xb2\x01\x20\xd3\x48\x88\x32\xb6\xe8\xab\xf9\x0d\x1c\x8d\x07\x0e\x25\x5e\x80\xbd\x1b\x47\xe3\xad\xe9\x9d\x22\x71\x67\x3c\x38\x1a\x7c\xfa\xfc\xd9\xac\x99\x92\x4b\xcc\x97\x98\xf3\x14\x59\xd3\x59\xbc\xbd\x81\xeb\x9a\x25\x96\x2e\x5b\x2e\x16\x2e\x55\xb3\x85\xf4\xa5\x78\xff\x47\xf6\xfd\x5f\x61\xb1\x70\x17\x08\xfa\x8c\x52\x0b\xc8\xb2\x67\x32\xb3\xb7\x85\x73\x59\x38\x90\x19\x28\xf3\x10\x92\x18\x86\xe6\xc3\x9f\xc6\x67\x83\x4f\xce\x34\x5a\x86\x88\x29\x07\x3e\x10\x70\x5e\x3a\xf1\xf2\xf8\x45\xfc\x42\xbd\xf2\x59\xfe\x97\x47\xae\xf8\x31\x2f\xc0\x88\x88\x2b\xf5\x70\x0d\x76\x15\x67\x93\x05\x03\x9c\xcb\xed\x5e\xd0\x20\xa0\x2b\xf9\x17\x5f\xc2\x20\x00\x84\xba\x02\xdd\x09\x57\x30\x48\xf8\x8c\x32\x2b\x3a\xd9\x40\x82\x7d\x3b\x40\xd2\xa7\x4f\x4d\x27\x17\x83\x81\x9a\xe0\x7c\xfa\x24\xd7\x12\x4e\x29\x64\xfe\x35\xba\x93\x1c\xe9\x93\x65\xe0\xcf\x95\xc0\xce\xa1\x45\x91\xba\x25\x63\xf0\xf7\x11\x91\xe2\x69\x23\xa5\xcb\x4d\x57\xac\xa8\xcb\x05\x0a\x4b\x53\xc6\x7e\x80\xd4\x6c\xe3\x2e\xa4\xf1\x0f\x4a\x66\x98\x2d\xf3\xbf\x14\x1a\xbd\x46\x9c\xc3\x39\x72\x06\x0e\x5c\x41\x2c\x30\x99\x5f\x64\xee\x4a\x72\x11\xe7\x21\xca\x43\x67\xee\xc9\xa9\x38\x57\x82\x86\xce\xc0\xb9\x50\xdf\x71\x06\xce\xaf\x88\x0f\x80\xb9\xf8\x84\x21\xb0\xa6\x11\xe0\x11\x43\x7f\x07\xd7\x0b\xcc\xc1\x0a\x07\x01\x60\x88\x7b\x0b\x24\x99\x1e\x10\x0b\x04\x52\x36\x0a\x28\x01\x10\xf8\x78\x36\x43\x52\x88\x07\x1a\x8f\x86\x31\x16\x72\x41\xc3\x27\x19\xb9\x26\x07\x38\x0d\x13\x49\xdb\x3e\xb5\x7b\x5a\x3e\xc3\x10\x17\x90\x89\xca\xc7\x62\xd6\xa6\xf9\x22\x62\x0a\xe5\x2a\x3e\x90\xd2\x96\x66\x4c\xbb\x17\x5b\xf7\x5e\x2f\xbe\xb4\x7b\xe9\xf5\x9a\x0d\x94\x4f\x14\x77\x0f\x13\x37\x0c\xa0\x87\x92\x0d\x6b\x02\xef\xfe\xf7\xac\xfc\x72\xcd\xb6\x35\x10\xf2\xd2\x09\xcf\x52\x76\x0b\x5f\x9c\xd2\x3b\xe4\xbb\x46\xf2\x49\x68\x5a\x99\x82\xb5\x1c\xc1\x9d\x52\x7f\x0d\x30\x09\x30\x41\xae\x92\x2c\xb1\xd6\xc9\xaa\xa5\x1b\x1b\xa5\x0d\xe0\x14\x65\x27\x91\xe1\x2d\x97\x48\x40\x1c\xf0\x4a\x36\x58\x31\x62\x08\x31\x03\x5f\xe8\xd4\x55\x9e\x7b\x33\x72\x15\x9d\x47\x39\x1a\xfe\x33\x9d\xd6\xf0\xe2\xe3\x81\x23\x87\x74\x05\x95\x82\xe9\x17\x3a\xe5\xc3\x2f\x74\x5a\xe4\x51\xf2\x52\x8c\x5a\x7f\x44\x88\xad\x5d\xb5\x85\x3c\x3d\x64\x5f\xe8\x54\xea\x09\x3c\x84\x1e\x2a\x53\x74\x35\xa4\xe2\xa1\xfa\x81\x94\xc6\x57\xd0\xe6\x22\xaf\x49\x07\x48\x79\x4e\xb3\x44\x50\x2b\x70\xd4\x41\x9a\x50\x1f\x6d\x00\xea\x0b\x45\x5b\x5b\x43\x5b\x93\x62\x3e\xd4\xff\x96\x34\x01\xea\xa3\x6a\xe6\x55\x92\x4f\xe4\xd3\x03\x87\x2f\x28\x13\x2f\xfd\x1e\x80\x54\xba\xb4\xc5\xc1\xdc\xfc\x3c\x4a\x79\x2d\x15\x5a\x6c\xc7\xf0\x3d\xe2\x34\x62\x1e\x02\x1f\x04\x0e\x8c\x4f\xb1\x6a\x09\xdd\xe8\x40\x93\x22\xb5\x89\xa8\xb1\xb1\x52\xb4\xb9\x5a\x94\x63\x92\x21\xc3\x4b\xc8\xd6\xee\x12\x09\x86\xbd\xf4\xf8\x32\x03\x45\x67\xe0\x98\x5b\x85\x33\x2c\x11\xc9\x0b\x23\xa7\x8a\x11\xd7\x68\x35\xf7\x61\xea\x4b\xb4\xa4\x6c\xbd\xc9\xec\xdb\x28\x22\x1b\x6d\x37\x5a\x86\x42\xae\x46\x8b\x1a\x5d\x75\xda\xdc\xdb\xea\x98\x28\x2f\xa0\x95\xe7\x60\x4e\x7e\xff\x8b\x00\x2c\xc6\xd2\x16\xea\x6d\xf5\xa7\x0a\x27\xe3\x2d\x09\xd6\xf1\xc8\x19\xb9\x85\x83\x48\x1d\x47\x04\xe2\xed\xe1\xc3\xcd\x01\x1c\xcb\x06\xf7\x89\x2a\xd9\x76\xec\x1a\xf2\x1b\xde\x9a\xf8\x94\x14\xc5\xb2\x24\x62\xb4\xf0\x0c\xd1\xe1\x94\x09\xe4\x4b\x35\x10\x29\x49\x03\x91\xb9\x58\x28\x98\x61\xee\xce\xa2\x20\x70\xa7\x01\x42\x72\x76\x89\x00\x56\x4b\xc4\xaa\xc6\xab\x20\x64\x8a\x81\x71\xe1\x0a\x29\xfe\xa6\x67\x30\x39\x81\x72\xb8\xd8\x16\x67\x7e\x5e\x22\xee\x21\xa2\x4a\xf7\xc4\x0b\xfe\x6c\xfd\x7a\x22\x8d\xe6\x06\xc9\x5d\xcd\x8c\x65\x96\xcc\x05\xc3\x21\x52\x0c\xcf\x32\x57\x8f\x2e\x43\x4a\x34\x73\xfd\x34\x1e\x0f\xe4\x38\x7a\xf3\x5a\x50\xea\xcc\x96\x49\x90\xe4\x11\x02\x73\x97\xa8\x38\xf7\xc4\x18\x64\x3b\x52\x09\xd7\xb7\x4d\x44\x2e\xc8\x9d\x6a\xa2\xf4\xe9\x93\x13\x32\xaa\x8e\x5e\x22\xe5\x58\xa6\xf6\xc6\xdc\x6a\xc3\xd3\x37\xfe\xbe\xfa\x6a\xc5\x04\xae\xe2\x7b\xdd\x66\x90\x80\xd0\xa0\xe2\x2b\xc8\x05\x78\x76\x5b\x2d\x2c\x6d\x38\x75\x74\xab\x04\xaa\x00\x72\x61\xcc\xc3\x02\x57\x02\xf3\x1a\x6f\x02\xcc\xe2\x52\x9e\xf8\x3e\x43\x9c\x23\xbb\x48\x5f\xfd\xde\xc5\xbb\x0f\x1d\xdf\x78\x6d\x78\x58\x6b\xc3\x58\x05\xf0\x34\x05\xef\x70\x00\x62\x05\x1b\xf2\x1b\x57\x99\xbb\xe3\x63\x2f\xaf\x68\x15\x58\x99\x0c\x3f\xeb\x6f\x1c\x67\x39\x6f\x95\x15\x51\xbd\x7b\x11\x5b\x1a\xb3\x2f\x0d\x1c\x98\xd5\x24\x07\xc5\x21\x3b\xa8\x96\xc7\x19\xdf\x51\xee\xc6\xa4\xea\xc6\x3d\x65\xe6\x6f\xa8\xe6\x2d\xfd\xf2\xee\x27\x19\x76\xad\x6c\x10\x84\x0a\xb0\x80\xb7\x08\xc8\xcd\xe1\x20\x22\x02\x07\x40\x2c\xd0\x1a\x40\x86\x00\x26\x00\x26\xac\x5e\xc1\x68\x5f\x2c\xbd\x5a\xf6\x5e\x40\xfe\x3e\xb1\x7c\x29\x82\xc2\xb7\x70\x6d\x34\x88\x07\x7d\xaa\x2d\x4a\x71\x89\x2d\x76\x7a\xe2\xad\x54\xd6\x0d\x34\x17\xcb\x51\x4e\xad\x85\xae\x22\x99\xae\x24\x93\x0a\xe7\x92\xb3\x9d\x3d\x84\x45\x79\xba\xd6\x1a\xb7\xa5\x1d\xbf\x7a\xaf\x57\x90\xbf\x63\x48\x62\x34\x6a\x66\xe0\x2d\xc1\x25\x37\xc9\xc4\x31\x6c\xbb\xdf\x99\xf7\x93\x69\x82\xa7\x76\x3f\x48\x5f\x6a\xe8\xa9\x72\xc7\x25\x90\x0a\xcd\x77\x59\xd6\x29\xd3\x4c\xe5\xb7\x24\x6b\xbd\x69\x29\x60\x4e\xf5\xcd\x7a\xa6\xd8\x8d\xc8\x29\x0b\x6b\xc6\xa0\xba\x80\x1c\x4c\x11\x22\x2a\xeb\x23\x44\x3e\x80\xc4\x07\x73\xc8\xa6\x70\x8e\x80\x47\x83\x00\x79\x02\xf9\x55\x94\x6d\x6b\x7d\xb0\x0f\x63\x66\xc7\x91\xba\x18\x35\x0b\x43\x57\x19\xc8\xea\x5e\x6d\xf6\x88\x65\xbd\x60\x29\xca\x56\x7a\xc2\xec\x1f\xc9\xfb\xa4\xb2\xc3\x54\x79\xca\xaa\x27\x5b\x81\x6f\x2d\x6e\xf6\x06\xa3\x0a\xa3\xa2\x6d\x7d\x45\x57\x64\xe5\x04\x6d\x36\xc7\x6c\x30\x4c\x2e\x9e\xa5\x82\x80\x54\x1a\x1e\x73\x1b\xb7\x99\xd5\xb1\x0f\x28\xf7\x6e\x14\xaf\x06\x5d\xd1\x38\x9e\x85\xc0\xa6\x06\xf2\xe2\x18\x1b\x19\xc9\xed\x83\x1c\x6c\x37\x42\x86\x29\xc3\x62\xdd\x6d\x47\xde\x65\xde\x6a\xd8\x96\xcc\x80\x55\x67\x44\x83\x21\x9d\x49\x8b\xd3\xb2\xd5\xba\x77\xe1\x30\xa8\xc6\x44\xbb\xe3\x20\x47\x23\x5a\x39\x0f\x4a\x6f\x1c\xf4\x28\x77\x03\xdd\x7b\xc4\x11\xbb\x45\x3e\xa8\x57\xa4\x3b\xe0\x4c\x62\xa9\x74\x62\x53\x77\x96\x75\x80\xd7\x2f\xbe\xee\x9c\x57\x74\x5c\xba\xd5\x22\xd0\xc3\xea\x13\x6b\x79\x1e\x00\xf8\xe9\xa6\x00\xd8\x46\x9a\x4a\x35\xc5\x5d\x28\x18\xa7\x03\x07\x12\xbf\xa4\x6b\xc4\x90\xf1\x9f\x64\x03\x73\x1d\xcc\x9f\x47\xc1\x0c\x07\x81\xb6\x38\xb6\x7a\xa7\x60\x52\xbd\x1f\xca\xa9\x55\x59\xc9\xce\x7b\x27\x5a\x4b\xad\xe9\xb8\x60\x1a\xae\x85\xaa\xdc\xe4\xac\xb3\x01\x73\x17\x73\x1a\x40\xd1\xda\x12\x3c\x3a\x88\x25\xb8\x68\xd2\x7b\x79\xd9\xac\xee\xe4\x5e\xb8\x86\xfc\x06\xfc\xc4\x68\x14\x76\x7c\xf1\x82\x21\x0d\x9d\x6e\x26\x47\xea\xe3\x19\xee\xfc\x5a\x2c\x7b\x77\x7a\xe9\x23\x62\x3c\x8e\x6a\x6d\xff\xd6\x1b\xc5\xe8\xbe\x01\xcb\xeb\x68\x0b\xcb\x6b\x8a\xea\x79\xfb\x6b\x56\x80\x77\x3c\x4a\x44\x12\x4e\x37\x1e\x8c\x73\xfe\x4f\x2d\x9f\x36\x5b\x4c\xc7\x55\x86\xd1\x51\x21\x4c\x67\x7b\x6a\x5c\x7c\xac\xcf\x18\x74\x1d\x3b\xde\x5b\x24\xba\xb6\x73\x1f\x34\x10\xfd\x64\xfa\xe1\x6e\xf6\xf6\x5f\x2f\xef\x65\xc8\xbf\x02\x50\xaf\xd0\xbe\x17\xc1\xff\xbf\x52\x3c\xf9\x07\xb9\xf8\xa1\xdf\xe0\x7f\x45\xc2\x3b\x87\xfd\x8f\x4e\x72\x1c\xaf\x04\x2f\x1e\x4d\x09\xbc\x75\x74\x84\x76\xfa\xda\x43\xb6\x40\x95\x19\xc6\x79\xc8\x16\xb0\xce\xf7\x21\x5b\x40\xef\xae\x2d\x36\x64\xbf\x49\x01\xa8\x31\x27\x20\xf1\xd4\x5b\x90\xa7\x7c\x94\xbf\x87\xd0\xf8\x7e\xe2\xab\x85\xaa\xc9\x54\x11\x59\x7d\xad\x9d\xda\xd5\x51\xd2\xf6\x07\xaa\x03\xa3\xd5\xf3\x0f\x21\xd1\xf9\x90\x68\xc5\x05\xb7\x08\x86\xae\x65\x06\x2d\x6c\x28\x57\x72\x67\xa4\xce\x5b\x17\xae\x6b\x30\x5f\x6e\x2a\x14\xae\xe0\xa5\xa3\xc4\xf5\x28\x72\x90\x0a\xde\x6d\x25\x59\xd5\x67\x53\x82\x97\x2f\x72\x23\xb6\x08\x48\xe8\xea\x82\x68\x0f\xa6\xe7\x66\x3e\xd5\x70\x6a\x09\x29\xcb\xc2\xaa\x3c\x33\xdd\x88\xf9\x5e\xb0\xe5\x92\xe1\x5b\xc3\xf4\xaa\x31\x25\xbb\x5c\x13\x19\xe3\x9b\xf7\x36\x75\x97\x1f\x30\xbe\xf1\x21\xea\x7a\x2b\xf1\xb2\xbf\xd0\xe5\x87\xa8\xeb\x6f\x28\xea\x5a\xb1\xb5\xbd\xc5\x5b\x9b\x30\xad\x43\x45\x5a\x97\x0f\xa7\x56\xd5\x9b\xc3\x88\x0f\x66\xec\xce\x40\x23\x09\xdc\xec\x2f\xee\x0a\x14\x63\xb0\x3b\x99\xc0\x3f\xe7\xa1\xa8\x24\xc5\x7d\xc7\x34\x8f\xb2\x4c\x6f\x4d\xe0\x12\x7b\x7f\xaf\x44\xe0\xfa\xa1\xc6\x99\xa1\x74\xdc\x72\x27\x9b\xab\xd9\x9e\x0e\xc2\x40\x5f\xe1\xae\x72\x26\xb5\xd1\x1b\xf1\x43\xc9\x0e\x8f\x72\x61\xfa\xf9\x60\x56\xcc\x0d\x1c\xd5\xd4\x7f\x55\xfe\xb5\x37\xd4\x29\x8a\x40\x4d\x9e\xc3\xfc\xc7\xf2\x9f\x68\x1d\x10\x52\x1a\xab\xd6\x63\x08\x63\xcd\x75\xc1\xd0\x2c\x56\x5c\x4d\x7d\x9f\x58\x67\x22\x48\xac\x28\x53\xea\x50\xa8\x16\xf8\x63\x39\x9c\x57\xa2\x73\xac\xc5\x4a\x1c\x11\x90\xcd\x91\x54\xd5\xfe\x6d\x1a\x40\xed\x31\x97\x97\x99\xc9\x63\xa3\x21\x22\x88\x01\x42\x19\x9a\x21\xc6\xec\xc6\xa2\xe2\x74\x47\x15\xf3\xc9\xb0\x9d\x1f\x1d\x2b\xf0\xcc\xec\x76\x14\x25\xd4\x88\xbe\xcd\x21\xca\x3d\xbb\x3f\xf7\x24\x3e\xda\x85\x46\x0f\x11\x91\x8f\x76\xdd\x52\x5a\xdc\x8e\xe2\xe6\x9c\x8e\x2a\x2c\xf6\x16\x31\x8e\x4a\xb2\x26\xca\x07\x16\x6f\x92\x79\xd2\xd1\xdf\x58\x47\x58\x27\x59\x79\x03\xd7\x10\xd6\xb6\x84\xfe\x7a\x1d\xb6\x1c\x24\xe6\x0c\x59\xd3\xe5\x1e\x9d\x62\x2d\xa8\x73\x15\x6d\xce\x6b\xa6\x59\xf7\xd8\xc0\x31\x39\x22\x2d\x49\x72\x05\x41\xce\x0d\xa8\x00\xda\x7d\x24\x9b\xce\x93\x1f\x39\x11\x5c\x5b\xf2\xb3\x2c\x7d\xac\x1a\xa9\x8d\x39\xaa\xe5\x67\x4e\xa5\xf4\xea\xe4\xf2\x16\x32\xa2\x76\x87\x40\x8f\x06\xc2\xda\x38\x5a\x07\x3f\x66\x93\xa0\x6b\xfb\x56\xe2\x3c\x13\x2c\xea\xc3\x77\xb6\x03\x7f\xe5\xa3\x80\xce\x0f\x5d\x4b\xee\xd5\x6f\xbf\x4c\xd6\xa7\xab\x69\x7b\xa7\x65\x27\x6f\xd9\xc0\x01\x6a\x91\xfb\xf7\x9a\x01\xc5\x73\x54\x3d\xc3\x2a\x76\x99\xd1\xa1\x55\xe2\x54\x40\xe7\x15\x8e\x7b\x65\x2b\x2a\xc5\xbd\x14\x93\xa0\x6c\xde\x42\xcb\xd9\xdd\x03\xae\x4a\x98\xf7\x8b\xaa\xc9\x36\x1c\x12\x59\x5f\x8e\x5e\xff\xf3\xf2\x37\x48\xdb\x21\xab\x5d\x40\x11\x70\xaa\x82\x91\xcc\x82\x2c\x28\x71\x3a\x70\xa2\x6a\x63\x7c\x80\xe3\x5b\x6d\xa2\xb6\x87\xca\xed\x1e\x7b\xca\x5b\x62\x8f\x49\x99\x84\x9e\xc0\xb7\xb1\x87\x69\xf0\x49\x8a\x04\xfa\x52\x45\xb2\xe4\xdb\x5b\xc4\x6e\x31\x5a\xb5\x8c\xe8\xd8\x72\x4d\x86\x76\xed\x76\x49\xaf\x14\xed\x68\xb9\x9c\x2e\x4c\xa1\xaf\x88\x0a\x73\x2e\x36\x38\x6b\x61\x18\xe0\x7b\x51\xa9\xf2\xeb\xcd\xa5\x58\xe3\xd3\x77\x9d\xc2\x56\xa4\x9c\x1c\x57\x14\xb5\x52\x38\x0b\xa3\x28\xe5\xc9\xaf\xb9\x40\x4b\x1d\xd0\x1c\x05\xfe\xd5\x82\xae\xde\xa3\x79\x1c\x3c\x68\x4a\x93\x11\x0f\x8a\xf2\x1b\x1a\x69\xf4\xd3\x9a\xcb\xb8\xc0\xc9\x05\x6f\x7e\x96\x92\xcd\x52\x2b\x39\x9f\x1c\x8e\x24\x02\x09\xaa\xa4\x52\xfd\xb0\x9d\x30\x9f\x0c\x1c\x7e\x3b\x77\x43\x28\x04\x62\xaa\xd0\xeb\xe7\xa2\xd0\x17\x11\xd5\xa8\xa3\x4b\xf4\x45\x0c\x91\x8e\x35\x55\x2b\xc7\xaa\xb0\x9b\xca\x99\xb8\x1e\x25\x02\x62\x62\xd3\xc9\x9b\x5e\xb5\x9a\x5c\xcb\x16\x44\xcc\xdf\xd0\x57\x08\xfa\x75\x29\x28\x65\x43\x6f\x55\xcd\x3f\x49\x8a\x43\xe8\xe5\x34\xc3\x37\x14\x5c\x04\x11\x17\x88\x81\xf8\x43\x75\xe1\x15\x25\xf3\x2c\x8f\xa6\x15\x21\x02\xfa\xbf\xeb\x05\x02\x9e\xf9\xc0\x02\x72\x40\x28\x08\xd4\x77\x86\x79\xc3\xca\x28\x36\xac\x28\x9b\x0a\x37\x45\x93\xd5\x69\x0e\x19\x55\x67\x13\xd3\x47\xf3\x08\xfb\x88\x3f\xa2\x91\x80\x73\x34\x5c\x88\x65\x96\x79\x80\xf7\x08\xfa\x00\x4e\x69\x24\xc0\x5b\xf5\x84\xd4\xb1\xe9\x2d\x62\xeb\x2d\x6c\xc0\x36\x75\x36\xb7\x43\x27\x47\x47\xbb\xda\x9c\x2b\xc4\x6e\x11\x03\xcf\x34\xde\x6f\xbb\x2f\x4f\x00\xd7\xe3\x29\x14\x04\x21\x53\x8a\x3c\xf2\x81\x0f\x05\x04\x33\x46\x97\x60\x8a\x54\x36\x33\x22\x02\x08\xaa\x82\x03\xe2\x02\x79\x3d\x00\xea\xf8\xe8\x78\x77\x58\x2c\xc0\x73\x1a\x91\xaa\xd0\xdc\x0e\x50\xfa\x65\x01\x05\x58\xd3\xe8\xf7\xbf\x30\x04\x02\x4a\x6f\x24\x44\x66\x94\x01\x4f\x52\x4e\xe5\xca\x98\x22\x30\x93\x1f\x1b\x82\x97\x02\x20\x2c\x16\x88\x01\x9f\x22\xed\xe7\x40\x77\x98\x0b\x40\x99\x0a\xbb\x80\x0c\xa9\x34\x72\x18\x09\xd5\x51\x11\xf9\x12\xae\x1c\x21\x80\xfb\x82\xe9\x64\x97\x30\x7d\x92\xcc\xdb\xc2\xf1\xf3\x73\x11\xf4\x06\x11\xad\x13\x30\xd4\xce\x5f\xdf\x69\x5f\x7e\xa5\x11\x03\x4e\x49\x6e\x8a\xbb\x24\x0f\xd5\xf7\x63\xed\xc7\xf6\xd5\x27\x17\xaf\x80\x9e\x64\x83\x0b\x5d\x6e\xa5\xda\xb5\x90\xd1\x5b\xec\xeb\x12\x92\x0c\xfd\x11\x61\x86\x7c\x10\x22\xb6\xc4\x9c\x2b\x41\x0d\x5c\x48\x0e\xe0\x29\x7c\x61\x00\xfa\x4b\x4c\x30\x17\x8a\xfb\x01\x3c\x03\x62\x81\xa5\xfc\x0b\x20\xd1\x47\x6e\xa3\x1d\xdf\x14\x5e\xef\xcc\xe4\x21\xd9\x0f\xd4\x56\x58\x2c\x34\x94\x38\x16\x28\x0b\x26\x89\xf2\x52\x58\x56\xf0\x68\x03\x83\xcd\xdc\x9b\x5d\x70\xbb\x27\x8a\x7a\x45\x97\x48\x2c\x24\x81\x58\x49\x92\xb9\x62\x94\xcc\xed\xac\xa6\xe5\x32\x5b\x5e\x2a\xa4\xec\xa0\x3f\x92\x53\xa8\xe2\xca\xe6\x52\xcc\x20\xb7\x98\x51\xb2\x54\x09\x75\x9f\x07\x8e\x8f\x6e\x51\x40\x43\xfd\xbb\x6d\x32\x7c\x0c\x0a\x86\xec\x52\x0c\x17\xd0\xbb\x71\x05\x33\x49\x9c\x26\x67\xcb\x33\x49\x08\xe7\xa9\x28\xa6\x1e\xbf\x52\x96\xca\x9c\x15\x30\x86\x53\x8b\xa8\x96\x4e\xa6\x71\x3d\x3d\x89\xf0\x95\x91\x59\xe5\x6c\x56\x2d\xbf\x26\x36\xf0\x4c\x94\xe7\x6a\x81\x2b\x6b\x00\xfd\x44\x25\x7e\xff\xac\xde\x6f\x5f\x5e\xd0\x9a\xc1\xb8\xcd\x04\x2e\xe2\x21\xda\xcc\xa1\xd9\xc8\x67\xc7\xc3\xcd\x8c\x27\xa9\xfa\xd5\x5d\x77\x8b\x21\x73\x58\xbd\x6d\xf1\xc3\xaf\x97\x6f\x7f\x63\xde\xf7\xd3\x05\x22\xce\x99\xdd\x74\x43\x1e\x25\xc9\xb6\x87\xdc\x97\x3f\xce\xbe\xfe\x32\x1d\xff\xf2\xc4\x9e\x92\x00\x33\xc9\x08\x92\x9e\x77\x4d\x4d\xd0\x47\x2a\xae\x3a\x97\xa9\x21\x5c\x34\xbc\x16\xa2\x20\x93\x9c\xe1\x82\x96\xbc\x75\xf7\x82\xcd\xc2\xb4\xeb\x02\xaf\x55\xa2\xb6\x2e\x34\xe1\x06\x78\xbe\x10\x25\xe3\xb2\xf2\x51\x49\x8e\x9e\x54\x90\x48\xe3\xaf\x2d\xbe\xd7\x6d\x61\xd5\x22\x78\xfc\xfb\xae\xe1\xfe\x7d\xc6\x37\x9b\xa3\x74\xd8\x08\xe7\xea\x24\xcc\xa6\x63\x62\x4e\x88\x44\x2a\x5d\xdb\xc0\xde\xb5\xa0\x29\x39\xa1\xb6\x55\x41\x7d\xc0\xd5\xae\xc0\x62\x8f\x2b\xca\x99\x47\x0a\x0b\x59\x08\x11\xca\xb7\x3a\x84\xf1\xee\x21\x20\x19\x62\x4b\x70\x61\x59\x49\xcd\x84\x21\x25\xaf\x74\x51\x54\x6d\x73\xc9\x22\x07\xe6\x2e\x26\x33\x9a\x99\x9a\x94\x94\xb6\x56\xfb\x14\x9c\x37\x2b\x08\xb0\x73\xd8\x3f\x0b\xf0\xdc\xf4\x8f\xeb\x00\x7e\xfd\x56\xd0\xd6\x75\x6f\x43\x44\x53\xb3\x0d\x93\x79\x6e\x0a\xdb\x3b\xf0\xdb\xef\x75\xa1\x56\x5a\xe7\x19\x6e\x57\xeb\x61\xf7\xc7\x0a\x0a\xa8\x53\xe6\x3a\xd0\x07\x3f\xf3\xd2\x7d\xa2\x10\xf8\x56\x82\xb5\x2d\x86\x46\x64\x81\x60\x20\x16\xeb\xf8\xc5\xd6\x51\xbc\x25\x79\xe1\xce\xc5\x9e\xf6\x3c\x65\xd0\x25\xab\xe6\x61\x0b\x42\x35\xc5\x88\x0f\xda\x4f\x37\x57\xb5\x84\xce\xec\x9b\x86\x84\x2a\xf4\xd6\xf4\x7a\x66\x59\x61\x10\x31\x18\xe0\xaf\x4a\x54\x36\x99\x1d\xed\x47\xb5\x88\x7b\x20\x59\xc4\x46\xa7\xf6\x49\x10\x80\xfa\xf7\x1b\x8e\x53\x0b\x41\xac\x1a\x5f\x7c\xc9\x4e\xae\x04\x83\x02\xcd\x9b\xe3\xb7\xba\x8a\x73\x16\xbe\xb2\x61\x44\x76\xcb\xb2\x77\x1d\x44\x3b\xc5\x48\x41\xba\xf4\x56\x02\x56\xef\x99\x59\x97\x99\xe4\x83\x56\x07\x3c\xbf\x61\xaa\x96\x0d\x65\x5e\x8b\x52\x9a\x2d\xe6\x36\x85\xfe\x1c\x59\xd3\xbb\xf5\x37\x80\x82\xd9\x26\x52\x41\xbb\xb5\x2c\x20\x7f\x43\x53\x88\xb4\x5c\xd0\x1b\x0a\x7c\xf3\xce\x86\x71\x6f\x4e\x29\xc0\xd0\x8f\x18\x4c\x92\xa0\xeb\xa6\xec\x17\x67\x5b\x47\xff\xda\x1a\x49\x0b\x96\xcc\x8d\xf0\x62\x26\x77\xac\x23\x2c\x37\xc4\xf6\x2e\xf8\x1e\x23\x92\x1d\xed\xeb\x37\xc5\x92\x8f\xd8\x6e\xd5\x75\x61\xe1\x7f\xcd\x7c\x67\x49\x25\x5c\xdc\x19\xa3\x4b\x97\xd0\xd5\x06\x5f\xfb\xf4\xc9\xc1\x52\x84\xb8\x85\x81\x5e\xda\xd1\x51\x81\x25\xfe\xad\x5b\x04\xa4\x25\x7c\x7c\x0f\x54\xe9\xe5\x9c\x50\x86\xc0\x95\x8a\xa5\x50\x36\xe2\xea\xf4\x91\x0c\xfc\xda\x90\x2b\x35\xb2\x1e\x38\xb1\x3d\x57\xa6\x53\xd4\x3a\xbd\x2b\x2f\x76\x03\xea\x9f\x2d\x17\x33\x87\x0b\xfb\x2c\xd3\xb1\xfb\x2c\xca\x7a\x26\x7e\xb0\x49\x37\xe6\x4f\x6e\x88\xd8\x5b\x99\xdc\xb6\x43\xe5\x66\x94\xb2\x64\xea\xa5\x21\x72\xe5\xcd\xc9\xd7\x2b\x61\x34\x40\x4e\x65\x11\x93\x58\x4a\x31\xce\xa5\x96\x25\x4c\x1c\x8e\x84\x29\x92\x87\x29\x79\x8e\x03\x55\x30\xd1\x6c\x48\xa1\x96\x49\xa3\xde\x02\xed\xb5\x01\xdb\xa6\xc2\x97\x12\x2e\x93\x79\x6d\xa4\xb0\x6d\x0a\xbf\x54\xad\xdb\x02\x82\x82\x45\x0d\x00\xcc\x83\xb0\x62\xad\xad\xd4\xb5\xf4\x5d\xa7\x7e\xb4\x66\x59\x6c\xb3\xe2\x04\xf6\x53\xaa\x67\xca\x11\x64\xde\xc2\x9d\xd2\xbb\x4c\x86\x92\xba\x76\x2d\xb9\xab\xaa\x81\xb2\x90\x82\xb5\x64\xd3\x01\xf4\xd0\x82\x06\xbe\x29\x75\x6d\x12\x7a\x48\x18\x89\x8b\x5c\x2e\xd3\x32\xca\x84\x36\xa6\x83\x15\x7a\x39\x56\x56\xec\x61\x48\xee\x19\x9c\x63\x52\x68\xe9\x38\x70\xae\xd4\x68\xd9\x66\x4f\xc3\xe1\x50\x67\x15\x69\x6d\x0b\x84\x51\x10\xb8\x0c\xcf\x17\x42\x5f\xf6\xe8\x32\x84\x9e\xa8\x20\x64\x5b\x32\xa9\xb6\x29\x60\x61\xba\x18\x4b\xdf\x22\x85\x27\xca\x1d\xe6\x14\xba\x13\x15\xea\x4e\x1a\xec\x81\x73\x74\x25\xdf\x49\xae\x78\x11\x63\x88\x48\x90\xa1\xca\xd4\xdd\xbe\x5a\x27\xe9\x0c\x46\x39\xda\x06\x4d\x93\x54\x1f\xe4\x19\xa5\xa2\x65\xe6\xda\xc9\x7d\xe9\x99\x74\x52\xd7\xb3\x28\x2d\x5b\x6c\x99\xdd\xcb\xcb\x5e\x9a\x26\x55\x4d\x20\xe3\x8c\x94\x74\x1e\xcf\xd6\x2f\x75\x4c\xbe\xae\x9f\xb9\x06\xfa\xa7\x7d\x6e\x69\x89\xcd\x3d\xcd\xd0\x53\x95\x40\xe3\x19\xea\xba\xa0\xb5\x33\x4c\x4a\x87\xee\x70\x82\x9f\x13\x9f\x53\xdd\x4c\xd2\x9a\xfe\x3b\x9d\xc8\x17\x3a\x1d\xd6\x34\xe1\xfa\x59\xd7\x7a\xdf\xf5\x14\x92\x7a\xa8\xd6\x49\x64\xee\x6e\xd7\xbf\xea\x30\xd5\x50\x4f\xf6\x55\x0d\xb5\xd4\x9d\xea\x71\x4e\xc2\xd6\x55\xcf\x2b\xe5\x96\x39\x15\xf4\x49\xae\x4b\x42\x7e\x80\x0e\x35\xbd\x1e\x57\x65\x24\x9e\xd4\x69\xea\xf6\x1c\xa3\x00\x19\x02\x5e\xab\xae\x9b\x0c\xa4\xbc\x92\x9f\x32\xf4\x06\x93\x8c\xe5\xcb\xe9\xdb\x2e\x89\x96\x53\xe3\x5d\xa8\xab\x92\x90\xa6\xdb\xab\x4a\x59\xfc\x49\x31\xd5\xfe\xbf\xfe\xf3\xff\xe4\x9f\x43\xc4\x2f\x3f\x55\x34\xe2\x97\x19\x73\xb3\x28\x0d\xea\xf2\x49\x2b\xcf\xe8\xb1\x96\x14\x6f\xe3\x03\x9a\xfa\x30\x32\xc0\x90\x0f\x60\xaa\x09\x93\x0d\x8d\xff\x97\xd5\x82\xd7\x99\x5e\x1c\xab\xfa\x06\x77\xa2\x76\x2e\xe6\x01\xeb\x3c\xfe\xf7\x06\xf3\x48\xf2\xd5\x2a\x10\x41\x0b\x21\x35\xec\xbc\x46\xb5\x6e\x57\x18\x61\xf0\xe9\x9b\xe8\xfd\x69\x02\x3e\xee\x69\x71\x83\xf4\xd4\x24\x4d\xd2\x36\x28\x62\x30\xee\xaf\x88\x41\xb6\x3a\xcc\xc6\x45\x0c\xb2\x83\x5c\x45\x53\x93\xc1\xd5\x6a\xa4\x84\x97\xb5\xcd\x4e\xaf\x61\x66\xe3\x83\x55\x31\x98\xf4\x5d\xc5\x20\xe7\xcc\x4f\x21\xda\x57\x29\x83\x49\x97\x52\x06\x55\x2f\x26\x45\xf5\xda\x97\x40\x68\xe7\xbc\xe2\xc8\xa3\xc4\x87\x6c\x5d\x8a\x2a\x2b\x03\xa7\x5c\xd9\xaf\xbb\x35\x3e\x47\x0b\x4b\x5f\xf8\xbe\x0b\x34\x54\x76\xe0\x1c\x7f\x63\x74\x5f\xbb\xfa\x81\x56\x4d\x76\x61\x76\xcf\x52\x7a\xe8\x79\x94\xf9\x76\x13\xc6\x0d\x5a\x17\x69\x7d\x12\x03\xf2\x79\x50\xd9\x55\xb8\xa9\x56\xcd\xa7\x38\x2a\xff\x95\x72\x83\xab\x50\xa6\xbb\x10\x12\x5f\x31\x1d\x29\x7d\xf8\x26\xc6\x71\x10\xbf\x8b\x75\x1e\x6d\x1c\x0c\x61\x37\x87\xd4\xf5\xc4\x2b\x46\x23\x1a\xcf\x82\xc5\x99\x1f\xc7\x2a\x67\xf2\x66\xab\xe6\xa0\x3b\x64\x43\xbf\xb2\x39\xb6\xe5\xac\xd4\xd6\xd6\x1e\x35\x49\xbf\x96\xae\x3b\xb9\xc9\xb5\xac\xdb\xd5\xac\x9e\xd5\x4e\x73\x5c\x4f\x92\x2b\x36\xac\x53\x75\x99\xc2\x42\x6d\xf0\xb0\xd1\x60\xcb\x36\x53\xe6\xf2\x15\x14\xde\x02\x94\xd0\x49\x87\xba\x94\x6b\x62\x57\x55\xe5\x02\x56\x17\xa3\x65\x48\x65\x2e\x73\x5e\x98\xbf\x07\xce\x07\x92\x5c\x6f\x74\x02\xb7\xa2\x75\x95\xc4\x7f\x8b\x9d\xed\x80\x7b\xed\xbd\xf1\x0d\x2f\x97\x22\x50\x62\x74\xa9\xdd\x85\x8a\x93\x50\xb1\x25\xb9\x03\xbb\x59\xb5\xbc\xa6\xf2\x77\xb6\xa5\x61\xee\x86\x51\x10\x20\xdf\x98\xad\x37\x05\x51\x33\x7c\xbb\x40\x58\xb5\x49\xff\x10\xfa\x0d\x9d\x7b\x9a\x87\xa5\x34\x10\x38\x8c\x0f\x1d\x64\x18\xba\x3a\xaa\x49\x9f\x3c\xab\x6c\x99\xd9\x94\x48\x4d\xe1\x3a\x27\x60\x36\xb6\xe7\xcc\x9d\x3e\x5b\x80\x44\xdd\x27\x9a\xc3\x21\xaa\xcf\x7b\x3d\x2a\xf6\x50\xc5\xaf\xf2\xc6\x5e\xaa\x9f\x95\xd2\x34\x0b\x95\x15\x4a\x6c\x46\x53\xb3\xcb\xd6\xed\x26\xb6\x10\xa6\x3a\x0e\x50\x53\x9d\xb5\x8c\x42\x1e\x0c\xb1\x88\x1d\x7a\x76\x4e\x6a\x8b\xb1\x7c\x22\x04\xc3\xd3\x48\x20\x5e\xbf\xa9\x35\x7c\x11\x26\x43\xe4\x7e\x5c\x09\x16\x79\x22\x62\x9d\x18\x66\x5f\xfa\x7f\xcd\x59\x4b\x67\x58\xb4\x0c\xe4\x16\x92\xf3\x27\x59\x57\x7b\xb5\x30\xb5\x31\xcb\x43\x36\x1d\xc6\x36\x07\xa3\x57\x58\xb5\xa2\xd8\x9b\x77\xb8\xce\x0d\xb3\x59\x03\x7f\xa3\x28\xa4\xf8\xd8\x23\xb1\x6a\xa3\xad\xb5\xa6\x55\xdb\x97\xcc\x3b\xac\x46\x56\x3a\xf1\x5b\xaa\x63\xcd\xc7\x70\xab\xc3\x97\x8b\x0e\x69\x41\x69\x5a\x9f\xc6\x2d\x96\x5d\x05\xda\xd7\x48\xc0\xaa\x58\xb9\xaa\xf8\xd2\x25\x12\x70\x73\xba\xd9\x37\xbd\xec\x6d\xab\xea\x97\xd5\x81\x64\x6e\x45\x2a\xb7\x27\x91\x5b\x92\xc6\xad\x48\xa2\x44\xa7\x36\x04\xb1\x4a\xf2\x69\x6e\xfc\xaf\x93\xb6\x81\xfc\x4b\xd5\x89\x90\xdb\xa3\x0b\x77\x10\x0a\xe4\x16\x82\x74\x9f\x5a\x96\x4c\xea\x4c\x80\x2d\x27\xa5\x9f\xd2\x71\xf9\xcc\x74\x7b\x66\xfb\x7f\x6b\x91\xd9\x7e\x1f\x7a\xed\xfd\xeb\xd3\xd9\xe2\xe4\xa7\xe7\xf6\x82\x03\x1b\xa7\xb2\xd7\xd5\x06\xdd\xba\x35\x9e\x4a\xa0\x98\x62\xdf\x47\xa4\x55\xfe\xcb\xe8\x44\xa1\x88\xc0\x30\xe0\x8f\x66\xf1\xab\xc9\x01\xcb\x57\x83\x6b\x4f\x04\xaa\x0f\xb0\x54\xfb\xa6\xb0\x63\xb3\x3d\xf3\x92\x8b\x05\x5a\x36\x41\x80\x50\x1f\x6d\x93\x28\xb6\x69\xe0\xdb\xde\x62\xdc\xe2\xa2\x11\xc3\x61\xab\xee\xa9\x5d\x62\xff\x9a\xa1\x2f\xd9\x99\xb2\x46\xb8\x30\xc0\x73\x62\x9a\xf8\xd1\x29\x0e\x90\x9b\xd6\x9f\xed\x4a\xd5\xb5\x31\xd7\xad\xc0\x8b\xc2\x06\x2d\xa3\x40\x60\x97\xa3\x00\x79\xc2\xf5\x19\x0d\x7d\xba\xca\xd8\x9e\x8d\x0d\xc1\xa1\x49\x1c\xa5\x7e\x54\x87\x60\x50\x72\xa5\x7e\xc9\xf1\x9c\x8b\xd8\xd0\xa7\xda\x01\xea\xe7\x63\x5b\x5e\xec\xd5\x8f\xdf\xcd\x5c\xaf\xdb\x3e\x8e\xc4\x73\xe8\x21\xf1\xcf\x08\xb1\xf5\x3b\xb9\x0f\x6a\x47\xfe\x08\xe3\x40\xc8\x8a\xd8\x8c\x1d\xaf\xf4\x4a\x35\xe5\xcb\xaf\xf4\x2a\x6e\xd4\x57\x58\x69\xe6\xfa\x46\x2b\x35\xef\x1f\x68\xa5\x99\x6c\xd9\xfc\x72\x2f\x73\x19\xb1\x85\x35\x17\x6f\x6e\xb4\xf0\x5c\xa2\x6e\xc3\xea\xdb\xf0\xef\x6a\x89\x76\xab\xd8\xd1\x37\x8a\x40\xde\x9b\xa8\xd1\xd1\xfe\xa2\x46\x7b\x0c\x15\x68\x11\x33\xea\x54\x3b\xe6\xab\x22\xec\x70\x3f\xc1\xa2\xed\xbf\x9c\x98\x88\x93\x19\x70\x77\x7c\x74\x14\xde\x49\xb2\x2e\x58\x44\x3c\x68\x36\xb9\xd2\x57\x97\x74\xd2\xd9\xc5\xfc\x0a\x71\x98\x35\x21\x98\x9d\x27\xd0\xae\xb7\xcf\x56\x93\xce\x27\xe1\x5b\x26\x9e\x27\x3b\xdb\xcc\xfe\x5f\x74\x42\xca\x96\xad\x89\x36\x08\x1a\x89\x0d\xa1\x4a\x28\x71\x55\x59\x96\x5c\x00\xa4\x0e\x66\x2c\x06\x3c\xe6\x52\x8a\x6a\x23\x1d\xdf\x98\x60\xc8\xfc\x3b\x1d\x62\x1c\x3b\x38\xf5\xb7\x89\x70\x74\xb6\x88\x6f\xac\xfe\x6a\x97\xe8\x46\x27\x67\x67\x6f\x13\xdb\x38\xea\x16\xdb\xf8\xa6\x28\x59\x6f\xd6\xfe\xaf\xc2\xe9\xb0\xe7\x88\xc6\x9a\x99\xec\x31\x9e\xd1\xd9\x3e\x9a\x71\x33\x4b\xc0\x68\x33\x03\x4e\x8d\xf9\xc5\xa9\xa9\x87\x59\xd2\xc9\x06\x47\xad\xab\x5f\x6e\x69\xce\x49\x75\xee\x1e\xcd\x38\x85\x93\x97\xad\xae\x6d\x84\xa7\x60\x1d\xd7\xd9\x36\xd6\x1e\x05\x82\x61\x67\x47\x5d\x75\xfc\x59\x1e\xc2\x33\x95\xbf\x66\x3b\xa3\x7b\x83\xf4\x6b\x28\xbc\x45\xdf\x06\xb3\x02\xa4\xdf\xc4\xf0\xe4\x60\xa9\x22\x32\x54\xc9\x5f\x03\x73\xa0\x81\x00\x12\xa9\xbe\x4f\x70\x57\xa8\xf3\xdf\x1a\x3c\x4b\x00\x54\xad\xc7\x11\x5b\x26\xae\x7a\xc1\x68\xbe\x96\xd2\x68\x90\x5b\xb8\xbd\x74\x6c\x8e\x20\xb5\x75\xe2\x34\x56\x8c\x68\x63\xd0\xb4\x8e\x50\x69\xcb\xec\x52\x32\x35\x67\x8a\xdc\xbc\x46\x67\x40\xa1\xd6\x7b\x0e\x6a\xcb\x7c\x74\xf9\xe6\x87\xe0\xc9\xe5\xac\x75\x27\x99\x86\x66\x43\x0b\xa8\xeb\x25\xb9\x5a\x7e\x4d\x5d\x1b\x39\x8b\xa2\x59\xbb\xcb\x43\x4c\x88\x52\xc9\x3f\xf7\xbd\x3b\xe6\x13\x1b\xec\x4f\xcc\xfa\xb3\x3d\x4e\xb4\xf0\x7a\xd0\x9d\xfa\xf5\xb7\xf0\xe5\xd7\x57\x93\x79\xeb\x9d\xd2\x01\xce\xb5\x0a\x6a\x95\xb1\x34\x97\x9e\xb4\x79\xb5\x2d\xa7\x31\xcc\x07\x64\x70\x25\x7e\xc4\xe4\x75\x67\x03\x81\x46\xf9\x40\x20\x27\x4d\xa7\x01\x3e\x0a\xa5\xac\x0a\x28\x49\x4b\x54\x01\x3f\x2d\x28\x56\xe3\xff\x6c\x53\xfb\xab\xbe\xe6\x57\x37\xb5\xaa\x0a\xc0\x52\x6e\x7c\x92\xed\x18\x74\x78\xa8\xae\x20\x07\x0c\x99\x12\x79\x8d\x8e\xe4\x14\x90\x0b\xcc\x85\x49\xb8\x2b\x00\xd2\x44\xb3\xee\x10\x8c\x2b\xc8\x4d\xe2\x7e\x0b\x6f\xed\xbe\x80\x18\xa6\x33\x6a\x09\xc2\xa9\xd1\x25\x77\x03\xbf\x82\xd1\xb0\x3a\x0f\xa2\xb1\xfb\x55\x6c\x47\x85\x79\xcc\x2d\xce\xdb\x14\x15\xa9\xd2\x8b\x32\x50\x28\x6d\x68\x26\x51\xba\xbd\x37\xa3\xd2\xcf\x5f\x2a\xc5\x2f\x8c\xba\xe6\x7c\xa1\xd3\x36\x55\xf7\x5b\xc3\xeb\x0b\x9d\xf2\xe1\x17\x3a\x55\xfd\xc1\xdc\x39\xa3\x51\x68\x01\x96\xf9\xee\x67\xdb\x1d\xf9\xe2\x4f\xf2\xbd\x37\x49\x61\xe6\xd3\x81\xf3\x47\x84\xd8\xda\x55\xeb\xe6\xa9\x25\xe5\x0b\x9d\xca\xa7\x54\x17\x85\xd4\xa6\x5b\xfa\x90\xb6\xd4\xe9\xa7\xd2\x92\xc7\x6d\x42\x1a\xac\x7b\x53\x9a\x61\x47\x7f\x53\x07\x94\xad\x49\x2e\x5a\x52\x22\x16\xd9\x92\x59\xf9\xbc\x5a\x95\x0c\x7e\xdd\x98\x6b\x54\xb1\xb1\xbd\x85\xa9\xd6\xcf\x52\x67\xe1\x37\x06\xac\x3a\xf5\x01\xaa\xad\x86\x2d\x91\x0e\x8b\x1b\xa1\x0a\x2e\x05\x39\x82\x12\xe4\x16\x74\x13\x2b\xc8\x1a\xe3\xe6\xcb\xbb\xa6\x04\xb8\xea\x82\xe6\xd5\x38\x59\x78\xb3\xa9\xdf\x64\x81\x38\x98\xb2\xe8\xd5\x64\x22\x41\x79\x27\xe7\xb2\x6d\x4b\x54\xba\xd1\x16\xeb\x02\xf3\x99\xf6\xd6\xb0\xd8\xd2\x40\xd6\x5e\x16\xc3\xa4\x41\x80\x45\x1a\x51\x0d\x42\xaa\x66\x6b\x9d\x97\x31\xe6\x96\xe8\x75\x4b\x2a\xbd\x85\x7d\x23\x0b\x71\x3d\xf1\x6d\xe9\x78\x09\x21\x2a\xa8\x29\xe6\xef\x52\x97\x53\xcd\x53\xef\x51\xac\xe8\x7d\x6e\x83\x08\xf2\xbf\xe1\x70\xb8\x51\x70\x95\x9d\x0b\xd5\xb3\x9e\xbd\xb2\x95\x2a\xa4\x2e\xe5\x17\xb5\x6f\xd5\x52\x9d\x23\x11\xa7\x4f\xc5\x5b\xfc\xa8\x05\x33\xab\x4f\x74\xea\x10\x38\x55\xc0\xb2\x51\x45\x43\xf3\xcd\x4e\x79\x27\x4b\x4a\xcd\x2c\xaa\x95\xf5\x56\x7a\x21\xe6\xef\x23\x52\x5f\xa5\x3d\x77\x9e\x20\xf1\xe3\x3f\x09\x4d\x83\x61\xe2\x6a\x77\x31\x49\x55\x66\x4b\x24\xbc\x85\x24\xe4\xdc\xfa\x9d\x3e\x4f\x50\xc1\x94\x27\xbf\xf9\xac\x45\x27\xcb\x9d\xea\x10\x17\x49\x33\x3b\x8f\x06\x01\xf2\x04\x50\xf3\xb2\xdb\x3f\x7b\x55\x68\x77\x16\xe2\x69\xd2\x21\xbd\x05\x64\x22\xad\x9c\x5c\x00\x82\x05\x34\x76\xd9\x2a\xc6\x9b\x81\x13\x71\x13\xc3\x0a\x1e\x25\xe2\x04\x37\x88\xc3\x90\x6a\xa9\xe8\xab\xb2\x31\xf2\x91\xd7\x2f\xbe\x3a\x15\xb9\x40\xb1\xd5\x94\xd1\x79\xe2\xee\xcd\xfa\x5d\xcc\xf5\xb8\xd6\x73\x2e\xeb\x5a\x4e\x52\x19\x77\x2c\xf3\x0b\x11\xf3\x74\x97\x2f\xf5\x61\x39\xe6\x12\xde\x39\x03\xa7\x32\x23\x33\x4b\xa5\x8a\x63\x6c\x1d\x35\xb2\x69\x53\xb3\x26\xf5\xf1\x7e\x92\x96\x4c\x4d\xca\xef\x92\xba\xa4\xe7\xe8\x81\xcc\x58\xc8\xcc\xa6\xd4\x25\xd5\xdc\xa6\x6b\x15\x57\x9f\x47\xa7\x84\xe8\x24\x11\x98\x35\xb4\x27\x2e\x40\xa5\xc8\x0f\x7e\xda\x03\xf9\xd1\x65\xcb\x5b\x10\xa0\x64\xba\xdb\xd1\x20\xcb\x30\xf7\x8b\x0c\x6d\x1e\x93\x5e\x65\xe9\xdf\xce\x69\x10\x86\xee\x94\x21\xe8\x7b\x2c\x5a\x4e\x0f\xdd\x1c\xef\xfd\x4f\x77\xef\x56\xfe\x3f\x7e\xb3\xc7\xaa\xa7\xf3\x54\x67\x47\x55\xb3\xb3\x34\xcc\x43\xd0\x5b\x24\xa7\x20\xbb\xb6\xe6\x6e\xdf\x49\x53\xfd\xa2\x25\x20\x9b\x55\x9d\xea\x74\xf2\x1a\xf1\xd2\xb0\xa3\x22\xe9\xce\x01\xb6\x5c\x09\x35\xdb\x47\xdf\x6a\x49\x71\x6c\x99\x93\x19\x4d\xae\x25\x51\x2e\x76\xc5\xfe\x17\x2b\x7d\x4d\x14\xbf\x64\x06\xff\xf5\x9f\xff\xf7\x26\x84\x2f\xab\xd8\xc5\xfa\x99\xd1\xd7\x32\xd1\x92\x90\xcd\x79\x63\xfd\x0a\x27\x17\xe5\x63\xda\x45\x74\x6a\x69\xd8\x36\x73\xa4\x14\x5a\x32\x18\x6f\xdf\x18\xb1\xf2\x98\x6d\x77\x64\xd3\xfc\xa7\xd8\xbd\x79\xd8\x53\xfb\xfa\xdd\xcd\xaf\x5f\xc3\x33\xbb\xaf\x2f\x26\xf5\xa6\x8a\x4a\xcd\x71\x3d\x1d\x38\xae\xfc\xe1\xe2\xb4\xc7\x43\x26\x5f\xac\x49\xe0\xc9\x89\x58\x98\xbb\x54\x2d\x3d\x3d\x39\x2d\x05\x26\xa7\xae\x86\x54\x9d\x14\xc9\xa3\xe9\x02\x25\x47\x48\xdd\xa4\x81\x92\x87\x06\xce\xb8\x5a\x4a\x29\x55\x9d\x9e\xe1\xbb\xea\xa3\xdd\xd2\x80\x60\x22\x1e\xe2\xd1\xb2\x07\x26\xce\xc5\xaa\x61\x57\x83\x84\x9c\xb5\xed\xb9\x54\x75\xa9\x94\x0e\x98\x20\x6c\x42\x18\xf4\x14\x73\x09\x9a\x9f\xf3\xf4\x36\x07\x97\xb8\x6f\x22\xf1\xa0\xb0\xdc\x75\x86\xce\xc0\x42\x8c\x2d\x17\x34\x46\x6c\x55\x02\xaa\x3d\xaa\x7c\xc7\x5b\x5f\x3c\x14\xe3\xb8\x22\x6e\xcc\x38\x33\xa0\xce\x57\x51\xa8\xae\x95\xd0\x82\xeb\xec\x9c\x60\x97\x70\xb6\x2f\x9a\x6d\x42\xd1\x0f\x4a\xb1\xc5\x9b\x5f\xfd\x7f\x3e\x5f\xa1\xf6\xd1\x19\x71\x4d\xaa\x52\x34\x31\x48\x6b\x1d\xaa\x2c\x61\x7c\xa7\xff\x30\x95\xc9\xb5\x0e\xc0\x6e\x10\x29\x3b\x95\x63\xc4\xb1\xe7\x44\xb7\x3a\x5d\xb6\xac\x06\x4a\x90\x2b\x16\x98\x65\xc7\xd4\x7e\xbf\x1a\xe4\xcd\x86\xa1\x7f\x54\x1c\xab\x05\x95\xab\x34\xa3\xda\xe3\xff\x5a\x92\xc4\x22\x25\x2c\xf3\x41\xcb\xe9\xb4\xf8\x8b\xfa\x57\x3b\x0a\x48\xbc\xd5\x89\x28\xc5\xda\x1f\xf4\x40\xf0\xeb\x93\xc7\xeb\x17\xbf\xfd\xb0\x8f\x70\x25\xe3\x7f\xba\x87\x81\x4a\xa6\xd2\xea\x02\xf2\xfb\x1d\x9d\x54\xe7\x0d\x6f\xe3\x41\x34\x3b\x80\xfd\xae\x31\x20\xa3\xfc\x00\x9b\xba\x10\xab\x85\x48\x6b\xda\x92\x95\xad\x66\xa6\x11\xd7\xe8\x29\xf6\x0b\xce\xdf\xde\x5f\x2c\x41\x16\x42\x69\x5d\x79\x63\x76\x3a\xb5\x9d\x85\x5c\x0f\x5d\xd3\xa1\x4a\x67\xd9\x11\x2a\x80\x9f\xb6\xe4\xcd\x9b\xb0\x2a\xc6\xca\x34\x84\x1d\x38\x28\xfe\xa1\xc7\x4a\x7e\xb6\xd1\xb8\xab\x66\xb8\x85\x31\xb4\xbe\xc3\xaf\x5f\xd5\x7c\xb8\xab\xd3\x39\x6b\x57\xb6\xc1\xa5\xa5\xed\xb8\xfd\x42\x0a\xed\x6b\x8f\x06\x0e\x26\x19\x58\x6f\x67\x3d\x2d\x1e\xbb\x8a\x98\x89\x2e\xd6\xba\x2a\x3b\x40\xfd\xf1\x28\x4c\xc4\xd6\xbf\xba\xc3\xeb\xf6\xf6\xb6\xad\x63\xde\xca\x48\x9a\x6f\x81\xd4\xde\x52\xd4\xdd\x85\x6f\xd9\x95\x76\xfd\x97\x2a\xbc\xd2\xbd\xcb\x2a\x05\xf1\x62\x3b\x51\x25\xdb\xa5\xff\xa0\x62\xca\x33\xc2\x5e\xff\xf6\xe4\xb7\x77\xed\xc4\x94\xaa\x30\x14\x9e\x64\x9a\xf2\xc8\xf3\x50\x26\xa3\xbf\xd9\x3c\x5a\x59\xf7\x40\x12\x81\x29\x65\x3e\x62\x81\x31\xfd\x27\xed\x66\xe5\x68\xba\x0d\x9b\x55\xc2\x6f\x29\xc7\x00\x18\xac\xe0\x3a\x63\x31\x6d\xef\x38\x0a\x31\xf2\xff\x7f\xad\x05\x18\xb5\xdd\x05\xc8\xb4\x29\x02\xb5\x35\xd1\xb6\x6e\x11\xd2\x0e\xb8\x6f\x60\x83\x3a\x6c\x89\xf2\x2a\x02\x09\xe8\x3c\xcf\xa8\xdf\x18\x18\x20\x26\x5c\xc1\x30\x24\xf3\x94\x83\xef\x70\x6b\xa0\xef\x53\xe2\xe6\x8e\x7f\xac\xa4\x25\x35\x63\x03\x1c\x4e\x29\x64\xfe\xb5\xee\x89\x12\xe3\x4d\xba\x71\x9f\xea\xe1\x1f\xcb\xa4\xf9\x81\x62\x43\x57\x88\xd8\x8c\xb2\x65\x5a\x19\x87\xf8\xd8\x83\x02\x5d\xc5\xe8\xd9\xa2\x20\x4b\xb1\x9c\x8b\x41\xad\x44\x98\xca\x63\x58\x63\xe0\x73\xf9\xac\xc0\x38\xc7\xc6\x5e\x10\x68\xbb\x44\xaa\x5e\x98\x41\xba\x83\x5b\x31\x02\x1f\x73\xad\x01\x63\x53\xe7\xe5\xb0\xdc\xe0\x16\x5e\x93\x27\xcf\x9f\x9e\xda\xed\xee\x3e\x14\xd1\x32\x71\x94\x0d\x9c\xff\x61\x3e\x50\x36\xc2\xcb\x23\x7e\x5b\x3a\x86\x31\x3d\x41\x33\x8b\xee\x67\x6e\x4a\xa4\x7d\x07\xed\xa5\x72\xcc\x23\xcc\xd4\x34\xc9\xd5\x55\x85\xfc\x26\xbe\x26\xa7\x76\x14\xff\x58\x67\x7f\xe8\x22\x3c\x03\x67\x74\x74\xf4\xdf\xe3\x6b\x0b\x64\x7a\xdf\x65\x2f\x32\x39\xc6\x38\xbc\x4b\x7e\xaf\xd3\xdf\x96\x7c\xe3\xd6\x66\x9c\x79\x89\x90\xc2\x54\x0f\xae\x97\x1a\x53\xba\x7e\x3c\x98\x34\x92\xed\xd1\xf1\x60\x62\x78\xc0\x02\xf2\x45\x4a\x65\xa4\x84\xe8\xe8\x63\x7d\x8b\x2e\xd5\x86\x26\x26\xa1\x7f\x53\x37\xd3\x70\xce\xec\x33\x26\xac\xb1\xb3\xc0\xed\x34\x54\x8b\x5f\x40\x49\x80\x0d\xe9\x2f\x6b\x60\x98\x3f\x31\xcc\xf9\x73\x3c\x69\x85\x80\x16\x27\xa7\x1c\x9b\x8b\xb5\x56\x68\x47\x09\xb7\xb8\x52\x97\xec\xf1\xe4\xa7\x03\x87\x06\x56\x49\x38\xe7\xf1\x8d\xe1\xd2\x9c\xda\xea\x74\xf7\xf8\x16\x1c\x91\x65\xd0\x27\x4d\xed\x53\xfa\x5a\xeb\xe2\xcd\x47\x31\xd4\xc5\xa2\xab\x71\x0b\x40\x2f\x4e\x4c\xfb\xda\x32\xf9\xd2\xca\xa8\xa0\x72\x69\xdb\x97\xe6\x6f\x1f\x0d\x5f\xac\x34\xae\x9e\x4e\x93\x40\xac\x17\xb3\xde\x1b\x47\x8f\xe5\x96\x7d\x36\xc5\xc9\xd6\x95\x8f\x6e\xf2\x0f\x17\x1e\xaf\xc9\x42\xb6\x09\x3a\xb7\xb1\x31\x38\x5f\x01\x3a\x81\x74\x4d\xb9\xe7\x46\xa9\x23\xe3\xb3\x18\x7c\x6a\x59\x01\xb6\x4a\xc1\xdd\x9a\x49\x16\x99\xdb\x56\x9c\x72\xc6\x10\x52\xc7\xfb\x11\x9f\x67\x7b\x6b\x1c\x94\x5f\xbe\x7a\x31\x79\xf5\xf1\x1f\x4f\x9e\xda\xf9\xa5\x22\xb4\x8a\xd8\x5a\xdd\xd4\xc9\x8a\xdc\xc8\x14\x15\x74\xd2\x75\x29\x23\x62\xda\x08\xf2\x49\x7a\xa3\xba\xee\x54\xeb\x8e\x23\x21\xa3\x7e\xe4\x89\xce\xcd\x46\x26\x35\xcd\x46\xb2\xdd\x45\xea\x42\x30\xaa\x95\x8a\xea\xce\x21\x36\x61\xa0\x79\x24\x50\x8c\x34\xd7\x0b\x68\xdf\xd0\xa3\xd3\x07\x3a\x10\x80\x69\xb4\x0c\x11\x73\x03\x34\x13\x20\x69\x68\x14\x64\x7b\x19\x94\x66\x1b\x40\x6d\xc8\x6c\x4f\x1b\x5a\x12\x8c\xda\xba\x47\x93\xf6\x75\x8f\xcc\x72\x17\xa3\x92\x5a\x27\x71\x58\x2e\xf0\x78\xf3\xad\x70\x32\x25\x1d\xac\x23\xf8\x88\x7b\x9d\x46\x48\x62\x98\xc6\x71\x0c\x53\xe2\x5b\xce\x42\x1d\x93\x9b\xac\x19\xfc\x68\xe0\xbc\x42\x90\x11\xb0\xa4\x0c\xa9\x42\x93\xe5\x72\x0f\xed\xb5\x93\xca\x0a\x4c\xc5\x6c\x0f\x23\x93\xd4\xd1\x0b\x97\x63\xa3\xc1\xda\xc9\xc6\x00\xbc\x25\x08\xbc\x34\x0d\xc2\xb6\x22\x20\xca\x77\x7b\x23\x3f\x9f\x36\xfb\x4e\xc8\x49\x22\x24\x74\xa0\x2a\xe3\x6f\x9d\xaa\x8c\xbf\x29\xaa\x32\x3e\x34\x55\xe9\x50\x4d\xad\x33\x55\xe9\xb2\x15\x76\xaa\x32\xde\x82\xaa\x3c\xce\x04\xbb\x7c\xb2\xd1\x96\xb1\x8d\xb6\xc8\x67\x3f\xab\x77\x2c\x70\x28\xd0\x9b\x56\xa6\xee\x56\xd4\x67\xdc\x27\xf5\x21\x54\xb8\x28\xd7\x69\xac\x82\x0a\xbd\xa1\x02\x64\x5b\x92\x1d\x50\x98\xd9\xbc\x73\x5a\x51\x47\x2a\x9c\x26\x67\x4e\xf5\x9f\x4d\xf6\xaf\x03\x93\xad\x6e\xdd\xcd\x0e\x4d\xb6\x2c\x80\xde\x2f\xd9\xea\xd0\x01\xa8\x33\xd9\xea\xb2\x15\x76\xb2\x35\xda\x9a\x6c\x8d\xaa\xc9\xd6\xe8\xfe\x90\xad\x51\x13\xd9\xea\x43\x71\xb5\xeb\x9a\x3d\xaa\xaf\x01\x62\xe2\xd0\x99\x11\x77\xab\xc7\x73\x7e\xf1\xab\xdd\xd6\xdb\x56\x5f\x55\xfe\x13\x2e\x24\xa1\xd4\xd1\x71\x39\xba\x2f\xef\x56\x8a\x6d\xd5\x04\x85\x50\x81\x67\xd8\x14\x91\x29\x87\x34\xe4\x0d\x78\xe5\x22\x72\xe5\x43\x16\x77\x98\xc0\x1c\x40\x02\xa0\x9e\x56\x55\xc3\x95\x30\xf3\x96\x5a\x01\x07\x90\x21\x10\x71\xe4\x83\x19\x65\x60\x4a\xc5\x02\x70\x2c\x22\x35\x3f\x18\x00\x48\x7c\xc0\x90\x76\x59\xa8\x86\xb4\x44\x67\x4f\x49\x94\xd9\xc4\xf6\x92\xa1\x41\x29\xc8\x21\x21\x54\x64\xab\x5a\x37\xba\xed\x2c\xeb\x88\x38\x02\x4f\xa3\x60\x09\x7f\xff\x0b\x07\x39\x28\x27\x98\x5a\x9c\x71\x73\xd5\xce\x1a\xf9\x40\x61\x87\xb2\xf1\x71\x2b\x6e\x80\xf8\xde\x03\x8a\x54\xa3\x48\xce\x75\xd2\x0c\x89\xd4\xcd\xfc\x00\x0c\x4b\x0c\xd1\x9f\x18\x18\x3a\x71\xf2\x3b\x85\xc5\x7e\x09\xa9\x5c\x87\x0e\x1e\x01\x21\xc4\x49\x9f\x22\x48\x00\x5a\x52\x81\x6f\x91\xa6\x6c\x43\xf0\x72\x06\xc4\x02\x31\x09\x45\x40\x68\x72\x17\x72\x4e\x3d\x6c\xaa\xa4\xc9\x37\xc5\x42\xbe\x42\x04\x22\x02\x50\xf5\x8e\x86\xee\x40\xfe\x49\x12\x60\xcb\x61\xe4\xbd\x15\xa3\x64\x9e\x12\x6d\x20\xa8\x04\x6b\xff\xb4\xdb\xc7\x7c\x89\x39\xd7\x8d\x3d\xcb\xe4\x3b\x73\x7b\xb7\x14\xbc\x5a\x41\xb2\x69\x1c\x4d\x2f\xd5\x6a\x50\xfd\x1d\x83\xbd\x1d\x85\x5a\x85\xa7\x49\x67\x8b\xeb\x13\xa8\x86\x35\x98\xe0\x65\xb4\xac\x85\x8f\x09\x5b\xa9\x0c\x08\x2a\xec\xe3\xdb\x1b\xb8\x6e\x3b\xe1\x3d\x73\xc2\x07\xa4\xfa\x66\x90\xaa\xbc\x95\x07\xc4\xab\x26\xa1\xe2\x01\xaf\xbe\x19\xbc\x2a\x6f\xe5\x01\xf1\xaa\x41\x3e\x7b\x40\xab\x6f\x06\xad\x4a\x3b\xd9\x27\x56\xd5\xda\xca\x7a\x36\x7d\xa9\x6d\xea\xcf\xee\x95\x6f\x26\x7c\x58\xf3\xd7\xe8\xed\xfb\x2f\x47\xb7\x6f\xa7\xf6\xd0\x0d\x53\x10\x48\x57\x63\xba\x85\x0c\x43\x22\x34\xca\xec\xe3\x72\xbd\xf5\x2d\xfb\x7e\x12\xd6\xa7\xd7\xff\x0f\xed\x18\x71\xde\xc8\x83\x62\x95\xca\x6d\x86\x6d\x1d\x7d\xa4\xe7\x61\x9c\x21\x37\x6d\x06\xb2\xa8\x0d\xf9\x4e\xb6\x44\xbd\x6d\xfe\x29\xaa\x10\x7a\x68\xf0\x54\xbe\x01\xae\xe2\x95\x6f\xe4\x2c\x69\xd1\xe9\xbe\xe5\xcb\xb5\x5d\xee\x6d\x33\x6e\xf2\x39\xb4\xff\x72\x5d\x87\x8f\xea\x31\x96\xd4\xbb\x71\x8d\xe6\x58\xf5\x76\xe3\xfb\x78\x99\x69\x5b\x53\x13\x18\x57\x3b\x85\x70\xbd\xe3\x11\x6a\xe0\xbb\xb9\xab\xa7\x9b\x0b\xa8\xe6\xa4\xbc\x54\x7a\xcf\x56\xe7\x24\x56\x9d\xb2\xa7\x44\x0e\xdb\xff\x19\xa9\x56\xb8\x1f\xce\xca\xc3\x59\xd9\xf9\x59\xf9\x25\x49\xdb\xde\xe6\xb8\xe4\xd2\xc2\xd3\x13\x63\x06\xdf\xcd\xa1\xa9\xd4\xfd\x1e\xce\xcd\xc3\xb9\xd9\xf9\xb9\xb9\x34\x7a\xc5\x56\xc7\x26\x55\x4e\xb2\xa7\x46\x0f\xbd\x9b\x43\x53\xa5\xd8\x3e\x9c\x99\x87\x33\xd3\xf5\xcc\x94\xe2\x41\x46\x8d\x3e\x8d\x6d\xf5\xa5\x5c\x2e\x90\x39\x99\x35\xa5\x1f\x2d\x67\xfa\xbc\xf2\x48\xab\x13\x7f\x34\x30\xbf\x2b\x9a\x4a\x37\x9e\x6c\xdd\x79\x7e\x01\x89\x6f\xd7\xb5\x8a\x15\xce\xcc\x37\xcd\xfd\xcf\x03\xab\x2e\x06\x7e\xc1\x62\x01\xde\xcb\xa1\xc1\x0b\x48\x7c\x70\x19\xc7\xe1\x36\xc7\xb5\x95\x90\xaa\x98\xf8\x93\xa7\x11\x3a\x5b\x47\xcd\x89\x07\xd1\xbc\x10\x72\xdd\xf2\xc4\xb5\xa7\x17\xa0\xdd\x42\xed\xc7\xc4\x16\xc3\x16\x46\x41\xa0\x37\xc1\xc9\x04\x65\xa9\xa2\x19\x99\x96\xbf\x98\x08\xc4\x6e\xf5\xe6\x8c\x8e\x8e\x8e\x3e\xd7\x87\xb0\x55\x1e\xac\x7e\x48\xd7\xf6\xc4\xab\x17\xf2\xd5\x07\x01\xeb\x8b\x08\x6e\x41\xdd\x7a\x20\x64\x47\x55\x77\xce\xbf\x01\x0a\x77\x5a\x4b\xe1\xce\xb6\x25\x70\x01\x9a\x09\x57\x45\x87\xb6\x25\x70\x67\x39\xfa\x66\x15\x11\xf4\xb9\xbf\x56\x96\xed\x4b\xe4\x51\x06\xb3\x49\xe7\xbd\x93\xb7\xb3\x43\x52\xb7\xe2\x2a\xdb\xd3\xb6\x24\x26\x77\xb5\xc0\x22\xdb\xee\xe8\xb4\xeb\x91\x79\xa0\x5b\xdf\x23\xdd\x3a\xab\xba\x71\xfa\x0d\x90\xad\x93\x5a\xb2\xf5\x78\x5b\xb2\xb5\xc2\x62\xa1\x7a\xe3\xb7\xa5\x5a\x8f\xf3\x54\xcb\x72\x90\x9f\xeb\xee\x88\xbb\x21\x51\x8f\x0f\x49\xa2\x5e\x41\x36\x47\xe0\x05\x82\x3e\x62\xfd\x93\x13\x90\xec\xc5\x03\x61\xd9\x09\x61\x69\xbf\x1d\xad\x36\x21\x66\x45\x49\xda\xe5\x4c\xb8\x30\xc0\x73\x82\x7c\x90\xe9\xb3\x5f\xaf\xd2\x56\x96\xa9\xaf\x16\xdc\x8f\x06\xce\x35\x9d\xcf\x03\x04\x28\x03\x54\x2c\x10\x03\x30\x6d\xf8\x7c\x48\x42\xfb\xb8\xea\xc6\xc9\x37\x40\x68\x27\xb5\x84\xf6\xb8\x17\x42\x1b\x48\x02\xa2\xe8\x4e\xc9\xbc\x55\xa6\xb4\xc7\x8d\x94\x36\x4b\x8f\x76\x46\x71\x8f\xf7\x46\x71\xdb\x8e\x52\x2a\x37\x9b\x27\x2c\x5d\x08\xb7\xe5\x38\x57\x4b\x96\x3a\xcc\x6b\x2a\xc5\xd4\x4c\x4a\x58\x66\x2a\x71\x5f\xcb\xee\x14\xab\xb7\xc5\xd7\x2c\x46\xc0\xb9\x5c\x01\x8d\x44\x80\xf3\x85\xa9\x9f\x00\x79\x4f\x2c\xa0\x00\x73\x8a\x54\xa3\x6e\x08\x38\xf2\x28\xf1\x81\x7c\x16\x4c\x91\x07\x23\x8e\x00\x16\xbf\xff\x85\x03\x06\x15\xd1\x09\x68\xa9\x66\xe7\x7e\xa8\xf3\x83\xec\xfd\xed\xc8\xde\xc7\x8d\xa5\x05\xee\x31\x4b\xa8\xf6\x73\xc4\x99\xd2\xdb\xb3\x04\x1f\xb2\x9b\x04\xa3\x6b\xf9\xc1\xb8\x91\x1f\x5c\x42\x76\x03\x9e\xea\xb1\x76\xc3\x0c\xc6\x87\x14\xbf\x93\xe5\xed\x40\xf6\x36\x15\xfb\x1f\xc8\xca\xb7\x41\x56\x2a\x4b\x03\x8c\x76\x16\x69\x98\x43\x9a\x1e\x03\x0e\xef\x4d\x1f\xb2\x5f\xa2\x7f\x5c\x7c\xfc\xe1\xbc\x65\x7f\x8c\x0a\x02\x97\xae\xa6\x32\xe7\xf6\xca\x5c\x07\x4f\x73\x6d\xca\x3a\x67\xe7\xc0\xdb\x29\xd4\x4d\xf6\x94\xa4\xa2\xaa\xd7\xb7\x0f\x4c\xd6\xaf\xbb\x2a\x67\xdc\x8e\xec\xe6\x5d\x02\xcb\xf4\x23\x99\xb8\xaa\x04\x20\x85\x4b\xdb\xc1\x37\x03\xe8\x52\x7b\x95\x7e\x65\xab\x06\x98\xe8\x79\xa1\x2e\x51\xdb\x29\x90\x78\x8b\x0f\x5e\x45\x53\x57\x6c\xf1\xd1\x2c\x94\xb2\x8d\xde\x36\x9b\x8d\x2e\xac\x08\x3a\x41\xa1\x74\xa9\x35\xed\xd9\x3c\x0b\x2f\x83\xc8\x2a\x60\x9c\x92\x60\x0d\xd0\x2d\x62\x3a\x74\x1c\x13\x95\x11\x97\xa0\x29\x20\xf0\x36\x4e\xa1\x33\x7d\x17\x80\xd6\x09\x2b\x2b\x92\xb7\x4c\x89\xcb\x1d\x3f\x6b\xb9\xa5\x2b\x75\x35\x33\xe3\x87\x93\xb7\xfd\xc9\xbb\x0f\x38\x37\xc7\xb7\x48\xaa\x6d\x01\x55\xe9\x99\x68\x19\x2e\x20\x57\x99\x0f\x3e\xa0\x33\x81\x08\xf0\x69\x34\x0d\x10\x80\x1c\x40\x10\xc2\x39\x02\x0a\x2b\x86\xe0\x0a\x13\x0f\x49\x64\x5c\x9b\xa4\x51\x4e\xc1\x3c\xa0\x53\x18\xa8\x66\xb3\x68\x90\xde\xc3\x4b\xc9\x9d\x20\x11\x2a\x1d\x62\x81\x82\x10\x93\x39\x80\x12\xcd\x19\xb8\x41\x28\x94\x8f\x62\x06\xa6\x08\x32\x4c\xe6\xbc\x1e\x9f\xfb\x67\xd1\x3d\x35\x1b\xcc\x0f\xaa\x72\x26\x0e\xcd\x9c\x5f\xd2\x57\xff\xfc\xe9\xe9\xc5\xa3\xc6\x5c\x80\xad\x03\xf3\x53\xb6\xdd\xba\x46\x51\x45\x2c\x58\xc3\x48\x36\xfa\xa5\x61\xdd\x42\x74\x30\x9b\xb2\x61\xf8\x97\x04\x61\x3b\xd2\x90\xcf\x9c\xc9\xbc\xf3\x34\x4d\xb0\xa9\x0c\xdc\xaa\x18\xc5\xe6\xaa\xfc\x25\xfe\xbd\xd1\x68\x41\xc1\x3e\xfc\x2a\xfe\xbd\xd1\x68\x05\x45\xe8\xd2\xfc\xdc\x68\xac\x69\x00\x73\xa0\x7e\x1a\xff\xde\x70\x9d\xe4\x26\xb7\x4c\x62\x1f\xab\x4e\x50\xe9\x13\x1f\x40\xb6\x73\x52\xf2\xfa\xbb\xf4\xca\x46\xab\x2c\x84\xbd\xbf\x34\x3f\x37\x1a\xab\x9c\x96\x7a\x95\x5e\xd9\x0c\x73\x4b\xf1\xc5\xbf\xa4\x57\x36\xc4\xb7\x42\xf0\xe5\x65\x72\x61\x5f\x11\xad\xd5\x44\xcc\x98\x4b\xad\xa4\xa6\x9e\x88\xa5\x6f\xe6\x89\xd8\x5b\x7d\xfd\x50\x34\xac\xc2\x06\xfc\x36\x73\x69\xa3\x5d\x8c\x25\x59\xfb\xf0\x7d\x9c\x89\x8a\xa1\xfb\x38\x1f\x15\x43\xf7\x74\x56\x2a\x46\xef\xe7\xdc\x64\x07\x57\x90\x8a\x65\xb4\x7b\x7a\xa0\x16\x34\x08\xe8\xaa\xfb\x71\x8a\xdf\xcb\x1f\xa6\x17\xea\x6a\x5f\x67\x49\x5e\x34\x05\xfa\x9d\x29\xf4\x6e\xe6\x8c\x46\xc4\xff\xf1\x5f\xc6\x27\x4f\x9f\x9c\x8d\xfe\x27\x08\xa1\xef\x63\x32\xff\x71\x72\x94\x36\x5a\xd8\xe2\x9c\x60\x72\x8b\x98\xd0\xdb\xb6\xc3\x33\xd3\xf0\x99\xbe\xce\x4f\xc3\x67\x7a\x3c\x4b\x0d\x5f\xea\xef\x5c\x35\x7c\xe8\x3e\x1d\x2b\x8e\xbf\x76\xcb\x57\x8a\x45\x6d\xf3\x5e\xfe\x58\xe9\xf3\x04\xae\xf0\x57\x3b\xe7\xdb\x35\x83\xd2\x5d\x82\x32\xc8\x13\xff\xee\xbc\xa1\x99\x41\xde\x24\x11\x4e\x1b\xa1\xc5\x12\xf9\x38\x97\x75\xff\x3a\xb9\xb0\x99\x30\x5b\xb0\x5e\xbc\x8a\x7f\xef\x21\x25\x61\x77\x2a\xb8\x46\xab\xfe\xd4\x6f\x53\x7f\xef\xb0\xda\xf7\xe4\xea\xfc\xe5\xd1\x6f\xaf\x46\xdb\x98\xc6\x93\x22\x83\x0d\x6d\x71\x74\x58\x7e\x3a\x40\x08\x03\x24\x04\xca\x74\xe1\x92\x03\xbd\x8b\xaf\xc6\x1d\x52\x55\x4d\x55\x86\xc3\x38\x10\x28\x6e\x53\xb8\x84\xfe\xf5\x02\x2d\xe3\x24\x8a\x25\xf4\x81\xfe\x3d\x70\x9e\x78\x1e\x22\x42\x59\x88\x08\x8a\x04\x83\x01\x1f\x5a\xfa\xd4\xa6\x16\xad\x5e\xa7\x66\x8a\x22\x5f\x24\xf5\x15\x9d\x77\xfa\x0a\x30\x97\x06\x8e\xfe\x03\xcc\x18\x5d\x9a\x40\xa7\x17\x90\x2f\xf0\x05\x65\x21\x88\x6b\x2a\x0f\xc1\x5b\x65\xdd\x9a\x52\xc6\xe8\xca\x14\xea\x80\x81\x40\x8c\x40\x5d\xc8\x4c\xad\x52\x1b\xc2\xd4\xfc\x00\xf7\x24\x00\xf6\xb9\x56\x53\x54\x2d\xb3\xd6\x67\xa6\xcc\x5a\x71\xad\xb1\xc1\xd8\xa3\xe4\x8b\xc1\xf2\x7c\xe1\x36\x55\x77\x84\x21\x1e\x52\xa2\xca\xa9\xb5\x6b\xe6\xbf\x9b\xc3\xae\x51\xba\xcf\xb3\x7e\x5f\x7a\x4e\x7e\xf8\x75\xfc\xf3\xd3\x5f\x4f\xda\xf7\x9c\xb4\x1e\xf8\x74\x35\x05\xf6\x7a\x41\xc3\x35\x88\x2d\x48\xf5\xf6\xf7\x9a\x48\x1e\x2d\x11\xa7\x4d\x0d\x09\x55\x9d\x69\x5d\xc1\x20\xe1\xaa\x83\x5e\x89\xfb\xa2\x33\xef\xec\xfc\x0c\x1e\xb9\xa7\xe7\xc7\x53\xf7\xfc\xe8\xf1\xc4\x3d\x85\xa7\x33\x77\x3a\x3b\xf2\x8e\xe1\xf1\xd1\xc9\xec\x6c\x92\x35\x6a\xc7\xbd\x8b\xac\xcd\x00\x73\xbd\xfb\xe4\x7e\xb5\x18\xdc\xda\x07\xbb\x0b\x7f\xeb\x1b\x83\xfb\x69\x92\x97\x1b\xd4\xc7\xb3\x99\x7b\x8b\xd1\x0a\x1d\xba\x59\xde\x6f\xcf\xde\x3c\xbb\xfb\x80\x6e\xb7\x41\xe3\xcc\x6a\x5c\x4c\x38\x62\x22\x2e\xf1\x9e\x4b\xce\xc5\xb3\x19\xf8\xa8\x9e\xd2\xf4\xea\x65\xe6\xd1\xce\x1e\xa6\x86\x6a\x29\x2d\x5f\x6c\x8c\xec\xc8\xa0\xf8\x17\x3a\x55\xfb\x96\x31\x8b\xcb\x5f\x9f\xd3\x1e\x94\xf1\x72\xde\x92\x60\x6d\xc2\x5f\x7a\x6a\xc2\x69\xf3\x04\x59\xc1\xef\xa3\x00\x09\x4b\xeb\xa5\x12\xf0\x2f\xcd\x83\xdf\x07\xec\xe3\x65\x1f\x12\xf4\xe9\xfe\xbb\xb7\x88\x4d\x29\x2f\x79\x56\x4b\x9b\xf0\xcc\xc7\xe2\xfb\xd8\x00\x24\x57\xb2\x33\xe0\x57\x38\xb5\x3b\xf8\x42\xb5\x04\x28\xf0\x12\x71\x00\x81\x9c\x3b\x58\xe1\x20\xd0\x7e\xf8\x05\x94\x42\x20\xf0\x68\x14\x06\x48\x85\xb3\xf2\x21\x78\x8d\x09\x65\x40\xac\x10\xbc\xe1\x40\x50\x00\xc1\x17\x3a\x05\x3c\x44\x9e\x94\xad\xa2\x40\x48\x19\x4c\x73\x55\x39\x5c\x83\x23\xb3\xd9\x31\x9f\x45\xa5\x44\xef\xab\xc5\x9e\xd7\x90\xac\xc1\xc5\x02\x92\x79\x8d\x06\xfe\x2d\x21\x91\x5a\xf6\xa5\xba\xd4\x3b\x12\xf5\x2e\x17\x64\xf6\xab\x4f\xb9\x20\xdf\x6c\xd0\xfd\x12\x2d\xa7\xf4\xc0\x22\xc2\x92\x9d\x06\xe1\x6b\x6a\x57\x6d\x75\xf3\x53\xdd\xb5\x3f\xd3\x57\xb7\xa5\xe4\xa0\x96\x57\x5a\x75\x95\x06\x7c\x2c\xd1\xb1\xd8\x6a\xb8\xd0\x13\x56\x23\x69\xca\x18\x32\xcf\x3f\x85\xec\xd2\xf4\x86\x75\x78\x18\x60\xa1\xb6\xaf\xc6\x76\x65\x8e\x80\xee\xae\x9a\x3d\x01\x01\x9a\x23\x52\x88\x4c\x75\x0a\x3d\x57\xb5\x29\xae\xaf\xa6\xab\x3a\xae\x56\x5d\x8b\x7b\x86\x3a\x35\x4d\x4f\xc7\xba\x27\xb6\xdc\x88\xb4\xe3\x68\xbe\x1f\x6b\x7c\x3b\xdb\x11\x35\xdf\x92\xb5\xf1\x0b\xdb\xb4\x55\x2d\xea\x2e\x9d\x9a\xaa\x96\x60\x51\x71\xb1\xba\xa9\xea\xa4\x6b\x53\xd5\x1a\x5d\xcb\xd2\x0a\x75\xdc\xb2\x15\x6a\xed\xb8\x41\xdc\x3c\xae\x3a\xdc\x38\xfd\xda\xa6\x4d\x5e\x1b\x09\xe8\x78\x30\x69\x6a\xc6\x6a\xe9\xe0\xda\xca\x76\xbd\x4d\x3d\xfb\xf6\xe6\xe4\x27\x40\xd9\xc3\x95\x9d\xc4\x84\xd4\x5d\x66\xa8\x02\x78\x0a\x59\xa6\x08\xfd\x8c\x32\xb0\x5a\x20\x1d\x8f\x97\xa5\x1e\x40\x07\xb4\xe9\x22\xf7\x88\x08\x06\x83\xcc\x6b\x71\xac\x1e\x9c\xa3\x21\x78\xa9\x72\x60\x20\x50\xfc\x8c\x01\x5d\xf0\x55\x27\xcf\x30\xf4\x47\x84\x19\x52\x75\xf4\x55\x29\x0d\x9d\x97\x27\x05\x0c\x8e\x90\xfe\x28\x14\xf2\xd5\x29\x0a\xb4\x45\x4a\xe1\x91\x12\x2f\x2a\xf8\xdf\xbd\x61\xef\x9c\x92\x44\xa9\x8d\xc9\xb2\xbc\xd8\x44\x8e\xbf\x01\x5e\x6f\x63\xcb\xbb\x63\xfb\x07\x66\xf8\xe3\x63\xfe\x1e\xd3\x5f\x5e\xf4\x1d\x49\xb6\x7d\x52\xcd\x06\x01\x63\xa5\xbd\xcb\x44\x8e\xb5\x6a\x80\xd6\xd6\x1b\xac\x7b\xf0\xff\x78\x72\x14\xde\xfd\x4f\xa0\x9a\xf4\xff\x38\x3e\x92\x3f\xaa\x3d\x5c\xe6\xe0\x34\x08\x35\x1b\x9d\x9e\xbd\x44\x98\x6e\xec\xde\xbb\xb6\x11\x57\x25\x49\x82\x90\x51\x89\xf8\xca\x8a\x1d\xac\x01\x5f\xd0\x95\x26\x89\x58\xa5\x1c\xea\xe0\xe4\x29\x64\x92\xcc\x02\x4c\xbc\x20\xf2\x95\x4e\x17\xb7\xdf\xa7\x51\x42\x8d\xa7\xf4\x6e\x00\x20\xe7\x91\xd4\xfa\x54\x7c\x35\xfe\x8a\xe2\x9b\x1e\x25\x02\x62\x82\x18\x40\x81\x5a\xd6\x40\x51\x5b\xcc\x81\x8f\xb8\x4e\xd1\x16\x14\x4c\x11\x50\x50\x31\xbd\x51\x2e\xae\xae\x86\x1b\x87\x90\xf5\x57\xdf\xb7\x4d\x3e\xd2\xee\x08\x73\xed\xda\xf7\xea\xd1\x56\x7b\xa2\x40\xd4\x25\xfa\xaa\x44\x11\x54\x96\x5d\x32\xcc\x77\x40\x15\x7e\xc1\x62\x71\x91\x80\xe5\x5b\x24\x10\x2f\x67\x00\x02\xa5\x52\x4a\x82\x70\x8b\xf5\x19\x37\x43\x79\xd4\xcf\x7a\xc5\x33\x42\x7f\xba\x20\x45\x47\x24\x73\x1c\x00\x2c\xb4\xad\x67\xaa\x5a\x16\x25\x47\x5b\x13\x01\xa6\x1d\x65\x3e\x26\xf3\x8a\xe1\x19\xf2\x72\x81\xb2\x19\x7a\x11\x04\x74\x25\x5f\x94\x42\xa3\x17\x71\x41\x97\xda\x7f\x88\xbf\xea\x02\xff\x7f\x16\x52\xd1\x0e\xdf\xee\x0b\xd5\x98\x05\xe8\x0e\x4f\x71\x80\xa5\x9a\xba\xb9\x18\xa1\xa2\x62\x54\xb7\xd8\x5d\x10\x8c\x51\x86\x60\x3c\xfe\x16\xc5\x88\x46\xc8\x8d\x77\x04\x39\x4d\x5e\x0d\xe8\x26\xdf\x20\xe4\x76\x4f\x5f\x2f\x8b\xa2\x57\x56\x48\xf2\xf1\x12\x11\x8e\x29\xe1\x25\x51\xa9\x92\xa0\xed\xfe\xd0\x06\xf8\x16\x81\x28\xf4\xa1\xe8\x14\xc3\x56\x42\xbe\x74\x88\x9d\xf3\xf9\xdd\x1f\xdb\xf7\x0a\x4f\xc8\xfc\x3b\x41\x42\x82\x97\x52\x4d\xd6\xa2\xb6\x92\xf9\x3d\xed\xdd\xf8\xd3\x30\xd2\x16\x1b\x7a\x5f\xb8\x68\xaa\x89\x6d\xc5\x44\x4d\x06\xea\x37\x7f\x16\xa3\x65\x1f\x87\xf0\xf0\xd1\x99\x45\x08\xf4\x68\xe4\x62\x34\xf4\xe9\xea\xd0\x71\x5b\xcf\xcf\xd6\x2f\x30\x7a\x36\xb7\x1b\xb7\xa8\x0e\xcb\x1b\x94\xfe\x68\x1b\x0a\x13\x2f\xb2\x94\x54\xbd\x0c\x03\x04\x2e\x93\xdb\xd6\x23\x13\xd2\x15\x62\x2e\x47\x81\x54\x39\x12\xd4\xd3\x33\x90\xd8\xae\xef\x20\x5f\xfd\x09\x99\xb7\x78\x8e\x51\x90\xfe\x7a\x46\xe0\x34\x50\x77\x29\xd1\x94\x33\xc5\xd8\x78\x10\xe5\x17\x91\x17\xe2\xb1\xde\x9a\xf5\x7d\x36\x5d\xfb\xf5\x41\x98\x0b\xa7\xf8\xe6\xc0\x09\x10\x99\x8b\x85\x7c\x74\x94\x78\x7c\xd4\xd3\x30\xee\x85\x25\x69\xc6\x91\x6e\xc1\x2f\xaf\x2f\xa3\x74\x98\xd2\xf7\x8a\xde\x97\x3a\x2f\xdc\x28\x76\xda\xe8\x39\xb6\x88\x68\x9c\x34\xd3\xbb\xed\xa3\x0a\xde\xc9\xfd\x02\x57\x6a\x65\xc0\x8b\x18\x43\x44\x04\x6b\x30\x8b\x82\x19\x0e\x02\x2e\x15\x44\x29\x43\xa9\x98\xda\xdf\xff\xc2\x41\x8c\x1d\x80\x20\xe4\xf3\x82\xa9\x6a\xeb\x00\x02\x33\xb8\x94\xaf\x51\x29\x2f\x36\xc6\x3c\xf0\x1e\x99\xfb\x9d\x03\x06\x2a\x1b\xf5\x35\xbd\x22\xd9\xe6\xc4\xb1\x79\x4b\x0f\x87\xf0\xe3\x7d\x63\xfc\xb8\x03\xca\x83\x92\x7b\xaf\x2d\xda\x8f\x9b\x7c\x75\x7b\x8e\xbb\x89\xd1\x2e\xd7\x6d\x7a\x74\x74\xf4\xdf\x25\x5f\x46\x43\x70\x4d\x95\x76\xc1\x68\xa0\x5b\x42\x4b\x66\x2d\xcf\x04\x4c\xce\xca\x00\x40\xff\x4b\xc4\x85\x45\x37\xc1\x82\x67\x74\x13\xf0\x96\x20\xb0\x82\x6b\x15\xac\xe3\x2d\x30\xba\x45\x40\x98\xe6\x8e\x91\x14\x34\x80\x41\xe0\xfe\x0e\x9a\x42\xc2\xca\x93\xa6\xc4\xd8\x2b\xf3\xcc\x77\x7e\xda\x96\x90\xac\xdf\xd6\x9f\xb8\x49\xcd\x89\xcb\xbe\xde\xeb\xa9\x9b\x6c\x7c\xea\x46\x1d\x4e\xdd\xe8\x9e\x9d\xba\x5f\x16\x48\xe5\x42\x50\x06\x08\x35\x27\x27\xc6\xca\x85\xaa\xee\xa1\x77\x54\xb2\x1d\x79\x3c\x3c\x4a\x66\x78\x1e\x31\xb9\xbf\x43\x70\xbd\x0e\xb1\xa7\x9c\x2f\xea\x45\x2d\x61\x29\xd7\x37\xd5\xee\x98\xe4\x75\x4a\x3c\x94\x39\xaa\x6a\xec\x25\x65\xf2\xdc\x41\x02\x46\x47\xc0\xe0\xd6\x9e\x8b\x7c\xc4\xf3\xe9\x4f\x76\x9d\x51\x22\xe2\x3c\xb8\xc3\x8a\xaf\x8f\xd6\xf3\x27\xc7\xbf\xbc\xbb\xdb\x26\x5e\x3b\xbb\x9a\xa6\x64\xa3\x4e\x4a\xbd\x79\x61\x31\x2a\x3e\x9f\x50\xc7\x6c\x22\x9b\xae\xe7\x6f\xd1\x66\xcd\x30\xd9\x5e\xbb\x57\x74\x89\x40\xc8\x28\x47\x12\x0b\x67\x3a\xad\x41\xa2\xa7\x8a\xb1\x88\xeb\xd4\xbc\xa1\x02\x10\xe4\x21\xce\x21\xc3\xc1\x1a\x2c\x51\x5c\x88\x86\x21\xe8\x63\x32\x2f\xb7\xdc\xb5\x5e\xd8\x68\xd1\x63\xeb\xa2\x8b\xed\x86\x75\x46\xe0\x77\xb6\xf4\xea\x4e\xcb\x27\x4e\x21\x43\xf3\x3e\xae\x7c\x8f\xa4\x29\x73\xf4\xfa\xa6\x4e\x02\x7a\x37\x87\xce\x82\xf4\x7d\x7e\xf3\xfa\xed\xbb\xb7\x3b\xa8\x41\x84\x49\x80\x89\x42\x1c\xc1\x22\xb4\x75\xe5\x21\x17\x86\x61\x80\x5c\xbe\xe6\xaa\xc8\x58\x5b\x0b\x96\x02\x75\xfe\xd5\xbc\xf4\xd7\x38\x6e\xce\xa8\x55\xca\x21\x14\xeb\x10\xcd\xa0\x97\x49\x22\x94\x5f\x7c\x0e\x97\x38\xb0\xcf\xbb\x53\x6e\x5f\x2f\x86\xbf\xa7\x01\x26\x37\xaf\xa1\x77\xa5\xa6\xf0\x9c\xaa\x27\xba\x80\x6f\x2a\x07\x70\x97\xd0\xab\x00\x61\xbb\x0f\x6c\x09\x47\xeb\x47\xf6\x0f\xcc\x2b\x34\xa7\x08\x7c\x78\xd9\x11\x84\x5c\xbe\xe6\x46\xb8\x64\x66\xaa\x19\x6e\x4b\x80\x65\x86\xde\x3f\x98\xde\xd3\x29\x15\x1d\x3a\x13\x2b\x20\x31\xf3\x52\x1e\x44\xd5\x43\x6d\x09\xa0\x64\xe0\xfd\x83\xe7\xed\xdd\x7a\x8e\x08\xb8\x82\xf6\x74\xae\x1a\x18\x51\xf5\xa6\xcb\x61\x39\x5f\xaf\x61\xd0\x2d\xa1\xa5\x47\x77\xcd\xe8\xfb\x07\xd9\x87\x69\x44\x44\xd4\x11\x5a\x91\x79\x29\x0f\xa8\xea\xa1\xb6\x84\x51\x32\xf0\xfe\xc1\x73\x01\x89\x80\x0c\x05\x1d\xba\xe6\x2b\x08\x79\xe9\x7b\x85\x7c\xe6\xba\x01\xb7\x84\x53\x76\xec\xfd\x83\xea\x05\x0a\x6e\x91\xc0\x1e\x04\x6f\x90\x0e\xf8\xef\x00\xaf\x45\xfc\xb2\x4b\x50\x54\x4a\xf9\x6a\x1e\x7a\x4b\xc8\x95\x3e\xb0\x7f\xf0\x49\xd2\xe3\x72\xc4\xf0\xac\x2b\x0f\xcc\xbc\x98\x07\x5b\xfd\x90\x5b\x82\x2c\x37\xf8\xfe\xc1\xb5\xa4\x84\xf2\x50\x4e\xb0\x1b\xb4\x32\xef\xe5\x81\x55\x3b\xe0\x96\xb0\xca\x8e\xbd\x3d\xa8\xf6\xe7\x04\xcd\x28\x54\xfd\x69\x69\xf3\x48\x08\xc4\xdc\x25\x22\xd1\xa1\x4b\x57\x5c\x4d\x7e\xfd\x30\xfa\xfa\xcc\xae\xa5\xa9\xaa\xcb\x83\xc2\x3f\xdd\xbc\xa0\x66\xa9\xa6\x3a\x73\x16\xdb\x7e\x52\x77\xc0\x6b\x09\x84\x3d\xdb\xc4\x8f\xcb\xaf\xd5\xbd\xa8\xd7\x60\x7b\x27\xad\xdc\xc4\xb1\x8e\x14\xcd\x35\x48\x50\x4b\xab\x4d\x7a\x0b\x6d\xef\xb8\xc5\x74\xaf\x77\x01\xf4\x50\x75\xab\x20\x33\x56\x54\x4a\x4e\xd4\x83\x61\xde\xdc\x9e\x2c\x2d\x7e\xdd\xa6\xcd\x98\xad\x58\xbb\x9a\x23\x78\x4b\x52\x83\x4e\x7d\xef\xa2\xe6\x2f\xe6\x06\xbe\x5e\xd1\xfa\x81\x0b\xd0\xd9\x1c\xd8\xcf\x11\x14\x11\x3b\x34\xb8\xf3\x93\xd9\x05\x5c\xe3\xa1\xbb\x42\xb6\xf6\x72\x85\x35\xcf\x6e\xe0\xab\x3c\xa3\xdd\x8e\x67\x73\x4b\x95\x86\x77\x6f\xe1\x3c\xaa\x6e\xa6\xd2\x66\x49\xad\xad\x88\xcd\x2e\xc5\x94\x60\xba\x0c\x7b\x0b\x37\xe5\x21\x15\x04\xf4\x0d\xbc\xc5\x73\x98\xd6\x7e\x7a\x8f\xbd\x05\xb8\xc8\xbc\xf5\x40\x5b\xef\x0b\x6d\x2d\x3f\x52\x8b\x9b\xf2\x0b\xd9\xc6\x07\x2d\x3c\xb8\x19\xbf\x6d\xea\xcc\xcd\xfb\x68\x4f\x07\x0e\x65\x05\x1f\x69\x1c\xf6\xa3\xc9\x4c\xd6\xcd\xca\x18\x5c\x4b\xb4\x94\x77\x06\x8e\xa4\x15\x03\xe7\x7a\xc1\x50\xf1\xb9\xd6\xee\xd8\x6e\x11\x3f\x65\x58\x8d\xe2\x3e\x83\x2d\xc4\xc8\xe3\x92\x33\xb6\x91\xaa\xb5\xb8\xf5\xc0\x2e\x1f\xd8\xe5\x03\xbb\xdc\x13\xbb\xdc\x34\xee\xe1\x25\x01\x94\xf9\x88\x01\x41\x93\x5e\x23\x40\x33\x1b\x40\x52\x8e\xc9\x05\x43\x70\xa9\xcb\x61\x43\xe2\x03\x04\xb9\x8a\x1a\x4a\x1f\x19\x00\xc9\x86\xd3\xfc\x7e\x0e\xf8\x82\x46\x81\xaf\x72\xc8\xa4\xa2\x85\x7c\x5d\x25\x20\xa4\x9c\x63\x15\x35\xf1\x8b\xfc\x49\xa8\x48\x2e\x99\xa6\x28\xe9\x8b\x37\x28\x14\x80\x20\xa9\x9f\x2d\x10\x10\x34\xdc\x36\x10\x29\x23\x35\x2c\x21\x59\x2b\xb6\x51\x12\x18\x5e\xac\x43\x2a\x16\xca\xc8\x13\x80\x0a\xe9\x41\x55\x12\x7a\xa9\xdf\x7e\x10\x1c\xf6\x28\x38\x38\x85\xa2\x31\x05\xe6\x0b\xb2\xac\x77\xe0\x3c\xa7\x11\x93\xff\x48\xa6\x32\x70\xae\xf0\x9d\xfc\x5f\x74\x8b\x88\x93\xe3\xac\xcd\x6c\x75\x33\xf6\xe2\x64\x03\x71\x8b\x75\x4d\x6a\x4f\x76\xb9\x82\xc8\x7d\xe7\x47\xdf\xc8\xc6\xc4\xfc\xc9\xc9\x06\x8b\x76\xda\x9a\x72\xc0\x68\xcf\x5b\xf3\x56\x2c\x2a\x0a\xa0\x6f\xb2\x2f\x1b\x01\xab\x49\x2c\xbb\x5e\x20\x40\x09\xd2\x15\x5a\x7c\xec\x93\xdf\xff\x22\xc0\x0c\x0b\x80\xc9\x9e\xe4\xa9\xeb\x05\x26\xf3\x3f\x1d\xf6\xaa\x55\xe7\x43\x2e\x3b\xe1\x6e\x39\xec\xd2\xba\x2d\xb5\x97\x1f\x84\xb1\x5d\x09\x63\xd7\x0b\xc4\x50\xa6\xca\xa2\xea\x76\x38\xd5\x27\xcd\xc8\x64\x12\x7d\xe3\xde\x87\xba\xf0\xf8\x87\x97\x03\x30\x8d\x04\xc0\x42\xf5\x8e\x53\x31\xa7\x78\x09\xe7\x98\x20\x55\xfd\x43\x44\x46\x6c\x51\x83\x0b\xf5\xbf\x90\x21\x20\xe5\x9f\xac\x88\xa7\x44\xa1\x78\x68\xfd\xb5\x1e\xa5\x2d\xec\x51\xb2\xb9\xb4\xf5\xd2\xa3\xe4\x41\xda\xba\x6f\x66\x9a\x3a\x5a\x65\x3c\x5f\x77\x6a\xe3\x55\xe1\x6e\x13\x0f\xa9\x51\x27\x63\x91\x00\xfd\xab\xf8\xb5\xdc\xab\x34\xb3\x05\xe6\x82\xb2\x75\xcd\xdc\xfe\x8c\x56\x82\x12\x98\xd2\x16\x65\x65\x30\xed\xca\x9e\x50\x9a\xc4\x12\xf9\x18\xba\x21\x8c\x38\xaa\x9d\xc8\x83\xf5\xe1\x9b\x60\x78\x2f\x35\xb7\x99\x45\x72\xd3\x06\x59\xdb\x83\xe2\x73\x4b\x68\x2a\x0d\xcb\xed\xdf\x3a\x09\x29\xc3\x8d\x74\x27\xd6\x22\x27\xfa\x49\xf7\x67\x2d\xf1\xa0\x03\xf3\x1c\xb3\xa2\x9c\x33\xbc\x12\xae\xb5\xe0\x39\xd4\x36\x3b\x96\x40\xf5\xb8\x3f\x6e\x17\x81\x47\x8a\x3a\x58\x80\x25\xbc\x41\x1c\x70\x44\x74\x94\x3b\xba\x0b\x19\xe2\xba\x12\x87\x7a\x5a\xa7\xeb\xa8\x3c\x79\x41\x49\x6a\x92\x1a\x82\x6b\x93\xdc\xb6\x5a\xc4\xd5\x25\x2d\x8f\x81\x80\xd2\x1b\x0e\x02\x7c\x83\x8a\x71\xf0\xd9\x98\xff\x30\x43\xc0\xb8\x60\x34\xd7\xbd\xf1\x0d\x15\xe8\xc7\xec\xcb\x40\xf7\x49\x32\x19\x42\xb9\xb5\x71\xc0\x10\xf1\x11\x33\x15\xd3\x54\xd1\x36\xd5\x4a\x38\x80\x6b\x1a\x89\xb8\xc6\xda\x0c\xdf\x21\x1f\x84\x94\x63\x55\x28\x49\x15\x84\x33\x68\xa6\x72\x8c\x88\x86\x12\xe6\x00\xdd\x41\x95\x3a\x9d\x74\xcd\x56\x12\x21\x96\xfb\xa2\xbe\x0e\x3d\x11\xc1\xc0\x64\x0e\xca\x4f\xaa\xaf\x84\x61\xb0\x56\x95\x99\x72\xdf\xb1\x24\x03\xec\x31\xf6\x3f\x83\xf3\xfd\x45\x95\xe8\xae\xe0\x07\x0e\x28\xc1\x5f\x3e\xfe\xf0\xc7\x88\xd0\x6d\x92\x92\xcc\x42\xec\x54\xec\x85\xb9\x59\x4f\xba\x2c\xdd\xc0\xd3\x46\xe4\xe5\x26\xac\x8d\x44\xcc\xb4\x21\x9f\x32\x58\x2c\xf6\x9c\x63\x5a\xb6\xda\xbd\x66\xaf\x05\x9d\x9b\x0e\xeb\xf2\x26\x64\x18\x1a\x21\xa9\x4e\x48\x56\x8f\x9f\x28\xac\x14\x18\x06\xfc\xd1\x02\x2e\xa7\x11\x9b\xa7\xc1\x43\x9f\x9b\x19\x60\xed\xec\x32\xfd\xd5\x55\x9b\x31\x3a\xa7\x2d\xa7\xa2\x31\x53\xbd\xd0\x6a\x1a\x9d\x44\x0b\x33\xad\x52\x69\xed\xdc\x7a\x4a\xed\xd2\x2c\xcd\xe2\x25\x49\xce\xf6\x9d\xaf\x82\x4d\xcb\xb1\x5e\x61\x72\x63\x17\x62\xbb\x8d\xf3\x02\xb1\xaa\xcc\xa7\xed\xd3\x93\x04\x8b\xb6\xa6\x50\xfa\x0c\xf6\x47\x9c\x74\xce\x8e\xab\xde\xc4\xc6\x31\x7d\x50\x42\xf5\x2a\xc4\x4f\x2f\x8f\x27\x5b\x11\x2a\xcb\xa2\x0a\x44\xeb\xa5\x7a\x02\x5c\x66\x9f\xd8\xae\x3d\x83\xad\xe1\x61\xe3\x71\xb2\xd5\x2f\xb2\xce\xbd\x03\x5d\x2b\xaa\x78\x2a\x45\xef\x55\x7c\xb1\x0b\x0d\x0a\x21\xae\x37\x2d\x58\xdb\x5a\xa1\x5c\xcb\xaa\x6b\xc4\x96\xa0\x58\xf9\xb1\x7a\xa4\xec\x5b\x1f\xe3\xa2\xed\x6d\xb4\x89\x9d\x2f\xe4\x7d\x44\xa4\x70\xf2\xf7\x4e\xeb\xf8\xb5\x42\xb3\x3e\xc4\x02\x5e\x41\x2e\xc0\x87\xd0\x87\xa2\xa9\x3f\x74\x76\x11\x71\x44\xb1\x2a\x90\xee\x0a\x1e\x1b\xab\x09\x5d\x65\xc4\xf0\xcf\x45\xdd\xf8\xbe\x2a\x80\x4f\xe2\xf2\x13\x02\xcf\x17\x22\x58\x03\x1f\xf3\x30\x80\x6b\x70\x83\xd6\x8f\x14\xe5\x02\x98\xe8\xc5\x6a\xa1\x37\x49\xb4\xe7\x08\x11\x00\x45\xec\x18\x06\x74\xa6\x84\xe6\xad\xb5\xc4\xf2\x79\x77\x4d\x5c\x79\x0b\xa2\x05\x3e\x26\x8f\xf6\x44\xbd\xec\xed\xe6\xef\x07\x21\x33\x5d\x8a\x1f\x68\xd9\x9f\x8e\x14\x6c\x86\xc7\xa9\x05\xf1\x5e\xe1\xb1\xe9\x6c\xfd\x80\xc7\x0f\x78\xdc\x0e\x8f\xfd\xa4\x43\xf9\x7d\x42\x63\xdd\x37\xfd\x01\x8b\x1f\xb0\xb8\x1d\x16\x4b\xb9\xea\xbe\xe1\xf0\x4b\x32\xa3\x0f\x18\xfc\xe7\xc3\xe0\xdd\xf8\x96\x94\x74\x9e\x41\x4e\x1d\xf6\xa0\x6a\xdd\x08\x0a\x24\xa0\xc1\x0a\x05\x81\x0e\x31\x30\xdd\xc4\x4d\x37\xf3\xa4\xff\xd5\xbe\x0b\x71\x95\x8f\x54\x7f\xb6\xa5\x5c\x81\xe5\x83\x1a\x95\x56\xef\x5e\x1c\xdd\x91\xdb\x5f\xb7\x31\x2a\x65\x57\x53\x50\xcc\x7e\xbe\x7a\xfb\xc6\xf4\xfd\xfc\x36\xba\x7c\x36\x57\xbe\x96\xbf\xae\xb4\x39\x6b\x7f\xdd\x62\x6d\xb0\x76\x67\x51\xb9\x54\x41\x06\xe0\xaa\x8c\xd4\xf3\x28\x08\xc0\x25\xf5\xa2\x25\xaa\x29\x45\xf3\x0d\x6e\xc1\x2b\xdd\x66\xf6\xfe\xf7\x5f\xcb\xac\xa7\x3f\x02\xa2\x48\x93\xe9\x5e\x7a\x50\xfa\x31\x9b\x3d\x1d\x93\x7f\xbc\x1d\x6f\x43\x3f\xd2\xc5\x64\xfb\x9b\xe5\x6b\x03\xd5\xb4\x4e\x6b\x5b\xee\x6f\x64\x6b\x54\x92\x29\xb3\x0e\x8e\x2b\xea\xac\x67\x90\x33\x0b\x77\x92\x6f\xde\x7a\x27\x41\xec\x0c\x9c\xb5\xf9\x57\x3d\xa5\x1a\xcb\xa4\x88\x2b\x5f\xbf\x90\xd7\x93\x5e\xae\x6b\x04\x59\xd2\x86\x53\xc5\x48\x25\xbe\x3e\x0b\x62\x77\x11\x37\xef\xe3\xb2\x5f\xe3\xc0\xaf\x58\xb6\x16\x82\x9b\xd7\xbc\x0d\xf1\xcc\x20\xda\x0c\x07\x81\xab\x00\x50\x44\xb5\xe7\x41\x84\x7d\x60\x6e\xf5\x8a\x6d\xe3\x93\xfb\x80\x5f\xb1\xce\xbc\x3b\xf4\xda\xe3\x3a\x6b\x10\x2a\xb1\x71\x6d\x87\x53\x3d\x46\xda\x3c\x51\xed\xd9\x4d\xab\x40\x15\x6a\xa3\x5b\xd7\xe4\xab\x47\x17\x0a\x43\xeb\x40\x99\xb8\x55\xa0\xbd\xc7\x0d\xbc\x43\x7c\x00\x56\x0b\xec\x2d\x94\x64\xed\xc1\xc0\x8b\x24\x8d\xf6\xc1\x14\x72\xe4\x03\x4a\x00\x43\x30\x00\x97\x6f\x5f\x4b\xb1\x9b\x47\x4c\xcf\xd6\x0c\x9f\x34\x76\x85\x40\xac\xa8\x1b\x42\x1e\x47\xc2\xfc\x08\x66\x98\x99\xfa\xd5\xf2\x2b\x6a\xf8\x30\x80\x5e\xdc\x54\x50\x2c\x10\x66\x7a\x70\x9f\x2e\x21\x26\x1c\xfc\x15\x67\x32\xd9\x3c\x18\xaa\x30\x40\xbd\x3c\x48\x7c\xa0\x91\x44\x4d\x1d\x7b\x37\xa6\x59\xec\xdf\x06\x80\x2b\xa7\x77\xfe\x4b\xba\x7a\xb6\x6e\x79\xb6\x84\x37\x08\xc8\x99\x83\x29\xd5\x1f\x06\x77\x6a\xc0\x75\xfa\xbc\x89\xda\x91\xf7\xcc\x67\xe4\x03\xfa\xdb\x53\x1a\x11\xdf\xd2\x16\x68\x37\xf4\x25\xc0\xb7\xc8\x4d\xfa\x6e\x64\xc8\xcb\x2b\xa9\xda\x98\xce\xda\xbd\x13\x97\xbe\xce\x9c\xc0\x4b\xc4\x11\xc3\x88\xe7\x0f\xe0\xc0\xb9\x7b\xae\x94\x52\xcb\x51\x7c\xa5\x22\x7b\x3f\x0f\x1c\xa9\xaf\xca\x83\xe8\x0c\x04\x8b\x50\x8e\xa7\x25\xb5\xb5\xe5\x56\xf3\x78\x28\xab\x0c\xb7\x9b\x6d\x51\xdd\x12\xe7\x30\x2c\x79\x90\x24\xc1\xd4\x18\xad\xef\xde\xdf\xbd\xa9\xa5\x87\x3f\xc1\xb0\x1f\xd1\x62\x8f\x02\x72\xba\xf6\x1e\xe5\x63\x3a\x77\x75\xa6\xec\x81\xe5\xe3\xdf\x7c\xf2\xec\x68\x39\x7e\xb2\x95\x7c\x9c\x2e\xa6\x48\x4c\xe8\x1c\x5c\x99\x3b\x87\x52\xed\x16\x08\xb6\x09\x30\xab\xb4\xa2\x4d\x23\x21\xa8\xbd\x8f\xbe\xbe\x55\xd9\xc8\x5f\x15\xdf\xa7\x3e\x1a\x29\x64\xe5\xc2\xa7\x91\x70\xb2\xdd\xfc\x8d\x61\x95\x24\x1d\xf2\xe5\x17\x28\xf1\x02\xec\xdd\x38\xed\xcb\x40\xc4\xdf\x48\x86\xce\x7f\x2a\x5d\x5c\x72\xbd\xc6\xce\xd7\xe3\x72\x11\x63\xb9\xe5\x26\xde\x90\x5d\x2c\x38\xf3\xb1\xdc\x82\xf5\xf5\x1e\xac\xad\x51\x10\xb8\x4c\x92\xcb\xb6\xd8\x92\xc5\x48\x0d\x39\x29\xf5\x2d\xb0\xc8\xa6\x47\xbe\x30\xd8\xd9\x6a\x43\x5a\x8d\x78\x0d\xb1\xdd\x26\xde\x7d\xc4\xf2\xee\x98\x98\xcb\xc1\x27\x07\xf3\x77\x01\x5c\x63\x32\x1f\x39\x83\x64\xab\x4a\x1b\x50\xce\xa4\x28\xe4\x69\x64\x51\x69\x92\x1f\x56\x62\x91\xc9\xe2\x08\xe0\xda\x19\xd8\x52\x3a\x14\xbd\xf1\x62\x66\x23\x91\x4c\xa0\x3b\x5b\xb5\xe1\xdc\x1c\xfa\x4e\xdb\xa8\xb6\x25\xc9\x7f\x67\x12\x73\xa6\x01\x42\x75\x64\x28\x64\xa5\x4c\x2f\x2f\xc0\xee\x0a\x13\x9f\xae\x9c\x34\x7e\x3c\xdb\x3f\x77\xb4\x09\xdd\x31\x12\x8e\x8a\xfb\x7e\x1b\x89\x30\x12\x99\x9e\x22\xea\xea\x33\xc6\x28\xcb\x9c\x2e\x6b\xce\xe8\x3d\x33\x62\xa5\x2c\xa8\x3f\x1e\xbd\x44\x82\x61\xef\xd0\x51\x95\x47\x2f\xde\xcd\x4f\xc7\x62\xb4\x0d\x83\x8e\x57\x52\xe0\xce\xaf\xe3\xcb\x9d\x59\xb3\x1e\xd0\x9d\x33\x1a\x85\x5d\x38\xb3\x7e\xaf\xe6\x18\x94\xbb\x1d\x14\x1d\x7f\x8d\x3e\xbf\x52\xfa\xdc\x6d\xec\x71\x33\x23\x8c\xc6\x6d\xce\xfb\x61\x54\x70\xb3\x25\x5a\xb9\x8c\x23\xde\x54\x5f\x18\xae\x9b\xdc\xa9\xc5\x70\xf0\xd7\x39\x22\x88\xa9\xf0\x36\x12\x49\xf4\xe1\x7f\x1b\x6a\x77\xa8\x7e\x57\xf9\x6e\xa5\x86\xbb\x80\x24\x7e\x42\xb9\xb2\x22\x01\xd0\x32\x5c\x40\x8e\xb9\xd4\xba\x95\xbe\x0e\x05\xec\x53\xcb\xcc\x22\x47\x05\xce\x81\x9f\xcc\xcd\x3f\x19\xe6\x81\x47\xa0\x15\xf2\xed\x78\x25\x6f\x14\x42\x6c\xb7\x94\xc1\xe4\xe8\xe8\x1e\x2c\x45\x6a\x93\x1e\x22\x62\xcb\xe5\xf8\xde\x68\x03\xa2\xd0\x60\x83\x3c\x20\xae\x5e\x53\x1f\xd6\x66\x67\x34\x42\xe4\x6c\xf4\xff\xfe\x3f\xf7\x60\x7f\xaf\xe9\x92\x32\xa6\x45\xa0\x8d\xd7\x72\x3a\x69\xb7\x96\xc3\xd0\xfc\xf7\x48\x9b\x42\x0d\x97\xce\x14\xb5\x0a\xa2\x65\xa8\x8c\x8b\x73\xdd\x72\x0c\x13\xf3\x10\xd0\xc4\x75\x08\x9e\x04\x41\xf2\x9e\xca\x7f\x15\x54\xbe\xa8\x32\x03\xb3\x8f\x0e\xc1\xd3\xb5\x24\xfe\x02\x93\x39\x58\x46\x81\xc0\x92\x99\xc4\x6f\xaa\xc7\x4d\xcf\x61\xf5\xb8\x29\xaf\xa5\x6c\xc0\x53\x04\x6e\x31\x8f\x14\xaf\x29\x4c\x68\x07\x5c\x43\x05\x55\x54\x71\x8d\x0b\x73\x73\xcf\x5c\xa3\x3a\x06\xaa\x03\x22\xbf\x34\x03\x6c\x4e\x71\xfb\x39\x8d\xb5\x61\xe2\x1d\xd6\x73\x95\x8e\xb1\xf1\x92\x7a\xe2\x85\xb5\x11\xc3\x1d\x96\xf4\x4b\x3a\xc6\xc6\x4b\x9a\xf4\xb7\xa4\xaa\xe0\xd1\x4e\xdc\x31\x1e\x62\xe3\x05\x1d\xdf\x37\xbe\x68\xb3\x79\x6c\xb0\xd7\x89\x8d\x63\x53\xc0\x9c\xf4\xb7\xd3\x41\x95\x59\xa9\xf5\x72\x5e\xc5\x23\x6c\xbc\x9c\xc7\xfd\x2d\xa7\x32\x1b\xb8\xc3\x82\xde\xa5\x63\x6c\xce\xf6\xfb\x3c\x8b\xd5\x71\x41\x2d\x4f\xa2\x1e\x60\x73\x79\xac\xbf\xc5\x4c\x03\x68\x6b\x38\xd8\x61\x35\x4f\xe3\x11\x36\x5e\xce\xf9\xfd\x95\xc7\xa4\x4c\xa5\xc4\x10\x77\x49\x7d\x3c\xc3\x52\x75\x5e\x51\x76\xa3\xe2\xd5\x8c\xc8\xa4\x0b\x69\x71\xba\x44\xfa\xd6\x14\xa9\x32\x0d\x4a\xdd\xa6\x52\x34\xe2\xf6\xc6\x88\x85\x4f\x3d\xcb\x86\x92\x9a\xaf\xa8\x40\x53\x48\x7c\xed\xca\x8e\x54\x04\x6a\xc4\x91\x2e\x89\x0a\xc3\x30\xc0\x9e\x6e\x25\xab\x8a\xff\xc5\xaf\x2a\xe1\x6f\x45\x19\x47\x80\x47\x61\x48\x99\x76\x2d\x07\x88\x73\x10\x09\x1c\x60\xb1\xde\x81\xb4\xa6\x00\x5a\x25\xad\x5d\x99\x9b\x07\x90\xd6\x0c\x05\x52\xd6\x57\xe8\xd7\x1a\x5e\x9b\x91\x3d\x5b\xaa\x68\x13\x54\x7f\x72\xbf\x28\x6b\xb6\xe0\xd1\x26\xcb\x79\xda\xfb\x72\xfa\xd9\xa6\xb8\x86\xfa\xe6\x2b\xbb\xb8\x8f\xa2\x8e\x96\x02\xbf\x3b\x4c\xee\x73\x59\xf7\x08\xa3\x7b\x90\xd9\x0f\x83\xc7\x7b\xb6\x6f\x2b\x76\x05\x81\x8f\xb9\x6a\x7b\x0f\xd4\xdb\x69\xd5\xa5\x88\xc7\x35\xc0\x13\x33\x06\xe6\x80\x50\xe2\xa2\x3b\xcc\x05\x22\x02\x50\x06\x30\x63\x28\x40\xb7\x90\x88\x21\x78\x29\x7e\xff\x0b\x07\x5f\x22\x2e\x00\xe4\x00\x2f\x25\x07\x34\xe9\x1b\xca\x7c\xae\x3b\x1b\x7b\x37\x80\xce\xb4\x0d\x5d\x3d\x56\xe8\xbc\xae\x6e\x0c\x00\xa7\xda\xda\xbe\x56\x25\xc7\x75\xa0\x19\x26\xf3\x9a\xef\x27\x96\x94\x55\x6c\xba\x51\xac\xf8\x80\xf5\x90\xcc\x84\x7a\xf4\x86\x45\x81\xc0\xa6\x3b\x46\xd2\x04\xfe\xc0\xbe\xb1\x5f\x96\x8f\x9f\x7f\x98\x3f\x7e\xb9\x95\x6f\xcc\xba\xae\xa2\x44\x93\x79\x08\xa4\x0f\xd5\x48\x36\xa3\x38\x6a\xc1\x0a\xb5\x38\x84\x2a\xae\x57\x94\x76\x16\x49\x5b\x7a\x0c\x1c\x4a\xae\x74\x33\x12\x39\x85\x67\xa6\x54\xd7\x65\x0a\x7a\xe5\xb3\x35\xaf\x8e\x32\x5e\xdc\x78\x08\x73\xad\x6b\x33\x91\x91\xa5\x9b\x48\xfb\x06\x73\x5b\x55\x78\x60\x30\x0c\x11\x03\x90\xd1\x88\xa8\xd8\x50\xec\x25\x50\x53\xe2\xb7\xc7\x10\x54\x36\x4c\x08\x02\xcc\x55\x94\xa6\xb7\x40\xde\xcd\x94\xaa\x10\x4b\xe2\x03\xc1\xa0\x77\x23\x9f\x90\x27\x9e\xc7\x95\xcc\x18\xa2\xb3\x6d\xeb\x3d\xe4\xf6\x52\x45\x82\xb8\x30\xc0\x73\x82\x4a\xd9\x00\x56\x74\x01\x85\x57\x5a\x8b\xc5\x71\xb0\x9e\x29\x78\xf1\xe3\x2c\x40\x77\xff\x53\x91\x3a\x3c\x5b\xc7\x95\x1f\xd5\x55\x7b\x75\xa7\x9d\xa2\x63\x6e\x51\xf7\x04\x39\x3b\x31\xb7\x4e\xbb\x1e\x83\xcc\x5d\x6a\xef\x4a\xf3\xa6\xab\x90\x4d\x55\x40\x39\x06\xea\x5e\xa9\xc6\x2b\x2a\x54\x48\xb1\x79\x14\x60\x02\xe4\x61\x28\xec\xcf\x6b\x48\xd6\x96\x2d\x4a\x2f\x77\xdd\x25\xf3\xe6\x61\xa8\x08\x17\x0c\x91\xb9\x0e\x56\x57\x95\x1e\x6d\xd0\x94\x8c\x1f\x0b\x1e\xbb\xd5\x43\x86\x38\x22\xc2\xd4\x8e\x79\xa9\xe4\x82\x3f\x22\xec\xdd\x28\xe9\x40\xef\x69\x0c\x43\x55\x65\x31\xff\x04\x43\x4b\x7a\x8b\xe2\x27\x86\x0a\x07\x5f\xd0\x15\xba\x45\x6c\xa0\x2b\x2d\x26\x93\x9a\x22\x8f\x2e\x55\x28\xfb\x0a\xc1\x1b\x22\xf5\x73\x25\xe8\xa4\xe5\xb6\x05\xa5\x39\x8c\x19\x82\xa4\x04\x26\x48\x20\x0c\x30\x57\x95\xf4\x43\x4c\xe4\xc1\xc3\x04\xc8\x37\x56\x70\x3d\xd0\x93\xd1\x34\x32\x79\x5c\xcd\xc8\x83\xc4\x7c\x1e\x40\x02\xa0\x7f\x8b\x88\x8a\x7d\xa7\x33\xc0\x3d\x46\x83\x40\xbe\x14\x85\x6a\x81\x12\x46\x43\xf0\x24\x50\xb2\x50\xc3\xd7\xcd\x12\xd3\xb2\x98\x1e\x54\x77\x63\x43\x04\x47\x90\x79\x8b\x81\x19\x48\xff\xd2\x92\x92\x9a\x16\x22\x02\x33\x14\xac\xc1\x12\xf2\x9b\xfc\x77\x7a\x25\xd9\xc9\xe1\x9d\xc2\x52\x1e\xa8\xfd\xf0\xaa\x07\xbb\xc7\xad\xaa\x40\xba\xf8\x2b\x7b\xa0\xc5\x19\x1f\x78\xfe\x5c\x67\x9d\xe3\xa5\xd3\x5d\xbc\xd9\xf5\x8c\xe7\xde\x6f\x26\xc9\x3b\x5a\xfb\xf5\x3a\x2c\x52\x33\x75\xa9\xbc\xde\xf4\x72\xd7\x95\x9a\x37\x0f\xb6\xc6\x2b\x01\x45\xc4\x0b\xab\x34\x17\xcb\xeb\xcc\xde\xe8\xba\xd2\xe4\xdd\x5e\x59\xec\xa6\xa4\x3c\x26\x7b\x5a\x27\x84\xc0\xa3\x0c\x65\xa8\x8c\x94\x07\x67\xd0\x43\x42\xea\x8f\x86\xc4\x94\x6b\xfe\x7a\x94\x70\xc1\x22\x4f\x28\x9a\xc7\x98\x54\xd0\x97\x4a\x81\x9b\xe5\x38\x43\x72\xea\x0d\xf9\xbe\xa4\xfa\xcb\xd3\xb5\x16\x4b\x15\x41\x0d\x02\x45\x9f\x32\xdc\x14\xc6\x84\x20\x1b\x98\x79\x34\x70\x86\x79\x2a\x90\x84\x4d\xa6\x79\x3d\x7b\xd6\x07\x6d\xd8\x68\xd7\x0e\xff\xdb\x06\xda\x61\x08\xe7\xc8\x15\x70\x7a\xe8\x68\xc9\x7f\x5c\x2d\x48\x20\x9e\x5e\x6c\xa3\x11\xa6\x6b\x29\x30\x89\x77\x70\x8e\xc0\xb5\xba\xd1\x99\x29\xc4\xe3\x59\x0d\x80\x91\xa5\xf4\x64\x72\xb3\x75\xc7\x97\xb7\xb7\x88\xdd\x62\x94\x86\xca\x54\x19\x90\xb6\x6f\xea\x93\x16\xb2\xeb\xe1\x63\x66\xcc\x8f\x88\xf1\xb8\x30\x4c\x3f\x23\x5e\xa2\x30\xa0\xeb\x65\xdc\xe9\xd5\x36\xe8\x36\x66\xb1\x26\xe1\x23\xc1\x23\x57\x87\xd6\x14\xd1\xe9\x4a\x07\xdc\xc4\x58\x75\xcf\x90\xaa\x09\x05\x9a\xb0\x6d\x73\xc8\xf6\x4e\xfb\x92\x8d\xe8\xcf\x1a\xa6\x87\x54\x5b\x79\x58\x82\x77\xf6\x14\xff\xe3\xd7\x5f\x23\x7b\xbb\xf9\x4e\x04\x2f\xc6\xcb\x32\xc5\xd3\x3f\xbb\xbb\xf1\xa8\x77\xe3\xf2\x10\x7a\x75\x95\xfc\x16\xa3\x12\x52\xc7\x5f\x4f\xec\xe1\x9a\xff\x4b\xc6\x9b\x9d\xcf\xbd\xb0\x67\xbf\x24\x19\x2d\x92\x2b\x99\x64\x39\x88\xab\xf2\xab\x95\xc8\xa9\x6b\xb3\x34\x01\x2f\x46\x7d\xfa\x60\xd3\x6d\x73\xe1\x4c\x20\xe6\xa2\x00\x2d\x6d\x6d\xad\x53\xa8\x69\x73\xc4\x13\xf9\x34\x78\x96\x3c\x7d\xa8\x9d\x4d\x88\x92\x7d\x8b\x8b\x34\xcb\x96\x95\x35\x8d\x96\x21\x62\x6e\x80\x66\x02\x08\x38\x07\x98\xbb\x4c\x97\xfb\xcd\x7c\xe7\x7d\x7a\xa5\x4b\xc6\x97\x19\x6f\x41\x83\x80\xae\xd2\x82\x68\x84\xaa\x1c\x23\x57\x30\x48\xb8\xdc\xef\xcc\x97\xc6\x93\x53\x88\x7c\x6f\x7a\x76\x7e\x36\x9e\xa1\xa3\xf3\xa9\x87\xd0\xd1\xd9\xe9\x29\xf4\x90\x6f\x4b\xf3\xba\x2f\x58\xac\xac\x19\x1e\x5d\x2e\x29\x89\xb3\x04\x16\x78\xbe\x70\xf1\x32\x84\x9e\x82\xac\x36\x7b\x4c\xa1\x3f\x47\xca\x63\x22\xb7\x8a\xa5\x89\xf2\x22\x40\x2a\x59\x1f\x49\xa1\x5b\x3e\x6d\x82\x58\xd3\x5e\x1d\x30\x0c\x11\x64\x71\xce\x81\x36\x1b\x2e\xe4\x98\x1c\xfb\x28\x36\xd5\xa8\x81\x06\xda\x8e\x9b\xef\xef\x1a\x60\x95\x67\x8f\x09\xf0\x11\xf7\x10\xf1\xa5\x3c\xbe\x52\xe9\xcb\xf2\xc3\xf2\x93\x0a\xb7\x21\x98\x42\xef\x66\xae\x0d\xc8\x90\x21\xb0\x40\xf0\x16\xc7\xa1\x19\x6a\x6a\xaa\x9b\x87\xba\xa5\x76\x76\x08\x5e\x51\xe5\x8b\x34\xa9\x15\xa5\x97\xf8\x82\x32\x91\xdc\xdf\xd1\x09\x56\x89\xdf\x5c\xa9\x5f\x69\x38\x58\xdd\x21\xd6\xaa\x1a\x30\x81\x5f\x07\x3f\xc2\x35\xe7\x88\x50\x1f\xe5\x96\x06\x94\xec\x08\x03\xfc\x35\xf3\xf1\xd2\xc9\x7c\x20\x0a\x07\x0e\x83\x8a\x6d\xa3\xba\xce\x1d\x65\x20\x84\x42\x20\xa6\x4c\xa7\x33\xc8\x85\x2e\xa0\xc1\x3d\x79\xae\xe4\x39\x81\x86\xe1\xc9\xd3\x2b\x2f\xd2\x99\x40\x04\x70\xb8\x06\x4b\xaa\xfa\x09\x42\x02\x56\x94\xf9\x5c\xde\x1d\x82\xe7\x6a\x44\x45\x4e\xe4\x81\xd4\x1e\x61\x92\x71\xdd\x6a\x94\xc9\x28\xfc\x9a\xec\x2c\xc1\x5f\xd1\x70\x3e\x1c\x00\x2f\xc0\xf2\xaa\x8f\x04\xc4\x81\x1a\xea\x6f\x92\xf5\x9a\xd7\x34\xa6\x69\x93\xa7\xe9\x7a\x63\xc8\x96\xc2\x8b\x2c\xc1\x89\x1b\x1e\x26\x15\xc3\xd1\x1a\xf1\x38\xf8\x7d\x8e\x49\xb2\x4c\xcd\xd7\x77\x49\x01\xb4\xb5\xa6\x99\x83\x7b\x9b\x76\x3e\x78\x38\xf7\xf7\xf6\xdc\x27\xdf\x6f\xcc\xcf\x36\x65\xa8\xf3\x35\x5a\x03\x4c\xb2\x3b\xf4\x72\x06\xd6\x34\x02\x2b\xcc\x17\xdb\x7c\x2b\x8d\xd3\xa1\x91\xd0\x5d\xdd\xe5\xd7\x92\x43\x5a\x3b\x87\x37\x14\xbc\x47\x73\x86\x84\x2d\x4d\xe0\x9e\x90\x39\xd5\x5a\xde\x1c\x3b\xdd\xda\x2a\xa6\x13\xda\x2f\xa1\x2c\x76\xe8\x4e\x51\x0c\x7d\xfe\x07\x31\x01\xfa\x42\xa7\xc9\x9b\x46\xae\x91\x97\xf2\x04\x49\x83\x92\x2b\x6b\xa5\x50\xf2\x51\xfc\xca\x9c\xc6\xdd\xca\x52\x6d\x61\x08\x9e\x9a\xe7\x55\x06\x68\xb0\x82\x6b\x1e\xd7\x33\x32\x9f\x98\x41\x66\x24\x2f\x44\xfc\x74\x56\xf1\xfb\x6f\x28\x88\xf5\x00\x45\xfd\xe6\xb4\x2c\xae\xa9\x69\x98\x89\x1d\x30\x46\x25\x25\x7e\x3d\x2a\xe6\x8c\xce\x19\xe2\x5c\x19\x5e\x0f\x5c\x7a\xf0\xa5\x7f\xf9\xec\x87\xd5\xdb\xad\x54\xf3\xec\x72\x8a\x4c\xc1\xdc\x03\x4f\x37\x72\x53\x99\xfa\xb1\xba\xda\x97\xa0\x34\x10\x38\x89\x2c\x63\x54\x45\x1c\x14\xae\xe6\x5a\x6c\x9d\x80\x47\x60\x74\x52\xc9\x42\xe2\x89\x17\xbf\x1a\x5f\x2f\x84\x7f\x26\xfd\x77\xe4\xb3\x71\x45\xa0\xa3\xe1\x24\x89\x96\x5b\xc2\x3b\xc7\xe4\x40\x15\x59\x90\x7c\x6c\x1f\xe6\xbc\xcc\x56\x54\xa4\xa9\x65\x77\x64\xf3\x64\xb5\x8d\x3b\x42\xd6\xf0\xe7\xfd\xed\x7f\x47\x1c\xc0\x64\x46\xb7\x45\x80\x02\x12\x54\x84\x6f\x56\xc6\x74\xb6\x0e\xf3\xfc\x76\xa1\x6c\x12\xfe\x1e\x00\xbd\x6b\x40\x17\x45\xb3\x07\x40\xef\x08\xd0\xa9\x5c\x7a\x5f\xe0\xbc\x2b\x56\x13\x18\xbf\x4b\x25\xa3\x51\x15\x1b\x75\x0d\xff\xbd\x37\xbd\xa7\x04\xb9\x62\x81\x59\x5d\x00\xff\xf6\x38\x34\xce\xe3\x90\xaa\x46\xf6\x69\x3c\x1a\x38\x24\x5a\x22\x06\x05\x95\xb2\x91\x03\x1e\xa9\xd2\x64\xa3\x81\xe3\x23\x42\x97\x98\xe8\x1b\x9f\xed\xe5\xa8\xb6\x95\x53\xc6\x09\xb2\xa5\xd3\x09\x11\xf3\x10\x11\xd0\x14\xfe\x6e\x85\x7e\x8e\x89\x18\x29\xbc\xde\x77\xf9\xaa\xfd\x29\x57\xdf\x4a\x91\x76\x79\xae\x2e\x95\xaa\xc6\xbf\x85\x32\xed\x59\x9a\xd0\x9f\xba\xa4\xe3\x66\xdc\x29\xbd\x3b\xb0\xb2\x34\x42\xfe\x9b\xd1\x2f\xaf\x7e\xd8\x46\x59\xca\x2c\xa6\xe8\x6a\xd7\x31\x87\x4f\xe5\x9d\xe6\xf0\xdb\x2c\x50\x62\xdc\xd1\xd7\xae\x11\x5b\x4a\xe2\x20\x15\xf2\x05\x0d\xe2\x9e\xca\xe5\x78\xaa\xf8\xe1\x5c\x95\x42\x33\x0b\xb1\xc0\x64\xce\x87\xc3\xa1\xa5\x4c\xdd\x9e\x8c\x1e\xd7\x8b\x24\x0e\x73\x4a\xef\x32\x26\x56\x15\x67\xa5\x6a\x14\x17\x62\xf1\x61\x6c\x0d\xc6\x24\x8c\xc4\x10\x3c\x09\xc4\x82\x46\xf3\x85\x89\xd7\x8c\xd7\x0b\x42\xc8\xb9\xae\x87\x8c\xcd\x68\xcb\x48\xc0\x69\x80\x00\x43\x33\xc4\x10\xf1\xd0\x00\x60\x22\x10\x23\xa6\x39\xa3\x86\x89\x7c\x17\x73\xe0\xa3\x29\x8d\x88\x87\xfc\x34\x17\x48\x50\x10\x32\x74\x2b\x67\x17\x52\x81\x88\xc0\xda\x46\x7b\x17\x22\xc2\x75\xf2\xac\x8f\xb4\x0d\xd9\x47\x21\x52\x35\x94\x49\x76\x4a\x33\x46\x97\x80\x21\xb9\xc8\x48\xd7\x3f\x81\x64\x0d\x54\x09\x61\xdd\x00\x3e\xe2\x88\x01\xb1\x0e\xcb\xce\x9d\x2a\xe0\x31\xa4\xf3\x91\x94\xbf\x37\xb6\x25\x5b\x01\x6a\xe6\x35\x43\x8c\x83\x48\xf2\xe8\x24\x35\x21\x9d\x60\x02\x19\x10\x11\x81\x75\x88\x99\x9a\xd3\x12\x12\x5d\x77\x45\x95\x60\x94\x53\xfd\xfd\x77\x83\x45\xbf\xff\xee\x18\x0b\x8e\x81\x94\xb1\x74\x43\x6f\x81\xd1\x2d\xf2\xc1\x74\xad\xec\x46\x3a\x0e\xd8\xd8\xf3\x08\xba\x8b\xad\xe8\xc9\x6c\x21\xcb\xcc\x16\x12\x1f\x44\x5c\x09\xb0\xba\xf3\x0d\x62\x6a\x85\x71\x78\x9d\x4a\x7a\xd6\x2f\xa6\xae\x39\x18\x09\xba\x84\x02\x7b\x2a\x90\x59\x39\xfb\x42\xca\x39\x9e\x06\xbd\x9a\xca\xd3\x53\xe9\xca\x09\x43\xaf\xe4\x22\x4b\x4f\x39\xb8\x88\x9f\xe8\xf9\xb4\x4b\xd1\x25\x8c\xb2\xe5\x8d\x2b\x8f\xfe\xb8\xf6\xe8\xab\xa0\x9a\x64\x1d\x87\xa2\x03\x57\x29\xca\x86\x8c\xde\x62\x5f\x25\xd1\x80\x74\x8d\xf2\xb2\xa2\xf7\x26\x94\x52\x30\xaa\xf1\x13\x13\xa2\x0a\x12\x29\x62\x10\x1f\x55\x82\x3d\xa4\xc3\x32\xb1\x28\x20\xba\xfa\x06\x26\x82\x26\xa5\xe9\x78\x08\x3d\xc4\x07\x80\x47\xde\x42\x9e\xc3\x7c\xff\xb1\x05\x82\xfe\x21\x6d\x93\x29\x56\xf4\xc8\x6c\x05\x14\xdc\x95\x84\xc7\x8d\x8b\x97\x1f\x94\xe7\xfe\xfc\xe6\xf8\xc5\x34\x1a\x6d\x55\xfb\xb9\xb4\xa6\xba\x16\x29\x82\x83\x6b\xbc\x44\xe0\x4a\xaf\xfe\xc0\xbd\x52\x2c\xdb\x51\x28\x6d\x6e\x2b\x65\x2e\xdf\xc2\x5e\xa6\x74\x66\x6f\x85\xcb\x5b\x90\xc0\x12\xb0\x15\x05\x61\x38\x16\x6c\xeb\xc0\x0d\x5e\xe0\xf9\xe2\xd1\x2b\xba\xd2\xc4\xd1\xbc\xb4\x0f\x75\x51\xed\x1a\x48\x6d\x0d\x96\xcd\x1b\x67\x37\x4f\xed\x5d\x83\x80\xbf\xd9\xe6\x99\xac\x58\x09\x89\x78\xeb\x2a\xfb\xba\x74\x34\xa5\xdc\xbb\x45\xbe\xa2\xab\x4d\xd6\xb8\x3f\x45\x31\xcb\x88\x5e\x25\x8d\x47\x78\x12\xfe\xc3\xd0\x8c\x32\x9d\xc3\xc9\x95\xb8\x06\x34\x10\x92\xe7\x22\x8e\x54\x56\x00\xe1\xca\x15\x19\x60\x82\x20\x03\x73\x06\x7d\x15\x18\x60\xe2\x81\x4c\xa3\x0d\xf4\x47\x04\x83\x58\xf8\xf1\x20\xb9\x85\x71\x77\x11\x9d\x30\xa0\x9b\x6e\x04\x94\x29\xe9\x94\x70\x2c\xd6\xb1\x60\x97\x8c\x08\x45\x1c\x24\x24\x3f\x6a\x12\xc1\xa1\xc7\x28\x8f\x27\x25\x19\x59\x40\xa5\xcc\x25\x47\xa4\x3c\x5e\x94\x29\xce\x27\xd9\x21\x5c\x22\xb0\x76\xe1\x9d\x94\x76\x55\x47\x92\x96\x42\x67\x26\x33\x5e\x50\x30\x67\x08\x0a\x80\x66\x33\xe4\x99\x95\x6a\x38\x99\xcf\x25\x39\x5b\x6b\x95\xb4\x60\xd2\xed\x73\x9f\x95\xab\x3b\x72\x47\x47\x47\xff\xfd\x90\x6c\xb6\x88\xe1\xfd\x71\x5b\xa5\x75\xb8\x1e\x25\x33\x3c\x8f\x98\xc1\xcc\xc3\xa6\xab\x3f\xfb\xc0\x7f\x78\xfa\x4f\xba\x0d\xbf\xb5\xad\xaa\x40\xf9\xaf\xe5\x23\x03\x70\x91\x7f\xa6\x59\x10\x86\x42\x30\x3c\x8d\x04\xe2\x1a\x76\x29\xb1\x49\xef\x38\x83\xb4\xda\xba\xa6\x36\x99\x7b\x12\x3d\x4a\x83\x74\x91\x6d\x7b\x47\x2f\x0b\xb4\x7a\x46\xb0\x03\xa3\xd4\xc7\xa3\xeb\xf7\x8f\x8e\xf1\x63\x2b\x4a\x39\xaa\x55\x8e\x33\x70\x18\x5d\x35\xfe\xd5\xe5\xd9\xf8\xaf\x4e\x38\xab\xed\x07\x56\x64\xb5\x61\xe7\xf1\xc0\x09\x30\x17\x45\x54\xe4\x34\x62\x1e\xca\x88\x63\x0b\xca\xc4\x2b\xcc\x75\x9b\x1e\xdb\x28\xc9\xf6\x99\x1c\xb8\xd1\xf9\xe0\x93\xa3\x9b\x82\x18\xfd\xcc\x7e\x32\x32\xec\x5e\x37\x61\x8b\x83\x5a\xaa\xda\xfe\xda\x1e\x7e\x05\xc9\x3c\xd2\x06\xdd\x76\x2f\x5c\x22\xee\x31\x1c\xe6\x52\x6b\x5a\x71\x62\xeb\x32\xa7\xd4\xd7\x42\xe9\xa7\x4f\xce\x0d\x52\x29\xeb\xaa\x33\x40\x30\x24\x6a\x15\x15\x44\x21\x3b\xb9\xfa\x16\xc3\x22\x31\xfc\x8f\x54\x17\x88\xf1\x51\xfc\x05\x67\xe0\xc4\xdf\xa8\xec\xff\xdb\x6e\x98\x00\xaa\x2e\x69\xdb\x0e\xe3\x23\xee\xd5\x0e\xd3\x08\xef\xf1\x51\x86\x50\xe5\xee\x8c\xce\xab\xee\xec\xc6\x7c\x27\xcf\x44\x5c\x44\x07\xb3\x35\xf0\x11\xc7\x73\x92\x84\x40\x2f\x31\xc1\x4b\x18\x00\xb8\xa4\x91\xce\x74\x9c\xaa\x86\x67\xa9\xc4\x73\x87\x97\xf8\xab\x96\x7a\x30\xdb\x45\x81\x38\x73\xe6\x95\x16\x6d\x3d\xf3\xe0\xca\xdc\xbb\x6f\x7d\x81\xf4\xec\xe4\x29\xb7\x8a\xe4\xdd\xac\x45\xa9\xc3\xab\xa5\xd5\xa8\x6c\x34\x4a\xac\x45\xda\x69\x06\x32\x8d\x68\x1a\x8c\x48\xed\x74\x98\x52\x97\x9f\xb2\xcf\x25\xdf\xf1\x47\x4e\x78\x86\x03\x81\x18\xf2\xaf\x12\xf2\x3b\x70\x02\x55\xe0\x20\xd6\x39\x72\x5d\x4f\xd2\x86\x3f\xe7\x45\xdc\x69\x3b\x68\x05\xa9\x6e\xc9\x26\xca\x43\xb7\x66\x17\xa7\xed\xd9\xc5\x06\x4c\x63\x43\xd6\xb1\x0f\x06\x72\xba\x1d\x03\x69\xc5\x46\x6a\xc9\xf7\xe8\xac\x1b\x33\x69\x3f\x58\x0b\x96\xd2\x7e\xb0\x46\xc6\xd2\x92\xbd\x8c\xce\x2a\xd9\xcb\x69\x0d\x7b\xa9\xd9\x80\x6a\x52\x88\x96\xa1\x58\xbb\x4b\xc4\xb9\xc1\xb0\x2a\xd7\xb4\xb5\x64\x5d\xee\x6d\x45\x48\xcb\x81\xbf\xaf\xa1\xf0\x16\xc8\x5e\x1f\x1c\xd4\x14\xb3\xcb\x8f\xad\xf1\x2f\x3b\x6e\xc8\xa8\x1f\x79\x42\x32\x31\xe1\x2d\xc0\x9a\x46\x0c\xfc\x11\x21\x56\xe2\x5e\xad\xe1\xfe\xf9\x3f\xf4\x4d\x2b\xb9\x3c\x8c\x39\xc4\x30\x78\x75\x24\xb9\x89\xf9\xcf\xdb\xc7\x55\x36\x56\xee\x8a\x79\xd8\x08\x01\xa9\xd5\x7d\x07\x5c\x9d\xb2\x58\xb1\x4a\x6c\x81\x16\xfe\x6e\x9e\x02\x17\xf1\x53\x5d\x85\xfc\x81\x23\xbf\x14\xab\x4e\xe6\xe7\x65\x92\xfe\x95\x51\x02\x28\x13\x79\xda\x3e\x48\x6f\x24\xef\xe7\xae\x66\x87\x69\xcb\x09\x4e\xba\x29\x0e\x55\x43\xc8\xcf\xbb\xd3\x84\xac\x86\x8c\xaa\xad\x77\x6a\x28\xea\x1b\x73\xab\x7e\xdf\x36\xfb\x74\x46\xa3\xd7\x74\x51\xb1\xef\x71\xc5\x4c\x52\xae\xd4\x7e\x36\xbb\x63\x51\x27\x87\xd0\x71\x46\x8f\x7b\xd1\x71\x72\xc3\x6c\xae\xe3\xe4\x86\xd9\x5e\xc7\x19\x3d\xae\x64\x42\x27\xfb\xd5\x71\x16\x3a\xe9\x53\xd3\x86\x8c\x8f\x3a\x75\x54\xc6\xaf\x15\x4a\xaf\x24\x48\x5e\x28\xbb\x82\xee\x44\x04\x83\x42\x01\x99\x69\x84\x03\x95\x4b\x6a\x1f\x2b\xc0\xe4\xc6\x15\xb4\x30\x56\x6c\x0f\x4a\x5a\x4c\x03\x18\xca\xb3\xc4\x30\x14\x48\x73\x23\xa0\x20\xd4\x36\xa0\x00\x73\x10\x20\x78\x9b\x98\xa1\xe3\x19\x2a\x50\x05\x88\xf3\x01\x60\x28\x58\xcb\x79\x52\xa2\x1a\x76\x99\x46\x2f\x26\xdc\x42\x55\xab\x52\xc9\xb4\x26\x33\x36\xce\x31\x99\x42\xef\x06\x44\x21\xb8\xc5\x50\xe7\x80\xd0\x48\x20\x06\xfe\x2a\x7f\x9b\xb5\xfd\xad\x7f\x06\xa1\x8b\xcd\x98\xae\x3d\x65\xce\xf0\x3a\xbd\xdd\x37\x4b\x28\x99\x27\xb7\x65\x0d\x8a\x18\x72\xc1\x70\x68\xaf\xd9\x68\xa3\x4a\x93\xed\xf9\xc4\xe4\x70\x7c\xa2\xee\xd3\x31\x99\xda\x8a\x31\x74\x25\xf2\x93\x83\x10\xf9\xe3\x7e\x88\xfc\x71\x17\x22\x5f\x6b\x25\x6c\x33\x7f\x25\x48\xd3\x40\x25\x30\x9a\xf6\x3a\x15\x73\xe9\x81\x53\x1c\x57\x72\x8a\xc9\x7e\x39\xc5\x8b\x0a\x4e\x01\x85\x90\xda\x04\x37\xb4\x12\x72\x30\x0b\xd0\x1d\x96\x0f\x41\x9e\xc6\x28\xa9\x4c\x64\x55\xeb\x8b\x21\xc8\x29\x19\x54\xf0\x02\x31\x8c\xb5\x91\x84\x15\xf8\x14\x71\x55\x24\xda\x30\x25\x9d\x53\xac\xf3\x88\xab\x46\xc9\xd7\x03\x33\xb9\x7a\x71\x01\x6b\x4e\x97\x48\x47\xa6\xf9\x88\x63\xa6\x7d\x7d\xca\xce\x97\x34\xed\x4a\xb2\xfb\x42\xc4\x54\x58\x1b\xf3\xfb\xa7\xe0\x21\x9c\x63\x52\xed\x5d\x02\xef\x32\xf7\xab\x69\x78\x66\x14\x0b\x21\xc7\x5f\xe5\x3f\xa1\x51\x40\x4d\x50\x2e\x25\xf3\x98\x4e\x9f\x18\x9a\xec\x45\x8c\x21\x22\xde\x25\x61\xd5\x5d\x59\x46\x86\x25\x8c\x07\xa3\x23\x15\xfb\xab\x3f\xe1\xa8\xa4\xeb\x19\xa5\xd6\x48\x31\x1b\x31\x1a\x75\xb1\x06\xe5\x84\xdf\x42\x41\xa5\x6c\x40\xf8\x7b\x48\xec\xdd\x54\xec\xf2\xf3\x05\x16\xf6\xc6\x38\xf6\xc7\x55\x1f\x8e\x0e\xcf\xbf\xa3\x61\x14\x40\x8b\x74\x5e\xf7\xd2\x4f\x8c\xae\x44\x31\xd3\xb8\x2b\xa5\x1f\xd5\x52\x7a\xa6\xa0\x54\x6b\x71\x6a\xb4\x36\x55\x91\xe9\x71\x86\x34\xc6\xdf\xa9\xb5\xe7\xb4\x19\xc8\xc3\x5a\xb4\xd8\x7a\x20\xae\x77\xb0\x87\x91\xc2\xcc\xde\x6e\x32\xdc\xe9\xc0\x99\x51\xb6\x84\xc2\xcd\x24\x2b\x98\xdd\xcb\x7e\x67\x6e\xd0\x41\xef\xa3\xa0\x02\xea\xac\x89\xcf\xcd\x5c\xb4\x9e\xe9\x8c\x2b\x99\xce\x28\x47\xe3\x40\xad\xf9\x4b\x13\x39\x7d\xee\x2b\xf3\x56\x08\x2c\xbd\x97\x27\x8b\x95\xcc\xb8\xa1\x38\x41\xe6\xdd\x0f\xc3\xab\x21\x90\xe7\x19\xa4\x3b\xa3\x04\x79\x0d\x40\x1d\xbb\x3c\x3e\x3a\x3a\x72\xc7\x47\x23\x5b\x6f\xb9\xfa\x75\xa6\xf3\x75\x4d\x13\xe0\xba\x83\x61\xf0\xe5\x48\x47\x9a\x31\xc1\x9f\x08\x27\xef\x54\xf8\xaf\xff\xfc\x3f\x85\x07\x11\xf1\xcb\x8f\x01\x3a\x4b\x06\xcc\x51\xf5\xac\x93\xa0\x43\x82\x0b\xa8\x11\x57\x8f\x54\xbe\x14\xba\x8d\x71\x2d\x35\x66\x64\x16\x2f\x1f\xc0\x34\xaa\x0c\x39\xfc\x5f\xa0\xad\xd4\xdc\x34\x15\x12\xb7\x9f\xaf\x9a\x8a\x79\xc0\x3a\x8d\xff\xdd\x79\x1a\x49\x9d\xbf\x8a\x5d\xd7\x8c\xae\xa2\xd2\x86\x05\xd6\xcd\x07\xb0\xd2\x07\xba\x13\xd9\x2e\x95\x33\x54\x73\x2c\x0e\x02\x7c\x83\x80\x54\x4f\x30\x99\xff\x68\x62\xd5\x5b\xab\xee\xba\xd7\x07\x12\x00\x66\x95\xf4\x56\x3a\x7a\x3a\x91\x81\x9e\x83\x89\xb2\xd1\x29\x0e\xc6\xdf\xaa\xdd\xb0\x43\xf0\x96\x04\x6b\x00\x75\xb8\xbd\x3c\xcc\x31\xfa\xc5\x71\xf8\xaa\xb6\xc3\x2d\xc4\x81\x6e\xe4\x75\x2d\x75\x7e\x2d\xe4\xe8\x5a\x0f\x71\x5d\x08\x39\x55\x3a\x33\x55\x72\x30\xd7\xbd\x0d\x74\x6c\x3f\x5f\xd0\x95\x2a\x81\xb5\xc0\xde\x02\xf0\x00\x7b\xaa\x88\x16\x16\x68\xa9\x1e\x35\xe3\x05\xfa\xc9\xb6\x31\x66\xaa\x14\x45\x0c\xf0\x54\x90\x46\x77\xda\xb2\x3c\xc3\x8c\x9b\xbe\x62\x90\x8b\xac\x21\xe4\xaf\x33\xca\xc0\x97\x68\xa9\xca\xe4\x9a\x20\x3b\x55\x3b\x47\x65\xc3\xca\x37\x92\x62\x15\x12\x25\xff\x26\x05\x70\xdd\xe8\x8c\xab\xe5\xbd\xc2\xe4\x46\xd7\xc8\xd0\x8d\xcd\x55\xf4\x78\xa0\x2e\x9a\x04\x14\x91\x05\x52\xcf\x55\x78\x34\x3b\x60\x74\xe5\xaa\x4f\xda\x45\xde\xf7\x74\x05\x5e\xe9\xdb\x7b\x8c\x56\x39\xfb\x53\x04\xab\x9c\xf5\xa8\xe2\x17\xe4\x6c\x95\x6b\x54\xaa\x5e\x5a\xa7\xb9\xb7\xac\x88\x5a\xe8\xc5\xa6\x79\xe2\x79\x93\xd5\xa0\xbd\xe9\xe0\xbc\x17\xf3\xf0\x79\xaf\x3a\x7f\x65\x98\x4b\xa5\xeb\x72\xf7\xf5\x0a\x55\x61\x1d\xed\x2f\x13\x14\x40\x4f\x35\x80\x92\x87\x51\x35\xbe\x50\x07\x7a\x90\x2f\x19\xa6\x6f\xab\xc0\x58\x18\x04\xd4\x53\xf3\xe0\x03\x80\xa0\xb7\x00\x8c\xae\x0c\xe1\x31\x64\x2c\x7d\xc4\x54\xf6\xf9\x9b\xa6\xd8\x0b\x14\x48\x0d\x5c\x61\x44\x05\x0b\x2a\xa3\x5f\xa2\xf7\x9b\x62\x3e\xad\x6c\x04\x26\x40\x59\x67\xd1\xd1\x55\xd2\x3d\x2b\xa4\x6a\x74\x49\x16\x39\x65\x5d\x66\x15\x96\xbb\xab\xd6\xcf\x08\xda\x8c\x16\xba\xfe\x79\x32\xaf\x4c\x20\xb5\x04\x20\x98\xd2\xc0\xd7\x7e\x4a\xd5\x78\x0b\x13\x2e\x10\x54\x4c\x60\x1a\x44\xa8\x14\x7c\xad\xde\x51\xc9\x23\x80\x46\x02\x68\xab\x77\xda\x7b\xc2\x54\x63\x62\xaa\xfa\x16\xd0\xd6\xeb\x56\x5c\xed\x09\x98\xa1\x15\x60\x91\x44\x10\x89\x2b\x5a\x66\x48\x67\xad\x36\xfb\xc7\xaa\x91\xa8\xa5\x8a\xb2\x53\xac\xa1\x6c\x78\x67\x27\x70\x7b\x92\xfb\x99\x24\x3a\x53\xe7\x69\xaa\x57\xaa\xb9\xac\xbc\x5f\x21\xa0\xed\xe2\xdb\xa6\x2e\xbd\x01\x6c\x8c\xfb\x3e\xe2\x22\x16\x07\x8c\x4c\x12\x67\x3c\x42\xd2\x05\x55\x72\xe9\x9c\x71\x5f\x10\x1a\x22\x12\xf7\x72\x22\x37\x1a\x9b\x08\x5a\xc9\xbd\xb1\x39\xf3\xab\x96\x3e\x8b\x82\x40\xed\xa4\x59\x91\xaa\xc5\xa6\x8a\x93\xdb\x96\x21\x05\x9b\x00\x7b\x37\xb9\x19\xe1\x65\xc8\xa8\x09\xd0\x8f\x38\x9c\xaa\x70\x38\x2d\xae\x68\x44\x99\xae\x73\xad\xa7\x20\x9b\xab\x43\x86\xbd\x1b\x29\xcc\x41\x3b\x22\xf6\x2a\x9d\xc8\x3d\xab\x13\x4f\x2e\xe4\x9e\xee\x5f\x3e\x79\xfc\xa7\x90\x4f\x1e\xef\xd7\x05\x91\x48\x20\xe3\x58\x02\x91\x93\x38\xcd\x0a\x04\x58\xd9\xa8\x72\xac\xfe\xb4\x3f\xd9\xe3\xb4\x17\xd9\xe3\xb4\x57\xd9\xa3\x32\x06\xaa\xd2\x63\xbd\xab\x4c\xa5\x1b\xd5\xf9\xc3\x78\x1b\x50\x10\xe8\x62\x7d\xaa\xc8\xb7\x3a\xa0\xfd\xab\x26\xea\xf0\xfb\xc8\xa3\x3a\x87\xa1\x8e\x04\x5c\x66\x9f\xda\x23\x21\x38\xfe\x53\x10\x82\xe3\xfb\x40\x08\x4e\x1a\x08\xc1\xc9\xb6\x84\x20\x5f\xc5\x75\xc5\xa0\xa5\x77\x71\xee\xb5\xc4\xe0\x59\x0c\x26\xd6\x7d\xd4\xf9\x0a\x0a\x6f\x51\x8c\x87\xcc\x05\x15\x9f\x0e\x1c\xf4\x87\x01\xf2\x89\x85\xfa\x38\x2c\x52\x21\x1d\x26\x34\x5a\x8f\xe8\x3e\x4e\xaf\x6c\x37\xfa\x9c\xea\x3f\x0b\xe3\x9f\x94\x62\x97\x2b\x6d\x93\x65\xd0\x17\x09\x67\x2b\x43\x67\x05\x29\x3d\xe9\x95\x94\x56\x46\xf2\x54\xba\x74\x77\x53\x7d\x40\x17\x8e\xf5\xe2\xa6\x7a\xd0\xf3\x94\x76\x46\x67\x26\x13\x53\x2a\x07\xb1\x6e\x87\x20\xc7\x69\xc5\xe9\x1d\x91\x58\x35\x97\x1a\xe2\xfa\xd2\x6b\x20\xab\xf7\xd2\xe3\xb9\x8d\xc3\x73\xdc\x97\xbf\x93\x40\x66\x02\x82\x2a\x8e\x51\xdd\xcb\x0f\xce\x52\xeb\xc6\xec\xd1\x57\x5a\xbb\x9b\xb6\x84\x0e\xa9\xa9\xc5\x73\x9d\xd8\x3c\x83\x83\xa3\x5c\x93\xb9\xa6\x44\x82\x5c\x16\xce\x9d\x3a\xa9\xf2\xf0\x9a\x82\x8b\x4e\xc1\xe1\x92\x96\x62\xec\x58\x5c\x25\xf7\xd5\x8a\x2d\xad\xa4\xd2\x93\x9e\xbc\xc8\x93\x9e\x9c\xc8\x93\xbe\x7c\xc8\x93\xfd\xb8\x90\xad\x78\xd2\xb3\x07\xb9\x32\x36\x69\xfc\xfd\xfb\x8f\xd5\xa3\x38\x4e\x11\x20\x68\x0e\x05\xbe\x45\xf1\xb3\x3e\x22\x54\xa0\x52\x30\x51\x61\x6e\x7d\x79\x99\xdb\x3a\x99\xef\x83\x8f\xf9\xfe\xb8\x98\xff\x0c\x1e\xe6\x26\x19\x74\x37\x55\x02\x7a\xac\x0b\x80\x97\x48\xe5\x43\x1d\xb6\x34\xc0\x0f\xf0\xe2\x87\xe9\xf2\xa7\x3f\xb6\xaa\x36\x11\x2f\xa5\xd4\xba\x50\xd5\x02\xbc\x4e\x6e\xd7\x27\xf1\xd2\x12\x02\x65\x07\xae\x31\xae\xdb\x5e\x71\x25\x95\xaa\x22\xbb\x79\x06\xe3\x4b\x96\x17\x0b\xda\x6b\xc4\x05\x62\x3e\xcc\x34\x26\xef\x94\x2f\x5b\x33\x23\xaa\xf6\xb3\x86\x15\x74\xcf\x62\xee\xf0\xb2\x4a\xc0\x03\x38\xd3\x37\xca\x46\x7a\x35\xce\x01\x4d\xa0\x01\x25\xa8\x89\x20\x36\x9f\xdd\xef\x15\x38\x62\x45\xf7\x05\x9c\x0d\x71\x59\xd0\x07\x3c\xd6\x5b\xb5\x60\xa8\x17\x4c\xde\xde\x9e\xb0\x65\x10\xbb\xd9\x03\xd3\xf8\x05\x78\x74\x39\x4d\x5c\x56\x33\xa0\x77\x46\x9b\x49\x24\xce\xf0\xa1\x01\x84\x2d\x49\x14\x18\x80\x2a\xd7\x96\x72\x5b\x21\xa0\x7b\x60\x47\xac\x14\x37\x53\x3b\x1b\xfd\xad\x4c\xad\x4f\x55\x7e\x8a\x87\x90\x61\x32\x0f\xd6\xaa\xe0\x67\x26\x90\xfe\x25\xd1\x71\xf4\xe8\x0e\x2a\xfe\x20\xe2\x4a\xa9\x50\x0d\xa4\x22\xd6\x7d\xb8\x06\x0c\xca\x3b\x71\xd7\xb0\xe4\x96\x5e\x64\xaf\xa6\x9d\x18\xb3\x31\x11\x0c\x7b\x46\xb5\xcf\x72\x32\x5d\x01\x1a\xf9\xdf\x16\x2f\xfb\x13\x9f\xff\x1a\x15\x69\xa3\x9e\x5f\x0d\x63\x66\x7b\x8a\x85\x10\xab\x8e\x03\x33\xe8\x23\x6b\xe9\x90\xe6\x19\xa2\x5c\x87\xb0\x2b\x53\x22\xab\xa9\xc0\x83\x75\x62\xd0\x9f\xa3\x04\x5a\xa5\x69\x59\xfc\xf2\x93\xb3\x53\x34\x3e\x4e\x83\x88\xab\x4d\xd9\xf7\x0a\x46\xd1\x74\x89\x85\x40\xf6\x8e\x69\xcd\xa3\x35\xb6\x11\x48\x8f\xd8\x92\x12\xb1\x70\x05\x8f\xed\x57\x84\xae\x32\xa4\xfc\x73\xc9\x15\xa0\xcf\xe7\x92\x4a\x3a\xe1\x4a\x4d\xdb\x55\x6f\xd4\xbd\xdc\x6c\x2f\x69\xb6\x69\xf4\x2b\x81\x7c\x1f\x67\x5e\x32\xc1\x00\xe5\x68\xe9\x45\xe6\xd2\xbd\xc2\xe8\x67\x77\x21\x66\x9b\xe2\x73\xe7\x63\x3f\x9d\x8c\xc7\x47\x68\x36\xfd\xfe\x8f\x7d\xd9\xc0\x98\x3b\xd0\x4d\x3a\xe0\xbd\x39\x91\x0f\xfa\xed\x6e\x68\x04\x62\x8c\x66\x9d\x1d\xcf\x95\xe0\x77\xef\x30\xff\x3d\xba\x45\x6c\x63\x7e\xd7\x99\x3e\xcc\x90\x77\x3e\x1e\x9d\xa1\x07\xfa\x70\x1f\xe8\x83\xb3\x03\xdd\x47\xd0\xf9\x3c\x40\x65\xb7\xb6\xbc\x8c\xc9\x3c\xd1\x7c\x62\x8d\xf2\x41\x03\xfa\xd6\x29\xdd\x83\x06\xb4\x43\x0d\xa8\xa9\x63\x72\x32\x1b\x53\x98\x31\x5b\xb0\xd1\x68\x21\x94\xa8\xd0\x61\x13\xa3\xa4\x6b\xb5\x18\x0f\xcf\xd1\xe0\x93\x2a\x46\x52\x28\x10\xa9\xcf\x70\xb6\x9b\x90\x51\x32\x6a\x1e\x49\xfe\xa9\xd9\xa5\x51\xa9\xb2\x63\x3a\xcc\xc0\xb9\x08\x28\x47\xce\xc0\x79\x1b\x22\xe2\x54\x9f\xb4\x2e\xa4\xd0\x29\x55\x7d\x2c\xce\xbb\x3e\x10\xa0\xed\x49\x2a\x14\x8e\xb3\x63\x55\x2e\x18\x89\x2e\x91\x49\xf0\x48\x9a\x35\x83\x98\x2e\x54\x98\xa6\x2a\x17\xdf\x2a\xc2\xe0\x41\x5e\xbc\xdf\x54\xf4\x41\xa7\xdc\xad\x4e\x79\x40\x42\x3a\x6e\x26\xa4\xe3\x7e\x08\xe9\x78\xdf\x84\x74\xfc\x40\x48\xf7\x25\x58\xa3\x65\xb8\x80\x1c\x97\x24\xeb\x67\xfa\xfa\x57\x9d\x2c\x54\x10\xaf\x1f\xa4\xeb\x6f\x96\x2f\x3c\x48\xbf\xdf\x86\xa2\xbf\xa9\xfd\xff\xc1\xf2\xbf\xef\xd3\x58\x85\x20\xef\xe0\x5a\x55\x6f\x23\xa6\x17\x20\x6b\xf4\xf1\xf7\xc3\xd0\xf6\x79\xf8\xbf\x45\x91\xed\x5b\x38\xfd\x65\x33\xdf\x7d\x32\xf0\x3d\x28\x74\xdf\x03\xe3\x7e\xb0\xd1\xff\x29\x0f\x6f\x07\x25\x62\xd3\xd0\xb0\xa7\x6b\x53\xa0\x02\xea\xba\x06\xf9\x1a\xff\x52\x9d\x82\x04\x18\xc5\xe3\x2b\xf2\x8b\x8a\xd5\x40\x69\x5b\xfa\x6f\x20\x54\x6d\x8d\x28\x04\x4b\xd5\x47\x31\x84\x1e\xd2\xb9\x01\x48\x70\x7d\xed\x16\xf3\x08\x06\x60\xa5\x5a\x24\x0e\xc1\x4b\x01\x60\xc0\x29\x80\xbe\x64\xb9\x2a\x7c\x0c\xdd\x61\xae\xaa\x1e\x84\x92\x1f\x33\xc2\x87\x7b\xee\xe0\x66\xd6\xd7\x63\x78\xf6\x8a\xba\x5c\xa0\xd0\x35\xf6\x87\xc3\x46\x69\x5f\xfd\xf1\x31\x8c\xde\x7d\x3c\xde\x2a\x4a\xbb\xb0\xa2\xa2\xa3\x67\x45\xc1\x95\x40\x21\x78\x6a\x6e\x97\x15\x50\x3b\x11\x5e\x52\xef\xc6\x95\x68\x93\xf7\x25\xa4\x47\x41\x1f\xd4\x12\x40\xe3\x74\x44\xec\x07\xe8\x1a\xdd\x09\x67\xe0\x78\x90\x78\x28\x88\x7f\x50\x32\xc3\x6c\x99\xff\xa5\x8e\xc7\xeb\xb4\x21\x89\x73\xe5\x41\xb6\x06\x4f\x8c\x4d\xc7\x79\x73\xbb\x74\x06\xce\xaf\x28\x74\x06\xce\x2f\x10\x8b\x01\x60\x08\x06\xc1\xfa\xef\xe0\x15\xbe\x41\xc3\xe1\x90\x23\x86\x69\xc4\x83\xf5\xdf\xad\x29\x5f\xfd\xa9\xff\xf9\xe5\xba\x09\xa0\x6b\x60\x0e\x30\x01\xd7\xfa\x66\x5f\xc0\x3f\x1d\x38\x8b\x51\x99\x61\x9b\x09\x64\x9f\x8e\xeb\x9c\x40\x55\x37\x0d\xa8\x67\xbe\xc5\x3d\xb4\x9a\xc0\x76\xb4\xa9\x01\x85\x49\x8b\x91\x9a\x6d\x7d\xa5\x1f\x03\x57\x71\x72\x5d\xc7\x56\x66\x75\x9b\xdc\x75\x9b\x6b\x36\x7a\xd7\x5b\x3d\x70\xe0\x0a\x62\xc9\x26\x2e\x32\x77\xd3\xa4\xc3\xed\x30\x61\x20\x58\x84\x06\x4e\xc8\xe8\x32\x6c\xdd\xe6\x6c\x0f\xac\x3a\x16\x5d\x04\xa3\xb9\xdd\x7b\x43\x05\xca\xd5\x93\xaa\xa9\xab\xc5\x8b\xe9\xc6\x69\xc3\x7d\xb9\x97\x44\xb2\x5c\x18\xe8\x3e\x10\x8a\x77\x53\x12\xac\x75\x14\xb6\x8a\xad\x16\x14\x4c\xd7\x21\xe4\xba\x84\x96\xdc\x41\xf3\xac\x94\x14\x7c\xb4\xa4\x84\x0b\x5d\x0d\x04\x84\x11\x53\x55\x1c\xf7\xcd\xc0\xf3\xe8\xb6\x15\x1f\x9f\x07\x74\x0a\x03\xa5\x0e\x20\x76\x60\xc6\x1d\xcc\xef\x6e\x4f\xc7\x93\x0f\xf6\xce\xab\xff\xc3\x0c\x58\x6e\x91\x6a\x4f\x0c\x25\xf0\x76\x0a\x95\xf4\x5d\x28\x2b\x58\x20\xf9\x16\x1a\xa2\x5f\x75\xa7\x0c\x12\x8b\xd4\x5e\x23\xad\xcf\x23\x29\xd1\x99\xf0\x90\xf8\x66\xd6\x40\xe6\x2c\x11\x89\x9c\xf6\xae\x16\x29\xa3\x53\xf2\x02\x2e\xa7\x11\x9b\x23\x76\xa1\x9e\xff\x5c\xe3\x3e\x51\x63\x9f\x28\x4c\x14\x18\x06\xfc\xd1\x22\x7e\xd7\x55\x9f\xd6\xe3\x56\x9e\x72\x43\xce\xe3\x42\xaf\x83\x4f\xce\x17\x3a\x35\xd6\xf8\x34\x33\xd2\xc0\x07\x0b\xb4\x54\x3a\x17\x9d\xd3\xc6\x1a\x2d\xb9\x49\x69\x9c\x54\xef\x65\x27\xd4\xe8\x9a\xb0\xd2\xa4\xda\x3d\x44\xc5\x1d\x74\x8a\x29\xf5\xa6\x8a\x89\x2a\x12\xa1\xba\x1a\x3b\x03\x07\x91\x5b\xcc\x28\x91\x2b\x51\x73\xf2\xd1\x2d\x0a\x68\xa8\x7f\xb7\x4b\xb1\x2f\x43\x32\x39\xc3\x35\xe0\xac\x00\xe3\x95\x7c\x6d\x1e\x61\x7f\xcb\x5e\x20\xf9\x2c\xec\x62\x49\xce\x85\x10\x21\xff\xf1\x91\xde\x9d\x90\x51\x75\xe4\x31\x7d\xe4\x53\x8f\x57\x80\x57\xcf\x39\x81\xef\x25\xf5\x22\x39\xef\xaa\xea\x0d\x65\xa0\x70\x24\x24\x93\xe3\x43\x41\x6f\x10\xa9\xc3\xb4\x0a\xd0\x3c\xb9\x78\x05\xae\xcd\xbb\xcd\x69\xb8\x4d\xe2\x4e\x3d\x36\x49\x64\xe7\xc8\xa3\xc4\xdf\x84\x9c\xc4\xc7\x45\x13\x09\x3b\x5d\x31\x02\x05\x43\x73\x4c\x89\xcb\x57\x58\x78\x0b\x49\x97\x63\x81\x22\x2d\x58\xe5\x98\x9a\x0c\x34\x12\x52\x99\xf3\xdb\x48\x77\xc9\x24\x2d\xe4\x72\xca\x10\xf4\x3d\x16\x2d\xa7\xea\x48\x43\x66\x6b\x62\xe8\x64\xb3\x97\xad\xa4\xe7\x78\x30\xea\x28\x45\x94\x85\x8a\x84\x5b\x4a\x29\x65\x03\x66\x99\xe3\x69\xdb\x71\x47\x4d\xcf\x0d\xe5\x3c\x24\x6f\xfc\xc7\xcd\xe4\x87\xd7\xd7\xab\x73\x3b\x6f\x24\x70\x89\x94\x31\xc2\x19\xd4\xf3\xc9\xaa\x0e\xb5\x52\xba\x35\xbd\x07\xd5\xf6\xa3\x99\xb0\xb4\xa8\xc5\x5c\x7b\xdb\x75\x0b\x27\x9a\xf1\xbc\x7f\x2e\xf2\xa2\xc2\x69\x28\x7e\x4f\x03\x76\xbb\x4f\xa4\xd2\xbc\x16\x5e\x6c\xdf\xf1\x68\x10\xc0\x90\x23\x5f\xed\xe1\xb6\xdf\xbb\xe7\xbc\xbf\x3b\xf7\xaf\x31\xdc\x55\xac\x52\xf2\x6c\xd7\x54\x36\xb5\x11\xb1\x2e\xec\xbe\xbd\x95\x30\x65\x59\x1c\xfb\xa8\xa4\xf2\x19\xb8\x56\x31\x79\x55\x7d\x6f\xcd\x25\x0f\x19\x38\x3a\xf1\xf2\x6a\x41\x57\xef\x15\x91\xe5\x5d\xca\x30\x59\x88\x7b\x8a\x61\x52\x8f\xa8\xb2\xf1\x3a\x99\xa0\x8e\xe2\xd4\x0d\x7e\x54\x5a\x87\xf5\x3c\x3b\xd9\xa5\xcb\xe5\x25\xf4\x87\x32\x85\x25\x2a\xed\xc6\xb9\x62\xb0\x85\x47\x6a\x15\x6f\xf9\x85\x98\xc7\xad\xb0\x5f\xd9\x03\x37\xb3\x84\xc1\xa7\xf1\xa8\xcc\xed\xaa\xe3\x78\x6a\xd7\xde\x00\x96\x36\xf1\x3f\x2d\x23\x63\x36\xd9\xc9\x5f\x28\xbb\x09\x28\xf4\x5b\x9d\xbc\xd6\xfb\xd7\x0a\xd1\xdf\xc4\xdc\xa1\x1d\xae\xb7\xc2\x84\x8d\xf1\xc0\xcc\x38\xa4\x2b\xc4\x5c\x8e\x02\xe4\x89\x54\xbc\xa1\xa1\xae\xb2\x39\x70\xf4\x1d\xe4\x3b\x71\x7f\xf8\xe7\x18\x05\xe9\xaf\x67\x04\x4e\x03\x75\x97\x12\x6f\x01\x89\xb2\x98\x08\x38\x57\x35\x2f\x73\xc5\xda\xd2\x8e\x85\x39\x30\x0c\x0a\xd0\xd2\xf5\xc4\x93\x47\x14\x2a\xa8\x42\x8f\x9a\x40\xcf\x33\x8d\xe5\x8b\x83\x65\xab\xe3\x8c\x8e\x72\x31\x70\x95\x74\x7d\x4e\x05\xfd\x99\x4e\xf9\x73\xca\xb2\xdf\x4c\x8a\x25\x4a\xb8\x0e\x52\xb6\x9e\x39\x1b\xd6\x12\x73\x96\x9a\x8c\xa3\x4c\x5b\x43\x27\x15\x09\x3a\x95\x07\x93\xff\x5d\xea\x57\x41\x32\xcd\xaa\x83\xd2\x6a\xb4\xf8\xd4\xe7\xe7\xd7\x5c\x4b\xac\xba\xa4\xcd\xa0\xf8\xa1\xb6\x44\xa0\x65\xc9\xb2\xd2\x59\xa8\x52\x8f\x35\x06\x5d\x24\xaa\x0b\xe6\x6e\x5c\xa4\xde\xaa\xb8\xfc\xac\xde\xac\x9e\x43\x1b\x77\xda\xe6\xe4\xe8\x22\x88\xb8\x40\xac\x5f\x6a\xd4\x12\x66\xa6\x65\xc0\x66\x60\xbb\x88\x5f\xee\x00\xb9\xc6\x19\x71\xc4\x6e\x4d\x8d\xad\xee\x33\xba\x8a\x5f\xde\x6e\x2f\x3b\x6b\x4a\x55\x04\xb8\x20\xcb\x33\x9b\x87\xdf\xe8\x6a\xe3\x96\xa3\xdb\xc5\x77\x77\x0a\xbd\x1b\x9f\xd1\xb0\xbb\x5c\xdd\xa7\x08\xdc\xbb\xfa\x98\x2a\x7d\x5b\x29\x8f\x5f\xe8\xd4\xf5\x51\x18\xd0\xb5\x8a\x69\x33\xf1\xbb\x07\xd6\x23\x27\xe1\xf9\xe5\x3f\xff\xf9\xf2\xb2\xab\x8d\x55\x2a\xf6\x86\xc5\x2c\x20\x5f\xa4\x2c\x7b\x89\x04\xc3\x9e\x8e\xf1\xe7\x37\x3f\x31\x1a\x85\xf2\x47\xa6\x0b\x88\xe6\xc3\xa7\xf9\xd2\x6b\x4e\x1e\x3a\x8f\x32\x80\x8a\x47\xfc\xac\x0d\x1e\xf1\xf5\x94\x9d\x67\xaf\x69\x74\x6a\x1a\x5d\x4e\xcd\x9d\xeb\xb9\xf5\x38\x6c\x66\xd2\xc5\xf5\xb6\xfa\x82\xf9\x8c\x0d\x77\x37\x75\x14\xd8\x91\xae\x47\x3c\x3e\x74\x09\xb6\xb7\x3f\x7d\x78\xff\xf1\xf1\x4b\x3b\xfe\xfa\xb5\x46\x8f\x76\xc1\x50\x00\x13\x15\xa0\xa5\xd6\x81\x93\x1d\xb5\x18\x37\x8a\x11\x36\x85\x2d\x1e\xe8\x92\xef\x2f\xfd\xca\xa2\x9e\x45\x3d\xbb\x48\x66\xb3\xa1\x44\x02\xce\x15\x99\x2d\x7f\x44\x40\x11\x71\xc3\xae\xf2\x01\xb5\x15\xcf\x56\xcc\xa7\xac\x4b\xe4\xde\x65\xe8\x8f\x08\x33\xc4\xdf\x31\xba\xa4\xa6\x56\x69\xbd\x20\x59\x63\x46\xc8\xae\x2c\x89\xdd\x32\xe5\x65\xe5\x9f\x0b\x1a\x04\xb9\x62\xb8\xef\xcd\xd7\x41\xe6\xf3\xdd\xc4\xb9\x9a\xd9\xe4\xb3\x60\x5a\x7b\x7b\x1a\xa3\xbb\x6a\xde\x2d\xc4\x75\x7d\x44\x8c\x57\x15\x3c\xae\x19\x65\x01\x79\x2e\x65\xc2\x8c\xf6\x2f\x4e\x15\x02\xdc\x9a\xef\x0c\x1c\x5d\xed\xab\xb1\xe8\x79\x01\xcd\x8f\x06\xce\xff\x55\x16\xab\x7a\x8a\x12\xaf\x99\x2d\x57\x71\x6f\xd7\x78\x99\xd1\x92\xac\x06\x3a\x90\x37\xa4\xdb\xe2\xc9\x3b\x7e\xa6\x4b\xc5\xd3\x4e\xb6\xac\x2d\x93\xb5\x26\xd5\xd9\x59\xc6\x06\x99\x8a\x61\x83\xe4\x81\x04\x76\x09\xe8\x62\xb9\xa4\x30\xcf\x66\xe9\xf3\xd8\x2e\xf0\xd5\xd1\x84\x6a\xa1\xb5\x29\xa0\xdc\x7c\xb0\x4a\xa6\x4a\xfd\x23\x8d\x5c\xb7\xc1\x4d\x99\x28\xa7\x89\x18\x62\xc7\x80\xfc\xc3\x19\xd9\xa7\xd5\xf3\x39\x71\xa1\x59\x01\x2e\x6a\xbb\xad\x69\x5f\xff\x22\x45\x8f\xa2\x44\x95\xfc\x74\x58\x09\xe3\x5f\xf1\xf1\xeb\x67\xcb\x37\xc4\x2e\x61\x28\x4e\xa8\x38\x53\x77\x39\xa3\x42\x8c\xd8\x30\xad\xe3\x49\x0a\xb1\x5a\x5f\x5f\xab\xc3\xa6\xd8\x98\x24\x2f\xd3\x00\x15\x79\x99\x13\xab\xcb\xed\xba\x23\x94\xc8\x6b\x01\xd7\x8b\xbf\xdb\xb4\x88\x3f\x4c\xc7\x04\x03\x82\x97\x97\x35\xe6\xe3\xe2\xc3\xd7\x90\xdf\x00\x45\x09\x3a\xbc\x74\xa1\x0a\x4a\x56\xc5\x74\xdb\xde\x78\x4d\x7d\x3c\xc3\x9d\x5e\xb9\x32\xb2\x5f\xeb\x17\xea\x64\x12\xfb\x1b\x6f\x4c\x24\x56\xdb\x65\xbf\xfb\xd0\x65\xc9\x68\x49\x59\xb1\xef\x44\xd7\x76\xf8\xd9\x0e\x0f\x6d\x10\xc9\x88\x11\x29\xca\xba\x2c\x49\x45\xfb\x94\x25\xe3\x3a\x8c\x4f\xa8\x3a\xe1\x69\x37\x09\x5d\x79\x5f\xce\xf1\x0b\x9d\xb6\x6a\x9b\x50\xdd\x8c\xbd\x89\x05\xd4\x18\x42\xfa\xa1\xfc\x15\xe4\x7a\x47\x0c\x21\xb1\x2b\x1c\x94\x19\x90\xc5\x53\x7f\x4d\xbd\x57\xed\x62\xc9\x2b\x3d\x84\xd1\x92\x70\x60\x37\x71\xb4\x63\x08\xc6\x9c\x57\xd5\x39\xaa\xfa\x45\xfd\x25\x6d\xfb\xa8\x51\x51\xaa\x0c\x7d\xfa\xf5\xca\xd6\x4f\x25\x5a\xaf\x7a\x6d\xfb\x17\x90\x40\x86\xb3\x7e\x96\xdc\x43\x3e\xe2\x98\xe5\x9e\x4a\xfc\x1e\xb9\x68\x3d\x73\xad\xfd\xd7\xcb\x03\x27\x1d\x51\xd4\xd0\xb1\xa2\x56\xa7\x3e\x18\x80\x2c\x26\x45\x48\x16\x8d\xe9\xe9\x57\xea\x48\x58\xc9\x30\xaf\x10\xb2\xd6\x6a\x50\x86\x61\xb6\x47\xc3\x23\x50\xa9\xdc\x59\x96\xdf\xb6\xa1\x95\xe5\x52\xdf\xa8\x55\x7a\xd3\xf6\x4e\x07\xf8\xbf\x53\x60\xda\x11\xf4\x95\x70\xd5\x19\x82\x3b\x5f\xf3\xa5\xde\xe1\xde\x17\x6d\x30\xe7\x5a\xb7\x84\xb9\x57\x68\xd3\x96\x22\x65\x3c\xb4\xb9\xa5\x2d\x10\x0c\xc4\x62\x9d\x6e\xe8\x91\x8d\xd8\xf4\x4f\x1e\x5e\xe8\xef\xf6\xbe\x55\xa5\xf5\x7c\x47\x7b\x15\x91\xfa\xdd\xf2\x21\x99\x23\xb6\x83\xcd\xfa\x10\x7f\xb8\xf7\xed\xb2\x2c\x69\x8b\x0d\xeb\xa4\xe5\x69\x99\xa1\x51\x58\x28\x6e\x1a\xa1\x02\xcf\xb0\x69\xcf\xde\xc5\xe2\x6c\xb3\x76\x54\xbc\x9b\x6b\x1e\xba\x59\xf2\xc9\x5e\xc5\x5d\x23\xaf\xf5\x29\xea\x66\x5d\x52\x87\x95\x71\xbf\xfe\xf0\x1c\xf2\x5f\x7e\xba\xbd\xef\x06\x8f\x54\xb5\xbe\xe7\x06\x8f\xc4\x18\x78\x15\x2d\x97\x89\x28\xe6\xe4\x9c\x90\x3b\xb6\x7b\xc4\x0a\x79\x55\x0b\xe0\x8a\xc7\x11\xf2\x33\x1e\x96\xbf\x77\x78\xf5\x49\x24\x28\xd0\x39\xfc\x5d\x5e\x6b\x27\x44\xe7\xbf\x64\x08\x69\xeb\x17\x0c\x27\x06\x9d\x5f\x4c\xb8\x42\xf7\x57\xdf\x31\x3a\x67\x88\x73\x70\x89\xa0\x1f\x57\x9a\xda\xa3\xdd\xa2\x7d\x17\xca\xf3\xc4\x2e\x3d\x6e\xea\x71\xdc\x38\x8e\xcd\x37\x90\x1f\xb7\xbb\x13\x31\xff\xb9\x7c\x4d\xb8\xfc\xd8\xa1\x1a\x53\x65\x42\x0c\x9c\x37\x54\x25\x43\xf2\x8a\xd2\x70\x9b\x45\xb0\xbd\x79\xf4\xa4\x2a\x3e\x6d\xf0\x69\x8b\x36\x97\x55\x2b\x82\x91\xa0\xfa\x4c\xa9\x6f\xfe\xaa\x82\x0d\xdf\xd0\xd2\x9a\x3a\x7d\x89\x32\x1b\xec\x4a\x3a\xe7\x91\x05\x70\x19\xe5\x33\xff\x7a\x17\xcd\xb3\x25\x06\x56\xe9\x61\x2d\xa6\xd1\xac\xc6\xb4\x9c\x43\x7b\xd1\xad\xe5\x80\x5d\xa4\xc1\x9a\x13\x56\x3c\x15\x15\x2e\xd8\xbc\xb5\xc8\x5a\x03\xc4\x7a\x3a\x63\xe2\xf5\xb4\xe7\xaa\x20\x3b\xb3\x76\xee\x4a\x02\xcc\x70\xec\x1e\x45\x3f\xee\x72\xc1\x10\x5c\x1e\x58\xec\xfb\xf9\xdd\x04\x2d\x5f\xac\x5f\xdb\xc5\x3e\x86\x3c\xca\x2c\xe1\x34\xc7\x03\x07\x41\x6f\x91\xe8\x6f\x26\xb9\x1b\xf9\x97\xe9\xfa\x8a\xfd\x93\x33\xce\x43\xec\xd7\x47\x30\x27\xae\x57\xa8\xc3\x67\x56\x97\xba\x0a\x40\xab\x40\x93\x4e\xf5\x9f\x8a\x5c\x6a\xd4\x29\x2a\xa0\xa5\xdf\xa0\x58\x53\xaa\xeb\x67\xb6\x65\x5b\x1f\xc8\x0d\xa1\x2b\xa2\x4a\xda\x34\x72\xae\x0e\x22\x4a\xd6\x99\xbf\x41\x8d\xab\x0c\x84\x8a\xc1\x65\x55\x8e\xfc\x12\xe4\xb4\xe2\xd9\x58\xce\xa2\xae\x15\x6a\xcf\xe4\x22\x3e\xd7\xdb\x93\x0a\x3c\x9b\xb9\x33\x8c\x02\x9f\xbb\x90\xf8\x06\x8c\x87\x56\x13\xdf\xbd\x0e\x3e\xcc\xce\x3f\xfc\xc3\x4e\x2f\xcc\x56\x0f\x1c\x35\xef\xb6\xda\xa2\x5a\x69\xac\x96\x25\x95\x3b\x4b\x87\x34\x47\x71\x34\x60\xda\xd2\x84\x2a\x2b\x47\xf9\xcb\x2e\xa3\xab\xd8\x54\xe5\x51\xe2\x41\x15\xea\x98\x7b\x4e\x99\x8d\xa4\xe6\x68\x1e\x0b\xe8\x0a\x31\x0f\x72\x94\xe1\xa5\xd7\xeb\x10\x95\xeb\x1c\x77\xcc\x25\xb4\xcc\xce\x43\x41\x45\x28\x7f\x71\x9c\x92\x15\x0e\xb2\x9b\x34\xd7\x32\x5d\xda\xf6\xeb\x70\x2a\x72\xe9\x5b\x0d\x39\x70\xa0\x9f\x35\xe1\xb5\xd2\x02\x7e\x68\x4b\x04\xb7\x98\x96\x8f\x02\x24\xba\x4e\xcc\xdd\xc3\xc4\x90\x8f\x3b\xcf\xeb\x87\x47\x6e\x41\x52\xab\x09\x15\x6a\x4a\xba\x29\xea\x39\x75\x62\x5f\x22\xfb\xbe\x29\x27\xf9\xfc\x58\x65\xf2\xdc\x2f\x42\x75\x3f\x80\x20\x77\xdd\x24\x9e\x65\x8f\x84\x53\x58\x3b\x5a\x95\xec\x9b\x4e\x1b\x3e\x7b\x48\x74\xde\x3d\x58\xde\x06\xfe\xc1\xc1\xd2\xf5\x30\x1d\x08\x2a\xe0\xff\xff\xbf\xc1\xee\xd0\x6a\xab\xf5\x6d\x8b\xf8\xd5\x04\xa9\x2b\x2d\x6a\xaf\x67\x96\xd5\xc6\xb2\x80\x41\x93\x9e\x4d\x1d\x42\x59\x0b\x4c\x77\x1b\x29\x62\xd4\x41\x8a\xe8\x9f\xf7\xb7\xfd\x7a\x07\x52\x5d\x1e\xb2\x33\xa9\xee\x9b\xef\xdb\xa6\xd4\x99\x50\xf6\xcd\xf3\x6d\x93\xea\x4a\xa6\xb2\xfc\xbe\x37\x5e\x6f\x39\xb8\xe9\x71\x1f\xd9\x79\x3c\xf8\xf7\x16\x41\x11\xe5\x73\x51\x2d\xe2\x66\x15\xc6\x2a\x05\x29\xd6\x1e\x8d\x8e\x30\x48\xcf\x72\x0a\xe1\xe7\xb1\xfe\x90\xcc\x3e\x6d\xd2\x66\xaf\x84\x67\x05\xc0\x7f\x1c\x4a\xdf\xb4\xaf\xbd\x17\xa5\xf3\xd0\x1a\xe6\xdb\x53\xf6\xf6\xcb\xf8\xc4\xae\x61\xea\x20\x04\xed\x46\x73\x06\x4e\xb6\xaa\xa0\x83\x89\x8f\xee\x94\xcb\x3b\xd2\x5e\xf7\xd0\x87\x02\xe9\xb3\xd4\xbe\x0a\x4e\x31\x87\x55\x83\x24\x3e\x92\x5b\x68\x86\xe5\xc1\x8a\x6d\x70\x6a\x8b\xe8\xf4\x46\xdd\x1b\xe7\xb1\x21\x89\xaf\x1c\xb7\x23\x9d\xef\x97\xca\xd7\xcc\xaa\x23\xa9\xef\x97\xd0\xd7\xcc\xab\x1b\xb5\x4f\x69\x7d\x4f\x94\xbe\x44\xe6\xda\x0a\x85\x53\x1a\x64\x5d\x14\x3f\xd3\xe9\x8f\x59\xa9\x35\xb3\xe2\x97\x97\x2d\x24\xd7\x0a\x29\x2d\x05\xad\xf1\x61\xc9\x71\x6f\x11\x9b\x52\x9e\x1e\xd0\x9e\xa0\xbe\x61\x1a\x53\x1b\x86\xd6\x0f\x33\xcb\xac\x27\xcb\xd1\x32\x97\xeb\xd9\x5a\x37\x6b\x6f\x85\xa8\x1c\x03\x34\x9b\xfd\xb4\xa5\xd0\x9c\x33\xc8\x6f\x4f\x7a\xeb\x04\xda\x07\xa9\xfa\x41\xaa\xbe\x7f\x52\xf5\x06\xf4\x36\x8d\x8c\xfa\x31\x6f\x2c\xa8\x90\xcd\xed\x34\xb7\xe8\x0d\xfb\xa0\x84\xa8\x36\x35\xa3\xfe\x5a\xa4\x0d\xa7\x03\xc7\x95\x3f\x5c\x4c\x6a\x06\xac\x19\xb7\x83\x79\x3b\xa1\xa1\x5a\xe8\x73\x95\x0c\x98\x9c\x4d\xce\xdd\xf8\x69\x39\x8d\xc7\xb9\x1c\xd8\x9c\x9f\xfe\x44\xe5\xcf\x66\x35\x98\x14\x8e\x8f\x73\xf7\x5a\xd8\x30\x4e\x06\x8f\x73\xf4\xf3\x6f\x5d\x48\x6c\x89\xcf\x6d\x89\xdf\x83\x22\xa7\xec\x50\xc2\xf6\xbb\xd2\xdb\xba\x33\x39\x03\x5e\xc8\x6f\xda\x9c\x83\x2e\xec\x6d\xdc\x13\x7b\xab\xf6\xd5\x74\x70\x3d\x7d\xbf\x2e\xa3\x7b\xea\x30\xba\x9f\xee\xa2\xbc\xb3\xa8\x47\x57\x91\xd5\xf2\x2b\x4f\xd5\x8f\x16\xe3\xb6\x95\x5f\x55\xc4\x15\x3e\x49\xac\x00\x6d\x6b\x1b\x96\x78\x55\xb7\x81\x1a\xa2\xaf\xac\x66\xe0\x02\x0f\x9a\x54\xf3\xa0\x49\x3d\x9f\x49\xbf\x79\x3c\x70\x22\x12\x20\xce\x4b\x75\xff\x8e\xd3\x32\x10\x3e\xf2\x2a\x56\x98\x29\x59\xd8\x56\xeb\x19\xb4\x29\xaf\x5d\x8d\x3a\x93\xc1\x71\x27\x86\xb8\xad\xba\xd7\xfe\x48\xb4\xae\x88\xd9\x07\x23\x1b\x97\x18\xd9\xb8\x81\x91\xb5\x2e\x4a\xda\xd6\x01\xd2\xae\x80\xc4\x4e\xec\x96\x5b\x1b\x29\xe5\xfe\xd1\x43\xb7\xa9\x38\x7d\xf6\xfa\x99\xf8\xe9\xc3\xc7\xfa\x7c\x09\x13\xc1\x2a\xd1\xe9\x39\xc4\x41\xc4\x2c\xa6\xc8\x7c\x05\x95\x10\x32\x8e\x9e\x31\x46\xd9\xc6\x55\x54\x72\xb9\x3b\x69\xc2\x54\x65\xe1\xec\x52\x62\x94\x6a\x70\x23\xdf\x3c\xce\xbc\xf4\x4e\x4e\x0c\x98\x99\x55\xe9\x2c\xb9\x38\xd3\xd1\x20\xb7\x9a\xea\xea\x57\xed\x43\xe2\xb3\x80\x0a\x20\xb9\x97\x70\x0a\x20\xe9\x0c\xa6\x74\x2d\x3d\x43\x89\x45\xf7\x12\x48\xef\xa3\xce\x30\x4a\x57\xb2\x35\x88\xea\x85\x50\x55\xde\x57\xa8\x4e\x5b\x86\x59\xa8\x8f\xd6\x71\x89\xdc\x30\x90\xf8\xe9\x38\x0b\xba\x7a\xa6\x46\x48\xba\x77\xe5\x59\x96\x69\x38\xa2\x4b\x46\x7c\x1e\x38\x04\xad\x3a\x31\xa6\xf6\x1b\x87\xc9\x8c\xda\xf4\xb3\xea\x11\x4c\xc9\x82\x6a\xa5\xae\x5b\xc6\x61\xee\xbd\x0e\x78\x02\xc1\xcf\x74\x6a\x95\x1d\x6d\xd8\xa2\x28\x15\x17\x08\x50\x06\x60\x24\x16\x94\x81\x17\x17\xaf\xe4\xaf\x9f\xaf\xde\xbe\x01\x82\x02\x1d\x61\x2b\xff\x5a\xd3\x88\x01\x4f\xd7\xc0\x1d\x82\x27\x40\x1e\x43\xb0\xc2\x41\x00\xa6\x08\x30\xf4\x47\x84\xb8\x40\x3e\x98\xa2\x19\x65\x48\x35\x82\xfa\x42\xa7\x00\x73\x33\x84\x40\x7e\x55\xbf\xfd\x9a\xcb\xb5\xa5\x1d\x30\x77\x3d\x44\x04\x62\x48\x95\x22\x5c\x62\x82\x97\xd1\xb2\x01\x96\x4d\x25\xc4\xe2\x9d\x2f\x97\x5b\xd5\x25\xc2\xdc\xa4\x82\x98\x05\x5f\xcb\x45\xc3\x92\xb9\xbc\xbd\x81\x75\xa9\xb2\x1b\x64\xb6\xb6\x8d\x36\xee\xde\x15\xb7\xe5\x8b\x95\xcd\xb3\x7f\xa6\x53\x70\x99\xd4\x82\xb4\xd6\x3e\xd3\xbd\xdd\x74\xf8\x6a\xfb\x50\xa2\x2d\xeb\xbf\x75\x2a\xa1\x7b\xa1\x66\x68\xeb\x1e\x11\xdf\xe9\x5a\x1b\xbb\x9a\x7c\x6f\x9d\x7f\x59\x12\xb9\xf1\xed\xda\xf5\xa8\x8f\x96\x58\xb1\x81\x44\xca\xd6\xe9\xd7\x26\x0d\x5b\x5b\x17\x55\x49\xf8\x30\x5f\x77\x36\xa3\x3e\x7c\xa1\x53\x67\xe0\xfc\x1b\x41\xab\x74\x4b\x53\xc7\xc9\x17\x3a\xbd\x0a\x91\x97\xd1\x18\xaa\xe1\x7a\x3a\x70\x96\x91\x68\x1a\x38\x4f\xd0\x07\xb6\xfa\xb9\xd4\x57\xb5\xeb\x17\x68\xa9\x6b\xd8\x4f\xaf\xf0\x57\xf9\x57\x80\x09\x7a\xa3\x8a\x34\xea\x32\xd4\x5f\xe0\x2d\xd4\x59\xd3\xba\xf0\xe3\x02\x3b\x83\xb1\x6a\xe4\xf7\xb9\xca\x00\xf6\xff\xb1\xf7\xa6\xdb\x6d\xe3\x58\xa3\xe8\xff\x3c\x05\xc3\x73\xbf\xb4\x74\x42\xd1\x1a\x3c\xd7\xa7\xce\x71\x39\x49\x25\xe9\x0c\xae\xd8\x49\xba\xca\xed\xd5\x0b\x16\x21\x09\x09\x45\x28\x00\x68\x5b\x49\xbc\xd6\x79\x87\xf3\x2c\xf7\x05\xee\xa3\x9c\x27\xb9\x0b\x03\x49\x90\x04\x27\x49\x1e\xba\x3b\xd5\xab\x1d\x49\x24\xc1\x8d\x8d\x8d\x8d\x3d\xef\xdc\x1a\x19\x7f\x28\x62\x4b\x01\x83\x81\xa0\x3f\x40\x29\x1e\x21\x20\x4b\x60\x17\x6c\x2f\x8d\x98\xf3\x55\x4c\x23\x8a\x56\xd5\x16\x0c\xe5\xa2\x39\xff\x15\x79\xfd\xef\xc3\x20\x10\x9d\x1b\x65\xc6\x7f\xd2\x34\x32\x51\x97\xf3\x84\x3f\x87\x64\x8c\xc9\x2c\x3d\x9a\x4e\xeb\xfc\x11\x0f\x51\xd5\x33\x20\x4b\x14\xa6\x97\x8b\x7b\x02\xdc\x70\x81\x15\x0e\x19\x57\x3b\x75\x9c\x68\x02\x62\xd5\x9a\xac\x4b\x7a\x91\x38\xa8\x29\xbb\x44\x02\x0b\x07\x30\x11\x57\xfe\xa3\xe5\x0f\xce\xf6\x8d\xeb\x55\x22\x7e\x44\xdd\x42\x45\xe3\x48\xc9\xb3\x89\x24\x29\x8b\xf1\x4b\x5c\x86\x10\x42\xc6\x14\x5c\x40\x0b\x07\x69\x31\xe4\xdf\x50\xa0\xd0\xe9\xe9\x3f\x5b\x9c\x28\x21\xa7\xa6\xc7\xa6\x07\xc8\x97\x8a\x03\x33\x09\xe8\x8a\x8e\x19\xe5\xa9\x8f\xcd\x67\x3a\xef\x7b\x17\xb2\x79\xc8\x94\x5b\x27\x31\xbd\xae\xe7\x48\xc9\x9d\x06\xa9\xee\xeb\xe6\x93\x20\x06\x68\x0c\x90\x0f\xbd\x93\xdf\x92\x74\x59\x3b\xa9\x13\x6d\x9b\xca\x85\x15\x7b\xf3\x9b\xae\xd8\xf1\x68\x0a\xbd\xd0\x87\xc4\xf2\xc8\xa2\x43\xc2\x55\x97\xce\x2e\xf1\x83\x54\x4f\xbc\x98\x85\xa7\x02\x32\x96\x1a\xa4\xc8\xd2\x19\x1b\xb0\x3a\x63\x65\xc1\x4a\xec\x9b\xfa\xd0\xf6\x99\x6e\xd8\xae\x61\xc1\x1c\x14\x3b\x12\xca\x80\x3b\xf0\x7d\x8b\x01\xfa\x85\x6b\x61\xa3\x11\xa4\x94\x0b\x90\x0b\x4b\xd5\x22\x84\x5e\x51\x1b\xde\x12\xa1\x35\xc7\x36\x9c\x62\x8d\x3e\x85\xdb\x39\x81\x70\x16\x77\x2b\x42\xf4\x79\xe8\x8f\x91\xef\xcb\xea\x03\x95\xf7\x9b\xad\xef\xcd\x4f\xda\xf4\x66\xd2\xb6\x46\xa3\xd3\xb6\x9e\x1e\x64\x59\x47\xc9\x1c\xac\x16\x1a\xf3\xd3\xcb\x1a\x4d\x31\xa6\xa2\x69\x32\x09\x83\xf8\x94\x73\xf8\x11\x48\xa1\xa5\x95\x89\x8c\xb5\x6b\xca\xf0\x7c\x0e\xbd\x76\x19\x37\x5f\xc3\xce\x6a\x52\xbd\xa5\x70\xa5\x32\xe5\x6a\xc5\x09\x48\xb1\x0f\x54\x95\x89\x75\x97\x70\xb1\xb2\xd5\x44\x9a\x96\xaf\xcd\x0d\x50\x55\xc2\xb6\xe8\x81\xca\x32\xb6\x45\x0f\x96\x97\xb2\x2d\x7a\xaa\xa2\x9c\x6d\xd1\x63\xa5\x25\x6d\x8b\x1e\x2a\x2f\x6b\x5b\xf4\x54\x49\x69\xdb\x42\x54\x14\x96\xb7\x2d\x44\xc3\x6d\x97\xb8\xcd\x30\xfc\x7b\x58\xe6\xb6\x80\x41\xac\x4f\xdc\xbb\x5d\x3d\x57\x9a\x0f\xd7\xa7\xe9\xaa\xf1\xca\x74\xdd\xc2\xd7\x56\x28\xab\xef\xcb\x24\x9e\x5a\xb6\x2b\xb3\xa2\x50\x68\xa5\x22\x90\xc2\xcc\x54\x4a\xc0\x33\xda\xad\x1a\x10\xc6\xba\xfc\x9a\xd2\x4b\xb0\xb2\x67\x73\x0e\x26\x70\xe3\x1c\x30\x21\xcb\xdd\xa5\x77\xd3\xfb\xba\x75\x38\x7b\xbe\xb3\x5d\xaf\xe2\xb1\x6a\xc9\x20\xa0\x9f\x03\xc2\xe8\x86\xe0\x3d\x31\xe7\xf8\x2c\xed\xf7\x89\x09\xa5\xb8\x03\x43\x46\x7d\xd1\x86\x84\x69\xab\x9f\xf8\x1a\x6b\x95\x36\x0e\x9e\x22\x3a\x43\xfa\x79\x9e\xba\xe3\xac\xd8\x8a\x67\x8f\x7c\x08\xc8\xb3\xd4\xdd\xc9\xf6\x4b\xf3\xb0\x84\xba\x8c\x30\x0a\x1b\x42\x7a\xde\x9c\xc0\x02\xcf\x8f\x9d\xa0\x29\x2c\x14\xc3\x94\x7e\xa8\x0a\x9a\x3a\x72\x21\x07\x95\x23\xdc\x60\x4f\x59\x5e\xcc\x4a\x9d\x62\x7a\x8b\x18\xfe\x95\x11\x9c\x12\x42\x4f\x16\x73\xb8\xaf\x6f\xcd\x18\x93\x89\x69\x8d\xa9\x60\x38\x3d\x02\xf3\x47\xa9\x70\x58\xf5\xd6\x23\x82\x30\x41\x6c\x51\xf5\xe6\xb9\xba\x2f\xfb\xf6\x26\xca\x81\x1c\x29\xd0\xfb\x87\x36\xe9\xc7\xda\x3c\x01\x79\x2f\x85\x22\xd3\xf4\xe3\xd7\x54\xcd\x5f\xef\x1e\x5e\x52\xf8\x6d\x19\xa7\x40\xe6\x87\x8a\x4d\x44\x45\xbd\xc4\x2a\xf6\xd1\x70\x67\xe6\xb4\x58\xba\xde\xf1\x53\x85\x3c\xd3\xfb\x9f\x62\xc2\x22\x3e\xad\xbe\x3e\x85\x74\x04\x03\x4f\x9a\x2f\x26\x98\xe1\x38\x77\xc2\xc0\x21\xa2\x76\xb3\xf1\x18\xa9\x5f\xb5\xa1\x52\x7d\x65\xb5\x11\x9b\xcf\x86\xc0\x51\xae\x1d\x4b\x23\x6c\xdd\xfc\x89\x9b\x1c\x95\xeb\x39\x75\x63\x60\xd1\x37\xe8\x75\x46\x53\xe4\x7b\x77\x7c\x06\xf7\x9f\x5e\xfd\x9d\xfd\xbd\xfb\xe9\xe7\x19\xbc\xfa\x19\xac\x7e\xac\x38\x8b\xb5\x63\x88\xa0\xd9\x4c\xf6\x77\xfe\x79\x4c\xff\x2b\x1e\xd3\x65\xa7\xa5\x21\xad\x24\x07\x0d\x20\x30\x60\xfb\xe6\xb3\x3f\xd3\xf8\xd9\x15\x80\xa5\x60\x14\x4f\xc7\x84\xf3\x35\x84\x64\xd1\x11\x0c\x26\xcd\x47\xb5\xa6\xdf\x69\x09\x42\x0d\x60\x3c\x94\xcf\x9a\x59\x70\x0b\x06\xcd\x17\xdc\x5e\x2e\xc4\xf4\xa7\x30\xf4\x53\x18\xfa\x29\x0c\xd5\xc4\xd6\x6d\xba\x1a\x8f\xc0\xc2\xc7\xc0\x64\x4b\x6d\x72\x8c\x98\x3d\x8d\x76\xde\x6d\x25\xdf\xf6\xea\xf8\xdd\xdb\xa6\xd5\x31\x3f\x53\x1c\x74\x2e\x10\xbc\x84\x9a\x64\xc1\x7f\x4c\x10\x9b\x19\xbd\x1e\xeb\xaa\xe6\x1b\x73\x02\x73\x76\x40\x1f\x75\x2e\x51\xe0\xe1\x4b\x3e\x73\xe8\x03\xca\x92\x76\x2d\x22\x09\xca\x4b\x75\x7a\x10\x21\xce\x11\xa2\x53\x0c\x22\x42\xfa\xaa\xae\xa8\x5b\x91\xa3\x0d\xc2\xef\x0d\x48\xd5\x77\x2c\x4f\xbf\xfb\xad\xff\xaa\x3b\x46\xdf\x7e\xca\xd3\x39\xf6\x64\x27\x7d\x55\x6f\xcf\x9a\xb5\x44\xc3\x68\x06\xcc\x7d\xa1\x8f\x52\x64\xd6\x34\x94\xea\x5f\x49\x38\x57\x7e\xab\x2a\xf9\x25\xaa\x27\x7c\x9f\x45\xf4\x9f\xc2\xe3\xfd\x14\x1e\xcb\x46\x14\x47\x03\x81\x41\x53\xb1\x6e\x14\x12\xae\x7c\x1c\x49\xc6\xc6\x45\xb2\x57\x79\x50\x96\x12\xef\xf4\x91\x53\x32\xdf\xab\xbb\x35\x4d\xa5\x4e\xbe\xb5\x1d\xa6\xf1\x31\x74\xa7\x27\xe9\xf4\xdd\xef\xaf\x67\x78\x52\x50\x34\xfe\x91\x1a\x30\x9f\xe9\xd6\xdb\x12\x04\x25\xa6\xb4\x41\xc3\xf3\x00\x5c\xd8\xd2\xf5\x97\x70\x04\xbe\xf3\x12\x51\x58\xe7\xa3\x25\xed\x84\x7a\x9b\x4e\x2f\x35\x4a\x76\x9b\xc5\xeb\xca\x48\xb8\xea\xb2\xaa\x35\x58\xe7\x9a\x26\xdb\xea\x4e\xd7\x75\xf0\xc7\xe8\x0b\xfa\xf4\xe9\xa9\x79\x5d\x45\xd9\xb5\x15\xfa\x40\x19\x63\x8a\x5e\xe1\x73\xeb\x35\x08\x83\xd1\x14\x52\x73\x83\xf9\xba\x51\x84\x52\x5f\x31\x38\xdb\x31\x61\xd0\x3b\x8c\x31\x9c\x84\x5d\xc9\x0e\x72\x7a\xfa\x41\x49\xad\x02\x11\x49\x34\x07\x13\x14\xa8\x10\x88\x5c\x38\x11\x95\x11\xfb\x73\x29\x6c\x99\xdf\x9e\x84\x85\x81\x09\x14\x21\xfe\x05\x8c\xcc\x1c\x57\x54\x1a\xce\x54\xc9\x83\x93\x70\x27\x19\x20\xc2\x47\x6b\xce\x76\xed\x4b\xc4\xa6\x9d\x31\xc6\xac\x66\xf0\x53\xbf\x69\xff\xaa\x82\x31\x38\x28\x9d\xf3\x45\xd4\x57\x62\x4e\xb0\x30\x10\xc4\x47\xac\x61\xd4\xc8\x7e\x5b\x2f\x63\x7d\x89\x77\x53\x15\x7b\x64\x7c\xfb\x71\x7c\xf1\xc6\xde\x1f\xd9\x61\x0d\x6f\x8f\xca\x8a\xdc\xd8\xbb\x75\x31\xcf\xf0\xfe\x23\xed\x72\x7d\x18\xb2\xc1\x50\x51\x41\xb1\xea\x9e\x5b\x99\x28\xb9\x81\x36\xc8\xb1\x92\x83\x56\x0a\xa9\xea\xeb\x21\x55\x5a\x5f\x13\x11\xf6\x54\xd0\xd2\xa4\xc0\xe2\x81\xcf\xd3\x91\x55\x52\x86\xc2\xc1\xa1\x08\x90\x49\xe2\x68\x93\x90\xaa\xf2\x98\x99\x44\xdc\x71\xb2\x4f\x16\x6a\x7d\x0d\xe2\x71\xb3\x65\x03\xca\x94\x1d\x59\x18\x5a\x72\x87\x42\x25\x87\x9f\xfb\x99\xe7\x34\xce\xda\x30\xdd\x23\x79\xb2\x13\x24\x89\x52\x45\xd9\x0d\x49\x45\x2c\xca\xf8\xd1\x7b\xc0\x32\x5a\xca\xff\xfd\xdf\xff\x27\x7d\x1f\x0c\xbc\xfc\x5d\x16\x1e\xa7\x04\xff\x92\x43\xc6\x54\x91\xa8\x34\x9f\xa3\x20\x9c\x6f\x4e\xe0\x45\x44\x7b\x31\x2b\xd7\x67\xcf\x6f\x40\xb8\x90\x1b\x59\xff\x5d\x52\xcb\xa5\x01\x1c\x81\x4c\x55\x2e\x86\x43\xdd\x60\x84\xe1\xaf\x0d\x61\xd8\x71\xec\xd0\x2f\x59\x71\x79\x84\x15\x44\xc2\x16\xd8\x3e\x2b\x2b\x5e\x34\x0e\xc0\x86\xb3\x39\x5b\x74\x66\xb1\xa1\xa5\x88\xee\xf3\x49\x47\xa9\x27\x85\x80\x14\xb5\x09\x8c\x23\x4e\x53\x22\x52\x99\xfa\x9e\xeb\x4b\x9b\x1e\x3c\x63\x78\x78\x8b\x2d\x02\x67\x00\x89\xbc\x24\x1f\x5d\xf0\x7f\x3e\xe3\x73\xcb\x57\x6f\x32\x25\x22\xd5\x60\xa0\x65\xb2\xf7\x3a\x74\x2a\x4d\x58\x5e\xa7\x00\xae\x0c\x71\x77\x2a\x7d\x9f\x3f\xfd\x78\x7c\xfc\xa6\xbb\x59\xdb\x3e\xa9\x09\xb9\x19\xbb\xe0\xad\x94\x7a\x68\x96\xb1\x57\xf5\x50\x29\xdb\xaf\x93\xad\x17\xb1\xe2\x8c\x11\x55\x1a\x31\xcb\xeb\x29\xd9\x86\x8a\x13\x86\xa1\x3c\x73\xbf\xe2\x3a\x7c\x67\xcd\x99\x7a\x76\xbd\xf8\xdb\x64\x01\x1b\xa5\x89\xc7\x56\xe7\x06\x39\x7a\xd5\xdc\xe2\x0e\x7d\x1b\xd1\x06\x5f\x27\xc7\x10\xd7\x59\xaa\x6b\xd9\x9d\x72\x8f\x93\xbf\xed\xec\x81\xab\x77\xc7\x66\xdd\xdd\xdc\xc3\x4f\x63\x20\x52\x04\x95\x93\x7a\x9a\xea\xaf\x56\x9f\x95\x34\x4d\xf2\x2b\x78\xa7\x21\x2c\x5e\x25\x9c\xae\x39\xb7\xaf\x71\x9a\x11\x49\x39\x1d\xb2\xd2\xdc\xb2\xf3\x3b\x18\x89\x5c\x03\xc7\x7e\x2d\xee\x34\xf5\xaa\xb5\x92\xc7\x0d\xc1\x2b\x45\xf5\x1b\xcf\x81\x37\x11\x3c\xf2\x72\x8a\x18\x5c\x69\x01\x68\x78\x2e\xd8\x68\x54\x42\xcd\x3a\x0f\x67\x73\x48\x3a\x3e\x1c\x2b\x61\x70\x2f\x67\x06\x37\x8c\x4b\xa7\x98\xb0\x97\x5e\xa1\x41\x3c\xeb\x56\x2e\x1c\x68\xe9\xb6\x8c\xa5\xee\xa5\xa4\xb4\x86\xaa\xf0\xd2\x61\x68\x06\x2d\x86\xb1\xcf\xd0\x3c\xc2\x31\x20\x08\xa8\x72\xa7\x5a\x7d\xbf\x74\x47\xd5\xe5\x81\x37\x97\xea\xcc\x91\xd9\x0c\xcb\xf8\x0d\x82\x67\x9d\x80\xeb\x92\xab\xbd\xb4\x40\x4b\x69\x9e\x62\xb3\xc4\xf9\xd7\x60\x8f\x95\x51\xbb\xf2\x0d\xe2\x90\x71\x11\xda\xb3\xec\x4a\x62\x14\xe6\x99\x43\xa9\xc2\x14\xa3\x3d\xef\xdf\x29\x1c\xab\xb6\xba\xd7\x80\xd2\x97\xed\x95\x9d\x17\x11\x8a\x33\x95\x54\xbe\x28\xff\x48\x67\xc0\xf7\xb5\x1a\x33\xa6\xdc\x6c\xd9\x61\xbb\x49\xfa\x52\x36\x13\xc9\x3c\x84\x51\x4e\xc9\x55\xf5\x50\x8f\xd6\xcd\x10\x92\x78\x83\x96\xe8\x4a\xdd\xc4\x04\xd4\x20\xf1\xac\x09\x7d\x0b\x2b\xb5\x66\x42\x35\x98\x9a\xd3\x0d\x45\x3b\x1e\x64\x00\xf9\xb4\xb8\x2b\x6a\xf9\xf9\x5d\xcb\x2a\x15\x77\xdc\x25\x28\xd7\x68\xdb\x48\xaf\x88\x1e\x4f\xf1\x25\x0a\x26\xc9\xcb\x9e\x2a\x38\x9b\xc5\x27\xca\x37\x33\xbd\x77\x40\x39\x33\x8a\x9f\xd1\x03\xb2\x9a\x79\xf9\x2a\x72\x0d\x57\x58\xdd\x0a\xc3\x17\x28\x3e\x71\xf8\x95\x41\x71\x95\x21\x59\x58\xc3\x2e\xc7\x7c\xbe\xb8\x46\x03\x69\xa5\x74\x45\x1d\xfb\x05\x12\x15\x8a\xf8\x3d\x46\x09\x25\x21\x4a\x91\x9d\x6f\xc9\xf0\x3f\x0b\x04\x9e\x9e\xff\xfd\x2f\xa3\x2f\xe4\xc4\xfb\x75\xea\x0e\xa6\xf8\xcb\x3b\x55\x1e\xd0\x9b\xe0\x30\x3c\xfe\x60\x0e\x8d\x4a\x36\x67\x3d\x25\x62\x0a\xe8\x51\xa6\xe8\x69\xc3\x8e\x20\x65\xb5\x0d\x9a\x1b\x25\xea\xe9\x00\x31\xc8\x56\x04\xf3\x7a\x78\xbd\x91\xc3\xa7\xaa\x75\xa8\x88\xfa\xba\xdd\x53\x72\x7b\xb8\xa4\x40\x07\x4b\x47\xd2\x0a\xbe\x59\x2f\x26\xa2\x06\x57\xbc\xcb\xed\x99\xdf\x41\xeb\xdc\x9f\xa6\x88\xdf\x3b\xdd\x9f\x5f\x3e\x3c\x1b\xbc\xff\xf6\x78\x5e\x5e\x6c\x78\x19\xa7\x7c\x76\x2b\xac\xb6\x8d\xde\x0b\xc4\x59\x07\x19\x86\x6f\x24\x9d\x55\xfd\xfa\x72\xdb\xa4\xd6\x68\x49\xd7\x7e\xdd\x41\x8b\xab\xef\xac\xcb\x2f\x9f\xb8\x92\x0e\xd2\xc2\xcd\x0d\xbb\xe8\x1b\xd6\x27\xb1\x57\xab\x4e\x62\x37\xab\x4d\x62\xba\xbd\x46\x65\x12\xd3\x63\x55\x75\x49\x4c\xcf\x54\x56\x25\x31\x3d\x54\x51\x93\xc4\xf4\x48\x55\x45\x12\xe3\x7c\x7c\xa4\xb4\x80\xfa\x8f\x94\xd4\x23\x31\x4e\xff\xf6\xab\x91\x68\x67\x5b\xa3\x5a\x24\x39\x17\x7a\xbe\x2a\x49\x71\x88\xf2\x04\x33\x7c\xa0\x8d\x9a\x7d\xbe\x81\x23\xbd\xba\xac\x49\x93\x74\x85\x62\x8e\x5c\xe9\x76\x5c\xd1\xf1\x98\xe2\x41\x95\x8e\x93\x26\x9e\x47\xbd\x9a\x92\xa8\x82\x78\x0e\x61\x60\x89\x43\xbd\xa0\xa4\x72\x0d\x02\x8c\x44\x95\x9a\xb6\x96\x66\x4c\xbe\x59\x11\xae\x2a\x3d\x30\x87\xb0\xb4\x1e\xb8\x57\x98\x67\xe8\xa6\x65\x12\x3d\x8e\xb7\x10\x6e\x6d\xbd\x3e\x22\x78\xc9\x91\x6f\x30\x6a\x15\x1d\xa4\xa6\x56\x58\x42\xe8\x0c\x09\xf0\x45\xc4\x5b\x7a\x37\xd6\x46\x71\x51\xaf\xa6\x62\xce\xb2\x7c\xf5\x9f\x9b\x76\x49\xe7\x05\xc6\x75\x8a\xa3\x71\x18\xf7\x9d\xca\xa0\x6f\x9e\x3f\x26\x5b\xbd\x8f\x8f\xcd\x32\x28\xe0\x7c\x78\x0a\x88\x28\x20\x09\x58\x38\x8b\xfb\xf1\x9a\x74\x46\x21\x2f\x81\xd1\x08\x13\xcf\x1c\x4b\xf9\x05\x2e\xa4\x55\x95\xb0\x67\x57\x73\x10\x78\xb2\xa4\x73\x70\x22\xcd\x20\x51\x4d\x67\x40\x08\x58\xd8\x99\x80\xf6\xc8\x47\x81\x62\x73\x23\xa2\xf1\x20\x95\xb1\x54\x73\x7e\x0c\x53\xbd\x02\x51\x73\x09\xea\x34\x32\xae\xbe\x8e\x9a\xa2\xe5\x9b\x5a\x22\xfa\x6e\x2e\x03\x42\xed\x11\xf6\x7d\x30\xa7\x7c\xde\x50\xc0\x59\x3b\x47\x66\xbd\x2e\x78\xcd\xed\x6c\x05\xf8\x92\x80\xb9\x51\x79\x4d\x4f\x43\x26\x63\x4c\x01\xd5\x62\x5c\xeb\x1c\xf2\xd1\xed\x96\x14\x95\x4c\x72\x48\x85\x63\x2b\xad\x12\xe4\xb0\x1a\xf9\xbd\xa4\x58\x1a\x95\xa2\xaa\xeb\x62\x49\xcd\x2e\xde\x80\x36\xc3\x0c\xf8\x7a\x34\xef\x2a\x7e\x93\x52\xfc\x24\x87\xef\xbf\x20\x86\x92\x4a\xad\x2b\xe0\xa7\xc4\x06\x6f\xca\x1e\x8a\xca\x74\x67\xa6\xd9\x34\x1f\x68\xd9\x82\xd2\x86\xe7\x50\xc0\x65\xaa\x8e\x60\x8b\x69\x87\xe9\x3a\x77\x55\x0a\x09\x13\x96\x1f\x25\x47\xb3\xdd\x06\x2d\xaf\x72\x12\x79\x14\x7d\xd5\x91\x2e\xaf\xce\x39\x20\xd9\x40\x56\x44\xdf\xc6\x4a\x60\x0a\x96\xb3\xb3\xa8\x52\xfd\x8a\x09\xbc\x19\xdc\xc3\x99\x41\x11\x1d\x03\x2f\xd5\x52\xe0\x2d\xb6\x12\x24\x54\x13\xdf\x32\x00\x99\x15\x17\x13\xa2\x92\xcb\x87\x38\x60\x00\x05\x90\xac\x0d\x71\xfa\xbe\x31\xec\x9d\x26\x1c\xaa\xd4\x02\xb8\x76\x25\x30\xf7\x50\x8e\x77\x99\xb6\x45\x01\x49\x16\xac\x40\xe2\x34\x2c\x5a\x04\x49\xc3\xb9\x64\x89\x0c\xa3\xd3\x1a\x90\xe6\xaf\xd8\x74\xee\x23\x26\x92\xda\x4b\xa2\xc2\x15\xf1\xe2\x5c\x7c\xab\x0f\x27\x30\xf0\xca\x0d\xc7\x52\x39\xf5\x00\x03\x4d\x9a\x8d\xf8\xc8\x74\x5a\x44\x31\xe3\xe2\xb7\x38\x65\x22\x73\x7a\xe8\xdd\x05\xf9\xcd\xaa\xdf\x6b\xd2\xbe\x0e\x88\x30\x96\xa7\x4a\xf6\x8b\x2e\x27\xd2\x18\xed\xc8\x3b\xb4\x20\x92\xf2\x37\xc8\xbe\x1e\x1a\xbf\x12\x83\x08\xd5\xb2\xf2\x98\xaa\x3a\x1f\x47\xd8\xc7\xa4\x43\x2f\x01\x1b\x4d\x73\xc7\x64\x0e\x17\x05\x3f\xa6\x9a\xa2\xca\xb1\x3a\xd2\x70\xb0\x99\x2a\x70\x9f\x06\xb5\xcc\xf2\x62\x0a\x4a\x51\x68\x48\x22\x6c\x32\xd8\x29\xed\x13\x59\x32\x6e\x49\xc3\xde\xf4\x31\x9f\x5a\xed\x9a\xe7\x79\x6d\x26\x93\xed\x08\x59\xeb\xa1\x42\x03\x4b\x3d\x1f\xef\x4d\x69\x81\x8a\x03\x98\x55\xbf\x07\x4b\xa9\x7e\xa9\x4a\x2a\x77\xaa\xfe\x1d\x5d\xc0\xe9\xc5\xde\xdf\x16\xf7\xdd\x05\x91\x58\x86\xeb\xf9\x1e\x96\xee\x4f\x64\xd7\xa8\x30\x5e\x6e\xfa\xcf\x98\xfc\x4f\x52\x31\x10\x8d\x2c\xfe\x37\x60\xe5\xb7\x8b\x4f\xf1\xbb\x4a\xc4\x2b\x7b\xb7\xe8\xf7\x5e\xf0\xf2\xc3\xe8\xda\x8d\xbc\x5d\x93\x15\xec\xaf\x21\x0c\xa1\xf7\x8e\x1c\x33\x40\x18\x0a\x26\x4a\x0f\x8a\x12\xd2\x8c\xd0\xe5\x14\xbd\x1b\xc5\x13\x81\x14\x92\x0b\xe8\x09\x37\x80\x11\x9e\xf7\xea\x0e\x4b\xdd\x72\xe3\xa0\x44\x1e\x86\x72\x68\x92\xbb\x6e\x1c\xa0\x67\xf3\x29\x9c\x41\x02\xfc\xa7\x88\x7e\xa9\x82\x2b\xba\xa7\xaa\x5b\xd3\xcd\x39\x4c\x34\xad\x23\x39\x2e\xd2\xee\x92\x24\x0e\xa0\xdc\x47\x52\x9d\x66\xa8\x57\xd2\xba\x59\x1f\x49\xb1\x35\xff\xa6\xad\xb9\xda\xa1\xbb\x4e\x33\xae\x2a\xa7\x73\xa7\xa7\xf8\xd5\xe4\x2b\x79\x3e\x78\xf6\xa5\x69\xe5\x86\x1d\xc7\x9e\xf6\xb2\xe7\xa5\x4a\xad\x31\x94\x63\xc8\x35\x57\x8b\xb3\x70\xb2\x75\x52\x4a\xdc\x01\x95\x36\xae\xc4\xa2\x62\x31\x30\xc9\x04\xfc\x16\x44\xf7\xf6\x0c\x37\x15\x4a\xd1\xe2\xb5\xd9\xd2\x12\x46\xa3\x53\xba\xff\x5a\x76\x70\xdb\x93\xa2\x4a\xd0\xa8\xad\x6b\xb4\xa7\x2f\x71\x87\x32\x38\xef\xa8\xd0\xd6\x78\x53\x23\xcf\x87\x27\xd2\xef\x29\x5b\x4f\x46\x5f\x70\x30\x46\x64\x96\xfe\x26\x0e\x98\x24\x95\x09\x5c\x02\xc4\x0f\xa8\x43\xed\xaa\xe4\x0d\xf2\x07\xc1\x0f\x8f\x99\x38\xde\x54\x8d\x7d\xc7\xfe\x03\x52\xc7\x52\x3f\x1e\x10\x28\x3a\xbf\xd0\x50\x7d\xb8\x04\x81\xe8\xa9\x4a\x19\x9e\xc7\x1d\x60\x9e\xc4\xad\x07\x18\x9e\xbf\x52\xc6\xa1\x6c\x7f\xbd\x5c\x37\x03\x75\x6f\x23\x7e\x52\x9e\xb6\x79\x0f\x50\x29\x5d\x23\x59\x5c\xca\x5f\x4b\x90\x09\x08\x33\x61\x13\x10\x56\x1f\x9d\xea\xe6\x86\xf8\xbc\x0d\x46\xcb\xb9\xc2\x9a\x58\x2c\x24\x08\x7b\x68\x74\x2f\x2a\x37\xff\xed\xa0\xff\xf2\xeb\xbc\xf7\xc7\xcf\x4a\x73\x3f\x2b\x37\xff\xac\xdc\xfc\xb3\x72\xf3\xcf\xca\xcd\x3f\x8b\xef\xfd\xac\xdc\xfc\x2f\x58\xb9\xf9\xb6\x62\xda\x53\xc2\xcb\x7a\x05\xa2\x3b\x16\x85\x3e\xbd\x7f\xe6\xbf\x18\xcf\xc6\x3f\x45\xa1\x55\x8a\xee\xde\xaa\x10\xb4\xc6\xba\xbc\x31\x11\x16\xe6\xd0\x54\x95\xb0\xc8\xa5\xa6\x8a\x6a\x00\x51\xac\x6a\xad\xb2\x16\xf6\x18\x93\x11\x94\x15\x74\xec\x5c\x45\x8b\xe7\xfc\xa2\x15\x5f\xfd\x59\x39\xf8\x67\xe5\xe0\x7f\x07\xe1\x65\x09\x28\x0f\x89\x89\x3a\x0c\x45\xef\xb5\xf5\x52\xfb\x3b\x4e\x40\xb5\x8f\xe7\x70\x94\x83\xba\x61\xa2\xe7\xcf\xaa\xc6\xf7\xb7\xaa\xb1\x5a\xf0\xf5\xc8\x28\x14\x92\x0b\x34\xba\x6b\x9b\xf8\x20\xfc\xbc\x38\x79\x36\x36\x57\xce\xf9\xcf\x16\x51\x1a\x5b\x6b\x7e\xf6\xba\xfc\x77\x32\xc5\xfc\x3c\x67\x7f\x1a\x09\x0c\xe3\x1b\x4a\x9f\xdd\x3a\x17\xf8\x69\xbe\xb8\x3f\xe6\x0b\x75\x8c\xaf\x49\x26\x50\xdc\xe3\x6e\xdb\x5f\xff\x0a\x26\x8f\x07\x7f\xfb\xfd\xa7\x48\xf0\x53\x24\xf8\x29\x12\xfc\x14\x09\x7e\x8a\x04\x3f\x0f\xde\xfb\x78\xf0\x8a\x6d\xb5\xf2\xb9\x2b\x42\x05\xef\xf4\xbc\x7d\xf6\xe9\xf7\xe7\x2f\x7e\x7f\x6e\x0e\x4b\x33\x05\xa3\xb1\x38\x18\xbb\x96\x57\xd7\x07\x28\x78\xe9\xe5\xab\xd6\x23\xda\x99\x13\x14\xa5\xed\x64\xf9\x4e\x9e\x41\x24\x4c\xa1\x66\xae\xb9\x93\x06\xb6\x6e\x68\xdb\x4d\x84\xb3\x19\x18\x79\x0a\xb6\xf4\x50\x1e\xa2\x73\x1f\x2c\x4e\x32\xe7\x51\xfd\x01\x4c\xe7\x49\x35\x6a\xec\x82\x62\x0d\x71\x00\x6b\x14\xcb\x5d\x2f\x7c\xae\x64\x80\x15\x22\xca\x3a\x9d\x9a\x21\x53\xe5\xab\x5f\x91\x31\x5a\x0f\x31\x4b\xa7\x88\x6a\xa8\x59\x3e\x3f\x54\x63\xa1\x8d\xf3\x42\x35\x26\xbf\x9e\xa4\x50\xfb\x7e\x24\x83\x6a\x38\x59\x43\x12\xe8\x52\x58\x8a\x64\x11\xc3\x96\xbf\x91\x90\x3e\x82\x2f\x57\x3e\x84\xe2\xfa\xc4\x77\xeb\xae\x3e\xf8\xf0\xe6\xeb\x97\xde\x5e\xed\x83\xa8\x56\x96\x92\x15\xa5\xd7\x5b\x6a\x83\x8b\x49\xa0\xb8\xb2\x8e\xce\x1c\x94\x9b\xce\xfa\x1f\x3a\x0f\x4b\x8a\x37\xcb\x16\x37\xa6\x4c\xbc\xec\x99\x92\x72\xa7\x26\x91\xd2\x73\x80\x88\x65\xd8\x11\x69\x5d\xc8\xe8\xe4\x85\x44\x6f\x47\x70\x2c\x93\x9e\x0a\x3d\xbb\x46\x40\xa2\x8a\xe4\x0a\x1b\x19\x30\x0a\x7c\x4d\x5a\xe9\x6a\xf5\xce\x32\xff\x92\x51\xfc\x2e\x2a\xf8\xbd\x36\x64\x88\x9a\xda\xe6\xd2\x62\x25\xa3\xa8\x2a\xe3\x1e\x60\xa9\x49\x1b\xcb\x89\xd7\x2c\xe0\x5d\x5e\xa2\x31\x7b\x88\x24\x83\x7a\x68\x3c\xae\x5b\xfe\xa8\xca\x69\x1f\xaf\x2e\xdf\xe3\x60\xc4\xac\x3a\x65\x6e\x55\x89\xdb\xa7\x12\x8e\x04\x19\x3d\x51\x58\x26\x98\x40\x75\x72\xd7\xaa\x48\x74\x28\x9e\x88\x44\xa8\xd4\xf3\x65\x18\x6b\x1a\x57\x5e\x59\x47\x3e\x7b\xe4\x70\x38\xb2\xc5\xb4\xea\x49\x12\xd9\xf2\xcb\xa9\xf2\x16\x2b\x55\x55\x2d\x69\xf4\x9e\x39\xcf\x44\x61\x6a\xbe\x3e\xf1\x11\x26\xbf\x71\x32\x3a\xc7\x54\x0b\x86\xcc\xd1\x55\xb2\x95\xe5\x8d\xc5\x1e\xda\xdb\xac\x28\xaa\xc0\x5c\xd7\xe1\x45\x3b\x94\x11\x08\xee\xda\x7a\xf9\xf1\xf3\xe4\xf0\x8f\xd7\xaf\x9e\x9b\x93\x7c\x08\x1c\x61\x62\xee\x07\x92\x2a\x4b\x0b\x82\x00\xf3\x1b\x3c\x75\x22\xd1\x6c\xe3\xbb\x08\x79\xe6\xd6\x77\xd9\x92\x26\x7c\x79\xa4\x01\xe8\xf2\x29\x60\xd5\xcd\x1a\xec\x54\xc5\x82\x54\xd6\xd1\x0c\x8a\x43\x34\xc0\xac\xb0\xd9\x56\x9a\x8b\x0a\xfe\x9a\x80\xd2\xb8\x15\x42\x6d\xba\x74\x52\x1b\xaf\x04\x76\x2c\xe8\xa0\x72\xb3\xc5\x90\x46\xfb\x2d\x01\x3d\xb5\xe5\xd2\xf3\x5a\xd7\x6e\xeb\xdd\xd0\x76\x8b\xb6\xc9\x6a\xdb\x8e\xe2\x40\x54\xd8\x80\x77\xdd\xb7\x6b\xe1\xb1\x17\x8b\xfe\xd1\x6f\xf5\x64\xc6\xa8\xf0\xfa\xc5\xa2\xc3\x65\x9d\x19\x4a\xdb\xf5\x65\x59\x07\xc7\xc6\xf3\x58\x3a\x54\x4a\x00\xc5\xc1\x31\x23\xb1\xd5\x7c\x0a\xe8\x34\x79\x6c\x86\x45\x75\x76\x36\x85\x33\x28\xbb\x30\x1e\xcb\x6e\xb4\x9c\xda\xde\xaa\xb6\x88\x8e\x4d\x20\xf0\xde\x05\xbe\xdc\xbf\x9f\xc1\x05\x90\x0d\xad\xa4\x1e\x39\x45\x1d\x7e\xbd\x83\xf9\x0d\x4e\x5f\xe8\x1b\x91\xd2\x51\xa0\x77\xac\x4e\x15\xc9\x2a\xae\x44\x0d\x9a\xda\x7c\xc7\x95\xd4\x17\xec\xf8\xc3\xf8\x6a\x56\x5b\x81\xa0\x17\x93\x88\x4b\x10\x2c\x82\x3c\xd1\x6c\x12\x19\x85\x92\x56\x33\x3e\xf4\xce\x17\x7a\xbf\x99\xa4\xf2\x88\xf0\xba\x74\x22\x59\x07\xfa\x62\xf8\x97\x9e\x5e\x7c\x25\x2a\x71\x92\x3c\xe4\x41\x3a\x2a\x7b\x26\x57\x59\x25\xb2\x66\x44\x39\x9f\x1c\x3c\x59\x61\x6f\x09\x88\xce\x32\x02\x5e\x34\x6a\xa1\x10\xbb\x93\xe9\xbe\x56\xfe\xfe\x86\x93\xcb\x8b\x57\xe9\x4e\x6f\x55\x76\x10\x3b\x99\x48\x1a\xc8\x55\xec\x19\x7f\xef\x80\x2b\x44\x2d\x41\x8e\xd4\x22\x5c\x70\xb4\xc6\x04\xcf\x52\xb6\xad\xab\xf7\x52\xcc\xb5\xc7\x88\x50\xf6\x4e\x1d\x2a\x69\x11\x99\x61\xf3\x23\x3e\x28\x78\xc2\x89\x4f\x52\x10\x78\xd6\x1f\x75\xe0\x58\x34\x87\x63\x51\x09\x87\xdb\xcc\xba\xa1\x11\xca\xb8\xd8\xc9\xc7\x19\x05\x20\xbf\x11\xe0\xc5\x95\x93\x7b\x8e\x7d\xd5\xb3\x1d\xbb\x1b\x7f\xeb\xeb\xdf\x16\xa9\x6b\x0b\x7e\xad\x67\x32\xda\x46\x9a\x0a\x61\x89\x95\x36\x47\xa6\x3d\x8e\x22\xdf\x97\xc4\x58\xe2\x4a\x64\x38\x57\x22\x56\xe4\x71\x46\x3f\xe2\xf1\x98\x42\xce\xb7\xbb\xff\x65\x97\xb5\x3f\x2d\x18\x4b\x95\x97\x4a\x8d\xd4\xeb\x16\x8e\x55\xac\xd4\x8e\x7c\x34\x3f\x02\xaa\x10\x78\x6e\xaa\x33\x40\xbf\x54\x4d\x75\x0e\xf2\x65\xc4\x39\x8a\xa2\x11\x53\x03\x02\x02\x81\x5d\x58\x4a\xc9\x48\x10\x26\x0a\x99\x64\x5f\xb8\xe8\x4c\x08\x12\x15\x90\xa9\x15\x7f\x8a\x20\x60\x04\x04\x54\xa5\xd4\x4a\xeb\x3c\xff\x41\xb0\x7c\x5b\xee\xfa\xc5\xc1\x15\xa2\xef\x24\x22\xcf\x1c\xdb\xb1\xba\x6d\xdb\x0c\x64\x0a\x80\x5c\x51\x2a\x10\x5c\x00\x6a\xd9\x8e\x99\x94\x8c\xf4\x6c\x42\x9f\x1e\x1d\x9f\x42\x9f\xbc\x50\x86\xbe\x1d\x2e\x23\x8c\x58\x76\x44\x89\x77\xb5\x3b\x52\xdb\x21\xfe\xd2\x77\xec\x4b\xe4\xb1\xa9\xfe\xbe\x14\x5e\xe2\xed\x30\x85\x42\x33\xd6\xee\xbb\x32\xde\x27\xa8\x40\xa1\x26\x24\x7e\xeb\x7f\x28\xc4\x44\x1b\xc8\xb1\xdb\x49\xd3\x28\x4e\x88\x1d\x81\x0c\xc3\x13\x11\x1d\xc6\x4f\x34\x9b\xfd\x14\x5f\x40\xd2\x61\x80\x4c\x20\xbb\x55\x2c\x18\xc9\xa7\x94\xa0\x85\xc0\x30\x45\x9e\x27\x9a\x50\x73\xe1\x2d\x3b\x99\x2b\xc9\xcf\xf9\x9f\x1a\x04\xde\x75\x22\x72\xbc\x4a\xd3\x78\x2d\x02\xaf\x05\xd0\xa2\x11\x40\x0d\x77\x9c\xc1\x00\x56\xd2\x77\x42\x6c\xb9\x8e\x6a\xf7\x27\x52\x4e\x02\x30\x9f\x9b\x9a\x4f\x20\xaa\xba\x36\xf2\xf3\x09\x44\x0d\x1c\x51\x90\x2e\x71\x17\x2f\x36\x65\x0b\x51\xfa\x43\xc8\x3a\x72\xf8\x63\xf1\x53\x81\x94\x35\x6f\x64\x8b\x2c\xac\xe4\x96\x7d\xa6\xb2\x0a\x5e\x11\xdb\x31\x97\x63\x97\x0f\x68\x75\xff\xa2\x72\xc7\x95\x1a\x74\xc5\x84\x72\x25\xef\xd2\xaf\xf9\xa8\x2e\xd7\x35\x79\xae\xdd\xe7\x91\x68\x1b\x2b\x2a\x2d\xe9\x2a\xd8\x77\xdb\x7d\xfa\xf5\xc1\xc7\xdd\xd9\xb4\xc0\x68\xa4\x6a\x5c\x16\x17\x88\xc9\x5a\x8f\x3c\x38\xc2\x04\x30\xe8\x1d\xcb\x5a\x68\xd5\x96\xca\xde\xa6\xd3\x57\x92\x7c\x5a\xb7\x15\x25\xcb\x1c\x59\x0f\xc9\x89\x20\x89\x0c\xa0\xb1\xec\x9f\x14\x50\xca\x54\x17\xdf\x88\x3f\xc5\x15\xe3\x62\xfb\xa9\x63\xe3\x20\xfe\x70\xe8\x67\xec\x29\x49\xa9\xe4\xe2\xba\x48\x32\x49\x3c\x84\x71\x38\x54\xc1\x4d\xb3\xb0\xac\x3a\xb1\x54\xb3\x23\x1b\x52\x45\x7b\xe6\xa8\x06\x7a\xa6\x02\xa9\xfe\xdd\x58\xfc\xf8\xac\xfa\x05\x6b\x9a\x8d\xda\x98\xb7\x33\x9d\xb3\xa4\x16\x67\x1d\x1a\x88\x82\xf8\x4e\x53\x24\x94\x7d\x51\x2d\x68\xe4\x6d\xb7\x62\x3d\x4b\x4f\x67\x8d\x5c\x27\x8b\x99\xbb\x65\x42\x9b\x7f\x1b\x3f\xfd\x34\x9f\x7f\x6a\x5a\x9e\x6a\xad\xce\x91\x3c\xad\x18\x6c\xb4\x7a\x55\xa8\x5b\x76\x5c\x94\x2e\xe0\xcd\x90\x86\x64\xc1\x77\x9b\xa5\x75\x89\x3f\xd0\x37\x1f\xce\x97\xa8\x5c\x56\xba\xc6\x7c\x6a\x1d\xd1\x41\x28\xc8\xd9\xe3\x73\x2b\x6d\x16\x27\x6b\xf5\xd8\x2d\xf1\x89\x5a\x09\x34\xd2\x07\x1a\x09\x9c\x61\xe0\x43\x4a\x35\xba\x96\x6d\x2c\x22\x1f\xb8\xec\x8c\x7e\x81\x28\x3a\xf7\xf3\x32\x67\x8d\x76\xff\x59\x99\x36\x39\xee\x24\x6b\x56\x27\x62\xf2\x43\x86\xcf\xab\xe7\x24\x83\xcc\x65\x56\xa7\x82\x2c\x7b\x4e\xa6\x25\x46\xbe\xc1\xec\x0d\x88\x69\x25\xe4\xbc\xfa\x46\x99\x83\x09\x0a\xa2\xae\x37\x77\xb9\x35\x9e\x1f\x92\x80\x2e\x0e\xb6\x0b\xb6\x06\x0a\x2e\x20\x11\xdd\x45\xea\x32\xd0\xb8\x7e\x6d\xad\xae\x48\xa5\xc2\x9b\x30\x08\x8a\x70\x40\x78\x61\x3b\x76\x20\x2b\xa9\xf9\x40\xfe\x08\x26\xf0\x35\x0a\xbe\xd0\x5c\x2e\xad\x88\x49\xe3\x9f\x63\xcb\x17\x3d\x60\xd2\x70\x25\x3f\xf8\xa2\x47\x4b\xa1\xf4\x97\xac\x4d\xbc\x56\xb2\x69\xe8\xa9\x2d\x7a\xec\xcb\x77\x73\x55\x23\xde\x3d\x31\xac\xca\x43\x63\x2e\xed\x37\x57\xd9\x14\xbd\xda\x42\xc8\x52\xa0\x48\x74\x89\x11\x3d\x38\xca\xbe\x3d\x25\x5a\xdd\x29\x9c\x72\x3d\x25\x27\x09\x56\x81\x53\x7e\xe3\x74\x71\x94\x7a\xf6\x86\xe0\x96\x04\x98\x7b\xe9\xda\x20\x8d\x1e\x90\xd4\x9d\xfa\xc9\x38\x86\x5e\xd8\x8f\x13\x78\xfc\x8b\x22\xf8\xe4\x19\xd5\x9b\xa8\x5c\xf6\x2c\x72\x2c\x18\x0e\x34\x73\xb4\xe3\x7a\x78\x6f\xb2\x34\xeb\xe4\xb6\xfa\x32\xdf\x71\xa0\x85\x47\x9e\xff\xed\x4f\x72\x52\x21\x93\x38\xf6\xff\x8a\x42\xce\x4b\xd9\x6e\x4c\xa0\xa5\x9d\x46\xa3\x58\xf7\x92\x02\x65\xa9\xea\x01\xd9\x3d\x99\x0d\x82\x57\x45\x7c\xcb\x3a\xc5\xd7\x22\x1b\x73\x39\xdf\xb5\x0b\xbe\x46\x3a\x58\x9d\xbc\x54\x05\xf7\x3b\x25\xa7\x93\xfe\x1f\xdf\xfa\xe8\x59\xaf\xa9\x88\xcb\x97\xa6\x86\xe5\x24\x2e\x7b\x5d\x78\x6a\x0a\x24\x6c\x88\xbf\x91\xad\x44\x63\xe0\xe5\xf7\x27\x7a\x35\xc1\x97\x5a\xdc\x82\xc1\x10\x54\xcc\xcb\xe5\x80\x3a\xa0\x31\x2d\xcb\x52\xeb\x65\x15\xf4\x6b\xd5\xc9\x37\x70\xce\xf5\xd0\xa5\x00\x7d\x4d\x74\x18\x63\xe0\x6e\xe9\x71\xef\x8b\xff\xfa\x63\xb7\xfb\x6a\x09\x6d\xbc\x16\x9b\xaa\xd9\x1d\x41\xd6\x67\x8f\xd7\x54\x66\x10\x9a\x56\xb6\x5a\x46\xad\xc9\xc1\xd6\x48\x11\xd1\x52\xae\x8b\x32\xb4\xcd\x76\xb7\xc4\xf1\xf4\xe2\xf5\xe8\xd3\xe0\xf7\xab\x82\x20\x43\x7c\xd9\xc8\x5c\x2c\x79\x46\x2a\xbe\x50\x5e\x10\x5f\xca\xd3\xa5\x95\xea\x11\x37\xb7\xbf\x4d\x93\x5c\x76\x51\xd6\xbb\xcc\xf7\xc0\xec\xf2\xe2\xd9\x6f\xde\xbb\xd9\xe3\xc9\x12\x66\x17\x46\x9a\xdb\x53\x6e\x64\x61\x56\x56\xf7\x67\xa1\xcf\x50\x87\x42\x1f\x8e\x58\xc7\x23\x78\xee\xe1\xcb\xbb\x56\xfa\x7f\xc5\x5b\x97\x2f\xdf\xbd\x79\x6f\x5e\x18\xcf\x8b\x63\x08\x8d\x9b\xef\x1c\x50\x34\xd2\xa6\x12\x4b\x0c\x98\xa0\x6f\x38\xe0\xca\x37\xa6\x28\x2e\x65\x9e\xf7\x91\xd8\xa2\x91\xe1\x1a\x5d\x09\x06\xc3\x6d\x13\xb7\xc8\x08\xcc\x59\x48\x0c\xea\x58\x1d\x9f\x47\x29\x0c\xba\x33\xa3\x7e\x9f\x1d\x46\xd0\x44\xe8\xa1\xba\xb4\xcd\x31\xf8\x37\xb8\x78\xca\x51\xce\x71\x18\xe1\xbf\x13\xdd\x5d\x5c\x10\x01\xcf\x61\xf0\x2e\x38\x20\x04\x5f\xaa\xc7\x97\xaf\xd6\x98\x7d\x6d\xa7\xd4\x81\xac\xac\x77\x7e\xa1\xdd\x2e\x63\x3b\x12\xbb\x44\x12\x4e\xcd\xa6\xda\xf5\x8a\x4b\xfa\x7a\x3e\x45\x14\x45\x66\x7c\xdb\xba\xf2\xf6\x9b\x21\x11\x8d\x70\x60\x41\xbe\x65\x3b\x73\x7c\x09\x49\xc4\x2f\x54\xe6\x1f\xbf\x6c\x08\xaf\x2a\x83\xab\x80\xb4\x62\x63\x75\x36\x9b\x39\x06\x29\x0e\x1e\xae\xa2\x8e\x30\xee\x3d\xa8\x62\x4f\x39\xef\x3c\xc7\x57\x76\x69\xef\x41\x61\x0b\x8e\x5f\x91\xca\x09\x90\xc7\x75\xfd\x4e\x84\x26\x84\xe2\x24\xc6\xb3\x27\x42\x99\x65\x1f\x69\x2d\xec\x0e\x07\x5f\xe0\x42\xf1\xe0\xa2\x0d\xc3\x08\x10\x66\xcf\xd7\x48\x5a\x7a\x22\x25\xd7\x68\xa5\xce\x02\x57\xdd\x1a\x4f\x18\xbc\xe6\x21\x33\x80\xd9\x49\xc2\x03\xa7\x70\xf4\x05\x7a\x49\xf0\x2d\x03\x28\xa0\x5a\xff\x46\x85\xae\x2c\x2d\xeb\x60\x2a\x53\x7e\x9c\xcf\x54\x34\x5d\xe9\x45\x35\x4d\x54\x80\xb7\x98\x43\x5b\x01\xa4\xad\xaf\xb1\x67\x60\xb2\xed\x25\x90\x37\xd6\xfb\xaf\xbf\x64\x3e\x6f\x4c\x29\x51\x2f\x48\x2d\xc5\x4a\x8b\x9b\xaf\xdd\x5e\xb8\x89\xf7\xee\xe6\xe4\x49\xa3\x90\xb1\x92\xd8\x32\x07\x13\xd8\xf1\xc1\x02\x87\x77\x1d\x15\xdf\xfd\xf8\xed\xf1\xab\xb7\x63\xba\x84\x26\x39\xf1\xf1\x39\xf0\x85\x0c\x07\xb5\x3c\x89\xe4\x40\x7d\x01\x66\xe7\x21\x99\x40\x12\xb7\xb5\x12\xa6\xae\xf8\x89\x06\x27\xff\x6f\x21\x63\x90\x14\xcb\x20\x55\x55\x9b\x7a\x8e\x0d\xe6\xf3\xce\x39\x81\xc0\x1b\x91\x70\x76\x4e\xeb\x05\x81\x27\xfc\x7e\x22\x20\xe8\xcc\x60\x10\xe6\xe7\xaa\x05\xad\x14\x4d\x5a\x29\x86\xa6\xf9\xac\x8c\x88\x0a\x41\xe8\x2e\xf4\x6c\x8d\xc2\x57\xdb\x29\xd9\xf2\x38\x77\xbc\x5f\xde\x5e\x9c\xbf\x7f\x76\x7c\x72\x60\xde\x2f\x49\x09\x1f\x9b\x8e\x30\x89\x2b\x16\x39\xb6\x87\x66\x30\x50\x09\x62\x5f\x43\x2c\x32\xee\x64\x67\xc4\xf4\xb5\xe8\xb7\xa4\xc3\xb9\xfa\x8e\x03\xca\x08\x40\xea\x4b\xfa\x26\x70\x01\x90\x2f\xcd\xa4\xa2\xf1\xf0\x08\x06\x4c\x78\x5a\x4a\x8d\xda\x31\x6a\x9f\x47\x50\x97\x99\xb7\x2f\x11\x9b\x2e\xf3\x68\x5a\xac\x99\x0e\x72\x32\x24\x62\xbe\x48\x3c\xdf\x2a\x13\x73\xcd\x2f\x2d\x6a\xbb\x51\x29\xb8\xa6\xb3\xdd\xed\x74\x82\x77\xe4\x2e\x8b\x64\x3a\xe0\x43\x3a\x82\x5e\x6e\xaa\xe9\x24\x8a\x30\x10\xf0\x15\xa5\x99\x9b\xc5\xd7\x30\xd7\x61\x9a\xa2\xd9\xdc\x87\x9d\xc8\x89\x5a\x94\x0a\xa3\x77\x64\xe6\x50\x06\xd8\x83\x62\xc7\x86\x40\xa4\xba\x37\x2d\x15\x12\xcb\x7d\xc9\x79\x2d\x86\xb4\x2e\x21\x81\x16\xf4\xd1\x04\x9d\xfb\xd0\x1a\x63\x62\x41\xf9\x96\x48\x10\xac\x2d\x30\xc7\x42\xea\x8e\x63\x77\xf8\x97\x0e\x0a\xb2\x33\x38\x88\x09\xb9\xaa\xf2\x58\x01\x2a\x44\x7b\xe7\x46\x6d\xf4\x4b\x67\x0f\x08\xb4\xe2\xcd\x65\xa1\xc0\x4a\x76\x97\x26\x8a\xf5\xb6\xc4\x5b\x1b\xe9\x36\x39\x81\x65\xd3\xe9\x6d\x35\xc1\x97\x20\x98\xe7\xc8\x67\x90\x40\x6f\x89\x42\x6d\xa9\x09\x8b\xa8\x62\x7d\x46\x83\xd4\x8c\xf8\xd3\x63\xf5\x2a\xfd\xae\x7e\xee\x2e\xfb\xcc\x9c\xf5\x1f\x88\x2c\xc8\xe4\xa1\x46\x99\xfe\x3d\x0e\x50\x23\xdc\xc4\xcc\x72\x6d\x08\x8a\x47\x8c\xf3\x6b\x32\xe5\x30\xfa\x4e\xaf\x67\x24\x03\x23\xe6\xba\xcb\x60\xae\xdb\x1c\x73\x5d\xa7\xd7\x4b\x61\x2e\x95\xf9\x2d\xb9\xc6\xd5\x14\x84\x94\xc1\xfa\xcd\x87\xb3\xc8\x79\x0f\x65\x58\x0a\xb5\x60\x34\x96\x85\x03\x7d\xba\xa6\x77\x35\x9d\x7d\x31\xbc\x8d\xcd\x0a\x35\x77\x97\xe1\x4d\xeb\xd9\x5e\x7b\xb9\xd5\x2f\x40\xdc\xee\x12\x64\xb2\xdb\x98\x4a\x76\x9d\xbd\x26\xb8\x89\xc5\x95\xb5\xe1\xe7\x69\x34\xa2\x36\xf5\x9d\xba\x38\xda\x5e\x02\x47\xdb\x8d\x71\xb4\xed\xec\x34\xc1\x91\x10\xf1\xd6\x86\x9f\xdf\xf9\x68\x96\x8f\x66\x88\x59\x53\xc4\xb4\xc9\x6f\xd6\x3f\x79\x36\x9d\x46\xe7\x8b\x90\x5f\x97\xa9\x00\x9a\x82\xfc\x98\x8f\xa2\xc1\x9b\x3f\x57\x86\x69\x9b\x46\xdd\xd9\xf4\x9d\x41\x95\x99\xb0\xdc\xcb\x74\x73\x9a\x4f\x56\x63\x59\x4d\xff\x91\x45\x10\x3b\x33\xc8\xc8\x9d\xb7\x8c\xda\xe8\x0e\x2e\xfb\xdb\xe7\x8b\xda\x29\xf4\xd3\xcd\x6a\x71\x5f\xa9\xe7\x72\x82\xd9\x18\xd4\xe2\x0c\x31\xbd\xa8\x8f\xc2\xd1\x84\x80\xf9\x54\xb6\x34\x2a\xe8\x7b\x2c\xca\x0c\x77\x18\x9a\xc1\x0e\x85\x04\xe9\xb5\x56\xb9\x64\x67\xa7\x93\xac\xe2\x40\x09\x7e\x29\xf1\x67\xa4\xd3\xb0\x2a\xe3\x65\x8b\xa0\x1e\x61\x3f\x9c\x05\xd4\xa2\x70\x84\x03\xaf\x02\xfe\xb2\x21\xf2\x7a\x53\xf1\x13\xc5\x65\x0c\x53\x7b\x78\x4e\xf0\x84\x40\x1a\xa7\xfd\xa5\x22\xa7\xa3\x8b\xa6\xbc\x34\xc7\x8e\xfb\x41\x25\x19\xa0\xaa\x72\x86\xca\xa7\x8c\x31\x9a\x4a\x30\x17\x1d\x6b\x46\xca\x78\x1e\xd9\x46\x67\x20\x36\x2e\x9b\xdb\x4c\x46\xaa\x61\xf9\x78\x85\xda\xe1\xb2\x59\xca\x85\x4b\xc1\x27\x3f\x43\x01\x9a\x85\xb3\xc2\x55\x31\xe9\xa3\x01\xbe\x24\x60\x6e\x1b\x0b\x8d\xa9\x79\x88\x48\xc9\x7a\xe8\x13\x01\x96\x98\x01\xa9\x5c\x9e\x95\xf6\xd0\xae\x9b\x90\xa9\x47\xe8\xcb\xf2\x43\x08\x07\xf5\x34\xd4\x81\xac\x31\xc4\xd9\x97\x28\x6a\x3e\x0f\xed\xda\x9d\xb6\x73\x85\xa3\xcb\x56\x3c\xa4\x79\xc1\xf2\xcd\xf4\x9b\x3e\x31\x6b\x43\x37\x09\x12\x48\x21\xb9\x80\xde\xc1\xcc\x50\xc0\xec\xcd\xf4\x9b\x15\xdd\x50\x37\x94\xb3\xc6\xf4\x67\x70\x86\xc9\x62\x45\x0c\x24\xd4\x71\xbe\x60\x90\x96\x12\x86\xc2\x4a\x91\xb4\xd3\x04\x23\xe8\xd7\xc6\x18\x59\xd7\x5a\x2e\x01\xae\x06\x2a\x07\xa0\x56\xf1\xd0\x9b\x88\x7a\x48\x1f\xe1\x2b\x49\x03\x04\x4e\x44\xc9\xd2\x4b\xc4\x46\xd3\x3b\x0f\xb2\x7d\xb1\xf9\x71\xf7\xf5\xee\x78\xb7\xa8\x9a\xd9\xa4\x28\xc6\x41\x77\x4a\xe7\xeb\xcf\xbf\x17\x0f\x96\x5b\x23\x75\x3f\x6e\x72\x86\x33\x30\x79\x2b\xcd\xad\xca\xf5\x7b\x18\xf9\x22\x94\xef\xc9\x51\xae\x3c\xe8\x89\x8f\x80\x8c\xa6\xcf\x02\x70\xee\x8b\xef\xb1\x2f\x4f\x78\x6c\xd1\x45\x64\xad\x57\x71\x92\xa9\xfa\x5d\x14\x13\x06\xbd\x04\xd2\x6c\x35\x7d\x99\x13\xfd\x5e\xa1\x40\xd1\x65\x45\xa0\xc4\x04\x33\x1c\x3f\xb1\x4a\x14\x81\xc1\xd5\x3d\x27\x70\x8c\xae\x52\x3a\x3b\x7f\xd1\x7e\x72\x08\xc4\x9a\x7a\x8d\x3a\xb6\xb7\x22\x47\x67\x68\x7d\xc5\x7d\x43\x47\x53\xc8\xdf\xdc\x81\x17\x5c\x34\xbf\xfb\xc2\xea\xbf\xcd\x4f\xfa\x6f\x3f\xef\x3e\xab\x2d\x4b\x37\xaa\xb7\x67\xe7\xa2\x3f\x22\x5f\xf1\x92\x27\x8e\x21\xce\xa4\x69\xdd\xbd\xc2\xfa\xa9\xac\xac\xca\x9f\x59\x2c\x69\x5c\xc0\xaf\x58\x9c\x49\x55\xdc\x34\x62\x31\x93\xec\xe7\xa3\xe0\xcb\x09\x3e\x88\x4b\x44\xd7\xac\x43\x55\xb7\x24\xb1\x59\xda\x3d\x99\x22\x6a\x25\xef\x2c\x12\x63\x6b\x06\xd3\xd4\xaf\x3d\x5a\x59\x15\xb9\x7c\x48\xa5\xe4\x14\x4b\xf0\x55\xd2\xb4\x34\xb6\x43\xaf\x54\xb2\x36\xfb\x7b\xca\x4a\xf7\x27\x05\xbe\x8b\x2b\xf8\x17\x47\x5f\xe4\x46\x18\xf9\x08\x06\xec\x38\x57\xe4\x7f\xb9\x78\x8c\xba\xf8\xa9\x40\x44\xe5\x0a\x93\x54\x47\x60\x73\x28\x4d\x51\x6d\xe6\xe2\x07\x9b\x14\x67\xd6\x37\x51\x45\x5d\xdd\xfa\xbb\x2e\xdd\x77\x42\x6b\x15\xe2\xea\x6b\x66\x58\x45\x54\xcf\x04\x9e\x9b\xa8\xa9\x32\x76\x9a\xc0\xa6\x98\xc8\x32\x77\xab\x39\x89\xca\xa3\x72\x6e\x1e\xaa\x84\x89\x54\x50\xee\xad\x11\xd0\xa1\x1f\x17\x8b\x33\x43\x91\x1b\x2c\xc7\xdd\x35\x5a\x91\xdb\x98\xba\xf2\x5f\x23\x8d\x48\x1b\xf2\xcd\x91\x8a\x3e\xfe\xd2\x0d\x86\x6b\xae\x8e\xf1\x52\x13\x16\xb5\x84\x0d\xc5\x74\x5e\xad\x41\x54\xcc\x8b\x77\xeb\x95\x17\x23\xe9\xe2\x8e\x85\xc6\xcf\x8f\x17\xdd\x0f\xa3\x77\xd8\xac\x71\x09\x50\x8d\x01\xff\x38\x17\x67\x10\x4f\xa8\x42\x6c\x4c\x13\x27\xbc\x62\x0d\xe4\x1e\x4d\xe8\x33\x0b\xe0\x91\xde\x26\x25\x4b\x27\xfd\x32\x29\x15\x3a\xa7\xf6\x5b\x78\xc5\x34\xd1\xc7\xbc\x2d\xb3\x90\xd5\xb8\xc9\xb1\x67\xd8\x43\xe3\x45\x54\x64\xba\x41\xaf\xa8\x52\x2c\x4d\x01\x3d\x66\x78\x3e\xe7\xfa\xa1\x9a\xb5\xca\x84\xaa\x23\x7a\xaf\x56\x56\xfb\x4a\x46\x33\x3b\xa7\xb6\x6a\xcf\x6f\xe7\xfb\x2a\x69\x8d\xfb\x19\xbc\x92\x16\x43\xdd\x6e\xf2\x96\x6f\x0d\x6b\x0a\xa8\x45\xe5\x34\x2c\xc0\x38\x19\x32\xfe\x10\xc3\x56\xb2\x96\x16\xe3\x52\x69\x32\x79\xb7\x79\x55\xee\xc2\x8e\x75\x29\x94\x8e\xb1\xef\xe3\xcb\x0f\xf3\x67\x49\xec\x89\x63\x5f\x02\xc4\x3e\x04\x0c\xf9\xb9\xf4\xf0\xba\x84\x5b\xcf\xb7\xb5\xe6\x85\x19\xf1\x9d\x6b\x58\x16\x14\x8c\x71\xc5\x9a\x5c\x22\xdf\x8f\x16\x23\xbd\x12\x75\x82\x9e\x54\x79\xbb\x48\x36\x4e\x2a\x18\xeb\xa5\x7a\xf3\xda\x59\xb3\x85\x28\x2a\x52\x9c\x43\xc8\x0c\x4b\x1f\x19\xc1\xb3\x4e\x20\xb4\xf1\xe5\x5e\x77\x7a\x6a\x23\xae\x22\x5c\x28\x73\x77\xb7\xdb\x35\x95\x54\xaf\x77\x5c\x35\xd1\x63\xcb\x59\x5a\x6a\x1a\x39\xd9\x35\xe1\x6e\xb9\x49\x6b\xc6\xa2\x1c\x3a\x2a\xf8\x95\x21\x21\x40\xc0\xa9\x8a\x8c\x98\x10\x9c\x4c\xe2\xd9\x85\x20\xfb\x9a\xfe\xde\x25\xf0\xf0\xd2\x4b\x4d\x5b\x7a\x99\xe7\x04\x5e\x20\x1c\xd2\x03\xfd\x36\xad\xa4\x17\xab\xcf\x9b\x7b\x05\x8d\xde\x6e\x44\xc0\x88\xb6\xfe\x4a\x52\x86\x34\x40\x76\xce\xf1\xd5\x1d\x8b\x15\xc1\x9f\xaf\xce\x5f\x7d\x98\x9b\x53\x09\x6b\xd6\x6d\x1a\xe1\x80\x11\x9c\xcb\xcd\x28\xd3\x02\x84\x4d\x32\x9d\x7e\x93\x65\x96\x12\x45\x76\x65\x2b\x9d\x54\xd2\x47\x56\xf1\x17\x57\x22\x6f\xa5\xf8\x92\xad\x03\x2d\x7c\xf6\x53\xec\xab\xb0\xf4\x5e\xfa\x97\x9c\x1f\xb3\xe7\xd8\xff\x94\x90\x9d\x08\x75\xe4\x2c\x4a\x06\x91\x30\x14\xe7\x82\x50\xc8\x8e\xb5\xe7\x52\x89\x20\x54\xb6\x05\xe8\x45\x68\x52\x89\x21\xf2\x38\x28\xae\xe7\x6a\xee\xf8\x43\xc3\xb1\x8e\xdb\x5a\x55\xa7\x64\xbb\x61\x3b\x9d\x87\x93\x3f\xbe\x40\x30\x12\x66\xc0\x92\xe0\x99\x1b\xd8\x81\xc9\x5e\x59\x71\xcb\x91\x0b\x48\x3a\x60\x72\x3f\x8c\xc0\xdf\xbc\x57\xb3\xd7\x17\xc7\xe6\x3c\xfe\x26\xdd\x35\xe5\xbc\xa8\x2b\xff\x8d\x45\xe4\x89\x50\x63\x23\x6d\x75\x89\x06\x9b\xd1\x08\xeb\x68\xb1\x99\x1d\xb3\xb2\x27\x66\xee\xe9\x74\x55\xb4\x78\x76\xf4\xb5\x4c\x28\xe1\x70\x9d\x10\xd1\xa4\xe3\x39\x1f\xb1\x8a\x48\x4b\xa1\x03\x9e\x27\x23\x20\x96\x7b\x9c\x42\x32\x3e\xc2\x84\x2d\xfb\xbc\x1e\xc6\x5f\x6c\x08\x58\xc3\xb6\x4a\xef\x87\xd5\x36\x57\x3e\xba\xe6\x4e\x77\xd7\xab\xd7\x7f\xec\xa1\xcf\x7f\xfb\x58\xb3\xfd\xcb\x96\x96\xd4\x99\xe9\x5b\x52\x54\x97\x84\x91\x70\x29\xac\x67\x11\x65\x46\xfb\x83\x7a\x68\x4f\x3a\x3c\xdf\x03\x8e\x76\xf0\xb5\x07\xcf\xf7\x50\xb8\x04\x47\x2b\xb2\xca\x45\x9d\x83\xdd\x64\xa2\x11\x83\x8b\x7b\xc7\xda\x4e\xba\x2d\x35\xd3\x9b\x4c\x37\x61\x7c\x86\x36\xb5\xfa\x4b\xcc\xf9\x26\x65\x6a\x43\x9d\x4d\xaf\xbf\x61\x94\xed\x82\xbb\xfe\xbe\xb5\xeb\xed\x81\xaa\x03\x1f\x75\x48\x37\xf4\x44\x5d\xa2\xdf\xb1\x3e\x72\x14\xcc\x71\x78\xf4\x21\x17\xe2\xf3\xe2\xdb\x2a\x23\xbe\x51\x01\x39\xb9\x58\x97\x55\x06\x7d\x36\x9f\xc2\x19\x24\xc0\x7f\x8a\xe8\x97\x3a\x63\xaf\x83\x99\xa7\x19\xc1\x4a\xac\x5c\x0c\xe5\xe3\xc9\x1d\x73\x93\xbf\x3d\xee\x6d\x7d\x1b\x40\x73\x19\xb7\x8a\xc8\x92\x00\x1f\xe2\x20\xc8\xe4\x6d\x37\xad\x38\x1c\x60\x86\xc6\x48\x6e\x03\x0b\xd1\x0e\x14\x3d\xc1\x8a\x42\xfb\x4a\xb2\xdb\x36\x75\xa7\x85\x88\xa0\xb3\xc6\x90\x8d\xa6\x96\x8f\x27\xd9\x9c\x68\x6d\x44\xbd\xdd\xc0\xc9\x14\x8a\xbb\x45\x16\x96\xb0\xbc\xf1\x55\x12\x39\x4a\x28\x00\xa3\x11\xa4\xa2\x48\x9d\x6b\x1d\x4e\xe1\xe8\x8b\xc5\xa6\xd0\x1a\xe1\xc0\x13\x6e\x5b\x0b\x8f\xc5\x0f\x01\xf6\xa0\xf8\x90\xec\x6e\x0b\x51\x0b\x07\x6e\xb5\xe1\xbe\x98\xc7\x2d\xeb\xda\x2e\x74\xcd\x58\xc6\x8e\xa6\x05\x25\x7c\xd3\x3d\x20\x32\x81\x77\xc2\xdf\x22\x28\xc5\xc3\x42\x3d\x94\x20\x47\x06\xb7\x54\x6d\xde\x82\xee\xa7\x14\xb2\x37\xd2\x2b\x13\x0d\x92\xc0\x1a\x0f\x5b\xb0\x7e\xeb\x83\x1e\x12\x92\x82\xde\x03\x81\xac\xa6\xd9\x0c\x7e\x31\x4c\x0a\x7e\x39\xf0\x0a\x9d\x7a\x4d\x2d\x55\x0b\xb1\x60\xec\x4a\x7b\x39\x45\x0c\x9a\xf5\xd4\x39\x24\xaa\xdd\x88\x44\x89\x24\xa3\x7c\xb1\x88\x17\x8a\xbc\x2a\x97\x61\x55\x00\x18\x48\xd9\x39\x93\xdd\x29\x7e\xbf\x01\x00\x8a\x6b\x4a\x1c\xcb\x96\xa6\xc5\x85\x33\x4c\xf6\xe7\xac\x16\xe5\x63\x59\xdf\xc6\x46\x54\x8e\x27\x7d\x15\x8e\x3d\x83\x1e\x02\x9d\x39\x08\x45\x81\x62\xf5\xcd\x07\x5a\xe8\x6a\x56\xac\x32\x59\xae\x97\x75\x0b\x36\xef\x8f\x2b\xba\x45\x73\x5a\x3c\xf7\x61\xbe\x65\x74\xc4\x4f\x49\xae\xcb\xcd\xc8\x47\x9d\x4b\x14\x78\x49\x30\x44\x81\x9f\x36\xc6\x14\x0e\xd9\x3c\xcc\xcb\x68\x11\xfc\x37\x77\xb6\xfb\x78\xb2\xfa\xa9\x7e\xf7\x3a\xc2\xc9\xd6\x26\xfa\xfb\x74\xe0\x9b\xbd\x98\x01\x64\x97\x98\x7c\xe1\x9c\x85\xeb\xcf\xea\x9f\x62\xd5\x21\x25\xed\xd2\x4e\x10\x8b\xa7\x25\x91\xe9\xba\xa3\x88\x23\x45\x94\x2e\x41\x17\x90\xa8\x10\x1e\x87\xf3\x19\x9f\x4d\x17\x4d\xec\xe1\xe5\x6e\x17\x8b\xef\x8e\x4e\x9c\x99\x5f\xe4\x82\xc9\x41\x24\xc8\x87\x9f\xd1\x61\xa0\xc3\xb4\x26\x27\x60\xbd\xed\xba\xac\x7e\x53\xa4\xd1\x99\x63\x72\x5c\x39\xef\x14\x0e\x80\xc1\xa7\x2b\x2e\xad\x47\xad\xbb\x51\x8d\x4e\x99\xb8\xf2\x4d\xf1\xeb\x60\x4b\xe3\xd0\x6a\x2c\x28\x1d\x34\x99\x38\xf9\x19\xa4\x54\x2f\x76\xdd\x60\xe6\x55\x03\xae\xd0\x24\xd3\xd6\x0b\x04\x25\x49\xf5\xf1\xd8\x4b\x74\x59\x37\x19\x03\x0d\xa1\xa4\x65\x53\x2b\x88\x33\x6d\xa0\x60\x87\xbe\x71\xb1\x52\xb5\x31\x14\x08\x24\x4a\x8a\x16\xee\x67\xc1\xd2\x68\xae\x0d\x67\x71\x04\x5b\xec\xc1\x93\x7e\xb0\x48\xaf\x3c\x92\x3c\x7b\xc9\x6c\x4c\x63\xb8\x64\x2e\xd4\x57\x64\x69\xda\xaf\x0d\xb5\xa5\xf6\x0d\x02\x4e\x6a\x30\x10\x71\xb6\x29\x81\xe3\x48\xd0\x9d\x32\x36\xdf\xdf\xd8\x48\xd2\xb8\x91\x28\x1a\x6b\xef\xdb\xf1\xcb\x54\xdf\xb0\x24\xf3\x4b\xb5\xf4\x73\xec\x7f\x9e\xfb\x20\xf8\x12\xf1\x54\x22\xc2\x44\x02\x8c\xe7\x30\x80\xc4\x0a\x30\x81\x63\x48\x08\x24\x69\xf8\x93\x97\xe4\x80\xcf\xbd\xd2\xec\x53\x32\x3a\x8c\xf3\x84\x5a\x50\x95\x40\xe5\x49\x2f\x02\x30\x43\xa3\xdb\x59\xb2\xfe\x6d\x2e\x59\xff\xf6\x97\xac\xbf\xae\x25\xeb\x57\x96\x0c\xd3\x5d\xfd\xf5\x8c\x56\x19\x11\xa4\x67\x4d\x81\x94\x86\xe3\xf0\xe5\x9a\x3c\x1e\xd1\xf7\x61\x10\x94\x46\x0b\x19\x03\x66\x32\x22\x8d\x48\xb1\xcb\xf4\x82\x11\xd6\x06\x2e\xde\x50\xe3\x7b\x2a\xc9\xd3\x75\x8b\xba\xfe\x96\x80\xa8\x3a\x27\x30\xfa\x4c\xda\x4d\xea\x06\xca\x37\x91\xa3\x92\x12\x89\x7a\x80\x4b\x2f\x2d\x5d\xd9\x87\x38\xf4\xbd\xe0\x1f\x7f\x61\xd6\x08\xfb\x3e\x1c\x31\x4b\xc0\x65\xde\x69\x6b\x95\xa5\xea\x49\x53\x4b\xa4\x0e\xe8\xa6\xdd\x38\xeb\xd6\xca\x20\xc1\x80\x9a\x62\xc1\x93\xd3\x4d\x92\x7a\x27\x72\xed\x34\x91\x21\x22\x9e\x8c\x29\x56\x19\x60\x8b\x03\x7e\xb2\xf9\xc4\xa9\x10\x00\x95\x4a\xac\xc5\x3f\xa9\xe4\xe1\xa2\xd4\x61\x09\x63\xd3\x64\xe1\xb4\x00\x94\x1d\xa3\x20\x5e\xdf\xc8\x3a\x8d\x3a\x7e\xbd\xdc\xc2\xe6\x22\xe5\x7d\x63\x2c\x51\xf2\xea\xbf\x2b\x6f\x49\x76\xd1\x4f\x26\x63\x60\x32\xcb\xf2\x96\xa2\x74\x65\x45\x4e\xb9\x1c\xe5\x2a\xce\x93\xb8\x6c\x94\x33\x65\x65\xe6\x23\xad\xa9\x35\xd8\x4f\x0c\xf2\x6a\x1c\xc8\x30\xcc\xfd\x62\x42\x6b\xb3\x59\xad\xec\x89\xba\xc4\x1d\xca\xe0\xbc\xa3\x4c\xa8\x77\xdc\xeb\xf0\xcd\x1f\xe0\xcd\xfb\x73\xb0\x8c\x43\x0a\xd1\x97\x5e\x59\x0f\x21\xdd\x15\x55\x65\x2f\x4e\xe8\x15\x87\x8c\xef\x50\x91\x20\x87\x66\x1c\x31\x20\x60\x39\x42\xf6\x10\x55\x69\xce\x22\x7a\x2d\xfe\x5a\xbb\x25\x21\xdf\x2d\xb3\x39\x7b\x8e\xc9\x21\x0e\xc6\x88\x6f\x66\x99\xb5\x15\xe4\x6b\x19\x27\xc0\x1b\xda\x73\xaa\x28\x3c\xcf\x87\x27\x32\xb2\x2d\x4b\xf6\xcb\x30\xb2\x2c\xa2\x8f\x64\xf7\x91\x34\xa8\x75\xf0\x6e\x3a\x1c\x46\xda\x28\x9d\x54\x38\x9e\xaa\x7f\xa2\x5d\x7f\x13\x5b\x38\xca\x42\x15\xab\x57\x57\x9a\xb3\xf5\xb5\x2d\x5b\x4e\x70\x09\x10\xcb\xcf\xb7\x49\xb7\xc9\xaa\x8e\x00\x36\x85\xec\x04\x4b\x02\x8e\xcf\xfe\xf2\xf6\xc1\x87\x2a\x52\xb0\xa0\x39\x70\x53\x92\x91\x81\x87\xf5\x88\xa6\x81\xff\x2d\xcf\xfc\x0d\x4d\xe5\x8b\x10\xcc\x0f\x66\x1f\x03\xd5\x15\x27\x48\x75\xf9\x5c\xeb\x1a\x45\x44\x56\xe8\xec\xb1\x73\xf4\xb8\xc2\xf6\x2a\x48\x3e\x5c\xcf\xa1\x90\xe6\xe7\xcd\xcf\x86\x31\x81\x30\xea\xda\x7f\x97\x47\xc1\x9b\x9d\xe7\xe1\xe3\x6d\x54\xd0\x66\x87\xc6\xcd\x0f\xf2\x9f\x2a\x22\xaa\x91\x28\x4e\xc1\x67\x38\x09\x91\x67\xce\xd0\x8a\x91\xd0\x91\xf7\x24\x25\x30\x10\x13\x42\x19\x0d\xcf\xe5\x47\x91\x41\x25\xb2\x47\x3e\xbc\xb4\x1d\xfb\x98\x3f\x44\x2d\x10\x78\xd6\x11\x60\x0c\x12\x73\x33\x82\xd4\x2b\xe2\x19\x44\x2f\x91\x36\x73\xe7\xd4\x3e\x99\x42\x69\x3d\xaf\xd1\x7b\x43\xc8\xeb\xe1\x39\xd5\x22\x32\xf4\xa1\x9e\xe3\x80\x59\xc7\x0c\x8c\xbe\x94\x75\x47\xc8\x90\x7a\x0c\xe3\x06\x9d\x74\xc6\x38\x10\x3d\x1d\xc4\x08\x0d\xec\xf9\x29\xc4\x36\x84\x9a\x6f\x32\xeb\x18\x7d\x53\x4e\xd3\xa5\xa1\x56\x23\xdc\x12\xd4\x87\xd8\xc7\x64\x59\x34\x8f\xd4\xc3\xb5\x61\x2d\x31\x9a\x16\xd0\x74\x31\xc1\x1d\xc6\x8c\xa4\x26\xd5\xf5\xcb\x31\x71\x10\x75\x1e\x5e\x12\x19\x20\x79\x7e\x5d\x6b\x57\x05\xb1\x0f\x89\x79\xf6\x75\xc0\x55\x0f\xdf\x12\xac\xbf\xe2\x2b\xe8\x59\xc9\xd5\x65\x40\xce\x96\xe7\xb8\x25\xc8\xf5\x46\x01\xcb\xc1\xbd\x64\xab\x81\x95\xa0\x16\x47\xea\xd2\x10\x47\x4f\xdf\x12\xb4\x87\x78\xbe\xb0\x7e\x55\x02\xda\x92\xac\x68\xbe\xe8\xc4\x22\xde\xed\x40\xfd\x14\x8d\xc7\xd6\x47\x04\x2f\xa5\x6b\x7e\x09\xa8\x3d\x34\x1e\x77\x2e\xd4\x08\xb7\x05\x75\xd4\x4f\x6c\x49\x90\xe3\xc7\x6f\x09\x5e\xd9\xe6\xc2\x12\xdd\x36\x96\x03\x59\xef\xd7\x71\x5b\x50\xbf\x88\xf3\x50\x96\x00\x58\x75\x45\xb9\x2d\x58\x5f\x0a\xc3\x9e\x95\xaa\xec\xb3\x14\xdc\xc6\x12\x41\xb7\x33\x87\x57\xc7\xef\xde\xae\xb6\x17\x3f\x53\x1c\xdc\xf6\x5e\x7c\x8d\x27\x56\x14\xba\xb7\x14\xd0\x3e\x9e\x74\x68\x14\xfb\x77\x3b\x30\xbf\x11\xb5\x0b\x97\x25\x91\x59\xf4\xf4\x6d\x41\xab\x35\x6c\xb2\xbc\xd5\x58\x9f\xb9\xc3\xe4\x6d\xcd\xe4\x08\x4c\xa0\xc5\xc0\xd2\x52\x88\x68\xc3\x23\x9f\xbf\x55\x88\xa5\xea\xb9\x02\xc8\x4a\x77\xbd\x1d\x98\x65\x4e\xae\x25\xda\xaf\x2d\x05\xb3\x96\xc9\x7d\x5b\x30\x9f\xa8\x36\x29\x75\xc0\xdd\xc9\x80\xab\x5a\xaa\x07\xb5\xba\x3d\x3b\xe6\xa6\xf5\x35\xfb\x7a\x47\x1e\x57\x7d\x88\x86\xa5\x56\x56\xc6\x92\x63\x09\xa3\xdb\x24\x4c\xaa\x78\x2e\xb1\xc6\xb2\x63\xed\x28\x3d\xd2\x6d\x4d\x23\xae\xd6\xb3\x1c\xe8\x49\xb1\x9f\x5b\x82\x57\x19\xf9\x56\x13\xef\xb3\xae\x9f\xe5\x4d\x0e\xfd\x55\x4c\x0e\x53\x50\xa0\x70\x17\x74\x01\x2d\x55\x1e\x28\x23\xe8\x3c\x14\x79\x37\xbf\x82\xe5\x35\x88\x64\x18\x91\xb4\xb7\xb6\x75\xad\x80\xff\x55\x38\x3b\xc7\xd6\x0d\xcd\xa2\xf3\x99\x8f\x7e\x6b\x73\x79\xcd\xc5\xdf\x43\x99\x17\xb9\x9c\x18\xa6\x27\x56\xde\x0e\xcc\x47\x91\xcb\x7a\x79\xac\x47\x5e\xef\x5b\xa5\x1b\xe1\xc0\xb7\x38\x17\xb3\x8e\x65\x66\xf8\x92\xe7\x6c\x2e\xc3\x7c\x79\x9e\x50\x59\xc4\x38\xe5\x27\x59\xcd\x29\x1e\x4f\xa2\xb9\xbb\xe3\x1e\x74\x9a\xff\x83\x80\x43\xfa\x6c\xef\xbc\x7e\x4e\x77\xe4\x79\xd0\x43\xe2\x67\xd8\x13\x41\x32\xb1\x6c\xb8\xde\xa2\x06\xcb\xb5\x92\x57\x9d\x81\xef\x14\xbd\x9f\x9e\xbf\x3d\x19\x80\xa3\x7a\x45\x40\x96\xc6\x8f\x98\x69\x73\x04\x7d\xc6\xe7\x77\x5d\xc6\xe1\xef\xbf\xbd\x24\x6f\xbc\x67\xac\x76\xcc\x45\xaa\xbb\xae\x38\xcf\xcb\xfd\xfe\x8a\xd3\xe0\x90\xf9\xb0\x09\x2f\x5f\x7a\x2d\x44\x45\x83\xa5\x96\xe2\x5e\x10\xec\xe2\xf7\xde\x5b\x7a\x8c\xcd\x41\x30\xf6\x9c\xef\x71\xdb\xb1\x65\x16\x96\xa1\xae\xcc\x8e\x5a\x21\xe5\xaa\x3c\xb5\x5f\x61\xa1\x9f\x16\x55\xff\xde\xd1\x3d\xa7\xe9\x2a\x47\x25\x45\xbb\x53\xf1\x20\xcf\x31\x39\x47\x9e\x07\x6b\xd6\xac\xdc\x12\x0b\xce\x10\xf0\xe9\xc6\x38\x7a\xb4\x13\x65\xaf\xe4\xca\x81\x34\x4b\x8a\x31\x04\xd9\x31\x8c\x7d\x79\x1c\x37\x28\xad\xad\x1e\xea\x20\x06\x67\x55\x18\xb8\x40\x22\x35\x5c\x20\xba\x51\xf3\xff\x94\x0e\xa9\xd7\x2b\x8b\x75\xc7\xa4\x9c\x95\x63\xe3\xe0\x50\x75\x43\x4f\xd7\xcf\x52\x61\x25\x7a\x27\xe3\x54\xf9\xac\x7a\x11\x25\x04\x52\xc8\x35\x48\x14\x64\xaa\x38\x3a\x91\x02\x2f\xf6\x95\xeb\x1a\x62\x24\x2b\x04\x1b\x6d\xaa\x45\x35\xa8\x77\x54\x0e\xac\x2d\x08\xea\x0d\x3e\x47\x49\x28\x4c\xed\xd4\x8e\x8a\x65\xb4\x10\x95\x99\xd4\x1d\xe0\xa3\x49\x90\xcf\x62\xd5\x87\x33\x14\x49\x21\xa1\x00\x5a\x8f\x1c\x4d\xa2\x5c\xca\xb3\xe3\xde\x87\x81\xf5\x4a\x56\x50\x29\x17\x00\x53\x74\xd1\xb0\x2e\xf1\x92\x58\x10\xb5\xdf\x05\xc2\x65\x82\xef\x25\xf2\x38\xf9\x36\x2b\x29\x2f\x11\xd1\x29\xd8\x66\x19\x4a\x37\x1b\xfd\x72\xf5\x6a\xb3\x6d\x45\x64\x98\x07\x0e\x8e\x65\x5f\x12\xa1\x09\x8b\xf8\x26\x15\x12\x25\x6f\x17\x3f\x25\x16\x93\xe8\xc9\xe4\xe7\xb2\x4d\x40\x21\x7b\x0e\x46\x90\xfd\x1e\x42\xb2\x38\xe2\xf8\x16\x98\xff\x3a\x97\x8f\x27\x31\x48\xa5\x25\xe8\xd7\x3d\xcb\x28\x6d\x36\x35\xcf\xa4\x1c\x7e\x66\xa6\xfa\x85\xa5\xe6\x1a\x0d\x70\x47\xb3\x7d\x9a\xd4\xe6\x4a\xcf\xf8\x69\xaa\x68\x57\x66\xd6\xd9\x8b\x4b\xcd\x5c\x1f\xe4\x8e\x66\x7f\x24\x5b\xc9\xa4\x67\xae\x7e\xcc\xcf\x5a\xbf\xb0\xd4\x8c\xa3\x01\xaa\x66\x6b\xd7\x88\x93\xce\x71\xf4\x28\xb7\xa1\x9a\xb9\xff\xe4\xf1\xb5\x78\xbc\x19\xe1\x3e\xa2\xac\x33\x4f\x4e\x6e\xcd\xf2\x1c\x92\x91\x08\x57\x93\xc5\x2f\xe7\x39\x13\x33\xf4\xa4\x74\x18\xd1\x09\xbf\xe3\x98\xdf\x5c\x68\x5a\x36\xf7\x83\xa0\x2c\x6f\xf5\x8e\xde\x5d\x65\xfe\x4e\xba\x41\x4a\x43\x87\x6c\xce\xae\x9b\xbc\xeb\x18\xc2\x45\x96\x70\x67\x8c\xb1\xd1\xde\x54\x60\x63\x4d\x95\x3b\xa9\x16\xd4\x8a\x2c\xb5\x98\xb0\xce\xf9\x22\x32\xcb\xcc\x09\x16\xd9\x1a\x71\xee\xbb\x61\xdc\xb7\xea\x52\x3d\x42\x59\xea\xed\x49\xfd\x47\xc3\xfb\x93\x33\xe2\x06\x21\x60\xea\xc8\x35\xbc\x3f\x3a\x8d\x6f\xf0\xed\x73\x82\x30\x41\xac\x68\xb7\x1e\x69\x97\x9b\x40\xb1\xe3\xd8\x29\xe9\x48\x94\x26\x33\x95\x98\x32\x3c\x92\xc9\x37\x1b\x68\xc3\x1c\x47\xa5\xdd\x9a\x94\x76\x37\xa1\xe3\x1c\x7b\x31\x2e\xbe\x40\x31\xa0\xb4\x0d\xb9\xb2\xe9\x45\x5d\x6d\xe4\x33\x3e\x4f\x97\x9a\xfe\x8c\xcf\xa5\x0e\x22\x42\xa9\xcf\x92\x48\x48\x69\x79\x2a\x39\x82\x44\xeb\x35\xce\x19\x9d\xec\x23\x85\xc7\x4e\x7e\xe2\x83\x7a\xce\x87\xca\xb3\x42\xb8\x99\x24\x9b\x28\x91\x70\x03\x90\x6f\x83\xab\xa9\x46\x4d\x1b\x03\x25\xcf\x76\x82\x90\xeb\xfe\x05\x49\x6b\xfa\x1a\x28\xab\x2f\x03\x84\xd1\x83\x6c\x06\xd3\xff\xfd\xdf\xff\x27\x7d\x1f\x0c\xbc\xfc\x5d\x16\x1e\xa7\xd2\xa2\x34\x8e\xaf\xa9\xa9\x06\x9b\x40\x26\x0d\x30\xaf\x4c\x56\x77\x65\xb1\x0d\x35\x2a\x5a\x1a\x7d\x79\x70\x64\x1b\x4e\x22\x1d\x2e\x95\xfd\xa8\xfa\xfb\x9b\xb5\xeb\xf4\x7c\xa7\xc2\x94\x60\x9d\x2f\x2c\x09\xb3\xc5\x20\x99\xb5\x97\xd1\xa5\x0a\x65\x9e\x12\x6e\x14\x55\x5c\xcf\x57\x4f\xd1\xd6\x3f\x2a\xc9\x5e\xb4\x17\xff\xdb\x98\x6a\xd6\x90\x2f\x8a\x6e\xfe\x51\xb9\xa8\x22\x48\xd4\x0d\x46\x28\xfe\xda\x18\x8a\xb8\x7c\x47\x01\xdd\xcb\x53\xdd\x50\x68\xbb\x04\xd7\x95\x0b\xd7\x5b\x2e\xeb\x12\xce\xe6\x6c\xd1\xd1\xca\xa5\xd4\xeb\xb2\x5b\x60\xe6\x71\xba\xb5\x65\x58\xab\xb8\x94\x61\x0a\x26\x11\xad\x96\xe9\x1f\xf3\x16\x5b\xca\x92\x57\x7a\xd2\xcc\xcb\x07\x96\xc7\x43\x11\xef\x39\x99\x42\x6b\xe4\x87\x94\x89\x7c\x1d\x4b\xc9\x7e\xfe\xc2\x12\x83\xb8\x65\x9d\x8c\x1a\x26\x92\xa5\x31\x5b\xb4\xc7\x6f\x0f\xb5\x6f\x00\x1b\x4d\xe1\xcd\x62\xf7\x2d\x16\x26\x34\x6b\xc6\xdf\x65\x2d\x70\x48\x22\x0c\x5b\x12\x01\x56\xac\xd7\xad\x13\xd5\x4b\xb1\xf0\xfb\x87\xcc\x34\xf6\xd8\x14\x0a\xe6\x5e\x5c\xb4\xa5\xe7\xa4\x66\x6d\x2e\x26\x97\xe2\x40\xcd\x52\xb5\x4a\x9a\xb7\xd5\x58\xaf\x1a\x45\x99\x96\xad\x84\x9d\x38\x32\x96\x74\x82\x08\x49\xef\x4e\x5d\x20\x6c\xfa\xe2\x8f\xcd\xf0\xad\xb9\xf5\xb1\xd1\xeb\x51\xe1\x60\x5a\xde\x91\xc4\xff\x2c\x8f\xc7\x0d\xad\x16\xdb\x5d\x37\x37\xc3\x1f\x4f\x1e\xef\x5e\xee\xad\xd1\xad\x14\x57\x11\x90\xba\x41\xa4\xef\xda\x96\x3e\xeb\x92\xbe\xb3\x5b\x42\xcd\x90\x88\xa2\xe1\x39\x17\xba\xd3\xde\x9f\x35\x78\xa7\x52\x0b\x50\xd7\x37\x53\x2c\x3a\x8c\x70\xc0\x54\x4b\xc4\x72\x5f\x52\x69\x45\x8a\x7b\xef\xea\xd1\x4b\x08\x1a\x3d\x3e\x85\x52\xdb\x3a\x4c\x54\x29\xa3\x50\xa2\x20\x1c\xe8\x54\x55\xd7\x62\xe5\xa4\x28\xe0\x3f\xdb\x7e\x55\x64\x88\x48\x17\xf5\x6c\xa2\xf2\x94\x1a\xa0\x92\x06\xa8\x06\xc8\x5e\x3e\xbd\x69\xeb\x53\x54\x37\xfe\x6d\xb1\x19\xee\x04\xd0\x2f\x56\xd4\xc8\xe0\xa6\x80\xd1\x02\x76\xec\x11\x81\x80\xc1\x97\x32\xca\xc0\x3e\x14\xdf\x2c\xf9\xd5\x0c\xa1\xbc\xc5\xbb\x25\xf0\x64\x07\xb4\x08\xbc\x37\xe2\x5b\x29\x78\xe2\x16\x74\xa3\xf0\x25\xb6\xcc\x32\x40\x6e\xc5\xa0\xf9\x19\x9f\x7f\x84\x84\x16\x07\x39\x6b\x57\x6f\x10\x8c\x00\x7b\xd0\x2d\xdf\x5d\x51\xe3\xde\xd5\x6c\x9b\xa2\x04\x59\x1d\xc3\xa6\xba\x3f\x2a\x1c\xb4\x36\x1b\x66\xa3\xf8\x09\xad\xe1\x46\x71\xaf\x40\x71\x7e\x5f\xb1\x0a\x4b\xa6\x14\x68\x4a\xed\x99\xe9\x8e\xa9\x3f\xcd\x9a\x77\x6e\xd6\x3c\x30\x0b\x7a\x4d\x9b\xc5\xff\xb4\xee\xfd\xab\x5b\xf7\xf2\x35\xec\x4b\xf7\x44\x33\xfb\x60\x0e\x2d\xf7\xcb\x42\xa2\xc9\xba\x37\x68\x28\x59\x66\x31\xcd\xb5\xd1\x1a\xeb\x5f\xf5\x16\x77\xa5\xa5\x5d\x69\x61\x53\x3a\x4a\x21\xfa\x56\x5d\xda\x29\xb8\x80\xd6\x39\x84\x81\x25\xb4\x43\x2f\xdf\x5e\xa6\x60\xa1\xea\x2c\xd3\x3a\xcd\x50\x19\x13\xc8\x0a\x86\x94\x24\x01\xfa\x8e\xed\x28\x4f\x3f\x0d\x3e\x5d\x5d\x7c\xde\xac\x6f\x9b\x6a\x64\x3a\xd1\xe6\x79\x17\x96\x93\x30\xf0\x21\xa5\x5a\x6c\xef\x33\x4f\xd4\xd5\x5a\xc1\x64\x92\x2d\x31\xd2\x60\xb7\x56\xf7\x38\x92\xff\x71\x84\x3e\x8d\x11\x97\xdf\x6c\x55\x15\xe1\x7c\x34\x99\x8a\xaa\x7e\xfc\xa8\x05\x23\x66\xa5\xbb\xee\xd4\xac\xf3\xc6\x11\x06\x3d\xc4\x52\xfd\x6b\xca\xaa\xb0\x3d\x13\x37\xd7\xdb\xb9\xcd\x98\x62\x79\xb7\x96\xb4\x44\xb6\xe3\xd8\x7a\x9e\x7e\xe2\xf0\xa7\x12\x58\x39\x31\x9d\x2e\x0b\xe3\xc4\x96\xe3\x38\x35\xba\x60\x7f\xc6\xe7\x1d\x8e\x5a\x4c\xb2\x01\x09\xb2\x6e\x9d\xb4\xdd\xa4\xa5\x7b\x59\x1f\x4f\x84\xd7\x85\xe7\x33\x89\xe9\x64\xcf\xa9\x1e\x7a\x8e\x5c\xb1\xc6\xd5\xf6\x2a\x1f\x88\xde\xd9\x44\x19\xb8\x01\xe6\x9b\x2c\xdb\x4a\xbc\x77\xee\xe3\x85\x5c\x9e\xbb\x65\xbe\x6f\xbb\x1f\xc0\xf9\xb7\x31\xbd\x31\xe6\x9b\x4c\xf4\x56\xb9\x6f\x8e\xd8\x35\x48\xa2\x62\x14\x31\xe1\xa7\xa1\x3c\x4d\xe7\x7f\xa5\x2e\x1a\xa9\x6e\xfd\x24\x16\xbf\x71\x05\x1a\x83\x9c\x32\xee\x85\xa3\xa4\x3f\x0d\xf7\xde\x7d\x0e\x0e\xcc\x8e\x92\xf5\x39\x49\xf4\x19\xdf\xb1\x93\x44\x6a\xd0\xcf\xf4\x25\xa8\x74\x95\xac\x66\x37\x3f\x2b\x7e\x75\x53\xd3\x79\xfd\xd4\xf1\xda\xe6\x72\x93\x71\xeb\xe5\xd3\x12\x81\xbe\x28\x67\xf7\xb6\x62\x13\x97\x80\x81\x11\x34\x99\x40\x02\xbd\x5f\x8b\xc0\x38\x89\xee\xb0\x7e\xbd\x59\x50\xd6\x1a\xaa\xba\xc4\xfb\xa7\x80\x1e\x71\x3d\x8a\xbf\xf6\x39\x40\x7e\x48\x0a\x53\xa8\xe3\xfb\x2c\xfd\xc6\xaa\xa4\xee\x46\x16\xd0\x5e\x13\x0b\x68\x44\xa9\xa5\x69\x37\xb9\xe6\x4e\xd2\xcc\x1a\x1d\x19\x9a\x29\xb9\xa4\xf5\x4b\xad\xa1\x74\xc2\x5e\x75\xac\x0c\x81\xae\x3a\x1c\x2d\xeb\x87\x5f\x32\x52\x79\x5c\x58\xd1\x3b\x6c\x71\x76\x08\xd1\xbb\x76\x00\x13\xff\xef\xed\xc6\x81\xd5\xb1\x5e\x06\x56\x54\x8b\xa0\x79\xbc\x4f\x1a\xa4\x02\xda\xae\x0b\xcf\x09\x09\x61\xe3\x7e\x07\xd1\x7f\xcf\x39\xa2\x73\x76\xe0\xc6\xe1\x34\x85\x1a\x51\x0d\xed\xa2\xba\x1f\xd1\x3a\xac\x52\x95\x56\xa5\x95\x6c\x4a\xa9\xc3\xb1\x58\x31\x6c\x66\x51\x3a\x99\x22\x6a\x21\x6a\xcd\x30\x65\x96\x8f\xbe\x40\x7f\x61\x79\x21\xb4\x18\xb6\x26\x80\x9c\x83\x09\x8c\xba\x6c\x20\x53\xfb\xe2\xbb\x31\x25\x69\x22\xd3\x0a\xa2\xe6\x7d\x48\xf2\xfe\x82\x2e\x17\xe4\x83\x3f\x5a\x93\x22\x13\xed\x76\x25\x5d\x96\x88\x93\x72\xa4\xf4\x99\x23\x7e\x08\x46\x80\xa9\x34\x28\x51\x24\x6c\x23\x3b\x76\x34\x01\x95\xbb\xa1\xf7\xa9\x95\xa2\x6d\x93\x42\x57\x5a\x52\x80\xf8\x74\x12\x77\x79\xcf\x68\x34\x8d\x03\x29\x8c\x41\x20\x95\xa9\x09\x55\x6a\x7d\x0e\xc8\x32\xa5\x7e\xb5\x68\xb3\x55\x63\xf7\x36\xa2\x92\xf9\x77\x4b\xe1\xd3\x57\x8b\xed\x57\xf8\xf0\xb7\x9a\x14\xbe\x0e\x35\xa7\xb8\x7f\x53\xaa\xe6\x80\xc2\x4f\x87\xce\x51\x10\x88\x2c\xd3\xb3\xb5\x73\x2a\xf5\x8e\x15\x56\x31\x46\xc2\x5d\x2e\xe2\xf3\x3f\x4e\x4e\x16\xd3\x17\x61\xed\xda\x34\x66\xdf\xb4\x68\x02\xa4\x26\x54\xaf\xf5\xa7\x76\xae\x25\x0d\x1b\x0d\xf9\x9a\x9f\xf1\xb9\x1b\xf1\x73\xcd\xb6\x27\xb8\x12\xdf\xc6\x17\xf0\x50\x6f\xf3\x24\x7f\x2a\x90\xed\xdf\x5d\x40\x72\x81\xe0\x65\x99\xbc\x6e\xee\x3f\x5e\x09\x62\xca\x7b\xb1\x2a\x9c\x4f\x75\x53\xec\xba\x21\xbd\x90\x21\x2c\x74\x0d\x70\x7e\x8c\x86\xaa\x07\x65\xde\x2c\xa1\x8e\x95\x70\x2e\xe8\xff\x69\xda\xb2\x55\x21\xc0\xd6\x5f\x19\xdd\xb6\xb9\xfa\xd2\xe8\x30\xd6\xee\x05\x55\x9d\xf5\x5b\x67\x2a\xe9\x58\xe3\x55\xa7\x92\x89\xb6\x5c\x33\x99\xa5\xcd\x7d\xab\xc2\x9a\x31\x1f\xd5\x82\x35\x27\xbf\xae\xab\x54\x56\x86\x83\xaf\x70\x04\x88\x0e\x5f\x13\x21\x70\xdc\x71\x89\x32\x7c\xf1\xf1\x57\xfa\xf5\xcf\xea\xd8\x71\xc7\x96\x25\xfb\x1c\xdb\x03\x2c\x9c\x89\x16\x77\x22\x6a\xaf\x96\x48\x2b\xe2\x31\xc5\x84\x8b\x24\x5b\xc7\xb6\x3a\x96\x49\xf2\x4d\x59\x57\x4b\xab\x1d\xdd\xc5\x11\x95\x5a\xc9\x1c\xdc\xb1\xd4\x9a\x04\x90\xdd\xc6\xf1\x55\xb5\x03\x96\xf4\x62\x70\x3d\xb7\x97\xc3\xb0\x5e\xb3\x2e\xa3\x44\x16\xac\x74\x45\x6b\x25\xfd\x7d\x55\x3e\xd1\x54\x87\x2f\xe3\x0a\xd6\xf4\xaa\x9a\x8a\xb1\x17\x29\xfb\xa6\x66\x67\xb2\x10\x88\xa6\x85\xc7\x01\xc8\xd6\x53\xc8\x00\xf2\xb3\x1a\x7e\x9d\x41\xe7\x00\xc5\xe6\xbf\xa2\x0e\x9c\x32\xb4\x27\x7a\xed\xff\xb0\xf8\x8b\x53\xef\x32\x2e\x05\x13\x77\x99\xa2\xe9\x8a\x8c\x10\xeb\x81\xef\xbd\xea\x44\x69\x65\x22\x50\x8d\x40\x66\x1a\xe6\xea\x81\x82\xa2\x75\xee\xad\x01\x9b\x0f\x7f\x2d\x85\x37\x69\xb3\x99\x02\x19\xfd\x7a\x8b\x20\x3f\x45\xf4\x4b\x6d\x80\x9f\xcd\xa7\x70\x06\x09\xf0\xe5\x53\x75\xe0\xce\xfd\xb4\xc2\x26\x5e\x7e\xef\x16\x05\x8e\xd8\xa6\x8c\x9d\x44\xee\xb1\xa4\xeb\xa1\x0c\xf5\xe7\xc0\x9b\x40\xce\x5d\x2e\xa7\x88\xe5\x6a\x72\x16\xe4\x1e\x95\x46\xd8\x15\x20\x71\xb9\x68\x38\x25\x52\x6b\x91\xd1\xd2\x42\x2d\xea\x74\x19\x02\xa4\x0f\x71\xc0\x00\x12\x3a\x71\x36\x05\x27\x36\x71\x47\x85\x2a\xf8\x89\x3e\xf7\x11\xeb\x44\x67\x4e\xb5\x97\x02\xe7\x42\x48\x7d\x38\x81\x81\xd9\xd4\xae\xb5\xfb\xdf\x74\x4e\xb9\x38\x01\x6a\xdb\xad\x53\xc7\x72\xb6\x35\x21\x1f\x71\xcb\x51\x61\xb3\x71\x21\x96\x4c\x5b\x42\xdd\xc2\xcf\x6f\xf6\xa3\xe6\xff\x11\x3c\xf2\x28\x7e\xaa\x84\x9c\xe8\x72\x9c\x47\xa5\x1d\xd6\xd1\x4f\x15\x6f\xb8\x88\xda\xef\x77\xf5\x41\x84\x0d\x37\xd5\xfc\xd0\x1c\x5e\x9d\x67\x10\xd9\x86\x8c\xa2\xb1\x58\x87\x5e\x8a\xa8\xd0\x34\x28\x06\x7c\x14\xfc\x98\xb2\x14\xca\xb1\x3a\x32\xfe\x7d\xdb\x39\xcd\xb5\xa2\x3c\x2b\xcb\x28\xaa\x60\x6a\x0a\x1d\xba\x37\x27\x85\xa5\x52\x27\x4e\xc3\x53\x38\xf7\xac\x1e\xae\x9e\x5a\xfd\xa2\x60\xf2\x12\x17\x45\x2d\x5b\xf9\x96\xb3\x6d\x2c\x42\x51\xf9\xe0\x66\x55\x8d\xa8\x7b\xc6\x72\x35\xad\x32\x1d\x35\x56\x33\x31\x52\xcf\x86\x4c\xa5\x49\x26\x1d\xb5\xe7\x21\x3b\x4c\x78\x57\x9d\x6c\xc9\x82\xac\xc7\xe5\xb3\x28\x11\x55\x7d\x7b\xf4\x40\x42\xf1\xb3\x0a\x30\x2c\xc8\xa8\x5c\x91\xf9\x97\x45\xfd\xd9\x3f\x13\x31\xef\x47\x22\xe6\xca\xa9\x98\x77\x9e\x8c\x79\xef\x33\x20\xef\x7f\x0e\xe4\xbd\xc9\x82\xbc\x37\x79\x90\xf7\x27\x13\xb2\x79\x2e\xe4\xbd\xc9\x86\xbc\xb1\x7c\xc8\x38\x99\xfa\x1e\x66\x45\xae\x92\x17\xb9\x5a\x66\xe4\xba\x72\x23\xef\x61\x76\x64\xa5\x38\x7b\x3f\x32\x24\xef\x4b\x8e\xe4\x5a\xb2\x24\x97\x8f\x72\x32\x65\x4a\xae\xa1\x0c\x4a\x15\x8d\xd7\xcd\xb4\x2c\x1f\xa5\x56\xb6\xa5\x75\xd3\x19\x97\xd6\x3d\xcf\xba\x2c\xdd\x92\x75\x0e\x99\xff\x80\x35\xae\x4e\xbe\x5c\xdf\x3a\xd7\x4b\xc1\x5c\x7d\xdd\x4a\x63\x23\xab\x74\x7d\xd3\xf8\x2b\x3a\x35\x13\x4f\xd6\x0a\x8e\x4d\x2d\xc8\xe0\x2e\xdd\x9a\xfe\xdf\x3f\x1e\xf6\xb7\x37\xd6\x15\x84\x97\x4d\xf0\x88\x67\x79\xb7\xa9\x44\x11\x18\xb9\x3c\xa2\x64\x15\xf8\xc7\x73\x4c\x61\xde\xdc\x7b\xa1\xc5\x70\x30\x12\xc2\xdb\x48\x28\x8a\xde\xb9\x24\x81\xdd\x8f\xf0\xb7\xaf\x78\xf3\xd3\xec\xeb\xe4\xa8\x76\xe4\xd4\xbf\x44\x68\xdb\x6a\x61\x6d\x24\xbc\xeb\xe4\xed\xaf\xd3\x8d\xd1\xc9\xee\xf9\x62\x85\x1d\xff\x3e\x0c\x2c\x60\x7d\xd6\x62\x46\x57\xee\xa9\x54\x37\xd5\x55\xd3\xd5\xb2\x29\xad\x89\xaa\x16\xc0\xcb\xea\x74\xd6\x3a\xd9\xa9\x6b\x3d\x3a\x48\xb8\x44\x02\xea\xfd\xd8\xc9\x83\x2f\xfd\xf7\xef\x8f\x2e\x26\x37\xd6\x20\xed\x76\x37\x7f\x65\xaf\xb5\x26\x4c\x61\x69\x7e\x50\xda\x00\xec\x2e\x57\x7b\x42\x07\x9f\x3e\xf7\xd9\xe3\x55\x22\x5e\x4b\xa5\xdd\x55\x24\x5c\x66\x1d\x84\x6c\x8a\x09\xfa\x26\x49\x20\x27\xfb\x2d\x53\xa2\xd8\xce\xc5\x5d\x32\xfc\x05\x06\x92\xfc\x08\x64\x35\xd4\xc4\x3f\x70\x48\x2c\x3b\x17\xfe\x44\x21\x63\x28\x98\x50\x57\x0c\x18\xc9\x41\xc6\x60\xc3\xc3\xd7\x96\x7c\x6b\x45\x38\xa4\x87\x21\xb5\x02\xcc\xac\x39\xc1\x17\xc8\x83\x42\xd3\x22\xf0\x6b\x88\x08\xf4\xac\x39\x24\x33\x44\xa5\xf0\x60\x09\x67\xf6\x88\xc9\x42\xcb\xc0\x9b\xa1\x00\x51\x46\x00\xc3\xc4\x42\x63\x8b\xa9\xfc\x17\x10\x58\x90\x10\x4c\xdc\xc6\x7a\xd3\x91\x82\x00\x04\xb7\x33\xf5\x4b\xc4\xa6\x72\xaa\x14\x31\xa8\xcf\xd5\x62\xd8\xba\x40\xf0\x52\x4c\xaa\x68\x22\x91\xd6\x70\x63\x2a\x42\xf1\x96\x5e\x81\x3d\x4c\xc1\xec\x3c\x24\x13\x48\x3a\x33\x18\x84\x77\x5d\x7d\x20\x38\x79\xb9\xf1\xc7\xee\xd7\xfa\x32\xdd\xc5\x24\xbb\x1b\x33\x13\x52\x57\xf9\xea\xfd\x8a\xaf\x6c\xc7\xee\x5a\x5d\xab\xd7\x15\xff\x8f\x2e\x5e\xcd\x7c\x21\xa4\x4f\x19\x9b\xef\x6f\x6c\x5c\x5e\x5e\xba\x97\x03\x17\x93\xc9\x46\xbf\xdb\xed\x6e\xf0\x97\x14\x5e\x14\xcf\x6e\x14\xf0\x20\xa2\x9a\x4e\x89\x97\xf0\x77\x47\x5f\x16\xfa\x17\xd9\x0f\xce\xb1\x35\x88\xa6\x50\x79\x34\x7b\xdb\x46\x7b\x56\x9d\xf1\x37\xfb\x37\xfc\x82\xdd\xcd\xa5\x5f\x70\x03\x9b\x22\xbd\xee\x2b\xec\x88\xfc\x29\x7f\xa7\x91\xc1\xef\xdf\xfc\xba\xb7\x4b\xcc\xcd\x4a\x6b\x1e\x97\xd9\x19\x99\x89\xb5\xfa\xc1\x0e\xfd\x1a\x02\x02\x2d\xf3\xcf\xbd\x32\x42\x5a\x75\xf0\xfe\x4d\x0e\x3e\xb8\xc9\xc1\x37\x6f\x72\xf0\xad\x9b\x1c\xbc\x94\x33\xac\x3a\xf8\xce\x4d\x0e\xbe\x7b\x93\x83\xef\xdd\x0e\x3f\xcb\xbc\x7c\x05\x86\x26\xaf\xf9\x78\x82\xef\x9a\x97\xcd\x7a\xf4\x79\xf8\xfb\x1f\xab\x1c\xef\xda\x64\xd6\x7a\x7a\xe7\x85\x84\x7e\x77\xdb\x1d\xf4\xac\xed\xae\xdb\xdd\x29\x60\x99\x93\xbc\xa5\xbd\xf8\x4a\xa2\x40\x80\x24\x32\xc5\xb3\x1d\xfb\xcd\xce\xae\xbb\xb9\xe7\xf4\x7b\xee\xee\xe0\xe3\xe6\xb6\xdb\xdd\x99\x76\xb6\xdc\xbd\x8b\xce\xa0\x3f\xdd\x75\xbb\xdb\xaf\xf7\xfa\xee\xce\x9e\x33\xd8\x75\x07\x7b\x1f\x7b\x9b\x6e\x6f\xca\xaf\x0e\xfa\x2f\xf6\xba\xee\xf6\xe0\x4f\x23\xad\x97\xbd\xae\xd7\x1b\xb8\xdd\x3d\x67\x73\xdb\xdd\xda\x1a\x75\x76\x9d\x6e\xa7\xd7\x75\x7b\xbb\x9d\x4d\x77\xb3\xaf\x3e\xee\xb9\xfd\xfe\xc7\x41\xcf\xdd\x1c\x8c\xba\x9d\x4d\x77\xd7\xe9\xbb\xbd\x6d\xf1\xab\x93\xdc\x40\xc5\x47\x87\x3f\x26\x7f\x75\xf8\xaf\x17\x5b\xee\x5e\xef\xb0\xd7\x1f\xb8\xfd\x1d\x67\xb3\xef\xf6\x06\x4e\xaf\xdf\x73\x7b\x3d\xf9\x42\x47\x7f\xfb\x9f\xb3\x6e\xa7\xb7\xe7\x0e\xb6\x46\x9d\x81\xdb\xeb\x3b\xfc\x5d\x83\xbe\xd3\x73\x07\x7b\xf2\xd3\xe6\xc5\xb6\xdb\xdf\x1b\x75\x9d\xbe\xbb\xbd\xe9\xf4\xdc\xbe\xb3\xe9\xc8\x0b\x94\xff\xd3\xe1\x77\x8a\x1f\x3a\x9b\x1c\xdc\xfe\xe6\x61\xaf\xb7\xe3\x6e\xf6\x9c\xfe\xae\xbb\xed\xf4\x7a\xdb\x6e\xbf\xe7\xf4\x77\xdc\x7e\xf4\x5a\xfe\x79\x09\x8c\x6d\xf6\xdc\xee\xae\x23\xd6\xe6\x63\x7f\xcf\xdd\xd9\x1a\x75\x3b\x3d\xb7\xbf\xd5\x71\xb7\x06\x9d\x9e\xbb\xbb\x93\xfc\x01\xbd\x6d\xb7\xb7\xed\xc8\xbf\x5d\xfe\xbf\xce\xb6\xdb\x73\xfa\xc9\xca\xee\x6e\x7f\xec\xf7\xdd\xed\xbd\xe9\xa6\xbb\xb9\xed\xbb\x5b\xbb\x4e\x1f\xf4\x07\xee\xe6\xc0\x91\x7f\xf9\x43\x3d\x67\xcf\x1d\x6c\x77\xfa\xee\xe6\x16\x47\xf0\xa6\xfc\x23\xaf\x08\x84\xf7\xdd\x2d\xa7\xcf\x9f\x88\x6f\xdf\xec\x75\xfa\xee\xd6\x68\xe0\xee\xee\x39\x5d\x67\xcb\xed\xf3\x55\xdb\xd9\x94\x9f\xb6\xdd\xbd\x9e\x84\xe0\x45\x6f\x6b\xd3\xdd\xab\x9e\xc5\x96\xbb\xe5\x88\x3f\xb9\x39\x2c\x81\xbf\xdd\xbe\xbb\xab\xf0\x37\xe5\xf4\xe4\x77\xdc\x4d\xfe\xca\xad\x5d\xd0\x13\xc4\x2d\xff\x8a\xa9\x74\x76\x9c\xbe\xdb\xdd\x1e\x75\x36\x39\x05\x89\x37\x77\xfa\xee\xde\x40\x7c\xd8\x11\x34\xb2\xb3\x25\x6e\xe9\x6c\x73\xe4\x6d\xbb\xbb\x7d\xf1\xe9\x45\x6f\x67\xe7\xe3\xa0\xeb\x6e\x6d\x8f\xba\x1c\x15\x7b\x1d\x77\xa7\xdf\x19\xb8\x5b\x9c\xb2\xb7\xf9\x07\x30\xe8\xbb\x3b\x3d\x47\xfe\x8d\xe6\xb5\xb9\xeb\xee\xf4\x7d\x71\x2f\xbf\x0f\xf0\x11\xfa\x8e\xfc\x2b\x71\xbb\xdb\xe9\xb9\xbd\xd1\x8e\x3b\xe0\x2b\xb0\xc7\x11\xef\x6e\xed\x89\x0f\xbb\xee\xe6\xd6\x9f\x6f\x7a\x3b\x3b\xce\x60\xc7\xed\x6f\x4e\x05\xd5\x8e\x3a\x3d\x77\x8f\x13\x33\x5f\x3d\x8e\x5a\xb1\x8a\x7d\x77\x40\xdd\xad\x01\xff\x77\x2b\xf9\x03\xf6\xdc\x3e\xdf\x36\x12\x1a\x47\x6e\xc1\xa5\x48\x74\x97\xcf\x84\x83\xbd\xb9\x33\xea\x76\xb6\xf8\x76\xec\xbb\x83\xce\xae\xdb\xdf\x76\x76\xdc\x1d\xf9\x89\x23\xa0\xdf\x77\xe4\x5f\x39\xb9\x6d\xb7\xbf\xe9\x6e\xef\x7c\xec\x0d\xdc\xde\xa6\xcf\xa9\xb3\xe3\xee\xc6\xd4\xba\xe9\x6e\x6f\xfb\x1d\x77\x6b\xb7\xd3\xe7\x2b\x35\xe8\x39\xf2\xaf\x5a\x29\xbe\xfd\xf8\xec\xf8\x62\xf1\xa5\xd9\x71\xfb\x1d\xbe\x92\xe2\xc3\xae\xdb\xeb\xfd\x39\xeb\x6d\x76\xf8\xe6\x05\xfd\x6d\xa7\x1f\x6d\x08\x0e\x5d\xc7\xdd\xee\x8f\x3a\x7d\xce\x18\xba\x62\x7d\x1d\xb9\xcc\x0e\xe7\x04\x17\x1c\xd8\x51\xd7\xe1\x88\x74\x77\xfa\x0e\x47\xdb\xee\xae\x33\x00\xbb\x9c\x98\xc5\x1f\x89\xb0\x2d\xb7\x3f\x10\x83\x54\x63\x0c\xfb\x8b\x49\xde\x02\x38\x06\x9e\x32\xf5\xf4\xf8\x3d\x48\xa4\xa9\xda\x83\x5d\xb7\xdb\xb7\xfa\x03\xb7\x37\xb0\xe4\xe7\xc1\xc0\xed\xee\x5a\x83\x9e\xdb\xdd\xb3\x06\x3b\xfc\x6f\x7f\xdb\xed\x6f\x59\x83\xcd\xe4\x33\x3f\x2a\xb6\xf9\xe7\xc1\xae\x3c\x36\xac\xad\xbe\xbb\xb9\x67\x6d\x6e\x25\x9f\x7b\x5b\x6e\xaf\xc7\x3f\x77\x7b\xea\xb3\xf6\xae\x86\x73\x88\xc1\xed\x6f\xbb\xdd\x81\x25\xde\xd8\x55\xa3\xf6\x76\xdc\xad\x6d\xab\xbf\xe5\x6e\x0e\x2c\xc1\x7e\x2d\xc1\x91\x2d\xb1\xef\xad\xfe\x2e\x9f\x8d\xfc\xdc\x13\x9f\x25\x14\x9c\x08\x52\x10\x65\xa1\x96\x9f\xbb\x3b\x56\xf2\xca\xa5\x81\xee\xf3\xb7\x0f\xfa\x02\x7f\xe2\xf3\x66\x9f\x43\xd2\xdb\x74\x77\x77\xac\xcd\x9d\xe4\x73\x5f\x7e\xde\x71\x77\xc5\x8c\xfa\x5b\x56\xd7\xed\x6d\x29\xa0\xba\xf1\xbf\x9b\x11\x60\xfa\x52\x24\x4b\x94\xbc\xae\x00\xe2\xdb\x73\xf6\x1a\x44\xb3\xe6\xf2\x9d\xc8\x19\x22\x77\xed\xe2\x25\xc1\xa7\x8d\x6f\x83\x5f\xd9\x12\x5d\x8f\x6e\xc2\x92\x5f\x65\x79\x45\xf4\x79\x64\x3c\xab\x99\xe3\x9e\xf2\x00\x98\x8c\xe9\x67\xcd\xc2\x42\x56\xed\x27\x7d\x30\x89\x92\xdf\x7f\x76\x94\xae\x13\xac\x79\x77\x3d\xa5\x57\x88\x41\xbe\xdb\xf0\x63\x44\x5f\x43\xe0\xc9\x46\xff\x06\x28\x92\x8b\x37\x0a\x05\xf0\x3c\x02\x69\x11\x2a\x0e\x92\xab\x37\xbb\x1e\x90\x8c\x8f\x30\x29\x0a\x63\x9c\xab\x4b\x37\x0a\x83\x07\x18\x90\x8e\xc9\xa2\xaa\x18\xa9\x1b\xd6\x5a\x2c\x71\x95\x00\x69\x79\x42\x75\x00\xe7\x58\x99\x10\xe9\x89\xea\xf1\x96\x8b\x61\xfe\x19\xbc\x7c\x17\xc1\xcb\xf2\x4c\xf9\x19\xb7\xfc\xef\x18\xb7\x6c\x6a\x72\x54\xa3\xa3\x67\x5d\xef\xe6\xba\x23\x1e\x94\x58\xbb\xb4\x3c\x7c\x2f\xaa\x0f\x3e\x7f\xfb\xf1\xc3\xd5\xe7\x8f\xab\x04\x3e\x1e\x2b\xf1\x3e\x1d\x04\xb5\xb4\xca\x91\xc2\xce\xf2\xc8\xbd\x1f\x11\x43\xaf\x9f\xff\xf9\x92\x4e\xfc\x5e\x3d\xf4\xde\x51\x1c\xd0\x2a\xd4\xbf\x7c\xdc\x4f\x34\x80\xfc\xf7\x8e\xd7\xe9\xf8\xcf\xc5\xf6\xf9\x9f\xe0\xb8\xa0\xd2\x3b\x98\xd4\x2c\x5b\x24\xf7\x42\xf3\x62\x9c\x45\x2d\x66\xfd\x70\x96\xaf\x2c\x53\xf5\x80\x85\x68\x67\x0a\xfc\x71\xa1\xcd\xdf\xf0\x64\x75\xc5\xda\xe2\x87\x44\x84\x52\xde\x5b\x2b\xff\x3b\x01\x93\x4c\x7e\x77\x81\xf5\x45\xea\x78\x26\xc1\xc7\x52\xe2\x19\x03\x93\x02\xe9\x23\x1a\xa2\xb8\x2f\x4c\x72\x4f\x61\x7d\xec\xe4\x16\x7d\x0c\xa9\x4b\x55\xa6\xfb\xe9\x8f\x7c\x8c\x0a\x16\xac\x70\x42\x66\xc7\x2f\x0c\xd6\x8a\x8b\x63\x24\x42\xd2\x89\xc0\x53\xc3\x14\xe4\x12\xb4\x18\x66\x99\x08\x6f\xd9\x1a\x4d\x55\xa9\x16\xa6\x31\xea\x96\x72\x58\x4a\x8a\x28\xa1\xba\x3b\x33\xab\xa5\x79\x9f\x99\x77\x3e\x28\xe5\x9d\x32\xa6\xec\x8e\xb9\xe6\x7b\xaf\x3f\x3e\x39\x7c\xf1\xee\xc6\xe2\x61\x9b\x4b\x7f\x79\x91\xae\xe1\xc2\xa8\x60\xbd\x25\x8e\x33\xf9\xe4\x86\x0a\xf3\xbb\xdb\x95\x79\xb5\xf1\x61\xf6\xb1\x77\x05\x0b\x8c\x9d\xd8\x47\xa3\x45\xdd\x4a\x7c\x7a\xd8\xe2\xda\x42\xdc\x6b\x95\x86\x3b\x18\x8d\x20\xa5\x22\x7c\x93\x60\xdf\x8a\x21\xa9\x1b\x2d\x51\x70\x7e\xd6\x3b\x41\xd9\x25\xee\xb0\x29\x22\x5e\x59\x65\xb7\x5c\x88\x6d\xfe\x1c\x3d\xf4\x43\xca\xc9\xd3\x62\x53\xc0\xac\x90\x42\x2b\x33\xad\xd7\x88\x32\x1a\x45\xae\xca\x00\x50\x11\xc7\x39\x87\x64\x8c\xc9\xcc\x1a\x41\xc2\x00\x0a\x2c\x51\x82\xcd\xb5\x7e\x5d\xa8\x88\x57\x14\x4c\x2c\x20\xef\x37\x27\x17\x76\x1d\xfb\x58\xc4\xed\x5a\xe9\x8e\x25\x8e\xc5\x0f\x0d\x6b\x1c\xb2\x90\xc8\x90\x59\x48\x99\x75\x89\x7c\xdf\x3a\x87\x16\x08\xd9\x14\x06\x0c\x8d\x00\x83\x9e\x63\xcd\x31\xe3\xdf\x80\xef\x2f\xc4\x25\x4c\xd0\x37\xfe\x66\x02\x81\x67\x01\x39\x13\x86\x2d\xe0\x79\xa2\x0c\x1e\xf0\x2d\x14\x70\xb0\x85\xbe\xd8\x10\x5a\x89\x18\x4c\x72\xf0\xb2\x29\xb4\x04\xd1\x22\x48\x2d\x10\x78\x16\x09\x7d\x48\xad\x31\x26\x32\xbf\x52\x8c\x1a\x4d\x80\xeb\xa8\xf9\x2c\xbc\x1a\xe2\x4c\x80\x19\x1a\x23\x55\xf1\x4b\x14\x6e\x19\xe3\x52\x79\xa3\x09\xc9\xd5\x7b\xb0\x52\x36\xc9\x07\x8b\x8b\x4d\xc3\xc1\xdd\xd4\x1e\x16\x5b\xc5\x3a\x66\x98\x28\x62\x2c\x17\x5f\xe6\xd9\x47\xa9\x05\x08\xb4\x28\xc3\x04\x7a\xd6\x48\x14\x4e\xe8\x50\xe4\x41\x0b\xc5\xab\x07\x22\x40\xa6\x04\x8e\x55\xe0\x0a\xdd\xdf\xd8\xf0\xe0\x05\xf4\x39\x57\x73\x67\xf8\x1b\xf2\x7d\x20\x82\x58\x60\xd0\xf9\x70\xbc\xe1\xe1\x11\xdd\xf8\x04\xcf\x37\x0e\x8e\x5e\x6e\x7c\x42\x81\x87\x2f\x37\x7c\x3c\x02\xbe\x06\xa9\x02\x43\xfc\x2c\x20\xc8\xcc\xc0\xb5\x44\xc3\x02\xb1\xda\x73\x48\x28\xa2\x2a\xb0\x5b\x52\x01\x18\x11\x4c\xa9\x45\x61\x14\xfc\xfd\x07\x0e\xad\x11\x08\xac\x19\x08\x42\x41\xc5\x23\x1f\x02\xa2\x3f\x32\x85\x04\x16\x27\x6d\x96\x5e\xa8\x62\x22\x91\x76\xc6\x3f\xcf\x50\x80\x66\xe1\xac\x72\x89\xab\x5a\x14\x46\x64\x39\x30\x17\x5f\x10\xd3\x13\x8b\xa8\x0e\x17\x24\x3b\xd3\x24\xfc\x88\x4f\xff\x44\xc6\x99\xaf\x41\x46\xcd\xef\x33\x3b\xdb\x21\x25\xc0\x2c\x9d\x51\xf0\x92\x7e\x04\x3e\xf2\xec\x4c\x9d\xb0\x1a\x85\xe3\x0c\xd8\x1e\x23\xe8\x57\x49\xfd\x71\x9d\xaf\xb2\xe2\x5f\x46\x66\x59\x7b\xc9\x05\x33\xaf\x5c\x5c\x51\x94\x2a\xfb\x70\xea\xc7\x74\x5d\xab\xbf\xab\xff\x3a\x86\x3f\xd1\x7f\xe2\xc9\x7e\x54\x28\xcd\x29\xcc\xdc\x50\xdd\x2b\xe5\xdb\x4a\x12\xc3\x72\x85\xb2\x52\xb9\x1f\xd2\x1a\x19\x17\x65\xb3\x19\x20\x13\xc8\xdc\x48\x86\xcf\x74\xba\x14\x69\x6a\x4b\x18\x0c\x8b\x4f\xd8\x29\xf4\xe7\xa9\x45\x0b\x98\x4c\x88\x80\x17\x90\x2c\xe2\xe3\x8c\x61\xcb\xe3\x62\xe1\x0c\x05\x30\x3e\xb8\x62\x33\x78\x35\x71\xe7\xb9\x7d\x0e\x12\x91\x85\x17\xc4\xd3\xab\xb1\x75\xe7\x04\xc9\x92\x89\x85\xbb\xf7\x02\x12\x34\x5e\x9c\x44\x59\x20\xc9\x2c\x59\x66\xcb\xd6\x2f\x1c\x5e\x9c\xd8\x93\xdd\x86\xcb\xed\xbf\xec\xb1\x49\x43\x71\x8c\x2f\x7b\x04\x56\x74\x8e\x5f\xee\xf4\x5c\xee\xfc\x3c\xd0\x45\xa1\x87\x25\xc7\xa8\xf1\x20\xfd\x23\x39\x61\x10\xb5\x2e\x38\xa6\x85\xec\x02\xe2\xc4\xad\x58\x80\x19\x63\xdf\xc7\x97\x5c\x44\x8a\xa4\x9c\x75\x14\x11\x28\xf8\x79\x05\x72\x79\x19\x5c\xdc\x00\xc1\x78\x20\x98\x14\x99\x8f\xfe\xa5\xe8\xe5\x39\x40\x3e\xf4\x38\xeb\xd1\x29\xa7\x29\xdd\x9c\xc4\x12\xad\xe4\xbc\x5c\x54\x91\x45\x26\x54\xa6\x9b\x97\xe4\xbe\xc9\x1a\x23\x20\xb0\xe0\x15\xa2\x5c\xff\x94\x4f\xde\x47\xea\x79\x0f\x47\x98\x34\x22\x9d\x26\xb8\xdf\x4f\x39\x0b\xf5\x17\xe6\xcb\x88\x17\x9b\xd9\x0a\x0e\x76\x8d\xc9\x97\x53\x67\x46\x8f\x79\xf9\x74\x3f\xba\x61\x84\xbd\x5c\x51\xe0\x34\x94\x40\x3d\x54\x55\x16\xb8\xe4\xbd\x52\x80\x69\xf4\xd6\xf8\x70\x5f\xae\xd9\x7f\xd3\xb5\x3a\x52\xec\x2d\x47\x54\xe6\x9e\x7a\x79\x78\x99\x6c\x39\xe5\xd8\x33\x10\x80\x89\xa0\x9e\x26\x8d\xf5\x8a\xd7\xb9\xb2\x37\x79\xa3\x01\x64\x11\xce\x29\x48\x34\x80\x8e\x2e\x09\x99\x38\x01\xdf\xf6\xc9\xa4\x22\xd5\x04\x50\x0b\x48\x45\x27\x4a\xf1\xbc\xc9\x4a\x40\x59\x7b\x72\x1a\xf7\xf3\x78\xf1\x9a\xd9\x96\x97\xc7\x76\x7d\x7c\x97\x59\xfe\x35\x7c\x14\x9a\xad\x0b\xa3\x19\x2a\x18\xf7\x8a\x75\x92\xac\xfa\xe2\xa5\x69\xa7\xc8\xb9\x78\x90\x8e\x08\x9a\xa7\x4a\xcf\x56\xb7\x64\x34\x61\x25\x3d\x52\x1d\x73\x6b\x83\xd7\xf0\x6d\xad\x6b\xbf\x6f\xb9\x84\xae\xbd\xaf\xba\x00\x92\x63\x1a\xbe\x74\x95\x12\xec\x12\xa8\xc9\xe9\x59\xbe\x28\x67\x2f\x8c\x4a\x85\xac\xb0\xf6\x5b\x2b\x67\x52\xd2\x70\xb2\x5e\x0b\xa0\x06\x4e\x8a\x55\xfd\x14\x29\xa3\xf6\x12\x56\xf1\x8b\x49\x67\x0e\x18\x83\xe4\xce\x4d\xe2\xc7\x60\xe7\x23\x7e\xdf\xdf\x5c\x25\xa7\x4b\x9b\x4e\x74\x29\x4e\x1f\xce\x65\x49\xaf\x39\x6b\x5b\xe4\x7d\xa9\x6a\xaa\x8e\xdd\x73\x7b\x19\xae\x12\x31\x24\x38\xce\x48\xc4\x8a\x28\xa2\x9e\x0e\x32\x27\x43\x9f\x02\xe2\xcc\xdd\x43\x60\x82\x03\xe0\x77\x28\x23\x68\x0e\x3b\xf1\x79\xae\x6e\xfe\x10\x20\x11\x78\x15\x52\x48\x8e\xe7\x60\x04\xdf\x05\x1f\x28\xcc\xce\xb9\x67\x48\xab\xee\x66\xd9\x9f\x82\x02\xcd\x22\xcb\x1e\xc7\x91\x8f\x82\x2f\xfb\xca\x94\xe8\x01\x06\xf6\xc5\x65\x8e\x9c\xc7\x57\x33\xff\x97\x73\x40\xe1\xf6\xa6\x73\xf4\xe2\x6d\xff\xcf\xc5\xaf\x9b\xe7\x9f\xae\xc2\xd1\xb7\x6e\x00\x5e\xbc\xef\x8e\x9e\xe2\x8b\xd7\x03\x6f\xe0\x2d\xb6\x06\x6f\x16\x5b\x17\xa3\xd9\xe8\xe2\xcd\xe7\x83\xcb\x37\x87\x7b\xdf\xbc\xd9\x28\x78\xf9\xc2\x9b\xff\xf9\xe2\x3d\x3e\x3a\x1e\x5d\xbd\x39\x1c\x4d\xc0\x6f\x1f\xe7\x7f\xf6\xa7\x5d\xf5\xfd\xf1\x21\x3a\x98\x1c\xbd\x78\xe5\xff\x31\xf8\x7d\xe2\xf5\xfd\x2f\xde\x6f\x93\xbd\x57\xdf\x9e\x5d\xbe\x5a\xfc\x8a\xff\xfc\xe4\x07\xe0\xc5\xef\xd1\xf7\x19\xf8\x74\x45\x8f\x8e\xbd\x01\xf8\xcd\xef\xfe\x79\x3c\xba\x38\x9a\xe0\xc9\xcb\xa7\x57\x97\x7f\xfc\xfd\x3d\x7e\xf9\xdb\xef\x7b\xaf\xba\x5d\xf6\xe6\xf8\xf2\xea\xe5\x6f\x97\x8b\xd7\x87\xdd\x05\x1f\xfb\xe5\x61\xf2\xff\x93\x93\x03\xfa\xe6\xe4\x60\x72\xfe\xf4\xd9\xe5\xeb\xc3\xee\xd5\x9b\x03\x9c\xba\xfe\xf2\x59\x77\xeb\xf5\xd3\x67\xf1\xf3\xaf\x16\xbf\x7e\xf3\x5e\xbc\xba\x00\xfd\x0f\x7b\xaf\xfa\xaf\xe8\x1f\x9f\xde\x12\xed\x37\x96\xc0\xfb\x26\x78\xfd\x6d\xf3\x6f\x47\x72\xce\x8f\x8d\x04\xd5\xdb\xdb\xdb\xdb\x10\x88\x8e\xb1\x5e\x23\xd5\xbf\x64\x41\x75\x3e\x64\x30\x9f\x94\x73\xa6\x55\xd8\x92\xc6\x55\x6a\xf3\x24\x02\x02\x3a\xc6\x64\x46\x37\x00\x21\x60\xa1\x73\x23\x7e\x30\x9d\x43\xd2\xe1\x74\xd7\x11\x31\x1b\x9d\x31\x01\x13\xc1\x0c\xf2\x0f\xea\xbc\xcb\x61\xeb\xe2\x5e\xc1\x90\x45\x3f\x6b\x53\x09\x2a\xa6\x12\x81\xd9\x59\x7a\x4e\x99\x11\xee\xe3\xe4\x56\x99\xd6\xdd\x4f\x28\x64\xc8\xa7\x1b\xc0\xf3\x3a\x0c\x77\x44\x36\xdc\x4d\x9c\x83\xfa\x30\xf2\x30\x04\x64\x12\x0a\xb4\xb8\x32\x56\xf6\xaf\xbd\x47\x8f\xe4\x0c\x1e\x0e\x93\x8b\xa7\xbd\xb3\x27\xfa\x97\x7d\xdb\x76\x82\x61\x0b\x0f\xa1\x2b\x7a\xba\xb4\xec\x27\x76\xdb\x21\xc3\x7e\x0a\x50\x34\x6e\x1d\x70\x72\x71\x11\x15\xff\xb6\x60\xbb\x4d\x20\x0b\x49\x60\xc1\xeb\x16\x6e\xff\xf8\x91\x46\xba\x44\xd9\xe9\x99\x03\x86\x0f\xbb\x0e\x1d\x3e\xec\x39\x7e\x84\x4e\x46\x16\xdf\xc7\x98\xb4\xf8\x3d\xd8\x21\x43\x78\x7a\x2c\x8e\x65\x17\x31\x28\x6a\xf4\x9c\xb5\xda\xbf\x3c\x6c\x01\x0e\x14\x71\x03\x78\xc5\x5a\xed\xb6\xeb\xe1\x00\xb6\x1f\x3d\x6a\x05\xee\x3c\xa4\xd3\x16\x96\xf6\xe7\xb6\xf3\x90\xfd\xf8\x11\xa8\x19\x3f\x1c\x0e\x59\xfb\x17\xfe\xca\xf6\x2f\xd7\x23\xc0\x46\xd3\x16\x6a\x7f\xa7\x1c\x04\x7f\x88\xae\xc7\x28\x00\xbe\xbf\xf8\xce\x01\x00\x3f\x7e\x70\x31\x6b\x38\x24\xae\x9c\xc7\x8f\x1f\xd1\xa7\x56\x3b\xbe\x13\x8d\x5b\xb4\xcd\xa6\x04\x5f\x5a\xfe\xf5\xb5\x9a\x70\x70\xdd\xc2\x0e\xd1\xa7\xdc\xfe\x2e\xef\x09\xe0\xa5\x75\xb2\x98\xc3\x67\x84\x60\xd2\xb2\x95\xf1\xcc\xe2\x8c\x6b\x36\x57\x16\x6a\xca\x48\x38\x12\x7e\xd8\x00\x07\x1d\x31\xe5\x73\xae\x36\x07\x94\x81\x60\x04\xed\xf6\x75\xab\xdd\x76\xc0\x30\x38\xed\x9e\x39\x74\x18\x9c\xf6\xce\x1c\x7f\x68\xdb\xae\x6c\xbe\xd2\x02\xed\xe8\x13\x6b\x3f\x50\x28\x7c\x40\x1f\x3d\x6a\xf9\x8f\x87\xf6\x93\xf8\x36\xda\x6e\x3f\x50\xf0\xfa\xd7\xc5\x54\x7a\x4e\x20\xf0\x46\x24\x9c\x9d\x77\xc4\x0f\xe9\x9d\x97\xb9\x59\x08\x45\x90\x6e\xcc\x09\x9e\x21\x0a\x3b\x58\x50\x6f\xf1\x7d\x5f\x43\x48\x16\x1d\x21\xdd\xd2\xcc\xb6\x74\x82\xa5\x88\xff\x33\x3e\x3f\xe4\xc0\xd2\x61\xf2\x59\xdf\xa5\x20\xb5\x2d\xe4\xfc\xbf\x0b\xaf\xcf\x3e\x74\x27\x90\xb5\x6c\x46\xd0\x6c\x06\x3d\x11\xe4\xd5\x76\x00\x99\xd0\xfd\x7c\x3b\x59\x75\xef\xdc\x07\x28\x78\xe9\xd9\x6d\xa7\xd5\x75\x02\xf7\xeb\xfc\xd7\x10\xf9\x1e\x24\xed\xd6\xf7\xcf\xf8\x9c\x0f\x41\xb9\x5c\x14\x0d\x1d\x44\x3f\xb8\x42\xd7\x6c\xff\xf8\x61\xab\xcd\x6a\x5f\xb7\xcf\xae\xaf\x1f\x68\x30\x83\x07\xfa\x64\xf2\x40\x5b\xf0\x49\x04\x04\x20\x30\x60\x6e\xa4\x1b\xb6\x9f\x9c\xc6\x8c\xc8\x95\x0d\x15\x5a\xdf\xd5\x82\xec\xa7\x1e\xb1\xdb\x2e\x9b\xc2\xa0\x65\x18\x1c\xb4\x60\xfb\xba\x7d\xdd\x76\xf8\x87\xb3\xfd\x53\xf5\xcf\x59\x09\xa1\x44\x6b\x0a\xce\x29\x23\x60\xc4\x3a\x3e\x9e\x4c\xd2\x51\x9c\x8e\x2d\x17\x9c\xcb\x93\xc2\xcb\x7f\x33\x7c\x58\xca\xfc\x6f\xd0\x15\x0a\x62\x04\x84\xc4\xe7\x7c\x4c\x92\xda\xbe\xbc\x63\x84\x67\xf3\x90\x41\xaf\xa5\x6d\x53\x45\x11\x7c\x9e\x3e\x9e\x3c\x87\x6c\x34\xdd\xd7\x2e\x5f\x3b\x30\xf0\xde\x8d\xc7\x14\xb2\x7d\xa1\x53\x63\xf1\xf9\xc8\x38\xac\x1d\xdf\x6b\x3b\xda\x18\x1c\x48\x38\x14\xd5\xb8\xe2\x1b\x1e\xc4\x8b\xfa\x1d\x13\x34\x41\xc1\xbe\x4c\x95\xb0\xd5\x0b\xf6\xe1\xf5\x7e\x7c\x05\x06\x5e\xfc\xfb\x16\xdc\xe4\xb0\x26\xb1\x16\x66\x50\xcc\x33\x1c\x87\xbe\xff\x81\xf8\x39\xb8\x43\xe2\xdb\x4a\xe9\xe4\x8b\xa6\xcf\xd1\x76\xec\xec\xbb\x4c\x93\x8b\x09\x50\x2e\x35\x1a\x2f\x5a\xf2\x25\x80\x52\x34\x09\x5a\xdf\xaf\x1d\x81\x00\xf9\x0e\xf9\x59\x7f\x8d\xfc\x25\xfb\xa6\x98\x63\x25\xcc\x4e\xdc\x17\x12\xdf\xe1\x87\x52\xf4\xa3\xa4\xdd\x7a\xa7\x70\x8e\x6c\xb9\xd2\x47\x3b\xfc\xf3\x97\x2c\xf5\x4a\x39\x83\xbf\x44\x64\x29\x8e\x16\x79\xce\xf6\x99\xe2\xa0\x23\x72\x03\xa3\x9d\xbd\x16\xb6\x66\xa0\x73\x50\x46\xe7\xe7\xe1\x78\x0c\xc9\x31\xfa\x06\xf7\xb7\xba\x5d\x67\x06\xae\x9e\x13\x30\x83\x6f\x10\x9f\xeb\xfe\x96\x33\xce\x13\x36\x98\xcf\x61\xe0\xa5\x7f\x9b\x83\x90\xc2\xf4\x4f\x63\x6d\x9c\xae\x33\x05\x81\xe7\xc3\xf7\x90\xce\x71\xa0\xdf\x29\x05\x02\xe8\x8a\xea\x79\x91\x1c\x20\xd6\x0a\x05\x23\x22\x74\xea\x78\xe2\xb6\x36\xa4\xdd\x76\xf8\x14\xe5\xb2\x6a\xbf\xff\x55\xee\x97\xf4\x3c\x1e\x3d\x6a\x29\x22\x0a\x29\x6c\xb5\x25\xcd\x50\xce\xdf\xf4\x11\x9d\x6e\xbb\xdd\x7e\x50\x78\x4d\x51\x9a\x98\x3c\x27\x1c\x67\x8e\x7d\x7f\xbf\xd5\x75\x98\xe8\xcb\xda\x6e\x11\x38\x81\x81\x14\x3b\xde\x87\x01\x43\x33\xe8\xce\x00\xf9\x12\x6f\x29\x0b\x2a\xb2\x07\x0e\x15\x50\x46\x7b\xd9\xf0\xe0\x25\x01\xf3\x14\xbb\xe5\x52\xce\x2f\xbf\xb4\xe9\x25\xe2\xa2\x08\x74\xe7\x04\x5e\x0c\xa1\x10\x69\xda\xdf\x47\x80\x42\xab\xbb\xaf\x63\x8f\x6f\x1e\xbe\x1b\x42\x0a\xdd\x11\x97\x06\xfc\x03\xdf\x6f\x71\x0a\x11\x4f\xf6\x1c\x30\x8c\x77\x84\x1c\x66\xb8\x2d\x67\x28\x56\x9c\xcb\x06\x82\xe5\x8b\xe3\x4a\x11\x55\xbb\xf5\x5d\x2c\x93\xa0\xb5\xe2\x23\x81\xba\xe9\xc5\x16\xbb\xec\x81\x80\x71\x7b\x5f\xbd\xab\xd7\x7b\xc0\xe5\x85\x2f\xf2\xe7\xdd\x7d\x29\xf4\x28\xe0\x76\x1d\xe8\xb2\xee\x90\x03\xce\x41\xe9\xb5\x1d\x2e\x0d\x49\x49\x88\x5f\x51\x83\xf5\x7a\xd1\x8c\xa3\x41\x07\x8e\x5c\x0e\x34\x83\x38\x64\x6d\xc5\x49\x18\x14\xde\xad\x27\xdd\xfd\x3e\x1c\x44\xcf\x0e\xf6\xf9\xbf\x82\x43\x26\xa3\x50\x86\xe7\xad\xf6\xf5\xb5\x03\x05\x2a\x9c\xd3\xd3\x9e\xb3\x7b\x76\xd6\xe6\xb3\xf5\x08\xbf\xe6\x68\x78\x6d\xbc\xf6\x37\xb3\xdc\x6a\xf2\xfd\xda\x73\xef\xef\xeb\x9b\x41\xfe\x56\x07\x1d\x1a\x1a\x52\x3c\x13\xd4\xe0\x99\xe9\xd6\x91\x05\x5c\xb3\xe0\x61\x82\x7d\x1f\x05\x93\x48\x4d\x6d\xc8\x97\xd7\xc2\x55\xc5\x90\xc3\xb4\x10\xa2\xd0\x94\x39\x12\xa1\x93\x3b\x41\x2d\x3f\x66\xba\x92\x9b\x32\x77\x04\x7c\x5f\xb0\xa4\xb6\x93\xa0\x46\x2e\x0b\x17\xbb\xe4\xb1\x74\x5d\xc4\xce\x8d\x70\xc0\x47\x8f\xd8\x13\xb8\xc1\xf6\xbb\xd7\x8e\x49\x0c\xfc\xce\x29\x83\x32\x30\x9b\xef\x43\x27\xa4\xd0\x93\x62\xc9\x1c\x92\x11\x0c\xa4\x8c\x72\x7d\xed\xf8\xea\xac\x50\x38\x82\x57\x8c\x73\xbb\x98\x03\x38\xdf\x35\x70\xc5\xf3\xa1\x41\x2a\xd0\x5b\x03\xe5\xb0\x61\x6f\x5c\xf4\x36\x64\x54\xa0\x46\x16\x1b\xe9\x73\x5a\xc8\x9e\xc9\x55\x17\x71\xc9\xd9\xde\x10\xcb\x60\x0b\x69\x33\x73\x06\xc5\x9a\x2b\xe7\x14\x4f\x39\xae\xdf\x00\x36\x75\xc7\x3e\x16\x3c\xe3\x24\x9a\xfb\x46\x0f\x6e\xb7\xdb\x4e\x30\x4c\x5d\x7e\x0f\x65\x55\x80\x0f\xa2\xcc\xe8\xe1\x3c\x3c\xe6\x2f\x72\x4f\x30\x03\xfe\x09\x1a\x7d\xa1\xed\x1f\x3f\xba\xf2\x64\x18\xcd\x43\xa1\x35\x4a\x04\xb5\x34\xac\x32\x85\xd5\x18\xa5\xa0\x15\x48\x8e\xaa\xb5\x16\xe6\x3b\x87\x03\xca\xb5\x8e\xf4\x5b\x65\x9f\x27\xf9\xe2\xf7\xc7\xc7\x0f\x22\xb5\xd6\xb7\x90\x62\xe9\x33\x71\x47\xf9\xdb\xa9\xf6\x76\xba\xd1\xeb\xf6\x37\xc5\x9f\x34\x1c\xf2\x55\x6d\x41\xd9\xa2\x83\xb3\x44\x1e\xd7\xdb\xc5\xd7\x53\xff\xcc\x21\xf2\x78\x90\x71\xc3\x63\x14\x78\xbf\x2e\x5a\xa2\x7f\x93\xed\xf8\xed\x07\x68\xdc\x22\xf2\x21\x64\xc4\x38\xce\x61\x3c\x1c\xa6\x2e\xd7\xc3\x38\x29\x41\x37\x92\x13\x0e\xb5\x09\x87\x0e\x31\xe1\xda\x1b\x66\xdf\x97\xc5\x35\x29\xc7\xad\x7a\x95\xa7\xbd\xca\xd3\x70\x4b\xf2\x88\xbd\xbe\x36\x88\x44\x52\xe2\x8d\xd0\xf5\xa0\x60\x4d\x69\x0b\xb6\x95\xac\x91\x99\xbc\x76\x45\x2d\x0b\x26\xcf\xc0\x68\x9a\x1c\x1c\xac\xfd\x9d\x15\x0f\x69\x1c\x8f\xb3\x19\x0d\x67\x99\xbd\xec\x02\x1f\x01\x9a\xda\x8a\x71\x0f\x2f\x1d\xd5\x76\xdb\x49\xe3\x60\x99\x71\x54\xa7\xb3\xb6\x33\x9a\x87\xcd\x78\x8a\x38\xf9\x62\x21\x45\x60\x28\x91\x6b\x39\x9d\xcf\x4c\x40\xad\x3a\xa8\x58\x84\xba\x63\x6a\xba\x5c\x32\x8a\x12\x00\xcd\x3c\x2f\x41\x90\xec\x9f\xde\xfe\xf1\xe3\xf4\xac\xed\xce\x74\x49\x21\x48\xb8\x3b\xa0\x5f\x14\x2c\x7c\xa0\x40\x45\xae\xb4\x0d\x8b\xab\xae\xd7\x58\xbe\xcc\x9d\xa9\x05\x4a\xa3\x07\xc6\x38\xce\xfe\x7e\x7d\x2d\xed\x03\x78\xe8\x6b\x32\x03\xae\x96\x19\x7c\x3c\x29\x31\x09\xd4\xd2\xb1\xa2\xa1\x64\xcb\x92\xd8\xce\x50\x68\x8c\xc2\xbe\x9f\xdc\x04\x02\x6a\x10\x1f\x1c\xe0\x50\xc7\x5f\x4a\x88\x90\x23\x0f\xb3\xe2\x48\x91\x1c\xc1\x0c\x92\x04\x89\x25\x89\xd8\xe6\x10\xe8\xc2\x84\xb2\x5a\xc4\xf4\xc4\xda\xe2\x80\x2e\x11\x2c\xa0\x94\xf7\x9f\x03\xe4\x87\x04\xea\x72\x06\x36\xd9\x92\xf2\x20\x8d\x70\x40\xb1\x0f\xdd\x4b\x40\x82\x96\xfd\xfa\xdd\x6f\xd6\xf3\x67\x27\x87\x2f\xf6\xad\x43\x1c\xfa\x5e\xf0\x17\xc6\xef\x08\xe0\x48\xd8\x2c\xed\x44\xf1\x6e\x0b\x2b\x56\xea\xe5\x58\xbc\x97\x18\x45\x10\xf9\xdb\xb3\x0b\x18\x30\xe8\x39\xeb\xb3\xd2\x20\x7a\x2c\x88\x03\x05\x93\x02\x9e\xe5\xe3\x89\xbc\x05\x12\x97\x53\x88\x8b\xe8\xfb\x30\x08\x38\x11\x8a\x41\x8f\x30\x0a\x18\x24\x52\x1c\xd2\x6e\x96\x3f\x4c\x21\xf0\x38\xa4\x0c\x20\x01\x31\x0e\xd9\x3c\x64\x39\xae\x91\x8c\x23\xa2\x94\x81\x08\x57\x02\xc8\x37\xf0\x10\x79\x79\x38\x94\xcc\x24\x79\xf0\x89\xf8\x2e\xde\xa7\xce\x08\xe4\x3b\x6c\xe8\xc7\x16\x16\x10\x50\x74\x82\x5f\xb0\x99\xdf\x82\xb1\x45\x57\x02\x72\x2c\x36\x95\x3b\x65\x33\xff\x18\x8c\x61\x8b\xf1\x1d\x8b\x02\xc4\xf2\xe7\x97\x50\x5c\xc5\x0b\xfe\x49\xc3\x39\x24\xad\xb6\x72\xa0\x47\x44\x96\x64\x0e\xe4\xec\x43\xd1\x12\xd8\xed\x07\xcc\xbd\x24\x88\xc1\xa1\x7e\x76\x49\xa3\x1c\x14\x90\x3f\x66\x0f\x22\x53\xfc\x5f\xb7\xe0\xe6\xa3\x47\xad\x60\x18\xb8\x34\xe4\x42\x7e\x2b\xba\xd2\xd9\x82\x9b\x6d\x21\x9f\x0b\x7b\xac\xc0\x57\xc0\xbf\x33\x82\xf8\x5e\x6b\xd9\x0c\x8d\xbe\xd8\x0e\x6b\x5f\x3b\x20\xc6\x03\xa2\xc7\xe1\x7c\x2e\xb2\x5d\x9f\x24\xda\xbe\xb6\x72\xb6\x76\xb3\xda\x6f\xac\xdd\xde\x2f\xb8\x97\x1a\xee\xbd\x76\x84\x75\x1e\x2f\xf6\x53\x86\x7d\xfe\xbc\xd0\xa9\x9c\x14\x02\xaf\x9d\x09\x66\xf8\x05\x5f\x39\xa1\x6e\x37\x34\x27\x28\x9e\x74\x43\xd6\x84\x20\xa6\x33\xb1\x74\x0e\xa8\xb6\xd9\xe9\x06\xbb\xef\xc2\xf2\xbd\xff\xb0\xeb\x98\xcd\x95\xdd\xeb\x76\xdb\xa1\xc3\x0a\x3b\x1d\x88\x6c\x36\x12\x7b\xb1\xc1\x22\x68\xd1\x62\x3b\x04\x74\x99\x70\xf8\x5c\x3b\x58\xf8\x30\x94\x05\xa2\xe5\x0f\x39\xc1\x04\xac\xfd\xe8\x91\x9f\x26\x31\x7f\xe8\x47\x24\xd6\x75\x38\x6d\x39\xfe\xe3\xe1\x5f\xfe\x11\xfc\x23\xe8\xc4\xff\x59\x27\xef\x3f\xbc\x3d\x3c\x38\x79\xf6\x74\xdf\x12\xad\x4e\x2d\x49\x78\x5a\xf7\x04\x68\x9d\x63\xc6\xf0\xcc\xc2\x63\xf1\xcd\xc7\x13\x2b\x19\xe0\x2f\xba\xfd\x49\x6e\x75\x5f\xff\x29\xcf\x0a\x22\x9b\x45\xb7\xa6\x92\x2e\xc8\xe9\x84\x33\x9c\xff\x00\x72\xca\xda\xb8\x6f\x9b\x9c\x22\x6a\xd2\x56\x50\x32\xa2\xe2\x45\x15\xd7\xd5\x00\x7b\x75\xd7\x54\x6c\x9b\xe4\xac\xca\x1f\xc4\xa5\x2f\x73\x22\xac\xc7\x47\x99\x18\x8f\xcf\x86\xbf\x2c\xc7\xa6\xd2\x77\x4a\x68\xda\x0e\x1a\x12\x4d\x86\x43\xd5\x32\x5c\x80\x3d\xf8\xd3\xe2\x93\xb1\xf8\x70\xa4\xfc\x4b\xd8\x7a\x04\xa0\x85\x56\x1e\x7e\xb5\xc2\xbe\x23\x90\xf8\x84\xdf\xf8\x4f\xe4\x0d\x0d\x26\x1e\xd1\x79\x1b\x79\x76\x7b\xfd\x36\x9d\xc3\xa3\x0f\xc2\x90\x70\x88\x03\x1a\xce\xa0\x77\x23\x26\x1c\xa9\x11\xb9\x1f\x28\xf4\x8a\xf4\xf9\x55\x6d\x34\x37\x65\x48\xa8\xa3\xf6\x8b\xe5\x21\xca\x74\x22\x86\xa9\xab\xe8\x67\x9e\x9c\x95\xa9\xf6\x05\x84\xb4\xac\x52\xbf\xe4\x70\xcb\xa8\xa8\x29\x85\xb1\xa1\xff\xaf\xd0\x0b\x5e\xa6\x0f\xe7\xb5\xd1\x75\x39\x09\x69\x15\x33\x10\xe7\xc9\x05\xf0\xf7\x7b\x70\x20\x0f\xa3\xa2\x33\x48\x28\x49\x3e\x0a\xbe\x40\xaf\xd5\x76\x55\x25\x02\xd3\x49\x93\x7b\x48\x73\x54\xad\xe0\x5e\x0b\xb8\xf8\xe2\x60\x87\x38\xc8\x09\xd7\x2d\xc6\x28\xf9\x25\xc2\x86\xf2\xe4\xc5\xf2\x8c\x92\xd4\xa2\xa3\xdc\x97\x57\x95\xfb\x3c\x12\x34\xb6\x1c\xda\xf2\x4b\x04\x8d\x6b\xa7\xd5\x75\x40\x4a\x37\x6e\xb7\xfc\x48\xe4\xd8\xda\x47\x63\x19\x63\xc5\x65\xd8\xef\x6a\xcc\x5d\xe9\x4f\xbb\x8e\x65\x08\x70\x4e\xc2\x39\x6b\xd9\x8a\x2b\xb7\x23\x4f\x5b\xc6\x65\xd6\x75\xb0\x92\x6b\x62\x21\x53\xed\x17\x92\x88\xc9\x2d\x24\x62\x9b\x44\x76\x71\x6b\xe3\x1f\xd7\xff\xf8\xbe\x31\x71\xec\xeb\x7f\x04\xdf\xed\x76\x14\xea\xf5\x8f\xc0\x6e\x3b\xad\x70\x88\xd2\x16\xaa\x64\x5a\xaf\x8e\xdf\xbd\xe5\x62\x9c\x72\x08\xba\x63\xe4\x33\x48\x4c\x77\xf2\x23\xe7\xe1\x10\xba\x4f\x01\x03\x8f\x1e\x45\xdf\x64\xfc\xc3\x75\xbb\xad\x64\xf6\x47\x8f\x5a\x61\xde\x04\xaa\xcb\x6b\xfc\xf9\xe1\xa5\xa8\x14\xe0\x02\x86\xcf\x5b\xf2\x27\x61\xbb\x8b\x85\x25\x2d\xf4\x22\x3c\x0d\x23\xc5\xb2\x77\xa6\xde\xa7\x6e\x15\xca\x6a\x2b\xe4\x73\xfb\x75\xd1\x12\xa5\x48\xed\xb6\xfb\x19\xa3\xa0\x65\xdb\xed\x76\x3b\x16\x22\x7b\x9b\x19\x3f\x5c\x10\x21\x76\x33\xf6\x7d\xea\xae\xcf\xde\x76\x4d\x01\x30\xe5\x72\xa3\x35\x78\x93\x8a\xac\xca\x05\x77\xde\x64\xf8\xbc\x08\xe8\x3b\x22\xf8\x6a\x91\xb6\xdb\x1c\x49\x60\xc4\x15\x11\x86\x50\x19\x72\x5b\x1e\x26\x76\x3b\xb3\x91\xa3\xdd\xc0\x74\x52\xd1\x6c\x37\x31\x19\x98\x44\x98\x15\x4f\x2c\x9a\xd3\x77\x44\x7f\xe7\x00\xa9\x80\xa0\x87\x5d\x47\x8c\x49\xa5\x9c\xc8\xa7\x96\x0c\x66\xd8\x67\x49\xec\x98\x7a\x0c\x5e\xb7\xaf\xa3\x40\xd7\x66\xa1\x35\x19\xb9\xbf\x08\x31\x31\xc7\x67\x2d\xc8\x95\xd5\xf8\x88\xd7\x42\x59\x45\x58\x89\x1d\x06\xf2\x8d\x9e\x3d\x1c\xb2\xc5\x1c\xe2\xb1\xf5\x1e\x8e\x7d\x38\x62\x3f\x7e\x3c\x54\x9f\xb8\x54\x2a\x23\x29\x55\xf8\xc9\xc3\xde\x03\x34\x6e\xe5\xae\xba\x74\x0a\x66\xa9\x5b\xec\xe8\x6d\xc9\xe8\x82\x24\xa2\x9b\x64\x7c\xaa\x42\x13\x17\xd5\xdc\x39\xc1\x0c\xf3\x5b\x5d\x86\x95\xcd\x4d\x28\x06\xb9\x97\xb5\xf8\xed\xce\xe9\x99\x2e\xc7\x70\x2d\xf0\x61\x57\x05\xa3\xc6\xf8\x7f\xd8\xbb\xbe\x6e\xb5\x9f\xe4\x46\xd8\x4f\x49\x0a\x40\x1e\x8d\x74\x78\x2a\x32\x82\x1e\x50\x21\x0f\xba\x60\x3e\xf7\x17\x2d\xea\xa8\xf8\x4f\x9f\x0b\x95\xad\xe7\xea\x41\xf7\x1c\x05\x9e\xba\x05\x3a\x5a\x14\x28\x67\xca\x2d\xdf\x01\xc9\x74\xda\x8e\x7f\xdd\x56\xb7\x0a\x85\x21\x0e\x0b\x6e\x5f\xc7\xab\x95\xd2\x61\x5a\xc1\x50\x51\x21\x15\x26\x43\x39\xce\xbb\x71\x36\xfa\x37\x66\x89\xff\xfc\xa7\x78\xdb\x3f\xff\x39\x64\x0e\xbc\x6e\x8b\xab\xd7\x6b\x0a\x7a\x8e\x7c\xad\x41\x2e\xf0\xd9\x01\x42\xce\x96\x81\xca\xc1\x5f\x7b\x4f\x82\x4e\x6f\xbf\xdb\x76\xc8\xb0\xf7\x0b\xf9\xef\xe0\x17\xf2\xf8\x71\x1b\x9c\x92\x4e\xef\x4c\x0b\x8b\x26\x67\x0f\xa4\x6b\x94\xc9\x48\x67\x07\xc4\xa8\xe3\xa7\xe3\xd5\x6b\x31\xf4\x10\x3a\xc8\xfd\xa7\x8f\x66\x28\x45\xb6\x9a\xa3\x48\x9d\x45\x51\x40\x93\x7c\xec\x01\xfc\x6b\xf7\xd1\x23\x79\x7e\xcd\x7d\x34\x82\xad\xae\x03\xdb\xd7\x0e\x12\x2b\xaa\x8f\x14\xcd\x0a\xe6\x67\xc5\xb4\x59\x41\xae\x3a\x75\x7f\x09\xfe\x1b\xfe\x12\x3c\x7e\xdc\x66\xa7\x81\x3e\x97\xe0\xec\x41\x1c\xd6\x23\xd7\x57\x44\xc6\x44\xe7\xa2\x84\x3f\x32\x68\xca\xd1\x39\x2c\x12\xb4\x9b\x80\x46\xaa\xc5\x7e\x1a\x98\x07\xba\x28\x19\xc3\x04\x38\x24\x28\xa0\x90\xb0\x03\x76\x73\xb0\xe0\x3a\xb0\xc8\xe0\x31\x3e\xec\xa1\x0c\xbf\x7d\x8a\xbc\xc3\x29\x08\x26\x30\x02\x34\x0c\xe8\x14\x8d\x53\x70\x26\xa1\xe0\x2a\x0c\xfc\x10\x04\x01\x66\x96\xba\xd5\xc2\x01\xc3\x16\xb0\xde\x4b\xb6\x29\x80\xb6\x39\x29\x5c\x2b\xc8\x64\x9c\x7d\xbc\x4b\x1d\x3a\x04\x82\x4a\x1c\x7f\x08\xd4\x12\x39\x38\x7b\x57\x8c\xb1\x6a\x7e\x9d\xf1\xab\x2d\xa9\x01\x89\x52\xb4\x1e\x1c\x61\xaf\x4c\xfd\x59\x51\x4f\xe2\xa7\x44\xcc\x89\xfc\x14\x6f\xa9\x9f\x9c\x00\xff\xd3\x92\x13\xf8\x1c\x6f\x30\x39\x61\x15\xfe\xad\x7b\x2a\xa5\xaa\x67\x14\x6e\x40\xa2\xc1\x12\x51\x69\x56\x1a\xb4\x9a\x87\x41\xcb\x32\x2b\x1c\x8a\xeb\x76\x0d\xfd\xb7\x44\xed\xd5\x38\xbc\x04\xe9\x41\x62\xd6\x8b\x82\x35\x23\x8e\xb1\x46\xb5\x98\x39\x20\x52\x8a\x1d\xef\x46\xe3\x4f\xd3\x4a\x2f\xc8\x58\xfc\x31\xdf\x24\x64\x68\xdb\x8e\x8c\x1d\x4a\x6c\x0c\x4a\x3f\xda\x71\x40\x8b\x95\xd9\xe1\xcf\xb1\xb7\x70\x27\x90\xbd\x17\xd8\xe3\x48\x69\x75\x1d\x9a\xd1\x97\x59\xa4\x2f\xef\x70\x7d\x39\xcc\xea\xcb\xbd\x6e\x3d\x85\xb9\xd7\xd5\xfc\x7e\x72\xb9\x6c\x27\x4c\x22\x50\xb9\x2e\x9e\x0c\xba\x9d\x1d\x34\xd2\x09\x43\xb1\xd4\x2d\xc3\xac\xa4\x5c\x0e\xe5\x36\x77\x82\x21\x14\x1c\xe0\x81\xd0\xf1\x03\xa7\xd3\x7b\x38\x1c\xb6\xc8\xe3\x21\x72\x25\x87\x6c\x31\xe7\xbb\x64\xbb\x2a\x0a\x57\xe4\x99\xbc\x1b\xb7\xec\x6b\xbb\xad\xc2\x8b\x87\x7e\x8b\xb8\xa2\xba\x4b\x6b\xa3\xe5\xfe\xcf\x7f\x5c\xb7\x5b\xee\xff\x6c\xff\x3f\x1b\x6d\x67\xd0\xe6\x67\xc0\x69\xef\xcc\x09\x87\xe0\xb4\x7f\xf6\x80\x0c\x43\xb1\x85\x46\x43\x5a\x47\xc1\x5f\x5d\xb7\x97\x2a\xf8\x75\xfb\xc1\x28\x51\xe3\x47\x4b\xab\xf1\x5e\x4e\x87\x1f\x9d\x8e\x0c\x3a\xbc\xa7\x14\xf8\x51\xa1\x02\x7f\x7d\x9d\xd7\xd3\x97\x55\xd4\x5d\x02\xf1\x1c\x06\x87\xfc\x40\xe2\xda\x55\xec\x6e\xde\x7f\xd8\x7a\xa8\x26\xc2\x69\x97\x33\x44\xe9\x65\xf9\xf1\xa3\x85\x87\x1b\xb1\xec\x8e\xc9\x06\x12\xa1\xbb\x2d\x75\xf7\x8b\x93\x37\xaf\x9f\xf9\x22\x1a\xbe\xed\xa0\x61\x34\x08\x05\x63\x40\xd0\x8f\x1f\x71\x6a\x5e\xea\xf7\x47\x8f\x52\x5f\xc5\x79\xf2\x56\x2b\x9f\xc4\x37\xe1\xa9\xd4\xa8\xad\x63\x71\xcb\x7b\x38\xc3\x0c\xea\xf7\x9c\xd9\xc3\xe1\x10\xc5\xda\x4a\xab\xed\xe0\x1f\x3f\x48\xc6\x1a\x11\x56\x4b\x0a\xe9\x33\xfe\xa6\xd5\x77\x35\xef\x13\x78\xc5\x9e\xca\x77\x66\x0e\x31\x44\xd5\x76\x32\xaa\x01\x6c\x28\x12\x19\x07\x5c\xf2\x73\xcf\x17\x0c\x4a\xc9\x5b\x0a\x81\x8f\x87\x4a\x71\x1b\x13\x3c\x3b\x9c\x02\x72\xc8\x77\x25\x3c\x0d\xce\x12\xc9\x4f\x84\xb6\x34\xb0\x07\x5c\x4d\x49\x47\xd5\xdc\xab\xa5\xf3\x32\x5d\x65\xe1\x02\x2a\x53\x34\x2f\x40\x54\x4c\x80\x8b\xab\x0f\x80\x0b\x83\x70\x26\xcf\xde\xa1\xfe\xe5\xc7\x8f\x87\x3d\x07\x70\x75\x71\x8c\x26\xa1\xbc\xfe\xb0\x1b\xd5\x01\x44\x42\xc9\x6b\x01\xb1\x6d\xd4\xb5\xb6\x53\xb4\x3c\xc0\xfd\x02\xb9\x92\x73\xbd\xa6\xf3\x3c\x48\xc9\xea\xfa\x39\xd6\x4a\x4b\x5f\x68\xdc\x7a\xd8\x4a\x64\x0a\x3c\xb6\x58\xbb\x6d\x14\x51\x94\xe0\xcc\x95\x6d\x0b\x58\x02\xef\x16\xa0\x16\x88\x85\x3f\xbb\x7d\x2d\xbd\x02\x5c\x99\x8a\xdd\xe0\x0f\x62\xaf\x35\x74\x5a\x60\x78\xfa\xfd\x0b\x5c\xec\xdb\x23\x30\xe7\x82\x8d\x2d\xed\x24\x29\x87\x95\x14\xfa\xaf\xa6\x64\x08\xaf\xaf\x1d\x79\x3b\x38\xc7\x84\xe5\x6e\xd6\xee\x55\xea\x1c\xff\xe8\x8a\x9b\x39\x47\x39\x6b\x3f\x7a\xc4\xb8\x14\x18\x4b\xef\xa0\xed\x50\xf1\x9b\x43\xdb\x0e\xbc\x6e\xd5\xcd\x5b\xc2\x1e\xa4\x9d\x31\x26\x1d\x91\xbc\x71\x4b\x19\xc4\xa7\xd0\xe5\x2f\x3e\x7b\xa0\x52\x7b\x28\x97\x6d\xe4\x27\x23\xb7\x67\x52\xdc\x95\x8e\xd7\x90\x33\xd2\x07\x89\x7d\x09\xcf\xe6\x60\xc4\x5a\x6d\x37\x0c\xd0\xd7\x56\xd1\x29\x64\xdb\x8f\xe1\x75\xbb\x24\xf1\x50\x08\x08\x69\x35\x45\xfd\x94\xdc\x29\x37\xc4\x06\x0c\x2e\x10\xc1\x81\x21\x0b\x7c\x9d\x79\x59\xf6\x9c\x60\x2f\x94\xf4\xf7\x70\x38\x8c\x25\x21\x57\x7b\xfd\xa3\x47\xf1\xcf\xa7\x91\x56\xe5\xa3\xce\x0c\xc9\xda\xb6\x8f\x1e\x3d\xec\xe9\x8f\x9a\xee\x71\x61\xc0\xf7\xb0\xe7\x44\x4e\x1e\x95\x15\xf2\xe3\x07\x78\x12\xfb\xc4\xf6\x15\xd3\x14\x18\xf9\xf1\xc3\x94\xa2\x5e\x62\x75\x96\x55\x9b\x3b\x5e\x48\x54\xe8\xab\x8e\xe4\x19\x96\x99\xf8\x0a\x34\x14\x08\x53\x15\x5e\x93\xa7\x3e\x47\x83\x91\x84\x9d\x4b\x62\xef\x1a\x93\xd8\xbb\x7a\x12\x7b\xf7\x6c\xbf\xeb\xe4\xcd\x40\x75\xf3\xdf\x03\x6a\x73\xdd\x3a\xfb\x74\xdf\xf8\x74\xff\xec\xd1\x23\xfd\x9b\x83\x87\xdf\xaf\x1f\xf0\x31\x86\xc3\x61\xf0\xa4\x85\xdd\x00\x04\x98\xc2\x11\x0e\x3c\x3a\x84\xff\xd5\x83\x03\x07\xbb\x33\x34\x22\xf1\x8f\xba\xc7\xfb\xbf\x7a\x70\x7b\xa3\x07\x07\x6d\x07\xa6\x7e\x97\xee\xf1\x7d\x7b\x36\x93\x03\x3f\x7a\xd4\xca\x8c\x22\x87\xce\x3d\x35\x68\xb7\x55\x40\x66\x20\xa0\x7a\x28\x1e\x16\xe3\xf0\x8f\x3f\x7e\xb4\xc8\xd0\x9e\x51\xbb\x1d\x59\xbb\x62\xf2\x8d\xc8\xa0\x05\x1d\xd2\x7e\x00\x94\x38\xc8\xe5\x2e\x14\xbc\x91\xc4\xd0\x8e\x24\x31\x19\xa6\x6c\xe4\x09\xf8\x14\x9e\x0d\xd1\x29\x3c\x6b\x45\x3e\xf7\x70\x08\x5c\x02\xbd\x70\x04\xf3\x27\x01\x3e\x65\x22\x5b\xfa\x2c\xd2\xca\xe3\x1f\x1e\x40\xc9\x5c\x68\x2b\x70\x98\xe3\xb7\xdb\xd7\x89\xa7\xed\xf4\x4c\x64\x33\x44\x8e\x9f\x48\xd9\x0f\x95\x68\x68\xd9\x31\x1f\xa2\xd2\x29\xa7\x52\x21\x68\x38\x1e\xa3\x2b\x11\x6e\xe8\xb7\x23\x7b\xcb\xe9\xf7\x40\x94\x1d\x59\x40\x40\xa8\xed\xc8\x7b\xe4\x57\xdb\x89\xa6\xbe\xff\xb0\xeb\xcc\xfd\x90\x00\x1f\x7d\xe3\xdb\x92\xd3\xb1\xa3\x1e\x9c\xe1\x80\x4d\xb5\x27\xc5\xf7\x7a\x8f\x7a\x60\xa1\x3d\xe8\x81\x45\xbd\xc7\xa6\x38\xd4\x41\x9d\xda\x8e\x8f\x83\xc9\x71\xf4\x15\x87\xa5\x90\xf7\x12\xc8\x51\x10\x32\xa8\x83\x9e\x1e\x49\x5e\xaf\x37\x96\xa2\xcb\x64\x2c\x9a\x1e\x4b\x5e\xaf\x0b\x97\xef\xa3\xdc\x80\x33\x5a\xf7\xe9\x64\x9b\x24\x4f\xff\x7f\xff\x6f\xea\xf1\x5e\xe1\xe3\xda\xfe\x4d\x9e\x0e\x2a\x1e\x3e\x73\xd2\x71\x47\xb1\xed\xfe\x01\x1d\x82\x47\x8f\x98\x9b\xa0\xe2\x49\x6f\x38\x1c\xc2\x27\xfa\x4f\x32\xe4\x2f\x1a\x93\xeb\xc1\xda\xc5\xf6\x3e\x3f\x2b\x20\x1f\x44\x7f\xeb\x93\xfc\x33\x54\xdd\x1f\x7d\x52\xee\x81\xf4\x73\x3f\x7e\x64\xe0\xc9\x25\x5d\xc3\x38\xe4\xce\x7f\x62\x5b\xf6\xbe\x9d\xc4\xe0\xd1\xb2\x93\x1a\xcd\x3b\x73\x20\x0e\x8f\x5b\x11\x56\xe0\x93\xb8\x62\xc9\xbe\xdd\xde\x3f\x8d\x6d\xde\xdd\xe1\x70\x18\xc9\xd6\x4f\xbe\xab\x5e\x9d\xfb\xd0\xe1\x10\xed\x4b\x96\x7e\xbd\xdf\x37\xde\xc4\x4e\xbb\x67\xf2\x3e\x76\xda\x3b\xbb\xde\x87\x32\xe2\x8e\x7e\x42\x6c\xda\xb2\x4f\xed\xb6\x76\xab\x4b\x95\x21\x9f\xc5\xba\x6b\xa4\x9b\xee\xdb\xed\x68\x94\xe4\xe2\xd9\xf5\x7e\x01\x30\x25\x38\xcd\x27\x9c\x1b\x0d\xb6\xf3\x9b\xab\xe3\x53\x96\x4f\x90\x24\x42\x04\x2e\xfe\xf2\x24\x70\x39\xb8\xad\xb6\xb4\x74\x71\xa8\xda\x2d\xe8\x3c\xec\xb6\x53\xaa\x55\x89\xd4\x1b\xb5\x97\xe2\x5a\x5a\x07\x78\x60\xce\xe0\x6d\x09\xc0\x49\x3e\x3b\x8d\x6d\xc7\x91\xe8\xab\x0e\x3d\x0f\xca\xb0\x4c\xb5\xc8\xff\x08\xfe\xc1\x15\x90\xe2\xd9\x04\xb8\xe3\x0b\xdb\x53\x7e\x0a\x7a\x51\xa3\x0d\x35\x51\xba\x21\x5f\xb7\xce\x95\x84\xee\xdb\x77\xff\x7c\xfd\xec\xe0\xe9\xb3\xf7\xd1\xaa\xea\x3f\xd9\x6f\xb1\x35\x92\xdd\x4a\x2c\x09\xaa\x1d\x17\x3b\x3a\x90\x50\x09\x55\x2c\x76\x3a\xab\x05\xda\x37\x3c\x58\xb7\x22\x83\xa8\x05\xbd\xb8\xa5\x55\xcd\x12\xac\x30\x25\xaa\xca\xfd\x3e\x24\xcf\xb9\x96\x09\xe6\x73\x5f\x19\x4e\xec\xb6\x32\x4d\x49\xe0\x58\xbb\x6c\x6b\xaa\x89\xc4\x7d\xb7\xcb\x83\x64\x33\xfa\xdc\x1a\xd7\xb8\x62\x83\x0a\x75\x3b\x15\x46\x17\xb4\x5d\x14\x8c\xfc\xd0\x83\xb4\x65\x6f\x76\x07\x76\xac\x7e\x3f\x50\x49\x19\x7a\x2b\x72\xb9\x7f\x4d\xdd\xa9\xe4\xcc\xe6\x71\xe6\x88\x6c\xec\xd1\x89\x3a\x78\xdc\xec\xda\x16\x87\xf6\x7e\x9f\xc0\x5c\x06\x4c\x10\x59\x97\xf4\xde\x23\xee\x04\xb2\x97\x0c\xce\xb4\xc4\x9a\xe0\x89\x66\x14\x0d\xda\xfb\xec\xda\xa1\xfa\x68\x7a\xee\x97\x69\x44\x1a\x8d\xe8\x88\x71\x92\xd8\xf8\xa0\xdd\x76\x82\xeb\x52\x45\x57\x43\x24\x9d\x62\xc2\x3a\x61\x88\xbc\xdb\xda\x21\x35\xc2\xa3\xb5\xe0\xe7\xe8\xdc\xed\xd8\xed\xd3\xee\x59\xed\x59\xb1\x85\x0f\xe3\x54\xc0\xbb\x9f\x57\x3a\x03\x4a\x3a\x8e\x6d\x3b\xb6\x60\x88\xec\x25\x05\xcd\x17\xb8\xa0\x2d\xd6\x36\xa8\x31\x41\xca\x72\x17\x9f\x1c\x42\x75\x09\x1e\xdb\xfb\xf6\xe3\x96\x2d\xfb\x28\x27\xf1\x26\xe0\x09\x70\x19\x7e\x8e\xae\xa0\xd7\xea\xb7\x1f\xdb\xf3\x2b\x7b\x1f\xb4\xdb\x8e\xd4\x6c\xd4\xf1\xf2\x8b\xcd\x49\x26\xc9\xee\x6a\xd7\x46\x73\x38\xeb\x80\xc9\x84\xc0\x49\x4e\xab\xbf\xd5\x7d\xa8\x09\x94\x8e\xed\xfe\x2f\x08\x46\x53\xd7\xd6\x8a\x97\x55\x90\x98\x3c\x74\x8d\x38\xd7\x22\x4c\x1e\xb3\x6b\xa7\x5b\x1b\x35\x97\x20\x67\x4b\xaa\xe1\xf2\xbe\x04\xa8\xa4\xc8\x99\x66\x06\x6e\x64\x90\xca\x7b\xb7\xe3\x28\x1b\x7f\x68\x08\x52\x92\x6e\xe8\x47\x8f\x54\x0d\xdb\xec\x85\xd8\x3f\xfd\xc4\x14\xed\x25\xef\x84\xd7\xfb\x26\x5f\xcd\xa3\x47\x25\xaf\x83\xae\xe6\xe0\x18\x0e\x87\xf1\xef\x0f\xa3\xcf\x89\xb1\xf3\x49\x04\xdb\x7e\xfc\x42\x91\x4c\xbc\x04\xa1\x89\x95\x92\x75\xc8\x0d\xdb\xba\x89\x27\x95\x2b\x2d\x62\x8b\x4a\x77\x73\x6c\xbb\xa9\xed\x47\x65\x59\x3f\x2a\x93\x7e\x54\x96\xf1\xa3\x0e\x43\x93\xdd\x29\x3c\xed\x9d\x3d\xe1\x7f\xf6\xfb\x70\xa0\x9c\xa7\x89\x7b\xdb\x56\xb1\x91\xc3\xe1\xd0\x6f\xd1\xf6\xa3\x47\xad\xc8\xda\xc7\x77\x01\x15\x95\x7a\xdb\x71\xb5\x17\x7e\x94\xe3\x1f\x3f\x52\xe6\xc0\xf6\x77\xa6\x1c\x5f\x7b\x69\x37\xa6\x82\x72\xd3\x61\x91\x83\x56\x3e\xf7\xfe\xf8\xe3\x91\x0b\x7c\xbf\x75\x1a\x65\x53\x11\x28\x0c\x24\x12\xdb\x2d\xe8\x50\xe7\x3b\x81\x3e\x06\x1e\x57\xb2\x95\x70\xfa\x4e\x94\xec\xa6\xfb\xdf\xc5\xc2\x88\x0b\xe7\x98\x30\xd9\x89\x01\xf1\xdd\x97\xae\x39\x44\xda\x67\xb1\x27\x37\x02\x70\x53\xf7\xcc\xed\xed\xa7\xe1\xdc\xe3\x2b\xda\x1d\x32\x55\x3e\x68\xb3\x1d\xc1\xdd\x1b\x88\x2b\x71\x05\xa0\xf8\xb1\xc8\xf5\x2b\x06\xb5\x9d\xde\x5e\xe2\x0b\x4c\x0f\xdd\xdb\x74\x50\x64\xa2\x77\x18\x9f\x2b\xa2\xd3\x56\x6f\x33\xba\x3f\x86\x70\x90\x72\x1d\x1a\x92\xbc\x58\xe2\x3a\x64\x51\xb1\xa1\x4d\x67\xcf\xe9\x6d\x3a\xbd\x9d\x54\xc9\xa1\xeb\x84\x86\x7d\xc1\x86\xe9\x14\xcd\xd7\x45\xc9\xbe\x43\x1c\x74\x73\x94\xec\x0f\x91\x89\x92\x11\xa7\x64\x14\x51\x32\x49\x53\x72\x54\xa4\xa8\x9c\x44\x77\x8d\x24\x3a\x88\x96\x7a\xbb\x8c\x44\x15\x21\x72\x91\x9d\xea\x3c\xc9\x15\x35\x61\xdf\x82\x19\xe4\x47\x05\x27\x5b\x1d\xe5\x2d\xea\x40\xc7\x48\xb4\x24\x47\xb3\x7e\x4c\xb3\xdb\x31\xcd\x0e\xd2\x15\xaf\xd2\x80\xef\xa6\x69\x76\x90\xd0\x6c\x5f\xa7\xd9\x7e\x31\xcd\xee\xb6\xf3\x74\x2d\x69\x76\xe0\x10\x03\xcd\xc6\x95\xb0\x62\x08\xfb\x29\x9a\xdd\xad\x47\xb3\x03\x67\xd7\xe9\x0d\x9c\xde\xb6\x99\x66\x0f\x7c\x7f\x65\x52\x55\xe6\x2f\xc7\x77\xc8\xcd\x51\x2a\x1d\x12\x93\x9b\x80\x9c\x76\xcf\x9e\xf0\x3f\x82\x52\xfd\xdb\xa6\x54\xce\x4c\x0f\x7c\xbf\x05\x9b\xf2\x51\x3f\xcf\x47\xe9\xfd\xa2\x49\xff\xd6\x69\x52\x55\xb5\x10\xfe\xb2\x24\x69\xff\xe0\xe8\xc8\x15\x45\xfd\x51\x30\xf9\x3d\x84\x04\xc1\x12\x37\xd7\xd7\x79\x87\x42\x82\x84\x99\x74\xcd\xd2\x70\x3c\xae\x97\x04\xe3\x0f\x53\x17\x44\x08\x53\xf4\x39\x36\xc1\x24\x3f\x19\x83\x67\x94\x59\x32\xa3\x43\xc2\xf6\xbe\x6d\x5f\xab\x68\x89\x94\x1b\x36\x09\x58\x4f\xc5\xf4\x68\x3e\xd8\x4b\xc4\xa6\x38\x64\x2d\xdb\x6e\xab\xd8\xc3\x58\x88\x3e\x3d\x53\xe6\xb9\x04\x28\xf6\xa0\x70\x72\x4b\xea\x8e\x2d\x4d\xb4\x2f\x17\xd7\x09\x9c\xe1\x0b\xd8\x21\xaa\x07\xcd\x8d\x2b\x2f\x51\x30\xe8\x03\xe6\x72\x15\x25\x75\x78\xe4\xef\x04\x43\xe6\x7e\x41\x81\xf7\x40\x45\x7a\x8a\x60\x01\xe8\xf0\x9f\xf6\xc1\xb5\xac\xce\x25\x2f\x88\x96\x06\xdf\x91\xb7\xcf\x64\xd6\xac\xa8\x86\xc6\xe5\xe2\x7d\x66\x3e\xbe\x1c\xa2\xbd\x9a\xee\x07\xe5\x8a\xcf\xa9\x50\x4a\xcf\x86\xf2\x3d\xf6\x14\xd0\x37\x20\x58\x88\x0a\x23\x02\xc0\x27\xa7\x67\x32\x15\x84\x6b\x95\xdf\x25\xc6\xa1\x1b\x06\xf2\x80\x14\x92\x1e\x2b\x5b\x06\xa1\xac\x4f\x42\xe4\xc1\x0d\xe5\xef\xee\xcc\x20\x03\xfc\x6d\x37\x19\x0a\x94\xfc\x10\xb9\xe5\xde\x72\xb8\x6c\xc7\x07\xc1\x64\xdf\x9e\x60\xfe\xaf\xed\x78\x90\x8e\xd4\x25\x0b\x89\x88\x10\x1f\x5e\xa1\x73\x1f\x3a\x96\xe8\xbe\x34\x27\x88\xc2\xce\x84\x00\x0f\xc6\x76\x4a\x3a\x9a\x42\x0e\x01\xb1\x3c\x48\xd1\x24\x90\x7d\xdb\x20\xa0\xc8\x5f\x58\x28\x60\x70\x42\x00\x83\xfc\x13\x4e\x9a\xab\x5d\x62\xf2\x65\xec\xe3\x4b\xea\x5a\xf2\x6d\x23\x10\x58\x24\x0c\x2c\x60\x79\xe8\x02\x12\x0a\xc5\x2d\x1c\xab\x16\x1e\x5b\xc2\xf5\xc4\xb9\xcd\x05\x1a\x41\xc7\x3a\xe7\x3b\xcd\xb1\x46\x38\x60\x00\x05\x50\xb6\x00\x04\x81\x27\xa2\x6b\x33\xbf\x26\x56\x48\xea\xda\x8e\x68\x8e\x11\x77\xd8\xbd\xbc\xbc\x74\xc5\xfa\xcc\x09\x16\x18\x46\x78\xc3\x8e\x1d\x56\x27\x90\x10\x30\xc6\x64\x66\xc6\x52\x7c\x59\x62\x8a\x61\xec\x8b\x36\x84\xe7\x21\xf2\x3d\x14\x4c\x1c\x6b\x34\x05\xc1\x44\x7c\xe2\xb0\x8d\xf0\xec\x1c\x05\x7c\xf2\x28\x18\x13\x90\x84\x04\x53\x30\x86\xfe\x42\xdc\x03\xc7\x63\x34\x42\x30\x60\xfe\xc2\x08\x2c\x8b\xde\x99\x86\xf4\xa3\xf4\x60\x98\xa0\x3c\x48\x00\x93\x1d\xca\xa8\xd6\x1b\x8b\xaf\xea\x88\x2c\xc4\xd9\x29\x23\x80\x62\x14\x73\x68\xe6\x04\x5d\x20\x1f\x4e\x60\xdc\x9f\x5a\xeb\x15\x66\x80\xee\x82\x83\x61\x44\xa5\xc8\x3b\xf7\xcd\x10\xca\x6b\x12\x89\x1e\xe2\x6c\xf9\x3c\x14\x0d\xb3\xa7\x68\x32\xe5\x78\xb9\x00\xc8\x07\x82\x06\x39\x50\x7c\xa7\x58\xb2\x17\x98\x05\x2e\x45\x73\x65\xec\x87\x52\x3a\xc2\x71\x79\x25\x89\x70\x19\xce\x05\x53\x44\x10\xf5\x35\xf6\x16\x01\x98\xa1\x91\xa3\xbf\x33\xb3\x32\xc6\x25\x18\x09\x70\xb3\xf8\x9f\x10\x10\xc4\x2b\x40\xc2\xf3\x45\x34\x3b\x75\xa9\x80\x46\xe4\x8c\x22\x00\xf8\x0f\xaa\xe9\xb3\xe8\x5c\xa6\x99\x39\xcc\xb4\x7b\x21\x07\x0f\xe7\xfc\x94\xd0\xe0\x39\x52\xd5\x25\x4c\xe8\x96\xd7\x32\xf0\x88\xa4\x35\x41\x9a\x9e\x6c\xb6\xe8\x5b\x33\x30\x9a\xa2\x00\x5a\xa2\x7b\x8c\xec\x10\x3e\x0b\x7d\x86\xe6\x3e\xb4\xe6\x3e\x60\xa2\x3b\x84\x35\x26\x78\xc6\xc9\x06\x05\x13\x9f\xaf\x44\x48\x46\x30\x46\xbc\x2c\xdd\x66\x02\x7c\x2e\x80\x90\x48\x3c\x2b\x66\x96\x2a\x6f\xf4\xb6\x8c\x9a\x22\xb7\x24\x91\x3f\x55\x62\x63\x2b\x6d\xa5\xa6\x90\x9d\x48\xb0\xf4\xb8\xf8\xa0\x65\xab\x5f\x39\xbb\xd2\x2d\x74\x33\x6a\xc1\xab\x11\x84\x1e\x14\x95\x1d\x1c\x58\x7e\x4c\x8b\x66\x7f\x19\x81\xca\xd1\xc2\x98\xa4\xd8\xd2\x99\x42\x7f\x0e\x09\xcd\x3e\xb4\xb2\xfb\xa3\xf0\x81\xd8\x4d\xfa\x3d\x09\x9b\xe4\x62\x76\xc6\x29\x10\x0b\xa2\xea\x7e\x51\xf0\xae\x68\xae\xd2\x00\x78\x4f\xd6\xb6\x68\x65\x59\xcb\xfe\x04\x10\x67\x0e\xe9\x55\x2d\x5f\x4c\x83\xa1\x32\x93\xc0\xc8\x85\x4b\x55\xc3\xac\xf4\x29\x36\xf4\xf0\x48\xa8\x79\xae\xc8\x94\x3d\x86\x32\x5e\xac\xf5\x17\x2e\x37\x9c\xf2\x0d\x3f\xb4\xff\xf2\x18\x3e\xfe\x8b\x7d\xf6\x97\x36\x97\x89\x0e\x98\xe2\x67\xad\xb8\xf3\x5d\xdb\x09\x86\xdf\xa3\xd8\x36\x4d\x96\x0d\x03\x48\x47\x60\x2e\xcb\x74\x45\x5a\xa4\x19\xf1\x41\x31\xe2\x03\x25\xfa\x82\x7c\x92\xd6\x5f\x44\xe1\x3b\xd1\x61\x95\x40\x10\xf1\x64\xc9\x36\x38\xfc\x16\x03\x13\xd9\x74\x9a\x4f\xc4\x52\x13\x71\xff\x22\xb0\x4a\x64\x65\xb9\x13\x48\x19\xfd\xf1\x83\xc0\xaf\x21\x22\x3a\x92\xc1\x7c\x6e\xb7\x73\x4d\x1b\x32\xfa\x0b\x27\x52\x19\xfb\x77\x3c\x82\x01\x20\x08\xef\xdb\x74\x06\x7c\xff\x50\xca\x2f\xb6\xba\xfa\x09\xb1\x69\xdc\x7a\x42\x7b\x8a\xff\x2e\x3b\xf9\xa7\x7f\x7b\x0f\x27\x42\xe3\xe4\x18\x78\xf0\xff\x07\x00\x00\xff\xff\x5f\xcc\xdc\x6a\xae\x61\x09\x00") +var _distAssetsNomadUiF6c608b5a74057913290b94581fa3648Css = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xfd\xdd\x8e\x2b\xbb\x92\x20\x06\xbf\x4a\xce\x3e\xd8\xc0\xaa\xb3\x24\x9d\xd4\x6f\x55\x49\x38\x1b\x3d\x5f\x03\xf3\x79\x80\x69\x1b\x70\x4f\x03\xd3\x38\x38\x17\x29\x25\x55\xca\xde\xa9\x4c\x75\x66\x6a\x55\xad\xad\x29\xc3\x57\x63\xf8\xd6\x8f\xe0\x6b\xdf\xfb\xc2\x77\x7e\x94\x79\x12\x23\xf9\x97\x0c\x32\x82\x64\xaa\x6a\x9d\xdd\x5d\xbd\xcf\xaa\x4a\xc6\x1f\xc9\x60\x30\x48\x06\x83\x7f\x77\x38\x65\x4d\xcb\xba\xe4\xa7\x7f\xfa\xcf\xff\x61\xfa\xf4\xd3\x6e\xb6\xbf\x9e\x2f\xac\x99\x36\xc5\xcb\xa9\x9b\xcc\xaa\xeb\x79\xcf\x9a\xdb\x39\x6b\x5e\x8a\x4a\x7c\xdc\xce\x67\xeb\x86\x9d\xdf\xf7\x75\xfe\x7d\x72\xa8\x73\x76\x3b\xd6\x55\x37\x7d\x65\xbc\x70\x95\xa6\xef\x59\xd3\x15\x87\x92\x4d\xb2\xb6\xc8\xd9\xe4\x58\xbc\x5c\x1b\x36\x39\xd6\x75\xc7\x9a\xc9\x89\x65\x79\xff\xcf\x4b\x53\x5f\x2f\x93\x53\x33\x69\xd9\xa1\x2b\xea\xea\x96\x17\xed\xa5\xcc\xbe\x6f\xf7\x65\x7d\xf8\xf5\x3d\xbb\xe6\x45\x3d\x61\xe7\x3d\xcb\x27\xc5\xf9\x65\x52\xef\xff\x85\x1d\xba\xc9\xb7\x22\x67\xf5\xed\x9c\xbd\x4d\x5f\x8b\xbc\x3b\x6d\xe7\x69\xfa\xf3\x7b\x2f\xc3\xe4\xd2\xb0\xdb\x3e\x3b\xfc\xda\xd3\xad\xf2\xe9\xa1\x2e\xeb\x66\xfb\x87\xe3\xba\xff\x11\xa2\xf6\x10\xf2\x73\x9a\xf5\x3f\xef\x59\xd2\x76\x4d\x5d\xbd\xf4\x45\x09\xaf\x89\x28\x3f\x5c\x9b\x86\x55\xdd\xdf\xf7\x7f\xbc\x4b\x90\x2e\xdb\x97\x2c\xe9\x4e\x8a\xc4\x72\xd3\xff\xbc\xcf\xf6\xd7\xae\xab\xab\x49\x76\x3b\x5c\x9b\xb6\x6e\xb6\x97\xba\xa8\x3a\xd6\xa8\x82\x76\x76\xca\xda\x69\x96\xe7\x75\xd5\x26\xf2\xdb\xac\x68\xa7\xa7\xfa\x1b\x6b\x58\x3e\xf1\x80\x6d\x39\xcc\x64\x76\x2c\x58\x99\x83\xf2\x43\x5d\x75\x4d\x5d\xa2\xf4\x82\xd0\x11\x64\x8b\xea\x72\xed\x62\xa9\x72\xe0\x08\xa2\x2d\x2b\xd9\xa1\x4b\xc4\x3f\xb1\xc4\x01\x92\x60\x72\xfb\x6d\x5a\x54\x39\x7b\xdb\x2e\xde\x39\x1c\xab\xba\xe4\xd2\x08\x05\x78\xad\x9b\x7c\xfa\xda\x64\x97\x6d\x55\x37\xe7\xac\x7c\x37\x5a\xa8\xac\xb3\xbc\xa8\x5e\xb6\xd9\xb1\x57\x43\xc5\xc2\x2c\x51\x45\xfd\xdf\xfd\xbf\x83\xa8\x10\xe2\x96\x55\xc5\x39\xeb\x95\x76\xdb\x5e\x8a\xea\xdf\x73\x8d\x4b\x66\xeb\x36\x29\xaa\x63\x51\x15\x1d\x4b\xca\xa2\x62\x59\x63\xb2\xef\xd8\x5b\x3f\x9c\xea\xae\x38\x16\x07\x8e\x9c\x64\xdb\xaa\xee\xbe\x48\x98\x87\x49\x36\xeb\xb2\x17\x59\xc7\x1e\x7a\x9a\xb3\x43\xdd\x08\x3e\xd7\x2a\x67\x4d\x4f\x54\xa8\x72\xff\x3f\xbf\xcc\xfa\xd1\xd1\x4c\xbf\x15\xec\x75\x72\xea\xce\xe5\xed\x24\x46\x60\x3f\x26\x76\xc6\xf0\x50\x23\xba\x64\xc7\x4e\x0d\xe4\xfe\x77\x35\x8e\x7b\xe9\xb2\xb6\xad\x0f\x45\xd6\x15\xdf\x98\x02\xe9\xea\xcb\x76\x3a\x7b\x5c\xb3\xf3\xfb\x9f\xfe\xf8\xef\x92\xfd\xb5\x3c\x67\xb3\xa2\x4e\xbe\xa5\xb3\xcd\x6c\x9e\xfc\xd7\xe4\x1f\xfe\xe3\x7f\x4e\xfe\x53\x71\x60\x55\xcb\x92\xff\x9a\xbc\x14\xdd\xe9\xba\x9f\x1d\xea\xf3\x9f\xfe\xe5\xa5\x3b\x9d\xdb\x3f\x71\x8c\xe4\x8f\x7f\xfa\xbb\x5f\xd9\xf7\x63\x93\x9d\x59\x9b\x0c\xcd\x75\x3b\x36\xf5\xf9\xd6\x35\x59\xd5\x1e\xeb\xe6\xbc\x6d\xea\x2e\xeb\xd8\x97\xf4\xe1\xbd\xab\xdd\xcf\xcb\xf5\x73\xce\x5e\x1e\xde\xb9\x24\xe7\xa2\x2a\x1a\xd6\xb2\x6e\x76\x68\xdb\x5e\x9c\x74\xb6\x88\x10\x07\xa2\xfd\xf1\x4f\xdc\xce\xfc\xeb\xb5\xee\x18\x6f\xce\x49\x9e\x4f\xf2\x72\x92\x77\x13\xae\x8e\x2d\xeb\x94\xe1\x3a\xcd\x27\xa7\xc5\xe4\xb4\x9c\x9c\x56\x93\xd3\x7a\x72\xda\xf4\x56\xab\x6f\xf0\x49\xc1\xab\x35\x29\xd9\x0b\xab\xf2\x49\x59\x4c\xea\x72\x72\xe9\x15\x71\xd2\xf7\x5f\xd6\xb0\x6c\x72\x2d\x65\x7b\x6e\xd3\xdd\x25\xcb\xb9\x16\xa5\xef\x0e\x49\x61\x42\xdb\xe2\x37\x26\xba\xcf\xb6\xa8\xd7\xf2\x56\x16\x6d\x37\x6d\xbb\xef\x25\xdb\x56\x75\xaf\x08\xc2\xf0\xf0\xe1\x37\x11\xaa\xaa\xd9\x6a\x9e\xef\x5c\x31\xf6\xf5\x5b\x4f\xbb\xe7\xbd\xaf\x9b\x9c\x35\xd3\x7d\xfd\xb6\x43\xac\xe5\xf1\xb8\x33\x04\x59\x5d\xde\x76\xd3\x73\xfd\xdb\xb4\x6e\xdf\xa6\xe2\xfb\xb9\xae\xbb\x53\x4f\xe7\xa5\xc9\xbe\xb7\x87\xac\x64\xbb\xe9\x2b\xdb\xff\x5a\x74\x36\x40\x56\x75\x45\x56\x16\x59\xcb\xf2\xdd\xb9\xa8\xa4\xbd\x5e\xa6\xe9\xe5\x6d\xd7\xab\xf8\xb1\xac\x5f\xa7\x6f\xdb\x53\x91\xe7\xac\x1a\xbe\x7c\xdf\xb6\x87\xa6\x2e\xcb\x1d\x1f\x01\x0d\xeb\xf5\xbe\x27\x57\x5f\xba\xe2\x5c\xfc\xc6\xfe\x13\x7b\x29\xf6\x45\x59\x74\xdf\x05\x44\x2f\xe9\x34\xcb\xff\xe5\xda\x0a\xc5\x7f\xff\xe3\x44\x0e\xe3\xed\x9e\x1d\xeb\x7e\x52\x18\x2a\x5f\x54\x27\xd6\x14\xdd\xbb\x1c\x39\xfb\xac\x2d\x0e\xd3\xbc\xa9\x2f\x79\xfd\x5a\x4d\xd0\xaf\x53\x69\x62\xfc\xa5\xc9\x1f\x55\xf9\xa5\x7e\x65\xcd\x54\x74\x87\x06\x4b\xfe\x88\x77\xc1\xbb\x50\xa0\x9b\xf8\xb2\x4d\xdf\xf9\x24\x23\xff\xec\x3b\xa5\xcc\x2e\x2d\xdb\xaa\x5f\x76\xb2\xa0\xbd\x64\x07\xa1\x47\x5d\x3e\xe9\x4e\x37\xad\x57\xa2\x49\xb2\xb2\x78\xa9\xb6\xfd\x08\x97\xc6\xc2\xa7\x28\xbc\xd7\x8e\xd9\xb9\x28\xbf\x6f\xa7\xd9\xe5\x52\xb2\x69\xfb\xbd\xed\xd8\x79\xf2\xff\x2b\x8b\xea\xd7\x7f\xc8\x0e\xff\xc8\xff\xfc\x0f\x75\xd5\x4d\x7e\xfa\x47\xf6\x52\xb3\xe4\x9f\xfe\xe3\x4f\x93\xff\xb9\xde\xd7\x5d\x3d\xf9\x9f\xde\xbe\xbf\xb0\x6a\xfa\x8f\x59\xd5\x4e\xfe\x69\x7f\xad\xba\xeb\xe4\xef\xb3\xaa\x27\x5d\x96\x93\x9f\xfe\x07\x56\x7e\x63\x5d\x71\xc8\x92\xff\x91\x5d\xd9\x4f\x93\x36\xab\xda\x69\xcb\x9a\xe2\x38\xcc\xd9\x94\x82\x65\xd7\xae\x26\x75\xab\x2f\x33\x25\x3f\xd7\x55\xdd\xb7\x8a\x30\x8f\xe6\x60\x6a\xd8\x79\xd7\xdb\xcd\xa9\x32\x8e\xb3\xf5\x7b\x3f\x40\xdb\x73\x56\x96\x06\xe0\xec\x89\x5b\xba\x53\x83\x38\x11\xf9\xbe\xff\x91\xad\xcf\x07\xdf\x4e\x51\xbb\xbc\xed\xe4\x50\x13\xc6\x34\x49\xdf\x8b\xf3\x8b\xb2\xc4\xbd\x9c\xef\xbc\xdd\xff\xd2\x7d\xbf\xb0\x3f\x1f\x4e\xec\xf0\xeb\xbe\x7e\xfb\xeb\xc4\xf8\xd8\x64\x79\x51\xff\xf5\xf6\x8d\xf5\x4e\x53\x56\xca\xee\xdb\x67\x2d\xe3\xf6\xbe\xbd\x64\x95\x94\x93\x8f\x7d\xa9\xc3\xc0\x42\x28\xbd\x16\xae\x0a\x70\xc7\x1e\xd3\xf4\x9d\x37\xb3\x6c\x49\x3d\xd0\xc4\x30\xeb\x5b\xb3\xab\xaf\x87\x93\x39\x26\x79\xf3\x2a\xa5\x9a\xcf\x16\xbc\x62\xa2\x7e\xbb\xd7\x53\xd1\x31\xae\x81\x6c\x7b\x69\xd8\xbb\xf6\x9c\x9c\x66\xe3\x46\xfc\x92\xf5\x8e\x94\x69\x54\xd8\xd9\xb0\x83\xb3\x7d\xfd\xa6\x5c\x20\xcc\x7b\x3b\x1e\xdf\xa5\xdf\x95\x0f\x0e\x98\xa5\xe4\x3b\xab\xe5\xba\xfa\xc2\xa7\xb4\x43\xc9\xb2\xe6\x58\xbc\xc9\x39\x9b\xff\xb9\xdd\xd7\xdd\x69\x27\x07\xed\xf6\xa7\xe4\xa7\x9d\xf2\x3a\x39\x75\x8e\x77\xb9\x96\x25\xcb\xc5\x6c\x79\x2c\xeb\xac\xe3\x5c\xfe\x5d\x71\xbe\xd4\x4d\x97\x55\x9d\x09\xc4\xfd\x61\x09\xc5\x7f\xb7\xc0\x0e\x65\x71\xb9\xb0\xfc\xa6\x1a\x57\x9a\x3b\x13\xca\x74\x61\x66\xe7\x3a\xcf\xca\xe9\x21\x6b\xf2\x29\x57\xe4\x50\xaf\x71\x26\x7d\x61\x99\x7d\xbf\xed\xeb\xae\xab\xcf\xdb\x74\xc7\x27\xf7\x74\x77\xa9\xdb\x82\x3b\x0f\xd9\xbe\xad\xcb\x6b\xc7\x76\xc2\x7d\x4f\x77\xfd\xd4\x9e\x72\x5c\x6e\x3e\xe7\xc6\x38\x58\x36\xec\x6c\x55\x82\xc3\x2c\x0c\x98\x05\x57\x05\x0c\x6a\x69\x42\x11\x30\x2b\x73\x78\xce\x28\x7e\x6b\x00\x35\xa7\x18\x6e\xac\xb1\x8e\xc1\x3c\x82\x61\x6e\x51\xfa\xbb\x33\xcb\x8b\x2c\x69\x0f\x0d\x63\x55\x92\x55\x79\xf2\x65\x58\x5d\x3c\x6e\x9e\x2e\x6f\x0f\xb7\xa1\xa1\xa6\xe7\x7a\x5f\x94\x2c\xa6\xbd\x5c\x50\x4f\xb3\x21\xc0\x54\xeb\xb9\xa0\x9e\x46\xc4\x80\xe9\xb6\x44\xa0\xa9\x26\x75\x41\x9d\x96\xe5\x0e\x3d\x1f\xab\x07\xd6\xaf\x88\x58\xae\x90\x8c\x01\x2c\x8a\x0c\x2c\xb4\x43\xb4\xfb\xf0\xb8\x79\xbe\xbc\x3d\x4c\x2e\x4d\x51\x75\x66\xb7\xf0\xd1\xdb\x45\x75\x8b\x03\xea\xeb\x16\x17\x98\xec\x16\x07\xd4\xd7\x2d\x08\xb0\xa7\x5b\x5c\x68\xb2\x5b\x1c\xd0\x98\x6e\x91\x48\xa3\xbb\xc5\x58\x85\x2f\x96\xd6\x40\xe1\xe6\x29\xae\x43\x2c\x48\x6f\x7f\xd8\xb0\x74\x77\x58\x90\xde\xde\x70\x60\x7d\x9d\x61\x03\xd3\x7d\x61\x41\x46\x75\x05\xc7\xb9\x7f\x80\xcc\xd3\xc5\xca\xea\x89\x9c\xb5\xbf\x76\xf5\x25\xaa\x2f\x5c\x58\x5f\x6f\x20\xd0\x64\x7f\xb8\xb0\xbe\x1e\xc1\xa0\x3d\x7d\x82\x80\x93\xbd\xe2\xc2\xc6\xf4\x8b\xc2\xf2\xf6\x8c\x8b\xe7\x85\x8f\xb0\x74\xe4\x40\xa3\x06\xf1\xb4\xae\xca\xef\x1f\xd7\x1f\x87\xef\x62\xbe\x26\xf8\xca\x96\xf9\x30\xe3\xc5\x7c\x63\x29\xee\x6b\x91\x33\x01\x1c\xa5\xbb\x28\xb8\x4f\x7d\x71\x04\x52\x83\x51\x70\x9f\x12\x13\x08\x1e\x3d\xc6\x31\x48\x55\x46\xc1\x63\xb4\xd9\x40\xfc\x70\x8f\x39\xaa\xb2\x4a\x1f\x09\x55\x19\xd8\x7e\x58\x5b\x56\xa9\xed\x99\x1d\xaf\x65\x79\xca\xa3\x34\xc5\x01\xf5\x69\x89\x0b\x4c\x6a\x88\x03\xea\xd3\x0e\x04\xd8\xa3\x19\x2e\x34\xa9\x15\x0e\x68\x8c\x46\x48\x24\x5f\x8f\x0c\x58\xff\x72\x6d\xbb\xe2\x58\xa0\x68\xa2\xec\x3b\x6e\x16\x35\xa2\x1f\x23\xca\x27\x47\xa4\x71\xdd\x4b\x44\x9a\x11\xfe\x25\xc2\xc2\x75\x95\xee\x63\x11\x36\xec\x36\x4f\x67\xc8\x44\x32\x8e\x63\x61\xbb\x1d\x63\x6b\xa5\xfd\x0e\x84\x38\x32\x77\xde\x49\x3e\x3c\x2d\x39\x5c\xef\x6d\x36\x77\x62\x42\x78\xe0\x76\xf4\x4e\x0e\x61\x43\x8a\x31\x8e\xa8\xdf\x40\xa0\x64\xc7\xce\x87\x6b\x6d\x74\x58\x98\x1e\xc8\x71\x23\x96\x8b\xe1\x0e\x56\x9b\xfb\x3d\x23\x95\x93\x76\x07\xe9\x1d\xa4\xc3\xc3\xc7\xe0\x15\x6c\xc9\x91\x23\x53\x90\xb6\x07\xe5\xa8\x5a\xb8\x23\x92\x13\x45\x06\xe3\x3d\x64\xc3\x23\xd1\xe4\x76\x57\xf3\x78\x46\xa0\xa5\xc7\xf7\x53\x56\x6e\x04\xa4\xec\xce\x6a\xf6\x0e\xa0\x86\xe7\x3b\x6a\x08\x82\xbd\x19\x68\xa3\xf8\x60\xf9\xc6\x61\x76\x29\xba\xac\x2c\x7e\x53\x73\xe5\x70\x24\x36\x14\x59\x38\x65\xfd\xca\x9a\x43\xd6\x32\x1b\x43\x17\x58\x08\xd7\xcb\x05\x47\xd0\x05\x26\x42\x5f\x92\xcc\xf8\xb1\xfd\xf4\xc4\xf8\x79\xe8\x64\xa6\x7f\x39\xb3\xea\x3a\x2d\xb3\x3d\x2b\x27\xfc\x18\xb3\xaa\xbb\x2f\xfb\x3a\xff\xfe\x40\xd2\x36\x9a\x84\x6f\x2a\xdf\x86\x4d\x5f\x83\x6d\x66\x41\x6d\x8f\xf5\xe1\xda\x4e\x9c\xcf\xe2\xd8\x54\x92\x60\x9b\xfe\x07\xed\xb0\x7d\x99\x1d\x7e\x85\x61\x00\x38\x37\x0e\xe8\x72\x13\x9f\x01\xb7\x34\x4d\x71\x6b\xcb\x3b\x1a\x04\x22\xe0\xac\x38\xa0\xcb\x4a\x7c\x06\xac\xc4\x49\x04\xca\x2d\xcf\x1a\x5d\xaf\xc5\x72\x85\x73\xea\x81\x5c\x46\xfc\x2b\xe0\x33\x9f\xcf\xb3\xc5\x02\xe5\x73\x69\x8a\x73\xd6\x7c\xd7\xac\xd6\xfb\xec\x69\x8e\x73\x93\xa0\x2e\x43\x55\x00\x79\xe6\x4f\xc7\xcd\x92\x68\xc9\x4a\xd7\x6d\xbe\xde\x2c\x29\x0d\xe9\xe1\xb0\x76\xac\x9c\x1e\x5b\xed\xd9\x1c\x65\x55\x54\xc7\x3a\x86\x55\x0f\xe7\xb2\xe2\x5f\x63\x59\xb5\xd7\xc3\x81\xb5\xad\x6e\x49\xb6\x4f\x97\xcf\x38\x37\x09\xea\x32\x54\x05\x80\xe7\x62\xf9\xf4\xb4\x38\xa0\x3c\x5f\xb3\xa6\x2a\xaa\x17\xad\x95\xd9\x13\x5b\x2c\x89\xe1\x26\x40\x91\x01\x27\x0b\xe0\x90\x5b\x3f\xae\xd2\x35\xa1\x99\xd5\xcb\x00\x78\x78\x5a\xa5\xb4\x7a\xf6\x90\x98\x82\xf2\xef\x80\x61\x96\x2e\x97\x8b\x67\x7a\x8c\x4f\xf7\x85\x6e\xda\xf9\xa2\xff\xf1\xc0\x76\x46\xe3\xad\xfa\x1f\x14\xf6\xa5\x61\xdf\xf9\x60\x19\xa0\x45\x14\x90\x1f\x5a\xc1\xae\xb2\xfe\x87\x84\x55\x60\x8f\x59\xff\x43\x93\x04\x66\x65\xbf\xee\x7f\x02\xc0\x51\xf6\x43\x1c\xec\x19\xb0\x8e\xc5\xb2\x61\x8d\x06\x3e\x66\xfd\x0f\x0e\xcb\xcf\x21\xa5\xd4\xe6\xc9\xe4\x92\x30\x9b\x12\x41\x04\xf0\xd8\xa1\x65\x3e\x8c\x96\x9d\x8b\x7d\x5d\xe6\x00\x67\xe3\xc7\x71\xe0\x1f\x21\x7c\xd1\x4e\x79\x9c\x08\x8c\x4e\xbb\xdb\xf3\x15\xee\x82\xeb\xfa\x62\x2e\x00\xe7\xa4\x60\x29\xf6\x77\x39\xc9\x42\x0a\xd7\x4b\xa6\xa5\x90\xb0\x1f\x91\x22\xec\xf4\x9a\x62\x39\x1e\x63\x48\x36\x81\x30\x4a\xc0\xb0\x28\xb6\x03\xee\x11\x82\x83\xde\xd7\x3e\xae\xa7\x2e\xd8\x23\xae\x3a\x2d\x80\x02\xfe\x90\x08\x61\xaf\x1e\x48\x36\xa2\x93\x00\xc6\x9d\x32\x3a\xcb\x00\x21\x0c\xbe\x0e\xa0\x45\x31\xe0\x3f\x24\x48\x78\xbd\x6e\xcb\x37\xa2\xbd\x6c\xa4\x3b\x25\x35\xb6\x49\x05\x5d\xb9\x52\xa1\xc8\xf5\x80\xc7\x92\xbd\xd9\x70\xfd\x37\xb0\x9a\x91\x70\x14\x40\xec\xa9\x3a\xe7\x65\x99\x38\x9b\xd7\xb8\x03\x61\x4e\xd1\x32\x57\x77\x50\xf4\x9d\x70\x1a\x2c\x60\xe7\xc4\xf0\xf1\x50\x04\x26\x64\x94\xcc\xe6\xa9\x1f\xa7\x65\x5b\x83\x7b\xa8\x91\xc6\xc0\x62\x32\xbe\x0d\xd0\x43\x1f\x4e\x12\x19\x9b\xf7\x10\x24\x87\xa6\xcb\xc7\x2b\x7d\x0f\x5f\x54\x3c\x7c\x8c\xc2\x10\xc5\xf6\xd8\x10\x5f\x69\xa0\xd8\xf1\x21\x99\x5b\x23\xc4\xe5\x39\x6e\x8c\x48\xaa\xd6\x28\xb9\x8b\xaa\x4f\xab\x01\x9b\x50\xab\x45\x8f\x15\x45\x15\x8c\x96\x91\xb2\x9b\xe3\x45\xd2\xb3\x47\xcc\x7d\x14\x7d\x63\x06\x32\xba\xa7\x3d\xd0\x71\xe3\xe8\xe7\xdd\x44\x8d\xc9\x42\x12\xb5\x66\x01\x87\xa0\x01\x8a\x4e\x2f\x66\x19\x3e\x44\x2c\xef\x9a\x40\x18\x39\x5c\x50\xcf\x99\x92\xe5\xae\xa1\x83\x7a\xc5\x1f\xe0\x10\xa1\xf0\xb4\xb3\x3b\x86\x6f\x04\x07\x64\x60\x8d\xac\x13\x32\xbc\x70\x27\xf5\x23\xd4\x23\x86\x9a\xc7\xf5\xbc\x8f\xb3\x3b\xec\x48\x97\xf2\x23\x0c\x7c\xd3\x17\xc1\x37\xaa\x76\xe6\xc8\xf6\xcd\x82\x06\x0c\x31\x6a\x81\xef\x87\x83\x8f\x1c\xb3\x98\x27\x48\xc8\x71\xd7\x88\xc5\xfc\xc2\xfb\xe9\x47\x8c\x26\xd2\x4b\x1c\xc1\x35\x4c\x1f\x1b\xac\x77\xbb\x8e\x26\x65\x62\xa8\x7e\xb6\x23\x89\xb0\xbc\xbb\xb5\x7c\xe3\x94\xf2\x2e\xef\x22\x8f\x4c\x94\xc8\x9a\x09\x27\xcd\x2f\xbe\xf1\x20\x70\x1b\xbe\xaa\x5d\x3f\x52\x40\x52\x20\x42\x80\x6f\x45\x5b\xec\x4b\x76\xe3\xff\xf2\x9b\x31\x6e\x94\x79\xec\x60\x94\x92\x59\xe3\xd0\xc7\x56\xc1\xfa\xb8\x8f\x1c\xb1\x52\x08\x6b\xb0\x7a\x85\x90\xb0\x1f\x15\xc2\x37\xec\x80\x54\x50\x47\x23\x44\x13\x08\xa3\xe5\xf3\x4a\x02\xc6\xbe\x5f\x06\x0e\x7a\x7f\xeb\x98\x46\x42\x72\xb7\xed\x83\x97\xbf\x02\xfe\xb0\x04\x3e\x53\x02\x05\x1b\xd1\x43\x00\xe3\x03\x22\x1a\x56\x47\xca\x82\x18\x1c\xaf\x24\x06\xfc\x87\xe5\xf0\x39\x11\x8e\x78\x23\x5a\xcb\x46\xf2\x0a\xda\xa3\x8a\xfb\x51\x25\x6b\x5b\x7d\x2b\xd1\x22\x2e\xef\x03\x71\x10\x7d\x37\xc8\x82\x69\xb2\xbc\xb8\xb6\x1c\x44\xde\x82\x13\x5f\x1c\xc0\xf6\x94\xe5\xf5\xab\x04\x7c\x93\x7f\x62\x55\xba\x56\xe2\x2e\x1c\xbf\x72\xa7\x2e\xda\xf0\x91\x32\x3d\x64\x65\x59\x5f\x3b\x71\xd5\x4b\x15\x5d\x5b\x7d\xb1\x4f\x16\x9c\xeb\xdf\xb0\xaf\xad\xfb\xd1\xfe\xa0\xaf\x8d\xcf\x8e\x85\xc1\xfd\x23\x2c\xe8\x1a\xf0\x5b\x56\x56\xab\xad\x2f\x6f\x3b\xa3\x79\xd2\x64\x71\x79\x4b\x96\x97\xb7\xa4\x79\xd9\x67\x5f\xe6\xe9\x44\xfc\xff\x6c\xfe\x30\x49\x93\xfe\x67\x8e\x95\xed\xc0\x39\xfa\x0e\xec\x2a\xda\x17\xc8\xb8\x14\x3c\x2c\x60\x5b\x66\x6d\x37\x3d\x9c\x8a\x32\x7f\x50\x97\x8d\xe5\xdd\x25\x79\x23\x39\xe3\xb0\xea\x18\xb0\xff\x5d\x1c\xfd\x8d\x96\x58\x1e\xe1\x4a\x82\xd9\x81\xdf\x6f\x36\xa8\x14\x55\xcb\x3a\x09\xbb\x70\x69\x2d\x30\x5a\xea\xba\x1a\xef\x9b\xec\x72\x61\x59\x93\x55\x07\x06\x7b\xc1\xfe\xce\xf7\x7b\xa7\x45\xc7\xce\xad\x8c\xac\xdc\xc1\x0e\x59\x5c\xde\x76\x88\xe7\xb0\xb3\xae\x32\xca\x8b\x85\x8b\xd9\x62\x3d\x5c\xa4\x53\xad\x77\xc8\xca\xc3\x97\xd9\xf2\x71\xcd\xce\xc9\xb4\x97\xf9\x41\x43\x74\xf5\x05\x2d\x56\x57\xc4\x1a\x56\xf2\xcb\xdf\xc8\x65\x3a\x47\x79\x77\xe0\xec\x73\x27\x03\xce\xd4\x55\x58\x55\x3d\xc5\x99\x5f\x46\xe3\xd7\xc8\xf5\x27\x71\x0d\x4d\x7c\x73\x22\x4e\xc1\x0d\xc3\xaa\x7e\x6d\xb2\x8b\x6a\x72\x99\xad\x41\x1e\x3a\xea\xcb\xbc\xb2\x70\x56\x1c\xfa\x01\x65\xfe\xc5\xa3\x62\xb2\xe6\x85\xb9\x9f\x7b\x0b\x7a\x3d\xbb\xdf\xc5\xbd\xd0\xe1\xb2\x28\x3b\xab\xab\xf4\xfd\xef\x90\xd9\xf6\x58\x34\x4a\x93\x49\xcd\xe6\xf5\xe7\x4d\x3f\x85\x6d\x0f\x52\x6a\xcc\xe6\xe2\xfe\x29\xa4\x3f\x90\x13\xe4\x0d\x7e\x90\xbe\x44\x87\x34\x11\xa6\x1e\xf9\x07\x5e\xe3\x24\xf7\x70\x99\xb9\x79\x2e\xf4\x40\x56\x37\x9c\x87\x43\xec\x1d\x9a\x58\x83\x6f\xd9\xf6\x86\xc0\xa0\xc1\xff\xb6\x68\x88\xc1\x19\xa4\x21\xda\x51\x18\x82\x07\x48\x10\x14\x41\x53\xd3\xff\xcc\xe6\xfd\x90\x13\x16\x62\x31\x9f\x3c\x3f\x4f\x16\xeb\xf5\x64\xb6\x58\x83\xea\x0a\x74\x4d\x58\x5b\x1c\x53\x54\x11\x07\x40\x8b\xda\x0f\x09\xff\x75\x5a\x40\xcf\x2c\x80\xe9\x4d\x2c\x9a\x48\x53\x9a\x45\x56\x4f\xa9\x22\x69\x86\xed\xaf\xb2\x1f\x89\x84\x2b\xfe\xca\xb9\x0d\xa5\xc9\xaa\x06\x73\xe8\xb2\xa7\xfe\x87\xa6\xcb\xad\x06\x4e\x58\x17\x21\x95\xd7\x65\x48\xed\x45\x60\x19\x41\xcf\x6d\x16\x24\x0e\x0d\xef\x87\xbf\xe4\x45\xdb\x3b\x1d\xf9\x5f\xef\xec\x65\xcb\xaf\x71\x9a\x01\xbf\x49\x4d\x2b\x87\xdd\x40\xe8\x20\xb1\x6a\x3e\x66\xb4\xac\xd7\x13\xf5\x9f\x3d\x5e\x38\x45\x5f\x83\x70\xc9\xef\x6e\x09\xe9\xba\xb2\xa6\x63\x39\x42\x5b\xfa\x2d\xc6\x6d\x73\x1f\x01\x52\xe7\xd3\x34\xf5\x22\x7a\xeb\x27\x65\x88\xad\x62\x48\x58\x90\xe5\xe6\x46\x51\x4d\xcc\xdf\xa5\x08\x89\x1b\x0e\x89\x31\xa8\xaf\x5d\xef\x9d\xe4\xb7\x80\x20\x0a\xee\x5e\xa1\x8e\xc7\x63\x62\xc5\x82\xfa\xd8\xdc\x35\xa8\xa4\x72\x8d\x6a\x60\xd5\xa9\xa0\x2d\x20\x55\xa8\x56\x9e\xf1\x86\xd1\xba\xaf\x22\x5a\x8b\xd0\xba\xb8\x22\xf0\xb0\x37\xdc\x5c\xea\x22\xc4\x5c\xea\x32\xc4\x5c\x8a\xc8\x58\x82\x9e\x6b\x2e\x91\x40\x5a\xab\xc9\x45\xa8\xee\xc8\x51\x6b\x4b\x4f\xda\x32\x43\xac\x11\xb6\xcc\x58\x1b\x40\x43\xc6\xc9\x7d\xe6\x40\x47\x2b\xe5\xb1\x65\x5e\x0b\xef\x10\xa0\xe7\xef\x45\xff\xe3\xc5\xfd\x34\x73\x1d\x21\xef\xe7\x5b\x0e\x4d\xda\x36\x64\x1e\x29\x3e\x6a\xcb\x62\x0c\xac\xc3\xec\x6f\x6c\x08\x22\xec\x9a\xa1\x62\xd4\xa8\xfb\x3c\x8b\x16\x6f\x9a\x79\x68\x29\x6e\xcb\x74\x11\x62\xcb\x74\x19\x62\xcb\x44\xe8\x3d\x41\xcf\xb5\x65\x48\xa4\xfe\x62\xb9\x72\x64\x0c\xba\xcb\x18\x52\x8c\x2d\x33\xc4\x1a\xe3\x97\xad\xd6\x13\xf5\x9f\x6d\xce\x38\x45\xff\x40\x17\x92\xdf\x63\xce\x74\xbd\x3c\xe6\x6c\xb1\x5c\xed\x60\x0e\x47\x1f\x01\xd2\x9c\xcd\xb3\xc5\x66\xb9\xf4\xe2\x7a\x6b\xd9\x8b\x31\xda\x35\xa3\xe5\xbd\xc7\x78\x2c\x96\xab\xc4\xba\xd1\x81\x91\x76\xfc\x32\x5a\x8a\x0f\xbb\x66\x9c\x74\x82\x44\x88\x7b\x98\xdd\x69\x05\x94\x96\x8d\x6d\xe9\x08\x73\x66\xa8\x18\x35\xf0\x3e\xcf\x9c\x09\x45\x42\x6b\x61\x31\xcf\xb3\x86\xf0\xcc\x54\x09\x62\xcc\x54\x11\x62\xcb\xf8\xed\x1e\x9c\x98\x6b\xc9\xdc\xab\x40\x6e\x1b\xf3\x3b\x0d\x23\x47\xac\x25\x3a\x69\xc9\x06\xa9\x46\x18\xb2\xe5\x6a\xb2\x9e\x4f\x36\x4f\x8e\x15\xeb\xa9\x7d\xda\xf0\xc6\xaa\xe3\xf3\xc7\x7c\x96\xdd\xc6\x27\xed\x97\xd8\xf6\xf0\xa1\x7e\xa6\x91\x0e\x48\xfb\xa3\x6c\x85\xa2\x6f\x9b\x30\x42\x8c\x8f\x9a\x2f\xbf\x41\xb5\xb9\xfc\xad\x86\x7b\x8c\xff\x05\x54\x8a\x1e\x64\x9f\xe8\x84\x8d\x34\xbf\xf2\x62\x1f\x6e\xbe\x8c\x42\xc4\x82\x19\xa5\x88\x11\x53\x37\x06\x49\xaa\xae\x29\x43\x2f\x19\x5a\xae\xa3\xba\xcc\x88\x58\x06\x7e\xaf\x91\xf0\x38\xdd\x9a\x90\x06\x0d\x88\x37\xc6\xa6\x3d\x4e\xe6\x4f\x9b\xc9\x7c\xf1\xec\x58\x35\x49\xd2\x6f\xd8\x84\xf8\xf7\xd8\x36\xa3\x72\x71\xcb\x4d\xc1\x2b\x40\x62\xc4\x82\x13\xc1\xfe\xf4\x25\xa7\x57\xe6\xcf\x5f\x74\x1a\xc4\x1d\x23\xe7\x93\xe4\xc3\xa6\x8e\x13\x4f\xdc\x5b\xba\x7e\x76\x77\xda\x3c\xa5\x73\xe3\x5b\xfc\x43\x8b\xcf\x00\x9d\x1f\xbf\xfc\xac\x30\x77\x08\x1e\x48\x21\x38\xe4\xb2\xb4\xa2\x3c\x39\xe3\x7a\xb3\xfd\xd5\x67\xe4\x2c\x66\x9e\x55\x64\x35\xde\xf7\xa2\x8f\xc2\x14\x5b\x6c\x15\x5d\x29\x8f\xd4\x23\xb2\x77\xcc\xcb\xd6\xbd\x6f\xf5\x59\x8d\xd8\x4b\x83\x87\xfe\x18\xfe\x08\xcb\x66\xa3\x7e\xba\x59\xa3\xa5\xfd\x7c\x9b\xa6\x28\xdb\x06\x8d\x96\xe1\xa3\xd6\x4c\x50\x4e\xdc\x7b\xf9\x1e\x5e\xf7\x8d\x7e\xad\x5e\x23\x5b\xf9\x43\x76\xcc\x47\xe4\x47\x1b\x31\x9e\xf6\x60\xa4\x11\xeb\x71\x08\x23\xa6\x8a\x10\x23\x66\x24\x4e\xb0\xbf\xfa\x8c\x98\xc5\x8c\x34\x62\x03\xf9\x4f\x31\x62\x8a\xad\x6b\xc4\x38\x23\xaf\x11\xeb\x21\x7e\x94\x11\x53\x72\xdd\x6b\xc4\x6c\xfc\x11\x46\xcc\x46\xfd\x1b\x18\x31\xc5\xf2\xf3\x8d\x98\xa2\x1c\x36\x62\x36\xe4\x8f\x34\x62\x36\xaf\xbf\x8d\x11\xb3\x3b\xf6\x2e\x23\xe6\x23\xf2\xa3\x8d\x98\x4a\xa8\x82\x2c\x87\x78\x6e\x15\x3f\x1a\x61\xca\x8c\x52\xc4\x9a\xc1\xc4\x2c\x48\x81\xcf\xa6\xb9\x8c\x49\xb3\x06\xf8\x8c\xb0\x6c\xab\xcd\x64\xfe\xb8\x99\xac\x1f\x1d\xcb\x66\x30\x77\x8d\x9b\x62\xe7\xb5\x6f\x12\xc8\xbf\x0e\x15\x0d\x7f\x8f\x89\x33\x04\x8c\x5c\x87\x72\x5e\x01\x12\x23\x0c\x1d\x82\xfd\xf9\xeb\x50\x9f\xcc\x9f\x6f\xee\x0c\xe2\xce\x3a\xd4\x27\xc9\x87\xd7\xa1\x9c\x78\xe2\xe6\x38\xf2\xb3\xbb\x73\x1d\xaa\x74\x6e\x7c\x8b\x7f\xc8\xf4\x05\xe8\xfc\xf0\x08\x15\x99\xda\x09\x51\x4c\x9e\xe5\xc9\x8f\x46\x58\x3f\xa3\x14\x8b\x90\x03\x29\xa2\x90\x02\x9f\xf5\x73\x19\xd3\x71\x67\x26\x9f\x51\x91\x67\xe9\x64\xbe\x5a\x4c\x96\x48\xe0\xd9\xc0\x1d\x89\xf0\x93\xfc\xbc\xe6\x4f\x02\xf9\x4d\x82\x68\xf9\xbb\xe2\xd7\x06\x01\xe3\xcc\x9f\xe0\x15\x20\x31\xc2\xfc\x21\xd8\x9f\x6e\xfe\xbc\x32\xff\x80\xa8\xb1\x81\xb8\x73\x5c\xea\x93\xe4\xc3\x07\xa6\x9c\x78\xe2\xa6\x5b\xf3\xb3\xbb\xd3\x62\x28\x9d\x1b\xdf\xe2\x1f\x32\x7f\x01\x3a\x3f\xda\xfc\xc9\x2c\x73\xae\x5e\x8a\x84\x73\x5e\x2c\xc2\xf8\x0d\x85\xe8\xb1\xaa\x91\xab\xce\xfd\xee\xb3\x7c\x0e\x53\xcf\x71\xe8\xc0\x64\x8c\xdd\x4b\xd3\xc9\x66\x35\x59\x2f\x90\x13\x51\xc5\x1a\x3b\x11\xe6\xcc\xbc\x46\x4f\xc0\x78\xed\x80\x6c\xef\xfb\x8e\x55\x95\x74\x71\x26\x4f\xb0\xf2\x53\x18\x61\xf1\x5c\xe4\x4f\x37\x78\x3e\x89\x3f\xdf\xde\x0d\xb4\x6d\x73\xe7\x93\xe3\xa3\xd6\x4e\xd0\x4e\xdc\x4c\x8f\x5e\x6e\xf7\xd9\x07\xad\x6c\xa3\x5b\xfb\x43\xb6\xce\x4f\xe6\x87\xaf\x73\xf9\x1d\x25\xf7\xfe\x98\x9d\xf2\xdf\xc4\x11\xf7\x9d\xdc\xe7\x06\xc0\x06\x64\xd6\xbc\xb8\x0f\x4b\x29\x08\xa3\x56\xf2\xa9\xdb\xaa\xee\xa6\x59\x59\xd6\xaf\x2c\x27\x1e\x93\x84\x35\xd4\xef\xe8\xc1\x4a\xd6\x97\xec\x50\x74\xdf\xb7\x33\x70\x94\xdc\x76\x59\x57\x1c\x26\xfa\x7d\x34\xe3\xb9\x4e\xfd\x4d\x3e\x09\xd7\x04\x6e\xa3\x98\x64\x8f\xd7\xb2\xe4\x17\xba\x40\xce\x27\xeb\xb9\x54\xdd\x20\x42\xfb\x6f\x4e\xd7\x0d\x4a\xbd\x93\xef\xfd\x4e\xd9\x37\x56\x75\xad\x7b\xda\x80\x0c\xa0\xbe\xb3\x92\xb6\x2e\x8b\x3c\x81\x6f\x0b\xea\xce\x7c\x4e\x57\x4f\x1b\x7e\x45\x53\x7c\xe6\x89\xe4\x48\x05\xea\xea\x0b\x52\xa8\x5f\xb9\xfb\xc9\xba\x98\xa9\x2e\xb7\x0d\x57\xdb\xd8\x79\x37\x5c\xf6\x5a\xa7\x3f\x27\xd3\xe4\xcb\x9c\x9d\x93\x3f\x25\x8b\x87\x87\x9d\xbe\x3b\xe8\x94\x38\x2f\xcc\x11\x2b\x3b\xde\x95\x37\x54\x19\xe4\x5f\x22\xe9\xa9\xa3\x1a\x9e\xc6\x6d\x6f\xc8\x9d\x4a\xd0\xa7\x22\xe7\x43\x93\x5d\xb6\xfd\xff\x38\xf7\x14\x79\x71\xdb\x65\x8d\x96\x55\xbf\xbc\x6c\xdd\x4a\x9d\x99\x03\x65\x78\x9e\x99\xba\xf1\x27\x6f\xf4\x01\x24\xe4\x7a\x9d\x24\x3e\xb5\x00\x43\x37\x64\x4d\x60\xec\xd1\x68\xf7\xa2\xa0\x7e\x6f\xb4\x27\x20\x32\x9c\xab\xbb\xd3\xa6\x06\x81\x82\x30\x0b\x53\x44\xc8\x41\x68\x2b\xc6\xc2\x2a\x01\xed\x35\x9d\x5f\xde\xbc\x5c\xdd\x16\x94\xcf\x19\xfa\xb0\x5c\x4f\x87\x82\xb2\xfc\x3f\x0a\x4c\xdc\x83\x0d\x3c\xdc\x1d\xe6\x28\xef\x30\xaa\xa7\xac\x97\x71\x75\x50\xaf\x6c\x47\xd5\x24\x0e\x58\xd5\x27\x0c\xbd\x8d\x95\x41\xba\xab\xf0\xb1\xee\xd5\x50\xc3\xa2\x1d\xde\xc7\xc2\x2f\x0f\x03\x58\x91\x2f\x1f\x1d\xbd\xac\xca\xc5\x03\x9a\x59\x51\xe9\x47\xea\xb7\x69\x22\x1e\x30\xb5\xef\x36\x47\xe6\xb8\x30\xe9\xa9\xe4\x09\xcf\x9b\xf4\xa2\x26\x09\xfe\xbb\xc1\x96\x37\x79\x79\x2d\xe0\xbd\xd9\xe5\x42\x3f\x0d\x2b\xf5\x54\x7e\x51\x24\xb9\x7d\x13\xbf\xf2\x67\x62\x03\xf9\x3f\x54\xa2\x0b\xc0\xd6\xc8\x17\x61\x80\xce\xd7\x0b\x2d\x6c\x0c\x69\x95\x18\x02\xd6\x48\x24\xa7\x31\xc0\x96\xab\x55\x04\x59\x37\x1d\x06\xd6\x9e\x40\x46\xf1\xc7\xa8\xa4\x3b\x2a\x19\x85\x94\xd2\x97\x83\x02\xe7\x6f\x56\x46\xfc\xf1\xae\x9f\x62\x8d\x4c\x52\xa0\xbd\x90\xb2\xf8\x5a\x16\xe6\xab\xe9\xfc\x72\xfe\x3b\xe2\xb9\x38\x94\x07\x57\x26\x2f\x3d\x85\xb5\xaf\xf0\xe2\x2b\x6b\x7c\x3c\xb9\xfb\xe4\x29\xbf\xba\x6c\xed\xa6\x30\xeb\x79\x9a\x0f\xa8\xa7\x85\xf1\xfb\xd2\xf8\x7d\x65\xfc\xbe\x36\x7e\xdf\xc0\x8c\xea\xf6\x03\xe8\xd6\x1b\xce\xf3\xc5\xda\xe4\x6b\xbe\xce\x35\xdc\x82\xd7\xb3\x37\x14\x92\xbe\x4a\xdf\xf7\x1d\xac\xd1\x02\x78\xc3\xe6\x15\x7b\x4d\xfc\x71\xbe\x82\x28\x01\xfa\xb3\xf9\x6a\xf1\x04\x30\x96\x80\x09\xc2\x63\xb3\xd9\x6c\x20\x46\x88\xc7\x72\xb9\x5c\x9a\x18\x75\x69\xf6\xaa\x55\xdf\x9d\x69\xb7\x16\x80\x11\x7c\xab\x77\x81\xc8\x06\xab\x62\xbd\xda\x8b\x22\x3c\x3d\x41\x1c\xf0\x84\xaf\x03\x3f\xc7\x47\x92\x72\x39\xb8\xcc\x6b\xc7\x9d\x36\x73\x8f\x88\xb7\xab\x61\x6b\x98\x8f\xe9\xe7\xec\x50\x9c\xb3\xf2\xdd\x6c\x20\xb3\xb8\x68\x0f\x66\x19\x2c\x9e\x76\xdf\x2f\x6c\x7b\x28\x9a\x43\xc9\x76\xa6\x09\x00\x0c\x39\x16\x86\xd8\xfe\xeb\x35\x6b\xd8\x00\x98\xc3\x49\x04\x74\xc6\xb1\x78\xb9\x36\xcc\x2e\x87\x73\xcc\x02\xcb\xa8\x61\x93\xf0\x2b\x0f\xc2\x33\x64\x05\x10\x94\xa4\x38\xbf\xa0\xe9\x08\x1d\xc0\x63\xf1\x72\xc8\x2e\xfd\x44\x0d\x5e\x39\xef\xb2\xb2\x38\x80\xd7\xb1\x6f\xbe\x17\xca\x55\x27\x3b\xef\x93\xcf\xf6\x0d\xcb\xf2\x43\x73\x3d\xef\x45\xb2\x1d\xf5\x48\x0d\xff\xbd\xca\xce\x6c\x32\x3b\x15\x2f\x27\x7e\xe5\x63\x32\xbb\x34\xf5\x4b\xc3\xda\xd6\x7e\xb1\x7b\x90\xa4\xbd\xee\x27\xc6\x1f\xe6\x43\xa2\x8f\xeb\x9f\xdf\xa1\x71\xbd\x99\xeb\x4a\x6b\xd5\x9a\x3b\xeb\xd8\x93\x5a\x1f\xce\xa9\xf5\xa1\x20\x27\x33\xd2\xe8\x06\xe8\x2b\x9e\x08\xeb\x84\xbe\x85\xce\x1f\xfe\x9f\x09\x4f\x2f\x11\xff\x4c\x66\xbd\x9a\x64\x0d\xcb\x6e\x1f\x4e\x22\x63\x66\x29\x43\xea\x79\xb2\x2c\xbb\xf5\xac\x92\x0b\xcf\xb2\x1c\x6d\x1d\xfe\x5d\xb5\x91\xd1\x14\xbd\x27\x01\x58\x38\x24\x8f\x75\xdd\x61\x24\xc5\x77\x8b\x64\xbf\x38\x4f\x93\x34\x40\x72\x5f\xe7\xdf\x93\xae\x31\x46\x05\xc6\x00\x83\x3a\x59\xcb\x25\x59\x11\xcd\x61\xd8\xe1\x71\xf7\x73\x0c\x10\x7a\x43\xc7\x00\xa2\x76\x74\xa4\x4a\x38\x3a\x30\xec\x02\xcc\x36\x0b\x44\x03\x8c\x94\x2f\x10\xc0\xec\x7f\x4e\x7c\xbb\xe5\xf9\x91\x2e\x65\x76\x60\xa7\xba\xcc\xfb\x25\x83\x62\xe7\x96\x49\x15\xe1\x9b\xd7\xeb\xd5\x44\xfc\xff\x6c\xf9\x30\x10\x93\x79\x95\xf8\x9f\x24\x55\x0a\x28\x44\xde\x23\xea\x58\x49\xa7\xe7\xd6\x2b\x24\x5a\x1e\x20\x6a\x2e\x62\xf5\x07\xbd\x5e\x15\x7c\x41\xb9\x3a\x95\x50\x5c\x4d\x02\xe6\x37\x4d\x43\x8b\x67\x43\xe9\x5c\x3b\xd1\xd1\x73\x3b\xb9\x0b\xda\x6b\x34\x17\x66\xd8\x37\x1c\xc8\x9a\x3b\xa4\xf8\x96\xa7\xd8\x10\x72\x48\xf8\xd4\xca\x07\x65\xb6\xf0\x7c\xb1\x98\xa8\xff\x86\x46\x06\xd8\x61\x6d\x8b\x02\x1f\xc5\x35\xaa\x62\x1f\xaa\x57\x40\x37\x43\x90\x11\xbc\x7a\xa7\xe6\xcf\x2d\xcb\x9a\xc3\xc9\xec\x6d\xf3\xb3\xbd\x6f\x2d\xb7\x3a\x15\x85\x7e\xb6\xae\xab\xf2\xbb\x89\xae\xbf\xd9\xca\x62\x8c\x0f\x3e\xef\x43\xed\x96\xb9\x70\xec\x4d\x76\x1b\x09\x1d\x5d\x6e\xce\x20\x58\xb4\xc5\x31\xb0\x81\xe7\x30\x41\x0b\x9d\xa1\xe8\xb2\x72\x4b\x62\x06\xa7\x93\x7c\x47\x4b\xcc\x2f\xed\x43\xb2\x32\xe5\x06\x92\x51\xc0\xc6\x43\x5b\xcd\x4d\x1d\x02\x8b\xdc\x56\x03\xc9\x41\x1c\x49\xa8\x56\x73\xf9\x38\xa5\x68\xab\x19\xdc\x46\xa5\xf9\xd0\xe2\x4a\x2f\xd1\xa4\x29\x6f\xf6\x23\xd7\xe6\x6c\x3c\xb4\xc9\xdc\x0c\x05\xb0\xc8\x6d\x32\x90\x83\xc0\x91\x84\x6a\x32\x97\x8f\x53\x8a\x36\x99\xc1\x6d\x6c\x36\x01\x2d\x71\x9e\x35\x96\x9e\x89\x2b\xc4\xf6\x8d\x49\x0b\x05\x6d\x2f\xe7\x0e\x34\x28\x71\x5b\xcb\xbc\xe6\x6c\x4b\x40\xb5\x95\xc3\xc3\x2e\x44\x5b\x6a\xe0\x34\xea\xb6\xb2\x96\x54\x5e\x63\x82\x44\xf5\x05\x45\xe4\xa6\x95\x81\x5b\x54\xc7\x1a\xa8\x48\x65\x35\xb8\x00\x80\x1d\x5b\xd9\x5d\xa0\x42\x82\x6d\x91\xd0\x8e\xc0\x6e\x73\xda\x85\x6e\x77\x58\xb7\x35\x91\xaa\x52\x9d\x82\xf1\x43\xca\xd1\xae\x01\x5c\x47\xde\xbb\x04\x6d\x8c\xb6\x84\x73\x0f\x02\x94\xb8\x6d\x60\xde\x80\x00\x5d\x46\x18\x88\x8a\x50\x78\xe3\x1a\x95\xfd\x15\x69\x5e\x5b\x7c\xac\x0c\x6d\x58\x50\x09\xa7\x00\xb5\x43\x15\x39\xb4\x9c\xda\xd8\x85\x84\x11\xaa\xa2\x86\x96\x7d\x8f\x43\x37\x8a\x0c\xcd\x84\x54\x75\xb8\x38\x12\x3d\xea\xe2\xa2\x9d\x83\x85\x8e\xdb\x85\x6e\x17\x59\x41\xe3\x88\x4c\x54\xf3\x61\xfc\x90\x72\xb4\x11\x01\xd7\x71\x51\xe3\x83\x93\x23\x62\xbc\x2c\x5f\x44\x05\x9e\x22\x61\x68\x2e\x2e\xee\x6e\x21\x41\xa8\x76\x21\xe2\x72\xc1\xf0\x53\x44\x26\xd2\xed\x42\xf8\x21\xe5\xb8\xeb\x65\x72\x1d\x19\x7f\x6a\x4c\x4b\xd5\x8b\xe9\x7b\xcf\x8c\x08\x36\x24\xc0\xc5\xc1\x24\xe6\x46\x27\x98\xcd\x2a\xc3\xe6\x47\x33\x8c\xcd\x15\x87\x9e\x23\x1d\x5e\x6e\x31\x31\x4f\x0e\x1c\xc7\x85\xb1\x0d\x03\xe8\x9c\x95\xa5\xa5\xdd\xd1\x31\x31\x9a\x8a\x4a\x01\x6c\x92\xa1\x77\x55\x06\x03\x2b\x12\x0a\x03\xfb\xe4\xdb\x66\x99\x99\x51\x27\xd6\xfa\xdb\x09\x46\x11\x11\x1a\xce\x6e\xca\x4c\x3f\x35\x61\x9b\x60\xe4\x9d\x31\xf3\x8c\x6e\x76\x38\xb1\xc3\xaf\xfb\xfa\x6d\x32\xeb\x1b\xa5\x56\xdb\x80\xe8\xde\x2c\x72\x64\x6a\xb4\xb9\x0c\xe2\xf8\x8c\x8c\xa5\x30\x39\x74\x6a\x6d\x2f\xa5\xef\xc3\xc6\x14\xdc\x5b\xdc\x99\xc7\xb5\xe9\xcf\xbb\x86\xf1\xe6\x56\x9b\x9e\x03\x1e\xdf\xb1\xfe\x4b\x53\xbf\xb6\x7f\x7d\xe0\x34\x4e\xfa\x35\xd8\xcb\x1b\xa7\xa2\x8e\x92\x16\xfc\x30\x37\x67\x25\xeb\x97\x8f\xe7\x3a\xcf\xca\xe9\xa1\xac\x5b\x76\x33\xa0\x7a\x20\x73\x5f\x63\x58\x99\xf6\x1c\x54\xb6\xe8\x6b\xd5\xb2\x6e\x28\xe4\x27\xe3\xc7\xe2\x8d\xe5\x5c\x29\x6e\x52\x58\xb1\x6e\xb5\xba\x45\x45\x54\xc9\x78\x17\xeb\xb4\x6b\xb1\x7e\x17\xdb\xd5\x87\x2e\x03\x1b\xd7\x60\x4b\x17\x8b\x87\x81\x74\xd6\x58\x76\xef\x31\x69\xcc\x07\xb9\x13\xb9\x83\xc8\xa5\x17\x7f\x58\x75\x18\x60\x55\xc4\x00\x87\x85\x81\xb1\x7a\x73\x55\x82\x9a\x7b\x45\x1c\xdc\x0c\x3a\x03\x91\x42\x6e\x08\xda\xbb\xc0\xf8\x2a\x5b\x14\xa4\xc7\xe6\xa7\x31\xb2\x99\x2c\x95\xc2\x76\xcc\x75\xb2\xf3\xee\x0b\x37\x0a\xd7\xb2\x2b\x2e\x25\x7b\xb8\x81\xf4\xeb\x34\xdc\x16\x86\x7b\x19\xdb\xf9\xf0\xca\xa7\xd4\x77\x23\x44\x66\x9b\x0e\x71\x5b\x09\x11\xb8\xc5\xcf\x39\x90\xc8\x28\x37\x1c\x6b\x37\x3c\xbb\xdf\xd4\x5d\xd6\xb1\x2f\xd3\xd5\x3a\x67\x2f\x0f\x43\xc1\xb4\x6e\x8a\x97\x62\x48\xbe\xce\x1b\xc6\x3c\x84\xec\x85\x92\xe9\xbd\x77\xcd\x70\xfc\xca\xce\x3c\x2e\x6c\x9d\xfe\xbc\x33\x42\x3c\x7a\xd9\x9b\xba\x9c\x19\x81\x6f\xa2\x29\x26\x72\x88\x59\x7f\xed\xd9\xb1\x6e\xd8\x64\xd6\x03\xf7\x9f\x45\x83\xba\xe8\xb7\x21\x98\xed\xdd\xd2\xfa\xd0\x91\x89\x31\x17\xd8\x56\x08\x26\xd3\xa7\xe3\xc3\x76\x1f\xde\x1e\x77\xf3\xec\x7b\xe3\x9a\xe5\x49\x89\x65\x14\xa0\x32\xc0\x43\x53\xc3\x38\x81\xe6\x19\xb3\xd5\x6e\x23\x8e\xdf\x4d\x87\x14\xee\xe5\x3c\x72\x8b\x1c\x20\xcf\xcc\x60\x7d\x48\x96\xce\x3c\x8f\xd0\x50\x8e\x8b\x53\xa0\xbd\x1d\x48\x1c\x85\x97\x3e\x8e\xee\x9b\xe0\xfd\xdc\xf0\x8a\x06\xd0\x1f\x1d\x91\x8b\x64\x03\x0b\xa4\x78\x52\xdb\xf0\x04\xdf\x91\x1b\xed\x34\x95\xbb\x76\xd0\x29\x72\x9f\x22\xd3\xf8\x2d\x70\x67\xe0\xb5\x53\xf6\x76\xc9\x2a\xf8\xc4\x17\xcd\x11\x53\x50\xb5\x93\x08\x69\x73\xef\x46\xcd\x36\x7f\x7d\xb8\x41\xfb\xb3\x30\xa7\x3b\xc5\x46\x43\x03\x6f\x45\x1f\x21\xdb\x76\x63\x80\x4f\x6a\x71\x38\x0f\x0e\x9b\xe7\xc6\xec\xc7\xc5\xde\x62\x37\x04\xf4\xf4\x3e\x0c\x1f\xbe\x6f\x0d\x4d\x37\xd8\x9a\xc7\x21\xdd\x11\x89\x41\x58\x43\xd3\x06\xd9\xfa\x29\xdc\xb7\x99\x3e\xd0\xe2\x7b\xcb\x78\xcd\xd4\x0e\x3a\x0e\x8c\x57\xce\x86\x40\x2a\x67\x82\x20\x95\x03\xc5\xe3\xf7\xbc\x8d\xa9\xb8\xd7\x17\xa2\xcf\x80\x7a\xda\xc0\x78\xcd\x6c\x08\xa4\x66\x26\x08\x52\x33\x50\x7c\xd7\xd6\xf4\x40\x2b\xcf\x1a\xa2\xd7\xf8\x86\x34\x0a\x88\xd7\xcb\x02\x40\xaa\x65\x40\x20\xb5\x32\x4b\xc7\x6f\x23\x0f\x74\xe4\x66\x27\x51\x29\xb9\x73\x3c\x80\x17\xd5\xb1\xd6\x41\x21\x66\x1b\x57\x44\xbb\xa8\x5d\x62\x8a\x23\xde\x3a\x2e\x0c\xd2\x40\x10\x08\x69\x23\x0b\xe0\x9e\xfd\x5c\xb4\xe6\xb8\xcc\x16\x00\x22\xb0\x01\x81\x48\x6b\x96\xca\x0d\x16\xb4\x81\xa9\x71\x52\x05\xf4\xc9\x80\x40\x47\x49\x35\x46\x9f\x70\x4f\xc3\xd8\x38\x24\x14\x4a\x6e\x97\x52\xe0\x78\xdd\x5c\x18\xa4\x7a\x10\x08\xa9\xa1\x05\x70\xc7\xc6\xa6\x31\x15\x88\x5d\x3d\xc2\xcc\xc9\xbd\x4c\x0a\x9c\x98\x9f\x1c\x18\x6c\x86\x02\x40\xd8\x1c\x05\x01\xee\xd9\x75\x34\x6d\x4c\xf5\xc2\x1a\xbc\x92\x6a\xa7\x91\x80\xa6\x8c\x9e\x05\x82\x9a\x3d\x03\x06\x35\x7c\x66\xf9\x1d\xfb\x82\x86\x46\x44\xef\x02\x0e\x38\xf4\x96\x9f\x31\x96\x88\x0d\x3e\xa3\x12\xd2\x8d\xc3\x1d\x21\xe8\x46\x5b\x3b\x82\xc8\x47\xd5\x43\xe6\x46\xa0\x21\x0d\x5c\x1b\xff\x2d\x2f\x95\x45\xdc\x24\x33\xf6\x0d\x52\x64\x4b\x42\xde\x8e\xda\xe8\x2d\x04\xf5\xab\xde\xaa\x10\x5e\xf2\xb1\x28\x99\x19\xb1\x79\x43\x36\x27\xd5\x76\xc3\x29\x6b\xa7\xfc\x01\x37\xf5\x8b\xa8\x9c\x7a\x12\xce\x06\x6b\xcd\xe2\x99\xbe\x62\xa2\x77\x1f\x9d\x96\xd6\xaa\x25\x5b\xdc\xa7\x4e\x06\x8a\xd0\x2c\x07\x07\xd3\xaf\x01\x89\xab\x1a\x82\x23\x14\x8e\x3f\x17\xe9\x3c\xc8\x67\xee\xfc\xb5\x5d\xc3\xba\xc3\x09\x5e\x85\xf3\xde\x7d\x33\x02\x64\xc5\xb6\x8c\xef\x3d\x4a\xf7\xe5\x49\x21\xd4\xe0\x4e\xeb\xad\xca\xb1\x57\xa6\x2d\x6f\x19\x50\x35\xd6\xf5\x89\xb5\x17\x3a\x83\x6f\x6f\xf9\xf9\x3f\xf7\x3f\xf7\x8b\x20\xad\x1b\x2d\x02\x07\x30\x45\x88\xd8\x11\xe7\xe6\x8d\x5c\x63\x04\x65\x12\x06\x95\x16\xc9\x2e\x27\xaf\xc2\x8f\x6e\x16\xb1\xc2\xf0\x11\x0e\xbd\x79\x63\x2e\xfd\x00\xd5\x40\x7f\x1b\x8f\x07\xf9\xf9\xaf\xfa\x9f\x3b\xf9\x7b\x3a\xdb\x08\x24\xfa\x50\x67\x83\x35\x97\x5f\x1a\xba\x9b\xcd\x78\x27\x7f\x6b\xa4\x69\x7c\x53\x40\x1e\x62\xc9\x65\x14\x54\x75\x57\x1c\x8b\x43\xc6\xf7\x06\xe8\x8b\xd7\x04\x3e\xdd\x54\xe6\xe2\x0b\x20\x07\x34\xc2\x78\x82\xc5\xdb\x06\x8c\xb1\x60\x1b\xe0\xcc\x3d\xea\x60\x04\x49\x7d\x6c\xec\x5b\x0b\x55\xbf\x40\xb4\x46\x98\xe1\x5c\xfe\xd6\x10\xaf\x2a\x8e\x6a\x10\xbe\x4e\xf5\x11\xf5\x3e\xaa\x40\xe8\x87\xf5\x7e\x05\x56\xa9\xe1\x69\x0a\x2f\xf7\x39\x5b\xe4\xcb\xc3\xdd\x02\x78\x7a\x79\x08\xf0\xfa\x50\x27\x83\x85\x7b\x48\x1c\xba\x8f\x8d\x38\x34\x7f\x7b\xf0\x17\x70\x46\xb7\x87\x5a\x69\x7b\x3b\x3a\x90\x64\x1e\xb3\x67\x6e\x9a\x7f\xac\x72\x20\x77\x7f\x40\xd9\xb2\xe3\xe3\xc8\x19\xc6\x0d\x25\xf3\xc9\xf0\x09\x3d\x0e\xf7\x20\x50\x99\xac\x10\x2c\x4c\xa0\x21\xde\x0a\x1f\xf3\x55\x48\x81\x87\x30\x2a\x50\x1d\xca\x18\xc1\xb0\xfe\x7b\x5b\x98\xd6\x60\x18\xb1\xe7\xef\xe5\x79\xb6\x7e\x0c\x3b\x28\x40\x06\xbe\xff\xe1\x1d\x19\x81\xf4\xbb\x14\xd1\xe0\x4c\x54\x45\xb9\x26\x4f\xeb\xfd\xbd\xdc\x7d\x96\xbf\x8a\x74\x05\xd6\xab\xe3\x7e\x1c\x77\xbe\x9d\xf5\xd9\x0d\x6a\x65\x8a\x26\xf5\xfe\xc7\x34\x28\x0c\x8a\x24\x99\xff\xa0\x06\x55\xfb\x57\x5e\xcd\x0f\x24\x50\xf5\xd0\x0d\x34\x2b\xc8\x50\xeb\x97\x61\x9f\x6d\x96\x9b\xbb\x65\xf0\x58\x24\x10\x93\xf8\x21\x1b\x0b\x77\xf6\x42\x22\xd1\xfd\x0d\x23\x28\xfd\xcd\xf2\xfc\x7c\x58\x8e\x34\x4a\x6a\x37\xcf\xbb\x1a\x0b\x24\x8d\xf4\xd0\x0d\x2d\x93\xcd\xb4\x9c\x21\x19\x9e\xe6\x8f\x77\xcb\xe0\x5b\x27\x9b\xe1\x93\x1f\x5c\x29\x83\x7d\xce\x90\x4c\x9e\x75\x32\x88\xf6\x0c\x6c\x20\x3c\xcd\xc7\x2e\x68\xe5\xfe\xa6\x8f\x6c\x28\x67\x1e\x4d\x36\xe8\x34\x0f\xd9\x08\xbd\x12\xec\xd9\x32\x5f\x8e\xf4\xe5\x9c\x18\x50\x8f\x04\x9f\xd0\xdd\x60\xd7\x37\x20\x90\xcf\x6f\x36\x22\x53\xfd\x4d\xb2\x5a\x66\x8b\x91\x13\x0a\x75\x71\x57\x95\xd3\x9b\xcd\x10\x42\x0a\x56\x1c\xea\x2a\x99\x1d\x33\x33\xc1\x05\xcf\x93\xa4\xe7\x7b\x62\x63\x1a\x94\x7b\x88\x3d\x69\x62\xa7\xac\xe5\x51\x85\x6e\x1f\x8d\x4c\xeb\x84\xd3\xeb\x7f\xbd\x33\x13\x15\x20\xd7\x57\x8a\x9d\x2f\xdd\x77\x57\xce\x61\xbf\x3f\x80\xc3\x65\x81\x31\x19\xaa\xbd\x82\x89\x89\x14\x60\x28\x2b\x91\x82\xdb\xd7\x6f\x7a\x5c\x88\x7d\x6c\x0e\x93\x17\x0d\x3b\xf0\xdd\xec\x43\x5d\x5e\xcf\x15\x8e\xd0\x57\x0e\x05\x57\x3b\xef\x30\x0f\x02\x3b\x27\x4b\xb3\xf3\x4d\x52\x66\xfb\xab\xab\xf3\xf3\xcb\x5b\x02\xb4\xc9\x44\xe8\xb5\xe5\x36\x84\x8e\x0e\x5b\xfc\x22\xba\x84\x42\xf1\x6a\x2b\x07\xd6\xc3\x84\xc6\x9a\xaf\x50\xac\xe0\xd0\x78\x42\xd1\x02\x63\x60\xb9\x76\xb1\xe8\xc1\x30\x28\x59\x22\x13\x05\x04\x70\xcd\x86\x57\x3a\x2d\x92\x16\x24\x8b\xe1\x30\x86\xec\x92\x06\xdf\x38\xd3\x94\xb4\x20\x38\x0a\xc2\x5d\x8a\xed\x72\x9f\xf3\x02\x29\xc1\x4e\x1c\x2a\x4d\xe7\x03\xdd\xe1\x74\xca\x54\x67\xf3\x88\x8a\x82\xe4\x52\x70\x45\x7e\x69\xea\xd7\xed\xdc\x4a\x83\xf5\x6e\xd2\x0b\x9e\x65\x58\x51\x91\xbe\xa3\x0d\xd5\x6a\x66\x58\xb1\x16\xc8\xfc\x78\xc9\x5e\x8a\x8a\xef\x65\x4e\x59\x59\x16\x97\xb6\x68\x89\x62\xf8\x32\x15\x28\xaa\xd8\x5b\x47\x14\x5d\x1a\xf6\xad\xa8\xaf\xad\x37\x62\xcf\x6c\x86\xc8\x9d\x4c\x2b\xce\x8a\xc0\x37\x95\x40\x62\xe4\xeb\xfe\x07\x60\xc4\x6f\x17\xd2\x5c\x01\x0d\x84\xed\xe1\xd8\xff\x48\x14\x11\x35\xae\x82\x9a\x53\x9d\x85\x32\x1d\xa2\x59\xb1\x90\x66\x7e\xae\x28\xe3\x94\xd3\xb9\xb2\x45\x56\x6c\xbc\x2f\x2c\x18\x06\x3a\x5a\x17\x21\xb8\x8a\x8d\x0e\x0c\xbe\x3b\x77\x0a\x12\x18\xec\x39\xbc\xee\x9b\x08\xc4\x22\x9b\x1f\x9a\xe1\x2c\xd6\xc8\x81\x53\xd5\xaf\x4d\x76\x71\x8f\x4a\x45\xd0\x3a\x3c\x2f\x7d\x48\x54\x62\x10\xf7\xc4\xb4\x67\x17\x2c\x06\x21\x84\x30\xa9\xc8\xc2\x48\x8a\xe6\x3f\xb2\xa5\x58\x44\x96\xe3\x32\x34\x20\x6e\x5f\x29\xcc\xcc\x88\x69\x30\xbf\xe9\x20\x06\xf5\x71\x6b\x43\xa9\x78\x1e\xad\x70\x0e\x29\xf5\x11\xd2\xea\xbf\x6e\x1d\x38\x3b\x50\x78\x90\x50\xdd\x7a\x58\x65\xfd\xcf\x3b\x3d\x9e\xc1\x89\xbf\xc8\xa1\xc4\xf5\xde\x35\xf1\xea\xbf\xd4\x3a\xcc\x37\xee\x45\x6c\x60\x1a\xa9\xbe\x03\xc5\xdf\x3a\x2b\x92\xb2\x92\xef\x86\xb3\x10\xca\xc7\x6a\x44\x0b\xe0\xde\xd5\xce\x4a\xa0\x6a\x86\x15\xbc\xcf\x4e\xac\xbc\x4c\x66\x62\x92\x00\x92\xbf\x07\xfc\x08\x81\x02\x8c\x96\x39\xa6\x1a\x76\x06\xd9\xe6\x1e\xd3\x54\xe2\x84\xf2\x5e\x09\x4f\x88\x83\xfa\x7c\x7f\x0d\x40\x3b\xff\x1a\x84\xf2\xe7\xfb\xca\x3b\xa4\x77\x30\xe7\xa0\x06\xd4\x67\xbf\x20\x89\xbb\x2a\x11\x39\x1e\xac\x23\x5d\x55\x28\xb2\x19\x58\x67\x02\xaa\x90\xdf\xda\x37\x8f\x84\x54\x81\xba\xa5\x0e\xce\x05\x86\x62\x71\xf9\x7c\x60\x51\xfd\x6a\x3f\xb3\xa5\xca\xd4\x95\x5c\xb0\xf9\x65\x54\x4a\xde\x34\x05\x1b\x25\xa6\x7c\xfc\x02\x25\x58\x53\xf7\xca\xc1\xca\xdc\x48\x53\x7a\x8b\x8e\x8c\xb0\x31\x13\x65\x75\x02\xa9\x7f\xa7\xd2\x83\xa3\xb0\x8d\xd4\x6b\x2a\x67\xea\x24\x16\x5c\x9a\xbf\x48\x68\x68\x0c\xe9\xe5\x97\xe1\x0b\xda\x0b\xb0\x85\xbf\x2e\x46\x66\xab\x88\xaa\x98\xd0\xc1\x9a\x98\xc0\xbe\x8a\x80\xe5\xa7\x55\x13\xbb\xcc\x53\x95\x08\xf9\xc3\x42\x13\x92\x9a\x8b\xd9\x00\x7b\x38\x91\x44\x00\x1b\x13\x4c\x00\x7a\x1b\x4d\x77\x98\xde\xfc\x2d\x11\x29\xac\x9b\xb4\x2a\x04\x1c\x23\x2a\x48\x75\x15\xdb\x23\x91\x12\x3b\x38\x31\x92\x03\xa4\x98\x1a\x40\x04\x27\x25\xf4\x08\x5d\x51\x77\x2c\xc7\x68\x4c\x34\xce\x76\x24\x0f\x33\x01\xf4\x18\x1d\x1a\x83\x11\x5f\x07\x53\x9f\xa2\xc1\x63\x6b\x40\xe8\xd6\x3d\x98\xf1\x35\xc2\xf4\x6c\x34\x1a\x91\xa4\x9b\xc4\xe7\x9b\x68\xfc\x3a\x13\xcb\xcd\xb5\xbc\x8b\x62\xfc\x1a\xb3\x9f\x46\x23\x87\xf7\xd8\x68\x5c\x63\x0b\x42\x56\x00\x6c\x40\x88\x69\xfe\xd4\x14\xd5\xaf\x83\x55\x2e\xda\xbe\xf8\x7a\x61\xf9\x58\x1f\x61\xc0\xfc\x05\xb2\xa3\x59\xfc\x12\x74\x26\xa4\x97\x69\xe5\xc9\x9f\x3d\xaa\xfd\x62\x82\x1e\xd5\x51\xa0\xce\x73\x97\x80\xf1\x6b\x6c\xb7\xe1\xc8\x71\xdd\x86\xe3\xf2\x6b\x67\x3c\xa7\x01\x7c\xbd\x21\x12\xeb\x17\xc4\x79\x98\x8c\x45\x0d\x79\xfd\x44\x07\xa0\x54\x7d\xef\x3e\x8c\xa2\x13\x52\x12\x49\x47\xec\xc3\x24\x72\xcd\x33\x2c\x18\x8a\xea\xc4\x9a\xa2\xf3\x67\x82\x7f\xdc\x88\x14\xeb\x06\x25\xf4\x25\x0c\xc5\x8b\x67\x37\x15\xbf\xcb\x7f\x1c\xa9\xbc\x39\xdd\x1f\x37\xcf\x97\xb7\x87\xc9\xa5\x29\xaa\xee\x36\xb4\xc3\xa9\x6e\x8a\xdf\xea\xaa\xcb\x4a\x30\x0c\x41\x0d\x85\x7a\xec\xb3\xb6\x68\xb7\xe9\x8e\x1c\xd9\x70\xe8\x88\xc4\xed\xe6\xca\x96\x7f\x07\x84\xe9\x85\x1c\xd8\xca\x11\xbb\x38\x0e\x66\x55\x37\xe7\xac\xbc\x45\x40\x52\x6b\xc1\x18\x2e\xf8\x22\xd1\x83\xd9\x77\xd4\xcd\x7d\x1b\xc5\x6d\xbe\x35\x6a\x24\xcc\x8e\xa6\xf4\xae\x07\xf9\x45\x82\x90\x34\x24\x80\x4e\x98\x50\x65\x4d\x53\xbf\x3e\x20\xd3\x89\x03\xee\x79\x68\xe5\x51\x2a\x65\x71\xce\x5e\xd8\x44\xfc\x93\x14\xe7\x17\x23\x9b\xb3\xb5\x5f\x60\x06\xaf\x22\xf9\xef\x15\x1a\x52\x24\xb2\x3a\xd3\xef\x01\x70\xc3\x0f\xf7\x16\xdc\x2d\x3e\x34\x03\xb2\xb9\x99\x25\x6e\x26\xdc\xe0\xde\x0e\xdc\x94\x8c\xcc\xff\x60\x6c\x96\x4a\x44\x24\x5b\x83\xc1\x76\x70\x7e\xbe\x92\x97\x27\x8c\xad\x40\x01\xfa\xbf\x04\x40\x4d\x8f\x83\x86\x35\xf7\xf7\x22\x61\x5d\xc2\x30\x4b\x08\x59\x45\x3d\xca\x45\x2d\x89\x4c\xcb\x04\xa2\x18\xba\x0e\x26\xc8\xbf\x4c\xa0\xf2\x91\x8b\x60\x2e\x51\x44\x6a\x8f\xb6\xc7\x16\x3b\xe5\x2e\x0e\xe8\x1e\x5d\xcd\xb8\x1e\x8a\x00\x37\x3b\x29\x1e\x1c\x25\x1f\xd1\xe8\x4e\x65\x44\xd3\xc7\xd7\x26\x04\x6f\x57\x27\x12\x1e\x67\x10\xa3\x0b\x4e\x8d\xb8\x46\xc4\x57\x28\x00\x6e\xd7\x27\x0e\x1c\x25\x1f\xa1\x9f\xba\x32\xe1\x5b\x56\x3f\xdc\x96\x99\x26\x3d\x51\x29\xd0\x27\xd6\xe7\xf6\xba\xef\x8a\xae\x64\xf6\x77\xec\x63\xdb\x35\xb5\xde\x6a\x3c\x5c\x9b\x86\x55\xdd\xdf\xf7\x7f\xf8\xdb\x81\xb7\x22\x3b\x76\xce\x00\xfd\x37\x7f\x6f\xcf\xf3\x98\x1b\x75\x69\x0f\xab\xdd\x2c\x78\x57\x0e\xc7\x09\x5d\x96\xc3\xb1\xfc\xb7\xe5\xb8\x2b\x80\x5d\x1c\xd4\x3e\xc2\xcd\x0c\xa4\x00\x69\xd7\x7a\x88\x9e\xc3\x7c\xb3\xff\xfe\x2c\xdc\x89\xe1\xdb\xfe\xfb\xdc\xfa\xb4\x70\x3f\x2d\xf7\xdf\x17\xd6\xa7\xd5\xfe\xfb\xd2\xfa\x24\x9e\x00\xe1\xb2\xe8\x05\x9f\x4a\x8b\x46\x5c\x9e\x4c\xe5\x58\x50\xdd\x98\xa6\x3f\x13\xb2\xef\xbf\xcf\x1d\x56\xc0\x3b\xb5\x10\x7a\xf9\x40\x39\x7f\xd2\x02\xd4\x08\x14\x6f\x36\xfc\x71\x1a\xa7\xbd\x00\xd0\x7a\x33\x5b\x00\x32\x7d\x5b\x41\x08\xab\xc5\xdf\xe6\x1b\x1d\x7a\xb2\x19\xde\x69\x12\x69\xc2\x35\x95\xd5\xdb\x62\xa5\x33\x72\x0d\xcf\x39\x2d\x56\x00\x6c\xb9\x78\x5b\x2e\x14\xd8\x72\x78\x75\x6a\xb9\x00\x60\xab\xa7\xb7\xd5\x93\x02\x5b\x3d\x69\xb0\xd5\x13\x00\xdb\xac\xde\x36\x9a\xe9\x66\x60\xba\x81\x4c\x9f\x37\x6f\xcf\xba\x0a\xcf\x1b\xe3\xed\x30\x00\x36\x5f\x3c\xbd\xcd\x17\x9a\xed\x7c\x31\xf0\x9d\x8b\x60\x16\x78\xcd\xca\x39\x1a\x46\x54\x1b\x18\x31\x91\x08\x4f\x6e\xcb\x3d\xa0\xc6\x0c\xc0\x1f\xea\xdc\xb6\x83\x97\x86\x19\x91\x00\xf2\x2c\xc9\x86\xe0\x88\x26\x18\x8f\x8b\x31\xa1\x7e\x51\x77\x4b\xc9\x1b\xc1\xda\xb4\x70\xc3\x62\xe2\x0e\xe7\x59\xe8\x8d\x52\x17\x58\xa6\x31\x27\xae\x23\xba\xf0\x32\x87\x37\x79\x8b\xcd\x86\x17\xe9\xab\xb1\x8b\x4f\x2e\xac\xce\xe0\x4c\x5c\x9f\x71\x31\xc4\x71\x99\x2b\x63\x85\xf1\x54\x27\x68\x36\xb8\x4e\x6e\x4b\x44\x94\x23\x2d\xac\xd2\xb8\x12\x01\xc9\x58\x33\x78\x9f\xdc\x7e\x1f\xd6\x5f\x63\x92\x0c\xca\x89\xcc\xfc\xdd\x99\x0a\xd5\x80\x31\x96\xbd\xda\x37\x10\x26\x4d\xaf\xe1\x74\x6e\x29\xf5\x65\xba\xcf\x30\x99\xc5\xdc\xeb\x45\xfc\x96\x95\x57\x4c\x07\x95\x5a\x19\xa8\x3c\x03\x95\x9f\x21\x86\xd5\x4e\x8f\x45\x59\x86\x2e\xd2\xca\xa0\x29\x85\xa8\x87\xc7\x08\x91\xf9\xb0\xc1\x08\x44\x08\x4e\xe3\x92\xe2\x3b\x28\xe2\xce\xea\xfd\x4d\x6c\xd2\xb8\xa3\xad\x01\x7a\xa0\xd1\x21\x96\xb8\x5a\x39\xa2\xa1\xa5\x09\xc1\x68\xc4\xb4\xb5\x0f\x9d\x6e\x6e\x04\x8b\xdf\x17\x8c\x97\x7b\x61\x8e\x5f\x03\x3f\x42\x66\x12\x95\x94\xd7\xc1\x50\x57\xc3\x46\xc8\x2b\x8d\x29\x4e\x25\x46\x6a\x3f\x01\x5a\x76\x04\x8f\xdf\xc2\x8a\x97\x5d\xd9\x70\x84\x44\x84\xe0\x3e\x6c\x52\x6a\x0c\x89\x5f\x75\xfa\x98\xd4\x92\xc4\x9d\x52\x2b\xec\x51\x52\xab\x0b\x3b\x23\x54\x45\x4e\x80\x38\x95\x18\x55\xf1\x13\xa0\x55\x05\xc1\x53\x77\x4f\x46\x58\x14\x39\x1b\xe3\x54\x62\x6c\x8a\x9f\x00\x6d\x55\x10\x3c\x79\x9b\x22\x5e\x7a\xdb\x35\x00\x44\x22\x84\xf7\xe3\x93\xb2\x63\x68\x72\x0b\x7e\x78\x54\x54\x2c\x34\xc1\x38\xe2\x3b\xed\x1a\x42\xac\x2a\xc5\x1e\x30\x31\xc9\x0d\x8f\xfb\xe9\xe7\xef\xb0\x0c\xc3\x0a\x6c\x66\x3c\x5d\x24\xe1\x03\xde\xae\x9d\xbe\x73\xc8\x1a\xab\xa6\x2b\x93\xb6\x7a\xe3\xc7\xa0\xed\x77\x8e\x77\x58\xea\xc2\x1d\x56\xc3\x99\xf1\x1e\x8e\x41\xde\xef\x4b\xe3\xc9\x47\xcd\x69\xc0\x24\x2f\x1f\x8e\x31\xa8\xd3\x9e\xf7\xce\xc9\xde\x67\x5f\x6d\x37\x29\x0f\x8f\xad\x18\xc4\x43\xae\xba\xcd\x42\x7c\xa4\xda\x46\x3e\xb9\x02\x5a\xab\xb2\xaa\x03\x60\x4e\x41\x37\x1f\x4f\x20\x4b\x09\x30\x3c\x7a\x61\xd0\x0f\xad\x0b\xec\x3a\x8a\x8f\x14\x8b\xe1\x3d\x08\x53\x79\x03\x0b\x09\x5b\x07\xc4\x47\x8a\x85\x7e\x29\x01\x68\x81\x77\xe1\xb1\xc3\x12\x9b\x91\x0c\xc4\x21\x14\x64\x20\xbe\xdd\xdc\x40\x6a\xb5\xc6\xf8\xd9\x6a\x6a\xbe\x83\xca\x72\xab\xad\xe5\x57\x5a\xa1\xc8\xae\x93\x98\x49\x36\xc1\xbf\x8b\xdd\x49\x9c\x9d\x81\x74\x42\x90\xd0\x5d\x80\xd8\xb7\x3a\x25\x5c\x73\x77\xf5\x1a\x42\xd2\x66\xa4\xa4\x10\xde\xb0\xb7\x56\xc1\xc9\xcd\x32\xbb\xf3\x35\x80\x7a\x7c\x34\xe2\xd1\x51\x8d\xa4\x9f\x17\xbd\xe3\x59\x51\xff\x73\xa2\xf7\x3c\x23\xca\x71\xb8\xa1\xe7\xe5\x66\xeb\xc0\xaf\x96\x80\x73\x5d\x23\x08\x86\x0b\xe5\x83\xc1\x45\x83\xf4\x87\xa7\x2f\xcc\x55\xbb\x2e\xe6\x71\x49\xb0\xf2\xea\xd0\x58\xf5\xed\x83\x4a\x98\x8c\x98\x99\xfe\x07\xa3\xc6\xf1\xbb\xa6\xb8\xf4\x42\xdf\x41\xd8\x9c\x49\x06\x3b\x01\x5b\x45\x7d\x3b\x0d\x29\x93\x79\xea\x42\xb1\xaf\xd5\x8d\x10\xa3\xea\x4e\xa2\x49\xbf\xb0\x6f\xac\x7a\xf0\xd6\xf4\xa5\x0d\xc6\xdf\xc3\x88\x1a\x6f\x54\x53\x4f\x2f\xe9\xff\x17\x8d\xff\x18\x8a\x43\x47\xf3\x03\xb8\x2f\x10\xc6\x80\x0a\xbd\x37\xcf\x21\xf9\x21\x06\x72\x38\xaf\x8e\x77\xb0\x73\x7b\xf4\x3b\x71\x90\xdf\x4b\x02\x42\xe0\x8c\x86\x18\x9e\x28\x41\x80\x90\x97\xb5\xef\xbb\xf2\x4a\x13\x37\xa5\xbf\xf7\x7e\x2e\xa7\x1e\x73\xd9\xd5\x06\x44\x5a\x42\xdc\x3b\x00\x4f\xc8\xab\xab\x08\x0a\x3b\x14\x0f\x06\xe0\xa8\x76\x84\xcf\x79\xb8\xf4\x63\xd4\x51\x54\x9d\x03\xf5\x83\xee\x01\x1b\x31\xa4\xe3\x0a\x1d\x62\xec\xd6\x18\x71\xa9\x05\x5c\x83\x12\xaf\x74\xc3\x5b\x49\xe2\x1b\x76\x69\x0b\x48\x9b\xa8\x1d\x74\xab\xad\xed\x37\xe0\xa7\x2a\xf6\x07\x60\x87\x56\x15\xce\x1a\xc2\xc2\x0d\xac\x1a\xe0\x4c\x6f\xe1\x86\xb6\xd7\x1d\x04\x8f\x97\x1f\x42\x0d\x6f\xb7\x3b\x28\xca\x09\x77\xa4\xf6\x79\xe2\xde\x0a\x07\x9d\x6c\x2f\x76\xd0\x7f\xf6\x62\x87\x7c\x63\x2f\xb2\x1b\x95\xd6\xa0\x9a\xe4\x46\xa0\xcd\xd7\x2e\xa4\x38\x11\x37\xc7\x31\x39\x40\xb9\x32\xab\x67\x66\xa0\x81\x99\x3f\x21\xea\x2c\x49\x0f\x94\x42\x26\x43\x50\x89\x19\x29\x88\xd4\xee\xdc\x45\xcb\x4b\x0f\x3f\x64\xf8\x9a\xaf\xf8\xa7\x48\xa4\x98\x74\x1d\x3d\xe4\xd4\x83\x3a\x54\xb1\x78\x61\xc7\x55\x07\xd3\xfb\x1d\x9e\x1c\xb2\x5f\x1c\xe2\x42\xae\xd3\x9f\x89\x70\x8c\xbe\x64\xc8\xdb\xcb\x7f\x2b\xb3\x8e\xfd\x97\x2f\xd3\x75\xfa\xf3\x43\xa2\x3f\xfc\xb3\xfc\x20\x1f\x21\xf2\xbf\x41\x94\x18\xb3\x8f\xaf\x4a\x6a\x57\x46\x1f\x99\xae\x85\x07\xe9\x69\x26\x85\xb3\x1e\x0e\xcc\x85\x53\x8a\xe3\xa8\x47\xf1\x88\x62\xca\x4b\x14\xb7\xa4\x3d\xa2\xf0\x80\x7d\xcf\x11\x94\x83\xc8\xa1\xfa\x85\x16\x7a\x1a\xf6\x6e\xc4\xb5\xf0\x7f\x6e\xaf\x75\x93\x4f\xf7\x0d\xcb\x7e\xdd\xf2\xff\x9d\xf6\x1f\x06\xb0\x84\x9d\x07\x67\x29\x69\x2f\x59\x25\x11\x79\xc1\xf0\xf5\x66\x5e\x8b\x54\x11\xc4\x03\x62\x2f\xa7\x02\xe7\x8e\x81\xb5\xd1\x75\x2e\xf2\xbc\x64\xc3\xe3\x6a\xd5\xf5\xbc\x67\x0d\xbe\x1d\xc6\xc5\x26\xaf\x68\x8a\x10\x4f\x70\x4b\x73\x93\xa6\xd6\xeb\x66\xf3\xc5\xfa\x5d\x09\x6f\x2e\x1f\xa5\xe0\x3b\xb4\x32\x1c\xfe\xeb\xec\x54\xbc\x9c\xc4\x2c\x05\x5e\xbd\x92\x11\xda\xc0\xaf\xe4\xf6\xbd\x9f\xa5\xf3\x87\xaf\x33\xb3\xd5\xdd\x52\x85\x07\x88\x6a\x27\xb3\x2f\xe1\x41\x00\x66\x2e\x0a\x58\xb4\x30\x93\x5b\xd8\x78\x4b\xb3\x10\x16\xad\x90\x58\x18\x5d\xb8\x46\xed\xb6\x2a\xdd\xb8\xc6\x5f\x15\x3d\x62\x79\xaf\x55\x15\xc1\x3d\xe5\x9d\x1b\xd6\x6c\xb6\xfe\xca\xe9\xbb\xbe\xeb\x06\x85\x34\x7b\x0f\x68\xc3\xd0\xf7\x03\x38\xde\x84\x66\x29\xd6\x8a\x66\xb9\xdb\x90\x66\x29\xd6\x96\x66\x39\xda\x9c\x26\x80\xdb\xa2\x66\x29\xd6\xa8\x56\x16\xee\xae\xbe\x1e\x4e\xd3\x43\x56\x96\xf5\x55\xe7\xe1\xae\x7f\x73\xb3\x73\x23\xe9\xba\xc7\x1c\xbb\xdb\xf6\xc8\xce\x50\xfc\x10\x73\x32\x4f\xbc\x59\x06\x9e\x99\x1c\xc2\xbd\x53\x2b\x5c\x7f\x68\x0b\x1d\xdd\xc4\xdf\x5e\x34\x9e\x70\xd4\x7f\xcb\xb9\x51\x3d\xe8\x68\xfc\x49\xce\xa3\xc6\x5b\x8f\xe8\x43\x74\x84\x6f\xfc\x6f\x68\x4e\x3c\x64\x4d\x3e\xe1\xff\x3b\x95\xe1\xee\x79\x53\x5f\xf2\xfa\xb5\x52\x8f\xe8\x61\xe1\x6e\xe8\xc4\xb9\x80\x13\xa7\x7f\x9e\x5c\x18\x2d\x27\xa7\x45\xff\x2c\x68\x29\xcf\xf2\x61\xe0\x40\x4c\x7f\x16\xc6\x4a\x63\xcc\xf4\x95\x0c\x33\x26\xcc\x50\x09\xfd\xf7\x10\x27\x06\xde\xf8\xdc\x00\x15\x71\x22\xca\x06\x2e\xf0\x44\x88\xc7\x94\x99\x9a\xb7\x82\x9a\xb7\x82\x6c\xf4\xdf\x46\xb1\x19\x91\x36\xb0\x01\xa7\x4a\x3c\x24\xcd\xe0\xa2\xff\x1e\xc2\xd4\x4c\x2e\xfa\x6f\xa3\xd8\x0c\x68\x3b\x31\x1e\x1b\x79\x23\x1f\x0b\xec\xfd\xa5\x92\x75\x5d\x6f\x2a\x2e\xd9\x81\x27\x8e\xe2\x1c\xcd\x9d\x10\x9e\x12\x69\x78\x18\x00\xd9\x50\xd1\x33\x66\xec\xa6\xca\x30\xc5\xda\x53\x81\xf5\x20\xa7\xf1\x24\x99\xc6\xe1\x51\x68\x3a\xf9\x04\x0f\xd6\x84\x58\xef\x4a\xfb\xff\x6d\x05\xd5\xbe\x2b\xa7\x67\xcc\x4e\x03\x21\x29\xb6\xe5\xe0\xce\xb3\x4a\x19\x3d\x49\x36\x06\x15\x9d\x19\x9b\x11\x72\xdb\x26\x71\xee\x48\x29\xd3\x33\xa8\xc3\x27\xcc\x4c\xc1\x2c\x4f\xd6\x25\x1a\xd5\xf7\xd3\x37\x19\xaa\x8b\xec\x96\x18\x8f\xf7\xa2\x19\x9d\x9c\x3c\x4e\x4e\xf6\x26\x34\x67\x93\xef\x35\x0c\xac\xae\xd8\x1b\x19\x3b\x4f\x8b\x7d\xf8\x4d\xde\xa1\x63\x92\x6c\x62\xfe\x55\x16\xa1\x3d\x61\x88\x6c\xa4\x0b\x09\x6c\x66\x89\x57\x00\x67\x62\xa1\x6b\x92\x80\xcf\xfb\xf2\x4d\x06\x20\x10\x48\x4f\x91\xc1\x14\x41\xa9\x05\x3b\x1b\xf2\x38\x02\xd1\xa4\x8b\x91\xb3\x63\x76\x2d\x3b\xec\xf6\x80\x45\xe8\x6b\x59\x6c\xd5\xe4\x67\x1f\x50\xc9\x85\xef\x9f\x7e\x02\x38\x75\x09\x1a\xf2\x5a\xc6\x6d\xae\xa3\x57\x10\xe3\xde\x5e\x71\x77\x1d\xec\xad\x74\xab\xa9\xed\x0d\x10\xe4\xc1\xe3\x01\x1a\x6c\xe2\xc2\xca\x81\xa2\x6b\x49\xee\x05\x43\x0c\xb1\xe7\xea\x52\x12\xdf\x11\x32\xc3\x76\x2f\x44\xa0\x92\xe6\x40\x28\x3a\x73\x0e\x84\xa3\xd2\xe7\x18\x50\x7c\x57\xbd\x69\xea\xd7\x69\xcb\x2e\x59\x93\x75\x75\xe3\xa8\x88\x54\x8a\xff\xfe\xdf\xfe\x8f\x9f\x1c\xdc\xfd\xb5\x2c\x59\x17\x81\xfc\xbf\xfe\x9f\x2e\x72\x5e\x47\x60\xfe\xbf\xff\xb7\x8b\xc8\x77\x14\x59\xde\x46\xf0\xfd\xdf\xff\x9f\x9f\x84\x9f\x48\xc6\x8f\x18\x09\x56\xfb\x79\x72\x79\x79\xb3\x5f\x23\x99\x3f\x4c\xc4\xb3\x5b\x73\xac\xcc\xda\x0b\xb7\x67\x62\xee\x9d\xf6\x7e\x88\x35\xef\x29\x3b\x0f\x04\x98\xcb\xfc\x85\x2e\x13\x68\xa7\x0c\xa2\x53\xb1\xe2\x44\x46\x24\x5c\x32\xd2\xe3\x13\x66\x7b\x1a\x8c\x9a\x5c\xef\x3b\xbc\xa2\x0e\x4b\x4c\x2c\x2a\x1f\x16\xb1\x3a\x8a\x38\x3e\x80\xc2\x89\x8b\x2d\xd6\xad\x56\x5e\x22\xb1\xf5\xd9\xa3\xbe\x9c\xda\x17\x1e\xeb\xda\x78\x9b\x8c\xdf\xff\x70\xfc\xa4\xd0\xcc\x0c\x48\x71\xb8\x38\xdb\x18\xbe\xab\x3d\xa6\x01\x0c\xf6\xe4\xb9\x58\xa3\xf6\x07\x61\x0d\x05\x85\x64\xc6\x6f\xa6\xc7\x5e\xf6\x57\xab\xac\x1b\xe6\x85\x61\x3b\x5a\x0a\xc1\x98\xc4\xf4\xb7\xe9\x99\x55\xd7\x09\x00\xd1\x27\xd4\x2a\x71\x23\x80\xb5\x7b\xda\xc4\x94\xa7\x5f\x10\x9e\x4f\x02\xdc\x51\xd2\x27\x5f\x26\xce\xf5\x62\x23\x28\x67\xdd\x70\xc0\x55\x13\xac\x86\x3d\x6a\xae\x32\xe2\xe1\xe0\xfe\xb7\x9e\xc1\x3b\x21\x29\x77\x59\xe4\x3d\x26\x63\xed\xb5\xb0\x2f\xaa\xaf\xcc\xf5\x3a\x58\x48\x73\x59\xd4\x0d\xbf\x45\x2a\xfd\xbb\x89\x74\xf3\x06\xdb\x26\x6f\xda\x59\x77\xa3\x86\xfb\xe9\x5a\x3e\x35\x34\xbc\x61\x75\xf8\x73\xf1\xf7\x1a\x4a\xab\x29\x67\xee\x0d\x7f\xa8\x5e\x62\x3c\xc1\xbd\x34\x6a\x25\x37\x7b\x12\xbb\xa2\x70\x27\x6d\x3d\x8c\x97\x25\x2f\x4f\xf0\x4b\xe8\xef\xb3\xbe\xbb\xa6\x65\xd1\x76\x93\xd9\x99\xb5\x6d\xf6\xc2\x94\xd1\x76\xf6\xe6\x32\x4b\x40\x78\x7e\xc9\x93\x0f\x20\x0e\xb9\x85\x15\x88\xaa\xb0\x4e\x20\x2d\xe4\x61\x18\xc5\x1d\xc9\x69\xe4\xbc\xf8\x56\xe4\x28\x5b\xb0\x2e\x84\xb9\x40\xe1\x82\x4e\xaf\x8e\x45\x6f\x25\xbd\x2a\xf2\xac\x16\xe2\x9f\x89\xf8\xe7\xab\xf8\x07\x37\xae\xf2\x41\x95\xe7\x89\xfa\x6f\xb6\x7e\x78\x9f\x95\xec\x1b\x2b\xe5\x9d\x2b\xdd\x1b\x49\xa6\xfb\x03\x4b\x6c\xcd\x71\x30\x8b\x6b\x5b\x4f\xde\x15\xd3\x3d\xeb\x5e\x19\xab\x24\x5e\xec\x5a\x9d\x03\x73\xf2\xe6\x9d\x59\xf3\xab\xf9\x89\x3b\x68\xf5\xbe\x28\x59\x62\xc0\x44\x64\x2c\x11\xf5\x2f\xce\x2f\xb6\x55\x15\xed\x8f\x99\xd5\x81\xbe\xc3\x9c\x94\xa6\xb7\x0f\x64\x61\x23\x22\x58\x45\xdf\xc1\x79\xce\x43\xee\xab\x89\x6d\x6e\xef\xa7\x24\x1a\x1f\x38\x68\x26\x9f\x50\x23\xce\x88\x4c\x19\x23\x72\xab\x08\xad\x41\xaa\xf7\x4b\x2c\x33\xa3\xf2\xde\x5e\x9e\x98\x2d\x13\xa5\x0f\x56\x16\x0f\xa3\xb5\x10\x2d\x37\x5c\x09\x3e\xbd\xd1\x5b\xc9\x94\x9b\xe6\xe8\x84\xec\xc4\x68\xca\x54\x53\xf0\xa8\xb6\x92\xbd\x15\xfb\x61\xb0\x38\xad\x60\x02\x51\xed\x1b\x33\xba\x8d\x45\x64\x54\x4a\x9f\xf8\x71\x09\xb4\xd2\xaf\xec\xf3\x19\xe8\x33\x51\x1e\x2b\x7c\xbf\x16\x1c\xab\xc1\x48\xb7\x01\x9d\x96\x86\x19\xc8\x60\x64\x6b\x76\xa2\x59\xa5\x19\x57\x72\x45\xb6\x8c\x69\xfc\x61\x56\x1d\x30\xb3\x23\xd0\x34\xab\x09\x02\x17\x93\x8b\x0a\xe3\x21\x04\x43\xbc\x0c\x04\x4c\xcd\x5a\x66\x26\x59\x03\x18\x29\x9e\xdb\x2e\xcc\x7c\x00\x9f\x0d\x29\x4e\x5c\x3c\xd7\xf9\x99\x9b\xac\x64\xdf\x8a\xdf\x47\x0f\xc9\x81\x04\x34\x2b\x86\x70\x50\x7f\x45\xf8\x85\x51\xaa\xbc\x43\x9a\xa9\x95\x41\x0d\x53\xa7\xea\xea\x1c\xf6\xf5\x1f\x7d\x1b\x1d\xaa\x9c\xde\xe2\x50\x10\xd4\xe6\x86\xe1\x3a\xdc\xf0\x28\x35\x31\x9f\x62\x7b\x77\x06\x6e\xa4\x7f\xa6\x02\x97\x0d\xcc\xb1\xce\xd9\x80\x5a\x16\xc9\x55\xbf\xd7\xad\x22\x62\xac\x05\xa9\xf2\xbd\x40\xe4\xdc\x10\x4c\xa7\xc8\x99\x49\x9e\x45\xf6\x1f\xd3\x57\xe6\xc8\xd6\xb1\xc7\x6c\x0e\xb1\xe9\x10\x22\xae\xac\x18\xb0\xc7\x95\x12\xe0\xd2\x8f\xa3\xda\xd4\x55\x16\x8e\x10\xeb\xa7\x49\x70\x5f\xb8\xbc\x02\x81\x99\x00\xc4\x1f\x5d\xf6\x82\xe5\x04\x10\x8a\x9d\xb3\x43\xdd\x88\x0c\x59\xd7\x2a\x67\x4d\xef\x98\x69\x72\x7e\x85\xd6\x20\x3e\x9d\xd6\x40\xb4\x5a\x6b\x10\xef\xe5\x7f\x1b\x2e\xb1\x97\x33\x51\x01\x8f\x34\x15\x9e\x3c\x8d\xbc\x74\xb5\xca\xfb\x1f\x80\x4f\x85\x4a\xaa\x60\x6d\x1b\x34\x42\x60\x24\xca\x92\xa6\x82\x08\x0c\xf1\x91\x3a\x93\x21\x9a\xae\xcc\xf2\x29\xdf\x70\x23\xbb\x77\xbb\x68\x2a\x58\x23\x03\xfc\xd5\xb1\xff\x01\x24\x88\x28\xd1\xe3\xd3\x31\x3b\x1e\x1c\xc8\x08\x89\x91\xf8\x52\x92\x08\x22\xb0\x81\x3e\x3f\x2c\x9e\x85\x91\xd4\xe8\x74\x60\xea\x71\x73\xcc\x8f\x7b\x0c\x38\x46\x66\xf7\xa6\x8d\x8f\x0e\x26\x36\xa0\x30\x4f\x97\x8f\x8b\x27\xab\xab\xd0\x40\xd8\xe3\xfa\xf8\x64\xb1\x13\x4f\x6e\x06\x65\x46\xa7\x04\x82\x08\x22\x30\x44\x4f\x37\xab\xcd\x01\x36\x75\x51\x1d\xeb\x38\x81\xc5\x93\x96\x1f\x14\x18\x12\xb9\x47\x60\x3a\x5e\xf8\xf8\x78\xcc\x8f\x8f\x18\x70\x8c\x6e\xb8\xc1\xc6\x3e\x3a\x98\x6e\x00\x0a\xf3\xc7\xd5\x62\x0e\x15\xd5\x13\xab\x7c\x3c\x66\xd6\x08\xd2\x8f\x1f\x86\x6d\x87\x1b\xe8\xec\xa3\x83\x59\x0f\x40\xe1\x71\xb1\x64\xe9\xde\x1a\xce\x44\x9c\x74\xdf\xe0\x56\x93\xab\x17\xfc\x82\x72\x23\x31\xd6\x1e\x32\x88\xd8\x90\xc0\x53\xb6\x5c\x2c\x06\xb1\xb1\x43\x15\x32\x98\x00\x5e\xe7\x75\x9f\xad\xda\x21\x01\x4e\xe8\x39\x04\xd8\x48\x42\x9c\x48\x7c\x6f\xd1\x14\x58\xdf\x5c\xa0\x57\xeb\xe0\xf0\x52\xb9\x75\x26\x8d\xaf\x68\xab\x39\x57\x67\xe8\x6b\x2f\x46\x89\x3c\x23\x46\x08\xa2\xef\x05\xd9\xfb\xc2\xb0\x81\xcd\xd7\xd7\xe6\xf2\x7d\x19\x93\xb2\xde\xdf\x33\x3e\x5d\xa8\x50\xb3\x77\x07\xce\xce\xac\xe4\x86\xa1\xc8\x8d\x71\xdf\x29\x0c\xdf\xdc\x24\x8e\x57\x74\x54\xcd\xa9\xc8\xf3\xbe\x83\x55\x6f\x1e\x8b\x37\x96\xbb\x1b\xf0\x86\xb3\x0f\xf7\x93\x9c\x7d\x79\x77\x5b\x3f\x14\xf3\xf5\xb4\x79\xd0\x61\x1c\x3c\xd0\x4d\xfe\x2e\x97\x66\x72\x25\x90\x26\x76\x4c\x20\x7f\x58\x69\x9e\xa6\xdf\x4e\xc9\x34\x99\x6f\xd2\xcb\xdb\xc3\x0e\x46\x0b\x51\x21\x81\xfc\xc4\x72\xc4\x36\x44\x84\x70\x3a\x3a\x09\x13\x6e\xc5\x65\x53\x39\xc3\xd2\x0b\xdf\xb3\x18\xe2\x56\x6e\x4e\xe0\xc8\xdf\x34\xe4\x72\x5c\x98\x25\x4c\xf7\xa5\xb6\xcb\x57\x20\x02\x53\x28\x51\x33\x90\xec\x87\x1f\xff\x45\xa6\x57\xe3\x21\x99\x46\x0b\xa8\xb8\x4c\xf3\x93\x37\x38\xf3\xdf\xe6\xdd\x05\x44\x7c\x3c\xec\xd2\xa9\x3a\x11\x7b\x69\xc2\xc9\x00\x4c\xf3\x53\x7c\x14\x26\x60\x18\x1f\x8a\x69\xa0\xfd\xe8\x78\x4c\x8b\xd5\x0f\x0d\xca\xb4\x78\xfd\xc8\xc8\xcc\xc1\x74\x20\xa9\xb8\x9d\x07\x3e\xfd\x06\xc4\x32\xda\x26\x71\x7e\x34\x3e\x31\x3f\xf4\x13\xe8\xa8\x00\x44\x57\xbc\x88\x60\x26\x3d\x11\xe2\x21\xd8\x40\xc4\x7e\x72\x9b\xcc\xaa\xec\xdb\x3e\x6b\xd4\xbf\xe1\x75\xbe\x55\x23\x70\xfb\x95\x9e\xb8\x6d\x17\x61\xed\x79\x20\x68\x0d\xfb\x69\x8a\x5e\x4b\x21\xe3\x17\x9c\x84\xec\xe0\x1c\xd5\xe9\x23\xcf\xd5\x60\x43\x46\xec\x72\x2f\xac\x02\x16\xe1\x60\xb1\xd2\x0f\xb3\xf8\xcf\x60\xe6\xa9\x55\x7f\xee\x19\xd1\x1b\xa0\xd6\x14\x6b\xf4\xff\xbb\xec\xd4\x69\x97\xed\x45\x02\x92\x21\x8c\x52\x87\x72\xb6\x87\xa6\x2e\xcb\x1e\x85\x47\x45\x2a\x9c\x9b\x39\xa6\xe4\xf5\x62\x2c\xcf\x25\xd4\x1a\x47\x8d\x12\x25\xc2\xbe\xe9\x67\x74\xf5\x97\x88\xfb\xf4\xc2\xfe\xa2\xfe\x32\x0f\xe3\x75\xea\xc8\x68\x2e\x33\xe3\xa5\xa1\x78\x2c\xf5\x8e\x8b\x5f\xc2\xcc\x14\x31\x9a\x11\x44\xa3\xf7\x7b\x17\xfd\x8f\xbd\x59\x34\xa2\x0a\x20\xbf\xb1\x95\x4c\xcf\xeb\x6b\xcd\xd3\xde\x2a\x3f\xdc\x48\x66\xec\x8e\x36\xb6\x71\x42\x2d\xcc\xee\x69\x5f\x07\x29\xc4\x85\x13\xe6\x21\x81\x48\xa0\x50\x94\xae\x3a\x14\x54\xe8\x50\x14\x36\xb7\xd9\xa3\xdb\xd2\xc5\x0a\xd5\x93\x63\x8c\x6f\x4f\x04\xed\x93\xf4\xd5\x56\x07\x7f\x9f\x9a\x02\x8c\x69\x96\x50\xcd\xee\x31\x31\x8e\x22\x2b\x5f\x79\x44\x6f\xf9\x86\x26\x49\x47\x29\x58\x42\x74\x63\xd4\x0e\xbb\x49\x7e\x44\x32\x01\x0b\x29\xd2\xaa\x23\xb0\x68\x93\x8f\x64\x81\x6b\x6e\x08\xcb\x1d\x22\x98\x78\x11\x43\x24\x88\x46\x0e\x91\x34\x4d\xef\x6c\x55\x5c\x63\x7a\x22\x63\x2d\x39\xe4\x14\x67\xc9\xfd\x38\xa1\x86\x8d\xb4\xe4\x01\xa4\x10\x97\x7b\x2c\x79\x80\x42\xc0\x92\x43\xec\x58\x4b\x1e\xc2\x0a\xd5\x33\xda\x92\x07\xd1\x3e\xac\xa6\x3e\x1b\xee\xf6\x26\x65\xc3\x43\x0d\x12\xaa\xd3\x68\x83\x12\x61\xc0\x83\x9d\x44\x0e\x47\x92\xc8\x1d\xd6\xdb\xb5\xc3\x26\xf9\x40\x86\x47\xf3\xc0\xcf\x42\x8a\xb4\xde\x08\x2c\xda\xd8\x23\x59\xe0\xda\x1a\xc2\x72\x87\x05\x26\x5e\xc4\xb0\x08\xa2\x05\x12\x4a\xdc\xd9\xb0\xb8\xc6\xf4\x44\xc6\x1a\x70\xc8\x29\xce\x80\xfb\x71\x42\x6d\x1b\x69\xc0\x03\x48\x21\x2e\xf7\x18\xf0\x00\x85\x80\x01\x87\xd8\xb1\x06\x3c\x84\x15\xaa\x67\xb4\x01\x0f\xa2\x7d\x86\xa6\xfa\x6c\xb8\xdb\xa1\x94\x0d\x0f\xb5\x49\xa8\x5a\xa3\xcd\x4a\x84\x0d\x0f\xf6\x13\x39\x22\x49\x22\xf7\x78\xe0\x8e\x35\x36\xc9\xc7\x67\xd8\x82\x38\x91\x16\xdc\x05\xc5\x67\xcb\xb1\x3c\x70\x7d\x0d\x20\xb9\xe3\x02\x11\x2f\x62\x58\x84\xb0\xc8\x51\x31\xcf\x16\x9b\xe5\xf2\xee\x86\x25\xe6\x7c\x41\x66\xac\x11\x07\xbc\xe2\x6c\xb8\x17\x25\xd0\xb8\x91\x16\xdc\x8f\x13\xe0\x71\x8f\xfd\xf6\x13\x08\x98\x6f\x80\x1c\x6b\xbd\x03\x48\x81\x3a\x46\xdb\xee\x10\xd6\xe7\x28\xa9\xcf\x78\x3b\x7d\x49\xd9\xee\x40\x8b\x04\x6a\x75\x87\x3d\x89\xb0\xdd\xa1\x5e\xf2\x0d\x45\x8a\xcc\x1d\xc6\xdb\xb5\xc3\x90\xba\x88\x23\x09\x59\x0c\xb3\x62\x22\x48\x69\x0c\x86\x88\xc3\x1a\x83\xa1\xa3\xcd\xc6\x20\xe9\x30\xa4\x31\x48\x3a\x02\x68\xac\xd1\x84\x0b\xa5\x88\xb7\x99\x46\x54\x2e\xd8\x14\x31\x2b\xc6\x30\x1b\x7c\xdc\x47\xb4\xbd\x63\x61\x70\x21\x23\x8c\x4c\x04\x22\x69\x67\x16\xf3\x6c\xfd\xb8\xd8\x7d\x60\x23\xc9\xe6\x1e\x37\x8b\x85\xb0\xc2\xcd\x13\x39\x97\x05\xd1\xc2\x9c\xee\x99\xd1\x82\x34\x02\x93\x9a\x8d\x1f\x3b\xaf\x85\xf1\xc2\xf5\x8d\x9e\xdd\x22\x10\x47\x28\xde\x08\xed\x08\x75\x30\x35\xc7\x85\x5b\x27\x5c\xbd\x3b\xac\x46\xc4\x4c\x17\xd1\x6f\x23\x4c\xe8\x87\x26\x3b\x27\x84\xf9\xdd\x9a\x86\xe2\x42\x72\xa3\xa7\x2e\xff\x2c\x17\xd3\xde\x01\x06\xd4\xb2\xda\x3f\xa1\x22\xcb\x77\x47\xb6\xa8\xd5\xbb\x1f\xcb\xb3\xfb\xba\x5e\x1d\xf7\x1f\xb1\xcc\x80\x75\xec\x06\x91\x07\x25\xd0\x24\xd1\xdb\x43\x3e\x9c\x00\x8f\xfb\x36\x87\x7c\x04\x82\x7b\x43\xd5\xf8\xc5\x45\x00\x29\x50\xc7\x11\x1b\x43\x7e\xac\x11\xaa\x15\xab\x02\xde\x8e\xa4\xac\x6e\xa0\x39\x02\x55\x1a\x3b\xfe\xa3\xb6\x84\xfc\xfd\x13\x63\x69\x01\x8d\x3b\xcc\xac\x6b\x31\x4d\xea\xc4\x9d\x09\xaf\x99\x0d\xac\x29\xfc\xcb\x8f\x98\x66\x0e\x30\xc0\x95\x34\xb4\xd2\x71\xc6\x02\x22\x5b\xc4\x58\x08\x61\xfd\x40\x33\x0b\x58\xc7\x99\x59\x2f\x4a\xa0\x49\x22\xcd\xac\x1f\x27\xc0\xe3\x1e\x33\xeb\x27\x10\x30\xb3\x00\x39\xd6\xcc\x06\x90\x02\x75\x8c\x36\xb3\x21\xac\xfb\xcc\xac\x57\x05\xbc\x1d\x49\x99\xd9\x40\x73\x04\xaa\x34\x76\xfc\x47\x98\xd9\x50\xff\xc4\x98\x59\x40\xe3\xd3\xcd\xec\xa8\x97\x21\x1c\xb4\x48\x63\x8b\x42\xc7\xb4\x77\x98\x0d\xae\xb0\x11\x7b\x38\xce\xd0\xc0\x85\x8c\x18\x1d\x11\x88\xf4\x1a\xf0\xf9\xf9\xb0\xfc\xd0\xe6\x83\xcd\x3d\xce\xfc\x86\xb0\xc2\xcd\x13\x69\x84\x83\x68\x61\x4e\xf7\x98\xe2\x20\x8d\x80\x35\xb6\xf1\x63\x0d\x72\x18\x2f\x5c\xdf\x68\xb3\x1c\x81\x38\x42\xf1\x46\x68\x47\xa8\x83\x29\xfb\x1c\x6e\x9d\x70\xf5\xee\xb0\x1a\x11\x86\x3a\xa2\xdf\x62\x6c\xb5\x4d\xe6\x9e\xcd\x07\xc7\xec\x82\x38\xc8\x31\x4f\xf1\x38\x68\x91\xe6\x1a\x85\x8e\x69\xf8\x30\x1b\x5c\x91\x23\x76\xcf\xdd\xa8\x5e\x54\xc8\x98\xb8\xde\x30\x22\x1d\xd9\xfb\xfc\x34\x87\x71\x48\xa3\xc3\xc7\x2d\xee\x91\x01\xe4\x01\xac\x70\xf3\xc4\x06\x91\x87\xd0\xc2\x9c\xee\x0a\x24\x0f\xd1\x08\x85\x92\x5b\xf8\xd1\xc1\xe4\x41\xbc\x70\x7d\xe3\x03\xca\xc3\x88\x23\x14\x6f\x84\x76\x84\x3a\x98\x32\xd7\xe1\xd6\x09\x57\xef\x0e\xab\x11\x13\x56\x1e\xee\xb7\x18\x73\x6d\x93\xb9\x27\xaa\xc5\x31\xbb\xee\xc1\x68\xdc\xbd\x7c\x1b\x2b\xd2\x58\x63\xc0\x31\xad\x1e\x64\x82\x2b\x71\xf8\xa8\x17\x89\x1b\x40\x24\x8c\x8a\x1c\x08\xe1\x91\xc3\x65\xbf\x5a\x66\x8b\xe3\x47\xec\xb4\xc5\x3c\x36\x30\xc5\x8b\x14\x6c\x9a\xe8\xe0\x14\x3f\x56\x90\xcf\x7d\x01\x2a\x7e\x12\xc1\x10\x15\x80\x1e\x1f\xa4\x12\x40\x0b\xd6\x75\x44\xa0\x4a\x08\x6f\x84\xba\xc5\x2b\x45\xa0\x63\x29\xdb\x1c\x6c\x98\x60\xd5\xc6\xdb\x88\xa8\x70\x95\x50\x7f\xc5\xd8\x65\x8b\xca\x1d\x66\xd9\xb5\xaf\x8a\xfe\x2f\x3c\x95\x61\x56\x54\x44\x32\x78\x70\xd7\x18\xb9\xf9\x69\x26\x96\x97\x12\xf3\x7c\xf8\x3c\x2f\xf3\x2d\x2e\x45\xb3\x59\x57\x9e\x90\x40\xde\xaa\x9d\x38\xdf\xbb\xfa\xa2\xd2\x49\xa3\x29\x0c\x52\x9d\x0f\x63\x99\x52\x54\x6f\x43\x82\x5b\x1c\x80\xac\xc0\x74\x44\x0d\x7a\x49\x45\xc2\xd9\x53\x77\x2e\x39\x49\xd9\x59\x43\xb9\x99\x6b\x51\xb6\x27\x01\x2d\x25\xb7\xd2\x55\x2b\x1c\x30\x25\xa8\x46\xe3\x57\x7b\xc3\x5d\x6a\xa5\x79\x71\x3a\x18\xdc\x14\xbe\x81\xa7\x04\xbe\xbd\x3a\xcf\xbe\xe8\xbf\xbf\xeb\x9b\xef\x4a\xb6\x6b\xd3\x4f\xfd\x44\x2e\x0c\x90\xd0\x99\xbc\x54\xac\xae\xeb\x23\x6f\x1a\x8b\x54\xe7\x80\x97\x78\x22\xd1\xff\xb0\x26\x99\x50\x9a\x13\xe5\x17\xfb\xd7\xe9\xcf\xc9\x34\x79\xba\xbc\x3d\x60\x89\x2a\xf0\x34\x13\xe2\x3b\x87\x9d\xe6\x57\x99\xa5\xef\x69\x73\x6e\xcd\x82\x4b\x53\x5f\x58\xd3\x7d\xdf\xda\x22\x4e\xea\x4b\x76\x28\xba\xef\x13\x4d\xdd\x44\xeb\x8a\x73\xaf\x02\xc7\x6b\x25\xf2\x11\xb0\xac\x65\xd3\xfa\xda\x81\x14\x0d\x6e\x43\x18\x8f\x95\xcf\x1f\xb8\x66\x1a\xb5\xdb\x5c\xde\x1e\x02\x48\x0b\x07\x69\x1e\x46\x5a\x5a\x48\x5f\x93\x95\x8b\xe4\xcd\x8d\x91\x4e\xfa\x9f\x59\xba\xb6\xb1\x8c\x29\x1a\xa9\x9e\x9b\x37\xe4\x9f\xbf\xac\x2f\x6f\x56\x96\x90\x68\x92\x8b\x87\x9b\xec\x93\xc1\x6a\x04\x91\x96\x84\x1c\x53\x53\x90\xa9\x25\x89\x93\xa3\xff\x1d\x9b\xf1\x44\xd0\x85\xb4\xe6\x68\x1a\x7a\x32\xe9\xbc\x2f\xe5\x3c\xe5\x15\x60\xde\x54\x46\x38\x2b\x99\xeb\x8d\x04\x83\xdf\xc5\x96\x3c\xa8\x29\x9d\x8a\x0a\x80\xf1\xe4\xe4\x66\x66\x13\x95\xd5\x97\x72\xcb\x6e\xc6\xeb\x65\x56\x65\xd9\xdb\x25\xe3\xaf\xb8\x92\x09\x15\x1c\x94\x2e\xdb\x93\x69\x2e\xcc\x87\xc8\xb0\x8c\x09\xd0\x94\xf3\x21\x22\x3a\xc7\x1a\x59\x06\x2f\xd7\x51\x33\x4b\xa9\xc6\x46\x9e\x4b\x93\x49\x2b\xe8\xe6\x77\x18\x5a\xc9\x30\xda\xee\x7b\xc9\xb6\xbc\xa2\x16\x4d\x69\xa2\x87\x34\x5c\xf2\xbc\xc5\x57\xdf\xa5\x59\x5f\x90\xe7\xd7\xdb\x0b\x7c\x10\xc0\xa7\x0e\x16\xe2\x61\x25\xcb\x51\xba\xb9\x8f\x32\xc4\x3e\xfc\x60\xbb\x5c\x40\x47\x41\xb2\x5b\x2b\x7f\x72\xa3\x86\x1e\x20\x73\xcf\x63\x07\xfc\x0f\xfa\xad\x03\x6f\x7a\xf1\x79\xba\x58\x1a\x2b\x39\xd3\xd9\xb3\x9e\x2c\x41\x17\xb0\xc0\xe6\xf4\x0e\x00\xac\x7f\xf0\xf1\x32\xd3\xa8\x45\x3c\x76\xf4\x74\x79\x4b\xfa\xf9\x8b\x7e\xa8\x63\x78\xe1\xc1\x20\x3d\x73\x33\x9e\x81\x4a\xd9\xfe\x9d\x78\xe4\x0d\x75\x2e\x45\xd1\x87\x5d\x4c\x49\x26\xe4\x68\x0a\xb0\xcf\x72\x37\x25\x53\xf9\xca\x01\x02\x90\x98\x8d\xe6\xa9\x3e\x80\x0b\xa6\x85\x21\x33\x21\x49\x4b\x67\x65\x7a\xa3\xdd\x61\x29\xff\x58\xa7\xd8\x42\xb3\x5c\xe3\x51\x1b\x1d\x13\x63\x65\x37\xc1\x1a\x4b\x2c\xe0\x82\x4e\xb5\x27\x53\x8e\xd9\x31\x86\x61\xfe\xd0\x56\x44\x34\x1d\xe7\x11\xa3\x08\x82\x11\x3b\x05\x24\xb8\xbb\x19\x81\x82\xd2\xdb\x1d\x24\x78\xc4\x5c\xf7\xef\x8a\xf3\xa5\x6e\xba\xac\xea\x42\x6d\x8e\xaf\xa7\xc7\x3d\x87\x73\x17\x0b\xff\x4e\xaa\xcf\x45\x92\xab\xa9\x48\x47\x31\xd6\x4e\xbb\xde\x12\xa2\xe9\x34\x34\x7f\xb6\x0a\xd9\xdb\x18\xbc\x60\xe9\xf4\xce\x97\xdc\xe9\x1d\x72\xf8\x7d\xe1\x79\x39\x27\x53\xfe\xcf\x43\x1c\x07\x2d\x63\x64\x9e\xb1\x21\x37\x57\xb2\x96\x19\x56\xad\x8c\xa3\x3b\xf3\x91\x2d\x68\x89\xfb\x99\xe9\x09\x9d\x98\x86\x77\xb6\xd0\x8e\x75\xc4\x75\x3c\x37\x6a\x50\x3a\x2f\x9a\xc1\x89\x3a\xc0\xa6\x2f\xda\xd7\x6f\x2c\x1f\xcd\x4f\x63\xea\x25\xcf\xdc\x7e\xc2\x93\x2f\xf5\xd1\xb5\x4d\xfa\xf0\x4e\xef\x6e\x99\x7d\x23\xbd\x42\xf0\x12\x1c\xe8\x90\x74\x48\x1c\x99\xd8\x99\x23\xa5\x49\x15\xaf\xe3\xba\xaf\x8b\xfa\xd6\xe9\x5b\xb8\xee\x22\x17\xf0\x62\x7e\xe0\x1c\x8c\x37\x06\xa6\xb3\x25\xcf\xa8\xab\x9c\xbb\x79\xaf\xaf\x2a\x5b\x25\x74\x77\xc8\x34\x74\xef\x70\x2e\xf1\x24\xec\x03\xb9\xdf\x80\x8e\xb1\xca\x7d\xe6\x50\x3d\xda\x42\x6f\x8b\x0c\x23\xc6\xf7\xc0\xda\xe7\xa7\xbb\x73\x9d\x3c\x7c\x28\x01\x87\x17\x79\x47\xcd\x79\xac\x2e\x25\x93\x87\x3a\x6f\xd3\xc5\xf8\xf1\xf0\x45\x36\xec\x05\x63\xaf\x35\x47\x5e\x5d\x0b\x60\xdc\x35\xc5\x7c\xfa\x5c\xe2\x0e\x7c\xc7\x62\x22\x96\x32\xa6\x47\xbd\x4f\xef\xc1\x21\xad\xb7\x57\xd0\x01\xad\x37\x91\xfa\x7e\x4d\xbe\x26\x5f\xa6\xbd\xdb\xf6\x80\xdb\x20\xbe\xbf\x32\x6e\x07\xce\xd9\x70\x43\x1b\x47\xbc\x4f\x83\x3c\xdd\x68\xad\xee\xec\x67\x3f\xd5\x92\x4b\x1d\x31\x24\xe8\x7e\xad\xb1\x36\x83\x00\xe0\x45\x9c\xa9\x78\x87\x84\xa6\x69\xba\xab\x18\x49\x6e\x9c\x80\x65\x91\x24\x89\x25\x4a\xce\xda\x5f\xbb\xfa\x82\x2f\x17\x64\xe1\xc7\xd7\x4b\x8a\x50\x70\xc5\x24\x01\x3f\x6d\xcd\xa4\x18\x07\xb6\xea\x35\xdc\xe8\xd5\x89\x8d\x68\xad\x4f\x82\x5b\x6e\xd0\x39\xb6\x52\xd1\x11\xd8\x22\x8d\x28\x37\x2e\x0f\x14\x25\x13\x26\x90\xbe\xfc\xce\xa5\x49\xd4\x99\x28\x69\xac\xde\xc5\x63\x3e\x09\x7c\x78\x91\xef\x41\x64\xb7\x61\x0c\x6f\x87\xde\x4f\x66\xf3\x36\xe1\xbb\xe1\x45\x35\xad\xaf\xdd\xfb\xac\xa8\x2e\xd7\x2e\x74\x07\xf3\x2b\xf4\x9b\x7b\x0e\xdc\x8b\xaf\x5f\x5e\x4a\xc6\x79\xb2\xb7\x2e\x6b\x58\x76\x43\x92\x9c\x0e\xcf\xd1\x5b\xef\x4a\xa9\x5d\x9a\xa9\x5a\xf6\x0d\x90\x33\xcf\xdb\x3c\x10\x8a\x7e\x9e\x07\xc2\x51\x2f\xf4\x0c\x50\xd6\xd3\xfa\x2d\xfa\x0c\x5c\xcc\x6b\xc7\xc6\x9b\x5a\x2a\x95\xf6\x27\xbe\xe4\x8f\x25\x41\xb6\x5d\x47\x64\x3b\x13\x7f\x13\x16\x6c\xa2\x99\xcf\x01\xab\xd4\xd3\x7c\xb5\x41\xed\x94\xc3\x8d\x4a\xee\xf6\xc9\x9d\x59\xb0\x4d\x88\x15\x3b\xc7\x56\x4e\xd2\x78\xa3\xab\x9c\x37\xb3\xd6\xce\x26\x22\xff\x44\xf4\x87\xda\x0c\x14\x9b\xca\x68\xef\x54\xac\x14\x49\xe6\x13\x3e\x1e\xfe\xd2\x7d\xbf\xb0\x3f\x1f\x4e\xec\xf0\xeb\xbe\x7e\xfb\xeb\x44\x42\xf0\x17\xb1\xed\x17\x1f\xa1\x12\xe9\xee\x35\x17\xeb\x44\x31\x4f\x81\xde\xaf\x3e\x90\xf2\xad\x07\x57\xe5\x4e\xb7\xf4\x87\xe0\xa8\x8a\x30\x6e\x7c\xfd\x41\xe0\x20\x5c\x7a\xa5\x24\xb8\xa8\x22\x8c\x4b\x5f\x86\x71\xe1\xdf\x5d\x2e\x4a\xd3\x09\x4e\x66\x31\xc6\x4d\x95\x63\x1c\x75\x19\x47\xbc\xd5\xd7\xae\xd7\xec\x7e\x2a\xbd\x6f\x2c\xc2\x88\x04\xf5\xd6\xdb\x90\xa9\x5d\x3e\xa5\x61\xb7\xac\xdc\xf2\xb1\x9b\xc2\xfd\xac\xe5\x95\x4e\x30\x60\xb7\x5f\xf7\x3f\xf6\x93\x76\x71\xbd\xe8\x69\x76\xd9\x36\xd8\xeb\x3f\x2e\x75\xaa\x57\x7d\x6d\xaf\x0f\x4b\xb4\x15\x2a\xaa\x96\x75\x09\xf9\x8e\xfe\xe2\xc1\x61\xfc\x97\xbc\x68\xfb\xf5\x79\xfe\x57\x87\x37\x51\xa4\xd8\x0f\xc5\xa1\x13\x06\xe7\x23\xb4\x9a\xb2\x54\x3e\xd3\xa7\x7c\xf3\xd9\xfa\x3d\x4e\x75\xdc\x47\x00\x6d\x8b\xc6\xbf\x61\x2b\x2c\x64\x70\xcb\x03\x7b\xfa\x2a\x8f\xef\x31\xa7\xa3\xe8\xd9\xde\xc2\x9d\x58\xd6\x8b\x30\x4c\xf1\x7c\xb1\xa3\xde\x55\x9c\x64\xa6\xa9\x94\xdf\xf8\x4b\x82\xee\x77\xda\x69\xc1\x4c\xda\x0d\xea\x34\xb2\xbe\x79\x77\x66\x67\xbe\x98\xef\x5b\x64\xcb\x9b\x25\xea\x09\x59\xd3\x17\x81\xe8\x36\xf9\xa4\x2c\x22\x8d\x00\x7d\x08\x37\xe6\x51\x16\xb4\x76\x68\xc6\x7a\xcf\x6e\x88\xf4\x03\xde\x51\x39\x45\xe1\xc2\xd1\x4f\x59\xb0\x04\x9e\x5a\xe0\x25\x6e\xe8\x5b\x89\x79\x94\xe5\x89\x87\xef\x3c\x0a\x89\x57\x9d\x7a\xe4\xc7\x95\x9f\xa4\x43\xd5\x4b\x2f\x51\x47\x89\xea\x62\x18\xf4\x1d\x81\x5c\x68\xb4\x56\x7a\x2f\x4a\x89\x29\xc7\xa0\xf3\xf8\x2a\xff\x1a\xfb\x9a\xa6\x31\x0e\x27\xf6\x98\x16\x7f\xf2\x18\xa5\xc8\xfd\x60\xe2\x35\x53\xb0\x23\x89\xbc\xdc\x60\x1a\x03\xe3\x29\x52\x4b\x20\xac\xa8\x17\xce\xfc\x8e\xbf\x44\x6f\x31\x92\xf4\xdc\x97\xe6\xed\x67\xc2\xd4\xeb\x17\xc6\x22\x80\xbb\xb7\xfc\xc3\xab\x3c\x83\x4a\x53\xcb\xdd\x5d\xac\xd1\x57\x67\x8d\xd6\x74\x9e\x6a\xee\xbb\x15\x46\x90\x81\x9d\x3a\xd2\x55\x35\xa9\x26\x59\xb0\x97\xa0\x0a\x4c\xe7\x97\x37\x20\x29\xa4\x46\xc6\x29\xc0\x10\x19\xc7\x9d\xe8\x29\x60\x0f\xf3\xc2\x32\x69\xf4\x1d\x77\x41\x2b\x02\xb6\x6e\x81\xdd\xe2\x5d\x5a\x21\x6f\xb4\x98\x9d\xc1\xab\x78\x2d\x07\x7b\x30\x31\x3f\xf1\x27\x95\x91\xd9\x15\x08\xf8\x8b\x7a\xaf\xda\x63\x7a\xcd\x40\x4e\x03\x95\xdf\x0b\x68\xb2\xcb\x45\x05\xc6\x80\x69\x05\x80\xc1\x1e\xe0\x1b\xc8\xe8\x9c\x0c\xdb\xdf\x42\x4f\xcc\xf5\x08\x6c\x72\x30\x43\xbb\x73\xb3\x15\x5b\xf8\x6e\x12\xc2\xdf\xdc\x1a\xc6\xca\xea\xa2\x97\x85\x73\x7b\x4d\x88\xad\xab\x76\xdf\x58\xd3\x15\x87\xac\x94\x5f\xbb\xfa\xa2\x1a\x90\x9d\xa1\xfb\x64\xca\x91\xcc\x8e\x99\x61\x03\x8b\xea\xc4\x9a\xa2\x03\xec\xe4\xb7\x77\xf8\x26\x0b\x3f\xe3\x9e\x1e\xb2\xb2\xac\xaf\x72\x0d\xa9\x8a\x9c\xc5\xe5\xf4\x5c\xff\x86\x7d\x6d\xdd\x8f\xce\x87\x70\xb8\x28\xdc\xe5\xf0\xbf\x45\x68\x3f\x5d\x67\x47\x8b\x62\x0e\x20\xb7\x92\x91\x13\x82\x34\x25\x77\x6e\x65\x20\x16\xc6\xed\x55\xc9\xa4\x2c\xec\x5d\x5d\xf9\xd9\x50\xdc\x0c\xb7\x3d\x50\xf7\x95\xf5\x90\x23\x98\xde\xf1\xb0\xa8\xc0\xd9\x29\x32\x0a\xab\xaf\x92\x1b\xec\x8b\xbe\x8d\x44\xdb\x24\xc4\x00\x71\x43\xe0\x7d\xb4\x10\x7b\x06\xdc\x20\x23\x76\xd2\x49\xaf\x81\xc4\x9e\xf5\x83\x08\xcc\xa1\x70\xc7\xc2\x86\x1c\x54\x08\x6c\xa2\x0f\x70\xc0\xc9\xba\x96\x84\x7b\x36\xc0\x0a\xff\x07\x01\x54\xb2\xbf\xdb\xab\x0b\xf7\xec\xd3\xbb\x81\xa5\xa6\x75\x87\x0e\x5c\x26\x63\xca\x61\xa3\xd8\xca\xe9\x3b\xf4\xf3\x69\x99\x37\xb2\x42\xb1\x3c\x5e\xcb\x92\x2b\x5d\x3f\x54\x3c\x67\x9f\xf6\xf6\x2a\xbe\xcd\x20\x3f\x22\xfa\x3d\x28\x36\x1c\xbe\x08\xe9\xd0\xe9\x1a\xba\xe3\xa0\xcf\x0c\x1d\x7a\x65\xf1\xb5\x2c\xac\xb3\x98\xcb\x1b\x02\x66\xea\xe7\x50\x41\xa3\x8b\xd3\x84\xdf\x85\xc0\x50\x07\x85\x75\x30\xc5\xfd\x09\x8e\x8f\x60\x06\xba\x3a\x6e\xa5\xac\x6b\x3f\x7f\x9f\x9d\x58\x53\x27\x6a\xcc\x3a\xdb\xe2\xd7\xd2\x72\xe0\xc4\x32\x56\x41\x51\xdb\xdb\xaa\x9c\xde\xd8\x56\x10\xd4\x96\xb6\x78\x7d\x0f\x1a\x63\xa1\x63\xfb\xac\x2d\x5a\x15\x2c\x8c\x7a\x38\xda\xb9\x92\x31\xc2\x82\x96\x10\xa8\xde\x17\x25\xfb\x45\x7e\xea\xbf\x54\x59\xd3\xd4\xaf\x83\xa5\x0b\x80\xf7\xfa\x6f\x98\x45\xd3\x99\xf2\xe2\x75\xa7\x86\xb1\xe9\xbf\x5e\xb3\xa6\x63\x4d\xeb\x50\x78\x5c\x07\x09\xbc\xd6\xd3\xee\x54\x34\xb9\x8b\xbc\xd9\xcc\x36\x9b\xcd\x26\x44\xe1\x94\x95\x47\x07\x77\x1d\x94\xbc\xae\x98\x60\xec\xe0\x2e\x97\xb3\xe5\x72\xb9\x8c\x21\x20\x2b\xee\x90\x58\x04\xeb\xdd\x63\x1f\x8b\x63\x77\x72\x71\xc3\x8d\xfe\x5a\x0b\x5c\xb7\xcd\x56\x91\x3d\x46\xa0\x6f\x82\xe8\xc7\xfa\xda\x50\xd8\x4f\xe1\x46\x3f\x1e\x5b\xd6\xd9\x5a\x63\x1a\xa5\xb0\xc6\x28\x1a\x83\xe2\x98\xf8\x91\x4a\x23\x89\x70\xdd\x31\xd1\x23\xf4\x46\x60\x0e\xea\x63\xa2\xc7\xaa\xce\x40\x43\x69\x90\x49\x25\x42\x7b\x06\x02\x42\x89\x00\x7a\x74\x37\x0c\x7a\x64\xe2\x87\x75\x08\x74\x23\x42\x21\xac\x46\x92\x82\xa9\x4d\x26\x81\xb0\x26\xcd\x5d\xed\xe3\x4d\x2f\xfe\x2f\x92\xfd\x1c\x32\x1d\x41\x60\xe1\x1a\x4b\xa1\x78\xfc\xff\x1e\x23\xf9\x2f\x00\xff\x51\x14\x96\xf7\xd8\x1c\xc1\x75\x39\x52\xd9\x56\x94\x85\x1c\xd5\xd6\x2b\x6c\xa0\xc4\x51\x58\xbb\x66\x6e\x3e\xbe\xb1\xd7\x50\xc9\xc7\x50\xd8\xdc\x33\xbf\x08\xae\x9b\x91\xe6\xe5\xd1\x65\x75\x87\x62\x3f\x42\xae\x63\x28\x3c\x51\xf3\xf0\xa8\xc6\x7e\xc2\x8c\x72\x1c\x85\xe7\x3b\xbc\x08\xc9\xf5\x79\xe4\x54\x32\x4f\x5d\x2b\x72\x87\x6a\xcf\x53\x68\x47\xc6\x90\x98\xbb\x86\xec\xf9\x0e\xe5\x9e\x43\x53\x36\x8a\xc4\x1c\x31\x66\x61\xcf\x4f\x31\xb6\x6c\x18\xf5\xde\xbd\x73\xdc\x63\xbb\xaa\x92\x85\xeb\xb1\x2a\xf7\xd4\x01\x40\x64\x75\x5d\x52\x0a\xcb\x50\x0e\xe8\x86\x52\x08\xb6\x63\xa1\x5c\x4f\x0a\x7e\x0d\xa5\xd2\xfe\x02\x05\x6f\xbb\x0e\x96\x8b\x49\xa1\x2d\xd6\x0e\x06\x9f\x4f\x49\xf8\xd4\xa9\xb7\x98\x7f\x29\x84\x15\xd6\xba\x7e\x94\x0d\x44\x31\x26\x79\x0a\xe3\xc9\x6a\x2c\xcc\x4d\x54\xb8\xc4\x10\x47\x5d\x43\x0c\x07\xeb\x48\xc3\x1d\xc4\x50\xec\xbe\xb4\x5c\x40\x0c\x05\xed\x4e\xc7\xed\xc3\x30\xed\x1e\xb5\x5c\x3d\x14\x05\x6f\x3e\xa7\x6f\x09\x2f\x8f\x70\xe9\xd0\xc6\x43\xb1\x90\x1e\x26\xbc\x39\x6e\x6f\x48\x2d\xc0\xec\xa6\x69\x6b\x50\xe2\x14\xd2\x82\x34\x18\xe8\x6c\x64\xba\x65\x18\x1f\x1a\x6b\x19\x3b\x36\xa5\xfb\x15\xd1\xe9\xab\x80\x95\xa0\xdb\x68\xe5\x51\x46\x04\x6b\x4d\x0e\x7b\x74\x06\x31\xdd\x29\x54\xa9\x48\xac\x4d\xac\x9d\x94\x6e\x53\xc4\x30\x7c\x24\x49\x86\x14\xe9\x11\xa5\x4e\x62\x3d\x05\xe6\x04\xba\x91\x9e\x3c\x06\x08\xc1\x7a\x8e\x9c\xad\x94\xbb\x13\x61\x12\xe7\x29\x39\xda\x42\xaa\x34\xa0\x86\xbd\x1b\xe1\xca\x50\xac\x70\x77\x04\xb8\x2f\x18\x2b\x1a\x6d\x4e\x0f\xee\x14\xd5\xa7\x39\x3e\xa6\x7b\xe0\x31\x91\x20\xb6\xd3\x32\x71\xdd\x98\x2e\xdb\x97\xac\xa3\xdd\x98\x89\xed\xd6\xd8\x08\x51\x6e\xcd\x84\x76\x78\x08\x7a\xa4\xc3\x33\xc1\xdd\x20\x82\x0c\xe5\x06\x4d\x6c\xb7\x88\xc0\xa7\xdc\xa2\x09\xea\x2b\x11\x44\x02\xbe\x92\x4d\x4b\x4d\xb6\x04\x35\xca\x85\xb2\xc9\x88\xe9\x97\x22\x42\xf9\x55\x76\xf3\xca\x69\x92\x20\xe3\xf1\xb6\xdc\x2e\xf7\x93\xa2\xbd\xb0\x09\xe1\x9c\x11\x84\x62\x9c\xb3\x49\xd0\x7b\x93\xc4\xc7\x78\x6f\x18\x51\x47\x41\x47\xb8\x76\x08\x3d\x53\x55\x47\x78\x7c\x08\x25\x47\x69\xc7\x7b\x83\x04\x55\x4b\x7d\x47\xf8\x8a\x04\x41\xa0\xc8\x63\xfc\x48\xa2\x43\xa0\xfa\x8c\x73\x32\x49\xc5\xa1\x89\x06\x7d\x50\x84\x26\xa2\xe6\x3e\x0f\x75\x02\xdc\x55\x6a\x5c\x84\xe6\x4f\x44\x8e\x39\xca\x9d\x74\x61\x27\xc0\x9f\xa5\x66\x8a\xa0\x3f\x8b\x08\xb2\xc0\x04\xf1\xf8\xb8\x13\xe0\xf0\x46\x5a\x52\xe9\xf0\x22\xec\x97\x11\xda\xbc\x9a\x00\x8f\xd8\x3f\x17\x78\x3c\x62\x84\xfd\xca\x33\x48\x31\x2f\x79\x02\x5c\x66\xca\x76\x07\x5d\x66\x44\x92\x35\x3a\x6c\x68\x37\x7a\x02\x7c\xea\xc8\x49\x56\xfa\xd4\x08\xfb\x4d\x84\xf1\x7b\x9c\x00\xa7\x9b\xe2\x19\x74\xba\x11\xf6\x8f\x28\x7b\xda\x11\x9f\x00\xaf\xdc\xef\xa2\x78\xbc\x72\x44\x92\x27\xcf\x7c\x82\x79\xea\x13\xe0\xb6\xc7\xf9\x5c\xca\x6d\x47\xd8\x3f\x47\xcc\x8f\xf3\x74\x02\x1d\x7b\xca\x2e\x85\x1d\x7b\xcc\x32\xa5\xa8\x69\xf2\x78\xfb\x13\xe8\xfb\x13\xd2\x44\xf8\xfe\x98\x34\xa8\xa1\xf4\x2d\x08\x26\x70\x79\x10\xe9\x55\xeb\xe5\x01\x26\x03\x6e\x23\xcd\xad\x51\x1e\xe9\xd5\xa3\xc8\x6b\x92\x0f\x37\x90\x98\x22\x32\xb9\x91\xbb\x86\xe0\x29\x61\xe8\x9d\x50\xab\x3c\x6e\x23\x14\x47\xa2\xf7\x41\x71\x78\x72\x1b\x14\x07\x27\x77\x41\x71\xf0\xd0\x26\x28\x8e\x45\xee\x81\x12\xe0\xe4\x16\x28\x0e\xef\xdb\x01\x25\x1a\x89\xde\x00\xc5\x11\xa2\xf6\x3f\x05\xea\xa8\xed\x4f\x17\x25\xb4\xfb\xe9\x62\x84\x36\x3f\x5d\x8c\xc8\xbd\x4f\x17\x31\xb4\xf5\x89\x60\x84\x76\x3e\x5d\x94\x88\x8d\x4f\xa4\xd9\x82\xfb\x9e\x2e\x8e\xb3\xed\x49\xf4\x7d\x70\xd7\x13\x21\x4d\x6f\x7a\x12\xb6\x21\xbc\xe7\xe9\x72\xf1\x6d\x79\xc6\x8d\x44\xed\xec\x85\xba\x7a\xe5\x37\x08\xbe\xfd\x4e\x52\xff\xd0\xed\x4e\x62\x88\x87\x77\x3b\x11\x45\xf2\x6c\x76\xc6\x59\x43\xed\x83\x85\x06\xdd\x23\x45\x30\xbc\xd3\x89\xd0\xf6\x6c\x74\x7a\x8d\xbe\x6f\x9f\x93\xb4\x34\xe8\x36\x67\xd4\x5c\x34\xb8\x46\x21\xc3\xd7\xfb\x2e\xf8\xd8\x8a\xd8\xe3\x44\x46\x97\x6f\x8b\x13\x67\x14\xb3\xc3\xe9\x32\xf2\x6e\x70\xc6\x4d\xf2\x86\xaf\xe2\x8e\xdf\xf0\xf6\xa6\xce\x20\xe7\xf8\x20\x2a\xf1\x03\xed\x85\x38\x10\x71\x7e\x08\x85\x46\x7b\x22\x14\x06\xe9\x8b\x50\x08\xa4\x37\x42\x21\x84\xfc\x11\x0a\x8f\xf4\x48\x48\x04\xd2\x27\xa1\x30\x7c\x5e\x09\xd9\x60\xb4\x5f\x42\xa1\x44\x79\x26\x0a\x79\x94\x6f\x82\x21\x85\xbc\x13\x0c\x27\xe4\x9f\x60\x38\x91\x1e\x0a\x86\x1a\xf2\x51\x50\x9c\x90\x97\x82\x21\x45\xf8\x29\x68\x13\x06\x3d\x15\x0c\xcb\xf1\x55\x48\x7d\x08\x7a\x2b\x28\x79\xda\x5f\x21\xad\x48\xd8\x63\xc1\x38\xf9\x7c\x96\xd8\xd1\xaa\xbc\x96\x88\xee\x5f\x85\x4c\x87\xcf\x73\xf1\x68\x26\xea\xbb\x90\xa6\x20\xec\xbd\xa0\x0a\xe6\xf1\x5f\x62\x2d\xa8\xf2\x60\x22\x06\xe6\x23\x4d\x34\xec\xc5\xa0\xf4\x3d\x7e\x4c\x60\xca\xf0\x79\x32\x1e\xbb\x84\xfa\x32\x91\xf3\x99\xf6\x66\x22\x8c\xe5\x3c\xa5\xc7\x5f\x84\x47\x83\x8e\x40\x9f\x4f\x43\x31\x8b\xf1\x6a\x30\x66\x5e\xbf\x26\xd6\x6d\x18\x3c\x1b\x74\x9c\xdb\x11\x6a\x0a\x28\xbc\x01\x33\x38\x3f\x8b\xf9\x06\x77\x7e\x5e\x8b\x9c\x09\x1c\x8f\xff\x83\x01\xc5\xb9\x40\x1e\x4c\xda\x0b\xf2\x20\x91\x8e\x90\x07\x87\xf4\x85\x3c\x38\x21\x77\xc8\x83\x4a\x7a\x44\x3e\x1c\xd2\x29\xf2\x20\xf9\xfc\x22\x5f\x13\xd2\xae\x91\x07\x2b\xca\x3b\x32\xf0\x47\x39\x48\x04\x5e\xc8\x47\x22\xd0\x42\x6e\x12\x81\x16\xe9\x29\x11\xd8\x21\x67\x89\x42\x0b\xf9\x4b\x04\x5e\x84\xcb\x44\x35\x6a\xd0\x6b\x22\x10\x1d\xc7\xc9\xa7\x2d\x41\xdf\x89\x62\x42\xbb\x4f\x3e\x23\x14\xf6\xa0\x08\x7e\x3e\x27\x6a\xc4\x18\x57\x7e\x54\x9c\x72\xac\x22\x2c\x8f\xcf\x9b\xf2\x2b\x30\xea\x50\xf9\xcc\x48\xd8\xa7\xa2\x94\xd0\xe3\x56\x8d\xb0\xc7\xca\xb3\x8a\x1b\xce\x8f\x5e\xd2\x61\xff\x8a\xe2\xe2\x71\xb1\xc2\xf3\x91\xcf\xcb\xf2\x1b\x37\xd4\xd1\x8a\x9f\x35\xb5\xaf\x15\x67\x7a\xe7\xa9\x77\xd4\x46\x78\x5c\xd4\xb8\xf5\x39\x5d\x1e\x96\x31\x7e\x17\xc1\xd2\xeb\x7a\x8d\xf0\x58\x06\xef\x8b\xb2\x11\x11\x9b\x4b\xab\x94\x88\xf5\xef\xfd\xa7\x53\xee\xf1\xad\x6c\x80\x38\xbf\x8a\xc0\xa2\x7d\x2a\x02\x81\xf4\xa7\x08\x78\xd2\x97\x22\xe0\x43\x7e\x14\x81\x46\xfa\x50\x14\x3c\xe9\x3f\x11\x08\x3e\xdf\x89\x6a\x2a\xda\x6f\x22\x30\xa2\x7c\x26\x89\x3b\xca\x5f\x42\x70\x42\xbe\x12\x82\x12\xf2\x93\x10\x94\x48\x1f\x09\xc1\x0c\xf9\x47\x18\x4a\xc8\x37\x42\x70\x22\xfc\x22\xac\xf1\x82\x3e\x11\x82\xe4\xf8\x43\x94\x16\x04\x7d\x21\x8c\x38\xed\x07\x51\x06\x23\xec\x03\x21\x7c\x7c\xfe\x4f\xe4\xd8\x54\xbe\x4f\xb8\xd3\x57\x01\x2b\xe1\xf3\x79\x68\x65\x44\xfd\x1d\x6a\xd8\x87\x7d\x1d\x4c\xa9\x3c\x7e\x4e\xa4\x9d\x54\x3e\x4e\x78\x18\x3e\x92\x24\xc3\xbe\x0d\x46\xdd\xe3\xd7\xf8\xe7\x04\x9f\x4f\x43\x1b\x20\xd4\x9f\x89\x9b\xad\xb4\x2f\x13\x36\x89\xf3\x94\x1c\x6d\x11\x3e\x0c\x36\xde\x7c\xfe\x0b\xc1\x2a\xc6\x77\x41\x58\x79\xfd\x96\x48\x6f\x60\xf0\x59\xb0\x31\xcd\xfd\x15\xb5\x63\x04\x8a\xa6\x22\xa3\x06\x7c\xb0\xc2\xfa\x28\x9e\xcf\x80\x99\x37\x90\xfc\x3c\x2a\x1b\x93\x0d\x19\xc8\x08\x25\x1e\x07\x50\xef\xc9\x09\xe4\x07\xb0\xbd\xa5\xb2\xfc\x90\x29\x7e\x0c\xd8\x97\xec\x52\xb2\x16\xd6\x31\x85\xb5\x4b\xcd\x7a\xa5\x18\xb6\xba\xeb\x29\xa9\x6c\x53\x9d\x7f\x24\x35\x13\xe8\xb8\x88\xb1\xd9\xaf\x10\x4c\xb2\x3d\xa1\x84\xf2\x26\x07\x7c\x03\xc8\x2c\xbf\x96\x5d\x51\x16\x95\xb8\x1d\x62\x66\x7c\x33\x80\xbe\xe9\x16\x75\x73\x58\x41\xc0\xac\x29\xb2\x7d\xc9\x6e\xd3\xa9\xf8\xfa\xff\xcf\x2e\xdb\x14\x6a\x07\x6f\x62\xde\x89\xd3\x79\xf2\xc7\xe4\x5b\xd6\x7c\x31\xa0\x1f\x1e\x60\xe3\x7b\x00\x51\xce\x89\xea\x0a\x90\x58\xca\xc6\xb5\x72\xd4\xda\xc5\x28\xe5\xfe\xf7\x14\x56\xcc\xee\x1b\x13\x74\x6e\xb5\xc1\xc2\xe9\x49\x13\x7a\x61\x41\x7b\x81\x97\x58\xf3\x92\xd0\x2b\x00\x3d\xf7\x81\xae\x21\x68\x40\xe6\x8d\x05\xed\x05\x7e\xb4\x80\xfd\x32\x3f\x01\xe8\x85\x48\x17\xd4\xeb\xb1\x2f\x69\xdd\xa8\x04\x41\xc6\x73\x6d\xfd\xaf\xd2\x42\x08\x2e\xbd\x04\x59\x75\x60\x6d\x57\x37\x1f\x33\x7e\x36\xb5\x08\x2b\xe8\xa0\x04\x4c\x84\x8d\x67\x12\x87\xe6\x47\x41\x88\xcc\x5e\x37\x3b\x45\x92\x2a\x56\x89\xf1\x84\x41\xc8\x8b\x86\x89\xc7\x87\x45\x7f\xb8\x70\xbf\x40\xd6\x71\x26\xcd\x90\x6b\xc4\x95\xb2\x9e\x91\x0e\x23\x95\xd4\xa1\x65\x53\xa2\x04\x53\x9e\x28\xc0\x70\x72\x12\x05\x49\x64\x11\x51\xc5\xe1\xcc\x1f\x0a\x32\x9c\xa2\x43\x41\x12\xb9\x34\x54\x71\x38\xff\x85\x82\x0c\x27\xaa\x50\x90\x44\x46\x09\xdd\xae\xe1\x2c\x10\x1a\x34\x9c\xad\x41\x83\x12\x59\x15\x44\x6a\xb2\xc8\x87\xcd\x6d\x4d\xf5\x27\xac\x54\x59\xcf\xe4\xeb\x8d\x43\x1a\xb5\x2d\xcf\xc8\xd7\x17\xf6\x92\xf1\xb4\x95\x44\x3e\x3d\x2b\x8d\x2c\x40\x49\x32\xa1\xa7\xfb\x6b\xd7\xd5\xd5\xc3\xc4\x2a\x6d\xbb\xa6\xae\x5e\x64\xce\x53\x9d\x06\x14\xc2\xcc\xba\xa2\x2b\xed\x57\x60\x6c\x98\xf6\xba\x37\xc1\xac\x8c\xf3\xcf\x0f\x24\x42\x40\xc0\x01\x0e\x88\xaa\xc4\x88\x8b\xd5\xb6\x48\x06\x5f\x88\x7d\x77\xa4\x05\xcf\xb5\xe0\x65\xc6\xf3\xd8\x56\xed\x1f\xdd\xda\x13\xaf\x50\xd2\x50\xea\x31\x03\xab\x73\xa9\x87\x32\x3d\x60\x74\x8a\xc2\x45\xff\xe3\xd7\x26\x95\xfe\x14\x00\x0d\xc9\xfa\x9f\x09\x78\x5c\x7a\x34\x9f\xa9\x7e\x00\x10\x25\x35\x1b\x92\x53\xa2\xd4\x66\x66\x9a\xc7\x70\x4d\x66\x4e\x46\xfe\x10\x51\xef\xc3\xf1\xf0\xe9\x27\x2f\x3f\x58\x6b\x92\x2d\x06\x1c\x27\x69\x24\x03\x14\x9a\x54\x11\xd9\xdf\x30\xa5\xa3\xfc\x68\x3e\x7e\x00\x98\x89\x7a\x94\xb9\x49\xaf\x38\x67\x2f\x6c\xdb\xbb\xfb\x59\x33\x7d\x69\xb2\xbc\x60\x55\xf7\x65\xbe\x9a\xe7\xec\x65\xf2\x07\xf6\xc4\x96\x6c\x95\xa4\x93\x9e\x5a\xf2\x38\xff\x59\xfc\xd2\x9b\xe2\x87\xb8\x44\x35\xa8\x00\xe4\xc8\xff\x80\x34\x9a\xd3\xbe\xcc\x44\x4a\xe9\x0f\x70\x4a\xd3\xb4\x67\x23\x1a\x54\x70\x9a\x3f\xcd\x37\xf3\x8d\x64\x66\x71\xa3\x3b\x08\xeb\x0b\x8e\x42\x5a\x5b\x51\xea\x9f\x0e\x04\x0c\x9c\x0e\x10\x16\xe8\x5c\xb0\x58\xaf\x27\xea\x3f\x30\x1d\x58\x38\x01\x01\xa9\xe9\xa0\x17\x63\xdc\x5c\x20\xe9\xf9\xe7\x02\x69\x3a\x1c\x69\xd1\xe9\x00\x96\xd9\xd3\x01\x68\x80\x47\xb7\x01\x02\x33\x82\x0b\x65\x9b\x01\xd9\xbf\xa1\x19\x01\x01\xa3\x87\x7b\x9a\x7a\x54\xc9\x9a\x0b\x7a\x4f\x04\x9b\x08\x00\x30\x2e\x74\xec\x44\x60\x40\xa3\x13\x81\x55\x6e\x4f\x04\x54\x1d\x3c\xb3\x00\x41\xf1\x8e\x59\x00\xe5\x47\x19\xe9\x08\xe0\x38\x49\x23\x19\x8c\x9b\x05\xdc\x1c\xce\x1e\x2f\x14\xd8\xc5\xcf\x33\x85\x9a\x7e\xc9\xd3\x7a\x87\x9e\x1f\x5d\x2c\x57\x16\x0a\x69\x68\x44\xa9\xdf\x12\x0a\x18\x68\x09\x11\x16\xa8\x25\x5c\xae\x26\xeb\xf9\x64\xf3\x04\xcd\xa0\x85\x10\x90\x8e\x32\x83\xbd\x0c\xe3\xcc\xa0\xa4\x17\x70\x89\xd5\xeb\x88\x38\x16\x34\x83\xb0\xcc\x36\x83\x43\xed\x1f\xdd\xda\x07\x6c\xa0\x0b\x65\x0f\x02\xd9\xb3\x21\x1b\x88\x80\x91\xca\xce\x9e\xfa\x1f\x8f\x1e\x59\x66\x70\xb1\x5c\xa1\x66\x10\x00\xe3\x72\xc7\x9a\x41\x03\x1a\x35\x83\x56\xb9\x6d\x06\xa9\x3a\x78\xcc\x20\x41\xf1\x0e\x33\x88\xf2\xa3\xac\x54\x04\x70\x9c\xa4\x91\x0c\xc6\x99\xc1\xbe\xa7\xa1\x19\xec\xbf\x58\x6f\x73\x01\x4e\xe3\xcd\x60\x7e\xcc\x9f\xf2\x67\xee\x7b\x72\x82\x1f\x72\x86\x81\x0c\x77\xba\xa8\x21\x81\x34\xb3\x3c\x6b\x3e\xec\x0e\xb3\x79\xbe\x58\xf7\xbc\x16\xcb\x95\x60\xb4\x78\x5c\x3e\xad\x9f\x1c\x77\xb8\x67\x46\xf4\x10\xd1\x1f\x3d\x06\x69\x64\x79\xa1\x7f\x06\xe0\x20\x96\x2b\x8c\xb1\xc0\x9d\xe1\xd5\x7a\xa2\xfe\x03\xb3\x00\x44\xf1\xcb\x47\xba\xc2\x42\x8c\x71\xd3\x80\xa0\xe8\x9f\x05\x7a\xbb\x61\x8b\x8a\xce\x00\xa0\xc8\xf1\x83\xcd\xba\x3f\x3a\x75\x0f\x4c\x01\x0e\x90\x3d\xfe\x45\xbf\x86\x26\x00\x17\x8a\x1c\xe5\xf3\x6c\xb1\x59\x2e\xbd\x6a\x64\x3b\xc2\xc2\xf3\xc0\x26\x01\x13\x1c\x95\x3c\x76\x0a\x18\x80\xd1\x19\x00\x16\x3b\x7e\x30\x59\x09\xcf\x14\x80\x93\xbc\x63\x06\xc0\xb8\x51\xf6\x39\x0c\x1b\x25\x66\x1c\xf9\x91\x4e\x30\xf6\xa0\x87\xc7\xe9\x34\xed\xe1\xe7\x99\x40\x4d\x5e\xbe\x32\x8d\x0d\xdb\xf5\x3e\x7b\x9a\xa3\xeb\x38\xf5\x34\x35\x65\x67\x54\xb9\xdf\x14\xea\x07\xae\xe9\x8d\x01\x0d\x32\x6a\x6b\xc0\xc1\x0a\x0a\xfa\x79\xdb\x03\xf6\xab\xdd\x94\x4d\xe4\x8d\xfb\x8e\xc8\x8c\x5a\x46\xbb\x34\x7a\x93\x00\x43\xc4\x0c\x1b\x06\x67\x0f\x11\xdd\xeb\x21\x2b\x89\x02\xd2\xee\xd0\x3c\x5b\x3f\x2e\xbc\x7a\x16\xb9\x63\x60\x81\x53\xf2\xc7\xda\x4a\x00\x8f\x9a\x4b\x07\xc2\xbb\x73\x40\xd1\xf3\xca\xf9\x41\xa3\x49\xf0\xa4\x0c\x5b\x14\x78\xac\xbc\xd1\x4c\x3e\x71\x17\x41\x8e\x2b\x9b\xd7\x78\x03\x3a\x5f\x3d\x3f\xad\x8e\xdc\x80\x72\x92\xd2\x86\x2e\xf3\x75\x76\x97\x0f\x6d\x09\x72\xa7\x67\x1b\x21\x95\xe1\xb5\x57\x1f\xdf\x57\x7e\x9c\xb3\x79\xcf\x4e\x3c\xbf\x24\xd9\x1d\xd7\x73\xed\xb7\x0f\xfc\x8a\xea\x58\x2b\x7e\x13\x54\x8a\x4f\x65\x0c\x38\xd0\xaf\x48\x61\x03\xb1\xc7\xf0\x6c\x94\x54\x21\x1f\x9e\x83\x78\x66\x2d\x51\x3e\x6a\xca\x82\x28\x7e\xe1\x3e\x6f\xb2\x12\xe4\xfc\x33\x95\x7c\x04\xd0\x16\x95\xd8\xc2\xa9\xee\xd8\xc8\x76\xb0\xb0\x39\xc5\x01\x72\x17\xf0\x55\x84\x03\xef\x42\x79\x36\xb1\xd7\xab\xe3\x9e\x56\xa0\xc8\x49\xc9\x84\x45\x65\x8e\xdf\xbd\xa9\x7c\xae\x3b\x2c\xf6\x4e\x44\x28\x25\x5a\xb6\x0f\x4e\x41\x18\x37\x7a\x5f\x25\x04\x1b\x25\x66\x1c\xf9\x4f\x9c\x76\xd4\x4b\x99\xa6\x2d\x1c\x67\x93\x7a\x0c\x72\xd8\xf3\x42\xbf\x4d\xe2\x20\x1e\x9b\x24\xca\x47\xd9\x24\x88\xe2\x17\xee\xf3\x6c\x92\x20\x37\xd2\x26\x01\x24\x68\x93\x40\x51\xb4\x4d\x72\xb0\x30\x63\xe2\x00\xd9\xca\x29\x3a\x35\x64\x93\x5c\xa8\x7b\x6c\x92\x54\x80\x28\x9b\x64\xc2\xa2\x32\xc7\xda\xa4\x01\x18\xb5\x49\xb0\xd8\x6b\x93\x50\x4a\xb4\x6c\x1f\xb4\x49\x18\x37\xca\x68\x84\x61\xa3\xc4\x8c\x23\xff\xf9\x36\x69\x94\x97\x6a\xfa\x70\x3f\xce\x67\xd4\xec\xda\xeb\xe1\xc0\xda\xf6\x83\x1c\x17\xeb\xe7\x74\xbe\xe7\x4e\x31\xdb\xa7\xcb\x67\xc9\x31\x3f\x64\xeb\xb5\xe3\xa5\x4a\x96\xd8\x3a\x94\x23\xa3\x63\x4b\x22\x91\x26\x50\x95\xfb\x4d\xb4\x82\xf2\x58\x69\x0d\x32\xca\x50\x3b\x58\x41\x41\x3f\xcf\x5c\x6b\x8a\x81\xfd\x0e\xde\xb8\x6e\x3f\x10\x46\xdb\x2e\x8d\xb6\xdb\x18\x22\x66\x73\x31\x38\x7b\x18\xeb\x5e\x0f\x19\x70\x14\x90\xde\xef\x78\x7e\x3e\x2c\xf1\xfd\x8e\x41\x43\xa2\xcc\xb8\x05\x4e\xc9\x1f\x6b\xcc\x01\x3c\x6a\xcf\x1d\x08\xaf\x49\xa7\xe8\x79\xe5\xfc\xa0\x61\x27\x78\x52\xc6\x37\x0a\x3c\x56\xde\x68\x26\x9f\xb9\xdf\x21\xc6\x15\x65\x51\x3f\xd5\x88\x6a\x26\xaf\x59\x53\x15\xd5\x0b\x26\x6b\xf6\xc4\x16\x4b\x3c\xa4\x4f\x20\xd1\x61\xbb\xb2\x3c\x10\x59\x2c\xa1\x3c\x36\x54\x83\x8c\xb2\xa1\x0e\x56\x50\xd0\xcf\xb3\xa1\x9a\x62\x20\x9a\x82\x37\xee\x3b\x22\x33\x1e\x65\x6c\x95\x46\xdb\x50\x0c\x11\x33\x7b\x18\x9c\x13\x63\xaa\x7a\x3d\x18\x70\x8c\x01\xd2\x63\xe2\xf9\x69\x4e\x85\x8e\x6a\x0d\x89\xb2\xa1\x16\x38\x25\x7f\x74\xc8\xb1\x09\x8f\xda\x50\x07\xc2\x6b\x43\x29\x7a\x5e\x39\x3f\x68\x43\x09\x9e\x64\x60\x70\x0c\x78\xac\xbc\xd1\x4c\x3e\xd1\x86\xca\x71\x65\xf3\x1a\x6f\x43\x59\xb6\xca\x45\xf8\x99\x20\xa9\x62\x1c\xf6\x87\xe5\xd3\x5d\x41\xc8\x50\x90\x7b\xc3\x90\xc3\x52\x69\x8e\x79\x56\xbd\xb0\xe6\x83\x0c\xb3\x6c\x7e\x5c\xf0\xa9\xe4\xf0\xb4\x4a\xd5\xf1\x63\xbe\xde\xac\x57\x73\x24\x02\xa3\xe7\x88\x74\x99\xc0\x45\x87\xb8\xc0\xf1\x44\x39\xf0\xe2\x50\x1c\x06\x07\xf2\xcc\x23\x0a\x62\xd4\x34\x62\x23\x85\x84\xfc\xbc\x49\x44\x11\xf4\xcf\x21\xa2\x55\x9d\xf6\x27\x03\x32\x40\x61\xf4\x0c\x82\xe0\x61\x36\x1f\x01\x73\x8f\xe5\x45\x57\x87\x03\x33\x5c\x38\xd2\x1a\xec\x57\xcb\x6c\x81\x6f\xc3\x69\xb5\x88\x9a\x3c\x20\x34\x21\x7b\x7c\x68\xc6\x00\x8e\xce\x1c\x36\x80\x77\xe2\x20\xa8\xf9\x64\xfc\xe0\xb4\x81\x73\xa4\x43\x28\xc2\xd0\x91\xc2\xc6\xb2\xf8\xc4\x29\x43\x0e\x23\xc2\x6e\x7e\xaa\xa9\x1c\x5c\xfb\x73\x56\x96\x09\xff\x73\xba\xaf\xf3\xef\xfa\x82\x38\xb8\x97\xaa\x2f\x86\x77\xf5\x70\xa5\x59\x91\xe0\x99\x12\x98\x88\x5d\xd4\x74\x86\x06\x3b\x65\xe5\xd1\x29\x46\x6e\xcc\xef\xe0\x95\x55\x2f\xf5\x5f\x66\x87\xba\xea\xb2\xa2\x32\x3b\x12\x65\x64\x40\xde\xc8\x6b\xcf\xef\x08\x8d\x9b\x71\x15\x7a\x9d\x7e\x3b\x61\x12\x99\x30\xf3\x54\x03\x4d\xbf\x15\x39\xab\x6f\x2a\xf1\xc0\x4e\x66\x4f\xb8\xd4\x6d\xc1\x2f\x62\x66\xfb\xb6\x2e\xaf\x1d\xdb\xa9\x44\x0a\x3c\x83\xc2\xae\x57\x99\x63\x59\xbf\x6e\x4f\x45\x9e\xab\xab\x98\x82\x56\x22\x28\xaa\xb4\x26\x3b\xc8\x57\xfc\x3d\x5c\x10\x45\x38\xf5\x1c\x7a\xc4\xae\xc9\xaa\xf6\x58\x37\xe7\x2d\xff\xad\xcc\x3a\xb6\xcc\xbf\x4c\xd7\xe9\xcf\x13\xfe\x3f\xe9\x83\xc9\x96\xeb\x77\x0f\x27\xef\x46\x6b\x6b\x25\xfd\x9a\xa9\x98\x80\x74\x9a\x08\x43\x3b\xa2\x5d\x12\xd9\x58\xaa\xf3\x45\x2a\x2f\x93\x78\x22\xa7\xb9\x9b\xab\x1f\x36\x48\xe4\xa5\xf0\x31\x77\xab\x55\xa7\xf7\x18\xd7\xb3\x67\xa0\x3c\xdb\xc3\xe4\x19\x0c\x92\x32\x6b\x5e\x98\x6f\x9c\x3d\x39\xc3\xec\x49\x13\xd0\xed\x0c\xae\xf7\x52\x69\x3c\x46\xb5\x8c\x50\x41\xd9\x69\x12\xf7\x58\xd7\x9d\x18\x56\xd3\x13\xcb\x72\x63\xdc\xa4\x60\xdc\xa4\xef\x46\x7d\xa8\xc1\x35\x24\xfd\x58\x36\xec\x9c\x78\xd4\xc3\x7d\x51\xa0\x15\x37\x97\x87\xf6\xd7\xb7\xf3\x9f\x0d\x5a\x26\x18\x6f\x66\x0d\xc5\x9b\x30\xd1\x95\xeb\xeb\xe5\x8b\x9e\x43\x04\x4d\x36\x9c\x83\xd4\xc0\x63\x5d\x75\xd3\x57\x31\xee\x1e\xd3\x74\xb7\xaf\xfb\x6a\x66\x79\xdf\x32\xc9\xe2\xf2\x96\xa4\x49\x9a\x88\xc9\x6c\xb1\x98\xa8\xff\x66\x8b\x07\x69\xf3\xb7\xf3\xcb\x5b\xd2\xd6\x65\x91\x27\xc6\xb0\xda\x75\xec\xad\x9b\xe6\xec\x50\x37\x19\x1f\xb5\xfc\xbe\x77\x6f\xdc\xf5\x18\x57\x12\x70\x13\xd5\xdb\x09\x96\x4f\x54\xcf\x8a\xa9\x06\xa3\x61\x62\x29\xd7\x66\xf8\x72\xac\x0f\xd7\xd6\xa0\x03\x21\xb6\xbc\xf8\x56\x5f\xbb\x5e\x90\xed\x98\xba\x86\x44\x29\xaa\x6f\xac\xe9\x58\xde\xff\x2e\xe9\xe7\x37\x83\x3c\xaf\xbe\x7d\xf3\xdc\x44\xe7\x79\x59\x54\x9e\x85\x29\x9f\x49\xb6\xe7\x22\xcf\x4b\xc0\xe6\x50\x9f\x2f\xd9\xc1\x48\xe8\xb0\x58\xb3\x73\x32\x7b\x5c\xeb\xa4\x14\xdb\xa9\xf8\x96\x22\x68\xb3\xcb\xb5\x2c\xc5\xe8\x80\x43\x65\x3a\x1f\x14\x42\x4c\xcd\x7d\xcf\xf2\x64\x39\xb2\x93\x41\x5b\xd9\x95\xcf\x8b\x36\xdb\x97\x43\xb3\x9b\xdf\x94\xd7\x60\xfa\x07\x86\x9e\x60\x64\x06\x93\xfc\x68\x73\xdd\x1d\xae\x4d\x2b\x12\x65\x4c\xb3\xb2\xac\x5f\x59\x6e\x52\x90\x57\xf8\x81\x2f\xc2\x36\xfd\x8f\x03\x85\x68\x9d\x2e\x1b\xe1\xe9\x78\xa8\xbb\xda\x29\x88\x8b\xef\xf4\xed\x70\x8c\x41\xbc\xa6\xa2\xa2\x58\xc3\x62\x90\x45\x0c\x88\x1f\xc0\xd1\x18\x03\x26\xed\x7c\xdf\xff\xec\xf0\x94\x00\x3e\x3a\x7c\x90\xa8\x3c\x22\x37\xc7\xdb\x0c\xe2\x52\x2d\x60\xc3\x51\x2a\x61\xc2\x89\x56\xf3\x83\x8c\xd5\xa0\xdd\x88\xba\x10\x8a\x05\xf8\xd3\x4a\x16\x10\xc0\xa3\xd0\x84\x8d\x33\x68\x59\x6b\x9e\xf5\xc3\x0e\xfd\xfe\xfc\xe0\x6a\x00\x61\x13\xbc\xcc\x43\x1d\x4b\xe1\xf8\x3a\x19\xc3\xf1\x74\x38\x0a\x4e\x74\xbe\x39\x3d\xfa\xee\xf7\xab\xfb\x9d\x23\x6a\xe4\x51\x09\x54\x42\x4a\x3d\x9c\x45\x6b\x84\xa0\xbe\x99\x41\x4b\x81\x4d\x11\x4e\x61\xa0\x26\x26\x98\xaf\xdb\x4d\x38\x5f\x57\xeb\x29\x2a\x82\xa7\x47\x05\xec\x99\x2e\x66\x7d\xac\x2c\x3d\xd9\x70\xfa\x4e\xaf\x2b\x9b\x2e\x42\xda\x80\x97\x21\xf5\x11\xdf\x31\x6b\x9f\x8e\x71\xf9\x1c\x09\x5d\x62\x68\x25\x90\x5e\x10\x12\x91\x57\x82\x1e\xfb\x1f\x5b\xf9\x08\xea\x54\x75\x49\x1b\x48\x11\xfa\xe0\xa4\xe5\xd0\xf1\x4d\x5a\xee\x20\x47\xd1\xa9\x3e\x8e\x30\x69\x0e\x9c\xab\xc3\x2e\x48\xbc\x0e\x1b\x99\x0b\x22\xeb\xe2\x51\xe5\x7b\xe6\x2d\x53\x00\xa2\x43\x23\x67\x2c\xb0\x3b\x0b\x27\x2d\x6b\xfb\x3a\x7a\xde\xf2\x8a\x10\xea\xd8\x11\xf3\x96\x17\xc7\xd3\xe1\x9f\x33\x6f\x1d\xad\x10\xcd\x11\x75\xf1\x28\xc3\xf8\x19\x0b\xf4\x92\x33\x69\x41\x29\xa3\xac\x2e\x36\x5d\x39\x85\x81\x6a\x04\xa6\x2b\x14\xce\xd7\xc3\x9e\xe9\xca\x85\xa1\x7b\x3e\x38\x5d\xe1\x19\x88\x52\xef\x0a\x50\xdf\x7b\x76\x65\xd3\x45\x48\x1b\xf0\x32\xa4\x3e\xe2\xbb\x9a\xae\xc6\xed\x47\x40\xab\xed\x08\x89\xda\x76\xb4\x2a\x48\x5f\x08\xb9\xe2\x6d\xa4\x87\x3a\x55\x69\xd2\x00\x8a\x2c\x09\x28\xad\x0f\xce\x5b\x0e\x1d\xdf\xbc\xa5\x6e\xb6\x06\xd0\xa9\xce\x8e\x30\x69\x0e\x9c\xab\xcc\x2e\xc8\xd8\x3e\xb1\x6f\x1b\x07\xc4\xf4\xa8\xf5\x3d\x53\x17\x94\xc1\xa3\x25\x91\x13\xd8\x90\xf2\x03\xce\x5e\x66\x22\x94\xe8\xa9\xcb\xcb\x3c\xd4\xb7\x23\xa6\x2e\x2f\x8e\xa7\xcf\x3f\x67\xea\x32\x12\x17\xf0\x4b\xc4\x23\xea\xe2\x51\x86\xf1\x53\xd7\xd0\x45\xce\xbc\x05\x45\x8c\x32\xbf\xd8\xbc\xe5\x14\x06\xea\x10\x98\xb7\x50\x38\x5f\xf7\x7a\xe6\x2d\x17\x86\xee\xf6\xf0\x32\x0b\xbb\x2e\x2e\x73\xcb\xf8\x36\x2f\xe5\xad\x71\x57\x3a\x55\x82\x34\x42\x5f\x84\xd4\x87\x7f\xc6\x56\x59\xf3\xf9\x3c\x5b\x2c\xee\x5b\x68\x89\xcc\x1b\x08\x39\xac\x16\x48\x47\x70\xa1\xc8\x10\xdb\xfd\x2a\x5d\xdb\x8d\x46\x93\x27\xaa\x4c\x9a\x3e\x91\xda\x01\xa3\xf4\xc1\x39\xcb\x26\xe3\x9b\xb2\xac\xf1\x8d\xa1\x12\x5d\x1c\x61\xc5\x6c\x30\x57\x83\x1d\x88\xf8\xb9\x4a\xaa\x4d\x7c\x3d\x68\x25\xbe\x67\x9a\x82\xec\x69\xad\x88\x5d\x66\x99\x79\x49\xac\x65\x16\x4c\xd7\x12\x3d\x57\xf9\x24\x08\xf4\xeb\x88\x99\xca\x87\x42\xf7\xf7\x27\x2d\xb1\x40\xbe\x0b\xd7\x5d\x09\x55\x87\xd6\x88\x3b\x96\x59\x66\x2f\xb9\xcb\x2c\x44\xd2\x18\xc3\x8b\x9e\x1e\x59\x65\xfe\x9a\x04\x66\x2c\x0c\xcc\xd3\xcb\x9e\xf9\xca\x01\x21\x3b\x3f\x38\x5b\xb9\xa9\xad\x64\x1a\x1c\x4f\x8b\x19\x37\xe3\x5d\xd9\x8c\x42\xa4\x0d\x64\x29\x52\x27\x55\x82\x4e\x5b\xf9\xd3\x71\xb3\xbc\x6f\xda\xd2\xe9\x52\x10\x8a\x44\xa5\x90\x4e\x51\xd2\xd1\x57\x44\x0e\xc7\xe7\xd4\x6e\x49\x1f\x13\xba\x05\x48\xcb\x28\xf2\x6e\x10\xf4\x3e\x38\x91\x21\x94\xbc\x73\x99\xcc\xda\x10\x24\x40\xeb\x40\x84\xc1\x43\x20\x5d\x55\xc7\x80\x46\x4c\x6d\x42\xb5\xc6\x56\xcb\xab\xf7\x77\xcd\x71\x40\x0e\xaf\xe6\xfc\x7e\xbb\x89\x01\x21\xc2\xfd\x3d\x62\xb2\x0b\x60\x79\xf5\xe0\x47\xef\x2a\x46\xd4\xc8\xab\x20\xbf\xdf\xce\xa2\x21\x04\x36\xdf\x21\xc5\xc1\xca\x04\x66\x3d\x02\xd2\xdf\xe3\x9e\xb9\x0f\x83\xf2\xe9\x42\x78\x06\x14\x59\xb3\x2c\xfb\x26\x52\x1c\x79\xd7\xba\x15\xb1\x14\x51\x25\xe8\xa2\xb5\xc2\xd6\x6b\xfc\x33\x7e\x2a\xb6\xda\xb3\xf9\x7d\x13\x9f\xc8\xb2\x82\x90\xc3\x6a\x81\x2e\x9c\x2b\xcf\x7a\xed\xf8\xb8\x42\x4e\x42\x28\xf2\x44\x95\x3d\x27\x63\xeb\xd5\x71\x8f\x51\xfa\xf0\x1e\x63\x15\xbd\x5e\x53\x29\x22\xfc\xd8\x44\x2f\x47\x58\x38\x1b\x0c\xdb\x74\xa8\xee\x3f\x16\xe3\x9a\x33\xaa\x2a\xb4\x2a\xdf\x77\x2e\x66\x4a\x40\xeb\xc6\xef\x37\x9d\xf9\x24\x08\x74\xed\xa8\xfd\x45\x1a\x85\xee\xf2\x1f\x3d\x85\x85\x2a\x42\xeb\xc2\xef\x37\x79\x29\x09\xf0\xdd\xc5\x2a\x62\xa5\x86\x41\x79\x7a\x39\xb8\xb5\x58\x85\x56\x6a\x0e\x08\xd9\xe1\xc1\x79\x4a\xa6\xa2\xb1\x07\x19\x4f\x2f\xe2\x69\x34\x95\x20\xc2\x95\x4d\x95\x20\x0d\xd0\x17\x21\xb5\xe1\x9f\x3f\x7b\x9e\x12\x99\x77\x02\x13\x89\x92\x15\xe9\x05\x2e\xd4\x07\xe7\x29\x7f\x23\x8d\x99\xa7\x14\xa5\x0f\xce\x53\x36\x99\x71\xf3\x14\x86\x4d\xf4\x72\x84\x01\xb3\xc1\x5c\x1d\x76\x20\x3e\x6f\x9e\xc2\x64\xa4\x55\xf9\x47\xcc\x53\x8a\xf6\xef\x37\x4f\xf9\x24\x08\x74\xed\x88\x79\xca\x87\x42\x77\xf9\x8f\x9e\xa7\x42\x15\xa1\x75\xe1\xf7\x9b\xa7\x94\x04\xd8\x3c\x65\x97\xf9\xeb\x10\x98\xa7\x30\x30\x4f\xcf\x7a\xe6\x29\x07\x84\xec\xf0\x1f\x35\x4f\x19\x79\x30\x5c\xf1\x8c\x42\xa4\x19\x64\x29\x52\x2d\x55\x82\xcd\x59\x8b\xe5\xd3\xd3\xe2\x70\xdf\x9c\xa5\x73\x12\x21\x14\x89\x4a\x21\xfd\xa2\xa4\xa3\x5a\x72\xb9\x3c\xac\x56\xf6\xa6\xa2\x97\x09\xdd\x02\xf4\xa6\x22\x4f\x6e\x43\xd0\xfb\xe0\x2c\x86\x50\xf2\x4d\x64\x2a\x35\x4a\x90\x00\xad\x03\x11\x76\x0e\x81\x74\xb5\x1d\x03\x8a\x9f\xd4\xa4\x6a\x8d\xad\x96\x57\xef\xef\x99\xda\x2c\x39\x7c\x9a\xf3\xfb\xcd\x6e\x01\x21\xc2\xfd\x3d\x62\x8e\x0b\x60\x79\xf5\xe0\x47\xcf\x74\x11\x35\xf2\x2a\xc8\xef\x37\xdf\x19\x42\x60\x53\x1e\x52\x1c\xac\x4c\x60\xe2\x23\x20\xfd\x3d\xee\x99\xfe\x30\x28\x9f\x2e\x84\x37\x15\x45\x6a\x3a\x6b\x38\x8a\x3c\x62\xbe\x7b\x0a\x43\xfe\x10\xe4\x32\xc0\x50\x88\x5d\x3b\x10\xa5\xd8\x25\x02\x59\x82\x5e\xb2\x5a\x3f\xae\xd2\xf5\x9d\x97\xac\x54\x52\x29\x84\x22\x51\x29\xec\x1a\x84\x94\x8e\xb4\xae\xfb\xe7\xfd\xf2\x60\x87\xd3\xf8\x98\xd0\x2d\x40\x9b\x4e\x9e\x9d\x88\xa0\xf7\xd1\x3b\x64\x2e\x25\xdf\x24\xa8\x72\xdb\x04\x09\xd0\x3a\x10\x61\x08\x11\x48\xe4\x6a\x09\x02\x34\xe2\x42\x99\x50\xad\xb1\xd5\xf2\xea\xfd\x5d\xf7\xca\x80\x1c\x5e\xcd\xf9\xfd\x26\xc1\x80\x10\xe1\xfe\x1e\x73\xc7\xcc\x8f\xe5\xd5\x83\x1f\x3d\x09\x46\xd4\xc8\xab\x20\xbf\xdf\x24\x68\x08\x81\x5e\x32\x73\x8b\x83\x95\x09\x5d\x34\xc3\x21\xfd\x3d\xee\xbb\x6c\x86\x40\xf9\x74\x21\x1c\x09\x29\x72\x0b\x5a\x2d\x2a\x12\xc1\x79\x03\x72\x54\x6a\x16\x2c\xf2\x45\x95\xa1\x01\x36\x7d\x21\x1a\x2f\xc3\x0b\xb0\x09\x30\x4b\x97\xcb\xc5\xf3\xbd\x11\x91\x22\x13\x16\x42\x10\xaf\x0f\x1a\xed\xc3\x45\xa3\x9a\xf0\x70\x5c\x2f\x56\x9b\x5d\x3c\x0b\xb2\xf2\xa4\xc5\x14\xb9\x95\x70\x6a\x1f\x8e\x8e\xb4\x09\xf9\x66\x3e\x95\xa2\x27\x84\x4f\xf6\x7c\x84\xed\x73\x01\xb1\xd8\x29\x07\x26\x7e\xd6\x93\xfa\x34\xb2\x4a\x3e\x45\xbf\x67\xce\x83\x52\xf8\xf4\xe5\xf7\x9b\xf2\xfc\x32\x04\x3b\x7a\x54\xdc\xa4\x0f\xc9\xa7\x00\x3f\x7a\xba\x0b\x57\xc7\xa7\x19\xbf\xdf\x64\x37\xc8\x80\x47\x4d\xda\xa5\xa1\x9a\x04\x23\x27\x31\x40\x6f\x4f\x7b\xa3\x27\x1d\x20\x8f\x0a\x04\x67\x39\x99\xf6\x10\x36\xa5\x4c\x58\x47\x34\x61\x32\x2b\x0e\x82\x4f\xc7\xde\xba\xed\xb1\x68\x54\xee\x20\x23\x8d\xd0\x24\x0c\x6c\x27\x1e\x22\x50\x06\x08\x81\x61\x90\xd0\xb9\x8a\x64\x1e\x2d\x90\x8e\x25\x7d\x9f\xed\x1b\x96\xe5\x87\xe6\x7a\xde\x4b\xc0\x6d\xaa\x53\x03\x0d\x65\x49\x86\xe6\xc8\x19\x32\xf0\x3d\x42\x68\x4f\x5e\x9d\x9d\x91\x67\xcf\x40\xa1\x93\xf1\x1d\xea\xf2\x7a\xae\xda\x44\xfe\xd2\x83\x89\x64\x4d\x2c\x97\x89\xd0\x5a\x56\x1e\x55\x1e\x34\x95\xd7\xc9\xfc\xc6\xc5\x10\x99\x6e\x54\x9a\x27\x84\xe8\xb9\xa8\x8a\xf3\xf5\x3c\x99\x75\x75\x5d\xee\xb3\x26\x51\xbf\xe8\x0c\x87\x12\xc2\x4c\xe9\xf4\x3e\x2b\xaa\xcb\xb5\x9b\xcc\x7a\x1e\x59\xc3\xb2\xdb\xf4\x5c\xff\x36\xcd\x2e\x17\x96\x35\x59\x75\x60\xa2\xce\xd3\x57\xb6\xff\xb5\xe8\x9c\xef\x48\x22\x37\x27\xd9\xd1\x1f\xf6\xfb\xc3\x2a\xd7\xf1\x4b\x4d\x96\x17\xd7\x76\xbb\xb8\xbc\xe9\x9c\x6f\x22\xa9\xcf\x94\xe7\xb5\xe2\x59\x96\xda\xe2\x37\xb6\x9d\x37\xec\xec\xa4\xb9\x12\xc9\xa5\xba\xac\xe9\x60\x8e\xa4\xd9\x7a\x67\xe5\x04\xea\xea\x0b\x3e\xff\xfb\x93\x32\xe8\x3c\x50\xb3\x95\x4e\x18\x24\x99\x64\xd7\xae\x96\xed\xf5\x17\x35\xe8\xfe\x3a\xb4\xdc\xf0\xed\xe6\x26\xdf\x41\x44\x81\xcd\xa2\x66\xc2\xc3\xfe\xf1\xf0\x28\xb9\x98\x46\x49\x7f\xd0\xd6\x47\x7f\xd1\x66\x86\x7f\xd9\x02\x0c\x65\x38\xc4\x1f\x32\xf9\xa1\x92\xd8\xa4\x6f\x7e\xd3\x2c\xcc\x8f\x9a\x8b\xfa\xb8\xb5\x51\x15\x2f\xfd\x37\x92\xd1\x08\x56\x70\xbb\xbd\x94\xd9\x81\x9d\xea\x32\x37\xe5\x02\x9f\x6f\xa0\xb9\x8c\x96\x91\xb9\x9a\xa0\x94\xf1\x79\x9f\xe0\x3f\xe9\xfb\xec\x58\xb0\x52\xb8\x7f\x22\xc7\x94\xa5\x9d\xfb\xb2\x3e\xfc\x6a\x40\xb5\xd7\xfd\x94\xff\x01\x0c\xd4\xa2\xb7\x3b\xfc\x73\x28\x1d\xdd\x9c\x9b\xa8\x63\xdd\xf0\xa1\xc9\x33\x31\x4e\xe0\x9f\xc9\xac\xcc\xf6\xac\xbc\x0d\x43\x62\xf6\xb4\xd6\x58\xa0\xf4\x55\xa5\x2a\x4c\x55\x61\xaf\x6b\x17\x9e\xc1\xad\xa8\x5e\x6e\x25\xeb\x3a\xd6\x4c\xdb\xde\x2a\xf5\xad\x92\xae\x0f\xa7\x9d\x25\xcf\xac\x6f\x23\xd9\xd8\x8f\x59\xff\xb3\x73\x68\xf7\x56\xdb\x97\xbd\xd1\x1c\xc9\x78\x86\x3a\x67\x98\xf6\xb6\xad\x1f\xab\x7a\x24\x2f\x78\xce\x49\x99\x0c\x4e\xfe\x75\x2c\xca\x72\x48\x9f\x60\xce\x1d\x37\x0d\x38\x0c\x54\xfe\xc7\x00\xc6\x1b\xf3\xa6\xca\x0c\xe2\x8d\x09\x25\x73\xcc\x0d\x06\xc5\x94\x62\x0d\x40\x45\x9e\x39\x09\xb9\x18\xe0\x16\x00\xea\x98\xe5\x2c\xbf\x09\xc9\xf7\xeb\xfe\x47\xb5\xae\xf8\x6b\x80\x14\xd9\xb8\x04\x24\xf7\xbf\x54\x81\x48\x1d\x82\x57\x5e\x5c\xd2\x96\x48\xf2\xb6\x8b\x2a\xe3\x37\xe1\x44\x11\xbf\x0b\xa5\xbe\xab\xab\x06\xb2\x48\xc6\x92\xab\xd2\xa2\x3a\xd6\x13\x83\x7e\xa5\x68\xa8\xa0\x07\xdd\xa0\xf2\x70\x51\x92\x91\xa7\x47\xba\x36\x72\xd7\x55\x8a\x26\xb7\xd5\x06\xd1\xf8\x92\x54\x14\xaa\xd5\x47\xc9\xbe\xb1\x5e\xdd\xfb\x7f\xf4\x6c\x75\xb9\x96\x25\xcb\x65\x16\x36\x74\x1e\x60\x55\xee\xc7\xed\x87\x24\x8e\xca\xa7\x90\xf7\xd9\x99\x55\xd7\x84\xff\xef\xb4\x2c\xda\x2e\xc9\xc0\x70\xda\xa4\x43\xfe\x42\x91\x10\x50\xaa\x05\x9c\xca\xc0\x85\xff\xa2\x6a\x59\xc7\x17\xe7\xa9\x9e\xf9\xf0\x9c\x78\x0e\x6f\xd3\x1c\x3b\x85\x8e\x77\xb7\x4d\x13\x84\xf1\x74\x29\xb7\x06\xac\x87\xc1\x54\x17\x7a\x98\x0a\x9f\x8c\x64\x2d\x8a\x2d\x8d\x70\x60\x25\x14\xf0\xd2\xb8\x61\x11\x78\xeb\xc7\xfe\xc7\xc5\x13\xbf\xf6\xbd\xa7\xbc\x38\xb3\xbd\x7d\xf0\x5c\xe3\x8a\x9c\x59\x78\x0e\x16\xb7\x95\x12\xa6\x2f\x4d\x44\x3a\xd0\xc4\xcd\x70\x2b\xbe\x28\x43\xc8\x9e\x8e\xd9\xd3\xce\xb2\x9f\xa9\x4b\xdb\xf4\x59\xcd\x8c\xa8\x29\x4c\xeb\x89\xca\x85\x38\xbd\x52\xc3\x38\x8e\xed\x49\x29\x02\x87\xba\x2c\xb3\x4b\xcb\xf2\x69\x5d\x95\xdf\xbf\x9a\x15\x35\xd0\xb9\xb2\xc9\x8c\x9b\x3d\x1c\x9e\x95\x35\xd9\x3e\x6f\x52\x9e\x76\x73\x0c\x6d\x57\xb4\x5e\xb6\xb6\xcd\x5e\xcc\xf5\x9d\x34\x6a\xb2\x20\x51\xbf\xf0\xc9\x09\xaa\x34\xe2\x9e\x19\xfe\xe0\x6c\x2e\xe6\x02\x7c\x84\xaa\x05\x82\xfa\x53\xaf\x10\x1c\xbe\x3c\x63\xa9\xeb\xa6\xaa\x3d\x23\xdb\x4d\x25\x28\xcc\x64\x32\xe0\xe9\xbe\x64\x2c\xd7\x0e\x07\xc5\x90\xe7\x8c\x2e\x99\xe5\x04\xa4\xef\x32\xbb\xb8\x95\xdf\x56\x7c\x9c\xa1\x8f\x69\x3b\x99\x9f\xbb\x3a\xe1\x95\x9d\xfc\x61\xbe\x79\x4c\x57\xf9\xe4\x0f\xf3\xfc\x79\xb5\x79\x7c\x50\xf3\xe1\x12\xa8\x74\xdf\xc6\xa0\xcd\x16\xe9\xe5\xcd\x6a\x36\xfe\xc9\x49\x49\xec\x48\x05\x72\xbc\x93\x69\xdc\x9f\xa8\xac\xa0\x7e\x7a\xd2\xe2\x99\xeb\x7d\x2b\x2d\xa8\x1f\x7f\xa6\x6c\x69\x00\x4c\x1b\xc0\x9b\xbb\x5b\x25\xba\x09\x6c\x1e\xfa\xa9\x7d\x05\x35\xd8\xee\xd9\xb1\x6e\x98\xf2\x51\x2e\x6f\xda\x43\xe9\x27\x91\xa1\x36\xc4\x0e\x96\x98\xaf\x7e\x4a\x7e\xd2\xfe\x15\x77\x42\x91\x0c\xcf\x52\xf7\x45\x0a\xe6\xde\xa1\xf5\xc9\xc9\xaa\x1c\xe6\x12\x36\x1d\xba\xb6\x6b\x58\x77\x38\xe1\x0b\x2f\x56\xe5\x3b\xd3\xdb\x15\x2b\x22\x2f\xa7\x5f\xb2\x48\x1d\x19\x45\xe7\x23\xba\xb1\x6f\x32\x82\x1c\x4d\xa3\x65\x87\xba\xca\xf1\x47\xed\xc5\x60\xd3\x8e\x82\x74\x59\x93\x7e\x08\x25\xea\x8f\x54\x75\xfc\x6a\x86\xda\x30\x5c\xc1\x34\x57\x38\xce\x4c\x93\xb8\x6c\x86\xbe\x86\x50\x64\x0f\xab\x2d\x04\x04\xa9\x67\xfa\x72\xed\xa7\x3a\xa9\xb2\x8b\x75\x6a\xac\xd3\xa5\xf6\x29\x4b\xc7\x67\x59\xd3\x40\x13\xa2\x0c\x54\x7f\xf9\xa3\x9a\x82\xa7\xeb\xde\x4f\x19\x33\x2f\xf9\xc5\x05\x19\xc4\xdf\x67\x55\xdd\x15\xc7\xe2\xc0\x8d\xcd\xcd\x72\xe1\x06\x07\x0e\x9b\x5a\x4d\x4c\xae\x3d\xac\xca\xe1\xc3\x54\x7a\xe5\x4e\x6e\x6e\x53\xb4\x9a\x6b\x55\xd9\xb4\xd8\x9c\xed\x6d\x37\xcd\xbe\x79\x29\x9d\x2d\x9b\x1c\x6b\x9a\xda\x9a\x3e\x57\xf9\x63\xbe\xda\xf9\xf6\xfd\x94\xcb\x6d\x13\x3b\x64\xd5\x81\xf5\x4e\xb3\x3d\x1f\xaf\x58\xb6\xf3\x1e\x97\x49\x07\xdf\x26\x28\x53\x0c\xe3\x93\x3b\xfa\x12\x82\x4b\x43\xa6\x4e\x34\x68\x3c\xa6\xfd\x8f\xb3\x85\x83\x25\x0c\xb4\x89\x89\xf4\x20\x26\xad\xe7\x3d\x4c\x1b\xe3\xe4\xc2\x70\x94\xc1\x9d\x8c\xff\xb0\xcf\x8e\xf3\xfc\x00\xef\xe7\xda\xb4\xe4\x42\xcb\x26\x27\x16\x5c\xf6\x57\xeb\xf1\xf1\x0f\xa9\x88\xfb\x34\xe5\xf6\x0f\xfb\x03\x63\x87\xf9\xce\x1b\x07\x24\x97\x74\x4e\x9f\x3a\xaf\xb4\x7d\x48\x45\x9c\x87\x7a\x3e\xa4\xc1\x32\x6b\x19\xae\x70\xd2\x8f\xc7\xc7\xe9\x25\x7b\x29\x2a\x61\x2b\xc0\xfe\x87\x59\x92\x18\xbf\x4f\xab\xeb\x79\xcf\x9a\x76\xb0\x2c\xe6\x5a\x82\x2b\x3e\x5f\x2a\xb0\x6d\x55\xbf\x36\xd9\x65\x27\xac\xcd\x82\xa4\xd7\x77\xf9\x84\x64\xc6\xde\x3a\xb2\xf0\xd2\xb0\x6f\x45\x7d\x6d\x6f\xd8\x88\x90\xc9\xd4\xad\xc5\xaa\xda\x26\xdf\xa1\xd2\x1b\x7b\x9d\x84\xd7\xe6\xa9\x83\xda\x60\xf4\xd4\x24\x00\xa2\xea\xa3\xf7\x0e\xa9\xc4\xf0\x3a\x78\x46\x66\x7b\xf3\x49\xa5\x1c\x41\x9f\x58\x01\x18\x2d\x17\x79\xc6\xa9\x92\x93\x5d\x9a\xfa\xa5\x91\x51\x78\x60\xe7\x69\xd3\x2f\x25\xe4\x6b\x05\xc3\x23\x05\xa2\xd5\x8d\x47\x98\x16\x69\x6a\x00\xce\x5e\x8b\xee\xc4\x57\x4a\x5c\xa1\x90\xb7\x36\x66\x7c\x11\xc2\x91\xa7\x8a\xba\xf9\xa6\x53\xfa\xf3\xbb\x5c\x7a\xa0\x46\xd3\xd8\x8e\x0f\xed\xdc\xab\x35\xe1\xb6\x65\x97\xac\xc9\x3a\xb6\x73\x78\xf0\x45\x51\xf1\xc6\xf2\x1b\xff\x73\x5a\x66\xdf\xeb\x6b\xb7\xe5\x9f\x6c\x90\xa4\xcb\xc5\x01\x8b\x5e\x67\xb0\xb2\x2c\x2e\x6d\xd1\xba\x2b\x0f\x8d\x59\xb4\x75\x99\x75\x2c\x77\xd7\x51\x02\x84\x37\xd7\xb1\xae\x3b\x1b\xc0\xf2\xe8\x7b\xf7\xd5\xdc\xbf\x31\xcb\xf8\x12\x48\x17\x3a\x94\xbf\x8a\x0f\x18\x17\xd5\x25\x5a\x5c\xb9\x1d\x9d\x08\x6f\xae\x64\x07\x5e\x92\x64\x13\x17\xa4\xcb\xb1\x8f\x27\xd3\xc6\x00\xd2\xfd\x74\xc6\xaa\xbe\x19\xf9\xf2\xb2\x6b\xc4\xab\x60\x9a\x11\xcb\x1f\xd0\x88\x97\xfe\x67\x1c\x19\x7d\x6c\x60\xe3\x70\xa8\xae\x29\x2e\x7e\xf4\xaa\x3b\x89\x6d\x8d\x2f\xec\x1b\xab\x50\xa9\xe4\xfe\xe5\x27\x71\x20\x4f\x42\x95\xb1\x10\xbd\xa0\x5b\xdc\x69\xe6\x44\x6c\x86\x1b\x56\x74\xc0\xe1\x1b\xcf\xa7\x86\xb1\xe9\xbf\x5e\xb3\xa6\x63\x4d\x3b\x50\x71\xcb\xa4\x1f\xfd\xb8\xfe\xd9\xa2\xf0\x5a\x4f\xbb\x53\xd1\xe4\x36\xb6\xfe\x2e\x31\x37\x9b\xd9\x66\x63\x21\x9f\xb2\xf2\x08\xd1\xfa\x2f\x12\x61\x9d\x5a\xd0\x75\xc5\x04\x49\x88\xa2\x3f\x4b\xbc\xe5\x72\xb6\x5c\x22\xa8\xb2\x26\x2e\xb2\x2c\xd0\x2b\x05\xbb\x86\xcd\xb5\x3a\x64\xfc\x8b\x55\xc5\xa1\xe0\x66\x0d\xf4\x1d\x61\x0f\xdc\x29\x15\xf2\xaa\xb2\xa6\xa9\x5f\x21\x1b\xf1\xed\x66\x2e\xcb\xfa\x85\x58\x22\x7f\x99\x0d\xa3\x09\x10\xf9\x6a\x68\x05\xf8\x7c\xc2\xc8\x9b\xd0\xe0\xb3\x56\x28\xb1\x50\x76\xb9\x71\x33\x0f\x71\xf9\x27\xd5\x9c\xfd\xef\xc6\xb4\x20\x67\x05\x93\xc2\x1c\x62\xcf\x25\xe6\xd3\x6c\xa9\xff\xef\x67\x83\x02\xf8\x6e\xc9\x62\xc9\xa1\xf6\x2b\x7a\xd5\x93\xff\xf7\x68\x92\x82\x05\x90\xd6\x12\xd2\x5a\x0e\xea\x61\xd6\xc6\x56\x96\x15\xc4\x5a\x99\x3a\x89\x55\x06\x16\x40\x5a\x6b\x48\x6b\x2d\x69\xad\xe6\x44\x6d\x60\x01\xa4\xb5\x81\xb4\x36\xc3\x18\x33\x08\x38\x23\xee\x11\x62\x3d\x2a\x2c\xaa\x6b\xd6\x9e\xbe\x79\x82\xb4\x9e\x4c\xb3\x80\xd5\x66\xe3\xe9\x9b\x67\x48\xeb\x79\x30\x4e\x06\x01\xc7\x54\xcd\x53\x4b\xd1\x52\xa5\x69\x54\xef\x3c\x79\x7a\x67\x6e\xab\xad\xd2\xdb\x67\xaa\x7f\x9e\x89\xfe\xd1\xb3\x68\xd2\x9d\x86\x17\x0b\xe5\xf2\xc8\x76\x5d\xaf\x55\xce\x9a\xb2\xa8\x18\xd8\x7a\x59\xa5\xa9\x49\xcf\x58\xe2\x99\xa4\xcd\x95\x1f\xf4\xa1\xd0\xf8\x10\x6b\x6f\x47\x33\xe0\xaf\x69\x81\xe5\x89\x99\x87\x13\xdb\x8b\x30\x10\xfb\x79\x8f\x98\xd5\xf4\x3b\xa4\x00\xdc\xb0\x4b\xfc\xef\xd3\x0d\x1c\x3e\xda\xcd\x60\x1f\xcb\x0a\x87\x06\x3a\x46\x98\x88\x9c\xe8\xb4\x7d\xcd\xba\xc3\xa9\x5f\xca\xe6\x6c\xda\x76\x59\x77\x95\xcb\xb1\xc9\x4c\xbe\x90\x28\xff\x6d\x44\x74\x4a\x57\x5c\xb6\xdb\xec\x28\xa6\x95\xd7\x7a\xda\x76\xec\x22\x1f\x2d\xa3\x9e\x76\x82\x95\x83\xfe\x94\x5d\x55\x58\x6a\x6e\xcd\xfb\xa8\x98\xfa\x84\xd1\x49\xb2\x1b\xbe\x11\x66\xba\x0c\xc6\x3b\x7c\xa8\x72\xe8\xad\xdb\x86\x95\x59\xbf\x92\x08\xc9\x04\x9c\x2f\x52\xb2\x58\x8f\x87\x62\xa2\x3b\x23\x00\x26\xf6\xb3\x83\xd2\xa0\xe4\x10\x30\xb9\x3d\xee\xee\x67\x5f\xea\xa2\xea\x58\x33\xed\xdd\xb9\xae\x95\x2f\x5a\xc1\xc3\xf3\x7b\x6a\x44\x49\x7a\x43\x5e\x46\xfc\x2f\x5f\x36\x97\xb7\x87\x30\x9f\xd8\x26\x91\x75\x45\x39\x4d\x17\x29\xc1\x4b\x2c\x37\x67\x39\x6b\x0f\xde\x4a\x61\x70\x37\x7d\x82\xf0\xdf\xff\xaf\xff\xf6\x93\x87\x7a\x16\x47\x3c\x23\x68\xff\x6f\x3e\xda\xa7\x4c\xc4\x69\x88\x55\x55\x0c\x1b\x02\x43\x73\x04\xee\x78\x88\xa1\x6e\x11\xba\x9b\x62\xf0\xa2\x9b\xd2\xa2\x92\xdd\xc7\x3c\xa3\x78\xbb\x4d\xed\x5a\xad\x61\x2e\x54\xbb\x58\xb2\x5c\xae\x9f\xc4\xce\x63\xc7\x1a\x75\xea\x25\x82\xd5\xe4\x90\x13\x21\x05\xc5\x6f\xbd\x61\xd3\xd6\xff\x0d\xa3\xe1\xec\x84\xc8\x63\x9d\xf9\xe4\xf9\x59\xc5\xef\xd2\x78\x49\x97\x83\x23\x73\xda\x30\x86\x50\x95\x7e\xb8\x56\x44\x37\xdc\x4f\xd2\x2e\x2f\x2f\x6f\xf2\xb9\x55\xf8\x3c\xeb\x74\xee\x9c\x72\x98\x13\xb5\xda\x5d\x05\x02\xa9\x20\x30\x15\x62\xe5\x3c\x0f\x89\x6f\x44\xe2\xb4\x90\xe3\x68\xb8\xf7\x22\xe4\x4f\xfb\xf5\xcb\x70\x58\xab\x16\x35\x73\xb0\xbc\x30\xc4\xeb\x97\x69\x3c\x96\x8d\x5e\x40\xcd\x74\xa4\x12\x6e\x5f\xc5\x73\xa0\xee\x8e\x47\xdf\x8c\xbc\xd9\x46\x78\x34\xbe\x7d\x96\x61\x03\x0a\xdb\xa2\x59\x60\xc7\xd1\xe2\x89\xec\x89\xfc\xd7\x8c\x9e\x31\x1f\xcf\xc6\x83\x78\xa1\x63\x03\x4c\x4a\x5f\x4b\x73\xef\xcf\xac\xbd\xf9\x7d\xf0\x2b\xf4\x96\xaa\x90\x09\x73\xf2\x30\xa7\xb0\x4d\xae\x25\x5c\x26\xce\x8d\x50\x94\x46\x1d\x14\xab\x8a\x0e\x4b\x59\xed\x6d\xd8\x9b\xdb\xbe\x28\xa4\xf7\x50\x3b\x21\xe8\x32\x9a\x88\x88\x25\x92\x8f\x90\xc3\x61\x0c\x82\x31\x06\x98\x21\x0e\xf2\xe6\x04\x68\xa8\xc7\xb4\xdb\xeb\xbe\xca\xbe\x0d\xe3\x98\xef\x12\x8a\x33\xed\x79\xaf\x00\x22\x58\x81\x9f\x48\xaa\xb7\x93\x7f\x9b\x16\x55\xce\xde\xfa\xe5\xb1\x4d\xe7\xeb\x1f\x4d\x55\x55\x03\xc4\x04\xe0\x1b\x6d\x65\xdd\xb2\xc6\x84\x3c\x64\xe5\xe1\xcb\xb2\x6f\xde\xe4\x6b\x3f\xd8\x1e\xc6\x1c\x52\x5a\x55\x91\xad\xd0\x73\x7e\xe1\xdb\x56\xfd\xd8\xd4\xc1\x3d\x4a\xb7\xf9\x52\xdf\xf6\xc7\xed\xa0\x4f\x18\xee\x3c\x44\x3a\xca\x8a\x19\xe4\x67\x55\x2d\xe6\x12\xed\x6a\x4c\x0e\x75\xce\x6e\xf0\x9b\xd6\x79\x13\xb3\x18\xdc\x76\xfb\x7b\xd4\x39\x28\x42\x0f\x3b\xf3\x84\xea\x84\xe3\x61\x47\x6d\xf2\x70\xcd\x8b\x77\xa8\xcf\x97\x92\x59\x27\x8f\xf2\x88\xde\x8b\xe8\x9e\xa6\xca\xd3\x27\x3f\x3b\xfc\xd8\x54\x9c\x82\x79\x31\x4f\x75\x59\xd6\xaf\x4e\xbc\xa1\x35\xa4\xad\x88\x04\x87\x8a\x71\x23\xca\xb8\x1f\x28\xe7\x89\x44\xb2\x2e\x3a\xb1\xab\xba\x9a\x0c\xbf\xaf\x8d\xdf\x37\xf6\x4b\xd9\x72\x17\x9b\x97\xeb\x03\x88\xa6\xae\xcf\xe0\xfc\xc1\x06\x32\x26\x43\x8b\x9e\x08\x5b\xce\x26\x19\x8c\xdb\x08\xad\xd5\xdf\xb9\xde\x0a\xe0\xc3\xb5\x69\x58\xd5\xfd\x7d\xff\x87\xd5\x2c\x43\x44\x82\x13\x8c\xc0\xa7\x3a\x74\xf6\xf3\x3a\x41\xef\x33\x76\xde\xf7\xd3\x43\xd6\x16\x87\x69\xde\xd4\x97\xbc\x7e\xad\x30\x1f\x05\x83\x53\x31\x33\x88\x47\x22\xa6\x71\x7e\xb8\xa6\x4c\xd7\x3c\x05\xce\x02\x38\x0f\xf7\x51\x9f\x8a\xe8\x56\x65\x68\xfd\xa0\x22\x88\x56\x5b\x5c\x14\xb8\xef\x99\x32\xfb\x6e\xdb\x5f\xdb\xbf\x4b\x27\xfd\xcf\x6c\xfd\x60\xae\x75\xcd\xe7\xe8\x87\x8a\x49\x5f\x4b\xbf\x80\xef\xac\xe9\x02\x62\xbf\xd6\xcd\xf9\x54\x97\x6c\x5a\x37\xc5\x4b\x51\x59\x11\xf9\x0a\xf9\x52\xbf\xb2\x46\x2e\xb6\xa6\x5d\x53\xbc\xbc\x90\x37\x21\x95\x0b\x31\x7d\x0b\x6c\x38\x9b\x4f\xec\x8b\xcb\x03\xd7\x56\x33\x81\x57\x62\x9c\x02\x6b\x57\x86\x16\xd2\x5e\x49\x0d\x61\x5e\xdc\xe1\xd8\x1d\x4a\x96\x35\xdb\x7d\xdd\x9d\x7c\x54\xa6\x7a\x36\xf7\x70\x02\x17\x8b\xad\xc8\xcd\x2c\xcb\xe8\x7d\x1e\xa3\x50\x3a\x24\x68\x99\xf0\x5e\xec\x22\xeb\x6a\x19\xda\xd7\xba\x16\x7b\x56\xd6\xaf\x9e\x3a\xfc\x25\x6b\x8a\x6c\xca\xde\x2e\x59\x95\xb3\xfc\xcf\x5d\x73\x65\x7f\x9d\x04\x68\x16\xd5\x94\xdf\x24\x19\x49\xf6\x76\xff\x59\xa1\x5f\x9e\x6c\x5f\x7f\xbb\x57\x98\xae\xbe\xe0\x92\xf4\x05\xb8\x18\x80\x05\x72\xa5\xe6\xf9\xf9\xd9\x5a\xf5\xb8\x03\x04\x89\x66\xc0\xc7\x0c\xca\x54\xee\x05\xf2\x98\x70\xd7\x1a\x62\x37\x6c\xa4\x55\xd1\x01\x73\xa9\xbd\x60\x93\xbe\x36\xb7\xa1\xb2\x05\xda\xee\x7b\xc9\xb6\x5c\xf5\xe0\x7a\xe9\xf1\xf2\x96\xac\x7a\x17\xd6\xbe\x65\x95\x65\xe6\x1b\xfc\xe0\x3d\x7e\xa1\xe6\xeb\xcb\x9b\xbf\x33\xb1\xae\x4a\x42\x4d\x30\x78\x5f\x4d\xdd\x65\x1d\xfb\x32\x7f\x4a\x73\xf6\xf2\x80\xb6\x1d\x1f\xfe\xd3\x7d\x87\xb5\x9c\xb5\x66\x97\x41\xbb\x86\xd0\xa8\xa5\x38\x5f\xcb\xae\xb8\x94\x6c\xca\xef\x50\x09\xd7\xe3\x98\x9d\x8b\xf2\xbb\x32\x57\xc6\x04\xaa\xbe\x98\xa1\x24\x68\x87\x99\x8e\xa9\x42\xa2\xee\x0b\x4a\x77\x65\x0b\xe6\xec\xb2\xce\xba\x6d\xaf\xda\xde\x9b\xd9\x42\xed\xfa\xa9\xa5\xea\x44\x58\x76\x74\x4d\xb7\xfa\xc1\x7c\x64\x83\x94\x79\x27\x12\x9b\x12\xb8\x99\xa6\x2f\x79\xee\x86\x01\x35\x8a\x98\x6a\x26\xfe\xe7\xf4\x73\x49\x9f\xeb\xdf\x3e\x9b\x62\xfb\x11\x41\x35\xb9\xfa\xd2\xeb\x72\x8b\x2e\x9f\xc3\x78\xee\x4e\xc9\x4b\x93\x7d\xb7\xa2\x59\x56\x97\x37\x25\xce\x72\xb9\xc4\xa2\x86\x56\xfd\x8f\x11\xca\xba\x72\xaf\xa3\xba\xda\x3d\x9f\xad\xd6\xa6\xba\x4a\xb9\x45\x36\x8e\xfe\x7f\x97\x84\x5a\xea\x3a\x34\xec\x5c\x7f\x63\x7c\x50\xe3\x1e\x67\x08\x4d\x5c\x15\xe1\x5e\xf4\x83\x6e\xfb\xd9\x1a\x37\xbe\x2c\x6b\x0e\x43\x64\xc3\x8a\x10\x4e\x80\x49\x9b\xe0\x6e\xdd\x98\x1e\x80\x9a\x79\x0c\xcf\xcf\x35\x18\x98\x3d\x18\x1a\x9a\xdb\xa8\x7d\x96\xbf\xb0\xc9\x6c\x5f\xbf\xb1\x5c\x05\x2d\x0d\xf1\x52\xee\x7d\xc7\x80\xd4\xc0\xbd\x89\x74\x43\x00\x31\xed\xe1\x7b\xdd\x19\xda\x0b\x82\x4a\xf2\xb8\x46\xd4\xd1\x8e\x64\xb3\x23\x1f\xc2\x5e\xa3\x12\x32\xe0\xea\x73\x1f\x23\xda\xd5\x73\x37\xc3\xee\x70\x77\xee\x11\x93\xbb\x7b\xa8\xcf\x1a\x49\x40\xf9\x76\xf6\x5d\xa7\x28\x5f\xf6\xa3\xce\xd4\x58\x19\xcd\x40\x39\x84\x9c\x32\x89\x65\xd1\x76\xd2\x9b\xe1\x55\x89\x5e\x74\xf8\xa8\xfe\xa5\xa9\x4b\xf6\xe7\x9e\xf4\xbe\x7e\xfb\xab\x0e\xb9\x99\x7e\x17\x3e\x94\x22\xa9\xbf\xb7\x87\xa6\x2e\xcb\x7e\xb4\x76\xf5\x95\x5f\x13\x7e\xd3\xba\xbd\x90\x97\x4b\x48\x6e\xf6\x69\xc2\x30\xf0\x9f\x08\xf3\xc3\x2f\x2a\x0b\x6f\x4a\x4d\xd3\xd2\xf1\x35\xbc\x54\xf7\x42\xfd\x38\x5a\xa8\x67\x26\x24\x46\x75\x50\x14\x85\xa4\x42\x4f\x29\xe3\x24\x35\x19\xa8\x38\x36\xe5\xef\xbb\xa1\xa5\x79\x98\x88\xdc\x1f\x21\x69\xac\x9f\x9e\x1f\x8f\xfb\x9d\xbb\xbb\xe0\x36\xe0\xb4\xca\xce\x7a\x47\x24\x67\xc7\xec\x5a\x76\x3b\xeb\x78\xc3\xe7\x39\xa0\xcd\x16\xef\x79\x81\x94\x00\xa8\xe5\x17\xcd\x65\x5e\x17\x15\x16\xdb\xab\x62\xa8\x0a\x04\x4a\x44\x4b\xc0\xcb\x72\xd4\x34\x7a\x0f\x13\x39\x66\x00\x83\x55\x3a\x9a\x01\x46\xe6\x5e\x39\x91\x2a\x53\xcd\xaa\xba\x3b\x2f\x9a\x3f\x37\x5d\xf9\xd7\xc1\xa3\x13\x1b\x90\x9b\x48\x3c\x54\x98\x90\x16\x44\x11\x41\x55\x45\xcc\xe0\xb1\x95\x42\xe9\x5a\x3e\xe9\xfd\x02\x52\x2b\x33\xee\x63\x72\x41\xef\x17\xd2\x5c\x78\xf2\x7e\x5c\xeb\x83\x93\xa2\x2a\xba\x22\x2b\xef\xa7\x3d\xac\x4d\xe5\xa1\x4c\x14\x69\x35\x41\xfa\x69\x7f\xd2\x68\x95\x6b\x62\x6a\x18\xfc\x38\x59\xac\xd1\xd8\xc8\x23\x9d\x1f\x24\x07\xca\xed\xc7\xd6\x1a\x6b\x67\x3e\x9c\xb2\xc3\xa1\x6e\x72\x7e\x75\x42\xff\xca\x2f\x3f\x4f\xf0\x22\x11\x11\x17\x75\x58\x6c\xe5\xe6\x79\x34\x8e\xbd\x49\xae\xe6\xc1\xa4\x47\x02\x70\x7e\x49\xf8\x87\xc6\xe9\xb4\xe3\x21\x2e\xbc\x55\x07\xf9\xb2\x68\x19\x8c\xf3\xd1\x40\xcc\x5d\xe0\x94\xdc\x7f\xc4\x4e\x08\xca\x3b\x02\x5c\x18\xc5\x8e\xb0\x4b\xf6\xb6\x9d\x7b\x28\x90\x97\xb0\x02\x38\x45\x05\xef\x5f\xab\x08\x04\x12\xc9\xfe\x5b\x1f\xb8\x18\xeb\x52\x60\xec\x7d\x9a\x62\x13\x14\x81\x8a\x22\x47\x56\xef\xd7\xf3\xf5\x2e\x72\x80\xc4\xd7\xb0\x37\xf3\x1c\xd6\x3a\xa2\x75\x2f\xd8\x60\x49\x89\xc0\x1d\x83\xbf\xaf\x73\xf6\x0f\x45\xd3\xd4\xcd\x64\x76\x38\x4f\xdb\x69\xef\xa1\x4b\x8a\x46\xe1\x0d\x24\xa4\xe2\x82\x60\x37\x2e\xc9\x9c\x57\x36\x8e\x1d\x03\x22\xd2\x8a\xa6\x13\xf1\xff\xfc\x6e\xb6\x8b\x20\xcf\x2f\xc9\x73\x47\x2a\x00\x86\x6d\xfa\x1f\x8c\x62\x7b\xdd\x77\x25\x12\x50\x64\xde\x13\x5f\x3e\xc0\x44\x85\x8a\x88\x7d\x53\x14\x5e\x06\xf5\xe0\xa0\x75\x77\xae\xa6\xbb\x38\xde\xea\xab\x2b\x56\x44\x66\x8b\xde\x7d\x76\x29\x12\xd5\x1f\xfa\x81\xaa\xbb\x3d\xe6\xe0\xad\x1a\xf8\x28\x3a\xc0\x41\xeb\xbe\x5c\x4d\xd6\xf3\xc9\xe6\xc9\xaa\xb8\x46\xf0\xf7\xbb\x0c\x00\xc2\x2b\xae\xae\xc8\xb9\x44\xa9\xae\x37\xdf\xd1\xa6\xaa\x6f\xdd\xeb\x35\x2e\xf0\x3a\x8f\x81\x9b\x28\x78\xc7\x9b\x0c\x41\xfd\x15\x8a\xb7\xfa\xfc\x1a\x31\x11\xf7\xa5\x1e\x85\xb7\x09\x12\x55\x1f\xba\x81\xaa\xb7\x1b\x21\x01\xef\x1b\x7b\xb1\x46\xaa\x3d\x78\x7b\xda\xd7\x00\xf2\xfa\x33\xd1\x06\xea\xd1\x60\x84\x2c\xd5\x0c\x8f\x93\xf9\xd3\x66\x32\x5f\x3c\xfb\xf4\xbf\xc2\x14\x00\x89\x32\x01\x28\x23\x9b\x60\x78\x88\xd4\x53\x7f\x75\x39\x9b\x1a\xf8\xf2\xe9\x2e\x9b\x26\xa5\xfe\x43\x28\x25\x55\x77\xf1\x36\xdd\xa8\xba\xeb\x57\xf5\xe2\xeb\x3e\x3c\x6e\xf7\x79\x75\x57\x34\xef\xaf\xbb\x7b\xb9\xdd\x7a\xdc\xc2\x87\x35\xb2\x05\xc0\x3b\x49\xbe\x01\x20\xaf\xd3\xe3\x8d\xa0\x1f\xb8\x41\xc8\x12\xed\xb0\xda\x4c\xe6\x8f\x9b\xc9\xfa\x91\x6e\x07\xf7\x56\xbe\x95\xdf\xdc\x87\x35\xb2\x1d\xc0\x53\x19\xbe\x89\x40\xe6\x01\x20\x7c\x00\xf5\xc6\x01\x42\x96\xf4\x02\xd2\xc9\x7c\xb5\x98\x2c\xbd\x33\x41\x85\xc7\x7e\x20\x91\x5c\x16\xd2\xc8\x66\x30\x33\xa6\x7b\x5a\x41\xe5\x2f\xc0\x5b\x41\x67\xbd\x76\xa9\x52\x8d\x90\xa6\x93\xcd\x6a\xb2\x5e\xd0\x6d\x10\xeb\xc7\x89\xa3\x16\xed\x91\xce\x87\x3b\x91\x03\x88\x4e\x7a\x23\x39\x6d\x16\x8f\xeb\x67\x68\xdd\xf3\xe7\x9c\xb1\xcd\xbb\xcc\x4b\x2c\x7c\x62\xfb\x64\x0b\x1c\xf3\xb8\x37\xa6\x39\x4f\x13\xc4\x5c\x0c\x39\xd7\xbc\x01\x64\x02\xff\x9c\x8a\x60\x65\x2f\x08\x5f\xea\x78\x2e\xfb\x22\xeb\x2d\x77\x29\x04\x96\x4a\x7c\xa5\x90\x17\x8d\x14\xbe\xa9\x5f\x41\xba\x9d\x7d\xd6\x32\x71\xf1\xac\x87\xeb\xd7\x0e\x5b\xb9\x80\x08\xd5\x24\x99\x5d\xae\x65\x29\x96\x30\x11\xb5\x32\xc1\x6f\x6e\x96\xa6\x20\xbb\x99\x99\x53\x35\xc8\x6d\x86\x25\x5b\x7d\x74\x3b\x13\x6d\xff\x7b\x57\xd9\x51\x52\x11\x4b\xd0\x28\x5c\x3d\x9a\xdd\x33\x32\x2b\x12\x73\x04\xb9\xaf\x56\xa9\x91\x7f\x6e\x38\xb5\x02\x19\x08\x23\xdb\x11\x25\x6c\x64\x96\x18\x32\x55\x8e\x3a\xef\xf2\xf2\x05\x3c\xc0\xf8\xb1\x8c\x1c\x39\x9e\x9c\x0b\x04\x6e\xc2\xbd\xa0\x04\x33\x22\xf9\x1e\x5c\x4e\x8f\x24\xf3\x8b\xdc\xf1\xfa\x56\xb0\x57\x73\x53\xe8\x17\xb8\x91\x34\x96\x6a\xcc\xfe\xd2\xc7\xfa\x03\x59\x05\x6d\xff\x30\xcf\x16\x9b\xa5\x9d\x89\x67\xbd\x7e\x4a\x33\x6b\x39\x1c\xa4\x3e\xe4\xd4\xb8\xff\xa0\x38\x68\x7d\xdc\x7b\x25\x1f\xda\xe6\xf2\xf2\x6b\xea\x57\x73\xab\x88\xcc\x94\xa6\x4c\x77\x98\x9c\x3d\x12\x7b\x0e\x46\x85\x90\x49\x4e\xef\x7c\xfc\x82\x1a\x48\x74\x30\xf9\x36\x74\xa2\x68\x9b\x96\x87\xd4\x01\x12\xdb\x54\x01\x33\x8f\x17\x99\xe2\x0b\x21\xcc\x77\x3b\x82\x55\xf6\xe4\xf5\xba\x83\x3c\x52\x6b\xb2\xd9\x50\x02\x48\xc5\x91\x1d\x1e\x2c\x35\x19\xc2\x81\x4f\x4f\xe1\x4e\x37\x6f\x52\xf9\x36\x74\xa2\xc8\x63\xfd\xae\xf6\x44\xa2\x08\x60\x5d\xef\xdd\xea\x21\xc9\xf7\x76\x2a\x58\x7b\x34\x1d\xdb\x5d\xa4\x91\x9a\xe3\xed\x86\x21\x23\xb5\xb6\x77\x78\x60\x0e\x39\x84\xae\xdc\xe2\x08\x57\x99\x4e\x1c\xe7\x57\x79\x82\x01\x56\x71\x99\x86\x2e\x96\x04\x56\x7d\x77\x7f\x07\xcb\x7f\x87\xaa\x55\x15\xee\x77\x4f\x6e\x3b\x7f\x23\x60\xd4\x91\x16\xd0\xaf\xb7\xc7\xe0\x23\xd5\x47\xb6\x38\xb0\xe4\x7c\x08\x83\xa2\x3a\xd6\x3f\xae\xfa\x18\xf5\x31\xd5\xc7\xf0\x3f\xb5\xfa\x72\x9f\x23\x3c\x0a\xe8\x6c\x84\xfe\x16\x20\x18\x60\xa3\x40\x3d\x76\x1c\x49\x02\x1b\x05\xee\x26\x0f\x96\x54\x11\x9b\x57\xc5\x3e\x47\xd8\xfc\xd3\x69\x14\xfd\xed\x40\x30\xc0\x26\x00\xf5\xde\x65\x24\x09\x6c\x0a\x40\x37\x79\x9c\x6c\x90\xa8\xb5\xad\x5e\x58\x13\x6c\x06\x4f\xfe\x47\x7f\x33\xe0\xf4\x91\x56\xd0\xef\x9f\xc5\x51\x40\x1a\x01\xdb\xe3\x41\x92\x58\x9a\x87\x7b\x32\xc4\xee\x66\xdc\x32\x5a\x8b\xfc\x4e\xfc\xd0\xef\x94\xb5\xa7\x62\xda\xb0\x4c\x24\x5f\x77\x4f\x05\x39\x80\x79\x1e\x88\x6c\x00\xf3\xe3\x06\x9d\x33\xc3\x3c\x39\x36\xb2\xd4\xc8\xe0\xff\x73\x5d\xd5\xfc\x70\x53\x07\x03\x8a\x10\xdc\x73\x5d\x77\x27\xfe\x2c\xed\xb5\xab\xed\x48\x68\x53\xd8\xc4\xac\x9c\xc8\xc8\xdb\x4e\xd0\xca\x60\x90\x98\xf8\xe6\xe2\x45\xae\xe6\x08\x76\x62\xb7\x29\x82\x9b\x00\x04\x21\xbe\x62\x61\xda\xd7\x31\xd1\x6e\x05\xc1\xa6\xaf\xbd\x48\xfb\x19\xc1\x6a\x00\x56\x5b\x67\xcb\xc3\xfa\xf9\xf1\x31\xd8\xc1\xea\xe9\x9d\x24\x2f\xbe\x01\x85\x91\x81\x4c\x84\x02\x84\xd0\xfc\x67\xaa\xf3\x07\x6f\xad\xb7\x5b\x41\x86\x07\x3a\x79\xe0\x7e\x69\x2f\x59\x35\x0a\xd8\x87\xe1\x69\xd9\xf1\x18\x77\x32\x42\x85\x1c\xd5\x96\x3d\x6e\xff\xf7\xa1\x3e\x9f\x59\xd5\x11\x7c\x2d\x28\x3b\x7d\x07\x42\xaf\xed\x9a\xa2\x7a\x99\xd0\x45\xd3\x45\x80\x97\x4b\x81\x04\x9a\x2e\x6e\x96\x77\x87\xb0\xf5\x8e\x0d\x08\x74\xd3\x61\xad\x2b\xb6\x7e\x42\xa9\x7d\xcb\x9a\x42\x64\x76\xf2\x14\x06\xeb\x88\x51\xf1\x80\x0d\xf5\x9c\xe7\x19\xeb\xe7\x15\x84\x79\xce\x8e\x01\x72\x39\x3b\x46\xb4\x57\x7d\x61\x4d\xd6\x91\x86\xcb\x06\x8b\xd0\x89\x5f\xd9\xf7\xd7\xba\xc9\x03\x04\x25\xd4\x90\x3a\x3f\xcf\xd7\x8f\x28\xbd\xac\xab\xcf\x01\x62\x3d\x88\xa2\xf4\x94\x3e\xe6\x0c\x97\xec\xcc\xba\x0c\xed\xc9\x2e\x0b\x69\xa0\x8d\x8a\x80\x74\xd9\x4b\x44\x7b\x67\x5d\xd7\x14\xfb\x6b\x87\xab\xd4\xbf\x5e\xb3\xb2\x38\x16\x41\x05\x46\xa9\x20\x70\x9a\xde\xd0\xce\x69\xfa\x84\xb7\xf3\xa5\xe9\x3b\xb9\xfb\x1e\x20\xa9\xc0\x22\xea\xba\xbf\x16\x65\x57\x54\xfe\xc1\xb3\x0c\xf0\x43\x88\xf8\xc6\xce\xd2\x53\x53\xd3\xae\x8a\x50\x2f\x71\xc1\x4a\x1b\xd2\x08\x7b\x8c\xe2\xc1\xb5\xc3\xaa\xff\x21\x19\x9f\xb3\xee\xd0\x3b\x33\xfb\x26\x3b\xfc\xca\x28\x53\xec\xc1\x70\x12\xc9\x0c\x39\x05\x4d\x5f\x34\xd6\xeb\xc1\x05\x08\x78\x75\xdc\x2d\x7a\x9f\x1d\xea\xcb\x77\x95\x2f\xcf\xca\x33\xda\xe8\x87\xee\xd4\xf1\x05\xdf\x0f\x35\x30\x12\xf9\x06\xa7\xec\x30\x7d\xe5\x08\x01\xe1\xcb\xa2\x2e\xeb\x8a\x83\x27\xed\x20\x82\x97\xb4\xdf\xe4\xfb\x5f\x66\xda\x86\xf7\xd9\xa1\x2c\xa6\xaf\x45\x95\xd7\xaf\xf6\x43\x56\xc6\x7e\xa2\xe9\x11\x0f\xd7\xa4\xc4\x21\xd6\x40\x20\xe1\xb9\x21\x8c\xbc\x03\xa0\x70\x38\x07\xb2\xb6\xe3\x06\x18\x9e\xf3\xa3\xcc\xda\xbe\x72\x20\x9e\xce\xbe\xe9\xeb\x8b\xee\x76\x53\x42\xd0\xbb\xc9\xf2\xfd\x3b\x7d\x76\xb2\x14\x87\x27\x9b\xcb\x5b\x22\x7f\x9f\x2d\x23\x82\x08\xa3\x1f\x02\x87\x4b\x12\x9e\xf7\x19\x3b\x94\x11\xe9\x20\xd5\x63\x76\x3c\x34\xd1\x7e\x84\x73\xb8\xb5\x6b\x1f\xed\xda\x6d\xa5\x9e\x80\x8c\x48\x45\x10\x59\x8b\x89\x99\xca\xa8\x07\xd4\x51\x64\x36\x6f\x33\x1d\x8a\x4f\x82\xd9\x3d\x0f\x49\x23\x6f\xcc\xc4\xf7\xc4\x44\xc9\xde\xff\x67\x1d\xca\xf7\x0e\xa3\xaf\x26\xa1\xd0\xfe\xd8\x9a\x06\xaf\x08\x18\x07\x50\x54\x6b\x3c\xae\xef\x11\xf6\xd2\xb0\x63\xf1\xf6\x21\x39\x05\x09\x32\x34\x83\xcb\x25\x2c\xcf\xd4\x7c\x4b\x0b\xbc\x2b\xeb\x9e\xd2\x8f\x7e\x52\x7f\xca\x1f\xa0\xd1\x97\x45\xc1\x48\x47\x72\xc3\x60\x48\x5f\x07\x74\xf3\x88\x7e\x3a\xe7\x87\x56\x08\xc2\x60\x85\xcc\x52\x5f\xe6\x13\xeb\xae\x2e\xf1\xc2\x33\xce\x05\xbe\x33\x1d\xe2\xe5\x8e\x65\x72\xb0\x62\x4c\xcd\x83\xd1\x50\x85\x71\x9c\x70\x33\x78\x42\x0c\xf0\x93\x45\x42\xd4\x21\x24\x25\x5a\x52\x13\x25\x4e\xd0\x40\x42\x3c\xf7\x94\xd3\xc9\x30\x62\x3e\x73\xa8\x2f\x6f\xed\xec\x8b\x4f\x44\xe2\x0d\x24\xc8\x5d\x33\xe8\xa7\xb0\x88\xdb\x78\x23\xf2\xb7\x6b\xd2\x1e\xfb\x00\xc6\xbd\x5e\xfb\x0c\x19\x8b\x2e\xe2\x38\xd6\x21\xe5\x40\x8c\x33\x4b\x24\x5d\x0f\x2c\x2d\x3d\x78\x9a\xca\x16\x0d\x9f\x2b\x75\xd9\xf0\xe2\x65\x59\x24\xd7\xd2\x77\x77\xd8\x79\xd6\x25\x75\x99\x61\x97\x6d\xc4\xfc\x6f\x9f\xbe\x1b\x97\x7e\x57\x98\x23\x66\x53\xfe\xe5\x5a\x82\x4b\xce\x76\x79\x62\x7f\x41\xe4\xc5\x72\xcd\xd8\x37\xeb\x23\x28\x27\x62\x10\xe0\xb9\x9a\x97\x97\xb7\x84\x0f\x89\xa2\x1a\x5e\x48\xb9\xbc\xd1\x8e\x0d\xc5\xe5\xab\x53\x21\xfc\xca\xbd\xe3\xad\x50\x04\x95\xe9\x0d\x03\x3a\x8f\xd5\x29\xef\x6e\xf0\xd3\xcc\x4d\xce\xc5\x20\x8c\x3a\x9f\x89\x14\x46\xb4\x64\xb4\x48\xb2\xe1\xc1\x82\x64\x03\xda\xfa\xf9\x09\x58\x2d\x97\x1c\x3b\x5f\xba\xef\x44\xd7\x3d\x5d\xde\x12\x9e\x07\x52\x6d\x6a\xcb\x6b\x42\x1c\x67\xaa\x9e\x1d\xb5\x1e\xd6\xa1\xcf\xd4\x4d\x3b\x0a\x48\x24\xf0\x4f\x7e\x2a\xc1\x93\xa8\x0e\x5e\xf1\xa2\x71\x9e\xca\x46\xde\xe8\xf7\x52\x05\x71\x54\x69\xb2\x50\x09\xc3\x4d\x12\x3b\xcb\xf0\x05\x09\x26\x6d\xd7\xd4\xd5\x8b\x6d\x30\x01\xa0\x19\xe6\x66\xc5\xb4\x31\xb1\x4f\x5e\x57\x5d\x56\x54\xfa\x65\x0f\x27\xc1\x9b\x19\xaa\xb6\x58\x7f\x3b\x79\xc3\x21\x0f\x75\x79\x3d\x57\xce\x73\x92\xe2\x09\x7f\x64\x79\xe4\x76\x98\x23\x57\x22\x3f\xa8\x2e\x97\xba\xb5\xfe\xf6\x6a\xbe\x83\x20\x0e\x54\xfc\xa8\x89\x48\x5f\x78\xc3\x3a\x0f\x47\x6c\xbb\xec\xf0\xeb\xb4\x6b\x86\xc4\x13\x31\x4f\xc8\xda\x47\x64\x24\xf9\xb2\xa8\x7e\xd5\x99\x71\x84\x29\x59\x0f\x13\xb8\xfe\xdb\x67\x6a\x76\x74\x73\x60\x4a\x7a\x6c\xa7\xec\xed\x52\xd6\x0d\xe8\x6f\xf0\x5d\x3e\x5d\x1b\x0e\xc3\xa3\x5f\x32\x30\xa9\x89\x04\xc5\x19\x9e\x97\xd7\xda\x5b\x40\xf0\xd4\x6b\xd4\xfc\x12\x2a\x9d\x3a\x12\x56\x60\xdf\xb0\x2c\x3f\x34\xd7\xf3\x3e\xc9\x26\xa8\x34\x88\xff\x4e\x52\x90\xd3\x30\x4f\x4e\xc5\x91\xfa\xce\x2a\x2a\x9d\xda\x1c\xa1\xef\x47\xb9\x65\x55\x71\x16\x35\x68\x2f\x45\xf5\xef\xb9\xa6\x24\xb3\x75\x9b\x14\xd5\xb1\xa8\x8a\x8e\x25\xe2\xd1\x5f\xb5\x80\x5f\x38\x13\xb8\xa5\x73\xcf\xe9\xea\x69\x63\x04\x57\x72\xd7\x51\x34\xae\x99\x53\xcb\x59\xf4\x99\x85\x48\x62\x42\x61\x91\x8d\x47\x6c\xa5\xca\xb0\x33\xf2\x28\xad\xf0\x37\xa7\x22\x3c\x54\xa7\xd6\x5d\xa7\x3f\x27\xd3\xe4\xcb\x9c\x9d\x93\x3f\x25\x8b\x87\x07\xb2\x9d\x6f\x43\x5a\x28\xaa\x27\xca\xc2\x48\x92\x0e\x26\x05\xb2\xef\xc0\xe0\x1a\x5e\x8b\xd6\xe9\xe5\x60\xa8\xc3\x90\xdd\xca\x4e\xef\x8d\xbf\x8d\x47\xb1\x9d\x0d\xc9\xcb\xb3\xc9\xac\x38\xf7\x06\xfb\x58\xd8\x6f\xb2\x79\xc4\x26\x72\x59\xc7\xe8\x3b\xa1\x7a\x37\xec\x86\xec\x9d\x2a\x7f\x53\x5d\xdd\xd3\x90\x2f\xb2\x9a\x33\x06\x95\x3b\x49\x9e\x4b\x3b\x99\xbd\x05\x09\xfb\x15\x72\xe8\x49\x8f\xc8\xca\x2c\x25\x02\x52\x88\xfe\x12\x25\x7c\xff\xe1\xc2\x2a\xfb\x16\xc7\x32\xe5\x97\x39\xd7\xf3\xfd\x7c\x11\x14\x4a\xd9\x2c\x0c\xb0\x77\xe3\x81\xf4\xee\x76\x81\xf5\x56\xb7\xf9\xfc\x2e\xfa\x64\x04\x2f\x7a\x18\x12\x60\x2f\xd2\xdd\xd0\x39\x5b\x8d\x92\xb0\xac\x65\xd3\xa2\x9a\xd6\xd7\x2e\x99\x2d\x5a\x4a\x3a\xdd\x04\x28\xb3\xf4\x81\xc2\x4b\xe4\x77\x79\x6d\x7a\x42\x82\x55\xf5\x39\xcb\xa7\x65\xfd\x52\x8b\x8d\x61\x3d\x52\x29\x84\x1e\xd4\xf0\x45\x42\xdb\xaa\x88\x83\x62\x3e\xf8\x6b\x2e\x89\x17\xdc\x33\x50\x7c\x79\xdf\x18\xcd\xa8\x4a\xf8\x31\x43\xef\x98\xda\xee\x28\x99\x1e\xf7\x0f\x29\x5b\xad\x97\xa9\x36\x1a\x2a\x4f\x1a\x37\x7b\xf3\x34\xfd\xf6\x9a\x7c\x4d\x64\xbf\x0d\xe2\x7e\x3b\xc1\x34\xb9\x48\x07\xfc\xf3\x97\x69\x5f\xaf\x07\xb3\x87\x25\x13\xbb\x7f\x07\x85\x98\x3f\x8f\x1f\x22\xa4\xce\xf2\xaa\x3b\x2d\xe3\x53\x9a\x7f\xfe\x92\x3e\xe8\x96\x98\x3d\xea\x61\xa1\xee\xd7\xe3\xa3\xc1\x7e\xd0\xdc\x7e\x54\x7b\xf6\xd8\x77\xa6\xce\x30\x0c\x7a\x5d\xa8\xd5\x53\x7a\x58\xff\x7f\xbc\x3d\xfd\x6e\xa3\xba\xf2\xaf\x82\x7e\xab\x4a\x5b\x6d\x40\x90\x84\x74\xbb\x2b\x55\xe7\x8f\x23\x9d\x07\xf8\x3d\x81\x9b\xb8\x29\xa7\x24\x70\x80\x76\x5b\x45\x7d\xf7\x2b\xfc\x39\x33\x1e\x03\xed\x9e\x7b\xb5\xd2\x36\x80\x67\x3c\x36\xc6\x9e\xef\x11\x22\x90\xe7\x50\xe7\x77\xfd\xcb\xd1\x32\x3b\x65\xfb\xfa\xf1\x79\xa2\x83\x80\x7a\x94\xf7\x77\xb8\xbf\x47\x58\x68\xea\x35\xcb\x30\x66\x1e\x49\x02\x7e\xa7\xea\xe7\x05\x24\x41\x8d\xb6\xdc\x0b\x28\x68\x03\x3f\xf4\xe9\xf6\x2e\xae\x18\x2f\x7b\x22\x52\x98\x11\x1f\xa4\x62\x4f\xb4\x14\xa7\xc5\x3f\x92\x66\xfe\xb9\x6d\x65\xb7\x17\x3d\x4d\x1e\x4a\x12\x9d\xa3\xc3\x68\x8d\xeb\x8a\xa3\xdc\xa4\xb0\x86\x02\x47\x44\x2b\xaa\x0e\x1f\x6d\x6b\x35\xe6\x48\xd3\x24\x1b\x64\x77\x0a\xb2\xb0\x23\x04\x66\xd6\x22\x18\x68\xd0\x9d\x19\xd1\x54\x97\x8f\xa2\x1f\x25\xdd\x47\xd1\x57\xb4\x70\xef\x82\x31\x66\x13\x89\x12\xff\x6e\xee\xd3\x43\xf5\xe0\x1c\x10\xcc\x01\xcb\x3a\x7b\xf9\xd6\x8a\x3b\x39\x1c\xe4\x61\x85\x6e\x1d\x64\x2d\x07\x49\x6a\x3a\x14\xfb\x47\x0c\x28\x0f\x55\xd0\x68\x0d\x1b\x25\xd9\xf8\xbf\x93\x1b\xc0\x2a\x31\xc9\x5c\x3d\x17\xb6\x0c\xd8\x91\x8b\xb0\xa4\x8b\xe0\x0c\xb5\x08\x70\xbb\x04\xd0\x4e\xc6\xc7\xba\x4c\xb2\x93\xe8\x9e\x34\x87\xa1\x49\x26\xd6\xfb\xa5\xc0\x86\x6e\xe2\x57\xb9\x14\xda\x12\x4f\x3c\x12\x23\xe0\xea\x83\x0f\x2a\x79\xc4\x1a\x37\x35\x58\x36\xe4\xe1\xfe\x51\x9c\x8f\xf2\x02\x4c\x68\x41\x1a\xb9\x08\xa4\xae\xdc\x86\xf2\xa1\x4f\xb7\x55\x21\x37\xa8\xfd\x78\x67\x06\x66\x2f\xeb\x9a\x00\x8d\xb7\x16\x40\x7d\x8b\xa2\x83\x0b\x44\x7d\x2c\x75\xa3\x6a\x22\xa4\xa3\x64\xe7\xb5\x2a\xdb\x91\xb3\x73\x1a\x56\x27\xe3\x6b\x75\x64\xa2\x37\x76\x02\x99\xd0\x1b\x69\xff\xcf\xb3\xe8\xa4\x2b\x96\xe9\xce\x98\xf1\x67\x34\x2d\x04\x48\x60\xeb\xc5\x4e\x1e\xf3\x5f\x5d\x75\xf8\xff\xbd\xa8\xe5\x9f\xb2\x16\x6f\x49\x91\x6d\x80\x44\x0a\x38\x8f\xc5\xa4\x16\x5e\xd2\x1d\x17\xa5\x78\xfb\xa1\x78\xd2\x85\xd0\xeb\x10\x7a\xb3\x1c\x7a\x13\x42\x6f\x97\x43\x6f\x43\xe8\x62\x39\x74\xf9\x5b\xe3\xde\xfd\xd6\xb8\x6f\x02\xe8\x7c\x39\xf0\xf7\xdf\x1a\xf6\x2d\x3b\xec\x3f\xac\x97\xf1\x93\x7c\x7b\xe8\xc4\x49\xf6\xc9\x92\xe5\x77\xc9\xaf\x56\x23\xf3\xb4\xba\xc9\xaf\x00\xc7\xd9\x8f\x0d\x36\x7f\x7e\x2d\x56\xc5\xaa\xb8\x7e\xdf\x94\xdc\xc3\x7c\x95\x8f\x0f\xdf\xff\xf8\xdf\x77\x99\x9d\xe4\xd0\x55\x7b\x9d\x3a\x8d\x35\x4d\x83\xa2\x20\x50\xb0\x51\x8a\x54\xa5\x27\x7d\xe7\x0a\x6b\x06\xb7\x92\x4c\xd9\xf1\x0d\xc7\x99\xed\x40\x35\x7f\x7d\x85\x49\x49\xcc\x15\x0d\xe6\x9d\x0a\x85\x0f\x35\xd4\x0b\x54\xbf\xc0\xd4\xa2\x25\x2f\x8e\x8a\x6f\x96\x9a\xd0\x2a\xce\x35\xff\x60\xce\xb6\x98\xa9\x97\x45\x1d\xa6\x62\xfb\x94\x6d\x96\xc3\x9d\xf9\x2c\x5d\xb1\x80\x4e\x26\xa2\x72\x06\x97\x65\xbc\xa1\x13\x5a\x0c\xc0\xa4\xc9\x9a\x88\xab\x8c\x06\x36\xce\x20\x25\x54\x58\x85\x56\x0c\xc6\x04\xe9\x4f\x84\x37\xf2\xf1\x85\x33\x18\xe9\x5c\x18\x03\x42\x0c\x46\x07\x4d\xc7\x02\x0d\x99\x58\xbf\x69\x54\xa4\x77\x15\x10\x18\x6b\xef\xb2\x37\x4d\x04\xfc\x45\xa3\xed\x66\xd1\x52\x4a\x0c\xb7\x19\x9f\xbb\x33\x9d\x07\xae\xe4\x1b\x13\xf9\x35\x8d\x93\x90\x61\xcd\x8f\x31\x10\x9d\xcc\xe8\xdf\x25\x63\xc4\xf9\x41\x32\x5c\x5e\xa1\x89\x28\xb4\x68\x08\xd8\x2c\x5a\xfa\x6a\x4c\xa8\x58\xf4\x13\xb7\xc9\x7d\xa6\x42\xc1\x62\x71\x58\xb3\x68\xe9\xf7\x62\xe4\x8a\xf8\x22\x3f\x03\x97\x15\x36\x1e\x2b\x1a\x0e\x35\x87\x95\x90\x62\x65\x94\x18\x10\xae\x59\x89\x32\x63\x92\x9b\x4b\x37\x10\x85\x91\x50\x61\xed\x57\x1c\x8c\x6d\x0a\x9c\x25\xb3\xc2\x2a\x2e\x42\x5d\x82\x4f\x61\xc3\x23\x7b\x11\xf5\x33\xb2\x31\x07\x8e\xbc\x39\xc3\x07\xb0\x0c\x05\xb6\x05\x65\xdf\x47\x4e\x80\x51\x99\x52\x9b\xac\xb9\x4d\x4f\x60\xac\x0c\xd1\x67\x72\x40\x47\xd6\x49\x71\x08\x7c\xd3\xc3\x66\xca\xf3\x8d\xbc\xe2\xb0\x95\x49\x22\xac\xaa\xd0\x52\xcb\xce\x74\xeb\x24\xbb\x1f\x37\x9e\x11\xce\x0b\x37\x01\x48\x8a\x41\x6e\x80\x54\x23\xea\x41\x76\x67\x41\xe5\x1b\x66\x24\x9d\xa8\xce\x2a\x84\x86\xa3\x48\xd6\xd5\xb1\xba\xf7\x06\x1e\xf3\x65\x01\xfe\x73\x9a\xa8\x4b\x7e\xe5\xcb\x7b\xac\xdf\x47\x26\xf4\x82\xb4\xa9\x40\x9f\x6e\x7d\x77\x77\xd8\x6f\x47\x5d\x6b\xa5\xa8\x5a\xf7\x1e\x22\xc9\xf4\xd7\x03\x10\x66\xad\x38\xca\xb4\x16\x6f\xcd\xf3\x00\xe3\x12\xc3\x04\x19\x2c\x93\x87\xe0\x13\x7d\xf1\x28\xc5\x01\x7a\x48\x6b\x7d\x39\x50\x88\x7a\x55\xb5\xab\xf6\xa4\x0b\x7d\x06\xf6\xa0\x10\xb9\x72\x9f\x08\xe8\xfa\x51\x70\x7e\x9e\x81\xef\x41\x2b\xf6\x32\xbd\x97\xc3\x2f\x29\xcf\xc8\xb6\x5e\x28\xce\x8d\xef\xcd\xfc\xd4\xe3\xbd\xd8\x64\xb8\x0b\xda\xaa\xc3\x50\x3e\xe8\x69\x85\x76\x1d\x6f\x9d\xd7\xd7\xd4\xb2\x60\x4d\x92\xbe\x02\x2a\xb4\xf6\x04\xfb\xda\x42\x52\xc2\xfc\x50\xba\x77\x6c\xab\xb8\x4a\x52\x6b\xaa\xf0\x64\x86\x0f\x3f\xa2\x3a\xff\xc8\x54\x69\x8b\x48\xa4\x56\xba\x26\x6b\x99\xb5\xeb\x03\x9d\xce\x9b\xc0\x3e\x3d\xc3\xa8\x62\x8e\x9f\x4f\xe5\x69\xf1\x9e\xb5\x4d\x3b\xae\x78\x97\xc5\x78\x22\x23\x36\x30\x4f\xee\xb4\x27\x5b\x92\x32\x4e\xe5\x79\x79\xbd\x52\x15\x37\x54\xf5\xb3\x74\xcb\xb9\x9d\x93\x6d\x7d\x8d\xdd\x4c\xf8\xcc\x4c\xc0\xb2\x66\x44\x45\xb3\x7e\x95\x77\x89\x33\xcb\x94\xb9\x1f\x94\xd8\x23\xf7\xc4\xa2\x93\xa7\x24\xd5\xff\x1b\x0f\xad\x29\x5f\x16\xf8\x85\x07\x38\x13\x72\xe3\x02\xe3\x9b\x89\xaf\xbe\x8b\x6f\x50\x49\x97\x83\x3c\xd1\xa6\x44\x0f\x1d\x2e\x89\x83\xa0\x3e\x00\xcc\x99\x4a\xed\x4e\x33\x24\x73\xbe\x7c\x46\x66\x99\x83\x34\xbe\xd7\x9c\x7f\x5b\xd4\x1d\x9b\x66\xd6\x2c\xaf\xbd\xcf\xe0\x6c\x8f\x5e\x78\x85\x92\xe6\x02\x20\x2d\x74\x12\xc1\x70\x01\x1c\x0a\xe0\x59\x38\x2d\x4e\xaa\x83\x32\xd8\x02\x98\x51\x4c\x58\x2d\x23\xea\xfc\x44\x05\x89\x05\x60\x56\xa6\x20\x5c\xff\x92\x29\x37\x02\x00\x61\xd1\x17\xcd\x83\xe2\xd6\x09\xb7\xb5\x00\xd0\xca\xa6\x74\x98\xfa\x76\x6a\x34\x35\xd1\xf0\x22\x76\xc3\xb8\x01\xf5\xca\xb7\x62\xfc\x47\x11\x5a\x67\x3c\xec\x57\x49\xea\x62\xbf\x67\x86\x65\x1a\xe4\xeb\xb0\xca\x6c\xb2\x76\x6a\x35\xa3\x98\xed\xf5\xb1\x13\xed\xa3\x0f\xf8\x2a\x4a\xa5\x90\xa2\xad\x5d\xe2\x4b\xd7\x1e\xeb\xc8\xf4\xff\x0c\x67\x3f\x8b\xe8\x2e\x33\xfc\x03\x76\x51\xc8\x6e\xb4\xf9\x8e\xc2\x8b\xf3\xb9\x19\x48\xb1\x79\x93\x37\x1e\xee\xd5\x16\xdc\xd4\x44\xbb\x6f\x5e\x2f\xec\x79\xa3\x3d\xb9\x01\x1b\x92\x23\xb6\xc3\x7b\xbe\x79\x44\xe3\xd4\xc9\x87\xea\xd5\xc4\x1a\xc1\x07\xfd\xf3\x83\x7d\xc0\x54\xa8\xb4\x87\xc1\x78\x16\x44\xd0\x25\xad\x18\x1e\xa3\x38\xd5\x53\xe3\x2b\x62\xad\xce\x91\xa6\xc6\x5b\x79\x12\x9d\x71\x1b\x04\x48\xad\x40\x11\xa1\x4e\x57\x36\xd1\x93\xad\x2a\xc8\xe7\x57\x11\xdf\x8c\x32\xbf\x72\xc5\x90\x4b\x6f\xd5\x51\xae\x05\xd1\xb1\xf7\x2f\x47\x62\x61\xe7\x5d\x05\xa2\x83\x36\x3c\x92\xad\x84\x0f\xf9\x75\xab\x02\xd6\xdf\x1c\x2e\xc8\x15\xc4\xb0\x81\x0c\x1b\xb1\x37\x31\xd2\x1a\xaf\xde\x8a\x7d\x02\x3d\x2b\xa9\x7e\xda\x99\x9b\x74\x6e\x19\x27\xf0\x3d\x1b\xaa\x93\x8a\xef\x4d\xdc\xaf\xf4\xdc\x0c\xd2\x7a\xf8\xad\xdc\x6d\xe7\xf3\x87\x29\xd0\xe6\x69\xb5\xcb\x18\xbf\xc5\xe4\xff\x66\x96\xcc\x05\x9c\x7e\xb0\xe1\x88\xa1\x6b\x70\x44\x03\x7c\xae\xaa\xf4\xa0\xa5\xa6\xeb\xf6\x80\x57\xe8\x3e\xf0\xad\xca\x90\xa9\xf7\x8d\xf1\xb7\x2d\xa1\x16\xe0\x43\xf9\x57\x29\x6a\x36\xdd\xaa\x2f\x23\x91\xe8\xdf\x0e\x77\x75\x6a\x6b\xa9\x02\x47\x60\x4d\xb9\x43\xd5\xef\x93\xea\xdc\x57\x07\x89\xa4\xfc\xc2\x14\x7c\xdf\x3f\x8a\x6e\x48\xf4\x9f\x74\x68\x9a\x7a\xa8\xda\xa4\xa9\xfd\xcc\xd3\x02\x75\xa8\xa7\xa4\xae\x82\x3a\xf2\x8a\x18\xbf\x61\x6b\x51\x19\xa9\x0a\x74\x69\x7e\xa6\x15\xa7\x29\x08\x1a\x71\x8a\x02\xb7\x59\x80\xc6\x2c\xeb\x42\x1a\xb0\x6c\x0a\x69\xc3\xb2\x24\xa4\x4d\xc0\x7e\x90\xe7\xe4\x74\xb5\xba\x12\xd2\x4a\x33\x24\x41\xf7\x21\xf3\x41\x9a\x44\x18\x0d\x3a\x19\x3c\x53\x11\x8c\x84\x63\x20\xdc\x62\x08\x7d\x18\x41\x4d\xfb\xf7\xf0\x73\x0d\xb7\x10\x52\xda\xd9\x7c\x3e\xc4\x5f\xde\x08\x3f\x16\xf7\xed\xad\x47\x7d\x57\x57\x4b\xa9\x20\xbb\x0a\xf1\x57\xc1\x07\xea\x66\xdc\xf2\xe3\x5b\x3d\xf6\x5c\x0a\x9d\x70\x62\x1b\x19\xb4\x59\x81\xde\xe2\x44\x4e\xcc\x1c\xd8\x62\xe1\xce\x8b\x19\x30\xb4\x03\x33\x03\x1a\x65\xe9\xab\x95\x1e\xd4\xb2\xf4\xd7\xe3\x82\x63\x88\x6d\xee\xff\x96\xfb\x81\xa6\xf6\x8e\xcc\x85\x6e\x7c\x37\x99\x16\x7c\x9c\x13\xcd\xda\xd1\x7a\x92\x21\xb3\xa2\x1b\xaa\xf5\x6a\xcb\x3c\x63\x0d\x30\x57\x92\x51\x03\x99\x9d\xf7\x42\x3d\x36\x41\xf5\xf1\x38\x67\x93\x16\x1e\x8d\xfe\x1b\x44\x1e\x13\x8f\x51\xb7\x42\x0d\xfb\xb5\x05\x6f\x6f\x1d\xbe\x3d\x1a\x38\x62\x8d\xb0\x5e\xf1\xe1\x9f\x26\xd9\xa6\xc7\x1a\x4b\x42\x9a\xf5\xd4\x06\x87\xe3\xcf\x88\x63\x2b\x59\x64\x5a\xeb\x33\x8a\x8f\x69\xb2\x05\xbe\xab\xc1\x7d\xba\xf8\x18\x3f\x47\x1b\x90\xa6\x56\xe5\x3a\xe6\xdb\x9c\x47\xb4\x3b\xd1\x31\x82\x2a\xc0\xdf\xdc\xbb\xe0\x53\xf2\x9b\x70\x09\x70\xf0\x63\x24\xfb\x47\xb9\x7f\x92\x07\x80\x26\x48\xd0\x38\x07\x62\xa7\x9a\x1d\xdb\x38\x61\xd7\x11\x0c\x8b\x46\x10\xca\xf0\x14\x9b\xfd\x0c\xd8\x31\x68\x3d\xd0\xf7\x9b\x55\x71\xbb\x5b\xad\xf3\xdb\x55\xb6\x9b\x47\x60\x47\x04\x0b\x4e\xf3\x23\x98\xef\x3b\x20\xbd\xa9\x61\xcc\xbe\xd2\xe5\x12\x36\x42\xf1\xb1\xd3\x5a\x5c\x9c\x5c\x1f\xdb\x30\x74\x76\x0d\xa2\xef\xd2\x37\x5d\xff\x89\xfd\x81\x4a\x45\x22\x02\x70\xa2\x95\x0d\xba\x67\x1c\x45\xf5\x4d\xad\x16\xea\x65\xfd\x60\xb5\x42\x8a\xba\x63\xd7\xfc\xfa\x51\x44\x7a\x74\x7a\x43\xed\x5e\x21\x0f\x17\x0f\x93\xff\x0c\xb3\xf9\x47\x91\x0c\x4d\xeb\x50\x00\x42\x14\x94\x51\xd6\xb2\x7a\xda\x1f\x37\xbb\xef\x4a\x4d\x0b\x84\x48\xe0\xb9\xa1\x05\xe5\x68\xaf\xa7\xe6\xbe\xaa\xa5\x8e\x05\x53\x10\x80\xfc\xe2\x67\x4c\x15\xfa\xae\x31\x0e\x55\xcb\x9c\xe2\xa4\xb8\xae\xa8\x6b\xd7\xda\x05\x5a\xb9\x6b\x77\x4e\x86\x05\x79\xfd\xde\x1e\xf1\x32\x2f\xa1\x29\xa2\xcc\x69\x2f\x6e\xc7\x14\xc3\xd0\x7d\x55\xa5\x6d\x95\xdd\x0f\xe7\x57\xc1\x19\xab\x81\x02\x84\x3d\x11\xa8\xe6\x9f\x3a\x48\x02\x76\x22\x28\x14\x1e\x09\xb1\xc7\x81\xd2\xeb\x92\x0b\xa6\xb6\x82\x43\xd9\xbe\x26\x05\xf0\x39\x74\x2c\x98\xda\xb3\x79\xad\x7b\x49\xe2\x0f\x34\x44\x92\x15\xc1\x96\x8c\x5f\x09\xf5\x22\x77\x21\x65\xc1\x49\x0b\x14\xc1\x3b\xcf\x85\x90\x89\xd5\x2a\x1e\xf7\x98\x89\x65\xb3\x61\xc7\x4c\x0b\xcd\x6e\xa2\xbd\x61\x67\xcf\x20\x73\xd6\x34\x6d\x74\x48\xc1\x27\x3a\xb9\xcf\xa7\x37\xe5\xd5\xb5\x87\x15\xf5\x2f\xf1\x66\x63\xc0\x82\xf5\xab\x74\x13\x74\x93\x2d\xdc\x5b\x59\x8f\xf2\x67\x04\x93\x13\x8e\x31\x2a\x33\xfb\x1e\x97\x52\x14\x21\x44\xaa\xe6\xac\x66\xd0\x75\xc7\x50\x29\x84\x57\x4f\x77\x12\xe3\xd7\xf7\xab\x49\xfb\x41\xb6\x36\xf3\xd4\x42\x66\x07\x28\xd1\x47\x86\x07\x2d\xd4\x00\xa9\x92\xbd\x1f\xaa\xce\x38\x0d\x8e\x8b\x9d\xe1\x7e\xad\x36\x41\x19\x2a\x32\x92\xb1\x28\xe8\x84\xea\x10\x09\x03\xcf\x25\xa7\x98\xa7\x2a\xdc\xb0\xdd\xee\x6c\x75\x32\xcb\xd0\xe8\xe0\x06\xed\xb4\x60\x18\x57\x92\x34\x6b\x14\xc7\xb3\x43\xd5\xeb\xd4\x73\x15\x49\x72\x43\xd4\x2f\x2a\x11\x16\x0b\x81\x54\x4e\xe8\x9d\x31\xba\xa3\x19\x3c\x49\x76\x2f\xba\x3e\xe9\x46\xae\x9f\x09\x4a\x22\x8c\x9a\x0f\xa3\x5c\x80\x33\x73\xe5\x40\x81\xfd\x7b\x01\xd8\x20\xba\xa3\x04\xac\xfc\x12\x98\xbe\xae\xf6\x32\xcd\x8d\x42\xd0\x4a\xc1\x4b\xe1\x0a\x0b\x67\x73\x28\x2e\x84\x5b\x1b\x38\x2b\x9b\x2f\x85\xdb\x18\xb8\x3c\x3f\x14\xf7\x8b\xe6\x44\xc3\x6d\x0d\x9c\xe5\x5e\x97\xc2\x95\x06\xae\xdc\x6f\xa5\x2c\x97\xc3\xed\x0c\x9c\x55\x18\xf0\x70\x59\xdf\xd6\xd5\xa0\x8a\xad\x84\x86\xfc\x89\x7a\x4a\x36\x3e\x6a\x16\x6b\xe2\xa3\xbc\x4a\xaf\x53\xdd\xe8\x3c\xcb\xb3\xc0\x59\x2d\x8f\xf2\x7c\xa0\x1a\xaf\x9f\x1e\x21\x2e\xb4\x33\x37\x04\xc2\xa0\x2e\x76\xc7\xf9\x00\xad\x49\x5d\x91\x5d\x21\x88\x01\x40\xa7\x21\x27\x47\xea\x76\xf4\x0c\x8c\x6b\x07\xb8\x92\xb6\x86\xab\xd0\xa9\xe4\x42\x8e\xc8\x44\x2b\x94\xd1\x0d\x86\x1f\x9a\x71\xb7\x5a\x7d\x10\x48\xbb\x55\x91\xd8\xb3\xc0\xa8\xa4\x71\xaa\x2d\x51\xfd\x5c\x05\x77\x18\x85\xfd\x82\x3d\x97\xa7\xca\x47\x83\x87\x69\x15\xa9\x8c\xa4\x12\x0a\x7f\x10\xb7\xce\xa2\x82\x4f\x39\x9c\x4a\xfb\x33\x08\x89\x6b\x9c\x0d\x73\x63\x27\x0a\x28\xc2\x1d\xab\xfa\x52\xf5\x95\x0a\xe3\x09\x20\xb2\xbd\x38\xbf\x88\x3e\xc9\x74\x9a\x95\x71\xf3\x80\x0b\xb5\x1f\xba\xe6\x49\x5a\x49\x24\x5b\x97\x53\x28\x14\xff\x93\x9a\xc3\x20\x82\x0a\xde\xe2\x70\x89\xd7\xaa\x57\x09\x17\x98\x65\xa0\x1f\x2a\x33\x92\x41\xe6\x9c\x04\x23\x6d\x15\x0f\x63\xec\x58\xb1\x39\xcb\x8e\x5d\xa5\x92\xcc\x20\xd4\x66\xc8\xcc\xfa\x84\x00\x6a\xd2\x2c\x2d\xba\x1e\x9f\x9d\xb2\x83\xe8\x1f\x45\xd7\x89\xb7\x1f\x65\x52\xb0\x68\xf4\xb4\x41\x5f\x72\x88\xed\xc1\x1f\x17\x00\x48\xa7\xa2\xf8\x6b\xfc\xa4\xe5\x79\x00\xe5\x82\x54\xb0\xc2\xa5\xf7\xd9\x24\x94\x44\xa3\xae\xdd\x59\xbe\xfb\x08\xc2\x71\x03\x9e\x46\x97\x4f\x2c\x06\xe8\x9b\x0e\x47\xe5\x72\x81\xce\xd3\x61\xca\x01\x85\x03\x33\x62\xc9\x67\xc6\x66\x70\xd2\xb1\xb1\x18\xe7\x86\x67\x9d\xde\xd1\x4b\xb3\x89\xec\xe7\x49\x31\xb5\x7e\x98\xf7\xa6\x5d\x49\x3e\x33\x3c\x83\x33\x78\x75\x1c\xc6\xb9\xe1\x19\xa7\x7a\x38\xba\xb5\xe7\x28\x26\xc9\xd0\xf5\x7c\xc2\x91\xad\x37\xdb\x4f\x0d\x4b\xe3\xa3\xa3\x0a\xb1\xcd\x0d\xc9\x3b\xe8\xa3\x51\xd9\x64\xce\x13\x90\xc6\x93\x3d\xb2\x2d\xc1\x35\x71\xa6\x93\x86\x39\xbf\xc9\x71\xba\x5a\x40\xcc\xd4\xe9\x70\x84\xcf\xcc\x9e\xc3\x1a\x4c\x20\x87\x93\x9d\x43\x6e\xa5\x9d\xd9\x57\x6c\xa2\x04\x3e\xb7\x78\xcf\xcc\x5b\x66\x11\x2e\x24\x52\x97\xd6\xf9\x57\x89\xd4\x28\x3f\x4f\x24\x58\x2b\x3e\x26\x01\xad\x46\x24\x98\x4c\xd2\xe2\x8a\xe6\x30\xcb\x45\x87\x48\x7c\x66\x84\x0e\x6b\xb0\x5c\x38\x9c\x73\x83\xf4\xb1\x0e\x68\x9b\x44\xd2\xde\xf4\x69\x64\x2b\xe2\x30\x1b\xa5\x0e\xbd\xf8\xd4\x19\x67\xb1\x06\x5b\x25\x87\x73\x7e\xab\x34\x41\x14\x70\x8c\x58\x02\x9b\xd9\xdf\x74\xbd\x9b\x70\x88\x26\xa2\xe3\x73\x9b\xa6\x46\x4a\x47\xc8\xa2\x74\x23\xe4\x72\x71\x71\xae\x09\x51\x83\x32\xca\x2d\xc2\x17\xa8\x23\xee\xb0\x3b\xce\x00\x6a\x3c\xd0\x88\x16\x1c\x7b\xc9\x46\xf2\xf3\x28\x7d\xe9\x2a\xcc\xda\x92\xad\xfb\x64\x68\x5a\x2d\x5b\x35\xcf\xc3\x6a\xbc\x51\xcb\x87\xc1\xdd\xa1\x7a\x6f\x35\x06\xa4\x9e\xe6\xa6\xc2\x69\x14\xf9\x87\x13\xea\x71\x56\x21\x34\xa5\xa6\xe5\x74\xe6\xa1\x6a\x9d\x27\x53\x7d\xdb\x67\xd1\xb6\x6f\x97\xa9\x49\x29\xf3\x13\x99\x95\xd8\xa8\xcd\xc0\x80\xea\xf8\x26\x78\x7f\x48\x75\x7c\x33\xab\x3a\xe6\x5b\x44\x74\xbc\xda\xec\xa9\xb4\xb4\xe9\x77\xa7\x58\xe0\x5f\xce\x85\x57\x70\x83\xf2\x9e\xbf\xa9\xdd\x66\x49\xdc\x41\x12\x77\x31\x12\x33\x23\x8e\x92\x7c\x3f\x11\x87\xa0\xbb\xba\xe2\x57\x5a\xd2\x32\xaa\x1c\x25\xfc\x61\x15\x88\xb1\x47\x4c\x9b\xf4\x80\x6a\x41\xf9\x48\x4e\xfa\x28\xdd\xd5\xba\xc4\x45\x8c\x2e\xfb\x70\xfc\xf8\xd3\xfe\x97\x18\xf6\x8f\x7c\xf6\x9e\xa9\x0e\x90\x06\x22\xec\x02\xc6\x83\x01\x2f\x71\xcc\xdf\xfb\xa4\x76\xb3\x1d\x39\xc9\x7b\xa6\x47\x2a\xf2\x87\x29\xcc\x77\xd7\x0b\xba\xe3\x8b\xc6\x4f\x83\xda\x75\x13\x0f\x1e\x46\xd2\xc8\x14\x8e\x48\x00\x71\x1c\xee\x5b\x5d\x45\x72\xee\x5a\xcf\x4e\x03\xdb\xca\xf3\xc1\xc4\x3a\xbe\xc9\x2e\xcd\xdd\x74\xfe\xf3\x2c\x9f\x55\x4d\x2d\x7d\xa9\x8e\x3e\xd8\xd0\x48\xed\x36\x85\x2f\x8f\xae\x88\xc2\x1b\xfd\xf0\x73\x57\x7f\xfd\x72\xa8\xc4\xb1\x39\x8b\x5a\x95\x54\x6a\x65\xba\xb9\x56\xa1\x59\x69\xa0\xe3\x4e\xb2\xee\xf9\xac\x7c\xb3\x8c\x92\x18\x4a\x06\x49\xb6\x6f\x4e\x6d\x2d\x07\x69\x55\xba\xc6\x7b\xce\x3c\x7d\x10\x55\x2d\x0f\x9c\xfa\x35\xc9\xea\xa6\xb7\x6a\x08\x2d\x43\xc1\x4f\xc1\xaa\xb2\x7c\xea\x39\x98\x35\xcd\x58\xb7\xd7\x30\x5e\x03\x86\xba\x43\x54\x99\xfe\x93\xe6\x4c\x3d\x43\xbe\x65\x41\xaa\x1d\x1b\x65\x3a\xd3\x72\xcd\xd4\x8a\xe4\x5b\x6e\x70\x39\x61\xab\x30\x67\x5a\x6e\x59\x07\x0f\xae\x65\x89\x5a\x3a\xa5\x38\xd3\x72\xc7\x14\x31\x24\x2d\xf5\xd2\x8b\xa5\xce\x2f\xc2\x80\x9d\x0d\xb6\x37\xbb\x35\x09\x91\x9a\x95\xb9\x22\x44\x99\x65\x89\x3c\x31\x64\x2b\xc5\xa0\xbc\x19\x14\xd3\x96\x1e\x0d\xd7\xf6\x35\xdd\x96\x07\x79\x5c\x99\x0e\xec\xdf\x64\xd3\xbe\xae\xbe\xdc\xee\xc7\x7f\xe8\xf7\x4e\x79\xb3\xa0\xfe\xec\xfa\x0d\xab\xdb\x92\x86\x6e\x2d\xa3\x37\x60\x57\x34\x6c\x69\xd6\xf5\xec\xac\xaa\x35\x4e\x0a\x09\x93\x26\x3e\x03\x03\xf5\x6b\xa3\xcd\x4c\xae\x84\xc0\xc8\x1f\xb6\x34\xc9\x0c\xb8\x5d\x8f\xb4\x0c\xaa\xb4\xb3\x04\xba\xdc\x00\x73\x33\xe8\xfc\x44\x43\x8a\xce\x4f\xf3\x0b\x1b\xc6\xba\xcf\x7d\x58\x30\x14\x7d\xee\xc3\x06\x91\xe2\xcc\x1b\x33\xc7\xad\x66\xf5\x9d\xc7\x82\xda\x5b\x66\x92\x3c\x62\x58\x9f\x07\xcd\xda\x64\x94\xbf\xfd\xcb\x31\x6d\xc5\x30\xc8\xee\x7c\xa1\xae\x13\x11\x43\xb2\x62\xd3\xdf\xbf\xf4\x43\xd3\xbd\xdd\x37\xcd\x53\x92\x9d\x9a\xfd\x93\x0b\xc7\xc3\x9e\x49\x3e\x34\x56\xbb\x6e\x40\x23\x40\x0c\x85\xbb\x6a\xdf\x56\x33\x6d\x4c\x7a\x3f\x12\x80\x1b\xc6\xab\x15\xf2\x34\xd7\x9d\x46\x05\xde\x00\xfd\xd4\x87\x46\xb1\xdd\x6a\x77\x5f\x01\x4e\x32\xc9\xd1\xd5\xf6\xf6\x6a\x65\x74\xdc\xe8\x77\x59\x5c\xa1\x76\xf4\x5a\x09\x3f\x2b\xa6\x53\xe3\x3a\xf2\x5f\xed\x77\xc9\xbb\x58\xb6\x21\x3a\x82\x2d\x01\x9e\x90\xf6\x15\x13\x42\xae\x8b\xed\xb8\x39\xce\x10\xf2\x22\x8e\xcf\x78\x33\x92\xb7\x72\xff\x90\xc7\xc2\x41\x02\x74\x23\xd3\x3c\x7e\x95\x96\x5d\x5e\x93\x95\x01\x62\x88\x80\x6f\xd1\xed\xc8\x4c\xff\x27\x00\x00\xff\xff\xdc\xc5\x2b\x04\x5c\x5b\x03\x00") -func distAssetsNomadUiB1d9a065040a9f727f900c02bfb30b88JsBytes() ([]byte, error) { +func distAssetsNomadUiF6c608b5a74057913290b94581fa3648CssBytes() ([]byte, error) { return bindataRead( - _distAssetsNomadUiB1d9a065040a9f727f900c02bfb30b88Js, - "dist/assets/nomad-ui-b1d9a065040a9f727f900c02bfb30b88.js", + _distAssetsNomadUiF6c608b5a74057913290b94581fa3648Css, + "dist/assets/nomad-ui-f6c608b5a74057913290b94581fa3648.css", ) } -func distAssetsNomadUiB1d9a065040a9f727f900c02bfb30b88Js() (*asset, error) { - bytes, err := distAssetsNomadUiB1d9a065040a9f727f900c02bfb30b88JsBytes() +func distAssetsNomadUiF6c608b5a74057913290b94581fa3648Css() (*asset, error) { + bytes, err := distAssetsNomadUiF6c608b5a74057913290b94581fa3648CssBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "dist/assets/nomad-ui-b1d9a065040a9f727f900c02bfb30b88.js", size: 614830, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} + info := bindataFileInfo{name: "dist/assets/nomad-ui-f6c608b5a74057913290b94581fa3648.css", size: 219996, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _distAssetsVendor1192528ac070501feaf347024c2cae41Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xfd\xfd\x7b\xd3\xb8\xd2\x30\x8e\xff\xde\xbf\x22\xf5\x77\xc9\x91\x88\x92\xda\xce\x5b\x6b\xaa\xcd\x97\xa5\xe5\x65\x0f\x01\x96\x96\x65\x21\xcd\xe9\xed\x26\x4a\xeb\x25\x91\x8b\xad\x50\x4a\x9d\xfb\x6f\xff\x5c\x1a\x49\xb6\x9c\x38\x05\xce\xb9\x9f\xfb\x79\xe0\xba\x1a\xeb\x6d\x34\x7a\x1b\x8d\x46\x33\xa3\x9b\x88\x4f\xe3\x9b\xd6\xf1\xe2\x82\x25\xc7\xaf\xfe\xa4\x77\x4f\x8f\x1f\x9f\xbe\x7b\x7b\x7c\x12\xdc\x39\x4c\x46\x36\x93\x78\x29\x22\x7e\x09\xbf\x2c\x69\xa6\x2c\xf9\x12\x4d\x98\x13\xec\xba\x2b\x72\xfc\xd7\xe9\xf1\xab\xa3\xf3\x37\x6f\x5f\x9f\xbe\x3e\xfd\xf0\x46\x96\x3a\x0a\x05\x0b\x76\xbd\x15\x39\xff\xfd\x8f\x77\xc7\x6f\x3f\x9c\xbf\x78\x75\x7a\xfc\xec\xed\xe3\xd3\x17\xaf\x5f\xc9\x32\x3b\x5f\xc2\xa4\x36\x8f\xc3\x29\x4b\xc8\x94\xcd\x22\xce\x48\xc2\x3e\x2f\xa3\x84\x0d\xe3\xe9\x72\x9e\x87\xcc\xef\xdf\x29\x49\x96\x9c\x47\xfc\xf2\x94\xa5\x22\xa5\xbb\xde\x4e\x34\x43\xb3\x25\x9f\x88\x28\xe6\x88\xe1\x3b\x67\x99\xb2\x5a\x2a\x92\x68\x22\x9c\x1d\x93\x50\x13\x08\xdf\xc9\xaa\x18\x7d\x7d\xf1\x37\x9b\x88\xd6\x24\x61\xa1\x60\x88\x2f\xe7\x73\xbc\x93\x30\xb1\x4c\x78\x8d\xb5\xce\xcf\xe9\x97\x38\x9a\xd6\x5c\x32\x65\x73\x26\x18\x44\x11\xb6\x92\x45\x39\xbd\x53\x88\x06\x25\x7c\x83\x2a\xb4\x83\xca\x46\x04\x1b\x8d\x09\xf2\xaf\xd5\x4e\xfe\x49\xf5\x17\x2d\x01\xa1\x76\x23\x67\x71\x82\x24\x4e\x82\x8e\xc6\x84\xd3\x39\x62\xc4\x41\x3a\x3b\x76\x88\xc0\x24\xa1\xa2\x35\x67\xfc\x52\x5c\x35\xbd\x47\xc9\xaf\xd4\x7d\x94\x34\x9b\x58\x8c\x92\x71\x8b\x7d\xbd\x8e\x13\x91\xa2\xbc\xdd\xbc\xb5\x80\x2a\x4c\xca\x8a\xa8\x16\xd2\x3b\x1e\x3f\x89\xf9\x6c\x1e\x4d\x44\x90\x57\x2f\x54\x4f\x26\x24\xda\x91\x68\x24\xb5\x88\xd7\x04\x16\xad\xab\x30\x7d\x7d\xc3\xdf\x24\xf1\x35\x4b\xc4\x2d\x4a\x70\xbd\xce\xab\x22\x51\x44\x25\x1a\x84\x8d\xa2\x31\x65\xea\x2b\x19\x53\x3e\x4a\xc6\x78\x45\x16\xe1\x27\x76\xc4\x66\xe1\x72\x2e\x8e\x01\x9b\x7c\x96\x24\x54\x20\x4c\x22\x8a\xe4\x8f\x8b\x21\x2e\xa6\x23\x47\x37\xdb\x21\x8e\x46\xdf\x21\x8e\x6a\x8f\x33\x2e\x26\x40\x88\x18\x11\x84\x93\x04\xdf\x89\xab\x28\x6d\x2d\x97\xd1\x94\x46\x8d\x06\x81\x50\x34\xa5\x4c\x7d\x4d\xd9\x75\x4a\x77\x4d\xdf\xc9\x26\xa8\xaf\x41\x1c\x08\x95\x43\xc1\xa6\x77\xba\xb6\xe0\x6e\xb5\x52\x09\x93\x70\x3e\xbf\x08\x27\x9f\x28\x57\xe1\xab\x30\x55\x4d\x48\x1f\xa7\x47\xec\x9a\xee\x7a\xba\xb2\xf4\xf1\x3c\x0a\x53\x9a\xa8\x60\xc2\xa2\x59\xc4\xa6\x94\xb3\x9b\xda\xe3\x24\x09\x6f\x91\xa9\x1d\xab\x0c\xa9\x08\x05\xa3\x0e\x67\x37\xce\x2a\x6f\x4f\x8a\xf0\x5d\x11\x5a\xca\x49\x91\xb7\xa4\x88\x9f\xab\x56\x17\x13\x26\xa2\xc9\x88\x8d\xb3\x2c\x19\xb1\x86\xb3\x17\xf1\x29\xfb\xea\x8c\x1f\x45\xf5\x7a\x64\xd0\x7a\x84\x65\x9e\xa8\x15\x4d\x21\x9b\xfc\x28\x72\x9a\x19\x13\x65\x59\x31\x1d\x89\x90\x75\x27\xf1\x4d\x4d\x36\xe1\x38\x49\xe2\x04\x39\x4f\xe2\xe5\x7c\x5a\xe3\xb1\xa8\xcd\x22\x3e\xad\xa9\x4e\xab\xfd\x97\xd3\x60\x0d\xe7\xbf\x6a\xd1\x42\xf6\x0b\x9b\xd6\x66\x49\xbc\x90\xb1\xa2\xe1\xfc\x97\x83\x57\x00\x8c\xf0\x7a\xdd\xb9\x66\x7c\x1a\xf1\x4b\x67\x97\xd2\x48\xf5\x40\xbd\xee\xcc\x22\x1e\xce\xa3\x6f\x6c\x5a\x8a\x46\x51\x4b\xd6\x71\xc4\xae\x53\xc4\x31\xe1\xad\xeb\x65\x7a\x85\x22\x8c\x49\x54\xf4\xc4\x44\xe1\x19\xcd\x90\xd3\x92\xa5\x59\x6b\x72\x15\x26\x8f\x05\x72\x31\x36\xcb\x7f\xc7\xf4\x12\xa7\xac\x95\x5e\xcf\x23\x81\x9c\x3d\x47\xad\xa5\x22\xd8\x4a\xe7\xd1\x84\x21\x97\x34\x3d\x39\x1d\x5d\x12\x53\x33\x49\x1e\x45\x87\xf1\xa3\xa8\xd1\x50\x2b\x24\xa4\x7c\x14\x8d\x77\xa0\xca\x96\x43\x29\x0d\xa1\x7e\x97\x52\x9a\x98\x11\xde\xec\xb7\x90\xcb\x4e\x0b\x27\x13\x96\xa6\xb5\xeb\x30\x61\x5c\x98\xde\x8b\x67\xb5\x24\x8e\x85\x83\x77\x92\xd6\x75\x7c\x8d\xf0\x8a\xcd\x53\xa6\xdb\x04\xf0\x27\x31\x17\x11\x5f\x32\x99\x41\x76\x42\x88\x57\x2b\xdd\xba\xa4\xf5\x77\x1c\x71\x68\x41\xd1\x2b\x33\x39\x6f\x54\x86\x5d\xb4\x2b\xa7\x46\xbd\xbe\x5b\x9a\x1b\x78\x15\xb6\xae\x93\x58\xc4\xe2\xf6\x9a\xb5\x36\x56\x67\x41\x95\x0c\x7d\xb5\xd6\x88\xa1\x27\x3b\x92\xca\x52\x4a\x59\x96\x39\x31\x90\x5f\x67\x97\x4a\x78\xf1\xac\x06\xc3\xaa\x61\x58\xb1\x59\xa6\xe8\x30\x8c\xd4\x54\xd5\x98\x65\xbb\x9a\x78\x47\xe9\xf1\x57\xc1\x78\x1a\x5d\xcc\x19\x62\x38\xcb\x50\x9e\x89\x32\xbc\x22\x36\xca\x1a\x07\x1b\x51\xd9\x61\xc5\x54\xa2\x94\x16\xcb\x2c\xcb\x1c\xb9\x1e\x6f\xe5\xd4\x2b\x25\x98\x49\x52\xd5\x3c\x45\x2d\x5b\x37\x49\x78\xad\x68\x75\x5a\xaf\xa3\x32\x49\xd8\xcc\x82\xf4\x72\x2d\xd3\x0e\x8c\x0b\xa2\x70\x8b\x14\x91\xd3\x7d\x6a\xb2\xb4\xc2\xeb\xeb\xf9\x2d\x14\x2f\x11\x90\x9c\x9c\xdb\x91\x7a\x9e\x51\xb7\x44\x4a\x8a\xc6\x57\x52\xaa\x7a\x5d\x75\xbe\x1a\x32\x54\xd1\x64\xca\xb0\xde\x23\x36\xa7\x44\xbd\xae\x0a\xac\xc7\x23\x4c\x2a\x20\x95\x07\x6b\xc9\x53\xc6\xec\xa1\x5a\x27\x80\x5b\x49\x70\x19\x0e\x74\xdf\xfa\x90\xeb\x2e\x91\xab\xdf\x1a\xd7\x52\x15\xf9\xd8\xef\x88\xe4\xf6\xae\x44\x9e\x21\x70\xae\xc7\x85\xac\x17\x92\x70\x57\xd0\xad\xf3\xdb\xbb\x2d\x53\xc8\x4c\x0a\x5d\x8c\xc9\x05\xcf\xa6\x0e\x5e\x47\xfe\x7c\x03\x7b\x43\x97\xf4\x4c\x30\x63\xab\x08\x11\x26\x82\xba\x8f\xc4\x21\x33\x44\x48\x18\x02\xc4\x29\x1b\x89\xf1\x8e\xfc\x43\xb9\xe9\xf0\x41\xfe\x15\xac\xef\xfb\x08\x1b\x62\xc1\xca\x18\x19\xf2\x5a\xe2\x41\x64\x97\xca\x21\xa1\xdb\xbb\xd3\x10\xf1\x9d\x82\x5f\xc9\x37\x59\xc2\xa9\xfb\x88\x1f\x9a\xbd\xee\x11\x37\x58\x27\x54\x8c\xf8\x98\x44\xa5\xb6\x8e\xf8\xb8\x18\x6e\xcd\xa2\x29\xe4\x75\x68\xb5\x93\x6f\xff\x92\xbe\x0e\x50\xf5\x16\xec\x92\x28\x9f\xc3\x15\xb3\x11\x07\x39\x3b\x01\x50\xd6\x33\x87\x9f\xd8\x5b\x95\x8e\x70\x60\xb8\x8c\xca\x9c\x0a\xb7\xc8\x4c\xd5\x39\x9a\xa0\xc4\xf0\x1a\xd8\x7c\x10\xb6\x31\xf8\x56\x15\x5b\x68\xab\x24\x19\xd4\xe6\xc6\x0c\x81\xd7\x88\x4d\x90\x20\x0c\xe3\x55\x4e\x0e\x72\xd2\x28\x88\xd0\xf8\xbc\x00\x7e\x47\x76\x4f\x15\xa4\x59\x0e\x83\x88\x15\x41\x8a\xc1\xa5\xf6\x86\x2f\x59\x8a\x82\x9d\xd8\x89\xea\x75\x98\x0a\xc5\xae\x9c\x65\x28\x4c\x2e\x97\x0b\xc6\x45\xaa\x47\xf8\xd0\xaf\xd7\xed\xf9\xb3\xb1\xf5\x85\xbc\xb6\xe4\xe9\xf2\x5a\xb3\x06\x7a\xd3\xbb\x09\xd3\x9a\xc2\x60\x4a\x6a\xec\xeb\x35\x9b\xc8\xc4\xff\x52\x51\x28\x9a\x92\x1a\xcc\x26\x9d\x1d\xff\x57\x2d\xe2\xa9\x60\xe1\xb4\x76\x19\x8b\x20\x67\x38\x72\x64\x6a\x22\xd6\xe0\x80\xdf\x58\x47\x12\x13\x60\xc1\x24\x33\xa4\x58\x31\xb9\xb9\x70\xd9\x73\x74\x34\xc6\x44\xb6\x96\x72\xa8\x22\xe4\x13\xb9\x53\x2d\x07\xb2\x05\x21\xe2\x30\x2e\x84\x93\x5d\x17\x07\x2a\x4a\x31\x9c\xbb\x1e\xc6\x2b\xbc\xb9\x0d\x01\x3b\xa2\x56\xa9\xea\xc3\x19\xda\xe5\x59\x66\x96\x14\x2f\x6d\x3b\x88\x53\x03\x73\x34\x26\x29\x81\x63\x0b\x5e\x27\xca\x82\xf0\x0a\x0a\xaf\x70\x26\x7c\xa5\x0f\x2c\xad\x10\xb8\xcf\x32\x22\x7a\xe4\x7d\xc9\x45\xac\x75\xc9\x40\x77\xb5\x20\x12\x05\xc9\x69\xaa\x06\xca\xaf\x55\x71\x94\x69\x31\x2e\x92\x88\xe5\xa7\x97\xbf\xd3\xd6\x39\x0b\x3f\x9d\xa7\x8c\x71\x9a\x58\xf9\x60\xd2\x59\xe1\x35\x9a\xcf\xf0\x9d\x3a\xce\x40\x3c\x76\x64\x07\xaa\x3c\xa8\x54\xdd\x64\xce\xc2\xc4\x5e\x22\x3f\x88\x09\x9c\x22\x84\x84\xa5\xdb\xe5\xcc\xe2\xd8\x21\x16\xa0\x15\xb6\x93\xf6\x2e\xc2\xc4\x91\xbd\xbe\x3d\x47\x98\x4e\x67\x0e\x19\x19\x7a\x60\x1f\x44\x0c\x35\xb1\x8a\xeb\xe5\x03\x67\xa3\xa2\x06\x79\x5a\xb2\x42\x1b\x38\x7c\x03\x1c\xec\x11\x54\x88\xe3\x72\xc6\xcf\xcb\x6f\xce\x7d\xb9\xec\x48\xa2\x4b\x7c\x75\xaa\x1a\xac\xb3\xb4\x14\x48\xa7\xa5\x70\x70\x5a\xba\xb5\x10\x91\xc8\xdf\xd6\x9e\xcc\x79\x5f\xff\x2c\xc2\x88\x6b\x88\x50\xa8\x3a\x6f\xbe\x0b\x41\xbe\xbc\x0b\x65\x06\x43\xda\x4a\x29\x6b\xd1\x50\x49\x1e\xa7\x67\x4c\xd1\xa1\xeb\x33\x07\x61\x62\x78\x51\x9a\x73\x9d\x0a\x72\xbd\xbe\x91\xa2\x46\xb6\x5e\x2f\x2f\xb8\x7a\x1d\xad\xad\xc0\xbb\xf5\x93\x7e\x49\x46\xb0\xc2\x2b\xd8\x96\x30\x71\x96\x5c\xd3\xb4\xa2\x8e\xa7\x61\x2a\x7e\x8b\x63\x61\x53\x49\xb9\x34\xef\x41\xb3\x80\xb2\x5b\xc6\x74\xb0\x4e\x19\xe4\x76\x95\xb3\xd9\x39\x24\x55\xba\x5e\x37\x73\x63\x31\xcd\x17\x3b\x0e\x58\x6b\x11\x4b\x3a\x20\x0b\x2b\xbc\xed\x61\x2b\x89\x59\x60\x77\x22\xa2\x38\x6d\xab\xf5\xa8\x85\x2a\x8a\x5f\x95\x24\x8b\xe4\xb4\xc5\x3a\x83\x24\xc5\x19\xa4\xc6\x6c\xd2\x0a\x14\x38\xcb\x9c\x91\xea\x00\x15\x1e\x4b\xe2\xa8\x8f\x01\xc5\xae\x29\xe2\x13\x91\x44\xfc\x12\x98\x64\x49\x97\x72\xe8\x91\x05\x5d\xa2\xb0\x4b\xe5\x89\xc3\x80\x54\x80\x7e\x16\x66\x6c\xc1\x2c\x38\xe5\x95\x2d\x6b\x30\xe9\x0e\x5f\x2e\x2e\x58\x62\x0d\x9e\xd5\xa0\x57\x90\xf6\xb3\xb5\xa7\xdb\xfa\xeb\x48\x9d\x5f\x0c\x74\x19\xfc\x59\xd8\x4b\x6b\x5b\x22\x09\x1d\x8d\x81\x73\x53\x9c\x5a\xce\x5f\x36\x1a\x1c\xeb\xf3\xa5\x40\x4c\xf2\x6a\x1c\xe7\x87\x8f\x64\x4d\xf8\x90\xa3\xba\x81\x45\x59\x34\xa4\x71\x21\x02\x6f\x9c\xd9\xf3\x53\xb9\x92\x34\xcd\xe5\x4e\x84\xeb\x75\xa8\x1a\x78\xc5\xbc\x72\x99\xe4\x98\xd6\x39\x90\x27\x6f\x2c\x15\xf9\x27\x26\x90\xf1\x4b\x38\x5f\xb2\xd7\x33\x9d\x4f\x87\xa8\x30\x5f\x98\xb0\xd2\x41\xd9\x88\x8f\x74\x5d\x8f\x85\x89\x92\x5b\x7e\x6b\x29\x26\xc8\x42\xfd\x6a\x6d\xda\xc9\x63\xec\xf9\xf5\x0c\x6a\x3a\xbf\x9e\xd1\x3b\xb6\xb8\x16\xb7\xc1\xae\x47\x96\x7c\x99\xb2\xe9\x69\xfc\x89\xf1\x34\x18\x8d\x75\xf8\x05\xbf\x5e\x0a\x19\x8c\xbf\xb0\x64\x36\x8f\x6f\x82\xa6\x4f\x26\x57\x61\x92\xbe\x64\x33\xf1\xfa\x0b\x4b\x02\x17\xb8\x00\x95\x71\xd7\x23\x11\xff\x12\xce\xa3\xe9\x30\xe6\xe2\x2a\x80\xc5\xa6\x63\x9e\xc6\xc9\x22\x84\x2c\xcb\x94\x25\x2f\x54\x64\x28\xd8\x14\x4a\xa5\xb1\xfc\xb9\x0e\x93\x94\x4d\xe5\x8c\x79\x13\x4a\x0e\x7b\x34\x26\x0b\x96\x44\xd3\x88\x2d\x14\xac\x64\x36\xf1\xf7\x7d\x5f\xe6\xbd\x61\xec\xd3\x34\xbc\x1d\x46\xe9\x22\x14\x93\xab\x60\xd7\x5b\x61\x02\xad\x2a\x9a\x7f\xad\x0f\x08\x79\xd3\xa3\xf4\x4f\x59\xad\xe1\x78\x64\xf7\x80\x58\x05\x46\x9d\xb7\xd6\xea\x27\x36\x37\x50\x5e\xbc\x2b\x4c\x22\xba\x1b\xa5\xaf\xc2\x57\xb2\x2b\xa7\xad\x4b\x26\x4e\xa3\x05\x43\x18\xe4\x8d\xa6\xbb\x0e\xdd\x7a\x7d\x97\xb7\xa0\x97\xe1\xcb\xee\x1e\x3b\xe2\xbd\x6a\x0d\x44\xad\xb5\x0c\xe2\xf2\x3e\xb6\x0b\xa9\x2e\x85\x98\xb5\x3e\xad\xd7\xd1\x2e\x6f\x99\xbe\xcb\xb2\xe2\xbb\x5e\x4f\xb0\x64\xf2\x58\xeb\x5c\x91\x4d\x90\x84\x46\xf5\xba\x0b\xdc\x5e\x69\x6c\x4d\xa4\x3d\x37\x72\x89\x64\x4e\x71\x78\xeb\x22\xba\x7c\x1e\x2f\x13\x4c\x54\xe7\xe4\xd2\x91\xa7\x49\xfc\x8d\xf1\x7a\x7d\x2d\x42\xb2\x6e\x46\x80\xb7\x53\x0c\x0a\x8d\x56\x85\x00\x5c\xc7\x15\x43\x39\x95\x63\xa0\xce\x6e\x33\xf4\x2a\x7c\x55\x48\x8d\xd5\x80\x0c\x26\xe8\x0a\x09\x4c\x18\x0e\xe4\xef\x7a\x87\xc8\x23\x97\x58\x09\xaa\xd8\xea\x62\xf5\xa7\xf1\x82\x0d\xaa\x22\x83\x6a\x39\xb7\x6a\x8a\xde\x3e\x79\x2e\xdc\xfe\xf5\xd7\x5f\x5d\x92\x50\xf7\x51\x72\xc8\x1f\x25\x8d\x06\x8e\x66\x5a\x22\x5d\xaf\x33\x35\xbb\x94\xa0\x64\x94\x8c\x49\x42\x84\xe9\x80\x5d\x57\x37\x63\xd7\x53\xd2\xe5\x05\xe5\x7a\xbf\xd3\x14\x49\x32\x90\x23\x4b\x80\x7c\x5b\x22\x8d\x24\x92\x63\x19\x23\x21\x7b\xec\xf1\x10\x0a\x2a\x14\x95\x34\x6a\x3d\x96\x56\x64\x24\xaa\xb8\x29\x00\x59\x74\xe4\x4c\x47\x4a\x72\x74\x3e\xd3\x91\x73\x1d\x39\xa7\x10\x50\x91\x6a\x2e\xe9\x14\x15\xa0\x45\xb4\xca\x23\xbe\x2d\x74\x06\xf1\x6d\x41\x75\x84\xae\x3d\x7d\x77\xfa\x24\x47\xf9\xdd\xe9\x13\x9a\x47\xaa\x0c\xf1\x6c\x96\x32\x03\x5f\x05\x68\x11\xad\xf2\x5c\x1b\x74\xaf\x67\x54\xce\x01\x83\x6f\x3c\x09\xe7\xcc\x20\x0d\x01\x5a\x44\x13\xf7\x70\x61\x0e\x5d\xc5\x26\xb3\xb0\xc5\x01\xb1\xba\x2a\xa0\x8b\x11\x1f\x8f\x01\xce\x28\x19\xd3\xa8\xb8\xaf\x81\x7b\x99\x2f\x74\xd7\x2b\x86\xe9\x52\x4e\x1b\x2d\x1d\x63\xfa\xa0\x7d\xae\x84\xeb\x47\xe6\xc2\x67\x57\x52\xa4\xe9\xa0\x4c\x3e\x02\x39\xb7\x8d\x80\x1e\xd6\x00\xc2\x46\xf8\x65\x03\x90\xd9\x30\xd9\xf5\x28\xa5\x5f\xea\x75\xf4\x45\x4e\x70\xde\x5a\x5e\xcb\xd9\xfe\x1a\x7a\x45\x4f\x52\x89\x97\xb5\x23\x5c\x6c\xdb\xb6\x2f\xb3\x2c\x67\x4c\x72\xec\xd6\xe6\x4a\x01\xe6\xdc\x06\x73\xe8\x0e\x86\xa1\xb8\x6a\x4d\x58\x34\x07\x39\xa8\x1b\x40\x78\x36\x8f\xe3\xa4\xb4\xb1\xdf\x14\xab\xb8\xc1\x08\xa7\x66\xfa\x83\x84\x55\xd4\xeb\x51\xfa\x34\xe2\x91\x90\x8c\x5f\xbd\x8e\x38\x3d\x87\x61\xe4\x05\x80\x63\xfb\xd8\x9f\x90\x88\x42\x45\x8b\x88\x23\xc3\x17\x90\xe2\xda\x22\x56\xa9\xe1\x45\x9a\xa7\x36\x8b\xd4\x90\xba\xea\xe6\x08\x96\x6d\x04\xcb\x16\xf1\x7a\x5d\x8e\xae\xc4\x66\x94\x8c\xb3\x6c\x97\xd7\xeb\x37\x30\xe0\x78\x97\xd2\x1b\x24\x63\x25\x89\x0f\x1b\x0d\x83\x7a\xd8\x88\x0b\xfc\xbe\xca\x06\xc2\xa8\xf0\x56\xba\xbc\xbe\x4e\x58\x9a\x1e\xb1\xeb\x84\x4d\x42\x99\xfe\x3e\x4c\x78\xc4\x2f\xb7\x30\xcd\x93\x98\xa7\xb1\xe4\xef\xf5\x47\xeb\x26\x4c\x78\x39\x84\x1c\x0b\x5a\xed\x46\x81\x0b\x6a\x4e\xc3\xee\xe5\x93\x82\x46\x24\x34\x27\x31\xb5\x09\x2a\x4b\x22\xd5\x28\xf3\xd6\xb4\x80\xf8\x3c\xe4\xd3\xb9\x24\xfc\x55\xb1\x8a\x77\x96\x3b\xa6\x75\x91\x43\x62\x3a\x1a\xcb\xbe\x7c\x14\x1e\xae\x1f\xd9\x1f\x85\x8d\x06\xd4\x14\x51\xc7\xd9\x3c\xe7\xe4\xd9\x47\xe1\xb8\x80\x98\x4a\xb2\x19\x35\xa8\x73\xc6\x47\x4e\x23\x6c\x38\xe3\x9a\x53\x30\xec\x23\x77\x8c\xa3\x06\x4d\x1b\x8e\x6c\xb4\x1d\x3d\x4a\xc7\x0d\x87\xd4\x9c\x9d\x88\x46\xc5\xdd\x88\xaf\x2e\x27\x6a\x11\xb5\x6b\xdb\x89\xcd\xe5\xcc\xea\x2b\x62\x0d\xe7\x8c\x3f\x36\xa9\x12\xec\xc6\x7e\x20\xa1\x29\x2a\x1e\x63\x7d\x7f\xe1\x60\x59\xcc\x69\xa0\x5c\x72\x84\x5b\xa9\x08\x27\x9f\x24\x43\xb1\xeb\xad\x72\xa9\x97\x25\x26\xb7\x8e\x1d\x92\xc1\x94\xad\x7d\x4d\x1e\xd3\xbb\x55\x41\x37\x3e\xa9\xa1\xfb\xe9\xa1\x81\x0b\xab\xc7\x70\xa7\x86\xbe\x22\xfd\x4d\x77\x5d\x6b\x56\x0c\xb7\xad\xfc\xa7\x3a\x87\xc5\xb4\x9b\xa8\x9f\x65\xdc\x4f\xcb\x8c\xfb\x04\xdd\xad\x08\xc3\x8a\x7b\x5f\x63\x9b\x23\x60\x9c\x71\xbd\x1e\x21\x60\x9e\x07\x28\x01\xe9\xea\x8a\x4c\xe0\x8b\x40\xb2\x09\x40\x16\x1c\xa8\x7e\x91\x81\x41\x62\xd8\xee\x40\xdf\x91\x27\xc0\x82\xe7\x55\x31\x2c\xf9\x78\x59\xd5\xae\xa9\x33\xaf\x52\x55\x05\xd8\x41\xa9\xaa\x63\xc3\x13\xd9\x5d\x39\x45\x54\xe2\x64\x26\x64\x6b\xef\x5d\xd9\x74\xd7\x23\x55\x23\x44\x61\xf1\xbc\x36\x9d\xf9\x89\xdd\xa6\x03\xeb\xbb\xc4\x6e\x00\x81\x24\xdc\x9c\x7b\x44\xd1\x1c\x01\xdc\xa5\x3a\xf3\x14\x1c\x90\x62\x1d\xde\x96\x26\xd2\x1b\x5b\xb2\x27\x87\xec\x65\x7c\xc3\x92\x27\x61\xca\x10\xde\x79\x2b\x9b\xff\x76\xc4\x1b\x4e\xea\xc8\x0f\x31\xb6\xcf\x8d\xaf\xac\x73\x63\xaa\xce\x30\xc5\xb9\x71\xf0\x16\x26\xd9\xdb\xd1\x1a\xcc\xb1\x11\x80\xe7\x60\xfe\xb6\x9a\x42\x12\x40\x6e\x73\x6c\x90\xa0\xaf\x10\xc7\x6a\x4c\x24\x1a\xf6\x39\x2a\x81\x25\xf2\xa2\xd4\xae\x23\xd5\xae\x17\x72\x7a\x5b\xfb\xd1\xcb\xd2\xbe\x40\x1d\xa7\x51\x90\x7e\xc9\xaa\x8b\xa6\xb9\xeb\xd4\xc0\x91\x7b\x48\xd9\x80\x0f\x9c\x86\x13\x38\x4e\xe0\x34\x1d\xac\x8a\x5c\xc7\x37\xc8\x73\x89\xda\x57\xc2\xaf\xc8\x25\x11\xc6\xf9\x94\x47\xb8\x95\x2e\x2f\x52\x91\x20\x0f\x37\x14\x7e\x4f\xe9\x1e\x3a\x1b\x8d\xfe\x75\x36\x1a\x3f\x3c\x1b\xe3\x0c\x9d\x9d\xe1\x01\x1a\x3d\xbf\x1a\x2f\x16\x28\x4d\xf1\x20\x1b\xc6\xd9\x70\x38\x90\xff\xb3\xa3\x38\x3b\x3a\x82\x3f\x03\xf9\x3f\x9b\x4e\xa7\x83\xe9\x20\x9b\xc6\x83\xec\x66\x14\x67\x37\xe3\x41\xf6\x7e\x14\x67\xef\xc7\x83\xec\x8f\x78\x90\x7d\x80\x7f\x59\xf1\x37\xfb\xf0\x21\xbb\xbc\x44\x97\x97\x97\x03\x3c\xc8\x9e\x3d\x43\xcf\x9e\x3d\x93\x5f\x2c\x3b\xce\xc2\xec\x71\x76\x75\x35\xc8\x9e\x3f\x1f\x64\x9f\x3e\x0d\xb2\xc5\x62\x90\xa5\xe9\x20\x3b\xb9\xf3\xc8\xc1\x2a\xfb\x9a\xfd\x95\x7d\xfb\x36\xc8\x3e\x7e\x1c\x64\x2d\xbc\x77\x49\xbe\x55\x22\xfe\xf2\xf4\x24\x7b\x79\x9a\xbd\x7c\x39\x90\xff\xb3\xf9\x9d\x47\x3a\x2b\x99\xfd\xb9\x5c\x9b\xbf\x95\x06\xe3\x5d\x71\x1c\xd5\x62\xf8\x9d\x8d\x19\x93\xc0\x01\xa3\x24\x20\xcd\xaf\x07\x47\xc9\x18\x61\x79\x6c\xab\xd7\xd1\x6f\x72\x44\x23\x4c\x04\x7c\x8b\x91\x3b\x1e\x57\x94\x7a\x89\xa2\x6a\x8a\x4a\xc4\xc8\x93\x64\xc2\x1f\x4b\x80\x1c\x80\xf0\x2a\x08\xb0\x92\x15\xf3\x77\x14\x8a\x10\xe1\x56\x9c\x4c\x23\x1e\xce\xb7\x42\x66\x78\x65\x91\xb8\xcf\x25\x71\x02\x2b\xb8\xb4\x01\x12\xf4\x3d\x12\x84\x95\xa0\x63\xf2\x5c\xce\x6b\xf9\xc7\x56\x56\xb0\x56\x06\x89\x28\x6b\xc1\x49\x0f\x3d\x55\xf4\x4b\x50\x97\x70\x1a\xe5\x17\x69\x87\x1c\x2e\xd3\x7e\x1b\x45\x23\x31\x1e\x0f\xe4\x5f\xaa\x03\x01\x04\x50\x42\xe5\x2f\xd6\x60\xf6\xce\x46\xa3\xb3\xf4\xec\x64\xbc\x87\x07\x49\x2b\x61\xd7\xf3\x70\xc2\xd0\xde\xbf\xce\x46\xd9\xd9\xf8\x97\xbd\x4b\xe2\x38\x38\xb0\x12\xce\xce\x54\x9c\x59\x77\x9b\x3a\x36\x31\x75\x1c\x8b\x59\x52\x67\x9c\xb8\x41\x87\x28\x92\x0c\xd1\x40\xfe\xd5\xc7\x1c\x79\x02\x93\x41\x03\x2c\x5e\xad\xe4\x7e\x24\x3b\x00\x64\xf6\xe5\xee\x31\x47\x59\xe0\x69\xad\x5e\x7e\x6f\x93\xaf\xee\x4e\xa5\x94\x4e\xb4\xe6\x31\xbf\x94\x25\xd5\x41\x18\x58\x4f\xb6\x92\x68\x7e\x6b\xcd\xc3\x54\xbc\xe0\x53\xf6\x95\xba\x8f\xdc\x43\xca\xeb\xf5\x6f\x2d\xc1\x52\x99\xe9\x11\x66\x94\xe5\xad\xff\x46\x12\x4c\x4a\xf9\x09\x6f\x52\xaf\xcc\xdc\xff\x49\xf7\xce\xa6\x7b\xe4\x83\xfc\x91\x1f\xcf\xe4\xc7\x5d\x7b\xb5\x47\xfe\x09\x5f\x9d\xd5\x1e\xf9\x85\xee\x8d\x1a\xcd\xf1\xe0\x6c\x7a\xd7\x5b\xed\x91\x3f\x54\xde\xc1\x1e\xf9\x4b\x7d\xe9\xd0\xc7\x22\xa4\x63\x7e\x07\x10\x1e\x91\xe0\x18\xd3\x01\x09\x51\xb0\x02\xa4\x47\x24\x50\x0e\xc9\x8d\x3d\x92\x14\x49\x8d\x3d\x12\x31\xba\xf7\x31\x93\x61\x09\x32\x18\x00\x92\x97\x11\x89\x4b\xf1\x68\x10\xa8\x24\x3c\x90\x89\xa1\x04\xe1\x36\x0f\xc6\x77\x2e\xf1\xbb\xbd\xd5\xe8\x1f\x61\xf3\xdb\xd9\xd2\x75\x1f\xbb\xcd\xb3\xa5\xdb\x7d\xfa\xf4\x6c\xe9\xf6\x5d\x19\x38\xea\xcb\xc0\xd3\x03\x08\x3c\x3d\x7a\x22\x03\x47\x4f\x21\xf0\xd4\xed\xcb\xbf\x9e\x0a\x1c\x3f\x1d\xdf\x79\x00\x2d\x1b\x9d\x2d\xdd\x1e\x14\x70\x7b\x4f\x9f\x9e\xed\x99\x04\x74\x96\x3e\x1c\x94\x13\x4d\x12\x96\xbf\xab\xbd\x88\xa4\xac\x44\x66\x96\xcc\x50\xf7\x94\x49\x2a\x31\x44\x02\x0f\x2c\x55\x30\x66\xc9\xc3\xe4\xe9\x65\xc0\x03\xb1\xb2\x04\x80\xac\xb4\x64\xe7\x28\x65\x84\xe1\x01\xc0\x2a\xce\xae\xa4\x38\x13\xc2\xbd\xd2\x5b\x76\x79\xfc\xf5\x1a\x4d\x18\x2a\xe6\x8a\x73\x76\xe6\xc8\x85\x62\x2f\x1d\x74\x36\xc2\x99\xfc\x19\xe3\xec\x6c\x84\x46\xff\x3a\x1b\x4b\x82\x8a\xcf\xc6\x32\x16\x08\x6d\xf9\xce\x45\xae\xf8\x62\x0e\x67\x19\xcf\xb2\x24\xcb\xa2\x15\xc6\xb6\xcc\x91\xd9\xdc\x5a\x51\xdf\xa8\x79\xb6\x77\x76\xf6\xaf\x5f\x1e\x36\x06\x2d\x84\xb3\xd1\xd9\xf8\x6e\x35\x96\xab\xf7\xec\xec\x97\xba\xa3\x78\xca\x59\xb9\xf7\xae\x58\x99\x29\x13\xb0\x90\x37\x77\xf6\x7a\x1d\x31\x3a\x62\x63\x4c\x42\x75\xfc\x4a\xec\xcb\x39\x8e\xef\xb8\x24\x35\xf2\x04\x27\x09\x6c\x59\x16\x2b\x8f\xc9\x33\x36\x92\xbb\xf7\x98\x5a\x4c\xd4\xb5\xae\x1b\x70\xb0\xa1\xe9\x4e\x68\x9d\xdf\x50\xf9\x27\xcb\xee\x56\x44\xc8\x81\x6c\x9d\xdf\x40\xda\x4a\xb5\x65\xca\xa8\x4b\x16\x8c\x7a\xe4\x96\x51\x9f\x7c\x61\xb4\x4d\x2e\x19\xed\x90\x0b\x46\xbb\xe4\x9c\xd1\x1e\xb9\x61\xb4\x4f\x8e\x19\xdd\x2f\x9a\xfc\xd5\xee\xbd\x13\x19\x18\xb4\x7b\xbd\xa0\xdd\xeb\x5a\x87\xa4\x52\x0f\x3f\xe8\x50\xea\xd6\xeb\xec\x81\xe7\xba\xbb\xd4\xcd\x32\xf6\xa0\xe3\xba\x94\xba\xab\x77\xc8\xf9\xe0\x10\x97\xb8\xa4\xfa\x1e\xfc\x16\x6e\x71\x72\x72\x71\x48\x0f\x0e\x0e\x0e\x06\x8e\xd3\x60\x81\xd3\x70\x1a\x6c\x85\xc9\x3b\xe4\x92\x91\xf3\xe1\x83\x43\xfc\x71\x19\x8e\xbd\x27\x29\x40\x12\x01\xab\x88\x2c\xd4\x91\x85\x1c\x99\xec\xd8\x09\x1f\x1c\xd2\xdd\x92\xf2\xc1\x21\x3d\xb2\xeb\xda\xa9\x6f\x90\xfa\x22\xce\xad\x83\xc9\x91\x09\x79\x98\x2c\x19\xb4\x30\x61\xfa\xf3\x83\x43\xfe\x20\x1f\x4c\x40\x06\x19\x23\xff\x2c\xc2\x1f\x1c\x22\x18\xf9\xc5\x8a\xc8\x63\xae\x18\xca\x71\x33\x49\x63\x32\x65\x90\xa2\x81\xad\x29\xec\x8d\xa6\x6c\x4c\x7d\x4a\xa9\x99\x4b\x03\x2d\x86\x3d\xbd\x89\x8f\xa2\xcb\x48\x7c\x90\xdd\xc2\x70\xa0\x27\xde\x95\x46\xb1\x0a\x4c\x75\x49\x53\xa8\xba\x0c\x94\x78\xc1\xe5\xdc\xf3\x5c\x98\xd9\x9b\x40\x68\x85\x1c\x58\xa2\xd3\x40\xbd\xfd\x43\xf9\x31\xf0\x0e\x5c\x37\xf0\x59\x1b\x2b\x56\xfc\x35\x23\x8f\x19\xfd\xc4\x90\xf3\x74\x39\x9f\x7f\x80\x9e\xde\x75\xb1\x75\xcc\x2b\x93\xa4\x1c\x7e\xb2\x26\x67\x4e\x06\xe8\x94\x69\x29\x92\xdc\xa7\x2a\x24\x3c\xf2\xe0\x07\x92\x9e\x60\x68\x72\x62\x8b\xf8\x0d\xd9\x56\x7e\x85\xb5\xce\xa7\x23\xe7\x92\x09\xa7\x91\xcb\xdd\x06\xce\xbb\xd3\x27\x92\x23\xc6\x0d\x31\x56\xd2\x28\xeb\x74\x97\xd3\x61\x0b\x4c\xbd\xae\xc5\xe0\xc0\xce\x17\x0d\xa6\x20\xd0\x91\xab\x4c\xcf\x6c\x5c\xaf\x7b\x30\xce\x8b\x98\x8b\x2b\x59\xd0\x3f\x80\xf0\x14\xf6\x7e\x8d\x4e\x7a\x0f\x3a\x9c\xe4\x85\xc9\x13\x66\x07\x81\xaf\xf8\x6e\x71\x9b\xc0\x3e\x61\xb9\x26\xa6\x96\xe2\xe3\x2c\x53\x5f\xb9\x74\xb6\xf6\x2a\x7c\xb5\xa3\x58\x10\x24\x1e\x78\x7e\xc3\xf3\xf1\x03\xcf\xcf\xd7\x7a\x83\x22\xd1\xe4\x78\xcf\xf3\x09\x48\x7c\x06\x8a\xd4\xf8\x07\x81\xbf\x1f\xb4\xbd\x26\x7f\xd0\x7f\xe0\xaf\x5e\xb3\x0d\xa9\x33\x28\x35\xbe\x9e\x6d\x08\x9e\x75\xfc\xe6\x61\xd0\xb0\x85\x8f\xc4\xa1\xe2\x5f\xcd\x15\x98\xc0\xd1\x0c\x46\x5d\xd2\x66\x4a\x0b\xfd\x40\x8d\x64\xd3\x5b\x91\x77\xc8\x19\x3a\x64\xe4\x0c\x87\x40\x80\x9c\x61\x59\xcf\xa0\xac\x51\x08\xdd\xd9\xf0\x80\x04\x39\x43\x59\xa4\x44\xfa\xd8\x3d\x7c\x34\x14\x4e\x4f\xae\xe2\x44\xe4\x13\xd1\x80\xf9\x79\x38\x16\x88\x37\xc8\x81\x38\x87\x38\x43\x45\xbc\x74\x70\x5f\x11\xa1\xa1\x43\xfe\xd0\x5f\x43\x8b\x78\x41\xad\x95\xfa\x25\xc2\xc6\xf5\x2d\xbb\x64\x5f\x15\x9d\xd0\xa5\xbe\x57\xcc\x2a\x01\x14\x6f\x28\x11\x1b\xae\x29\x57\x48\x02\xb3\x60\x6a\xc3\x6c\x7a\x79\xd6\xa1\xca\xbc\x91\xdd\x3e\x45\x71\xc3\x89\xe8\xfa\xde\x48\x82\x24\x37\x47\xc2\x73\x91\xfa\x8e\x22\x10\xd1\x40\xd5\x12\x05\x57\x88\xe3\xd2\xf5\x12\x65\x2b\xa5\xb8\xf9\x96\xd1\xbd\xa3\x51\x7c\x34\x1e\xe8\xe3\xde\xd9\x58\x1e\xf8\xb2\xb3\x14\x37\x24\x26\x83\x3d\xf2\x86\x51\xe7\xf7\x90\x2f\xc3\xe4\xf6\xfc\x29\xbb\x48\xe0\x63\x18\x26\x93\xab\xf3\xc7\xd7\x49\x34\x3f\x1f\x86\xb7\xe7\xbf\x2f\x39\x3b\xff\x7d\x39\xbf\x3d\x7f\xbc\xbc\x5c\xa6\xe2\xfc\x84\x5d\x0b\x30\xc7\x38\x7f\x3d\x11\xb1\xfc\x7d\x15\x7f\x51\x11\x47\x6c\x02\x1f\x8e\xd1\x58\x3e\x77\x30\x79\xa5\x6a\x91\x35\x48\xe0\x12\xb4\x01\x2c\xe1\x4a\xb0\x12\xa6\x84\x26\x21\x49\x20\x76\xf9\x82\x7c\xfe\x6d\xb3\x34\xa0\xb2\x64\x11\xa4\x42\x8f\x3a\x9a\x6d\xb2\x39\xb0\x60\xf6\xfe\x75\x36\x6d\xfc\xb2\xa7\x0e\x04\x02\x63\x41\x6f\x90\xc0\x3b\x4a\x52\x38\x43\xbb\x21\x12\x94\x55\x4d\x4a\x35\x12\x02\x5b\x95\x18\x7a\x6d\x4b\xa2\x15\x45\x93\x34\xca\x10\x3f\x22\x30\xdc\x4e\xde\x47\xa2\x1c\x18\x36\x67\x0c\xd2\x2a\xfb\xd6\xf7\x05\xdb\xbc\x80\x1c\xa0\xbf\x73\x72\x5f\xb9\x2d\xec\xba\xeb\xfb\x82\x86\xaf\x18\xab\x23\x46\x43\x46\x5e\xca\xbf\x45\xbf\x3e\x65\x08\xdf\xe5\x21\xb6\x36\xf9\xb5\x04\xdd\x6c\xd4\xab\x42\xb6\x33\x1a\x93\x48\xfe\x89\x73\x91\x15\x90\x2a\xcf\x87\x73\x2b\xa7\x33\x34\xf2\x59\x9b\x88\x31\x26\xe6\xc6\x3e\xa7\x36\x9a\x60\x70\xc9\x57\x63\x12\x6d\x24\x9b\x94\xf8\x27\x52\x6c\x90\xea\xd8\xda\x4a\x65\x0c\x93\x15\x98\xaf\x38\xff\x2a\x61\x0b\x62\xa8\x09\x03\x71\x14\x26\x91\x0e\xc1\xf1\xda\x6a\x9a\xdf\x81\xcc\xb1\x4e\x8e\x21\x59\x5d\xd2\x58\x34\x82\x5a\x07\x09\xe7\x5f\xc8\x69\xc4\x5a\x7a\x9c\xc9\xe1\xc6\x0e\x71\x22\xc7\x5c\x0e\xad\x53\x24\xba\x01\xad\x9c\x11\xc8\x40\x75\x2d\xd1\x0f\xd5\x72\x1f\x84\xa4\x02\x42\x31\x1f\xbf\xb1\x62\x63\x8a\x66\x88\x1d\x7a\xae\x5b\xaf\xbb\x87\x94\x99\x13\xfb\x3d\x12\xf4\x42\xb0\xb2\xc3\x47\xee\x98\xb2\x46\xc7\x75\x89\x28\x6e\xb6\xe4\x9f\xd6\xbb\xd3\x27\xb6\xc2\x0e\x97\x53\x23\xbf\x1b\x6a\x5d\x32\xf1\xee\xf4\x89\x61\x35\x80\xb5\x10\xad\xb4\x1c\xc9\xb4\xe4\xff\x3b\x90\x0b\x74\x0a\xc5\xf5\xa2\xa5\xcf\x59\x59\xae\xd8\x6f\x88\x26\x37\x5b\x2b\xea\x37\x64\x4f\x10\x97\x24\x58\xa3\x74\x14\xde\x22\xdc\x14\xf8\x41\xbf\x91\x34\xbd\x02\xce\x6f\xcc\x3e\xfb\x81\xc9\x10\x09\x49\x4a\xbd\x46\xff\x21\x12\x4d\x0f\x37\x50\xbf\xc1\x9b\x89\x2c\xf8\x5c\x91\xfa\xe2\x7e\x31\xa4\xe9\x21\x75\x07\x5f\x19\x8a\x29\x93\x79\xd3\x20\xfd\x15\x8e\x38\x03\x19\xd3\xf0\x48\xda\x84\x20\x0e\x64\x98\xa4\x98\xdc\x49\xaa\x13\xc4\x64\x1a\xde\xbe\x9e\xc9\xee\x08\x42\x8b\x27\x7c\xc7\xd6\x6e\xd1\x48\x4c\x9f\xdb\xb4\x4a\xd2\x9f\x90\x5a\x77\x78\x40\xd3\x34\x28\x84\x9b\x71\xd3\xc3\x7b\x7d\xdc\xc8\xa5\x24\xe1\xa1\x37\x48\x68\xd8\xf8\xcc\x50\x44\x0d\x9c\xa6\x07\x90\x82\xf0\xd7\xcf\x6b\xc0\x07\x28\xa1\x61\x73\x3d\x96\x14\x45\x1b\x1e\x0e\x2c\x48\x24\xa1\x21\x26\x77\x37\x8c\x7d\x0a\x12\x02\x6d\x8b\xac\xf6\x7c\x5e\x1b\xa5\x7c\xd4\x48\x04\xdf\x0d\x85\x88\x91\xfc\x42\x5f\x35\x93\x46\x84\xf7\xfa\x96\xc4\x69\x9d\x51\x56\x77\x48\x82\xf4\x71\x6b\x12\xf3\x49\x28\x10\xcb\xef\x95\x04\xc6\xf2\x60\x78\x23\xd9\xaa\x9b\x1b\xc5\x56\xdd\xc4\x0e\x71\x24\x8a\x70\x16\x73\xde\xcb\xb4\xf7\xef\x55\xda\x7b\x99\x16\xa5\xf1\x7b\x95\xfc\x06\xa9\x8c\xc4\xb9\x51\x21\x93\x44\x9c\xf7\x8a\xc1\x51\xc9\x5d\xf8\xce\x13\xbb\x8a\x43\xb9\xc9\xd9\x1d\x59\x75\xce\xee\xbc\xcf\xa3\x65\xad\x10\x7d\x2d\x59\x8e\x1b\x59\xcd\x0d\x80\x26\x32\xa9\x8a\xef\x10\xa3\xc4\xc8\xb5\x5d\xe2\xe1\xfc\x98\xff\x0e\x39\x53\xc9\xb9\x39\x53\xd9\x80\x69\x78\xab\xda\x36\x9d\xfe\x04\x3b\xa7\xd5\x59\xd2\x61\xc4\xcb\x6c\xe1\xf4\xdf\x02\x53\xc1\x5f\x4e\xff\x3d\x48\x65\x20\x4c\x41\x70\x74\xaa\x6a\xe8\xb1\x8e\xd4\x43\xa0\xe2\xdf\x20\xe8\x09\xe2\x4c\x8b\xa1\x54\x11\xac\x34\x9a\x2a\xee\x58\x0d\x28\x04\x3c\x2f\x1f\x5c\x3b\x6c\xe7\xf7\xf4\x89\x7c\x9a\x8f\x26\xcb\xbf\x8e\xf3\x2f\xd9\xde\x2d\x2c\xaa\xd5\xdd\x6b\x9c\xed\xf4\x07\x4a\x55\x71\xc4\xd3\x1f\x29\x68\x95\x81\x59\x27\x8b\xa8\x1a\x55\xf9\x1f\xe1\x76\x0d\xac\xfb\xf9\xdd\xd6\x74\x8d\xdb\xd5\x7d\x07\x4a\x59\xaa\x6e\x18\x0a\xd9\xf5\x5b\xe6\xba\x99\xdf\xc0\x1e\xff\xc9\xa8\x73\xb2\xe4\xd3\xf0\xf6\x7c\x18\xc3\xcf\xe9\x92\xa5\xf2\xf7\x3d\x9b\x72\xf5\x75\x7a\xb5\x4c\xe0\xe3\x69\x12\xc9\x9f\x93\x50\x2c\x13\x39\x5e\x36\x7b\xfb\x41\x01\x92\x50\x24\x08\x59\x5c\x16\x94\x65\x64\x81\x52\xde\x67\x90\xf7\x7c\x18\x9f\x9f\x2e\xcf\xdf\xb3\xf3\xd3\xab\xf3\xa7\xc9\xf9\x49\x58\xca\xf4\x4f\xe0\xd1\x7e\x81\xbf\x7f\x94\x39\xb5\xbf\xfe\x3d\x4e\x4d\x92\x7a\x12\x4a\x56\x2d\x95\x7f\x96\xf2\xcf\xbc\xcc\xb4\xf5\xcb\x3c\x9b\x37\xc6\x92\xf4\x23\x65\xcb\x2b\xd7\x92\xbd\x9e\x81\xc5\x32\x36\x32\xe5\x15\xaa\x92\xe2\x72\x92\x8e\x0d\x15\xc7\x96\x60\x92\x9a\x8b\x78\xb2\x54\x5f\x31\x26\xf3\x3c\x75\x9e\xa7\xce\x4d\x2a\x60\x1a\xe6\xac\x5b\x9a\x7f\x2d\xf3\xaf\xf9\x1a\x63\xa7\x5a\x94\x6a\x56\x2d\x05\xbe\x6e\xa9\x43\x4b\x08\xcd\x75\x68\x6e\xb1\x71\xa5\x89\xbd\xc1\x20\xcd\xb7\xb3\x58\x9b\x4b\x89\x56\x40\x5c\xcb\x6c\x56\xeb\x0f\x64\xbd\x8f\x6f\x5b\xfe\x20\x5a\xf7\xc1\x48\xbf\x0f\x63\x18\xf1\xfb\x20\x84\xf7\x72\x8f\x1f\xd9\x9a\xd0\xe1\x2a\x5e\x26\x29\xc2\x0f\x3c\x3f\xcb\x3c\xbf\xc8\xf8\xbb\x9e\xd6\xef\x80\xc7\xda\x2a\x37\x2d\x1f\xd3\xb4\x9a\x23\xb2\x21\x6b\x6b\xbd\x88\x2f\x05\x83\x60\xe9\x42\x8f\x89\xb5\xd5\x73\x6e\x80\x00\x1d\x92\xfb\xfc\x73\xb9\x97\x3f\x7f\xae\xe5\xb7\x8e\x04\xab\xf6\x87\x2b\x99\x70\x75\xa5\x13\x3e\x32\x88\xfc\x24\x23\x3f\x7d\xba\x5f\xda\xab\x51\xcb\x32\xbf\xa3\xf6\x9f\xab\xc5\x62\x43\xcc\xac\x2f\xe1\x9d\xc6\x47\x66\xdd\x4d\xe2\xc6\x4b\xb4\xd6\x22\x1f\xe7\x40\xd2\xf4\x3f\x01\x63\xe2\x52\x36\x89\xf9\xd4\x06\xfd\xfc\x3e\xfc\xec\x26\x6d\xc7\xee\xf9\xfd\xd8\x7d\x0f\xc8\x16\xdc\x7e\x67\xc8\x09\x41\xbe\x0a\x9f\x8f\xc1\x54\x47\x6e\xc3\x30\x4c\xc4\xb9\x52\x1b\xb0\x0a\x79\x6d\xb5\xa7\x85\x0e\x61\x42\x7d\x3e\x2e\x3e\x9f\xe7\x1b\xec\x55\xfe\xf5\x29\xff\x92\x13\x20\xe7\xb6\xe4\xa0\xe7\x01\x39\xd8\x45\x8a\xec\xa8\xbf\xf2\x6f\xd9\xe2\x8f\x1a\x80\x95\xf2\x3c\x4f\x01\xb9\xd0\x73\x87\x48\xf8\x63\xf2\x85\xe9\x18\xc9\x0c\x7e\xfa\x54\x61\xb1\xa3\x78\x5c\xb9\x81\xed\x88\xd1\x17\x36\xa6\x7e\x07\x4c\xff\xdc\x20\x31\x52\xa6\xd0\x21\xce\xe3\x4a\x63\x9f\xf3\x28\x7d\xb3\xb0\xb6\xdc\x28\x7d\x33\x44\x20\x41\xc8\x67\x3d\xec\xa3\x00\xe6\x4a\xf6\xde\x55\x05\x1c\x55\xaf\x44\x81\xc0\x46\xac\x15\x80\xe9\xae\xab\x85\xed\xd0\x07\xd5\x88\xe7\x9a\x78\xfe\x4e\x0e\xa6\xe0\x3d\x13\x8c\x89\x18\x5d\x96\xa3\x65\xe4\xd6\x7a\x64\x2f\x7e\xa7\xa6\x0e\x9c\x2c\x7e\xbe\x5a\xe2\x43\xf4\x45\x39\x3a\xda\x8a\xcd\xf3\xff\xe9\x56\x17\x70\xff\x6f\xb4\x52\xf3\x47\x42\x10\x2e\xe0\x32\x43\xb6\x36\x55\x2b\x2d\x11\xf4\x4e\x4e\x20\x3e\x0d\x93\xe0\x2e\x0d\x17\xec\x28\xbc\x0d\x9c\xd1\x69\x3c\x0d\x6f\x6b\xa1\x18\xd7\x5e\x9e\x3a\x84\xb3\xaf\xc2\xc4\x2f\xe2\x24\x89\x6f\x4a\x49\x92\x71\x0b\x80\x3d\xac\x8d\x4c\xfc\x3c\x4c\x75\x91\x0f\x2c\x15\x2c\xb1\xc1\xc9\x34\x55\x66\xf4\x32\x4c\xc5\xb8\x56\x2e\x2a\xb1\x38\x9e\xa7\x2c\x70\x5e\x3a\x2b\x52\xd6\x0d\x08\xee\x5e\x9e\x9e\x04\xce\x55\xb0\x58\x04\x69\x5a\x7b\xec\x90\x97\xa7\x2a\x08\xdf\x81\x33\x1c\xee\x1d\x1d\xed\xa9\x2b\xaa\x97\x10\x1e\x0e\x6b\x47\xa4\x66\x62\xd6\xa2\x6a\x79\x51\x48\x92\x88\x90\x5a\x55\x86\x15\xb1\x34\x1c\x02\x47\xab\xa4\xd7\xa6\xa1\x60\x0e\xd1\x9a\x27\x81\xf3\x60\xea\xa8\xb3\x3a\x88\xe8\x5e\xab\x68\xd8\x7e\x02\xa5\x0e\xe0\xaf\xf6\x48\xc2\xe6\xa1\x88\xbe\xb0\xd3\x68\xc1\x82\xbb\xd9\x52\x2c\x13\x16\x38\x11\xaf\x3d\x48\x1d\x72\x1d\xa6\x22\x70\x1e\xa4\xb5\xf0\x32\x76\x48\x1a\x38\x61\x6d\xc6\x6e\x6a\x9a\x56\x3a\x24\x4d\x65\x2d\x45\x78\x21\x73\x28\xea\xea\x90\xc5\x02\x12\x35\xb1\x75\xc8\x55\xe0\x84\xbc\xa6\x28\xe6\xd5\x15\xa4\x5d\xa9\xb1\x9f\xca\x62\x70\x50\x99\x4e\x21\x5e\xb2\x03\x0e\x19\x02\x34\x25\x94\x1f\x0e\x15\x30\x90\x34\x39\xe4\x56\x26\xa9\xcb\xc6\xdb\x5b\x48\x91\x81\xd4\x59\x11\x95\x23\x78\xc3\x88\x25\x95\x0a\x5e\x31\x30\xed\x08\xee\xa6\xf1\x4d\xe0\x92\x69\x7c\x1b\xf4\x56\xc6\xda\x23\x0d\xfe\x64\xc4\xe2\x42\x82\x67\x45\x50\x15\xff\xc0\x48\x69\xfb\x0e\xf6\x46\xe1\xf5\xf8\xac\x35\x58\x0c\xce\x5a\x83\xbd\x68\x45\x22\x41\xef\x56\x24\x16\xa5\x4b\x72\xd0\x1e\xc9\xcf\xfe\x83\x35\xe5\xb6\x42\x01\xe0\xdc\x21\x4e\xd3\xc1\x81\x25\x9d\x05\x9d\x12\xad\xd4\x2c\x0f\x29\x20\x8f\x8e\x04\x38\xb1\xd8\x6e\x1a\x67\x8c\xf8\xd6\x8d\xf9\x30\x58\xfc\x53\x21\x5a\xe7\xe1\xc5\x45\x52\x18\x17\xb6\xf6\x14\xc9\xde\x73\x1a\x92\xdb\x15\x48\xe0\xd5\x04\xd4\x7d\x18\xbe\x33\xea\xa6\x50\xad\x65\x47\x25\x6c\x39\x79\xa1\x21\x81\x10\xa7\x31\x12\x78\x30\x91\xb8\x07\x73\x95\x0d\x0f\x84\xa0\x3c\xf8\xb7\x35\x93\x5f\x02\x7e\x35\x30\x75\x56\x2e\x57\xe2\x25\x9f\xb6\x6a\x47\xd1\xb4\x76\x1b\x2f\x6b\xb3\x38\xb9\x64\xa2\x26\x62\xf0\xb4\x54\x8b\xc4\xc0\x91\x94\x47\xb7\xd4\xd2\xd7\x10\xf9\xd5\x9c\xf6\xd8\x21\x8c\xb8\x5d\xab\x7a\x42\x33\xc1\xda\x64\xc7\x68\x35\x24\x20\x8a\x14\x2d\x09\x8a\x32\x6d\x89\x02\xf9\xf0\x27\xe4\xa8\x06\x29\x04\x5f\x7f\x61\x49\x12\x4d\xe5\x01\x71\x99\xb2\x9a\xb2\xb6\xd0\x02\x74\x95\x03\xa9\x9e\x7e\x15\x2e\x18\x91\x4d\x9f\x45\x97\x58\xa2\x3d\xb9\x0a\xf9\x25\xab\x85\xbc\xc6\xbe\x46\xa9\x88\xf8\x65\x4d\x6f\xa3\x06\x8a\x5d\x4f\x25\x94\xf4\x0a\x1c\xd2\xc4\x7c\x7e\x5b\xbb\x60\xb5\x65\xca\xa6\xb2\x5f\x6a\xe0\x07\x4a\x02\x0c\xc1\x14\x5d\x15\xad\x9d\x30\x56\xbb\x12\xe2\x3a\xd8\xdb\x53\x15\xfc\x9d\xb6\x26\xf1\x62\xef\x72\x19\x4d\x59\xba\xf7\xff\xdb\xd3\x0a\xe0\xe9\x9e\xaa\xb8\xa9\xa7\x08\x80\x5c\xc4\x09\xab\x45\x7c\x16\xb7\xc0\x77\x0c\xf4\x45\xeb\x5c\x21\x92\x5f\x75\x68\x85\xda\x96\xf2\xf0\xa2\x10\xc7\x79\x7c\x24\x46\xe5\xa4\x31\x4e\x2a\x22\x4b\x50\x8b\x61\x43\x9c\xa6\x02\xad\xc1\xce\x6f\x4e\xe2\x0d\x30\x59\x86\x36\x23\xc1\xde\x7d\x33\x5a\x1d\x07\xef\x78\xb8\x60\x01\x23\xaa\xfa\x40\xac\x94\x09\xd2\x4e\x22\x39\x1c\x15\x59\x5a\x19\x70\x52\x79\x82\x4e\x11\x98\xe0\x48\xb0\x72\x91\xc2\x4f\x6b\x16\x27\xc7\xe1\xe4\xaa\xe4\xc4\x4b\xce\xc4\x96\xac\x83\xb0\x96\x1e\xc1\x15\xac\x3d\x86\xc9\xda\x52\x9b\x88\xb2\x4c\xbc\x5e\xcf\xad\x4d\xac\x4f\x35\xd5\x41\xd3\x66\x2d\x0e\x93\xdd\xe2\xf2\x16\x40\xec\x26\x88\x61\x58\x05\x82\x02\x8d\x29\xee\x76\x41\x4f\x67\xb5\xae\x3c\x60\x1b\x2a\x99\xc3\x3e\x75\x1f\xc5\x85\x9a\x8e\xca\x20\x28\x8a\xa8\x24\x78\xa3\x78\x8c\x8d\xbc\xa1\xe9\x60\x6c\x2c\x28\xb8\x1c\x3a\x95\xa1\xe1\x8d\x31\x1e\x70\x2b\x17\xe8\x60\x3f\x72\x0f\xc5\x23\xc0\x2d\x91\xb8\x45\x96\x60\x54\x9f\xfd\x24\x3c\x83\x70\x22\x9b\xc3\x0b\x27\x56\xbf\x52\x51\xaf\x1f\xa3\x48\xb9\x29\xf8\x95\x8a\xa6\x87\x2f\x12\x16\x7e\xda\x11\xcd\xe6\x2a\x6e\x34\x72\xed\x79\xb1\x2a\xa9\x97\xcf\x84\xad\x1e\x2d\x7b\x2e\xbf\x7e\xab\xd7\x9b\x3e\xa5\x60\xd1\x97\x5b\xdf\x81\x7a\x31\x1f\x2d\xd8\xf8\xd0\xcd\x32\xcf\x3b\x84\xef\xc1\x82\x05\x7c\x74\xcb\xc6\x87\x5e\x96\xc1\xc7\xaf\x4f\x18\xe2\xa3\xa9\x24\x29\x32\x03\x1e\xdc\xca\x1c\x5f\x54\x31\xbf\x73\x08\xdf\xf2\x8b\x52\x0a\xdf\xf5\x3a\x72\x77\xe5\xf7\xa5\x8c\x57\x9f\x17\xc5\xe7\xb9\x84\xf1\x45\xc2\xb8\x54\x30\xba\x07\x87\xf0\x3d\xb8\x94\x91\x17\x56\xe4\x05\x1b\x0f\x2e\x64\xe4\xb9\x8a\x3c\x38\x90\xb1\xe7\x6c\x3c\x38\x67\x41\xd3\x23\xd0\x9e\x73\xd3\xa0\x23\x23\x83\x97\x2d\x3b\x9c\xb2\x2c\xbb\x65\x87\x42\xa9\x51\xdf\x02\x33\x6e\xe7\x96\xac\x52\x5a\xaf\x37\x3d\xa5\x8a\x81\x04\xbd\xa9\xcc\x03\x76\x87\x56\xae\x63\x93\xcb\x64\xa2\xa2\x74\x1d\x79\x25\x0c\x07\xba\x76\x25\xc9\x8c\x7e\xfe\x40\x04\x96\xcd\xce\xb5\x35\x6a\x5a\x02\x05\xe2\x27\x7d\x71\x7b\xae\xcd\x31\x97\x64\x0e\xc2\x9d\x25\x65\x64\x6e\x59\x4a\xb5\x78\x7c\x83\x30\x26\x11\x5d\xb6\xce\x97\x29\x7b\x77\xfa\x64\x30\x9a\x6f\xdc\x01\x11\x13\x35\xd4\x1a\x22\xf3\xfc\x4e\x46\x80\x7e\xba\x2a\xb3\x5e\xa0\x94\x5b\x67\x25\xac\x75\x7e\xa3\xac\xa0\xc0\x6a\x34\x94\x93\xa4\x14\x5e\xc8\xf0\x16\x6d\x5e\xd5\x3e\xb2\xdc\xc9\xc9\x28\xdc\x26\x9f\xdf\xe0\xd6\xb3\x67\xc6\xc8\x4a\xb4\xde\x17\x9f\xc7\x38\xa6\x1e\x09\x69\x87\x70\x7a\x25\x29\xe6\xb3\x67\x04\xaa\x91\x53\xf2\x1d\x43\x9f\x04\xc2\xc4\x23\x1d\x0c\xd7\x21\x92\x98\x43\xae\xf7\xc4\xc3\x04\xa1\x48\x85\x8e\x89\x87\xb1\x9c\xd2\xfd\xc3\x48\xce\x88\x25\xdd\x75\xd5\x95\xf6\x5d\x6c\x13\x1b\xc9\x2e\xb5\xa6\xf1\x0d\x09\x2b\x62\x6f\x95\x23\x44\x6a\x2a\x8d\x49\x88\x77\x34\x52\x97\x97\x05\x52\xf3\x32\x26\x37\x64\x0e\x22\x3e\x63\x01\x2a\x5a\xd3\x81\x44\x4c\xb4\xa6\x58\xce\xea\x9e\x85\x92\x99\x23\x2d\x36\x80\x1c\xac\x11\x13\x24\x5a\x4c\xe5\x13\x2d\x96\xe7\xc4\x41\x44\xe3\x55\x22\xdb\x94\xfc\xfa\x99\x21\x0e\xe8\x0c\x2a\x26\x39\xdd\x75\x35\xd8\x65\x45\xf2\x34\xbc\x95\x19\x50\x4a\x7f\x93\x40\xf4\x10\xe1\xbc\x35\x54\xe9\xde\xc1\xf5\xbc\x59\x60\x34\x2d\x2e\xbc\xf0\x0a\x4e\xc8\xb9\xc5\x9e\xb5\x08\x43\xd9\xfe\xbc\x57\x22\xf9\x17\x13\x64\x67\xfa\xf5\x2b\x43\x21\xce\x32\xb0\xcd\xb7\xe2\x65\x2b\xb7\x2c\x6e\x0a\x07\x2c\xfa\x8d\xa1\x90\xb8\x25\xac\x34\xce\x0b\x36\xa6\xc9\xda\x6c\x37\xd3\x34\x4f\x50\x73\xd9\xc8\x40\xdb\xa5\xe9\x2b\xc6\xa0\x3a\xa4\xbf\x29\x88\x46\xa3\x91\x50\x62\xe0\x5c\x62\x5a\x4a\x2e\x95\x1e\x48\x52\x2b\x06\x5e\xe0\x06\x3a\x66\x07\x88\x23\x04\x80\x3e\xba\x26\x74\x59\x0a\x5d\x94\x42\xe7\x40\x49\x59\xeb\x5c\x9f\x13\xe9\xae\x4b\x0c\x08\xea\x2a\x7d\x09\x2a\xd3\xf5\xaa\xff\x66\x5b\xe5\x12\x6b\xb9\xa9\xf5\x97\x16\x4a\x98\xf9\x85\xf4\x00\xa5\x05\x29\xd1\x57\xcd\x56\xb9\xe2\x52\x39\x2d\x13\x07\x5c\xaf\x83\xbd\x8f\x75\x9d\x8c\x03\x1b\x54\x19\x4c\xba\xc2\xf6\xa5\x72\x8a\x09\xac\x39\x8d\xb7\xb1\xf0\x34\x17\xc4\x81\x89\x80\x50\x31\xb3\xc4\xb7\x05\xf0\x0a\x53\x7d\x97\x3d\xd4\xc2\x2f\xab\xbc\x89\xc2\x4d\xa6\xed\x67\x8b\xee\x53\x7d\x19\x6a\x99\x10\xd6\x54\xcc\x72\x60\x77\x7e\xd3\x9a\x42\x05\x37\xad\xe9\x2e\xa5\xb1\x99\x82\x6b\x06\xe7\x60\x36\xa6\xb4\x6f\x05\xdd\xfb\xd7\x59\xfa\x10\xa1\x41\xa0\xb4\xc8\xef\x7a\xab\x0c\xf4\xdd\x71\x13\x0d\x82\xb3\xe9\xd9\xb4\x29\xff\x64\xef\xf5\xa7\xfa\xc8\x94\x6e\x3b\xfc\x60\x8c\x06\x01\x3a\xcd\x6a\x18\x19\x25\xf4\xb5\xdf\x51\x8b\x8c\xcf\xa6\x0d\x3c\x80\xff\x68\x74\xd6\x38\xdb\x50\x58\xcf\xce\xd2\x87\x1f\x65\xfa\x2f\x7b\x64\x71\x0f\x56\x1a\xa9\x02\xa7\x1f\x43\xa9\xfc\xf3\xb3\x08\xdd\x8a\x6d\x6a\xf6\xe4\x8b\xa0\x23\xa3\x94\xdb\x1c\x0e\x9b\x47\x47\x0e\xd9\xcb\x91\x6e\xe6\x1d\xb8\x37\xd6\xba\xbb\x79\x26\x68\xcf\x5a\x86\x67\xcf\x9e\x3d\x6b\x8e\xde\x8f\xdf\xbf\x6f\x1e\xe7\x59\x4c\xd7\xaf\xe5\x28\xa7\xef\x91\x5d\x2f\xaf\xe2\xa8\x54\xc1\x5d\x7b\x65\xd7\x5e\xaa\xda\x2e\xf6\xe1\xc3\x70\x68\xa3\xef\xb9\x45\x39\x9d\x72\x36\xbd\xdb\x5f\xe5\x78\x00\x1a\x39\x9e\xef\x8b\x9a\xf2\x44\x3b\xcd\x5f\xd9\x95\xe5\x28\xf6\x57\x7b\xe3\x31\xb9\x84\x6e\x7c\xfe\x5c\x89\x6f\x5a\x27\x27\x27\x27\x90\x7c\x36\x0d\xf2\x3f\x67\xad\xb3\x69\x03\xe0\x9b\x7c\xa4\x32\x1f\x59\xcf\xb6\x91\xa3\x48\xb5\x93\x74\xec\x62\x51\x46\x20\xff\x6f\x55\x2f\xf3\x90\x8a\x3c\xa4\x9c\x65\x2d\x35\x4f\xb1\xe2\x75\x9c\x8e\x91\x5d\x71\x01\xb3\x7f\x6f\x20\xc9\xd0\x19\x42\x67\xcd\x81\x9c\xaa\x7b\x51\x21\xcb\x38\x17\x95\x1c\x09\xd8\x73\x93\x25\x9d\x8a\x16\xfb\xca\x26\x28\xc5\x59\xb6\xc8\xbf\x25\xb7\xb2\x54\xe7\x03\xa0\x09\x51\x1a\x83\xcf\x04\x30\x45\xfa\x22\xd6\x6d\x91\xa2\x19\xfa\x22\x46\x62\x3c\xf2\xc6\x0a\xc2\x72\x24\x4f\x0a\x77\x11\x55\xd1\xee\x18\xcc\x60\x77\xa9\x0e\xfb\xe3\x1d\xe0\xf0\x57\xf9\xe9\x30\xc2\x96\xeb\x1a\x64\xb9\x81\xd8\xf5\x14\x32\xa3\xf6\xd8\x9c\x57\x24\x0e\x97\x55\x38\x5c\xae\xe1\xd0\x96\x38\xc4\x14\x2d\x47\xfe\x38\xcb\x9c\x9a\x83\x1b\x97\x1a\x9f\xf5\xfa\xe3\x7b\xea\x5f\xc1\xf1\xcb\xd8\xc1\xdf\x97\x53\x61\xda\x19\xc3\x59\x68\xf7\x56\x18\x44\x3a\x63\x7c\x5f\xa9\x90\x3a\x1f\x9d\x15\x78\x56\x88\x1a\x28\xce\x32\xc7\xc1\x0d\x14\xc2\x2f\x39\x11\xb9\xf2\x52\xa9\x18\x90\xe4\x1b\x39\xfc\x92\x7c\x0d\x63\x9e\x9d\x2e\x59\xf6\x9e\x4d\xb3\xd3\xab\x65\xf6\x34\x89\xb2\x93\x50\x64\x27\x4b\x8e\xc9\xe0\x2c\xc5\x03\xa4\x25\x87\xf8\x2c\x45\xbf\x87\x3c\x7b\xca\x2e\xb2\x61\x98\x64\x8f\xaf\x93\x6c\x18\xde\x66\xbf\x2f\x79\xf6\xfb\x72\x9e\x3d\x5e\x5e\x66\x27\xec\x3a\x7b\x3d\x11\xd9\xab\xf8\x4b\x76\xc4\x26\xb2\x88\x5c\x93\xa4\xb3\x52\x9f\x67\x53\x1c\xa8\x1f\x49\xde\xd4\x17\x1e\x9c\xa5\x12\x93\x77\xa7\xd9\xb3\xe1\x69\x36\x3a\x7e\x32\x7c\x33\x1e\x9d\x1c\x8d\x4f\x71\x86\x46\x1f\xbf\x8d\xe5\x8f\xa2\x15\x9d\x15\xc6\xbf\xec\x01\x73\x79\x2c\xe8\xdd\xbb\xd3\xc0\x25\xcf\x86\xf2\xef\xf1\xd1\x69\xd0\xf4\x3b\x2e\x39\x3e\x39\x0d\x9a\x6d\xd7\x25\x4f\x8e\xcc\x07\xc4\xf4\x5c\x32\x3c\x32\x1f\x32\xa6\xe3\xbb\xe4\xcd\x91\xf9\x80\x98\x7d\xd7\x12\xe5\x7d\x5d\x9f\xfe\xf4\x46\x0f\x8b\xec\x4d\xcb\x74\x07\x8d\xfe\x85\xc7\x0f\xcf\x70\x36\x3a\xe3\x67\x02\xac\x68\x6a\xb6\x6d\x0f\x3a\x4b\xcf\xd2\x06\xde\x88\xff\x97\x8c\x7f\xb8\xb7\x66\x08\x24\xe3\x7e\xd9\x53\x2a\x87\xd1\x0c\x19\x35\x2f\x5a\xc5\xb1\x18\xc7\xbc\xa3\x8d\x23\xc4\x9a\x3d\x42\xae\x92\x76\x48\x3b\x07\x03\x9f\xb5\x1b\x22\x10\x60\x62\x02\x26\x07\x32\x04\xcc\xe9\xab\x5c\x77\x1c\x09\x4c\x72\x18\x5c\xc2\x28\x82\x49\x39\x18\xc9\x60\x61\xa7\x57\xaf\xeb\x6b\xf9\x3c\x43\x2c\x33\x60\x12\xae\x50\x34\xea\x48\xf6\xb6\x2d\xff\xf8\xf2\x4f\x57\xfe\xe9\xc9\x3f\xfd\x31\xb4\x97\xd3\x98\x24\x94\x11\x24\x68\x24\x49\x41\xbd\xfe\xc1\xc6\x49\x9e\x8b\xf3\x13\x9d\xa4\x0e\x7c\xe4\xc9\x3f\xfe\x18\xe7\x8c\x10\xb0\x23\x49\x15\x3b\x42\x76\x51\x52\x5a\x40\x66\x71\xed\x48\x86\x87\xc6\x44\xfb\x14\x59\xbf\x21\x89\x66\x28\x17\xaa\x1c\x0b\xed\xde\x30\x17\x26\xba\xda\x9f\xf7\x5a\x77\x45\x34\x79\xe0\xb9\xc6\x6b\x02\x4a\x9a\x11\xde\xf3\x5c\xf7\x61\xcf\x6d\x44\xb2\x27\xf6\x65\xab\x0f\xe4\x1f\xcf\x1d\x6b\x26\xf5\x5b\xc9\xbd\x98\x44\x4a\x25\xfc\x0c\x23\x07\x64\x57\x3b\x38\xa2\xbb\x6e\x15\x01\x28\x8c\x97\x84\xf6\x6c\x24\x49\x88\xec\xdb\xd6\x8b\x93\xd7\xe7\xfb\x3d\xd7\xc3\x76\xe4\xdb\xa7\x4f\xce\x25\x38\x7c\x07\xfd\x34\x1a\xab\x4a\xc0\x1d\x11\xdd\x55\xed\x17\xf6\x99\x95\x4c\xc8\x8c\x3a\x4e\x03\xb6\x8a\x6b\x3a\x33\x12\xa1\xa9\xf6\x95\x11\xd1\xf7\x00\x9d\xe4\x47\x47\x9c\x9b\xae\x66\xd9\x68\xac\x4f\x1b\x91\xed\x03\x36\x86\xa3\x05\x41\x09\x45\x33\x9d\x79\xce\x50\x4c\x18\x86\x22\x78\xe4\x82\x49\xbe\x7b\x88\x42\x3a\x2b\x2e\xab\x66\xf9\xec\x49\x70\x2e\x9a\xaa\xd7\xa1\x01\x96\x73\x2a\xe3\x60\x9a\xcc\x64\x61\x90\x42\xd9\x25\x1b\xb9\x8b\x6b\x32\x6d\x14\xfe\xae\xc9\x6f\xa3\x78\x3c\x40\xc9\xc0\xee\x0f\x2f\xb0\x80\x6b\x6f\x47\x46\x27\x25\xa5\x31\x99\xe4\x72\x65\xb4\xa4\xf2\x00\x37\x47\x33\x46\x52\x5c\xaf\xcf\xd8\x28\x1d\xa3\x25\x99\xb4\xce\x43\x32\x21\xa9\x32\x47\x31\xfe\x95\xe4\x4e\xb2\x15\xf2\x0e\xa4\x94\xdc\x2e\xd1\xeb\xe6\x94\xb8\x87\xb3\xef\xb4\x79\x86\xf3\xc3\xd2\x21\xf5\xfc\x7a\x7d\xd7\x35\x02\x30\x7d\x33\x29\x8f\x40\xc5\x91\x0c\xd9\x49\xfa\x7d\x01\x3d\xeb\xd6\xfc\x5e\xc1\xe9\xcc\x88\xf4\x74\x96\xe2\x76\xb8\xb8\x29\x2e\x0e\x6b\x95\x57\x93\x3b\x25\xc7\x63\x7c\x20\x02\x73\xd2\x31\x00\x24\x26\x83\x72\x10\x94\xdf\x83\xdc\x3f\x4e\x94\xbe\x19\xd6\xeb\x08\x25\xfa\x5b\xf9\x0a\x10\x87\xb2\xbd\x48\x34\xa8\xe7\x63\x92\x64\x99\xe7\xef\x52\x2a\xb2\x4c\xf2\x0a\x18\x14\x3c\x0a\x67\x3f\x39\x96\xc4\x42\x1d\x13\x90\x4a\x91\x59\xb1\xd7\xc2\xbe\xa1\x04\xe3\xc0\x41\x15\xab\xed\xb5\xb5\xa3\xcc\xc9\x8c\x2c\xc8\x17\xc5\x4c\x9d\xcb\x9f\x99\xf5\x6e\x83\x76\x2f\x94\x7f\x65\xd9\x04\xe4\x03\x73\x75\xca\xa3\x94\x7e\x31\x2e\xc5\x29\xa5\xe7\xf5\xba\xe3\xc8\xb8\xc1\x14\xdd\x59\x5e\xd4\xdc\x15\x0e\x36\x2d\x17\xbe\xa8\xf3\x5d\x44\xbf\x58\x82\x9b\xeb\x84\xc1\xe0\xa1\x2f\x18\x93\x0b\xf4\x05\x83\x1f\xd8\x4b\x34\x13\x32\x26\x40\xa9\x8c\x02\x12\xf5\x25\x48\xd0\x39\x1e\x6c\x15\x5a\xed\x68\x9f\xf0\xb2\x45\x66\x99\xe8\x86\x29\x86\xd0\xf6\x39\xa6\x4f\xea\x6b\xfe\x88\x34\x89\x70\x1f\x45\x87\x16\x14\xf0\x44\x1f\x53\xc9\x4b\xde\x2a\x7f\x20\xc5\x89\x57\x1d\x90\xe5\x50\x9a\xef\x22\x16\x13\x21\xf9\x23\x09\x69\x14\x8d\x25\x57\x24\xb7\x36\x65\x9a\x1a\x37\xc0\xc3\x53\x79\xdd\x90\xb8\x41\x3d\xf7\xa1\x72\xff\xb5\xe9\xb2\x8c\x40\x42\x3a\x89\x13\x46\x63\xa2\xb9\xc0\x24\xcb\xe2\xc3\x44\x59\xbb\xc6\x84\x53\x81\xf1\xce\x04\x31\xc2\xb3\x0c\x26\x11\x0e\xce\x07\x40\x6c\x83\x18\xcd\x41\x90\x87\x5b\xe7\x11\x1e\x88\xb2\x37\x27\x2d\xa3\x0c\x52\x34\x5f\x4f\x9b\x1b\x47\x7e\x32\x7d\x63\x50\xe7\x03\x34\xa3\xc2\x4c\x0e\xb4\xa0\x17\x9a\x57\x99\xc9\x6a\xf0\x00\x9d\x0b\xb9\xd0\xc1\xa3\xd0\x2c\xdf\x0b\xea\x75\xa4\x6f\xc2\x8a\x38\xf2\xf5\x87\x73\x72\xfd\xec\xc8\xd3\x24\x5e\xc0\x94\x7b\xaa\x7d\xba\xa3\x19\xc6\x18\x07\xb3\x52\x03\x1a\x0b\x60\xed\x83\x44\xb6\x4d\x0e\x54\x48\x97\x68\x5e\x90\x87\x0a\x9d\xdb\x0d\xa3\xca\x6b\x30\xb3\x09\x22\x09\xc2\xce\x5f\x96\x00\x0b\xfa\x37\xcc\x70\xac\xb6\xf5\x25\x1a\x09\x25\x99\xd3\x86\x57\x44\xb4\xa6\xe1\x6d\x96\x09\x30\xb0\x21\x02\x94\x85\x64\x22\xec\xa5\x44\x68\xcd\x20\x88\x99\xcf\x23\x15\x1a\x57\x21\xc8\xea\xf5\x2a\x1c\x19\x06\x67\x05\x41\x58\x31\x8c\x38\xd8\xde\x6d\x30\x31\x8d\x8b\xb1\x29\xc8\xca\x30\x38\xae\xce\x49\x48\xee\xa6\xb1\x90\x56\x91\x25\xbd\x33\xde\xb1\x77\xe1\xe2\xa0\x5e\x87\x13\x13\xcf\x32\x14\x53\x2e\xcf\x5d\x9a\x48\xa3\x08\x31\x5c\x16\x38\x47\x33\xa4\xdd\xc7\x5c\x32\x61\x39\xb0\x7c\x15\x2e\x58\x9a\x73\x38\x85\xf7\x9e\x8a\x5c\x72\x55\x6b\x9f\x28\x96\x91\xa1\xf2\xcf\x02\x5c\xc4\xda\xab\x29\x85\xd7\x3a\x2f\x47\x7b\x05\xcd\x4e\x00\x3d\xd7\xb2\xe2\x05\x67\x96\x39\xfe\xcb\x4d\x47\x74\xbb\x2e\xc9\xc5\xf9\x74\x69\xbc\xbe\x85\x32\x72\x4e\x39\x94\xa0\x4c\xfe\xc8\xe5\xb1\xcc\x7d\xca\xc5\x44\x0b\xf4\x80\xc4\xbd\x16\x68\x29\x67\xac\x2d\x02\x4b\x5b\xe1\x74\x8a\x3c\xa5\x9d\x9d\x16\xb2\x45\x83\x4b\x5a\x0c\xca\x27\x71\xaf\x3b\x4d\x0f\xaf\xb6\x0e\x39\x3d\x41\xca\x71\x67\xed\x3a\x89\xbf\x44\x53\x36\xad\x45\x29\x5c\x7a\x47\xbc\x16\xd6\x12\x36\x89\x2f\x79\xf4\x8d\x4d\x6b\x6f\x9f\x3e\x91\x2c\x58\x2d\x4e\x6a\x2f\x4e\x5e\xd7\x66\x40\x3f\xcd\x85\x31\x5c\xac\x8b\x64\xa9\xaf\xb7\xc2\xf9\x3c\xad\x49\xf0\x35\x11\xd7\xfe\x4e\xd5\xcc\xc3\xa4\x76\x73\x15\x4d\xae\x4c\x05\x09\x9b\x47\xe1\xc5\x9c\xd5\xc2\x49\x12\xa7\x69\x2d\x9c\xcf\x6b\x17\x49\x7c\x93\xb2\x24\xad\x85\x7c\x5a\xfb\xc2\x92\x34\x8a\x79\xda\xaa\xbd\x8a\xb9\xa9\x7f\x4f\x56\x2e\x97\x8d\xc6\x20\xad\x85\x09\xab\x4d\xa3\x74\x12\x2f\x93\xf0\x92\x4d\xa1\xe8\x4d\x24\x81\xb1\x5a\xc2\x16\xf1\x17\xd9\x26\x5e\x0b\x79\x6d\x79\x3d\x89\x17\x11\xbf\xac\x2d\xc2\xbf\xe3\x44\x22\xc0\xc2\x94\xb5\x6a\x6f\xe0\xb7\x96\xb0\x19\x4b\x24\xc6\x3f\x76\x55\xfd\x77\xda\x94\x78\x6c\x5c\x52\x97\xd6\x69\x79\x73\x91\x44\xa1\x61\x09\x82\x9d\x9a\x31\x9a\x53\x16\xdb\x86\xf9\xb5\xdd\xbd\xac\x48\xc1\xff\x96\xe2\x61\xb2\x0f\x85\x1c\x41\x85\x29\xc2\x92\x82\xc8\xee\x35\x6e\x9b\xd8\x94\xd4\x2c\xdd\x80\x45\xf8\xd5\xb8\x73\x6f\xfd\x60\x23\x17\x11\x6f\x2e\xc2\xaf\x7b\xce\xa6\xd7\x80\x4f\xa2\xda\xfe\xa8\xf4\x6e\x86\x65\x5e\x5d\x32\xd9\x06\xf3\xdf\x81\xfc\x13\xb0\x60\x0a\xce\x73\x4e\xd7\x9a\x22\x91\xdd\xde\x94\x88\xff\x3f\xd2\x14\x99\x76\xc8\x4a\x4d\x29\xce\xf0\x4f\x6c\xc5\x15\xe5\xe4\x12\xee\x27\x73\x96\x38\x41\x42\x9f\x1b\x04\x85\x2f\x92\x3f\x96\x64\x88\xdf\x27\x81\xb4\x3b\x30\xc8\x41\x22\xea\x3d\x8a\x8a\x87\x1e\x1a\x8d\x08\x8b\x51\x34\x2e\x59\xb2\xcb\x88\x11\x1b\x23\xae\xfd\xed\x8f\xa2\xb1\xe5\x66\x0b\x8c\x69\x05\x1d\x19\x4f\x0a\x9f\x97\x61\x22\x58\x02\x0f\x3d\x29\xf3\x64\x6d\xd5\xa3\x2c\x3f\xb4\xfe\xa9\x51\xb2\x72\xd4\x7e\x04\x31\xf9\xee\x64\xbf\x0d\xf5\xc6\x52\x24\xfa\x1b\xae\x9c\xa8\xda\xff\xb2\xcc\x05\x2f\xb5\xba\x3e\x19\x8c\xa8\xde\x13\x65\x20\xa6\xca\x0e\x43\xee\x8c\xda\x96\x44\x46\x87\x54\xef\x97\x2e\x49\xa9\xda\x2c\xe5\xf7\x92\x9a\x1d\x53\x86\xe6\xd4\x6c\x9b\x32\x34\xa1\xa5\xbd\x33\xcb\x5c\xad\x0d\x6f\x0e\xa1\x95\xca\x06\xf9\x96\x01\x97\xc8\xaf\xb5\xa1\xdf\x5b\x41\x04\xce\x9d\x4a\x8e\xc4\xb8\x5e\xd7\x96\xf6\x23\x31\xb6\xb6\x92\xe2\xb5\xa3\x5d\x4f\xfb\x50\x7d\x6b\x8d\x52\x02\x7b\xd1\xe8\xad\x18\x25\x63\x25\x66\xe3\x45\x59\xd8\xc4\x9f\xce\x63\x50\x56\xd0\x59\xc0\x4f\x63\x1e\x02\x37\x92\xbb\xae\x79\x52\x44\xee\x58\x22\x37\x86\x2c\x5a\x9a\xd2\xc6\xa4\xe1\xb1\xf6\xc3\x79\xa3\xc7\x3a\x0f\x97\xf0\x9d\x3e\xec\xc9\x63\xbf\xf1\xde\x19\xde\xa6\xb4\x11\x36\xfa\x0f\xe3\x92\x31\x25\x6d\x44\x8d\xf6\xc3\xa4\xe1\xf9\x0f\x79\x9e\x55\x84\xf4\x4e\xbf\xc7\x65\x0e\x05\x93\xfc\xe9\x99\xf3\x8b\xe5\xc5\xc5\xbc\xe4\xef\xe8\x95\xd8\xe6\x9d\xef\x8d\x65\x8e\xf8\xb7\x58\x73\xbb\xd9\xf4\x1e\x82\x95\x5e\x12\x2f\xf9\x14\x35\xbd\x87\x0c\x07\x56\x84\x7d\x88\x79\x21\xb6\x6a\xd3\x5b\xde\x4c\x96\x62\xa2\x8d\x88\xe5\xf4\x73\x1a\x4e\x71\xa7\xe6\xc2\x96\xde\x64\x32\xbe\xe9\x60\xc2\x1b\x2f\xd1\x7f\xff\x37\x62\x7b\x3d\x17\xb4\xb3\x05\x84\xd9\x83\x9e\x0b\x7a\xd9\xab\x17\x02\x39\x1f\x1d\xe2\x04\x0e\x26\xf0\xfd\x11\x7c\xe7\x80\xf6\xf3\x47\x87\xc4\xda\xdf\xc8\x47\xfd\x0d\x1a\xc7\x32\xcb\xc7\x8f\xd5\x9a\xcb\x9a\x57\x00\x3f\xa7\x20\xed\x79\x29\x50\xcc\x48\x6e\xc7\x73\x24\xe8\x9e\xbe\xab\x51\xb7\x3c\x7b\x97\x96\x50\xfc\xa5\x4d\x51\x28\x12\x20\x6a\xd5\xe2\x08\x86\x77\x0a\x5d\x33\x33\xbb\x6a\xb9\x7a\x59\x42\x11\xe2\x23\x9e\xbf\x63\x37\x06\xb1\x45\xa3\x28\x7f\x24\xe7\xf9\xc8\x69\x82\x6a\xbb\x24\x34\x3d\xf7\x61\x32\xf2\xc6\x8d\x1b\x94\x8c\xfc\x82\x82\x48\x06\x29\x1a\xb8\x81\xd3\x80\xc7\x5a\x46\xee\x78\x10\x05\x4d\xeb\x75\xb0\xa7\x16\x92\x09\x89\x8a\xa7\x53\xb4\xad\x38\x02\x5f\xd5\xf3\x98\x33\xf5\x04\xdd\x05\x70\x5f\x92\x91\x1b\xb0\xe2\x98\x11\x48\xbe\x06\x5b\xc7\x8e\x66\x52\x04\x48\xa2\xc5\x52\xe0\x6e\x16\x02\x79\x5a\x23\xda\x30\x25\x07\x36\x88\x24\x06\x26\x4c\x65\x7b\xde\x7e\xb3\x67\xa4\xd7\x7d\xd8\xb4\x67\x9f\xe5\xd8\xf6\x5b\xcc\x0d\x48\xbc\xe7\x75\x2d\x08\xcf\x45\x6e\x03\xb0\xbb\xbb\xbe\x61\x18\xe2\x03\x87\x44\xd7\x3c\xf1\xa3\xdd\xfe\xae\xca\xb8\x6e\x6e\xf2\xbf\x81\xac\xfc\xac\x99\x9d\x35\xf0\x00\x0d\x02\x74\x36\x7d\x88\x47\xad\xda\x18\x64\xe3\x0d\x7c\x16\xc0\x0f\x1a\x04\xe6\xeb\xac\x25\xb3\xa8\x5b\xbd\x77\x50\x5a\x15\x7e\x23\x4b\x8f\x9a\x8d\xf1\x60\xe4\x36\x0f\x48\x6b\xfc\x10\x7f\x50\x20\xcb\x91\xc3\xaa\xc8\xf7\x55\x91\x47\x10\x79\xba\x99\xf0\xfc\x87\xe1\x9e\x28\x44\x8b\x39\xfe\x59\xac\x39\x87\x26\x60\x0e\xac\xb4\x52\x8d\x4b\x13\x39\x60\x83\x98\xde\x2d\xd2\x80\x95\x49\x20\x99\x06\x4a\xd9\x20\x25\x43\x48\x03\xf2\xb6\x0a\x42\x6d\x69\x2c\x09\xda\x00\x2c\xde\x59\x10\xb7\x4a\xc4\x93\x61\x50\xaf\x30\x72\x76\x79\x70\x05\x2a\x41\x29\x4d\x47\xde\x78\xd0\xf4\x02\x8f\xc4\xf4\xee\x36\x70\xc9\x34\xb8\x41\xe9\xe8\x96\x8d\xf1\x43\x4e\xae\x20\xf0\x45\x05\x16\x10\xb8\x54\x81\x14\x02\x17\x3a\x45\x86\xfe\x16\x08\xa8\x32\xe8\x57\xe1\x87\x7c\x05\x95\xbe\xfb\x81\x4a\xdf\x0b\x94\x8e\xfc\x31\xe1\x98\x0c\x55\xa0\x0d\x81\x1b\x15\xe8\x40\x60\xaa\x02\x5d\x08\x5c\xa9\x40\x0f\x02\x0b\x15\xe8\x43\x20\x55\x81\x7d\x19\x58\x29\x6d\x16\x4a\x63\xd9\xa3\xab\x60\xc3\xc5\x6d\x5c\xaf\x23\x67\x96\xc4\x0b\x27\xe2\xb5\x38\xcb\x1c\x11\xc3\x17\x2e\x3b\x45\xac\x50\xd2\x2d\xad\x82\xb2\x93\xc1\xa7\x02\xbc\xec\x11\x99\xe7\x37\x36\x8b\x13\x86\x04\x1e\x70\xfa\xa7\x1a\xfe\x00\x21\xf8\x86\xa7\x93\xca\xc3\xd4\xe4\xa5\x30\xe1\xda\x5f\x02\x24\xc0\x17\x26\x1c\x07\x77\x76\xa6\xc0\x35\x8a\xda\xee\x6a\x85\x3e\x09\x14\xb7\x64\x83\x30\x81\x4f\x11\x63\x4c\x60\x6e\xe0\xd6\x22\xa5\x51\x19\x7e\xdc\x1a\xca\x28\x0d\x39\x01\x86\xfe\x8d\x40\x31\x26\x30\x0d\xeb\x75\x78\x62\x47\x6f\x90\xf0\x00\x42\xb2\x29\x43\xc3\xc4\xd2\x0d\x7e\x5f\x22\xe3\xe6\x18\xaf\x39\x80\x42\x4d\x9b\x38\xc4\x69\x39\xb9\x49\x3f\x32\x1e\x8a\x06\x6e\xc0\xf1\x43\x6b\x47\xfd\xb3\x04\x2f\x3f\x8f\xd7\xf2\x9e\x11\xc6\x27\x4e\x93\x15\xde\x71\xfc\x87\x48\x18\x23\xf7\xdc\xbd\x11\x61\x86\x34\xc3\x09\xd4\x40\x00\x9f\x35\xad\x28\x7d\x3c\x13\x2c\x01\xe9\x55\x33\xef\x6d\x52\x1e\x0f\xda\x10\xcd\xc6\x3d\x50\x6c\x47\xd8\x1f\x44\xb5\x07\xa9\xc2\xb0\xb6\x2c\x7e\xa5\x89\x71\x6f\xd4\x48\x24\x73\xfb\x09\x09\x52\x1c\x1a\xe0\xe5\x4b\x74\xcd\x92\x28\x9e\x92\x9a\x7a\x2c\x04\x97\x8f\x11\xf9\x71\xaf\x38\x4d\xe4\x05\x55\x01\x52\x53\x00\x70\xeb\x27\x14\x97\xc3\xe9\xb4\x19\xf1\x2f\x2c\x11\x6c\xda\xbc\x0e\x93\x70\x51\xa1\xbd\x1c\x81\x34\x24\x21\x09\x8d\x30\x79\xa6\xad\xbf\x3f\x0b\xb9\xdc\xd7\x05\x6a\x7c\xd0\xe0\x81\xec\x04\xe3\x76\xdd\xf2\x13\xf0\x4c\x1d\xee\x0b\x1f\x0c\x54\xac\x51\xc0\x90\xfe\x2d\x90\x50\x44\x10\x93\x54\x87\xf4\x04\xde\x29\x2d\x4a\x14\x69\x9d\xa8\x28\xcb\x22\x92\xd6\xeb\xe0\x94\x06\xdc\x6d\x19\x47\x2b\x8d\xf4\x61\x82\x49\x58\xaf\x83\xe3\x2c\xe7\x08\x6c\x3e\x86\xc5\x37\x6e\x84\x32\x43\x5c\x28\xfd\xc0\xa6\xcc\xca\x9b\x72\x2c\xf3\x44\xf5\xfa\xda\xce\xcc\x48\x98\x65\x29\xc6\xab\xcf\xa2\x35\xe3\xf4\x8d\xe5\xa0\x99\x7c\x16\x46\x5c\x5b\xe1\x00\xf5\xb3\x00\x61\xad\xda\x22\xff\x29\xe8\x07\x81\x3c\xe2\x84\xd3\xa9\x83\xc9\x2f\x10\x6c\x7a\xc4\x49\x97\x17\x22\x09\x27\xc2\x76\xbb\xf3\x47\x69\xb1\x54\xaf\x82\x06\xaa\x58\x31\x72\xed\xaf\xcd\x6b\x7d\x66\x4a\x73\xaf\xa3\x4d\xc4\x1b\x48\x34\x93\x43\x77\x20\x7f\xf0\x1e\x4a\x9a\x6b\x65\x24\x5e\xa6\x14\x0e\x74\xae\xb5\x3c\x0d\x2b\x4f\x33\xc1\x18\x67\x99\xe5\x93\xf8\x2f\x4b\x4b\xdb\xba\x9e\x57\x2f\xe7\x0c\x6c\x76\x5d\x69\x65\x07\x85\x06\x27\x28\x78\x63\xf3\x78\x62\xfe\x90\x80\x76\xb2\xb3\xe2\xe6\x79\x3b\x2d\x20\xb7\x94\x79\x4e\x8d\xa2\xc9\x47\x87\xac\x65\x7b\x27\x26\x95\x39\x47\x1f\xc7\xea\x39\xa3\x8f\xe5\xc3\xfd\x3c\xe4\x97\x68\x63\x61\xbe\x50\x07\x7a\x52\x5e\x9a\xb6\x5d\x6c\x4d\xc4\x35\xb0\xbd\xb8\x62\x35\x09\x63\x19\x5e\x32\x6d\x93\xb0\x4c\xc0\x4d\x75\xab\xf6\x6e\xb3\x30\xb2\xcd\x1e\x4c\xb9\x74\x4d\x54\xb3\xa5\x1f\xed\xea\x03\x2b\x46\x19\xde\x17\x46\xbe\x62\xcd\x30\x56\xf7\x2c\x1c\xb6\x99\x9c\x65\x3d\xdf\xef\xef\xbb\xfb\xcc\xf2\x02\x2b\x4a\x5e\x08\x10\x7b\x20\x1a\x02\x3f\xb0\xc8\x3a\xe7\x6b\x2a\xca\xb6\x4a\xe0\xa6\x3e\x20\x6e\x32\x1e\x94\x75\xfb\x2c\xfe\xd9\x7a\x23\xea\x3e\xb0\xc6\xbb\xcc\x1a\xd8\x22\x1a\xa2\xac\xe7\x9b\xb8\x39\x90\xb9\x64\xc4\x88\x91\x9c\x8e\x89\x5b\x7a\x7d\x28\xe4\x1b\xae\x63\xca\x94\x9d\x0d\xde\x69\x07\x4f\x32\x07\xac\xc3\x00\xa1\x98\x7e\x36\x7e\x64\xf0\xa1\xd2\xeb\x8e\x71\xa5\x27\x52\x45\x09\x4b\x1e\x6a\x48\x48\xbf\x31\x14\x2b\xe1\xbb\x4b\x62\x4b\x17\x76\x67\xc3\x65\x65\xb8\xe9\x8e\x87\x58\xce\xe4\xc2\xb2\xa2\xaa\x4e\x03\x0f\x59\xe1\xba\xaa\xaa\x24\xd7\xd6\x6b\x29\x05\x42\x78\xa5\xbc\x5b\x5e\x5e\xde\x6f\x55\x7d\xc3\xd8\xa7\x0f\x9b\x7e\x34\x9f\x3d\xbb\xbf\x98\x16\x9a\x94\x4a\xc6\x1c\x39\x97\x97\xb2\x42\xc7\x40\x75\x8a\xd8\x8a\xe8\x67\xcf\x64\x35\x8e\x05\xcb\x4a\xd8\x4c\xd1\x8e\x43\x94\x73\x48\xd9\x30\xdb\x75\x88\x8e\x7d\xf6\xac\xf0\x06\xf3\xc1\xf8\xeb\x3c\x5a\xcb\xa5\x1d\x86\x3c\x2b\x5c\x78\x5e\x16\x9f\xb2\xe2\xdc\x32\x59\x62\x9d\x07\x14\x52\x85\x6b\x4f\xd5\xa8\x22\xac\xb1\x2e\x5c\x7d\xea\x66\xab\x08\xf0\xb3\xa1\xfb\xc1\xf4\x87\x6e\xa6\x2a\xf8\x5d\x2f\x33\x7e\xe1\x65\x46\x03\x53\x0d\x5e\x2b\x08\x53\x54\x8c\xa2\x7b\xbc\x7b\xbe\x43\xce\x1f\xe0\xa4\xe6\x8f\xd8\x12\xca\x41\x77\x16\x12\xba\x3f\x54\x4f\xe6\x11\x7d\xd5\xa8\x3f\x1c\xf2\xa7\x32\xb2\xfd\x63\xd3\x3f\xe8\x82\x8d\x69\xfb\x21\x52\x1e\xfc\x74\x4d\x47\x0e\x19\x39\x47\x47\xca\xad\xcf\x91\xf2\x8a\x23\x98\xf1\x0a\x03\x72\xbe\x23\xe3\xf1\x45\x86\x0e\x54\x3d\x47\xb9\x15\xb9\x2c\x9b\x0f\xc2\x51\xbc\xc5\xb1\x0a\x1b\x08\xad\xf7\xbd\x61\x11\x9a\x65\xa2\x75\x1e\xdb\x26\xa2\x5b\xb3\xbe\x64\x3c\x62\x5c\x18\x7b\xee\x23\x89\xdc\x91\x33\x26\xb7\xda\x23\xeb\x66\xf5\x02\x74\xc8\x6f\x90\xf1\x48\xfe\x07\xa8\x67\x68\x09\x4b\xca\xc1\x0c\x58\xf1\x31\xbb\x2e\xde\x91\xfd\x71\xa4\x7b\x44\xfe\xb6\x65\x9f\x1c\xe9\x5e\xd1\x14\x23\x77\x98\xa3\x83\x90\x23\xf7\x89\x63\x22\x3b\xa6\x73\x8e\x1c\xf2\x7b\xfe\x7d\xe4\x90\x67\x06\xf7\x23\x85\x3d\xe0\x5f\x21\x1d\x2a\x34\xf7\x0b\xd7\x45\x0b\x78\x0d\x73\x61\xdc\x36\x68\x41\xac\xf2\x27\x69\x84\xb2\x0b\xed\x50\x52\x87\x3d\x8d\xc8\x22\x1f\x2f\x59\x1e\xc6\x0b\xd0\x58\xc8\x22\x0b\x67\x4c\x2e\x99\xea\x93\xa5\xea\x93\xa1\x31\x9d\xdd\xf5\xa0\x5b\x52\x59\x75\x9a\x9a\xaa\xb5\xb0\x17\xaa\xce\xc5\xc0\xa9\xaa\xda\x84\x3d\xed\xde\x29\xcd\xab\x96\xe5\x8b\xaa\x53\x59\x24\x75\xc6\xe4\x42\x57\x3d\xe7\x64\xa2\x6a\x3f\x31\x56\xbd\xb2\xf6\x59\x9c\xa0\x77\xc8\x39\xd9\xe2\x68\xe1\xbf\xff\xdb\x78\x56\xc8\xf9\x5e\x04\x0a\x4e\x38\x27\x97\x27\x27\xdb\xc8\xe5\xb6\xc2\x76\xd9\x13\x98\x07\x6e\x59\xcc\x6d\x25\x9f\x68\x8f\xc6\x9b\xb4\xd8\x73\x1f\x6e\x42\xb7\x21\xcb\xb2\xdd\x6d\x65\xbf\x5f\xf8\xc4\x21\xbd\x2d\xa5\x59\xfb\xfb\xa5\x4f\x1c\xd2\xdf\x56\xbc\xf3\x03\xc5\x4f\x1c\xb2\xbf\xad\x7c\xf7\x47\xca\x9f\x38\xe4\x60\x1b\x80\x5e\x35\x00\x98\xea\xc5\x30\x10\x67\x91\x9a\x09\x6f\xc5\x7a\x3d\x35\xe1\x4e\x1c\xf2\xbb\xa4\x87\xf0\x0d\x81\x0f\x26\x00\xa1\x67\x98\xcc\x39\x55\x83\xf8\x68\x6e\x24\xa2\x87\xf4\xe0\xd1\x9c\x37\xa8\x73\xe2\xe0\x25\x43\x73\x4e\x38\xb3\x38\xbc\x59\x4e\x5a\xce\x81\xb4\xc8\xbe\x46\x8e\xdb\x72\x1a\x70\x43\x1e\x27\x08\x60\x6e\x01\x78\x05\x00\x67\x5c\x4d\xf9\x2b\xb3\xda\x8a\x33\x5b\xbe\xe4\xbe\x69\x5f\x5d\xdf\x62\xce\x1e\x5f\x5c\x68\x0f\x2d\xdf\xec\xe8\x57\xe1\x82\x39\x0a\xd2\x35\xa7\x97\xc5\x89\xa9\xc0\x76\x5a\x52\x13\x58\x5d\x73\x79\xac\xa0\xff\x14\xe4\x9a\xb7\x8c\xc3\x83\x0a\xc1\x4d\x42\x59\x96\x81\xc9\x54\x44\x9f\x0a\xfd\xc6\x36\xbc\x08\x94\x88\xd7\x33\xa4\x5d\xa7\xc5\xb4\x00\xa2\xdf\x2c\x00\x46\x27\xc2\x59\xe6\x18\xf7\x05\x0e\x09\xc1\x10\x6f\x88\xc4\x28\x1e\xe3\x81\xfc\x6b\x31\x45\x09\x0e\x20\xbe\xc4\x88\xa9\x3b\x5d\x14\x66\xd9\xa6\x4b\x1c\x53\x21\x52\xd7\x16\xe4\x93\x00\x8d\xba\x15\xb4\x48\x1e\x9d\x2a\xce\x88\xea\x86\x5d\x9d\x6c\x64\xbe\x69\x34\x9b\x55\x2b\x79\x19\xd5\xa1\x35\xd1\xad\xed\x41\x59\xa6\xa2\x84\x2a\xe1\xb6\x04\x89\xab\xf3\xa5\x37\x91\xdc\x72\x22\xda\x63\x9d\x87\x28\xb1\xef\x22\x9a\xeb\x97\x13\x98\x08\x0a\x9e\x9a\xef\x26\x61\xca\xd4\x85\x5c\x10\xd3\x3f\x84\xe9\xa4\x3d\xcf\x57\x1a\xdf\x3b\x90\x41\x5d\xd0\x95\x72\xd8\xc9\x86\x2d\x28\x83\x68\xdb\x59\xf4\x5a\x09\x62\x0a\xe9\xf2\xec\xe9\xb1\x52\x0e\xbd\x87\xd8\x39\x7a\xac\x63\xe7\x80\x1b\x41\x3b\xbd\xdd\x63\x5d\x3b\x83\x9c\x26\x45\x7a\x33\xc2\x7b\xfb\xbd\x4e\x39\x0b\x5c\x31\x96\xf3\xf4\xdc\xce\x7e\x9e\x49\x9f\x2f\x03\xe5\x79\xab\x99\x18\x5b\x5a\x3e\x88\x83\x73\x14\xab\xf1\x64\x7c\xfa\x7a\x46\x37\x74\xc1\xe4\x50\xe5\xe7\x38\xc4\xe8\x2b\x04\x4a\x9a\x25\x62\x21\x4f\x78\x59\xb6\x65\xb8\x65\xac\xbe\x33\xb1\x44\xf7\x83\x84\x07\x9c\x9b\xf1\x65\xa5\x31\x13\x34\x41\x96\xfb\xfb\x86\x47\x5c\xe2\xe1\xa6\x57\x39\x3a\x6b\x99\xed\x63\x86\x9e\x22\x3a\xf0\xa0\xdd\x68\x6f\x80\xd1\x73\xe0\x3e\x20\x0d\x6f\xa3\x94\xea\xef\xfb\x0a\x59\x27\x1a\x8d\x85\xd6\x60\x46\xb8\xd1\x5f\x83\x66\x7c\x39\xfe\x38\x40\x64\x9f\x50\x00\x68\xd3\xdb\x84\x0b\x13\x47\x7f\xc9\x39\xf8\xa3\xe0\x1b\xeb\xcd\x55\x53\x54\xe8\xe1\xb3\xe4\x50\x44\x34\xa8\x9c\xae\x4d\xc1\x91\x68\x20\x7b\x78\xdd\xa0\x67\x36\xc0\xd2\x12\x95\xd9\xd7\xc7\x40\xaf\x91\x2d\x15\xf4\x58\x07\xe0\x93\x1e\xeb\xac\x95\x34\xeb\x6f\x4b\x49\x8f\xb5\x55\x49\x8f\xb5\x71\xb3\x78\x7f\x4d\xe7\x35\xb2\x35\x71\xbf\xb3\x64\x58\x1c\x8a\x98\x96\x56\x07\xcb\x32\xa4\x6f\x48\xa3\xf4\x9d\x98\x20\x3c\xd8\x94\xe4\x04\x6b\x51\xda\x7d\x0e\xfd\x6c\x1c\x4d\xee\x6c\x75\x5b\x76\x1d\xa7\x42\xd3\x70\xa1\x56\xe8\x2c\x89\x17\xd5\x8f\xe3\xaf\xdf\x91\xc1\x2d\x60\x49\xb7\x02\x76\x22\x66\x53\xd9\xc1\x67\x81\xee\x44\x0c\x72\x18\x22\x41\x07\x6c\x95\x0b\x79\x6c\xe1\x0c\xc6\xad\xab\xe5\x22\xe4\xd1\x37\x86\x76\x45\x49\x70\x53\xf9\x60\x8f\x41\xf5\x55\x7c\x53\xf5\x4a\x82\xda\x9c\x92\x78\xa1\xcc\x89\x99\x2a\x20\xe2\xff\xe1\x96\x41\x8b\xa0\x6d\x22\xfe\x9f\x6c\x99\x88\xef\x6b\x97\x88\x4b\xad\xba\x64\xa2\x2a\xeb\x50\xb9\xe7\x57\xc4\x74\xac\xf4\x5e\x46\x6c\xac\x85\x62\x50\x52\x57\xfc\x58\x54\xec\xc4\xca\xaf\x75\x61\x8b\xaf\x0a\xa8\xdb\x84\xaa\x0b\x24\x7a\x01\xb7\xc1\xea\xbe\xd6\xa8\xe9\xad\xef\xce\x59\xb6\xcb\xad\x3e\xac\xd7\xd1\x3a\x89\x47\x6a\x7b\x5d\xa3\xfd\x0a\xfb\x62\xe1\xfd\xca\xad\x5b\x67\xeb\x5b\x3d\x52\x60\xe4\xb2\x86\x09\x12\xf6\x9d\xb4\x6e\x87\xba\xbf\xfa\xbf\xde\x90\x43\xbb\x21\x25\xe4\x61\xa7\x2c\xa1\x6e\xe7\x2d\x9a\x21\x6e\x18\xe3\x1b\xc6\x3e\xc6\xc7\xa9\xdd\x16\x12\xd3\x0b\xf5\x80\xd1\x27\x51\xbc\xe2\xb7\xbb\x8b\xd6\xa7\x7f\x64\x07\xe2\xb5\x66\x22\x68\x5c\x42\x93\x2c\x73\x10\x76\xe4\x31\x7d\xa0\x01\xa8\x9b\xa6\x88\x70\x1c\x98\xee\xd2\xd7\x84\x32\x0e\x4a\x63\xa5\x80\xe0\xe5\x65\x74\x86\xd8\x2e\xa4\xe0\xc8\x28\xd3\xcc\x93\x70\x51\x39\x56\x24\xf9\xd1\xd1\x4a\xfe\x27\x46\x4b\xe2\x6e\x8d\x17\xe2\x76\x90\x7c\x77\xee\xc1\x6b\x60\xfc\x90\x7e\x67\x9c\x4b\xad\x7e\x9d\x54\xad\xb8\x32\xdd\x92\xf9\x20\x5e\x73\xe1\xa6\x07\xe1\x35\x79\x1b\x54\xe5\xa4\xff\x1e\x2c\x3d\x42\x16\xb0\x3f\xb7\x5c\xf0\x5c\x5b\x8c\xfb\x3c\xe4\x97\xf4\x23\x9c\x5e\xf4\x8d\xc5\x5f\x56\x40\x12\x3e\xfa\x3b\x44\x2c\xc2\xaf\xf4\x54\x7d\x45\x9c\x0e\xe1\xeb\x3a\x4c\xd2\x88\x5f\x3e\x9d\x87\x97\x69\x45\x3d\xf0\x7e\xa6\xa6\x4f\xaa\xb6\x92\x16\x86\xf1\xe1\xb4\x71\x29\xce\x70\xa1\xf2\xb5\x69\x00\xa7\x9d\xd1\xe6\x2f\xed\x33\xac\xed\x5d\xee\x96\x3c\x12\x01\x27\xd7\x49\x14\x27\x91\xb8\x0d\x5e\x8c\xf8\x78\x55\x6c\xaa\xca\xeb\x6b\xb5\x34\xad\x65\x0a\x35\x45\xfe\xb9\xc2\x44\xac\x10\x03\x55\x3b\x6c\x1e\xef\x36\x7a\x67\x49\xa3\x81\x81\x52\xf3\x51\x32\x6e\xc9\x9a\xc7\x88\x59\x81\xe2\xb1\x88\x35\xfa\x6e\x73\xc2\xf0\xbe\x58\x69\xd7\x57\xbd\xa4\xe6\xe4\xff\x8b\xec\x37\x30\xdf\xff\x29\xeb\xbd\x06\xe2\x07\xd8\xee\xb5\x12\xff\x11\xcb\x8d\xff\x0f\xb0\xdb\xf8\x7f\x82\xd5\xc6\x3f\xc8\x66\x37\xe9\x4f\x72\xd8\x3f\xcc\x5f\x2b\xc8\xc0\x5b\xff\x30\x67\xad\xcb\x48\xae\xfa\x3f\xe1\xa9\xcd\x75\x32\xfd\x45\x28\xc6\x0a\x5e\x88\xa0\x95\x4a\x88\x7a\xc1\x8c\x72\xef\xff\xc5\xab\x4f\xf9\xd3\x2a\x0c\xd4\x59\x55\x1a\x34\x19\x3e\x8d\xe0\x0b\x62\x2d\x41\xd8\x58\x73\x73\xda\xf6\xe0\xbe\x5a\xe1\xe5\x84\x34\xc8\xeb\xd6\xba\x2f\x05\x0a\x12\x81\x20\xc7\x03\xdc\x22\x06\x2c\xf7\x34\xac\x5d\x28\x06\xcc\xf2\x5c\x6b\x14\x69\x98\xe5\xb9\xb6\xa4\x61\x53\xc2\x36\x45\x78\xa5\xd1\x95\x9c\xe8\x16\xe1\x0c\x30\xa9\xe5\x5d\xd1\xb0\xac\x2f\x4e\x5e\xab\xb7\x6a\xe9\xba\xa5\x4d\x35\xd1\xc8\xf5\x1c\x05\x05\x33\x14\x46\x38\x15\x83\xd2\xe6\xb8\x94\x27\x9e\xc0\xea\xa5\x1a\xd7\xfd\xa3\x7d\x56\x1d\x1c\x9a\x88\xc1\x67\xc4\x89\x18\x94\x5c\x5e\x8c\x4e\xc7\xb6\xeb\x86\xd1\xc7\xb1\x13\xdc\x97\xe1\xa3\x83\x83\xa1\x7a\xad\xc3\x7e\x74\x3a\x6f\x18\x1e\x68\xfc\x54\x17\x21\x6c\x27\x22\x1c\x6c\xe9\xa0\x46\xcf\xdd\x58\x42\x0f\xe5\xc4\x2e\x17\x2f\xb4\x88\x3e\x3a\x44\xb6\xc6\xf9\xe8\x60\x1c\x58\xed\xfa\x4e\xab\xb6\xb5\x49\xf3\xfa\xe9\xf5\xda\x1c\xdc\x3a\x34\xfa\xde\xdf\x9c\x0f\xd0\xde\xc3\x9a\xf6\x92\x7c\x1e\x35\x9c\xda\xc3\x3d\xac\x94\x04\x18\xd5\x39\x1d\x22\xa8\xe3\xec\x68\x60\x2f\x95\xb2\x26\x1c\x5d\x73\xdd\x49\xab\xed\x03\x03\x7f\x29\x26\x4e\x60\x02\x70\xc9\xf6\x31\xe6\x0c\x80\x7d\xd4\xe2\x52\x4e\x9d\x91\xd3\x60\x8d\x7f\x20\x67\xfc\x0f\xb9\x59\x1e\xda\xaf\x1f\x6a\x45\x4d\x3d\x25\xf4\x0b\x88\xe0\x39\x35\xc8\x5f\x08\x8c\xa8\x68\xfc\x63\xe4\xe0\xf1\x3f\xaa\x24\x97\xbc\x91\x34\x9c\xca\x8e\x73\x1a\x91\x99\xd9\xbf\x9f\xbc\x7e\xb5\xed\x45\xdf\xb2\x61\xc1\xfa\x84\x58\xce\xe7\x1a\xc6\xfa\xd2\x28\x43\x31\x13\x5e\x9f\x19\x1d\xc6\x1d\x6c\x50\x74\xa6\xd3\x69\x0d\x3c\xbc\x1e\x29\x0f\xaf\x06\xcb\xda\xe8\xd9\xf0\x74\xfc\xd1\x8c\xf0\x92\x47\x5f\x2b\xe0\x5b\xaf\xa9\x94\xa7\xe5\x1e\xd0\x56\x59\x52\x47\x6d\x43\xce\x26\xcc\x4d\x90\x91\x0a\x4b\x1b\x36\xcb\x5c\x2d\xd3\x05\x57\x92\x31\x07\xe6\x6e\x03\xd4\x5d\x04\x36\xa6\x7a\x16\x11\xd5\x36\x1d\x9c\x11\xd5\x6e\x1d\xd4\xe6\xb3\xb0\x03\x05\xd6\x6e\x44\x94\x2d\x96\x8e\x52\x01\x45\xb2\xe4\x04\xa0\x8f\x99\x62\x4f\x5f\xb2\xf0\xba\xfc\x7a\xa2\xfd\x24\xa7\x35\x61\x14\xda\xe6\x8e\xbb\xea\x0c\x1d\xf2\xb2\x56\x80\xd9\xf0\xcd\x06\x9b\x6f\xfe\x64\xf3\x54\x5f\x38\x3c\xdb\x9e\x76\x6b\x58\xea\xfc\x5a\xfd\x47\xb1\xd0\x45\x4c\xcd\x36\xdf\x00\x1e\xdb\x00\xae\x66\xa2\x68\xf1\x99\x56\xc1\x37\xea\x1c\x30\x53\x26\x2c\x9a\x23\x54\x96\x4d\xe2\xbd\xb6\x3e\x9d\xaa\xa8\xf6\x43\x04\xef\x01\x95\xd9\x2f\x55\x27\x04\xe9\x0b\x18\x8b\x69\x78\x9b\xbe\xe0\xea\x51\xb8\xcd\xc1\x78\xc2\xb6\xb2\x2f\xc5\xc8\x50\xfd\x9b\x56\x70\xec\x9b\xfd\x0a\x63\x03\xe7\x82\x75\x55\x15\x3d\x6b\xc2\xe9\x14\xf5\x25\xf6\x02\x83\xa1\x9e\xdd\xfd\xb4\xf8\xac\xaa\xcd\x28\xbb\x80\x3f\x3c\x59\xd1\xcf\x54\x01\x4d\x78\xc1\xd7\xa7\xa5\x65\x00\xb1\x39\x3f\x0c\xfc\xcf\xe5\x7e\x62\x30\xa7\xd8\xc6\xec\xa9\x00\x5f\x0d\x20\x9f\x1e\x92\x95\xa0\x29\xd7\x23\x45\xf5\x80\xfd\xc4\xee\xbd\xab\x75\xae\x02\xf3\x5e\xa5\x7a\x95\xcd\x66\x20\x0d\x01\xb1\xbd\x90\x59\x71\x10\xb1\xb3\x06\x12\x09\xc5\x0b\xac\x77\x0b\x61\xb9\xda\x65\xee\x20\x58\x0c\x44\x60\x5e\xcf\x1c\x38\x4a\x1f\x34\x3f\xf1\x21\x41\xf9\xda\xe3\x2e\xe0\x6d\x18\xe8\x72\x90\x1b\xe2\x0a\x70\xbf\x91\x0f\x1e\x6b\x26\x30\x70\x38\x48\xf2\xb1\x9b\xda\x3c\xe3\xbf\xd1\x2f\xea\xd6\xa4\xa5\x65\xf3\xcd\x7b\xa8\x05\x7e\xd0\xbf\x67\x62\xb1\xa6\xd8\x98\xb7\xff\x01\x6e\xb9\xf5\x09\xb3\x4f\x72\x0a\xcd\x2c\xeb\x5b\x63\xba\x75\x4c\x36\x1f\x3a\x1c\x6c\xf6\xf9\x83\x7e\x96\xf5\x8b\x71\x82\xee\x2f\x1f\x50\xd5\x5b\x2f\x79\xe5\x0f\xfa\x83\x24\x48\x9a\x7d\x33\x51\x8d\x8e\xc5\xe6\xb2\xb4\xec\x3e\x50\xa5\x04\x46\x5d\x81\x36\xab\xd3\xd4\x23\xc5\xfa\xb6\xcb\x7a\x57\xec\x7b\x5d\x2f\xd9\x6e\xaa\x7f\x53\xca\x8d\xfc\x62\x29\x18\xcd\xbf\x52\xba\xe4\x4a\x38\x21\xd9\x6b\x9a\x7f\xa5\x74\xc2\x55\xfe\x9c\xf7\xa6\xd7\x6b\x0a\xd9\x57\x90\x23\xe7\x99\xca\xf2\x3d\x23\xdd\x33\x8f\xdc\x14\x1b\xf1\x3d\x17\xa2\x3f\x3a\xf6\x7a\xdd\xc6\xc1\x37\xa1\x29\x69\xd5\x6b\x96\xcc\xf6\x92\x8d\x58\x6e\x12\x55\x92\x08\x28\xf7\x16\x30\x40\xe1\x45\x8a\x18\x3e\xf4\x7a\xca\x2b\x09\x62\x0f\x69\x2f\xf7\x32\xb4\x6b\x55\x5c\xaf\x0b\x50\x71\x36\xb5\x1b\xcb\x35\xd5\x44\xaa\x77\x3f\x6d\xb5\xbd\xeb\x1a\x7f\xdb\x9a\x11\x94\xe3\x14\x29\xdd\x9a\x58\x9e\x28\xea\x75\xb4\x2b\xb4\x24\xeb\x5c\xa9\x93\xbe\xe0\x6f\x92\xf8\x32\x61\x69\x3a\xb0\x14\xba\x59\x33\x56\xc5\x3c\xb2\xeb\x19\x0a\xb5\x5e\x20\xcb\x50\x75\x82\xb2\x0d\xdb\x7e\x12\xad\x28\x01\xa6\xfa\xd6\x39\x75\x29\x26\x5b\xe5\xfd\x05\xeb\xec\x1a\x99\x3f\x2c\xc1\xad\x05\x4c\x57\xa2\x8a\xe2\xe5\x0e\xf4\x08\xd3\x5d\x67\x0e\xca\xc8\xf4\x3c\xf4\x87\x85\x61\xce\x9f\xaf\x1d\x21\xb4\x5b\x55\x80\x2a\xbe\x2d\xf0\x5a\x9d\x79\x02\xd9\xf5\x88\xf1\x0c\x5b\xab\x7c\x21\x55\x21\x66\x76\xc5\x97\x02\x45\xf9\x70\x9b\x67\xb8\xb4\x8e\x6f\x01\x9e\xe9\xc1\xb2\x1b\x59\x58\x5d\x16\xb2\xaf\xab\x30\x7d\x3c\x8f\x2e\x39\x9b\x3e\x8f\x97\xc9\xc6\xaa\xda\x6e\x09\x86\x18\x65\x03\x75\xf9\x63\x1d\x61\x02\x97\xac\x77\x2e\x6e\x32\xfc\xa0\xe7\x52\xea\x1a\xea\x7c\x74\x72\xba\x8d\xa5\xb6\x8a\xfd\x5a\xa2\x4c\x8a\x01\x72\x4b\x95\xe9\x09\xfc\x9d\x32\xdd\x52\x19\x8d\xc2\xcb\xf2\x3c\xd9\xde\x4c\x7b\x0d\xea\xb2\xef\x36\xa9\xcf\x0f\x19\xcc\x15\xc5\xe9\x73\xa1\xbf\x4f\x9f\xe8\x6f\xa3\x24\xb3\xf5\xac\x51\x7e\x9c\x76\x65\xca\xbc\x2a\xdd\x00\x54\x97\x79\x12\x2b\xed\x44\xc1\xa6\xb5\x77\x3c\xfa\xc2\x92\x34\x9c\xd7\x4e\xa3\x05\xcb\x41\xc9\x15\x9a\xd2\x13\xa5\x24\x99\xd6\xc2\xc9\x84\xa5\x69\x9c\xac\x2b\xb6\xbf\x4b\x99\xf2\x59\x60\x4c\xd6\x1d\x92\x72\x9c\xb3\xb7\xa9\xd2\x8d\x97\x5f\xf7\x82\x80\x2c\x06\x86\x43\x5e\x30\x6c\x0e\x2b\x00\x01\x3e\xee\x05\x20\x73\x14\xe5\x1f\xab\xf2\xb2\x3b\x4a\xca\xf9\x32\x62\xbb\xe9\x3d\xb2\xe6\xc5\xcf\x9a\xe0\x4b\xc8\x7b\x5b\x34\x45\x73\x6e\x6d\x83\x27\x63\xda\x60\x57\xd3\x1a\x6b\xb1\x16\x6f\xc6\x6f\x28\xd6\xac\x70\xbe\x68\x4e\xae\xa2\x99\x60\x53\xd9\x46\x3b\xbc\xde\x41\x3f\xf1\x48\x41\x2a\x9a\xa9\x02\xb2\x66\xe4\x23\x0f\xa1\x51\xcc\x4b\x2e\x06\xe4\x1e\x1a\xe7\x52\xd0\xa2\x7e\xbc\xbe\x4f\x16\x49\x5a\x1a\x72\xb7\x92\x9b\xe5\xad\x51\x37\x22\x88\x51\x70\xe1\x84\x5b\xe7\xa1\xe1\x57\xf2\xf7\x97\xc1\x5d\x5a\xa8\x0c\x5c\xe5\xc7\xce\x26\x58\xba\xbe\xca\xdc\xc3\x63\xc8\x4c\x84\x91\x64\xca\xb3\x92\x7a\x6e\x76\xb3\x74\xee\x2e\xa5\x22\x51\x6b\xd6\x2e\x38\x7d\x52\xa5\x8d\x76\xbb\x71\x93\x08\x56\xe4\x31\x9d\x49\xee\x09\xec\x73\x0b\xfe\x2d\x1a\xf1\x31\xf8\x55\x2b\x8c\x07\xbe\xd8\xae\xf0\x42\xb8\x4d\x07\x0e\xb2\x70\xcd\xc2\x28\xcb\x32\xc7\x31\x8e\xbb\x4d\xdf\xe6\x15\x6b\xf1\xbd\x42\x33\x81\x67\x9e\xd5\x8b\xca\x70\x5f\xe2\xf9\x70\x53\x12\x8d\x92\x31\x85\x22\x89\x5d\xc4\xe0\x55\xe0\x73\x69\xb5\xc7\xb9\x88\xe3\x39\x0b\xb9\xc5\xcd\x0c\x42\xe5\xde\x89\x53\x41\x84\x41\x31\xd0\x18\xef\x7a\x24\x94\x29\x1b\x19\x30\x11\x14\xec\xb9\x77\x0c\x3b\x06\x9d\x94\x52\x36\x88\x0b\x86\x3e\x70\x0b\x87\xec\xdc\x6a\xa6\x20\x88\x37\x52\xfc\xa0\x4f\x12\xfd\xc2\xa9\xd2\xeb\x35\x0d\x55\xfe\xac\xfa\xe0\xc5\x6a\x39\x8a\xa0\x9d\x82\xa0\x68\xad\x8c\x06\xb8\x5c\x2d\xb6\xe8\x09\x16\x2f\x36\x69\x56\x44\x67\x1a\xb1\x71\xce\x19\xe9\xa8\x96\x51\x05\xdc\xc9\x75\x08\x12\x3c\x48\xb4\xf4\x81\x70\x38\x11\x2d\x24\xf7\x61\x3f\x71\xb4\xed\x64\x7e\x5e\xce\x06\x2f\xa7\x6c\x49\x69\x89\xf8\xdd\xf5\xb5\x79\xf5\x26\x77\x0d\x29\xb2\x6c\x97\x0f\x44\x80\xb6\xc0\xa3\xbc\xf0\x83\x39\x1c\x0e\x87\xd9\x70\x98\x1d\x1d\x65\xd3\xe9\x74\xba\x77\x59\xe9\x7e\x49\x7b\x8f\x02\xa5\xfa\x2d\x40\x31\x34\xd1\xd2\xc9\xd8\xbe\xed\x14\x79\xa0\x8c\xd6\x8d\xdf\xce\x96\xe9\x0c\x85\xa0\xf7\xc1\xd4\x01\x8e\x6e\xc1\x73\x87\x6a\x74\xca\x21\x98\x2b\xe6\xe8\x08\xfb\x11\xa6\xad\xd7\xfd\xaa\x1a\x3b\xeb\x88\x8f\x8b\xc1\x8c\xf0\x20\xca\x8b\x04\x96\x4b\xd2\x07\xd3\xbd\x28\x47\x24\x4c\xc5\x53\x78\xe3\xa9\x52\x3b\xa2\xa2\x0a\xf7\x90\x0d\x1c\xf5\x2c\x94\x13\x38\xb2\xbc\x63\x55\xca\xf1\x80\x23\x81\x03\x6b\xac\x1e\xa4\x7b\x11\x5c\x27\x2f\xd6\xaf\x6e\x73\xdf\x70\xca\x81\x8a\xba\x87\x1d\xca\x85\x38\xe2\x46\x87\x85\x8f\xa9\x3a\x96\x8d\x9c\x73\xa7\x21\x43\x9a\x74\x2a\xbb\xb2\xfc\x8c\x70\xaf\x69\x82\xfd\x76\x24\xba\x2f\x7f\x2b\x8d\x97\xc9\x84\x99\xa5\x12\x6f\x26\xe1\x86\x93\x39\x8d\xfc\xb9\x2c\x13\x0b\xad\xd3\xec\xc2\x16\x53\x0b\x2d\x91\x35\x76\x9e\x03\x3b\x34\xca\x6f\x7e\xc6\x41\x29\xbe\x54\xa6\x15\xa5\x6a\xe2\x66\xd9\x5b\x86\x5b\x82\xa5\x02\x04\x21\x6a\xea\x38\x81\x93\x8a\x90\x4f\x43\xc9\x28\x3a\x63\x1b\xe4\x7d\x55\x97\xea\x6b\x15\x10\xac\x16\xc1\x9b\x57\x3f\xd6\x2c\xc8\x5a\xae\x00\xa2\xb6\x35\x50\x25\xbe\x65\xff\x76\x63\xb6\x55\xb8\x59\x4b\x75\xdb\x60\x6c\xef\x57\x3a\xb6\x21\x41\xf6\xe3\xaf\xe1\x24\xdf\xc3\xb6\x16\x85\xa7\x2f\x44\xac\x9e\x12\xb2\x9e\xf9\x2a\x8e\xed\x36\x4c\xd0\x56\xd8\x88\xa5\xa3\xb1\x45\xb9\x86\x55\x09\xa9\x6c\xdb\x5a\x4a\xbe\x6d\x36\x1a\x09\x8e\xcd\x23\xbb\xc9\x18\x6f\x29\x23\x37\xd6\x42\x22\xab\x9f\xd6\x8d\xc1\xf5\x70\x45\x03\xaa\x31\x5a\x83\xb1\xbd\x78\x2e\x75\x19\x38\xc3\xe1\xd0\x81\x37\x1e\x9a\xde\x2e\xa5\x28\xca\xbd\xfa\x54\xa3\x49\x42\x8c\x07\x91\x92\xe7\x55\x97\x58\xc3\xc9\x2e\xf0\x6f\x56\xf6\xd3\xf5\xfc\x4c\x81\x9f\x6e\xf6\x86\xdd\xa2\x32\xc4\xd9\x98\x37\xb9\xf0\xe2\x3f\x9e\x4b\x98\x94\x78\x30\xc9\xe1\x45\xf6\x84\xe2\xf9\x69\x72\x73\x3e\x58\x66\xcc\x1b\x53\xa5\xf4\x9a\xaf\xd3\xb0\x67\x4e\x54\xf2\x79\xed\xb4\xc0\xa1\x4f\xc3\xf9\xa5\xf4\x48\x70\xd5\x14\xde\x0e\x53\xcd\xe8\xfb\x01\x63\x70\xc7\xb9\xde\x6b\xa3\x04\x5e\x0c\xa3\x95\x48\x36\x9c\x6c\x6b\x3d\xa4\x0a\x94\x8d\x62\xbc\x8e\x89\xc1\xa2\x5e\x87\x47\x20\x1d\xf5\x54\xd2\xb6\x1e\x54\x14\x93\x6d\x3c\x7f\xe5\xac\x17\xad\xe8\xa9\xca\xb2\xbb\xdc\x94\x58\xdc\x9f\x79\x65\x91\x4f\xf5\x34\xf3\x56\x1e\x68\x9d\x68\x0e\x90\x9e\xbc\xce\xb9\x55\xde\xc1\x59\xf6\xd4\x5a\x02\x98\xb0\x32\x41\x2f\x5e\x81\x2e\x91\x75\x88\xc1\xc1\x56\x98\x68\x23\x33\x7d\xc9\xca\x03\x63\x81\xae\xd7\x7f\xa6\xd6\xf5\xed\xf1\x7f\xa7\x23\xd6\x5e\xd5\xde\xdc\xe4\xb6\x74\x49\x91\xb6\xd1\x2f\x16\xf6\x47\xeb\x9d\xb3\x56\xdd\x46\x0f\xfd\x20\x3a\xd0\x57\x70\xbf\x57\xd1\x3f\xef\x18\x62\xd6\xc3\xdf\xc5\x1d\x6a\x71\x6d\x0a\x65\x01\xc8\x2c\x4a\xe0\xe1\xd6\xf5\x0b\x82\xb5\xde\x36\x25\xd7\xca\xbc\x2f\xa1\x50\x5d\xe6\x26\x47\x76\xed\x7a\xac\x60\x8a\x0d\xbd\x35\x99\x0c\xf7\x91\xbf\x1e\x5a\x0e\x8e\x58\xbd\xae\x54\x5e\xcc\xfa\x32\x29\x39\x3f\xf7\x1d\xee\x27\xf7\x83\x0a\x7e\x0f\xde\x33\xc4\xd7\x3a\x0c\x07\x6c\xc0\x47\x4c\xdd\xa6\x8c\x03\x5e\x6a\xc3\x30\xe2\x55\xb2\xcf\x1c\x58\x19\xa7\x61\x54\x05\x7c\x23\x4f\x51\xd9\x46\x52\xa9\xf2\x75\xd6\xf1\x7b\xd5\x43\xfe\xef\x22\x60\x58\xca\x4a\x14\x20\xb1\x84\xc4\x0f\xf3\x78\xa5\x02\xff\x63\x5c\x5e\x09\xaa\xc5\xe7\x95\xd1\x2b\x6f\xc2\xef\xab\xd3\x16\x11\xdf\x48\x51\xfb\x73\xbf\xcc\xeb\x79\x63\x0c\xbd\x93\xe0\x2d\x25\x73\x76\xcd\x1a\xb9\xef\xb2\x7c\x9b\xa8\x6d\x80\xf9\x31\xde\xf1\xe6\x5e\x18\x3f\xc4\x3b\xca\x73\xff\x7d\xfc\x5c\xa9\x8a\x12\x23\xf8\x9d\x82\x9b\x8d\xfc\x3e\x7b\xb7\xde\xbb\xeb\xf5\xfd\x34\xa6\x3f\x89\xda\xbf\x87\xd5\xbf\xd5\x0b\xff\x69\x1b\xee\x43\xea\xa7\x4a\xfc\x1f\xeb\xcc\xef\x32\xda\xa5\x3a\xf2\xed\x74\xcb\x72\xae\x5a\xb2\xdf\x5f\xe8\xb3\xe5\x7c\xbe\x9e\x84\xf3\xa5\xbe\xc1\x89\x5b\xcb\xbd\x60\xc8\x37\x60\xd8\x2c\x79\x55\x62\x25\x03\x9d\x2f\xca\x0a\xee\xf9\xec\xac\x35\xd8\xc2\x9a\xff\x14\xec\xad\xec\x79\x75\x05\x55\xb4\xec\x3e\xf0\x92\xb4\x7d\x1f\xf8\x36\xda\x54\x66\xff\xcb\xdd\x61\x1d\x00\x2a\xda\x52\x91\x9a\xa3\xb2\x8d\x10\xfe\xe0\x01\x21\xa7\x29\x86\xa7\xa8\x1a\xcf\xad\x47\x84\xf5\xc2\x95\x23\x76\x4f\xe9\x52\xe1\x8a\xd1\xf8\xce\xf9\x62\xbd\xd1\x5b\x4e\x18\x26\xdb\x77\x58\xeb\xcd\x4d\xdb\x62\xae\x4b\x30\x24\xef\xfb\x57\x25\x7b\x9d\x0f\xde\x06\x33\x5b\x02\x60\x33\xd6\x1b\x90\x51\x45\x01\xfa\x4f\xb6\x3e\xd2\x95\xfc\xf4\x8f\xd6\xbf\xc9\x5b\xfd\x6f\x76\x4e\x35\xbb\xbf\x89\x4e\x55\x37\x55\x9e\x40\x2a\x5a\xf2\xcb\x66\x87\x6d\x3d\x85\xfc\x3c\x62\xeb\x8c\xf1\xff\x62\xef\x0d\x23\xbe\x1d\x45\x83\x4a\x55\xcf\x99\xb4\x8a\x7e\xcb\x5b\xf0\xc7\x46\xaf\x95\xab\xdb\xec\xb3\x1f\x43\x47\xdd\x8e\xa4\x6f\x86\x15\x7d\xe4\x5c\x83\x2d\x1d\x6b\x18\x5e\x2d\xe7\xd2\xe0\xc1\x94\xc7\x02\xb9\xfa\x94\x6c\x1e\xf5\x59\x67\xa2\x8d\x5b\x11\xef\x90\x0d\xf8\xc0\xb9\x5e\x38\x81\xf3\x66\xe8\x04\x7c\xe0\x84\xf2\xfb\xf1\xd0\x59\x91\xa5\x00\x05\x69\x72\x57\x2d\xb1\x0f\x8c\x28\x1e\x89\xab\x2c\x15\x19\x9f\x66\xc9\x14\xef\x11\x2d\xba\x0f\x36\xaf\xab\xd8\x03\xcf\xcd\x1d\xa0\x36\xc0\xe3\xfb\x0d\x92\x91\xee\x9e\xe7\xe2\x81\x23\xae\x9c\x00\xdc\xc0\x0f\x9c\x54\x38\x81\x7a\x84\xd6\xe1\x53\x27\x68\xab\xcf\x64\xea\x04\x32\x17\x5e\xc1\xb3\x00\x60\xfc\x96\xdf\xd0\x43\xb0\x5a\x3d\x40\x25\xab\x37\xf7\x0b\x55\x83\xa5\x30\x40\x40\x95\xba\x0c\x48\x46\x7d\x17\x98\xca\x94\x03\x9c\x68\x93\xf0\x0b\x4e\x8d\x36\x96\xf5\x6a\xe3\xc6\x2d\xd2\x67\x01\x97\x7d\xd6\xf3\x42\xb6\x6e\x5a\x83\x26\x0f\xa3\x35\xf7\x95\xda\x7d\xaf\x4e\x02\x4f\xbe\xb9\x1f\x5f\x93\x5f\xb9\x13\x65\x55\x4e\xc8\x6f\xf8\x9a\x7b\x71\x4b\x67\xdd\x38\x16\x07\xbd\x64\xfb\x8a\xf9\xd8\x2e\xd4\xd9\x77\xdd\x87\x6c\xcf\xeb\xf4\xdc\x83\x7e\x91\xe7\xab\x9d\x47\x25\x3e\x64\x7b\x32\xb3\xf5\xa4\x99\x9d\x67\x8b\x28\x20\x4c\xe1\x89\x16\xd9\x3d\xaf\x39\x3d\xe1\x48\xb9\xb3\x79\xac\xbe\xe5\xe7\x27\x1d\xed\x60\x32\x54\x9f\x57\x0e\x26\xa7\xea\x73\xea\x60\xf2\x44\x7d\xde\x38\x98\xbc\x55\x9f\x43\x07\x93\x37\xea\xf3\x0f\x07\x93\x57\xea\xf3\xd6\x76\x7c\xf9\xf7\x0f\xe0\xb6\x66\x80\x00\x3e\xe0\x47\x6c\x1c\xbc\x0a\x5f\x29\x8c\x5f\x70\xfa\x37\x2f\x59\xbc\x82\x2b\x1e\x15\x5b\x44\xbc\x34\xd9\x94\x43\x29\x4c\x9e\xaa\x08\x50\x71\x74\x30\xf9\xa6\x82\x72\x70\x1d\x4c\x9e\xeb\xdc\xda\xe3\x25\xf9\x4d\x85\x41\xa5\xc5\xc1\xe4\x1d\xb7\x14\x33\xc9\x67\x4e\xef\xd2\x34\xe8\x74\x48\x1a\x74\xba\x64\x21\xff\x5c\x05\xbe\x4f\xa6\x81\xdf\x23\xc3\xc0\xf3\x56\xe4\x7d\xd5\xdc\xfc\xd3\x6a\x3f\x72\x0f\x19\x6e\x22\x76\xe8\xe2\x2c\x6b\x58\xcf\xc2\x7f\xb8\xd7\x96\xa5\xc2\xe9\x41\xc9\xde\x5e\xa9\x6e\xc8\x05\x40\xdf\xf3\xfc\x78\x51\x74\x15\x98\x49\x90\xa4\x48\x54\x2e\x5a\x23\x2b\xb7\xf6\xd2\x2a\xe8\x39\x42\x8c\x9e\x23\xbe\xd7\x73\x31\x06\xf7\xf4\xfc\x01\xed\xb9\x84\xc9\xbf\x3b\xca\xdf\xe1\x39\x8a\xf6\x3c\x1f\x93\x90\x46\x0f\xa8\xe7\x93\x94\x26\x64\x49\x05\x99\x53\x46\x26\x94\x0f\x78\x4b\xc4\x4f\xa3\xaf\x6c\x8a\xda\xf6\x2b\x8f\xad\x81\xdb\x50\xaf\x3c\x06\x8e\x43\x66\x54\x4f\xcb\x13\x63\xba\x05\xec\xd4\xcc\xd8\xef\xbc\x71\x8f\x94\x52\xc2\x15\x9d\x1d\xba\x03\xa7\xe9\xc8\x52\xd7\xf4\xcf\x35\x9c\x77\xa9\x8c\x9a\x61\x93\x63\x5a\xe4\x80\x66\xae\xa7\x2f\x2c\x08\x76\x1f\xad\xe5\x33\x94\xe3\xaa\xe1\xbc\x71\x1a\x28\x1e\x5c\x37\xe2\x86\xf3\x01\x1e\x4e\x69\xa0\x70\x70\xdd\x08\x1b\xce\x50\x07\xd3\xc1\xb4\x91\x36\x9c\x23\x1d\x5c\x66\xd9\x3c\xcb\x26\x03\xe7\xd4\x44\x0c\x16\x8d\x65\xc3\x79\xae\x83\xf3\xc1\xa2\x31\x2f\x4a\x4f\x06\x8b\xc6\xa4\xe1\x9c\x40\x10\xa6\xfb\xb3\xb2\x4f\x5a\x83\xcb\xb3\xfb\x2c\x97\x55\x93\x74\xfa\x8a\x3c\xe3\x72\x1a\x6e\x51\xd4\x87\x05\x56\x56\xac\x29\xa9\xee\x5e\x54\xf6\x90\xfd\x96\xc3\x45\x79\x2a\xd9\x23\x62\x95\x56\x23\x54\xb6\x28\x84\xf4\x72\x4c\x61\x7e\xa8\x13\xad\x78\xa3\x87\xac\x0b\x41\xc0\x98\x30\xea\x58\xf8\xcc\x2d\x1d\x4d\xd6\xbc\x6e\xa5\xab\x06\x91\xf0\x69\xf4\x41\x9f\x29\xf7\x54\x95\x17\xc0\xe7\xbc\x38\x24\x7b\x18\xf2\xe6\x56\x98\xdf\x2d\xd0\xd4\x25\xc2\x1f\xb5\x43\xa8\x32\x3d\xb0\xfb\x07\xd4\x97\x95\x62\x50\xd9\xb8\xd9\x58\x18\x2b\xc3\x66\xa5\x09\x2e\xbf\xb1\xb6\x57\xce\xad\x52\xe5\xc6\x96\x28\x0d\xf1\x5c\x81\x45\x6f\x6d\xc7\x1c\x09\x4c\x8c\x65\xb3\x36\x38\x36\x02\xa9\x35\x43\x66\x13\xbd\xd7\xde\xb1\xec\xa0\xf3\x58\xcf\x57\x7a\x5c\x55\xb5\x5b\x3a\xee\x5f\xd7\xe6\x47\x51\xbb\x32\x5e\x36\xf3\x72\xaf\xdf\x48\x8c\x7f\xa6\xc2\x7a\xd8\xa4\x9a\xf6\xd8\x36\xc1\x3a\xcd\xef\x3c\x94\xc9\xe0\x20\xaa\x64\xd9\x9b\xef\xa2\x1d\x17\x72\xf4\x58\xa7\x6c\xc6\xab\x33\xec\xf7\x3a\xae\xca\xe1\xb1\xb6\x01\x51\xd8\x91\x07\x9b\x66\x69\x80\xca\x43\x81\x1b\x49\xee\x44\x4a\x5c\x25\xf1\x0d\x18\x9c\x1e\x27\x49\x9c\x20\xe7\x1d\xff\xc4\xe3\x1b\x5e\x5b\xf2\x48\xd4\x9c\x86\xdc\x8d\xd5\x34\xb1\x5d\xb2\xd1\xd7\x5c\x45\x6a\xb2\x48\x1f\x73\x93\x49\x2d\x84\x4f\x3a\xfc\x1c\x16\xc0\x50\x87\x8e\xe4\xa2\x3c\xd5\x01\x65\xfe\xf3\xc4\x14\x54\xab\xe2\xad\x0e\xfe\x61\xac\xa8\xde\xe8\x88\x0f\xb0\x3e\x5e\x41\xe8\x3b\x56\x74\xeb\xfb\x74\x89\xa7\xd2\x5d\x50\x0c\xb9\x3d\xc8\x0f\x3c\xff\xa1\xdf\x3d\xf0\x59\xaf\xd1\xf6\xba\xed\x1e\xeb\x3d\xbc\x29\xcd\x02\xb9\xa1\xc0\x7e\x2f\xd1\xd0\xfc\xd5\x06\xf5\x2a\x5e\x01\xae\x58\x25\x24\xb4\xe6\x1b\x49\x4b\xb3\x5c\x6e\x4f\x1b\x84\xcf\x3d\xa4\x31\xf8\x1f\x0e\xe1\x6f\x9a\x65\xf1\x21\x75\xeb\xf5\x10\xfe\xa6\x87\xd4\xcd\x32\x14\x37\xa8\x6a\xd8\x0d\x97\x13\x37\xc5\x8d\x10\x93\x94\x86\x14\x9e\x66\x2b\xd1\xb5\xf8\x81\xdc\x66\xe5\xee\x19\x83\x5d\x22\x59\xe6\x54\x0d\x5e\x76\x91\x9b\xab\x7a\xf1\x65\x99\x93\x35\x21\x13\x38\x3d\x47\x42\x27\x68\x6b\x8c\x07\x7e\x87\xa4\x0d\x1a\xd1\x73\x74\xcc\x51\xd8\x80\x2d\xd9\xef\x60\x8c\x49\xd8\xa4\x0a\x97\x08\x5c\x2f\x9c\x23\xe8\x3b\x92\xc2\x56\xbc\x54\xf6\x4f\xa1\xac\x42\x8d\x7b\x4a\x96\x9a\x04\x26\x05\xe1\xdb\xe6\xbb\xee\xb3\x30\xfe\x2f\x9e\x6d\x75\xca\xa3\xc8\x0f\xa9\x98\x10\x23\xd6\x70\x52\x67\x8c\x8a\x81\x2c\xf5\xcf\x0b\x98\x62\x26\x74\xc4\x55\x06\xd5\x0f\x2f\x21\xa4\x1a\xff\x14\xbe\xa1\x1d\xdf\xe0\x73\xcd\x78\xae\x20\xba\xb9\xb5\x4d\x8a\xf0\x5e\x5f\x61\xad\x9b\xfd\x1c\x4a\xaa\x86\xff\xa6\x80\x6b\x0f\x46\x3f\x48\x94\x7f\x84\xe7\x2a\xbd\x11\x4f\x96\x64\x0e\x6f\x00\x6f\x94\x24\x57\x14\x09\xba\xcb\x08\xa7\x33\x92\x50\xd3\xc9\x60\x51\x22\xd9\xb0\x77\x1c\x25\x92\x3f\x97\x5c\x38\x26\x71\x11\x06\xeb\x85\xb0\x08\x5f\xc9\x70\x5a\x84\xa7\x32\xbc\x2c\xc2\x43\x19\x9e\x17\xe1\x5b\x19\x46\x13\x1a\x1d\xd2\xcf\xbc\x95\xa6\xf5\x3a\xb8\x42\x8d\xc6\x59\x16\x1d\xca\x18\x88\xd0\x31\xf1\x21\xf5\x64\x78\xe1\x40\xe0\x33\x6f\x2d\x20\xb8\x70\x48\x3c\xce\xb2\x50\x27\x5f\x39\x10\xf8\xcc\x5b\x57\x10\xbc\x72\x48\x38\xce\xb2\x54\x27\x4f\x1d\x08\x7c\xe6\xad\x29\x04\xa7\x0e\x49\xc7\x59\xb6\xd4\xc9\x43\x07\x02\x9f\x79\x6b\x08\xc1\xa1\x43\x96\xe3\x2c\x9b\xeb\xe4\x5b\x99\x3c\x72\x6e\x6f\x1d\x32\x1f\xe3\x91\x3f\xa6\x82\x4c\x46\xed\x31\x75\x0f\x81\x9c\x90\xc9\xa8\x33\xa6\xbc\xd2\x17\xb7\xd1\x98\x2d\xa9\x19\x22\x91\x65\x1e\xd9\xdd\xe5\x84\x91\x04\xaf\xec\x27\xd7\x26\xb8\x38\x1e\xd6\xeb\xe8\x8a\xce\x2c\xbd\x41\xa4\xaa\xbb\xc2\x98\xcc\x6c\x0f\x63\x57\x6a\x92\xd9\x9e\x02\x3e\x70\x15\xb3\x16\x04\x83\x6b\x15\x28\xbc\xc7\x3c\x5b\xf7\x1e\xa3\x60\xa5\xa6\xf0\x09\x72\xac\xe0\xa6\xb7\x7a\xeb\x19\x89\x92\x95\xb6\x39\x28\xd7\x10\x8f\x45\x34\x61\xe0\xac\x7e\x12\x5e\x47\x22\x9c\xa7\xd8\x21\x1f\x38\x86\xba\xb5\x47\x9b\x77\xc8\xf9\x4b\xbb\xf6\x5c\xf2\xe8\xab\xf2\xf6\xf9\x55\xc7\xe8\x3d\x40\xbf\x36\xf5\xb5\xf0\x87\xfd\x97\x43\xf6\x46\x8d\xe6\x78\x70\x36\x6d\xc0\x6b\x3f\x77\x1e\x69\xaf\xf0\x60\x4f\x39\x44\xfe\xcb\xa9\xf4\x2d\x5c\xbc\x44\xe8\xb1\xf6\x43\xfb\xc9\x11\x78\x21\x5d\xf9\x57\x96\xd5\xdc\x5f\xf8\x46\xb2\x3c\x20\x99\xd0\x4f\x34\x52\xc7\x6f\xf9\x9d\x96\xeb\x10\x46\x3f\x09\xc2\x5b\x33\x4e\xaf\x39\x51\x3e\x78\x2a\x2c\x75\x05\x72\x8c\x23\x20\x87\x8c\xc6\x4a\x8b\x56\x89\xb6\xf2\xc7\xf7\x88\x44\x88\x28\x87\x3e\xdb\x40\x80\x5f\xa2\xef\x42\xe0\xb6\xef\xb3\x1c\x02\xb8\x65\xe0\xf1\xcd\xc0\x7c\x20\x1c\x34\x4c\x13\x65\x31\x30\xa1\x22\xeb\x76\xf0\x05\xed\xfd\xa4\x9e\xf1\x61\x0a\xcb\x7b\x14\x33\xb5\xf2\x7a\x7e\xb8\x95\xf9\xa3\x14\x54\x81\x53\x92\xcf\xc8\xa5\xec\x37\xf3\xda\xc5\x94\xf0\xd6\x54\xbf\x68\x40\x3f\x43\x4a\xaa\x9e\x1d\xa5\x17\x64\x8b\xf2\x80\x25\xef\xca\xd5\xd3\x1d\x93\x53\xd5\x5a\x69\x73\x95\x37\xa7\xfa\x0d\xc4\xa2\x10\x02\x18\xd6\x9a\x99\x28\xc4\x8e\x0c\xa2\xaf\x04\xf9\x01\x85\xce\x72\x77\x40\x46\x85\x5d\xb5\x3a\xc1\x77\x1a\x36\x8c\xb8\x2a\x3d\x65\xb3\x88\x33\x75\x9f\x4b\xe7\x22\x37\xa0\xd3\x31\x1b\xee\x9c\x8c\xa1\x40\xf1\xca\x14\x4d\x84\x36\x0b\x43\x09\x4d\xcd\x33\x19\x11\x4d\x8c\x2a\x30\x26\x88\xc3\x2a\x78\x82\x04\x3d\x45\x11\x11\x18\x43\xff\x30\x2e\x74\x35\x11\xe8\xa5\x47\x4a\x9b\x9c\x2c\x8b\x57\xb9\xb5\x61\xa1\x4c\xa8\xd7\x91\x15\x2a\x95\x1f\xa8\x92\x9b\x09\x41\xa9\xbc\x7e\x0a\x19\x42\x85\x79\x82\x0c\x15\x23\x54\xb5\x49\xbf\x46\x91\x28\x75\xf5\xe6\x30\xdd\xdb\xd9\xd6\x60\x71\x49\x83\xe7\xd1\x37\xf6\x8e\x47\x22\xa5\xaf\x48\x59\xa5\xfc\xad\x3c\x5d\xac\xfb\x6e\x31\x13\xa0\x78\x61\xe3\x1d\x0f\x1c\x93\xc3\xb2\x9f\xa8\xd7\xd1\x3b\x4e\x19\x58\xde\xad\x01\x3e\xbd\x4a\x58\x7a\x15\xcf\xb7\x1c\x16\x15\xec\x5d\x4a\x3f\x73\xd5\xd3\x79\x65\x62\x00\x51\x01\x82\x1f\x2a\x88\x93\xc2\xf9\xac\x5e\x47\xb0\x1f\x53\xd1\xf4\xb0\xac\x11\xaa\x2c\x7b\x37\xae\x54\xd2\x61\xe0\x4d\x18\x09\xa2\x64\x58\x60\x8c\x68\x8e\x5f\x87\xcd\xde\xa0\x70\x84\x1c\xf0\xc3\xa6\x37\x70\xe6\x61\x2a\x94\x17\x27\x7e\xe8\xaa\xe0\x91\x3c\x45\xf1\x43\x4f\x65\xd6\x21\x7f\xe0\xe8\xc7\x7e\x65\xa8\xaf\x42\xaa\x60\x01\x13\x96\xb3\x11\x4a\x28\x62\xfb\xfc\x74\xf8\xb2\x7b\xfe\x74\x78\x4a\xef\x8e\x1e\x9f\x1e\x9f\xbe\x18\x1e\x9f\xbf\x7c\xfd\xe4\xf1\xcb\x60\xe3\x69\x16\x87\x94\x73\x9c\x9f\x1c\x3f\x79\xfd\xea\xe8\x64\x33\x67\x20\x59\x92\xb5\xcc\xc3\xea\x7c\xe0\xe5\x04\xf2\xda\xc9\x0e\x91\x25\x03\x47\xd7\x0b\x60\xf2\xda\x8a\x2a\x20\x7e\x68\x45\x29\x68\xef\x8f\x8f\xff\x19\xc0\x53\x0c\xcd\xd1\xfb\xf1\xfb\xf7\x0e\x19\xbe\x7e\x75\xfa\x3c\xaf\x40\xf6\xc3\x0a\x57\x78\x12\xcf\xc5\x79\x0c\x69\x61\x74\x1e\x13\xa1\x90\xa4\x8a\xdd\xe4\xa3\x70\xac\x19\x4f\xf8\x52\x16\x33\x15\x53\x32\x61\x9f\x97\x51\xc2\xea\x75\xfd\x01\xf2\xb1\xb4\x5e\x5f\x1a\x16\x75\x89\x42\x98\x01\xd1\x0c\xc5\x26\x2e\xd6\x71\xe0\xe4\x9e\x5a\xa7\xcf\x27\x21\xe7\xb1\xa8\xcd\x22\x3e\xad\x2d\xe2\xe9\x72\xce\x6a\xff\x70\x1a\x61\xc3\xf9\x87\x83\x77\xd4\x59\x75\xde\x9a\xc4\x53\x46\x9d\xe1\xeb\xa3\x77\x2f\x8f\xcf\x5f\xbd\x3e\x3d\x7f\xfa\xfa\xdd\xab\x23\x87\xcc\x41\x2c\x35\xa1\x12\x77\x7a\xc7\xbe\x5e\xc7\x89\x48\x83\xbb\xd5\x6a\x47\xb6\x61\xe4\x6a\x27\xdb\x93\x96\x4e\x22\xeb\x17\x14\x9c\x42\x46\x6f\x3c\x62\xb9\x5d\x45\x84\x78\x96\xc9\xad\x6c\x42\x8a\x82\x46\x8e\x9f\xbb\x5e\x1e\x85\x63\x93\xb8\x32\xce\xed\xe2\x1f\xe9\x2e\x12\x52\xf7\x51\x78\x98\x18\xb7\x74\x61\xa3\x81\x23\x94\xc8\x3e\x2f\xac\xab\x56\x08\xa3\x3b\x2f\x18\xad\x93\xa3\xc2\x17\x9e\xc0\x77\x8e\xe4\xb7\x94\xaf\x16\x67\x87\x21\x1f\x13\x86\x3a\xf2\x4f\x5b\xfe\xf1\x5c\xf9\xf7\x00\x3e\x21\xc9\xf3\xe0\x2f\x24\xf6\xe4\x9f\xbe\xfc\xd3\x95\x7f\xf6\xe5\x1f\x7f\xbf\xaf\x7e\xf6\xe1\x99\xfe\x8b\xf0\x82\xcd\xdf\xc4\xf3\xdb\x59\x34\x9f\xd7\xeb\xce\x92\xab\x6d\x65\x5a\x58\x23\x4e\x62\x9e\xc6\x73\x56\xaf\xeb\x8f\xd6\x4d\x98\xf0\x72\x08\x39\xff\x7f\x00\xb4\x77\xad\x21\x49\xd6\x71\x1e\x87\x53\x36\x55\xa6\x82\xe2\x2a\xe4\xb5\x98\x4f\x58\x2d\x56\x87\x9b\xda\x75\x78\xc9\x5a\xb5\x53\xf9\x29\x43\x49\x7c\x11\x5e\xcc\x6f\xe1\x9d\xec\x29\x4b\xa3\x24\xbc\x98\xb3\xbd\x88\x0b\xc6\xa7\xfa\x89\xeb\x45\x78\x5b\xbb\x0a\xbf\xc0\xf3\x47\x29\xfb\xbc\x64\x7c\xc2\xd2\x5a\x34\xab\x49\xaa\xc4\xe4\xce\x91\x3f\xa0\x5d\x03\x6b\x68\x56\x33\xe8\xa8\x37\xb3\xe5\x6e\x1f\xb1\x69\x4d\x15\x16\x51\x38\x9f\xdf\xb6\x6a\x2f\x66\xb5\xdb\x78\x59\x9b\xc6\x35\xce\xd8\xb4\x26\x62\x40\xbc\x54\x7c\xad\x0d\xca\x38\x74\xad\xc5\x7b\x3c\x7e\x12\xf3\xd9\x3c\x9a\xe4\x46\xa2\x12\xd6\xc5\xed\x75\x98\xa6\x00\x4d\x5b\x53\xb6\x9c\xcd\x8e\xa7\xbb\xee\x0a\x5b\xea\x31\x55\xc3\x70\x39\x8f\x2f\xc2\xf9\x40\xfd\x04\x55\x39\x52\x36\x9f\x0d\xe4\x9f\xca\xd4\x9b\x88\x4f\xe3\x9b\x81\xfa\x09\xee\x56\x78\x45\xee\x3c\x37\xf0\x5c\xe2\x79\x81\xe7\x11\xcf\x0f\x3c\x9f\x78\xed\xc0\x6b\x13\x3f\xf0\x89\xbf\xdf\x0f\xfc\xfd\x3e\xf1\xf7\xf7\x03\x7f\x7f\x9f\xb4\x83\x36\xe9\x04\x1d\xd2\x0d\xba\xa4\x17\xf4\x48\x3f\xe8\x93\xfd\x60\x9f\x1c\x04\x07\xab\x31\xf1\x37\x67\x31\x43\x7e\x57\x4d\xcc\x83\xae\xfa\xe9\xab\x9f\x9e\xfa\x81\x34\xdf\xf5\xd4\x4f\x4f\xfd\xb8\x2a\x4d\x4d\x55\x57\xff\xa8\x19\xeb\xb6\xd5\x4f\x47\xfd\xa8\xd9\x7e\xa0\x43\x5d\xf5\xa3\x60\xaa\x45\xe1\xf5\xd4\x52\xe8\xa9\x85\xd2\xf3\x55\x9a\xfe\x51\x69\xfb\x1a\x8a\xfe\x51\x39\xf7\xf5\x4f\x47\xfd\x28\xe4\xf7\x7b\x78\x47\xfe\xa8\x36\xec\xef\xab\x1f\xdd\x3e\x8d\xb5\xae\x4f\x15\xe8\xa9\x66\xf6\x54\x81\x9e\x2a\xd0\x53\x05\xfa\xaa\x40\x5f\x15\xe8\xab\xda\xfb\xaa\xda\xbe\xaa\xb6\xaf\xa0\xf4\x15\x94\xbe\x82\xd2\x57\x50\xfa\x0a\xca\xbe\x82\xb2\xaf\x7a\xb0\xa3\x7a\xb0\xab\x42\x5d\xd5\x75\x1d\xd5\x21\x1d\x9d\x45\xb5\xbd\xa3\xfa\xb3\xeb\xcb\x16\xf9\x5d\xd5\x83\x6d\x15\xd9\x56\xe5\xda\xba\x9c\xab\x7e\x54\xcf\x77\x54\xce\x8e\xea\xeb\x8e\xca\xd9\x55\x59\xba\x2a\x4b\x57\xa5\x75\x35\x2e\x0a\x6b\x15\xf2\x14\x4a\x9e\x8e\xec\x29\xe4\xf5\x0c\x51\xa0\x3d\x85\xa0\xd7\xd1\x91\xba\x9c\x8a\xec\xea\x2c\xaa\xcf\x54\xed\x5e\x5b\xc3\x54\x5d\xd7\x56\x63\xa4\xba\xc0\x53\x98\x79\x0a\x79\x4f\x35\xda\x6b\xab\x6e\x55\xad\xf5\x54\xfb\x3c\xd5\x5a\x4f\x21\xef\xe9\xf6\xf9\xaa\x7d\xbe\xea\x09\x55\xce\x6f\xab\xd6\xb6\x55\x7f\xb6\x55\x7f\xb6\x55\xdb\xdb\xaa\x7b\x3c\x3d\xdd\x74\xb7\xaa\x9e\x50\x23\xed\xab\x91\xf6\x55\xdb\x7d\x35\x3f\x7d\x35\x51\x7c\x35\x35\xfc\xbe\x4e\x53\xc5\x7b\x7d\x18\x23\x35\xa5\x7c\x35\x89\x7c\x3d\x93\xd5\xbc\xf6\x3d\x5d\xad\xca\xe2\x29\x60\x9e\x1a\x4d\x4f\xb7\x41\x55\xe4\xa9\x1a\x7c\x55\x83\xaf\xa0\xf8\x0a\x8a\xaf\xa0\xf8\xba\xed\xaa\xb8\xdf\x93\xa4\x4a\xef\x7f\x94\xa1\x76\x1b\x88\x46\xbb\x1b\x78\xed\x2e\xf1\xda\xbd\xc0\x6b\xf7\x88\xd7\xee\x07\x5e\xbb\x4f\xbc\xf6\x7e\xe0\xb5\xf7\x89\xd7\x3e\x08\xbc\xf6\x01\xf1\x3a\x6e\xe0\x75\x5c\xe2\x75\xbc\xc0\xeb\x78\xc4\xeb\xf8\x81\xd7\xf1\x89\xd7\x69\x07\x5e\xa7\x4d\xbc\x4e\x27\xf0\x3a\x1d\xe2\x75\xba\x81\xd7\xe9\x12\xaf\xd3\x0b\xbc\x4e\x8f\x78\x9d\x7e\xe0\x75\xfa\xc4\xeb\xec\x07\x5e\x67\x9f\x78\x9d\x83\xc0\xeb\x1c\x10\xaf\xeb\x06\x5e\xd7\x25\x5e\xd7\x0b\xbc\xae\x47\xbc\xae\x1f\x78\x5d\x9f\x78\xdd\x76\xe0\x75\xdb\xc4\xeb\x76\x02\xaf\xdb\x21\x5e\xb7\x1b\x78\xdd\x2e\xf1\xba\xbd\xc0\xeb\xf6\x88\xd7\xed\x07\x5e\xb7\x4f\xbc\xee\x7e\xe0\x75\xf7\x89\xd7\x3d\x08\xbc\xee\x01\xf1\x7a\x6e\xe0\xf5\x5c\xe2\xf5\xbc\xc0\xeb\x79\xc4\xeb\xf9\x81\xd7\xf3\x89\xd7\x6b\x07\x5e\xaf\x4d\xbc\x5e\x27\xf0\x7a\x1d\xe2\xf5\xba\x81\xd7\xeb\x12\xaf\xd7\x0b\xbc\x5e\x8f\x78\xbd\x7e\xe0\xf5\xfa\xc4\xeb\xed\x07\x5e\x6f\x9f\x78\xbd\x83\xc0\xeb\x1d\x10\xaf\xef\x06\x5e\xdf\x25\x5e\xdf\x0b\xbc\xbe\x47\xbc\xbe\x1f\x78\x7d\x9f\x78\xfd\x76\xe0\xf5\xdb\xc4\xeb\x77\x02\xaf\xdf\x21\x5e\xbf\x1b\x78\xfd\x2e\xf1\xfa\xbd\xc0\xeb\xf7\x88\xd7\xef\x07\x5e\xbf\x4f\xbc\xfe\x7e\xe0\xf5\xf7\x89\xd7\x3f\x08\xbc\xfe\x01\xf1\xf6\xdd\xc0\xdb\x77\x89\xb7\xef\x05\xde\xbe\x47\xbc\x7d\x3f\xf0\xf6\x7d\xe2\xed\xb7\x03\x6f\xbf\x4d\xbc\xfd\x4e\xe0\xed\x77\x88\xb7\xdf\x0d\xbc\xfd\x2e\xf1\xf6\x7b\x81\xb7\xdf\x23\xde\x7e\x3f\xf0\xf6\xfb\xc4\xdb\xdf\x0f\xbc\xfd\x7d\xe2\xed\x1f\x04\xde\xfe\x01\xf1\x0e\xdc\xc0\x3b\x70\x89\x77\xe0\x05\xde\x81\x47\xbc\x03\x3f\xf0\x0e\x7c\xe2\x1d\xb4\x03\xef\xa0\x4d\xbc\x83\x4e\xe0\x1d\x74\x88\x77\xd0\x0d\xbc\x83\x2e\xf1\x0e\x7a\x81\x77\xd0\x23\xde\x41\x3f\xf0\x0e\xfa\xc4\x3b\xd8\x0f\xbc\x83\x7d\xe2\x1d\x1c\x04\xde\xc1\x01\xf1\x5d\x37\xf0\x5d\x97\xf8\xae\x17\xf8\xae\x47\x7c\xd7\x0f\x7c\xd7\x27\xbe\xdb\x0e\x7c\xb7\x4d\x7c\xb7\x13\xf8\x6e\x87\xf8\x6e\x37\xf0\xdd\x2e\xf1\xdd\x5e\xe0\xbb\x3d\xe2\xbb\xfd\xc0\x77\xfb\xc4\x77\xf7\x03\xdf\xdd\x27\xbe\x7b\x10\xf8\xee\x01\xf1\x3d\x37\xf0\x3d\x97\xf8\x9e\x17\xf8\x9e\x47\x7c\xcf\x0f\x7c\xcf\x27\xbe\xd7\x0e\x7c\xb9\x29\x79\x9d\xc0\xf7\x3a\xc4\xf7\xba\x81\xef\x75\x89\xef\xf5\x02\xdf\xeb\x11\xdf\xeb\x07\xbe\xd7\x27\xbe\xb7\x1f\xf8\xde\x3e\xf1\xbd\x83\xc0\xf7\x0e\x88\xef\xbb\x81\xef\xbb\xc4\xf7\xbd\xc0\xf7\x3d\xe2\xfb\x7e\xe0\xfb\x3e\xf1\xfd\x76\xe0\xfb\x6d\xe2\xfb\x9d\xc0\xf7\x3b\xc4\xf7\xbb\x81\xef\x77\x89\xef\xf7\x02\xdf\xef\x11\xdf\xef\x07\xbe\xdf\x27\xbe\xbf\x1f\xf8\xfe\x3e\xf1\xfd\x83\xc0\xf7\x0f\x88\xdf\x76\x03\xbf\xed\x12\xbf\xed\x05\x7e\xdb\x23\x7e\xdb\x0f\xfc\xb6\x4f\xfc\x76\x3b\xf0\xdb\x6d\xe2\xb7\x3b\x81\xdf\xee\x10\xbf\xdd\x0d\xfc\x76\x97\xf8\xed\x5e\xe0\xb7\x7b\xc4\x6f\xf7\x03\xbf\xdd\x27\x7e\x7b\x3f\xf0\xdb\xfb\xc4\x6f\x1f\x04\x7e\xfb\x80\xf8\x1d\x37\xf0\x3b\x2e\xf1\x3b\x5e\xe0\x77\x3c\xe2\x77\xfc\xc0\xef\xf8\xc4\xef\xb4\x03\xbf\xd3\x26\x7e\xa7\x13\xf8\x9d\x0e\xf1\x3b\xdd\xc0\xef\x74\x89\xdf\xe9\x05\x7e\xa7\x47\xfc\x4e\x3f\xf0\x3b\x7d\xe2\x77\xf6\x03\xbf\xb3\x4f\xfc\xce\x41\xe0\x77\x0e\x88\xdf\x75\x03\xbf\xeb\x12\xbf\xeb\x05\x7e\xd7\x23\x7e\xd7\x0f\xfc\xae\x4f\xfc\x6e\x3b\xf0\xbb\x6d\xe2\x77\x3b\x81\xdf\xed\x10\xbf\xdb\x0d\xfc\x6e\x97\xf8\xdd\x5e\xe0\x77\x7b\xc4\xef\xf6\x03\xbf\xdb\x27\x7e\x77\x3f\xf0\xbb\xfb\xc4\xef\x1e\x04\x7e\xf7\x80\xf8\x3d\x37\xf0\x7b\x2e\xf1\x7b\xff\x1f\x6d\x7f\xb6\xdd\xb8\xb1\x26\x0a\xc2\xf7\x7a\x0a\x11\x67\x17\x2a\x22\xf9\x11\x02\xc0\x39\xa8\x10\x4f\x3a\xad\xf4\xce\xda\xce\xa1\x9c\x69\xbb\x76\xd1\x2c\x2d\x88\x0c\x8a\x70\x92\x00\x37\x06\x4a\xb2\xc0\x5a\x3e\xff\xdf\xa7\xc7\xb5\xfa\x01\xfa\xa6\xcf\x6d\x5f\xf5\x3b\xd4\x9b\x1c\xf7\x8b\xf4\x8a\x09\x03\x09\x32\x65\x57\xb5\xbd\x56\x0a\x0c\x04\x62\x8e\x6f\x1e\x1c\xe2\xf6\x1c\x70\x7b\x2e\x71\x7b\x2e\xb8\xbd\x36\x71\x7b\x6d\x70\x7b\x1d\xe2\xf6\x3a\xe0\xf6\xba\xc4\xed\x75\xc1\xed\xf5\x88\xdb\xeb\x81\xdb\xeb\x13\xb7\xd7\x07\xb7\x37\x20\x6e\x6f\x00\x6e\x6f\x48\xdc\xde\x10\xdc\xbe\x4d\xdc\xbe\x0d\x6e\xdf\x21\x6e\xdf\x01\xb7\xef\x12\xb7\xef\x42\xbb\x4d\xda\xed\xdd\x14\xda\xb5\x24\x04\xc7\x8a\x7b\x30\xc8\x12\x81\x1b\xac\xc5\xca\x4b\xde\x7a\x9b\x1d\x3c\xb9\xfd\x36\x71\xfb\xed\xbc\xa5\x4e\x7d\x4b\x9d\x63\x2d\xf9\xc1\x6c\x95\xce\x59\x2c\x9a\xea\x10\xb7\xdf\xc9\x9b\xea\xd6\x37\xd5\x3d\x6c\x4a\x86\xa8\xb5\x58\x90\x44\xbe\x6a\xaa\x4b\xdc\x7e\x37\x6f\xaa\x57\xdf\xd4\x21\x8c\xd5\x4d\xdd\xb1\xe4\xfd\x7d\xf0\x21\x0a\x37\x2c\x4a\x1e\xbf\x66\xf1\x2c\xf2\x37\x49\x18\xc9\xc6\x7b\xc4\xed\xf7\xf2\xc6\xfb\xf5\x8d\xf7\x8f\x36\x2e\x04\xad\xb2\xa5\x3e\x71\xfb\xfd\xbc\xa5\xc1\x61\x4b\xfb\x2c\x88\x44\x71\x6e\x7f\x70\xd8\xfa\x87\x28\x5c\xfb\x31\xb3\x16\x7e\xc0\xc9\x6b\xde\xbe\xbe\xbe\xfd\x01\x71\xfb\x83\xbc\x9f\x61\xfd\x88\x87\x87\x6d\x4a\x39\xb3\xb5\xf1\xe6\xd7\xc1\x5c\x8c\x78\x48\xdc\xfe\x30\x6f\xc9\xb1\x6b\x9b\xe2\xe4\xd1\xf1\xa6\x3e\x26\x5e\x94\xf0\xc6\x06\x36\x71\x07\x76\xd1\x58\x0d\x3f\xc6\x1b\x73\x8f\x36\x96\x44\xfe\xfa\x3b\xff\x6e\x29\x5b\x73\x89\x3b\x28\xce\xb4\x53\x4f\x17\x73\x92\xed\x44\x6b\xdf\xb2\x85\x6c\xcc\x21\xee\xc0\x29\x1a\xab\xbf\x21\x83\xbd\x1b\xe2\xb4\x5d\x6c\x2d\x90\xe1\xc5\x8f\xc1\xec\x4d\xc2\x22\x2f\x09\x23\x43\x62\x6e\x97\x38\x1c\x62\x0d\xda\xc4\x1d\x88\x26\x6b\xae\x4a\xd1\xd6\x9e\xae\xaa\x60\x7b\x8b\x48\x35\x58\x32\xef\x9f\x1e\x37\x4c\xb2\xfa\xac\x69\x70\x86\x8e\xf3\x71\x5e\x2e\x93\x68\x14\x71\x36\xd8\x6e\x07\x4f\xbc\xe7\x9a\x9b\xa5\xf2\x71\x21\x77\x88\xcf\xea\x46\xa1\xe3\xd2\xab\x28\x85\xe5\x78\x39\xc6\x3b\x5d\x16\x21\x86\x0f\x46\x95\xc7\x5a\x69\x8a\xfe\x39\x44\xe7\x5c\x8b\x53\x73\x27\xf5\x20\x9c\x76\x1b\x23\x23\x0d\xe2\x59\xb8\xe1\xcc\x68\x2c\xd2\x59\x4b\x80\x51\x18\xc7\xa8\x4c\xd2\xc2\x0d\x80\xa1\x6e\x1b\x23\x1f\x22\x78\xda\x95\xb7\xa4\xb2\x8c\x93\x68\x3a\x61\x53\xce\xf0\x89\x0d\xe1\xec\x56\x1b\xba\x6d\xd2\x15\xdb\x51\x73\x8d\x2b\x97\x2f\x1f\x9c\x63\x63\xd4\xb0\x8f\x2d\x53\x49\xa6\x99\x34\x51\x30\x96\xa9\x0c\x94\x2c\x82\x38\x58\xf4\xcd\x99\x3f\xc7\xe6\xbd\xd6\x5c\xf9\x63\xed\x42\x24\xa5\x47\x48\xda\x5b\x7a\xc1\x4c\x44\x1e\xc3\x59\x96\x0b\x22\x23\xd3\x8c\x54\xfc\xff\xbd\x5d\x08\x9a\x06\x39\xf7\x83\x59\x18\x45\x4c\xb0\xc9\xdb\x70\xe6\x1d\x3b\x1f\x35\xf0\x41\xcf\xbe\xe7\xd6\x4f\x5c\x0e\xad\xf6\x00\x94\x8f\x65\x70\x2e\x13\x1b\xec\xf7\xda\x73\x49\xcf\xe5\xbc\x6c\x0d\x3c\xa9\xdf\x05\x4e\x3c\xfb\x62\x3b\x06\x18\x42\x51\x52\x19\xda\x64\x6a\xcd\xc2\xcd\xe3\x8f\x7e\xb2\xf4\x83\x2c\x3b\xee\xf9\x88\xc1\xa3\x21\xd2\x49\x0c\x30\xc4\xd4\x47\x0c\x3c\x0c\x29\xf5\x51\xc2\x1f\x56\x34\xd7\x50\xa8\x5a\x57\xee\x38\x2f\x9a\xb8\x53\x22\x37\x00\x66\xd2\x0c\x70\xed\x07\xa8\x90\x05\xaf\xc6\x1e\xf1\xd1\x0a\x3c\x8c\x5b\x29\x78\xad\x18\xc3\x82\x3a\xc2\xff\x26\xbd\x8c\x4d\x33\xbe\x4c\x9b\x33\xd3\x44\x0b\xda\x72\x20\x6d\xd2\x59\xcb\x81\x58\xfc\xc1\xa3\x59\xab\x75\x7e\x65\x8f\x70\xca\x37\x35\x18\x07\x93\x78\x4a\x83\x49\x3a\x25\x4a\x28\xcf\x0b\x78\xe5\x05\xff\x70\x91\x4b\x84\xe5\x19\x1b\x10\xc7\x19\x80\xe3\xba\xc4\x71\x5d\x70\xdc\x36\x71\x5c\x7e\xd2\xdd\x1a\x30\xfb\xc7\xd6\xb8\xbc\xfd\x5a\x44\x97\xe4\xcb\x1a\xd0\x10\x25\xf9\xb2\x7a\x07\x8b\x28\x56\xda\xbb\x72\x4a\x4b\xe9\xe4\x4b\x19\xf0\xf5\xf7\x8e\xac\xf3\x8a\xe6\xab\x9b\x8e\x03\xe2\xa3\x14\x02\x3c\x5a\x5d\xc5\x23\x9c\x4c\xe2\x66\x73\x4a\x73\xd3\xb9\xe4\x0b\x6b\x51\x83\x24\x8a\xe9\x3b\x6a\xfa\x9c\x5f\x0b\xd5\x3a\x1c\x99\xfe\xbe\x9d\x2b\xbf\xaf\x2a\x6e\x56\x0c\x29\x5f\x13\x7e\x8e\x7c\x94\xe6\x0b\x32\xa3\x21\xf2\x60\x25\xa4\xb8\xcc\x34\x83\x06\x0d\xe4\x2a\x8e\x56\x57\xb3\x11\xf6\x17\x08\xc5\x34\x9d\xcc\x9a\xcd\x29\x6e\xd0\x18\x6b\x4f\x53\xa9\xe2\xc9\x2b\xce\x9a\x4d\x51\x97\x65\xd9\x8c\x9f\x92\x14\x9b\x66\x3a\x99\x4d\x29\x2d\x22\x36\xf1\x77\x59\xa6\xcd\xc4\x1b\xcc\x34\x5b\xce\xae\xba\x30\x0e\x71\x5c\x47\x2f\x10\x5f\x98\x1a\x84\xa7\x17\x86\x33\xe4\x7c\x5d\xba\xf9\xa9\x68\xf3\xfd\x55\x0b\xc5\xf1\xa0\xdb\x3b\x8e\x45\x54\x22\x7c\x4a\x19\xa4\xd4\xe5\x7f\x56\xb4\x4d\x85\x05\x69\x87\xff\x59\xd0\x1e\xff\xb3\xa4\x5d\x61\xdc\xb6\x80\x0d\x4d\xb2\x2c\x0f\xa2\x5f\x5a\xe1\x18\xe6\xc5\xb9\x5b\xc3\x23\x6c\xf9\x89\xc3\x70\x47\x7d\xb4\xc5\x70\x4b\x23\x14\xc3\x1c\xda\x18\x6e\xa8\x87\xee\xf2\x95\xbf\xa7\x36\x5c\xd3\x60\xbc\x41\x09\xdc\x60\x92\x8a\x07\x1b\xab\xd3\x35\xba\xb9\xba\x1f\xdd\xab\x55\x5d\x66\xd9\x3d\x5f\xd5\x3b\x6c\x9a\xe8\x91\xde\xa2\x35\xbd\x9b\xdc\x4f\xe1\x1e\xb6\x18\x18\xe6\x75\x02\x7c\x3d\xb9\x9f\xd2\xc7\x3c\x38\xe4\x23\xae\x66\x0d\x39\x6f\x13\xbd\x77\xc2\xa4\xec\xbc\xab\xed\xc8\xd6\xf2\x77\x4f\xff\xbe\x97\xbf\x5d\x72\x2d\xb3\xb7\xac\x95\x3e\xcf\x5f\xa0\x99\xde\xff\x3c\x2e\xda\x62\xdc\x72\x88\x30\x37\x9d\x91\x6b\xb9\x9b\xd5\xe3\x0d\x9c\xa9\xea\x41\xbb\x4b\xda\x5d\xe8\x0e\x48\x77\xc0\xf7\xb5\x86\xea\xc8\x0f\x7c\x47\x9f\xf7\xb6\xdc\x58\xbe\xc1\xde\xa9\x6b\x2f\xd0\x52\x0c\x29\x7e\x12\x78\x5e\xea\x1e\x7c\xc4\xe4\xe9\x5e\x71\x48\xe7\xa1\x55\xbe\xf0\x4b\x9a\x8e\x17\x2d\x87\xd8\xb0\xa1\x29\x1f\xbe\x23\x9c\xb0\x2e\x5d\xe1\x46\x3c\x1a\x09\x24\xb2\xe4\xeb\x3d\xc3\x4f\x31\x9d\x4d\x96\x53\x58\x36\xe9\x46\x26\xde\xd8\xf1\x97\x4d\xba\x81\x74\xbc\xbc\xb4\xc9\xe2\x92\x2e\x0f\x70\x8d\xf1\x1d\x9b\xa7\x33\x76\xce\x29\x93\xf5\x26\x79\x3c\xf7\x38\xd1\x70\x7e\xef\x27\xcb\xf3\x20\x3c\xf7\x03\x3f\xf1\xbd\xd5\xb9\xa0\xc0\x0d\x99\x48\x75\x94\x8e\x97\x57\xd4\x26\x8b\xab\xe5\x88\x37\x8f\xe5\x00\x4c\x13\xc5\x34\x41\x31\xc8\x51\xc0\xaa\xb0\x1a\x89\xeb\x16\xdb\xe9\x10\xa7\x53\x2c\xf3\x09\x12\xab\xe7\xca\x65\xee\xd9\xea\xfa\x08\x6a\x27\xde\xb0\x99\xcf\x29\x9d\x23\x00\x46\x26\xbb\xc9\x35\x28\x22\x2a\xdd\x21\x55\x88\x12\xca\xac\x59\x18\xc4\x49\x94\xce\x92\x30\xc2\x59\x96\x34\xa8\x24\x9d\x4c\xb3\xe1\xa3\x92\x75\xb1\x70\xc0\xc9\x63\xda\x45\x22\x8a\x9c\x8e\x8a\x9b\x50\x91\x2f\x55\x44\xbe\xcb\x23\xc6\x95\xd4\x9b\xa2\x41\x92\x94\x09\xa9\x9e\x4d\x7a\x36\xe4\x88\xfc\x04\x79\xe7\x76\x8f\x43\x07\x8d\xc2\xd8\x3d\x12\xc4\x04\x4a\x04\xc5\xe4\x72\xbe\x99\x37\xfb\x6c\x2a\x4d\x9d\xe5\x9e\x02\xdd\xdd\x3e\x3f\xca\xda\x78\x03\x62\xfa\xb4\x2b\x8d\xe1\xb5\x6a\xd2\xba\xf5\x83\x79\x99\x58\xd0\x5e\x36\x05\x4e\xf3\xf6\x0d\x3f\x1c\x8e\xa9\xf6\x0c\x16\x23\x1a\xf0\x5d\x98\x79\x09\xda\xaf\x8f\x2b\xa1\xa3\xcb\x94\x5c\x3a\xde\x9f\x99\xa0\xf6\x38\xb1\x76\x1e\xe3\x02\xd2\x45\x74\x32\x05\x19\x61\x2f\x11\x11\xf6\xa2\x89\x3f\xa5\x86\x37\x31\x9a\x7e\xd3\x98\x1a\x67\xf1\x24\x99\xe6\x53\x42\xc6\x6b\xf0\x0c\x30\x8a\x85\x3d\x7f\x8d\x8c\x66\x64\xfd\x1c\xfa\x01\x32\xc0\xc0\x4d\x03\x1b\xb9\xda\x8d\x7f\x8b\x18\x04\x78\x87\x12\xd0\x2a\x34\x88\x30\x09\xf9\x6f\x60\x78\x57\x9c\xc1\xf2\x59\x32\x4d\x94\x96\x74\xc4\xe5\x57\x90\x8a\x63\x22\xef\x47\x9f\x74\xfb\xc5\x21\xa9\xa1\x7e\x4b\x8c\x88\x04\x46\xe2\x76\x68\x2b\xab\x4f\xde\x9d\x48\x09\x6c\xbc\xd4\xeb\x69\x50\x1a\xa1\x43\x95\x6c\xbe\xde\x3b\x84\x4f\x5e\x29\x8e\xa7\xcf\x0e\x8d\x05\x8c\xef\x73\x35\x0e\x51\x97\x82\x8d\x8d\x77\xe9\x6a\x25\xa2\x59\x54\xa2\xff\xa2\x60\xef\x10\x27\xd1\x63\x6e\x34\x39\x49\xa6\xbb\x99\x48\x0b\x1f\xe0\xa7\xdd\x0e\x25\x54\x4a\x01\x38\x90\xf4\x31\x1e\x07\x24\x1c\xf3\xbb\x47\x8c\xf7\x3a\xe5\x17\xf2\x04\xbd\x80\x4d\xb3\x46\xdb\x99\x88\xf3\xc4\xd8\xb8\xb4\x04\xc4\x2b\x5f\x44\xcd\x61\xb9\x47\xc9\xf8\xa7\x5d\x6e\xb6\x76\x9a\x9c\x51\xe1\x13\x19\x56\xb1\x07\x07\xc2\xc6\x5d\x72\x09\xed\xe7\x92\xea\x03\x1b\x5b\x0b\xb1\x97\xfd\xa1\xbc\x8c\x43\x85\x57\x38\x21\x21\xd8\xe6\x01\xbf\x43\x0c\x75\x86\x9c\x48\x62\xa8\xd7\xe3\x08\x84\xa1\xde\x80\x63\x10\x86\x1c\xbb\xc3\x91\x07\x43\xed\x21\x86\x0d\x6f\xa8\x8b\xad\x85\x17\x27\x7f\x61\x8f\x30\x17\x87\xc4\xc6\xb0\xa6\xcb\xb1\x71\x13\xf3\xfd\xf1\x7f\x61\x06\x3c\x1e\xc9\xba\xb7\xe1\xa8\x8a\xf3\xb2\xaf\x0d\xce\x32\xe1\xc2\x55\x8c\x73\x88\x32\x78\x1f\x65\xd6\xcd\x62\x14\x8c\x02\x1a\x58\x81\xc0\xf2\xd6\x67\x5a\x44\xfa\x0c\xca\xc0\xe3\xe9\x8e\x25\xaf\x0a\x90\x4b\xf6\xd0\xe3\x4a\xf6\xcc\xe7\x53\x7a\x13\xe1\xa7\x18\x31\x98\x41\x02\xc6\x8d\x6f\x60\x60\xd6\x4d\x42\x13\xfe\xc7\xa7\xbe\xb0\xd9\x11\x65\x0b\x05\x7e\xf9\xf3\x2a\x7f\x9e\xac\xa7\x54\xc7\x0f\x8f\x4c\x33\x45\x11\x04\xc0\x26\xab\x29\xbf\xa0\x39\x80\x09\xd1\xac\xb8\x86\xf0\x34\x5b\x31\xaf\x34\xba\x02\xa0\x30\x3a\x97\xba\xcf\x84\x03\x38\x3e\x02\x88\xe4\x02\x44\xa3\x88\x46\x56\x80\x23\x2b\xa2\x0d\x1b\x22\x6b\x63\x9a\x28\xb2\x36\x34\xb2\x36\x56\x90\xe3\x8e\x9c\x1b\x89\x2c\x7f\x7a\x26\x46\x7d\x38\xdc\x9d\xaa\x76\xe0\xc3\x18\x94\xba\x8f\xe8\x23\x0a\x80\x89\xfd\xc9\x7d\xfa\x22\x2b\x80\x90\x77\x79\xa6\x3b\x12\x5b\x65\xf9\x53\x50\x03\x0b\x4d\x13\x85\x56\x40\x7d\x0c\xbe\x69\x22\xdf\xda\xd0\x10\x43\xc0\x07\xc2\xd7\x07\x89\x27\x5f\x94\xac\xf2\x92\x95\xa8\x33\x59\x4f\x5b\x2d\x05\xfd\x1a\x8d\x68\x07\x8b\x30\xba\xf6\x66\xcb\xca\x30\xf3\x01\x16\x69\xf6\x20\xa2\x1e\xe7\x13\xf7\x39\xc3\x7a\x76\xa6\x8d\xf9\x51\x1a\x07\x56\xa0\xd3\xc6\x8c\x04\xcd\x13\xa1\xc0\xda\x42\x60\x7d\x96\x51\x77\x47\x81\x69\x06\x56\x34\xc2\xfc\xdc\x6d\x76\xb0\xf4\x62\x52\x13\x6d\xa6\xf1\x88\x8a\x25\x63\xc2\x71\x73\x69\x9a\x51\x65\xbb\xd5\x25\xe0\x87\x93\x1c\x82\xc7\xfc\xf3\xc9\x7a\xca\x3f\x9f\xf1\xdd\x59\x90\xa3\x71\x61\xa8\x08\x0c\x5c\x9c\xac\x71\x68\x6d\x69\x40\x90\xd8\xe6\x90\x3e\xf9\xc4\xe7\xf7\x4a\x44\x8d\xff\x4c\x12\xd8\x92\x00\x36\x44\x9c\xa2\x15\x04\x7a\x15\x22\xd2\x70\x76\xe2\x54\x67\x19\x12\xc7\x24\xc4\x10\x89\x23\x15\xf0\x47\x7e\x50\x9a\x4d\x90\x17\x93\x6f\xa4\xb8\x93\xfe\x94\x86\x18\x03\xdb\xc1\x1d\x4b\xae\x83\x24\x7a\x24\x8f\x10\xb3\xe4\x63\x12\x85\xc1\xdd\xc1\x98\x57\xe2\xa1\x54\x1a\xe0\x27\xb9\xe6\x09\x9d\x17\x61\x9c\xad\x9b\xcf\x54\xc7\x06\xd2\x27\x75\x07\xb5\xb7\x43\x55\x87\x3c\x36\xec\x28\x31\xcd\x84\x6f\x53\xc2\x11\x5d\xd5\x9f\x2a\x29\xc2\xc4\xd1\x84\x26\xe3\x24\xdf\xf2\xc4\xba\x59\xe0\xf1\x0c\xd9\x60\x7c\x66\x8f\x1c\x71\xb1\x71\x62\x7d\x26\xd2\xf0\x56\xff\xde\x92\x49\xc2\x8f\x83\xb5\x9d\x62\x1d\x3c\x56\xd3\x60\x30\x43\x8e\x30\x19\x1b\x1b\x4a\xd6\x6d\xe4\x5f\x43\x23\x10\xab\xbf\x10\x14\x93\x30\x30\xe8\x10\xc7\xee\x80\xd3\xb6\x89\xd3\xb6\x81\xb3\x7a\x03\xc5\x0d\xb4\x87\xa4\x3d\x84\xce\x90\x74\x86\xd0\xeb\x91\x5e\x0f\x7a\x03\xd2\x1b\x40\xbf\x4b\xfa\x5d\xe8\x0f\x49\x7f\x08\x03\x9b\x0c\x6c\x18\x0e\xc8\x90\x13\xb4\xed\xe7\x0a\x0d\x38\x6c\xf7\x15\x88\xbe\x63\xc9\x8f\xcc\xfb\x2c\xa9\xdc\xa1\x84\xf9\x3d\xb7\x1e\xe6\x73\x9e\x83\xc3\xc8\xae\xab\x60\x3e\x07\xe9\x4b\xba\x42\x5d\x0e\xf2\x57\xa8\x87\x61\x4e\x6d\x58\xd7\x7a\x26\x58\x37\x2b\x79\xa2\xa4\xe5\xd3\x23\xde\x41\x25\x4f\x9e\xf4\x38\xa4\x93\xe9\x0e\xb6\xf5\x04\xe7\x12\x31\xcb\xab\x0d\xbb\x3b\xb1\x39\x2f\x9d\xec\xf0\xee\xac\x24\x7d\xa4\xd5\x8b\x95\x13\x8a\x5b\xe5\x0e\x26\x20\x58\x8e\x2f\x92\x89\x33\x3d\x7e\x9b\xf3\x6f\x76\xfc\x58\x93\x3a\x76\xb9\x68\x36\x18\x07\x13\x47\x47\x91\xb5\x3c\xc9\x28\x4e\x18\x24\x53\x7c\x14\xc2\x26\x54\xa6\x37\x2d\xcf\xb0\x94\x3d\x55\xce\x90\xe5\x88\xe3\x5f\x75\x30\x0c\xcf\x8a\x37\x02\xef\x27\x9c\xca\x6d\x34\xfe\x95\x13\xfc\xcf\x46\x7c\xa1\xec\x7c\x55\x8b\xf8\x56\xb5\x88\x6f\xde\x6c\x56\x10\xdd\x01\x86\x0b\xab\x18\x2e\x42\xab\x32\x86\xab\x99\x3e\x27\xa1\xbd\x22\x18\x47\xc3\x51\x99\xd9\xfc\x52\xca\x5d\x4e\xf1\x05\xe3\x35\x5a\x68\xa0\x88\x2d\xd9\x12\x62\x98\x04\xa6\x39\xcb\x23\x94\xf9\x38\xb7\x87\x0d\x26\xaa\xa8\x66\x63\xff\x60\xa7\x4b\xe1\xaa\xbd\xdf\x23\x07\xcf\xab\x13\xe0\x99\xfa\x48\x48\x3d\x0a\x93\x50\xd1\x76\x34\x5e\x0b\xba\x8d\x25\x2a\xfa\xf5\x84\xaf\xf0\x94\x06\x1c\x90\xa6\x8b\x38\x09\x23\x46\xd6\x92\x6e\x2c\x03\x08\x67\x48\x9c\x21\xb8\x6d\xe2\xb6\x15\x80\xe8\xba\xa4\xeb\x4a\x9a\x5d\x01\x88\x1c\x28\xd4\x48\xcf\x6a\x81\x42\x57\x49\xd2\x3a\x4a\xb0\x30\x54\xc0\x80\x03\x8b\x58\x02\x8b\x0a\x30\xe0\xc0\x61\xa6\x80\x05\x07\x06\x9d\xae\xa4\xff\x7a\x7d\x49\xff\x39\x76\x17\x0b\xc2\xaf\x7b\x54\xd0\x04\x01\x08\x91\x90\x5c\xa5\x3b\x1a\x4d\xd8\x14\x6e\xe9\x1d\xdc\xd0\xc7\xb1\x11\xb3\xc4\x20\x86\x37\x9f\x1b\x70\x4f\x6f\x4d\xf3\xb6\x74\x8c\xae\xe9\xd3\x0e\x1e\x6a\x22\x83\xdf\x4f\xd8\xf4\x2c\x44\xf7\xc0\xc0\x90\xa7\x40\xc0\xec\x9a\x2b\x8d\xb6\xa6\xd9\x98\x49\xa3\xee\xa4\x64\x5c\x26\x79\x0b\x9b\x30\xbc\x23\xc6\xd2\x8b\xff\x5d\xdf\xdf\xb1\xe4\xc8\xf7\xe7\xfa\xf3\xb1\xbc\x47\xe4\x68\x1b\x9e\x88\x7e\x53\xdb\x46\xfd\x37\xd2\x95\x8c\x54\xd1\xeb\xa9\x2f\x20\x50\xdf\x60\x91\x60\xa0\x86\xa3\xb9\x35\x4d\xb4\xcd\xb2\x7b\x4b\x51\x5e\xa6\xd9\x58\x94\x39\x3a\xc4\x41\xfa\x2d\xd6\xea\x5d\x84\xad\x80\x3d\x88\xac\x0b\x58\xee\xcc\x47\x01\xf4\x6f\xe1\x3d\xfd\x38\xb9\x99\xa2\xed\xf8\x69\x47\x5a\x36\x38\xb8\x41\x3f\xc2\x4b\x5a\x69\xec\xa3\xb8\x65\x22\x86\xfa\x67\xba\x44\xe5\x79\x8b\x46\x10\x07\x2f\xf0\x96\x36\xb6\xa6\x59\xf9\xb0\x20\x07\x64\x67\x09\xed\x8e\x92\x56\x6b\x84\x19\xef\x33\x29\x88\xa3\x06\x13\x5d\xb4\x6c\x0e\xa7\x3e\x67\x19\x42\xb7\xb4\x94\x62\x59\xd1\x28\x09\xdc\x72\x68\x2e\x2f\xc8\x5c\x4c\xf1\x0e\x12\xb8\xdd\x4b\x28\x16\x70\xd0\x17\xc0\x23\x44\x93\x9b\x29\x44\x18\xa2\x1d\xc6\x25\x2c\x74\x0f\xf7\x65\x71\x0f\xbd\xc5\x80\x5e\x66\xd9\x5b\xce\x8f\x3f\x20\x7d\x4a\x31\x3c\x20\x71\xdc\x30\x3c\x9a\xe6\x03\x12\x47\x07\x63\x40\x6f\xb3\xec\x3d\xe6\x25\x37\x18\xb6\xa6\x79\x6f\x09\x1e\x21\x87\x71\xea\xb7\x14\x42\xde\xd2\xb5\x55\x05\xf8\x28\x01\x06\x8f\x70\x83\xc1\x43\xe5\x0b\x14\x60\x88\xad\x77\xd7\xd7\x5f\xd3\x46\x1e\x9a\x64\x83\xf8\x7c\xe1\x7a\xc2\xa6\xf4\x16\x7c\xe4\x5b\xdf\x34\x7d\xeb\xc7\xa6\x6f\xbd\x7e\x81\x6e\x1b\xf4\x0e\xc3\x35\x86\x6d\x96\xad\xad\x9c\xb4\xe3\x9f\xc0\x23\x86\x5b\x49\xce\x74\x89\x63\x77\x15\x94\xea\xb4\x49\xa7\x0d\x9d\x2e\xe9\x74\x35\x94\x72\x48\xd7\x81\x6e\x8f\x74\x7b\x0a\x56\xf5\xfa\xa4\xd7\x2f\x43\x2c\x18\x0e\xc9\x90\x73\xc6\xed\xa3\xc2\xed\x12\x72\x53\x06\xad\xc4\x70\xad\x9e\xd5\x35\x76\x67\xfb\x19\xda\xce\x6f\x6e\x98\x69\xa2\x9b\x1b\x46\x23\xac\x78\xe2\x1a\xe9\xea\x31\x9e\x58\x00\xc4\x61\xff\x94\x1e\x51\x88\x7e\xd8\x38\xb2\x16\xa2\xc4\x47\x36\x04\x18\x13\x36\x49\xa6\x54\x28\x79\x14\x8d\xd6\x27\xc3\x3e\xef\xfd\x84\xd0\xd1\xe9\x9c\xea\x88\x73\x5b\x88\x95\x25\x7c\x39\x57\xac\x53\x60\x07\x4a\x98\xed\x90\x7d\x41\x7c\x50\xa2\xc3\xf2\x6c\x0b\x3b\x2d\xca\x3e\xa8\xcd\x29\x80\x83\xfa\x10\xe9\x2f\xda\x75\x5f\x94\xdc\xfc\xca\xdf\x00\xc7\x8e\x47\x23\x8c\x30\xe5\x63\x94\x94\x1c\x8c\x76\xb9\x28\x8a\xaf\x57\x8d\x8c\xb2\x76\xb7\x3a\x42\xe1\xb1\x97\x5b\xf7\x4e\x66\x72\x86\x70\xff\x45\xc9\x41\x0f\xbc\x5a\x72\xf5\x6a\x38\x66\xc4\xb0\x8d\x26\x2b\xcb\x11\x6a\xc4\x58\x86\xdd\x1e\x74\x5b\x76\xbf\xe5\x76\x3f\xd9\x7d\x62\xf7\x48\x7b\x68\x0d\x87\xc3\x7f\x36\x1a\x34\x94\x0b\x91\x3b\xca\xb5\xba\xcc\x69\xb7\x38\x7f\x80\xb3\xac\x51\x69\x6c\xbf\xea\x3b\xef\x1d\xaf\x36\x2e\x55\xe1\x24\x8b\x1f\xbf\xf6\x03\x3f\x61\xc8\x2f\x45\x7e\xd2\xfa\xdc\xef\xbc\xe0\x4e\x0b\xd9\xdf\x48\xcf\xb1\xf3\xc4\x5f\x33\x2d\x4b\x3f\x2b\x78\x25\x48\x28\x53\x49\x13\x5f\xa7\xab\xd5\x5f\x65\xea\xc6\x20\x2f\x7c\x5b\x49\xdc\x0c\x11\x4d\x54\x9c\x8f\xe4\x4a\x66\xc1\x6d\x96\x03\x71\x44\x4d\x64\xd8\xfc\x3f\xa3\x99\xa7\x63\xe3\xd4\x92\x94\x48\x45\xe3\x56\x8f\xb4\x3a\xb8\x69\xb4\x8c\xa6\x87\xf2\x2e\xf2\xf4\x9f\x7b\x2f\xa4\x13\x2f\x6e\x1a\x9f\xca\xa5\x7f\x96\x99\xa8\x31\xef\xb8\xdc\x8a\x4e\x47\xbd\xff\x22\x0f\x5d\x82\x9b\x86\x65\x34\x51\x70\x35\x1c\x8e\x03\xb1\xa5\x1e\x0a\x78\xe9\x3f\x1b\x3b\x12\xee\xe0\x49\x80\x28\x7e\xd6\x9e\x2d\xb8\xd6\x72\x4f\xf7\xc8\x8d\x95\x76\x18\x79\xde\x22\xca\x4c\xb3\xb0\xca\x10\xbf\x54\x20\x02\xf1\xf3\x50\x43\xf2\x26\x37\x02\x58\xfa\x41\x52\xca\x38\x83\xb4\x90\xbb\x68\x8e\x49\x73\x05\xb7\x43\x1c\xb7\x23\x49\x43\x3e\x97\x67\x1a\x2d\x94\xf2\xec\xd5\x8c\xe3\x95\x17\xfc\x7d\x72\xce\x0f\xda\xf9\x9a\x25\xcb\x70\x7e\x1e\x06\xe7\x22\x3c\xc2\xbe\x3d\x42\xbb\x46\x90\x59\xf4\xd7\x10\xf7\xb3\x46\x04\xdc\x6f\x28\x51\xab\x72\xd7\xd3\xd6\x5c\xe8\x69\x07\x86\x77\x54\x34\xd2\xdf\xed\xb0\xe5\x09\x1b\x7d\xbd\x79\x9d\x1a\x51\xe7\xbe\x36\xa7\xeb\x60\x6b\x1e\xce\x04\x9c\x81\x90\x46\x88\xf3\x0a\x11\xbf\x4a\x11\xf3\x12\x76\xbd\x62\xfc\xcd\x17\xd4\xc7\xe1\x78\xaf\x3e\xe7\x07\x9e\x04\xd0\x92\xf8\x4d\x4b\xce\x3b\x35\xec\x78\xd1\xb2\x51\x22\x09\x38\x73\x52\x32\x65\x03\x3f\xfe\xa0\x21\xd5\xfb\x05\x6c\x54\xf1\x9b\xf8\x3a\x48\xd7\x4c\xb8\x7e\x80\x8e\x54\xab\x60\x98\x16\x15\x83\x76\x10\x16\x5c\x61\x22\x74\x07\x72\x83\x3a\x27\xb4\xe8\x03\x25\x0f\x18\x74\x25\xe9\x3f\x38\x62\x60\x54\x68\x5a\x18\x87\x15\xbe\xb5\x10\xba\x41\xac\xe9\x2e\x0f\x62\xca\xab\x41\x4a\x43\x6b\x01\x2b\x6a\x8f\x72\x99\xdb\x6a\x84\x53\x25\xa9\x06\x8f\xc6\x93\x55\xb3\x39\x15\x94\xb3\x60\x8e\x3d\x5c\x31\x06\x18\x74\xc9\xa0\x0b\x83\x01\x19\x0c\x60\x30\x24\x03\x7e\xa2\x3b\x27\xb4\xdd\x9a\x77\x69\x6b\xa5\xa8\x52\x76\x73\x1e\x26\x56\x42\xec\xb4\x36\x1c\xb3\x88\x0a\x00\x4b\xce\xb1\x98\xa9\xf5\x9a\x33\x2c\x66\x6a\x7d\x03\x6b\xf1\xf7\x23\x3c\x8a\xbf\x1f\x60\x2b\xfe\x7e\x05\x77\x74\x3e\x8e\xc8\x7a\x1c\x4d\x92\x69\x96\x21\xfe\x87\x3e\xed\x30\x41\xb2\xe0\x69\x57\xa2\xfc\xe0\x96\xce\xc7\x3e\xf1\x65\x55\x5f\x55\x85\x1b\x5a\x22\xc4\xb2\xac\x4c\x96\xf1\xf7\x42\x7c\xb9\xe2\x54\xc5\x5c\x26\x84\xc2\x10\xe0\x05\x45\x68\x46\x1b\x1b\xd3\xbc\x33\xcd\xdc\x94\xe8\x6e\xb2\x9a\xe2\xf1\x1d\x09\xf0\x64\x35\x85\x25\xdd\x9a\xe6\x6c\x1c\xa3\x05\x44\x98\x3c\xd6\x6a\x26\x16\xe3\x18\xe5\x8a\x34\xbe\x1b\xb0\xc0\x64\x01\x77\xa6\xe9\xa1\x3b\x58\xc1\x02\xf8\x34\xbf\xc7\x70\x3b\x59\x4d\x1b\x74\x61\x9a\x21\xba\x85\x15\x2c\x05\x55\x7a\xa3\x0b\x11\x7f\xa2\x0b\xbc\x3b\x8b\xac\x59\x18\x31\xea\x43\x6a\xbd\xa6\x0e\xa4\xd6\x37\xd4\x85\xd4\xfa\x48\x3b\x90\x5a\x1f\xe8\x00\x52\xeb\x2b\xea\xf4\x20\xb5\x7e\xa4\x6d\xfe\xe6\x7b\xda\xe3\xaf\xbe\xa3\x8e\x3b\x28\xc9\x29\xd2\x1d\x3c\x09\x43\x3e\xad\x0b\x97\xa4\x62\x9b\x74\xdb\x39\x49\xd8\x39\xa5\x17\x17\x2a\xa8\xb5\x97\xcc\x96\xa7\xd5\xb3\xf4\xc2\xba\x38\x4b\xa2\xc7\x27\xe3\xc2\xba\x30\x26\x6c\x8a\x12\x5c\x28\x7f\x4a\x5a\xa1\x64\x12\x4d\x69\xc3\x81\xc6\x61\x45\x1f\x3f\x69\x9a\xa6\x62\xa8\xc6\xc7\x58\x43\xdf\xd5\x8f\xa6\xe8\xaa\xd1\x60\x48\x37\x9d\x14\xe1\xca\x77\x0a\xb4\x76\xbe\x44\x02\x49\x37\x8c\x42\xba\xa7\xb0\x53\x57\x5d\x06\x4e\x19\x09\x4d\x8e\x62\xe4\xf9\x52\x09\x4e\xde\xb1\x1d\xce\xca\xc7\x25\xc5\x36\xcc\x68\x23\x44\x7b\x9a\x52\x26\xd6\x2c\xa7\xd8\xd8\x03\x9b\x1d\xc6\xae\x9a\x4c\x8b\x1a\x77\x51\x98\x6e\x62\xfa\xe4\x11\xa3\x6f\xec\x80\xed\xc0\xe8\x73\x4c\x67\x18\x79\xc4\x31\x06\xc6\x9f\x2e\xbd\x2b\x83\x73\x72\x8b\xc3\xd6\x2e\xd0\x98\xe0\x0b\x41\xa4\xf0\xee\xce\x0e\x7b\xcd\xf9\x59\x45\x40\x72\x9a\xa6\x44\x43\xea\xe4\xfe\xde\xad\x06\x85\x05\xce\x72\x29\xa5\xda\x96\xcc\x34\x0d\xcf\xe0\xbf\x27\xf6\xd4\x34\x8d\x5b\xf9\xec\x4c\x77\xe8\x14\x2d\x2e\x43\x9f\xc5\x1c\xd4\x6d\x6a\x16\x2c\xa1\x4f\xb9\x0a\x36\x99\x2c\xa7\x35\xe3\xee\xef\xa0\xdf\xa0\x86\x3e\x57\x18\xe6\x74\x33\xae\x6b\xa9\xe1\x40\x40\x2f\xbc\x7c\xfd\x83\xa3\x2b\xa1\xd3\xd5\xee\xc0\x10\x33\xd6\xde\xcc\x41\x85\xfb\x7c\x12\xde\xcc\x45\x81\xb8\xc8\x07\x8d\x05\x3b\x0c\xc1\x64\x39\x45\x86\x81\xa1\x91\xec\xb4\xe1\x8d\x70\x73\xdd\x64\x59\x63\x9e\x65\x86\xda\x4b\xd5\x4f\x63\x96\x65\x95\x8e\x1b\x0b\x39\x87\x35\x3f\x3e\x93\xe5\x14\x1e\x69\x80\x3c\x58\x82\x98\xf5\xa9\x30\x21\x89\x9c\x23\xa5\xe9\x78\x63\x9a\x0d\x7f\xfc\x34\x0f\x03\x46\x1a\xb6\x44\x6f\x64\x5d\xe1\x49\xc8\xde\x5b\xc5\x7d\x04\x22\x93\x71\xfe\xd6\xd9\xed\x30\x6c\xe9\xe3\xc4\x9e\xc2\x1d\x7d\x9c\x38\xd3\xb3\x08\x69\x7b\xe7\x1c\x62\x33\xd8\x62\xf0\x91\x0c\x87\x5c\x2a\x5f\x82\x4b\x69\x32\xae\x15\x4b\xdf\x69\xb4\xa6\x84\x84\xbb\x1a\x01\x72\xb5\x12\xde\x69\xf1\xbf\x43\x1c\xdb\x81\x5c\x2b\xac\x5c\x29\xda\x03\xd2\x1e\x28\xce\x79\x0f\x04\xfe\x0e\x12\xb5\xee\xfc\xea\xfb\xa5\xc9\xc8\x84\x16\x44\x3c\xb3\xa4\xf3\xa4\x69\xa2\xa4\x49\x8d\x3b\x21\xf7\xf5\xef\x82\x30\x62\xaf\xbc\x98\xa9\x62\x29\x0e\x5e\xa7\xab\xc4\x5f\xf9\x81\x2e\x5d\x8b\xd2\x34\xf0\x67\xe1\x5c\x97\xa5\xa2\x2c\x4e\xfc\xd9\xe7\x47\x55\xf4\x68\x60\x90\x06\x29\x8a\x4c\xed\x7c\xc9\x9c\x3e\x27\xe1\xec\xaa\xad\x88\x30\x63\xab\xe8\xa7\x05\x02\xf0\xe3\x57\xc2\xa4\xe3\xe3\x26\x62\xde\x9c\x53\x4a\xb5\xd8\x40\x39\x81\xab\xa0\x40\x1c\xfd\x17\xc2\xa3\x39\xac\xe1\x91\xce\x60\x4b\x6d\xb8\xa3\x8d\xc6\x92\xe3\xc6\x25\x6c\xa0\x8d\x47\xdb\xcb\x95\x34\x80\xda\x4a\x33\x3e\xfe\x38\xa7\x77\xe3\x3b\x94\x4e\xb6\x53\xd8\x42\x80\x89\x78\x5a\xf3\x7b\xeb\xa3\x39\x36\x4d\xb4\xa6\x39\xc2\x46\x6b\x3a\x9f\xc4\x53\x3c\x6e\x34\xd6\x24\x42\x73\x8c\x61\x6d\x9a\x8b\x2b\x1b\x3f\x52\x39\xa4\x39\x84\x68\x9e\x1b\x63\x3d\xc2\xa2\xe5\xe0\x96\x23\xec\xd6\x78\x67\x8f\x57\x74\x68\xdb\x7d\x67\x38\x74\xbb\x9d\x7e\xc7\x1e\x0e\x9d\x03\xaa\x1d\x9f\x25\x93\xc7\x29\x9d\xef\x1e\x9b\xcd\xdd\xb6\xd9\xd4\xdc\xf7\x63\xc5\x24\x4a\x1d\x39\x89\x6d\xab\x76\x41\x9d\x13\xb6\xc5\xda\xae\xb0\xd7\x51\x94\x96\x92\x12\x3b\x8a\xd2\x12\xfb\x22\x90\x4b\xbb\xc3\x91\xcb\xd3\x0e\x66\xf4\x69\x37\xe2\x84\xcc\x31\x19\xf0\x02\x96\xb2\x83\x0d\xcc\xa5\x40\x98\x2e\xc7\x35\xb2\x82\x1d\x49\x39\xc4\xbd\xa3\x11\xe2\x1f\x25\x63\x97\x38\x18\x6e\xa9\x7d\x56\x6f\x7d\xbf\x3d\x65\xe6\xec\x27\x92\x92\x6e\x18\xd2\x47\x1f\x6d\x95\xf9\xce\x86\xc3\x75\xbd\x03\xa3\xcd\xd5\xed\xe8\x56\x19\x1a\x3e\xd2\x64\x7c\x87\x3c\x34\xa7\x6c\x72\x3b\xc5\x1c\x92\xcc\x27\xce\x14\x93\x3b\x24\x0a\x30\xa5\x74\x95\x65\x8f\x94\xd2\x59\x9e\x88\xb3\x30\x05\x5d\xd3\xad\x36\xd5\x18\x35\xd0\x9c\xae\x95\x8c\x94\xf3\x24\x01\x1b\xa9\x2e\x7c\xb4\x86\x3b\x98\x4b\x07\x14\x48\x8e\x34\x8a\xad\xaf\xbe\xbb\x7e\xf9\x17\xba\x82\xc0\xfa\xee\xfa\xd3\xf7\xdf\xbd\xa3\xb3\xca\xee\x76\x88\xd3\x56\xdc\xa0\xa6\xa8\x86\xa4\x3b\x84\x5e\x87\xf4\x3a\xbb\x29\x74\x6b\xd8\xa5\x8a\x97\x84\xdd\xc7\xc8\x08\x44\x98\x8d\x96\xae\xd8\x4a\xc2\x96\x62\x6a\x21\xa7\x22\x35\xeb\x21\x1d\xa6\xfb\xc4\xb1\xfb\xbc\xfd\x1a\xe6\x67\x5f\x7c\x77\xdc\x0d\xdb\x34\xe5\x5f\xeb\xad\x97\x2c\xa9\xb0\xd8\xd6\x9e\xd9\xc7\x3c\xbb\x4d\x93\xff\x5b\xfe\x40\xb8\x7a\x17\x26\x56\x25\x0d\xb0\x81\x11\xae\x13\x15\xde\x09\x51\xe1\x5d\x2e\x2a\xec\x1e\xe5\x99\x9e\x76\x56\x95\x67\xfb\x92\xb1\x5c\x94\xc3\x7f\x6d\x9b\xd3\x3d\xc1\xcf\xd4\x8b\x1e\x85\x6d\xcd\x81\x01\x5a\xde\x81\x16\x40\x3a\x10\xe0\x0a\x12\xaa\xd4\x93\x82\x49\x10\x7c\xbb\x54\x31\x57\x05\x94\xdd\x13\x44\x76\x99\x7f\x2e\x0b\xc5\x4c\x33\xca\xcb\x15\x53\xac\xb9\x61\xde\xe2\x49\x92\xb8\x21\x66\x65\x9a\xbf\x5f\x44\xc0\x50\xc7\xc6\xc8\x98\xfb\x5b\x03\x3f\x53\x58\xa0\x74\xea\x36\xe9\xd8\xa0\x05\x07\xdd\x13\x56\x90\x5a\x70\xe0\xd8\x6d\xa1\xa6\xfb\x02\x49\x18\x82\x47\x93\x32\x71\xa5\x51\xab\xd7\xa0\x34\xa8\x65\xc8\x3c\xd3\x44\x21\xf5\x4a\xa6\x78\xbc\x6a\xf1\xd3\x34\x23\x14\x62\xd3\xf4\x4d\xd3\x47\x0c\x42\x2c\x77\xce\xb1\xdb\xc4\xb1\xdb\x39\xc8\xee\xd6\xd0\x05\xa7\xc7\x1a\x15\xf6\xf9\x81\x96\x1f\xe7\x9e\x00\x52\x8c\x6c\x6b\x31\x6f\x34\x66\x08\xe7\x74\x15\x3e\xab\x0a\x99\xf9\xdb\x64\x62\x4f\x71\x89\xf2\xe2\x3f\xf7\xa4\xcb\xba\x1a\x24\x02\x66\x56\xea\xca\xb2\x3d\xe1\x72\xe5\x03\x48\x26\x6e\xed\x57\xf2\x85\xfc\xb4\x73\xfc\x53\x48\x26\xed\xe3\xdf\xcb\xb7\xbb\x3d\xa1\x74\x50\xba\xac\xa7\xad\x20\x4b\xe7\x42\x59\x0e\x1a\xbf\x18\x42\x12\x70\x20\xb9\x41\x36\x1e\xcb\x3a\x35\x64\xa2\xf1\x51\x5b\x2d\x46\x88\xe1\x31\xd3\x52\x1c\x03\x93\xdc\x22\xb1\xec\xa0\xd5\x3d\xe5\x05\x54\x31\xce\xf4\x73\x47\x37\x08\x0f\xbc\xb4\x4e\xca\xbb\x72\xe2\x85\x09\x23\x20\xf1\xad\x8c\x69\x1b\x4e\x7c\x61\x94\x80\x2b\x26\xc6\x43\xd2\xe3\x43\xeb\x9d\x90\xc7\x55\x57\x4c\x39\x99\xc6\xe2\x6f\xd5\xb0\x57\xad\x8a\x78\xa3\x16\xa5\x3c\xfd\xde\x51\x24\xa3\xaf\x6e\x11\x05\xf6\xe4\x24\x85\x53\x94\x69\xe6\xc2\x75\xf1\x03\x31\x2c\x4c\x2e\x4a\xae\x4f\xbd\x1a\x84\x70\xaa\x5d\x23\xd4\xf6\xa2\x79\x26\x70\xa9\x33\xa4\xac\x36\xce\x95\x3a\x6d\xbd\x13\xa8\x41\x83\x24\x77\x58\xb6\x4c\x7f\x86\xe0\xa3\xb0\xc7\x10\x96\xc0\x05\x4d\x9a\x50\x36\x09\x05\x4d\x9a\x10\x43\x72\x3e\x06\x15\x76\x10\xf8\xc0\x64\x35\x07\x38\xbd\x53\xb2\x98\xa3\xfe\x89\x10\x70\x2e\xaf\x24\x64\xf1\xc7\x09\x8a\x50\x20\x68\xa9\x40\xc0\x85\x04\x05\x5a\x16\xa2\x7c\x73\x42\xca\x2c\x59\x5d\x85\x42\xca\x87\x1e\x0a\xe8\xa8\x89\x2a\x0c\xde\xae\xcc\x5b\xf4\x6a\xf0\x4e\x2d\x6f\xd1\x1f\xe6\xd8\x56\x2e\xa9\x2d\x24\x26\x4f\xbb\x33\xe9\xb2\xe8\x41\xcd\x2d\xaa\x61\xc0\x85\x06\xbd\xd6\xb1\x51\x39\xa3\x96\x04\x7d\x11\xf2\xe0\x89\xd3\x7f\x44\x22\xec\x1d\x86\x90\xd7\x6b\x1a\xe7\x25\x9f\xd4\xb2\x4e\xb5\xec\x0b\xa9\xcc\xbf\x34\xce\xee\x3d\x57\x49\xd6\xb7\xeb\x6d\x3c\xba\x6d\x49\xbd\x73\x98\xc1\x89\xf7\x5e\x57\xd9\x78\xf0\x95\x98\x71\x82\xa4\xa7\x2d\xbe\xf6\x96\x61\x49\x1b\x68\x32\xb5\x3e\xb3\xc7\xd8\x34\x45\x60\x32\xc3\x0f\x54\x01\xc2\x18\x36\x47\xc2\x15\xef\x8e\x9f\x90\xb9\x36\x0a\x49\x05\x0f\x3f\x97\x92\xad\x3b\xb8\x85\x1b\xb8\x3f\x70\x67\x5c\x9a\x26\xe3\xcc\xd8\x7b\x4d\x1c\xbf\x9f\xb0\xe9\x59\xd5\xbb\x47\xda\xf2\x11\xf1\xa8\x4c\xf1\x0e\x34\x98\x65\xb7\x86\xf3\x20\xb7\xf6\x3a\xae\xba\xdc\xab\x07\xd7\xb4\xb2\x79\xf0\x40\x0b\xa3\xc1\x35\x7c\xe4\x0c\xe1\x7b\x5a\x3a\x02\xf0\x92\xbe\x9f\x2c\xa6\x59\xf6\x7e\x62\xfc\xe7\xff\x9c\x2f\xe9\x34\xcb\xd6\xa6\xf9\x7e\xb2\x9e\xc2\x67\xfa\x32\xcb\xee\xd1\x1a\xc3\x5b\xba\x1e\x3f\x8c\xef\x51\x6e\x52\x88\xc9\x67\x6d\xb0\xf9\x89\xe6\xf0\x31\x31\xcd\xf7\xda\x04\x23\xcb\x5e\x72\xbe\xe6\x13\x27\x69\xe9\x0c\x7d\x2a\xd4\x8b\x0c\x63\x4e\x64\x28\xa2\xaa\x44\x69\xdc\x08\x86\xc4\x34\xd1\x0a\xdd\xc0\xb5\xb0\x54\x8c\xb2\xac\x06\x4e\xdd\x88\x71\x7b\xe8\x06\x16\xb0\xc1\x18\x1e\x4c\xf3\xa5\x69\xea\xe9\x36\x28\x7d\x69\x05\xde\x9a\xe3\x8b\x8f\xb4\x61\x43\x5d\x06\xcc\x97\x25\xf5\xe5\x4e\x18\x98\x36\xb6\x59\xc6\x77\xb3\xf1\x91\x4f\x5f\x76\xf0\x1e\x16\xf0\x19\x83\x70\x96\xf8\x0c\xf1\xe4\x7a\x4a\x37\xb0\xe6\x9c\xd2\x1d\x7d\x92\xdd\x91\x87\xf1\x67\x72\x8f\x74\xe7\x18\xf8\x5e\x93\x47\x59\x28\xf6\x1d\x83\x5a\x12\xf2\x76\x07\x5b\xa1\xac\xb8\x95\xfe\x62\xe2\xcf\xfb\x2c\x0b\xd1\x7b\xb8\x85\x3b\xce\xc3\x29\x0f\x31\xe4\x5b\x1f\xa4\xdd\xc3\x32\xcb\x3e\x62\x48\xe0\x2e\x17\x1f\xde\xd5\x5d\x4b\x69\xec\x20\x2f\x67\xaf\x4b\x7a\x5d\x89\x08\xa1\x6f\x93\xbe\x0d\x83\x1e\x19\xf4\x72\x21\x4e\xaf\x86\x58\xab\xca\xb1\x4b\x17\xcc\xa7\x0d\x47\xc8\xab\x25\x28\x9c\xf4\xa7\x93\x68\x8a\xf0\x59\xa8\x60\x62\x79\x6d\x7d\xda\xb0\x77\xa0\xc2\x3f\x44\xe1\x1a\x85\x50\x31\xb0\xe4\xc0\xd3\xdd\x95\xc0\xeb\xee\x84\x1b\x79\x23\x31\xcd\x86\xbf\x6f\x1e\xb7\x3f\x18\x88\x69\x28\x07\x14\x8b\xd3\x73\xb8\xd5\x52\xfe\x16\x48\x97\x6e\x5e\xb7\xe6\x34\xc4\x3b\x60\x28\x2c\x0f\xac\xe2\x26\x9b\x4b\xd7\x7b\xcf\x76\xc5\xce\x7b\x97\x32\xc1\x04\xa4\x14\xb0\xc1\xb4\x54\xbd\x77\x52\x61\xf9\xa4\x6a\xf5\x4f\xb2\xc9\x0d\x47\xd5\x3a\x4a\x87\x08\xfa\x83\x3d\x6c\xd6\x4e\x09\xde\x35\xa2\x2c\x8b\x90\x63\xe3\x2b\xd7\xb5\xdd\xae\xd5\xe9\x75\xfb\xc3\xce\xc0\xee\xf5\x9d\x81\x7a\x73\x59\xf7\xa6\xe5\xb2\x96\xd3\x6f\xd0\x08\xc9\x27\x5c\x67\x12\x66\x8b\x24\x04\x4d\x4e\x3d\x12\x76\xd5\x72\x58\xab\x67\x9a\xec\x92\xff\x1d\xb3\x26\x7b\xc1\x2e\x5c\xa2\x47\x85\x18\x6e\x39\x3b\x12\xa9\x59\x9c\xd0\x10\xf6\x3b\x39\x35\xb5\x09\xef\x21\xa4\x3e\x72\xa1\xd5\x95\x79\x46\xf8\xa3\xdb\x96\x5e\xd9\x2e\x38\x6e\x1f\xbf\x40\x6e\x4b\x79\x67\xbb\xd0\x72\xaa\xae\xa6\x92\x26\x13\xe9\x06\x6a\xdc\xb8\x38\x89\x90\x67\x6a\x41\x8c\xe3\xa1\xa8\x24\xbb\xf7\x2f\xd3\xf1\xea\x05\xf2\x2f\xd2\x0b\xaf\xe9\x5c\x84\x2d\xe7\x22\xc4\x2f\xd2\x17\x1e\x41\x01\x27\x65\x90\xd3\xf4\x78\x89\x8f\x5b\x28\x69\xf9\x18\x5f\xc5\x59\x16\x34\x68\xc0\xbf\x72\x2e\x6c\x4c\x56\x2f\xc4\xa1\xea\x77\x48\xbf\xc3\x67\x5d\x43\x6b\xed\x8d\x75\x15\xde\x39\x9b\x3a\xc2\x54\x2e\xb4\x58\xe4\x81\x5a\xe4\xc1\x98\xb5\x4a\x8b\xbc\x0a\xef\x90\x23\xb3\x09\x88\x25\x3e\x19\x4f\x42\x7c\x11\xfb\x77\x41\x5d\x5f\xc5\xc6\x66\x19\x6b\x50\xc6\xb7\xf7\xd2\x16\x0e\x9a\xba\xf1\x53\xa6\x45\xee\x80\x53\x89\x2c\xf1\x8c\x3d\x9f\x3b\x25\x46\x95\x0e\x40\x31\xb5\x21\xd5\x98\xc1\x8f\xaf\x1f\x12\x16\xc4\xfe\xed\x8a\x95\x46\x54\x52\x50\xc1\xea\xb8\x66\x3f\x45\x39\x82\x61\x5b\x16\x24\xaa\xad\x30\x88\xd1\xd3\x4e\x44\x8b\x9e\x55\x70\xb9\x87\x18\x44\xa0\xae\xeb\x93\x4f\x8c\xf7\x46\xf3\xbc\xd9\x8c\xe1\x5e\x28\xd7\xf1\x0e\x16\x65\xcb\xaf\xbf\x5c\xff\x95\x44\xf0\xee\xfa\xfa\x6b\xd2\x70\x40\xf9\x19\x91\x43\x20\xe6\x17\x26\xbe\x46\xfc\xb8\xbe\x0d\x57\x65\x62\x9c\x11\xb4\xef\x28\x76\xce\xc6\x22\xdb\xcb\x07\x03\x37\x65\x54\xcf\x50\x58\x44\xcb\xe6\xd2\x52\x73\xaf\x0d\x99\x71\x57\xff\xbe\x36\xce\x66\x9c\x41\xc9\x05\x2d\xd1\xd4\xf2\x85\x43\xc4\x8f\xcc\xfb\x5c\x33\xb6\x23\x0d\x37\xec\x4a\xbb\x0d\xe7\xb0\xd9\xfb\x1d\x84\xc1\xeb\x88\xb1\x5f\x58\x9d\xb2\x61\x65\x9a\x0b\x61\xdc\x67\x9a\xa9\xa0\xf6\x55\x57\xa6\xc9\x5b\x02\xa6\x3c\x91\x07\xc4\x71\x73\x35\x43\xc9\x80\x58\x08\x84\xf8\x81\x3a\x21\x19\xd1\x1a\x77\xc7\xe9\x0b\xc9\x88\x70\xfe\x79\x9b\x26\x22\x5e\xc5\xfb\xdb\x98\x45\x5b\xc6\xc1\x9c\xf5\x23\xbb\xfd\x8b\x9f\xec\xbf\x01\x8f\x46\x9c\xf4\x98\xb1\x38\x86\x98\x46\x3a\x30\x0e\xa4\xd4\x50\xc5\x06\x95\x5c\x0e\xf2\x4e\x69\x32\xa4\xfb\xd6\x81\x6f\x27\xf8\x32\x78\x03\x67\x59\xa9\x67\xcd\xc3\xb5\xe7\x07\xd8\x34\x23\x8b\x3d\xf8\x09\xc2\x23\x36\xe2\xe8\x92\x59\x8b\x00\x18\x65\x02\x75\x09\xc4\xe6\xe7\x9a\xd8\x50\x63\x4c\x36\x0e\x10\x26\xb9\x7f\x47\xb8\xdb\xe5\xcf\x42\xf2\xc5\x82\x84\x45\x48\x9a\xce\xa6\xb8\x82\x90\x3d\xd1\xf0\x27\x7f\xf6\x19\xad\xf0\x2e\xf7\x3e\x6f\x84\x7c\x65\x02\x6f\xeb\xdf\x71\x2c\xcf\x1b\xc9\x7f\x58\x45\x1a\x6e\x4e\xe7\xc4\xa6\x19\x5b\x11\x8b\xc3\xd5\x96\x69\x27\xb5\xbc\x40\x31\x71\xf8\xac\xd2\xe9\xcc\x4a\x96\x2c\xe0\x1d\xaa\x48\xd3\x15\x12\x41\xd2\x5d\x11\xe8\xf1\x88\x36\x17\x9c\x4c\x5b\x52\x2d\xc3\x53\xf6\x2d\x9f\xd8\x43\xf2\x2e\x9c\x33\x64\x18\xf8\x8c\x53\x8e\x21\x5a\x61\x2b\x94\x5b\x88\x96\xf0\x34\x5b\x7a\x91\x37\x4b\x58\xf4\xb5\x97\x78\xa4\x61\xef\x30\x54\x3a\x5b\x5a\x73\x2f\xf1\xe8\x82\x36\x16\x87\x84\x74\xee\x3a\xf6\xb4\x08\x48\x04\x82\x17\x52\x2e\x3e\x67\xc2\x41\x47\xd2\x13\x3e\x06\x96\x65\x88\x51\x1f\x02\xce\x50\x24\xd4\x57\x61\x11\xfa\xc4\x71\xfa\x8a\x2d\xd5\xb2\xc6\xfe\xef\xf0\x3d\x2e\xd2\x80\xf9\x25\xec\x73\x26\x6c\xfa\x37\xf2\x38\x0a\x3b\xe2\x7d\xd7\x08\x7f\x51\x30\xcf\x49\x29\xb0\x4b\x70\x68\x3f\xf5\x95\x37\x3f\x57\x27\xfb\xbc\x24\x16\xe4\x8c\x3a\x65\x10\xd0\x68\xa7\x1c\x9d\xd4\x86\xca\x18\x14\xaa\x84\x43\x4f\xca\x99\xe3\x82\x4a\xb3\x16\x75\x12\x1a\x3e\x48\x5f\x89\x46\xb4\xdd\x64\xff\xb9\x8a\xb5\x1a\xdb\x1f\x15\x4f\x40\xf1\x84\x5d\xe1\x04\xa4\x80\xb9\x17\x73\xfc\x54\xa6\x65\xd2\x2c\x3b\x40\x01\x52\xc7\xf8\xb4\x83\x44\xa8\x9b\xe9\x47\x01\x78\x85\x19\xa1\xe1\xdd\xce\xe6\x6c\x71\xb7\xf4\x7f\xfe\xbc\x5a\x07\xe1\xe6\x6f\x51\x9c\x14\x2a\xc8\x49\x30\xa5\x7d\x88\x0a\xb9\x97\x36\x38\xaf\x58\x81\x8b\x98\xe8\x6c\x87\xa1\xdf\xa0\x29\x7a\xda\x01\xc3\x93\x80\x73\x52\x72\x90\x82\xf7\x14\xe5\x09\xc6\xca\x87\xda\xc0\x0d\xbe\xda\x7b\x1a\xdc\xdc\x53\x90\x7a\xd2\x6c\xe9\x20\xfe\xc9\x8a\x3a\x30\xa3\xbe\xb5\x80\x05\x0d\xad\xc5\x28\xbd\x5a\x8d\x72\x7b\xa7\x25\x6c\x68\x5c\xb8\x8d\x4b\x9b\x26\x98\xd3\xd9\x38\x42\x1b\xac\xbd\xcb\x67\x68\x83\x31\xe1\x25\xb0\xa6\x5a\xb7\x07\x8f\xd4\x1e\xad\xaf\x1e\x47\x78\x21\x6f\xe4\x86\xdf\xbf\xc9\xa3\xb4\x8a\x42\xc1\x64\x39\xa5\x9b\xc9\xb2\x08\x87\x1c\xec\x48\x2a\xa0\xb6\x0c\x65\xa0\xa0\xf6\x80\x74\x07\x50\x67\x2d\xd5\x3f\x21\x19\xd4\xe6\x8b\x03\x47\x19\x88\x38\x6a\xcb\xed\x1e\x46\xc6\x9b\xeb\x9b\x0f\xdf\xbd\xff\xf4\xde\xe0\xdb\x5f\xda\xd4\xdd\xa1\x0b\x7d\x02\x01\x55\x52\x78\x7f\x11\x79\x6b\x66\xf0\x2d\x0e\xd5\x14\xa5\x97\xae\x15\x27\x8f\x2b\x66\xcd\xfd\x78\xb3\xf2\x1e\xa9\x11\x84\x01\x33\x80\xa1\x6e\x07\x5b\xde\x66\xc3\x82\xf9\xab\xa5\xbf\x9a\xa3\x00\x43\x60\xc5\xd1\x8c\x1a\x3f\x7b\x5b\x4f\xc6\x72\x23\x06\xa0\x44\xba\xe9\x27\x2c\x48\x7e\x94\x3a\x21\x0d\xa5\xb0\x15\x6e\x58\x80\x30\x24\xd6\x7d\xe4\x27\x0c\x19\x97\xf2\xb3\xab\x1c\x8e\xbd\x56\xe7\xf6\xf2\xa7\x0b\xf5\x4a\x44\x17\x9e\xad\x42\x91\x19\x3e\xa5\x89\xf5\x7a\x14\xb5\x5a\x23\xac\xac\xe9\x4b\xfe\xf1\x13\xce\xab\xe4\x46\x2d\x29\x07\xf0\xfb\x52\x5e\x05\x27\x6b\x23\x17\x55\x7d\x04\x28\x1b\xa3\xb8\x22\xfe\x11\x16\x74\xfc\xe6\xc6\x50\x7e\x21\x92\x2d\x88\x48\xde\x0c\x93\x80\xa6\xa8\x12\xd2\x21\x20\x7e\x2e\x95\x76\xec\x1e\x71\xec\x9e\xd2\xf1\x29\x9d\x86\x43\x3a\x0e\x74\x3b\xa4\xdb\x81\x81\x43\x06\x1c\x24\x0e\x4e\x08\x62\xf5\x49\xe8\x76\xb5\x56\xbd\xc3\x8f\x42\xad\xbe\xe5\x2c\xb0\x16\x4a\x05\x55\xfb\xfe\x40\xe1\xa4\x0d\xd6\x13\x1a\x2a\xaf\x53\x0e\xcc\xc0\xc7\x25\xf9\x9f\xa7\x2a\x2b\x9c\x1b\xe3\xa7\x9d\xbf\x90\xbe\x0f\x7e\x70\x1e\x64\x99\xf0\x02\xe2\x8f\x87\xc0\xf5\xe5\x8c\x93\x09\x61\x24\xf5\xb9\x71\xba\xe1\x5b\xc3\xe6\x45\xd8\x2a\x29\x13\x10\x5f\x9b\x26\x92\x8a\x2f\xa9\x57\xd5\x5a\x94\xb2\xd1\xac\x72\xb8\xec\x76\x49\xb7\xcb\x97\xed\x84\x6c\x59\xab\xe7\x1c\x25\x83\x1d\x0c\x0e\xd5\x74\x75\x6b\xe4\xb3\x78\x9f\x0c\xe4\xac\x4d\xe1\xaf\xec\xc9\xe0\x38\x31\xf5\x34\x98\x48\xa9\x3d\x8a\xaf\xd2\x11\x96\xfa\xbd\x80\x7a\x93\xb4\xd9\x9c\x42\x32\x09\xa6\x55\x23\xdc\xf2\x24\xa4\x4a\x4f\x40\x04\x3e\x95\x53\xa6\x9f\xfb\xb2\x4f\x57\x03\x03\x7e\x14\x62\xc5\x21\xa4\xea\x8c\xac\xe8\x17\x62\x2f\x96\x0e\xc9\xea\x90\xe2\x65\x34\x94\x07\xc2\x53\x07\x22\x2d\x9f\x05\xa5\x1d\x2d\x02\x31\x70\xf2\x47\x94\xe1\xdc\xfc\xb9\x11\x59\x8b\x42\x93\x0a\x7c\x4f\x95\xf9\xb3\x0e\x8e\x24\x77\x54\xed\xa5\x20\x6a\xc5\x8e\x4a\xc0\x98\x4b\x4c\x07\x27\x24\xec\x79\x4c\xa9\x41\x87\xf3\x44\x61\x39\x14\x03\x78\xf4\x40\xa6\x5f\x55\x59\x9b\x66\xed\x12\xbd\xf3\xd6\x2c\x1e\x1f\x7f\x85\xe4\xd7\x98\x4c\xa6\x67\x5f\x40\xf7\x9e\x69\x1a\x13\x39\x88\x73\x09\x12\xa7\x06\xa5\xb9\x18\x7c\x5c\x6f\x64\x28\x29\x84\x3d\x23\xc3\x73\x4f\x99\xe8\xe3\xdd\x0e\x31\x4c\x7c\x19\xd0\xa5\xbc\xa2\x83\x0e\x19\x70\x82\x62\x70\x42\xe0\x3f\xe8\x2b\xb1\xb2\x93\x23\x3d\x43\x9e\x5f\x03\x8c\x1c\xb6\x71\x22\xd2\x5a\xd4\x9f\x20\xb1\x06\xb5\x6c\x6f\x84\x98\x70\x21\x81\x27\x09\xdc\x06\x7d\x32\x10\x3b\x58\xc3\xed\x1e\x6d\x5e\x12\x20\xb1\xe4\x93\x07\xa7\xd8\x1a\x77\x2f\xbc\xd2\x01\x4e\xf4\x0e\x04\xa7\x87\x68\xe1\x8e\x25\x25\x03\xee\xda\x69\x31\x19\x82\x29\x12\x3a\xdd\x31\x9b\x84\xd3\x5a\x85\x50\x59\x99\x2c\x05\xdd\x79\x28\x9a\xca\xbb\x71\xe5\x57\x31\x36\x52\xf9\x44\x0e\x6f\xec\x89\x68\x29\x15\x1c\xa2\xa8\x0a\x71\x61\xf8\x12\x9d\x90\x50\x16\x4b\xa4\xc8\x07\xd7\xc5\xa8\x71\x84\x84\x38\x1d\x61\x4c\xc6\xf1\xe3\xe0\xc5\x86\x15\x9d\xa8\xb8\x1e\x32\x96\x4e\xd0\xa0\x9e\x69\x46\x28\x06\xce\xb7\xad\xa4\x99\x78\x20\x81\xe5\x48\x2b\xaa\x05\x60\xe4\x55\x68\x22\xc0\x22\x27\x9d\xfe\x35\x44\x2b\x08\x70\x96\xe5\xdf\xe4\x70\x72\x6f\xce\xf2\x80\x8b\xb0\xc7\xc5\xcc\x4f\x28\x7a\x4b\xc7\xfc\x70\xcf\x39\xd1\xf9\xfb\x0e\x70\x0d\x85\xc6\x0f\xf0\xd3\xae\x56\x6f\x2c\xcf\xee\xf0\x04\x32\xef\xb4\xab\x46\xf0\x9d\x13\x21\x9c\x24\xd1\x8b\x7c\x15\xee\x56\x18\xae\x4f\x58\x4e\x42\x4f\xd8\x54\x2a\xc0\x3c\x91\x1a\x87\xa3\xed\x08\x45\xd6\xc7\x66\x64\xbd\x7e\x51\x31\x52\x0d\xa4\x9f\xa6\x0e\x8c\x03\x9e\x98\xa9\xb4\xe4\x2e\x39\x00\xf2\xa1\x9f\x42\xa8\x83\xbd\x33\x35\x18\x62\x6b\xf1\xdc\x30\x7e\x25\x3a\x5e\x88\x23\x05\x06\x8d\x90\x10\x40\x96\x08\x79\x1b\x66\x74\x32\x95\x14\xbc\x82\x96\x1e\x04\x85\x2b\xc2\x4c\x9e\x17\x36\x9e\x04\xe0\x4d\x82\xe9\x94\x78\x65\x24\x3b\xdb\x55\xc0\x62\x85\xda\x1e\x9e\xc2\xb0\x9d\x2a\x83\xa5\x83\x2c\x74\x1d\x6c\x7d\xc7\x16\x2b\x36\x2b\x9b\x95\x78\xa6\xe9\x59\xe1\x7d\xf0\x97\x83\xe3\xa4\x5c\x2f\xac\x05\x0a\x85\xb2\x53\xfa\x5f\x68\x2a\x73\x9c\x68\xc8\xcb\x2b\x63\x52\x58\x59\x2a\x53\x7a\x01\xc7\x25\xab\xc0\x07\x7c\xda\x99\xc2\x2a\x52\xc1\x29\x29\x4f\x17\x8b\xd0\xbb\xa5\x91\x3a\x17\x11\xe2\x6f\x7a\xb8\x69\xb4\x6c\xce\x5f\xb5\x9c\x0b\x7b\x7c\x38\x64\x5f\x99\xd9\xf2\x9b\xde\xe6\xe3\x2e\xc5\x9b\x95\xf6\x27\xa6\x69\xb4\x38\xd0\x2b\xb2\xf8\x8f\x5b\x36\x09\xa4\x64\xda\x71\xba\xc4\x71\xba\xe0\x38\x3d\xe2\x38\xbd\x9c\xd5\x1f\x7e\xc1\x50\x49\x4c\xe1\x4d\xb0\x37\x01\x15\x23\xb2\xc7\xf7\xe0\xe2\x5f\x26\xad\xe6\x74\x6c\x4f\x1e\xfe\x69\x7a\x51\x9a\xd9\xa0\x41\x69\x84\xc2\xa6\x61\x0f\x0c\x9c\x65\xae\x9b\xff\x7e\x70\x7a\xc6\x3e\x0f\xa9\xc3\x06\x94\x27\x59\xe8\xda\x03\x48\xae\xae\xae\xec\x2c\x43\x9e\x95\xb0\x98\x5f\xa5\x31\x9f\x88\x8d\xf1\x17\xa6\xf7\x07\x1c\x09\x9e\x18\x69\x38\xb0\x25\x02\x9f\xef\xa1\xfa\x27\x69\x21\xcd\x0f\x86\x92\x17\x0f\x4f\x45\xf7\x1d\x56\xc5\xc4\xfd\xa3\x3e\xb0\x05\x9d\xef\x8b\xe8\x74\x15\xfb\x27\x61\x1d\xa2\xb5\xbe\x4a\x83\x14\x72\x42\x56\xaf\x10\xb2\x45\x3a\x2f\x29\xde\xe2\x17\x37\xd0\xa2\x97\xe2\xfc\xaa\xa8\x06\x7d\xd2\xe7\x60\x73\xf8\x6c\x4b\xa7\x62\xe6\x39\x10\x25\x0d\xe4\x98\x0c\x83\x4c\xdf\x96\xea\x32\x97\x97\x71\x1e\x52\xfd\xee\xf0\xdf\x4a\x71\x94\xaf\xd6\x09\xc4\x30\x3c\x61\xf0\x50\x00\x27\x9f\x23\xb6\x04\x0b\x7c\x00\xc9\xc4\x9f\x42\x50\xa5\xe0\xb5\x7e\x70\x78\x82\x77\xd7\x72\x57\xed\xdc\xa1\xe5\xf7\x52\xc0\x1f\x47\x33\x43\x51\xed\x9c\xba\xa6\xc8\x30\x9a\x31\xd6\xd2\x14\x4d\xc4\x1a\xf8\x4c\xc6\xd4\xf6\x83\x78\xc3\x66\xc9\xc7\x30\x8d\x66\xac\x0e\xc6\xc6\x9a\xa8\xdc\x01\x3a\x1e\x5b\x52\xc7\x10\xa9\x21\x60\x82\xb3\x95\x69\xa2\x10\x05\x60\x04\x42\x3e\x90\x65\x7e\xfe\x83\x53\xf6\x82\x84\x97\xd6\x71\x48\x57\xf5\x54\x2d\x4f\xbc\x1c\x1b\x46\x93\xff\x25\xa9\x14\xe5\xa8\x7b\x96\x60\xcc\xbf\x16\x51\x34\x24\x6b\x47\x62\xf1\xa0\x7f\xf9\x6a\xe9\x08\x52\xbc\x3d\x2f\x07\x5d\x8a\xf1\x0e\x17\x9e\x50\xa5\x90\x4c\xf9\x22\x1d\x5a\x78\xd4\x45\x7a\x5b\xfa\xb1\x0c\xc4\x32\x11\x89\x56\x2b\x5a\xed\x92\x90\x5d\x22\xc4\xae\x4d\xba\xb6\x76\x6d\x92\xbc\x89\x8e\x6c\x6d\x3f\x37\x52\x9b\x2b\x50\xe5\xbe\x83\x82\xf4\x92\x39\x8d\xed\x55\xa5\xfa\x00\x0f\xda\x82\x91\x06\x05\x7b\x25\xaa\x2a\x6e\x27\xb7\xb5\x0d\x71\x91\x3b\xbb\x12\xd3\x93\x0f\xe8\x9c\xf7\xa0\x5d\x45\xe5\xa2\xb1\xf9\x79\x1c\xf2\x12\x3f\xb8\x3b\x0f\x93\x25\x8b\x64\xa6\x28\x2f\x50\xe4\xe8\x79\x18\x09\x21\x49\xe1\xe5\x1a\x0a\x19\x80\xb2\x44\x6a\xd0\x72\xc8\xf2\xda\x5e\xff\x93\xe8\x55\x84\xdc\x13\x0e\xaa\x7e\x30\x0b\xd7\x1b\x2f\xf1\x6f\x57\xec\x3c\x62\x33\xe6\x6f\x59\x54\x72\xa2\xad\x9a\xe2\xba\x03\xe2\x0e\xc4\x16\x3c\x2b\x7c\x92\x88\xb4\xc5\x50\x47\xc4\xaa\xac\xdd\x06\x88\xe9\xbe\x5f\x89\x76\x7b\x82\x94\x7a\xb0\xa2\x28\xa2\x17\xde\x05\xf8\xf4\xe2\xf6\xc5\xc5\x1d\x78\x5a\x26\x6f\x78\x9c\xc1\x90\xbf\x7c\xf9\x4b\x44\x0c\xb7\x56\x5e\x9c\xbc\x09\xe6\xec\x21\xcb\x78\x81\x5f\x14\x60\x98\x15\xee\x05\x17\x08\x8f\xc7\x17\x62\x10\xc8\x30\xf0\xc4\x99\x8e\xd0\x2a\xcb\x66\x22\xf2\x63\x6d\x58\x45\x3e\x1d\x99\x7e\x3b\x27\x73\x84\xd3\x21\x5f\x67\x39\x39\x64\xfc\x8b\xd1\x4c\xad\x58\xc0\x88\xa6\xf1\x27\x34\x6e\xfc\xf4\x53\x8c\x0d\x50\x24\x54\xca\xaf\xa1\xf0\x19\xa1\x69\x79\x58\x91\x8e\xc2\x99\x02\x13\x15\x22\x11\x7e\x32\xaf\x41\x53\xe5\x6e\x32\x8e\x2c\x9f\x17\x34\xa3\x89\x3d\xd5\x31\xd8\x13\x0c\x33\xf1\x49\x94\xc7\x6c\x33\x4d\x75\xbb\x22\x61\x2c\xb6\x1f\x06\xcc\xa7\xce\xc8\xbf\xdc\x97\xdf\xb6\x5c\x11\x7d\x33\x17\xa1\x15\xb2\x5a\x7f\x6a\x9a\x48\x44\xe5\x54\x4a\x94\x9d\x08\xdc\xb1\xe7\x92\xd8\xe9\x93\x4e\x5f\x1c\x8e\x93\x96\x7f\xb9\xc6\x74\x5f\x14\x98\x73\x7b\x94\x26\x63\x61\x44\x99\x65\xce\x05\xa3\xd4\xb9\x48\x08\x6b\x50\x66\x9a\x49\x83\x26\x3a\xa8\xbb\xfd\x0c\xc3\x3f\x29\x74\x3a\x40\xc1\x82\x91\x6a\x14\x11\x62\x1b\x94\x26\x87\x71\xfe\x9b\x06\x39\x9f\x09\xa7\xee\x98\x25\xe7\x9e\xc8\x2c\x27\x8f\x68\xc3\xa8\x08\x38\x9f\x62\x96\x28\x9b\x53\x2b\xde\x63\x67\x91\x71\x73\x23\xbe\xbb\xb9\x31\xfc\xe0\x69\x57\x10\x44\x2a\x02\x3e\xa7\x48\x90\xf2\x16\xd9\x73\x37\x65\x68\x20\xd2\x2f\xec\x33\xd1\x50\x6a\x53\x2a\x14\x5d\x8c\x51\x02\x93\x29\xa7\x18\x65\x84\xd5\x9c\x8f\x15\x16\x2e\x25\x67\x4c\x61\x5c\xb2\xcf\x16\x94\xd7\x3f\x94\xe2\xa2\x60\xcc\xac\xbc\x1b\x9a\x90\x48\x49\x91\x76\x3b\xf4\xb4\x83\x86\xa3\xbd\xdc\x30\xcc\x96\x6c\xf6\x99\x84\x25\xb9\x9a\xf4\x93\x91\xfa\x51\x97\x0c\x5c\xb1\x5d\xcf\x0d\x25\xa2\xb1\xf6\x40\x85\x13\x6e\x6b\x25\xcb\xf3\xc3\x0a\x8b\xe0\x48\x67\xa1\x69\x26\xa6\x29\x92\x53\x9a\xa6\x6f\x2d\x50\x02\x1e\x3c\x55\xc9\x19\x1b\xea\xed\xe0\x85\xd9\xdd\xae\x62\xd3\xa9\xc4\x64\x92\x41\x50\x5a\x5f\xc7\x3e\x61\x47\x50\xc4\x09\xed\xba\x65\xfb\xd3\x4a\xec\xd7\x13\xb4\x10\x13\x01\x8e\x19\x0d\xc6\x8c\x94\x6d\xe1\x42\xe1\x88\xcf\x20\x3c\x9c\x8c\xa6\xc3\x2a\x03\x97\xd8\xb3\x18\xf2\x29\x52\x56\x78\xb2\x28\x4b\x30\x5f\x91\x4a\x5f\x08\xa9\x2a\x58\x61\x14\x89\xd4\xbb\xb9\x40\x4c\xfa\xb6\x80\x42\xe9\xa2\xdb\x13\x62\x92\x76\x3b\x8f\x39\x00\x21\xf5\x27\xc6\xcd\xcd\x2c\x8c\x58\xeb\xe7\xf8\x26\x5e\x7a\x11\x9b\xdf\xdc\x18\xd2\x2d\xbc\xf6\x0d\x7d\xda\xe1\xd1\x11\x9a\xab\x38\xd6\x72\x9c\xfc\x4f\x81\x04\x92\x71\x22\xd2\x17\x62\x64\xe8\x7c\x8f\x06\xbf\x46\x92\xbb\xcd\x43\xe6\x44\x3a\x57\x37\xac\xc3\x39\x23\xc2\x36\x74\x6c\x6c\xd2\x88\x19\xc4\x90\x90\xd9\x80\x59\xb8\x79\x8c\xfc\xbb\x65\x42\x8c\x7f\xfb\xbf\xce\x5d\xdb\x19\x9e\x7f\xcd\x02\x3f\x3e\xff\x90\xc6\xcb\xcf\x5e\xc4\xb6\xe7\xe8\x97\x55\xe8\x47\xe1\xec\xb3\x15\xa5\xd8\x90\x5e\x16\x92\xd8\x11\xa7\x4a\xd8\xbf\x89\xb5\x3a\x41\x3f\xe7\xf1\x34\x3a\xcf\x8f\xb6\x5d\x08\x91\x3c\x41\x20\xd4\xb9\x5d\x14\x60\x3f\xcb\x64\x8c\x0b\x14\x08\xc1\x80\xb0\x77\x4e\x88\x8f\x82\xca\xa9\x92\xf1\x8f\xb5\xfd\xb0\x63\xd7\xd0\xe1\xc7\x62\xcf\x7c\xc1\xff\xa7\xd1\x10\x9e\x1c\x65\x6b\xbc\xb1\xf6\x45\x48\x57\x2b\xa8\xe8\xd9\x9c\xc2\x4f\x21\x5d\xad\xb0\x3c\xf9\x5a\x8c\xe2\xd4\xa5\xf3\x29\x44\xd7\x4a\x33\xd1\xfe\x3d\x49\x10\x72\xe7\x95\x9c\x72\x41\x9c\x97\xc3\x22\x27\x42\x20\x5c\xc4\xb5\x4a\x4f\x6b\xc3\x2e\xed\x2c\x4b\xaf\xe8\x6a\xcc\xc6\x86\xa1\xa0\x26\x41\x21\x8d\x05\x0b\xff\x2a\x9c\xb3\x97\x09\x27\x0d\x2e\xbb\x5d\x77\xd8\xcb\xb2\xf0\xaa\xdb\x6b\x3b\xc3\x2c\x4b\x9b\x8e\x74\x68\x43\xde\x5e\xe5\xa6\xc3\xab\xf7\xda\xae\x9d\x65\xde\x55\xb7\xdf\xee\xb4\xc7\x6c\x1c\x6b\x99\x40\x8a\x49\x48\xf8\x6f\x29\xb0\x4e\x21\x6d\xba\x98\x78\x2d\xf1\x45\x13\x85\x2d\xd1\xd3\xe5\xa5\x63\xe3\x66\xaf\xdb\x6d\xf7\x94\xb8\xc6\x26\x8e\x6b\x4b\x8f\x5a\xb1\x7a\xa7\x5c\x06\xda\xa7\x17\xaf\xa4\xd6\x4a\x0e\x53\xa8\x28\xdf\x8d\xff\x64\x34\x83\xa6\x71\x3e\x0f\x59\xcc\xd1\xac\x37\x9b\xb1\x4d\x72\x1e\xb1\x3b\xf6\x50\x4a\xa8\x92\x2f\xb3\x02\x2e\xd2\xe3\xb7\xd7\x26\x3d\x99\x64\xe9\x84\x3c\x49\x8b\xf9\x3a\x4a\x9e\xd4\x16\x81\x9a\x2f\x8c\x8b\x3b\xa8\xcb\x46\x23\x6d\x2c\x54\x7f\x52\x72\x14\x53\xe3\xd2\x68\x6a\x87\x00\xc3\x50\xec\x57\xdc\xa4\xc6\x39\x1f\xfd\xdf\x53\xe3\xef\x9b\xea\x8b\x08\xe7\x2e\xfb\x1e\x18\xe6\xdf\xd2\x30\x19\x19\xb8\xf9\xf7\xc6\xdf\x63\x88\x9b\xc6\x95\x88\x67\x7e\x79\x61\x34\x13\xfe\xe3\x98\x55\xb7\x66\x41\x9e\x76\x67\x32\xd9\x36\x8a\xa5\x44\xf1\x83\x90\x28\xfa\x87\x6e\xef\xd2\x33\x9e\x77\x93\x3b\xd2\x73\xd8\x66\x25\xe1\xb7\xe1\x3d\x8b\x5e\x79\x31\x43\x38\xcb\x12\xc5\xdb\xf2\x8a\x9a\x52\x6c\xef\x30\x68\x47\x1a\x08\x4a\xcb\x5b\x95\x47\x3a\x75\xf9\xa2\x8a\x8b\xa4\xa9\x2d\x0d\x93\x4e\x1d\x8a\x3c\x8b\x48\x75\x9d\x2b\xd2\xc7\xc2\xdb\x6a\x6c\x9c\x1b\x44\x55\x0c\x38\xfd\x1e\xa9\x60\xd7\xb3\x4b\x9a\x66\x99\x61\x50\xba\xd2\x42\x93\xf8\x4c\x9a\xe7\xcc\x5a\x29\x2c\xa9\xe2\x5c\x56\x20\x2c\x05\x67\xcc\x5f\xa1\xc5\x45\x9e\xba\x21\x5f\xa9\xa5\x5e\x89\x85\x69\xa2\x25\x5d\xaa\x2b\x63\xc3\x02\x63\xf0\xc6\xcb\x66\x4c\xe2\xe6\x52\x1a\xd1\x74\x88\xc3\x41\x9e\xf2\x1b\x2d\xae\xc9\x73\x29\x9b\x67\x40\x1c\xb9\xa1\x05\x60\x11\x11\xab\x20\xa0\x86\x21\x62\xf0\xc8\x30\xac\x21\x87\x28\x21\xa7\x8b\xed\x9a\x60\x56\xaf\xc2\x34\x48\x14\xe1\x7a\xcb\xce\x03\x76\x27\x1c\x53\x0d\xa5\x0e\x08\xaf\xec\x11\x0a\xaf\xae\xae\xa8\x83\xa5\xa7\x79\x82\xb1\x63\x86\x9c\x95\xe1\xcf\xd5\xa4\x3b\x07\x20\xe1\x04\xbd\xd3\x29\x40\x42\x25\x96\x86\x90\x20\xc6\xd4\x98\x88\x2c\xdd\x53\x03\x52\x5a\x62\x97\xe2\x66\xdc\x34\x5e\x18\x1c\x72\xaa\x52\x59\xf2\x27\xa3\x6a\xf5\x58\xf4\xe5\xd3\xa7\x1d\xc4\x34\x3c\x34\xa4\x6c\x34\x3c\x7e\x13\x70\x96\x19\xbf\xfd\xfa\xbf\xfd\xdb\x7f\x35\x1a\x54\x3d\x88\xe2\x9d\xb0\xb2\xe5\x77\x2a\x1e\x27\x68\x81\x09\xaf\x7d\xc6\xaf\xb3\x3f\x09\xa6\x34\x2d\x5f\xb3\xb8\xb8\x16\xbe\xb0\xa7\x9c\x09\x91\x68\x3d\x6d\xc1\x68\x19\x46\x81\xc3\xe9\x4e\xc4\x68\xce\xca\xa2\x14\x0c\x03\x63\x70\x0f\x5e\xac\xe4\x8b\x4a\xdc\x34\xe1\x9c\xac\x24\x9c\xf5\x97\xb1\x86\x82\x2b\x79\x0a\xff\x94\xfc\x14\xfc\xb4\xfd\x69\xf1\x53\x74\xfe\x6f\xff\xed\xbf\xff\x1f\xbf\xfe\xf7\xff\xf6\xbf\xff\xf6\xeb\xaf\xbf\xfd\xfa\x5f\x7e\xfb\xf5\xff\xf7\xdb\xaf\xff\xff\xdf\x7e\xfd\x1f\x7e\xfb\xf5\xbf\xfe\xf6\xeb\xff\xf8\xdb\xaf\xff\xd3\x6f\xbf\xfe\xcf\xbf\xfd\xfa\xbf\xfc\xf6\xeb\xff\xfa\xdb\xaf\xff\xf7\x6f\xff\xe5\xff\xfc\x7f\x7e\xfd\xf5\xa7\xd4\xb5\xdd\x81\xf8\x77\xf8\x53\xba\x60\x8b\x85\xa1\xf8\xad\xba\x84\x62\x39\x97\x5f\x09\x2f\xd0\xed\x2b\x2d\x78\x47\x7a\xc6\x74\x6c\x15\x0a\xd9\xc1\x62\x21\xb5\x2d\xe3\x92\xce\x38\xf7\xf2\x66\xbd\x66\x73\xdf\x4b\x18\x6c\xe8\x4c\x46\x68\x2c\x8a\xe6\x74\x66\xbd\x65\x71\xec\xdd\xb1\x57\x4b\x2f\x08\xd8\x0a\xd6\x74\x66\x7d\xed\xc7\x1b\xce\xd1\xc0\x23\xb5\x61\xcb\x0f\xc4\xdd\x61\xe0\x86\xa6\xe0\xd5\xfd\x05\xda\xee\x39\x20\xf3\x5d\xd2\xf1\x8d\xf9\x11\x50\x42\x2f\xfe\x0c\x09\xe2\x50\xf0\xb6\x72\x2b\x75\x40\x0a\x61\xa2\x87\x77\x67\x4b\xd3\xdc\x64\x19\x5a\x1e\x49\x18\x35\x99\x42\x40\x9d\xd1\x41\x28\xf5\x60\x84\x75\x08\xa7\x9c\xb5\x0e\x9a\xcd\x42\x6d\xb2\x9d\x34\x9b\x8f\x15\x9b\xff\xb8\x4e\xfe\xc4\xc6\xac\xf0\xd5\x66\x18\x12\xbc\x83\x08\x3d\x62\x78\xdc\x95\x7d\x88\x18\x7e\x2a\x4d\x6c\x07\x07\xc6\xa2\x0b\x3c\x8e\xaa\x53\x28\x4c\x30\x3d\x74\x07\x0c\x1c\x8c\x77\x64\x6d\x9a\x6b\x2b\x08\xef\xf7\x2a\x8b\xb2\x72\xbd\xf9\x18\x85\x14\xf9\x42\x1e\x32\xc7\x16\x3f\x8d\x2e\xf8\xe2\xaf\x63\x85\xc1\x5a\xee\x22\xbd\x15\x91\xe6\x43\x6b\x13\xc6\x89\xda\x59\x08\x79\x0b\x64\x66\x79\xf3\xf9\xf5\x96\x05\xc9\xb7\x7e\x9c\xb0\x80\x45\xb5\x6e\xc0\xa5\x0f\x4d\xb3\x31\xb3\xfc\x35\xef\xe2\xa3\xb0\xaa\x88\xc7\xa8\x3a\xca\x59\xb9\x1f\xc4\x9a\x86\x01\x1c\xda\xec\xe0\xb0\x33\x64\xa8\x21\x1a\x70\xcb\x19\x5c\x4c\x22\x6a\x84\x41\xc4\xbc\xf9\x63\x9c\x78\x09\x9b\x2d\x39\x98\x35\xfc\xe0\x7c\x85\x0c\x69\xc5\x61\x54\x4d\x08\xd2\x8a\x99\x56\xa9\x16\xb6\x0e\x1b\x2a\xef\x73\x6a\x45\x6c\x1d\x6e\x99\xfc\x50\xc6\x1b\xb9\xcb\x05\xca\xd5\x28\x29\xb1\x0c\xd4\x18\xa6\x49\xbe\xfa\x20\x44\x32\x7b\x12\x89\x25\xc8\x0c\x09\x9b\xdc\x0d\x54\x71\xe6\xd2\xfe\x49\x89\x56\x85\xfd\x93\x48\x63\x22\x2e\xf9\x29\xce\x43\xa2\x2f\x99\x12\xce\x7b\x80\x30\xcf\x0e\xf7\x05\x82\x1e\x49\x1b\x2e\x7c\x69\x8f\x7d\xc4\x9a\x22\x37\x55\x98\xcb\x14\x15\x8e\x11\xbd\x9f\x32\xc4\xd3\xc8\xf3\x44\xce\xb6\xdc\xda\xb4\xac\x4b\xb1\xcf\xaa\x81\xd8\x14\x01\x91\x94\xac\x50\xcb\xe8\xf3\xc7\x28\x0c\xee\xce\xe5\x8d\x2d\x11\xa1\x15\x74\x58\xa4\x15\x73\xea\x12\xfc\x95\xdc\x59\x38\xdd\xf1\x7c\xd7\xda\x73\x3f\x7e\xe7\xbd\x53\x2e\x29\x36\x41\xec\xca\x1e\xfb\x24\xc2\x28\x77\x8a\x70\xea\x92\xdd\xe5\x92\x93\xc1\x33\x19\x9a\x68\x9f\x98\xd6\x69\x9e\x9c\xd3\xf9\xe3\x4a\xfb\x7f\x64\xd3\x4b\x31\x41\xf9\x66\x8b\x35\x3f\x08\xc2\x42\xec\xbd\x7d\x3f\x99\x9c\xed\x4b\x93\x51\xce\xde\x51\x65\x46\xa2\xd5\x13\x4a\xcf\x63\x69\x1f\xb5\xbb\x41\x54\xb8\x18\x9c\x33\xa9\x8c\x03\x5f\x1c\x9b\x3a\x90\x24\xf2\xab\xe4\xb1\x3d\x4c\xb3\x11\x71\x30\x98\xfb\xda\xe6\x26\x59\xf5\xfa\x04\xf1\xb5\x8a\x45\xf8\x85\x8f\x1b\xff\xbe\xee\x8f\xc5\xac\x0c\x83\x2d\x8b\x12\x95\xca\xf2\x3c\x09\xcf\x37\x91\xbf\xf6\x39\xd5\x98\x67\x16\x2b\x39\x76\x3b\x75\xc9\xc0\x2a\x04\xaf\xbf\x40\x42\x6e\x57\xf2\x89\xb2\xcb\x12\x9e\x82\x36\xec\xb4\x75\x28\x1c\x45\x33\x38\x6e\x4f\x12\x0d\x6d\xe5\x4d\xeb\xa8\x9c\x39\xc3\xbe\x0c\x99\xde\x6d\xcb\x90\xe9\xc3\x81\x8c\x98\x2e\x4e\xe5\x5a\xb3\x21\x8f\x82\xde\x1c\x62\xd8\xea\x34\x8f\x77\xda\x3e\xef\x56\x09\xe2\x6e\x94\x62\xe8\x5e\xc9\x89\xaf\xb5\x09\xd3\x83\x0a\xd1\xf3\x51\xb9\x39\xbf\x57\xbe\xbc\x2f\x73\xf3\xb6\xcf\x3a\x56\xcf\x5b\x25\x1a\x83\x4f\x3a\x46\xdc\x2b\x95\xf2\xe1\x3b\x69\xe4\x03\x1f\x84\x34\x6d\x80\xe1\x9d\x90\xd5\x74\x31\xfc\xac\x7c\x86\xdf\xa8\xb8\xef\x5f\xeb\x44\x40\xdf\xf2\x4f\x1c\x0c\xaf\xf9\x5f\x1b\xc3\x2f\x4a\xf8\xf9\x67\x2a\x04\xc0\xf0\x15\xfd\xc5\x5a\xc0\xf7\xf4\xcf\xd6\x02\xfe\x46\x7d\xab\x80\x56\xf0\x23\xf5\xad\x7c\x3b\xe1\x07\xea\x5b\xdf\xfb\x41\x32\x10\x32\x5f\xf8\xeb\x7e\xec\x02\xf8\x86\xa6\x32\x26\xc1\x57\xe9\x62\xc1\x22\xf8\x0b\x4d\xad\xaf\xbd\xc4\xfb\xc1\x67\xf7\xf0\x27\xfa\x0a\xd9\x18\xfe\x91\xbe\x42\x2e\x86\x7f\xa2\xaf\x50\x1b\xc3\x3f\xd3\x57\xa8\x83\xe1\x1f\xe8\x2b\xd4\xc5\xc0\x18\x7d\x85\x7a\x18\x12\x46\xbf\x43\x0d\x1b\x43\x20\x1e\x1c\x0c\x11\xa3\xef\x54\x1e\x68\xf0\xf9\xf3\x67\xf6\x18\x43\xc8\x9f\x94\x43\x29\x78\x8c\xfe\xb5\x50\x69\xbc\x5f\x40\xcc\x0b\x22\x91\xdf\x0e\xd2\xe2\x59\xe4\x3f\x86\x15\x2f\xf8\x39\xf4\x03\x98\xf1\xa7\x38\x8c\x12\x58\x88\x27\x91\xef\x6c\xc9\x1f\x73\x43\xc3\x8d\xfc\x55\x89\xf2\x39\x67\xf4\x53\xc5\x39\x74\x2d\x0a\xaa\x89\xb7\x1e\x19\x7d\x8b\x0c\xbe\x36\xf3\x9b\x8a\xcf\x01\x6c\xc5\x9b\x39\x5b\xec\x95\xdf\x31\x1a\x5b\xaf\xde\xbf\xfb\xf8\xe9\x3b\xb8\xe5\xcf\x9f\xfe\xfa\xe1\xfa\x6b\xb8\xe1\x8f\x3f\xbc\xb9\xfe\x11\xee\xf9\x1a\x39\x50\xcb\x27\xbc\x64\xe8\x03\x62\xc0\x26\x5b\x36\x15\x64\x1b\x86\x6b\x56\xc7\xc8\x9c\x3b\x9c\xf9\x65\xf7\xe7\x3f\x08\x2f\x64\xbe\xa9\x4e\x4f\xec\x1c\x9a\x38\x53\x6c\xdd\x8a\xfd\xc3\x13\x7b\xba\xc3\xf0\xc0\x68\xa3\xf1\x83\x69\x36\x1a\x3f\x94\xb4\x68\x31\x4b\x4c\xb3\x6a\x7e\x24\xda\x73\x64\x0e\x05\x21\xf5\x84\x8f\xac\x56\xf4\x30\x57\x8c\x66\xc0\x19\xcd\xe0\xef\xb4\x6e\xe4\x6f\x1a\x3b\x86\x8b\x45\xcc\x92\x0a\x76\x84\xf7\x6c\x1f\x15\xdf\x0b\x77\xaa\x5b\x26\x13\xf8\xe6\xc0\x54\xb6\xf5\x63\x35\xbb\xb3\xd8\x02\x99\xdc\xb0\xc1\xa9\xb3\x97\xfb\x03\x13\xa9\xe3\x64\x8b\x8f\xaa\x45\xac\x5b\x32\xde\x24\xb5\x2d\x95\xdd\x48\xca\x83\x15\x7e\x2a\x9c\x68\xfe\xbc\xdf\x8b\xaa\xf1\x76\x7f\x9f\xe0\xed\x7e\xcd\xc2\x1b\xc2\x86\x88\x6a\x1b\x3b\xf0\xe9\x4b\x26\x3c\x5f\x46\x11\x27\xf7\x05\x5f\x99\x08\x22\x3f\xd7\xa8\xee\xe0\x13\x3b\xe0\x6b\xbf\x12\x0f\x47\x82\xf2\xc8\xcc\x19\xf3\x49\x30\x15\xbe\x7d\xaf\xd8\x51\xf5\xa4\x94\x4b\x5e\x1f\xf1\xcf\x98\xd1\xf4\x48\x3a\xa7\x45\x21\x12\x9f\xc1\x92\x7e\x46\xb1\xdc\x7f\xa1\x1b\x5b\x9a\x66\xe3\x01\x2d\x55\xc8\x2f\x8f\x2e\x25\x66\x89\x31\x88\xcc\x7d\x09\xb5\x47\x0d\x11\x97\xa7\x12\xa2\x2b\x69\x36\x71\x24\xb9\x9d\x50\x19\x92\x9f\xc5\x34\x12\x29\x2a\x17\xa6\x99\x5e\xb9\xa6\x89\x66\x74\x85\x66\x50\x4e\x89\x0b\xae\xf0\x5b\xb2\x21\xa0\x6b\x14\xe7\xc1\xdd\xc4\xba\x8a\xf8\x01\x01\x1e\x05\x57\x89\x68\x5e\x44\x89\x5d\x8c\x67\x28\x9e\x24\x53\x48\x30\xe1\x7f\x4b\xeb\xfc\x5d\x85\xc4\x2e\x12\x1e\xd8\x90\x1c\x2e\x4e\x90\xf7\x90\xe0\x51\x72\xc5\x46\x58\x48\xdf\x8a\xb1\xb1\xd2\x26\x06\x3b\xf8\xa0\x6e\x5d\xe5\x8a\x6d\x58\x11\x3a\xe0\x07\x91\xdb\x08\xc3\x3b\x56\xe3\xc4\xbd\xd1\x71\x73\x3e\xb0\xf1\x42\x7d\xf4\x9e\x29\x79\x0f\xd1\x4f\xe5\x20\x9d\xf0\x33\xa3\x4f\x45\x06\x68\x52\x7b\x70\x5f\x57\x5b\x02\x7e\xa8\x9e\x97\xeb\x19\xef\x80\x6d\x59\xf4\x58\xe7\x22\xf9\xcf\xe5\x06\x9f\x97\x20\x0c\xef\x60\xe1\xaf\x56\x75\xad\x7d\xab\x66\x5e\x3b\xc9\x85\xbf\x4a\x58\x54\xf7\xd9\x67\xb5\x3b\xff\xf8\x07\x06\x23\x1a\x0e\xe6\x75\xcd\xfe\xc3\x1f\x9c\x5b\x30\x17\x68\xac\xae\x49\xc6\xfe\x58\x9b\x35\x79\xda\xfe\xf4\x87\x5a\xf2\x25\x82\xad\x1b\x5b\xf0\xc7\xc6\xe6\x07\xb3\x55\x3a\x67\x75\xe9\x9e\xce\x93\x3f\xd6\x24\xc7\xed\xb5\xfe\xb8\xec\xd4\xf9\x28\xd1\x0f\x75\x1f\x7b\x27\x3f\x5e\x7b\x9b\xba\x8f\xee\xff\xd8\x04\x24\xb5\x52\xd7\x60\x7c\x72\x14\x25\x2a\xa7\xee\xe3\xf4\x0b\x1f\x6f\x59\x14\xb3\xda\xac\x87\x90\x50\xfd\x4d\x01\xd4\x0a\xce\x13\x25\x17\x2e\x07\xd9\xf6\x28\xba\x0c\x46\x58\xa6\x36\x98\x44\x53\x90\x7f\x9b\xcd\xa9\x2c\x69\xb5\x12\x55\x96\x94\xf3\x8e\x2f\xfd\x78\x07\x71\xb8\xae\x9d\xf1\x3f\xfd\xa1\x15\xe4\x44\x5d\x5d\x6b\x33\xb6\x0f\xc6\x78\xe5\xf4\x56\x20\xf5\xda\x74\x62\x79\xcd\x28\x0f\x56\x0c\x3e\xdd\x0a\x4c\x5c\x42\xfb\xe8\x03\x0a\x20\x10\x58\x1d\xa3\x40\x51\x51\x10\x58\xb7\x8f\x09\x7b\x2f\x68\x9a\xa6\xff\x22\xb0\xbe\xfa\xeb\xa7\xeb\x8f\x37\x1f\xae\xbf\xbb\xb9\xfe\xf6\xfa\xed\xf5\xbb\x4f\xb0\x2e\xe5\xbf\x4f\xc6\x11\xd9\xa2\x04\x22\x8c\x5b\xbe\x60\x39\xdf\x1c\x21\x23\x34\xc8\xda\x07\xf0\x20\xfc\x74\x76\xf0\x75\x15\x91\xeb\xd7\x4a\x5e\xf1\x91\xa1\xf2\xb2\x81\x83\x21\x90\x09\xfb\x74\x12\x5b\x89\xe8\x7d\xba\x46\x51\x8e\x28\x43\x19\xe1\xd3\x6f\x26\x57\xc1\x3e\xd9\x56\x08\x35\xa4\x26\xe0\xd2\x1f\x61\xb9\xd1\xcd\x70\x4a\xa3\x49\xd8\x6c\x4e\x77\xf0\x2d\xa3\x4f\x3a\x08\xcc\x21\xe2\x0a\xf7\x91\xd5\x4e\x06\x91\x39\xac\xe9\x1f\xd6\x54\x51\x68\x0e\xeb\x46\x07\x75\x77\xf0\xfa\xc8\xaa\x4a\x22\x90\x4d\x6e\xd9\xd4\x34\x75\x9c\x82\xdc\xe4\x2e\x31\x4d\x99\x65\xc6\x34\x95\x4c\xbe\x99\x60\x4a\x73\x43\xc8\x1d\xfc\x72\xa4\xdd\xd7\x9c\x70\x4b\xe8\x9d\x74\xb7\xc2\xe3\x05\x72\xa5\xcf\x14\xf9\x5e\xca\xaa\xe0\xcf\x87\x74\x9b\xd2\x3b\xa0\xbd\x8f\x4d\xf3\x1e\x05\x9c\xf8\x45\x01\x28\xcf\x3a\x8c\xb3\x4c\xfc\x14\xb9\x8a\xd4\x73\x2c\x9f\x85\xd7\x66\x6e\xc8\xa1\xde\x69\x1b\x5b\x83\x73\xf4\x81\xa5\x7f\xaa\xb7\x85\x9d\xae\x7a\x5f\x14\x8c\xbf\xca\xad\x39\xcb\x7e\x7c\x22\xd7\xf1\x1d\xcb\x32\xf4\x67\x6b\x41\x7f\x61\xf0\x8b\xb5\xa0\x7f\x66\x18\x3c\xe4\x59\x1f\x9b\x9e\xf5\xfa\x45\xe3\x8e\x15\xde\x09\x4f\xc7\xfc\xd6\xc8\x2f\x0c\xf6\xdc\x19\xff\xcc\x44\x4c\xae\xd2\xc6\x2e\xd5\x8e\x0a\x3e\xc3\x34\xd1\x92\xd1\x4d\x1d\x21\xb4\x62\x15\x33\x50\x71\xf6\xbf\x62\x74\x83\x9e\x38\xc5\x83\xcf\x36\xe8\x2b\x06\xdf\x32\x0c\x4b\xfe\x30\xe7\xcf\x8a\xcf\xc4\x20\xde\x3d\x09\x86\x90\xbc\x61\x22\xd7\xe0\xd7\x0c\x66\x75\x19\xfc\xf0\xd3\x2e\xcf\xfb\x40\x96\xfb\x29\x21\xc8\x3b\x3e\xfe\x4f\x8c\xb7\x67\x48\xa8\x60\x80\x71\x6b\x14\x65\x39\x80\x30\xc0\x08\xab\xe5\xdf\x6a\xe7\xad\x55\x51\x9e\x3b\x74\x31\x03\xc3\x57\xbc\x68\xcd\x4e\x51\xf7\xfc\x30\xef\x4e\xc4\x43\x83\x34\xcf\x3d\xd8\x44\x28\xa5\x8d\x46\x8a\xc7\xc6\xab\x95\xb7\xde\xb0\xb9\x41\x0c\x03\x37\x55\x60\x2b\x58\x50\x71\xc2\x9a\x0c\x36\x54\x9c\xaf\x26\x83\x39\xf5\x27\xab\x29\x6c\xe9\x3c\xcb\x84\xaa\x64\x6e\x9a\xef\xd1\x1c\xc3\x2d\x6d\xcc\xb3\xac\x11\x5b\x2f\xbf\xfa\x41\xe7\x89\x9b\x9b\xe6\xbc\x24\x33\xf8\x5c\x1e\x8a\xe2\x54\x82\x63\x73\xa9\x56\x55\xc2\x1f\xeb\x66\x9e\xdb\xf8\x5b\xdb\xc9\x62\x8a\x82\x17\x49\x33\xb2\x42\xb8\x66\x78\xa7\xa9\xfa\xfd\x5c\x91\xb5\x6d\x16\x4a\x7a\xd1\xaa\x0c\x59\x81\x94\xac\x55\x44\xc9\x41\x91\x90\x33\xdb\x24\xba\x72\xbb\xdd\xb1\xdb\xed\x12\xb7\xdb\x35\x23\x0c\xbe\xb5\x9d\x6c\x64\xdf\xbe\x15\x42\x54\xee\x5d\x60\x98\xb2\xe9\xbb\xbd\xc3\xbb\xb3\xdb\x31\x9a\xd3\x00\x55\x07\x00\x3e\x7e\x9a\x21\x06\x73\x58\x81\x71\x33\x57\x89\x82\x04\xe3\x05\x29\x2c\xa8\x0d\x1b\x09\x82\x39\x04\x50\x7c\x6b\x50\x36\xc8\xfb\x26\xcb\x8c\x92\x10\xc6\xa0\x14\xa5\xf4\x86\x57\xce\x32\xe3\xa3\x30\x6a\xaa\xbe\x4e\x73\x09\x9e\xe4\xa5\x83\xf1\x5b\x86\xe6\xfc\x7e\xbf\x52\x97\x87\xff\x38\x0b\x69\x00\x1b\x8e\x35\x22\x48\xe4\xa0\xb6\x54\xa2\x36\x79\x42\xcf\xca\xd2\x71\x5f\x0a\xcb\x0f\x59\xfb\x02\x47\xf8\x0b\x84\x3c\xba\x6d\x6d\xf0\xa5\x7d\xb4\xd6\x4e\x87\xe9\x40\x1e\x5d\x23\x1f\xbf\x48\x70\x73\x73\xb5\x3d\xde\x6a\x4c\xbd\x8b\x44\x7e\x15\xd3\x47\x14\x70\x8c\xc5\xb9\xa5\x6f\x90\x47\xe3\x17\x2a\x21\xf1\x12\x31\xb1\xb6\xf0\x74\x4b\x42\x08\xc9\x06\x56\xc4\x03\x46\x62\xd8\x12\x5e\xf9\x2f\x28\xc4\x3b\x3c\x5a\x5c\xc6\x23\xfc\x19\x31\x58\x34\x9b\x9c\xd3\x7a\xa0\xa5\x83\x4b\x3f\xa2\xaf\x04\xd8\x78\x80\x72\xfa\x18\x03\xe6\x18\x93\x0a\xa8\x9a\x0b\xb7\xac\x1a\x61\xc9\x1c\xb5\xe4\x9b\x37\x07\x79\xf5\xe6\x20\x2b\xc8\xbc\xd6\xf2\xd9\xb1\xba\xfa\x91\x1f\xa7\x86\x8d\xb3\xec\xc8\x01\x12\x47\x26\xb7\x22\x96\xa7\x09\x03\x3f\x31\xe3\x2f\x9d\x95\xf0\xe4\x59\x09\xc7\x39\x23\xef\x8f\xf9\x58\xb6\x28\x00\x75\x26\xc0\xd7\x36\x9b\x0d\x4a\xa3\xfd\xb7\x98\xa8\x02\x4c\x4e\x1d\x33\x55\x8b\xef\x1c\x5f\xf2\x3f\xa1\xbb\x06\xa5\x87\xbe\x01\xe3\x97\x68\x9b\xfb\xb7\xbe\x44\x77\x18\x13\x5e\x52\x49\x48\x2b\x7a\x99\x67\xd9\x12\xcd\x81\xc1\x76\xc2\xa6\x22\xb7\x43\x69\x0b\x1f\x20\xca\x32\xf4\x50\xf1\x92\x99\x63\x79\xb8\xdf\xd2\x87\xc9\x9c\x4d\xe1\x13\x6d\x34\xde\x9a\x26\x2a\x02\x08\xbe\x15\x01\xf5\xb4\x15\x9b\xfc\x85\xe1\x15\xcd\x31\xc7\x19\xef\xf1\x91\x09\xaf\x6a\x7e\x3e\x6e\x19\x5f\x7d\xfe\x74\x53\x14\x6e\x19\xcc\x31\xa0\x74\xac\x36\x17\x4f\xd6\x6c\x4a\xe9\x8a\xac\xc5\xb8\x1f\x70\x96\x7d\x85\x1e\x4e\xc0\xf5\x15\x07\xe8\xd7\x93\xd5\x94\xce\x05\x8a\xfd\xa6\xe9\x59\x3f\x0a\x34\x8b\xe6\x0d\xba\x15\xf9\x01\x05\xea\x85\x15\x3c\x1d\x90\x9c\x24\xd9\x95\x31\x73\x35\xd9\x85\x15\x2e\xf4\x8e\x08\x8f\xc2\x15\x3c\x2d\xa2\x70\x4d\x5e\x31\x08\x17\xe4\x3b\x8e\xcc\x8c\x83\x16\x0d\x3e\x6a\xbe\xda\x0f\x75\x2f\xf9\xf9\xe0\xdd\x7d\x80\x15\xc7\xbb\xf0\x35\x5a\xa9\x02\xd1\xff\x03\xe3\x9d\x48\x0c\xbb\x2b\xbf\x68\x7c\x82\x95\xc0\xcf\x51\x96\x3d\xe4\x12\x59\x4a\x97\x4c\xec\x5c\x5e\xb0\x64\xe5\xaf\x6a\xae\x9a\x83\x73\xf7\x6a\x31\x21\x8d\xd6\x2b\xbd\xa1\x1a\x59\xe9\xc4\x01\x77\xba\x27\xfd\x45\xb8\x21\xd5\xd0\x48\xbc\xc5\x07\xaf\x45\x4e\xb9\x4a\x63\x0f\x7b\x75\xe4\x02\xcb\xcf\x77\x58\x0c\xa9\x8e\x68\xf8\x99\x6f\xf0\xa7\xf1\x5b\xf2\x8a\xaf\xc0\x27\xb9\xbe\x73\x06\xaf\x74\x44\xa1\xda\x70\x4c\x95\x7c\xd6\xf6\x80\x38\xf6\x40\xe8\x5e\x1d\x67\x20\xb4\xa0\x8e\x33\x84\x3d\x65\x63\xee\x77\x9c\x07\x62\x70\x7b\xc4\x71\x7b\xe0\xb8\x7d\xe2\xb8\xb9\xad\x6d\x1e\x65\x31\x8f\x6b\xdf\xe9\x12\xa7\xa3\x13\x4d\xba\x36\x71\x6d\x70\x1d\x92\x7b\xf3\xca\xd4\xb8\xc2\xb3\xa3\x9a\x4d\xbb\x94\x92\xf2\xc0\x0d\x47\x47\xc8\x2f\x25\xa6\x2c\xc7\x70\x2c\x67\xdc\x16\x16\xe0\xda\xa5\x52\xc6\x76\xec\x93\x61\x3f\x4f\xba\xcb\xe7\xf1\xfb\x2c\xc3\xdb\x2a\x94\x44\xdf\xd6\xfe\x5c\x7d\x65\x78\xa2\x92\xf5\x0c\x07\xca\xf0\x64\x4f\x87\x24\x74\x45\x4b\xad\x2b\xda\x68\x5d\xd1\x3c\x57\xf0\xac\x73\xb3\xed\x47\xa5\x94\xd9\xea\xc8\xae\x77\xb4\xe4\x9d\x0f\xb7\x54\x61\x36\x21\x6b\x69\x18\x70\x43\xa3\x8a\x6a\xe5\x9e\x46\x85\x6a\xe5\x9a\x46\x22\xd8\x3e\x3c\xd0\xa8\xac\xbe\xf9\x48\x23\xeb\x4d\xb0\xf0\x03\x3f\x79\x84\xf7\xf4\x06\x5e\xd2\x6b\xcb\xbb\x8d\xe1\x33\xbd\x16\xb1\x03\xdf\xd2\x6b\xc9\xbc\xc3\x27\x7a\x6d\xad\xc2\x3b\x78\x45\xaf\xad\x6f\xdf\xb9\xf0\x1d\xf5\xc7\xc6\xcd\xad\x41\x72\x7a\xf5\x83\x28\x59\xf1\x92\x12\x55\xfa\x4e\x94\x86\xaa\x54\xd1\xb0\x45\x34\xa7\x9f\xeb\x2c\x79\xf8\xcd\x91\xca\x86\x80\xaf\xeb\xe0\x45\xd0\x4a\x5a\x0e\xa4\x14\x39\x97\x97\x31\x6e\x39\xb0\xa2\xe9\xd5\x95\x03\x33\xea\xb6\x05\x47\xfc\x59\x84\x35\xec\xe0\x96\x78\xe8\xf7\x31\xb1\x05\x29\xb4\xa4\xec\xd2\xce\x32\x5b\x26\xb9\x71\x2e\xd8\xa5\x3d\x76\x88\x2d\x90\x3c\x62\xf4\x25\x62\x18\x37\x28\xcb\x32\x46\x29\xfd\x38\x46\x3e\x15\xe1\xfa\x1c\x62\x43\x44\x53\x4c\x38\x69\x87\x3e\x21\x86\x2f\x5e\x61\x60\x2f\x50\x48\x45\x07\x9c\xc6\x73\x38\xed\xd7\x6a\x41\xf8\x82\xba\x18\x10\x6b\xd2\xa8\xb9\xba\xa2\xce\x78\x76\x11\x92\xd9\x0b\x5e\xcf\x69\xad\x30\x7e\x11\x5e\x51\x97\xd7\x6d\x36\x21\xbc\xe0\x75\x45\xbd\x94\x77\xa6\x7a\x51\x1f\x22\x9f\x22\xf6\x22\x6c\x39\x58\x7c\x9d\xf0\x9a\x74\x85\x09\x1f\x95\x28\x59\x95\x5f\x51\x1b\xe3\x51\x72\x45\x07\x23\x6f\xb2\x68\x36\xa7\x94\x93\x99\x3e\xf8\x17\xd4\xed\xf6\x20\x69\xd1\x01\x1e\xf1\x69\x46\x34\xba\xbc\x4c\x32\x1f\xe2\x26\x4d\x46\xf1\x95\x5d\xae\x1f\x41\x24\xeb\xc7\xa2\xbe\x96\x62\x4d\x5a\xad\xc5\x34\xa3\x8e\x3b\x78\xb1\x04\x6f\x97\xef\xd6\x9b\xbd\xdd\xca\xb7\x26\x14\x5b\xe3\xf3\xad\xf1\x68\xc8\xb7\x26\xa6\x7e\xab\x0f\x29\x0d\xc4\x6e\xb1\x49\xda\x6a\x4d\x61\x46\x1d\xb7\x6f\xae\x64\xd6\xb4\xab\x2b\xda\x17\xe3\x99\xf1\x11\xbc\x98\x35\xd9\x24\x9d\x42\xda\x6a\xa9\xc1\xc8\xc1\xcf\x4c\xde\x72\x4b\xec\xfa\xec\xea\x8a\xb6\xe2\x62\x22\x91\xf8\x30\xda\xff\xd0\x5f\x20\x5b\x64\xe0\x98\x51\xa7\xe5\xe5\xe9\x58\x66\x94\xd2\x50\x53\xb2\xd1\xf8\x9d\xf7\x8e\xac\xc6\xad\x8f\xe4\xe3\x59\xd4\xa4\x6a\x55\x67\x2d\xea\x29\xe7\x14\xb4\x12\xf1\x1a\xf1\x8b\x48\x2c\xf9\xac\x95\xe0\x62\x21\xbe\xae\x24\xb4\x6f\x4f\x2f\x2f\xdd\x4e\xc6\x26\xee\xf4\xf2\xd2\xe9\x65\x6c\xe2\x4c\x2f\x2f\x07\x19\x9b\xd8\xd3\xe2\x9b\x6f\x8b\x6f\x26\x7c\xed\x59\xe9\xdd\xeb\xfd\x77\xc0\xae\xae\x06\xa6\xdb\xed\x96\x2a\xfd\x72\xb4\x12\x7f\x70\x7a\xfa\xc9\xed\xec\x7d\xf8\xe7\xd2\x68\xf9\x85\xeb\xba\x30\x28\x4d\xe6\xab\xbd\xd7\x6e\x1b\x3a\xa5\xd7\xdf\xeb\x4d\x5f\x23\x36\xb9\x9b\x9e\x56\x13\x29\x1d\x51\xfe\xf1\xdf\xf6\x8d\x9b\x37\xa8\x19\x60\x2d\x21\x62\x93\x0f\x53\x45\xaa\x3f\xa0\x5b\xc5\xc9\x50\x36\xf9\x6e\x6a\xdd\xdc\x82\x47\xfd\x26\x9b\xbc\x13\x61\x6b\x15\x6e\xf6\xc0\x6b\x16\x26\xa2\xd1\x38\x26\xb1\xa5\x44\x92\xa8\xd4\xeb\x8f\x28\xcf\x53\xa5\xb3\xe6\x7b\x45\xcf\x5e\x4d\xcf\x5a\x88\x19\xe7\xbd\xa7\xd4\x93\xbd\xaf\x68\x84\x9a\x3e\x07\xe4\xf6\x68\x76\x99\x8c\x66\xcd\x26\x8e\x27\x69\x73\x36\xa5\xab\x49\x38\x9e\x91\xa4\x35\x6b\x39\xd3\x1d\x6f\x99\xf3\xb1\x92\xe7\x5a\x95\x71\xfb\x8d\xa0\xf0\xb3\xac\x5a\xca\xc1\xdc\x8d\x24\xf1\xb3\x6c\x55\xa3\x84\x15\x15\x40\x56\xcb\x89\xfb\x1b\x91\x6d\x16\x2a\x64\x79\x83\xde\x08\x2a\x73\x87\x0b\x71\xec\x0f\xf0\x57\x8a\x6e\xea\x0c\x56\x66\x92\xe9\xbc\x91\xed\xbd\x47\x1b\x61\xb9\x82\x27\x77\x53\xfa\x9e\x6f\xf0\x37\x74\x8e\xde\x63\xf8\x0b\xb5\x47\xdf\x68\x11\xea\x5f\x46\x18\xfd\x40\xbf\x99\xfc\xa5\xd9\x9c\x62\x3f\x38\xbf\xc9\xb2\x18\xdd\xc0\x0f\xf0\x7e\xf2\xc3\x14\x9f\x85\x59\x86\xfe\x5a\x21\x93\x6f\xf0\x8e\x8f\xe2\x4f\x02\x98\xdf\x23\x39\x72\x17\x63\xf8\x47\x7a\x3f\xb9\x9b\x0a\xbb\xcb\x20\x19\x9c\xfd\x49\x3f\x21\x4e\x15\x74\xfa\x9d\x41\xbb\xd7\x19\x60\x28\xca\x9d\xa2\x7c\x88\xa1\xf1\x27\xeb\x4e\x7f\x80\x4d\xb3\xf8\xe5\xe0\x2c\x4b\x11\x6f\x5b\xd0\x89\xbc\x6c\x4f\x54\xfb\x8f\xa5\x74\xea\x0c\x12\x7e\x67\xf9\x65\x91\x9c\xbf\xb0\x5b\x78\xee\x07\x82\xb9\x92\xe4\x55\x75\x85\xf5\xd2\x56\xb7\x47\x4b\x54\xf9\x42\xcb\x90\x85\x37\xb7\xf4\xb1\xd0\xd4\x49\x5c\x97\x60\xb0\x65\x3c\xc1\xc9\x87\x29\x4d\x76\x95\xf8\xe9\xf2\x06\xaa\xe6\xef\xc1\xd0\xa8\xdd\xc0\xc0\xd9\xb7\x9b\x72\x89\xa6\x57\x26\x1f\xa6\xe0\xd3\x85\xb2\x37\xf3\x39\x22\xf4\xaf\xa2\xfc\xd4\x1f\xe8\xd2\xc5\xa5\x44\x41\xd9\xfa\x3d\x6a\xf9\x44\x44\x65\x39\xfc\xae\x60\xa9\xc5\x90\xbf\x9b\x52\x99\x2f\x6d\xf2\x6e\x4a\xfd\x7c\x1a\xc1\x0e\x7c\xd3\x44\xdf\xa3\x9b\x3d\x61\xd5\xcd\xca\xc0\xf0\x3d\xba\x2f\xc9\xbb\x6e\x6e\xf3\xa2\x23\x35\xcb\x52\xb0\x9b\xd0\xc0\x18\xf4\x8e\xdf\x1d\xec\x78\x7e\xdc\xff\x26\x17\xcd\x01\x86\x27\xf6\x54\x6f\xa2\x88\xf5\xba\xbf\xe9\x47\xbe\x11\x75\xdf\x04\x89\xd3\x23\x87\xb6\xf2\xaa\xaa\x5b\x56\x3c\x88\x04\x29\x0a\x8d\x24\x0a\x19\x88\x34\x2b\x1c\x3d\x70\x50\x9d\xf7\xfe\x47\x9a\x3c\x2f\x37\xa9\xc7\xd6\x76\xeb\xe6\xf1\x35\x52\x6d\x75\xf6\xdb\xc2\xf9\x10\x7e\xf7\x97\x57\x57\x57\xb6\xf8\x5a\xc4\x1c\xa9\xff\xfc\xcd\xd1\xcf\x15\x7a\xc9\xbf\xef\x75\x4e\x7e\x3f\x38\xf8\x5e\x62\x2f\xa8\xbf\xe3\x3f\xe6\x1b\x07\xdf\x0a\x99\xf9\x91\xab\x5d\x57\x6f\x7f\x87\x4b\xf5\xf8\x56\xbc\x2e\xeb\xb2\x27\x9c\x2b\xd3\x8d\xff\xfe\xaf\xf6\x37\xac\xf4\x11\x5f\xb0\x5f\x8e\x76\xf5\xfb\xbf\x3a\xdc\xa4\xbd\xcf\xbe\x3a\xfe\x59\x65\x6f\x4a\x9f\xf1\x4d\xf9\xf3\xc1\x67\x3b\x7c\xb6\x45\xfb\xa0\x0f\xb6\xa8\x0a\xae\x62\x79\x63\x3d\x69\xad\x24\x8c\xb8\xca\x8c\x0b\xbd\x81\x20\x67\x5c\xe8\x7d\x39\x7a\xff\x51\xbe\x54\xf1\x9f\x92\xbf\x14\x9c\xa5\xe2\x20\xcb\xbc\xa3\x4c\xc5\x21\x23\xfc\x4b\xbe\x50\x70\x84\x05\x17\x58\xe3\x5e\xa0\x71\x69\x54\xb1\x1d\xd4\x09\x8b\x85\x01\x5e\x4c\x3d\x6d\xc0\x25\xd4\x83\x86\xb0\x7c\x41\xc6\x56\xce\x76\x45\x1b\xa8\xe1\x97\x27\x98\x65\x0d\x3f\x9f\x20\xa7\x2a\x56\x8a\x53\x31\xde\xe4\x96\x73\x25\x23\x3a\xf1\xa8\x04\xed\xb2\xe4\x4d\x6e\x8b\x05\x25\xbb\x2c\x10\x47\xaa\x28\xd6\xcf\x6a\xfb\x4b\x3f\x7a\x1d\x29\xa9\x2f\x65\x9d\x1e\x2d\x2e\x87\x23\x8c\x22\xea\x4f\x96\x82\x39\x98\xe2\x31\x0a\x51\x29\x36\x19\xc4\x62\xab\xaa\x65\xa9\xd0\x35\x91\x99\x48\x34\x50\xd8\x7e\xbf\xfc\xea\x07\xb2\x02\x69\xa3\x46\x66\x20\x0c\xd4\x48\x0c\x7c\xbf\x49\x5a\x8e\x66\x5d\xda\x19\xb1\x03\x47\x6d\xbf\x6d\x6d\xf6\x1b\x79\xc1\x3c\x5c\x1f\x49\xf7\x5a\x24\x66\x92\x21\x6c\x0d\x2d\xff\x2b\x6c\xb2\xc7\x86\x41\x18\x18\xf8\xc6\x00\xd4\x6c\x46\x4d\x1f\xe7\x12\x22\xd4\xee\xe1\xc2\xca\xf9\x74\x54\x97\x22\x02\xf4\x7e\x66\xb5\x34\x66\xd1\xcb\x3b\x16\x24\x59\x66\x18\xa5\xbc\x6a\x4e\xfb\x74\xca\xf3\x2f\x1a\x03\x67\x19\xb3\x6e\x92\xda\x40\x01\x22\x03\xfd\x41\x0c\x0d\x38\x17\x7e\x7e\xe7\x11\xfb\x5b\xea\x47\xe5\x50\x9b\xe7\x95\x34\x49\x4e\xfb\x94\x45\xf7\x5e\xae\xee\x5c\xe2\xd1\x76\xa5\xc4\x43\x08\x2b\x4e\xfa\x92\xf9\x96\xdc\x8e\x2c\x43\xfa\x91\x86\xe3\xa7\x1d\x89\xf2\x17\x4f\x3b\x7c\x66\xdc\x18\x94\xb2\x22\xa8\x54\x96\x09\x31\x67\xc2\xe9\xcc\x04\x98\x0e\x36\xef\x89\x80\x44\xda\xbf\xdc\x25\x4e\xdb\x85\x03\x17\xe6\xc2\xd7\xbc\x5d\x63\x4e\x2e\xa3\x5e\x3a\xed\x36\xae\xa4\xab\xe0\x4f\x5f\xf0\x4b\xbf\xff\x5c\x76\x4b\x97\xb0\xc0\xc1\x6a\x1a\xe0\xd5\xc5\xd4\x09\xeb\xfd\xc2\x6b\xbd\xd7\x3d\xd3\x54\x4e\xe2\xde\x38\x24\x3e\x46\xea\x20\x5b\x46\x53\x10\xe8\x56\x9c\x84\x11\xa3\xd1\xa1\x7f\x3b\x14\xc7\xec\x84\xcd\xb9\x3b\x38\x9a\x64\x4c\x58\x06\x57\xc3\xa2\xb6\xb1\x20\xad\x55\xad\xb7\x22\x4c\xcc\xbe\x85\xa5\xb4\xcf\x2b\x6c\x2b\x27\xfe\x34\xcb\xd8\x7e\x8a\x9c\x70\xc2\x0f\xf0\xb4\x92\x9f\x4a\x4a\xfb\xc4\xc6\xe9\x24\x64\x4e\xfb\xb4\x6f\xdf\x99\x70\x8e\x03\xad\x67\x2c\xdb\xa2\x09\xbb\xe5\x1d\x06\x86\x9c\x1e\x46\x46\xf1\x46\x24\xd4\x77\x7a\xc4\xe9\x29\xc1\xa3\x10\x2a\x8a\xce\x9e\x2b\xf4\xd3\x5e\x85\x6e\x1b\xa3\x8e\x1a\x84\xf0\xd0\x6b\xf0\x63\x31\xc4\x68\x32\xb5\x84\xe5\x9a\x00\x90\xf9\xe8\x8e\x1a\xb3\xf9\x9a\x9f\xa8\x50\x35\x3b\x19\x81\xc8\x1e\x12\xc7\x1e\x2a\x91\x68\x31\xd6\x13\xa1\x0b\x6a\x16\x46\x18\xbe\x09\xe9\x61\xb1\x24\xbc\xac\xbc\x18\x02\x4b\x16\x1d\x3c\x37\x00\x79\x79\x31\xdc\x23\x8b\x21\x4d\xe8\xaa\xab\x71\xdc\xac\xee\x8f\x2c\xc7\xb3\x5d\xfd\x4b\xa3\xed\xf1\x63\x6e\xe4\x76\x73\x06\x78\xb4\x61\x9f\x85\xe7\x7e\x30\x99\x9a\xa6\xe4\xc0\x1c\x3c\x09\xa7\x65\x3e\xdc\xa3\x0d\x67\x57\xf6\xca\xf4\xca\x53\x3a\x61\x82\x77\x38\xab\x2f\xd8\x22\xe5\x3b\x15\x96\x36\xa9\x3a\xed\xce\x73\xa3\x4e\x95\xa7\x2d\xfc\xce\x1b\xf6\x99\x98\xb9\x51\x9d\xac\xc5\xcb\xca\xd3\x0d\xf7\xa7\x1b\x56\xa7\xfb\x1f\x3b\x53\x39\xa4\xe3\xd3\x7d\x56\x84\xa7\xbd\xe9\xda\x3a\x10\xac\x3a\x8a\xd2\xa4\x91\x9f\xc5\xf2\x59\x2d\x4f\xab\xc6\xe8\xf1\x8f\x9f\xcc\x4e\x0d\xba\xa9\x1d\xb3\xce\xcc\xac\x73\xbb\x09\xff\x0f\x4f\xa5\x6a\x8e\x95\x1f\x48\xaa\x15\x05\xc2\x1d\xa5\xa3\x54\x09\xed\x0e\x3e\xf3\x39\x2a\x15\x29\xaf\x1a\xc2\x97\xa3\xa2\x1e\x2e\xa5\x94\x62\x22\xdc\x67\x3e\xd7\x28\x5c\x1f\x72\x9b\x10\x80\x0f\x0b\x58\xca\x70\xcf\x9b\x3a\x24\xc6\xd7\x61\xcc\xff\x21\x92\x8c\x9c\x1f\x5a\x2f\xaf\xe9\xfc\x88\x69\xf7\x63\x61\xda\xbd\x56\x79\xba\x67\x68\x29\xa4\x0d\x8f\x22\xe1\x76\x84\xd6\x30\xaf\x37\x0a\x16\xc6\xd8\x52\x8d\x7a\x97\x65\x1b\x2a\x1d\x4a\x4c\x33\x46\x77\x58\x04\xf6\x97\xc1\xaf\x36\x28\xa1\x29\x5a\xe6\xbe\xf5\xa3\xe4\x6a\x3b\xda\x36\x9b\x78\x85\x02\xd8\xc2\xe3\x78\x8d\x96\x22\xe5\x37\x26\xfc\xaf\xca\x1b\x26\x0c\xc1\xa9\xd2\xb3\x2d\x75\x84\xf7\xcd\xa8\x81\x7c\xba\xa8\xda\x92\x97\xdb\xf2\xd0\x02\xd6\x30\xf1\x95\x51\xd3\x76\xca\x4f\x17\xf1\xb5\x89\xb9\x16\xdd\xa9\xc1\xd0\x2d\x04\xea\xc8\xec\xab\xd1\x94\x7a\xac\xdd\x21\xfc\x5f\xe9\x18\x29\x13\x93\x15\xc9\x9f\xa5\x6a\x4b\x1c\xad\x1a\xea\xe4\xf4\x75\x50\x91\x7e\x43\x3a\x99\x5a\xca\x22\x97\x03\xbd\x46\x68\x9a\xce\xc5\xc4\xc9\x0b\x91\x03\x2d\x1b\x5f\xda\xa5\x1b\x82\xbc\x2c\xd3\x10\x3d\xc4\xa5\x23\x74\xc2\xb2\xd7\x1b\x87\xca\x70\x54\x5c\x9b\xc2\x68\x34\xcb\x6c\xf2\xac\xbb\x24\xb4\x81\xc5\x5d\x3a\x41\xc9\x68\xa4\xf7\xb1\x34\x32\x99\x92\x94\x88\xec\xf3\xa2\x5d\xb9\x98\x22\x5b\xba\x68\xef\xb9\x19\x26\x9d\x9e\x0a\xa7\x39\xc8\x29\x23\xc5\xee\x39\x55\x12\xa9\xd7\xc3\x48\x5e\x88\xdc\xf6\xa9\x42\xba\x4b\x49\x5f\x22\xd3\x55\xc8\x1f\x3e\xb5\xd5\xd3\x67\x9a\xec\xca\x91\x64\xa4\x67\x80\xfa\x04\x12\xf5\xf4\x59\x9b\x5c\xde\xf8\xcd\xa6\x3a\x5b\x0d\x96\x65\xc1\x15\xd5\x69\xcf\xc7\x48\xf7\xa3\xee\x8c\x8f\x1c\x8c\x89\x8f\x6c\x90\x81\x94\x64\x2e\x82\xc2\x3c\x21\x19\xb3\x49\x30\x25\x93\x00\xf8\x5f\xce\xee\x17\xf9\xf8\x42\xeb\xa5\xde\x20\x1a\x4a\xae\x15\xa2\x3c\x20\x53\x54\xca\xdc\x17\x95\xf2\x1b\x96\x63\xba\x0b\x50\xde\xeb\x91\x5e\x0f\x7a\x03\xd2\x1b\x14\xe4\x5d\xe7\xf7\x52\x5c\x2a\xc0\xf0\x64\x2a\xfc\xb0\xca\xc7\x53\xb8\x9a\xea\x54\xd3\x47\x8e\xea\x31\xfb\x6e\x15\x0a\x4f\xc5\xb6\x80\x32\x6f\x08\x06\x61\x7b\x87\x52\xcf\x4b\xdd\x4c\xed\xa6\xda\x79\x6e\xea\x9a\xbd\xb9\x28\x15\xb0\xa7\x21\x7b\xcc\x67\x57\xf6\x49\x4b\x69\xa3\x11\xeb\x0b\x5a\x7a\x51\x77\x49\xd3\x62\xe6\x71\x79\xe6\xc7\x6c\xd4\x45\xca\xa3\x3c\x58\xe8\xb1\xbb\x7a\xa6\x03\x01\xcb\xf5\x09\xa8\x57\xa4\x9a\x86\x88\x06\x2d\x47\x28\x4b\x0e\xd1\xbd\xb0\x85\xd3\xce\xb9\x28\x82\x10\x55\xc5\x86\x18\xa2\x4b\x5b\x54\x0a\x9a\xc2\x3f\x89\xda\xa3\xa8\xd5\xc2\xfe\x02\x45\x82\xd5\x33\xcd\x64\x12\x4d\xcb\xae\xd3\x11\x1f\x8f\x7c\x6e\x39\xfb\x1b\xa3\xa5\x40\x3a\x99\x80\x04\xaf\x05\xfc\xf8\x23\x34\xad\x73\x84\xa6\x5d\x7b\x9b\x2a\x41\x7b\xc4\x94\xff\x8f\xd0\x0c\xbf\x97\x9a\x6d\x2b\x2e\x44\x06\xf8\x3e\xc8\xe7\x93\x2b\xc1\x18\xca\x53\x33\x36\x24\x9c\xca\xcd\x76\x18\x2e\xc7\xa6\xaf\x10\x09\xe1\xa2\xd6\xb6\xff\x98\xcf\x52\xc0\xee\xeb\x22\x44\xec\x51\x0c\x18\x69\x9f\x26\x1f\x05\x95\xd5\x61\xe5\xf0\x13\x39\xd2\x4c\x34\xd2\x94\xc8\x71\x2f\xfc\x48\xf7\x77\x13\xc2\xc7\xf8\xb6\xb2\xc3\x67\x65\x7b\xbf\xe0\x23\x71\x94\xe8\xad\xec\xbb\x50\x12\x55\xb7\xbe\x43\xdc\x4e\xb1\xf5\xdd\xdf\x4d\xe2\x9e\x9e\x48\xdd\x1c\xfe\x3d\xc3\x77\xbe\x30\xfc\xe7\x52\xbb\x7a\xf8\x5d\x15\x9e\xc9\xd5\x18\xd5\x19\x68\xef\x6b\x91\xb7\x64\x32\x95\x6a\xde\xd2\x1c\x0f\x8e\xb7\x6f\x9a\xa9\x82\xe0\x95\x73\x2b\xcd\xb5\xea\x7c\x33\x62\x54\x72\x5a\x10\x39\x8f\x94\x9b\x83\xbf\x40\x09\xad\x24\xec\x49\xa0\x48\x5f\xae\x61\x50\x5a\x55\x02\x16\xaa\x62\x9f\x23\x76\x10\x21\xd7\x3c\x11\x99\x0d\x66\x34\x46\xab\x96\x8f\x61\x51\x32\x61\x99\x61\x58\x52\x7b\xb4\xbc\x9c\x8d\x96\xcd\x26\x5e\x4c\x96\x53\x5a\x4a\x1d\x2f\x6e\x89\x16\x7b\xf9\xcd\x25\x26\x42\x75\xe6\x37\x97\xb9\xb3\xdf\x42\xed\x82\xb6\xcf\x52\x90\x4e\x46\xd4\xa8\x58\x49\x75\x48\xb7\x23\x76\xe6\x77\x13\x8b\x6d\x8c\xda\x47\xce\x56\x1c\xae\xf7\x4e\xd6\x31\x2f\x9c\x3f\x00\xfd\xba\xcf\x8d\x5d\x95\x23\xd2\xce\x1e\xc7\xd4\xe9\x2a\x34\x2a\x5c\xb4\x53\x3a\x71\xc0\x85\xf6\xb4\x42\xcd\x96\x0f\x50\x2a\x2a\xa2\x3c\x90\x6c\x96\x35\xea\xde\xab\x68\x7e\x47\x50\xec\x31\xcf\xa1\x12\x35\xa1\x02\xe0\x86\xda\xa7\xb2\xfa\x1b\x54\x00\x8c\x2a\x4a\x53\x9c\x81\x88\x6c\xb8\x0f\xf4\x6a\xc8\x57\xe9\xbf\x8f\xd4\xa8\x70\x61\xd3\x27\x3e\x38\x11\x66\xb3\x44\x3f\x7f\xed\x25\xcc\x80\xa7\x20\xbc\x3f\xb4\xe8\x10\xca\x69\x5e\x41\x88\x02\x3f\xf9\x6b\x11\xab\x3e\xa7\xad\x45\x2f\xa7\x45\x53\x12\x61\xf5\xca\x27\x0b\xf1\x06\x4b\x7e\xe2\x49\xf8\xe6\xe3\x7b\x79\x1f\x1a\x94\xfa\x38\x1f\x52\xe9\x05\xf1\x25\x36\xe8\x91\x76\xaf\x74\x76\x7e\x2f\x86\x2f\x12\xc5\x54\x01\xe9\xb1\xb4\xa8\x2a\x34\xaf\x5e\x05\x61\x78\x61\x25\xe1\x3f\x7c\x7c\xff\x0e\xe1\x2c\x73\x1a\x94\x1e\x4c\x86\xbf\x54\x9e\x27\xe5\x09\x1c\x36\x2e\xe8\x99\xf2\x6c\xf9\x97\x35\xca\xe0\x82\x10\x0b\x8b\x54\x0c\x46\x90\xae\x6f\x85\xe1\x87\x0e\x09\x9e\x65\x7e\xfc\xda\x0f\xfc\x84\xa1\x00\x8f\x93\xf2\xb2\x22\xac\x72\xc8\xe0\x52\x4e\x3a\x6d\xc5\xb9\x7f\xcc\x4e\x45\xc0\x51\xd1\x63\x3f\xe8\xe0\x1c\x42\x18\x5e\x5d\x81\x33\x41\xca\xf9\x59\x26\xb3\xf1\xfb\x10\x01\x43\xed\x3e\xc6\xe5\x40\xb6\x7d\xd2\xee\x17\x6a\x9f\xde\x51\xcd\x48\xb5\x69\xf0\x69\x54\x84\x5c\x08\x69\xa4\x0f\xe5\x59\x65\x83\x9a\x86\xd1\xa0\xc6\x9b\x60\xeb\xad\xfc\xb9\x28\x36\x4c\x53\x84\xfd\x47\xd1\x91\x88\xf1\x92\xc2\x09\x4b\x8e\x40\x67\x45\x2c\x68\x36\xf6\x4b\x2f\x48\xb5\x65\xb1\xa4\x3a\x15\x80\xd3\x3b\xa1\x49\x29\xc9\x69\xb5\xb5\xba\x01\x4f\xb7\x7e\x30\x27\x0c\xb9\x7d\xc9\xb2\xba\x7d\xe2\xf6\x8b\x03\xde\x7b\x2e\x82\xd5\xe1\xa6\x07\xbd\x72\x4c\xd6\xa5\x17\xbf\x51\x64\x9e\xc8\x85\x74\x68\x25\x2f\xe4\x9f\xe7\x1e\xdf\x2d\xa1\xc8\x41\x1e\x84\x5a\xd3\xb2\xc7\x39\x14\x44\x5e\xa3\x4c\xe4\x65\x59\x39\x54\x4d\xc3\x39\x93\xfa\x2a\x9d\x97\x53\x76\x53\x44\xb2\x29\xfb\x16\x88\xe0\x68\xc2\x11\x50\xe6\x57\x1a\x71\x4e\xa0\xfa\x61\x89\x17\x68\x68\x46\xa0\xa1\x19\x01\x75\x9a\x4a\x69\x70\xa5\x79\xaf\x58\xb9\x13\xba\x1c\x1d\x16\xb9\x26\xa1\x40\x48\x2f\xfe\xe5\xa7\xf8\x45\x4e\x42\xa3\xc9\xbf\x9c\xa3\xe9\x0b\x7c\x71\x26\x93\x20\xe8\xa3\xdd\x1e\x8a\x10\xc8\xbe\xce\x8d\xf0\xa5\xa0\xce\x45\xd6\x0f\x64\x18\x4d\xe9\x21\xbb\x56\x89\x6b\x27\xce\x54\x05\xc7\x2e\x14\x98\xc6\x4e\x91\xbf\x45\x82\x38\x31\xab\xe7\x22\xcb\xb6\x0e\x55\xd5\xb6\xf7\xb4\x3a\x2e\x46\xc6\x5b\x6f\x63\x40\x0d\xf2\x3a\x84\x51\x6c\x8f\x3f\xd4\xbc\x9e\x5d\x12\xd6\xd9\x25\xd1\xee\x9e\x65\x60\x29\x11\xce\x1d\x4b\xae\x83\x24\x7a\x54\x7c\x37\x88\x41\x60\x28\x04\x66\x9c\xfb\xb3\xb6\xfb\x4e\x58\x25\xf7\xc8\xc8\x9a\xb3\xc5\xde\xe7\x12\xd3\xda\x44\x85\xf2\x12\x4a\x07\x71\x34\x6c\xe2\xb4\x6d\x68\xdb\x84\xff\xeb\x92\xb6\x50\x74\xf6\x9e\x11\x3b\xb2\x2f\x30\x84\x4c\xee\xfd\xb7\x28\x01\x4f\xa5\x37\x9f\x85\xf1\xb2\xc4\x75\x35\x90\x67\x9a\x7d\xc7\xa6\x65\xff\x66\x0f\xbd\x13\x50\xd9\x7a\xfb\xf2\x9f\x6e\x7e\x78\xf9\xed\xf7\xd7\x18\x9b\xa6\x27\x32\x99\xcb\x60\x99\x7c\xdc\xc9\xd2\x80\x27\xd1\x5e\x0d\x01\x21\x43\x6f\x5d\x3a\xc2\x3a\x95\x5d\x0d\x3b\x43\xbb\xe7\xf6\xba\x56\xcf\xed\xb8\x5d\xa7\xdb\x1b\xe7\x89\xca\x19\x6e\x8a\xe7\x6f\xdf\xb9\xc4\x47\xac\xe5\x34\x43\xfe\x2f\x7e\x11\x22\xd6\x74\x70\x19\x4f\x43\xbf\x4d\xfa\x12\xa0\x9c\xa6\x09\xf2\x64\xee\xb1\x1f\x54\x67\xeb\x9b\xa6\x73\xe1\x23\x1b\x5f\x95\x27\xc1\xab\x91\x12\xbf\x99\x94\xe2\x88\x29\x5c\x94\xd0\x66\x82\x4d\xd3\x6e\xd0\x64\x9c\x5c\xda\xe3\x16\x43\xad\x04\x17\xf9\xd6\x93\x66\xbe\xd6\x28\x79\x91\xf0\x91\x93\x64\x8f\xc6\xe8\x7d\x91\xc6\x90\xa3\x4e\xbc\xfa\x51\x0b\xc1\x49\x69\xd8\xbc\x5e\x1d\xf1\x56\xce\xc6\x9f\x0f\x50\x64\x84\xbf\x40\x4e\x8b\x61\x7c\xe1\xee\x8f\xec\x44\xb4\xba\xfc\x44\x75\x72\x5a\x4b\x0d\x60\x76\x5b\x4f\x3c\xfa\xb2\xf7\x17\x3a\x73\x3f\x2a\x67\xd6\x77\x2e\xda\xd5\x3d\x55\x29\xf1\x9d\xde\x09\x8c\x5d\xa2\xf3\x74\xdf\xab\x5f\x6a\x0d\xb6\x10\xbb\xba\xba\xa2\x36\x1e\xb7\x9d\x56\xe9\x48\x17\xc7\xad\x69\x75\xd5\xc8\xbe\x7d\xff\x8d\x7b\x8d\xf9\x9d\xaa\x2e\x46\xff\x8b\xe9\xce\xc4\xe7\xec\x61\xb3\x3f\xa6\x23\x77\x41\xad\x47\xd3\x47\xb5\x8b\xdf\x3f\x8d\x6d\xe5\xe2\x3b\x65\x59\x09\xf2\x1b\xf9\x18\xd6\x4e\x71\x22\xc4\x4f\x45\x63\xaa\xd5\x75\x48\x5f\xe8\xd3\xfb\xa7\x83\x3b\xef\xcd\x64\x21\x5c\x40\x09\x43\x7d\xb7\x2c\x83\xee\xbb\xa4\x2f\x20\x50\xff\x04\x5a\x2a\x9f\xe4\xdb\x78\xaf\xe1\xe5\xe3\x26\xdc\x87\x8b\x45\x1e\xb5\x08\x42\x6a\x83\x47\x6d\x88\x0f\x65\x34\x29\xb5\x47\xde\x65\x3c\xc2\xe9\x25\x0a\xa8\x5f\x12\xca\x79\xcd\xe6\x14\xe3\x31\x0a\x69\xf8\x02\x45\x34\xbd\x08\xf0\x8b\xa8\xe9\x40\x4a\x03\x4c\xc2\x26\x0d\xae\xec\x31\x8a\x68\x70\x91\xe2\x17\x11\xc9\x93\xe4\xa6\x54\x00\xb3\xb1\x73\x61\x93\xf4\x45\x71\x7d\xc3\x7d\xde\xa0\x7f\x5a\x82\xaf\x67\xeb\xaf\xd3\xd5\x29\x81\x96\x92\xff\x75\x1b\xd4\x47\x1d\x77\xd8\x19\xf6\xfa\xee\xb0\x0b\x5d\x9c\x65\x6e\x83\xfa\x6a\x9e\xbb\x62\x3b\x79\x83\xb5\x92\x80\x26\x83\x88\x36\x13\xf0\x69\xaf\xdb\x6d\x77\xcd\x00\x42\xf5\x94\x47\xa1\xb7\x33\xff\x45\xd8\x44\x48\x55\xb8\xba\xba\x72\x7a\xf8\x45\xd8\xf4\x5f\xa8\xa2\x48\x16\x49\x43\xce\x2b\xbb\x72\x27\x73\x2a\xba\xff\x0c\x4b\x86\x62\x73\x57\xe1\x9d\x63\xd7\x01\x84\x12\xb0\xcf\xaf\x9e\x63\x5f\xef\x2f\xf3\xf3\x18\xbd\x52\x67\x1b\x22\x10\x5d\x1d\x86\xa8\xcb\xc9\x7e\xb2\xb1\x5a\xeb\xcf\xd2\xc0\x2f\x34\x96\xda\x1f\xf5\x69\xd0\xb9\xd7\x51\xec\xdf\x05\x44\xc0\xd2\x3a\x10\x78\x2a\x7f\x76\x09\x12\x68\xc4\x9e\x43\xa0\x93\xe7\xcd\x65\x2d\xa7\xdf\xa0\x0d\x79\xc0\xfd\x60\x89\x64\x11\x2e\x9d\xb4\x0a\x02\xdc\x9f\xbf\x00\xdc\x0a\x9d\x8b\x78\x97\x2d\x0d\xc8\x08\x92\xb8\xba\x15\xa2\x16\xff\x8b\x5f\x48\x40\x7b\x7d\xe1\x1e\x9e\xa7\x02\x16\x9d\x4a\x0e\x7d\x6a\x9a\xf9\x70\x0f\x10\x9f\xe6\x30\xc5\x30\x45\x6c\xd2\x56\x89\x22\x53\xd7\x9c\x04\xf2\xa1\xe5\x10\x94\xb4\x02\x7c\x21\x22\xa6\x37\x43\x31\x99\x5d\x1d\xd0\x3c\x95\x8e\xf9\x70\x6f\x93\x28\x0d\x66\xf5\x28\xc9\x1e\x17\xb8\x88\xe4\xf1\x4c\x65\x38\xd2\xca\x69\xaa\xcb\x9a\x7c\xd2\x85\x4f\x67\x44\xd1\xa2\xc8\x6e\x4f\x4b\x22\x3b\x52\xf1\xde\xe9\x4a\xbd\xbb\xf4\xcb\x9b\x51\x95\x0b\x47\xb8\xf1\x49\x0e\x62\x59\x49\x55\xb8\xa1\x91\x25\xc9\x3f\x98\xd3\x0d\xac\x69\x29\xd3\x14\x3c\x52\x43\xbe\x33\x28\x0d\x91\x88\xee\x88\xd6\x18\xc3\x96\x1a\xfc\x63\xce\x57\xec\x67\xa1\x2a\xc7\x93\xce\x77\x2a\x46\x0c\x1a\x8e\xcc\xf5\x15\x6b\x11\x62\x29\xf0\x48\x1e\x61\x4b\xa7\xdb\x90\x19\xb0\x50\x42\xb7\xe3\x44\x8c\x13\x61\xb2\x44\x09\xb4\x31\x2e\xe7\x73\xb0\x45\x93\x9d\x36\xa5\x34\xcc\xb2\x4e\x57\x78\x4a\x71\xae\x6f\x30\xa0\x22\x0f\x47\x52\xae\xed\x62\x9c\x65\x8e\x2b\x3c\x04\x34\x67\xf7\xce\x7b\x97\xbb\xe2\x77\x06\xf2\xfb\xf8\xde\x17\x59\x0d\xcb\xdf\x3a\x18\x3f\xcd\xbc\x98\x9d\xf7\x7a\x44\xfc\x1d\x0e\x48\x44\x5d\xf0\x69\x67\x78\x76\x1b\x31\xef\xf3\x99\x28\xee\x0f\xe5\x6b\xc7\x71\x48\x44\x07\xe0\xd3\x6e\x57\xbd\x9f\xb3\x85\x97\xae\x12\x22\x7b\x6e\x26\x3b\x8d\x08\x3d\x91\x23\x5e\x3a\x0a\x09\xab\x09\x1b\x66\x34\x55\x6b\x32\x5a\x5d\xce\x46\xab\x66\x13\xcb\x58\x01\x69\x79\x50\x2b\x8c\x2f\x3b\x83\x2c\xf3\xae\xfc\xd2\x7c\xf4\x3d\xd0\xb9\x29\x51\x0a\x11\xde\xed\xf2\x6e\x05\xab\xbb\x41\xc6\xb9\x1d\x3a\x06\xce\x32\xfe\x6c\xdf\x8a\xc7\x0d\x32\x9a\xf6\x83\x63\x60\xfc\xb4\xa9\xd9\xc6\x7d\x1c\x7d\xe9\x08\x1e\x26\xa8\xe4\xf6\xaa\xf8\xe1\x6f\x4c\x13\x3d\x8e\xd3\x32\x98\x5a\xeb\x90\xad\xca\x8f\x04\xef\x30\xd1\xa7\xac\x41\x43\x14\x60\x3c\xf6\x90\x74\x42\x16\x19\xf8\x20\x80\x0d\x26\x22\x06\x4d\x2e\xc3\xbe\x15\xd1\x48\x45\x06\x70\x34\xc7\xc4\xc8\x39\x17\x78\xfb\xe6\x9d\x7a\x7a\xe7\xbd\x83\x77\xd7\xdf\xbc\xfc\xf4\xe6\x87\xeb\x9b\x37\xef\x5e\xbf\x79\xf7\xe6\xd3\x5f\xe1\xc3\xfb\x8f\x6f\xaa\x25\xd7\x1f\x3e\xbe\xf9\xf6\xfd\x3b\xd0\xb4\x3f\xf8\xf1\x9b\x20\x61\x77\x2c\x02\x11\x56\x18\xfc\xf8\xa3\xb7\x60\xba\x8c\x77\xf5\xf1\xe5\x6b\xde\xc0\xa7\xeb\x6f\xae\xbf\x13\x3d\x56\x0a\x4a\x79\x4d\x8b\xfc\xa0\xba\xcd\xb2\xf9\x32\xdc\x53\x7b\x74\xa3\x0f\xff\xfd\xe8\x9e\x6f\x33\x9a\xc3\x2d\xbd\x99\xdc\x4f\xb1\x48\x63\xb4\x81\x5b\x6c\x9a\x0b\xfe\x17\x66\xfc\x1d\xc6\x67\xa5\x2b\x4a\xd7\xb0\xae\xf8\x2f\x6d\x20\x97\x19\xa9\x45\x85\x8d\xb4\x3a\xd5\x39\x40\x95\x00\x4d\x05\xb6\x3e\x34\x38\x97\xce\xca\x3d\xd2\xed\x1d\x75\x47\xce\x25\x47\xa7\x52\x9c\x97\x20\xa6\x1e\xc9\x93\x5a\x6b\x92\xb3\x0a\x2e\xb4\xba\x65\x9a\x53\x34\xfa\x45\xfa\x4b\xda\xaf\xea\x0d\x3b\xe8\x45\xbf\xa8\x01\xce\x5a\x00\x59\xc4\x84\x37\x4d\xbf\x0a\x97\x0b\xa3\xd4\xba\xf4\xdf\xa7\x66\x97\x6f\x32\x61\xa8\xe7\x54\xac\x39\x1c\xd2\x93\x4d\x3e\x8f\xe8\x29\x35\xc9\x39\xea\x1a\x54\xcd\x1a\x94\xed\x23\x93\x67\xc8\xb4\x7b\x05\x9e\x2d\x51\xeb\xa5\xee\x4a\x47\xfd\x08\xaf\x27\x22\x7e\x30\x7c\x49\xf7\xe3\x53\xef\x6a\x27\xfc\x3c\x7a\x29\x1f\xc1\xfe\xf5\x22\x07\xbd\x54\xe7\xfc\x3c\x2e\xb2\x68\x7e\xef\xb2\x92\xd6\xe9\xf6\x9f\x93\x0b\x7b\xd8\xae\x30\x6b\x4a\x98\x52\x40\x81\x86\xd0\x0e\xe4\x43\x28\x5e\x54\x58\xb7\x61\x9b\x0c\x65\x97\xcf\xe0\x0f\x87\x9d\xa3\x5d\xbe\x09\x6a\x3b\x7c\x13\xec\x75\xd7\x21\x43\x41\x84\xd6\xa5\x95\xfe\x82\x36\x42\x5b\x2b\xe6\x79\x4a\x84\xf1\x9f\x63\x59\x49\xf8\xda\x7f\x60\x73\x48\x4b\xe2\x25\x58\xd1\x89\x0d\xf9\xff\x53\x98\x69\xa2\x42\x57\x27\x22\x99\x66\x14\xb1\x59\x72\xee\x07\xdb\x70\xe6\xf1\xb1\x34\x0c\x58\x1c\x8d\x1d\xdb\x72\x20\xa2\xc9\xa8\xd9\x0c\x2e\x7b\x23\x1c\x35\x29\x7b\xb1\x9a\x04\x53\xe0\xff\xd0\xe8\xef\x1c\xd6\x87\x88\xa6\x28\xba\x70\x58\x1f\xef\xe0\x58\xc2\x89\x1e\x04\xd4\x1e\xb5\x5a\xc9\x15\xb5\x47\x38\x68\xd2\xd5\x24\xe1\x8d\x24\x53\x9a\xa2\xe0\x42\xd0\x96\xc1\xdf\xb1\x17\x0e\xeb\x57\x32\x44\x94\x0d\x0c\x7a\x90\x50\xc3\x18\xb5\x5a\x4c\x34\xc2\x49\x1c\xa3\x41\x69\xa2\xbc\xf7\x65\x32\xcd\xd5\x84\x4d\x35\x37\xa7\x94\x1b\xa2\xe8\x8c\x7f\xab\x95\xb8\x4d\x95\xcc\xd2\xb0\x0d\xe8\xb7\xb4\x51\x01\x6e\x06\x3a\xed\x60\xb2\x83\xf9\x91\x48\x6a\x85\x2a\xf8\xef\x5c\x4a\x9d\xf1\x9c\xbf\x6e\x39\x10\xbc\x60\x98\xcc\x11\x7b\xc1\x20\xb9\x70\x21\xc0\xbb\xb2\x4a\x4b\xd8\xec\x20\xc3\xb6\x6c\xdb\xe6\x83\x1e\xb0\x56\x57\xef\x0a\x6a\xe3\x2c\x33\x1c\x5e\x6c\x0d\xf3\x42\x5b\x14\x5a\x6e\x97\x97\xf3\xbf\x45\x7d\x57\xbc\xb2\xab\xff\x39\xee\x80\xd7\x44\xf6\xc3\x9c\xd9\xb7\xbd\xdb\xb6\xd7\xef\x75\x6c\x9b\x53\xa2\x45\x93\x52\x5b\xb9\xc7\xce\xc4\xa5\x38\x68\xe5\xd3\xac\x0f\x4d\x9d\x41\x68\x04\x31\xa4\x4a\x4f\x0e\x33\x4e\x4a\x89\x8c\x95\x6b\x6a\x18\x9c\x96\xb5\x45\x84\xf5\xd5\xa5\x9d\x65\xab\x2b\xb7\x26\x07\xd0\x4c\xd0\x93\x69\x83\x6a\x7b\x23\xe3\x9d\xf7\x4e\x7c\x94\x5e\xd2\x96\xc3\x5c\x47\x64\x24\xe3\x0f\x9a\xe0\x52\xbb\x99\xca\x2f\x85\xa1\xd0\x9a\x1a\x2d\x03\x52\xda\x4a\x31\xa4\x57\x0e\x6b\xb9\x0e\x3f\x16\x01\xa7\x67\xeb\xcf\xa1\x0d\x01\x65\xa3\xe0\x8a\x76\xec\x61\x6f\x84\x93\x26\x75\x5c\x08\x2e\xc4\x4f\xa9\x6a\x08\xae\xa8\x2b\x5f\xf0\x72\x37\xe7\x75\x76\x28\x7d\x31\x47\x2e\xf4\x86\xe0\x60\xdc\xea\x0d\xf1\xa5\x3d\x96\x45\xad\x04\x1c\x4c\xd2\x0b\xfe\x9c\x88\x28\x88\x2f\x68\xa7\x6b\xb7\xbb\xc3\x61\xcf\xed\xb7\xfb\x76\x67\xd8\x03\x94\xd0\xae\xdb\x4a\xf0\x95\x2d\xc7\xb3\x40\x36\x04\x18\x22\xba\x1a\x45\x57\xb4\x3f\xc2\x0b\xc4\x2f\x93\x8d\x21\x6a\xd1\xfe\x99\xac\x32\x47\x8e\x0d\x91\x4c\x9f\xc1\xef\x61\xcb\xe1\x95\xdd\xf6\x08\x2f\x91\x73\x79\xe9\xb6\x45\x6d\xb7\x7d\x26\x7e\x46\x18\x16\xc8\xe1\xb5\x97\x48\x44\x9a\xdf\x20\xe5\x83\xac\x3a\x5b\x88\x48\x09\x09\x6f\x4c\xbc\x2c\xdf\x83\x55\xce\xd6\x3d\xd2\xd5\x95\x3d\x5e\x37\x11\x8a\xe9\xa3\xbe\x1b\x97\x74\x35\x36\x6c\xcb\xa8\x7c\xd2\x8a\x71\xf3\x91\x3c\xe6\x19\xa9\xe2\xd6\x0a\x37\x0d\xcb\x68\xea\x22\x5e\x80\xc9\xba\xf9\xa8\x0d\x14\x74\x82\x2a\x65\x9a\xd5\x25\x4e\x77\x5f\xc1\x58\x97\xcc\xfe\x24\x98\xd4\xa9\xd3\x24\x94\x14\xc0\xf1\x43\xc4\x66\x7e\xec\x87\x15\x9b\x40\xff\x90\x87\x97\xb7\x4e\x4d\xc9\x81\xb2\xca\xbf\x52\xdb\x3b\x7a\x45\xf2\x9e\x6a\xd8\x66\x75\x3d\x54\xf5\xff\x54\xae\x7c\x04\x10\xe3\x83\x5c\x87\x6c\xac\xfa\x4e\x30\xd1\x4f\x90\xdb\x20\xd6\xae\xdf\x73\xcc\x62\xf9\x8a\x94\x02\x29\x7a\xb1\x96\x9f\x0c\x2a\xf2\x93\x01\xe9\x0b\x6b\xc6\xe1\xf3\xe8\xb3\xbc\xbd\x59\xc4\xbc\x44\xa4\xa1\x1c\x56\xda\xe3\x54\xae\x68\xef\x39\xc4\x99\x36\x33\x69\x0f\x71\xa9\xe9\x4a\x5c\x47\x9f\xc5\x84\xa1\x81\xa2\x00\xcb\x51\x81\x06\x0e\x19\x08\xb2\xa8\x2e\xc3\xfc\x1f\xe9\xea\x91\x28\xb6\xfe\xb0\x2b\xad\x7d\x3b\x95\x54\x5e\x2b\x60\xfb\x5d\x6c\x85\xc1\xeb\x88\xb1\x5f\xd8\x19\x43\x43\x1b\x23\x63\x21\x7e\x9d\xd6\xb8\x95\x52\x79\x99\x66\x84\x12\x3c\x66\x32\xad\xa3\x56\x86\xa8\xbc\xfa\x5d\xd2\xef\xc2\xd0\x26\x43\x39\xa2\x93\xe9\x6a\x74\x1a\x5b\x17\x5b\x0b\x3d\x96\x63\x21\x35\x6b\x12\xa8\xd7\x27\xe7\x55\x29\x55\x12\x7d\x44\x95\xf5\xa5\x64\x6a\xf4\xc0\xdc\xba\x04\xe9\xb5\x23\x78\xe7\xad\x59\x5c\xd7\x39\x43\x83\xb6\xde\x8d\x41\x9b\x0c\xda\xa5\xc6\x4f\xd0\x75\xc2\xc2\x43\x69\xc2\x4b\x73\x2e\x65\x44\x3e\x3d\xd3\xbd\x79\xe2\xaa\xcd\x84\x8a\x1e\x95\x0f\xe4\x84\x6e\xa0\xe7\xe6\xfd\xfb\xf1\xf5\x43\xc2\x82\xd8\xbf\x5d\x3d\xf7\x14\x34\x54\x6e\x68\xd4\x60\x59\xc6\xf8\x39\x28\x9f\x82\x62\x00\xa7\x33\x50\x17\x03\x78\x1d\x85\xbf\xb0\xe0\xb9\x9d\xf3\xbe\xb3\x4c\x64\x41\x15\x69\x0a\x6a\xbb\xfe\x42\x6e\x9b\xbc\xeb\x8f\xcc\x5b\xb1\xf9\x7f\x68\xd7\xbf\x13\x5a\xf9\x1c\x88\x38\xb6\xe2\x8e\x1d\xdb\x25\x8e\x5d\xd8\x09\xbb\x27\xd3\x11\xe7\xc7\x69\x90\x4f\x49\xd8\xc2\xff\x7b\x0e\xd1\x80\x0c\x06\xa5\xd9\x9c\x00\x60\xa7\xa0\xca\x26\x62\x5b\x16\x24\xea\x68\x89\xbc\xc1\xff\xe1\x00\xc6\x3d\x95\x07\xf8\xd4\xe0\x62\xe6\xad\xfe\x3f\x19\xcf\xf3\xb8\xd4\x7c\xeb\xab\xc9\xd0\xc5\x31\x68\x8b\xf4\x23\xea\x28\xb4\x89\x63\x17\xc6\x88\x6e\x5d\xb6\xde\x5a\xda\x44\x7a\xd2\x3e\xed\xce\xfc\x49\x6d\x52\xed\x29\x35\x7e\x31\xc0\x97\xa6\x48\x13\x95\xd6\xe8\x97\x69\x6e\x88\x74\x98\x50\xbd\xd6\x2e\x49\x51\x31\xba\x01\xa3\x29\x0d\x6b\x70\xd3\x98\x1a\xbb\xdc\xd6\xa1\xec\x51\xab\x05\x4a\xee\xa9\xd4\xb9\xfb\xfc\xf6\x37\x92\x80\xda\x63\xb4\xbf\xc4\x5f\xbb\xcf\xc9\x7b\xab\xf9\xeb\x72\x17\x9a\xb1\x3e\xcd\x4f\xbb\x75\x19\x5f\x0f\x37\x23\xcf\x39\x22\x7d\xd3\x53\x25\xe2\x2f\x27\x70\x72\x55\xf0\x3d\x3e\xa6\xa5\x3a\xb8\x1b\x65\x49\x3a\x57\xc1\xf9\xd6\xfc\xfd\x50\xa5\x6f\xb2\x07\x3a\x7d\x53\x5f\x66\xb7\xbf\xe3\xad\xf7\x30\x92\x39\x9c\xfa\x7d\x99\xc3\x69\xd8\x95\x39\x9c\x1c\x77\x28\x93\x38\x0d\x7b\x18\x1e\x68\x5a\x4a\x88\xf4\x91\xa6\x79\xb2\xc9\xf7\xf4\xa3\x69\x7e\xd4\x89\xbc\x63\x78\x49\xdf\x9b\xe6\x7b\x6b\x3b\xc8\x32\xc3\x80\xcf\x34\xb5\x3e\x44\xe1\xda\x8f\x19\xbc\xa5\xa5\x4c\x89\x33\xf4\x11\xc3\xa7\x4a\xec\x46\x78\x45\x7d\x7a\x6b\x2d\xe0\x3b\xda\x68\xec\x59\x19\x49\xd2\xf4\xb3\x15\xb1\x38\x5c\x6d\x19\x12\x41\xdb\x51\x52\x11\x6d\x3e\xed\xf0\xe4\x20\x6f\xf7\xb4\xc2\x52\x31\xf4\x09\x3e\x71\x1e\x57\x6a\x62\xde\x66\x59\x8d\x91\xbf\x1a\xef\x77\x8c\x9f\x4e\x3f\x0c\x44\x32\x43\x6c\x9a\x89\x95\x2c\x59\x80\x3e\x95\x9d\x0c\x02\x61\x03\x42\x5f\xe6\x4e\x67\x46\xcf\xea\x19\xd8\x34\x5b\x0e\xa5\xf4\xbe\x28\x7e\xb5\x8c\xc2\x35\xbb\xe8\xf5\x0c\xac\xcc\xa2\x22\xfc\xb4\xdb\x21\x0c\x1f\x0e\x25\xe9\xda\x24\x0c\x35\x96\x22\x44\xc2\xa1\x91\x1a\x4a\x28\x13\xc3\xc1\x7c\x60\x3b\x78\x57\x13\x5e\x81\x59\x37\x9c\x3e\xb1\x6e\x02\xda\x90\xee\x2f\x01\x65\xd6\xcd\xec\xec\x0e\xd5\x48\x2a\x44\x40\xe9\x2d\xf8\xd4\xa1\xfc\x29\x56\xba\xf7\x32\x64\x93\xba\x17\x79\x2e\xfd\x71\x62\x85\x9f\x49\x62\x2d\x3c\x7f\x25\x14\x14\x6a\x6b\x60\x25\x9e\xf9\xda\xc1\x8c\x26\xd6\x3c\x5c\x7b\x7e\x70\xc6\x37\x31\x1e\x23\x3f\xcb\x90\x2b\x3a\x58\x9a\xe6\xd7\x9c\xe4\xe2\x8f\xd4\xc1\xd0\xe0\x7c\x43\x3c\x0e\x68\x44\xd0\xcc\x34\x67\x16\x0b\x12\x16\x21\xbe\xcf\x31\x8a\x30\xcc\x4c\x13\xcd\x2c\xf6\xe0\x27\x08\x0b\x27\x67\x91\xbf\x97\x52\x01\x6e\xf8\x7e\x8d\x57\xe8\x01\x19\x6a\xf3\x5a\xb3\xa5\xe7\x07\xe7\xb3\xc7\xd9\x8a\x19\x18\x13\x14\xd2\x0f\x42\x75\xa0\xac\x21\x03\x48\x61\x85\x49\xca\xcb\xc8\x0a\x45\x7a\x53\x16\xf8\x69\x66\x9a\x0d\x4f\x0c\x40\xf6\xb5\x42\x0b\xbc\xdb\x8d\xb4\xbc\xe5\x2a\x1c\x61\x0f\x05\x22\xa8\x3f\x3e\xe3\xeb\x49\x27\x53\x90\xab\xec\x40\x62\x9a\x0d\x39\xb9\x9f\x75\x3c\x87\x9f\xab\xfb\x2b\xfb\x4f\xf7\xed\x34\x55\x58\x37\xb9\x09\x21\x7d\xa3\x53\x12\x9b\x26\x4a\xe8\x4d\x79\xc3\xde\x8e\x3f\x5a\x6c\xed\x27\xc8\x48\x83\xa5\x17\xcc\x57\x6c\x9e\x1f\x55\x03\x7c\x60\x98\xa0\x80\xa6\x56\x18\xe4\xef\x23\xfd\x1e\x8f\x03\xf4\xa4\xd6\x8b\x30\x88\x98\x17\x87\x01\x87\x53\x04\x45\x34\x15\xb7\x29\x5c\x31\x6c\x9a\x91\xc5\xf8\x4d\xcf\x1f\x90\xf1\xbd\x6e\xec\x5c\x7d\x7f\x1e\x95\x7a\x15\x2e\xf9\x7c\x27\xdf\x66\x19\x1f\xfb\xd8\x25\x8e\x28\xf1\xb4\xfb\x5e\xc8\x2f\x10\x53\x32\x95\xc4\xda\x72\xd8\xf8\xa6\x2e\x74\x84\xd3\xd0\xe7\x83\x9f\x08\xc4\xdb\x10\x41\x42\x66\x3a\xfb\xc6\x0e\xbe\x7e\xde\x92\x9e\x15\x4b\x95\x8f\xf5\xcf\x72\x12\x86\x58\xa6\x44\x2c\x53\xfe\x4e\x4d\x90\xdf\xa8\x9a\x55\xe2\x3b\xb3\x13\xc4\xd6\xb7\x35\xba\x2f\xa1\xe2\x4a\xac\x9b\x79\x96\x21\xfe\x87\x36\x6c\x40\x09\x4d\xac\x9b\xfb\x2c\x4b\xfe\x5f\xe6\xde\x7d\xbb\x6d\x23\xe9\x17\xfd\x5f\x4f\x21\x62\xbc\x91\x6e\xb3\x44\x11\x92\xaf\x90\x5a\xdc\x8e\x2f\x89\x67\xec\x38\x63\x39\xc9\xcc\x40\xb0\x36\x44\x36\x45\xc4\x20\xc0\x00\xa0\x2e\x11\x30\x6f\x76\xd6\x79\xa4\xf3\x0a\x67\x75\xf5\x05\x0d\x10\xf4\xe5\xfb\xe6\xac\xef\xac\x95\x58\x44\xa3\xd1\xf7\xae\xaa\xae\xae\xfa\x15\x1d\x9d\x5f\x31\x0e\xe5\xe8\xbc\x60\x07\xe2\x4f\x24\xb3\x45\x22\xc3\x54\x03\xf4\x52\xf8\x49\xc5\x39\xa8\xe1\x55\x5f\x2c\x2a\xa6\x03\xef\x0e\xd2\xd1\xf9\x8c\xde\xa5\xaa\xa2\x94\xa5\x58\x8f\xdc\x66\xa8\x4b\x62\x8c\x37\xc8\x66\x6a\x53\x34\xc1\xab\xd5\x5e\x9d\xed\xc6\x65\xc1\x93\xb9\x43\x8f\x48\xc9\x7e\x16\x42\xdd\xe4\xb2\x1b\x07\x3d\x67\x77\xe7\xd7\x7e\x0a\xe7\x33\x7f\xe0\xd5\x58\x43\xa9\xdc\xad\x20\x21\xaf\xa4\xa2\x27\x21\x6f\xf0\x87\xde\x47\x31\xbd\x7b\x23\x33\xe5\x62\x71\x88\x05\x96\xca\x31\x48\xc5\x18\x78\xf0\x13\x49\x31\x16\x6c\x43\x0c\x55\x7e\xbb\x32\xbc\x98\xac\x77\xde\x57\x15\xf9\xd4\x8e\xbf\x2b\x75\x14\x9f\x40\x77\xcd\x01\xe7\x7c\xe1\x50\x58\x09\x92\x92\xdb\x16\xcf\xa2\xbd\x9c\x88\x86\x4a\x64\x2c\xd9\x56\xf5\x5b\x57\x5f\x9a\xea\x55\xa4\xaa\xba\x86\x4e\xc0\x5b\xe9\x8d\x8a\x9b\x5d\xfe\x34\x2b\x5b\x3e\x16\xc6\x05\x76\x86\x84\x00\x7f\x5e\xb5\xf3\x2c\x4c\x9e\x14\x21\x09\xac\x7b\x3a\x04\xd7\x25\x9f\x2c\xd9\xe9\x4e\x90\xf7\x5e\x7b\x9f\xe7\x44\x39\x38\x7e\xa2\x96\x8f\x59\xf6\x89\xf5\x18\x33\x8b\x83\x16\xa4\x48\xa5\x7b\x5d\xe0\x5d\xb7\x84\x54\x11\x69\x26\xf6\x8b\xfc\xe9\xb7\xda\x3d\x95\xf1\xc6\x52\xed\xee\x1b\xb9\xae\xfa\xd1\x79\x51\xb8\xee\x4f\xb2\x69\x03\xc1\xa1\x35\x69\xae\x01\x87\xb9\x37\xca\x91\xf8\x0e\xf9\xaa\xaa\x11\xb5\x44\x90\x6d\x46\x9d\x4e\xf9\xf5\x6e\xbe\xa3\x0d\xa9\x45\xb1\x0a\x99\x4f\x73\x1e\x26\x26\x19\xa3\xf6\xaa\x54\xb1\xad\x99\x98\x6d\x91\x58\xc3\xc5\x68\xce\x9e\xf7\xc6\x54\x65\x8c\x7d\x92\x58\xb9\x11\xc2\x92\x67\x84\x53\x3f\x96\x30\x03\x73\x32\x1f\xfd\x30\x9c\x8f\x7e\x1b\xce\x47\xaf\xee\x0f\xde\xc3\x9d\x5a\x72\xfe\x27\x09\xf9\x30\x7e\x48\x89\xb5\x10\x65\xda\x03\x4a\xac\x94\x48\x01\xcf\x68\x49\x48\x94\x79\xaa\xcb\x6b\x96\xf0\x9d\x6c\x72\x8f\x4e\xee\x79\xcb\x7c\x9f\x8c\x41\xb3\x58\x8a\x5a\x0b\x33\xce\xaa\xbd\xb2\x6c\x52\x54\xd5\xe0\x3d\x6d\x57\x80\x23\xd5\x37\x11\x2f\x49\x21\x67\x15\x47\xe1\x93\x2f\x5d\x9e\x68\xbb\xc8\x01\x79\x2f\x64\xfd\x2e\x34\xc3\xa7\x91\xf4\xbe\x1c\xc9\xdd\xf4\x41\xea\x1b\x9b\x6a\xa3\x4e\xc4\xb2\x86\x64\x82\x58\xcd\xa5\x8c\x2f\xa4\x05\x88\x18\x7f\xa3\x00\x91\xb5\x59\x9f\x5c\xfe\x41\xa8\x64\x13\x6f\x67\x89\x86\x23\xd0\x2d\xbb\x60\xd9\x70\x08\x6b\x36\xf0\x76\x52\xb9\x42\x95\x8e\x14\xa2\xe1\x10\x8c\xa8\x22\x5a\x8c\x4b\xcf\xfe\x7e\x5d\x55\x64\x8d\x44\x35\x28\x42\xc6\x61\x6f\x2f\xaa\xaa\x1c\x61\xf9\x25\x9b\x33\x09\xb5\xd9\x7c\xd9\x08\xaf\x89\xb3\xd1\x55\x6b\xd1\xe7\x51\xc7\x4f\x71\x5b\xbf\xb1\xaf\x71\xbb\xaf\x3d\x5d\xdb\x6c\x78\x33\x68\xb9\xe0\x4c\xa6\x41\xf1\x08\x8f\x9f\x71\xbb\x41\x35\x6d\xc1\xa3\x2b\xf8\x39\x03\x93\xfe\xd8\xf7\xbc\xc7\x88\x11\xe6\x1d\x3c\x6d\xe0\xce\xd1\x6b\x4b\x81\xd0\x59\xf0\x46\x36\xb2\xc3\x83\xa7\xfe\x83\xa7\xca\x3e\xc0\x86\x2e\x57\xa0\xe5\x8f\xfc\xc7\x8f\xe0\xf1\x63\xff\xf1\x63\x78\xfa\xd0\x7f\xfa\x10\x9e\x3e\xf2\x9f\x3e\x32\x10\x75\x07\xde\x57\x5c\xe8\x1b\xff\x38\x34\x6c\x22\xf2\x86\xff\x3d\x9f\x27\xe8\x29\x7f\x57\x53\xe9\xf8\x0d\x45\xe3\xff\x80\x09\x6d\x4d\x69\xe7\x0e\xa9\xe5\x20\x27\xdd\x96\x54\x91\x62\xd1\x8a\xcf\xfd\xfe\x76\xc5\x32\x12\x64\x46\x52\x33\xe4\xd1\x24\x22\x39\x94\xb0\x36\x2e\x71\xf2\x49\x8d\xba\x1c\xc5\xa7\xbe\xd7\x03\x00\x8f\x63\xf0\x35\x46\xfc\x0a\x9f\x5d\x8c\x45\xa4\xc6\xa2\x50\x27\x3f\xdb\xb6\xeb\xe0\xb1\x38\x21\xf6\x8d\x91\x39\x2e\xc1\x9c\xad\xbf\xec\x5d\x3d\x6d\x8d\x0f\x08\x39\x77\xc3\xc3\x7a\xc1\x06\xad\x92\xa6\xdd\x31\xb5\x2f\xa2\xe7\x55\xb5\x68\x0d\xb2\x69\x50\x87\xd1\x21\x68\x4b\x44\x54\xc0\x95\x74\xd3\xb4\xe8\x70\xc2\x7d\xdb\x13\xff\x20\x44\x79\x79\xe1\xba\x83\x39\xb5\x02\x80\x88\x81\xc4\xb8\xc9\x8c\xa5\x96\xe9\x96\xba\x1f\x92\x36\x5b\x63\xdf\x02\x26\xe6\xd2\x50\xcb\x6b\xa5\x11\x44\x39\x95\x6f\x0e\x36\xdf\x40\x89\x30\xa6\xf8\xfa\x70\xcb\x6b\x28\xb1\x8d\x98\xe7\xc1\xe7\xf2\x40\x19\x1c\x86\x12\x65\x38\x67\x41\xba\x4e\x92\xb0\x09\xf3\x23\x88\x99\x82\x38\xc0\xd0\x23\x29\xbf\x26\x89\x4a\x10\x44\x40\x7e\xb7\x66\xb6\xf7\xcf\x8a\xc5\xa4\x20\x6b\x3a\x59\xfb\x5d\x05\x0d\x85\x59\x67\xbf\x68\xc9\x6e\x05\x0d\x1e\x75\x41\x66\x74\x32\xf3\x57\x9b\x4b\xd9\x72\xec\x6a\x19\x09\x29\x2d\x97\xba\x38\x39\xf0\x3e\xa3\x8b\x7c\x32\xee\x40\x06\x19\x58\x92\x16\x20\xd0\xc6\xde\x55\x6b\x68\xd4\xbe\xee\x20\xf9\x68\x4e\xee\x6a\xf0\xb4\xbb\x97\x57\xd3\xe6\xe1\xa0\xbb\xc7\x3b\x77\x25\xdd\x36\xe2\x2a\x2c\xd1\x0d\x5a\xa2\x44\xa6\x52\x9e\x34\xd3\x31\x57\x39\x61\x30\x6e\x04\xdf\xc6\x9f\x4b\x29\x48\x55\x5c\x89\x8d\xcd\xaf\xaf\x60\x0e\xbc\xaf\xb0\xcc\x91\x66\x9a\x6a\x84\xb4\x46\xd0\xee\x49\xc2\xcb\xfe\x9e\x68\xbe\x19\x13\xd9\x1f\x6a\xd4\x0b\x29\x46\x38\xb3\x9d\xbc\xa8\xeb\xca\x92\x76\x79\x50\x86\xaa\x03\x56\xc3\xf1\x42\x04\x9b\xfc\xcd\x4e\xaa\x4f\x5b\x52\x1d\x6f\x70\x64\xe2\x16\x8e\xcc\x8e\x7d\xd6\x19\x9d\x7f\x62\x41\x88\xd7\xca\x32\xfa\x1c\x55\xfc\xbc\xa4\xf5\x0e\x27\x8f\x1e\x52\x92\x35\x7a\xd1\xae\xc8\xd8\xc0\xcd\xec\xcc\xb2\x3b\xed\x85\x77\x1e\x9f\x98\xb8\xc2\x8a\x52\xa8\xe5\xa1\x24\xd0\x59\x96\x62\xa4\xaa\xfa\x7a\x11\x27\x9c\x0c\x08\xe1\xac\x0c\x0c\x5c\x0d\xe2\x84\xab\xb6\x1b\xf9\x5b\x95\xc0\xd5\xc7\x5e\xad\xf0\xc6\x5a\x73\xa4\x02\x61\xf5\x1a\x9e\xed\x6a\xb9\x73\x73\xcc\x1f\x3d\xf4\x1f\x3d\xc4\x31\xff\x8c\x9a\xf8\xc9\xc1\xc6\x36\x92\xbb\xc7\x6e\xc0\xd6\xc8\x73\xbd\x77\x62\x62\x79\x67\xad\x5b\xb1\xbe\x85\x70\xf0\x15\x16\x50\xc6\x7f\xb3\x6f\xe5\xb6\xef\xb1\xfa\x8d\xca\x32\xeb\xbe\xc1\x6e\x84\xf2\x8b\x3c\x38\xf8\x8c\x5a\xf8\x49\xc7\x89\xf4\xe1\x41\x3b\x44\xbe\xe6\x9e\xa2\x71\x32\x6e\x50\xbb\x71\x2d\x4f\x30\x5d\x70\x04\x09\x4c\xfb\xb8\x52\xe9\xdb\x3c\xc9\xf8\x96\x90\x92\x32\xc6\xa6\x93\x32\x48\x43\x9f\x44\x4c\x8c\xad\x28\x8c\x4e\x32\x12\x99\x50\x86\x93\x68\x64\xaf\x44\xbc\xe4\xbf\xe4\xe5\x04\xff\x95\x94\x79\xaa\x63\x4d\xf9\x05\x49\x18\x5e\x2d\x4c\x38\x49\x20\x05\xf3\x66\x73\x9c\xa4\xcd\xa6\xf2\x28\x95\x76\x9a\x66\xe4\xbe\xce\x11\xa8\x19\x91\x45\x54\xf4\x2f\x17\xb9\x41\xdb\x36\x87\x07\x07\x5f\xf4\x0c\xd2\x94\x41\xb1\x26\xfb\x56\x71\xb3\x72\xfb\xed\x36\xf3\x43\x18\x64\x55\xd5\xbb\x93\xb0\x41\x5f\x07\xbf\xd5\x54\x99\x5d\xa7\x7f\xe3\xb7\x85\xcf\xc9\xd3\x96\xf3\xd3\xd3\x03\xff\xa9\xdc\x00\x5f\x21\xb9\xb5\xba\xb8\x71\xc5\xb5\x59\xe9\x46\x96\xb6\xdb\x32\xe2\xed\x37\x7c\x28\x93\x16\x97\x0d\x13\x2a\x37\x99\x50\x67\x14\xbe\xe8\x30\x29\xef\x94\x76\x62\x71\x8c\xe8\x34\xae\xd8\xb6\x61\x51\xf1\x3c\x9a\x2e\xf8\xf4\x13\x3e\xd8\x6d\x8c\x31\x3a\xbe\x48\x6d\x9a\x99\x6e\x36\xb3\x7b\x75\xd5\x87\x5e\xdd\x95\x1c\x9e\x28\x9f\x07\xb1\xc1\x23\xb5\xc1\x0b\xd5\x11\x8c\x5a\xf4\x58\x8a\xc5\x62\x12\xa6\xea\x1e\xb7\x20\xc5\x46\xa7\x3a\x1b\x1d\x0a\x59\xd5\x1c\x16\xb0\xda\xdc\xea\x0f\x5a\x5b\xfd\x30\x84\x19\x8b\x47\x73\x92\x88\x53\x9d\x14\x39\x07\x33\xd4\xc3\x4f\xc9\x02\x21\x0e\x1a\x6f\x71\xb2\x10\xa5\xc3\x8a\xee\xcc\xd8\x9a\x8c\x29\x86\xd8\x20\xb3\x26\xa2\x29\xaa\xef\x3d\xc6\xd8\xcc\x0a\x4f\x3a\x98\x92\x55\xdb\x21\x7d\x8e\x35\xae\x40\xc5\x43\x9c\x0b\x2a\x51\x55\x73\x31\xd2\x55\x85\xdf\xcf\xcd\xf7\xcd\x87\x73\x49\x63\x58\x01\xb9\xfc\x1a\xe6\xca\xde\x4a\x3f\xaf\xc9\x18\x0a\xc3\xda\x06\xe3\xba\x65\xde\x33\x10\xcd\x2a\x78\xe9\xba\x04\xff\x4a\xba\xb4\x82\x82\x5a\xc0\x40\xdb\x88\x8f\x6d\x2a\xde\xc4\xac\xc2\x99\xfe\xcc\x9d\xac\xf1\x6e\x51\x24\x5c\x3a\xaa\x44\xc6\x8d\x05\xc9\xb8\x9a\xed\x07\x38\xdb\xf9\xe8\x3d\xbf\x7c\x79\xb3\x52\x38\xe4\x89\x25\x0e\x2f\xd8\x7e\xb4\x7f\x09\x2b\xf9\x67\x86\x7a\xa5\x84\x2c\xe8\x80\x31\x8c\xe5\xa8\xdc\xe0\xc9\x60\x56\x55\xdb\x10\x34\x56\xe6\xa2\x09\xdd\xdd\x1d\x1a\xb2\x81\x07\xb2\x94\x45\x55\x25\x64\x45\x19\x5b\x55\x95\xb3\x1f\xed\xc7\xce\x80\x25\x64\x01\x4e\xec\xd0\x9a\x52\x7a\x97\xb0\x3e\xe9\x4c\x48\x14\xb6\x6b\x44\x02\x39\x43\x0f\xd9\xcc\xc2\xf2\xd1\x53\x92\xba\x6e\xee\xba\xbc\x75\xfd\xc5\x58\xe2\xba\xd9\x84\xfb\x31\x99\xa1\x16\x6b\x4a\x72\xd7\x1d\x64\x13\x3e\x2a\xb2\x75\x3e\xe5\xe8\x4e\xee\x4f\x09\xc9\x59\x0b\xb0\x20\xa1\x76\x96\x5c\x14\xb2\xd6\x78\x5a\xbe\x58\xcd\x12\xf1\x6a\x0e\x89\xe5\x61\xb1\x6c\xdf\xab\x09\xda\x9f\x08\xb2\x9b\x00\xff\x22\x6c\x80\x3e\x9e\x05\x3c\xec\x38\xc6\x97\xf4\x4e\xa4\x32\x79\x59\x7e\xcb\x22\x32\xa5\x70\xc5\xc6\x47\xda\xa2\xef\xe4\xea\x88\x2e\xc9\x6d\x70\x85\xb7\x2f\xf3\xd6\x00\x24\x60\x4d\x33\x9b\x37\x8e\x0e\x72\x29\x38\xa2\xfd\x5a\x37\xa7\x92\x5a\x0a\x11\x0d\xe3\x61\xb9\x3c\x3c\x78\xec\x3f\x78\xac\x1d\x1f\xd0\xe5\xe1\xd1\xa1\xff\xe8\xb0\x8d\xb4\xaf\xef\xa6\xfb\xc0\xd5\xfb\x91\x18\xc7\x1e\xdd\x41\xfa\x44\xee\xca\x28\x17\xa3\x63\xda\x88\x1d\x10\x63\x36\xcf\xf2\x29\x9f\xf9\xf9\x80\xb1\xfd\xd1\xfe\x88\xdf\xf0\x69\x0d\x77\xe2\x8f\x9f\x2b\x5a\xe9\xf9\xde\xb8\x41\x3b\x3e\xe8\x83\x62\x57\x8b\xd9\xb9\x74\x06\xa2\x98\xcb\xd1\x3c\x89\x2e\x0b\xd7\xd5\xc0\x18\xb2\x5a\xfb\xc6\x1e\x33\x6c\x81\x7e\xc0\xdd\x65\x5b\x92\xe1\xf0\x98\x63\x4c\x1f\xe2\x7a\xff\x00\x3c\xd5\xa6\xe2\x8a\x74\x7b\x8f\xd5\xa1\x6f\x3c\xc6\x91\x79\x64\x76\x16\x78\xd0\x2e\x52\x90\x65\xb9\x80\x9a\xba\x2c\x52\xa1\x50\x88\x98\x44\x57\x4d\x55\xd8\x4e\x3f\x0d\xca\x70\xa7\x4b\xc6\x62\x0d\x81\x92\x42\x2e\x03\x70\xca\xe1\x20\x29\x0d\xca\x90\x28\xd3\x5d\x71\xa8\xde\xd0\x30\x96\xac\x40\xc4\xb7\x06\x71\x0b\x11\x55\x35\x89\x2f\x25\x8d\xdd\x91\x87\x71\x34\x2d\x4b\x4c\xac\x6c\xfd\xc9\x60\x3d\xba\x4c\xb2\x8b\x28\xd1\x5f\x45\x64\x0d\x89\xd4\x78\x4c\xd9\x7a\xb4\x4e\xe3\x69\x36\xe3\x3b\xeb\x06\x30\x91\x8d\xcd\x06\x9c\xc3\x82\x05\x21\xac\xd8\xf8\x48\xe1\xf9\x90\x39\x93\x25\xd0\x23\xd9\xc8\x99\xae\x72\x8e\xda\x8b\x45\xb0\x0a\xd9\x0c\xd0\xa0\x7c\xe6\xba\xc4\x2e\x57\x6c\xdc\xd8\x4e\xa1\x30\xa5\x14\x56\xc3\x61\x6d\x19\x90\xaf\x26\xa2\x2a\x7f\x51\x87\x6a\x05\x8e\x7d\x6f\x6c\x45\xac\x78\xec\x7b\x8f\xf5\x39\xf7\x91\xff\x00\x05\xcc\x3e\xa8\xfa\x2f\x2c\x0a\x83\x66\x74\xa0\x55\x01\x63\xe5\xc5\xf8\x58\x89\xea\xe3\xb1\x18\x50\x09\xca\x18\xdd\xc0\xd4\xe0\x33\xc2\xdc\x76\x2d\x58\xb0\xfd\xb3\x7b\x24\xb8\xe7\xfe\x9f\xef\xc2\xea\x6c\x76\x36\x9b\x54\xc7\xc1\xc7\x93\xf0\xfe\x09\x95\x1c\xa0\xf3\x96\xee\x5f\xea\xd5\x97\xf3\x55\x12\x4d\xb9\x03\x07\xdd\xf5\x37\xdb\x5c\x7f\x4d\xec\x59\xb3\x02\x23\xb5\x02\x73\xbd\x02\xf3\xbe\x15\x18\x69\x3b\xd9\x1c\x32\x88\xa9\x9f\xca\x27\x35\x6d\x19\xc5\xa8\xb6\x35\x6c\xf2\x8b\x98\xcd\xcc\xfa\x03\x15\x08\xa9\xb5\x02\x63\x6b\x05\xce\xe5\x0a\x5c\xb4\x56\xe0\x16\x48\xe4\x9d\x55\x55\x91\xb2\x89\xeb\x2e\x97\xe3\x2d\x9b\xab\xb5\x8a\xf8\xc6\xb2\x0d\x57\x6c\x6e\xd6\xe8\xdc\x5e\xa3\xc6\x73\xf1\x92\x05\xe1\x91\x5a\x8c\x17\x6c\x4d\xe6\x20\x01\x92\xe5\xd0\xb0\x0b\x2a\x3d\x1f\xe3\x39\xb9\x94\xc7\xfa\x0b\x0a\x83\x5b\x95\x8a\xeb\x54\xb5\xe3\x42\x2c\x60\xd7\x25\x76\x35\x05\x59\x40\x66\xa7\x50\xb8\xa2\xd4\xd4\x7d\x0e\xd7\xcc\x71\xe0\x25\x1b\xc3\x0d\x1b\x1f\xdd\x1c\x5f\x6a\x8f\xc9\x9b\xe1\x90\xde\x5d\xb0\xcb\xe0\x26\x34\xbb\xe9\xb4\x55\x13\xbc\x63\x09\x99\x92\x88\x5c\x48\x03\x0e\x0a\x06\x84\x19\xc6\x14\x9e\x89\x8d\xf7\x89\x79\x47\x9f\x8e\x2f\x74\xa1\x9f\x86\x43\xfa\xcc\xbe\x6b\x60\x8c\x91\x73\x76\x11\x7c\x0a\xe9\xe4\xdc\x57\xa5\x9f\x9b\x20\xbb\x17\xa3\xcb\x3c\x5b\xaf\xf0\x36\x77\x25\x47\xe8\x03\x0b\x4e\x43\x13\xdb\x17\xde\x89\xc1\x32\x2b\xe5\xad\xeb\x7e\x90\xc5\xbf\x95\x45\x3c\x37\x73\xa4\xd4\x7f\x4a\x7b\xf1\x81\x2a\x69\xee\x39\x5b\x92\x53\x58\xc0\x3b\x78\x06\x6f\xc5\x1a\x79\x77\xc2\x5e\xba\x2e\xb9\x1e\xb2\x85\xba\x71\x7e\x09\xef\xe8\xf0\x39\xbc\x64\xef\x86\xa7\xba\x83\x7a\xbf\x5f\x0f\x4d\x2e\x5a\x87\x4d\x64\xcb\x25\x6e\x83\x5c\x9a\x81\xc8\x86\xaf\x59\x3e\xd4\xb0\xbd\x90\xb0\x4c\xff\x9c\xb2\xd5\xe6\x8a\x77\x5d\x12\xb1\x98\x44\x42\x16\x5f\x50\x50\x2b\xbe\x80\x69\xb3\xca\x53\xbd\x9d\x8a\x1d\xa5\xb0\x8d\x9b\x00\x1a\x52\x67\xeb\xdc\x73\x94\x0e\xd5\xb9\xe7\xa0\x52\xd5\x71\x75\x8a\x52\xe1\x3a\xff\xc7\x24\x94\xc6\xd6\x3f\x97\x1a\x58\xe7\xbb\x8d\x77\x6b\xf5\xe6\xd8\xf1\x0b\x16\x05\xb1\x4a\xf6\x60\xcf\xa3\x61\xc7\x45\x57\x52\xe8\x61\xbc\x63\x42\x32\x6a\x25\x8e\x48\x99\x9e\x24\xb2\xf9\x0b\x36\x27\xd3\x7d\x6f\x6c\x14\xa9\x22\xef\x62\x92\xfa\x8b\x63\x96\x4c\xcc\x32\xc9\x82\xc5\x9e\x17\x4e\x4c\x1f\x3d\xea\xcb\xa4\xa1\x9d\x94\xd6\x05\xcb\x02\x8c\xc8\xd7\xb5\xb6\x2f\x26\x8e\xe3\x17\xb5\x81\xdd\xd3\x54\x79\x4b\x9c\xdb\x5e\x2a\xfd\xb5\xee\x0b\x86\x4a\x8f\x35\xeb\xb6\x58\x76\xc1\xa3\xbc\x97\x67\x47\xff\xff\xe0\xd9\xd1\xd7\xf2\xec\x42\x52\xcc\x75\x9b\x62\x26\xac\x68\xa8\xcd\x4e\x4c\x12\xc0\x50\xe4\x85\x4d\xfb\x34\xfb\xce\x48\x01\xeb\xe6\x3e\xce\xce\x04\x49\xf7\xab\x44\xa3\xc1\xb3\xe9\x64\xcf\xf3\xa7\x92\xea\x74\xb9\xac\xb2\xf0\xed\xce\xdc\xd7\x82\x67\x3d\x6a\xe9\x22\x94\x3d\x60\xa4\xb8\xaa\x85\x56\x6a\xd8\xab\x14\x54\xf1\xc8\xfc\xe0\x21\xd5\x9c\x55\x30\x59\x21\x79\x20\x31\x82\x15\x1b\x4c\xdb\x5a\x79\x9c\x0c\x0b\xcf\xc4\xb9\x15\xc7\x1e\xb3\x42\x56\x49\x5c\xf6\x30\xd5\xa9\x92\x58\xf4\x80\xcd\x98\x33\x75\x18\x73\xa2\x8b\x8b\xa9\x76\x89\xde\x27\x17\xf4\xfe\x3e\x0d\xbc\xb0\xaa\x1e\x0c\x98\x53\xf2\xa2\x6c\xde\x4d\x7c\xba\x2f\xf6\xaa\x22\x3e\x08\xa2\xe2\x44\x17\x76\x86\x08\xbf\x37\x19\x44\x19\xa3\xe6\xfd\x68\x42\xc5\xff\x56\x06\xfb\x2d\x25\xcd\x9b\x13\xaf\xaa\x1c\xf3\x6a\x34\x31\x2f\x26\x7d\x8c\xba\x2b\xf6\x35\x4e\x32\xd2\xc2\xa9\x54\x0b\x30\x08\x77\x74\x50\x24\x43\x4e\x14\x22\x6c\x1b\xa0\x15\x29\x2f\xc2\xca\xe2\x2d\xdf\x28\xbe\x4c\xb3\x9c\x3f\x8f\x0a\x3e\x71\x62\xc7\x77\x1c\x3a\x24\x7c\xb4\x5c\x27\x65\x9c\xc4\x29\x9f\x38\x4b\x93\xa8\xd8\xf5\xc4\x59\x9b\xa4\xa2\x8c\xa7\x9f\x6e\x27\xce\x2d\xa6\x60\xcc\xae\x95\x8d\x1e\xdb\x4c\xa5\x5f\x9e\x9c\x9c\x8c\xd5\x89\x59\x4d\xb4\x3e\x38\xc2\x74\xe8\x5c\x3a\xf4\x88\x64\x2c\xd1\x21\xd4\x63\x4a\x5d\x77\x40\x48\xc4\x66\x16\x93\x3e\x99\xa3\xe8\x89\xac\x4c\x13\xd9\x39\x64\x8a\xd1\x52\xc8\x2c\xe0\x6d\x95\x7a\xac\xc1\x70\x5c\x57\x5f\x7e\xad\x41\x87\x4e\xf5\xa8\x58\xbd\x59\x30\x0e\x35\xdb\x99\xb3\x08\x34\x3c\xc2\x09\x5b\x09\x71\xd8\x6a\x80\x20\xb8\xb2\x58\xd7\xb5\x92\x0d\x0c\xfd\xee\x9c\x31\x83\xbe\x33\x19\x14\x22\x97\x58\x69\xc4\x71\x68\x55\xa9\x86\x3b\x0e\xf5\xbb\x7d\xa0\xb4\xa9\x75\x35\x59\x1b\x96\xb3\xa2\xfe\xba\xf6\x9d\xb1\x5e\x30\x8a\x4f\x8f\xb7\x2c\x9a\x0d\x57\x2a\xb5\x4a\x26\x41\xa8\xc5\x43\x83\xd9\x5b\xfb\x29\x58\x14\xb5\x89\x46\xab\x69\x6a\xf6\x55\x34\x35\x6b\xac\x22\x63\x41\x55\x67\x2d\x29\x34\xa6\x18\xe7\xb6\x4f\x0a\xcd\xd9\x94\xcc\x8c\x14\x0a\xb3\x01\x63\x52\xf5\x95\xb7\x28\x6b\x6e\x51\x56\xe5\x72\xd9\x91\x45\x97\x78\x00\x91\x6b\x8a\xc2\x2d\x4b\xf4\x4a\x85\x2b\x46\x92\xde\x15\x9e\xf4\xad\xf0\x64\x73\x85\xaf\xe4\xd2\xbe\x74\x28\x5c\xe2\xca\x5d\x92\xd5\x24\xf1\x9d\x8f\x64\xe2\x3b\xc3\x44\xad\xdf\xa1\x43\x1d\xb8\xa2\x70\xf1\xb9\xa5\xaf\xd9\xfd\x45\x6b\xc7\x22\x53\x6f\xdf\x27\xed\x2a\x6a\xbe\x26\x97\xb0\xa0\x93\x60\x11\xfa\x41\x23\x6b\x9e\xb3\x31\x5c\xb3\x31\xbc\x14\xd2\xf1\xf5\xb1\xfe\xf6\x88\xde\x5d\x5a\xcb\x74\x35\xb9\xf6\xe5\x65\xd8\x0d\x9c\x62\x49\xab\xc9\xc2\xd7\x32\xd9\x35\xb5\x05\xe9\xd3\xaa\x22\x37\x6c\x4e\x0a\x62\x95\x20\xba\x3e\xf6\xaf\xa9\x25\xbc\x52\xc6\xd8\x39\xbd\x66\x11\x59\xc0\x35\xdc\x52\x13\x43\xfa\xa5\x5c\xcb\xba\xf4\x73\x10\x9f\xbd\xd4\xb0\xe5\x4d\x8f\x77\x5f\x9a\x5e\xbc\x63\xde\xd1\xbb\x63\xa6\xe5\xc6\x3d\xef\xe8\x9d\x44\x21\x51\x65\x9d\x06\xef\xc2\x6d\x65\x5c\xb3\x73\x76\xa3\x21\x47\x76\xbb\x95\x8b\xaa\x37\x78\x9f\xd4\x75\x18\x63\x95\xbe\x13\xa7\xd4\xd8\x08\xbe\x28\xb5\x34\xc8\x1d\xbf\x14\x1d\x83\x93\x83\xc3\x31\xdd\x10\x6f\x1e\x3c\x96\x4c\xf2\x10\x6f\xa3\xf7\x47\xfb\x0d\x42\x6b\xd1\xb2\x89\x96\x4a\xa6\x4d\x35\x4a\xe3\xf8\x80\x77\xc7\xf5\xce\x16\x55\xa2\xb3\x1f\xed\x5f\x38\x03\xed\xcd\x79\xa7\xf4\x70\x4e\xe4\x00\x6a\x62\x7c\xe7\xc2\xa9\x69\x4d\x27\x45\xd7\x10\x8a\xb3\xbc\x65\x15\xe6\xec\x9b\xc0\x80\x86\x2a\x3b\xfb\x8e\xd6\xe8\xc4\xe9\x2e\x9f\x70\xa9\xff\xf1\x07\x99\xeb\xb6\x74\x80\xb2\x03\x5a\xb6\xe2\xd4\x60\x5f\x52\xbf\xe9\x8a\x68\x65\x1a\x2d\xb9\xeb\x16\x3d\x3a\xd1\xc8\xb2\xba\xb4\x94\xc0\x07\x87\x63\xff\xe0\x70\xdc\xa3\x56\x33\x8a\xb3\xaf\x8e\x59\xf6\x79\xfc\xcf\x53\x5e\xfe\x7f\x86\xff\x19\xcd\x7a\xa3\x44\xb5\xc1\x3b\x45\x03\x28\x70\xd6\xc0\x77\x72\x84\xef\xdc\x8e\xdd\x79\xd0\x17\x02\xad\xb3\x3e\x3d\x4f\x74\x2e\x4a\xa7\x8b\x96\x3f\xe3\xe7\x9d\x8f\x54\x8b\x22\x47\x43\xb9\x9a\x3b\x5c\xef\xc0\xf7\x3c\x59\xf7\x97\xae\xf0\x75\xdd\x17\xf1\xe5\xb7\x0d\xac\xfc\xc2\x11\xff\xf5\x54\xfb\x25\x35\xa9\xa9\x36\x89\xd3\x4f\xdf\x5a\xb1\xfc\x66\x4b\xd5\x5f\x0c\x35\x66\xaa\xce\x92\x2f\xf8\xf6\x6d\xd6\xbc\xbd\xd6\x6f\x0d\x87\xe0\x79\x63\x8c\x71\xa4\x81\x95\x35\x25\xb9\x13\x9c\xed\xe7\x2c\x4e\xcb\x67\x9f\x0d\xdf\x60\x9a\x30\xf6\x3d\xaf\x89\x0d\x78\xf0\xd5\x61\xbc\x1a\x28\x0f\x7d\xc8\xf3\x3c\x41\x07\x1d\x67\xc4\xd3\x59\xf1\x5b\x5c\x2e\xda\x30\xe3\x0f\x28\x71\xf4\x1b\x87\x5a\x2d\xd6\x89\xdb\xfd\xcc\x39\xd8\x5f\x6e\x5a\x7a\x6d\x09\xbf\x95\xb3\xd8\x8a\xdf\x52\xb4\x82\x7b\xfb\x26\x5a\x4b\x4c\x52\x0a\xb9\x75\x90\xe3\xb6\xbd\x9e\x76\x4c\x5f\x43\x41\xfd\xd2\x38\xff\x6b\x29\x0e\x0a\xc1\x2f\xd7\x7a\x30\x3d\xdf\xf3\x3a\xf1\x58\xe0\xc1\x03\xff\x01\x7a\x75\x7d\x31\x8c\x95\x5e\x59\xf3\xf8\xe6\x4b\x6e\xa3\x1b\x4b\xab\x2c\xb7\xaf\xad\x2f\x9d\xfe\x4c\xbd\x59\x5a\x4e\xb3\xe4\xdb\x49\x88\xf8\xd0\x01\x47\x7d\xdb\x43\x46\xbe\x18\x80\xca\x6e\x42\x11\x7f\x83\xcb\x78\xbb\x05\xf2\xd3\xbe\x06\x7c\xcd\x65\xb6\x87\x51\xaf\x14\x1a\xdd\x3c\xcf\x96\xcf\x15\x4e\x1a\x44\xad\x54\xbd\xc3\x6c\xab\xc5\xc1\x20\x72\x5d\x4f\x70\x3f\xbd\xde\x9a\x05\xde\xfa\xa8\xb5\xca\x0d\x7c\x07\xa0\xc9\x72\xbe\x09\x61\x1a\xb1\xf1\x51\x7e\x12\x1d\xe1\xed\x6d\xc9\x86\x6d\x08\x53\x88\x49\x09\x9e\xe7\x3d\x10\x9b\xcf\x0a\x90\x6b\xe1\x91\x94\x43\x67\x37\x2e\x76\xd3\xac\xdc\x8d\x76\x25\x7c\xbb\x20\x11\xbb\x2b\xd1\x18\x87\x6a\xe3\xe7\xf2\xf8\xd1\xc3\x87\x87\x8f\x26\x19\x29\xa9\x9f\x91\x87\x0f\x0f\x9e\x3e\x1a\x12\x52\xee\x21\x4a\xe8\x23\x7a\x72\xe2\x8d\x29\x94\xff\xcb\x1b\x1f\x3c\x18\x3e\x7c\x74\x78\x30\xa6\x46\x0d\x98\x62\x90\x2a\x62\xad\x3d\x19\xad\xa3\x21\x2a\xdf\x1c\x32\xca\xf3\xe8\x26\xf5\x88\xd3\x69\xb2\x9e\x61\x08\xae\x66\x70\x75\x62\x0f\xb1\x1b\x0c\xfe\x6d\xc2\x72\x58\x1f\x1b\x87\xbb\x6f\x09\xdc\x68\x6d\xef\xee\xb6\xfe\x5a\x16\x19\x97\x51\x12\x4f\xbf\xe0\xac\xbc\xb1\xb2\xe3\xed\xfb\xfa\xab\xef\x12\x91\x57\xa0\x0a\xee\xd1\x23\xaa\xce\x6c\xcd\x10\xf6\xd9\xdb\x19\x52\xd8\x18\xdd\x6d\x86\x6c\x33\xb6\x73\x8d\x29\x5e\x6c\x7c\x4d\x1a\x03\xba\x49\xbf\xe9\x9c\x4f\x50\x3a\x05\xe3\x18\x12\x0f\x4d\x60\x37\xd8\xb0\x95\xa3\x2d\x76\x85\x41\xd6\xc4\x18\x7c\x31\x1e\x92\x1e\xfc\x2f\xcb\x09\xfd\x92\xd1\x22\xe7\xf3\x5e\x8a\xd2\x17\xc0\x68\x93\x37\x7a\xcd\x35\x95\xb6\xe0\x31\x2b\x37\x8f\xae\xfb\x89\x81\x38\xfe\x8e\xf2\xe8\x5a\x05\xbe\xb0\xc2\xf7\xf4\x90\x87\x20\x84\x82\x8d\x8f\xd2\x93\xe2\x88\x2a\x57\x1b\x7d\x6c\x0e\x0a\x44\x39\x86\xe2\x38\x77\xdd\xf6\xbb\x66\x95\x17\x61\xe3\x20\x14\x75\x37\xf2\x96\x00\x63\x07\x7d\xe1\x8f\xba\x16\x52\xb6\x50\x92\xf3\x15\x8f\x4a\x5f\xe2\x7c\xb5\x00\x73\x9a\x22\xbf\x96\x3b\x16\xcb\x28\xf9\x82\x87\xfd\xc6\x4c\xaa\x6f\xb6\x6c\xa4\x6f\x0f\xc4\xb3\x29\xf3\x14\x65\x94\x97\x5b\xa4\x9e\xe6\x5d\x8b\x72\x35\xc9\x9f\x95\x7c\x5a\x5f\xa7\x2c\x26\x46\x72\xf9\x4a\x31\xc8\x2c\x20\xb1\x82\x3e\x27\xe3\xe4\x90\x36\x32\x4e\x0a\xe9\x30\xd7\x5f\x32\xc6\xf2\xaf\x92\x71\xfa\x42\xf5\xf4\xcf\x62\x99\xc7\x9f\xbe\xc0\xe6\x37\xa7\x51\x7d\xb4\x6d\x1e\xbf\x74\x46\x34\x95\xaf\x2f\xbe\xb5\xe6\xf5\x76\xd9\xbd\x2f\x0e\xd0\x96\x6a\xbf\x31\xf8\x84\xfc\x62\x5b\xb5\x5f\xc3\x77\x1e\x52\x22\x61\x76\xbf\xa9\xde\x43\x53\x1b\xe2\x7d\x62\x6d\x5f\xcb\x6c\xba\x28\xc3\x87\x4f\xdb\xa6\xb4\x4f\x55\x74\xdf\xc7\x0f\xe9\xe8\x6f\x2f\xff\x89\x77\x08\x0f\x14\x5c\x81\x37\x7e\x2c\xf1\x0a\xbc\xf1\x43\x09\x58\x80\xc1\xe6\x57\x2a\xac\x8b\x84\x2c\x38\x3c\x90\x98\x05\xde\xa1\x27\x41\x0b\x1e\x1c\x48\xcc\x82\x47\x63\x8a\x70\x05\xde\x53\x09\x56\xf0\xe8\x40\x82\x15\x20\x15\xbe\xd6\x00\xc7\x2f\x95\xb5\xdf\x8d\x72\x96\x39\x65\x88\xb7\x03\xef\x94\x95\xe0\x33\x65\x35\xf8\x49\x42\x9f\xc0\x5b\xf6\x6e\x34\x87\x0f\xec\xd9\x68\x0e\xcf\xd9\x29\x42\x0f\xe8\xf0\xfd\xf0\x33\xcb\x47\x7f\x3d\x7d\xf7\x13\xfc\xc4\x7e\x76\xdd\x9f\x47\x12\x98\x38\x9e\xdf\xc2\xef\x6c\x45\x9c\xf3\x45\x3c\x9b\xf1\xd4\xa1\xf0\x5a\x3c\xb6\xc3\x07\xbd\x60\x77\xf5\x68\xa5\xec\xac\x5f\x17\x2f\xa5\xe1\xf7\x45\xc2\xe1\x0d\x9b\x12\xa7\xc0\x1a\xf6\x72\x7e\x19\x17\x65\x7e\xeb\x50\x78\xd5\x24\x0b\x11\xe8\x4f\xf1\x98\xad\xf6\x9a\x94\x1f\xd9\x06\xb8\xc6\xf7\x7d\x17\xf8\xef\xe1\x17\x96\x8f\xfe\x2e\x33\xc3\x1f\x6c\xf0\x4b\x55\x0d\x7e\x69\xbe\x6a\x3f\x61\xa8\xec\xe7\x8b\x38\x99\xc1\x6f\x2c\x73\xdd\xa4\x47\xaf\xf3\x78\xc0\x6e\xc8\x07\x72\x57\x23\xd3\xbc\xeb\xb7\xe5\xfa\xd0\xb0\x55\xc5\xde\x1f\xd7\x74\x14\xd5\x35\x15\xff\xd2\x49\x3f\x43\x79\x4b\x7e\x44\x77\x04\xe3\x74\xf0\x63\x50\x86\xf0\x41\x3b\x55\xe4\xae\xcb\x07\x8c\xfd\xe8\xba\x1f\x44\x46\xc8\x69\xed\x7f\x80\x5f\x7b\xbc\xaf\x5f\x05\x3c\x64\x37\xe4\xbd\xe5\xd9\x62\x20\xf0\x46\xe7\x9f\x18\x87\xb2\x86\x7f\xb2\xef\x5d\x57\x0d\xb2\x35\x60\x23\x1d\xd3\x7f\xb2\xb9\x8d\x36\x72\xf3\xba\x17\x6c\xb5\xa5\x4a\xab\xe1\x87\x6d\x28\x8c\x9c\x61\x77\x7e\x20\x7f\xca\x1e\x4a\x29\x8c\x5d\x2b\x07\x93\x4b\x71\x5c\x8d\xc9\x2b\x28\xe9\x84\xa4\x23\x6e\x96\x0d\x02\xad\xc3\xef\xd4\x75\x79\xf0\x7b\x18\x94\xa1\xeb\x12\xf5\x8b\xa1\xa7\x2d\xbb\x21\xa9\x71\x30\xb8\x48\xb8\xff\x92\x8c\x31\xd0\x21\xa5\xbe\xfa\xb6\xaa\xc4\xc0\xfe\x0e\x2f\x89\x07\x77\x35\xa5\x60\x0a\x18\x53\xf8\x4d\x35\x94\xfa\x7a\xf4\x6b\xf8\x5b\xc7\x4e\x11\x39\x8b\x15\x9d\x81\xdd\x22\x34\x41\x49\x05\x51\x18\x63\xe4\x2a\xa5\xc9\xce\x4e\xe2\x23\xfa\x03\xe1\x90\xb2\x3c\x88\xc5\x59\xa6\x0c\xd2\x26\x1e\x26\xaf\xe1\x5e\xcf\x24\xbe\xb0\x6f\x37\xd8\x35\xc1\xe8\x7c\x8d\xb3\x8a\xf2\x4d\xfd\xd1\x75\xc5\x08\x71\x09\x7f\xfc\x27\x70\x8a\xc6\x9a\xa4\x44\xf4\x3b\xa5\x00\xc1\xdf\xaf\xf0\x87\x4a\x13\x63\x87\x11\x08\x7f\x0f\x03\x1e\xd2\xaa\x2a\x69\x0d\x7f\xdf\x44\xcd\xe0\xec\xbc\x3d\x27\xb8\x02\x55\x79\x25\x96\xf7\x27\x94\x54\x5b\x6d\xbe\x95\x86\xce\xda\x2c\xb3\x95\xaf\x35\x61\x55\xd5\x9a\x50\x1c\xf4\xb4\xae\xe1\x1f\xfd\x90\x8f\xe8\x1f\x2a\x5a\x22\xf8\xba\x74\x78\x6d\x21\x50\x60\x2d\x4c\xa1\x50\x54\x55\xc9\xd8\xef\xf8\xef\xba\xaa\x72\xed\x21\x63\xbc\xc6\x6a\xf8\xd7\xd6\x5a\x70\x45\x42\xce\x9e\x93\x74\xf2\xa7\x2f\x6b\xcc\x44\x8d\x78\x38\xd5\x35\x46\x47\x54\x76\x8c\xe5\x32\xbc\x46\x55\xa5\x38\xfe\x3f\x62\x5f\x33\x59\xe5\xab\xa0\x6c\x26\x39\xab\x77\xbe\xaf\x2a\x52\x10\xf2\xde\xf6\xe5\x56\x5e\x38\xad\x0d\xa3\x0e\xb6\x06\x5f\x86\x38\x92\x04\x37\x67\x5b\xcb\xcc\x73\xe0\x48\x6d\x3d\x67\x8b\x4d\x21\xa9\x5f\x81\x0b\x16\xae\x66\x2a\xcf\x41\x72\x21\x29\xdb\xe5\x3f\x01\xb7\x9d\x59\x27\xf2\x67\xf0\x7b\x88\xab\x8c\x34\xcb\x06\xf7\xda\x6f\x5a\x7a\x13\x1b\x29\xa5\x06\x4d\x66\x37\x73\xdd\x3f\x5c\xf7\x37\xf2\x63\x9f\x09\x6c\xc1\x4b\xbf\xac\x29\xfc\x8a\x5e\xe5\x5f\x09\x91\xa4\xdc\x8c\x3e\xd5\x14\xde\x8d\xe6\xec\xef\xf0\x6c\x34\x67\x3f\x80\x32\x7b\x16\x0c\x8b\xfd\x43\x3c\x3d\x15\x4f\xf7\xc4\xaf\x87\xe2\xd7\xbf\x20\x73\xdd\x01\x22\x07\xb9\x6e\x41\x7e\x04\xa7\x8f\x15\x39\x70\x0f\x17\xf8\x6c\x34\xef\x73\x8a\xff\x95\xac\xd0\xe9\x86\x42\x44\xa2\xd1\x0f\xc3\x68\xf4\xdb\x30\x1a\xbd\xba\x3f\xf8\x1e\xee\xe4\xf4\xf8\xef\xeb\x86\x1e\xfc\x95\xd9\x71\xd9\x20\x2e\x9e\xe3\x55\xc4\xe9\x2a\xe7\xd1\x0c\x39\x9f\x26\xb3\x80\x86\x9d\xa0\x0c\xec\x40\xda\x8c\x80\x02\xec\x01\xbc\x23\x05\x8b\x9b\x82\x85\x40\x05\xeb\xb4\x98\x66\x2b\x51\x5c\xd1\x02\x4a\xe7\x9c\x8d\x8f\xfe\xaa\x57\x01\xe7\x47\x74\x45\xfe\x1a\x70\x19\x85\xd7\x2c\x77\xce\x3e\x91\xd5\xa8\x28\xb3\x9c\x53\x48\xc5\x27\xa5\x3e\x94\x9e\xa4\xfc\x88\x2e\x49\xc9\x83\x54\x7e\x84\x9e\x40\xba\xc3\x6a\x3d\x3a\x20\xb6\x4e\xbf\xe6\xf5\x0d\xf0\x21\x73\x1c\x3a\x79\x13\xf0\xd0\x17\xff\xb0\xf7\x62\xaa\xe1\x13\xbf\x7d\xd5\xf9\x28\x9e\x93\xc1\x3f\xc5\xe0\x76\xd7\x3d\xb7\xf5\x39\x92\xf5\x88\xe5\x6e\x3a\xb0\x1b\xa7\xbb\x6f\x68\x3c\x27\x6f\x04\xdd\xb6\x02\x4a\x97\x35\xac\x0b\x7e\xca\xcb\xd2\x86\xe5\xa6\x77\x7f\xb0\xc1\x58\xbe\x8a\x97\x2b\xdb\x65\x06\x5f\xa1\x97\x5a\xbb\xa3\x5d\x2c\xcc\xcf\xdf\x4d\x97\x93\x1b\xc2\xa9\xff\x37\x72\xa3\xdc\xc4\xa0\xe3\x50\xf9\x03\x6c\x00\x5f\xfe\x0d\xb6\x7a\xa1\xfd\x1d\x7a\x50\x14\xfd\x7f\x74\x52\xe5\x5c\x14\xfe\xbf\x6a\x0a\x3f\xbb\x6e\xd3\x7e\x32\xf8\xbe\xaa\x92\xcd\x6b\xb2\xf7\xc4\x5c\x91\x49\x77\x5a\x67\xc0\x7e\x22\x92\x0b\x38\x77\x35\x3e\xdd\x45\x3e\xaf\xad\x67\x39\x0e\x72\x03\x50\x70\x84\x1c\x88\xa7\x3a\x25\x02\x6e\x53\xf4\x09\x62\xcd\x43\x88\x99\x77\xb4\x41\x9b\xe2\x23\xaa\x48\x73\x43\xa3\xd0\x9d\x10\x2f\x72\x99\x20\xad\x5e\x08\xe4\x02\xa1\x02\xcd\xdd\x3c\xf2\xb9\x7f\x5a\x36\x21\x57\xf8\xbe\x05\x15\xac\x58\x57\x8f\x34\x98\x22\x7c\x50\xd7\x6c\x80\xc2\xe0\x9f\x82\x6d\x9b\xc5\x43\x41\xd4\xcd\x4a\xf8\x49\x99\x57\xfc\x8c\xc8\x2b\x14\x2c\x81\x2a\x78\x1d\xea\xe8\x97\x56\x2a\xbc\xb6\xf3\xe8\xd0\x0d\x14\xe6\xe4\xbd\xd9\x35\xe2\x49\x9c\x6b\x75\x64\x14\x41\x74\xe6\x44\x09\xd7\x6a\x68\x15\xe8\x9b\xc1\x24\x78\xec\x7b\xe3\xc7\x56\x10\x74\xe5\x42\x7b\xf0\xc4\xf7\x0e\x9e\x80\x77\xe8\xf9\xde\xa1\x07\xde\xe1\x81\xef\x1d\x1e\x34\x58\x05\x78\xe3\xa8\x6e\x1a\x0f\xfc\x07\x07\x3d\xae\xc9\x2a\x7e\xc1\xa1\xff\xf0\x10\x1e\x8d\xfd\x47\x63\xed\xac\x2c\xb1\x0a\x10\x98\xaf\x27\xae\x01\x62\x75\x4a\x83\xff\x27\x0f\xfd\x27\x0f\x15\xde\xe1\x93\xa7\xfe\x93\xa7\xd2\x89\xa5\xb9\xcf\xec\x8b\xfc\xf9\x05\x9d\xc3\x63\xad\x4b\x7a\xd4\x76\xed\x47\xbd\xf5\x5a\xab\x25\x12\x75\xf2\x99\xaa\x08\x07\x18\x20\xf7\xfb\xf5\x7c\xce\x73\x75\xb4\x7a\x22\x8e\x56\x59\xeb\xc5\x8a\x65\xa3\x17\x51\x19\xfd\x1a\xf3\x6b\x74\x52\x7a\xf6\xfd\xaf\xae\x3b\x1d\xc5\x05\xa6\x2c\xd9\xc2\x9a\x40\xd4\x0f\xc0\x2d\x8b\x47\xbf\xbe\x7e\xf9\x9b\xc1\xb8\xfb\x4d\x2a\xc2\xa7\x03\xc6\x16\x14\xee\xac\xe2\xfd\x85\xf6\x74\x95\x18\x0b\xf1\xe8\xf9\xbb\x9f\x4e\x3f\xbc\x57\x31\x85\x65\x26\xf4\xdc\x13\xb5\xf5\xd1\xce\x99\xeb\xce\x10\xe5\x2c\xc1\xd8\x01\xb7\xda\x8d\x10\xb4\xae\xe5\x97\xcf\xc5\x33\x1a\xa4\xfc\x7a\x77\x41\x0e\xa8\xb1\xd7\x54\x4c\x7f\x74\x71\x5b\xf2\x37\x26\x86\x56\xbb\x35\x7d\x51\xb5\x8d\x69\xd6\x80\xb1\xa5\xeb\x36\x44\x4e\xef\x93\xa5\xdc\x46\x91\xb2\x59\xb1\x85\x61\xa6\x12\xad\x4a\xa5\xfb\x0e\x4a\x16\xac\x20\x9d\x70\xdc\x29\x9a\xe6\xf0\x6b\x22\xa5\x21\x58\x50\x4a\xd6\x24\xde\xcb\xa9\x98\x64\xd1\xa5\x95\xaa\x65\xaa\x9e\x32\x71\x42\x1e\x1f\xe5\xc7\xf1\x11\x9d\x8e\x0a\x5e\xfe\x12\xa7\xe5\x13\x32\x1b\x0e\x21\x19\x5d\xea\xc7\x7c\x38\xa4\x96\x04\x56\x37\x60\x34\x76\xff\xdb\x30\x20\x1a\xfe\xa3\x1d\x85\xdb\x3b\x78\xe4\x7b\x07\x8f\xc0\x3b\x78\xec\x7b\x07\x8f\xb7\x41\x57\xc8\xcd\x83\x8b\xfe\x2b\x82\x23\x35\x4b\x69\x20\x17\xbd\x58\x8b\x70\xa7\x57\xa7\x2f\x37\x80\x59\xad\x4a\x4f\xd9\x6e\x88\x51\x2a\xf6\x45\x91\x15\x05\x3c\xa4\xc4\x41\x78\xc7\xc3\x03\x07\x1e\x7c\x5e\x2d\x8c\x96\x4d\x1d\x05\x89\x4c\xd4\x4a\xd2\x87\xbe\x77\x80\x4a\x92\xbe\xd0\xab\xad\xea\x1e\x3d\x70\xe0\xc9\x7f\xae\xba\x1e\xbd\xa5\xae\xee\x75\x5a\x7a\x8f\xda\x46\x94\xff\xcd\xca\xfa\x83\x70\xeb\xca\xfe\xc3\x03\xd9\xa3\xc9\xb3\x2a\x7b\xd2\x36\x1f\xfe\x6f\xd6\xd5\xa3\xbe\xd3\x75\x89\x1d\xf3\x1f\x1e\xc6\x1e\xad\x9d\x5d\xdb\x7f\x78\x1c\x7b\xb4\x76\x76\x6d\xff\xd1\x81\xec\x0b\x82\xf9\x9f\xab\x4c\xb3\x7f\xab\xbe\xaf\xb2\x99\xd0\xa1\x7e\x64\xc8\xb3\x43\x4a\xc6\x92\x7b\x3e\x55\xdc\xf3\xf1\x43\xa5\x8f\x7c\xa2\xa0\x53\x3d\xe3\x01\x2c\xf9\xe5\xe1\x58\xa9\x22\xc5\x8f\x15\x1b\xc4\xa3\x67\x53\x71\xe8\xf8\x87\x94\xff\x5c\xd7\x69\x3d\x63\xa0\x64\x98\xb1\x42\x50\xdc\xdf\x78\xf4\x09\x96\x7d\x7e\xeb\xd2\x80\x71\x8e\x07\x0d\xb8\xea\x3b\x5c\xfd\x07\x4c\x92\x2e\xd9\x46\x50\x62\x74\x36\xe6\x54\xeb\x53\x66\xcd\x4d\xc0\x40\xb2\x9e\x5b\xcd\x6f\x1c\xd1\x78\x8c\x35\x8c\x21\xf0\xd1\xd1\x73\x62\x30\x2e\x42\x03\x24\xb0\x3d\x6c\x71\x82\x96\x4f\x1b\xc5\x81\x0a\x59\x7c\xc1\x36\xcc\xb3\x74\x1e\xb8\x82\x4b\x48\x60\x30\x16\xb3\xbe\xb3\x70\xdd\x95\xeb\x92\x35\x21\x39\x43\x46\xf6\xbc\x39\xea\x93\xab\x56\x43\xad\x18\x72\x14\x8a\xd1\x4f\x2f\x5f\xbe\x60\x83\x31\x64\x24\x70\xa4\xfa\xd0\x01\x71\x06\x75\xc0\xb9\xe4\x68\x30\xc0\x4b\x27\xec\xf1\x02\xb8\xb0\x4a\x4a\x59\x19\xf0\x70\x27\x22\x25\x70\xb0\x16\x6b\xac\x46\xb3\x14\xe2\xf7\x52\x08\xcb\xea\xfa\x74\x2e\x64\x6f\xf9\x4b\x22\xd2\x49\x6d\x44\xa6\xee\x48\xe7\x01\x0f\xf1\x73\x7d\xe2\x10\x8d\x60\x8c\x4b\x17\xda\xac\x6e\x1b\x76\xab\x4d\x10\x23\x76\x97\x6d\x25\x76\x70\xe8\x1f\x1c\xc2\xa1\xe7\x1f\x7a\xd2\x56\xac\x8d\xab\x23\x85\xd4\x27\xfe\x63\x0b\x19\xb9\x2f\xa2\x6b\xbf\x11\x9d\x67\x19\xd1\x59\x73\xf3\x3f\x6e\x3e\xa7\x1b\x21\x16\x11\x7a\x92\x43\x0e\x03\xaf\x1b\xfb\xba\x19\x13\xec\xf5\x37\x87\xdd\x78\xa2\x25\xed\x43\xed\x5c\xa8\xe0\x02\x3c\x15\x21\xf1\xe0\x91\xb9\xe3\x44\xa1\x49\x9c\xfa\x93\xa8\x7c\x1b\xad\xfa\x63\xca\xa8\xeb\x3c\x0b\x2d\x49\x81\x06\x99\x1b\x36\x48\xd9\x9a\xe4\x30\xa6\x10\x93\x14\x72\xc8\xa1\x84\x31\x78\x60\xd9\x28\x04\x5e\x88\xfa\x40\x14\xd8\x1e\x51\xe2\xa8\x2a\xa5\xac\xd6\xf5\xe0\x91\x08\x4c\x8f\x7c\xef\x11\x1c\x3c\xf2\x0f\x1e\x69\xb9\xec\x89\xff\x00\x01\xd5\xfa\x22\xd4\x7e\x76\x54\x0e\x0e\xa4\x11\x41\xa7\xdf\x9f\xb1\xbf\x30\xc6\x66\xdf\x60\x67\xa1\xfb\xd6\x98\x6b\x88\xce\xc9\x6e\x1c\xf8\xf6\x1d\xf4\x17\x02\xcd\x4a\x0c\x6e\xaf\x69\xb3\x0d\x8e\xce\xd3\x32\x8f\xb7\xb5\xb9\x1d\xc9\xed\xa9\xe7\x3f\x45\xf4\xb5\x2f\xc4\x9a\x95\xf5\xe9\x7b\xe1\x03\x4f\xae\x9c\x27\x6a\xe1\x1c\x3e\xd8\x6c\xc4\x36\x1d\x47\xf1\x19\xcd\x41\x26\x5d\x8e\xa2\xd1\x1c\x03\x13\xe5\x82\x57\xdd\xd5\x30\x67\xe3\xa3\x44\x8f\xed\xfc\x88\x9a\x43\x0a\x91\xcb\xaa\x64\x49\x30\x47\x63\x00\xd7\x2d\xc8\x54\x22\x9e\xa9\x0e\x4f\xdb\x77\xfd\x87\x0f\xfc\xc3\x07\x36\x80\x4f\x83\x62\xf2\x85\x00\xb9\xcd\x88\x7b\x9b\x9d\xc5\x53\xff\x37\x0e\xf8\xb7\xc2\x47\x1d\x2a\xa7\xe0\x87\x9e\xf6\x14\x7f\xa2\xee\x1c\x1f\x35\xd6\x44\x2d\x30\xcd\x79\x9c\x46\x49\x72\xdb\x73\xff\x2e\x0f\x6b\x10\x6b\x3c\xce\xaa\xca\xf4\x4f\xb1\x57\x7b\xf4\x28\x7c\xc7\x56\xc8\x4a\xe8\xc5\x89\xad\x53\x36\x7b\xbf\x04\x4e\x68\x17\x56\xb2\x01\x79\xaa\x69\xed\x73\xf8\xb6\x6f\xa5\x96\x50\x7e\x6a\x7c\xfc\xe4\xa9\x4d\x42\x31\x5a\x61\x09\x25\xb4\x22\x8e\xf0\xd7\x5e\xea\x36\x76\x59\xc6\xef\x5a\x1a\xbd\xff\x2a\x21\xdd\xcf\xf6\xbd\xf1\xd9\xe8\x6c\x36\x24\xf8\x2f\x9d\x90\xdd\xb7\xd9\x45\x9c\xf0\xb3\xfd\xb3\xeb\x21\x9d\xec\x9e\x46\xf3\x28\x8f\xcf\xf6\xf7\xa5\x9f\x4c\x66\x5b\x77\x45\x96\x4d\xc4\x2a\x9a\xbd\x4c\x7b\xf9\xc0\x37\xd2\x12\xbc\xd8\x52\x97\xd8\x87\xbe\xe7\x1d\x1a\xd0\x4a\x43\x40\xfa\x62\x0a\xff\x8f\xf7\xfe\xb4\x8c\xb6\x45\xc8\xff\xc6\xfe\x8f\xbf\xd8\xff\x2f\xc9\xcf\xb6\x01\xc1\x1b\x3e\xff\x46\xd6\x2f\xc6\x1f\xf0\x5b\xec\x93\xd3\x31\x28\xf8\x62\xd8\x62\xbb\xf6\xf7\xf1\xe5\xe2\x1b\xab\x3f\x30\xd5\xbf\x4c\x67\x1b\x95\xf7\x1f\xd4\x0f\x3d\x4a\x9c\xa8\xb8\x4d\xa7\xaf\xd5\x45\x84\xfc\x50\xaa\x12\xf1\xc3\x1e\xae\x69\xa1\xe3\x13\xef\xc1\x43\x13\x35\x05\x97\xca\x53\x1d\x64\xd9\x93\xa4\xe8\xa1\x82\xa0\x79\xf4\x54\xb9\x4f\x0a\xa2\x35\x65\x09\x71\x62\x53\x25\xcc\xc5\x73\x2b\xaa\x06\x2c\xd8\x5a\x6a\xec\x60\xc5\xee\x9e\x9f\x9e\xbe\x5f\x27\xfc\x4d\x5c\x94\xfe\x60\x0c\xcf\x4f\x4f\x4f\xcb\xdb\x84\xbf\xe0\xd3\x24\xca\x31\xe0\x96\x3f\xf0\x44\xf2\xaf\x82\xea\xca\x6c\x1e\x3c\x4f\x62\x9e\x96\xef\xf9\xb4\xd4\x29\x2f\xde\xbd\xed\x3c\xca\x2a\xad\x84\x0f\xd9\x27\x9e\xea\x8a\x5e\x44\x65\xf4\x21\x8f\xd2\x62\xce\xf3\xd7\x25\x5f\xea\x7c\xaf\xe2\xc4\xd4\xf2\xe3\x87\xb7\x6f\x9e\x25\xc9\xf3\x2c\x49\x24\x62\xba\x4e\xdc\x4c\x79\x95\xe5\xcb\x97\x09\x17\x2b\x57\x27\x9d\x72\x91\xc7\x4a\x7c\xcb\x67\x71\xa4\xeb\x7f\x1b\x2f\xf9\x87\xdb\x15\xc7\x81\x10\x6f\x7f\x8a\x96\x7c\xf6\x53\x36\xe3\x42\xf2\x12\xcf\xd9\xcc\x8c\xca\xcf\x51\x2c\x7a\xfb\xc7\x9a\x17\xa6\x87\x3f\x27\xeb\xcb\x38\x6d\x7e\x99\x82\x4e\x7f\xfd\x41\xaa\xe4\x74\xce\xd3\x5f\x7f\x90\xc1\xcd\xac\x84\x9f\xa3\x72\x71\xca\x2f\xed\x94\x2c\x4e\x4b\xeb\xb9\x3d\x7c\xa7\xbf\xfe\x20\x47\x2b\xcb\xcd\x50\x9d\xa2\xd3\x8d\x54\xb2\x99\x34\x31\x79\xa7\x0b\xce\x4b\xdd\xf6\x0f\xfc\xa6\xfc\x90\x47\xd3\x4f\xcf\x9b\xe9\x33\x69\x26\x21\x5b\x4f\x75\x7b\x6b\x98\xb1\x98\xac\x28\x2c\xd9\xf8\x68\x79\x3c\xd3\xb7\xec\xcb\xe1\x50\x72\xb4\x5b\xb8\x62\xb3\x60\x19\xc2\x25\x5b\x05\x57\x21\x5c\xb0\x48\xfc\x39\x67\x17\xae\x6b\x1d\x76\x76\xe2\x39\x39\x77\x5d\x72\x1e\x4c\xc3\xaa\x2a\xc8\x39\x4c\x61\x41\xe1\x3c\x98\xab\xc7\x39\x5c\x51\x58\x07\x57\x21\x5b\xc0\x25\xa5\x62\xed\xa3\x36\x36\xa7\xe7\xc1\x6d\x58\x55\x19\x39\x87\x5b\xc8\x83\xdb\x50\xc9\xe7\x77\x0d\x48\xf0\x43\xdf\x6b\x54\xec\x52\xb9\xfe\xd4\x7f\xf4\x54\x87\x05\xd2\xa7\x94\x2f\x84\xcc\x55\xa4\xf8\x71\xa3\x2e\xfc\x1e\xa1\xb9\x5e\x2f\x97\x62\xad\x94\xdc\x47\x1c\x31\x98\x26\x3c\xca\xed\x44\x4c\x50\x24\x51\xe2\x18\x37\xa4\xf0\x33\xb2\x9d\x36\x68\x7a\xd0\x26\xfe\x41\xa8\x14\xe1\x05\xdb\x7f\x7b\xfa\xfa\xe5\xee\xe8\x6c\x64\xe8\x3b\xac\x3f\x7b\xa2\xb7\xca\xdf\xa0\xe6\x07\x10\xb3\xc1\x00\x0d\x36\xa5\x2a\x59\x67\x80\x83\xc6\x38\x82\x58\x86\x28\xf4\xae\xef\x56\xa7\x9c\x94\xfe\xab\xc6\xb4\x55\x41\x1f\x2b\xa1\x86\xd6\xa8\x5f\xae\x6b\x84\x7f\xfc\x61\x18\x8f\xbe\x47\x00\xd5\x02\x07\xf2\x43\xbc\xe4\xd9\xba\xf4\xd7\x24\x1f\x35\x8f\x54\x9c\xf3\x5f\xa7\x25\xcf\xaf\xa2\x44\xbf\xd3\xcf\xca\xa6\xd3\xe6\x30\x0d\x6c\x71\x5f\x4c\x61\x4e\x0e\x9e\x3c\x12\xc2\xfe\xc1\x93\x87\xf2\xcf\x03\x0a\x2d\x75\xc0\xa1\x28\x51\xd0\xdb\x83\x27\x0f\x70\x4d\x1c\x3c\x79\x88\x13\x75\xf0\xe4\x91\x94\x69\xb0\xec\xad\x88\x60\xf6\xf8\x6f\x70\xf5\x12\xd2\x4d\x5b\xa9\x9c\xa5\xa3\x45\x54\x58\x32\x39\xc4\x7d\x82\x9e\xbc\xb2\x9a\xa8\x0b\xee\xbb\x1a\x32\x16\x1b\x03\xa1\xaa\x72\xfe\xf7\xff\x36\xa4\x1c\x22\x16\x8f\x5a\x0c\x05\xdf\xb7\x59\x0c\x14\x2c\x1e\x59\xd4\x1e\xb3\xd8\xd4\xbf\x01\xd6\x58\x2b\x57\x78\xe3\xc4\x8b\x91\xef\x4d\x17\x6c\x8b\x89\xe5\xa4\xf4\x97\x0d\xa0\xa0\xbc\xab\x25\xb1\x8d\xeb\x1b\xa1\x76\xe2\x13\xc9\xab\x2a\xb0\x8c\x32\x46\xe7\x71\x7a\x95\x7d\xe2\x1b\x06\x4a\xca\x9d\x77\xa7\xbb\x9c\x63\x90\x11\xf3\x73\xc6\xd8\x42\x5d\x58\x8b\x92\x95\xa1\xc6\x0f\x3c\x95\x3d\xdd\x8d\x8b\xdd\x28\xc9\x79\x34\xbb\xdd\xcd\xd7\x69\x2a\x84\x1e\xe9\x0a\xcc\x18\x5b\xc9\xfb\x49\xfc\xda\x61\x8c\xc5\xaa\xa0\x6c\xc7\x98\x8f\x49\xe0\x96\x74\xb4\xe4\xe5\x22\x9b\xb1\x18\xd2\x51\x94\x5f\xb2\x4c\xc3\xc7\x44\x2c\x1d\xcd\x78\xc2\x2f\xa3\x12\x09\x59\xa4\x91\xde\x4f\x49\xa4\xf0\xf6\x0a\xac\xa5\x60\x8c\xcd\xe8\x34\x4b\xcb\x38\x5d\x1b\xb9\xbd\xa8\x6b\xd1\x82\x94\xdf\x94\xa2\x01\xba\x1e\x9a\x8e\x0a\x9e\x96\x2c\x1d\x9d\xab\xbf\x51\x7e\xb9\xa3\x03\xfe\x37\x0d\x36\xf9\xf5\x50\x4c\x55\x0f\x72\xb6\x92\x2d\xdd\x49\x47\xb3\xb8\x58\x45\xe5\x74\xf1\xf2\x66\xca\x57\x52\xb8\x17\x6f\x24\x1c\x8b\xa3\xf4\x41\x56\x61\xae\x9b\x8e\xa2\x8b\x7c\xbd\xc2\xf8\x24\xf8\x56\x96\x45\x77\x72\xb6\x50\xd8\x51\x89\x85\x61\xed\xa4\x59\xbe\x8c\x12\x51\xc6\x7a\x84\xd3\x2c\x9b\x93\xa2\xb7\xf5\x64\xe5\xcf\x61\x8d\xa3\xd6\x33\x02\xca\x2a\x0f\xdf\x4b\xc3\x7b\xf9\x55\x5d\x37\xbd\x94\x85\xba\x2e\x91\xbd\x52\x53\xa1\xde\xab\x09\x59\xcb\x2e\xd5\x35\xe1\x88\xeb\x01\x59\x6d\x56\xb0\x6e\xeb\x5d\x83\xfb\x78\x27\x4a\xf4\x75\xc3\x85\x7c\xeb\x73\x6d\x92\x2c\x88\x94\x89\xfe\xd1\xca\xae\x6a\x14\xb9\xf3\xba\xae\xf9\xe8\x3a\x8f\x56\x6c\xad\xa0\x35\x9c\x62\x5d\xac\x78\x3a\xe3\x52\xa0\x76\x60\x6e\x25\xfd\x33\xe6\xc9\xcc\x81\x05\x73\xf8\x0d\x9f\xae\x4b\x14\xbe\x57\xcc\x99\x66\xcb\x55\xc2\x4b\x3e\x73\x60\xc6\xee\x6a\x1b\xcf\x86\xde\x35\x5d\xb8\x6d\x3d\x5d\x89\x27\x09\x64\x74\x57\xef\x5c\x06\x59\xc8\xfa\x6d\x74\xea\x1d\x09\x71\xa4\x36\x64\x1b\xd2\x56\x31\x62\x72\x41\xde\x92\x20\xa4\x94\xee\x9c\xbb\xee\xf9\x80\xb1\xd4\x75\x55\xa8\x92\x73\xc8\xa8\xeb\x92\x4b\x76\x2e\xd5\x89\xd7\xec\xca\x8e\xe1\x6f\xfd\x6e\x6f\xf9\x4b\xda\x74\xe4\xa5\xa0\x86\x81\x5c\xe2\xa0\x87\x50\x2f\xac\x70\x34\xcf\xf2\x97\xd1\x74\xd1\x1c\x2c\x4b\x7a\xc7\x83\x32\xec\x63\x66\x4a\x0f\x8c\x94\xc2\x04\x6e\x35\x15\xdd\x34\x71\xaa\xec\x8c\x96\x8d\x15\xc4\x16\xa2\x7c\x46\x5a\x18\xc7\xea\xa0\x6d\xb5\x43\x50\x18\xf3\xb8\x5b\x22\x0a\x41\x06\x66\x83\x27\x84\x07\x69\x08\x1c\x62\xb9\x09\x64\xcf\x06\x8c\x15\x6a\x0f\xc8\x8d\x52\xe0\xca\x9e\xb2\xb5\x02\x1b\xd0\x1a\x10\xd7\x75\x64\x9c\xb9\x86\xc8\x4f\xcd\xb8\x4f\xc1\x39\x3f\x8f\xae\xa3\xb8\x74\xe8\x44\xb5\xcc\x04\x59\x98\x8e\xd4\xbb\x9e\x28\x11\xa5\xa2\x25\xc0\xb1\xa9\x6d\xb0\x99\x52\x37\x52\xbf\xa5\xfe\x46\xd9\x7d\x91\x27\x14\x30\x27\x87\x8c\xac\x3b\x45\xea\x89\xd9\x28\xb9\x8e\x48\x21\xb7\x24\xc5\x81\x13\xa3\x59\x1b\xef\xad\x92\x95\x13\x15\xb6\x2c\x83\x8c\xfa\x19\xa1\x75\x33\x91\xa7\x78\x3f\xad\x85\x21\xc3\xe6\x02\xbd\xf5\x43\x4d\xbf\xe5\xed\x78\x43\x80\x11\x55\x02\xb6\x90\xc7\xa6\xa0\x91\x6c\x85\xeb\x36\x74\xbd\x4d\xe8\x58\x09\xb2\x0d\x7d\x65\xe9\x6b\xf7\xd9\xce\x16\x52\x24\x56\x93\x65\x33\xf8\x61\xc1\x77\x75\xcd\xbb\xb3\x8c\x4b\x3b\xaa\x55\x9e\x5d\xc5\x33\xbe\x1b\xed\x7e\x87\x1f\x7f\xb7\x2b\xcb\x72\xcc\x18\xcd\x6a\xc9\x6e\x13\x92\x43\xd3\x76\x4d\x89\xdb\x7c\x4b\xae\x38\xa3\xc4\xef\x6d\x56\x8c\x0b\xb1\x3b\x58\x33\x75\x4d\x80\x6f\x0d\x3b\x9e\x64\x92\x74\x93\x34\xc0\xb5\xb1\x4e\x4a\x71\xec\x09\x59\x26\xd7\x02\xa4\x23\xb1\xcc\x18\xc7\x3f\x6f\xb2\xa9\xd9\xd0\x03\x9b\x8f\x58\xe3\x2b\x57\xa5\x1a\x5d\xba\xd9\x0c\xea\x67\x3e\xf9\xba\x01\x35\x83\x29\x1b\x66\x2c\xd3\xd2\x5d\xb5\xa1\xfa\x8a\x6f\x56\xd7\xbb\x46\xe1\x26\x18\xc2\x9b\x6c\xea\xf3\x60\x1c\xd6\x3b\x1e\x5a\x78\xb8\x2e\x29\x65\xbc\x98\x37\xd9\x94\x71\x54\x80\x1f\x34\x6f\x94\xf6\x4e\xbe\x3b\x08\xa1\x1c\x45\xf3\x92\xe7\xf2\xf9\x30\x54\x7e\x65\x65\x7e\xfb\x52\xaa\x7b\x0d\x2c\xbc\xa9\xff\x59\x53\x3f\x1f\x29\xf2\x1f\x67\x69\x55\xdd\xd5\x3b\x25\x4e\x24\x33\x7c\x49\x99\x9f\x97\x38\x75\x76\x6e\x56\x36\x05\x7e\x32\x4e\x74\x4d\xb5\x2c\xd0\x7d\x73\xf2\x2c\x2b\x9d\x3a\x04\x6e\x48\xed\x3b\x09\x35\x65\x82\x14\xf1\x92\x88\x73\x93\x29\xf0\xad\xba\xb4\xe3\xda\x9a\x98\x07\x19\xee\xb9\xb4\x03\x00\x24\x63\xc1\xf5\xe9\x25\x71\x5d\x18\x60\x61\x04\x10\x8a\x8b\x9f\xa2\x9f\x08\x37\x8e\x41\x4a\x9a\xdc\xf3\xac\x68\x7e\xbb\x3a\xf2\xdf\xd1\x70\x18\x1f\x73\x83\x40\x82\xd0\x2d\x2a\x02\x44\x6c\xc1\x10\x29\xc2\x14\xc4\x21\x48\xb1\x81\x0d\x3c\x48\x77\x3a\xef\x4b\xf3\x72\x0c\x69\xdd\x38\x9e\xe1\x12\x8e\x34\xde\xc7\x9d\x78\xf4\x3f\x58\x74\xe8\x83\xe1\x10\x4a\x4a\x29\x1b\x0c\x7e\x55\xc8\xad\xc5\x02\xaf\x5b\xa8\xaf\x57\x70\xd5\x7a\xbe\x85\xab\xa0\x08\xd9\x2d\x8a\x63\x49\x84\x46\x84\xac\x91\x53\xf5\xb9\xc9\x11\x7b\xbd\xd8\x48\xee\x31\x4b\xef\x1b\xf6\x0e\xf6\xae\xbe\x65\x1d\x94\x68\x6f\xc7\xd8\x6d\x55\xf5\x54\xc9\x18\x23\xa5\xdd\xae\xaa\x2a\x11\x50\x83\xd2\x1a\xf8\x68\x19\xe5\x9f\xfa\xb8\xb1\x62\xf9\x6d\xd8\xed\x49\x6f\x2a\xe1\x70\x45\x7d\xc2\x47\xe7\xe7\x38\x5e\xe7\xe7\xec\x0a\x0a\xdc\x55\x55\x45\xb8\x18\x98\x9e\x76\x51\x0a\x7c\xab\x88\x71\x4d\x81\x8b\xd6\x45\x28\x83\x6d\x36\xef\x4e\x31\x49\x9f\xd7\x35\xbc\x24\x37\xf6\x21\xc4\x7a\x08\xa2\xad\xb2\x13\xf0\xd1\x33\xfb\xd0\xc4\x6e\x44\x75\x22\x85\xb5\xcd\x07\x1a\x94\x4d\x41\xa9\x6e\xc8\xda\x24\x37\xa7\xe7\xbe\x49\x25\x29\x9d\x64\x7e\x86\xeb\x90\xf4\x30\x5e\xf3\x2d\xd2\x62\x65\xc5\x68\xf2\x8b\xe3\xef\x4b\x31\x0c\xd7\xed\xe1\x73\xe0\xfa\x33\x02\x21\x5c\x9b\x63\xdf\x66\x16\x13\xfa\xd6\x14\x16\x3a\x62\x18\x3e\xf1\xdb\xa2\x67\x05\x5a\xd8\x41\xa9\x8c\x82\x51\xea\xb8\x6b\x8d\x97\x4b\xce\xaf\x78\x5e\x70\x42\x61\x73\x93\x97\x0d\xc4\x90\x64\xf6\xe5\x68\x95\xad\x88\x3c\x9f\xc9\x12\x3b\x5b\x39\xb7\xf7\x79\x73\x6b\xdd\xec\x6e\xd1\x5c\x79\xef\xc3\xde\x82\x15\xb6\x8e\xdd\x59\xfb\xc2\xff\x04\x48\xf6\xba\x56\x0a\x2a\x88\x1b\xbf\xd2\xf1\xf0\x90\x42\xa8\xdf\x78\x10\x53\xe1\xe4\xf0\xa7\x4c\xd6\xad\x91\x0f\x2d\xae\x83\x49\x6d\x06\x88\x49\x52\xc2\xe8\x32\x0a\x4d\x9d\x9f\x51\x18\x70\xda\x1a\x58\x24\xd7\x8e\x3a\x21\x1a\xc4\x49\x23\x2d\xca\xc0\x5d\xe8\x78\x82\x34\x76\x98\x36\x18\x64\xda\x4f\x20\x0d\x59\x49\x6b\x28\xca\x6c\xe5\xb7\xee\x70\x4c\x17\xc6\xca\x7d\xa1\xd3\xae\x60\x1c\x5a\x7c\xa7\x2d\x77\x70\x29\x77\xc8\x23\x27\xb7\x25\x08\xc9\x5a\xae\xa2\xa4\x86\x8d\xe3\x67\xef\xa8\x23\x2e\x97\x2a\x68\xa7\x41\x1e\x6f\x8e\x11\xb1\x44\xb3\xd5\xe7\x66\xc5\x28\x95\x9c\x20\xc7\xd4\x88\x25\x39\xc4\x9f\x13\x3e\x06\x83\xd8\xc0\xb1\x66\xdd\xfe\x36\xb8\x51\xd9\x09\x1b\x1f\xed\xed\x65\xfa\xa0\xdf\x1d\x98\x2c\x84\x82\x45\xdd\xc1\x41\x76\xcb\x18\x8b\x46\x92\x01\x1b\xe0\x5b\x44\x22\x91\xba\x07\xfd\xee\x98\x99\x15\x67\x10\x4b\x95\x06\x0e\x1c\x2d\x83\x38\x12\x37\x5e\x27\x37\x02\x88\x2c\x6b\xed\xba\x49\x7b\xf1\x1e\x47\x46\x7e\x69\x2a\x6f\xd2\xd0\xbc\xa5\x93\xbf\x29\xd4\xfe\xc2\x4a\xad\xb5\xee\x61\xfd\xcd\x75\xd5\x1a\xcc\x6b\x90\x6c\xea\x69\xca\xfc\x76\xb7\x28\xa3\x12\x75\xef\xbb\xd7\x71\xb9\xc8\xd6\xe5\x2e\x7e\xbe\x9b\xe5\xbb\xaa\x05\xce\x7f\xa1\xc1\x75\x5d\x83\xd4\x62\x74\x0c\x85\x1a\xe3\xd8\xad\x33\x9f\xca\x99\x4f\x8d\xc6\xab\x33\xf3\x69\x28\x81\x8d\x37\x66\xd1\x6c\xc9\xb8\x3d\x51\x2a\x2e\x25\x36\x3e\xb6\x9b\xa9\xf8\x46\x2c\x81\x5c\xeb\x3a\x73\x5d\xe2\xe0\x6f\xdc\x5f\x55\xe5\x68\x7d\x09\x3e\x53\xd7\xcd\x9a\x5a\x5d\xb7\x3c\x66\x99\x55\x9c\xeb\x12\x89\xac\x27\x4f\xeb\x91\x44\xd0\x33\xeb\xd3\xbf\xb3\x84\x1f\x19\xdd\x13\x22\x45\x8d\xb2\x09\xd9\x46\xae\x70\x4b\xd9\xd5\x08\x69\x1d\xdf\x68\xe5\x05\x11\x27\x4d\xfd\xb0\x69\xbe\xfc\x15\x04\xc3\xea\xf3\x48\xba\x83\xb6\x3b\x8e\x89\x93\xa6\x39\xf8\xad\x6f\x29\xaf\x54\x0e\x62\x08\x0f\x33\xa4\x16\xf3\xb6\x89\xb1\x3e\xed\x35\x05\xca\xcd\xe9\x5b\xaa\x2c\xae\xb4\x4e\xa5\x22\xa1\x32\x5f\x49\x61\x56\xc3\x3c\x4e\xe3\x62\xb1\x05\x49\x61\xeb\xb2\x2a\xe5\xb2\x6a\x85\x56\xb0\x97\x55\x29\x85\x6c\xfb\x8c\x61\xfb\xd2\xb4\x46\x3c\xb5\xe6\x55\x50\x36\x75\x08\xa1\xf0\x8c\xa4\xa2\x89\x7d\xa1\x4d\xff\x83\x4d\x94\x6b\x10\x9b\xa7\x58\x77\xba\x95\x4b\xe4\x96\x3e\x24\x66\x39\xce\xba\x68\xa5\x66\xdf\x71\x5d\x6f\xd0\x85\x38\x11\x8c\x34\x51\x94\x20\x2a\x4b\xbe\x5c\xe1\x75\xae\xe6\xb0\xa8\x4f\xb3\x97\x9a\x6d\xc6\xd9\xe6\xc5\x77\xfa\xc0\xe8\xbf\xc5\x28\xbc\xe6\x38\xeb\xa7\xa0\x8e\xaf\x7e\x5e\x83\x51\xc2\x5a\x2b\x45\x4f\xbd\x62\x1c\x62\x58\x79\x4d\x36\x14\x37\xe5\xc4\x5c\x23\xf8\x77\xb5\x8e\x2f\x73\xa9\x85\xa8\xf7\xeb\xb4\x8c\x97\x9c\xe5\x4d\x2c\x36\x23\x02\x3a\x39\x2a\xc3\xba\x79\x77\xd9\x6e\xee\x50\x82\x46\xa8\x77\x75\x28\xfe\x01\x3c\x8a\xb6\x37\x57\xeb\x92\x61\xa3\x59\xcb\x6c\xb6\x4e\x78\x8f\xa2\x49\xbe\xd0\x4d\x9e\xb4\x1f\x99\x90\x37\xa7\x78\xff\x33\x29\xa5\xb3\xeb\x86\x97\x58\x93\x65\x93\xa4\xff\xfe\xf7\x35\xcf\x6f\x77\x73\xfe\xc7\x3a\xce\x79\xb1\x1b\xed\x5e\xc7\xe9\x2c\xbb\x46\xea\xbe\x1b\xed\xea\x2f\x9d\x46\x48\x24\x9c\xd6\x3e\xfe\x4b\x9c\x75\x2a\x5d\xb3\x66\x4d\xac\x60\xf9\xfd\x44\xfe\x91\x01\x60\x3f\x33\x0c\x57\x3a\x18\x6b\x6e\xf5\x04\xe2\x2d\x3a\xd0\x8c\x29\x61\x09\x22\x5c\xc2\xe9\x34\x2a\xa1\x60\x12\xa1\x08\xd6\x2c\xd5\xc8\x3d\x90\xb0\xbb\x1a\xa6\x2c\x69\x10\x17\xe7\x2c\xe9\x5e\xde\x2c\xd8\xbc\x79\xbf\x62\x0b\xc9\x0d\x64\xd5\x14\x35\xbc\xb0\xec\x39\xac\xf4\x9f\xe5\x9c\x14\x6f\x83\xad\xa0\xc9\xa3\x34\x9b\xe1\x6d\x74\x0d\xb7\x7d\x47\x32\x19\x71\x41\x1c\x03\x91\x80\xc9\x11\xab\xe1\x8a\x49\x05\xf6\x60\x0c\x45\x3e\x15\x7f\xd2\xec\x2d\x4e\xba\x38\xcb\x36\x32\xd6\xa5\x7d\xeb\x12\x43\xc6\x48\xc9\xca\xaa\xca\xa9\x3a\x74\xa9\x3b\x72\xe2\x48\xb3\x31\xc9\x96\xb3\x51\x89\x14\x19\x52\x14\x5a\x63\x21\xb0\x5e\xd1\x34\x88\x43\xc1\x8e\x82\x38\x64\xe2\x37\xdd\x29\x47\x0b\x1e\xcd\x46\xd1\x6a\xc5\x95\x6f\x3f\xc9\xe8\x68\x15\xe5\x3c\x2d\x7f\xca\x66\x7c\x94\xf3\x65\x76\xc5\xf5\x9b\xe6\x18\x7e\xd1\xe9\x20\x63\x7c\xc2\x87\x8e\xe3\x6f\xac\x6b\xc1\x36\x7a\x46\x72\x92\x04\x53\xad\xb0\x08\xab\x4a\x7f\xe6\x1b\xdf\x79\x89\x7e\xda\x6b\x4f\x2c\x16\xf6\xf9\x68\x2e\x96\x41\x2c\xe3\x44\xd5\x70\xcd\xf6\x3f\x06\x67\xc5\xd9\xfa\xd5\xcb\x57\xaf\xce\x6e\x9e\x8d\xc3\x61\xd5\x79\xbe\xb7\x7f\xd9\xd1\x80\x4b\xc2\x3b\x18\x88\x79\x95\xe4\xd6\x91\x4a\x25\x83\x3f\x94\xb2\x0b\xcb\x32\x7a\x89\x5e\x47\x83\x5b\xfc\x43\x9c\x08\x4d\x1f\xc5\x01\xa0\xaa\xd0\x68\xba\xaa\xf4\xf2\x68\x05\xcd\x3e\x19\xbb\x6e\xb9\x27\x55\x59\xb4\x16\x2d\x67\xe7\xf6\x29\xe8\xf7\x3f\xc4\xee\xf4\x9d\xc3\xd1\xe1\xc8\x73\xc0\x3e\x14\x9d\x83\x6c\x88\x3f\x86\x32\x93\x56\x0a\x9b\x87\xc8\xcc\x46\xd3\x84\xae\xa5\x77\x67\x96\xec\xcc\x3e\x3f\x1e\x23\x03\x0f\xf8\x10\x69\xaa\xac\x2c\xf4\x65\x5a\x58\x83\xd8\x71\xa7\x65\x34\xfd\xd4\x63\x1a\x77\x3e\x5a\xf2\xfc\x52\x9a\xd9\xd8\x1a\x0e\x82\xfe\x4e\xe6\xb0\x29\x04\x2c\xb9\xd9\x64\x34\xe3\xb2\x06\x1e\xf5\x07\xf8\x3e\x1f\x89\x37\x06\x99\x10\x96\x1d\x3b\x5a\x9b\x95\x98\x96\x91\xf3\xd1\x32\x92\x2e\x50\xd0\xbe\x59\x37\x67\x75\x7d\x89\x24\x56\x0a\x15\x27\xae\xb6\x4b\xd7\xb6\x82\x33\xfb\xb2\xdc\xdc\xbf\x23\x5c\x7c\x9c\x17\x7d\xd0\x16\x58\x00\xff\x83\x8c\x69\x0d\x49\xf4\xd9\x2c\x7b\x1e\xad\x81\xff\xb1\x25\xe6\x73\xb3\xfe\x86\x7c\x48\x70\x9a\xfc\x26\x36\x40\xa7\x9d\x42\x34\x76\xdd\xf4\xb8\x9c\x04\xea\x5c\x19\xfa\x41\x28\x8a\xb7\x4d\xe8\x3a\xbd\x34\xb3\x52\x55\x9b\x13\x28\x27\xde\x2f\xa0\xc8\xf2\xd2\x4f\x47\xe2\x0f\xba\x5b\x4f\xb9\x78\xc2\x1f\x35\x9c\x8f\xf8\x4d\xc9\xd3\x19\xc3\xcd\xa8\x7e\x5b\xf5\x29\x70\x30\xa9\x77\x81\x0c\x22\x66\xdb\x7c\x57\xd5\x5d\x0d\x05\xf3\x60\xbd\x09\x67\x95\xb0\x81\x87\x7a\x0c\xe7\x22\xcb\x12\x1e\x59\x94\x23\x72\x5d\x92\xb0\xa8\x55\x58\xa1\x0a\x1b\x0e\x29\x6c\x10\xa0\xa8\xaa\x96\x24\xa2\x55\x45\x22\x76\x57\x53\x28\x18\x63\x6b\x8c\x2c\x81\xf3\x5a\xec\xed\xd1\xa3\xe2\x78\x7d\x54\x48\x48\x62\x49\xae\x09\x67\x6d\x68\x2c\x3b\xac\x28\x8b\x82\x32\x84\x68\xc0\x18\xc9\x19\x0f\x4a\x0c\x37\x92\x60\x98\x2d\x72\x3e\x8a\x8b\x9f\x93\x28\x4e\x95\x57\x70\x2e\x2a\x8e\x19\x6e\xdd\x51\x5c\xe0\x5f\x92\x53\x4a\x27\x24\x9e\x90\x98\x0d\x3c\xc1\xee\x5c\xb7\x9d\x21\xa5\x93\x54\x4c\xa1\x8f\xef\xba\x65\xe2\xdb\xbb\x1a\x44\x33\x98\x9e\x04\x92\x40\x06\x39\xa5\x4d\x3c\x48\xd1\x1c\xcc\x92\x5b\xc8\x5e\xcd\xac\x91\x3b\x7e\xb3\x8a\xd2\x59\xe6\x2b\xf1\xc0\x19\x12\x45\x82\x86\x08\x2d\x95\x8b\x97\x4b\x42\xe9\x48\xf9\xdf\x93\xfd\xb3\x17\xfb\x97\xe0\x38\x14\xe2\xe2\x3d\x8f\x66\xb7\x82\x6d\x71\x21\x62\xb4\x96\x71\x57\xfc\x10\x5b\x39\xcd\xda\x4a\x8e\x1a\x5a\x7d\xea\x33\x97\x37\x68\x1e\x03\xc1\x43\xb4\x1a\x4c\xe6\x0f\x9d\x01\x63\x86\x81\x28\x54\x0f\x84\x0b\xa7\x7d\xfc\x86\xa4\x6c\xae\xa9\x80\x63\xad\x74\x3c\x05\xda\x4b\x9f\xba\xae\x92\x0f\x52\x8a\xc6\x08\xa2\x9d\x2f\x97\xab\xf2\x76\x5b\x3b\xed\x80\xb3\xaa\xc1\x5e\x13\x0d\x0f\x64\x24\x9c\x97\x57\x51\x3b\xaa\xfd\x25\x0e\x4a\x87\x0e\x9a\x00\x6f\x90\x33\x04\x10\x17\x4c\x0a\x57\x5e\x6a\x10\xf1\x8e\xf2\xe3\xd4\x75\x07\xde\x80\x31\x85\x48\xc1\x83\x3c\x84\x1c\xc4\x1f\x7a\x94\x0f\x87\xf4\x08\xf5\x02\xe2\x33\xa5\xaf\xd3\x11\x02\x7b\x3e\x50\xf1\x73\x34\xa5\xac\xa1\xcc\xe3\xe5\xe7\xd8\x87\xe3\xf8\x44\x30\xfa\x66\x51\x5c\x23\x2a\x15\x2c\xa3\x4f\xbc\xc3\xa0\xec\x88\x75\x55\x15\x18\x30\x79\x23\x11\x91\x97\x96\xf3\xfc\x44\xf3\x93\x54\x02\x7c\xa5\x97\xb6\xb8\x10\xf0\xd0\xe7\x26\x5c\x7a\x0a\x9c\x52\x48\x6b\xd0\xa6\x7b\x5d\x13\x95\x56\xab\xcb\xc9\x9e\xe7\xaf\xf5\xfc\x73\x04\xac\xc1\xaa\xb6\x6a\x21\x86\x5a\x0b\x2a\x66\x02\xe2\xd6\xe8\xe3\x18\x73\x74\xc7\x67\x65\x90\x87\x8d\x3a\x59\xc1\x97\xc7\xc0\x6b\xb8\xcc\xf9\x6a\xa3\x55\x8d\x85\x68\x10\x2a\x1c\x1c\xde\x20\xf8\x0d\xd2\xa3\xf8\x38\x3b\x8a\x87\x43\x3a\x28\x09\x5e\xa0\xc4\x54\x86\xc1\x51\x60\x00\x1c\x85\x36\xed\x10\xd3\xe5\x8f\x96\x71\x8e\x20\xb7\x6c\x0c\x05\x93\xb0\xf3\x66\x1d\xe5\x4d\x4f\xb2\xe3\xfc\x28\x1b\x0e\xa9\xa2\x77\x31\x13\x55\x66\x21\x64\x90\xa2\x77\x80\x8a\x58\x20\x71\xdf\x71\x35\x65\x8a\xfc\x7d\xe9\x03\xa3\xce\x90\xdc\x33\x08\x01\xc5\x92\x75\x3c\xf3\x3d\x28\xd6\x2b\x71\xa2\xf1\x67\x35\x85\xad\x36\x55\x48\x47\xe7\x69\x20\x9f\xcc\x3d\xab\x90\x5a\xbb\x49\x14\x94\xd0\xe0\x7c\x2f\x39\xc5\xae\x34\xd7\xdc\x95\xf2\xfe\xee\x2b\x73\xc5\x27\xd6\xc9\xee\x8b\xa8\xe4\x0a\xc0\x5c\x51\x12\x49\xa3\x54\xc5\x06\x28\x64\xd7\xe9\x1e\xeb\x92\xc0\x90\x20\x67\x58\x0e\x9d\xd0\x09\x59\x39\x2a\xb3\x37\xd9\x35\xcf\x9f\x47\x05\x27\xb4\x96\x2a\x9e\x9b\x4d\xb5\x7c\xc3\x02\xa1\x80\x35\x24\x30\x05\x0c\x15\x0a\x33\x58\xc2\x2d\x7a\xb9\x5d\xc0\x39\x73\x8a\xf8\xcf\x3f\x13\xee\x0c\xbd\xfb\x82\x7a\x8a\xc6\xc2\xb5\x7d\x62\x52\x11\xaa\xe0\x94\x45\x9c\x50\x78\x27\xff\x3c\x93\x7f\x3e\xf5\x4b\xcb\xe2\xd8\x51\xba\x2e\x99\x23\x8e\xd0\xb8\x86\xb7\xec\xae\xee\x9e\x91\x3e\x88\x15\xf9\x9c\x7d\x18\xad\xb2\x15\xbc\x67\x32\x7c\x14\xfc\xac\x7f\xfc\xc4\x3e\xa8\x13\xd9\xef\x6c\xdb\x9e\x19\x83\xb5\xba\xd2\xe3\xfc\x28\x95\x0c\x95\x07\x69\x68\xbb\xc6\x6b\xba\xbe\xe7\xd5\xf0\x9a\x39\x18\x02\x96\xcf\xaa\x02\x2d\x7e\xf9\xac\xc2\xdb\x9c\x2a\x5a\x97\xd9\x3c\x9b\xae\x0b\xfc\xb5\x4a\xa2\xdb\x6a\x9a\xa5\x65\x9e\x25\x45\x35\xe3\x73\x9e\x57\xb3\xb8\x88\x2e\x12\x3e\xab\x24\xb8\x5a\x15\x17\xcb\x68\x55\x25\x59\xb6\xaa\x30\xda\xc3\x2a\xe1\x55\xb6\xe2\x69\x95\xf3\x68\x96\xa5\xc9\x6d\xa5\x8e\xbf\xb3\xaa\x98\x66\x2b\x3e\x73\xe0\x05\x73\x82\xb3\xb3\x9b\x83\xf1\xd9\x59\x79\x76\x96\x9f\x9d\xa5\x67\x67\xf3\xd0\x81\x37\xcc\x21\x13\xff\xec\xec\xec\x6c\x54\x05\x67\x67\xd7\x7b\x61\x15\x7c\x3c\x1b\xef\x9d\x9d\xdd\x44\xe3\x90\x0e\x1d\x78\xc5\x9c\xb3\xb3\xc0\x19\xbe\x18\x3a\xf7\x89\x33\x7c\x33\x74\x28\xc6\x88\xc0\xe7\xe0\xfe\xc7\x7b\xd5\xe0\xdf\xe1\x84\x51\x95\x32\xf1\xbf\x23\x4d\x89\x1f\xc5\xdf\xef\x42\x7a\x9f\x7e\x57\x9d\x39\xdd\x17\x67\x8e\x78\x73\xe6\x54\xaa\x5c\x5a\xa9\x52\xce\xce\x42\x07\xfe\x64\x8e\xdf\x54\x78\x76\x46\x08\xf9\xf6\xa2\x69\xd5\x7d\x43\x68\x70\x76\x16\x86\x95\x33\x7c\x35\x74\xe8\x7d\x5a\x8d\xee\xd3\xb3\x33\x51\x35\xfc\x68\xc7\x70\x79\x31\x74\x86\x0e\x60\x84\x8c\xef\xed\x74\xe7\x23\xb6\x71\x88\x05\x7f\x54\x85\x86\x54\xd7\x42\xef\xcb\x3e\x0c\xef\xa9\x8f\x7f\xe9\xf9\xf8\x3e\xc8\x3f\x0e\x85\x3f\xfa\x5e\x93\xe0\x64\xf8\x6f\xd1\xc4\x17\x43\x87\x9a\xac\xbf\xb5\xb2\x32\x9d\xf5\xe3\xd9\x59\xf8\xdd\x99\x13\xde\x9f\xd8\xa3\x87\x75\xff\x6a\x7f\xf1\x27\x85\x7f\x76\x2b\x7b\x33\x74\xee\x39\x14\x7e\x60\x77\xaf\x5f\xf8\xad\x77\x7f\x51\x43\xef\x50\x78\xfe\xe6\xd9\xe9\x69\xfb\xed\xd9\xd9\xa8\x79\xff\xe1\xd9\x0f\xed\xb7\xf2\x55\x15\xdc\x0f\xc5\xeb\x67\x1f\x3e\xbc\xf7\x3b\xf5\xbe\xa2\xf0\xf3\xe9\xcb\x5f\x5e\xbc\xeb\xbe\xf8\x93\xc2\xf3\x1f\x5f\xbf\xe9\x34\xc6\x27\xb8\xaa\xf1\x2c\x52\x89\xd3\x46\x95\x96\x0b\xf1\xff\x9e\x78\xa0\x7b\x64\x2a\x8e\xed\x55\x36\xdf\x43\x5d\x9f\x5c\x2e\x6a\x7c\xf8\x15\x4f\xab\x6c\x36\xab\x08\x09\x86\x7b\x61\x45\xc9\xd9\xd9\xec\x3e\x4d\xab\x66\xc5\xaa\x17\xea\xf9\xec\x6c\x36\xa4\x15\x35\x83\x89\x4b\xc3\x89\x1d\x0a\x42\x42\xef\xf4\x54\xec\x84\xd7\x43\x87\xde\x53\x59\x52\xce\x67\xc5\xf3\x2c\x2d\xf9\x4d\xd9\xed\x9b\x28\x4e\x4e\xac\xdf\xb4\x8a\xff\x51\x5d\x96\x55\x22\x7b\xd4\x74\xb0\xdd\x07\x32\xf1\xf7\xce\xce\x66\x74\x82\x4d\xb7\x1a\x46\x26\x2c\xf8\xb8\x17\x56\xf7\x54\x13\x6b\xf8\x1b\xdb\x17\xad\x8a\xd3\xd5\xba\x54\x94\xa6\x12\x8d\x89\x72\x1e\x55\x17\xeb\xb2\xcc\x52\x7a\x6f\x3f\x86\x7b\x6c\xff\xe3\xe2\x6c\x26\x7e\xfe\x9d\xed\x7f\x0c\x3e\xde\x85\xc3\xb3\xbb\xb3\xe2\xfe\x59\x90\x46\x65\x7c\xc5\x77\xcf\xae\xf7\xe1\x1f\xb2\xb4\xbf\x90\x40\x90\x86\x21\xad\xc8\xd9\xf5\x90\x56\x67\x23\x9d\x40\xef\xed\xc3\xbf\xd8\x7e\x30\xfc\x77\xb8\x0f\x7f\x6d\x2d\x2f\xdc\x6c\xc1\xd9\xd9\x2c\xda\x9b\x87\x77\x1e\x3c\xaa\xb1\xe1\x93\x4a\xf6\x8a\x56\x23\x6c\xf4\xa5\x04\xaa\xea\xb7\xbc\x75\xc6\x37\xce\xb0\xdc\x43\x40\x6e\x23\x0d\x0c\x58\x5e\x55\xe9\xa4\xf4\xf3\xe3\xf1\xa4\x07\xbb\x9c\xe4\x43\x89\xe0\xed\xf7\xbe\x3c\x39\xf1\xc6\x15\xa2\x7d\x83\x37\x3e\x38\x74\xf3\x4a\x82\x7b\xd7\x50\x72\xb6\x4f\x02\x41\xfd\x6e\xbc\xf9\xd9\xcd\xe3\x79\x58\x7d\xdc\x9b\x9c\xcd\x68\xf5\x71\xef\x9e\xa2\x8b\xea\xcd\xde\xd9\xfa\xd5\xab\x57\xaf\xc4\x20\xec\x5f\x42\xca\xfb\x19\x52\x39\x71\xce\xc6\xa8\xcd\x9f\x38\xff\xcf\xff\xfd\x7f\x39\x3e\x37\xf1\x8f\xf6\x3c\x3a\x74\xce\xce\x9c\x21\xc7\x2b\x55\xd1\xb4\x67\xa5\xb1\x4f\xd9\xf3\xa8\x51\xe4\x11\xef\x11\x1d\x3a\xbb\x8e\x2f\xb3\xd7\x90\x73\xfb\xe8\xb9\x10\x67\xd8\x98\xb3\x4b\xde\x73\x7b\x8f\x1e\xee\x7c\xa4\x19\x88\xeb\x12\x67\x9e\xe5\x4b\x47\x9a\x3e\x38\x49\x74\xc1\x13\x47\x2a\x6b\xe0\x6e\x16\xe7\xbe\xd3\x68\xc4\x1c\x54\x4f\xfb\x4e\xc2\x2f\x79\x3a\x73\x94\x62\xf9\x67\x25\xeb\x7c\x60\x3f\x49\x31\xf3\x7a\x84\x9b\x4f\x7c\x51\x50\x68\x3f\x7d\x08\xec\x67\xad\x73\x69\xd4\x88\x52\x21\x7d\xc3\xe9\xdd\xcf\xec\x0e\xcb\xf5\x3f\xf4\xc7\x7f\x7a\xaf\xaa\xe5\xa0\xaa\x2d\x29\xad\xb7\x0a\xb5\xdc\x92\x69\x8f\x78\x90\x2a\x01\x76\x38\x0c\x8f\xe8\x91\x91\x5e\x05\x5f\xb6\xec\x6d\x32\xae\x62\x38\x6a\x7b\x0a\x28\x94\xf8\x32\x13\x62\x8b\x34\x3c\xcf\xae\x53\x9e\xbf\x68\x84\x94\x72\x52\x9a\xee\xf8\x4f\xa5\x65\x20\x1a\x97\x1b\xc9\x7e\x60\xa9\x07\xc5\xf1\x4e\x9c\x67\x5e\xba\xee\x53\xf9\xc7\xc3\x47\x13\x12\x4a\x9a\x2a\xb9\x2e\x21\xa2\xe0\x56\x65\x55\x55\xfa\xd7\x42\x48\x5e\xb9\xee\x82\x94\x14\x50\x39\xba\x82\xa5\x0c\x73\xee\xa9\x72\xc9\x9c\xfd\x03\xc3\x22\x0b\x41\x58\x08\x25\x19\x9b\x07\x5e\x88\x79\x9e\x32\x51\x17\xaa\xd0\x49\xc2\x50\x19\xad\x74\xaa\xdf\xdf\xbe\x9e\x91\xac\x09\xc6\x8e\x0d\x49\x46\xf1\x8c\x31\x96\x35\x01\xab\x50\xee\x4d\x28\xe4\xe6\x42\xf6\x12\x75\x14\x97\x3d\x45\xb9\xee\x05\x29\x21\xa1\xae\xfb\xa5\x72\x30\x4a\x7b\x70\x10\xea\xf7\x7a\x89\xe5\x60\x37\xb1\xf8\xfe\xf6\x43\x74\xf9\x53\xb4\xe4\x12\xff\x51\xb4\x10\x3b\x77\x18\x52\xd7\x4d\xdb\x39\x9f\x27\x51\x51\xfc\x84\x41\x79\xca\x2d\x6f\xbe\x58\x9b\xc9\x29\x7a\x03\x79\x8d\x37\x4f\x7f\x14\x91\xeb\x0e\x9e\x05\x5c\xec\xc8\x50\x1c\xc6\x6f\xab\x6a\x70\x2b\xbd\x60\xc4\x88\xe3\x5c\xe0\x9c\x5e\xb2\x12\xae\x18\x6f\xec\xe6\x95\xba\x06\xcf\xb3\x62\xcd\x88\xb2\xdb\x62\xb5\x5c\xc3\x64\x2a\xe7\xe6\x59\x59\xe6\xf1\xc5\xba\xe4\xc4\x89\x67\x0e\xa5\x93\x29\x9b\x9a\xb3\x68\xc9\x21\xe5\x88\x5d\xdd\xcd\x08\x53\x76\x4e\xa1\x60\x64\xc6\x22\xd1\x24\x2d\xa8\x16\x7b\x7b\x47\x74\x86\xd6\x3a\x7f\x71\x86\x53\xd1\x81\xe1\x15\x27\x22\x85\xee\x5c\xb1\x99\x42\x42\x07\x0c\x09\xf6\x2f\xdd\x23\xd7\x5d\x72\x52\x5a\x8a\x72\x5a\x55\xa5\x18\x8b\x2b\xda\xd8\xb3\x5b\x83\x78\x39\x42\x15\xaf\xf4\x6a\xcb\xf2\x67\x49\x42\xae\x70\xf8\xd4\x5e\xa7\x77\xb5\xba\x60\xbc\x9b\x32\xc6\xce\xc5\x04\x49\xd5\x7b\xa7\xbb\xb5\xb1\x72\x5b\x13\x6e\xba\xfd\x3d\x38\xf7\x3c\x87\xaa\x7d\xda\x6c\x5e\x71\x2c\x50\xc0\x76\xcd\xe9\xbb\x6d\x3d\x6d\x69\x49\xa5\x99\x90\x18\x01\x7a\x92\x8f\xa6\xd1\x74\xa1\xe0\xa9\x0c\xe4\x6e\x19\xf0\x51\xb1\x88\xe7\x25\xa1\x08\xd3\x8a\xd3\xcd\x62\x8b\x5c\x14\xdc\x36\x92\x0a\xce\x43\x36\x18\x03\x6f\xde\xaf\x79\xa3\xe7\x5c\x75\x6f\x30\xe6\x31\x4f\x66\x05\x2f\x1d\x7d\x5b\x27\x0d\xe5\x38\x29\xa9\x45\x14\xb5\x92\xc5\x8c\x98\x3d\x0f\xe8\x06\xd3\x7f\x7d\x81\xc4\x41\x1c\x5e\xad\xe6\x26\x7c\x93\x48\xaa\x13\x60\xe5\x60\x98\x51\xbd\x4e\x62\xb1\x4e\xf2\x51\x54\x96\xf9\x8f\x51\x3a\x4b\x78\x90\x06\x71\x18\xda\x36\x9f\x53\xde\xd2\x78\xb8\x2e\xba\x12\xb9\xae\x87\xdc\x46\xd3\x43\xf9\x5c\x5a\xcf\x3a\x02\x17\x46\x62\xdb\x2b\xed\x27\x24\x9d\x2d\xf2\x23\x2f\x74\x8e\x52\x26\xcd\x6a\x4e\xe3\x8b\x24\x4e\x2f\xd1\x1a\x33\xb5\x4e\x59\x7b\x9e\x51\x4b\x4c\x3c\x7f\xcf\x6b\x5a\x39\xe7\x9f\x0d\x7a\xe0\xa0\x8c\xe4\xb0\xed\xdb\x51\x0c\x31\xde\x5b\x30\xc6\xad\xa1\x5c\x6c\x2b\x57\x0d\xc7\x96\xd2\x54\x33\x49\x53\x6f\x5a\x55\x8e\x14\xc9\xf0\x69\x5b\x7d\xab\x2f\xf4\x43\x73\x74\xc1\x32\xec\xf5\xa1\x34\x61\x9a\xf9\x4f\x1a\x76\x5f\xda\xbf\xad\x6f\x5a\x05\x98\x0f\x45\x73\xfc\xb2\xfb\x18\x17\x2f\xac\x84\xaa\xb2\x53\x06\x8c\x0d\xb8\xeb\xc6\x62\x3d\xf7\x7d\x6d\xd5\x2e\xfa\x6c\xbf\xb3\xfa\x3d\xb3\xfb\xdd\xf2\x8d\x68\x04\x2c\x36\x2c\xc1\x7e\x85\xf7\xf0\x7a\x8d\xc7\xe8\xbd\x18\x84\xa0\xd7\x36\x94\x14\x22\x13\x89\xf9\x28\x12\x2b\x3d\x0d\x62\x96\x05\x51\x28\x88\xb9\x58\xe8\x6c\x40\x72\x73\x6d\x88\x10\x34\x4d\x8b\x96\xad\x3d\xaf\xd1\xf0\x06\x62\xd1\xf7\x31\x2a\xd7\xe5\xb5\xd1\x99\xa6\x2c\xe3\x23\xa5\x13\x62\xe8\x42\x97\xf1\x51\x5c\xfc\xe3\xed\x9b\x1e\xdb\x46\xee\xba\x84\x77\xf9\x3f\xa7\x46\x3d\xa2\xaa\xb2\x2d\x6c\x9d\x1f\x3f\xbc\x7d\xd3\x66\x2e\x35\x2c\xb0\x52\x5e\xea\x42\x7a\xf4\x35\x31\x44\x8c\x4f\x36\x2b\xf3\xaf\x8d\x7a\x4b\x0a\x1d\x4f\xd1\xac\xac\xd9\xcc\x51\xb7\x35\x13\x32\x63\x64\xc5\xa2\x8d\x66\xc2\x92\x0d\x32\xb2\xa2\x70\x2d\x4b\x22\x31\x5b\x8d\x54\xd4\xe8\x5f\x63\x7e\x4d\x5d\x37\x1e\x95\xd9\x6a\xc0\x98\x90\x7d\xe2\x51\x34\x9b\xbd\xbc\xe2\xd2\xcf\x98\xa7\x3c\x9f\x6c\x26\x11\x67\x9d\x26\x59\x34\x73\x20\xe7\x30\xf0\xa8\x1f\x0b\x8a\x15\x4d\x17\x98\x4b\x14\x68\x3d\x12\x27\x4b\x9b\xec\x94\x42\x8a\xe4\x0d\xb9\x4d\xc1\xd6\x7d\x92\xf3\x2e\x1f\x4d\xb5\x00\xc0\x9c\xd8\x81\x01\xef\xf0\x64\xf3\xda\xa1\xb5\x28\xb1\x6f\x05\x6c\x2d\xdb\xbe\x87\xd6\xdc\xe1\x79\xb6\x94\xdc\xc1\xa1\x54\x55\xb7\x29\xfb\x38\xf7\x1d\xcd\xd1\x37\x6b\x35\x22\x0b\xfb\xbb\xe4\xdf\xab\x6d\xc2\x8f\xfc\x52\xc8\x6a\x5b\x9a\xd8\xbe\x2a\xe7\x54\xc8\x70\xe7\x30\xe8\x14\x28\xcd\xb5\xfb\x52\xc9\x79\xb7\x99\xa2\xb2\x09\xc9\x47\xf3\x38\x29\x79\x3e\x7a\xfd\xa2\x6f\xdd\x1b\x46\xff\x57\xe0\xcd\xd5\x6a\xef\x10\x6e\x4a\x48\x82\xdc\xd5\x35\xe4\x88\xdf\xdf\xae\xa0\x0b\x65\xd9\x15\x7e\x5d\x77\xd9\xd0\xef\x8e\x30\xdb\xb4\x23\x9d\x04\x69\xe8\x07\x61\x5d\x53\xff\xbf\xdf\x13\x59\x5d\x9b\x86\x98\x1e\x49\x12\xbe\x99\x26\x7b\x6a\x1a\x24\x24\x5f\x69\x9b\xfc\x9f\xe8\xbb\x54\xdd\xf6\x8e\x80\x38\x49\x60\x31\x24\x65\xd9\x96\x56\x51\xbb\x35\x5a\xc0\x0e\x32\x69\xa7\x1d\xb3\xb2\x67\x95\x70\x8a\x67\xb4\x8c\xc5\xea\x78\xf6\x5f\xab\x41\x89\x8a\x38\x33\x7a\x0c\x3e\x3c\xfb\x81\xf5\xef\xca\xcf\xc5\x16\xee\x8c\x8f\xf5\xd1\xd6\xc3\x88\x8f\xc7\x82\x49\xb9\x29\xf9\x9a\x88\xa1\xdd\xa3\xaa\xbe\xfb\x32\x97\x23\x5b\x0b\x47\x63\xb6\xfb\xd2\xfc\xf2\x4e\x09\x44\x19\x5e\xc9\x1c\x51\x0f\x2d\xb2\x1b\x8a\x9c\x77\xed\xdf\x73\x2d\x42\x67\x66\x65\xa0\x32\xaf\x3b\x2e\xd6\x71\xe9\xeb\x96\x4d\xfb\x9b\x65\x13\x2c\x7e\xcb\x09\x8a\xd3\x1a\xae\x44\x6f\x6f\xc5\x3f\xf2\x1c\xd5\xd0\xa8\xee\xb8\xe1\x2d\x67\x87\x2c\x6d\xd2\xa3\x34\xe5\xb9\xe0\x79\xcc\x39\x8e\x76\xe3\x19\xfb\xce\x19\x9e\x0f\x9d\xef\x4e\x8e\xf7\xa3\x93\x63\xa9\xf9\x6a\x92\xf7\xce\xf2\xb3\xb3\xef\x76\x97\x45\x94\x24\xd9\xf5\x34\x5a\x95\xeb\x9c\xb3\xef\xbe\x3b\x39\xce\x56\x4a\x9c\x97\x4a\x79\x4c\xdb\x97\x89\x27\xc7\xfb\x32\xf9\xc4\x01\xbe\x39\xbb\x4e\xd0\x2e\xee\x23\xfb\xee\xbb\xd0\x50\x67\xd7\xbd\x55\x51\xb1\x83\xfb\x1f\xef\x85\xac\xd1\x8f\x7f\x57\x9d\x39\x67\xa8\x39\xed\x2d\x54\xb7\xa4\x29\xaa\xaa\x74\x51\x8d\x26\x7e\xe2\xe3\x36\xa8\xa4\xfa\x71\x5b\x59\xf1\xec\xdf\x4c\xf6\xbf\xaf\xb4\x7f\xb3\x2d\xdf\xf9\xea\xaa\xa2\xe7\x9b\xe6\x55\xef\x97\xd1\x5f\xb0\xba\xe1\xfd\x9e\x4f\x47\x7f\x19\x0d\x83\xe1\xbf\x43\xe4\x97\x9d\xe9\xe5\x9d\xf9\x5c\xe4\x7c\xce\xbe\xfb\x6e\xd7\x88\x86\xdf\xe9\x5f\xed\x09\xee\x7d\x2f\x67\x6f\xdf\x9a\xbe\x9d\x2d\xe7\x30\x29\x8a\xd3\x9d\xee\x31\x5a\x48\xe1\x0e\x38\x26\x98\x4d\x9b\x61\x97\xb4\x93\x5d\x06\x93\x75\x5e\x6c\x9b\x06\xf1\x9e\xcd\xfa\xd6\x06\x7e\x29\x35\xc3\xe6\x2a\xc5\xa1\x70\x80\xfc\xa0\x67\x62\x78\x8a\x9d\xec\x29\xc9\xbc\x02\xc7\xd7\x63\xe1\x50\xd8\xd8\x37\x66\xc4\x06\xe3\xed\xd5\x34\x05\x7c\x6d\x3d\x7d\xc5\xdc\x07\xff\xc6\xa1\xa0\xbf\x84\xd1\x7d\xdf\x41\xe4\x78\x92\x8e\x30\xdc\x01\x2f\x74\x7e\x4d\x0c\x2e\xd9\x4c\xbf\xaa\xaa\xd9\xe8\x9a\x5f\x7c\x8a\xcb\xb7\xed\xbc\xe2\xc5\x32\xfb\xb3\x27\x35\xeb\xcb\x59\x74\x12\x05\x75\xe9\xac\x3e\x44\x29\x98\x66\x69\x8a\x1b\x0f\xf3\xb3\x4b\xed\xf1\x87\x77\x2f\xcd\x53\x50\x0c\xc4\x3e\xc7\x9e\x5d\xa9\x9e\x0d\x98\x03\x7f\x8a\x55\x7d\xcb\x6e\xcd\x80\x59\xba\xf0\x5b\xa5\x5b\xa9\x84\x64\x77\xc5\xae\xfa\xf2\x5c\xd9\x79\x4a\x3d\x1e\x33\xb4\x6b\x8e\x72\xae\x25\xf3\x9f\xb3\x22\x16\xcd\xa6\x70\xc1\xca\xaa\xb2\xb2\xa5\x65\x14\xa7\x05\x9d\xf4\x19\x25\x3c\x6d\x1d\xcc\x27\xbc\x2b\xa1\xfb\xe2\x00\x5f\xb6\x55\x0a\x3b\xd6\xad\x6a\x5e\x55\x03\x32\xc8\xa5\xf6\x32\x37\x05\x89\xd4\xd4\x54\x3d\x69\x7e\x92\x9c\xfa\x7c\x5b\xd3\x5d\xd7\x7b\xe4\x6e\x7d\x8b\x26\x43\x5d\x7e\x19\xcf\x49\x29\xd5\x01\x25\xb3\xdb\x88\xf2\x42\x69\xc9\x02\x83\xf1\x8e\xd1\x9a\xc0\x27\x56\x4e\x36\xca\xe1\xf6\x0d\xed\x5c\xec\x82\xb1\x82\x3d\x1b\x6c\x6d\xd3\xde\xa0\xdc\xf6\xca\xb0\xda\xaa\x22\x9e\x4b\x72\xd6\x77\x6e\x93\x2e\x8e\x5d\x75\x2e\x9d\x6c\x1f\x84\x92\xfa\x1e\xad\xaa\x81\x34\x48\x7b\xc1\xc5\x51\x86\xcf\xa4\x09\x4f\xff\x17\x58\x4b\x3e\x11\xdd\x5b\x55\x55\xa7\x11\x8c\xb1\x6b\xd7\xbd\x20\xd7\xc0\xe9\x64\xcf\xf3\x4b\x99\xab\xdc\x96\xab\xa4\x13\xcf\x9f\x4e\x7e\x27\x53\xe0\x74\x4f\xfc\x29\xa9\x3f\xf6\x1f\xb8\xb9\xf8\xda\xeb\x9b\x9f\x6d\xe3\x9a\x1a\xc3\x92\x66\xda\x50\xe0\xb1\x1e\x23\x8c\x0f\x51\x30\x65\xe0\x3f\x88\xab\x6a\x60\xd4\xc5\xd8\x23\xd3\xe8\x89\xe7\xc7\xe2\x21\xeb\x6b\x20\xfa\xc5\xd8\xaa\x66\xa5\xa8\xda\x51\x96\x45\xa8\x4c\xb2\x57\x4f\x34\x5a\xa7\x52\xcd\x97\xea\x4c\xe5\x46\xa6\xa2\x9b\xe9\x28\x0a\xf2\x90\x31\x56\x04\x79\x78\x44\xf3\xe1\xd0\x2c\x82\xc9\x94\x13\xf1\x12\xc4\x2b\xea\xab\x7c\xd7\xa2\xc1\x85\xfe\xed\xf9\xe3\x1a\x56\xd4\x5f\xd5\x90\x71\x4d\xec\xfa\xef\x8f\xf0\x4a\x02\x9d\xf9\xa4\x47\x1f\xb5\x3f\x31\xa4\x73\x63\x2a\xfa\x96\xa0\xbe\x38\x40\x14\xd6\xd2\x1c\x4e\x7e\x03\x87\x7d\x77\xcf\x13\x72\x0b\x6c\x10\x65\xd7\x5d\xa2\xb2\xbb\x34\xca\xee\xab\xaa\x1a\x5c\x49\x92\x53\x4a\x5b\x34\x4b\xfd\x5d\x52\x8a\x3a\x61\xb9\x9b\x0c\xc5\x2c\xa5\x43\x65\x55\xf5\x50\x59\xb1\x50\x35\x29\x52\x97\x21\x4d\x82\x21\x33\x46\x2d\x68\xe9\x46\xeb\x66\x88\x4a\x58\xc9\xf1\x09\x78\x48\x0d\xea\x2e\x0e\x95\xa6\x47\xbd\xc3\xfb\x85\x61\xba\x50\xf6\xd6\x19\x47\x65\x41\xa7\x88\xcf\x7f\xbc\x63\xbc\x4d\x1a\x2d\x6a\xc7\x84\x26\x84\x8c\xc5\xae\xfb\x56\x0e\x93\x9d\x13\x3a\x39\xe9\x24\xc6\x9b\xa9\xc1\x52\x1f\x27\x76\xba\x47\x96\x6c\x92\xf9\xb6\x4e\xa3\xaa\x06\xcb\x49\xe7\x88\x5c\x52\x9f\x64\x3d\xa7\x4c\x39\x93\xd9\x08\x63\x0d\xcd\x63\x3e\x9b\x28\x98\x05\x1f\x55\xc8\xa2\xff\xbc\x98\x46\x2b\xde\x63\xf2\xdf\x31\x90\x93\x97\x12\xf2\x93\x3c\xcf\xda\x90\x54\x1b\xae\x1a\xa7\xb7\x69\x19\xdd\xec\x62\x4e\xd8\x5d\xa7\x39\x9f\x66\x97\x69\xfc\x27\x9f\xed\xf2\x9b\x55\xce\x8b\x22\xce\x52\x7f\xd7\x19\xaa\x22\xd7\x69\xfc\xc7\x9a\x9f\x66\x79\x9f\x1a\xcb\x3a\x4b\x21\x19\x98\xb3\x41\x3a\x9a\xf1\x92\x4f\xcb\x17\xeb\x55\x12\x4f\xa3\x92\x17\x30\x65\x8a\xa2\x9e\x96\x42\x70\x41\x8d\xb4\xbc\x90\x15\x12\x8c\x78\x41\x3e\x51\x98\x6b\x07\x61\xc6\x31\x94\xd8\x11\x45\x16\x13\x64\x21\xea\xae\xd4\x31\x2b\xa3\x8a\x1a\xa0\xc2\x9c\x2b\x5b\x61\x54\x1e\x82\x67\xdc\x8b\xa6\xd2\x19\x97\xd7\x10\xb3\x0c\x07\xff\x03\xbf\xe9\xeb\x40\xca\x1c\x07\x49\x65\x66\x71\xea\xe6\xd8\x2d\xce\x7a\x59\x55\x3d\x95\x7f\x3c\x7c\x94\xee\x6d\x1b\x16\x84\xe8\x11\x81\x36\x08\x69\x03\x82\x60\x27\x62\xb3\x39\xe3\x23\xb4\x37\x40\xc9\xf0\x88\x1f\x71\x85\xa7\xa1\x14\xed\x34\x1d\xa2\x95\xa9\xb9\xea\x3b\x94\x55\x3f\xb0\xe9\xab\x6c\x29\x62\x2e\xd6\xc6\x7a\x0e\xc7\x4d\x9e\xe6\xb1\x8c\x26\xe6\x5a\x5a\x03\xc9\xa5\x4a\x52\x52\x98\x82\xdd\x59\xb7\x2f\xfe\xc3\x31\x48\x01\xfd\xe7\x82\xaf\x67\x99\x5f\x70\x19\x16\xcb\xff\x01\x9a\xed\xe1\xdf\xa1\x07\xdc\x4c\xfc\xcd\x79\x82\xc6\x0a\xfe\x9d\x73\xe2\xf8\x9b\x37\xd8\xd2\x7a\x7d\x30\xae\xc1\xd9\xed\x79\x5f\x83\x33\x34\xc9\x39\xbf\x8a\xb3\x75\xa1\xba\xdf\xfa\xf6\xdf\xdb\x32\xd5\x35\xac\x72\xfe\x0a\xf5\x40\xfe\x1d\x5a\xba\xf4\xe9\xaa\x02\x2f\x44\x2c\x8f\xb6\x4e\x08\x78\x70\x18\x32\x22\xfe\xad\x2a\x1e\x3c\xc0\x7f\x1f\x86\x55\x65\x6f\x29\x99\x53\x1c\xd5\x70\x09\x1e\xc8\x18\x87\x87\x21\x73\xc4\xc6\x08\x0e\x43\xbc\xc5\x82\xc6\xb0\xe0\x01\xad\x95\x09\xcd\x67\x5b\xd2\xa2\x30\xe0\xa4\xe5\x42\x56\xe0\x85\xa6\xa4\x43\x3a\x51\x8d\xd3\xfb\x99\xf0\x60\x1c\x8a\x76\x3f\x08\xd9\x90\x88\x3f\x13\xd1\x62\xf1\xf3\x51\x58\x55\x1e\xf5\x0f\xee\x13\x87\x5f\x71\xe9\x14\x89\xdf\x3a\xd9\x6c\xa6\x9f\x30\xbc\xe2\x43\xf9\xed\xe3\x70\xc8\x83\x27\x1b\x19\x7c\xf1\xc7\x75\xbb\x35\xd6\xda\x5e\xa8\x6f\xe3\x0c\x44\xf5\xae\x2b\x46\x47\xaf\xb4\x1f\x46\x38\x06\xea\x16\x53\x94\x31\x11\xfb\xd0\xc7\x0e\x4d\x44\x4e\xd6\x1e\x71\x3f\x75\xdd\x5f\x65\xf6\x14\xdd\xd6\x59\x44\x52\x0c\xb5\xa8\x82\x45\xe9\x10\xea\x0e\x75\xcc\x7d\xc2\x5e\x49\xf7\xf4\x6f\x8a\x13\x33\x16\xe5\x8e\x9b\x31\x2c\x45\x8f\x0f\x42\xed\xe6\x85\x29\xf6\x6c\x1d\x52\x5a\x8b\xe5\x2c\x17\xd0\x87\x67\x3f\xf4\x78\x49\x74\x54\x89\xbd\xb7\x4a\x4a\x45\x34\xd9\xf0\x81\x18\x8c\xfb\x63\x73\x9a\x4b\x02\x41\x03\xfb\x2f\xac\x94\x4a\x51\x9a\x7f\x6d\x36\xeb\x54\x5d\x82\x1b\x57\x0d\x8c\xbf\x65\x5b\x00\x91\x8f\xc6\x84\x8d\x0f\x1d\x69\xf6\x53\xdd\xa3\xa8\xc6\x3b\x25\xbc\x17\xca\x49\x4e\x41\x0f\x51\x9b\x36\xfa\x26\xeb\xc1\x8e\x09\xd6\xe2\x6c\x5d\xdd\xa9\xd2\xd7\x3b\x14\xb7\x57\x4d\x6b\xe8\xec\xd6\x96\x35\xb5\x49\x36\xb0\x83\x4a\x0a\x20\xb9\xe5\xf1\x23\x6d\xae\xe3\x89\x38\xff\x89\xc1\xf2\x07\x62\x0c\xe2\xa1\xa0\xe4\x8e\x4c\x9a\x08\x71\x34\xf5\x75\x8e\x49\x3c\xc0\xc7\x8f\xea\x31\x75\xdd\x31\x22\x28\xe9\xd5\x95\x52\xdf\xb9\xdf\xbc\xb4\x5f\x9c\xec\x79\xbe\x73\xcf\x7e\x27\x17\x51\xb3\x02\x65\x55\xff\x56\x59\x88\xa0\x10\xb1\x59\x3b\x3f\x0a\x12\x88\x86\x44\xb4\x5b\x68\x25\xbf\x40\xe6\x86\xb7\x92\xb1\x59\x9f\xba\xec\xa1\x87\xa5\x0f\x9d\x3d\x07\x57\x6c\x97\xc2\x40\x07\x8a\x04\x09\x0a\x4e\x4a\xb3\xd2\x21\x62\x4e\x12\x15\xa5\x9d\xbe\xf7\x80\x42\xc1\x1c\x65\xb9\x87\xcd\xd0\xa3\x2b\x58\x5c\xae\xc6\xa7\x27\x08\xed\x60\x60\x9f\x28\xac\x45\x2e\x5a\xb2\x96\xed\x68\x59\x1f\xb3\x6c\xc0\x58\x34\x71\x2c\x1e\xe7\xf4\x90\xfd\xdb\xf6\xd1\xe4\x8a\x15\xe2\xd4\xd5\xbf\x43\xe0\x92\x0d\xd6\xae\x3b\x28\xe0\x82\x0d\x3c\xc1\xac\x6f\x91\x27\x67\x4a\x80\x58\x1e\xc9\x1f\x0b\x56\x1e\x2d\xd8\x22\x58\x4a\x05\x77\x31\x59\x6c\xdf\x72\x57\xbe\xe8\xf8\xa2\x2b\xfc\x0e\xbc\x9d\x19\x5b\x32\x27\x4b\x13\x74\xc4\xe3\xae\x3b\x98\xb9\x6e\xab\x37\xb5\xd9\xf2\xf1\x9c\xcc\x58\x10\x4d\x6e\x2d\x16\xef\xdf\x8e\xc4\xe8\xe3\xef\x10\x22\xd7\xbd\x94\x8d\xbb\x60\x64\xc5\x48\xc2\xc8\x94\x91\x39\x23\x0b\x76\x4b\x83\xf3\xb0\xaa\xc8\x22\x38\x0f\xd9\x5d\x4d\x69\xb0\x50\xb2\xd7\xeb\x17\x22\x7d\x6e\x3f\xcb\x0c\x3c\x44\x40\x4d\x41\xfe\xd0\x0a\x29\x09\xbc\x90\x8a\x3f\x07\x21\x2c\x84\x50\x7c\x6b\xd9\x81\x05\xab\xf0\x68\xc1\x86\x43\x21\x2b\xbb\xae\x18\x95\xaa\x22\x17\x6c\xc5\xc6\xb4\xaa\x66\x12\x83\x05\xc7\xa9\x3d\x10\xae\x3b\x1c\x5e\xb8\xee\x42\x22\xaf\x4d\x03\x1e\xb2\xe0\x25\xac\xe0\x22\xd4\xf0\x05\xb6\x51\x92\x28\xcf\xee\x54\xf9\x1f\xea\x14\xe0\xad\xfa\x85\x54\x46\x90\x2f\x75\x43\x30\x85\xcf\x4c\xf7\x00\xa7\x7b\xd0\x9a\xee\xaa\x1a\x0c\x87\x17\x55\x85\xbd\x90\xcd\x5f\xfc\x17\x9a\x2e\xc6\xe6\x22\xa4\xb0\x18\x88\xe1\xa2\x47\xf4\x48\x49\xec\x17\x7b\x2c\xa6\x52\xa5\x73\xf1\xbf\x72\xc6\xc6\xae\x7b\xb1\x9f\x9f\xb0\x71\x5d\xf7\x30\xd9\xe6\xb2\x02\xe5\x5e\x14\xcb\x0a\x1c\x19\x44\xc3\x95\x92\x4f\x11\x74\xfa\x65\x8b\x0c\xce\x3a\x55\xb7\xde\x7c\xb6\x2b\x0b\x90\x32\xbd\xde\xe7\x71\x70\x1e\x4e\x84\x94\xe8\xc7\x0d\xbe\x3b\x49\x59\xc0\x81\x83\xe3\x40\x19\x82\x5d\x57\xc7\x9e\x9f\x74\x4d\xa8\x26\xb6\x39\x00\x6f\xf9\xa2\x88\x13\x17\x76\x69\xc3\x08\x80\x07\x39\xfb\x9d\x70\xc8\x82\x28\xa4\x21\x1b\x90\x54\x9c\xd6\xf1\xa9\xa6\x5b\x42\x38\xc0\x18\x52\xf1\x36\x16\x42\xa0\x1c\x18\xff\x2e\xcd\x4a\xbf\x68\x2b\x17\x35\x5a\x11\x28\xb7\xf0\x62\xd3\x9c\xa9\xb9\xb0\x11\x63\xd1\xee\x80\x20\x67\x71\xd3\x89\x0c\x22\x96\x6b\xad\x40\x0c\x41\x88\x20\xeb\x2d\x1b\x2f\x92\xb1\x28\x28\x42\x29\x90\x14\xa2\x37\xa5\xf8\x93\xd1\x76\x5f\x00\x41\x6c\x35\xdf\x45\xc9\x05\x72\x41\x3d\x45\xc9\x19\xa4\x14\x30\x11\x1f\x07\xa9\x5c\xcf\x75\x4d\x61\x11\x15\xdd\x2e\x6e\xb5\x4d\x51\x46\x95\xd6\xa9\xbc\xa6\xa0\x0f\xe5\x5b\x4a\xe1\x5d\x81\x07\x36\xcb\x25\xa5\x7d\x9e\x41\xe3\x93\x34\xe5\xb9\x38\x5a\x61\x6c\x6b\xda\xf0\x38\x2e\x78\x9c\xa8\x36\x89\xd2\xcb\x2d\x55\xfe\x53\xc9\x89\x28\x1b\x6c\x5b\xbb\xf8\x3d\xae\x5c\xd8\x68\x62\x87\x2d\x6c\x18\x05\xed\xcc\x32\xc4\x8a\x64\xcb\x49\x39\xc2\x82\xba\x16\x7e\x37\xcb\xc4\x17\x2f\x44\xfd\xdd\x77\x32\x5d\x31\x02\x92\xb2\xb4\xb3\xe4\xa5\x01\xce\x18\x6f\x03\x4d\xb7\x91\x55\xd7\xd7\x8b\x38\xe1\x84\xb4\xb5\xa6\xb4\x6b\x99\x45\x1b\xa5\x69\x4d\xa1\x8c\xf2\x96\x67\xb5\xd1\x22\xf3\x51\x92\x4d\x23\xa9\xc2\x6d\x7e\x8b\x0d\xb9\x68\x5d\x48\x6b\xf8\x27\xac\x23\x9e\xd5\x90\x67\x59\xaf\xa7\x36\x67\x8c\xcd\x6a\x40\xef\x97\x6d\xef\x57\xa3\x08\x83\x8d\x29\x4d\xb5\xeb\x92\xc1\x4a\x54\xf9\x0a\x5d\x66\xaa\xe6\x37\x52\xdb\xc1\x80\x68\x08\x17\x3e\x5a\xe4\x7c\x5e\x55\xff\xe6\xa3\x32\xba\x40\x23\x33\x74\x14\xc6\x1b\x0b\x7f\xc5\xc9\xc0\xa3\xa0\x6f\x30\xf0\x79\x4c\x41\xdd\x6e\xf5\x4a\xe1\x9f\x35\xeb\xb2\xac\xc9\x44\x2b\xf8\x48\x7b\xfb\x54\x8e\xbc\x8e\xb2\x5e\xe9\x1b\xbe\x1a\xf4\xaf\x7e\x11\xdd\x36\xe6\xb2\x9f\x4c\x01\xd8\x29\x50\x46\xde\x4d\xa9\x7c\xb9\x2a\x37\x83\xf1\x7e\xf1\xc0\x8f\x28\xa5\x7a\x49\x1c\x3f\xea\xf3\xf1\x94\x6d\xe8\x69\xed\xc0\x30\x87\x11\xd6\x8e\x37\xbe\x0b\x1e\xcd\x78\x6f\x64\xe8\x7b\x6a\xc3\x99\x31\xa5\x35\xe0\x00\xf6\x65\xfe\x5b\x4f\x66\x69\x36\xf7\xdf\x9c\x26\xcb\xf8\xce\xe0\xfe\x34\x49\x65\x0d\xe8\xc5\xb1\xe9\x07\xdb\x2d\x6a\x5b\x9d\xae\xeb\x94\x0a\xd5\x45\xc3\xf9\x10\x79\x66\x20\x25\xeb\x1e\x4f\x50\xfe\x45\x9f\x5e\xfd\x4d\x57\x0d\xa8\x9d\xf1\x67\x7c\x33\x86\x4e\x30\x0e\x91\xc4\x75\x5e\x5b\xda\xce\xa0\xdc\xf3\x44\x1e\xfe\x47\x37\x47\x73\xee\x09\xd2\xe3\xf1\x24\x1d\x96\x7e\x8a\x39\xaf\x78\xba\x59\x9a\xe5\x06\x77\x94\x1e\x97\x47\xe9\x90\x1d\x50\xde\xb5\x3c\xe0\x35\x85\x6c\x36\xfb\xdc\xe7\xde\x17\x3e\x4f\x36\xba\xd2\x76\x2c\x35\x6d\x3d\xda\xdb\x13\xf2\xcb\x91\x2e\x26\x6f\x15\x73\xf9\xd5\xc5\x0c\x87\xf9\x71\xd9\x5f\x4a\x5d\x53\xb3\xbe\xd3\x72\xc1\xac\xd5\xfe\x07\xdc\xe5\xd1\x2c\xce\xfc\xc1\x58\x52\x8f\x8b\xec\x46\xfc\x9e\xc7\x32\xc4\xfd\x2a\x2a\x8a\xeb\x2c\x9f\x89\xdf\xf1\x32\xba\x44\xd0\x13\xda\xc8\x52\x65\xc8\xe6\x9c\xa8\x3b\x8a\x72\x37\x4e\xef\x8a\xf5\xc5\x32\xc6\xa0\x18\x12\x26\x70\x23\xff\x42\xe6\xd7\x56\x89\xb7\xbc\x0d\xcf\xcd\xdb\x68\x4b\x63\x68\x39\x44\x38\xce\x51\x79\x9c\x1e\x95\xc3\x21\xcd\x87\xe8\xd3\xdf\x86\x86\xce\x9b\x92\x2e\x79\xdb\x1b\xa7\x1c\xcd\xe2\x1c\x62\xc1\x38\xf8\x4d\x29\xa4\xa9\xaa\xca\x21\x62\xa9\xeb\xda\x5a\x35\xc6\x58\x06\x05\xbb\x69\xee\x45\x4a\x49\x78\x26\xad\x33\x5a\x6c\xb4\xac\x25\xde\xa3\x28\x81\xbf\xb4\x6e\x17\x23\xa3\x67\x54\x5f\x34\x7c\xea\x73\xe7\x3d\x21\xfb\x16\x78\x93\xb4\xde\xac\xa3\xa7\x12\xd7\xe5\xaa\x14\x73\x8b\xd8\xd2\x66\x7e\xa6\x7d\xf1\x5c\x8a\xe8\xa5\x14\xd1\x4b\x23\xa2\x97\x1d\x11\xbd\x6c\x8b\xe8\x10\xbb\x6e\xfc\x19\xd3\x63\x2a\x6b\xad\xaa\x72\x47\xbb\x48\x90\x84\x4d\x83\x4c\x1e\xab\xec\x23\x09\x63\xac\xd0\xe3\xb4\x08\x0e\x42\x26\x4e\x5d\xa2\xf3\x22\x37\x5b\x00\xa6\x6d\x76\xb0\xe1\xf8\x66\xbe\x2f\x5a\xe6\xad\x8d\x30\xde\x1a\x6a\xdb\xbe\xb6\x11\x3c\x51\x07\x8e\xd8\x4c\x41\x1c\xaa\x7c\x3d\x0c\x44\x62\x1d\x9b\x0a\xcf\xb9\xad\x39\xb0\x45\xdc\x20\x84\x82\x8d\x61\xdd\xac\xdc\x84\x49\x77\xec\xd2\x40\x58\x90\x8c\x71\x25\xe7\xa6\xae\x3b\x48\x49\x86\xe5\x54\x15\x89\xb4\x86\x1e\x12\xbc\xd3\x16\x0f\x05\xb5\xb1\x21\x4c\x13\xae\xad\x26\x58\xf2\x70\xee\xba\x03\x21\x8c\x23\xec\xff\x35\x27\x39\xc5\x29\x1b\xc4\x32\x2d\x16\x69\x22\x3f\x6d\x59\x1f\x2b\xaf\xe7\xce\x62\x0c\x61\x25\xfe\x99\xb1\x48\xf7\x65\xc9\xb2\xaa\xda\x4e\x92\xc6\xb8\xc7\x8c\x1f\x7e\x8c\x7e\xf8\x52\x92\x0e\xf2\xd0\x0a\x64\x97\xd6\xa4\xac\x2a\xe7\xbe\x03\x45\x73\xb9\x1f\x14\xa1\x5f\xe0\xc1\xe0\x96\x0d\x78\x55\x0d\x32\xd7\x2d\x27\x4b\xff\x9c\x93\x25\x2c\x80\x63\x0b\xe1\x8a\xa5\x93\xb8\xaa\x48\x36\xe1\xfe\xac\xaa\x72\x3a\x09\x42\x3f\xf2\x6f\xd1\xf2\xde\x75\x53\x72\x0b\x57\x32\x67\x8e\x67\xdd\x84\x9d\x73\x72\x05\x2b\x0a\x39\x49\x40\x4c\x8f\x78\x37\x65\x3a\x06\xdf\xd1\x14\x8f\x1e\x73\x96\x04\x53\x9c\x92\xab\x60\x15\x4c\x43\x71\xfa\xb8\x55\xbf\xe6\xd4\x32\x23\x8c\xab\x4a\xa2\x79\xa9\x89\x4f\xc4\x10\x4d\x8d\x69\x84\x29\xee\x4a\x16\x97\xc8\x49\xbc\x0d\xa6\xa2\x9c\x9d\x18\xf9\xa8\x34\x29\x4b\x60\x2d\xc3\x64\x6c\xff\x9a\x24\x2c\x9e\xfc\x4e\x32\x98\x53\x7f\x21\x92\x4e\xf6\x3c\x84\x87\x4a\x44\xfb\x22\xf1\x67\x4e\xa9\x52\x20\x5c\x61\x4f\x19\x63\xd1\xe4\x4a\x5f\xea\xcc\x40\x17\x4d\xfd\x2b\x0a\xf1\x44\x35\x20\x82\x2b\x58\x53\x5f\xbb\xbf\x44\x70\xd5\xb2\x17\x7f\xc9\xbb\xf1\x0c\xe3\x36\x10\x42\x3e\xd2\x37\x18\x01\xaa\x8d\x85\x10\x80\xb8\x9e\xe2\x7c\x6d\x5e\x39\xbb\x4e\x08\x6b\x16\x4d\x3c\x7f\x0c\xd3\x7e\x4f\x3f\xe9\xfc\x5e\x43\x01\x42\x8c\x9d\x6f\xc9\xf4\x3b\xc6\x2d\x10\x07\x22\x95\x71\xc1\xec\x60\x32\x56\x98\x95\x41\x24\x96\x7e\x55\xa5\x03\xc6\x12\xb1\xa7\x48\xc9\x52\xda\xac\xb2\xa9\xca\xee\xcf\xd5\x8f\x06\xb2\x47\x1e\x19\xe3\x3a\x3c\x5a\x1f\x67\x47\x6b\x05\x36\xd3\xee\xeb\x5a\xf5\x95\x2e\x58\x70\xc9\xc9\x05\x27\x0b\x0a\x29\x0d\x1b\x6a\x27\x3e\x90\x7a\x71\x2b\xbb\x1a\x67\x79\xa5\x26\x52\xd5\x8d\x35\xa5\xc1\x79\x28\x47\x3a\x66\xc3\xe1\xfa\x28\x3e\xce\xc4\x0e\xb6\xab\x8c\x55\x19\x08\x3b\xa1\xb4\x21\x62\xfb\xaf\x4f\x3c\xd7\x95\x0d\xc0\x9f\x82\x7f\x1a\xad\xe5\x7a\xcf\xa3\x0a\x97\x8d\x28\x18\x6e\x67\x57\xde\x56\xac\xf7\x0e\x64\x89\x13\xe7\xbe\xe3\x3b\x4e\x6d\xc1\xc7\x68\x37\xa5\x14\xd6\xc7\xb1\xeb\xbe\x6c\x8a\x5c\x43\x2c\x48\x89\x68\x9e\x48\x35\x8a\x50\x93\x8a\xec\x9b\xd6\x0b\x2d\x12\xe9\x8b\x44\x6c\xa1\x01\xfe\xb6\x91\xa9\xf5\x38\x15\x8d\x58\xd2\xd2\x98\xa0\x4e\xfe\x96\x43\xc4\x32\xc1\x65\x3e\xf1\x34\xfe\xb3\xeb\xb0\xaa\x74\x3c\x36\x6e\x03\x7b\xa7\x15\xfc\x82\x97\x18\x13\xcf\xc9\xd8\x9f\x9a\x4b\x53\x14\x5a\x0a\xc6\x61\x8d\x3b\x51\x34\x40\x5f\x87\x1d\x15\x4a\xf9\x19\xa1\xf7\x83\xeb\x0e\x48\xcc\x7e\x91\xae\x89\x05\x45\xac\x20\xd7\x25\x05\x2b\xf4\x00\x88\xf5\xaf\xf6\x58\x55\x15\x14\xd6\x8a\x88\xb3\x20\xa4\x14\x52\x36\xf0\x80\xc4\xec\x0f\x53\x82\x20\xfb\x2c\xd6\x5e\x5a\x90\xc9\xec\x6a\x92\x52\x40\xc8\x39\x2c\xd4\x9a\x94\x5d\xb4\x3d\x6c\x2a\x35\xaa\x73\x69\x35\x2c\xda\x4d\x45\x3b\x7f\x08\xa2\xd0\x6a\x6a\x12\x44\xa1\xec\x80\xf8\x25\xe6\xaa\xaa\xbe\x5c\x79\x04\x6a\x75\xfa\xf1\x96\x4a\xd1\xd8\x25\x95\xc8\x34\x26\x38\xc5\x44\x3b\xca\xfa\xc5\xa4\xb9\x06\xa3\xfe\x3b\xc2\x61\x4d\xcd\xd0\xd7\x50\xb0\x4c\x1a\x10\xc5\xc9\x96\xe9\x14\x93\x92\x49\x5e\xfa\xcc\x9a\xcc\x41\x21\x67\x46\xde\xd8\xa0\x93\x20\xa4\x0d\xc7\x49\x91\x78\x16\xec\x25\x27\x65\x90\x86\xb8\xb7\x26\xb1\xe6\xa2\x7e\xa6\x7f\x1d\x91\x82\x3d\x6b\x5d\xe3\x58\x3e\x61\x46\xe3\x63\x61\xca\x9c\x8c\x21\x63\x5d\x66\x09\x0a\x86\x76\x0e\x33\xb8\x85\x2b\x36\x86\x4b\xe6\x8c\x1d\xb8\x60\x99\xeb\x06\x21\x9c\x8b\xf6\x5f\xb3\x04\x6e\x04\xd3\x8c\x5d\xb7\x31\xef\x26\x82\xf3\x4d\x29\x9c\xb2\x97\x43\x26\x0f\x56\xd7\x13\xcf\x6f\x41\x3a\x55\xd5\xc8\x83\x77\xec\x46\x35\x01\x17\xec\x54\x02\x6b\x49\x1b\xa8\xa8\xaa\xa6\xf4\xe8\x72\xc0\xd8\x3b\xd7\x55\x88\x2f\x73\x76\x13\x5c\x86\xf4\xe8\x72\x38\x94\x3c\xca\x75\x95\x4d\xc0\x8c\x8d\x21\xaa\xaa\xf9\x86\xe1\xd4\xaa\xaa\xc8\x82\xcc\xc5\x3c\x0f\x96\xf4\xe8\x96\xf1\x60\xa6\x0d\xda\x6f\xc9\x5c\x7c\xb4\x82\x82\xd2\x3b\xb5\xac\xe7\x54\x69\xad\x45\x63\x5e\xb2\x53\x5a\xa7\xae\x4b\xc8\x9c\x0d\x6e\x45\x65\xae\x7b\xb5\xb7\x07\x19\x46\xaa\x93\xd9\x29\x3a\x5d\x0e\xd9\x25\xa4\xae\x2b\x9a\x7b\x65\x5a\x74\x74\xcb\x4a\x55\xdb\x2d\xb9\x80\x73\x31\xb0\x16\xab\xbd\x3a\x19\x4b\x75\xf5\xa5\x98\xd8\x8b\xe0\x32\xac\xaa\x73\xfc\x97\x88\x3f\xec\xb9\x34\x41\x59\x53\xba\x73\x2e\x78\xdf\x39\xad\x35\x43\x5b\xc3\x39\x85\xa9\xeb\x0a\x19\xe2\xdc\xcc\xa2\xeb\x5e\x19\xd8\x20\x41\x31\x5b\xb6\x19\x64\xdd\xd8\x3e\xc8\xae\x41\xc2\xae\x29\x5c\xd4\x8d\x17\x45\xc1\x49\x46\xfd\xac\x26\x99\xa0\x86\xd4\x98\x03\x30\xae\x3f\x2d\x6a\x58\x37\x86\x02\x6c\x53\x1f\x2a\x05\x45\x03\x30\xb3\x2d\x1e\x01\x86\xaf\x77\xdd\x88\x70\xb6\x30\xd5\x08\xd1\x03\xe5\x1c\x96\xa2\xab\xb6\x87\x6a\x26\xb5\x29\x91\xf9\xac\xd9\x4a\xc8\xd8\x2b\xeb\x2a\xd7\x38\xd2\x9e\x1c\xb8\xae\xf3\xfa\x05\xc6\x2d\x48\xd8\x3a\x18\x87\x54\x1d\xee\x9f\x76\xdc\x1d\x97\x62\xb1\x1a\x0e\xb4\xc6\x6b\x77\x64\x7a\xd2\x05\xbb\x64\xc4\xb8\x6b\x90\x44\xb3\x32\x9b\x62\x49\xf5\x67\x49\xf5\x3d\x44\x13\x7b\x62\x67\x81\xd7\xd2\x2d\xad\x1e\x34\xdc\x64\xad\x29\x93\x3c\xdb\xe9\xbe\xa1\x98\x94\xb1\x1f\x46\x36\x4c\x85\xf6\xf4\x9d\x8c\xfd\xb5\x81\x4c\xda\xdb\xc3\x3d\xb2\x0e\xb2\x10\x6c\x36\x8a\x08\xa4\xd8\x07\x79\x98\x9a\x33\xd9\x05\x25\x67\xc5\x6c\xfe\xb9\x9e\x28\xaf\xe2\xb5\x16\x75\xfa\xbd\x8b\x95\x17\xf5\x5a\x0b\x5f\x19\x78\x14\x06\x84\xb3\xd8\xd8\xcd\x5e\x71\xb1\x5c\xbb\x2e\xdc\x62\x61\x40\xaa\x6f\x83\x94\xba\x74\x51\x55\x05\xe1\xb0\xa2\x94\xc4\x68\x44\x05\x29\x0c\xca\xaa\xfa\xbc\x87\x33\x42\x6e\xd9\xa6\x42\xec\x5c\xbb\xcb\x3a\x54\x1b\x0a\x29\x8b\x5d\x74\x3c\x3a\x87\x4d\x73\x23\x36\x18\xcc\x61\x41\x28\xb4\xad\x38\xb7\x78\x5c\x79\x9f\xb1\x89\xfd\x8c\x03\x71\x8f\x31\xbd\x39\xc1\xf5\xd9\xd4\xff\x45\x1a\xd0\x3b\xe0\xfc\x45\x2a\xa6\x1a\x9d\x60\x47\x23\x25\xf2\x0b\x7e\x59\x55\x89\xd2\x4f\x55\xa8\x51\x5d\xf0\xf8\x72\x51\x56\xd7\xf1\xac\x5c\x38\xd0\x3d\xc6\x48\x96\xd6\xef\xa5\x55\x82\x63\xae\x79\xdb\xe7\xdd\x89\xe7\x1f\x48\x37\xba\xc6\x88\x6d\xc3\x4c\xbb\xb7\x5f\xa8\x85\xdb\x47\x0f\x0d\xab\x27\x6d\xfb\x7c\xdc\x04\x0e\xc2\xf9\x39\x5f\xe8\xb4\xcc\x6a\x7a\xad\xbe\xec\xed\xa4\xeb\x7e\x59\x05\xd8\x0c\x84\xf6\x77\x44\x5b\xa9\x6d\x53\xa6\xb0\xe7\x3a\x6d\x6a\xcc\xec\x55\xb3\x5e\x6f\x34\x08\x0f\x8e\x3b\xf6\xd8\x4b\xad\x70\x50\x86\x93\xce\x50\xfb\x88\x8d\xd6\x6f\x05\x98\x5b\x56\x80\xb9\x6d\x05\x48\x21\xe3\x35\xe1\x74\xe7\x1c\xb7\x3b\xbb\x41\x70\xc5\x55\xce\x6e\x1a\x5b\x2e\x95\x14\x38\xbe\x23\xc1\x1a\x57\x8d\x3c\x7a\x6e\x5b\xef\xe9\x07\x76\x63\xa5\xc2\xb9\x44\xf2\xbd\xd1\x36\x72\x70\x2e\xdd\x63\x5f\x64\x53\x76\x23\x7f\xc2\x79\x63\xd1\x79\x63\x7e\x8a\x7a\xd1\x40\xd1\x58\xc4\xde\xa8\x04\x34\xc3\x3c\xdd\xc0\x96\xe9\x80\xd3\x19\x0b\x92\xf4\x48\x08\xe4\x12\xe5\xf2\xe9\xc0\xb6\x98\x37\xda\x9f\x26\x49\x0b\x06\xe7\xe8\x8c\x54\x90\xd4\x20\x0c\x2a\x04\x3b\xc3\x06\xf3\x1a\xde\x6d\xc5\x12\x0b\xc2\x1e\x4d\x7c\xd7\x8f\x9e\x0f\x50\x5f\x9d\xea\x92\x2d\x7b\xba\x67\x7a\xa4\x91\xe8\xb6\x08\x7b\xa3\x21\xfc\xd4\x86\x49\xfb\x4a\xdb\x9f\x0e\xe4\x9b\x68\xef\x5b\xb6\xff\xf1\x98\x04\xd1\xde\x9f\x61\xf0\xf1\x6c\xff\x6c\x7c\xe2\x23\xa8\x58\x79\x96\x9f\xa5\x67\xf3\xf0\x3e\x0d\xda\xcf\x67\xfb\x93\x13\x32\xf1\x8f\xcf\xf6\xcf\xbc\x93\x8a\xde\xdb\x8f\x9b\x56\x7d\xe8\x18\xdd\x2c\x49\x49\x27\xe7\xa3\xcb\x9c\xaf\xda\x52\x65\xde\xd8\x7c\x68\x60\x47\xc8\x01\xed\x6d\xd3\x9a\xfa\x0d\xcb\xed\xfb\xba\x7d\x40\x56\x9f\x6c\x80\xb3\x94\x9f\xfd\xb4\x41\x54\x14\x67\x67\x55\xc6\xb9\x3a\x30\x68\xa0\x45\xfd\xbc\x05\xca\xa8\x0c\xc6\xa1\x75\x4b\x46\x38\x73\xfc\x34\x2b\x09\xda\x46\x51\x87\x82\x54\x2e\x6a\x0e\x87\xd6\x2f\x76\xc7\x50\x50\xe8\x18\x68\xa3\x35\xd2\x24\xc8\x43\x3f\x08\xfd\x76\x16\xc2\x41\xf5\xa8\xec\xeb\x51\x7b\x85\x21\x54\xb0\x05\x6d\x4b\xee\xd0\xc0\xb2\xc7\xd6\x0e\xf2\x16\x68\xaf\x0c\x4e\xb1\x63\x99\xa1\x36\x70\x37\xad\xc8\x01\x16\x86\xb1\xd8\x2f\x6a\xe4\xac\x6b\x0c\x3c\x8f\xb0\xf1\x51\x79\x9c\xa3\x6e\x3a\x9e\x93\x66\xb3\x93\x38\x28\x43\x19\x36\xac\x51\x60\x52\x63\xb1\xdf\xae\x20\x08\x29\xd8\x25\xc9\x71\x21\x1c\xb0\x10\xcb\x39\xf2\xc4\x9b\xd8\x64\x89\xa4\xd4\x4f\x8d\x2d\x5e\x9f\x6d\x5a\xbb\x9e\x0f\x0a\xbd\x19\x45\xc8\x81\x47\x11\xfa\xb5\xf7\x02\xeb\xb3\x1f\x8e\x29\x22\xaf\xf6\xdd\xa9\x0d\x54\xce\x4d\x6b\x38\xd7\x7d\x66\xc4\x36\x31\xa0\xbe\x69\x85\x76\xba\x56\x08\x8d\xcf\xe1\xbd\x84\xf0\x3a\x2b\xee\x93\xe3\xe0\xec\xfa\xec\xb7\x70\x78\x42\x83\x8f\x27\xe1\xfd\xea\x2f\x16\x8a\xd7\x11\x31\x38\xe3\xbd\x0b\x38\x86\x0c\xd9\x4b\x6b\x5a\x8d\x10\xfd\xbc\xa7\x8d\x4a\xca\x8d\x99\x73\x2c\x15\x26\xe3\xd0\x75\x9d\x13\xf9\xbb\x01\xba\x0a\x1b\x0c\xf2\x13\x76\x38\x09\xa4\x6e\x07\xad\x10\x42\xff\xbd\x81\x32\xaa\xaa\x41\x1c\x88\xcc\xda\xa4\x79\x80\xd7\xfe\x12\x50\x7c\x22\x8e\xb2\x29\x55\x13\x6d\xc2\x83\x34\x30\xcf\xa5\x79\x87\x2e\x22\x1a\x10\xa9\x64\xa5\x1d\x40\xf8\x7c\x22\x36\xa9\x2f\x38\x4f\x83\xf7\x0d\xe7\x42\x34\x2c\xb8\x10\x37\xf0\x4b\x28\xb5\x41\x18\xee\xcc\x1e\x98\xa6\x1c\x67\x15\xde\xca\x29\x8a\xa5\x2d\x54\x17\xda\xb8\xa4\x0d\x60\x7d\x49\x97\x32\x4e\x52\x1c\xd2\x89\xfa\x41\x4a\xf1\x24\xbb\x82\x96\x87\x31\x94\x36\x28\x2a\xc6\xd3\x52\x32\x6e\xc6\xf2\xae\xcb\x76\x1c\x1c\x84\x4d\xfc\xa5\x71\xc8\x32\xb0\x36\x2e\xf3\x64\xfc\xbd\xba\xc5\x12\x3e\x98\x18\x26\xd2\x1a\xa4\xf5\x81\xdc\x7e\xfe\x52\x2c\xb9\x86\x63\x8e\x30\xb6\xf1\x44\xfd\xc5\x95\x48\xce\x05\x6d\x34\x20\xb9\x44\x96\x43\x6b\x6a\xa9\xac\xc4\x5a\x83\xe7\xec\x9c\xe4\x72\x99\xfe\x2c\x17\xa9\x94\xc1\x8b\x6a\x95\xf3\x2b\x32\xf1\x7f\x49\xcb\x38\xa9\xd0\x21\x78\x1f\x7e\x62\x77\x68\x42\x96\xf3\x14\xaf\xda\xa4\xe9\x47\x81\xe1\x04\xf8\x0d\x5e\x97\x89\xcf\xda\x21\x05\x7e\x6f\xd8\xad\xc5\xdb\xbd\x0e\x6f\x3f\x32\x17\x7d\x2d\x1a\xb8\x88\x8a\x3e\x2c\x78\xdd\x21\x4b\x65\xd2\x42\x2b\xef\xa7\x6d\x12\x9b\x68\x7c\xc4\x8f\xd3\x23\xbe\x41\xdf\x24\x5c\x7c\xc0\x43\x9b\xbe\xd5\x30\x4d\xb2\x82\x17\xdd\x10\x42\xb6\x57\x95\x4d\x8c\x51\xd3\x13\xb1\x4d\x4a\x2c\x85\x14\xdc\xbe\x86\x6c\x48\x8d\x80\xbe\x5c\x68\x08\x69\x90\x87\x47\xa9\xeb\xa6\x42\xe2\xe8\x78\x42\xa1\x1a\xb7\x31\x10\xf0\x3c\xd7\x25\xd1\x24\x92\x26\x27\xca\x96\xb4\xeb\x92\xbe\x85\x6f\x21\xaa\x31\xbd\xcb\xcc\xbd\x6f\x5b\x05\xd6\x05\xa7\x37\x37\x51\x2d\x7a\x9d\x51\x3f\x43\xbb\x81\x19\xbf\xe9\x35\xa0\x98\xf4\xa0\x2b\x2b\x56\x7e\x8e\x8e\x50\x72\xa5\x53\x83\x98\x8c\x64\x59\xd3\x14\x41\xb0\x7c\x45\x4c\x90\x76\xa9\x1f\x2d\xbc\x1c\x39\xe1\x79\x21\x8e\xda\x62\xf9\x3d\x4b\x12\xa2\x69\xb0\xbf\xe7\xd5\x10\xcd\x66\x7e\xaf\x6f\xd7\x06\xb4\xbf\xd5\xb3\x56\xbc\x81\x4b\x5e\x12\x0a\xb8\xec\x28\x15\xcc\x22\x9a\xcd\xbe\xef\xc6\x29\xb0\x0b\x8d\x66\x33\xa2\x41\xac\x3b\x08\xf8\x7e\xe7\x59\x2f\x56\x4e\xd1\xb4\x4b\x01\x0c\xdf\xf5\x98\x79\x68\xeb\x8a\x4d\xff\x50\xed\xb8\x65\xd3\x44\xe5\x3a\xa4\xf6\x73\x5f\x4b\x4f\x09\x07\xfb\xd2\x98\x9a\xdc\xb8\xeb\xb7\x19\x66\x77\x3f\x43\x84\xeb\xb4\x6b\xa6\x61\x6e\x3b\x38\xb4\x0c\x64\x69\x2d\x69\xc4\xb6\xbc\x5d\x63\x60\x55\xf6\xb3\x24\xd9\xda\x85\x9e\xe2\x3f\x97\x7d\x4b\x0d\x5f\xee\xb3\x5d\x0f\x76\x5a\x94\xf4\x15\x43\xd5\x35\x6f\x16\x9f\x16\xf2\xa1\x77\x5e\xde\x11\x62\x4f\x72\x55\xdd\xd5\xd4\x3a\x2d\x63\xb0\x0a\x43\x87\x7b\xbf\xb7\x0f\xd7\x18\x98\x4b\x11\xea\x9e\xcc\xe2\x5c\xe2\xc4\xf3\x1c\x41\x74\x26\xd2\x5d\x8f\xa7\x06\xad\xc8\x27\x98\xa1\xe4\xcb\x55\x12\x95\xdc\x41\x8b\x46\x66\xb2\x55\x15\xa7\x86\x55\x07\x21\x70\x1b\x7b\x12\xdd\x2a\x5a\xfb\x0e\x71\xb6\x79\x68\x07\xe4\x36\xb7\x5d\x56\x60\x8d\xb2\x11\x11\x1d\x1c\xdf\x96\xb9\xfa\x43\x8a\x37\xc2\x29\x85\xdc\x75\x37\xc8\x4b\x8e\x2a\x30\x73\x30\xc0\x18\x9c\x36\x17\x3d\x11\x24\xf3\x27\x34\x9f\x6d\xed\xf7\x98\xc2\xcf\x8d\x3a\x2a\x6e\xa2\x56\xaa\xaf\x1b\x32\x11\x53\x2d\xd9\xbd\x66\xfb\xc1\xc7\xd6\x61\x6b\x68\x47\x7d\x79\x61\x13\xc2\xe6\x46\xf2\x4d\xe3\x89\x67\xa5\xbe\xd2\x77\xe0\x6a\x3c\x10\x94\x8e\xbb\xee\x92\xa0\xdf\xae\x8c\xd2\x4d\x27\xb1\x8e\x42\x80\xf1\x12\x51\xa8\x8a\xe2\x44\xc8\xcd\x26\x6f\xb9\xe0\x69\x93\x11\x07\xd3\x2f\x95\x7a\x4e\x4a\x0d\x10\x70\xad\x53\xcd\xa9\x46\xbb\x43\x1f\xfc\x6e\x2e\x5a\xd7\xe7\xa3\xe7\x51\x92\x5c\x44\xd3\x4f\xed\x08\xa0\x9c\xf5\x90\xf6\x4d\x72\xd5\x44\x9c\x53\x94\x4d\x39\xcf\x92\xd7\xa8\x52\x85\xb6\x9d\x70\x19\xa4\x21\x13\x8c\x17\xca\x5a\x48\x32\x4d\xf8\x88\x1a\x94\x4b\xa7\x31\x14\x90\xac\x16\x6f\x56\xf6\x3c\x58\xb3\x0e\xb7\x8f\x59\x8c\x3e\xd8\xe9\x14\x1d\xeb\xd9\x60\x7c\x14\x19\x1b\x5d\xb6\xe7\x29\x86\x1b\x69\x35\xed\xd1\x70\x58\x1c\x1b\x93\x64\x8a\x36\xe6\x59\x50\x98\xfb\xce\x60\x1c\x42\x2a\xe5\x48\x3e\x2a\xca\x6c\xf5\x2e\x7d\x15\x25\x05\xc7\x1b\xb4\xac\x09\xa1\x32\xf0\xe8\x0e\x1f\x2d\xf9\x32\xcb\x6f\xf1\x8a\x6a\x20\x04\x3d\x36\xf0\x30\x24\x65\xc6\xd2\x49\x10\xfa\x18\xc4\x20\x61\x77\x2d\xd6\xd4\x58\xec\x2a\x73\x8a\xb2\x55\xf6\x9e\x07\x91\x66\xd6\x56\x2c\x55\x71\x68\xba\x53\x63\x9b\x42\x7b\x67\x2d\x49\x2e\xf6\xb4\x5c\xe6\xae\x8b\xc1\xaa\x30\x48\x48\xa6\x0d\xac\xfc\xdc\x75\x73\x73\xe2\x6d\xe4\x16\x76\x41\x72\xea\xba\x25\xc9\x69\x4d\x6b\xd2\xc4\xa3\x01\xd5\xb0\xb5\xde\x19\x35\x48\xdc\xc3\x9e\x7e\xa8\x56\x99\x8f\x61\x8b\x06\xe6\x88\xa4\xec\x7c\xa4\xa2\x2b\x90\x52\x82\xfc\x9f\xec\x79\x47\x34\xd3\x0a\xe8\x14\x3c\x0a\xe9\x31\x2b\x5c\xb7\xd8\xdb\xab\x75\xd5\x5d\xf9\xd0\x88\x1d\x4d\x71\x1c\x32\x14\x8b\x32\xcb\x2d\xb9\x63\x9d\xd9\x1a\x78\xbc\xec\x54\xc5\x2b\xad\x5f\x4f\xce\x98\x45\xf2\x66\x0f\x7d\x46\x5b\xb9\x7b\x66\x74\x90\xd5\x90\x64\xb6\xbc\xd0\x2d\x28\xad\xaa\xb2\xaa\x88\x2c\x4f\x57\x2f\x3e\xe9\x2d\x6e\x10\xa3\x21\x22\xff\x2d\x2e\x5b\x21\x3d\x1a\xce\x13\xe3\xd2\x0b\x38\xe8\x1b\x16\x75\x6b\x39\xd1\xa6\xc1\xd4\x4f\xc3\x66\x3d\x41\x59\x55\xd6\x8c\x8a\xb2\x7b\xda\x9a\x8c\x74\xa5\xdd\x28\x45\xd6\x77\xbd\xed\xcd\x6b\x43\x06\x12\x3b\x28\xcc\x0b\x3e\xe7\x79\xeb\x1b\x73\x7d\x19\x04\x4e\x9a\x95\xf1\xfc\xd6\x11\x2c\x34\xbb\xcc\x79\x51\x38\x60\x51\x23\xe2\xc8\x4d\xe6\xd0\x2d\xa9\x07\x21\x04\x4e\xce\x8b\x2c\xb9\xe2\x0e\x38\x82\x60\x76\x0a\x10\xc4\x61\xb7\xbf\x94\xf6\xab\x31\xe8\x82\x66\x8e\x2c\x15\x71\x64\xc1\x11\xd4\xf7\xbf\x5a\xa8\x07\xaa\x1c\x51\x68\x08\x39\x73\x56\x3c\x9d\xa1\x88\x10\xb3\x3b\x0c\x8a\xda\x33\x09\x79\x0d\x51\x72\x1d\xdd\x16\xbd\xb1\xb9\x90\x2b\x34\xf3\x22\xb9\xc3\xc6\x3c\x6d\x46\x86\xd4\xcb\x46\xc6\xa0\x96\x0a\x00\x21\xe1\xc4\xab\x56\x1b\xe4\x11\xca\x94\xd7\x90\x76\x3d\x91\x2d\x84\xc8\x2d\x54\x49\xf2\xfb\x25\xe1\x41\x1e\x3c\x08\x91\xa0\xca\x5f\x3b\x59\x90\x07\x5e\x18\x92\x8d\x1a\x63\x44\x13\xec\x8b\x8f\xb5\x83\x7c\xcf\xe2\x90\xe6\x27\x1e\x07\xe4\xba\x21\x42\x30\x16\x6b\x49\xb3\xcd\x91\x9a\x4d\x35\x40\xe2\x19\x03\xf4\xf9\x65\x90\x07\xe3\x70\xe8\x88\x45\xee\x84\xb2\xb2\x18\xe3\xc1\x34\x55\xd6\xb4\xa6\x20\x23\x3c\xcb\x13\xb5\xac\xad\x06\x31\x76\xb6\x51\xa4\xe5\x8c\x37\x6e\xc4\x82\xa8\x89\x19\xde\x75\xda\x90\xb9\x0b\x19\x2b\xca\x8a\x54\x05\xc9\x66\xa4\xab\x64\x47\xde\x60\x1e\x67\x54\x21\x4e\xb0\x5c\x0d\x51\x01\x6b\xf4\x48\x48\x9b\xc6\x59\x51\x1a\xc5\xf1\x40\xb9\xff\x7f\x58\x48\x5b\xfc\xdd\x82\x27\xf3\x3d\x1c\x93\x35\x5e\xe0\xd2\x9d\x04\x01\x30\xbf\x36\xc0\x1e\x32\x45\xd1\x7d\x58\x92\x84\x4e\xe2\x49\xa2\xc5\x8f\x88\x64\x90\xc2\x0b\x88\xa9\xfa\xf9\x46\x48\x64\x3e\xc9\x86\x43\xf8\x7c\x26\x93\x9a\xaa\xc9\x13\x73\x42\xc5\xb7\xf9\x80\xb1\x17\xc8\x1b\x95\xa4\xb2\x66\x42\x56\x01\x12\x57\x55\xaa\xa7\x16\x73\xcb\xa1\xa8\x6b\x98\xb2\x78\x92\xb4\xe2\x5e\xe7\xb7\x77\x09\xb1\x84\x9f\x66\x0d\x8f\xb8\x0e\x54\xfd\x63\x96\x7d\x12\x07\xe8\xfe\x37\x84\xc3\x74\x54\x08\x99\xf0\x43\x1e\x4d\xc5\x61\x76\xe8\x9d\x30\xc1\x43\x44\x03\xdf\xf4\x34\x30\x55\xeb\x0c\x49\xa8\x6a\xda\x4e\x39\x99\x12\xea\x13\xab\x96\x4b\x5e\xa2\xa8\x29\xab\x27\x76\x25\x6c\x4b\x36\x22\x5d\x9a\x79\xf9\x21\x5e\xf2\x6c\x5d\x92\xa9\x28\xfb\x33\xdb\x53\x88\x7b\xc1\x38\x0c\x0e\x43\x3c\xac\x46\x64\x0c\x1c\x96\x24\xa6\x93\xd8\x7f\x01\xbc\x35\xe4\x28\xf7\x74\x73\x96\x74\x52\xfa\x2f\xf0\xe5\xc1\xc6\xcb\x9c\x4e\x72\xff\x0d\xa5\xed\xfd\xa1\x7e\x6e\x8b\xf8\x34\x60\x82\x6f\x2b\xd6\xc0\x21\x96\x7e\x5d\xd9\xa6\x08\x99\xf6\xd8\xbb\x44\xac\x0c\x0e\x84\x2c\x58\x06\x0f\xc3\x9d\x38\x28\x05\x21\x61\x91\x68\x15\x14\xae\x8b\x3f\x5a\x36\xfb\xac\xa8\x21\x0d\x0e\xf7\x78\x18\x1c\x84\x1a\x92\x4b\xa7\x1c\xda\x29\x63\xcc\x21\x98\x31\xe8\x21\x13\x0f\x14\x64\xa1\xa5\x48\x10\x9c\x8f\x42\x16\x94\xc1\x38\xec\x0b\xbd\x2f\xdf\xb4\xe8\x8a\x90\x2f\x95\x1a\xcf\xef\x67\xa7\xed\x8f\x58\x64\xd8\x6f\x4d\x21\x36\x03\x9b\x51\xa9\x0e\xc5\xbd\x94\x41\x46\x21\xab\xe1\x7a\xc1\xfb\x5c\x33\x36\x62\xdf\xa5\xac\x84\x9c\xe9\x38\x70\x10\x33\x15\xb1\xd1\x6a\x4b\x64\xad\x39\x42\xa1\xe8\x0b\x3b\xda\x10\x78\x7a\x97\x8b\x13\x9e\x24\x9c\xe2\x57\xb7\xca\x13\x6f\xb2\x51\x87\x9f\xc2\xde\x5e\x59\x55\x91\xbd\x79\xf1\xec\x56\xd7\x18\xf8\xfb\x98\x89\x63\x9b\x38\x23\x45\x92\x82\xe3\x65\x9f\xce\x0d\x91\xda\x57\x30\x28\x29\x18\x2e\x8a\x60\xb9\xc8\x46\x09\xad\xaa\x25\x89\x83\x34\x74\x5d\xf1\xaf\x3c\x23\x99\x9b\xe1\x48\x72\x3d\x85\x25\x82\xb6\x57\xaf\x30\x37\x88\x6a\x4c\xe9\x56\xb0\xa9\x66\x51\xab\xa3\xe0\x9f\x6c\xff\x23\x79\x79\x15\x25\xd5\xeb\xb4\xe4\x79\x1a\x25\xd5\xfb\x28\xbd\xe4\xd5\x7b\x31\x72\x3c\x9d\xf2\x4a\x62\xad\x54\x68\xb6\xfe\xcb\xfb\xd7\x14\x69\xf0\xbd\xfd\x9d\x6d\xe4\x85\xd9\x36\xdf\xf4\x0e\xcf\xdc\x45\x26\x11\x53\xd4\xcf\xd1\x75\x94\xa7\x18\xa0\xfa\x4f\x85\xff\x33\x4a\xa3\xa5\xa4\xc6\x76\x16\x1d\x93\xd7\xd4\xb4\x6b\x6a\xf2\x77\x9d\x61\x39\x5a\xf2\xa2\x88\x2e\x39\x94\x92\xd4\xa0\x8a\xe2\x5c\x2a\x94\x4d\xd4\x7e\x66\xb3\xf6\x16\xad\xb1\xc9\x2a\xb2\x99\xb2\xa6\x35\x0e\xcb\x8f\xad\xb5\xd3\xf0\xc0\xef\xc5\xce\x50\x80\xe9\x1d\x4c\xe1\x17\xef\xde\x2a\x9f\xc2\x37\x59\x34\xe3\x33\x07\xbe\x17\xa4\xad\x37\xaf\x84\x13\xfe\x9e\xea\xb6\x12\x19\xf0\x54\x3e\xf4\xad\xd3\x1f\xe5\x4c\x73\x2a\x03\xd4\xb7\xc8\x61\xb7\xbf\x84\x53\x73\xce\x68\x24\x56\x13\x8b\xd0\x03\xcc\xfe\x5b\x14\x97\xbe\xfa\xdd\xda\x70\x44\xde\xfe\x4f\xf6\xf6\x54\xc1\x98\xf3\x7c\xa4\x0a\xa0\x55\x45\xcc\x03\x1b\x8c\x61\x80\x00\x0a\xae\xdb\xca\x7f\x32\xae\xaa\x1f\x3b\x9b\x22\x38\x0f\xb5\xaa\x10\xf3\x61\x97\x98\xec\x19\x38\x3a\x3e\xb8\x8c\xbb\x8d\x19\x4e\xc5\x16\xa8\x2a\x1c\x2d\x75\xba\xb3\xdf\xa0\x91\x6e\x07\x8c\x6e\x34\xcb\x4e\xa7\x79\x96\x24\x93\xd6\x44\xab\x1a\x11\x79\x77\x13\x0d\x7a\xcb\xcc\x6d\x66\xd4\xd3\x26\xb7\xce\x2f\x5d\xd3\x32\x15\xbc\x4c\x0b\x43\x3d\x2e\x08\x8c\xc9\x08\xe3\x46\x3a\x61\x17\x82\x1e\xa0\x25\xec\x6e\x2c\x0e\x55\x83\x31\xa4\xf4\x17\x2c\xb0\x80\x34\x28\x42\x18\x8c\xb1\x50\x13\x0b\xa2\x15\xb9\x12\x3f\x58\xca\xf8\x99\x11\x86\x2e\x4b\x50\xb3\x4e\x9a\xcb\x6e\x0d\xe8\x4f\x7d\x92\xb0\x12\x36\xaf\xe8\xcc\x21\xa9\xd1\x6e\xa7\x08\xb5\xa8\xae\x99\x8c\xd3\x44\x89\x3e\xc1\x90\x42\x34\xc9\xfd\x5c\x87\x49\x2c\x42\x28\x40\xbf\xb2\x1c\x25\xe2\x09\xf7\x93\x89\x6e\x07\xf5\xd7\x13\x89\xa6\x02\x29\xf5\xb3\x1a\xfe\x60\xfb\x1f\xf7\x96\xc5\xde\x3e\xfc\xc6\xf6\xf7\xa4\x5d\x00\xb5\xb5\x50\xbf\xb6\x55\xde\xa3\x32\xfb\x65\xb5\x32\x16\x05\x26\xdb\x3f\x5b\xd6\x3d\xda\x66\xec\x0f\x70\x96\xc5\x9e\x85\x85\xf3\x1b\xfc\x2a\xcd\x10\x7e\xe8\xdb\x5e\xed\x2b\x6d\x09\x95\x64\x3f\x0f\x86\xd6\x85\x77\xd3\xc4\xbf\x21\xe1\x88\x8b\x91\x8a\x11\x2a\xed\x29\xc4\xaf\xe1\xdf\x46\xeb\x78\x36\x1c\xd6\xf8\x97\x79\xf0\x37\x3b\x94\x31\xe2\x16\xf5\xa9\xc8\x03\xbb\xb4\x0e\x3a\xca\x5d\x0d\x3f\xc8\x90\xca\x36\x1a\x63\xfb\x0b\x56\xfa\x4a\x39\x2f\x43\x91\x37\x9e\xee\x60\xe7\x03\x65\x6c\x5c\xc2\x34\x4b\xe7\xf1\xe5\x3a\x47\x6d\x01\x5e\x8c\x53\x28\x6b\x28\x78\xb9\x2d\x64\xa2\xbc\x36\xc2\x1e\x68\x88\xe1\xae\x3a\xad\xa4\x71\xf0\x4f\x52\xd2\x90\xa5\x3b\xed\x28\x9b\xf2\x4d\x4e\xdb\x31\x21\xe3\x6e\x38\xe6\x0d\x64\x65\x04\x25\x69\x55\xec\x77\x7a\x2e\xce\x62\xad\x04\xd9\x82\x1a\xa2\xe9\x94\x17\xc5\xff\xcb\xdb\xbb\x77\xb9\x6d\x23\xfb\xa2\xff\xf7\xa7\x68\xe1\x78\x78\x00\x0b\xcd\x56\x3b\xb3\xf7\x3a\x9b\x6d\x44\xd7\xf1\x23\xf1\x8c\x5f\x71\x3b\x33\xc9\xc8\x1a\x6d\xb6\x04\xb5\x18\x53\xa4\x42\x82\xfd\x98\xa6\xbe\xfb\x5d\xa8\x02\x40\xf0\xa1\x8e\x33\xfb\x9e\xeb\xb5\xdc\x22\x41\x00\x04\xf1\x28\x54\x15\xaa\x7e\x75\x48\xd1\xdd\x54\x5f\xd7\x6a\x40\x2b\xab\x2c\x50\xbf\x96\x4a\xa6\xee\x4c\x45\xb7\x30\xc2\x23\x96\x12\x6f\x79\xc6\x78\x73\xb4\x39\xcd\x22\xc5\xfa\x0a\xa6\xd6\x11\x5c\x77\xb0\x5b\x4b\xbb\x03\x9f\xcc\xee\x33\x41\x55\x27\x3e\xae\x66\x64\x41\xf7\xfc\x8b\x6e\x8b\xd0\xdf\xcb\x92\xec\xb8\x98\xce\xd4\x3c\x52\x2d\x6d\x25\xf3\x4d\x98\x91\x51\x30\xc1\x4a\x8a\x99\x9a\x65\xf3\xf9\x9e\xfa\x3d\xa1\xe9\xbb\x17\xce\x95\x02\xee\xe9\x43\xd3\xce\x70\x83\xa6\xce\xce\x53\x2d\xc6\x6c\xe2\xf2\x45\xac\xe2\xaf\x9f\xf3\xcd\xb7\x07\xc1\xa8\xdb\x1e\xa5\xd9\x2b\x5d\xfc\x11\xf8\x27\xfc\x95\xff\x68\x7e\x4d\xcc\xb1\xcf\xf7\x68\xad\xf0\xf8\xf3\xbe\xfe\x3c\xb3\xd7\x73\x1b\x70\xec\xd9\xc9\x3f\xe6\x3e\xa5\xf9\x4b\xcf\x12\xae\x19\xf3\x6e\x60\x12\x06\x61\x9a\xc8\x2a\x56\xf1\x89\x66\x40\x2c\x7d\xf9\x07\x27\x27\x8f\x02\xd2\xf5\xe6\xef\x4e\x28\x88\x51\xdb\xb2\xd0\x2b\x18\x43\xa1\x2e\x1b\x8a\xae\xaf\x8a\x0a\x76\x44\x10\x5f\xe3\xb4\x94\x04\x37\x5b\x4a\x34\x49\x47\xdc\x26\x00\xa7\x92\x42\x88\xb1\x1c\x13\x32\x1d\xcb\xe8\x67\x67\xe0\xf1\x97\x8b\xf7\xef\xd0\x06\x01\xd6\x0c\xdb\xd3\xcc\x8a\x8e\x09\xbb\xdf\xff\xe8\x4d\x5f\xf4\x60\xb2\xa0\xf2\x8d\x99\xd8\xc2\x3f\xd4\xee\x0d\xa2\xc9\xf6\x63\x68\x1e\x52\xc9\xea\xfa\x91\x77\xb7\xe7\xab\x76\x99\xd6\xfa\xfb\x31\xc4\xf5\x69\xdb\x60\x96\xcc\x8b\x6e\x11\x76\xff\xa3\xe1\xa4\x0c\xb2\xe2\xe2\xa1\x5a\x1f\x75\x6b\x5d\x1c\xac\xf6\x51\xab\x5a\x60\x4e\xbc\x63\xfc\xde\x4b\x3a\x60\xf7\x78\xaa\xcb\x63\x2d\x3c\xe7\x9e\xf9\x69\x6b\x0e\xa1\x35\x8b\x77\x94\x03\xfb\xf6\x8f\x40\x48\x72\xb4\xdd\xca\xbd\x63\xef\xd1\x23\x7c\xc2\x89\xe9\x44\x3d\x57\x4a\xc2\x4c\x84\xa7\xcc\xb9\x02\xe2\x3a\x8e\x41\x38\xd0\xef\xa1\x85\xd0\x37\xc8\x49\x37\x98\x63\x38\x55\xf1\xec\xe9\x17\x5a\x18\x35\xea\x7f\x30\xc6\xff\x82\x5e\x8f\x10\xe1\xf8\xe8\x11\x4c\x85\xee\x5b\xf9\x68\xe2\x6c\x11\x13\x73\xd1\xd7\xad\x20\x61\x04\x11\xd7\x63\xa9\x71\x72\xd9\x30\xf5\x2c\xfa\xa9\x1b\x7d\xde\x02\x5c\x24\x6b\x9a\x7b\x74\xd6\x01\x0f\x3a\x1a\x40\x33\xdb\x5d\x5c\x32\x36\xcd\x22\xff\xc9\x5f\x3a\xa9\x47\xbf\xdb\x18\x08\x70\xbf\x37\xb8\xa8\xbc\x2f\xe7\xe1\x13\xfd\xe5\xc3\xd3\xb1\x13\xa5\xbe\xf7\x26\x33\xa3\xdc\x97\x9b\xe3\x71\x33\xa7\x7e\xab\x64\x25\x87\x77\x57\xdd\x13\x8d\x91\x94\x00\x07\xcd\xf5\x2d\x61\x63\x02\x85\x08\x2f\xc4\x23\xb7\xff\xf0\x2c\x08\x00\x57\xb9\x17\x14\x5d\xe7\xf2\x16\x80\x6f\x50\x93\x31\x16\x15\xcd\x61\x0c\x84\x9b\xdb\xf3\x95\xec\x37\x8a\xdd\x43\x90\x38\xfd\x7e\xc4\xe2\x15\x8b\x10\x72\xe1\xcb\x0b\x17\xf4\x09\xe2\x3f\x39\x67\x26\xb1\x08\x17\x90\x4d\x4b\x82\x25\x42\xb8\x92\x24\x73\x8a\x70\x61\xe2\xb4\x78\x65\x8a\x93\x13\x70\x90\xa5\xfa\x5d\xc2\x58\xab\x5a\xd8\x5c\xbf\x2c\xe3\x66\x83\xc9\xe1\x1c\x8b\xbb\xa3\x42\xaf\xf7\x17\xa1\xf9\x18\x8b\xc0\xca\x18\x1f\x15\x41\x00\x0b\x14\x8e\x4f\x40\x19\x41\x35\x51\x68\xda\x39\x1c\x8d\xdb\x74\x3b\xe4\x20\x47\x8e\xb6\xe0\x00\x64\x40\xe7\x5c\x37\x67\xfc\x1e\x0f\x67\x0e\xeb\xcd\xbb\x9a\x1c\x8f\xf4\xcc\x94\x1b\xe2\x6c\x8e\x81\x83\xba\xa4\x68\x68\x84\xb0\x9d\x4f\xec\x91\xf3\x80\xf1\x0e\x55\x42\x72\x29\x74\xcf\xf2\x4c\xf7\x73\x77\xb6\x3f\xcd\xa6\x76\x5c\x2d\x35\x73\x91\x27\x1c\xd7\x15\x0d\x4e\xf4\xf6\xac\x70\x4b\xeb\xa8\x3d\x03\xcc\x2a\xe0\x66\x70\x25\x5a\xbe\xdb\x21\xd5\xcc\x12\x18\xc8\x34\xe3\xd6\x2c\x9b\x81\x79\xf9\xf0\xd2\x1b\xac\x64\x99\xca\xb8\xf8\xf1\xc1\x7a\xcc\x84\xc1\xd9\xce\x67\xf3\x41\x95\x9f\xcf\xbb\x9d\xf1\xa4\xad\x5c\xc2\xbd\x80\xc7\x2d\xa3\xaa\xd2\xd7\xa7\x9d\x9c\x14\x75\x9d\xb4\x44\xe2\x9c\xcf\x34\x77\x04\x4c\xd9\x03\x83\x87\x83\x01\x2e\x3a\xd8\x42\xc4\x9d\xa2\x99\x21\x06\xf9\x2c\x9e\x73\xd9\x9a\xac\x18\xec\x04\x26\xa4\xa6\xfb\xe3\x31\x37\x77\x30\x07\xcb\x46\x48\x2b\xa9\xaf\x91\x53\x4e\x2d\x24\xa5\x38\x9d\x8d\x4f\xe6\x53\xcd\x4d\xad\x1e\x7f\x0e\x6b\xf6\x79\x35\xa6\xd3\x68\x26\x5f\xce\xe1\xc1\xe7\xd5\xb8\x66\xa7\x26\x0c\x1b\x57\x52\x74\x83\xdb\x42\x64\x5c\x26\x6a\x46\xc9\x58\xca\x31\x61\x20\xe3\xfd\x69\xfe\xd8\x0b\x78\x2b\x66\xe4\x53\xbe\x23\x9c\x7c\x4c\xae\x36\x8a\x70\xf2\x5d\xae\x54\xbe\x25\x9c\xbc\x91\x6b\x45\xe6\xad\x78\xa5\x9e\x58\x40\xb2\x3c\x03\xbe\x88\x4a\x81\xd1\xad\x4a\x75\x97\x42\xd8\x31\x08\x82\x5d\x1b\x57\x8d\x56\xaa\x9e\x64\xce\x6a\xae\x03\xc1\xcc\xb5\x60\xe5\x6a\x5d\x84\x4b\x58\xd4\xc4\x94\x24\x18\x26\xb5\x2b\xee\x3b\xeb\x56\x1e\x8b\x7b\x1c\xc6\x1c\xa5\x9c\x78\x96\xcf\xed\xeb\x67\xf9\x9c\x37\x97\x42\xd9\xa0\x36\x39\x0a\xfc\x99\x8b\x4e\x0a\xc4\x58\x4b\xdd\x5e\x6e\x5d\x51\x23\x26\x35\x2c\x6b\x2e\x87\x1a\xf1\x64\xc2\x4b\x51\xf4\x81\x3c\x8f\x8b\x70\x59\x15\xd4\x87\x5e\xf7\xce\xba\x97\x66\x9f\x80\xb3\xfd\x4a\xe8\x29\x91\x6a\xc6\x37\x03\x0c\x56\x0a\x19\x30\x5c\xfc\x4c\xcd\xa7\x84\x44\x64\x77\x4b\x18\x5f\x8a\xce\xa3\xba\xd6\x0f\x46\x42\xa4\x41\x30\xae\x58\x10\x28\x89\x26\xb8\xee\x15\xe8\xb5\xba\x0c\x82\xe5\xec\x9b\x39\x38\x87\x03\x4b\x53\x9d\x8a\x27\x3c\x15\x69\x5d\xeb\x74\xbe\x14\xe3\xaa\xae\xcf\x70\x96\x2f\xb0\x2f\xa0\x81\xcb\x71\xca\x38\x3d\x3b\xc9\xd9\x63\x7a\x76\x42\x73\xdd\xd4\xd3\xaa\xae\xc3\xff\x60\xec\xa9\x98\x04\x01\x8d\xc5\x84\xf1\xe5\xa9\xc8\x8f\x96\x8f\xc5\x13\xde\x2b\x6c\xce\x94\xf7\x9e\x2d\xfd\x52\x8c\x97\x75\xad\xdf\x38\xd1\x3b\xd9\xec\x6c\x3e\x5d\x8e\xa9\xfe\x1d\x9f\xb1\xc7\xd9\xec\xc9\x3c\x1a\xeb\xbf\xbc\xd0\x2b\x29\xac\xb2\x44\x89\x94\x17\x61\xa9\xe2\x42\x89\x25\x2f\x42\x99\xad\x04\xb8\x60\x83\x7e\x21\x96\x30\x17\xec\x40\x95\xd2\x47\x9b\xed\xce\xba\xc2\x73\xfe\xe1\x89\x88\xa5\x2f\x15\x23\x26\x6a\x78\x99\xaf\xee\x5a\x81\x38\xb2\x8e\x43\x17\xe0\x4b\x98\x39\xab\xbc\x39\xcb\x1f\x0a\xf2\xe8\xe6\x3a\xee\xc6\xe4\x32\xcd\x97\x5f\x08\xe3\xd0\x04\x91\xb4\x02\x64\x56\xdd\xf8\x8f\x9a\x6b\x44\x2b\x82\x09\x8f\x1b\x20\x8f\xfc\x69\x7c\x9e\x8f\xc7\x8c\x16\x00\x78\x6d\x16\x25\xf8\x5a\x17\xed\xa5\xc8\xd5\x94\xba\x16\xe8\x51\x48\xf4\x64\x47\x72\x56\x78\x9f\x50\xd7\x88\x07\x30\xcb\xf5\x4c\xec\x54\x22\x20\xd8\x19\x41\x85\x61\x67\xa5\x17\x12\xcc\x40\xb0\xde\x12\xa5\xac\x08\xdf\x38\xf2\xde\x88\x29\x1c\x79\x5f\xef\xc5\xa8\xc8\x42\x8f\xc7\x89\xfb\x2e\x3c\xeb\x49\x10\xcb\x5b\x7f\x61\xa7\x3d\xfa\x89\x87\xfc\xd3\xda\xbe\xcb\x4d\x7e\x33\xb0\xfa\xec\x56\x05\xcc\xe6\x26\x59\x0d\x1d\x9c\x9b\x3c\x6c\xcf\x55\x7e\x75\x95\x0e\x6d\x63\xe4\x32\xcf\x53\x19\xfb\x27\x9b\x53\xc3\x95\xeb\x17\x53\x63\x0b\xae\x5f\x60\xaf\xbb\x7b\x67\x61\xde\x32\x5d\xe0\xaf\x2d\x68\x6f\xb1\xec\xde\xed\x10\xa9\x44\x59\xdb\xe2\x16\xd5\x80\x64\x04\xf1\xc1\x97\x52\x9c\xb6\x3d\x7d\xda\xb6\x66\xec\x34\xe1\x6b\x5d\xfc\x51\xfd\xcf\x6d\xbe\xaa\x52\xf9\xa8\xfe\x7c\x4a\xa7\xd1\xaf\xf1\x75\x5c\xcb\xe5\x36\x66\xe5\xb2\x48\x76\xea\x34\xe1\x1b\x29\xee\x11\x04\x2d\x9a\x9d\x71\x62\x63\xf7\x6c\xab\x54\x25\xbb\x54\x8a\xff\x6d\xaf\xfe\xf7\xb7\x84\x93\x26\x6a\xcf\x9c\xab\x8d\x8c\x57\x58\x08\xbc\x30\xf1\xb9\xb9\x9c\xf3\x65\x9e\x46\xb3\x27\xee\xe1\xd3\x65\x9e\x5e\x15\x79\xb5\xc3\x6c\xee\xce\x2b\xa1\x8a\x56\x01\xa5\x17\xa6\xa9\x14\x2e\xfd\xac\xab\x68\xf6\x4d\x37\xeb\x53\x55\x98\xec\xc5\xb7\x03\x65\x16\xc6\xcb\x2f\x9a\x4d\x38\x21\x9c\x90\xb9\x47\x46\x76\x7e\xd4\x54\x27\x9b\x8b\xdf\x09\x22\x39\x3d\x10\x08\x10\x81\x5f\x58\xe4\x15\xef\x46\xe0\x99\x0e\x04\xe5\xb1\xc5\x66\x73\xde\xd1\x9b\xa1\x93\xd8\xd4\x19\x54\x4a\xd0\xf2\x66\xed\x78\x9c\x1d\x04\x30\x20\x7e\x56\x92\x7d\x5a\x9c\x67\xe3\x31\xc3\x85\x28\x67\xd9\x9c\x93\xab\x34\xbf\x8c\xd3\x97\xd7\x71\x4a\xc0\xe9\x16\xa9\x83\xea\x3e\x63\x6c\xbf\x91\x61\xbe\x53\x30\x5e\x02\xaf\x93\x3c\xe3\x1b\x19\x42\x1f\xeb\x24\xb5\xce\x73\xa5\x2f\xec\xb8\xc2\x75\x8c\xc7\x43\x1b\xb0\x00\x88\x57\x50\x62\x03\xb7\x2b\x98\xe2\x5b\xc9\xef\x24\xbf\xd6\xb3\xb9\x0e\xfe\xd7\xf4\xf3\xcd\xf8\xfc\xb4\x19\x92\xab\x43\x00\x44\x16\x04\x83\xaf\x85\x32\xa4\xda\x12\xfc\x57\x45\x7c\x05\x34\x9b\x59\x70\x9f\x09\x5f\x35\xdd\xb0\x7b\xba\x3a\xdf\xa1\x81\x3f\x00\x14\xed\xe6\x0c\xb1\x19\x73\xd6\x3d\x35\xc8\x19\xb3\xbd\xbd\xe1\xb9\x87\xe0\x93\xcf\xa3\xdc\x3b\x2c\x90\xa8\x0a\xca\x8d\xf6\x20\x16\x80\x40\xd0\x8a\x48\xd5\xf5\x0f\x5e\x25\xd7\x9a\xb0\x96\x82\x2e\xcd\x06\x9e\xb3\xba\x9e\xe1\x9c\x64\x7d\x00\xf8\x4a\x6c\xe4\xac\x9c\xd7\xf5\x46\x86\x76\x12\xf3\xd8\x73\xb4\xad\xf4\x66\xba\x08\x37\x6a\x9b\x7e\x28\xa4\x31\x70\xcd\xd9\xb8\xd2\xdb\xea\x12\xdc\xe0\x11\x75\x27\x16\x71\x83\x33\x7c\xd4\x7c\x5f\xdc\x8a\x0c\x4f\x63\xb1\xf6\xed\x84\x7d\x38\x4f\x41\x08\xea\xb1\x0c\x06\x8a\xfd\xb8\x4f\xf2\x16\xb6\x41\x17\x79\x61\xdd\x29\xa5\x87\xe2\x3c\x17\x9b\xd9\xce\x22\x2f\x14\xe0\x77\x63\x8c\xf1\x72\x5e\xb0\x6f\x4f\xce\x18\xd8\xf3\x18\x80\x28\xd7\xc9\xa9\xf0\x18\xcb\xbc\xb3\xc5\xe7\x8c\xc7\x62\x27\x69\xbb\xd3\x73\xc6\x09\xd2\x38\x02\x47\x36\x2b\x49\x63\xc6\x31\x6c\xf1\x12\x5a\x12\xcf\x96\xd0\x92\xb5\x1d\x41\x8b\x32\x48\x98\xf3\xe6\xcc\x9b\xd8\x90\xfb\xad\x14\xc5\xc1\xd9\xd6\x7a\x77\x71\x60\xc0\xe9\x5d\x53\x45\x37\xca\x59\x37\x6a\x99\x09\x72\x06\x34\x9f\x30\x7e\x27\x3b\xcf\x6d\xa4\x37\x4e\x9a\x98\x6f\xbd\x4c\x26\xf4\x99\xee\x82\x6d\x3b\x4a\xda\x9d\x64\x7c\x85\x30\x98\xcf\xd3\x3c\x93\x62\x2b\xc3\xa5\xbe\x80\x31\x1c\x4d\x58\xe7\xce\x4d\x1a\x0b\x9d\xa9\x2b\xf4\x3d\xbd\xf5\x60\xc7\x85\x8c\xbf\xbd\x7d\x7a\xea\xae\x09\x5f\x85\x59\x0e\x2f\x78\x8e\xc5\xc4\x68\xd4\x7b\x53\x53\xb7\xef\x86\x0d\x04\xe2\x52\x77\x58\x37\x60\xed\x42\xef\x6c\x5f\xe4\xdd\x29\xbf\x31\x5b\xe4\x36\xaf\x4a\x59\xef\xf2\x24\x53\xb2\xa8\x97\xe8\x61\xbb\x95\x59\x55\xaf\x8a\xf8\xaa\x5e\x15\xf9\x8e\xd5\xcb\x34\x59\x7e\x39\xe5\x2f\xa1\xcc\xec\x9f\xe1\xfc\x31\xd3\xb2\x57\x48\xc3\x31\xab\x99\x47\x77\x6e\xa5\x0f\xd0\xef\x92\x2f\xbc\x64\x2f\x90\xf5\x7b\x69\x6c\x86\x9c\x24\xd0\x82\x44\x6d\xcc\x88\x3c\x2c\xb7\x67\x1d\x5c\x33\x60\x6b\x79\xd9\x3e\xb9\x74\x67\x3d\xf7\xf6\xf4\xb2\x27\xc2\x66\xa0\x73\x2c\xea\x3a\xe3\x99\x93\x62\x15\x83\xea\x4b\xa8\x5e\xcd\xca\x39\xcf\x3d\x9e\x29\x59\x1b\xf7\x93\x02\x01\x55\x84\x48\xa6\x34\x11\x5a\xe6\x76\x55\x44\xe6\x41\x10\xf4\x8f\x9e\x32\x9d\xbb\xe0\x85\xcb\x6b\x6e\xbd\x16\x18\x18\xee\x84\x25\xe2\xa2\x89\xb0\x3f\x4a\x9c\xbb\xbd\x0f\x22\x9f\x83\x50\x91\x70\x9a\x0c\x1d\x1b\x2e\x28\x0b\xf3\xf5\x9a\x4a\x30\xa9\x19\xb2\xf2\xdb\xb3\xf0\xaa\x4a\x56\x22\x86\x1f\x80\x97\x83\xfb\x05\xfc\x8c\xc7\x60\xfd\xd4\x57\x63\xc8\x6b\x99\x29\x34\xd2\x41\xbf\x82\x84\x17\x70\x28\xbb\x37\xcf\xc4\x3d\x6e\x81\xd1\x7d\xdf\x4d\xa8\x85\xa6\xef\x6f\x47\x16\xcd\x9e\xdf\x59\x35\x22\x43\xdc\x79\xd0\x2b\x87\x1b\x08\x91\x52\x00\xbf\x4e\x73\x91\x31\x9b\x02\xd6\x35\xd6\x55\x1f\x54\x75\x07\x5c\xb3\x2e\x25\xa0\x68\xd8\x6f\xcd\x3a\xdf\xca\x69\x25\xee\xb0\xfd\x25\xab\x6b\xef\x0e\x60\x0d\x69\x2c\xee\xcc\x2b\xf1\x38\xdb\xde\xb5\x0c\x38\xba\xba\xe1\x85\x6e\x0d\xf6\x97\x2a\x92\xab\x2b\x59\x40\x0c\x71\x8c\x86\x3e\xb5\x8f\x34\x8b\x0e\x4e\xee\x56\xd8\xf6\x6c\x78\x4c\x98\x55\x2d\xf5\x52\xa3\x74\x25\xcc\x3f\x3e\xd3\xdb\x9e\xdd\xa2\x53\xbd\x4f\xed\xc4\x56\x00\xc8\x11\x6e\x8f\x6a\x96\xce\x0d\xce\xca\xd9\x9c\xaf\x04\x2d\x67\x4f\x4c\x28\x16\x83\xfb\x11\x5a\xe0\x0f\xc6\x77\x41\x40\xd7\xc2\xb6\x0b\x20\x13\xe2\x74\xb6\x9b\xd7\xf5\xfd\x9e\xef\x04\x4d\xa6\xeb\x70\x25\x53\x79\xa5\x77\xad\xbb\x9d\x8c\xd6\xe1\x65\x92\xad\x0c\xbe\xfb\x8e\x1f\x2c\xbb\x14\x8d\x8e\x19\x30\xa4\x76\x3c\x2f\x92\x2b\xa8\x63\x8b\x87\x30\x05\x37\x23\x1a\x65\x5c\x8f\x49\x84\x23\xc4\xed\xd8\x46\x09\xf7\x41\x00\x22\x18\xe9\x03\x08\x01\xc6\x41\x95\x71\x4d\xc5\xcb\x5d\xbc\x94\xd1\xca\x80\x9a\x84\x04\x14\xaf\x9c\x6e\x44\x85\x3c\x0c\x35\x97\x62\x36\x67\xee\xeb\x9e\xe7\x55\xa6\xc4\x84\xaf\xf5\xb6\x50\xed\x82\x60\x74\x36\x12\xc2\xdc\x35\xbe\xfa\x2b\x1e\xb3\xba\xee\x9b\x63\x04\xc1\x80\x89\xc6\x8e\xc7\x8c\xf1\xb5\x7e\xa0\xfb\x59\xff\xda\x9a\x96\x8c\x2f\xed\x8c\xb6\x33\xb4\x9d\x20\xb0\x3b\xb4\x38\x3d\xdd\x58\x03\xfe\x4d\xbb\xbd\xe3\x31\x9f\xf0\x25\x8b\x0c\x7f\xb1\x04\xcd\x3e\x0c\x07\x2e\x48\xfd\x91\xde\xc9\xc1\xbf\xb1\x30\x9b\xa3\xb3\x20\x68\x2d\xd3\x20\xf0\xd7\x8f\x85\x3e\xfc\xca\x29\x9b\xac\xe9\xff\x68\xd6\xe2\xeb\x0e\x4e\x3e\x18\x5e\x41\x8b\x87\x27\x2f\x04\x45\xe0\xa5\x28\x21\x16\x51\x27\xdc\xcb\xe7\xcf\x21\x23\x63\x3b\x87\x3e\x7f\x0e\xe9\x34\x0a\x1f\x7f\xfe\x1c\xd6\x8c\xb0\x31\xa1\xfa\xea\x11\x23\x00\xc0\x2f\x36\x1e\xda\xd0\x39\x5b\x8a\x0d\x80\x0d\x25\x41\xb0\x1d\x09\xb1\x0c\xed\xc4\xaf\x6b\x00\x15\xd7\xa3\x0a\xe9\x38\xec\x65\x10\x8c\x4a\x9c\xbf\xcb\xd0\x4d\x5f\x56\xd7\x45\x10\x14\x90\xaf\x74\x51\xec\x28\x79\xfc\x18\x0c\x8f\xea\x7a\xd4\xa4\xeb\x29\xbd\x69\x61\x0c\xf9\x65\x3a\x53\xe6\xe4\x84\xaf\x8d\xfa\x25\x08\xec\x55\x33\x2b\xd9\x51\x1c\x04\xa3\x4d\x73\x36\xa8\x59\xd3\xb8\x58\xe5\x37\x99\x5b\x12\x36\xc1\x96\x5a\x71\x8f\x52\x2e\x7c\x1b\x33\x2a\xf9\xae\x79\x68\x0f\x4c\x60\x19\x36\xb8\xb4\xbb\xe3\x24\x3b\xae\x98\x1d\x4b\x77\x0c\xb1\x1b\xeb\x49\x01\xd3\x74\x34\x61\x47\xdd\x63\xf7\x0a\x66\xa4\xcb\x4d\xf0\x25\xc7\x38\x21\x09\xdb\x83\x27\xc9\xae\x67\xa2\xdf\x72\x7e\xd2\xd3\xde\x4d\xa2\x75\x72\xab\xf7\xce\x0a\x74\xc7\xc8\x68\x77\xcf\x27\x80\x2a\x1b\xd1\x0f\xf0\x0c\xec\xdb\xc0\xbb\x70\x56\x22\xa2\x14\xcc\xab\x65\x6f\x72\xba\xa7\x46\x3b\xab\x25\x0d\x51\x72\x25\xce\xce\xd5\xd3\xee\x9b\x00\xf0\xa1\x9a\x29\xcf\xf2\xd3\xc4\x94\x2c\x9b\x39\x0d\xf0\xf6\xa8\xeb\x1f\x2d\xc3\x5d\x21\x5f\x98\x2f\xae\x6b\x18\xaa\x56\x9a\xe7\x19\x5c\x3a\xf9\xcb\xb6\xd1\x10\x9e\xd2\xcf\xc4\x53\x84\x9f\xa0\x89\x88\x67\x6a\x3c\x9e\x33\x98\xa9\x49\xf9\xa1\xc8\x77\xf1\x15\x40\xe6\x5f\xa8\x7c\xb7\x93\x2b\xca\xce\xd1\x6c\x2c\x5c\x56\x45\x21\x33\x65\x9a\x96\x84\x32\x95\x5b\x9e\xe9\x5a\x72\x91\xb8\xd7\xcc\x32\xaf\xba\xd7\xdb\xad\x5c\x25\xb1\x92\xc3\xf5\x96\x61\xe1\x56\x05\x94\x68\x6e\xad\x2c\xe2\xaf\x1a\x5a\x9a\xb7\xbc\xbf\xfc\x55\xe4\xbc\x0c\xf5\x5e\x23\x72\xf8\x69\x6c\x62\x68\x21\x28\xed\x0e\x50\xee\x56\xea\x1c\xbd\x45\xb1\xa2\xba\xce\x6d\xc3\x99\xd9\xb1\xcd\x77\x55\x00\xd4\xaf\x39\x33\x5a\x86\x85\x2c\xab\x54\x09\x50\xf4\xa1\x67\xb2\xcc\xd4\x0b\x64\xd2\x29\xe3\x25\x9c\x12\x7a\x9f\x48\x3d\xeb\xb4\x65\xb8\xcb\x4b\x65\x47\x2a\x08\xda\xf7\xad\x91\xe3\xf6\x4d\x60\xc7\x82\xdd\x79\xd8\x28\x00\x26\xf8\x6c\xce\x2b\xa1\xda\x64\x80\xa7\x42\x86\x18\x1f\x01\xe0\xa5\x83\x20\xf5\x4f\xfd\x29\x01\x09\xc0\x07\x7c\x97\x21\x22\xca\x7f\x2b\xce\x8c\x25\x5e\xaa\x39\x9b\x4d\x52\x9e\xa7\x22\x6d\x79\xda\x82\x8e\xce\xe0\x0c\xf9\xd5\xda\x5a\x47\x0d\x4c\x3d\xd8\x6b\xa6\x2e\x96\xb3\x99\x98\xc6\x2b\xf1\x7e\xcf\x11\x9c\xbd\x02\x7d\x8c\x53\xf3\xc4\xb3\x44\x8f\x20\x60\x3a\x3a\x4a\x67\x43\x7b\xc6\xb3\x64\x2e\x8a\x16\x77\x30\x5d\xd0\x04\xa1\x0e\x8c\x8b\x7f\x0a\xbe\x6c\x06\x4f\x05\x1f\x99\xc0\x9b\xa9\xdb\xa9\x18\xd7\x35\x05\x81\x73\xf2\x3b\xca\x1d\x55\x2c\x0d\x4a\xa6\x9e\x05\x51\xda\x8c\x43\xbe\x77\xf6\x09\xa9\x71\x3f\x79\xaa\x7e\xb7\x94\xb2\x58\x77\x00\xe9\x09\x2c\xb4\x9e\x27\x9d\x51\x1d\x36\xa5\x5b\x84\x40\x68\x1b\x7b\x3e\x2e\xf9\xbd\xcc\xaa\xad\xb4\x56\x74\x5d\xab\x3a\xb0\x6e\x03\xc7\x03\x8f\xc9\xb7\x26\x21\x7a\x01\x24\x59\x9c\x42\xa5\xee\xec\x7f\xe8\x59\xeb\xf4\xe6\xe1\xe2\xbd\x27\x33\x39\xef\x58\xf5\x1d\xfc\x3e\x73\x90\xfb\x3b\x9f\x74\x53\x24\xca\x5e\x1b\x63\x42\xd0\x0d\xef\xf9\x3a\x19\x46\x54\x98\x39\xe3\xc8\xf9\x54\x46\x9a\xe2\x9b\x9e\x04\x23\x21\x43\x11\xa2\xfb\x34\x8f\x57\xd1\x7d\x96\x7f\x57\x5d\x1a\x9b\x44\x13\xe3\xe3\xde\xb0\xf7\x03\xbd\x30\x12\xe2\x3d\xc4\x4c\x40\x4c\x05\x9d\xbd\xd5\x15\x6b\x8c\xf1\xc1\x47\x67\x7b\xde\x62\x4f\x08\x3c\x49\x32\xb2\xe7\x97\x69\x55\x3c\xf4\x0e\xd1\x7a\x87\xce\xdd\x7a\x85\x4e\x38\xfc\x86\xbc\x52\x64\xcf\x61\x29\x1e\x7a\x07\xb1\x8a\x74\x30\x81\xd0\x55\x22\x11\x40\xab\x47\x5d\x32\x08\xbe\x98\x3d\xd0\x2a\x65\xfc\x06\x40\x16\xd3\x02\xa7\x4a\x1e\xf6\x9b\x37\x54\x88\x93\x18\x36\xed\x4b\xb9\xce\x0b\x59\x65\xd8\xf3\x3e\x19\x6c\x6f\xe3\x8d\xb2\x18\xc9\xa1\x26\x50\xad\x49\x06\x36\x82\xad\x94\x10\x5f\x0a\x1a\x13\x57\x8e\xed\xf7\x7b\xb4\xd2\x77\x5c\x4b\xcf\x26\x79\xd0\x6e\x5e\xbf\x70\xc8\x9c\xde\xd8\x78\x85\xfd\xaa\x2c\x5a\xe6\x26\x29\x5b\x60\x3d\x98\xb5\x81\xc4\xf4\x27\x23\x57\xe0\x9b\x87\xe4\x72\x3a\xb0\xca\x2c\xba\x0d\xd8\xf2\x62\x36\x4c\x48\x4a\xb3\xf9\x7c\xc0\xad\x48\xae\x84\xc3\xee\x73\x49\x36\xea\x20\xd0\xf9\xee\x43\xb3\xb7\x49\xbf\xdf\xa6\xb7\x32\xba\xb0\xaf\xc4\x4d\xde\x8e\x60\x10\x7c\x83\xdb\x05\xdc\xf9\x31\xda\x4d\x4a\xb3\x45\x44\x6e\xd4\x71\xb6\xb4\x98\x06\xd9\xbe\xc7\x2c\x80\xdb\x29\x57\x2e\x4b\xeb\xde\x1c\x22\x61\x17\x70\x85\x72\x22\xc8\x9e\xa8\xb0\x30\xe0\x03\x2a\xd9\xca\x0b\x15\x6f\x77\x02\x7b\xd4\xde\xd6\xf5\x8b\x58\xc9\x30\xcb\x6f\xa8\x81\x52\x69\x88\x83\xd0\x4b\xbe\x47\x64\xc5\xbd\x87\xc9\x14\x99\xc7\xbc\xdf\xe3\xba\xab\x86\xf8\x25\x4c\x7f\x80\xf1\xc1\x0c\x17\xc9\xb6\x82\xcf\x8c\x46\x67\xbc\xcd\x51\xf4\xdd\x49\xfb\x53\xe3\xe8\xd0\x3c\xb8\x95\x5c\x6f\xf2\xe6\xb1\x7b\x0b\xc4\xe6\xe9\xf0\x2d\x7b\xde\x61\x5b\xfe\xc8\x8b\xfb\xdf\xf5\xd0\xab\x7b\xfc\x11\xbe\x7b\xa8\x97\xfe\x48\x23\x1e\xe8\xe5\xdf\x6b\xcd\x50\x51\x33\x45\x06\x5a\xbb\x77\xa8\x33\x71\xaa\xfe\x2a\xef\xf4\x66\x74\x09\xfb\x06\x60\x3b\x2d\xf5\x72\x4f\xdd\x0e\xb6\x89\xb3\x2b\xb9\xfa\x94\x57\x80\xab\xad\x53\x54\x91\x9a\x52\x2b\xa9\xe2\x24\xd5\x57\x30\x18\x1f\x36\x71\x09\x85\xb6\x52\xc5\x26\xcb\x2e\xbe\x92\x3f\xdb\x8b\x5f\xf4\x05\x58\xa8\x99\xa7\xd7\x89\xbc\x31\x6f\x29\xec\xef\x73\xbd\xee\x46\x13\xfe\x05\xb3\x7c\x91\x77\x36\xc5\x84\x20\x72\x57\xd8\x9c\x34\x91\x99\xfa\xb9\xb9\x84\x97\xe4\xeb\x75\x29\x31\x15\x2f\x21\xd5\x28\x93\x5f\xaf\xbc\x1b\xd8\x6f\x74\xb3\x96\x85\x94\xd9\xcf\xcd\x25\x94\xc0\xd5\xef\x7d\xbd\xca\x8d\x0e\x18\x6f\x5c\xfa\xcd\x26\x19\x12\xe0\x84\xe5\x46\x8f\x3a\x78\xa3\x90\x3f\x08\x16\xd2\x86\x5a\x02\x74\xde\xa9\x71\x8c\x0c\x6d\x47\x4c\x9b\xcb\x48\x86\xae\x2f\x5c\x79\xdf\xe0\xfb\xa6\x53\xd7\x59\xa0\xa6\x67\xd1\x93\x40\x4d\xbf\x89\xfe\x1c\xa8\xe9\x93\x68\x12\x99\x82\x38\x07\xac\xba\x54\x4f\x8f\x06\x8a\x08\xf4\xee\x7a\xfd\x15\x11\x81\xeb\xfc\x5a\x16\x84\xc3\x65\x2a\xe3\x6b\x69\x93\x2b\x45\x6c\x27\x9a\xec\xe6\x0e\x0b\x98\x1b\x53\xc4\x3e\x82\x2d\xbd\xbd\xd9\x74\xc5\x1b\x39\x17\xf7\x2d\x6e\x40\x71\xab\x0e\x89\x94\xe1\x46\x7b\x3d\x0d\xbe\x01\x6d\x6a\x0b\x38\xe8\x4e\xc6\x72\x20\x84\xa0\x5e\x47\x66\xa1\xae\xbb\x88\x60\x05\x00\xcd\x63\x0f\x8a\xc4\xc9\x59\x3c\x6b\x84\xc2\x61\x95\x35\x37\x65\x00\xc7\xb8\x67\x86\xd8\x0a\x9c\x65\x2d\x90\x4c\x83\x9e\x35\x56\x80\x90\xbe\xe7\x79\xd6\xd7\x80\x1d\xca\xce\xcf\x74\x81\xf5\xfa\x90\xe3\x09\x18\xc7\xf6\x09\xa6\x4e\x71\x5d\xe3\xa2\xfd\xfb\xfd\xc5\x17\x54\x76\x24\x78\x54\xdb\x17\x8d\x18\x3b\x2d\x5c\x0f\x8d\x49\x48\xc6\xde\xa3\xa8\x79\x04\xa1\x11\x50\xf6\xe1\x85\x93\x50\x81\x3a\x0d\x1e\x8e\x98\x00\x1e\x80\xd3\x27\x19\x12\xcc\xf5\x1a\xb0\xa4\xe5\x01\x3c\x3e\xd0\x22\xa8\x20\x68\x9c\xd5\x1b\x9c\x51\x80\xc6\x50\x5c\xb9\xb3\x14\x60\x16\x32\x50\xd8\x5f\x18\x4c\xb2\x83\x87\x09\x2d\xa3\x64\x9e\xa1\x0d\xb4\xb1\xe5\xf8\x02\x06\x1b\xd3\x51\x5c\xc8\xb8\xbe\x2c\xea\x65\x9e\xd6\x72\x7b\x29\x57\xf5\xa6\xa8\x93\xed\x55\x0d\x0c\x67\x9d\x26\xd9\x97\x5a\x53\xc4\x7a\x17\x17\xf1\x96\xd1\xc3\x36\x1e\x8f\x11\x26\x92\x7d\x3e\xfd\xf6\xf4\x2a\xe1\x6f\xf5\x0b\xf0\xbc\xb3\x7e\x0a\x46\x33\xf5\x53\x5d\xdb\x69\xc2\x3f\x49\x71\x6a\x0e\xed\x3e\x97\x8f\xe9\x34\x9a\xfd\x53\xcc\x6b\xf1\xb9\x7c\x6c\xcf\xf2\x42\x76\x9a\xf0\xe7\x52\x9c\xfe\xf3\x73\xf9\xf8\xe9\x88\x4e\xa3\xcf\xb3\xe7\x2f\x9e\x7d\x7a\xf6\x79\x56\x9f\x9c\xb0\x5a\x27\xcc\x3f\xcf\xf5\xf5\xb7\x9f\xcb\xc7\x8f\x7c\xd7\x8e\x8f\xb2\xe5\x4d\x84\x98\x50\x7a\x47\x20\x4c\xb3\xd3\x7d\xf0\x31\xe5\x03\x56\x11\x55\xe8\x7c\x00\x3b\x6a\x81\xab\x28\x01\xab\x02\xc2\x66\x93\x79\x5d\x7b\x40\x48\x1f\xda\x11\x90\x60\x0d\x51\xa4\x82\x87\x02\xb6\x8d\xc9\x29\x19\x1b\x0e\xd2\xab\xe9\x9d\xec\x78\x80\x9c\xa2\xa9\x63\x73\x02\xec\x62\x8c\xfc\x07\x9b\x4a\x9f\x11\x75\xd6\xfd\x91\x65\x95\x7b\x6f\xf5\xdf\xf4\xab\x1c\xd4\x5f\xf0\x0a\x51\x1a\x3a\x91\x1e\x35\x33\xdd\xd6\x4f\xd3\xdc\x33\x35\x67\x3c\x16\x68\xc0\x01\xa7\xde\xa9\xc8\x9d\xae\xda\xad\x02\xa3\x8f\x8c\xcd\xe2\xe1\x71\x73\x00\xc4\x53\x83\x6c\x34\xe1\x85\x48\x67\xc9\xbc\x6b\x1c\xd2\x3a\x16\xe3\x09\xd7\x79\x66\xd9\x9c\x1d\xfd\xd8\x6e\x53\x29\x7e\xf4\xda\x54\x09\x1f\x8b\xa9\x64\xdc\x78\x02\x20\x88\x81\xeb\x89\xd7\x9e\x41\xa5\x12\xf6\x34\x6f\x36\xd7\xd2\x80\x35\xb0\x6c\xec\x3a\x26\x7c\xd3\xb8\x76\xee\xc4\xe6\xe4\x8c\xdf\x01\x4a\x2f\xbf\x16\x5b\x7a\x07\xfa\xfa\xeb\xba\x06\xd0\xae\xde\x19\xe5\x5d\x10\x8c\xfc\xc3\xed\x20\xf8\x64\xf6\xbb\x3b\x0f\xf3\xbb\xbd\x8e\x1d\x1e\x87\x0c\xe5\x6f\x34\x61\x47\xd7\x41\x40\x21\xc6\xea\x9d\xa7\xab\x4a\x78\x0e\x56\x16\x94\x31\xc6\x5f\x4b\x9a\x5b\x42\x0c\x0d\xda\xc0\x78\xd1\x44\x5c\x49\xaa\x09\xd0\x64\xde\x31\x55\x18\x9d\x71\xa9\xf7\x0d\x7f\x09\xc0\x51\xa9\x67\x7e\xe1\xbb\xb0\xe4\x8c\xe7\x75\x5d\x18\x0d\x52\x25\x68\x69\xc0\xd0\x76\x92\x26\x9e\x7d\xc3\x07\xe9\x02\x20\x9c\xaf\x9f\x6e\xce\xd7\xe3\x31\x4b\x45\xc2\xd7\x23\x21\x76\x10\x2b\x60\x81\x67\xee\x34\xe5\xe0\x50\xcc\x78\xa5\x25\x0a\x34\xff\x28\xf9\x4e\x3f\x70\xd5\x31\xc6\xad\x1e\x7c\xb6\x9e\xf3\x94\xaf\x19\x86\x6b\x43\xdb\x89\x72\x56\x36\xf8\xb0\x9d\x0f\xc4\xd6\x95\xfc\x9d\x64\x7a\x10\xcf\xd7\x4f\x2b\xd3\x98\x52\x57\x65\x4d\x2d\x52\xdf\xd4\x62\xe4\x26\x78\xda\xb6\x3b\x6a\x99\x13\x2f\x79\x0a\xb1\xa2\xc2\xb2\x58\x06\x01\x41\xab\x36\x32\x12\xc2\xaf\xac\x03\x5b\xbf\x08\x17\xf2\x3a\x4e\x7f\x2a\x52\x5d\x95\xbd\xc6\x3a\x58\x74\xa5\x4b\x36\x26\x2a\xce\xd1\xec\xb9\x04\x2c\x7a\xfd\x42\xa7\xf9\xf2\x56\xf4\x0b\xd9\x43\x2a\xe7\x89\x50\x53\x1f\x71\x9a\x45\x92\xe7\x62\x72\x6e\x22\x96\x14\x68\xb8\x88\x26\x8e\x75\x7d\x36\xf2\xd1\xa3\x81\xb1\x48\x65\x9c\xc1\xfa\xda\x61\x34\xb3\xa2\x15\x5e\x94\x66\xad\xae\x28\xba\x36\xae\x0c\xcc\x5b\x74\x51\x6f\x10\x5b\x75\xb4\x8c\x53\xbd\x70\x50\xd2\x77\x3e\xf3\xad\x87\x86\x63\x9e\xda\x2e\xfa\x22\x39\x79\xfa\xe8\xec\xdb\xa7\xa7\x8f\x9e\x7c\x4b\x10\x0b\xb5\xc7\x88\x38\xbe\xa2\x15\xb7\xa8\x63\xfc\x01\xa7\xad\x0f\xd8\x8c\x23\x94\x4d\xd7\x8a\x04\xfb\xd0\x07\x61\x3f\x6b\x27\xa0\x87\x25\xe2\xd3\x53\xc9\x90\x3e\x82\x95\xd0\x92\x19\x70\x56\x9a\xeb\x5b\x6f\xe1\x58\xb8\xd5\x52\xe4\xb3\x02\x42\x7a\xe9\x9f\xd4\x02\xb5\x34\xe1\x04\x68\x2a\xaa\x43\x11\x05\x82\x20\x35\x73\xbc\x34\xac\x75\x65\x77\x59\x51\xda\xab\xc8\xd4\x85\x96\xdc\xc4\x9a\xcb\xc0\x7d\x5d\xd3\xaa\x65\x07\x23\xca\xd6\x2d\xf4\x88\x02\xb4\x57\x86\x6a\xe5\xbc\xae\xe1\x43\x38\x98\x9e\xf9\x9f\x98\x77\x3f\xed\x57\x49\xe1\xdb\xf4\x97\x19\xeb\x2a\xd8\xa0\x96\x76\x42\x98\x3e\xf2\xa6\x91\x17\x57\x66\x25\x69\xcc\x47\xeb\x20\x00\x5b\x49\x6f\xa6\x2d\xd1\x07\x24\xeb\x79\x71\xf9\xc1\xd5\x0a\x30\xa1\x6e\xb1\xef\xb0\x46\x7c\x4f\x33\xe9\x96\x49\xb2\xa6\xdf\xd3\x8c\x19\x20\xe8\x6c\xf6\xa8\x71\x76\x85\x24\xbb\xf1\x35\x8e\xcf\x36\x25\x99\x15\xf3\x69\x87\x27\x83\x58\x68\xed\x53\x3c\x30\x8e\xb1\xa7\x78\x47\xfe\x0b\xcc\x80\xef\xb3\xd9\x8f\x9e\xf3\x33\xf5\x6f\x2d\x7f\xd8\xe7\xde\x57\x10\x46\x64\x68\xf5\xbc\x70\xac\xe1\xf0\xe9\x75\x3f\x23\x1b\x88\x71\x6b\xf2\x74\x3d\xfd\x64\xdf\xdf\x5a\x4e\x31\x66\x03\x5a\x17\x1b\x93\x64\x88\xfe\xcb\x7a\x2c\xec\x99\x39\xf5\xe8\x2e\xa8\x4e\xda\x7f\x75\x93\xea\x1a\xb5\x77\xbe\xa5\x9f\x6c\x5c\xff\x64\xcf\x19\x8a\xed\x39\x5a\xa1\x0d\x58\x61\xbf\x96\x1d\x41\xa9\xf5\x79\xff\x7e\x13\x3f\xba\xfe\x6c\x59\xc0\x61\x3b\x77\x85\xfc\xb7\x9a\x63\x79\xb7\xf6\xab\xce\x06\xd2\xfe\xab\x9b\x64\xc5\xfd\xa6\x5d\x47\x2a\x4c\xb2\x52\x16\xea\x3b\x50\x14\x6b\xf2\xd9\x82\x69\xd5\x0d\x45\x1d\xf2\x1f\x6e\x27\xbc\xd9\xdf\x4b\x3a\x09\xbd\x17\x23\x1a\xf8\x9e\xc7\x6b\xd5\xd6\xa0\xff\x5f\x7b\x5d\x2b\xb8\x86\x7e\x75\x0f\x83\xd1\x41\x74\xc3\xd9\xad\xd9\x54\x51\x3f\x36\x53\x73\x06\xe7\xca\xdd\xa8\x1c\xb4\xb3\xab\x4a\x88\x02\xa0\x45\xef\x96\x55\x6a\x5b\x42\x1c\xd8\xc7\xbc\x08\x15\x46\xe1\x12\x04\xd2\x00\x7e\x08\xa1\xa6\x32\x32\xda\x5c\xcd\xf8\x0c\x3a\xff\x00\xdf\xd5\xf2\x8b\xd5\x3b\xed\x57\xae\x6a\x9c\x2a\xc6\x71\x10\x0c\x41\x90\x7d\xf7\xbc\xe0\xda\xae\xd0\xbd\xe8\xf1\x0e\xde\xc3\x59\x6b\x0e\x42\x4a\xc8\x20\x18\xbd\x95\x0d\xce\xed\x68\x23\x67\xce\x3c\x59\x3e\x64\x9e\x3c\x67\xf7\x52\x74\x8d\x8f\xf5\xa4\x2e\xee\x10\xdb\xdd\x8a\x17\x70\xa8\x6c\x3e\x26\x33\xc7\xd1\x87\x07\x4c\xe1\x80\x79\xed\x16\xba\x52\x31\xf1\xbc\xeb\xf7\xca\xcc\x30\x4b\xd8\x70\x81\xc3\x79\xd7\x61\x0a\x64\xb8\x98\x36\x44\xa6\x55\xba\xce\x9c\x7b\xd0\x03\x33\xbd\xf1\x60\x6d\x4f\xef\x23\x0f\xab\x14\x97\xf6\xd3\xc9\xc0\x97\x41\xa8\x0c\x0e\x86\x33\xa6\x2d\xc6\x50\xdc\x44\xd1\xd8\x6b\xda\xef\x21\x7e\xe3\x57\x7d\xca\x23\x82\x57\xc4\x92\x2d\x9d\x64\x2e\x09\xf7\x97\x56\x44\x90\x5e\xd8\xd4\x67\xb0\x9a\x09\x2c\x6a\x62\x3b\xe0\x59\x9a\x46\xc4\xeb\x8c\x01\x6d\x5b\x07\x94\x59\xb6\x5c\x94\x30\x40\x0f\xc0\xd9\xe4\x2e\xfc\xd7\xc9\x19\x8f\xc5\xe4\x3c\x7e\x2a\xf2\xf3\x58\xf3\xbb\x10\xca\x2f\xf7\xbc\x5c\x71\x41\x68\xde\x6f\x41\x93\x59\x3c\x67\x33\x35\xa7\x19\xe3\xa5\x11\x09\x0b\x9e\x21\xac\x7a\x6b\x6d\x7a\x30\xcb\x85\x53\xab\xbc\xe9\x3a\x45\x5a\x47\xc8\xe9\x68\x77\xcb\xd0\x1b\x72\x6c\x9d\x21\x5f\xb5\xcd\x1c\x6d\x28\xc4\x16\xc7\xe9\x58\xad\x44\xde\x78\xf1\x60\xb2\x30\xdf\xc9\x4c\x16\xa0\x1f\x92\x0c\x1b\xf8\x3c\xdf\xee\x2a\x25\x57\x17\xe0\x01\xa7\xd8\x9e\xff\xab\xd5\x9c\x4c\x1a\x4b\xab\x9a\x30\x68\x41\xa3\x34\xf9\x41\x0e\xb2\xc8\xd6\xa1\xd1\x32\x63\xe0\x4c\xf7\x0a\x98\xd4\x20\xa0\x04\xa4\x9d\x58\xc0\xcb\xed\x61\x32\xf0\x84\x54\xb1\xba\xce\x34\x29\x6c\x69\x29\xfb\xdc\x34\x18\x7d\x7a\x3e\x7b\x8c\xf1\xd1\x2a\xdc\x25\xb7\x32\xfd\x2e\xbf\x85\x0f\x29\x29\x0b\x82\x37\x86\x10\xc4\x2c\x08\xfe\x65\xae\x15\x02\x1c\x94\x21\x84\x16\xe3\x89\x28\xc3\x6d\x92\xfd\x1d\x6e\x72\x7d\x13\xdf\xe2\x4d\x93\xee\xa5\xda\x72\x22\xe6\xfa\x0b\x6e\x4c\x4e\x4c\x2b\xfc\x32\x09\xf7\x4a\xe5\xcc\x03\x7d\x89\xa7\xf1\x98\x90\xc8\x8b\x0f\xfd\x5d\x4b\xf9\x74\xdf\xc2\xb8\xc1\x93\xc9\x26\xca\x97\xc3\xeb\x17\x8a\x1d\x00\x0c\x35\xba\x13\x9b\x71\xbf\xdf\xb7\x02\x45\xd8\xb7\x2a\xac\x7b\xc9\xee\x53\xe3\x9f\xb6\x2c\xcb\x4f\xf2\x56\x09\xb2\x33\x31\xe1\xa2\xf8\x12\x10\x33\xe5\x79\x2a\xd7\x2a\x3a\x39\xd3\xff\x76\xb7\xe7\xf0\xbd\xd1\x7f\x4e\x76\xb7\xe7\xdb\xb8\xb8\x4a\xb2\x13\x95\xef\x22\xfd\x64\x17\xaf\x56\x49\x76\x15\x4d\xce\x2f\xf3\x62\x25\x8b\x68\x42\x00\x43\x72\xb8\x7a\x1b\xf2\xef\xdc\x78\xc6\x45\xe0\x5d\x78\x7e\x99\xdf\x9e\x94\xc9\xbf\x74\x3d\x58\xcb\xc9\x65\x7e\x7b\x9e\x5f\xcb\x62\x9d\xe6\x37\x51\x09\xc0\x5d\xe6\xcd\x51\x5c\xa9\xdc\xbe\xcc\x6f\x81\xdf\xce\x3f\x9d\x43\xfb\xfe\x44\xf8\x65\xdb\x7f\x20\x6d\x33\x53\x4b\x83\xc0\x8d\x7a\xb8\xf6\xca\x58\xb2\xa3\x44\x90\xb3\x3f\x11\x34\x1a\xce\x77\xbc\x12\x67\x4f\x84\x10\x19\x55\x21\xb6\xe5\x8d\x5c\x2b\xe6\x3e\xb7\x48\xae\x36\x4a\x90\xff\x9c\xfc\x89\xf0\x52\x7c\xf3\x9f\x26\x2b\x24\x6b\x52\xe3\x52\xa0\x95\x4d\x39\xdb\x3b\x82\xd8\xde\x27\x3c\xc6\xdc\xcb\x10\x8f\x76\x60\x56\xd5\xb5\x97\xe1\xb2\x2d\x1b\xa7\x8c\x2f\x11\xbf\xb5\x99\x65\xfe\x16\x8d\xe1\x4b\xf3\x2a\x5b\x51\x00\x7d\x79\x95\xe6\x31\x44\xec\xd8\x3b\x27\x61\x14\x75\xfb\x8e\x1e\xe0\x04\xc2\x97\x07\x1e\x1c\x2d\x9d\x33\xa7\xfd\x9e\xcb\x78\xf9\xe5\x0a\xde\xf5\x3c\x4d\x76\x82\x18\x64\x7d\x3d\xa6\x7a\x6e\xb4\x9d\x28\x86\x8b\x10\xbe\x82\xbd\xa7\x00\xe9\x19\xc6\xa3\x5d\x0f\xf4\xcd\x50\xd9\x06\x4f\x63\xc5\xef\x2f\xf3\xdb\x0b\x98\x56\x1f\x65\x9a\x1c\xc0\xbd\x06\x70\x8a\x3d\x6f\x13\x93\x03\xf9\x4a\x93\xcf\x86\x50\x3c\x90\x2d\xd1\x7b\x35\xbe\xf0\xad\x9b\x27\x07\xf2\x56\x7b\x8e\xd3\x1b\xdb\x7a\xa8\x85\xf1\x7e\xcf\xd8\x9e\x51\x03\x30\x07\xbe\x20\x59\x9e\xc9\x1a\x74\xd6\x74\x3a\x3a\x59\xce\x64\x3c\x67\xe1\x98\x9d\xf2\xdf\xf4\xe3\x93\x93\x53\xfe\x77\x29\xee\xdd\xda\xf3\x26\xcf\x75\x52\x26\x97\x49\x9a\xa8\xbb\x88\x6c\x92\xd5\x4a\x66\x84\xdb\x15\x69\x1c\x7e\xf7\xfc\x6f\x52\xdc\xa7\x52\x29\x59\x5c\xec\xe2\xa5\x5e\x61\x64\x42\xf8\x3a\xcf\xd4\xdf\x21\x56\x63\x44\xfe\x3c\x99\x90\x3d\xff\x45\x8a\x19\xf9\xbb\xbc\xfc\x92\x28\xc2\xc9\xdb\xfc\x5f\x84\x93\x6d\x49\xe6\xfc\xfb\x01\xaf\x21\x98\x33\x66\xb7\x68\xd0\xd2\xa4\x17\x09\x47\x53\x0d\xbd\x4b\x94\x33\xd9\xc1\x39\x6b\x3d\x12\x1d\xa9\x46\x6a\x61\xfa\x7b\xd9\xf8\x6a\x38\x19\x5e\x60\x10\x74\x1f\x24\x6e\x6c\xd5\xe1\x67\x8c\x67\xe2\x17\xd9\xc2\xcd\x41\xe4\xe1\x5f\xe4\x2c\x9b\x8f\x15\x6b\xd7\xba\x07\x96\x52\x32\xae\x9a\x65\xf6\x48\x76\x62\xb2\x59\x33\xea\x26\x28\xd8\x14\x96\xdf\x36\xbe\xa5\x13\x5e\xcc\x9e\xcc\x4f\x68\x56\xd7\x13\xc6\xc6\xb4\x00\x57\x7a\xf0\x9b\x8f\xbc\x3a\x7f\x1c\x72\xb4\x11\x04\xa3\x63\x02\xfa\xc6\x59\x34\xe1\x88\x24\x38\xc1\x80\x59\x42\xd0\x62\x4a\x90\x2e\x92\xc8\x2e\x96\xc6\x16\x68\x82\x10\x5f\xf1\xd3\x3f\x9f\xc7\x63\xf1\x84\x11\x24\x61\xd6\xcf\xba\x1a\x3b\x70\x83\x6c\x9c\xc9\x59\x0c\xf8\x82\x09\x63\xbc\x98\x52\x57\x9b\xcd\x7c\xd2\x20\x21\x18\xf2\x4b\xda\x85\x6c\xed\xa3\x7e\x01\xd3\x44\xcc\x3f\x26\x7f\xc7\x88\x9f\x58\x8e\x45\x7e\x43\x06\xeb\x6e\x52\x01\x4f\xcd\xcf\xfe\x40\xcd\x51\xf9\x75\xf9\xec\x98\x01\x32\xcc\xb7\x00\x1d\x50\x8d\x85\x37\x7c\x70\xb9\x94\x49\x4a\xe5\x8c\x20\x71\x26\x63\xd5\x9f\x61\xca\xcd\xb0\xf9\x49\x7e\x52\x9d\x94\x27\xe1\x7f\x30\xa6\xd7\xbb\x1b\xe4\x9f\x3b\x13\x07\x38\x26\x9e\x08\xc3\x65\x15\x7a\xcf\x20\xcd\x7e\xd8\xc2\x9f\x70\x94\x8d\xf0\xd1\x99\xce\x1a\x0b\x08\xa5\x66\x39\xa0\x84\x75\x82\xa6\x26\x7a\x33\xd3\x5b\x27\xb1\xba\xe1\x58\xc4\x41\x40\x57\x61\x8f\x48\x52\x56\xd7\x49\x83\x92\xa1\xf9\x33\x4e\xb1\xac\x10\x22\xa9\xeb\x91\xb7\x85\x24\x0c\x70\x5b\xd2\xe4\x00\x40\x06\x36\x0f\xc3\xf8\x7e\x75\x8f\x71\x44\xac\xa4\x89\x68\xbd\x49\xaf\x99\xb1\x5d\x1a\x75\x4d\xf3\xa1\xf9\xce\x63\xf0\xa5\x18\xeb\x35\xd5\xf4\xf5\x3f\x5a\x3e\xb9\x9e\x75\xd7\x3f\xbc\xa0\xf7\x10\xa8\xce\xcb\xe7\x29\x99\x97\x65\x89\x78\x40\xf7\xb9\x26\x86\xea\x2e\xba\xef\x23\x13\x82\x86\xd3\x30\xe8\x30\x88\xc4\x64\x76\xe2\x3a\x60\x12\x64\x53\x72\x46\xa2\x0c\x8c\xdd\x1c\x4c\x46\x74\x1f\x67\xc9\x16\xec\x57\x5e\x2b\x59\xc0\x05\x58\x07\xa3\x8d\x65\x5a\x6d\x9b\xdb\x75\x92\xa6\xef\x4d\x33\xf4\x6d\x2a\x6f\xbf\x2f\xf2\x1b\x7b\x7d\xb1\x29\x92\xec\x0b\xdc\x35\xc4\x7a\x34\xe1\x7a\x8c\x7e\x70\x77\x79\x53\x01\xf2\x52\x70\xb1\xdb\xc4\x68\x73\x72\x93\xac\xf2\x1b\xb8\xfa\xd7\x6b\x88\x85\xa5\xaf\xf2\x7c\x0b\x76\x97\x96\x0e\x47\xf7\x7b\x0e\x73\x64\xe0\x2c\x1f\x0f\xe5\xbf\xe9\xe8\xbb\xff\x4f\xe7\xde\xcc\x31\x0f\xab\x84\x97\x00\x58\xc8\x2b\xf1\x9b\xe3\xe0\xc1\x42\x1a\x37\x8d\x64\x4d\x2b\xd8\x0d\xfe\x2a\xa9\x96\x46\x63\x9c\x72\x30\x38\x00\x35\xe2\xdd\x96\x9e\x3b\xba\x5b\x08\x71\x10\x90\x2b\xa9\x48\x02\x97\x8d\x16\x37\x11\xb1\x01\x70\xc2\x19\x3b\x4d\xa2\x74\xa6\xe6\x47\x8d\xc6\x41\xd0\xdc\x79\x13\xe2\x84\xb6\xa4\x3e\xd3\x13\x1c\x23\x09\xd2\x4c\x18\x08\x96\x04\xd6\x6f\x06\xa3\x4b\x18\x47\x2d\x8c\x16\xca\x90\x24\xda\x27\xc6\x97\x30\x1b\x43\x48\x80\x3e\xb2\x4a\xd9\x20\xab\xb0\x3e\x57\x54\xd7\x20\x5e\xe9\xed\x04\xd8\x54\x07\xee\xd6\x70\x45\x44\x8b\x4f\xfa\x53\x04\x49\xb2\x8d\x2c\x12\x58\x24\x41\x40\xca\x4e\x2f\x08\xd0\x65\xc7\x06\xf9\x2f\x33\x86\x22\xd5\x34\xd5\x29\x8d\x15\x30\xcf\x18\xf4\x8c\xc8\x10\x87\xbe\x87\xa1\xd9\x82\x9e\x31\xc3\x69\xb7\xc2\x66\x4c\xfd\x41\xa4\x0f\x8f\x22\x6b\x0d\x99\x3f\x52\x13\x9e\x39\x49\xcb\x41\x96\x38\xfa\x09\x60\x26\xc5\x36\x4e\x0d\x9c\x89\xd2\x3c\xc2\xdf\x24\x64\xfa\x1b\xd2\x35\x5c\x90\x75\x9d\x4d\x69\xde\x26\x36\x1c\xd0\x8e\xb3\xba\x4e\xca\x57\x9a\x2e\x48\x9a\xb3\x69\x5e\xd7\x93\x08\x61\xdc\x9d\x9a\x63\x46\x30\x76\x35\xe1\x66\x7f\x9e\xf7\xd4\x11\xde\xa7\x89\x2e\xdd\xb0\x8b\xc5\x85\x58\xfe\xc9\x74\x51\x1f\x6b\x08\xbc\xdd\xb4\x9c\x02\x46\x60\x1f\xe5\x52\x95\x2e\x2e\x9c\x5e\x4a\x57\x52\x7d\xa7\x47\x3c\xc9\xae\x9a\x2c\x94\xa1\xbc\x31\xfd\xd9\x76\x4b\x94\xe8\xab\xbf\xb7\xd0\xd1\xcc\xf0\xb8\x3c\x7b\xd6\xc3\x7a\xf5\xc7\xd5\xec\x55\xf1\x57\xee\x4f\x39\xe3\xa5\x28\x82\xc0\xd0\xee\x82\xc7\x9e\x6f\x6f\x1c\x04\xab\xb0\xc5\x03\x43\xa4\xe0\xdc\xc9\x45\x41\x40\xcb\x13\xf1\xef\x6c\xbc\xde\x80\xe6\x7a\xb8\x4f\x4c\x03\xec\xb6\x81\x6d\x83\x9d\x99\x97\xfd\x15\x6d\x50\x8b\x68\xd2\x30\x69\x60\xc9\x6c\xb7\x45\x70\x1e\xf6\x30\x8c\xf8\x23\x49\x27\x3c\xe3\xa5\x3d\x60\xb1\xe3\xee\x89\x8b\xe2\x3b\x49\x57\x61\x5f\x3c\xe0\x03\x5b\x89\x51\x00\x78\x5f\x81\xbb\x4a\x53\x5b\x33\x27\x06\x07\x5e\x0b\xf1\x27\x30\xda\xf7\x4d\x99\x68\xb2\x1f\x18\xf9\x87\x2b\xd9\x33\xb3\xa1\x7a\x36\x74\x28\x8d\x13\xc2\xad\x00\x4e\x08\x37\x62\xb9\x61\xa9\xfa\x7a\x39\xb7\x10\xe4\x58\x2f\x05\x3c\x97\x6a\x26\x59\x2b\x8c\xf6\x84\x27\xe2\x7e\xaf\x69\x68\xdf\x97\x3b\xb3\x9e\x88\xc7\x84\x45\xb3\x6c\x7e\x5e\x3c\xfd\x33\x9c\x14\x26\x33\xa9\xd9\xba\x62\xae\xeb\xcf\x67\xc5\xbc\xae\xf3\x59\x71\xf2\x04\x7e\x27\x1e\x62\xd6\xde\x67\x51\x8d\x1a\xd7\x6f\x9c\xa6\x79\xe2\x11\x00\xa6\xb7\x0e\xca\xba\xe4\xee\xb0\x12\xbc\xa3\x28\xd3\xdf\x12\x23\xb3\xde\x45\xeb\xc5\xaf\x6e\x18\x40\xeb\xa6\x72\x1e\x3f\x4d\x40\x19\x99\xcf\xd4\x2c\x9e\xcf\x9b\xb9\x06\xdc\xb0\xde\xa6\xec\x07\xe5\xfb\xae\xfb\x73\x36\xf5\x41\xae\x32\x16\x35\x13\x75\x0f\x96\x75\x7d\x78\x4b\xa3\xbc\xfd\x74\x23\x65\x26\xfe\x21\xb9\xcf\x1b\xb5\xcd\xac\xff\x21\xb9\xa6\x89\x03\x4e\xac\x5a\x5a\x41\xd5\x76\x2a\xb7\xd6\x20\x7e\x57\xe4\x3b\x91\x59\x33\xb4\x32\xc9\xae\x34\x1b\xb9\x30\xd7\x0d\x36\x08\x1a\xc2\x01\xf8\x4a\x29\x94\x35\xee\x8d\x0b\x65\x4f\xa2\x6e\x84\x35\x52\xb7\xb6\xbf\x32\x5b\x89\x02\x2f\x01\x81\x2b\xef\x6c\x9f\x59\xb3\x7d\xee\xf9\xb2\x2a\xfa\x9a\x73\xfc\xca\x9d\x21\xd0\xb6\xb9\x6e\xaa\x48\x43\x59\x11\x32\xc7\x9c\x4a\xfa\x65\x5c\xf3\x9b\xe7\x7b\x5e\x54\x03\xc1\x2a\x78\xf6\x7b\x2f\xf3\x3b\x20\x5c\x55\xc8\x06\x9a\x78\x9b\x79\x29\xb4\x0c\x8c\x7d\x36\xf3\xfa\x72\x6e\x0f\xa4\xba\x05\x1f\x4b\x3e\xe1\x67\xc3\xcf\xcc\xc9\x2a\xd6\x6a\x0f\xb4\xf2\x1b\x41\x6d\xaf\x9e\x34\xbd\xcf\x1e\xab\x71\x73\xd7\xae\xaf\x54\x72\x67\x0e\x33\xfc\xa4\xc6\xf6\x08\xdd\xf3\x6c\xfd\x36\xca\x6d\x10\x64\x7a\x85\x4d\x33\x87\xbe\x7a\xa8\x53\xdd\x73\x0c\x5c\xb0\xe7\x3d\x8e\xdd\x9b\xa4\xfe\x33\xee\xd7\x27\xee\x9d\xeb\x4b\x67\x03\x36\x63\xe3\xb0\x1d\x80\x41\xd5\x6d\xf6\xce\x42\xad\xc9\xb2\x4e\x9e\x61\xad\x73\x0b\x43\x61\x32\xe3\x9e\x60\x9e\x4d\xdb\x59\x23\xab\xbc\xa0\x98\xce\x31\x9d\x13\x80\x63\x44\xc9\x6a\x04\x90\x9a\x9a\x36\x97\x9d\xe6\x2d\xc2\xf5\x2d\xf4\xa9\xab\xbd\x97\x42\x25\x8b\x0e\x36\xbc\xd3\x44\x5f\x8b\x82\xa5\xe7\x00\xa4\xdd\x50\xbf\xc1\x6f\x00\xae\xfd\x26\x72\x34\xa5\xf5\x21\xf0\x6c\x0c\x61\xf9\xc0\x89\xa7\xd5\xf5\x66\x6f\xff\x94\xef\xc4\x40\x32\xec\x89\xf7\xdd\x6f\xee\x7c\x88\x5e\x82\x90\xd0\xb2\x2e\x1a\x6a\xa0\x35\xfd\x07\x1a\x73\xaf\x25\x9e\x78\xd8\x26\x68\xcf\xcb\x1b\xbd\x69\xf5\x9f\x85\xff\x71\x82\xbc\x46\x5e\x52\xf9\x18\x2e\x3f\xbc\x66\xa7\x4f\x3c\xef\x29\x02\x65\x09\x84\xb7\xbf\x15\xbd\x09\xc9\xdd\x00\x89\x7b\x84\x23\xff\x8b\xe4\x52\x71\xa5\x10\xf6\x05\xd1\xda\xea\x72\x93\xdf\xd4\x9b\x64\x25\xd9\xa3\x53\x9e\x29\x71\xda\xe0\x74\x3e\xf2\x60\x5d\x0a\x45\xd9\xbd\x54\x41\x40\x47\x18\xbf\x1f\x35\x76\xe8\xf3\xf4\x5b\x25\x4b\xf5\xcc\x4a\x8e\xaf\x0a\xc4\xf6\x1a\x4c\xa7\x85\x62\x51\x2b\xf8\x45\x61\x5a\x0a\x66\xeb\xd7\x71\xca\xf0\x56\x81\xbf\x98\x07\xf3\x97\x28\x9f\x4f\x18\x0e\x93\xf2\x17\x0b\x47\xba\x67\xfc\x2f\x52\x34\x5e\x3c\x4d\x35\xb9\xea\x87\x9a\xbe\x47\xde\x39\x92\xe8\x87\xad\x50\xb3\x65\xb6\x73\xf1\xe4\x44\xb1\x64\x66\x37\xea\x31\xcd\x04\xec\xed\x6c\x2e\x92\x99\xa7\x1c\x9a\x0b\x3f\x6e\x30\x4d\x42\x23\xdb\x8a\xc4\x1c\xd4\xe8\x5d\xb5\x69\x47\xac\x86\x2c\xe1\x68\xa9\x42\xa5\x77\x3e\x59\xa0\x08\x32\x9b\xb3\x70\x99\x67\xcb\x58\xb5\x1e\x91\xc7\x64\xce\x0c\xc0\x61\xd2\x05\x38\x04\x0c\xf8\x64\x96\xcf\x91\xfe\x65\x5c\x71\xe9\x34\x70\x45\xd3\x84\x52\xf5\xf9\x03\x5d\x61\xa9\x89\x99\x39\x8b\xf6\xd0\x62\x7d\x44\xd9\x10\x63\xe5\xf9\x7d\x6f\x7d\xf9\x61\x3d\xec\x59\x3b\x72\x68\xb2\xa6\x16\xc1\x66\x74\xe6\x69\x45\xff\x22\xeb\x5a\x0f\x2c\xcf\x7c\xf5\x56\x8a\x34\x5e\x0f\xf0\x38\x75\x9b\xc5\x09\xe0\x3a\x9f\x9d\xd0\xec\xb4\x49\xac\xeb\x89\xed\x87\x14\xbb\xa7\xec\x76\x87\x4d\xd7\x1d\x52\x54\x19\x6d\xf8\x95\xd2\x0b\xc7\x45\x25\x9f\xa5\xbc\xe0\xd9\x9c\xf1\xe2\xe9\x59\x10\xc4\xd3\x2c\xa2\x71\x5d\xf7\x33\x9d\xf1\xc9\xdc\xb8\x5d\x3b\xb0\x5c\x09\x9e\xc2\x7c\x74\x06\x01\x48\x4b\x87\x59\x8b\xbe\xbd\x92\xef\x40\x53\xe1\xdb\xfa\x2a\xc6\xf3\x9d\xf2\xd2\x46\x13\x7e\x6f\x6c\xbb\x5e\x02\xe9\x88\xee\xf7\x1c\x89\x48\xd4\xe3\x52\xf6\x3c\x63\xdc\xba\x37\x19\xb1\x38\x91\x65\xa4\x5c\xe2\x7b\xdc\x08\xa3\x8c\xbb\xce\x8c\x5c\x77\xdb\xee\x8b\x32\xd7\x93\x1c\x7b\x29\x9a\xcd\xb9\x01\x25\xd3\xf7\x7e\xdc\x3d\xa7\x23\x34\xdc\x19\x95\x3c\xd5\xfb\x2d\x44\x16\x36\x97\x61\xeb\x0b\x60\x0a\x9b\x07\xf8\x01\xae\xef\xdd\x68\x19\x67\x6a\x5e\xa0\x77\xd7\x40\xc8\x4a\x30\xd9\x98\x76\x86\x37\x02\x26\x36\xf1\x9d\x4c\x8f\x30\x3e\xed\x68\xe2\x8c\x26\xdc\xd0\x67\x38\xf4\x67\xcd\xa9\xf8\x94\x7e\xfd\xc0\x72\x35\x67\x2c\x2a\xfd\x28\x73\x36\xd9\xf0\x03\x8c\x2f\x45\x0a\x5b\x00\xb6\xe2\x01\xff\x7b\x78\x9e\xa1\xcf\x85\xfe\x02\xa1\x66\x85\xf8\x85\x66\x6c\xce\x73\x01\xd8\x82\x6d\xce\x3c\x47\x2d\x4f\x3e\x3b\xb3\x19\x84\x16\x22\x18\xcf\x4c\x90\x1d\x80\x44\xcd\xb9\x8b\x6e\xa1\x67\x70\x5b\x97\x51\x80\xf2\x02\xe5\x1c\xd0\x5f\x30\xd7\x86\x5c\xc4\xc6\x30\x8f\xe6\xac\xa9\xa3\x98\xf3\x9c\x61\x23\xeb\x9a\x9a\x97\x66\x73\x0e\x81\x84\x13\x63\xfd\xa8\x00\x8b\x75\x4f\x97\x83\x63\xcf\xda\xf4\xa8\x45\x54\x1c\x6d\x4a\xb9\xe4\xb6\xb8\x23\x51\x5b\x80\x52\xcd\x77\x0c\x04\x22\x1f\xad\x3b\xc5\x0d\xdf\xbc\x0e\x1e\x30\xc8\x2a\xb0\x04\xc0\xb9\xa0\x0d\x70\x13\xdb\x6e\x1b\xef\xe8\x92\xc7\x8a\xa7\x8c\x6f\xa9\x6d\x2a\xb0\x94\x41\xe0\xdf\x5a\xf8\x92\x94\xf1\xb4\x89\x71\x69\x72\xd8\x7b\x13\xea\xd2\xa4\xea\x6b\xdb\x1c\x1b\x22\xca\x04\xbf\x34\xa9\xfa\xda\x91\x4b\x93\x86\x77\x6e\xa3\xdb\xca\x82\x3a\x2a\x50\x71\x4b\x32\xe2\x2c\xd9\x46\x29\x47\x8c\x71\xff\x93\xf7\x8c\xf1\x74\xbf\x08\xdd\xce\xda\xf8\x10\x94\x8a\xdf\xdb\x4d\x22\xba\x27\x8f\x49\x34\x1b\x98\x8a\x46\x7e\x69\x56\x39\xba\x15\x5b\x29\x4e\xd2\xcc\x30\x56\xbc\x39\x46\xd2\xf4\x26\xdb\xcf\xf7\xdc\x54\xdf\x91\x3f\xb7\x54\xb2\xa9\x41\x04\xc7\xdd\x29\x92\xa2\x89\x49\x7d\xe4\x5b\xbe\x4c\xc0\x61\xac\x63\x5d\x9b\x09\x98\x75\xfe\x26\x97\xcd\x45\xfb\x16\xf1\x79\x5a\x49\x0e\x89\x5f\xa1\x3d\xa2\x99\x60\xed\xcf\x3e\x60\x4e\xcd\xd7\xf6\x30\x2b\x81\xd3\x3d\xab\x42\xd3\x77\x7c\x83\x70\x0d\x9a\x79\x02\x0c\x4c\xe0\x38\xf9\xb6\xa5\x37\x2e\x40\x54\x76\x70\x65\x9c\xac\x6f\x35\x3b\x45\xf0\x73\xc1\xb2\x36\xc3\x21\xab\x6b\x03\x1c\x07\x0b\xb3\x1d\x82\x00\x62\x28\xb0\xb0\xca\x20\x75\x15\x04\x34\x76\x37\x62\xc2\x4b\xbd\x42\x5d\x64\x00\xee\xdf\xf8\x3b\x6c\x53\xa6\xae\x4b\xca\xf6\x8c\x37\x29\xe3\x31\xdf\x0c\xec\xd8\x43\x69\x4d\xa1\x93\x13\xde\x84\x54\x80\x36\x9a\x21\xab\xeb\xb8\x1d\xaa\xc0\x44\xe3\xb2\xc4\x6c\xce\x95\x6a\x9d\xff\x58\xcb\x10\xa0\x2a\x5a\x36\x26\xc8\x7b\x82\x42\x94\x27\x42\x08\xba\x9d\x12\xcd\x83\x92\x88\x60\x07\x22\xe6\x00\x5c\x8f\xf0\xb4\xe7\xce\xf3\x4c\xbf\xd3\x14\x6d\x99\x67\x2a\xc9\x2a\x79\xb4\x15\xa3\xc9\x7e\xa7\x69\xd1\x5d\x10\xdc\x81\xb6\xa5\x51\x3a\x14\x6c\x9f\xac\x29\xad\xc4\x40\x94\x1e\x56\xd7\xbd\xd4\x1d\x6b\xac\xa2\xd7\xdd\xe8\x3a\x41\x40\xb3\xd0\x1a\x84\x88\xd9\xca\x5d\xf3\xe6\xf2\x67\xef\xfa\x97\x39\x37\xa3\x9e\x42\xdb\x2c\x14\x33\xf8\x62\x34\xb3\xa6\x51\xad\x36\xb8\xd7\x74\x39\x00\xf3\x0e\xe5\xa6\x4b\x91\x46\xb4\x42\x18\x5b\x08\xa9\xd6\x45\x92\xaf\xeb\x94\x0f\x15\xe7\x58\x88\x31\xc6\xa9\x77\x5a\xb6\xac\x6b\x73\x77\x82\xa7\xee\x3a\x0d\x05\xcb\x91\x48\x07\x81\xe7\xd7\x69\x1e\x2b\xd0\x43\x56\x00\x35\x05\x24\xd1\xe7\x05\x1d\xe8\x74\xba\x67\xa6\x0f\x52\x40\x33\x77\x4f\x78\x2a\x5c\xbd\xcb\x29\x21\xd1\x12\x4e\x16\x1c\x78\x76\xab\x45\xe0\x54\x63\x7b\x15\xce\x0b\xdd\x28\x38\xd3\x81\xa1\xd9\xec\xe5\x6b\xca\xcf\x26\x73\x7f\xbc\xfc\x27\x67\xfe\x93\x5f\xfc\x27\x4f\xe6\x7a\x92\x57\x62\x74\xc6\x77\x4c\x7f\xf4\xdd\xd4\xbe\x39\xc9\x8e\xef\x82\x80\x6e\xc5\x9d\x11\x8a\x58\x74\xe7\x87\x38\xb1\x54\x81\xdf\x5b\xeb\x06\xdd\x29\x79\x10\x50\x5b\x40\x8c\xb6\x8c\x6f\x83\xc0\x1b\xd4\x7e\x9f\xba\x69\xb9\xad\x6b\x33\x90\xdc\x87\xbb\xb2\xb4\x87\xef\x3c\x54\xfa\x82\xeb\x85\xc1\xb0\xed\xb1\xa2\xdb\xa9\x5e\x20\xd1\x84\x17\x7c\xc3\x38\x54\x77\xa7\x3f\x46\xaf\x9e\xca\x68\x56\xb6\x7a\x58\x41\xa5\x65\x53\xcc\xaf\x98\x30\xb6\x9f\x37\x54\xb6\x1b\x90\x65\xda\x16\x1c\x2c\x65\x96\x2c\x6a\x3f\x00\x8e\xcf\x1a\x69\x96\x3b\x29\x57\x3d\x80\x0d\xe4\x33\x65\x10\x0c\x44\xf3\xf1\x99\x68\xc9\xa2\x7b\xbb\xef\x46\x59\x5d\x8f\xb2\x20\x50\x75\xbd\x05\x2b\x5c\xd9\xb0\xb9\xd2\x32\xd2\xf8\x5c\x05\xc1\x68\x0b\x46\x79\xca\x0b\x82\xbb\xbe\x0d\xf3\xf5\x7a\x5a\x38\x96\x58\x4c\x22\x7b\x40\xe6\xdc\x5c\x9b\xa7\x00\xb8\x6f\x6f\x74\x4f\xa2\xc0\xad\xbf\xa7\xf4\x2b\xf1\x92\x67\x4d\xf2\x3c\x1a\xce\xe2\x38\x7c\x7b\x58\x57\x20\x11\x0e\x02\x40\x46\x2a\xdc\x7e\x62\xae\x20\x78\x0a\xe3\x45\x98\xa7\x2b\x51\x38\x26\x84\x37\x97\xfe\x2e\xa1\x59\xab\x3c\x5d\xb1\x20\x80\xdf\x46\x41\xa6\x6b\x30\xef\xe9\x84\x29\x31\xe9\x6c\xaf\x39\xf4\x96\x16\x7a\x1d\xaf\xe4\xa7\xfc\xb0\x07\x35\x82\xdb\xa0\x49\x73\x21\x19\x10\x0f\x77\x18\xcd\x27\x16\xc3\x5d\x4f\x35\x2d\x51\x02\x37\x23\xa9\x3b\xdb\x56\x7b\x2e\x8d\xa3\xb6\x79\x76\xe8\x88\x4f\x74\xa9\xb8\xc4\x50\x3f\xd0\xa3\x18\x16\x9c\xf1\xb8\x1b\xeb\x5b\x89\xd2\xa0\xb6\xb5\x67\x14\xcf\xd9\x39\x4d\x1c\xa2\x37\x40\xda\xac\x93\x2c\x29\x37\x40\x81\x15\x70\x9a\x74\x34\x61\xfb\x26\x70\x2d\x3e\x17\x31\xd7\x5b\x15\x86\xcc\x82\x5e\xf3\x42\x4f\xc5\x46\xd9\x89\x5d\x6b\x9e\xf3\x98\x75\xc5\x9e\xd6\x0a\x18\xc2\x39\xd0\xd9\xad\xb5\x25\xde\x71\x45\x33\xd7\x9a\xc1\x50\x2d\xe8\x98\xed\x87\x6b\x51\x06\xbd\xcf\xba\x19\xf4\x82\xcc\x0c\xfb\x6b\x63\x23\x46\x10\x8c\xc2\x59\xf4\xb7\x82\xbb\x40\xcf\x03\x53\x5b\x82\xc7\xad\xd3\x47\xa3\xbc\x86\x18\x5a\xfa\x2f\x34\x3d\x08\x0a\x00\xe8\x62\x4d\x28\x46\xf0\xc4\x8d\xfb\x19\x33\xc7\x55\x34\x85\x50\xe2\x73\xae\x5a\xc9\xc9\xc9\x39\xcb\x75\x11\xcd\xbf\x8e\x2c\xf8\x80\x6b\x29\x3c\x82\xb6\x8e\x20\x68\x1d\x85\x04\x3d\xbb\x70\x50\x33\xc6\x95\x26\xf1\xb9\x05\x4f\x4c\xf8\x19\x63\x47\x23\x15\x04\x99\xe6\x2a\x06\xe2\xf7\xe0\xc8\x0f\x68\xf0\x6c\xef\x52\x17\x18\xe7\xa1\x2e\xe5\x99\xdf\x55\xbc\x10\xd9\xcc\x76\x2b\x99\x43\xe4\x8f\x76\x2f\xcf\xdb\xdd\x5c\x4c\x8b\x46\x2e\x46\xbc\x5c\x33\x25\x47\x13\xde\x89\x81\xa4\xc7\x16\x80\xc2\xb1\x5b\xf1\xd7\x73\xd3\xd5\xdb\x8f\x6a\xfa\x54\x61\x9f\x2a\xec\x53\xe3\x8f\xa3\xbb\x52\x99\xae\x44\xc7\x09\x38\xdb\xf4\xba\x52\xd7\xe2\xba\x51\x41\x37\xa2\x6e\x6d\x72\xae\x9e\xc6\xe0\x75\x52\xcc\xd4\x3c\x08\xf4\x5f\xd3\xd8\xd6\x8d\x47\x9b\xec\x6c\xb7\x1f\xb5\x67\xad\x93\x6f\xc3\x4d\x72\xe4\x17\x39\x72\x92\xdd\xf3\x6f\x1b\x0e\x6a\x9d\xcd\xd4\xfc\xc8\xfc\xfa\xfb\x4e\xcb\x26\x07\x35\xd6\x75\x3d\x14\xb9\x22\x1b\x36\x80\xc6\xd5\x6d\xa9\x58\xae\xa8\x82\x9e\xc4\x8a\x7d\x87\x84\x32\x4d\x56\xf2\x45\x7e\x93\x45\xb9\x32\x3c\x2e\xe3\x90\xf8\xd3\x0e\x92\xa0\xfd\x26\xe9\x13\xc6\xd4\xd0\xc9\xe6\x33\x19\xd7\x74\xf7\x75\xd6\x18\x01\x61\x1d\x7b\x48\x7f\x5f\x29\xef\x01\xd4\x84\x0f\x4c\x45\xcd\x33\x53\xdd\xfe\xf7\xfd\x16\xfa\x44\xdd\x7e\xa5\xb2\x14\x1a\x3e\x0f\x67\xa3\x98\xcd\x1b\x0d\x6e\x97\xe6\x82\x13\x12\x9c\x57\x63\x66\x98\x13\x2d\x4d\xed\xb9\x7a\x9a\xf9\x90\x97\x54\x0a\x30\xce\xa7\xc6\x4a\x1f\x17\x6e\xe6\x66\xd6\xc9\x09\x3f\x63\x47\x99\x93\x4d\x8c\xd6\x3b\xdf\x51\x50\x01\x1b\x75\xb0\x27\x6a\x8b\xf6\xb1\x06\xb6\xc3\xf2\x24\x56\x69\x1e\x17\x00\x75\xd4\x52\x4c\x8b\xb3\x6f\xbc\xc7\xfe\x97\x49\x55\xd7\x54\x02\x59\xd4\xe5\x6c\x41\x50\x4c\xb4\xb2\xa1\x71\x34\xf7\xb6\x7b\x71\x5f\xa6\xf9\x4d\xf4\x9f\x93\x09\x5f\xc7\xa5\x8a\x9e\x4c\x26\x8d\x86\xff\xcf\x93\x89\xd9\x72\x57\x52\x33\xc5\x6d\x5d\x9c\x0b\xc4\xa7\xab\x03\xd0\x6b\xc7\x66\xa8\x79\x5d\x2b\x0c\x27\x04\xe4\xdc\xa3\xf0\x5e\x90\x7f\x6f\x03\x6d\x29\xd4\x33\x50\x06\xf4\x9b\x8f\x66\x3f\x36\x57\x62\xf0\xf4\xba\x27\x99\x87\x30\xfa\xb9\xea\x3f\x42\xb8\x12\xf2\x3b\x01\x00\xf0\x48\x8f\x30\x76\x64\xc0\x24\x1a\x30\x3a\x0b\xc3\xff\x3e\x13\x04\x51\x24\x01\xed\x4f\x73\xf1\x3b\x85\xc0\xdf\x72\x25\x94\xc1\x45\x91\x2b\x4e\x1f\x0a\x22\x00\x65\x05\x51\xc4\x82\xcc\x98\x08\x02\x7c\x15\xc2\xc5\xdf\xec\x73\xe1\xde\xb4\x37\xc6\xd0\x95\xe2\xa9\x12\x06\x8e\x3a\x56\xaa\xf8\x01\x9c\x63\x8f\x5a\x0c\x93\x4e\x7f\xf0\xdc\x7e\x01\x45\x0f\x1e\x8c\xf3\x06\x33\xe3\x0f\x04\x9d\x6b\x0a\x1d\x8a\xf9\xd8\x6b\x57\xfb\x4c\xa0\x11\x80\xf5\x16\xfe\xcd\x08\x6c\xc5\xfe\x0f\xfe\x3c\xd1\x3f\xac\xe7\x3e\xdb\x02\x14\x99\x2e\x40\x33\x6a\x4d\x00\xa8\x41\xae\x6f\x39\x99\xd7\x35\xd5\x6c\x1c\xf4\x1c\x1e\x4b\x77\xfc\xe4\xe0\x44\xdd\x03\xfb\xd6\x84\xd9\x5a\x71\x4d\x2b\x15\x39\xf8\x7c\x3f\xcc\x31\x90\x71\x91\x4d\x21\xad\xd5\x13\x10\x22\x39\x69\xec\xcf\x12\xdf\x0a\xaf\x10\x89\xb3\x3f\x53\x8c\x4d\x8b\x88\x76\x82\x43\x28\x9e\x8d\x09\x61\xfa\x73\x92\xc6\x2e\x2c\xb1\x52\x33\x56\x61\x43\x61\xea\x0a\x8c\x1e\xa0\x10\x06\x9b\x3e\xb6\x8d\x60\x53\x13\x9d\x18\xf8\x5c\xfb\xf9\x11\x62\xa4\xdf\x77\x23\x5d\xa3\x3d\xad\x3f\x1d\x83\xc0\x4c\x52\x0c\x4d\x09\x10\x32\x76\x42\x9b\x4d\xcf\x4c\xd5\x23\xff\xf0\xac\x17\x2c\xc3\x44\xec\x34\x79\x85\xe6\x84\xc0\x36\x74\x70\xca\x75\x0f\xd0\x94\x66\x8b\x9d\xae\x4f\xf3\x79\xbd\xc0\xc4\xe8\xcc\x28\x92\x59\x01\x71\x43\xfa\xf8\x2f\x19\x4c\xca\xaa\x77\x0e\xeb\x87\xce\x05\xd6\x5a\x4d\x3b\x23\x99\x99\x13\x45\xaf\x2e\xd4\x56\x3a\x00\xb6\xfe\xcc\xc1\xc0\x80\xa6\xcd\xa7\x9f\x6f\xc6\xa7\x57\x6c\x90\x63\x48\x95\x31\x05\x74\xc3\x76\x04\x49\x6d\x91\xb5\x15\xe7\xae\x33\x75\x9d\x01\xbe\xe6\x37\x75\x7d\xf1\x9c\xc3\x5f\x50\x7e\x19\x8b\x4c\x53\xcb\x34\x86\x99\x62\x9e\xe7\x8c\x27\xd6\x5b\x6f\x69\x8e\x6d\x11\xeb\x08\xe9\x59\x6d\xc1\x0f\x6a\xc4\x3e\x83\xf0\x56\x6b\x93\x31\xae\xf5\x13\x9d\xd4\x9c\xe2\x6e\x54\x43\x2e\xa8\xec\xc4\xe0\x46\x7f\xbb\x63\xe2\x1d\x96\xee\x54\x0b\xc1\xc2\x5f\xd4\xc6\x20\xc5\x0f\xaa\x92\xc6\x25\x20\x5f\x13\xcf\xe4\x79\xe5\xd7\xd0\x3e\xd8\x90\x6c\x2a\xa3\x21\x57\xda\x76\xc3\xda\x81\xca\x76\x7d\x1c\xdc\x2e\x09\x45\x63\x80\x87\x49\x68\x07\x4e\xf7\x61\x12\xea\x79\xb6\xcd\xb0\xfa\x57\xc9\xed\x4c\xce\xeb\x5a\xce\xbb\xa4\xb4\xd7\xbe\x7f\x93\x94\x1e\xa0\x91\x7a\x8b\xb1\x0d\xc0\x4d\x3e\x31\x29\xd6\xb4\xb3\x45\x00\xbf\x9e\xc0\xa1\x25\xe1\x57\x12\x33\x9d\x19\x62\x90\xee\x2c\xb1\x8a\x2f\xd1\x3e\x7b\xd8\xac\xa5\x43\xf4\x88\x8a\x2f\xc1\x44\xd8\x73\x20\x9f\x82\x7d\xe1\xeb\x4c\xb3\xcd\x67\x13\x16\x2d\x95\xc5\xd8\xb3\x58\x21\xac\xae\xd7\xfd\x44\xc0\x57\x2b\xe4\x7a\x3a\x89\x4e\xce\x34\xbd\x32\xbd\x13\xdd\xaf\xf3\x22\x22\x1b\xb5\x4d\x5f\xe5\x05\xe1\x30\x39\x23\x9c\xa3\xba\x20\xd1\xc3\xd6\xe2\x12\x60\x83\xf1\x0c\x43\x2c\xf3\x70\xe0\x93\xa4\xef\xb9\xdc\x9c\xfb\xab\xb6\x03\xbf\xef\xbd\x6f\x6b\x84\x9e\xe2\xc8\x09\x76\x4d\x4e\x06\xea\x56\x41\x40\x55\xa7\xf0\xd7\xbe\xa5\x23\x27\x99\x51\x22\x9c\x14\x32\x5e\xbd\xcf\xd2\x3b\xc2\xc9\x36\xbe\x7d\x03\xcb\x83\x70\xb2\x94\x69\x6a\xfc\xac\xcc\xdd\x07\x63\xdf\xc0\x49\x91\xdf\x5c\xec\xe2\x4c\xa7\xe7\xa9\xb9\xaa\x4a\xf9\x36\xde\x11\x4e\xd6\x45\xbc\x95\xdf\x19\x7b\x56\xeb\x06\xf1\x72\x85\x20\xcc\xbe\x2c\xa6\x19\x12\x37\x81\x01\xfd\xa2\xb5\xcb\x83\x70\xd9\xb5\x76\x8c\x57\xab\xe7\x30\x7c\x03\xb6\x6c\x3e\x2a\x18\xda\x35\x6e\xa9\x6c\x43\x0f\xb7\x97\xb3\x96\x70\x4c\xcc\x40\x5b\x2f\x95\x9e\xf4\xab\xf8\xce\x08\xe1\xcc\x00\x53\x51\x25\x80\x8a\x39\x1c\x70\xb3\x95\x01\x3d\xa8\x6c\x3c\xae\x44\xec\x14\xcd\xc0\x42\x41\xb3\x1c\xde\x99\x01\x39\x26\xe3\x8d\xe6\x97\xc7\x9a\xb8\x1a\x9c\xfd\xc9\x79\x2e\xd4\x2c\x86\xd2\x45\x63\x30\x7f\x4c\xc6\x39\x64\x03\xd7\xf7\x62\x2c\xf0\xee\x28\xd1\xcb\xb0\x14\x1b\x08\xa7\x69\xcc\xd6\x7a\xa4\x97\x97\x0e\x72\x09\x01\x19\x8c\x6f\xe6\xff\x8d\xbe\xf3\xaa\xfe\x9d\xee\x1b\xf5\x40\x04\x5a\x92\xa4\x26\x09\xb6\xfd\x84\xfc\xff\xd3\xe1\x50\xdf\x50\xaf\x7f\x7b\x72\x76\xce\x0a\x51\x38\xac\x26\xf7\x88\xff\x0f\x86\x01\x25\xed\xee\x30\x78\xa7\xb1\x66\xe7\xe3\x85\x67\x65\xac\x65\xb7\xee\x7e\x79\x74\x28\x9c\xa6\x0a\x82\x62\x8a\xc1\xb0\xbd\x59\x6d\x54\x12\xad\xa1\x62\x11\x9c\xd4\x0e\x0c\x6e\xd6\x0c\xae\xd7\xe0\xd6\xe0\x66\x6e\x70\x01\x42\x99\xed\x0f\x04\xeb\xc4\xf9\x85\xd6\x0e\xc9\x9a\x16\x08\xb0\x27\x26\x3c\x17\xe6\x15\x3c\xc6\x21\x3e\x57\x22\x9e\x25\x30\x28\x79\xb8\x89\x4b\x7c\xa7\x62\xd3\xbc\xd5\x6c\xc5\xa2\xbc\xf9\x30\x65\x94\x85\x0d\xe4\x77\x10\xb8\x3e\x41\x3f\x14\x3d\x87\xdc\x44\x0c\x82\x47\x4d\x78\x7d\xb2\x58\xb8\x4d\x60\xb1\x20\x0e\x0b\xba\x6c\xf1\x36\xbd\x24\x37\xb8\xca\x28\x78\xe5\x94\x90\xc8\x57\x11\xb7\xeb\x05\x36\x88\x21\x60\x89\xf9\xac\xe1\x25\x28\x26\x46\x2f\xa6\xa7\x9a\xd4\x53\xcd\xce\xf4\xc2\xce\xf4\xee\xfc\xa6\x66\x82\xc3\xfc\xc7\x49\xee\xe6\xb2\x82\x38\x80\x36\xfe\xda\x91\x8b\xb8\x66\xb8\xc8\xad\x12\xa7\x9f\x8b\xd3\xab\xb6\x5c\x7a\x1d\xa7\x87\xe8\x83\x45\x4f\x71\xaa\xee\xce\x62\x9e\xd2\x42\xe8\x19\x35\xa4\xda\x34\x9c\x4f\x72\xd4\x03\xf6\x09\x02\x7b\x1c\x9e\x88\x62\xda\x9e\x62\x76\x12\x5e\xc7\x29\x65\x2c\x92\x6c\x9a\x08\x42\xa2\xc6\x53\xc9\xcc\xf9\x64\x9a\x8c\xf5\x83\xf6\x22\x49\xd0\x5a\x06\xad\x3e\x92\x21\x8c\x27\xa3\xdb\xd3\xc3\x27\xc7\x84\xec\x19\xe3\xc0\x56\x5d\xc7\xa9\x67\x10\x6d\x22\xb3\x74\x93\x87\x81\xcb\xc0\xbc\xc6\xf0\x59\xca\xc7\x0a\x6e\xa6\x5d\xc2\x09\x08\x56\xe0\x07\x05\x55\xa1\x9c\x95\xe8\x39\xc2\xa2\x64\xda\x6e\x43\x32\xd0\x80\xe4\xa1\xb7\x5f\xf5\xdf\x4e\x33\x81\xd6\xe0\xcd\xbb\xd9\x34\xeb\x71\xdc\x34\x13\x09\x36\x86\x4d\x1d\xa4\x0a\xdd\x42\xc0\x6d\x23\xb6\x66\xba\xb3\x32\x1b\x89\xac\xc5\xef\xda\xd6\x45\x36\x0c\xee\xd7\x71\x80\xa6\x3d\x3e\x58\xf3\x08\x4c\x8f\x37\x8a\x1a\xe4\x2d\x09\x8e\x5d\xc8\xce\x1c\xa8\xd5\x4c\x51\x1b\x53\xb5\x04\x06\xbb\xcd\x29\xc5\xc2\x28\x99\x4e\xcc\x59\xb3\xc1\x33\x2d\x45\x0c\xea\x81\x08\x62\xa1\xc4\xd3\x7c\x7c\x16\x59\x43\x4a\xb4\xde\x10\xf9\xd3\xc9\xb4\x8a\xe2\x69\x0e\xa6\xa0\x15\x7a\x76\xac\x29\xa5\x20\xc5\xba\x40\x23\x9a\x73\x2c\x20\x08\x6a\x10\x8c\x32\x17\xb8\x24\x08\xe8\x28\xf3\x19\x33\xfb\xa0\xae\x47\x5f\xa8\xff\x84\x13\x1b\x1e\x96\x30\x8b\xd9\xb6\xa0\x99\x59\x01\x3c\x76\xfb\xe5\x91\x51\x53\x2a\xb7\xbf\x94\x3d\xff\xa8\x5e\x1c\x6c\xbf\x73\xf4\xaa\xf8\x22\xad\xc3\x87\x6f\x3a\x8a\x21\xfb\xc1\x6c\x34\xf6\xbe\x4c\x34\x90\x3c\xcd\x44\x34\x15\x62\x34\x6c\xc6\x73\xa0\x38\x70\xc6\x34\x9a\x34\x23\x0a\xe8\xce\xad\xb1\x10\x27\x67\x8c\xe7\xfb\x7d\x8b\x27\x35\x0a\xb6\x46\xa3\xd7\xe1\x15\x5b\xcb\x6f\xde\xd7\x0d\x40\x7f\xf5\x5c\x59\x9c\xc4\x6a\xd1\x03\xbd\xef\xa0\xd2\xf6\x2c\xd0\xca\xfd\xbe\xd1\x21\x82\x08\xd0\x7e\x23\x60\x9e\x1c\xa4\x22\x3d\xe4\x5c\x33\xaf\xa7\x24\xcf\x48\x64\x55\x84\x0c\x44\x0d\x13\xcb\x43\x90\x3c\xb3\x61\x3d\x92\xec\x18\x23\x75\xde\x19\x99\xdd\x3c\x80\x9f\xda\x86\xe6\x80\x60\x1e\x8f\x4e\xf9\x75\xbb\x21\x43\xf8\xf8\x47\x6e\x61\x1a\x0c\x3f\xde\x0f\xe7\xa1\x57\x8d\x1f\x37\xd3\xd8\x42\x61\x8c\xb7\x6b\x31\x4b\xea\xba\x98\xf3\x2b\xb1\x36\x54\x99\x1b\x60\xde\x29\xc6\x2c\x8c\x14\xbf\xf4\x9e\x39\x1c\x6a\xc8\xd0\x04\x62\x6a\x62\xb4\x45\x33\x8c\x52\x25\x56\xa2\x12\x89\xd0\xd5\x73\x2d\xf8\x26\x1d\x87\x5c\xff\x7e\x74\x67\x24\xbd\xab\x71\x2f\x7a\xa2\x9e\x6a\x57\x0d\xef\x16\x02\xd7\x16\x04\xf4\x52\x5c\x79\x6f\xe5\x57\xe2\x32\x44\xfb\x03\xc6\x2f\x4d\x9c\x38\xc6\x97\xc2\x2b\x1a\x21\x9b\xad\xc7\x6a\x7c\xa5\x37\x01\xe5\x07\x81\x51\xad\x20\x30\x57\xbc\x1f\x5b\x34\x08\x14\x63\x61\x52\x7e\xc2\xa6\x89\x7c\xfa\x24\xfa\x86\x7b\xbd\x20\x2e\x9b\x90\x83\x5c\x79\x71\xaa\x84\x97\x69\x3a\x18\x68\xee\xf2\x77\x03\xcd\xa1\xa2\x48\xd9\x30\x53\x06\x68\x53\x99\x38\x1a\x7a\x97\xb1\xf1\x38\x12\xc6\x33\x61\x29\xf9\x4c\xcd\x23\x9f\x0e\x64\x1c\x94\x06\xbb\x5e\x74\xb2\x2b\x44\x4c\xcb\xeb\x7a\xb4\xb3\xbd\x6f\xc2\x88\xb9\x7b\x1b\xfd\x0a\x02\xd2\x83\x6a\x32\x0f\x82\xd1\x2e\xb4\xf1\x71\xf4\x48\x82\x15\x18\x06\x03\xdc\xb5\xa2\xef\xd5\xf5\x15\xb7\xe3\x9c\x8e\xaf\x20\x54\x97\xf0\x01\xc1\xd8\x79\x79\xde\x49\xb9\x46\x0a\x58\x32\x5e\x89\xf2\xa8\x12\x9a\x83\x68\x03\x35\xd5\x75\xc1\x82\xc0\xe4\xab\x7c\x48\xaa\xba\xae\x4c\x55\x7f\x4f\xb2\x55\x7e\x53\xd7\x92\xed\xad\x70\x40\x4b\x71\x0d\xd2\x81\xa6\xe2\xea\x60\x4c\xb3\x95\x28\x39\xae\x03\x11\x7f\x7b\x36\x4d\xa3\x9d\x8b\x20\xa8\x3f\x87\x6e\x6c\x34\xb8\x5e\x28\x38\x2c\x35\xb7\x41\x13\x4b\x1b\x9f\x0e\x6c\x0a\x6c\xe0\xcf\x92\x67\x10\x97\x72\x19\x04\xe5\x6c\x39\x6f\x9e\x04\xc1\xf7\xb4\x64\xa0\x09\x30\xe3\xdd\x2a\x82\x7a\x51\x17\xf8\x46\xf5\xa2\x76\x34\x8a\x16\x6c\xfc\x95\x1e\x57\x35\x10\x0a\x84\xb2\xba\xde\x39\x1b\x14\x63\x23\xd0\x24\x98\x97\x5e\x87\x3b\x38\x60\xcb\x58\x5d\x8f\xbe\x07\x50\x84\x65\x10\x6c\x69\x32\xbb\x82\x0e\x34\x7c\x18\xad\x44\x82\x9f\x41\xf5\x2f\xcc\xc1\x26\x22\xa5\x5b\xd1\xe2\x8a\x1f\xea\xf1\x20\x58\xf5\xa3\x68\x5e\xf1\x6b\xc5\xb8\x7e\x17\x65\x0f\x96\x1c\x8a\xc6\x83\x85\xfb\x6d\x30\xeb\xa7\xb2\x6d\xad\x00\x3e\xcf\x45\x56\x2b\x4d\x28\x90\x03\x76\x1a\x8e\xee\x7a\x34\x83\x67\x1c\xb5\xf8\x9d\xc8\x2d\x93\x3d\x3b\xea\xbc\x9f\x16\x88\xb8\xa7\x58\x0f\x13\xb5\x47\xbf\x7d\x9d\xe7\x81\x13\x9f\x76\xdd\xba\xa1\xca\x22\x53\x9a\xc4\x1f\x4c\xa0\xd5\x43\xc6\xc1\x9a\xe3\xf7\xdc\xc1\x8f\x87\xea\xcc\x00\x8b\xd5\xdf\xdb\xd0\x9b\x72\xb9\xa1\xf7\x18\x13\xcb\xc5\xaf\xc2\xf0\x55\x7e\xb0\xa9\xa1\x17\xb7\x0f\x66\x0d\x35\x32\xfd\x46\x15\x77\x21\x82\xda\xf1\x19\x71\xd7\x6b\x91\x2e\x85\x8c\x42\xb5\xeb\xfa\x59\x1a\xe8\xc7\x0e\xc1\x40\x06\xbd\x31\xd9\x2b\xb8\x62\x47\x7a\x9f\xea\x4f\x3d\x89\x5f\xcd\xfd\xbc\x9c\x26\x80\x09\x72\x06\x90\xb3\x18\x09\xf3\xdf\x7f\xf1\xc9\xd9\x51\x32\x6d\x55\x9f\xb0\x88\x16\x83\x73\xb9\x69\x8d\x31\x03\xd4\x15\x80\xdb\x37\x70\x15\x57\x4a\xc8\x30\xcd\x97\xe8\xde\x71\xa9\xbc\x53\x76\xbe\xd0\x82\xe0\xf4\xf4\x68\x11\x82\xe2\xf5\xe7\xb7\x6f\xfa\xf8\x7e\xa0\xbd\x51\x75\xdd\xb3\x28\x72\x91\xdc\xf4\xa4\x05\xa8\xca\x4c\xc0\xcc\x97\xe1\x8b\xf7\x6f\x3f\xe8\x0a\x0b\x86\x15\xbf\x2a\xf2\xed\x05\x14\x07\x4e\x42\xde\xaa\xd3\xdb\x6d\x4a\x98\xc1\xa1\x2c\xd8\xbd\x8d\x7c\xbd\x6f\x10\x03\x47\xc0\x5c\x9a\xf3\xd9\xf2\xbb\xbb\x4f\xf1\x95\x16\x7b\x28\x81\x2a\x0b\x59\x14\x79\xe1\x99\x23\x2f\x42\x48\xa1\xe4\x75\x76\x1d\xa7\xc9\xea\xf8\xe7\xb7\x6f\xa2\x63\x32\x86\x10\x21\xd0\x13\x37\xfa\x6b\x67\x9f\xe7\x8f\x4e\xf9\x4b\x90\x80\xa7\x9f\xb3\xd3\x2b\x7e\x6b\xd8\xae\xb2\xba\xdc\x26\xca\x1c\xa2\xd4\xc9\x36\xbe\x92\x75\x21\x4b\xa9\xea\x75\x92\x4a\x38\x55\xb9\x78\xf0\xf8\xe5\x8b\xbc\xbb\x92\x19\xf3\x8f\x5a\xde\xab\x8e\x91\xda\xa0\xcf\xb5\x59\x2f\x9e\xe3\xbd\x1e\xef\xfb\xac\xae\x6f\xac\xae\x9b\x4d\xf5\x40\x27\x2c\xd2\x35\x8e\xc9\x8c\x8c\xfb\x91\x3c\x9c\xae\x3e\x99\xaa\x88\x68\x36\x61\x4e\x78\x62\xc1\xf5\x6d\x10\xf1\xac\xae\x6d\xc9\x91\x10\x97\xc0\x28\x9b\x80\x62\x2d\xdb\x2b\xc5\xdc\xab\x12\xa8\x49\xcd\x92\x39\x56\x06\xd3\x25\xde\x8a\xe1\xa3\x40\x80\xb4\x1c\x5a\xd9\x10\x5d\x50\x51\x16\xa9\xa3\x62\x66\x2d\x95\xe6\x42\x66\xcb\x7c\x25\x7f\xfa\xf8\xfa\x79\xbe\xdd\xe5\x19\x06\xdb\x1b\x13\x41\xc6\x03\x4f\x7c\x51\x94\xed\xfb\xbd\x09\x98\x58\xe1\xaf\xbf\x55\xb2\xb8\x03\x5f\xd2\xa4\xfc\x90\xc6\x49\xe6\x4c\x02\x6d\x67\xb7\x20\x27\x12\x14\xc6\x35\x37\xc6\x1b\xb1\xdc\xf5\x9a\xe7\xab\xf3\x5e\xd1\x8c\x83\x7f\x8e\x1e\x22\x77\xa8\x67\xf8\xb4\x80\xb0\x8e\x75\x64\x29\x8b\x24\x4e\x87\xc1\xd4\x4c\x37\x52\xa3\x66\x32\x19\xf1\x3b\x18\x80\x5e\xf8\x49\x43\x68\x6c\x03\xa0\xb9\x68\x7e\x61\xce\xda\x51\x27\x25\xcd\x12\x6a\x24\x6d\x39\xf5\x99\x3f\xa3\x22\xdc\x33\x6b\xa6\xd9\xab\xce\x29\x43\x5a\xce\xe1\xba\xbb\x74\x1f\x1b\x55\x4d\x52\x52\x12\x59\xf9\x96\xb0\x20\xb8\x30\x93\xb7\xa5\x33\xd1\x8c\xc1\xad\x6a\x40\x72\xf1\xe9\xd2\x82\xd2\x8f\x52\x07\xa0\xcb\xf6\xac\xfd\x71\xbe\x05\x97\xaf\x1e\x6a\x07\x7b\xc2\x03\xff\x8e\x42\x28\x63\x53\x54\x06\x65\x03\xca\xa0\x7b\xfd\x21\x11\x32\xe3\x26\x4e\x64\x83\xd3\xff\x52\x71\xf2\xb9\xf8\x9c\x11\xbd\xc9\x45\x03\x59\xb3\xe1\xac\x88\xbf\x6a\x89\xf0\x33\x25\x4e\xff\xf4\x64\x72\x7a\xc5\xbf\x28\x71\xfa\xbf\xc2\xc7\x8f\x4e\xf9\x5b\x25\x4e\xe9\x6c\x1a\xcc\xd9\x42\xcc\xfe\x19\xcc\x1f\x9f\xf2\x4f\x40\x5f\xc2\xc7\x53\x16\xcd\x8e\x3f\xab\xf9\x63\x3a\xfb\xa7\xae\x71\xfe\x98\x3d\x3a\xbd\xda\xf2\xe7\x86\xfe\x7c\xff\xf2\x53\xfd\xc3\xcb\x67\x2f\xb4\x40\xf8\x51\xa7\x7d\x3e\xfd\x7c\x7a\xca\x3f\x28\x71\xbf\xe7\xef\xe0\xef\xaf\x4a\x90\xc7\xa7\xc4\xba\x8d\x92\xc7\x84\xf1\xd7\x03\xc6\x37\xb1\x0f\xaa\xfa\xc2\x3f\xa7\x6d\xdb\x19\xf5\xc9\xbf\x33\x28\xd5\x75\x1f\x59\xdf\xd5\x09\xcf\xbb\x47\xdf\xad\x83\x5c\x3c\x60\xc8\x4c\xac\xd8\x42\xe4\x46\xf1\x4b\xc6\x44\x08\x51\xcc\x26\xf3\x29\x2d\x44\xe1\x90\x53\xea\x9a\x3c\x26\x1c\xdd\xdb\x24\xb8\x75\xcc\xe6\xcc\x59\x95\x67\x8c\x45\xdd\x67\xc0\xf3\x67\x7e\xdc\x94\x37\x5d\x2a\x8c\x60\x1e\x52\x08\xf1\x4e\x35\x5f\x1f\xd3\x12\x9f\x57\x0e\x9b\x63\x56\xce\xd1\x76\x12\x69\xc6\xac\x44\xef\x23\x6f\x4a\x9a\x22\xa9\x28\x8d\x89\xf1\x21\x03\xdc\xb4\xae\xf3\xba\x4e\x66\xe9\x7c\x9a\x4f\x47\xb4\x12\xa9\x8d\xea\x1f\x51\x05\x71\x88\xb5\xfc\xd0\x18\xcc\xa7\x8c\xc7\xfa\xcf\xe8\x8c\xed\x19\xaf\x1c\x54\x9a\x9f\x79\x36\x99\x6b\xde\x3b\x01\x5f\xab\x20\x88\x61\x98\x9b\xef\x7e\xa5\x3a\x9e\x87\x62\x11\xc6\xbf\xc6\xb7\x17\x52\xa9\x24\xbb\x2a\xc3\x75\x1a\x2b\xe3\x21\xea\xe2\x4f\x67\x48\xfc\x1b\xf5\xe5\x2c\x9b\x6b\x2e\x3e\x99\x65\xf3\xa9\x8c\x8a\xba\xa6\x85\xb8\xdf\x33\x36\xcb\xe6\x18\x6b\xd7\x8b\xf5\xe5\xbb\xb1\x4a\x5e\x30\x2e\xf7\xaf\x15\x1c\xcd\x8a\x2b\xfc\xf5\x0d\x8e\x96\x2a\xb9\x96\xd1\x84\xa7\x71\xa9\xde\xe6\xab\x64\x9d\xc8\x15\xb8\xbb\xaa\x18\xdc\x5e\xfd\xb6\x46\xf7\x55\x91\x46\xb6\x12\xe0\xa8\xc9\xf7\x2f\x3f\x11\x9e\x94\x6f\xf2\x65\x9c\x46\x68\xee\x70\x99\x57\xaa\x8e\x77\x3b\xfd\xff\xa4\x54\x79\xa1\x77\xf1\x70\x7c\x02\xef\x2c\x93\x3c\x83\xcd\x5c\xef\xeb\xf5\x4d\xb2\x82\x20\x91\x8f\x4e\x8d\x96\xc1\xa0\x37\x2c\xf3\x94\x71\x0c\xa2\x02\x81\xeb\x8a\x5c\x33\x61\x10\x98\x61\x34\xe1\x71\x79\x97\x2d\x4d\xb0\x59\x25\x33\x85\x01\x54\xb5\x40\x94\x20\x8b\x75\x7a\x7b\x72\x73\x73\x73\xb2\xce\x8b\xed\x49\x55\xa4\xb8\x87\xad\xce\x8f\x97\x1b\xcd\xb6\x28\xf1\xd3\xa7\x57\x27\xff\x87\x70\xcd\xda\xed\x94\x71\xcf\xfb\x55\x61\x98\x02\x64\x8d\x76\x7a\xc3\x22\x08\x71\x8e\x29\xfa\x92\xf0\x5b\x7d\xdf\x7a\xd3\x36\xe5\xc7\x8e\x9b\xe2\xbf\x96\x00\xad\xe9\x65\xd0\x29\x26\xc7\xaf\xf1\x75\x6c\xc2\x4d\xec\x6d\xdb\xcb\xe8\x5e\xd7\x79\xfa\xf9\xf2\x76\x9b\x7e\xbe\x3c\xc5\x57\x9e\x7e\xbe\xd4\xbf\xa7\x58\xdf\xe9\xe7\x4b\xfd\xfb\xf9\xf2\x74\xcf\x0b\x59\xee\xf2\xac\x94\xaf\x12\x99\xae\x4c\x61\x62\x13\x7f\x7e\xfb\x86\x98\xaf\xb0\x49\x9f\xe4\xad\xb2\xcd\xb2\x69\x7f\xb9\x78\xff\x0e\x5b\x70\x2d\x0b\x65\x1c\x14\xa1\x89\x24\x42\x16\x11\x19\xc4\x63\xf8\x66\xdd\xd1\x78\xab\x6b\x21\x91\x2e\x8d\x2c\xa5\x49\xd6\x1f\x1e\x35\xec\xeb\x9e\x7b\x53\x1a\xa7\x8c\x1d\xaa\x5b\xa5\x85\x2e\x37\xa9\xaa\x03\x06\x24\x6a\xfa\x4a\x51\x58\x38\xed\xb5\xc2\xb8\x62\xd1\x2b\x45\xdb\xa9\x10\x61\x42\x27\x34\x51\x5f\x5e\x28\xfa\x41\x31\x48\xfc\x54\xc4\x59\xb9\xcb\x0b\xa5\x13\xdf\x99\xc4\x8e\x2f\xf5\x90\x42\xa9\x13\x41\x0d\x2c\x38\x0d\x7a\x43\xc7\x75\x11\x15\x76\xcd\xb2\xae\x76\xf4\x1e\x9c\xc2\xb7\x62\x15\x9a\xcf\xae\xeb\x15\xbf\x6b\x6e\x83\x80\xfa\xb0\x1c\x5b\xc3\x2c\xb1\xe9\x82\x6e\x59\x64\x35\x86\xd7\x2d\x47\x7f\x7e\x25\x16\xe1\xf3\x38\x4d\x2f\xe3\xe5\x97\x92\x92\x3c\x5b\xca\xe3\xad\xdc\xe6\xc5\x1d\x61\xfc\x52\xac\xc2\x52\xc5\xaa\x2a\x9f\x43\x9c\xef\xfb\x3d\xbf\xd1\x14\xf6\xa5\xfe\x73\x2b\x08\x86\xb8\x94\x2b\xc2\x2f\xc4\x7d\x21\xe3\xd5\xdd\x85\xd2\x42\x34\xc4\x9c\xfe\x68\xe6\xc5\x0f\x32\x5e\x75\x62\xe6\x20\x18\x0a\xc2\x44\x6b\x21\x04\x43\x95\x94\xe2\x7e\x7f\xae\xc4\x27\x85\x3e\xa9\x31\x3b\x67\xe5\x4c\xf5\x21\xf5\x85\x9a\x3d\x99\x1f\x29\x51\xce\xba\x27\x25\xfb\x16\xbf\xa0\x90\x5f\x50\x7b\xdd\x9a\x67\x69\xda\x6e\xd0\x10\xfc\xee\xd2\xd8\x67\x81\xda\xfd\x23\xe2\x5b\xf4\x9a\xef\x4d\x29\x7c\xcf\x12\x9c\x00\x5e\xf6\x5a\x33\x90\x54\xd7\x92\xdf\xcc\xe4\x5c\x98\x63\xc9\x3d\xcf\xaf\x65\x51\x24\x2b\xf9\x36\xd9\x62\x90\xc6\x83\xca\xe8\x25\x38\xc6\x6d\x4d\x3e\x21\x6d\x0d\xcd\x00\x0d\xf7\x31\xb8\xa1\x2f\xd9\x85\xf5\x9f\x93\xb3\x0b\x33\xa8\xbe\x57\x86\x42\x2e\xf8\x52\x0b\xd7\x33\xfd\x97\xcb\x99\x9a\xcf\xdb\x11\x20\xe2\x4b\x3d\xe5\x07\x0c\x5a\xea\xfa\xd6\xed\xac\x41\x90\x84\x90\x91\x2a\xc6\xdf\xd3\x89\x3d\x82\xdd\x03\x53\x7f\xed\xa0\x13\x2e\x18\x5f\x85\x55\x91\x0a\x4a\xf5\x4c\xd6\x97\x75\x6d\xb6\x01\x36\x26\x84\x39\xf6\xeb\xa3\xe2\x1e\x09\x1f\x93\xd3\x53\xa2\xcb\x82\xa6\x2b\x0b\xb7\x52\x6d\xf2\x55\x5d\x67\x26\xd4\xd5\xca\xa5\x60\x16\xbe\x6a\xb6\x55\x41\x9b\x1b\xe0\x3f\xd8\x61\x86\x86\x10\xeb\xde\xb9\x0a\x97\x45\x5e\x96\x2f\xf2\x6d\x9c\x64\xec\x7e\x00\xbe\x5a\xf3\x5a\x5a\x4e\x4e\x71\x47\x84\x8f\xe1\xe6\x06\x7f\x78\xab\x12\xf1\xba\xf3\x3d\x63\xbd\x99\xe6\xa5\x1a\x21\xcc\x80\xf7\x20\x85\x74\x23\x4f\x3f\x63\xf7\xed\x7a\x34\xe1\x4b\xd6\xe6\xab\x82\x60\x15\x7a\x9b\x5a\x13\xfc\xcd\xb1\x2a\x36\x9f\x29\x20\xac\xa0\x82\xb7\xba\x4f\x8b\x78\x05\x78\x78\x71\xca\x18\x7f\xa3\x29\x1e\x5f\xf1\x8c\x5f\x30\xbe\xb4\x5a\x81\x0b\xe0\x26\x36\xc7\x49\x46\xd7\x56\xad\xac\x5f\x8d\x3b\x2b\x0b\x82\x89\xd0\x74\x0b\x78\x80\xf1\x18\x58\x87\x96\x72\x89\x00\x49\x53\x71\xa1\x9a\x61\xc4\x9f\x36\xca\x1e\x5f\x81\xc9\x80\x09\x47\x32\x7a\x6e\x64\x0b\xcc\xca\x78\x8e\xdd\xdc\xc4\xdd\x82\x23\xcd\x56\xa1\xe9\x81\x7e\x01\x14\x4a\x43\x37\x71\xa3\xc7\x08\x69\xee\xe8\xe0\x77\x77\x7d\x70\x8e\x35\x9d\x88\x3f\xae\x1d\xcf\x14\x27\x63\xa2\xd9\xd7\x9d\x69\x21\x72\xbc\xd6\xe3\x86\x71\x6f\x14\xbc\x66\x35\x8a\x18\xd1\x1e\x2e\x88\x74\x38\x16\x74\x61\x3a\x20\x67\x53\x12\x90\x88\x4c\x09\x1b\xdb\x81\x43\x13\x46\x93\x1f\xf5\xc5\xab\x70\x19\x2f\x37\xe0\xba\x23\x72\xd7\xba\xb7\x8a\x93\x47\x67\x84\xf1\xdd\x70\x85\x64\x21\xc8\xf8\x52\x8d\xc7\xe3\x9d\x5d\x9f\x39\x5e\x26\x6b\xcb\xc9\x01\x6e\x83\xcf\xda\xcd\xf2\x79\x10\x5c\x84\x5d\xa2\x49\xc9\xeb\xf5\x89\xcd\x73\x72\x91\x64\x4b\x49\x78\xaf\x24\x68\x6b\x55\x7c\xf5\x50\x25\xef\xf2\x4c\x9e\xbc\xd5\x4b\x80\x34\xb9\x19\xe3\xde\xc4\x6f\x46\xdd\x68\xb5\x3b\xe3\x9b\xf9\xb7\x6c\xf8\x4d\xa6\x82\x93\x4f\x60\x32\xdd\xaa\x80\xf1\xa1\x02\xcf\x80\xd7\x23\x3e\x89\x99\x4d\xe6\xa0\xd5\x46\x2e\x70\xd6\x7e\x32\x9f\x1e\x7c\x32\xd6\x2c\x3e\x34\xdb\x4f\x9e\x12\x7e\x4c\xc6\xbf\xaa\x31\x39\x3f\xfe\x4d\x4c\xc2\xc9\x19\x89\x08\x61\x51\x53\x0d\x42\x05\xad\xc2\x0d\xee\x6a\x6c\xa0\x99\x9b\xe6\xf1\x6c\x33\x07\x1b\xac\x55\x88\x31\x50\x2e\x64\xb6\xb2\xa0\x4f\x7e\x1a\x1e\x00\x6e\xf9\x05\x5f\xb1\xba\x5e\xba\x23\xd7\x0b\x43\xda\xa1\x92\x5b\x41\xe0\x8e\xf0\x2b\x08\x8b\xb9\x6a\x30\x32\xf8\x05\x3a\x38\xaf\xc2\xb2\x02\x55\xa7\x4e\x01\xdc\x8c\x15\x6a\xf3\x18\x4f\xc4\x1b\xcd\x3b\x19\xf2\x02\x8c\xc0\x45\xd8\x30\x11\xe2\x8c\xaf\x83\xe0\xae\x43\x35\x20\x98\xcb\xec\x82\xaf\xe6\x2d\x82\xb4\x0a\x81\x7b\xd7\x1d\xaf\xd0\x7f\xe5\x5b\x40\xd5\x16\x87\x90\xa4\xec\x77\x10\x93\x9d\xb0\x3d\x77\x65\x19\x12\xf3\xa5\x18\x9d\xf1\x24\x2c\xb5\x48\x73\xc3\xdf\xb3\x86\x06\xc3\x86\xaa\x36\x45\x7e\x73\xfc\xec\xe8\x3d\x3d\x39\xe3\xcf\xd8\x7e\x0f\x7b\x29\xdc\x91\x77\xf9\xb1\x63\x11\x7d\x31\xfc\x3d\x8a\x92\x4e\xb6\x04\x2e\xef\x86\xbf\xe4\xb7\x22\x3b\x5a\xd6\x35\x5d\x6a\xa1\xb4\x0a\x82\x8e\x33\x4e\xa5\xbb\xcb\x1c\x61\xc4\xa2\xd4\xd4\x8a\xb7\x3a\x4b\x7d\x3b\x99\xfe\x59\x0b\x5c\x42\x7d\x2b\x9e\x4c\x26\x41\xa0\x9e\x7e\x33\x99\xd4\xf5\x37\x93\x3f\x0b\x21\x14\x2f\x82\x80\xde\xf4\xfc\xb0\x3d\x6c\x2a\x17\x65\xc5\x8a\x10\x5c\xf7\x9e\x9b\x8b\xe7\xe4\xb1\x16\xe3\xab\xd9\x64\x7e\xce\x2a\x77\xf4\xea\x5c\x42\x30\x1c\xb4\x74\xfc\x49\x5d\x83\x71\x4a\x9b\xe7\xea\xac\x30\xc6\x3c\xf3\x31\xcd\x7f\x94\x9a\x55\x29\xc1\x31\x54\xff\x45\xea\x54\x30\x76\x5f\x39\xe1\x39\x61\x47\x97\x85\x8c\xbf\xe8\x5d\x4f\x37\x26\xc9\x8e\x33\x96\x43\xbb\x80\x99\x69\x42\x1e\x67\xc8\x5b\x56\x18\x29\x37\x6c\xe4\x92\x59\x32\x26\xc7\x64\xac\x1f\xcc\xd9\x7d\x2e\x12\x53\x63\x0c\x11\x60\x12\xb6\x07\x10\x8b\x58\xbf\xc1\xd9\x6b\xe7\x23\xfc\xf6\x20\x68\x9a\x92\x33\x9e\xcd\xf2\xf9\x9e\xae\xf8\x05\x00\x01\x77\xfb\xb7\x83\x51\x0c\x91\x2f\xee\xf7\x10\xe7\xb1\xd1\x0a\xe0\xe6\x00\x3d\xb1\x9c\x9d\xcd\x31\x18\x23\x30\x63\x5e\x93\x59\x3a\x8b\xbb\xdc\x65\xeb\x93\xe2\xf9\x11\x06\x3c\x5c\xda\xa1\x39\xcf\xc1\xb8\x4c\x86\x6d\xd9\x6e\x66\xe2\xf5\x0d\xa4\x03\x57\x3a\xaa\x82\xa0\xd0\xf3\x4f\xb7\xf0\x15\x08\x3e\x41\x40\x95\xf0\x13\xe0\xb0\xc6\x7e\x01\x40\x0f\xe4\xdc\x7b\xb3\x7e\x2d\xce\x96\x5c\x8f\x8c\xd3\x4f\x23\x7d\xab\x82\xa0\x02\x4b\x78\x18\x1d\x1a\x8b\x74\x56\xc1\x78\xe4\xf3\xba\x4e\x67\xe4\x31\x5c\x7a\x41\x7b\x53\xb0\xca\x29\x45\xe2\xc1\xb1\xb2\xd9\xd9\xdc\x60\x5a\x37\x15\x00\x19\x75\x75\xc0\x1d\x63\xf7\x80\xb0\x1c\x4f\x63\x08\xea\x1b\x81\x93\x7d\x0a\x33\x8c\xe6\x42\xe7\xe1\x4b\x37\xa0\xa5\xee\x7f\x6f\x7e\x41\xe6\x58\xbf\x3e\xd6\x3d\x02\x0b\xbe\x64\x4a\xc4\xce\x44\x51\x93\x09\xbc\x6f\x88\x83\x51\x3d\x96\x20\x09\xb5\x8e\x34\x38\xfc\x44\xf1\xf4\x59\xa4\x29\x04\x0e\x5f\xa9\xe9\xc2\xba\xc8\xb7\x7a\x4a\x8e\xc9\xb1\xca\x75\x07\xec\xf7\xfb\x76\x3d\x86\x8c\x12\xae\xfb\x3d\x52\x7b\x3d\xeb\x6e\xf8\x05\x80\x19\x4d\x69\x67\x77\xa6\x2f\xc5\xc5\xd0\xea\x7b\x13\x97\xca\x6d\xc8\x88\x37\xd2\xdb\x8e\xc5\x4b\xc6\x0f\x95\xd7\x1b\xaf\x2d\x66\x36\x61\xf1\x92\x31\xfe\x04\x89\x4c\x5d\x93\x1f\x5e\x3e\x7b\x41\x60\x2f\xd1\x2c\xcc\xf4\x56\x90\x2c\xb7\xa8\xf9\x91\xa1\x45\x98\xaa\xb6\xb6\x1d\x11\xbd\x15\x37\x20\x92\x48\xbe\x11\x37\xc8\xd1\xa4\x62\x44\x77\xe2\xc6\x6c\x16\xc8\x4d\xdd\xf2\x91\x0a\x82\xdb\xba\xd6\x3b\x8f\xe9\x52\x05\x96\xd4\x80\x5d\x01\x5b\x34\x08\x36\x42\xb9\x4b\x88\x0d\x44\xb3\xba\xbe\xd5\x32\x05\x4f\xa7\xd7\x2d\xf8\xaf\x2d\x9f\x6d\xf8\x2d\xbf\x98\xb3\xe8\xda\xc7\xff\xda\xea\x4d\xe6\x96\xef\xe6\x4d\xa5\x5a\xc2\xa2\x97\x5a\x28\x36\x84\xb8\xb5\x3d\xa5\x53\xdc\xa0\xcc\x30\x45\x70\xf7\x12\xdb\xa8\xf7\x2b\x9e\x4e\x37\x91\xae\xee\x0a\x60\x75\xbc\x97\xcc\x99\xae\x89\x76\x76\xba\xe7\x66\x27\x75\xbb\xdd\xc9\x89\xe5\xa9\xe1\x44\x6c\x88\xa3\xce\xc1\xc2\xcc\x0a\xc1\x17\x20\xf7\xfe\xe5\xe2\xfd\xbb\x03\xde\x56\xc7\x0b\xeb\xf5\xc1\x33\x4e\x40\x0d\xc3\xa0\xcc\x05\x68\x93\x86\x45\x5e\x5b\xc6\xda\xa3\x34\xa1\x4e\x5b\x76\x5f\x57\x52\x11\x4e\x76\x79\xa9\xfa\x48\xe5\x1d\xef\xaa\x76\xb8\x84\x2d\x35\xb0\xf7\x60\x48\x54\x00\xfa\xb5\x55\x97\xa0\x32\xa4\xc1\xd2\x02\x2d\x90\xe4\xc6\x6c\xc9\x12\xa4\x28\xc1\x35\x92\x71\xb3\x66\x22\x00\xb6\xe8\x1e\x17\x05\x01\x58\x20\xea\x5a\x6d\xf0\xe3\x21\x43\x30\xf3\x4e\xff\x55\xa8\x9d\x74\xaf\xb3\x1d\xc0\x81\xdd\xf6\x34\x89\x67\x4e\xd7\x78\xc6\x91\x76\x80\x71\x40\xe7\x1c\xe9\xa6\x88\x77\xcf\xd2\x01\x03\x5d\x5f\xf4\x86\x9d\x87\x22\xec\x09\x95\xc2\xb3\xa8\x9d\x4d\x34\x1f\xac\xc4\xc2\xe0\xf3\xf6\xe2\x6a\xb3\x50\xfe\x46\x27\xcc\x8b\x2c\x67\xb3\xb5\x7d\x4c\x5a\xc1\x27\x6d\xcd\x5c\x75\x4f\xa1\x5c\xb8\x49\x38\x3a\x3a\x97\x18\x8b\xd3\x08\xc2\xe0\xe0\x7b\xce\x74\x03\x7b\xc9\x4d\x54\x65\x17\x89\x10\xcd\xb7\x8d\x1a\x43\xf7\xc3\xeb\x2c\x1b\x8e\xae\x7c\xc8\xa8\xdd\xf3\x58\x70\xe5\xdb\xfe\x0a\xec\x61\x2b\x76\x67\xb0\x9e\x09\xe5\x38\x1f\xda\x38\x9c\x4f\xb3\xd0\x0c\x10\x1c\xa6\x79\x31\x14\x19\x36\x79\x40\x1b\xb2\x6d\x4c\xf9\x87\x2c\x38\xb2\x76\x9b\x75\xd5\xaa\x6d\x23\xcd\x22\xac\xbf\xca\x7a\x6f\x68\x05\xfd\x83\xf1\xa3\x92\x85\x59\xae\x28\xb9\xcc\x57\x77\xa4\x1f\xbe\xb6\xf1\xe8\x70\xb1\x0c\xed\xc9\x9c\x8d\xaa\xce\xf6\x0d\xce\xa1\x71\xa5\xdc\x95\xb2\x5a\xe5\xa5\x05\x30\x1a\x80\xbf\xe8\x64\x84\x68\x4f\xa9\x84\xe8\x92\xc3\x8f\x86\x2a\x19\x51\xd9\x0e\x3e\x66\x6f\x31\x84\xc8\x03\xa1\x08\xe0\x35\xad\x23\x8f\xdb\x4d\xe1\xbb\xb3\xeb\xad\xd9\x0b\xc1\x22\xc3\x9f\xdf\xbe\xf9\x41\xa9\x9d\x11\x8d\xcc\x7e\xad\xd8\xfd\x1e\xf5\xaf\xff\x52\xe2\x7e\x02\xfe\xf9\x67\x4f\x9e\x7c\x13\x3d\x99\xfc\x79\xcf\x7f\x50\xdd\x73\x95\xdb\x4d\x41\xd9\x91\x16\x74\x8a\x52\x8c\x46\x3f\xa8\x20\x20\x37\x89\xda\x3c\x2f\xe4\x4a\x66\x2a\x89\xd3\x92\x24\xd9\xf1\x0f\x8a\xaf\xa0\xa0\xf8\x41\x41\x36\xd3\x58\x27\x14\xd0\x9e\x35\x06\x2f\x50\x2e\xd3\x35\xd7\xb5\xae\x78\xa4\x5a\x7a\x27\xcb\x0f\xb4\x22\xf2\xfa\x96\x9e\x42\x99\xe6\x69\x26\x1a\x82\x32\x52\x34\x07\xe3\x0a\xf4\x51\x0a\x85\x24\x7d\x57\xca\x02\x8f\xc4\xc3\x5d\x5c\x96\x37\x79\xb1\xd2\x4b\xfd\x76\x53\x20\x33\xd8\x30\xa1\x7e\xa2\xe6\x32\x85\x97\x60\x99\x4e\x93\xd1\x72\xfe\x41\x50\x86\x5d\xad\xe6\x50\x1a\x6d\x8a\xe8\x97\x7b\x9f\x5a\xd7\xc9\x8c\xfc\x7c\x62\x46\x4a\xae\x4e\x20\x00\xe7\xbc\xae\xe9\x60\xba\x20\xed\xa1\x25\x8c\x27\xac\xec\x8b\xc1\x31\x07\xeb\xe7\xa3\xa1\xe9\x7c\xec\xcd\x9c\x0c\xf4\xf4\x85\x28\xc3\x3c\x4b\xf3\x78\x05\x17\xc0\x6e\xc0\x15\x08\x8e\x70\x65\xc4\x45\xb8\x06\x59\x0c\x78\x98\xe5\x26\xce\xae\x30\x20\x2e\x37\xf2\x31\xf8\x93\x94\x56\x74\x8e\x0c\xef\x82\x5e\x26\x5d\x00\xaa\xd2\xb0\x1b\xd3\x9c\x4e\xb8\xc9\xc9\xa2\x9c\xda\x74\x5e\x7a\x9c\x8d\x7e\xf0\x2f\x35\xb3\x49\xf3\xba\x1e\xcc\x86\x47\x2a\x10\x66\xa2\x74\x7c\xbf\x51\x7b\xc1\x13\x36\x60\x05\xe4\xe5\x94\xb7\x6a\x7a\x7f\x99\x64\x71\x71\x17\x35\xc9\xfb\xe8\x1e\x0e\x5f\xda\x19\xf7\x1c\xe2\x43\xf6\xf5\xed\x94\xa1\xc5\xbf\xed\xd5\x8c\x32\x5e\x74\xfa\xd6\xf6\x68\x46\xed\x97\x37\xee\xae\xae\xef\xa7\xcd\x28\x14\xd1\x60\xdf\x7b\x83\xa9\x39\xce\xd2\x93\x94\x21\x1a\xd0\xa0\x4a\x20\x0b\x82\x82\x62\x7c\x6e\xfd\x7e\x1c\x39\xd4\x04\x94\xa8\x04\x50\x2d\x25\x13\x9e\xd6\x22\xfa\x90\x65\xff\x2b\x13\x65\x05\x75\x03\xd5\xbe\xa7\x32\x87\xd7\x64\xd4\xc6\xee\x68\x1d\x30\xd1\xb6\xf9\xb7\xb7\x20\xc0\x71\xdf\xee\x4e\x21\xf2\x1b\x02\x8f\x8f\x5b\x07\x44\xee\xe8\x11\xb3\x98\x33\xc6\xe6\x80\x90\x1f\xb7\xce\x10\x0f\xa4\xcb\xe5\x76\x30\xfd\xf6\xa4\x79\xd2\x3a\x6a\x34\x6f\x3b\xfd\x7c\x49\xa7\x91\xae\xb5\xd6\x19\x19\x26\xc3\xf9\x62\xeb\x50\x10\x8e\xf7\x4c\x35\x43\x9b\xdb\xc2\x68\x92\x5f\x5e\xc7\x7a\xd7\xe5\x72\xb0\xb3\x1c\xdb\xd5\xda\x80\x1b\x84\x0a\xab\xfc\x34\x57\xba\xbb\x78\xbf\x53\x11\x06\x44\x33\x74\x4d\x67\x36\x44\x7a\xf8\x1d\xe8\x9a\x02\x47\x2b\x5f\x49\xa0\x35\x9b\x41\x9e\x62\x65\xdf\x12\x86\x26\x3c\xf7\xe6\xdc\x38\x92\x66\x44\x9f\xe3\x3d\x2f\x8b\x65\x24\x35\xc5\xde\xb3\x30\xcf\x28\xd1\xab\xe5\xd8\x88\x3b\x6d\xda\xe5\x62\xf8\x5b\x0b\x70\x2e\x83\x20\xa7\x1e\x7d\x41\x31\xec\xcf\x93\x3f\xc3\xce\x86\xb7\xfa\x4b\x0b\x50\x08\xb6\x70\x59\x94\x66\xf8\x1e\x9c\xb0\xb0\x4f\x7e\xa7\xf8\x4f\x4a\xcc\xe6\xfc\x37\x25\x4e\xa9\x60\x9f\xa7\x74\x2a\x82\xfa\x11\xab\x3f\x4f\xd1\xe2\xd0\x9b\x90\x5a\xa8\xd8\x45\x64\x69\x0e\x18\xf1\xc8\x78\x67\xcf\x1b\xfb\x61\x32\x7e\x52\x68\x79\x0c\x22\x0e\x5a\xea\x8f\xc9\x02\x15\xd2\x2d\x7e\x58\x82\xf5\x86\x1c\x9c\x18\xfa\x1d\x70\xaa\xbc\x23\xbc\xe5\x16\xd1\x09\x19\x05\x5a\x62\x15\x42\xce\x20\xa0\xbf\x59\xa3\x26\xdd\xf5\x6c\x4a\xaa\x22\x25\x7d\xfc\x02\x65\x14\xce\x70\x84\xa0\xfe\xa7\x47\x08\xcd\x3b\x8d\xa2\x9f\xe8\x5f\x74\x93\x2d\xeb\x9a\xe0\x57\x80\xf1\x77\xcb\x34\xc4\x9e\xb5\xd9\xe6\xdb\x1e\x15\x5b\xda\x49\x61\xd3\x4e\x02\xd5\x6c\x6c\x2b\x85\x97\x53\x35\x2b\xe7\x42\xff\x71\xe7\x04\xbf\xe1\x39\xc1\x38\x61\x51\xa7\x9f\xa0\x7f\xbc\xe3\x08\xdb\x5f\xf6\x04\xc1\xe4\x04\x3b\xbf\x04\x76\xf6\x46\x4d\x65\x16\x14\x9e\xf9\xcf\x45\xff\x04\x36\x6e\xcc\x3d\x93\x31\x39\xbe\x89\xcb\xe3\x2c\x57\xc7\x7a\x02\xe9\x1e\xe3\xf1\x6c\x32\xdf\xf3\x76\x6f\x08\x94\x5d\x01\x3d\x3b\x99\x73\xfd\xa7\x85\x9c\x2b\x9c\x53\xe3\x9e\x17\x03\x28\xa2\x8e\x68\xe4\x53\xf0\x1e\x6a\x20\x24\x68\xc2\x22\xa8\x2e\x07\x1b\x49\xf8\xf8\x76\x7f\x67\x9d\xae\xd4\x13\xb8\x2a\x37\x34\x61\x10\xfe\x6c\x0b\xf0\xde\x39\x8d\x41\x98\x8a\x45\xde\xc4\x2f\xb0\xb4\x05\x0c\xac\xf1\x38\xf1\x87\x4f\x00\x05\x01\x6d\x15\x94\x7e\xa7\x44\x11\x26\xdb\x1d\x0a\x51\x30\x93\x06\x32\x52\x3d\xeb\x34\xef\xcf\xbc\x60\xf0\xe4\xa9\x9e\x6c\xdf\x3e\x3d\xc5\x1f\xff\x86\xf0\x27\x42\x88\xef\x94\xc7\xff\xbb\x83\x29\x63\x6e\x01\x55\x0c\xeb\x0c\xfa\xe8\x83\xd3\xd9\x3c\xa2\x83\x2e\xcb\xc6\xd8\x41\x13\x5e\x55\xd7\x74\xe8\x2b\xa7\x94\x26\x82\x7e\xf5\x77\xb2\xee\xb9\xeb\x65\x5c\x4a\x9d\x0c\x07\xad\x85\x33\x86\x36\xa6\x44\x7d\x1a\x97\x30\x16\x29\x01\x68\x91\xa3\x2c\x08\x66\x73\x4e\x73\xf1\xd6\xc6\xf1\x67\xd3\x99\xea\xbc\x21\x9f\x9d\xcd\xd9\x3c\xa2\xb9\xb8\x42\xf0\x56\xc5\x63\x18\xd9\xd8\x85\x44\x5b\xd0\x98\x35\x74\x78\x11\x6e\x65\xa1\xf3\xce\x79\xee\x8b\x58\x8c\x35\x56\x1e\x46\x03\x00\x5c\xd0\x41\x2c\x11\x1e\x23\x42\x75\x29\xa4\xef\xc9\xde\x04\x37\x40\xb7\xa8\x42\x6c\x14\xb5\x91\x66\xb5\x34\xad\x85\x6f\xbc\x9b\x70\x7d\x0f\xb6\xb9\x6d\xbb\x93\x48\x0d\x00\xaf\x42\x50\x0b\x41\x3e\xbc\xbf\xf8\xa4\xd7\x99\xc5\x54\x99\x04\xc1\x80\x0a\x24\xa9\xeb\xae\x16\x04\x2d\x99\x8c\x76\x92\x75\xe0\x6d\x25\xbb\xcf\x9b\x65\xc8\xe3\x50\xe7\xa6\xc5\x54\x6f\x8b\xab\xe4\xfa\x5b\x07\x11\x46\xbd\x29\x08\x10\x01\x6b\x44\x7c\x07\x89\xd8\xae\xdd\x2c\x08\xda\x2a\xa5\xb8\x27\xf5\xb6\x40\xfc\xf2\xba\xf6\xf4\xdd\xc0\x10\x2b\x2e\xe7\x80\x6c\x6d\xb4\x0f\x4e\x71\xd5\x9c\x4d\xf3\x46\xab\xc6\x3b\x2a\x39\x5f\xb9\xd7\x52\xfb\xf1\xe6\x94\xaa\x1f\xa0\xaf\x0b\x49\xd8\x96\xe6\x61\x8f\x92\x6c\x40\x06\x37\x68\x7c\xab\x61\xf5\xd4\x55\x21\x77\xd4\x41\x45\xfa\x62\xa5\x55\xb8\xc0\xf6\x81\x51\x3b\xcc\xa8\xea\xef\x45\x39\x1b\x1c\x29\xde\xc3\xe5\x61\x58\x1b\x77\x78\xd1\xc4\xcc\x35\x51\xf3\x20\x66\xb7\x26\x9a\x7c\x2d\xee\xf7\x47\x44\x33\xe1\xc9\x52\x6f\x58\x69\x13\xc4\xce\x8b\x3d\x6e\x43\xb3\x13\xc6\x4b\x17\x77\x9c\x22\x9a\xab\xa9\x1a\xb4\x98\xbc\x6a\x12\x52\x08\x41\xc7\x69\x13\x5a\x5a\x57\x5f\xd7\x64\x9d\xdc\xca\x15\xdc\xe0\x09\x79\xe5\xef\xbe\x95\xca\xc1\x73\x70\x4a\x63\x41\x0b\xb1\x74\x8d\xa0\x8c\x41\x9c\xf5\x44\xd3\x0b\xb9\x56\x2c\xa2\xb1\x1f\x94\x31\x67\x75\x3d\xe1\xad\xa0\xb0\x15\x04\x85\xe5\x88\x28\x4c\x95\x70\x91\x04\xb2\x16\xb4\xac\x5e\xe4\x06\xd4\x17\x42\xb9\x07\x01\x5d\xeb\x5f\xbc\x3b\x29\xf5\xdf\x71\xdc\x64\xd1\x6f\x87\x3c\xfa\xc2\xdc\x9f\x94\xf0\xa3\x37\x4e\x52\x95\x9a\xd2\x6a\xd9\x7a\xaa\x45\xf6\x24\xbb\xb2\xef\x5d\xb3\x68\x09\xdd\xb3\xc6\x50\x44\x9e\x3a\x31\xef\x8e\x25\x48\x24\x87\x30\x3a\x1a\x7e\x19\xb4\x6b\x43\x8a\x32\x98\xba\x58\x6b\xe8\xe6\x8a\xc5\x1a\x55\xcc\x70\x85\x88\x75\xd0\x01\x13\x28\xa6\xc5\x21\xf5\xcd\x14\x88\xfe\x81\x68\x80\x3c\x13\x45\x5b\x89\xe9\xfb\xf9\xf1\x7b\x95\xef\x22\xe8\xd3\x71\x16\xee\xe2\x2b\xf9\x0b\x36\x8a\xeb\x9e\x8b\xb0\x1f\xcd\x93\x9f\xf1\xc9\x9e\x45\x50\x68\x82\x59\x26\x7b\xeb\xeb\xce\x77\x03\x41\xd6\x93\xb5\xd3\x7f\x5a\x50\x4b\xff\xeb\x78\x22\xda\x95\x69\x66\xad\x99\x8c\x38\x6f\x0b\x7f\x8d\xb0\x07\xbe\xb5\x39\xb4\x34\xf1\xe7\xdc\x9a\xe8\x75\x02\x97\x3a\x05\x1e\x7f\x00\xd5\x5f\x5d\x67\xe1\xca\x3c\x34\x1b\xd6\x39\x22\xd2\x0a\x91\x01\x4f\x50\xd7\x78\xdd\xc9\x05\x78\x06\x6e\xa9\x0e\xac\x6a\xd4\xe1\x7a\x28\x45\x5a\x6e\xc6\x78\x24\x3d\xc8\x7c\x9a\x00\x05\x70\x0d\x87\xe5\xd5\x0b\x84\xfd\x29\xdf\xb9\x10\xd8\x8c\x27\x38\x48\xdd\x4c\x6f\xe4\x5a\x35\xb9\xec\x49\x46\x33\xde\x27\x09\xfc\x75\x5d\x8c\x31\x9b\x3e\x69\x0a\x0d\x48\xf9\xcd\xf8\x9f\xe0\x1b\xba\x59\x21\x9c\x25\xfa\xb5\xed\xb9\xdf\x95\x5f\xe9\x83\xd1\xd6\x7e\xb7\x06\x43\xf7\xfc\xd7\x74\xaa\x5f\xc6\xe9\xc4\xeb\xfa\x52\xee\xdb\x28\xb2\x2e\x70\x59\x44\xbc\x99\x4c\xb8\x0b\x74\x86\xe9\x66\xee\x1f\x70\xb9\x6b\x65\xd1\xfb\xc0\x51\x0f\xfe\xb5\x78\x20\xb8\x24\x1c\xcc\xe8\x9a\x20\xec\x37\x40\xba\xe5\x42\x46\xff\xd5\x9d\x02\xb9\x90\xfe\x0a\xf5\x83\xe5\xba\x03\xf4\x69\x3e\x53\xf3\x48\xce\x8a\xf9\x51\x3e\xcd\x5d\xbc\x36\x9a\x4d\x73\x7f\xa9\x46\x09\xcf\xa6\x49\x94\xfb\x0b\x9b\x41\x31\x91\xec\x01\x6d\xb7\x47\xcb\x3a\x60\xc1\x7a\xbb\x86\x3d\xe3\xe1\x10\xb9\x10\x22\x75\x97\xdc\xca\xf4\x83\x19\x21\x3f\x7b\xd6\x0a\x97\x6b\x43\x6d\x2b\xc6\x6d\xec\xf3\x8c\xa1\xb0\xd0\x6c\x2b\x33\x35\x87\xf0\xa5\x51\xb6\x67\xde\x40\x9a\x60\xd8\x2e\x7e\x2f\xcc\xef\xc8\x04\x26\xe9\x83\xf3\x62\x21\x17\xed\x14\x58\x7a\x32\x96\x56\xdb\x12\x29\x4e\x48\x44\xf2\x4a\x41\xf2\xbe\x83\xf6\x0a\xa3\x5b\x78\xa3\xeb\x05\xf6\xef\xf6\x9b\x66\xd0\x3d\x04\x64\xc7\xd1\x27\x7a\x6f\xce\xea\x9a\xc2\xc9\x79\x52\xd7\x23\x94\x8d\x6c\x84\xb4\xc8\x06\xb6\x75\xac\x68\x77\xe2\x00\x04\x81\x9d\x38\x26\xcf\x9d\x66\x43\xc1\x50\xa4\xd9\xa4\xf1\x2b\xd8\x54\xcd\xdc\x77\xce\x23\xe5\x88\x55\x97\x6a\xcd\xc8\x12\x08\x27\x64\xfb\x2f\xe0\x6a\xec\x1c\x9c\xd2\x5c\xf4\xf2\x73\x17\x72\x4c\x01\x31\x04\xe9\x33\x4f\x53\x5d\x9e\xe7\xad\x3b\x9b\xc1\x86\xfc\xc5\x0c\xed\xbb\xe6\xe5\xcc\xfa\x77\xe8\xfe\x99\xe2\x4a\x57\x10\x92\xd7\x85\x2e\x44\x14\x86\x92\xed\xb5\xc0\x30\x4d\x22\x6b\xbb\x03\xa0\xba\x6e\x72\x90\xcb\xb4\x2a\x8e\xc1\x6d\xf6\xd8\xf8\xd2\x1e\x5b\x27\xda\xe3\x42\x96\xc9\xbf\xe4\x31\xb6\xf2\x78\x99\x26\xcb\x2f\xc7\xab\xcb\x14\x2f\xb6\x79\x55\xca\x55\x7e\x93\xe1\x55\xb5\xc3\x5f\x2d\x84\xe0\x55\x7e\x2d\x0b\x73\x55\x29\xbc\x90\x99\xb2\x69\xa9\x8c\xaf\xe5\x31\x6a\x4b\x8f\xd1\xdb\xf1\x18\xbd\x24\x8f\xbf\xc8\x3b\xa8\xf7\x8b\xbc\xdb\x15\xb2\x2c\xf5\x45\xb5\x3b\x36\x36\xe6\x5b\x99\x55\xc4\x33\xc4\xf8\x5d\x26\xd7\x3b\x6e\xee\xe1\x35\x4e\xa6\x0d\xe7\x8b\xda\x2b\x6e\x43\x86\xda\x93\xed\x01\x8f\xe9\x8d\xfe\xb4\x07\xfc\xa5\x9b\x6f\xd5\xeb\xb3\xf9\x5c\xaa\x00\x11\xa0\x5b\xdd\x65\xe2\xab\xeb\xda\x07\xe4\xb6\x79\xd2\xb8\x6f\xf3\x0c\x4e\xe5\x7a\x45\x3a\x05\xd6\x6b\x57\x82\xed\xb9\xc5\x44\xf8\x9d\x40\x0a\xc8\xff\x9b\x80\x08\x55\x76\xa0\x94\x2b\xa3\xb7\xe1\x1e\x58\x93\xf7\x7a\xf2\xf8\x31\x31\x7d\xa9\x13\x14\x07\x7b\xe7\xc7\x84\x67\xa6\x0b\x76\x45\x7e\x7b\x37\xec\xe8\xc9\xc1\x99\xb5\xaf\xfa\x02\x91\x5e\xce\xd4\xdc\xc4\x1a\xc8\x34\x4f\xec\x85\x1e\x14\x39\x32\xa8\x8d\xa0\xf7\x84\x71\x9a\x0c\xa8\x79\xa4\x15\xcf\x8c\x93\x74\x61\xbd\xd9\xba\x35\x00\xcc\x5c\x78\x55\x25\x2b\x21\xfd\x9f\xba\x5e\xc0\xef\x78\xcc\x13\xcd\x01\x6f\xf2\x74\xf5\x51\xc6\xab\xbb\x36\x86\x0a\x40\xc9\xc6\xab\xbb\xbf\xc7\x89\x1a\x8f\x23\x73\x07\xc1\x1d\xc0\x24\x00\x7c\x08\x45\xcb\xa3\xd0\x2a\x41\xfe\x72\xf1\xfe\x9d\xf0\xbc\x52\x16\xce\xd1\x51\x7c\x81\xb2\xaf\xcc\x8b\xc4\x16\x6e\x11\x74\x42\xe8\xf2\xcb\x78\x2b\xd3\xe7\x71\x29\xc5\x2f\x7c\x81\x2a\xe6\x4b\x28\x7f\xe3\x5c\xb4\xa1\xc8\xbb\x6a\x2b\x8b\x64\x39\x10\x05\x02\x4b\x35\xe7\xc8\x7e\x20\x7f\xe5\x1b\x0a\x0b\xcd\xcb\x8d\x92\xf2\x5d\xfc\x8e\x4a\x3f\x14\xb9\x64\x6c\xcf\x89\xad\xd9\x33\x29\x96\xeb\x24\x93\x41\x80\xbf\x61\xbc\x5d\xd9\x6b\x4a\xd0\x5f\x84\xf0\xd9\x7c\x20\x76\xf7\xc2\x70\xfa\x7f\x57\x42\x86\xbf\xfe\xa8\x73\xf2\xbf\xe9\xeb\x47\x4d\x84\x95\x2c\x7f\x9e\x67\xeb\x34\x59\x2a\x31\x24\x88\x86\x8f\x34\x63\x04\x82\xe1\x23\xf1\x37\x05\x41\x2a\x6c\x5d\xee\x89\xb9\xfd\xbb\x62\x7c\xb1\x07\xc5\x91\x4b\xd3\xc5\x16\x3a\x99\xf5\x60\xc9\xf5\xda\x38\xda\xc6\x49\xf6\x1c\xe9\x94\x68\xef\x48\xec\xde\x99\x60\x22\xa2\xb0\xd9\x13\x25\x2f\x01\x12\xe9\xa8\x04\x74\x92\x64\x16\x8f\x05\x39\x45\xf0\xd2\xb9\x41\xfe\x16\xb9\xce\x90\xac\xa9\x3b\x89\xaa\xec\x8c\xaf\x8e\xf0\xa9\xd0\xd2\x5f\x5d\xb7\x17\x13\x9e\x01\x29\xc0\x7f\x79\x89\x0e\xec\xcf\xf3\x2a\x5d\x81\x42\x73\x9d\x64\xab\xe3\x6d\xbe\xaa\x52\x69\x70\xe1\x0a\xf9\x5b\x95\x14\x72\x75\x7c\x79\x87\xce\xed\xd1\xd7\x14\x64\x7b\xf8\x1c\x17\x7f\x2d\x15\x65\xb8\x92\xbb\x92\x2f\x45\x19\x5a\xb5\x3b\x5f\x0b\x5d\x17\x3a\xcc\xa6\x4e\xdb\xb7\x11\x93\xf3\xcd\x53\x7b\x7f\xbe\x19\x8f\x19\x91\xb7\xbb\xbc\x50\x25\x48\xd5\xb3\xcd\x7c\xba\x9e\x6d\xe6\xa2\x8a\x88\x69\x5d\x3b\x5d\x45\xf0\x53\x50\x9d\xc4\x63\xc7\x0f\x2c\x7d\xe5\xcb\x9a\xf1\x6a\xaf\xc9\x89\xa6\x69\x7a\x9e\xad\x9a\xc9\x78\x03\x6b\x26\x08\xbc\x67\x8e\x0d\x31\x96\xf1\x41\x40\x66\xa8\xaa\xb2\x29\x73\xdd\x88\xfb\x7d\xa8\x72\xf4\x2a\x43\x8a\x61\x1e\xb2\xba\xa6\x26\xfe\xdd\x4b\xbd\x60\xbc\x4b\xc0\x69\x69\x38\x53\x3c\xe5\x6d\x27\x85\x8b\x45\x9a\xc7\x2b\xd9\xf6\x26\xbd\xdf\x1f\xc9\x03\x11\x8c\xee\xf7\x47\xd9\x94\x16\xd0\xe5\x42\x69\x32\xe6\x14\xc3\x80\xea\x00\xe9\xb3\xb9\xff\x00\xa0\x4d\xe4\x5c\x14\x7b\x4e\x07\xa1\xa7\x0a\xb3\x79\x68\xc2\x67\x98\x6a\xa1\x38\x9c\x3d\x0e\x9a\x50\x24\x00\x55\x0c\xbf\x63\x37\x77\xf7\x5c\x85\x0b\x19\x7f\x59\xe8\xad\x50\x24\xbc\xf9\x34\x71\x8f\x5d\x1d\x49\x6e\x06\x35\x52\xbc\x90\x57\x49\xa9\x8a\xbb\x28\x31\x66\xcc\xd2\xeb\x8c\x10\x0b\x70\xe5\xa7\x99\xb2\x7b\xca\xb8\xa4\xe4\xff\x91\xba\x87\x4f\xfd\x33\x0f\x3c\xc3\x2b\x4f\x8c\xb5\x5d\x41\xf8\xcc\xcd\x2e\x4e\x20\xff\xc9\x65\x7c\x29\x53\x77\x57\xa9\x24\x6d\x9e\x6d\xa5\x8a\xf5\x33\x53\xf5\x4a\x5e\x56\x57\xcd\xad\x21\x80\x36\x73\x51\xc1\xd1\x71\xf3\xdc\x6f\x49\x9a\x5c\x9e\x02\x70\x44\xac\xe4\x09\xa2\xa1\x9b\x62\x57\x69\xb2\xdd\xca\xa2\x23\x29\xb4\x91\x53\xd9\x3d\xa9\x4a\x79\xac\x5f\xb8\x54\xe4\x08\x17\x99\x3f\x0e\x8e\xb2\x24\x8e\x58\xd2\x09\x57\x5a\x32\x00\xbb\x97\xe7\x4d\x48\xfb\x8f\xf0\x94\x19\xed\xc9\x70\x9c\x11\x2b\xf5\x42\x1d\x49\xb6\x91\x45\xa2\x4a\x46\x13\x2e\xb5\xd8\x8c\xda\xe9\x61\xea\x8a\xcf\x5a\xc6\x4f\x7b\x9e\x74\xc2\x46\xb7\x4c\x64\xf4\xda\x58\xc0\xa6\xa1\xf7\xb5\xe7\x70\x4e\x4a\x27\x3c\x0b\x57\x09\xe4\x89\x8b\x3b\x46\x71\x2e\xb6\x2a\xca\xf2\x62\x0b\xf8\x05\xc3\x01\x8c\x90\x3b\x8c\x08\x58\x55\xcd\x26\x73\x5e\x08\x35\x3b\xb3\x6a\x21\xa2\xe4\x76\x97\xc6\x4a\x12\x04\xf1\x1f\x93\x88\x8c\x1b\x48\xd6\x53\xfa\x39\xac\x17\xf5\x09\x0b\x4f\xaf\x86\xf0\x1d\x65\xb8\xdc\xc4\xc5\x33\x45\xcf\x58\xdb\x5d\x68\xcf\x22\xd9\x6e\xa6\x99\x7a\x03\x8d\xb4\xf6\x53\xf8\xe1\x54\xa2\xfd\x97\xc9\xff\x16\xdc\xc7\xf4\x03\x5e\x18\x95\x79\xeb\xec\x11\xbc\xa6\x8d\x3a\x28\x9b\x53\xc5\x18\xa7\x85\x28\x90\x95\xb1\x95\xbc\x57\x1b\x60\x5f\x59\x10\xd0\x09\x2f\xed\x4a\x66\x80\xe1\xc2\x8b\x76\x43\x5d\x4b\x0e\x6a\x87\x3b\xa3\x04\x4b\x9e\x1e\x78\x22\x3a\xe9\xc8\x0b\xf8\xef\x5b\x0c\xbf\xd0\x2a\xf2\x92\xf6\x20\xc6\x22\xd1\x83\xa8\xb7\xc7\xb3\x39\xaf\x44\xc9\x53\x3d\x4b\x40\xa5\x65\xe6\xb2\x8f\x13\xc7\x97\xa2\x02\xa3\xe2\xd7\x56\xce\x3b\xd5\x72\x82\x38\x39\x1b\x09\xb1\x9c\x56\xee\x74\x62\x89\x18\x67\x47\xad\x09\x11\x07\x01\x66\x04\x4d\x6b\x65\xdb\x71\x0a\x3a\x61\x35\x53\x66\xb7\x3a\x39\x9b\xf3\x4c\xb7\x42\x33\x8c\xbb\x44\xc1\x6c\x64\x54\xb9\xca\x4f\xce\x58\x03\xce\xc6\x6c\x8b\xf5\xee\xf9\xce\x36\x95\xd1\xcc\x9c\xca\x6c\x04\xd1\xbc\x83\xde\x58\xca\x29\x79\xab\x2f\x23\xac\x3b\x8d\xcb\x32\x59\xdf\x31\x1a\x23\xd8\x71\x55\xd7\xa3\xd8\x98\x77\xe8\x3d\x55\x0b\x9f\x2f\xdb\xe8\x34\xeb\x2a\x4d\xf5\x3b\xa2\xe3\xff\x86\x9d\xfd\xbf\xf9\xf1\xb6\x2a\xd5\xf1\xa5\x3c\xd6\x4c\xf4\x06\xfc\x2d\xb7\xc7\xff\x0d\x07\x29\xba\xdf\xfe\xbb\x39\xd5\xb9\x77\x85\xcd\x41\x4b\xcc\x6d\xca\xdf\x13\xb5\xc9\x2b\xf4\x4a\x2f\xf9\x2a\x01\x03\xae\x68\xcd\xe1\xa7\xe2\x45\x9e\xab\x28\xe5\xbd\x29\x0c\xfe\xd9\x3a\x89\x8c\x37\xfb\xf6\x2c\x48\xf3\xfc\x4b\xb5\x7b\x21\xf1\x20\x52\x73\xb2\x5f\xb7\x50\x5a\x4b\xa2\x19\x3c\x10\xc8\xc1\xdc\xc0\xa5\x1d\xc7\x4a\xb3\x32\xe1\xc0\x37\x34\xeb\xfd\xb3\x5e\xe8\x7a\x80\x23\x40\x34\xd5\x1f\x32\x26\x21\x19\x77\x06\x00\xa1\x39\x58\xb7\x1c\x61\x9c\x6c\xf3\x95\x4c\xc9\xc8\xbe\x5f\x6f\xec\x63\xd1\x2b\xae\xd0\x59\x21\xeb\xac\x85\x6d\xfc\x45\x7e\x32\xac\xc4\xd0\xf2\x93\x8e\xd1\xa0\x9d\x92\x55\x29\x3f\x82\x0a\xe3\x5d\xbc\xed\x16\x26\x97\x71\x89\x8a\x40\x09\xed\x9e\xe2\x8f\x20\x24\x32\x57\xf8\xd3\xfd\x9c\x05\x61\x83\x34\xec\x93\xe9\xd1\x41\x82\xfb\x75\xdd\x7b\xe4\xf6\x95\x4a\xaf\x5c\x5b\x23\xa3\x4a\x33\x4d\xbd\x54\xe8\xbf\x95\x04\x59\x06\xd7\x56\x97\x8a\x98\xa6\xfd\x2d\x91\x37\x07\xe9\x56\xa7\x8f\x1c\x92\x70\x8b\x4a\xca\xe1\x8a\x35\x2b\x5f\xe4\x69\xda\x89\xe9\xf4\xff\x55\xf5\x50\xf0\xff\x4a\xcd\x6f\xf5\x7c\x1c\x18\xa9\xce\x94\xc4\x19\xe0\x8d\x8b\xa1\xa8\x12\xd6\x40\x6f\xf7\x36\x95\xff\x20\xd3\xdd\x03\x3d\xf2\x35\xed\x83\x87\x5f\xdd\xbe\xee\x42\x34\x46\x44\x7f\xb0\xd9\x9a\xa8\x7e\xcd\x2b\xff\x50\xdd\x5f\xb2\xfc\x26\x7b\x95\x17\xe0\x10\xdf\xdf\xc9\x12\x1e\x3f\xb8\x51\x95\xbd\xd7\xeb\x4d\xc6\xc3\xeb\x2c\xc7\xe4\x11\x31\x9b\xc7\x00\x53\xc4\x97\x02\xdd\x09\xc2\x2f\xf2\xae\xd4\x5b\x44\x13\x02\x6f\xe9\x07\x39\x4b\xc4\x72\xa6\xe6\xbc\x6a\x02\x1c\xd2\xd4\xe0\x50\x17\x71\x56\xea\x05\xf7\x49\x8b\xce\x2a\x4e\x32\x59\xbc\xaa\xd2\x34\x03\x6a\xcb\x13\x36\xf7\x51\x77\xd3\xf6\xe7\x3f\x54\x78\x10\xa7\xab\xff\xb9\x85\xf0\xb7\xcc\xc7\xd6\xec\xbd\xc1\x93\x02\xee\x0c\x69\x41\x5c\x6a\x66\x54\x93\x82\x42\x8f\xc3\x9e\xc6\x21\x7e\x3e\x3b\x72\xea\x7f\x08\x08\x3c\x2c\x10\xa0\x64\x32\x20\x05\xc0\x21\xd7\x61\xd6\x3d\x8d\xff\x75\x07\x52\xc7\xe1\x2c\xde\xfd\x00\x2f\xdf\xe1\xe0\xcd\x90\xa1\x50\xf3\xa1\xc8\x77\xb2\x50\x77\x54\x72\x72\x25\xd5\x7b\x6c\xca\xbd\xcc\xaa\xad\x2c\xe2\xcb\x14\xfc\x39\x5a\xe0\xd4\xcd\x72\x0b\x6d\x81\xfd\x9e\xf1\x83\xb5\x96\x7f\xb4\xd6\xf2\x6b\x6a\xcd\xb3\x37\xd0\x23\x5f\x55\x67\x16\x62\xf6\x07\x6b\x2c\x2a\xc8\x63\x82\x7c\x7e\x65\xbd\x7e\xa1\x07\x6b\x47\xb1\xf1\xeb\x1b\x6c\xf2\x3f\x58\xa7\x99\x72\x5f\x59\x67\x61\xa7\x28\x6a\xe0\x0f\xcd\xd1\x52\xc5\xe0\xa6\xee\x4f\x53\x93\x71\x97\xa7\x77\xeb\x24\x1d\x90\x51\x8d\x34\x5b\xe4\x37\xa5\x2c\x4e\x64\x76\x9d\x14\x79\xa6\xc5\x39\xf7\xec\x3a\x91\x37\x5e\x55\x32\xbb\x4a\x32\xe9\xbd\xee\x2b\x05\xd2\x01\x61\xb4\x14\xb9\xfd\xb2\x06\x7f\xa9\xf9\x24\x84\x11\x5e\x56\xa5\xca\xb7\x80\x2e\x59\x62\x8a\xa6\xa7\xe6\x9c\x04\x13\xb4\x70\x18\xf5\x84\xc3\xb2\xda\x39\x18\xe0\x8e\xa0\x8a\xfb\xa1\xf7\xaa\x70\x71\x13\xab\xe5\xe6\xb5\xf9\x28\x1b\x49\x02\x77\xa5\xab\xa4\x04\xe3\xcc\x13\xaf\xc0\x89\xfd\xfe\x08\xb8\x6f\xc8\xca\xef\x31\x51\x25\xb1\x92\xd1\xe8\x0c\xfc\xa5\x2e\xf3\x5c\x5d\xdc\x65\xcb\x87\x9d\xa4\x42\xc8\x27\x57\x68\xca\x40\x25\x50\xf2\xca\xed\xdc\x80\x18\xfa\xd1\x28\x3a\xc0\xae\x38\xf4\x3a\x01\x75\xe7\x5e\x82\x68\x3d\x8e\x7a\x8f\x7b\x5f\xef\x3d\xe4\x0d\x2e\x27\x88\x31\xb0\x7d\x78\x9b\x50\x61\x4e\xbe\x38\x3c\x28\xe1\x01\x27\xb6\x08\xf1\x8a\xb3\x81\x6e\x2e\xaa\xcc\xf6\xf1\xeb\x2c\x51\x88\x24\x58\x94\xa6\xbf\x65\x98\x94\xaf\x33\x25\x0b\x74\x16\x6c\x62\x5d\x54\x3b\x18\xff\x17\x49\xb9\xd3\xc3\x24\x0b\x6a\xea\x36\xdd\x26\x46\x13\x83\x23\xcb\x5b\x5d\xd5\xea\x74\xf4\x1c\x6a\x34\x1a\x9d\x5e\xc5\xfa\x16\x56\x9d\xb4\x58\x00\x8c\x12\x7e\x6e\x04\x1f\xbb\xcc\xb7\xbb\x4a\xc9\x15\xa3\x07\x4e\xdc\x51\x2a\xa1\xa6\x8f\x70\x66\xb0\x3d\x0b\x6d\x48\x23\xca\xf8\x2a\x59\x3d\x07\x5d\xc7\xc7\x3c\x87\x03\xe7\xa8\x6d\x39\x8f\xa6\x64\x9f\x72\xda\x1d\x34\x08\xc6\x1c\x17\x4a\x73\x76\x49\x76\xe5\x4f\xf7\x43\x43\x14\xfa\x05\x5c\x8f\xad\x92\x15\x58\x38\x23\x8b\x28\x46\x13\xdb\x67\xd8\xe8\xde\x32\x6a\xe7\x77\xa2\x7b\xaf\x1a\x7e\xb8\x19\x4d\x3e\x80\x90\x44\x74\xe9\x9f\x3e\xbe\x19\x70\x40\x3b\x54\x49\x6b\xb1\xb4\x2a\x04\xf5\xa2\xa9\x10\xb8\xc6\xa1\xf9\xd2\x37\xd7\x6e\x0d\x18\xb8\xa4\x2e\x56\x4d\x76\x1c\x3a\x5e\x74\xda\xe3\xcf\x65\x4e\x7c\xca\x44\x18\x4f\x7a\x8d\xef\x64\xc8\x05\x28\xc6\x34\x0b\x73\x95\x31\x7a\xbf\x07\x23\x85\x56\xec\xc3\x6a\x47\x73\xde\x1b\x7a\x2e\xc1\xb7\xb5\xd5\x63\x9e\xbe\x6e\xa0\xc3\xc2\xaa\x48\xb5\x38\x76\x9d\x94\xc9\x10\xea\x91\xce\x7b\xd4\xef\xcb\x23\x0f\x10\x78\xb1\x58\x5a\xc6\x6c\xb1\x70\x3d\xe5\xef\x10\xb6\x97\xfa\x1f\xee\x88\x44\x3e\x70\x80\x56\xd8\xb0\x0f\x61\xb9\xc9\xab\x74\xf5\x51\x66\x2b\x59\x4c\xe9\x84\xc7\x61\x01\xd7\x17\x52\xa9\x54\xaf\x33\x16\xaa\x8d\xcc\x86\x96\xdb\x9e\x45\x6a\xcf\xdb\x5a\x65\xf0\x6a\x40\xa7\x6b\xd4\x72\x98\x3b\x38\x11\x04\xcf\x08\x30\x77\x78\x76\x99\x17\x0a\x0d\x9e\xa4\x81\x0b\x4d\xc2\x05\x36\xf9\x6d\xb2\x2c\xf2\x34\xb9\x34\xee\xca\x4d\x21\x67\xb6\xfe\xbb\x39\xb1\xc9\x39\x2f\xd9\x11\xb4\xe2\xa1\x37\x7b\x07\x2c\x32\xdc\xca\xb2\x8c\xaf\x24\xa8\x02\x2b\xaf\x4b\x13\x8f\xbc\xba\xd9\x52\xe9\x81\xc3\x19\xcf\x13\x6f\x01\x80\x24\xac\x2f\x18\x6b\x1a\xb2\xe7\x37\x49\x9a\xbe\x90\xa5\x2a\xf2\xbb\xff\xe9\x46\x59\x65\x03\x5b\xe5\x7e\xcf\x8e\xf4\x56\x99\xef\x64\x86\x91\x90\xee\x0f\x13\x62\x9c\x82\xfd\x10\x88\x5e\x80\x18\xf7\x70\x76\x36\x9f\xfa\x37\xd1\xfd\xfe\x48\x85\x2a\x7f\xd9\x4c\x43\x88\x3d\x88\xfb\xa5\x62\xb0\x35\x36\x3b\x76\x6f\xb6\xf2\x4e\x61\xca\xfa\xbb\x76\xab\x8a\x52\x16\xd7\xc9\x52\x46\x27\xd6\x42\x43\x57\x61\xaf\x07\xca\x7a\x5d\x0a\xe2\x8b\xf5\x3d\xa9\xc4\xd0\x89\x9e\x74\xf4\xa8\x6f\x61\x30\xd8\x1d\x13\xbf\x3b\x26\xd8\x1d\xfa\x8d\xe6\x98\x31\xb1\xc7\x9b\x90\xd8\xda\x4d\x45\x11\x6e\xe2\xf2\xc5\xfb\xb7\xa6\x89\xb8\xd4\xb4\xbc\x2f\xa4\x7f\xd7\x78\xad\xe9\xed\xf8\x3b\x64\x0c\xa7\xa6\x3e\x73\x2b\x46\x23\xef\x61\xd4\x79\xd8\x7e\x91\x4b\xb7\x5b\x87\x69\x2a\x1a\x19\xf4\x9b\x09\x1e\xe7\x40\x9b\x71\xc6\x09\x92\xe5\x99\xf4\xbd\xe9\x64\x9b\x70\x20\x19\xf3\x52\xa0\x75\x7e\x42\x34\x90\x65\xc2\x7b\x89\x5f\xdd\x40\x3d\x43\xec\x14\xc0\xd7\xdb\x3b\xd1\x3c\x88\xda\x0f\x86\xce\x09\x5d\x1d\xae\x0c\x9a\x92\xf8\xc4\xdf\x82\x11\x1f\x64\xef\x5a\x1d\xe3\xb3\x6e\xad\x4e\xf4\xd8\x32\x3f\x3f\x7e\xaa\xcd\xed\xce\xaa\xf1\x82\xb5\xa7\x42\x8b\x33\xa3\x43\x1d\x33\xea\x64\x73\x78\x0e\xd2\x97\xfc\xfd\xe5\xd7\x0b\xc2\xde\xdf\x22\xbd\x0d\x12\xa7\x95\x68\x4f\xab\x2e\xd7\x28\xfa\x2d\xe3\xad\x09\x2e\xba\xf3\x9f\xbb\x40\x44\x78\xf4\x2e\xf7\x1c\x82\x67\x37\x9a\x81\xf2\xa0\xd4\xd5\x15\xe1\xff\xe0\x49\xe1\x90\xbc\x35\x2c\x8b\x0d\x9f\x25\x16\x55\x96\xe6\x60\x36\x38\x78\xf2\xf8\x90\x3e\xa2\x7b\xfa\xd8\x16\xf6\xcc\x53\xe4\x1d\x87\x2b\xf4\x24\xc0\x96\x68\x68\xa2\x6c\x02\xe7\xf0\x87\x8e\x2b\x7d\xf4\x50\xbe\x1d\x90\x17\xef\x70\x76\xa8\xf8\xea\x4a\xae\xac\xba\xf7\x4d\xa2\xc7\x39\x7d\x93\xe7\xa5\x64\x74\x46\x4e\x2e\xab\xe5\x17\xa9\x4e\x10\xd2\x02\x88\xfe\x9c\x0f\x27\x33\x7e\xad\xc9\xcd\x15\x44\x7f\x69\x8b\xa1\xbe\xfc\x84\xf0\x04\x5c\x76\x58\xca\x03\xd2\x69\x5c\xa9\x5c\x4b\x25\x5a\x9c\x5f\x98\x93\x64\x3d\xcb\xe0\xde\xeb\x3f\xbb\x81\x96\xff\x23\x19\xf6\x91\x25\x5a\x8f\xc4\xb2\x59\xb6\x75\x4d\xaf\x35\x89\x4b\xcc\x92\x09\x82\x91\x7d\xfa\xc2\x05\x01\x2b\xc3\x34\xb9\x2c\xe2\x22\x91\x8d\x90\xfb\x3c\x2f\xe4\x1b\x48\xbd\xa3\x04\x0b\x10\xcd\xd8\xbb\xba\x29\xb3\xd0\xac\xcc\xed\x23\xf1\x2a\xc9\x64\x59\x22\x32\x6b\x9c\x96\xe2\xac\x23\x9c\xd9\xfb\xa1\xaf\x87\x9d\xfb\x42\x2a\xc3\x69\x98\xce\x33\x6b\xd4\xeb\x3e\x31\x1a\xb5\x72\xf0\x5e\x0e\x23\x2e\x2e\x76\x85\xdc\xc5\x85\x7c\x95\x17\xdf\x37\x0f\xad\xf8\x63\x8b\x9b\xcc\x37\x71\xa2\x5e\xe5\xc5\x8b\xf7\x6f\xc1\x02\x8b\xb2\x3d\xbf\xac\x92\x74\x65\x9b\xd7\x97\x1b\xfe\xfd\x7d\xda\x91\xb1\xcb\xb8\x94\xc2\x3b\x47\x37\x5d\x82\x49\x1b\x37\x15\xf1\x4c\x1c\x51\x29\x5a\x2c\x57\x5f\xaa\x1d\xec\x59\xc0\xb5\x83\xd2\x1d\x96\xed\x20\x2a\xc7\x70\x35\x08\xd0\x88\x35\x0d\xf6\x6d\x6f\xda\x1a\x99\x90\x7a\x37\x75\xbd\x36\x57\xcc\xae\x31\x27\xc2\xeb\x0e\x7f\x21\x77\x85\x5c\xc6\x10\x90\xcd\x30\x96\xa0\x3d\x19\x7e\x76\x40\x9c\x6b\x0d\x1d\x65\x47\x46\x8e\x59\xf5\xca\x2f\x16\xc2\xc4\x54\x68\x49\x39\x9a\x11\xf2\xef\xf7\xbc\x33\x3f\xfc\xf7\x8e\xec\xfa\xc3\xdf\x30\x29\x21\x0b\xca\x31\xe5\x72\x23\x57\x55\x2a\x19\x25\x31\x14\x28\x8d\x8a\x88\xac\xf2\x2d\xe4\xb3\x16\x8e\x8f\x28\x33\x96\x7d\x50\xf0\x32\xc9\x56\x56\x8a\x6a\xb2\xb2\x3d\xb7\x37\xbd\xce\x4e\x4a\xc3\xd8\xcb\x95\x69\x8b\xd3\x39\x51\x30\xe1\x5c\xcb\xe2\xa3\x5d\xa3\x7d\x0a\xd3\x5f\xbe\xe3\xf1\x9e\xc7\xab\x6b\xdd\x4f\x7f\xa8\xdc\xc9\x09\x9f\xd8\x68\x9a\x03\x8f\xc1\x98\x20\x0e\xf3\x6c\x29\xcd\x07\x22\x83\x94\xac\xbe\x93\xcb\x7c\x0b\xef\xba\xd3\xeb\x4f\xd3\xce\xbe\x4b\x0b\x7e\xd5\x07\x04\xe0\x65\x3d\xd5\x99\x79\x00\x90\x07\xbd\x4e\x40\x80\x03\xc9\xee\xf7\x87\xca\x0d\x2a\xea\x10\xe6\xcd\x27\x65\xad\xd9\x06\x69\x1f\x8d\x89\x90\x48\xc3\x8f\x17\x7f\xfb\x10\x42\x77\xbb\xa9\xe7\xbd\x41\x48\x8b\x1e\xdc\xb4\x11\xb4\x61\x9e\x16\x0c\x94\x6a\x55\x4b\x33\xcd\x5a\xde\xd8\x38\x89\x2c\x29\xeb\x8c\x91\xfb\x50\x67\xc0\x27\x0d\x2c\x18\x55\x8c\xab\xfd\x1e\xb0\xd2\xdb\x0a\x66\xff\x73\x06\xd7\xc9\xd1\x57\x11\x79\xfb\x8d\x0d\xcb\xdc\xee\x9c\x4e\x3a\xee\x09\x30\x1d\x7e\xcd\x13\x6b\x54\xd4\xd6\x68\xc5\xba\x1b\x18\xea\xca\x61\x7a\x93\xdf\xa5\x17\xfc\x77\x96\x9e\x1b\x62\x02\x50\x19\xed\x99\xd7\xeb\x15\x18\x26\x38\x3d\x4a\xca\x4f\xb2\xd4\x7c\x10\xa3\xac\xae\x29\xd8\xc4\x18\x9b\xbd\x67\x78\x7a\x0d\xa7\x72\x25\xc3\x26\x80\x4e\xc5\xa5\x5e\xc8\xb8\x58\x6e\xec\xae\xcb\xe8\x68\xc2\x7a\x5b\x11\x95\x16\x97\x8d\xca\xfe\xce\x37\x7d\x60\x78\xa2\x21\xba\xc7\xfc\xc9\x6f\x95\xd8\xb0\xbb\x71\xd9\xd1\x09\xb2\x81\xd1\xb2\xc7\x9e\xbe\x12\xbc\xd1\xb3\x76\xe7\xd8\x60\x79\x6f\xd2\xf1\xa2\xdb\xbb\x2d\x58\xee\x7f\x5b\x31\xf1\xfb\x1d\x7d\xd6\x6d\xfb\x1f\x9e\xb1\x95\x3d\xcb\x69\x6d\xd3\x48\xe2\x82\x80\x0e\x3f\xb6\x88\x6f\x0f\xec\xa8\x65\xf2\x2f\x27\x42\x0d\xe7\x58\xe7\xc5\xcb\x96\x2b\xa3\x6f\xd4\x61\x16\x04\x65\xfb\x07\xdf\x02\x28\xac\xa0\x70\xed\x6a\x01\xdb\x01\xd5\x5a\xaa\x55\xdd\x09\x03\x6a\x37\xd4\x0b\x66\xbd\x1d\xd6\xa9\xf4\xa0\x9c\x3a\xa8\xaf\x2b\x00\x49\x4b\x01\xf8\x58\x88\x33\xa8\xcd\xc4\x14\xf9\x4d\xb3\xe8\x0b\x7f\xd1\x43\x90\xd2\xfd\x9e\x1d\x5d\xb5\xf5\x4b\xd0\x94\xbe\x7e\xa9\x4d\xd3\x1e\x98\x41\x47\x5d\xf4\x24\xd0\xbf\x37\x8a\x1f\x5f\x89\xcf\x2d\xf3\xe2\x78\x97\x8e\x9e\x49\x8b\x4d\x27\xce\x12\x15\xcb\xdc\x23\x03\x77\x40\x65\xdb\x37\x53\xec\x28\x9e\xe0\xfd\x11\xda\xe2\xd8\xf7\xb7\x73\x0c\x6b\xad\xf9\x32\xec\x28\xbf\xe1\x60\x25\xd3\x6b\x52\xb7\xa2\xfd\x61\x9e\x51\x01\xf7\x77\x1a\xab\xdb\xf5\xdf\x67\x35\x08\x11\x78\x28\xf3\x75\xf8\xac\x52\xf9\x1b\xa7\x56\x18\xcc\xba\x89\xcb\x8d\xce\xfa\x43\x5c\x6e\x7e\x2f\x6b\x52\xaa\x5c\xcb\x1b\xeb\xf0\x07\xbc\xfc\x9d\x02\xa0\x17\xe2\xeb\xf0\x5d\x9e\xc9\xc1\xac\x74\xc2\x57\xe1\xae\x48\xae\x63\x05\x67\xff\x77\xec\xf0\xa0\x80\x49\xdc\x3a\xfc\x0e\xa4\x44\x30\x47\xec\x0e\x88\xd5\x04\x1a\xe5\xb6\x9b\x13\x17\x98\xde\xe9\xe5\x6e\x6e\xb2\x70\x57\xed\xe3\x21\x2a\x81\x98\x6d\x51\x13\xff\xac\x19\x02\x3b\xb7\x99\x01\x12\x02\xad\x93\x51\x48\x5c\x3d\xa8\x90\xf0\xc4\xfc\xbe\x3a\xe2\x6b\x55\x0e\x5d\x49\xbd\x23\x8f\x4b\x4b\xfc\xec\xd6\x25\xcd\x49\xfd\xa0\xf5\x46\x32\x93\xf3\xa3\x02\x6c\xc7\xc1\xfe\x73\x36\xe7\xfa\xc2\x06\x8d\xe6\x59\x10\x28\x9a\xb1\xbd\xee\x70\x8f\xfb\x19\xa8\x2b\x3f\x02\x13\x74\xc5\xb3\xd0\x99\xe0\xf7\x5d\x45\x9e\x37\x62\x39\xf8\x78\xea\xc1\xf5\xd2\xa8\xe4\xf7\x2b\xa9\xe2\x24\x8d\x14\x5a\x21\xca\x3d\x73\x35\x86\x76\x49\x61\xde\x9c\x31\x68\x6c\x10\x40\x93\x1f\x22\xcd\x54\x69\x5a\x65\x4f\x51\xc2\x97\xef\xfe\x16\xbe\x7c\xfb\xdd\xcb\x8f\x8b\x37\xef\x9f\xbd\x58\xfc\xf0\xfe\xfd\x5f\x2f\x20\x12\x49\x02\x86\xf9\xae\x07\x93\x07\x47\xb3\x63\xff\x3d\x70\xba\x8f\x4a\xa1\xae\xcf\x68\x67\xb8\xec\xd4\xe9\x77\x69\x21\x32\x1b\x03\x16\x41\xad\x8b\xd9\x99\x1e\x9f\x27\x73\xfc\x94\x4c\xdc\x23\x31\x9a\x91\xb8\x2c\x25\xe0\x4b\x24\x25\x4c\xfe\x57\xf1\x12\xd7\x2c\x01\x3f\x05\x5c\x11\x64\xce\x97\x36\x36\x5e\x34\x23\x8e\x6f\x81\x62\x2e\x6a\x5e\xb7\xa8\x7b\x40\xe6\x5c\x93\xd3\x5e\xc9\xbf\x25\xf2\xa6\x5b\x48\xa7\x91\x39\xb7\x8b\xad\x5b\xc4\x2c\xcd\x6e\x29\x93\x4c\xe6\xfb\x56\xc7\x2f\x63\x4d\x8e\x4f\xd6\x32\x56\x55\x21\xcb\x21\xab\x9f\x83\xe6\x14\x7f\x68\xe5\xe0\x9c\xf8\xfe\xcd\xeb\xb7\x6f\x5f\x7e\x5c\x3c\x7b\xf7\xfd\x9b\x97\x8b\xef\x3e\x3e\x7b\xfe\xd7\x97\x9f\x16\xaf\xdf\xfd\xed\xfd\xf3\x67\x9f\x5e\xbf\x7f\x27\x6c\xc6\x4f\x2f\xdf\x7e\x78\xf3\xec\xd3\xcb\xc5\x77\x6f\xde\x3f\xff\xeb\xe2\xcd\xcb\x4f\x8b\x1f\x5e\xbe\xf9\xf0\xf2\xa3\x90\xa1\xad\xe4\xf9\x4f\x17\x9f\xde\xbf\x5d\x3c\x7f\xff\xf6\xc3\xfb\x77\x2f\xdf\x7d\x5a\xbc\x7d\xf6\xee\xd9\xf7\x90\x05\x2b\x79\xfb\xf2\xd3\xb3\x37\x8b\x4f\xf0\x96\x17\x8b\x0f\x1f\xdf\x7f\x78\xf9\xf1\xd3\xeb\x97\x17\x4d\x86\xf7\x2f\x7e\x7a\xf3\x72\xf1\xd3\xbb\xd7\xaf\x5e\x77\x1a\xf0\xf2\xdd\xf7\xaf\xdf\xbd\xbc\x58\xbc\x7d\xff\xd3\xbb\x4f\x8b\x0f\xcf\x3e\xfe\xbf\xe4\xbd\xfb\x5b\x1b\xb9\x96\x28\xfa\xbb\xff\x0a\xf0\x39\xe3\x53\x35\x08\xb7\x0d\x79\xb5\x13\xb5\x87\x24\xa4\x9b\x33\x04\x72\x81\xf4\x3e\xfb\xba\x3d\x9c\xc2\x96\x8d\x26\x46\xe5\xad\x92\x21\x34\xf8\x7f\xbf\x9f\x96\x1e\x25\xa9\x54\xb6\x49\xd2\x7b\xe6\xfb\xee\x2f\xe0\xaa\xd2\x5b\x4b\x4b\xeb\xbd\x0e\x3e\x96\xf5\xce\x4e\x3f\x5f\x1c\x9d\xfc\x0a\xff\x0f\xcf\x2e\xcf\x0f\xcf\x7e\x3f\x7a\x77\x88\xc3\x59\x9e\x1c\x7c\x3c\x7c\x7f\x79\x70\xf6\xeb\xe7\x8f\x87\x27\x17\x65\xf5\xa3\x8f\x9f\xce\x4e\x7f\x3f\x7c\x7f\x79\x74\x72\x7e\x71\x06\x1f\xfd\xce\x8f\x8f\xde\x9e\x1d\x9c\x1d\x1d\x9e\x5f\x1e\x9d\x9f\x1d\xfe\x7a\x74\x7e\x71\x78\x76\xf8\x1e\x93\xf6\x87\xc3\x83\x8b\xcf\x67\x30\x83\xf7\x87\x1f\x0e\x3e\x1f\x5f\x5c\xda\x57\x16\x27\xd1\xe2\x90\x01\x41\x18\x31\xe0\x53\x48\x49\xb9\xa2\x74\x94\x77\x9a\xca\x56\xdc\x17\xbd\xed\x6d\xa6\x8e\xef\xc9\xc1\xdb\xe3\xc3\xcb\xd3\x4f\x72\x4c\x07\xc7\xb6\x07\x73\xc8\x23\x7d\x3f\xac\x1a\x77\x6f\xbb\x8b\x56\x4f\xbc\x2c\x51\xb3\x74\xbd\xed\x0e\x5a\xb5\xf4\xe5\xf7\xd8\xbe\x95\x5f\xab\x1b\x2e\xbb\x5e\x07\x50\x65\xfd\x5a\xb0\x74\xba\xa8\x01\xba\xea\x1c\xeb\x0e\x41\x6f\xbb\xb3\x04\xa3\x7e\xbb\xbc\x9e\x82\x80\x23\xb5\x4d\xe6\xab\x93\xaf\x20\x77\x1c\x8d\x92\x35\xbb\xa9\x22\x21\x6e\x63\x0c\x99\x3a\x97\x6b\x40\x2f\x4f\xe8\xca\x02\xf2\xa2\x5e\x03\xdc\x65\x13\x75\x45\xca\x46\xea\x4e\x50\xd9\x46\x4d\x89\xb2\x89\x9a\x33\x5a\xb6\x10\x2f\x50\x36\x10\xc5\x00\x65\xf5\xd8\xe7\xb2\x72\x04\xb3\x94\x55\xab\x1f\x9d\x8a\x75\x38\xcb\xa9\x5e\x53\x44\x36\xb2\x16\x37\xca\x66\xd6\x15\x2a\x47\x53\x8f\x86\xcb\xe1\xd4\x96\xa9\x6e\x67\x2d\xda\xaf\xee\x6b\x5d\x51\xdf\x18\x70\x64\x6d\xce\xeb\xed\x55\x2b\xce\x66\x4e\x25\x49\x6b\x94\x8f\x97\x37\xf4\x2b\x30\x08\xae\x62\x69\xad\x81\xaa\x21\x81\x71\xd4\xc5\x5c\x52\x61\xbc\x7d\x04\x25\xc8\xd8\xda\x43\x36\xcb\x5e\x9b\x2a\x30\x8f\x8a\x37\x86\x85\x36\xd2\xb5\x19\xcc\xad\x2b\x92\x43\xcf\xd0\xba\x45\x88\xcf\xa7\xba\x26\xbe\x25\xa4\x59\xa1\xb5\x97\xb8\xf5\x6f\x6c\x7f\x94\x2d\x1b\x71\x3d\x6b\x1f\x40\x2d\x9d\xc6\x1c\x3d\xd0\xa2\x74\x06\x90\x98\x51\x65\x0a\x57\x4a\x1f\xc9\xe5\x10\xf5\x13\x1c\x41\x54\x06\x37\x7f\x5b\x81\xb8\x5b\x41\x8b\xa8\xef\x72\xb2\x77\x19\x67\xb1\xf7\x2e\x4d\x54\xf9\x28\x94\x68\xcb\x51\xe2\xe9\xd8\x60\x9b\x73\x06\x11\x28\xb8\x94\x63\x39\x9a\x7c\x2e\x28\x9b\x9e\x0b\x4e\xe7\x73\x32\xfe\xa0\xe8\xaa\x0f\xb3\x6c\x5a\x60\x08\x8e\xfd\x5e\x8e\xc2\xfa\xa2\x83\x01\x54\xf8\xca\x8e\x5d\xbe\xc3\x44\x89\x4c\xa1\x10\x7c\x94\x85\x39\x21\x7f\x12\xf3\x74\x4e\xb2\x99\x5b\xcd\xbc\xc7\xa4\x2d\x87\x04\x01\xe9\x26\x39\x26\x6d\x45\xc9\xea\x24\x3b\x6a\x0d\x40\xcb\x5d\xfe\x36\x9c\x9f\x11\x35\x96\x9b\xea\x7c\xfc\x5b\xc6\xed\x5b\x4d\x74\xd4\x9b\x29\x57\xeb\x6c\x6c\x59\x6d\xea\xea\x7a\xab\xcd\xa1\x6b\x07\xbe\xb9\x71\xf4\x13\xba\xb3\x6b\xb6\xb1\x35\xb3\xad\xb1\xce\xfa\xfc\xa9\x0d\x97\x55\x8c\xd9\x8d\x17\xc1\x41\xf2\x5c\x7a\xdf\x29\xd2\x90\x20\x7f\x00\x64\x50\x64\x40\x45\xfd\x32\x00\x64\xdf\x03\x68\xd9\x27\x0d\x76\x14\x79\x30\xe9\x55\x05\x90\xad\x0e\xb3\xd4\x0b\x86\xba\xc4\xdd\xee\x50\x72\xc0\x95\x63\x20\x5b\xad\x1c\x17\xf9\x72\xed\x31\xb3\x21\x3b\x43\x7c\x12\xe0\x85\x28\x5e\x31\xe2\x66\xcb\x11\xd5\xc8\x10\x62\x88\xaa\xda\x9b\xb2\x51\xe3\x85\x87\x3e\x2a\x88\xe3\x86\x16\x72\x32\x3a\x59\xea\x67\x26\xe8\xcc\x01\x63\x1c\x16\x38\x1a\xaf\xfa\xea\x7f\x0b\x60\xba\xe4\x11\x2a\x9c\x71\xfa\xb0\x44\xd5\xf2\xc1\xe7\xfa\xae\x6c\xc3\xab\xc6\x5a\x53\xa8\x32\xe3\x95\x3b\x68\xd7\xd4\xd9\xc0\x95\xcb\xfb\xdb\xc1\xc9\xfb\xe3\xc3\xb3\x73\xbc\xc9\x0c\x29\xbb\xcd\xbf\x78\x11\xc9\x97\x35\xe3\xb0\x97\xc8\x86\xc3\x28\xd1\x6c\xcc\xb4\x13\x79\x48\xd9\x93\x13\xe3\xed\x6d\xa2\xa8\x03\x81\x95\xa9\x5e\x64\x34\xea\x1e\x5c\x27\xf9\xda\x0c\x6a\x57\xde\x9d\xdf\x02\xd2\x4f\x81\xe6\xbf\x14\x62\x37\x02\xc7\xb5\x90\x58\xc1\x11\x55\x4a\x65\xe5\xe2\x9c\x1f\x9e\xbc\xbf\x3c\x78\x07\x84\xef\xb6\xec\x5f\x93\xf0\x7f\xbf\x7c\x7b\x70\x7e\xf8\xfe\xf2\xfd\xe1\xf9\xbb\xb3\xa3\x4f\x17\xa7\x67\xe7\xea\xbb\x66\x38\xfe\xcf\x85\xac\xf8\xe9\xec\xf4\xe2\xf4\xe2\xef\x9f\x0e\xf5\xc7\xf7\x87\x9f\xce\x0e\xdf\x49\xfa\x5b\xb1\x78\xe7\x97\x1f\x8f\xce\xcf\x8f\x4e\x7e\x0d\x3f\x1f\xbd\xaf\xfb\xf2\xf9\xe4\xe2\xe8\xd8\xff\x78\xf6\xf9\xe4\xf2\xfc\xef\x27\xef\xf4\x13\xf0\x79\x67\x7f\xbf\x3c\x3b\x3c\x3f\x3d\xfe\x5d\x92\xe7\xe7\x97\x1f\x3e\x9f\x38\x73\x38\x3e\xfd\x55\xb2\x17\x6a\x3e\xa7\xe7\x47\x9a\xdb\x04\xbe\xe8\xf2\xdd\xe9\xc9\x87\xe3\xa3\x77\x17\xba\xe3\x23\xc9\xf9\x1d\x5d\x5c\x1e\x5c\x5c\x98\x29\xda\x25\xf8\xdb\xd1\xf1\xf1\xe5\xbb\xdf\x0e\x4e\x7e\x3d\x0c\xbe\xc8\x6a\xee\x07\xcd\xb7\xa9\x7f\xea\xd5\xe9\xd9\xa7\xdf\x0e\x4e\x2e\x4f\x3f\x5f\x48\x2e\xe4\xec\xf0\xe4\xbd\xf9\x72\x70\x76\x76\xf0\xf7\xcb\x83\x8b\xcb\xc3\x83\x77\xbf\xa9\x57\x17\x07\x67\xbf\x1e\x5e\x5c\x9e\xbe\xfd\xdf\x87\x66\x64\xaa\x86\x61\x71\xe0\xd5\xdb\xa3\x93\xf7\x92\x4b\x3c\xff\xfc\xe9\xd3\xe9\x99\x2e\xf7\xf1\xe0\x93\xe9\xf0\xbd\xe4\x7e\x2f\xcf\x0f\xe5\x17\x0f\x4e\xac\xcf\x50\x1d\x11\xab\x0b\xc8\x43\xa5\x7e\xee\xaa\x00\x8e\x6b\x8c\xe8\x2a\x44\x7f\x84\xd1\x71\x6d\xd1\xc6\xd9\x74\xf7\x26\x9b\x57\xcd\xe9\xd6\x5a\xcf\x55\x43\x82\xac\xf3\x87\x2a\x6d\xe7\x34\xf6\x31\xc9\xde\x77\x8b\xc5\x1c\x92\x2b\xc6\x6d\xee\xbe\xdb\x52\x0e\xb0\xe7\x21\x8c\x4a\x85\x6a\x54\xc4\xb6\xf7\x66\x1d\xa9\x1a\x94\x7f\x8a\x5b\xa1\x5b\x6f\x1d\x7d\xf7\x4d\x7d\x14\x95\x3e\x4a\xe3\x40\xf6\x03\x8d\x03\xa1\xd5\x5b\x9c\xb7\xad\x8a\xd9\xf0\xa1\x79\xdb\xe8\x66\x3e\xf1\xfc\xeb\x3d\xf0\x7f\xe8\xe1\x1b\x2d\xf8\x3c\x3d\x26\x18\x3d\x51\xc7\x26\xe4\x2c\x63\xbd\xed\x2e\x22\xac\x58\x70\xcf\x65\xaa\xda\x53\x50\xcd\x18\x06\x56\x8d\x4c\xa2\xc5\x31\x04\x16\xfb\xab\x8d\xdf\xa0\xeb\xea\x64\xc0\x32\xa1\x34\x8b\x9b\xc4\x6c\xe0\x6a\xf5\xbd\x9e\x4d\x8f\xe3\xbf\xa5\x54\xc0\xae\xc3\x97\xbf\xd4\xca\x71\x01\x39\xeb\xb0\xda\x5d\xcc\x29\xa8\xbc\xd3\xab\x8e\x6c\xeb\x1a\xa8\x54\x80\x86\x82\x1d\x8a\xeb\xb2\x8d\x21\x8e\x57\x36\x69\xba\xbb\xe8\xa7\x8c\x48\x1f\x98\x33\x64\x9d\xf6\xab\xc6\xff\x2e\x62\x51\x58\xed\xa8\x5a\x6d\x83\x0e\x83\x76\x62\x46\x08\xca\xcb\x6a\xe6\x78\x59\x39\x8b\x06\xa1\x83\x22\xb2\xfb\xc1\xd0\xc6\x0d\x63\x2a\xfd\xbb\xce\x5e\xc0\x4a\x57\xb1\x65\xc2\x53\xa4\x74\x7f\x36\x88\x0d\xca\x4c\x0c\x10\x59\x9d\xe1\xce\x6b\xf6\x86\x1a\x7f\x77\xb6\xb3\x93\x66\x98\x0f\xe8\x80\x0d\x87\x28\x07\x03\xca\x0c\x1c\x75\x50\x86\x32\x9d\x62\x18\x65\xed\x6c\x22\x08\x4f\x1b\x79\x5b\xe4\xf3\x42\x65\x8b\x97\x58\xc8\x8a\x9e\xa7\xa5\xe8\x39\x29\xa7\x46\x50\xd3\x98\x97\x34\xd3\xc7\xc7\x91\x15\x66\x19\x28\x7f\xb0\xba\xf8\x1e\x59\xa6\x4b\xdb\xdc\x95\x27\x44\x73\xe3\x27\xc1\xf4\x1b\xf6\x04\x2a\x8f\x06\x89\x70\xc0\x51\x1e\x74\x96\xd5\x77\xda\x80\x05\xbe\x26\x2a\x8e\x98\x7c\xab\xf1\xb4\x1e\x8b\x2e\x61\xcd\x87\x4a\xc3\x0b\xe3\xd7\x39\x20\xc3\x81\x0a\x6c\x32\xc4\x62\xb9\xbc\xf5\xad\x33\x5c\xb8\xec\xf9\x4d\xab\xf8\x03\x31\x78\xaa\x29\x58\x42\xcf\x55\x08\xf0\xee\x63\x33\xda\xa8\xaa\x13\x83\x5d\xfb\x7a\xcb\x6f\xa4\x06\xd1\x58\xd0\x93\xf0\x94\xd9\x1b\x20\x79\x30\x24\x41\x6f\x0a\x30\xdf\x70\x2f\x2a\x3c\x93\x7f\x91\x70\xcc\x08\x2a\x46\x16\x88\x44\xdc\x88\x7c\xab\x14\xed\x9e\xa0\xc3\x45\x24\x4d\xab\x5e\x6d\xa2\x07\x49\xad\xcf\x88\xc8\x99\xf1\x5d\x0a\x0b\x4b\xf2\x22\x56\xae\x1c\x52\x49\x3f\x19\x7b\x13\x6a\xcf\x4b\xcc\x3b\xca\x31\x73\x50\x8d\x37\x2f\xe5\x7f\xb3\x24\x4d\x14\x35\x88\x09\xcd\x50\xc0\xff\x42\x99\x46\x3c\xbd\x76\x8d\xed\xcb\x37\x0d\x04\x74\xd6\xa8\x79\x29\xf2\xf9\x31\xb9\x25\xb3\xdf\x29\xb9\x33\x04\x44\x13\xd9\x88\x40\xbd\xdd\x7c\x21\x66\x44\x84\xf5\x41\x59\x6d\xbe\x6d\x60\x50\xe3\x54\xf5\x08\x57\x25\x18\x0e\xed\x43\x56\x54\x78\x4a\x4f\xa5\x19\xca\x55\x69\xe1\xd2\x54\x16\x93\x9e\x85\x4c\xdd\xe2\x7c\x63\xb5\xb8\xd1\x4b\xdc\xc3\xce\x52\xcc\xd7\x6d\x6d\xa0\xb8\xda\xb4\xc6\x21\xb1\x37\xe8\xc6\x1c\xd3\xdd\x49\xce\x77\x81\xee\x9f\x52\x36\x35\x47\xd0\x18\x3d\xf2\x75\x00\x6f\xd9\x09\xd5\xc6\x6e\x36\xce\xe6\x8e\x39\x95\xc3\x1f\xac\xea\x30\x68\x74\x9c\x89\x2c\x6c\xc9\x76\x04\x62\xbf\x03\xf5\xd1\x7d\x1f\x1b\x40\xf5\x5c\xd7\x8f\x75\xde\x7e\x17\xeb\x22\x6c\x42\x63\x9a\x5d\xe5\x01\xac\xeb\x8e\x4b\x73\x8d\x63\x78\x9f\x2e\x13\xe1\xda\x31\x29\x0a\xbd\x34\x61\x02\x63\x50\x64\x51\x25\xa8\x3c\xce\xdc\x27\xcf\xbc\xe9\x36\xce\x3d\xc6\x02\x5c\xac\xf7\xb1\xaa\xe8\xbc\x02\x1f\x2a\xa3\xf0\x70\x19\xc5\x75\x6c\x69\x3d\x73\x16\x71\x5b\x5a\xfc\x70\xb7\xa5\xd9\x26\x2d\x1a\xbc\xb5\x2b\xf7\x90\xce\xcc\xbe\xcb\x56\xeb\x3e\xa5\x68\x84\x79\xa0\x74\xe3\x31\x66\x87\x97\xb0\xe3\xb2\x40\x92\x84\xff\x56\x77\x26\xe5\xf0\xbc\xa0\xe3\x0f\x39\x57\x74\xa0\xe2\xc0\x8c\x6f\x47\x56\x90\x06\x79\x7c\x34\x16\xd2\xae\x27\xbe\x2d\x80\x89\x4e\xe9\x81\xab\xdc\x40\x78\x6d\x4f\x4c\x26\x37\xe2\x95\x5b\x5a\xb7\x11\xd7\x31\x44\x65\x4b\x83\xa7\xe4\x01\x82\xfe\x80\xe5\xf5\xb2\x62\x62\x1c\xfa\x2f\xf8\x1e\xf7\x75\xee\x07\xfd\xca\x9b\x5e\xd5\xe9\x01\x2b\xf5\x29\xb8\x19\xe8\x57\x5e\x66\x5e\xa3\xbc\x49\x84\x63\xff\x4d\xd2\xd4\x1b\xa4\x71\xa0\xa8\x8b\x4c\x52\x1f\x93\x44\x51\xe6\xb3\xdc\xf0\xdd\xef\xc9\x5c\xde\xe0\x6c\x44\x89\x65\x2a\x2b\x71\x4a\xec\xce\xac\x89\xfc\x11\x18\x99\xaf\x09\xe6\xf1\x9d\xec\x68\x75\x7f\x57\x85\x37\x68\x54\xf8\xb8\x4d\xe2\x86\x2c\x98\xc1\xa1\x11\xde\xca\xeb\x1a\x7c\x32\xec\x5a\xad\x3a\x22\x9a\x07\x86\x74\x60\x0a\xbf\x46\x3d\xba\xbe\xd3\xbd\x1e\xb1\x20\x36\x06\xf4\xd4\x6b\xee\x10\x15\x46\x92\x39\x21\x24\x6d\xf8\x9e\xa4\xf9\xf7\x7c\xb1\x95\x09\x89\x58\x04\x19\x6f\x89\x7c\xeb\x26\x5f\x30\x01\x31\x23\x55\x0b\x5b\xff\x0b\x42\x4a\xfe\x2f\xb4\x75\xb5\x10\x5b\x54\x6c\x51\x95\x1f\xcf\xac\x13\x19\x6f\xdd\x51\x71\xbd\x45\x45\xb1\xa5\xb0\x6c\xbb\x69\x02\x52\x84\x86\xe7\xc2\x09\xb3\x56\x84\x02\x21\x88\x53\x0a\x50\xc5\x97\xa8\x06\x60\xe3\x3c\x36\x82\xf8\x23\x45\x28\xc5\xd2\xd8\xe8\xf5\xc0\xb7\xc9\x8e\xd1\x21\xf6\x95\x96\xe2\xf9\x7a\xf3\xaa\xed\x28\x73\xcc\xfa\xed\xa5\xcb\x90\x8d\xe7\xaa\xa1\x2c\xd3\x85\x4d\xca\x22\x86\xc5\x7a\x90\x5d\x19\x06\x81\x55\xe9\x1c\xbd\xd6\x03\xdf\x40\x3c\x24\xf5\x16\x69\x9c\xa8\x46\x96\xa0\xef\xed\x36\x77\x12\xe6\x7b\x60\xf7\x9b\xe3\xfc\xa6\xd9\x6b\x4a\x98\x97\x04\x74\x2c\xac\x42\xd8\xd3\x2c\x1d\x36\x58\xe8\x77\xce\x15\x97\x5f\x1f\xb1\xe5\x09\x6b\xac\x57\x90\x45\x42\x40\x18\x9c\xa9\x68\xb4\x92\xcd\xf1\x55\x48\xb1\x60\x28\x5e\x35\x4b\x06\xaf\xad\xb7\x5c\xa6\x8d\xd1\x66\x01\x34\x20\x40\x3b\xc4\x9b\x8f\xf0\x61\xeb\x07\x18\xa7\xd3\x37\x98\x58\xb0\xa3\xd1\xfe\x1d\xa6\xae\x04\x07\xb9\xf5\x15\x2a\xda\x32\xb0\x2b\xea\xa4\xbd\xcd\x3b\x31\x90\xf5\xb4\x6e\x74\xad\x34\xf5\xcd\xeb\x47\x31\xfa\x33\xa2\x9c\xa8\x12\xa2\x8a\xf4\x5c\x63\x8a\x1d\x4a\xe3\x63\xa6\xe4\x03\x66\x6c\x01\x6a\x8a\xca\x76\x65\x29\x2c\x8c\x95\x36\xd0\x84\xc5\xfd\xcd\x55\x3e\x4b\x93\xa6\xb2\xc9\xbb\xfc\x74\x70\x76\x78\xa2\x52\x04\x3b\x33\x92\x24\x6f\xbd\x95\x98\xa2\xa6\x57\x4e\x42\xf5\xe8\x0e\xdc\x8a\xab\x20\x2f\x93\x4e\x18\x89\x37\x0c\x27\x6e\x03\x7f\xa7\xea\x92\x49\xf2\x2d\x43\xee\xe7\x93\x2d\x96\x96\x59\x63\xe5\xb5\x23\x7b\x40\xeb\x5a\xce\x11\x55\x28\x2d\xc3\x10\x61\x47\xf5\x91\x3b\x01\x25\xf2\x76\x21\xb2\xd1\x17\x9c\xa9\xff\x10\x33\xb6\x0c\x28\x9c\xb9\x4f\x28\x6f\x4f\xe8\x4c\x85\x9d\xce\xec\x4f\x94\xb7\x67\x94\x91\x13\xc8\x6f\x81\x33\xe7\x01\xe5\x26\x9c\x0f\xce\xcc\x2f\x94\xab\xe8\xb9\x5a\xa2\x98\xb7\x99\xa9\xc7\x4c\x9d\x51\x3e\x96\xdf\xe5\x3f\x94\xc7\x83\xa9\x33\x44\x52\xc4\x96\x49\x74\xe9\x45\xa2\x63\x88\x45\x88\x07\x2b\x96\xb2\xa1\x38\x02\x91\x9f\x13\xa4\x43\x9e\xf6\x32\x62\x87\x43\xfb\x60\x81\xc4\x32\x81\xf5\x4c\x5d\x23\x3c\xe6\x81\x17\x85\xf2\x36\x23\x6a\x3d\xa0\xd5\x5b\x95\x55\xce\xcc\x64\x06\xcc\xce\x91\x6d\x1a\x93\x76\xb1\xb8\x92\x3b\x74\x45\x78\xe1\x58\x7c\x97\x25\x3c\x1e\xad\x4c\x08\x66\xca\x1a\x51\x30\x32\xb5\x1b\x91\x74\x83\x6f\xf0\x7e\xd4\xc3\x44\xf4\x93\x1c\x3f\x2c\x51\x86\x05\x2a\x30\x4f\x7b\x49\x8e\x05\x38\x77\x64\x98\xa3\x02\xd3\x14\xa9\xbc\x0c\x7e\xd6\xc2\x4c\x81\x61\x61\x82\x02\x41\x4a\xc4\x8a\x2e\x23\x2f\xc5\x88\x8b\x7e\xd5\xd8\x4e\x19\x36\xe9\x31\x0b\x7e\xff\x40\xb1\x3e\x42\xdc\xf8\x00\xe7\xe9\x03\x6b\x93\xaf\x23\xa2\x80\x39\x47\x14\xb3\xe5\x84\xb2\x6c\x36\xbb\x7f\x10\x89\x05\x07\xba\x4c\x32\xb4\x40\x39\x2a\xd2\x9e\x1d\x9b\x44\x3c\x97\xe5\x3a\x42\x4e\x51\x3c\x43\xce\x82\x47\xbc\x48\xe4\x69\xb7\xb1\xd7\xdb\x10\x7b\xdd\x2e\xaf\x96\xd6\x53\xdc\x79\x4d\xdf\xe4\x46\xdc\x4e\x77\x76\xd2\xe6\xbf\x36\x31\xc6\x49\x86\xf3\x01\x1d\xa6\xfd\x42\x5f\xef\x83\xff\xf8\xe3\x8f\xf6\xf0\x5f\x9b\x69\x4f\xbf\xc9\xcc\x82\x15\x3a\x34\xfa\x1f\x7f\x48\xf2\x70\xb1\x83\x9b\xc9\x1f\x7f\xb4\xdb\xff\x9a\xf6\x4d\x82\x83\x87\xb9\xa4\x43\x39\x83\x2c\x11\x53\xf2\xb5\xe7\x44\xc5\x6d\xfe\x47\x73\x67\xa1\x22\xe3\xaa\xcc\x1c\x3d\x61\x75\x53\x4c\xf5\x34\x4b\x11\x97\x1b\x3b\x93\xab\xb0\x60\xb1\x29\xdb\x20\xbd\xb8\xe3\x84\xcd\x65\x6e\xd8\x5c\x48\x25\x85\x31\x81\xcc\xb4\x22\x6d\x30\x58\x99\x11\x49\x28\xea\xaa\x0e\x94\xc1\x46\x41\x3c\x2b\x0e\xd3\x06\xee\xa8\x32\x1a\xcf\xfa\xa0\x3e\x18\xc2\xc7\x86\x9b\x10\x3c\xa1\xd1\x08\x43\xc6\x45\x4a\x3b\x36\xcd\x09\x9f\xe4\xfc\x46\xa2\x55\x00\xd5\x24\xc7\xb4\xcd\xf2\xbb\xc7\x47\xda\xbe\xc9\xff\x3c\x51\xbf\xee\xc8\xd5\x17\x2a\xf4\xc3\x4d\xa1\x7f\xe4\x27\xf9\x5d\xda\xcf\x21\x42\x41\x42\xd3\xaa\x06\x6e\x47\xae\xf3\xfb\x4c\x10\x57\x15\xb2\x48\xd2\x87\x52\x93\x21\xa1\x1d\xd2\xba\xd1\x49\x12\x3b\x1d\x0b\x8d\xb0\xf9\x40\xb9\x22\x65\x8f\x8f\x49\x16\x5d\xf8\xc1\x10\xe5\xae\x26\x27\xb2\x05\x49\x8e\xe5\x2e\xa4\x6d\x80\x02\x15\xbf\x98\xa4\xad\x16\x55\xfb\x9c\xb7\x73\x1d\x01\xd8\x98\x0f\x0e\xc8\x10\x53\x44\x97\x92\x69\x86\xc3\x9b\x45\x87\x37\xc3\x34\xc9\x53\x34\xd2\x0e\x5e\xe7\x17\x67\x9f\xdf\x5d\x7c\x3e\x53\xe6\xe7\x1f\x8e\x8e\x0f\xd1\xc4\x8c\x6c\xd4\x6a\x25\x13\x4c\x76\x9a\xbd\xad\xe6\xce\x4c\x77\x88\x24\x3e\xcd\x67\x04\xf2\xde\x26\x13\x1b\xc7\xbf\xcc\x73\x63\xfb\x45\x73\x73\x86\xac\x9b\xdd\x0d\x2e\x12\x15\xac\x79\x8e\x3b\xaf\xe7\x6f\x4c\xd9\xd7\xf3\x9d\x9d\x74\x8c\xb3\xc1\x7c\x88\xae\x07\xf3\x21\x1e\x6b\x7d\x55\x42\xd0\x0d\x9a\x55\xdd\x5d\x0d\xa3\xa8\xdb\xb5\x26\x40\xdc\x76\xa0\xd6\x34\x73\xd7\xb4\x8a\x08\x13\x86\x33\x58\x65\x50\x8a\xb5\x5a\x4c\xfd\x80\x0c\x8c\x33\x74\x2d\x3f\xc9\x65\x70\xe7\x7c\xc8\xc6\x90\xfd\x35\x86\xd4\xb3\x9a\xe4\xdd\x5b\x2c\x01\xb4\x14\xa9\xe1\x5d\x3d\x37\xd9\x7c\x9d\xad\x74\x9d\x15\x89\xac\x2a\x69\x3c\xc8\x10\x48\xc6\xbb\x90\xb2\x32\xfc\x18\xd4\x89\x19\x49\xc6\x65\x83\x11\xfa\xc9\xaa\x22\xf3\xf6\xc7\x83\x4f\xad\x96\x0b\xea\x41\x8c\x38\x25\x1b\xf8\x42\xee\x0b\x2d\x05\x32\xea\x19\xf5\xe1\x36\x9b\x2d\x48\x81\x63\xea\x33\x25\x97\xa1\x7f\x12\xdc\x59\x06\xe9\x56\x22\xc6\x77\xb2\x71\xe5\x98\xef\x86\xec\x9a\x12\x11\x06\x5a\x2c\xd5\x8d\x92\x57\xf3\xa4\x46\x6a\x30\x03\x5f\x9e\x47\xd2\xa1\xdf\xa6\x87\xf8\x1c\x57\xc4\x72\xa6\x88\x62\xb7\x41\x45\x4c\x7a\x4d\xa2\x0c\xef\xaa\x0c\xc0\x9d\x1e\x29\x7d\xd1\x41\x6d\x8b\xf2\x14\xd1\x41\x3e\xc4\xc2\x59\x02\x0e\xff\x50\x75\x86\x2a\xc6\x4d\x65\x92\xb8\x3a\xc9\xed\xae\x27\x61\x84\x81\x72\x7f\xa0\xb4\x32\x50\xe3\x65\xb6\x2d\x6c\x34\x1d\x04\xa1\xd4\xd5\xd3\x16\x1f\xd0\xa1\x33\x4c\xa1\x86\x09\x16\x19\xee\x28\xe3\x69\x94\xb6\xca\x91\xc8\x12\x60\x52\xe0\xd6\xd2\x0c\xf1\xea\x1d\x74\xa4\x94\x2e\x2a\xd0\x00\xba\x17\xcb\xd8\x97\x70\x4f\x8e\x84\x1c\x76\xc0\x65\xb9\x15\x5d\x82\xc0\x36\x48\xf2\xda\x0c\x32\x2f\xf7\xe2\xa5\x13\xbf\x18\x72\xa6\x66\xf8\x7a\x96\x2e\xfd\xf9\x41\x9c\x83\x6a\x6e\x20\xa8\xa4\x63\x20\x3c\xed\x98\xf8\xad\xe7\xf3\xfb\xea\x41\x49\x3a\x88\xc2\xa7\x8f\xd9\x5c\x33\x31\xf2\xe8\xc0\xd2\x2f\x55\x74\x00\x43\x1a\x57\xf1\x53\x05\xc9\xd4\xeb\x33\x9e\x82\xb7\x7e\x14\x6a\x22\xed\xcb\xcb\x53\x35\xbc\x73\x22\x2e\x2f\x0d\x10\xb8\x28\xab\x24\x99\x73\xd7\xee\x0f\xa4\x12\x41\xed\x35\x48\x4d\xef\xd0\x37\xe3\xa6\xf8\xee\xcf\x25\x65\xc5\x46\xe4\x9c\x88\xfa\xed\x9e\xd1\x42\x48\x42\xa2\x76\xef\xb3\x71\xdc\x9b\x5d\x40\xd2\x11\xee\xa1\x22\x8d\xac\x9c\x8e\x51\x8e\x6d\x37\xd6\xcd\x74\x1b\x63\xaa\xb2\x30\xc9\x7f\x65\x18\x4a\xd9\x7b\xae\x08\x13\x92\xa6\x9b\x60\xa8\xd2\x7e\x86\x46\x07\x94\x57\x07\x94\x45\x06\x84\x31\x90\xde\x25\x2e\x92\x4f\x48\xde\xea\x36\xd9\x2d\x49\xd3\x5f\x76\xbb\xad\x56\x66\x68\x58\x86\xba\xee\x89\x31\x14\x42\x15\x61\xd1\xe2\xf0\x66\x2e\x22\xe7\x67\xcb\x43\xad\xab\xb1\xdc\x3a\x44\x1c\xce\xdc\x73\xe9\x0d\x96\x60\x20\x86\xdf\x8c\x1c\x6d\x22\x75\xb5\x80\x74\x92\xc4\xd0\x62\x5a\x52\x4e\xdc\xa5\x9c\x48\x90\x1d\x54\xb9\xd8\x4b\xea\x08\x92\xd6\x95\xd6\x48\xdc\xb5\x46\x22\x09\x1f\xb0\x61\x88\xf1\x44\xae\x92\x7f\xd6\x18\xc1\xc9\xe1\xe9\xcc\x18\xe9\x6a\x64\xa6\x44\xdf\x8c\xdc\x25\x1a\x0e\x1d\x56\xdf\x89\xbb\xe9\x9e\x26\x8b\xf9\x4e\xe4\x41\x4a\xc2\x05\x96\x98\x0f\xce\x15\x7c\xd0\x03\x55\x81\x87\xe0\x66\x33\x6b\x6a\x82\x6c\x06\x21\x9c\x1d\x21\xd2\x13\x13\xd2\x39\x12\xa4\xd5\x82\x93\x0c\xb0\x73\x88\xa4\x50\x5d\xb0\xcf\x00\xbb\x6e\xe8\x28\xb3\x46\x98\x61\xd6\x0f\x13\x73\x89\xb8\x48\xb6\x72\xff\xbe\x4e\x84\xa4\x10\x1f\x1f\x85\x8b\x6c\x53\xc0\xb6\xb6\xa9\x58\x8a\x9a\x08\xea\xab\x98\xcd\x49\x34\x44\x06\x6c\xd8\x70\xfd\x2f\xcc\xa8\x78\x94\x46\x23\xe6\x76\xcd\xe7\x72\x6f\x29\x66\x12\xed\xab\xdb\xd5\xb1\x7f\x52\xf4\xaa\xbc\xfa\xcd\xcd\x4b\x91\x22\x6d\x30\xd1\x84\x18\x48\x5d\x6d\x67\xc8\x9d\x4e\x65\x17\xee\xa8\xb8\xde\xb5\x89\x33\x36\xbe\x33\xab\x8c\xc1\x7f\x15\x4d\xef\xc3\xb7\x4d\xc4\xf9\x0d\x22\xd2\x30\x2f\xc8\xef\x72\x79\x31\xf3\x1e\x11\x5f\x75\x0e\x2a\xd7\xac\x23\x7a\xee\x2b\x19\x2b\x51\x69\x5c\xcb\xe4\x23\x88\xd5\xf1\x04\xd6\x14\xd1\x45\x43\x92\x16\x15\x69\x3f\x60\x24\xbc\x1c\x8f\x3d\x93\xf0\xd4\x1d\x38\xd8\x8a\x68\x6d\x32\xd8\x95\x42\xde\x33\xb6\x16\x8d\x85\x08\xac\xb1\x9a\x54\x4b\x1e\xdc\x4e\x7b\x95\x61\x2c\x53\xd9\xeb\x32\xb1\xf3\x5f\x41\xd5\x29\xc6\xfe\x27\x93\x20\x22\x8a\x26\x74\x19\xe5\x95\xac\xca\xd9\x1f\x97\x37\xd9\x88\xe7\x6b\x0a\x73\x32\x5e\x8c\xc8\x65\x58\x67\x8d\xa3\x72\xad\xf9\x3d\x91\x37\xf3\xc6\x46\xf7\x50\x7a\xa5\x39\x3f\xcb\xc5\xe1\x93\x9a\x34\x15\xd6\xb4\xca\xc8\x13\x5a\x64\x64\xdd\x18\x9f\x32\xbc\x95\x6d\x5d\xe5\xf9\x6c\xe3\xc6\x64\xe1\x95\xad\xdd\x64\x62\x74\xbd\x71\x73\x50\x7a\x65\x7b\xe4\x1f\x8b\x6c\xf3\xe1\x41\xe9\x95\xed\x4d\x9f\xe0\x03\xb2\x7a\xdd\xa6\x62\xf3\x0d\x9d\x8a\xd5\xfb\xb9\x71\x06\x25\xd1\x9e\xad\x1e\xd5\xec\x09\xa3\x9a\xad\x19\x55\xce\xc8\xdf\xb2\xcd\xcf\x81\x2a\xbe\xc6\xa3\x5b\x25\x90\x79\x82\xbb\xb8\xaa\xb0\x26\x09\x95\x76\xee\x63\xd3\x83\x19\xcd\x36\x4d\x9d\x25\xda\x61\xc5\x95\xbd\x64\x6c\xd3\xd4\x59\xa2\x9d\xb1\xd5\x69\xb3\xf2\xcd\x1d\xe6\xf3\x35\xa9\xcd\x16\x37\x1b\x3b\xc3\x17\x8b\x9b\xd5\x67\x17\xa2\xfd\x6d\xd6\xd6\x0d\x65\x6b\xf0\xc0\xd7\xcd\xdb\xca\xbe\xae\x69\x6b\xfe\x84\xb6\xe6\xab\xd7\x0b\x1c\xd6\x36\x5d\xb0\x9c\xaf\x75\xfd\x7a\x4f\x27\x93\xcd\x1b\x54\xe5\xd7\xcd\xf6\xed\xa6\x07\x04\xe6\xfb\x76\xf5\xe9\x98\xd0\x99\x78\x42\xc4\x04\x55\x7c\x83\x16\x9f\x30\x48\x53\x61\x65\xab\x0b\x46\xff\xb1\x71\x8b\xb2\xf0\xda\xd6\x9e\x30\x42\x55\x7c\x5d\x8b\xf9\xe6\xe7\x03\x4a\xaf\x0e\x37\xc1\x04\xe1\x05\x19\x6d\x0e\x8e\xb6\xc6\xca\x76\x47\xf9\x6c\xf6\x94\x56\x75\xf9\x30\x25\xdf\x46\x64\x5e\x7d\x10\x9a\x15\x11\xfd\x2a\xa4\x9d\x65\x26\x20\xed\x7e\xd5\x41\x28\x7d\x90\xbc\x5e\xd5\x4c\x12\x71\xac\xd8\x72\x10\x5b\x75\x5e\xd3\x37\x04\x74\xb1\x7c\x40\x87\x8e\x48\x97\x0e\x95\xfd\xad\xe2\x75\x5c\x46\xd0\xb0\x2e\xf0\x7e\x30\x2c\x07\x92\x49\x36\xc2\x8a\xb1\x96\xb2\x7b\x8e\x3b\xaf\x79\xa9\x98\xe3\x90\x52\x94\x0d\xf8\x50\x19\x70\x90\xaf\xf3\x8c\x99\x50\x40\x94\x40\xb6\xf8\xac\xb4\xd0\x58\x26\x1d\xc7\x60\x03\x24\x80\x60\x79\xbe\x70\xe3\x07\x85\x9c\x80\x1c\x30\xce\x6d\x4c\x8d\x86\x5a\x85\xce\x6b\xf2\x86\xbe\x26\xb2\xff\x49\xa2\xb9\xae\x32\x65\x55\x0e\xce\x4e\xdb\x2c\xe1\xd6\xd6\xc4\x61\x20\xfc\x92\x74\x98\x2e\xd1\xc3\x58\x9b\x13\x8a\x7f\x27\xf7\x45\x2f\x5f\x82\x42\x2b\x97\xcc\x71\xc6\x9c\xa0\x98\xc4\x17\x80\x11\x4f\xac\x51\x66\x94\x23\x3b\x4d\x3d\xe0\x66\xd5\x1e\x40\x71\x70\x4a\x96\x06\xd9\x8d\xdd\xf1\x80\x85\xaf\xe4\xd9\x0d\x3d\xfd\x9d\x9d\x6d\x6f\xda\x1b\x8b\x71\x8f\x61\x4f\xb5\x93\x39\xc9\x19\x59\x39\x97\x6f\x6a\x7c\xbb\xd2\xa0\x6a\x4f\xd2\xdf\xdf\xd6\x60\x5d\x8b\x40\x82\x07\x87\x62\x7d\xa3\x0e\xc7\xef\x36\x59\x9a\x20\x80\x96\x9a\xeb\x3e\x80\x2c\x7f\x72\x1f\x51\xa8\x25\x29\xc6\x98\xa9\x66\xa7\xe2\x47\xb5\xf9\x8b\x6d\x91\xfc\xb0\x26\xcd\x28\x67\x3f\x6c\x94\x6f\x6c\x8b\x3f\x6c\x94\x6f\xcc\x28\x15\xf1\x5e\x07\x5a\x99\xa4\x8e\xd3\x84\xa4\xba\x9c\x92\xc7\x1a\xe2\x7c\x7d\xad\x32\x71\xe4\xd2\x09\x2c\x64\xc8\xee\xcd\x26\xf3\xe0\x5d\x60\xac\x76\x4a\x60\x6d\xef\x14\x44\xdc\x2b\x5a\x94\x45\x11\x4f\x91\xa4\x74\xe4\x98\x24\xae\xe3\x49\x07\xc5\xe4\x48\xca\x1b\x91\xd7\x7c\xdf\x26\x1b\xdc\x9c\x35\x32\x8f\xf5\xba\xfd\xcd\x82\xba\x55\x22\x97\xd9\x9b\x8c\x96\x36\x63\xce\xe5\xc3\xd6\x5e\x3e\x95\x5c\x88\xce\xe1\x5e\xcc\x66\x18\x63\xfa\xf8\xd8\x54\x53\x2d\xcd\x74\x68\x9f\xf7\x68\x5b\x4d\x36\x91\xdd\x6a\xff\x87\xe0\x92\x19\x48\xc4\x3d\x18\x36\x87\xc8\x00\x46\x6f\xbb\xe3\x7a\x0a\xe7\x8e\x39\x96\x91\x1d\xff\xf4\x6f\x24\x1b\x5d\xff\x64\xec\x5f\xfa\x14\x7b\x19\xf6\xe1\x6b\xfb\x5f\xff\xe7\x4f\xa8\xd9\x4c\x7b\x09\xc5\x04\x91\x1d\x0c\xdd\x28\xc3\x14\xe5\x40\xbd\x7e\xe6\x24\x9c\x39\xf5\x72\xa1\xd3\x02\x68\x0e\x09\xd6\x7d\x78\x71\x90\x26\xae\x30\x90\xa4\x69\xcf\xbc\x97\x33\xf7\x66\x58\x5a\x6c\xce\x2d\xc5\x96\xa2\x7c\xe9\x12\x1e\x48\x94\x06\x7e\x12\x3d\xcf\xa3\x11\x9a\xd5\x02\x2e\x3d\x92\x62\xf5\xdc\x9c\x39\x54\x87\x5c\xa5\x03\xea\xb6\xa6\xf0\x9c\xb8\x73\x17\xcb\xb8\xb1\xfd\xe5\xb8\x85\xde\x7e\xa7\xf6\x62\xb3\xda\x8a\x61\x88\x35\x30\xb3\xc4\x91\x40\xb4\x51\x43\x17\x8a\x38\x5d\x28\x2a\x74\xa1\x31\x66\x4c\x04\xaa\x2a\x1d\xd4\xe6\x63\xbb\x99\xda\x05\xff\x9c\x88\x52\xa3\x14\x0b\xa2\xad\xc4\xe7\x0e\x10\x21\x92\xbe\xf6\x61\x27\x4b\x5b\xad\x2c\x5a\x39\xd7\xa6\x0f\x8f\x8f\x49\xae\x13\x1f\x21\x6a\xf5\xa9\x80\x69\xe8\x32\x5d\x12\xc5\x60\x94\xe4\x59\xb1\xb8\x89\xc9\xc0\xa9\xb7\xc2\xce\xd2\x93\x1d\xb1\x44\x1d\x25\x3f\xd0\x74\xc0\xd7\x27\x35\xf0\x31\x13\xd7\xb2\x92\x4a\x0e\x89\x76\xbb\x3f\x75\x14\xd7\xaf\x5a\xa3\xec\x1b\x5a\xa3\x4c\xb7\xa6\x1a\x03\x7f\x02\x18\xda\x1c\x17\xea\xff\xdb\xfb\x78\x44\xce\x02\x68\x41\x85\x03\x9a\x3b\x22\x02\x55\xe5\x7e\x40\x17\xca\x08\x0b\xc0\x0c\x2f\xec\xcf\xa0\xf9\x8a\x8d\xaa\xb5\xde\x8e\x1a\x92\xac\xed\x34\xe2\xa1\xe6\x97\xc0\x18\xf3\x25\x5a\x04\x93\xa1\xa9\x32\xe1\xa4\xff\x00\xe3\x55\xc5\xab\xd6\x47\x26\xfd\x1e\xe4\xee\x83\x29\xd5\x28\x4e\xf5\x28\x59\x1a\xe1\x23\xb7\xcd\xd0\x3a\x18\x33\x6b\xd6\xb5\xa2\xee\xf8\xa7\x9d\xe3\x2a\x2e\xad\x2c\xc5\x8a\x75\xa0\xbd\xc1\x70\x29\x51\x00\x6d\xcf\xf3\x79\x92\x1a\x14\x55\xe9\x0e\x74\x6a\xb9\x63\x77\x48\x5d\xed\xf9\x83\xd2\x8f\x6f\x77\x11\xc7\x74\x20\x86\x28\xc7\x9d\xd7\x79\xa9\x2b\xcf\x35\x5b\x37\xc8\xc1\xea\x36\x7d\x60\x78\xbb\xd3\xb8\xe2\x24\xfb\xb2\xa4\x93\x04\xc2\x7a\x33\x6b\x38\xb0\x34\x16\x02\x4b\x57\x9c\xe0\xcd\xe1\x20\x4d\x72\x0d\xed\x5a\xf8\xf4\x3d\x80\xa3\xb5\x5c\x53\xe5\xe8\x47\xcb\x27\x11\x5f\x38\xa6\x01\xc8\x5d\x49\x16\x5b\x3a\x55\x79\x57\x4e\x8f\x3a\xf6\x1a\xcb\x12\xdc\xd8\x26\x90\x87\x44\x2d\x04\x6a\x31\xc7\x3f\x0f\xfe\x42\x6a\xc2\x95\x0d\x68\xb5\xa1\x7b\xbb\x58\x7d\x76\xae\xf4\xd9\x60\x3f\x72\x7a\xc7\xec\x56\xe4\x69\xab\x95\x28\x3c\x24\x41\x63\x90\x0f\xfb\xfa\x62\x00\x7d\x78\xcf\xdc\x12\x83\x7c\x58\x6a\x56\xe9\xb2\x14\x08\x29\x20\xc8\x79\x3c\xa8\x71\xd4\x35\x20\x0a\x2a\xe1\xad\x5d\xcd\xc0\x43\x8c\xd5\x06\x74\xe7\x6c\x74\x49\x8b\x6f\x69\x02\x84\x01\x19\x0e\xa9\x71\xa0\x93\x48\x60\x1d\xba\x96\x70\xcb\xf5\xa5\x8b\x74\xe2\xd3\x45\x88\xdf\x44\x8a\x66\x98\xb6\x2f\x95\xcb\xd7\xe9\x55\x41\xf8\x2d\xe1\x1f\xb3\xf9\xe3\x63\x12\x7b\x0d\x3d\xfe\x8d\x64\x5f\x3e\x66\xf3\x14\x8d\xf0\x4c\x01\x39\xf8\x72\x5b\x52\x64\x62\x8c\xb4\x58\x2e\xe8\xe4\xde\x0c\xeb\xdd\x75\xc6\xa6\x44\x9e\x3a\xeb\xa6\x3a\x6a\xb5\x46\xab\xf2\x6d\xb0\x36\x27\x37\x79\x39\x02\xed\xf9\x62\x2e\x77\xe3\x2d\x79\x8d\x9b\xff\x26\x3b\x84\xbc\xdb\x68\x1e\xd5\x79\x47\x91\x9c\x28\x1d\x1a\x7a\xcd\x14\x31\x2c\x06\x9d\x21\xe2\x58\x0c\xba\x06\x76\x07\x0c\x71\xcc\x1f\x1f\x9b\x59\x31\x6a\x0e\xe5\x6e\x2c\xd2\x86\x04\xb4\xb9\x35\x93\xcc\xf0\x75\xbf\x39\x18\x36\x7b\xe6\xb0\xc1\x22\x67\xe3\xb1\x19\xb6\x5e\xec\x0c\x4d\xe4\x9a\x0d\x06\xe6\x69\x38\x4c\x7b\x23\x3c\xf7\x87\x56\x1a\xca\xca\xb1\x50\xd9\xb6\xb9\xf1\x78\xcf\xbd\xff\x1c\xf1\x55\xd0\x5b\x81\xa8\xec\x6a\x00\xff\x25\x76\x9e\x29\x55\xbb\xec\x76\xa4\x96\x6c\x8c\xaf\xb5\xdb\xf7\x46\x17\xde\x38\xed\xfb\x73\xd6\xa7\x73\x6c\x00\x3a\x84\x4f\x1f\xd3\xd6\xc3\xbd\xa1\xe8\x4d\xd8\x3b\x38\xed\x0a\xf7\x8b\x00\xf7\x67\x58\x0c\xf2\x21\x2a\x70\x26\x17\x66\x81\xb3\x41\x77\x88\x24\x14\x25\x33\x85\x2d\x24\x13\x99\x71\x25\x74\xb2\xb4\x83\x0d\x3c\xa0\x32\xad\x17\x69\x6a\xe4\x7f\xcd\x31\x29\x46\x12\x64\x16\xfd\xdd\xee\xbf\xce\x7a\x33\x73\x4a\x3b\xcb\x34\x5d\x26\x63\x34\x5f\x89\x59\xe3\x18\xd5\xe2\x97\xd8\xe1\xd1\x70\x4b\x97\x9a\x9a\x33\xc4\xea\xcc\x63\x93\x6d\xee\x91\x4d\xf2\x93\xa8\xfc\xc4\x90\x2c\xa1\xee\xeb\x0d\xe1\xd3\xb5\xe1\xce\xeb\xb5\x7b\xba\xed\x8d\x35\x87\xca\x94\x64\xa5\xc2\x10\x9a\xfc\xa4\x07\xb9\xb9\xee\x10\xaa\xad\x56\x11\xc1\x54\x37\x15\xf0\x97\x63\x5d\xa6\x8d\xd8\xfa\xbb\x6b\xbb\x51\xb8\x53\x8b\x02\x85\x4f\xf6\x50\x4b\xf8\x74\x5f\x8b\x37\xe1\x75\x0a\x04\x10\x05\x47\x0b\x7b\x77\x8a\x61\xaa\x84\xeb\x7a\xae\x5f\xc8\x7d\x91\x30\x73\xdd\x72\xd7\xc3\x8a\x0c\x72\xcc\x07\x74\x38\xc4\x6c\x90\xdb\x2b\x97\x2c\x89\x5e\x31\x2c\xb4\xd1\x99\x6e\x4a\xbd\x75\x7d\xfb\x1e\x1f\x45\x0d\x04\x96\xf0\xb3\x69\xbc\xd7\x78\x16\x22\x39\x3b\x25\x1d\x11\x11\xe9\x88\x30\x12\x79\xd2\x30\x01\xe3\xdc\x69\x03\x3d\x50\x09\xea\xe6\x9b\x51\x0e\x28\xe6\x03\x36\x1c\x62\xe1\x90\x1d\xc4\x0f\x67\xac\x73\x69\x6f\xec\x3e\x02\x4e\xb4\xbb\x10\x03\xd8\x8d\xf3\x69\x24\x4f\x57\xd9\xe8\xcb\xd5\x82\x7b\xf1\x64\xbe\xc3\x26\xfb\x8a\xb2\x31\x26\x36\x31\xe4\xd9\x82\x61\xd2\x2e\xfb\xc0\xa4\xfd\x8f\x05\x59\x90\x02\x92\xf9\x17\xb7\x73\xf0\xd1\xfc\x7f\xe4\xab\x92\xd9\x9d\x12\xf1\x6e\xc1\x39\x61\xe2\x6c\xc1\x8e\xf3\x7c\x1e\x8b\x4e\xae\x73\x70\xe1\x09\x22\xe0\x6a\x87\xaf\x11\x69\x5f\x91\xa9\xcb\x99\xa6\x0f\x23\xf5\x4a\x09\x26\x09\x1b\xfb\xdf\x20\x45\x1e\x90\x4d\x3a\x19\x67\xec\xce\x1d\xd9\xaf\xfa\xde\x1e\x79\xb1\x2e\x80\x90\x3b\xd7\x25\xc6\x17\xf4\x86\xf0\x22\x32\xde\x91\x2c\xa6\xbe\xaa\x2e\x47\x19\x1b\x91\x59\xb5\xfc\xc8\xfb\xa2\xca\xce\x32\xe1\x87\x49\xb6\x8d\xc2\x97\x9a\x71\xe5\x6c\x44\x62\xf4\x30\xdb\x80\x1e\x56\xc0\x49\x00\x2a\xc1\xf4\xb2\x3c\xd3\x8e\x09\x66\x7b\xc1\x8a\x6b\x3a\x11\x65\x0a\xd3\x14\x95\xcb\x75\xca\x46\xe5\x92\x09\x6f\x9d\x4f\xbd\xa1\xc5\xd6\xda\xab\xec\xcf\x8b\x91\xaf\x51\x3a\xff\x07\xce\x0b\x48\xed\xae\x9c\x8c\xbf\xc0\xc2\xd9\xba\xf8\xf8\xd5\x37\xed\xdc\x32\x26\x57\xf9\x22\xd8\x05\x5b\xd2\x7c\xac\x99\xa5\xb8\xe6\xb9\x10\xb3\x78\x5d\xf3\x31\x56\x57\xdb\x77\x4a\x44\x05\x3f\x63\x47\x2d\x69\x36\x77\x40\x26\xc3\x33\x36\xce\x6f\x92\x74\xe7\x7d\x26\x48\x9b\xe5\x77\x49\x9a\x5a\xb1\x6b\xb3\xdd\x44\xcd\x66\x8a\x16\xe5\xa9\x1d\x94\xc9\x6a\x75\xfc\x8d\x0b\x9e\xb1\x82\xda\x77\x10\xb2\xa0\x89\x9a\xe0\x5d\x77\x66\x9e\x4c\x9a\x4c\x54\x0c\xd1\x0c\x1b\x8b\x46\x18\x4b\xaf\x6c\x31\x67\x6f\xe5\x61\xf5\xc4\x28\x19\x26\x4b\x94\xb3\x43\x36\x0e\x48\xb3\x0c\x0b\xf8\x20\x27\x75\xa1\x73\x95\xb4\xbd\x67\xf3\xf5\x23\x11\xd7\xf9\xb8\xd7\xcc\x99\x0a\xa1\xb5\x6c\xe4\x36\x56\x36\xa4\x47\xb5\x50\x5c\x40\xd2\x5d\x49\x67\xde\xb3\x11\x7e\x50\x8e\x89\x3d\xae\x70\x88\xcf\x00\x14\x08\x66\xd8\xe3\x12\x89\x04\x9f\x34\x3d\x3f\xf2\x31\x9f\xe4\x39\x6c\xbc\xc2\x64\x81\x66\x01\xaf\x61\x37\x97\x2f\x58\x6c\x5f\x6d\xe1\x6b\xb7\xb0\x44\x7d\xb1\xd2\x3e\x0a\x9e\x28\x77\x58\xe5\x54\xa2\x91\xf4\x5f\x79\x82\x2a\x6d\x33\xc4\xeb\xda\x66\x65\xdb\x4a\x09\x4f\x40\xfb\xce\x06\xdc\x6d\x9b\xdb\xb6\xaf\x7d\xf6\x09\x42\x5e\x8d\x32\x01\x61\x67\xfc\x9b\x52\x07\x6f\xd9\x24\xcd\xd0\xaa\xec\x41\x4f\xce\x1d\xc4\x22\xb9\x83\xf4\x58\xdc\xc4\x41\xbc\x92\x38\x28\x6d\xf0\x20\x3c\x69\x90\x1a\xb0\xa7\x02\x96\x5b\xf2\x84\xfb\xf3\x15\x9c\xb2\x55\x39\x78\x74\x01\x49\x0e\xa9\x9f\x36\x1c\xd4\xca\xb4\x9b\xb1\x60\x21\xf1\x74\x3a\x05\x11\xe7\xd0\x30\x20\x9d\x69\xf9\xb4\x2e\x90\xb7\x53\xf6\x29\x41\xbc\x75\x95\x95\xd4\xb4\x33\xa8\xa7\xc4\xee\x76\x9a\x26\xed\x59\x3e\xc2\x97\x88\xb4\xef\xf0\x1d\xac\xfe\x28\xbb\x21\x33\xfa\x27\xc1\x87\xf2\x31\x2b\xae\x09\x97\x4f\x5f\xe1\x72\xd0\x9f\xce\xe5\x83\xdc\x46\x3a\xb9\xc7\xa7\xc0\x25\x8d\x09\x2f\x46\x39\x27\xf8\x00\x0a\xce\xa9\xc8\xa0\xe8\x17\x9d\x03\xe6\xa7\xc1\xd6\xe5\xf0\xa7\xa9\xd6\x44\xf0\x36\x84\xb1\x4c\xba\x64\x3f\xa6\x46\x39\x54\x9a\x57\x85\xaa\x29\x6a\xee\x42\xf0\x94\x0c\xff\x94\xfc\xb1\xfb\xf8\xc7\xe5\xe3\x1f\xed\xc7\x3f\x8a\x74\x27\x69\xa7\xfd\x9f\xa6\xa8\xc0\x3f\x25\xff\xf1\xf8\xc7\x4f\x69\x32\x38\xd8\xfd\x7f\x87\xe9\x4f\x53\xb4\xd8\xa4\x97\x52\x09\x97\x55\x8e\x85\x01\xf9\x3e\x6b\x8b\xfc\xf3\x7c\x4e\xf8\xbb\xac\x20\x49\xda\x6b\x36\x97\xe5\xd0\x8a\x78\xb3\x22\x3f\xce\xef\x4c\x0d\x50\x7c\xcc\xf0\x4f\xff\x21\xc7\x7e\xa9\x07\x8d\x46\xf8\xa7\xa4\x9d\x46\xa7\x33\xd1\xd3\x79\xfc\xa3\x9d\x26\x83\x6c\xf7\x4f\x98\xd1\xf5\xca\x19\x69\x46\xa6\xd6\x73\xbb\xdf\xbc\x6c\xee\x44\xa6\x82\x38\xae\x42\xbe\x01\x95\x9d\x84\xf7\x79\xa5\x4e\xaa\x92\x01\x6a\xa1\xcc\x4f\xcd\xb4\x4e\x60\x4c\x07\x62\x08\x92\x62\xbb\x5c\x33\xc4\xca\xb5\x1b\x39\x56\x45\x54\x47\x94\xf8\xa9\x59\x7e\x9f\xd4\xad\xad\x33\x1c\x58\xdb\x39\xfe\x09\x96\xe9\x8f\xf1\x50\x43\xc0\x8e\x5c\xb0\x31\xfe\x49\xae\x6e\xb1\xf3\xd3\x14\xdd\x3c\x0d\x1c\xe6\xa8\xf9\x3f\xbb\x97\xff\x73\xcf\x19\xcd\x18\x35\x2f\x9b\x69\xb8\xb3\xe8\xbe\x04\x3d\x39\x82\x45\xa7\xf3\xae\xb3\xfb\xc7\xa2\xb3\xf7\xec\x03\xec\xda\xed\xd3\x3a\xbe\xdf\x74\xce\xd3\xca\x9c\x65\x6f\x57\x4f\xeb\x6d\x5a\x4e\x33\x98\x57\x79\x7b\x5f\x7a\x86\x0d\xdb\x70\x9d\x19\xa1\x53\xc2\xd2\xc7\xc7\x4a\x90\xbb\xbd\xb4\xd5\x4a\xf4\xc5\xe7\x3a\x9b\xcf\xe8\x28\x74\xc0\x43\xdd\x34\x45\x55\xa9\x29\xc3\x9d\x46\x65\xb0\x3f\xfd\xcb\xbf\x25\x83\xce\xee\xcf\xc3\x1d\x75\x48\x3c\xc1\xac\x42\x31\xbc\x3f\xcf\x78\x41\x8e\x98\x48\x38\xea\x76\xd2\xdd\x6e\x8f\xed\xec\xa0\x1c\x53\x2b\xa9\xea\x4b\xe6\xb3\xe7\xa9\xc4\x9a\xea\xba\x28\x65\xc7\x79\x3f\xef\x69\x56\x38\xef\x37\x15\x61\xd1\xec\x59\xf1\x75\xde\x6f\x36\x7b\xcd\xe6\x4e\x0e\x72\x5f\x6b\x48\xa4\x70\x6a\x0a\xfa\x4f\xb9\x64\x25\x4d\x73\xe7\x2d\xbe\x3a\x37\x3f\x49\xb8\x74\xca\x1c\x3a\x65\xae\xb4\x92\xa2\xfc\xfa\xd5\xf9\x9a\x57\xbe\x9e\x3b\x5f\x17\x95\xaf\xa7\xce\xd7\xeb\xca\xd7\x03\xe7\xeb\x4d\xe5\xeb\x17\xe7\xeb\xad\xf9\xaa\xd3\x78\x86\xd9\x5f\xda\x6a\x01\x5a\xad\xd8\x65\x45\x49\x91\xa8\xef\x25\x44\xa0\x87\xbb\xde\xc3\x28\x67\x13\x3a\x5d\xd8\x4b\xcb\xbd\xc2\xba\xe8\x8e\x53\x41\xcc\x27\xf0\x5f\x8b\xdc\x68\x77\x3a\x8b\xc0\x12\xcd\xf2\xd1\xf7\xb5\xf8\xc3\x69\xc5\x4b\x23\xc3\x5f\x2e\x91\xb9\x3c\x7f\xc8\xa4\xcf\xed\xa4\xcb\x0b\xfb\x87\x34\x7c\x58\x36\x6c\xae\xfe\x1f\xd2\xee\x57\xdb\x6e\x49\x2a\xfc\x90\x86\x0f\x6c\xc3\x86\x20\xf9\x21\xcd\x9e\x96\xcd\x5a\x5a\xe6\x87\x34\xfc\xc5\x34\x1c\x98\x5e\xad\xa2\x5f\x37\x14\xec\x39\x14\xaa\x5b\x4a\x60\xf0\xee\x9e\x46\xbe\x96\x77\xbd\x57\x22\x1a\xe1\x62\x40\x86\x26\xed\x97\x4d\x42\xa6\x43\x6c\xfe\x44\xd8\x28\x07\x6e\x78\xc3\x91\x1e\x69\x0f\x41\x2a\xb9\x5f\xa8\xea\x3a\xdf\x8a\x9a\x70\x05\x26\x78\xeb\xd5\x62\x32\x21\x1c\xab\x20\x22\x90\x34\xfd\x53\x5e\xe0\x4e\x3c\xce\x4a\x79\x03\xa9\x41\x46\xdd\xf7\x79\x83\x4e\x12\xf2\xcb\xde\xf3\xe7\x4e\x64\x55\x60\xb0\x93\xe6\xe9\x5c\x56\xdb\x92\x4d\x6c\xe5\xb7\x84\x6f\xbd\xda\xbd\xa2\xa2\x68\x6f\xfd\x9a\x8b\x2d\x88\xa7\xda\x36\x34\x50\x39\x38\xad\xd0\x7c\x14\x95\xfb\x71\x77\xef\xcd\x9b\x57\xa9\x3f\x74\xb7\xa2\x31\x99\x46\x0c\xef\xbd\x66\x55\x49\xb4\xc4\x37\x0f\x74\x92\x34\x55\xc4\xba\x32\x08\x10\xf7\x30\x50\xda\x6a\xf1\x5f\x9e\xed\xfd\xfc\xec\xe7\x17\x2f\xf7\x7e\x8e\x4e\x8b\xf0\x8c\x8d\xd5\x94\xf6\xf7\xbc\x39\x71\x35\xa7\xca\x7c\x78\xba\x74\x22\xa4\x54\x06\xed\x3b\xba\xcf\x43\xeb\x5c\x25\x64\xde\xed\x1a\xbf\x7e\x55\x77\x40\x76\xba\xc3\xea\xf0\x2e\xf8\x3d\x65\xd3\x2d\x91\x6f\x41\x3b\x5b\xb9\x1e\x2e\x65\x5b\xf3\x7c\xbe\x98\x65\x82\x8c\xb7\x8a\x59\x2e\x20\x48\x21\xc9\xc6\x5b\xf9\x64\x2b\xdb\xe2\x04\x74\x39\xea\x53\x30\x07\xe8\x09\x8b\xc8\x28\xff\x46\xc5\x75\x85\x74\xfe\xef\x30\x56\xe4\xbf\xda\x1b\x62\xa6\x7c\xf6\xe3\x67\x48\x04\xc7\x72\x96\xdf\xed\xce\xc8\x2d\x99\x6d\x9e\x0b\x0e\xa2\x31\xca\xff\x39\xcf\xa6\x64\x93\x53\xa9\x0f\x65\x06\xe1\x10\x4c\x28\x0f\x90\x63\x46\x4f\xa1\x1f\xd0\xa3\xe4\x5c\x6c\x35\x13\xe1\x01\x1a\xb4\x36\x82\x18\x63\x6e\x69\x38\x53\x74\x67\xa7\x97\x08\xd0\x2a\x38\xbd\x1a\xd7\x65\xa8\x0f\x9e\xf5\x88\x85\x71\x3c\x38\x99\xd4\x46\xf1\x51\xf5\x48\x10\xa4\x62\xcc\x73\x5f\x6b\xed\x95\x75\x46\x5f\x0e\xc4\x84\x57\x60\xb5\x0b\xf7\x5d\x21\xb4\x07\x43\x05\x30\xb7\x64\x84\x49\x6c\xa5\x21\xee\x72\x4d\x10\x17\x95\x5d\x46\xd6\xb5\xea\xe1\x20\x36\x94\x7c\xfb\x81\xe7\x37\x9e\x87\xf9\xaa\x16\x44\xb4\x09\xa7\xba\xcb\x8f\x46\x1b\x40\x2c\x6c\xc2\xf7\x32\x57\x61\x77\x75\x25\xc9\x5c\xda\xdf\xe1\x6e\xc1\x4d\x7c\x96\xdd\xd5\xd5\x25\x15\x3c\x30\x25\xc2\x2f\xef\x03\x45\xac\x93\x4a\xe4\x40\x3b\x1f\x13\x40\xd0\x2f\x3f\x23\xac\x2e\x5c\x48\x59\xc9\x1e\x6f\x73\x02\x05\x32\xa7\x92\x05\xa7\x9b\xe5\xe3\x95\x89\x18\x6c\xc1\x8d\xf3\x69\x17\x84\xab\xa0\xf0\x6f\x17\x74\x36\x06\x8d\xd6\x49\x3e\x26\xef\x4f\x3f\x5e\x70\x52\xc6\x45\x28\xad\x37\xb5\xac\xcf\x5d\x35\x0b\xe0\x3c\x30\x74\x7f\x42\x78\x05\x00\x04\xa7\x6a\x19\x39\x01\x92\x51\x71\x3f\x86\xd9\x62\xfe\xb9\x20\x33\x52\x14\x87\x33\xe2\xc7\x1c\x4d\x1f\x96\x5e\x61\xca\x0a\xc2\xc5\x6f\x17\x1f\x8f\xdf\x82\xf8\xbb\xc6\x62\x52\xf4\x45\x7b\xce\xc9\x2d\xcd\x17\xc5\x39\xbd\x9a\x51\x36\xed\x91\xf6\x2c\x2b\x04\xc4\x7d\x37\x61\x7d\x4c\xd8\x6c\x1d\xc7\xe1\x2c\xbb\x93\x2d\x9f\xeb\xc0\xc7\x3c\x6d\x98\x0e\x55\x67\x49\x8e\x84\x89\x86\x4b\xfb\x14\x70\x44\xd9\xfa\x84\x72\xd3\x7c\xb1\x6e\x00\xa1\xe1\x34\x1b\x71\x22\xc8\xdb\x7c\xc1\xc6\x45\x42\x20\x03\x86\x3f\x6f\x35\xc0\xca\xf2\x04\x30\x1e\xcc\x47\x17\x57\xe9\xd1\xfc\x15\x3f\x10\x82\xd3\xab\x45\x10\x0b\x49\x02\x94\xff\x19\x8e\xf4\x12\xf1\x65\xc2\xda\x11\x20\xaa\xa4\x87\xf6\xc1\xc7\x08\x03\x36\x84\x9e\x68\xc8\x5d\xc7\xad\xa7\x04\xee\x59\x3e\xfa\xf2\x9e\xcc\x21\xc4\x27\xdb\x10\xce\x2e\x2f\xf3\x39\x61\x50\x35\xd4\x2e\xe8\x40\x3b\x91\xf6\x77\x76\x4c\x22\x8b\x6c\x3e\x27\x6c\xfc\x2e\xbf\x81\x25\x6d\xfe\xcb\xce\x55\xaf\xb9\x23\x76\x9a\xff\x02\xe1\xb2\xa3\xdd\x38\xd1\x46\x96\xc1\x50\x46\xb3\xbc\x20\x95\xb1\x90\x9a\x32\x4e\x43\xa8\x66\x38\xbb\x72\x38\xbb\xbb\xb5\xf3\x90\xe3\x0c\x07\xa1\xda\x90\x20\x5f\x09\x42\xc2\x6d\xdc\xc0\x4a\x4f\xd3\xd9\x0d\xff\x97\x66\xda\x68\x5e\x1c\xbc\x3d\x3e\x6c\x9a\xf8\x50\x44\x01\x5b\x5b\x64\xd3\x93\xec\x86\xb4\x5a\x09\xc7\xc2\x5a\x53\x36\xdf\x34\x75\xfc\xab\xa6\xe0\x50\x47\x5f\x19\x7c\xa7\x8b\xf8\xce\x7e\xda\x6a\x25\x02\x37\xdf\x88\xab\x7c\x7c\xff\x0b\x2c\xec\x9b\x9f\xf4\x43\x8a\x9a\x50\xa3\x5f\x33\xa0\xad\x7f\x69\xa6\x3d\x52\x33\x33\x2f\x52\x8a\x76\xc5\x58\x33\xb1\x55\x67\xd3\x9d\x2a\x58\x18\xc4\xd7\xf4\xc2\x53\x02\x97\x4c\x0a\xf8\x7a\x26\x1c\xeb\x88\x2d\xa9\x6d\x4a\x4b\xab\x12\x8a\x99\x8b\x56\xd2\x3e\x2f\x91\x46\x8f\x86\x28\xc5\x8c\x75\x83\xf5\x49\xf2\x56\x6b\x1f\x63\x9c\xb7\xe5\xa5\x73\x71\x3f\x27\x3a\xab\x5d\xb5\xfc\x63\x15\xa4\xcb\x59\x79\xeb\x19\x22\x29\x09\xb0\x11\x14\x5e\x06\x11\x33\x40\xc2\x08\x19\x17\x87\x5f\x05\xcf\xde\xc9\x3a\x72\xf3\x57\x7c\xc6\xdb\xdd\x20\x5a\x5d\xd9\x8f\x1b\xd1\x67\x93\x42\xfe\x88\xe5\x51\xad\x0c\xb8\xb4\x4a\xd5\xa0\xda\x6a\x35\x2f\xde\x9e\xbe\xff\x7b\x73\xbb\x16\xd6\xe1\xb5\xd3\x5a\xd2\x04\xe0\x35\xa9\x0c\x6c\x40\x1d\xca\xa6\xd5\xd9\x69\xbe\x77\x32\x5b\x14\xd7\xa6\x7e\x30\x1b\xa7\x69\x6f\x07\xfc\xe9\x48\x16\xef\x8c\xdc\xe4\x91\x9b\x42\x58\x7f\xe3\x2a\xb5\xba\x17\xa5\x56\xf7\x5c\x6a\x75\x6f\xa8\x33\x12\x99\x8b\xf3\x06\xac\xd1\xfd\x7b\xa6\xa9\x22\xbd\x37\xd3\x46\xee\x5f\x22\x4d\x79\xb4\x9a\x88\xa5\x88\xfa\x17\xaa\x40\x39\xe2\xfe\x4c\x2b\x73\x70\xe7\x0b\xda\x0d\x7d\x1d\x9d\x90\x3b\x5d\x42\xd3\x3a\xf2\xba\xae\x23\x76\x38\x8a\xd0\x46\x51\x15\x29\x6d\x4f\x72\xae\x93\xeb\x28\x0b\x01\x65\x48\x18\x90\x6e\x39\xc8\x14\x6c\xea\xa7\xd5\x06\x84\xf5\x84\xdd\x42\x50\xef\xf9\xf6\xc6\x7d\xba\xa3\x9c\xec\x42\xac\x69\xe1\xbe\xb6\xb2\x9a\xf2\xd5\x9c\xe7\x53\x9e\xdd\x3c\x31\xa5\x16\x9a\x35\x48\xfb\xd3\xf1\xc1\xbb\xc3\xdf\x4e\x8f\x21\x4f\x35\x64\xb6\xc7\xa4\xfd\x37\x2e\x8f\xfc\xb8\xa4\x22\x67\xf9\x54\x89\x51\x30\x18\x8e\x2c\xa6\xe7\xc0\x1b\xe8\x07\x4c\xda\x26\x1b\x96\xd6\x05\x63\xd2\xfe\x94\x71\xb9\x88\xef\xc9\x04\x52\x43\x42\x32\xf6\x73\x31\x56\xcd\x94\x2d\x87\xcf\x87\xd9\x94\xf0\xf0\xe5\x71\xf6\xe7\x7d\xf8\xee\x1d\xac\x7d\x76\x35\x23\x9f\xd4\xec\xbd\x77\xea\x72\xd5\xe3\x7b\xa7\xb7\x09\x93\xf6\xc1\x55\x21\x78\x36\x12\xce\x2b\xbd\x89\xba\x1b\xe7\xc3\x47\x70\x94\x94\x95\x2e\x2e\xce\xce\x2f\xdf\x1e\x9f\xbe\xfb\x77\xa3\x2c\x4e\x66\x78\xf1\xf8\x98\x2c\xf0\xc3\x32\x4d\x07\xb3\xf6\xe9\x9c\x30\x9b\xce\xcd\x1c\xbf\xce\x10\x37\x63\x1f\x9a\x68\x36\x98\xb5\xdf\xd3\xf1\x3b\x8f\xae\xeb\x0e\x71\x33\x7c\xa9\x8a\x9e\x13\x61\xdb\x90\xe7\xaa\xc0\x7b\x43\xdc\xac\xbc\xb5\xed\x2a\xc8\x3d\xce\xee\xf3\x85\xc0\xfb\xaa\x59\xf7\x9d\x2e\x08\xf9\xf4\x08\xc7\xcf\x64\x09\xfd\xd0\xd4\xe6\x21\x79\xfb\x74\x5e\xa0\x09\x6e\xb6\x32\xd5\xf4\xf5\x5f\xc3\x05\x77\x14\x85\x95\x4f\x26\x92\x19\xd3\x22\x41\xc8\xca\xa8\x2c\x8e\xc7\x74\x24\x52\x13\x7d\x56\x76\x5b\xe0\xc1\x70\xbd\x5c\xc2\x72\x8b\x50\x45\x49\xbf\x8c\x60\x01\x5a\xb7\x4c\xbf\x2a\x60\xa4\x76\x21\xfb\xaa\x40\x23\xa6\xe2\x22\x03\x67\xe0\x43\x23\xf4\x50\x6d\xb3\xe1\x6b\x13\x0d\x12\x9a\x1f\xf0\x61\x6a\x0c\x92\x97\x49\x19\x92\xbc\x54\xd3\x8d\x0d\x01\xae\xa3\x03\x0e\xba\x43\x44\x31\x19\xec\x0d\x51\x8e\xc9\x60\x7f\xd8\x60\x6d\xf2\x75\xce\x13\x9a\xa2\xbc\xcf\xda\xe3\x7b\x96\xdd\xd0\x91\xdc\xf6\x84\x23\xc9\x99\xf4\xc2\x97\x80\xb1\x45\xba\x94\x2d\xde\xb8\xfc\xde\xfd\x6a\x41\xd0\x7f\x97\xc5\xcf\xc6\xe3\x8f\xb4\x28\x42\x71\x36\xd4\xbb\xd1\x1f\xc8\xfa\xfd\x2a\xad\x41\x15\xeb\xe6\x8d\xa2\x61\xb5\x82\x59\xdf\xec\x98\x6e\x3b\xf5\x2a\xf7\xfc\xfd\xcc\x86\x69\x52\x7e\xd4\xbb\x7a\xfb\xff\xab\x75\x75\xa8\x5a\x00\x57\xc8\x39\xe3\xab\x97\xa9\xf1\x03\x80\xdb\x91\x37\x91\x0e\x87\xb2\x3a\x7b\x08\x1d\x74\x86\x18\xe3\x51\xfb\x37\x32\x9b\x13\x9e\xe6\x98\xca\xd3\x90\x61\x2a\x4f\x43\x81\xa9\x3c\x0d\x64\x56\x90\x07\x5d\x78\x5b\x16\xfe\xcc\xbe\xb0\xfc\x8e\x55\x3b\xb4\xd5\x0b\x30\x3b\x5c\xaa\x14\x18\xce\x9a\x95\x06\xdd\x16\x18\x16\x9a\x3a\xd6\xcb\xd1\x07\xdf\xb7\x44\x71\xb2\x1e\x88\x28\xa7\x0a\x91\xa6\xfd\xb2\xc7\x1e\xeb\x59\xbc\xb7\xd0\x55\x39\xf6\xe1\x67\x31\xac\xa9\xcb\x7b\xe5\x83\x16\x25\xc9\x01\x4f\xeb\x34\x2a\x16\x24\x46\xf6\xde\xd2\x81\x99\x15\xf2\x17\xc8\xfd\x3a\x56\x4b\x10\x93\x35\x86\x3b\x6c\x0d\xca\x0d\xd5\x6b\x9a\xf0\x02\xd5\x9b\x97\x0d\xbf\x97\xdd\xae\x9b\x76\x52\x0d\xa5\x7d\x05\xbc\x6c\x21\x32\x01\x37\x9b\x9f\xc9\xd1\x56\xf5\x26\xa3\xbc\x90\xdd\x09\xa5\x4b\xe5\x6b\xa2\x48\x4f\xb0\x44\x93\x07\x75\xf0\xf0\x85\xdc\xf7\x9a\x2a\x71\xd3\x85\x24\x00\x9a\x75\xf6\x53\xe1\x88\x96\xcb\x61\xaa\xce\xef\xd5\x93\x17\x19\xcc\x15\xc6\xff\x2d\x16\x59\x0d\x05\x09\x4c\x2a\x0b\x8d\x18\x50\x39\x90\x2e\x91\xb2\xa9\x22\x01\x36\x5d\x7d\x25\x01\xfa\x01\x6b\xae\x06\x18\xac\xb9\x6f\xa7\x62\x71\x4a\x1e\x2c\xd1\xdc\xac\xc7\x5c\x4f\x59\x79\xc9\x5d\x37\x00\x9b\x25\xa3\xb6\xe4\x4d\x03\x43\x14\xd1\x16\xe4\xab\x48\x24\x6a\x02\x45\xad\x2e\xa9\x19\xdd\x4a\xe1\x91\x66\x80\x2b\xe5\x1d\x46\xb2\x5a\xc9\xf9\x98\xb8\xb5\x3e\x38\xcc\x5c\xa5\x96\xcf\xe9\x39\xb5\x3e\xe6\x63\x3a\xa1\x84\x47\x4d\x6a\x44\x9b\x93\x09\xe1\x9c\x70\x14\xa3\x0f\x50\x86\x45\xb9\x73\x3a\xf5\xa1\x69\x50\x52\x03\x90\x14\x4c\x0b\x1a\xb2\xaa\x0e\x4c\xd3\xbd\xea\x51\xa9\x10\x4d\x76\xc9\x6c\xeb\x46\xb7\xd3\xdb\x52\x38\xb9\xd8\xba\xc9\xee\xe1\xdb\x15\xd9\x5a\x14\x04\x54\x65\x90\xa6\x52\xcd\x6a\x4b\x72\x2d\xa0\x11\x6b\x9b\xaa\x49\xa6\xae\xca\x72\xb6\xe7\x22\x13\x8a\x58\x89\xce\x17\xa6\xc8\xd5\x14\xa9\x22\x81\x04\x00\xb5\x26\x70\x18\xa2\xe0\xbd\x69\xdb\x7b\x5f\x52\x3f\x41\x83\x12\x87\x6c\x77\xc1\xf5\xde\x96\xbe\xe0\x8b\x02\xa2\xc0\xd4\x14\xef\xf8\xc5\x4f\x4b\x0e\xbc\xb2\x9f\x92\x3b\xff\xc4\xe9\x0d\x15\xf4\xb6\x94\xba\x06\x70\x24\x1b\x38\x97\x2c\x92\x20\xe3\xba\x86\x8a\x90\xa0\x4f\xb6\x3b\x90\x46\x6c\x51\xbe\x07\xb5\x2f\xd8\xa4\x4b\xfa\x61\xb3\xbe\xf5\xca\xd8\x36\x62\xeb\xad\x6f\x71\x80\xa6\x3d\x09\x4d\x00\x54\x05\x26\x83\x67\x43\x34\xc3\xc2\x72\x78\x49\x91\xa2\x89\xb2\xe0\xcf\x1d\x52\x3f\x61\x78\x30\x90\xc7\x85\x12\x26\xce\xe9\x98\x9c\x1b\xfc\x83\x16\x55\xfe\x05\x6d\x77\x86\x43\x63\x1c\x9d\xa3\x27\xd5\xec\x0e\x87\x72\x04\xa2\x4d\xd9\x8c\x32\xc5\xe9\x25\x0f\x25\xba\xeb\x31\x34\xcf\x78\x76\x43\x04\xe1\x45\x8f\xb7\x0f\x3f\x7e\xba\xf8\xfb\xe5\xc1\xd9\xd9\xc1\xdf\x97\xa9\x5c\xb3\x71\xb0\x1c\x09\x45\x13\x45\x2d\x67\x12\x4c\x66\xf0\x3b\xc0\x19\xab\x16\x4e\x72\xd8\x6a\xf1\x0a\xb5\x78\x33\xb5\x78\x13\xb5\x78\xd7\xee\xd1\x9d\x47\x4e\xa9\x42\xc8\x1f\x72\x7e\x91\x4d\x93\x0c\x5d\xa7\x68\x8c\xe7\x6d\x70\x8a\x22\xe8\x06\xcf\xdb\xa3\x6c\x9e\x5d\xd1\x19\x15\x94\x14\xe8\x5e\xbe\xb0\x7c\xae\x73\xa8\xc7\x8f\x8f\xfa\xd7\xcd\x9a\xe3\xdd\xdb\x7a\x97\x31\x79\x7a\x27\x94\x8d\xb7\x6c\x82\xc7\xad\xe6\x4e\x96\x36\xbe\x7d\x1f\x8b\x6f\xd8\x47\xfa\x8d\xfb\x88\x72\x17\x24\x27\x29\xba\xef\x27\xca\x35\xc6\x76\x53\x4a\x1e\x92\x31\xa4\xde\x64\xb7\xf9\x17\xa2\xb0\x4e\xb9\xf7\x37\xe8\x1e\x51\xb5\xfb\x33\xb9\xfb\x79\xab\x95\xa7\x69\x6f\xb3\xc6\xdc\x66\xaa\x8d\x38\x10\xa4\x85\x21\x1b\x20\xba\x12\x56\x1a\x42\xd9\x4e\xde\xcb\x7d\x3e\x9a\x24\x0f\x19\x9f\x16\xf1\xd0\xc3\x92\x31\x64\x00\xda\x8b\x79\x92\xa2\xbd\x25\xa2\x93\x0b\xee\x9b\x2f\x99\x31\xeb\xa1\x24\x14\x89\x36\xb9\xcd\x66\xe7\x70\x7f\x4b\x6c\xc2\x01\xd7\xe4\xf3\xf3\x51\x3e\x27\x89\x7e\xf8\x20\x77\x20\x49\xb5\xb5\x93\x9e\xce\xdf\x29\x99\x8d\xd7\x4d\xa6\x21\xda\xf7\xb2\x1c\x84\xc1\x72\x2a\xcb\xed\x07\x4c\x58\xdb\x80\x53\x73\x30\x4c\x51\x14\x31\x76\x3d\x04\xa7\x85\x17\xab\x5a\x1c\xeb\x32\x49\x38\x6d\xe6\x5f\xf7\x55\xe8\x75\x1a\x65\x9a\x54\x90\x67\x09\x1e\xdd\x79\x81\x94\x7c\xed\xaa\x40\xfe\x92\xc4\xb6\x72\x04\xc0\x0f\x56\xa7\x2c\x6d\xb5\x44\x7b\xba\xc8\xf8\x98\x8c\x55\x6b\xe1\xda\xc1\x21\xd9\xf0\xba\x04\x54\xfe\x4c\xa1\xf2\xe7\x12\x37\x39\x07\x26\x4f\xd1\xc2\x7d\xce\xe4\x55\xad\x47\xa4\x0e\xa2\xe2\x6d\x8b\x56\xab\x40\x8b\x56\x6b\x61\xe2\x00\x08\x45\x78\x25\x5d\x27\x47\x81\x1c\xda\x22\x2a\x01\xab\xdc\x70\x4f\xbf\xc9\xf6\xe0\x26\x33\x9d\x84\xe2\xb1\x4a\x07\xe3\xa0\x40\x42\x75\xba\x7a\xc2\xdb\x45\xc7\x6d\xaa\x8a\x91\xd6\x5f\xc7\x95\xe1\x54\xe0\x2e\x7d\xf0\x47\xeb\x4a\xdd\x62\x83\x75\xbf\x57\xc7\xaa\x48\x64\xeb\x8f\x4b\x5c\x1b\xb2\xbc\x84\x43\xb0\x9f\x71\x36\x44\xd2\xb2\x54\x92\x96\x72\xc7\xee\xea\xb9\x1a\x00\x67\xe0\x67\x33\xca\xac\x39\x9e\x26\x8c\x7e\x75\xe1\xd0\xb2\x38\xd9\x42\xd0\x7c\x51\xf8\x1f\x99\x93\x79\x28\x64\x71\xa2\x46\x27\x85\x18\x27\xb1\x40\x49\x10\x43\x02\x3c\x62\x4d\xfa\x82\xfa\x82\x85\x30\x67\x64\xbb\xf3\xc4\xf2\x12\x77\x28\x97\x4f\x11\x8a\x57\x8c\x51\xaa\x4a\x96\x6e\x83\x08\x78\x76\x26\x7a\xd6\xb1\x5e\xfa\xf5\x4b\xd8\xab\x5f\x40\x2d\x3f\x3a\xdc\x68\xa7\x94\x4c\x5a\xf3\x9f\x5a\xf2\xad\x77\x47\xd3\x13\x1c\x33\x93\x42\x1b\xf4\x18\xf4\x4f\xe2\x26\x87\x72\xcd\x29\xcc\xf7\x8a\x15\x4c\x21\xc6\xc7\xf4\x0a\xdf\x59\x20\xd3\xea\xb3\x08\x3b\xab\x30\x58\x7c\x1d\x9d\x31\xeb\x6b\xbe\x70\xd0\x67\xb8\xb6\x2e\x02\xaa\x91\xe1\xb9\x0d\x02\x2b\xe9\xb5\xe7\x4a\xe4\x56\x4a\xd1\xac\x79\x37\x31\x16\x7a\xa0\x56\xf8\x90\xf3\xaa\x19\x94\x3a\x4d\xb5\xb2\x2f\x77\x23\xda\xd7\x24\x9b\x83\x6a\xec\x26\x9b\xcd\xf2\x91\x77\x7a\x85\x7b\x7a\x23\x49\x20\x39\x16\x03\x36\x4c\x75\x64\x9d\x4f\xb3\x6c\x44\xae\x73\x39\xaa\x84\xdb\x08\x3b\xae\xc7\x8d\x24\x48\x8a\xeb\x8f\xaa\xa3\x1c\x41\x30\xbf\xd0\xbe\x29\x24\x2f\xe3\xa9\xb8\x5c\xd8\xd1\x19\xdd\x63\x84\x0f\x71\x90\x8c\xa6\x34\x59\xff\x41\xd1\xa9\x4a\x3f\xe8\x12\xaa\xfa\x8d\xa5\x54\xe1\x79\xd9\x73\x3b\xb3\x23\xfb\x0d\xda\x48\x58\xba\x7a\x02\xaa\x58\x24\x47\x8f\x37\x03\x24\x79\xe5\x29\x11\xef\x9c\xc1\x28\x07\x4e\x60\x5a\xca\xd8\x14\x8a\x0d\x50\xad\x3f\x3e\x82\xc1\xc2\x94\x08\x8d\x8b\x49\x9a\x22\x33\x37\x12\x4c\xcc\x9d\x15\x5f\x46\xc7\x6c\x38\xef\x15\xc7\x22\x58\x71\xcb\xab\x57\xcf\x85\x2e\xa9\x78\xef\xcd\x5b\x54\xe5\x75\x7b\x2b\x24\x38\xa0\x9e\xce\x98\x28\x56\xcb\x6f\x34\x88\xdb\xd2\xa5\xe0\xec\xeb\x8f\x94\x4e\x36\x8c\xb8\x03\x8e\xb7\xdc\x35\x9d\x8f\xbd\x30\x96\x8e\x88\x62\x6e\x4d\x4b\x26\xda\xec\x16\xb4\x54\x80\x39\x74\x2a\x71\x15\xd0\xab\xaf\x2d\x9f\x27\x69\x8f\xee\x74\xf5\x25\x51\x4a\xac\xf0\xc3\x75\x56\x1c\xde\x66\xb3\x1e\x6b\xeb\x5f\x48\xf7\x26\x77\xf6\x2f\x90\xe1\x79\x79\x76\xd4\xa2\x20\xe1\xca\x49\x41\x5a\xe7\xe1\xa3\x06\x6b\x17\x22\xe3\xe2\x38\xbb\x22\x8a\x62\x6d\x4f\x88\x18\x5d\x7b\xf4\x42\x37\x55\x11\x78\xec\xc1\xbd\x50\xd6\x09\x01\x51\x01\x39\x80\x34\x91\x75\x26\x19\x0d\xc2\x60\x49\x99\x66\x1d\x58\x7b\x96\x67\xe3\x6a\xcb\xff\xb9\xb8\x99\x7f\x66\x33\x52\x14\x49\x13\x8c\x21\x56\x8c\x22\x2e\xc6\x60\xf5\xc4\x1f\x03\xe2\x4f\x4b\x29\xac\x60\x4c\x8e\x69\x35\x35\x87\x98\xe6\x13\xa2\x10\x00\xbc\x43\x74\x34\x30\x4a\x5f\x0a\x27\x27\x2e\x97\xd7\x99\x9d\xcb\x2f\x2a\x9a\x38\x7a\xf2\x24\x59\x73\x95\x08\xf4\x00\xf0\xda\x73\x19\xd8\x88\x28\xb6\x96\xa3\x45\xa1\x80\xb6\x47\x96\xe9\x12\xe2\x02\xae\x58\x6a\x77\x5b\x0e\x4f\xde\xc3\xb8\x7d\xa1\x64\x39\x31\xf3\x3d\xbe\xc1\x85\xc8\xe7\x06\xc0\x4c\xcc\x5a\x4b\x48\xc6\x85\xc5\xb9\xa3\xa0\x38\x5f\xeb\xf2\xa1\xf5\xf6\xb1\x33\xa5\xa4\x7a\x75\x37\xac\x64\xf5\x07\x1d\x10\x70\x2a\x19\x8b\x90\x3c\xce\x02\x0b\xc9\xe3\xcc\xb0\xdb\x7c\x43\x9f\x43\x65\x7f\x96\x30\x3c\xab\x17\xb6\xe8\x3b\x87\xa4\xa9\x2f\x5f\x01\x23\xac\x12\xc1\xa7\xfd\x64\x56\x2b\x0a\x20\x29\x9a\xd5\xc8\x15\xb8\x11\x08\xe4\x4a\xaa\x54\xa0\x45\x9a\xf6\x36\x6b\xcb\x6d\xa5\xd2\x86\xd1\x36\x9e\xae\xd6\x36\xc2\xa6\xc7\xd4\x8d\x02\xe2\x4f\xd4\x29\x1c\xa1\x5a\x4c\xe5\xa8\xda\x8b\x18\x5e\xab\xf6\x62\x55\x74\x4f\x0a\x01\x3f\x64\xa2\x47\x90\x7a\xd5\x13\xcb\x74\xb5\xaf\x49\x10\xd9\x09\xbb\xed\xd9\x14\x9c\x30\x22\xc7\x79\x39\x77\x9d\x97\x61\xfb\x73\x95\x55\x5b\x20\x8a\xb3\x01\xd3\x0d\x0c\x77\x39\xd2\x3d\xca\x5d\x32\xeb\x79\x50\x0f\xc1\x8a\xc8\xa8\x18\x38\x74\xa3\x06\x0e\x5d\xd7\xc0\xa1\x6b\x0d\x1c\x94\xcb\x8d\xda\x02\x6d\xc1\x03\xac\x74\x16\xf1\x03\x49\x40\xea\x51\xce\x51\x9b\x8f\x83\x6b\x30\xfc\x46\xc1\xa5\x5a\xee\x24\x1c\x84\xa8\xdd\x97\x66\xbf\x4a\x0a\x2e\xe1\xa9\x8a\xe8\xa6\x78\xc5\x8a\x19\x96\xb7\x1d\xc5\x1d\x95\xeb\x55\xc9\xd4\xf9\x30\xca\x0a\xb2\xd5\xed\xb9\x08\x42\x4f\x4f\xff\x4f\x08\xea\xa4\x0d\x28\xb6\xb7\xa6\x18\x72\x17\x4e\xd7\xd9\x7f\x4a\x1d\xe4\x9a\xac\xa5\x0d\x1d\x89\xe2\x9b\x5b\x70\x1e\xf6\x2b\x09\x44\xe5\x12\x7d\xcc\x46\xd7\x34\xc8\xe1\xf0\x5d\x2b\xd5\xed\xec\x3d\xdb\x6c\xb1\x64\xc9\x6f\x58\xaf\x4a\xb5\x6f\x59\xb2\xd5\x8d\xac\x5c\xb5\x90\x99\x0a\x68\xcc\x72\x4d\x93\xbd\x67\xa9\x0f\xe6\x06\x54\xed\x71\xf2\x0e\x93\x76\xb2\xaa\x52\xce\x84\xdf\x92\xaa\xa1\x43\x04\x0c\x76\xbb\xf1\xca\x7f\xa3\xe2\x5a\x3b\xdb\xc5\xb0\x5c\xb4\xa5\x18\x09\x2f\xdb\x8a\x01\xcc\x8a\x35\xae\x0c\x09\x04\x35\x21\xaf\x0e\xf8\xf5\xc5\x2b\x14\x10\x47\x5a\x04\x00\x32\x5f\x4e\xe6\x19\x27\xe3\xf2\x62\xd9\xee\xca\x0b\xa5\x92\x6c\x38\x66\x13\xee\xf6\xb2\xf7\x2a\x5a\xe1\x3c\x9b\x90\x15\x95\x7e\x8e\x56\x7a\xaf\xdd\x15\x3e\xf0\x6c\x1a\xda\x0c\x97\x95\xf7\xe3\x43\x3c\xf1\x3c\x41\xbd\x0a\xe1\x9a\xc5\x6c\xb2\xbd\x0a\x7b\x41\x05\x88\xa8\x54\xd2\xd1\x3c\x63\x85\x0a\x03\x15\xaf\xff\x73\xd8\xa1\x82\xd3\x27\x34\x10\x0e\x40\xbe\xd5\xd4\x30\xc8\xe2\xe3\xd5\x9e\x3d\x0b\xab\xe5\xf3\x0d\x6a\x3d\x8f\x74\x56\x63\x35\xec\xd5\x0b\x67\x39\xcf\xe7\x9b\x54\x8b\xcd\xed\x2c\xcf\x45\x30\xc4\xf2\x3c\x29\x90\xe9\x20\x82\x44\xbf\xdb\x0b\x77\x5f\x7e\xfd\x9d\x72\xb1\xc8\x66\xb1\x56\xbc\x36\xba\x28\x4c\xe3\x0f\xb4\xd7\x35\x9d\x8d\x57\x2c\xd0\x5e\x65\xc4\x5a\x23\x52\x53\x7c\x3f\x2c\xae\xce\xda\x01\x0f\xbd\xb8\x6d\x95\x97\x3f\x57\x06\xa6\x19\x73\x03\x32\xb5\xeb\xf2\xaa\x8b\x3a\x8f\xa2\x52\x9d\xeb\x73\xef\xd0\x95\xc6\xc9\xa6\x66\x0c\xaf\xf6\x22\x8b\x13\x63\xcf\xe2\xb3\x7e\x15\xce\xda\xe5\x3c\xcf\xc9\x6c\x52\xd7\xed\xb3\x4a\xb7\x11\x9e\xb5\xae\xf2\xf3\x95\x95\xb5\xb9\x6b\x4d\xdd\x17\x95\xba\xe0\x79\xf6\x21\xe7\x92\xe9\xaf\xab\xf5\xb2\x52\x2b\xa0\xd0\x57\x76\xfa\x73\xa7\x52\x3d\xe4\x68\xeb\x6a\xee\xc7\x6a\x7a\x66\xbd\x35\x15\xab\x0b\x2c\xdf\x83\x16\x2f\xba\x95\xe6\xba\x7d\xfe\xb2\x0a\xf6\x1b\xd4\x0a\xef\x03\xf9\xf1\xfc\x26\x9b\xcd\x36\xa8\x1b\x5e\x0b\xf2\xa0\x6d\x56\xf5\x45\x25\x49\x3e\xec\x8a\x46\x0c\x2b\xab\x3e\x0b\x7b\x55\x55\x41\xa3\x19\x87\xf5\xe7\x21\xe6\x13\xf9\xdb\x3c\x9f\x91\xac\xee\x26\x0e\xcf\x46\xcd\x1d\x5c\xf1\xbd\xab\xf1\xcf\xd8\x8f\xb2\x19\xfb\x2e\x9b\xb1\xaf\xfc\x33\xb4\x03\x7a\xdd\xf5\x65\x38\xc0\xf0\x7a\x31\xef\x03\x24\xe4\x0b\x5b\xc0\x9f\xae\xd5\xe2\xa6\xf0\x0a\x94\x13\x4a\x69\xa0\x7c\x88\x20\xa2\x85\x62\xd8\x3d\x5a\xb0\x20\xe2\xf7\x8c\x53\xc9\xa0\x27\xce\x3b\x7b\x9e\x2b\x82\x22\x6d\xd0\x59\x10\x21\x11\xcc\xd8\x54\x2e\x2a\xad\x97\x05\x41\xe6\x53\x2d\x00\xe3\xcc\xe7\x89\x47\x60\x05\xf8\x20\x5a\x69\xb5\xb6\xcf\x36\xac\x15\xee\xf6\xd9\xdb\xa2\xe0\x8a\x4f\x4a\x12\xb9\x86\xe2\x08\x19\xbb\x3a\x9d\x8d\x4f\x87\xbb\x24\xb7\xab\xa4\x46\xf5\x5a\xa0\x3a\xa5\x4d\x20\x00\xf6\x95\xcc\xa5\xca\x26\xd2\x70\x28\x8a\xf0\x04\x11\x5a\xa8\x45\x4a\x77\xfd\x4f\x79\xd8\x80\x23\x34\xad\x9c\x54\x87\xb1\xd6\x89\x0c\xc8\xdd\xd6\x69\xa5\x01\x23\x13\x5b\x5d\x1f\x92\x72\x28\x81\x82\x4b\xcc\xc7\x88\x8f\x05\xe7\x34\x8a\x03\x3c\x02\xa1\x42\xd9\x95\x27\xd6\x56\x3d\x02\x31\xfc\xa8\x86\x2c\x79\x19\x22\xa1\xaa\x84\xb5\x86\x1a\x0e\xfb\x76\xe5\xa4\x35\x55\xc2\x4b\xa0\xce\x13\xd0\xa9\x52\xc1\xfd\x0b\x71\x24\x24\xcd\x91\xf3\x1a\xac\xfa\x22\xa8\x41\x98\x20\xfc\x98\x16\x91\x9b\x50\x33\x5b\xc9\x8b\x67\x9e\x18\x45\xcb\x7f\x12\x7d\x92\x8a\xca\x4d\x49\xbe\x52\xe1\xb7\xe8\x8d\x20\xa4\x9c\x29\x0c\x38\x42\xad\xd8\xfe\x5f\x3e\xad\xff\x0a\x76\xaa\xa3\x6c\x63\x35\x15\xba\xaa\xa9\x51\x25\x27\x1c\x0c\x5a\x53\xa7\x4a\x49\x98\x5e\x6a\x2a\x44\xc9\xb3\x35\x9d\x54\xc9\xb2\xe9\xea\x4e\x5e\x55\x2a\x5c\x67\xc5\xaa\x0a\x11\x62\x1b\xcc\xd5\x6a\x8a\x77\xab\x5c\xc3\x2c\xcf\xc6\x75\xa5\xab\xc3\x01\x49\x7d\x5d\xf1\xea\x60\xc6\x8b\x79\xe8\x8f\xfe\xcd\xbe\x54\xee\x8d\x32\x47\xdf\x21\xb1\x0c\x65\x32\x49\xf7\x05\xaa\xaa\x25\xe7\xf9\x8f\x1b\x7a\x37\xd2\x67\x95\xf8\x56\x65\x2e\xf2\xda\x23\x67\x85\x47\xcf\x9f\x76\xf2\xaa\x3a\xb1\x38\x0e\xe8\x86\xd8\x91\x13\x3a\xb9\xff\xbc\xbf\x57\x53\x3c\x44\x19\x80\xb4\xea\x8e\x42\x15\xf2\x24\x42\xaa\x41\x46\x21\x97\xaa\x96\x66\x25\xe9\xbb\x17\x0e\xfe\x3f\x17\x37\x91\x98\x38\xc1\x52\x3e\xdf\x7b\xda\x52\xca\x46\x8f\x22\xfc\x9f\x41\x8a\xcf\xf7\x9f\xde\x9e\x52\x71\xad\x68\xf3\x89\x88\x5e\xb6\x79\xf8\x8f\x18\x97\x5d\x95\xf9\x25\xcf\x25\x5e\x5b\xd9\x7c\x78\x30\xb2\xa2\x20\x5c\x9c\xd7\x71\x31\xc9\xf3\xf0\x2e\x93\x6f\x21\x57\xb0\x2f\x35\xf0\x2e\xf4\x90\x3f\x53\x72\xe6\x95\x66\x29\x90\x59\x1a\x65\x58\xe5\x74\x10\x81\xfe\x52\xe7\x98\x7e\x80\x2c\xbc\x60\xe3\x30\x9b\x5d\x65\xa3\x2f\x3d\x81\x60\x9e\xbd\xe6\xbb\xe3\x83\xcf\xe7\x87\xcd\x9d\x6c\x67\x67\x69\x4d\xac\x00\x84\x13\x03\x14\xe5\x54\x4b\xc6\x40\x9d\x88\xc4\x9a\x64\xb9\xaa\xeb\x5c\x2b\xf1\x41\xdc\xba\x2a\x2f\x11\xd5\x9b\x94\xe8\x34\xc1\x48\x13\x84\x72\x1c\xcc\xc9\x4c\xfd\x9a\xfd\x82\x3b\xaf\xd9\xee\x6e\xca\x71\x6e\x03\x49\x29\xea\x90\xeb\x2a\x25\xd1\xbe\x07\x2a\x0f\x3d\xd1\x24\x85\xdc\x36\x86\x37\x90\xfd\x69\x2d\x69\xc3\x69\x44\xeb\x4d\xf5\x5c\x4a\x25\xa9\x5e\x8d\xaf\x55\xe5\x89\xb5\x34\xab\xb1\x54\xd1\x0a\x21\xa5\x27\xd0\xd4\x31\x13\x92\x6e\xbf\x07\x92\xde\xd6\x62\xe9\x03\x4b\xba\xae\x71\x21\xe9\x27\x22\x58\x73\x47\x66\x9b\xa4\x69\x4f\x38\xf2\x4e\xb0\xa3\x63\x6e\xe6\x58\x65\x83\x59\xa5\x43\x95\xb5\xef\x0a\x2a\x33\x29\x8d\x9e\xdf\x66\xdc\x61\x12\x55\x17\xfb\x7e\x17\xd1\x11\x1a\x21\xb1\xae\xf2\x6c\x83\x2a\xa1\x88\x58\x57\x7d\xbe\x41\xd5\x93\x7c\xac\x63\xed\x56\x2e\x2d\x08\xe8\xb6\x5a\x5a\x54\xbd\xa7\x23\x73\xaf\x5e\x7e\xe5\xee\x56\xf5\xf5\x96\x0d\x5c\xcc\x13\xff\xa2\xee\x1a\xec\x12\x2a\xe6\x5d\xb6\xd8\x67\x0b\x5d\x7c\x61\x5f\x96\x82\xc7\x68\x2b\xeb\x54\x01\x1e\x9c\x45\x24\x6b\x61\xa3\xe1\x5a\x46\x4c\x6d\x6b\x66\x15\xac\x6c\xb1\x86\x1d\x7a\x11\x32\x0b\xce\x71\xa9\x41\x96\x31\xb1\x31\x10\x89\xab\x24\xe3\x2f\x57\x9b\x49\xcd\xf3\xd5\x06\x52\x46\x85\x23\x54\x50\xc8\xe5\x12\xa9\x7a\x9a\x39\xdd\xa8\x6e\x41\xff\x24\xb6\xa2\xba\x6d\xd6\x38\x32\x96\x6c\xe8\x48\xa5\xa5\x29\xcd\xb2\x7c\x8a\xd8\xaa\xb4\x45\xe2\x84\xca\x82\xf9\x3e\x25\xb2\x97\x40\xbc\xcf\x8d\x5d\x8b\xb6\xcb\x52\xb8\xb8\xd7\x71\x72\xff\x55\xfc\x0d\x31\x47\xb4\x6d\x5d\x4d\x54\x36\xdb\x84\xa6\x88\x82\xf7\x02\x29\x0a\x9a\x33\x1b\x7b\xc1\x37\xae\xba\x31\x96\x54\x37\xda\x7a\xea\x46\x7b\xff\x59\xad\xb7\x32\x8e\xd7\x2e\xc0\x35\xde\x73\xd6\xda\x8a\xbb\xfe\x38\x14\xbe\xf8\x43\x6d\x67\x85\xf1\xd7\xc8\x95\x5d\x7d\x86\x99\x6f\x84\x97\xe4\x88\xa7\xc6\xda\x24\xeb\x8b\xf6\xb5\x7a\x9d\x29\x7b\x0d\x9d\x15\xb1\x2f\xac\x39\x60\x76\x7f\x45\x8e\xf3\x51\x36\x4b\x72\x70\x2e\x99\x06\x02\x2c\x27\x4b\xe3\x7d\xe2\xfb\x8e\xbc\x03\x76\x25\xea\x7a\xa4\x1c\x01\xeb\x32\x36\x69\xc7\x10\x3e\x60\x43\x65\xde\x0f\x5e\x3a\xa6\x88\xdb\x85\x9a\x54\xbc\x0b\xbd\x44\x7a\xf1\x72\x77\xf1\x7c\xaf\xa7\x85\x72\xd2\xa3\x93\xa4\x69\xf7\xb9\x09\xce\x86\x36\x06\x64\xa1\x72\xff\x19\x4b\xbe\x6e\x8a\x80\x35\x10\x00\xbb\xf7\x25\x4a\x92\xdd\x2e\xd0\x76\x47\xd9\x16\xcd\x30\x0d\x56\x3f\x43\xb9\xeb\xce\x38\x5b\xeb\xef\x24\x69\x18\xc7\x9f\x51\xed\x16\xf8\x27\xea\x8d\x9b\x81\x71\x8d\xb3\x24\xbf\x92\x55\x4b\xae\x7d\x2f\x15\x5d\xe5\x6d\x26\x37\x91\xa5\xa9\xbf\x15\xee\xfe\x52\xb9\x23\xae\xdf\xa7\x85\x8e\xda\x2d\xb0\xfb\xbc\x0a\x5c\xfb\x09\xc3\x54\xa5\x34\xa4\xe5\x12\xc7\x80\x90\x01\xa5\x10\x00\xa1\xca\x70\x62\xc7\xcd\x23\xe3\xe6\xde\xb8\x3f\x33\x15\x24\x3c\x74\x7a\xf1\x52\x15\x7d\xaa\x9a\x1b\x2a\x7e\xd0\x03\x40\xcd\xc3\x57\x5c\x24\x0c\x73\x5f\xf1\x69\x34\x35\x3e\x65\x3c\xbb\xa9\xfa\x6e\x5c\x7b\x9f\xcb\xda\x12\x2f\x52\xf7\xca\x51\xe1\x54\xb6\xbb\x80\x9d\xb4\x65\xab\xc2\x09\xea\x37\xa2\xc6\x16\x5e\xe8\x1f\x88\x96\x21\xe7\x98\x13\x72\x4e\x00\x9b\xe0\x8b\x4b\x82\x6e\x2a\xd4\x46\x65\x20\x64\xe9\x35\x21\x0f\xb0\x57\xcb\x0f\xb0\x40\xd2\xbe\xa6\x42\x43\x14\xea\x5a\xc5\x5f\xd3\x22\xed\xd9\x7b\x2e\xb2\x1f\x92\xd6\x11\xc1\x6d\x19\xe8\x2f\x03\x6b\x71\xbb\x3c\x6d\x15\xeb\xda\x0c\xa7\xe1\xdc\xc1\x2f\x10\x03\xce\x28\x6c\x19\x54\x2d\x65\x8c\x9e\x28\x05\x76\x5e\x9a\xe8\x26\xa4\xd5\x22\xae\xcd\xae\x43\x03\x95\x57\x7a\x12\xbe\xad\x4c\xca\x47\x31\x15\x49\xb5\x49\x7b\x6f\xe9\x71\xef\x88\x95\x3e\x79\x51\x7a\x4c\x2f\x36\x90\x5e\xb2\x35\xb8\x04\xb8\x33\xa4\xe4\x55\xc7\x32\x0c\x73\x9e\xb8\x73\x48\x5e\x76\x51\xb8\xa6\x3a\x54\x15\x4c\x3f\x4f\x6b\x74\x03\x15\x12\xf3\xb6\x13\x59\x6d\x67\x25\xab\xec\x48\x43\xf2\x13\x95\x1d\x75\x7b\xf7\x46\xfa\xec\x15\x12\xa9\x01\x25\x03\x46\x2a\xbf\x82\xdf\x71\xa0\x14\xa9\xaa\x05\x72\x94\xa9\x21\xd8\xac\xb9\x15\xb9\xd1\x8b\xa8\xdc\xe8\x85\x2b\x37\x7a\xa1\xc3\x92\xcd\x9c\x02\x2f\x87\x7f\x2d\x01\xae\xc3\x23\x41\x50\x3b\xf2\xf8\xe8\xe9\xfb\x1f\x1f\xb7\x93\x6d\xfe\xf8\x28\xbf\xf1\x41\x67\x68\x6e\xda\x46\x05\x48\xe4\x1a\x3c\xdc\x64\x94\xf5\x32\x44\x66\x05\xe9\x2d\x10\x98\x2f\xf7\xc4\x12\xe5\xdf\x49\xcf\x1b\xaa\x04\x6d\x6f\x27\xd9\xe3\xe3\xe2\xf1\x51\xa4\x68\xe4\x52\xf7\xb3\x7e\x52\x3d\x66\x33\xff\x8c\xa9\x02\x9a\xb2\x9f\xc9\x67\xcf\x80\x56\xb2\x9a\xc5\x06\x4c\x42\xf1\x1d\x4c\x42\x15\xa2\x02\x23\xdb\x10\xae\x74\x8a\x5b\x05\x59\x33\x34\x42\xd7\x68\x8e\xc6\xe8\x06\xdd\xa3\x5b\x34\x45\x57\xe8\xb2\x0a\x66\x2f\xa3\x60\xf6\xd2\x05\xb3\x97\x1a\xcc\xee\xe4\x15\x50\xae\x91\x24\x40\xee\x8c\xd7\x40\x00\x09\x69\x4c\x37\x98\x90\x72\x8c\xe8\x12\x89\x54\x45\xb1\xf9\x91\xe0\x0a\xd0\x79\x88\xef\x0c\x69\xde\x30\xa6\x25\x72\x50\x26\x50\xe1\x4a\xf4\x25\xc7\x07\xb3\x2d\x0c\xde\x59\xa5\x4f\x26\xc6\x8b\x06\x90\xb0\x16\xa4\x44\xf4\xcb\x66\x18\x46\x9c\xa0\x4b\xae\xd6\x38\x6b\x40\x5e\x94\xd5\xd5\x2c\xa2\xd8\xb0\x32\xa9\xcd\x15\xd4\xb0\x68\x5f\xf1\x60\x58\x26\x01\x58\xa7\xad\xfe\xaa\x65\x67\x6a\x99\x7b\x1d\x44\x15\xb9\xd1\xdb\xee\x42\xb2\xa8\xce\xeb\xd9\x9b\x43\x43\x48\xcd\x76\x76\x52\x2d\xed\x49\x46\xf8\x70\x30\x1b\xa6\xed\xd1\x75\xc6\x0f\x44\xd2\x49\x95\x5d\x68\xb3\xd5\xec\xd1\x49\x72\x0d\x1e\x30\xa8\xd9\xd2\x66\x98\x92\x7c\x1e\xa5\xd7\x78\x01\x90\xb2\x25\x49\xeb\x16\x65\xb7\x84\x17\xc4\x7c\xba\xb4\xa1\x90\x46\xdb\x18\x4f\x14\x25\x0c\x56\xdf\x0b\xc6\x49\x36\xba\x86\xe3\x9c\xa4\x8d\x6b\xcc\x96\xd7\xfd\x12\x02\xfc\x6b\x38\xb9\xae\x4c\x6a\xb6\xd3\x2d\xa7\xd5\x59\x82\x53\x7c\x4d\x65\x95\xbb\x6f\x5d\xfd\xc6\x15\x27\xd9\x17\x30\x53\x6d\xfe\x1b\xcc\x77\x3b\x4b\xd5\xbb\xb9\xca\x38\x3d\x56\x19\xa7\x6f\xf0\x08\x49\x68\xbd\xc1\x23\x4b\xc6\xa6\x08\x82\xf9\x27\xf7\x78\x6e\x7d\x7f\x6e\xd2\xd4\xc6\x0e\x95\xd7\xea\x78\x70\x3f\x5c\x3d\x8c\xee\x32\x4d\x97\x76\x97\x3d\x5b\xb4\xc4\xec\xd7\x4e\x57\x62\xce\xc5\xe3\xe3\xe5\xe3\x23\x4b\x53\x74\x8b\xbf\x96\xd2\xc6\xdb\x5f\x70\xe7\xf5\xed\xee\x6e\x7a\x85\x93\x29\xfe\x3a\xb8\x1d\xa6\xfa\xac\xa1\x69\x5b\x77\xa3\x68\x32\xa3\x2c\x4b\xae\xf4\x8d\xe9\xda\x2c\x5c\xe9\x3b\xc1\x45\x6b\x89\xa8\x3d\x27\xdf\x69\x3a\x10\x3f\xa5\x4f\x37\x25\xa8\xc7\xd5\x3e\xb2\x0e\x03\x6c\xd4\xf8\x72\x96\xf1\xd8\x50\xf1\x3d\xf7\x7f\x43\x9f\x77\x13\x2b\xa1\x36\x52\x42\x66\xa9\xaf\xac\x8c\x94\x70\x95\x8f\xef\xdd\xb2\x99\xef\x54\x73\x7c\x7e\xd8\x94\xe5\xf5\xed\x17\xca\x47\x93\xac\x9e\x58\x94\xd5\xd6\xc8\x54\xb3\xca\x1d\xb1\xdd\x71\x02\x77\x16\xb2\x84\x11\x43\xc3\x48\x96\xcb\xe0\x62\xbc\xf7\x0d\x97\x2a\x2e\x77\x86\x26\x35\x62\x09\xb4\xdd\x2d\x2d\x72\x0c\xa5\xec\xb9\x0f\xab\x97\x1e\x91\x01\xc7\x7d\x85\x4d\x8a\x09\x12\xe1\x8d\xcc\x0b\x64\x50\x67\xd1\xe8\x81\x6c\x85\x36\xb6\x3a\xa8\x8e\x75\xef\x3e\xa6\x57\xa5\x0f\x76\x22\xaa\xc4\x71\x3d\xdd\x50\xe5\x37\x4c\xee\x8a\x6f\x55\x94\x22\x8e\x3d\xd6\xa4\x5d\xba\x77\xa1\xdc\xe6\xbb\x40\x19\x86\x7c\xb6\x37\x94\x25\x4c\x4b\x2e\x2a\x0b\x90\xa5\x1e\x5a\x2a\xad\x54\xe5\xe2\x80\x7b\x4b\x06\x7e\x2d\x31\x9a\x60\x32\x47\x6c\x57\x44\x4c\xa3\xf8\x40\x0c\x1d\x9e\x6c\xd3\xed\xd6\x26\x58\x72\x54\x25\xb2\xd8\x68\xcf\x8b\xfa\xf4\x43\x31\xb6\xb1\xc2\xa4\xa9\x18\x89\x91\x2d\x42\xdc\xde\xcf\xb0\x18\xc4\xf5\xf5\x81\x60\x9c\x43\xc4\x6d\x4a\x89\x4a\x3f\x2c\x74\x61\x33\xdf\x21\x01\x48\xc2\xc3\x69\x28\xea\x69\x83\x79\x64\x9a\xf1\x0d\x18\x2f\xc3\x1c\x45\x34\x40\x1d\x64\x93\x2f\x18\x15\x90\x4a\x5b\x47\x34\x29\xa0\xf3\x02\xf5\xc8\xbf\x74\x31\xee\xf4\xc9\x2f\xbb\xdd\x3e\xc3\xa4\x97\x54\x78\x6f\x55\x12\x36\x14\x3f\x4b\xd7\x14\xe8\x7a\xf7\xaf\xce\x99\xd7\xd3\x55\xec\x76\x20\x81\xf7\xdc\x72\x57\xca\xd2\x51\x16\xec\x3c\x12\x24\xf0\xbe\xfb\x55\x67\x99\xef\x31\xbc\x17\x7e\x5a\x18\xd9\x90\xfc\xba\xef\x7c\x35\x1e\x26\x15\x91\xdd\x11\xbb\xcd\x66\x74\xbc\x65\x17\x6f\x6b\x9e\x15\x05\x19\x43\x5e\x1e\x57\x70\xd1\x54\x81\x2d\x74\xc4\xd5\x82\xfe\x49\x8e\x6e\x6e\xc8\x98\x66\x82\x24\xec\xcd\x9b\xfd\x47\x81\x98\x2b\x89\xe8\xee\xa3\xca\x06\xbb\x95\xe2\x1e\xd5\xe4\x17\x5c\xa6\x5f\x7a\x7c\x24\x6f\x3a\xfd\xf8\xea\x8a\x54\xf6\xf9\xbc\x47\xaa\xcc\x77\x55\xd6\x12\x11\x77\x58\x46\xda\x62\xbe\x88\x83\x6e\xb5\xed\x88\x0f\x61\x9d\xbd\xf9\x5e\x28\x60\xb8\xb6\xbe\x8f\x7e\xbb\x35\x97\x5c\x5d\xbb\xcf\x57\x0a\x2e\x2a\xad\x17\x3e\xf7\x16\x71\x67\xb7\x56\xb0\x26\xae\xc2\xca\x50\x59\xc4\xe0\x31\x73\xdd\xe6\x98\x9a\xb0\x59\x19\xa6\xbe\x5b\x67\x81\x69\x24\x6c\xd6\x36\xc6\x79\xab\x65\x38\xe6\x56\xab\x00\x85\x83\x00\x5c\xac\xc4\xa1\xa2\x14\x87\xe2\xbd\x54\x0c\xf8\x70\xd0\x19\xe2\xe6\xbf\x35\x77\xf4\xef\x8a\xe1\x4a\xcc\xb9\x33\xf7\xf0\x6b\xe8\x2b\x2a\x39\xc2\xf2\x82\x16\x68\xbb\x8b\x58\xab\xc5\x52\xb4\x6d\x32\x30\x6d\x77\x63\xd7\x9a\x16\xfb\xd6\x18\x12\xaf\x11\xeb\xd0\x55\x92\x3c\x91\xa2\x3c\xfc\x9e\xe9\x94\xa1\xce\xc9\xfa\xf9\xb9\x8d\xb7\x11\x01\xa3\x52\xde\x5c\x67\x9a\xf5\x02\xf9\xd8\x27\x68\xc7\x84\x6c\xaa\x75\x87\xf8\xf9\x65\x05\x02\x3d\x71\x64\xf8\x35\xd3\x93\x0b\xfa\x11\x9e\x6f\x90\x6f\x6a\xf7\x22\xde\x43\x75\xb0\xb1\xf8\x45\x75\xd6\x78\xfb\x9b\x36\x7a\x13\x0b\x23\x61\x83\xc1\x6c\x26\x87\xdc\xee\x78\x32\xbc\x4e\x3d\x32\x58\x7d\xb7\xeb\x08\x99\x75\xe1\x37\x22\x93\x71\x20\x65\xef\x65\x45\x16\xec\x44\xab\xde\x10\x82\xed\x25\x45\x4d\xba\x8b\xca\x47\x91\x1a\x87\xdb\x50\xb4\xde\x77\xd6\xff\x25\xe2\x08\x24\x78\xac\xdf\x95\xcc\xbb\x23\x1e\x4f\xf6\x5f\x84\x1f\x63\x58\xac\x7e\xd4\x75\x07\x4b\x8e\x3b\xff\x96\x71\x27\xab\x44\xf7\xcc\xdd\xdb\xfd\x97\x88\xa2\x2e\x82\xf8\x75\x75\xab\xe7\x57\x78\x8e\x28\xe2\xb2\x82\x3f\x47\x5f\x7b\x52\x85\xe2\x8d\x58\x07\x75\xf7\x86\x82\x3c\x47\x9f\x54\x77\xad\xac\x46\x0a\xd7\xf1\x6b\xe3\x9b\x0f\x44\x45\xfa\x5e\x7f\x1e\x36\x95\xbb\x5f\x51\x36\x8e\x7b\xe2\xf9\x06\xb6\x1a\x0d\x00\xd1\x1b\xbb\x8c\x0d\x43\x1b\x39\x72\xa4\x2d\x79\x5c\x15\x2b\x24\x1f\xdf\x6b\x93\x22\xcf\xd4\xaa\x4e\x2c\xa6\x4c\x28\xc1\xae\xe9\xe8\xe4\xe8\xe2\xe8\xe0\xb8\x99\x9a\x9c\xff\x89\x3e\xb3\xca\xc8\x8b\xa7\xa8\xe4\xfa\x15\x17\xfa\xe1\xe8\xe4\xe0\xf8\xf8\xef\x4d\xcf\xfc\xc9\x6d\x39\x28\xef\x76\x12\x5f\x4e\xd7\xa6\xaa\x6e\x01\x02\x7b\xc2\x12\xeb\xc0\x02\xc0\x4a\x48\x4e\x4c\x05\x3d\x84\xec\xe6\x74\xf2\x21\x9b\x15\xa4\x46\x34\xc0\x2a\x5c\xbf\x88\x71\xfd\xe0\xec\xa2\xed\xc2\x9c\x89\xfb\x1c\x39\xa2\xad\x16\x4d\xaa\x8c\xb9\x13\xd5\x32\xc6\x47\xe8\xb0\x21\x2e\x91\x63\x42\x88\x90\x6a\x2c\x10\x03\xa2\xde\xdb\xb0\x47\x27\xac\x61\xdc\x34\xa9\x2a\xaa\x80\x0e\x4b\x3b\x0a\x2d\xcc\xee\x5b\x0e\x48\x05\x6d\x0a\xaf\x01\x39\xda\x08\x6a\x50\x2a\x25\x3a\x49\xb6\x89\x51\xf9\x77\xea\x58\x36\x87\xdf\x07\x1e\xd5\x0e\xc1\x64\xd1\x8b\x74\x59\x51\x49\x22\x86\x68\xfa\xc0\x5c\xb9\x76\x28\x98\x04\x8f\x69\xe7\x2c\x54\xbe\x93\x59\x41\x56\x7d\x07\xb5\x4c\xaa\x43\xa2\xa0\x0c\x15\x1e\x61\x6a\xd4\xcb\xe9\x9b\x37\xcf\x1a\xb4\xd5\x4a\x8a\x47\xfc\x0a\xdc\x8d\xe4\xaf\x97\xaa\xda\x02\x7b\xa1\x5e\x1a\x96\xc2\x5c\xa8\xc0\x26\xb9\x0a\x6c\x92\xe1\xce\xeb\xac\x0c\x62\x91\x79\xab\x94\x0f\x32\x97\x93\x07\x84\xb6\x80\x3c\x71\x3e\x21\xa3\xe2\x39\xc6\x00\x4e\xc7\xa6\x73\x83\xad\x92\x54\xef\x6f\xd5\xea\x49\x18\xab\x27\x43\x5d\xaf\x34\x43\x0a\xe1\xca\x88\xf7\xeb\x24\x63\x60\xa3\x24\x96\xc9\x41\x8a\x3e\xd6\x19\x29\x39\xb9\x07\x37\xb1\x50\x8a\x67\x8f\xdb\x50\x53\x6f\x85\x23\xde\x60\x48\x49\x32\x9c\x8a\x6b\xe0\xa3\x37\xd0\x7d\xba\x57\x61\x8d\xa1\xd9\x8b\x08\x3b\x17\xb1\x47\xfc\xae\xfe\xc3\xf6\x56\x0e\xc0\x65\x4b\xe2\x97\x95\x19\x00\xf2\x5a\xa9\x4a\xea\xc0\xbd\x32\x9c\x1b\x54\xae\x73\x89\xd0\xcc\x69\xae\x3b\x08\xa9\xea\x4a\xd5\xb8\x1c\xc6\x54\x5f\x4a\xb0\xfa\x92\xa2\x8b\xff\xbe\x60\xa5\x2f\xf0\xbe\xc5\x6b\x49\xea\x88\xb1\xcb\xbd\x0d\xe9\xe5\x3a\xc0\x7a\x12\x2c\x95\xc2\x86\xb2\xf7\xef\x82\xaa\x0d\x01\xc9\x50\x2d\xb6\xd3\xd7\x10\x9f\x4d\xf4\x63\xb2\xde\x2a\x96\x71\x2a\x2e\x1d\x62\xdd\x95\x0f\xdb\xad\x7f\xb7\xc2\xec\x51\xde\x17\x3a\xb8\x15\xb9\xdb\x2a\x74\xc6\x27\x0d\x44\x92\xde\xc9\xf4\x07\x9d\x53\x2a\xc9\xcd\xd5\xf4\x64\x43\x49\x8a\x32\xc8\x91\xb7\x19\xa8\x94\x01\xdf\xea\x88\x85\x8f\xba\x0b\x35\xcf\xc3\x14\x9d\xb9\xdb\x60\xa7\xe9\x46\xdd\x93\x84\xa5\x0d\xeb\x6a\xae\x06\x11\x0b\xfb\x24\xa9\xf2\x50\x98\xe0\x51\x0e\xa6\x7a\x69\x6c\x06\x72\x69\x67\x5f\xf4\x3a\x3d\x38\xe2\xf0\x9e\x27\x1c\x47\x3a\x9a\xa2\x58\xea\x88\x4b\x9f\xb0\xca\x47\x74\xb2\x76\x22\xf1\xbc\x1b\xc7\x5e\x10\x41\x1d\x52\x50\x89\x50\x74\x21\x98\x50\xf9\xe6\x4e\xa5\x35\x3b\x2e\x4b\xfa\xc1\x06\x35\x15\xad\x49\x28\x1b\x77\x50\x55\xd6\xb4\x11\x2e\x03\x05\x7a\xd2\x27\xd7\x2e\x52\x5d\xb4\x63\x2c\xda\x74\xfc\xf8\xd8\x1c\x41\x4c\xe9\xdd\xe6\xce\xa7\x9d\x9d\x68\x92\x9f\xa2\x7a\xac\xaa\xd9\x4a\xfa\xce\xef\x9e\x37\x63\x72\xb7\x35\x0d\x28\x49\xc8\x86\x9a\x15\x05\x9d\xb2\x34\x91\x67\x34\x5c\x35\xf4\x60\x37\x52\x6b\x45\x03\x0f\x96\x08\x38\x04\xd9\x3c\xc0\xe2\xd0\x7d\xf8\xc1\xa3\xea\x44\x46\xf5\x37\x6f\x07\x6b\xc6\xe6\x6d\x73\xbf\xfa\xaa\x17\x03\x06\x72\xb7\xf5\xf5\x47\x2c\xa2\x4a\xfe\xec\x66\x8c\x9b\x20\x9b\x4a\xae\x72\xb6\x7e\x94\xfb\x9c\x1c\xfe\xfd\xb7\x7b\xfc\xc9\xea\xb7\xbe\x39\x75\x93\x4e\x9a\x91\x6c\x82\x20\x1f\xdd\x26\x8f\x8f\xdd\x6d\x8c\x0d\xb5\x5e\x35\xbf\x3d\xff\xfb\xc9\xc5\xc1\xff\xd9\x3a\x3c\x3b\x3b\x3d\xeb\x6d\xfd\x0f\x3a\xd9\xe2\xe4\x1f\x0b\xca\x49\xb1\x95\x6d\x15\x94\x4d\x67\x64\xcb\x8c\xa0\x99\x36\xe8\x66\x91\xee\xa9\xe1\x18\x3a\xc3\x14\xd1\x32\x0e\x43\x92\xa2\x6e\x2c\xe4\x3d\x8d\xc4\x70\x64\xa9\x2c\x09\xcc\xa1\xd7\x43\xab\x15\x2b\xcd\xbd\xc0\xf7\xcd\x05\xf0\x87\x3f\x6e\x5d\x54\x7b\xff\x25\x6b\x53\x3f\xe1\xd8\xf2\xd4\xac\xa4\xbb\x36\x77\x54\x5c\xff\xb8\x95\x91\xad\xfd\x15\xeb\xa2\xd4\xfe\xfe\xfa\x44\xd3\x25\x44\x67\x8c\xba\xdf\x03\x3d\x24\x1b\xc5\x56\x28\x4f\x1f\xf2\x4d\xac\x17\x44\xab\xd5\xfc\x42\xee\x21\x27\xed\xa0\x33\x94\x38\x20\x57\x93\x93\xec\xa3\x9c\x5f\x2f\xaf\x15\x13\x82\x81\x4e\xee\xae\x45\xc4\xf4\x21\x77\xdd\xf0\xc1\x59\x2f\x22\x14\xc9\x3d\x99\x52\x1e\xd1\x45\x77\xe5\xeb\x52\xce\x74\x74\x71\x78\x06\xf5\xac\xc7\xbe\x0d\xb2\x9a\x1b\x51\x8a\x2d\xa3\x7d\xea\x93\xe6\xdb\xb3\xc3\x83\x7f\x77\x8b\xd8\x2a\xb1\x7d\xd9\x83\x71\x29\x07\xbf\xbc\x22\xb1\x29\xdb\xb0\x8d\x1a\x57\xff\x44\x57\x2c\xe7\x53\x5b\xd9\x08\x85\x5a\xad\xd8\x18\x82\xbd\xa6\x6c\x97\x98\x0c\x9e\x3f\x0c\x8b\xda\x36\xbf\xef\x64\x18\xaf\x02\x2f\xae\xaa\xe3\x44\x92\xbb\x9e\x0b\x72\xa4\x4d\x27\x27\x75\x73\x1b\xd2\xd9\xe5\x03\x36\x4c\x5b\xad\xe6\x74\x41\xc7\xf2\x15\x7f\xca\xe8\xc7\x39\x51\x9e\x18\x22\xfb\x42\xb6\xb2\xad\xff\xdb\xdc\xc9\x07\x9d\xe1\x4e\xf3\xff\x6e\xe5\x73\x39\x48\x98\x04\xc0\x6a\x06\xae\x12\xab\xce\xf2\xb3\xf8\xe9\x9d\x87\x61\xcd\x94\xe1\x7f\x04\x8b\x21\x5a\x89\x65\xe6\xe7\x3b\x69\xee\x4a\x6c\xb4\xab\xf5\x15\xbb\xb7\x19\xaf\xb9\x02\xb4\x8c\xa8\x21\xfa\x89\x1f\xb3\x96\x06\xf2\xa2\x0c\x3a\xad\x9a\x49\xd2\x8a\xe8\x38\xc9\x57\x0f\xdb\x6f\x20\xed\xd5\x20\x6a\x3b\x95\xd2\x33\xa7\x0e\x2c\x8d\x69\xc0\x36\x36\x76\x09\x83\xce\xf0\xf1\x71\x9b\xc6\xf5\xb7\xb0\x1b\x20\x82\x37\x9c\x15\x51\x13\x27\xd6\x74\xaf\x41\xab\x29\x97\x72\x93\x70\x49\xa0\xed\x8e\xca\xeb\x6c\x13\x67\xac\x1a\xa4\xf1\x5b\x13\xad\x96\x5c\xe0\x86\x33\x60\x13\x48\x7f\x8b\xb6\x5a\xbc\x66\xb0\x54\xeb\x00\x4c\x62\xca\xed\x8e\x49\x0a\xaf\x77\xab\x1c\xb4\x86\x39\xbe\x62\xec\x0c\xc6\x6e\x1d\xbe\x90\x24\x59\xb5\x10\xb7\xe8\x11\xa4\x13\x1e\x48\x86\x47\x33\x4b\xea\x13\x08\xad\xf5\x47\x1d\xb2\x49\xc5\xee\x10\xc8\x11\xd1\x15\x98\x49\xea\xd7\xcb\x49\xfc\x0e\x95\x01\xc8\x2f\x51\x24\x9b\xf1\x21\x0a\x53\x1e\xeb\x04\x9b\xd5\xdc\xc8\x57\x28\x96\x43\x79\x8a\x62\xd9\x96\x3f\xa2\x68\x62\xe6\x0b\x14\xe6\x6f\xfe\x82\x22\x49\x9e\x0f\x50\x2c\x1b\xf4\x19\xaa\x66\x8d\x8e\x49\x0c\xe8\x18\xd6\xeb\x86\x88\x0c\x24\xfb\x2a\x2c\xbc\x93\x42\x54\x04\x2c\x96\x61\x44\xe9\xb8\x97\x21\x59\xad\xc7\x90\x92\x6d\xf6\xaa\xfe\x2c\x05\x16\x7d\xb0\x96\x75\xe9\x7c\xc4\xd2\x1e\x33\x00\x90\x3f\x3e\x26\x39\xfe\xdf\xe7\xa7\x27\x8a\xf6\x4f\x68\x9a\x22\x89\xe6\x4e\x12\x82\x54\x27\x4a\x6c\x9f\x23\xc3\x00\xf6\x8a\x65\xba\x84\xc0\xa7\x2a\x3d\x76\xa8\xab\x92\xa8\x96\x56\x68\x75\x94\x63\x9d\x36\xf5\x97\xfd\x3e\xdd\xdd\xef\x75\x52\x94\xe1\xfd\xd7\xd9\x1b\x0a\xc2\xe0\x7c\x90\xed\xee\x0f\x1d\x2a\x3e\x53\xd9\x54\x21\xff\x58\xa3\xc6\xee\xb7\xa9\x53\xbd\x6e\xa9\x2d\xd9\xfa\x48\x44\x36\xce\x44\xb6\x35\x81\x2c\x7f\x2a\xe3\x82\x93\xd1\xdb\x93\xec\xb8\x79\xbf\x63\xae\x40\xa4\x51\x92\x26\x09\xdb\xc1\xa7\x60\x0e\xd4\xfe\x42\xee\x8b\x44\xa4\xed\x9b\x6c\x1e\xf1\xec\x6f\x6e\x35\x77\xc8\x4e\x13\x37\x77\x94\xef\xdf\x80\x0c\x97\x69\xfb\x3f\x73\xca\x92\x66\x33\x4d\x51\x33\x69\xee\xb0\x9d\x66\xda\x94\xfd\x07\x89\xc8\xbf\xa2\x68\xc2\xf2\xdd\x6e\x90\x9e\xdd\xe4\x43\xf7\xd2\xb2\xaf\xca\xc1\x3e\x0c\x1c\xc8\xbc\x64\xe9\x06\xc8\x31\x69\x97\xa9\xc6\xcf\x16\x4c\xd0\x1b\x27\xf7\xf8\xdf\x38\x15\xe4\x94\xcd\xee\xcb\x57\xbf\x91\x6c\x6e\xd3\x8a\x1b\xdf\x32\x79\xea\xca\xdf\xba\x19\xf7\x95\x6d\xc8\x7b\x79\x78\x7c\x7c\xf9\xef\x27\xa7\x7f\x3b\xb9\x74\x54\x09\x97\x9f\x4e\xcf\x8f\x2e\x8e\x4e\x4f\xdc\xf4\xce\x0c\x3f\x2c\x11\x37\x9b\x31\xe1\x84\xfc\x49\x20\xa2\x34\xad\x91\xb3\xd8\x94\x2f\x12\x8d\x16\x78\xa0\x63\x28\x80\xb1\x44\x81\x07\x5c\x3f\x0b\x15\x92\xc8\x7c\x56\xd2\x9c\xf2\x59\x4b\x08\xc7\xf6\x85\x32\x8f\xaa\x0b\x34\x1e\xb1\x14\x74\x8c\x09\xf4\x58\xac\xa5\x37\x29\xed\xf7\x7e\xd9\xed\xf6\x35\x0b\x6f\x4a\x81\x20\x99\xa4\x61\xa2\x63\xc7\x16\x24\x6a\xf5\x29\x0f\xb1\xb6\x14\xb1\x9e\x3a\x75\x16\x86\xd6\xb4\xd0\xa8\xa5\x5d\xad\x55\xb9\x5c\x95\x14\x26\x59\xa5\x77\x3a\x49\xc0\x77\xc8\x74\x69\x35\x65\xce\xf4\xd5\xd2\xaf\x99\xbd\x2e\x54\x33\xf9\xeb\x95\xb9\x52\xf4\xe6\xd5\xf7\x90\x78\x7b\xaa\x43\xa4\xa5\xde\xce\x97\x3d\x57\xc2\x44\x95\x96\x46\x91\x01\x00\x2a\x55\xcb\x48\x27\x60\xa5\xc3\xe2\x9b\xee\xc4\x2a\x07\x1b\xc8\xc8\xa6\x8b\xca\xbc\x15\xd4\xd5\xcd\x5b\xc3\xe4\x9a\x95\x35\xa5\x6a\x96\x56\xe4\x9f\xf2\x3c\x22\x19\x7b\xd0\x43\xf3\xc6\x89\xd4\x36\xb9\x5b\xa6\x05\xa1\xfa\x9d\x7e\x40\xba\x53\x6f\x04\x46\x52\x9a\xaf\x95\x90\xda\xd4\x4f\x04\x79\x87\x59\xd8\x71\xb8\x67\x5a\x98\x91\x78\x27\x59\xd8\xb1\xf8\x07\xda\xdb\x74\x0f\xa9\x97\x02\x6a\xe3\xc8\x65\x0e\xbd\xb0\x53\x88\x4b\x9b\xcf\x57\x1b\x0a\xeb\x41\xcb\xbb\x21\x0c\x0e\x76\x52\xdd\x60\xb7\xa6\xee\x36\x56\xf3\x7c\x35\x3e\x30\x29\xfc\xa7\x44\x58\xfb\x31\xea\x20\x09\x1e\x41\x12\xdc\x37\x43\xe6\x03\x31\x44\xd4\xe2\x0a\xdb\xa7\x63\x7f\x4c\xab\xe9\xc4\x2a\x03\xaa\xa0\x95\xea\x74\x8c\x3f\x7c\xcd\x29\x37\x73\x31\x7b\x38\x20\xd6\x4e\x91\x63\x08\x79\x93\xf8\x98\x60\x40\x86\x91\x3a\x41\x6a\x28\xfd\x03\xac\xee\x79\x75\x79\xeb\x8e\xbd\xee\xd8\x21\xa1\x82\x3d\x36\x29\x18\xb2\xb8\xe6\x86\x27\x8e\xde\x06\x84\xb2\x4f\xd0\xc3\x94\x31\x29\xf2\xf2\x90\x70\x44\x5b\xad\x24\xb7\xa7\x84\xda\x53\x92\x9b\x23\x42\xcd\x11\xc9\xed\xf9\xa0\xf6\x7c\xe4\xe5\xe1\xc8\x37\x38\x19\xb9\x3d\x16\xd4\xfc\x4a\x51\x5e\x6a\x86\x84\xa3\x19\xe2\x10\x68\xf5\x9b\x41\x9e\x7f\xf3\x31\x8b\xd6\xfc\xaf\x3f\x2c\xfc\x1b\x0f\x0b\xff\x6f\x76\x58\xc2\xe5\xfd\x9e\xc3\xc2\x97\x09\x4d\x51\x11\x3f\x2d\x56\xc2\xb3\xe9\x51\x89\xab\xb8\xcb\x3c\x69\xa0\x5a\x07\x3a\x8f\x79\x57\xbb\x7a\x15\x87\x62\x26\xa1\x98\x6d\x4e\x13\xa8\x39\xba\x8d\xaf\x23\xfd\xbc\xb2\xce\x45\xcd\x9e\xb6\xce\xd5\xc6\x00\x7a\x82\x56\xaa\x06\x0c\x6e\x75\xb5\x40\x03\xb2\xdb\x0d\x6a\xae\x36\x5e\x50\xd5\xcc\xd8\x97\x88\x2d\x93\x2c\x45\x8b\xba\xab\x5e\x5f\xf4\xd7\xc0\x53\x68\x9b\x89\xc9\xa4\x20\x02\x77\xdc\x3d\xa8\x49\xd2\x4f\xff\xac\xcd\xce\xdf\xdd\x49\x92\x97\x2f\x5e\xb5\x6c\xf3\x72\xc6\x57\xf7\xd9\x78\xac\xfd\x91\x54\x37\x69\xfa\xcb\x2f\xaf\x52\x1b\x9c\x88\x16\x5a\xf9\x5e\xdb\x6c\x67\xef\xd9\xda\x36\x6d\x73\x72\xbd\xea\x5a\xda\x7b\xfe\x7c\xf3\x86\xf2\x79\x77\xa5\xa9\x52\x7d\x1b\x3b\x5d\xb7\x95\xbd\x6f\x6d\x65\xcf\x6d\x65\xff\x5b\x5b\xd9\x4f\x6d\x1c\xa7\x86\x85\x82\x99\x1f\x5e\xe5\x91\xbc\x79\xb3\xb7\x54\xf1\x08\xba\x9d\x67\xaf\x9e\xbf\x7c\x81\x26\xf5\xe0\x63\x31\xb7\x36\x34\x29\x13\x4c\x96\x4c\x9c\x81\x28\x97\x30\x34\x4f\xa3\x6c\x9e\x8d\xa8\xb8\xc7\x23\x04\x61\x23\x88\x4e\xb9\x02\xe2\x19\x60\x0e\xc1\x08\x53\x3b\x60\x94\xc0\x2a\x2f\x85\xcf\x94\x89\xfd\x3d\xeb\x5b\x50\xf2\x93\x26\x55\xa9\xee\xb8\x5c\x16\x2d\x13\x71\xc7\xc1\x83\x71\x74\x8c\x47\x72\xb4\x9b\x91\xd7\xcd\x60\x18\xcd\x80\x3a\x0f\xf3\x1c\x29\x7c\x40\xff\x24\xef\xae\x49\x69\xca\x2c\x3b\x18\xb8\xdb\xb3\x33\xc4\x24\x60\x7a\x4c\x9d\x8a\x4e\xb7\x21\xd9\x3d\x6f\xe4\xad\x56\x42\xf0\x4d\x39\x76\xd4\x71\x17\x21\x5d\xb1\x76\x86\x6b\xdc\x19\x39\xa5\xda\x05\x11\x90\x65\x29\xdc\xa7\xe0\xc5\xee\x6e\x85\x66\x53\x90\x57\x8b\xa2\x60\xde\x21\xe9\x59\x44\xaa\x59\x3e\x44\xd7\x08\x93\x84\xa9\x74\xa8\x15\x6b\x34\xa1\x9c\x26\x81\x93\x2b\x17\x00\x75\x90\x76\xca\x27\xee\xb5\xeb\x71\xdb\xea\xd5\x0e\xde\x47\xc1\x3e\xb8\x59\x51\x63\x03\x84\x2e\x07\x64\xa7\x3b\xc4\xb3\x44\xa0\x30\x50\x5c\x11\x24\xc3\xf5\x10\x36\x8c\xae\xb2\x86\x2b\x57\x50\x77\x57\x65\x46\x22\xfc\x79\xb8\x24\x04\xcd\x92\x0e\xda\x4f\xcd\x6a\x88\x0d\x56\x43\x54\xa7\x93\x4f\xaa\x13\xaa\x88\x4a\x46\xf9\x9c\x84\x85\xe3\x53\xd9\xe9\x0e\x7f\xf9\x65\x2f\x58\x74\x4e\x6a\x6f\xf5\xb2\x5a\x23\xdc\x00\x7f\x7b\xcc\xf1\x7c\x14\x6f\xde\xec\x77\x96\x89\x40\x95\x94\x33\x7e\x5e\xdc\x95\x07\xd7\x5d\x31\x73\x68\x1b\xce\x61\x1e\xe2\xbd\xee\xb3\x97\xcf\x5e\xed\xbf\x78\xa6\x1d\x0e\x5c\x84\xa8\x36\x60\x20\x90\x62\x4e\xdc\x31\x64\x62\xe4\x0e\xa2\x6a\xd4\x61\xb4\x29\xb8\xd2\x2a\xd0\xc2\x04\x77\x5e\x93\x32\xca\x16\x01\x5a\x38\x11\x98\x4a\xda\x4e\xc5\x47\x03\x9d\x91\xa6\x4c\xcc\xe5\xc0\x10\x4f\x2a\x99\x89\xb3\xb9\x58\xf0\x1f\x67\x45\xe2\x2c\x96\xbe\x23\xc2\xc9\xda\x75\xf5\xb1\x17\x49\xf5\x5d\x60\x64\xef\xc6\xd4\xab\x04\x4e\x04\xfb\xde\x2b\x41\x00\xa9\x1a\xa5\x39\xd8\x75\xad\x78\xf2\xbb\x4d\x63\xe8\xf7\x99\xc6\x4c\x4c\x00\x1f\x2b\x8f\x75\x50\xb4\x56\xda\x5c\xe6\x4a\x46\x2c\xcb\x2f\xca\xc5\x89\xde\x3a\x79\x28\x52\xf7\x0f\x9a\x6e\xca\xdc\x89\xc4\xeb\x40\x2f\xd6\x7c\x03\x9b\xb9\xef\x1a\xed\xf5\xfd\xd8\x0f\x6e\xef\xa9\xdf\x60\x55\x5c\x01\x1d\x24\x17\x94\x7f\xf3\x84\x23\x96\xaa\xb4\x8a\x3f\x76\xca\xe3\x7a\x7e\xc7\xa1\x7f\xbf\xdf\xa4\xb7\xca\xc7\x2c\x93\x6b\x87\x0a\xbb\x31\x6a\x1c\x3a\x49\x2c\x00\x69\x6d\x67\x6a\xd7\x4f\xe9\x11\xc1\x13\x59\x9e\xfa\x32\x07\xa3\x7b\x9d\xb3\xf4\xb5\x78\xc3\x54\xbe\x4a\x89\x92\xc8\x40\x94\xac\xe7\x72\xbd\xd4\xbf\x83\xa2\xea\x02\x8a\x22\x8a\x85\x1c\xb9\x9a\x87\x0c\x85\x7a\x09\xb9\x34\xa0\xb0\x98\xa0\x88\x32\xe3\x1a\x55\x54\x1e\x73\x54\xea\x43\xc6\x56\x13\x88\x17\x81\x2e\x86\x1b\x23\x94\x6f\xd5\xc6\xc8\xa5\x0e\xf4\x31\xb4\xd0\xd9\xb2\xc7\x98\xb4\xad\x95\xcb\xbb\x6c\x74\x4d\xb0\x24\x36\xe6\x98\xb4\xe1\x69\x5c\x3a\x5e\x93\xf6\xe7\xf9\x38\x03\xd4\x73\x91\x4d\x6d\x01\xf5\x7b\x94\xdf\x5c\x51\x46\xca\x5f\x4a\x1b\x66\x1f\x2f\xb2\xe9\x14\x3a\x7b\x4f\xb9\xb8\x2f\xdb\xb8\x5a\xdc\xc8\xbe\x68\x01\xeb\xa8\xde\xe9\x07\xd9\xc3\xe7\xb3\xb3\xc3\x93\x8b\xcb\x8b\x83\x5f\x31\x69\xff\x7e\x7a\x7c\x70\x71\x74\x7c\xa8\x1f\xdf\x9d\x9e\x9c\x5f\x1c\xd8\xaf\x17\xd9\x54\x29\xbb\x38\x4c\xe9\x96\x16\x34\x67\xaa\x41\x53\x11\x93\xb6\xf6\xa5\x72\xaa\xcb\x97\xda\x62\xe7\xfc\x9e\x8d\xae\x79\xce\xe8\x9f\xba\x11\x3d\x75\x9b\x58\xc3\x14\xa5\x39\x3b\xe0\x82\x4e\xb2\x11\xe8\x96\x8e\x69\x21\x8e\x04\xb9\x31\xaa\xa9\x72\xcd\x1c\xad\x12\xc7\xdd\x15\x0a\xa4\x18\x96\x03\x6f\xfe\x1a\x67\x14\x38\xde\xb7\xd9\x6c\x41\x92\x14\x63\xac\x8f\x78\x83\xb6\xe9\x18\x1b\x95\x3c\x84\x2e\x1f\x0c\x51\xb1\x16\xd5\xc9\xee\x0c\xce\xa0\x8c\x11\x1e\x37\x72\x86\xfe\xaa\xb4\x50\xd2\x41\xf9\xc0\xb6\x33\x54\x78\x42\xb5\x13\x20\xb1\x15\x33\x4a\x3a\x28\xab\x69\x44\x85\x92\xf6\x18\xb9\x45\x49\x23\x19\x63\x9b\x86\x0e\xc7\x1e\x59\x2c\x62\x56\x6a\x69\x22\xca\xc4\x33\x51\x97\x03\x4c\x84\x32\xf9\xa0\x63\x2c\x96\x61\xc3\xb6\x7c\x67\x4d\x7b\xc0\xb7\x2c\x4d\x0c\x56\xb0\x8b\x4f\x94\xbd\x43\x5a\x19\xad\xad\x74\x92\x9d\xac\x69\xf6\x24\x3b\x71\x1a\x1e\xe9\x86\xbb\xeb\x1a\xbe\x5e\xd3\xac\xc0\x18\x5f\xeb\x46\x27\xba\xd1\x3d\x6d\x98\x71\x8d\x39\xbc\x9f\xaf\x13\x99\x7d\x23\x8d\x71\x8d\xf8\x77\x08\xa6\x79\x9b\xeb\xf3\x8e\x19\xe2\x2b\x05\x6a\x4a\xba\xf3\xc3\x08\xbe\x6b\xf7\xfe\x2e\x34\xcc\x8e\xc1\xba\x81\x29\x5f\x1c\xb6\xfe\xfc\x6c\x69\xb9\xa7\x9a\x82\x5f\x65\x4c\x3d\x3f\x5f\xab\xac\xd2\xd3\xdd\xd9\xb9\x06\xb9\x17\x75\xce\xc6\xd8\x49\xa2\x4b\xfc\xe4\xb9\x1d\x93\x96\x76\xd6\xf0\x93\xe9\x92\x41\x67\x18\x64\xcd\xbd\xd7\x6b\xa5\xec\x93\x20\xfe\x6b\x98\xdc\xf6\xd6\x16\x49\x97\xcb\x45\x32\x57\xb0\x73\xf3\x4f\x12\xab\xce\xb2\x42\x00\xaf\x42\xc6\xca\x45\x41\xbd\xfa\x1d\x16\x59\xbd\xd8\x50\xb6\x5a\xd9\x17\x87\x75\x76\x7a\x69\xd8\x17\xd0\x87\x35\xf7\xde\xc6\xf8\xda\xb8\x50\xba\x83\xba\x46\x7e\x85\xd2\xf1\x71\x21\x48\x92\xa6\xc1\x67\x7f\xe3\x29\xab\x22\x4b\x9b\x3a\xcb\x9f\xb8\x86\x00\x74\x5f\xb7\xf0\xcc\x0b\x57\xfe\x8d\x87\x8c\xb6\x27\x94\x17\x02\x33\x44\xdb\x05\x19\xe5\x6c\x8c\xb9\x1b\xc9\x77\x83\xc3\x16\x66\xfd\xaf\x1c\x18\xf0\xf7\xf1\x96\x41\xaf\x56\xe4\xd0\xa8\x88\x50\x99\xf6\x39\x80\xb1\x19\x34\x6f\x58\x3f\x39\x48\xf3\x4e\xc9\x87\x6f\xd2\xc6\x22\xb9\x57\x70\x7a\x5b\xbb\x5c\x26\x7c\xc2\xf7\x60\x24\x91\x4d\x8b\x27\x63\x23\xb2\x7a\x79\x36\x58\x1c\xcb\x40\x1b\xd9\x01\x78\x76\xef\x76\x1d\xce\x99\xb9\x9c\xb3\xc0\x6c\x40\x86\x76\xe1\x38\x2e\x97\x15\xf1\x72\x3a\xe5\xe2\xdd\xaa\xc5\x9b\xae\x59\xbc\xef\x83\x34\x91\x4d\x01\xce\x24\xa4\x03\xd1\x49\xbe\x01\xd8\xbe\x7b\x2d\xa3\x80\xe6\x0c\xc9\x88\x47\xa7\x2e\x8c\x39\x4d\x2e\xe6\x15\x5a\x47\xe2\x0a\x53\xcb\xa0\x0c\x39\x59\x82\xc2\xc6\x0d\xf6\x28\xf1\x80\x07\xc3\x53\xb5\x0d\x57\xe8\x72\xb5\x4d\x92\x6c\xf1\xcc\x5e\x8e\xd6\x91\xcb\x47\x94\x1b\xd1\x7a\xae\x2f\x5b\x36\x45\x02\x57\xda\x37\x40\x57\xc1\x90\x3a\x3c\x90\x68\xb5\x3c\x0a\xeb\xf1\x31\x09\x6b\x04\x28\x12\x55\xe7\x60\x69\x39\xc9\x56\x86\x09\x46\x56\x61\x4c\x6f\x15\x34\x47\x7c\xf7\x17\x63\x4c\x80\x63\x58\x2e\xda\xb6\x6c\x1c\x40\xf6\x8d\xe2\x54\xd6\x01\xf5\xfa\xb3\x6e\x94\xa6\xba\xf1\xd2\xd9\x12\xde\xab\x6e\xd2\x84\xf8\x68\xf0\x32\x45\x87\x6b\xd4\x64\xc1\x55\xba\x0a\x98\xc0\x20\x35\x9b\xd1\x3f\xc9\x18\x6f\x77\x51\x09\xd4\x0a\x50\xbc\xf1\x61\x12\xd5\x22\x10\xf2\xa5\x8e\x2e\x72\x5a\xef\xfb\x23\xeb\x05\xdf\xc3\x34\x42\x9c\xc4\x00\x82\x4e\x92\xed\xb0\xe1\x34\xde\x61\xe2\x09\xd1\xed\x1c\x6a\x60\x1f\xa6\x0b\x71\xb1\x5c\x20\x37\x4d\x7f\x6d\x44\x96\xd0\xec\x4a\xc3\x09\xd7\x63\xa7\x07\xc6\xba\xa6\x80\x01\x29\x8c\x31\xef\x7f\xed\x25\xc1\x1e\xd1\x8a\xbc\xa8\x9c\xc5\x3a\x90\x71\xa7\xa3\x5a\xab\x74\x1b\x3b\x86\x0e\xde\x8b\x80\x41\x07\x04\xe9\xf2\x8c\x7d\xc5\xcd\x6c\x7c\xb5\x7f\xf5\xf2\x15\xd9\xdd\x1f\xef\xed\xed\x3e\x23\xcf\xae\x76\x5f\xbd\x7c\x99\xed\xbe\xd8\xef\xbe\x1c\xed\x8d\x9e\x8f\xba\xcf\x9e\x37\xd1\xf9\x1a\x88\x54\x8c\x29\x29\xe1\x6b\x33\xbc\xe5\x6f\x2d\x23\x5c\x8f\xeb\xf4\x2f\x38\xfb\x48\xef\xa8\x15\x00\x7c\xc8\x79\xc2\x53\x17\x25\x70\x22\x32\xca\xd4\x49\x91\x84\x14\x61\xea\xd7\x17\x72\x8f\xb9\xfc\x8b\xa8\xf2\xe1\x51\xba\x3d\xda\xbe\x21\x37\x39\x66\xf0\x2f\x68\x76\x63\xdc\x11\xb9\x88\x34\x08\x98\xb1\x68\x74\x61\x3a\xd6\x35\x7e\xf7\xe6\x92\x94\x32\x07\x9b\xcf\x2d\xa8\xf0\xd1\x1d\xa4\x2a\x2f\xc7\x0d\x0c\xbc\x67\xcc\x70\x9d\x2f\x66\xe3\x33\x72\x93\xdf\x46\xf6\x6a\xdb\x1b\x9c\x5f\x93\x93\x82\x54\x83\x32\xb8\x8b\xaa\x69\x3f\x58\x57\x40\x76\x0c\xe4\x33\x27\xf9\x98\xa4\xe8\x60\x1d\x8c\x19\x49\x4f\x89\xdd\x6e\xb2\xb9\x4a\xf2\x33\xa6\x23\x91\xda\x3b\x89\x16\xca\xe7\x55\xb6\xce\xbe\x90\xb1\xec\x23\x8a\xfa\xec\x66\x46\x31\x1f\x2d\x20\x0d\x55\x44\xa8\xe2\x8f\xc7\x5f\x6d\xe3\xe4\x95\xa6\xa6\x81\x10\xf7\x55\x52\xab\x9a\xb3\xaf\x25\x52\x66\x28\x58\x67\x80\xf1\x7a\xeb\xd7\xf4\xd6\xf3\x4a\xa1\xc8\x8a\x91\x4a\x66\xd1\x08\x41\xb6\xbd\x6d\x16\x36\xa6\xd7\xab\x95\x76\xc5\xca\xdf\x65\xc5\xb9\xdc\xea\x1a\xd5\x99\xaa\x62\x26\x6b\xf9\x79\xd1\x6a\x09\x00\x91\xc0\xd4\x78\x55\xce\x39\xd9\x96\x25\x70\xe4\x5e\x07\x7b\x82\x28\x16\x03\x22\x0f\xf0\x10\xe0\xe2\x14\x0c\xd1\x4a\x6e\x55\x35\x0e\x09\x9b\x42\x44\x5d\x10\x2e\xde\x92\x49\xce\xe3\x4e\x02\xb6\x77\xee\xf4\x4e\x83\xde\x73\x49\xc7\xbb\xbd\x53\xa7\xf7\xdc\x3b\xe9\xdc\xeb\x32\xc9\x91\x48\x51\x1e\x68\x9b\xbd\x73\x19\x8e\x45\x0e\xa0\x41\xbc\x36\x59\x9b\xc3\x61\x06\x63\x64\xbf\xfd\x6a\xda\x53\x1e\x9c\x7b\x4b\x72\xd0\x42\x38\xed\x8c\xc9\x8c\x08\xe2\xec\x3d\x4c\x2f\x30\x56\x26\x5f\xe1\x64\xd7\x02\x0d\xb4\x69\x4a\x25\x95\xcc\xb7\x24\x1b\xd7\x06\x0d\x90\x35\x65\x81\xc4\x58\x57\x7e\x79\x0a\xf2\xd0\x6a\x3e\x30\xe8\xb3\x91\xfc\x32\x2b\x34\x8e\xca\x57\x99\x17\x46\xd1\xbb\xad\x6d\x4d\x24\x70\x2d\x6a\x10\x39\x7f\x7c\xf4\xb0\x03\x83\x24\x86\x2e\x1d\x0e\x31\x43\xe4\x8f\x9e\x01\x78\x88\x93\x22\x27\xf8\xda\x93\x9d\x92\x01\x69\xeb\xd0\xd3\x9d\x21\x6e\xaa\x9f\x4d\x24\x5f\x7f\xe2\x0b\x46\x70\x77\x88\x9b\xf0\x4b\xbd\x7c\x9f\x33\x82\xf7\x86\xb8\x29\x7f\x34\x97\x69\x72\xf5\xf8\x98\x5c\xe1\x87\xa5\x8e\xfd\xf4\x71\x8d\x61\x0d\xe0\x4c\x3e\x25\x42\x87\x24\xd3\xf3\x35\x3a\x6f\xf9\xc5\x28\xdf\xca\x65\x64\x21\x12\x2a\x27\xaf\x4d\x37\x54\x4e\x37\xcc\xcc\x56\xc6\x3c\x29\xee\x99\x67\x59\x61\xd4\x4d\x04\x5f\xe9\x15\x78\xfd\xda\xe4\x1f\xd0\x31\x86\xb7\xcc\x97\x9e\xde\x1f\xb9\xd0\x3a\xa4\xb6\x1b\x26\x78\xeb\x4a\x2d\x96\x5b\x0c\x5e\x84\xa5\xe4\xa2\xf5\x5c\x3c\x65\x8b\xcb\x2f\x49\xba\x0c\x50\xd5\xf8\x36\x63\x23\x72\x91\xff\x3b\x09\xa4\x3e\x7a\xec\x26\xa6\xa4\x9a\xbe\x41\x5c\x25\x14\x71\x2c\x5e\x6b\xb6\x8c\xb7\x5a\x40\x78\x6c\x63\x4c\x5e\xa7\x5c\xdf\x9d\x1d\x24\x57\xd3\x9e\x9c\x32\x59\x1b\x37\x7c\x6b\xb9\xb4\x4e\xa9\xb4\x7a\x3e\xc3\xf8\xe5\x1e\x5c\x97\x97\xc9\xda\x01\x13\x03\xcd\x65\xde\x32\x9e\xfa\xc6\xb8\x19\xb7\xab\xab\x08\x38\x98\x58\x95\x0d\x05\x17\x2b\x8c\x31\xed\xdb\x65\x3e\x03\x6c\x96\xf0\xb4\x07\xf1\x49\x12\x9a\x96\xdf\x3e\x4a\x8c\xc4\xf5\xf5\x27\x5f\x1c\x01\x82\x93\x24\x98\x81\x83\xea\xb4\x55\x83\x75\xb7\x49\x39\x31\xe6\x4d\xfc\x75\xc2\x30\x4b\x35\x39\x55\x06\x60\xd5\x4b\xed\xa0\x32\x66\xad\xb3\xe4\xc9\xd0\xc8\x38\x01\x1c\x69\xa8\x50\xa4\xa8\xc6\xc8\x96\x7c\x0c\xf1\xef\x86\x20\x53\x76\x08\xcc\x89\xec\x4b\xd2\xa6\x53\x22\x54\xcf\x69\x23\x77\x86\xce\xcc\xf5\xac\x3f\xf6\x13\x06\x37\x8b\xba\x72\xb8\xfe\xad\x5a\xd1\x23\xce\x15\xbd\x28\xfa\xb0\x43\x3d\xe5\x69\xaa\x5d\x3f\x1c\x90\x4f\x42\x6e\xa7\xdc\x94\x8d\x17\x5c\xcf\x83\xfb\xb3\xa6\x58\x84\xd7\x97\x04\x7d\xfd\x2e\xa1\x9a\x42\x57\xa3\x55\xc4\x39\xe4\x73\xb4\xa3\x0d\x3d\xa8\x0c\x48\xd6\x5d\x33\x76\x6b\xbd\x41\x6a\x6c\x85\x34\xfa\xa8\x4e\xb6\xd2\x66\xcd\x5d\xe1\x4e\xd5\x87\x34\xe7\x18\x31\x73\x8c\x14\x1e\xd2\xdc\x28\x6b\xc4\xc6\x49\xdc\xd3\x8e\xb8\x47\xca\x27\x69\x3f\x31\xd7\xbb\xfc\x2a\xda\xea\x0e\x4f\x60\x7d\xd2\xb4\xc7\x15\xfd\xbe\x6a\x62\x70\x8d\x54\xcd\xdc\x00\xc8\xc7\x0a\x15\x9a\x18\x31\x81\xae\xf5\x1c\x39\x9a\xd8\x53\x14\xd5\xd5\x1e\xa0\x98\x5a\xf7\x0b\xaa\xd1\x01\x7f\x44\x8e\x9e\xb8\x83\x4a\xf5\x31\x47\x8e\x56\xf9\x24\x3b\x41\xbe\xca\x99\x22\x4f\x1f\x5d\xa0\x40\x5b\x3d\x43\x81\x36\x7b\x84\x7c\x65\xf7\x04\x95\x6a\xf0\xa8\x42\x53\x32\x19\x18\xcf\x96\xc8\xd3\x9d\xc7\x8a\x9a\x62\x57\x5e\xae\xf2\xf4\xe1\x7a\x67\x47\xbe\xf6\xf4\xf1\x73\x14\x2a\xec\x2b\xa7\x49\x9b\x66\x95\xb9\x04\xe0\xba\x36\x7e\x09\xda\x16\xe3\x81\x4e\x92\x84\x83\x35\x86\x1c\x69\x0a\xa9\x76\xf4\x80\x46\x0d\xbe\x8d\xf1\xac\xd5\x52\x0e\xfc\x09\xb7\x77\xf2\x58\x1f\x6b\xcf\x82\x20\x7a\xb9\x21\x86\x07\x43\x65\x2c\x0b\xe7\xc4\x5e\x65\xaf\x55\xd7\x02\xf3\x48\xbf\x42\xf5\xcb\x8c\xe7\x9b\xbd\x53\x34\x34\x97\xe3\x60\xee\x38\xbe\x7f\x0d\x9e\x38\xff\xd2\xae\xe2\x06\x05\x46\x17\x53\x54\xb5\xcb\xb8\x44\xca\x62\xa3\x56\xcd\x72\x67\x69\xf0\xc0\xd2\xe3\x10\x79\x96\x20\x31\xe8\xd9\xc6\xf8\xeb\x32\x34\x48\x51\x66\x2c\x9b\x9b\xa3\xa0\xa8\x31\x4b\xf9\xf2\xf6\xc6\x7d\x9a\xe5\x77\xbb\x33\x72\x4b\xaa\x66\x2c\x26\xef\x4d\x60\xcc\x72\x9d\x15\xef\x4c\xa4\xfa\x7b\x4c\xca\xb0\xf5\xf7\x1f\x66\xd9\xb4\xf8\xc0\x73\xb0\xcc\x58\xf0\x02\x4c\x38\xde\xe5\x6c\xc4\x89\x20\x6f\xf3\x05\x1b\x83\x0b\x31\xd1\xb6\x5a\xc6\x4b\x5a\xe2\x30\xf5\x8a\xe6\xac\x7c\xa9\x7c\xe4\xcb\xe7\x13\x72\xa7\xc3\x5d\x94\xef\x58\xce\x6f\x40\x06\x66\x63\x34\x1b\x0e\xef\xb7\x8b\x8f\xc7\x9a\xcb\x93\xab\xfe\xb7\x6b\x2a\x48\x31\xcf\xc0\x48\xe6\xfd\xe9\xc7\x0b\x4e\x4a\x09\x93\x92\xb0\x1d\xbd\x3f\xfd\xf8\xee\x3a\x63\x53\x22\x47\x79\xfe\xfb\xaf\x97\x27\x07\x1f\x0f\xcf\x3f\x1d\xbc\x3b\x54\x75\xca\x8f\x90\x9b\x51\x99\xce\x04\x89\xc9\x9d\x80\x01\xb0\x06\xf5\x1f\x3f\x1e\x9d\x1c\x7d\x3c\x38\xbe\x7c\x77\xf0\xe9\xe0\xed\xd1\xf1\xd1\xc5\xd1\xe1\xb9\xec\xe7\xf0\xc3\xc1\xe7\xe3\x8b\xca\x6b\xa5\x0a\x3e\x64\xb7\x94\xe7\xec\x46\x5d\x0d\xfe\x93\x0a\xdd\x4c\x6c\xe8\xd6\x5f\xa1\x5e\x19\xb4\x9c\x5e\x2d\x84\xfc\x7e\x4e\x6f\xe6\x33\x12\xf9\xa0\x52\x36\x9d\x91\x62\x31\x13\xc6\xfc\x88\xb2\xe9\xef\x1f\x31\x69\x1f\xe7\x77\xc7\x12\x48\xe0\x61\x4a\x84\xae\xfe\x7b\xa6\xb6\xaf\x20\xe2\xbd\x0e\x7e\xff\x4e\x67\xab\xc7\x60\x79\x1d\x79\xfb\x2e\x67\x63\x58\x84\x6c\xe6\x5a\x3b\x45\x72\x4f\x90\xf6\xe7\x93\xf7\x87\x1f\x8e\x4e\x0e\xdf\x5f\x9e\x1d\x7e\x38\x3c\x3b\x3c\x81\xbd\x38\xf9\x7c\x7c\xec\xbd\xe0\x30\xf2\x8f\x92\x00\x74\x4c\x80\x20\x36\x62\xb2\x52\x5f\x43\x24\x65\x91\x09\xa2\x6d\xc1\x40\xf0\x34\xa1\xb3\xd9\xc9\x62\x36\x2b\xd2\xe4\xe7\x57\xa9\x36\x8c\x8b\x72\x32\xd9\x38\xcc\x13\x54\x63\x95\xb1\x17\xb5\x6e\xd8\x73\xad\x1b\xf6\x86\xbd\x66\x71\x5f\x8c\xb2\xd9\xac\xd9\x88\x8c\x6d\x40\x86\xf8\x41\x17\x28\x4b\x4a\x6a\x02\x99\x82\xca\x34\x35\xcc\x47\x10\x8a\x3a\x4a\xef\xdf\x79\x4f\xc7\xa4\x28\x84\xac\xad\x1e\x62\x4d\x1c\x4c\x44\x25\x82\x39\xe2\xe9\x03\x64\xf7\x53\xa1\x4b\x02\xd2\xc2\x0c\xa9\x12\x4a\xc2\x91\xbc\x07\xf3\x63\xc3\x06\x6f\xeb\x79\xf5\xb9\xfd\x0a\xeb\xda\x73\x9f\xb5\x95\x92\x61\xa3\xff\x79\x8e\x65\x20\x2f\xd0\xa6\x0f\x73\x4e\x6e\x37\xb0\x7a\x58\xba\xe0\xa7\x63\x6a\x1a\xb1\xfd\xaf\x0b\x3a\x56\x7d\xa7\x4b\xcf\x8f\xaa\xa2\xe1\x7d\x92\xb9\xa8\x23\x1d\x5f\x6d\x25\xba\x42\x85\xab\x40\x01\x63\x4c\xfa\x93\x9e\xa6\x5a\x49\xff\xba\xa7\xb2\x88\xf6\xe7\xbd\xed\x2e\xfc\x18\xf7\x4c\xf6\x1f\x1b\xcc\x86\xf4\xe5\x1d\x38\x82\x58\xcd\xe4\x6e\x6b\x96\x84\xc2\xe8\x29\x89\x05\x42\x9c\x80\xec\x98\x07\x44\x66\x8a\x66\xff\x2c\xeb\x16\x38\xa8\x25\xea\x79\x92\x41\x8b\x37\x25\x83\x05\x74\xdb\x4d\xd5\x32\x44\x41\xeb\x1b\x0e\xc0\x2a\x62\xfd\x5e\xd3\x56\xab\xe6\x0b\x56\x8b\x5a\x6a\x55\x8c\xa1\x51\x8a\x58\xda\x0b\x44\xba\x6e\xf6\x7b\xa5\x80\x5c\xa4\x68\xf4\x4f\x87\x2f\xe8\x76\xa2\x47\xae\x53\x68\xa3\x6b\xfd\xac\xec\xdc\xe6\xfa\x69\xbb\x93\xa2\xb1\xf9\xdd\x4d\xd1\xcd\x53\x75\x53\x40\xa1\x3f\x59\x3f\xa5\x82\xea\xb9\xab\x5a\xaa\x6d\xfd\x00\x0a\x6f\xbd\x00\x0a\x8e\x68\xdd\x18\x7b\xd7\x1b\x03\xfd\x08\xc5\xf6\x3c\xe3\x20\x7d\x53\x2a\x6e\x88\x9a\xe3\xf1\x0d\x29\xc4\xd7\xfa\x4e\xd5\x36\xf2\x62\x8c\x38\x16\x2c\xb0\x3e\x30\x04\xcf\x09\x04\x78\x00\xe3\x69\x0c\x9f\x1d\xd3\x16\x00\x65\x79\x67\xdd\x26\xa2\x7a\xce\x7e\xe9\xf4\x99\x0d\xa1\xd3\xb3\x46\x55\x3c\x24\xb6\x1d\x33\xbb\x5b\x27\x22\x8f\x79\xe9\xc4\xfc\x6a\x8b\x5c\x79\x63\xf7\x9b\xcd\xde\xb9\x4d\xd6\x96\x41\x80\xae\x6e\x2c\x4d\x3d\x16\xed\x7c\xde\x55\x19\xf1\x44\x06\x21\x9a\x88\x13\xa0\xdb\xf3\xc1\x4e\x58\x9a\x10\xc4\x21\x62\x5f\x2a\x79\xe1\x59\x9e\x8d\x41\x5d\xe7\xe7\xd5\x40\xb9\xb2\x79\x95\x9d\xbe\x58\xd3\x29\x77\xb4\x8b\x2a\x0b\x42\xc2\x64\xd3\x30\x18\xcb\xab\x98\xd6\x9e\x6d\x32\x05\x35\xbe\x86\x76\x8f\x4a\x52\x88\xce\x66\xda\x46\x4e\x6b\xcf\x37\x6f\x0d\x24\x4f\xee\x73\x1e\x3c\x67\x38\xef\x0f\x80\x53\xd0\xd9\x2d\xfd\xee\x4d\xc4\xc3\xac\xec\xfd\xe7\x75\x4b\x53\xee\x82\xeb\x64\xaf\x46\xa2\x9b\x2e\x03\x40\x7f\xcc\xe6\x49\x3a\xe0\xc3\x86\xbd\xb4\x68\xab\x95\x50\xac\xdd\xa9\x67\x13\x55\x3a\xe1\x69\x8a\xbc\xd5\xa5\xe5\x88\xf6\x3a\x2b\x47\x24\xff\xef\x35\x48\x90\x7f\x95\xa1\xed\x6d\x67\x4d\x5f\x7e\xc7\xa4\xfc\xcd\x73\x86\x68\x46\x6e\x7b\x79\xb5\x11\x28\x07\x2b\x65\xc2\xea\x35\x68\x3f\xe1\xba\xe5\xc1\xde\x10\xe2\x36\xa8\x87\xae\xfb\xd0\x19\x42\x42\x1e\x1d\x44\x07\x10\x75\xed\x83\xb3\xab\x2b\x47\xb6\xbd\x1d\x1f\x91\x0f\xef\xfd\x79\x6f\x5c\xb6\xd8\x75\x77\x25\x7d\xf0\xc1\xce\x5f\x35\xa3\xd2\x70\x4b\x30\x25\x7a\x2e\x53\x5c\x1a\xcb\x75\xaf\x4f\x16\xf4\x19\xc5\x15\x1a\x06\xba\x7e\xc8\x88\x54\xc7\xa0\xe4\xaf\xd9\x2f\x9d\xd7\x6c\x77\x37\xa5\x03\xb6\xdb\x1d\xae\xda\x51\x08\x7c\x9c\x50\xb9\x6e\xda\xb0\xaf\xf9\xee\xf3\xd9\xd9\xd1\xe1\xfb\xad\x77\xa7\x1f\x3f\x9d\x9e\x1c\x9e\x5c\x6c\x01\xcf\x03\x1e\x33\x5b\x03\x3a\xc6\x2f\x26\x9d\xce\x84\x5c\xfd\xbc\x9b\x75\xc8\x64\xf7\xd9\xf3\x67\x2f\x77\x7f\xfe\x99\x64\xbb\xd9\x68\x7f\xef\xd5\xe4\x55\x27\x1b\x91\x6c\xd8\x2c\x51\xe5\x95\x73\x41\x41\xd4\xce\x6d\x32\x98\x0e\x55\x12\xc2\x3a\xfb\xb5\xd2\x39\xc1\xbb\x5b\x33\x3e\x35\x61\xfe\x06\xd3\x21\xb6\xf9\xdd\xbc\x3b\x76\xc1\xee\x78\xe6\x9b\xaa\x4b\xf4\x06\x2e\xad\x9e\xd3\x7b\xc3\x91\x28\x59\x8f\xc3\xd7\x4a\x88\xa4\x7c\x0a\x53\x93\x1c\x47\x68\x2a\x9f\xb5\x5a\x09\x91\xd7\xa6\xe6\x18\x21\x69\x39\x61\xe3\x84\x39\x2f\x25\x34\xb0\xec\x86\x8c\xdb\x37\x84\x4f\x49\xc2\xd4\x53\x9a\xa2\xed\x2b\x79\x7a\x8c\x59\x65\x83\x62\xbe\x5c\xa2\x15\x71\x07\xd4\x40\x2b\x4e\xf0\xae\x06\x45\x31\x1f\xd8\x2e\x8f\x84\xb3\xbe\x70\x87\xa8\xc0\xac\x67\xb5\xfe\x72\x3f\xfa\x6c\xc7\x78\x8b\xf5\x58\xc4\x55\xfe\xce\xa1\xbe\x0f\x65\x79\xef\x1a\xb3\xc5\x0e\x5d\x3b\x4b\xa0\x25\xc9\xe3\xe3\xca\xfb\xb0\xac\xfb\xd5\xb9\x41\x75\x22\xcc\x92\x6a\xb7\x49\x05\x49\xab\x55\xb6\x87\xdd\xf6\x7e\xbb\xf8\x78\x5c\xb6\x76\xbe\x71\x6b\x15\x0e\xa1\xcd\xf2\x31\xb9\xb8\x9f\x93\xb2\xb5\x53\xa7\xb5\x30\x3c\x26\x01\xc0\x3d\x58\x61\x3f\xf4\x63\xa2\xed\x30\x70\x30\x84\x58\x39\x86\xea\xe6\x10\x4d\xb7\xb4\xfa\xca\x95\xeb\x4e\xd3\x84\x56\x15\xe4\xab\x68\xca\xb7\xd9\x54\x89\x40\x75\x79\x6b\xb7\x95\x7b\x76\x5b\x35\x21\x74\x2a\x14\x5a\x95\x7b\x5e\x6d\x4a\x26\xb2\x69\x43\x38\x56\x70\xa1\xf9\x58\xfa\xf8\x58\x7d\x89\x03\xfb\x6d\xa3\x48\xb2\x14\xdc\x7a\xf3\x5a\x47\xdf\x53\x1a\xa1\xd2\x49\x02\x66\xb7\xe6\x06\x50\xd7\xf2\xeb\x84\x61\x03\xd7\x72\xb3\xfb\xa4\x04\xef\x54\x69\x09\xd5\x10\xe5\x2e\xc0\x1f\xc7\x40\xd5\x31\x8e\x4c\x97\x40\x29\x16\x9e\x79\xc0\x3f\xd9\xbd\x72\x8d\xed\x33\xab\xb0\xbc\xb5\xfc\x03\xa0\x06\x6d\x65\x8c\x56\x68\xec\xbf\x97\xe9\xd1\xf4\x3d\xae\x72\x3a\x06\xfc\x23\x63\x93\xdb\xf4\xf8\x78\x08\x7f\x6d\x5e\xdd\xf2\x54\x3e\x3e\x56\x4f\xf6\x32\x11\x69\xbf\xdb\x4b\x08\x16\x69\xab\x25\x6f\x9d\x7e\xa7\xf7\x55\xbe\xdc\xef\x45\x7a\x90\x38\xa4\xd5\xea\x82\x2c\xa1\x44\x0a\xb2\xf8\xb3\xde\xb9\xfc\xf7\xbc\xd7\xd5\xea\x27\x4d\xa7\xbd\x42\x55\xf8\xf3\x6e\x5b\x0b\xd3\x12\xdc\x84\x8b\x46\x85\xbc\x89\x75\x44\xe7\x22\x49\xb5\x35\x86\x96\x63\x4a\xdc\xa6\xe2\x0e\xeb\x8e\x7e\xde\xb4\x23\x8d\x18\xbd\x1e\xc5\x13\x7a\xda\xdf\x5b\xd7\x13\x72\x8f\x2a\xc5\x87\x09\x73\xa7\xc5\x14\x45\x5e\xd7\xdd\x05\xf9\x2a\x12\x9a\xbe\x06\x9e\x51\xab\xae\x52\x30\x06\x37\x27\xfa\x6f\x54\x28\xb2\xe4\x20\xc9\x91\x40\xd4\x21\xe9\xf6\x3b\x9b\xae\xc2\x8a\x09\x7f\xe0\xd9\x14\x62\x54\x0b\xa7\xe1\xee\x0f\x68\x18\xd4\x48\x4e\xa3\x7b\xfe\x4a\x96\xe7\x22\x48\x4f\x5e\x56\xd8\xaf\xa9\x60\x93\x87\x97\xec\xd7\xb3\xfa\xb6\xfd\x90\xd6\x65\x95\xe7\xb5\xad\xd7\xd4\xe8\xee\xd5\x93\xd0\x3e\x15\x19\x70\x13\x2a\xd9\x15\x73\x76\xae\xbb\xbf\x21\x9f\xc0\x7e\xf9\x65\xdf\xe4\xf5\x7e\xd9\x62\xa5\xe3\x9a\xe1\x91\x5c\xbb\x99\xae\x79\x1d\xf4\xaf\xe2\xbd\x49\xaa\xd6\x2d\xbd\x57\x53\x5a\x03\x6e\x50\x7a\x5f\x97\x3e\x64\xa3\x7c\x4c\xc6\x4e\x86\x6c\xaf\xd8\xb3\x1e\xfc\x7b\xbe\x76\x24\xcb\x72\x2d\x9e\xd5\x03\x5b\x43\xa8\x66\x16\xc6\xb5\x4e\x68\x1e\xdf\x59\xca\xe7\xeb\xab\x0b\x30\xa9\x2f\xa1\xd6\xa9\xbd\x9a\xd7\x05\xce\x12\xd8\x35\xc8\xd2\xa9\x44\x0a\x2c\xdd\xe5\x76\xbf\x21\x5d\x81\xd3\xde\x0a\x36\xb3\xe1\x9e\x20\x07\xc5\x74\x57\x30\x8d\x5a\x96\xe1\x15\x5f\xc1\xc9\x35\xf4\x40\xdd\xf2\xcf\xd6\xc1\x9a\xb7\x43\x26\x90\x40\xa3\x9a\x76\xd4\x95\x77\xbc\x58\x21\xb3\x91\x38\x01\xf2\x7d\x3a\x83\x78\xb1\x17\xf0\x8a\x2a\xd3\x67\x39\xc8\xd5\x6b\x50\x7f\xb6\xdc\x80\x6c\xde\x11\x7b\xf6\x32\xce\x9d\xaa\x36\x34\xaf\xeb\x14\x7f\x51\x0f\x46\x80\xe1\x15\xb3\xc8\xfa\x1a\xa4\x98\x97\xef\x0c\xde\x9d\x2c\x66\x33\x67\x4a\xcf\x23\x48\x54\xf3\x55\xa5\x48\x8b\x5a\x29\x8d\xf9\x55\xd8\x5f\x0b\xf3\xcb\xb1\x4d\x29\x52\x0f\xb7\x99\x34\x13\x40\xc4\xa9\x57\x6a\xab\x32\xe3\x66\x9d\xc9\xca\x8a\x7b\x2b\x1c\x5e\x3b\x35\x02\xea\x5f\x3a\x90\x3a\x72\x86\x67\xed\x91\x44\xc2\xe0\xf5\xd6\x79\xcd\xdf\xb0\xd7\x7c\x67\x27\x9d\xb9\x32\x2a\x31\xe0\x43\xb4\x68\x67\x20\xf2\x68\xf8\x23\x70\x3b\x07\x86\x0f\x68\x78\x47\xde\xf6\x3c\x0a\x86\x60\x61\x24\x01\x31\x10\x5b\x05\x17\x62\x9e\xf6\x73\x73\x78\x5b\x2d\xd2\x9e\xe6\x22\x4f\x68\xda\x93\x33\x93\x77\x23\x0f\x74\xf9\x49\x9e\xa6\xfa\xcc\x3b\xc5\x51\xe5\x4e\xbd\x90\x20\xe3\x8c\x31\x2a\xc6\xfb\x86\x31\xca\xeb\xfb\x09\x63\x74\x8a\xaf\x1f\xe3\x6a\xe1\xa0\x91\x85\xe9\x71\x42\xf3\x18\xcc\x14\x75\x17\xce\xa1\x7c\xbe\x02\xe6\x75\xd5\x75\x84\xc9\x85\xeb\x1f\x14\x9d\xa5\x70\x07\xff\x62\x3f\xda\x23\x61\xb7\x60\x33\xa2\x90\xb6\xb1\x48\x69\x8b\x3c\xa6\x8b\x06\xd1\x82\xbe\x03\x00\xc8\x6b\x72\x33\xfe\x28\xcf\x55\xe0\x28\xb3\xa2\x20\x5c\x34\x11\x77\x9c\xd8\x78\x7b\x04\x76\x23\xeb\xdc\x5a\x63\xbe\x47\x76\xf2\x86\x23\x29\xb3\x65\xa9\x85\x47\x62\xb9\x86\xe7\x0c\xec\x14\xe5\x50\xcc\x6e\x19\x1b\x96\x34\x11\x8e\xdb\x17\x48\xfd\x49\x5b\x45\xf6\x4f\x0d\x9f\x56\x93\xde\xf0\x07\x3a\xfd\x81\xad\x32\x47\x54\x2f\xe5\x7f\x2e\x6e\xe6\xbb\x74\xb2\xcb\x72\xb1\xab\xf3\xd1\x8f\x9b\xc8\xf7\x72\xad\xfa\x84\x6d\xac\x3e\x59\xb7\x50\x72\xe7\xa2\x36\x8f\x6e\xbf\x8d\x6d\xd2\xce\x66\x77\xd9\x7d\x71\x66\x97\xaf\xd5\x72\x78\x78\x9e\xba\x07\x2a\x88\x51\x30\x86\xf5\xaf\xc6\x29\xf0\xd9\xfb\x6b\xdf\x5b\xd6\xec\xc7\xd9\x5f\xec\x4a\x0c\xbb\xc1\xec\x6e\x8c\xe9\x58\xed\xc2\xbd\xd9\x03\xee\x19\xe7\x7d\xc7\xba\x07\xd6\x8a\x66\x59\xca\xa9\x7e\x5a\xc3\x51\x47\x46\xa3\xde\xc3\xc8\x67\xca\xb8\x4a\xaf\xec\x15\x71\x33\x33\x96\xea\x7f\x6b\xa4\xac\x1e\xeb\x75\xfc\x6e\x43\x51\xdf\xa4\xd8\x04\x2b\xbe\x2b\x73\x32\x5a\x91\x77\xf1\x8a\xcc\x76\x9a\x5b\x83\xe6\x0e\x3c\x5f\x4e\x17\x74\xbc\xd3\x1c\x36\x7d\x1e\x7a\x05\x45\x1a\xe3\xb6\x80\x83\xac\x53\x5f\x38\xcc\xd4\x6a\xc2\xb4\xd2\xec\xbb\xfc\x06\xb8\xc2\xf5\x2d\xef\xaf\xa0\x2f\xfd\x96\xf3\x39\x61\x26\x23\xd2\x06\xed\xae\xe0\x0b\x56\x31\xa1\x6e\x2f\x0e\xfb\xf9\x2c\x4e\x8e\xad\x57\x9f\x19\x23\x1c\xf3\x63\x11\x1f\x44\x70\x53\xd2\xb4\x2f\x69\x3a\xfd\xb1\x97\x64\x92\x02\x8b\x5e\x90\xd4\x92\x01\xb1\xbb\x5f\x5e\x9f\xa8\x42\x68\x14\x38\x2f\x9b\x2e\xf0\x7a\x0a\xa3\x8e\xac\x40\xde\xd2\x55\x93\x5c\x65\x08\xb2\x82\xdb\x45\xac\x90\xf1\x4e\xe5\x6a\xd2\x2b\xbb\x95\x71\xb9\x90\xc3\x53\x39\x6a\x5a\xd1\x49\x1b\x20\x6e\x6c\x4f\x66\x2a\x96\x31\xaa\x51\xe8\x0a\x1d\x3d\x28\x98\x05\x54\x8b\x0c\xe2\xe7\xfa\xb1\x8f\x66\x79\x11\x19\xf7\xb3\x55\x7a\x47\xba\x52\x1f\x1d\x01\x24\xb7\x47\x54\xe0\x4c\xd5\x06\x03\x47\x36\x45\x0b\x9c\xe9\x2d\x3a\x9d\x6b\x43\xed\x02\xcd\x30\x31\xf9\xa2\x4c\x4e\xaf\x11\xa6\x86\x19\x2e\x50\x8e\x66\x68\x01\xf0\xcf\x6e\xdb\xc5\xe8\x9a\x8c\x17\x33\x72\x24\xc7\x34\x9b\x69\x22\x80\x27\x23\x44\x4d\x18\x23\x50\x58\xbe\x27\xe6\xc6\x48\x46\x69\x63\x22\x2f\x32\x46\xee\xe0\x6d\xae\x52\x06\x4e\x54\xf9\x6b\x55\xfe\x22\x9b\x26\x23\x1f\xbe\x2f\xb2\x69\x9a\x5c\xc7\xa4\x54\x27\xc9\x35\xa2\x68\x64\x89\xb3\x93\xbf\x5c\x2f\xa0\xe8\x86\xbc\x7d\x93\xb1\x6c\x0a\x41\x04\xf2\xb6\xa6\x2b\xb8\xa3\x13\x50\xe3\x34\x14\x07\x6f\x6a\x55\x80\x89\x2f\xc1\x7e\x80\x16\x20\xf4\x90\x84\xf1\x18\x62\xc3\x74\x5c\x3a\x8e\x4c\x8d\xdb\xa2\x33\x8e\x06\x2f\x69\x0c\x9a\x3e\x3e\x26\xfe\xd6\xaa\x52\x76\x67\x19\x12\x69\x35\x54\x06\xf7\xa3\x1b\x14\xe6\x66\xd9\xdf\x80\x73\xd0\xbc\xce\x7e\x60\x6d\xe1\xa9\xc4\xb3\x9a\x4f\x1c\x98\xd7\x7e\x9d\x38\xc9\x58\x1f\x38\xc7\xae\x90\x9f\x33\xe1\x98\xb9\x26\x39\xca\x5c\x84\xb3\xbf\x4a\x3e\x43\xf5\x98\x73\x3d\xe6\xba\x81\x31\x39\x30\xff\x34\x2e\xb0\x8d\x17\x87\x66\x38\xaf\x19\x74\xae\x06\x8d\x46\x38\x1c\x76\x68\x9e\x0b\x88\x72\x7b\x9b\xa2\x59\x78\x11\x14\xb1\x53\xf2\x9f\x49\xe1\x9c\x91\xff\xfc\x8b\x49\x70\x3f\xd6\x46\x66\x4d\x8a\x4b\x9a\x1c\x02\xb3\x96\x19\x26\xfd\x50\x1d\x1e\xd9\x4a\x3d\x8d\xd9\x8f\x22\xca\xed\x98\xcc\x69\x29\x75\x68\xe5\x71\x71\xcf\xc6\x86\x3a\x34\x5e\xea\xd0\x8c\x02\xad\x3c\xe8\x70\xb4\xca\x43\x62\xd7\xfd\xc8\x18\xc3\x5a\x22\x70\x96\xe7\x5f\x16\xf3\x88\x9d\x38\x04\xe4\x04\xfd\xe7\xfb\x7a\xc5\xbd\x32\xc6\xad\xea\x88\x6c\xfa\x10\xed\xc7\x79\x43\x44\x66\x5c\x38\x41\xb1\xcf\xa3\x1e\xf4\x75\xa1\x48\x1c\xeb\xf5\x6f\x89\x62\xe3\x29\xce\xcb\xa8\x1b\x4e\x88\x19\x10\x43\x61\x8c\x45\x1a\xc6\xc1\x28\xbb\x36\xce\x52\xf2\xa8\x5b\x1d\x1a\x4b\xfb\x1c\xb3\x5e\x45\x73\xcc\x5a\x2d\xd6\x6a\x25\x1c\x1f\x79\xe9\xa1\x38\x62\xe5\x82\xa4\xa9\xeb\x93\x76\x0f\x7e\x54\xc1\x2a\x44\x97\x80\x47\x32\xca\xc4\xed\x5a\xbd\x08\xc8\xe0\x38\x50\x07\xa4\x7c\x5a\x34\x4c\x4c\x86\x56\xeb\x4a\xa9\x49\x95\x41\xed\xa5\xb2\x83\x76\x82\xe9\x1c\xaf\x8b\x28\x43\x0b\xe1\x6a\x0b\x63\x56\x83\xc4\x0d\xaf\x10\x65\x4a\xea\x54\x89\xc6\x25\xc8\x56\xaf\xcb\x9b\x92\x10\x7c\x97\xf0\x81\x28\x2d\x03\x53\xeb\x13\x54\x4a\x25\x3a\x18\x63\x63\x1c\xa8\xdc\xa5\x8d\x7d\xe0\x56\xb3\x12\x8d\xf2\x83\xa3\x4f\xe9\xc8\x1b\x4c\x53\x30\x3a\x81\x7a\xb7\xd7\x49\x9d\xb7\x17\xd9\xb4\xbf\xa7\x5f\xcd\x39\x99\x67\x9c\x1c\xf0\x69\xd1\x7f\xa6\xdf\x29\x5a\x07\x5e\xbd\xd2\xaf\x2c\xb6\xf8\x2d\xcf\xbf\xf4\xbb\x2f\xf4\x6b\x8d\xbe\xe0\xe5\xfe\x9e\xdf\x0b\x50\x4f\xfd\x17\x7e\xa3\xef\xb2\xd9\x8c\xf0\x7e\x77\xcf\x34\xac\x50\x04\x34\xb0\xf7\xfc\x85\x57\x16\x88\x2a\x36\x22\xfd\xe7\x5d\xd9\x74\x69\x1a\xf1\xa7\xeb\x60\xb4\xbd\x9d\x90\x96\x30\x76\x8d\x2f\x56\x68\x29\x1d\x99\xb2\x96\x28\x7f\x31\x64\x9d\xcb\x04\xbd\x5c\xa1\xe2\x53\x4d\x00\x79\x6f\xda\x90\xa0\xf8\xd1\x6f\x60\x53\xe3\x4a\x6e\xe9\x54\x6e\x25\xd1\xab\x65\xed\xc0\x09\x55\x28\x60\xbe\xc2\xfc\x52\x0e\xef\x7d\x92\x4b\x9e\x02\x65\xee\x20\x57\x68\xd6\x02\x15\x45\x85\xce\xa6\x98\x5b\x52\x2b\xc7\x1f\x94\x4d\x9e\x75\x80\xa2\xa4\x48\xb4\x07\x44\x1a\x98\x7a\x3d\x8c\x2d\xb6\xe8\x71\xa4\x9b\xe8\x51\x34\x72\xea\xf6\x72\xed\x7c\x01\xa8\x56\x47\x21\x57\x68\x17\xc2\x8f\xc3\x4f\x75\x3b\xa8\xb3\xef\xcc\x29\x46\x6d\xf1\x50\x92\x8c\x32\x9c\x07\x9a\xf1\xd5\xcb\xce\x6b\xcd\x5b\x85\x09\x79\x2a\x3b\x5a\x18\x47\x9b\x58\x42\xdb\x2c\x5d\xe0\xa3\x24\xb6\x77\x40\x7c\x35\xc8\xac\x20\x10\x18\xea\x2a\xc9\xd2\xd4\x64\x02\x65\x7e\x26\xd0\xb4\xb1\xc0\x99\x09\x06\xbb\x70\xe6\x1d\x17\xf1\x06\x40\x8f\x6c\x26\x59\x6a\x46\x0a\xf7\x04\xc5\xea\xf2\xe8\x71\xfc\x21\x49\x28\x66\x66\x6f\xd3\xca\xb6\x32\xb3\xad\x48\x54\x37\x94\xf9\xdb\xe8\xee\xef\xda\x0d\x75\x37\x31\x54\x08\x28\xa9\x86\xda\xca\x52\x4b\xcb\x83\x2d\xcc\x9d\xd5\xdf\xbe\x92\x1c\x7e\xed\x22\xe6\x98\x1a\x83\x4d\x47\x59\xf2\x72\x53\xb5\x64\xcc\x34\xda\xcf\xb6\xa5\x28\xf6\xc1\xb0\xf1\xac\xc5\x5b\x2d\x1d\xf1\xb6\x79\x93\x51\xd6\x4c\xd1\x9e\xfb\x4e\x6e\x7b\x33\x45\x5d\xf7\x9d\x44\xb5\x45\x13\xd2\x3d\xf3\x29\xe4\x0f\x58\xcc\x13\xc8\x10\x8b\xf8\x2f\xbf\x3c\x43\xdb\xdb\xc9\xab\x16\x4f\x4d\xfe\xe9\x44\x95\x73\x26\xf2\x72\xbd\x76\x56\xb7\x4d\x20\x70\x8f\x70\x8d\x69\xd7\x22\x3f\x58\x75\x9d\xb6\xc0\xc1\x82\x4e\xff\x51\x65\xa9\xf2\x9c\x94\xc0\x8e\x16\x68\xa6\x97\x75\x64\x9b\x9e\xf8\xb2\x09\x08\xf8\x3b\xd2\x70\x3b\xc7\x93\x76\x09\x67\x8d\xab\x64\x9e\xb6\x5a\xc9\xbc\xc6\x91\x8a\x38\x65\xb1\xd0\x96\x98\x55\xac\xa5\x31\x54\xa9\x03\x30\xbc\x2c\x45\x8e\xff\x26\x25\x45\x14\xbf\xe5\x90\x11\x2c\x99\xa0\x39\xba\xd6\xd1\x45\xc6\x78\x8e\x6e\xf0\xd8\x76\x71\x8f\xc7\xba\x0b\x09\x91\xf2\x36\xff\x33\x99\x78\x2d\xa3\x67\x3a\xe1\xf6\x2d\xbe\xd6\xf9\xa3\x15\x38\x17\x68\x5a\xbe\x61\xd9\x0d\x29\xd0\x25\xbe\x71\xaf\xea\xe4\x1e\x5d\x03\x71\x78\xa9\x7c\x92\xaf\xdb\xa3\x19\xc9\x38\x58\xc6\x74\x5e\xb3\x37\xb7\x6e\xfe\xf7\x91\xda\xa2\xdb\x01\x1b\x2a\x7b\x53\x8e\x2f\x1d\xe3\x4c\x44\xf1\xa5\xb2\x0e\x85\x65\xd1\x59\x7b\x32\xdc\x79\x9d\xbd\xc9\x21\x6d\xb1\x6e\x80\x0f\x32\xdd\x40\xe1\xe5\x09\xa6\xf2\x5a\xea\xbc\x5e\xbc\xb1\xce\x10\x8b\xb2\x12\x1d\x14\x83\xc5\x70\x98\x36\xae\x35\x24\x8f\x50\x81\xa6\x28\x47\xdb\x9d\x74\xa9\xcb\x5c\xa7\x4b\x79\x10\xb6\xca\x47\x0b\x8e\xab\xae\xd2\x92\x17\xf5\xe5\x5a\x60\x80\xef\x40\x01\x2a\xb0\x15\x55\xa0\x05\xce\xc3\xed\x2d\x2a\xdb\x9b\x59\x3c\xa7\x24\xdc\x8d\x3f\x93\x05\x7a\xf1\x4c\x82\x5d\x55\x3c\x64\x83\x60\x9b\x82\xaf\x64\xb9\x51\xa0\xd5\xb3\x51\xad\x4d\xa9\xee\x1e\x94\x9b\xb8\x56\xf9\x46\x06\x54\xd8\xb0\xc6\xa0\xa7\xd3\xc3\x41\x23\x34\x43\x13\x79\xfe\xbb\x2d\x96\xa6\x8d\x5c\xbd\xc6\xd7\x3a\x30\x76\x61\x24\x47\xd7\x29\xf4\xb0\xf7\xfc\x45\xda\x6a\x6d\x57\x84\x48\x73\x50\xa4\x04\xec\xf1\xe7\x64\x8e\xae\x51\x81\x5c\xfb\xf5\x57\xeb\x68\x04\xcf\x42\x23\x7e\xc0\x40\xcd\xee\x4b\xc0\xf2\xb4\x91\x45\x24\x60\xae\x3b\x44\x37\x90\x1b\x5e\x91\x29\x65\x20\x60\xfd\x95\xe7\x0b\x65\xec\x1e\x08\x51\x95\x0f\xaf\xb2\xa2\x77\xa6\xb0\x1f\xb4\x54\x2b\xd5\x24\x77\x5b\xbf\x39\x42\x90\xd5\xbe\x0b\xdf\x21\x04\x59\x23\xf8\x68\xac\x90\xd1\xca\x13\xe4\x8a\x3f\x0a\xb4\xbd\xcd\xd1\xc2\xc8\x34\x7e\x5b\x1d\x88\xd5\x92\xf0\x45\x24\x9a\xdc\x68\x96\x15\x05\xa9\xcd\xf4\xec\xf4\x1b\x71\x7a\x6d\x42\xed\x26\x06\xe3\x66\xb7\x39\x1b\xe7\x20\x18\x00\x78\xee\xde\xaa\x08\x9a\x08\x10\xdc\x3c\x1b\x91\x1e\x47\x82\x2f\x0a\x41\xd9\xb4\xc7\x02\xa7\x5b\x10\x30\x47\xe3\x20\x50\x94\x5b\x23\xfa\x6c\x8b\x9a\x34\x92\xb6\x2f\x55\xb2\xb0\x6e\x59\xce\x28\xb2\xa1\xa6\x1f\xd0\x02\x8b\xb6\x1d\x07\x5c\x4f\x66\x24\x8d\x72\x72\x59\xab\x95\x14\x20\xf5\x3f\x4e\xdc\x59\xa6\x29\x52\xc9\xef\xb6\x55\x19\xb6\x89\xe8\xca\x91\x85\xa1\x45\xa8\x6e\xa8\x15\x60\x81\x59\x82\xea\xac\x3a\x53\x18\x5e\x42\xc3\x69\x82\xbc\xa9\x9c\x28\xf5\x26\x4a\xed\x44\x43\x9b\xc9\xd8\xb0\x75\x8e\xbf\x6f\x1b\x7b\x0e\xf6\xd3\x3e\xdf\xfa\xb6\x0c\xab\x60\xe4\xd2\x4c\xe7\xcf\x2a\xc0\x00\xc6\x4d\x22\x09\x7c\xd2\x94\x88\x44\xa4\xaf\x77\xbb\xdb\x18\xe7\xad\x16\x8d\x78\x56\xe5\x3b\x5d\x94\xa5\x88\x69\x19\x92\xdc\x11\xfd\x53\xc2\x5d\x66\x58\xc5\x9f\xd7\x19\x69\xf9\xd8\x4d\x62\x34\xe7\x4e\xc9\x2c\x82\xf3\x6f\x97\x55\x2a\x96\xa2\x3d\xa6\xe3\x77\x80\xd9\x4b\x65\x8f\xb7\xe8\xe4\xeb\x9c\x8c\xc4\x3b\x47\x49\x91\x34\xdf\x07\x75\x94\x73\xf8\xff\x30\xf2\xbd\x66\x8a\x1c\x56\xe0\xd5\x3a\xaf\xb8\x2a\xca\x76\x26\xe5\x63\x6d\x3d\x29\x9f\x85\xcb\xec\x6d\x95\xbb\x37\xc5\x3a\xf7\xb9\x1f\xd2\xed\x45\x36\x3d\xc9\x6e\x88\xdf\x73\x8c\x6c\xe7\x8e\xbe\xc8\xe9\x99\xa7\x60\xfe\x65\x36\x4b\x76\xe6\x51\x09\x51\xf6\xcc\xea\x1e\xe1\xb4\xe8\x8b\x18\x53\x9f\x92\x9b\x60\x73\x47\x5f\x3b\x7c\x48\xd5\xd8\x15\x9c\xc4\xff\x4c\x08\xea\xa6\xcb\x64\x94\xa6\xd7\x38\x97\x13\x53\x62\x9a\x64\xe2\x71\x82\x91\xda\x1d\xbf\x76\x2d\x87\xa3\x9b\x7d\xef\x0a\x81\x92\x19\x2a\xd2\xe5\x42\x93\x58\xfa\x78\x5d\x40\x0d\x64\xdf\x2a\xee\xcc\x31\x1e\xda\xc8\xb9\xae\xd6\x2d\x92\x3b\x6b\xfd\x21\xc9\xeb\xc5\x04\xa8\xc0\x71\xd9\x40\xee\x33\x95\x59\x84\x95\xa4\x7e\x7a\x32\xea\x4e\xcd\x13\x14\x78\x5c\x3c\x73\x55\x1e\xaf\x56\x7b\xea\x55\xb8\x4e\x4f\x76\x13\x00\x77\x23\x33\xc9\x2e\x29\xca\x74\xea\xca\xbc\xb4\x09\x58\x27\x1b\xf2\xda\xf2\x51\x61\xc5\xdd\xd2\x10\xeb\x3b\x5d\xa0\xa6\xed\x6c\x62\xb4\x0b\xf7\x4c\xea\x3c\x72\xb9\x91\xeb\x7e\xae\xb3\xe2\xf0\x36\x9b\x81\x7c\x38\xd7\x28\xd3\xa7\x15\x7c\x47\x56\x59\xd8\x98\xa9\x3a\x66\x0f\xab\xd8\x3f\x3d\x86\xc2\x1f\x43\xa6\x04\x5b\xba\x6d\x50\xc1\xba\xb4\x33\x1a\xe1\x99\xf6\x66\xcb\x84\xc4\x00\x85\x76\x33\x1c\xe9\x05\xd8\xed\xbe\x66\xbf\x60\xe5\x70\xc8\xf1\x68\xc0\x86\x88\xe2\xa2\xe6\x22\x91\x9f\xe5\x0e\x9a\x26\xc1\x9f\x14\x6d\x77\x53\x04\x97\x0a\x6d\xb5\x16\xae\x05\x26\xdd\xe9\xa2\x3c\x45\x45\x79\x9b\x98\x9f\x03\x3e\xc4\x8e\x00\xe1\x69\xd7\x09\x0d\xe6\xa8\xd9\xbd\xc6\xdb\xa4\xd9\x52\x12\x00\xa4\x25\x01\xb0\x74\x24\x45\xf2\x0b\x65\xb7\x84\x17\xa4\x89\x94\xe4\xc0\xfd\xa4\x33\xa3\x34\x91\x12\x34\xe8\x4f\x25\x49\xbd\xda\x9f\x37\x04\x62\xad\xd6\xe2\x15\x8c\xf0\xf3\xd3\x2f\x98\x18\x4f\x10\x9a\x31\x68\xba\xbd\x41\xe5\x15\xa9\xa2\xee\x68\xb4\x95\xcb\xbb\x5c\xa9\x64\xed\xed\x99\xe4\x28\x66\xb6\xf9\x0f\x25\x26\x71\x3d\x70\x43\xe3\x89\x51\x7e\x73\x43\x85\xcb\x49\x68\xe2\xf9\xf3\x4a\xa5\x39\xca\xd5\x44\xb3\xef\x50\x0a\x66\x5a\x6d\x9e\x81\x19\x33\x68\xb5\x30\x47\x99\x23\x78\xc8\x3c\xce\x12\xe7\x12\x7f\xb8\x8a\x74\x5b\xaf\x89\xb2\x1f\xe3\x37\x67\x5b\x44\x71\x0d\xba\x3b\x9e\x86\xd5\xe7\x11\xc4\xac\x41\xd9\x3f\xea\xd7\xed\x07\xad\x9a\x59\x1f\x7f\xe5\xe4\x6a\x5d\xa9\xf8\x59\xe5\x3a\x8d\xe9\x78\x57\xaf\xd5\xec\xff\x63\xef\xdd\xbb\xdb\xc8\x8d\xc4\xd1\xff\xf5\x29\x24\x9e\x84\x69\x2c\x21\x0e\x69\xcf\x64\x13\xca\xb0\x56\x96\x29\x8f\x36\x7a\x38\x92\xec\xc9\x84\xc3\x9f\xd2\x22\x41\x0a\x63\x12\x60\xd0\xa0\x64\x8d\xc8\xdf\x67\xbf\x07\xcf\x06\xd0\x68\x4a\xf6\xcc\xec\xdd\x73\xcf\xfd\xc3\x32\xbb\x1b\x8f\x02\x50\x28\x54\x15\xea\xa1\xb0\xa7\x01\xf3\x94\x49\xdb\xd7\xcf\xde\x46\x7b\x83\x72\x36\xcd\x2d\x90\x06\x70\x4b\x59\xe2\x69\x53\x01\x83\xd4\x52\x6c\x2a\x91\xfa\x83\xb9\x26\xb5\xb1\x49\xfc\x9b\xd1\x1f\xf4\x2e\x93\x8c\x09\x9b\xe1\x36\xa1\x13\x96\x35\x3e\x14\x78\xfb\x5f\x23\x46\x05\xfe\x2c\xfe\x05\xb7\x73\x3a\xde\xfe\x97\x24\x63\xaf\x16\xb9\xb8\x7d\x0d\xfe\xb5\x2d\xd8\xb6\x0a\x53\xa4\x44\x84\x6d\x81\xe7\x8b\x59\x2e\x70\xbb\x01\xa0\xc8\x1a\xf2\x5d\x43\x5f\xa1\x7e\x44\x3f\xc0\x1f\x37\x5c\xa3\xda\xbb\x70\xad\xb9\xd3\x17\x5a\x2a\xd0\xa9\x0e\xac\x65\xae\xca\xd8\x28\x9f\x45\x42\x25\x41\x9d\x3d\x52\x5e\x7b\x91\x56\x0b\xe4\x48\x0c\x32\x86\xf8\x80\x0c\xc1\x6e\x77\xa8\xce\x00\xc9\x4b\x6a\x32\xcb\x80\xdf\xd8\x20\x1f\xa2\x22\x25\x89\xc6\xe1\xb9\xbd\xc5\x50\x30\xb9\x00\xd9\xaa\x19\x7d\x76\x2f\x66\x44\x64\x0d\x39\x78\x12\x3e\x32\x44\x06\x9d\xa1\xe2\x03\x75\x48\xab\xae\x64\x44\x84\xec\xa4\x3c\xda\xe4\xd1\x14\x84\x2c\xd7\xf3\x87\x10\x62\xfb\x4b\x5d\x58\x2b\x6f\x7a\x74\xc0\x86\xfb\x4b\x24\xff\xeb\x49\x4e\x8d\xb9\x23\xa7\xf1\x5f\x0d\xd0\x6c\x16\xfa\xbb\xfc\xaf\x97\x2d\x3d\xa0\xcb\x36\xa4\x58\x21\x69\x17\xc7\xe3\xe5\x08\xd7\xe5\x88\xd3\x32\xd0\x5a\xf2\xfd\xbe\x19\xe3\x5f\x9f\xa3\xb3\x20\x4f\xe8\xad\x2b\x7a\x6d\xeb\xd9\x0f\x55\xec\xb0\xed\x1f\x4b\x4f\x0e\xb5\xc1\xb7\x3e\x66\x7e\x58\x09\x2b\x18\x26\xfc\xbc\x72\x1d\xa5\x15\x94\xa9\xf0\x4a\x32\x9d\x14\x1f\x42\x95\x31\x1c\xc1\x09\xbc\x85\x0b\x38\x36\x23\x9a\x9b\x11\x3d\x18\x2d\xcc\x9d\x0f\x39\x9c\xa6\xb9\xf9\x9b\x1a\xdf\xc8\x6b\x74\x57\xb9\xf7\x19\x03\x78\x6f\x5e\x7b\x73\x34\x07\xb0\xaf\xdf\xea\xe7\x07\x00\x3f\xa3\xa9\x61\x09\x4c\x00\x8e\xec\x06\x5e\x03\x78\x89\xa6\xb6\xe3\xec\xb3\x1f\x9f\x43\xe5\x7e\xb8\x0c\xf8\xd4\x03\x74\x69\xb3\x42\x6b\xd6\xe6\xdc\xf2\x2d\x1a\x87\xed\x8c\xa3\x4a\xc8\x0d\xab\xb0\x95\x0c\x0c\xd3\x02\xb2\x8f\xbc\x44\xf1\x32\xfa\xda\xd5\x72\x8d\x8a\x0d\x2f\x5f\x00\x5b\xaa\xac\xc7\xec\x2b\xb5\xac\xdc\xd3\x50\xc2\xdc\xea\x7e\x8d\x8a\x92\xc7\x81\x47\xe4\x1e\xea\xec\x15\xaf\xfa\x76\xf3\x17\xad\x16\x98\xa1\xfb\x41\xb6\x44\xfd\x41\xa1\x37\xff\x48\x43\x6a\x36\xff\x12\xc0\x7c\x30\x1b\xa2\x91\x94\x9a\x98\xf2\x8e\x99\xa0\xce\xde\xa4\xcc\x14\x35\x69\xb5\xc0\x2d\x9a\xb4\xba\xd0\x45\x8d\xcb\x16\x88\x0d\xe8\x60\x32\x1c\x82\x66\x53\x43\x9b\xdd\xc2\x85\xe4\x21\xe4\x6f\x0f\xa4\xdc\xfa\xca\x94\x9e\x33\xea\xa4\x39\xb0\x87\xff\xbb\x67\x58\x45\x7b\xe6\x20\x65\xf4\xef\xe7\x19\x08\xf8\x49\x25\xca\x00\xbb\x7e\xde\x84\x72\x13\xff\xf9\x59\x4e\x51\x8a\x99\x2f\xad\x67\xe5\x39\x62\x03\xf1\x1f\x49\xf4\x81\xa4\x4c\x52\x94\xc7\x86\xaa\x36\xd0\x6c\xc6\xdc\xf5\x4d\xee\x6e\xf4\x64\xd9\x77\x59\x5e\xc2\xe9\xbb\x92\x6c\xe0\xfd\xac\x07\xda\x09\x29\x44\xe0\x85\xf6\x5d\xc2\x0b\x4d\x15\xf2\xca\x24\x09\x17\xf4\xa5\xf8\x80\x55\xb6\x51\xb8\xf7\x95\xaa\xcd\xc6\x5b\x37\xb1\x90\xcd\xc8\xf5\xf1\x2a\x30\x3f\x16\x78\x6e\xa2\x26\x53\x00\x7a\xc6\x83\x80\xdb\xa5\xff\x5b\x14\xae\x50\x2d\x92\xe1\x4d\xed\x01\x27\xfb\xbb\x24\x37\x33\x42\xa7\x48\xac\xe1\x1f\x36\xd9\x1d\x99\x16\x16\x39\xc7\x54\x27\x06\x30\x8d\xe8\xdc\x75\xa2\xb4\x9c\x41\x34\x99\x88\x48\x55\x34\xaa\x9e\x3a\xb3\xf6\xb2\xf5\x38\x73\x3e\x2f\xa2\x6c\x04\x61\x45\x55\x20\xac\x23\x41\xd9\x54\x45\x7e\x37\xf6\x35\x7f\x7f\x32\x52\x4a\x75\xd8\x2a\x84\x44\x32\xd7\xc0\xef\x3b\x52\x5a\xa9\xf2\xd4\x40\xa9\xcb\x53\x5d\x72\x5f\xff\x88\xec\xd2\xe4\xee\xf8\x83\x79\x57\xda\xa3\xfc\xb3\x12\xf0\xf6\xef\x3a\xe0\xad\x2b\xf1\xdf\xba\x84\xd5\x53\x53\x45\xd4\x83\x09\x30\xc4\xdd\x8d\xcb\xec\x6c\x0b\xb4\xf6\x57\xdc\xcb\x6d\x64\x98\xdc\x47\xca\x38\xa1\x46\x0e\x85\x2c\x8e\x10\xb3\x66\x63\x74\x2b\x2f\xd1\x4d\x29\x43\xca\xe5\xc3\x71\x60\xe3\x2a\x64\x3c\x82\x8c\x84\x90\x31\xc4\xf7\x98\x86\x4c\x20\x16\x40\x66\xd3\x72\x28\x6f\x73\x79\xac\x30\x84\x10\x71\xd6\x6c\x5b\xac\xc4\x8d\x10\x2c\x2d\x66\x48\x06\x94\x4c\xb2\x1d\x5c\x0e\x24\x54\x8d\x95\x54\xc8\x5a\x0d\x19\xa8\xcf\x2e\x33\x01\x1b\xc5\xdd\xb4\x01\xb6\x04\x7f\x78\xb4\x01\xd4\x0f\xc6\x3f\xe7\x23\x4c\x55\x30\xdc\xac\x71\xa3\x26\x4c\xa5\x95\x68\xbc\x1a\x11\x3e\x9a\xe1\xd7\xaf\xbe\x31\x3f\x1a\x60\x3d\xca\xc5\xe8\x36\xe3\xe0\x71\x3d\x21\x34\x9f\xcd\x1e\xec\x22\x77\x77\x10\xa2\xda\x7d\x53\x4e\x82\xbd\xf9\x5c\xad\x1a\xb7\x42\x2c\x7a\xdf\x7c\x73\x7f\x7f\xdf\xbe\x7f\xd9\x66\x7c\xfa\xcd\x8b\x4e\xa7\xf3\x8d\x84\x44\xd5\x51\xf3\xa8\xa6\xa3\x54\xc4\x7f\xb8\x38\x5e\xaf\x55\xa0\xf7\x72\x9c\xda\x06\x35\x1a\x55\xd6\x18\x93\xbb\x46\x32\x44\x85\x27\x7a\xfd\xfe\xe1\x3e\xe2\xe4\x31\x5e\x68\x61\x07\x93\x80\x54\x0a\x80\x76\xa9\x83\xd1\xee\x20\xc4\xf7\xab\x39\x68\xca\x66\xfc\x80\x8d\xaa\x9d\x5e\xf5\xda\x49\xcf\x90\xe1\xcd\x1b\x47\xe7\x17\xfd\xe3\x77\x67\xe7\x6f\xfe\xbb\x7f\x78\xa5\xee\xa2\xe4\x81\x7d\x96\xcf\x71\x5b\xb0\x0f\x8b\x05\xe6\x87\x79\xa1\x02\xc4\x9b\x40\x4a\xb2\x33\xd4\x78\x55\xdc\x4d\x5f\xbf\x92\x5d\x92\x29\xd5\x9c\xcd\xeb\x46\x2b\xa3\xab\x55\xe3\xa7\xcf\x2f\x47\x3b\xbb\xbb\xbb\xbb\x3f\x7d\x7e\x89\x1b\xa0\xd5\x78\xf5\x4d\x58\xee\x95\x5c\xd5\xd7\x0d\x75\x18\x7b\xcb\x5a\xfe\x04\xbd\x44\x67\xf5\xad\xa7\x5a\x03\x26\x95\x76\x9d\xb1\x43\x59\x12\x12\x6d\x9d\xca\x10\x57\x3c\xa4\xdc\x92\x04\x31\xc8\xa2\x2d\x19\xa5\x17\x20\x90\x5a\x7c\x1a\x70\x48\x86\xeb\x8c\x40\x89\x89\x30\x47\x4c\x4a\x47\x05\x62\x83\xee\x70\x2b\x22\x80\xca\x62\x3c\x13\x8a\x41\x37\xca\x00\x9f\x22\x52\xad\x24\x70\x22\x4b\xb3\x99\x62\x6a\x92\xa8\x2d\x89\x88\x3f\x67\x6a\x80\x0d\x07\x75\xfd\xfe\xd5\xd9\x56\x1b\x00\xbe\x40\x08\x89\xea\xde\x04\x56\x05\x6f\x0d\x4a\x3b\xeb\x0c\x83\xfd\xdf\xda\x91\x55\x72\x19\xa5\x2b\xeb\xb2\xc0\x33\x5c\x14\xc6\xb5\x0b\xd9\x40\x39\xd6\xd5\xab\xd1\x00\x4f\x78\xb2\x3e\x77\xa7\xb9\xfd\xb0\xd3\x85\x0c\xd1\x7d\x1d\x8f\x97\xb0\x65\x61\xd6\xbd\x27\x4c\xda\x5e\x32\x1b\x6f\xb1\x66\x93\x6d\x13\x63\x5f\xc9\x26\xdb\x57\xf8\xb3\x50\x21\x02\x77\x3a\x31\x7e\xe8\x48\x48\xc1\x30\xd4\x10\xb5\x62\xe7\x0b\xf6\x70\x99\xcc\x95\x34\x9b\x22\x38\x17\x12\x7d\x00\x98\x1b\xac\xea\x51\xa5\xaa\xe0\x18\x6d\xa2\xad\x90\x60\xf4\x18\x6c\xcf\x5e\x17\x8e\x71\x31\xea\x75\xa1\x20\x62\x86\x7b\xdd\x35\x64\x38\x12\x5e\x94\xf5\xde\xde\xa0\x71\xd3\x80\x8d\x1b\x32\x95\x7f\x67\x6c\xf4\xe9\xdf\x4b\x26\xb0\x7c\x60\xe3\x07\xf9\x1f\x6f\xc0\xc6\x48\x71\x93\xf2\x07\x1b\xcb\x6f\x63\x89\x73\x12\x65\x61\x63\x3c\x93\x7f\x84\x8a\x41\x6f\x02\xd1\xcb\x8f\xb7\x5d\xf9\xe7\x85\xfc\xf3\x52\xfe\xf9\x56\xfe\xf9\x4e\xfe\xf9\xb3\xfc\x83\x73\x55\x48\x36\x49\xe4\xbf\xb9\xec\x7e\x46\xd4\x1f\x75\x23\xeb\x54\xb9\x8d\x39\x16\x79\x03\x36\x28\x53\x90\x30\xd9\xdd\x42\xfe\xe3\x12\x10\xbe\xbc\x91\x40\x16\xf2\xdf\x3c\x9f\xc9\x8f\xc5\x22\x97\xd5\x0a\xc1\x99\x6a\xa6\x10\x9c\x7c\x92\x65\x8b\xe5\x8d\xfa\x2b\x6b\x2b\xed\xb8\xfc\x5f\x02\xbe\x94\xff\x64\xd5\xbb\x9c\x37\x86\xed\x09\xe3\xfd\x7c\x94\x4c\x65\xcf\x54\xdc\xed\xae\x61\x9f\x73\x8c\xbe\x19\xfc\x24\x76\x7f\xe2\xdb\x3f\x7d\x3e\xe8\xfc\xb4\xec\xfe\xf9\x2f\xf2\xef\x5f\x3a\xfd\x9f\x96\x72\x71\x76\xd5\x7f\x07\xf2\xef\x8b\xbf\xa8\xbf\x7f\x55\x7f\x8f\xe4\xdf\xef\x8e\x7e\x5a\xbe\xec\x74\x3a\x3f\x2d\x8f\xfa\x47\x47\xc3\x6f\x60\x81\x51\x63\x49\xd5\x4d\x10\x1e\x97\xd6\x93\x63\x36\x52\xc7\x92\xb6\x83\xb6\x4f\xda\xea\x12\xc3\x19\x7e\x42\x7c\xb3\x15\x2c\x4f\xaa\x0c\x91\x3e\x68\x74\x2b\x3d\xd0\xd2\x76\x0f\x71\xc1\x8a\xaf\xed\x32\xfc\x1c\x74\x98\xa4\x70\x91\xf9\xbb\x5f\x22\x19\x3a\xdd\x18\x6d\x72\xef\x62\x51\x48\xc9\x27\x3c\x51\x11\x42\x1c\xaf\x56\x8a\xe3\x91\x87\x1f\xe4\x88\xe0\x81\xb0\x67\xe0\x10\xf4\x32\x8a\xfc\xaf\x3b\x5d\x00\x69\xb3\xb9\xa3\x39\x2c\xb5\xaa\xfa\x42\x51\xd1\xf8\x3e\xe7\x8c\x67\x8d\xc3\x9c\x52\x26\xb6\x35\x90\xdb\xf9\x76\xa3\x85\x5b\x0d\x49\x38\xc8\x18\x6f\xe7\x74\xfb\xf2\xe3\xbb\x6d\xa3\x87\x6c\x84\xb9\x3a\xd3\x53\x70\x76\x99\x71\x0c\xb1\x9b\xec\x4d\xb3\x15\xa7\x4a\xab\x4d\x53\x27\x0f\x1a\x1c\x11\x2d\x48\x93\xb5\x53\xd4\x33\xe4\xf0\x27\x21\xc5\x33\xc0\x40\xc3\xf2\x27\x96\xee\xea\xa9\x04\x70\xd1\xf0\xae\xea\x52\xc1\x05\x27\xc3\x73\x5b\x73\x3e\xc3\xc9\x0c\x6a\x1a\x81\xfe\x17\x70\x89\x11\x12\xa4\x33\x85\x6c\xc6\x1b\x9d\x41\x84\x3e\xcf\x2a\xc9\x1e\xde\x95\xb4\x03\x2f\x93\x69\x07\x5e\xfa\x69\x07\x5e\x9a\xa0\xbd\x92\x41\xf5\xbb\x90\xb8\xab\xda\xee\x85\xef\x0d\xb2\xd1\x75\x36\xc3\x60\x0b\xb7\x2b\x79\x34\x68\x99\xce\x08\x51\x9c\x15\x8a\xbb\xe2\x48\xe8\x9f\x90\x2b\x5d\x45\x2a\x01\x07\x5f\x83\x6c\x89\x57\xab\x6c\x89\xcb\x2c\x76\x71\x46\x9a\xdf\x9c\x65\x71\xd4\x92\x42\x5e\x92\x18\xcd\x5b\x3e\x97\x57\xd9\xb8\x34\xe9\xe9\xab\xa4\x67\x4c\x37\xa0\x03\xa9\x06\xdf\xb3\x18\x31\x0c\xa7\x98\x48\xd1\xe0\x7c\xc2\xc2\xf4\x90\x90\xfa\x1c\x72\xb9\x98\x6e\x72\x27\x38\x16\x3b\x84\xe4\xb2\x54\xa4\x67\x56\xe1\xb4\x48\xc9\x69\xf9\x3e\xec\xbc\xc2\xf5\x6f\x99\x10\x43\x6c\x3f\x23\x4f\xf1\xb7\x4b\x1d\xa7\xc8\xb5\x0c\x7a\x01\x07\x27\xcb\x9b\xcd\xb2\x9f\xb1\x0d\x8d\x29\x53\x4a\xd3\x5c\x05\x74\xd0\x73\x80\xb8\xd9\x61\x12\x3d\x9f\xd7\x1e\x8e\xdb\x53\x59\xc7\x4b\x3e\x0f\x03\x17\x23\x69\x3f\xd0\x60\xf4\x88\x27\xc8\x84\xb2\x06\x81\xca\x70\x45\x19\xc6\x62\x34\xc2\x5b\xb7\xd8\xec\xa2\x5b\xac\x5b\x5b\x60\x74\x8b\xcd\x76\xba\xc5\x6a\x3f\x8d\x31\x5a\x26\xf7\x14\x9c\x63\x34\x68\xfc\x9c\xdf\xe5\xc5\x88\x93\x85\xe8\x49\x96\xe7\xc6\xfe\x1e\xc2\x07\xf9\xf9\xa0\x01\x1b\x6f\xce\xdf\xfe\xd8\x80\x8d\x93\xe3\xb3\xbf\x35\x60\xe3\xf8\xf4\x9d\xfc\x7b\x74\x71\x70\xda\x97\x1f\x0f\x2e\xe5\x7f\x47\xe7\x17\xa7\x8d\x21\xbc\x93\x75\xfa\xa7\x6f\xfa\x6f\x1b\x43\x38\x95\x0f\xb7\x1c\x4f\x24\x9f\xc5\x47\x92\x7b\xcc\x47\x9f\xa6\x9c\x2d\x95\x90\x92\x2b\x28\x1a\x43\x78\x23\xcb\xc9\x02\xc3\x12\xcb\xae\xb1\x4f\x0f\x95\x35\x02\x76\x77\x48\xbe\x3a\xe9\x3e\x28\x68\x03\x55\xe1\xd5\xea\x1a\x67\x0f\xf2\x7c\x05\xcd\xe6\x35\xce\xa6\xa1\x12\xaa\x8f\x43\x3d\x95\x8b\x47\x9b\x5d\xe3\xec\x4e\x56\x53\xb5\x6e\x64\x21\xaf\xda\xe7\xb0\x9a\xe9\x7b\xb5\x32\xcd\x79\xf1\x6f\xe3\x4d\x22\xb7\x88\xa4\xa4\x2e\x96\x16\xf7\xe2\x0e\x4f\xb2\xcf\x7e\x20\x62\x17\x34\x72\x8b\xa9\xe0\xc1\x49\xd9\xbd\xe7\xf2\x9a\xe6\xe8\x3e\x2b\x05\x8a\x7b\x9c\x49\x31\xd4\x04\x39\x57\x84\x60\xc4\x66\x47\x8c\x7f\xb8\x38\xc9\x72\x00\xaf\x71\x36\xc7\x90\x00\xb0\xdf\x58\xd2\x22\x9f\xe0\x5e\xa3\x95\xf7\xfa\xba\x56\xf0\x2e\xf7\x02\xf0\xe2\x94\xfd\x4a\x14\x9a\xc2\xf1\x3c\xdb\x84\x6e\xe3\xfd\xac\x40\x02\xe6\xa8\xb1\xe0\x6c\xd1\x50\x2c\x97\x68\x0b\x76\xc2\xee\xed\x08\x80\x2e\x66\x8b\xc0\x02\x51\x15\xa9\x42\xd9\x7a\xc8\x47\x01\xa0\xfe\x64\x0c\x4e\x1b\x85\x78\x98\x61\xf9\x54\x84\x2d\xad\x56\x19\x2f\x75\x1c\x90\xa0\x02\x66\x0c\x1d\xe0\x01\x0f\xe7\x6c\x08\x9a\x4d\x36\x20\x61\xe5\xa1\xca\x46\x60\xbb\x05\xf0\xd1\x65\x8d\x1a\xf7\x0a\x28\x89\x68\x2f\x5f\xeb\x20\xc3\x18\x3d\x1e\x9f\xbd\xff\x70\xd5\x93\xd2\xd5\xbc\xb7\xd3\x81\xf9\x52\x4e\x2f\xe7\x52\xc6\xda\xe9\x40\x29\xad\xf4\x76\x3a\x6b\x78\xd9\x3f\xe9\x1f\x96\xe5\xd6\xf0\xfc\xfd\xd5\xf1\xf9\x99\xf7\xe2\xaa\xff\x8f\xab\x83\x8b\xfe\x81\xf7\xea\xe4\xe0\x4d\xff\xc4\x7b\x3e\x3a\xee\x9f\xbc\xbd\xec\xfb\xcd\x9c\xf4\xdf\xf5\xcf\xde\xfa\xed\x2a\x1d\x8f\xf7\xe2\xcd\x87\xab\x2b\xbf\xa3\x75\xb9\xa7\x3e\xe1\x58\x63\x52\xce\xd8\xa3\xd1\xf3\xf7\xb0\x32\x42\x0e\x6c\x91\xe9\x5a\x85\xed\xad\xf2\xd8\x16\x63\x4f\xb1\x62\x07\x88\x55\xd0\x18\x74\x51\xbe\x07\x72\x02\x15\x79\x2d\xa7\xd5\x5e\x1e\xab\x09\x97\x6b\xbb\xaf\x1a\x28\x20\x89\x55\x5b\x8a\x1f\x37\x9b\x0e\x78\xa4\xf0\xbd\x3e\x2a\x43\xc3\x42\x8f\x0a\x34\xd4\x32\x35\x34\x21\x68\xd8\xa9\x56\xcf\xa0\xd9\x6c\xa8\x5b\x11\x95\x73\x65\x5d\x69\xfa\xe7\xcd\x4d\x37\xf4\x42\x1a\x03\xef\x86\xe4\x8c\x47\x42\xc9\x67\xa9\xc6\x8e\x4d\x63\xde\xab\x0b\x73\xca\x9b\x01\x97\x7b\xec\x14\x47\xec\xb7\x19\xb7\x72\xf0\x3d\xc3\x4a\xfa\xc7\xf7\xdb\x87\xf2\x97\x42\xc7\xab\x44\xd6\xe6\xd2\xbb\x1e\xaf\xe1\x61\x2d\x7b\xf4\x3f\xc9\xef\x06\x29\xe2\x63\x2a\x82\xde\x4a\x96\xc5\x66\xb3\x65\xca\xdc\xce\x26\xb9\x71\x63\x01\x0a\xf3\x20\x41\xd4\xb3\xd7\xc6\xed\xeb\xeb\x80\x77\xe2\x90\xa9\xf0\xb4\xcf\x0b\x4b\xfd\x56\x27\x45\x8d\xfd\xff\x39\xa2\xf6\xc6\xcb\xf5\xb7\xe5\x32\x35\xf3\x0a\xbb\x45\x40\x8f\x87\x2c\x1c\xb1\x96\x2b\x57\x18\xc0\x8b\x7a\x06\xf5\xeb\x63\x2b\x40\xee\x47\x57\x28\xb7\x95\xdc\xc9\x88\x3e\x3b\x28\x42\x75\x5d\xf4\x2a\xb8\x58\xdb\xfa\xee\x56\xd8\x99\xb6\x39\xf4\x6c\x20\x6e\xbf\x5b\x75\x4a\x7e\x41\x3c\x70\x37\xe1\x76\xb2\xb7\xca\x1e\xcd\x39\x2c\x06\x89\x7e\x86\xc8\x83\x0c\x43\x13\xe3\xde\x38\x5a\xc4\x6b\x13\x83\x54\xcb\x4a\x07\x66\x60\x25\x2e\x88\xd2\x32\x4f\xdd\x04\x39\xdc\x53\x61\x38\xa3\xd6\xce\x2e\x33\x0a\x13\x10\x83\x5e\xa5\x68\x6a\x02\x4b\x94\x79\xff\xbf\x6f\xd3\x86\xcc\x7e\x38\x49\x0c\x5d\xca\xad\x47\xca\x5d\xa3\x37\xab\xb2\x9b\x0c\xda\x0b\x54\xa0\x0c\xf2\x27\x10\x26\xce\x07\x57\x76\x49\x64\x97\x52\x20\xb3\x5d\x6a\xd1\x0c\x8a\xb0\x4b\xdd\xa0\xd7\x2b\xb1\xb2\xe9\x05\x06\xf0\xec\xff\x9f\xe6\xdf\x7b\x9a\x0f\x31\x80\x3f\xff\xef\x9b\x66\x23\x38\x87\x34\xcd\xb0\x04\xf0\x3e\xfb\xb5\x94\xac\x8c\xc7\x0e\x39\xba\xcf\x30\xd8\xa2\x36\x4f\xbb\xa1\x5b\xbc\xc4\xc2\xe3\xff\xa5\xd3\xe3\x4e\x82\x9d\xae\xce\xbe\x50\x99\x2f\xc7\xf8\x28\x73\xfb\x5f\x47\xfa\xdb\xb6\x31\xa4\x32\xa6\xe9\xb9\x29\xd9\x56\x75\x54\xfb\x4e\x23\x78\xb5\x72\xd9\x4d\xca\x5c\x84\x65\x8e\x2f\xa5\x19\x37\xc9\x08\x1b\x8d\x5e\x2a\x61\x89\x2e\x53\xa6\x50\x91\x00\x9e\xd4\xea\xce\x83\x20\x3a\xc5\x8c\x89\xc2\xaa\xcf\x47\xa5\xed\x98\xb5\x67\xc1\xd6\x72\xcc\x86\x86\x59\x38\xeb\x2b\xc4\x4b\xcd\x3a\x67\x2c\x91\x16\x10\x26\xf4\x74\xdd\xa4\x9e\xae\xeb\xeb\xe9\xba\xc3\x5e\x27\xcc\x3e\xd4\xea\xda\xfc\x43\x9d\x3d\xfa\x0a\x71\xe5\xfd\x4c\x06\x74\x88\x26\x3e\x37\xaa\xee\x3c\x55\x32\x43\xfb\x07\xa8\xf8\x94\xd9\x63\x81\x67\x93\x9e\x58\x2b\xc5\x6c\x21\x8f\xa9\xf8\xbc\x94\x98\x5e\x81\xb5\x93\x84\xb5\xe3\xc3\xda\x91\xb0\x72\x0f\x56\x6a\x61\xd5\xf1\x61\x90\xce\xd8\xcc\x07\xa2\x02\x2b\x8f\x61\x8d\xf5\xda\x24\x65\x11\x2b\x11\x7c\x36\x09\x34\xf2\x6a\x0d\x07\x9d\xa1\x59\xb3\x4a\xa8\x9e\x4b\x3c\x9b\xd4\xd9\xc6\x4c\xb1\xc8\x3a\xa0\x5a\x45\x99\xef\xd5\xea\xaa\xb5\xbd\x67\xa5\x96\xb2\xf5\xaf\xdb\x2a\xba\x8e\x03\x1c\x21\x34\xd1\x78\x2b\x2a\xed\x38\x73\xc5\x3a\xa8\x1d\x56\x56\xaa\x96\xc6\x81\x1b\x0c\x8f\x4c\x89\xb0\xf2\x0d\xa1\x71\x86\x5b\x7b\xa7\xe4\x92\x5c\x87\xa5\xc3\x79\xc5\x5e\xf9\x0e\x8c\x67\xa7\xf4\x3b\xf9\xb2\x3e\xe2\x29\x7d\x46\x95\xc4\xec\x61\x2f\x05\xb0\x49\x9d\x5c\xad\x97\x9a\x3a\x5c\x9a\x7f\xd9\x6f\x89\x9a\x9e\xcd\x69\xb5\xaa\x4f\x54\xaa\xeb\x95\xac\x1a\x2e\x98\xd7\x40\x74\xaf\x72\x4b\x66\xe3\x44\x2d\xbd\xbd\xca\xad\x61\xd3\x1a\x57\x88\x5c\x44\xe2\x62\x02\x57\x45\xf0\x60\x74\x64\x92\xe1\xd7\xc8\xeb\xc6\x58\x23\x94\x77\x6d\x17\x39\x9d\x62\x73\xe1\xf6\xe6\xc3\xbb\xde\xf6\x48\xdf\xba\x4d\xb1\xd8\xfe\x83\xbe\x71\x9b\x70\x36\xdf\x56\x46\xc0\x7b\xdb\xba\x3e\x32\x11\x6d\x83\x36\x13\xfb\x1d\x0f\x43\xf0\xaa\xe7\xde\xff\x28\x80\x01\x64\xc8\x1a\x16\x1e\xd5\x9d\x42\x16\x8b\x4d\x2c\xc6\xb1\x8d\xb3\xa9\xfd\x2e\x0a\x34\x18\xc2\x74\x01\x13\xae\x31\x51\x22\x8c\xe7\x58\xdf\x52\x58\xae\x2c\xa0\xef\xa5\xca\x0c\xe6\x95\x2f\x95\x26\x35\x6f\x90\xaa\x61\xbe\x54\x6a\x8c\x5d\xb0\x84\x3a\x8f\x7c\xe7\x0a\x95\xda\xf4\x15\x10\x6d\x6c\xb1\x24\x9c\xd6\x49\x3f\xca\x72\x6d\xdd\x52\x52\x1d\x54\x46\x14\x76\x10\x0d\x2b\xdd\x41\x4d\xe8\xd4\x24\x11\xab\x59\xfe\x30\xbc\x40\x2d\x0e\x58\xe0\xd2\xfd\x87\xeb\xbc\xb1\xfb\x34\xea\xd4\x40\x11\xe1\x4f\x1a\x88\x31\x19\x9b\x10\x18\x55\x8a\xe8\x21\x41\xba\xb2\xf6\x65\x4b\x46\xa2\xab\xba\x4e\xa0\x34\x66\xc0\x5b\x94\xc2\x09\x2f\xd5\xed\xc4\xcf\x70\x2b\xd0\x64\x80\x87\xf0\x76\x80\x87\x9e\x37\x9e\x30\xf7\x30\x28\x8d\x1c\x70\x8c\x52\x68\xe1\xb1\x6a\x0b\x3f\x5c\x0d\x47\x8b\x01\x1d\xc2\xf1\x80\x0e\x3d\xe7\x28\xae\xfb\x98\xa3\x78\x6e\x54\x33\xda\xdd\x68\xee\xbb\x1b\xcd\x07\x64\xa8\xcb\xb1\x07\x93\x0e\xf3\x01\x6d\x44\x27\x78\x57\xf3\xdd\xae\xa1\xea\x8a\xa1\xce\x1e\x7b\xf5\x60\xbb\x62\xca\xb3\xe9\x61\xc0\x86\xb0\x40\x77\xf2\xbf\xbc\x4d\x74\xbd\xac\xb0\x09\x2d\x9f\x83\x46\xf0\x66\x63\x31\xdd\xb9\x8e\xb3\x33\xf5\xe3\xec\xcc\xd0\x74\xb0\x1c\xc2\x11\xba\x91\xff\xcd\xac\x8f\xde\xc8\x18\x04\xc0\x5f\x36\x58\xc7\x58\x5e\x51\xc7\x1f\xf7\x82\x20\x53\x84\x2b\x91\x91\x35\xed\xbe\x16\x3c\xa7\x45\x6e\x6e\xb6\x5d\x34\xcc\xb8\x05\x2b\x18\xc4\x8d\xa4\x8d\xde\xd3\x59\x27\xea\xb2\xc9\xcd\x53\x4c\xe5\x41\x0c\x40\x0d\x9b\x10\x03\x5a\x69\xe8\xed\xf9\x69\x5d\xdd\x78\x30\x11\x8b\x83\xa7\x84\x56\xcc\x83\xc2\xf9\xc2\xf7\xdb\x47\xb8\x42\x02\xea\x29\xb9\x57\xd9\xdb\x6f\x55\x86\x6e\x23\xb5\x8e\x1a\xf9\x60\x9d\x38\x7f\x05\x45\xf6\x9b\xac\x8b\x81\x5d\xdf\xc1\xd3\x24\x37\xd5\x7e\x14\x88\x39\x39\x09\xb5\xc4\x34\x9a\x03\x53\xee\xb9\x24\x15\xc5\x6d\xd4\xed\x05\xdb\x42\x16\xb5\xeb\x14\x00\x47\x2c\x1e\xaf\x41\x30\x73\x4f\xf5\x2b\x0c\x56\xc0\xc6\x34\xae\x1e\xa8\x95\x5c\xae\x3e\x8e\xfb\x63\x72\x49\x59\xe1\xf7\x4f\x1a\x9d\x38\xa1\x55\xdd\x4b\xde\x13\x3a\x66\xf7\xce\x94\x04\x52\xf4\x18\x6f\x3c\x75\xb1\x33\x56\x41\x39\xe2\x7d\xa5\x3e\x8d\x4c\xf2\xab\xdf\x3e\x07\xff\x2f\x18\xc0\x37\x4f\xea\x3d\xb4\x4a\xb2\xb2\x1e\xdf\x26\xd7\xe3\x5b\x7f\x3d\xbe\x1d\xf6\x76\xbb\x90\x55\xeb\x7e\x97\xac\xfb\x9d\x5f\xf7\x3b\x59\xd7\x70\xc9\x22\x1f\x7d\xb2\x3a\x97\x5b\x9c\x2f\x2c\x4d\x5d\x70\x36\xe5\xf9\xdc\xaa\x5a\xf0\x67\x81\x39\x75\xa1\x8b\x17\x23\x44\x4c\xb0\xe3\x1c\x31\xc3\xf1\x2d\x39\x57\x91\x63\x2e\xc9\x2f\x18\x25\x33\x16\x3b\xf7\xb8\x0a\x05\xf3\xa2\xb0\x98\x66\x2d\xab\x13\x7d\xd0\xcf\x93\x45\xf0\x79\x62\xb8\x02\xfd\x54\x2c\x76\xbb\xe1\xce\x58\xb0\xc5\xa6\x6e\x8b\xa0\xfa\x64\xb1\xdb\x75\x63\xf3\xde\x6b\xf5\x44\x7d\xb7\xf2\x7b\x37\xda\x92\x2a\x66\xd8\x3c\x9f\xcd\x9e\x3d\xea\x0a\xe0\x1b\xaa\x87\xf0\xa9\xb2\x24\x26\x0a\x53\x26\x58\x9d\x1a\x64\x31\x6a\xe1\xdd\xea\xda\x6d\xd9\x25\x8e\xb4\x21\x12\xfb\xab\x44\xcf\x02\xb1\x18\x39\xd4\x70\xc8\x24\xe7\x24\x1f\x8f\x79\x85\x04\x6a\xdc\xb8\xfa\x3a\xc8\x64\x8f\xa9\xe6\x2a\xf3\x63\x41\xe1\x79\x58\x5c\xd9\x04\x89\x5c\x54\x6c\x6d\x3d\x3a\x2c\x87\x83\xfc\x9d\xb0\x45\x26\xd9\xae\x52\x92\x02\xcf\xb6\x65\xcb\x78\x27\x7a\x05\xdb\x4c\xc5\x4e\xca\x30\x50\xea\x3d\x3f\xcc\x75\xb9\x3d\x68\x20\x45\x2f\x46\x2d\xb9\xb3\xca\x9a\x21\xbc\x36\x42\xc0\xf9\x32\x36\x36\xf3\x74\x29\x4b\x15\xcc\x98\x26\x0f\xad\xe0\x7b\x45\x61\x4f\x8a\xd3\x7c\x74\x4b\x28\xde\x0f\x1a\x33\x2f\x33\x0c\x7a\xc1\xfb\xcb\x87\x42\xd1\xc1\xfa\x6e\x4c\xcd\x60\x71\x4d\xae\x4b\xac\x03\x85\xe9\x74\x97\xdf\xfd\x67\x2f\x98\x85\xd2\x79\x56\x27\x9d\xfc\xee\x2f\xe1\x77\xb3\x8b\xdd\xe7\xbf\x56\xaa\x97\x9b\xc5\x16\xfa\x73\x27\x6e\xa3\x5a\xe6\xbb\xb0\x8c\x1e\x5d\x9b\x2d\xba\xe6\xfb\xb7\x7f\xad\x7e\x4f\x6c\x3c\xdb\xda\x8b\xa0\xb4\xf2\x04\xf5\x5b\x7b\xf1\x6d\xf0\xdd\x9c\x22\xf6\xe3\x77\x89\x8f\x57\xb6\x81\x75\x7a\xbe\xcd\x8a\x44\x0b\x9b\xbb\xef\x99\x80\x18\x9a\x99\x37\x0c\xfb\x87\xa7\xcc\xd9\x95\x4b\x65\xd2\xf3\xf8\xb9\x5e\x91\xb2\x9b\x7f\x7f\x7d\x37\xcf\xf7\xa4\x84\x3f\x6c\x3a\x67\xed\xed\x82\x9f\x94\xc5\x93\x29\x98\x27\x35\xb8\x97\xa3\x25\x2f\x18\xbf\x54\x67\xa3\x4a\xe4\xd6\x56\xbf\xf5\x47\xe5\xbc\x51\xf3\x6d\xe1\x65\xa8\x91\x5d\x9b\xc3\x93\xde\xd9\x23\x76\xcc\xe6\x28\x29\x4a\x84\xe9\xc0\x3d\x11\xc3\xca\x0b\xbe\xf3\xc0\x84\xf1\x63\x9d\xeb\x4a\x47\xb1\x49\x9a\xf4\x4b\xe0\x64\x93\xf2\x9d\xbb\x43\x13\x81\x0d\xaa\xe3\xa7\xaa\xc1\x2d\x21\x95\xb8\xc6\x71\xb1\x9c\xd7\xd9\x3d\x07\x1d\xc4\xde\x9c\xd4\x33\xf6\xad\x36\xae\xdf\xa9\xa7\x2b\x9e\x8f\x3e\x61\x9e\x09\x10\x47\xf6\xaf\xc6\xa9\xab\x55\xcb\x7a\x65\x22\x79\x29\xd4\x59\x87\xd5\xca\x95\xb4\xd4\xb9\x72\xfa\xd6\x39\x64\x78\x18\x62\x5c\xe4\x2b\xaf\xd3\x4d\x86\x53\x51\x7b\x31\x10\xcf\x8e\x9c\xeb\x8f\x46\x91\x6c\xd6\x12\x24\x78\x0d\x25\xbe\xe4\x37\x5f\xd3\xfa\xbb\xa7\x5b\x57\x75\x4e\x48\x51\xef\x38\x90\x6c\xf9\x6f\x61\xcb\x10\xd7\xb6\x6d\x6a\x25\xb8\x82\x67\xdf\xdd\x35\x9b\xfe\x93\xb5\x43\xaa\xae\xf4\x56\x68\xa0\x4a\x55\x00\xc7\x28\x58\x2c\x06\x50\xac\x56\x4a\x96\xd3\xdb\xf5\x8d\x0a\xb5\x93\xa9\xd8\xe4\x4a\x8e\xb9\x66\x0b\x4c\x2d\x52\xc7\x3d\x59\x75\x25\xae\x60\xd5\xc6\xd5\xb9\xd1\xcd\xb5\x95\x33\x30\xf9\x05\xfb\x69\xec\xae\xaf\x55\x46\xab\xda\x1e\x25\x26\x86\xbd\x79\x20\xfa\x1d\xc6\x85\xca\x66\xeb\x4b\x79\x09\xd8\xea\xf8\x36\xdd\x5b\xe9\x5c\xb3\x55\xb7\x4b\xa5\x98\x91\x02\x34\xd5\x7e\xe8\xb9\x31\x8f\x3d\x78\x60\x80\xb6\x89\x88\xae\x89\x3d\xec\x31\x7a\x8e\x32\xa2\x0a\x90\x46\x00\xbf\x0e\x12\x8f\x61\x97\x9b\xe9\x4b\x4e\x94\xf0\x60\x50\x92\xb4\x39\x10\x88\x3c\x04\xfc\xc4\x76\xd1\xac\xa4\x87\x50\xf2\x7e\x72\x46\x2a\xae\x06\xfa\x84\x0c\xbc\x0d\x02\x4e\xde\x4b\x8b\x56\x21\x6d\xf7\x64\x36\x3b\x0c\xf2\xa6\x41\xcb\x3a\x95\x7e\x6c\x95\xfd\x1b\xa4\x88\x4b\x9e\x47\x95\x2d\xfc\x22\xb9\x85\x5f\xf8\x92\xea\x0b\xe3\x26\x63\x16\xa2\x9a\xc7\x2e\xe5\x32\x95\x28\x97\xf6\xd0\x58\x04\xcb\x4a\xc1\x56\x79\xae\xfd\x28\x77\xff\x56\x9a\xa6\x71\x6d\x99\x11\xed\xe9\x9a\xfe\x6c\x57\x2e\xfa\xdc\x73\x26\x73\xc3\x72\x07\x07\x8f\x8d\xa5\xf2\xb7\xcc\x18\x0a\x46\x9a\xaa\x83\xf1\xd8\xa3\x67\x55\xd9\xcd\x92\x9a\x0a\xdd\xab\xb6\xe4\xd1\xbf\xda\xcd\x69\x9b\xab\xd2\xcb\x98\x06\xba\x12\x1b\x9d\xda\x2a\xed\x19\x97\xb6\x44\x6b\xe7\xcf\xa0\x1d\xb6\xb9\x90\x44\xc5\x8d\xc5\xe8\x5f\x59\x4a\xdb\x4c\x94\x5b\x30\x54\xc5\xb9\x14\x9e\xf5\x94\x2c\x18\x94\x41\x70\x3f\xf5\x67\xbc\x9e\xfe\xd7\x3a\xfa\x3b\x66\x73\x7b\xe4\x39\xe3\x32\x14\x13\x03\xe5\xfc\x5f\xf1\x13\x74\xa4\x3a\xa4\x26\x14\x12\xc9\xc7\x92\x34\x2c\x4f\xf8\x24\xce\x13\x5e\xde\xb8\x74\x76\x8c\x89\x54\xbc\x14\xb6\x97\x23\x9e\x4f\xd3\xa7\x8e\xba\x43\x48\x38\xf5\xec\x67\x02\xfd\x23\xec\x8f\x42\xec\xf9\x35\xc1\xaf\x84\x50\x80\xde\x3f\xc3\x52\xc1\xca\x79\x2e\xf7\x35\xab\xa7\xe2\x0d\x3c\x3d\x63\xa5\x0f\x69\xa2\x37\x7f\x2d\xe3\xbd\xaa\x7b\x31\x41\x79\x2b\x9d\x79\xa8\xa2\x42\x72\xe3\xf1\x21\xa3\xc2\x9c\xd5\x21\x5a\x9a\xbd\x1b\x1f\x48\x41\xfb\x9b\x50\x71\x49\xab\x3d\x6c\xc0\x7f\x10\xf3\x03\x41\x47\xf5\x18\x80\x82\xf9\xb7\xe5\xbe\x6e\x38\x15\x6c\x4e\xf4\x60\x49\x10\x45\x31\x1e\xd4\xf4\x18\x9f\x4e\xe1\xac\xd4\xa2\x82\x8f\x2f\x15\x82\x1c\xcf\xed\x93\xad\x18\x8a\x92\x1a\xfb\x93\xbe\xc0\xf5\x74\xaa\xf4\x0b\xae\x41\xf6\x54\xdb\xbf\x82\x5a\x95\xfd\x7d\x21\xb1\xda\xe8\x29\xea\x76\x5e\xe8\x30\x1a\x73\x78\x49\xef\xec\xc0\x76\x33\x79\x5c\x7b\x2d\x58\x63\x94\xd0\x50\x26\x4a\x94\x99\x06\x2f\xf2\xc8\x48\x81\x92\x08\xa5\x1f\xb5\x15\xd9\x40\x07\x83\x63\xc8\x6a\x2a\x82\x6b\x24\x15\xa6\xc5\x8f\xaa\xc1\x94\xb1\x97\xd0\x46\xd0\xb6\x0a\x80\x6c\xe3\xb5\x90\xcb\x3f\xb9\xe1\x4a\x28\x21\x39\x5b\xa4\x58\xaf\xa1\x6e\xc7\xc3\x8a\x2f\x6e\xcb\xab\x5b\xde\x38\x7d\x7c\x4a\x3d\xa5\xb5\x1a\x61\x74\xb5\x30\x3b\xa3\xf7\x38\x2e\x59\xa8\x22\x48\x52\xae\x02\x6d\xa4\x6f\x44\xc6\xf1\x5d\xa2\xb3\xaf\x40\x95\x36\x55\x50\x86\x66\x53\x58\x3b\xa7\xd2\x7c\x42\x04\xe6\x13\xca\x6e\xc2\xda\x24\x44\xcc\xe5\xf3\xc3\xa1\x7d\x4d\xd0\x37\xe3\x2f\xa2\x7e\xfb\xb1\xbc\xbe\x3c\x18\x9c\x69\x49\xfe\xf4\x82\x80\x3d\x4f\x1e\x4d\x90\x2d\x6b\x34\x64\xd6\xa2\xd5\xfa\x02\x79\xc8\xd4\xd9\xdd\x7d\x2e\x0b\xdb\x41\x08\xf9\x35\xad\xdb\x8f\x9a\x10\x9b\xce\xd4\xe0\x12\xbe\xdf\xfe\x80\x4b\x85\x82\xc6\x28\x7c\xbf\xfd\x6f\x5c\xa5\xaa\x9b\xd8\xf0\x2f\xe8\x13\xfb\x7d\xc5\x67\x42\x28\x09\xd4\xd8\x0b\x59\x1c\xaf\xbc\x59\xad\x02\xe3\x32\xf3\x36\x6d\x58\x64\xd5\x1b\x41\x1f\xd6\x21\xcc\xc3\xa8\xe8\x9c\x92\xac\x95\x51\xfb\xfe\xf8\xbf\xc2\xc6\x3f\xb1\x83\x13\x1b\xdc\x8b\x3a\x0d\xb1\x51\xe9\x28\x83\xfc\x8f\x18\xc0\x77\xff\x2b\x06\xc2\x71\x91\x8a\x7b\xec\xa2\x74\x47\x94\x88\x36\x9b\xd4\xa7\x44\xda\xc6\x9c\xfa\x39\x48\x7d\x6b\x89\x8c\x0e\xc4\xd0\x4a\xd8\x76\x06\xb6\x2a\x14\xe4\xeb\xa9\x2b\xe4\x6e\x3e\xff\xb6\xe1\x3e\x20\x49\xd8\x55\x08\x6d\xa5\xd8\x14\x70\xf3\xe7\x67\xd2\xf0\xb0\x9a\x8d\x74\xa4\x48\x51\x82\xcf\xc2\x1e\xb9\xfe\x5d\x09\xb6\xa7\xf6\x2a\x81\xbb\xc5\xf9\x38\x73\x4b\x81\xe5\x8e\xfb\x22\xd2\x9d\x6c\x54\xe4\x64\x16\x35\xfa\x45\x64\x3c\xd6\x3d\xd6\x51\xe8\x67\xd1\xe4\xda\x62\x31\x21\x8d\x0b\xd6\x51\xc3\xb8\x5c\x95\x96\xa9\x12\x92\x48\xfd\x01\xa3\x17\x7f\xfe\xcb\xb7\x2f\xbf\xfb\xf6\xbb\xef\xe0\xdf\xeb\x4d\x90\xf5\x2c\x7e\xa5\xdb\x87\x3c\x31\x98\xbd\x87\xfa\x5a\x3f\x97\xc1\x50\x0b\x30\x41\x2e\xeb\x9f\x8b\x34\xce\x2b\x33\x76\xcf\xcb\x26\x0a\x5f\x8a\xb3\x06\x5d\xce\x6f\x30\x2f\x3d\x83\x44\xb3\x59\x79\x47\xf7\xcb\x1e\x8d\x65\xbc\x8a\x7d\x93\xaa\xec\xfc\x91\xaa\x95\x8e\x38\x9b\x67\xc2\x5c\x53\xeb\xf7\xa3\x19\xa3\xce\xcc\xfe\xe7\xc2\x6b\x3c\x66\x9b\xe5\x87\xd4\xbd\xb8\xf5\x1a\x1a\x0c\x8d\x0d\x29\xde\xa3\xaf\x84\x36\x1e\xf5\x4c\x36\xa6\x58\x64\x7e\x64\x9b\xd8\xd4\x6b\x91\x14\x0b\x0c\x90\x6c\xf1\x90\xb8\x46\xbf\xe7\xa4\x62\x63\xa7\xcd\x9f\x82\x74\x3d\x2e\xe0\x85\x35\x48\xd8\xe9\x6c\x99\x5b\x76\xeb\x8c\xa5\xef\xd9\x1b\x37\x8c\xcd\x70\x4e\x1b\x3d\xf5\x54\x86\x3e\xeb\xb9\x7a\xea\x83\x99\x74\x7b\x01\x8d\xff\xd8\x45\xa8\xd3\x6c\xee\x64\xa7\xb9\xb8\x6d\xe7\x37\x45\x86\xc1\xeb\x3f\x60\xb0\x65\xb2\x80\xd8\xea\xdd\xf5\x3a\x13\x60\x3f\x33\xb2\xdb\xcf\x16\xef\xdc\xe4\x07\xb6\xcb\x7a\xe8\x6a\x8c\x17\xf9\x7d\x86\xe1\xff\xe5\x20\x58\x3a\xef\x53\xc2\x80\x20\x1a\x5a\x04\x73\x34\x3f\xf8\x55\x47\xfd\x1f\x0d\xa0\x12\x81\x8c\x32\xb1\x5d\xcc\x49\x19\x5d\xcc\xab\xf0\xea\xd5\xcb\xd5\xb7\x6b\xe5\xbf\xf0\xac\xaa\x58\x56\x50\x51\x1f\xb7\xc2\xc9\xb7\xdf\xf7\xbb\xdd\xde\x4b\xfd\x8d\xa9\x38\x81\xee\x53\xf7\xaf\x5b\xe9\x15\xda\x7e\xf1\x9f\x6e\xd2\xeb\xf2\x31\xa9\x45\x48\x61\xd2\x45\x7e\x5f\x8f\x82\xde\x64\xc7\x68\xb8\x21\x0b\x82\xae\x3b\xc5\x42\xd5\x2c\x8f\xf1\x57\x9d\x7d\xb3\xe6\x83\xff\x2b\x86\xbd\x94\xfd\x87\x31\xfd\x78\xe9\x90\x47\xdb\x3d\x74\xbb\x21\x32\x6e\x77\x9d\xcd\x85\xba\x00\xd0\xc6\x11\xd6\x5e\x24\xc2\xc0\xed\x44\x47\xff\xd9\xb4\x5d\x39\xe3\x0e\xfc\xfa\xf5\x4b\x63\xd0\x61\x5e\xed\x66\xf2\x1d\x78\xce\xdc\x62\x3d\xc1\xb1\xdd\x51\x81\xab\x02\x83\x9e\x1d\xf5\xcd\xa3\x40\xc6\x61\xa5\xb3\x51\x52\xd6\x85\x36\x0a\xb7\xba\xf5\x19\xa6\x12\x2c\x2b\xc8\xfe\x63\xa3\xa5\xa1\x6f\x6d\xe6\x64\x59\x67\xe9\x57\x2c\x7c\x7b\x69\x95\xad\xb7\xc6\x91\x49\x16\x57\xf7\x0d\x7f\xc7\xb0\x03\x77\xb5\xb1\x1b\xc7\x85\x08\x43\xdd\x95\x8c\xa3\x2e\xeb\xb9\x20\x62\x9f\x3d\xa4\x1a\xfb\x32\x01\xb1\xe2\x0d\x2b\x3d\xc1\x0e\xc4\x2e\xf9\x52\xe2\x9a\xa4\x2a\x9e\x68\x83\x1c\xdd\x6c\xcb\xb8\x06\x2d\x2a\x3a\x52\x75\xc5\x42\x47\x6c\x8c\xc7\xc7\xf3\x39\x1e\x93\xd8\xab\x36\x6e\x4b\xa2\xf9\xe6\xe6\xce\x96\xbe\xfd\xcd\x46\x68\x12\xfe\x95\xe3\xe5\xa2\xca\x51\x7d\x25\x2f\x60\xba\xf1\xcc\x3b\xed\x39\xe3\x40\xa8\xd8\x23\xa7\x0f\xa9\xa0\x72\x8c\xfa\x0b\xf6\xdb\x81\xdc\xb5\xda\x8e\xd2\x90\xd2\x42\x1a\x3a\x9b\x2d\x76\x25\xfa\x26\x4c\x24\x49\x1d\x6b\x5c\x69\x71\x77\x37\x1e\x08\xc6\x9f\x7e\xb3\x91\x74\xb6\x36\x77\x9e\xf0\x29\xf8\x35\xc6\x0e\x21\x03\x67\xf6\x75\x1d\x08\xad\x8a\x73\x52\x3a\x7e\xcc\xd7\x5e\xd4\xda\xee\x2b\xa8\x4f\x5b\xa2\xb2\x67\x22\xfe\xb1\x12\xa1\xd1\x18\xe6\x2a\xae\x2d\x61\xe3\x2f\xdf\x2b\x1f\xe7\xe7\x35\x51\x67\x17\x69\x32\x8c\xd7\x1d\x73\xc5\xa2\xd5\x4d\xcc\xa6\xd7\xa4\xd8\xad\x36\x9a\x3e\x14\x74\x55\x73\x28\x44\x37\x02\x2c\x1a\xca\x13\xe3\x30\x13\x0d\x1d\x8c\x36\xb9\x87\x04\xfd\x9f\x4f\xd8\xc2\x69\x05\x30\x6f\xe7\xb3\xfb\xfc\xa1\xb8\xc0\x77\xf9\x8c\x8c\x73\x15\x08\xc3\xad\x31\x69\x36\x89\x5e\xc6\x09\xcf\xe7\xb8\xc6\xd6\xcd\xb3\x6a\x73\x39\x70\x90\xf0\xb2\xe3\x58\xc5\xba\x67\xc2\x66\xfc\x78\xa2\xbe\x11\x4b\x89\x18\xf8\x33\x1e\x55\x03\x33\xba\xac\x1d\x21\x78\x65\xd6\x28\xc1\x35\xb9\xda\xdb\xe1\x65\xf6\x93\x3d\x60\xec\x7c\x6c\x08\x24\x55\x33\x34\x04\xce\x00\xd8\xa7\x9e\xcd\xe4\x2d\x29\x0c\x5f\x5a\x76\x93\xb2\xb0\xa9\x58\x58\x7b\x1d\x68\xe3\xcf\xca\x0d\x50\x92\xdc\xfa\xbd\xd8\x8b\x7d\x2e\x52\x37\xfb\x8a\x4d\xa9\x60\x98\xee\x51\xe7\xf7\xe9\x7f\x1e\xe1\x85\xfe\x08\x6b\x86\xb0\x81\x0b\x51\x85\x37\x32\x21\x5e\x73\xd6\xcc\xcd\xf1\x22\xff\xbd\x29\x34\x93\xf6\x18\x74\xe9\x92\xbf\x3a\x63\x9b\xda\x16\x5c\x20\x0a\x0b\x93\xa0\x9c\xc3\xa2\xcd\x97\x54\x90\x39\x46\x04\x16\x26\x59\x9b\xba\xac\x6f\x40\x7d\xa3\xa4\xd5\x46\x85\x8a\x1f\x69\x7f\x2b\xc7\x6d\x8e\x29\xca\x61\x51\xe6\x7a\x2b\x9e\xa9\x33\x7b\x96\x7a\x46\xb7\x1a\x5b\x48\x86\xa1\x3d\x9e\xd4\xaf\x9b\x46\x02\xcd\x0c\xfd\x02\xa5\xba\xa9\xef\x2b\x61\x9e\x4c\x42\xa7\x50\xd5\xdc\x84\x99\x69\xb2\xdc\xcb\x13\x1a\x50\xbf\x4b\xef\x2a\x82\x3e\xe1\x48\x65\x5d\x0a\xf4\x32\xda\xcc\x75\x56\x83\xe8\x35\xea\x32\x03\x46\xe7\xa7\x43\x36\xa2\x53\x03\xaa\x14\x02\x0a\xd9\x96\x5f\x11\xb0\xd6\xb5\xe0\xd0\x6e\x69\xd0\x4a\xf0\x87\x06\x5c\xaa\x94\x4d\xcb\xf6\xb5\x4e\xfe\xe7\x6c\x2f\xaf\xf2\x69\x99\xb7\xca\x4f\x09\x08\xe0\x32\x8d\x57\x2a\xbf\x26\x09\x27\xc7\x18\xf8\x92\x5f\x74\x58\x53\x89\xa2\xf1\x3c\xc9\x8e\x8d\x3c\x60\x1c\x32\x55\x96\xec\x11\x9b\xdf\x10\x8a\x2f\xe5\x89\x01\xc2\xe5\x93\x94\x84\x7c\xcd\xb2\x1b\x85\xb5\x5f\x37\xa2\x34\x69\x95\xa0\xc7\xd9\x09\x1c\x66\x2c\x84\xf6\x1e\xd2\xf6\xc1\x5c\x51\x2e\xa0\xf5\x2a\xe1\xf8\x0e\x16\xe5\xa5\x30\x34\x29\xed\x0c\x8a\x6c\x91\xf6\x68\x86\x73\x9e\xd9\x90\xaf\x3f\x58\x9b\xe5\x6c\x29\xd1\x07\x72\x68\x25\x31\xf5\x0c\x00\x1c\xa1\xb9\xb0\x65\x04\x5c\xc2\x19\x80\x13\x73\xb8\x9d\x10\xfa\x09\x2b\xfd\xe5\xd6\xc8\x1e\x3f\x19\x2b\xb5\x10\x14\x3c\x52\x23\x45\xfd\xc3\x09\x3e\x99\xd0\xaf\x24\x61\x50\xab\x40\xe8\x54\x67\xcf\xf6\x68\xf9\xc4\x7d\xd5\x89\x44\xf1\xc6\xd2\x04\xac\xad\x99\x98\xa4\x54\x79\x69\xf5\x81\x8a\x35\x24\xeb\xec\xbf\x31\x80\x42\x3c\xa9\xe4\xd6\xee\x24\xf6\x90\x9e\xe7\xfc\x13\xe6\x56\xea\x53\x18\x56\x60\x2e\xd0\x4e\xd7\xbd\x79\x8b\x67\x58\x60\xf7\x66\x9e\x2f\x10\x96\x7f\x3d\xd3\x74\x42\x55\xd2\x3b\xb3\x66\xa9\x73\x5b\xdf\xc8\x87\x77\xcf\x5e\xea\x75\xdb\xb2\x5d\x61\x0d\xa4\x5d\x63\xdb\x07\x5c\x6a\x02\x3d\xd3\xc1\x5d\x97\x88\xec\x67\x33\xc4\x06\x64\x08\x12\xa4\xb0\xe7\x0d\x50\xc7\xaf\x46\x79\xfb\x6e\x7e\xc4\xb8\x1e\xa3\x04\x63\xa9\xd6\x59\xa5\x74\xd6\x79\xb4\xb9\xbf\xca\xb7\xe5\x2a\x13\xf0\xc8\x06\x78\x88\x26\x88\xb8\xb4\x5f\x1c\x0a\xb9\x41\x6b\x57\x2c\xc6\x1f\x57\x58\x2f\xf7\x64\x63\xe5\x49\xb9\x3d\xd7\x00\x46\x81\xa3\x27\xd0\xb3\x14\xb5\x2b\xd6\xa9\xb8\x3f\xe5\xa1\x57\x70\xf8\x7d\xce\xee\x9e\xb0\x05\x90\xeb\xc1\xa2\x15\xc8\x11\x19\xe0\x21\x2c\x10\x19\xf0\xa1\x0e\x0c\xb5\xf5\xdf\x59\x0e\xf9\x7e\xed\xdc\x03\xc8\x4c\x4c\xbe\x2c\x97\xbf\xa3\x84\x51\x45\x2c\xf6\x6a\x74\xab\xe1\xbe\x25\x4c\x14\x89\x01\x1e\x6e\x05\xee\xb4\xea\x02\x8d\x82\x10\x27\x6d\xb7\x14\x40\xdd\xea\xb6\xac\x58\x41\xec\x68\xe2\xc6\x8c\x56\xbd\xea\x34\x42\xa6\x49\x70\x16\xae\xc4\x6a\x15\x76\x60\x6f\x26\x69\xed\xa9\xe4\x05\x4c\xd0\x83\x1d\x7d\xf9\xb9\xe4\xda\x00\x60\x6b\x64\x0e\xa4\x19\x29\xc4\xae\x61\x76\x46\x6a\xe3\x06\x99\x52\x47\xea\xe0\xd7\x39\xf9\xf0\x18\xf1\xf6\xf1\xd9\xf1\xd5\xf1\xc1\x09\x1c\x79\x79\x06\xb5\x33\xdb\x04\x8d\xbe\xe0\x44\xb3\x07\xe3\x48\x9d\x85\xfe\xf1\x03\xb2\xc1\x4c\x65\x33\x9c\x0c\x01\x1c\xfd\x56\xe7\x9e\x3e\x59\x76\xb2\x67\xcb\xe7\x60\xb5\xf2\x1f\xb7\xdc\xd5\xa2\x9b\x0c\x2d\x92\xb8\x8c\x89\xf2\x4c\xb5\x09\x3b\x6d\x00\xcc\xdf\xe3\xa0\x75\xb2\x8c\x59\xce\x08\x0e\x7b\xd0\xf9\xa0\x6e\x39\xe8\x94\xd8\x94\x2d\xc1\x6a\x65\x05\x1a\x73\xa6\x32\x94\x11\x24\xa4\xd4\x05\x12\x59\x80\x88\x1f\xb5\x3e\xa3\x15\xa7\x1d\x06\xa9\xc7\x21\xda\xac\x8e\xc2\x18\xfc\x30\x00\x75\x92\x47\x9b\xdb\xf1\xf2\x81\x8e\x6e\x39\xa3\xe4\x17\xcc\xb3\x47\x91\x73\x29\x31\xe4\xd0\x8d\xa1\x57\xac\x41\xbb\x78\xa0\x23\x67\xf5\x1c\xf6\x17\xa5\x6d\x03\x49\xe7\x36\x3f\xec\x62\x34\xa9\x21\x85\xaf\xa3\x23\x66\x66\x68\x82\x11\x31\x5c\x04\x24\x92\x6f\x88\x9d\xaa\x32\xae\x38\x08\x17\xbf\x39\xe1\xe3\xe4\xc5\x96\xc7\x6b\xb7\x17\x4a\xfe\x42\x09\x3c\xc0\x1d\xd9\xfc\x39\x47\xb6\x8b\x80\x87\x2d\x67\xf5\xbd\x62\xb4\xdc\xc9\x6d\x04\x2e\x84\xcd\xcd\x6d\x32\x83\x71\x52\x26\x75\x35\xbf\xdc\x1d\xd6\x54\xb5\xec\x1c\x5b\x14\xde\xdd\x6e\x16\xb4\xae\x6d\xad\x8c\xd9\x4d\xc5\xa6\x77\x03\xd7\x98\x1c\xb5\xd9\x81\xf1\xeb\xaa\x9c\x6b\x48\x2f\xd9\x30\xc7\x5e\xac\x41\x4f\x79\x61\x3d\xdd\x45\xc4\xe5\x50\xef\xf2\xbf\xf0\x03\x0c\xfa\x07\x2f\x8f\xfc\xef\xec\xa4\x3d\x9f\x40\x85\x0a\xc4\xc7\x58\x37\xd2\xdb\xe9\xae\x41\x55\x5b\x23\x4a\x6d\x0d\x6e\x36\x5d\x46\x6a\xc5\xf2\x06\xde\xc8\x96\xcb\xb6\xc3\xda\x92\x5b\xf8\x9f\x1a\x35\xab\x9d\x89\x35\x70\x2c\x11\xb1\x4c\xff\x17\xdb\x23\xd4\x09\xbc\x5f\x64\x50\x96\x12\x78\xbf\xc4\x8a\x2c\x21\xf0\x3e\x1b\x0f\x39\xbb\x57\x09\xb8\xb7\x8b\x5b\xb6\x9c\x8d\xb7\x29\xbe\xc3\x7c\xfb\x56\x19\x22\x35\x62\x1e\xe6\x79\xc2\xaf\xb5\xfa\x29\x05\x58\x85\xae\xac\x0e\x5d\x83\x3b\x1b\xcf\x8f\x88\x15\x26\x82\x8d\x22\xcd\xb9\xb5\x08\xcf\xe7\x78\xac\xde\x2c\x85\xe7\x15\x56\xa8\x57\xa3\xe4\x0d\x7e\x74\xd1\xe3\x07\x75\x8c\xd5\x9e\xaa\x75\x5d\xc1\x73\x7f\x2a\x41\xa9\x7c\xd2\x9d\xc7\xaf\x2b\xda\x67\xff\xd6\xc3\x45\x94\x0a\x2f\xab\xb6\x3c\xa1\x41\x81\x21\xc5\x06\x7b\xbf\x5c\x28\x60\x77\xf3\x56\x77\x8b\xe9\xf6\x32\x0c\x0b\x98\x97\x11\xf3\x97\xa8\xd8\xe5\x5b\x31\xb8\xb6\xe8\x12\x72\x2b\x37\x7a\x60\xc3\x11\xb2\x56\x4c\x5b\x5e\xd9\xdd\x97\xff\x31\x82\xa3\x8a\xd9\x6d\xbe\xc1\x19\xb2\xec\x31\xaf\x5a\x5f\x73\x9c\xcf\x66\x6c\x94\xba\x37\x33\x11\xdc\xcb\x79\x50\x59\x02\x24\x05\xb1\xe1\xdc\x75\x2e\x55\x1b\xa0\xc0\xf5\x63\xc9\x80\x9e\x29\x8e\x44\xfb\x26\x2f\x70\x0b\x2b\x1b\x6a\x3d\xa4\x16\x75\x37\x6a\x7b\xe4\x35\xea\xec\x91\xdd\x5d\xc0\xf4\x2d\x0f\x69\xe9\x0a\x90\xb4\x38\xd8\x32\x95\x11\x86\xd4\xfd\x62\x12\x39\x10\x5e\x3f\xa1\x46\xb7\x54\xd0\x59\x25\x7a\x53\xa1\x7b\xdf\x5f\x88\x5e\xfc\xc5\x34\x23\x99\x85\xb2\xa6\xc6\x3d\x53\xe9\xd6\x54\xd2\x2f\x5d\x79\x83\xac\x8f\x22\x9f\xea\xef\x92\xed\xd4\x55\xf4\xb3\xc1\x97\xb2\x2f\x93\x8c\x61\xdc\x13\xf1\x50\x66\x38\x4f\x90\xf3\x72\x29\xec\x09\x68\x10\x44\x78\xab\xa2\xac\x9c\x16\x6c\xa1\xae\x89\x37\x45\xc9\xc9\xeb\xcc\x97\x7d\xae\xf2\x2a\x9f\x4e\xf1\x18\x64\x83\x78\x8d\xcb\x19\x18\x02\x67\x1a\x2d\x17\x68\xa3\xc6\xd6\x6c\x49\x59\xce\x55\x7a\xc6\x6d\x73\x65\xe1\x5a\x95\x55\x69\xbd\xfc\x0f\xbf\x07\xfd\xb2\x54\x07\xe7\x4f\x50\x38\x09\x11\xea\x40\x6f\x52\xed\x53\x4c\xfb\x94\x54\xe2\x3d\x72\x1b\xc3\x4b\xdb\x03\x3e\x87\xc8\x85\x77\x9b\xce\xbe\x4f\x82\x20\x52\x20\x18\x41\xc8\x17\x79\x12\x9d\xb7\xfb\xa7\xef\xaf\x7e\xbc\x3e\xb8\xb8\x38\xf8\xf1\x49\x22\x47\x9e\x09\x01\x81\x72\x0f\x90\xfd\xec\x2b\x01\x01\xbd\xec\x39\xb3\xb6\x99\x9c\xf9\x6c\xb4\x24\x0c\xd4\x47\x7e\xcb\x69\x68\x12\xe5\xcc\x5f\x3a\xab\x15\x7e\x8d\xe8\xfe\xa4\xc7\x75\xa0\xdd\xa7\xaf\xdd\x02\x2b\x83\xc2\x5c\x97\xba\x4c\xf8\x25\xc4\x31\x33\xc2\xf1\x02\x07\x91\x72\x63\x12\x6a\xcd\x07\x54\xca\xff\xd7\x9d\x80\x6c\x3e\x31\x20\x7f\x61\x76\x6d\x8c\x23\xb3\x36\xb4\xc5\xa0\x8e\x06\xc8\x54\x18\x40\xae\x43\xe0\x4a\x32\x4f\x00\x24\xce\x17\xe8\x29\x8c\xfd\x62\x32\xe1\x51\x23\xd9\xb6\x9b\xf4\xd5\x2a\xf3\x5e\xa3\x14\x1d\x89\xa7\x52\x6e\x4f\x4b\x08\xca\xd7\xe9\x1e\xf5\xd9\x8c\xe2\x41\x38\xa3\xb7\xb2\xfb\x80\x46\xd6\xcf\xb0\x3f\x13\xfe\x75\x6e\x26\xa0\x68\x51\x00\x20\x2f\x09\x48\xb1\x51\x6a\xfa\x75\x57\xd6\x8e\x8c\x1b\x84\xb3\xfb\xd1\x03\x2f\xdc\x95\xcf\xb4\x94\x89\xf5\x24\x30\xd8\x9a\x30\x76\x1f\xde\xc0\x44\x94\x90\x54\xa2\xec\xea\xa0\xf7\x35\x84\xbb\xac\xd7\x9e\xe7\x0b\x2f\xef\xc8\xf9\xe4\x39\x36\x08\x76\xd9\xca\x66\xec\xd2\x99\x19\xd3\x7d\xd9\x23\x44\x45\x84\x5f\x3a\x1d\x91\xa4\x3d\x68\x91\xf3\x02\x1f\x2b\xd7\xea\x6e\x07\x00\x49\x17\xc4\x6b\xc4\xf7\x27\x3d\x3a\x10\xa9\xa1\x9c\x4f\x52\xb3\x80\xad\x36\xc6\x70\xcc\xcb\xaf\x3e\x4f\xe2\xed\x67\xde\xaa\xec\x23\x21\xed\x34\x5f\x72\x71\x56\xfd\xf6\xbb\x1c\x33\x75\x44\xfc\x2b\x41\x7c\xea\x0c\x52\xc4\xf1\x99\x20\x72\x75\x0e\x71\x7b\x0e\xfd\xb6\x90\xba\x43\x2a\x5e\x1a\x66\xfb\xd3\x0d\x92\xb8\x11\x79\x72\xf5\x82\x22\xde\x8a\xda\x52\x24\xbe\x38\xbf\xcd\x53\xce\xeb\x2a\x07\x9e\x63\x6b\x0a\x97\x0c\xef\x79\xc6\x3a\x09\x5d\x64\x9d\xb9\x4e\xa0\x8b\xf4\x82\x93\x48\x32\x19\x1c\x3d\x04\x65\x62\xbf\x84\x48\x33\xb1\x66\x54\xc0\x83\x6f\xcb\x0e\x40\x71\x0a\xf6\xc0\x25\xd5\x24\xb2\x1b\x0f\xdc\x59\x7c\xe0\xaa\x4e\x9f\x38\x7b\xe7\x98\x4f\x93\x46\x7f\x65\x54\xe0\xe0\xf4\x2d\xa2\xd3\x57\xf7\xb1\xe1\xf8\x25\x36\x31\x10\x34\xd9\xb4\x49\x71\xc4\xd9\x2f\x98\x66\x02\x34\x9b\x4a\x3e\x30\xf5\x9a\xcd\x4c\xa0\xc1\x10\x40\x1d\x35\xb7\x30\xe1\x72\xc9\x80\x0d\xa1\x9a\x1a\xe1\xa6\x2c\x07\xcd\xa6\xca\x97\xa7\x2e\x5e\x72\x1b\x88\x28\xc3\x3e\x9d\x65\x43\x60\xce\x6f\x4b\xf4\x9f\x41\x3f\x44\x02\x43\xd7\xb1\x9d\xcf\xe5\x03\x15\xb7\x58\x90\xd1\x59\x10\xce\xcf\x27\x76\xda\xe4\x29\xb6\x76\x14\xec\x40\xd4\xd4\x69\xfc\x57\xa3\x85\x7f\x43\x79\xa3\xb2\xec\xce\xfb\x52\x8e\x6b\x23\x47\xa2\x4a\xa4\x78\x12\x33\x45\xfe\x04\x95\xa7\x52\x34\x2d\x01\x63\x62\x0a\x6f\xec\xd5\x94\x49\xf5\x6b\x17\xc3\x83\xc2\xef\x57\xcf\xe9\xef\xc4\x09\xa9\x5d\x1d\x08\x8b\x9e\x0a\x7a\xf4\x29\xc5\x09\x51\x9f\x13\xc2\x10\xb7\x44\xc8\x09\xcd\x36\xea\x36\x6d\x10\xda\x92\x8b\x09\x30\xd3\xef\x27\x20\xf0\x22\x30\xd7\xbf\x9e\xe7\x8b\x5a\x71\xea\xf7\xa0\x9f\x55\x6a\x10\xf2\x1c\x35\xe4\x4e\xf3\x11\xfc\x29\x96\x28\x70\xa6\xd5\xbd\xf0\x4a\x2f\x24\xb8\x2c\xdb\xaa\xf1\xab\x25\x03\x31\xc0\xc3\x21\xe2\x03\x3c\xb4\x3c\x89\xcb\x16\xb7\x71\x03\xce\xf3\x45\x2d\x36\x71\xab\xa0\x95\x13\x2f\x09\xe5\x0e\x31\x8e\xbd\x3e\x29\x4e\x80\x5c\xae\x56\x70\xd3\xc7\x51\x67\x8f\x97\x76\xd6\x5c\x01\x8e\x07\x7c\x38\x44\x62\xc0\x87\x25\xc0\x0e\xab\x46\x4f\x30\x54\x84\x0a\xcc\x69\x3e\xfb\x28\x87\xec\x53\x3e\xfb\xe1\x2a\x10\x72\x6a\x39\x80\x90\xe5\xd1\x6c\xda\xd7\x33\x53\xb5\xdd\xd4\x73\x59\x3e\xbc\x29\x51\x3a\x1e\xe8\x97\x89\xf5\x69\x86\x4a\x83\xc9\x9e\x29\xe5\xff\x1a\x08\x2d\x3b\x94\x5e\x95\xc4\x22\xfe\x0f\xf0\x46\x15\x29\x30\x20\x7d\x1a\xb7\x09\xe2\xfe\x16\xb7\x51\x56\xfd\x97\x95\x80\xab\x0c\x51\xc5\xe9\xbc\xfc\x0f\xa2\xb3\xa1\xba\xc7\x56\x57\xbe\x28\xbc\x17\x2f\xa4\x34\xee\x35\x80\x10\x2a\x74\xb2\x9f\x41\x01\x73\xc8\x86\x5f\xc2\x2a\x4d\x0c\xab\xe4\x71\x48\x8a\x12\x14\x9b\x35\x7e\xba\xcc\xd3\x27\x4a\xb8\x4a\x5f\x7f\xa8\x54\xf0\x24\x3a\x57\x5e\xfe\x47\x74\xb2\x4c\x9e\xbe\x99\xd4\x98\x8c\xfd\x41\x47\xb8\x6c\x89\xce\xff\xfc\xc9\x51\x73\x46\x08\xb3\xce\x1e\xc8\x83\x97\xff\x21\x5a\x2f\x86\x30\x7e\xd5\xad\xbc\x1a\x0e\x8d\xc0\x79\xab\x3d\xf2\x67\x62\xb3\x4c\x1f\x6e\x46\xb8\xd0\xb5\x8a\xcd\xb5\x00\x1c\x0b\xa4\xf4\xd6\x51\x29\xa3\xbd\xee\xf8\x3a\xeb\x85\x30\x4a\xeb\x5b\xb1\x86\xf3\x4d\xbc\x40\x64\x6e\x65\xc2\x26\x1b\xe3\xd8\x30\x60\x9e\x36\xee\x36\xf2\xd5\x58\x07\x10\x51\x19\x88\x6a\xac\xbe\x8b\x0d\xdf\x12\x16\x4e\xd5\x42\xa3\x7c\x74\x8b\xdf\x71\xb6\x5c\x14\xd5\x8f\x33\x52\xe8\xcc\x5d\x75\xbd\x77\x3c\x9a\x56\x74\xbd\x07\xe1\x7f\x11\xfe\x97\x3b\xff\x8b\x0e\x71\x7e\xeb\x45\x6b\x96\x6f\x2a\x56\xec\x7e\x81\xc8\xa0\x3d\x35\x6f\xe5\xa4\x84\xbe\x8e\x95\xf9\xd4\x9f\x6d\x5c\xd8\x9c\x4f\xf5\x1c\x30\xe1\xf9\x46\xaa\x37\x6f\x70\xf6\x0f\x73\x14\x5a\xe3\x09\x05\x28\x76\xf7\xba\x8f\x63\x7c\xb3\x9c\x6a\xdb\xaa\x5e\x42\x94\xc8\xdb\x5e\x81\x8c\xf9\x11\x80\xd5\x07\x65\x03\xd2\x0b\x8f\x59\x53\x47\x9b\x87\x94\x55\xa0\x00\xeb\x75\xd2\xce\x60\x82\xc5\xa8\xd6\x0d\xcb\x39\xc9\x0e\x48\xfb\x02\x4f\x49\x21\xb0\xe4\x9d\x86\xf1\x45\x2e\xcb\xc7\x95\x26\xa2\x2a\xbe\x7b\x50\xc2\x04\x5f\x81\xf1\x31\xe4\xfd\x42\x3d\x5a\xd4\x5e\x15\x82\xb8\xb6\xa5\x7b\x15\x40\xaa\xbe\x5f\xe9\xe0\xec\xda\x5c\xc8\x8b\x69\x5d\x71\x5b\xda\x58\xcf\xc5\xba\x7e\x8e\xb3\x81\xf1\xc7\x4c\x39\x1b\xa4\x83\xb6\x1b\xff\x63\x15\xe8\xfa\x39\xa1\xd9\xbd\x4a\xf6\x7b\x4d\xc5\x5a\x6f\x48\x25\x6f\xaa\x2a\x44\x5b\xd9\xf8\xde\xe3\x3c\x36\xd6\x16\x3a\x7e\xbc\xda\x58\x05\xf9\x05\xb3\x49\x56\x00\xa8\x2f\xbd\x71\xf6\x68\x36\x41\x4f\x40\x4c\xef\x7a\x7c\x0d\x4f\x74\xde\xc7\x8c\xc0\x25\x50\x1e\x06\xf6\xf0\x9c\xb5\x17\x23\x34\x0b\xa3\xd1\xcb\x96\xbe\xc4\x96\x73\x26\xa1\x8e\xd8\xd2\x80\xc8\x3e\xa6\x6f\xd0\x26\x6b\x58\xd4\x7d\x50\x86\x62\x89\x4f\x6c\xbd\x36\x66\x57\x9b\x86\x39\x81\x1d\xa0\xb2\x72\x6f\xb9\xdd\xfe\x05\xe3\xc9\xd7\x89\xd0\xce\xc6\x3a\x26\x50\x62\x53\x28\xf4\x12\x40\x11\xd0\x32\x95\xfc\xf6\x29\x47\x2a\x73\x29\xeb\xd7\xeb\x55\xa8\x62\x06\x60\x51\x7e\x29\xec\x2b\x09\x7d\xcf\xdb\xf3\xf6\xaa\x17\xc7\x21\xd0\x55\x3e\x9c\x43\x77\xa4\x54\xb0\xcf\x3b\x6d\x3c\xa7\x7d\x3b\x57\x19\x30\x81\x2a\x92\x19\x5a\xd2\xcd\x6a\xd5\x83\xca\x95\x9f\x35\xfa\x67\x6f\x1b\xc0\x32\x64\x65\xab\xce\xb4\xdd\xef\x5d\x45\x89\x66\x88\xec\x7b\x06\x52\x04\xf4\x6c\x00\x0e\x65\xd8\xa0\xa1\x81\x05\x4a\xd8\x17\xda\x75\x2c\x84\x7a\x91\x49\x2c\x07\x70\xa9\x40\x39\xcc\x0a\x88\xc1\x56\x14\x0e\x6d\x09\x19\x80\xc2\xc4\xcf\x51\xf5\x2f\xb2\x25\xf0\x5e\x55\x12\x0d\x50\x91\x8c\xbe\x1c\xa3\x90\xcb\x69\xe0\x96\xc5\x8e\xd8\x9c\x8e\x45\x06\x12\xf1\xa8\xd5\xf8\x15\x66\x19\x36\xda\xee\x4a\x6d\x8c\xa3\xdf\x2d\x46\x00\x9a\x2c\x23\xce\x3c\xcf\x0f\xae\xd7\xa7\xea\x70\x8a\x33\x94\x6a\x13\xc9\x54\xd4\x84\xe0\x92\xd2\x9d\xcf\x56\xf1\xa7\x0d\x40\x48\x38\x9e\x17\xc0\x05\x44\xdb\x3c\x9e\x20\x8b\xea\x13\x83\x22\xe1\xa0\x18\xac\x6c\xcc\xc4\x62\x1c\x0b\x3c\x4f\xc9\xc2\x8e\x51\xca\x40\x7b\x9e\x2f\x54\x68\x39\x18\x4e\x51\xb2\xbd\x4a\xf4\xee\xe7\x2d\x70\xa7\x6e\x81\x5d\x48\x70\x39\xa7\x2c\x38\xa6\x31\x96\xc0\x95\x06\xad\x2e\x4f\x48\x32\xb5\x87\x35\x80\x8d\x66\x2f\xb7\x18\x4e\x45\x56\x24\xf0\x02\x32\xab\xaa\x0d\x38\x47\xbd\xb8\x4b\x10\x4d\xc9\xb2\x1a\x51\xab\x5f\x41\xf9\x72\x2f\x3b\x5f\x8d\x3a\xee\xd6\x2a\x8f\x4b\xfb\xfd\x70\xc6\x3f\x93\xaa\x23\xa8\x3f\x81\x51\x50\xe0\x64\x0f\x65\x70\xf9\x0a\xd5\xaa\xb1\x51\x4f\x40\x11\x2e\xbb\x33\xb5\x24\x2e\x40\x41\x3c\x7d\x55\x1e\xab\x9c\x91\x9a\xd9\xd2\x90\xd5\x50\x16\xd7\x7e\xdd\x7d\x65\x04\x40\x32\x78\xbe\x33\xcd\xac\x69\x23\x35\x7f\xc9\x86\xec\x1a\xd4\x35\xe4\xf3\xf8\x91\xe6\x67\x53\x76\x58\x4f\x0c\x48\x76\xeb\x1f\x7c\x75\x6d\x54\x45\x86\xda\x3c\x02\x6a\xc1\x2b\x8d\xa5\x05\x12\xef\x74\xd5\xd8\x5a\x39\xf3\x64\xb9\xb7\x35\x00\x7a\xea\xf6\xf0\xf0\xb6\x6d\x6d\x6d\x1e\x42\x5d\x24\xfc\x65\x71\x7b\xc1\x98\x88\xb3\xf5\x96\xf7\xfa\x27\x26\x45\xb6\x1f\x64\xa4\xd9\xa4\x71\xa6\xdf\x60\x7c\x20\x2d\x93\x51\x93\xd2\x22\xec\xbe\x26\x51\x70\x5c\xb9\x12\xf2\x81\x2d\x9e\x9e\xf8\xea\x1e\x5a\xb0\x45\xdd\x14\xd7\xcd\x5c\xb5\x91\xa7\x42\xf4\x79\x04\xa6\x12\x02\x3c\xa5\x59\xd9\x94\x92\xdb\xa2\x8c\x29\x16\x83\xe2\x14\xd2\x47\x8c\x3f\x91\xa6\xdb\x6f\x49\x95\xac\x32\x1f\x49\x7f\x6f\x73\x66\x84\x87\x83\xc9\x29\x05\x45\xb3\x29\x4c\x24\xb9\x09\xe3\x99\xc6\x19\x7d\xf5\xba\xb7\x63\x3d\x23\x24\xb3\x95\x01\xa0\x9c\x7d\xf6\xc0\x9e\x3d\xb1\xb5\xaa\xa7\x6a\x09\x5f\x83\xf7\x98\xde\x45\x09\xa1\xac\xe6\x2d\x41\x75\xec\xf1\xe9\xd3\x11\x7b\x80\x6a\x79\x28\xf2\x3c\x77\xde\xf7\x51\x5a\x8a\x52\x31\x2c\x2b\x05\x79\xa0\xac\x7d\x36\x64\xe8\x51\x0e\xad\xb7\xd3\x85\x6a\x48\x2a\x62\xfe\xda\xaa\x83\x83\xb8\x03\x65\xd9\x8e\x2d\x8b\xef\xb7\x89\x09\xa3\x6f\xce\x1a\xee\x9d\x4b\x60\xad\x62\xbb\x06\x1c\x37\x71\xf1\x92\xab\x9b\xc7\xdd\x01\xa7\x88\x85\x89\x03\x53\x86\x74\xd9\x13\xaf\x51\x67\x4f\xec\xee\x02\x8a\x42\x0d\x8c\x42\x13\xc1\xe5\x91\xa2\x62\xc3\x40\x6d\x61\x45\x61\xac\x07\xd8\xac\x77\x55\x05\x9f\x11\x4d\xa7\xd0\x84\x3e\x10\xd6\x42\xa9\xd7\x28\xf5\xdd\x3d\x61\xc0\xbb\x34\x36\xd5\x0c\xf3\x7e\xe1\xf5\xd3\xd0\x04\x35\x5c\x8f\x8b\xd1\x33\x06\xb2\x18\x6d\x1c\xc5\x62\xe4\x0d\x81\xe7\xcf\x68\x90\xe7\x1b\x1b\xe4\xb9\xd7\xe0\xa4\x7a\xcb\x55\x8d\x63\x31\x59\xd4\x34\xe8\x52\xea\x95\x0d\x16\xcf\x69\xb0\xd8\xdc\x60\xe1\x37\x68\x76\xee\xc6\x56\xad\xf3\xb9\x29\xeb\xea\x62\x7a\xf7\xac\x7a\x98\xde\x95\x7a\xf5\x87\x5a\x2d\xad\x01\xf2\x6e\x9e\xce\x7e\x15\x53\x22\xbf\xa7\xbb\xb9\xa1\x69\x46\x41\x7d\xf7\xb4\xf2\x5e\xb3\x2d\xde\x9d\xd4\x05\x9e\x20\xe1\x27\xaf\xbb\xcb\xf9\xd5\xb3\x9d\xfe\xb4\x92\xb5\xea\xf0\x27\x94\x0d\x09\x1d\x26\x75\x85\x1b\xcd\xd5\xa6\x58\x7c\xcc\x79\x06\x3c\x63\xaf\x0d\xfa\xff\x64\x4d\x65\x6b\x5a\xad\xf8\x31\x65\xcf\x6d\x68\x8b\x3f\x1d\xb6\x67\x27\xce\xab\x39\x33\xad\x06\xfc\x8d\x9e\xaa\xd0\x1f\x50\x8d\x5c\xc7\xb0\x97\x4b\x32\xad\x71\x00\x35\x31\x30\xac\xde\xe8\x2b\x42\x12\x70\xe0\xc7\xe2\x16\x52\xbc\xa2\x53\x45\xad\xdf\xe2\x85\xba\x50\x64\xed\x51\x4e\xc7\x3a\xb0\x8a\xb6\xa5\x6a\x13\xfa\x33\x1e\x09\x3c\x3e\x9f\x13\x21\xb0\x8e\x8e\xb9\xd3\x85\xac\xed\x72\x03\x99\xca\xbb\x5d\xc8\x36\xe7\x35\xfd\x1b\x80\x37\x35\x83\xe3\x99\xb1\x2b\x93\x83\xcb\xbf\x7c\x70\xba\xb6\xba\x02\xcc\xdb\x4b\x3a\xcf\xc5\xe8\x16\x8f\x5d\x34\x73\x73\xf5\x9c\x6b\x43\x73\x0d\x70\x07\xb2\x6a\x48\xbe\x0b\x7c\xfb\x30\xd6\x29\x78\xb6\xef\x89\xb8\xdd\xf6\xfc\xf4\xb6\x55\xbc\xbe\xe5\x62\xc1\xb8\xc0\xe3\x46\xc9\x37\x14\x28\xb7\x84\xf7\x50\x85\x0f\xb7\x87\xb7\x97\x5e\x42\xf2\x14\xe6\x06\x71\xb5\xba\x16\x59\x01\x9a\x4d\x75\xf9\x4e\x8a\x4b\xcc\x95\x14\xa6\x7a\x3d\xb2\x3e\x4b\x20\x2b\x00\xd8\x03\x05\x0a\x22\xda\x97\x3a\xbb\x72\xa1\x0a\x98\xa7\xe7\x9d\xcb\x79\xe7\x71\xf0\xb2\x0d\x69\x76\x14\x8a\x96\x53\x04\xf5\x7d\xc2\x54\x9f\xf1\x5e\x10\xcd\x4e\x8f\x96\x7a\x2a\x7f\xe0\x5b\xa4\xd9\x24\x25\x68\xcd\x66\xc6\x3d\x40\xfd\x74\x1b\x90\x04\x1f\xc2\x44\x19\xb7\xa9\x64\x35\x1c\xac\x83\xc1\x28\x77\x8b\x53\x52\xa8\xb5\x4e\x5a\xa1\xc6\xf9\x33\x2d\x8c\x3a\xf8\xe5\x0e\x42\x5c\x45\x78\xcc\x04\xe2\x11\x36\x83\xd7\x88\x27\x76\x88\xb2\xae\xd8\xa3\xcd\x66\xb6\x73\x2d\x32\x0a\x56\xab\x7b\xf9\xdf\x0e\x42\x02\xec\x01\x67\x82\x62\xbc\xc9\xb7\xf0\xac\xc0\xdb\xba\x8a\xc9\x14\x96\x28\xc4\xfd\xb1\x23\x0a\x79\xb4\x05\xd7\xe1\xa8\x6b\x72\x72\x55\xdd\x2d\x2b\x83\x8d\x6e\xd6\xdd\xa0\xb6\xa2\xe7\x56\x6b\xcb\x06\x4a\xc2\x25\x2c\xc1\xac\x5d\x8b\x8c\x4b\xfc\xcd\x28\xe2\x2a\x99\xa2\xba\x01\x69\xab\x95\xc8\xbe\xf9\x3f\x7f\xfc\xa9\x75\xd3\xcb\x7e\x1a\xb7\xc0\x1f\xff\xf0\x0d\x00\xcd\x26\x1d\x74\x87\xfb\x67\x2a\xdc\x66\x26\x7f\x03\x9d\x0f\x5a\x5d\xb3\x66\x5e\x27\xc1\xdc\x70\x00\x71\x4c\x64\x6c\xa0\xd6\x60\xed\x25\x66\xc4\x93\x94\xce\x49\xf6\x25\xb3\x14\xf7\x1d\x4f\xd3\xee\xae\x39\x02\xfd\x49\xf2\x32\xc2\x29\x04\x69\x36\x15\x82\x6c\x1e\x28\xad\x0e\x74\x77\x37\x39\x50\x0a\x12\x73\x82\xe2\x05\x6d\x36\x6b\xbb\x8a\x36\x5a\xa2\xdb\xca\x4c\xa6\x92\xf5\x84\x04\xa3\x1c\xbe\x15\x40\x56\x2b\x5c\xd3\x46\xe4\x91\x9d\xea\x2a\x4c\x3c\x53\x86\xed\xd2\xd7\x3c\x36\xbe\x03\xff\x84\xb9\xc9\x92\x52\x5e\x64\xec\x67\x14\xe5\xbe\xdb\x27\xe4\x28\xf7\xdc\x38\x21\xa9\x64\xf6\x09\xd2\x85\x70\x15\x34\x85\xb0\x65\xe1\xa6\x88\xc5\x4b\x15\xa1\xa8\xf5\xaa\x6b\x36\x2f\x45\xc6\x80\x73\x68\x4e\x4e\x3f\x73\xe5\xc3\x42\xc6\x51\x39\x5c\xec\xb0\x08\x00\x90\x80\x5e\x6a\x5a\xe5\x7c\x6d\x98\x56\xdd\x75\xd2\x59\x53\x3b\xd9\xca\xa9\x51\xb9\x90\x12\xc7\x8c\x08\xdc\xec\xd5\x29\x1e\x34\xee\xaf\x43\xc2\x74\x0e\x56\x30\x44\x07\x7f\xff\xac\xe2\x1e\x1b\x93\xde\x0c\x23\x0a\xfc\xce\xf7\x44\xb3\xb9\xf3\x59\x64\x92\xa6\x5a\x97\xf0\x08\xae\x7f\x54\xb2\x2d\x39\xb6\x51\xd1\xcc\x24\x62\x85\x19\x87\x7c\xc4\xaa\xc1\x63\xb2\xff\x12\x21\x44\x14\x85\xbb\x7a\x58\xe0\xfd\x8c\x94\xd4\x4e\x2e\x62\xb3\xe9\xbf\x41\x2e\xb9\x9f\x5b\x7c\x12\x66\xa3\x01\x3d\xd2\x6c\xa6\xa2\xb8\xff\x05\x21\xb9\x00\xa6\x9f\x66\xb3\xf1\xc7\xd5\x1f\x1b\xee\x9d\x6a\x7d\x9d\x11\xb0\x5a\x5d\x8a\x8c\x00\xb0\x1f\x23\x59\xd8\x8f\x8f\x72\xc4\x65\x7f\xf4\xb2\xf9\x08\x00\x7a\xaa\xa5\xfd\x2c\x3c\x8f\x48\x65\x04\xa5\x3c\xee\xb2\x27\xba\xc4\x5f\xe2\x59\xa9\xb0\x38\xa4\x00\x72\xab\x53\x08\x71\x9c\x80\x64\xee\x1f\xd9\x43\x80\xd2\x69\xcc\xaf\x14\x4b\xaf\x7b\x25\x93\xd0\x53\xe4\xab\xd9\x54\xc4\x7b\x3f\xa3\x95\xe5\xa6\x1b\x97\x3b\xa4\x26\x14\xf4\x24\xb2\x27\xe9\xf8\xa6\x94\x47\xe1\xc8\x53\xc7\x7f\x85\x87\xab\x1b\x91\xde\x6e\x7d\x7d\x14\x85\x1c\x1f\x99\x64\xc6\x48\x7e\x91\x8f\xf0\x87\x8b\x63\x84\x10\x77\xf9\xc9\xb1\x94\x49\x94\xd5\x38\x42\x2e\xdf\x69\xf0\xb2\x2d\xd8\x87\xc5\x02\xf3\xc3\xbc\x90\x32\x57\x46\x25\xb0\x81\x46\x3d\xc1\x85\x0f\x86\xda\x9c\x4c\x0f\x91\x96\xf9\x82\x0a\x00\xa9\x82\x56\x01\x66\x00\x6e\x5c\xbd\x39\x7f\xfb\xa3\xdc\x07\xd4\xf6\x1c\xf4\xe0\xe7\x60\xa4\x7e\x62\xcc\x90\x19\x4f\x4a\x30\xd6\x7b\x26\x48\x3a\x6a\xaf\x0a\xe3\xd5\x4a\x89\xa4\x41\xcd\x8d\x58\x98\xce\x20\xe5\x07\x52\x72\xf1\x93\xaa\x53\xe6\x04\x36\x49\x6b\xd0\xb9\xc8\x98\x9c\x67\x49\x89\xee\x0c\x5a\x52\x45\x85\xb4\x84\x4c\x81\x66\xd3\x59\xbb\x58\xe8\x8b\x5e\x67\xde\x46\x00\xec\x56\xf6\x91\x0f\x9a\x3f\x06\x05\x5b\x62\x1c\xd5\x74\x55\x65\x4e\x67\x17\x2d\xa2\x7e\x10\x92\xfa\x71\x39\x08\xa2\x07\xc1\x83\x41\xf0\x68\x10\xc4\x0e\x82\xb8\x41\xf0\x9a\x41\x58\xb8\xc2\x31\x54\x46\x90\xce\x87\xfa\xbc\x21\x10\x39\x85\xea\xc8\xd2\x66\xd2\xc4\x37\x93\x2e\x35\x90\x26\x29\x96\x21\xa8\x65\xda\x2d\x32\xe0\x43\xb5\xdd\x0c\x8a\xd5\xc9\xa8\x6b\x25\x34\xe0\x5a\xb0\x37\x8e\x70\x53\xfe\x49\x8f\xf7\x77\xf4\xc1\x9d\xcf\x01\x33\x6c\x59\x94\x34\x57\x02\xa0\xca\xde\x92\xd8\x54\xa6\xbc\x9f\x9e\x34\x8c\x28\x1f\x41\xe7\xc5\xe6\x0c\x87\x31\xc5\xe2\x54\x07\x9c\x4b\x09\xa9\xb8\xfd\xef\x25\xe6\x0f\x97\x78\x86\x47\x82\xf1\xec\x4f\xc5\x88\x93\x85\x18\x4c\x67\x73\x8e\x1a\x7f\x6a\x89\xd6\x9f\x1a\xc3\x3f\x01\x4d\x4d\x2c\x49\xdf\xaa\x48\xfa\x87\x39\x95\xf2\xfc\x84\xd0\xf1\x76\x61\x24\x70\x3c\xde\xd6\x62\xa7\x94\xda\xb6\xff\x45\xe8\xae\x39\xc4\xfe\xd5\xa8\xe0\xd2\xb3\x12\xd7\x1a\x57\xe2\x5f\x91\xbe\xd6\x72\xbc\x6e\x4e\x54\xeb\x5b\xb9\xc7\xbc\x21\x15\x3e\x20\xe3\x2e\x40\x6d\xb0\x9c\xc0\x5b\xee\x0a\xd5\xc4\x2a\x30\x93\x77\x82\xf1\xf8\x48\xf3\xb9\x83\x5c\x32\xd0\x2e\xc3\x6d\xd9\x5a\x90\xe1\x96\xc0\x9d\x4e\x7c\x6a\xd5\x26\x4d\xb1\xf3\xb4\x95\x20\xb0\x51\xa5\x80\xc4\xc2\x98\x7f\x56\x8e\x59\x1e\xa3\x1f\x1f\xcc\x12\x65\x43\x1d\x43\x4a\xf9\xcf\xad\xf2\x3f\x98\xc1\x2f\xcd\x17\x57\x2a\xfa\x6d\xff\x4f\xb5\x50\xf6\xb5\x9f\x38\xbf\x5c\x33\xfa\x76\x26\xad\xb1\xae\xa9\x82\xb0\x52\x28\xf3\x75\xf6\x03\x06\x5b\x4e\xdd\x76\x2d\x6a\x99\xcf\xb5\x2b\x74\x2f\x7c\x61\x21\x25\xe6\xef\x7a\x62\xbe\x77\xc7\x2a\x3c\x71\x5f\x38\x71\xbf\x6c\xb8\xef\xf7\xde\xad\xe9\xfd\x73\x3d\x88\x92\x3f\x96\xbb\xbd\xc2\x22\xbb\xca\x97\x9b\x2b\x6f\xd7\xd7\x3c\x17\xc1\xf6\x35\xf9\x5b\x3a\x7b\xb4\xf4\x8b\xa1\xad\x16\x20\x93\x2c\xe3\x08\x0f\xe8\x10\x28\xaa\x2e\x39\x22\x4b\x6c\xf8\x5a\x4a\x5d\x74\x8c\xf9\x69\x10\x5a\xd1\x85\xa9\x29\xf5\x9c\x73\x61\x2d\x1a\x83\xaf\xbe\x69\xd0\x83\xc8\x72\xa5\x99\x3e\xfb\x70\x72\x72\x7d\xd1\x3f\xea\x5f\xf4\xcf\x0e\xfb\xe8\x16\xe2\xf6\x87\xb3\xb7\xfd\xa3\xe3\xb3\xfe\x5b\xef\xfd\x04\xe2\xf6\x7b\x4e\xe6\x44\x90\x3b\x7c\x61\x2f\x59\xd1\x12\xe2\xf6\x21\xa3\x63\x63\x10\x5e\x7e\x98\x43\x9d\xff\x11\xdf\x2c\xa7\x53\xc9\xce\xcd\x66\x37\xb9\xaf\x36\xc1\xe0\xf1\xa3\x0e\xfb\xa5\x6e\x02\xeb\x0b\xca\x72\x3f\xc8\x72\x53\x97\x4e\x32\x50\xa0\x07\x34\x3c\x32\xe4\xe3\x48\x44\x31\x6f\x3a\xc1\x2c\xdc\x49\x0e\x4f\x5b\x0e\x9e\xb0\xfb\x13\x7c\x87\x67\x1f\x4f\xd1\x5c\xc8\x49\x30\x77\xa8\x1f\x4f\xd1\x3f\x31\xc4\x6d\x1d\x81\xed\x02\x17\xcb\x99\x40\x44\x96\xb8\x24\xf3\xc5\x0c\x57\x32\x5c\x1e\xca\xd2\x95\xb7\x57\xf2\xad\x35\xb3\x7f\x77\x89\xc6\xaa\x05\x75\x07\x72\xa2\x3e\xd1\x3b\xc2\x19\x55\x14\xff\x17\xd5\x82\x4e\x00\xe2\xbf\xff\x5e\xbd\xef\x1f\x1d\x7c\x38\xb9\xba\x3e\x3c\x78\x7f\xf0\xe6\xf8\xe4\xf8\xea\xb8\x7f\x89\xac\x49\xe3\x49\xfe\xc0\x96\xa2\xb7\xd3\x81\xe6\xc5\x55\x3e\x95\x4f\x0b\x8e\x25\x61\x3f\xe0\xd3\x42\x3e\x6a\xea\x64\x9f\x1c\xb7\xfc\x3d\x63\x9f\x7a\x3b\x5d\x68\x4e\x27\xfb\x18\x98\x4b\xba\xda\xda\xd6\x41\x7e\xd7\xf7\x0d\xba\xb4\xfd\x7a\xac\x6e\x4d\x47\xb2\xbc\x9c\xdc\xd3\xe3\xb3\xe3\xd3\x83\x93\xcd\x40\x77\x03\xa0\xbb\x21\xd0\xdd\x00\xe8\xee\x17\x02\xdd\xdd\x08\x74\xb7\x02\x74\x57\x02\x7d\xb8\xe4\x9c\x60\x29\x3e\x2d\x18\xc5\x54\xbc\xc5\x13\xb5\xab\x18\x45\xd7\x10\xb7\x49\xb1\xa1\xc0\x0d\xc4\x8a\x76\xa6\xc2\x59\x7d\x65\x2e\x05\xe5\x6a\xe4\xe1\xee\xb5\x0b\x63\xf2\xf6\xfc\xf4\xf0\x36\xa7\x53\x5c\xa0\x85\x44\x91\xcb\x8f\xef\xae\xcf\x0e\x4e\xfb\x97\xef\x0f\x0e\xfb\x88\xcb\x57\xc7\x5e\x99\x11\xd6\x75\xae\x38\x2e\x2f\x41\x24\xd0\x63\xac\x86\xf5\xc3\x2d\x11\x5a\x7c\x4b\xdd\x70\xe5\xb8\x2d\x70\x61\xef\xb5\xe2\xd4\xd0\x68\x22\xdb\xa0\x8c\xcf\x15\xe3\xe3\x18\xfb\x73\xf9\xfa\x0c\xdf\x1b\x0e\xe1\xcd\x92\xcc\xc6\x98\xa3\x1f\xf0\x16\x6e\x8f\x66\xc4\x7b\x15\xee\x6b\xd3\x69\x2a\x16\xa2\x1d\x3d\x2f\xef\x56\x36\xb6\x71\x23\xea\xdb\xb0\xf7\x33\xd8\xb6\x70\x23\x34\x61\x1b\x71\x2c\xb0\x61\x2f\xfe\xa0\x71\xa2\x60\x1c\xfd\x4d\xdd\x12\x2d\xf2\x1b\x32\x23\xe2\xe1\x68\x96\x4f\x8b\x23\xce\xe6\xe8\x08\x2a\xbf\xa2\x43\xf7\x09\xfd\xb2\x06\x10\x67\x8d\xff\x9a\xce\xc8\x7c\x8e\xf9\x37\x4b\x41\x66\x0d\x38\x68\xe0\xcf\x0b\xc6\x45\xd1\x80\x0d\x2c\x0f\xb4\xdd\x9b\xfc\x06\xcf\x1a\x43\x18\x82\xde\x58\x16\x78\xbb\x10\x9c\x8c\x44\x63\x0b\xfb\x29\x80\x10\x6e\xe3\xcf\x0b\x3c\x92\x67\xe8\x92\xde\x73\x15\x17\xd9\x73\xe3\x41\xb8\xb4\xcb\x35\xbf\x15\x53\x87\x3d\x93\x4a\x57\xe3\xf2\xe4\xf8\xb0\x2f\xa9\x27\x51\xed\xbd\x25\x23\x71\x89\xe5\x2f\xed\x52\x82\xdb\x97\xfd\x8b\xe3\x83\x93\xe3\x7f\x1e\x5c\x1d\x9f\x9f\x5d\x1f\x1d\x5f\x5c\x5e\x5d\x9f\x9d\xbf\xed\x5f\x5f\x5e\x5d\x1c\x9f\xbd\x43\xb8\xf6\xbe\x09\x39\xe3\x7a\xf2\x0b\x7e\xb7\x24\x63\x09\x38\x2d\x96\xdc\x3e\x4c\xc8\x6c\x76\xb6\x9c\xcd\x0a\x84\xdb\x79\x51\x90\x29\xd5\x3f\x30\xb7\x01\x05\x8d\x42\xdc\xf8\xdc\x7f\xc2\x0f\x05\xe4\xa8\x53\x72\x1d\x24\xf0\x56\xbf\x9e\xca\x76\x5b\x2d\x5e\x1e\xbe\xac\x5a\x60\xb5\x92\xb5\xca\x22\x79\xc9\x3d\x99\x7e\xcc\x3d\xb3\x76\x4b\xd4\xd7\x71\x1b\x7d\x52\xd5\xdc\xe5\xe9\xd8\x97\xf9\x78\x9c\x72\x93\x2f\xd4\x95\x6f\x99\x52\x0e\xef\xbb\x96\x06\x78\x88\xac\x6d\xba\x7c\x94\x43\x18\x9a\xdb\xf2\x27\x23\x16\x27\x1a\xb6\x11\x88\xbd\xf6\x7b\x66\x2a\x9a\xcd\xea\x47\xfd\xc5\xba\x9b\x2d\x9f\x13\x10\xd0\xa6\x59\xb5\x31\x37\xeb\x1c\xb6\xd3\x59\x92\x5c\x1c\xd0\xc0\x9c\xa6\xc6\xce\x6d\x53\x30\x34\x6b\x9d\xea\xbf\x0a\xe2\xc3\x04\xdc\xb1\x0e\xea\xa6\x7d\xf2\xca\x0a\x03\xb1\xdb\x1d\x96\x17\x93\x58\x7f\x8f\x0c\xb3\x4c\x22\x8f\x84\xf5\x80\x0b\x14\xe7\xf7\xbe\xd9\x28\x48\x59\xec\x3c\x69\x57\x12\xc7\x31\x9b\x6d\x5e\x17\x13\x86\x3e\xe9\xfb\x88\x7d\x07\xa7\x28\x41\xbb\xfc\x18\xc5\x7a\xc8\xc9\xac\xb6\xb8\xfc\xf8\x44\xc4\xba\xb2\x5d\x54\xd6\xd1\x18\xf2\x54\xda\x19\xbd\xbe\x83\x61\x98\x97\x35\x95\xbc\x54\x78\x7b\xdc\x98\xd4\xaf\x2b\xf6\x9d\xd6\xcd\x21\x1d\xe9\x42\x7e\x8d\xdc\xb8\xca\x9e\x42\x0b\x03\x73\x47\x6f\x53\xf1\xcb\xb1\xd9\xeb\x58\xb1\x07\xb4\x12\xdb\x5c\x32\x44\x78\xe3\x69\xb4\x7f\x27\xe6\xc0\x64\x2c\xd6\xd4\xc4\x59\x3f\xf7\x32\xa1\xee\xa1\xf6\xf5\x7f\xda\x9e\xc7\xd0\x18\xbd\x36\x58\x01\x8a\xef\x90\x2e\x01\x8d\xcd\x8f\x80\xfa\x59\x7e\x4f\xe6\xeb\xaf\x73\x84\x55\xcb\xec\x16\x6e\x3f\x13\xa6\x4f\xd7\x8d\xed\x41\xc7\xce\x09\x20\xf1\xf0\x04\xc7\x16\x9e\x95\x9b\x27\x0f\xc3\xf1\xdd\x3e\xf6\xc7\xa7\xfe\x0b\x9a\xd6\x49\x1b\xf4\x7f\xfb\xfa\x3f\x33\x3c\xf5\x5f\xcf\xef\xd9\xcc\x83\xa1\x83\xa3\x27\x8d\x9a\x12\xd0\x27\x23\x9d\xfe\x4a\xb4\xba\x35\x36\xa4\xe6\xba\x24\xf2\x9a\xff\x5d\xf7\xf6\xff\xcb\x5b\xd4\x92\x56\x05\x99\xa1\xcb\x76\x93\x29\xaf\x71\x1d\x5e\x56\x1d\xdb\x46\x75\x7f\x6b\x39\x87\x09\xc7\xf8\x17\x9c\x0d\x86\x60\xcb\x71\x18\x95\xcb\x8b\x9d\x6a\x42\x4d\xb1\x5a\x35\x74\x71\xb9\xdc\x93\x9c\xcc\x96\x1c\xab\x94\xdf\x96\x61\xa9\x5a\x89\x98\x6b\x65\x63\x5f\xda\xdd\x13\xaf\xe2\x8d\xad\xf2\x0d\x96\x06\x02\x19\xf7\x76\xb7\x18\x82\x66\xd3\xa6\xe2\x74\xa7\x38\x57\x76\x22\x04\xd1\x8c\xdb\xc0\x42\x4e\x5b\xcc\x5a\x2d\x80\x07\x3a\xc2\xd0\x10\xf1\x41\xee\x56\x43\xcd\x6e\xc9\x64\xa5\x0c\x5a\xe4\x50\x8d\x27\x3e\xf0\x33\x23\xea\x94\x88\x03\x31\x44\x01\x79\x51\xae\x87\x25\x0b\xc7\x60\x85\xc5\x23\x70\x03\x43\x98\x60\x84\xfe\xd8\xba\xe9\x75\x2a\xca\x13\xf8\x34\xdf\x69\x6b\x42\xcb\xaa\x2e\x61\xc9\xbe\x16\xd0\x70\xb4\x39\x0c\x19\xdd\x09\x0c\xb8\xe0\x19\xf4\xf8\xe3\x0a\x67\x52\x66\x69\xd2\x8a\x49\x97\xa8\xc9\x18\xde\xcd\x96\x58\x53\xa8\x92\xdd\x1e\xc1\x90\x15\xbf\x85\x8e\x47\xf7\x9b\xf7\xb2\xe5\x56\xd4\xc8\x7d\xc5\xdb\xe3\xf1\xb6\xea\x60\x5b\xb0\xed\x1b\xbc\xbd\xe0\xb8\xc0\x54\x78\x89\x5d\xd5\x52\x68\x31\xa0\x82\xc9\x75\x6d\x8b\xb0\xba\x2f\x53\x54\x36\xf5\x57\x86\x0c\x6f\x78\x8d\x36\x7c\x99\x55\x43\x80\xc1\x3a\x92\x8a\xee\xe6\xbe\x4c\x34\x0c\xb2\xec\x06\x32\x90\x42\xd9\xbd\xe0\xae\x1b\x0f\x70\x7b\x31\x42\x9d\x21\x52\x06\xc9\xf2\x91\xe7\xa8\x3b\x44\xca\x9c\x58\x3e\x4e\x16\xe8\xc5\x10\x29\x63\x60\xf9\x58\x2c\xd0\xcb\x21\x52\xa6\xbc\xea\xb1\x83\xbe\x95\x8f\x1d\xf3\xd8\x45\xdf\xc9\xc7\xae\x7e\x14\x1d\xf4\xe7\x21\x6a\x08\xf3\x55\x74\xd1\x7f\xca\x47\xf3\xf5\xae\x83\xfe\x32\x44\x8d\xbb\x4e\x63\x0d\x24\x9d\xc8\xb0\x73\xcd\x46\x02\x3d\xae\x95\x61\x4d\xf9\x26\x1a\xf5\x3d\xe1\x78\x77\x22\x65\x65\xf1\x25\xc3\xdf\xf2\x6c\x37\x4b\xd2\x98\x20\xb2\x6a\x4f\xb7\x49\x61\xe2\x58\x82\x66\x53\x0c\x3a\x43\xb9\xcb\xd6\xeb\xca\x14\x2a\x33\x06\x39\x89\xf2\x87\x1e\x9d\xd6\x93\xab\xa9\xd4\x3f\xf5\x6b\x7b\xf1\x2d\xe7\xd4\xfc\xd6\x1f\x4e\xd9\x98\x4c\x08\xe6\x6a\x7a\xed\x83\xfe\xa4\x6d\xa6\xe4\x3c\xbf\xd1\x19\x41\x4c\x43\x5a\x71\xa2\x66\xdc\x3d\xe9\x8f\x46\x83\x56\x96\x91\xcb\x10\xbf\xd4\x45\xcf\xbd\xbb\x6b\xb9\x3a\xde\x73\x59\xe0\x72\x31\xcb\x85\xc0\x63\x5b\xf0\x2f\xa6\x60\xf4\x5e\x57\x38\xf2\x6f\xf4\xfe\x3a\x44\x0d\xff\x85\x01\xde\xbf\x10\xeb\xca\x89\xf3\xdf\xe8\x32\x97\x22\x17\x5a\x09\x88\xba\x72\x16\xcb\xe7\x60\x8c\xba\xc0\x8b\x72\x7c\x65\x09\xf9\x4b\x41\x88\xba\x72\x52\xdd\xa3\xfe\xfa\x23\xc1\xb3\x31\xea\xca\x69\x55\x3f\xf5\xdb\xf7\x39\x57\xce\xec\x5d\x39\xab\xe6\x21\xec\x8f\x4f\x51\xd7\x9b\xce\x03\x3e\x0d\xe0\x95\x9f\xff\xb3\x04\xd7\x7e\xbd\xe2\xcb\x42\x10\x3a\xd5\xe0\xca\xf9\xf3\xdf\x98\x1e\x8c\x1a\x17\x75\xe5\xac\xd9\x27\x3b\x63\x04\x53\x71\x49\x94\x47\x8a\x49\xed\xf0\x42\x4f\x5c\xe5\x83\xae\xf1\x81\x7e\xa2\xec\x9e\xa2\x17\x72\xf2\xcc\x83\xfe\xf2\x0e\x0b\xf4\x42\xce\xd8\x3b\x6c\x91\x2f\x7f\xb8\xc1\x27\x6c\x94\xcf\xd0\x0b\x85\x7f\xee\x59\x7f\xff\x3e\x2f\x34\x12\xbe\x90\xd3\x65\x9f\xc2\x6f\xef\x73\x9e\xcf\x0b\xf4\xe2\x3b\xaf\x84\x7e\x67\xe1\x31\x59\xb0\xd1\x8b\x3f\x2b\x88\x6c\x52\x6c\xdd\x0a\x9e\x2d\x30\x47\x2f\xe4\xd4\xe9\xdf\x16\xcd\xe9\x28\x17\xe8\xc5\x5f\x14\x92\xcb\xdf\xf1\x7c\xf4\x3f\x4b\xd2\x5e\x10\x46\xd1\x8b\xbf\x06\x13\x52\x7e\x29\x29\xcc\xf9\xa2\x30\xc4\x65\x4b\x7b\x13\xd3\x4c\xb8\xbd\xa7\xee\xd2\x32\x11\x60\xb0\xf2\x71\xce\x44\x89\x4c\xba\x62\xae\x5e\xbe\xc3\x3a\x3a\x91\x6c\xc3\x4d\x99\xe4\x90\x48\x81\xa8\x3a\xc7\xdd\xb6\xe6\xea\x31\xd8\x1b\xfa\xa4\x2f\xb1\x94\xb9\xe7\xc8\x2e\xc1\xe3\xe1\x34\x0d\x12\xde\xee\x58\xad\xdc\x4b\x6f\x07\x78\x6f\x7d\x44\x5b\xeb\x2e\xcc\x79\xf3\x9c\x1e\xf8\x34\xd1\x01\x9f\xea\x86\x24\x26\xe5\x7a\x9c\x25\x06\x49\xd6\x41\x4d\xb3\xa6\xd8\x37\xf9\xe8\xd3\xcd\x92\x53\xb9\xa2\x5f\xa9\xba\xbb\x59\x92\xd9\xf8\xfd\x2c\x17\x92\xde\x87\x8a\xad\x02\x8b\x2b\x32\xc7\x6c\x29\x60\x20\x35\xaf\x23\x15\x97\x66\xd7\x6c\x24\xcb\xc0\x39\xab\x61\x4b\x96\xdc\xe2\xe9\x52\x28\xc6\xeb\xfc\xa6\xc0\xfc\x0e\xf3\x7d\xc9\xd5\x99\x8b\xd6\xf8\x5b\x86\x25\x8a\x8c\xd9\x68\xa9\x2f\xd0\x43\x7b\x2c\x9d\xa6\x87\xe9\xb2\x19\x83\x8f\xa3\xdb\x9c\xe7\x23\x81\xf9\xdb\x5c\xe4\xbd\x9d\xce\x5a\x22\x50\x42\x84\x40\xad\x96\xf8\xe3\x0b\xc8\xda\xe3\x5c\xe4\xa8\xd1\x68\x09\x28\xd6\xa0\x97\x00\xf6\x3d\x67\x73\x52\xe0\xfd\x2c\x47\xe6\x67\x9b\xe3\x82\xcd\xee\x54\xe8\x85\x44\xdb\x79\x5b\xdc\x62\xb9\xe6\x6b\xd0\x4b\x7d\x97\x8b\xd0\x01\x6b\xf8\x58\x4e\x6e\x2f\xa9\x15\x2e\xbf\x1b\x65\xb0\x52\x5e\x54\xab\xb8\x0a\xfe\x77\xa5\x9c\xa2\xec\x3e\xa1\xb6\x79\x9b\x0b\xc9\xcb\xde\xab\x1c\x93\x52\x04\x2d\x74\xcb\x67\xf2\x37\x5f\xaf\xb5\xb7\xc5\x37\x3f\x8d\x5b\xdf\xc0\x1c\xfd\xb9\x5c\xea\xc2\x13\xa2\x8d\xf6\xce\x2e\x32\x55\x77\x9f\x92\x4d\x16\xcd\x26\x46\x08\xaf\x56\xa5\xaa\x4f\xbe\x63\x4e\x35\xef\x9a\x5b\x06\xf2\x31\xa3\x8a\x03\x5b\xad\xdc\xcf\x2b\x95\x22\xa9\xd9\x8c\x5e\x0c\xdc\xf3\x29\x16\xb7\x6c\x3c\x2c\x5b\x9c\xd9\xd8\x8e\xc6\xb6\x05\x32\xb4\xdb\xdd\x32\x16\x2c\x12\xc1\x9c\x05\xcb\x2b\xb2\xc7\x5b\xe8\x5b\x25\xe5\x0c\xf8\x50\x1b\x14\xd0\x01\x6f\x75\xd5\x56\x04\x8f\x0c\xf1\xad\x1b\x8e\xf3\x4f\x6b\x17\x6a\xc4\x75\x33\xda\xd0\xcd\x8b\x44\x37\x7f\xde\xd8\xcd\xee\x8b\xda\x8e\x26\xbf\x99\x61\x45\x07\xe6\x52\x0c\x4e\xde\xed\x22\x01\xd4\xc5\x6e\xeb\x65\x8b\x0d\x21\x41\x36\x37\x95\x7c\xd5\x91\xaf\xe6\x6a\x9e\xd5\x73\x57\x3e\xe7\x7c\x5a\xa8\xa7\x17\xf2\x49\x87\x1f\x71\x30\xf0\x66\xd3\x78\x12\x12\xba\xcd\xf7\x8d\x33\x60\xaf\xd1\x58\xc3\xdc\x26\x6c\x74\xe6\xcb\xe5\x50\x6f\xf5\x50\x4b\xc7\xd4\x8e\xba\x21\x35\xce\x8f\x39\x24\x86\xaa\x38\xdf\xcf\x3d\xfa\x8a\xef\x01\xfc\x1a\x89\x01\x41\xb4\x95\x31\x94\xf1\x5d\x0a\xbe\xc9\xc1\x2e\xfb\x63\x3e\xdc\xa7\x88\xb4\xf2\x1e\x47\xc4\x89\x14\xb2\x28\x1d\xee\xd3\x56\xde\xa3\x0a\xc9\x17\xf5\xee\x66\xbf\x4a\xe3\xf5\xb8\x86\x5f\x1d\x64\xfd\x71\x6d\x82\xe1\xff\x7b\x89\x97\xf8\x0d\x26\x74\xaa\x4e\x35\x3c\x76\x6a\x6c\xbd\x3c\x7f\x97\xdf\x75\x40\xac\x53\x1b\x93\x4b\x19\x8d\xb9\x30\xd9\xaa\x05\x57\x4b\xdd\xd9\x1b\xf5\x0f\x53\x59\x7c\x5c\x44\xba\xe9\x8c\xdd\xe4\xb3\x73\xf3\x32\x99\xa6\x52\x2d\xe2\x11\x4b\x84\x3b\x51\xd9\x56\x5e\x79\x3d\x9a\xf1\x1a\xdb\x00\x1b\xc1\x58\x7f\x1b\xbc\xfc\x0f\xdc\xfa\x76\x08\xf6\x4d\x1a\xd0\x5e\x55\xd1\xaa\x4c\xbf\x36\xb9\xc9\x1a\xe0\x55\x28\xc4\x1b\xa5\xab\x84\x0c\xf1\x76\x3e\x11\x98\xc3\xdc\x1e\x3e\x95\x99\xb2\x3a\x67\xe8\x74\xe0\xd5\x29\xf6\x42\x24\xd7\xac\x81\xf7\x3e\x9a\x65\x63\xc2\x67\x33\x82\x9b\x1c\xab\xf6\x30\x84\xb3\xba\x3e\xe5\xfc\xcd\x9c\x0c\xab\xf4\x28\x05\xca\x04\x5a\x66\xd5\xb5\x01\x60\xdf\xac\xf3\x1d\xfb\xa4\xa2\x4b\x9c\x6b\x4a\xd8\xf3\x5e\x5b\x13\x37\x85\x0c\x7b\xf4\xd5\xcc\xdb\xe9\x8a\xe0\x95\x5f\x5b\xe8\x5b\x6b\x9e\x9f\xe5\x68\x26\xf7\xf7\x10\x34\x9b\x45\x36\x1b\xd0\x21\xcc\xa1\x7c\xf3\x62\x08\x85\xfa\xf1\x72\x08\x3c\x2c\xdb\x79\x7a\x12\xab\xf0\xb7\xe7\xcb\x42\x28\x71\x60\xf3\xd7\xcc\xd9\xd5\x76\xb7\xdc\xac\xb2\x66\x93\x59\x3b\xa7\xda\x5e\xcb\xe8\xa5\x7a\x27\xec\x74\x75\xaa\x99\x2a\x7e\xbe\xee\x98\xb7\x0a\xe1\xb2\x9d\x38\xcb\xc0\x6d\x5e\xfc\xc0\x78\x6d\x04\x8e\x5a\x08\x5e\x77\x4c\x9e\xcb\xa8\xb7\x38\x04\x14\x1d\xe1\x59\xd2\x47\x41\x23\xad\xf2\x4f\xd0\x84\xd7\x05\x3f\xd6\x68\x67\x2c\x36\x03\xdc\x9e\x62\x65\xca\x1b\x60\xa0\xb9\x7e\xcb\x28\x30\x51\x40\x67\xc6\x02\xd7\x19\xd8\xbe\xde\xed\xee\x67\xdc\x19\xce\xc2\x6f\x01\xdc\xe9\x80\x5e\xe6\x8a\xd6\x2d\x31\x00\xaf\x77\xbb\xcd\x66\xc6\x07\x4c\x9e\x64\x4a\xe7\x54\x99\xc0\xe8\x36\x0d\x86\x21\xb3\xfc\x29\xd2\x97\x69\xa6\x00\x7c\x54\x2f\x7b\xda\xee\xcd\x9c\x44\xf6\x08\x8a\x13\x10\xa9\x28\x43\x94\xfc\x7b\x59\x9b\xb1\xb5\xf4\xa0\xa9\x4c\x18\xb6\x13\x86\x10\xca\x9b\xcd\x2c\x0f\x89\x69\x50\x5e\x65\x2c\x81\x39\xb0\xbb\x3a\xb7\x53\x6e\x86\xe3\x1a\x2a\xf6\x33\x82\x6a\x07\xb7\xfb\x2d\xcc\x55\x5b\x02\x12\x00\x7a\x59\xc6\xfc\xb2\x60\x50\xb4\x5e\x0c\x11\x85\x6c\x50\xb4\x5e\x0e\xd1\x17\x4e\xc6\xf5\xd4\xd8\x2a\x1d\xd3\x09\x8b\xd5\x79\xce\x8e\x7c\xe2\xd3\x36\xf8\x6d\x1c\x19\x4a\x91\x90\x68\x32\xc1\xa3\xe7\x09\x29\x6c\x20\xbc\x9e\x0a\x8c\x35\x7b\xc8\x70\x25\x82\x7e\x85\x3e\x25\x4c\xc2\xc0\xa3\xe0\x0f\xcf\x68\x78\xa4\x6c\xef\x18\x78\xe4\x19\x83\x44\x45\x34\x5b\x67\x00\x8e\x6b\x2f\x18\x7f\x95\x7a\x50\x9e\x96\xc1\xc9\xae\x0f\x92\x7f\xeb\xc3\xf6\x71\x0d\xcb\xc7\xb3\x7c\x8e\x8f\xfd\x03\xd7\xbd\x2d\xd4\x3d\x12\xc7\xe3\xe5\xc8\xbb\x61\x90\xa3\x29\xc5\x40\x3a\x54\xd8\xb6\xc8\x28\x94\x5c\x09\x14\xea\xb2\xc1\xeb\x2c\x79\x39\x5a\x8c\x6e\xf1\x78\x39\xab\x62\xbb\x6f\x62\xe7\x35\x32\xc0\x43\x79\xbe\x94\x68\x5e\x55\xe7\xfe\xc8\x96\xdb\xb9\x10\x78\xbe\x10\x78\xbc\x2d\xd8\xb6\xed\x63\x3b\xa7\xdb\xb9\x91\xf1\xe8\x76\xbe\xad\x5a\xdc\xce\x1a\x2d\xdc\x6a\x80\x6d\x71\x9b\x8b\xed\x31\xc3\x05\xfd\x93\xd8\xc6\x9f\x49\x21\x1a\x60\xcb\xa9\x76\xe9\x6f\xd6\xcf\x84\xf1\xed\x7c\x5b\x63\x7c\xba\x53\x9f\xa0\x54\x16\x86\xec\xe7\x1e\x91\xd0\x54\x0d\x32\xd0\x33\xac\xa8\x7d\xde\xc8\x82\x94\x5c\xe9\x17\xa0\x55\xb3\xe9\x3f\xb9\x0c\x94\xd0\x46\x5c\xb1\xc4\xb5\x44\x1a\x77\xf9\x52\x1d\x88\xe4\x74\xe5\xdc\xc6\x55\x06\x89\xb2\x43\xb8\xd3\x45\x08\x59\xbe\xcb\xe0\x01\x1d\x02\x7b\xa2\x65\x40\x11\x84\x44\xd5\x56\xcb\xe5\xf0\x8d\xfb\x77\xe7\xb1\xb6\xd6\x27\x93\x4c\xa7\x8a\x30\x87\x67\xb7\x3c\xb0\x9f\x4b\x93\x82\x04\x18\x8a\x89\xb4\xee\x71\x8a\x7d\x76\xb3\x64\x7e\x90\x9a\xe9\xb2\xb7\x4d\x7b\xa0\x32\xa1\x03\xe6\x92\x86\x98\x59\xe0\x43\x28\xa4\x18\x46\x43\xb8\x94\x8e\xa1\xd5\x72\x98\x64\x68\x4c\x29\xf8\xce\xc3\x0b\x50\x29\xf9\x53\x73\x83\x9e\x81\x3d\x35\xdf\xd4\x44\xcc\xa1\x2e\x1d\x72\x59\x42\x09\x1b\xc1\xbd\xe4\x1a\xde\x25\xae\xfe\x5c\x7f\xd3\x30\xdc\xb5\xf1\x03\x8d\x71\xcf\x69\x5a\xe0\xb2\xe4\x32\x0d\xfb\x4b\x26\x99\xde\xef\x7b\xfe\x7a\xe5\x40\x9b\x36\xc0\x65\x80\xab\x5b\xb6\x0c\x46\x2f\x02\xf2\xd7\x19\x42\x5f\x23\x82\x32\x6e\x04\xff\x8c\x86\xa9\x5a\xc0\x7e\x36\x43\x02\x2e\x11\xd5\x96\xcf\xda\x99\xc2\xd3\x00\xf0\x66\x53\x6d\x6f\xb1\xbf\x44\xb2\x28\x18\xd0\x61\x4a\xdb\x22\x9a\xcd\x0c\xa3\x2e\x74\x70\x0a\x00\xf3\xd7\xd8\x5c\x2f\xe6\xbb\x18\x16\xde\x9d\x20\x71\x97\x8d\xea\x96\x51\xae\xb8\x07\x17\x6b\x61\x7b\xd5\x38\x98\xc1\x25\x2c\x3c\x4d\xc1\x8d\x97\xed\xa0\xba\x33\x1d\xce\x45\x32\xa7\xc5\x90\x17\x08\x55\x56\x63\x3f\x98\x93\xce\xd0\x97\xd5\x07\x5d\x49\x01\x6c\x1a\x1e\x94\x61\x34\x35\x47\x9c\xe9\xc0\x95\x04\x40\x56\xa5\x08\x0f\x7c\x33\x9f\x8c\x20\x3c\x78\x31\x04\xfb\x0c\x75\x7a\x45\xc6\x10\x31\xf1\x7c\x56\xab\x8c\xa3\x1d\x59\x84\xc1\xf2\x2d\x80\x03\x89\x37\x04\xb2\x32\xad\x14\x83\xdd\x0e\x80\x7c\xa8\x70\xf1\x1a\x75\xe0\x3d\xea\xc0\x3e\xea\x40\x49\x25\x2f\x51\x07\x9e\xa3\x0e\x3c\x40\x1d\xf8\x09\x75\xe0\x29\xea\xc0\x2b\xd4\x81\x87\xa8\x03\x2f\x50\x07\xbe\x47\x1d\x78\x86\x3a\xf0\x67\xd4\x81\xc7\xa8\x03\xdf\xa2\x0e\x3c\x41\x1d\x78\x84\x3a\xf0\x17\xd4\x81\xdf\xa3\x0e\x7c\xb3\xc9\x02\xa1\x74\xd5\xd3\xe7\xe9\xdb\xfe\x9b\x0f\xef\xd0\x4e\x37\xb0\xcb\xb2\x36\xae\x41\x20\x7e\xfd\xea\x32\xb0\xe3\xba\xc6\x77\x98\x0a\x6b\x8e\x5d\xa0\x47\x4c\xc7\xf2\xe4\x56\xe1\x4d\x7b\x83\xe1\xda\x1a\x39\x90\x39\xb6\xfa\xb0\xe3\x71\x90\x1b\x51\x7e\x29\xca\x06\xf3\xa5\x60\x7c\x49\x83\xb4\x48\xfa\xd5\x65\x94\x56\x31\x38\xe4\x43\x61\x7a\xb5\x7a\x5c\xc3\x8a\x81\x9b\x5f\xa6\x3d\xd6\x96\xd3\x8a\xa9\xd4\xa2\xdc\xb5\xff\x0a\xd5\x16\xee\xd5\x15\xf6\xc8\x5d\xc7\x8e\x86\xd1\x37\x72\x26\xc2\xd6\xcc\xcb\xd5\xea\xc1\x95\xea\xd3\x71\x5c\xa6\x4f\xc7\x65\x09\x95\x7c\xf7\x62\x49\xfb\x9f\x17\x84\xe3\xf1\x95\x9e\x34\xfd\x8d\x47\xaf\x55\xa4\x2b\xed\xda\xe4\xd7\x3e\xd0\xb3\xd8\xa7\x01\xbf\x76\xd4\x6a\x59\xb9\x93\xba\x99\x56\xbe\xa6\xe1\x4a\xd0\xd4\x32\xd0\xf6\x35\xa6\xe3\x4c\xf9\xdc\x6c\x79\x31\x4b\xed\x20\xae\x03\x7d\xf6\x6a\x45\x8c\x42\x65\x61\x35\xdc\x3c\x4b\x02\x98\x64\xb8\x14\x4a\xf9\xa0\xdf\x9b\x60\x11\xe1\x5a\x59\xcb\x97\x08\x93\x1d\x4d\x89\x02\x95\x05\x18\xa6\x3c\x92\xcd\x9c\x69\xb1\xd0\xc0\x94\x49\x09\xa1\xa4\xa6\xd9\xf7\xad\x56\x62\x57\x58\x6b\x15\x00\x7f\x91\xb3\x9a\x84\x43\x91\xcc\x71\x74\xe4\x17\x10\x03\xf8\xd9\xb6\x79\x2d\x38\x99\x4e\x31\xcf\x1a\x6a\xc8\x0d\xa8\xbc\x5b\x43\x84\x52\x1e\xaf\x71\x5c\x40\x1c\x2e\x6d\xdf\x35\xa8\x16\x29\x4e\xcd\xc4\x68\xd5\x1a\xa0\x3c\x06\x76\xdc\xa6\xf1\xf8\xc7\xab\x87\x05\x76\x1e\x6c\x7a\xcb\x6f\xcf\x97\x85\xd8\xbe\xc1\xdb\xb9\xbb\x5b\x6e\x00\x3f\x3e\x53\x44\x21\x62\x36\x98\xd6\x35\xaf\x1c\xe4\xe4\x38\xb6\x55\x03\xdb\x8a\x09\xdd\xbe\xc1\xa3\x7c\x29\x4f\x48\xcd\x7c\xaa\xa8\x38\x96\xfb\xa4\xce\x5a\x28\x1c\xe7\x64\x92\xf6\x8e\xdb\x04\xdf\x0e\x5e\xad\x1c\x8c\x7c\x33\x8c\x93\xc9\x17\x00\xa9\x83\xf6\xee\x74\x65\x27\x02\x94\x4a\x60\xee\x3b\xf8\x70\x29\x93\x18\x17\x7f\xb4\xd3\x81\x4e\x31\x40\x61\x17\x40\xba\xbb\x0b\x4c\xc2\x9d\xa7\xe1\x1a\xd9\x75\x72\x0c\xbb\x0f\x4e\x64\x33\xb7\x0c\xf6\xd7\xa5\xdb\x5f\xb5\x47\x24\x14\x08\x7b\xa7\x24\x57\x67\x63\x20\x06\x48\xea\x94\x59\x97\x5e\xbf\xb3\x9f\x59\xb8\x9b\xcf\x7f\x93\xde\x64\xab\xc9\xee\xc6\x78\x82\x63\xd9\xd7\xbb\x35\x50\xea\xf8\x83\x56\x0b\xf2\x2a\x6f\x47\x90\x66\x71\xf8\xeb\x97\xfb\x7c\xf7\x65\xaf\x23\x59\x9d\x97\x7b\xec\x15\x57\xac\x0e\x19\xb0\xdd\x97\x01\xb3\x13\xc2\x64\x85\x2b\x33\x2a\xa5\x3f\x18\xa8\xfe\x87\xed\x91\xba\xe8\xcd\x2a\xf9\xfe\x12\xc2\xa5\xe6\x7a\x3f\xc9\x3d\x5d\x05\x91\x1a\x10\xc5\xeb\xee\xbe\xd8\xed\x4a\x10\x39\xea\xee\xf1\x57\x42\x79\x08\xd3\x01\xdf\xed\xfa\x20\xf2\xe1\x96\xc7\xf4\xc7\x33\x4e\x55\xb8\x6f\x39\xd3\x39\x22\x72\xa6\x0b\x44\x06\x2f\x86\x92\x05\x74\x1c\xc3\xbe\x93\x27\x7b\x21\x5d\xb5\x14\xa7\x58\x72\xe7\x2a\x93\x01\x37\xa2\x0c\xeb\x9b\x49\xb8\xd3\x85\x71\x54\x63\x5b\xe6\x58\x60\x1e\x85\x08\x95\xdb\xf6\xd4\x06\x07\xfa\x6d\xc0\x50\x27\xd8\x1c\x0e\x84\x14\xd3\x2a\x7a\x13\x85\x2f\xe7\x74\x94\x50\xc0\x04\x38\x73\xf5\xbb\xe2\x8c\x04\xe0\x6b\xf0\x26\x02\x5c\xe3\xce\xe1\xff\x77\x70\xa7\x53\xc5\x1d\x77\x43\x9b\x50\x13\x5f\xd8\x93\x70\x96\x0b\xcc\xfd\x09\x2d\x89\x4b\x14\xf6\x39\x0f\xa2\x6b\x83\xc7\xf7\x8e\x3c\x55\xcc\xdf\xbe\x8c\x5e\x41\x82\x4a\x29\x66\x07\x21\xbe\x6f\x49\x7f\xaf\x53\xaa\x83\x3b\xcd\x66\x91\xf1\x01\xdb\x55\xb7\x00\x19\x29\xa5\x07\x6e\x7c\x17\xba\x1d\x2b\x5c\x70\x48\x86\xeb\x2f\x85\x01\x0f\x5e\x46\xa4\x53\x0d\x39\xb3\x2a\xc1\xc8\x9e\xf7\x96\x33\x21\x42\xdb\xbf\x33\x3b\x23\x50\xa0\x9b\xda\xee\x29\x12\xb2\x7b\x8e\x84\xec\x9e\x20\x21\xbb\x67\x48\x0c\x5e\x4a\x0c\x11\x83\x6f\x87\x4e\x76\x96\x92\xdc\x6a\x95\xc3\x25\x1a\xa9\x68\x83\xbe\x7c\x00\x4a\x79\x5a\x03\xad\xf2\x24\x2d\x95\xac\xeb\x41\x2f\xab\x15\xfb\x77\x3d\x02\x19\x80\x85\xbd\x6b\x50\x87\x82\x1e\x16\xe8\xb9\x1a\xba\xe1\xc1\xb2\xd5\x1d\x42\x8c\x96\xad\x6f\x83\x0e\x07\x78\xb8\x83\xd0\x9d\xbb\x7f\x72\x6f\x11\x01\x26\xb1\x86\x4f\x2c\x24\x03\x3b\x0a\xa6\xe7\xe7\x72\x7a\xcc\x4e\xa9\x9f\x24\xb3\x63\x0a\xbd\x63\x96\x7a\xc7\xcc\x10\x91\x93\x34\x41\x44\x4e\xd2\xa2\xc4\x98\x49\xb3\x39\x81\xe3\x60\x14\x70\x8e\x46\x19\x83\x05\x1c\x03\xf8\x90\x98\xa8\xf9\x7e\xf6\x10\x4c\x94\x2c\xbb\xd8\xbf\xeb\x2d\xe1\x0c\xc0\x45\x30\x51\xf2\xd3\x52\x4e\x94\x4d\x46\x69\xb9\x75\x6d\xa8\xd0\x9a\xc1\xf1\x40\xa0\x79\xeb\x5b\xc9\xa2\xc8\x09\x5a\xa2\x3b\xd9\xeb\x78\x30\x6f\xa9\xdc\xb0\xb7\x19\x96\x70\xcc\x5b\xb9\x52\x26\x67\xe3\xc1\x7c\x88\xb0\xac\x35\x44\x4b\xd0\xcb\x78\xb8\x00\xf3\xd6\x77\xc3\x60\xea\x4b\x66\xa7\x03\x31\x7c\x80\x0a\x20\x68\x73\x0f\x45\x85\xe6\x2a\x99\x84\xc4\x9d\xb9\x1d\x05\xc7\x8a\x2b\x9f\xcd\xae\x3c\xa1\x33\x03\x00\x3e\xa4\x2e\x7e\x8c\x28\xe5\xad\xdc\xb1\xe3\x9b\x9d\x15\x47\xd9\x4a\x8d\xd4\x1a\x49\x0b\x95\xfb\xab\x6a\x2f\xa1\x05\xbd\x1e\x53\x79\x6d\x95\x92\x4e\x9e\xbc\xb6\x22\x93\xec\xad\x11\xe7\x10\xb2\xb7\x0c\x3b\xdd\xad\x27\xed\x44\xf6\xfd\x41\x9c\x48\x04\x51\xf0\x66\x18\xf4\x76\x32\x6b\x61\x2e\xc1\x59\xad\x76\xb0\x16\x5b\xd4\x2f\xad\x0b\x06\xcd\xa6\x79\x69\x80\x4a\xa4\xe7\xf0\x29\x7a\xd5\xe7\x27\xa6\xf8\x95\x58\xa8\x09\xbd\xa5\xef\xd4\xb5\x65\x95\xa8\xea\x78\x31\x03\x7f\x34\xd3\xd6\xab\x2a\x11\xe0\x88\x2d\xa9\xc0\xdc\x24\x28\xb6\x4f\x50\x2f\x43\x6f\x12\xec\x79\x98\xc3\x17\x00\x06\x82\x9e\xc9\xcc\x16\x89\x76\xee\x58\xae\x4a\x86\x2a\xd7\x45\xca\xc3\x41\x34\x9b\x22\xd6\x80\x9a\x51\xac\xe3\x94\x31\xd7\x1b\x9c\x68\xaa\xd2\xae\x32\xc6\x77\xb7\x00\x48\x54\xaf\x01\x30\x1d\x2b\xf1\x00\x8f\x55\xb4\x51\xb6\x94\x72\x9c\x14\x38\xad\xc5\xe0\x4e\xd7\xe9\xdd\xb6\x04\x7f\x78\x24\x4e\xcb\x8c\xc1\x7a\x42\x68\x3e\x9b\x3d\x3c\x72\xa3\xf8\x82\x3a\x97\xb3\x9e\x39\x7b\x62\xbb\x0d\x61\x03\x70\x3d\x4f\xbd\xe4\x69\xf4\x33\x77\x85\x1e\x08\xda\x65\x72\x89\x4a\x93\x20\x96\xa2\x95\x49\xb2\x64\xdd\x7c\x6d\x8b\x0a\xbc\x03\x2a\x53\x1c\x4a\x25\x86\xe3\x8b\x3c\xa6\x12\xbd\xee\x97\xb2\x8e\xae\xd3\x2b\xfd\x02\xed\xad\x84\xbe\x59\xcb\x36\x5d\xd6\x5d\x07\x12\x98\xcf\x6f\x5a\x1b\x04\xa3\xe4\x00\x0e\xe3\xd5\x8a\x65\x00\x72\x20\x57\xc8\x45\xce\xab\xdc\xda\x11\xf0\xc8\x33\x52\x2e\x9b\xaa\x8c\xe9\x38\x03\xfa\x1a\xa1\xae\x76\xa2\x7c\x04\x73\x40\xfa\xfc\xfd\x99\xa2\x61\xee\x3c\x75\x87\x8a\xb3\x77\xcb\x82\x82\xe0\x0b\xd4\x81\xf1\x2c\x46\xcc\x5b\x7c\x0b\xbd\x89\x13\xb5\x37\xd4\xf1\xa1\xc7\x61\x81\xae\xcb\x7b\x89\xd2\x70\x25\xa0\xdc\xfb\x01\xe1\x30\xb9\xba\x61\x01\x35\x04\xcc\x8e\x29\x7d\x3c\xf5\x32\x82\x64\xf1\x90\xed\x49\x9d\x79\x04\x76\x60\xa2\xd9\xda\x73\xaf\x48\xae\x58\x49\xe7\x13\x96\x44\xa5\x47\x52\x62\x98\x7b\xa2\x85\x72\x67\xbe\x62\xcf\x71\xa1\x6c\xea\x40\xea\x5c\x33\x70\x8b\xdd\x2e\xcc\x81\x22\x14\xe2\x89\xc3\x1a\xee\x58\xfe\x65\x27\xbe\xc6\x32\xfb\xba\x4e\x2e\x7b\x5a\xeb\xb4\x83\x90\x4e\x55\x9c\x88\xa5\x45\x06\x7c\x98\x89\xe4\xc6\x0c\x55\xaf\x95\x33\xec\x29\x0d\xb7\x4f\xd3\x82\x9d\x1b\x52\xcc\xa0\x17\xfb\x55\xed\xbb\x18\xa4\x64\x8d\xe4\x55\xa9\xe3\x40\x83\x63\x8d\xa1\x8e\xe4\x38\xad\x18\x68\x04\xb4\x40\xaf\xed\x4c\xa5\xc2\xdd\xb0\xc7\x5e\x15\xcd\xe6\x4e\x46\x06\x6c\xf8\x7a\x06\xf6\x98\x44\x87\x0c\x23\x32\x60\xad\x6f\x87\xc0\xf2\xcd\xea\xf9\x85\xe4\x08\xe5\x8f\x97\x52\x08\x90\x3f\xbe\x1b\x26\x09\x77\x29\xe5\x2d\x15\xbc\x58\x4a\xe5\x1c\x80\x2d\x17\x89\xad\xf3\xc4\x0e\x8a\x97\x2c\x85\x59\xd5\x75\xab\xe7\xf1\x9e\xd3\x49\xa5\x76\x2d\x01\x0c\xf1\xa3\x86\x0e\xda\x6e\x52\x55\x40\xfd\x55\x4a\x0c\xd5\x13\x03\x27\x93\xac\xb3\x93\x24\x60\x61\x82\x7a\xb3\xb1\xd5\x9d\x79\x0a\x0f\x20\x45\xa7\xb9\xb8\x6d\xcf\xf3\xcf\x59\x07\xe2\x5d\x1b\xc1\x30\x06\x31\xaa\xeb\x19\x53\x6f\xb8\xdc\x90\x7b\xb0\xc2\xff\xd4\xb1\x91\xd5\xd8\xca\xb6\x54\xe4\xee\x8c\xdd\xc4\x07\xa7\xc8\xa6\x13\xc1\x66\x30\x4e\x6e\xd7\xf2\x7e\x20\x76\x50\x8d\x8b\xf8\xe0\x9e\x84\x37\x17\xde\xb4\xe2\xcf\x62\x2b\x3c\xf8\x14\x3b\xbc\x21\x2a\x80\x65\x5e\x6b\x22\x03\x3c\xea\x9b\xb8\x7b\x88\xe9\xb8\xd7\x87\x8a\x2c\x16\x3d\xf3\xf6\xb3\x7a\xdb\x59\x43\xd3\x59\xd1\x7b\xd4\x9d\x8c\x7b\x27\x70\xc4\xe6\x8b\x19\x96\xbf\x8f\xd6\x50\xf2\xd1\x97\x50\x72\x47\xbd\x73\xa8\x74\x63\xbd\x03\x68\x47\xd8\xfb\x04\x63\xd5\x5d\xef\x14\x3a\x0d\x5a\xef\x0a\xfa\x7a\xa9\xde\x21\xf4\xcc\xed\x2f\xa0\x3a\xad\x7b\xef\xa1\xd5\x31\xf4\xce\xa0\x95\xa7\x7b\x3f\x43\x5f\x48\xeb\x1d\x9b\xc7\xde\x5b\x38\x63\x6c\x51\xf4\x1e\x05\x13\xf9\xac\xf7\x0b\xa4\xb8\x90\x90\x7e\xbf\x5e\xbb\x00\x68\x3e\x21\xdb\x18\x36\x21\x20\x79\x2e\x6e\xc2\xd6\x9b\xb6\xbe\xdb\x5b\x40\x6c\xef\xff\xd0\x1b\x18\xfb\x68\x10\xed\xfb\x31\x62\x54\xe4\xa4\xe2\xfa\xf1\x5f\xca\xf7\xe3\x1b\x95\x9c\xb6\x7c\x5c\xb0\xd9\xc3\x84\xcc\x66\xa5\x73\x08\xbb\x57\x55\xcd\xd3\x52\x90\x59\x50\x7b\xc1\xf1\x48\xae\xca\xee\x04\xe7\x62\xc9\x71\x59\x11\x97\x81\x9f\x22\xdf\x92\xd2\x5a\xa1\xe2\x65\x72\x74\x70\x78\x75\x7e\xf1\xe3\xf5\xd1\xf9\x05\x52\x8e\x47\x1a\x74\xe5\xc8\x4e\xee\x72\xa1\xf2\xbd\x18\x87\x44\xfe\xe0\xbb\xa1\xd4\x45\x37\xf9\xf5\x66\xda\x26\xd5\xb3\xed\xd3\x5e\xe8\xca\x79\x41\x42\xff\xaf\xa5\x62\x2f\x19\x33\xca\x3a\x90\x28\xe7\x5d\xc2\x68\xce\x1f\x40\x26\xf4\x07\x5d\xd2\xec\xd5\x49\x3e\x12\x8c\x3f\x9c\xe6\x34\x57\x91\xc3\x6a\x2a\x26\x8a\x05\xcd\x90\xc2\xa4\xa3\xc2\x63\x77\x5b\xee\xde\x11\x3a\x45\x3b\xdd\xd4\xad\xe5\x8c\xb1\x4f\x51\xca\xfd\xd2\x49\xc4\x44\x14\xf4\x47\x5e\x46\x45\x52\x51\x0e\x2b\x5a\x69\xd5\x9d\xbf\x0a\xc1\x4d\x6f\x08\x50\x64\xe8\xaa\x58\x79\xf2\x0b\x7e\x5b\x6d\x64\x9e\x6c\x44\x8e\xb4\x13\x87\x55\x28\xa2\x94\x26\x71\x95\xd5\x2a\xf3\x62\xa2\x64\x16\x3c\xd3\x03\xe8\x25\xae\xe2\x54\x14\xfb\xd1\x2d\x1e\x88\xe1\x96\x89\x32\x83\x53\xeb\x31\x10\x43\x28\x25\x08\x57\x66\xe4\xde\xda\x99\x69\x36\xdd\x4f\xc9\x31\x3d\x35\xc1\x31\x53\xa5\xf0\xec\x58\x45\x17\x25\x8c\x56\x4e\x18\x73\x98\x64\x18\x3d\xae\xc1\x80\xb7\xcf\x7f\x38\xeb\x5f\x98\x1c\xcf\xaa\x6a\x7c\x08\x98\x41\x24\xad\xf5\x7f\x95\x4b\x43\xfd\x90\xd4\xcd\xa0\x68\x17\x6c\xc9\x47\xb8\xd9\xdc\x11\x65\x9c\xe5\xd5\x2a\x8b\x6b\xe2\xcf\x8b\x9c\x8e\x95\x3b\xdb\x89\xc2\x54\xb5\x2c\x20\xb4\x50\x95\xdc\x18\x88\x0d\xb1\x96\x3e\x2a\x6b\xdb\xee\xb2\xd9\x29\x16\xda\x92\x3c\x13\xb0\x51\x10\x3a\x9d\x61\xc1\x68\x03\x44\xfe\x41\xcf\xaa\xae\x25\x7f\x41\x72\x81\xfd\x06\x46\xe1\x5d\xee\x57\xfb\x78\x48\xb6\x58\xcd\x19\x2f\xe7\x8c\x07\x73\x46\x7c\xd0\xaa\x13\x26\x24\x97\x0a\xbc\x81\xf0\xb6\x1b\xb1\x07\x43\x56\xa2\x39\x19\x82\x7d\xda\xab\x91\x4f\xd1\xc4\x08\x34\xc1\x35\x39\x31\x1d\xc8\x97\x69\x05\x01\x6d\x7b\x13\xb5\xe5\x81\x43\x7d\x70\x34\x80\xcd\xa6\x5e\xbd\x66\x53\x2f\xc3\x5a\xca\xfa\x72\x18\x8e\x80\xd9\x9d\x85\x88\x0d\x71\x05\x9e\xd9\xb5\x72\xba\x72\x3d\xfa\x80\xf0\x66\x33\x53\x3f\xc8\x6a\xa5\xfb\xaf\x05\xe0\x8b\x7b\xad\x1f\xb0\x37\xd8\x9d\xb0\xb3\xd5\xea\xab\x87\xa3\xc7\xc1\x57\x2b\x3d\x1e\xdb\xc5\x6a\xa5\x7b\x48\x8d\x47\xb2\x6d\x89\x40\xc0\x6c\x39\x1b\xab\x1b\x79\x3d\xe0\x6d\x43\x31\x1a\xaa\x09\x02\x25\x72\x45\x4e\x68\x25\xa0\x75\x44\x32\x10\x75\x9d\xbd\x28\x37\xb6\x07\x1e\x32\x5b\xef\x49\x01\x22\xe9\xd8\xa4\x79\x52\xc1\x2f\x15\x1c\x14\x7a\x01\x21\x6a\xba\x45\x0c\xb2\x75\xe4\x46\x16\x5c\x98\x2a\xa5\xc5\x0c\xd9\xf8\xcd\x84\xd1\x42\xa7\x31\xb2\x58\x3e\x6b\x36\xb3\xf0\xbb\x24\xb4\x50\xcb\xe9\xc2\x97\xd3\x19\xca\x08\x12\x03\x3e\x04\x92\xda\xaa\xe8\x81\x30\x47\x52\x54\xc4\x23\xe5\x86\xac\x44\x5b\xbd\xa1\xe1\x6c\xc0\x86\xa8\xd8\x97\x14\x23\x87\x8f\xfa\x65\xaf\x58\x83\x9e\x7a\x03\x54\x1e\x24\xe3\xf0\x2b\x49\x64\xf9\x84\x76\x96\xda\xd5\xa0\x1c\xd5\x22\x3c\xb7\xec\x54\x2a\x0f\x39\x29\xa7\x8a\xac\xd1\x6b\x80\x41\xc7\x5d\xae\xa5\x71\xec\xb1\x1c\xa2\x95\x33\x5c\xaf\xbd\x9d\xee\x3a\x74\x66\xd0\x56\x47\x7a\x42\xb9\xe7\xdd\x44\xf5\x4b\xe5\xab\xc1\x15\xce\x49\xd2\x79\xf5\xb0\xc0\xee\x0c\x2b\x54\x9e\x10\xf9\xda\x7b\x25\xfc\x11\x8d\x43\xc7\x2e\xb3\xf7\x21\xf1\x43\xe9\x65\xdc\x0f\xf9\x42\xfc\xe0\x34\x19\x45\x7c\x40\x06\x62\x38\x04\xc9\x43\x78\x1d\x9a\xee\xe2\x3a\xd6\x4d\xb3\x5a\x49\xdc\xaa\x29\x6c\x6c\x79\x25\x92\xfe\x80\xf3\x4f\xa7\xf9\x02\xde\xd5\x5b\x3e\x6a\x12\x6b\xf4\xfd\x8e\xe3\xf5\xd9\x4c\x73\xfc\x1b\x06\x53\xee\x57\x6b\x0c\x36\x59\xce\x66\x2a\xf5\x80\xc9\xe3\xe8\xce\xdb\xb1\x7a\x6b\xaa\xcc\xf3\x31\xbe\x62\x3a\x43\x9b\x35\x57\x35\xba\x6b\x87\xce\xe6\xf5\x83\xf6\x3c\xb1\xcc\x49\xd2\xde\x4d\xd8\xa6\xaa\x62\x8b\xdb\x30\x95\x7e\xad\x78\x1b\xc0\x12\x0e\xba\xdc\xfe\xf3\xfc\x93\x2b\x94\x95\xa3\x0e\xc7\x6c\x2d\xcf\xfc\x16\xa3\x9b\x28\x45\xb9\x12\x16\xe5\x4e\xd7\xea\xed\x77\x07\x3a\x6b\x36\x33\x86\x08\xca\x04\x5a\x64\x21\x84\xa9\x49\x06\xc0\x6b\x05\x8a\x60\xc7\xc6\x93\x4c\x80\x0d\x5d\xc0\x02\xba\x86\x95\x67\x91\x4a\x7c\xa6\x43\x32\x81\xec\x71\x0d\x19\x94\x63\xdc\x29\xc7\x6f\x06\x54\xbd\x30\x39\xca\xc9\x4c\x3b\x4c\x18\x62\x9d\xd3\x6d\x7b\x2f\xb1\xcd\x26\xdb\x7f\x6a\xb4\x12\x90\xb7\x1a\x7f\x6a\x6f\x9f\xb2\x42\x6c\xcf\xc8\x27\x3c\x7b\x50\xb5\xe6\x9a\x6a\xcd\x1e\xb6\x4d\x70\x88\x6d\xd5\xf5\x36\xe3\xba\xd1\xbb\x7c\x46\xc6\xdb\x73\xa6\xbc\x32\xb4\x3c\xd9\x6e\x80\xad\x94\x99\x76\x09\xf7\x35\xa1\x44\x1c\xe9\xfd\xb3\x5f\xf3\x5e\xb3\xe1\xbd\x60\x52\x4a\x3e\x69\xb5\x4a\x4c\x50\x0e\x00\x54\xf9\x12\x0b\x2c\xce\xe5\x0e\x01\x56\x4b\xad\xf6\x8b\x73\xc4\xaa\xcc\x60\x96\xbb\x33\x43\x23\xbc\xc1\x76\xa5\x90\x56\xd9\x06\xd1\x37\xff\x67\xf0\x7f\x7a\xc3\x56\x4f\xfd\xfd\xc3\x37\xf0\xe6\xf7\xf1\x25\xb2\xf2\xe5\xc4\xc6\x8d\xc6\xee\xa7\x2f\x55\x9a\xf3\x90\x23\x17\x58\xc0\x0a\x9d\x79\xbb\x7f\xf6\xb1\x7d\xdd\x3f\x3b\x78\x73\xd2\xbf\xbe\xe8\x5f\x9e\x9f\x7c\xec\x5f\x5c\x1f\x7d\x38\x3b\x54\x41\xa7\x2e\x3f\xbc\x7f\x7f\x7e\x71\x05\x59\xfb\xa2\xff\xee\xf8\xf2\xea\xe2\xc7\xb2\xd0\xc1\xa5\x2b\xd7\x6c\xd6\xad\xa0\xed\xaf\xd9\x54\x36\xe4\xcf\xec\xcf\x6e\x77\x07\xf8\xa3\xf9\xd5\x0b\x5e\xaf\x41\x20\x03\xe5\x7a\x9b\x54\xa8\x2a\x0e\x0b\x04\xe2\xef\xb5\x08\x4e\x95\x3a\xfa\x6d\x35\xa7\xcf\x2b\x37\x2b\xd9\x68\x4d\xe8\x13\x51\x55\x4d\x51\xb7\xa7\x36\x9d\x08\xee\x22\x44\x0d\xfb\x19\x25\x27\x39\x99\x5d\x62\xa1\xce\x90\x4b\x6c\x4d\x7f\xad\x19\xf9\xc6\xaa\x72\x3e\xce\x37\x16\x4c\x11\xf5\xf2\xe8\x49\x04\x8d\x90\x50\x14\x26\xbd\x64\x25\x61\xb5\x89\x0e\x95\x12\x9f\xbf\x5e\xf6\x31\xa6\x18\x81\xfc\x18\xcc\x8c\xf5\x5c\xe5\x29\x0c\x1a\xf0\x21\x8a\xe6\x4c\xb9\xf4\x44\xc9\xef\x69\x02\xf8\xe0\xf2\x3a\xd1\xfd\xb3\x30\xc3\x8f\x48\x1b\x02\x26\x86\xc1\xc7\x00\x23\x2a\x1f\x2d\xe8\x62\x08\x93\x63\x8f\x95\x30\xa6\xb1\x1a\xa3\xe2\x34\xbf\x27\x82\x83\x48\x1b\xd8\x6b\x46\x74\xb5\xa2\xa5\xb4\x29\x85\x94\x8c\xeb\xa8\xcd\x15\x31\x93\x3a\x31\xd3\x71\xf2\xe1\xc0\x78\x7c\xc9\x65\xa5\x0f\xe5\xd3\x55\x8e\xeb\x36\x97\x0c\x9d\xdf\x96\xf3\xaa\xc1\x1e\x21\xca\x98\x47\x07\x9d\xac\xa0\xe8\x7d\x78\x88\xe3\x0a\x5a\xf8\x45\xf6\xbd\x9e\xf3\xf1\x38\xe3\xa0\x57\x05\x1c\x31\x67\xfb\xe6\x2b\x6d\x22\x65\x58\xc5\xc5\x97\x37\x9b\xfe\x25\x8b\xa5\xe9\x41\x42\x12\xfb\x12\xd8\x21\x98\xeb\x6d\xea\xbb\xfa\x40\x5e\x51\xb4\x8d\x38\xb9\x49\x86\x26\xf2\x7b\x2c\x67\x2b\x78\x34\x6a\xbf\xb7\x58\xa7\x87\x21\x8c\xee\x3f\xf1\x3d\xc3\xa5\xbb\x96\x0f\xf5\x7e\xf0\xe4\xe0\x92\xc5\xe3\x88\x98\x76\xae\x8e\x2c\xb7\xfa\x95\xb0\xbb\x86\xf6\x6b\xde\x3f\x13\xd6\x0a\x40\x9b\x80\x4e\x01\x9b\xa2\xfc\x03\x3c\xb4\x1c\x5f\xf5\x4b\x44\x4e\xbc\x7e\xa3\x2d\xec\x73\xbe\x69\xdd\xec\x73\x26\xca\x6f\x65\xbf\xfe\x93\x6a\xf7\x39\x13\x56\xad\x54\x4a\x01\x09\x9b\xb2\x44\x58\x52\xa3\x8c\xfd\x28\xb9\x47\x7f\xf4\x81\x29\x18\x55\xb7\xef\x4e\xdb\x15\x6d\x34\xfb\x41\xa5\xc5\x90\xe5\x3c\x55\x58\x68\xad\x5b\x1b\x50\xa0\xe4\x2d\x4b\x0d\x83\x93\xbb\x29\x74\x0d\xf6\xf8\x1a\xd4\xee\xf6\xaa\x09\xbf\xa1\xd3\x47\x8c\x4b\x09\x37\x1a\x7d\xe5\x50\x56\xe8\x50\x31\x24\x3b\xaf\x6b\x23\x0a\x49\x1c\xb4\x53\x21\x3b\xa2\x96\xec\x88\xf0\x4d\xb5\xcb\x4c\x09\x54\xc9\x81\x25\xcf\xf6\xba\x03\xd2\x1e\x5a\x74\xc3\x28\x9f\x73\xde\x5a\x5d\xb2\x77\x0a\x56\x86\x4b\x6b\x87\x4b\x6b\x87\xab\xc6\x49\x6b\x20\xab\x1f\xa9\x03\x23\x32\xd8\xf0\x35\xa9\x74\x20\x86\x2e\xb7\x96\x84\xd7\x6a\xc3\x52\xfa\x17\x0b\x62\xb0\xa4\x7c\x08\xa2\xf6\xf6\xe5\x9f\xe7\xec\xd1\x52\x35\xad\x36\xa8\x6e\x24\x32\x96\xf6\x39\xe5\x0a\x3f\x40\x43\x30\xf7\xb2\x14\x7b\xed\x53\xb9\xca\x17\x34\x18\x02\xa0\x8d\x8b\x1e\xad\xf2\xab\x27\xa0\x53\x7d\xf5\xe8\xba\x12\x04\xa2\x0e\x1a\xcf\x69\xaf\xc4\x0a\xad\x7b\xde\xd5\xc9\x91\x6c\xf6\x3b\x09\x6f\x60\xdc\x13\xc0\x65\x54\x53\x86\x31\xa9\x60\x99\x1d\x65\x29\x18\x0c\x48\x39\xc2\xe0\xed\x93\xa3\xe3\xf1\xe8\x54\xc0\xc7\xda\x1d\x0d\x39\x64\x75\x9c\x7c\x1e\xe8\xb8\xaa\x7c\xa4\xaf\xf4\xca\x03\xa5\x17\x47\xb9\xc4\xc2\x70\x2d\x8d\x7d\x01\x93\xfc\xcc\x4e\x27\x8a\x3a\xb4\xdc\xe0\x7f\xe8\xed\xa8\x22\xda\x51\xfe\xe0\xf4\x9e\x7a\xc6\xc1\xe4\x57\x52\x06\xda\xf5\x9f\x55\x9b\xb1\xc4\x5f\x40\x56\x71\xb0\x88\x4e\x95\xd4\x79\x3d\xf5\x73\xbe\x04\xdb\xde\x13\x1c\x13\x81\x07\x50\x05\x0d\x4a\x9a\x9b\x9e\xa6\xf2\x56\x25\x41\x70\x3d\x45\x27\x06\x40\x51\x29\xdf\x02\xb3\x47\x9d\x9d\x6e\x92\x44\x85\xea\xd3\x0d\xf0\x56\x36\xe6\xaf\x80\x39\xd2\xd9\x7e\x31\xdc\x15\x79\xe1\xeb\xb9\x9a\x4a\x53\xfb\x75\x37\x55\xb8\x2a\xa7\x29\x57\x06\x31\xdc\x62\xab\x55\xa6\x7f\xa6\x24\x37\xab\x9e\xe3\xab\x15\x85\x05\x62\x83\x3c\xa4\xf6\x85\x25\x34\x85\x2a\xb8\xf4\xe5\x90\xa4\x64\xe4\x87\x52\x1a\xe4\x43\xb4\xac\x17\x22\xea\xb8\x1d\x8f\xd1\x79\x16\xb3\x96\xbe\x39\xb5\x51\xd4\xd6\x26\xe8\xd8\x75\x1d\xe9\xb9\x47\x59\xa3\xd1\x52\xe6\x53\x3c\xa7\x63\x36\xcf\x40\xab\x8c\x06\x29\x65\x95\xc5\x2c\x1f\xe1\xac\xd1\x6e\xc0\x46\x03\x6c\x79\xf6\x18\x37\xd0\x37\xd4\x48\xc4\xad\xd2\xfe\x3e\xd7\xe6\x26\xc8\xcb\x43\x69\xa8\xbd\x47\xb5\x20\x43\x5c\x3b\x6b\xf1\x41\xd7\x21\xb0\xac\xaa\x01\x27\x54\x60\x4e\x41\xc6\x5a\x8d\x5e\xa3\x95\xb7\x1a\xbb\x8d\xd6\xbd\xda\xdf\xa5\xd9\x48\x01\x43\x93\x92\x07\x6d\x12\x33\xce\xa7\xbb\xf3\x7c\xf1\x25\x31\xab\x37\x67\x2a\xb9\xbe\xc3\x5c\x90\x91\x89\xb4\x97\x8c\x8d\x17\xa6\xd0\xb1\xd8\x9a\x0e\xd8\xdf\xb0\xe2\xdf\xf6\xbf\x3e\xe1\x87\x7f\x6d\x93\x62\x9b\xe3\x7f\x2f\x09\xc7\xe3\x46\x70\x90\xb9\x7e\x55\x5c\x07\x29\xc2\xea\x5b\x76\xd6\xbe\xcb\x67\x48\x1e\xa3\x64\x92\x55\x82\x0d\x50\xa0\xca\xf6\xc7\x53\x9c\x31\xa8\xeb\x51\x00\x74\x80\x0f\x6b\x9a\x99\xa3\xce\x5e\xfe\xca\x05\xa9\xcc\x5b\xad\x54\xad\x41\x3e\x04\xaa\x47\x9e\xec\x89\x7b\x75\x88\x11\xb1\x21\xf3\x7a\xd2\xbd\xf0\x74\x2f\xa6\x86\xec\xa3\x12\x7d\xc7\x94\x29\x12\x73\xaa\x66\x46\xcd\x05\x4c\xb9\xdb\xe2\x7c\x94\xc8\xdf\xe3\x66\xb2\x7d\x9f\xcf\x3e\x55\x0e\x0a\xc1\x16\x05\xe3\x09\xf3\x12\xd9\x5a\xe6\x4c\x10\x4a\x73\x2c\x61\xe4\x99\x8d\x68\x13\x46\xa3\xd3\x69\x88\x24\x16\x98\x6b\x86\x45\x2e\x6e\xfd\x67\xae\x73\xf7\xa9\x37\xcf\xc9\xd2\x54\x83\x5c\x73\x52\x14\x84\x4e\xb7\x3f\xe1\x07\x83\x4d\xfa\x7a\xad\xb3\xf2\x80\xf2\xd8\x0b\x6e\x33\x3d\x18\x86\x55\x71\x17\x9f\xf0\x83\x6f\x53\x4d\x03\x87\x3d\x33\x2e\xde\xd2\xc6\x48\x92\xe9\x78\x24\xe3\xcf\x3d\x0e\x3f\xe1\x87\x1e\x86\x77\xf9\xcc\x5e\x2d\x9a\xc4\x79\x93\x99\x4e\x99\x67\xdd\x0d\xd7\xc9\xd5\x4e\x09\x56\xa3\x5b\x3c\xfa\x24\x9f\x25\x48\xc6\xbd\x5f\x0f\xc6\x1f\x89\xf1\x64\xb7\x39\x2a\x85\xf6\x62\xc7\x6d\x32\xfe\x6c\x95\x4d\x22\x00\x5b\xc2\xac\x3e\x43\xdc\x66\x4b\x51\xb1\x36\x92\x58\x92\x3a\x80\xf5\xbc\x99\xd5\xc2\xca\x62\x57\x4d\xa2\x37\x2f\xf6\x6e\xd2\xcd\x25\x5b\x0a\x13\x0d\xf0\x8e\x14\x44\x64\x54\x91\xd5\x12\xbd\xbc\xc5\xaf\x68\x5f\xd5\xf0\xd3\xfa\x3e\xad\x5a\xd3\x0b\x95\xf0\xb1\x19\x3d\x8c\x66\x78\x7b\x8c\x85\xca\xd3\xd0\xdb\x6e\xb4\x44\xab\xb1\xfd\x6a\x57\xfe\x50\x5b\x5a\x8b\xc9\xd6\xfa\xb6\x3e\xe1\xa7\x1a\x07\x1e\xd0\xe1\xf0\xab\x3a\x53\x20\x86\x3d\x87\xf3\x57\x4e\x0c\x76\x29\x6e\xe5\xd6\x28\xc3\x61\xea\xee\x38\x4a\x75\x03\xa3\x79\x94\x35\x03\x5a\xcf\x5b\xc8\x42\xb2\x06\xb0\x84\x99\xc7\x46\xbe\x91\x81\x99\x0b\x0d\x54\x2e\xb9\x9f\xe5\xca\xee\x6a\x0f\x52\xfb\x4a\x2f\x65\xf9\x12\xcb\x0f\xc8\xc7\x10\xfc\x4a\xec\x61\x93\x3f\x7b\x80\x87\x6d\xb9\x3d\x50\xec\x6e\xa0\xe6\x24\xbd\xf4\xd6\xa0\x5e\x01\x64\xaf\x3a\xd5\xc8\x73\xe4\x81\xa0\x20\x27\x26\xf8\xa0\xda\x0b\x7b\xee\x02\xdd\x6c\xf8\xce\xca\xc6\x0b\x7a\x8d\x3a\x8a\xa4\x18\x27\x49\x15\x2c\x4c\xc2\x05\x46\x8c\x0a\x42\x97\x2a\xab\x3e\x37\xa0\x76\x20\xd3\xcd\x52\xb9\x01\x10\xe2\x6a\x77\xaa\x08\xc6\x5b\xa6\xc3\xff\x4b\xbd\x54\xc9\xc7\x74\xc4\xe6\x84\x4e\xe5\xac\xab\xc3\x81\x19\x47\xaa\xdc\x15\xae\xc6\x74\xb4\x95\x36\xc5\x81\x55\x33\x60\x88\x99\x45\xdc\xdd\xee\x9e\x78\x2d\x77\xe5\xee\xae\x9e\x61\x8a\xf0\x40\x0c\xf5\x34\xaf\x56\xdc\x42\xbe\xf1\xdc\x08\x66\xdb\xd2\x18\x65\xa4\x60\x77\x87\x21\x37\x22\x33\xb1\x1e\xf5\x1e\x51\xa4\x13\xaa\xc4\xf4\xe6\xd4\x08\x83\xa6\xd7\x9f\x12\xcf\x4e\x46\x37\xf0\xaa\xb5\x5a\x43\xd4\x59\xe1\x8d\x29\xe8\xac\xe7\x90\xa2\x41\x83\xdd\x5d\xaf\xba\xc9\xa0\xa7\xd9\x26\x3f\x5a\xfc\xf3\x58\x27\xac\x2f\x5d\x0f\xf3\xd9\xec\x30\x24\x54\xe0\x51\x67\xdf\xbc\xc5\x9c\x88\xe0\x14\xe7\xe0\xd1\x83\x15\x09\xeb\x26\xc8\x75\xb6\x24\x2f\x7f\x36\x7c\x74\xa9\xe5\x19\xef\x3d\xaa\x90\x6a\x3d\x0c\x31\x5d\xce\x8d\xa9\xf7\x4e\x17\xde\x73\x22\xf4\xef\x0e\x1c\x31\x3a\x21\xd3\xa5\xf9\xd6\x59\xaf\x9d\xcc\xca\x9b\x4d\xdd\xb7\x84\x4a\xe4\xd3\x29\x1e\x5f\xe1\xf9\x62\x96\x0b\x7c\x42\x04\xe6\x8a\x93\x2e\xe2\x03\xc8\x2d\x08\xcf\xef\x91\xd0\x16\x96\x9e\x29\x7c\x4d\x80\x4c\x6d\x32\x43\x32\x6f\x94\xd0\x0f\xcb\x4a\xd5\x47\x48\xc3\x34\x37\x0b\x56\x14\xe4\x66\x56\x26\x3c\x65\xfc\x42\x7d\xde\x2c\x4e\x25\xd2\x30\x89\xd5\x2a\x75\xd5\xbb\x2f\x7a\x78\x6d\x98\xdd\x40\x30\x82\x2e\x75\x65\x81\xc5\x7b\x0b\xf2\xf9\x04\x72\xfb\x5e\x1b\x0a\xd8\x5c\xa9\x41\xd4\xff\x28\x5c\xf7\x1e\x2d\x8d\xa5\xe4\xe6\x30\xe2\x9a\x3c\x8f\xb7\x48\xbb\x5c\x39\xe4\x3f\xac\x56\x3b\x5d\x48\xda\xfe\xea\x49\x0a\xd3\x50\x0b\xde\x20\x74\x9b\x34\x9b\x19\x69\xdb\x95\x46\x3b\x1d\x00\x79\x86\x21\xd1\x5b\x0d\xac\xd7\x01\xfe\x72\x76\x5f\x44\xf6\xe9\x5f\x22\x08\x54\xe6\xb3\xc0\xb3\x89\x53\x43\xea\x07\xf9\xb7\xad\x27\x07\x21\x33\x4b\xcd\x66\x63\xe9\xf2\x6d\xb8\x18\x46\x3f\x10\x3a\x66\xf7\xa6\x86\x87\xce\x08\x21\xfb\xa9\xd2\xa1\xcd\x73\xe0\x3a\x2d\x5f\xa8\x66\xec\x23\xf2\xbf\x54\x5a\x91\xf2\xb1\x1c\xa6\x6b\xa5\x7c\xa1\x5a\xb1\x8f\xc8\xff\x52\x69\xe5\x96\x14\x82\xf1\x07\xd7\x88\x7b\x56\x6d\x98\x27\xe4\xbd\xaf\xb4\x40\xf3\x3b\x32\xcd\x05\x2b\x2f\xcc\xbc\x37\xaa\x15\xf7\x8c\x82\x6f\x55\xb9\xc6\x7e\x6b\x2f\x0b\xcc\x0f\xa6\x98\x2a\x8d\xc8\xbe\x6c\x44\x49\xbf\xf2\x50\xd8\x0f\x06\xa7\x5f\x13\xfb\xda\x40\xa9\xdf\x32\xfb\x36\xd1\x6e\xaf\x71\xf2\x40\x3f\x6f\x67\x02\x7f\x16\x73\x36\xc6\xa0\x01\x73\xb4\xb3\x23\x9a\xcd\x6c\x67\x87\xb6\x47\xb7\x9c\xcd\x71\xb3\xb9\x43\xdb\x72\x4f\xe4\x00\x16\xfa\x6b\x0a\x05\x8e\x8d\x4b\x94\x76\x1e\xdc\xc2\xed\x7b\xb5\xf0\x2a\x79\x89\x5b\x04\x0e\xb1\x9b\x4d\x02\x71\x09\x89\xc9\x58\x72\xa8\x7a\x34\x89\x40\x8e\x08\xc7\x13\xf6\x59\x89\xbf\xb7\x79\xf1\xf6\xfc\xd4\x26\x02\xd1\x5b\x40\xe2\x19\x9b\xe1\x6f\x94\x02\xf5\x39\x6e\x21\x29\x3f\x8f\xd8\xa7\x23\xb1\x59\x6c\x8c\xc4\x2d\xda\x3e\x39\x7f\xf7\xae\x7f\xa1\x6e\x3f\x1f\x67\x6c\xda\xab\xb7\x5f\x37\xc0\x81\xf6\x8c\x4d\x9d\xbb\xaf\x1f\x0c\xe5\x3e\xe7\xf4\x39\xf5\x65\xb9\x64\x03\x58\xf9\x50\x3d\xa3\x05\x55\x30\xd9\x04\xa1\x13\xf6\x9c\x16\x64\xb9\x64\x03\x6a\x82\x2b\x2d\x40\x61\x69\xbe\x69\xa1\xad\xca\xed\x67\xa2\x6c\x52\xbd\xb1\x81\x62\xbc\x36\x7b\xcf\xea\x57\xe7\x01\x7c\x0e\xe8\xba\x64\xaa\x11\x89\x4a\x4e\xd0\xe5\x3e\x62\x7d\x39\x4d\x75\x67\x85\xf0\xf3\x7c\x34\x9b\x38\x26\x9f\xfb\xd8\xde\x68\xb8\x18\x69\x92\x3f\xad\x90\x13\x1d\x2c\xbe\xd9\xd4\xff\x03\xdf\xc5\x5d\xa5\xe6\xbb\x7a\x58\xe0\x7d\x6a\xda\x02\xab\x95\xc8\x6a\x08\xba\xfc\x9b\xfe\x7e\x6f\x08\xb3\xfe\x1f\xac\x56\xa9\x5d\x3d\xcf\x09\x3d\x64\x54\x12\x88\x66\xd3\x7b\x58\xad\xa4\x88\x71\x64\xe7\xa3\xe1\xc9\xcd\x0d\x90\x01\x48\xd2\xe7\x79\x79\xc1\xb7\xff\x48\xe6\x6a\x5a\x25\xab\xf3\xd9\xfe\xd2\xb7\xf6\x3d\xbc\xee\xb9\xcf\xa2\x6d\x7e\xad\x56\x65\x49\xd1\x36\xbf\xe4\x4b\x53\x49\x98\x3b\xff\xd5\x0a\xaf\xd7\x19\x87\xbc\xdd\x97\xab\x09\x20\x43\x8f\xc6\xcc\xeb\xfc\xfd\xd5\xf1\xf9\xd9\xc1\xc9\xf5\x51\xff\xe0\xea\xc3\x45\xff\x52\xb2\x56\xfd\x7f\x5c\xf5\xcf\xde\x5e\xbf\xbf\x38\xbf\x3a\xbf\xfa\xf1\x7d\xff\xb2\xf7\xa8\xe2\x35\x49\x56\xcb\x0e\x50\xfe\xd6\xd7\xc4\x2a\x93\xfe\xc9\xf9\xbb\xeb\xcb\xab\x83\xc3\xbf\x5d\x5d\x1c\x1c\xf6\xaf\xcf\xcf\xae\xdf\xf6\xdf\x5f\xf4\x0f\x55\x7e\x44\x59\x56\x16\xf8\xd8\xbf\xb8\x34\x8f\x17\x07\xc7\x97\xd5\x62\x5d\x78\x79\x75\xf1\xe1\x50\x02\xa2\xba\x3f\x3a\x3e\xe9\xcb\xb7\xd7\x07\xef\xdf\x9f\x1c\xeb\x52\xd7\x57\xfd\xd3\xf7\x27\x07\x57\xfd\xeb\x1f\x2e\x0e\xde\xbf\xef\x5f\xc8\xe6\xca\x97\xe7\x67\x27\x3f\x5e\xbf\x3b\x39\x3e\x3d\xed\x5f\x5c\x1f\x9e\x9f\xbe\x3f\x3f\xeb\x9f\x5d\xa9\x61\x5d\xff\xf7\xdf\x3f\xf4\x2f\x7e\xbc\x3e\x3e\xbb\xea\xbf\xbb\x70\x90\x59\x8b\xb7\xfe\xe9\x9b\xfe\xc5\xf5\xdf\xac\x9d\x9b\xaa\x61\x3e\x5d\x1e\x1c\xd9\xcc\x8e\xa9\xcf\xfd\xb3\x0f\xa7\xfd\x0b\xf5\xf3\xf0\xfc\xec\xea\xe0\xf8\xec\x32\x55\xec\xc3\xd9\xdb\xfe\xc5\xe5\xe1\xf9\x45\xff\xfa\x40\x99\xd4\x25\x4b\x5d\xf4\xe5\x34\xf5\xdf\x5e\x9f\xbf\xb9\xec\x5f\x7c\xec\x5f\xa4\x0a\x1d\x9f\x1d\x5f\xa9\xfc\x93\xfd\x8b\xeb\x83\x8b\x77\x1f\x4e\xe5\x18\x93\xad\x9d\x7f\xb8\xea\x5f\x28\x6b\xbe\x0f\x17\x87\x7d\xff\xd3\xe1\x87\x8b\x8b\xfe\xd9\xd5\xf5\x0f\xdf\xf7\xcf\x52\x55\xe5\x50\x2e\xce\x4f\x4e\xfa\x17\x66\xa6\xdf\xa6\x4a\xd9\xf5\xeb\xbf\xbd\x76\x66\x88\x29\x80\x4f\x4f\xfb\x6f\x8f\xd5\x02\x6d\x18\x96\x99\xe2\xa3\xd3\xab\xd4\xd7\xa3\x8b\x7e\xff\x9f\xba\x5c\x0a\x5a\xb3\xd4\xd7\x6f\xfb\x47\x07\x1f\x4e\xae\x4e\x0e\x7e\x3c\xff\x90\x6c\xe7\xcd\xf1\xd9\xdb\x9a\x95\x3c\x3e\x7b\xff\xe1\xea\xfa\xea\xe2\xe0\xec\xf2\xe8\xfc\xe2\x74\xd3\x80\x25\x2a\xea\xdd\x93\x9c\xf8\xf3\x8b\xf7\xdf\x1f\x9c\xc9\x65\xfc\x70\x75\xd2\x4f\x2f\xce\x0f\x07\x17\x1b\xdb\xa8\xb5\xc1\x0c\xe0\x39\x7e\xab\xd0\xe1\xfa\xe0\xea\xea\xa2\xa6\x19\x89\x78\xa9\x2f\xef\x2f\xce\xdf\xf7\x2f\xae\x7e\xbc\xbe\xe8\xff\xfd\xc3\xf1\x45\xb8\xc2\x7a\x3f\x9c\x9c\x1f\xbc\xbd\xfe\xfe\xfc\xfc\x6f\x97\xbd\xc7\x35\x74\x54\xe2\x71\xbd\x0e\x93\x5d\x92\x49\x95\x9e\x62\xc7\xf9\xf9\x01\xb4\xb7\x09\xdd\xc6\x40\x31\x30\xe7\xf7\xd4\x0a\x17\x2a\x0b\x64\xa3\x42\x79\x1a\x46\xd6\x89\x81\x31\xef\x33\x65\xb9\x9a\x51\xc4\x06\x62\x08\xf6\xe5\x5f\xa4\x3d\xbb\x06\x62\xd8\xd3\xa1\xb9\xd5\xf5\xa8\x7c\xaf\xdc\x03\x65\x39\xa7\x4d\x84\x04\xe6\x08\xb7\x2b\xbd\x96\x32\x5b\xde\x6c\x56\xc7\x95\xbb\x71\xe5\xfb\x19\xab\x56\x6f\x1b\x2b\x1f\x05\x49\x6e\x9e\x60\xaa\xa0\xa5\xa6\xb6\xa8\x7d\x4e\x16\xd6\xf9\x8d\x4d\x49\xf5\xa0\x22\x5b\xe9\x17\xc9\x1a\x06\x0e\xbe\xb9\xef\xf4\x67\xdd\x5b\x69\x6a\x8d\xdb\xf1\x1a\x6c\xa5\xd6\xbc\x28\x25\x26\x60\x97\x7c\x29\x97\xbc\x00\x45\xbc\xe4\x4b\x1d\x67\xae\x18\x2c\x87\x30\x4c\x09\x4a\xe4\x17\x56\xe9\x71\xb0\x1c\x22\xd2\x9e\x90\x99\xc0\x3c\xab\xde\x06\x27\xa4\x5f\xbc\x06\x66\x04\x33\x84\xdb\x16\x7d\x93\x90\xcf\x4a\x81\xc9\x41\x3e\x92\x90\xcf\xc0\x2c\x86\x7c\xa4\xe1\xb3\xed\x0d\x46\x06\xbd\x66\x83\xd1\x50\xf2\x51\x99\x39\x6a\xfb\x67\x1f\x57\x2b\xde\xee\x9f\x7d\x94\xac\x95\x66\x5d\x14\xcb\x3f\xd2\x4c\x83\x62\xf9\xa7\x58\xc4\x17\xa8\x8e\x3d\x20\xe6\x08\x5f\x43\x15\x6f\xb0\x72\xd1\x0a\x1e\x6d\x09\x9d\xeb\xb7\x7f\xf6\x51\x09\x0e\x53\x2c\xe4\xcf\x6a\x83\x2c\x90\x99\x15\x23\xbc\x7b\x9b\xd3\xf1\x8c\xd0\x69\x55\x6e\xd8\xa8\x02\x9a\x62\x71\x4e\x71\x98\xe0\xa3\x34\xa4\x33\x10\x57\x4a\x60\xf0\x28\x34\xac\x53\x2c\xde\x92\x62\x91\x8b\xd1\xed\xf9\x1d\xe6\x9c\x8c\x71\x2a\x61\x9e\x69\xa8\xbe\x28\x06\x8f\x14\x39\x15\x87\xb3\x2a\x0d\xd2\xc6\xa1\xc7\x29\x16\xdb\x4c\x03\xe3\x43\xb9\x36\xf7\x39\x86\x07\xf5\xe7\xe6\xb3\xc0\xb4\x20\x8c\xee\x16\xcb\x85\x9c\x8e\x94\x58\x55\x57\x74\x46\x6e\xbe\x19\xe7\x22\xbf\xce\xc7\xf9\x42\x78\x8e\xf6\xe9\xa2\xce\x46\xfb\x5a\x49\x01\xae\xd6\x13\xb2\x58\x52\x4d\x93\x61\xd8\x78\x9b\x8b\xfc\xc0\xf6\xfc\xe8\x2b\xce\x3a\x75\x61\x09\x2c\xe3\x2f\xf1\xa3\xb6\x5d\x77\x03\xab\x62\x87\x7d\x59\x0f\xd4\xeb\x61\xf3\x3c\x6f\x9a\x91\x94\x50\x6b\xf4\x05\x76\x8a\xf9\x92\x0a\x32\xc7\x4f\x4d\x5e\x29\xea\x50\x23\x93\xb4\x15\x28\xe3\xcc\x7a\x34\x70\xad\x2f\x18\xe5\xf4\x30\x17\xf9\x8c\x4d\xfb\x54\x70\x82\x8b\x37\x0f\x52\xd8\x48\xe4\x60\x6c\xcc\xd9\x18\xcf\x1a\xda\xc5\xa5\x21\x8c\xa2\x51\x3d\xaf\xe1\xe8\xa9\x36\xb4\x64\xad\x0c\x63\x0e\x40\x46\xdb\x67\xd6\x38\xa0\x7d\x76\x70\xda\xbf\x7c\x7f\x70\xd8\xbf\x94\x72\x84\x2d\xa1\xb2\xa7\xe2\xfb\xed\x0b\x3c\xed\x7f\x5e\x64\x3a\x60\xc7\x2c\x2f\x0a\x32\x79\x00\x19\x06\xad\xc6\x1f\xca\x04\x29\xdc\x26\xbe\xcf\x2a\x5d\x6e\xb9\xab\xe1\x9a\xa3\x39\x07\x2e\x83\xa3\xfc\x99\x71\x84\x07\xf9\x10\x36\x54\x67\x2a\x33\x84\x84\x48\x2b\x0f\x41\xc6\x41\xb3\x69\xae\x02\x14\x48\xe3\xbc\xb8\xc5\x9c\xfc\x82\x41\x96\x3b\x1b\x03\x06\x1b\x0d\x00\x80\x44\x04\xf2\x2c\x7c\x08\x37\x53\x75\x0b\xda\x70\x16\x06\x25\xf8\x92\xce\x18\x5b\xb8\xcf\x73\x2c\xf2\xd9\x17\x63\x8c\xcd\xac\x53\x83\x37\x2c\xc6\x1b\x42\x49\x80\xf9\xfa\x06\xba\x58\x2e\xea\x22\xc0\xda\x7b\xa3\x19\xce\x0b\xac\x13\x5a\x2a\xd7\x0e\xa6\xd6\x77\x0d\x47\xa9\xfd\xe6\xe2\x86\xd9\x64\xb6\x27\x64\x4e\x44\xef\x25\xcc\x47\x23\xbc\x10\xc5\xa9\x44\x42\x89\x3c\x72\x2f\x86\x6d\xf7\x5c\xdb\x72\x93\x1e\xa9\x83\xb4\xa8\xee\x55\x0f\x82\x7b\x49\x73\x55\x8b\x12\x5f\x8b\x64\x2c\x05\x35\x28\x73\x2f\x33\xc5\xa2\x2c\x9d\x19\x74\xd5\x8d\x6d\xe1\x8c\x87\x41\x09\x71\xe9\x56\xfc\x49\xb9\x01\x32\x44\xdb\xf7\x3c\x5f\xb8\x26\x32\x79\x58\xd2\x7c\x8e\x1d\x22\x1b\xd4\xa2\x36\xef\x6b\x59\x54\x17\x54\x81\xeb\xd9\xda\x19\xfc\xf8\x41\x88\x92\x7b\xc0\xea\x26\xd4\x6d\x08\x8d\x16\xa3\xcd\xf1\x9c\xdd\x61\xbd\xce\x59\x0e\xd6\xc1\x7d\x78\x54\x56\x02\xe6\x4a\xc2\x7c\x0d\xaf\x25\x40\x57\x4c\x5d\x1a\x54\xb6\xba\xbd\x5a\xaf\xa8\x3b\xb1\xca\x82\x92\x51\xa4\xb6\xcf\xd4\x79\xc0\xc9\x2e\x81\x17\xdf\x21\xd3\xe4\xa6\xd7\x68\x29\xdb\x2d\xaa\x37\xbf\x8a\x0a\xa4\x56\xed\x02\x8f\x18\x1f\x17\xb1\xd7\x3f\xf1\x33\x45\x41\x0f\xdd\x5c\x3c\x2e\x0f\xea\x0c\x03\x1b\x91\x6b\x8a\x85\x69\x31\x5b\x42\x0c\xe0\xc8\x1e\xb5\xbe\xaf\x38\x78\xa4\xd9\x00\x0f\xb5\xa3\xec\x2d\x9a\x55\xd6\xdb\x5a\x59\x99\x48\x75\x76\x15\x75\xcb\x19\x86\x13\x00\x60\xae\x70\xc0\xbe\x92\xcb\xb2\x40\x8f\x63\x32\x3e\xbc\xcd\xe9\xd4\xa7\x99\x90\x2a\xab\x41\x35\x9e\x19\x1c\x41\x6d\x13\x30\x43\x74\x6f\xf6\x8a\xb6\x96\x7b\xb3\x56\x0b\x8c\x90\x72\x24\xd4\xdc\xde\x81\x00\x19\x86\x33\x00\x6f\x51\xd0\xc9\x08\xc0\x1a\x88\x46\x0a\x22\x91\x0d\x6e\x87\x60\x8b\x35\x9b\x24\xa3\xca\x66\xe5\x9e\xcc\x66\x31\x3c\x81\x17\xc1\xda\xa2\x8a\xea\x3e\x1f\x8f\x15\x67\x6b\x13\x1b\x83\x4c\xfb\xff\xc1\x85\x9c\x48\xaf\x85\xe2\x69\x1c\x55\x0d\x6a\xbc\xac\xb4\x99\xcb\x06\xf3\x8d\x48\x3c\x02\x6b\x28\xb2\xdb\x24\xed\xf1\x51\x78\x04\xe0\x48\x8f\xd3\x04\x5a\xf9\xd5\x94\xed\xc9\xa1\xad\xa1\xbe\xe2\xaf\x4e\xe9\x4e\x57\x12\xc3\xd9\x72\xee\xac\xda\x37\x52\xad\x98\x36\x24\xc8\x96\xbe\xbb\xb5\x77\xe8\x31\xce\xe7\x15\x9c\x67\x10\x03\x3f\x19\x32\x78\x14\x99\xbe\x90\x0d\x09\x96\x2c\x67\xf0\x7f\x59\x83\xb5\x42\x67\xc0\xcb\xf8\xeb\xce\x6a\x45\x5e\x77\xe4\x99\x2a\x4f\x50\x3f\x64\x15\xc8\x1a\x3a\x2d\x5a\xd1\xd0\x88\x52\xfc\x16\x48\xa7\x9d\x68\xe1\x12\xc0\xd4\xec\xd5\x60\x55\x0e\x09\x5c\x82\xf5\x1a\x06\x03\xad\x3d\x09\xfc\x49\xc3\xa5\x07\xd5\xa3\x9c\xe1\x9e\xd0\x71\x70\x7b\xaa\xb7\x29\x16\x20\xa3\xb0\xa1\xef\x0d\x1b\xc0\xae\xb0\x0d\x91\xeb\x2f\xb7\xca\xd2\xa5\x10\xb3\x87\xd7\x6b\x18\x1c\x33\x15\xad\xb7\x5e\x5a\xe1\xc0\xf1\x82\x65\x05\x8c\x2b\xa8\xa6\x68\x41\xa2\x5d\xc3\xef\x19\x72\xdb\x00\x2a\x57\xe1\x86\xef\x26\xfa\xaf\x24\xdc\x0a\xe0\xe2\x9c\x3a\x56\xae\x50\x21\xec\x2c\xa6\xd2\xba\x20\xbd\x8f\xea\x38\xec\xe1\x10\x2f\x05\x80\x7a\x12\xd5\x05\xb7\xdf\x4a\x2c\x12\xfb\x77\xd8\x7a\x4b\x65\x42\x1f\xb1\x86\x80\x98\x8a\x6b\x58\x03\x66\xed\x94\xda\xba\xac\x86\x3d\xa5\xde\x79\xef\x44\x8b\xca\xbe\x17\x31\xeb\xc9\x54\x7a\x30\x20\x62\xd6\x93\xa9\x48\xcf\x76\x08\x03\x36\xd4\xfc\xa7\xb6\x70\x2d\x19\x4b\x26\x4f\x6e\x45\xbf\xb9\xe2\x29\xa9\xc2\x90\xca\x01\x98\xe2\x6f\xdc\x21\x50\x39\xa0\x05\x7a\x74\x18\x57\x8e\x45\xa3\xe5\xc7\x7c\xb6\xc4\x45\x84\xef\x87\xde\x27\x65\xf8\xdb\x2e\x70\xce\x47\xb7\x7f\xc3\x0f\xf7\x12\x90\xa8\xb8\x7d\xad\x8b\xea\x25\x4c\xb6\x7b\xe4\x7d\xd2\x85\x47\x6c\xc6\x78\xb5\x77\xa6\x12\xe6\x0b\x6f\xf0\x3e\x48\x89\x48\x7d\x6b\xaf\xa8\x05\x67\xe3\x74\x25\x61\x7a\xa2\x61\x05\x58\x4a\x20\x54\x76\xcb\xc1\x71\x9b\x28\xe5\x5b\x96\x44\x92\xc2\x74\x46\xe6\xf3\x8a\x4c\x68\xde\x7e\x63\x99\x7a\xef\xd5\x52\x90\x99\xff\x4c\xd9\x18\x3b\x21\xc0\xd8\xbf\x94\x5f\xd9\x62\xc4\xc6\x78\x77\xc4\xe6\x0b\x32\xf3\x44\x78\x27\x6a\xb8\x9e\xf0\x04\x73\x4c\x47\xb8\x22\x50\xc4\xe1\xf5\x92\xc2\x88\xbd\x93\xd5\x1f\xef\x08\xbe\x2f\x8b\x26\x8d\x1a\x6c\x45\xa2\xac\x0a\xe4\x3b\x75\x97\xec\x89\x37\x98\xdf\x11\x05\x8e\x1c\xe1\xae\x8e\xe9\xb0\x29\x18\x60\xb2\x79\x27\x24\xb9\x81\xde\x13\x8e\x77\x27\x8c\xcf\x73\xf1\x54\xac\x40\x2f\x3a\x61\x55\x26\xe3\xc5\x5d\x29\x9a\x71\xb6\x14\xb2\x9f\xba\x58\x82\x2a\x14\xbf\xe4\xee\x26\xf0\x16\x2e\xe0\x18\xce\xe1\x03\xbc\x83\x53\x78\x03\xaf\xe1\x3d\xec\xc3\xcf\xf0\x12\x9e\xa7\xb4\x53\x87\x6c\xbe\x60\x14\x53\x61\x22\xbb\x20\xa5\x48\x4a\xbc\x1d\xe5\x8b\xfc\x86\xcc\x88\x20\xb8\x40\xb8\x7d\xbe\x14\x33\x2c\x3e\x12\x7c\x8f\x70\x5b\x1d\x18\x3a\x64\x27\x6e\x13\x13\x6b\xf2\x88\xc9\x6a\xc7\x67\x1f\xcf\xff\xd6\x47\xb8\xfd\x61\x21\xc5\xd3\x9b\x19\xbe\xb0\x98\x80\x70\xfb\xe0\xa6\x10\x3c\x1f\xa5\xfa\xbb\xc6\x9f\x17\x98\x13\xb5\x72\xb3\xd3\x7c\xc4\x59\xa1\x3d\xab\xb5\xd3\xba\x7b\x53\x60\xb1\x5c\x1c\x2c\x16\x33\xa2\xad\x05\x9c\x3d\xbe\xf9\xd4\xa7\x53\x42\x71\xf8\xd6\x9a\x37\xc9\xfa\xd3\xf0\xf1\x36\x2f\xec\x63\x58\x36\x2c\xaa\x5c\x1f\xe8\x18\xf3\x4b\x2c\xc4\x0c\x8f\x8d\xd3\xb7\xdc\xce\xf2\x2d\xe6\xb2\xad\x63\x2a\xa7\x62\x24\x88\xdc\xba\xfa\xb5\x7a\x8b\xb9\xf0\x9e\xbd\x9f\xa4\xf8\xfe\xea\xf4\xe4\x32\x9f\xc8\xf6\x6f\xc5\x7c\x66\x7e\xe2\x62\x94\x2f\x70\xff\xf3\x82\xe3\x42\x4a\xfd\x08\xb7\xe5\x17\xa3\xba\xc6\xed\x7e\x89\x9a\xb2\x22\x9e\x2d\x54\x73\xdf\xdb\x1f\x17\xe7\xe7\x57\xd7\x17\xfd\x23\x15\x56\xd2\xcc\x34\xc2\xed\x13\x42\x3f\xf9\xcf\x57\xf8\xb3\x38\xe0\x38\x37\x3f\x8f\x08\x9e\xc9\x81\x29\xeb\xb5\x1b\xf6\x19\xe1\xb6\x28\x87\x7f\xc1\x98\x3f\x1b\x67\x6c\x8c\xdf\x9e\x9f\x5e\x71\x5c\x5a\x69\x69\x48\x49\x71\x89\x39\xc9\x67\xe4\x17\xb5\x3e\x47\x84\x17\x42\x96\x96\x78\x93\xac\xf0\xf6\xfc\x54\x33\x70\xce\x49\xab\x5e\x87\xe7\x8a\x3e\x5b\x85\x57\x56\xd9\xa8\xc5\x4b\x80\xf6\x25\x5d\xc4\x75\x37\xf6\x55\x37\x43\xcf\x56\x1a\xd6\x35\xb0\xb1\xd7\x9a\x15\x7b\x66\xa7\xbc\x6e\xc5\xd7\x6b\xad\x55\x38\x80\x9f\xe0\x29\xbc\x82\x87\xf0\x02\xbe\xd7\xcc\x48\xbd\x6d\x21\xc8\x06\x4e\x15\xd8\x1b\x59\x94\x2c\xbe\xd9\x35\x6a\xa4\xc6\x10\x3e\x55\x00\xc0\xb3\xe7\xf4\xe2\xea\xf6\x82\xb6\x53\xaf\x01\xfc\xf9\x8b\xe0\xde\xe5\x8c\x45\x90\x9a\x57\x00\x1e\x7f\x49\x4b\xee\x38\xed\xcd\x73\x42\x83\x16\xe3\x4f\x9e\xb8\xf5\x36\x0a\x59\x72\x92\x29\x9e\xc4\xd6\x34\x81\x86\x80\xf2\xba\x97\x0b\x74\x52\x1f\x34\xd6\xb8\x54\xa9\x0a\x36\x18\x17\x19\x2b\x9f\x00\x13\x75\x0a\x8b\x5c\x67\xdf\xff\x7f\xd8\xfb\xd7\xae\x36\x8e\x6d\x5f\x1c\x7e\xcf\xa7\x80\x3e\x19\x4a\xd7\xa0\x50\x84\x93\xb3\xd7\x3e\x72\x2a\x5a\x18\x70\xcc\x8a\x0d\x0e\x60\x3b\x8e\x8e\x1e\x76\x23\x95\x50\xc5\x4d\xb5\x52\x5d\x02\x63\xa4\xef\xfe\x8c\x9a\x75\xef\x8b\x80\x24\x6b\xed\x75\xf6\xf8\xbf\xb1\x51\x77\x75\xdd\x6b\xd6\xbc\xfe\x66\xd6\x08\xa7\xd2\x02\x3d\xa5\x26\x21\x0b\xb4\x35\x34\xce\x4d\x6d\x5a\xb4\x31\x69\xb4\x6b\x07\x8b\xef\x81\x9f\xe8\xcb\x95\x75\x1b\x7e\x49\x0e\xd2\x7b\x36\xe9\x27\xbf\xb2\xde\xfe\x8b\xf7\x72\x9c\xe0\xcb\xbc\x18\x7f\xea\x7f\x7d\x9f\x94\x77\xd7\x97\x45\x5e\x26\xfd\xe1\x08\x27\xa5\xcc\x24\x05\x71\x3b\xe9\x0f\x87\xbb\x78\xf8\xec\x6f\xd8\xaf\x76\x82\x87\xc3\x67\xcf\x70\x0f\x0f\x47\xa3\x11\xf8\xc3\x8e\xf0\x34\xcb\x4b\x3a\x1a\xe1\x64\x96\x95\x87\x37\x59\x9e\xf4\xe1\xc9\xea\x6b\xac\x86\xdb\xbf\xd7\x9c\x02\xe8\x0e\x93\x79\x36\xfe\x94\x5d\xd1\xf2\x9b\x88\xd9\x02\x65\xac\x9d\xf7\xf2\x1b\xb5\x07\xba\xb3\xcb\x32\x51\xc7\xf1\x8b\x9a\x83\xbc\xab\xfb\x88\xd2\xe4\xf4\x70\xff\xe4\xcd\xdb\x77\xe7\x87\x17\xe7\x7b\x3f\x9a\x90\x94\x57\x64\xd1\x7d\x29\xb2\x6b\x7a\x5b\x88\x4f\x7f\x89\xfa\x74\xf8\x65\x44\xca\xee\x01\x13\xf2\x4e\x1d\xeb\xf3\xec\xca\x21\x39\xae\xb0\xa0\x6a\x3e\x16\x92\x56\xeb\x1d\x7e\x19\x75\x19\xe7\x54\x74\x27\xea\xcb\x14\xa9\xb3\xfd\x4a\xdd\x52\x70\xb1\x98\x1d\x45\xb6\x34\x08\x71\x6b\x7a\x5b\x07\xef\x06\x8d\xb8\xfd\x54\xab\xe5\x31\x3b\xc9\x31\xcf\xb6\xcb\x61\xd5\xb5\xac\xd4\xef\x2a\x47\xe2\x05\x64\x48\xb1\x6f\x7f\xf7\x6f\xd3\x1e\x5e\x58\xc3\xaa\xda\x96\x83\x30\xfe\xa3\xbf\xb5\x45\xe1\xc4\x7c\xa8\xac\xdd\xbb\xb7\x07\x7b\xe7\x87\x09\xc2\xef\x2b\x2f\x34\xd3\x93\x20\xfc\xb1\xf2\x42\xfb\xb4\x24\x08\xff\xd8\xea\xf6\xde\x34\x0b\x57\x15\x70\x5f\x53\xe4\x67\xbb\x88\xd2\x61\x13\xa9\xb3\xf1\x53\x9c\x62\xce\x3b\x99\x05\xa7\x90\xb5\xfb\x54\x23\x53\x5d\x77\x9c\xe5\xb9\x81\x07\xf6\xa2\xdd\x45\x9e\x95\xf2\x94\xde\x30\xe0\x43\x34\x46\x97\x7e\x08\x72\x8e\x79\xb2\x72\xd3\xca\x9c\x9f\x3b\x4a\x25\x06\xc1\x2c\x88\xe2\x80\x4f\x1a\xc5\x68\x45\x2a\x1d\xbe\x7d\xd8\xa6\x8b\xf3\x75\x6d\x56\xe3\x7b\x95\x34\x0c\x40\x6d\x30\x35\xc8\xc3\xeb\x06\xdd\x0c\xb7\x8d\x43\x8f\x8f\x86\x46\x6d\x9a\x72\x90\x94\xe5\x2a\xfd\x11\xe1\xaf\xda\x66\xd6\x29\x77\x9e\x3a\xb5\x58\xfa\xc9\xe5\xdd\xf1\x8c\xe5\x13\x41\x79\x23\xac\x12\x7f\xe4\xa4\x56\x37\x4b\x98\x8e\xc8\xd4\xdf\x02\x9e\x91\xd6\x8b\x81\xf1\xec\x17\x0b\xe5\x07\x50\xca\x1a\x28\x43\xae\xd2\xb2\x0b\x03\x74\xfc\x3c\xc2\x3f\xb7\xef\xbc\xa0\xef\x0f\x4f\x4f\x23\x21\x43\x6b\xc7\x5f\xbb\x72\xbc\xff\x60\xda\xc3\x8a\xdc\x40\x73\x70\xb8\xf5\x98\xdc\x02\x43\x7c\x30\xbd\xdd\xfc\x55\xc3\xd0\xae\x9d\xcc\x80\x98\xfc\xea\x8f\x9d\x5c\xa5\x3f\x21\xfc\x4b\xeb\xee\xf0\x90\x0e\x7f\xfc\xe8\x89\xee\xc5\x3c\x13\x94\xdb\x0d\x8c\xd5\x03\xc3\xce\xfd\x44\xef\x08\xc7\x42\x9d\x19\xd5\xc2\x58\xfd\xf1\xb2\x10\x96\xdb\x43\xd0\x03\x2c\x1e\xb9\x81\x2c\xa1\x6e\x3e\x97\x61\x2f\x7c\x02\x0a\xdf\x11\xaf\x5c\x1d\x6b\xe5\x65\x6d\x52\x87\x1f\x46\xd1\x4c\x41\xd1\x52\x15\x6d\x68\xa0\x5a\xbd\x9d\xef\x9f\x11\xfe\xf5\x9f\x32\xdf\xb8\x20\x12\x88\x4f\x46\x4a\x2f\xb4\x06\x37\x66\xd9\xdd\x3f\x39\x3e\x3b\xdf\x3b\x3e\x57\x57\x76\x7d\x7d\xbc\x7c\xab\xd7\x08\x1e\xea\x03\x7d\x9e\x5d\x91\x6c\xcd\xc2\x01\x49\xba\x64\x5c\x71\x83\x05\xce\x46\x7f\xf1\x9a\xb9\x9e\xf9\x75\x8b\x3b\xe7\x68\x6b\x38\xe1\xc2\x93\xc2\x0d\x69\xf8\x81\xc5\x1c\x88\x6b\xe3\x5e\x13\x98\x23\x17\xa8\x6d\x42\xa1\x6b\x66\x3c\xc2\x3a\x1d\xab\xd3\x06\x1c\x05\x97\x6d\xd3\xfb\x1c\xa9\x32\x36\x44\x29\x0e\xdb\x21\x6c\xe0\xf7\x97\xf0\x79\xbd\xd6\x6e\xb3\x10\x48\xa8\x32\x1f\x76\x7c\xcf\x83\xad\xb8\x76\xeb\xfd\xe3\x2f\xbf\x08\xc2\x6b\x40\xed\x86\x16\x6e\x0d\xf3\xee\xc5\x8d\x21\x00\x8f\xbd\x10\x6a\xb7\x6c\x84\xe3\x05\x6f\x63\xa2\xa7\x57\x37\x1a\x22\x75\x89\x69\xa0\xbc\x05\xb8\x94\xd9\x55\xcc\x21\xe2\xa0\x10\x31\xf3\xf5\x23\xc2\x94\x36\x4f\x18\xff\xab\x6e\xce\xc2\x9d\xaf\x47\x1d\x5a\xcc\x9b\x8e\x9c\x3e\xf7\x41\x65\xa3\xd6\x5b\x97\xab\x49\xe6\x6d\x82\x8e\xd8\x68\xb9\x79\xd2\xe0\x30\x61\x60\x0d\x59\xf9\x56\x14\x9f\xd5\xb1\xb1\xf7\x92\xc0\x09\x2b\xcf\xc5\x42\xce\xee\x12\xd4\x97\xdd\xb7\x82\x5d\x33\xad\x43\xb2\xdb\xd5\x0c\xea\xf7\x54\x20\xa4\xef\x2e\x0e\x71\xf8\x3c\x8a\xda\x7f\x51\x14\x79\xc3\xe5\x15\x37\xab\x3a\x05\x6b\xe6\x06\xfd\x88\x23\x4e\xc3\x2e\xc2\x40\x1c\xad\x0f\x5f\xf4\x1f\x5b\x33\x08\xa5\xf8\x77\x0d\x08\xc7\x57\xa9\x54\x9c\xc5\x84\xa9\x7e\x67\x79\xc0\x5f\xc8\x96\x6d\xf4\x97\x5d\xb1\x6a\x53\xc0\xd6\xc0\xc2\xaa\xd1\x14\x11\xcf\xc4\x55\xa9\xe8\xf4\x13\x39\x10\x0f\xb2\xde\xb8\x1f\x38\xec\x07\xae\xfa\x6a\x86\x0a\xa8\xf6\x3c\xbb\xa6\x13\x5c\xd2\x94\xa6\xc2\xed\x15\xe6\xb8\x51\xb3\xe0\xd2\xe4\x29\x7c\xfc\x25\xa0\xc7\x63\x49\xbf\x1a\x92\x22\xf7\x61\xeb\x82\x68\xb4\x95\x89\x0b\xbe\x4c\xb9\xeb\x81\xeb\x8b\xe3\x77\xf8\xbf\x62\x35\xaa\x47\x74\xf8\x65\xa4\x0f\xaf\xba\x1c\x5d\xfa\xc9\x3f\xb9\x4a\x01\x57\xf7\xf4\x79\xb5\x7d\x78\xd4\xcc\xc2\x0a\xdb\x29\x2d\x88\x9b\x54\x0f\xe2\x6f\x85\x12\x06\x2e\x14\x7a\xa6\xc5\xbf\xf3\xbe\x5f\x3b\x4f\xee\xc3\x60\x0b\x1a\x3e\x4f\x55\xee\x46\xc8\x5a\x47\xf8\xdf\x20\x3a\x78\x0f\x1c\x9a\x52\xbc\xb5\xfb\x38\x99\xa0\x34\x24\xed\xca\x71\xb2\x56\x60\x32\x55\x34\x49\x4c\x45\xfb\xca\xfe\x15\x9c\x04\xf4\xe0\x09\xac\x42\xeb\x0a\x6e\xfa\x01\xd9\x2d\xfb\xa8\x49\x09\x3e\xbb\xa2\x1a\x83\x0c\xfa\x10\x25\x4d\x93\x36\x69\x9a\xcc\xae\xd6\xa6\x04\xd3\x15\xc9\xec\xca\x66\x13\x7b\xff\x60\xe9\xe1\xfb\x11\xe4\x0e\x83\x6d\xe6\x35\x43\x19\x8d\xe1\x81\x69\x80\x94\x12\x05\x69\x0b\xa2\x7b\x2e\x87\x7c\xe4\x0f\x8c\x57\x22\x95\x2e\xcb\x16\x27\x5b\xe9\xa3\x73\x07\xa1\xe5\x32\xfc\x59\x51\x61\xd0\x86\x50\x61\x3a\xe0\xc0\x20\x7c\x05\x30\xaf\xf4\x76\x93\x01\x70\x6b\x93\x3f\xff\xc0\xbf\x5e\xc7\x3e\x50\xe3\x81\x43\x2b\x4a\xaa\x83\xa3\xd3\xf3\x8f\x5a\x1d\x89\xf3\xea\xcb\xbd\xd3\x1f\xcf\x12\x84\xc7\xd5\xe7\xd6\xc4\x94\x20\x3c\xad\xbe\x3b\x3a\xbb\x38\x38\x3a\x7b\xbb\x77\xbe\xff\xea\xe8\xf8\x47\x1d\x84\x93\x20\x3c\xab\x96\x7b\xb5\x77\x76\xf1\xe2\xf5\xc9\xfe\x4f\x09\xc2\xf3\xea\xcb\x17\x27\xef\x8e\x0f\xd4\x67\x13\x4a\x66\xdd\xfd\x42\xd0\xf7\x8c\xde\x5a\xbd\xe8\xac\xbb\x3f\x63\xf9\x44\x3d\x2a\xcf\xb4\x4b\x2c\x9e\x75\xd5\xcf\x33\x99\x49\xea\x1f\xc1\x96\x03\xb7\x0c\xfb\x6c\xd1\xd5\xee\xef\x7b\x30\x8d\xbe\x64\xf5\xb7\xaa\xec\x0d\xfb\xcc\x38\x4e\xd3\x53\x72\xaf\xae\x71\x6b\x33\xd8\xea\xe1\x3f\xa8\x97\x9d\xd2\x91\x4d\x5b\x36\x5c\xd0\x56\x25\xad\x2e\x30\x36\xfa\x98\xaf\x82\xb4\x60\xc3\xb9\x7a\x08\x5e\x02\x82\x6a\x93\x64\x4d\x8d\xbb\xa0\xa3\x46\x2e\x1d\x7a\x07\x5a\xdd\xe1\xb8\xeb\xe2\x9c\x0e\x8e\x0e\x2e\xf6\x5f\xed\x1d\xff\x78\x38\xaa\x21\x2a\xd9\x3e\x87\xd2\xd4\x30\xa7\x23\xe7\x23\xb4\x05\x69\xcb\x87\x74\xd4\xb7\xe9\xe9\x9a\xa1\x42\x3f\x8c\x3a\x1d\xf5\x6f\x85\x64\x62\x0a\xb9\x9f\x4f\xd5\x93\x3d\x29\x1b\xe1\xd8\x9d\xc3\x92\x22\x26\xa7\x5d\x41\xb3\xc9\xc1\xc9\x9b\x5a\x69\x47\x3c\x67\xaa\xb0\x5a\xbc\xc3\x1c\x0c\x01\xc6\x49\x14\x0b\x12\x20\x7c\xbf\x3b\x3d\x22\x84\xc8\xee\xd9\xfb\x1f\x2f\x9c\xab\x8e\x76\xcc\x95\x1e\x97\xce\x73\xc0\xc0\xff\x17\x84\x81\x47\x37\xa4\xb8\xf1\xd9\x25\x1c\x95\x58\x2e\x93\x4c\x4a\xc8\xe5\x5e\x0c\xb8\x1d\x13\xb8\x23\xa7\x19\xea\xf3\x61\x36\x5a\xe1\x53\x84\x36\x26\xeb\xd2\x8a\x58\xd7\x00\x6f\xb4\x58\xe1\x09\xed\x0a\x5a\xcc\x29\xd7\x4e\x4f\xe1\x66\x34\xfa\x74\xb5\x27\x3d\x03\xf2\x36\x13\xd9\x75\xd9\x1f\x8e\x8c\x71\xee\x9a\x5a\xfb\xc9\xff\xfe\x6d\xfe\xac\x38\xd9\x2e\x1e\x65\x3f\xf9\x0b\x8d\x22\xf4\x7a\x2e\xef\x9c\x55\xe4\x8e\x92\x09\x75\x36\x8e\x3c\xbb\x2b\x16\xb2\x7f\x4d\xf1\xd8\x9d\xd6\xfe\xd0\xc6\xef\x1b\x6b\x74\x32\xc2\x32\xbb\xd2\x2d\x32\x3e\x5f\xc8\xc4\x3b\x7b\xbf\x60\x7c\xc2\xf8\x95\xfa\x48\xad\x4f\x82\x13\xf8\x8a\x4e\x12\x9c\x30\x3e\xa1\x92\x8a\x6b\xc6\x33\xa9\xde\x4c\x58\xa9\x4e\x9b\x7a\x25\xb3\x4b\x13\xbe\x92\xa8\x8d\x91\xe0\x24\x5b\xc8\x62\x5a\x8c\x17\x65\x82\x13\x87\x42\x87\x93\x69\x21\xae\x55\xfb\x77\x73\xda\x4f\x5c\x87\xb0\xad\xaa\xbf\xb5\x8b\xa3\x66\xd4\x83\x09\x9b\x1c\xf1\x92\x0a\x69\xb6\xe1\xd3\x88\x45\xe5\x98\x24\x54\x57\x92\xa0\x6e\xd4\x10\xd9\xda\xaa\x96\x8c\xc7\x8b\x56\x78\x5c\x73\x8e\x8c\x15\x70\xc1\x64\x41\xbf\x4c\x53\x5d\xf3\x14\x8c\x40\x77\x4f\xda\xb0\xdf\xb8\x29\xd2\x91\x44\x37\x8d\x79\x03\xe0\xd5\x55\xb8\x11\x66\xe0\x86\x60\x29\xf0\xfa\x6d\x21\xe9\x67\xb9\x33\x65\x34\x9f\x3c\x72\x63\xe8\x40\x00\xb3\xc6\x36\xa9\xaa\xf9\x59\x66\x37\x7a\x6b\x08\xb3\xd8\x99\x31\x8d\xc3\x0f\xca\xc7\x66\x57\xa9\x5f\xd7\xe0\xb7\x6b\x7e\xf0\xc2\x1a\x1e\xcc\x03\x09\x57\x4b\x82\x93\x19\x65\x57\x33\x09\xfb\x6f\xbe\x00\xd8\x8c\x04\x27\x79\x06\xbe\x43\x39\x2b\xd5\x1b\x53\xe9\x75\xa6\x36\xe0\x35\x53\xcd\x5d\x2f\x72\xc9\xe6\xe0\x97\x64\x76\xe4\x3c\x93\x92\x0a\xf5\xae\x64\x5f\xd4\x83\x52\xd2\x79\x62\xf1\x60\x70\x72\xcb\x26\x72\x96\x8c\xb0\x06\x04\x4a\x12\xbd\x49\x61\x85\x0d\x73\x37\x41\xe9\x7d\x23\xd7\x94\xa8\x39\x4c\x56\xb8\x0c\x5f\x06\x8e\xab\xfa\x7d\x1d\x66\x1c\xae\x06\xba\xc9\xf8\xe6\x8d\xc3\xc4\xbb\xa1\x06\x2a\x7a\x6b\x6e\x50\x38\xa2\x37\x84\x62\x6a\x62\xd1\x2c\x4a\x8b\xd9\x0b\xe6\x74\xa4\x66\xe9\xd0\x86\x14\x77\xf7\x12\xc8\x2c\xa1\x26\x69\x3e\xf7\x56\x32\x5d\x9b\x79\x4f\x08\x5d\x41\x8c\x6c\xca\x89\x44\x18\x9c\x2e\xd4\x2c\xe9\x10\x25\x33\x73\xfa\xc7\x35\xb3\x7f\x64\x9f\x35\x38\x28\xda\xb8\x7a\xda\xa6\x0e\x76\x9c\xde\xd6\x97\x6b\xf6\x6e\xdb\x8e\xcd\x04\xcd\x92\x11\xf6\x5b\xdb\x6d\x5d\xf5\x1a\xde\x36\xee\x5e\x51\xdc\x6a\x0f\x32\x70\x50\x33\x7b\xa3\xa4\xb9\x46\xaa\x3d\xe4\x93\xf0\xe7\x99\xcc\x44\xc3\x4e\xbf\x15\xd9\xdc\x6f\x42\xbd\xd9\xf5\x36\x1a\x61\x55\xbf\x89\xec\x2a\xf2\xd2\xce\xd0\xe5\x1f\x98\x21\x18\x83\x9e\xa0\x0b\x77\xeb\x7c\x23\xcf\xff\xf3\xcd\x6f\xfb\xdf\x35\xde\x3a\x49\xc7\x7b\x66\x54\xec\xf7\xdf\xe1\x84\x4d\xc1\x68\xff\x2d\x1e\x26\x39\xe3\x9f\xce\x99\xcc\x69\x62\xad\xf7\xf8\xbe\xc1\xe0\xbf\x8b\xc3\x92\xde\xbe\x3f\x57\x97\x22\x85\x24\xcd\xea\x66\xac\x7f\xfb\x1d\xde\x6d\x28\xf7\x57\xba\x06\xa8\x7e\xed\xc8\xc2\xdd\x83\xb7\x4d\xf7\xe0\x45\xb0\x2b\x32\xb5\xe8\x3a\x95\xf6\xce\xed\x8c\xf2\x44\x2f\x92\x54\x63\x33\x30\x3f\x34\x37\xcf\xcc\x6d\x66\x7f\x29\x42\xa4\xff\xd6\x2e\x69\x3a\xe2\x26\xd1\x3f\x12\x9c\x17\x99\xda\x5c\xe6\xa9\xf9\xe5\xef\x34\xf3\xdc\xdf\x96\x26\x4a\x4d\x5d\x6d\x4d\x1b\x74\x26\xe8\x54\xd1\x34\x98\x74\x75\x79\xe6\xf1\x05\x6b\x08\xe3\xc8\xd3\xf2\x88\x36\xeb\x3e\xf9\x6e\x44\xd7\xb4\xc8\xb8\x66\x6c\x18\xbf\x3a\xe2\xd5\x27\x27\x0b\x55\x2d\x64\xd4\xd6\x73\x36\xce\xd9\xf8\x53\xf2\x74\x0e\xdd\xe4\x02\xaf\x5d\xbd\xb6\x66\x8b\x53\xa9\xa9\xa4\xc3\x35\xbe\x60\xfc\xa6\xf8\xa4\x98\xd3\x0b\xe3\xb6\xa9\xc8\xef\xb5\x41\x7b\x47\x69\xe2\xbc\x39\x91\xe7\x18\x1e\x45\xa0\xb7\x76\x9b\x88\x73\xa4\xcd\x67\xe5\x81\xa9\x92\x48\xac\x31\x99\x2a\xdd\x8f\x16\x34\x01\x40\x9b\x0b\x56\xee\xc1\x8c\xf7\x2b\x44\xbd\xfa\xad\x5d\x8e\x4a\xe6\x0a\xa9\x3d\xda\xa3\xa2\xd1\x26\x05\x60\xcb\xe4\xb2\x28\x72\x9a\xf1\x10\x8b\xd7\x21\xa8\x6a\x15\xd6\xd6\x16\xdf\xe0\x24\xe5\x84\x2f\x97\xd5\x0a\x7f\x5f\x64\x39\x9b\x32\x3a\x39\x2d\x16\x92\xea\xf9\x77\x40\xef\x9b\x0e\x1a\xb8\xfa\xd9\x85\x9f\xec\xa2\xf6\x12\x82\x11\xca\x04\xe1\xac\xf6\xca\x84\xb7\x4e\x7e\x5e\x50\x71\xa7\xd9\xe7\x24\xc4\x9d\xe7\x21\xa0\x29\x9b\xa6\xac\x6b\x27\xf1\x65\x21\xa0\x8b\x69\x81\x33\xcc\x87\x72\x84\xa9\x4f\x39\xba\xd5\xdb\xf0\x6b\xa9\xb7\x79\x75\xed\x93\xe0\x78\x26\x38\xb9\xb0\x87\xa1\xbe\x1d\xb6\x7c\xec\x86\x2d\x85\xea\x0b\x1e\x56\x87\xd4\x6a\xb7\x34\x6b\x67\xca\xa6\xea\x07\xc1\x59\xdd\x1a\x52\x8a\xb2\x3b\xd7\x53\x80\x6b\x3a\xd0\xb6\x09\x8f\xab\xb1\xaa\x93\xad\x2d\x9b\xda\xc4\x6d\x3a\x1d\xbd\x76\xcb\xf2\xfc\x05\xdd\x7b\xa0\x6b\x9a\x6a\x98\x9e\x3d\xba\x2b\x09\xd2\x41\x19\xde\x48\x11\xd6\x03\x9b\x33\x7a\x1b\xf7\x5c\x89\xb4\xa8\x72\xc8\x4c\xcf\xa5\xea\x79\x85\x1c\xb5\x2c\x27\xb0\x66\x7e\x88\x4d\xcb\xd9\xd3\x51\xc2\xd1\x10\xa2\x6f\x20\x0d\x55\x75\x8c\x7e\xe1\x2d\x5f\x11\xf6\x67\x87\xf1\xa4\xda\xc7\x93\x85\xfc\xe3\x9d\xd4\x29\x76\xd7\x77\x73\xb9\x6c\xef\x66\x5b\x3f\x8b\x85\x4c\x80\x14\x01\xf1\xac\x12\xa2\x2d\x90\xe3\x59\x79\xc6\x14\xf7\xb2\xaf\x08\x3a\x0a\x12\xe8\xf4\x36\x9c\x63\x53\xd4\xea\x5c\x00\xb1\x3e\x30\xec\x04\x6a\xa0\x53\xe6\x1e\xd2\xf9\xb9\x77\x0d\x62\x0a\xef\x74\x92\x8b\x92\xe6\xd3\x64\x8b\x28\x5a\x44\xbb\x71\x4d\x29\x42\x18\x80\x53\xaa\xb5\x5d\x2e\x2e\x2f\x73\x5a\x26\x10\x91\x53\xca\x62\xfe\x56\x14\xf3\xec\x2a\xd3\x73\x88\xab\x34\xda\x93\xd1\xc7\x11\x5b\x36\xad\x74\x2d\xa6\xc3\xa2\xd6\x9f\x26\xa2\x89\xeb\x44\xd2\xd1\xc1\x3a\x89\xfc\xdd\xd3\x3f\xad\xf8\x6d\x23\x97\xc0\x0d\x24\x08\x97\xe4\x3e\xf8\xa6\x5f\x60\x61\x9b\xee\x8b\x20\xf2\x6e\x02\x80\xb3\x57\x54\x09\xc5\x26\x40\x03\x29\xa6\xdf\x78\xcc\x17\xbc\x6b\x78\xa3\x04\xdb\x7b\xf5\x8a\x72\x2a\x32\x49\xcf\xdd\xc6\x49\x4b\x1b\x00\x01\x0b\x02\x91\x5a\xd5\x32\xb5\x84\xde\xd8\xe5\x51\x6e\xa7\x17\x35\x21\x07\xdd\xd3\xae\xdf\xb0\xa4\x08\x7e\x9c\x17\xa9\xad\x77\xb5\xc2\xe1\xd8\x81\xd9\xaa\x2f\x41\xed\xf0\xe9\x3d\xe8\x97\xa8\x8d\x88\x3e\x4c\xf1\x0c\x95\x56\xf4\xce\x7a\x2f\x62\x00\xf8\xdd\x09\x74\xcc\x9d\x0e\xef\xb2\x32\xb8\xd8\x3a\x1d\xb9\xb3\x83\x35\x96\xf5\x8c\x8e\x06\xe0\x0e\xd6\xdf\x05\x34\xeb\xc1\x43\xf4\x3d\xd8\x59\xfd\xe6\xc3\x15\x94\x58\x21\xdc\x70\xb1\xd6\x26\x24\x98\xc4\x86\x41\xdf\xaf\x70\xfd\xa8\xff\x1e\xdd\xd3\xa0\xab\x74\x69\xd3\x6d\x7a\x2d\xb3\x81\x5d\x40\x9d\x50\x32\x2b\x47\xbc\x1a\x50\x27\xd4\x2d\x0a\xe9\xef\x38\x24\xcd\xb3\xf5\xac\x10\x56\x6c\x6d\xad\xbb\xe6\xf8\x34\x1e\xb7\xb0\xfb\x8a\x09\xca\x92\x06\xb2\x61\xd8\xfb\x04\xb5\xad\x6b\xe3\x39\xae\x4f\x82\x3d\xc7\x8f\x21\x27\x2d\xef\x5f\x29\xbe\xdd\x80\x3f\xad\xbb\x50\x9b\x68\x4d\x9d\x52\x78\x4b\x94\x3d\x98\xef\x4e\x5f\x9b\xa4\x44\x8a\xf3\x34\x8d\xd6\x2f\x7c\x3d\x92\x3d\x41\x5f\x17\xd9\x04\xb8\xfe\x07\xe6\xf6\xf1\xf3\xb6\x61\xee\x93\x78\x64\xd5\x06\x91\x4e\xb3\xea\x61\xfe\x5b\xe6\x2b\xe0\xab\x2a\x55\xb4\x6e\x93\x6a\xaf\xd7\x2d\xa4\xda\xaa\x94\xf4\x9e\x53\x6f\x95\xa2\x9a\xe1\xd4\xbd\x93\x43\x3a\xf2\x97\x80\xbd\x0e\x55\x6f\x6c\xf4\x6f\x1d\x54\xc1\x26\x14\xb7\x80\xe0\x98\x81\x55\x41\xa3\x4a\x45\x19\xc5\x75\xf6\x03\x20\x20\xdb\xbb\x23\x0c\x79\x63\x5c\xb6\x03\xb6\xc2\xc1\x9e\xe9\x27\xff\x4b\x09\x8b\x93\x53\x3a\xa6\xec\x86\xee\x29\xa6\xb1\x1e\x20\x6b\xd3\x6f\xb7\x12\xae\x0d\xe3\x86\xda\x2d\x73\x36\xa6\x29\x6a\xdb\x89\x56\x8a\xf9\xa0\xc5\x8b\xd0\xca\x00\x97\x45\xa9\x98\x62\x2f\x33\x1a\xb8\x75\x45\xdd\x4c\xb6\x01\x28\xe0\xd5\x02\x58\x76\xcb\x19\x9b\xc2\xcd\xee\xdf\xd7\x08\xb3\x1c\xf6\x46\xc8\xe6\x6b\x19\x4a\x37\x85\xa3\x0d\x4a\x44\xa7\x23\x62\xba\x3a\x90\x1a\xc8\xdd\xc0\x73\x97\xfd\xfb\xd5\x2a\xa8\x3d\xa2\x72\x60\x88\xb5\x46\xc3\x81\x2f\x64\x37\x8d\xbd\x02\xcd\xa2\xa6\x12\x99\x18\xea\xa8\xd4\x10\x90\xb5\x36\x6e\x1f\xa3\xa7\x31\x67\x59\xeb\x20\x42\xe3\xc2\x6d\xc5\xb8\x50\x33\x23\xd8\xd5\x32\xc6\x84\xc3\xaa\xa9\xee\x70\x6f\xff\xd5\xc5\xd1\x71\x82\xf0\x67\xfa\x40\x50\x80\x36\x50\x1b\x3f\x4f\x99\x5d\x11\xaa\x1d\xbf\xd5\x62\x1d\xd2\x51\x4b\x54\xc0\x5a\x8f\xb6\x8a\x91\xfa\x11\x7e\xf4\x0d\x46\xea\x38\x8e\xe0\x8c\x46\xa2\x76\x93\x43\xf0\x1a\xc3\x6d\xa7\x43\xd5\x58\x56\xd6\xf5\xf8\x18\x6a\x5b\x2e\x93\xbf\x43\x16\x12\x30\xe6\xfe\xe6\x9e\xb1\x09\xe5\x92\xc9\xbb\x44\x5b\x67\x4f\x5a\x67\xd0\x65\x01\x31\x18\xf9\x66\x12\x3f\xd1\xbb\x97\x85\xb0\x09\x80\xed\xda\x35\x23\xe8\xb3\xf2\xf0\x7a\x2e\xef\xea\x33\x59\x4d\xb7\x70\x4d\xaf\x8b\x97\x45\xa3\x39\xae\x9a\x39\x94\x7e\xae\xe7\x89\x08\xf3\x3b\x58\x37\x19\xdd\x4f\xeb\x71\x6a\xfb\x09\x2c\xee\x0f\x41\x6e\x95\x45\x9e\x6f\x04\xd9\xf0\x60\x59\x5f\x16\x22\xe5\xc8\xe6\x79\x30\x7d\x53\x4f\x0a\x22\x53\xc5\x10\xf2\x38\xae\xc8\x56\xbe\xbd\xad\xbd\x06\x0a\xa3\x1d\x17\x58\x7d\xdb\x67\x26\x6e\x04\xef\xad\x73\xb3\xb1\xf9\xb5\x8a\xa7\x7b\x2a\xaa\x6f\x7d\x22\xac\x6e\x06\xa8\x81\x12\x17\x6b\x9d\x32\xa6\xa2\xb8\x6e\x4c\xc8\x68\x09\xb7\xad\x50\xe7\x21\x7b\x4b\xb5\x5b\xd8\x8c\x95\x80\xf9\xa2\x7d\xae\x55\x25\x2f\x35\xb0\x00\xa0\xc3\x37\xd5\x37\x1c\x79\xe7\xa3\x35\xe0\x23\x06\x3b\x00\x84\x75\x98\x55\x55\x77\xca\x6b\x1e\xf3\x76\x85\x5a\x0f\x1a\x0c\x7f\x48\x47\xe0\x11\x73\x42\x11\xfe\xf4\x3f\x6e\xda\x1f\x35\x1b\x70\xa5\x79\xc8\x1d\x3f\x37\xd6\xcf\x58\xcd\xcd\x9b\xf5\x73\x83\x0b\x0b\x54\xf4\xe4\xd9\x51\xdf\xba\xd9\xc9\x20\xd5\x22\x91\x38\x33\xac\x1b\xe1\x38\x7b\x70\x9e\x8e\xf8\x84\x7e\x6e\xdb\x57\x3e\x43\x02\x64\x71\xa4\xea\xbc\x0e\x47\xe0\xf3\x56\xcb\x4d\x54\xe8\x74\x3a\x0e\x10\xcd\xa9\x62\xc4\x90\x8f\x7c\x2f\x75\xde\xea\x70\xca\xb5\xf4\xf7\xf8\xbd\xee\x94\xbb\x58\xa8\xce\x98\x1e\xf5\x70\x46\x1c\xf7\xd4\x78\x0a\x54\x0d\x69\x46\xb2\xe5\xd2\xea\xfd\x7e\x20\xcf\x90\xba\xf0\xa1\xcb\x12\x61\x9b\x49\x06\xe1\x62\x7b\x7b\x85\xb0\xeb\x6b\x36\xa8\xf5\x16\xfa\xbf\x07\x2e\x7e\x4f\x3f\x3e\x7a\x7d\xf4\xf9\x79\x1c\x85\xb6\xe4\xb6\x0c\x0f\xdd\xf9\x9a\x7b\x05\x73\x7b\x3b\x9b\x50\x7e\x7b\xb7\x98\x24\x5c\x32\xba\x69\x78\xfb\x4d\xd3\x7e\x98\x86\x67\xc0\x2c\xe8\x16\x64\x21\x46\xa9\x71\xc8\xa0\x9f\x25\x20\xa2\x99\x1b\xdc\xbb\x28\x4e\x0a\x4e\xd5\x7c\xd6\x41\x50\x9f\x11\x42\x6c\xea\x1e\x3f\xd9\xea\x74\x98\xa9\xde\xa7\xe6\x57\x35\x75\xe6\x23\x6f\xbf\x35\x77\x9a\x9d\x21\x7b\xab\x99\x4c\x55\x95\x5b\xcd\x02\xbf\xe9\x19\x83\x2c\x4f\x30\x9e\xda\x2d\xc7\x2a\xb7\x1c\xc4\xed\x14\xf1\x3d\x07\xcf\x32\x22\x60\xfb\xb4\xdf\x74\xe1\x82\x51\x3b\xaf\x70\xfd\x65\xe6\xfa\x63\xfa\xfa\x2b\xec\xf5\xb7\xff\xdf\xe8\x83\xf9\xb8\x03\x60\xde\x3e\xb4\xf3\x43\xab\x08\x6c\xf8\x73\x8a\xf0\xe9\xff\x2b\xa3\x1b\xee\x3e\xfe\x68\xdb\x4f\x7a\x23\x37\xce\xb7\x94\xdc\x9b\x9d\xdd\x60\x41\xea\xad\xb0\xda\x0a\x6d\x48\x33\x2b\x7c\xfc\x30\xbf\x29\xe8\x34\x60\x36\xdf\x66\x72\x66\x29\x02\x74\xe6\xf1\x41\x18\x8e\xe9\xaf\x38\x79\x7b\x19\xc0\xd5\x38\x42\x8d\xfc\x2b\x50\x8f\xba\x63\xb6\x3f\x8d\x53\x7b\x14\x6d\x45\xe0\x8a\xed\xbc\xea\x49\x14\x84\xe0\xb2\x95\x56\x23\x33\x2c\x9e\xd2\xa2\x7b\x01\xa0\xc4\x5c\x9a\xf2\x08\xf3\x38\xa8\x81\xe9\xac\x4a\x84\x90\x94\x12\x81\x96\x4b\x2b\x0e\x6c\x05\xe2\x80\xf7\xd9\xf4\x4f\xeb\xa4\x4d\x7d\x6d\xe2\x92\x01\x27\xd9\x04\x27\x0b\x34\x78\x43\xe3\xeb\x37\x15\x21\x41\x4e\xb7\x7a\x08\xf5\xf3\xee\xab\xbd\xb3\x8b\xe3\xbd\xf3\xa3\xf7\x87\x17\x67\x1f\xdf\xbc\x38\x79\xdd\xe9\x1c\x50\xf5\xf9\xa9\xfe\xbc\xf2\x15\x42\xfd\x23\x1a\xd4\x1e\x5c\xa5\xf5\x92\x8f\xe8\x41\x25\x5f\x9b\x9a\x71\xe7\x81\xda\xb2\x9b\x15\xad\xfe\x87\x8d\xcb\xac\x54\xa0\xe7\xf7\x7d\x54\x4d\xe5\xc8\xdb\x42\xa9\x6c\xac\x41\x1d\xa3\xc7\xf6\x40\x95\x6d\xec\xc0\x9b\xb0\x92\xf6\xf6\x1b\xbe\x37\xb7\x65\xed\x1a\xa9\xb9\x0c\xf7\x1a\x5d\x86\x7b\xa3\x4e\x27\xfc\x15\x88\x51\xea\x04\x6e\x94\xb7\x4c\x8e\x15\x27\x72\x3f\xce\x4a\xaa\x45\xcb\xbe\x3d\x32\x83\x97\xb4\xff\x8e\xa6\x5f\x28\xda\xd0\x6f\xb5\x15\xde\xbe\x7f\x4d\xed\x63\x2b\x7b\xda\x37\xef\x68\xfa\x8a\xa2\x0d\xe3\x8f\x11\x3c\x7d\x41\x53\x09\xae\x9a\x70\x73\xfc\xf6\x3f\x81\x68\x78\x92\x21\x2b\x24\x23\x08\x06\xd7\x77\xf7\xc3\x11\x52\x1c\x27\xc3\x51\x82\x1c\x35\xe0\x0d\x94\xc0\x99\xbf\xdf\xd2\x50\xc4\xb5\xa7\xcc\x5e\xec\x31\x55\xe0\x68\xb0\x47\xad\xec\x25\x40\xe5\x5e\xa5\x10\x1c\x0d\x3e\x85\x45\xda\x48\x01\x47\x83\xfd\xb0\xdc\x11\x0d\x6a\x0f\x8f\x3f\xbc\x7d\x4b\xff\xbf\x13\xfd\xb8\x13\xdd\x74\x2e\xa9\x3d\x97\x7f\xc5\xc9\xa3\xee\xe4\x79\x15\xd5\x11\x5d\x8f\xf1\x6f\x85\x1a\x1f\xb9\x70\xf0\xc0\x17\x35\x16\xdd\x7f\xfa\xda\x89\x09\xa6\x5f\x5a\xd7\x98\xf2\x00\x5d\xe3\x25\xad\x30\x62\xee\xcd\x97\xf8\xcd\x2b\xb0\xa3\xbb\xb7\xaf\xa0\x5b\x96\x9c\x99\xbe\x98\xd9\x33\xe1\xc3\x8e\xae\xe9\xc9\xe3\x0b\xb5\xf9\xdd\x53\xd3\x97\xda\xe4\xc1\xa5\x7e\xb5\x60\x13\x13\x70\xb8\xf2\x6d\xbe\x08\xa6\xc2\x6b\xf7\x64\x75\x78\x81\x12\x5a\x3b\xaa\xbb\x0a\xde\xd1\x00\x10\x71\x55\xb3\x1e\x46\x56\x47\x6a\x7e\xe2\x8c\xc8\x61\x51\x07\x62\xc8\x06\x00\xe2\x48\x7a\xb8\x40\x7d\xfd\xe7\xf6\x76\x86\x8b\xed\xe4\x92\x3e\xfb\xdb\xdf\xfe\xf6\xbf\xff\xb6\x73\x79\x79\x49\x77\xbe\xfb\x8f\x67\xbd\x9d\xff\x33\x1d\x5f\xee\x3c\xdb\xfd\x96\x4e\xbf\xfb\xf6\xdb\xf1\x38\x7b\x96\x6c\x67\x68\x05\x9a\xc3\xdf\x1f\xd2\xbd\x96\x06\x3e\xac\x89\x48\xae\x51\x1f\x27\xdb\xc1\xd7\xd5\x4c\xd1\xaf\xce\xdf\xbc\x6e\x53\xcc\xda\x3a\x53\x0b\x54\xf2\x81\x92\xfb\xa4\x93\xf4\x93\x4e\x76\x3d\x7f\x9e\xe0\xe4\x7b\xf5\x77\x2e\xd5\x9f\x3f\xa8\x3f\xaf\xd4\x9f\x5f\x27\x5f\xf7\x93\xce\xef\x8b\x02\x9e\x7f\xad\x9e\xff\xaf\xcf\xcf\xfe\xa6\x7e\xfc\x97\xfe\xf1\x1f\x3d\xf5\x83\xe8\x1f\xdf\x1e\x3c\x4f\x56\xf8\x3d\x25\xdf\x0c\x3b\xdf\xff\x90\x7c\xfd\x5f\x64\xf4\x0d\xfe\x18\xfd\xbc\xf2\xc7\xe6\xc7\x70\xe5\x3f\x50\x25\x21\xbb\x77\x3f\xd1\x8a\x82\x97\x10\x3a\xa0\x24\x49\xfa\x76\x23\x6e\xc5\x70\xd4\x49\xb2\x4d\x75\x16\xdd\xdf\x69\x84\x34\xf3\x55\xb5\xa6\x76\x55\x71\xe3\xd9\xd5\xf3\x0a\xab\xfa\xb3\x33\xa2\xfc\x42\x6b\xe0\xd2\xbf\x86\xed\xfc\x42\x97\xcb\xf4\x17\xda\xea\x60\x9b\xa9\xeb\xe9\x17\xda\x9d\xe9\xab\xf9\x17\xb3\x90\xe3\x22\xf7\x1d\xff\x47\xb0\xaf\x41\x48\x35\x7b\xa0\x09\x8e\x5b\x92\x9f\x69\x77\x9e\x09\x88\x88\x72\x75\xb9\x1b\x50\x0e\x92\x7e\xd2\x97\x30\x88\x8a\x1a\xfe\xaf\x88\x7a\x8b\xc3\xc1\x19\x07\x07\x00\xed\x49\x40\xb6\x76\x31\xef\x02\x82\x14\x91\xc3\xac\x7b\xf2\xe1\xf8\xf0\x74\xa4\x38\xf7\x32\x40\xe8\x23\xa6\x88\x49\x15\x92\x26\x21\xe0\xa3\x46\xdb\x42\xf1\x17\x98\x77\x27\x1a\xf5\x99\x4e\x5c\xf8\x45\x49\x86\x71\x42\x90\x28\xe3\x06\x9b\xa6\xd6\x1f\x1a\x66\xec\x57\x33\x02\x8a\x93\x69\x51\x5c\x66\xa2\x7f\x99\x7d\x51\xeb\x62\x7f\x26\x60\x84\xf7\x4b\xf3\xb2\x10\xef\x4e\x5f\x93\x5f\xa9\x4e\x23\xdf\x94\xa3\xe5\xdd\xe9\x6b\xf4\x33\x25\xef\x4e\x5f\xe3\xda\x77\xff\xd0\xdf\x81\x4b\xcd\x5d\xf7\xe8\xec\xe2\xf8\xe4\xe0\xb0\x9e\xb1\x7a\xbf\x58\xe4\x93\x4d\x5e\xc8\xcd\x29\xe3\x93\x4d\xf0\x69\x57\xf5\x6e\xaa\xe5\x65\xfc\x6a\xf3\x9a\x8e\x67\x19\x67\xe5\xf5\xe6\xb4\x10\xf0\xe6\x2c\xe3\x4c\x1a\xfc\xb9\x04\x6d\xfc\x0c\x36\xa1\xbb\xae\x09\x9a\x40\x69\xb2\x10\x79\x82\x9a\x7a\xb4\x5a\xa5\xfc\x21\x74\x9b\xf6\x10\x4d\xaf\x7d\xad\x28\xd2\x2a\xed\x34\x5b\x2e\xc2\x0f\xf4\xba\x7b\x3c\xc4\x26\x7d\x02\xb8\x21\x55\x0a\xa2\x54\xea\x9d\x83\xeb\xf0\x31\xb2\x68\x0a\x64\x6f\xec\x4c\x18\x96\x17\xd5\x11\xe2\x69\x36\xea\x38\x8c\x75\x2a\xfe\xca\xe2\x64\x9b\x04\x9b\x6f\x8a\x09\x9b\x32\x1a\xd4\x10\x68\xf9\xc2\x4d\xdd\xe9\xd0\x87\x6b\x09\x8f\x5d\x2d\x5a\xda\x7e\xf3\x4e\xb3\x57\x7f\xae\xe1\xb8\x92\xb5\xed\x4e\xd8\xc4\x80\xb0\xc7\xc8\x15\xf6\x90\x56\x23\x56\x2f\xe9\x15\xe3\xa4\xea\x10\x5c\xa1\x1c\xbd\xe8\x7e\x83\x4f\x82\x48\xdb\x5a\x98\xf8\x35\xab\x29\x0a\x9d\x32\xb0\x81\x56\xf8\xec\xe9\x2d\x84\xa4\xc1\xd7\x94\x0f\xe5\xc8\x0f\x09\xc2\x23\x68\xad\x13\x61\x1f\xa7\x8c\x67\x79\x7e\xd7\x38\xbc\xdd\x15\xe8\x8d\x64\x88\x20\x8a\xb0\x94\xeb\x93\x72\x4f\x3c\xdc\xab\xc1\x5d\x69\xe0\x20\xe6\x82\xce\x33\x41\xf7\xc4\x55\xd9\x94\xb1\x08\x22\x16\x69\xbc\x7c\xfb\xe1\x05\x55\x4d\x97\x1d\x95\xd4\x98\xa9\xaf\xc1\x3f\x7e\x6d\xc1\xfd\x1a\x7e\x5c\x93\x0c\xb0\xb6\x0a\xbd\x05\x1f\xd1\xd6\xbb\xa6\xba\x22\x26\x9d\x07\x89\x3e\x1d\x6e\x36\x04\x21\x6e\x27\xfd\x64\x9b\x76\x0b\x40\xd5\xd5\xfc\x9b\x90\xe4\x7e\x72\xc7\xb3\x6b\x36\xd6\x8d\x43\x14\x99\x7e\x70\x9e\x5d\xa9\x5f\xc1\x1c\xab\x9f\x9a\x80\xd8\x5f\xce\x2b\xff\x55\x51\x7c\x52\x0f\x4c\x20\x97\xfd\x69\x42\xb0\xb3\x3c\xa7\xa2\xbf\xd5\xb3\x55\x9f\x8d\x8b\x39\xe0\x7e\xea\xa9\xd1\xa5\x7b\xa6\xf4\x91\xc1\x3a\x80\x7c\x96\xac\xe5\x16\xe7\xff\x4c\x8d\xaa\x01\x5e\x59\x83\x35\x69\x7d\xfc\x98\x99\x4d\xf0\x9d\x23\x1c\x24\x7b\xc7\x64\xb3\xae\x28\x0a\x79\xe2\x0b\x40\x16\xed\xca\x33\x12\x55\xa1\x9d\x1d\x0a\xc2\x21\x31\x99\x28\xd4\xbc\x59\xdc\x7e\xc8\xb2\xec\x2a\x2f\x06\xb2\xfb\xee\xf8\xe0\xf0\xe5\xd1\x31\xa4\x7c\x7c\x79\x78\x7a\x78\xbc\x7f\xd8\xd7\xb1\xbb\x05\xc2\x70\x24\xd9\x17\xf0\x04\x9c\x74\x2f\x3c\x46\x35\x44\xea\xa0\x34\xd1\x81\xbc\xa6\xf5\x04\x73\xa0\x76\x31\xbe\x8b\x0e\x0e\xa9\x08\xa0\xb5\x9b\x5c\x67\x95\x80\xab\x1c\x5c\x67\x55\x23\x74\xd2\x4d\x2a\x60\x31\x57\x54\x56\x37\xb8\x63\x5d\x3c\xea\x6f\x37\x2b\x75\x29\xa7\x9c\xb8\x87\xb4\x68\xb4\x2f\x2d\x54\x67\x8a\xb0\x76\x03\x39\x07\xf8\x58\xd9\x0d\x7e\xad\x6a\x6d\xee\x87\x98\xd2\x75\x22\x21\x64\xed\x8b\x33\x9a\x4f\x9b\x15\xe1\x6a\x09\x6a\xc5\xcf\xb3\x06\x09\x66\x33\x56\x29\xc5\x1f\xb5\x12\x17\xb8\x4a\xec\xc2\xa5\xf5\xf9\x83\xbb\x47\xa7\x2f\x6f\x23\x77\x7c\x95\x4a\x89\x70\x21\xc1\xdf\x8a\x49\x9c\x35\xcd\xf7\xa3\x31\x04\x06\xe1\x8f\x7e\x21\x37\x8c\x5c\x96\x79\x90\xcd\x6b\x03\xa7\x2d\x57\x41\x5a\x0e\xa9\x28\x13\x44\xfe\xb7\xd1\xf9\xc0\x53\x16\xaa\xa1\x21\xbe\xb4\xae\xd9\x39\x0c\x59\x35\x9e\xc1\x0a\xd1\xae\x01\x66\x9a\x04\x31\x7a\xe1\x59\x56\x7e\x10\xd9\x7c\x4e\x27\x96\xba\x33\x53\x4d\x9e\x95\xe5\x29\x9d\x1a\xdc\xc8\x96\x47\xaa\xee\x08\x73\x12\x6c\xef\xbd\x3e\x40\x96\x38\x57\x9f\x86\x4b\x68\x52\x65\x08\x22\x1d\x8d\x1b\x83\xd5\xf8\x05\xe3\xdc\x90\x55\xf6\x24\xa5\x5d\xa9\xd3\x94\xa7\x49\x90\xf1\xe5\xd0\x46\xe2\xe2\xca\xfb\xfd\x9c\x66\x42\xef\x25\xc5\xd1\xcb\xa6\x3b\xde\xf9\x54\x44\x77\x89\x9d\xbe\xb0\xdb\x16\x42\xc5\x4d\x2d\xb2\xfe\xe4\x7e\xb2\x4b\x59\xbd\x70\x72\x19\x71\x8a\x74\x38\xa6\x23\x0d\x67\x11\x48\xa7\xe3\xa8\x90\x8e\xf7\x00\xb9\x03\x94\xce\xa9\xf3\x8c\xc3\xe0\x11\x6c\x76\x25\x1a\xe8\xba\x87\xbd\x11\xea\x67\x34\x85\xaa\x71\x58\xed\x54\x1a\xe7\x7d\x9f\xdf\xd4\x79\x1f\x62\x86\x0b\x42\x87\xbd\x11\xce\x08\x1d\xee\x8e\x70\x69\x97\xb5\x18\xec\xec\xf6\x0b\x88\x6a\xfe\x7c\x32\x4d\x4d\xfe\x34\xd0\xbb\xee\xec\x42\xc6\x4c\x55\xa5\x24\xd9\xb0\x1c\xe1\xad\x58\x37\x2a\xad\x6f\xeb\xf3\x94\x43\xef\xd1\x16\x21\x17\xdd\x93\x79\xd9\xfd\x91\xca\x4e\x87\xbb\x9f\x6f\xb2\xbb\x4b\xfa\xba\x18\x67\xf9\x72\x99\x32\x92\x56\xbc\xf9\xd0\x50\xf8\x1f\x58\x35\x45\x86\xfa\x43\x8d\x59\x8b\x93\x1d\xdd\x2f\x3c\x94\x98\x19\xe0\x60\xb4\xd2\xf7\xf6\x4c\x92\x7b\x10\x83\x1b\x92\x65\x50\x3f\xb0\xbe\xf3\x8e\xdd\x81\x79\x1d\x0c\x29\xa6\x78\xab\x37\xea\x0f\x69\xb7\x5c\x5c\x6a\x11\x5b\x2d\xbb\xda\x59\xfe\x81\xdc\xde\x45\x78\x6b\x77\xb4\xc2\x4c\x33\xe5\xfd\xfa\xd5\x07\x17\x15\xce\x88\x50\x33\x5c\x12\x01\x08\x23\xc3\x67\x10\x90\x9b\xb0\x89\x5a\xdc\x12\x45\x8a\x8d\x34\xf4\x86\xe7\x38\x43\x90\xbc\x93\x70\x1b\xfd\x7d\x34\xd1\xc0\x88\xed\x68\x22\x05\xd2\xb7\x2b\xeb\x96\x21\xce\x81\x6a\x0e\x17\x78\xab\x87\x7d\x90\xf7\x82\x64\x7e\x1e\xba\x09\xfa\x61\x67\x17\xe7\x64\x31\x18\x4b\xd5\xb4\x8d\xe9\xea\x26\x08\xf5\x73\x78\x84\x36\x92\x52\xde\xe5\x14\x3a\xde\xe9\xa4\x39\x10\xd0\x89\x4c\x73\x0c\x05\x12\x56\xbe\x67\xc0\x64\x24\x08\x21\x5c\xe9\x42\x89\x73\xbc\xb5\xab\xdb\x5f\xad\xf0\x5c\x92\x9f\x28\x38\x87\xce\xf3\xec\xae\xbf\xc9\x0b\x4e\x9f\x27\x08\x4f\xda\x95\x12\x7f\x0d\xc8\x92\x05\xe3\x11\x5d\xd7\xdd\x36\xf0\x47\x8b\x44\x67\x70\xae\xfe\x24\x08\xa4\x25\x6f\x91\x67\xa4\x8b\x43\xb3\xc8\x7e\xae\x53\xb6\xc4\x40\xf6\xe5\x20\xa5\x44\x6e\x27\x9b\x95\xd9\xc2\x5f\xd1\x54\xa2\x01\x68\xc8\xfa\x14\xf5\xe7\x0e\x11\x36\x53\x82\x5b\x00\x70\x74\x2d\xc9\x7d\xc3\x46\x85\x29\xe5\x95\xad\xa2\xd7\x18\xc3\x5c\x5c\x67\x73\x94\xe6\x6a\xee\xc3\xc5\xb5\xb7\xda\xfc\x4c\x15\x05\xdb\x01\xf2\x6b\x8b\xa3\x17\x0d\xb9\x27\x21\x66\x87\x0e\xe6\x3a\x0e\x76\xb5\xc2\x77\xb2\x81\x71\x34\xa7\x47\xe7\xd4\x20\xc2\xee\xc7\x7e\x82\xf0\x98\xe4\xea\x48\x4d\x49\xae\x88\xd6\x8c\xe4\xea\x50\x25\x6a\x5b\x8e\x07\xd5\x8d\x6f\x28\xc4\xba\x33\x33\x45\xee\x60\xf4\xd3\x4c\x1d\xc2\x71\xf5\x60\xa0\xc1\x38\x38\x10\xfd\xa1\x3a\xcf\x85\x39\x29\xe6\x78\x8c\x11\x5e\x58\xa5\xa0\xfd\x83\x10\x32\x05\x5f\x98\x1b\x99\x96\xb8\x18\x64\xc3\xcc\x53\xb4\xfe\x58\xfb\xc5\x5c\xa9\x77\x53\x3c\xab\x9d\x18\xdb\xf7\x85\x9b\x5b\xb4\xc2\x37\xff\xba\xf3\x31\xcf\xe4\xcc\x1d\x0d\x69\x70\xc9\x1a\x5e\xbb\xec\x46\x13\x30\x28\xea\xf8\xe7\x7f\xe6\x61\x81\xc8\x18\x38\x13\xe0\x6d\x93\xc9\x99\xde\x91\x71\x47\x96\xcb\xb4\xe1\xa9\x9a\x9b\xcb\x30\x21\x13\x45\x08\xf5\xe5\x72\xa9\x2b\x35\xba\x71\x89\xf4\xde\x6c\x39\x4e\x57\x0f\x6b\x4e\xff\x20\xff\xa8\x27\xaf\xfe\xf5\xb3\xc6\xaf\x9f\x85\x5f\x3f\x33\x5f\x3f\xdd\x47\x33\xf4\xcf\xb4\xeb\x5b\x74\x25\x00\x48\x12\x8e\x8b\xee\x34\xcb\xcb\x3b\xc8\xbe\xed\xb7\xc2\x7a\x07\xce\xc7\xc3\xf6\x71\x8f\x86\xa8\x5b\xb4\x9a\x1a\x68\x74\x23\x76\xb1\x01\x72\xc8\x5b\x96\xc5\x33\x5c\x97\x32\xad\xf3\x39\x1a\x66\x08\xd2\xa8\x5b\xcf\x93\xb2\x11\xe2\x7b\xd1\x88\x8b\x32\x2d\x44\x0a\x28\x4b\x64\x61\x14\x42\x45\xa4\x10\x82\xc4\xee\x10\xd1\xa1\x38\x3b\x8e\x70\xdd\x86\x90\x32\x92\x0d\xf9\x08\x75\x3a\x6c\xf8\x71\x34\x50\x7f\x13\xd6\x17\x00\xc3\x94\xc2\x2f\x45\x0f\x6e\xc1\x7b\x1a\x21\xbc\x50\x4f\x04\x2e\xa1\xd8\x86\x93\x9a\x80\x33\x24\x19\x2e\x81\xcf\xb9\x90\xb5\x54\x06\x2f\x13\x84\x6f\xd7\x08\x15\x06\x8f\x6a\xd6\x7d\xf3\xee\x1c\x92\xeb\xef\x1f\xbe\x7e\x3d\x22\x5b\x9a\xb7\x1d\x5e\xc8\x91\x15\x2f\x0c\xc6\x6d\x13\x4f\xdf\x80\x4e\x6b\xbf\x1e\x7e\x18\x79\xef\x7d\x08\x4d\x80\x3e\x1e\x76\xe7\x82\xdd\x64\x12\x4e\xdd\x5b\x84\x3f\xb7\x1c\x22\xf1\xcf\x54\x5c\x00\x10\xa0\x78\x50\xe6\x8e\xe5\x6a\xda\xd5\x7f\x44\x42\x35\xad\x08\xd5\x61\xa5\x2e\xdb\x47\x4d\x59\x6c\x9d\x72\xa3\x48\x67\xad\x44\xd0\xec\xb5\x3b\xe5\x02\xb5\x1a\x85\x85\xd9\x99\x03\xbb\x45\x6d\x2a\x93\x54\xe0\x5a\x6e\x0f\xd4\x17\x3e\x28\x3f\x7e\x15\x05\x9a\xba\x7e\x98\xf8\x2c\x4b\x11\x00\xc7\x85\x39\x7b\x8c\x4b\xaa\x92\x6c\x17\x08\x0d\x78\xdf\xbd\x3a\x94\x68\x55\x9d\xda\x83\x50\x73\xd6\xe2\xd0\xed\xe5\x3f\xe3\x7a\x11\xcc\x1e\x78\xb6\x77\x9d\xd8\xda\xa2\xf7\x10\x2d\x7a\x0f\xb1\x66\x89\xb4\x5a\x42\x8d\xb5\x51\xd9\xe2\x3a\xe5\x09\x50\x4d\x7a\x1e\xc8\x4e\x07\x68\xa1\xaa\x65\xb9\x4c\x26\xec\x26\x31\xd7\x86\x78\x8c\x86\x25\xd4\x9b\x84\x79\xbd\xe2\xcf\x1b\x35\xb8\x6e\x02\x4d\xe0\x6d\x98\x52\x0a\xe2\x85\xb4\xfc\xde\xad\x06\x0d\x6d\xb8\x90\xb5\xcc\xdc\x78\x41\x11\x2b\x53\x56\xdd\x61\xcb\xc0\x6e\x56\xb3\x39\x66\x28\x15\xe4\x7e\x85\x86\xd9\x28\xae\x6c\x9c\xcd\xe5\x42\x68\x2a\x0b\xdb\xf2\xa6\x9b\x95\x25\xbb\xe2\x28\x2d\xb1\xc1\x61\xf5\x85\x80\xd3\xf4\x56\xb1\x34\x16\x29\x33\xd4\xe9\x64\xce\x33\x0b\x45\x3d\x64\x8a\xac\xbe\xc9\xe4\xac\x7b\xcd\x78\x9a\xb9\xf8\x96\x86\x81\xe1\x92\xdc\xaf\x1e\xd7\x15\x7c\xdb\x7d\x7b\x72\x76\x74\x7e\x74\x72\xbc\xf7\xfa\xe2\xed\xde\xe9\xde\x9b\x8b\xfd\x93\xe3\x97\xaf\x8f\xf6\xcf\x91\xba\x0a\x0a\xd2\x7b\x5e\x7c\xcf\x9e\x17\xdb\xdb\xa8\x1c\x66\xc3\x62\x54\x19\x7f\x26\xd3\xc2\x12\xa1\x20\x78\xab\xcf\xbb\x87\x6f\xde\x9e\x7f\xbc\xd8\x3b\x3d\xdd\xfb\x08\x59\x32\x27\xfd\xb2\xb2\x39\x1b\xd2\x28\xf8\x14\xdf\x3a\xd2\x40\x74\x6f\x18\xbd\xc5\x25\x91\x95\x95\xc7\x0b\x8b\x5e\x1c\x2c\x41\x4e\x2e\x65\xba\x40\xcf\xd3\xaa\x67\x8d\x2e\x38\xcb\x4a\x10\x11\x11\x28\x1a\x9c\xb0\x49\x64\x97\x4d\xd0\x4a\x89\xa2\x39\xc2\x79\xd7\xa4\x04\x60\xf4\x96\x64\x38\x1f\xce\xe8\x88\x14\x38\xef\x5e\xe8\x00\x3d\x7d\x69\x12\xe6\x13\x3a\xb8\x93\xac\x84\x45\xa3\x2a\x25\xfe\xa9\xbe\x1c\xc6\xa4\xb4\x17\x6d\x8e\xf0\x94\x3c\xa0\x8c\x0d\x92\x06\x9d\x49\x3c\x46\x1b\x7a\x22\xc8\x18\x6b\x05\x47\x06\xd0\x1b\xb3\x6e\x36\x99\x38\x2c\x4a\x94\x66\x8a\x3d\x07\xbe\xf1\xaa\x7b\x78\xfc\xbe\x7b\x71\x78\x0c\x37\xdf\xc1\xd1\xc1\xc5\xd1\xf1\xd1\xb9\x46\xc3\xbc\x38\x7b\xf7\xf6\xed\xc9\xe9\x79\xa7\x33\xf6\x4a\x24\x40\x8c\x63\xc0\x96\x97\x4a\xf6\x88\xde\x84\x71\x96\x26\x5e\x77\x4e\x92\x64\x8b\x90\xb1\x25\x0c\x1b\xf3\xe5\x32\xa5\x55\x35\xd6\x38\xd6\x52\x59\x05\x15\x1e\x77\x2f\xa2\x98\x76\xc0\x38\x0a\x74\x5b\xeb\xab\x89\xa0\xed\x12\x13\xb6\x79\x0d\x5c\xc5\x42\xa6\x14\x8f\xf1\x02\x4f\xf1\x3c\x30\xd1\x07\xeb\x6f\x74\x3c\x9d\x4e\x7a\x1d\x68\xff\x4c\x09\x9d\x9a\x56\x97\x68\xe8\xc7\xbc\x7d\x44\xd7\x35\x6a\xd8\xae\x3d\x76\x8b\x3b\x1c\xd3\x51\xfc\x5d\xbb\x61\x8a\xfa\xf0\x24\x4b\x0b\xfd\x95\x52\xaa\x5f\x66\x30\x78\x41\x68\xa8\x5c\x7c\x0e\x1b\xa5\xac\xc0\x52\x66\x98\xdb\x8d\x99\x75\x6b\x98\x4a\x78\x4a\xb2\xae\x87\x11\xc3\xf3\xf0\xa7\x2d\xb4\x31\x56\xd3\x61\x42\x21\xea\x92\xad\xcb\x24\x6b\xa4\xdb\x31\x38\x2b\x10\xee\x44\xc3\xe7\xa0\x63\x9b\x3e\x47\x05\xe1\xc3\xa9\x92\x35\xd3\x8c\xcc\xa4\x71\xeb\x28\x10\x52\x62\x2f\xe8\xab\xbc\xa0\x5a\xaa\x85\x1b\x6b\x4d\x66\x89\xf0\x4c\x76\x8d\xbc\x9f\x52\x2c\x70\x06\x0c\xe5\x74\x67\xe7\x79\xe5\x33\x7b\xea\x17\x44\xf8\x73\x3f\x08\xfe\xee\xc7\x0e\x5b\xa2\x2e\xa5\xb2\xc9\x7a\xf1\x7a\xe1\x75\x03\xa8\xda\x6b\xa3\x6c\x40\x9d\xce\x75\xdc\x61\x86\x56\x4a\xa6\xc6\x19\x78\x57\x32\x92\x05\xbd\xcb\x5a\x7b\x97\x29\xde\xee\x69\xbd\x63\xbe\x77\x38\xe8\x03\x87\x96\x11\x2e\xb5\x02\xce\x8a\xf0\x71\x2a\x8a\x7a\x6b\x46\x62\x2f\x82\x11\x4f\x3b\x9d\xa9\x59\x59\xf5\x57\x63\x6c\xdf\xd3\x75\x16\xa1\xc2\x05\xe1\x79\xa7\x33\x77\x6d\xcc\x1b\xdb\xb8\x03\x5d\x05\x80\x20\xad\x5a\xfb\xbd\xae\xc5\x20\xe9\x6b\x12\xcc\x59\x92\x09\x96\x9d\x16\x39\x4d\x18\xdf\xcc\x3a\x9d\x6a\xcd\x42\xbd\xc2\xb9\x4c\xb3\xa0\x68\xf0\x7d\xb6\x96\xe0\x2d\xaa\x84\x26\x5b\x4b\xf0\x6a\x24\xa3\xc5\x88\xa4\xef\x3e\x4f\x6d\xe6\x74\x44\x24\x8e\x0d\x4b\x75\x66\xb1\x91\x51\x34\x38\xf3\x0d\x1c\xa3\x1c\x34\xab\x13\x87\x0b\x3a\x1a\xa1\x3e\xfc\xdf\x42\xe3\x1e\x60\x49\x23\x2a\x56\x33\x90\xc8\xea\x8c\x32\x7e\x70\xf2\x26\x81\xfb\x38\xba\xd4\xa2\xa9\xab\xbc\x75\x16\x93\xb8\x87\x0d\x52\x9f\xf5\xae\x88\x19\x79\x33\x31\xcc\xfc\xe1\xd2\x86\x15\x31\x09\xde\xa0\x81\xe1\xe4\xf1\x37\xff\x89\xce\xa4\xd4\xe9\x6c\x09\x6b\x7b\x62\x26\xf0\x03\x1c\xba\x2e\xa5\x22\x54\x71\xd3\x44\x84\x66\x2a\xcc\x35\xe8\x33\x24\xb3\xa7\xd2\xb8\x8c\x33\xaa\x53\x97\x5b\x40\x68\x1e\xcd\x89\xf6\x2c\xb0\x8c\x00\x5f\xc3\x08\x20\x5c\xd4\x96\x85\xc7\x3b\x57\x57\x16\xd7\x13\xde\x9b\xf5\xbd\xdc\xec\x01\x51\x33\x88\x36\x7e\xf5\x27\x37\x54\x7d\x16\x1e\xbb\x61\x5a\x4c\xb2\x91\xfb\x97\x00\x83\x6c\x10\xe7\x2f\x23\xa6\xc0\x6f\x88\x03\x2a\x33\x96\x97\x3a\xfd\x22\xcb\xcc\x5c\xf5\xb7\x7a\xab\xc0\xe0\x75\xf2\xd4\xaf\x77\x57\x3a\xc6\x7f\xaf\xee\xe9\xd1\x8b\x3c\x3d\x7a\xb1\xa7\x47\x2f\xf2\xf4\xe8\x55\x3d\x3d\x7a\xb1\xa7\x47\xef\xcf\x7b\x7a\x7c\xd2\x16\xeb\xcf\x12\xbf\x91\x0d\xb2\x81\xb1\x12\x2b\x7e\xcd\xea\x6f\x62\xc9\xc0\xda\x88\xb5\xd4\x6c\xad\xc4\xd6\x38\xfd\x49\x1a\xcf\x0a\x40\xd0\xf0\x3e\x06\x38\x23\xc5\xa0\x08\x25\x69\x0b\x2a\xae\x0d\xdd\xfe\x39\xc9\x70\x24\xbf\x5b\xb3\x33\xd8\xa4\x8d\xa5\x59\xdb\xc5\xef\x55\x27\xfb\x14\xc7\xfd\xeb\x4b\x6c\x04\x7a\x8e\x9d\x9a\x41\xe0\x50\x34\xee\xef\xc9\x48\xc2\xcf\x56\x2b\x7c\xfe\xd7\xbb\xb1\x46\xd9\x00\x03\x13\xfb\x13\x92\xff\xad\x51\x79\xd4\x94\x1c\x55\x33\xf8\xc3\x1a\x0f\xde\xa2\xf1\xe0\x15\x8d\x87\x7c\x58\xa8\x34\x9c\x73\xd5\x16\x5f\x3c\x4d\x10\x63\x4e\x10\x63\x1b\x5a\x40\x05\x29\x88\x39\x29\xc8\x86\xb8\x37\x09\x43\xac\x45\x74\x60\x4f\x13\x86\xd8\x7a\x61\x08\x3b\x31\x88\x69\x94\xda\x02\x67\x3a\xc4\xff\xb3\x44\x78\xff\x21\x3f\xaf\xde\x93\xfc\xbc\xfe\xe2\xd3\xbf\xbb\xc2\xa7\xad\x1a\xdd\x20\xb3\xab\xc9\x21\x6e\x80\xf8\xd4\x80\xcf\x15\x39\xdc\x88\xdd\x50\x0c\x9a\xcf\x61\xf7\xe5\xde\xfe\xf9\xc9\xe9\xc7\x8b\x97\x27\xa7\x06\x73\x65\xa3\x76\x4a\x79\x77\xba\xc8\x73\xb5\x86\x06\x0d\x68\xb7\x87\xe2\x33\xb9\x2f\xab\x07\x99\xbb\x83\x0c\x06\xbe\x06\xf5\x71\x03\x47\xd5\x20\x05\x02\x87\x04\x41\x0a\x6f\xd7\x3a\xc9\x98\x19\x80\xfd\x67\x48\x5f\xe8\x75\x66\xe8\x5e\xd5\xaf\x8c\x37\xa6\xba\x9d\xb1\x7c\xd2\xe4\x3b\x44\x6f\x37\x75\x8a\x57\xad\x78\xa9\x36\xd2\xd8\xc4\x13\x80\x6f\x82\xaa\xe2\x8f\x4a\xda\xec\x04\x5d\xfb\x4c\x0d\xd3\xcc\xd6\x71\xfb\x6c\x71\x8b\xd5\x87\x4b\x7d\xf2\x17\x70\xf2\xf5\xba\xb3\x49\x94\xaa\xe1\x68\x02\x5a\x62\xeb\x94\x63\x6f\x0c\x35\xc8\x0a\x16\x81\x45\x94\x82\xcd\x33\x2b\x16\xf9\xe4\x94\x4e\xf3\x45\x39\xb3\x69\x35\xbc\xdb\x0d\x31\x30\x89\xb9\xa6\x38\xc5\x5c\x75\xad\x24\xf7\x59\x7e\x9b\xdd\x29\x6e\xcd\xf0\x72\x6a\xd3\x6f\x98\x36\x14\x3d\xa8\x1b\x90\xa2\x5b\x6a\x4c\x68\x40\x13\xa7\x3a\x65\x84\xfe\xf2\x4d\xc6\x38\x0a\xf2\x58\xab\xc9\xbd\x12\xd9\x35\xe6\x98\xa9\x79\x48\x39\xbe\x37\xa7\xb5\x5f\x40\x60\xf6\x19\xbb\xcc\x19\xbf\x32\x80\xdb\x78\x8c\xf0\xcc\xea\x40\x27\xc5\xfd\x8c\x4c\x4d\x24\xff\xea\x76\xa6\xda\xdb\x9a\x69\x1c\x01\xa3\xff\x59\xd8\x59\x99\x19\xf4\x84\x45\xc3\x10\xcc\x22\xce\xbb\x36\x5f\x48\x9a\xa3\x55\xe3\x51\x61\xe5\x3a\x44\x09\x58\x0c\x42\x2a\x9b\xa6\xcd\xe3\xaa\x19\x20\x81\xf2\x1b\x88\xa8\xac\xac\x53\xcf\xaf\x7c\xb8\xbe\xd0\xa2\xf7\x0a\x6b\xd8\x01\x66\xb4\xf6\x11\xba\x4f\x29\xd9\xaa\x84\x83\xa0\x4e\x87\x6b\x4f\xee\xd4\xa2\xcb\x7b\x0f\x71\xeb\x2c\x4d\x55\x21\xed\x4b\x9d\xaa\xd9\x31\x71\xae\x92\x0c\x47\x41\xcc\x9d\x37\xf6\x91\xdf\xa4\x53\x2d\x50\xb4\xf1\x9b\x04\xa3\xfd\x98\xa6\x12\xef\x06\x2c\xe2\x01\xf8\xde\xd9\x7c\x0b\xaf\xb2\x12\x12\xd6\xa0\xb4\xbe\x3c\xbf\x39\x34\xb0\x9e\x81\xd9\x7a\x6d\x42\x70\xd4\xdf\x2f\x25\xe9\x6d\x7c\xee\x5e\x66\xe3\x4f\x97\x0b\xc1\xa9\xe8\x16\x3c\x4d\x60\x50\x75\x7c\xb9\x00\x44\xee\xb7\x08\x45\xee\x37\x39\xa4\xa3\xee\x85\xf5\xb5\xf7\x27\x20\x55\x92\x7a\xad\x7a\xca\x27\x4d\xe0\x75\xad\xd5\xb3\x69\xba\x65\x9a\x60\xe5\x7b\x55\x75\x8a\xc0\x7b\xeb\xa5\xfc\x61\xb7\x67\xa2\x4e\xd4\x48\xb0\x2e\xe5\x56\x01\x07\x0e\xac\x8c\x4f\x15\xd7\x4c\x37\xf5\xd2\x32\x7e\xb5\xc9\xb8\xe9\xa7\x9a\xd1\x09\x95\x74\x2c\xe9\xc4\xdb\x8d\x5e\xca\xed\xed\xb8\xf3\xbf\x15\x8c\x83\xf1\x01\x1f\x48\xb4\x82\x16\x8d\x4f\xda\x6b\x0d\x37\xf7\x5a\x1d\x58\x80\xa5\xc4\x66\x96\xdb\x2a\x90\x08\x99\xe5\xf8\xb2\x86\xd2\x59\x6f\x88\x3f\x68\x4c\x9f\x75\xa7\x59\x9e\xab\xf6\xd5\xf6\x38\xa5\x57\xac\x94\xe2\x0e\xb3\x7a\x7d\xdf\x36\xd6\xf7\x6d\x14\x2b\xfe\xed\x08\x17\xf5\x2f\xbf\x6b\xfc\xf2\xbb\xb0\x27\xdf\x8d\xfa\xb2\x3b\xce\x19\xe5\xf2\xc5\x82\xe5\x13\x2a\x34\x55\xbc\x50\xe7\xd2\xa6\xe6\x55\x67\xd2\x1a\x01\x2d\x99\xbe\xb8\x09\xba\x6d\x79\xf1\x0b\xb5\xbc\x8c\xd3\xc9\xcb\x42\x1c\x9c\xbc\xb1\x6c\xf9\x45\x48\x9e\x83\x3a\x75\xf8\xc3\xac\x96\x96\x7b\x67\xd7\xa1\xe8\x9e\xda\x1d\x71\x0a\xe5\xfd\xe7\xf4\xba\xb8\xa1\x93\xd3\xb8\x96\x4b\x3d\x04\x52\x34\x51\x3a\xc5\xf1\xf2\x89\xbe\x3f\xc1\xca\x10\xea\x4e\xad\xbd\x0b\xae\x2e\x92\x0a\x42\xb1\xd1\xe5\xef\xbd\x7d\xfb\xfa\x68\x7f\xef\xfc\xe8\xe4\xf8\xe2\xfc\xf0\xcd\xdb\xd7\x7b\xe7\x87\x17\x1f\x4e\xf7\xde\xbe\x3d\x3c\x1d\x68\x97\x3a\x6f\xf0\xb9\x5f\x61\x21\xf1\x7d\xcc\xd9\xc5\xbc\xda\x4a\xc9\x3c\x9c\xde\xa6\x2d\x62\xc5\xbf\x12\xa9\xa4\xc9\x4c\xe9\x7c\x44\x27\xec\x26\xa9\xe5\x7f\x7b\x9c\x07\xf9\x7a\xf1\xe2\xb1\x8e\xe4\xf2\x49\x8e\xe4\x45\x2d\x52\xa8\x55\xa3\x2f\xd1\xbd\x6c\x56\x51\xc6\x6a\xc8\x6a\x21\x36\x49\x70\x35\xc2\x58\xf3\xf8\x4c\x1a\x09\x20\x93\xa9\xd0\x0c\x2e\xce\x4c\x16\x4f\xff\x08\x19\x06\xf8\x42\x6f\xc5\x03\x0a\x64\x4f\xf7\x09\x38\x8a\xf1\x42\x88\x3b\x94\x96\x08\x02\x9f\xea\x9b\xf7\xbc\x68\xda\xb4\xc0\x89\x9f\x7a\xfe\xfa\xa1\xea\x45\xbd\xfa\xda\x27\xcd\x06\x10\x62\x92\xce\x01\x60\x91\xfa\xfb\xad\x34\x24\xb3\x29\x16\xc2\x6c\xf4\xcd\x63\x99\x5a\x4a\x42\xf9\x4d\x03\x4d\xc1\x0c\xab\x93\x17\x9d\x61\x3b\x16\x7d\x25\xa8\x73\x9e\x66\x95\x4e\x5b\xde\xa6\x16\xdf\xd5\x7c\xdb\x55\xbe\x55\x94\x8b\xd6\xd3\x89\xc9\x06\x1e\x75\xa3\x4e\xf1\x86\x72\x54\xe5\x8a\x16\xbc\xb1\xd2\x09\xcd\xa9\xa4\x9b\x0d\x55\xd4\x1b\x1a\x55\x3b\xa9\x88\x5c\x45\x1b\x57\x11\x5a\x0d\x69\x35\x08\xf8\xda\xb7\x9e\x66\x7c\x31\x57\x53\xa6\xc4\x7f\x0a\x89\xa5\xea\x96\x28\x6a\x54\xe4\x4d\x84\xbb\xd3\xa1\x91\xfa\xad\xc1\x0d\x9e\x95\x07\xae\xe5\xe5\x32\x0a\xc0\x8b\x04\x9e\xa8\x33\xd1\x50\x6c\xae\xb9\xe0\x7a\x40\xd6\x78\xe5\x98\x47\x7d\x4f\x58\xdf\x0d\xfd\xcb\xf2\x1f\x62\x67\xe7\x39\x4a\xa5\x06\x70\xd6\x8c\x6c\x4a\xb5\x91\x39\x60\x33\x2c\x93\x26\xf0\x6e\x15\xb0\xa6\x81\x8f\xad\x74\xc8\x7a\xf9\x5d\xd4\x19\xd7\x0b\x35\x34\xb1\x97\xe7\x70\x07\xa5\xd5\xba\xaf\xa8\x7c\x51\x2c\xf8\xa4\x6c\xa2\x95\xc3\x39\xb5\x98\x00\xf7\xda\xec\x6d\x13\x86\xc9\x6e\xf4\x5b\x09\x1b\x4c\x94\xf2\xb8\x98\x28\xfa\xe8\xfe\x4e\x11\x56\x37\xa6\x79\x6c\xff\x4c\x01\x32\xa2\xa6\x94\xa9\x53\xc0\x4a\x42\x11\xca\x6f\x20\x71\x9d\xbe\x20\xe7\x54\x00\xdb\x55\xa6\xa8\x12\x4e\x5e\x95\x38\x83\xc3\xd9\xa8\xb4\x0f\xd6\x6c\xc3\x41\x4b\x42\x84\x01\x77\xf6\xa4\x54\xcb\x0c\xf8\x37\x69\x61\xf6\x10\xae\x9e\xfc\x32\xe0\xec\xab\x1b\x2c\x2c\xd6\x20\x90\x38\x07\xbd\x70\x37\x65\xc4\x53\xa3\x05\xa9\x33\x14\x38\xb7\xd2\xc5\x34\x10\xcc\xb2\x48\xa0\x50\x3b\x75\x4a\xac\x93\x1e\xce\x15\x6b\xa2\x19\xe4\x22\xe4\x8f\x53\x49\x8a\x21\x1d\x21\x2f\xf9\x0c\x16\x76\xa0\xfd\x94\x13\x19\x0b\xb4\x98\xfe\x40\xa6\x9d\xce\x16\x57\x1b\xcf\x4a\xaf\xdd\xaa\xf0\x4a\x38\xae\x7d\xa9\x7d\xad\xc4\x82\x1f\x45\x72\x50\x2a\xb1\x51\xa9\x25\x08\xe7\x24\x5f\x2e\xb9\xbb\x85\x22\x9e\xab\xec\xee\xbf\x3b\x3d\x3d\xd4\xe1\x52\x2e\xdc\xc6\x8a\x4a\x59\x20\x27\x69\xa9\x34\x5f\x2e\xed\x40\x7f\x98\x6a\xff\xc5\xe7\x0b\x3b\x72\x24\xc8\x42\xc3\x22\x63\x46\x7c\xa0\x87\x40\xb8\xb0\xc7\x91\xe1\x5d\xb4\x01\x3e\x42\xb5\x83\xdd\xe9\x1c\x49\x1b\x7b\xdb\xb6\xd4\x61\x84\x6b\xb0\xea\x9e\xa6\x54\x59\x47\x7b\xb4\xeb\x2c\x65\xcf\xe4\x00\xda\xda\xd5\x92\x62\x75\xf3\xa5\x08\x53\xb2\xd5\xf3\x62\xa3\x23\x0a\x0f\x4f\xa0\xf6\x0a\xf1\xa7\x2c\x12\x52\x6d\x92\x14\xf5\xc2\x4e\x2f\x6a\xe7\x7c\x57\x95\xc3\x1d\x13\xa0\x56\x61\xdc\x9c\xbf\x16\x90\xf1\x58\x28\xdb\xa8\x9f\x05\x8b\x3c\xdc\xab\xf1\xed\x0f\xad\x56\xfd\x12\x0e\xfb\x18\xc9\x5e\xb6\xe8\x09\x1f\x53\xab\x02\x4e\xc2\x74\x4b\xc2\xd5\x51\x6d\xc5\x48\x9d\x6d\x78\x24\x21\x29\x6f\xde\x6d\xcb\x65\x6d\xe5\x34\xc7\x50\x5f\xe3\xfa\x7e\x6c\x1a\x99\x5d\x40\x23\x0d\x1b\x2c\xf2\x75\xe4\x6c\x95\x22\xfc\xaa\xd5\xce\xf0\xdf\x99\x1c\xdb\x23\x2f\x74\x15\xb1\xa4\xdd\x88\x6d\xa3\x31\x43\x83\x15\x09\xec\x5a\xfe\xad\xc6\xbf\x37\xc4\x7c\xd7\x42\x59\xf7\xc6\x63\x5a\x02\xfa\xc4\x7f\x69\xed\x90\xfe\xe6\xbf\x36\x59\x09\xf1\xad\x59\x9e\x17\xb7\x74\x02\x39\x1d\x0a\xbe\xc3\xbc\x82\x7e\x33\xb0\x31\x96\x9b\x69\xb9\x18\xcf\x36\xb3\x72\xf3\x65\x56\xca\x17\x45\x21\x11\x84\xc3\xca\x55\xfa\x45\x22\xfc\xe2\x7f\xc2\x5c\xf7\x9e\x34\xd7\x34\x42\xb7\xa8\x26\xcb\xa5\x7e\x6e\xde\x01\xb8\x11\x60\x0b\x49\xf2\xae\x09\x24\xfa\xb2\x9b\x17\x63\x33\x74\x60\xfe\x01\x2e\xfa\xc3\x43\x06\x04\xa3\x7c\x11\xcd\x58\x44\xeb\xdc\x58\x6f\x5c\x1a\x62\x57\x89\xfd\x43\xf1\x13\xea\x2a\x34\xc6\x07\x00\x7e\x04\x51\x2b\x4c\x4a\x11\xd5\x9c\x8a\x3a\xa3\xd6\x2a\xd4\x3e\xb1\x4d\x36\x4d\x9b\xda\xeb\x46\x96\x9f\x06\x3c\x58\xee\x3b\x61\x41\x16\x6d\xa3\x4e\x76\x36\x22\x73\x03\xa8\x27\x33\x26\xd7\x55\x24\x4c\xb3\x8a\x30\x4d\x6b\x28\x28\x3a\xcc\x71\x8d\xf6\xdf\x0d\x3c\x2c\x6f\x60\x48\xea\xd5\xd5\x41\x40\x1e\xaa\xd0\x7e\xd1\x5a\xa5\xb3\xfb\x34\xcb\xa5\xeb\x6b\x77\x1f\xbf\x82\xd9\x69\x6d\xe4\x6d\x26\x24\xcb\xf2\xc7\x57\x6c\x3e\xb0\x15\x2a\xe2\xfd\xfe\x4f\xc1\x38\xd4\x8c\xfb\x0f\xc0\x38\xec\x3e\xd9\xb8\xef\xd5\xd9\x1f\x65\xab\x63\x78\x37\x2b\xef\xf8\xf8\x35\x9b\xd2\xfd\xbb\x71\x0e\xad\xa9\x2b\xba\xf4\x9a\xed\x1f\xd7\x7c\x3c\x71\x7e\x18\x01\xb8\x56\x08\x85\xa1\x7d\x91\xad\x4f\xb0\xe5\x8f\x02\xd7\x65\x1a\xfa\x37\x5b\x06\x14\x7c\x27\xbe\x92\xff\x2e\x0a\xb3\x46\x2b\xb7\x55\xc3\x28\xb1\x33\xa7\x57\xa0\xd0\x20\x3c\xf0\x8f\x2e\xc8\x4f\x32\x05\x30\x38\x1b\x5b\xe1\x36\x67\x5a\x75\xb0\xd6\xfe\x9e\xb8\xf0\x3e\x02\xf4\x76\xf3\x67\x45\x17\x32\xcc\x2a\x84\xbe\xcd\x5f\x8a\x50\xdf\x93\x66\xd7\xa9\x0d\x69\x3e\xf6\x1d\xe1\xf8\x27\x99\x0a\x54\x07\xdc\x59\xe3\x34\xd6\xdc\xca\xc6\x47\x09\x19\x7a\xa5\xff\x3a\x68\xa6\xde\xc0\x1a\x27\xa2\x47\x34\xf0\xae\x3a\x8e\xfa\x6d\xb8\x5f\x70\x49\x3f\x37\x6b\x2d\x5b\x5a\x90\xc1\x77\x4d\x55\xd6\xbc\x8c\x1f\x9c\xf8\x4a\x8d\xe1\xf2\x7e\x95\x36\x5c\xe1\xeb\x1d\x9b\xd4\x51\x74\x6d\xa1\x01\xb5\x01\x85\x4f\x52\x99\xbe\x97\xb5\x2f\x5a\xcd\xe6\x6a\xd7\x74\x65\x76\x55\x5b\xbd\x76\x98\x9e\x87\x55\xc7\xd5\x40\xa8\x06\x10\x92\x16\x5d\x71\x35\x3e\x4a\x82\x97\x17\xc2\x3f\x3f\xc6\x92\x6f\xe7\xed\x01\x9c\x8b\xa7\x83\x4d\xb8\xc5\x97\x15\x87\x97\x0d\x20\x9d\x9d\x8e\xab\x20\x20\x00\xf6\x12\xf9\xa5\xee\x76\xf5\x68\xa7\x2b\x37\x22\xde\xec\x24\x65\x9d\x33\xbe\x92\x86\xe5\x08\xad\xdb\xe1\x54\xd6\xdd\xae\x1e\xe7\x5a\x15\x78\x54\x45\x5c\x08\xb6\x3d\xeb\xf3\xd5\x0a\xff\xfa\xef\x0e\x77\xf4\x8f\x35\x37\xcd\xbf\x16\xf2\x68\xbd\xad\xe5\x5f\x0c\xd2\xf3\x6b\x05\xa4\xa7\x7a\x0d\x56\x31\x70\xd6\xd1\x4a\xcf\x5b\x75\x8f\xdf\xbd\x7e\xed\xcd\x05\x7f\x01\xb0\xcf\x53\x20\x7a\x10\xa6\xbc\x16\x60\xda\x8c\xac\xf3\x8f\x10\x5a\x47\x46\x0b\xe1\x59\x16\x90\x09\x32\x99\xf6\x10\x10\x7b\xa3\x17\x54\x8c\x40\x43\x7c\x39\x1b\x88\x1f\x76\x07\xd5\x60\x71\xf8\x7e\x17\xd9\x0f\x74\x94\x78\x1f\x00\x0d\xd4\x07\xcf\x9a\x3f\x78\x56\xfd\x80\x79\x0e\x8c\xb7\x74\x56\x77\x34\xbc\x83\x7e\x77\x00\xcc\x29\x0a\x9c\x19\x44\x40\xa7\x93\xf1\x8c\x8e\x3f\x5d\x16\x9f\x13\x42\x1a\x6a\x73\x31\xd4\xc9\x8e\x2b\xd8\x4f\x76\xc2\x14\xfa\xae\xda\xe2\xc1\x49\xb4\xb5\x05\xc0\x08\x58\x10\x3e\xe4\x01\x68\x0b\x23\x95\x19\x8b\xa7\xb8\x3a\x5b\x02\xf5\x99\xd6\x02\x31\x1b\x89\xcf\x50\x3f\x09\xba\x95\xc5\xbe\xc3\xee\x79\x59\x4f\x2c\x8a\x33\xab\x23\x76\x01\x8c\xad\x11\xb5\x7c\xf8\x7e\x34\x48\x33\xc2\x71\x49\xd4\xdf\xa8\xef\x03\x1d\x49\x5a\x78\xac\x70\x55\x48\x42\xd4\x9d\xd6\x0e\x95\x8a\xc7\x31\x7f\x0e\xb9\xfa\x2e\xa8\x9c\x14\x9d\x4e\x9a\x11\xaa\x2a\x45\xa1\xcf\x86\x56\xf5\x55\xbd\x01\xb0\x24\x3a\xdc\x11\xc4\xd7\xde\x73\xfe\x3d\x85\x8c\x3c\x72\xc8\x47\x81\x77\x00\x1f\x6d\x78\xd5\x39\x23\xf7\x26\xa7\x7c\xa6\x48\x98\x22\xf4\x79\x76\x49\xf3\x7e\xf2\x77\x9b\xeb\x7e\x9c\x17\xe5\x42\xd0\x1d\xdd\xcb\xe4\x49\xd9\x5f\xb5\xb1\xd5\x7c\x89\x59\x3d\x13\xf1\xe6\x67\x70\xcb\x30\x94\xd4\xcc\xf7\x30\xc3\xe5\xa8\x3b\x2e\xf8\x38\x93\xa9\x48\x25\x42\x68\x65\x04\x85\x05\x6f\x62\x5e\x9a\x74\x2d\x1a\xe9\x77\xb9\x6c\x4a\xd3\xe0\x40\x8c\x21\x9b\x5b\x92\xf4\x1d\xda\x74\x40\x06\xf2\x98\x3d\xaa\x8b\x2e\xdd\xeb\x6c\x9e\x2e\x38\xd2\x8e\x25\x49\x12\x82\x31\x19\xeb\x6d\xd4\x19\xbe\x5c\x02\xc8\x08\x1f\x54\x09\x63\xbf\x16\x16\xab\xd3\xbb\xc6\x20\x22\x83\x0c\xdc\x52\x22\x64\x1d\x8b\x16\x00\x93\x33\xe5\x6d\x50\x7e\x7f\x22\x01\x17\x42\x1b\x45\xb7\x2c\x16\x62\x1c\x00\xbc\x73\x5c\x00\x6e\x86\x7f\x22\x70\x01\x56\x2a\x0f\xe1\x61\xb0\x20\x7c\x91\xea\xa8\x8d\xa3\xaf\x29\xf7\xe8\xdc\x01\x1e\x6b\xa2\x01\x72\x87\x1b\x98\x11\xf5\x6f\x36\x42\x6d\x28\x13\xe6\x32\x6e\x10\xf6\x02\x0e\xa0\xec\xb2\x12\x26\x08\xa5\x12\x0d\x60\x49\x65\x40\x88\xe9\xed\x26\x37\x2a\x02\xfe\x68\xbc\x0a\x3b\x45\x11\x3e\x89\x9b\x22\x6b\x51\xb3\x13\x62\xad\xa2\xd1\x54\x57\x48\xe1\xa6\xd0\x30\xd4\xa9\x24\x63\xae\x55\xda\x95\xd5\xc2\xa2\x96\xe0\x04\x42\x89\x8c\x25\xa2\xba\x4a\x38\xea\x28\x11\xc8\x8f\x3a\x1a\xe9\xf0\xc3\x28\xda\x6e\xd6\x1f\x0e\x35\x76\xc2\x47\xf5\xb6\x0e\x08\x32\xa6\xf1\x55\xfa\x13\xc2\xb3\x96\x9d\xfc\x27\x93\xc9\x85\x40\x25\x97\x22\xe3\xe3\xd9\xe3\x33\x56\x34\x6e\x37\x03\x65\xe2\x2b\x53\x5b\x4e\x51\xae\x49\x2b\x04\xca\xd3\x74\xc7\xa1\x6b\x46\x08\x2e\xbc\xd1\xb4\x4b\x19\x1a\xb8\xe8\xe9\x01\xef\x0b\x9d\x61\x2d\x65\x50\x49\x0d\xe5\x76\xcd\x2e\x55\x03\xf0\x80\x29\x1e\x5a\x45\xe7\x2a\x8d\x80\x55\xe0\x89\x1b\x7e\xbc\xcb\xa8\xde\x65\xd4\x6f\x1f\xa9\x56\xd7\x93\xd8\x79\x25\x02\xcc\xd3\xd8\xe7\x6a\x3b\x17\xbc\x2c\x72\x8a\xba\x79\x71\x65\x59\x6d\xcc\x3d\x0b\xa3\xbe\x9b\xf0\x0a\x7c\xc9\x9b\x77\xe7\x09\xc2\xd7\xd5\xc7\x67\x27\xef\x4e\xf7\x0f\x93\xa0\xed\x3b\xe3\x6d\xe1\xdb\xdc\xb0\xdc\x0a\x28\xb0\x42\xd6\xe9\xa4\x1b\xe4\x83\x4d\xab\xfe\x60\x9e\x28\xe8\x3e\xdd\x70\x32\x4c\xb2\x5c\x26\x38\x01\xcc\xbd\x04\x27\xd7\x54\x66\x09\x4e\xc6\x52\xe4\xc9\x08\x5f\x71\xf2\xcd\xff\x6f\x9c\xb3\xf1\xa7\xe5\x75\xb1\x28\xe9\x52\x16\x8b\xf1\xec\x9b\x8d\x59\x77\x0f\xfa\xf6\x46\x73\xa5\xce\x85\x85\x4e\xf4\xf3\x12\x7a\x78\xc9\x9b\x05\x06\x78\x72\xe4\xfa\xfd\x60\x65\x43\x8d\xd3\xb2\xc2\x17\x0f\x54\x68\xfc\x5b\x1e\x53\xe1\x0a\xdf\xf2\x87\xd0\x28\xb1\x89\x5b\xb6\xa8\x94\xc6\x90\x61\x38\x72\xdb\xaa\x13\xd4\xe1\x37\x38\xb0\xf1\xf0\x09\xe0\x59\x18\xd9\x17\xd6\x6b\x2f\x88\x12\xf2\x6b\x4a\x8c\xd3\x11\xbb\x9e\xe7\x6c\xcc\xe4\x39\x30\x3b\x36\xd2\x68\x52\x5c\x13\x63\x80\xa4\x37\x94\x03\x74\x89\x3e\x01\x57\x54\x1e\xda\x27\x69\x90\xae\x66\xd1\x62\xda\x70\x85\xdb\xcc\x94\xae\x8f\x3a\x14\xbe\xe0\x89\xe3\x69\x97\xcb\x04\x36\x43\x52\x33\x5b\xec\xf9\xa1\x36\x18\x7f\x7d\xba\xe7\xca\xbc\x58\xbc\x8a\xd0\x24\xdc\x58\xc2\x19\x88\x49\xe5\xfd\x90\x8e\xaa\xd7\x8c\xac\xf5\xce\xcc\x65\x33\x09\x89\x27\xdc\x5e\x77\x6e\x16\x5c\xad\x1a\x3b\x40\xf3\xa0\x09\x1a\x48\x3d\x3d\xf6\xb7\xed\x44\x9f\x36\xa7\x02\xd6\x32\x71\x93\x8f\x17\x90\x7e\x4e\x2a\x7b\xc8\x5e\xa8\xae\x1f\x90\xa3\x10\x9a\xbc\x5c\x5c\x5e\xe6\xb4\x4c\x10\x24\xb7\x84\x47\x73\x01\xbb\xe2\x40\x27\x20\x49\xb4\x7a\x17\xde\x18\x2b\xe5\x4f\xf4\x4e\x7d\x50\xba\x3d\xa3\x47\x9b\x22\xbc\x20\x00\xc9\xc7\xaa\x72\x4b\x43\x3c\x97\xc7\x54\x91\xe0\xde\x70\xc5\xbb\x92\x96\x52\x51\xcf\xbb\x39\x0d\x12\xbd\xcf\xba\xac\x3c\x03\xfc\xdf\x7d\xb5\x5d\xb4\xdf\x1a\x49\x92\x95\xc9\x66\x64\x98\xc5\x8c\xdf\x25\xe8\x07\xd2\xb3\x09\xc5\x7b\x41\x8a\xce\x1b\x07\x42\xce\xb5\x6b\x37\x1d\xde\xf0\x21\x1f\x6d\x27\x3f\xd1\xbb\x64\xd4\xe9\x68\x14\x4b\x57\x19\xbc\x44\x0d\xa9\xc9\x53\x6a\x93\x8c\xa6\x08\x2d\x97\x29\x8c\xb6\xb0\x4f\x34\x0a\x7c\x38\x79\x6a\x4a\x96\x4b\xda\x2d\x65\x31\x7f\x2b\x8a\x79\x76\x95\xe9\x3d\x83\xd3\x1e\xd6\x32\x40\xe4\x3f\x6f\x76\x52\x7c\x08\x20\xbb\xe4\x3d\x88\x29\x14\x1b\xb1\xa5\xc4\x3a\xca\x48\xc9\xfd\x1b\x0d\xbc\x3e\x48\x66\x4d\xcf\x07\xa9\xd0\x6a\x37\x8e\xcb\x6e\x49\xf9\x64\xf0\x07\x24\x1a\x11\x4a\x34\xba\x1a\x73\x53\x95\x78\xc8\x9d\x0c\x43\x95\x00\xd3\xff\xd3\xf5\xab\x1a\x6d\xed\x14\xad\xd0\x9f\xaf\x92\x47\xf5\xfd\xf9\xea\x86\xef\x6d\x0f\x39\xd4\xb8\x42\x78\xf1\xb0\x4b\xde\x05\x77\xee\x25\xab\x14\xe1\xc3\xb6\x2b\x04\xdd\x37\x46\x5c\xad\x8d\x4b\x04\xbc\x53\x6f\xa8\x51\xe2\x06\x1c\x7e\x5c\x92\x22\x54\x4b\x2c\x08\x30\x78\x78\x5c\x75\x0c\xf3\xa1\x3b\x21\x14\x5f\x3a\x26\xa5\xd1\x05\xa5\x33\xfd\xe7\x2e\x42\x6a\xaf\x4d\xc9\xac\x9f\xce\x22\x9c\x07\x3c\xb5\xa1\x3c\x8a\x47\x30\x51\x3e\xc3\x11\x9c\x4b\x46\x9e\x3d\x67\xdf\x3b\x82\xcc\xb6\xb7\xd1\xdc\xa0\x70\xa8\x4a\x99\x29\x3f\xd1\xfc\xcc\x62\xc1\x26\x28\x8d\xd4\x3a\xb7\x6a\xc4\x13\x3c\xc5\x73\xb8\x56\xc7\x58\xd4\xa6\xdc\x80\x52\x34\x5b\x33\x8a\x6b\x60\xbd\xcc\x35\xac\xed\x47\xf6\xe6\xbf\xe4\x10\xbf\x15\x3b\x49\x73\x9c\x28\x6e\x79\x27\xde\x07\x49\xdd\x9b\xba\xa9\xe0\x4e\xb2\x2d\x70\xd5\x40\xbf\xc6\xca\x15\xab\xa0\x76\xd1\x86\x1c\xbe\x1f\x41\x0c\x68\xc0\x18\x78\x06\x0c\xd3\xe0\x22\xa7\x95\x5b\xbc\xe1\x02\x6b\x31\x85\x80\x15\x84\x3e\x31\x0c\x3d\xc6\x6c\xfe\x5c\x57\x46\x10\x3a\x00\xed\xdd\x90\x0e\x7b\x23\x50\x1e\xd4\x2b\x4a\xfe\x9e\x6c\xd3\x15\xc2\x74\xb8\x3b\x0a\x92\x18\x9d\xd5\xc2\x6d\x85\x0f\x47\x6b\x33\x8b\x07\xee\xe1\x46\x49\x97\x09\x9a\x25\x58\x7d\x31\xa5\x42\x78\xdf\x83\xcd\x29\x20\x0e\x06\x41\xb9\xa0\x26\x65\xe3\x94\xe1\xa1\x5c\x2e\x87\x23\xfc\x99\x43\x7e\x17\x25\xd8\x6b\x9c\x64\xbc\xd5\x0b\x82\xe6\xff\x64\xff\x68\x53\xa7\x5a\xba\xf3\x40\x57\xf6\xea\x14\x40\xf3\x9b\xfe\x9e\x25\x3a\x5e\x68\x38\x42\x36\x82\x88\x77\x3a\x29\x23\x7c\xd8\x1b\xe1\x82\xf0\xe1\xee\x08\xa7\x19\x61\xfe\x4e\x55\x9b\x20\x41\x80\xe4\x0a\x77\x74\x49\x8a\x61\x36\xc2\x31\xca\x58\xe9\x80\xc5\x16\x80\x5b\x8d\x85\xf5\x0b\xf1\xb6\xa0\x05\x36\xde\xf4\x26\x16\x16\x61\x6e\xc1\x63\x8d\xb7\xf6\x96\xc6\x49\x0b\x35\xb1\x0e\xe5\x59\x2f\xd3\x89\x5a\x4f\xf7\xde\x8c\xd5\x52\xc6\x13\xb7\xd8\x5a\x23\x6b\x5f\xbb\xf9\xf9\x14\x69\x3a\x83\x0d\x6a\xa6\xc1\xe2\x7c\x0f\x52\x66\x97\xd0\xc8\x3d\x14\x81\xc8\x7a\x53\x7c\xa2\x67\xb0\x1c\x2f\xf2\x62\xfc\x49\x51\x7a\xcb\x70\xa2\x7e\x5c\x20\xe5\x08\x16\x47\xad\xc3\x1b\xfe\x00\x3c\xc2\x7f\xb7\x65\xe8\x9c\xff\xbb\xf8\x20\xac\x01\x3e\xf4\x94\x91\xf2\x2b\xc6\x69\x1d\x57\x51\xb5\xcc\xc6\x26\x83\xd3\x9f\x37\x23\x3d\xcd\xde\xfc\x86\x3f\x88\x19\xe0\x30\x2c\x01\xdc\x45\x27\xeb\x02\x2f\x37\x80\x5b\x3b\x84\x51\xd9\x75\x49\x35\xb8\x1e\xda\x60\xdd\xcb\xa2\x90\xa9\x4d\xde\xc1\xba\xd3\x4c\x4d\x3a\xa4\xd8\x4c\x7c\x22\x8f\x78\xf0\x90\x78\xf7\xa4\x7b\x45\x39\xa4\x0a\xdd\x77\xc5\x5e\xea\x8f\x51\xca\x70\x12\x7d\xe1\x55\xfe\x0e\x8a\x39\x27\xb2\x7b\x5d\x4c\x68\x7e\x4a\xa7\xb5\x24\x7f\xf9\x60\x41\xee\xf5\x42\xf4\x19\x0e\xfb\x41\x0a\xab\xab\x41\x18\xd2\x8a\x68\x2f\x80\x0c\x61\x99\x5d\xf5\x2b\x16\xae\x7e\xca\x89\xd3\x2a\x63\x41\xf2\x08\x69\xe6\xe1\x26\xee\xa1\x83\x7d\xbe\x6a\x6a\x0b\x2a\xc3\x76\x08\xfd\xdc\xfe\x79\xd3\x17\x8a\x3b\x7b\xd8\xef\xc1\xdd\x8a\x3a\x37\xc7\x63\xdd\x09\x6a\x9e\x04\x0f\xdf\xa1\x66\x4f\xff\x41\x07\x84\x07\xb0\x85\xec\xc4\x01\x87\x63\xa7\x03\xf6\xa0\x9d\x90\x8d\x1a\x18\xd0\x72\x99\x4a\x22\xbc\x7e\xd2\x15\xad\x82\x01\x29\xc6\x27\x4d\xe0\x6d\x02\xd1\xa5\xce\x5d\x61\xbf\xea\xd0\x16\xd9\x1d\xcf\x79\x93\xed\xdd\x2d\x96\x5c\x05\xf6\x88\xd3\xda\x1d\x5b\xcd\x66\x70\x5d\x2c\xb8\x4c\xb0\xbe\xb0\xf9\x28\xc8\xba\x5f\xbd\x86\x0c\x82\xc5\x50\x27\x3d\xb0\x68\x5a\xee\x06\x02\x82\xfd\x76\xad\x26\xc7\x0c\x44\x66\x57\x24\xc8\xd9\xab\x06\x70\xea\x73\x04\xdb\x81\x58\xd5\x0d\xe5\x37\x56\xaf\x03\x6e\xd7\x5a\xad\xe3\x42\xc1\xe1\xd9\x81\xc9\x19\xd2\xc4\xea\x6b\x3c\xe1\x66\x85\x03\xe5\x37\x56\xde\x37\xbd\xb0\xc2\x7e\xb0\xd8\x55\x53\x6d\xcd\xee\xc2\x06\x95\xde\x11\x12\x3e\x3a\xa0\xd3\xbe\x25\x5a\xb3\xac\x34\xbe\xba\x5a\x94\x4d\xcc\x29\x4d\xb6\x19\x1a\xa4\x95\x6a\x58\x65\x84\x61\xb4\x9e\x3a\xae\xfb\x3c\x65\x00\x18\x17\x15\x33\xe6\xde\xb4\x3e\x3b\x8d\x93\x68\xf0\xf3\x5b\x21\x23\x02\xc3\x7c\x43\x30\x9f\xc5\x7e\x68\x5d\x76\xb3\xe4\x21\x64\x04\xf5\x9a\xb1\xb2\x7b\xc0\x84\xbc\xab\x68\xd1\x1b\xf3\xb9\xb4\xe0\x58\xa8\x79\x38\xe2\xe6\x06\x6d\xca\x3c\xde\xa6\x5b\x6b\xc5\xbe\x68\x01\x99\x0e\x3f\x30\x7f\xab\x23\xc9\x78\x30\x1e\xa3\xc9\x9e\xa8\x31\x39\x17\xfe\xdf\xd6\x1c\x09\x53\xb5\x0e\xee\x82\xaa\x83\x83\xa0\x1b\x39\x36\xa7\x43\x3e\x94\xfe\x5a\x67\x8c\x78\xea\x09\x88\x9b\xf6\x06\x17\x9f\x4c\x80\x0e\xf4\x9f\x7d\x37\xec\xda\x95\x26\x6d\x11\x39\xac\xf7\xdc\xd6\x39\x7a\x14\x2e\x49\x6d\x3d\xd5\x14\x1e\x3d\x76\x0a\x83\x3c\xe3\xe1\x84\xe9\x8b\xe5\xa1\x4d\x25\x1b\x70\x57\x6a\xde\xc1\x0f\xcf\x65\x55\x07\x4a\x3b\x1d\x3a\xb4\xbd\xb2\xd0\x32\x07\x0f\x8f\x28\x44\x3c\x01\x9d\xd3\x63\x06\xb4\xae\x7b\xaa\xc2\x60\x81\x21\xed\x62\xb8\x91\x15\x25\xec\x74\xa4\x5b\xe5\x10\x18\x3c\xe5\x24\x95\x04\x0c\xcc\x17\x17\x20\x9b\x5f\x14\x62\x3e\xcb\x78\x79\x71\x81\x82\x8f\x90\x0b\x3e\x1e\xba\x8e\x8f\x62\x88\xf1\x00\x7d\x40\x18\xd4\x0e\x7b\x37\x35\x41\xe0\x5b\x77\xf6\xa1\x2d\x6c\x9a\x1a\x11\x81\x45\xf7\x36\x2b\xdf\x95\x3a\xfc\xf2\xde\x74\xa1\xcf\xb0\x2e\x68\x20\xc3\x56\xd5\x08\xa9\x27\xec\x3c\x7f\x91\xbe\x7e\xf0\x22\xb5\x19\xdb\xfe\xa2\x9b\xf4\xe5\xe3\x48\x6a\x40\x2f\x26\xde\x1d\xde\x53\x7b\x45\xec\x0d\xf2\x90\x7b\xf6\x47\x76\x50\x93\x34\x11\x24\xc6\xf7\xa4\xa0\x16\xc8\xc0\x89\xc5\xc4\x89\x0a\xf2\x5a\x41\x41\xb8\xf3\x50\xac\x91\x18\xa1\xd5\x20\xf7\x42\x5d\xa6\x46\x7d\x0b\xbb\x0b\xeb\x79\xe8\x73\x33\x21\x11\x8a\x9b\xe7\x7c\xc3\xd4\x7d\xab\x55\x1a\xcf\x20\x0c\x21\xe6\xb8\xbc\xdc\x4f\xe3\x74\x49\x44\x86\x3a\x81\xaa\x96\x7b\xd3\x7b\xab\x82\x4e\xdc\x83\x51\x87\xec\x24\xbc\x0a\xfa\x63\x03\xe1\xdd\x62\x39\xa5\x40\x65\x61\x37\x2a\x6b\x4a\xcd\x0c\x07\x09\x9a\x83\x24\xd3\x29\xaf\xb1\x0c\x5a\xaf\x8c\xea\x1b\xe6\x4f\x72\x00\x1a\x17\x85\x5b\x01\xe8\x95\xfb\xeb\x85\xfd\x6b\xe3\xb6\x7b\x7a\x78\x7c\x70\x78\x7a\xf1\xea\xf0\xf5\xdb\xc3\xd3\x4e\x27\xdd\xfb\xef\x8b\xb7\x7a\x3c\x42\x1d\x6c\x32\x7f\x96\xeb\xb9\x23\x45\x9c\x6c\x92\xde\x6e\x1e\xf0\xb4\x56\x10\xb0\x90\xb5\x9d\x1c\x1a\xd4\xe2\x09\xbc\x02\x65\x88\x4e\x23\x5c\x75\xe5\xff\x57\x25\x67\x7c\xac\x1b\x7b\x2d\xfd\xa5\x71\x54\x97\x4e\x78\xc1\x9f\xfe\xcd\x7d\x79\xdf\xfc\xfb\x6c\xba\x60\x0f\xd4\x62\x47\x5c\x7c\x97\xa3\x60\xd2\xa9\x6d\x82\x87\xc9\x36\x6f\x57\x59\xa0\xd4\x24\x0f\x7d\x9a\x3e\xe6\xd3\x7a\x79\xbd\xd5\xe5\xf6\x11\x72\x7b\xc5\xe5\x56\xae\xd2\x3d\xa4\x88\x85\xda\x45\x6f\xf0\xf9\x3f\x37\x5c\xaa\xba\x55\xaa\xe1\x53\x0f\x6e\x9d\xfd\xff\x37\xb6\x8e\xbe\x4b\x1b\xcc\x20\xf5\x3d\x95\xca\x36\xa5\xd8\xda\x8d\xe5\x74\x61\x12\x57\xbf\x41\x15\xfd\x92\x53\x84\xac\x10\x36\x4f\x56\x8f\x0e\x57\x0a\x14\x30\xdc\xea\x5c\x36\x64\xa4\x37\x09\x5c\x7b\x9e\xb8\xcd\xcf\x1f\xaf\x96\x82\xb6\xfe\x90\x72\x2a\xb8\xe4\xcd\x6e\xff\xa2\x77\xfb\xbe\xba\x19\xab\x2b\x17\xa9\x79\x1a\xb5\x3c\x8e\xb9\x91\x2b\x03\x46\xf6\x6e\xcd\x05\xfb\x8e\x37\xa2\x59\xd9\x8c\x05\x94\xdf\xe0\x92\xf0\x9a\xcb\x36\x5e\x90\xd2\x09\x0a\x39\xc9\x8c\xee\xa2\x21\x1b\xcf\x02\x39\xdb\xa7\xbd\x10\xc6\x24\x4e\xf0\xe0\x26\x20\x41\x83\x38\xb1\x43\xf0\xc6\xb9\x6c\x2c\x0c\x0e\x48\x2d\x8f\xca\x20\xd5\x80\x46\x2f\x78\x3a\xc6\x39\x7e\xc5\x11\x66\xce\xb5\x2d\x86\x31\x42\x00\xde\x1f\x14\xfe\xa2\x81\x89\x02\x8b\x6e\xf3\xa7\x0c\x17\xc8\x81\xbc\xfd\xee\xe6\xd5\x1d\xf4\x0f\x01\x77\x00\x49\x49\xc1\xe1\xdd\xd9\x7b\x76\x92\xc0\xe9\xe1\x2f\x33\x68\x19\x76\x8e\x01\xa7\xd1\x64\xdb\xb2\xac\xe8\x60\x38\xea\x37\xdb\xb9\x02\x43\xce\xfb\x4a\x5e\x97\xc7\x0c\x03\x94\xc6\x4f\x1a\x46\xd1\x3a\x8c\xac\xd3\x49\xb5\x41\xaa\xa8\x0f\x26\xf3\x86\x3a\x81\x99\xe9\x7a\x7d\x57\xff\x5e\x3d\x38\x8e\x5b\xb3\xae\x26\xe9\x56\xe5\xab\xe5\x72\x4b\xc9\x9b\x71\x1e\x16\x53\xc2\xe4\x5f\x41\x60\xcd\xab\x0a\x75\x0e\x74\xc2\x08\x75\x4d\xe6\x39\xe6\xa7\xbb\x59\x9e\xb3\x5b\xea\x23\x27\x43\xed\x47\xff\x23\xb7\xb2\xee\x15\xe0\xc0\x6b\x82\x72\x32\xc5\x3f\x69\xea\xf0\x81\x66\x9f\xde\x64\x73\xbf\xf5\xbe\xd2\x57\x8e\xc5\x41\x22\xf4\xb9\x9e\x50\xf9\x1c\xd6\xf0\x27\x0e\xa7\xcd\x65\xc1\xdd\xfc\x89\x9b\x5c\xbf\x1b\x92\xfc\xc8\x15\x7f\xe6\xf7\xc0\xcf\xbc\x9e\x8a\x3e\x71\x8b\xd1\x4f\xb6\x69\x50\xf8\x97\xc8\xc1\xf9\x5e\x3b\xe8\xf6\x9d\x04\x4f\x07\x21\x39\xb0\x2f\x40\x3e\x2b\xe7\xd9\x18\xe8\x94\xea\xf1\xaf\x9c\xdc\xb3\x69\xbf\xc1\xa6\x13\x25\x30\x72\x7e\x88\xdc\x29\x01\x0c\x49\xe2\xfa\x0e\xd3\xff\x3f\x53\xd4\x5e\xdb\xf2\x5b\xaa\xd4\xee\x1a\xa2\x25\x3b\x94\xde\x9e\x94\x8f\x29\xf8\x72\x69\x0b\xae\x18\xee\x8e\xc0\x59\x4b\x5b\x59\x9f\x29\x32\x98\x16\xb1\x4f\x06\xaf\x78\x9e\xf1\xd8\xf3\xac\xcf\x14\xbd\x6c\xea\x91\x45\x2f\x77\xc8\x9e\x20\x9d\x35\x5c\x19\xb2\xc5\xc6\xef\x93\x11\xae\x90\xf7\x10\x32\x1b\x4b\x54\x68\x30\x88\x25\x91\x62\xeb\xc6\xe4\x3d\xab\xe8\xa6\x78\xa7\x13\x75\x49\x0e\x7b\xa3\x20\x3d\x1b\x18\xa4\xb9\x12\x5c\x56\x08\xf3\x4e\x47\x0c\x1a\x3a\x26\x52\x0e\xbe\x4a\x7d\xbe\x5c\x8a\xe5\x32\xe3\xab\xd4\x4c\x13\x34\x96\x00\xe8\x2a\x4c\x93\xf9\x8d\x33\xe4\x11\x94\x0c\xd3\x33\x25\x0d\x01\x32\xc5\xf0\xfd\x68\x50\xf2\xb4\xc0\x05\x56\x7f\xe3\x1c\xbc\x8d\x02\xe7\xe5\x05\x82\xcc\x4b\xc1\x93\x02\xa9\x2f\x7c\x3e\xa8\x85\xfb\xab\xf0\x57\x1a\xea\x57\x09\x48\x60\xd6\x6e\x60\x74\x23\x2f\x7e\xcf\x72\x60\x81\xe2\x18\x14\xcf\xcd\xad\x56\x61\x1f\x70\x81\x73\x84\x86\x1f\x75\xee\x07\x0d\x96\x37\x45\x2b\xac\xd7\xb1\xdf\x14\x4a\x00\x82\x95\xa0\x69\xce\x71\xe0\x8a\x84\x56\xf8\x8a\xb6\x7c\x30\x75\x67\xa6\x9a\x12\xac\x87\x70\xf5\x11\x80\x9e\xcd\xb2\x72\xd6\x5c\x57\x2d\x3f\xd9\x0a\xe7\xc5\xd5\xda\x8e\xce\xab\x1d\xbd\x5e\x54\x3b\x6a\x6c\xb8\xb5\x94\x65\x3d\xd0\xbf\xa4\x9c\x08\xb5\x57\x86\x13\x3e\xb2\x64\xcc\x66\x11\x8c\x15\x83\x22\xd0\x0a\x5e\x43\xba\x4a\x36\x7c\x3f\x22\x62\xf8\x61\x84\x99\xfa\x5c\x4d\x33\x5b\xe1\xe4\xf7\x05\x15\x77\x3b\x73\xf0\x44\x48\xd6\xf6\xfe\xae\xda\x7b\x41\xb3\x49\xc1\xf3\xbb\x46\xfa\xd2\x74\x3c\x55\x4f\x96\x4b\xba\x6a\x98\xfd\xc8\xf5\xaa\xa0\x10\x38\xbe\xe0\x97\xc5\x82\x4f\x9a\x3b\xe5\xd9\x93\x7a\x65\x01\xbf\xbb\xe0\x39\x2d\xcb\x3f\x4b\x54\x9f\x39\xe2\x8a\x56\x2e\xbb\xf9\xda\xc9\x92\xd5\xc9\x4a\x76\x68\x36\x9e\xed\x30\xbe\xe6\xbb\xcf\x4d\x83\x81\x6f\x19\x9f\x2f\xe4\x0e\x78\xcb\xac\x6d\x56\xd4\x9b\xe5\x85\xb8\xce\x72\xf6\x85\x3e\xa6\xdb\x45\xfd\xfb\x99\xbc\xce\x77\xca\x6c\xfa\x40\xcb\xbc\xfe\xe5\x15\x95\x3b\x86\x13\xd8\xb9\xc9\x44\xd2\x97\x81\x07\xc6\xfb\xcc\x5b\x56\x1b\x97\x47\xf3\xde\x4d\x27\x01\x5b\x95\x93\xe1\x9f\xb5\x98\x83\x06\x32\x64\x9d\xcd\xc3\x7e\x4c\xf5\x01\x79\x93\xa7\x02\x73\xd0\x23\x39\x8d\x74\x4b\x0f\x42\x71\x18\x3c\x08\xe2\xda\x04\x69\x49\xd5\x08\xb9\xa5\xcb\x2e\xd0\x5b\x17\x8e\x93\x26\xd7\x19\xe3\x09\xea\x37\x8c\x48\x95\x7f\xc9\x41\xfd\xf8\x1b\x4f\x79\x04\x60\x2f\x10\x5a\xad\x1a\x24\x97\x5f\xf9\xd0\x31\x5f\x23\xf2\xce\x64\x47\xfb\x07\x27\xf7\xe6\xda\x07\x74\x28\xbe\xc2\x31\xce\x67\xe4\xf7\x09\xe2\x93\x56\x84\x95\x64\xa8\x47\x67\x20\x81\x8b\xcb\xdf\xce\x8b\x57\x26\x25\x89\xe7\xb7\xf4\xcb\xcb\x05\xcb\xe5\x11\xd7\x3c\x60\x49\x7e\xe5\xd1\x63\x0b\x4f\x53\x92\x7f\x54\xa2\xea\x21\x35\xb0\x56\x65\xd8\xaa\xc6\x75\xf6\xb8\xa9\xd4\xa2\x94\xc5\xb5\x09\x91\x68\x78\x1f\x35\xf0\x8a\xc9\xd2\xc2\xae\x45\x2f\xde\xb0\xb2\xa4\xee\x55\x53\xcb\x6a\x3f\xda\xf7\x33\x18\x5d\xed\xa5\x01\xbd\x03\x42\xd5\x7d\x93\x8d\x45\x51\x3e\x4f\x9b\xbd\x23\x18\xcf\x19\xa7\x25\xb8\x46\x5c\xe6\xc5\xf8\x93\x46\x93\xe3\xdd\x6c\x32\x49\x13\x6b\x0d\x79\xcd\x11\xae\x2d\xaf\x29\x63\x99\xeb\xdf\x39\x90\x20\xf5\xc8\x78\x23\x9c\xfa\x27\x40\x1d\x12\xbc\xe7\x9f\x48\xfa\x59\x6a\xa7\xc4\x33\xfb\x50\x8d\x9d\xf1\xab\xf4\x03\x38\x24\x42\x29\x68\xfd\x93\xfd\x6d\x0b\xbc\xe7\xc8\x24\x52\xfe\xc8\xc3\x4c\xca\x69\x0f\x7f\xe4\x43\x39\x42\xea\xf8\xa0\x95\x4f\x41\x60\x05\x1f\x33\x25\xaf\xb3\x2f\x00\xd2\xa0\x1e\xc1\x8e\xfe\x60\x50\xee\xb0\xb5\x1b\x35\x98\x54\x1e\x0b\x5b\x14\x64\x6a\x69\x07\x2b\xda\x88\xad\x11\x5c\xdb\x45\x64\x80\x48\x94\x56\x11\xe9\x1a\x2b\x6b\x6f\xdb\x1c\x19\x1b\x20\x2c\xc2\xa7\xd6\xab\x60\x8d\xf0\x27\x83\xfb\x8e\x80\xbd\x6f\xed\x86\xdc\xde\xc6\xa2\x8a\x6f\x0b\xc3\x68\x05\x26\x35\xfd\x1b\xd2\xd1\xa3\xf1\xab\x1c\xe7\xd1\x30\x3e\x93\x85\xe6\xa2\x06\x67\x55\x95\xc0\x07\xa9\x20\x60\x09\x0d\xe7\x83\x21\x64\x06\xd8\x78\xa2\xb6\xb7\x31\xb7\x69\xdd\x1f\x05\x8e\xd5\x34\xd4\x68\xd2\x3d\x3c\x56\x15\x5b\x76\x1d\x70\x55\xb0\xbc\x17\x75\xbc\xaa\x8d\x86\x36\xab\x9b\x28\x4e\xfa\xbc\x6e\x7e\x23\xaa\x64\xc5\x50\x6f\xc8\x03\xd9\xa4\x9d\xbe\x81\x76\x4f\xaa\x8b\xc1\xe9\x50\x4c\x96\x98\xaa\x49\x90\x0d\x52\x4e\x2c\x02\x9a\xe8\x47\xc7\x75\xa5\x73\x52\x97\x2e\xf1\x34\xc7\x12\x81\xe3\x96\x65\x81\x4c\x3e\xc2\x94\x62\x86\x5a\xa9\xe9\xf6\x36\xea\x37\x93\xe0\xed\x6d\xc5\x61\xd6\xc3\x8a\xaa\x58\xc6\x26\xa4\xbc\x66\xec\x34\xb1\x4d\xc1\x45\xd4\x36\x4c\xe9\xd0\x70\xdd\xce\x35\x98\xb9\x16\x10\x3f\xac\x44\x0f\x09\xe0\x72\x2b\xb0\x94\x0f\x1d\x0f\xd2\x70\xf9\x0d\x2b\xc6\x7b\x6f\xb4\xdd\x30\xaa\x44\x22\x8d\xe9\xaa\x20\x14\x67\xe4\x17\x9e\x82\xeb\xe3\x22\xa7\x10\x3a\xa5\xbf\x44\xb8\xac\xb8\x5f\xea\xc3\xd2\x4f\xb6\x0b\x9c\xa1\xe5\xb2\xed\xa5\x73\xb9\xd2\x6a\x0a\x9f\xd4\x5e\x90\x52\xc9\x0a\xfa\x64\x42\xf2\x30\x60\x00\xdd\x1f\x5d\x56\xea\x21\x18\x55\xf5\xa0\x69\xc0\x2e\x07\x70\x7d\xd2\xb9\x0d\x39\x01\x6e\x07\x58\x66\x13\xfd\x1a\x71\x82\xfd\x94\x76\x39\xbd\x35\x98\xd7\xd9\x25\x9c\x1b\xcc\xfd\x2e\x8b\x4a\x2b\x19\xb9\x46\x09\x2e\x1e\x3e\xb6\x10\xc6\x15\x15\x43\x20\x90\xc2\xc4\x83\xec\xe4\xd7\x05\x6e\x29\x53\x2a\x22\xcb\x1c\x6d\x54\x71\x35\xe9\x76\xe2\x10\x34\x37\xe7\xfa\x9b\xa4\x8a\x66\xfa\x48\x4a\x55\xe5\x8e\x6a\xd4\xf9\x02\x12\xc9\xaa\x4d\xf1\xb2\x10\xc7\x56\x3f\xd4\xa4\xf6\xc7\xce\x78\x2c\x42\xbd\x64\xbf\xef\x12\x7d\x40\xaa\x5a\x01\xe7\xc2\x26\x88\x12\xdb\x4a\x8e\x71\x3f\x7b\xe0\x17\xa7\xb5\xe6\x32\x50\x47\xf1\x2a\x5a\xee\x93\xee\x66\xec\x74\xe7\xb8\x0c\x57\xc5\x7d\x8e\x52\x7b\x1c\x32\xdc\x72\x14\xb4\x76\x5d\xe7\xa5\xc6\x39\x09\xd3\x9f\x8d\x49\xe8\x24\xdc\xcf\x23\x7f\x89\x71\x8d\x84\x4c\xc9\x5a\x1e\x13\xe8\xc9\x38\xce\xef\x3f\x75\x41\x01\x26\xa0\xe8\x81\x7c\x6b\x80\x4d\x56\xab\x3e\xc1\x3f\x73\x9c\x41\xcd\x8b\x4e\x67\x2b\xef\x74\x8c\x62\xd5\x25\xc2\x38\x39\x7e\xfd\xf1\xe2\xc7\xd7\x47\x6f\xde\x1c\x9e\x5e\xec\x9f\xbc\x79\x7b\x72\x7c\x78\x7c\x7e\xe6\x86\x00\xf4\x9f\xf2\x74\x81\xf0\x3c\x45\xeb\x79\x65\x20\x69\x63\xac\xce\x95\x6a\x31\xef\x74\x72\x7b\xd8\x53\x41\xbe\xe2\xa9\xf9\x89\x9c\xf2\x33\xbe\xd1\xdd\x00\x0c\x83\xed\x96\x48\xd8\x74\x05\xbf\xc8\x34\xc3\x39\x66\x78\xb1\x5c\xca\xd8\xd8\x91\xf6\xf0\x61\x77\x2e\xd8\x4d\x26\x01\x2c\xe6\x2d\x42\x8f\xef\x72\x81\x70\x61\xb2\x61\x2f\x96\xcb\x1c\x48\xc9\x1b\x68\xcb\xb7\x13\xd0\xbd\x6a\x5b\xc7\xc8\x28\xf2\x17\x9a\x83\xb0\x44\xea\xb1\xcd\x5f\x43\x1e\xec\x75\xbb\xdd\xcc\x08\xa9\xb9\xbe\xb4\x88\x25\x15\x25\x73\x5b\x29\x7b\xe5\x1b\x41\xd3\x9b\xad\x4d\xb3\x3b\xc6\xc4\xd5\x4f\xb6\x2b\xbc\x47\x43\x65\x9a\x1d\x50\xab\x6f\x5c\xe7\xa4\x20\xf7\x9a\xbc\xd6\x51\x4f\x81\x25\xa7\x02\x79\x3e\x60\x85\xb9\x20\x07\xe9\x3d\x9b\xf4\x93\xff\xf3\x73\xfe\x86\x4f\xbe\x1b\x27\x18\xe4\x95\xfe\xd7\xf7\x89\x76\x83\x28\x93\xfe\x30\xe9\x4c\x4c\xc8\xee\x08\x27\x60\x74\x03\x4d\x5e\xd2\x1f\x0e\x77\xbf\xc3\xbb\xa3\x11\x86\x4c\x80\x37\x59\x9e\xf4\xa7\x59\x5e\xd2\xd5\xd7\xf8\x9a\xca\xac\x7f\xef\xcf\x78\x3f\x99\x67\xe3\x4f\xd9\x15\x2d\xbf\xd1\xf1\x6b\x16\x0e\x27\x67\x97\xdf\x58\x16\xa2\xfc\xc6\x1b\x3e\x66\x97\x65\xb2\x5a\x21\x2c\x5c\x1f\x7f\xdf\x2b\x7f\xdd\x7d\xfd\xbf\xdf\x35\xf6\xb1\xde\x33\x3c\x7c\xb6\x8b\xad\xb0\x35\xc2\xd0\xb1\xbf\xb2\xab\xba\x66\xd7\x4f\x26\x48\xb2\x23\x8b\xf9\x4e\x4e\x6f\x68\x9e\xe0\x42\x10\x2d\xf8\xe3\xac\x4d\x0e\x8f\x31\xeb\x2e\x02\x3c\x66\x9f\xce\x4d\xd1\x1a\x2a\xac\x83\x23\x1c\x8c\x3a\x64\x9d\x61\x07\xcd\x27\x53\x9d\x43\x84\xa7\xce\xed\xef\x5e\x75\xc4\xfa\xfc\x59\x17\xc0\x7b\xa8\xac\xcf\x31\xe3\xb2\xb0\xd6\x09\xe3\x31\x56\x08\xed\x47\xc6\x22\x47\x31\x9b\x40\xcc\x79\x91\xad\x56\x71\x82\x42\x41\xa7\x7d\xe6\xbe\xf4\x75\x35\xfb\x9d\x59\x1f\x44\x1f\xae\xf0\x59\x52\x3e\x69\xf2\x3a\x6d\x74\x2e\xf8\x57\xc0\xcb\x55\x5d\xa0\x02\x0c\xa2\x81\x65\x65\x3c\x1e\x0a\xae\x41\x59\x60\x0e\xa0\x42\xb5\x82\x52\x43\xb3\x68\xb7\x6c\x41\x8b\x39\xe5\x1a\x9e\x30\x1c\x69\x54\x5b\xe0\xc6\x5d\xed\x54\xa0\xda\x0c\x37\x11\x28\xd1\xec\x0e\x02\x76\xb4\xea\x42\xa8\x9d\x79\xd5\xdd\x2d\x87\x59\xf7\xe4\xc3\xf1\xe1\xe9\x08\x14\x64\x0f\x24\xd2\xb1\xfc\x88\x35\xdd\x90\xda\x06\x56\xe4\x10\xd2\xa2\xd4\x22\x02\xe8\x60\x52\x8c\x61\xee\xbb\xa0\x83\x3e\xa3\x39\x55\x6b\x95\x52\xd4\xa7\x3a\x7a\xdd\x82\xdb\xa3\x18\xd9\xde\x8f\x25\xa9\x66\xa6\xb2\xd0\xf7\x8f\xc8\x77\x53\xcb\xe6\x18\xa6\xa0\xac\x79\xb6\x0b\x3a\x75\xe8\x2b\x0f\x07\x5e\x1b\x87\x3f\xda\x3d\x0d\xf3\x7f\xbd\xc4\x81\xe7\xe3\x01\xa6\xdd\x7d\x13\x6b\x48\xee\x28\xa6\xdd\x73\xfa\x59\xbe\x64\x34\x9f\x90\x2b\xfb\x73\x4f\xd0\x8c\x5c\xaa\x5f\xaf\x19\xff\xe4\xee\x24\x72\xab\x1e\xf9\x9f\x13\xf5\xf3\xf4\xe4\xe4\xfc\xe2\xf4\xf0\x25\x19\xab\x5f\x46\x86\x79\x85\xa9\x11\xba\xc9\x3b\x4c\xbb\x87\x21\x65\x91\x98\x76\xcf\xb2\x29\xd5\x18\x5d\xe4\x77\xf5\x19\x2d\xc7\xd9\x9c\x1e\x7e\x9e\x0b\x5a\x96\x31\x87\x07\x97\x9e\x5d\x45\x0f\xf9\x05\x8f\xc1\x77\x53\x16\xaf\xce\xdf\xbc\x46\xde\xc9\x13\x7e\x6b\xdf\xd7\x58\xc4\x4b\x12\xf5\x6c\xcb\x49\x7c\x74\x3b\x49\x36\x28\x49\x92\x6d\x87\x70\xfe\x9e\x1a\xb0\x06\x34\x50\xcb\x37\xcf\xb3\x31\x4d\x3f\x52\xfc\xa3\xda\x1d\x6a\xfe\x67\xf2\x3a\x57\xbd\x27\x3f\x51\xc8\xa9\xa3\xda\x82\xdf\x5f\xc1\x64\x58\x7a\xf9\x45\x8d\xf2\x88\x53\x21\xdd\xa3\x57\xfa\x91\xc3\xbf\x77\x2f\x5e\xa8\x17\x17\x82\x96\xd4\x15\x8e\x9c\x62\x5c\xfe\x3e\xd2\xd3\xa7\x15\xfc\x8b\xa8\x94\x39\x6d\xcc\x4c\xaa\xb5\x4f\x90\x44\xef\xb5\x24\x67\x5d\x73\x79\xaa\xff\xa9\xb0\x08\x0d\x8a\x7d\x5c\x08\x41\xb9\x3c\x5d\xf0\xd7\x45\x31\x47\x29\x5a\x2e\x1b\x73\x3c\xa4\x89\x01\xb4\x4b\xb0\x4d\xd7\x87\xf0\x6b\xf0\xb6\xb9\x66\x25\xcc\xca\x15\x95\x0d\xea\x07\x58\xa3\x77\x70\x16\x4f\x6e\xb9\xc9\xa9\x7e\x97\x7a\x17\xda\x77\xd2\xc8\x22\x65\xe3\xf7\x81\xb6\xff\x9d\x46\x35\x81\x15\xc8\xca\xc6\xb6\x5c\xc9\x7a\x7b\x95\x2e\x36\xb9\x1c\xbd\x93\x95\x7e\xc4\xa4\xf0\x9d\xd4\xc9\xa3\x4a\x2a\x17\x73\x1d\xd4\xe8\x52\xe9\x85\xe5\x7c\x9e\xaa\x34\xb9\x61\xf4\xb6\xef\x7c\xcf\x33\xc8\x40\xef\xdf\xba\x3b\xc9\x95\x10\x50\x82\x71\x25\x4e\x43\x00\x52\x5c\x81\xfb\x22\xf8\xd3\xbd\xad\x7c\x59\x52\x71\xc3\xc6\xb4\xbf\x33\x29\xae\x77\xc6\xb3\x8c\x5f\xd1\x32\xc1\x89\xa5\x7c\x09\x0e\x4b\x98\x67\xeb\xaa\x90\x82\xd2\x9d\xb1\xbd\xd8\x34\x40\xc0\x83\x95\xb9\xb1\xd6\x39\x75\xcc\x2b\xb3\xe1\x6a\x30\xbc\xce\x4e\x40\xcb\x13\x4c\xe5\xda\xfa\x8e\x14\xe7\x59\xe9\x7e\x30\x59\x96\xe1\x84\x54\x70\x95\x0f\xd5\x57\x26\x69\xcf\xcb\x42\x9c\xdf\xcd\xa9\xd5\x71\x24\xf8\x1e\x70\x16\xb8\x64\x26\xfb\x6c\xdc\x63\xa3\x09\xc9\x8b\x71\x82\x7f\x8f\xfb\x17\x78\x6c\x44\xa1\xdb\x57\x74\x7d\x31\xad\x39\xbf\x6c\x2f\xe5\x83\xc4\xef\x5a\x0b\xe5\x8c\x7f\xda\x91\x45\x82\x6f\x29\xc2\x8f\x14\xfe\x96\xcb\x35\xb3\x7b\x8c\xf0\x44\x1f\x21\xd8\xfc\x7b\x3e\xc0\xb6\xe5\x04\x34\x6d\xa2\xc6\x65\xb5\xd7\xa8\xcb\x5f\x15\x6f\xa5\xa6\x6d\x57\x59\x65\x7b\x23\x27\x38\xa1\xfc\x26\xfc\xbc\xa9\xc1\x96\x2d\xa7\x5a\x32\x79\x39\x12\x5c\x93\x5f\x28\xba\x2f\x6f\x99\x1c\xcf\x52\x0a\x41\xcb\x27\x26\xc5\x93\x49\x0f\xf3\xa6\x98\x50\x74\x3f\xce\x4a\xaa\x2a\x64\x60\xf1\x4c\xfa\xce\x27\xdd\x3d\x33\xb9\x3a\xbb\x97\x8c\x4f\x4c\xf8\x0c\x7c\x24\xe8\xec\x6e\x22\xd4\x46\xed\x3b\x03\xbf\x7d\xc6\x0a\xde\xf0\x99\x21\xe7\xbe\x78\x94\x0c\x34\x28\xb9\x5a\xad\xd6\x9d\x69\x37\xe4\x24\x18\x56\x82\x93\x70\xca\xfa\xda\x74\xd8\x3a\xe9\xbe\x8e\xc6\xaa\xd7\x9e\xda\xdf\x10\x7e\xd9\x5e\x73\x98\x4a\xa5\x7e\x70\x7f\x43\xf1\x5a\xda\x0f\xa1\xf9\x04\xbf\x90\x6d\xaf\x99\xba\x92\x13\xfc\x4a\x22\x3c\x77\x3c\xe2\x53\xb6\xac\x66\xc6\xda\xb7\xac\x25\xb6\x6b\xf6\x9a\xa3\xc7\x4d\x7b\xcd\x99\x80\x0d\x25\x0d\x59\x65\xd9\x3d\x38\x79\xb3\xaf\xbf\x4e\x39\x5a\xad\xd6\x34\xd2\x40\xb1\x9f\xd8\x5c\x6a\x27\x68\x00\xed\x9e\x0b\xea\x45\x1b\x56\xf0\xbe\xe8\x1e\x17\x13\xda\xf0\x06\xe9\xbe\xad\x34\x57\xa3\x7b\xa7\xed\x95\x11\xa1\xf8\xe8\x12\xcc\x41\x49\xfa\x79\x4e\x05\x53\x7d\xc8\x72\x53\xfa\x23\xc7\xb4\xbb\x77\x59\x4a\xc5\x31\xd5\x34\x23\x52\x6e\x50\x8f\xf4\xe8\x01\x2f\xff\xa1\xd8\xac\xe3\xf7\x27\x3f\x1d\x92\xf7\x6a\x7b\x29\x86\xeb\x32\xa7\x2f\x0b\x41\xce\x14\x8f\x76\x40\x2f\x17\x57\x67\x32\x1b\x7f\xb2\xba\x4c\xda\x0d\x72\xcc\x66\x02\xc7\x89\x32\x1a\xe4\x8e\x5a\xde\xde\xdd\xc6\xbc\xbd\xbb\x61\xde\xde\xdd\x51\xff\xde\x62\xed\xde\xb7\x24\xee\xe8\x6f\x6d\x49\x9f\xd4\x63\x1c\xbd\xc3\x3e\x5f\x07\x14\x0b\xd2\x77\x18\xda\xfc\x80\xee\xc8\xbb\x1f\x6a\xbd\x0d\x35\x76\x88\xab\x86\x2f\xbf\xe2\x6a\x6f\xa5\x26\xb9\xea\x35\x95\xd9\x37\xa0\xec\x4d\xf0\x30\xa1\x9f\xe7\x85\x90\x3e\xf5\x2a\xbc\xcd\xd9\xe5\x37\x00\x8a\x38\xc2\x71\xab\xc9\xa2\xa4\x9b\x8a\x7b\x1f\xcb\x64\xc3\xf8\x0a\x41\x70\x13\xf5\xfc\x99\xba\xa2\x17\x8a\x31\x56\x67\x82\xf2\xc5\xb5\x5e\xb1\xfe\x56\x2f\x76\xa9\x0a\x7c\xa0\xec\x07\xea\x0c\xb4\xd6\xaa\x81\x0e\xdf\x00\x56\xe3\x23\xeb\xf5\x9f\x3c\x50\x73\x39\x16\x6c\x2e\x0b\xf1\xb2\x10\x4f\xa8\x3c\xf8\x6a\x6d\xfd\x90\xab\xd3\x94\x7d\x74\xf5\xe1\x47\x6b\x6b\x7f\xd2\x8c\x3c\x38\x17\xd7\x4f\xa9\xed\xfa\xa1\xda\xe6\x94\x7e\x7a\x52\xff\xec\x07\x6b\x6b\x2d\xa9\x7c\x52\xa5\xa6\xfc\xda\x3a\x5d\xc0\xdd\xa3\x6b\x75\x5f\xac\x00\x49\x2d\x3e\x5f\xee\x04\x35\x1c\xb1\xcb\xec\x92\xe6\x09\x4e\xfe\x0e\x3f\xbf\x99\x28\x0a\x16\xfe\x9c\x0b\x3a\xce\x24\x9d\xec\x4c\x69\x26\x17\x82\xfa\x2f\xe3\xcb\x4b\x3f\x5b\x48\x96\x97\x95\x83\xea\xdd\xce\xa3\x03\x4b\xdd\x41\x23\x14\xd6\x8e\x50\xd8\x10\x84\xfa\xc1\x78\x2a\x6a\x66\x8d\x4c\x31\x75\xcb\x42\x66\x98\x06\xa7\xaa\x81\x98\xaa\x1b\x60\xc3\x51\x4f\x08\x73\x8e\x52\xd3\x46\xa7\xa6\x25\xa2\xc6\x1b\x07\x07\xaa\xba\x3e\x8f\xe3\x9a\x9d\xcf\x22\x74\xcb\x9f\x92\x52\xe7\xf2\x88\x4e\x4e\x63\xfc\x31\x18\x33\x69\xa7\x53\x35\x76\x6e\xd2\x4e\x07\xb0\xeb\xe3\x3a\x56\xc6\x39\xdf\xec\x1d\xa7\xb3\xc1\x65\x34\x71\x69\x0f\x17\x1e\xd2\x76\xc1\xf5\x1e\x9b\x24\x08\x2f\xec\x3c\xaf\x8f\x33\xbe\x30\xa1\xf5\x56\x31\x3a\x33\xf9\x13\xed\xf0\xe2\x17\xb7\x99\x1c\xcf\x18\xbf\x8a\x9f\x5e\xb3\xcf\x8c\xbb\x92\xa2\xfb\xe2\xe8\xf8\xe0\xe8\xf8\x47\xeb\x7b\xdf\xe9\xb0\xc8\x33\xbf\xf6\xda\x78\x40\x28\xb6\x93\xf1\x2b\x5b\x91\xcf\x52\x3c\xaf\xf4\x62\x3c\xcb\x18\xff\xa0\xba\x42\xab\x1d\x84\x57\x95\x67\x32\xbb\xaa\x3d\xa8\x14\x99\xe6\xea\x91\xf9\xa5\xbd\xe0\xad\xfe\x1a\x66\x3e\xc0\x4b\xe8\x8e\xbd\x72\xd6\x63\x27\x04\x0f\x83\xb5\x32\x86\x2a\xc5\xbe\xf0\x5a\x57\xdd\xe3\x97\x8c\x03\x7f\x3f\x21\x5b\xbb\x4d\x0e\x46\xac\x3c\xe2\x4c\x32\x53\xa6\xcd\x44\x0b\xe5\xb7\x48\x35\x41\x75\x83\x8a\xcf\xe5\x4b\x65\xa5\xda\x20\x07\x36\x59\x66\x8a\x6c\x3e\x0c\x7d\x08\x83\x17\x1b\x21\xd0\x00\xcd\x26\x8a\x4c\xed\xc3\x54\xa7\xc1\xc1\xa3\x41\xae\x9b\x5a\x5a\x62\x56\x9e\xc1\xbc\xfa\x0c\xd2\x6d\xd8\x1d\x17\xb3\xac\x7c\x99\x67\x57\xe9\x33\x54\xd3\x74\xae\xab\x23\x58\xca\x25\x79\xb6\xb6\xf5\x46\xad\x57\xdc\xf8\x77\x0f\x34\x1e\x57\x11\xb5\xfd\x5d\xb5\xed\x68\x36\x1f\x6c\xf9\x3f\xeb\x2d\xb7\x56\x10\xb5\xfb\x9f\x15\x7b\xa0\xa9\xb0\x61\xcb\xa4\xc1\x77\x1d\x8a\x48\x6d\xdb\x5c\x5c\x51\x79\x22\x74\x1e\xaf\x93\x5b\xfe\x26\x9b\xb7\x6d\xbc\x21\x1d\x99\xdc\xb8\x43\x3a\x6a\xc2\x78\xa8\xba\x1c\xc4\x35\x9f\x35\xc3\x35\xd4\x6b\x56\xd2\xcb\x19\xad\xaa\xc7\x2f\xa6\x8c\x4f\x8e\xb4\xc9\x83\x4e\x76\xe3\x10\xce\x4a\x5e\xf1\xe7\x16\xd2\x4e\x47\xd5\x78\xf4\x0b\x49\xf8\x90\x8e\xbc\xe1\x73\x83\x13\x6e\xe0\x3e\xaa\x0e\x05\x51\x73\xcf\x2a\xec\xb1\x6d\x50\x23\x99\x85\x4d\xb2\x6a\x93\x9c\x30\xd5\x64\xc0\xf3\xa7\x80\xaa\xe1\x7b\x21\x36\x18\x61\x8f\xe9\xc5\xb7\xb5\x0b\xcd\xf6\xc3\xfa\x33\x84\x3d\xc9\xaa\x3d\x11\x24\xab\xf6\x84\x11\xa1\x7a\x12\x3e\x2a\x08\x0b\x60\x7f\x37\x8b\x8d\x8c\x64\x2d\x9d\x9b\x65\xe5\x11\x77\xbd\x8b\xd7\xb7\x32\x4b\x51\xcf\x44\x7d\x8e\x84\xee\x59\x25\xfc\x69\xab\xb7\x21\x88\xb0\xad\xdb\x60\xb6\xb8\x17\xb7\xaa\xf1\x03\x75\x73\x34\xdf\xf6\x7a\xff\xd7\x36\x79\x9a\xc0\x75\x93\x20\x08\x1c\xa2\x23\xef\xd8\xc6\x20\x80\x4c\xb4\xed\x71\xcc\x86\x72\x54\xc5\x59\xd0\x9c\x42\xa5\x0f\xb1\xb7\x5e\xbc\x92\xb6\x79\x1c\xba\xed\x05\x8c\x49\xaf\xcf\xab\x5e\x69\x65\xa5\x01\x77\x82\x3c\x3b\x54\x6f\xe8\x99\x6f\xa8\x72\x9e\xa6\x85\x38\xcc\xc6\xb3\x23\xde\xd0\xef\x68\x7b\x9b\xec\xea\xf5\x8c\x38\x76\x39\x8b\xfa\x72\x16\xfa\x32\xaf\xed\x7a\x75\xf6\x6c\xe5\x8b\x4d\xc6\x37\x05\x4a\x33\x7f\xe5\x66\x03\x73\xf6\xfb\x19\x82\x9d\xb0\x40\xcb\x65\x9a\x81\x23\xf0\x02\x61\x31\x5c\x8c\x20\xbc\xa9\x24\xe5\x72\x39\x1c\x21\xad\x13\x58\x20\xb4\x51\x90\xc2\x6e\x93\xb0\x2b\x25\xd2\x30\xbb\xbd\x2a\xcc\xae\x4c\xcb\x21\x1b\xa1\xfa\x56\x32\x10\x56\x4d\x5a\xff\xf6\x9d\xa4\xd8\x8c\xaa\xc3\x95\xbd\x3c\xd7\x56\xa6\x3e\x6c\xed\x43\x0b\xb0\x39\x7c\xb5\xce\xbb\x10\xd8\x20\x1a\x26\xe2\xa8\x7b\x11\x06\xbd\x5b\xd7\xb9\xe6\xbe\xed\x47\x5c\x59\x5b\x2f\x23\xde\x6d\x6d\x7f\x63\x2e\xef\x91\x3d\x6f\xe9\x44\x65\x0c\x51\xd5\x6b\x46\xf3\xc0\x30\x5a\xfa\x1f\x32\xa2\xb2\xd2\x71\x8b\x2e\x2b\x3d\xa2\x94\x71\x30\x36\xf0\x52\x71\xfb\x29\x45\xdd\x71\x31\xbf\x3b\x2f\xd2\x06\xa7\xcf\x98\x13\x6b\x1d\x6d\x7c\x45\xa6\x89\xe9\x5b\x75\x6b\x02\xc9\xfc\x60\x19\xfc\xf8\xe8\xb7\x6f\x72\x2b\x11\x24\xc8\x59\xd7\x62\x02\xd8\x50\x63\x3c\x95\x35\xca\xe4\xaa\xc4\x4d\xfe\xb2\x83\x5e\xbf\xd2\x0a\x04\x00\x7c\x66\x0d\x89\xdd\xea\xbc\x46\x9a\x18\x69\x25\x41\x40\x3f\xaa\xf4\x6f\x96\x95\xf5\xba\xaa\x5c\x5a\x7c\xbd\xf9\x2a\xdb\xa8\xe9\x1b\x2d\x1f\xad\xe3\x4d\x5c\x80\x4e\xc0\xa4\x44\x0c\x8a\x95\xb2\x10\xf8\xc5\x85\xc0\x49\x86\x36\x0a\x2c\x6d\x7b\x69\xe4\x7e\x62\x2e\xcf\xe5\x32\xd5\xb1\x13\x12\x61\xaa\x76\xd3\x0a\x21\x1c\x30\x3a\x4d\xd7\xa7\x97\x02\x1f\xbb\x1d\x02\xc9\xb1\x75\x47\x34\xd7\xfb\xc0\xa6\x08\x2b\x0e\xf6\x85\x24\x84\x94\x0e\x9f\xae\x7a\x3c\xae\x8b\x9b\x96\x51\x98\x31\x54\xc7\x99\x52\x5c\x36\xaf\x61\x5b\x35\xc1\x42\x1a\x7e\x06\xb3\xca\x52\xd6\x18\x1b\x49\x44\x24\x63\xfb\xdb\xaf\x50\xb7\x9f\x44\x29\x23\x81\x1f\xbc\x5d\x61\xa6\x6f\xbf\x42\x2d\x25\x83\xa5\x2c\x10\x4e\x39\x91\xc3\x62\x84\xd4\xb5\xd6\xe9\xd0\xb4\xc0\x1c\xa1\x90\x3f\xaa\x9d\x95\xf3\xe2\xb5\x13\x48\xab\xfa\x1b\x74\xef\x0f\x5a\x2c\xa4\x3a\xc2\xe6\xa5\xd9\xe1\x08\x55\x45\x59\xa3\x8e\xb7\x08\xd3\x35\xae\x15\x64\xd8\x86\xe6\x03\xa1\xb4\x41\x2e\x7e\x6a\xaf\x36\xec\x74\xba\x9c\xac\x7a\x2e\xec\x82\x28\x2a\xed\x57\x83\x12\x19\x7c\x8f\x1a\xaa\xac\x0e\xd2\xa7\x70\xc0\x5b\xb2\xb1\xc3\xcf\x91\x24\xd2\xb4\xba\xd1\x2e\xee\xf7\x56\x4d\x3b\xf6\xa5\x28\xae\xdb\x96\xa8\xc2\xdc\x47\x0c\x74\x8d\xe3\x12\x8a\xe3\xf2\x23\x33\x5c\x8f\xb0\xc9\x14\xbf\x7b\xce\x7e\x50\x3c\xd0\x0e\xf9\x0e\xb1\x69\x2a\x86\x6c\x44\x34\xb2\xd8\x16\x5f\x2e\xc5\x90\x6d\xef\x8e\xf4\x9d\xa6\xfe\x7e\x36\x02\x58\x37\x68\xa2\x30\x37\x18\xaa\xde\x33\xf1\xfa\x5a\x4f\xd6\x86\x61\x99\xd1\x6c\x08\x48\x5d\x37\xa6\x29\xc3\xdf\x21\xc5\xa4\x15\x8d\xf3\x79\x29\x68\xf6\x29\x64\xe7\xe2\x79\xbb\x36\x37\x46\xd3\xac\xfd\x89\x23\x5a\x99\x3a\x9d\x2f\x45\xfa\x74\x29\xe4\x3b\x9d\x48\x11\x26\x6d\x92\x32\xc2\x00\x47\x02\x06\xa6\x26\x74\xcd\x50\x6a\x02\xcc\x26\x83\xa0\x16\x2b\x56\x80\x27\x1d\x4a\x29\x1e\xde\x7f\xa2\x77\xfd\x44\x97\x4d\xaa\x7a\xe1\x68\x93\x1b\x55\x5e\x23\x53\x42\x49\x1e\xf3\x21\x91\xf2\x4f\x12\x8b\x86\xb7\x5c\x52\xcd\x71\x2f\xf2\xbc\x3f\x4f\x35\xa7\xb5\x1a\x21\xed\x15\xf6\x07\x54\x7b\x8b\xea\xad\xf2\xc2\x6a\xf9\x1e\x7b\xa5\x58\xb5\xa0\xbb\x4f\x16\x95\xfb\xa4\xa1\xc6\x75\x1c\xd0\xb3\xb0\x4e\xb8\xb2\x17\x75\x72\xdf\x58\xe7\x63\x2e\xed\x9a\x66\xc1\xeb\x35\x3d\x99\x67\x9a\xcc\xbb\x15\x8a\x6f\xf4\x06\xf9\xb2\x2f\xd0\x90\x8d\xd4\xd5\xaf\x0e\xe9\x56\x0f\xab\x03\x23\x95\xac\x82\x62\x65\x45\x38\x94\x71\x4e\x33\x51\x1f\x88\x9d\xeb\x8a\xba\xd5\x80\x4d\xe4\x2d\xd0\x25\xe3\x66\xe4\x92\xa9\x5e\xbd\xb1\x8b\x4c\xf2\xd8\x22\xb3\x0a\xa6\x89\x0b\xfc\x88\xc1\x4d\x42\x01\x71\x6c\x9c\xcb\x91\x0f\x44\x92\x6a\xe3\x9a\x4c\x9f\x73\x6b\x41\x68\xb1\x00\x84\xb5\x81\x11\xc0\x68\x72\x83\x08\x2d\x69\x21\x15\xe9\xed\xe6\x22\x88\xc7\x9a\x42\x0c\x0d\xe6\x01\xb8\xf6\x24\xd2\x18\x60\x46\xe4\x90\x6f\xef\x8e\x14\xd1\x1d\xf2\xed\x67\x3a\x57\x8b\x20\xbd\xe7\xe2\x7b\x9b\xed\xe0\xb9\xd8\x26\xdf\xea\x1c\x4a\x62\xa4\x95\x06\x74\x28\x34\x19\x2d\x4c\x17\x36\xa8\xbe\x24\x19\x2e\xb0\xaa\xe8\xdb\x11\x5a\x05\x36\x12\xb7\x18\x91\x69\x27\x7f\x84\x49\x67\x5e\xe4\x77\x53\x96\xe7\x65\xc5\x4a\xf3\x57\xd9\x7c\x4c\xc2\x3a\xf3\xb5\x58\xf0\xbc\x28\xe6\xea\x81\xf5\x2d\x77\xb0\x2b\xbe\x14\x15\xa2\x10\xb6\x86\x6f\x6e\xa8\x28\xb5\xe3\x97\xae\x11\xbc\xb7\x5b\xac\x48\x3a\x41\x07\xce\xf1\x18\x4f\xf1\xac\x66\x53\x2a\x35\x00\x31\x84\xfd\x9c\xd1\x4c\x8c\x67\x07\xac\x54\xb2\xd0\x04\xec\x28\xed\xef\xf4\x5d\xe4\x23\x94\xe0\x1a\x19\xd3\xb2\xdc\xcb\x73\xf7\xb4\xf4\x8f\xc3\x92\x8a\x8c\x44\x65\xa2\x07\x84\xea\x48\x95\x73\x93\x48\x96\x00\xb7\x15\xbe\x3e\xde\x7b\x73\x78\xf6\x76\x6f\xff\xf0\xec\xe2\xc5\xc7\x8b\xa3\x83\xe8\x11\xa1\x5d\x29\xb2\xf1\x27\xe8\xa5\x67\x0e\x21\xef\x77\x49\x85\x3c\x2e\xac\x6b\x27\x14\xb0\x10\xf8\x6a\x48\x0b\x7e\xc4\xcf\x45\xc6\x4b\xed\x64\xa9\x4e\x49\x26\x3e\xe9\x73\xbc\x57\x02\x06\xb7\x46\x84\x7d\x09\xf5\xe9\x3f\xac\x1d\x92\xc0\x64\xbe\xca\xca\xf7\x8c\xde\xaa\x41\x1d\x81\x23\x0b\x9d\x04\x05\xc0\xeb\x5c\xcb\x45\xb4\x5b\x5c\x96\x54\xdc\x40\xcb\xd7\xe6\x51\x96\xb3\xac\x7c\x43\xe5\xac\x50\x7d\xb3\x05\xf5\x54\x9f\xf8\xe2\xd9\x64\x12\xfc\xa2\x9f\xe7\x19\xb7\xad\x30\x98\xcf\x12\x68\x8e\xff\x7d\x55\xf9\xfd\x9a\x5d\x8a\x4c\xe8\xbf\xf3\xe0\xef\x5b\x2d\xca\xeb\x28\x77\xf3\x93\xd0\xee\x82\xdb\xbf\x58\xe9\xc4\x50\xf7\x18\x52\x99\x9a\xc2\xe6\x6f\xdd\xe3\x50\x87\xa0\x17\x99\x95\x33\x23\x63\xd3\x2e\xfc\x71\x5c\x4c\xa8\xaf\xe9\x27\x7a\x67\x2b\xd2\x7f\x1e\x84\xcb\x17\x9b\x7d\x09\xed\xbe\x3d\x3d\x79\x7b\x78\x7a\xfe\xf1\xe2\xe0\xe8\xe0\x62\xff\xd5\xde\xf1\x8f\x87\x7a\xbf\x41\x81\x0f\x2c\xcf\xb5\x83\x4e\xf0\xf0\x80\x4d\xdc\xb3\xe2\x86\x0a\xc1\x26\xd4\xf5\x88\x17\x92\x4d\xef\x6c\x03\xae\x1c\x75\x93\x6b\x9e\xa9\xb2\xda\x71\x28\x9a\xd4\x4b\x7a\xc5\x78\xbd\x24\x2b\xdf\x0a\x5a\x82\xbb\x75\x97\x95\x2f\xf2\x8c\x7f\x82\xbf\x0e\xaf\xe7\x30\x0a\x56\x1e\x17\x9c\xc2\xa2\xf1\x09\xa4\x54\x72\x13\x68\xd9\x30\xd5\x59\xb5\x11\x66\x59\xe9\x39\x33\xd8\x06\x41\x09\x9a\x8d\x67\x6f\x45\xf1\xf9\x0e\x32\xe6\x84\x03\x8d\xdf\x44\xf3\xe2\x5e\xe9\x1d\x9d\xa9\x02\xfb\x05\x97\x94\xcb\xb0\x86\xf0\x79\xf4\xbd\xee\x27\xd4\x1b\xef\xcf\xea\x23\xe3\xbf\x7d\xc4\x8f\x33\xc9\xcc\x17\xfe\x31\x9c\x06\x38\x65\x00\xd8\x2a\xee\xce\xa8\xd4\xdb\x58\x6f\xde\x0f\x4c\xce\x4c\xb6\x3b\xfd\x80\x68\xfb\x87\xd9\x6e\x6f\x4f\x4f\x7e\xf9\x78\xb1\x7f\x72\x7c\x7e\x78\x7c\x0e\x3b\xc5\x50\xe4\xf0\xe8\xa9\xa3\x45\x34\xa3\x03\x21\x53\x7a\xc4\x00\x80\x38\x9e\xd1\xc9\xfb\x2c\x5f\x54\x9e\xe9\x5f\x17\x57\x79\x71\x99\xe5\xe5\xbe\x0e\x6c\x55\x07\xd3\xfe\x19\x54\x3f\xb6\x6f\x4d\x1c\x84\xbe\x66\x1b\xaf\xfa\x89\xbf\x6d\xe7\xeb\xa3\x99\x6d\xf8\xf7\x3c\x8a\x57\x76\x15\x5d\x87\x6a\x70\x57\x55\x73\x20\xb2\x61\x08\xfc\xc7\x77\x01\x73\x67\xbf\xd5\x29\x56\xa1\x59\xd1\x85\x29\x48\x77\xe9\xb7\xb8\x09\xc7\x27\x4a\xa0\xbd\x0a\x10\xc0\xaf\x82\x84\x5b\xb5\x78\x8f\x4e\x07\x62\x52\x6f\x6c\x7b\xee\xab\xcb\xb0\xee\xed\xa4\xaf\x8f\x57\x90\x5c\xfe\x22\x84\xa0\x2a\xba\xea\xc4\x1f\x1d\x1f\x9d\x5f\xec\x9d\x9f\x9f\x9e\x75\x3a\x59\xc4\x3d\xc7\x6f\x2d\x13\x8d\x45\x63\xc6\x72\xbe\x5c\xa6\x82\x70\xac\xe1\xa1\xc1\x25\xbf\x04\xee\x08\xa5\x14\x55\xe4\x7c\x9d\x22\x19\xeb\x14\xf9\x41\xf7\x6f\xbd\xdc\xff\x47\x1a\x69\x92\xeb\xaa\xb9\xa5\x0e\x1b\x92\xe8\xeb\x7b\x3d\x8a\x7f\xd5\xb8\x01\xb5\x40\xf0\x22\xd4\x83\x40\xe3\xd6\x29\x44\x75\xa0\xcf\x7c\x94\x78\xd1\xe9\x14\x75\x39\x10\xb4\xa6\xbe\x91\xe5\x12\xfe\xb3\xb9\xa9\xac\xe9\x08\x38\xb9\xcc\x0b\xc6\xdf\x3e\xcf\x94\x60\x9c\xed\x90\x6f\xd1\x82\x88\x61\x36\xc2\xb9\xfa\x4f\x71\x7f\x63\xf8\xe3\xd9\x08\xe7\x9d\x4e\x3a\xee\x74\xf4\x14\x2e\x70\x0e\xd9\x2c\xd3\x05\xa1\x08\xd7\x36\x90\x2a\x9b\x93\xc5\x30\x1f\x21\x9c\x9b\x18\xae\x85\x56\xd4\x18\x8b\x16\x6c\xe1\xcf\xeb\xc1\x6e\xb2\xc9\x84\x4e\x62\x6c\x85\xdf\x17\x74\x41\xc9\x70\xd4\xe4\x36\x90\x4d\x26\xeb\x8c\x5f\x50\x9b\x3d\x7c\x0d\xf8\x0d\x67\xd4\xa6\xdb\x85\x82\xfa\x24\x0b\x84\x70\xa0\x50\xf4\x7d\x08\x14\x3f\x16\xa3\x45\x56\x2d\xbf\xd3\x7c\x51\xce\x6a\xd8\xf3\x76\x77\x10\x5f\x19\xac\x47\xd0\x36\x08\x32\x56\x99\x60\x87\x8c\x75\x16\x5b\xe6\xf3\xd6\x92\x6f\x91\x04\xb3\x2a\x06\xeb\xaa\x5a\x2d\x01\x7f\x3c\x1b\x61\xe3\xda\x66\xbc\x06\x96\xcb\xe0\x37\x9d\x2c\x97\x87\xa9\xc4\x02\x0f\x25\xe6\x23\x9b\x95\xe2\xac\xae\x4f\xdf\xda\x0d\xc4\x83\x13\xaf\x66\xcf\x5b\xf2\x9c\xb8\xb2\x7b\x76\xfe\xd9\x34\xb5\x7b\xdc\xc7\x21\x2d\x97\x55\x2c\xfa\x3c\xc2\x5e\x36\xa1\x91\x81\x1d\x30\x3a\x86\xda\x53\x29\xed\x61\x01\x77\x76\xf1\xf9\x0e\x05\xf1\x31\x9f\x00\x02\xc3\x25\xc9\x0a\x8d\x59\x3a\xf7\xe5\x50\xba\x5c\x06\xd9\x72\x99\xaa\xdf\xe4\x24\x45\x61\x7a\xb8\xd0\xf9\xb3\xc9\x7d\xc9\xe7\x87\x0b\xd4\xf4\x71\x1f\x25\x0a\x9b\x4e\x4f\x50\x3f\x1e\xa3\xce\x07\x57\xc3\x64\x3d\x0f\x37\x2e\x23\x3c\xb4\x50\x85\x9e\x27\xac\xd3\xa9\xcd\xc0\x80\x99\x84\x2d\x53\x26\x4a\x19\x27\x6f\xe9\xb3\xf8\xb7\x9d\xa0\xa8\x01\x3d\x41\xae\x8d\x62\xa0\xe6\xc6\xa2\x72\x79\x5f\xdd\x4e\xe7\x4d\x9a\x05\x54\x86\x59\xf3\x26\x21\x24\x5b\x2e\xcf\x52\xd4\xe9\x2c\xc2\xa0\x28\xca\xcb\x85\xf0\x09\xcd\xd0\xea\x4d\x2d\xfa\x21\xcc\x33\x03\x5d\xdb\xdf\x68\xe0\xf3\xf7\x9b\xdd\x73\xe9\x50\x8e\x52\x84\xd5\x6e\x55\x9f\x9e\x12\x98\x19\xe7\x24\xd6\xc0\x7e\x26\x08\xbf\x85\x43\xff\x19\x1f\x93\x1e\xfe\xcd\xae\x43\xe1\x79\xd5\x0f\x47\xaf\x5f\x9b\xd2\x9d\x4e\xda\xc8\xae\xfe\x16\xc5\x11\xea\x29\x3d\xaa\x2d\xe9\x41\xab\xdb\x5d\x9d\xbe\x73\xa7\xa8\xdb\x22\x04\x12\x4c\x6c\xb1\xe5\x52\xc4\x1e\x51\x6a\xb3\xfb\xe4\xff\x65\xec\xec\x07\x50\x1a\x58\xc4\xec\x45\xd1\xe9\x34\xe1\x51\x2a\xa1\x4a\x0f\x45\xdd\x25\xee\x07\xcc\x2d\x66\x9d\x8e\x88\xec\x59\xa9\x44\x60\x75\xae\x92\x58\x36\x4d\x79\x83\xb3\x53\x8a\x96\xcb\x2d\x6e\x0d\xf6\xde\x99\xc1\x20\x7c\xbe\xdc\x50\x94\xf7\x25\xd9\xda\x45\xcf\xd3\xba\x3c\x6c\x07\x28\x6c\xf4\x7d\x78\x77\x16\x9d\x4e\x5a\x38\x9a\x2d\x8c\x6f\x76\x81\x10\xde\x2a\x80\x56\x73\x33\x41\x76\x33\x6f\xb0\xd8\xce\x9f\x72\x1c\x46\x07\x7b\x8d\x4c\xd6\x38\xa3\x12\x20\xe8\x90\xe2\x5e\x2e\xca\x45\x39\x57\x72\xe8\x44\x9d\xf9\xe5\x92\x9a\x97\x2b\xb4\x5a\xa1\xf4\x00\xab\x01\xbc\x86\x2b\xa1\xd3\x49\x5f\x3b\x42\xfe\x92\x6c\xf5\xd0\xca\x2c\x0d\x6e\xbe\xa4\x78\xb3\x4d\x37\x3c\xf5\x80\x0c\xa3\xa5\x9f\x54\xe2\xad\x1e\x3e\x40\xab\xb4\xd7\x5c\x69\xeb\xb2\xc4\xeb\x70\xa9\x26\xf7\xf8\x87\xde\xe0\xad\x36\x0f\x42\x65\x7d\xc5\xc4\x08\x3c\xa4\x58\x8e\x5c\xb7\x11\x3e\xdd\x64\x26\xff\xcf\xe9\x28\x55\x5b\x04\x5a\x11\x6b\x5b\x39\x37\x5f\xaf\x56\xab\xa2\x49\x10\x8c\xce\x96\x17\x65\x8e\x6a\x37\xb9\x3d\x46\xe6\x9c\xbd\x76\x7c\x81\x9a\x5b\x7f\xda\xbe\xfc\xb1\x49\x15\xd4\xa5\xbc\x0b\x99\xef\x57\x29\xba\x3f\xde\xde\xf6\x0f\x5e\xa4\xe8\x7e\x67\xe7\xf8\x7b\xd2\xeb\x74\xde\xea\x0b\x3e\xbc\xf7\xde\x29\x7a\xf6\x2a\x45\x1b\x52\xdc\xdd\xc3\x8d\xc8\x78\x96\xe7\x77\xf7\x2f\x52\xa3\xd2\xfb\x7d\x3d\xcb\x13\x79\xd5\x6e\xf5\x6c\xca\x38\xeb\x29\x4d\xb6\x7a\x4d\x9c\x0f\x04\x99\xb5\x07\x4c\x4b\x9a\x89\x49\x71\xcb\x1b\xc2\x9e\x5d\x0f\x3e\x44\x67\x2f\x76\x02\x8a\x6e\x36\x7f\xb5\xd6\x88\x03\x6e\x3e\x3e\xaa\x62\x86\x5c\x3a\x49\x75\x85\x6c\x2c\x3a\x9d\x34\x73\x1d\xb3\x45\x58\xdd\x84\xa9\x08\x87\xd1\xd3\x6e\xf5\x36\x28\x21\x44\x27\x9c\x75\xa3\x03\x4e\x73\x6b\x57\x17\x02\xdd\x99\x3d\xf4\x7c\x93\x99\x2b\xa7\x98\x6e\xfe\x3e\x48\x67\x84\xb7\x7a\xa6\x4b\x7c\x3f\x2e\xf8\x94\x5d\x2d\x9c\x47\x7a\xe0\x9f\x9e\x83\x19\x22\x1d\x13\x89\xa7\x64\x86\xeb\x7e\x07\x53\x4d\xa6\x66\xac\xc4\x63\x9d\xf2\x9b\xd5\x4d\xad\x12\xcf\x4c\x9a\xc4\xc5\x5c\x0b\x89\x7d\xcd\x07\x71\xd5\x37\xa1\xd8\xe9\xad\x5d\x00\xcb\xf9\xa3\xbd\xb4\x1c\x87\x7a\x01\xb8\xaa\xfd\xd9\x0a\xf5\xd5\xf5\x48\x04\xea\x3f\x30\x01\x1c\x21\x5c\x74\x3a\x5f\x80\xa0\x30\x84\x1b\x6e\x0c\x50\xc3\x1d\x44\x9f\x82\x07\x6c\xf5\x21\xd4\x37\x0b\x71\xda\xab\xaa\xe5\x76\xde\x0e\x37\x6c\xad\x0d\x16\x3b\x6b\x28\x6a\xbf\xbd\x8b\xb0\xbd\x0c\x42\x0b\x60\xfb\x0e\x44\x51\xaa\xae\x5b\x96\xe7\x50\x9f\x3a\xfe\xee\x87\xdd\x89\x8d\x83\x77\xa5\xc2\xc1\xd7\x1e\x82\x1c\xe0\x46\xfe\xf1\xa1\x91\xc7\xf7\x7f\x74\x6d\xb3\x4e\x67\x8b\xd5\x3d\x79\x53\x77\xfd\xd7\x27\x4a\xed\x9f\x62\x90\xd6\xe7\xab\x67\x19\xb6\xa7\xcd\xd2\x84\x4d\xde\x69\x9d\x9f\x9a\x26\xff\x6b\xed\x3c\xf9\x62\x95\x5d\x52\x79\xaa\x66\xaa\x5f\xfc\xb0\xdb\xe9\x34\xac\xef\xce\xae\xa1\x98\x3f\x36\x6b\x67\x7e\xaa\xa6\x36\xfa\x31\x96\xed\xf4\xfc\x31\xad\x12\xf3\x4c\x9b\xb7\xd5\xbb\x9a\xbe\x7a\x4a\x4d\x07\x21\x97\x54\xa9\xe8\xe7\x40\xbb\x50\xf3\xe2\x49\x25\xe9\x61\x4e\x04\xd9\xd9\x45\xfd\x20\x6f\x18\x20\xa7\xef\xec\x86\x52\x3b\x88\xa4\x3b\xbb\x08\x61\x3f\x48\xac\xae\xe4\xe4\xef\xd0\x87\xfe\x25\x9d\x16\x82\x26\x70\x41\xab\xb7\x60\xae\x74\xdd\xf8\xa5\xc9\xb9\xe1\x0f\xb5\xaf\x05\x31\xb0\x4d\x2c\x48\x6d\xb7\x3e\x4f\xc5\xf7\xbd\xe5\x92\xab\x7f\xc4\x0e\xdf\x22\x3d\xd4\xe9\xa8\x6b\x3a\xd1\x12\x6a\x82\x17\x08\xc3\xef\xe1\x08\xfe\xfe\xaa\x79\x34\x46\x87\x14\x8c\xc6\x10\xfc\xbb\x9a\xc6\x6d\x8b\x90\x1c\x98\x3f\x6b\x80\xda\x49\x75\xc2\x07\x31\xe8\xf5\x05\xda\x49\x19\x81\x9f\xe0\x39\x8a\x94\x34\x23\xbf\xef\x0d\x8a\x6d\xd9\x97\x38\xd7\x08\xc4\x20\x1c\x69\x2a\x98\xa0\x4e\x07\x84\x16\xd3\xed\xf0\x95\xea\xaf\xf9\x22\xcf\xc2\x0f\x8a\x9d\xdd\xef\xb3\x6d\x66\x47\x9a\x85\x5f\xa8\x65\x80\xf4\x00\xeb\x2f\x79\x08\xc7\x88\x54\x0e\xaa\x9a\xd6\x8c\xaf\xb1\x5e\x23\xa8\xc3\x38\x74\x05\x55\x54\x9c\xda\x4d\x52\xcd\x9a\x0a\xc2\x4e\xaa\x73\x30\x81\xda\x4a\xf6\x85\x0e\x62\x29\xb5\xbf\x5b\x2f\xe1\x5a\xeb\xa7\xa0\x96\xf0\xaf\x1b\xbd\xb1\xdc\x78\x14\xab\x24\xd5\xd5\x98\xf6\x70\xee\xf3\x7d\x02\xee\xe7\x1a\x47\x00\xd5\x66\xcd\x0d\x20\x34\x76\xbb\x9e\x79\xb3\x3d\x80\x2b\x13\x87\x2c\x47\x69\xcc\xf9\x48\x5a\x97\x10\xbd\x5e\x3a\x09\xb8\x22\x4e\x23\x0f\x66\x43\xe0\x70\xa8\xb8\x23\x5e\x66\xc3\x5e\xde\x98\xa6\x91\x7e\x11\x3c\x49\x62\xe3\x2f\x6b\xa3\xc1\x01\xf0\x9b\xa6\x43\x58\x8b\x3f\x19\x51\x17\x39\x0e\xb8\xe8\x17\x7b\x67\x87\x07\x17\x07\x87\x67\xfb\xa7\x47\x6f\xcf\x4f\x4e\xcf\x5c\xf6\x00\xcf\x76\xa0\x34\x73\xf5\xfd\x31\xb6\x02\x78\x92\x2c\x60\x42\x5b\x16\x23\xf3\x3c\x90\x84\x38\xeb\x58\x77\xda\xc0\x0e\x65\x48\x63\x9a\x1a\x76\x08\x67\x6e\xbc\x2b\x9a\x97\x74\x53\x8f\x38\x12\xfd\x32\x98\xc5\xab\x00\xb5\x4d\x50\x37\x43\xa2\xd3\xd9\x4a\x25\x08\x29\xa8\x51\xe2\xa5\xdd\x05\xff\xc4\x0b\x8f\x73\xe2\x11\x70\x2a\x2f\xd4\x4e\xb5\xe3\xf2\x94\x55\xd0\x18\x1f\x96\x02\x42\x53\x39\xcf\x99\x04\xfd\xfa\x86\xf7\x9a\x61\xde\x6b\x66\x3b\x40\x4e\x15\x5a\x9a\x77\x77\xb9\x15\x93\x04\xe1\x34\x15\x18\x62\x0e\x6c\xc3\x02\x68\x09\xa3\xd6\x41\x61\x2a\x28\xfd\x42\x53\xf0\xf7\xb2\x3d\x2a\x68\xa4\x09\xd1\xbc\x31\x2b\xe1\x7f\x00\xe4\x19\xca\x51\xdf\x1b\x6d\xd4\xb0\x40\x30\xa6\xe4\x3f\xe8\x77\xbe\x9a\x92\x56\xee\x40\x5c\xa8\x09\x75\x17\x9a\x55\x20\xbb\xbf\xbe\x27\x19\x45\xd4\xf8\x32\x19\x05\x2f\xd5\xfa\x44\xeb\x2d\x26\x10\xda\x80\x65\x54\x93\x62\x8b\x6a\xec\x3b\xed\x89\x2e\xbc\x27\xba\xaa\xad\x70\xb9\x4a\x18\x66\xdb\x19\x80\x75\xd4\xea\xdf\x66\xb8\xe7\x5a\x28\x10\xda\xf8\xa5\xda\x45\xbf\x5a\x0b\x5a\xd7\x27\x40\xca\xd7\x5b\xc7\x0d\x2c\x97\x49\x85\x3f\x48\x70\xa6\x0b\x39\x75\x88\x2d\xe3\x6e\xfe\x04\x2b\xea\xad\xa8\xff\x2c\x2b\x23\xfb\x59\xe9\x20\x3d\x37\x45\xc3\x75\x2d\x71\x81\xb0\x68\xb8\xf9\xe0\x28\x94\x5a\xde\x3a\x68\xa9\x38\xbc\xe1\xf3\x60\xb9\x2e\x52\x8a\x95\x10\xaf\xef\xd5\x4f\xb4\xe2\x94\x32\x0e\x8a\x9e\x1b\xd5\xce\x6d\xf8\x89\x2f\x3a\xa5\xde\xe0\xf5\xe3\xc3\x06\xaf\x99\x2a\x8e\x7f\x8c\x4c\x5e\xea\xe3\x19\x7d\x28\x02\x73\xac\x0d\x94\x36\xe0\xf0\xe2\x13\xbd\x73\xa1\x82\x01\xd1\x00\x87\xbb\xc6\x0b\xb1\x62\x1e\x5d\x17\xf1\xa2\xea\x06\xda\xe0\x54\xaa\x3f\xf4\x06\x72\x9b\xf7\x77\x76\xd5\x63\xf6\x43\x2f\xf6\x45\x15\x68\xa2\x66\xa9\x30\xe0\x64\x98\x55\xc3\xfa\xe2\xbd\xd0\x9e\x68\x33\x6a\xdd\xeb\xb3\xa0\x75\xd1\xdf\xd9\xb5\xc2\xb2\xe7\xa8\x60\xbc\x1b\x51\x5c\x08\x43\xc5\x0f\xbd\x4e\x67\xae\xba\xb4\xb0\x5d\x2a\x14\x57\x05\x7f\x2f\x70\x56\xed\x5e\x4d\x1c\xa9\xb3\x0e\x60\xff\xd6\x3b\x8b\xf1\x2b\x63\x2d\xfe\x89\xde\xd5\xd1\xd2\x6a\x1c\x7b\xbd\xb2\x52\x16\xf3\xc7\xd4\xd5\xd6\x68\xdd\xb5\xc9\x66\xb0\xd7\x93\x57\x61\x54\x83\x0d\xd3\x18\x95\xc4\x87\x74\x34\x50\xff\x6c\x6f\xf7\x53\xf5\x3f\xd9\xc5\x73\xea\x43\x2c\x74\xbb\x58\xef\x3c\xac\xb8\x0e\x43\x36\xaa\x21\x88\xcd\xc3\x7a\x5c\x6f\xb7\xa0\xb7\xaa\x75\xb5\x78\x3b\x3b\xea\x2f\xd0\x18\x4d\x1e\xd3\x93\x2a\x0b\x67\xdb\x6e\xde\x73\xe8\xfe\x20\xc8\xec\x1d\xa9\x74\xe6\x11\xfd\x73\xbb\xfc\xf9\xce\x0e\xfb\x81\x88\xe7\x28\x2d\x08\x5c\x1f\x20\xf3\xe5\x34\x2d\xa0\x70\xd2\xd0\x62\x12\x50\x89\xc9\x53\x6a\x1d\x3f\xb6\xd6\x6b\x1a\x98\xa3\xd7\x58\x5c\x80\xc2\xdc\xb5\x51\x18\xb3\x27\x4d\x28\x4a\xc3\x06\x79\x8c\xd9\x30\x8a\x57\xd3\x55\x45\x81\x71\x7c\x10\xbf\x21\xea\x8a\xe5\x8e\xbf\x6d\xf0\x6f\x5e\x87\x2e\xef\x1b\x88\xa3\xef\x3d\x27\x21\x42\x4e\x02\xdc\x96\xc1\x03\x17\x22\x1d\xcc\xa5\xca\xf1\x2e\xda\x00\x3f\xdb\x55\x2d\xba\xe3\x9f\xd4\xb8\x8f\x4c\x6c\x0c\x47\xf4\xfa\xd4\xbd\x3c\x8f\x56\xcb\x7a\xaa\x83\x47\xa8\xef\x04\x82\xbf\x8d\x6e\x9b\xe2\xad\x9e\x05\x98\x6e\xab\xb7\x4e\x8a\x1e\xfc\x58\x17\x68\xbe\x2e\x9c\x73\x79\xcb\xa4\x14\x9d\x0e\xfc\x67\x4f\x69\x6c\x5f\x80\x51\x05\x67\x3f\xcd\x20\x58\x40\x3b\x4b\x16\xde\x59\x72\x1b\x15\x43\x31\xf2\x2a\xfc\xac\xea\x06\xe2\xe3\xf4\xb2\x80\x3b\x7a\x86\x78\x9a\x0d\xd9\x08\x67\xe0\xa3\x0e\x34\x3f\x3a\xea\x37\x34\x8d\x92\xfc\xdc\x05\xcc\xc2\x15\xad\x64\x85\x3f\xd3\x87\x41\x03\x13\x46\xce\x1d\x34\xbe\x41\x23\x06\x7e\x43\x34\x07\xbe\xa5\x37\xda\xfb\x42\x73\x76\xef\xad\xba\xdf\x3b\x84\x04\x0c\x08\x9b\xa6\x70\xd0\xed\x25\x19\xf8\x00\xd7\x75\x61\x22\x88\x45\x5d\x2e\x6b\x7a\x30\x63\x62\x62\xf5\xa0\xfe\xe5\xd2\x7f\xd8\xa6\xfe\x5f\x2e\xd3\x9a\x62\xbb\xad\xac\x39\xc5\x7a\x80\x1f\xad\x9a\x4c\x2b\xa7\x6e\x95\x08\xec\xd7\xe1\x90\x1a\x83\xa6\x73\xbf\xeb\x74\x52\x35\x03\x86\x03\xc7\xb4\xfb\x89\xde\x61\xe0\x6d\x03\x17\xbd\xad\xdd\x60\xc2\x3e\xd3\x28\x67\xac\x8e\xbb\x8b\x3c\x7d\x1d\xc7\xc2\x43\xb7\x6a\xf5\x66\xc8\x47\x9d\xce\xad\x15\xb6\x41\x98\x50\xe5\xce\x5a\x59\xb2\x60\xb9\x37\x4c\xe0\x88\x9c\xc5\xb8\x0d\x51\x3f\x71\x48\x60\xc3\x52\x7a\x7c\xd1\xa3\x71\x98\xa0\xc7\x38\xde\x1b\x96\xef\x13\xbd\xb3\xf0\xc8\x96\x19\xe4\x38\xad\x36\x67\x89\x3e\xea\x74\xae\x69\x2a\x7c\xbe\x3f\x17\xb3\x62\x5a\x15\xf8\x52\x49\x4f\xba\x46\xd4\x48\xe5\xe1\xcb\x56\x45\x48\x1c\x6e\x63\xba\x64\xe2\x14\xa3\xb5\xa4\x61\x78\x8d\xcb\x88\x17\x0d\x24\xa6\xb7\x6c\x9a\x6e\xe9\x3d\x1f\x98\xdd\x78\x5d\x99\x16\xd3\x01\x25\x80\x68\x1c\x0e\xef\x24\x61\x73\x47\xfc\x9d\x66\xe3\x59\x02\x3a\x3d\xe0\xd8\xfb\xcd\xec\x6f\x9b\x86\x97\x3b\x1f\x9c\x34\x34\x81\x81\x94\x2f\xba\x17\x37\x45\x9e\x49\x96\x53\x63\xf6\xe3\x68\x60\x74\x20\x7d\xed\xc5\xe6\x92\xfb\x7f\xa2\x77\x28\x1e\xf9\x83\x38\x1c\x36\xb5\xab\x9f\xc1\x41\x8d\x9f\x02\x52\x0a\x47\xe0\xf9\x2d\x75\xb9\x1c\x9f\xa3\xcf\x8a\x75\x52\x3b\xbb\x98\xa7\x08\xe1\x43\xb0\xd3\x69\x96\xb9\x7f\x48\x8d\xac\x50\xe1\x9c\xe6\x77\x4d\x08\xc8\x96\x63\x83\x9d\xde\x40\x7e\x41\x81\xe0\x76\x32\x47\x7c\x28\x81\x8f\xa3\xc6\xc9\xa7\x16\x5f\xd6\x16\xd3\x07\x0d\x58\xa7\x21\x7d\xae\xee\x57\x68\x03\x50\x59\x53\x09\x60\x0f\x3d\xb4\xbd\xeb\x80\xe5\x03\x3d\x82\x3f\x65\x29\xef\x96\x33\x36\x95\x29\xc2\xd5\x14\x36\x35\xe6\xa2\xde\x7a\x85\x6e\xdc\x4b\xc3\x93\xaa\xff\x77\x76\x5a\x5b\x5e\xf0\x86\xb6\x2b\xb3\xab\x0a\x04\x70\xd6\x15\xb9\xcb\x90\xad\x8a\x4e\xf9\x01\xee\xcc\xa5\xc8\x19\xca\x06\x20\x02\xa9\x21\x31\xa8\x61\x77\x7d\x02\x0a\xa6\x29\xcd\xf6\x36\xe6\x41\xf2\x4f\xf6\xe0\xfc\x99\x51\x3e\xc4\xfc\x61\x1d\xb1\x1f\x25\x3b\x15\x6e\x8a\xa4\xab\x5e\x22\x2c\x74\x4f\x76\x76\xec\x5f\xc0\xf5\xa7\x7c\x28\xd4\x71\x19\x79\xc0\x20\x87\x19\xf3\x30\x87\x82\xee\x69\x13\x21\x4a\x79\x13\x25\x42\x36\xd2\x5a\x13\x46\x7d\xf9\x04\x0f\xdc\xd1\xd5\x94\x12\x5f\xd3\x94\xa3\x41\x44\x4b\xb9\xa2\xa5\xbc\x52\xd0\xa4\x0d\x8a\x88\x7c\x85\xec\x99\x87\x1b\x31\x1e\x48\xd3\xfd\xc5\x2a\x12\xb7\x9d\x16\x86\x42\x0b\x15\x1b\x16\x23\x14\xf8\x3b\x80\x92\x2f\x8c\x76\x79\x28\xb0\x7c\x5e\xcc\x17\xb9\x62\x40\xa7\x53\x70\xef\x4f\xdd\x90\x76\x6b\xa0\xe3\xd5\xb2\x35\x1e\xd1\x7e\xeb\xaf\x80\x4f\xf4\x6e\x3b\xe9\x26\xdb\x8d\x21\xee\x83\xb5\x1d\xa1\x58\x6e\xef\x62\x8e\xfa\xf2\x87\x5d\xa0\xf4\x70\x5b\xab\x2f\xec\x85\x42\x6b\xc2\xdc\x09\x5d\xef\x46\x74\x1d\xba\x10\xd5\x1c\x77\x0c\xf3\x16\x1a\xd8\x98\x35\xa0\x82\xa3\x4f\x25\x0a\xff\xca\xf2\x74\xa1\x4f\xdf\x03\x3d\x58\x63\xc8\x74\x5a\x91\x7a\xc7\x18\xf8\x14\x35\x74\x6f\x67\x17\x41\xf2\xf4\xb6\xee\x59\xa6\x0c\x85\xb9\xa0\x3f\xb9\x3e\xaa\xca\x07\x6e\xd2\xfa\xd6\x00\xed\x8b\xbe\xa1\x95\x9c\x44\x95\xfb\xb8\x6a\x77\xd2\x77\x72\xdc\xfb\xe5\xb2\xe7\x2b\x3c\x8f\xdb\x76\xd3\xd5\xff\x58\x6b\x7b\xbf\xae\x6e\x85\x0c\xf6\x17\x13\x0a\xce\x45\x20\x27\x97\x16\x8c\x7d\x8b\x64\xcd\x72\xc1\x36\x2a\x08\x88\x05\xc2\xc3\xbf\xa4\x05\x28\x43\x2d\x12\x0b\x84\x47\xab\x95\xfe\xa4\xf8\xd7\x22\xe2\xcc\x4f\xff\xb5\xbd\x50\x0b\x7a\xee\x7a\xa1\x1a\x7c\x4b\xc9\x37\xff\xb7\x0b\xfc\xcc\x57\xdf\xf8\xad\x7e\x1c\xad\x4c\xe0\xc1\x7e\x9f\xa0\x0d\xfe\x7d\x6f\x20\x53\x8f\x33\xff\x96\xe2\xa4\x3b\x1c\x25\xc8\xf3\x41\x9b\x34\xad\x6a\x7d\x7d\x1d\xab\x04\xe1\x8c\x78\xf4\x16\xe7\x96\x62\x6c\x8e\xbc\x5b\x2e\x2e\xb5\x3b\x73\x2a\xb6\x77\x71\x81\xec\xed\x88\x13\xe3\x63\x12\x95\x29\xb6\x77\xd1\x86\xdc\x8e\x9e\xf5\xb0\x40\x1b\x0b\x62\x33\x8c\x02\x4b\xf3\x3c\xfb\x7e\xf1\x1c\xa5\x25\x19\x47\xe3\x41\xdf\xf7\x06\x2c\x4d\xe5\x76\x3e\xcc\xb6\xb7\x47\xdb\x63\xd4\x34\x32\xea\x0a\xe0\x31\x2e\x31\x43\xab\x34\x49\x30\xc5\x3c\x52\xf5\xfe\x16\x4b\x5a\x5b\x34\x32\x34\x54\xed\x26\xad\x8a\xcb\x80\x1b\xd0\xbe\x18\x8a\xe3\x32\xe0\x7c\xac\xfb\x5b\xc1\xb8\x7e\x57\x12\x30\x87\x64\xc8\xef\x10\x17\x1f\xfd\x1b\x4d\x4b\x5c\x98\xb0\xe0\x2d\x81\x7c\xaa\xae\xb1\x85\xd6\x4f\xbf\xb6\x4a\xc5\xcd\x92\xca\xcd\x69\xc6\x72\x3a\xe9\x6f\xea\x2b\x46\xdd\x0b\x8a\x81\xd9\x4c\xbe\xde\xce\xb6\xbf\x4e\x36\xc7\xc5\x22\x9f\x40\x6a\xaf\x4b\xba\x39\x2d\x16\x7c\xd2\xfd\xda\xb2\xa8\x6a\xb6\xf5\xfe\x75\x66\xea\x06\xab\x5a\x44\x90\x16\xb6\xa3\x0b\xab\xbe\xd6\x09\x99\x60\x0f\xd8\xa3\x9f\xff\x41\x83\x5b\x8e\x06\x29\x23\xf9\x1f\xf4\x35\x02\x46\x9c\x3d\x6c\x6e\x63\x4f\x36\xb7\x81\x83\x55\x60\x6e\x63\xd1\xd8\x9d\x53\xc0\x16\x21\xf9\x72\xd9\xe4\xb5\xad\x4d\x6b\x8d\x71\x13\xe0\x83\xf6\x2e\xb6\xa1\x0d\xd2\x9a\x8a\x5b\x09\xbe\xc0\xc8\xe1\x5c\x93\x54\xed\xd5\x97\x41\xc2\x95\x7a\x0d\x26\x53\x52\x48\xe1\x8f\x68\x8a\xee\x81\x7a\x1c\xc4\xac\xaf\xb7\xd9\xa6\x21\x45\x23\x60\x5a\x7e\x38\xcf\x8c\x4b\xf3\x02\x5e\x03\x0d\xb6\x43\xee\x9c\xc6\x07\x05\xc4\x34\x49\x2a\x08\xef\xa7\x8c\x70\xec\x1f\xc0\xaa\x2c\x97\x47\x54\x3d\x2b\xed\xb3\x92\x4a\x04\x0f\x9c\xf3\xa8\x21\x3e\x45\xf7\x02\xe2\x7b\xfd\x4f\x2b\x7f\x29\x59\xbb\xa8\x90\x62\xed\xaa\x18\x3d\x52\x65\x04\xcd\x26\x27\x3c\xbf\x23\x5b\x5b\xa2\xd3\xc9\x0c\xba\xa6\xe8\xda\xe7\xb8\xf0\xe9\x72\x64\x3d\x5d\x4e\x20\x23\xdb\xb6\x5b\x2c\xed\x41\xe7\xb4\x54\xbf\x8a\x3e\x77\xfd\x68\xfb\xdc\x77\xb4\xe9\xf3\x79\xcd\xc6\x50\x0d\x98\x08\x35\x2d\x05\xa4\xca\x70\x68\xd8\x60\x63\xac\x61\x4c\x63\x49\xac\x25\x14\x6b\x7d\x26\x05\x45\x26\x80\x18\x78\x98\x69\x1e\x86\x36\xcb\x50\x5b\x77\x4c\x53\x39\x14\x23\x5c\xc4\x79\xbd\x2a\xcb\xc2\x1a\x46\x53\x0b\xdb\x0e\x5c\x2e\xaa\xdd\xd4\xdc\x22\xec\x84\xe5\xf2\x7e\xd5\x4f\xfd\x6f\xa3\x30\x41\x71\xe5\x93\x16\x53\x80\xc7\x14\xb1\x2b\x65\x58\x62\xbf\xf3\x40\x9f\xd2\xca\xf4\xd4\x94\x10\x41\x40\xb9\x61\xfb\xee\x22\xc7\x28\xb3\x23\x73\x0a\x8e\xb3\x9d\xce\xa9\x11\xcf\x0c\xc7\xb3\x8a\xfb\x7d\x55\xc3\xc6\xb3\xc9\xd9\xbc\xde\xa1\x8a\x32\x26\xa9\xd0\x87\x53\x0b\x00\xd0\xf1\x89\xe9\x6b\x05\x27\xcf\x45\xcf\x6d\xdc\xc4\x98\x77\x71\x1d\xdc\xe5\x64\x35\xf2\x66\x44\x39\xe1\xce\x6b\x73\x1a\xae\x32\x85\x10\x84\x15\xf9\x0e\xe3\xfd\x60\x06\x18\xc2\x22\x9e\x81\xb2\x32\x03\x98\xb7\x9c\x11\xbb\x70\x70\x73\x9e\x9a\x87\x26\xcf\xa5\x22\xde\x66\x59\x61\x6c\x83\x78\x0a\xf5\x4f\xfb\xeb\xcc\xd1\x78\x2d\xc3\x95\x3a\x4a\xf3\x4c\x6f\x88\xe8\xd5\x38\x2f\x2e\x2f\x21\x4d\x8e\xe5\x58\xa3\xbe\x37\xf4\xa5\x86\x69\xd1\x70\xcd\xef\x67\x5c\xdd\xdb\xea\x92\x57\x83\xdb\x29\x78\x7e\xb7\x69\x0f\xbb\xba\xe0\xa5\xba\xe0\xd5\x91\x86\x1b\xa7\xbf\xf9\xf5\xb6\x8e\x6c\xe1\xe5\x9c\x8e\xa5\xf1\x10\xe2\x11\xce\x83\xed\x67\xdb\x5c\x1a\x6f\xe6\x45\x9e\xe3\x6b\x63\x9c\xb6\xdc\x11\x64\xde\x6b\xa2\x7a\x6b\xaa\x0b\x27\xdb\x6d\xa4\xda\xfc\xc4\x33\xbb\xd6\x2a\xed\x8e\xe3\x46\xe5\x37\xa1\xe0\x3a\x5e\x6d\xd7\x49\x10\xc6\x9d\xbc\xfa\x95\xa8\x1c\xb4\x8b\xa6\x7d\xa6\x3b\x00\x1e\x63\x4a\x12\xd3\x47\x07\xfb\x18\x0b\x03\x9c\xd9\x30\x50\x45\xff\xd8\x34\x65\x9d\x4e\x01\x3e\x38\xf6\x26\x84\xf3\xb3\xa8\xda\x09\x0c\x7f\xb2\x5c\x86\x47\x61\x81\x5c\xa0\x46\xa6\xbd\x02\xe1\x59\x16\xf7\xbb\xee\xa9\xee\xa3\x19\x2a\x94\xed\x8f\xd1\x23\xcc\x57\xe9\xef\x81\x58\xfd\x9a\x1a\x9b\xd4\x9f\xb9\x3c\x82\x5b\x8a\x48\xcd\x2f\x63\x06\xca\xaa\x03\x9a\x0a\x7f\x75\x44\xda\x29\x7b\x02\x8c\x73\x0b\x03\x8e\x0c\x18\x9b\x97\x94\xbc\xa6\x41\x4e\x12\xfc\xa5\xea\x02\x74\xbf\x42\xf8\x55\x3b\xfb\x13\xa8\x80\x9f\xc8\xfa\x38\xef\x95\x6e\x96\x83\xbd\x5b\x49\x71\x95\xdb\x6e\xc8\x47\x58\x3c\x92\xa3\xa8\x04\x26\x54\x05\x6e\xb7\x67\x6a\x92\xb5\x9a\xa3\xfd\x78\xed\x1e\xb7\x51\x1a\x6b\x3a\x5d\x53\x93\x73\x98\xa8\x55\xb5\xae\x7d\xef\x1a\x51\xfb\x6c\x5d\x63\xf5\x0b\xd0\xda\x63\xb5\x96\x1d\x42\x40\x61\xe6\xd5\x0e\x9a\x84\xc7\xc9\x1c\xd2\x2d\x42\xbe\x50\x70\x85\x88\x6f\x2d\x66\x0e\xd7\x17\x1a\x5f\x41\x1c\x3d\xe5\x0e\xfa\xad\xd2\x8b\xda\x00\x1e\xe2\xf1\x54\xdd\x2f\x68\x03\x3f\x54\x70\xfa\x21\x5b\xfb\xd9\x3b\xf7\x59\x7c\x44\x5f\xd0\xf6\xcb\x25\x59\x7f\xb9\x7c\x9d\x6c\xcb\xed\xe4\xeb\xf0\x72\x49\x1a\x2e\x17\x1f\xbe\x43\x5b\xef\x91\xe0\x02\xf1\xe5\x7f\xa7\x81\x55\x41\x2d\xa2\x4e\x9d\xa7\xfd\x8d\x3c\xac\xf1\x34\x4d\xf8\xe2\xfa\x92\x8a\xd0\x13\xb1\x64\x5f\x2c\xb3\xb3\xa5\x7f\xd9\x8c\xa0\xa6\x44\x2d\x57\x38\x61\x9d\x4e\xb5\x22\xf0\xc5\x82\x6c\x0d\xec\x0b\x4d\x10\x1a\x6c\xc9\x7e\x43\x63\x9a\xf0\x84\x3e\x91\x5b\x84\xb0\xc1\x96\x7d\xd3\x7f\xa0\x15\x6e\x5a\x31\x8e\xdd\x08\x75\x3a\x5b\xdc\xcf\xc3\x87\xd0\xc4\x0c\x93\xb2\x5c\x36\x81\x0a\x80\x6c\xfb\xcd\xff\x3d\xfb\xc6\x26\x0c\x5c\xbd\x8a\x00\xf3\x42\x59\x28\x7a\x03\x2f\x0e\xaa\x4f\x60\xc2\xde\x3f\xe0\x0c\x62\xd2\xe9\x88\x3b\xe7\xab\x7c\x31\x2e\x04\x7d\xcd\x2e\x8f\xf8\x84\x7e\x26\x8d\x01\x55\x8a\x69\xd4\xd8\x2b\x77\x2f\xee\x8e\xb3\xeb\x06\x2b\x8b\x73\xfc\xb1\xf5\xab\xf5\x0f\x35\x3e\x92\xf4\x9e\xcb\xef\xc5\x73\xa9\x3d\x27\xf8\x50\x8e\xba\x5c\x55\x15\xe6\xcf\x1f\xca\x51\xd5\xa8\xa3\x93\xff\xac\x65\x1f\x6c\x93\xb6\x39\xc7\xe8\x46\x7d\x86\x65\x48\xb9\xb7\xbc\x44\x03\xdf\xde\xb6\x4c\xa4\xab\xcd\x78\x93\x08\xdc\x33\xa9\xc6\x29\x36\x08\x46\x7d\xb9\xaa\x9a\x2a\x6c\x47\xf7\x75\x9d\xaa\xd9\x26\x84\x33\x97\x6a\x49\x0d\x63\xab\xea\x91\x31\x31\x19\x01\x2b\x99\xd8\x03\x33\x56\xd3\xa8\x1c\xb0\xd6\x86\x0c\x9c\xc2\xdc\x30\xac\x7e\x4d\xb6\x0d\x90\xe3\x5d\x64\xa3\xde\x3f\x52\xb8\xa8\xdf\xd3\x8d\x8f\x8d\x63\x4a\x93\x43\x38\x0a\x78\x6a\x89\x8e\x96\x1a\x7e\xa4\xb5\x4c\x15\x95\x1c\x8a\xf8\x27\x10\xe2\xbf\xa2\xe4\x5e\x71\x54\xfd\xff\x3f\x71\xef\xda\xdf\x36\x72\xe4\x0b\xbf\xd7\xa7\xa0\x90\xfc\x18\xf4\xb2\x45\x53\xc9\x3e\x7b\xce\x81\xa7\x87\x47\x63\xcb\x99\x99\x8c\x2f\xb1\x3d\x99\x24\x0c\x97\x0b\x91\x4d\xb1\x63\xb2\xc1\x01\x1a\xb2\x15\x11\xdf\xfd\xf9\x75\xf5\x1d\x68\x50\xb4\x67\xf6\xac\x5f\x58\x20\xd0\xf7\x4b\x75\x55\x75\xd5\xbf\x26\x78\x51\x73\x0d\xb2\x44\x3d\x58\xa5\xec\xfc\x12\xdf\x52\x31\x88\x7e\x6c\x8b\xd0\xd1\x44\x0d\xae\x7a\xf3\x5b\xa3\xcb\x8a\x8a\xd1\x08\x1f\x29\x85\xd0\xa6\xc1\x7f\x86\x36\xff\x15\x0c\xfb\xff\x4e\x63\x97\x74\x8e\x30\x7f\x4f\x15\x8c\xe5\x6f\xe9\x38\x5a\xa0\x2f\xbe\x33\x5c\x90\x5c\xdd\x15\x7d\x12\x3a\x84\x36\xb6\x97\x80\x1f\xe8\x7d\x95\x16\xca\xf6\x51\xa1\x1c\x54\x0e\xe5\x60\x84\x04\xa9\x66\x74\x8e\x53\x46\xc4\x78\xb9\xc9\xcb\x67\xc5\x8a\x5e\x89\x74\x82\xd0\xd7\xe4\x3f\xfe\xbf\xe1\x90\x7d\x45\xfe\x0f\xdc\xb3\x91\x52\xa4\x85\xe4\xf6\x41\x2f\x57\x1a\xd0\x2c\xc9\x98\x08\x5f\x89\x04\xa6\xad\x0f\x69\x4b\x61\xec\xf0\x3a\x88\x61\xd5\x60\xaa\x2b\x22\x9c\xda\xf3\xec\xef\x74\x56\xcd\x09\x7f\xda\xae\xa0\x6d\xba\xc9\xe5\xa6\xff\xa3\xe6\xae\x38\xae\x91\xfc\x5d\x10\x3e\xab\xe7\x58\xcc\xf2\x39\xa9\x31\x48\x8f\xc2\xa0\x67\x11\xc2\x85\xe7\x49\x0f\xe5\xdf\x9a\xf2\x0b\x84\xc2\x0a\x0b\xec\x35\x4a\x1b\x5a\xcb\x0a\x64\x91\x1e\x1c\x18\x4c\x10\xd3\x30\xaa\x48\x8e\x3f\xe3\x35\x3d\xb3\x68\xaa\x4a\x1f\xcf\x50\x63\xe3\xa5\xe6\x0d\x4a\x67\xd4\x36\x2b\x45\x73\x4c\xb1\x8d\x45\x60\x87\x4c\x08\x5f\x3d\x43\xfa\xd6\x00\x48\xe9\xc3\x61\x2a\xd7\x0a\xee\x4b\x44\xce\x2f\x11\xe6\x87\xc3\x9f\xa9\xe1\xc5\xff\x4a\xb1\x22\x9f\x16\x68\x4e\x52\x51\x39\x6d\x33\x31\x47\x67\xb0\x4a\xbd\xf9\xe4\xb6\x31\xad\x61\x03\xae\xb6\x23\xb5\xd3\x29\xcd\xd2\x38\x49\x77\xfe\x1b\xe7\x7f\x52\x83\x27\x3b\x8a\x7d\xcc\xbe\xb0\x06\x1a\x62\xf7\xd1\xb3\x55\x21\x73\xa5\x22\x0e\x2b\x98\x0a\x84\x08\x21\x2f\x74\xd5\x8e\x78\x1c\x0e\x82\x90\x0e\x49\xd1\xe0\x99\x2d\xd4\xc0\x6e\x0b\x1e\x38\x49\xd2\xaa\xbe\x01\x3c\xb6\x41\xb1\x1e\x24\x23\x3e\x4a\x50\x62\x8c\x02\x3f\x6e\xd8\x96\x7a\x4e\x5f\xd6\x44\x86\x1f\x0e\x49\xaa\x7d\x1f\x50\xa2\x0d\x2a\x70\xb8\xd4\x14\x2f\x89\x02\x53\xb1\x52\x78\xec\xab\x27\xb2\xea\x8b\x00\xd9\x4a\xaa\x42\x2a\x74\xac\x39\x79\xe8\x18\x63\xde\x42\xd8\x03\x6f\xe5\x0e\x87\xbc\x59\x82\xab\x61\x89\x1e\x94\xb1\x15\x13\x6d\xe7\x5f\xed\x09\x70\x16\xf8\x3d\x78\x4a\x42\xe1\x59\x95\x46\xdc\x41\x24\x47\x72\xae\x02\x11\x29\x30\xb7\xe1\x90\x9e\x13\xf2\x4d\x51\x6c\x69\xce\xd5\x8f\xd7\xfa\x26\x5d\x3e\xbf\x02\xb6\x48\x3d\x43\x55\xea\xf1\x79\x2e\xa8\x7a\x52\x7b\x46\xb9\x58\x08\xf2\xe0\xa1\xa7\x54\xa2\x7d\xd1\xc2\xc1\x02\x04\x82\x2e\x18\x12\x3f\xa3\x73\x30\x76\x60\x53\x26\x14\xe1\x60\x58\xbe\x44\x19\xfc\x8f\x99\xe7\xdc\x60\xca\x83\x00\x54\x81\xa5\xa2\x1c\x77\xbb\x24\xf5\xbd\x8d\x07\x7a\xe2\x7c\x69\x42\x6a\x13\xbd\x35\x01\x53\x46\x98\xc9\x98\xab\x67\x3e\x85\x95\xf2\xb1\xcc\xf7\x92\x04\xe6\x28\xf3\x98\xc2\xad\x6a\xa1\x76\x1f\xc4\x5b\xbc\x44\x0f\xac\xe5\x92\xcd\x8c\x7a\x0e\xba\xdd\xba\x92\x82\x9c\x6a\xb4\xec\x25\x5d\xbb\x0f\xb2\x63\xc3\x61\x5a\xab\x5e\x6b\x44\xa2\x58\x67\x72\x2c\x30\x45\xde\x4e\xae\x87\xc3\xda\x6f\xcd\x73\x3a\x4d\x53\xde\x3e\xf1\x10\xb2\xaa\x7d\xbf\xab\xe6\x25\xae\xcd\x13\x92\x8f\x95\xe9\x0b\xb7\xaa\x39\xfb\xd4\xca\x5f\xd9\xfc\xea\x09\x65\x2e\xa5\x7b\x89\xb9\x1c\x52\xb0\xa1\x66\xb8\xc6\x39\x74\x21\x9f\x89\x39\x61\xb8\x96\x7f\xb4\xd5\x45\x96\x6e\x87\xc3\xad\xc7\xf9\x7c\x4d\x26\x87\x43\xa2\x76\x07\xe5\xb9\xc3\x40\x63\xb4\x4a\x14\x74\x45\xb2\xa3\xe5\x6d\xe7\xfd\xb4\x3b\x0d\xd6\xdb\x78\x26\xe6\x87\x03\x75\x4b\x09\x7a\xb4\xcb\x3f\x28\x94\x38\x79\x48\x19\xcf\x9c\xf6\x17\x8e\xf4\x65\x1d\xc3\x35\xca\x96\xc3\xe1\xd2\x6f\xeb\xc5\x65\xbb\x56\x58\xd4\xb0\x74\x71\x05\x53\xab\xeb\x95\x74\xd9\x5e\x32\x32\xa7\x7e\xe2\x7e\x00\xff\x0a\xe1\x2d\xd1\x20\x57\x70\x61\xab\x3c\x29\x58\x3b\xc6\xf5\x52\xae\xee\x42\xa4\x72\x7b\x2c\xe7\x68\x9a\x6e\xc9\xf9\x04\xd7\xb3\xe5\x9c\xc0\xee\x5a\x02\x24\xe7\x43\x83\x50\x06\x2f\x73\x7b\x92\x6c\x01\xe7\x77\x51\xd5\x7b\x5a\x92\x12\xc2\xb9\x23\x5c\x7b\x3d\x2c\x44\xca\x10\xac\xe9\xda\xec\x82\x1a\xe7\x66\xee\xcc\xcd\x33\xcc\xa3\xef\xab\xd3\xa1\x11\x10\xfc\x6f\x53\xc0\x59\x89\x8b\x8e\x9b\xa1\x95\x22\x18\x50\x12\x36\x9f\xa6\x05\x91\x7f\xb1\x20\xf2\x25\xca\x1e\x83\x36\x01\x3b\xfd\x69\x2a\x48\x6e\x8b\x47\x59\x6a\xad\xdf\x0a\x42\x65\x31\xf8\x41\x66\xcb\x84\x06\x15\x28\xbc\xa3\x77\xdd\x6e\x33\x9c\xf8\x9e\xa5\x00\xf7\x2d\x05\xa4\x18\x20\x1b\xa6\x54\xb3\x01\x78\xae\x70\xcb\x2d\x76\x3c\x0c\x87\xa9\xae\xca\x9c\x7e\xd6\x37\x4a\x2e\x2f\xbc\xa4\x08\xb7\x12\x58\x50\x34\x48\xf0\x11\x45\x49\x18\x3b\x5a\x30\x43\x78\x7b\xb4\x60\x86\xf0\xc2\xd7\x20\xec\x85\x2f\xaf\xc9\x59\xdf\x92\x87\x06\x2f\xe5\x7f\xeb\x96\xca\x66\x23\x99\xec\xbd\x19\x6a\x7b\x27\xb8\xf3\x8d\xca\x69\xb8\xca\x70\xd7\xc6\xc1\x11\x49\x0d\x1f\x6b\xca\x59\x9b\x07\x03\x88\xd1\xad\xcb\x1d\x4f\x3b\x79\x50\x2a\xbd\xe9\x40\x1e\x49\x58\x3f\xb3\x19\x9d\xc3\xe5\x5a\x45\x26\x4f\x2b\x77\x39\x56\x29\xa1\x76\x49\xc4\xac\x9a\xe3\x9a\x70\x9c\xae\x49\xba\x25\x4b\xe4\x91\xd4\x95\x98\xd6\x36\xc0\x44\xba\x45\xd3\x5c\x64\x69\x6d\xc3\x57\xa4\x5b\x84\xb7\x46\x0f\xca\x68\x85\xb2\x2d\x3a\x27\x24\x17\xb2\xe4\xb5\x62\x05\x37\x72\xef\x16\xa0\xa4\x7b\x29\xc9\x15\x64\x94\x3c\x6e\xf8\x26\x5d\x23\xbc\x27\x95\x48\xfb\x48\x1e\x5e\x03\x4d\xc1\x2b\x48\xd4\xa1\x7c\xe6\xf3\x1a\xad\xdb\x54\x62\x03\x67\xa0\xba\x68\xdc\x20\xbc\x95\x12\xc6\x06\xaf\x67\x9b\xb9\x1e\xff\x3d\x5e\x21\x74\xd6\xc9\x97\x18\x0e\x3a\x01\x32\xe3\xf8\xfc\xb5\x7d\xd4\x6e\xae\x4b\x05\x2b\x5b\x0d\x87\x29\x4d\xcd\x0f\x6f\x72\xf1\x72\xbc\xf8\xc8\xc4\xa6\xa8\x85\x24\x9c\xe6\xd9\xba\x5b\xef\x24\x71\x15\x78\x0d\xd8\xc1\x14\x6f\x8c\x7f\xe5\xc6\xdf\x79\x6c\x0d\x63\x63\x54\xc0\x89\x24\x09\x7b\xb2\x91\xbb\x5b\x16\xda\x6a\xfc\x1e\xa9\xe1\xdf\x91\xed\x6c\x3f\xc7\x2b\xb2\x9c\xed\xe7\x4f\x77\xc3\xe1\xce\x3f\x32\xef\xc5\x53\xb4\x23\x69\x4d\x80\x70\xed\xe0\x88\x47\x40\x61\xf0\x8a\xd4\xca\x98\xcd\xd9\x71\xee\x3c\x76\x63\x75\x38\x78\x1c\x6d\x94\x2e\xed\xd1\x14\x68\xc2\x5e\xd1\x8a\x15\xca\xf4\x4f\x0a\x2d\x42\xb8\xe8\x62\xb3\xe7\xc7\xb1\xd9\x23\xdb\x7f\x25\xc6\x2b\x2a\xe8\x52\x68\xd8\xf0\xe1\xb0\xfd\x26\xdd\xa3\xe1\x70\x1d\x42\xb9\xa7\x72\xce\xf1\x4f\xd0\x9c\x1d\x5e\xe1\xb5\xb3\x39\xff\xfc\x56\x9d\xf3\xbe\x96\x29\x20\xde\x37\x79\x29\x58\xbe\x85\x96\x05\x6f\x52\x8a\xd7\x06\x71\x60\x25\xfa\x2d\xfc\xb5\x06\xc0\x6d\x34\x63\x7a\xaf\xc3\x58\xee\x84\x05\x11\x00\x80\x6a\xef\xa6\xa0\x15\x0c\x53\x2d\x3c\x03\xd9\x6d\xf5\x66\x8a\x59\xf2\x1b\x20\x05\xb4\x89\xbb\x17\x39\xfb\xa5\x37\x2c\x9e\xf7\x8a\x6c\x4a\x2a\x7c\x07\x9f\x5d\x37\xda\x8c\x52\x20\x75\x8d\x4f\x38\x99\x75\xf9\x60\x31\xe5\x59\x2a\xc2\xd8\x35\xa9\x5f\x1a\xf5\xc6\xee\x70\x70\x21\xb8\x63\x26\xd9\xc5\x9e\xf2\xb6\x05\x83\xa6\xd4\x5a\x2b\xd8\x19\x05\xae\x47\x41\x18\x87\x21\x01\xb6\x07\x7c\x56\xfa\xa3\x50\x02\xf7\x03\x17\xf3\x21\x9c\xe7\xa0\x35\xbb\xd3\x94\x69\x43\x69\x7f\xf2\x3c\x32\xdb\x7e\x11\x4c\xb2\x1e\x4c\x60\x1e\xbc\x17\xc6\x8c\xdd\x7c\x36\x91\x50\xf4\x6f\xef\xd9\xb0\x80\x3b\x21\xb9\x3e\xad\xd2\x0f\x2c\xe6\xf7\xfb\xed\x7d\xcc\x34\x02\xce\xce\x99\xcc\x30\xc7\xe7\x97\x6d\x3b\x7b\x99\x4b\x2f\xfc\x47\x33\x77\xd5\x8c\x72\x43\x7b\xd6\xea\x71\x60\x4a\x61\x81\x29\x85\x83\x4a\x65\x6b\xf0\x08\xb0\x44\x8f\xb6\x0d\xe8\xd4\x51\x6c\x14\xb4\x9d\x30\xe7\xbf\x8f\x86\x39\xff\xbd\x1f\xe6\xfc\xf7\xf3\x4c\x2b\x58\x54\x14\x8d\x30\xf8\xdf\xe5\x99\x81\x17\x85\xb6\x10\x87\x16\xac\xb7\x18\xb0\x89\x30\xf6\xca\xd5\xd8\xde\x18\x55\xc5\x8e\x46\xc1\x38\x0c\x68\x2d\x72\xde\x7b\xa9\x76\x9e\x89\xfb\xa7\xb4\x83\xf3\x19\xf3\x10\x7b\xb8\x47\xfc\x2f\x0c\xb5\x88\x6f\x06\xbd\x44\xd5\x8c\xa1\x5f\xbc\x35\x6c\x9f\x2d\x91\xe2\x98\x85\xed\x01\xa7\xe1\xee\xfd\x93\x3f\x8d\xf6\x3a\x0e\xb3\x2f\x8d\x57\x6f\x26\x52\x89\x4c\xbf\x7c\x35\x14\xe1\x6a\x38\x2b\xfc\xb5\xe0\xef\x6a\xe5\xb3\xe9\x2b\x54\x83\xcf\x7a\xfc\xb8\x6f\xdd\xa4\xb4\x80\x72\x30\xb5\x02\x51\x58\x4e\xc4\x3c\x1d\xc5\x74\x49\x95\xa0\xd6\xb8\x4b\xca\x26\xb6\x10\x1c\xe7\xd3\x1e\x7c\xab\x7a\x1a\x40\x6d\x28\x69\x5b\xbd\xc3\xd1\xe4\x5d\xb0\x41\xc0\x5d\xd5\x83\xc3\x61\x62\x81\x57\x60\xdb\x68\x4f\x7e\xb5\xb2\xd4\xb2\x29\x11\xf6\x6f\x61\x94\x4e\x4a\x47\xae\x1c\x84\x8c\x2a\x87\x41\x5f\x89\xd4\xfa\xfd\xb8\x4e\x7d\xfe\x99\x9e\xb6\xcf\x6a\xa2\x98\x98\x16\x6f\xa1\x41\xa6\x57\x22\x36\x5a\x5c\x2d\xa2\x7b\xf1\xdf\x7a\xcf\xef\xe4\x4b\xc2\x4f\xbe\xd6\x8f\x01\x0a\xba\xeb\x59\x65\xa5\x94\x28\x8d\x1a\xd8\xec\xb2\xdd\x7e\x4b\xe5\xea\xa6\xab\x71\x72\xec\x4a\xfc\xcb\x8b\xa9\x7e\x41\x31\x4d\xfa\x33\xc2\x77\xfd\xe3\xec\xe4\xf1\xcf\x1d\x69\x7c\x2b\x90\x77\x85\x2f\x5b\x2a\x09\x93\xba\x07\x2c\x31\x3b\x36\xde\x4d\xfa\x9c\xfa\x78\xed\xa2\xc5\xd8\xb4\x41\x4a\xb5\x96\x16\x68\xf7\x06\xe4\x58\xc9\xcc\x69\x1d\xf8\xe1\x60\x9d\x75\x72\xc6\x69\x09\x96\x2a\xb2\x39\xa3\x24\x4b\x46\xa9\x80\x16\x1d\x0e\xce\xde\x80\xeb\x4b\x9a\xb4\xc4\x0f\xca\x08\x30\x33\xe1\x65\x30\x37\x3a\xda\x4c\xe5\x83\xe7\x46\xd9\xf4\xdf\xfc\xf7\x2e\x57\xd9\x69\x30\x4a\xf1\x31\x31\x2f\x81\x29\xf2\x2c\xa6\x7f\x89\x79\x4a\xbf\xd5\x36\x8c\xa0\x6c\xc0\xa3\x46\x1d\x1e\x2e\xf1\xc9\xa6\x17\x54\xc7\xd3\x55\xd6\x0f\x5e\xa0\x82\x1f\x28\x8e\x44\x32\x78\x2e\xdf\x76\x42\x1e\xbc\x90\x6f\xfd\xb0\x08\x2b\x1c\x0b\x9d\xb0\xc3\xad\xf8\x0a\xf7\xd8\x04\x5e\x88\xb0\x56\x72\x17\x7d\x4b\x35\xa2\x47\x37\x64\x43\xd7\x91\xe0\x4b\x0d\xdf\x71\xe5\x5b\xba\x53\xf4\xf0\x4f\x6d\xc8\xc2\xc1\x21\x2a\x6e\x07\xcf\x4d\x1a\xd4\x34\xd0\xc2\x30\xc8\x84\x50\xe3\xa4\x43\x50\x94\x7a\x7c\x08\xd7\x0f\x7e\xc0\x8a\xf8\x8d\xbb\x76\x7f\xed\x48\x0d\xe5\x94\x67\xa5\xac\x4f\xce\xe9\x3f\x65\x71\x3a\x1c\xc6\x51\xd3\x1a\xcc\x0d\x77\x6a\xe3\x68\x14\x32\xaf\x89\xaf\x11\x6f\x43\x87\x8d\xf8\x43\x94\x8d\xf8\x83\xcf\x46\xfc\x61\x9e\x31\x7a\xd6\x01\x84\xf2\x90\x9e\x32\xe7\x45\xe3\xc2\x17\x46\xe3\x7f\x54\xb2\x89\x9d\x60\x21\x3d\x1d\xb5\xb0\x4b\x0b\xc3\xc5\xc7\x82\x8f\x3c\x96\xf9\xa3\x19\xa7\x9e\x90\x26\x7f\xc6\x7d\x51\x50\xfe\x8a\x5b\xe1\x52\xd6\x14\x1f\x89\xad\xf2\xa7\xce\x47\x57\xd4\x6f\x71\x18\xbc\x65\x81\x5b\xb1\x5d\x7a\x2d\xdb\xe2\x56\xd5\x3e\xef\x7e\xa9\x8d\x94\x79\x34\x88\x43\x87\xdd\x06\xc3\x46\x63\x3f\x08\xeb\x87\xb7\x61\x35\x7e\x1d\x13\x46\x66\x4d\x18\x0b\x22\x7c\x45\x7f\x15\x2a\x3e\x71\x81\x14\x87\xdd\x0a\x81\xf3\x11\xfb\x11\x72\xae\xb1\x0d\x9c\x13\xa3\x2c\xca\x5e\xaa\x39\x73\x71\x76\x7e\xa6\xd8\x85\xdf\xf9\x49\xfd\x30\x71\x79\xba\x25\x9c\xff\x64\xe8\x52\x34\xa8\xcf\xb7\x38\x12\x00\xe8\x47\x1c\x0d\x15\xf4\x0d\xee\x09\x2c\xf4\x1c\x77\x42\x10\xfd\x0b\x47\x31\xab\x71\x1c\x25\x1e\xc7\x23\x20\xbd\xc5\x9d\x50\x49\x3f\xe1\x20\x94\xd2\xcf\xd8\x0b\xb2\xf4\x17\x1c\x84\x5f\xfa\x1b\xf6\x23\x33\xbd\x93\x03\x15\xc4\x6d\xea\x6a\x43\x7a\x62\x46\xa7\xa1\x57\xad\x08\xa1\x5b\xfc\xbb\xef\x76\xfc\xe5\x14\x01\xfe\x6d\xc7\x35\xd3\x2d\x8a\x20\xb0\xd4\x82\x62\x3f\xf8\xd4\x6b\x8a\xc3\xc8\x54\x57\x34\x04\xc5\x88\x1e\xa9\xda\x6b\x53\x6d\x01\x13\xee\xea\xbd\x2d\x99\x7c\xb0\x8f\x26\x3a\xd6\x4b\xf9\xc6\xc5\xce\xfa\x9b\xfc\xe9\xc2\x6a\xfd\x45\x9f\x03\xde\xfa\xe8\x8e\xdc\x43\x83\xb9\xdb\x2e\xb8\x24\xea\x6e\xe9\xf7\x11\x57\x8e\xe1\x30\xa4\xb8\xbe\x6c\xa8\x22\x19\x4f\xfc\xb2\xe4\xdb\xb6\x54\x26\x66\x52\x22\x9b\xab\x83\x47\x09\x67\x46\xd1\xa3\x8f\x9b\x68\x63\xbd\x41\x32\x4a\x8c\x88\x17\x97\x98\x8a\x2c\xfd\x31\x6d\xc9\xe4\x52\xb4\x0a\x24\x47\xe4\x44\xab\x3e\x2c\x20\x52\xce\xf8\x5c\x19\x45\xea\xc8\x8c\x0d\xd2\x7e\xd5\x9d\x40\x67\xaf\xf4\xf9\x61\xa9\xff\x96\x9e\x75\xc2\xa5\x2d\x65\x22\x15\x4a\x6d\x25\x70\x18\x63\xad\x87\x2b\xb9\x17\x7a\xf7\xef\x3a\x21\xac\xad\xcc\xf8\xa8\x6a\xe1\xeb\xcb\xa9\xb8\xb8\xcc\x26\x52\x44\xbe\xf4\x55\x0c\x17\x97\x71\x25\x03\xa8\x9a\xb8\x3c\xdc\x30\x55\x27\x79\xfb\x4c\xfb\x55\xe9\xb1\xa4\xc3\x9a\x22\xe7\x44\xe0\x8a\xcc\xe6\xb8\x8e\x8d\x48\x65\x15\x93\x67\x11\x47\xdd\xd1\x88\xa1\x57\x54\xc1\x08\xd5\xa8\x45\xd8\xbd\x2b\xaf\x02\x57\x08\x17\x70\xf2\xba\x20\x78\x7b\x39\x21\x9d\x38\x79\x77\x02\x87\xb1\xf4\xfc\x46\xbd\x53\x60\xb4\xad\xd8\x7b\x57\xf6\x15\xf9\x80\x63\x61\xfb\xde\xe3\x58\xdc\x0f\xec\x07\x00\xd4\x12\x7a\x2c\x4e\xa0\xfd\xe4\xc5\x13\xec\x59\x3b\x37\x66\xed\x98\x20\x84\x71\x8e\x24\x81\x5b\x8c\x84\xf1\x01\x9f\xc6\x4e\xfb\x77\x80\x21\xeb\x0c\xb5\x1f\x7c\x8e\x76\x82\xdb\xfc\x6e\x9c\x87\xfd\x7e\x38\xfc\x1e\x74\x31\x57\x46\x8c\x43\x98\x1b\x80\x2c\xad\x7a\x95\x4b\x44\xe3\x3c\x28\xad\xea\x8c\xcf\x9b\x90\x63\x16\xe8\xe1\x83\x92\x98\xc2\x88\x2a\xf8\xa5\x5f\xb0\x2d\x0c\x53\x9a\xa2\xa6\x69\x40\x7d\x99\xc5\x3a\x07\xd6\x4b\x20\x2a\x56\x54\x9c\xd2\x41\xb0\x64\xcc\xf8\x70\xd8\x56\xfa\x91\xef\x71\x49\xbe\x07\xd5\xcc\xdf\x31\x23\xdc\x93\xee\xce\xbe\x27\x46\x5d\x56\x1a\x58\x60\xe7\x6a\x65\x87\xa6\x40\x58\x73\x51\xc8\xf5\x46\x33\x21\x72\x14\xca\xa0\xd2\xa0\xc7\xa5\xf6\xb1\x80\x17\x76\x9b\xd9\xae\xcb\x45\xe0\x85\xa5\xfc\x2b\xc5\x91\xc8\x95\x7f\xd7\x24\xcc\x85\xb7\xf4\xd7\x55\xbf\x65\xdb\x04\xff\x95\xda\x7d\x89\xdb\x11\x33\xb9\xc0\xed\xa0\x9a\x91\xe5\xfa\x27\x7a\x38\x80\x19\xda\xdf\xe9\x8c\x82\xbd\x70\x2b\x30\xe7\xf7\x14\xc7\xe2\x77\x0a\xdc\x13\xec\x53\x08\xdc\x0d\x0c\x1a\xbd\x3f\x09\xec\xcc\xce\xf4\xa5\xf0\xdf\x41\x8d\xf6\x57\x8b\xe9\xfa\x57\xe7\xa3\x4f\x11\xbe\x44\x18\x1c\x85\xdb\xe6\x9e\xc3\x21\x44\x5a\x6e\xbd\x55\xf6\x3b\x91\xb7\xc4\xbb\xe1\xe9\x8f\x6f\xda\xdd\x4b\x7f\xa2\xfa\x94\x7c\x34\x0b\x45\x0f\x7f\xa2\xe4\xfc\x9c\x36\x0d\xc2\x36\xfa\x2c\x5c\x81\x3d\x81\xfe\xc4\x62\xd0\xaa\x10\xb3\x61\x08\xd7\x4e\xb0\xd6\xd7\x3f\xbd\xba\x7e\xeb\x88\x91\xd1\xc5\xc4\xe6\x96\xc2\x36\x86\x06\xb7\xd3\x00\xf6\x0b\xec\xd4\xc6\x22\xf5\xa8\x92\x41\xaf\x61\xd1\xab\xe1\x5d\x82\xfc\x4e\x94\x45\x2d\x18\xbf\xed\xef\x86\x49\xb0\x65\x37\x4f\xb6\xc5\x32\x97\x35\x3e\xc9\xf7\xec\x78\x02\x5e\x70\xba\x30\xbf\x8e\x27\xdd\xe4\xd5\xe6\xd4\xa4\xac\x12\x45\x79\x7f\x62\xea\xbc\x16\xc5\xf1\xa4\xd5\x7d\x25\xe8\xee\xc9\xad\x14\x47\x72\x41\x01\x6a\xb3\x2c\xb6\x5b\x5a\x1e\x4b\xee\x52\x2d\xd6\xc5\xd1\x94\xab\x6a\x7b\xec\xb3\x7c\x75\xbc\x2a\x48\x71\x2c\xc1\xcf\x35\x2d\xef\x17\xfb\xbc\xcc\x77\xf1\x29\x03\x60\xd2\x25\xad\x9e\xe8\x97\x8f\x27\x7a\xa4\xf3\xf9\x72\x13\x6f\x11\xfd\x24\xbc\xa1\x39\x29\x76\x31\x58\x44\xb4\xb7\xc4\x37\xf5\xf2\x83\xd6\x43\x11\x3a\x7e\x0b\x2d\x7a\xa7\x1a\xa8\x7f\x33\x7e\xeb\x5e\xfc\x59\x8e\xc0\x1b\x18\x00\x93\xdc\x66\xb3\x0f\xcf\xdf\xfd\x40\x14\x42\xaa\x6a\x9d\x89\x0a\xaa\xe6\xfd\x99\x7b\x9f\x2f\xe5\x02\x8b\x7e\x23\x74\x7c\x55\x8b\xe2\x07\xbd\xa0\x08\x1d\x7f\xab\x96\xa3\xff\x26\xaf\x36\xde\x4f\x29\xcd\x7a\x3f\xed\xa3\xde\xef\x7d\xda\xaf\xe4\x07\xbb\x68\x5b\x67\x68\x0f\xb8\xbd\x71\x38\x90\xe4\xa9\xb7\x50\xbf\x31\x27\x16\xcc\x4f\x2a\xd8\xef\xf4\x89\x05\x97\xa7\x15\x1c\x8e\xef\x89\x65\xb3\x93\xca\xf6\xa7\xf2\xc4\x82\x8b\x93\x0a\xee\x2e\x9c\x13\x8b\xcf\xbf\xb0\x78\xbd\x66\x4f\xae\xa5\xb7\x84\xa3\xf5\x06\x7b\xe7\xc4\xba\xaa\x93\x7a\x64\x77\xe8\x89\xa5\xd6\x9f\x51\xea\x89\x45\x6e\x4f\x2f\xf2\xc4\x12\x97\x27\x95\xe8\xd1\xae\x13\xcb\x5d\x9f\xdc\x52\x47\x24\x4f\x2c\x7a\xf3\x19\xe3\xfa\x79\x25\xef\x4f\x2a\xd9\xa3\xfb\x27\x96\xbb\xf2\xca\x8d\xf1\x34\x91\x53\x29\xc2\xe0\xec\xa8\xc8\xb7\x2e\x2e\xbf\x4b\x0c\xf9\xbd\xc3\x1e\x54\x07\xd1\xa3\x2f\xc6\xea\xa9\x0b\x8e\xe0\x6c\xb3\xe4\x54\x5b\xff\xa4\x0f\x71\x1b\xc4\x6c\x96\xfc\xec\xad\x8c\x39\xf6\x7e\x41\x20\x30\xbc\xf8\x79\xff\x9c\x6e\xe9\x6d\x2e\xa8\x7d\xa1\x94\x88\x2b\x5f\x3c\xf3\x82\xdb\x29\xcc\x29\x30\x80\x36\xa1\x7c\xd1\xd3\x54\xf2\x9c\x5e\x59\x28\x2d\x55\x80\x95\x5b\x2a\x90\x8a\x69\xdb\x60\x21\xc5\x6b\x26\x4b\x7c\x5f\xc0\xec\x67\x2d\x91\x8d\x6a\xdd\x83\xcb\x09\xe2\x53\x22\xf2\xf2\x96\x0a\x40\xd1\x2a\xc6\x9d\x52\x0e\x87\xf0\x65\x9f\xe5\x17\x77\x8a\x10\xa5\xa7\xa0\x60\xa5\xc8\x67\xcc\x57\x84\x30\x17\xa9\x55\x8b\x70\x85\x32\xc2\xdd\x97\x74\xcd\x3e\x41\x8d\x92\xcd\xbf\x2a\x6f\x91\xb9\x05\x42\x0d\xd6\x77\x18\x5f\xde\x2d\xbf\x00\xd9\x23\xfd\xfb\x27\xa6\x5d\x3b\xff\x1f\x77\x48\xee\x02\xb3\xc8\x88\x3b\xbd\x7b\xf6\x46\xc8\xce\xfb\x3b\x43\xef\x85\x15\xbd\xa9\x1d\xc7\x78\x53\x16\x1f\x2b\x5a\x5e\x50\x7e\xc7\xca\x82\xcb\x76\x1e\x67\xc0\xe5\xb6\x78\x7c\x57\xb8\x06\x3f\x28\xf3\xc0\x2c\xa2\x91\x1e\x0e\xe9\xd8\xde\xc6\x43\xe9\xc6\xab\x36\x7c\x5b\x79\xee\x2b\x5c\x9b\x1b\xea\xf1\xe3\xbe\x40\x8f\x5b\xd9\xb2\x87\x06\x5b\x59\x21\xe3\x63\xf3\x88\x17\xb7\xa0\xb5\xda\x74\xc9\x8f\x91\x79\xe5\x57\x35\x05\x36\x17\x6a\x9a\xc7\xc7\x3c\x94\x4e\xba\x74\x09\xc4\xcb\x96\x34\xd9\x43\xb3\xc2\x79\x2a\x6b\x2e\xd8\x8e\xfe\xea\xf3\x66\xf8\xf7\xd6\xfc\x39\x47\x23\x4f\x58\xed\x98\x72\x29\xc8\x40\x33\x66\x66\x2f\x49\xfa\x57\x52\x41\xbf\x0b\x66\x23\xe9\xb5\xf2\x62\xce\xca\xab\x20\x93\xa7\xc5\x57\xe2\x69\x31\x1a\x21\x36\x2b\xfc\xbd\x53\x78\x6e\x27\x7c\x2c\xca\xfb\xef\xf8\x5d\xf1\x81\xa2\x34\xc7\x14\xc2\x74\x38\xcf\xa3\xce\x75\x9c\xbe\xff\x45\xca\x90\xcc\xbc\xd2\x73\x2c\x77\xac\x79\x05\x67\x37\x52\x2d\x49\xb9\xaf\xd6\x30\xa0\xa7\x2d\xe7\x8b\xe4\x37\x4f\x12\x40\xdb\xb2\xa4\xf8\xf7\x68\x9a\x16\x04\xc2\xab\xeb\x77\x97\x16\x43\xf0\x37\x09\x42\x16\x30\x36\x81\x9c\x1c\x5c\x5a\xaf\x44\x6a\x49\xf8\x25\x18\x8c\x93\xc2\x65\x47\x98\x8f\x48\x31\x62\x38\xb7\xd7\x0c\x29\x1f\x91\xe4\x37\xc9\x28\xd7\x5e\xa0\xb2\x64\x94\xf1\x11\x61\xa3\x12\x7b\x5e\x58\xcb\x00\x4b\x11\x97\x44\x0d\x8e\x29\xdb\x58\x53\x19\x7d\x5b\x92\xa8\xbb\xc6\x34\x79\x02\x4f\xb3\xc9\x5c\x05\xaa\x7f\x92\x8c\x4a\x68\x86\xac\x54\x3e\x35\xa0\xd7\xd0\xcc\x3c\x5c\xe0\x6c\x95\xaa\x43\x8e\x2a\xfc\x5e\x7a\x54\xab\x18\x6b\x0e\x81\x7e\x12\x94\xaf\xd2\x07\xbb\x2b\x73\xb7\x2b\xb5\x22\x20\xcb\xc7\xfa\x09\x2b\xfb\x86\x2c\x1f\x7f\x64\x7c\x55\x7c\xc4\x75\x45\xcb\xab\x5b\xca\x45\x96\x8f\xed\x33\x5e\xe6\x7c\x49\xb7\x86\x87\x11\xf5\x3e\x3b\xbf\xc4\x65\x51\x88\x1f\xdf\xfe\x90\x25\x4f\x12\xac\x8c\xae\x3a\x47\x81\x22\x35\x3a\x21\xee\xb9\x3f\x20\xd4\x35\x90\x11\xea\x55\x5b\x10\x6a\x1b\x9a\x13\x3a\x5e\x15\x4b\x58\xaa\x2f\x8b\x15\xc5\xb5\x94\x36\xa1\xf5\x78\x4d\xa8\xad\x64\x43\x12\x5e\x70\x9a\xe0\x3d\x39\xbf\xc4\x2b\xbb\xee\x5e\xd4\xdb\xad\x5a\xa1\x25\x1c\xe0\xd5\xb8\xaa\xf7\x40\x39\xf4\x08\xab\x1b\xd7\x69\x2a\xc8\x36\x5d\xe3\x12\x61\x08\x40\x3c\xdd\x90\x44\x37\x21\xc9\x92\x27\xbf\x91\x0b\x6a\xd5\x5a\x8a\xe6\xf4\x7a\x27\x72\x41\xd3\x87\x7d\x2e\x36\x99\x68\x8c\x07\x0e\xf6\x4a\x40\x59\xba\x27\xe7\x3a\x06\x8f\xce\xa5\x1b\x05\x61\xc9\xb2\xb0\x61\x39\x5c\x36\xf2\x5b\xd8\x82\x35\x02\x07\xec\xa5\x6b\x1c\x3f\x1c\xd4\x0a\x5f\x0d\x87\xc9\x13\xb5\x4d\x38\x34\x38\xaf\x36\xc9\x91\xaa\x38\x42\x70\x67\xbe\xf7\x2c\x60\x35\x33\xdb\x78\x0b\x27\xa0\xcd\x76\xed\xc0\x5b\x33\x2b\x6e\xb9\xc0\x6b\x37\x75\x66\x71\x50\xec\x4f\x9a\x4a\x15\x4c\xa3\x5e\x80\xf0\x41\x3d\x37\xe8\x0c\x60\x2c\xb8\x89\xc0\x5e\x79\x84\xaf\xbd\x10\x13\x7c\x3e\x41\x98\xeb\x49\xf7\xf0\xc6\x44\xdb\x40\xcb\x98\x5b\x25\xb6\x7f\xc9\x88\xa3\xa7\xae\x06\x86\x13\xdd\xea\x04\x53\xe7\xa2\xfb\x08\xcd\x95\x84\x11\x33\xce\x04\xcc\x7e\x56\xa7\x89\xfd\x91\x20\xc9\x80\xcb\x51\xa8\xd3\x44\x3d\x25\x08\x57\xf6\x55\x65\x5e\xe9\xe9\xd1\xaf\xdd\xaf\x04\xe1\x82\xff\xb8\x5f\xe5\xc2\x7c\xf3\x7e\x26\x08\xaf\x8b\x72\x97\x9b\xd2\xec\x8f\x04\xe1\x8f\x6c\xbb\xd5\xc0\xa4\xdd\x3d\x79\xf2\x61\x02\xdc\x83\x05\xd2\x3e\x22\x2c\xf4\xe9\x24\x23\xac\x51\x59\xf3\x6d\x51\xec\x3b\x27\x72\xfc\x08\xee\xe5\xba\x62\xa7\x6c\x2f\x7f\x54\xb6\x49\x63\xc8\xc4\x64\x6a\xbf\xc0\x24\xfa\xa3\x05\xa7\xa0\xb7\x00\x5c\xbf\xe0\x8b\x37\x82\xae\xcb\xe8\x70\x50\x84\xd4\xf1\x34\xda\xb5\x43\xd6\xa1\x2c\x25\xbe\xcd\xf9\x6a\x6b\x6f\xd9\xc0\xea\x0a\x38\x25\xab\x80\x19\x1b\xe6\xc9\x2c\x9f\x38\x59\xd5\x89\x52\xe4\x8e\x31\x2c\x88\x45\xb5\x81\xe3\x45\xa8\xe3\x45\xc8\xe3\x05\x53\xf9\xa4\xce\x17\xb8\xa6\x6a\xcc\x5a\xf4\xc9\x72\xbb\x6f\xae\x6b\x63\xd9\x05\x42\x71\x67\x5c\xf2\x4a\xbc\xa3\x66\xdf\x34\xfe\x6a\x3e\xb1\x60\x63\x24\xa5\x5a\xf6\x68\x05\xfe\x9e\xf0\x6b\x30\x58\x24\xbb\xe2\x8e\x82\x71\x8c\x31\x99\x49\xfb\x27\x01\x28\xc5\x0d\xe3\x2b\x5d\x59\xe7\x5a\xcd\x0c\xf5\x8f\x6f\x7f\x48\x81\x5a\x84\x9d\x70\x4d\x43\xca\xbc\x23\x3d\xd6\x7a\x65\x8d\xac\x30\xb5\xe5\x2e\x85\x95\x92\xaf\x56\x61\x6b\x13\xd7\xcc\xa4\xaf\xe1\xa8\xf1\x76\x7f\xf7\xd6\x03\x46\xb2\xe9\xa3\x03\x47\x06\xaa\xc1\xb1\xf7\xdd\xcc\x9d\x06\x0d\x87\xba\x3b\xb1\x62\x4f\xeb\xd1\x29\x04\xa6\x73\x93\xd1\xaf\x98\xf8\xc5\x24\xa5\x45\x50\xd4\xd1\x72\x7e\xe9\x43\xa4\xda\xf1\xfe\xa4\xff\x5d\xc0\x7f\xff\x2e\xff\xbb\x37\x3f\xcd\xbf\xc4\x2e\xf4\x27\xb3\x4f\xf7\xf3\x27\xb7\xb8\xc3\x0f\x59\x43\x14\x72\xf9\x1f\xff\xf6\x32\x17\x9b\x71\x99\xf3\x55\xb1\x4b\xd1\x61\x82\xd3\xe4\x93\x3c\xe2\xe9\x54\x64\x7f\x18\x8a\xc3\xff\x46\x0e\x43\xe4\xf2\x3f\x50\x83\x1a\x5f\x86\x7d\x8c\xe4\x69\x8e\xa4\x43\xf5\x0c\xf0\xe1\x9e\xf6\x5c\xea\x2a\xcb\x09\x62\x0e\xf1\x31\x28\x59\xde\xd1\x2d\x5d\x8a\xa2\x4c\x93\x9b\xbc\x92\x07\x1f\x27\x49\x72\xa6\x60\xd4\x80\x67\xbd\x12\xa2\x64\x37\xb5\xa0\x69\xb2\x29\xe9\x3a\x41\x48\x69\x4c\xbc\x8d\x22\x73\xaa\x5d\xd2\xfd\x16\xd0\x5e\x11\x27\x23\xbd\xa4\x77\x5f\xec\x2b\x79\x1e\xb7\x09\xaf\x3b\xb5\x63\x67\x64\x50\x8b\x65\xe0\x6c\x25\xfa\xcd\xd3\x76\x4b\xed\xc0\x52\x24\x09\x6e\x02\x35\x27\x8c\x0f\xa8\x09\xa9\xd3\xe2\x3b\xc9\xb9\x89\xe9\x60\x69\x8d\x62\x24\x91\x09\x22\x66\x37\x7a\x1a\x10\x23\x74\xa6\x10\xf3\xa5\x24\x40\x88\xc1\x28\xdd\x97\xf4\x8e\x15\x75\xf5\xe3\xdb\x1f\x42\xda\x95\x69\xb4\x28\x8f\x55\x95\x54\xc4\xe7\xe2\xfb\x8e\x9b\xfe\x31\xc7\x72\x7a\x65\x0b\x78\xbe\xa3\xb8\xec\xa4\x34\x0c\x95\x96\x00\x83\x6f\x66\xbe\xd1\x59\x09\x58\xca\x7a\x6b\xfc\xe3\xc9\x6f\x9f\xe0\x04\x72\xb0\xee\xdb\x33\x83\x37\x6f\xbe\x70\xfa\x71\xf0\x96\xde\x5e\x7f\xda\xa7\xc9\x7f\x26\x23\x36\x4a\xd2\x29\x79\x72\xf8\x2d\x4a\x90\x4c\xdf\x97\xae\xec\x4b\xf7\xe4\x1f\x50\xd7\xad\x14\x1e\xad\x8d\x44\x31\x22\x29\x1d\x57\x70\xcd\x7d\x38\x24\x09\x1a\x85\x27\x70\xf4\x24\x0d\xcf\x0f\x3d\xa7\x67\xb4\x3d\xa7\x14\x61\xb0\x0a\xd4\xf3\x48\xb5\x23\xc1\xbe\xae\x36\x2a\xcf\x91\x33\xf5\x97\x55\x11\xac\x05\x6d\xff\xdd\xd9\x0f\x01\x88\x60\xb8\x72\xa7\xbd\xbb\x64\x0c\xab\x3e\xd3\x94\x5e\xbd\x85\x92\x1b\x6c\xfb\xd5\xe9\x08\x27\x4a\x74\xa2\xb8\xae\xd9\x2a\x2b\x52\xd4\x3c\xed\xaf\xc1\x8d\x0f\x37\x71\xd6\x70\xb7\x3e\xc2\xf1\x23\xdb\xc2\x8e\xed\xaf\xd1\xa8\x60\x44\x7f\x69\xbb\xfa\xd8\x1c\x37\xe9\x67\x8f\x73\x3c\x6d\xda\xe7\xf3\xb7\xec\x70\x48\x19\x40\x85\xdb\x5a\x25\x0f\x13\x34\x0a\xa1\xe1\x90\xa6\x2e\x01\x6a\xfa\xd9\x16\x53\x57\x12\xaf\xbb\x97\x65\xb1\x6a\xa4\x1e\xd2\xd1\x25\x2b\x1e\xe9\x70\x4a\x15\x3a\x4d\xb9\x47\x18\x1c\x21\x89\x92\x17\x94\x29\xd9\x59\x29\x60\xb4\xa6\xc8\x28\x63\x62\xe9\x71\x39\xe2\x5f\xca\x53\x19\x16\xbf\xec\xb2\xf8\xa7\xb1\x5b\xad\xa1\x3c\xce\x6c\x3d\x3a\x0f\x27\x30\x5a\x2d\x43\x94\x47\xaf\x7f\xe2\xaa\xd4\xcf\x50\x62\x3f\x2a\xa4\x69\xad\x8e\xdc\x8c\x49\x4c\xe1\xe4\xab\x9a\xbe\xec\x58\x93\x65\x27\xda\xbf\x2b\xbe\x14\xad\x8a\x3c\xba\xce\x68\xdf\x61\xc3\x5b\x87\x4d\x9f\xe0\x15\x30\x12\xd0\x9a\xc7\xe5\x9d\x1a\x3e\x3d\xcb\xb7\xdb\x9b\x7c\xf9\x81\xd0\x06\x6f\x60\x9a\x4f\x2d\x1e\x47\x4a\x81\xc3\xe0\x8b\xf6\x6a\xb0\x1f\x81\xfb\x8b\x0c\x14\xc2\x72\x23\x9d\xb0\x08\x41\xa1\xee\xad\xbd\x79\xc0\x30\xc7\xb5\xe9\xc2\xb7\xc7\x37\x9c\x49\xaf\x4c\x3c\x12\x52\x0e\xf6\x7c\xe8\x3c\xbb\x31\x7d\xde\x7b\x90\x6c\x7e\xd1\x92\x8b\xc5\x9c\x08\x17\x6c\xe6\x37\xb6\xfb\x17\xa0\xbe\x9a\x26\x49\x26\x8c\x6c\xee\x83\xda\x32\xbf\x9c\xa2\x64\xb7\xcc\x86\xbe\x10\x87\x43\x0a\x0d\x2f\x0b\x51\x2c\x8b\xed\x28\x79\xf2\x24\x19\xd1\xf1\xa6\xa8\x04\xb0\x58\x74\x2c\x87\x42\x0b\xf2\x99\xfc\x24\x7f\x83\x34\x4f\x8d\x12\x9e\x08\xa5\x27\x06\x55\x3b\xe1\x4e\x69\x4c\x4a\xf5\x6c\x74\xa1\x31\x73\x39\x39\x7e\x23\xf9\x62\x54\x6a\x83\xca\x5b\x2a\x5e\x43\x23\x09\xc3\x34\xa2\x9c\x8c\x9a\xc8\x27\x05\xf7\x64\x3e\xc6\x07\xb2\xcd\xd6\x47\x87\x1e\x0e\xf4\xeb\xff\x05\xa5\xb7\xb9\xe1\xb0\x30\xb6\x4e\xd3\x0b\x8d\x20\x67\xc6\xf9\x8a\xaf\x4a\x59\xd0\xef\xc7\x92\x1d\xef\xfb\xfa\xef\xe3\x09\xa0\xe8\xb6\xbf\xbf\x2c\x6e\xd8\x96\x0e\xde\xe5\xeb\xbc\x64\x09\x24\x20\x41\x82\x67\x9b\xb2\xd8\xd1\xd8\x97\x9f\x80\xe6\x56\x83\x37\x1b\xd0\x35\xb6\x95\xa7\xe7\xe7\xa9\x18\x0e\x13\xcb\x98\x40\xaf\x7d\x97\xaf\xd6\x90\x83\xf5\xa1\xdd\x1d\x72\x51\x8c\x54\x9c\x99\xe8\xa6\xe8\xd8\x9a\x45\x94\x6b\x95\x31\x2f\x30\x2f\x94\x73\xc2\x13\xe3\xe9\xf8\x4b\x2e\xe1\x0d\x0e\x82\x39\xc0\x0c\x99\x5e\xd6\x65\x49\xb9\xb0\x17\xab\x19\xe8\x3f\x0c\x8a\x35\x4a\x93\x85\x6a\xf0\xb8\x9d\x30\x41\x58\xbf\x92\x34\xe6\x91\x5c\x8a\x11\xb0\x9a\xdb\xbe\xd4\x9e\x60\x62\x0e\x80\xbe\xa4\x8e\xbd\xd0\x6f\x94\x41\x80\x7f\xb5\x9e\xfd\x8a\xee\x06\x72\x21\x4f\xb0\xe4\x2b\x2a\xba\xbb\xd9\x52\xe0\xad\x52\x49\x8a\x50\x18\x90\x43\x37\x6f\xb1\x2a\x7e\x7c\xfb\xc3\x7b\xdb\x9a\x34\xf1\x5b\x96\x60\xc8\x19\x38\x95\x41\xf1\xf4\x93\x28\xf3\xa5\x1a\xe4\xab\xf2\xb6\xd2\x17\x6d\x6c\x5c\x9a\x61\xc7\x39\x61\xe3\x5d\xb1\xa2\xdb\x0a\x57\x84\x8d\x3d\x1b\x09\x5c\x93\x76\x1b\xbc\x06\x28\x1b\x44\x29\xac\x5a\x83\xa2\xc5\x07\x4a\xf7\xda\xb9\xd3\xd9\xe4\x80\x13\x2c\x18\x66\xd7\x96\xb9\xfe\x89\x89\xc8\x55\xb0\xea\xb2\xdf\xb1\xb8\xca\x41\xfb\xd0\x5b\xd5\xb8\x3c\x41\xeb\x72\xfb\xa2\x28\x3b\x87\xba\xb9\xc1\xa4\x41\x57\x90\xb5\xde\xd2\x15\xd0\xf0\x52\xbb\xba\x5a\x0a\x76\x47\x7f\xcd\x09\xff\x6f\x9e\x1a\xf5\xf7\x25\x5b\x96\xc5\x96\xdd\x58\x0a\x54\x8f\x4d\x5f\xbe\x03\xa7\x4d\x98\x35\xd0\x3a\x0e\x87\xe9\x79\xea\xbb\x20\x55\xc8\x7a\x3b\x22\x03\x3e\x63\x8b\xdf\x97\x74\x9f\x97\xd4\x33\xb4\x72\xf3\xaf\x6f\x46\x36\xf9\x76\x5b\x7c\xbc\xfe\xb9\xce\xb7\x28\xad\x70\xad\x64\x3e\xbf\xd1\x08\x2c\x2b\x3c\x1e\x8f\x9d\x44\xdc\xc0\xda\x36\x42\xdd\xf6\xc5\xf6\x7e\xcd\xb6\xdb\x2f\x21\x78\x8a\x5b\xfd\xac\x5b\x03\xde\x21\x75\x01\x9d\x00\x6b\x16\x25\x33\xea\x8d\x6d\x49\x8c\x1e\x44\x2f\x89\xa3\x75\x47\x73\xf8\x69\x5c\x96\x80\xb4\x1e\xc9\x16\xa1\xac\xf2\xc4\x79\x24\xd7\x1b\xc5\xf4\x6e\xf2\xaa\x65\xcd\x43\x3d\x83\x0d\x16\x32\x7b\x70\x00\xc1\x7d\x00\xe4\x01\x3e\x21\x4e\x38\x03\xe4\x42\xb0\x09\x8a\x17\x15\x92\x9a\x20\x8a\xf2\xa0\x1c\x0e\x8b\x2e\x05\xc0\x45\x83\xb9\x64\x51\xb7\xec\x5f\xfe\x3a\xed\x04\x6b\xee\xaf\x33\xb2\xc8\x4d\x48\x09\x43\x2e\x42\xf6\xf7\x94\xae\x28\x48\x99\xd6\xfe\x34\xc1\xec\x1f\x1a\xaf\x53\x29\x70\xd1\x06\x56\x33\xc7\xa5\xe6\xc5\x63\xbd\x82\xba\x73\x84\x70\xd1\xa6\x64\x05\x9e\xd1\xb9\x81\x84\xe2\x78\xf6\xe0\x1b\xbd\xe5\xcd\x5c\xee\x41\x4b\xe0\x5e\x14\x65\x7b\x96\xf5\x3e\x30\x68\xa0\x47\xa6\x28\xec\xd2\xb8\xa4\xcb\xe2\x96\xb3\x7f\xd1\x72\xac\x24\x8e\xb2\x7a\x51\x48\x46\x17\x57\x24\x9f\xe5\xd6\xd6\x62\x6e\x3e\x07\x3e\x75\x7e\x64\x0e\xdf\x05\x52\x38\xfb\x8b\x72\x04\xe1\xd6\x15\x00\x86\xa5\xbf\xf2\x8d\x2e\x10\x22\x6d\x01\xf9\x7d\x6a\x46\xb5\x01\x90\xdc\x33\xcb\xc2\x6b\x0a\x57\x83\x28\x52\x21\x5c\xb6\xe9\x23\x87\x18\x1e\xe7\xc5\x31\xa1\x38\x34\xe1\x3f\x49\x1c\x51\xdc\xbd\x7f\x9c\x18\xe6\xdf\x86\x4d\x80\xe2\xc0\x5f\xeb\x65\xbe\x8f\x85\x48\xd8\xc4\xc1\x22\x5c\x66\x00\x2e\xa2\x2d\x2c\xa0\x4a\x48\x46\x3f\x8e\x72\xe0\x65\xbd\x05\x84\xf6\x76\xf8\x68\xdd\x1a\xec\x25\x54\xb1\x91\x4a\xe4\xa2\x0b\xb5\x21\xd9\xd4\xbd\x7a\x7f\x40\x21\xd5\xca\x10\x30\x39\xd6\x16\x6b\xe3\xae\xf0\x98\xa6\x26\x6a\x52\xc6\x35\x68\x91\xa3\xcd\xbd\xa6\x79\x3d\xae\x26\x27\xcd\x99\x2b\xbe\x07\x3a\x81\x5a\x13\x02\x57\x7e\x96\x8c\x54\xdc\xa3\xe3\x0d\x02\x8f\x96\xd3\xce\x34\xa5\x49\x69\x1f\x55\x91\xf5\x55\x92\x09\x66\x8f\x83\x12\x42\x88\x64\x1d\xe5\x6e\x4c\x79\x7e\xb3\xa5\x3f\x14\xf9\x8a\xf1\xdb\x77\x52\x34\xcd\x05\xad\x94\x5b\x7a\xfc\x9b\x46\xa1\x03\x87\xef\xca\x46\xf8\xa0\x9f\xf6\x5b\xb6\x64\x42\x45\xf8\xf0\xe1\xed\x8a\x3d\x18\x06\x12\x11\x5b\xd2\x40\x42\x02\x94\x38\x43\x03\xbe\x10\x0c\xec\xa1\xf1\x81\xc4\x66\xbf\x9f\xe3\x8a\x24\x4f\x16\x35\xaf\x2b\xba\x5a\xac\xea\xdd\xee\x7e\x41\xcb\xb2\x28\x17\xfb\x5c\x6c\x14\x09\x5b\x40\xcc\x9a\x27\x19\xbc\x4f\xce\xe2\x4e\xe6\x11\xbc\x48\x05\xa1\x5d\xe2\x92\x3c\x34\xe8\xd8\x70\x0e\x87\x69\xae\xe3\x86\x8e\x92\xc5\x56\x7d\x4d\xf0\x83\xe4\xfd\x9d\xd3\x5c\xa6\x84\x01\xf7\xa2\x41\xd8\xcb\xa6\x5a\xf7\x68\x26\xa5\x10\xab\x1a\x84\x30\x9b\xa6\x39\xc4\x91\xf9\x38\xa0\x69\x61\x82\xb8\xb7\x33\xa0\x60\x9a\x10\x4e\x4c\xfb\x64\xed\x1c\x27\xa6\x5e\x53\x2e\x66\x3a\xc0\x82\x6b\x1d\x2e\xe1\x12\x5c\x1d\x43\x29\x42\x28\x73\x5f\xda\x61\xbf\xeb\x90\x18\xf9\x41\x83\x25\x3f\x49\xb8\x1f\x1a\xdf\xc4\x2a\xd4\x8d\x1b\x53\x7e\xcb\x38\xfd\x8e\xaf\x0b\x54\xc8\x94\xe0\x0b\xd9\x93\x62\xbc\xae\x95\x07\xa6\x9e\xc2\xd1\x25\x52\x86\x93\xee\x88\x05\xcb\xa6\xed\x0b\x9d\x2e\x2b\x1a\xdc\x57\x1b\x66\xe0\x32\x59\xd1\x92\xc1\x49\xac\x9d\xe4\x59\x38\x78\xe3\x7c\xb5\x82\xe3\xf4\x45\x51\x5e\x43\x66\x75\xfa\x98\x50\x11\x0c\x75\x40\xb2\x9e\xd3\x35\xe3\x8c\xdf\x0e\xf2\x01\xac\xc5\x81\xad\xa2\x1c\x14\x5c\xbf\xfb\x1d\x68\x0c\x7f\x37\x28\x6a\x51\xb1\x15\x1d\xe4\x7c\xa0\x8a\x1f\xb0\x0a\xf0\xb5\x80\xf3\x06\x6c\xad\x33\xa3\x69\x53\xaa\x2d\xf9\xa0\x3c\x12\xcf\x09\xa9\x66\x95\x3b\x84\x0d\x87\x1f\x6e\xdc\x73\x13\x63\x5e\xef\x6f\xed\x47\x6b\xb1\x6a\x7c\x08\x26\x35\xdd\x9d\xd8\xa1\xc4\xcf\x1f\xc4\xf0\x0c\xaa\x32\x57\x4e\xc0\x2f\xea\x36\xea\x45\x96\x3c\x49\x1a\x84\x3b\x44\xc1\x63\x0a\xa8\xc3\x45\x20\x7f\x40\x22\xa5\x33\x3e\x47\x63\x51\xc8\x87\xd1\xe5\x1c\xcb\x3f\xbf\x9f\x4b\x46\x27\x08\x60\x04\xe8\x14\xb6\x5c\x8b\x18\xed\x39\xd2\xfd\x02\xb2\xb3\x27\xc1\x52\x28\x69\x55\x6c\xef\x94\x41\xfb\xcb\x7c\x2f\xb7\xcb\x8a\xf0\xb3\xcd\x38\x97\xe4\x60\x45\xe4\x83\x92\xd7\x77\x44\xef\xcd\x15\xde\x74\xf6\xe6\x3d\x51\x71\x81\x38\x36\xe0\x79\xdf\xad\xb2\x72\x34\xc2\xd0\x99\x37\x05\xe3\x22\xdb\x61\xb3\xd4\xb3\x5d\x83\xef\xc8\x06\xd4\x9c\x67\x26\x1c\x94\x45\xa2\xb8\x1b\x0e\xd3\x3b\x50\x72\xae\x54\xcd\xb7\x86\x50\xdf\x9c\x42\x23\x57\x1e\x8d\xdc\x03\xe9\x3b\xbf\xc4\x69\x45\xfa\xf6\x8c\x4a\x32\xe9\xdb\x53\xe4\x5e\x12\x90\x5a\x93\xa7\x1d\x0e\x77\xa6\x4b\x97\xdd\x87\xdb\x12\xb5\x48\x54\xdd\x22\x51\x37\x0d\xc2\x7b\xe5\xf4\xad\x08\x55\x8d\xf0\x2d\xa9\x3d\xfa\x04\x9b\xb9\xaf\x55\x15\x52\x63\xb3\x38\x4a\x2a\x12\xc9\x6b\x33\xad\x5b\x6a\xf0\x3d\x3a\x3b\x4e\xfe\xb7\x64\xe5\x53\xfe\x25\xf1\x0b\x70\xef\xd7\x47\x2b\x5d\xca\x8a\x0c\xd1\xdd\x76\x4e\x82\xf6\xe2\x69\x1e\x25\x4e\x5b\xbc\x46\x58\x35\x4d\x0f\x61\xab\x61\xfa\xed\xaf\xda\x2c\x6c\x67\xe9\x84\xd6\x3d\x9a\x68\x87\x17\x06\x5d\x57\x52\xaa\x3b\xbc\xc3\xb7\xa8\x8d\x69\x59\xb4\xf8\xb6\x88\x79\x94\x3f\x9f\xa0\x1f\x56\x6c\x52\x93\x52\x34\x1c\x9e\x03\xfa\xea\xd4\xbc\x1c\x25\xe3\x64\x24\x32\xef\x9a\x20\xf7\x4d\xbe\xbf\x10\x81\xf4\xa1\xf1\xb9\x9e\xd9\x1f\xe6\x98\x11\xdd\xf0\x36\x55\xe8\x6e\x6d\x65\xf5\x01\x61\x30\xe0\x4e\x5f\xdf\x64\x68\x1c\x04\xf5\x12\x33\x38\xa7\xed\x01\xe3\x9b\x07\x31\xcc\xc6\xbb\x7c\x1f\x41\x24\x90\xdb\x93\x39\xf9\x49\x81\x48\x20\x2c\x1e\x63\x70\xa3\xbe\xe0\x27\xde\x1a\x9e\x78\xad\xe3\x59\xd9\x8f\xd7\xca\xf5\x52\x0a\x9c\x3e\x33\x7e\x93\x57\x6c\x99\x20\x45\x0e\xfc\xcb\x3a\xa3\xc2\x31\x06\x53\x5d\x5d\x64\x92\x9a\x2e\xac\x06\xc0\x20\x0e\x5c\xb9\x28\x51\x1e\x42\x36\xd4\x5a\x57\x00\xd0\xe6\xfa\x7d\x8e\xd1\x02\x47\xa5\x0b\xee\x5f\xbb\xc8\x52\x7a\x44\x8c\xc7\x05\x8c\xd0\xa1\xfd\x4b\xe5\x1d\x73\xa6\x77\xd6\xf4\x24\xba\xa6\x27\xfe\x9a\x9e\xcc\x41\x33\xa6\x28\xe3\x9d\xd2\x01\x6b\xa9\x83\x55\xbe\xb7\xf9\xf9\xe4\xb1\xce\x68\xf7\xfd\x53\xe5\x25\x8d\x97\xb8\xba\x58\xd3\x5c\xd4\x25\xed\xfa\x02\x3d\x62\x7c\xdc\xba\xc3\x36\xca\x45\xb5\xe9\x4e\x31\x24\xfc\x4c\x40\x84\xbe\x2b\x97\xd0\xd3\xbf\x6f\x2b\xac\x43\xfd\xb9\x17\xe1\xc3\xc5\x28\x4f\x8d\x1e\xe5\xab\x4b\x34\x1c\x52\x27\x67\x39\x0d\xd4\x25\x21\x36\x0a\xdb\x34\xe5\x70\x2d\x8a\x18\x1f\xd0\x69\x39\xe3\x73\x79\x04\x14\xc6\x9f\x91\xa3\xec\xc9\x82\xad\x7e\xab\xa3\x4a\x72\xc0\xd9\x6a\x27\x4a\xd8\x2a\x41\x28\x2b\xed\x4b\xe7\x98\xa9\x22\x1d\xe1\xb2\x71\x24\xe8\x9d\x21\x4b\x64\xa3\x20\xff\x9e\xb7\xdf\xc7\xa0\x3c\x1c\x35\x23\x84\x6c\x14\x68\xc7\x9e\xd4\x2d\xd3\x81\x7a\x7c\x05\x39\xbf\x35\x7a\xa7\x31\x18\x48\xd0\x15\x0e\x94\x63\x92\x02\x6b\x8d\xee\xf8\xed\xeb\x1f\xdf\x5f\xbf\x5d\xa8\x3f\x53\xe8\x81\xd1\x21\xbb\x3b\xa3\x04\xf7\xdc\x60\xe8\xef\x8d\x89\x06\x83\x17\x15\xf5\xd4\xb6\x9d\x3b\x7b\xab\xf1\x37\x1b\x44\x32\x74\x36\x3d\xb9\x4b\x6d\xa0\x14\xcf\x7f\x01\x4c\x01\x16\x3f\xef\xb3\x56\xeb\xa2\xee\x97\x72\x11\x69\xa0\x08\xbc\xc3\xf7\xc0\xb4\xe1\x3b\xc3\xff\xdd\x6a\xed\x8b\x5d\xa5\xaf\x00\x9b\x36\x6c\x1b\xbe\x21\xd1\x66\x2c\xc8\x4d\x9c\x48\xdd\x22\xfc\xd1\x5b\x11\x4a\x7d\xe8\x3b\xe4\x22\x7c\x1d\x80\xa0\x7d\x74\x37\x10\x67\x8b\x69\x4a\xbd\xcc\x8b\x56\xce\xc3\xe1\x41\xb2\xba\x11\x1f\x5d\xf0\x35\x7d\x68\x70\x4e\x1e\xf4\xd2\x82\xfb\xa7\x4c\x72\xa2\xf7\x7b\xf8\x5b\x2d\x0b\xf5\x90\x57\xd9\xf9\xa4\xb1\x61\x8b\xaa\x81\x5c\xee\xa8\x1d\x56\x32\xad\x14\x8e\xdc\x43\x13\x32\xa9\x25\xa6\xb3\x6a\x8e\xf9\xac\x9a\x23\x5c\xcc\xaa\x39\x29\x71\x2e\xff\x9c\x4f\x3a\x91\x09\x79\xbb\xcc\x5a\xf2\x15\xf9\xac\x56\xe1\xc7\xda\x45\x33\x0c\x51\x0b\xe9\xac\x86\xa2\xeb\x39\x61\xce\xf6\xb0\x91\xcb\x61\xe9\xd4\xc2\xee\x74\xf1\xa8\x2a\x04\x5f\xf8\x88\x50\x76\x3d\x1c\xa6\xc0\xcc\x5a\xe7\x7c\x94\xde\xe0\x5b\x84\xef\xc8\x47\xc5\xea\x7e\x22\xb3\x39\x7e\x27\xdb\xf0\x9a\xcc\xe6\xb6\xe5\x57\xb2\xe5\x77\xe8\xae\xdd\xf2\x2b\x34\x1c\x26\x1a\x45\xdc\xbc\x94\x3c\xd3\xd5\x70\x98\x28\x3b\x61\xfd\x2b\xb5\x91\x65\xbd\x75\x91\x10\x42\x52\x46\x52\x4e\xee\x66\x57\x73\x34\x86\xb9\x38\x1c\x12\xb8\xe6\x4a\x54\xf4\xb3\xd9\x1c\x81\x26\x20\xaf\xf4\x1a\xb4\xbb\xdc\x75\xf0\x4f\x54\xb6\x44\xb1\xa6\x76\x8d\x5c\x21\x1c\x82\x01\xae\x65\x81\x90\xa6\x1e\x5f\xa1\x74\xad\x55\x06\x08\x21\xbc\x21\x7c\xac\xc2\x00\xc2\x57\x15\x2c\x10\xa9\xb0\x36\x7d\x95\xa6\x6b\x5c\xe1\x8d\x94\xe4\x6e\x01\xc5\xf9\x0a\xef\xc8\x43\xcd\x57\x74\x59\x00\xa3\xf0\xdc\x5f\x70\xad\x86\x05\x8b\x71\x8d\x6d\xe9\x61\xa6\xbd\xf7\xc1\xbc\x81\x65\xbb\xc1\x75\xb9\xfd\x13\xbd\xcf\x2a\xbc\x2f\x8b\x7d\x76\xa5\x56\xb1\x85\x86\x03\xc2\xb2\xc2\xe1\x16\xce\x6e\x15\x45\x03\xc3\x4b\xbc\xcf\x4b\x51\x65\xb9\x0a\x29\xa5\x1d\xe0\xd5\x56\x60\x0d\x7e\x37\xbb\x9a\x93\x77\x72\xf5\xbe\x9b\xad\xe6\x64\x87\x3f\x29\xde\x71\x87\xf0\x6b\xf5\x74\x65\x51\xa1\x1f\x7e\xde\x57\xd9\x27\xbc\xcb\xf7\xd9\x3b\xbc\xf7\x1a\x50\x65\xaf\xb1\x92\x79\xb2\x07\xc6\xf3\xd6\x1d\xaa\x8f\xe1\x36\xa3\xf3\xb3\xfb\xb1\xf3\xb6\xb7\x17\x2d\x8f\x65\xd2\x9b\x20\x92\x17\xdf\x8f\x17\x2a\xf7\x9f\xdf\x98\x2f\x10\x85\x14\x83\x7a\xe4\xb5\x06\x14\xad\xbe\xb4\x6c\x30\x89\x62\xfc\xd6\x2b\x1d\x35\xe0\xa0\xbc\x80\x1b\x09\x0d\x20\x00\xfa\x76\x35\x18\x1d\xd3\x15\x1d\x50\x1f\x92\x7b\x91\x0f\x70\x4e\xbc\x0f\x84\xea\x87\xb3\xdc\x02\xef\xa7\x39\x49\x29\x11\x00\xff\xa9\x3e\x1e\x0e\x33\x7d\xdf\x5f\x75\x68\xec\xe2\xe7\xfd\xf8\xe7\xbd\xa4\xaf\xb5\x07\xcd\x9f\x5b\xc7\x53\xa7\x48\xf1\xb0\x0a\x39\xaa\xe5\x09\x4e\xe1\x7a\x05\x44\x9c\x7c\xc6\x15\x35\x50\x81\x0c\x2a\x97\xb6\x44\x7a\xbf\xaa\xcd\x5c\xcd\x4a\xb3\x93\x25\x35\x1b\xc3\x42\x23\x35\x6a\x1a\xdc\x9e\x91\xd6\x98\x84\x97\xcc\xed\xd9\xa3\xe3\xee\x1a\x87\x09\xed\xce\x45\xcc\xef\x47\x97\xda\x9d\x37\x3a\x56\x7b\x09\x35\xb8\x1d\x97\xaa\x03\x19\xa1\x38\xe8\xc0\xb2\xc0\xb7\x7a\xeb\x1c\x87\xf6\x28\x54\x1b\x2f\x19\x29\x34\xe2\x73\x83\x42\xfc\xd0\x18\xcb\x99\x23\xd7\xf7\x63\x35\x12\xee\x06\x14\x17\x84\x4d\x59\x60\x45\xdd\x93\x13\x92\xe0\x9c\xf0\x90\x87\xc0\x55\x4b\x86\x6f\x70\x31\x56\x7d\x9b\xe5\x73\xb9\x50\x76\x29\xc7\x85\x3d\x64\xfc\x63\xb9\x46\xe3\x92\xae\xea\xa5\x17\xd9\xa4\x8d\xb9\x4e\xea\x99\x98\x63\xda\xe0\x0a\x6c\x19\x63\xd4\x3a\x72\x91\x3c\xa0\xd1\xc4\x9d\x1b\xdb\xa8\x3d\x4c\x8c\x3c\x53\x20\x21\x2b\xfa\xc5\x85\x46\xb3\xea\x62\x17\x5a\x0b\xf1\xa2\x28\xa3\xc5\x7a\xd7\xe3\x7d\x1c\xcf\x38\x19\xd9\xb5\x07\xe7\xce\xd1\x84\x92\xb2\x02\xa3\xd3\x60\x50\x00\xb8\x73\x3e\x5b\x63\xfa\x29\xe2\xa6\xb3\xa2\xb0\x70\x94\x96\x4b\xdb\xd2\xb0\xdb\x5b\x29\xa0\xba\x4f\x89\xf9\xa4\x43\x4a\x00\x90\xa8\x76\xf4\x0a\xe1\xe0\x3d\x58\xca\x90\x3d\x3c\xe3\x3e\xda\x49\x94\xfe\xa8\x63\x60\x6c\x4e\x01\x53\x69\xab\x23\xea\xba\x15\x35\x58\xb2\xe3\x5d\x33\xe7\x65\xc1\x39\x5d\xaa\xfb\x23\x73\xd3\xd4\xdb\x43\xd7\xbf\x06\x0b\xba\xdb\x6f\x73\xcd\x6e\x03\x5d\x6e\x1d\x8c\xf0\x4e\x61\x9d\x56\x99\x2f\x05\x58\x70\xe9\xce\x82\x31\xdc\x65\x1e\xeb\x6f\x82\xc6\xbb\xbc\x1d\x5f\x9b\xda\xe8\x9c\xfe\x5b\x8e\x50\x1f\x55\x65\xeb\x34\x65\x24\x9f\x49\x82\x3a\x57\x21\xb5\xbd\x8a\xc6\xd1\x15\x98\x32\x84\x93\x92\xae\x4b\x5a\x6d\x5e\x1a\x26\x2a\x58\xd5\xbe\x15\x89\x8d\x11\x0f\xe9\x53\xa4\xc3\x15\x9b\xe8\x46\x0d\x5e\x33\xde\x5a\xfe\x3d\xc3\xc1\xd6\x69\x5b\x6b\xd6\x15\x5d\x5c\xd8\x24\x88\x51\xe9\xc6\x50\xcb\xb4\x5a\x24\x21\x5c\x1b\x0b\xe9\x8b\xfc\xef\xf8\xba\xa8\xf0\x2e\xa0\x91\xf8\x8e\xec\xc6\x0b\x6f\xa6\x5e\x14\x65\xba\x42\xf8\x16\x5e\xef\x95\x45\x74\x85\x6f\x7c\x14\x65\xe0\x93\xe1\x40\x86\x2c\x70\x2a\xa3\x74\x87\x57\x26\x38\xcf\x9d\x3c\x27\xfd\x19\xa8\x20\x6c\x27\x23\xf0\x01\x8e\x35\xa8\x1d\x79\x8b\x1f\xd7\x84\xe9\x4d\x3c\x50\x6e\x5c\xe6\x27\xde\x76\x22\x41\xde\xba\xaf\x32\xf1\xed\x34\xdd\x7a\xcb\xa7\xc2\x4c\xed\x72\xbc\x26\x79\x94\xe1\xdc\x62\x5b\xb8\x0a\x66\x82\x50\x56\x4f\x5d\x20\xbf\x35\x01\x19\x01\x54\xcc\xf9\x38\x4e\xbe\xd6\x91\x32\xd2\x35\x61\xe3\x38\x0f\x8a\xb7\xe4\x3e\xb5\xbe\xc7\xf0\x0a\x21\x5c\xf5\xec\xf8\xbc\x6f\xbb\xaf\xcf\x49\x50\x05\x14\x04\x1a\x4a\x6f\x0e\x5f\xf3\xed\xbd\x0e\x09\x7d\x33\x1c\xa6\x1b\x92\xf7\x2f\xf2\x74\xef\x55\xbb\xc1\xce\xf2\x07\x4d\x6f\xc8\xf9\x24\x03\x8c\x80\xfd\x70\x98\xde\x90\xf3\x4b\xe5\x4e\x58\x28\x03\x77\x33\xcc\x78\x8b\x10\xee\xb4\x89\xac\x71\xdf\x50\x10\x42\xd6\xc3\xe1\x39\x3f\x6a\xd8\x78\x38\x08\xc5\x20\x3f\xdc\x69\xde\xfe\x8e\x41\xa0\x15\x29\x61\x7e\xa0\xf7\x59\x7d\x38\x98\x09\x68\xd0\xd9\xcd\x70\xc8\x23\xd6\x4b\x6a\x25\x76\x62\x3f\xf9\xc8\xb0\x46\xb3\xa2\x96\xa4\x26\x3b\x67\xfa\xa7\xb7\x40\xfb\x68\x33\x4e\xf4\x2c\x99\x39\x6a\x10\xf6\xf7\x0e\xc4\x46\x6a\x1a\x79\x80\x1a\x5a\x9a\xad\xb1\xf7\xd8\x67\x0b\x7b\xd4\xd0\x32\x62\xcd\x09\x2e\xe3\xcb\x7e\x04\x26\x67\x8a\x09\x50\x0a\x82\x96\x3b\xba\x62\xb9\xf0\x18\xa2\x48\x03\x9e\x76\xaa\xee\xcb\xfa\x25\xcd\xd0\x14\xb3\xcf\x66\xb5\x8f\x1d\x33\x84\x56\xa8\x20\x5d\x3d\xd6\xaf\x47\x07\xd0\xcb\xf3\x25\x0d\xaf\x28\x5f\x75\x21\xb9\xac\x7a\xf1\x17\x07\x8a\x34\x77\xf4\xba\xbd\xad\xb3\xa7\x35\x1e\x87\xc3\x79\x3a\xc1\xf9\x98\x55\xef\x69\x25\x99\x72\x94\x22\x94\x96\xad\x1e\xcb\x26\xeb\xae\x96\x58\x78\xf7\xe7\x44\x58\x28\x9f\x82\x58\x6e\xa0\xe0\xd5\x8c\xd9\x00\xec\x81\xc9\xb0\x50\xae\x35\xf5\x3e\xc6\xd5\x60\x7d\x12\xd9\xe8\xd0\x27\x69\xc1\xb6\xed\x54\xf2\x1c\xaa\xc1\x0e\xba\x22\x5b\x9d\xbc\xab\xf8\x4f\x6b\xcd\xaf\xb8\x8c\x87\x43\xca\xa3\xbc\x53\x20\x52\x27\xa8\x85\x7c\x2c\xa2\x11\xe2\x02\xb4\xff\x54\x8c\x92\xf1\x6c\x9e\x60\xaa\x70\xe9\xb4\xe0\x83\x1a\xd4\xa4\x15\xe6\x9d\x96\x10\x7d\x15\xbd\x8e\xb3\x36\x78\x43\xd6\x9a\xc2\x9f\x85\xe7\xc0\x66\x1c\xca\xd6\x58\x03\x1e\x44\x4e\xdd\xe0\x2c\x17\x91\xf3\xde\xba\x37\x2f\x6e\x1c\x82\xa1\x0a\x8e\xa2\x4c\x9e\xd7\xe1\xc0\x1c\x21\x96\x6b\xc9\x8c\x49\x89\x5e\x98\x8b\x07\xe6\xa2\x2c\x2e\xc7\xcb\x7c\xbb\xac\xb7\xe0\xdf\xb4\xdc\x50\xc9\x8c\xa7\x42\x53\xd1\x50\x68\x12\x4a\x94\xc5\xa6\x18\x84\x73\x52\x1a\x09\x0f\x58\xd7\x71\x8f\xf6\x07\x90\x21\xec\xf1\x43\x71\x2e\x89\x6d\x4e\x76\x7a\x59\xaa\xee\xbb\x33\xca\x57\x8d\x57\x60\xd7\xa9\x55\x50\xa2\xde\x7b\x6b\xa8\x02\x6e\x59\x7b\xf1\x79\x30\x64\xf6\x82\xb4\xda\x14\xf5\x56\xa3\xf6\xeb\x9d\x58\xc2\x8f\xf7\x9a\x21\x96\x45\x28\xb5\x71\x4c\x20\xd7\x7c\x5d\x68\x1f\xd8\x9a\x8e\xbe\x11\xe4\xd1\x11\xe4\x7a\x04\xb9\x19\xc1\xb3\x52\x2d\x8d\x94\x29\xce\xbf\xc1\x37\x74\x5d\x94\x14\x58\x57\x79\xdc\xac\x25\xb9\xd0\x3f\x4a\xba\x62\x25\xb8\xf5\x61\x8d\x56\x1e\x61\xcf\x8d\xac\xa0\xb8\x5c\xc8\xea\xb6\x28\xfd\x24\x1a\xbc\x53\xc5\xc5\x74\xc5\xed\x00\xef\x3e\x35\x88\x6d\xcd\x5d\xbe\x4f\x9c\x72\x77\xab\x14\xc6\x81\xca\x80\x10\x49\x05\xea\xe1\x10\x3e\xd6\x72\x93\xd7\xdb\xad\xe4\xd5\x4a\xb2\x55\x76\x31\xe9\x93\xff\x4c\xc7\xff\x86\xe0\x06\x05\x29\x3b\x89\x72\x76\x39\xc7\x15\xa1\xb3\xed\x5c\xae\x13\x49\x4d\xd8\x3a\x3d\x67\x30\x1f\x39\xf2\x82\xab\x79\x12\xbc\x52\x2d\x70\x63\x6b\x02\x76\x35\x5f\x5d\x9a\xb8\x95\x16\xbd\xaf\xbb\xd5\x66\x61\x9e\x8b\xcb\xb9\x1d\x2c\xff\x50\x5b\x33\xbe\x82\xf1\x4c\x19\x08\xf6\x1e\x7b\x99\x45\x55\x01\xca\xf4\x07\x72\x18\x5b\x43\xcd\xa8\x87\x44\x54\x85\x2d\xb1\xc5\x1f\x39\x0a\xdb\x73\x50\x89\xa2\x94\x2c\x1f\xb4\x2d\xea\xbb\x01\x29\x1e\xbb\x13\x89\xaa\x6e\xce\x5a\x94\xbe\x33\xff\xfa\x4c\xb3\x01\xf8\xac\x7f\xdf\x83\x6c\x8d\x17\x15\xc2\x59\xd8\x86\x37\xd3\x6a\x21\x26\x23\x15\x4c\xb4\x34\xd3\x5a\x92\x52\xdd\x50\xab\x6e\xa5\x1a\xf7\xd0\x0d\xf6\x06\xb7\x28\x41\x6b\xf8\xa9\x77\x1b\x2b\xb4\xd8\x58\xe9\x5b\x38\xa5\xa8\x83\x01\x0f\xce\xac\xa8\x9c\x1f\xbd\xe0\x61\x84\xc7\xb4\x5a\x06\x26\x5a\x4a\x38\xe1\x99\x39\x1c\xa6\x94\xb4\x5f\x22\xcc\xe3\xd7\x44\xd4\x33\xaf\x8f\xf6\xb0\x1d\x1c\x21\x98\x33\xbb\x33\xbc\xeb\x0d\x01\x34\x0e\x3a\x1e\x53\xdc\x09\x6c\x91\xc3\x59\xbc\xc7\x05\x39\x9d\xa5\x99\x7e\x96\x22\x4f\x5d\x89\x73\xed\xe5\x93\xdf\x6c\xe9\x70\xa8\xe9\x43\x31\xbd\x93\x44\x11\x65\xf4\x4c\x59\xde\xb3\xce\xa8\x3b\x1f\x08\x93\x07\xfc\x56\xf3\xe1\x30\x77\xeb\xf6\x70\xe0\xb8\x30\xfb\x5b\x6d\xb0\xaa\x7d\x87\x23\x10\x9a\xb6\xd3\xcc\xc4\x3c\x83\x92\x7c\x4a\x2a\x59\x56\xff\xfc\xe8\x3a\x58\xc3\x67\x05\x9b\x20\x9f\xa2\xcb\x4a\x8f\x76\x41\x26\x11\xdb\xda\xb3\xe2\x70\xe8\x46\x86\x96\x8c\xd7\x94\x13\x9a\xa5\x5a\xfb\xe4\xab\x74\x3a\x4c\x99\x20\x54\xdb\x6d\xe5\xed\xe8\x88\xce\xba\xb4\x3d\xd7\x14\xf9\xd4\x5e\x3f\x58\x11\x7e\xd9\x91\xe5\x37\x36\xf6\x2d\x88\xdb\x4c\xca\x17\x85\x5c\xfd\xf2\xaf\xef\xd5\xfc\xe4\x16\x27\xe3\x04\xe1\x25\x61\xe3\xa2\x16\x5b\x2a\xf0\x3a\xd8\x0f\x78\x63\x1c\xbb\xd0\xd9\x92\x2c\x0f\x87\x64\x97\x33\x9e\x60\x31\x4d\x2b\x42\xbd\x7e\xd5\x84\xb6\x3a\x5e\xa1\x2c\xad\x42\x27\x6a\x53\x5d\x2d\xd9\xb8\xf5\xe1\x90\xae\x89\x98\xd2\x0e\x1f\x9b\xc7\xb7\x5f\x85\xb2\xde\x2f\x87\x43\xb7\x18\xaf\x79\xce\x10\xc9\xda\x44\xaf\x01\x48\x73\x0d\xfa\x8c\x68\xa1\x05\x42\x67\x9b\xe1\x70\x0d\xbe\x03\x86\x38\x6d\x90\xbe\xb9\x77\x99\x4c\xaf\xb3\x64\x54\x1b\x3b\x49\x3d\xfc\xdb\xe1\x30\xdd\x91\x55\x4a\xe5\xd9\xb9\x25\x84\xec\x5c\x93\x60\x66\x34\x70\xa8\x21\xce\x60\xf4\x91\xe5\x52\x92\x2c\xb2\x2d\x56\x33\x92\x2d\x21\xa8\x6a\x56\x79\x54\x51\x8a\xb8\xa6\xda\xbd\xec\xe9\x42\x14\xfb\x1f\xe8\x1d\xdd\xfe\x85\xd1\x8f\x66\x0b\x34\x2a\xe4\x32\x2e\x30\x97\xc2\x49\x5b\x51\xa9\x74\x01\x39\xf0\x76\x6c\x5c\xf0\x25\x6d\xf1\xbe\xc9\xa2\xa2\xe2\x35\x34\xa2\x4a\xe4\xa9\xca\x2a\x9d\x5d\xbd\x3c\x46\xaf\x0c\x56\x11\x20\x29\x75\x06\x9f\x9a\x0d\x43\xcd\xb2\x2b\xad\x25\x9b\xec\xc1\xd4\xff\x11\x59\x41\xda\x5a\x01\x49\x91\x8f\xbb\x45\x09\x8d\x6f\xb7\x12\x62\xf4\x9e\x72\x95\xa1\xa9\xc9\xb7\x1e\xfb\xa1\x51\x69\x27\x4f\xc5\x57\xcc\x28\xdf\x04\xc0\xcf\x0a\xeb\xcb\xd3\x53\x63\x83\x3b\xef\x7b\x44\xbb\x82\xac\xf4\x11\x21\x6b\x2b\x86\x43\x41\x08\x29\x82\x95\x22\xcc\x4a\xd1\x22\x6e\x67\x2a\xbd\xe8\x6b\x46\x48\xf5\x3e\x83\xd1\xb1\x1a\x68\x02\xa6\xd6\x25\x50\x02\xa2\xce\xe0\x48\x6a\xa2\x97\x62\x39\x86\xbf\x6a\x41\xaa\x4c\x66\x55\x96\x66\xe6\x60\x71\x2a\x5e\xc3\x5f\xa1\xc6\xb3\xc2\x2c\x53\x03\x5d\x75\xda\x62\x43\xc7\xd1\x4a\x3a\x37\x02\xc1\x8b\x63\xda\x79\x7d\x44\x76\xc7\xee\xeb\x49\x64\x28\xc8\x6c\x7e\x72\x83\x1b\xcf\x8e\x73\xe5\x49\x78\x51\xc7\xb1\x2f\x34\xbd\x04\xed\xf4\xb9\x30\x8c\x73\xd7\xf9\x4c\xc5\xdf\x5b\xa7\xbe\xb3\x99\x9c\x72\xeb\xa9\x3d\xe3\xa3\x72\xde\xa4\x20\x6e\x1f\xbb\x98\x0b\x15\xdc\x17\x97\x2e\xd0\xe0\x70\x28\xcc\x47\x67\xc0\xa5\xae\x9e\x1e\x02\x95\xe9\x8b\xa2\x24\xed\x17\x87\x83\xbe\x56\x34\x1a\x8d\x96\x18\xa6\xc4\x84\x30\xcf\xac\xb2\x2a\x93\xc8\x27\x28\xad\x8e\x9b\x26\xaa\xab\x45\xcf\xd6\x64\xda\x79\x93\xa5\x9d\x57\x1d\x1b\x97\x4e\x0a\x1c\xb4\x03\xc9\xb1\x8c\x2a\xb4\xab\x94\x87\xe3\xd8\x29\x09\x45\x5e\x35\xa9\x9d\x1b\xcc\x11\xde\x76\x06\x71\x56\xcd\x65\x1b\x97\xa1\x11\x9b\xba\xdb\xf9\x79\x5f\x79\x77\x36\x4b\xff\xc6\x00\xae\x0b\x96\x70\x55\xb0\x2f\x8b\x3d\x08\x7d\x78\x3b\x53\x1a\xe7\x39\xc9\xa7\xb5\x79\xce\x3a\x6a\x75\x33\xfb\x5b\x37\xe5\xf7\xde\xf5\x68\x27\x94\xb0\xb1\x63\xa1\xd6\x8e\x25\xa3\x2e\xeb\x9d\xb7\x19\x9c\xc5\xae\xe1\x33\xa7\x70\x2e\x38\xb7\x01\x1c\xdc\xde\x00\xb4\x31\xcf\xb8\xb2\x6d\x46\x99\x68\xf6\x3a\xb8\xc2\x33\x29\x98\xa4\x0f\x4c\xb9\xf6\x6a\xfb\xd5\xec\x7c\x12\x40\xe4\xef\x4f\x31\xe0\x8c\x1a\x00\xb7\x2c\x32\x23\xf6\x9c\x8f\x18\x69\x6a\x1b\xf5\xd3\x20\xdc\xfb\x6d\x4b\x3f\x3f\xf8\xd4\xa3\x41\xbc\x42\xa8\xf9\xde\x51\x59\x68\x6c\xa6\xe3\xf6\xab\x7a\x04\xbf\x30\x1a\x94\x47\x51\x42\x5b\x51\x6a\xee\x4f\x55\xf0\xe0\x4f\xb0\xef\xef\x95\xee\xd7\x77\x22\x95\xcb\x0d\xdf\x91\xaa\x65\x59\x59\x39\x4b\x4a\x87\xa2\xac\xd0\x73\x7d\xc0\xa5\x05\xe3\x4c\xd9\x3f\x96\xdf\x57\x3d\xe8\xb5\x2d\x7a\x09\x86\x2b\x36\x30\xc9\x59\xbb\x9d\x00\xd1\x6a\xec\x20\xc7\x0b\xfd\xd1\xc5\x00\x7e\xa6\xd4\x19\x10\x77\xdd\xff\xfa\x03\xcd\xef\x28\xd9\x9d\x79\x40\x79\x4b\x17\x0f\x7f\xbc\xaa\xb6\x06\xf3\xa8\x3a\x1c\x66\xbb\xb9\x89\x8e\xb0\xb8\xa9\xd9\x76\xf5\xfc\xdd\x0f\x29\x3a\xe3\xc6\x6b\xc9\xdf\x40\xce\x77\x09\xb7\x1c\x20\xce\x27\xd8\x04\x33\x06\x35\x3d\x84\xd0\x94\x03\x05\xd7\xad\x6d\xcd\x87\x52\xc7\x4f\x9e\x52\x77\xf8\x50\xd0\xbb\xd3\xb9\x17\xc1\x11\x36\xdf\x2e\xdf\xa7\x81\xdf\x5d\x83\x6d\x33\xbb\x83\xfc\x10\x77\x4e\x31\x98\x7c\x79\xf5\xb2\x58\xd5\x5b\xfa\x4d\x5e\xd1\xd5\x5b\x25\x18\x82\x58\xc7\xa3\xe0\xd9\x5a\x57\xeb\x91\x99\xd0\xdf\x29\x1a\x03\x34\xd0\x85\xc0\x18\x5e\xec\xf2\xbd\x56\x01\xd0\xae\x77\x47\x1b\x48\x68\xbc\x70\x8e\x3a\xdf\xdc\x43\xda\x19\x9d\x1f\x0e\x69\xcf\x17\x22\x64\xfb\xe9\x47\x17\x97\x28\xd5\x08\x7c\xcd\xe7\xc3\x9c\x62\x5f\xcb\xf8\xe3\xdb\x1f\x88\x82\x7d\xf0\x5e\x3a\x83\xdd\xce\x27\x40\xfa\x71\x6f\x17\x3f\xef\x55\x5c\x36\xbd\x9b\x54\x7c\x8d\x54\xa1\x01\xeb\xdd\x20\x17\xd1\x9f\x6b\x5a\xd3\x95\x3b\xc5\xa8\xa0\xa5\x8e\x9e\xed\x41\x18\xcb\x93\x70\x05\xfe\x84\x15\xec\x9a\x77\x54\x58\x15\xb1\x1a\x14\xe5\x39\x56\x1d\xa9\xae\x33\x7c\xb1\xb4\xc6\x44\xe4\x48\xb3\xba\x43\xfa\xb3\x4a\xfc\xc6\x44\xfd\x7e\x68\x00\xab\x25\x03\x06\x30\xaa\xa1\x8b\xa3\x4c\x78\xf0\xd0\x16\x12\x11\xe1\x9e\x85\xdb\x8f\xed\x16\x51\x1e\x9d\x9f\xd3\xe1\xf0\xfc\xdc\x55\x48\x83\xb3\x71\xbc\x58\x28\x3f\x8f\xf2\x7e\xb1\x30\xeb\xbc\x94\xe2\x7b\xbb\x56\x00\x72\x13\x79\x29\x74\xdc\xa8\xc8\xb5\x5b\x07\x4e\x41\xae\x43\x96\x6f\x15\x58\x9a\xb9\x4b\x03\x6d\x9f\xa2\x97\x29\xf2\x71\xb2\x40\xb0\xe8\x94\x11\x19\x1a\x84\xcd\x3d\xa2\x45\x7f\x4b\x05\x60\x37\x8e\xe1\xc0\x44\xda\x15\x55\xff\xd4\xb7\x64\xaa\xca\x38\x81\xd6\xd8\x92\x3e\x25\xb7\x6b\x10\x32\x9b\x28\x70\x29\x3a\xb3\xfa\xba\x9e\x66\x9a\x81\xf7\x52\xc4\xa0\xfc\x91\x91\x1d\x16\xfe\x80\x08\x84\xc5\xd8\x83\xc0\x6b\x5d\x83\xf9\xfd\x6d\x10\x3e\x9f\x80\x88\xbd\xf2\x54\x70\x5e\xf7\x5e\x6b\x6a\xa6\x6a\x51\x2d\x78\xb7\x2d\x3e\x7a\xb7\xc5\x6c\xe7\xd0\x33\x63\xd1\xea\xd3\xa4\x2e\xb7\x89\xbb\xb0\x49\x93\x00\xb5\x45\x1b\x29\x39\xe8\x17\x0d\x97\xe3\x44\x9f\xc0\x8c\x09\x27\x41\x5b\xe5\x8a\xf2\x04\x22\xbf\xe9\xd6\x9c\x94\x55\x5a\x9e\x63\xfc\x76\x38\x6c\xbd\xa3\x2b\xe7\x05\xe0\xb1\x0a\xd1\x23\x37\x26\xaa\x47\xf5\x61\xa0\xc3\x64\xeb\xb4\x36\xa8\x48\xf2\xb8\xaa\xfd\xe3\xea\x41\xc9\x50\xe9\x96\xd4\xf2\xe0\xd2\xdc\x3a\xf2\x85\x40\xab\xcb\xd0\xd1\x9b\x6c\x44\x76\x36\x1a\xa1\x35\x49\x0b\xf2\x3e\x5d\xe3\x25\xe6\x33\x36\x47\x68\xbc\x65\xfa\x70\xa9\x70\x21\xc5\x67\x18\x4b\xad\x7d\x04\x29\xf9\x9c\x90\xad\x2f\xdd\x2b\xed\xc5\xb9\x94\xf9\xdb\xc9\x95\x88\x2d\xcf\x0d\xef\x23\x3a\x9b\x40\x6c\x18\x07\x37\x42\x9e\x41\x03\xb6\x08\xe1\x25\x29\x9b\xb5\x5d\x8d\xa2\xd8\x6f\x8d\x56\x68\xda\x7d\x35\xb6\x13\xa6\x70\x5f\xd7\xa0\xb2\x4b\xf3\x28\x0d\x42\xc1\xa1\x78\xc7\xe8\xc7\xec\x42\xb5\xcf\xac\xa9\xa0\x6c\x52\x19\x8a\x1c\xfb\xda\xad\x19\x3b\x8d\xda\x85\x47\xd3\x2e\x8c\x37\x71\x06\xa3\x84\xc6\x2b\xb6\x7a\x06\xe5\xbe\x2d\x0a\x50\x0f\x45\xba\x0a\xf0\x4d\x4a\x83\x10\xdb\x4d\x0e\x5e\xe7\xc8\xea\x0e\x33\x27\x60\x58\x19\xc7\xa7\x34\x78\x88\x0a\x0e\xe0\xc9\x6f\xd2\xf1\x08\x4d\x9f\xa0\xd9\x64\x1e\x38\x95\x77\x71\xd1\x6c\x71\xea\xd2\xa3\x9d\xa0\xdf\xbe\xb1\xb5\x1d\x66\x74\x9e\x0a\x88\xa8\x62\xe5\xb4\xab\x54\xc1\xf4\x22\xcc\xfb\x00\x8e\x7e\x2d\x64\xb8\xf5\xe3\xc8\x70\x9f\x89\x08\x07\x8e\x58\xeb\x38\xec\x18\x23\xa5\xa7\x75\x2e\x48\x69\x60\xc7\x72\x52\xfa\x62\x72\x7b\xe8\xbd\xda\x81\xb6\xfc\x12\x7b\x1d\x8b\x8d\xf4\xb8\xdd\x8e\xc7\x95\xbd\x7e\xc4\xb4\xe6\x97\x03\xcb\x19\x06\x3b\x7a\x9a\xf7\x75\xe1\x08\xbc\x5c\x30\x86\xe6\x4c\xf4\x31\xdd\x7b\x00\xe8\x8e\x18\x09\x79\x43\xa7\x33\x1e\x85\xb5\x53\x50\x47\x47\x2d\xa2\xfd\x33\xac\x0d\x91\x64\x5c\x35\xa2\x96\x45\xfd\xb3\xaa\x69\x40\xb4\x65\x47\xd0\xc6\x06\xd1\xa3\x2a\x80\x1a\x6b\xd9\x2d\x87\x0e\x00\x26\x4b\x78\x8b\xe7\x19\x68\xc9\x33\xfb\x11\xc5\x68\x40\x06\xa3\xc7\x80\x0b\x8b\x13\x23\xda\x3e\xa7\xfd\xa8\x88\xa1\x5b\x74\xe6\xcb\xc6\x2d\x46\xde\x1a\x20\x08\x65\x80\x60\x7e\x72\xf8\x39\x13\x73\xa4\x30\xde\x6a\x8e\x52\xf9\x73\xc6\xe7\x38\xd1\x2d\x04\x96\xe2\x14\xaf\x8c\x16\xe3\x0e\xf2\x54\x9c\x77\x59\xac\x99\x8f\x9a\xe6\xb6\xec\xa9\xae\x1a\xd6\x04\xd1\xe2\x0e\x3a\xa3\x44\x8b\xad\xe3\xde\xc9\xa6\x48\xe1\xb9\xb7\xde\xae\x66\xdb\xdb\xf9\x69\xe0\xf4\x19\xed\x6b\x73\xba\x14\xa6\xf8\x33\xc7\xfd\xc6\xa2\x5f\x96\x47\x58\x61\x1c\x43\x8e\x33\x48\xa4\x71\x96\xa1\x7b\xeb\x56\x0e\x87\xb9\x15\x13\xce\x89\x24\x4b\x79\x2c\xbc\x55\x89\xd0\x54\x37\x26\x1a\x4b\x83\xa2\x2c\xe5\xa4\x8d\xb4\x5d\x36\xf8\x58\x26\x1b\xa2\xd7\xca\x8a\x08\x21\x84\xf5\x0d\x75\x39\x1c\x9a\xbb\xdd\x00\x38\xa9\x00\x33\x05\x5d\x64\xe9\x45\xda\x2a\x10\x8e\x61\x2d\x8d\x15\xc0\xf7\x70\x68\x9e\xd2\x9e\x74\x36\x88\x87\xba\x8f\x61\x26\x0a\x82\x9c\x29\x80\x3d\x06\x56\xf4\x85\xce\x19\x97\x75\x30\x8f\x8a\xca\xe5\x31\x29\x72\xd0\x06\xac\x61\xb8\x20\x42\x1e\xa0\xa0\x8f\x8f\x28\x28\x8a\xf9\x19\x40\x43\xc9\xaf\xb7\x54\x5c\x07\x7b\x3c\x05\x33\x04\x75\x40\x58\xac\x0d\x45\x14\xb6\xc4\x1a\x04\x14\x78\xe9\x66\x7a\xab\xcc\x81\xe4\xf6\x37\xd1\x93\xcd\x0b\x72\x3e\xc1\x4b\x40\xf7\xcf\xbb\x4a\x98\x10\x25\x01\xe7\x0e\xd6\x60\x8b\x99\xd1\xf4\x01\x13\xec\x55\x85\xf0\x72\x1c\x78\x35\xa7\x05\xc2\xd5\x70\x78\x0e\x3a\xea\x88\xff\x36\x4a\x97\xe8\x28\xfe\xd1\xb2\xae\x44\xb1\x73\x00\x48\x03\x75\x16\x0f\x0a\xee\x01\x1e\x29\x40\x24\x0d\x7b\xa4\xa1\xa2\x15\xf0\x91\xe9\x72\xa3\xe6\xd9\xd6\xfb\xc8\x54\xf7\xcd\x1e\x8f\xcf\x99\x98\x2b\x4f\x06\x67\x5c\x15\x42\x42\x1d\x0e\x75\xc7\xa3\xbd\x31\x34\xa2\x2d\x5e\x7b\xf7\xbb\xea\x46\xd9\x59\xa3\xc5\xce\xaa\xb3\x7c\xec\x16\xb0\x4e\xd1\x5d\xd1\xa9\xe4\xf9\x83\x01\x70\x49\xbb\x83\x92\x1a\x1f\x42\x6f\x70\x00\xe3\x4f\x72\x22\x85\xbe\xc4\x86\x3d\xca\x71\xe2\x61\x2f\xe3\x02\x35\x67\xb9\x86\x89\xff\xf1\xed\x0f\x81\xbe\xaf\x50\x41\xc1\xcc\x41\x51\xf9\x98\xd7\x3f\xbe\xfd\x01\x74\x18\x41\x7d\xee\xdb\x63\x75\xc2\xea\x34\x89\x8f\x55\x0a\xc2\x7f\x3e\x0e\xa4\xe9\x20\x3d\x0f\xbf\x01\x23\x91\x8f\x43\xf9\x24\xb4\x25\x29\x65\xa6\x30\x81\x7e\xaf\x66\xb8\x7b\x51\xd5\x2b\x6b\x9c\x7d\x50\x64\x54\x66\xf7\xd2\x00\x16\x1a\x9b\xa6\x2b\xba\xa5\x82\x0e\xc4\x8c\xce\xb1\x98\x19\xe7\x81\xb9\xc1\x06\x8e\x7a\x8a\x94\x11\x2f\x0f\x87\xe6\x28\x0f\x56\x79\x6c\xf2\xb8\xe3\x5c\xa9\xc2\x42\x1a\x27\xe8\x52\x8a\x7a\x28\xde\xa9\xb8\xe5\x9f\x24\x90\x84\xd0\x29\xcd\x92\x5c\x8a\x39\xea\x42\xe9\xfb\x77\xaf\x5f\x8d\xd5\x61\xc5\xd6\x52\xf4\xc9\x12\x08\x43\xd6\x73\xaf\xd7\x2a\x3a\x3e\x46\x00\xb9\x2a\x4f\x90\x70\x90\x4a\x7d\xdf\xa6\xe5\x98\x1e\x57\x18\x8e\x4b\x33\x48\xa5\x1e\x24\xe8\xe7\xe3\x2e\x83\xb1\x9e\xde\x14\xc5\x96\xe6\xfa\xf2\x2c\x11\x65\x4d\x21\x1c\x57\x96\xf0\x7a\x77\xa3\x5c\xdd\xc5\xf4\x15\x3c\xa7\x14\x29\x0b\xd8\xd7\xeb\x14\x05\x63\x04\x03\x7f\x85\x52\x18\xab\x7d\x5e\x56\x92\xa7\x45\x99\x1c\xa5\x7d\x59\x73\xda\xe3\x75\x12\xb7\x7a\x20\x96\x9d\xf1\xbd\xa4\xa8\xb3\x58\x65\x03\x00\xa1\x4f\xb9\x14\xf1\xf2\xfd\x8c\xcd\xd1\x70\xc8\xfb\xdd\x5f\xc4\x8c\xcd\x87\x43\x3b\xd4\x6c\x0e\x02\x75\x9f\xf8\xef\x63\xf9\x11\xe5\x59\xbf\x86\x60\x5f\xca\x0a\x0e\x94\x60\x70\x8e\xa5\x51\x11\x01\x4b\x6e\x4f\xeb\x19\xf7\x65\xb1\xa4\x95\x16\x3c\x5c\x7d\xfe\x2d\x70\x8e\x05\xae\x70\xa9\xe3\x03\x9a\x6b\xe5\xca\xe2\xe6\xc6\xf0\x7c\x55\x1e\x86\xf4\xfd\x76\x5a\xf4\x0a\x2b\x1d\x51\xb1\xc0\xb3\xdc\x02\xeb\x8a\x16\xb0\x6e\xd5\xcc\x91\xa7\x26\xa8\xb5\x9a\xa0\x86\x59\x7c\xac\x27\x91\x41\x6c\x79\x55\xf4\xda\x13\x1a\xf4\x61\x00\xbc\xe8\x30\xd3\x0f\x0d\xae\xe2\xaa\xbe\x76\x39\x81\x90\x1f\x60\x57\x54\x28\x9f\xd5\xf3\xc3\x21\x05\x18\x8a\x6a\x56\xcf\xb5\xcd\xd3\x62\x5d\x6f\xb7\xf7\xef\x96\xc5\xbe\x83\x98\x6c\x70\x11\x8f\x24\x29\x5a\xd3\x56\x4a\xea\x0e\xa3\xd5\x9e\xb3\x1e\xf0\x68\x46\xde\x59\xfa\x60\x5a\xb4\xb9\x5f\x01\x48\x33\x97\x9c\xc1\x96\xf9\x4c\x7b\x95\x32\xc8\x6b\x35\xd6\x11\xb3\x02\xd6\x32\x2b\x40\xb8\xd4\x96\x86\x47\xb7\x62\x37\x9f\x62\x41\xfe\xfc\xe6\x25\x15\x79\x54\xa9\xa5\xd3\x7b\xd6\x1f\x81\x2a\x1c\x8c\x0e\x1a\xdc\xda\xc7\x11\xc6\xc1\x57\xe9\x1a\x50\x44\xbc\x25\x74\x56\x5f\x5c\xce\xb5\xf1\x10\x09\xae\x9c\x66\x5b\xe0\x60\x96\x8e\x45\x54\x8e\x1f\xe7\x13\xbc\x21\x00\x63\xf8\xd0\xe0\x95\xc1\x01\x51\x46\x5a\xf5\xd3\xd1\x48\x20\xb6\x4e\x3d\x56\x42\x75\x0e\xa4\x4b\xa4\x74\x5e\x4a\x8d\x5b\xfa\x1e\x95\x6c\x34\x42\x69\x45\x36\xb3\x5c\xee\x34\xf8\x24\x29\x8e\x39\xcf\xd0\x70\xd8\x76\xb7\x01\x7d\x6d\xdb\x9a\x78\x33\xcb\xe7\x58\xfe\x47\x0a\xbc\x52\xf6\x75\x85\x0e\xbd\x69\x96\xcf\x1e\x03\x3d\x43\x0d\xf8\x0a\xad\xc9\xf9\xa5\xb6\x19\x04\xac\x8a\x15\x60\x55\xec\x2d\xd4\x91\x53\xe5\xba\x51\x21\x3b\x84\x77\x52\xa6\x8c\x2d\xd9\x5e\x67\x60\xef\xea\xdd\x5f\x8f\xc1\x82\x30\x96\x23\x98\x11\x6b\x39\x52\x7e\xc5\x8c\xc7\x6f\xd1\x19\x54\xb0\x26\x01\xa1\x3e\x27\x13\x5c\x91\xc2\x1f\xd3\xfc\xab\xea\xe9\x68\x94\xa3\x74\x4b\xd2\x5a\x7d\x9a\xe5\x9e\xf1\x09\x1f\x0e\x6b\xf8\x21\x59\xd1\x2e\x7e\x82\x4d\xd2\xfd\x24\x33\x38\x57\x55\x48\xa4\x7d\xd5\x87\x43\x29\xca\xc5\xf2\x0c\x87\x29\x9f\xc5\x3e\xcc\x09\x9f\x6d\xe7\x58\x9f\x1c\xf2\x59\x2e\xe8\x63\x1b\xf4\xa4\x31\x6e\x59\x50\x6d\xba\x2e\x2a\x7d\x76\x3a\xca\x7f\xac\x77\xa4\x0b\x32\x81\x70\x0b\xde\x48\x17\x5f\xe5\x4f\x47\xa3\x02\x55\xea\xf5\xac\x98\xe3\xb4\x26\x95\x1d\x69\x21\x97\xaf\x1a\xe9\xaa\x67\xa4\x21\x49\x6c\xa4\x2b\x6f\xa4\x21\x91\x1e\xe9\x69\x7d\x4e\x48\x2c\x8b\x5c\xb1\xb3\xd8\x87\x39\x11\xb3\xda\x0e\xb4\x7c\x46\x99\x72\x32\x5e\xc7\xdc\x74\xaa\xa8\x9b\x4e\xa5\xdd\x74\xa8\x76\xd9\x40\xb8\xaf\xb2\x8d\x15\x01\xb1\xea\x3c\xae\x5a\xae\xc2\x92\x6d\x5c\x6e\xe8\xaa\xb6\xc6\x06\x60\xb3\x11\xd5\x31\x3d\x7a\xe3\xb6\xa8\xba\xdf\x94\x1d\xb7\xa9\xe3\x35\xb0\xfb\xda\x3e\xc6\xa5\xac\xd4\xcd\x1b\x4e\xf4\x05\x79\x58\x47\xa2\x61\x07\x82\x20\x0c\x9d\x38\x0e\x0a\xd0\x25\x96\xbf\x0b\xed\xf2\x19\xa7\xb5\x82\x64\xde\x58\x9b\x04\x4f\x91\x16\xe6\x8f\xbe\xec\x1e\xdd\xca\x97\xec\xcc\x5d\x40\xfa\x81\x26\x14\x88\xa0\x01\x49\x38\x9f\x38\xf0\x54\xe3\x7f\xd5\x3f\x09\x11\xfb\x88\x6e\x22\x38\xba\xca\xb1\x2a\xc4\x30\x76\x91\x74\xc7\x26\x14\x1c\x8f\xf1\x62\x97\x97\x1f\x40\x2f\x70\x55\x29\xa1\x36\xa6\x2b\x0c\xec\x1d\xc6\xf9\x6a\x05\x92\xdb\x82\x55\xf0\x26\x96\x2f\xd0\x23\x87\xd9\x0d\x60\xfe\x62\xb9\xa5\xb9\xc9\x0c\xdf\x1e\xad\x59\x6d\x38\x95\xbb\xa3\xbd\x89\x80\xc5\x28\x60\x1d\xb0\xc8\x76\x50\xbe\x98\x85\x36\x79\x45\x8f\xbe\xb7\x98\x71\xc5\x82\xf1\x79\x4c\x33\x65\x5c\x1f\xe4\xf7\x59\x69\x2f\xc8\xf2\xc3\x21\xed\xb9\x76\x1c\x83\xa1\xd0\xb3\x0d\xdb\xae\x5a\x7a\x27\x8e\x1f\x8c\xc9\x60\x76\x3e\xf1\x71\x86\x59\x83\xd0\xf8\xa6\x28\xc0\xfd\x56\xd5\x44\x72\x84\xf3\xc0\x46\xf7\xb6\xe5\x60\xab\xad\x69\xa9\x45\x9e\x7e\xca\xbf\x26\x93\xa7\x17\x17\x5c\x52\x64\xa7\xb1\x64\x24\x2d\x89\xc2\x71\x36\xb7\xc5\x1a\x78\x55\xa4\x0c\x97\xe6\xea\xab\x91\x05\xdf\x90\x07\x29\x86\x6b\xb3\x8b\x97\x6d\xef\x3e\x38\x3c\xf4\x62\x8b\x10\x22\x13\xb1\xa0\x35\xcb\xed\xb8\x08\x72\x6a\x66\xae\xd9\xf3\x33\xd9\xb3\xd0\x1e\x96\xad\x53\x7e\x4e\x08\x03\x9f\x87\x8f\x29\x35\x48\xc4\xc8\x5e\xd4\x95\xe3\xc8\xa2\x4e\x05\xc4\x9d\xe8\xb9\xe4\x4a\x0b\x2c\x10\xd6\xfc\x8b\x94\xa3\x16\x5e\xc1\xc6\x70\x22\x57\x46\x4f\x9f\x5d\x76\xae\xca\x46\x4d\xdb\xa9\xd8\xc8\x8f\xb3\xb9\xf5\x89\x3c\x63\x00\x1f\xde\x56\xde\x46\xdf\x29\x2b\x92\xf7\x9b\xb2\xf8\xc8\xa7\xc1\xaf\x8c\x9e\x81\xd2\x16\xb8\x36\x81\xc0\x77\x86\x8d\x77\xb4\xaa\xf2\x5b\x6a\x3f\xd8\x37\x80\xcf\x20\xf2\xe5\x07\xef\x13\xfc\x46\xb8\xa3\xf5\x66\x2e\x0d\x42\x4f\x53\x4e\x96\x05\xaf\x8a\x2d\x45\xaa\x7e\x2d\xb6\x81\xd7\x80\x64\xaa\x61\xa0\x06\x1f\x37\x6c\x4b\x07\x5a\x26\x63\xfc\x56\x69\x14\xb3\x41\x32\xe2\xda\x4a\x03\x04\xd4\x06\x6b\x32\xd9\xab\xc2\x91\x3b\xf9\xd8\xfa\x50\x42\x1c\x53\x2a\x70\xb3\x3e\x2c\x70\xb5\x0b\x7f\x71\x64\x21\x74\x97\x81\xcd\x6f\xb7\xf8\x34\x3d\x52\x42\x0e\x93\x9d\x89\xf1\x9e\xdd\x15\x46\x51\x78\x4e\x08\x6d\x50\xd3\xb8\x3d\xbb\xf0\x5c\x62\xdb\xd4\x42\xce\x48\xe0\x92\x54\xb4\x8d\xcb\x47\xc9\x22\x19\x59\x83\xe3\xeb\xb4\x74\x46\xf0\x98\xa9\x8f\xb8\x40\xd3\x22\x4b\x12\x67\xab\xfc\xf1\x17\x55\x89\x73\xd2\xb6\x5e\x2e\xa6\x3c\x2b\xc0\x7a\xb9\xa7\x29\xed\x0c\x6c\xca\x33\xa6\x32\xe0\x1c\x4d\xf3\xa0\x79\xd7\x6d\x59\x53\xb8\x1b\xc7\x12\x41\x83\xe4\x6f\x65\x16\x96\xeb\xdb\x77\xe7\xb1\xc4\xc1\x73\xaa\x93\xa2\xeb\xc6\xc7\x86\xc3\xc2\xd5\xfa\xa9\xc5\xf9\x12\x6e\xe0\x0e\xc0\x41\x81\x2a\x46\xc3\xb8\x29\x38\x5d\x7a\x61\x59\x89\xe4\x59\xce\x7f\x27\x06\xfa\xb8\x1f\x28\x74\x84\xc1\xef\x20\x0c\xf6\xef\x06\x37\x74\x99\xd7\x15\x1d\xdc\x17\x75\x39\xc8\xf7\xfb\xc1\x26\xaf\x64\xf2\x35\xe3\xac\xda\xd0\xd5\xc0\x69\x3d\xe4\xce\x60\x5c\x14\x03\x26\xaa\xc1\x9a\x95\x95\x50\x1b\x65\x3c\x78\x5f\xb8\xe2\xb9\xa9\xa1\xe0\x83\x15\x00\x3a\x40\x4f\x55\xd2\x6a\xb0\xaa\x4b\xa5\xda\x77\xe5\x62\x59\xf9\x60\x99\xf3\xc1\x32\xdf\x6e\x07\xff\x05\x58\x0f\x29\xfa\x2f\x59\x82\xd8\xd0\xc1\x7f\xb9\xf5\xfb\x5f\x03\x45\x66\x06\xfb\xbc\xaa\x64\xe3\x0a\x95\x02\x2c\x13\x9e\x78\x5e\xe3\x4f\x9c\xcf\xf8\x7f\x0d\x36\x45\xf1\xa1\x1a\x27\xa8\x51\x27\xe2\xf9\x65\xd7\xc7\x4f\x4b\x08\xde\x91\x54\xca\x23\xa9\xbc\xb8\x90\x47\x52\x4d\xd2\x8a\xd0\x59\x39\xf7\xce\x21\x8b\x33\xe1\x3d\x4a\x41\x16\x8c\xb0\x26\x20\x1a\x29\x62\x23\x85\x7f\xb3\xb3\x65\x65\xa9\x26\xdc\x04\x4e\x09\xcf\x49\x2a\x42\xb9\x39\x58\x78\x9c\xe5\xe4\x7c\xd2\xa8\x6b\x9e\x9b\x19\x03\x61\x7d\x8b\xb6\xfe\x85\xb1\x1f\xdf\x09\x39\x74\x8c\xf3\x7c\x38\x3c\x17\x28\xba\x2c\x5e\x15\x62\x23\xa7\x42\xb3\x30\x30\x90\xe1\xe2\x18\x0f\xbe\x5b\xc3\xdc\xac\xd8\x4a\x27\xf3\x52\x61\xe0\x9e\x06\xd0\x19\x98\xbd\x1b\x3a\x80\xb5\xb4\x1a\xdc\xdc\x0f\x54\x87\x65\xf9\xa2\xac\xe9\x60\x5d\x16\x3b\x6f\x6d\xe8\x61\x94\x92\x4e\xee\x61\x68\x63\x28\x00\x32\xb9\xc6\x88\x62\x70\x53\xdf\xdc\x6c\xa9\x9c\x41\xbb\x2f\xde\x75\x24\x42\x42\xbb\x6c\xb1\x1c\x20\x6d\xa1\x00\x90\x8d\x39\x29\x42\x61\x51\x0a\xd2\x7b\xa7\xe1\x52\x32\x62\xee\xcb\x88\x00\xbe\x55\xce\xd1\x98\x55\x9a\xb9\x58\x4d\xab\x19\x03\xce\x6d\x4e\x98\xce\x9d\xf9\xaf\xac\x22\x29\x65\xc6\x87\xde\x43\x6a\xb5\x5d\x78\xed\x33\x82\xa7\xb8\xc8\xb1\x75\x0a\xa8\xf3\x06\xb4\x51\x93\xca\x3b\x9d\xf9\x4d\x2e\x36\x29\x97\x94\x88\xcf\xb8\x17\x5a\x8b\x2b\xea\xa8\x62\x28\xc5\x0c\x43\x9f\xba\xdb\x15\x6a\x6f\x57\x20\xe6\x9b\xd6\xa4\x76\x3e\xba\x30\x72\xb8\x88\xa7\x80\xcb\x99\xdc\x43\xa3\x0c\xa9\x79\xcc\x11\xd4\x27\xc6\x08\xae\x41\x83\xb6\x30\x3e\xa8\x40\x7d\x0c\x0e\x33\x8c\x53\x23\x84\xa2\xb4\x0a\x5b\xed\xb7\xa8\xea\x76\xa8\xdb\x89\x93\x8a\xf6\x43\xe7\xc5\xca\x0f\xc6\x04\x35\x6e\x9e\xaf\x7c\x36\xa1\x25\xe6\x61\xd1\x11\xf0\xa8\x15\xde\x02\x8b\x9b\xc3\x41\xc4\x4c\x49\x39\xc2\xa2\x4f\xc2\xdb\x97\xc5\x8e\x55\x94\xd0\xf1\x12\x20\x26\x7c\x01\x04\x4c\x45\xc7\x2d\x11\x29\xa5\xd6\x06\xf8\x4c\x8c\xbb\x02\x90\x94\x6c\xbc\x3d\xf8\xa1\x7d\x22\xd2\xce\x35\x83\x70\xd7\x0c\x45\x0f\xea\x71\x81\x86\xc3\x32\x2d\x30\x9f\x15\x73\x15\x72\x60\x56\xcc\xbd\x5a\x5e\x5a\x79\xda\x33\x6a\x91\x62\x04\x99\xd1\xf9\x53\x66\x9d\x0a\x9f\xaa\x48\xc0\x5c\x6e\x40\x75\x42\x22\xdf\x16\x94\x10\x22\x5c\x7c\xb1\xa0\x51\x25\xe1\xda\xfe\xb3\x42\x4c\x71\x8f\x25\xb4\xc1\x35\xe2\xbd\x4f\x6e\xbc\x3b\xd9\x07\xed\xe1\xce\xb5\xb3\x66\x95\xc5\x8c\x04\x3e\xe6\xd5\x8f\x15\x5d\x65\xe7\x97\x46\xdd\x98\x16\x04\x78\xb4\x62\x2a\xbb\xa7\x1e\x51\x26\xc0\x9d\x4b\xaf\xac\xc2\xb4\x09\x9b\xd6\xe1\x1c\x65\xfb\xf1\xeb\xb7\x6f\xbe\xbd\x7a\xb5\x78\xfd\xe3\xfb\x1f\xae\xdf\x2f\xde\x5e\xbf\x7a\x7e\xfd\x76\x38\xd4\xa5\xa5\xc6\xcd\xb7\x1a\x2f\x16\xe0\x3b\xb4\x28\xca\xfd\x26\xe7\xd5\x62\x71\x38\x1c\xfb\x6a\xbb\xa2\x82\xcb\x24\x9d\x04\x49\x73\xac\x8f\xe0\x7d\xd2\x5b\xb8\xf9\x32\x53\xcd\x9c\x93\x1c\x07\x0a\x1b\x94\x26\x70\x60\x2b\x94\x9a\x00\x43\xbd\x41\x28\xa3\x24\xc7\x0f\xce\xda\x37\xa3\xd8\x58\xe8\x66\xb9\x37\x49\xcf\x42\x89\x4d\x8d\xac\xe7\x99\x6e\x04\xb0\xc3\x21\x15\xb6\xad\xbb\x9c\xf1\x56\xdf\xb9\xcf\x67\x2a\x1f\x5c\x65\x39\xec\x46\xe0\xa1\x69\xb0\x40\xcd\x5d\xe8\x10\xb7\xcb\xf7\xbd\x5a\x86\xd0\x8d\x28\xed\xbc\xb3\x60\x96\x41\x89\x7e\x8a\xac\x93\xa7\x31\xa0\x40\xfe\x4b\x1d\x9f\x49\x7d\x69\xb0\x3b\x1b\xa2\x46\x06\xb3\xb9\xe3\xf9\x4b\xdf\x59\x30\x12\x59\x69\x34\x02\x01\x5d\x4a\xe4\x10\x22\x9d\xcf\x3b\xe1\xad\x15\x9b\xc2\x1c\xba\x83\xc7\x5e\x09\x72\xf9\x54\xb8\xd2\x84\xb1\x09\x97\x42\xb5\x50\xc7\x94\x17\xe8\x0b\x17\xe4\xde\x44\x15\x7b\x5a\x58\x13\xec\x73\x49\x2a\x18\x7a\x8a\x0a\xcb\x07\x73\xe8\xb1\x15\xed\x98\x76\x84\x34\x79\x10\x6a\xac\x5c\xf5\xcf\x82\x71\x28\xbd\x09\x5c\x15\xef\x4e\x72\x55\x34\x4e\x79\x8f\x84\x9c\x38\x35\x94\x43\x34\x5a\x9f\x6f\x33\x6c\xa6\x85\xfe\x1a\x21\x37\xb0\xf8\xd2\x38\x56\x90\xfb\x8b\x43\xd8\xb8\x70\x1f\x30\x2e\xca\xdc\xc5\x84\x34\x28\xb5\xd3\x08\x11\xe1\x6f\xd8\xda\x84\xc7\xa2\x03\x86\x76\xa7\x24\x34\x94\xb0\x11\x4a\xcd\x15\x67\x50\xa0\x75\xed\x09\x3e\x75\x2d\x59\x4b\xac\x60\xd0\x55\x38\xe4\x62\x38\xf4\x91\x5a\x59\x18\x11\xb9\x1d\x3d\xae\xb1\xf7\x9c\x5e\x77\x7b\xa2\xc8\x96\x38\xd7\x17\x9e\x61\x9c\xe4\x1c\x57\xed\x08\xc9\xed\xd8\x96\xe5\x23\x0b\x56\x78\x5a\xed\xd9\x3c\x24\xa7\xf1\x8c\xda\x31\xf5\xb3\x9c\x71\x8f\xf8\xde\x9e\x14\x45\xb9\x6d\x76\x1e\x09\x35\x94\x4a\xee\xc5\x38\x36\xfb\xaa\x15\x8b\x7f\xe1\x22\xf8\x68\x7f\xf9\x80\xb9\x08\x23\x44\x4c\xe9\x78\x5f\xec\x53\x34\x6e\x85\xf8\x78\xb0\xf4\x3e\xa3\x16\x4d\x50\x59\xbb\x67\x14\xfb\x89\x39\xc4\x8f\x8b\x98\x2f\x44\xda\x4e\x3b\x6a\xf9\x69\xf7\x55\x04\x03\x20\xa3\x91\x97\xf6\x5a\x78\x26\x5a\xac\x7d\x83\x69\x1b\x59\x8f\x74\xae\x22\x24\xaf\x07\x18\x55\xef\x64\x4a\xe3\x01\xa4\xfd\x7f\x48\xb7\x50\x90\x17\x4e\x8c\xe6\x5b\x40\x64\x06\xb9\xcf\x23\x28\x09\xf2\xcc\x28\xe1\xac\xc0\x20\x49\x99\x58\xbd\xc8\x39\xd5\x54\xa4\x44\xb8\x34\x48\xf7\x0c\x97\x0e\xef\xc3\x01\xe7\xa7\x25\xae\x24\x4b\x1c\xf4\x02\xc2\x04\x61\xda\xbd\xd3\xea\xce\x06\x44\x3c\x81\x1b\xc3\x2f\xa5\x83\xb3\x39\x5e\x86\x61\x44\xd7\x24\x49\xbc\x2b\xf1\xad\xeb\xb3\x40\x9c\x6c\x67\x62\x8e\x19\xc9\x55\xd0\x26\xab\x71\x58\x0e\x87\x29\x1b\x0e\xc1\xe8\x66\x39\x4d\x6b\xa2\x5c\x8c\x20\xda\xe1\xeb\x75\xca\xd0\x94\x8f\xab\xfa\xa6\x12\x65\xca\x5c\x98\xca\x8c\x2b\xb4\xf6\x52\xd9\x03\x2c\x67\x6c\x8e\x6b\x84\xb2\xe0\x25\xe6\x08\xe1\xf5\x88\x24\x59\x06\xd1\x21\xb3\x64\xe4\xbc\x71\x47\x6b\x8b\xee\x52\xe0\xe4\x22\x01\x03\xbc\xe3\xf1\x42\x62\xa3\x48\x1e\x1a\xaf\xcb\xd4\xef\x72\x05\x37\xff\x5e\x50\x6e\xae\x6c\xfc\x9c\xcb\x0a\xa9\x41\x2a\x69\x43\x94\xc6\x42\xb6\x10\x3e\x9b\xcc\x95\x21\x74\x4b\x0f\x28\x65\x78\x77\x03\xa1\x42\x69\x3b\xe0\xac\xae\x1d\x34\xac\xff\x3a\x2d\x7d\x4b\x53\xe6\xd4\x20\x6f\xca\xe2\xb6\xcc\x77\xbb\x5c\xb0\xa5\xa7\x94\xaa\x06\x37\xf7\x83\x1f\xdf\xfe\x30\x58\xe6\x9c\x17\x62\x70\x43\x07\xa0\xda\xf8\xc8\xc4\x86\x79\xd6\xa7\xe3\xc1\x9b\x2d\xcd\x2b\xf8\x0a\x5a\x0b\x65\x8d\xca\xd5\x65\x6f\x25\x68\xae\x2c\x51\x49\x0e\x7a\xc5\x12\xcb\x7e\x91\xb2\xf1\x87\xc8\x27\xff\x31\x14\x13\x87\xf4\x03\x8e\x71\x6a\x9b\x29\x2b\x7f\xc9\x8e\xb5\x69\x1e\x47\x4a\x5a\x8a\xb2\x69\xa3\x51\x63\xb3\x0b\xd4\xa1\x97\x1c\x0d\x87\x6c\x34\xb2\xac\x32\x21\x84\x29\x18\x91\x82\x3c\xf9\xc7\xf8\xc9\xad\xe3\x16\xf3\xd6\xad\x0e\x69\x71\x6f\x7a\x6f\x28\x7a\xc0\x7c\x1f\x3a\xc3\xa1\x4d\x30\x1f\x5d\x22\xc7\x94\x61\x70\x67\xb5\x5b\xa1\x44\x2a\x70\x77\x41\xca\x88\xf6\xa4\x72\xd5\x43\xe5\x21\xaf\x09\x5c\xc0\x80\xf1\xd8\x05\x41\x9a\x16\xe4\xa1\x41\x33\x36\x27\x0f\xb9\x0a\xd1\xd1\x60\x46\x0a\xa4\xf5\xf3\xe7\xac\x3d\x2a\xb9\x51\xe0\x75\xcc\xec\x65\x6f\x66\xf9\x5c\x07\x03\xca\xab\x4c\x9e\xcc\x92\xa0\xe6\xf3\xc3\xc1\x94\xae\x23\xaa\x68\x64\xab\x26\x34\x72\x2a\xc0\x00\x09\x0c\x59\x3c\x51\xa6\xf6\xe2\x10\x76\x20\x9d\x86\xc3\x34\x01\xab\x42\xf0\x44\x93\x0f\xb3\xc9\xbc\x15\xfd\x4d\x81\x5c\x3c\xd1\x41\x54\xbb\xc7\xba\x49\xe0\x31\x0d\xfa\x06\x27\x96\x62\xc7\x3e\x31\x5e\x3d\xb1\x3e\xcf\xfb\xb2\xf8\x74\x7f\x2c\xe5\xb2\xe0\x22\x67\x9c\x96\x47\x92\x2e\x8b\x7d\xdf\x87\x9d\xe4\x96\xa2\xdf\x58\x75\x41\xe5\x3e\x39\x56\xb9\xb2\xa4\x3c\xda\x3a\x59\x81\x24\x18\xc7\xc6\xc3\x61\x3a\x1e\x49\x04\x75\x1d\xe9\x64\x30\xb6\x8f\xa7\x5b\x16\x25\x5d\x3c\x3e\x11\x4a\x35\xaa\x6f\x9f\xcb\xe3\x5d\xdd\xdf\xf7\x76\x54\xa7\xa1\xbc\xde\xd1\xfe\xe1\xd0\xa9\x2e\x1e\x9d\xf4\x02\xa0\x86\x1f\x2b\x67\xa7\x48\xf5\xe2\xb4\x5a\x95\x56\x6b\xa1\x3b\xac\xad\xfb\x8f\x76\x46\x81\x8f\x1c\x4b\xa2\xf5\x62\x47\x66\x83\x7e\x12\x4f\xca\xea\x6e\x1f\xfd\x28\xb7\xe1\x45\xb1\xee\xcd\x68\x3d\x50\x4e\x05\x66\xc1\x3b\x7c\x8f\xef\xf0\x2d\xbe\xc1\x0b\xfc\x11\x5f\xe3\x4f\x1d\x56\x59\x59\x61\x13\x3a\x2e\x38\x30\xd8\xda\xec\x90\xd0\xf1\xdb\x77\x7f\x79\x43\xe8\xf8\x8d\xea\xd3\x1b\xd9\xa5\x97\xb2\x9b\x84\x1a\x1c\x16\x42\xc7\x8a\x4f\x55\x11\xef\xde\xa9\x31\x24\x74\xfc\x52\xcd\xc4\xb5\x9d\x08\x42\xc7\xaf\xed\x1c\x4a\x06\x10\xb4\xd7\x5c\xbc\x28\x4a\xf9\x2b\x2c\xdc\xcf\xf5\x4c\xaf\x32\x42\xc3\xb0\x7a\xf0\xa9\xa4\x4a\x80\x82\xd2\xe5\x03\x94\x23\x93\xca\xbd\x63\x7e\x58\x70\x14\xc8\x63\xf6\x27\xa1\x06\xeb\x88\xd0\x71\xcd\xd9\xcf\xdf\xc8\x87\x92\xee\x8a\x3b\x7a\xe5\xf5\xc1\x24\xb9\x82\x92\x24\x8b\x6d\xde\xb0\xea\x5a\xce\x92\x4d\xe0\x5e\xc3\x71\x4b\xc7\x9a\xda\xc0\xd3\xfe\x1e\x6a\xd7\xb4\x2b\xe8\xaf\xbe\xb6\xbb\x0f\x5e\xbe\x28\xf3\x1d\xfd\x58\x94\x1f\x5a\x3d\x34\x27\xb6\x96\x1c\x43\xa5\x72\x4a\x71\xf2\x5a\x6f\xf1\x07\xb7\x0b\xb2\xf3\x09\xbe\x0d\x7d\x16\x0d\xcf\x6f\xb8\x15\x49\xe2\x7b\x8b\x6c\xb5\xe5\xe4\xb2\x5b\xf9\x8e\xd6\xd1\x1d\x84\x13\xab\xe1\x27\x75\x21\x32\xf2\x27\x96\x5f\x9e\x54\xbe\x3a\x71\x4e\x2a\x90\x9d\x58\xa0\x3e\xa9\x4e\x2a\xb3\x38\xa9\x4c\xbd\x32\x4f\x2c\x33\x3f\xa9\xcc\x2b\x75\x22\x9e\x54\x62\x75\x6a\x2b\xed\xb6\x3a\xb9\x60\x3f\xd3\xd1\xd2\xbd\x2d\x7c\x72\xe1\x5e\x9e\xe3\x63\x71\x72\x89\x57\x47\xcb\xf1\x29\xcf\xc9\x45\xfa\x99\x8e\x96\x6e\x48\xdc\xc9\x25\x9b\x0c\x47\x4b\x55\x14\xf4\xe4\x32\x55\xf2\x47\xd6\xc1\xe7\x2e\x81\xc7\xfb\xfe\xcc\x63\xcf\x4e\x2a\xb6\x3e\x69\xc9\xbe\x72\xfc\xdc\x49\xa5\x6e\x4f\xdf\x5a\x6f\x14\x27\x71\x52\xb1\xcb\x93\x8a\xf5\x4e\xca\x13\xcb\x5d\x9f\x48\x62\xcd\x71\x7c\x62\xb1\x9b\xd3\x46\xc1\x3f\xf5\x4f\x2c\x79\x7f\x62\x83\x0d\x03\x7b\x52\xa1\xab\x93\x0a\xbd\xf6\x78\xcf\x93\x8a\xdd\x9d\x54\xec\xe2\xb3\xcf\xad\xfb\xd3\xca\x75\x7c\xd8\xc9\xe5\xba\x2c\x8f\xac\x33\xc7\xb3\x9f\x54\xf2\xdd\x49\x2d\xee\xb0\x96\x27\x96\x7e\x7b\x52\xe9\x11\x76\xf6\xc4\xf2\x6f\x4e\x5b\x1e\x46\x86\x38\xa9\xcc\x85\x57\xe6\x59\x6f\x99\x1d\x06\xfd\xc4\xd2\x3f\x9e\xd4\x62\x29\x05\x9c\x58\xe0\xf5\x49\x05\x86\x72\xc6\xc9\x45\x87\xd9\x8e\xd6\xa0\x44\x9a\x13\x4b\xfe\xa4\x25\xa0\xa6\x41\x31\x35\x47\xa0\x35\x38\xae\xec\x38\x26\xbd\x75\xd5\x03\x8f\x5c\xda\x75\xc3\xe3\x0f\x68\x5a\xe0\x1c\xf4\x48\x05\x21\xc4\x84\xe9\x18\x4c\x94\x25\x8c\x13\xfc\x94\x66\xd3\x78\xd7\x16\x06\xed\x3c\x78\x9b\x83\x91\x5f\x62\x6c\xc3\x13\x42\xc8\x66\x38\xb4\xbc\xb4\x41\x3d\x28\xd0\x70\x58\x04\x98\x95\x7a\x2c\x5c\xfc\xa3\xc8\x47\x68\x67\xa7\xfc\x7d\xa4\xfc\x1c\x41\x08\x80\xde\xf2\x2f\x2e\xff\x2d\xfa\x39\xcd\xb1\xee\xd7\x8a\xb0\xb4\x9c\x6d\xe6\xb8\x9c\xed\xe7\xc8\x18\x32\xad\x4c\xfb\x56\x67\xd5\x47\x26\x96\x9b\x74\x83\x1e\x96\x79\x45\xad\x17\x6d\x06\xbf\xb4\xeb\x6c\x66\x58\x73\xd5\x72\xf8\xa4\x75\x63\xde\x27\x85\x8e\x40\x9f\x99\x26\x20\x3c\xd1\x69\x95\x5a\x28\x5b\x17\x65\x5a\x11\x73\x3b\x8c\x6b\x92\x3b\x27\xb9\x97\xb9\xd8\x8c\x77\x8c\xa7\x15\xae\x11\x5e\x92\xc9\xd3\xe5\x57\xdb\xa7\x4b\x85\xf4\x6c\x82\xeb\xa5\xc5\x6c\x39\xc7\xf9\x6c\x39\x77\x26\xbb\x6b\x6b\xbd\x09\x59\x55\x85\x76\x5c\xb3\xb6\x14\xe4\x66\x6e\x5a\x04\xf3\x91\x4d\x54\xd6\x55\x2e\x68\xd0\xab\x5b\x2a\xde\xb3\x1d\x35\x9e\xfc\xea\x19\x9d\xe9\xf2\x4c\xca\x49\xa3\x31\x9f\x55\x08\x6a\xb9\xe5\x56\xd9\x04\xee\x33\xb3\x4b\xac\x47\x35\xfb\x3d\x56\x23\x9a\xfd\x01\xab\xf1\xcb\xfe\x1d\xc3\xe0\x64\xff\x1f\x56\xba\xa7\xec\x3f\xb0\x45\x03\xfb\x5f\x76\x0b\x64\xff\x1b\x03\x1c\x44\xf6\x7f\xb0\x6c\x5f\x76\x39\xf1\x0c\x86\x99\xaf\xb0\xa6\x17\xc2\x18\xba\xf0\xaf\x27\xe8\x22\xe5\x5f\x4d\xe2\x0a\x4a\xa7\x08\x8c\x5c\xab\x47\x81\x7b\x3f\x4f\x65\x69\xf5\x5f\x5d\x65\xcc\xa3\x7b\xd9\xf7\xf1\x8e\x05\xa3\x50\x6e\xdf\xe0\xf7\x7d\xde\xc6\x65\x56\xa0\x24\xc1\x64\x53\x34\x55\x3a\x86\x54\xa0\xcc\xa3\x17\xea\x6e\xaa\x50\xe1\x33\xdb\xd5\x08\x5b\x8d\xb5\x5e\x12\x67\xe6\x8e\xbb\x6d\xc4\xca\xd6\x29\x1f\x0e\xd3\x1a\xe2\x50\x28\x25\xba\x40\xe8\x6b\x32\xb1\x84\x60\x56\x83\xf5\x68\xd8\x5a\xa1\x2e\x0c\x2a\x22\xcc\x55\x2b\xe6\x60\x6a\x55\x13\xeb\xf8\x76\x71\x51\x7f\x4d\x26\x4f\x51\x35\xab\xe7\x84\xa6\xf2\x8f\x6e\x76\x63\x8c\x4d\x3b\x1d\x16\x08\xc9\x32\xa1\xcb\x2a\xad\x35\x4c\x15\x03\xb3\xbe\x8a\xf5\xe0\x79\x2e\x28\x52\x38\xa5\xf2\x31\x15\xfe\x0a\x57\xce\x9b\x45\x99\xe6\xe0\x79\xac\xbc\x9a\x0d\xe4\x3d\xd2\xa7\x8b\xb3\x0f\x08\x35\xf7\x1a\x1e\x17\x4b\x0a\x96\x2c\x16\xc9\x39\x21\xb9\xbe\x5d\x63\xfc\x36\x9d\xe0\xdf\xa3\xe1\x30\xad\x66\xf9\x9c\xf0\x29\x4d\xc5\x2c\x37\xbd\xca\xe4\x33\x3a\xe3\x2a\x78\xb5\x72\x54\xc0\x85\x7a\xaa\x9c\x5b\x77\xd5\xc0\x6a\x12\xd3\x99\x31\xb3\x30\x4f\xfd\xcb\x3d\xd0\x11\xca\x65\x0f\x29\xbc\xd0\x5d\xad\xab\xf5\x79\xcb\x2f\xa3\xb5\x6a\xaf\x5f\xfd\x65\x7c\xfd\xd7\xf7\xd7\xaf\x9e\x2f\xde\xbc\x7d\xfd\xfe\xf5\xfb\xbf\xbd\xb9\x7e\x37\x36\x60\x1e\xd6\x7a\x21\x38\x80\x19\xad\x52\x93\xc2\x0d\x1e\x7e\x30\xc1\xd4\xb2\x87\x65\xc1\xd7\xec\xb6\xb6\xc7\xb2\x7f\x48\x5f\xe2\x8f\x25\xb3\xde\x40\x3a\xc2\x65\x44\xb3\x64\x90\x5c\xb5\x69\x8e\x9e\xb4\x28\x8e\xb4\x9a\x28\x0f\x74\x4d\x1b\x33\xcf\xc4\x86\x55\x73\x84\x9a\x06\x2b\xed\x32\xad\x7e\x9d\xb6\xe9\xd2\xca\x5f\xa9\x6d\xfc\x57\x6a\x15\xff\x55\xda\xd3\xcf\x24\x39\xc5\xb6\x4f\x6e\xb5\xaa\xbb\x07\x5c\x1d\x38\xba\x0b\xb8\x6b\x00\x1f\xc1\x90\x3a\x9f\x60\xe9\x61\x69\x5d\xe1\x5f\x24\xb7\xad\x51\x0d\x37\x71\x06\x77\x9a\x9e\xbb\x10\x6a\xc3\xf1\x78\x16\x16\x5e\xb2\x2e\x04\x96\x42\xc6\x75\xc8\x42\x02\xb5\x63\x99\xb7\xb8\x52\x81\x93\xc5\xa2\xa4\x79\x55\xf0\xc5\x47\x26\x36\x0b\x28\x7e\x01\xf7\xc6\x7c\xb1\x48\xb0\x0e\xe7\x4a\xc3\xc9\x6d\x10\x16\x4d\xaa\x22\xaf\x25\x3f\x72\x6b\x26\xb1\xfa\xf1\xed\x0f\xd7\xc6\xd6\x5f\xf9\xfa\x79\x7d\x4c\x9c\x11\xc8\xd5\x0d\x40\x16\x75\x93\x99\xcb\x7b\x53\xba\x72\x30\x3b\x4f\x5d\xe0\xab\xe7\xac\xda\xe7\x62\xb9\x31\xe1\x16\x51\x8a\xec\x45\xf7\x99\x80\xb0\x61\x9d\x4b\x83\x02\xcb\xbd\xa9\x56\x2b\x4d\x93\xbc\xba\xe7\xcb\xa4\x45\x64\xf8\xf8\x26\x5f\x7e\xb8\xa9\x4b\x4e\x9d\x99\xa6\x0a\xa8\x0d\x8e\xb4\x0a\x34\x1b\x03\xa4\x4e\x58\xda\x5a\x04\x16\x9c\xb4\xaf\x2c\x3e\x5e\xc8\x75\x07\x03\x04\x70\x6a\xd8\x00\x71\x2b\x30\x5f\xe3\x27\x81\x0b\xdf\x54\x4f\xf4\xad\x6c\x77\x31\xe8\x56\xf6\x3c\x68\xc6\x67\x9c\xf6\xe0\xd1\xd6\x45\x12\xb3\xd7\x06\x53\xfb\x24\xcf\x72\xda\x3e\xcc\x86\xc3\xce\xf9\x36\xa5\xee\x50\x83\x5b\x6e\xfb\x2b\x03\xd3\xe4\xde\xd3\xa2\x75\xfb\x16\x70\x49\xb7\x5b\xb6\xdb\xc9\x1d\x4b\xd7\xb4\xa4\xdc\xbb\xa9\x94\x27\x47\xc7\x42\x4b\xfd\x32\x21\x08\x1e\xdd\xc5\x92\x25\x89\xef\xe3\x3c\x70\x7c\xd3\x4c\xc3\xff\x46\x67\xca\xaa\x60\xc3\x94\x31\x7d\x19\xc5\x46\xd6\x60\x71\x1c\x45\xaf\xf2\x99\x67\xcf\x02\xfa\x75\x50\x62\x28\x48\x3c\x87\x78\x3d\x85\x1b\x74\xd9\x2d\x94\x52\x94\x09\x34\x2e\x69\xbe\x92\xbb\xf1\x7d\x7e\x9b\xda\x4d\x6e\x8d\x7a\x0a\x29\x1f\x31\x0e\xcb\x8f\x2e\x0b\xbe\xd2\x3f\x14\x54\x55\x0a\x55\x8a\xfc\xf6\x45\x51\xa2\x94\x21\x84\x59\x43\x3d\xfd\x09\xa9\xbc\xf5\x57\x8e\x41\x78\x37\xb6\xcf\x0f\x3a\x99\x3a\xfc\x3f\x1f\x40\xde\x98\x7b\x83\x5a\xc0\xe0\xe8\x7b\xbd\x53\x8e\xb9\xe6\xf0\x90\xbd\xeb\x1c\x1b\x20\x31\x2e\x8b\xdd\x0d\xe3\x14\xa5\x33\x31\x7e\xce\x4a\x71\xaf\x93\x7b\xc8\xc0\x63\x80\x80\x69\xbd\x17\xe3\x67\xaf\x5f\xbd\x7b\x7f\xf5\xea\xfd\xe2\xfd\xd5\x1f\xd1\x1c\xa0\x8f\x8e\xc1\x5e\x2a\x17\x04\x3d\x2d\xf8\x44\x10\xcb\x06\xb3\xea\x7d\x59\x8b\xcd\x7d\xa6\x1c\xc3\x2d\xc4\xbb\x2b\xaa\xd3\x2f\x40\x5f\x2f\x7d\x10\x44\xbb\x1a\x1a\x04\x6d\xfc\x49\x12\x3e\xb3\xba\x02\xeb\x66\xc8\xe9\x05\xbf\x6d\x95\x30\x4e\x46\x9a\xda\xe4\x0a\x09\xfc\x47\xfe\xf1\x78\x59\x4a\xbb\x7e\x52\x71\x35\xff\xc0\x0b\xc7\x82\x46\xb0\x5e\x2a\x0d\x12\xe8\x79\xee\x79\x5d\x85\x50\x04\x15\x15\x3f\xf6\x96\x13\x6c\x96\x60\xa5\xc8\x22\x99\xe2\x17\x88\x8a\xbd\xef\x97\xdf\xf6\x6d\xd1\xd0\x24\x8a\x6f\x45\x58\x68\x3b\x1f\xd5\x3c\xcc\xbc\x40\x8a\xa5\x76\x49\xd0\xf8\x00\xbd\xec\x45\x8f\x79\x42\x57\x23\xd3\x32\x1a\x8d\x13\xa1\xa8\x85\xb4\x68\x6d\xc0\x1d\x2d\x6f\x2d\x20\x05\xa3\x55\x36\xb3\x87\xd4\xbc\x05\x47\x4b\x0d\x06\x79\x07\x88\xb9\xd4\x40\xcc\xfc\xeb\xcb\x29\xbf\xb8\xcc\x26\x08\x33\x72\xf9\x94\x7d\xc5\x01\xaf\xa6\x9c\xb1\x8b\x4b\x1f\x92\x59\xf9\xe0\x29\x43\x62\x5d\xdb\xe1\x10\xfc\x84\x20\x14\xe7\x13\x3d\x0b\xde\x5b\x7f\x87\x94\x28\xb4\xc3\x34\xc6\x6e\x66\x7d\x29\xe3\x87\x04\x9d\x01\x01\xf3\x42\x60\x17\xfe\xe6\x6a\x9a\x96\x69\xf0\xd9\xd1\xb9\x51\xd7\x35\x51\x69\x3b\x16\x64\xe6\xe4\x23\xe4\xcb\x0d\x4c\xda\xf6\x3e\x31\x51\xe8\xf3\xcd\x4d\xb4\x79\x51\x2b\x24\xd0\x2f\x35\x4b\x31\xea\xc3\x53\x6c\x3b\x22\xeb\x77\x8f\x57\x67\x1d\xa3\x85\xd0\x60\xe1\xca\x48\xb7\x2d\xdb\x85\x88\x63\x09\x1d\x0e\xe9\xec\x7e\xde\x60\x6b\x1b\x71\x8b\x9d\xc1\xc4\x6b\xec\x59\x4a\xbc\xd4\xd8\x47\x9a\xf1\x5d\x97\x94\xfe\x8b\xa6\xb3\x39\xc2\xf7\x1a\x3b\xe5\x7e\x77\x53\x6c\x51\x9a\x5c\xbf\xfc\xe6\xfa\xed\xe2\xea\xed\xdb\xab\xbf\x25\x08\xdf\x45\xeb\x6d\x02\x70\x07\x43\xd7\xbe\xd0\xb0\xf6\x0e\x97\xe4\x4d\x0a\x31\x65\x75\xa4\x92\x82\x44\x98\x2f\x31\x15\x11\xe7\x1a\xa0\x80\x9a\x5d\x10\xa8\x71\xc1\x67\xfa\x23\x81\x17\xc0\x4c\x03\xce\x87\x40\x87\x43\xca\x00\x31\x04\x40\x12\xb4\xeb\x8c\xa4\x6f\x5e\xc8\xb5\x9b\x80\x35\xfc\x7d\x24\x5e\xe9\xd4\xd6\x52\x3a\x69\x8e\x10\xe2\x5a\x57\x4a\xb2\xee\x85\x03\x0e\x4e\x39\xee\x91\xfe\x26\x70\xc1\x17\xd6\xb9\x0e\x1c\x5c\x75\x74\x54\xe5\x35\x53\x3e\x65\x5f\x15\x40\x9f\xe4\x41\x92\x42\x39\x4a\x7d\x74\x05\xc3\xc1\x10\x66\x98\x5a\x15\x25\x3b\x33\xda\xda\xd0\xe5\xde\x55\x01\x78\x02\x42\x85\x51\x2a\x41\x6f\x6a\x72\x80\x6f\xbc\x9a\xca\x2c\x52\x4f\xc7\x49\xde\xf4\xee\xe2\xf2\x9c\xf8\xa5\x72\x59\x6a\x9f\x73\x3b\xb1\x89\xfc\x7a\x17\x21\x84\x82\x57\xf8\x79\x69\x61\xc7\x27\x6d\xcf\x60\xc3\x9c\x7e\x69\xf4\x3f\x3f\x70\xe0\xec\x0f\x73\xb0\x6e\xd5\x83\x6f\x74\xb9\x5f\x4d\x86\xc3\x94\x8f\x08\x43\x58\xb6\xb1\x1c\x0e\xc5\x39\x11\xd3\xd8\x76\x39\x27\xb4\x89\x39\x86\x29\xce\x3f\xe0\x85\x5f\x7b\xd2\xad\x3a\x63\xb4\xe3\xe7\x77\x5c\x48\x6a\xb7\x75\xb6\xbc\x11\x3d\xde\xe1\x70\xe5\x29\xdf\x8c\x4f\x96\x8b\x73\xbf\xb1\x57\x0b\x2a\xdc\xb4\x03\x9d\xe4\x61\x6a\x39\x19\x41\x7f\x1d\x7e\xa5\x03\x6c\x2e\x5b\x50\xce\x44\x41\xb1\x5c\x11\x1e\x9e\xd1\xd6\xee\x05\xa7\xe9\x1e\x4c\x6f\xef\x01\x7d\x78\xaf\x97\x51\x75\x25\x22\xee\x13\x22\x88\x25\xb5\xcb\xf7\x69\xcf\xee\x77\x6b\x11\x36\x10\x6a\xf0\x7e\x96\xcc\xe6\xc9\x5c\x6d\x3f\xc7\x6c\x3e\xf4\x98\x40\x81\x9f\x5c\xd5\x89\x1a\xea\x7b\xef\x19\xd3\xf9\x89\x62\x76\x4d\xfc\x06\xed\x64\xd7\x20\xbc\x1f\x03\x22\x82\x36\xff\x6a\x55\x1c\xe3\xd9\x83\x76\xcb\xd3\x7e\x82\x1a\x25\xc7\xbc\xe6\xdb\xfb\x54\x96\xb8\xcd\x7f\x51\x81\x5e\x4b\x2f\x2e\x3b\x85\x83\xd0\xe6\xfb\x9b\xfd\x22\x17\xb3\x89\xef\x5f\x36\xbb\x9c\x5b\x92\xee\x35\x42\xc5\x31\x83\x6d\x43\x09\x1b\x51\x84\x9d\x44\x77\x38\x88\xaf\xd9\x54\x10\x96\x09\x48\x20\x08\x1b\x09\xf4\x94\x7e\x25\x9e\xa2\x72\x56\xea\x12\xf4\x8c\xb6\xfa\x49\x47\x23\xe7\xdb\xd9\xe0\xbd\xd1\x7d\xc7\x25\x7b\x87\xc8\x07\xa0\x37\x7a\x98\xbf\x8b\x66\x31\xc6\xe5\xed\x4e\xa4\x61\xc3\x09\x43\xaa\xc9\x17\x97\x08\xeb\xf6\x03\x5d\x28\x89\x08\x70\x24\x62\xad\x2f\x91\x1f\x35\xb4\x74\x44\x1a\xef\xe5\xb9\x04\x3b\xdb\xc8\x1d\xd1\x1e\x29\x6b\xf2\x56\x4a\xe4\x70\x07\x65\x41\x9a\x0d\x38\xad\xac\x48\xe2\x56\x71\x9b\xbc\x0a\x3e\x57\xa7\xad\xcf\x4d\x5e\xfd\xc0\x2a\x41\x39\x2d\x2b\xc3\xe2\xfe\x5f\x75\xf1\xb4\x04\xdd\x40\x82\x40\x71\x70\x34\xa5\x02\xf9\x00\x19\x70\x3f\x86\x57\xcf\x94\x14\xe6\x02\xfd\x75\x20\x9a\xfd\x81\x8a\xe6\x70\xfd\x83\x78\xc2\x61\xc1\xcf\xd9\xea\xf3\xca\xb5\x19\x3a\xc5\x6a\xa6\x24\xea\x9e\x14\x09\x55\xfb\x19\x0e\x9a\xdd\x45\xaa\x83\x29\x83\x9f\xad\x8e\x66\x63\x96\x9e\x64\x76\xb4\x1a\xb9\xc4\x1c\x2b\xef\xcb\x20\x08\x89\x6c\xec\x2d\x15\xd0\x58\xd5\xbf\x2d\xcb\x2b\x85\x67\x8e\xd2\x64\x97\xef\xbf\xb9\x4f\x80\x8c\xe8\x44\xfd\xa4\xb3\xc3\x88\x85\x03\xa7\xc1\xfe\x95\x2a\x51\x56\xbb\x6b\x45\x0a\xfc\x45\xbc\xa5\x76\x5e\x7d\x93\x86\x21\x56\xba\x6d\x52\xea\x2e\x73\xb6\xcf\xd8\x9c\x50\x73\x79\xa4\xbe\x35\x10\xe0\x07\x9a\xf7\x4d\x94\x19\x87\x82\x83\x63\x4a\x74\x99\x54\x7b\x42\x8d\xd7\x6c\x2b\x82\x5d\xf8\xff\xb6\xa7\xad\xde\x0d\x87\x5c\x03\x1f\xd8\x8e\x96\x14\x4e\x9e\x5f\xb5\x81\x61\xd3\x60\x04\xba\xb4\xe2\xdc\x44\xaa\x11\xbe\x94\xeb\x0d\x9a\x3f\xfe\xad\xb5\xa6\x8a\xbc\x09\x6f\x51\x5c\x29\xc8\x75\xac\xbf\x10\xf5\xfd\x91\x42\xd6\x8c\xaf\x62\xab\xe0\xa3\xd9\xf2\xbf\x60\x94\x6c\x05\xd1\x36\xea\x1a\x8e\x37\x8f\xde\xd1\x32\xba\x4a\x3f\xfd\x5a\xed\x63\xd5\x75\x58\x47\xbb\x8a\xe3\x0d\xcc\x79\xb4\x79\xd7\xbf\x5e\xf3\xae\x78\xac\x71\xd7\xa7\x34\xae\xa4\xab\x7a\xd9\x0e\x35\xaa\xb5\xdd\xc7\x77\x97\x8a\x08\x40\x68\xca\x01\xb5\x5b\xa8\x38\x54\xc2\xc4\x07\x93\xbc\xc9\x5d\xf1\x21\xf4\x16\x56\xc4\xba\xa3\x93\xe2\x5a\x27\x25\xbe\xbe\x9c\x0a\x5f\x27\x25\x40\xe6\xe3\x11\x9d\x94\xf3\x74\x2d\x1e\x27\x04\xc2\xb3\x4b\x87\xad\xaf\xd4\xe0\xe5\xfd\x77\xd0\x44\xa0\x55\x98\x83\x2c\x5c\xc8\x96\x8b\xa2\xa5\x87\x38\x42\xf9\x7c\x55\x01\x8c\x28\xa8\x78\x96\xe2\x91\x7d\x1b\xc9\xaf\x42\xc6\xe8\x52\x18\x5f\x6e\xeb\x55\xc7\xbf\xd9\x93\x35\x7d\xee\x6e\x02\x79\xaa\xa2\x6c\xed\xf5\x16\xa3\x1b\x8c\x92\xee\x64\x8a\x20\x5f\x6b\x5e\xb5\x1c\xae\x54\x3c\x67\x0e\xdf\x9a\xfa\xd8\xd6\x60\xf8\x45\x67\x6c\x8e\x2b\xe2\xd3\xfd\x02\xe1\x3a\xd0\x07\x14\x08\x03\x24\xaf\xb5\xe0\x47\x60\x3a\x64\x38\x41\x4b\x2b\x27\xaa\xef\x35\x67\x3f\x47\x86\xef\xd6\xc4\x3a\xdb\x1b\x15\x50\x64\x10\x6f\xf5\xa8\x40\xb2\x8f\x4c\x6c\x8a\x5a\x74\xee\x5f\xa1\xff\x66\x84\x53\x1a\x04\x96\xd3\xd1\x3b\x29\x21\x74\x1a\x59\x40\x02\xf0\x03\x7b\x24\x5c\xda\xc4\xa8\xbe\x50\x62\xda\xff\xa5\xf9\x72\x93\xcc\x89\x18\x83\xc2\x69\x71\xf5\x7e\x71\x7d\xf5\xec\xdb\xe9\x49\xfc\xa4\xcc\x0b\x17\x27\x70\x71\xa3\xc6\xc1\x97\x72\x74\xac\x0b\xbc\x47\x08\x7f\x20\x09\xf0\xf8\x83\xa2\x16\x03\x29\xbe\x02\xbf\xe9\xd4\x58\x2f\x7f\x05\xad\x01\x88\xe4\x1d\x41\x59\x63\x01\x7f\x35\x01\x51\xc1\xac\x15\xcf\x19\xd9\x1a\x84\xa7\x1f\xd0\x99\x0d\x7c\x02\x66\x41\x3b\x8b\x5d\x42\x41\xb4\x7e\xdf\x16\xad\xaf\xb0\x35\xfb\xc6\x0f\x80\xd7\xd4\x13\x4a\x3b\x54\x5e\x4c\xc0\x6c\x49\x7e\xc8\xd2\x96\x7c\x4b\xf1\x0e\x19\xba\xc5\x78\x45\x4b\x71\xd5\x16\x8c\xd9\x3a\xa5\x5f\x7b\xa5\xf6\xf5\x25\x26\x40\x53\x3c\xc1\x33\x31\x37\xe8\x34\x46\x3f\x19\x17\xbd\x5f\x06\x62\x47\x5d\x6d\x94\x34\xdc\x8b\xb1\x63\xda\x9b\xfa\x42\x3a\x45\x98\xfa\xb9\xab\xde\xec\x76\xe4\xbd\xdc\x13\x6c\x91\x74\xf6\xc5\xbe\x5d\x7f\x6c\x88\xd9\x3a\x9d\xf8\x22\x1d\xf0\x3d\x36\xfa\x6d\x57\x7a\xbd\xb8\x6c\x8f\x94\x1a\x92\x94\x5e\x5c\x62\x29\x50\x36\x18\x20\x29\xba\x75\xeb\x9a\xfc\x99\x68\xd7\x49\xa3\x75\x4e\x7a\x6a\x9c\xc0\x50\xd5\x3c\x5a\x5f\xdf\x58\x4f\xf4\x08\x07\xd9\x1e\x1f\xe4\x89\x3f\xb4\xa5\xe4\x57\x2a\xda\xc9\x7b\xca\xf8\x7a\xf4\xa9\x45\xc2\x75\xa9\x69\x7c\x25\x4e\x60\x5d\x61\xab\xfd\x89\x35\xdc\xd4\xd5\x1a\x5e\x28\x07\x76\x9b\x0d\x6c\x1c\xd9\x64\x6d\xc5\x91\xdf\x5d\x75\x9b\xd8\x19\x60\x1b\xc3\xcf\x2f\xef\x70\x98\x3c\xbd\xb8\x10\x60\x7e\x17\xd5\xf3\x80\x06\x41\xc7\x32\xb4\x73\x29\x5a\xf2\x9c\x5f\x67\xd5\xbd\x94\x54\x7a\x0d\x59\xfa\x0d\xbd\x65\x3c\xbc\xb3\xaf\xcc\xcd\xb4\xf0\x11\x32\xa1\x45\xe2\xe2\x02\x79\x15\xab\xf2\x55\x08\x88\x33\x9f\x54\xf3\x55\x5f\x91\xd0\x3a\xb8\xab\x7d\x64\xbd\xd9\x93\x49\x07\xe0\x70\x5b\xda\xa1\x5d\xd9\x72\x22\x5d\xf4\x35\x8a\x8f\xf6\x34\x7e\x81\x60\x0d\xb5\x6c\x3d\x00\x89\x87\x4f\xe9\x63\x83\xf0\xb3\x36\xf9\x7e\x8f\x6b\x47\xbe\xcd\xb4\xf6\x0d\xc1\x8c\xce\x6d\x48\xd3\xc8\x6d\x70\x44\x7f\x70\xda\xb1\xb5\x3b\x0b\x94\x3f\x50\xfe\x77\xdc\xbb\x94\x0a\xd4\x18\x7a\xa0\x97\xc5\xfe\x3e\x7a\xe0\x4f\x8f\x70\x83\xe9\x04\x6f\x1d\xb7\x43\x81\x45\x43\x0a\xd6\x4c\x1b\x9e\xca\x51\x7a\x4b\x66\x89\xea\x40\x32\x3f\x7b\xa6\x60\x97\x50\x74\x3a\x5a\xe6\x71\x33\x3a\x1f\x0e\xdf\x9a\x4b\x1c\x40\xf8\xf2\xaf\xd6\x9e\x91\x74\x45\x9e\x21\xc3\x00\x69\x09\x60\x85\xdf\xaa\x3d\xfc\xc6\x58\xd1\x56\x3d\x26\x95\x50\xca\x34\x7d\xa6\x33\xb6\x2a\x97\xb5\x5d\x91\x37\xd1\xeb\xb2\xc3\x61\x36\x6f\x50\x76\x2c\x41\x4a\xc9\x6c\x8e\xf0\x95\x6f\x2c\x9c\x99\xaa\x28\x80\xb5\x5c\x91\x37\xed\x1e\xe1\xd6\x5d\xe2\x7b\xcf\x52\xe5\xea\x91\x4b\x7a\x1f\x04\xa1\xef\x82\xfe\x11\xd3\x53\x6b\x94\xd5\x31\x8a\x81\x0b\x5d\x05\xad\xf1\x98\xb1\x40\x07\x2a\x22\x72\x35\xdd\x36\x49\x8c\xb5\xee\x88\x73\x46\x6b\xd7\x3d\x2c\x16\xae\xd2\x85\xd2\x9c\x00\xcc\xd5\x77\xfc\x9f\x2a\x12\x79\x5f\xb4\xe0\x20\xe3\x38\xcc\x93\x02\x40\x78\xf1\xa1\xde\x1f\xb9\x47\x08\x0b\xd0\x20\xa8\x8a\xbf\x59\x75\x2d\x6e\xfc\x70\xaf\x7e\xc6\x33\x0a\x11\x16\x04\x40\xa7\x04\xdc\x31\xf5\x82\xce\x42\x0a\x0f\x61\xd1\x04\x7b\xc5\x14\x27\x6b\xc6\xf3\x2d\xfb\x17\x7d\x6e\x03\xc0\x06\x66\x3c\xb2\x2f\x2e\x26\x64\x84\x94\x7e\xa1\x78\xfe\x10\xca\x02\xe1\x68\x78\x41\x28\x4f\x33\x33\x71\xd8\x16\xbf\xfa\xfa\xdd\xdf\x9f\xb6\x78\x7d\x6b\x81\x5f\xb7\x11\x8f\xd6\x6c\x7c\xd4\x7e\xe5\xbe\x87\x81\x4c\x78\xa0\xe6\x86\x73\xcf\x28\xe6\x9d\xfd\x90\x3b\x15\x0a\x4e\x7b\x72\x03\xea\x66\x49\x38\xe6\x3a\xf2\xf1\xb1\xe2\xe4\xc1\xa0\x4b\xd4\xb8\xe2\xdd\xe0\x19\x5e\x20\x89\x5f\xc1\x9c\xe7\xa9\xda\x2c\x94\xaf\xc0\xf7\xcf\x36\xa6\x44\x0d\x2e\xd6\xeb\x63\x43\xa2\x18\x9f\x63\xa3\xb2\xc9\x63\xec\x30\x64\x8e\x5c\x74\xd0\x13\x56\x7e\xcc\x58\xe5\xb8\xdb\x5b\xbf\x25\xce\x2f\xa3\xa5\x16\x9b\xe2\xb1\x26\xfb\xd6\x3a\xbf\x8e\x3d\x58\xff\x1a\x0e\xee\x79\xc3\x01\x77\xd6\x55\x14\xe2\xb8\x0b\xcf\x72\xac\x4d\x79\xe5\x1c\x9e\xf5\x84\xee\xe7\x2e\x74\xbf\x02\x0d\xa7\x4f\x4b\xd0\xca\x95\xfe\xc2\x72\x71\x57\xa0\x66\x57\x57\xa8\x7e\x54\x96\xfb\x1e\x80\x7b\xe7\x3a\x9a\x07\x9d\x70\x31\x97\xa9\x8e\xba\x1e\xed\x06\x6d\x67\x72\x89\xbc\x31\x88\x71\xc1\xdd\xf3\x0f\x8a\x88\x33\xcc\x66\x99\x77\xf9\xdf\x9e\x62\x62\x8c\xb2\x15\xb2\xf5\x07\x77\x37\xd7\xd7\x9f\x6e\x4a\xdb\xa9\x56\x59\xf6\x3e\xee\xb1\xa2\x3a\x17\x77\xa6\xa4\x98\x21\x73\x5f\x61\x47\x8c\x9e\x43\x31\x45\xdd\x9d\x3e\x42\x6d\x3b\x37\xb0\x1e\x5d\x09\x8d\x52\x1f\xa7\x51\xc7\xca\xda\xe4\x95\xf9\xdc\x3e\xf1\x1f\x21\x57\xa3\xc4\xde\xde\xc2\x86\xfa\x89\x89\x8d\xf6\x34\xe8\x5f\xc1\x61\xba\x60\x31\x33\xbe\x2c\x21\xd2\x78\xaf\x05\x6d\x44\x41\x77\x1a\xfb\x71\x79\xd6\xb3\x89\x52\x08\xb2\xfa\x62\x5b\xe4\x60\x47\x15\x92\x09\x74\x38\x4c\xd0\x88\x03\x8b\xf6\x3f\xd0\xb4\x4e\x7b\x64\x73\x2e\x64\x73\x44\x71\x7b\xbb\xa5\xd1\xb6\xf4\x14\x76\xde\xed\x5c\x83\x97\xf9\x72\x43\x8f\x4c\xfa\xad\x8e\xa2\xb7\x82\x60\x6e\x56\xd7\x7a\xd2\x41\xd5\x82\xda\x7a\x94\xf0\xc7\xd1\x63\xfb\xfc\x10\x4a\x4f\x86\x6a\x11\x6f\xde\x31\xa6\xd5\x4d\x71\x71\x72\xb8\xb3\xc6\xe5\x81\x3d\x6d\xff\xc1\xa2\x7c\x83\xf4\x8d\x7b\xf5\x86\x72\x08\x07\x64\x2c\xf0\x8d\x4d\x3b\xab\xde\x51\x21\xb6\x92\x39\xeb\x5e\x6e\xb6\x9b\xe5\x12\xb7\x4c\x74\xec\x87\x48\xf9\x6f\xe1\x8a\x12\x50\xce\x58\xf5\xa2\xde\xae\xd9\x36\x5e\x5d\xb7\x36\x9b\x55\xd9\x5a\xb4\xbe\xba\xb2\x3a\xad\x31\x19\xb3\xf3\x4b\xec\x25\x94\x3f\xf5\xd0\xb6\x1b\xda\xb6\xb7\x72\x6a\x62\x1e\xe0\x6f\x5a\x5c\x84\xdf\x55\x03\x5d\xd4\x60\x57\x57\x00\xba\x59\x51\x91\x1c\x39\x0e\x07\xc7\xce\x48\xff\xb8\xa3\xf8\xa1\xd5\xe8\xa0\x47\x0d\xc2\x7c\x2c\x36\x94\x3b\x61\xca\xd5\x41\xc7\xac\xd2\x82\x12\x5d\x1d\x0e\xde\x4f\xc6\x6f\xf5\x28\x76\xab\xb3\x9e\x21\xe1\x68\x4d\xd4\xfd\xba\x5f\x8d\x0e\xb9\xf0\x45\xb5\x98\x15\x19\x74\x47\xd7\x91\x80\xf5\x70\x36\xf0\x87\x38\x41\x8d\x75\xc0\x01\x99\x8f\xf2\xac\x4c\x13\xf9\x37\x41\x18\xe2\x44\xc8\xdf\xf0\x90\x20\x0c\x72\xe2\xf6\x5e\xbe\xd2\x8f\x72\x61\x3c\xb2\xe9\xdb\x30\x91\x8f\x7a\x76\x9f\xc4\x82\x9e\xb2\xeb\xad\xd7\xb9\x30\x52\xb3\x6d\xcb\x02\x79\xc6\xf7\x3d\xdb\xbd\xab\x27\x70\xd9\xd5\xa6\x2f\x55\x08\x18\x3f\x86\xd3\x51\x69\xdf\xe5\x1f\xeb\xac\x5a\xda\x57\x1f\x68\x29\x47\xd6\x3c\x27\x08\xd7\xdc\xff\xe0\x7e\x25\x08\xb7\x42\x47\xc9\xef\x9b\xbc\x4a\x90\x2d\x8a\xae\x5e\xef\xcd\x97\x5b\x2a\xd4\x0f\xef\xbb\x7a\x51\xc9\xcf\x85\x7a\x8c\x64\xae\x82\xdc\x55\x37\xfb\x8b\xa2\x7c\x7f\xbf\xa7\x5e\x29\xfa\x4d\xac\x30\x2f\xb1\x2b\xd3\xa5\x67\xa0\x3b\x91\x5f\x99\xd1\xa2\x9c\xb0\xbc\x7a\x20\x21\xbb\x67\x4b\xbf\x4b\x75\x67\x1d\x1e\x71\x81\x38\x09\xca\xbc\x6f\x05\xa9\xb6\xfa\x61\x44\xb5\x9a\x9b\x8d\xdf\x5f\xbd\xfd\xe3\xf5\xfb\xc5\xeb\x6f\xbe\xbf\x7e\xf6\x5e\x5d\x78\xae\x68\xb5\x2c\xd9\x5e\xc8\x23\xf6\x11\x7f\xe2\x7e\x53\xd6\xf1\xc2\xaf\xa8\x4d\x3a\x8d\x53\x9a\x9f\x86\xd0\xa6\xb1\x97\xa5\x6a\x58\x55\x8b\xd5\xf3\x33\x15\xc2\x28\xf2\x4a\xf7\xa5\x75\x59\x9b\x04\x69\x82\x43\x49\x89\x55\xa5\x7f\x31\x0e\x07\x4f\x98\xc3\x9c\xd0\x5d\x2c\xe7\xa9\xb3\xbc\x4c\x69\xbb\x94\x12\x21\x30\x2d\xf5\x5e\x9b\xf0\x4b\x5a\xd3\x26\x93\x60\x8a\x00\xa4\x57\x2b\x16\xae\x3a\xfa\x3e\xdd\x46\x5c\x7c\xa9\x2d\x2c\x20\x14\x14\xda\xe5\x07\x22\x4c\xa9\xc1\xc6\xb5\x7d\xab\x7b\x6a\x23\xf6\x91\x5c\x1b\x3e\x76\xc6\x24\x41\xb8\x22\xd5\xe1\xd0\x66\x34\x4b\xe5\x2e\x64\x7d\x1f\x9c\xaf\x10\x5b\xa7\x05\xea\x19\xc0\xc2\x1f\xc0\x32\x28\xa0\x40\x0a\xc4\xf8\xc8\xe8\x15\x08\xe1\x12\x65\x85\x5f\xc5\xa0\x50\x3e\x67\xc1\x6a\x1e\x0e\x69\xb8\xc2\x90\x3d\x49\x83\xd7\x67\xde\x75\x65\xa3\xef\x4a\x6c\xfb\x6a\x40\xb2\x38\xba\x52\x34\x90\x99\xbe\x10\x42\xf8\x3c\x3d\xaf\x0e\x07\x88\x84\xa9\x57\xf3\xf9\xa5\xec\x69\x05\x9a\x9d\x69\x4a\x49\x85\x7c\x37\x2a\xea\x87\xef\xaf\x11\xca\xd2\x92\x54\x48\xbe\x53\xdf\x4b\x3c\xf3\x3f\x23\x74\x8c\xe3\x8d\x01\x02\x77\x69\xd2\x4d\x7e\x43\xb7\x3d\x6e\x55\x5f\x04\x70\x62\xc0\x8e\x3f\xdf\x9d\x57\x45\xc3\x83\xb0\xa9\x5a\xa2\x4d\x16\xb2\x34\x7e\x4b\x57\xda\x92\x15\x74\x1c\x4e\xc0\x4e\xf0\xca\x8a\xd2\xf1\xb4\x56\x82\x4e\x1a\x1c\xe2\xc7\x7b\xc7\x77\x28\x7b\x17\x55\xc5\x6e\xb6\xf4\x99\xc3\x0f\x7a\x0b\x5f\x8d\x94\x11\x77\x29\x35\x86\x11\x50\x06\xe3\x1b\x5a\x32\x51\x29\x37\x1b\x5c\xfa\xf1\x42\x38\x13\x6d\xe3\x1f\xf1\x34\x15\x84\xb6\x12\x21\x30\x88\xb4\x0c\x42\xa8\x92\x39\x09\x87\xc1\x04\xe3\xd1\xf8\xcd\x15\xf8\xe1\x82\xd1\x09\x99\x84\x5f\x88\x3a\x0f\xe0\x95\x22\x2d\x90\x96\x9c\x4f\x82\x97\x36\x5b\x6b\xa4\xfd\xec\xda\xf0\xbb\x3d\x0f\x52\x96\xbf\x53\x7a\x7c\x7f\x34\x3c\xcf\x5e\x12\x30\xe6\x10\x53\xda\xda\x7d\x9f\x58\x9a\xb9\xb0\x34\xcd\x8a\xca\x8f\xfe\x75\x75\x67\x33\x87\x75\x25\x08\x14\x52\x7e\x15\xfa\x3a\x92\xb4\x39\x43\xff\x6e\x5d\xe7\xb6\xce\x40\x91\xfc\xdd\x16\x2a\x03\xee\x76\x83\xac\x87\xb1\x67\xaf\xa2\x6c\xb7\x63\xfd\x8e\x98\x71\x97\x98\x01\x4e\x83\x86\xec\xf1\x27\x7d\x38\x4c\xc3\x45\x30\x9b\x23\x0c\x46\x6b\x3d\xab\x66\x38\xa4\x5f\xf7\x7d\x53\x36\x45\x5d\xea\xd8\x1e\x50\xa4\xa2\x1a\x06\xa5\xe8\xd3\x2c\xb0\x4e\x33\x17\xae\xd6\x65\xa3\x5b\xe5\x53\xf6\x55\x09\xea\xf3\xe0\xfb\x8c\xcd\x43\xdb\x72\x33\x1b\x4c\x43\xf7\x44\xab\x9e\x9c\xf5\xed\x94\x8b\xcb\x26\xe0\x65\x4c\x35\x70\xf7\xed\x5d\xf5\xf2\xf1\x9b\xb7\xaf\xdf\x5c\xbf\x7d\xff\xb7\xc5\xf3\xef\x9e\x2f\x9e\x7d\x7b\xf5\xea\x8f\xd7\xf3\x9e\x19\xe9\x8c\x0b\x98\x3f\xa5\x6a\x23\xb5\xe7\x69\x3a\xc9\x62\x6d\xc6\x2c\x3c\x31\xfb\x06\x7c\xea\xdb\xf8\xd9\x61\xcd\xcc\x56\x3e\x61\x93\xa9\x94\x71\x47\x05\xb0\x23\x31\x21\x86\x16\x8c\xdf\xe5\x5b\xb6\xd2\x0e\xfe\xed\x5c\x96\x16\x87\x99\x1e\xa3\x18\x28\xb3\xdb\xc0\xb3\x2b\x09\xea\x0a\xb7\xc3\x23\x25\x76\x4d\x2f\x1f\x1d\x44\xb8\xdf\xec\xf1\x6b\x51\xa1\xa3\x70\x8e\x7a\x68\x63\x9b\x82\x3c\x3e\xe2\x5d\x4a\xd8\x2a\x13\x2e\x5b\x8f\xf8\xc5\x74\x32\x98\x26\xb6\xc7\xe9\xe8\xe1\xea\x37\xe3\x84\x8c\x7d\x5e\x29\x52\x38\x39\xb6\x80\x54\x12\xed\xea\x2f\xce\x0a\x70\x57\x2a\x46\xad\x49\xe9\x76\xc9\x2e\xe5\x51\x79\xc1\x24\xe1\x6a\xef\x1b\xb7\x89\xa7\x7d\x9b\xbb\xc8\x7a\xbe\x7c\x5d\xb4\xa9\xa3\x9f\x0b\x1d\x39\x2a\xe3\x0b\x5e\x75\xb2\x35\x8a\x6e\x05\x77\x67\xbc\xff\xc8\x0e\x2b\x6d\xd4\xbd\xa5\x12\xef\x20\x46\x9f\xdc\xe6\xb3\x87\x0f\xf4\x3e\x33\x23\xd4\x96\xcd\x60\xd1\x87\xf7\xde\x5e\xa1\x6d\x91\xa5\xe7\x60\x0c\xf8\x02\x3a\x0d\x58\xff\x0e\x91\x09\xda\x7c\x19\x66\xee\x0a\x84\x1d\x83\xb3\x0b\x29\xa2\x39\x48\x39\x08\xb8\x8f\x1e\x94\x63\x5b\x09\x4e\xda\xea\xee\xeb\x42\x20\x2c\xc8\x44\x2d\x26\xd6\xe9\x84\x3d\x4c\x21\xc0\xbb\x6f\x5d\x84\x52\xe6\x5b\x13\x85\xc4\x05\x35\x4d\x33\x47\xb8\x6c\x1c\xa0\x9c\x8f\x6f\x50\x61\x13\x22\x31\x65\x81\xf1\x0b\x7e\x68\x8d\x5a\xe6\x1c\x97\x3c\xa0\x91\x23\xfa\x85\x58\x0c\x8e\x7e\x0e\xde\x9a\x2e\x3c\x86\xa0\xd0\x1b\x39\xad\x05\xa3\x10\x33\x72\x39\x41\x52\xe8\x0b\x09\x12\xd5\xb4\xf9\x2a\x91\xc7\x21\x0c\x22\x02\xc3\x86\xd4\x5a\xc5\xe1\x33\x59\x72\x3a\xf0\x9e\xa8\x08\xd3\x3f\xd1\xfc\xc3\x3b\x2a\xf0\x0a\x7e\xcb\x5f\x2f\xf3\x3d\xde\x05\xbf\xee\x7b\x22\x1d\xda\x63\x3b\x87\x16\x6c\xf0\x3e\x0c\x8e\x41\x56\x10\xc5\x18\x56\x8d\x87\x38\x8a\xce\xac\x5c\xfe\x71\x38\x4c\x57\xe3\x15\xdd\x52\x41\xbb\xe9\x30\x1f\xbf\xb8\x7a\xf6\xfe\xf5\xdb\xbf\x2d\x5e\xbc\x7e\x0b\x68\x36\xb0\x58\x3f\x1a\xe6\xdd\x87\x31\x85\x1e\x6a\x0b\xcf\x6b\xb9\xbc\x2b\x1f\x6b\x05\x7f\x22\xd7\x2a\x89\xdc\x24\xfa\x11\xb6\x11\xb6\x8d\x51\x11\x6b\x73\x62\x8a\x96\x6b\x83\xcb\xf5\xe1\xb4\xb8\x78\xab\xbe\xb6\x71\x4c\xf0\x92\x38\x5d\xc3\x70\x98\x5b\x1d\x04\xde\xb8\x0f\xdb\xe1\x70\xeb\x3e\xec\x89\x1f\xa9\x90\x22\xbc\x23\x93\xa7\xbb\xaf\xf6\xc6\x3d\x61\x37\x1a\xa1\x3b\x42\x67\xf7\x64\x3f\xdb\xcd\xe7\xb8\x1c\x7f\xf3\xdd\xab\xe7\xdf\xbd\xfa\xe3\xe2\xdd\x8f\x6f\xde\xbc\x7e\xfb\x7e\x38\x5c\x83\xed\xdb\xe2\xfa\xd5\xd5\x37\x3f\x5c\x2f\x3a\x9f\xcd\xdc\x2b\x23\xb5\x6f\x18\xdc\x7f\xa4\xf7\x68\x38\xbc\x06\x90\x22\xaa\x5f\x55\xe9\x3d\xbe\x43\x38\xbd\x71\x4d\x4d\x6f\xd5\x08\x3a\x1d\x97\xbb\x49\xba\xc7\xd7\x08\xa1\xc3\x21\x5d\xc0\x58\xcc\xee\xe7\x78\x29\xbb\x6c\x40\x2c\xef\xd1\xd7\x17\x97\xc3\x61\x7a\x47\x16\x92\xf2\x15\xe3\x5d\xfe\xc1\x98\x26\x2e\x2c\xfe\xdd\x1d\xca\xda\x1f\xef\x10\xc2\x1b\x39\x46\xdd\x92\x00\x79\xc9\x8b\xdb\xb8\xc0\x77\x52\x82\xbb\x99\xde\xba\x55\x21\x3b\x91\x39\x28\x0a\x07\xca\xa9\x91\x90\x5a\x10\x3d\x87\xc3\xbd\x01\xc0\x9a\xea\x7e\x90\xbb\xac\x27\x31\x8c\xd0\xd9\x97\x4f\x81\x0a\xd0\xff\x26\x2f\x05\xcb\xb7\xaa\xb9\xd7\x08\x6b\xc5\x37\x02\x91\x36\xa2\xed\xc6\x66\x9d\x7e\x92\x07\x59\xad\x4b\x79\xb6\xc9\x19\xaf\x50\x7a\x8d\xd4\xdb\xb6\x1d\x4c\x22\x4b\x4b\xf4\xb2\x6e\xfd\xb9\x76\x2e\x0a\x92\x8e\x33\xf1\x42\x99\x71\x05\xac\xf8\xca\x8d\xa9\xb2\x65\x6c\x13\x8f\x0e\x93\x28\x09\x52\x9f\xed\x85\x70\xb6\x17\x3a\x42\x2d\xc4\x09\x13\x33\xee\xdb\x5e\xf0\xb9\xbb\x52\xd5\xb1\xf8\x61\xe4\x8c\xd5\xb4\x67\x64\xd4\xd6\x05\x84\xac\x98\xff\x75\xd5\x15\x9e\x2d\x4f\x5b\x8d\xf7\x94\x7e\x78\x19\xa2\x31\x9d\xd3\x31\xab\xde\x15\x75\xb9\xa4\xee\x36\x27\x45\x4e\x21\x56\x51\xd1\xfd\x8c\xc1\x2f\xc8\x8f\x8e\xbc\x54\xea\x78\xc5\x59\xc2\x92\xf2\x64\xf9\x6e\x7a\x6b\xeb\xe7\xd2\x2f\xcc\xe7\x95\xce\xe5\xcc\x11\xe8\xe3\x2a\x82\x30\x51\xa7\xac\x60\xb6\x3b\x5d\xa6\xab\x54\xee\x6e\xbd\xff\x25\x65\xf6\x46\x09\x77\xc7\x40\xa6\x6f\x2d\x13\x51\xbc\x03\x5d\x66\x77\xe4\x63\x50\x31\xca\x0f\x40\xe5\xb8\xfe\x24\x28\xaf\x58\xc1\xa7\x49\x96\x8c\xe2\x9f\x52\x94\x25\x89\xd1\x3a\x7f\x95\x8c\x52\x20\x24\x3a\xb4\xa7\x6e\xe7\xe1\x10\x9e\x1d\xe6\x1c\x32\xe6\xe8\xfe\xc9\x61\x2a\x48\x11\x82\x30\x8c\xaa\xb8\x9a\xad\x9c\xa7\xd2\x88\x8e\x92\xaf\x13\xd9\x49\x2a\x5b\xb1\xea\x76\x2c\xaa\x3d\xe3\xff\x9d\xda\x33\x2e\x97\x04\xd7\x9a\x58\xc3\xb1\x9a\xc8\xca\x10\x63\x4a\xcd\x06\xec\x23\x9f\xaa\x40\x10\x52\xc5\x14\xc7\x3d\xc1\xe5\xd9\x2f\x4b\xf5\x41\xfc\x68\x57\xeb\xae\xb8\x90\x4e\x80\xac\xa3\xe7\xe7\xae\xe7\xfc\xbc\x77\x67\xcf\x6a\x38\x5c\xb9\x63\xf2\xce\x7d\xd8\x0d\x87\x3b\xf7\xe1\xd6\x04\xb7\xfc\x25\x34\x47\x29\x5c\x26\x4f\x4b\x17\x03\xb5\x1c\x8d\x0c\x1f\x30\x2b\xe7\xb8\x0a\x8e\xe9\x1c\xe1\x9a\x4c\xf0\xd6\x41\x2d\xd7\x5f\x6d\x9f\xd6\xa3\x11\x5a\x12\x40\x59\x5e\x93\x7c\xb6\x9c\xe3\x7b\xd9\x07\x73\x8c\x2d\xf5\x31\xb6\x21\xb7\xf2\xdb\x9a\x6c\x3a\xe7\xe2\xc6\x9e\x8b\xeb\xee\xb9\xb8\x46\x08\xdf\xc9\xbe\xb7\x0b\xdc\x9b\x02\xdb\xc7\xe3\x1e\xcb\x3c\xf2\x23\xb1\x58\xe7\xb7\x4d\xdf\xea\xc2\x31\xba\xee\x4b\x40\x92\xca\xbc\x55\x5c\x3c\xc2\x1b\xaf\x98\x23\x8b\xcc\xd0\x2a\x97\xb7\xbb\x67\xa0\x08\x4b\x35\xce\x00\xaa\x02\xd0\xb8\xd3\xbd\xe1\x09\x25\x5f\xa4\xc0\x9f\xe4\x2a\x97\x83\x60\xcf\xa6\xba\x65\xdb\xd8\x6d\x0f\xf2\x3b\x07\xf2\x5f\xb7\x87\xf1\xf3\xc6\x76\x04\x1b\x89\xac\x01\x63\x7d\xd1\x76\xb2\x67\xeb\x34\xc2\x72\x50\x87\xfb\x23\x97\xd2\x53\xfa\x54\xf9\xe1\x85\x30\x7f\xe7\x93\x33\x08\x98\x5c\xef\x69\x09\x50\xed\x8d\xc9\xe5\x2a\xfb\x4e\x03\x93\x46\x1d\x11\x7c\xd8\x52\xd3\x46\xc9\xf3\xbe\x28\x4a\xc3\xb8\xf4\x40\xf5\x18\x6e\x19\xf3\x38\x9f\x87\x5d\x00\x7e\x3e\x5e\xc8\x32\x0f\x87\x07\x88\xde\x4b\xf3\xe5\xe6\x99\xbe\x3d\x3c\x52\xc9\x17\x1a\x56\xc9\xb6\x9d\xf9\x0d\xd4\x68\x48\x0f\xcd\xd3\x16\x47\xef\xf9\x72\x18\x6f\x93\xe7\xb6\x13\x55\x80\xa0\xa0\xda\x54\x9c\xb1\xb1\xbb\x95\x1d\x0e\xd3\x82\x30\xd3\x35\x8e\x3d\x84\x85\x02\x01\x7e\x81\x3e\xcf\x22\xbc\x4e\x7b\xdd\xea\x81\xda\x3b\x90\xb2\xbd\x01\x29\x4b\xf5\x22\x77\x73\x8c\x86\x43\x6a\x47\x3f\x58\xda\x91\x05\x6c\xb6\x1a\x02\xc7\xc2\xae\x32\x83\x1a\x65\x86\x67\x8c\xd2\xd1\x68\xd8\x75\xde\x61\x79\x62\x27\x7f\x4b\xe3\x80\xe4\xac\xb7\xea\x00\x5c\xe9\x2f\xae\x04\x0e\xda\x48\x2d\x73\xd3\x97\x70\x08\xe2\x0a\x1a\xb2\x73\x27\x7a\x08\x20\xab\xb4\xa0\x69\x4a\x49\x8b\x3e\x20\xa4\x5c\x40\xbc\xc3\x57\xc9\x7f\x3b\x9f\xdd\x95\xa7\xa3\xe9\xb0\x9b\xb4\x9e\x46\xe8\x93\x41\xd9\x0a\xab\x36\xbf\x5e\x3b\x6e\x92\x9e\x13\xd2\xc5\x6d\xb7\xcc\x24\x28\x4e\x20\x54\xfc\xbd\x63\x98\xea\x31\x54\xf8\x5e\xff\xc6\x70\x16\x54\x86\xb5\xb9\xd7\x56\x42\x5e\x9c\xc6\x04\xe1\xfb\x31\xab\x14\x75\x3b\x9f\xc0\x0f\x85\xfc\x42\xce\x2f\x3d\x07\xa3\xfb\x47\xf4\x28\x5e\xfc\xd4\xcf\xbb\x07\x35\x7a\x91\xc7\x6e\x45\x4f\xb0\xcc\x50\x6a\xce\x28\x27\xc5\xfe\x3b\x39\x29\x26\x39\x29\x76\x44\xac\x30\xda\x6d\x1b\x94\xcc\x38\xb0\x07\xb9\xfa\xb9\xde\xb6\xb2\x4d\x0e\xb6\x85\x4f\xf2\xde\xef\x0a\xc9\xa6\xbf\x81\x98\xdb\xce\xf4\x91\x2a\x6e\x1c\xa4\x48\xd7\x04\x30\xc3\x6e\x19\x58\x94\x2d\x2e\xd8\x9a\x58\x94\x2d\x7e\x16\x1b\x98\x58\x97\x58\x2d\xfe\x56\x97\x64\x43\x61\x69\xd1\xaa\x33\x1e\xfb\xb2\x58\xd2\xaa\x3a\x3e\x26\x11\x11\xcc\x53\xcf\xb7\xf3\xc6\xa4\x37\x4d\x98\x75\xd1\x4d\xca\x62\x7a\xc6\x02\x17\xfe\xf4\xb9\x46\xc9\x2d\x51\x8c\x5f\x5d\xbd\xbc\x7e\xf7\xe6\xea\xd9\xf5\x3b\xc2\xbd\x1f\xc1\x97\xc5\x37\x7f\x5b\x7c\xf7\x3c\xf8\xae\x5e\xa9\xa2\x65\x57\xaf\xb6\x5b\xc2\xbd\x1f\x6e\x2e\x70\x31\xbe\xb9\x97\x3f\x49\x6b\x96\x1e\xd9\x75\x9f\xa7\xb8\x54\x5f\x80\x8a\xf5\x6c\xbf\x47\x4d\x14\x4e\x0c\x59\x1c\xa0\xb5\x9e\x60\xac\x20\xa5\x80\x8e\x99\x55\x3b\xde\xaa\x56\x52\xcb\x2d\x51\x2b\x96\xd5\xc2\x98\xbe\xfe\xcb\xf5\xdb\xb7\xdf\x3d\xbf\x5e\xbc\xfe\xe9\xd5\xf5\xdb\x04\xe1\xed\xff\x14\x19\xe8\x1e\xb2\xcc\x1c\x4c\x0b\x18\x01\x1b\xf6\xf4\x4f\xf4\xbe\xe7\x5c\xe8\x11\x3d\x3b\x48\xe7\x54\xf2\x02\xeb\x5a\x2d\x24\x73\xec\x94\x63\x18\x83\x76\xc9\x4c\x1d\x2c\xb3\x7a\xee\xfb\xb5\xcf\xea\xf9\xd9\x17\xd4\x09\x4b\x28\x6e\x6c\x06\x11\x63\xe0\x68\x62\x4d\x9a\xc7\xf6\xda\xd6\xe2\xa0\x2b\xe2\xb1\x35\x87\x92\x3d\x90\x6c\x50\x52\x3d\xfc\xdb\xd0\xf1\xb6\xbd\x2e\xb6\x27\x6d\x92\x53\xad\x74\xbe\xc8\x2e\x47\x03\xf6\x3f\x1a\x76\x48\xdd\x9d\xfc\xcf\xc9\xfa\x3c\x36\x21\x0c\xb3\x36\xdf\xa8\xef\x5c\xca\x47\xfd\xbd\x6c\x80\xb5\xcf\x09\x3a\xff\x88\xb3\xa2\x0e\x7f\xdd\x12\x93\x4c\xfc\x25\x63\xed\x26\x7f\x27\x92\x4d\x72\x7c\x9b\xf9\x64\xa3\x61\x99\x01\xe7\xb3\x52\x1d\x03\x14\xcd\x0f\x07\x83\x61\x6a\x54\x40\x9e\x4a\x89\xb0\xa9\xe8\x46\x72\x1a\x0e\x53\x46\x12\xc5\xc9\xa1\xcc\x83\x40\x65\xf2\x7c\xf4\xa5\x28\x88\x6f\x31\x65\x44\x47\xb3\x08\x83\x45\xd8\x92\x65\x02\x17\x2e\x2c\x12\x50\x42\x56\x07\x41\xc1\x20\x3c\x81\x91\x61\x92\x99\xaa\x79\xf0\x8d\x0a\xed\x35\x4f\x32\x1b\x3b\x0d\xdb\x8f\xaf\x00\x91\x46\x7e\xd3\xd8\x34\xee\x93\x62\x2f\xe4\x27\x6d\x2a\xe8\x3e\x19\x3e\x53\x7e\xb4\xe3\xe1\x3e\x83\x26\x41\x7e\x33\x06\x68\xe6\x83\x6c\xaf\x7c\x0f\xad\x75\xaf\xdf\xd2\xdb\xeb\x4f\x7b\xf9\xa1\xa4\xb7\xf4\xd3\xde\xfb\xa4\x36\xad\xfc\x64\xb7\x95\x6d\x04\xdb\x82\x6b\x25\x34\x82\x6d\xe9\x96\x55\x22\x69\x70\x49\x3a\x81\x9f\x0c\xab\xe4\x2f\x4b\x7d\x92\x9d\x14\x10\xc4\xee\x3a\xe1\x44\x4e\xad\x0e\x82\xc1\x06\xcd\xfe\x8c\xce\xc9\x25\x16\x48\x2e\xbe\x00\xe3\xc5\x45\x6a\xf1\x76\x6f\x1b\xc5\x0a\xc4\x08\xb7\x56\x5c\x20\xb1\x58\xa8\x11\xd4\xd0\x31\xb8\xdd\x10\x6a\x03\x44\x40\xdc\x72\xf3\xa4\xaf\xd9\x08\x1d\x7f\x7b\xf5\x6e\xf1\xea\xea\xfd\x77\x7f\xb9\x5e\xbc\x79\xfb\xfa\xaf\x7f\x0b\x5f\xbd\xfb\xdb\xcb\x6f\x5e\xff\x40\x3c\x66\x92\x1a\x4a\x4b\xa8\xe1\xee\x08\x75\xea\x21\x99\xd4\xa0\x80\x01\x0a\x22\xb7\xcf\xca\x10\xd4\x49\xc5\xb2\x41\xbc\xda\xab\xd0\xe7\x15\x15\xd6\x39\x4c\xfd\x74\xf8\xa0\x50\x91\xff\xf5\x36\xfc\xfa\xb1\xcc\xf7\x84\x8e\xdf\xbe\x7e\xfd\x5e\x56\xb9\xa1\xcb\x0f\xdf\xe6\xd5\x3b\x29\x2e\x41\x1d\x82\x96\x5c\xe6\x52\x2c\x27\xe4\xe7\xb4\xcc\x05\xfd\x63\xcd\x56\x84\x8e\xff\xf8\xe3\x77\xcf\x17\x7f\xba\x96\x5d\xaf\xd5\x9b\x15\x83\x11\xcd\x4b\x35\x6a\x00\x9f\xcc\xf3\xed\x3b\xe0\x0f\x64\xf3\xcc\x83\x64\xce\x20\xab\xc7\x4c\x94\x64\x72\x16\xe1\x10\x46\xa3\xb2\x51\x12\x85\x7f\x97\x99\xc3\x2f\xf9\x54\x11\x91\x26\x8b\x05\x2c\xbe\x64\x34\x18\x99\x88\x66\x08\xd7\x64\x36\x77\x25\x6e\x9d\xbb\x18\x64\x48\x46\x74\x94\x56\x23\x88\x3e\xb8\xde\x16\x45\x99\xc2\x63\x99\xf3\x55\xb1\x4b\xd1\xbf\xb9\x82\xd0\x48\x26\xb7\x67\x70\xad\xc0\x2e\xb8\xa4\xe4\xb2\xbc\x65\x4c\x1b\xae\x17\xca\x54\xff\xcd\xe2\x37\xaf\xc6\x12\x62\x97\xef\xfd\xde\xb9\xcb\x1d\xb7\xd5\xf2\x55\x14\xfa\xd0\xe6\x07\xe9\x97\xf6\xdc\xaf\x28\x2d\xdc\xf1\xfc\x56\x53\x17\x66\xdd\xe4\xd5\xf1\x7c\x4a\xd9\xd7\x80\x08\x8c\xd7\xe4\xc9\x3f\xc6\xa9\xc2\x33\x38\x48\x52\xff\x0f\x38\x19\x0f\x70\x48\xaa\x67\xf4\x04\x6f\x22\xf2\xb4\xdd\x29\x78\x4f\x36\xea\x94\x88\xab\x31\x1b\x64\x15\xa8\x89\xf7\x3a\x41\x5f\x5f\x5c\xc6\x80\xc0\xd7\x63\x41\x2b\x91\x6e\xcc\xc9\xe3\x23\xc2\x5b\x07\xb1\x49\xd3\xb9\x39\x0f\x41\xfb\x7d\x1d\x07\x72\x8b\xea\xde\xd1\x2d\x75\x49\x4e\xbb\x7a\x0c\x15\x11\x6b\x9f\x52\x84\x57\x7a\x96\x94\x26\x48\xfd\xda\xe1\xf3\x4b\xa5\x1f\xbb\xf3\x5b\x10\x80\xfd\xcb\xd3\x59\x0c\x87\x77\x36\x7b\x80\x93\xef\x85\x09\x56\x4d\x80\x65\xb9\x88\x97\xf6\xd1\x96\xb6\x88\x94\x76\xed\x95\xb6\xf0\x4b\xfb\x04\xa5\x2d\x5d\x39\x1a\xf1\x3d\xe0\x9b\xf4\xee\x72\x90\x16\x67\xde\x33\x11\x7a\x97\xf7\xb0\x4c\xa1\xb1\x8e\xca\xc2\x71\x69\xf6\xc2\x27\xd0\xc5\x71\x84\x6f\x53\x8e\x65\xa7\x11\xfe\x98\x72\x7c\x0d\x4f\x6a\x23\xbe\xee\x3f\xa0\xf0\xd5\xd1\x25\xf7\x81\x04\xa0\xee\xf8\xa5\x7f\x5b\x80\xdf\x93\xef\xdf\xbd\x7e\x35\x56\x87\x35\x5b\xdf\xe3\x67\xe4\x72\x32\xc1\x6f\xc9\xbf\xe3\x37\xe4\xc9\x7f\xce\xfe\xf1\xf1\xb7\xf3\xd1\x6f\x9f\xb8\xb1\x79\x15\x42\xec\x9f\x5f\x9a\x50\xab\xf6\x9c\x51\x11\x57\x1d\x83\x94\x75\x59\x26\x48\xa1\xcf\xad\xec\x18\xe3\xf5\x41\x0e\xc1\x43\x49\xce\x27\x67\x37\x25\xcd\x3f\x34\x10\xcb\xcd\x1e\x3c\x84\xbc\x3e\x1c\x1c\x73\x66\x3f\x20\x48\xec\xc0\xde\xdd\xf5\x99\xaa\xda\xd2\xb4\xac\x93\x84\x10\x72\x35\x55\x5a\x85\x69\x32\x33\x03\x9b\x25\x23\xf5\x6e\x94\x48\xce\x61\xe6\xf1\x32\xdd\xd2\x5b\x31\x64\xdf\xcb\x8d\xa3\x3e\xc0\x11\xa1\x83\xd0\xc6\x43\xd2\xb6\xe2\xaf\xfa\x85\x37\x3e\x23\xca\x11\xd7\xab\xd6\x44\xc0\xe4\x9a\x5a\x99\x31\x9c\x3d\x63\xe5\xb2\xde\xe6\xe5\x3c\x71\x7a\x72\xb9\xce\x28\xc2\xe5\xb4\x6d\xff\x2c\x65\xb7\xaf\xdf\xda\xbc\x9a\x19\x3b\x33\x80\xe5\xc9\x2c\xf1\x2e\xa2\xa8\x7f\x11\x25\xb3\xb2\x11\x91\x8d\x2a\xa7\xc9\x20\xc9\x12\x3c\x48\x70\xf9\x35\x79\x86\x1e\xd8\x88\x24\xe3\xf1\x78\x90\x8c\x52\x8b\xf3\xf5\x0c\x8d\x92\xc1\xae\x28\xe9\x80\x09\xba\xab\x12\x33\xb1\x23\xf2\x2a\xa5\xb3\x72\xae\x8c\xae\x75\x8b\x65\x01\x83\x79\x02\x41\x31\x47\x97\x98\xa3\xec\x91\x86\x1b\xd6\xcf\xb4\x1c\x17\x24\x79\x48\x70\x4e\x5e\xca\x59\x70\x5d\xc8\xdb\x5d\x28\x7a\xba\x50\xb8\x2e\xe4\xdd\x2e\xc8\x3d\x64\x7b\x40\x72\xd9\xfc\x62\x44\xfe\x99\x32\x34\x4a\xb2\x41\x32\x92\x5d\x62\x61\x97\x64\x81\x83\xc6\xeb\x92\xa3\x50\xff\xf4\x28\xd4\x1b\x45\xda\x01\xb6\x49\xae\x20\x97\xea\xbb\xf0\x22\x54\xe1\x99\xc6\xc3\xcb\xcd\xc4\x1c\xa8\xc7\xf3\x16\x0d\xf8\x21\x38\x0f\x5e\xf4\xd3\x16\xb7\xef\xff\xd5\xe2\x3e\x09\x51\x08\x92\xdf\xc6\x38\x04\xc5\x14\x0d\x87\x4e\x2c\x80\x17\x73\x29\xd0\xf4\xd6\xa5\x0e\x31\x95\x32\x45\x08\x7f\x13\x2b\x19\x98\x55\xfc\xa3\x5a\xfb\xf8\xe7\x3e\xab\x2f\xcf\xa8\x7f\xcb\x76\x4c\x10\x65\xe5\x3b\x96\x69\x88\x32\xa7\x1d\x57\xa2\x28\x29\xe1\xfa\x07\xfb\x17\x35\x26\x9a\x3b\x06\xca\x44\xfd\x6b\xc3\x84\x7d\xd6\x59\x0e\x07\xcd\xa0\xc5\x98\x99\x5b\x1a\x5e\xbf\xb9\x8c\xad\x43\xd4\xfb\xa0\x76\xee\x34\xb5\x15\x8e\x46\xb8\x93\x0f\x69\x68\x4d\xd5\x3c\x9b\x42\x9d\x73\xa6\x73\x32\x5d\x8b\xcb\xa9\x68\x4f\x4c\x42\x37\x3c\x5f\xdb\x31\x30\x66\xb3\xf2\x39\x6c\x84\x7f\xba\x07\xe5\xef\xeb\xf2\xb6\x6b\x01\xab\x32\x69\x4c\xc3\xee\x18\xfb\xa3\x6a\xc6\x5b\xf3\x59\x3f\x91\x6d\x9a\x18\x26\x3a\x41\x67\x1e\x47\xfd\x13\xb6\x7c\xf6\x16\x47\xb8\xf0\x2e\x8b\x04\xfe\x10\xb5\xe5\xaa\x14\x07\xe8\xb1\xf2\xdd\x6b\x41\xbd\x3e\xf5\x95\x8c\x37\x5d\xe3\x85\xcc\xa7\x7c\x65\x14\x43\x69\xde\xa9\x11\x01\x39\x81\x61\x4f\x76\xa8\x70\x4b\xae\xe8\xd6\xf6\xff\x93\xf7\xe6\xdd\x6d\xe3\x58\xa2\xf8\xff\xfe\x14\x32\xa7\x87\x45\x8c\x60\x46\x4e\xd7\x7b\x6f\x86\x29\xb4\x4e\x2a\x71\x3a\x99\xce\xd6\xb1\xab\x6b\xfa\xa9\x34\x1e\x5a\x84\x2c\x54\x28\x50\x4d\x82\x5e\xa5\xef\xfe\x3b\xb8\xd8\x49\xca\x76\xaa\x7b\xde\x6f\x3b\xc7\xc7\x22\x41\xec\xcb\xdd\x70\x97\xe4\x37\xde\x42\x2a\x86\x34\x42\x63\xe6\xbc\x51\x72\x90\x23\x54\x76\xa5\x54\xb7\x0c\x8b\x33\x60\xc9\x60\x38\x14\xaf\xfc\xd4\x37\xe7\xab\xcc\xce\x03\x3d\x5d\xdd\xa4\x6c\x11\x9b\x46\x6a\x64\xec\x3c\x55\x89\x3c\x2c\x61\xcd\x05\x49\x22\x1c\x23\x3a\x8d\x1a\x01\xd5\x64\xce\xb7\x2d\x11\xd3\x88\xb7\x3a\x55\xe3\x49\x95\xda\xdc\xea\xd4\x44\x72\x35\x11\x8a\x70\xee\x1a\xc7\xb5\x1c\xa2\x66\xe7\x04\xee\x72\x7a\x1b\xac\x59\xc0\x35\xd6\x2c\xe1\xe0\x41\x90\x94\xee\xf4\xf0\x46\x5f\x8e\xc6\xf1\x6d\x22\xd0\x54\x12\x81\xa7\x89\xc0\x6b\x84\x32\x45\x10\x66\xa0\x95\x12\x30\x9a\x17\xb8\xc3\x88\x9e\xe0\x0e\xa3\x7a\x89\x3b\x8c\xec\x35\x76\x3c\x6e\x7f\xbf\xf6\xbc\xfd\xd2\x38\x1e\x0c\x10\x25\x4f\x4e\x26\x89\xb1\x09\x6c\xe9\x1e\x23\x1d\x0e\x54\x7b\xb8\x22\xf4\xa0\xa8\xee\x2d\x1d\x71\x48\x48\xc2\xbd\x2b\x42\x2f\xd0\xb5\xab\x29\xa9\xe5\xa1\xf7\x04\x13\x7b\xee\x14\x6b\xb4\xbb\x5e\xb1\x92\x26\x5a\x36\x51\xa3\xc0\x1a\x13\xfb\x8c\xff\x3b\xec\x8b\x04\x06\x50\xba\xc2\x71\xf6\x1e\x72\x26\xe6\xd6\xc2\x92\xc3\x78\x9d\x70\x61\x80\x2d\xd2\xf8\x69\x3a\x9b\x67\xaf\x15\x06\x05\x73\x1f\x27\x9c\x18\x28\xf3\xde\x70\x04\xd8\x49\x33\xc2\x39\x54\xc7\xeb\xbd\xe3\x2c\xf0\xc0\x7d\xda\x88\x26\x6e\xba\xc1\x7d\x73\x2f\x88\xb0\x0b\xbb\xee\x19\x76\xed\x17\x39\x8a\x01\x91\xe3\x60\xc4\x75\xe5\xbb\x2c\x8a\xf0\x80\xb6\x50\xfd\x07\x1d\x5c\x2a\xc2\x11\xc2\x77\x89\x98\xd5\x73\xb4\xdd\xca\x14\xaa\x5e\xdc\x6a\xed\xfa\x32\x4b\xd3\x75\x3b\xde\xa9\xf0\x08\xd3\xec\x8d\xbe\x00\x83\x29\xe9\x4b\x8a\xde\xe2\x01\x91\xd2\x8f\xd8\x49\x9c\x16\xd8\xc9\xa1\xfa\x4b\x73\x78\xa8\x66\xfe\x27\xc7\x8e\x3b\x01\x96\x9f\xdd\x64\x53\x44\xae\xcc\xa6\xe4\x5d\x7f\xf3\x45\x78\x57\x8c\x5e\x37\xcf\x00\x1f\x0c\x49\x94\xd5\x67\x4f\x9e\xfc\xeb\xdf\x5a\x5a\xdf\xee\xff\x1e\x5e\x6e\xf5\x3e\x83\x57\xbd\xf3\x42\x07\x55\xf6\x2e\xc5\x5c\xce\x45\xb5\xde\x54\x5c\x66\x53\x87\x78\x20\x8b\x71\x54\x40\x6f\x84\xf3\x4f\xd0\xcb\xa5\x9e\xe0\xfa\x4c\x3e\xee\xaf\x07\xc4\xcc\xe7\x70\x9d\xfe\x40\x75\x26\xf3\x8a\x95\x05\x54\xf8\x84\xcc\x32\xe1\xbc\x11\xb9\xa0\x4f\xcd\xfb\x58\xae\xae\x57\x86\xc1\xe9\xcb\xc5\xb3\x5c\x88\xfa\x81\x75\x50\x53\x7b\xbe\x51\xea\xcd\x03\xf9\x60\x1d\x75\xb6\x23\xbb\x24\xfb\x2b\xd4\xfd\x5a\xe7\x3c\xbf\xdc\xbb\xac\xb9\x78\xb6\xcc\xcb\xf2\x22\x5f\x7c\x85\x2f\x47\xc6\x7d\xc7\x93\xc2\x3d\xe2\x0d\x2e\xf0\x1a\xdf\x76\x04\xcb\xc3\xa1\xc6\x29\x8e\x7e\xfd\xb3\xda\xaa\xf7\xbe\x67\x87\xc9\x3e\xcf\x0e\xe6\xa6\x60\xb7\x43\xf8\x91\x2a\x5f\xb3\x46\x56\x56\x3c\xb9\xea\xb0\xd8\x83\x2d\xe4\x45\xf1\x4a\xee\xb0\xbf\xc0\x8e\x7d\x52\xfd\xc0\xc6\xda\x42\x0f\xd6\xce\x9a\x53\xb6\xde\x94\xf4\x55\xc9\x16\x5f\x9f\x5c\x7d\x50\xea\xc1\xfa\x2f\xa9\x90\x7d\xf8\xb1\x6a\x79\xd1\x3c\xb9\xfe\xa0\xd4\x53\xea\x7f\x55\x32\xca\xc5\x17\xba\x10\xdf\xdc\x88\x57\xf4\xc9\x23\x61\xfc\xd2\x15\xfb\x4d\xa3\x0a\x6a\x78\xac\xdd\x2f\x55\x05\x25\xbf\x69\x6c\xb6\xd0\x63\xb5\xdb\x8d\xf2\x4d\xd5\xbb\x52\x4f\x99\xb5\x77\x4f\x3d\x1a\x76\x96\xde\x3d\x7c\x2a\x74\xae\x93\x92\x2a\x67\x33\xdf\x56\xb9\x2e\xf6\x60\x0b\xcd\x6f\x6b\xa1\x79\x7a\x0b\x56\x7f\xfd\x54\xdc\x96\xf4\xb5\x36\x65\x63\x15\xff\x40\x9b\x26\xbf\xa4\x4f\x6e\xf3\xb1\x8a\x1e\xec\x05\x98\x9d\xbc\xf6\xf0\xef\x93\x1a\xad\x9f\x04\x1d\x5f\x19\x34\xf1\x5e\x23\xee\x27\xd5\xcd\x9e\x54\xf7\x19\xbd\x11\xa7\x06\xe9\x3d\xa9\xde\xea\x89\x7d\xae\xe9\x37\xc0\xda\xfc\x69\x95\x4a\x82\x02\x14\x8a\xbe\xad\xcb\xcd\xd3\x6a\xb7\x67\xf1\xdb\x6a\x6f\x9f\x54\xbb\xac\xf8\x54\x52\x2c\xdf\x56\x79\xf9\xe4\xca\xb5\x8e\xe8\x93\x6a\x5d\x3c\xa9\x56\xe5\x63\xe8\xdb\xfa\xbb\x7c\x52\xcd\x1f\x7e\x3a\x03\x2b\xb1\x57\x27\xef\xdf\x3f\xb1\xe2\x55\xea\x17\x7a\xb0\x76\x45\x5d\x7d\x36\x34\xd8\x93\xaa\xdf\x3c\xa9\xdf\xab\xbc\xf9\xd6\x6a\x5d\x91\x27\xf4\xf9\x95\x23\x08\x9f\x54\x7d\xf1\x0d\xeb\xf8\xc1\x90\x90\x4f\xaa\x79\xfd\xa4\x9a\x0d\xd5\x29\xf7\xdf\x17\x43\x73\x3e\xad\x81\x5b\xaf\x81\x3e\xe3\xd4\xa7\xb8\xfb\x3c\x94\x62\x89\x1e\xd1\xc0\xf1\x37\x8d\x0b\x50\x1e\xa4\x2a\x0f\x85\x46\xff\x2e\xd8\x9a\x0f\xf7\x6c\x0f\xcd\xfd\x5b\xbb\x6a\x94\x98\xa0\x3f\x4e\x76\x88\x12\x15\x1c\x6e\x6f\x4f\x42\xa6\xee\x51\xa7\x85\x5a\x99\xe9\x5b\x3c\x67\xeb\xf5\x57\x06\x5f\x2a\x4c\x02\x34\x1a\x3a\x5f\xf5\x63\x5c\x8f\x84\xef\x16\x3f\xb2\x25\xb2\x68\xac\x44\x2b\x65\x7e\x5b\xb5\x0f\x57\xa0\xa3\x0c\x44\x82\xae\x37\x65\x2e\x68\x66\x6b\x69\x9e\xe9\x6a\xf6\x6d\x9d\x3d\x4c\xdd\xbe\x85\x79\xc4\xc9\xde\x23\xac\xe0\x37\xfa\xe0\x1b\xf6\x67\x25\x19\x32\x72\xdf\x50\x5e\xf4\x02\xeb\x0c\xc4\xd8\xab\x1f\x8e\xb1\x37\xe0\x28\xfe\xc0\x7a\x95\xc1\xca\xd8\x5b\x7b\x74\x6b\xb4\xb5\x85\x7e\x9b\xd1\x39\x58\x7f\x56\xdb\xed\xe1\x84\x10\x52\xf9\x17\xcd\x35\x52\x22\xa7\xbc\xa7\xc5\x6d\x9d\xb8\x81\xc5\xb7\xe7\xa9\x2c\x0f\x3c\x56\xee\x0e\xaa\xf4\xf4\xe4\xe3\xeb\xf3\x97\xaf\xce\xde\x7d\xfa\x18\xc7\x49\xfe\x94\x88\x82\x7f\xe7\x68\x8d\x7e\x8c\x6f\x14\x41\x89\xf3\x53\x57\xf5\xdd\x58\xc8\x95\x4d\xa3\x31\xed\x2b\xa6\xdb\xe8\xcf\x87\x84\x24\x15\x51\x26\x2b\xda\x09\xdd\x80\x28\xab\x9a\x56\xa1\xcb\xf4\x5a\xc7\x8d\x09\xdc\xf8\x25\xf7\xda\x7b\x61\xd5\x71\x5d\x58\xef\xc0\xa7\xfa\x9e\x7b\x95\x38\x16\x33\x16\xc0\xb2\x39\xe8\x49\x88\xf4\x2a\x2f\x5b\x0a\x82\x79\x65\x14\xad\x9a\x21\x39\xc2\x7b\x5d\x3e\xb6\x0f\x1f\xa5\x41\xf1\xcc\x7e\xb7\xc8\x0f\x4a\xb1\x7e\xb3\x7f\xfc\x85\xa5\xd0\x94\xcb\xde\x07\xfc\x4e\x1e\x3f\xc5\xef\xa4\x59\x5b\x47\xf9\x19\xcd\xfd\x1d\xc2\xf9\x66\x43\xb9\xe2\xff\x83\x23\x69\x2c\x20\x6c\xa1\x7d\x6e\xa5\x9f\x26\x0f\x1b\x9e\xc3\x6f\x0b\x30\xb0\x47\x39\x37\x54\xbf\x99\xcd\xd1\x03\x0e\x3f\x87\x8d\x54\xb3\x99\xd2\x15\x05\x9a\x3b\xc2\xee\xc5\xf8\x4b\x88\xe6\x98\x71\xd6\xf1\x96\x6c\x95\x4f\x86\xb5\x54\x76\xd8\xd5\x99\x31\xdc\xab\x33\x63\x8f\xcc\x63\x28\x9f\x7c\x6c\x13\x1a\x7c\xf7\x0f\xf6\x9d\xaa\xf4\xe9\xee\x8f\x7f\x9f\x45\x2a\xa4\xdc\x47\x7a\x5d\x32\x4e\x23\xfc\xfc\x7f\x65\xd1\x22\xe7\x0b\x5a\x46\x3b\x77\xb1\x9d\x1b\xf7\xf6\xaa\xa0\x73\x61\xcd\x7b\xf0\xc6\x7e\xa0\x08\xe7\x61\x4e\x38\xd8\x11\x3a\x60\x21\x1c\x1d\x70\x98\xc9\x9f\x08\x62\x66\x39\xae\xe7\x3b\xdf\x5d\x84\xab\x24\x8e\xab\x24\xc7\x35\xc2\x55\x1c\x1f\x06\xfd\xb8\x68\x2f\x2e\x4a\xda\x44\x28\x8e\xeb\xb4\x11\xd5\x46\xee\x99\xfc\x32\x57\x7b\x60\xbf\x27\x72\x9e\x9e\x01\xaa\x08\x58\x0b\x7c\x0f\xc3\xca\xa2\x08\xcb\x99\x60\x17\xad\x73\xc8\x91\xcd\xa2\xbc\x15\xd5\x22\xdf\x30\x91\x97\xec\x4e\xae\x23\x24\x54\x75\xad\x54\x6e\xe5\xdb\xb2\x5a\xb4\x72\xfd\x0b\x2b\x41\x8c\x96\x55\xbd\x8e\x70\xb4\xce\x6f\x8c\x7b\xa3\x68\xcd\xb8\x7d\x06\x7f\x3e\xab\xaa\x2c\x40\xa8\x5a\xd3\xbc\xa8\x78\x79\x0b\x8f\x7f\x6b\x59\x0d\x55\x34\xb4\x54\xce\x7d\x5f\xb3\x9a\x1a\x3d\xe2\x66\x43\xcb\x12\xae\xff\x22\x89\xf7\x2e\xb4\x88\x3f\x12\x4c\x94\x92\xa8\xf2\x2a\x56\x9e\x67\x4d\x9f\x24\x14\xb2\xbd\xd1\xae\xd8\xbf\xf5\xe8\xa8\x8b\xec\x8a\x27\xd1\x26\x6f\x04\x0d\xdc\x24\x50\x25\x2b\x01\x67\xf7\x2e\x20\x84\x2b\xb1\x68\xc5\x37\xe5\x67\x7c\xf3\xa4\x12\x3b\xac\x37\x03\x38\x27\xe7\x82\xd6\x9b\x9a\x8a\x3f\xd1\x5b\x10\x89\x0c\xc5\xb3\xab\x66\x34\xfd\x4a\x6f\x5f\x55\x85\xa2\x36\x1e\xa8\x3d\x41\x58\x04\x56\x1e\x62\x0e\x77\x2e\xc3\xb9\xb3\xd0\xb6\xca\x8f\x21\xa0\x4f\x8e\x1a\x89\x2e\xac\xd1\xe4\x0e\x2f\xfa\x81\x31\x1e\xea\x13\xb5\x21\x46\xf5\x99\x0f\x4a\xe6\x49\x44\xe5\x2c\xe8\xa9\x93\x67\x38\xd1\x20\xe2\x88\x1b\x18\x61\x30\x06\x56\x80\xa2\x57\x41\xb3\xc8\x37\xf4\x68\x53\xd3\xa6\xf1\x32\xc3\x36\x7f\xc7\xbb\xb9\x21\xf9\x48\x32\xff\x61\xce\x4f\xed\x90\x07\xe5\x7d\x63\xc2\xb6\xa6\xca\xae\xbb\xac\xea\x2b\xbd\xfd\x2c\xfb\xd1\x6d\xf5\x2b\xbd\xed\x75\xf0\x2b\xbd\xfd\x69\xd3\x6f\xb3\xbf\x2b\x74\x7b\xb2\x0e\xc9\xb4\xf8\x15\xbc\xae\xae\x7b\x23\x94\xf9\x8a\xea\xda\x1b\xe1\x23\x28\x62\xe8\x82\xe8\x1f\x1c\x70\xea\x5c\xd4\x39\x6f\x98\x2c\x77\x56\xed\x73\x4c\x76\xbe\x68\xeb\x9a\x72\x01\x92\x1f\xcc\x07\x12\x8d\xae\xa7\x7c\x06\xf2\xdb\x7b\x27\x14\x4b\x22\x2f\xa5\x37\xcc\xfe\x6a\xf3\x40\x9e\xc2\x26\x8b\x63\xfd\x60\xe9\x96\x27\x4c\xcb\xb7\xb0\x43\x4f\xe3\x8d\x2e\xea\xea\xba\xd9\xe3\xb9\xfc\x5b\xaf\x32\xf5\x4d\xe8\x93\xad\xeb\x2c\x86\x6d\x3b\x4a\xce\x6e\xe9\xea\xa7\x12\x3b\x3d\xf4\x13\xcd\x31\xa7\x79\x4d\x1b\xf1\x69\x09\x1e\xe1\xbb\xec\x8a\xef\x48\x20\x97\x8b\x2a\x29\x42\xcc\x49\x60\x0a\xa3\xdb\x1f\x0a\x41\x6d\xbc\x1b\x24\xc2\x57\xaa\x1e\xfa\x1e\xf8\x03\xdb\xbd\x10\xca\x91\x82\xcc\xeb\x6e\xfa\xe5\x2e\x75\xdd\xd8\xed\x4c\xe7\x7f\x66\x62\x35\x18\x6f\x65\xef\x10\x4c\xfd\x14\xec\x47\x1e\x68\xa1\xa6\x35\xe5\x05\xad\xf7\x7a\x75\xf7\x37\x7b\x6a\x72\x1b\x2b\x56\x0d\x8c\x32\x30\xc2\xfd\x7b\xc9\x79\x13\xb9\x56\x36\x40\xc1\x00\x58\xdf\x1f\x38\xa2\xfe\x77\xdd\x30\xb9\x3e\x3e\xb0\x7a\x20\x53\xed\x09\xc2\x06\xfc\x0c\x72\x65\xe1\xd7\xe0\xdb\x4e\xb3\x0d\x83\x10\x21\x54\x83\x12\xa4\x4a\x57\x79\xf3\xfa\xd3\x87\x01\xfa\x8d\x4e\x8b\x6a\x01\x48\x3f\x85\xe3\x70\x0a\xa4\x48\x55\x27\x14\x65\xba\x3b\x76\x9c\xa6\x45\x13\x55\xd7\xc4\x6a\x82\xe4\x7d\xb3\x64\x0b\xd9\x76\x2e\xaa\xe2\xd6\xad\xc8\xbb\x42\x91\x28\x4b\xc6\x0b\x3d\x8b\xef\xf8\x67\x58\x78\xfd\x3a\x30\xc0\xe8\x9f\xb4\xa3\x22\x5b\xc9\x81\xe7\x0d\xc1\xcd\x18\x9a\x4d\xe6\x40\xe9\xfa\x89\x98\xca\xe4\x1d\xbe\x66\x65\xf9\x0e\xd0\xa5\x69\xa8\xc5\x05\x2b\xba\x49\xe0\xfe\xbb\xa4\x79\xfd\x45\x6d\xbf\x76\x28\x10\xe5\x13\x09\xaa\x70\x8f\x9a\x48\x94\x7a\x8b\x7a\x8e\xa5\x5c\xeb\xee\x08\x38\xe2\xa3\xc5\x22\xbf\x94\x8c\xcc\xdf\x45\xdc\xd9\xa9\xdb\x6e\xa3\xc8\xf8\x2a\xd5\x15\x6f\xb7\x49\x98\x47\x33\x07\x81\x41\x3b\xda\x61\xe5\x4c\x11\x30\xed\x43\x51\x3e\x82\x51\x7b\x65\x6c\xd8\xdc\xfd\xf8\x64\x8f\x76\xc2\xb7\x5a\xac\xa1\x7b\x9f\x55\x80\x80\x5f\x26\x12\x87\xe2\x10\x1a\x72\xbf\x7b\xb0\x07\x7d\xc5\x97\x3e\x56\x33\x66\xe2\x03\x0e\x2d\x1f\x08\xeb\xd2\xe7\x1f\x7f\xa3\xea\xce\xdf\xa9\xc2\xf1\x48\xbb\xe7\x7a\x06\xdc\x75\xe5\x23\x4a\x1f\x03\x7c\xec\x82\xdc\xaf\xab\xb6\xa1\x40\x49\x64\x11\x3c\x57\x57\xb2\xaf\xf0\x58\xd2\xfc\x8a\x9a\xe4\x56\x44\x3b\xdf\xdd\x40\x57\x38\x4c\x15\xd5\x7f\x2f\xaa\x76\xb1\x6a\x44\x5e\x8b\x2c\x82\xe7\x53\xf9\x1c\x61\x78\x5e\x57\xb2\x42\x78\xfc\x50\x5d\x51\x9d\x2a\xc1\x95\x4a\x3c\xe1\x85\x4e\xd3\xf4\xb1\x4a\x7e\xa5\xb8\x6a\x49\x25\x4a\x6a\x30\x8b\x34\xb9\x08\x29\xed\x06\xde\x7f\xda\xc0\x1b\x50\xa6\x90\xf0\x59\xd1\xa8\xd0\x7b\x55\x0a\x1e\x55\x39\x78\x94\x25\xe1\x41\x96\xd5\xb1\x23\xd6\x94\xb7\xda\xa1\xf4\x8d\xf8\x40\x79\x1b\xe1\x45\xc9\x16\x5f\xb3\x68\xa1\x74\x3c\x8a\x8b\x52\x27\x14\x55\x7b\x61\x55\x3f\xa0\x1e\x35\x3c\x78\x54\xc3\x03\xba\x9a\xf1\x2c\xd2\x14\xbc\x4e\xa9\x5a\xa1\x93\x3e\x49\x92\xbb\xb7\x06\x27\x8a\x8f\xe8\x2d\xc2\x7b\xf9\x1c\xe1\xa6\xbd\x58\x33\x91\x45\xea\x37\xc2\xc0\xb1\x65\x86\x71\xd3\x4c\x4d\xb4\x30\x21\x10\xea\xfc\x52\xaf\x87\x7c\xd4\xcb\x21\x1f\x55\x82\x7a\xd6\xcd\xcb\x47\xdd\xba\x7c\xd4\x8d\xcb\x47\xdd\xb6\x7c\x94\x5b\x44\x25\x7e\xba\x52\x39\xab\x8d\x7c\xaf\x36\xa6\xae\xc2\xd4\x54\x44\x3b\x5c\x57\x95\x85\xdf\x91\xc4\x36\xd1\x43\x30\xd2\x68\x73\xab\xfd\xfd\x56\xb9\x87\x6d\x3a\x6a\xd3\xea\x66\x04\x37\x54\xf4\xa2\x17\x2b\xbb\x21\x55\x05\x84\x80\x52\x8c\x87\x92\xf5\x7a\x0e\xc2\xc0\x82\xdf\x93\xfd\xaa\xfd\x0b\x2e\xfd\x0f\x94\x8a\xa9\xf2\xa3\xcd\x7c\x66\xd2\x1b\x4a\x84\x85\xf1\x4a\xdd\xad\xca\xcf\x85\x70\xe3\xb9\x26\xce\x3b\xaa\x4b\x28\x69\xac\x16\xf3\xa1\x27\x3b\xce\xf6\x50\x01\x15\x42\xca\x3b\xce\x7b\xd6\x40\xb8\x45\x03\x1f\x25\x62\x61\x1a\x0c\x20\x6b\xb3\x93\xc0\xb0\x9d\x0b\x03\x28\x9f\x17\x05\xdc\xa7\x0f\x16\xc5\x87\x4d\xca\x9a\x24\x4a\x07\xbe\x21\x17\x0f\x4d\x92\xc4\x60\x28\x9e\x44\x3f\x71\x39\x92\x91\xa8\x46\x79\x51\x8c\xbe\xeb\x95\xfb\x6e\x04\x1d\x96\x19\xe4\xbc\x8c\x34\x0e\x1b\x25\xd1\x18\xe2\x9c\xa8\x91\x6d\xb7\xcd\x6c\x32\x37\xf8\x0e\x8d\x23\x94\x8e\x3e\xe4\x5f\xe9\xa8\x69\x6b\x3a\xba\xad\xda\x51\x43\xc5\xc8\x9b\x58\x59\x9f\x58\xd1\x91\xdc\x4f\xa3\xaa\x1e\xe5\xdc\xd6\x0c\x2e\x4d\xd5\x97\x34\x42\xda\xd9\x86\xda\x10\x5a\x81\xc5\x5c\x59\x26\xc8\xda\x4b\x97\xb2\x58\x8d\x6a\x49\x9a\x79\x7a\xca\x49\x69\xdc\x52\xc1\x5e\xd3\xdb\x31\x69\x70\x89\xeb\x59\x39\xc7\xad\xd9\x85\xfa\x4b\xd6\x17\xd0\x82\x4c\x16\x57\xb8\x35\x3a\x77\x7a\x7b\x11\x1e\xc7\xbd\x0d\x31\x4d\xd8\x80\x6a\x35\x23\xf5\x8c\xa6\xac\x98\xe3\x8a\x1c\x5a\x42\x92\x69\x0f\x5e\x3e\x06\xe7\x60\x41\x51\xed\x70\x35\x50\x8d\x41\x07\xa0\x01\xa8\x6c\x9a\x5f\x1a\xc6\x27\x89\x8a\x5c\xe4\x47\x7a\xf9\xcc\x15\xc9\x92\x38\x47\x16\x3d\x14\x3d\x5b\x80\x14\x07\xa8\x95\x05\x38\x0c\x84\x90\x03\x34\xb5\xdc\x54\x83\xcc\x55\xce\x92\xcc\x64\xe7\x27\x2f\xaa\x1f\xd8\x8b\x6a\x3c\x46\xa0\xd0\x9f\x93\x3a\x65\x82\xae\x61\x5f\xf2\x7c\x4d\x9d\x79\x6a\xaf\x37\x47\x11\x8a\xe3\x64\x49\x96\xc6\x4d\xe0\x43\x3d\xcb\x95\x88\x67\x8e\xc0\x0b\xd5\x12\x3a\xd7\x92\xc9\x8b\xf6\x87\xa5\xf5\x5a\x38\x1e\x23\x79\x44\x4a\xb2\x9c\xb5\x73\x14\xc7\x65\x0a\x20\x00\x34\xb3\x09\xe1\xc8\x2a\x62\x68\x17\xd5\xa0\x7f\x6c\xef\x80\x16\x33\x31\x9f\x26\x2d\xfc\xe2\x25\x11\x78\x35\xa4\x12\x4f\xec\x39\x56\x80\x4b\x2d\x52\xf4\x01\x80\xfc\x95\x72\x36\xee\xd4\x02\x39\x13\xee\x4b\x42\xf1\xe1\xb1\xfc\x13\xa9\xa4\x00\xe0\xd6\x43\xe4\xac\x84\x18\xe9\x35\xa5\xfc\x3f\xec\xd3\x5f\xb1\x48\x17\xa0\x0e\xf7\x1f\xf6\x09\xd2\x44\x5d\xfe\x89\xde\x62\x91\xe6\xa5\x50\x0f\xcd\x8a\x2d\xf5\xa3\xa4\x76\xd4\xd3\x45\x2b\x44\xc5\x81\x0a\x2b\x25\x6b\xac\x44\xb5\xfb\xae\xff\xb9\xbd\xf6\x33\xf2\x5b\x61\x02\x46\x05\xf7\xff\x2a\xa6\xdf\x86\x0c\x40\xf3\x59\x3b\xef\xdd\xff\x29\x4e\x82\x9a\xaa\x38\xa1\x61\x77\x5e\x88\x38\x06\x1f\xfe\x29\xaf\x0a\x2a\x01\x50\x1c\x27\x87\x7c\xbb\xe5\x87\x60\x27\x7c\xa8\xc2\x3f\xe5\x8c\x37\x09\x47\xe8\x05\xaa\x67\x42\x1e\x99\x29\x4b\x04\x5e\x25\x4b\x4c\x11\xca\x20\x22\xec\xc3\x7b\x3e\x8e\x2b\x57\x00\x3b\xb6\xf7\x63\x55\x80\x7d\x46\x5e\x28\x57\xc3\xc6\xe2\x22\x69\xf1\x06\xa1\x2c\x29\x06\x07\x2a\x06\x42\x7c\xd8\x41\x6a\x63\x09\xdd\x51\x60\x4b\x21\xfe\x13\x03\xa6\x08\xdd\xd3\x74\x53\x43\x75\x3a\xec\x6c\x02\xbe\x67\xbb\x42\x77\x6d\x1e\xb8\x33\x40\xff\x49\x63\x84\x76\x2a\xd5\x8e\x32\x66\xed\x8c\x54\xd9\x5a\xf4\xe6\x1c\x0d\x4e\x81\xc0\x05\x92\x73\x40\xd3\x8a\x27\x62\xac\xb1\x47\x84\x0d\x1a\x51\xea\xe2\xfd\x89\xa8\x67\x4a\x4c\x58\xcc\x31\xf3\x00\x9b\x00\xf7\x21\xa2\x03\xd8\x92\x09\x2e\x3d\xde\x1c\x81\x63\x11\x39\x23\x9d\x36\x67\xbd\x01\xcf\x07\xda\xd6\x77\xc4\x34\xd5\xcc\x90\xda\x64\x1e\xe8\xc2\x39\xb8\x40\x00\xef\xaa\xdd\xa6\xb1\x20\x93\x17\xe2\x87\xca\xc0\x12\x31\x1e\x23\xb0\x04\x03\xa3\x26\x80\x68\xc2\x40\xb4\x32\x6f\xc4\xbb\x07\xa0\x1a\x9e\x28\xe7\x2c\x0f\x81\xb3\xda\x80\xb3\x38\x66\x21\x94\x8a\x63\x08\x6c\xe1\x5c\x8f\x33\xa8\xcd\xc2\x2c\x8a\x70\xae\x7c\x2e\x30\x84\x76\x60\xbb\xd7\x45\x82\x7d\xe7\x4d\xe6\xc6\xe7\xd3\xb5\x0d\x10\xef\x3c\xb1\xc5\x31\xb5\x1a\x1a\x21\xc7\x92\xad\x73\xc6\x23\xb4\xdd\x3a\xc5\xb8\x21\xde\xdc\xb6\xf1\x00\xcd\x24\x3c\x9a\x49\x9e\x17\xb3\xfd\xa6\x74\x1f\x65\x24\xcf\xcb\x10\x81\x15\xfa\x43\xe9\x9f\x50\x64\x82\x4d\x87\x3b\x9a\x0f\x11\xa1\x33\x3e\x57\xb4\x55\x48\x54\x51\x94\x56\xcb\x65\xe2\x76\xe0\xbf\xfc\x4b\xe4\x99\xf5\x39\x7a\x4d\x35\x34\x4c\x77\x3d\x7e\x7b\xba\xc3\xc6\x24\xa6\x2f\xdb\x89\x92\x8e\x1e\x2a\x8a\x80\x85\x3f\xd8\xcf\x40\x1b\xee\xf5\x69\x61\x28\x87\x04\xbd\x8f\x5e\xe7\x87\x4b\x11\xfa\x2b\xd1\x6a\x11\x8c\xf4\xb2\x1d\x2a\x88\x03\x4e\xe5\xff\xfd\xcf\x3f\x9d\x7c\xf9\xeb\xf9\xbb\x8f\x67\x27\x7f\xfc\xf2\xf2\xec\xdd\xa7\x8f\x07\xdc\x0a\xcf\x92\x9a\xb8\x90\x7f\x6c\x0d\x83\xd0\x95\xe1\x43\x16\xc7\xf5\xb4\x56\x87\x45\x02\x2c\x09\x32\xbb\xef\xea\x3c\x9e\xd5\x39\x6f\x96\xb4\x8e\x50\x36\x8b\x2c\xb3\x14\x61\xcd\x1c\x45\x96\x3b\xd2\xcf\xa5\x62\x84\x22\xc3\x09\xc1\x23\x84\xc1\xd0\xbc\x4f\x34\x37\xee\x58\x93\xc0\xda\x48\x37\xbe\x64\x37\x6f\xab\xea\x6b\x33\xa3\x73\x72\xbf\xa9\xab\x4d\x23\xdb\xf5\x3b\x32\xdf\xed\x50\xd6\x9b\x17\x09\x21\x7d\x3d\x0e\xa6\x6d\x29\x21\x3a\xe4\x63\xeb\x3c\x20\x2d\x78\x5c\x63\x6c\x68\x23\x7c\xa3\x26\xc7\x80\x25\x1c\x7d\x58\xb0\xd3\xb5\xa4\x79\xa0\x97\xbf\x3d\x06\xb7\xc1\xc3\xcd\xa6\x64\x22\x89\x9e\x45\x08\x73\x22\x66\xc6\xa6\xed\xe8\x78\x6e\xcf\xaf\x9f\x48\xa2\xf3\x68\x2c\x09\xa5\x5f\x2b\xc6\xa1\xd8\x6e\x68\xa8\x92\xfc\xd3\xb6\x77\x87\x84\x1a\x12\x3e\xe8\x5e\xad\xb0\x7d\xad\xa9\x4c\xe5\x79\x1f\x0d\x06\x9c\xb6\xde\xf6\x46\xd7\x79\x33\xe2\x95\x18\x2d\xab\x96\x17\xa3\xeb\x15\xe5\x23\x39\x5b\x8c\x5f\x8e\xda\xcd\x28\x1f\xc1\x5c\x8e\x8c\xda\x5c\x3a\x3a\x5b\xb1\x66\xc4\x9a\xd1\xba\x6a\xc4\xa8\x64\x5f\x69\x79\x3b\x2a\x5a\xe0\xd5\xd6\x39\x6f\xf3\xb2\xbc\xd5\xb7\x15\x82\xe5\x42\x56\x93\xf3\x91\x72\x64\x27\x11\x44\x3a\x3a\xa5\x34\x1b\xad\x84\xd8\x64\xcf\x9e\x5d\x32\x91\xb2\xea\xd9\xc9\x9f\x3e\x6f\xf8\x4b\xcf\x33\x67\x5f\x5d\x2f\x1a\x0b\xb4\xdd\x0e\x7e\xa8\xd1\x2e\x11\x18\xd0\x92\xb3\x7c\x66\xe0\x55\xd9\xe9\xcb\xf6\x67\xf2\x50\xfc\xbf\x71\x6a\x80\x10\xf3\x43\x20\x87\x53\x91\x40\xa4\xfe\x87\x33\xc1\x85\xe7\x03\x87\xa5\xe7\x30\xec\x21\x0f\x99\xbf\x21\x5e\x75\x14\x1d\x82\xdf\x13\xc5\x96\x4b\xd4\x6f\x45\xd0\x53\xef\x59\x45\x2e\xb2\xe2\x68\xf0\x05\x46\xcb\x0f\x80\x8a\x1a\xa7\x7d\x1b\xd8\x3d\x0d\xd2\xc5\x86\x3d\x91\xdb\x47\xf3\x27\xf2\x51\xb1\x2f\xf2\xc9\xb0\x34\x92\x3d\xb8\x5e\xb1\xc5\xea\x0f\xc7\x7a\xba\x0f\x25\x0f\xc0\xc1\x0e\xf8\x11\x7b\x8e\x01\xa0\xf4\x9d\xbe\xf7\x1b\x35\xb2\xc8\xc8\x51\x81\xa3\x75\x2e\x37\x82\xa8\xab\xa2\x5d\xd0\xd1\xa2\xae\x9a\xe6\xa8\x61\x82\x8e\xd4\x95\x95\x2c\x73\xd5\x96\x5c\x72\x3d\xac\x64\x82\xd1\xe6\xc5\x68\x53\xd2\xbc\xa1\x23\xca\x41\x78\x21\x56\xb9\x18\x01\xfd\xd6\x8c\x2e\xa8\x2c\x70\x01\x9b\x34\xaf\xe9\x68\x03\x4c\x55\x79\x3b\x52\x17\xff\x45\x3a\x7a\x53\xd5\xda\x7b\x09\x5f\x56\xf5\x1a\xfa\x8d\x47\x8c\x2f\xca\x16\x3a\xb8\xaa\xae\xe5\x26\xd5\xca\x25\x40\xd1\x8c\xae\xf3\x9a\x33\x7e\x89\x47\x0d\xa5\xb0\x27\x9b\xec\xd9\x33\x58\xf9\x5f\x9b\x74\x51\xad\x9f\x79\x60\xbf\x79\x76\x75\x9c\xde\x3c\xfb\x27\x51\x2d\xce\x2f\xd4\xa0\x8f\x60\xd0\x47\x6e\xd0\xe9\xe8\x54\x4d\xc3\x72\xa9\x02\xb4\x8f\xa2\xef\xc6\x74\xfc\x5d\xf4\x9d\x36\x72\xb6\xc6\x51\x83\x8b\xf8\x20\x75\x88\xb9\x24\xab\xf5\x09\xf1\xe3\x0a\x08\x34\x88\x35\xb5\x38\x6f\x46\xe7\x07\xda\x96\xb9\xf6\xee\x21\xe3\x98\x2b\xea\xb6\x46\x8a\xdd\xa4\xce\x00\x8a\xd4\xee\x4d\x53\x96\x83\xe8\x68\xc6\xe6\xca\xc8\x9f\xed\xcd\x2a\xf3\x10\x63\x66\xde\xec\xab\xd2\xbb\x67\x81\x02\x42\x77\xc7\x69\x19\x0e\xb5\xdf\x24\x14\x77\x08\x6e\x8a\x1e\x9e\x43\x64\xfa\xeb\xd5\x9c\x2b\xbe\xcc\xa6\x0c\x4a\x23\x8c\xc3\x05\xa7\x13\xcb\xe3\x38\xe1\x24\x57\x9e\xa0\x40\xa0\x58\x4b\xd6\x45\x1d\xa3\x52\xd2\xd6\x5e\x1b\x8d\x9b\x50\x65\x5b\x48\x5a\x97\xf2\x05\x62\xfb\x95\x2e\xc1\xb3\x0c\x1c\x1a\x77\x29\x87\x29\x67\xc7\x65\x4b\xd0\xae\xd3\x42\x60\xe7\xf7\x50\x2d\xfd\xdc\x89\xb6\xe3\x57\x30\x68\x70\x95\x16\xda\xaf\x19\x16\x68\xe7\xc7\x84\xb3\x36\x01\x7f\x79\x77\xf2\xf3\xf9\xc9\xfb\x93\x0f\x27\x1f\xcf\x40\x61\x78\xd0\x2d\x58\xee\x36\xbf\xfc\x7e\x4a\x6d\x9c\xe8\xc0\x57\x86\xcd\xdf\xf8\x4b\x32\x9b\x63\xe7\x08\xa3\xe7\xaa\xb6\x8e\xe3\xfa\xb1\x63\x71\x58\x6f\xb7\x75\xea\xbb\xa6\x0f\xde\x69\xb1\xdd\x86\x87\xc4\x53\x9c\xf0\x8e\x41\x70\x7f\xae\x96\x37\x70\x0b\x54\xba\x51\xb6\x2a\xaa\x48\x47\xb6\xf5\x45\xe9\x6d\x1d\xf8\xb6\x7c\x70\xd9\xf0\x23\x5d\x56\x35\x4d\x24\xe5\x5b\x37\x20\x5d\x90\x7b\xad\xa1\xe2\x84\x17\x2f\x97\xa0\xc3\x02\x5c\xb2\xfe\xa2\x1d\x03\xfa\x18\xc4\xf3\x4d\x60\xa5\xe4\xfa\xfc\xc5\x71\xa2\x9f\x3c\x97\x31\x7a\xd5\xb7\xdb\xbd\x9f\x4e\xad\xdc\x79\x20\x4b\x75\xf7\xe1\x09\xb9\x9a\x27\x64\xaa\x9e\x90\xe7\x9a\x5e\x7c\x65\xa2\x93\x71\xcf\xf5\xeb\x3e\x2b\xf2\x6f\xf6\x18\x1a\x08\xa7\x09\x4d\x7d\xd3\x0e\xc9\xfc\x62\xeb\x5e\xe3\x5e\x59\x6c\x64\x34\xb5\xa6\x1b\x3a\x03\x76\xd6\x1d\x6c\x37\x4c\x08\xfb\x02\x70\x0f\x33\xd8\x82\x47\x2a\x45\xc3\x35\xb3\x75\x6a\xc9\xdb\xa5\x0d\x84\x4c\x90\x7b\xd9\x3a\xe6\x47\x71\x9c\x24\x8c\x88\xa4\xc2\xaa\x6e\xe4\x3a\xbe\xdd\x32\xdd\x43\x34\x65\x99\xce\xb2\x8f\x7c\xea\xb9\x32\xd8\xeb\xfb\xf7\xdb\xd5\x99\xd4\x93\xd2\xeb\x7a\xaa\xc6\xb6\xe8\x7a\x84\x36\xd7\xaa\x22\x05\xc6\x9e\x16\x58\xa4\x4a\x1a\xa4\x85\x11\xf8\x9e\x35\x12\x4c\x66\x87\x13\xac\x95\xc8\x94\x32\xcd\xa2\xac\x38\x85\xab\xfd\x06\xc9\x59\x54\x4f\xbd\x1b\x37\xab\x7e\xf9\xb8\x92\x84\x52\x49\x8b\x36\x35\x55\x2a\x17\xd1\x80\xf2\x44\xa0\xcd\x96\xda\xac\x18\xe0\x69\x07\xb5\x1a\x4f\xf7\x87\x81\x3a\x8b\x47\xe1\xeb\x9b\xa5\x57\x39\x97\x24\xbd\x23\xc3\xe9\x28\x1f\xd9\xf5\x1e\x5d\x33\xb1\xaa\x5a\x31\xca\x47\x16\x72\x8d\x3e\xf7\x29\xaf\xdb\xaa\x05\x52\x0b\x80\x94\xa4\xa0\x94\xaa\xca\x38\x82\x0a\x46\xb9\xa6\xc1\x46\xd6\xcb\xfc\x33\x83\x6d\xd3\x08\xed\x3c\x85\x0f\xa3\xdd\x21\x69\xcb\x35\x08\x65\x45\xce\xca\x50\x3d\xd2\x02\x53\xe5\x97\x4c\x2b\x71\x58\x4f\x26\x8a\x38\xb5\xbe\xd3\xf5\xa4\xf5\x7c\xaa\x63\x0a\x22\x7f\x15\x9b\x83\xee\xb0\x56\xe8\x7e\x8a\x81\x10\xef\x9b\xcc\xd4\xe4\xf8\x45\xfd\x83\x00\x3f\x2d\x7c\x56\x87\x26\x33\xf5\xfc\xe0\xd1\x6d\xa0\x8d\x6a\x40\x9d\x40\xc5\x3b\x54\xea\xbb\x03\x9a\xe3\x0c\x59\x23\x64\xaf\x2a\x0e\xaa\x29\x43\x33\xb5\x27\x16\xda\x8c\xce\x75\x90\x32\x7d\x27\x0c\x7c\xd0\x01\xf3\xe3\x18\x25\xfa\x00\xe8\xf0\x7d\xea\xc2\xc1\x93\x8e\x3c\x74\xf0\xf5\xe1\x1c\x92\x2d\xf4\xa3\x9e\x0e\x17\x7e\xa6\x1b\x7a\x2c\xdb\xa6\xa6\xe7\xb5\x3e\x36\x0f\xe7\x5c\xe5\x8d\xd1\xd1\x7d\x2c\x2b\xe3\xe7\x45\xb5\x7e\xbc\x87\x36\x56\xcd\x3e\xcd\x90\x9e\xdc\x46\x15\x75\x2c\x9b\x07\x4d\x7a\xb4\x3e\x27\xf7\xe7\xc6\x9f\xe4\xfd\xce\xb9\x9e\xae\x47\x4c\xa2\x7f\x0b\x04\xba\x77\xf7\xa9\x29\x25\xc9\x00\xd7\xc9\x07\xb3\xad\xf2\xc6\x10\xdc\x0f\x65\x63\xfc\xf5\xa7\x0f\xbd\x1c\xae\x30\xc2\x14\xd1\xee\x15\x6f\x8d\xe0\xa2\x5f\x58\xed\x00\x3e\xab\xe7\x98\xce\xea\xb9\xe7\xb4\x08\xdb\xb9\x71\x83\xb6\x92\x08\x6c\xc7\x9a\x59\xcb\x7e\x0c\x7d\xc9\xac\xd5\x3c\x76\xbd\xc8\xac\x89\x3e\x76\xc3\xcf\x02\x53\xf8\x47\xb6\xae\xdb\x7d\x03\x5b\x78\x48\x1e\xb6\x57\x40\x77\x3f\x68\xee\x84\xee\x1d\x34\x16\x4e\xde\xf2\xd7\xaa\x1d\x2d\x72\xfe\x9d\x18\xc9\xca\xbc\x92\xa3\xaa\x15\x0d\x2b\xe8\x08\x0e\x30\xd5\x10\x59\x42\x5b\x1d\x2a\x24\xda\xa7\x9d\xe6\xbb\x11\x1e\x52\x29\x1d\xbc\x42\xd8\x3d\x6d\x8a\x5c\xa8\xa6\x47\x0e\x7a\x30\x71\x4f\x3c\xf7\xdf\x66\x8b\xa5\xf7\xa2\x8b\x46\xf0\x22\xd8\x71\x0c\x3f\xbe\x0e\x7c\x68\x1d\x24\x03\x13\x2e\x04\xd7\xd2\x2e\x2d\x6b\x28\x6c\x50\x2c\x34\x3c\xc1\x4f\x69\xc0\x94\x7b\xb0\xf6\x6f\x05\xbf\x21\xc0\xfb\xc7\x80\xe2\x5e\x64\x6a\x9d\xe0\xb0\xf6\x7e\x4d\xb9\x41\x3b\xaf\x2e\x28\x19\x5e\xbe\x0a\xdf\xf7\xa7\x16\x02\x8b\x5a\xd2\xc4\x2a\x40\x53\x34\xb0\xa5\xbb\x79\xe1\x9e\x88\x3e\xa0\xd1\xe9\x0c\xa6\x0f\xa9\x0b\xba\x36\xc1\x2c\x5d\x96\xf9\xe5\x25\x2d\xde\xd9\x11\xa3\x24\x02\x3b\x0c\x75\xe1\x98\x46\x63\x81\x95\xb2\x5e\xc6\xb1\x9c\xc6\x8c\xee\xf0\x90\x85\x64\x0d\x52\x6e\x94\x50\x70\xa6\x07\x14\x88\x72\x34\xdb\x59\xea\xea\x09\x4b\x6d\x10\xd6\x93\x56\xb9\x63\x71\xf0\xa4\x53\xe9\xef\xa5\xdf\xb8\xb8\x6c\xff\xe2\x2a\xe5\xb8\xbd\xab\xa5\xae\x6b\x95\x4f\xb8\x1b\x26\xf6\x65\x6c\xb9\x9f\xf5\x9b\xe7\xd0\xa7\x24\x1e\x72\x2c\xf7\x04\x68\xb5\x17\x1b\x84\x33\x22\x86\x62\xa7\x0c\xf9\xb6\xd3\xb6\x73\x7b\x2e\x8e\x78\x55\xd0\x23\x15\xd7\xab\x67\x70\x32\x10\x94\xbe\x7b\x56\x9f\x62\x95\xb2\xc8\x79\x5e\xdf\x0e\x04\xb1\x37\x57\x45\x17\xf9\xe2\xeb\x45\x5b\xfb\x42\xf1\x45\xc5\x9b\xca\x8f\xee\x24\xfb\x52\x57\x65\x10\x8d\xde\xa5\x69\x8d\x5d\xf3\x7a\xbe\x56\x6e\x57\x4c\x46\x1b\x8e\xc4\xbc\xd3\xfa\x8a\x2d\xbc\xda\x15\x47\x00\x3a\xbf\xad\x00\x33\xc3\x61\x3e\xf3\xb2\x64\xeb\xb5\xeb\xe6\xb3\x2b\x5a\x37\xfe\x34\x5c\x29\x57\x53\xa6\x74\xd5\x0a\xd5\xae\x9e\x79\x13\x21\xf8\xc8\x79\xb4\xeb\x9c\xa3\x3d\xd1\xfb\xe1\xf3\x11\xc0\x1b\xbf\xc2\x8e\x0e\xb5\x7f\x69\x3d\x94\xf8\xec\xb2\xac\x2e\xf2\xb2\x39\xaa\x69\x53\x95\x57\x7b\x8a\x3e\xb3\xa1\x63\x5c\xef\xf8\x25\x18\xc8\x85\xef\x03\x19\xd7\xf9\x26\x78\x79\x26\xd9\xb8\xa3\x1e\x0a\x90\x5f\xe4\x8a\x55\xb5\x3c\x7c\xc5\x51\x43\xc5\x23\x9a\xe0\x4f\xf5\xe2\x30\xec\x44\xcf\x85\xfc\xc7\x27\xf8\x06\x9f\xe2\x4f\xf8\x25\xfe\x8a\x3f\xe0\x33\xfc\x0a\x7f\xc1\x9f\xf1\x47\xfc\x2b\x7e\x87\x5f\xe3\xf7\x03\xa0\xe8\x0d\xbe\x23\xbd\x38\x2b\xbc\x77\xb7\x0d\xf7\x4f\x71\xbc\xe7\xc3\x76\x7b\xbf\x3b\xb8\xeb\x46\x7e\xbb\x1b\x8c\xc9\xa7\xb9\x2f\x28\x17\xed\xf6\x28\x7a\xdd\xe1\xe8\xe4\xe3\x5f\x22\x7c\x7f\x49\x25\xad\x7b\x49\xc5\xc9\xc7\xbf\x84\xf6\x38\x7b\x7d\xc4\xdc\x19\xcf\x36\x7e\x71\xe5\xc6\x0a\x62\x6e\x81\xfc\x4f\xbf\x77\x6b\x7c\x9f\x9e\x7c\xf8\xf1\xe4\xcb\xf9\xc9\x7f\x9c\x9d\x7c\x7c\x7d\xfe\xf9\xcb\xa7\xb3\x4f\x67\x7f\xfd\x7c\x72\x1a\xc7\xfb\x3b\xda\xcd\xdb\xf1\x46\xb3\xcf\x72\x88\x83\x9e\x41\xaf\xb4\x84\xce\x77\x56\x22\x4f\xbe\xda\x47\x7c\x07\xee\x77\x75\x6a\xe3\x52\x5f\xba\xdd\x4d\x3e\x58\xf2\xfe\x2e\xd5\xaa\x5b\x5f\xf4\x71\x20\x77\xa9\x7d\x3c\xf3\xb2\x79\xc5\x6d\xbc\xdb\x57\xde\xf7\x13\x38\x0e\xe4\x4b\x2f\xc9\xe6\xfe\xec\x7d\xfa\xa4\x36\xfd\x29\x15\xe4\x9d\x97\x7c\x7e\xee\x3e\x9c\x9f\x93\x77\x9d\x04\x7c\x97\x7e\xc8\x37\xe4\xa3\x57\xe2\x43\xbe\xf9\x99\x89\x95\x1e\x04\xf9\xd5\xfb\xa4\xd0\x23\x79\xad\x1f\xf0\x9d\x8a\x68\x4d\x5e\xab\x5f\x98\x3e\xcf\x35\x35\x0b\x5e\xf1\x9d\xf3\x62\xcd\xec\xa3\x2c\xa3\xbd\x49\x33\xf3\x84\xef\xac\x37\x63\x66\x9e\x64\x5b\xd6\x3f\x2f\x73\xcf\xf8\xce\xf3\x01\xcc\xdc\xb3\x3c\x04\xd6\x1b\x30\x73\xcf\xf8\x4e\x39\x6d\x66\xf0\x83\xef\xb4\x8b\x6d\xf8\xc1\x77\xce\x2d\x38\xb3\x8f\x72\x12\x95\xd3\x57\xa6\x9c\xbf\xe2\xbb\xd4\x4a\x6e\x48\xe5\x9e\x0f\xe4\x3a\x2b\x31\x12\xa9\xec\xa3\x9a\x36\x5a\x0b\xb2\xd0\x0f\xb2\x0b\x79\xcd\xc9\x02\x7e\xf0\x5d\x0a\x08\x8b\x2c\xd4\x2f\xbc\x6b\xb8\x04\x69\xfa\xd9\x4f\x7f\xd3\xf2\x85\xff\x4d\xbe\xe3\xbb\xb4\x6e\xf9\x3b\xfe\x5a\x57\xe6\x5e\xe4\xbe\x91\x80\x9e\x9c\x06\x7b\x54\x66\xbb\x37\xd4\x89\x77\x63\x6a\xb4\x9a\x17\xe9\xfe\x8f\xd8\x7c\xfa\x39\xaf\x07\x0a\x78\xa9\x3b\xb5\x98\x1a\xbb\x83\xd2\x9a\x79\x91\xe7\xaa\xbd\x68\x16\x35\xbb\xa0\x24\x77\xcf\xf8\x2e\x7d\x17\xd2\x03\xe4\xde\x95\xca\x82\x2a\x6c\xa1\xcc\xaf\xa0\xe5\x7e\xba\xf7\x86\x6b\x2a\x21\x51\x9e\xc2\xef\x4e\xcd\x19\xf9\x94\x9e\x6b\x14\xf6\xa5\xe5\x2a\x2d\x75\xc4\x03\xf9\xe4\xbd\x98\xaf\xf4\x92\xc9\x72\xf0\x6b\xd2\x18\x2f\x64\x12\xe3\x85\x4e\x51\xf6\x2c\xe4\x93\x7e\xd0\xa9\x05\xbd\xa8\x5a\x79\x7a\x3f\xd9\x47\xfd\x85\x42\x05\xd4\x96\x5f\xe5\xcd\xe9\x62\x45\x25\x11\x55\x9c\xb1\x35\x98\x44\x0c\x24\xea\xdc\x92\x72\x27\x9f\xe0\x47\xa7\x94\xb9\x80\xee\xc3\xaf\x4e\xe3\xf4\x46\x90\x4f\xf0\xa3\x53\x2a\xd5\x97\xca\xf5\xa3\xd1\xf5\x93\x4f\xf6\xb1\xf3\xe5\x93\x2a\xe3\xbf\xea\x1c\x92\xb5\x14\x02\xca\x9a\xc7\x60\x36\xec\x38\xfc\xd7\x7d\x08\x45\x96\xc3\x91\x96\x39\x7f\x69\xf9\x7b\x20\x5e\x00\xb9\x7c\x82\x7b\xc4\xe0\x4b\x17\xa9\x1c\xa8\x58\x12\xad\x5d\x5d\x13\xc0\xfb\xe0\x2e\x35\x24\x19\x79\x8b\xdf\xa6\x79\xc9\xf2\x86\xb4\xea\x17\x4e\x77\x27\xd0\x77\xdb\x4b\x02\xb0\xb3\x58\x51\x09\xb7\x5a\xe8\x8a\x7c\x2b\xc0\xd0\x5e\x41\x30\x49\xad\x12\x15\xba\x5b\xa1\x15\x95\x4f\x3d\xfb\x00\xb6\xed\x24\x48\x78\x73\x49\xc5\xe7\x5c\xac\xa0\xef\xea\x51\x21\x21\xd2\xca\xff\x0a\xb6\x9d\xc2\xab\x7a\xc0\x77\xe9\x9b\x93\x97\x67\x3f\x7d\x39\x39\x25\xc9\x04\xbf\x76\x46\x2f\xac\x39\xe1\xca\x25\x45\x99\xda\xe7\x1d\x2e\x6d\x7e\x34\x04\xdf\x2a\x4e\xda\xb4\x92\xfb\x28\x2f\x0a\xa3\x20\x29\x67\xc8\xbd\xc9\x55\x05\x9e\xd5\xfb\x1c\x26\x40\x97\xb9\x52\x1b\x26\xad\x7b\xc6\x77\x72\x13\x3b\xef\xf5\x6d\xf0\x8a\x81\x9c\xa9\x38\x25\xad\x7e\x80\x94\x93\xf5\x06\x16\x42\x3f\x41\xda\x8f\x65\xce\xbf\x42\x1a\x3c\x41\xda\x67\x79\xb2\xa1\x3d\xfb\x8c\xdf\xa7\x9f\xbf\x7c\xfa\x7c\xf2\xe5\xec\xaf\xe7\x3f\xbf\x7b\xff\xfe\xfc\xd5\xdb\x97\x1f\xff\x78\x12\xc7\xc9\x5d\xba\xd1\xeb\xf9\x33\x2b\x4b\x65\xda\x49\xda\x81\x44\xe4\xd7\xf1\xfa\xdd\xeb\xa1\x2a\xac\x71\xa8\x57\x83\xe7\x6b\xe3\x2e\xe5\x95\x60\xcb\x5b\xb3\x83\x6c\xde\xa1\x64\xb9\x04\x57\xb4\xae\x59\x41\x5f\xad\x72\xc6\xe5\x24\x85\x09\xf8\x4e\x01\x9f\xb0\x9c\xcc\x37\x94\x8c\xef\x24\x58\xe9\xe7\xed\x27\xca\x8d\x0d\x4f\xce\x56\x9e\xb4\xbd\x24\x7c\x97\x6e\xca\x5c\x2c\xab\x7a\x4d\xee\xc3\x53\x9b\x1d\x4e\xf0\x2a\x6f\xcc\xeb\xcb\xc5\x82\x36\x4d\x55\x37\xd9\xe1\x64\x07\x38\xcc\xcf\x4c\xda\x4e\xc2\x81\xc4\x8d\x62\xb1\xfa\x13\x95\xdf\xcc\xa3\x44\xd3\xdc\x4b\x77\x2f\x76\x17\xc2\xac\xfc\xac\x14\x61\xed\x4e\xf4\x13\x61\x9b\xcb\xf7\x8f\x55\x21\xa7\xdd\x3e\xe3\xbb\x74\xc9\x38\x6b\x56\x76\xa6\xfd\x57\xac\x3b\xa4\x8f\xa3\x7d\x76\x5d\xd2\x5f\xbc\x37\x53\xc6\xe4\x87\x8d\x09\xdd\x50\xb1\xce\xdd\x8b\xab\xc5\xd5\x00\x93\xa4\xc2\x47\x37\x3a\xca\xdc\x07\x05\x44\x4a\x76\x51\xe7\xb5\x5a\x11\xfb\xac\x00\x4a\xb0\x5a\xc1\xbb\x02\x1c\xc1\xf7\xa6\xf3\x9d\xde\x6c\x72\x5e\x04\x59\xba\x49\x0a\x12\x98\x10\x14\x0a\x12\x98\x37\xbb\x06\xde\xe7\x30\x41\x96\x96\xb0\x55\x47\x68\x6f\xfd\x37\xb9\xd5\x5d\xb9\xca\x95\x00\x66\x9b\xb4\xea\x57\xd2\xa5\xfa\x1d\x7e\xf7\xb3\x20\x15\xd7\x4c\x2f\xa0\x89\x97\x40\xc5\xab\x24\x60\x42\x5e\x02\x01\xaf\x13\x9e\xcc\xd7\x08\xda\x28\x96\x1b\x2a\x5d\xa4\xac\x39\x53\x29\x50\xe7\x42\xd6\x69\x12\xba\x75\xde\xa5\xe7\x3f\x3a\x5a\xc2\xba\x4c\xc5\xef\xd3\xf7\x9f\xfe\xf8\xc7\x93\x2f\x00\x43\xde\x57\x97\x97\xb4\x26\x2b\x2b\x7c\x91\xec\x01\xb9\x4c\x5f\xe2\xbb\x54\x73\x72\xf7\x65\xb5\xc8\xd6\x69\x59\x2d\xf0\x75\xb6\x4e\xaf\x71\x91\x37\x2b\x5a\xb3\x3b\x9a\xad\x53\xfb\x8c\x0b\xba\xc8\xd7\xb4\xd4\xc9\xf6\x05\x7b\xa9\x2e\xad\x94\x68\x62\x79\x2b\xd3\xf4\x23\x6e\x79\x41\xeb\x66\x51\xd5\x32\xa7\x7b\xc1\xce\x29\x13\xd4\x60\x5e\xe4\x91\xd6\xf1\x8c\x2f\xf5\x83\x1c\xb1\x21\x7e\x21\xa0\x82\x5a\xb8\xcb\xb4\x9f\x08\x67\xd2\x90\xcf\x41\xde\x81\x54\x8d\xb5\xf3\x9a\x92\x4b\xf3\x24\xa1\x55\xb5\xb9\x85\x84\x8d\x42\x0a\x27\x7f\x6b\xf3\x92\x5c\x9a\x27\x20\x3f\x7f\x0d\x34\x89\xd0\xfd\xce\xa6\xa6\x5a\x66\x43\x6e\x75\x82\xfb\xe2\xe4\x3e\x64\xe3\x3e\x2a\x06\xe4\x32\x35\xcc\xc7\x2b\xe8\x88\x5c\x6e\xe8\xb5\x79\x01\x5e\xcd\x6c\x04\x72\xe9\xbd\x98\x3a\x54\xac\x89\x4b\xef\xc5\x4e\xa5\xf9\xe4\xbd\xc9\x52\xbe\x2a\x80\x2c\x18\xa8\x06\xc8\x9e\xd4\xd4\x2e\x85\x7b\x91\x4c\x4d\x2e\xd8\x15\x35\x3d\xf7\xde\xa0\xd4\xe6\xd6\xf6\x5e\x3d\xca\xb3\xd6\x0a\xf9\x14\x0c\xa1\x97\xe6\xf2\x99\xaa\xfd\x57\x7c\x37\xe4\xfe\x8b\x5c\x0e\x3a\x05\xbb\x33\x2a\x0f\x72\xaa\xb4\xf2\xc3\x5d\xfa\xb9\xae\xd6\xac\xa1\xc1\xc6\xe8\xa5\xc1\xac\x99\xb0\xed\x30\x69\xe6\x45\x92\x49\x2a\x26\xf3\xa5\x7e\x80\x0d\x62\x3a\x6b\x02\x97\x0d\x6d\xe0\x8a\xbf\xaf\xf2\x82\x7c\xd0\x0f\x8a\x82\x95\x4f\xa0\xc5\x4f\x3e\x04\xaf\x9a\x1f\xb4\x7b\xc5\x31\x59\x2e\x59\x75\xbf\xf0\xbe\x9d\xda\x8d\xe7\x31\xeb\xc1\x50\xcf\x83\xbd\xff\xe5\xf4\x2f\x9f\xe5\x21\x3a\xfd\xcb\x67\x58\x52\x23\xef\xb9\x74\xcf\xf8\x6d\x4a\x81\x4c\xba\x52\xbf\xf8\xad\x24\x2e\x4e\x74\x92\x79\x84\x54\x4e\x21\x85\x53\x95\x47\x7d\xc6\x6f\xd3\x8b\xaa\x2a\xc9\x15\xfc\xe0\xb7\x4a\x71\x8a\x5c\xa9\x5f\x59\x3b\x9c\xad\x2b\xf5\x8b\xdf\xa6\x97\xb2\xe0\xa5\x80\x27\x0a\x8f\xb2\xbe\x52\xa6\x96\x02\x9e\x28\x3c\xca\xd4\x8a\xd3\x9f\x73\xd9\x0f\xf5\x80\xdf\xa6\x35\xcd\x8b\xa6\x9b\xf0\x89\x97\x32\x93\x79\xc4\x6f\x2d\x97\xcb\xf8\xe5\x4b\x20\xd4\xaf\x7a\x49\x92\x86\xe7\x05\xb9\x92\xff\x65\x53\xb5\xac\xb5\xc6\x6f\xd3\xa6\x5d\x93\x2b\xf9\x5f\x0e\x86\x71\x39\x14\xc6\x61\x60\x37\x30\xac\x1b\x78\xde\xc0\xf3\x46\xe6\x97\x5b\xf4\x0a\x7e\xe4\x1b\x15\xaf\xd9\x72\x49\xae\xcc\x93\xca\xfd\xe3\xad\xca\xff\xa3\xec\xdd\x92\x95\x92\xc9\xba\xd2\x0f\x36\x05\x32\x99\x47\xfc\x36\x6d\x39\xfb\x1b\xb9\x82\x1f\xfd\x06\x39\xd4\xc3\x01\xa4\x54\x5c\x25\x54\xb2\x87\x70\x7d\xd3\xc8\x6d\x79\xe5\x9e\xf1\x5b\xa3\xa1\x49\xae\xcc\xd3\x7e\xa4\x75\x7a\xf6\xe5\xdd\xc7\x3f\x9e\x46\xb8\xe7\x5f\x47\x22\xb1\x35\xb0\x16\x0a\xb9\x34\x80\xc6\xd6\xe9\x79\x63\x53\x1e\xc2\x86\x3f\x7e\xfa\x74\x76\xf2\x7a\xa0\xde\xbe\xf4\xad\xf5\x65\x93\xa7\x34\xaf\x17\x2b\x63\xdc\x02\x6d\xb6\x26\x30\xd2\x40\x06\x40\x9e\xd6\x4b\x36\xb9\x70\xcf\xf8\x22\x7d\x4b\xcb\x0d\xad\xd3\x15\xfc\x90\x0b\xfd\x80\xef\xf4\x07\x62\x72\xc8\x2a\x56\x74\xf1\xf5\xa2\xba\x91\x35\xe8\x47\x09\x9c\xe8\x8d\x78\xc3\x68\x59\x90\x0b\xf7\xac\xd3\x5f\xd6\x34\xd7\xc9\xf2\x11\xdf\xa5\xef\x19\xff\xea\x77\x25\x78\x97\x27\xb7\xa1\xc2\xbe\x6b\xef\xdb\xe4\x22\x1d\x48\x95\x99\x17\x9d\xb4\x57\xf9\xc6\xaa\x92\x93\x0b\x89\x5e\xed\xab\x1c\x11\x80\xf8\x8b\xbc\x6e\xc8\xbd\xb5\x13\xb8\x48\xcd\x23\xfe\x49\xb0\xb2\xc9\xee\x95\x3a\xf9\xc9\x0d\x78\xc3\x60\x15\xcf\x2e\xd2\x6e\xd2\x4e\x22\xbe\xb7\x67\x1f\xde\xff\xb8\xaf\xb2\x1d\xde\x23\x1d\xd5\x64\x48\x1c\x27\x3a\xb2\xa2\x17\xf2\x58\xac\xcb\xd3\x7c\x49\xfb\xc2\xe6\x64\x82\x2f\xec\x67\xe3\x6e\x15\x59\x9a\xc6\x95\x74\xb9\xdc\x47\xd6\xc8\x9e\xea\xcf\xee\x65\xff\xb6\x3c\x3b\xf9\xf0\xf9\xfd\xcb\x33\x90\x03\xcb\xbd\x77\x21\x69\xbf\x33\x3d\x30\xb5\xc5\x2f\x14\xa5\x66\x92\x1e\xdc\xbf\xd0\xd1\xbf\x9c\x7c\x39\x7d\xf7\xe9\x23\x39\xb7\x50\xfa\xba\x63\xa3\xb5\xdd\x26\x77\xe9\xef\x88\x49\x86\x42\x8c\x5e\xc3\xa2\x90\xfb\xc0\xfc\x21\xbb\x0e\xcd\x21\x70\xa8\xa9\x9e\x5d\x77\x54\xd7\x71\xa0\x78\xed\x3e\xab\x77\xdc\xd7\xb9\x76\x59\xbc\x44\xbc\x57\xb9\xba\x53\x63\xf0\x0d\xfb\x2a\xff\x2a\xa3\x7d\xc5\x81\x82\xbb\xfa\xe8\xde\x31\x6b\x4e\x69\xcd\x24\x79\x08\xc2\xbb\x37\x46\x03\x38\x93\xcb\x38\xfc\x69\xa7\x0f\x9e\xa1\x12\xae\xfd\x37\x1f\x0a\xa8\xeb\x03\x72\xdd\x4d\x31\x14\x84\xb3\x86\x24\xd7\xdd\x14\x79\x8c\x2b\x2d\xae\x3f\xb1\x8f\x92\xb2\x6a\x45\xe5\x7d\xf1\x5f\xe1\xf8\x35\x2b\xef\xab\xff\x2a\xbf\xb2\x46\x54\xf5\xad\x9f\x21\x4c\x39\xb8\x4b\x3f\x56\x9c\x7a\x19\xfc\x57\x20\x60\x0d\x91\xf0\xa6\xaa\xc9\x49\xf8\xee\x89\xd4\x1d\x31\xa1\xd5\xdf\xc8\xc9\xfe\x6f\x83\xe5\x06\x0b\xe0\xbb\xf4\x4b\xd5\x0a\x5a\xbf\x3e\x7d\x4f\x4e\xdc\xb3\x4d\xb7\x89\x26\xc5\x24\xe0\x64\x82\x43\x4a\x08\x25\xea\x7a\xc9\xbf\xda\x88\xf0\x07\x9f\xab\x79\x9d\x8b\xfc\x65\x91\x6f\x64\xc5\x37\xfe\x9b\x2f\x55\x07\xe1\xb4\xcb\x35\x98\xae\x0c\x28\x56\xb9\x6c\x54\x5d\x5b\x1a\x18\x06\x4a\xd2\xac\xa4\x75\x64\x94\xbc\xac\xd9\xee\xfe\x9c\x43\xd5\x29\x9e\x4f\x56\xf2\x86\xec\xa9\x47\x67\x81\xed\xdb\x08\xf2\x06\x7e\xf4\x5b\x6a\x46\xf0\x26\x75\x63\x84\x0f\x7f\xfe\x89\x33\xe1\xbe\xfa\xaf\x8a\x5d\x6f\x37\x6f\xaa\x5a\x73\x94\xe4\x4d\x37\x05\xed\x9f\xf9\xc8\xd7\x30\xb8\xc3\x75\xfa\xee\xf4\xfc\xe3\xa7\xd7\x27\xd3\x3a\x55\xb7\xf1\xa9\xbe\xc1\x27\x77\x99\xbb\x53\xd4\x69\xea\x4e\x91\x0c\xa5\x93\x3b\x5f\x1d\xc0\xde\x4f\x3f\x49\x07\xdd\x75\x28\xfa\x7d\xfa\x7d\xfa\xaf\x91\xaa\x2a\x50\x11\xd8\x57\x91\xf6\x35\xd7\xbd\x27\x55\xc5\x06\x03\x14\xeb\x61\x6a\xf5\x84\x03\x31\x4d\xec\x0b\x09\xbf\x61\xaa\xe7\x44\xa7\x63\x6a\x66\x8b\x08\x70\x6c\x60\x8a\x81\x12\xb0\xcd\xac\xdf\x5c\x56\x35\x9c\x5a\x1e\x89\xa3\x9a\x2e\xaa\x4b\xce\xee\x9e\xec\x20\x6d\x20\x40\xac\x53\xda\x77\xa6\xf3\x42\xb9\x3f\x72\x16\x98\xe7\xe7\x46\x61\x53\xc7\x8d\x95\x49\x58\xc5\x4f\xae\x7b\xe1\x2f\xb5\xc3\x47\xb1\x32\x41\x8b\xd7\x1a\x48\xea\xb8\xc5\xb2\x8e\xcb\x5c\x50\xc2\x77\x07\x75\x10\x47\x79\xd0\xa6\x28\x28\x03\x21\x27\xe3\x98\xa7\xd7\xac\x2c\x5f\x16\x05\xc0\x06\x70\xbb\x1f\x26\x25\x7e\xc3\xd6\x7b\x08\x42\x41\x87\xc0\x1c\xc9\xf6\x16\x53\xa4\xad\x41\x21\x6a\xa5\x56\x78\xee\x6b\x8d\xff\xb5\x6a\x47\xeb\xb6\x11\xa3\x55\x7e\x45\x47\x39\x1f\x19\x45\x66\xe3\x17\xc8\xce\xe8\x26\x6f\x1a\x5a\x8c\x44\x35\xfa\x2f\x51\xfd\x57\x84\x0e\xba\x8d\x03\x1e\xf3\x7b\x80\x3b\x53\x84\x76\xc6\x6e\xa8\xe7\xfa\x16\xb6\x40\x43\xb8\x71\x67\x05\x2e\xec\x6b\xca\x5d\x8a\x1a\x35\xa1\x9e\xaf\xf0\xaa\x13\x0b\xc3\xd6\xca\x70\xae\xe6\xbb\x21\x74\xcc\xc0\x5a\x38\xb7\x21\x53\xe9\xf5\xa8\x4e\x1a\x28\x78\x90\x27\x95\x7e\x44\xbb\x5d\xe0\x83\xdc\x05\xd5\xc7\x8c\x4c\xf6\x45\x5b\x67\x63\x42\x67\xf5\x1c\xc6\xab\xd3\x8d\xc7\x73\x99\x94\x09\x22\xe0\x6e\x4d\xd4\x09\x43\x5a\x3b\xad\xce\xf8\xee\x80\x2a\x13\xa3\x0a\x05\x76\x4e\x9e\x46\xbc\x33\xb5\x96\xfc\x52\x52\x22\xcf\x88\x9a\x79\xdb\x2c\x2f\x8a\xce\x3e\xf3\xe6\x73\x46\xc1\xac\xae\x93\x1f\xd6\x89\x0c\x7b\x5e\xca\xc1\x26\x8b\x25\x42\x2f\xaf\x59\x07\x59\x53\x7e\xa0\xa6\x54\x4e\x7b\x0e\x16\x2f\x71\x5c\x1b\x80\x07\x5e\xd0\x68\xd1\x4f\x49\x04\x6e\x10\xe6\x49\xa3\x8d\xc6\x5a\xf2\xec\x9f\xb7\xbf\x3c\x7b\xe6\x05\x33\x2f\x83\x91\xab\x69\xfc\xe1\xf7\xdb\x2d\xf8\xea\xf0\x9c\x1c\xfd\x73\x84\xa6\x34\x2b\xe8\xa2\x2a\xe8\x4f\x5f\xde\x59\x3a\x26\xa1\x28\xad\x29\x78\x14\x4f\x5a\x4c\x79\xf7\x3b\xd2\x36\x52\xcf\xfe\x39\x99\x66\xcf\x93\x69\xf6\xfd\xf6\x7f\x6e\x7f\xdc\xbe\x42\xdb\xdf\x27\xd3\xec\xc7\xed\xeb\xed\x4b\xb4\xfd\x7e\x82\xfc\x3e\x2d\xfd\x3e\xf5\x6a\xf4\x5b\x5c\xe0\x7e\x8f\x54\x8b\x2b\xf2\x2c\xf9\xe5\xd9\xf6\x97\x74\xfb\xcb\xbf\x6c\x7f\x19\x6f\x7f\x99\x6e\x7f\xd9\x6e\x7f\x49\xb6\xbf\xa0\xed\x2f\xb3\xed\x2f\xf3\xed\x2f\xf7\xdb\x5f\x76\xdb\x5f\x7e\x41\xcf\x2e\xf1\xa6\x13\x15\xbe\xe8\xc7\x66\x0f\x35\xb1\x5d\x67\xd7\xd6\xf4\xdb\x80\x7b\x6b\xf7\x45\xb7\x5b\x6d\x08\x4a\x1f\x38\xfc\xf2\x6c\xcb\xc3\xaf\xe3\xc3\xe7\x0d\x1c\xfd\x86\x2e\x2a\xb0\xbc\xd5\x10\x41\x1e\x7d\x43\x05\xfd\x57\x1a\x81\xb3\xa8\xc3\xc2\x59\x05\x3e\xd4\x40\x5d\x5d\xb1\x82\x8e\x36\x79\x9d\xaf\x47\xff\x15\x8d\xc5\x38\xfa\xaf\x7e\x85\x0a\x46\xd2\x99\x98\x63\x3f\x5e\xb5\x51\xf1\x99\xf2\x2c\x8a\xc6\x60\xfe\x3f\x01\xd3\xd6\x47\xa1\x9a\x69\x37\x0f\x5b\x4e\x3d\xeb\x29\x58\xaa\x5b\x32\x9b\x1f\xdc\xce\x26\xf3\xe1\x48\xcd\x98\x11\x01\x26\x59\x60\x98\x7c\xa0\x62\xfb\x4e\x5e\x70\xe7\xd3\x86\x8f\xc7\xa8\x26\x55\xba\x58\xe5\xf5\xab\xaa\xa0\x2f\x45\xc2\x11\x66\x84\xa5\x9b\x56\x24\xb5\x72\x4e\xe5\xd9\xf0\xe3\xdb\xd9\x71\xb7\x31\x6b\x08\x2f\x8b\x7c\xff\xbf\xf0\xe1\x04\x1f\x4e\x90\xcc\xfa\xfc\xc1\xac\x47\xe0\xf8\x4a\x67\xfd\x7e\x5f\x56\x75\xfc\xae\xe4\x40\xaf\xc2\x81\x7a\x87\x0f\xc6\x67\xb7\xf6\x0a\x47\xbf\xfc\xf2\xbb\xe3\x08\xed\xf0\x55\xd0\x5d\xe7\x48\x65\xf6\x9f\xcf\xe6\x63\x14\xc9\x0c\xcf\x07\x33\xa4\xfa\xeb\xf7\x43\x5f\x23\xd5\xa9\x4b\xd9\xa9\xcb\x87\x3b\xb5\xc3\x97\xfd\x19\x53\xfb\x65\x9d\x08\xac\x73\xd9\x19\xfe\x90\x9e\x7c\x7c\xf5\xe9\xf5\xc9\xf9\xcb\x8f\xaf\xcf\x5f\x9f\xc0\xe3\xe7\x97\x67\x6f\xcf\x4f\x4f\xfe\xf8\xe1\xe4\xe3\xd9\xe9\x74\x99\x70\x94\x71\x59\xed\xbe\xd9\xf5\xeb\x95\xf9\x1e\x1a\xc2\x45\x27\x8c\xc8\xfd\x0e\xe1\xf3\x81\xd0\x22\xf6\xcc\x5e\x5b\x02\xc3\x84\x9a\x9f\xc4\xf1\xf7\xff\x0b\x90\xb5\xb7\x89\xc0\xdd\x91\x87\x46\x8e\x91\x3a\x25\x56\xb7\x4e\x7e\x72\x6e\x39\x5a\x43\xda\x2c\x8c\xff\x18\x87\xb9\x1a\x1f\x73\x4d\x70\x4e\x26\xf8\xf8\x79\x9c\x54\xe4\xf9\x0f\x3f\x24\x39\x01\xc7\x74\x09\x23\xcd\xac\x9e\xa3\xe9\xf7\xd9\xff\xf8\x57\x42\x08\x0b\xfb\x32\x3d\xce\xbe\x7f\x3e\x90\xfc\x3c\x9b\x20\xe5\x97\x89\xa5\x4d\xc9\x16\x34\x39\x46\x38\x69\x49\xbb\xdd\xce\xe6\xc8\x78\x54\xc2\xc9\x82\x2c\xbc\x94\xc9\x21\x49\xbe\x8f\x2b\x84\x10\x3e\xfe\x3e\xae\xe2\x98\xcf\xf2\xf9\x78\x8c\x35\x72\xbc\x97\xc7\x3e\xcb\xb1\xf2\x9a\x56\x26\x0c\xed\xac\x95\x25\xd8\x38\x66\xed\x76\x7b\x8e\x9b\x55\xd5\x96\xc5\x6b\x80\xc1\x4d\xb6\xd8\x6e\xcf\x3d\x54\x7e\xd2\x21\x11\x28\x74\x9c\x80\x0b\x34\x9a\x72\x45\xb9\x11\xa2\xac\x68\x6f\x7a\x48\x11\x33\x8d\x4f\xb5\x31\x8b\x26\x01\x59\x61\xa8\x3f\xa8\x4d\x7b\x3f\xd2\xb5\xd5\xe6\xed\x46\x68\x4b\x20\x36\x15\xca\x1a\xce\xd0\x46\x10\x1f\x3f\x32\x86\x81\x35\xbd\xa4\x37\x66\xdd\x20\x69\x65\xdc\x78\xfa\x89\x72\x36\x4c\x8a\x47\x04\x9d\x86\x96\xf4\xba\x17\x53\x35\x50\xe5\xeb\x0d\x7c\x6d\xa9\x84\xcc\x4d\x80\xc5\xaf\x32\xc1\xcd\xd8\xa7\x0e\xe0\xc3\x95\x71\xec\xc5\xc9\x04\xd7\xc4\xd2\x3f\xfc\x87\x1a\xa0\x1e\x23\x74\xc6\xe7\xb8\x92\xc0\x4f\xb9\x1a\x64\x8a\x2a\x4c\x84\x0b\x63\x5e\xed\x6e\x3c\x3c\xa6\x46\xbc\xcf\x13\x3a\x7c\x35\x3e\x9c\xf5\xec\x48\xd8\xfe\x85\x5e\x9e\xdc\x6c\x12\x7f\x12\x0d\x09\xac\x72\xed\xb0\xdf\x88\xa4\x16\xf7\x00\x73\x13\xdb\xcb\xad\xd1\x81\x75\x40\x43\x2a\xc4\x96\xc9\x26\xa9\x6c\x0c\xf7\x1e\x9c\x67\xcb\xe4\x24\xd1\x4e\x53\x75\x40\x82\x6a\xc6\xe7\x73\xec\x47\xc9\xaf\xad\x87\xb9\x93\x84\x85\x79\xc3\x8c\x2c\xec\xf6\xa6\x15\x3d\x1e\x04\x0e\xbc\xec\xa2\x6e\xf4\x52\x9b\xc9\xdb\xb6\x8c\x5d\xac\x6b\xc5\xa2\x37\x98\xba\x9b\x84\x61\x66\x8c\x1e\x55\xa5\x98\xcd\x4c\xca\x9c\xd4\x58\x11\x09\x9d\x59\x99\x76\x77\x72\x9d\xb2\x22\xd3\x4b\xe0\x92\x51\x37\x9f\xb6\x9f\x4f\x59\xa1\xc3\x78\x79\x55\xcc\x3a\x09\xb8\x06\x87\x76\x75\x38\x0b\xea\xfa\xa4\xef\x86\xce\x59\x55\x76\x16\xef\xd0\xd8\x52\xce\xe6\x9a\x02\x9f\x81\xd5\xe5\x26\x61\x08\x29\xeb\xcf\xc9\x0b\xf1\x03\xf3\x7d\xd0\x9d\x26\x3c\x58\x18\x36\x13\x72\x11\x51\x1c\x57\x6a\x04\x5c\xfb\x86\x3d\xed\xac\x36\x0b\x72\xd5\xde\x2e\x87\xb6\x5f\xf6\xf9\x1b\xd5\x2a\xd1\x47\x19\x7c\x4c\x7d\x96\x04\x49\x43\xe8\x76\x0b\xd6\x80\xe6\xfc\x7d\xb5\x83\x3d\xa0\xc4\xa1\xe2\x67\xbf\x8c\x9f\x5d\xae\x71\xf4\xcf\xcf\x27\x92\xf5\xaa\x6f\xef\x05\x19\xa4\x84\x77\x0b\x38\x7b\x12\xb1\x90\x28\xda\x59\xec\xff\xd2\x9b\x5d\x89\x30\x16\x54\xd3\x9b\xdd\x64\x1c\xe4\x1c\xce\xd8\xcb\x27\x27\xa2\x97\x4d\x26\xc2\x84\x7c\x20\x5d\xe7\xc5\x00\xbf\x25\x73\x77\xa0\x98\xf4\xd9\x1c\x0b\xbd\x53\x29\x9e\x60\x49\xd1\x4c\x80\x60\xa2\x92\x2a\xd0\xc0\x36\x04\xc2\x75\x55\x19\x63\xea\xdd\xc1\x87\x07\x59\x22\xef\xe0\x1b\x75\x74\x12\xd6\x81\x17\x24\xfa\xcf\x08\x2f\xc9\x6c\x82\x27\x78\x32\xc7\x2b\xe8\x8d\xb2\x0e\x36\x20\x0f\xe1\x8d\xec\x68\x41\x0e\x27\x78\xad\x99\x42\x05\x1e\xa8\x0f\x1e\x00\x6c\x54\x12\x95\x5e\x27\x1b\x9c\xd4\x00\x1f\x91\xe2\x89\x97\xda\xcf\x61\x83\x73\x89\x2a\x7d\xd4\xf5\x62\xfd\xc3\xc6\x54\xb3\x1e\x8f\xd1\xf7\x87\x84\x24\x0d\xd9\xcc\xd6\x73\x04\xc0\x3f\x8e\x93\x82\x1c\x1e\xe3\x92\x94\x96\x42\x04\xaa\x12\x2f\xc6\x24\x7a\x16\xe1\x92\xdc\xce\x14\x9e\x98\x27\x0d\x2e\x21\xfd\xca\xa5\x20\x74\xb0\x9a\xf1\x39\xb9\x37\x7c\x68\x6d\x10\x0d\x56\xe8\xb4\xea\xe0\xd2\x7c\xb7\x2b\xe2\x38\xd9\xd7\x1e\xc2\xa5\xc3\x54\x2b\x5c\x5a\xcc\xb6\x18\x47\xbf\x8b\x70\xa9\x31\xd6\x12\xf7\x64\x50\x22\x8e\x35\xb0\x85\x78\x2d\x79\x13\xc7\x49\x4b\xe4\x03\xc2\xad\xa4\x77\xec\x16\x99\xb5\x73\x72\xdf\xd0\x4b\x30\xad\xce\x36\x86\x85\x6e\xb2\xd5\x0e\xed\xf0\x87\x80\x37\x52\x5f\xde\x54\xf5\x30\xdc\x20\x5e\xad\x3a\x7c\xe3\x80\x15\xfd\xd9\x8a\xd6\x74\xc4\x9a\x11\xaf\x46\xc0\x44\x8f\x64\x89\x62\x14\x8d\x29\xd2\x50\xd6\x6d\x0c\x3b\x81\xe6\x80\x2b\x07\xc9\x0a\xd4\xf4\x3e\x02\xcc\xe1\xc4\xa5\x4b\x36\x47\xc2\x1c\xc2\x3d\xbe\x20\x1c\x53\xa3\xc4\xc6\x7d\xb2\xf8\xf0\x30\x18\x4e\x58\xce\xf0\x54\xfb\x99\x19\xbf\x2c\xae\x48\x14\x69\x18\xfa\xed\xf3\x01\xfb\x58\x2f\x90\x77\x22\x72\xff\x44\x7c\xaf\x7c\x7d\xe6\x70\x0e\xf4\x56\xae\xd4\x9e\xad\xc6\xe4\x72\x56\xeb\x2d\x5a\x63\x47\x32\x44\xcf\x22\x89\x8c\x81\x3a\x31\x74\x70\x25\x8b\x8c\x2b\xa4\xc2\xfd\x78\x50\x54\xd5\xa7\x71\xa3\x1a\x3b\x5c\x29\x69\x4f\x02\x41\x5e\xe5\xf0\x79\x68\xba\xbc\x22\xfb\x50\x8f\xa6\xb9\x67\x73\xdc\x12\xdf\x1d\x13\x55\x2b\xdf\xc2\xfd\x77\x62\x3c\x9e\xb6\xfe\xca\x5b\x0a\x43\x41\x04\xd2\x4a\x6c\x83\x64\x32\x23\x03\x12\x06\x8e\xf0\x26\xa9\x15\xee\x52\x9e\xa0\x0d\xbb\x0b\x0e\xa1\x73\xc2\xc7\xd1\x6c\x4e\xa2\xf1\x40\xd9\x7a\x56\xcd\x11\xd6\x68\x38\x37\x0e\xce\xc7\x24\xda\x93\xdd\xe6\x65\x16\x95\x49\xfe\xda\x6c\xdc\x69\x14\x65\xd1\x34\x1a\x37\x5a\x06\x15\x47\x9d\xb3\xb7\xc9\xeb\xe6\x1b\x66\xcf\x4a\xb7\x62\xe0\x58\xee\x77\xde\xa9\x09\x0e\x0b\x38\xc8\xfe\x9a\x24\x9c\xc8\xb3\x62\x4a\x91\x08\xa1\xd9\x64\x8e\xac\xb7\xec\x4a\x42\xc5\xdc\x10\xcb\x92\xa8\xe5\xa6\xe7\x39\x89\x44\xdd\xd2\x28\x4b\xd8\x1f\x9e\xc7\x71\x34\x9b\x47\x20\x38\x50\x4c\x0a\x3b\x7a\xae\xb6\xd5\xe1\x04\xb7\xb3\xda\xa6\x4f\xb0\xfc\x32\xdf\x6e\x93\x76\x56\xcf\xc9\x6c\x8e\x10\xce\x09\x9f\x1d\xcf\xa7\x5f\x13\xf9\x83\xb2\x28\x42\xb8\x9a\xb6\x20\xfc\x53\xb3\x9c\x41\xde\xdc\x4c\x60\x1b\x4e\x91\x95\x6e\xef\x9f\x1b\x4d\x1a\x59\x9c\x34\xc7\x39\xb9\xdf\xe1\x56\xc1\x7c\x4f\x0e\xf6\x4f\x11\x7a\x01\x34\x7d\x09\xb2\x62\x6a\x78\xc3\x09\x2e\x35\x77\xb8\xf0\xb3\x4f\x4d\xf6\x05\x78\xaf\xb2\xd9\x17\xe3\x63\xec\x50\x5b\x50\xcf\x42\x8e\xd7\x84\x3a\x0a\x96\x36\x91\x34\xb7\x3a\x9b\x34\x38\x9b\x14\xce\xa6\x06\x0a\x4b\x42\x0f\x1e\xe7\xc0\x29\x91\x07\x27\x4b\xa8\xa3\x64\x12\x8a\xf0\xd2\x7b\x5d\xea\x01\xad\x2c\xdf\x01\x7b\x65\xf5\x87\xe3\x38\x8e\x9e\x45\xc4\xeb\xc5\xea\xe8\x18\x75\xe7\x43\xa6\xe1\x25\x59\xba\x94\xa5\x75\x4f\x29\xb7\xde\x21\x38\xfc\xf0\xc5\xba\xb0\x1d\x3e\x25\x15\xa6\x3e\x8b\x5b\x23\xbb\xdb\x80\x7b\x7e\x21\xfb\xb4\x31\x8c\x11\x23\x93\x17\xcc\xb1\x08\x6c\x3c\x46\xd5\x8c\xcd\x2d\x9c\x8f\xe3\x8d\x16\xf7\xce\xd8\x1c\x1d\x54\xc3\x52\x0e\x80\x1c\x43\xe2\x0d\xaa\x10\xe9\x76\x6b\x68\x93\x9a\xf0\xd9\x64\x8e\x19\xec\x48\x5c\x11\x3e\x7b\x2e\xf7\x8a\xe8\xe6\x6b\x48\x2e\xf3\xb5\x24\x97\xf9\x4a\x92\xcf\x9e\x03\xde\xab\xe4\xd6\x31\xbc\x43\x75\x54\x42\x1a\x88\x0f\x25\xc3\xd8\x98\x2f\xcd\x11\xf0\x1c\xec\x90\x90\xd6\xa4\xb5\x47\xcc\x90\x94\x90\x3e\x65\x47\x6d\x06\xa5\xa6\xcd\x51\x9d\x4d\x76\x68\x97\x6c\xd4\x92\x15\x64\x33\x9b\x58\xdf\x75\x45\x1c\x17\xde\x84\x24\xad\x7c\xd7\x04\x43\x1c\x83\x98\xe8\x77\x72\x39\x6d\xa2\x3e\x8a\x47\xff\x03\xfc\xd8\x6b\x82\x63\x0f\x6b\xd4\xb7\x33\x24\x8e\x20\xc0\x1b\xa2\x39\xce\x44\x49\x2c\x37\xdb\xed\xe1\x80\xcc\x10\xa8\xcb\x91\x72\xa1\xc3\x04\xdc\xb4\xd3\x22\x32\x63\x11\x9a\xa7\xdd\x20\xbc\x26\xc7\xf8\x56\x51\x01\x92\x43\x90\x3b\xe0\xd6\x10\xf8\x2b\x17\x8c\x59\xee\xaa\x95\xbf\x69\xe4\x04\x03\x59\xb8\x9a\xd5\xf3\xbd\x64\x20\x6e\xc8\x85\x3a\xf3\x72\x99\xce\xe3\x38\x97\x3f\x80\x06\x4a\x32\x79\x51\xba\x7d\x56\x8e\xc7\x48\x6e\x61\xbc\x20\xd5\xac\x9c\xcb\x73\x13\xc7\xc5\x6c\x3d\x1e\xcb\xa5\x27\xe4\x22\x8e\x93\x86\xdc\xef\x10\x7e\xf4\x28\xc6\x71\x3e\x2b\xe7\xd3\x66\xb6\x98\x93\x65\x1c\x0f\x30\x16\x4b\x94\xa9\xaf\x07\xb7\x12\xcc\x59\x1a\xd2\xfa\xce\xc6\x20\x60\x6d\xb2\x06\xb3\xe6\xf5\x2d\xcf\xd7\x6c\x91\xb5\x3b\xb3\x59\x6e\x77\x49\x81\x97\x38\x47\x10\x6d\xf9\x83\x55\x0e\x89\x26\xe9\xef\xd3\xdf\x47\x8f\xf7\x50\x8e\xf3\x43\xfa\xb1\xaa\xd7\xb0\x30\x35\xb9\xe7\xe6\xf9\x54\x51\x1f\x59\x89\x6d\xd2\xe7\x5c\xac\xb2\x46\x5f\x05\xc8\x17\x93\x67\x19\x42\xe5\x75\xbe\x19\x94\x28\xc2\x25\xc8\x01\x4d\xaa\x24\x8a\x30\xef\xdc\x62\x21\x7b\x25\x39\xa2\x89\x15\x13\x01\xd3\x69\xb6\x20\xe1\xfa\x06\x06\x2f\x03\x32\x61\xa1\xb6\x8b\xc2\xe7\x4b\x1f\x9f\x37\x64\x39\xab\xe6\x38\x07\x3a\x58\x6d\x7d\x84\x1b\xbc\x98\x35\x73\x84\x93\x92\x70\x77\x15\xd3\xcc\xd1\x94\x26\xb2\x1d\xd9\x70\x56\x2b\x01\x3c\xc3\x2d\xda\x25\xb3\x39\xe6\xc1\x8d\xa9\x98\x9a\x38\x55\x9a\x15\xcf\x8b\x02\x4c\xef\x4d\x64\x39\x7b\xc3\xfc\xc1\xbb\x8c\x1d\xb4\x99\xbf\xc8\x2f\x68\x19\xe1\xa8\x6e\xae\x36\xf2\xa7\x7b\x6b\xfb\xa8\x8b\x0f\x9a\x9e\xd9\x58\x90\xbe\x7b\x6b\xb6\x87\xc1\xac\x9e\x7e\x03\x92\xab\xd5\x0b\xdd\x97\xa3\x4a\x4d\x8d\x04\x14\x12\x33\x48\xe6\x47\x48\x1a\xb4\x73\xe9\xa6\x3d\x71\x82\xab\x76\xe3\x17\xaa\x13\x84\x2e\x8e\xc5\x1f\x26\x71\x4c\x67\xe2\xe8\x78\x2e\x39\x7f\x75\xe9\x01\xaf\x38\xf2\xa8\xcb\x08\x4d\x13\xb8\xc1\x38\x3a\x9e\xfb\x54\x27\x9e\x31\x73\x51\x32\xc1\x42\x62\x1f\x3e\x47\xd9\x8c\x82\xe0\x65\xde\x71\x32\x68\xc9\x02\xeb\x24\x88\xc9\x01\x51\x49\x2c\x46\xbc\x05\x6d\x05\xc3\x4c\x25\x82\x50\x89\x56\x10\x38\xd1\x8c\xa2\xb1\xb0\xf1\x6c\x82\xfb\xa4\x44\x28\x5a\x52\x49\xf1\x44\x57\x8a\x27\xe7\x05\x4a\xcf\xf8\x3c\xf0\x62\xa8\xc0\x2c\x4d\xcb\xea\x32\x8e\x93\xdf\x13\xd2\xf3\xa2\x35\x85\x8f\x49\xe4\x16\x77\xf4\x4f\x70\xcd\x92\x8d\xa2\x31\x47\x59\xc2\x89\xc0\x2a\x0f\x47\xc8\x9b\xfc\x85\xe7\xd9\xaa\x17\xd9\x6f\xbb\x0d\x62\x43\x2a\xea\x63\xbb\xed\x0e\xbf\x97\xf1\x23\x7c\xdf\xf9\x17\x79\x1e\xef\xb3\x47\x90\x19\xc7\x87\x92\x40\x12\xb0\x47\x10\x4c\xc8\x0b\x57\xc5\xca\xed\x67\xb6\x4c\xac\x7b\x0f\xd0\x91\x42\xe1\xab\x82\x07\x8a\xe2\xb6\xa1\x6c\x24\xcd\x5b\x2b\x67\xbd\x1a\x05\x69\x8f\xd7\xc6\x9d\x75\xdf\x97\x9b\x44\x08\x80\x8b\x74\xe5\x23\x70\x41\x32\xfa\x2e\x1a\x37\xe3\xe8\xbb\x74\xa4\xd8\xb2\xbc\x96\x08\x6b\x94\x2f\x04\xbb\xa2\x23\x83\xf0\x22\x75\xfb\x28\x71\x88\x26\x4f\x9c\x4f\xee\x17\xec\x0f\x92\x58\x39\x3a\x92\x5b\x29\x27\x49\x45\x84\xdc\x3c\x06\x88\xeb\xa0\x00\x2a\xb8\x53\x1c\x9b\x27\x09\x72\xc0\xb1\xf4\xe4\x90\x10\x2f\x51\x7b\x2d\xcb\x71\x6d\x44\x91\x07\x12\x21\xe9\xe0\x1a\x95\xa9\x55\x2b\x9e\xa7\x62\x45\x79\x52\x82\x99\x27\xb0\x42\xb8\x91\x05\xc1\x37\x9a\x32\x3c\x91\x3c\x47\x1c\x47\x3f\x71\x0b\x55\x8a\x9f\xbe\xbc\x3f\x31\xdf\xea\xd9\x64\x0e\x68\x53\x23\x6f\xf9\x0e\xd3\xd9\xc6\xf1\x21\xef\x63\xf4\x8f\x95\x58\x81\x13\x60\xe8\x46\x01\x77\x9a\xe1\x3c\x46\x68\x60\xaf\x73\x33\x40\x6a\x06\xc8\x21\xc6\x9f\xd3\x84\xe8\xb2\xd3\x9a\xf3\x68\xc8\x7d\x5e\x96\xd9\xbd\x89\x94\x5c\xc8\x47\x65\xce\x53\x80\xcb\xaf\x3c\x69\xd2\xbc\x2c\x4d\x28\xac\xd2\xae\x90\x3c\xdd\xe0\x26\xb4\x4d\xc0\xe9\x96\x81\x2f\x18\xe2\x53\x58\x30\xc6\xd0\x76\x9b\x94\x12\x15\x36\xda\x4c\xa8\x90\x87\x5e\x9d\x7f\x57\x93\x90\x8b\xeb\x15\x42\x3d\x58\x00\x25\xe2\xb8\x03\x20\xa0\x1a\xb9\xc3\x25\xf1\xaa\x76\x8c\x3c\x14\xee\x0d\x35\xda\x9c\x0d\x9a\x95\x1f\xb0\xec\x8d\x02\x38\xde\xc9\x72\x25\x2c\x7c\x91\x69\x33\x3e\xd7\xf5\xcd\xf8\x5c\x12\x27\x83\xb5\x69\x76\x55\x16\xd0\xb9\x1f\xc8\x6a\xfc\xda\x4e\x9b\x4c\xdf\x8c\xd8\x55\x2a\x3c\xe8\xa2\xb4\xf0\x24\x3c\xa2\xbb\x81\x5b\x73\xeb\xa1\x2d\x3a\x97\xf0\xd3\x7a\x25\x96\xbd\xe4\xdb\x2d\x9d\x89\x79\x1c\x0b\x6f\x07\xdc\x76\x5d\x82\xaa\xba\xbc\x50\x53\x30\x07\x7a\x11\x65\xbe\x9d\xba\x7c\xf5\xe4\xa0\x1e\x11\xa1\x85\xa2\xfa\xb8\xbc\xe3\xcb\x0a\x44\x0c\x3d\x59\xf1\xfd\xce\x5c\x21\xe9\xd7\x9d\xe5\x1e\x3c\x66\x5c\x9d\xb6\xf7\x12\x5b\x0f\x38\x9c\x8e\x22\xd3\x4b\xed\xd2\xd2\x6f\x35\x54\xb6\x8a\x94\x80\x2e\x11\x63\x12\xa5\x92\xfa\x1e\x13\x0a\xe7\x6f\x87\x70\x91\x44\xdf\x01\x90\xff\x0e\x66\x15\x28\x09\x9f\xdb\x05\xa7\x0d\x03\xcd\x77\x91\x87\x64\xe4\xac\xff\x5e\xe7\x68\xf1\x78\x3e\xf5\x5f\xe0\x20\x11\x6f\xec\x07\x8f\x75\xbe\x9e\xa9\xae\xce\x09\xd5\x45\x40\xce\x8e\x20\x6c\x13\x74\x0e\xa2\xcc\x90\x89\x77\x75\x02\x82\x04\xe7\x90\xd7\x80\x2d\x9d\x3f\xf1\xae\xf0\xbc\x29\x4e\x22\xf0\xda\x3b\x72\x61\xae\x23\x84\x14\xa8\x6b\xf1\xbe\x22\xda\xa9\x85\x01\xd9\xb2\x84\x12\xdb\xf7\x9d\x16\xb3\x70\x8c\x92\xcd\xf3\x07\xf0\x07\xab\x05\x31\xad\x2d\x94\xcf\xc2\x3c\x43\x43\x92\x74\x55\x72\x0f\x60\x37\xa3\x46\xac\xfa\x33\x13\x2b\x80\x9d\x59\xd8\xea\x2c\xb7\xcc\x2c\xbe\xce\x9b\x97\x17\x55\x2d\x68\x91\x55\x18\x78\xa6\x8c\xed\xd0\x6e\x68\x94\x4a\xfb\x7e\xa4\x60\x3b\x42\x3e\xb5\xe6\x79\x14\xe9\x4e\xb3\x24\x7c\x59\xa7\x26\x30\x3e\x18\xb1\xe5\x48\xb1\x4a\xe0\x7d\x94\xf1\x96\x0e\x4f\x9c\xe1\x6c\x25\xa0\xec\x8d\x19\xa2\xd2\x0f\x77\x34\x97\xe3\x8a\xd0\x10\x79\xc8\x3b\xeb\x30\x0b\x67\x78\x9e\xb2\x46\xaf\x69\x61\x81\xc0\x43\x05\xc6\xe3\x39\xa1\x98\x6f\xb7\xb7\x89\xe5\x54\x71\x54\xd3\x82\xd5\x74\x21\x22\xed\xf9\x94\xde\x08\x2c\x10\xce\x93\x70\x43\x75\xbb\xdf\xdf\x4d\x3e\x3d\xe9\x29\x8b\x04\x3b\x9f\x74\x86\x64\xb6\x91\xde\x14\x0a\x41\xeb\xf5\xed\xee\x87\xee\xe8\xcd\xda\xe5\x58\xe8\xae\x36\xc3\x5d\xfd\x5c\x57\x0b\x2a\xd9\x6a\xb4\xdb\x61\xba\x4b\xbc\x4d\x71\xa9\x43\x4d\x1f\xc2\xc9\xf6\x49\xba\x4b\xe4\x2b\xef\x5d\x26\x5a\xc8\x24\x08\xec\x55\x8d\xe7\x14\x8f\x73\x60\x92\x36\xa2\xad\xe9\xa9\xc8\x17\x5f\xcf\xea\x7c\x41\xa7\x7b\xd2\x55\xb9\x4b\xcd\x1b\x35\x32\x5d\xf2\x5f\xf2\xd7\x70\x7d\x3a\x72\x41\xc5\x89\xf0\xdf\xd4\xe7\x25\x2b\x29\x04\x97\x12\xf6\x51\x7d\x28\x19\xa7\x8a\x14\x95\xd4\x97\x7d\xd1\x1a\x9b\x3a\xb2\x82\x30\x4f\xdb\xad\x47\x3d\xeb\xe3\xa5\xd5\x03\x24\x10\x23\xfb\xbf\x9a\x26\xb8\x57\xbd\x64\x7a\x21\xd6\x4f\x41\x77\x9e\xb5\x49\xc7\x5d\x99\x9a\x11\xfb\x15\x69\x35\x96\x61\x0c\x05\x41\x58\x30\xc3\x95\x56\x13\xf4\x2e\xd1\x0e\x8c\x6f\x64\xe5\xf8\xb8\xde\x6e\xb5\xef\x4f\xad\x2b\xc1\x05\xe5\xc2\x5c\xe1\x29\xee\xd2\x5c\xe1\x15\xb9\xd0\x62\x46\x95\x4b\xc7\x8e\x54\x2f\xf0\x55\x02\x6d\x13\xc7\x5b\x1d\xaf\x0f\x55\x41\x4b\x87\x0a\x07\xd1\xa3\xda\x72\x81\xf6\x04\x6c\xea\x20\x45\x23\xd1\x01\xbd\x0b\x85\x80\x03\xdd\x0b\x50\x3e\x85\x85\x0e\xaa\x60\x57\x95\x09\x77\x15\x7c\x68\xe8\xdf\x5a\xca\x17\x61\x6e\x66\x00\x27\x39\x3c\xb6\x29\x40\xba\x4b\x40\x05\x09\x6d\x5d\x6a\x43\xef\xa8\xdd\x14\xb9\xa0\x51\x30\x78\x8d\xb2\x7a\x23\x07\xcb\x3f\x57\xa9\xc7\x65\x1f\x4e\xb0\x75\x32\x1c\xcc\x4d\x0f\x2e\x32\x04\xd1\x1a\x13\x6f\xb6\x18\xb2\x6b\xcb\x9a\x57\x79\xdb\xd0\xe2\xc7\x5b\x18\x03\xe3\x97\x7e\x23\x87\x15\xee\xe4\x7a\xa7\x44\x68\x5e\xa6\x0a\x08\xd9\x07\x72\x6c\xb7\x13\x42\x48\x65\xe7\x0e\x75\xeb\x34\x2d\x7f\x51\x57\xe2\x61\xdd\x91\xbe\x28\x8f\x64\x15\x76\x1a\xe3\x38\x39\xac\x1e\xec\xfc\x76\x3b\xf4\xbd\xd7\x04\x92\xa4\x1e\xdc\x52\x78\x5b\xa7\xd6\x0f\xfd\x9d\x58\x07\xac\x7f\x7f\x6f\xd5\x21\x52\x87\xc8\x9e\x03\xb0\x18\x99\xbb\x50\x6f\xff\xd5\x1d\xcc\x7c\x74\xac\x79\x22\xdc\x90\xc9\x8b\xe6\x87\x1c\xee\x52\x3b\xb9\x9a\x39\xf2\x30\xd4\x8b\xf1\xb8\x41\xfd\x0d\xdc\x9a\x32\x07\xe1\x1e\xb6\x41\xff\x4e\x75\xca\x78\x1c\x9e\xb3\xda\xc2\xff\xd0\x63\x7a\xe9\xb6\x3c\xda\x47\x82\x18\x4d\xfc\x40\x7c\x90\xab\x42\xa3\xa3\x91\xca\x05\x31\x3c\x40\x60\xb5\x1f\xdb\xd3\xd4\x51\x26\xdb\xad\xd7\xf4\xb4\xd7\xe6\x79\x52\x22\x94\x25\xa5\xe1\xdc\x0d\xfb\x89\xa9\xda\xf8\xb8\xc4\x16\x29\x5b\x92\x08\xe1\x32\x85\x7e\x25\x68\x80\xa8\x50\x05\x65\x37\x0b\x4b\x4e\xbc\x34\xe4\x04\xf0\x33\x7b\x4f\x9f\x9a\x39\x07\x41\xd1\x13\x68\x7c\xd6\x9c\xdc\x30\xf1\xc0\x4d\x1b\xe9\xed\x39\x73\xc7\x86\x25\x29\x63\xee\xd8\x7e\xe0\x2f\xc6\x63\x60\x17\x93\x9a\xb0\x99\xd0\x62\x69\x42\x08\x44\x12\xd0\xe5\x41\x79\x58\x5f\x3b\xdb\xf8\x41\x93\x90\xe2\x97\x48\xbf\x27\x9c\x1f\x00\x3c\x8a\x3a\x50\xdf\xc3\x1a\x16\x1d\x95\x9f\x6e\x1c\x7e\x53\x81\xda\x01\x10\x85\x24\x28\x0f\xd1\xab\xcb\xdb\x27\xd4\xa0\x73\x0e\xd4\x01\x0b\xbc\x4f\x31\xcd\xed\x28\xf9\x9a\x25\x8a\xe8\xd0\x28\x2d\x84\xfb\x5d\xac\x31\x8e\x32\x8f\x41\x80\xf0\x5b\x7a\x8f\x9b\x58\x86\x1a\xe7\x6d\x6a\x0f\xe8\x78\xa1\x02\x54\x23\x01\x5e\x75\xd8\x64\xd2\xc5\x26\xc7\x3e\xb2\x4d\x95\x78\xc8\x03\x97\x96\x2b\xe9\x71\x6d\xa2\xbe\xed\xa9\xea\xe8\x4d\xaf\x15\x75\xfc\x8a\xdd\x88\x24\x38\x17\x20\xfe\x72\x63\xf1\xf5\x9d\x8d\xb6\x47\x80\xe3\xe2\x18\xa2\x56\xad\x2a\x8d\x74\xec\x07\x84\x69\xd8\x31\x95\x6b\xe8\xda\xac\x83\x35\xd5\xdc\x74\x76\xa6\x3a\xe4\x03\xbc\xa8\x96\xc8\x7a\xae\xfb\xa3\x8b\xaa\x2a\x69\xee\xd9\x44\xd1\xa9\x30\x92\xbb\x0c\x66\x76\x35\xb0\xea\x72\x55\x42\xf8\x6d\xee\x91\x7b\xd8\x7b\x7c\x8c\xf0\xc0\xde\xad\xca\xb2\xba\xfe\xa2\xc9\xff\xc6\x5f\x83\xde\xb4\x1f\xec\x3f\x14\xb6\x98\xaf\x10\xda\x5d\xfe\x69\x3f\xa9\xdb\x7e\x82\xb2\x1e\x88\x13\x68\xd7\xe9\xf4\x03\x9e\x32\x3d\x58\x9e\x98\x33\xa1\x23\x49\xd8\x33\x32\x8e\x50\x14\x56\x58\x56\x21\x3c\x7b\xe8\x80\x81\xc4\x21\xe0\x1f\xce\xc3\x38\x47\xa6\x18\x75\x65\xa2\x82\x0a\x88\xd0\xa5\x0e\x5f\x1a\x21\x0c\x0c\xc5\xee\xc2\xbf\x7a\xa0\xbc\x20\x17\xfd\xfd\x03\xfb\xff\xba\x77\x3a\x1c\x09\x6b\xc8\xd5\x1d\x3e\x19\xd0\x05\xbf\xd9\x2b\xfa\x51\x0b\xdc\x93\x8b\x4c\x06\xe5\x22\x13\x5f\x2e\x32\x99\x67\xf7\x2e\x8e\x80\x70\x21\x5b\x0d\xdc\x3e\xc1\xc1\xfb\x67\x83\x7d\xac\x54\x62\xa9\xcd\x61\x5d\x0a\x80\x7f\x25\x3a\xc1\x14\x45\x86\xa5\x24\x84\x08\xa5\xe5\x79\xae\x5d\xd4\x9b\xd8\xee\x76\xe3\x2b\x1e\x6a\x26\xe6\x60\xbf\x31\x84\xb5\x2e\xa9\xa5\x35\x02\x8f\x32\xc1\x49\xa0\x62\xb1\x1a\xc8\xe5\x1d\x03\x57\x8d\x53\x14\x43\xc1\xa9\xe8\xf5\xb1\xb3\x73\x3b\xdf\x07\x90\xa8\x12\x36\x05\x95\x76\x27\xb1\x2f\xb8\x40\x38\xe9\xaa\xba\x25\x82\x50\xe4\xb4\xdd\xb6\xdb\xa1\x10\x1e\x68\xd0\x1a\x53\x00\xaa\x9c\x26\x43\x8d\x0f\xa4\x29\xc4\x3a\x00\x22\xeb\x54\xb1\x12\xde\x64\xa0\x80\x24\xd5\x4c\x0a\xca\xa8\x5a\xe1\x6e\x76\x23\x59\x7d\xe0\xac\x4a\x4c\xab\xaf\x88\xd4\x45\x8f\x5d\x18\x75\x0b\xd4\x85\x77\x7b\x65\x94\x46\x5b\x40\x49\x17\x5d\x25\xdf\x0d\x08\x19\x2f\xa9\xf8\x89\x1b\xb6\x70\x0f\xd2\x0e\x4b\x34\xda\x82\x7e\xc0\xdf\xc2\xc8\x23\xba\xd4\x29\xf6\x0b\x06\x53\x32\xac\xbe\x61\x0e\x99\x92\x06\x98\x9e\x87\x13\x4d\x1f\x93\x92\x9a\x6b\x05\x2d\xeb\x5c\xac\xe8\xe2\xeb\x9b\xaa\x06\x4c\xaf\xee\x4d\xb4\x9c\xc3\x50\x78\x75\xcb\x55\xbc\x30\x60\x8b\xdf\x56\xd5\x57\x2f\x9b\x40\x46\xd1\xfd\x92\x0a\xc8\x10\x7e\xcc\x6d\x1d\x10\x57\x6c\x4f\x15\x8d\xca\x75\x41\x17\xd5\x9a\x1a\x16\x22\xc8\xb2\x5f\x64\x3a\xb0\x4f\xf7\x4b\x50\x3d\x61\x28\xec\xe5\x7a\xaf\xf8\x54\x89\x03\x97\x55\x6d\x45\x76\xaa\x04\xdb\x5b\x42\x4d\xd2\x68\x2d\x87\xf8\xe4\x06\xd8\xd2\x72\x22\x45\x0b\xe1\x39\xbe\xbb\x70\x93\xfd\xdd\x68\x55\x55\x5f\x6d\x65\xd5\xde\xca\x3e\xfc\xd6\x46\x19\x1f\x7d\xb7\x1e\x68\x2a\xdf\x5b\x05\xac\xe3\x6f\x1f\xa5\x6c\x30\xb7\x5b\xa1\xd3\x6a\xf3\xc0\xe4\xca\xad\x31\x32\x47\x51\x47\x5c\xf4\xf6\x79\x6f\x93\x0e\x1f\x21\x8d\x69\x25\x0c\x31\x9c\xd9\xe1\x04\x47\xd7\xac\x2c\xf5\xbe\x53\x53\x89\xc3\x63\xa5\xa1\x59\xdd\xf2\xd3\x55\x5e\x6b\x09\x91\x6c\x25\xa1\x38\xf2\x16\x2c\xc2\xb3\x79\xbf\x67\xe1\xd6\xdf\x6f\xb3\x2d\x4f\x73\x80\x0f\x1a\x91\x37\xab\x2f\xbe\x54\x4a\x87\x2e\xdc\xdf\x19\x37\xb7\x11\x06\x66\x2b\x84\xd9\x41\x74\x41\x5f\xda\x35\xe3\xf3\xdd\xde\xd9\x7f\x77\xc9\xe5\xd6\x5e\xb6\xe5\x92\x95\x25\x18\x6a\x82\xc5\xd4\x28\xe7\xc5\xc8\x58\xb2\xc9\x6a\x54\xf2\xd0\xea\x74\xba\xda\x8b\xbd\xac\x24\x9a\xd5\xa5\x1c\x83\x24\x99\x75\x5c\xb0\x71\xa4\x77\x48\x4f\x00\x12\xc7\xb5\xd2\x78\xeb\x7e\x40\x58\x7f\xb0\xda\xd4\x83\x0a\x5d\xe6\x3e\x8d\x2d\x13\x13\xf3\x59\xc5\xdf\xb4\x2a\x07\xb3\xda\x5c\xaf\xa1\xec\x78\xcf\x17\xcc\x67\x93\x39\xca\x9e\x3f\xf4\x19\x2b\x75\x4e\x48\x56\x97\xbd\x10\x07\x2f\x80\x5c\x7e\x7c\xbf\x11\x8b\x63\x16\xc8\xd8\xc0\xec\x0d\x5c\x0c\xe0\x3e\x00\x64\x0f\xdd\xfe\xa8\x65\x52\xf5\xd2\x62\xb4\xac\xab\xf5\xa8\xe2\x36\x2a\x90\x5a\x34\x39\xc3\x4d\x6f\xd1\x0c\x40\xdf\x4f\x48\x05\xb8\x63\x98\x29\x1e\xbe\x7b\xf9\x06\x78\x3b\x80\x45\x7f\xe3\x3e\xf5\x2e\x74\x3a\x28\xbb\x77\xca\x7a\x64\x47\x47\x32\xdc\x4d\x00\x11\x72\xef\x44\xd9\x33\xad\x03\xcf\xba\x16\x43\x44\xb7\x1f\x20\x58\x62\x22\x11\xe8\x80\x1a\x49\xdd\x3e\xa8\x60\x6e\x21\x83\xeb\x48\x9b\xea\x77\x87\x6b\x03\x4f\x02\x46\x8e\x99\x23\x25\x8c\xca\x5d\xb0\x35\xb5\xd6\x1d\xdf\x49\x8a\x80\x68\x16\x5b\xdf\x1d\xe9\x2d\x9b\x44\xfa\x3d\xd2\x0c\xc2\x76\x7b\x08\x7a\x05\xd6\x54\x9f\x18\xb0\xa5\xf9\x81\x24\xb2\xb0\x1c\xd7\xdd\x05\x81\x1b\xb8\xd3\x76\x43\xeb\x05\x2d\xc2\x2b\x5e\x15\x96\xdd\x08\x88\x0e\x4c\x84\x63\xd3\xca\x60\xef\x46\x8a\xd9\x30\xd2\x01\xf9\xbc\xdd\x76\x7b\x1c\xc7\x87\x42\x87\xb8\xeb\x44\x23\x8b\x36\x5a\xed\x2a\x8e\x0f\xc3\xa5\x82\xce\xfc\xe7\xa1\x70\x92\xab\x4e\xf7\x02\x65\x31\xd0\xad\xea\xc5\x3a\xe3\x28\x8e\xa9\x51\x5b\xe0\xf3\x01\x21\x98\x2f\x10\xb6\xcb\x89\x76\xca\x27\x8e\xba\x69\x81\xf8\x7b\x28\xa1\x78\x76\xff\x95\xde\x66\x96\xa7\xda\x13\x63\x21\x60\xd9\x0e\x09\x39\x99\x06\x29\x6a\xf9\x7d\x36\x29\x41\x3b\xf0\xd0\xb5\x4f\x3c\x72\xee\xc8\xcf\x1d\x0e\xba\xa0\x8f\xff\xbe\x9e\xf8\x52\x9b\x0e\x0f\x39\x1d\x4a\xcc\x92\x81\xbe\x0d\xb2\xa0\x4f\xec\xb1\x61\x77\x28\xa6\xbb\xdd\x1c\x29\x86\x5f\x2e\xd9\x69\xb0\xed\x2c\x3b\x5d\x27\x16\x81\xc0\xfc\x6f\xaa\xa6\x61\x17\x25\x7d\x65\x42\x9c\x57\xf5\x17\x68\x06\x69\x3a\xda\xbb\x3b\xe4\xce\x58\xb5\xf6\x64\xe5\xe4\x70\x82\xeb\x9d\xf5\xc9\x26\x52\xc6\x57\xb4\x66\xa2\x41\x49\x2d\xe9\xf0\xfa\x51\x7a\xde\x53\x21\xec\x00\x21\x09\x33\x1e\x82\x4b\xde\x61\x19\xc2\x2d\x8a\xfa\xde\x8b\x5e\x00\x94\xd6\xdf\xc8\x2f\x39\x08\x00\x3b\x39\xc2\xdf\x02\x84\xbc\xa3\xb0\x93\x6d\xef\x92\x1b\x84\x3f\xfd\x37\x2f\x95\xb2\x24\xd4\xbf\xdb\xed\x6c\xfe\xe4\xe5\xea\xe3\xd0\xce\x36\x54\x14\x4f\xc0\xca\xaa\xe9\xd3\x91\xfa\xae\x58\x41\x0b\x43\x6d\xef\x59\x20\xbb\x80\xe1\x5a\x0c\x70\xa2\x4e\x11\x55\x43\x3a\xa3\x01\xe0\x11\xa0\x0d\xae\xc9\xfd\x4e\x02\xb2\x45\xe2\x99\xff\xce\x24\x25\x33\x27\x02\xd7\xee\x32\xd6\x34\x50\x07\xd7\x7f\x2e\x59\xcd\xa7\x42\xd6\x98\xbb\x9b\x3e\xbd\xa6\xfa\x2a\x56\xbf\xb9\x72\x68\x40\x24\xe2\xa3\x42\x5d\x95\x4f\x92\x19\x1d\x29\xee\xcc\x01\x9e\x9d\xb3\xe2\x77\xcf\x52\x41\x1b\x91\x30\x34\xad\x41\xab\x2b\x65\x45\xa6\x9e\x70\xbd\x33\xdb\xe7\xe5\xf0\xf6\xe1\xff\xa8\xed\xd3\xb9\xca\x03\xac\xbc\x67\x03\x71\x0c\x91\xb8\x1f\xd9\x40\x6a\x0d\xbd\xa3\x70\x00\x8a\xc5\xa1\xb1\x5a\x9e\x88\x8e\x32\x17\xc2\x22\x34\x0b\x0e\xa8\xe6\x03\x8f\xee\x30\x87\x4e\x12\xc9\x1c\x47\x05\xb5\xb3\x1f\xa1\xed\x16\xd2\xf4\x96\x0c\xd8\x95\x41\x8e\xa4\x06\x36\x64\x87\xb9\x9c\xeb\xc0\x06\x39\xd0\x85\x4f\x26\xf8\x6b\xfa\x55\xa2\x31\x30\x18\x44\x89\x90\xf3\xe4\xf1\xfd\x46\x8e\xf8\x15\xf3\x9d\xcd\x49\xee\x0d\xb0\xc9\x4e\x15\x88\xc8\x5e\x62\x25\x1f\xcb\x3e\xed\xba\x86\xc1\xff\x2d\xab\x0b\xd2\x4c\xae\x20\x57\x1d\xde\x76\xf2\xe0\x15\x5b\x5a\xa8\x71\x4e\xdc\x34\x38\x09\xd6\x85\x07\x37\xbb\x4f\xdd\x29\xc0\x59\x9c\x55\xea\x42\x67\xc8\xc9\x84\x32\x59\x6f\x12\x0f\xfe\x1b\x6f\x0a\x3e\x2c\x68\xc0\xf2\x0d\x94\xc0\x3c\x7b\xd7\xa4\x92\x7c\x0e\xd8\xf9\xe4\x56\x07\xcc\x6a\x6c\x05\xbb\x40\x77\x44\x8f\xba\x01\x4f\x4e\x1c\xb7\x58\x0b\x09\x98\xdc\x0b\xfd\x7e\x9b\xec\x03\x5d\xc7\x15\x6e\x54\xf7\xfb\x31\xbe\x2e\xc1\x8e\xe2\x0a\x5f\x04\xa8\xcc\x5e\x8e\x20\x7c\x6e\x35\x93\x2d\xf8\xf1\x17\x05\xf4\xd5\x5b\x32\xc1\xa5\xd3\x57\x6f\x7f\x28\x5f\x8c\xc7\xad\xa4\xd6\xc4\xac\x9d\x7b\x57\x94\xbd\xe2\x81\x48\x0e\xdd\x9f\x93\xf6\xe0\xa2\xa6\xf9\xd7\x9d\xaa\xd6\x53\x8a\x6e\xff\x40\x26\x2f\x8e\x8e\x5a\xb4\x24\xc9\x82\xc8\x7a\xad\x46\xb4\x6f\x4a\xa4\xee\xd2\xdb\x39\xde\x28\x81\xf9\x42\xc1\x64\x2b\xb1\x9f\xb6\x7f\x20\xe7\xd3\x8d\x1e\x2d\xd0\x7e\xb0\x4f\xde\xba\xe2\xc9\x12\x73\x53\x0e\x5f\xe0\x15\xca\x92\x82\x34\xc9\x12\xe1\x4d\x57\xb8\x2d\xb3\xbf\xa9\x6a\x6d\x4b\xa3\x0d\x58\xba\xe5\x71\x8d\x5b\x5c\x20\x94\x7d\x5b\xab\xb8\x8a\xe3\x64\x43\x36\x1d\x66\x47\xa1\x83\x8d\x23\x3a\xd6\x64\x15\xc7\x2b\x8b\x89\xba\x03\x8e\x63\x9f\x50\x5f\xc5\xf1\xc6\xa3\xf5\xd7\xb2\x09\x03\x5f\xa1\x1a\x03\xe9\x5c\xae\x35\xc2\xb7\x64\x85\x13\x39\x71\xdb\xed\xa6\xcb\x5c\x24\x2b\xf0\x2a\x73\x4e\x3e\xe4\x62\x95\xae\x19\x4f\x5a\x7c\x2e\x8b\x6c\x10\x66\x71\x7c\x28\x47\x71\x4b\x6e\x07\x47\x71\x6b\x47\x81\xf0\x65\x78\x39\xd7\x72\x75\xa3\x77\x0b\xa8\xea\xc2\x0e\xa7\xaf\x41\xfe\x41\x72\xac\xba\x1e\xed\x1c\xab\x19\x5d\xd3\x9a\x5a\x6f\x78\xab\x1c\xdc\xe4\x69\x65\xfc\x42\x2d\xd6\xc8\x18\x44\x03\xcf\x0c\x11\x7e\xab\x56\xd0\x6c\x14\x8d\x3d\x41\x82\x46\xf3\x8c\x5f\xe5\x25\x2b\x24\xa3\xa0\x2d\x7c\x92\xb0\xbf\x72\xc8\x79\x72\xd9\x57\x29\xf1\x12\x00\x1e\xe3\xcb\xf0\xf4\xf6\x6b\xde\x67\x10\xae\xcd\x22\x44\xd7\xbf\xcb\x78\xcc\x8d\x7f\x17\xb0\x9e\x61\x21\x11\x99\x74\xc0\xc5\x23\x9b\x77\x18\x7c\xe4\x1e\x00\x01\x81\x8f\x5b\x8f\x7b\x20\x74\x5a\x52\xcf\x9c\x6e\xeb\x1c\x05\x24\xc8\x9e\x0d\xef\x40\xeb\x41\x9d\x6e\xaa\x4d\xa2\xb4\x30\x64\x85\x20\xc0\x31\x5a\x0e\xd6\x09\x8b\x32\xcb\x50\xc4\x74\xf7\x0a\xde\x65\x6a\x49\xa2\x3d\x47\xf4\x73\x75\x35\x66\x51\x1c\x97\x66\x0f\x9a\xdb\xb0\xaf\xf6\x82\x48\x13\xd6\x14\xbb\x39\xcb\x04\x76\xe4\x59\x06\x2e\x96\x65\xd9\xac\xd5\xee\x19\xf8\xae\x33\xdd\xc3\x63\x1f\xc4\x2f\x86\xd7\xd5\x66\x92\x92\xf8\x28\x2d\x81\xf6\xa2\x3c\x3a\x7a\x01\x36\x03\x84\xc5\x31\x05\xcd\x50\xd9\xa4\x9c\x28\x8f\x2c\xca\xc3\x75\xc0\x0d\xe1\xb3\x72\x8e\x17\x49\x8e\x50\x3b\x6b\xc0\x7c\x48\x4f\xf6\x81\x99\xec\xc3\xaa\xcb\x52\x37\x7b\xdc\xc4\x15\xac\xe0\xdf\x39\x87\x6d\x94\x57\xed\xe5\x6a\xa4\xcc\x82\x9e\x81\x73\x69\xb6\x50\x4e\xdc\xa8\xa0\x75\x33\x12\xd5\xa8\xc9\x05\x6b\x96\xb7\xa3\xbc\x2c\x8d\xcc\x6c\xf0\x00\x2a\xbf\x05\x60\x9c\x0c\xfd\xac\x66\xcd\xdc\x5b\x91\x80\xd3\xe9\x2c\x88\xe6\x6c\xda\x9d\x22\x92\xae\x3d\x22\xe9\x6c\xaf\xbe\xea\x59\xa0\xaf\x7a\xf6\x8f\xd7\x57\x3d\xfb\x7f\x80\xbe\x6a\xc7\x48\x27\xd0\x56\x1d\x34\xe0\x79\xa2\xc2\xea\xd9\xb7\x29\xac\xbe\xfa\x6f\xa6\x20\xdb\x5a\x9e\x93\xb6\x2e\xff\x11\xb4\x9e\x6f\xae\x6c\x2d\x45\x81\x44\x5a\x82\x5a\xbf\x9e\x33\xab\x0e\xa3\x8c\xc5\x96\xde\x81\x39\xf3\xbe\x29\xbb\xf8\xc3\x63\x43\x3a\xb4\x75\x79\x10\x5a\xbf\xb0\x65\x02\xcc\x07\xe3\x39\xc4\x92\x92\x33\xf0\xe3\xed\x4f\x5f\xde\x07\x35\x6e\x9c\x6f\xdc\x9d\xa3\xb8\x96\x5d\x8a\x4b\xd9\x2e\x77\xcf\x4b\x52\x93\x65\x40\x2f\x79\xc7\x87\x9b\xe3\x53\x5b\xa9\x80\xb3\x34\x9b\x16\x49\x85\x9c\x5e\xb9\x11\xf5\x74\x13\x94\xa0\xb9\x40\xe0\x36\xa2\x4b\x87\xad\xb6\x5b\xd6\xa3\x19\x1a\x34\x4d\x56\x60\x16\xdd\xcd\x4f\x18\xca\xfa\x89\xf6\x96\x3f\x4f\x16\x01\x8e\x5d\x86\x17\x17\x0b\x0d\x01\xf0\x97\xbe\xa3\xa3\x6a\x83\x3f\xff\xb7\x29\x78\x74\xe8\x42\xe2\xe3\x59\x4d\x43\xb8\x04\x6c\xde\x4f\x2d\x2a\x51\x05\xdc\xbb\x2b\xe3\xd2\xb0\x77\xf3\xff\xd3\x97\xf7\x84\xba\x67\x9d\xdd\xbe\x1b\x9d\x26\xd0\x90\x55\x79\xdd\x8b\xce\xec\x12\x34\x54\x62\x85\xa7\x7f\x46\xc3\x77\x5d\x26\x48\x53\xc5\xae\x59\x59\x06\xe5\xc2\x04\x5d\x30\x4c\xec\x78\x65\xa6\xf6\xd1\x34\xa3\x5f\xb5\x8a\x9e\x67\xbb\x49\x42\x53\x4e\x9d\xdf\x4f\xc2\x46\x2c\x44\x40\xcb\x41\xe7\x28\xab\x4b\xdd\x68\x53\xbe\xca\xcb\xf2\xc7\x7c\xf1\xd5\xd9\x6f\x29\xad\x78\x5f\x0f\xbc\xa7\x8f\xe7\x7f\x3c\xd7\x76\x6e\x7f\xf6\x78\x4e\xff\x7b\x55\x16\xa7\xbd\x1a\xb5\x7e\xee\xdb\x7d\xea\xeb\x1d\xfd\x5d\x62\xf5\xd2\x8c\xed\x36\x40\xa1\xda\x06\x6a\xd0\x5f\x1b\x2a\x12\x34\xa4\xc8\x13\x9a\xcd\x1b\x97\xc3\xb6\x36\x37\xfb\x03\x33\xee\x65\x5b\xe7\x9b\x84\xe2\x47\x48\x52\x4b\x70\xe0\x9a\x1c\x4e\x5e\xf0\x3f\x90\x49\x1c\xd7\x2f\x8e\x8e\x24\x65\x2a\x80\x32\x55\x9e\xaf\xf1\x7d\xde\x38\x78\xb2\x43\xb8\x26\xca\x43\x08\x03\xd7\x5b\xdb\x6d\x14\xbc\x28\xff\x28\x91\x6f\x06\x63\x5c\x4e\xfc\xcf\x9e\xaa\xdb\x03\x8e\x98\x46\xdd\x51\x99\xbc\x3d\xad\xa3\xa7\xa8\x3f\x85\x07\x77\x6f\x36\x0f\x30\x79\xfb\xa8\x6f\x7e\xaf\x2d\x90\x03\x65\xa6\x8f\x0a\xcb\x81\x38\xf4\xd0\x98\x5c\xf4\x94\x04\x07\x53\xb3\x24\x51\xee\xaf\x2e\x54\x40\x12\xd4\x37\x42\x98\xe0\x40\x42\x42\xde\xea\xd6\x42\x8e\x26\xd4\x8f\x67\x9e\xc1\x17\x61\xa1\xa6\xf0\xc0\x84\xbf\x4e\x18\xe6\x08\x57\x21\xc4\x88\xe3\x4e\x42\x52\x0d\x9d\x0b\xd0\x2d\x05\x06\x31\x54\x39\x5f\x54\xeb\x4d\x49\x05\x8d\x10\x02\x29\x48\xa8\x41\xda\xd5\x73\x0d\x77\x7f\x7d\xdb\xf3\x40\xee\x34\x79\x30\x23\xda\x57\x57\x77\x36\x71\x45\xd8\xf0\x3c\x2b\xa0\x91\x39\xf8\x81\x73\x12\x12\x16\x49\xd5\x3d\x4d\xb8\x87\x08\x06\x50\x81\x44\xa3\x9b\xa4\x0a\x66\x3f\x0f\x25\x8d\x6c\x99\xbc\x49\xf2\x70\xb9\xaa\xe0\xd5\x52\xb7\x4d\x1c\x1b\xc7\x88\x83\x1b\x32\x69\x14\x83\x87\xd0\x34\xa9\x87\xb6\x4a\x6d\x7c\x52\x74\xc6\xbf\xdd\x7a\x9b\x0c\x44\x43\xa6\x49\x80\x6a\xbf\xaa\x3d\x95\xa3\x83\xda\xdb\x8d\x98\xe2\x1c\x3f\x04\x67\xd1\x30\xa8\x39\x80\x8b\x3f\x67\xee\x6c\xa4\xd6\xf6\xae\x6f\x8f\xef\x53\xc9\x1b\x03\x85\x35\xe3\x73\x7b\x85\x69\x9e\xc3\x4b\xc7\x3b\x95\xc9\x58\x8b\xb8\x67\x64\xf3\xed\xdc\x8d\xe2\xc3\x93\x0f\xf7\xb6\xfd\xb9\xd4\xfe\xda\xbb\x63\xde\x73\xbc\xad\x52\xf7\x30\x42\xaa\xd5\x5d\x85\x36\xee\x78\xec\x3c\x0e\x6e\x7a\x5c\x1d\x78\xe7\x62\x8f\x3e\xae\x91\xd8\x00\x07\x07\x42\xeb\x66\x24\x69\x57\x88\xd5\x91\xab\x7b\x22\x59\xea\xc5\x08\x54\xf6\xd9\x1d\xe3\x97\x9e\x1e\x7d\x1a\x21\x58\x14\x5d\x33\x73\x52\x51\x35\x73\xbf\x26\xf2\x14\x50\x84\xa9\xa7\xbb\x9f\xd4\x03\xfa\xda\xa4\x1e\x82\x15\x7d\x3b\x8f\xf3\x84\x22\x84\xb2\xe4\x35\x80\x58\x6a\xb4\xf6\x25\x39\xae\x1a\xb1\x0a\xf8\xfb\xd4\xee\x57\x09\xc8\x9a\x07\x1a\x3b\x9c\xe0\x59\x14\x40\xb0\x68\x8e\x70\xdd\x85\x72\x9d\x84\x64\xb0\x32\x84\xcb\x24\x9c\xea\xb3\x2f\x2f\x3f\x9e\xbe\x3b\x7b\xf7\xe9\xe3\xe8\xd5\xa7\x0f\x9f\xdf\x9f\x9c\x9d\xc8\xe9\x73\x4e\x60\x3d\x89\xb1\xf1\x21\x9a\x4b\xcc\x2e\xf9\x84\x3c\xb0\xc6\xdc\x6e\x93\x8a\xd0\x81\x59\xc4\xa1\xde\x96\x36\xaa\xc9\x31\xc5\xd5\xac\x1a\x68\x06\x53\xb3\x0f\x11\xce\x77\x3b\xd5\x63\x10\xb8\x38\x10\x7d\x4a\x85\x28\xa9\x6f\x3c\xa1\xb7\xe3\xe8\x7a\x45\xb9\x9f\xce\x1a\xb3\x4b\x40\x05\x0d\xb3\xed\xf6\x41\x67\x51\x83\x43\xd0\x0e\x33\x9a\xd0\x8d\x13\x03\xaf\x60\xcd\xac\x9e\xe3\x24\xef\xec\xb2\x59\x3d\x07\x57\xb0\x5a\xa2\x94\xab\xe3\x0f\x0e\x9f\x72\xdf\x2a\x78\x95\x50\xac\x17\x39\x24\x58\x23\xcc\xe7\x72\x2a\xc2\x54\xc9\xb6\x85\x29\x49\x83\x3b\xfb\xdb\xe8\x29\xe9\x68\x0c\x01\x7a\xcf\x71\x83\x70\xbd\xd3\x3a\x4d\x2a\xc9\xda\x39\xe8\xf5\xf5\x34\x81\x7c\x28\xaa\xee\x04\xd1\xae\xa7\xac\x4a\x45\x4f\xfd\x1d\x66\x30\x8e\x7d\x0b\xd0\x21\x43\x08\x94\xd6\xf4\x8a\xd6\x0d\x4d\x50\x60\xa5\x1f\x58\x3f\xd3\x1b\x26\x22\xab\x9c\x3c\x48\xe8\x2a\x62\x5a\xb1\xcc\x7b\x29\x5f\xd9\xff\x2e\xf9\x26\x3f\x4b\x5e\xc5\xe7\xd1\xaa\x3a\xe9\xb3\x65\x58\x10\xed\x22\x03\x61\xed\xdb\xd5\xf9\xc7\x71\x9c\x19\x57\x5e\x86\x35\xa1\x45\x84\xbb\xda\x54\xbe\xf1\xea\xc0\x37\x9e\xfc\x0c\xee\xf1\x6a\x84\xdf\x1b\xad\x59\x63\xfb\x02\xaa\x63\x43\xea\xc6\x9d\xfe\xf6\xa4\x66\x36\x97\x72\xcf\x29\x46\x10\x1e\x6d\x0d\x21\x40\xa3\x9e\x69\x8f\x65\xd7\x7a\x84\xbb\xad\xa7\x47\xb1\xba\xd3\x75\x56\x0d\x28\x0c\xbc\xef\xed\xab\xa0\x34\xc4\x5e\x5c\xd3\x82\xe5\xc2\x03\x83\x4f\xaa\x49\x05\x33\x08\x07\xb0\xac\x69\x33\xe0\x12\x9a\x0c\xd3\x56\x9c\x88\xa9\xe8\xd3\x51\x35\xe1\xe1\x79\xd7\x32\x1f\xa5\x82\x2c\xd1\x4b\x3e\xd2\x4d\x05\x1e\x1d\x3c\xd7\xaf\x1f\x12\x25\xf9\x08\x84\xa1\xea\x8a\xd1\xbf\x7d\xca\xe8\x76\x0b\x0e\x6b\xcc\xfe\x36\xd7\x5f\xd9\x6c\x8e\x3d\xfc\x9d\xed\x63\xfb\xb6\x5b\xde\x95\xf0\xef\xac\x42\xf7\x80\xe9\x15\xf3\x0d\xae\x44\x60\x11\x4b\x84\x6f\x75\x55\x59\xab\x2b\xdf\xe4\xaa\x1a\xdc\x30\x3f\x33\xb1\x7a\xca\xca\x9b\x2a\x6d\xa3\x3d\xde\xa7\xe7\x91\xd6\x77\xcd\xdb\x24\x5d\x5b\x2c\x7c\x8c\xe4\x60\x6b\xe5\xc0\xb0\x56\x0e\x0c\xfd\xe9\xa7\x6e\x42\xab\x1d\x0a\x89\x63\x6f\xc1\x1f\xa3\x92\x9d\xb6\x62\x87\x50\x5e\x78\x7e\x49\x31\x27\xe5\x90\x7d\xae\x35\xa0\xcc\x93\x05\x2e\x3b\x2e\x12\xe6\x9e\x5a\x84\x93\x28\x06\x22\x26\xd2\xf6\x78\x62\x33\x51\x09\xc5\x8b\xae\x71\xa2\x1c\x62\x8f\xff\x08\x9d\xd6\x0d\xcc\x8e\x00\x56\xf8\x9b\xa8\x43\x98\x3a\x2d\xdd\x80\x67\x77\xd3\x1f\xcc\x73\xfd\x9b\xa7\xb7\x03\x29\x34\xe1\x34\x30\xb8\x90\x8f\xad\xfd\x4e\xe1\x86\x84\xb4\x31\xd0\xda\x4d\x8f\x7e\x57\xce\xb0\x9a\x59\xd3\x3d\xae\xc6\x09\xb8\xcf\xbb\xbb\x4b\xf5\x56\xee\x81\x89\x26\x08\x4a\xb3\xe2\x0b\x49\x0c\x34\xb3\x85\x25\xf9\xe9\x8b\xf1\x78\x81\x5e\xb0\x65\xb2\x20\xc4\xe6\x0b\x5b\x5f\x2a\x94\x75\xb0\x0c\x89\x4e\x67\x26\xb8\x18\x1f\x23\xf0\xeb\xed\x27\x68\x01\xef\x9b\xc4\x5f\xd8\x36\x58\xd8\xde\x7d\xfe\x12\x97\xbd\x35\x68\x55\x20\x99\xa1\x65\xe8\xf8\xcf\x09\x39\x0d\x98\x4e\x0e\xce\x32\xf5\xf2\xaf\xb4\x33\xcc\xfb\xdd\x41\x9e\x14\x58\x6b\xaa\xae\x49\xc0\x50\x5a\xbd\xca\xdb\x11\xe3\xa3\x35\x5a\x77\x6f\x80\x6e\x91\xf2\x05\xda\x4b\x4c\x8a\xd9\xed\x9c\xac\x67\xb7\x73\x7b\x5c\x56\x71\x7c\xb8\x81\xa6\x86\x77\x4c\x28\xfd\x87\xd3\xda\xc3\xe8\x5c\x63\x74\xf1\x87\xe3\xa9\x38\x3a\xce\xc0\xe7\xeb\xf1\x8b\xfa\x07\x01\x54\x1a\x9f\xd5\x47\xc7\x3e\x6e\xaf\x15\x6e\x37\x96\xd4\x4d\xc2\x43\x4d\x9a\x70\xb7\x26\x14\x33\xf0\xc6\x3a\x3b\xee\x5a\x17\xf4\x2c\x4f\xb5\x2c\x58\xee\xea\x83\xbf\x97\xfc\x58\x79\xfa\x7f\x83\xec\xc4\xb1\xb2\x32\x0d\x6c\x24\x3f\x5a\x1f\x67\x71\x9c\xd0\x41\x61\x23\x07\x0f\x65\x60\x60\x1d\xee\x0e\x20\x5d\xbd\x75\x7e\xcd\x8a\x57\x50\x3c\xc2\xdc\x78\xe7\xc2\xaa\x34\x37\xde\xc9\x80\xb0\x1d\x6c\x05\x88\x1e\xdb\xaf\x5f\x07\x28\xf4\x87\x7d\xf8\x77\x6e\x03\x70\xdb\x65\xfe\x4a\x72\xaf\x08\x9b\xe2\x95\xbe\x47\x9d\xcd\xb1\x24\x31\x69\x01\x4f\x2a\x3a\x99\x7c\x6c\xb9\x71\xd7\x36\x9b\x63\x20\x73\xad\xc5\xdb\xc2\x78\x68\xab\xc8\x04\xe7\xc4\xfa\xf3\xae\x7e\xc8\xc1\x6b\x27\x27\x10\xce\xa3\x26\xad\xfc\x81\x50\x7e\x4e\x21\xc5\x82\x93\xed\x36\x61\xe0\x6a\x98\x4d\x93\x32\xd5\x2d\x9b\xd8\x11\xb2\x54\x99\xaa\x8e\x59\xcd\x04\x8e\x50\xb6\x90\x04\x80\x3e\xec\x8a\xa2\x54\xcf\xd3\x64\x41\x0e\x27\xb8\x4c\xc3\xe1\x99\xfa\x50\x56\xa6\x76\x44\x36\x8c\x85\x1a\x83\xe9\x3f\xce\x2d\x87\x63\x87\xd2\xeb\x83\x1c\x99\x73\xb0\xa6\xe9\xff\x5e\xab\xc6\x55\xa9\xce\xe0\xd1\xf9\xe5\x2e\xb1\x8e\x60\x90\x09\x43\x84\x19\xc9\x4d\x43\xc6\x35\xee\x0f\x0c\xce\xa1\x0a\xc6\x98\x54\x36\xc3\xac\x76\xac\xa2\x55\x41\xb9\x4d\x2a\x1c\x41\x53\x91\xdc\x91\x1c\xa9\x14\xe0\x1d\x0c\x40\x92\x9b\xc3\xb2\x0f\xba\x0f\x07\xfa\x97\x08\x8d\x0f\xe8\x20\xef\x90\x7b\x73\xa7\x87\x06\x72\x0c\xbf\xfb\x6a\xa0\x9d\xde\xdf\x42\xc7\xe1\x93\xd7\x6f\xd7\xd5\x63\xcc\xc3\x49\xe8\xcc\x63\xa7\xba\x77\x49\x8b\xbb\x79\x24\xfb\xd9\xaf\xc7\x6c\xa7\xc1\x0a\xf4\x47\x28\x29\x27\x4b\x33\x7e\xa5\xe1\x26\xcc\xa4\xc0\x05\xe8\xc0\x74\x74\x1c\xac\x95\x3b\xc3\x33\x87\x22\x5e\x8a\xdb\x50\x7d\x51\x36\x65\x0f\xf7\xbb\xae\xb3\x3c\x7b\x52\x25\x35\x6b\xcd\x01\x3c\xef\x60\x4c\xb9\xc7\x8c\xe3\xdb\x84\xe1\x08\x06\x11\xe1\x1a\x61\x08\x38\xe8\x7c\x8a\x38\x8e\xe8\x12\x1c\x55\x5b\xb5\xa2\x0a\x43\x41\xfd\xea\x00\x15\x52\xe9\x10\x13\x36\xc2\xd5\x23\x55\xea\x30\x54\xc2\x5e\x81\xb0\xa9\xec\x5a\x26\x7a\xd6\xb8\x83\x77\x96\x39\xc2\x87\x9e\x3b\xc2\xd7\x7d\x30\x66\xae\x80\xa9\xa3\xc3\x41\xb5\x57\xe5\x5a\x3a\xc9\xd6\xaa\x0b\xdc\x36\x64\x35\x5b\x75\xc9\x99\xc2\x50\xac\x9c\xb8\x6f\x70\x61\x02\xb7\x25\x12\x63\x27\x35\x59\xe9\x60\x24\xc6\x1a\xcb\xdc\x7d\xf4\xee\x88\xe3\x38\x59\x28\x38\x7d\xb0\x90\xb8\xb9\xa3\x9e\x7a\x7e\xc5\x20\x6f\xc0\xb1\x84\x9b\x80\x91\xe5\x20\x69\xbb\xc1\x92\xdf\x20\xf4\x21\x6f\x40\xb8\x21\x3e\x03\xb3\x88\xe3\x43\xfa\xa0\x23\x1f\xdc\x86\x3a\xb3\x9f\x78\x79\x1b\x32\x41\x0b\x5c\x76\xeb\x1c\xaa\xb2\xe7\xfb\x07\x57\xdb\x6d\xb3\xdd\xb6\xdb\x6d\x39\x5d\x7a\x9c\xb4\xdc\x0b\x4b\x8f\x7b\x66\x41\x10\xd1\xf7\x21\x4a\x93\x08\x4d\xcc\x26\xf3\xed\x36\x7a\x16\xe1\x86\x88\x99\xf0\x54\x69\x20\x08\x82\x93\xaa\xf7\xad\x5c\x02\x0f\xc3\xe0\xe1\xe7\x8b\xd6\x58\x40\xe1\x2d\xb5\x1f\xed\x75\x9a\x94\x09\xc5\xd1\x4f\xb2\x87\x92\xb5\x85\x8c\x23\x63\x30\x03\xa2\xd3\x01\x21\x5e\xf5\x18\x97\xbb\x8f\x91\x6d\x77\x08\x65\xea\xca\x2d\x77\xe2\x0f\xdd\x89\x97\x42\xd0\xf5\x06\xba\xf1\xd3\x97\xf7\xbe\xdc\x4e\x54\xa3\x68\x9c\x23\xdd\xee\xab\xe4\xbe\xad\xcb\x2c\xdf\x81\x87\x9e\x4e\xc9\xbd\xa5\x4c\x6f\xe5\x0c\xbb\xfe\x31\xe3\x02\xf5\x18\xf5\x3a\x8a\x87\xae\x75\x92\x2a\x00\x5c\x6f\xfe\x61\xf7\x04\xfa\x9a\x60\xbf\x19\x91\x6d\xf3\xce\x33\x5e\x8a\x63\x67\xbd\x34\x39\xd0\x49\x62\xbb\x0d\x3e\x28\x0e\xc3\x84\x90\x08\x63\x92\xe0\x3c\x48\x50\x06\x95\x95\x1b\x43\xfe\xc0\x18\xaa\xc1\x31\x30\x02\x91\xce\xb4\x63\xd6\x87\x06\xf2\xd6\x41\xfd\xc0\x89\x35\x47\xbc\xbb\xbb\x99\xf6\x90\x40\x08\xe1\xe0\xee\x55\xc7\x65\x96\x2f\x07\xbe\xd6\xda\x6c\x7e\xa0\x7c\x31\x03\x2d\x6a\xa4\xbd\x0e\x02\x59\x7a\x14\xb7\xb8\x9e\x03\x70\x4f\xea\x21\x48\x45\xee\x77\xc6\x05\xaf\x86\x99\x03\x04\xde\x78\x5c\xa1\x72\x96\x34\x40\xdc\x21\x39\x85\x73\xd2\xa8\x70\x90\xd8\x78\x8c\x6e\x52\x5d\xf9\xbe\x96\x66\x4d\x50\xd0\x11\x54\x3b\xe7\x79\xfd\x33\x0e\x3c\xa3\x5f\x68\x47\xec\xe0\x66\x7d\xbf\x1b\x76\x3f\x08\x78\xd7\xf5\x7a\xc7\xf1\xba\x67\x75\xe3\xac\x4c\xc0\x0b\x86\x44\x57\xaf\xf2\xb2\xbc\xc8\x17\x5f\x9d\xbb\x8b\xed\x36\x19\xcc\x00\xc1\x04\xc4\x8e\xa6\x4b\x56\x82\x1b\xbf\x34\x6f\x6e\xb9\x44\x60\xeb\x5c\x45\x59\x90\x9b\xcd\x59\x60\x4a\x3a\x6c\x29\xf1\x18\x28\x6f\x2c\x2a\xbe\x64\x97\x6d\xad\x94\x32\x64\xf7\xd9\xf2\x16\x9e\x97\x50\x57\x4d\x01\xfb\x02\x65\xdf\xac\x94\xe0\xbf\xd0\x6f\xf2\x73\x0e\xbe\xc8\xf2\xb2\x74\x9f\xf2\xb2\x24\x34\x05\xdd\x8c\x33\x1d\x1f\x3a\xb5\x46\x63\xe9\x22\x6f\x04\xf4\x31\xdf\x04\xee\xe6\x71\x45\xee\xd7\xec\x86\xf1\x21\x03\x34\xe8\xac\x92\x40\x73\xac\xfa\xaf\xde\x96\x4b\x77\xbf\x41\x7c\xd5\x10\x3c\x34\x53\x5a\x6a\x4d\x77\xb8\xf2\x9b\x31\x61\x7a\xad\xbb\x8f\x43\xe7\x05\xc4\xd3\xc9\xba\xdd\x50\xe3\x09\x5c\xd7\xa8\xc2\xd9\x5e\xd0\x51\x6e\xef\xdb\x6c\xbc\x5c\xe5\x07\x05\x41\x40\x10\x3a\x3f\x60\xc0\x6f\x40\xc8\xe6\xd9\x1c\x61\x88\xf2\xc8\x6c\x38\x18\x81\x40\xad\x53\x53\x36\xb8\x5a\x2e\xb3\x21\x61\x52\xed\x5f\xbe\x5a\x03\x1e\x08\x16\xe5\xd7\xa5\x02\xcb\x54\xb2\x4a\x15\x3d\x2e\xa9\xf0\xb1\xf6\x78\xa6\x7b\xb0\xc3\x7a\x9e\xb2\xa1\xeb\x18\x90\xea\xa8\xb6\x74\x54\xae\x0a\xd4\xfe\xf5\xfc\x0d\x84\x56\x49\x26\x18\xe2\xa8\x80\xad\xd1\x6e\x87\x73\x72\xcf\x40\xa9\x0f\x02\x3c\x1c\x1e\x7b\xb1\xf4\x1a\x3b\xe1\xcf\x0f\xfb\x7e\xeb\x8d\x54\x23\x97\x0d\xe7\x2a\x56\x76\x95\xc2\xc6\x48\x72\xa4\xd9\x84\xd9\x3c\x88\x53\xad\x3a\x2e\x67\xb4\xd5\x41\x4a\xb5\xb8\x6d\x93\xdf\x96\x55\x5e\x64\x60\x5f\x29\xd2\xf3\xcb\x96\x15\x7f\xa2\xb7\x98\x15\xf2\x8d\x15\x18\x7c\x8a\x7f\x54\x99\x0b\x2a\x72\x56\xca\x0f\x35\x6d\xda\x52\x60\x88\xed\xf0\xae\xc8\x80\x83\x94\xb9\x4b\x79\xc8\x65\x06\x78\xc0\x82\xad\xe9\xa9\xc8\xd7\x9b\xec\xb5\xc4\xd7\xbc\xba\x4e\x10\x56\x7e\x5a\xf3\x59\xe4\x86\x7f\x74\xcd\xc4\xea\x08\xd4\x41\xa3\xf9\xd4\xdd\x15\x98\x8a\x10\xb8\x75\xdd\xed\x50\x1c\x37\x54\x9c\xb1\x35\xad\x5a\x91\x3c\x20\x9f\x98\xbc\xa0\x2e\x8a\x15\x95\xb3\xcf\x49\x22\x48\x3b\xa3\x40\x44\xc2\x98\x51\x2a\x07\x4b\xb8\x04\x74\x63\x9e\xb2\x02\xeb\x60\x15\x7f\xf4\x93\xf5\x10\x31\x57\xae\xf2\xe2\x38\xe1\x5a\x7f\x55\xa7\xa8\x37\x84\x73\x7b\x89\x28\xb4\x0b\x15\xdb\xd0\x41\x6b\x03\x29\xee\xf0\xff\x98\x84\xa1\x04\x8c\x2f\xef\x38\xee\xc5\x9b\x03\x25\xc8\x85\x53\xfd\xd4\xd6\x22\x66\x03\xd0\x03\x27\x40\x95\xe9\xc9\xd2\x73\x6a\x72\xad\x35\x3c\xfd\x88\x02\xe8\x5e\xc7\xf7\xd6\xbb\x74\x43\x8e\x71\x41\x9e\xe3\x35\xf1\x9c\xe7\x7a\xfb\xf0\xb6\xa3\x26\xa2\x38\x84\xde\x2d\xdc\x5a\xfb\xdd\x14\x78\xbd\xd3\xfe\xc2\x4d\x10\x5f\xe7\x24\x57\xaf\x91\x7f\xbb\x4e\xc9\x15\xbe\x52\xd7\xcb\xf4\x89\x17\x7e\x41\x53\xb6\xf6\x0b\x0f\x0e\x5e\x11\x8a\x2f\x77\xbe\x77\x2d\x3f\x16\xa9\xe8\x4c\x67\x30\xbd\x71\xcc\x09\x21\x1f\x3a\x93\x6e\x91\x02\x21\x8b\x69\x08\x72\x44\x7a\xae\xf8\x50\x42\x36\xd3\x1b\x10\x3d\xe9\x93\x21\xb9\x2d\xfb\xad\x98\xca\x8d\x5c\x71\xd8\xd3\x6a\xbc\xa7\x41\x66\x94\x7d\x4a\x84\xd1\x01\xb1\x4d\x40\x28\x4c\x42\x38\xd4\xcc\x51\x76\xad\x5c\x3c\xe0\x01\x6f\x69\x2a\x98\xee\x0e\xed\xe0\x37\x93\xc3\x58\x4f\x93\x9a\xe8\xe9\xc2\x66\xda\x6c\xdb\xb5\x24\x79\xfb\xbe\x9b\xf8\xb4\x0b\xeb\x72\x85\x2a\xfb\x0e\xbe\x31\x83\x58\x3f\xe4\x22\xe1\xc8\xd0\xab\x7e\xd7\x99\x96\x1e\xe1\x81\x31\x74\x06\x61\xb3\xaa\x61\xa0\x1d\xd6\xd7\xe7\xd9\x28\x1a\x27\x54\xc3\x80\xed\x36\x1a\xb5\xfc\x2b\xaf\xae\xed\x5d\x7a\x84\x90\xc4\x1a\xd5\x21\x21\x6b\x53\xc7\xc3\x83\xde\x61\xaa\x26\x49\x76\xe6\x46\xcd\x9a\xdd\x2b\xd7\x21\xdd\x4c\xc1\x79\x98\xca\x94\x25\xb5\xf1\x8c\xc5\x89\x40\xd8\x90\x7d\xdb\xad\x8b\x5c\x4f\x6a\xdf\x1f\x96\x7c\x37\x85\xd5\x26\x84\x50\x26\x28\x88\xf1\x8c\xee\xa9\xdd\x18\x72\xdb\x99\x67\x39\x68\xbd\x37\xf0\xcb\x84\x7a\x85\x6e\x8c\xf7\x08\xbb\xbb\x56\x4a\x24\xaa\xb2\x43\xc4\x12\xfd\x69\x03\x4c\x95\x7c\x6d\x2f\x9a\x45\xcd\x2e\x5c\x48\xc7\x69\x9e\x3a\xe0\x1b\xc7\xa5\x44\xec\xe0\xde\x82\x16\x11\xa6\x28\x33\xab\xfe\x12\x53\xbf\xc7\xa7\xfb\x1a\x57\xaf\x05\xf6\xfb\x61\xea\x38\x09\xeb\xf8\xd4\x95\xaa\x84\x1d\x04\x3c\xad\x6d\xeb\x68\xe7\xd0\xb0\x59\x35\x27\x42\xfe\x8c\x37\x73\xc2\xe1\xa1\x98\x93\x1a\xc6\x59\xc1\xfc\xe9\x7b\x7d\xbf\xff\xae\xe9\x97\xde\xe5\x5d\xb7\xd9\x9a\x98\xd2\x07\x10\x4a\x24\x9c\x9e\x1a\x4e\xb8\x37\x49\x59\xa4\x68\x46\x35\x5f\x78\x72\xd8\x37\x1b\xd6\xc7\xb9\x72\x51\x36\xec\xec\x78\x71\x03\xb9\x8b\x1b\x48\x7e\x8f\x24\xad\x22\x54\x68\x34\x31\xae\xe7\x98\x4d\xbf\x26\xc6\x58\x31\xab\x92\x06\x1d\x0c\x2e\x27\x99\x78\xc0\xf0\x6b\xff\xfa\x69\xe8\xa4\xdb\xc0\x83\x07\x39\xa9\xa6\xf2\x14\x27\x35\xca\x6a\x6c\xe0\xd6\x21\x21\xab\xed\x36\xc9\xe1\x10\x9c\x4a\xa2\x25\x24\xf0\x5e\x9a\x43\xd8\x8c\x16\x86\xd6\x5b\xe4\x9c\x57\x62\x64\x2f\x1d\x72\x31\x6a\xf2\x35\x35\x39\xd3\x08\xa1\x2c\x57\xb0\x89\xed\x3b\xa6\x10\xf8\x23\xab\xa6\xd7\x89\xc0\x39\xca\x0c\x6c\xb5\x2f\x45\x1c\x9f\xc2\x9b\xb7\xb0\x1f\x3a\x62\x78\xed\xfa\xc1\x2e\x27\x93\x95\xc4\xf1\x21\xdd\x6e\x99\xaa\xc2\xf2\xa1\xa3\xde\x49\x58\xac\x72\xc6\x8d\xa3\x72\xe5\x6e\x14\xfe\x2b\x9d\xb3\x60\x47\xea\x88\xcd\x06\xff\xfa\x58\x23\x59\x62\x6e\x7d\x90\x99\x65\x7f\x5a\x93\x95\xa4\x88\x09\x59\x4d\x3f\x29\x74\x58\x61\x03\x81\x60\x1c\x53\x9a\xb9\xc3\xd5\xbf\xe2\xfe\x9a\xc8\xed\x52\xe3\x06\xed\x20\x62\xa8\xec\xe2\xd9\x03\xde\xd1\xb9\x75\x94\x74\x6e\x94\xa5\x3c\x63\x13\x12\xfa\x3d\x83\xa1\xd2\x64\x89\x8d\xf3\xaa\x73\x50\x84\xfa\xc4\xbf\x28\x0e\x4a\x6b\xb1\x9f\xb3\xe6\xa7\x86\xf1\x4b\xc5\x2c\x2b\xae\x86\x10\xf2\xb1\xf7\xf5\x8b\xe5\xb7\x3c\x24\x6b\x72\x71\x26\xf6\x50\x05\x03\xaa\xdd\x90\x7d\xd8\xe9\x8d\x3e\x24\xdb\xed\x44\x2d\xa1\x3e\x33\xa6\xaf\x35\x5d\xe7\x8c\x33\x7e\xe9\xa5\x00\x08\x73\xf1\x72\xb9\x19\x2d\x05\x83\x2e\xb8\xaa\xef\xba\x66\xb4\x9f\x86\x54\x05\x88\xd7\xb0\x0d\x08\xa2\x66\xc6\xc2\x82\x3a\x80\xaa\xe2\x07\x0e\xa1\x44\x75\xbb\xf9\x62\x75\xc2\x45\x7d\x9b\x50\x09\x1f\x04\xb6\x8a\x93\xe7\xca\x5f\x52\x5b\x5a\xef\x44\x49\xb7\x67\xbd\x1c\xbd\x8b\xbd\x83\x89\xb1\x43\x76\xb3\x01\x21\x29\xfd\xf9\xc0\x37\x89\xdf\x6f\x4c\x51\x67\xba\xfa\xfa\x40\xe7\x0d\xa0\xf1\x0f\xf9\xed\x05\x3d\x5b\x51\x9e\x5f\x94\x0f\x98\x16\x91\xbd\xbb\xf0\x60\xcf\xbe\x91\x24\x8e\xa4\x51\x91\x21\xdb\x1c\xe8\x9a\x26\x5d\xec\xa1\x61\x82\xe2\xc1\x5f\x0a\x8b\xb6\x40\x21\xd2\x8c\x91\x07\x74\x91\x65\x72\xeb\x69\xb7\xf4\x46\x16\x93\x44\xc4\x9e\x0d\x3f\x4d\xce\xb5\xce\x79\x95\x2c\x11\xa6\xee\xc4\x5c\x33\x23\x09\x78\x29\x12\x86\x55\x9b\x03\x9f\x74\xd9\x3e\xb1\x27\xb4\x2b\x4c\xd7\x7a\x50\xae\xf2\x1d\x7b\xf6\xdd\x55\xbb\xbd\xd4\x5b\x09\xed\x37\x67\x90\x13\x09\x26\x20\x58\x50\x43\x4d\xd9\x0c\x5f\x60\x2a\xbd\x39\x1a\xdc\x14\xc5\xcb\xbd\x0a\x13\xe1\xf9\x60\x21\xb5\x31\x00\x76\x94\xed\x67\x31\x3d\x05\x05\x7b\xed\xcd\x27\xe8\x89\xa9\x1f\xef\x3d\x33\x5d\xff\x5d\x7e\xf1\xde\x44\x75\x8e\xca\xd1\x51\x70\x12\x20\x32\x76\xa7\x36\x7f\x85\xf6\xb8\x8e\x03\x1c\x23\xa9\xa3\x2e\x1f\xe0\xbb\x44\x1d\xd8\x81\xbb\x47\x73\x16\x26\x67\xef\x5e\xfd\xd5\xd3\x47\xa4\x10\xf1\xbd\xd2\x4c\xf3\xc9\x45\x90\x0f\x66\x7c\x97\x99\x6f\x8e\x32\xaa\x69\xde\x54\x3c\xe3\x8a\x2b\xfc\x42\x40\x36\x78\x1e\x8d\x9d\x30\x60\x1c\x1d\x45\xf8\xb3\x8e\x66\xf4\x71\x0f\x9a\xf2\x7a\xc8\x0a\xf2\xd9\xb8\xf1\x57\x6c\x81\x85\xda\x7d\x83\x25\x03\x99\x82\x34\x8f\x7a\x22\xb3\x39\xee\xe3\x62\x30\xda\xd4\xb8\x18\xe1\xa5\x8e\x25\x35\x24\xf9\x8a\xe3\x41\x35\x47\x8f\x48\xfa\x6b\xd5\x2a\x01\xd8\x26\x6f\x1a\x50\xd1\x83\x93\x59\x8f\xdc\xa5\x61\x03\xf6\xbf\x4b\x56\x37\x62\x64\x50\xdc\x48\x54\x90\x6a\x54\x86\x3d\xba\x22\x42\x3b\xed\x9b\xca\xd7\x6d\xa6\xd3\x21\xcc\x77\x78\x0c\xdc\xb6\x08\x80\x08\xdf\x6e\x13\x88\xaf\x71\x6d\x98\xad\xc1\xaf\x86\x15\x33\x2c\x78\x8d\xee\x15\x0b\xb5\xdb\x19\x45\xd0\xec\xb1\xd1\xbf\xc9\x19\x84\xaf\xab\xdc\x00\x46\xdf\x69\xf8\xf8\x5d\x36\xfa\x5c\xd2\xbc\xa1\xa3\x16\x82\x0c\xd0\xd1\x77\x9c\x5e\x7f\x37\xaa\x36\x12\x89\x56\x35\x06\x8a\x4a\xfb\x2e\xf0\x27\xc0\x10\x99\x17\x14\xe8\x4e\x5a\xc8\x29\x74\xc2\xc5\x14\x26\x68\x98\x44\x30\xe8\x60\x58\x17\xf3\x20\x4f\xc1\xcf\xa5\x4f\x53\x09\x8f\x3b\xcb\xfb\x61\x17\xb0\x95\x4f\x75\x0d\xaf\x1e\x0b\x0a\x00\x37\xad\x46\xd6\xfa\xc4\x90\x00\x9e\x2f\x1d\x6f\x3e\x0e\x7a\xd5\x0e\xa0\x0c\xee\x7b\x4a\x7c\xc0\x09\xe2\xb0\x74\xe1\x91\xd2\x6a\xed\xa1\x70\x5f\x73\xe7\x57\x7f\xec\xf7\xb2\xa8\xdb\x36\x00\xf1\xed\x42\x99\x90\xa7\xb0\xc7\x3a\xb7\xf0\x66\xf0\x1d\xc2\xc5\xea\xd5\xf4\xf5\x91\x1a\x8f\x7c\xcb\xc7\x2a\x68\xf6\xb1\x1f\xe7\xdf\xda\xc1\xd4\x81\x7e\x12\x3e\x6c\x21\x35\x69\xc9\xfb\xa4\x06\xca\x62\x6d\xfd\x28\xec\xe3\x59\x14\x0b\xf0\x51\x22\x7a\x86\x70\x75\xd0\xc6\x31\x84\x9c\x6c\xc1\xd0\xe8\xd7\xa4\x05\xd1\x83\xac\x9e\xd4\x3b\x75\x7d\x63\x0a\xd8\xdb\xd3\x59\x3e\xf7\xd7\x9b\xa3\x7b\x3a\x3d\x4d\x4a\x6c\xfd\x58\x03\x23\x76\x9d\x94\x12\xc5\x1d\xba\xb7\x21\x6a\x93\x3a\x52\xd3\x23\x62\x8f\x8e\x91\x26\x36\x8f\x5f\x18\xf2\xb2\x86\x80\xaf\xe0\xf9\xdc\xda\x8e\xef\xbc\xc8\x02\x28\xeb\x06\x63\xed\x34\x1a\x06\x94\xbc\xdf\xc1\xfd\xb8\xd5\xd6\x71\xad\x57\xc8\x9b\xfc\x0a\x74\xc3\x72\x39\x1f\x74\xc6\xe7\x46\x2f\xe4\x45\xfd\x83\xf0\x03\x4f\xb3\x99\x98\xd5\xf3\x39\xc9\x67\xf5\xf8\xd8\xf6\x8f\x79\xfd\x93\x20\x2a\x53\x73\xb2\xc3\xed\xb4\x4f\x4f\x18\xe3\x82\x54\xdf\x39\xef\x3b\x20\xaf\x6d\x91\x1d\xda\x25\x25\x6e\xb4\xaf\x5e\x94\xbd\xf6\xdf\x76\x4e\xa1\xf4\xfc\x1c\xce\xeb\xf9\x39\xa1\xbe\x90\xf5\x75\x87\x96\x31\x05\x40\x4c\xa6\xb8\x99\x1a\x0b\xa4\xfd\xcc\xec\xdd\x51\x54\x72\xc1\x98\x06\xd7\xf2\x5d\xff\x86\x7b\x24\xc6\x49\x57\x64\xfc\x11\xa2\xb5\xa1\xfe\x05\x71\x30\x39\x00\x85\x3e\xaa\xbb\xa7\x05\x86\xb4\x61\xf8\xd5\x89\xc8\x89\xa6\xce\xbe\x1f\x53\xd0\xd7\x44\x86\x76\xcb\xb4\x9e\x2a\xd8\x20\x75\x90\x83\xd1\x39\x01\x13\x2a\x7d\x47\xa4\x01\xfa\x35\x13\xab\x51\xce\x47\xb9\x6c\x21\x42\x00\x55\x3e\xaa\x7b\xb4\xc1\x8d\xd7\x11\x80\xb3\x65\x72\xd8\xed\x24\xb2\x82\xd2\xba\x2b\xc8\xb0\xa6\x52\xf9\x82\x3e\xd2\x13\xe4\x02\xf1\x76\xd8\x35\xfe\x83\xbb\x3b\x1f\x8f\xd1\x27\x1d\x01\xc2\x80\xcd\x19\x9f\xa3\x07\xe8\xba\x6b\x70\xf2\x37\x48\xc8\x9d\xaa\x4f\xce\xb3\x03\x4c\x85\x66\x96\x17\xf0\x0c\x9c\xf7\x3e\xc5\xea\xde\xbd\xc0\xa9\xb9\x17\xc0\x1f\x7d\xdc\xa8\xef\x7d\xc8\x97\x20\x19\xa2\xe3\x7c\x00\xe2\xec\x6e\xaf\xc3\x0a\xe5\xa9\xc5\x73\x32\xf1\x4d\x4e\x2b\x70\x8d\x0f\x8f\xe5\x6e\x7f\xc8\x4d\xc5\x2e\x39\xf3\x70\xca\xdb\xc7\xf7\xe3\x5d\xf2\x11\xf0\xaa\xdd\x89\x1f\x1f\xdf\x86\xfa\x7a\xf6\x09\xbb\xd1\xf6\xe4\xc7\xce\x41\x02\x57\x27\x70\x92\xee\xf6\xf1\x12\xaf\x60\x36\x7f\x7a\x60\x36\x0d\x17\x74\x98\xf4\x7c\x2f\x3c\x1f\xf4\xbd\xf0\x7c\x8e\xb6\x5b\xff\x15\x57\xde\xd7\xdf\x1b\xc8\xf9\x9b\xd6\x86\xe1\xea\xe1\xa5\x79\x44\x06\x13\x10\xe2\xc6\x75\x60\x47\x8e\xc2\x9f\x2e\x47\xe9\xe8\x89\xd4\x56\xea\x8a\x3b\x5c\x63\x57\xb6\x53\x6b\x59\x9d\x3e\x84\x56\xf8\x69\xa4\x2f\xac\x23\x7d\xa9\x01\x3d\xe6\x84\xce\x40\x18\x3b\x9f\xe3\xae\x24\x26\xc7\xd5\x63\x62\x98\xce\xbe\xfd\x5b\xe8\xc5\x5a\x5d\x21\x50\xff\x0a\xc1\x72\xdb\x8f\x6d\xd7\x55\xde\xac\xf6\x6d\x54\x5d\x1b\x82\x9b\x20\x7a\x3d\xfa\xa9\x73\x16\x80\x02\xf9\xf9\xff\xde\xe3\xfc\x93\x37\x2d\x7f\xf9\xfb\xa7\xe5\xcb\xe9\x5f\x3e\xfb\xda\x17\x4f\x9d\x9a\x9f\x61\x6a\x40\xe5\xdc\xce\x8e\xed\xd7\x5f\x95\xa5\x99\x24\x6e\x87\x2f\x9d\xb5\x2e\xea\x2e\x40\xd4\x7f\x74\x5c\x85\xf1\x23\xa9\x09\x38\xac\xfa\x6e\x94\xb4\x2d\xe1\x1e\x08\x57\x3f\x26\x21\x11\x28\x9c\x4e\x0a\x84\x00\x56\x62\xd6\x1d\x48\xdf\x76\x3f\x3f\x0c\x64\xfe\xf4\xe0\x1a\xe3\xea\xef\x5b\xe5\x09\xae\x1e\x5b\xe7\x07\x61\x43\xe8\x42\x72\x9f\x94\xb6\xea\x49\x69\xab\x7d\x52\xda\xca\x88\x77\xd6\xf9\xe6\x0d\x27\xec\x71\x58\xb3\x5f\xc6\xe3\xd1\x6f\xd3\x84\x91\x8b\xc4\xab\x19\x41\x5c\x75\x20\xe1\x7a\x62\xc1\x02\x0b\xcc\x34\x49\x77\x78\x6c\x84\x62\x0e\x68\x30\x0c\xf1\xc5\x8c\x8c\xea\x41\x11\x52\x1f\x80\xfc\xae\x13\xa0\xae\x87\xfa\x86\xa4\x14\x0f\x1f\x9a\x75\xbe\x19\xd1\x9b\x0d\x38\x08\xcc\x03\xb1\x44\x3e\x6a\xe8\xa2\xe2\x85\x95\x4a\x44\x48\xb2\x1e\xb2\x92\x3f\x29\x88\x82\xf9\xe3\xf8\xd5\x36\xf2\x08\x56\xf5\xf5\x17\xff\xdc\xc5\xaa\x86\x8c\x0a\x70\xef\x7f\xf4\x72\xa9\x90\x86\x32\x93\x5c\xba\xff\x2d\xd1\xcd\xbf\xef\x3b\x02\xdf\xb8\xf7\x07\xef\x21\x9e\xbc\xf7\x7f\xab\x04\x3e\x70\x64\xae\x76\x46\x4f\x2c\xaf\x75\xda\x06\x43\x4b\x1e\x12\xf2\xbf\x77\xe8\x89\x82\xfb\xdf\x72\x32\x7a\x7b\x16\xff\x37\x1c\x96\xc1\xd3\xc2\xb7\xdb\x5e\xeb\xff\x1b\xa9\x23\xf3\x27\xef\xc8\x50\x1a\x9e\x99\x6f\x3f\x21\x6a\x7e\xed\x21\x79\xc2\x11\xf1\x77\x2c\xef\xf2\x9c\xda\xf9\x5e\x8f\x41\x19\x94\xa0\xf9\x1d\x78\xf8\x00\x1d\x78\x16\xf1\xff\xde\x3b\x9e\x3b\x75\x24\x04\x25\x13\xcc\x69\x4f\x3b\xa7\x56\x67\xeb\x7e\x41\x67\x82\xce\x09\xc5\xf0\x30\x3e\x9e\x13\x81\x9f\x13\x42\x12\x41\xc7\xe4\x39\x8a\xe3\x4b\x9a\xa8\x9a\x18\x25\x51\xcb\x0b\xba\x84\x7b\x4b\x3b\x95\xd7\x8c\x17\xd5\xf5\x54\xfd\x18\xb4\x57\x51\xc2\xa8\xf2\xc4\x48\x49\x45\xd3\x0f\xad\x00\x1f\x19\x9f\x2e\x1a\x5a\x5f\xd1\x7a\xbb\xad\x68\xfa\x33\xbd\xf8\x13\x13\xdd\x4f\xb8\x09\xda\xb1\x6c\x6e\x43\xcb\x65\x1c\x0f\xf5\x40\x47\x48\x8b\xe3\x68\xa6\x65\x87\x3a\x65\x1e\x11\x42\xee\x77\x36\xfa\x9f\x42\x67\xfa\x23\xc2\xed\xf0\x80\x7e\x62\x5c\xfc\xeb\xab\x32\x5f\x6f\x68\x01\x4b\x35\xdc\x2a\x5b\x6f\xaa\x5a\x9c\x82\xcf\xc2\x66\x38\xcb\x07\xe5\x81\xf0\xd5\x2a\xe7\x9c\x7a\x0e\xef\x4a\x9a\xf4\x3d\x92\xd8\x14\x9f\xf0\xa0\xf8\x18\x29\x49\xfa\x82\x7a\x68\xef\x98\xfe\xde\xdb\xef\x4b\xeb\xb9\xcd\xd3\x84\x13\xf4\x05\x2c\x60\x32\x91\x2b\x4b\xe7\x28\x91\x3f\xe3\xe3\x39\x52\xef\x86\x2a\xd6\xa9\x66\x7f\xc8\xed\xa2\x14\xc6\x28\xde\x50\x5c\x50\xbc\xa6\xf8\x96\xe2\x2b\x8a\x2f\xed\x26\x6a\xe8\x34\xb9\xa5\x44\x4f\x64\xca\xe9\x8d\x38\x63\x8b\xaf\xf8\xca\xa5\x5d\xd1\xba\x61\x15\x6f\x52\x5e\x15\x34\x5d\x83\x3c\xf9\xd9\x7f\x26\xd3\x2c\xf9\xa5\x18\xa3\x5f\x52\x34\x0d\x9e\x7f\xf9\x97\xad\x7c\xfe\xdd\x33\x84\xc3\x53\x72\x45\x51\x1c\x47\x13\xb9\x90\x57\x74\x76\x3c\x8f\xe3\xe8\xd8\xbc\x3d\x9f\xc7\xb1\xec\x47\x43\xc5\xbb\xb5\x36\xde\x47\xb2\x9b\xfd\x39\xbd\xa5\xc9\x52\xb2\xd4\x59\x4e\xa7\xc9\x46\x1e\x89\x42\xcd\x67\x0e\x1f\xf0\x9a\x92\xa2\x5a\xc0\x79\xd6\x2e\x1c\xcf\xe8\x8d\xf8\x58\x15\x34\x89\x22\x84\x0b\x9a\x56\x6a\x7b\x26\x6b\x8a\xef\x17\xab\xbc\xce\x17\x82\xd6\xaf\x73\x91\x67\x87\x93\xdd\x9e\x56\xd7\x54\xc5\x5c\xdc\x50\x32\x1e\x6f\xe8\x3f\x3f\xdf\xa1\xac\xa5\xd3\x24\x59\xa9\xc6\xc3\xfd\x81\x52\xb9\xa1\x8e\xd3\x8a\x1b\x1f\x96\x4b\x3a\x5c\xef\x8a\x42\xd6\xe7\x12\x89\x09\x5d\x49\x32\x91\xc3\xb3\x6b\x44\x08\x61\x74\x30\x56\x1f\x4f\x6b\xfa\xb7\x96\xd5\xde\xfd\xc1\xa0\x9e\xde\x1b\xf3\x35\xf2\xa4\xcd\x11\x02\xff\x18\x50\x3e\x89\xae\x68\x2d\x6e\x22\x23\xe5\x38\x24\x24\xe1\x70\xaf\xdf\xf2\x4f\xfc\x7d\x55\x6d\xb6\x5b\xfd\xa2\xad\xc2\x90\xdf\x24\x57\x4b\x92\xc9\xc3\xd0\xd3\xf9\x83\xc4\x5d\x82\xe0\xab\xd1\x7c\x20\x35\xc5\x5a\x60\x3f\xe4\xdc\xcc\x3b\x37\x14\x4f\x90\xf2\xda\x7e\x41\xc9\x9f\xf1\xf9\x9e\x38\x17\x46\xa3\x02\xe8\x07\x77\x9e\xae\xe5\x79\xca\xd3\x4a\x5b\x90\x27\xb9\xaf\x87\xe0\x54\xb9\x74\xae\xe5\x72\x28\x1b\x5b\x26\xfb\x81\xe5\x80\x10\x4f\x7d\x48\xcf\xcf\x3f\x7f\xf9\xf4\xe1\xdd\xe9\xc9\xf9\xbb\x8f\xa7\x67\x5f\x7e\xfa\x70\xf2\xf1\xec\xe5\xd9\xbb\x4f\x1f\xcf\xcf\x91\x31\x4d\xb8\xa1\x23\xc6\x47\x8c\x3c\x5e\x04\x37\x89\xa7\x70\x1b\x61\xb0\xeb\x44\xac\x6b\xd3\x70\x23\xcf\xd8\x35\x4d\x6e\x28\x66\xb3\x1b\x3a\x47\x07\x4e\xdf\xff\x3e\x6f\xf2\x4d\x56\x53\xbc\xc8\x1b\x91\x5d\x50\x6c\xe2\xa7\x7c\xc4\x9e\x2a\x7b\x56\xe1\xbc\x2c\xb3\x37\xd8\x89\x54\xb2\xb7\xb8\xce\x17\x34\xfb\x11\x4b\x1e\x2d\xfb\x1b\xf6\x58\xb5\xec\x2f\x58\x2b\xd0\x67\x7f\xc5\xa0\x52\x9f\xfd\x11\x5b\x35\xfb\xec\x1d\xb6\xea\xf7\x59\x83\x2b\x9e\x5d\x53\xd0\xfd\x3e\xa1\xd8\x70\x57\x7f\x36\x8c\xd5\x7f\xe0\x75\xbe\xc9\x7e\x87\x61\x21\xb3\x73\x8a\x15\xe6\xcc\x28\xc4\x2f\x04\x75\xfa\x9a\x62\xad\x5f\x7f\x21\x9f\x8c\x76\xca\x47\x1c\x6a\xe3\x57\x58\xe9\xe8\xbf\xc1\x81\xe2\xfe\x5b\xac\xd5\xf9\x7f\xc4\x5a\xbd\xff\x6f\x38\xd4\xfa\xff\x0b\x76\xf6\x00\x7f\xc5\xc6\x46\xe0\x8f\xd8\xb7\x1c\x78\x87\x7d\x9b\x02\x49\x5d\x56\x9c\x5c\x53\xad\xb4\x7f\x42\x5d\xd0\x27\xf2\x67\x6c\x8d\x13\xfe\x03\x2b\x6b\x85\xdf\x61\x63\xbd\x70\x2e\x73\x1a\x8b\x06\xc9\x85\x8a\x44\x99\x5a\xa8\x3b\x42\xef\x78\xa9\xad\x97\x44\xbf\x82\x35\x51\x84\x67\x73\xff\x6b\x60\x72\xa1\x2f\x6a\xf4\x92\x67\x12\xd1\xa6\xbf\x82\x5d\x08\x3e\x3f\xa7\xcd\x07\xb0\xdb\x90\x60\x6e\x07\x8d\x0c\x21\xe7\x37\x79\x23\x7e\xac\x2a\xff\x7a\x14\x0e\x5a\x5f\x58\xad\x2c\x44\x06\x4e\x80\x32\x0f\x99\xaa\x9f\x54\xe7\x23\x22\x19\x54\x5a\x55\x1d\x88\x63\xf5\x9b\xe6\xeb\x62\xaa\x07\x3c\x9b\x4b\x46\x7f\x5f\xbb\x53\xfd\x9b\xbe\x2a\xd9\xe6\xa2\xca\xeb\xe2\xdf\x4f\xa1\x0d\xda\x4d\xd1\x57\x9e\x7d\xe0\xdb\xbf\x49\xbc\xf7\x60\x07\x4f\x6a\x20\xf6\xc4\xac\x9e\x5b\xe7\xdf\xb3\x7a\x6e\x06\xa4\x9d\xb3\xc8\x24\x72\xcf\xb2\x1a\x97\xd9\xe1\x31\xd6\x1f\xb3\xfb\x9d\x15\x11\xb8\xe0\x6f\xcc\x94\xc5\x0c\xbb\x67\x8e\x30\x4b\x4b\x72\x38\x71\x69\x3b\x7b\x51\xb1\x26\x14\xf3\x74\x41\x04\xe6\x69\xd1\x0b\x91\xc7\x53\x70\x3a\x8e\xb6\x5b\x2d\x5a\x53\x53\x67\xe1\x81\xcc\x76\xaf\x59\xe8\x0b\x58\x79\x08\xba\x54\x2b\x9f\xde\x21\xec\x1d\x02\x72\xa7\xb7\xeb\x8b\xaa\x8c\x63\xf5\x6b\xa9\xaf\xb3\xfc\x32\x8e\xf7\xb5\xd8\xcf\x8b\xef\x95\x96\x41\xa4\xf6\x5f\xb4\x43\x78\x5f\xe1\xc8\x6d\xd3\xc8\x14\x93\x58\x59\x76\xb7\x2b\x9c\x64\xcb\xe4\x38\x56\x2c\x95\x1c\x00\xc2\xff\x1a\x0b\xa7\x5c\xcf\x96\xc9\xf7\xf2\xeb\xa0\x5a\x3e\x68\x1b\xd9\x96\x42\x8d\xfc\xba\xe3\x00\x5a\x19\xa3\xb2\x65\xc2\xd3\x3a\xa9\xf7\x75\xbd\xc6\x91\x3e\x75\x51\x77\xc6\xd5\x28\xe4\x11\x7f\x0e\x1d\x52\xde\xc5\x3d\xc1\x18\x0a\x4c\xd5\x28\xe2\x69\x01\x7a\xa3\x03\x37\x5d\x10\xe4\x58\x85\x41\xd5\xa1\x33\xfc\xbb\x05\x9e\xf2\xa1\xc8\x3e\xe1\x68\xa7\xfd\x83\x60\x91\xc4\x6e\x20\x1e\x17\xf5\xae\xcd\x8a\x44\xe0\x28\x8f\x20\xe0\xa4\x6c\xae\x1a\xc6\xc6\x7a\x8a\x02\x4f\xa6\x1e\x9a\x32\x91\x10\xb5\x44\x87\x44\x11\xe6\x09\x4f\x1b\x32\x41\xbb\x64\xd6\xd5\xaf\x09\x00\x9c\x5a\xa0\x01\x30\x62\x76\x6a\xd4\xc0\x43\xf7\x43\xca\x84\xd2\x4c\x98\x0e\x90\x1b\x66\x1d\x76\x83\x96\x59\x83\xa4\x97\x69\xae\x7b\x5b\x67\xd3\x0f\xcd\xb3\x9b\x85\xa9\xe9\x5b\x66\x1b\xc4\x6c\xbf\x6e\xa7\xb3\x60\x54\xd7\xae\xc2\xbf\xa2\x32\x5a\x47\x33\x3e\x3f\xa8\x53\xb7\xdf\x88\xff\xb2\xdd\x82\x4b\x40\x83\xad\xe0\xfb\xe1\x04\x47\x2a\x22\x27\xe3\x23\x65\xa9\x78\x5d\x33\xa1\xbf\xed\x3f\x98\x75\xfa\x95\xde\xc2\xe5\x7e\x17\x78\x86\x77\xb5\x3c\x8e\x69\xe2\x2d\xbd\x84\x6e\x35\xa4\x81\x02\x97\xa4\x04\x71\x45\xda\x84\x27\xc7\x08\xe1\x1c\x9e\x7e\x8f\x10\x6e\xe0\xe9\x7b\xe4\x31\x43\x6d\xb8\x0a\xc1\x1e\xa6\x99\x45\x72\x74\xa7\x2f\xe5\x07\x65\x45\x42\x09\x62\x93\x1e\xe8\x38\x4c\xa8\xaf\x83\x23\xf6\xf0\xf0\xaf\x94\xbe\x8a\xdc\xb1\xa3\x7c\xb4\x28\x41\x13\xa8\x09\xec\xe1\x76\xc8\x86\x24\x56\xab\xd2\x6f\x8b\x7a\x95\x7f\x91\x44\x05\xe5\x0b\xd3\x02\x68\xca\xac\xf2\x86\x7f\x27\x46\x17\x94\xf2\x11\x53\x56\xe9\xac\xa1\xc5\xe8\x68\xd4\xb4\x1b\x5a\x27\x28\xc8\xa1\x84\x08\x56\x6c\x70\x28\x06\xc4\xed\x22\x34\x67\xb0\xd2\x12\x9a\x09\x8d\x10\x13\xe1\xae\xc1\x2d\x02\xb9\xa4\xe2\xb3\x59\x3b\xb0\xb5\x43\x4e\x72\xec\x7b\xa8\xd7\x34\xce\x27\xf0\xf2\xdf\x24\x72\x95\xd3\x92\x35\x82\xf2\x57\x25\x5b\x7c\x85\xeb\x9d\xde\x56\x79\xc8\x10\xd1\xc9\xcb\x86\x17\x02\x5c\xad\x4b\xe4\x5f\xd3\x46\xf2\xa3\x4a\xa2\x42\x99\x58\x51\xc9\x1b\xc0\xcd\xc3\xa8\xaa\xbd\x95\xc1\xe0\x9e\x2e\x1a\x5b\x53\xc7\x03\xba\xd7\xcb\x3f\xc4\xc9\x73\x9b\xf6\xde\x3b\xd5\x99\x46\x43\x14\xfb\x60\xfd\x18\x9b\x63\x23\x41\xbc\x7f\xc4\x14\x79\x85\x25\x62\xd2\x6d\x34\xc1\x9c\x4e\x07\x53\x95\xa9\x09\xf5\x14\x13\x84\x24\x5c\x70\x6e\x40\x33\xc2\x2c\x11\x26\x98\x63\x38\xfb\x46\x8b\xaf\xcb\x05\xfe\xbd\xde\xdf\x73\xa8\x6d\x08\xda\x52\xfd\x6d\x6a\x1e\x94\xf4\x4f\x77\xf5\xa5\x9a\x7e\xa5\xd3\xa4\x48\xf2\xc1\x3a\xd4\xb7\xa9\x79\x08\xea\x50\xa4\xbc\xae\x83\xde\xec\xab\x81\xde\x40\x79\x7a\xd3\x29\x4d\x6f\x84\x09\xf2\xc0\x45\xce\x38\xad\x89\x23\x04\x48\xad\xb4\x2c\xd4\x07\x34\xf5\x5e\x32\x2b\x3b\xb8\xa8\x8a\x5b\x1b\xb9\xd2\xdb\xd9\xbd\xc9\x0e\xd5\xd0\xd4\xed\x07\x64\xa7\x10\x05\xc2\xf6\x09\x41\x1c\x63\x55\xc5\x10\x12\x4a\x2b\x7b\x74\x76\xc8\xb6\x5c\x3d\xd6\xaa\x73\x35\xaf\xa6\x4c\x72\xea\xda\xa9\x8a\x4a\x50\x5d\x5a\x18\x9a\x58\x2d\x8e\x51\xc5\xed\x24\xeb\x88\xc2\xc3\x9f\xe8\xf5\xa8\x32\x83\x49\xee\xfd\x75\xcf\x0d\x99\x82\xfd\x95\x54\xcf\x90\x6a\xd7\x47\x3e\xc9\x14\x37\xe1\xe1\x2a\x59\xab\x5d\x81\xe9\x9a\x09\xa1\x33\x78\x13\x12\xec\xb1\xa1\x69\x31\x2e\xef\x92\x28\xd7\x79\x68\xaf\xb4\x9a\x99\xfd\x93\xba\x48\x22\xa1\xb3\xd0\xd0\x15\xb4\xdd\x1f\xc0\x8c\x9d\xd2\x92\x82\xbd\x88\xe8\x37\x41\x6f\x06\x1b\x70\xdd\x83\x08\x56\x61\xe7\x1a\x51\x57\xb7\x03\xc7\x39\xd8\x55\xa9\xce\x97\x0c\x2f\xd4\x9e\xa5\x7d\xa4\x94\xbe\x47\xd8\xcd\x0d\x88\x61\xcd\x69\xbb\xd9\x80\x7f\x9a\x7f\x34\x7c\x99\x45\x8b\x6a\x73\x1b\xe1\x68\xd1\x8a\x68\x8e\x05\x31\x24\xb1\xa7\xb0\x3e\xa3\xf3\x8c\x62\x4e\x0e\x0f\xc3\x19\x7f\x55\xad\xd7\x39\x2f\x6c\xdf\xdc\x3d\xec\xb2\xaa\x4f\xf2\xc5\x2a\x90\xd5\x73\xc2\xe3\xf8\xb1\x2a\x94\x42\x3e\x87\x58\xaf\x22\x50\x7f\x5c\xf8\xfa\x38\x51\x91\x8b\xfc\xc8\x4e\xdb\x51\x34\x06\x26\x43\x48\xe2\xf6\xa5\x10\x35\xbb\x68\x25\xb7\xe0\x02\x45\x49\x5c\xea\x7f\xd8\x39\x5e\xb8\xdc\x3d\xec\x3a\xc1\x58\x42\xfd\x7f\x87\xd0\xad\xfe\xff\x48\xe8\xe6\x84\x27\xcf\x25\x6d\x9b\xd4\x24\x47\x71\x5c\xfb\x24\x6c\xed\x48\xd8\x7a\xa7\xed\xfe\x87\xe7\x48\xfc\x9f\xa1\x5f\xcd\xcd\x62\x87\xb4\x33\x51\xba\x25\x59\xaa\xe0\x1d\x74\xd0\x4c\x4f\xe5\x42\x4c\xff\x1f\xa5\x4a\x0c\xe5\xd1\x45\xf3\xd4\x47\x26\xf2\x93\xc6\x23\x84\x9a\xa7\x80\x30\x31\xc4\x87\x47\x69\x28\x7a\x22\x88\xd4\xe2\x82\xb4\x68\x8f\xd0\x30\x0f\xb4\x38\x03\xca\x24\xb2\x10\x3c\x98\xa3\x7d\x70\x1c\x88\x16\xaf\x9a\x37\xf9\x57\x9a\x20\x1f\x67\x6a\x0f\xa9\xea\xb3\xc2\x55\x89\x43\x13\xae\xd4\xde\x29\x56\xfc\x08\x89\x6a\x21\x01\x84\x05\x7f\xe6\xe1\x44\x39\x6c\x0e\x01\x54\x54\xb0\x3a\xd2\x0a\x51\xca\x91\xa2\xea\x98\x89\xd1\xfe\x95\x6a\x27\x6d\xc6\x39\xc8\xc0\x75\x06\x0d\x4a\xee\x7a\x45\x49\xb8\x58\x69\x5e\x14\x20\xb8\x7d\xaf\x51\x5b\x62\x08\xa4\x7d\x6d\xa2\xed\xd6\xf8\x14\x95\x5f\xe5\x40\xba\xd7\x3d\x7a\x70\x0a\xbf\xe6\x35\xcd\x23\x14\x16\x48\x1b\x71\x5b\xd2\x74\x59\x71\x71\xca\xee\x28\x89\x8e\x9f\x6f\x44\x34\x98\xe7\xa2\xaa\x0b\x49\x3a\x4e\x86\x3f\x6f\xf2\xa2\x60\xfc\x72\xef\xf7\x75\x5e\x5f\x32\xbe\xbf\x78\xa5\x7d\xef\x44\xf9\x45\x53\x95\xad\xa0\x83\xf9\x66\x62\x1a\xd5\xec\x72\x25\xa2\x2c\x2a\xe9\x52\x44\x73\x12\x1d\xfd\xdb\xbf\xfd\xdb\xbf\x6d\x6e\x22\xed\x43\x42\x5f\x20\x6c\xf2\x4b\xfa\xd7\x4f\xcb\x65\x23\xc9\xc0\xbd\xab\xde\x2c\xea\xaa\x2c\xcf\xaa\xcd\xc1\x50\xa7\x44\xb5\x21\x7c\x1c\x6d\x6e\x7a\x7d\x09\x36\x4b\x4d\xf3\xa2\xe2\xa5\xc4\xe2\xbd\xf9\x85\x4d\x49\xec\x5e\xc7\xdd\x45\xdf\x6c\x28\x2f\x20\x38\x64\x12\x14\x44\x03\x87\x2b\xa4\xa0\x87\xb2\x4b\x5a\x42\x66\xf5\x4e\x88\xdb\x84\xfb\xce\xa0\xb7\xb5\x2c\xbd\x64\x3b\xa8\x8a\x7f\xe3\xc6\xec\xef\x75\x67\xb7\x38\x74\x78\x3c\x4a\xdb\x0c\x68\x5f\x4f\xf6\x4f\x95\x3d\x03\x9a\x7a\x0b\x20\xc4\x1e\x22\xd7\xf8\xd0\x7f\x64\x96\x15\x24\xda\x3f\xc7\x26\xe9\xff\x62\xef\xed\xb6\xdc\xc6\x91\xfc\xc1\x7b\x3d\x45\x8a\x3b\xcd\x21\x4a\x90\x2c\xd9\x5d\x3d\x3d\xca\x44\xea\xf8\xb3\xca\xd5\xfe\x6a\xdb\xf5\xd5\xb2\xc6\xc3\x94\xa0\x14\xdb\x14\xa1\x06\xa1\x4c\x67\x25\xb5\x67\xef\xf6\x62\xdf\x60\xaf\xf6\x59\xf6\x51\xfe\x4f\xb2\x07\x11\x00\x08\x90\x54\xda\xd5\x33\x7b\xce\x9e\xb3\x7f\x5f\x38\x45\x12\xdf\x1f\x81\x88\x40\xc4\x2f\x8e\xd2\x20\x7b\x0d\x2d\x6f\x6e\xbd\x2b\x59\xfe\x99\x2f\x0d\x03\x96\x78\xe4\xdc\xbb\x37\xe4\xac\x3f\x39\xc0\x27\x04\x88\x43\x4b\x96\xc4\xe3\x93\xfd\xf7\x5d\x2c\xb6\x4f\xf6\xe1\x6f\xa2\x59\x92\x3d\x00\x0d\x46\x53\xeb\xff\xd3\x21\xc1\x78\x82\x8a\x3f\x3c\xb5\x50\xe2\x1d\x09\x74\x99\xf3\x54\x3a\x62\x6f\xe4\x98\xe0\x1d\xea\x69\xd1\xf5\xc0\x1b\xb8\x20\xcd\xd1\x43\x02\x6b\x31\x27\x81\x79\x1a\xad\xc5\x72\x5f\x26\x84\x9a\xfd\x0e\xb0\xca\xee\x44\x36\xab\xe5\x61\x9e\xbf\x4d\x8b\x4b\x5e\x26\x5f\x2d\x59\x04\x44\xdb\xe6\xb1\xd2\x53\xc9\xd5\x7f\xdb\x19\x8e\x8c\xbf\x0b\xbb\xfc\xd1\x9e\xe5\x14\x3f\x38\x6b\xa9\xd4\x48\x32\x20\x21\x34\xde\xb6\x02\x79\xfe\xeb\x73\x8c\x38\x7b\x62\x9b\x7c\x82\x68\x69\xe0\x9b\x66\x14\x44\x58\xfe\x89\xd0\xbf\xf6\x2a\xfa\x57\x72\x80\x8b\x90\xf6\x09\xe6\xd7\xe4\x86\xc2\xca\x82\xc1\x50\xa0\x29\x90\xeb\xb4\xb1\x0c\x0a\x2c\x5f\x59\xe2\xae\xf0\xf9\xcc\xbb\x5f\x99\x66\x09\x27\xa4\xaa\x26\x3a\x1f\xd8\x55\x68\x8e\xed\x8e\x8e\x99\x06\xf8\x1d\x4b\x4f\xf0\x9b\xa1\xea\xff\x0a\x62\x2a\x76\xd3\x1a\xa3\xd9\x51\xe4\xa1\x88\x12\xad\xb2\x52\xb3\xc1\xab\xa8\x1d\x14\xb5\x5d\x65\x6a\xf3\x8d\x7c\x97\xbf\x9a\xfe\x03\x13\xca\xd3\xd5\x89\x58\x9f\xd4\x25\xd7\xd9\x6c\xc3\xf6\xaa\xd5\xae\xa4\xd9\x30\x57\x28\xa9\xaa\x3b\x1a\xfd\xfb\x5a\xfd\xab\xd8\x9f\x2c\xd3\xe2\xc3\xbf\xaa\x93\xe5\x5e\x9d\x40\x50\xe5\xb5\x14\xdb\x13\x8e\x23\x57\xa2\x31\x96\xd7\x23\xbd\x4a\x3a\x7a\x52\xfe\xab\x35\x17\xb7\xbc\xe3\xe1\xee\x55\x84\xc9\x40\xae\x04\xb7\xba\x5a\xfe\xdb\x1f\x1a\x4e\x58\xf5\xa7\x96\x32\x02\x86\xef\xdd\xd3\x17\x4f\x1f\xbf\x8f\x98\x5d\x2f\x10\x5c\x9c\x3b\x7a\xa0\x99\x56\x58\x1b\x10\x02\xf7\x44\xe7\x78\xfe\xea\xcd\x8f\x8d\x0c\x55\x15\xbd\x7f\xfa\xcb\xfb\x87\x6f\x9f\x3e\x6c\x94\x64\x44\xdc\xe3\xf3\xd1\x2b\xf4\x8c\xdc\xc5\x02\x70\x43\x32\x13\xfc\x59\x13\x26\x20\x46\xc9\x98\x9a\x16\x5a\x9c\x15\x0a\x25\x1a\x92\xd5\x55\x65\xdd\x29\x0c\xa2\xdc\x6c\x1c\x00\x6e\x16\x8a\xaf\x50\xa8\x8b\x88\x5e\xe8\x66\x40\x8c\x22\xbe\x93\x4c\xd2\xac\xc9\x31\x62\x0b\x49\x2f\x33\x5d\x78\x25\x56\xfc\x31\x96\x8e\x7e\x0a\x6d\xca\x4a\x81\x77\xc5\x8c\x99\x6e\xaa\x74\x17\x9e\xb5\x68\xa4\x0e\xcd\x69\x0e\x4c\x58\x0f\x9e\xcd\x26\xbb\x6d\x00\xf6\x85\x9e\xe5\x23\x6e\x0d\x26\x39\x80\x48\x1a\xcb\x55\x39\xe7\x8b\xaa\x82\x3f\x6c\xbe\x20\xc4\x80\xc3\xad\x8b\xa9\xa2\x4b\xf5\x79\x5a\x98\xb0\x36\x07\x2a\x8a\x25\xbf\xa3\xfc\x5a\xe5\x91\xe9\x45\x3c\x12\xeb\x35\x38\xb1\x51\x8b\xe1\x51\x74\x00\x78\x64\xa3\x8f\xcc\x30\x77\x50\x66\x86\x60\x01\xdb\x2c\x24\x92\x56\xb8\x57\x6c\xbe\x40\x74\xeb\x76\xd0\x0d\x5a\xb0\x24\xe9\xe8\x28\x81\x0e\xce\x17\xc4\x21\x7e\x23\x00\x75\xd1\x04\x9e\x2e\xe6\x72\x31\x5a\x5b\x33\x1f\x78\x5a\xaa\xcf\x9e\xe3\x94\x19\x86\x23\xb8\x83\x1d\x55\x53\x89\xc8\x83\x19\x9b\x03\x40\xa0\x3e\x8a\xdd\x45\x2d\xe2\x76\xca\x26\x9a\xb9\x9c\x0b\xdd\x0a\x74\x3a\x37\x0f\xa3\x8f\xf8\x68\xd0\x0f\xa5\x8f\x6f\x6e\xb1\x92\x66\x00\x5a\x98\x4d\x1d\x02\x29\x47\x87\x15\x08\x86\x64\x09\x43\xd1\xd6\x19\xe1\x04\x16\xc9\xb7\x80\xc2\x98\xfc\xc9\x27\x31\xcd\xb4\x0e\xdb\x35\x8e\xfb\xed\x33\x34\x7a\x99\x95\x65\x56\x5c\x9e\x18\x8b\xb0\xda\x28\xb6\x8c\xd0\x27\x4f\x8e\x50\x49\x97\x1c\xd3\x34\xbc\x0b\x8d\x69\x3d\xe8\x48\xdc\x17\xae\x9c\x75\x91\x14\x47\xca\x78\xbf\xc9\x64\x67\x11\xcf\x9c\xb6\x02\x83\xb5\x6b\xca\xe5\x39\x06\x36\x3b\xeb\xc4\xd1\x96\x80\xa9\x3f\xd3\x5b\xc3\x0f\xf9\x94\x9b\x77\xb2\xfd\x88\xf6\x68\x31\xc7\xea\xba\x75\x82\x2f\xd7\xdf\x8c\xd8\x6b\x54\x94\xf6\xfe\xdb\xdf\x25\x47\x9a\x7a\xe8\x6e\xec\xef\x2a\xf8\x68\xbf\x5a\x3d\x33\x33\xfc\xc5\x7e\x65\x49\x70\x4d\x62\xcc\x95\x5d\x59\xdd\x70\x02\x21\x46\x42\x73\x75\xd0\x93\xef\xdf\xbf\x7c\x61\x98\x19\x7c\x78\x2c\x72\x43\xb4\xa9\x3e\x92\x5f\x99\x61\x8f\x48\x8b\xac\x2a\x98\x93\x2e\x4b\xc2\x9a\x3d\x8b\xe3\x40\x5f\xe6\xd5\x16\xc7\x13\xe6\xf3\x61\x07\xaa\xdc\x1c\xb7\x8e\x63\xe7\xc4\xe6\xb9\x59\x06\x36\xc9\x35\xd8\xae\x5f\x77\xe2\x0c\x9a\x6d\x37\xc0\xa2\xb9\xa8\x2a\xf7\x21\xec\x32\x7e\x26\x71\x1c\x21\x89\x88\x32\xd0\xd0\x26\x08\x0a\x67\xbd\x6d\x94\xd9\x08\xf3\xf1\x82\x10\xdd\x6e\x9c\xc1\x8e\x91\x68\xab\xd8\xab\x2a\x18\x10\xec\x83\x2e\x63\x5d\x74\xe5\xb7\xcd\xb4\x3b\x11\x1a\xf8\xc5\xb1\x38\x1c\x27\x5a\xff\x46\xfc\x53\x07\xbd\x13\xc0\xad\x49\x27\x48\x9b\x7e\x0b\x59\xdb\x6a\xab\x20\xb7\x45\xe3\xf2\x8b\xc9\xa4\x70\x0a\x3d\x42\x9b\x9f\x35\x15\x36\x5b\x44\x6f\xeb\x6e\xbf\x90\xde\x71\xe2\x51\xd0\x94\x8a\xdf\x43\x3e\x30\xc3\xe1\x70\x38\x46\x97\xa9\xac\x1d\xb9\xba\xef\x59\x1b\x6d\x98\x65\xf6\x8c\xdb\xe7\xb9\xd7\xea\x6e\x3c\xc8\xcc\x33\x15\xb2\x5b\x96\x1c\x29\x20\x69\x2f\x11\xb0\xad\xea\xbe\xf1\x7a\x08\xd3\x6b\x6d\xbc\x83\x20\xcd\x5d\x54\xc8\x11\x8e\xba\xd7\x07\xd2\xde\xc8\xb8\xc3\xfe\xbd\x77\xc4\xe6\xd6\x6d\xd8\xbe\xd5\x65\xf9\x15\xab\xe5\x86\x97\x76\x7d\xb5\x12\xf4\xa4\x4d\xc2\xdc\x2f\xdb\x99\xaa\x92\xa3\xad\xf8\xed\x65\xc7\xdb\xb2\xe3\xa5\xe8\x78\x77\xcd\x2f\x3e\x65\xaa\xf1\xe1\xc8\xb4\x23\x4f\x74\x0a\x36\x2d\x96\xe8\xf4\x19\x2b\x4e\x1b\xc6\x11\xde\x32\x30\x0d\xd6\x39\xcc\x4f\x7d\x0e\x3b\xbb\x35\xce\xf8\x68\x97\x4a\x5e\x00\xef\x7a\xd0\x22\xc7\x81\x34\x8e\x81\x27\xfc\x62\x7f\xc9\xcc\x5f\x70\xe8\x30\xbf\x47\x92\x5f\xea\xd5\x25\x9f\xf0\x9d\xe4\x4b\x70\xe1\x38\x12\x32\x3a\x4c\xff\x73\x2a\x3b\x13\x1e\x12\xc3\x78\x3f\xdd\x5e\x70\x19\xd8\xb2\x82\xf6\xe0\x34\xe9\x76\xd7\x80\xe4\x33\xf8\x7f\xea\x2c\xd3\x8d\x4d\xac\xd3\x4e\x8d\x7e\xe6\xe9\xa7\x97\xe9\xae\xaa\x12\x6e\x7f\x33\xf3\xf7\x8b\x46\xad\xd8\x80\x9d\xe4\x6b\x2e\x5f\xa5\x36\x6a\xea\xc7\x4b\x2f\xc6\x24\x22\x16\x81\x71\x25\xfa\xb2\xaa\x38\x4e\x94\xb3\xa1\xaf\x17\x94\x8d\xce\x57\x1b\xce\x78\x26\x6e\x4f\x78\x09\xee\x24\x02\x8f\xda\x9e\xd3\x14\x30\xc6\x9c\xd7\xe4\x31\x93\x9b\x5e\xe8\x4c\x2b\x66\x98\x75\xca\x13\x81\x20\x17\x7a\x95\xb8\xbb\xad\xcc\x01\x9c\x18\x11\x10\xe9\x67\xa6\xcb\x6d\x1d\x45\xe9\x2c\xc5\xed\x29\x89\x0b\x37\xf4\x11\xa5\xa0\xc7\x79\x5a\x96\xff\x3f\xbc\xa5\xab\x4f\xa1\x8f\x47\x3d\x09\xff\x3f\x6b\xc9\x55\xb7\xdd\x7a\x30\xfe\x4f\x23\xab\xdf\x69\x64\x55\x0f\x21\xdc\x8e\x3e\x4e\xf3\xfc\xf1\x86\x2f\x3f\xfd\xbf\x71\xd3\x1a\x18\x27\x58\xbb\xfe\x35\x57\xcb\x8d\x1f\x73\x61\x11\x58\xfe\xb6\x0c\x03\x0a\xc6\x91\xb2\x8e\xc0\xc1\xd0\x78\x41\x50\xc9\xe6\xd1\x33\x21\xb7\x4f\x52\x95\x46\x34\x7a\x96\xe5\xfc\x2d\x4f\x57\x5c\x46\x34\x7a\x94\x8b\x8b\x88\x46\x3f\xbe\x7d\xf1\x8e\xa7\x72\xb9\x31\x31\x5d\x68\x84\x57\xf7\x11\x8d\xe0\x1c\x7f\xb4\x5f\xaf\xb9\x8c\xb4\xd0\x2b\x7b\x3e\x95\x04\xb0\x1b\xd8\xba\xcb\x54\x25\x73\xdb\xe4\xe8\x7b\xa8\x40\x17\xf4\x96\xff\x63\xcf\x4b\x05\xbf\xca\x9d\x28\x4a\xae\x0b\xbd\x10\x52\x3d\x16\x85\x92\x9a\xaf\x95\xd1\x82\x10\x9a\xb5\x0d\x35\x0a\x72\xcb\xe7\xc5\xe2\x98\x49\xb9\xde\xd1\xb7\x8d\xc9\x3f\xa2\x77\xd3\xc5\x1c\x42\x35\xad\xc2\xc2\x99\x3a\x1c\x82\x33\xb1\x03\x94\xca\x23\x78\xe4\xb6\xb9\x1a\xec\x15\xf9\x91\x36\x42\x38\x57\x6b\xa1\x53\x3a\xdb\xf5\xdb\xc3\x9d\x4b\xd8\xe9\x52\x7c\x1a\x5c\x5f\xa8\x37\x99\xbf\xf6\x65\x07\xe8\x0e\x4f\x32\xa3\x71\x74\xf5\x5b\x4d\x86\x7b\x61\xc3\x32\xb4\xde\xba\x98\x0c\xe1\xdd\xd9\x57\x54\x9b\xad\x93\x8e\x9a\x49\x7d\x4a\xb4\xea\x3a\xa6\xbc\xc9\xd6\xa0\xb1\xd1\x67\x6d\x10\x71\xbf\xb0\xd1\x1d\x24\xf8\x4e\xda\xbb\x8c\xac\xdc\x69\x16\x08\x9a\xf8\x05\x6b\x3c\x08\x9e\xa3\xf7\x7e\x47\x43\xbd\xf3\xcc\x5f\x89\xdd\x60\x11\xce\x02\xde\xe0\x9c\x81\x8d\x9e\xc5\x82\xf5\xfa\x08\x95\xe9\xfd\x33\xa6\xa2\xd6\x0f\x65\x67\x02\x82\x48\x14\x89\x9c\x67\x4e\xfd\xd3\x77\x66\xf7\x6f\x24\xc4\x69\xe0\xab\x83\x53\x16\x53\x79\xcc\x9e\xf9\xc8\xd2\x34\xd6\xc7\x9c\xdd\x71\x8a\xfd\x57\xcd\x7e\xb9\xbf\xc2\x0a\x2b\xe3\x1d\x77\xe6\x48\x2f\x8c\xfd\x98\xf5\xe4\xb8\x9b\xa0\xdf\x51\x92\x28\xa0\x2c\x57\x12\x08\x2f\x77\x97\xc5\xdd\xde\x72\x47\x23\x28\x7f\x82\xad\xe6\x2c\x6a\xad\xe0\xda\x71\x45\xd6\x10\x80\x81\xa8\xbd\xcb\x2e\x8b\x34\x5f\x44\x5f\xbf\x2a\x71\x30\x50\xef\xae\x47\xd9\x5e\xf6\x9a\x31\x02\x4e\xa8\xcd\xf9\x1b\xed\x2a\x24\x32\x77\x81\xe6\xc9\x03\xf4\xd0\x72\xd8\x47\x30\xb5\xf4\x41\x00\xbe\x38\xc7\x1e\x2b\x4b\x9b\xed\x87\x79\x0f\xaa\x70\xe6\x71\x47\x7d\x16\xfe\x39\x9a\x59\xc2\x48\xd6\x13\xcb\xaf\x4f\xe4\x7f\x89\x66\xe2\x3a\xf9\x9a\x4b\x69\x50\x7f\x5e\x81\xad\x08\xe6\xf2\x6e\xa1\xbb\xe4\x13\x2b\x09\xcf\x9a\x16\x27\xba\x8c\x59\xd2\x72\x3c\x36\x65\xe3\x90\x12\x02\x16\x54\x41\x7d\xb4\x3f\x41\x3c\x91\xee\xac\x38\x6c\x00\xda\xa8\x99\x29\x93\x69\xca\xd9\xad\x7e\x76\x5d\xbd\xd8\x5f\x5c\xe4\xbc\xd4\xbb\x6b\xa9\x79\x94\xdc\x30\x4f\x07\xbc\x45\xc7\x01\x1e\x05\x13\xec\xdf\xa6\xff\xce\x95\x5f\x1f\xe7\x7a\xf5\xdb\xab\xad\xdf\xeb\x3c\x96\x64\xf5\xea\x9b\xb7\x13\x2c\x58\x8b\x77\xa0\xf2\xab\x72\xe0\xc6\x8c\x42\xe1\xb7\x13\x5e\x63\xf4\xf1\xe3\xb3\xd7\x6f\x1f\xa3\xb3\xed\xc3\x17\x2f\x3e\x3e\x7c\xf4\xfa\xed\xfb\xc7\xaf\x5f\xbd\x7f\xfb\xfa\xc5\x8b\xa7\x6f\x3f\xbe\x79\xfd\xe2\xd7\x67\xcf\x5f\xbc\x98\x25\x9a\x51\x15\x39\x1f\xe5\xe2\x32\x89\xbe\x36\x1b\x53\x72\xcf\x4f\xb2\xf2\xa4\xe4\x8a\x9e\x5c\x67\x79\x7e\xb2\x16\x72\x69\x78\xc9\x3c\x3f\xd9\x89\xfc\x66\x9d\xe5\xba\xb1\xfd\x71\xa7\x02\x87\x8f\x0c\x5b\x05\x71\x08\xcd\xef\xa3\x6e\x55\x89\xdd\x4b\xa4\xaa\xfa\x7c\xd4\x18\xc0\x03\x49\x38\x81\x3b\xd7\xc6\x07\x96\x51\xf3\x0e\xc7\x8e\x49\x72\xa8\xaf\xb5\xd5\x4c\x4d\xb9\x96\xab\x4f\xdb\x41\x44\xd8\x6d\xe9\x71\x93\xd3\x16\x7b\xa9\xcf\x5c\x0a\xf6\xa8\x7a\x41\x5a\x5e\x33\xc3\x38\xf1\xd6\x4e\x55\x3f\xe3\x17\x7a\x91\x8b\x8b\xa9\xcf\xb8\x9a\xa4\xc0\xbd\xe2\x6f\xdf\x72\xa1\x76\x71\xd7\x1b\x59\x27\xa2\xfd\xb1\xd9\xc1\x6e\x9e\xf5\x36\x48\x08\x5d\x1b\xc6\x78\x5a\xb3\xc8\xd0\xba\xb4\x66\x7b\xa7\x01\x0f\xac\xbf\x1e\x50\x2b\xee\xa5\x21\x28\xf2\xcf\xdd\x96\x78\x5e\xa8\x3f\x43\xb6\x45\x44\xdd\x4b\x80\x9d\xe8\x7e\xeb\x83\x51\xf8\x1f\x9f\x17\x6a\xf2\xa7\xce\x2c\x1d\xaf\x9f\x17\xea\xc1\xfd\xce\xc4\x1d\xaf\x9f\xe5\x22\x3d\xfa\xfe\x4f\x7f\x34\xef\x17\x54\x30\xaf\xfb\xa3\xac\xfc\x29\xe3\xd7\x55\xd5\x6d\x27\x5c\xc7\xe2\xfa\xa2\x02\x98\x9c\x0f\xfd\xd8\x58\xa9\x31\x9b\x68\x3b\x41\x82\xae\xf1\x9d\xbb\x80\xa0\xf7\xe6\xff\x91\x0e\x7f\x1b\x0f\xff\xfd\xc3\xf0\x7f\xf9\x97\x3f\xc4\xff\xfa\xcd\x60\xf4\x1f\x1f\xff\xb3\xfa\x5f\x17\xf7\xb2\x91\xe2\x78\xfb\xd2\x29\x87\x59\x5b\x00\x07\xed\xa0\x79\xbf\x0d\x2c\xa8\x93\x75\xc6\xf3\xd5\x49\x91\x6e\x79\xe4\x31\x35\x4a\xbc\x10\xd7\x5c\x3e\x4e\x4b\x9e\x78\xf2\x60\xd9\xd6\x9e\x1f\x6f\xae\x87\x21\xb6\xf7\xfc\x89\x0b\xfe\xb9\x65\x3d\xa3\x18\x1f\x61\xb0\x63\xe2\x1c\xb6\x45\xc1\x3d\xa0\x58\x43\x89\xd5\xa1\x76\x22\x96\x23\xbb\x91\x34\xe3\x30\x6f\x18\x7b\x2f\x3a\x6c\x31\x15\x44\xcd\x73\xad\xca\x9d\x65\xd4\x36\xdd\xb1\xdb\x03\x0d\x84\xda\x7c\xc6\x3b\x0c\xe8\x1d\x04\x20\x9a\xec\x21\xdf\x6b\x90\x55\x5b\xe8\x55\x5d\x05\x84\xd9\xf9\x7c\xbc\xa0\x1c\x23\x96\x63\x21\xdc\xc9\x7c\xa1\xfa\xec\x55\xba\xe5\x7a\xf8\xdb\x45\xb6\x5b\x34\x57\xae\xbc\x20\x32\x17\x4a\x28\x70\x41\xf5\x63\xc9\x57\xc4\xb1\xf0\xdd\x68\x41\x0f\x73\xc9\xd3\xd5\xcd\x89\xfe\x3f\x22\xa4\x57\xe7\x64\x7e\x80\xc9\xb5\x8f\xe4\xca\xaf\x4f\x7c\x3c\x5a\x80\xfd\x1d\x89\x22\x17\xe9\xca\x9f\x10\x95\x00\x26\xc0\x3e\x47\xa4\x68\x51\xf0\x10\xc8\x9a\xdc\x16\x09\x47\x24\x25\xa2\xa5\x54\x57\xd9\xa6\x5e\x49\xba\xae\x9a\x32\xd2\x82\xf9\x8a\x42\x35\xd2\xad\x7e\x58\x7a\x3b\x38\x09\xa3\x87\xed\xdc\x78\xc0\x45\xba\xd3\x1c\x9b\x7b\xf5\x31\x0a\x0f\x58\x4d\x4d\xbe\xf4\xf0\xdd\x28\xfe\x02\x2d\x36\xea\xda\x4a\x8e\xc3\xe7\xa7\x24\x84\xaa\xd1\x05\xd4\x5d\x57\xbb\x6a\x98\xc4\xd4\x43\x3a\xf1\xe2\x84\x3c\x12\xab\x9b\x0e\xbb\x17\x4c\xa0\xb3\x3c\x2f\x32\xc5\x38\xe5\xb3\x0e\x47\x91\x3a\x15\x58\x32\xf2\xa9\x1c\xe9\x73\x24\x8e\xf5\x81\x10\xc4\xee\x0f\x14\x41\xc4\xcb\xa8\x53\x42\x46\x7b\x4a\xc4\xb1\x3d\x25\xbe\xae\x00\x9b\x1a\x0a\xf1\xcf\xc4\x38\x6e\x9c\x89\x5f\x57\xde\x7b\x63\x86\xee\x2c\x4a\xa6\xc1\x29\x14\xc7\xb6\x8f\x49\xa2\x98\x3e\xd5\x75\xe5\x9a\x60\x1f\x2d\x5e\x11\x62\xf1\xbe\x74\x05\xde\x42\x61\x3b\x3d\xcb\x78\xba\xd1\xc6\x90\xdb\x73\x35\x99\x77\x66\x5d\x90\x56\xc3\x12\xff\x10\x39\xde\xd7\xaa\x12\x7a\xc5\xcc\x8e\xb6\xc8\xc2\x89\xd5\xa3\xf1\xe5\xbb\xc6\x66\x96\xc8\x58\xeb\x22\xed\x2f\x35\x89\x71\x56\x43\x43\x5d\x82\x66\x94\x3a\x6e\xbd\x66\x41\xae\xb2\x95\x8b\x82\x65\xf9\xbd\x5d\x9e\x66\xc5\xa9\x3e\x65\x4a\xae\xd8\x8f\xef\x9f\x0d\xff\x1c\xf9\x6d\x78\x04\x33\x14\x3e\x03\x23\xff\xc5\xf2\x3b\xf2\x90\xff\xc2\xc2\x32\x8d\xb8\xab\x43\xe9\x6e\x97\x67\x78\xf3\x73\xef\xf3\xf0\xfa\xfa\x7a\xa8\xb7\xc2\x70\x2f\x73\x5e\x2c\xc5\x8a\xaf\x9a\xfd\x24\x07\xea\xd6\x20\xee\x6c\xbd\x87\x5a\xe2\xd6\xb2\x8e\xe7\xc9\x03\x68\x86\xb0\x8b\x3e\x6d\x46\xe8\xb5\xc6\xf7\x30\x8b\xb7\x56\xda\x39\xbf\xbc\x66\xc3\xc2\xec\xde\x6d\x9b\xc4\x2c\xc5\x5e\x33\x0b\x10\x12\x2b\x5d\x9d\xd8\x84\x27\x3a\xd7\x49\x5a\x9e\xe8\x2e\x7b\xd0\x6d\x77\xb6\x40\x2f\x48\xbc\xa2\x87\xc3\xcb\x5b\xec\xc7\x8c\x07\x1b\xed\x9e\x99\xa1\xac\xaa\xae\x41\xf2\x47\x64\xea\xe6\x23\x31\xe8\x75\x1b\x62\xec\xc0\xd0\xbf\xa5\x39\x4b\x54\x01\xfa\xbb\x37\x57\xf5\x95\xd2\xf1\xb9\xb2\x38\x86\xf6\x3d\x6d\x9d\x51\x12\xce\x28\x6a\x0f\x27\xb0\x1f\xe7\x04\x43\x5a\x7f\xe5\x64\x76\xdb\x91\xb5\x8e\x1e\x5a\x78\x88\x6a\x2e\x44\x36\xed\x00\xa5\x07\x3d\xa3\x21\x1b\x6b\x29\xb6\x8f\x37\xa9\x7c\x2c\x56\x1c\x51\x5e\xea\xb9\xfc\xbb\xc8\x8a\x24\x8a\x0c\x76\x4c\xbb\xa5\xff\x6d\x8b\x08\x9c\x40\x3b\x16\x51\xb8\x74\x60\xbb\xd5\xa7\x93\xf1\x05\xb0\xa7\xce\x91\x25\x04\xbe\xb6\x66\x09\x5c\xb9\x25\xf0\xf7\x52\x14\x5f\x93\xe3\x87\x77\xaf\x5f\x8d\x76\x7a\xd3\x9b\x55\x7b\xf0\x3c\xfc\x0c\xfb\xd5\xb8\xd5\xe6\x2c\x85\xa8\x45\x0c\x82\x7e\x7b\x4a\xe0\x6d\xba\x9b\xf3\x45\xcf\xfb\xcd\x8a\x59\x31\x88\xe8\x49\x34\x50\x53\x75\xa0\x7e\xd1\x68\x04\xc7\xc2\x9b\x12\xb0\x8b\x73\xf9\x75\x35\x8b\x30\x97\x7f\x85\xeb\x0b\x2b\xa6\x49\xe8\x4e\x50\xba\x63\x16\x5b\x81\x11\x53\x83\x72\x36\x69\xd9\x55\x8e\xcd\xd4\x14\xb9\x53\x80\xe6\x0f\x4a\x28\x79\x27\x8a\xb6\x6b\x37\x8c\x4e\x98\xc5\x70\xb9\x1d\x46\x02\x30\x88\x4e\x79\xbd\x4d\x77\xe4\x58\x4b\x0a\xb0\x7f\x35\xea\x69\x57\x63\xb1\xa0\x85\xe1\x8d\x83\x1a\x3f\xf1\x9b\xb2\x4d\xae\xe7\x8b\x20\x1e\x49\x9b\xf9\x46\x0e\x17\xae\x0c\xc0\x36\x4d\x8b\x3a\x61\xc1\x20\xb9\xfc\x33\x45\xbb\x82\x55\x77\xc1\xbc\x50\x32\xfb\xa7\x4a\xf6\x1a\x3d\x2f\xa8\x5a\xd4\xe5\x07\x42\x55\xde\xd6\x2f\xd5\xe2\x55\x47\x4b\x70\x85\x6f\xd9\x3c\x7a\xf2\xf4\xc5\xd3\xf7\x4f\x23\x1a\x7d\xf7\xf4\x7d\x44\xa3\xef\x9f\x3e\x7c\x12\xd1\xe8\xf5\x9b\xf7\xcf\x5f\xbf\x7a\x17\xd1\xe8\xcd\xeb\x77\xfa\xfd\x9b\x1f\xdf\x47\x8b\x20\x3c\x6f\x18\x7e\x23\x51\x4c\x55\xd5\xed\x81\x00\x9b\xdc\x33\xf7\x2b\x4e\x44\xbb\x69\x0a\x34\x9d\xd2\x6f\x28\xc6\xe0\x96\xdb\xcb\x9c\x71\xfd\xbf\x71\xe6\x91\x7c\xc5\x0b\x95\xa5\x79\xc9\xb8\xff\x44\x95\x65\x12\xec\xfd\x91\x79\x04\xea\x9a\x27\xdc\x3e\x13\xb3\xa3\xb6\x5c\x6d\xc4\x8a\x71\xf3\xc3\xbc\x14\x2b\xae\x5f\x89\x95\x89\x3e\x88\x5a\x29\x2d\xf4\xc2\x0f\x9a\x55\x15\x5a\x36\xf0\x9a\xd5\x84\xf8\xaf\xde\x33\x0d\xc4\x2f\x13\xda\xdb\x75\xc6\xc9\xdd\x8e\x0a\xfb\x7d\x52\xfe\x53\x55\x35\xbf\x57\x55\x54\xa6\x5b\x3e\x14\x32\xbb\xcc\x8a\x88\xf6\x5d\xaf\x43\x46\xa9\x7b\x0c\xd4\x91\x31\x48\x0a\xa6\xcc\x6f\x53\xa5\x7d\xc0\x55\x21\x59\x31\x52\xe2\xc7\xdd\xce\xea\x19\xe8\xd6\x29\x51\x24\x39\x1f\x4e\x66\x72\x6a\x03\x15\xc2\x08\x2a\xf8\x63\xcb\x82\x9f\xb5\x43\x99\x19\x52\x65\x7e\x98\x54\x66\x7c\x8d\x4b\xcf\x9a\x4b\x69\xbd\xd0\x12\x68\x84\xf5\xbf\x70\x2d\x83\x95\x1a\xbe\x25\x71\x9c\x75\xaf\x2c\x2d\xa5\xc1\x41\x96\xe6\xb9\xb8\xe6\xab\x93\xb5\x90\x27\xdf\x3d\x7d\x7f\x22\xe4\x89\x2e\x08\x4c\x87\x79\x09\x06\xc3\xa1\x6c\x97\x64\x9e\x4c\x7b\xd5\x90\x69\xcd\x21\xe6\x69\x63\x64\xb6\x4d\x08\x5c\xfd\xa9\x24\x8a\xa3\x0e\x25\x80\x91\x65\x6b\xb7\x05\x93\x98\x45\x18\x54\xc0\x68\x57\x46\x92\xef\xf2\x74\xc9\x93\x7b\x1f\x06\xf7\x2e\x69\x74\x12\x81\x9d\xb4\x39\xdc\x59\xd4\x95\xa0\xa7\xac\x6a\x61\xc5\x35\xe7\xfb\xe3\xdb\xe7\x8f\xc5\x76\x27\x0a\x5e\xa8\x44\x12\xda\xf1\x36\x23\xe4\x10\xea\x5a\x2e\x0d\xdd\xd7\x4b\x08\x6c\xc9\xf1\x74\x05\x25\xbe\x43\x09\xc3\x29\x53\xa9\xda\x97\x35\xd2\xa7\x32\x6f\x66\xf7\xc7\xe3\xa9\x7d\x30\x36\xf6\x9f\x98\x97\xe5\x9c\xdd\x1f\x8f\xad\x9f\x30\xbc\x39\x7b\x30\x1e\xfb\x85\xa2\x0c\x54\xff\x06\x95\xe6\x4c\x79\x5f\xa7\xd1\xeb\xbf\x84\x32\x52\x6b\x91\x53\xb7\xe7\x94\xfe\xbf\xaa\xac\x50\x55\x4f\x2e\x27\x07\xdf\x00\x70\x99\x8b\xa2\x0b\xe9\x54\x97\x6c\xee\x7c\x6e\xf5\xd6\x9e\x86\xb2\xe6\x81\x1c\xe8\x0a\x8f\xaf\x1b\xff\x62\xca\xbc\xbb\xf4\xdf\x5d\x7e\x65\x75\x97\x49\x58\x07\xbd\xc5\xbe\x4f\xbd\x51\xa2\xde\x70\x34\x06\x8f\x9a\x41\x98\x9a\x41\xf1\xc6\x89\xd0\xbd\xcc\xa7\x76\x6c\x74\xdb\x2f\x47\x2d\xa5\x0e\x1e\x4f\xd8\x10\xd8\x85\xb6\xfa\xb1\x5f\x69\x14\x1d\x7c\x55\x24\xac\x11\x1b\xa1\xcc\x00\x9f\xb2\xf9\x83\xf1\x84\x3e\x18\xdf\xa7\x0f\xc6\x0f\xe8\x83\xf1\xbf\xd1\x07\xe3\x3f\x2f\x7a\x97\x23\xc9\x57\x99\x6c\xc7\x8f\xc9\xd6\xc9\x70\xc2\x18\xbb\x70\x14\x26\xb0\x59\x01\xaf\x95\x86\xb2\x14\x1b\x74\xa2\xd7\x76\x88\x46\xdd\x68\x7a\x3d\x28\xb7\xb9\x40\x81\x71\xca\x0f\x18\x3f\xed\xc9\xeb\x97\x4f\x3f\x2f\x39\x78\xff\x33\x15\x3c\xc2\x85\x1b\x44\x9f\x0d\x5e\x1b\x65\xfd\x35\x98\x27\xfa\xb9\xbb\xf8\x27\x83\xa4\x6b\x0e\x95\x22\xdd\x72\xa6\x0c\x93\x69\xa2\x6e\x1b\xba\x63\xe3\xfb\xc3\xdf\x66\xc3\x8e\x1a\x27\x41\x19\xfe\x2a\x3b\x96\x2f\x00\xc2\x68\xf4\xa7\xb6\x25\x82\x48\xc8\x47\x14\x85\x45\x6d\xe5\x6c\x76\x05\xcd\x08\x06\xae\x46\x12\x1e\xc7\xf6\x97\xbd\x1e\x26\x0e\x6d\xa1\x3d\x8a\x09\xde\x7c\xf1\x95\xb5\xb8\x81\xae\x44\x04\x19\x14\xdc\xd3\xbf\xbc\x7c\xf1\xbd\x52\x3b\x73\x85\xe4\x63\xac\x91\x5b\x73\x07\x9d\x90\x43\xd9\xa1\xbc\x74\x22\x22\xb3\x6b\xa0\x6b\xeb\x74\xee\x9b\x84\x33\xd0\xba\x3c\xcc\x73\x6b\x14\x64\x0c\x86\x12\x82\x94\x04\xe9\x0d\xc0\xa4\x5a\x42\x2c\x67\x1f\x8a\xf9\x07\x75\xb2\xb0\x14\xd9\x10\x77\xfc\x72\xaf\xfb\x34\x68\x9c\x03\xd3\xc6\x39\x80\x47\x0a\xdc\xe6\xd8\xf0\x3c\xf6\x14\x98\x46\xee\xb3\xa3\xfc\x92\x66\x48\xd1\xc9\xa1\x27\x81\xf8\x45\xd2\xb4\xff\xc7\xb7\x2f\x34\x1d\x2d\x67\x00\x93\x61\x5f\x4d\x65\xa8\x64\xfa\x65\x68\x06\x7a\xa8\xd3\x5b\x43\x51\x57\x48\xb3\x84\x69\xfd\x53\x8f\x5f\xaf\x48\x70\xe7\x65\x18\xf3\xbe\xec\xd2\x18\x8b\xa6\xfe\xfa\x15\x57\xd7\x42\x7e\xb2\xa7\xf0\xc9\x1a\xc2\x37\x46\xb6\x00\x85\x36\x2d\xff\x95\x22\x60\x95\xb4\x0b\xf8\xca\xc5\x08\x65\xec\x78\x91\xa4\x96\x5b\x4c\x81\x25\xed\x8f\x09\x8d\xb2\x62\x99\xef\x57\x5c\xf3\x22\xa9\xcf\xab\xcd\xca\xd1\x75\xa6\x36\x8f\x3d\xee\xae\x3f\x9e\x46\x62\x9b\xa9\x56\xda\x38\x4e\x3a\x52\x4f\x08\x75\xe3\xae\xbb\x0a\x63\xef\x29\x50\xbd\xa1\x07\xd2\x8b\x4a\x1d\x9a\xba\x09\xed\xbe\x15\x01\x35\x9a\x99\x64\x5c\xd3\xc6\x28\x88\xd6\x7b\x38\xa9\x37\x71\x0b\xe6\xc2\x5c\xdd\xef\x09\x8c\x2c\xb0\xec\x10\xc0\x68\xb9\xd1\xc4\xd9\x1f\xe4\x3f\x32\xc6\x4a\x50\xa1\xdc\xbc\xb3\xe1\xf1\x4d\xb1\x9d\x38\x05\xae\xe4\x83\x2e\xbb\xd4\xeb\xd9\x71\x17\x69\x7d\x16\xce\x34\x59\x9f\x7a\x2f\xc8\x81\x1c\x3e\x8e\xec\x9d\x34\xeb\x8f\xa9\x1a\x81\x99\x9f\x66\x62\xf0\x17\xfb\x48\xd5\xc8\xec\x60\x96\x53\x65\x6f\xa4\xd9\x0d\xfc\xc6\x61\x64\x97\x9a\x74\xd6\xa9\xb8\x97\x8a\x7b\xa9\x28\xb7\x85\x1e\x48\x72\x7b\x40\xe7\x30\x53\x51\x5b\x8d\x02\xaf\x4f\xb2\x12\x18\x50\x63\x69\x70\x32\x3c\xd9\xa6\x37\x17\xfc\xe4\x46\xec\xe5\xc9\x85\x14\xd7\x25\x97\x27\xe8\xfd\x51\x9e\xa4\x92\x43\xe2\xa5\xb8\xe2\x5a\x5a\x38\xe1\x57\x5c\xde\xa8\x8d\xfe\x79\x23\xf6\x27\x05\xe7\xab\x99\xd9\x9b\x82\x8d\x1b\x57\x94\x96\xdc\x0e\x87\x94\x1f\xac\xb9\xe5\x7b\x5e\xaa\x59\xe2\x3f\x79\xa6\xf0\x59\x23\xf8\xa8\x29\x41\x0f\xbb\xd0\xb4\xc4\xe1\x70\xb7\xd3\x88\xc1\xc0\x0e\xb6\xf1\xcd\xe0\x9e\x63\x46\x3b\x02\x85\xe3\x16\x80\xf9\x49\x48\xa0\xec\x4b\x69\x4a\x28\x0f\xa3\xd1\xe1\x70\x82\x26\x84\x1f\xc8\x81\x4c\xeb\xd6\x98\x7a\x51\xbd\xd4\xa2\xab\x56\xf1\x32\xe7\x0b\xb0\x9e\x0c\x4c\x56\xef\xa5\x7f\x4f\x3f\x1f\xb1\x5b\xf5\x63\xca\x7a\xd1\x74\xcd\x3e\x5f\x9d\xfc\x67\x5d\xc2\x7f\x9e\x5c\xec\xd5\x49\xa6\x4e\xae\xd3\xf2\x44\x72\x7d\xb0\x43\xd4\xd9\xff\x04\xcb\xff\xa1\x97\x30\xd2\x6b\x94\xdc\x81\xc6\x6e\x43\x57\x74\xa5\xb8\xcc\xc5\x45\x9a\xcf\xf0\x4f\x67\x8a\x92\xe7\xeb\x99\xfe\x6f\x8a\x0a\x93\xa6\xbc\xf1\xbb\x11\xb0\x49\x03\x01\x9b\x27\x04\xfc\xb3\x8f\x78\x79\xb4\x91\xb0\x1d\xe8\x9c\x03\xc4\xe6\xe4\x14\x18\xd1\xaa\xc2\xae\x92\xd1\x63\xb1\xe2\x2f\x33\x38\x1e\x00\xbd\x81\xf8\x8b\xb0\x65\x3b\xcc\x59\x91\x5e\x65\x97\xa9\x12\x72\xb4\x2f\xb9\x7c\x78\xc9\x0b\xa5\xcf\x61\xf7\x76\x97\xa7\x6a\x2d\xe4\x96\x16\xec\xde\x25\x5f\x7e\x12\x1f\xee\x7d\x58\xd5\x77\xee\x54\xb2\x7b\x2f\xdf\x3d\x7f\x7a\xf2\x61\x75\xcf\xbd\xcb\xd8\xbd\xf7\x32\xd3\x44\xf7\xc3\xbd\x64\x36\x9d\xff\xdb\xf0\xdf\x17\xd5\x87\xd5\xed\x7d\x7a\x20\x1f\x46\xa3\x6f\xe4\x15\x06\x88\xb8\x07\xf0\x1f\x3a\x87\x60\xb2\xaa\x32\x9a\x32\x11\xc7\x89\x9c\xb5\xb0\x6a\x5e\x82\xc0\xfb\xa7\x69\x36\x9f\x2c\x08\x2d\xd9\x3d\x8c\x30\xf2\xe1\x5e\x5d\xe9\x9e\x95\x71\x7c\xef\xaf\x4a\xb7\x6f\xf0\x61\xf4\x61\x35\xa8\xbf\xe5\xec\xde\xe3\x8d\x14\x5b\xee\x67\x58\xb2\x7b\xaf\x77\x5c\xa6\xfe\xbb\x35\xbb\xf7\x70\xb7\xcb\xf9\x89\x16\xe7\xf6\x8a\x4b\xf3\xa9\x1e\x8f\x2b\x5e\xac\x84\x24\x74\xc3\xee\xbd\x4c\x97\x27\xaf\xdf\x9d\xfc\x72\x32\xf9\xb0\xfa\xf0\x24\x99\xff\x19\xbb\xf9\x61\x45\x3e\x3c\xa9\x8b\xdc\xb1\x7b\x6f\x36\x69\xa1\xc4\xf6\x87\x77\xf5\xdb\x95\xa9\x08\xfb\xe1\xde\xc7\xf1\xbd\x97\xe2\x22\xcb\xf9\x87\x7b\x1f\xae\xbd\x0e\x6c\xd9\xaa\xaa\xee\x3d\x2c\x56\x52\x64\xab\xea\x9a\x5f\xbc\x7e\x57\x3d\xca\xd3\xe5\xa7\x47\x5c\xca\x9b\x0a\xfa\x71\xf2\x32\x2b\x32\xfb\x53\x5c\x64\xd5\xf3\xa7\x58\x96\x37\x5b\x37\x50\xce\xcb\x74\x69\x8a\x56\x84\x5e\xb1\x7b\x1f\x2e\x1e\xcb\xd7\xef\x3e\x5c\xd4\xf5\x5d\xb2\x7b\xd7\x59\x61\x33\x2a\x42\x2f\xd8\xd2\x39\x1b\x25\xf7\x7e\xc2\x18\x20\x1f\xee\x25\x1f\x56\xdf\xe8\xb1\xfe\x86\xdc\x23\x3d\x7d\x7e\x5e\xb0\x57\x7b\xbd\x4f\x93\x0b\x3d\x53\x84\x5e\xc4\xf1\xc5\x39\x9b\x7c\x1b\xc7\xc9\x92\xf5\x27\x54\x1f\xd8\x48\x64\x3f\xb2\x9b\x38\x4e\xf6\x55\xb5\x8c\xe3\x04\x15\x40\x17\x55\x75\x71\x36\xb9\x3f\x9a\x4c\x08\xa1\xd7\xac\xa8\x2a\x11\xc7\xe9\x39\xfb\x77\xfa\x54\xe7\xfd\x0c\x41\x7f\x2d\x5d\x7e\xe7\x19\xe4\xab\x46\x04\xed\x77\xce\x17\x4a\x13\x1c\x4c\x89\xc2\x80\x40\x30\x32\xa6\x98\x9a\x5d\x8b\x44\x11\x30\xc9\x16\xc9\xdf\x0a\x0c\x4f\x44\x9f\x78\xba\x6a\xe3\x40\xd3\xba\x12\x2c\x74\x8b\x91\x57\xcf\x92\x82\xa2\x6a\x86\xa2\x3a\x66\x94\x67\x05\x7f\xc7\x77\x29\x68\x0a\xad\x56\x68\x25\x96\xac\x30\x28\x04\xd0\xa4\x51\x56\xec\xf6\xea\x9d\xba\xc9\x79\x39\x57\xde\xd3\x02\xaf\x5d\x6c\x04\xc4\x55\x56\xee\xf2\xf4\x06\x32\xbd\x4e\x38\x38\xb3\xf4\xb2\xd1\xb5\xd4\xbc\xa9\xf4\x77\x3b\x88\xd2\x6f\x4c\xee\xc7\xe6\x2f\x36\xe7\x67\x9d\x1a\x62\x50\x25\x7e\xa1\xae\x14\x30\xd3\x7c\x95\x6e\xf9\x80\x45\x27\x75\x91\x43\xfd\x3d\x02\xa7\xff\xbd\x12\x00\xa5\x10\xc7\xfd\x2d\xda\xfb\xec\xf6\xca\xc1\x4d\x7c\x6f\x6b\xb3\x02\x33\x67\xb7\x9f\xf8\xcd\xcb\x74\x57\x4e\xe7\x0b\xaa\x4f\xdc\x3c\xbd\x81\xdf\x7a\xa4\xbe\xe3\xc5\x74\x0c\x6f\xaf\x65\xa6\xc0\x0c\x78\xc5\xf3\xf4\x26\x2b\x2e\x1f\xe5\x7b\x09\x0c\x8c\x7e\x09\xc5\xf3\x95\xfe\x59\xee\x77\xe0\x83\xf2\x74\x95\x29\xb0\x6c\xdc\xa5\xa5\xe2\xcf\x8b\xa5\xd8\x66\xc5\x25\x98\x3a\xee\x95\xff\x88\xc8\x0d\x59\x71\x09\xe2\x88\xae\x41\xa6\x97\x97\xde\xf3\x26\xbb\xdc\xe4\xd9\xe5\x46\xa1\x38\x2f\xe8\x27\x7e\xf3\x8e\xff\x03\x2d\x89\xcb\x1d\x5f\x66\x69\xfe\x78\x93\x6a\x71\x7f\x9f\xe7\x16\x90\x4f\x01\x38\x82\x51\xc4\xe7\x27\x59\x71\xa2\x57\xe8\xd9\x64\x12\xc7\xdd\x86\xe2\x7b\x37\xd8\x38\x64\x92\x97\x5c\x25\xfd\x31\x39\xd0\xfb\x63\xd2\x8e\xf7\xcc\xb8\xcd\xd0\xfb\x35\x4b\x2c\x38\x17\x97\x34\xda\x0a\x3d\x18\xe2\xba\x88\xe8\x5f\x54\xc2\x69\x5e\x10\x42\x1b\x69\x56\x17\xb9\xc1\xa5\x32\xcd\x9a\x41\x52\x5f\xab\x0e\x4e\x4b\x18\x25\xc0\xca\x49\x7b\x64\x62\x01\xd3\x3e\x8e\xfb\x6b\x7c\x8c\xe3\x7e\x59\x24\xae\x39\x90\xfe\xfb\x2c\x71\xa8\xd6\x10\xd8\x7c\xf5\xb3\x90\xab\x87\x2a\x29\x48\xef\x11\xd7\x89\xc5\x92\xca\x51\x5a\x2c\x37\x42\x52\x94\x82\xc8\xe1\x70\x20\xa1\xff\x85\x0d\x52\x00\xc5\x1d\x48\xef\xba\xaa\x1a\x1d\x59\x62\x58\x99\x2d\x2f\xf6\x51\xd0\xfc\xb7\xd8\xb8\x83\xd9\xa3\x5a\x0c\xe5\xc5\x6a\x3a\x3e\x84\x90\x15\x0a\x40\x65\xae\xf8\x7b\xb1\x5f\x6e\x60\xb7\x1e\x09\xfa\xe8\xa7\x63\x78\xfd\x33\xe1\x0f\x08\x4d\x24\x0b\xbe\x91\x11\x2f\x56\x6c\xa0\xd7\xca\x93\x54\xf1\xd0\x2c\xcc\xd0\x21\x24\x62\x6a\x94\xf3\xb5\x75\x5c\xe8\x8f\x1d\x2d\xd1\x6f\x87\x1c\xfe\x50\x5d\xb8\x12\xbb\x21\xc0\xab\x39\xf5\xca\x37\xc5\x40\x7e\x23\xcf\xff\x38\x1e\x1f\x1a\xc3\xa1\x74\x13\x4a\x95\x6a\x4e\xde\xb5\x3e\xf3\x26\x33\xd3\xd3\xd5\xe0\x4f\x26\x7d\xb0\x19\xd9\x2f\x37\xdc\xc2\x32\xd9\x56\x4d\x7a\x76\xb1\x99\xef\xf3\xf1\xc2\x33\x1e\x4a\x57\xd9\xbe\xfc\xe5\x8c\x4d\xe2\xd8\x3e\xfd\x7a\xc6\x26\x87\x24\x23\xe4\x16\xf0\xaa\xec\x50\x16\x96\x61\x76\x23\xd3\x0b\x87\xf4\x16\x5a\x3d\x15\x54\x8b\x26\xb0\x95\x77\x92\x5f\x4d\xc5\x50\xea\x01\x3d\x63\x0f\xc6\xe3\x99\x34\xf7\x6e\x13\xc6\xb2\x46\x83\x35\xc5\xf2\xcb\x83\xe1\xab\x53\xcd\xc7\x0b\x00\xb9\xfb\x85\x86\xa9\x94\xd8\xb5\x13\xfd\x0a\x42\x7c\xd7\xc8\xea\xb6\x45\xf4\xd8\xb2\x68\xb5\x01\xba\x02\xd7\x10\xdd\xc5\xf1\x62\xe5\x95\x56\x03\xab\xf8\x85\x18\x08\x11\xbd\xc5\x14\x2d\x88\x75\xc4\x93\xd0\xc1\x38\xee\x4b\xac\x25\x8e\xed\xb8\x0e\xe5\x08\x86\xf2\xec\xc1\x78\x6c\x1c\x46\x69\x0a\xe8\x96\x42\xae\x4a\x4d\xa9\xc2\x56\xd2\x48\xf7\x39\x22\x3d\xc1\xfa\x72\xa4\x07\xbd\xaa\xca\x44\x52\xfc\x8d\x71\x95\x5f\x71\x10\x0f\xa6\x26\x41\x2b\x95\x49\x1a\xec\xf4\x14\x83\x46\xbe\xe2\xc9\x8e\x27\x29\x1c\x2f\x74\x4c\xe8\x0b\xbb\xfb\xdd\xdb\xc1\x84\x8e\x09\x69\xa2\xff\x24\xc2\x52\x07\x81\xd4\x81\xd6\xa8\x45\xdf\x67\x49\x41\x0e\x59\x72\x6c\x5c\xd1\x9a\x3d\xa2\x59\xeb\x33\xfe\x6a\x4c\xa1\xfd\x3c\x5a\xe6\x19\x2f\xd4\xf7\x5c\x53\xfb\x38\x4e\xb6\x40\x42\xea\xcf\x0e\xff\x90\xd0\x9b\xce\x4f\x2f\xf4\x96\xed\x8f\x09\xfd\x6b\x96\xf0\xba\x32\x4e\x3a\x1a\x0a\x54\xfa\x7a\xc3\x79\x1e\xd2\xad\x8f\x96\x6e\x35\x33\x3c\x79\xfd\xf2\xa5\xce\xf3\xae\xd9\x85\x76\x26\x73\x5c\x1f\xe9\xae\x3d\xcc\x5d\x77\x58\xf3\x9d\xee\x07\x1b\xa3\xf0\x29\xd3\x4b\xeb\xc2\x5c\x6a\x12\xaa\xb8\xec\xa6\xd1\xff\x00\x1a\x0d\xa7\x75\x77\x82\x86\x26\xa4\x75\xa4\xf4\x0b\x43\x75\xcc\xb9\xd1\xf0\x6c\x78\x62\x1e\x9f\xc9\xf4\x12\x23\x2d\xf7\x0a\x65\x18\x1d\xea\x4e\x1f\x68\xf0\xe3\xbd\x2c\x85\x04\x47\xef\xf6\x6b\xf6\x58\x24\xd1\x2a\xbb\x8a\x90\x0f\x8b\x3c\x36\x66\x09\x09\x4a\x9f\xb3\xd1\xf9\xcc\xeb\xc8\xaf\x06\x98\xb7\x5d\xba\xe4\xa3\xac\x28\xb9\x54\x8f\xf8\x5a\x48\xde\x59\xa1\x97\x0b\x4b\x7a\x92\x5d\x11\xd2\x7b\x23\xba\x53\x4b\xc4\x43\x21\x14\x06\x94\x1c\x28\x12\x46\x7f\x48\xdb\xa0\xbe\x5a\x1a\xea\x73\x64\xa9\x46\x3e\x07\x53\x55\x8e\xe0\x0e\x37\xc5\xd9\x64\x3c\x26\x81\xab\x1c\x54\x02\x57\xc6\x76\x9a\x9a\x67\xb9\x99\x13\x40\xac\x5e\xa5\x2a\x7d\x2f\xd3\xa2\x5c\xeb\xb5\xc2\xd5\x93\x54\xa5\x49\x84\x68\x8e\xbc\x01\x97\x05\xab\xc7\x4f\xcf\xd7\x6b\xbe\x54\x0f\xf1\x12\x90\x01\xe2\xdc\x4b\xa0\xa7\x1d\xe5\xca\xf4\xf2\xf9\x36\xbd\xe4\xfa\xb0\xb2\x4b\x45\xcf\x5b\xb6\xbd\x34\xf3\x86\x93\x67\x91\x50\xa7\x27\xeb\xec\x33\x5f\x9d\x9e\x68\xaa\x38\x3d\x19\x9f\x9e\x28\xb1\xd3\x7f\x23\xd2\x2b\x46\xa5\x5c\x22\x0a\xf7\x34\xd3\x85\xde\xbb\xcc\xd6\xa7\x17\x69\xc9\xff\xf4\x47\xfa\x76\x9c\x7f\xf7\xfa\x49\xbe\x79\xf8\xd7\x87\x8f\x1e\xea\x7f\x8f\xbf\xff\xf6\xd1\xc3\xa7\x7f\x79\xf8\xf0\xe9\xc3\x17\xf0\x42\xbf\x7f\xfa\xf0\xe1\xc3\xe7\x8f\xdf\x3f\x7c\xfa\xf0\xf5\x35\x63\x11\x05\x49\x64\x74\x9d\xad\xd4\x86\x15\xa3\x0d\x10\x0c\x36\xf1\x26\xda\xee\x27\x1f\xb2\xb4\x20\xb4\x18\x7d\x04\x98\xd4\x91\x00\xac\x55\x20\x25\x77\xf4\x3e\x29\xe8\x58\xd3\xcc\x65\x1c\x17\x1e\x4c\x43\x80\xee\x59\x80\xe8\x8e\x31\x71\x56\x52\xec\xa6\xc0\xc8\xed\x0a\x42\x73\x9e\x5e\xf1\xee\xad\xb8\x2a\xc0\x91\xc7\xf2\xaa\x86\xe5\xbc\xe4\xea\x59\xc6\xf3\x55\x42\x34\x4b\xb9\xa7\xd1\x27\x7e\xb3\xdf\x85\x94\xe6\x53\xe1\x05\xe1\x01\x72\x83\xe9\x3c\x7e\xf3\xa1\xe1\x37\xf1\x03\x70\xe3\xe6\xcb\xcb\xfa\x0b\x90\xf2\x88\x3e\x15\xc9\xfb\x02\xfc\xd0\xf0\xf5\x45\xbe\x97\xf0\xf6\x31\xbc\x3d\x18\x79\xc1\xa3\x5f\xd9\x3a\xf9\x5e\xd8\x45\xf9\x6b\x66\x10\x23\x40\x57\x9b\xfd\x16\x1e\xce\xc6\x58\x00\x2c\xee\xbb\xb9\x3a\x8e\xb7\xdc\xbf\x89\x24\x2d\xc8\x81\xc2\xee\xc0\x5e\xd9\x62\xb1\x41\x5e\x96\xdf\x74\xdb\x74\xa2\xef\x05\x33\x4c\x1b\xb8\x5d\x3e\x52\xbe\x6c\xb3\xdc\xcb\xd7\xbb\x11\xb8\xed\xfc\xb8\x5b\x69\x39\xa7\x3f\xa6\x1f\x33\x13\x47\xbb\x25\x29\x55\xd5\x7e\xb4\x49\xcb\x67\x78\xbe\xcd\xbc\xc6\xe2\x00\x61\xc9\xf7\xc7\x64\xfa\xb8\x30\xd5\xfc\x50\x90\x1f\x8a\xa6\x2d\x4f\x4e\xe2\xf8\x87\x62\x9e\x2f\x8c\x6b\xe7\x3c\x5f\x50\x25\x49\xef\x27\x27\xe5\xad\xb3\x22\x2b\x37\xcf\x8b\x0c\x7c\xea\xeb\x27\x63\xc3\x67\x25\x96\x0d\x1b\x9f\x6e\xce\x84\x73\x44\x1d\x0c\x36\x44\xc8\xf9\xc6\x08\x9d\xbd\x1f\x6d\x6f\x4b\x5d\x4c\x28\x3a\x46\x5a\x74\xde\x66\xbf\xf1\x9c\x5f\x66\x17\x59\x9e\xa9\x9b\x88\xb1\x4b\xae\x8c\xaa\x64\x05\xe2\x6b\x92\x41\x36\x4d\x0b\xc1\x7c\xec\x2d\x2f\x56\xa0\x6f\x05\x1f\x2f\xf3\xc9\x42\x0b\xfb\xdf\x59\xa4\x87\x2e\xf2\x18\xeb\xd7\x36\xaa\x99\x09\xac\xe6\xc2\x69\xc0\xb2\x66\x92\x66\xe6\x5c\xbb\x48\xe5\xb3\x0c\x5c\x97\x8e\x9f\x01\x2e\xe5\x70\x0d\x49\x23\xd2\xce\xde\xc0\x33\x5c\x6e\x87\x85\x50\x43\x63\x1a\x1b\xd1\x48\xc9\x3d\x87\x7c\x97\x7b\xa5\xf8\x97\xeb\xc4\x64\x7e\x85\x7e\xc6\xaf\xae\xcd\x0c\xda\x5d\x07\x1c\x5c\xd3\x52\x8b\x57\x98\x89\xa2\x9d\xbe\x49\x58\x25\xcf\xc1\x95\xff\xf4\xe4\xb7\x21\x5c\x0b\x4f\x4f\x26\x50\x86\x3b\xcc\xbe\x7c\xa2\x42\xfa\x2d\x4f\xcb\xbd\xe4\x77\xa4\x36\x29\x5c\x67\x5e\xfe\xee\x1c\x70\x24\xd7\xe9\xe7\xae\xd6\xb0\xc4\xc6\x08\xf8\x9d\xa9\xc7\x71\x71\xc7\x50\x88\xbd\xd2\xa9\xa6\x27\x85\x28\xb0\x76\x4d\x91\xbd\x39\x9e\xfb\x6d\x70\x2d\x5b\x04\x8d\xd7\xaf\xcb\x88\x1c\xaf\x07\xa7\x2a\xfb\x2d\x28\xd8\x54\x15\x16\x05\x89\xea\xe4\x3f\xe3\xc9\x04\x81\xde\xcc\xf1\xf4\x4c\xd3\xa2\xe6\x22\x6c\x56\x6c\xe1\xc4\x4f\x4f\x30\xd3\xf4\x24\x1a\x64\x62\x10\xed\x3e\x9f\x9e\xc0\x69\x37\x3d\x99\xec\x3e\x9f\x7a\x4b\xb4\xfc\xe2\xb2\x2e\xdd\xe4\x7c\x07\xcf\xb6\x59\x96\xb3\x0d\xba\x06\xad\x6f\xb4\xb9\xae\x6b\xd1\xb1\x53\xbd\xfd\xd9\xda\x2a\x2a\xbd\x78\xae\x57\x6c\x44\xa3\x21\xae\x59\x73\x2e\x87\x75\x86\x9b\xbb\xb1\xfb\xbc\xd2\x83\xea\x23\x82\xaa\x93\x3f\x03\xbd\x32\x0d\x34\xf4\xea\x37\xa8\x95\x0d\x27\x41\xd3\x7c\xe4\xf7\xb7\xc0\x31\x8c\x09\x2d\xab\xaa\x88\xe3\x6d\x55\x25\x5e\x52\x60\xe0\x1c\x94\x0d\x1c\x60\x3e\x27\x31\x0b\x9e\x12\xd7\x2b\x32\xe5\xde\x83\xee\xee\x55\xc6\xaf\x9f\x49\xb1\x65\xf8\xf3\xbd\x60\x9a\xe6\xcb\x52\xd1\x6c\x24\x39\x46\x31\xf9\xa9\x4e\xe3\xbf\x0a\xd2\xea\xcc\x6c\xbe\x80\x5c\x9a\x0c\x63\x12\x3b\x93\xfc\xb3\xe2\xb2\x48\x73\xb3\xb9\x56\xf6\xbd\xce\x85\xa0\xf2\x6c\xac\x97\x40\x5a\x2a\x7d\x4a\xa0\x7c\xc5\xea\x17\xb8\x5a\xc7\xbd\x6c\xb4\x87\xb3\xf2\x45\x56\x70\x54\x0e\x97\xb6\xa8\x02\xf6\xc3\xa3\xd4\xac\xec\x6c\x74\x91\x4a\x57\xce\x85\x7d\x3d\xf6\x49\x75\xf9\x38\xcf\x76\x3b\x74\x19\xc2\xf5\xf7\x6a\xbf\xb5\xd9\xcd\xe3\xf3\xa2\xe0\xb2\xf1\x0e\x74\x79\xb6\xde\x34\xcf\x2e\x8b\x9f\xb3\xd5\x25\x57\x25\x16\xb4\x4c\x97\x1b\xbe\xd2\x89\x6c\x3e\x7c\xa3\x99\x60\xd7\x22\x7c\xf5\x06\xe7\xfa\x7b\x5b\xd8\x36\xfd\xac\xbb\xd6\x78\x44\x27\x29\x68\xbb\x79\xf3\x18\xee\x72\x4d\xc3\x41\x44\x7c\xf2\x0b\xb3\xbf\x7e\xb5\xbf\xde\x69\xb1\xe0\x97\xe0\xe9\x57\xb7\xb7\x36\xd9\x5a\x61\xfe\x92\xe7\xcf\x84\x34\xd1\x97\x5f\xf2\x62\xef\xba\xd6\xd0\x67\x51\x09\x7e\xe6\x81\xcd\xdd\x43\x44\x00\x5b\x89\x25\xda\x16\xbe\xd3\x3c\xe2\x4b\x40\x0e\xb4\x0a\x72\x5a\x7f\xc6\xf8\x1d\x84\x42\x24\x2a\x57\xc6\xa7\xba\x8c\xf0\xaa\x13\x5e\x83\xc4\xf2\x70\xad\xc0\x07\xc8\x7f\x34\x38\xf7\x1c\xf7\x4d\x69\xbe\xea\x9f\x06\xb3\x9e\x98\x9a\xd7\x52\x14\x2a\x83\x50\x1b\xf0\x08\x4b\x56\x68\x76\x53\xb3\x73\xd4\x0a\x45\x46\x9f\x3c\x18\x50\x8e\xdc\x59\x1c\xff\xa0\x82\x86\xbe\xac\x75\xab\xcf\x55\x2d\x03\x11\x5a\x30\xd7\xdb\x80\xd5\xa1\x92\x15\x71\xfc\x32\x55\x1b\x3d\x73\xc9\xb7\x1e\xff\xdf\x50\x29\xc0\x52\xb9\xf7\xc4\x2f\x75\xf8\xc0\x99\x4b\x35\x14\x75\x8f\xa4\xd1\x90\x64\x4e\x54\x1b\xbb\xdb\xe6\x6c\xad\xb7\x38\x2e\x48\x07\x99\x92\xb2\xf1\x69\x7a\xe6\xde\x5b\xa6\x2d\x1d\x0c\x88\x7b\x39\x4f\x17\x86\xaa\xc6\x71\x22\x06\xac\xe3\x43\x6d\xbf\x35\x13\x83\x04\xfa\xb5\xe4\x59\x9e\x64\xc0\x80\x99\x52\xef\x49\x52\x55\x13\xf2\x8d\x9a\x8a\x81\x3a\xd4\xa3\xf7\x3e\xd0\x4c\x8b\x25\x2d\xd8\x4b\xb0\xac\x6a\xcf\xba\x31\xe2\x84\xaf\x7d\xc6\x5d\xb3\xde\x65\x46\xac\xa8\x4b\x7d\x6c\x16\xcf\xb1\x7b\x08\x76\xc7\x37\xcf\x36\xa8\xfc\x66\xb9\x1d\x96\xc3\x0f\xef\xc0\x36\x28\x22\x83\x7a\x42\xd5\x86\xfb\x49\x93\xff\xa8\x3e\x94\xe4\x43\xf9\x0d\x18\x11\x41\xae\x88\xd0\x77\xe1\x4a\x79\xab\x5b\xf5\x26\xe1\x84\xc2\x12\xa2\xdd\xc2\xc5\xcf\x60\x2a\x7e\x7f\xec\x65\x7c\xd3\xa1\xbe\xb7\x67\x47\xb0\xcc\xcc\xbb\xde\x5b\xa1\xc5\x73\x3b\xcf\xe8\x97\x52\xd4\x4c\x79\x6d\x95\x34\x97\x0b\xaa\x29\xb6\x7f\x30\x7c\xe9\x64\xd6\x87\x3b\x21\xbd\x26\x4b\x52\x20\xe9\x8d\x18\xcb\x60\xd7\xf9\x2a\x0f\x73\x84\x0b\x2a\xcc\x79\x86\x32\x70\x23\x95\x25\xb4\x7a\xa1\x40\x44\x10\x72\x50\x26\xbd\xbd\xa6\x92\xb3\x28\x9a\x46\xc0\x3d\xd1\x57\xc1\xe0\xbe\xba\x63\x8c\x8c\xdc\x0c\x85\xf7\xbc\xdd\xa6\xb9\x86\x20\x74\x0a\x68\xb0\x14\xd4\x5d\x97\xfc\x77\xa3\xef\x1e\x33\xb7\xe8\xea\x0d\xe6\xbc\x84\x60\x1e\xbc\x05\x4f\x25\xe3\xa7\x8a\x3d\x97\x89\x24\xa7\xe4\x56\xb2\x24\x83\x93\xb1\x58\x25\x63\xda\x1f\x13\x02\xfe\x40\xa8\xdf\x2c\xf4\xbe\x82\xc7\xe5\x66\x98\x8d\x94\x18\x2d\x37\x07\x5d\x32\x96\xf1\xc4\x94\x61\xe4\x14\xaf\x90\x5e\x31\x64\xd2\xaf\x75\xe8\xca\xd1\x85\x26\x12\xb4\xd4\x50\x09\x69\x24\xc3\x4a\xec\xce\xad\x7b\xfb\xbc\x63\x1c\xa1\x6f\x2b\xb1\xec\x29\x77\x18\x5d\x67\x49\x41\x0b\x24\x9b\x5a\x40\x0c\x4f\xa5\xbf\x27\xee\x8d\xf7\xd1\x1d\x50\x63\x5a\x74\x6f\xef\x82\xe9\xc1\xee\x15\xe7\x8d\x02\x41\x45\x1e\x56\x51\xd4\xe5\x32\x1e\x6c\xfe\x27\x75\x0f\xae\x44\xc2\xdd\x46\x39\xb6\x60\xc9\xe9\x70\x02\xb0\x8b\xdc\xae\x42\xfd\x7a\xe6\x32\x32\xf7\xab\x06\x24\x3b\x52\xd4\x82\x4c\xd5\xf9\x70\x02\xf0\x19\x5e\x59\xb0\x1f\xda\xa5\x59\x5f\x68\xea\xbd\x42\x00\x2a\x45\x27\xc4\xeb\xd1\x8b\xee\x39\x51\x5d\xeb\x9b\x4a\x06\x24\x58\x8a\x7d\xb1\xc2\x13\xc1\x2c\xda\x41\xee\x1f\x24\x0e\x0b\xc0\xd7\x5e\x4f\x8f\x68\xb5\xa9\xe6\xc9\x5c\x92\x9a\x64\x7a\x29\x30\x1f\x34\x61\xda\xd2\x70\x63\xcb\xbc\x43\xad\x5d\x11\x26\xd1\xf5\xd8\x04\x61\x35\xf8\xfd\x22\x95\x7a\x8f\x4e\x6b\x92\x07\x0a\x3c\xa4\x2f\xb3\x62\x3a\xa6\x2b\xb1\x34\x0d\x95\xa6\x4d\xf6\x71\xb0\xd6\x54\x77\xa0\x6a\x26\x90\x86\xfc\xe1\x54\x35\x18\x46\x8a\xe3\x8b\x1f\x0b\xef\xd4\x7a\x66\xc1\x85\x51\x6b\xb3\x75\x77\xef\xf0\x7c\xc5\xa5\xea\x12\xe9\x3c\xd9\x69\x9b\x15\xc3\x5a\x32\xd2\xc2\x9c\xbf\xa4\xae\x1c\x37\x1a\xb9\x8b\xfa\x8d\x90\xd9\x6f\x5f\x28\xd5\x4a\x5f\x93\xf1\xf8\x0f\xa7\x27\xba\x0e\xf7\xa6\x5d\xc9\xc6\xab\xa4\xc7\x13\x49\x28\x84\x16\xf8\x35\x4b\xba\x6f\x00\x9a\xf7\x1c\x2a\xf1\xee\x02\x68\xa4\x3b\x9d\x2d\xd3\x3c\x32\x9a\xb0\xac\xb3\x90\xcc\x9f\x4d\x5d\x46\xe6\xdf\x81\x44\xd0\x49\x51\x28\x53\x0c\x8e\xee\x86\x2f\x3f\xf1\xd5\xdf\xb8\x14\xc8\x3a\xf7\x27\xb5\x08\x55\x0f\x8d\xa5\xe3\x59\x61\xd8\x69\x37\x15\xf5\x17\xcc\x1f\x4d\xfe\x0c\x67\x8b\x9b\xcd\xdf\x12\x72\x5b\x3f\x7d\x1f\xf2\x0e\xb5\x60\x10\x9c\x6a\xf5\x6b\x0c\xc2\x93\x90\x16\x1b\x07\x1f\xd3\xd5\x0a\x00\xa3\xe2\xf8\x89\xaf\xb8\xb7\x57\x2d\x77\xe6\x21\xdd\x65\x1a\x03\x0f\xf7\x42\x33\xd6\xf9\xbc\xde\x11\xee\x83\xb1\xf7\x08\x7d\xde\x9a\x7c\x4f\x70\x0f\xa1\xba\x2a\x44\x81\x16\xef\x88\x02\x33\x01\x5f\x23\x6a\xd8\x65\x63\x52\x71\xcc\x5a\x81\x37\xac\x15\xcc\xcd\xdc\x81\xc2\x5d\xa7\xfa\x3a\x95\x95\x67\x6b\x88\x91\x2c\xbd\x55\xc3\x58\x31\xc3\x4b\x36\x32\xdd\x9a\xdb\x2d\xca\xbf\x38\x37\x2f\x7e\xff\xdc\xd4\x0b\xe6\x91\xef\x7d\xa3\x49\x35\x71\xb0\x99\xb6\x00\x2b\x6a\x52\x19\xbe\xc4\xa5\xda\xfb\x11\x2f\xb3\x5c\x58\x7e\x36\x3e\xcd\xce\xfe\x18\xc7\x45\xbf\xa3\x8c\xaa\x92\xfd\xae\x52\x10\xf1\xaf\x2b\x87\x3e\xd9\xba\x04\x91\x38\xfe\x41\xb3\xa1\xba\x76\x68\x36\xfd\xfa\x26\xd7\xbd\xff\xd1\xbf\x96\xab\x4f\x27\x30\x87\xaf\x87\x0d\x25\x74\xcd\x94\x16\x01\xdb\x15\xe8\x35\x92\xa2\x96\xc9\xe5\x08\x42\xd0\x21\x1f\x48\x3b\x33\x3d\x12\x4a\x89\xad\xc9\x65\x36\xbd\x1c\x5d\xc0\x5b\x97\xcf\xd7\x08\x05\x41\xf6\x4c\x6e\x9b\x41\xa7\x3f\x29\x45\x9e\xad\x4e\x94\x4c\x8b\x12\xaf\x4d\x22\x6a\xda\x01\x16\xdc\x90\x70\x96\x14\x6d\xbd\x6e\xc0\xa3\x46\x17\xb9\x58\x7e\x82\x46\x77\xa6\xdb\x84\x4d\x75\x3d\xec\x4c\x7c\xed\x8f\x06\x32\xc5\xd3\x2f\x36\x40\x37\x1b\x0b\xf7\xa7\x1e\x2c\x93\xf1\xa4\x7c\xc5\x3f\xab\xf7\xe2\x9d\x2d\xc5\x4f\xe5\x9f\xa7\x49\xd1\xd0\x28\x1f\xe9\x67\x47\xa2\x23\x9d\xec\x48\x89\x3d\xb4\xbc\x0c\xcc\xbe\xeb\xe7\x5d\xb5\x7b\x1c\xfa\x3f\x1a\x58\xff\xd6\xda\xa1\x18\x29\xb1\x9b\x39\x49\x5b\xb3\x9d\x4a\xec\xc8\x94\x77\x5c\xce\xf7\x0c\xdf\xb4\xce\x85\x66\xbc\x87\x7b\xe5\x76\x72\xe6\x97\x68\x56\x81\xfd\x31\x95\x03\xde\xcd\x10\x09\xf6\x30\x43\xd8\xe7\x14\x7f\x65\xd6\x02\xaa\x18\xf1\xa2\xdc\x4b\xc3\xd3\x95\xcc\x3e\x7b\x12\xc1\xbe\x7e\x69\xf8\xf7\x5e\x79\x26\x66\x89\x60\xa5\x2d\xee\x53\x96\x5c\xeb\xbf\x25\x21\x47\x9a\x40\xc8\x14\xfb\x9e\x15\xc9\x9e\x2a\x50\x9c\x69\x7e\x39\x21\xe4\x9c\xa5\x5a\x9e\x0f\x4b\xda\x13\x32\x3c\x52\x12\x4d\xd9\xde\x02\x21\xde\xea\x66\x4e\x05\x55\x62\xea\x86\x36\xa5\x62\x30\x21\x1e\x87\xf4\xf3\x31\x96\x55\x73\x78\x78\x2b\xec\x2b\xc9\xaa\xaa\x66\x66\x41\xa6\x00\x51\xf4\xc8\xba\xac\x5d\xd5\x25\xfb\x2e\x51\x64\xd8\x69\x51\x31\x40\xde\xd7\x63\x2f\xb2\x23\x1c\xb3\x60\x12\xd7\x27\x2a\x44\x8a\x40\x11\xb2\x4e\xfa\x05\xe8\x3a\xb2\xd5\x8a\x23\xe0\x52\xbb\x45\x71\x0c\x69\x2e\xcd\x43\xe2\x3d\x99\x65\x0b\x76\x45\xc2\xb9\x48\xe9\xef\xd0\xff\xf4\x22\x07\x80\x92\x5a\x2b\xb3\x67\xe3\xd3\xfd\x99\xd3\xc6\xec\x07\x03\x52\xce\xf7\x8b\xa0\x9c\xc3\x91\x56\x24\xaa\xa1\x52\x86\xe4\x72\x90\x19\x71\xba\x9e\x9f\x9f\x12\x1b\x40\x2e\x38\x1a\x8c\xc0\xd2\xb6\xe3\x42\xd5\xcc\xaf\x9e\x02\xcf\xa8\x79\x07\x0a\x68\xf3\x70\x42\xfc\x93\x02\x56\xba\xe9\x02\x58\x1d\x79\x4a\x52\x2b\xc8\x4a\x7b\xc9\xd2\xad\x7d\xf0\x38\x5c\xd2\xbe\x00\x41\x89\xeb\xa4\x7d\x1b\xc6\x73\x15\x11\x42\x85\x96\xa8\xdd\x42\x0a\xa6\x3b\x65\x99\xff\x3c\x14\x35\xe6\x59\xad\xab\x08\x88\x13\x10\xd4\xb6\xee\xd7\xad\x7e\x41\x83\xac\x7e\xe1\x29\x19\x4c\xea\xcc\xf6\x6c\x6b\x95\x35\x48\x69\x38\x48\x5d\x89\x66\x76\x44\xa7\xc3\x09\x3d\xda\xd8\xb0\x32\x5c\xd8\xaf\xf4\x39\xdf\x1f\x1f\x1c\x46\xa1\x5b\x07\xbf\xe2\xf1\x6d\x46\xc0\x3a\xba\x7b\x6b\xe1\x99\x90\xdb\x54\x57\x92\xe8\x1d\x05\x43\x5a\x2b\xda\x7d\x21\xf5\xbb\xc0\x55\xc4\x6d\xc8\x4b\xae\x1e\x69\x51\x34\x2b\x2e\x1f\x03\x45\x79\x0b\x18\xa3\xd6\x5c\x11\xcf\xf5\xbb\x12\xd5\x35\xfc\x25\x24\xf3\xf5\x62\x43\x56\x3f\xe3\xd7\x3b\x21\x95\x8d\x11\x76\x95\x01\x2a\x31\xfb\x47\x22\x51\xe5\x4b\x6d\x74\x51\xbe\xca\x94\x90\xcf\xcb\xef\x61\x4b\xb3\xbe\x74\x34\xcf\x5f\x26\x90\xd4\x7c\x70\xdc\x45\x27\xa5\xf7\x53\xda\x19\xee\x12\x5e\xd1\x40\x3c\x5f\x3d\xc1\x66\x63\xd2\x8d\x72\x80\x21\x70\xef\xcf\x4c\x84\xe9\x55\xb6\x2d\x99\xe2\xee\x23\x20\x36\x97\x6c\xbe\xa8\xc7\xe3\x5f\x8e\xb1\x5e\xa8\xac\x01\x22\x1b\xf6\xd5\xc5\x8a\x2f\x60\x41\x4c\xac\x13\x94\xae\x38\x8e\x95\x1d\x33\x38\x88\xce\x59\xe1\x2e\x82\xfc\x6f\x4a\x9c\x99\x2f\xef\x85\xb3\xac\x2f\xda\x77\x30\x55\xd5\xf1\xf2\xdc\x65\x25\xfa\x1c\x0c\xae\x85\xcc\xa7\x38\x1e\x33\x06\x2a\xa1\x9a\x0a\xfd\x84\x58\xa2\xd8\x6c\xe5\x8d\x8d\x3d\xa0\xa5\x21\x46\x12\x16\x14\x15\xf5\xde\x0c\x3b\x35\xac\xc9\x9d\x5d\x2f\x2f\x41\xf3\x47\xa5\xd5\x65\xa5\xcc\x1d\x9a\x19\xf5\xbb\x3d\x38\x96\x57\x33\xb5\x76\xa4\xce\x44\x1c\x8b\xa1\xf7\x7c\x7f\x0c\x07\xad\x6b\x8f\xa9\x87\xd6\x49\x34\xe3\x6d\x06\xe5\x3c\xd5\xa3\x82\xbf\x87\x29\xe6\x0d\xda\xe3\x46\x8f\xd0\xcf\x50\xee\x6f\x56\xeb\x2f\x74\xcb\xbf\xb7\x4f\xa9\x19\x99\x3d\x13\x7d\x6f\x1e\xab\x2a\xed\xbb\x19\xd0\x13\x14\x5e\xae\xf5\x6b\x93\x3e\x7c\xe1\x27\x81\xe5\xea\xa5\x80\xe7\xd3\xc0\xa6\xac\x6b\x6f\x8e\x19\x93\x50\x61\x1d\x44\xea\xdc\xbc\x81\x26\x9c\x99\x07\xdd\xbc\x59\x82\xbf\xd9\xdf\x94\x29\x8e\xd6\x1f\x99\x22\xd3\xa4\x7e\x3c\x57\xb3\x30\x71\xfd\x89\x58\x3d\x1d\xbe\x22\xd3\xfa\xd3\x99\x82\x98\x1f\x90\xcf\x34\x0b\xb5\x70\x05\x0a\x8b\x24\xac\x91\xda\x86\x9e\x15\xb3\x30\x97\xa9\x01\xea\xb6\x89\x68\x41\x6c\x5d\xef\xc5\x79\x71\xa4\xa6\x31\x85\xba\x0a\x42\x08\xe9\xd9\xd4\xac\x00\x6b\x2c\x41\x53\xbb\x18\xcc\x0d\x28\xf2\x66\xe6\xfc\xf5\x97\x4c\x2d\x94\xc1\xbd\xbe\x1f\x4d\xdb\xcb\x0f\xe4\x1f\x56\x42\x8e\x7b\x0a\x76\xfc\x1e\xf6\x58\x1e\xc7\xf5\xde\x3f\xb6\x17\xff\xf9\xfd\x1d\xf2\x10\x4b\xf6\x77\xe1\xf0\x47\x4f\xf2\xf3\x3f\x82\x29\x5c\x68\xaf\xe3\x58\x7b\x63\x1d\xf1\x85\xa5\x45\x33\xd6\xc9\xbc\x20\x12\x3e\x96\x4c\x53\x26\x3c\x3e\xc0\x77\x44\xaf\x83\x31\x8e\x0a\xfe\x59\xbd\xcb\x2e\xf2\xac\xb8\xb4\x2d\x2c\xe3\xf8\x46\xb3\x9f\x9e\x09\xa6\x16\x08\x7f\xde\x70\x9e\x9b\xd8\x5f\x0c\xd1\x2d\xda\x2d\x9f\xaa\x63\x56\x77\x0a\x40\x32\xad\x7b\x87\x59\x17\x74\xe9\x6d\x01\xba\x66\xe3\xd3\xf5\x59\x6e\xd9\xbf\xb5\x8d\x76\xb3\x61\xf9\x7c\x0d\x91\x21\x37\x96\x17\x3d\xb5\xc1\x57\x37\x10\xd6\x29\x8e\xf1\xaf\x57\x39\x63\xc2\x04\x7f\x4a\xfb\x0c\xbf\x9e\x92\x94\xed\x93\x14\xc9\xc3\x8e\x65\x56\xb2\x51\x71\xac\xce\xd8\x52\x17\x52\x8f\x65\x6f\x33\x42\x0f\xe1\x32\x8e\x93\x2b\x91\xb8\x47\x1a\x21\xbb\x15\x11\x50\x77\x27\x3b\xf0\x7c\x2e\x78\xc2\xe9\x86\x2e\xf5\xe2\xa6\xbb\x38\x4e\xde\xea\x2c\x75\x71\x84\xfa\x4f\x01\xdb\xd7\xb0\xda\x7d\xcf\x3f\x43\x07\x12\x9f\xe3\x5c\xea\x2d\x43\x53\xd3\x11\x7f\xd6\x30\x62\xab\xee\xd1\x8a\xe5\x75\x23\x7a\x22\x54\x6f\xad\x68\x4a\x0e\xcb\x01\xdb\xc0\x29\x71\xc0\x81\xb1\x03\x72\xd0\x9b\xb2\xbd\xa2\xcd\x71\x43\xe8\x17\xd6\x6c\xa4\x37\x6e\x68\xe6\x60\x66\x37\x8e\xf5\xd2\xef\xeb\xb1\x5d\x1a\x0e\xc3\xea\x50\x97\xce\x36\xfd\xad\x48\x0a\xcf\xce\x17\x9f\x7d\x63\x23\xe2\xa4\xe7\x32\x14\xb1\x43\xdd\x48\xad\xff\x1c\xd3\x3d\xb6\x37\xb4\x9f\x68\x50\x78\xda\x20\xf0\x0d\xfa\x8e\x37\xe2\x7f\x1c\x8f\xe1\x90\x3a\x62\x67\xe1\xe3\xd5\xfe\xb5\x19\xbb\x49\xb9\xc3\x92\x4a\xd6\x1f\x9f\x26\xf2\xb8\x3a\x4a\x35\xb9\xa3\x3e\xb2\x47\x55\x95\x84\x32\x3d\x78\xdc\xdc\x2a\xb1\xab\x05\xdc\xe3\x37\x1d\xc3\x1d\xb0\x58\x28\xfb\x83\x9a\xb1\x66\x0d\x6b\x62\x62\x48\x2c\xa1\xfd\xa4\xc9\x07\xd5\x54\xe0\x18\x3f\x14\xa6\xd0\xc4\x8f\xc4\x31\xb2\x67\xa7\x52\x6f\x8d\xdb\x1f\x12\x17\xc0\xeb\x85\xfe\xc9\xa1\x4d\x8f\x30\xea\xed\xdf\xe0\xcf\xc1\xc2\x2b\x25\x9c\x46\x38\xd4\x51\xa8\xbb\x74\x07\x93\x57\x61\xd3\x1e\xc7\x27\x5a\xe6\x6c\x39\x92\x5a\x1f\xbf\x89\x5f\xa7\x9d\x28\xbc\xa7\x8b\x28\xef\xa8\x9a\xb6\xba\x4a\x8f\xb7\xa5\x63\xe4\x8e\xa4\x7e\x2f\xda\x63\x58\x2f\xaa\x5f\x7c\x46\xb7\xe0\xd7\x28\x09\xc0\x59\xf6\x2f\x78\x94\xc2\xf8\xd2\xbf\xc2\x83\xb9\x8a\x69\x0c\xb3\xc4\x61\x96\x04\x6e\x2d\x8b\xac\xdc\x24\xbe\x3c\xfc\x37\x1b\x17\xbb\xf3\x72\xb8\xbe\x54\x18\xb9\xfb\x25\x94\xac\xea\x0c\x1d\x9a\x46\x05\x4e\x12\x47\x73\x74\x6e\x67\x3f\x7d\x87\xe2\xd5\x5c\x62\x85\x37\xd4\x3f\x84\x78\x95\xa1\xc2\xc5\xd2\x2b\x67\x3b\xee\x70\x2a\x3d\xae\x0c\xc0\x2a\x51\x2e\xa7\xa5\xd9\xb3\x73\x09\xc7\x4d\xbf\x74\xba\x0f\xf4\x18\x48\xcf\xfe\x8c\x49\xf7\xac\x44\x4a\xec\x8a\x1e\x04\x2f\x8c\x76\x3b\x63\xfb\x61\x41\x0b\xb6\xaf\xa9\x74\x6e\x73\x1e\x11\xfc\x7a\x19\xcb\x8d\x82\x6d\x98\xeb\x61\x3c\x20\x0f\x81\x04\xc3\x0c\xd5\x10\xd0\x42\xb3\xb3\xfb\x10\x2d\xea\xb9\x4a\x14\x21\x34\x59\x9e\x8f\xc6\xe3\x49\x55\x2d\xcf\x86\xfa\x87\x16\x1b\xde\x65\x09\x66\xd4\x7b\x8d\x73\xf3\x40\x28\x60\x71\x28\xe2\x34\x2f\x78\xf4\xe2\x5b\xff\xfc\x85\x2c\xfa\xe5\x7c\xbd\x20\x07\x6f\xd1\x70\xee\x60\xae\x9b\xb6\x35\x8a\x8d\x4f\xd5\x19\x6f\xda\xd6\x0c\x06\x8a\xb8\x97\x73\x65\x4d\x68\x58\xf0\xae\x71\x88\x07\xa3\x59\x57\x0e\xf2\xcf\x91\x59\xbf\x3d\x50\xa9\xff\xf3\x35\x5e\x28\x89\x82\x22\x4c\xb0\x2e\x6d\x1b\xa8\xbf\xc4\xa9\x60\xc2\x3f\x5a\xe9\x60\x90\x92\x62\xde\xb2\x31\x99\xa7\x8b\x05\x13\xa6\x6d\xa0\x6f\x13\x5e\x15\x83\x8c\xca\xa3\x79\x3c\x99\xd8\x5e\x42\x83\x16\xeb\x8d\x28\xa7\xdf\x69\x1e\x09\x93\xbf\x17\x2a\x75\x17\xca\x5d\x7a\x3b\x7c\x07\xf7\xc1\x45\x70\x55\x2b\xa9\x7f\x86\x75\x5f\x25\x7b\xd3\x08\x6c\x8b\x89\xe3\x17\xde\xc1\x28\xcb\xef\xb8\xc8\x4a\x76\x9b\xe8\x21\x34\xdf\xe6\xd9\xa2\x07\x10\xcd\x11\x63\x62\x26\x30\x7a\xe1\xd4\x32\x48\xfa\x5d\x59\x57\x30\x8d\xc0\xd0\x08\x5e\xa7\x3c\xd1\x09\x71\xe6\xf5\x9b\x38\xde\x73\x63\x94\x7e\x70\xc5\xa3\xd7\xa8\x6b\xac\xe4\x81\x9e\x05\x02\x11\x1b\xcb\x13\xb8\xa0\x84\x17\x5f\x67\x9a\x0d\x9e\x49\x60\x15\x52\x2f\x36\x7d\x7c\x34\x5e\x59\x2b\x27\x64\xd4\xb0\x06\x93\x51\x17\x00\xab\xd5\x67\xe5\xec\x27\x77\x49\x6b\xd2\x04\x46\xae\xf7\x89\xcd\x5b\x77\x2d\xe3\x9d\x0a\x8d\x96\xa1\x68\xaf\x0e\xb6\x88\xec\x18\x33\x64\x6e\x96\x1c\xcf\xc4\x8c\xfb\xbc\x35\x27\x2f\x9c\x89\x77\x31\xba\xd8\x67\xb9\x22\x53\x61\x0c\xc9\x5c\x83\x44\xd0\x20\x85\x03\xe3\x0c\xc5\xa8\x64\xa6\xc5\x3d\xfc\xa4\x9b\x81\x8c\x78\x62\x22\x44\x83\x9b\xa3\xe6\x38\xee\x1c\x52\x48\x65\x12\xd9\xc4\x98\x95\xca\xd1\xc5\x25\xdc\x37\x6a\xc1\xdb\xfc\xac\x2a\x34\xf9\x71\xef\xdd\xc3\x2c\x71\x89\x98\xcb\x49\xbd\x04\xcc\xcb\x49\x61\xf9\x91\x69\x01\xcd\x0d\xbb\xc6\x0a\x6f\x14\x52\xde\x8a\x69\x63\x29\x8e\xa9\x62\xe6\x7e\x0d\xa2\x93\x68\x60\xf4\x87\x75\x7b\xa3\x88\x4c\xc3\x77\xa0\x9c\xd2\x15\x37\x10\x01\x74\x9a\x8b\x74\xf9\xe9\x12\xcc\x57\x60\x81\xd6\x8f\x44\xcd\xfc\x47\xaf\xb9\x6a\x9a\x04\x5f\x8e\x88\x5f\x41\x61\x41\xd1\x68\x1c\xda\xb3\x02\x95\x9b\x73\xd8\x6d\xbd\x30\x65\x28\x53\x84\x5b\x4d\x11\x6b\x14\x05\x35\xa2\x93\x95\xae\x0a\x3a\xaf\xc9\x10\x0e\x18\x94\x1b\xd8\x23\x86\x09\xa6\xb8\x37\xfa\xcd\x9d\xed\x65\x89\x22\x52\x7b\x59\xbb\x15\xe0\xfd\x0e\xe6\xc2\xbd\x0d\x66\xc3\xbd\xed\xf1\xe6\x0a\x50\x3a\xa1\xe7\x85\xee\xd1\x48\x50\x2c\x5e\xd6\x57\x0e\x45\x4b\xcc\x35\x5f\xf5\x62\xbe\xac\xad\xf7\xeb\xc7\x47\x6e\x38\xef\x2e\xe0\x91\x37\x5d\xed\x77\xae\x50\xe8\x0b\x7e\xc5\xcb\x79\x7b\xc3\x00\x37\xce\x1d\x19\xbf\xe8\x53\x53\xcf\xf7\x49\x34\x68\x57\x40\x23\x74\x18\x84\xf1\xed\xba\x39\x95\x23\x77\xa2\x0d\xe5\xa8\x79\x9e\x91\xc0\x35\x22\x1a\xb4\x53\xe0\x7d\x0d\xcd\x1a\xe6\x19\xad\x9e\x58\xaa\x71\xb0\x67\x92\xd7\xd2\x97\xa9\xfc\xc4\xa5\x09\x4a\xd8\xa1\x27\xa9\x2a\x41\x6e\xed\x20\xa1\x3d\xb0\x9b\xae\x2f\x0e\x90\x39\x51\xa3\xff\x8e\x91\x88\xd0\x93\xb4\x61\x1b\x52\x72\xf5\x63\xc1\x57\x18\x98\x2d\x49\x5b\x83\x91\x7a\x14\xb3\x39\x3f\x00\x86\x16\xa0\x8e\x74\xcd\x22\xa1\xdd\xb7\x5f\x00\x0b\x23\x8e\x1b\xf9\x81\xd8\x54\xa7\x67\x69\xf7\x05\x96\xaf\xba\x28\xc8\xef\xbb\xc1\xaa\x87\xd5\x8e\x99\x66\x73\x8e\x37\xa9\xb1\xa0\x5a\x76\xb5\xde\x4d\x13\x0c\x38\x21\x54\x38\x5e\xb5\x64\xe3\xd3\xf2\xac\xc5\xad\xd5\x3c\x6b\x69\xf9\xfd\x36\x47\x57\x2e\x68\xce\x44\xd3\xa1\x70\x4f\xf4\x00\xee\x17\x3d\x80\x96\xec\xbe\xde\xcb\x17\x5d\xeb\xea\x8e\xce\xef\x9b\xbd\x94\xbe\xcd\x80\xf9\x1c\x91\x80\x43\x37\xfc\x54\x01\x90\x0b\xf6\xbe\x15\x01\x17\xec\x93\x21\xfd\xf5\x95\xb2\xa1\x47\x35\x15\x3f\x95\xa7\xd2\x46\xd1\xce\x98\x0c\xd4\x85\xcd\x19\x71\xcc\x9c\x67\x51\x1e\xc7\x1d\x24\x4e\x92\xc3\xd2\x36\xce\x8b\x9a\xe4\x91\x59\xac\xce\xb2\x18\x0e\x3d\x03\xb8\x03\xc3\x5f\x64\xc0\x24\x64\xf6\x54\x85\x8e\x59\x06\xc0\xbd\xd5\x3b\xc7\x11\x7a\x77\xd8\xdb\x44\xee\x37\x41\x86\x80\x7a\x94\x9e\x2e\x2d\x3b\x4a\x55\x83\x57\x73\x6d\xd7\xa7\xc1\x1a\x1e\x50\xc4\xd2\x39\xfb\x63\x0c\xc3\x50\x2a\x12\xda\xa0\xab\x40\xb6\xd2\x32\xa7\xc9\x0a\xd2\x95\x5c\x60\xee\x89\x37\x20\x6b\xd7\x1a\x9a\x99\x93\xa7\x29\x6a\x09\x4d\xc2\x0a\xa2\xc5\x17\x90\x5d\xcd\xf7\xd3\xf4\xcc\x5b\xc2\xa9\x13\x59\xe7\xa9\x5e\xb2\xf5\x3a\xdc\x43\xcf\xda\x37\xcc\x66\x26\x49\x6f\x3f\xda\x40\xd0\x79\x80\x51\x00\xf0\xa0\xb2\xaa\xf2\xb6\xad\x5a\x76\x59\x08\xc9\x87\x78\x51\x57\x3b\x58\x6e\x78\xb2\xa7\x79\x13\x6f\xa0\x8b\xc6\xe5\x84\x66\x71\xbc\x1f\xa5\x17\xe2\x8a\xcf\x1a\xba\xcb\xdc\xe9\xff\xaa\xaa\x40\xc2\x37\x15\xc1\xd6\xca\x09\xfd\x1b\x78\x43\x4b\xbe\x92\xe9\x75\x70\xdd\xbf\x09\x8f\x6f\xcd\x4c\x7c\x8f\xe6\x3f\xe4\x36\x29\xea\xcd\x50\x55\xfe\x13\x9b\x2f\x08\xb1\x28\xf9\xee\xa6\xcd\x97\xad\x7a\x2a\x30\x34\x70\xb4\xde\xaa\x3a\x3c\x9b\xa3\xaa\x4a\xb2\x21\x6b\x1f\x01\x54\x85\x66\x5d\x2f\xb0\xa4\x23\x27\xa2\x0a\xee\xba\xd1\xae\xe1\x10\xd4\x03\x2b\x3c\x90\x35\xbe\xad\xab\x30\x32\x10\x8b\x9c\x0c\x44\xbd\xb1\x40\x7d\x58\xd3\x1f\xa0\xe3\xd8\xb2\x94\xe6\x99\x07\xef\x7b\x2d\x92\x5b\xd4\xda\x75\x44\x07\xe6\xbe\x21\xf4\x39\xf7\x05\xd1\xc1\x04\xec\xee\x7c\x5b\x65\x97\xc0\xe8\x7c\x26\x70\xa7\x1b\xda\x26\x83\x85\x85\x31\x40\xf6\xac\x5c\x9b\xc6\x59\xcd\xef\xa8\x54\x61\x6a\x86\x26\x2f\xd3\x68\x1c\x99\x89\xe5\xa3\xda\xc8\x7b\x98\xa8\x99\x9c\x8e\x0d\xa6\x19\x64\xf7\x8c\x29\x02\x7d\x95\x67\x5d\x15\x76\x62\xd8\xe8\x44\x66\xb4\x56\x35\xb4\x7e\x57\xb3\xfd\x16\x1f\xab\x52\xb7\x19\x99\xf4\x96\xf9\x6f\x67\xf7\xfd\x04\x12\x75\xe6\x5e\xf7\xdb\x69\x60\x2d\x6b\x9e\x1f\xce\x9d\xfa\x0a\x4d\x98\x31\x42\xcb\x0e\x97\x60\x98\x14\xde\x60\x61\x41\xad\xa6\xe3\x7a\x0d\x96\xc1\x30\x5c\x06\xa2\x39\x3c\x9d\xfd\x0a\x9a\x7b\xa4\x16\x3d\x3e\x36\xbe\x7f\x97\x05\x35\x04\xee\xf0\xa6\xe6\x7c\x1c\xc7\xc9\x98\x31\x69\xf0\xdd\x7f\xb3\x09\xbf\x4f\x97\x9f\x92\xa3\x66\xd8\x63\x42\x6f\x25\x22\x9c\xe9\xfe\x53\x63\x10\x07\x2b\xe7\x00\x51\xd1\xdf\x39\xdb\xab\x69\x08\x0f\x5a\xf7\xce\xa5\xe8\x33\xde\xb0\xe7\xae\x31\x65\xac\x0d\xc4\x2a\x2b\x35\x59\xfa\x5e\x7f\x37\x6d\xe5\x40\xa8\x5c\xab\x1e\xa5\xd2\x2b\xa3\x9d\x8b\x78\xed\x7a\x2f\x76\xed\x66\xe1\x9a\xb4\xdf\xbd\x46\x85\x1f\x9a\x4d\xfa\x89\xbb\x78\xc9\xc7\x5a\xa4\x0b\x68\xe5\x21\x07\x1a\x8c\x76\x3b\x82\xf0\x4d\x1c\xf7\x37\xb3\x68\x72\x1f\x96\x2b\x98\xae\xf7\x5a\xcb\x63\xd3\x6d\xf2\x6e\x16\x5d\x7b\x85\xef\x44\x56\x28\x8e\x48\x78\x65\x2b\x5b\xf8\xd5\x78\x5b\xb5\x86\x92\x19\x5c\xbb\x66\x97\xcc\xfb\x03\x6d\x0f\x44\x33\x90\x7c\x77\x7d\x80\xd3\x80\xc6\xe0\xc9\x84\x3f\xa0\xb5\x9e\x2e\xa9\xef\x80\x8f\x29\x8e\xdd\x3d\x22\xcf\x39\xc2\xfe\x88\xed\x1b\x5d\x7e\x82\xd0\x57\x60\x8d\x65\x34\xcb\x13\xd2\x67\x7c\x76\xa4\x15\xf6\x26\xd7\xb6\xa2\x80\x08\xec\x60\xeb\xdf\x9e\x24\x6f\x80\x6b\xd5\x43\xaf\x21\xd3\xba\x34\x84\x76\x7c\xb9\x82\xd5\x70\xa0\xcf\x7c\x4c\xf8\xdf\xbe\x70\xbe\x58\x45\xe0\xad\xd9\x7b\x63\x8a\x1b\xf2\x8e\xfd\x47\x6e\x8f\x6d\x01\xfd\xa5\xd5\xbf\xc3\xc1\x6f\x04\xa1\x4d\xbf\x03\x76\x8b\xc7\xd2\xf4\x19\x88\x8a\xd3\xdf\x0e\xf4\x2f\x7e\x70\x22\x0c\x1c\x12\xce\x7b\x21\x0c\x00\xa0\x67\xd8\x84\x5c\x46\x8d\x42\x1c\x16\x83\x17\x36\x41\x1c\x70\xc3\xfc\x71\x36\x3e\xe5\x67\x7e\x41\x86\xe5\xe3\x83\x01\xf9\x6b\x66\xf0\x8d\xeb\x48\x26\x98\x68\xce\x17\x04\x61\x6c\x76\x9c\xbd\x1b\xbd\x11\x65\x3b\xa4\x41\x1b\xf5\x73\xc7\x03\xd8\xcf\x1d\xf7\x70\x3f\x41\x0d\xc9\x2d\xa9\x64\xea\x40\xc1\xef\x79\xb9\xdd\xb5\x0b\xf7\xa2\xdb\x17\x7c\x88\x7c\x73\x55\xf1\xd1\x72\x33\x54\xa3\xe5\xc6\x83\x1a\xdc\xfa\xca\x5e\x5d\x1f\xf2\xd8\x3a\xa9\xc7\x23\xdf\xf0\xa0\xdc\x15\x3e\x9e\x8d\x67\x6a\xea\x71\xec\x57\xc7\x52\xf1\xa9\x1f\x4a\x84\x7b\x0e\xd6\xd6\x9d\x23\x80\xc4\x0a\xa1\x39\xdf\x83\xa1\x16\xa8\x1f\x2e\x50\x94\xaa\x5b\xff\x31\xe0\xdd\xed\x09\xba\x12\x4b\xdf\x07\xd3\xba\x9c\x6b\xfe\x50\x32\x31\x2a\x79\x6e\xb5\x11\xb6\x15\x01\x16\x67\x55\x45\xf0\x1c\x31\x96\xd1\x52\x67\xd8\xe5\x19\x98\x24\x96\x5a\x7a\x41\x3f\x75\x08\x6e\x10\xc7\x72\x24\x7d\xed\xfd\xf9\x84\x64\xeb\xe4\x82\xc7\xf1\x85\x51\x77\x21\x26\xff\x87\x22\x22\x8c\xe1\xac\x37\xb2\xfc\xe1\x22\x70\xea\x64\x6c\x4c\x6e\xf7\x6c\xbe\xa8\x31\x3a\xd9\xf8\x34\x3f\x0b\x53\x9d\xe6\x83\x01\xd9\xe3\x8a\x0e\xda\x67\x92\xcd\xf3\x85\x96\x52\xe1\xa4\x2f\x5d\xc9\x8d\x9a\xe3\x38\xd9\xb3\x4b\x91\x94\xb4\x0d\xc5\x0d\xf0\xd8\x28\xb2\xe6\xcd\x7c\xc3\xc9\x69\x7e\xae\x1b\x35\x1c\xe2\x98\x2f\x5d\x0a\x2d\x72\xaf\x19\xb8\xbe\x6f\x13\x42\x37\x6c\x39\x52\x22\x21\xbd\xe5\x88\x6f\x77\xea\x26\x21\x71\x0c\xf7\xec\xe7\xe3\xd9\x9a\xed\x78\xb2\xc6\xd5\xb6\xd6\x0b\xb3\x00\xab\x79\x98\x0e\x07\xac\x1a\xc7\xfd\x74\xb6\xd1\x29\xd1\xac\x83\xba\xcb\xf8\xeb\x2c\x11\xc6\xd6\x23\xf0\x3b\xa5\x9b\xd1\x72\x33\xd8\x8a\xa4\x24\x16\x31\x92\x4c\xcd\x84\x80\x29\x40\x56\x1e\x9b\x9d\x38\x4e\xd6\x6c\xe3\x35\x6b\x4c\x88\x35\x62\x31\xae\xf9\xc6\x3e\xe1\xb9\x5e\xa0\x74\xc5\xd0\x4e\x7d\x4d\x95\x98\x6e\xa8\x2e\x70\xba\x9f\xed\xe7\xf9\x1f\xf6\xa6\xea\xc5\xb4\xa4\x18\x94\x69\x9a\x55\x55\x92\xce\xcc\xc2\x72\x1d\xf5\x20\x5f\x67\xd1\x72\xaf\xa2\x69\x34\x80\xd5\x1f\x91\x43\xef\x85\x31\x39\xa0\x2b\x10\xbb\x38\x8d\xe0\xd3\x5b\x9e\xae\x22\xca\xe9\x8a\x1c\x94\x1e\x9f\x38\x7e\x8a\x1b\x8d\xfe\x54\xa0\x26\xb8\xd5\x54\xb6\x73\x6f\xd5\xcd\x2e\x2b\x2e\x59\x7f\x4c\x3b\xd7\x3e\xeb\x68\x19\xf3\xad\x79\xaf\x1b\x37\x28\xcb\x3c\xdb\x5d\x88\x54\xae\x30\x8e\x5f\xe3\x85\x3e\x44\x11\x8a\xad\x0e\x30\x8a\xba\xb8\xa2\x0e\xd8\xbb\x93\x40\x32\x9f\x20\x7e\xbb\xe6\x06\x47\x59\xa9\x7b\xf9\xba\xc8\x6f\x12\x52\x55\xca\xe9\x84\x0c\x13\x00\x9d\xaa\xaa\xef\x54\xa2\x7c\x17\xb1\x8f\x3c\xd1\xb4\x60\x6c\xaf\xa3\x60\xac\xc9\x81\x04\xe6\x23\x66\xb0\x6e\x03\x9d\x25\x58\xc1\xc8\x6c\x09\x86\xd1\xbe\xf5\x48\xb9\x4d\xa5\xd2\x32\x5e\x51\x2b\x1a\x8c\xab\xb2\xa6\x23\xe0\x84\xd4\xdc\x1c\x52\x6f\x0e\x69\x37\x47\xe6\x52\xd8\xdb\xee\x24\x03\xdc\xc8\xd1\x72\x73\x3e\x19\x8f\xab\x4a\x82\x6d\x9c\x49\x32\x9c\x2c\xf0\x2b\xde\x3a\x65\xf5\x03\xa9\x09\x9c\xc1\xba\x78\xa8\x4c\x51\x84\xa6\x0c\x4d\x6d\x45\xd8\x95\xfa\x14\x43\x0d\x5c\xe3\xb3\xa5\x26\x25\xba\x21\x28\x17\x5d\xa7\x99\x6e\xb9\x49\xe5\x43\x95\x94\x10\xfc\x9c\xdc\xa6\xec\x3b\x7d\xd0\x78\x8d\xa3\x11\x8c\x54\x44\x7a\x17\x92\xa7\x9f\x0c\xe9\xa9\x8b\x81\x19\x8b\xe3\xc6\x0b\xc4\xe6\x76\xd6\x87\x7e\x67\x71\x7f\x5a\x7b\x46\x37\x62\x84\x80\xbd\xea\xd1\xea\x49\x2f\x8d\x63\xdc\x2c\x41\x4d\x7a\xc3\xf8\xc5\xfb\x1a\xbc\xcf\x8d\x6b\xee\xf9\x82\x16\xfa\x3f\x54\x28\xb9\xb9\x0e\xe7\xd9\x33\x67\x60\xcd\x24\x73\xe9\xcd\x21\x15\xec\x16\xf1\x42\xa7\x3b\x9e\x64\x74\x4c\x20\x9a\x0c\x3c\x00\xc0\xe8\xa1\x57\x18\x42\xae\x57\x3e\xfc\x82\x19\x86\xa0\x46\x2d\xb0\x51\xe7\x22\x03\xe4\x46\x51\xac\x31\x70\x1d\x7e\x67\x0f\xd8\x40\x7d\xa4\x79\xde\xa5\x90\x92\x2f\x55\x44\x23\xb1\x5e\x47\x06\xd8\xb4\x99\x26\xdd\x65\x2a\xcd\x01\xb2\xee\x48\xb2\x72\xc7\xf3\x1c\xa4\xb5\x88\x46\xeb\x34\x2f\x79\x00\x7a\xc6\x9d\xa8\xb3\xdc\x5a\x86\x45\xef\x71\x24\x45\x56\xbe\xdc\x89\x3c\xcf\x8a\xcb\x67\x69\xa9\x5c\xec\x6c\xf3\x2e\xe0\xfb\xb3\x22\x5d\x2e\xf7\x32\x55\xdc\x41\x38\xba\xf4\x9b\xb4\x6c\xbf\x5c\x8a\xed\x4e\x94\x50\x4c\x70\xad\xfd\x90\x3b\x66\xfa\xb1\x40\x82\x94\x4a\x9e\x7e\x11\x70\xca\x28\x8d\x00\xbb\xd1\x83\x9a\x72\x40\x54\x13\xbe\x6d\xc3\x6e\xf9\xde\xd9\xdc\xe2\x68\xe9\x63\x6d\x9d\x8b\xeb\xe9\x09\x9a\xbb\x9c\x9e\x74\x21\x78\x99\x3a\x1e\xf8\x75\x8c\x01\xdb\xca\x59\x8e\x3a\x89\xc2\x48\xe3\x93\xf1\x78\xac\x85\xb7\xe6\x44\x01\xfa\xb9\x9d\xc5\x55\x8d\x54\x63\x1c\x14\x59\x34\x71\x2e\x89\x17\x79\xba\xfc\x14\x11\xfa\x0e\xfd\x01\x3c\x94\x9c\xae\xe9\xcc\xd3\x52\x3d\x84\x75\x09\x36\xa0\x8d\x77\xc6\xb0\xd8\xbd\x05\xf4\xc0\x30\x21\xbc\x32\xe9\x6a\xd6\xb9\x6b\xfe\x2f\x65\xba\xe4\x6f\xb8\xcc\xc4\x2a\x38\x88\x5e\x06\x07\xd1\x8d\x72\xfa\x61\x03\xd9\x5a\x55\x85\xb5\x2a\xb2\x1c\xb5\x66\xdb\x50\xba\x73\x24\xc7\x64\xa1\x19\x5b\xa9\x44\xb3\x91\xf6\x85\x60\x2f\xb3\x04\x3c\xeb\xe0\xaa\x20\xea\x09\x20\x3c\x69\x9a\x08\xaa\x59\x68\xf2\x87\xfb\xb3\x08\x44\xa1\x68\x8a\x29\xac\xe7\xd5\xb5\xa6\xca\xdb\x74\x07\xc9\x68\x5a\xcf\x9a\xb1\x2c\x61\x26\x1b\x63\x7a\xad\xe6\x79\xba\x2b\xf9\x4c\x0b\xf5\x2b\x8c\x39\x25\x15\x2d\x3d\xf4\x9a\x90\xa7\xc6\x7b\xda\x8b\x74\x85\x00\x5c\x1e\x1e\x0d\x0f\x6c\x98\x41\x7b\xe5\x9b\xe5\x59\x48\x43\x94\x3b\x64\xfb\xcb\x68\xa9\x25\x45\x3d\x4b\xe5\xbc\x58\x38\x31\x44\xd7\x0f\x67\xfa\x1b\x51\x26\x3b\x1f\x47\xd6\xf8\x10\x4c\x08\x01\x9c\x10\x33\x8f\x05\x1b\x23\xed\x47\x70\x11\x75\x7a\x2a\x99\xf4\x44\x56\x6c\x80\xac\x2a\xd9\xd5\x3a\x7f\xa6\x80\x55\xf6\xcd\x46\x64\x60\x76\xdc\xce\x8c\x27\x4f\x68\x5e\x13\x36\xb7\xc3\xc6\x26\x4c\x30\xcf\x16\x78\x8a\xa2\xd1\x8b\x8b\xdf\xfc\x96\xeb\x69\xd7\x12\xba\x87\xb5\xc3\x9b\x56\xe3\x70\x64\x79\xd6\x4e\x19\xb3\xfe\x2f\x55\xd5\x7f\x25\x12\x59\xa3\xd6\xea\x71\xdd\xf1\xe4\x75\x66\x04\x2e\xa2\xcf\x05\x3d\x8c\x38\x6f\x12\x0c\xce\xfa\x63\xaa\x98\x0c\x27\x46\x0f\x30\xed\x2b\x8f\x19\x90\xbc\x54\xb3\xad\x48\xf0\x97\xbd\x78\xef\x35\xeb\x11\x84\x0a\x9f\x51\x26\x34\x43\xa1\x2a\x65\x0f\xac\x59\xc9\x7b\x88\xe5\x6e\x02\x08\x30\x05\xec\x7f\x5a\x55\x93\x3e\x98\x22\xd9\x56\x38\x37\x8b\x07\x7d\x16\xa8\x50\x6d\x11\x9a\xd5\x0d\xbe\x50\x0c\x37\x91\x42\x8a\x9f\xd2\x7c\xcf\x1d\x6f\x7e\x5a\x7a\xb3\xda\x67\xf2\x94\x94\xcc\x7f\xd5\xb3\xd7\x82\xd6\x96\x26\x67\x7b\xbd\xbb\xca\x5a\x08\x5c\x26\x2d\xcb\xaa\xe1\xe4\x34\x3b\x4b\xf2\x99\x35\x72\x9f\x8e\x09\x4c\x7a\x7d\xa1\x93\x9d\x8d\x67\x50\xd0\x34\x9f\x67\x0b\xe3\x97\x29\x6a\xbf\x4c\xf6\xc0\xfa\xce\x8a\x79\x3a\xb8\x0f\xcb\xa2\x64\x4c\x55\x55\xc9\x58\x61\xe5\x9e\xd7\x59\xa2\x0b\xc2\x21\x9f\xe2\x0c\xcc\xb3\x05\xa1\x6b\x9d\x6d\x31\x90\x66\x1a\x12\x79\x36\xae\xaa\xb2\xcf\x14\x01\x29\x43\x97\x99\xc8\xd9\x64\x3a\x26\x0b\x42\x77\x3c\x59\xd2\xb5\xe6\x49\xd0\x46\x70\x99\xa4\xb4\xa4\x05\x2c\x86\xb5\xb7\x60\xd6\x34\xf3\x81\x50\xcb\xc0\x88\x6e\xc7\xd2\x59\x7b\x80\x87\xc5\x74\x7c\xba\x39\xdd\xb0\x8d\x9f\x18\xaf\xd4\xd8\x32\xd1\xe2\x92\x37\x4d\xe3\xc6\xf2\xf4\xc5\xb3\x9d\x5e\x30\xbd\xdd\x80\x6d\xf0\x42\x0f\x21\x13\x4c\x35\x07\x34\x8c\xc7\x73\x3e\x13\xfb\xd2\x5e\x5e\xea\xd6\xee\x58\x71\xba\x3a\x5d\xb1\x55\xf3\xab\x6b\xc6\x8a\xae\xfc\x66\x68\x9a\x72\xac\x1d\x83\xbb\xdb\xe1\x21\x5a\x71\x2f\xd4\x22\x72\x49\x35\x33\x92\x6d\xf1\xde\xc6\x3b\xe7\x5e\xf9\xe9\x91\xe7\x72\x7a\x4d\x9e\xae\xfc\xa4\x7f\x0f\x65\xa0\xb9\x5a\xf4\xf8\xa8\x14\x52\x25\x9d\x5a\x18\x00\xa5\x33\x12\xb1\x32\x3f\xc0\x4a\x1c\xc0\x83\xf4\x3c\xd7\x57\x98\x13\xe0\x38\x3b\x58\x4c\x84\xd1\xe2\x20\x20\xe8\x75\xb1\xd2\xac\xa1\x96\xad\x69\x66\x8b\x3c\x67\x63\x1b\x84\xf1\x4a\x7f\x35\x55\xba\xef\xb4\x64\x37\x5e\x2e\xfd\x87\xd0\x3d\x13\x56\x36\x9f\xd9\x94\x56\xec\x98\x0a\xf7\x02\xb9\xcf\x9e\x3c\xd3\x62\xf2\x70\xa8\x28\xb7\x40\x42\xc3\xa1\xa4\xf7\xa9\x01\xd4\xdf\xcf\xca\x69\x4a\xf7\xb3\x74\x5a\x12\x72\x38\x78\xaa\x2c\x33\x1d\x1e\x0a\x54\x78\xb0\x99\x34\x73\x53\x10\xa7\xaa\xaa\x38\x59\x50\x1f\xa4\xec\x49\x98\xc5\xdd\x0b\x99\x9b\xf4\x5a\x39\xa0\x9b\x87\xde\x7a\xdc\xba\x0e\xfb\x58\x47\xb5\x04\x88\xa7\xfd\x99\x49\x4d\x7c\x35\x18\x16\x39\xae\x91\x36\xc2\x02\xeb\xdb\x72\x5d\xc2\x79\x31\xdb\xf1\xa4\xa0\x9a\xaf\xa0\x45\xa0\x90\x20\xd3\x2e\x74\x79\x3e\x5a\x6e\x7a\xde\x69\xc7\x98\x66\x58\xce\xd5\xac\x56\xc1\x29\x32\x2d\xce\xc6\xde\x8b\x31\x99\xf2\x43\xa2\xb0\x12\xd5\x56\x7d\x78\x5d\x7c\xd6\xe0\x1a\xce\x6d\xfb\xe3\x58\x9d\x85\x5d\xf1\x40\x6a\x78\xd3\xb3\xc2\x09\x41\xc1\x85\x7a\x31\x97\x0b\x86\x83\x38\x97\x8b\x1a\x9b\xcf\x03\xb8\x69\xde\x05\x2f\xc1\x69\x60\xb9\x0d\x95\x72\x55\xc5\xc1\x88\xb2\x58\xd5\xc8\x63\xb8\xf3\xbc\xc0\x96\x82\xad\xf4\xc8\x66\xe4\x6c\xdc\x13\x7d\xfd\x20\xe1\x61\x96\x64\xac\xa0\x05\x93\x64\x8a\xaf\x75\x6d\x67\x63\x38\x68\x24\xf1\x97\xde\x2b\x2d\x76\x15\xcd\x57\xb2\xaa\x8a\xc0\x30\xe2\x91\xd7\xe8\x5f\xf5\x6f\xbb\x24\xa1\x37\x1c\xe4\x3b\x4d\x39\x52\x79\xa3\x37\x32\xf8\x8c\x8f\x09\x95\x5e\x11\x3f\x3a\x96\xa0\xde\xd1\xf3\x05\xb5\xac\x48\x5b\x88\xd4\x67\x92\x9c\x67\x0b\xe6\xd5\x21\xad\xc9\x2f\xd5\x47\x09\x45\xdb\x11\x68\xd0\xdf\x39\x38\x1a\xdb\x86\x00\x09\x23\x41\x1f\xfe\xd1\x32\xee\x08\x6a\xb5\x70\x60\xbd\x6c\xae\x16\xac\xa0\xb6\xd4\xac\x5d\xaa\xdf\xad\x9f\x9b\x23\xf3\x1c\x14\x2d\x61\xa2\x9f\x5a\xec\xd0\x26\x2b\x95\x90\x37\xa3\x95\x28\x38\xcd\xd8\x56\x24\x92\xf4\xb2\x38\xce\x4c\x73\x66\x89\x9c\x4b\xa7\x36\x59\x30\x45\xbf\xb3\x65\x90\xe9\xaf\x6d\xcb\x15\xf7\xea\xd6\xa5\x6b\x38\xf0\xf9\xdd\x36\xb5\x53\xa1\x99\x29\x39\x42\x35\x5c\xaf\x60\x06\xde\xf5\x1d\xcf\x5f\xef\xc0\x0c\xab\x7e\x86\x24\x60\x24\x9d\xe0\xcb\x97\x62\xf5\x3e\xdb\x72\x2f\x8f\x7e\xb4\x59\x5c\xfa\xaa\x3a\xd6\x0c\x65\x35\x27\x63\xbb\x4d\xa2\x6f\x22\xc6\xb2\xaa\x8a\x06\x08\x63\xd8\x50\x1f\x75\x28\x69\x8b\x51\x29\xb6\x1c\xc2\x3c\xa2\xb0\xcb\x57\x9a\x22\xcb\xae\xd7\x5e\xb0\x95\x7a\xfc\xbd\xa6\x9f\x31\xd8\x8c\x33\xd8\x8b\x56\xc7\x65\xd2\x3d\x45\x25\x5c\x9e\xde\x4c\xbf\x1d\x8f\xc1\x59\x4d\xd0\xad\x48\x32\x98\x40\xa2\x79\xd7\x19\xfe\x9e\xe3\x1f\x7f\xea\xa6\xaf\x00\x7f\x04\x93\xf6\x82\xe1\xaa\x03\xeb\xd0\xe6\x50\x0b\xef\xcd\x8e\x15\x54\xc6\x71\x7f\xd2\x47\xcb\x26\x9e\xca\xb7\x7c\x25\xe2\xf8\x6d\x96\x64\xa3\x7d\x01\x25\x1f\xec\x2e\xa1\x75\x37\x50\xaf\x99\xad\xa6\xaf\xd2\x57\xc1\x7a\x71\xab\xe4\x36\x81\xfb\xa0\xe8\x02\xec\x5c\x9c\xc6\xc0\x38\x21\x11\xb8\x18\xd9\xc6\xb1\x4e\x34\x5a\x6e\x8f\xa6\x03\xff\x70\xd6\xed\x32\x7a\x6b\xf4\x30\xca\xcc\x1e\x6d\xde\xa3\x35\x38\x11\x4f\xbf\x5f\xb0\xf1\x69\x51\x53\xd8\x62\x30\x20\x5e\xca\x79\xb1\x60\x86\x62\x19\x92\x5b\x2c\x0c\x91\xc4\x90\x35\xf8\xc6\xe8\x86\xac\xb6\x19\xec\xd6\xf1\xf7\xc1\xd2\x67\x0c\xfd\xd2\xdd\x37\xca\xd1\x76\x48\x0f\x83\x4e\x77\xc7\x30\x40\x2a\x9d\xda\x2e\x54\x2d\x04\x98\x0d\xad\x09\x94\x1d\x80\xd6\xa5\x01\x99\xaa\x83\xdd\xde\xbd\x1a\x46\x67\x74\x91\xa5\x65\x55\x69\x86\x46\xd5\xf4\x15\x3a\xd4\x24\xba\xd8\xcb\xb3\xf1\x6c\x38\x99\x4e\x48\xef\x2f\xba\xf7\x7f\x35\xf6\x63\x00\x78\xa9\xe5\x8c\xfe\x84\x31\x87\x0c\x55\x55\x7d\xdd\xdc\xaa\xfa\xa9\x80\x4e\x79\xab\xe3\x2f\x96\xdf\x1b\xf1\x7f\xec\xd3\xbc\x4c\xa0\x32\x02\x17\x51\x25\xcf\x99\x32\xc3\x91\x78\x8b\xcc\x57\xa9\x7b\xaf\xcb\x70\x88\x00\x7e\x52\xe1\x62\x22\x56\x75\x8f\x8e\x97\x0f\x97\x2a\xbb\xca\xd4\x0d\x86\xde\xa9\x61\x16\x40\xc7\x52\xf7\x07\x97\x38\x7a\x3e\x06\xac\xcb\x5f\xbb\xfc\x48\xa8\x60\xe3\x53\x71\xa6\x1a\x67\x8b\xb0\xdc\x63\xea\x26\x68\x2e\x16\x60\xbf\xd6\x20\x39\x1d\x27\x93\x3e\xae\xbd\xc3\x48\x2c\xe8\x9e\xfd\x4d\x57\x9e\x5a\x7d\x64\x19\xc7\x96\x4f\x46\xcb\xb3\xdc\x26\x80\xa9\x83\xcf\xf0\x4b\x7f\x3c\x4d\xb2\xaa\xda\xf7\x99\xcd\x5d\x55\xb9\x7e\x80\xf9\xd4\xd4\xb6\xaa\x00\xbb\x34\x3c\xa6\xa8\x20\x84\x66\x73\xe1\x36\xc0\x9e\xe6\x4e\xff\x79\x92\xcd\xe0\xe0\x52\xde\xa1\xe5\xdf\x32\xfe\xd2\x71\x33\xe8\x33\x4e\x28\xe6\x6f\x53\xf9\x89\xaf\xde\xed\xd2\xa2\x89\x59\x1c\x7c\x6b\x19\xf9\x95\x2c\xf8\x3e\x4f\xf5\xf8\x94\xf8\x0a\x98\x17\xe3\xd4\x5e\x02\x03\x5d\x55\xc9\x7e\x04\x81\x62\xcb\xec\x8a\xbf\xe0\x6b\x35\xc3\x0f\x67\x70\x40\x4c\xcd\x83\xb2\xfa\x6d\x9b\x57\x89\x30\x27\x60\x98\xcd\xf4\xfb\x73\x9b\x51\x89\x73\xcc\x06\x8c\x56\x16\xc7\xc9\x5f\x31\x5c\x09\xec\x5d\x0c\xdc\xf3\xb4\x00\x37\x6a\xba\x1f\xf1\xcf\x9a\x67\xcf\x54\x7e\xf3\x58\xd3\x57\xbe\xc2\x6c\xe1\x38\xdc\x0e\x87\x69\x6f\x29\x0a\x95\x15\x7b\x7e\x40\xa5\x0a\xb8\xf4\x8f\x52\x25\xb6\xd9\x92\xd8\x6f\xc6\x3e\x0c\xee\x28\xe9\x92\xed\x11\x35\x56\x9e\x8d\x67\x93\xe9\x70\x02\x23\x0c\x4f\xcd\x1e\x4c\x1b\x83\x41\x20\xb2\xe6\x0f\x7a\xc2\x96\x74\x28\x29\x78\x31\x07\x4e\x37\x02\x54\x12\x84\xb4\x3f\xc5\x71\x92\x6b\xe6\x0f\x1c\xc2\xe3\x18\xea\xcb\xcf\xc6\xd3\xfc\xbc\x96\x65\x7f\xc1\x92\x15\x2c\x05\x23\x62\x7b\x8d\x45\x62\x52\xcb\xe9\xb3\x46\xf3\xa6\xcd\xf6\xa3\x08\x0f\xed\x5d\x53\x49\xd7\x47\xda\xba\x9e\xfd\x82\x49\xb0\x62\x8c\x10\x67\x57\xaf\xb7\x52\xff\xd6\xb1\x52\x65\x55\x4d\x68\xca\xdc\x22\x16\x34\x23\x55\xd5\xcf\xe2\xd8\x7b\xd5\x1f\x93\xaa\x72\xcf\xc3\x8e\x34\x43\x48\x64\x0f\x80\x14\x68\xdb\x32\x2d\xd4\xd3\x55\xa6\x34\x91\x0a\x04\x1d\x8f\xcc\xfc\xe0\x91\x19\xcb\x35\x6b\xd6\x7a\xcc\x60\xdd\xcd\x8c\xd0\x63\xf2\xce\xe0\x18\xda\x71\x23\x4d\x69\x61\x0b\x3a\x3b\x2d\xce\xc7\x71\xac\x33\x30\xa6\xd9\x6d\x7f\xfb\x05\x82\xcb\x2c\x14\xc3\x9c\x8c\x35\x73\x65\xc2\x45\x89\x29\x14\xed\x22\xac\x2d\xf0\x68\xb9\x19\xf8\x87\x3e\xb8\xe3\xb6\x50\x20\xcb\x8d\xb8\xae\x23\x40\x35\xbf\xee\x24\xdf\xa5\xde\x49\x97\xf8\x63\xa1\x54\x53\x2a\x32\x31\x22\xd1\xfb\x51\x1a\x97\xfa\xf2\xcb\x51\xc1\x00\x35\xc2\x9d\x15\x5f\x91\xde\x82\x85\xb5\xe5\x06\x8b\x1b\xa6\x99\x25\x65\x20\x57\x42\x06\xde\x01\xbf\x79\x54\x3c\x35\xf7\x8f\xa5\x11\xeb\x71\x16\x5b\x6e\xd1\x55\x55\x82\x72\xc0\x4e\x4a\xd3\xc1\x9a\xd4\xbe\xb9\x46\x73\x70\x9a\xec\x35\x13\xe5\x2e\x4d\x37\xe2\x1a\x49\xcf\xcf\x1b\x5e\xbc\xb3\x71\x4c\x35\x77\xaa\x07\xd3\x9c\x0b\x19\xa1\xfb\xaa\x92\xf0\x86\x8a\x5a\x5b\x20\x3d\xb7\x49\x15\x72\x59\x8f\xf1\xb9\xe9\x78\xe8\xf9\x58\x94\x59\x71\x99\x1b\xba\x87\xa6\x87\x6f\xb8\x7c\x61\x54\xfc\x45\xb7\x9f\x40\xf4\x7f\xff\x5f\x51\x47\x6c\x98\x88\x10\x04\xb5\x0f\xcc\x8f\x73\x6b\xaf\x49\x33\xcf\x05\x5b\xea\xff\xc3\xd7\x6d\xe3\x55\x67\x15\x06\xa9\xc9\x37\x1e\x6e\xa2\xd7\x5e\x2c\x45\x8e\x84\xda\x70\x27\x02\xff\xbe\x96\xfb\x1e\x1f\x25\x5f\x8a\x62\x95\xca\x9b\xba\x53\xa2\x6d\xf1\x29\xc2\x4e\x42\xdd\x5e\x57\x45\xd0\x55\xfc\xea\x3a\x2c\xc2\x0e\x8f\xfe\xfc\xed\x37\x89\x4d\xe4\x3a\xec\xf2\x18\x13\x5d\xcf\xdb\x54\xdd\x05\xbe\x02\xb8\x43\x5f\xb5\x55\x96\x41\x64\x84\x92\xa5\x18\xa7\x74\xef\xe3\x22\xd5\x21\x68\x28\xa0\x3e\x0c\xcd\x2b\xcf\xc7\x98\x0c\x53\xb4\xe0\xad\xf5\xcb\x79\x4d\x0c\x15\x28\x18\x20\x3e\x8a\xf2\x41\xb0\x15\x09\x41\xb1\x25\xa1\xe2\x2b\x11\xef\x4b\x23\xbc\x45\xdd\xb7\x8f\xd6\x4f\x85\xa3\x67\x0a\x04\x8f\x8b\x06\xaa\xe1\xa7\x62\x31\x74\x66\xfb\x21\x9f\x16\xc6\xf9\xab\x8e\x94\x93\xc8\xa1\xc1\x39\xf5\x29\x9b\xd3\x9b\x5f\x61\x28\x4e\xba\xd4\x1c\x52\x46\x15\x01\x1b\x1e\x8f\x40\xd7\x63\xb1\x49\xfc\x43\xe1\xbd\x32\x84\x1f\xbc\x8f\xa0\x7f\x4b\x5a\x2b\x5f\xda\x52\x31\xc0\x01\xda\x73\x59\x42\xfd\x51\xae\x64\xe4\x23\xd3\xf6\x27\x86\xa1\xe5\x35\xdb\x25\x2c\x27\xcb\xe7\x62\x71\x9a\xa4\xc8\x30\x15\x71\x9c\x02\x07\x54\x55\x8a\x31\xf3\xc4\x50\xc7\x2e\x93\x1a\x39\x12\x52\xeb\x6e\x39\x05\xa1\x4e\xa8\xdb\x3c\x61\xb0\x4e\xae\x78\x3e\x8b\xa4\xca\xa3\x29\xb6\x86\x66\x10\x1b\x35\xab\x2a\xbf\x8d\x87\xe4\x65\x96\x2c\x09\x2d\xaa\x0a\x4d\x4c\x18\x93\xb3\xf5\x54\x86\x4a\x08\x73\x86\x2f\xe9\x8e\xae\xe8\x96\x6d\x34\xf3\x6f\xee\x07\xb3\x75\xa2\xf9\x04\xb2\x64\x5b\xba\x63\x2b\xb6\x85\x25\xea\x02\xe8\x2f\xd9\x26\x51\xc3\x09\x35\xf7\x83\x84\x42\x93\x98\xf5\x0b\xba\x61\xdb\xde\x96\x2d\xe9\x92\xdd\x1c\x76\x26\x2f\x5d\xb1\x25\x2e\xd7\x83\x59\x01\x70\x48\x73\xc0\xcb\x29\x09\x5d\x42\x8c\xde\xad\xfe\xff\xfc\x81\xe6\x95\x92\x1d\x85\x27\x5c\x87\x5b\x8b\x65\x4b\x77\xac\x74\x4f\x67\x4b\x04\x40\xc1\xc4\xf8\x0e\xd3\xc3\x07\x2d\x66\x61\xe7\xe3\x58\x31\xb6\x8e\xe3\x64\xc5\xf6\x84\x26\x7d\x51\x55\x50\xf8\x99\xd0\xff\x9b\x07\xc6\x04\x16\x87\x2d\x86\x3b\x16\xe4\xf9\x04\xdb\xea\x5c\x69\x55\x2d\x4d\x2d\xe7\xa9\xf9\x51\xbf\xd2\x13\x64\x81\x66\x4d\x57\xcf\xcd\x0e\x45\x53\x90\x25\xa1\xbb\xb3\x72\x30\xb1\x5d\xd6\xad\x86\x76\xd2\xd5\x50\xff\x32\x3d\x3c\x10\xea\x02\xf9\xf2\x62\x35\x4d\xed\x65\x8b\xaa\x8d\xd5\x14\x1a\xab\x65\xeb\xc4\xf2\x74\xc6\xc0\x6c\xe9\xdf\x40\x80\x85\x19\x3a\xf2\xde\xa2\x71\x18\xec\x9a\xb5\xb9\xc7\x5b\xe1\xa3\xc9\x49\xb7\xec\x99\x4c\x76\x84\xe9\x3f\x2b\x42\x6f\x58\x58\xd6\x76\xb6\xf3\x37\xda\x60\x82\xdc\xe3\x88\x17\x2b\x7a\xc5\x96\xd6\xec\x6d\x3b\x1b\xe3\xad\x1c\xd4\x8d\xb7\xc4\x3d\x2d\x9c\xde\xc0\x78\x5f\xc1\x34\xdf\x9f\x25\x79\x72\x83\x63\x43\x6f\xea\x59\xbe\x71\xb3\x9c\x27\x25\x85\xb4\xf4\x0a\x97\xcf\x95\xfd\x44\xa6\xcd\xac\x98\x62\x58\xbf\xb4\x29\xdd\x4f\xac\x56\xaf\x93\xd2\xbd\xc3\x1a\xaf\x10\x08\x27\x3c\xb5\x7c\xb8\x95\x4c\x39\x58\x8b\xc0\x0c\xb4\x1d\x42\x1c\x14\x41\xcf\xb5\x04\x73\x95\xe6\x89\x1a\x5d\xe4\x59\xf1\x89\x4b\xab\x96\xef\x8f\x7b\xaa\x06\x35\x32\x27\x11\xe0\xe6\x40\x78\x3f\x7d\xb6\x35\x8f\xd9\x47\xba\x84\xb7\xa9\xe2\xe7\xe3\x99\x2b\x8f\x95\x5c\xb9\x5a\x3c\x93\xb2\x3b\x0b\x4f\x0a\xd6\x2f\x08\xc4\x0b\x41\x4b\x83\xe8\x70\xbc\x36\x32\x3d\xfa\x09\x0f\x95\x3b\xbb\x61\xca\xf7\xef\x9f\x85\x72\x80\x32\x26\xcc\x11\xae\x8b\x77\x7a\x40\x01\xa3\xc7\x8b\x41\x74\xd6\x64\xf2\x40\xc0\x87\xa1\x77\x61\xe4\xc1\x10\x5d\xd1\xa7\x22\x49\x55\xa8\x9f\x48\x55\x23\x86\x0e\x22\x3f\xba\xc2\x95\xbd\x5c\xf0\x5e\xda\x0b\x60\x84\x3b\xb2\x6f\xdb\xdc\xa6\x8b\xe1\xee\xd4\x84\x1e\x0a\xe2\xb5\x90\x9f\xde\x67\x00\x84\x50\xca\x44\x41\x2f\x69\x89\xb6\x1e\xb6\x48\xa2\xc9\xf5\x7c\x61\xe3\xf9\xd4\x1f\xbc\xfb\xa0\x00\x48\xb6\x05\x30\x34\xf8\x76\xec\x07\xb2\x17\xe6\x6a\xe8\x58\x9b\x81\x07\x36\xe7\x91\x61\x7e\x4a\xb0\x13\xf6\x36\xf2\x79\xdd\x87\x6d\xfa\xf9\x7b\x3b\xc4\x18\x59\x84\xee\xd9\x0f\x12\xd4\xab\xe5\xac\xee\x96\x24\x53\xd0\x62\x59\xfe\xac\x64\x7b\xf3\xc3\xa2\xeb\xe1\x23\xb8\x52\xf2\x12\x24\xee\x25\xfe\xee\x2d\x67\xe1\x47\xb6\x9c\xe6\x9a\xc2\x86\x2f\x43\x37\xd4\x35\xd3\xa4\x37\x75\x10\xba\xb6\x5a\x77\xbd\x9f\x03\xa0\x58\xd2\xcf\xab\xaa\xbf\xac\xaa\xbc\x06\x8a\x58\xd6\xc0\x0b\xb9\x0f\x14\xb1\xf4\x7d\x3d\x37\x6c\x7c\xda\x5f\xc7\xf1\xe6\x2c\xf5\x83\x75\xae\x59\x3a\xdf\x2c\xea\xea\xe6\x9b\x45\x6f\x1d\xc7\x99\x71\x02\xac\xa7\x15\x18\x4b\x17\x74\xab\x9c\xc9\xa9\x3f\x56\xd6\xc0\xd0\x1b\xf3\x33\x76\xd7\xa0\xc7\xb1\xd2\xf2\x27\xe6\xa0\xcd\xe2\xeb\x7a\xff\xf0\x2d\x63\xe3\x70\x5a\xac\x39\xca\x60\xe0\x2d\x2e\xb7\x5c\xcf\x9d\x81\x11\xec\xc8\x70\xf1\x82\x3e\x1d\x0c\x50\x21\xd6\xa0\x69\xc9\x77\x3a\x61\x87\xab\x01\x42\xfa\xd8\x74\xa7\x6a\x30\x20\x1c\x2c\x1d\xe7\x6a\x41\x11\x00\x86\x1c\x7c\x1a\x50\xb6\x99\x67\xb1\x44\xc6\xb9\x46\x49\x86\x48\xec\x01\x75\x08\x43\xfb\x8b\x96\x4e\xdb\xdd\x5e\xd1\x8c\x1a\x83\x7a\x9a\xb2\x62\x36\x9c\x4c\xd5\x30\xf1\x08\x4e\x56\x14\x1c\xbc\x34\x66\x13\xfe\x60\x0a\x61\xcd\x4a\xa6\x4e\xcb\xf3\xf4\x74\x38\x2c\x61\x1f\x95\x67\x16\x1f\xd1\x0d\x13\x3e\x1a\xcb\x0e\x30\xe4\x2e\x8d\xbe\x68\x1f\x86\x5d\xeb\x17\x55\x85\xf9\xdd\x5e\xb7\xc6\x54\x66\x4f\x2c\x45\xb2\xc7\x19\x85\x83\xc7\x8b\x9e\x95\x5e\xbc\xcb\x7e\xe3\xe4\xd4\xb0\xc6\x9a\x97\x3b\xcf\x41\xd9\xc8\xca\xe1\x84\x4a\x96\xd7\xaa\x44\xab\x97\xa6\x29\x13\xe7\xd2\x12\xb3\xeb\x2c\x91\x54\x0c\x27\xc4\x6b\x94\xd3\xa5\xb0\x54\xaf\x11\x1c\x59\x9a\x92\xe9\xde\x3e\x10\x2a\x91\x10\x09\xaa\x82\x10\xfa\xb0\xfc\xd0\xaf\x96\xa6\xd6\x58\x4c\xb3\xab\xc3\x49\x55\x09\x58\x76\x55\x25\xce\x59\xe6\x61\xc0\x89\x33\x1b\x1f\xb1\x57\x84\xbb\x21\xa8\x1c\xfa\x3e\x18\x88\x03\x68\xc0\x13\x59\x13\x61\x41\x68\xea\xf9\xaa\xab\x00\xd9\xc7\x45\xff\xac\xe1\xb5\x3c\x3f\xf1\x30\x2d\x42\x80\xfa\x38\x51\xc3\x76\x01\x4d\x00\xa9\x65\x7d\xcc\x87\x81\x07\x6b\xe3\xef\xf0\xbd\x81\x1b\x81\x08\xe4\xd6\xe0\x47\x8b\x4e\x3b\xc9\x23\x1a\x69\xf1\x85\x16\x0c\x23\x20\x8f\x9a\x71\x7b\x67\x47\xde\x27\x8a\x4c\x95\x45\xd7\x84\x37\x54\xb2\x5b\x90\xab\x76\xa9\x2c\xf9\xf3\x42\x25\x85\xef\x1a\x4c\x8c\x8b\x53\xfb\x2b\xaa\xff\xdc\x8d\x4a\x56\xbe\x4a\x5f\x19\xaf\x2f\x52\x55\xf6\x11\x99\x53\xa3\x6c\x0b\xc2\x2d\x4a\x42\x3d\xed\xc6\xda\x1f\xe1\x4c\x0c\xeb\x53\x26\xf4\xc3\xf5\x7c\xac\xc3\x39\xb9\x2b\xa6\xdf\x10\x4a\x1f\xb6\xa3\x6d\xd4\xa5\xed\xbe\xaa\x34\x33\xd9\x1d\xc5\x35\x67\x7b\xa5\x3c\x87\x7d\x6e\xb5\xa2\x66\xaa\x6f\xb7\xe9\x6e\xea\x26\x15\xec\x23\x61\x70\xbc\x77\xf0\x7c\x68\xc4\x94\xe3\x2d\x7f\x7e\x28\xdc\x78\xf3\xdf\x55\x7e\x39\x97\x8b\xee\x3a\xf4\x17\xac\xe7\x8e\x3a\xc0\x34\xcf\x54\x43\x1c\x8d\xff\xbd\xd5\x50\x54\xc4\x4f\xfb\x63\x8f\x6a\x6f\x55\x4b\xbd\x7a\xa9\x5f\x5d\x21\x47\x07\x1f\x3c\xdf\x2b\x55\x9b\xab\x1c\x41\x8a\x6c\x71\x77\xa4\x35\xab\x60\xdd\x68\x20\x88\x17\xad\xe8\x31\x77\xe0\x5f\xa9\x73\x86\x10\x58\xaf\x74\x45\xe6\xe7\x00\x21\x41\x67\xc5\x14\x62\xf5\x7b\xee\x15\xa6\x0f\x86\xa7\x7b\x9d\xa1\x6a\x04\xfa\x50\x90\x9e\x8c\xe3\x3e\x02\x44\xcd\x10\xb0\x67\x0a\x97\xf3\x35\x02\x2c\x00\xa5\x49\x5a\x50\xc4\xde\x76\x6e\x2b\x61\xc0\x72\x62\x7c\xb9\xba\x2c\x6b\x74\x95\x5a\xd8\x52\x24\x08\x17\xd0\x81\xd6\xc5\xaf\x4f\x7e\x51\xd6\x0e\x18\x5a\x87\x9d\x33\xa1\xb6\x32\x26\x11\xb6\x8b\x01\x6a\x97\x24\x35\x88\x3f\x00\x64\x20\x32\xc6\x1b\xd1\x08\x31\x58\x07\x72\x06\x60\x2e\x79\x40\xd4\x67\x53\xe4\x4a\x25\xd2\x54\x86\xeb\x09\x0c\x07\x31\xfa\xd9\x54\x52\xc9\x97\xc6\xfc\x52\xaf\xb3\xcc\xdb\x26\x26\x74\xab\x5d\x4f\xd9\x08\x7f\xd0\x4d\x5a\xe2\x3e\x2c\xa7\xfd\x89\xb7\xc6\x2e\x95\x7f\xab\xa0\x4c\x72\xb0\x8e\xd1\x67\x2d\x9c\x3e\x74\xcf\x8a\x41\x22\x01\xaf\xa9\xb6\x67\x82\x7a\xda\x70\x2b\xb3\x92\x99\x6f\xf3\xfd\x62\x9a\xa8\x91\x6e\x2b\xc0\x19\xe8\x1f\x06\xd0\x11\xd9\xb1\x23\x9e\xb3\x84\xaa\x51\xdd\xdc\xaa\x3a\x0a\xec\xdd\x19\xd2\x34\x63\x32\x8e\x81\x00\x1a\x48\x79\xbb\xd7\x36\xb6\x3c\x19\xc7\xf5\xdb\x6b\x04\x77\xcd\x6a\x2c\xbd\x46\x7a\x2d\x32\xa0\x95\x51\x23\x13\xcb\x7a\xf5\x55\xa0\x6a\x1a\xf5\xc2\xf1\xe2\x3a\x55\x26\x9a\xe1\x19\x9f\x96\x8e\xc7\x1d\x4e\xc0\x9b\xc6\x68\xc8\x53\x44\xaf\x49\xe7\xe5\x60\xb2\xe8\x81\x3c\x92\x5e\x94\xc9\xbe\x46\x9e\x34\x52\xf5\xf9\xfd\x38\x16\xc8\x02\xbb\xaf\x03\xc0\xa5\x24\xf7\xee\x0f\x0d\xb0\xec\xc1\xa4\xb0\x91\x61\xdc\x7b\x90\x87\x00\x0a\x18\x67\x23\x1c\x69\xd8\x30\x49\xc9\x8e\x18\xa9\x50\x30\x59\x57\xb0\xd6\xe0\x22\xd7\x82\x6e\xd2\x9c\x59\x83\xf4\x25\x03\x03\x75\xba\xf6\x6c\xd6\xf5\xe8\x3d\x60\x6c\xef\xcc\x7e\x6b\xbe\x11\x83\xf4\xff\xf1\x74\xa3\x47\x02\x30\x90\xf3\x38\x7e\x2f\xcc\xa5\x8d\xc1\x01\x33\x2e\x45\x08\xac\x01\x51\x82\x07\x39\x21\xa7\x64\x38\xcc\x61\x02\x4e\x83\x4f\xcb\x33\xf3\xf8\xb4\x58\x7d\x55\x59\x4b\x5d\xd6\x60\x00\xa2\x2a\xe0\x04\xfe\xbb\x85\x24\x5f\xa2\xe5\x3d\x96\x35\xf4\x33\x91\x8c\xed\x7d\x64\xb7\x63\x2e\xe0\x16\xc4\x4d\x1c\x03\x1a\x26\x46\x33\xf4\x49\x00\x32\xcb\x92\xb4\x96\x4d\x2f\x63\x3b\x7b\xfd\xb5\x9b\x3b\x97\x00\x39\xdb\xb9\x85\x34\x1d\x2f\xa6\x1f\x15\x0a\x3a\x59\x58\x54\x57\xab\xaa\xea\xa3\xc2\x0b\x0b\xcd\x8f\x54\x55\x86\x8c\x48\x55\xe9\x5e\xa3\x71\x7c\x6f\xc9\x72\x9a\x0f\xd9\x84\xae\xad\x17\xc2\x01\xc6\x66\x32\x01\xc6\xb8\xed\xa1\x6c\x78\xaa\x72\x29\x39\x2f\xaa\xca\xdc\x4c\xc3\xd3\x28\x17\x97\xd9\x32\xcd\x7f\x79\xf2\xe6\x79\x55\xb5\xdf\xb9\x74\x2b\x7e\x95\x2d\x39\x26\xeb\xfb\xae\xa6\xd9\x3a\x41\xc4\xe5\xbf\xba\x03\xeb\xaf\xc2\x63\x01\x81\xf5\x2b\x77\x69\x51\xf3\x7e\x47\x89\x0b\x95\x7a\x84\x14\x1d\xd3\xc9\xd1\x11\x72\x96\x30\x26\x58\x82\xde\x8a\x05\xaa\xb9\x0c\x13\x77\x3e\x39\xd4\x51\x21\x4e\x94\x39\x27\xdb\x7d\xbb\xd7\xea\x1a\x95\x8d\x64\xbf\xb6\x92\xe9\x37\x8e\xec\x6b\xf6\x53\x41\xa5\xdf\x14\x86\xdf\x54\x38\x61\xdf\x14\x54\x89\xdd\x54\xe9\xbd\xfd\x8d\x74\x98\x17\x66\xcf\x7f\x23\xf5\x76\xaf\x91\xf9\xed\x69\x43\x50\x22\xbe\xcd\x01\x6a\x63\xcd\x24\x73\x6a\xe4\x26\x88\x7d\x8d\x86\x9d\xec\xd8\xbe\xb5\x32\x89\xf3\x65\xbe\x6b\x61\xee\x8f\x0d\xf2\xc1\xdb\x6f\xfd\x5c\x0b\x71\x59\x55\xf5\x71\x51\xc6\x71\xdf\xac\x4a\xa3\xf5\x59\xb5\xf6\x5b\xd0\x94\xf9\x78\xd1\xcb\xd8\x6a\x86\xc3\xb5\x42\x9d\x25\x0e\x16\x3e\x0c\x82\xc8\xd5\x30\x6e\x2b\xd0\x5e\x9a\x51\x5b\x99\x51\x3b\xe8\x8d\x64\xa9\xd3\x16\x42\xd6\xee\x86\x48\x2b\x21\xf9\x0d\xcb\x2c\x4d\xf5\xde\x5e\xb1\x64\x3b\xb8\x21\xf7\xee\xd3\x4b\x7b\xbe\x35\x0e\x11\x8a\x94\xee\xd2\x0d\x4d\x1c\xf7\x93\xab\xb3\xcb\xf9\x66\x41\x80\xfa\x9d\x82\xdb\x3a\xdb\xcc\x2e\xe7\x9b\xe1\x64\x31\x1d\xd3\x8f\x4c\x7f\xa5\xd7\x46\x04\x49\xdc\x08\xaf\x67\x66\x6c\xa6\x38\x58\xc4\x36\xc5\xeb\x75\x82\x57\x09\x98\x18\xf2\xdb\xf1\x0c\x12\xeb\x71\xb8\xb0\x63\xf0\xf1\xd0\x6b\x91\x84\xe4\x7a\x74\x21\x2e\xf7\x70\x34\xf4\xbe\xe2\xf6\x14\x72\x48\x25\x76\x6c\x4b\xaf\x47\xd2\xa8\xe6\x6f\xdc\x8e\xba\x3e\xb8\x43\x85\x60\xc9\xc0\x19\x58\x76\x81\x95\x84\x50\xec\x6f\xe9\x77\xa7\x34\xca\x65\xdd\xde\x6c\x56\x42\x0d\x60\xd4\xe2\x26\x10\xde\x9a\xdf\xa5\x9d\xcc\xc3\x6b\xde\x40\xad\xc8\x8a\x4c\x75\x60\x22\xa9\x4d\x56\x6a\xa2\x81\xce\x6b\xd4\x04\x4f\x35\xe8\x52\xec\x21\x4f\x5c\xec\x53\xeb\x0d\x68\xc3\xbc\x34\x62\x39\x94\x2e\x96\x95\x48\x0a\xca\xd1\x6c\xa6\xd3\x30\x93\x5c\x70\x76\x6b\x1d\xcd\xa7\xfd\x09\xba\x85\x17\x7a\x69\x3b\xfb\x02\x88\x47\xa9\xba\x3c\x1b\x41\x83\x1a\xfa\x4a\x1e\x73\x80\xcc\x46\x57\x69\xbe\xe7\xac\xed\xca\x4e\x6f\x44\x92\x11\xe2\xee\x95\xfa\x45\xb8\xfd\xb3\x92\x3f\x16\xbb\x9b\xc7\x7b\x2b\x3b\x19\x6b\xbc\xcf\x3c\x29\x48\x2f\x6c\xff\x18\xdb\x8f\x2c\xef\x81\x82\x8f\x3a\x80\x01\xdf\xec\xf8\xac\x18\x95\x41\xaf\x9c\xed\x1f\x70\xb0\xa9\x20\xd3\x66\x6f\x6c\xa3\xe5\x91\x36\x1f\x82\x0a\x20\xb8\x40\x87\x3b\xfa\x98\x1c\x0e\xbc\x3b\xbc\xa8\xa4\xf5\x07\x0f\x24\x15\x9c\x1f\xb3\x06\x84\x11\xa0\x7d\x61\x1c\x59\xf4\xb9\xf7\x55\x72\x9a\x84\x9d\xb3\x7f\xd7\x2c\xa5\xef\x65\x0a\x13\x14\xb8\x9d\x5a\x84\xd0\x9d\xc8\xf3\xa4\x8e\x4c\x8b\xce\xe7\x01\xb2\x82\x59\x3b\x55\x05\x3e\xf4\x05\xc4\x1c\xe8\xf4\xc1\xd7\xa3\x3e\x5a\xa7\xa5\x7a\x03\x65\xd6\x85\xea\xc1\xa1\xa5\x7b\x12\xbb\x1b\xfb\x58\x87\xc3\x6a\x57\x2d\xc9\x6d\x59\x80\x04\x53\x55\xd0\x06\xf9\xa5\xaa\x11\x79\xc3\xd4\xeb\xa9\x79\x68\x84\xb7\xd5\xc0\x14\x7a\x35\x28\x53\x83\x22\x55\xf5\xbd\x16\xf9\xea\x16\xa3\x33\x2e\xac\x8f\x46\x26\xeb\x8c\x0b\x7b\x03\x69\x4e\x12\xad\xa5\xd8\x46\xa4\xa7\x6a\x2f\x5e\xb0\x20\xb2\x0f\xb8\xc0\x5c\x3c\x5c\xef\x0b\x33\xb7\x7b\x1c\x3d\xa2\xa7\x05\xd8\xb4\xbd\xe7\x9f\x41\xf2\xf4\xab\x50\x22\x22\xf4\xd6\x41\x27\x4e\x03\xfb\x09\x5b\x5c\x74\x20\x87\xae\x4e\xf0\x62\x15\x74\x21\x68\x68\x62\x57\x01\xfd\xba\x26\xc3\xd2\x39\x90\x03\x6d\x1a\x20\x1d\x81\xff\x59\x6e\x69\x47\xc8\x74\x4d\xd6\xac\x58\xe4\x29\xc0\xc5\x15\x1a\xaa\xfe\x9c\xa9\x0d\x76\xdd\x1a\xa5\x3f\xc6\x21\x69\x9b\xd6\xe2\x15\x3e\x01\xf0\x76\xbb\x89\x8e\xb1\x5b\xa9\x87\xfb\x7f\x94\xdd\x1a\x29\xfe\x5e\xec\x7c\x1b\x18\xef\x4a\xa6\x2b\xd0\xd9\x70\x32\x06\xcf\xa4\xdd\x20\x85\x23\x5a\x98\x0b\x67\x5d\x12\xe0\x74\x7d\x4d\x51\xa8\xff\x82\x92\x80\x47\x40\x4b\x90\xa1\xb9\x78\x26\xb5\x9d\x11\x0d\xcc\xc2\x8e\x9c\x1f\x9e\xd7\x4a\xef\x8d\xf0\xaf\xe9\x50\x39\x51\x0a\x59\x12\x0a\x5f\xfc\x60\x2a\x68\xc3\x8b\x8f\x78\x61\x8e\x48\xcb\xef\x21\xb4\x88\x7f\x0e\x79\xb6\x35\x26\x01\xda\xd5\x74\xa4\x31\xb0\x71\x38\x16\x26\xe0\x22\x95\xbc\xe4\xe1\xe1\x07\xf2\x31\xba\xc2\x17\x9a\xce\xbe\xe4\xc5\xfe\x0d\x87\xf9\x31\x3d\xd3\x27\xb5\x5b\x53\x19\x93\xf6\x4e\xaf\xd3\xa9\xc0\x58\xae\xfb\x84\xdc\x68\xaf\xb3\x86\x53\xcc\x9e\x25\x8a\xfd\x8b\x88\xe3\xc4\xb3\x20\x1b\x86\xe6\x66\x00\x79\x91\x14\x4c\x06\x47\xa2\xcf\x76\xf2\x07\x84\xcc\xa2\x61\x34\x2d\xaa\xaa\x99\xaa\x17\x9c\xd6\xe6\x34\xd9\x53\xd9\x0c\x0e\x7d\x23\x92\x20\x25\x62\xc5\x03\x41\x4f\xda\xd0\x01\x7b\x73\x9d\xa4\xf9\x9c\x46\x5f\xbb\xea\x8b\xa2\x3b\x4b\x43\xfb\xcf\xde\x51\xf4\x02\x75\x38\xd0\x4b\xae\x9e\x65\x3c\x5f\xb5\x81\xb6\x4e\x82\x1a\x0f\xb4\xdc\xef\x76\x42\xaa\xf2\xbd\xd8\x2f\x37\xed\xe4\xfd\xc9\x81\x42\xaf\xfd\x4f\xd9\x3a\x89\x0a\x61\x2c\xbe\xfa\x6e\x19\x5b\xda\x20\x0d\xb6\x8a\x66\xce\xb7\x55\x85\xb1\x83\xc2\xe1\x22\x4a\xde\xdc\x86\x7d\xb7\x91\xb4\x97\xa9\x5a\x6e\x92\x5f\x05\x20\x77\x5d\xe4\xfb\x00\xcc\x2b\xcc\xa2\xbf\x26\x76\x89\xbe\xb1\xd6\x4d\xcd\xe4\xed\x7d\x70\x6c\xe9\x8f\x75\x51\x4b\x9e\x5d\xf1\xd5\xb3\x66\x9f\x21\x4f\x99\x8b\x6b\x3c\x34\x0f\xd4\xfe\xee\x26\xa6\x3d\xee\x23\x50\x54\x95\x7b\xc4\x5b\xf0\xc6\x88\xe9\x6f\xd6\x3c\x20\x0c\x4a\x6e\x08\x3e\x78\x03\x34\xd6\x20\xf7\x9b\x43\x0e\xd4\x9e\xe8\xed\x06\x69\x36\x11\x5b\xa5\x42\x5c\x8c\x31\x55\x41\xbb\xee\x8f\x43\xac\x3a\x7b\xe0\x54\x15\x9f\x25\xaa\x85\xa9\xe1\x35\x80\x4c\x13\xde\x2e\xef\x4f\x63\x5a\x10\x3c\x82\x8e\x8e\x14\x1e\x3b\xc1\xc4\x5a\x9e\xda\x6d\x13\xb0\x07\xe8\xa6\x38\xe0\x82\xd1\xc0\xfa\xfa\x8b\x48\x14\x89\xe3\x7e\x11\xc7\xfd\x10\xb3\x43\x4f\x44\x08\xfe\xc3\x8f\x80\xff\xd8\x42\x3f\xf1\x9b\x77\xfc\x1f\x61\x28\x38\xa9\xc5\x35\xbd\x55\x81\xa6\x81\x55\x94\x6e\x44\x07\x69\x73\xd9\x8c\xd4\x8a\x2c\x5f\x6b\x4b\x33\x26\xab\xea\x26\x8e\xef\xcd\x3f\xec\xd7\xff\x36\x1e\x0f\xf5\x9f\xf5\x7a\x71\x0f\x11\x6c\xea\x7b\xc9\xa6\x69\x31\xac\xfc\xc4\x06\xc2\x74\x40\x31\x3e\x7c\x41\xc9\xf3\x67\x42\x3e\xae\x07\xae\x86\x81\x5e\x6e\x52\xf9\x18\x81\x7e\x10\x1a\xe0\xcf\xf7\xc7\x0f\xfa\x2c\xab\xaa\x02\x68\x68\xf4\x3f\xfe\xb7\xff\x23\x22\xf4\xcf\x7f\xfa\xd3\x9f\x18\xcb\x88\x4f\x40\x6c\xc5\x76\x25\xf3\xcf\x7c\xf9\x58\x6c\xb7\x69\xb1\x4a\xa2\x7d\xb1\x12\x11\x39\x78\xd8\x40\xce\x4e\x32\x2b\x5c\x54\x5d\x6a\x9d\xf3\xc8\x69\x79\xb6\x8f\xe3\xc2\x6f\x4f\x09\x2e\x68\xc1\x8b\x53\x32\x18\xd8\x7b\x59\x58\xcc\xa6\x3d\xcd\xdb\x6e\x00\x6d\x93\xc6\xcb\xa3\x24\xd4\xd6\x37\x34\x82\x43\x5e\x2f\x87\x59\xf4\x0d\xfe\xe6\x11\x1a\x46\xb9\x36\xe9\x63\x42\x1f\x0f\x16\xb1\x08\xa4\x88\xf3\xe1\x64\x66\x66\x9e\xe5\xc1\x81\x35\xf5\x1f\xa5\x5f\x45\x1c\x27\xf9\x51\x6e\xad\xf5\x85\xf1\x9a\xaf\xf4\x3f\xa2\x9a\x94\xff\x33\x7c\xa6\x01\xa8\xa2\x18\x8c\x5b\xef\x56\xbe\x6a\x11\x36\x6f\x67\x9b\xf5\x89\x1b\xdf\x1e\x40\xe1\xce\x27\x07\x2a\x8a\xbf\xf0\x9b\x37\x92\x97\x01\x91\xfc\xe2\xb1\x65\xc2\xc4\x3a\xd9\x43\x17\xe4\x2d\xcd\x3b\x64\x6c\x14\xb0\x0b\xcf\x7a\x57\xd5\xf4\x62\xcf\xf6\x05\x08\x3f\x34\x67\xb2\x2b\x34\x7a\xb6\x4e\xf6\x71\xdc\x5f\x92\xdb\xc2\x3b\xa6\x7c\xf1\xf2\xb5\xdf\x8e\x38\x1e\x4e\x98\xae\xcc\xe0\x2e\x69\xb2\x93\x66\x45\x09\xb0\xf0\x7f\x51\x49\x41\x7f\xe5\x24\x81\xef\xf4\x39\x4f\xf6\x44\x4b\xa3\x3d\xb4\x7a\xb1\x62\xe0\xb2\x2c\xf5\x34\x52\x2f\x20\x5d\xf8\xa5\x77\xe4\x3d\xeb\x30\xd4\x8d\x0c\x4e\xdc\x17\x19\x67\xdf\xa4\xfc\x8e\xf2\x6a\x18\xa0\xb1\x6f\xca\x8b\x4f\xc6\x08\x38\xb1\x18\xbb\xbf\x0e\x77\xc0\x2d\x7f\x6b\x0c\x7f\xbd\x78\x09\x98\xe0\x97\xe1\x0e\x79\x60\x9b\xe2\xb7\x21\xec\x9b\xe9\xc9\x64\x3c\x1e\x9f\x9e\xd4\xb1\x28\x20\x9b\x98\x45\xf2\xf2\x22\x4d\xee\x7f\xfb\x2d\x3d\xa9\xff\x1b\x8d\xbf\x25\xd1\x34\x52\x32\x2d\x4a\x54\xda\x45\x64\x10\x35\xb0\x8f\x4e\x4f\x10\x5b\x68\x68\xda\x3f\x6e\x7d\x6f\xa3\x20\x89\x5d\xba\xcc\xd4\xcd\x54\xd7\x70\x7a\xb2\xce\x72\xc5\xe5\xf4\x24\xcd\x77\x9b\x34\x31\xdf\xd8\xb7\xe4\x54\xcb\xba\xa8\x34\xac\xb5\xd2\x22\xcf\x7f\x45\xc6\x35\x04\x8d\x2c\xe3\x38\x48\xf4\x5e\x20\x42\xe7\x0a\xcc\x33\x02\xd2\xdc\xa9\xc6\xa9\xaa\xc4\xea\x2a\x02\x15\xc6\x49\x84\x22\x5c\xf3\x94\xd3\x47\xab\x6c\x93\xf2\x7a\x89\x22\xee\xe9\xfb\x6c\xcb\xc5\x5e\x25\x72\xb4\xe2\x0a\xbd\x22\xb0\xce\x87\x7a\xef\xb9\xdd\xa9\x79\xe9\x6b\x72\xfb\x8f\xcc\x86\xf4\xdb\xfa\xc0\xa4\xff\x92\x25\xd8\x37\x1a\x6d\xc5\xbe\xe4\xfb\x5d\x44\xb7\x84\x96\x5c\xd9\xe2\xaf\xe8\xfd\x31\x39\xf4\x7e\xed\x4c\x68\x50\x21\xfd\xd4\xdf\xfa\x28\x0b\x37\x89\xa7\x99\xcf\x6a\x29\x06\x6f\x48\x9c\xd0\xde\x31\x68\x54\xe0\x89\x34\x48\xf8\xcc\x8c\xde\x34\x8a\x48\xcf\x8e\x64\xf4\x3f\xfe\xf7\xff\xb3\xd6\x01\x09\xea\x8f\x2c\x07\x33\x4a\x9d\x9b\x36\xeb\x64\x13\xff\xd5\xd3\x62\xc5\x44\x7d\x42\xdd\x31\xe4\xde\x6d\xe8\x55\x62\x6c\xfa\xba\x66\x4e\x33\x4a\xdd\x1b\x7d\x43\x9b\x5b\x75\x4d\xad\x6e\x5b\xd6\x30\xb5\xe5\xc8\x87\xbb\x4d\xba\x08\x1c\xcb\xad\x10\xd8\x1e\x51\x30\x9c\xc6\x62\x09\xcc\x7d\xcf\xc0\xce\xd2\xd2\x9f\xf6\xae\xbe\xd6\x9d\x85\xcb\xad\x66\xd9\x71\x1c\x0e\xdc\xf9\x38\x8e\x61\x8c\x99\xbf\xaa\x67\x40\x30\x73\xeb\x9b\xa4\x97\x62\x52\x90\x29\x1f\x0c\xce\x26\xe3\x59\xd7\x52\x65\xde\xea\x29\xe9\xb7\xe3\x31\x99\x36\x76\xd5\xa1\xf7\xe5\x7c\xf7\xc7\x63\x72\x38\x68\x96\x1e\xb9\x3d\xe3\x3d\x1b\x9c\x31\xbc\xaa\x7c\x76\x06\x80\x85\xeb\x78\x06\xd3\x0b\x41\x0b\xce\x57\xa5\x41\x81\x71\xd0\x67\x53\x2d\x16\xf9\x5a\x62\x42\x3f\xfd\x4e\x9d\xb1\x51\x18\x8f\x56\xd9\x95\x89\x9d\xf4\x24\xbb\xaa\x35\xc2\xd9\x7f\xbf\x46\xb8\xa1\xfb\x2c\x6c\x08\xaf\x5a\xfc\x8d\xac\xff\x88\x4e\xf9\x7b\x15\xbc\xea\x2e\x05\xaf\xea\x52\xf0\x82\x13\xf9\x8e\xcb\x14\x2a\xf7\x96\x62\x53\xf1\xeb\xbc\xde\xc7\xfa\x9c\xa5\x5f\x6c\xf9\x01\x6e\x89\x5a\xe0\xa1\xfd\x15\xe9\x40\x03\x6d\x42\x8a\x02\x21\x05\x50\xd1\xf6\xb7\xb2\x03\x6e\x94\xb6\x35\xe4\x9e\xf5\xbe\xbb\x06\x08\x14\xff\x45\x60\xd2\x81\x26\x6e\x0d\x3d\x73\x57\x12\x5f\xe3\x7c\x5c\x3f\x6f\x8c\x2e\x9d\x53\x53\xba\x54\xd9\x15\x7f\x8a\x68\xe2\x3d\x50\x84\xfb\xc4\x3c\x18\xf7\x76\x9d\x61\xc4\x17\x2a\x9c\x9c\x0e\x54\xfd\x70\x78\xc7\xf5\xeb\x5f\xb3\xa4\x43\x33\xdc\xa1\x94\x3e\xd8\xb4\x77\x68\x6e\xb9\x67\x6e\x9a\xaa\xb4\x67\x28\x6b\xad\x89\xe5\xf9\xb4\x3e\xf8\x74\x92\xa9\xa4\x50\xc8\x13\xf8\x7d\xa8\x01\x32\x6a\x16\xae\xd6\x22\x09\x54\x09\xbf\xc8\x0a\x9e\x04\x90\xa0\x96\xd7\xb7\x96\xdd\xa0\x06\x74\xd0\xa0\x43\x27\xae\x90\x9e\x80\x98\xd1\xe2\x8c\xb9\xaf\x68\x61\x5f\xf3\xeb\x3c\x67\xcf\x01\x5b\xca\x47\x11\x15\x80\xc5\x15\xbc\x19\xd4\xa5\x5a\x8d\x70\x38\x38\x36\x8c\xae\x3f\x3a\x7e\x4d\xba\xfb\x66\xa0\xba\xb2\x87\x0a\x65\x5e\x47\x02\x74\x25\xf4\x0a\x00\x21\x80\x72\x58\x31\x72\xe3\x58\x55\xf7\x3e\xec\xef\x8f\xc7\x17\x46\x08\xc5\x24\xa8\xda\xf7\x2a\x3d\xbe\x96\x30\xe6\xcc\xaa\xaa\x14\x62\x98\x3f\xae\x5b\x95\x14\xa1\xa6\x9a\x15\xe1\xf8\x19\xd5\xb5\x5e\x62\xf5\x8a\x51\x62\xbf\xdc\xb4\xb5\xfc\x26\x00\xbc\x57\xfa\xd3\x62\x95\xd4\xd9\xda\x77\x2f\xca\xd7\x07\xf4\x8b\x40\x21\x10\xc7\xa8\xc1\x30\x14\x5f\x73\x6a\xdf\xa9\x04\xa8\xb5\x57\xc2\x0f\x2a\x01\x34\xfd\x7a\xc0\x77\x37\x11\xcd\xdc\xa3\xae\x30\xfb\x3a\xc5\xbb\x53\x06\xd1\xbe\x73\x13\x3f\x31\xba\x0c\xa7\x59\x0b\xf4\x1b\x94\x1f\xd7\x2c\x83\xc3\x86\x91\xe0\x3c\x38\x24\x0f\x9c\x30\x8e\x93\xc4\x14\x55\x55\x0e\xc2\x5e\x97\xf7\x06\x77\x88\xa7\x0d\xa5\xee\xdb\xcb\x7d\xae\xb2\x5d\xce\x3d\xa2\xcc\x09\xc1\x76\x34\xf3\xb5\x3b\x59\x5b\xce\x06\x85\xd7\xfa\xef\xd6\x1e\x95\xec\x31\x77\x03\xc3\x0d\xaa\xc3\x2b\x0c\xdb\x99\x7a\x20\xa0\x9a\xb2\x06\x29\xd7\x16\x0b\xd4\xfe\x36\xe9\x7a\x16\x16\x72\x74\x91\xae\xaa\xaa\x9f\x55\x55\x86\x3f\xc7\x80\xee\x74\x85\xb8\x4f\x35\x80\x9a\xfd\x70\xe3\x3e\x00\xa0\x99\xb5\xf7\x7a\x59\x57\xea\xb2\xd0\x34\x7c\x0d\x19\x40\xf3\x53\x55\x0e\xd8\xa1\x6b\x6a\xe8\x9e\x71\x3c\xe2\x1e\x8b\x7d\xa1\xe2\xb8\x06\xe8\x75\xaa\x19\xf4\x1a\xe9\x9b\x72\x72\x56\xce\x6b\xe8\x93\x85\xb3\xd3\x58\xb2\x1c\x8c\x46\x67\xf8\x67\x8e\x7f\xea\x84\x53\x78\xd1\x4b\xd9\x6d\x21\x56\x7c\xba\x9c\x2f\xeb\x6f\x14\x8d\xac\xfd\x97\xf7\x17\x43\xef\xe9\xc1\xe2\x60\x81\x97\x4d\xfe\x72\x3e\x5e\xf8\xc6\xaa\xf3\xfb\xae\x94\xf1\xa1\xa7\xe4\xcd\x2d\xca\xc4\x9f\x84\xc1\xbc\xa4\x36\xde\x2e\x4d\xeb\x1f\xfa\x43\xa0\xf7\x5d\x83\x6d\x7e\xbd\x8c\x83\xe5\x3f\xd3\x07\xbb\xb1\x11\x6b\x96\x4a\xe8\xda\x7d\x5b\x55\x15\x1f\xa5\xab\x15\xe2\x1c\xaf\x41\x43\x69\x4e\xb3\x87\x79\x0e\x6f\x4b\x38\xe2\xfd\x34\x74\x8f\x51\xda\x35\x8b\x52\x2f\xba\x99\x97\x68\x0f\xf1\x46\x71\x63\x68\x5a\xf4\x5d\x8d\x1f\x0b\x26\x88\xc8\x4d\x6e\xf9\xf6\x82\x4b\x6f\xb5\x6b\x46\xb4\x99\xfe\x88\xe6\x38\x90\xe4\x9a\x18\xb5\xa4\x8d\x5a\xdb\x4d\x7f\x79\x03\xd9\xd6\xbf\x30\x32\x9c\xb0\xa6\x76\x06\xa9\xa9\x83\x09\xbb\x1b\x80\xe6\x40\x0e\x20\x04\xd2\x6e\xea\x10\x30\xbe\x6f\x44\xd2\x5c\xf5\x47\x2f\xb9\x1a\xe9\x8e\x5e\x79\x69\xb6\xbe\x31\xc8\x5f\x49\x77\x7a\x5d\x08\xc3\x01\x89\xe9\x86\x1b\x0e\x09\x0f\xed\x40\x1f\xf6\xa9\x4f\x27\x12\x71\x40\x92\xb4\xac\x61\x1a\xf5\xbc\x78\xba\xca\x94\xe8\x08\xcb\xd2\xdd\x03\x90\x0b\x3c\x82\x11\x6a\xa7\x15\x6b\x90\x0f\x7d\xdc\x6d\x45\xf1\xb0\x58\xf2\x52\xa1\x80\x97\x66\x45\xed\x6c\xf2\xca\x8c\xfb\x2a\xbb\xa2\x8a\x74\xdc\xf7\x7c\xdd\x65\x8f\x2d\xa3\xe6\x10\x3b\x6f\x6f\x74\x0a\x7b\x71\xf3\xa5\x6b\xaa\x55\x76\xf5\xe5\x1b\xaa\xbb\x6e\x6d\xbc\x6d\x85\x5b\xb6\x39\xe4\x09\x99\x39\x05\xa7\x37\xc4\xd3\xef\xea\x73\xf9\x77\xec\x89\x00\x66\xfa\xeb\x6f\x7a\x4e\x94\x2d\xbb\x71\xc5\x93\xf0\x66\xc3\x68\x78\x91\xc4\x8f\x96\xad\xf0\xde\xa5\xd9\xcc\xaf\x5d\x62\x8e\x11\xa9\xf7\x45\xbf\x89\xc3\xad\x5f\x02\x91\xf5\xf6\x45\x2b\x11\xbe\xd6\xc9\xdc\xe6\xe8\x77\x40\x77\xbb\x04\xad\x62\x9e\xf9\x5b\x26\x18\x8d\xc6\x95\x64\xe3\xaa\xc7\xde\xfd\x78\x64\xd0\xd2\xed\x16\x1d\xfc\x4a\x46\xa5\x77\x8c\xba\x1b\x43\x4e\xcd\x89\xdc\xcd\xad\x48\x9b\xe6\x28\x9f\x52\xc4\xb1\x04\x0f\xbe\x20\xf4\xc4\xaf\x3c\x51\x56\xdb\x0c\x46\xd4\x5a\x0e\x4e\x0a\xe4\x60\x80\xa7\x21\xd6\xc7\xb7\x7b\x6d\x82\x5f\x1f\xf5\x38\xdb\xd6\x42\xa8\xbb\x09\xea\x09\xab\x67\x07\x1d\x45\x8b\x3f\x03\x79\x16\xfd\xda\x05\xa0\x93\x58\xcd\x33\x60\xba\x14\xce\x79\xa4\xaa\x84\x01\x30\xad\xf1\xbc\xfd\x3b\xb1\xcc\xb8\xf1\xf8\x39\xc6\x8c\x25\x9c\x15\x05\x00\xfe\x21\x9a\x0f\x41\x6b\xf9\xd7\x59\x82\x09\x35\xdb\x81\xfe\xef\x25\xab\xdf\x14\x10\xb2\x4a\xf3\x27\x7e\x52\xde\x4a\xca\x35\xc7\x04\xe1\x4c\xfd\x38\xa8\x68\x51\x0f\xd5\x8a\x1a\xc3\x6b\x6f\xdb\x56\xe3\xcc\x21\xff\x55\x77\x88\x2e\x8d\x07\xcb\x93\xec\x0a\x56\x2c\xca\xf8\xd0\x90\xdc\x6b\xc8\x7e\x30\x31\x4d\x31\x79\xea\xb7\xd0\x98\x2e\x6c\x63\x8b\x21\x00\x33\x50\x87\xe1\x69\x9a\xda\xd7\xc8\x4e\x51\x04\xb1\x3a\x68\x69\xa2\x46\x80\x20\xaf\x85\x90\x14\x88\x5d\xad\x60\xda\x27\x68\x82\x3d\xf1\xc1\xb9\x6b\xf1\xf0\xb2\x19\x1b\x14\xbd\x43\x7b\x4e\x73\x6b\x3d\x96\xa2\x08\xa5\x37\x1b\x5d\xde\x02\x26\x1b\x15\x4d\x62\x85\xc8\x4b\x1a\x45\x84\xd0\x2b\x91\xad\x12\x31\x60\x05\xee\x99\x9c\x2e\xbb\x2a\x43\xa0\x33\xac\x6e\x49\x0c\x13\x09\x41\xb4\x56\x2f\x53\xf9\x09\x90\xe2\x25\x1d\xa3\x38\x0d\xe0\x4d\x34\x59\xb1\xc1\xb2\x23\xd2\xd0\x09\x1f\x65\x2b\xc6\x56\x07\xe2\x88\x1a\xb4\x61\x5d\xcb\x43\x39\x5b\xeb\xe5\x03\x88\x5d\x80\xf2\x25\x06\xec\xa9\x45\xf0\xcf\x11\xdd\x23\x1f\x29\x41\x50\xc9\x52\x6a\x51\x3d\x5b\x27\x26\x34\x05\x6b\x77\x00\x87\xc0\x6a\x11\x23\x7b\x7b\xdb\x0b\xfd\x17\x3a\x30\xcf\xc1\xa6\x77\x9f\xf8\x5f\xc0\xd4\xf7\xde\x7f\x24\x3b\xc9\xab\x55\x76\x55\xed\xc8\xbf\xdc\xcb\x50\x22\xc7\x79\x7b\x95\x6e\x39\x42\x55\xe8\x5d\x6e\x5d\x07\x1e\xb4\xa7\x75\x67\xde\xfc\x64\x6f\xae\xfb\x3b\xdb\xb0\x14\x3b\x5d\xc2\xda\x21\x54\x0c\xd8\x0e\x21\xb7\xe1\x0e\xf7\x54\xaf\x15\xaa\xfa\xac\x38\x25\x10\xb8\xd7\xdb\x35\xd6\xe7\xf6\x90\x28\x5a\xd2\x25\x4d\x69\x4e\x08\xdd\xe8\xf1\x43\x82\xb5\xe3\x49\x6a\x66\x2a\xa7\xd7\xf6\x6d\x1e\x22\x0b\x93\xd3\xb5\xbb\x77\x8d\xe3\x8d\xfb\x7d\x4a\xb2\x75\xb2\x15\xc9\x9a\x30\xb6\x15\xc9\x86\x90\xf5\x68\x27\x76\x09\xa1\x1b\xf3\x37\x1f\x0e\x9d\x9e\x52\xcf\x62\x9f\x6d\xe6\xe3\x85\x71\x47\x58\x23\x0e\x30\x24\xb7\xbf\xd2\xc1\xc0\x5d\x4c\xef\xd8\x98\xae\xd8\x98\x6e\x61\x01\xd0\x1b\xc8\x4b\xaf\xea\xab\xea\xad\xbd\x08\xb8\x71\x57\xd5\xbb\xb3\xab\x38\xde\xfa\x37\xd3\x3b\xc2\xd8\x4d\xf8\xe2\x94\x0c\x06\x3b\x37\xdd\x97\x0c\xba\x40\x2f\xb0\x0f\xf4\x63\x5d\x81\xb3\xec\xd6\xfb\x70\xed\x1c\x36\xa6\x63\x42\x2f\xfc\x4f\x1b\xff\x13\x39\x5d\x9d\x7d\x8c\xe3\x4b\xbf\x4e\x57\xd0\x6a\x38\x21\x8c\x5d\xf8\xdf\x2e\xfc\x6f\xba\x69\xab\xde\x7a\xbe\xf6\xe0\x55\x2f\x1d\x24\x62\x5d\x0c\xa1\x7a\x4c\x70\x67\xe0\xd7\x1d\x6e\xd9\x6b\x06\x53\xba\x23\xf4\x29\x83\x49\x75\x6d\x83\xde\xb9\x02\xa6\x35\x32\x5c\x3d\xb9\x55\xa5\x0b\xac\xaa\x15\x4f\xae\xe9\x53\x32\x4b\x7e\x2c\xcc\x8a\x58\xd3\x6b\xfa\x94\xba\xf0\x54\xb4\x3f\x26\xd6\xf9\xef\xee\xab\xeb\x6e\xed\x4f\xd3\x6c\xed\xee\xc4\x1d\xaf\x5b\x59\x5b\x8c\x45\xad\x83\x33\x9a\x2e\x7b\xed\xdd\xd2\x76\x85\xc9\x09\xed\xce\x0e\xe6\x33\x21\x87\x4c\x9b\x3c\x35\x39\xd0\x66\xe9\xed\x08\xa0\xcb\x6d\xa0\xd2\x9a\xfd\xa5\xe6\x65\x7f\x50\xc4\xfe\x26\x53\x54\xe0\x01\x94\x47\xaa\xd2\x3e\xe3\xb5\xf2\x0f\x6e\xb9\x6d\xa6\x8f\x9c\x78\x1a\x16\x9d\x96\x8e\x51\x18\x6b\x5d\x98\x04\xaa\xdf\x91\x21\x84\x4f\xcd\x57\x66\x28\x66\xb7\xf5\x00\xe4\x68\xc7\xea\xea\xe8\x50\x55\x1d\x69\xdc\x3b\x25\xf5\x78\x6a\x82\xfd\xd8\x2c\xff\xc4\x4a\xf3\x76\x3f\xcc\xc0\xa4\x47\xff\x9a\xd6\x2f\x09\x1d\x93\xbb\x2f\x8a\xdc\x44\x34\xfb\x84\x75\x06\xf6\x70\xbc\x65\xd6\x70\x21\x1a\x36\x6a\xc7\x2f\x96\xc6\x87\xe0\x2a\x89\xd0\x77\x78\xf3\xf5\x0e\x31\x3b\x6e\xad\xcd\xc3\xf4\x35\xa7\x8d\x83\x66\xfa\x89\x1f\xe8\x1b\xff\x1e\xea\xd6\x70\x6c\xc7\xe4\x2b\x03\xdc\x17\x46\x2d\x58\x1c\x28\x42\xd6\x36\x8d\x3e\x39\x03\x0e\xb1\x46\x77\x80\x4b\x16\x97\xaf\xcf\xc2\x72\x34\x4b\x1f\xc0\x0a\x9a\x04\xc1\xbb\x9a\x1b\x0c\x41\x2a\xda\x29\x01\xae\xc2\xf2\x27\x7e\xe3\x17\xe0\x87\xeb\x9e\x74\xab\x50\x75\x57\x58\xfc\x58\x69\x11\x8d\xad\x52\xaf\x40\x7b\x64\x69\x70\x8d\x9d\xa9\x63\x2d\x51\xae\x38\xdf\x3d\x16\xbb\x60\xe4\xea\x88\x9d\xf3\x05\xbd\xb3\x99\x1c\xf0\xcf\x11\x55\x76\x6b\x54\x82\xae\x81\x0e\x5e\xb9\xfd\x05\x9b\xd3\x6b\xc5\x35\x08\xc6\x55\x6f\xba\xe6\x35\x60\x77\x33\x5d\x60\xd1\xb0\x85\xdc\xa0\x3b\xfa\x95\xf3\x85\x05\x5b\xac\xa7\xb7\xb6\x00\xb5\xf6\x2f\x0d\x4d\x33\xf8\xe7\x32\x4e\x9a\x58\xd3\xed\x2a\x0b\x3b\x77\x92\x85\xe0\xd3\x26\xd6\x84\xa2\xd2\x0b\x33\x11\xc7\x2b\xb4\xe1\x02\x0d\xea\x19\x1b\xbb\xc0\x3d\x66\x86\x86\x93\xc3\x81\xbe\x0a\x56\x3a\x86\x4a\x6c\x2d\xf3\x2b\x33\xc6\x66\x25\xb8\x78\x1b\xe4\x40\x95\xe8\x48\x7f\x73\x3c\x3d\x8c\xcf\xb1\x9d\xe4\xc5\xd4\xf3\xf2\x1b\x0c\xd9\x3a\xc5\x72\x13\x7e\x5f\x6e\x0e\x18\xc5\xf5\x42\xd1\x8f\xca\xf8\x6c\xb9\x18\xb8\xe0\xb8\xe4\xc2\x52\x8f\xbd\xb0\xaa\xd7\xaa\x13\x4b\x85\xa6\xc6\x5d\x98\xd7\xa1\xf7\x6c\xa4\x99\x3d\xe3\xe8\x2d\xcc\xd1\x5b\x38\x5b\x27\xea\x6c\x3f\x4b\x32\x36\xa6\x82\x4d\x5c\x24\x2a\x32\x55\x67\xf9\x4c\xb0\x24\x63\x6a\xb8\x27\x83\xc9\x34\x29\x35\x01\xb5\x4a\x60\x00\xc3\xcb\xe3\x58\x17\xf3\x60\x71\xae\x10\xf3\x24\x11\x2c\x1f\xee\xb5\x64\xa3\xce\xf5\xd7\x24\x75\x0e\x82\xce\x32\x01\xc3\x93\x42\xfd\xf7\x17\x74\x0f\xa5\x14\x8c\x25\xd6\xc7\x06\x90\x8b\xb1\x11\x53\x9b\x19\x4a\x2a\x08\xb5\x8e\x69\x08\x40\x97\x11\xf4\xe0\x85\x56\x0c\xef\x2f\x98\x2e\x74\xf8\x60\x81\xcf\x93\x85\x57\xe0\x29\xd1\x35\xde\x1f\x24\xe5\x90\x3d\x20\x8b\x3a\xe0\x96\xe6\xe0\xad\x6f\x5c\x11\xc7\x19\x83\x0e\x60\xb9\x67\x75\x77\x6d\x47\xa1\x8a\xc1\x1f\x17\x71\xdc\xd7\x3f\xbe\x6d\xd7\x91\xc0\x58\xeb\xae\xb9\xbe\xdb\x68\x85\xc6\x2b\x13\x74\xe6\xe6\xaa\x72\x9a\x01\x4e\x9c\xa0\x56\x5f\x3d\x4d\x69\xed\x29\x3c\xdd\x53\xeb\x41\x3c\xf5\x0d\x4d\x9e\xd6\x88\x27\x46\xed\x0e\x4a\xa2\x00\x17\x82\xdd\x1e\x28\x6f\xb9\xa3\x1b\xfc\x1a\x88\xe1\x44\x42\x5a\x1b\xe2\x53\x00\xfd\x6a\x22\x4d\xa8\x05\xbb\xf5\x43\x1a\x36\x50\x70\x1b\xe0\x07\x58\xd9\xdb\x23\xd0\x05\xa4\xd7\xac\xbe\x2b\x86\x96\x6e\xc6\x53\xd5\x88\x07\x36\x57\x0b\xcf\x92\xe8\x1d\xb4\x02\xda\xe2\x61\x6e\x21\x26\x8a\x3e\xff\x7f\x36\x11\xeb\xc3\x2f\xef\xf9\x67\xe3\x0d\xd2\xfa\xe4\x80\x54\x1a\x60\x3f\xbe\x57\x6b\x10\x49\x78\x9b\x7e\xd6\x02\xb9\xa7\x66\xa1\x61\x97\x5f\xed\x81\x13\x29\x1b\xb1\x02\x5f\xab\x9a\x7c\x18\x9d\xd3\x2e\xbd\xe4\xbf\x58\x65\x59\xe2\x2e\xef\xed\x0f\x73\x7d\x5f\x55\xee\xcb\x85\x58\xdd\x10\x2f\xc6\xbc\x17\x89\xb0\xbb\xf4\x5f\xff\xd9\xd2\x03\xdc\x9e\x4f\x2a\x80\xdb\x54\xa3\xeb\x6c\x75\xc9\x55\x8d\x6f\x8e\xd1\x48\xdc\xfb\x1a\x9b\x2b\x23\x7e\xfa\x79\xb6\x18\xa5\x17\xe2\x8a\x5b\xcd\xc5\x4f\x32\xf8\x48\x7a\x80\x3e\x30\x60\x82\x5a\x3c\x82\x01\x13\x20\x77\xeb\x81\x8d\xbc\xe8\x69\x45\x0f\xe1\x3a\xa2\x5c\x2c\xd3\x3c\xb2\xc1\x97\x3f\x65\x09\xde\xfb\x99\xf7\x8c\xc9\x59\x3a\x60\x7b\xdf\xa5\x77\x9a\x0e\x1b\x90\x27\x46\xbd\x1f\xe9\x11\x8b\xc0\x2e\x3b\xc2\x31\x84\x1a\xcd\x25\x1e\xef\x30\x94\x38\x66\x90\x99\x0e\x00\x6a\x7d\x37\x48\xbc\x82\x66\xe3\xa9\x9e\x25\xd2\xb3\x48\xc7\xe0\x49\xd4\x48\xf1\x1a\x52\xa0\x07\xf9\x80\xed\x69\x81\xee\xac\x03\xb6\x77\xb1\x66\x70\x88\x52\x6f\x88\x52\xea\x05\xca\x79\xe9\x43\xe6\x80\xf7\x15\x73\x8a\x1b\xe3\x7e\x2e\x99\x71\xea\x05\x83\x5a\x34\x95\xb5\x9d\x2f\x88\x1c\x32\xdd\x0a\x9a\x0d\xd9\x43\x1f\x99\xc0\x0d\x69\x51\x55\xfd\xa2\x1d\xec\x0e\x61\x6f\x8f\x3a\x6e\x0d\x98\x30\x95\x0e\x10\xbe\xd3\x44\x8a\xfb\x3d\xe3\xea\x7b\xba\xcb\x61\x5a\x7b\x26\x67\x43\x70\xee\xf2\xc8\xd5\xfb\x00\xac\xc4\xfa\x67\xc1\x9a\x69\x46\x6a\x24\x14\x16\xb8\xa4\x5b\xfc\x03\x41\x16\xb3\x30\x0a\xce\x63\xaf\x38\x2a\xc8\x6d\x8d\x63\x98\x28\xea\x2e\x7a\x01\x21\x25\xa3\x8a\xa6\x8d\x40\x8e\x54\xd4\x90\xe9\x33\x9c\x79\x66\x3c\x95\xad\xc7\xb2\x59\x10\xb6\x2d\x65\x50\x7d\xe9\xc3\xd1\xec\x91\xff\x2d\x10\x65\xf6\x0f\xf7\x9d\xe2\x9e\xb1\x1f\x44\x52\x90\x38\x56\x71\x6c\xbe\x9e\xed\xe7\x4a\x1f\x8e\x08\x48\x9b\x70\xc6\xd3\x44\x97\x30\x1c\xaa\x05\x19\x26\xae\x8c\xd9\x78\x3a\x21\x54\x6a\x72\x36\xe5\x0c\x52\xe9\x72\xce\xf6\x9e\x1b\xba\x57\xe4\xc0\x16\xa9\x8f\x22\xa8\x95\xed\xe7\x83\x81\x2e\xd3\x15\xa9\x4b\xd3\x65\xc6\x31\x28\x7b\x95\x88\x63\x7e\x5e\x00\xcb\x37\x4b\x13\x3e\x9c\x90\x69\x0a\x2e\xa4\x07\xc9\x0c\x94\x7b\x18\x3f\x13\x22\x38\x00\xf8\x8f\x74\xbb\x06\x23\x68\xe6\x80\x19\x0f\xfa\xac\xbd\x5d\xda\x69\x62\x42\xb0\x2f\x59\x99\xe4\x34\x4d\x31\xb6\x83\x1f\x11\xab\xcf\x7e\x11\x71\x9c\x2c\x11\x3a\x1a\x92\xfd\x22\x08\xa1\x4b\x2f\x02\x63\x80\x35\x34\xee\x29\x88\x4a\x85\xed\xf2\xdd\xda\x1b\xc7\x43\xc1\x02\xd4\x80\x6f\x20\x80\xc2\xf1\xc0\xa0\x9f\x74\x2f\x06\x01\x55\x0a\xd6\xb6\x85\x6f\x40\xd8\x86\xcc\x79\xae\x0f\xa4\x39\xdb\xfd\xa0\x74\xaa\x19\x21\xc8\x86\xf8\xb7\x30\x60\xa3\xcf\x6f\x79\xce\x24\xe0\xb8\x65\x23\xb1\x57\x65\xb6\x42\xc8\xa3\xcc\x8b\x55\xd7\x05\xfb\x87\x61\x27\x06\x9d\xe4\x92\x9c\x39\x16\xfd\x8d\x4a\xa4\xc5\xfc\xa7\xfd\x31\xb5\x68\x40\x19\x7b\x98\x25\x92\x16\x78\x61\x80\x78\x99\xd2\x06\x3b\xcb\xd6\x49\x76\x2e\xda\x45\xb8\x14\x14\xc1\xf2\xc2\x50\xec\xfd\x31\x9d\x90\x5e\x8d\x99\xed\xe1\xea\x40\xf2\x8c\x9c\x9e\xda\xdd\xf8\x77\xdd\xa5\x14\xf6\x63\x41\xe8\x9e\x3d\x91\x49\xfa\xff\xd0\xf6\xe6\x4b\x6e\xdc\x48\xbf\xe8\xff\x7c\x8a\x66\x85\xbf\x3a\x05\x13\xa4\x48\xcd\xf8\x9c\xef\xab\x6e\x34\x43\xd6\x62\x79\xac\xcd\x6e\x79\xd1\x50\x1c\x45\x35\x09\x36\x6b\x54\x04\x68\x14\xd8\x8b\x9b\x7c\x84\x1b\x71\x1e\xe1\xc6\x8d\xfb\x24\xf7\x51\xce\x93\xdc\x40\x26\x80\x42\x2d\x6c\x79\xe6\xc4\xd1\x1f\x6a\x16\xf6\x35\x91\x48\x64\xfe\xd2\xac\x9d\x5d\x1c\x5b\x5f\x0d\x63\xe7\x1f\xb3\xbf\xdb\xef\xfb\x49\x39\x5a\xac\xcf\x51\xf8\x3b\x5a\xac\xf7\xfb\x12\x78\x77\x1f\x10\xc7\x25\x0c\x65\xe0\x07\xa2\xec\xe5\xec\x6d\x9e\x64\xac\x18\x69\xe9\xdc\x40\xfb\x31\xfd\xa7\x6e\x0b\xeb\xf3\x21\x9c\x51\x4e\x62\xff\xf8\xeb\x6a\x6c\x3b\x4c\x4e\xe9\x8e\x59\xf4\xab\x10\x3b\xbc\x6e\x76\xbb\xb5\xcf\x43\x78\x46\x52\x4d\x77\x15\xad\x61\xfd\x31\x95\xe7\x0e\x88\xc2\x02\x3c\x0c\xcb\x54\x9e\x81\x49\xac\x0d\x18\x94\x69\x92\x21\x00\x00\xd8\xb3\x1e\x70\x1b\xbd\x86\x86\xae\x1c\x60\x91\x73\x86\xcf\x74\x66\xc2\xb7\x4c\xc0\xdf\x25\x2b\x92\x35\xa1\x1b\x96\xd1\x3b\x56\x24\x5b\x42\xaf\x19\xe8\xef\xa9\xf3\xbb\x60\x76\x05\xdd\xd2\x6b\x33\x77\xc0\x6d\x9f\xc2\xe9\xb4\x98\x6e\x19\x5b\xef\xf7\x5b\xc6\x76\x86\x8e\xae\xe9\x84\xa4\xdb\xe1\xfa\x8c\x4d\xaa\x4b\xce\x15\x53\x67\xcb\xfd\x5e\x0d\x97\x67\xec\x6e\xa8\xa6\xeb\x74\x4b\x2f\x99\x1a\x26\x57\x8c\xad\xa7\xcb\xf4\x8e\x9c\x02\x74\x4f\x88\xda\x73\x85\x40\x3d\x5e\x54\x0d\xf5\x5f\x51\xc8\xb1\x49\xaf\xe9\xe5\xd9\x70\x32\x1d\x4e\xd2\xcb\xf3\x09\x38\xcc\x84\x0e\x5b\x11\xed\x82\xe7\x45\xb2\x7a\xf4\x98\xd0\x1b\xb6\x1e\x7c\xb2\xcf\x11\x37\x6c\xed\x97\xda\x73\x36\x3e\x7d\x7e\xf6\xe9\x74\x30\x78\x4e\x6e\xb0\xe5\x37\x74\x82\x85\xdc\xb2\x22\xb9\x21\xbd\xdb\x73\x35\x4d\xb6\xec\x86\xde\xb1\x5b\x9a\x5c\xb3\xcc\x5c\x6a\xee\x06\x6c\xc2\xff\x62\x46\xf4\x13\x49\x93\x35\xbb\xa1\x4b\x76\x0b\x03\xb7\x1a\xb2\x4f\xe1\xc2\xf9\x5e\xd7\xb0\x6c\x78\x8b\x8d\x6d\x82\x1d\x56\x31\xee\xb5\x86\xb1\x4b\x4d\xee\x2f\xd1\x69\xf4\x56\xf1\xa8\xc9\x82\xff\xf5\xbf\x4e\x07\x03\x4d\x2e\x75\x0d\x51\xb9\x01\x8b\x6f\xca\x7d\x23\x97\x3c\x41\xb0\x9c\x46\x62\x53\xf4\x25\xe0\xff\xff\x2b\xa5\x1c\x6a\x50\x8c\x97\xda\xbd\xa4\x5e\xea\x1a\xe4\xe3\xa3\x6f\xc6\x9e\x76\x03\xd0\x78\xbb\xaf\xe6\x92\xf8\x53\x50\x18\xe0\xa8\x07\xfe\x9c\x9f\x75\x0f\xa3\xbf\x27\x34\x47\xd1\x47\x58\x9d\x8a\x10\x2b\xc8\xff\x8b\x08\x15\x7e\x50\xa9\xb9\x9d\xf4\x6a\x1d\x12\xc4\xf3\x58\xc7\x0c\xdd\x73\xe6\x20\x1d\x1d\x48\xd0\xa3\x89\xef\x6c\x7e\xfe\x38\xe8\x6c\x75\xa7\xc9\xe1\x44\x9c\x8c\x61\x99\xbd\xd2\xf4\x85\xa6\x7f\x58\x07\xc9\x2f\x35\x1b\x57\xf4\xe1\x5b\x7b\x51\x83\x77\x61\x76\xbf\xd8\xa4\x1c\xb0\xe0\x9c\x88\xd3\xd0\x1d\x73\xdf\xc4\x31\x4c\xf1\xcd\x10\x8f\x15\x1a\x60\xe2\x99\x74\x81\x73\x2a\x84\x90\xd3\x77\xe6\xc0\x33\x51\x88\xaf\xf7\xf6\xf2\x9f\x25\xc6\xd4\x9d\x51\xbd\x04\xf1\xb6\xea\x8c\x7b\x9a\x81\x4c\x7f\xdc\xd6\x53\xf0\x35\xbe\xc6\x3b\x16\x34\xd5\x5f\x76\xac\x0f\x61\x77\x3d\xa9\x7f\xbe\x93\xb6\x2e\x54\x64\x31\xb4\x6c\x99\x0e\x06\x2f\xf5\x81\xfe\xa1\xa7\x7f\xe8\x91\xdc\x96\xce\x11\x3e\x0c\x0c\x49\x1d\x0e\xa0\xbc\x11\xe5\x77\x4a\xee\xb6\xec\x0f\xcd\xee\xe5\xb6\x4c\x67\x36\x6a\x4e\x97\xbc\xc8\xee\xf8\xd2\x34\xf9\x32\x5b\x7c\x2e\xd3\xd9\x3c\xd8\xa6\x3f\xd7\x30\xac\x1b\xa5\x81\xb0\x05\x6c\x9e\x93\xb6\x45\x00\x1f\x35\x4b\xa6\x86\xdb\x58\x4a\x84\x36\x6b\xfa\x6e\x9b\x89\xf9\x68\x91\x15\x45\x52\x87\x5b\x76\x50\x93\xd2\xab\xfb\xd5\xfc\xbb\x9a\xf0\x99\x9a\xe3\x9b\x7b\xf7\xfc\xa0\xec\xa3\x19\x8b\x33\x74\x76\x2c\x93\xab\x8b\x1c\x4b\x30\xeb\x2e\x70\x30\x08\x7a\x41\x73\xf0\x9d\x76\xb8\x59\xe7\x05\x4f\xaa\x0e\x93\x03\x49\x34\x39\xac\x72\x91\x15\xc5\xdd\xbd\x5d\xe2\x2d\xcf\x76\x41\x97\x61\x84\xa0\xaf\x66\x94\xac\xae\x0e\xe4\x3a\xad\x8d\x7c\x45\xfe\x60\x64\x68\x87\x93\xbc\xdf\x75\x62\xc6\xba\x25\xdc\x0c\xd3\x28\x66\x92\x50\x65\x3d\xb7\x2d\x9f\x59\x97\x27\x6a\xb4\xd9\x95\x1a\xf7\x4e\x1c\x7f\x95\x28\xb0\xf6\xb0\xa9\x2c\x4d\x78\xa8\xdc\x5f\xff\x44\xdd\xbf\xfc\x89\x34\x1f\x6c\x1a\x1c\xc7\xc0\x8f\x67\x7d\xb1\xd6\x34\x3e\x4e\xbb\x97\xa8\x85\xa8\xe8\xeb\xc0\x2e\xe9\x69\x91\x6f\xb7\x7c\x19\xc7\xba\x32\x49\x42\xb2\x0d\x64\x0a\x34\x52\xea\x58\xb3\xac\x3b\xe5\x50\x77\x82\xcc\x52\x6d\x69\xd1\x0b\x43\x8a\x54\xdd\x11\x0c\x20\xc6\x5a\x28\x0b\x7b\xdf\xc4\xf8\x4d\xa6\xae\x72\xf1\x2d\x62\x48\x0d\x9b\x2d\xe8\xca\x81\x26\x85\x80\xbe\x8b\xad\xac\x97\xdd\xec\x2f\xaa\xd3\x18\x7e\x87\x8f\x6a\x34\x2a\x8e\xbf\xc7\xd0\x6a\xf6\x19\x1f\x05\xf4\x16\xb5\x9c\x3c\x59\x45\xc0\x3b\x78\x78\x73\x94\x0c\x0c\xcf\x2b\x3a\x06\xd4\x3f\xf8\x46\xf6\xb3\xa5\x64\x53\x4f\x63\xb9\xcf\x73\xaf\xa3\x42\xf6\x7b\xd1\x90\x55\x99\x39\xeb\xc4\xc1\x74\x5d\x62\xbc\xb6\x86\x05\xbf\x39\xf9\x01\x34\x97\xc2\xd0\x7b\x73\x25\x09\x5a\x6f\x5f\x6a\xd3\x5a\x7b\x0e\xb4\xd6\xe9\xd0\xf1\xeb\x03\xcb\xb0\xc7\x1b\x9b\x2a\x8e\xff\x86\x83\x7b\x99\x29\x27\x67\x7c\x65\x42\xda\x5d\xeb\x77\xf7\x0d\x06\x33\x5b\xfe\x73\x57\xe2\x34\xbf\x97\x6c\xa3\x13\x5d\x15\x50\xfd\xaa\x69\x27\x20\x5f\xfc\x17\xaa\xeb\xe2\x0d\x27\x5e\xac\x95\x58\x6b\x9f\x1d\x05\x4c\xe8\x6d\x4a\x44\xf7\x5a\x17\x2d\x5f\x41\x83\x46\xd9\x83\x95\x4e\x34\x19\xe8\x16\xe6\x32\x2c\xb9\xec\xf6\xc2\x1f\x8f\x21\x8e\xcd\x97\xcb\x1d\xae\x4d\xb9\x84\xd0\xa4\x39\xe6\xb0\xb2\x1a\x27\x33\x41\xb5\x44\xb4\x6c\x58\x06\xf6\xdd\xc7\xbc\x9d\x59\x05\xb7\xd0\xe1\xc3\x2f\x8d\x89\xef\xb9\x7d\x50\x6b\x17\xd0\x8f\xba\x44\xc9\xee\xf0\x5c\x74\x0e\x3e\xee\xd8\xc6\x58\x9c\x59\xed\x29\x1f\x10\xc7\x77\x22\x09\xbd\x79\xb7\xa1\xa9\xab\xc4\xcd\xd2\x40\x31\x21\x58\x09\x4d\x09\xf0\x24\x70\xe8\x6d\x7a\x1d\xc7\xce\x96\x83\xfd\x53\x82\x3d\x7d\xdf\x33\xc4\xeb\xac\x7c\x81\x76\x18\xad\xa0\x84\x90\x5e\xc7\x20\x9b\x5d\xfb\xb0\xe7\xb9\x56\x16\x73\xdd\xed\x9e\xd7\x8a\xef\xeb\x5b\x0d\x33\xa4\xac\x24\x8e\xbf\x85\x9d\x5e\x2d\xe4\x8a\xd2\x55\xbb\xf1\xef\x1d\x69\x9a\x6b\x25\x8e\x73\x0d\xba\x43\x6d\xec\x92\x80\x9d\x6c\xf7\x0a\xcd\x31\xc1\x4a\x10\x14\x26\x44\x1c\x5f\xf1\xa6\x87\xd5\x0f\x0f\x50\x0f\xa7\xb6\x88\x4f\xd4\xcd\xa6\xff\x08\x4d\xb7\xa7\xb1\xf5\x36\x24\x46\x37\x6b\xce\x0b\x78\x7d\xf9\xcd\x21\x91\x06\xa4\xad\xb2\x0b\x08\x57\x52\xbf\x46\xe9\xc0\x36\x2a\x28\xa6\x56\xe8\x07\x8b\x80\xd0\x2a\xd9\x10\xe7\x0e\x8b\xde\x7a\xe5\x7d\x4b\x43\x2f\xac\xdf\xd9\x24\x4c\xda\x85\x5a\xd5\x2a\xd3\x22\x60\xb5\xa8\x0f\x86\xd3\xa0\x36\x02\x46\xeb\x5f\xb0\x3e\x36\xe9\x68\x67\xc3\xeb\x29\x5a\x83\xd6\xd1\x5d\x20\x59\xed\x91\xed\xee\xf0\x51\x9c\xae\x56\xb1\xc8\x5a\x1c\x21\xb7\x61\x6d\x47\x3b\x6c\x22\x6b\x15\x77\x74\xf9\x15\xfa\xb4\x0b\x48\xc6\xaf\x00\x0e\x5e\x5b\x19\x8e\x0f\x6f\x63\x24\x7b\x5f\x57\x89\x0a\x45\x58\xf8\x8a\xf2\x0d\x78\x70\xb7\xd2\xa2\xfe\x84\x66\xd6\x45\x21\x28\xb3\xc6\xb1\xe8\x33\x3d\x45\xb8\x35\x92\x66\x74\xc7\x7e\x37\x05\x07\x5e\xc8\x40\x88\x8c\xb2\xe4\x86\x77\xb2\x2d\x85\x47\x09\x32\x0c\x8c\x1d\x3b\xd3\x43\xb8\x75\xbe\xe4\x10\x32\xc9\x00\xe4\xae\x3c\x20\xac\xe6\xf0\x5f\xd4\x42\xcc\x50\x54\xea\xa2\xbb\x70\x31\x27\x1b\xd3\xce\x5d\xb8\x4e\x3c\x60\x6e\xa3\xd0\x61\x41\xce\x27\xe0\xcc\x0b\x1d\x30\xd7\x0a\xc3\x95\x92\xdc\x85\xa5\xbd\xaa\xda\xde\x2c\xce\x44\x0d\x17\xb5\xf2\xfa\x12\x55\x05\xdd\x83\x4a\x76\x48\x34\x7d\x65\xfd\xe0\x37\xd8\x2e\xd2\x15\xa1\x65\x63\xa6\x2d\xfb\x69\xc8\x77\x18\x9a\x97\x88\xdb\x02\xbc\x72\x9d\x16\xb6\x50\x91\x39\x78\x13\xc7\xdc\x98\xeb\x7b\xa1\xe5\x2f\x39\xbf\xa9\x54\x49\xaf\xeb\x08\xfb\xf0\x04\xf0\xe0\xa3\x0b\xcd\xf1\xf2\x04\x8f\x3c\x03\xf0\x95\x78\x36\x9e\xe6\xac\x3f\xf6\xd8\xbf\x18\x7a\x6e\x41\x1d\xd0\xf9\x0a\x52\x87\xe0\x84\x6a\x3c\x19\xd6\x88\x08\xaa\x02\xf4\x27\x81\x9a\x70\x1e\xc7\xfd\xad\x5b\xc1\x95\x63\x49\x00\x62\x40\x8b\xed\x2e\x70\x12\x87\x40\x02\x8d\x1d\x8a\x40\xd2\x3c\xac\x09\xca\xdb\x9e\x08\x75\x85\xb3\x6b\xfa\x89\x8c\xbc\xa8\xdc\x49\x34\x20\x4c\xb4\xf7\x42\xe9\x11\x51\x1e\x6f\x6f\x4f\x23\x33\x7d\xed\xa7\xa8\xba\xbb\x31\x2a\xed\x0c\xbb\xd9\x49\xf2\xe6\xf3\x6f\xdb\x84\x5a\x92\x83\x59\x62\xd6\x51\xb0\x04\xbc\x9f\xbb\x4b\xfe\x12\xa0\x4a\x5e\x83\xda\x73\x49\x33\x17\xfc\xb3\x58\x87\x11\x68\x07\x18\xc0\x2a\x9d\x96\x67\xb2\x7a\x60\x2d\x89\x9c\x95\xa8\x62\x5e\x79\x59\xfa\x31\x4f\x4c\x28\x8d\xd6\xf9\x92\xa3\x46\x75\x06\x45\xd4\x71\xe5\x21\x7b\xd6\xcc\x0e\xde\xda\x01\x64\x3e\xda\x09\x5b\x80\xf0\xb2\xe9\x50\x42\x07\x6e\x61\xaa\x33\xe0\x28\x4f\x05\x9b\x9d\x8f\x2a\x89\x11\x54\xa1\x69\x64\x7d\x34\x44\x54\xd7\xa2\x2b\xce\xa3\x62\x1a\x46\xab\x5c\xe4\xe5\x3a\x09\x7d\xf1\x57\x4e\x2c\x9c\x4c\xc7\xbd\x72\x26\xa4\x07\x52\x30\x30\x47\xac\x02\xbd\x54\x01\x04\x37\xc1\xdd\xf8\x07\x5b\x54\xd3\xc9\x64\x67\xe1\xa8\xeb\x99\x70\x9a\xa9\x2b\xd8\x16\x65\x57\x6d\x1d\xa9\x9a\xd5\x07\xce\xda\x43\xb7\x29\xf5\xda\x51\xcf\x31\x6c\x00\xb7\x45\x03\xaa\x44\xbd\x0d\xa0\xaa\x17\x36\xe3\x48\xda\xb0\x25\x90\x27\x6c\xcc\x8f\x47\x1a\x53\xc3\xaf\x44\x87\x09\xfb\xbd\xfe\xf3\x6d\xfb\x97\x1b\x56\x6b\xd5\x6f\xfe\x7d\x0a\xad\x84\x72\xc1\x99\x76\xa6\x97\xa5\x66\x2d\x01\x06\x45\xdd\xfb\x53\xcd\x9e\xa9\x84\x93\x53\xc2\xc1\x7d\x9c\x58\x26\x13\xc3\xcf\xa3\x2d\x7e\x82\xa0\x67\xb3\x39\x21\x56\x3a\x58\x3d\x18\x1e\x80\x8b\x05\xe3\xa1\xfc\x0f\x8b\x5b\x67\xaa\x9a\xbe\xcd\x93\x8d\x35\x9f\x43\xd5\x9a\xa1\x18\x4c\xd2\x09\xa6\x15\x72\xc9\x2b\x64\x3b\x94\xcf\xa2\x2e\x18\xec\x6a\xf6\xad\x82\xa5\x16\xf8\xea\xee\x52\xeb\x62\xb3\x39\x95\x4c\x9f\xca\x33\x71\x2a\x9d\x0e\x42\x56\xf7\x2f\xe2\xdf\x15\x0d\x59\x22\x3d\xc5\xe4\x20\x43\x67\x74\xd6\xf1\x59\x16\x78\xa3\xf2\xd5\xfd\x4d\x37\xf9\x10\xf0\xb1\x67\x8f\x71\xeb\x5e\xcf\x3b\xfe\x4c\x44\x18\x31\xb0\x27\x6b\xfe\x07\x77\xee\x52\xc6\xee\xa5\xaf\xe6\x1e\x4c\xc5\xb1\xf0\x6e\xa6\xbc\xf7\xf9\xdc\xee\xe5\x57\xa8\x24\x73\xc9\x55\xb9\xdf\x77\x04\x5a\xfd\xb2\x76\x04\xd3\x95\xf7\x96\x40\xc2\x02\x4a\xd4\xce\xc9\xd5\x7b\x49\x6e\xe3\xf8\x0f\xe5\x1f\x6d\x83\x76\x68\xb3\x3a\xbc\x3e\x83\x38\x0b\xfc\x62\x99\x4c\x2f\x5d\x26\x31\x50\xe4\xbc\x8a\x9b\x42\xbe\x34\xa9\x42\x06\x4c\x51\x57\xec\x80\xa9\xaa\x4c\x7d\x56\xf3\xb5\x25\x82\x56\xd5\x2b\xaf\x25\x24\xf7\x89\x64\xca\x30\x03\xc2\xd4\x4d\x27\x84\x4c\x6d\x6d\x36\x95\x55\xc7\x97\x88\x57\x41\x68\x95\x97\xa1\xe0\xe7\x4d\xad\x3d\x29\x54\xe6\x0d\x43\xc2\x66\xe0\xb1\x7c\xea\x2a\xd4\x54\xd3\xe1\xd1\xfa\xc6\xb4\x51\xe3\x7b\xe9\xea\x0b\xeb\xb0\xab\x33\x2c\x90\x96\xf5\x0e\xf5\xb2\x38\x2e\x8f\x55\x92\xd9\x4a\x46\x0b\x29\x16\x99\x4e\x60\x4b\x64\xb6\x5f\xa5\xad\xcf\xc7\xd6\x32\x97\x36\x2b\xe9\xea\x3f\xaa\x0c\xe4\x6d\x57\x44\x3b\xb3\x26\xcf\x76\x58\xf2\xd4\xfe\x1d\x30\x95\x6a\x17\x38\xd8\xc1\x32\x87\x75\xd8\x76\xf3\x03\x68\xac\x81\x83\x78\xef\x6e\xa6\x7b\x75\xf6\xae\xbb\xdc\x50\x1f\xf3\x93\x94\xaf\x92\x1c\x7c\x24\xe5\x95\x8f\x24\xfb\x73\x90\xbb\x56\xa9\x23\xad\xa2\xfd\x44\x9f\xa9\x40\x4c\xa8\xcf\x99\xaa\xbb\xc5\x94\x36\xa0\x72\xdd\xe4\x39\x37\x34\xad\xaf\x1c\x51\xda\x03\x7a\xbf\x4f\xfc\x6f\x43\x2b\x4f\x87\x13\xc6\xae\x65\x92\x51\x41\xe2\x38\xb3\x1e\x64\x6a\xe4\x5a\x8b\xba\xb6\xa0\x5f\xae\x4d\xb7\x52\x21\x7d\x69\x78\xd1\x34\x44\xb0\x4b\xf3\x80\x05\xbe\xa1\x84\x38\xee\xc9\xaa\xf2\x59\xe5\xbc\x2d\x26\xba\xa9\xfa\x05\xdb\xaf\xd2\x64\x68\xbc\x35\xd4\xd3\x52\x7c\x6f\x11\x0d\xaf\x5e\xa6\x50\x31\x53\x73\xa4\x8b\x55\x59\x81\x5b\x36\xd5\x72\x90\x23\x99\x6d\x39\xcd\x1a\xb5\xc0\xc9\x7a\xbb\xdf\x0b\x76\x8c\xf4\x5a\x4d\x11\x84\xdb\x93\x14\x56\x46\x2a\x2a\x2f\x67\x88\xbd\xd9\xee\xa7\xe1\x1c\xc1\x93\xd0\x6e\x00\x5e\x84\xa0\x34\x30\x78\xec\x33\x1c\x42\x75\x3e\x86\xbf\x12\x7d\x58\x5b\xe3\xc7\xda\x20\xb2\xdd\x20\x9b\x49\xcc\x3b\xd4\x54\x0e\x06\xce\x9b\xcc\x6e\xa8\x7b\x7a\xc0\x72\x2a\x06\x2c\x47\x23\x32\x4f\x86\x05\x01\x4b\x32\x5b\x76\xa2\xce\xc6\xd3\x71\x1a\x54\x51\xab\x43\x0c\x98\xfa\x3a\x9b\xc9\x21\xa4\x9b\xa4\x63\x82\xd5\x51\xb3\xb7\x0f\x47\x7a\x1f\x38\xb1\x6d\xbd\xf6\xd4\x26\x51\xb0\xb1\x9d\x48\xdd\xf1\x68\xa6\xe1\xc1\xcc\x1e\xd6\xe6\x74\x32\x1b\x02\x7c\x8c\xf8\xbd\x30\x18\x08\xaf\x8b\x17\xf8\xb3\xed\x7c\x3a\xd1\x60\x1c\xfa\xab\xca\xb6\xf6\xc5\x9a\x75\x83\x94\x9b\x2b\xa2\x4b\x89\x62\xce\x56\x42\x08\xae\x5c\x60\x04\x2f\xc3\xba\xfd\x30\xae\x3b\xb5\x5b\x3b\xdf\x35\x10\x25\x42\x5f\xe4\x7f\xf0\x24\x24\x6a\x16\x7d\xff\xbe\xda\x0d\xbf\xe6\x89\x26\xa7\xa2\xcf\xbc\x3f\x84\x53\xc1\x44\xe0\x6c\x05\x2c\x0c\xc4\x7e\x0f\x38\x9a\xce\x10\x31\x8e\x23\xad\x76\xa0\x5a\xd8\x36\xfa\xcc\xaf\x84\x54\x7c\x08\x06\x40\x65\x04\x6f\x16\x55\x71\x20\x1e\x32\xf7\x5b\x90\x7a\x58\x7f\x91\xde\x54\x21\x70\x41\xd9\xdc\x5d\x0d\x5f\xa5\xa2\x6a\x02\x74\xa1\xdd\x0c\x21\xf5\xd0\x1a\xd6\x44\xf5\xb5\x78\x6d\xfd\xd8\x97\x96\x1a\x3f\xac\x9f\x68\x18\x5c\xc9\xb4\x87\xc8\xb4\x2a\x7d\x99\x0f\xfa\x30\x04\x11\x8c\x05\x3e\xa9\x6e\x1c\xa0\x2a\x0c\xc7\x15\x2d\x18\xa8\x62\x49\x9a\x11\xcb\x4a\x4d\x18\x2b\x40\xf1\x28\x8e\x93\x5d\xa5\x4e\x56\x58\x08\x2b\xc3\x67\x3a\x13\x3c\x93\x72\xb1\xb6\xee\xe2\xc1\x93\x29\x75\x1a\x7c\x1d\x8e\x4c\x87\x2e\xae\x57\x80\x59\x1f\xf2\xc4\x4d\x39\x1b\x80\x78\x26\x89\x1c\x2e\xc2\x6b\xb8\xd5\x5b\xa8\xa9\xbd\x91\xe1\xa2\xc2\xc2\x0f\x54\x9f\x8b\x2e\x2c\xbc\x70\x86\x12\x2e\x13\x0d\x90\x61\xc2\x42\x97\x01\xf0\x43\x1c\xbb\x07\x86\x1a\x1e\x44\x42\x08\x41\x64\xbc\x75\x0e\xe0\xf5\xf0\xf7\x07\x7e\x47\x4b\x44\x84\x25\x28\x95\xf5\xd7\xd0\xa5\xca\xae\xae\xc0\x72\xab\x3f\x39\x0a\x5d\xd5\x95\x7a\x7c\xa0\x93\xf1\x98\x54\x6c\x5b\x7f\x25\xa0\xa1\x4e\x4b\x6e\x87\x9f\xbd\xf2\x26\x37\x13\x6a\xa5\x28\x0e\x31\xf4\x97\x3c\x31\x49\x17\x59\xc9\x4f\x26\xa9\x13\x02\x59\x81\xb9\xb8\x32\xfb\x75\xda\x19\x6a\xd8\x4d\x35\xad\x0b\x0e\xc9\xbd\x9c\x06\x6d\x7f\x2e\x93\x2b\x4e\xc1\x8a\x2d\xad\x3c\x1a\x2e\x76\x25\xbc\x39\xf4\xdc\x3d\xc2\xbb\x14\xee\xbd\xd0\x71\xfc\x42\x8f\x74\xbe\xe1\xe7\xf9\xf0\xaf\xe3\x31\x58\x55\x2c\x79\xf2\x42\x8f\xb6\xb2\xa4\x82\x4c\x15\x8b\xb4\xca\xb7\x05\x8f\xd2\x57\x3a\x8e\x5f\x75\xa5\x7e\xe5\x53\x27\x8a\x45\x4b\xb9\xbb\x2c\x78\x44\x5f\x68\x76\x6f\xd2\xa6\x39\xdd\xca\x32\x15\x07\x92\x9a\x68\x74\xfe\x13\xd1\x57\xad\xe8\x9e\x5b\xec\xbc\x42\x33\x65\x77\x53\x3d\xda\x70\x9d\xfd\xc0\xef\x52\x3d\x5a\x68\x55\xfc\xc0\xef\x02\xa5\x4b\x33\x33\xcf\x94\xdc\xc6\xf1\xef\x12\xa4\xc5\x75\x14\x2f\x57\x1d\x8a\x56\x77\x2c\xc0\xf0\x15\x84\x00\x7c\x5b\xb2\xe4\x09\xc4\x58\x63\xa4\xdd\x9c\x38\x4c\x03\x41\xce\xc6\x66\xfd\x59\x0d\x3f\x4c\xbb\x03\x73\x24\x2a\xc8\xb9\x8f\x3b\x1b\x93\x69\x5b\xa4\xdb\xa0\x3b\x74\x57\x8d\x3c\x2d\xd8\x0f\x35\xb8\xea\x05\xb9\x2f\xd1\x77\x4c\xd7\x02\x05\xd9\x22\x2c\x09\x08\xb5\x2b\xc2\xac\xdc\xaf\x72\xaf\x58\x15\xa0\xaf\x16\xc4\x44\xe4\x81\xb3\x96\xa5\x92\x18\xee\x25\xa2\x15\x45\x5a\xb8\x5f\x64\xd0\x8a\xfd\xe0\x63\x3f\x90\xb3\xc9\x38\x8e\x93\x97\x79\xb2\x20\xb4\xaf\xe2\xd8\xf7\x66\xf8\x78\x3c\x3e\xdb\xc5\xf1\xb7\xdc\x1f\xed\xb4\x04\xac\xd1\xff\x62\x2c\x9b\x76\xef\xae\x9a\x89\x81\xdf\x1e\x79\x1d\x60\x17\xc0\x85\xd2\x46\x20\x39\x90\xde\xf1\xc1\x02\x4f\x53\x1d\x83\x55\xd0\x46\x7a\x5c\x35\x1d\x81\x09\xe9\x7d\x38\x36\xac\x1f\xba\x87\xd5\xf9\xa5\x5a\x90\xf4\x38\x26\x43\xb5\x12\x32\xab\x4a\x0b\x4e\x6c\x9c\x93\x4c\x5a\xb0\xcc\x2e\x7a\xb7\x16\x7b\x39\x3c\x62\x3b\x5a\x36\x4d\x76\x98\x24\x5c\xc4\xb4\x64\xbb\xf3\xe1\x64\xba\x98\xed\xe6\xa9\xb5\x35\x14\x54\x10\x92\x26\xa5\x4d\x1d\x7a\xce\xa8\x42\xd0\x88\xd0\xd0\xda\xeb\x69\x55\x07\x3a\xb7\x74\xfb\x2d\x2b\x4c\x18\x51\x2c\x52\x7c\xa1\x23\xd0\xbf\x2e\x59\x58\x0b\x15\xcc\x9e\xb5\x7d\xd0\x9c\xa5\x3b\x36\x9c\x54\xf6\x01\x96\x18\x78\x9b\x09\x07\xdf\xf0\xab\x54\xcb\x27\x3a\x11\xa4\x17\x5a\x51\x40\x23\xf6\xfb\x0c\x2e\x32\x62\x39\x7d\xc9\x93\x8c\x96\x74\xe5\xcc\xf0\x56\x68\x83\x97\xae\xfc\x35\xd6\x11\x27\x5f\xc1\xda\xb5\x6e\xcb\x13\x84\xe3\xa0\x63\x90\xd8\x67\xd4\x87\x00\x52\x04\xf9\x53\x55\xaf\x5d\xd5\x6b\x5b\xf5\xda\xe2\x1a\x33\x9b\x40\x90\x5e\x3e\x35\x77\x9f\x9d\x99\x1d\x87\x91\x46\x3f\x98\xd8\x7f\xf2\x64\xe1\x6e\xa8\xb3\x72\x4e\xe8\x8e\xd0\x7b\x5c\x3c\x69\x7f\x42\xa5\xca\xaf\x72\x91\x46\x5f\xc3\x02\x8b\x0e\x84\xa4\x8b\x00\xfe\xc0\x4c\xa8\x33\xc6\x6c\x10\xb2\xda\x9a\xa8\xaa\x72\x77\xe7\x9d\xbf\x17\xbb\xb0\xdd\x60\x42\xcc\xb1\xf0\x60\xf5\x6e\x01\x92\xf4\x77\x53\xe4\x8e\x96\xb4\x94\x24\x4d\x76\x6c\x8c\xfd\xb1\x86\xa8\xb3\x72\x6e\x8a\x2a\x65\x95\xc3\xc2\x92\xe3\x7b\xc4\x92\xc9\x2f\xfa\xf5\xd9\x84\xda\x89\x77\x89\x76\xd4\x72\x30\xd8\xd0\x45\xb0\xa2\x70\xdd\x99\xd9\x45\xa5\x5b\x6f\xd4\xbb\xa0\x5b\x52\xdd\xad\xab\x53\xae\xe6\x2d\xca\xa4\x86\x13\x6a\x4b\xb5\x7f\x32\xc9\x57\xc9\x96\xe9\xa0\xe4\xfb\xea\xb1\x0d\x44\x6c\x2d\xa6\x88\x02\xdb\x74\x93\x9b\x21\x08\x18\x2c\x2a\x46\x8b\x35\x95\x84\xae\x7c\xb4\x0e\xa3\xb5\x8d\x5e\x57\x38\x0f\x0b\xba\x22\x74\x59\x3d\x5b\xc2\xf7\xa6\xe6\x13\xc1\xac\x58\x67\x15\x70\x57\xc5\x70\xb8\x0b\x00\x58\x69\xf0\x24\x57\x4f\x4f\x4e\x37\x67\xec\xee\x74\xe3\xae\x2e\xd7\x0c\x1a\xb5\xb1\xed\xb9\x62\x2b\x99\x5c\x53\xd3\xa6\xde\x9a\xb1\xe5\xd4\xca\x04\xab\x0d\xb3\xa1\x57\x80\xd0\x61\xfe\x12\x92\x5e\xbb\xd5\x78\x65\xe8\xe4\xd1\xb4\x50\xea\x92\x4a\x02\x80\x28\xfe\xc5\xa1\x9e\x03\x89\x85\x5b\xab\x8e\xc0\x75\x2c\xd9\x1c\xb7\x49\x63\x75\x52\xbf\x6e\x0f\xd5\x43\x9b\x7f\x70\xd1\x81\xcc\xe9\x92\x95\xf4\x13\xbb\x74\xfb\xf6\x86\xc1\xeb\xa3\xdb\x3e\x7d\xa6\xac\x11\x54\x45\x98\x50\x7f\xbb\x46\x97\xb4\x65\xef\x30\xaa\xea\xb4\x6e\x51\x14\x5d\xa3\x28\x4b\x9e\x3c\x77\x35\x7f\x22\xe7\xe3\x69\x72\xc3\x9e\xa3\x91\xf9\x27\x76\xcd\x93\x4b\xc7\x59\xb8\x54\x86\x4c\x9b\x24\x2e\x0f\xbb\x33\x89\x80\xc1\x78\x6e\xcd\xc0\x0f\xb8\x34\x9b\x43\x46\x7a\xf9\x6c\xe7\xad\xcb\xa1\x39\x9f\x08\xbd\xa9\xc6\x38\x37\xe3\x58\xc2\x43\xd3\xc2\x39\x25\xf8\x3d\x31\x77\x88\xd3\x64\x61\x35\xc3\x56\x23\x2d\xf7\x7b\xfc\x3a\x5b\xe1\xf3\x66\x1c\x07\x07\xf6\x0f\x0d\xa7\x1a\x1b\xc6\xf2\x38\xbe\x43\xdf\x6b\x93\x6f\xc6\xc1\xc0\xaf\xab\x1b\xcd\x19\x78\xc7\x9c\x0e\x1f\x8f\x53\x1f\x76\xee\x9c\x64\x4e\x1f\x8f\xd3\x71\x6f\xfd\x27\xaa\x49\x64\xc7\xb3\xd1\x80\xad\xa9\xa9\xdf\x34\x00\xa0\x87\x3d\x19\xb9\x32\x5b\x9e\x77\xf1\xce\x86\x53\xda\xb0\xc9\xa3\x31\x85\x13\x17\x24\x98\x21\x8c\x7f\x9b\x8b\x32\xf7\xca\x88\x5e\x76\x45\x19\x4e\xe0\x13\xa1\xd9\x68\x9d\x97\x5a\xaa\x3b\xd8\x98\x17\xbc\x78\x0b\x2b\x96\xf9\x6b\xdb\x65\x83\xc5\xe3\xe4\x1e\x98\xff\xe9\x9d\x61\xe5\xaf\x12\x6e\x7a\xf0\x09\x13\x5d\x55\x4c\x4b\xbd\xe1\x9f\x68\x9b\x15\xf1\x6d\xeb\xe6\x52\x3e\x79\x6e\x44\xd1\x05\x39\x98\xcb\x08\x55\x24\xfd\xd5\xd4\x0d\xc8\xbe\x76\x48\xe3\xf8\x25\x00\xff\x5b\x97\xbd\xe6\x42\xf2\x38\x2d\x41\xd9\x0a\x5b\x62\xfa\xf5\x3a\x5f\x2e\x0b\xfe\x4c\xde\x88\x8a\x79\x05\xfb\xad\x6f\x1d\x12\x99\x3a\x8e\xfc\xdb\x66\xe5\x68\xab\xca\xbf\xa4\x37\xd3\x9f\xf0\xc6\xd4\xc0\x00\xb1\x3c\x1c\x2f\xb2\xbb\x5c\x5c\x7d\x5b\xec\xd4\xf3\x6b\x2e\xc0\x5b\xd1\x31\xa8\xcb\x23\x59\x50\x7b\xf2\x58\x71\x13\xfa\x54\x20\x8a\xad\xb9\xd7\x1d\x1a\x6f\x4c\x8b\x80\xa1\x77\x40\xa6\x79\x75\x9d\xa7\xd5\xd5\xfe\x43\xf3\x06\xdf\x9f\x1c\xc0\xa0\x09\x89\xf8\xaa\x90\x52\x05\x36\xc3\x57\x3b\xad\xb9\x2a\x8f\x9d\x90\xce\x7f\xad\xc7\xc5\xc0\xf9\xd2\xce\xaa\xb5\x62\x26\x0d\x97\xf7\x25\x17\x79\xf9\x2a\x91\xe7\x4e\x6d\x63\xbf\xef\x0b\x09\xca\x22\x4e\xac\xf1\x33\x14\x2c\x87\x68\xa1\x3a\xcc\x02\xc1\xaa\x97\x20\xee\xd8\xf8\x74\x77\x56\x9d\x8d\xae\xfd\xfe\xdd\x78\xe7\x20\x69\x33\x1f\x17\xc0\x57\xed\x40\xa4\x5c\xc4\x71\xf1\x70\x8f\xcf\x9d\x2f\xf5\x05\x7b\x12\x3c\x66\xad\x58\xab\x66\x53\xa4\xf3\xb4\x9c\xc3\xb3\x02\xa7\x0b\xba\xa2\x9a\x50\xe8\x4f\x38\x8b\x2b\x51\x7b\xcc\xb5\x93\x1a\x61\x49\x4f\x8b\x7c\xf1\x39\x32\xcc\x2b\xec\xdb\xb5\x08\x79\x93\x6d\x43\x4e\x01\x40\x15\x86\xb9\xa0\x7d\x2b\xa0\x88\xe3\x7e\x19\x68\x0f\x82\x24\x00\x96\x39\x95\x71\x9c\xac\xc3\x8d\x63\xd5\x35\x50\x42\x00\xdc\xb2\x03\x37\x7f\xaf\x32\x51\xae\xc0\x9b\x68\xc1\xa1\x12\x70\x5a\x55\xbb\xcd\x12\x14\xfd\x28\xff\x28\x6f\x45\x0b\x2f\xf2\x82\x9b\x54\x66\x4b\x07\x41\x81\x25\xb6\xcb\x42\x33\xf6\x44\xa9\xec\x0e\xa0\xdf\x41\x22\x1c\xdc\x56\x94\x45\x4f\xf4\xe3\x9c\x15\x85\xbc\x31\x17\x22\x53\xda\xfb\xbb\x2d\x2f\xf7\xfb\xe1\xa4\xcf\xae\x65\xf2\x50\x22\x8a\xa8\xfe\xfe\x65\xc1\xf4\xbe\x6a\x62\x4f\x8e\xa4\x28\x64\xb6\x34\x84\x4f\xb7\xdd\x74\xca\x91\xe2\xe5\xae\x80\x43\xfb\xd1\xec\xe3\xed\x78\x3c\xfc\x78\x3b\xfe\xcf\x8f\xb7\x63\x3e\xfc\x78\x3b\x59\xcd\xef\x1f\x1f\x1c\x12\x39\xa8\xa0\xb2\x28\x22\x34\x9b\xa9\x39\xe3\x74\x30\x28\x99\x5b\x3f\x3b\x8b\x05\x22\xd8\x2b\x47\xaa\x04\xa1\x5a\xa6\xc2\xb9\x22\x68\x80\xe9\x65\x08\xeb\xa6\xbb\xf0\xf2\x08\xf1\xec\x32\x82\xdb\x1f\x7a\xaf\x1c\x62\xd5\x8e\xd0\x5f\x6a\xb0\x8c\xef\x44\xb2\xb3\x30\xee\x12\x70\x51\x9f\x94\x56\x80\x73\x38\xd0\x82\x8d\x4f\x8b\xb3\xfc\x74\x30\x28\xc8\x2e\x51\xb3\x62\x4e\x8b\xca\xc5\x82\xee\xb8\xb9\x82\x5a\x64\xd3\x01\x91\x20\xe7\x95\x14\xbe\x2b\x97\x59\x7f\x80\x9b\xd5\x4d\x2b\x9b\x9a\x96\x21\x91\x06\x91\x65\xbe\x4a\xb2\xe6\xda\xbc\x72\x6e\x0f\xde\x03\x08\x20\x39\xde\xe2\x7e\x72\x37\xe5\xf6\xf6\x98\x72\x27\xb6\x41\xfc\xc6\x05\xb8\xf4\x2c\x6b\x5e\x29\xcc\x6c\x7f\x57\x1b\x44\xc3\x2d\x2e\x60\x09\xe3\x88\x2d\x2a\x42\x53\x10\x8f\x16\x16\x45\x74\x31\x2b\x1c\x94\x0e\xfe\xb6\x2e\x46\x55\x76\x05\x1e\x5e\x5b\x3e\x22\x32\x1a\x65\x20\xbf\x8c\x9c\xa7\x82\x50\x91\xb7\x3e\x1c\x96\xa4\x73\x72\x7f\x08\xc9\xc9\xb2\xf1\x92\x65\x2a\x73\x7a\x5d\xc9\x97\x54\x7f\xba\xb2\x85\x0a\x43\x55\xa8\x85\xbf\xf7\xd5\x6e\x2c\x15\x3b\xaa\x24\xa7\xc9\xd9\x63\x04\xa6\x08\x83\x99\xa6\x62\xbf\xff\x2d\xe1\x14\xf4\xf4\xf5\x21\xac\xad\xcd\x60\xf5\x99\xae\xf5\xa2\x43\xb5\x53\xb7\x4b\x68\x6b\x88\x6a\xd0\xd7\xfd\x0d\x08\xa1\xe1\x71\x40\x6a\x1a\xf8\xff\xf1\x32\xcc\x44\x4c\x35\x6b\xe9\x0c\xa6\xc7\x75\xf7\x4c\x37\x09\x60\x0e\x55\xca\xdb\xc7\xbb\x84\xea\x9f\x1d\xd1\xc1\x1b\x0a\xf4\xa7\x56\x09\xd3\xf4\xd7\x3a\xa0\x48\x87\xbe\xe7\x17\x86\x0a\xcb\xf9\xd2\x58\x81\x72\xa9\xb6\x7c\xfe\xb5\x60\x63\x7a\x85\x5c\x64\x4f\x4e\xaf\x04\x1b\x8e\xbe\xf9\x4b\x2a\xcc\xaf\xc9\x37\x69\x81\x21\xff\x23\x5d\xc5\x71\x62\x7e\x4e\x1e\xfd\x05\x4f\x95\x4b\xd1\x56\x77\x61\x1c\xf5\x8e\x9f\xf1\x42\x67\xbf\x81\x23\xdf\xea\xfb\x43\x68\x05\x0f\x1a\x1f\x86\x3b\xd2\x59\x5e\x98\x5f\xd9\x6d\x0e\x68\x3f\x2f\xdf\xfe\xf4\xfd\xdf\xdf\xbe\x79\xff\xe4\xd5\xa7\x27\xbf\x7d\x7f\xe1\xd4\x42\x20\x5d\xa0\x13\xd2\x95\xf5\x97\xe7\x3f\xbd\xff\xfe\xa9\xcd\x38\x15\x3e\x5b\x5a\xd7\x24\xa9\x5a\x44\xe8\xfd\x6d\xaa\xe9\x5d\x2a\x0e\x01\xc4\xd1\x27\x51\x59\xdf\x2b\x76\x09\x47\xaf\x39\xd1\x6e\xc1\x80\xfc\x2e\x7c\x2b\x45\xf1\x96\x13\xce\x15\x5e\x3f\x14\xa6\xf8\x7c\x57\xd3\xfb\x5d\xf9\x58\x7c\x1e\xf3\xd1\x95\xc9\x6c\x1e\xc7\x05\x48\x31\x57\xf8\x48\x19\xc7\x77\x71\x5c\x12\x9e\x56\xf8\x9d\x7a\xa4\x33\x75\xc5\x35\xdd\x32\x64\x9a\x4e\xd7\x7d\xb6\x3b\x5d\xb3\x75\xf8\x04\xe6\xd2\x2f\xd9\xf8\x74\x79\xb6\x75\x94\x6c\x89\x6f\xc5\xdb\xd9\x12\x91\x5f\x19\x5b\x87\x44\x65\xb1\x53\xa6\x84\x5f\xcd\xf8\xbc\x87\x5a\xd8\x1a\x39\xe7\x13\x7e\xc0\xe6\x81\x67\xcb\x05\xaa\xa4\xf7\xd9\x95\x87\xf4\x30\x6d\x8e\xe3\x4d\xa5\x05\x5c\xd7\x90\x0e\x34\x6e\x07\xf2\xeb\x2b\x41\xeb\x43\x31\xac\x0f\x85\x39\xfc\xee\xbe\x54\x14\xd8\x93\xe4\x61\x59\xb8\xed\x6a\x83\x0e\xb6\x25\xd6\x0b\xd5\x8a\x58\x7e\x16\xa1\x60\xb3\xba\xbe\x3c\x98\x34\xe2\x98\xfb\xbe\xc1\x0a\xd8\x30\x68\xf0\x75\x4b\xe9\xf8\x8a\x5d\x0f\xb2\xce\x77\xd4\xde\xe6\x6c\x3c\xbd\x0e\x55\xc5\xaf\x07\x9b\xe1\x37\x63\x92\x5e\x85\xe2\x95\xc0\xe2\xf5\x6a\xb0\x19\x7c\x33\x26\xd4\x93\xcc\x6b\x87\xb6\x70\x75\x20\x87\x6b\x71\xf6\x78\xec\x15\x98\x6a\x0d\x9f\x36\xfa\x11\x8e\x0e\xcd\x6a\x46\x00\xc1\x1c\xb8\x98\x67\xbf\xb1\xdc\xff\xfe\xc0\xe4\x91\x6b\x8e\xd7\xcc\xa8\xd5\xe5\xf8\xa7\xb0\xca\x61\x2d\x05\xd5\x61\xa5\xb5\xb8\x0f\x54\x18\x02\xe0\xeb\x8e\x63\xfd\xc8\x7f\xec\xf7\xbc\x8a\xfa\x2d\x8e\xb9\x8f\xfa\xad\x57\xef\x6e\xd6\x32\x73\x00\x7c\x89\x2b\xc1\x92\x2b\xf1\xf5\xb5\x18\x08\xf2\x28\xb9\x16\x83\x09\xa1\x83\xc1\xb5\x30\xec\xd0\x63\x73\x28\xa4\x89\x2f\x71\x10\x0e\xc1\x80\x49\x12\x5e\xf0\x6f\x44\x08\x63\x53\x02\xe2\x62\xc4\x98\xe1\x36\xe5\xea\x04\xd8\x0e\xcd\x0a\x35\xd3\xf3\xe0\xde\xd4\x74\x95\x1a\x82\x88\xba\x47\xb1\xa6\x1c\x98\xe6\xac\x3f\x01\x36\xa8\xf9\x9e\xe4\x2f\x92\xe5\x6e\xbb\x55\xbc\x2c\x9f\x2f\x73\x5d\x02\x70\x86\xa8\x1f\x05\xf0\x0e\xd9\x9f\x18\x62\x65\x98\xb1\x3e\x93\xd2\x6b\x32\x36\x93\x29\x7a\xa4\xd8\x49\xa5\xad\x77\x81\xa3\x02\x97\xd6\x77\xf9\x2d\x2f\xca\x0e\x82\x7f\x29\x02\x6d\x45\x3d\xba\xfd\x9a\x5d\x09\xaa\x47\x77\xf8\x17\x21\xe6\x9e\x0b\x60\xc9\x0b\x59\xd1\xd8\xdb\x8e\x57\xab\xd0\xed\x2d\x50\x43\x18\xf5\xad\x4a\xfc\xa5\x34\xb2\x80\xa5\x51\xef\x39\x78\xea\x4a\xbe\x19\xd3\x8e\xeb\x38\x16\x81\x02\x9d\x46\x98\xc5\xd7\xea\xf4\x65\x4b\x0e\x84\x6a\x96\x0f\xa2\x93\x68\xa0\xad\x96\x74\xf3\xf5\xb3\x69\xf4\xec\x0b\x7f\x9d\x75\x9a\x3f\xaf\x15\x30\x0a\xb5\x64\x33\x35\x37\x57\x47\xc4\x2d\x27\x7e\xb8\xbd\x4e\xaa\xbb\xe8\xf0\x5b\xad\xb2\x1f\xf8\x5d\x19\xc7\xb6\x98\x56\x0c\x45\x17\x57\x8d\x68\xac\x07\xe2\x50\x30\xa3\xdc\x0c\x45\x9b\x5d\xa1\xf3\x88\x31\xd9\x1e\x1a\x4d\xa8\x1f\x5f\x48\xf0\x77\x73\xc7\x8d\x3e\x73\x6b\x51\xbd\x8c\x28\x0e\x42\x95\xac\x6f\x92\xd9\x32\xfb\x4c\xee\xf7\xc9\xcb\x3c\x11\x84\xe6\x66\xfd\x11\x6a\xce\x0b\x19\xc7\x8f\x3e\xfe\xb7\xaf\xec\x05\x4a\x93\xa9\x4d\xd2\x1f\x93\xb4\xdf\x97\x01\xa6\x9a\x08\x31\x6f\x96\xa6\x47\x7d\x0f\xe4\xdb\xef\xa3\x9f\xa6\xea\xcd\xa8\x5f\x6f\xfd\x14\x16\x54\x74\x61\xe2\x87\xd1\x40\x50\x5d\x13\xcb\x3b\x4c\x32\x27\xe5\x27\x07\xb2\xdf\xdf\xa2\x6a\xa0\x6e\x0a\xf0\xdb\xfb\x7c\xfa\xe8\x1f\x57\x72\xf6\x64\xf8\xf7\xb9\xef\x47\xaa\x47\x1b\x69\x32\x91\x5a\xd9\xe4\x40\xd2\xce\x72\x9b\xa9\x90\xf9\x7a\x6b\xf9\xae\x0a\x41\xad\xe3\xf2\xaf\xdb\x4f\x0e\x4e\x12\x80\x8e\x6f\xcf\x26\x93\x38\x7e\xfc\x3f\x0c\x0b\x64\x11\x66\x61\x76\xb1\x4a\x00\xdd\xae\x99\x07\xda\x34\x3d\xdd\xa0\x09\x93\xff\x0e\xa8\x5a\x95\x26\x83\x25\x55\x17\x56\xbd\x60\x11\xc7\xc9\x5b\xc1\xd4\x54\x20\xc8\x41\x5f\xc5\xf1\x7f\xfe\x27\x3a\xa1\x06\xdf\xf8\xe6\x06\xe6\x5e\xf2\xaa\x2b\x98\xb9\x4d\x7e\xc1\x6d\x1e\xa1\x93\xff\xec\x9b\xba\x1f\x7d\xbc\x0c\x9d\x09\x2b\x59\x96\xeb\x2c\x57\x1f\x9d\x2b\x30\x5d\xbb\xe9\x3c\xcb\xaf\x47\xde\x0d\x31\xd9\xef\x1f\x30\x1f\x6f\xfb\x39\x84\x54\xa6\xda\x60\xd0\xdc\x05\x72\xbf\x4f\x9e\x99\x01\x8e\xba\x1a\x13\x35\x44\xb4\x9f\xf9\xdd\x6e\x1b\x99\x7d\xd1\x96\xdc\xca\x6b\xae\x22\xf0\x44\xfe\xea\xa1\xf2\x3e\x74\x97\xd7\x96\xb6\xba\xf2\x0e\x75\xab\xfa\xcf\xd8\x99\xff\x5e\x5f\x01\x88\x1c\x6c\xef\xf1\xd5\xe9\xc0\x51\x6b\x9c\x86\xf6\xd0\xaf\x3b\x96\x5d\x3f\x69\x08\x99\xf6\x7b\xaf\x20\xe3\x67\x17\x36\xa2\x1b\xb4\x3b\x33\x82\x76\x01\x10\xb7\x93\x7d\x8b\x40\xf2\xe4\x70\x8f\xe1\x6d\x0d\x40\x38\xdf\xfa\x1d\x64\x37\x03\x0a\x11\x50\x6c\x6b\x9a\xb1\x30\xd5\xdd\xac\xf3\xc5\xda\x1c\xb7\xf6\xe7\xd9\x64\x4c\xf6\xfb\xbe\x5d\x9a\x24\x69\xd2\x69\x5b\x24\x52\x85\xff\x16\x0d\xc4\x20\xfa\x6f\xd1\x97\x89\xc2\x81\x80\x9c\xec\x38\x9c\xb3\x59\xfc\x8a\x90\xfd\xbe\x79\x7f\xaf\x80\xa5\xeb\x46\x1d\xef\x1f\x96\x2d\x7f\x41\x50\x4c\x68\x0d\xde\xb9\xc3\xf7\x4d\xd2\xf2\x41\x9f\x80\x6c\x32\x82\xef\x88\xf2\x4a\x93\xc3\xa6\x60\xfd\x31\x7d\x15\x22\x64\x5a\x16\xb6\xb6\x3a\x6d\xda\xc8\xab\xba\x9b\x49\x38\xea\xd8\x9d\x55\x0a\x34\x35\x94\xca\xba\x3f\xe2\xb2\xf6\x00\x53\x3b\xb7\xbb\x32\x98\x09\xa1\x8f\xc7\x84\x74\x9c\xd7\x81\xd3\x9d\x84\xb8\xf3\x26\xc0\xc9\x7b\x78\xd0\xa1\x8d\x4d\x87\x37\x38\x6a\x97\xc5\x4e\x75\x0f\xda\x84\x3e\xfb\xd3\x83\x46\xd0\x29\xb2\x73\x89\x13\x64\xbb\x2c\x72\xf1\x99\x1f\x7d\xc1\x68\x4f\x66\x07\x7f\x77\x80\x67\xb0\xa0\xbb\x3f\xd9\xa3\xb3\x14\x55\x72\xaa\x6b\x04\xb1\x12\x45\xf7\x51\x14\xef\x24\xd1\xd5\x24\x46\x24\x8e\x1b\x62\xea\x20\x92\x9a\x8a\xa1\x1c\x20\x03\x90\xca\xfa\x1c\xde\x40\xe6\x70\x81\xb8\x2d\x11\x14\x90\x58\x40\xaf\x77\x82\x5d\x58\x2d\xd6\xe7\x62\xc9\x3a\xdd\x66\x98\x3c\xd3\x2d\x4f\x78\x05\x3a\x31\xa8\x01\x23\x0c\x27\x74\x63\x26\x23\x54\x3a\x1c\x24\x13\x70\xef\x5a\xa5\x9a\x72\x87\x99\x96\x1a\x96\x9f\x8f\xb4\x0c\x6e\xf9\x6f\x2a\x9d\x6d\xc0\x7c\x46\x67\x7a\x81\xe6\x34\xef\x55\x51\x5a\x86\x60\xd0\xef\x44\xa2\xab\xe3\x14\x9a\x57\x43\x27\x1b\x82\xf9\x20\x44\x0c\x75\xd5\x07\x32\x9c\x58\x1a\x58\x39\x39\xb2\xc0\xcd\x2e\x79\x1c\x27\x6a\xc0\xa0\xfc\xd1\x62\x0d\xa6\x84\xa3\xc5\x9a\x38\x74\xb5\x00\xd4\xad\xa5\x17\x3b\x9b\x53\xcf\x94\xf2\xa2\x81\x82\x5d\x03\xe4\xa9\xa2\x67\x6a\xde\x13\xb5\x47\xf3\x37\x22\xc9\x3d\x04\x35\xa1\xf0\x09\xe2\x4d\x73\x29\x77\x2c\xea\x3f\x4d\x6b\x78\x43\xad\x27\xc0\x0d\x6b\x52\xe1\xaa\x9b\xe6\xef\xb4\xd2\x93\xe1\xd8\xc9\xc5\x7a\x20\x4c\x37\xd3\x4a\x5f\x26\xe1\x6e\xf8\x50\x2f\xc1\xa4\x0c\xaa\x78\x26\xea\x38\x81\xf7\x8b\x4c\x2c\x78\x81\xe8\x4d\x20\x84\xc7\x71\xa7\x5a\xa6\x66\x10\x43\x5f\xc0\x4e\xae\xae\x47\xf8\x83\x62\xde\xb6\xdb\x05\x5b\x24\xeb\x8f\x0f\x07\x2f\xba\x02\xab\x07\x0b\x54\x52\x1d\x26\x4e\xed\x4a\xbb\x63\xd7\x54\x0e\xa0\x8d\x14\x6c\xbc\x5d\xb0\x96\x18\x28\x08\x3c\x69\x26\x95\x89\x96\xb2\xc2\xf3\x71\x1f\xef\x2d\x10\x83\x0d\x64\xb9\xb9\x99\x58\xfa\x04\x5e\x7a\xd1\xa8\x23\x82\x67\x56\x33\x34\x1b\xb0\x65\x04\x28\x82\x66\x0a\xc0\xff\x21\x54\xf9\xee\x4c\xcd\x41\x96\xe2\x4b\x85\xf2\x83\xa4\xfc\x20\xa9\xda\x20\x29\xdb\x86\xe0\x44\x7b\x15\xde\x89\x01\x19\x01\xdd\x45\x7b\xd4\x23\xb7\x4d\x7e\x40\x2f\x61\xf4\x95\x20\x36\x47\xcf\xe6\xe8\xba\x7a\xda\x5c\x07\xe0\x3c\x90\x44\xd5\xba\x82\x5c\xc7\x26\x8e\x4d\x5c\xbb\xa7\x04\xc5\xb3\xcf\xfc\x61\xee\xb5\x63\x9f\xa3\xd4\xaa\xc9\x21\x60\xa4\xb3\xc9\xe0\xa3\x5c\x73\xe5\xb4\x2d\xbc\xd2\x56\xd3\x0f\xc1\x08\xfc\x03\x2d\x2f\xb6\x99\x28\x5b\x58\xd6\x41\x5c\xf5\x74\xa0\x2b\x3e\x28\x88\x9f\xe9\x39\x7e\xaa\x5e\x5f\xf8\xd3\x7c\xbf\x57\x71\x6c\xdf\xbb\x14\x15\xa6\x47\x68\xdf\x56\x59\x06\x0a\x78\xe4\xe9\xab\x4e\x53\x91\x9c\xcd\x70\x5e\x35\xbc\x3a\x1d\xe6\x54\xb2\xf1\xa9\x3c\x53\x55\x73\x2a\x23\xde\x8c\xa9\x99\x9c\xc3\x5b\x2e\xa2\x50\x12\x8a\x0f\xae\x79\xc7\x03\x6b\x6e\x5f\x53\xfb\x86\x20\x16\x66\xad\x94\x8e\x5c\x82\x4b\x15\xeb\xab\x08\xac\xd2\xcf\xc7\xc4\xbd\xa7\xce\x76\x74\x32\xa7\x2b\x16\xa6\x40\x83\xf6\x35\xab\x0a\xd2\x92\x9c\x26\x2b\x53\x52\x3f\x1b\xe5\x62\x51\xec\xca\xfc\x9a\x5b\x30\x86\x95\x39\x95\xb0\xef\xd8\xb7\xc2\xaf\x59\x2c\xeb\x40\x68\xb2\x3e\x6f\x64\xfe\x09\xcd\x19\xfa\xeb\x66\xee\x12\xd6\xb9\x4c\x4d\xd5\x07\x42\x73\x78\x8e\x5b\x38\x3b\xd0\x9c\x2e\x08\xdd\x0d\x58\xe5\x9b\xf4\x50\x89\x43\xfc\x19\x81\xe7\x01\xa8\xc5\x77\xbc\x78\x0e\x27\xa7\xf9\x39\x1b\x9f\x0e\x87\x39\x79\x61\x56\x9b\xdd\x6a\xb3\x7c\x5e\xed\x36\xf3\xe1\x36\x5c\x3e\x9d\x45\xd1\xdc\x39\x2a\xb7\x6a\x40\x2f\xec\x3d\xb1\xda\x76\x2f\xaa\xf3\x6a\xd2\xaf\xa3\x61\xee\xf7\x51\xe4\x82\xc0\xc9\x0d\x2a\xac\x85\xad\x75\xab\xd0\x9e\x1b\xbd\x77\xb9\x95\xbf\x98\xad\x34\x0d\xbc\x0b\xe6\xcb\xf4\x4d\xf6\x86\xd0\x6f\x9d\x80\xe6\x09\x9a\x8a\x3a\xb9\xd5\x6c\xde\xbb\xcc\x6b\x4a\x26\x66\x33\x09\xff\x4e\xab\x28\x77\x6a\x2a\x66\xfd\xfe\x61\xc8\x92\xfd\x36\x07\x8a\x72\xf0\x77\x2e\x4d\x55\x93\x61\xfd\x5d\x65\x87\xb0\xe7\x7f\x84\x04\x07\xe8\xcc\x7e\xdf\x3f\x4a\x46\x6a\x06\xac\x55\xdd\x12\x0f\x3e\x9a\xb1\x68\x27\x96\xd2\x5c\xee\xa7\xf9\x68\x29\x05\x4f\xf3\x91\x09\x11\x9c\x96\xb5\x38\x0c\x4c\x31\x91\xdd\x1b\x59\xe5\xbb\x4b\xb1\x6c\xb6\x9b\x53\x31\xed\x2b\x7b\x9a\xee\xf7\x6a\x84\xfe\x4b\x12\xf4\x51\x93\xba\x18\x72\xba\x1b\x0c\xc8\x29\x1a\x39\xb9\x32\xb0\xa5\x39\x28\xbd\x58\x4d\x9e\xbc\x43\xb3\xe7\xd4\xd4\x84\x3e\xa7\x88\x2d\x0e\x4d\x98\xde\xe4\x89\xa2\x25\x1c\x2e\xfd\x46\xc5\x24\xf0\x37\x76\xf2\x01\x3c\x5a\xd0\x7b\x60\x49\x7f\xe2\x4b\x09\x2a\x6d\x3d\xc9\xd4\x01\x37\xf7\x6c\xde\x7b\x93\x27\xd2\x94\x65\xd1\x09\xef\xad\x99\x51\x5a\xd0\x2b\x2e\xac\x8b\xd6\x34\x1f\x55\x1f\xb0\x77\xaa\x4f\xa6\x82\x8f\xfd\x7e\x30\xc8\x47\x9b\xec\xf6\x3b\x1f\x64\x21\x91\xff\x0d\xb2\x0e\xc4\x6d\xc7\x94\xb3\x7c\xaa\x76\xd9\x0e\x77\xd9\xce\xa9\xf9\xfa\x24\x96\x56\xad\xdc\xf1\xa9\xe9\x22\x8e\xfb\x70\x32\xac\x0c\x1b\x1b\x8e\x4e\xe2\x66\x83\x8d\x49\xaf\xc0\xde\x3f\x85\xf5\x6d\x57\xfc\x9a\xed\xa6\xb0\x69\x56\x24\xdd\xc8\x24\x23\xbd\x6f\xb1\xa0\x35\x7d\xad\x30\x1d\xed\xef\xd0\x9d\xad\x75\x6a\xdb\x50\x15\xb4\x0e\x42\xfc\xe6\x7f\x27\x92\x15\x39\x38\x05\xd6\x8e\xfd\x84\xfe\x4d\xec\x7e\xda\x3e\xb0\x9f\x56\x84\x6e\x8f\xec\xa7\x15\xee\x27\xd7\x44\xb3\x9f\x82\x1d\xf5\xb2\xa2\x25\x63\xf7\xa2\x88\x06\x7e\x4c\x23\x63\xc7\xac\xe6\xed\x95\x4c\x42\x86\xb1\xcb\xcd\x5d\xa5\xab\xc8\x43\xe7\x23\x83\xca\x21\xa5\x63\x61\x79\xe5\xac\x04\x62\xad\x63\x12\x10\xbc\x36\xd9\x49\x20\x4c\x04\x1c\x9e\x73\xeb\x60\xdb\x1a\x67\xc2\xdf\xa1\x06\x34\xe2\xc0\x46\xb2\xf2\xdd\x0b\x90\x24\xde\xdc\x50\x9d\x39\x30\x3a\xe0\x82\xb9\xc0\xf2\x94\xbb\xe4\x44\x21\xa9\xf9\x56\xd4\x7c\x0c\xe0\xa4\x3e\xc0\xda\x7c\xeb\x58\x1b\x8a\xea\xc2\x9e\x91\x3f\xb3\xed\x24\x38\xd4\xf5\xcb\xcb\xb1\xfb\x41\x60\xe1\x93\x04\xe1\xe7\xa1\x26\xae\xd3\x81\xa8\xe0\xf8\x5c\x4d\x5e\x51\xac\x51\x97\x1f\xb1\xa0\xa6\x1e\x34\x2b\x27\x54\x5b\x9d\x15\xbc\x6d\x21\x78\x36\xe8\xac\x80\xa2\xa9\x6d\xe4\x20\xa7\xfe\x26\x02\x47\xd6\x6c\xe3\xb0\x8e\xc9\xbc\xc9\x4e\x1f\x3c\xbe\x48\xd5\xe8\x9e\x2f\xea\x1c\xb0\xd5\x6c\xa5\x15\x8f\xbe\xe5\x89\x04\x28\x81\x06\xd2\xb6\xab\xcf\x9f\x6d\xed\xea\x08\xd5\x56\xd9\x61\x09\xbe\x13\x6b\x87\x34\x45\x64\x05\x7b\xea\xe1\xa2\x6a\x59\x34\x5d\x57\x50\xe3\xa1\x4d\x34\x28\xda\x41\x51\x19\x5c\xd0\x68\xc9\xfa\x13\xba\xb3\xa6\xe7\xc7\x51\xd8\x77\xec\x6d\x9e\xbc\x50\x09\x02\x87\x3b\x3f\xa2\x54\x21\x87\xb9\xb3\x26\xe5\x1d\xcc\x25\x63\xb9\x43\x75\xf3\xc8\xde\x0c\x6c\x1c\xc0\x85\x64\x5d\x1d\x27\xec\x25\x18\x15\x69\x99\x70\xd2\x5b\x9b\x4a\xcd\x7a\x7c\x0d\x12\xf8\xa3\x8d\xf4\xad\x91\x1d\xf7\x57\xda\x16\xa4\xfe\x13\x90\x45\xce\x7d\x03\x5f\xb9\x63\xd0\x87\x30\x4e\x1b\xb1\x4c\x57\x21\x01\x48\x42\x09\x32\x0c\x10\x07\x39\x54\x93\x3a\x98\x25\x00\x24\xf5\xe0\x6e\x22\x74\xce\x55\xf5\x66\x5a\x85\xb9\x81\x45\x45\x8f\xbf\x8e\x2d\x02\x44\xd1\x58\xfe\x09\x0e\xf6\x50\xba\x0b\x78\x4f\x8f\x56\xbb\xa2\x98\xfe\x0d\xac\xdb\x30\xb8\x6f\xd5\x19\xf7\xfb\x36\x63\xb5\xf2\xb0\xf9\x04\xf2\xd8\x7a\xab\x49\x2c\x48\x0a\x86\xf7\x36\x3c\xb2\xde\x4a\xc3\xf3\xce\x01\xcc\x10\xba\xaa\x85\x20\x26\xce\x6a\xbf\x5f\x38\x43\x12\xdc\x16\xc0\xa0\x66\xb5\x2b\xab\x5d\xe0\xa9\x5f\xea\xad\x6d\xd0\x5b\xb9\x07\x9b\x85\xbf\x1c\xae\x89\x39\xf9\xfc\x20\x57\xd8\x36\x20\x57\x6a\x06\x06\xb7\x8c\x35\x39\x3c\x24\xed\x03\x85\x63\x24\x80\x9a\x2a\x92\xae\x73\xfb\xca\x44\xbf\x83\xcb\x2d\xcd\x64\x48\x54\x7f\xae\x59\x26\x19\xb6\x19\x2e\x35\x82\xd0\x25\x87\x7b\xce\xd9\xd8\x63\x02\xf4\x14\x13\x54\x30\x79\xe8\x7a\x6c\x05\x4d\x90\x40\x7f\xce\xec\xe8\x57\x15\x8b\x2d\x80\xb5\xb6\xe3\xe6\x06\x28\x3f\x04\x62\x83\xdf\xbf\x60\x23\xf5\x7d\xcd\x17\x82\x00\x7c\x7f\xe1\xd0\x45\x4a\x87\xae\xec\x34\x04\xdc\x10\xfa\x17\xee\x69\x2b\x24\xed\xd2\x27\xa7\x3b\xb6\x05\x6d\xb9\x82\xdd\x1f\x7a\xf9\x50\x9c\xef\x00\xbe\x4a\x0c\x76\x6e\xe1\x84\xca\x01\x83\x42\x27\xa0\x8f\x2a\xce\x32\xba\x66\xf9\xf9\x62\x08\xc8\xf6\xe2\xac\x24\x45\xa0\x22\xb5\x9a\x8e\x53\xe1\x4f\x90\xfc\xbc\x74\xd7\xb7\x6d\x60\xed\x41\x93\xf5\x74\x91\xe6\x64\xb8\x23\xbd\x6d\x9f\x99\x3d\x18\x96\xb1\x45\x21\xdd\xf2\xe1\xae\x82\xbb\xac\x76\x50\xbb\xb3\xa0\x85\xb0\x61\x6b\xd3\x5b\x73\x10\x39\x62\xb4\xca\x6f\xf9\xf2\x3b\x38\x7e\xa7\xd2\xeb\xee\x06\xb0\xbc\xe9\x98\xd0\x3b\xa6\x86\xfa\x7c\xe3\x24\x2f\x77\xc0\x73\xeb\xc1\x86\x50\x7d\x36\x19\x4f\x8b\x50\xe5\x69\x9c\xea\xb3\x65\x3d\x28\xd0\xbe\xd0\xc3\xe4\x6e\x3a\x4e\x27\x63\x42\x52\x75\xbe\x19\x2c\x87\x7f\x09\xfa\x8d\x30\x7a\x03\x97\x64\xb8\x21\x34\xb0\x1a\xfe\xd5\x1f\x13\x5e\x6b\xc9\x6a\x13\xed\xf7\x1f\x0c\x81\xb4\xc8\x70\x3a\xd8\x68\x41\xb9\x95\x17\xc8\xf6\xf8\x35\xb4\xcf\xda\x69\xc8\x40\xbb\xe2\x45\xab\x78\x33\x5d\x9d\xa5\xe3\x42\xac\xe9\xaa\xa4\xad\x14\x64\x10\x3a\x76\xf9\x05\x28\x3d\x74\x27\x74\xe4\x8f\x3a\x81\x09\xa1\x86\x87\x56\x4c\x3f\xe4\x79\x44\x8f\x16\xeb\x69\x65\xaf\x62\x3e\x87\x13\x92\x9a\x7c\xf5\x50\xb0\x0b\x6b\xb6\xe7\x9d\x2c\x59\x6d\x13\x23\x96\x5d\x5a\x55\x88\x8f\x20\xa8\xbf\xf6\x1a\x22\xa9\x43\xb6\x4b\xfb\xe3\x80\xda\x7c\x10\x6d\x38\xf4\xa0\x1a\x04\x44\xbf\xef\x6a\x80\x37\xb5\x17\x0c\x1d\xb0\x58\x59\x85\x72\x9f\x86\xa1\xc8\x1b\x50\x87\xe8\x24\x89\xaa\x26\xd4\x21\x38\x48\x02\x47\x82\x5b\x32\xd4\x16\x9b\x2f\x34\xa3\x02\xdd\x73\x6a\x11\xf8\x6b\x06\x56\x16\xf3\x50\x79\xcc\x43\xdd\x01\xed\xe7\x8d\x42\x61\x8f\xe5\xc1\xcc\x06\x63\xf1\x5d\x07\xe2\x07\xda\x81\x86\x1a\x71\x51\xb6\x5c\x46\x84\x46\xe5\x26\x53\xd6\x27\x5d\x22\x47\x1b\xb9\xe4\x00\x6b\x23\xf4\x34\x67\x25\x62\x93\xa5\x82\x45\x5b\xc5\xaf\xa3\xca\x28\xa0\x69\xb9\x56\xb2\x1b\x73\x99\xd4\x84\xee\xd8\x42\x26\xa5\x35\x5c\x33\xb7\x91\x8c\xf4\x4a\xbc\xb3\x3f\x59\x69\xae\xe2\x38\x09\x3f\xad\x0e\xd6\xb5\x75\xce\x8d\x19\x47\x1b\x50\x87\x7d\xf4\x8f\x8f\xe5\xd7\x8f\xc8\x6c\x0c\x37\x3b\xb5\xdf\x3f\xfa\x78\x61\x9f\x84\x31\x1d\xb1\x2f\xf7\x41\x17\x92\x82\xd5\x7a\x91\xe4\xd4\x96\x89\xf6\x4c\x0b\xcf\x63\xba\x22\x18\x93\x72\xbf\x2f\xce\xe1\x79\x05\x84\x0d\x4e\xce\xd6\x73\xfd\x3e\x1c\xac\x77\xf5\x31\x15\x2c\x12\x52\x47\x3d\x8c\x60\x4c\x4c\x0b\xa6\xcf\x25\x72\xd1\x53\xb4\xcf\x93\x54\x0f\x27\xa4\x36\x04\xe9\x38\x85\x01\xc7\x0c\xbb\x41\x35\x82\xd8\xcc\x9f\x45\xae\xd3\xa8\xdc\x5d\x6a\x95\x81\xb9\x20\x24\x1b\x76\x27\x13\x00\x49\x55\x1d\x92\x02\x9c\x8a\xef\x06\xc2\x1c\x2e\x01\x05\x2c\x9c\x39\x56\x14\xd1\x35\xb3\xfe\x53\xeb\x05\xfe\x9a\xeb\xf5\xfb\xec\xb2\x12\x6b\x6e\x43\x2b\x92\xe2\x51\x46\x4e\xb7\xa7\xc3\xe1\x96\xac\x07\x2c\xa3\xab\x01\x8b\x3e\xa2\x2f\xc3\xf5\x59\x11\xc7\xc9\x6a\xc0\xb6\x32\x29\x86\x6b\x42\xe8\xaa\xcf\x16\xde\xd0\x43\x24\x92\xae\xc0\x6e\xcd\x3a\xe3\xd6\xb4\x1a\xf9\xca\xeb\x72\x6b\x25\xd0\xfe\x18\xee\x77\x5b\x36\x3e\xdd\x9e\xc9\x8e\x47\x8d\xad\x7b\xd4\x58\xb2\x30\x7a\xb6\x45\xdf\x9e\x35\xcf\x98\x71\xbc\x74\xd7\x4d\xaf\xd8\x4d\xee\x7f\x37\xd7\x8e\x2d\xb5\x37\xd8\x35\x6b\xb4\x6e\x4d\x88\xf3\xa3\x18\xa0\xf4\xb5\x34\x97\xb4\xb9\x29\x38\x05\x9b\xe6\x8c\xe8\xa9\x04\xb0\x0c\xfa\xcc\x3e\x06\xa4\xe0\xab\xc7\xc3\x9b\xe5\x28\x8f\x4f\x54\x22\x69\x4e\xbc\x1c\xc1\xde\x52\x73\x70\x5b\x14\x50\xea\xaf\x5a\xef\x3e\xfe\xe5\xd5\x5d\xd1\x15\x9b\xcd\x29\xa2\xb8\x7a\x90\x20\x00\x73\x75\x79\x24\xd3\x89\x98\xe5\x73\x72\x5a\x19\x76\x2c\x79\x22\xf1\x46\xb1\x91\x89\x22\xf6\xc1\xeb\xd4\x81\x30\x29\x14\x40\xd9\x17\xb1\x0c\x53\x4a\xff\x62\x76\x8f\x3f\x19\x46\x78\xdf\x93\xc8\x4c\x4a\x72\xf8\xae\x61\x6c\x57\x49\xce\x03\xa9\xa9\x3e\x67\xe3\x53\x3d\x1c\x92\x9f\xad\x72\x24\x8d\x22\xaa\x66\xda\x8a\x4d\xe1\x97\x96\x34\x1a\x2c\x79\xc1\xb5\xe1\x9e\xe1\xd8\x0a\xf9\xbb\x1f\x3b\xf8\x3b\x7b\xf4\x00\xfa\xc9\x9a\x96\x4c\x50\x44\x2f\xa1\xb2\xe6\xcd\xc8\xe9\xfb\xd2\x92\x25\xf9\x74\x97\xa5\x45\x46\xcc\x65\x8d\x0a\xe7\x9d\x09\xe7\xab\xc4\xfb\x37\x70\xb0\x72\x20\x88\xbb\x7e\xef\xf7\xea\x9c\x71\x0f\x93\x54\xe6\x7f\xf0\xfd\x3e\x91\x4c\xd1\xbe\x85\x4b\xa1\x8a\x90\x40\x4b\x30\x63\xf9\x34\x11\x67\xe3\xa9\xc8\x52\x6d\xea\x22\xa9\xf9\xda\x85\xf7\x8f\x74\x8c\xe4\x26\x63\x65\xcf\x23\xce\x18\x3a\xb7\x58\x67\x0a\x2c\x49\x8b\xd0\x35\xde\x42\x16\xbb\x8d\xb0\xe1\x00\x4b\xe0\x62\x6e\xa4\x5a\x5a\x9f\x82\x57\x4a\xee\xb6\x90\xc6\xcd\xc2\x02\xf7\xdb\x8a\x55\x71\x74\xcd\x02\x81\xd6\x15\xd7\x2f\x79\xb1\xe5\x2a\xd1\x14\x8a\x02\xcf\x92\x11\xa1\x5b\xd6\x1f\x9f\xf6\x4d\x2f\xc8\x7e\x5f\x24\xfd\x2d\x39\xdd\x9a\xdb\x9d\xdd\x95\xbb\x9a\x3b\xa4\x8c\xec\xf7\xd1\x47\x11\xd1\x0d\x7b\x2b\x93\x25\x5d\x93\x69\x74\x13\xa5\xab\x38\x36\xa1\x8c\x2d\xa7\x91\x88\xd2\xfe\xca\x10\xf7\xd2\x12\xf7\x25\xc1\xed\x11\x6d\x81\xd4\x98\xc8\xed\x7e\xbf\xd9\xef\x93\x0d\x8b\x4c\x0b\x16\x71\xbc\xe8\xb3\x0d\xb9\x77\xcc\xfa\x84\x16\x89\xdf\xb6\xf9\x2a\xd9\xc4\x71\xb2\x60\x1b\x42\xc5\xf9\x38\x8e\xfb\xd0\x48\x8b\xbc\x6b\x1a\x79\xc7\xfe\xce\xd1\x7b\x95\xa4\x19\xa1\x9a\x96\x81\xd6\xd9\x09\xf8\x07\x06\xb9\xdb\xdd\x68\x9d\xeb\x0b\xe7\xb1\xec\x2e\x40\x84\x3c\x76\xc4\xc2\x8a\x2b\x2c\x14\xb1\x77\xea\xe8\xbc\x82\x85\x6a\xc0\x9d\x8e\xb7\x2c\x38\xf6\xbf\x8f\x88\xdb\xb3\x6e\x15\x07\xe2\xeb\xa4\x1c\xc2\x4a\x9b\x8c\xbe\x49\x47\xdf\x90\xaf\x6b\xd7\x1c\xb4\xa7\xf5\xae\x2d\xf1\x26\x72\x3e\x9e\x7a\x6c\xde\xbf\xa4\x08\x86\xfb\x97\xca\x6b\x16\x5a\x3b\xbd\xb1\x9e\xcd\xac\xef\x32\xe7\xd3\x0d\x47\x17\x6f\x28\xe3\x69\x7e\xc6\xc6\x69\x7e\xce\xa4\xc3\x78\xbf\xdf\x05\x43\xe9\xe6\x69\xc0\xbe\xf9\xda\xe3\x59\xed\x0e\x17\xa1\x7f\xe5\x85\x14\xa5\x56\xbb\x85\x96\x2a\xbd\xb0\x9e\x75\x02\x5a\xd2\x40\xbb\xb1\xee\xd2\x3b\x2d\x8d\x4a\xae\xdf\xc2\x99\xd7\xf0\x26\x7d\x5d\xb9\xf6\xb6\x67\x22\x55\x4c\xcc\xf8\xbc\x67\xfe\x83\xd3\x23\x32\x8c\x44\xd4\x67\x66\x53\x43\xa0\xa6\x7f\x13\xa3\x75\x56\xbe\xbd\x11\xef\x94\xdc\x72\xa5\xef\xc0\x3c\xcc\x3a\x88\xa7\x7f\x33\xa9\xd0\x41\x3c\x5c\x8d\xc9\x81\x5e\x75\x54\x5f\xf7\xe5\x6c\x6b\x9f\xf1\x39\xa4\x7e\x26\x17\xc7\xbc\x3e\x2f\xe5\xe2\x40\xb3\xe5\xf2\x07\x50\xf5\x6c\x7a\xc7\x06\xb8\xd0\x9a\xca\xa9\x9e\x46\x86\x18\x47\x69\xb4\x13\xa0\x48\x12\xcd\x93\x8d\x42\x23\x54\x14\x29\xb4\x4a\x0a\xc9\x74\xbb\xc4\xa6\xe3\x9a\xc1\x40\x80\x97\xd5\x99\x98\x33\x33\x4a\xe0\x2d\x48\x64\x1b\xce\x18\x0f\xac\xc6\xe0\xb5\x2d\x11\x74\x42\x68\x7f\x0c\x3d\x78\x7b\xcd\x55\x91\xdd\xa5\x5f\xe9\xa4\x6b\x56\xf8\x48\xcb\xcf\x5c\x4c\x79\x7a\x61\xe8\xd0\x6b\xb9\xb4\x7e\xb2\xdd\x4c\xa1\x96\x98\x40\xaf\x02\x17\xa6\x89\x44\xaf\x95\xbc\x01\xb9\xf4\x73\xa5\xa4\x4a\x22\x5b\x47\x79\xb2\xc9\xee\x4e\x84\xd4\x27\x97\xfc\x04\x7a\xb3\xda\x15\xa3\x88\xf4\x82\xee\x49\x9b\xd4\x3e\x84\x98\x69\x4f\x05\x35\x7f\x2e\xb6\x7c\x91\x72\x2a\xb7\xd9\xef\x3b\x9e\x6a\xf4\x63\x62\x7e\x1f\x1c\x40\x2b\x14\x60\x92\x7e\xc7\xc5\x60\x40\xff\xe6\x60\x6d\x89\x1d\xe2\xce\xae\x1e\x19\x66\xd7\x8e\xae\x71\x76\xfe\xcc\xcd\x10\xbb\x96\x01\x5f\x0c\x23\xdf\x92\x9c\xf0\x38\x56\x0f\x4f\x45\x67\xf3\xe1\xf1\xc8\xf7\xe1\x40\x28\xf2\x89\xe0\x12\xab\x31\x59\xe6\x7a\xec\xaa\xed\x07\x02\x1b\xc7\x0d\xf5\xeb\x42\x1c\x7b\x93\x9e\x86\xf3\x38\x02\xd6\xfd\x7b\xbc\x6f\x58\x3e\x3e\x45\xd6\x3a\xd5\x53\xe0\x98\x03\xae\x98\xd0\x17\xdc\xeb\x37\x82\x45\xec\x77\xc2\x6a\x35\x42\x6b\x7c\x6b\xbd\xc6\xe9\x17\x06\xbd\xc1\x43\x09\x06\xba\x3a\x0f\xe3\xf3\xad\x92\xdc\xbb\xae\xcf\x2b\x6e\xf3\xdc\x30\xe1\xae\x39\x41\xb8\xb5\xbf\x15\x2c\x0c\x53\xac\x5e\xbf\x7f\x00\x89\xe3\x5f\xb0\x08\xfb\x2a\xe0\x1c\x37\x3a\x38\x87\x8c\xe5\x08\xda\x50\x06\xfe\x5d\x9c\x54\xb4\x27\x02\x3b\x35\x00\x2a\xae\x90\x3c\xac\x44\x34\xc9\xcc\x85\x7d\x9c\x4e\x08\x19\x4c\x02\x93\xeb\xf2\x74\x77\x26\xe0\xe9\xdf\x75\x61\x47\xb9\x17\xae\xb6\x87\xaa\x37\x66\x00\xd1\x09\xd8\x81\x1e\xfd\xcd\xb1\x95\xc5\x4c\xcd\x6d\x8b\x47\x8b\xb5\x39\x81\x7f\x0f\xe6\x4d\x39\xce\x5b\x52\x48\x08\x4e\xf7\x51\x78\x78\x20\x86\x00\xbe\x37\x5b\xff\x89\x4e\xbb\xf4\xd8\x4e\x7e\x53\x7e\xc6\x91\xb8\x9a\x0e\x42\x8e\xf2\xe1\x0c\x5b\x9e\x70\x62\x35\x3e\x7d\x2d\xef\xef\xb6\xbc\x56\x13\xb9\xe7\x60\xc7\x5b\x2d\x32\x14\x8d\x50\xc1\x78\x8e\x05\xdd\xe4\x41\xb4\xf3\xe2\xab\xd8\x98\xe6\x2c\x11\x15\xac\xe4\xa3\xc7\xc0\x13\xa0\xab\x58\x33\x5c\x44\x33\x31\x7b\x3c\x47\xf6\x2c\x3c\x53\x33\xa6\x06\xf9\xf9\x39\xb8\x25\x4d\xb2\xa9\x98\x3d\xfe\x3a\x1b\x4e\xe6\xe9\x98\x9c\x33\x49\x72\x96\x79\xb3\xdd\x7e\x02\x91\x83\xc9\xfc\x4c\x12\x72\x0f\x05\x7e\x9d\x0d\x1e\xcf\xed\x89\xaa\x58\x36\x98\xe0\x53\x4c\x69\x76\x1a\x02\xd4\xbe\x5d\x01\xd0\xa0\xa5\x2d\x27\x11\x49\x87\x13\xc7\xeb\x94\x67\xe3\xa9\x4e\xc7\x8c\x95\xc8\x72\x69\x8f\x94\x52\x0e\x27\x38\x50\x86\xf8\x36\xc6\xa8\xb1\x85\x0c\xf5\xa8\x8c\x41\x80\x6b\x31\x99\xa6\x17\xd5\xef\xc4\xe2\x65\x57\xd3\x9b\x70\x82\xc4\x87\x40\xfe\x54\x43\x65\xc8\x71\x76\xcf\xa4\x2b\x00\xd3\xa0\x5b\xe2\xd9\x78\x1e\xe4\x6b\x2e\x01\xa7\x23\x07\xac\x4a\xa6\x9a\x27\xb7\xae\xf0\x16\xad\x9e\x43\x66\xee\x1b\x34\x67\xae\x2a\xec\xbb\xd5\x49\x6e\x91\xd8\x7c\xa6\xe7\x44\xcd\xcc\x9f\x79\x1c\x5b\x95\x3a\xfb\x5d\xb1\xe1\x90\xaa\xba\x85\x8d\x4f\xe5\x99\x09\x72\x04\x46\x3a\x02\x93\x31\xcc\x3a\x93\xf3\x79\x2f\xf3\xe5\x65\x0e\x4b\x79\xb4\x86\x3e\x22\xae\xa5\x9a\x85\xdf\xf3\x69\x55\x79\x18\x4c\x52\x13\x60\x0e\x81\x5a\xfb\x30\x04\x19\x3b\xa7\x2b\xf4\xe9\xaa\x90\x97\x59\xd1\x6a\x55\xc9\x7c\xdc\x4c\xce\x7b\xe5\x68\xab\xf8\x32\xc9\x61\x36\x49\x1c\x5b\x34\x5e\x41\xcb\xd1\x75\x56\x10\x5f\x0b\x7e\x56\x58\xa5\x66\x8e\x2e\xfc\x55\xff\x38\x27\xb6\x94\x0b\xbf\x34\x2d\x4f\x95\x70\xf6\x0c\x2c\xb5\x51\xea\x39\x15\xf6\xba\x25\xac\xaf\xde\x94\x1b\x62\x06\xe4\x00\xc5\x85\x4f\xa5\x54\xcb\xee\xa5\xd0\xa2\xba\x00\x57\xe6\x6a\x7c\x6a\x6b\xac\x6a\x32\x24\x3b\x8d\xe4\xe5\x3f\x11\xc3\xc9\x1d\xad\xd3\x3a\x89\x48\xa1\x51\x40\xef\x52\x81\xf4\x59\xef\xf7\xc8\xfd\x9b\x56\x81\x32\x79\x47\x9b\x6c\xb5\xef\x6d\xb5\xf5\x42\xeb\x45\x40\x76\x73\x01\xeb\x2e\xe2\x4d\x35\x56\xaf\xb5\x27\x90\xbe\x00\x44\xcc\xa4\x1c\xe4\x92\x07\xc0\xad\x7d\xe2\x7c\x70\x76\x96\x57\x15\x83\x2e\xd7\x28\x38\xb0\x18\x1f\x82\x32\x41\xd2\xf9\x24\xa4\x85\x83\x1a\x17\x1e\x78\x6b\x3e\x50\xbc\x05\x3c\x41\x36\xa2\x63\x62\xc0\x5f\x37\xec\xb1\xa6\x24\x85\xfb\xd3\xd7\x4d\x1d\xce\x7e\x35\x93\xe8\xd2\x99\x9f\xd5\x13\x4c\x79\x23\x47\xca\xcf\xc1\x32\x8c\xe5\xe8\x6a\x9c\x0a\x56\xa3\xe4\x76\x9b\x09\xe6\x49\xd9\x67\xb7\x1c\x70\x10\xc6\x47\x06\x61\x90\xa8\xa9\xaf\x0a\x3b\x3a\xfc\x9c\x27\x82\xa4\xe6\xa4\x59\xf2\x55\xb6\x2b\x74\x85\x8f\xdb\xc1\xdb\x7f\xaf\x93\x70\xe8\xaa\x5c\x1e\x67\xb7\x23\xd3\xb3\x56\xa6\x92\x6b\x7c\x5d\x41\xf7\x1d\x5d\xec\x9a\x53\x64\x10\x41\xc7\xbd\x4a\x44\xeb\x01\x58\x31\x6e\x9f\x69\xac\x43\x10\x78\x41\xac\x85\xb0\xfb\x83\xdf\x3e\x86\x76\x32\x41\xfb\x22\x8e\x9f\xc8\x44\xa1\x15\x63\x3d\xb5\xc5\x09\x1f\x1f\x0c\xaf\x06\xaa\x49\xd8\xe2\x26\x9f\x76\xdd\xc0\x6b\x35\x6c\x03\xb3\x1b\xbf\x27\xf0\x15\xdb\xa7\x17\xe4\x5e\xd4\xeb\x31\x64\xa8\x16\x30\x33\x04\x30\x69\x07\x5a\xcb\x40\x91\xe8\x50\x35\x84\x3e\x91\xcd\xb4\xa4\x9d\xdd\x42\xb1\xd3\xc1\x40\x41\x77\xcc\xae\xfa\x5e\xac\x64\xda\x78\xe1\xef\x5a\xd2\xe6\x3c\xaa\xf3\xb2\x2d\xe4\x5f\xcd\xb8\xc5\xa7\x6d\xac\xd3\x5a\xd2\x83\x63\x0d\x90\x66\x25\x9a\xbd\x05\xe0\xd7\x5a\x1a\xe7\xde\xdd\x6c\x3e\x4d\xd1\x8c\x2f\xe5\xf8\x64\xca\x2d\x66\x5b\xd8\xb3\xb4\x31\x6d\x90\xf2\x69\x91\x95\xa5\x4d\x0e\xbf\xe9\xe5\x95\x0b\xb3\xbf\xe8\x8d\xca\xb6\x2e\xcc\xff\xa6\x37\xf9\xf2\x8a\x6b\x08\xc3\x5f\x07\x38\x0e\x7e\xc9\xf9\xcd\x56\xaa\x8e\x0d\x61\xf5\x44\x9a\xd4\xe4\x85\x53\xed\x6e\x46\xbc\x97\x07\xb8\x54\xfe\x0a\xc5\x1f\x47\xc6\xa4\x19\x05\xfc\x4b\xba\xa0\x2b\x16\x96\x42\xd7\x2c\xe1\xec\x69\x27\x1d\x26\xc4\x3d\xcd\x6c\x19\xf7\xa2\x1d\x6d\x5d\x03\x3a\x6f\x42\x2c\x72\xde\x84\xc0\x85\xe7\xc3\x58\xd3\x14\x21\xa1\x3b\xc5\x16\x25\xd7\x3f\x0b\xbe\xcc\x75\x76\x59\x70\xf0\x81\x6e\xfd\x2c\x85\xce\x80\x34\xa1\x11\x18\x85\x31\xa6\xc8\x1a\x6e\xcb\xdb\x4a\xec\x97\x5d\xca\x6b\x6e\xe5\x7e\x82\x5b\x91\xa1\x15\xce\xf9\x5b\xc3\xaa\x5b\xf2\xd4\x20\x64\x15\x68\x20\x64\xc1\x96\xd4\xe0\x0d\x02\xf0\x91\xd0\x02\xff\xb4\xd6\x0c\xee\xa4\x4a\x75\x37\xdb\xe7\x4b\x10\x7d\x6b\xb9\x3d\xaf\x47\x4c\x6d\x9f\x86\xf5\xe0\xf4\x48\x39\x67\x6c\x19\xc7\x89\xc9\x63\xdf\xce\xe8\xd6\xa7\x40\x4c\x86\x4d\x1c\x27\x5b\xb6\x19\xd6\x42\xc9\xc1\xcd\xa2\x96\x5b\x56\x79\x6a\x85\xa0\x02\x30\x35\xec\x07\xbc\xd6\xb1\x28\xa2\x11\xfc\x8a\x18\xcb\xa7\xc9\x96\x75\x0c\x48\xbd\x06\xda\x28\x60\xbc\xbd\x8d\x48\x9a\x44\xa6\x70\x28\x64\xcb\xc6\x69\xb4\x01\xec\xb3\x08\x2d\x00\xb6\xac\x6b\x9c\x1b\x0d\x7f\xf4\x98\xd4\x1b\xba\x85\xc6\xa3\xc9\x81\x44\xba\x99\xb1\x2d\x2d\xd9\x9a\xee\x58\x63\x30\x68\xc1\xd6\x8d\x01\xb4\xcf\xcd\xc9\x82\xfd\x2e\x12\xbf\x4d\x08\x09\x9d\xa8\x6d\x4c\xcc\xa2\xe9\x6b\xaf\xcf\x5a\xae\x2e\xab\x54\xe8\xeb\xee\x40\xb5\xca\xaf\xae\xb8\x7a\x2b\x7e\xe0\x77\xcf\xe4\x0d\xdc\xca\x9f\x08\x52\x0b\x07\x23\x3a\x13\xf1\xba\x11\xf1\xf3\x36\xfd\x2c\x28\xbf\xe5\x8b\xa7\x72\xb3\xc9\xc4\xb2\x49\x5f\x8b\x16\x5f\x5f\x51\xd3\x42\xcd\x78\xe8\xf8\x19\xa5\x1a\xae\xfc\xe7\x05\x5f\x68\x95\x2f\x9a\xa7\xcf\x73\xee\x6d\x25\x09\x5d\xe5\x62\xf9\x4e\x96\x2f\x5b\x64\xc5\x31\x26\x93\x9e\x06\x29\x74\xce\x86\x13\xaa\xd9\x30\xd0\x50\x94\x6c\x4c\xb3\xc6\x7d\xf2\x54\x9e\x01\x82\x40\xc6\x7e\x0c\x4e\xe1\x8c\xe6\x50\x26\x71\x62\x52\xd0\xda\x3f\xf5\x6e\xe2\xe8\x46\x5e\xf3\x97\xc7\xc4\x65\x60\xbc\x29\x2c\xa4\x6c\x85\x77\xf4\xed\x5d\x95\x5a\x55\x9a\x9b\x4d\x2c\x5a\x01\x1b\x1e\x33\x83\x36\x33\x4a\x37\xa6\x3f\x8a\x44\xe0\xd1\x8b\xc6\x40\xd0\xef\xca\x18\x51\x17\xaf\xe5\x35\xff\x25\x2f\x77\x59\x51\xdc\x91\x94\x9f\x8d\xa7\xca\xb1\xc1\x0a\xd8\xe0\x03\xdd\x49\x33\x86\xf8\x76\xf3\x60\xf3\x3d\x14\xb7\xaa\x2e\x02\x62\x54\xca\x0d\xd7\xeb\x5c\x5c\x61\xa7\xf8\x32\x21\x53\xf5\x80\x5d\xb1\x7f\x25\x4a\xbf\xb2\x72\x8c\x90\x4b\xc0\xf9\xfa\x51\x24\x8a\x8a\xaa\x4b\xfd\x89\xe7\x60\x4c\x17\xf0\xf0\xc9\xc1\x96\x02\x12\x1d\xac\xd9\x8c\xcd\xa2\x65\x9a\x1f\x0e\xc1\xca\xf8\xe5\xf8\xca\xa0\x92\xa9\xe3\xab\x23\x63\x63\x5a\x36\x57\x47\x76\xa6\x4f\x07\x83\xcc\x49\xdb\xdd\x99\x54\x52\xf0\x64\x17\x3c\x49\xc9\xa9\x64\x3b\xd8\xfd\x29\xfe\x61\x92\x26\x25\xfb\xcd\xcb\x6f\x72\x2a\xaa\xe5\x54\x77\x3b\x58\xe2\x7a\xfa\xe5\xa1\x09\x09\x26\xc2\xf9\x84\xea\x37\x96\x0e\xaa\xa0\xc3\xba\x89\x63\xd4\x54\xec\x98\x30\x90\x51\x3e\xb8\x36\x33\xc4\xbd\x21\xc1\x2c\x64\x6e\x21\x65\xb0\x90\xac\x2a\xd6\x53\x9d\x08\x9a\x39\xe4\x2d\x18\x0f\x07\x51\x72\x25\xb3\xe2\x29\xbc\x84\x81\x82\x01\x0c\x48\x18\x4a\x9c\x67\x2a\xeb\x6e\x12\x41\xe0\xcd\x70\x09\x8a\xd2\x24\xf7\x96\x6b\x1f\x6d\x74\x1c\x67\x8c\xa9\xfa\x4d\x31\x8e\x7f\x15\xf6\x2a\x4a\xdf\x9b\xc6\xec\x6c\x3b\xe0\xb4\x42\x17\x97\x74\x07\xcb\x9e\x3a\x8b\x9a\xc0\xf6\x66\x7c\x9a\x9d\xa9\x8e\x37\xed\x6c\x30\x20\x61\xf8\x2c\x9b\x07\x4d\x67\xf9\x2c\x9b\xdb\xf5\x86\xb8\xb1\x1d\xc2\x98\x0e\xa9\x94\x55\x40\x00\x21\x94\x33\x41\x44\x3d\x98\xe0\x46\x55\xbd\xf2\xf1\xda\x2b\xdf\x69\xc2\x2d\xe4\xfc\x7e\xaf\xc0\x88\x0f\x3b\x13\xc7\x62\x3a\x1c\x8a\x74\x30\x50\x01\x99\xf3\xcf\x7d\x82\xd0\x8c\xbd\x95\xf0\xac\x3d\xed\x78\xf0\x78\x2b\x41\x03\xf9\x90\x56\xaf\x7d\xb2\x2b\x61\x15\xcd\xc9\xa1\xe3\xe5\xa4\x1f\x26\x88\xe3\xbe\x29\x97\x1c\x4e\xe1\xb9\x2f\x4b\xaa\xe6\x0c\x27\x84\x9c\x92\xe1\xd0\x3a\x64\xab\x04\xbb\xb5\x64\xca\x24\x32\x7c\x7c\x87\x72\x3b\x9a\x86\x59\x4d\x76\x94\xde\xc2\x99\x26\xaf\xae\x0a\x90\xed\xdf\xa8\x5c\xf3\x5a\x13\xad\xf6\x5c\x1c\x73\xd6\x14\xee\x43\xe2\xfd\x3e\x49\xba\xc2\x59\xbf\x2b\x94\x4c\x5f\xc9\xda\x55\xcf\x6a\x45\x3d\xcb\xaf\x6b\x76\xc8\x3e\x43\x44\xd2\x67\xff\x6a\x0e\xfa\xa3\x95\x6e\x46\x3e\xf0\x3d\xf4\x30\xa2\xf8\x98\xd5\xd5\x30\x73\xb1\xb7\x0e\xa4\x8f\xbe\x58\xd5\x98\xdb\x2b\xae\x5f\xe4\xbc\x58\x26\x04\xdd\x53\x1f\x68\x85\x7a\xd3\x2e\xa1\x9f\xf4\x6b\x6f\x05\x95\xf9\x7b\xdf\x9f\x18\x8b\x4c\xe8\xe7\xcb\x5c\x9b\xeb\xaf\xe5\x4c\xda\x44\xcd\xca\x73\x9c\x0e\x9f\x06\x1d\x3e\x60\x05\xa8\x9f\xaa\xc0\xd9\x61\xa8\xc9\x57\xd3\xf4\x6b\x25\x41\x8c\x3a\x94\x5a\x5f\x58\xfb\x8f\xf0\x02\xe8\xc0\x92\x6a\x43\xe1\xb4\x25\x7b\xee\x5a\x86\x6a\x80\x81\x5e\x57\xd3\xcb\xfd\xda\x71\xbf\x35\xf4\xac\x95\x7d\xa4\x19\xd6\x4a\xf7\x9e\x47\x29\xfa\x17\xad\x39\x85\x3f\x9e\x07\x39\xc3\xf0\x2a\x90\x6e\x6d\x5a\x1a\xf0\xa1\xe9\xda\xbf\x0c\xd1\xba\xc1\x4b\x7b\xd4\xfd\x49\xc5\xa7\x09\x67\xe1\x9d\xae\x29\x7f\xf3\x07\x2b\xdc\x56\x69\xe8\x1a\xb0\xb6\x00\xda\xda\x80\x84\xb4\xb5\xa1\xf8\x94\x07\xe6\x0d\xd6\xb0\x01\x4a\x4e\x9d\xe2\xe4\x0a\x3c\xe4\xf9\x56\x71\x9f\x82\x80\x8c\x0c\xc4\x1c\x5a\xda\x84\xe8\xed\x5e\x81\x4d\xd1\x7e\x3f\x76\x4b\x26\xb0\xab\xf0\xab\xa9\x63\x81\xbc\x93\x25\xe3\xd5\x5b\x8e\x30\x1c\x36\xec\xa8\x40\x17\x00\x4b\x72\x12\xba\xa6\x4e\xa1\x8d\xd7\x72\x8b\xd1\xa0\x5b\xc8\x5b\xba\x85\x36\x99\xb2\xde\xb5\xb5\x6c\xe9\x18\xda\x14\xf6\x36\x0b\x49\x9c\xae\x21\xf7\xba\x86\xb8\xd1\x9d\xba\xa1\x08\x97\xa5\xa8\xa9\x1b\x02\x98\xc1\x45\xfe\x47\xeb\x59\xb0\xc6\x94\x7a\x8d\x09\x55\xd1\xee\xf6\x8c\xed\xf7\x8f\xfe\xf1\x71\x39\x70\x78\x41\x08\xc4\x61\xd8\xf8\x29\x87\x8b\x4d\xca\x0f\xd5\x46\x15\x2d\xdd\x09\xbc\x08\xc1\x7a\x67\xf0\xba\x1d\xec\xd9\x63\xa9\x71\x4f\x31\x80\x99\x0a\xb8\xda\x50\xc3\x35\x8e\x6f\x9d\x5b\x53\x3c\x30\x45\x4b\x1c\xd1\x43\xde\x19\xe4\x51\x39\x15\x0d\xa9\x44\xdb\x90\xd8\x0a\x40\x5a\x46\xc4\x36\xdc\xf1\x03\x1a\x11\xfb\x7c\xf8\x4c\xcf\x47\x42\xbe\xc4\x95\x4f\xee\xb9\xe1\x41\x72\x1a\x61\x6c\xe4\xf4\x5e\x06\x83\xfc\x60\xfa\xe2\x70\x83\xd4\x82\xff\x8c\x26\xeb\xfd\xb1\xa1\xef\x82\x46\x8a\xaf\x14\x2f\xd7\x11\x75\x4f\xd4\xe6\xc6\x94\x1d\xd3\x4e\xf8\x4e\xfb\x7b\x10\xb5\x39\x6b\x93\xdd\x49\xde\x9a\xfe\xc0\x7a\xee\x31\x39\xdc\x1d\x8d\xc6\x5d\xd4\x92\xf8\xd5\x57\x51\x8b\x80\x36\xd6\xc3\xe0\x22\xfa\xc6\xe6\x76\xf4\x66\xbf\xaf\x30\x3d\x87\x4d\xe1\x2a\x39\x1f\x7d\x43\xe2\xf8\xbd\xcd\xe3\xcf\xbd\xd6\xd0\x94\x37\xd9\xf6\x99\x6c\x5d\x0e\xeb\x6f\x5f\xd5\xb3\xd7\x62\x83\xc2\xc4\x4f\xb9\x1b\xb4\x46\xb7\xba\xe1\x51\xea\x3d\xae\x1d\x03\xa1\x8b\xfc\xd6\xe0\xe1\x5a\x30\x83\xf7\x77\xd7\x03\xdb\x60\x77\x62\x13\xaa\xf1\x64\xfa\xde\x54\x08\xe7\xee\xbf\x7a\x4a\x83\x9c\xee\x57\xdc\x37\x56\xdd\xe8\x4b\x45\xd8\x5d\x76\xa8\x8e\xc4\x3f\x9d\xd5\x1d\x8c\x90\x17\xe5\xc2\x7f\x32\xa7\xb5\x25\x38\x1c\xa8\x92\xc9\x05\x6e\xd7\xbf\x0b\x76\x31\xb2\x72\xf4\x92\xdd\x1f\xe8\xdf\x4c\x00\xee\x73\x84\x36\x03\xe9\x75\x45\xa1\x80\x05\xb6\xf7\xb7\x2a\x27\x6a\xfd\x98\x4b\x05\xe8\xf6\xb0\x86\x6b\x2c\x73\xad\xee\x33\xad\xe2\xd8\x7d\x1f\x52\x81\xe6\x14\x5a\xb1\x8b\xd1\xf7\x22\xd7\xec\x5e\x4b\x24\x69\xed\x7e\x04\xec\x18\xa4\x8d\x0e\x87\x1e\x57\x49\x74\x9d\x15\x3b\x1e\xd1\x28\x6a\x98\x88\x82\xbf\x3c\x00\xf7\x4a\x0c\xcf\xd3\x1f\x13\x6a\x92\x83\x9e\x12\x5e\x4b\x9a\xe9\xdd\x03\x2d\x2a\x21\x31\x4d\x9f\x18\x4e\xd9\xe7\xac\xf4\x8a\x23\xfa\x98\x3e\x69\x84\x3b\xf5\x60\x00\x82\x81\xf0\x40\x61\x23\xf2\x89\xad\x16\x78\x44\xff\x5a\x23\x79\x9f\x13\xdc\x04\x9c\x50\xb0\xbc\xaa\x6a\xad\xc1\x5e\x77\x36\x1c\xc8\x5f\x80\x90\xcd\x74\xf8\xa0\x4b\x55\xe8\xa0\xb2\xc7\x2b\x2a\xdc\xa5\xed\x91\xb3\xb1\x7b\x6b\x97\x0e\x2c\xc6\xbd\x8c\x6b\xab\xc9\x36\x9c\x30\x26\x9d\x12\x1b\x93\x03\x6f\x15\x67\x1f\x34\xb7\x3c\x51\x54\x12\x72\x50\x83\xc1\x81\x04\xe0\x0b\xa2\x81\x00\x90\x87\xba\xac\x9a\x8a\x59\x3e\x07\x20\x97\x59\x3e\xb7\x77\x09\xf3\x6b\xb1\xf6\x35\x20\x82\x37\x8c\xed\x96\x2f\xf2\xac\xc0\x1b\x18\x7d\x34\xfb\xb8\x1b\x8f\xc7\xe3\xa1\xf9\x33\x59\x99\xff\xff\x07\xfc\x9f\x2d\x3f\xee\x1e\x8f\xc7\x97\x43\xf8\xb3\x32\xff\x3f\xfe\x4f\xf8\xff\xbf\x3e\xee\x56\x7c\xb5\x9a\x3f\xba\xa2\xcd\x97\x1f\x0f\xfc\x18\xd4\x01\xe6\xbe\x3f\xf1\xab\xe7\xb7\xdb\x44\x8f\x4a\xb9\x53\x0b\x0e\x4e\xf0\xcd\x21\x1c\x7d\xd4\x11\x99\x46\x51\x1a\xed\xcd\x2f\x1a\x5d\x45\x84\x8a\xbe\x5d\xd3\x71\xcc\x47\x96\x62\x26\xa4\xdd\xfc\x77\x45\xb6\xe0\x6b\x59\x2c\xbb\x9e\x95\x34\x38\xe6\x2f\xb7\x99\x00\xcf\xfc\xff\x4f\x44\x41\x44\x2e\xae\xb3\x22\x5f\x82\x8e\x6b\x00\x2d\xa9\x73\x5d\x70\x16\x7d\xfc\xb8\x8b\x06\x15\x90\xd8\x13\x9d\x8c\xcd\x9d\xdb\x72\x0a\x93\xff\x4e\x5a\x52\xf7\x4c\xe5\xd9\xb0\xc8\x2e\x79\x11\x51\x5b\x8c\xa1\x88\xb5\xd6\x84\x7d\xf0\x6b\x93\x5b\xa9\xa0\x9d\x86\x6a\x43\x6c\x77\xfa\xc2\xf0\x0e\x11\xdd\x4c\x23\xeb\xb2\xd1\x49\xea\xa3\x14\x6c\x00\x33\xc5\xb3\x88\xd6\x30\x65\x1a\x4a\x69\x55\x31\x27\x8b\x4c\x80\x5a\x5a\x72\xc7\x35\x39\xb9\xe4\x27\x68\x95\xb7\x3c\xc9\xc5\x49\x76\xa2\x76\x42\xe4\xe2\xea\xc4\xd4\x20\x55\x14\x34\xb0\x21\x79\x8b\x68\xff\x0a\x23\x6e\xd6\xb2\x00\x9f\xd5\x78\xb2\x7e\x0b\x26\xf5\xc1\x2e\x5d\xf3\x8d\xa1\x29\x96\xb4\xd5\x27\xe6\xa9\xd9\xa5\x3f\xd5\x36\x29\xea\xfc\x75\x67\x08\x6d\x68\x37\x0a\xb1\x92\x83\xc5\xb1\x51\x89\x20\xbd\x3c\x8e\x73\x00\x63\x5e\xac\xab\x5f\xa0\x12\x4d\xd5\x28\xd3\x18\xee\x7e\x25\x9c\xe6\xfb\x3d\x22\x91\xdb\x89\x70\x78\x97\x48\x20\x2a\xca\xe1\x18\x34\x43\x95\x1a\xf3\xd9\xc5\xc7\x4d\x93\x2f\x02\x9f\x99\xb0\xa8\x06\xa0\x0d\x12\x78\x64\x15\x37\xb9\x40\x67\xa7\x51\xd4\x4c\x81\xe1\xd0\xba\x34\xf9\x22\x52\x98\xad\xe5\x7b\x60\x51\xdf\x7b\xb2\x68\x49\x64\x37\x36\xd8\xb7\x30\x25\xe0\x31\xc4\x4f\x8c\x3d\xee\x22\x3a\x9b\xd7\xba\xff\xac\x32\xef\x68\xce\x65\x60\x7b\x67\x16\x44\xfb\x94\x68\x78\x0b\x09\x1f\x41\xa6\xdf\x05\x8a\xc3\xc8\x8f\x47\x63\x33\x14\x1d\x9b\x67\x21\xaf\xb9\x7d\xd3\x7d\xc3\x6f\xf5\x7b\x79\xe1\x90\xc8\x5b\x93\xf5\x6d\xad\x81\x1e\xb1\xdc\x6e\xb1\x48\x64\x3a\xbf\xe6\xf5\x45\xfa\xd2\x8c\xd3\xb7\x5d\x70\xe9\x6d\x58\x78\xde\xe4\x12\xff\x04\x3a\x7a\xd3\x3a\xaf\x71\x62\x59\x57\xf0\xad\x9e\x3c\x38\xee\x0a\x75\xf0\x30\x6f\x44\x27\xf4\xa7\x8e\x32\x5f\x48\xb5\xc9\xda\x8f\xf0\x4e\x20\x7a\x08\x32\x95\x6b\x79\x83\x16\x70\xbf\xae\xb9\xb8\x70\x5e\x7c\xa0\x51\x5c\x57\x44\xc2\xf0\x97\x5e\xdc\xfa\x56\xd4\x51\xdd\x82\x06\xfc\x9a\x97\xfc\xa9\xdc\xde\x3d\xdd\x05\x07\xba\x13\xb5\x34\xba\x6a\xd6\x4a\x05\x4d\xc8\x98\x9e\x26\x00\xba\xd7\xc2\xea\xbb\x2c\x76\x2a\xa9\x39\x1b\xc8\x4b\x43\x26\x97\xac\x0f\x3e\x43\xdb\xc1\x93\x0e\xbc\x3f\x6c\x83\x35\x22\x47\x57\x50\xa6\x71\x36\x13\xb0\xb5\x1d\x0d\xd4\x6d\x4c\x3a\xcb\x6c\x57\xd3\xe2\x5c\x30\xb6\xf6\x82\xc3\x9b\xd1\x7d\xd6\x4f\x04\x38\xff\x45\x9a\x46\x02\xc4\x80\xc0\x81\xc2\x0b\x9b\xb7\xa4\x39\xd3\xd3\x0f\x79\xfa\x55\xde\xcb\x3b\x90\xfa\xd1\x51\x04\x68\x2b\x47\x54\xa1\xda\x32\xa1\xc7\x53\x9a\xa3\x45\x99\x94\xf0\xe3\xa1\x94\x08\x0e\xaa\x40\x2c\xf7\x50\xba\x82\x67\x66\x3b\xa9\x11\xfc\x38\x9e\xd2\x0c\x8a\x1a\x99\xbf\x86\x2f\x01\x66\xb4\xed\x7b\x25\xa4\xc8\xb8\x1a\xbe\x2d\x72\xf1\xf9\xa7\x4c\xf3\x88\x7e\xf3\x97\x71\x18\x13\xca\x6b\x22\x5a\x8b\xc2\x1b\xa2\xd9\x14\xc1\xca\x45\x0f\x6a\x4f\x83\x04\xef\xb8\x32\x5b\x08\x26\x2b\x48\x78\x23\xd5\x67\x43\x31\x23\x20\x8f\x3e\xe8\x19\x2f\xb2\xbb\x20\x6c\x55\x98\x9d\x25\x00\x81\x0b\x8a\xf8\xec\x4b\xc8\x96\xcb\xd7\x72\xc9\x41\x4d\x01\x56\x52\x15\xb5\x45\xd9\x16\x20\x39\x06\x85\xed\xc4\x52\x3e\xe3\x5b\xbd\x8e\xe8\xe3\x71\x07\x19\x95\x0b\xef\xae\xcb\x27\x65\xda\x2e\x5c\x1b\x03\x68\x94\xae\x95\x8f\xbf\xb1\x25\x5f\x5b\x75\x08\x37\x50\x93\xf1\x97\x59\x95\x4d\x76\xfb\x32\xbf\x5a\x17\x66\x90\x10\x7d\x21\xa2\x13\xfe\xd7\xa0\x1b\x1b\x79\x8d\x1b\xc5\x70\xf2\x38\xa6\x1d\xf4\xff\xd8\x96\x79\x67\xb5\x1b\x3c\x8b\xa7\xb3\x4b\x60\x9c\x8f\xdd\x35\x8e\xdc\x23\x47\x3a\xbb\x04\xfd\x66\xa6\xf7\xfb\x28\xb2\x85\x65\x3b\x2d\x2d\x5e\x69\x65\x04\x2a\xcc\xad\xc9\xdc\x57\xe0\xce\xa6\xe0\x2b\xdf\xf0\xd7\x36\xa4\x07\x37\xb3\x5c\x40\x00\xab\xd7\x5f\x5d\xda\xa0\x80\xfd\x3e\x32\xc5\x46\x20\x10\x48\x1a\x91\x8c\x13\x9a\xa9\x2b\x30\xa4\x71\x62\x97\xf3\xc7\x80\x36\xbd\xe4\x5b\x6e\xee\x37\x8b\x9c\x97\xe8\xc6\xa8\xb2\x4b\x41\xed\x58\x7c\x50\xf6\xd9\xe9\x63\x42\xa8\x50\x70\x53\x3c\x50\xdf\xc0\xef\x5f\x3f\x6f\x34\x50\x55\x69\x14\x2f\x65\x71\xdd\xec\x45\x37\x10\x35\x8f\x63\xd5\xf5\xc6\xcd\x19\x14\xe8\x15\x3f\x78\x1c\xb7\xf3\x82\xae\x67\x67\x01\x10\x43\x1c\x4b\x6e\x8a\x42\xbd\xd0\xde\x11\x10\x86\x7b\x13\x0b\x5e\x5d\x12\xce\x3e\x59\x24\x6a\xb4\x30\xd0\xf0\xa7\x72\x96\xda\xd1\x83\x47\xff\x98\x7d\xbc\xf9\x38\x9c\x0f\x3e\x3e\x72\x3f\x06\xb7\x9b\xe2\x2b\xff\x88\xe3\x5e\xff\x6a\x63\x93\x44\xd9\x76\x5b\xe4\x0b\x10\x51\x3d\xba\xdd\x14\xfe\x6a\xd0\xae\x63\x8a\x0d\xe4\x87\x94\xef\xf7\xf8\x1b\x17\xc0\xc1\x0c\xb8\x55\xe6\x6d\xcc\x88\x66\xf5\xea\x3c\xc0\xa7\x50\x33\x6d\x87\x03\xdc\xb8\x57\xad\x73\xe6\x28\x16\xf5\xe3\xd1\xb6\xc8\x72\x11\x39\xa0\x34\x0b\xb4\x96\xaf\x92\xbc\xad\x6e\x1c\x8e\x78\xce\xf2\xaa\x0a\xff\x90\x66\x58\xff\x9c\xe4\xcd\x9c\x92\x00\x00\x65\x67\xe8\x2c\xfa\x14\x0d\xe4\x1c\x70\xfd\x08\x35\xff\xb3\xdc\xfc\x3c\xc0\xb3\x6b\x30\x3d\x54\xd7\x34\x88\x4d\x79\xfe\x93\x85\x71\xe6\x2e\x65\xf6\x88\xa9\xa8\x12\x55\x42\xdb\xc2\x08\xa8\x2a\x08\x98\x49\xef\x27\x4d\x05\xdb\x00\x66\x11\xe6\x81\xb6\x15\xbd\xc0\xca\xa7\xe9\x8f\xef\x73\xbe\x7d\x2f\x9f\x8b\x65\x82\x16\x01\xe1\x86\x4a\xc2\x31\xa7\x58\xac\x95\xce\x3a\xba\xf1\xfc\x56\x73\x51\x9a\x23\x19\xc9\x05\x3e\x3c\x77\xcc\xfd\x8d\x59\xc2\xed\x59\xe2\x64\x9a\x9b\x6d\x95\xc2\xff\xec\xfe\x40\xaa\xce\xf8\xb2\x5b\x94\xc7\x53\x88\x06\x15\x78\x26\x17\xc7\x32\xdd\xe5\x47\x73\x59\x59\x0d\x57\xd0\x35\x09\xf8\x7b\x2e\xce\x30\x23\x2f\xa5\xfc\x5c\x23\x1b\xd2\x21\xec\x11\xf4\xbd\x90\x99\xd1\xc0\x19\xb5\xc3\xa0\xf8\x55\x5e\x6a\xae\xf0\xb1\xb7\xe5\xe1\xa0\xad\x1c\xcf\xc9\x7e\x9f\x64\x30\x06\x17\x30\x10\x56\x0b\x3c\x9d\xcd\x0f\x86\x76\xce\xf8\x1c\xf4\x3d\x91\x9a\x61\xe1\xdf\x41\x8a\xce\x2a\x50\xaa\x56\x6f\x85\xc3\x8f\x81\xc2\xbc\x06\x3a\x9a\x60\x6d\x15\x5f\xa6\x82\x5e\x67\x45\xaa\x0e\xb6\x57\xa5\xe9\xd5\x42\x6e\xef\x40\x93\x9c\xb5\x04\x46\xfd\x31\x63\x4c\x7b\x63\x27\x8b\x3b\xea\xd2\x7b\xf5\x82\x2a\xa8\xda\xef\xf7\x07\xbf\x09\x15\x2c\xf4\xba\xd1\xcf\x49\x2e\x4a\x9d\x89\x85\x21\x34\x70\x24\x80\x46\x47\xee\x9d\x2e\xcf\xcd\x09\x30\x53\x73\x96\x07\x2a\xef\x3b\xd3\xdc\xca\x40\xad\x35\xe6\xf6\x95\x93\x07\x69\x00\x87\xdf\x7f\x25\x60\xd4\xd4\x0b\xcc\x28\x1a\x7d\x86\x37\x6d\x5e\x45\x9f\x56\xf6\x73\x81\xe5\x05\x5a\x6a\x8a\xfd\x5e\xe0\xd1\xc7\x9c\xb1\xa6\x66\x02\xa5\x42\x94\x33\x8c\xf3\xad\xdf\xef\xd1\x08\x8e\x53\x48\x90\xea\x03\x4e\x41\x81\x53\x00\x8a\x58\x25\xbb\x47\x27\xa2\x4f\x8a\xa2\xb9\x87\x83\xbb\x47\x52\xa1\x8c\x59\x63\xa4\xb1\x7b\x4d\xaf\xf0\xcd\xc0\xfe\x87\x22\xeb\x57\x59\x6f\x3d\x50\x68\x08\x55\x12\x21\xe0\x1c\x5c\xe0\x83\xd0\x35\xcf\x96\x91\x2d\xf9\x73\x5e\x14\x0d\xe5\x73\x72\x0f\x66\xf5\x3e\x40\x5b\x8c\x35\x67\xdc\x65\x87\xf2\xc6\x63\x41\x55\x06\x5c\x35\xb4\xb2\x4a\x56\x65\xa1\x06\x00\x88\x22\x48\x7d\x16\xf6\x74\xea\x40\xd0\xdc\x9b\x27\xe0\xa4\x54\x08\x79\x13\x3a\x26\x4e\xe3\xe8\x58\x22\xb3\x2a\x0e\x35\x55\x59\x67\x1f\x66\x81\x8f\x0d\xe5\x04\x2d\xf2\x82\x6b\xfe\xe5\x6e\x87\x45\x6d\x1d\x82\x68\x42\xbc\x0f\x62\x2d\xd3\x57\xce\xe5\xbe\x45\x88\xb3\xb1\xe8\x8f\xd8\x55\x86\x20\x60\x2b\xfd\x40\x6d\xbc\x55\x1b\xef\xa8\xcd\x85\xb9\x82\xf1\x09\x62\xf9\x27\xca\x0f\x2c\x48\x2b\xb3\x0b\x3b\x76\x81\xaa\xce\xe0\x9b\x5e\xd8\x0c\x43\x12\x9c\x81\x45\x82\x0f\xf2\x63\x78\x85\x17\x07\x9b\x09\x47\xf6\x68\xab\x7e\x6a\x98\x52\xfc\xdb\xcd\x42\x3d\x9d\x66\x63\x5a\x0e\x2d\x42\x7d\xce\xc1\x64\xdc\x68\x6c\xef\xd8\xda\x50\xd0\x74\x73\x31\x69\x6c\x2d\x13\x94\xc0\x2b\x5f\x2b\xca\x04\x25\x36\xd7\xb1\x9d\x59\x8b\x73\xe5\x1c\x4b\x5c\x8b\x83\x37\x26\xf9\x4c\x2e\xc0\x99\x53\x23\x65\x43\x67\xac\x8b\x90\xb8\xec\xcf\x1b\x7a\xa1\x47\x32\x87\x88\x8a\x26\xa7\xf9\xfd\x27\x6a\xae\x69\xab\x55\x56\x32\x2a\x4b\x78\x8d\x2c\x1c\x2a\x7f\xe2\x03\xeb\x3d\x39\xcf\xca\x74\x72\xa8\x57\x76\xb1\xf9\x77\x6b\xcc\xab\x1a\xff\x44\x65\x5f\x1c\x94\x23\xb5\x74\x1b\xe8\x54\x84\xd0\x42\x02\x08\xf6\x4c\x25\x8a\x9c\x12\x34\xcd\x10\xcb\x64\x62\xee\x9d\x16\xf4\xa9\x02\x56\xca\xd9\xeb\x3c\x51\x84\x4a\x96\x4f\xf3\xd9\x78\x3e\x2a\xf8\x35\x2f\xfe\xe3\xf1\x54\x67\x89\x22\xa9\x80\xff\x55\x17\x49\xdd\x3a\x07\x1c\x7a\xfa\xd6\x14\x91\x6a\x2a\xd1\x1f\xc1\x97\x07\x7d\x18\x0c\x44\x7b\x7b\x7e\x71\x28\xfe\x25\x2a\x72\xf2\xbf\xbf\x67\x51\x55\xd6\xb6\xb7\x45\xe4\xfe\xcf\x37\xf7\x4b\xcd\xf9\x37\xd6\xec\xff\x0e\xc5\xeb\xa6\x68\x27\x6a\xb4\x58\x9f\xc1\x21\x0f\xbb\x58\xd9\xd3\xb8\xe4\x99\x5a\xac\x93\x47\x1f\x2f\x1e\x91\x69\xb8\x47\x52\x55\xeb\xc8\xcf\xdb\x46\x0f\x40\x0b\x36\x19\x4e\x28\x22\x61\xf8\x84\xa0\xa5\xde\x95\xb4\x96\xf2\x5d\x76\xf5\x50\x91\xce\x78\x0f\x13\x3e\x54\x64\x95\xd2\x0c\x41\xc7\xec\x83\xf6\x37\x14\x8a\xef\x63\x2e\x69\xd7\xc2\xc6\xb4\xf5\xa4\xa0\x47\xfa\x70\xb9\x88\x22\x13\x24\x7f\xb8\xec\x20\xf9\xaf\x52\x2d\x1f\x2c\x1b\x70\x68\x20\xe9\x77\x4a\xee\xb6\x0f\x16\x8c\x60\x34\x55\xe2\x07\x0b\x0e\x12\x9b\x46\x3c\x58\xb0\x6b\xc4\x92\xc3\x0b\x25\x3e\x8e\x35\x12\x5b\x3d\xf5\xda\x40\xdb\xf4\x4d\xbb\xd5\x30\x79\x3d\xb5\x69\xc9\x17\x4b\x0f\x5a\x03\x2a\xbd\x0f\x97\x1e\xa4\x86\x41\xf9\x62\xf1\x7e\x60\x5c\x8e\x2f\x54\xe0\xd3\xe3\xb3\xff\x93\x9d\x6e\xb2\x01\x0d\x60\x05\x07\xba\xe6\xb3\xbc\x6e\x37\xa8\x95\x05\x10\xe7\x5c\x86\x57\xbc\x2c\xbf\x58\x87\x47\x7e\x30\xb9\x4a\xae\xf4\xfb\xec\xb2\xc5\x4e\x34\x8d\x01\x3e\x06\xe9\x2f\xe4\xaa\x95\xa7\x52\xbe\x9a\xcd\x29\xfa\x72\xa9\x7b\x89\x06\x92\xd4\x44\xb8\xeb\xc2\xd6\x42\x8d\x02\xe1\x40\xfe\x01\xa0\x61\x21\x93\x8a\x40\x79\xbc\x5a\x50\xc1\x26\x3d\x6d\x95\x09\x64\xa2\x86\xd9\x7f\x28\x42\x0e\xed\x0e\x94\xa0\xd9\xe1\xec\x46\x5b\xfd\xed\x32\x89\x38\x36\xd6\xa9\xa1\xd1\xde\x70\x26\x89\xfc\x18\x46\x60\x04\x93\x89\x72\x2b\x4b\x0e\x0f\xdd\xb5\x5a\x8e\x23\x77\x75\x0c\x56\xe0\x84\xe6\x18\x6a\x06\x52\x7d\x59\xb1\x10\x79\x70\x8d\x02\xff\xab\x04\x70\x35\xcc\xdd\x49\x56\x60\xfb\x39\x28\x28\x6c\x79\x82\xc9\x69\x8e\xf0\x92\x04\x7e\x9c\x8f\x49\x57\xfc\x60\x42\xa8\x1f\xd3\x9f\x32\x71\x65\x26\xc1\xaa\x79\xdb\xfc\x83\x7a\xc0\x63\xb8\x8d\x86\x55\x3c\x26\x34\xa7\xd1\xc0\x0f\x50\x14\x18\xf3\x3b\x6c\x6e\xaf\x7c\xe2\x8c\xf7\x1b\x7d\x73\x00\x80\xbd\x0c\x55\x25\xba\xda\x33\x26\x03\xde\xe5\x05\x7e\x90\x79\xf4\xac\x0a\x4f\xa2\x6a\xe4\x70\x42\x3b\xc3\xe9\x84\xd4\x5b\x7d\xa8\x7b\xf9\xc9\x69\x0e\x0b\x2e\xbc\x47\x97\x89\x20\x86\x4f\x12\xfc\x06\xac\xc2\xc5\x12\x75\x7b\xfe\xed\xe5\xe0\xd5\x66\x10\xc0\xe6\x54\xb8\x95\xa0\x3a\x12\xcf\xc4\xbc\xd7\x18\x9c\xce\x01\xa1\xca\x79\x27\xb2\xa6\x48\x15\x82\xa0\x5b\xfa\x96\x1f\x08\xee\x92\x83\x09\xb5\x88\x82\xe4\xe0\x30\xe3\xa8\xdc\x72\xd1\xba\x10\x77\x12\x11\x11\xd1\x08\xdf\xeb\xbe\xa0\xed\xcf\x47\x8d\x58\x73\x43\xa4\x0b\xc5\x2e\x2c\x6a\x52\x4d\xcb\x6c\xa5\x6a\x24\x08\xed\x53\xd1\x4f\xc5\xb6\xc8\x75\xf2\x68\x98\x4c\xfb\x5f\x91\x47\x86\x94\x24\x9c\xc9\x99\xf4\x53\x3d\xa7\x63\x72\x9a\x9d\x55\x01\x60\x37\x62\x51\x1a\xe4\x2c\x03\x51\xf5\xa3\x7f\x24\x8b\xcd\x72\xbf\xe1\x3a\xdb\x6f\xc8\x57\x8f\x72\x8b\x97\x49\x48\xce\xfa\x63\xbf\x8e\x1f\xfd\x23\x4b\x0a\x4d\xa6\x61\x02\x5d\x4f\x90\x2c\xf6\x0b\xad\x8a\xfd\x42\x0a\xad\x64\x51\x2b\x4b\xb8\xa4\x20\x76\x7b\xf4\x8f\x32\x59\xe7\x2b\x5d\x4b\xd2\xd2\x7c\xf9\x59\x28\xbe\x90\x57\x22\xff\x83\x2f\x4f\x36\x72\x99\xaf\x72\xae\x4e\x40\x4e\x7f\x12\x0d\x4a\xd2\x53\xe0\x73\xc9\x49\x53\x40\x3f\x3b\x7a\x52\xe8\x61\x34\xe0\xd6\xeb\x2d\x8b\x9e\x6a\x55\x60\x40\x6e\x03\x36\x4b\xfc\x56\xf8\xed\x7c\x81\x72\x42\xf9\x61\xa1\x46\x97\x59\x99\x2f\xd8\x3d\xb0\x11\x51\xc5\x5f\x45\x14\x99\x85\x28\xe0\xa3\x22\xfa\xf3\xd6\x04\x20\xa7\x18\x51\xe0\xd8\xa2\x8a\x21\x8c\xa8\xb9\x50\x45\xfe\x6e\x15\xd1\x97\x72\xc3\x5d\x40\x75\xb3\x8b\xa8\x65\x0c\x23\xc7\x22\x62\x88\x2b\xcf\xfd\x8e\xe8\x33\x38\x81\xd3\x28\xe4\x31\x22\xfa\x6d\xb6\xf8\x5c\x6e\xb3\x45\x15\xe1\x34\x79\x6c\xef\x7c\x82\xa8\x95\xc2\x9c\x17\x51\x75\x76\xf8\x2c\xe6\x77\x1a\x55\xa7\xbb\xe9\x8b\xe1\x08\xa2\xe6\xc6\x8f\xe8\xf7\x70\x48\xa4\x51\x63\x55\x47\xf4\x79\xb9\x48\xa3\x86\x88\x2e\x32\x2b\x7d\xb4\x5d\x3c\xc3\x2a\xd9\x3d\xce\xd0\x93\x28\x8d\xbc\x6c\x30\xa2\x18\xf8\x0c\x9b\x6b\x45\x52\x2e\xf4\xef\x80\x4e\xb6\x94\xbe\xa9\x3e\x54\x71\x08\x85\xef\x0f\x8d\x6f\x33\xf2\x91\x19\x4c\x27\x3a\x70\x11\x66\x5e\x6c\x38\x4c\x11\x86\xfe\xbc\x8d\xc2\x99\xb5\xed\x31\x73\x50\x9f\x60\x8c\x80\x05\x62\x22\x3c\x07\xea\x62\x70\x9d\xf8\x28\xbb\x6c\x60\x95\xfa\x4c\x7e\x31\xd8\x88\x2a\x8f\x5f\x37\x58\x58\x63\x1a\x03\xce\xce\xb7\x10\xad\x19\xab\x68\xbb\x42\x30\xf6\xc2\x0c\x32\x3c\xea\xe3\xf7\x8b\x28\x8d\xcc\x35\xdc\x7d\x7f\x67\xbf\xdf\xf0\x5b\x5d\x1f\x5d\x17\xf3\x4e\xf1\xeb\x7a\xcc\x0b\x18\x67\x20\x86\xf5\x88\x9f\xaa\x88\x60\x4a\x67\x7e\x51\x19\x76\xce\x85\xce\x7d\xe8\xeb\xa0\x33\x3f\xdb\x89\xae\xd6\x4e\xad\x82\x9f\xed\x0c\x87\xd1\x66\xf8\x3a\xc2\x57\x59\x51\x18\xf2\xb2\xbb\x5a\xa7\x11\x6c\x70\x5c\x86\x7c\x93\x2d\xca\x3b\xb7\x06\x5f\x44\x8d\xdd\x6d\x47\x3d\xaa\xd3\x01\x0c\x7d\xd7\xb1\x3e\xde\x34\x17\x87\x69\x0e\x96\xea\x6f\x1b\x36\xf4\x5b\x1f\x1a\x16\xfa\xa4\xb5\x1e\x70\x89\x76\x2d\x86\x5f\xa2\x3a\x69\x08\x87\xa6\x8a\x0b\x16\x6f\xd4\x24\x1b\x76\x63\xb4\x69\x02\xb4\xd0\xa6\xf7\x97\x0d\xd7\xf0\xfa\x1a\xac\xee\x2e\xae\xbc\x1f\xa2\x34\x72\xc2\x73\x17\xf6\x3e\x4a\xa3\x3a\xf7\xe8\x62\xde\x46\x69\xe4\x8e\x58\x9c\x93\x4d\x16\xd2\x86\xcd\xb2\x4d\x1a\x36\xcb\x0e\xca\xb0\x59\x76\x10\x06\x1b\xe8\xe8\xc0\x66\x59\x23\x0b\x9b\x65\x37\x55\xd8\x2c\xdd\xf6\x6f\x84\xb6\x49\x85\x69\x8a\x23\x0a\x3e\xb4\xb6\xb9\x43\x8a\x50\xdf\xdc\x35\x82\x60\x4a\xaa\x11\x04\xb7\x2c\x36\xcb\x06\x3d\xa8\xad\xa2\x2f\x12\x84\x63\xa9\xc2\x29\x3d\x4e\x34\x36\xcb\x1a\xcd\xd8\x2c\x6b\x24\x63\xb3\x3c\x42\x31\x82\x08\x4b\x30\x60\x1e\xed\x66\x68\x51\x8b\x76\x5c\x35\xd1\x6d\x7a\xb1\x59\x76\x90\x8b\xcd\xb2\xb5\x30\xeb\x2f\x00\x6e\xb2\x82\xae\x36\xa5\xf1\x6e\xea\x8f\x53\x1d\x1b\xdb\x24\x3a\xe1\x81\xd1\x3c\x5d\x5a\xab\x23\x24\x45\x33\x4b\x8b\x68\x84\x84\x28\x9a\xc3\x0e\xb0\xa7\x31\xbb\x9b\xd6\xb6\x43\x1a\x9e\x9b\xf4\x62\x24\xa4\xda\x64\x45\xfe\x87\x85\xe4\xec\x70\xba\x1f\xbc\x51\x8a\x93\x5c\x9c\x70\xb4\x11\x6a\xbc\xdb\x8a\x4a\x53\xcd\xb0\xd7\xc8\xca\x19\x2e\x6b\x1f\xb4\x75\x9f\x2c\xf9\x3e\xd3\x44\x67\x8b\x35\x71\x3a\x18\x82\x10\xc3\xeb\xe5\x62\x07\xc8\x33\xd1\x68\x34\x42\xe8\x10\xdc\x9a\x27\x50\x9e\x4b\x71\xa8\x34\xe0\xaf\xc0\x4e\x0c\xb8\xd7\xe8\x24\x22\x74\x05\xb2\x5e\xc0\x39\x6b\x83\x9c\xd1\xb2\x27\x19\xcb\x3d\x0f\x3b\x4d\x4a\x96\x8f\xfe\x29\x73\x81\x99\x33\xa6\x48\x0a\x61\x0e\x88\x4e\x0e\x26\xa4\x96\x00\x1a\xe6\x0c\xb8\xf5\xac\x84\x4e\xee\xe0\xf5\x6e\xd7\x67\x59\x9b\xf3\xfc\x5e\x2c\xa4\x28\xf3\x52\x73\xa1\x4f\x2e\x73\xb1\xcc\xc5\x55\x79\xb2\x92\x0a\xf8\x4e\x54\x5b\x31\xe5\xb0\xec\x10\x74\xd5\xf7\xb0\xc0\x07\x61\x3e\x2b\xe6\x4c\xcf\x0a\xaf\xe5\xc0\xf1\x49\x74\x6d\x38\xfd\x42\xca\xcf\xbb\xed\x0f\xfc\xae\xe3\xd9\x1b\x47\x29\xd1\xa8\x28\x4d\x40\x7b\x68\xaa\x51\x89\x88\x53\x45\x52\x3d\xb3\x6a\x26\x13\xc6\x58\x4e\x9c\x95\x9c\x84\x6b\x7e\x14\xcc\x45\x15\x89\xde\xf7\x1d\x1a\x40\x9f\xe5\x71\x2c\x92\xdc\x29\xd1\x78\x57\xfd\x08\x55\x13\x4c\x3c\x6a\x18\xcd\x10\xd1\x0c\x9f\xb2\xe7\x51\x9f\xbd\x85\xef\x40\xcf\xc9\xa9\xd6\x63\x2b\xeb\x45\xb8\x87\xf4\xb5\x42\x77\x09\x55\x14\x7a\xc4\xaa\x63\xdd\xd5\x12\x74\x80\xde\xb5\x4b\x99\xc9\xb9\x77\xad\x95\x11\x0f\x81\x71\x38\xd0\xad\x19\xea\xbc\x7c\x6d\x2f\x0f\xf5\xe1\x76\xdb\xa4\x43\x33\x88\xa7\x7f\x97\x33\xef\x92\xdc\x4d\x20\x6c\xe9\x08\xec\x81\x0d\xe1\xb4\xbf\x80\x38\xd8\xdf\xaf\xe5\xd2\xfc\x3a\xd0\xa5\xbd\xcd\xbd\xc9\x36\x1d\x7a\x07\x8b\x38\xfe\xcb\x5f\x59\xdd\xa5\xbc\xb9\xc0\x57\xb0\xdf\x28\x0a\xaf\x35\x82\x2a\x26\x7a\x01\x4a\x53\x9f\x29\xe7\x56\xfd\x3b\x95\x6d\xd7\xe0\x66\x3d\x71\x6e\xd6\xe3\x18\x9a\x88\x2e\x41\x94\xbb\x17\x29\x42\x93\x4f\x47\xdc\xef\x63\xef\x7c\x06\x7b\x71\x72\x39\x6c\xba\xb4\xf2\xdc\x6e\x72\x6c\x96\x41\x06\xb8\x58\x29\x42\xfb\x60\xec\x01\x80\x0f\xd8\x10\x1c\x21\x9f\xd0\xdd\xb8\x14\xa1\x8a\x04\x37\xdd\x4d\x68\xf2\xd9\x9e\x93\x05\x28\xd9\xf0\xc3\x05\xdc\xd9\xdf\xf3\x5b\xfd\x44\xf1\xac\x3d\xb8\x89\x66\x7a\x7a\x23\x13\x4d\xd2\xfb\x03\x19\x81\x61\x14\xe3\xf8\x97\xf6\xf5\xc8\xa9\x24\x02\x92\x90\x55\x33\x04\x3d\x3e\x17\xc1\xaa\x70\xd3\x99\xd1\xb6\xb2\x4d\x31\x79\x6a\x9f\x49\x2d\x9a\xd5\x62\x1d\x76\xbf\x1e\x79\xc5\x45\xef\x5f\x53\x82\xb7\x33\x1f\xce\x04\x28\x1d\x3a\x4b\xe1\xab\xba\x61\x8a\x57\x7b\x24\xe0\x0a\xdf\x03\x7b\x5f\xca\x65\x00\x31\xae\xc0\x31\x38\x76\x17\x60\x1a\xd0\xea\x0b\xf4\xba\xf8\x68\x25\xd5\x26\x8e\x93\x0f\xb9\xfd\x4d\xa3\x72\x77\xb9\xc9\x75\x44\x61\xc6\x50\xc9\xf7\x02\x82\x5e\x73\xbd\x96\xcb\x27\x85\x14\x95\xee\x99\xcd\x24\x0d\x99\x85\x44\x3d\xad\xee\xec\x86\x74\x41\x2c\x54\xd7\x4a\xc0\x6b\x2a\x86\x4b\xff\x33\x0c\xcd\x0e\x87\x05\x78\xed\xf8\x20\xc9\xfd\xe1\xa0\x47\xab\x5c\xe4\xe5\x1a\x0c\xe0\xc2\x57\x21\x3d\x32\xfc\x07\x53\x14\x14\x44\xdb\xf3\x1e\x6a\xbd\xeb\x91\x96\x5d\x29\x6a\xe1\x79\xf9\x26\x7b\x43\x51\xdd\x7c\x9b\x29\x2e\xf4\x1b\xb9\xe4\xd6\x65\x96\xc5\xcb\x1a\xb5\xec\x18\x13\x82\xde\xde\xef\x0a\xff\x50\x87\xf6\x1d\x76\x64\xbf\xea\x1c\xd9\xc8\x35\x22\xd4\xb0\x34\xa9\xec\x28\xa0\x4f\xc5\xea\x9b\x49\x42\x0e\x87\x76\x45\x42\x0a\x1e\x59\x50\x93\x8b\xda\xa3\x59\xad\x0f\x28\xaf\x45\x16\x30\xd1\x94\x8f\x04\xbf\xd5\x17\xf9\x65\x91\x8b\x2b\x72\xa8\x30\x4b\x4e\x4a\x3c\x8a\xee\x0c\x99\x42\xc2\x7d\xa1\x15\xcf\x36\x4d\x75\xc7\x75\x5e\x8e\xb6\xb2\xf4\xa8\x14\x4a\xb3\xb1\xc3\x76\x30\xb9\x18\xc7\x2f\x2b\xf4\x36\x44\xf0\x3f\xa9\xc7\x12\xc6\x77\xa1\x77\x2e\x7f\x15\x04\x4b\xd3\x95\x54\xb8\xfb\x0e\x1b\x1f\x7a\x77\x2a\x04\x75\xe7\xb2\x38\x66\xca\xb9\x95\xe5\x39\x0b\x5a\x62\x4f\x8a\x03\x2d\x1f\xcc\x63\x01\x36\x7c\x9d\x07\xba\xe5\xfc\xf3\xb1\x0c\xb6\x68\x2b\x5c\x75\x65\x90\xfd\x1e\x9d\x70\x1f\xa8\x19\xdf\x30\xb3\x39\x3e\x6d\xaa\xb3\x76\xe3\xc8\x97\xcb\x1e\x0c\xc8\x81\xf2\xec\x28\x7c\xee\x91\x16\x75\xc2\xcd\x72\x62\x0d\xeb\x99\x45\x14\x30\xbf\x61\xc5\x19\xf6\x6d\x8a\x7f\x0c\x9d\xe4\x86\xcd\x00\xde\xc0\xb6\x70\x30\x70\x25\x53\x0d\xcd\xf9\x75\x9d\x17\xfc\x21\xd4\xf7\xad\x2c\x4f\xe1\x07\xcf\x74\xc2\xc9\xa9\x87\xa2\xf2\x93\x85\x05\x01\xf2\x5b\xda\x21\x1b\xe6\x55\x39\x8f\x66\x1f\x4b\xb0\x5b\x1c\xcf\x2d\xa7\xf9\x50\xd7\x01\x89\xc5\x7d\xf5\x9a\xb5\xf2\x03\xf5\xfa\xa1\x2d\xdf\xed\xc1\xca\xae\x2f\x21\xc8\xf1\x85\x29\x70\x06\xa1\x76\x07\xb8\x59\xd0\xe7\xc3\x09\x69\x2e\x3a\x0d\x30\xf6\x97\xd9\xe2\x73\xe3\xf9\xd7\xa5\x18\x32\x7e\xa0\xf8\x46\x7a\x6c\x2d\xd6\x36\xd4\x59\xb5\x21\x1d\xce\x48\x73\x77\x2d\x64\x38\x6c\xb4\xca\x50\xdb\xb1\x1d\x9b\xb5\x19\x04\xc5\x91\xa3\xbb\xda\x9a\xa6\x74\x65\x1a\x26\xf5\xcd\x36\xed\x6a\x93\x8f\xad\xb5\x0b\xc1\x50\xf1\x96\xd7\xc0\x1b\xf0\xc3\xd2\x28\xcd\x03\xb6\xf9\x32\xfe\xb7\xeb\x07\xb7\x52\x69\x87\xbd\x4f\x0b\xc6\xde\x23\xa0\x86\x4b\x04\x6f\x24\x7e\x79\x58\x2f\x55\xbc\xd2\x4e\x88\x63\x85\xeb\xe8\x7c\xec\x1c\xfc\xc4\x71\x7f\xd2\x67\x15\x7c\x8c\xa1\x09\x4c\xa1\x16\x0c\xfa\x1b\x52\x68\x2e\x9e\xb3\x0e\xcb\x2f\x61\x76\xb5\x7c\x25\x6f\xb8\x7a\x9a\x95\x3c\x21\x29\x3f\x80\x72\x79\x6d\x0b\x95\xbb\xcb\x52\x2b\x5f\x3e\xe5\xde\xb2\x98\xb1\xbc\x52\xad\xef\x68\x88\x4f\x09\x0b\x7a\xb1\x53\xea\x01\x6b\xfb\xf6\x28\x04\xeb\xcf\x0c\xc8\x81\xae\xf3\x25\x7f\x91\xab\x52\x37\xdf\x14\xfd\xe9\xe3\xa7\x67\xc0\x38\x30\x1d\xae\x86\x84\x1c\x56\xb9\xc8\x8a\xe2\xae\x91\xd0\xec\x25\xab\x7d\x7a\xad\xd8\x98\x5e\x99\x43\xce\x9c\xfe\x88\x4e\xda\x75\xc4\x99\xbc\x25\x9b\xcd\xed\x12\x00\x05\x77\x8f\x1c\xe1\xce\xb8\x7c\xc9\x06\x83\x6b\x75\xe8\x29\x99\x5c\x29\x42\xaf\x82\xa3\x6a\x04\xd8\xb4\xac\x7e\x12\x20\xea\x10\xbf\xdd\x16\xf9\x22\xd7\xc5\xdd\x53\x93\x86\x2f\xeb\x28\x18\x72\x01\x0e\x32\x19\x47\x0f\xc2\x3b\xf5\x76\x0b\x64\x24\x8e\xbf\x05\x2b\x4f\x21\x2d\x5a\x03\xd4\x10\x91\x1a\x06\x1e\x28\x51\x91\x9e\x00\xa7\x9e\x61\x32\x8a\xf8\xd2\x54\x8c\xb4\x24\xfe\x62\x6a\x5d\x66\xe5\xf8\xc7\x5e\xb7\x7c\xff\x43\xf7\xff\x96\xb5\xab\x22\xcd\x1d\xab\x64\x17\x2a\xc9\x46\x1b\x33\x8c\x4b\x30\x8f\x42\xec\x8b\x1e\x77\x08\x4b\x0b\x59\x14\xd9\xb6\xe4\xcb\x29\x78\x3b\x7d\x9b\x27\x19\x71\xce\x4e\x53\xc0\x62\x01\x0e\xb7\x1c\x69\x09\xcf\xb5\x90\xc0\xa1\xaf\x94\x0e\x66\x47\xd9\x70\x42\x6b\x95\xb1\xb7\xcd\xda\x4b\xc7\x62\xbb\xac\xf5\x46\xc4\x71\xff\x5b\x15\x40\x26\x92\x38\xe6\x71\x7c\x91\x27\x19\x6d\xf8\xb6\x41\x63\x98\x56\xee\x6e\xf3\x60\x52\xc1\xa0\x3f\x30\x78\x3b\xf6\x42\x25\xb5\xf1\x23\xb4\x60\xff\x4c\x76\xa4\x57\x9c\x57\xba\x5e\x4d\x47\xb9\xad\x18\xb6\xa3\x47\x52\xb3\xa2\x1d\x53\x39\xd0\x25\x07\x7f\x49\xec\xe8\x1a\x38\xa9\x55\x34\x1f\x38\xb7\x1e\x61\x27\x1c\x63\xd6\x5a\xb9\xac\x6f\x63\x32\x2d\x37\xf9\xc2\x16\x1b\xc2\x6a\x39\x62\x11\x86\x81\xad\x66\x1c\x7f\x65\xdf\x6a\x0d\x1f\xed\x9c\xd0\xc2\x64\x2a\x5b\x7a\x44\x71\xa3\x11\xaa\xe3\xf8\x67\x58\xfc\x48\x29\x80\xbf\xb5\x95\xe1\x07\x6e\x37\x78\x37\xad\xed\x42\xb3\x1f\x58\xa7\x36\x62\xcf\x63\x7a\x45\x97\x52\x7e\x36\x15\x47\x96\x17\xd4\x68\xde\xc2\xd9\x24\x84\x69\x18\x9f\xe6\x9d\xd3\x5b\x79\x0c\xab\xe6\x36\x9f\xd3\xcc\xec\x0d\xd9\xb1\x37\xbc\xc4\x25\x73\xcb\x5b\x80\x03\xb9\xa9\x4c\xdf\xe6\x89\x34\x6b\x1c\x41\xa3\x86\x13\xc6\x02\x58\xe7\x30\x23\xec\x16\xd5\xcc\xa6\x25\xa1\xb5\x3c\x15\x1c\x5d\x1c\x87\x6e\x32\x9b\xa3\x64\x61\x03\x42\x6a\x15\x50\x24\xa0\x29\x43\xd0\xcc\xa4\x15\xa4\x76\x45\xab\xcc\x6e\x17\x71\xfc\x9d\x4e\x04\x6d\x94\x80\x4f\xf6\x82\x53\xd8\xd9\xdc\xe9\xb2\xb0\x3b\x93\x16\x61\x33\x4c\x4f\x9e\x83\xa7\x5a\x87\x3b\x54\x3a\x51\xaa\x5b\xbb\xdd\x80\x44\x55\x86\xa6\x17\x68\x0a\xbb\x1c\x81\x47\x89\x73\x45\xab\xbd\x23\x29\x4b\xc9\xec\x77\xcf\xfd\xa8\xd4\x4d\x4b\xf6\x8b\x4a\x34\x19\x66\xbd\x12\xa8\x03\x2a\x0d\x80\x4f\xdd\x12\x75\xb7\x6b\xa3\x87\xe8\x03\x50\x77\xc3\x10\xaf\xdf\x5a\x2f\xe1\x0e\xd9\xb4\xdc\x60\x38\x77\xf1\x3d\x3d\xda\x64\x77\x97\xfc\x65\xbe\x5c\x72\xe1\x21\xc9\xad\x6b\xff\xae\x48\x5c\x5b\xfb\xbd\x8b\xfc\x59\xac\xc3\xe8\xa3\x11\x81\xf3\x66\x44\x2d\x0a\x5a\xec\xec\x81\xea\xbd\x45\x0c\x86\xae\xde\x06\x59\xad\x93\xa0\x6b\x19\x04\x52\x4e\xc0\x7d\xd3\xbf\x39\x26\xa7\x9d\xfd\xae\x3a\xf6\xf2\xc1\x6e\x1d\x7a\xe6\xe4\xaf\x44\x4b\x97\xaa\xe9\x5b\x1a\xf0\x47\xd7\x70\x1c\x77\x28\x31\xbb\x94\x89\x62\x37\x32\x51\x84\xd8\xb4\xcc\x8a\xe6\x24\x9b\xd5\x8a\x34\xfb\x5f\xce\xc6\xe6\x88\x54\x16\x83\xeb\x4d\xe0\xe3\xe4\x32\x6f\x98\x34\x94\x60\x4e\x57\x25\x64\xe5\x68\x51\x48\xc1\xcd\xef\xa4\x3f\x26\x84\x4a\xec\x0e\xd4\xf2\x0a\x7d\x42\xe2\x5f\x41\xa0\x46\x12\x38\xe3\x19\x9f\xee\xce\x60\xb3\x7d\xe6\xcb\x8a\x50\xed\x50\xda\x8f\xc1\xb3\xdd\x7c\x94\x97\xef\x80\x78\x3a\x67\xa5\x19\xdb\xc8\x04\xe0\x76\x05\xbf\x39\xf9\xa4\xc0\xb7\xdd\x21\xe8\x95\xb5\x87\xda\x20\x67\x62\x27\xc6\x0d\xd7\x0f\x1a\x7d\x4f\x5e\x2a\x12\x66\xb1\x1a\x6e\xfc\xe6\xe4\x4a\x01\x72\x27\xcd\xd8\x12\x0d\x93\x7a\x38\xee\x66\x40\xa9\x04\x7c\xa0\xec\x7c\xbc\xdf\x8f\x19\xcb\x2c\xd3\x2b\x91\xae\xff\xba\xe6\xe2\xf9\x66\xab\xef\x5c\x5d\x12\x28\x87\x53\xba\x59\xfe\x9a\xc3\x51\x29\xab\x03\xcd\x50\x01\x19\x8e\x67\x05\x18\x33\xab\xe7\x9b\xd7\x01\x36\x2c\x20\x9a\xd9\xf1\x20\x01\x7f\x2d\x77\x25\x07\x7b\xeb\x72\xbf\x0f\x4b\xfc\xd3\x10\xed\xca\x0a\x61\x10\xde\x3a\xa9\x95\x51\xc5\x30\x3b\xc9\xbe\x07\xb0\x2a\x5f\xa1\x68\x1b\xf5\xe1\xa9\xa0\x92\xec\xf7\xda\x3a\x9f\x17\xf0\x37\x8e\x21\x8d\x08\xd3\x74\xbd\x5f\x98\x7a\x72\x71\x75\xe2\xcb\x3f\xc1\xa3\xf6\x64\x9b\x29\x9d\x1b\xa6\xf9\x04\xdd\xfb\x00\x47\x73\x92\x89\x13\x7e\x9b\x97\x90\x45\x0a\x1e\x91\xde\x2d\xeb\x8f\x0f\x72\x94\x2d\x97\xef\xe5\x4b\x34\x43\x8f\xe3\x77\xb9\xf7\xa2\xae\x01\x02\xd1\xb9\x4f\x87\x83\xdc\xb0\xd8\x11\xc8\xae\x78\x41\xdf\x64\x6f\x2c\x08\x2f\xdd\x39\xe7\x9a\x05\x78\x8b\xc4\x55\x05\xd8\x4b\x3b\xdb\x91\x41\x1d\x1e\xa3\x88\x63\x59\xe3\xc3\x8a\x23\x70\x7b\x2f\x54\xc2\x09\x63\x45\x93\x0b\x8a\xe3\xa4\x84\x23\xa3\x56\xcc\xae\x6f\x1b\x02\x54\x1e\x4c\x87\x9a\xf6\xe8\x21\xb7\x59\xfb\x9a\xd6\xbe\xbc\x19\x9f\x9e\x93\x74\xa6\xe7\x54\x63\xac\x0a\x0e\x07\x43\x4a\xcd\x4c\xf1\x9b\x93\x5b\xb3\xb5\x76\xcc\xd6\x3e\xd5\xa3\xc5\x1a\xd0\x23\x4d\x18\x0e\xc0\x54\xb8\x30\xf0\x0f\xb1\x3b\x34\x9a\x6e\xc7\xcb\x8e\x63\x7b\xd0\x34\xb9\xff\x16\xd6\x0e\x81\xbe\x69\x3a\x26\x58\x84\xd9\x4e\x6f\x05\xa8\xee\xc4\xf1\x87\x3c\x91\x34\xba\x04\xe9\x20\xda\xbc\x3d\x17\x75\x08\x11\x72\x2f\x3d\x6b\x65\xf2\x57\x08\xaa\xc9\x73\xb3\xc7\x12\xee\xd1\x0a\x96\x52\xb8\xcb\xe0\x7e\xcf\x6b\x20\x06\x3e\x02\x1d\xd5\x9a\xf2\xec\x12\x4a\x48\xa3\x63\x89\x74\xd7\x2a\x2a\x2d\x57\x09\x13\x57\xc0\x7e\x40\xbf\xf3\xdd\xa7\x7e\x7d\xf7\xfc\x4d\x27\x05\x6d\x0c\x4f\xa5\x84\x69\x3a\x95\x95\xe5\x9b\x6c\xc3\xcd\xae\x06\x6c\x27\xf3\xc3\x5a\x4e\xde\xe1\x17\x17\x4b\xff\x7b\x51\x96\x81\xe3\x53\x2c\xf8\x74\x71\x66\xa7\xeb\x74\x31\x18\x10\x2e\x92\x82\x2e\xdc\xed\xa6\x27\x3d\x53\xfc\x15\x4f\x0a\x60\x74\xe9\xdf\xf3\xa4\x70\x4c\xee\x93\xe5\xd2\xb0\xb8\x05\x95\xde\xcb\x91\x84\x7b\xfc\x27\x90\xc1\xc2\xf1\xf2\xf0\x25\x75\x63\x0f\x3b\x27\x70\x42\x34\x54\xa6\xab\x47\x5e\x50\xa1\xe4\xa1\x0f\x40\x3e\x13\x73\xcb\x33\xc3\x19\x1b\x3c\xb7\xdc\xa8\x10\x31\x06\xd8\x3e\x53\x77\x19\x58\x4d\x01\xf8\xc6\x68\x51\xe4\xdb\x77\xb2\x6c\x1b\x44\x75\x42\xcf\xd8\xda\x42\x7f\xbb\xcf\xeb\x2a\x8c\x16\xc2\x32\x80\xae\x74\x96\x1f\x66\x2b\x29\x36\x13\xae\x6f\x66\x14\xe7\xbd\xcb\x3c\xa9\x85\xd4\xab\xf5\x7c\x4b\x93\x79\x17\x6e\xc0\xba\x34\xb0\x5d\xdc\x2c\x9f\x9f\x5a\x97\x54\x66\x05\x9a\x59\x83\x45\x69\x87\x0c\x76\x69\x55\x90\xe5\x73\xf2\xe1\x90\x4e\x08\x09\xdd\x3d\xdf\x2a\x27\x1c\x0a\xa6\xca\xcd\x14\x38\x3d\x76\xe2\x25\xc9\x44\x95\xed\x42\x55\xe0\x75\xe4\x81\x69\x6c\x3c\xd0\x2b\x57\x41\x65\xbc\xac\x82\xc6\xbc\x55\x0d\xef\xcf\x56\xdb\x3a\x28\x52\x11\x3e\x53\x73\x8b\x78\x0a\x9e\xf9\x2b\x16\xca\xc4\x78\x11\x55\xd0\xd8\x27\x55\x63\xf5\x68\x65\x68\x55\xd3\x05\x8d\x60\x2f\xb8\xf7\x88\x8f\xdc\x7f\x1c\x83\x53\xe3\x30\xa8\x76\x49\x52\x2e\x8b\x96\x8d\x0c\x2e\x20\x4c\x8e\x86\xc9\x71\xec\x3d\xae\x9f\x04\x46\x63\xb6\x8e\xc5\x9a\x4a\xf0\x69\x6b\x7e\x65\x6c\xcc\x80\xff\x40\x71\x08\x3a\xe7\x2f\x5b\x96\xd5\xb5\xf1\x57\x56\x75\x9f\x77\x5c\xfa\x38\xde\xf5\xec\x45\x4f\x05\xe8\xfa\x50\xc1\x7e\x9f\x64\xa3\x5c\x2c\x8a\x5d\x99\x5f\x83\xe2\xc9\x14\x23\xce\x98\x4e\xed\x2f\x4d\x0c\x81\x81\x35\x01\x2e\x63\x83\xeb\x68\xe6\xee\xa2\x7d\xb1\xdf\xf7\x5d\x25\x01\xdb\x40\x9c\xf6\xae\xab\x14\xb0\x87\x83\x2a\x41\x93\x65\x6a\xc2\xcf\xa1\x46\x2d\xcf\x35\x39\x4d\x14\x38\xa2\xae\xa6\xd8\x9e\x4a\x99\x75\xce\x4d\xad\x33\x3f\x93\x9e\x78\x53\xe1\x13\x75\x00\xd8\xd8\x8c\xd0\xdd\xff\x91\x11\xfb\x53\x8d\xff\x73\x83\xf5\x67\xc6\xea\xcf\x4f\xd0\x03\x03\xe6\x47\xca\x24\x1d\x6a\x5a\xf5\xa5\x1a\xc2\xa1\xae\x0f\xa2\x61\x77\x33\x42\x0b\x36\x31\x3c\x40\x60\xb6\x48\x17\x86\x05\xc7\x20\xa7\x08\x3f\x48\x8a\x69\x9e\xa2\x2f\xf1\xea\x0c\x5a\xb1\xf1\xe9\xea\x2c\x10\x43\xac\x02\xbc\xec\x64\xcd\xca\xd9\x6a\x0e\xee\xd8\x93\x2d\xbb\x30\x8c\xd5\xda\x0e\x08\x21\xd3\x22\x8e\x93\x35\x10\x1e\x48\xbd\xf5\x6d\x35\xbf\x06\x0b\x92\x42\x64\x7e\x00\xa5\x18\x53\x21\x56\xb6\xab\x55\x06\x8a\x2b\x74\x5b\x49\x25\x92\x35\xdb\xd9\x4a\x6d\xf9\x03\xb6\x70\xf2\xb8\x35\xca\x34\xb0\x31\x65\xd0\x98\xfd\x3e\xc1\x38\xb6\xa0\xa6\x5d\xe6\x46\x17\x5e\xdf\xd6\xd6\x8f\xe9\x09\xa6\x1a\x1c\x4d\x76\x28\x81\xc9\xfb\xac\x92\x92\x10\xba\x03\xee\xce\x04\xed\x4c\xd0\x8e\x20\xef\xb9\x64\x56\xd9\xa7\x5f\x60\x0f\x36\xf4\xae\x3e\x03\xc3\xc7\x26\xfa\xee\x7c\x1c\xc7\x65\xd0\xf7\xda\x40\x5b\x11\xe3\x6c\x35\xc7\xbe\xa2\x5f\xf1\xd6\xda\x80\x04\xd8\x4f\x7c\x8a\x40\x76\xae\x57\x95\x7a\x07\xc5\x2d\x31\xd7\x86\xf4\xec\xaf\x9d\x67\x08\x96\x15\xb1\xfd\xfc\xd0\x99\x39\x18\xe8\xf0\xcc\xb4\x3e\x2d\x84\x15\x30\x09\xbb\x5f\x04\x34\x17\x2e\x56\xee\x08\x6b\xdc\xaf\x40\x4f\x03\xcf\x34\x0d\x67\xda\xc1\x9f\xe2\x58\xd3\x94\x23\xcc\xb9\x6f\xd6\x6b\x15\x22\x76\x77\x48\xda\x98\x9e\xc1\xc5\xab\xfc\x14\x0d\xf8\x28\x5f\x36\xe0\x70\x80\x5c\x57\xe2\xe8\x31\x78\x0a\x01\x43\xa0\x60\x52\xe0\x7c\xb2\xde\x37\xbe\xcf\x13\x61\xce\x23\x7f\x20\xe5\x07\xbc\x0c\x2b\x66\xcf\xa3\x7a\x05\x40\x60\x82\xe3\xa1\xc5\x14\xb4\x29\x94\x40\x0a\xa5\x66\xf9\xdc\x4a\xa8\x32\xc2\x53\x97\xaf\x64\xe3\xd3\xf2\x2c\xab\xf2\x95\xd5\xb4\xec\x58\x36\x2b\xe7\xb4\x60\xe3\xd3\xc2\x9b\x59\x9c\x0e\x06\x85\xb9\x7a\xcb\x59\x31\xf7\xe7\xf4\xce\xed\x00\xa7\x0e\x77\xc2\x7b\xd2\x4f\x3f\x7a\xef\x37\x47\xf1\x2c\x9f\xb3\x2c\x70\x83\xe9\x07\xfe\xbd\xaa\x5e\x21\x79\xf3\x48\x0c\xcf\xfa\xb6\x1f\x68\x74\x00\x8d\xf3\x5f\x89\x73\x12\x4e\x7a\xf5\x0b\x0f\xcc\x74\x55\xe3\xd3\xe0\xb8\xff\xd3\xe5\xd7\xee\x3f\x8d\xf2\x75\x50\xf8\x4f\x75\xe6\xb3\x4e\x91\x87\x93\x74\x5c\x25\x7d\x77\x24\x29\x9e\x16\xb5\xa4\x6f\x54\xdd\x27\x78\x28\x76\x1a\xea\xda\x27\x38\xd9\xed\x33\xd1\x74\xe8\xca\xed\x9b\x0a\x05\x7e\x02\x7f\x4a\xc3\x41\xa0\xa9\x10\x45\xcf\xca\x64\xbf\x87\x1e\x0c\x7f\x52\x16\x2e\xc5\x39\xa3\x19\x4a\xc4\xd3\xc1\x2c\x5a\xd2\xdc\x50\xe5\xfd\x1e\x7a\x31\x7c\x07\xc9\x9d\x86\x9a\xb9\xdc\xe7\xcb\xa1\xd9\x26\x55\x1f\xfe\xa9\xea\x56\xf4\xa0\xa7\xd4\x98\x6f\xe5\xcf\x85\x9c\x3a\x7f\xac\xc1\xfb\x43\x92\x23\xb8\x93\xdf\xf4\xd5\x7d\xcb\x79\xfd\x9b\x62\x3f\x52\x68\x9d\x3d\x43\xdf\x28\x73\xdc\xbb\x85\x7a\x36\x06\x17\x86\xcc\x07\x74\x70\x84\xdf\x87\x53\x03\x0d\xef\x8f\x03\xbe\xff\x59\x3b\x7a\x12\x44\xbf\x52\x2d\x87\x7b\x0c\x79\x3f\x42\x33\xd3\x6f\xd9\xec\x77\x46\x1e\xda\x95\xd5\x8e\x04\xfd\xce\x56\xef\x31\x45\xe1\xf7\x22\x4e\xef\x98\xd0\x85\x99\xac\xc2\x3e\x98\xe1\xd4\xfa\xfd\x6a\x66\x38\x27\x74\x85\x49\xb4\xa4\x0a\x27\xb3\x4a\xf0\xce\x24\x40\xcf\x8b\x8b\x73\x36\x8e\xe3\xd5\x19\x1b\xef\xf7\x8b\x33\xf8\x7d\xce\x60\x1c\xf1\xab\x6a\x54\x7d\x15\xc7\x71\xde\xd8\x02\xae\x36\x41\xce\xd9\x38\x0d\xbe\xc6\x64\xbf\xc7\x6a\xfe\xc5\xc2\xa0\x77\x8a\x9c\xb9\xe2\xdc\xf7\xd8\xfb\x7e\xec\x8f\xc3\x1b\xcd\x8b\xfa\x01\x74\xaa\x19\xcc\xf6\x29\xe1\x6e\x63\x0c\x2b\xf4\x86\x4a\xc3\xd5\xe7\xff\xa3\xb6\x17\xdd\xbc\x2a\xf6\x02\x90\x7e\xdd\x5a\x62\x4c\x4d\x75\x0a\x58\x0d\x55\xd6\x97\x01\xe5\x39\xaf\x5d\x39\x3d\x52\x53\x88\x31\xe1\xce\x00\x90\x80\xa8\x20\xd1\x17\x41\x27\x5c\x33\xa0\xfe\xc1\xa4\x6a\xc1\xb7\xb5\xc6\xdf\xc6\xb1\x6e\x2e\x45\xd1\x62\x7e\x6b\x47\x4b\xbe\x4a\x12\x05\x27\x4b\x7b\x17\x06\x9c\x1b\x12\x15\x3f\xfe\x78\x76\xb9\x0c\x95\xe0\x30\x8e\xc7\x2e\x6d\x1c\xab\xd6\xb4\xa3\xa8\xf1\x67\x07\x8f\x15\x4c\xa7\xef\xd0\xcf\x2a\x60\xdc\xb1\x6e\x78\x1a\xb6\x17\x4b\x51\xdb\x12\x30\x40\x6e\x6c\x20\x27\xe2\x26\xd0\x0b\x65\x11\x14\x6a\x57\x38\xe1\xb9\x3b\xc3\x42\x8a\x63\xab\xd2\xd4\xd7\xe0\x7f\xab\x8e\x37\xe9\x59\x6d\xbc\x43\xda\x66\x06\xd6\x90\xe6\x20\xfa\x08\xa9\xeb\xe7\x5d\x03\x99\xd7\x98\x23\x3b\x14\x39\x5c\x45\xcc\xff\x8e\x8b\x32\x7b\x36\xef\x1c\x68\x40\xc5\xea\xea\x21\xf1\x53\x90\x07\x53\xa0\x64\xf2\x49\x11\xfa\xe9\xdf\xd6\x15\x38\xfa\x12\xdb\xab\x34\xa7\xc6\xa7\xd6\x9b\x71\x43\xe2\x31\x18\x70\x12\x86\x83\x6f\x43\x14\xef\xf5\x1a\x0a\x03\xe4\x70\xa8\x37\xb2\xe3\x29\xb5\xa6\xd5\x64\xe5\x31\xb0\x60\xc0\xb7\x3e\xec\xc9\xdf\x15\xbb\x18\xbd\x02\x94\x60\x33\xe6\x5d\xd7\xc6\x60\xe7\x9c\xe4\xe2\x44\x10\xd1\xb4\x48\x00\x4f\xc0\xa6\x96\x99\x9a\x33\xe0\xfe\x7a\x4d\x5d\x0c\x21\x97\x9c\xe9\x40\x9a\xf5\xab\x5f\xe0\x9f\xf3\x44\x93\xb3\xc4\xea\x52\x80\x04\xb2\xee\x81\x09\xb0\x4b\x6b\x50\xcf\xe0\xa5\x8d\x5b\xae\x3d\x20\x44\xbf\x28\xfb\xd6\xe5\x14\x73\xed\x9b\xa2\x67\x46\xec\x9b\xa2\x63\xcb\xec\x03\x29\x4c\xa7\x4b\x84\x9b\xfa\x8d\x4c\x6a\x6a\xbb\x94\x43\x17\xbc\x36\x47\xe4\xfc\xc2\xa6\x27\x8a\x17\x80\x64\x7d\x1a\xf5\xf8\x28\x80\xc7\x36\xab\x75\xc0\x22\xf4\xbb\x33\x04\xd0\x93\x93\x61\x34\xd0\x2d\x28\xee\x10\x36\x26\xda\xde\x9e\x82\xd1\xb3\xf7\x06\x63\x8b\x41\x67\x4f\x27\x61\xfe\xba\x7f\xd7\x5a\xfe\x77\xe6\x96\xea\x85\xec\x3c\x2b\x77\x8a\xd3\xa7\x32\x01\xb0\x15\x3a\xc3\xce\xcc\xdd\x00\x06\xd7\x08\xfb\xd6\x8a\x09\x42\x4d\xd5\xd0\x9b\xa8\xd9\x24\xbf\x2b\x42\x7f\x7f\x70\x93\x74\x29\xcd\xf8\xc7\x45\xe7\xf8\xc6\x3d\x55\xa3\xdf\x35\xf6\x36\x4f\x44\xf0\x04\xaf\xe2\x58\xd7\xbd\x3c\xe4\x21\x2b\x9b\x13\x6d\xf8\x6f\x28\xc1\x90\xfc\x9a\xb8\xaf\xa7\xbd\xb4\x3b\x11\xae\x3a\x56\xe1\xd0\x4a\x78\x45\x86\x27\xff\x8b\x3c\x09\xfc\x2c\x8d\xc1\x77\x24\x78\xe0\x92\xa8\xfb\xd0\x34\x8f\x87\xb5\x2b\xe8\x50\x12\x0a\x6a\x33\xaa\xf2\xd4\x73\x30\xfb\xf2\xf7\x3f\xff\x78\xbf\xb6\x5e\x79\x6b\xe3\x14\x8c\x49\x2f\x48\x55\xbd\x80\x2b\xdf\xf6\x21\xef\x99\x85\x06\x3d\x70\xcd\x1e\x28\xd0\xc8\xf8\x4e\x27\xba\xe6\xa9\xa0\xdb\x35\xcf\xaf\x2a\x41\x33\x96\x03\xb1\x34\xe1\x83\xa3\x09\x2d\x6a\x80\x12\x51\x7e\xab\x19\xa7\x4f\xb1\x05\xd4\xa9\x12\xba\x36\x4e\xad\xaf\xac\x74\x12\xec\xf6\xef\x14\x1a\xd2\x87\x62\x5a\xb8\x21\x55\x7b\xf7\x87\xa6\x68\xf5\x34\x00\x3b\x44\x45\xbc\x47\xc9\x34\xfd\xc7\xfe\x63\x39\x20\x80\x92\x90\x5c\x66\x8b\xcf\x57\x4a\xee\xc4\x72\x48\xa6\xc9\xc7\x8b\x01\x79\xe4\x6e\x97\x88\x7f\xc8\x19\xf7\x56\x46\x02\x15\xf7\xc8\xc0\x05\xd9\x80\x81\x08\x74\xf5\x1c\xc8\xeb\x6c\x32\x9f\x46\xd6\xe9\xb5\xf5\xfc\x80\xbf\xad\x5a\x8a\x9e\xa9\xf9\x54\x23\xb9\x7b\x3c\x4f\x03\x37\x1b\x11\xb4\xb1\x24\xd1\xc0\xc4\x0c\xcc\xe7\x57\xe6\x93\x58\xc5\x58\x43\x1d\xf7\x7b\xf8\x3b\x60\xd1\x09\x26\xab\x36\x60\x35\x1e\x5f\x05\xe3\x31\xba\x2c\x32\xf1\xd9\x4c\x49\x45\xca\x7c\x90\xbd\xd0\x04\x88\x90\x6e\xdc\x02\x5c\xc9\x24\x70\x80\x79\x82\x50\x90\x55\x09\xd3\x66\x40\x62\x61\x23\x49\x6a\xf5\xa6\xab\x66\xfd\x18\x38\xd1\xa9\x6f\xcc\xc9\x18\x25\xf6\x0a\x40\x6b\xc7\xf3\x46\xf5\x82\x40\x25\x6e\xf3\xf1\x11\x40\xc3\xfa\x87\x66\x8d\x3a\xc7\x56\x3b\xd5\x3f\xb8\xb4\x9e\x4a\x4d\x69\x27\xd1\x00\xa1\x8c\x07\xd1\xc9\x2a\xcb\x0b\xbe\x3c\xd1\xf2\x24\x5b\x5e\x67\x62\xc1\x4f\x4a\x50\x8c\x1f\x45\xc1\xda\xfa\x2d\x6c\xb4\x0b\xcc\x03\xac\xc2\x12\x21\xe2\xac\xbe\x23\x17\xcb\x74\x05\x8a\x96\xa5\xf5\xea\x33\xb2\x9a\x93\x09\xa1\x66\x53\xa7\x12\x6d\x3f\x2c\x76\x26\x9f\x96\xa0\xe9\x26\x97\x9c\x2e\x48\xba\x38\xc0\x3b\x91\xa4\x19\x1e\x31\xb4\x64\x18\xd9\xd3\xec\x15\x4f\x32\xea\x9c\x93\xd2\xc2\xf0\xc3\x99\x7d\x07\x33\xf7\x9a\x52\x57\x0f\xca\xc2\xdc\x62\x4c\xcf\xef\x94\xb9\x4d\xf0\x5b\x4d\x5b\xa0\x35\x28\xad\x52\x20\x47\x9b\xcd\x51\x0e\xba\x42\x65\xf6\xd1\x62\x4d\xe2\xb8\xbf\x1a\x71\x59\x24\xe4\x94\xd8\xce\x31\xec\x98\x64\x3f\xaa\xa4\xa4\x2b\xba\x00\x60\x85\x1d\x8a\x36\x72\xd0\x65\xf0\xda\xae\xd3\x5d\x9a\x27\xc1\x30\xfe\x3d\xb8\x00\x82\x88\xd4\x09\x6c\x47\x21\x04\xbb\xdd\x22\x28\xef\xab\x5a\x1c\x26\xa9\xfa\x3f\xa6\x0b\xa4\x06\xbe\xab\x5d\xbd\xa4\xeb\xa0\xa0\x10\xd3\x3d\x8e\x67\x26\x37\x02\x2c\x47\xe8\xd4\xf5\x07\x95\x7c\x65\x6e\xc6\x8a\x50\x49\x4e\xab\x01\x30\x3b\x69\x85\x3a\xe6\xbe\xac\x36\xbe\xfa\x34\x29\x59\x7f\x42\xb3\x38\xd6\x39\xf2\xe7\x14\x32\x11\xfc\xe3\xfd\xa4\xd2\x9d\xf5\x0a\xb2\x63\x3f\xa8\xe4\x47\x53\xe1\x8a\x2a\xba\x36\x95\xd2\x35\x8e\xcc\x96\xad\x0d\x6d\x31\x2b\xb5\xb7\x85\x39\x8a\x36\xc3\x68\x90\xec\xa6\xdb\x81\xd9\xfa\xbb\x74\x8b\x3c\x78\xbf\xdc\xef\x17\x7d\xb6\xb3\x80\xaf\xc5\x99\x9d\xac\x53\x92\x27\x05\xf3\x8e\x02\xdd\xfa\x2c\x06\xdf\xf0\xbf\x12\xba\x20\xbd\x05\xdb\x1d\x6a\x13\x7b\xf0\x05\x6c\x65\x79\x5a\x77\x0a\x0f\x25\x98\xc9\xc7\xfc\xbd\x3c\x59\x9a\xe9\x2f\xd8\x32\xd8\xdf\x7f\x53\x4d\xbb\xc6\x99\xf3\x2c\x64\x96\xf0\x77\x5c\xcc\xa9\x64\xf7\x87\x1e\x2e\x06\xb7\x2e\x9d\x13\x2a\x2a\x9a\x6e\x9e\xec\x1b\x95\xe1\x38\xa9\x0c\xad\x07\xd1\x5b\x2e\x0f\x9c\x8e\x16\xd9\x5d\xc0\x0a\xfb\xe5\xd5\x4c\x32\xcb\xe6\x74\xc7\x26\x66\xf5\xd4\x5a\x81\xc0\xef\x6d\xf0\xfb\x4a\x14\xb6\x3b\x2d\xce\x1c\x86\xae\x62\xf9\x6c\x37\xef\xa9\x73\xb8\x64\x58\xd6\x61\x47\x27\x94\xd3\x7c\xb6\x1b\x4c\xe6\x66\x01\xed\x06\xec\x31\x0d\x66\xc0\xdc\x57\x0f\x20\x60\xcb\x57\x49\x39\x92\xdb\xec\xf7\x1d\x27\x3e\xbb\xa0\xbb\xa1\xa0\x1c\xdc\x1d\xd9\xd6\x1a\x8e\x8d\x98\xc5\x32\x78\x8c\x82\x72\xbc\xe4\x9e\xed\x4e\xc5\x80\x3d\x76\x62\x94\x7c\x26\x06\x93\x79\x0f\xff\xb0\x44\x4e\xa5\x59\x20\x69\x14\x91\x41\xa3\xac\xc3\xa1\x7a\x90\xbe\x07\xa3\xa3\x32\xcd\x29\x3c\x97\xf3\x32\x95\x23\x7b\x68\xc1\xb3\xb9\x3b\xb5\xa6\xd6\xf9\x65\x35\xcb\x3c\xaf\xf9\xc2\x40\xeb\xa5\x72\xbf\x77\xbf\x66\xe3\x79\x9f\x35\xe6\xdd\x0d\x1b\xd0\xa8\xb7\x39\xf8\x55\xcc\x99\x5d\x2f\xb5\x6b\xe2\xc3\x1b\xac\x54\x49\xb0\x5e\x14\x49\x01\x36\x0b\xaa\x02\x43\x76\xb0\x1c\xc3\x66\xb0\xdc\xfe\xa0\xf9\xc8\x76\x71\x6a\xe3\x9e\xe2\x27\xf3\x11\x69\x3d\x02\x4c\xfd\x6a\x29\xd1\xa1\x85\x60\xcc\x79\x16\x53\x52\xe8\x1c\x6d\x04\xc3\xef\xc1\xc0\x43\xd4\xd8\xda\xab\x71\xb3\x34\x21\xd8\x1d\x41\x57\xe4\x43\x24\x0c\x96\xbd\xd5\x60\x60\x12\x48\x89\xda\xef\xc7\xd4\x12\xad\xaf\xc0\xbd\x24\x39\xed\x4b\x47\xae\x7e\x34\x21\xd2\x9c\x02\xb5\x5c\x86\xf7\xfe\xa0\x08\xfd\x10\xf2\x98\xe0\x67\x46\x76\x98\xd8\xbd\xcd\xad\x82\x1d\x0a\x60\x72\x70\xb9\x90\xd7\xf0\x8a\xf2\xbc\x82\xd7\x46\x3f\x9d\xe5\xd7\x6d\xd0\xfe\xe0\xc9\x58\xd7\x28\xf0\x54\xe5\xa9\xc8\x3d\x67\x31\xe3\x73\xc3\x6f\xcf\xf8\x9c\x79\xd0\xa5\xe4\xd1\xc7\x8b\xc1\xa3\x2b\xd8\x15\x5f\xc5\x11\x09\x4e\x14\x99\x87\x72\x9b\x4a\x09\xcc\xbf\xc7\xd0\x72\x1a\x6d\xb3\xe5\x32\x17\x57\x43\x70\x77\x9a\x9e\x8c\x26\xdb\xdb\x08\x75\x6f\xa8\x62\xf7\x5b\xc5\x53\x93\x71\xab\x78\x44\x67\xa2\xae\x2f\x86\x50\x8e\xd4\xfa\xf2\x4a\x05\x5d\xc8\x22\x1d\xd3\xad\x2c\xd3\x31\x5d\x6c\x52\x4e\xc1\xac\x1d\x8c\x9c\xca\x34\x91\xfb\x7d\x09\x3a\x30\x57\x5c\x23\x44\x7b\xc3\x1f\x15\x39\xf4\xb4\xbb\x4f\x85\xe6\xfa\xc8\x01\xb1\x04\xdc\x6a\xe8\x29\xfe\xb1\xbb\x21\x1d\x93\x4a\x95\x21\xa3\x3b\x96\xdb\xf8\x59\x3e\x9c\xcc\x53\x6d\x25\x5b\xb0\x24\xc6\x54\xa1\x0a\xd7\x67\x2e\x58\x96\xd3\x5f\x42\x8f\x53\xb6\x5e\x73\xd9\xce\xd8\xeb\x3c\xd9\x11\xf4\x1a\xe0\x33\xec\xf2\xe0\x8b\x66\x84\x50\x35\xda\x64\x5b\x36\x9b\xd3\x45\x9e\xec\xa8\xa2\xb0\xef\x77\x54\xf7\x03\x2f\x37\xfc\x56\x73\x25\xb2\xe2\x35\x16\xbf\x8c\xe3\xb7\x50\x36\xa1\xbb\xe6\x8e\xaa\x07\x38\x5a\x03\x8d\xb0\xbf\xd9\x0b\x79\x24\x15\x55\x15\x6d\x8a\xa2\x56\xe9\x15\xb5\x82\xe2\xfc\x57\x47\x81\x3e\x8e\x06\xe9\xb0\x50\x42\x41\xf0\xb6\xc9\xb6\x5e\x79\x15\xbf\xe0\x10\x1a\x53\x33\xbe\x76\x31\x8c\xcc\xe5\x59\x2c\xd1\x7e\xf4\xd7\xae\x71\xc6\xd2\xf2\x69\xe2\xa7\x1c\x46\x13\x0a\xa4\x55\x18\xf8\x43\x65\xf7\x07\x92\x26\xf5\x94\x56\xfb\x35\x08\x08\x1e\x21\xa1\x14\x42\x93\x46\x39\xf5\x3c\x18\x14\xe4\xba\x3f\x20\xc3\x50\x3a\xd9\x78\xd5\x1d\x30\xe5\x32\x9d\x39\x4d\x1e\x7d\xbc\x5c\x6c\x86\x3a\xbb\xfc\x78\x69\x37\x72\x51\x29\x54\x91\xfd\xbe\x18\xfd\xbe\xe3\xea\x0e\x31\x31\xa4\x8a\xe3\x46\x40\x12\x8d\x30\x7f\x64\x57\x98\xab\xc3\x17\xc2\x22\x4c\x00\x1e\xcf\x86\xeb\x6c\xf1\x39\xf2\x77\x98\x1f\xc1\x52\x40\x71\xb1\x74\x5e\x7d\x3c\x4b\x6b\x68\x16\x27\xf8\xa7\x2a\xac\x3d\xe1\x8d\x04\xed\x79\xa6\xaa\xa2\x21\x59\x1e\x70\xa5\x25\xdd\xb9\x17\x30\x1c\x20\x0b\xbb\x86\x3b\x1c\x36\x9e\xa5\x49\x27\xf7\x7f\xa1\x87\x47\x57\xb4\xcc\x49\xaa\xe9\x02\x54\x1d\x3b\x5c\x28\xd2\x15\xeb\x4f\xcc\x05\x65\xe1\xac\x2f\xc9\xfd\x55\x65\xd2\xbd\x50\x3c\xd3\xfc\x99\xfd\x7c\xa1\xb2\x2b\xb4\x3d\xf6\x94\x61\x8d\xae\x29\x17\x30\x3f\xe8\x22\x67\xdd\x43\xe6\x70\x01\xd8\x8d\x89\x26\x74\xc9\xb6\xd3\x2d\x5e\x47\x87\xeb\xd4\xbf\x75\xc3\xa3\x97\x7d\x06\xd9\x34\xeb\x7c\xcf\x6f\x41\x32\x93\x14\xf6\x3e\xbb\xa6\xeb\xc1\x92\x90\x9e\x8c\xe3\xec\xec\xbf\xa6\x57\xb5\x05\x1e\xe8\xd7\x6e\xe6\x84\xa4\xf5\x58\xeb\x02\xdb\x6e\x13\x6e\x6d\xcc\xb6\xb2\x1c\x2c\x29\xc4\x2d\x64\x31\x60\x4b\x1b\xc6\x96\xc0\xb3\x6e\x9d\x33\xcd\x55\xb2\x1e\xb0\xe5\x60\x42\xa3\x8f\x3a\x62\x6c\x3b\x1b\xcf\xb1\xcd\x77\x38\xa8\x4d\xa0\xcd\x6b\x76\x37\x84\x22\xff\xe3\xee\x34\xd9\xb0\x63\x0d\xdd\xca\xe4\x9a\xd0\xc8\xaf\x44\xd2\x50\xe9\x55\x12\xdc\xc8\x6d\x15\x2f\x9d\xcd\x61\x44\xe8\xa6\xad\xf8\xab\x11\xec\xe6\x23\xa2\x09\x42\x57\xae\x2b\x57\x36\x1f\x95\x6d\xf3\x7e\x1f\x7d\x14\xbe\xfd\x0f\x34\xac\xca\x32\x8d\xfe\xd7\xff\xfc\xbf\xa2\x34\xfa\x5f\xff\xf3\xff\xed\xf0\x71\xd9\x6a\xb1\x6f\x0b\x54\xe1\xda\x32\x81\xb6\x98\x0a\x6b\xa3\xd5\xed\x6c\x33\x81\xac\x5f\x28\xf8\xdf\x5d\x01\xae\x39\xdd\x4b\x61\x82\x4b\x01\x6c\x9e\x0f\xd8\x66\x9b\xc5\xa3\x7a\x9b\x49\x6f\x6d\x8e\x6a\xa1\xe2\x03\x73\x47\xd1\xfe\x52\x75\xe5\x1a\x1f\xc7\xc9\x0a\x94\x46\xed\x92\x73\x29\xe0\xc5\x62\xbf\x57\xfb\x7d\xbe\xdf\xaf\xf6\xfb\x1d\xae\xb4\x4b\x26\x0c\x61\x00\x59\xd8\xe5\x80\x29\x44\x0f\xbc\x1c\x30\xab\xe1\xfe\x29\x54\x30\xbf\x9a\xd3\x4b\xba\xab\x4c\xeb\xe3\x38\xf9\x64\xdd\x90\x96\x38\x0c\xed\x03\xe2\x13\x39\x74\x47\x5c\x91\x80\xad\x2e\xf3\xba\x12\x48\x74\x12\xd1\xba\x76\xe0\xf0\x31\x3e\xc1\x0f\x98\xf8\x8f\xc7\x53\xe0\xf1\xff\xbf\xff\x3b\xf2\x56\xd0\x20\x12\xaa\xca\xdb\xe5\x35\x41\xbe\xe7\xef\xfc\x0d\xdc\xd2\x3b\x96\x4f\xf3\x41\x74\xb2\xd8\x0c\x41\xb8\x37\xbc\x94\x6a\xc9\x55\x94\x46\xcd\x10\x4f\x96\x0a\x26\x60\xfc\x17\xac\x18\xf8\xb7\xe8\xd3\xaa\xed\xa8\x00\xe3\x65\xad\x2b\xc7\xbf\xac\x99\x9e\xad\xe0\xbd\x76\x3d\xd2\xf2\xbc\x88\xe3\xb5\x55\xc7\x2a\x90\x1c\x1c\x5c\x14\x5b\x78\x59\x55\xa3\xbd\x3d\x08\xf0\x82\x39\x93\x7a\x58\x10\x48\x80\x2c\x1f\xdd\x11\x8a\xda\x4f\x54\x31\x97\xd0\x25\x2b\x98\xf9\x15\xbe\x7c\x16\x2d\xa6\xbc\xaf\xe2\x58\x84\x76\x1d\x39\x3e\xca\x77\x2d\x3d\x9a\x13\xda\x87\x4b\xc0\x62\xd3\xf0\x6f\x26\x38\x5f\x96\x4f\x71\xd2\xfd\x6e\x8b\xe3\x24\xdf\xef\x93\x9c\x75\xaf\x87\xc6\xe2\x77\x60\x14\xb8\xf6\x08\x40\xdb\xb6\xf6\x2e\xbe\xf6\x44\x54\x8c\xf2\x25\xb1\xc0\x97\xed\xd6\x94\x5c\xff\x2c\x9c\x3b\xda\x24\x3f\xb6\x52\x73\x52\x6d\x9a\x6a\x8c\x16\x79\xdd\xa5\x6b\xfd\x45\x30\xb7\x4e\x93\xa9\x64\xe3\xba\xbe\x02\xcc\x18\x2d\xe8\x82\xae\xe8\x9a\x6e\x3d\xae\x13\x5d\xb2\x31\xdd\xb0\xe4\x2d\x9b\xd0\x28\x22\xf4\x0e\x8f\xb9\x7c\x95\xdc\x31\xb6\x24\xf7\x3b\x56\xb0\x05\x5b\xb1\x92\x45\x11\x45\x07\xaa\xf4\x8e\x4d\x1e\x55\xaf\x60\xd7\xf4\xca\x30\xa6\x97\x6c\x7c\x7a\x19\xaa\x43\x5c\x62\x13\x3f\x31\x35\xbb\x9c\xd3\x1b\xf6\xc9\x29\x22\x86\xba\x84\x37\x56\x97\xf0\xff\x27\xef\xdd\xd6\xdb\xc6\xb1\x46\xc1\x7b\x3f\x85\xc4\xe9\x52\x13\x25\x48\x96\x6c\x27\x8e\x69\x23\xda\xa9\x24\xd5\x95\xea\x54\x92\xae\xa4\xfa\x24\xab\xd3\x14\x09\x59\x48\x28\x42\x4d\x42\x76\x5c\x16\xe7\xdb\xf7\xf3\x12\xf3\x04\xf3\x10\xfb\x29\xe6\x7a\x9e\x64\x3e\x2c\x1c\x49\x51\x4e\xaa\xbb\xfa\xdf\x33\xbd\x75\x41\x91\x38\x2e\x9c\x16\x16\x16\xd6\xe1\xbd\xbe\x1d\x4c\x7b\xbd\x1b\x6f\xbc\x27\x57\x6a\xa0\x6f\x50\xf4\x5e\x4f\xcf\xd4\x5e\x1e\xbe\x87\xcb\x43\xf9\x7c\x9c\x6e\xb7\x37\xfe\x15\xe4\x7b\xb8\xf2\x4c\xbd\x72\xd1\x44\x5f\x45\xbc\x87\xfb\xc7\xf7\x70\xe5\x98\xf6\x7a\xb7\x8f\x55\x40\x78\x0b\x31\x38\x23\xb2\x17\x6e\x6a\x44\xcd\x46\x31\x78\xbd\x40\x48\x51\x2a\xce\x58\x58\x4e\xca\x7e\x70\xae\x0e\xf9\x10\x2c\x63\x9d\x84\x7b\xad\x71\x61\x62\xca\x72\x09\x64\x72\x23\x02\x6f\x40\xbf\xed\xf5\xc2\xeb\xed\x36\xbc\xf6\x68\x46\x97\x0a\xbf\x07\x71\xda\x1b\x85\xec\x7a\xbd\xee\x02\xd0\xec\x8d\x71\x9e\x5c\xeb\x8b\xb0\xbb\x04\x11\x13\x23\x0b\x88\x6f\xb4\x88\xc9\x92\xbc\x47\xa6\x5f\x1f\xeb\xae\xd0\x9a\x92\xb2\x33\xe0\x36\x56\x62\x81\x6b\x98\x44\x6a\x7c\xaf\xcd\xf8\xce\xfb\xe4\x08\x5d\x4f\xe7\xfd\xf1\x4c\x41\x9b\xa9\x86\x5d\x4f\xe7\x33\xc5\xbb\x5f\x6e\xb7\x4b\xdb\xfb\xae\x84\x2b\x7f\x86\x64\xa0\x32\x81\xaf\x4c\xa6\x25\x48\x34\x2a\x79\xd1\x11\x82\x09\xc8\x16\x21\xa4\x0a\x8d\x80\xa3\xe0\x93\x75\x7f\x0c\xb2\x93\x68\x90\x5a\x11\xc7\xba\x00\x24\x76\xa9\x8d\xd6\xd5\xd2\xcc\x89\x70\x49\xba\x63\x54\xc9\xa6\xa5\x8f\x89\xa1\x7e\xcc\x74\x7e\xee\x98\x44\x6b\x7c\x8b\xf4\x62\xd0\xfa\x72\x9f\x48\xda\x5f\x79\x82\x4c\x5d\xcd\x20\x7c\x4b\x3e\x3d\x7e\x3e\x59\x59\x54\xf8\x7c\x90\xa2\x68\x75\x20\xec\x21\x2e\x14\xf8\x2d\x8e\x27\x71\x7f\x13\x6d\x70\x82\xd3\xfe\x5b\xa3\xf2\x4b\x6e\x27\x59\x14\x04\x78\x81\x4b\xe8\xed\x4f\x8f\xc9\x73\x74\xb7\x22\xa6\x30\x59\x14\x4e\xc9\xf3\x03\x85\x95\x53\xf2\x09\x27\x24\x08\xaa\x95\x35\xbc\xc6\x25\x8e\x9d\xbe\xee\xf7\x67\x08\xc7\x84\xb1\x50\x7d\x60\xe1\x51\x21\x48\x6d\xf4\x1d\xd3\xca\xd7\x64\x7c\xfe\xda\x49\x4e\xbc\x96\xa3\x59\x83\xb6\x51\xf8\x0c\x61\x5d\xf0\xb8\x51\xb0\xc7\x04\x58\xd4\x77\xb9\x11\x71\x92\xe1\x20\x48\xa1\x65\xc3\x7b\xbd\x20\x20\x9e\xfc\xad\x9c\xa2\x12\x4d\x6e\xb7\x35\xba\xa9\xd5\x47\xb6\x57\xdb\x92\xdd\x7f\x17\xd0\xc9\x27\xf9\x94\xce\x1a\x72\x94\x1c\x6e\xfc\x18\xba\x0b\x77\xcd\xbf\x29\xdc\x49\x04\xa6\x1e\x17\x0b\x70\xb8\xc7\xd4\xd2\xee\x54\x35\x47\x49\xc7\x02\x8f\x4b\xf3\xa5\xf4\x8d\x35\xec\xd3\x10\x0d\x6f\x3a\x16\xee\xca\x30\x48\xf8\xe5\xda\x1d\x1e\x29\x26\x32\x30\x1a\x1f\x30\x77\xd3\xad\x35\xa5\x18\xaa\x90\x02\x18\x17\xa0\xd5\x42\xc1\x81\x41\x7e\xa5\x0e\x63\x5e\x6f\xc4\x4d\x16\x29\xc5\x9c\x4c\x67\x60\xd9\x5b\x12\x2a\xdc\x89\xcc\xfe\xa5\x08\xb3\x69\x3e\xc3\x2c\xcc\x11\x2e\xdc\x35\x81\xd2\x8a\x29\xf5\xa0\x81\xf6\x18\x20\x44\xcd\x95\x4d\x94\xcc\x4f\xa9\xef\x38\x16\xea\x73\xa3\x3f\x97\x72\x40\x33\x24\x77\x96\x30\xf3\x6c\x9e\xa7\x44\xa5\x18\xe8\x6b\x50\xa7\xc3\x60\xb4\xf2\xc2\x11\x8e\xc3\x11\xce\xac\x29\x0c\x6c\x4c\x42\xd9\x82\x64\x77\xb3\x9f\xe9\xc0\xa6\xb1\x0a\x46\x7a\xca\x99\xa3\x95\x5f\xd0\x60\x8c\x0e\x78\xb8\xc0\x0b\x05\xfe\x1a\xe1\x54\x19\x78\x87\xa2\xf5\x4d\x75\x2a\x0f\x1a\x86\xc3\x60\x21\xd2\x91\x2b\x64\x4f\x17\x09\x21\x4a\xf0\x7b\x4c\x88\x85\x82\x87\x09\x4e\x14\xbf\xd4\x2c\xfc\x72\x98\x2c\x51\x7f\xd9\xaf\x05\x6f\x64\x20\x5e\x2b\xa8\x43\x09\xe5\xd8\x87\x12\xd5\x86\xa6\x3d\xaf\x1c\x27\xbc\xb7\xbe\x6c\x3a\x92\xc3\x39\x42\xca\xca\xba\xd7\x06\x20\xf6\x6d\x2b\xbe\x08\x78\x59\x58\x7f\xb1\x0b\x83\x29\xbf\xd6\x81\xfd\x31\x4e\x55\xbb\xee\xbe\x04\x3a\x39\x1e\xcb\xb6\xc2\xd7\xe8\x60\xa7\x5f\x0e\xd2\xc7\xe3\x9d\x11\x93\x15\x0e\xc6\x7b\xda\x79\xdf\x02\x59\x33\x6b\xf6\x47\x19\x1d\xa1\xbe\x91\x03\x52\x93\x8f\x16\x64\x04\xe4\x7e\x43\xf2\x9b\x4e\x45\x4d\xa7\x0b\xe7\x7d\x10\x03\xb7\x1a\xee\xfe\xf5\xb9\xab\x39\x75\x35\x27\x92\xb2\x2b\x68\x4e\x68\xb3\xae\x36\x4d\x21\xc3\x99\x9e\x16\xb3\x03\xd1\x27\x6c\x98\x2c\x37\xf9\x47\x79\xf4\x0e\x91\xac\x9b\x19\xa9\x03\x56\xd3\x34\x53\x06\x5f\xc0\x28\x58\xfd\x46\x7f\xa7\xc1\xd5\x9a\xf9\x46\xbf\x6c\xf1\x7b\x2d\x21\x79\x72\xbc\x15\x56\xe3\xf2\x22\xcf\x6b\xfe\x4a\x9a\x58\xa8\x20\xb4\x2f\xce\xf3\x8b\xc2\xe9\x53\x31\xdf\x84\x43\x3e\xf3\xfb\x6d\xe0\x1a\xf5\x3b\x90\xff\xfc\x2b\x0b\x19\xd6\x26\x87\x83\x9a\xda\xbc\xbe\xaa\x51\x17\x52\x86\xde\x69\xd8\xfb\x97\x0b\x4b\x12\xd5\xd9\xad\xb1\x16\x05\x79\xad\xd3\x91\x5d\xe0\xad\x74\x84\x16\xc1\x30\xbd\xa6\xe6\x8c\x5f\xbd\x9e\xe3\x14\x19\xa5\x54\xe1\xde\x9a\xc9\xa8\xa7\x36\xde\x70\xc0\x21\x07\x1a\x3c\x6f\xf8\x43\x88\x99\xa0\xc5\xab\x1d\xc0\x5c\x11\xb2\x4f\x29\xf4\x29\xd8\x96\xcd\x7d\x83\x27\x74\xe6\x4b\x22\xe2\xf4\x97\x8d\xb1\x9c\x38\xf7\x8d\xad\x4d\x34\xd8\x51\x80\xac\x4d\xf1\x16\x2d\xba\x5a\x3c\xec\x40\xa4\xf0\xe7\x34\x48\x3f\x5c\x58\x91\x64\x4b\x87\x09\xcc\x06\x14\x0c\xce\x9a\x95\x06\xaa\x78\x1e\x8c\x21\xc5\xbc\x26\xbe\x32\x20\xf1\xa0\xb0\xcb\x83\x10\x6e\xec\xa3\x58\xf0\xcc\x4d\x1f\xc8\x18\xe1\xc2\x5f\x16\xc0\x2e\x0e\xc5\x80\x70\x64\xe5\x4f\x46\x0a\x89\xd2\x81\xd2\xd7\x71\xbd\x20\x2e\x8e\x1e\xec\x14\xae\xaf\xcf\xc6\xdb\x6d\xb7\x1e\x33\x1d\xcd\x3c\x07\xa5\x6b\x86\xac\xb2\xd4\x54\xaf\x03\x33\x93\xc3\x52\x37\xc8\xe2\x8c\x29\xf8\x50\x61\x61\x89\x66\xb8\x59\x68\x6d\xf6\xec\x59\x0e\x75\x9d\x96\x3d\x83\x25\x50\xbd\x68\x31\x73\x10\xd1\x2f\x59\x37\xb2\x53\x1c\x9b\x07\xd7\xd7\x52\x73\x11\xb4\xc3\x50\xd4\xd0\x84\x05\xa5\x98\x81\x19\xcc\x9d\x09\x43\x38\xec\xcc\x6c\xe8\xc1\xa6\x41\xd2\x2e\x5e\xca\x5e\x8f\xd5\x90\xd7\xe3\x07\x23\xd7\x1f\x31\xa9\x47\x7e\x75\xf4\xa0\x7f\xf4\x00\x97\x24\x3e\x2f\x2f\xea\x51\xe7\x46\xd8\x5d\x0f\x05\xab\xad\xf2\x12\x97\x7d\x72\xf4\x00\xa1\x03\x66\xa7\xe1\xc6\x4a\x86\xb5\xcd\xbe\x7e\xbf\xc0\x23\xbc\x41\x78\x53\x1b\x40\x5d\x2c\x61\x0d\x5c\x13\xeb\x29\x01\x86\x38\xde\xae\x59\x96\x85\xa8\x52\xe7\x02\x3a\x20\xbc\xaa\xb0\x8b\x69\x18\x47\xec\xb6\xce\xd0\x0b\x32\x1e\x21\x5f\x8e\xed\x20\xe5\x5a\xd7\x45\xb6\x50\xee\x5c\x3b\x30\xd3\x66\x21\x83\x07\xf8\x01\xd2\xa2\x4b\xaa\x15\xe0\xfd\x48\xa1\x08\xf8\xc7\xd4\xf6\x87\xf0\x45\x37\x73\x72\xcd\x6d\x26\x5b\x2c\x06\x05\x96\x46\xa0\x5d\xaf\xfd\x31\x1e\x49\x94\x0f\x34\x87\x96\xf2\x6a\x82\x8a\x0e\xec\x7a\x96\x75\xbb\x15\x54\x60\x31\xc3\x94\x14\x95\xb0\xf1\x46\x6d\xfa\x66\xc9\xb2\x96\xc6\x3d\x1e\x8f\x3c\x68\x6a\x1d\xff\x79\x2c\xfd\xeb\xcd\x71\x6b\x18\xcc\x43\x8a\x7c\x40\x95\xff\x72\xb0\x51\xf0\x2a\xa4\x38\xc6\x39\xaa\xc9\xb4\x6b\x3c\x16\xb7\xe1\x31\x6e\x6c\xb5\xad\x18\x19\xe1\x5b\x46\xde\x0e\x9f\xf1\xa4\xc5\x2a\xb6\x9d\x3d\xbe\x6f\xe5\x5b\xe6\xae\x94\xe9\x4d\xe7\xd6\x1d\xc6\xb4\xd8\x50\x0e\x4a\x2c\x23\x24\xf7\x1f\x65\x9a\x5a\x52\x4c\x06\x87\x4d\x35\xb5\x1b\xa8\x2b\x62\x34\x43\x33\x3d\xb7\x41\xff\xdd\xec\xba\x56\x52\x98\x78\x9f\x60\xc6\x43\xdb\xc3\xf2\x4d\x5d\xa9\x80\x8c\xc6\xf9\xef\x68\x4e\x0b\xb8\x48\x20\x63\xab\x09\x0e\x32\x01\x24\xd7\x87\xae\x35\x0d\x73\x3c\xd2\xf2\xcd\x25\xcd\xc8\x0b\x60\xc5\x29\x74\xa5\x6c\x26\xc0\xbc\x7a\xc7\x42\xb5\x25\x08\x6b\x89\x6e\xc5\xf4\x2a\xe4\xa9\xf1\xff\x2d\x3c\x8b\x86\x74\x4d\x0a\x63\xc6\x4b\xd0\x3c\x95\xa0\xb5\xf9\xd9\x0f\xb5\xe4\x28\x5c\x6b\xc9\x73\x6e\x29\xc9\x04\xbc\xd4\xe2\xe1\xca\xda\x07\xc3\x82\xcb\x07\xfd\x24\x22\x5a\x21\xfc\x17\x65\xcf\x0f\x2b\x68\x63\x8e\xaa\x03\xdf\x3b\x39\x79\xcf\x43\x7f\xbf\xc7\x77\x09\xcf\x4b\x51\x6c\x12\xc1\x8b\xe8\x96\xc1\x8c\xdd\x99\xb0\xf9\x44\x35\x4e\xcd\xa2\x81\x1b\x06\x2c\x06\xf2\x9c\x1a\x79\xd1\x7e\xa4\x7d\xed\x5b\xcc\x8f\xdd\x1e\xb1\x97\x26\x1c\x35\x7d\x90\xc9\xd5\x90\xf7\x8d\xff\x31\x47\x4a\xd7\xf0\x79\x0d\x2c\x9c\x23\x43\xa3\xb4\x91\x27\x35\xca\xa0\x96\x11\x55\xd8\x18\x68\x6e\xb1\x32\xfa\x49\xf7\xfd\x67\x1a\x69\x4e\xcc\x60\x05\x9e\x4e\x44\x24\x94\xd5\x7b\xba\xdd\xfa\xd3\xc0\xf8\xc4\x42\x15\x2e\x4d\x9d\x7f\x10\xe1\x6e\xb5\x6b\xea\x77\xeb\x08\x61\x6b\x64\xb0\x56\xed\x60\x7c\xf0\x32\xf7\x27\x87\xd0\x0e\xa7\x73\x7c\xa3\x01\xcf\x6b\xfe\xae\x91\x9a\x37\xbb\xb3\xcc\x5a\x8f\x31\x70\x05\x58\x1e\xc9\xa3\xee\xa8\x02\xeb\x63\xde\x2c\x13\x08\x55\x08\xfb\x8e\xbf\xa2\x5d\x0c\xf1\x93\x06\x8b\x62\x10\x8c\x34\xe2\xc4\x39\xc9\x27\xe6\x53\xce\x22\x5c\xa8\xee\x6f\x2b\xc6\xd0\x88\xcf\x75\x4b\x4c\x3e\x8a\xb0\x2b\xb1\xd6\xf1\xf9\xa4\x88\x0a\xd5\xf1\xf9\xde\x8e\xd7\xee\xfd\xf6\x59\x94\xd5\xd1\xdf\x81\x09\x22\xcf\x3e\xa8\xe8\xf5\x14\xd7\xc3\x96\xa0\x92\x44\x0d\x53\x5c\xdf\x5a\x28\x0d\x32\x34\x23\x41\x5d\xe5\xaf\x36\xab\x79\xc3\xa5\xa3\x93\xea\xf1\xd2\xa9\x2a\xfe\xc8\xca\x4d\x9c\xed\xba\x3a\x36\xbe\x06\xa0\xb0\x26\x22\x71\xb5\x22\x0c\xfa\x63\x15\x96\x7d\xf1\x94\x6f\xee\x31\x12\x0a\x84\xbe\x75\xd2\xbc\x2f\x19\x24\xa8\xb0\xd1\x05\xbb\x37\x99\x3f\x57\x2b\xac\xcd\x97\xb4\x35\xdc\x8d\x2e\xb4\x5e\xd9\xc4\xd9\x6b\xf6\x97\x66\x46\xeb\x25\x44\xbe\x21\x7e\x30\xdd\xae\x9c\xc7\xc3\x3a\x04\x8f\x73\x91\xf1\x31\xaf\x82\xd4\x47\x14\xd0\x1c\x12\x6d\xb7\x81\xe0\xea\xc5\xac\x5e\xf0\x91\xee\x5c\x86\xe3\xba\xeb\xbb\xbd\xbd\x47\xb3\x61\x21\xe7\x71\x59\xe1\x1d\x47\x8f\xf7\x65\x6a\xf1\x0a\x09\xf8\x41\xf7\x41\x0d\x41\xa8\x85\xf1\x27\x5a\x5f\x12\xbb\x73\x60\xb2\x86\x73\xf0\x76\x3b\x42\x11\x45\x56\x9d\x06\x61\xdf\x81\xe0\x97\x14\xed\xaf\xb6\xed\x56\x16\x25\x4b\x69\x78\x0f\x6e\x2b\xe8\x9b\xdd\x82\x44\xaf\xe7\xe3\x82\x96\x82\xca\x66\x49\xe8\xee\x27\x9d\xe3\x67\xaf\x9c\xb6\x9c\xdf\xdc\x7e\x3e\xef\x95\xb1\x39\x6c\x87\x0a\xd6\x87\x68\x76\xcc\x0e\x18\xc6\xcc\x86\x41\xa3\x77\x2d\x7a\xf3\xd4\x77\xa0\xc9\x40\x81\x40\xf9\x6e\xb4\x3d\x20\x77\x33\x35\xfb\x5c\xa7\x52\xe3\x62\x13\x19\x32\x09\x0c\x77\x7a\x72\xa9\x96\xfd\x85\x6b\x73\x5f\x39\x45\x70\x98\xf9\x03\x0d\x99\xee\xd6\x0a\xe1\x38\xbd\x7f\x74\xbc\xe3\xb7\xeb\x0c\x73\xaa\x00\x62\xd9\x73\x3e\xb9\x6f\x2e\xd4\x6b\x2f\x70\xe1\x71\x79\x61\x74\xaf\xfc\xc9\xd6\x7a\xf0\x34\x1b\x9b\x37\x22\x8a\x14\xc8\x5b\xdc\x91\x9a\x9d\x40\x12\xc5\xc6\x69\x2b\xbc\xcb\xf5\x8a\x0e\x04\x11\x13\x61\x18\x2e\x0c\x45\xac\xfa\xa5\x9b\xf2\x15\x6d\x5d\xe7\xbb\x7e\x67\x7f\x35\x98\xc1\x24\x04\x5c\x3c\x1b\x4f\x3a\xfb\xa0\x43\x18\x94\x52\x98\x95\x60\xad\x70\xd3\xf3\xe5\x3d\xe7\x8e\xe9\x0c\x7b\x76\x54\xbd\x21\xf7\x0c\x32\x15\x53\x36\x23\x5a\x2d\x69\xd7\xb1\x6d\x21\x8b\xdc\x6e\xad\xf7\xce\xdd\xea\x5b\x57\x4d\x03\x04\x53\xbd\x75\x32\x54\x07\xc3\xf3\x2d\x63\xa2\xa6\x7c\x76\x50\x4c\xf9\x8c\x28\x0a\x27\x36\x9d\x28\x78\x14\x43\x27\xee\x21\x69\xc0\xca\xaf\xa6\x6a\xf2\xca\x5c\x64\xf4\x7a\x80\xf7\xc1\xda\xd2\x67\x40\xad\xdb\xde\xe2\x84\x61\x25\xd6\x6e\x89\x54\xcf\x83\xa7\x50\x82\xeb\x2f\xf2\xb0\xd4\xb6\x09\x30\x47\x38\x93\x01\x6f\xf2\xb0\x04\x09\x08\x75\x32\x03\x83\xcb\x98\x93\x0c\x07\x31\xe8\x37\x05\x84\xe8\xf5\x98\x10\xea\x8d\x8c\x2c\x11\x54\xdd\x13\xe5\x36\x35\x31\xa8\xe3\x62\x74\x50\x4c\x63\x8b\x5d\x16\x93\x2c\xda\xe0\xc5\x64\x13\x65\x9a\xad\xef\xc7\x6e\xb0\x33\x69\x22\x83\xde\xc8\x75\x4a\x1b\x48\xa4\x52\x53\xb4\xc0\x42\xcb\x32\x13\xb7\x92\xcf\xf9\x63\x39\x52\x83\x01\x32\x94\x26\xd8\x33\x38\x28\x27\x7f\xd4\x4b\xbf\xd4\xa7\x81\x64\xd5\xeb\xfd\x51\xb3\x1d\x93\x95\x5c\xfe\x9b\x3c\xe5\xb5\x39\x81\xee\x7e\xd6\x85\x28\xef\x70\x8a\x90\xdc\x9f\x08\xdc\xc3\x99\x92\xda\xf1\x59\xb3\x48\x30\x7b\xa0\x4a\xfd\x6c\x06\xe5\x7d\x4e\x65\x28\xa9\x78\x0e\x3b\x0a\x28\x05\x79\x2b\xdf\x3f\xb7\x51\x40\x11\x2d\xe9\xea\x9b\xba\x4a\x5d\x61\x7d\x6a\x6c\xf2\x56\x1b\x6e\x16\x74\x2a\xdc\x64\xfb\x7b\xc6\xfb\x00\xa1\xa8\x10\x89\x3a\xd4\x04\xd9\x6e\xfb\x7d\xc5\x6f\x35\x39\x6a\x06\xff\x74\x1e\x15\x56\xcf\x65\x7c\x17\xdd\xc1\x00\x09\x35\x04\x79\x25\xe9\x33\x67\x1f\x70\xc7\x43\x43\xe3\x0c\xec\x87\x0d\x57\xf1\x27\x77\xc2\x06\x63\xfd\xc5\xc7\xa7\xf2\xdc\xbd\x53\x4a\xf3\x34\xae\x99\x1d\x12\x36\x17\x1a\xca\x31\xc1\xcd\xd0\x36\xb2\x91\x1a\x46\xab\x81\x44\x52\xa5\xaf\xd7\x64\x27\xec\x2d\xcd\xda\x82\x5f\x03\x82\x20\xde\x81\xde\xc4\x5e\xd9\x7a\x2b\xcc\xca\x46\x63\x68\x7d\xc0\x77\xf3\x10\x62\x11\x79\xa3\xc5\x6a\x9b\x69\xe9\x64\x3d\x26\x72\xb8\xa2\x67\x8d\xfe\x95\x81\x6a\x15\xb4\x44\xaa\x60\x54\x01\xd1\xb8\x53\x70\x9d\x72\xfe\xf2\x41\x3c\x10\x50\x2b\x79\xa6\x7c\x63\xe7\x56\xdd\x12\x59\xd7\xcc\x58\xe8\xba\x55\x22\x3d\xfd\x76\x92\x55\x92\x1a\x01\x8b\xe8\x59\x5c\xb6\x6e\x12\xc6\x8e\xad\x3d\x34\x06\x4a\x81\x5a\x12\xb4\x13\xf3\x1e\x05\x20\x6c\x13\xe0\x66\xd3\x0a\xa2\x0c\x3f\x42\x62\xa7\xcf\x19\x05\x4e\x89\x54\xc5\x39\xad\xcf\xdd\xe2\x4d\xcc\x4d\x11\xaf\xb5\x3e\xa8\x24\xf8\xa6\xc5\x0c\x28\xbf\x17\x3c\xcc\xb5\x9e\x27\x84\x39\xf7\x60\xd4\xa9\x7b\x6a\x46\x1a\x90\x7e\x07\xf6\xbe\x45\xa1\xa3\x15\xbf\xa6\xff\xff\xeb\x03\xac\xef\x1a\xd9\x22\xec\x32\xd7\x66\x67\xb8\x02\xa9\xd6\x6e\xb2\xec\xc0\xb2\x5f\x39\x18\xaa\x11\xc9\x52\xf5\x9a\x92\xfd\xe1\x75\x87\x6a\x31\xe1\x5a\x47\x97\x3b\x1d\x5d\xe8\x4b\xdf\x7b\xa0\xd1\xeb\x0d\xf5\x5b\xaf\x17\x77\xad\x9c\xda\xc4\xa8\x51\x99\x0c\x31\x52\xaa\x9b\x55\xad\xeb\xf5\xdc\x53\x46\x10\xee\xe9\xf8\x5d\x1e\x86\x22\xe0\xe4\x4a\xf9\x87\xd2\x0a\x07\xdf\x88\x60\x37\xd7\xc8\x47\xf4\x7a\xac\xa6\xce\xcf\xad\x60\x5f\x9c\xb1\xab\xfc\x4f\x5a\x35\x5d\xae\x95\xdf\xab\x92\x8d\x3a\x79\xcd\x60\xac\xd1\xbe\xd1\xaa\xec\xa0\x28\x60\xd4\xda\xa7\x33\xe4\xfa\xdb\xdc\x68\x3c\x11\x13\xed\x1f\x9e\xa1\xc8\x72\xc2\xed\x99\x21\x77\x67\x06\x4f\xf7\xdd\x65\x46\x08\x8f\x30\x33\x77\x21\x44\x60\xae\xfc\x33\x38\xc1\x89\x82\x28\xdb\x0d\xd4\x31\x5c\x0f\xc0\x9a\xad\xe1\xd6\xf7\xff\x58\x80\x3c\x62\x01\x06\x1b\xb4\x78\xa7\xb9\xe4\x00\x83\xb0\x2d\x1a\xe9\xde\xc8\x60\x56\x59\x0e\x91\x3a\x2c\xb8\x35\xa2\xc7\xaa\x7e\x71\x6b\x6c\xe1\x62\x63\xdf\x78\x87\xda\x35\x16\xbe\x8b\x7b\xf8\x45\x38\xc7\x39\xd8\x3f\xb9\x5d\xcb\x93\x3f\xec\x89\x81\x3a\x6e\x7f\xa3\x65\x10\xa3\x36\x53\x6a\x77\xbe\xe1\xea\x48\x58\x89\x43\x01\xd6\x14\xde\xdd\xae\xe9\xc4\x0c\x59\x24\x10\x76\xa6\x0f\x23\x60\x1c\xb9\x6f\x5c\x37\xfb\x16\x75\xc7\x58\xd9\x33\x57\x09\xd5\x3b\xde\xb1\x80\xad\x62\x77\x82\xab\x83\x46\xa3\x29\xf1\x9a\x2d\xe7\xac\x13\xad\x44\x15\xb6\x86\x65\x9f\xb4\x39\xb5\x82\x93\x8d\xe1\x1b\x85\x7e\x49\xa8\xdd\xfc\xa7\x67\x3e\xa4\x7e\xfe\xf1\x2e\x33\xe4\x59\xe7\xdc\xce\x5e\x25\xc7\xc7\xb4\xe0\x26\x55\x8a\xcc\x3b\x96\x5f\x1e\x9b\x18\xa1\xe7\xb8\xb1\xf2\xa2\xee\x5c\x64\x22\x6d\xe6\xc6\x3b\x0c\xd9\xb6\xed\xcc\x8b\x5a\x9f\xf8\xec\xc8\x03\x8f\xda\xa7\x35\x2b\x44\x96\xbd\xad\x3d\x27\x68\x2d\x17\xdf\xce\xb3\xbd\x7f\xf9\x72\xd3\x58\xa5\x39\x30\x68\xd3\x58\x4a\x30\x6c\x03\xd2\xa6\x8c\x68\x10\x94\x03\xca\xc7\x10\xac\xf0\x19\x21\x1b\x2d\x85\x09\xe2\x60\x32\x91\xf1\x4f\x68\x23\x88\xb5\xa7\xad\x82\x1e\x13\x31\x4c\x96\xdb\x6d\xde\xeb\x75\x73\x67\x21\x6b\xbb\xd5\x27\xfb\x4d\xb3\x4b\x6d\x92\xaa\xdf\x67\x72\x35\x02\x99\xf2\x24\xcb\x1a\x7d\x6a\xae\x06\xa7\xb3\xdd\xbe\x6a\x43\x69\xbf\x64\xca\x68\xdb\x89\xe6\xa4\x0c\x1e\x1e\x81\x0d\x21\x43\x0c\x78\x08\xd3\x0a\xaf\x79\xf9\x6d\xc1\xd5\xf1\x65\x77\x26\xd7\xb8\xe5\xb8\x20\x6d\xe7\x69\xb3\xe5\xec\x6f\x84\x95\x3a\x60\x3e\x07\xbd\x0f\x56\x0d\xf9\x63\x6b\xae\x41\x10\x8a\xbb\xa3\x03\x3a\x20\x1c\xf7\xfb\x79\xe5\xb0\x0d\xf0\xe1\x05\xd2\xbe\xb3\x3e\x49\x80\x9b\xcc\x4f\xb5\xf0\x1a\x6b\x2d\x59\x1e\x18\x77\x01\xda\x96\x10\x34\x04\x84\x21\x97\x17\x23\x67\xcd\xe6\xda\x79\x1f\xfa\xd2\xd6\x79\xfd\xa2\x67\x76\xed\xac\xd3\xd7\xd2\xe2\xa6\xb1\xb2\x39\xa2\xc2\x09\x5f\xb7\x51\x94\xfa\x9a\xef\x4b\xef\x48\x9a\x77\x64\x3b\x19\x74\x23\x1c\xcf\xbd\xfd\xb6\xef\x1d\x5f\x63\xe1\xdf\xfc\x89\xfa\x4d\xa0\x8c\xa4\x99\x63\x35\x08\xef\xda\x0d\xce\x0b\x35\xca\xf9\x19\x5d\x8b\x25\xd9\x21\xa8\x21\x18\x4a\x32\x24\x75\x68\xee\x07\x9c\x01\x75\xe8\x1c\xe5\xd5\xe1\x19\x4f\xea\x1b\xd6\x76\x1b\x82\xea\xe0\x81\x47\x7d\xab\xb6\xb6\xdf\xe5\x1c\x18\x31\x51\x33\xf5\x61\x19\x2b\x66\x20\xf5\x44\x98\xbb\x60\x5f\x03\x3c\xa6\xf2\x0b\x75\xa5\x2a\x5f\xad\x7d\x93\xc6\x98\xe0\x1c\x14\xc0\x78\x6a\x8e\x23\x7e\xff\xb7\x77\x3b\xd5\xbb\x90\x6c\x27\x28\xf0\x99\x43\x83\xdf\x49\x08\x5b\x01\xa3\x8f\x34\x95\x14\x8b\xfb\xf2\xb5\x1a\x53\x9e\x44\x05\x76\x05\x46\x7e\xe9\x12\xcf\xd8\x3c\x90\x14\x80\x36\xde\x31\xa2\xee\x68\x6f\xce\xd9\x5e\x4b\x00\x35\xa3\x98\xb9\x41\xb9\x05\x11\x46\xbe\xc8\x9a\x92\x74\xf6\xd4\xb5\x29\x49\x30\xeb\xe1\xc2\x84\xe2\xd9\xa4\x14\xdc\x71\x18\x5e\x0f\xf8\x01\xe1\x38\x06\x5d\x47\xb8\x83\x70\x6f\x40\x57\xa0\x83\xc2\x5a\xff\x82\x4e\x28\x11\xb6\x42\x76\x45\x55\x55\x61\x81\x6f\xb4\x91\x1f\x40\xb4\x9b\x5c\xf6\x41\x73\x06\x49\x1c\xe0\xdf\xaf\xbf\x85\x7b\x1d\xe5\xb7\x09\x7b\xbd\x8d\x5a\xa4\x78\x9a\x0e\x48\x44\xcd\x4d\xcc\x47\x9a\x4e\xc5\x0c\x6c\x78\x11\x4f\x02\x52\xe6\x30\x26\x68\x31\x08\x54\x5a\xc0\x14\xb0\xf8\x79\x11\x5a\xc0\xb5\xf4\xb9\x72\x69\x6b\x66\x48\x7d\x8a\xe8\x4d\x60\xaa\x8c\xcf\xee\x78\x5e\xc9\x8d\xca\x0e\x4b\x91\xba\x65\xa4\xed\x17\xed\x75\x4f\x07\xa4\xed\x70\xac\xa6\x79\xfd\x44\xbc\x93\x50\x05\x03\x87\x1c\xae\xbd\x5f\x9a\x95\x5b\x47\xca\xf3\xfa\x85\xdd\x0f\x3c\xdd\x7b\xc7\x25\x17\x93\xe2\x09\xa5\x4c\xf8\xf7\x55\xf5\x64\xc9\xaa\xc2\x8e\x37\xb9\x97\x8d\xa0\x17\xe2\x44\x2b\xb6\x86\xb5\xd5\x19\xfd\x8e\xdb\x5b\x3c\x8b\xe9\xef\x13\xcb\x7c\x4b\xd7\x4a\xef\xb1\xaa\x10\xf6\x45\x02\x86\xd4\xb8\x11\xaa\x85\xca\x1e\x51\x9e\xfa\x18\x09\xe4\x47\x47\x51\xad\x1d\x45\x98\x77\xe4\x26\xd0\xb1\x4d\xed\x78\x62\x04\x81\xe7\x41\xde\xca\x73\x5d\xb1\x0e\xcb\x3b\x7e\x0d\xa8\x56\x5d\xc3\xd0\xdc\x15\x43\xbd\xde\x35\x0f\xaf\x19\xbe\x62\xe8\x62\xd4\xeb\x85\x6f\x5d\xea\xe9\x15\x9b\xb5\xf9\x58\xdc\x6d\x3e\xd5\xc2\x9d\xd0\x0d\xe0\x6a\xae\xb8\x02\xad\xad\x12\x55\x55\xe8\x43\x20\xcb\x44\xc8\x73\x4c\x64\xf5\xa8\x42\x67\x4c\x23\x04\xed\x36\xe5\xa7\xa8\xb9\xde\x14\x3b\xb8\xd8\x59\x6c\xd6\xba\x89\x89\x9a\xc6\x70\x82\x06\x78\xba\x84\x19\x1a\x90\xf7\x7a\xa5\x87\xd2\x0e\x24\xad\xb6\x91\x98\x54\xa5\xc4\x1b\x84\xa9\x7e\x2d\xf0\x06\x9c\x1c\x20\x63\x1a\xaf\x66\xdc\xf5\x3d\xf3\xbc\x01\x24\xab\x5d\x27\x34\xef\x96\xac\xec\x18\xf5\xb5\x0e\x2b\x3b\x71\x56\xd0\x38\xbd\x95\x23\xb4\x29\xe9\x30\x40\x07\x80\x57\x88\x00\x4d\x0e\x42\xf1\xbb\x90\x22\xfc\x44\x3e\xda\x1d\xef\x6d\xb7\x2f\xea\x91\x2b\xb0\x02\xe8\xef\x2e\xdf\x8b\x9a\x11\xb0\x1b\xe6\xb9\x05\x1f\x10\xcd\x5a\x47\x17\xa3\xed\x56\x48\x82\x1f\x48\x84\x16\xc8\x69\x41\x25\xc4\x39\xef\xc8\xfa\x3b\x41\x3f\x14\x7d\x93\xb9\x1f\x80\x7b\xff\x25\xb5\x8d\x1b\x7a\x33\x30\x27\xf4\xbc\xab\xbc\x84\x94\xe7\x35\xba\xb3\x76\x40\xf9\x9c\xa8\x95\xb8\xe0\xe8\x2e\x27\x4c\x23\x3c\x31\x20\xdc\x72\xd4\xb5\x7c\xad\x98\x79\x1e\x36\x1a\xea\x78\xea\xda\xa3\x6e\x9a\xf5\x33\x2e\x64\xa8\x35\xd8\x0f\xc4\xd8\x01\x23\xd6\xe5\x50\xc8\x09\xf7\xec\x9e\x25\x4b\xb0\xd4\x62\x89\x7f\x2f\x5a\xa8\x48\x4d\xef\x73\x84\x0d\x5d\x6f\x21\xfd\xb4\x03\x69\x13\xc0\x9a\xc9\x1f\xe7\xe0\x43\x29\xe9\xd4\x0b\x7b\x5b\x33\xf7\x21\x06\xd4\x13\xcc\xf5\x89\x7e\x7a\x5e\x9c\x17\xc4\x9c\x3b\x50\xe1\x24\x41\x3d\xa7\x19\xcc\xb3\xf5\x48\xac\x40\x5e\xab\xe1\x72\x27\xaf\x87\x73\xe5\xa2\xcd\xba\x3c\x2b\x88\x91\xe9\x3b\x2f\xce\x05\x29\xb0\x57\xaf\x6f\xdd\xa3\x70\x33\x80\xcd\xba\x44\x80\xf9\xc1\xbc\x4f\x6a\xe1\xb5\x59\x61\x00\xe9\x0b\x2d\x0c\x61\x41\x7f\xc2\xea\x66\xaf\x21\xfa\x80\x46\x29\x6f\x08\x01\xee\x88\x15\xd6\xe4\xfb\x77\xe6\xa4\xeb\x4c\x98\x8e\x94\xb0\x03\x67\xbe\x1c\xe6\xa4\x12\xff\xf7\xa0\x74\x96\xcb\x95\x20\x63\x57\x1b\xe1\x46\xb5\x3b\x83\x86\x4b\xc5\xc2\x9c\x6a\x75\x8c\x27\x80\x05\x75\xc7\x5a\x6c\x50\x0c\x48\x6c\x2b\xe8\x7b\xf3\xe0\x63\x43\x4f\x7a\x84\x73\x79\xbe\x01\x11\x14\x64\x46\xca\x9e\xfd\x5a\x2b\x67\x24\xb7\x95\xab\x3b\x33\x42\x4d\xb5\x4e\xc5\xc1\x7a\x52\xe5\x24\x37\xc3\xcc\xcf\x39\x09\x73\xc2\x91\x3f\xcc\xaa\x32\xbe\xbf\xbf\xe5\x11\xde\xeb\x6f\x38\xc2\x13\x92\xbb\x2a\x63\x53\xa5\xe5\x36\xd8\xe6\xfe\xc0\x7c\x5b\xf0\xa0\xd7\x55\x97\x47\x31\x04\xbc\x52\xf9\x4a\x62\xb3\x7a\xe4\xd1\xc1\x96\xf2\xce\xe9\x83\x00\xe1\x62\xbc\xdf\x6a\x3a\xc6\xff\x54\xc7\x95\xf1\xe1\xc8\x79\x79\xfe\x81\xa7\xef\xd8\x8a\x3a\xc7\xee\x6f\x69\x06\x01\x5e\x1a\x73\xf7\xe1\xae\x42\x9c\x8b\x66\xef\x1e\xa4\x96\xc6\x5d\x8d\x60\x7d\xf4\xa9\xdf\xda\xd4\xee\x0b\x08\xdd\x6e\x3d\xab\xcd\x4f\x6b\xeb\x40\x5d\xdd\xae\x8c\xef\x17\xb8\xbc\x7d\x93\x87\x42\xdf\xdd\x3e\x77\x6e\x69\x94\x5b\x18\xcb\xd6\xfa\xc0\x80\xf1\xea\xb9\xac\x71\xde\x68\xfa\x63\x84\x77\x68\xca\xcf\x64\x50\x64\xa6\x87\x6a\x7e\xb4\xd3\xf5\x9c\x3a\x89\x6e\xb6\x08\xbb\x2b\x49\x6e\xe9\x4b\x33\x23\x2b\x3b\x5c\xf3\x75\xe8\x5b\x05\x78\xd3\x62\x34\x4a\x53\x9b\x07\xac\x7e\x1f\x47\xd4\x79\x9d\xe3\x98\xf4\xe5\x06\xf7\x2c\x16\xa0\xfb\x16\x32\x33\x40\xa4\xd8\x6e\x99\x3f\x1a\x44\x0c\xd5\x05\x76\xaf\xe7\xde\xc2\xa0\x1f\xb8\x18\xe3\x82\x7d\xa4\xfc\x7b\xad\x40\xac\xdd\xcd\x89\xc7\xf1\xa0\xa6\x41\xa9\x61\x03\xe6\xe1\x33\x9a\xc5\xb7\xdb\x6d\xf0\x75\x6b\x71\x60\x1e\x86\xef\xb1\x3a\x3c\x09\x7f\x34\xb7\x42\x08\xaf\xb8\x79\x45\x51\xed\xd6\xb2\xd7\xeb\xba\x38\xdd\x93\x13\x17\x52\x4f\xfc\x78\x0c\xae\x0d\xe1\xb2\xb2\x16\x31\x38\x32\x57\x97\x13\x73\x11\x05\xa3\x50\xab\x57\xdb\xb2\x0c\x19\xf6\x7a\xd3\x69\x52\xac\x78\xc8\xf5\x25\x63\x89\x0e\x76\xdd\x10\x81\x2e\xaa\x0b\x2b\x65\xd8\x04\x1c\x44\xc1\x2c\x8d\x6c\x66\xb5\x01\xea\xc9\xed\x49\x9c\x6f\x64\x15\x4c\x41\x03\xe8\x75\xd3\xeb\x6d\xec\x8d\xeb\x2b\xd9\x59\x25\xcd\xb0\x4e\x81\x39\xb9\xd3\x05\x46\x53\x5d\xd8\x0c\xbb\xe5\x15\xb1\xfa\xed\xa3\x6e\xb5\xda\xc7\xcf\x59\xad\xdb\x98\xc3\x0a\xe7\x48\x47\x95\x4b\xb6\x10\x21\xd2\x19\xa7\x23\x77\xf7\x5b\x4f\x50\xf9\x25\x83\x6a\x84\xb7\xc4\xfb\x7d\x56\x5f\xe1\xb8\x36\xb3\x08\xab\xa1\x9a\xd8\x75\x3c\xf3\x90\x4c\x81\x6b\x13\x9a\x35\x70\x8b\x99\x76\xb8\xdc\x6e\x95\x6d\x21\x3d\x41\x95\x87\x36\x8f\x7a\x7c\x55\xc3\x27\x2b\x1e\x0a\x70\xb5\x9d\xeb\x96\xc9\x37\xfa\x8f\x4d\x9c\x95\x21\x05\x47\x8d\xc6\x13\x99\x2d\xe0\xc3\xce\x4a\x6d\x7a\x47\x01\x0b\x09\x9a\xf2\xb1\xb7\x26\x46\x02\x24\x47\xd8\x93\xc8\x52\xac\x1b\x45\xb3\xe2\xc2\x73\xbe\x96\xcb\x53\xad\xc7\xf2\xec\xf5\x42\x6d\x52\xa2\x59\x1b\xb9\xab\x10\x9a\xf2\x19\xa9\xa5\x97\x54\x1a\xf7\xfd\xb5\xbd\x30\xa4\x50\x97\xb6\x93\x3f\x78\x9f\xa7\x39\xcd\xdf\xdd\x31\x57\x3e\x11\xf2\x88\xe1\x5b\xcf\x45\x48\xdd\x2e\x68\x8f\x63\xb9\xf3\x38\x26\x26\x86\x91\x32\x11\xa0\x35\x1d\x79\x56\x6c\x9f\xb1\x16\xf5\x86\x1d\x61\x38\xbb\xcb\x72\x7b\x93\xc8\x0d\x56\xd5\x06\x24\xf3\xc9\x1b\x5a\x73\x73\x4b\xd7\x4f\xf9\xfa\x56\xe9\x08\x70\x14\x71\xe4\xee\x16\xd5\x5e\xad\x84\xae\x40\x43\x4a\x97\x61\xd7\x53\x59\x35\xdd\xb1\xc6\xbe\x1f\x56\x65\x3a\x0a\x27\x24\x9e\x6e\xf4\xa1\x4c\xe5\x87\x1d\x2a\xd1\x38\x81\x47\xc9\x50\x70\xb5\x39\x29\x05\xd6\x0a\x61\x47\x34\x2e\xe4\xa9\x23\x41\x61\x46\x16\xc6\x7c\xf1\xdf\xd4\xe0\x86\x97\x69\x1f\xfd\xe6\x10\xa9\xb3\xac\xc0\x4a\xd0\x37\xcc\xa6\xe3\x19\x42\x8f\x07\xe3\x5e\x2f\x5c\xf1\xb0\x44\xd3\xc5\x8c\x24\xd3\xc5\x0c\x2b\x35\xc6\x8e\x7c\x97\xe7\x3b\xeb\x58\xc7\xf6\xf2\x4b\x6f\xde\xe6\x9a\x5e\x9b\xa8\xbf\x3e\x29\x22\x71\x61\x6e\x0d\x34\xc3\x18\x74\xd5\x93\x25\xf1\xcf\x87\xdf\xb2\x7d\x86\x7d\xef\xf1\x12\xa6\xd4\x45\xec\x58\xdd\xf1\x61\xc2\xd7\x0c\x58\x7d\xa1\x4a\x44\xb8\x1d\xab\x10\x21\x1d\x4d\xba\x23\x37\x00\xea\xfe\x83\x37\x84\xbc\xca\x7e\x1f\xbd\x64\xb6\xe8\x69\x69\xa4\x22\x35\x8c\xb8\x11\x09\xe2\x4f\xda\x90\x35\x4c\x04\x59\xbc\x29\xda\x20\xe6\x5d\xef\x23\x36\x4e\x7b\x21\xc9\x2f\x36\x9e\xe7\x3b\xf5\x4e\xd6\x34\xf4\x42\xfb\x05\xde\x18\xfb\x04\x08\x6f\xe4\x06\x00\x09\x0c\x01\x51\x40\x98\x8c\xb4\xea\xe6\xe2\x82\xd8\x78\x74\x17\x93\xee\xd8\x30\xc6\xe2\xed\x36\xb4\x3e\x9d\x46\xca\xbf\x3b\x93\xe3\xe2\xd1\x0f\x3f\xd7\x4f\x4d\x1e\xd5\x52\x10\x4b\xb7\xc0\xf9\xd1\x77\x94\x15\x16\x83\x1c\x0d\xc6\x07\xdf\x9a\x4d\x58\x3b\x6e\xc1\xdf\x3a\x31\x0c\x1d\x54\x15\x3c\xbc\xd5\x96\x92\xbe\x63\xe4\xed\x90\xbe\x5f\x17\x54\x6d\xff\x8b\x78\x93\x09\xd2\x50\x8f\xad\x45\x4e\x9a\x01\xa1\xdc\xb5\xd5\x24\x05\x2d\x01\xd2\x1d\x57\xf8\x1b\x55\x6e\x29\xf8\xfa\x4d\xc1\xd7\xf1\x95\xda\x40\xea\x05\x37\x62\x27\x3b\x21\x50\x74\x12\xe7\x09\xcd\xbe\xd9\xcc\xe7\x19\xdc\x17\x3b\xee\xcc\x4f\x35\x3b\x0e\x9a\x0f\x9e\x2a\xa8\xde\x28\x18\x69\x3a\xd9\x0d\x8a\x46\x84\xd4\x40\x06\x49\xc0\x7f\x38\x90\x6b\x70\x7e\x27\x6b\xc1\xdf\x80\x10\xbe\xe7\xd0\x80\xd5\xdc\x1e\x89\xb8\xb8\xa2\x70\x1d\x53\x16\x89\xb6\x02\xe4\x39\x2a\xa8\x9d\x08\x6e\x96\x2c\x59\xee\x9e\x08\xc6\x3d\x3a\x9c\x6f\x84\xe0\xf9\x44\x90\x71\x74\xe4\x7f\x1e\x47\x27\xf6\x13\x0e\x0f\x47\x08\x61\xf0\x0f\x96\x88\x22\xfb\x3d\xbd\xed\xf5\xc6\xe6\x5c\x71\x2c\x8f\x11\xb2\xae\xbf\xc8\x06\xf1\xbc\xd5\x37\xe0\x30\x4e\x53\xa0\xf8\x5e\xb2\x52\xc8\xed\x1c\xed\x06\xc1\x59\xbf\xeb\xf9\x69\x35\xce\xd5\x21\x15\xaa\x7d\x85\x01\xcf\x83\x3e\x58\xf7\xf6\x54\xee\xe8\xf0\xbd\xba\x9e\x06\xd7\xe0\xde\x97\xdc\xe9\xce\xc3\x62\x2a\x66\xdb\x2d\xfc\xf9\xfe\xda\x50\x55\xe1\xdf\xc9\x3d\xc3\xf5\xf6\xef\x77\xec\x19\xd9\xa2\x64\x27\xd8\x8f\xa9\xb0\xfc\x8a\x7c\x02\x4e\xc4\x35\x49\x34\x9a\x18\xc3\x52\x28\xfa\x1d\x8b\x8a\xed\xf6\x77\x0c\x3a\xe9\x37\xd0\x49\x8b\x45\x7b\x2f\x29\x36\x67\xb3\xa3\x5a\x42\x5b\xfa\x4a\xf9\xf2\x32\x7d\xe5\x7d\x35\xfa\xaa\xe3\xb6\x4a\xdd\xcc\xae\xc2\x0a\xe7\xcc\x37\x94\x04\x4e\x6b\x40\x1c\x97\xe4\xe8\xae\xb0\xde\x0f\xf0\xd8\xb2\xdd\xf1\x1f\x64\x63\x4a\x76\x95\xc7\x59\xab\xf3\x37\x53\xbe\x72\x5f\x68\x4e\xbd\x1e\x27\xe6\x49\x51\xc4\xb7\xde\xbe\x0b\x5d\xa6\x36\x5d\xcb\x33\xc5\x47\xa8\xcd\xa5\x0e\x30\x44\x14\x9f\x55\x99\xf2\x42\x15\xfe\x33\xd3\x16\x13\xcc\x38\xfe\x95\xb5\x81\x33\xae\x83\xa3\xc6\x18\xb3\x2f\x85\xe6\xe0\x67\x31\x29\xc8\xcf\x62\x98\xca\xd3\x0b\x4d\x9f\xc6\x59\x36\x8f\x93\x8f\x65\xf4\x67\x36\x29\xc8\x9f\x59\x14\xca\xa7\x3c\x32\x97\x54\x48\xd2\x94\x6f\x44\xf8\x3d\xc3\x23\x4f\xdf\x5e\xc9\x1e\xe7\xbe\x2f\x1b\xcd\xda\x8a\xc3\x7c\xca\x67\xa8\x6e\x45\xa5\x8d\xdb\x4c\xfd\xe6\xb3\x1a\x4e\xff\x9e\xd9\x4b\xf2\x3f\xb3\x03\xdb\x2d\xfb\xdd\x07\xd2\xa9\x98\xf9\xb6\xd8\x29\xaf\x4b\xb4\xec\xa8\x0a\xaa\xb5\x7f\x07\xe6\xea\x05\xae\x63\xe8\x1d\x81\xcb\x26\x42\x94\x68\xb5\x42\x18\xc8\xed\x5c\x92\xca\xa0\x15\x08\x1e\xa1\x7e\x62\xa1\x00\xea\x39\xe1\x29\x5d\x81\x99\xdd\x17\xe0\x59\xdd\xb3\x92\xcc\x7d\xec\xd6\xbe\x30\x87\x09\x28\xae\x3c\x49\x04\xbb\x66\xe2\x56\x79\xc5\xf3\x98\xb2\x5a\x34\xa8\x9e\xea\x3b\x1f\x77\xdc\x97\x40\x62\x8f\x36\x75\x41\xed\x3a\x38\x07\x31\x79\x24\x0f\x04\x30\xa2\xf0\xe5\xe0\xcf\x79\xed\x24\xab\x66\x25\xb2\x98\xc3\x25\x2c\xb8\xd9\x10\xcd\x8c\xe4\x4d\x27\x8b\x7f\x61\x56\x82\x09\x55\xb8\x96\xb4\x81\x63\xd0\xdd\x6f\xfc\xb4\x80\x8c\x18\x27\xc7\x23\xcc\x39\x79\x3b\x7c\x13\x97\x25\xb9\x13\xfc\xad\x76\x49\xd0\xbc\xd4\xf0\xcc\x1e\x43\xda\xa0\xaa\x70\xcc\xc9\x9d\xba\xf2\x8e\xe4\x1e\x5c\x72\x72\x67\x54\xf8\xbe\x5e\xf1\x4d\x49\x83\x0a\x6f\xbc\xc0\xbe\x44\x63\x81\xb7\xa9\x65\xdc\xcc\x10\x96\x2a\xd3\x1f\x19\xf7\xd7\x5f\xc3\x63\x10\xba\x03\xc1\x25\xb3\xa2\x74\x46\xa7\x04\xeb\xad\x36\x81\xa9\xb6\x4a\x9d\xc8\xd6\x25\x7c\x93\x8b\xa7\x3c\xdb\xac\x9a\xdb\x93\xf2\x36\x67\x77\x45\x39\x82\xea\x64\x42\xe3\x42\x12\xd5\xd3\xbf\x5d\x96\x97\x9b\xd1\x28\x1e\xcd\x80\xa4\x86\x48\x63\xef\xc7\x2d\x66\x30\xb6\x1d\x13\xb6\xdd\x8e\x8c\x63\x91\x92\x50\x25\x31\xf8\x7a\x11\x06\x97\x22\xd0\xd2\xf7\xe5\xc5\x68\xbb\x2d\x1f\x3b\x57\xcd\x71\x3f\x14\x03\x8e\x0e\xe2\x3e\x29\x07\x1c\xc7\x7d\x92\x0f\xe2\xaf\x72\xcc\x49\xd9\x1f\x57\x15\x5e\xc8\x06\x2c\x58\x9e\xb6\xc2\xdf\x3c\xf9\xd8\xea\x79\xb3\xfa\x02\x81\x6b\x6b\x0e\x3c\x15\x5a\x73\x49\x12\x13\x3e\x50\x32\x25\x84\x38\x2f\xee\xac\x1f\x7b\x60\x16\x7d\x7b\xf8\x8c\xb1\x18\x28\x1f\x77\xac\x2f\x73\xe2\x82\xf0\xfe\x18\xcb\xaf\x7c\xc0\xbe\xca\xd1\xe3\x9a\x23\x6a\xbc\xe4\x64\x1a\x04\xde\xf6\xba\xe6\x96\xe3\xb5\xe4\x56\xe9\x9f\x9e\xa3\xa5\x36\x08\xb5\xe2\xe1\x92\xa3\x3e\x5c\xe6\xe9\x82\x96\x7c\x4a\xbd\x2b\x0e\x60\x8d\x59\x7a\x68\xea\x34\x94\x66\x30\xb3\x6f\x79\x93\xf6\x03\x41\xfc\xd0\x27\xa9\xae\x79\xdb\xb5\x7d\xed\x14\x0b\xe2\xb7\xf9\xcc\x73\xac\x6d\x84\x6a\x07\x1e\xa3\xf1\x6a\xa7\xa0\xe9\xac\x69\x39\xa7\xe8\xf7\x51\x3e\x2d\x66\x44\x09\xef\xe2\x56\x07\x8a\x73\xb9\x1e\xbc\x3b\x35\xee\xed\x5e\xd6\x39\xdd\xfc\x03\x4d\x8c\xfd\xc7\x49\x4e\x6a\xdf\x21\x45\x51\x38\xf7\xd6\x10\xa1\x38\x87\x8b\xec\x39\x07\xdd\xb7\x1b\x0e\x2e\x51\x7c\xf6\xe3\x0d\xdf\x99\x49\x70\xa3\x05\x47\xf4\xbb\x0a\x61\x8a\xba\x3b\x57\xa5\x05\xd2\xaa\x8a\xb9\x92\x09\xdc\x89\x04\xa4\x47\x6a\xbe\xc3\x3d\x02\xf5\xb9\x87\xc2\xbf\x68\xd7\x1d\xdb\x52\xf6\x5f\xb7\x2a\x2e\x31\xaa\xaa\x74\xb2\x67\xf8\x19\xcf\x41\x85\x95\x8c\xb0\x17\xf4\x3c\x4f\x09\x1d\x5e\x4b\xc2\xdc\x58\x11\x8a\xc0\xf6\x62\xbd\x10\x51\xdc\xfa\xf3\x28\x81\x43\xb7\x40\x77\x95\x96\xaf\xf9\xc4\xc9\xe1\x54\xa2\x8a\x74\x71\xb9\x19\x3d\x78\x74\x2a\x9f\x67\xa3\x81\xfc\x5b\x9c\x5c\x6e\x46\x0f\x47\xf0\xf1\x70\xb1\xb8\xdc\x1c\x8f\x4e\xe4\xc7\xf1\xe8\x0c\x3e\x62\xf5\x01\x31\x27\x90\xec\x24\x9d\x3f\xb8\xdc\x9c\x50\xf8\x38\x5b\x24\xc9\xe5\x26\x4e\xe0\x23\x3d\x8d\x17\xb3\x43\xfc\x56\xa2\x05\x56\xfe\x89\x17\xe9\xd3\xa5\xef\x1a\xcb\x2e\x8b\xc3\xcb\x1b\x6b\x68\x7f\xbb\xa5\x8f\x83\xff\xf1\xdf\x03\x38\xa3\x0b\xfe\xd3\x7a\x4d\x8b\xa7\x71\x49\x43\xa4\x64\x79\x5e\xf2\x1b\x13\xb0\xdd\x7e\xe2\xd6\x3e\xbf\xb7\x5c\x5e\xf3\x06\x03\xb6\xdb\x0d\xc5\xb0\xe4\x9b\x22\xf1\x31\xcd\xe5\x4d\xa0\xb8\x0c\x6f\xe5\x18\xc3\x56\xae\x0b\x8b\x20\xc4\xbb\xa7\xe2\xb5\x6b\x1a\x39\xe9\xc0\x6c\xd0\xce\x64\x13\xa8\xd7\x93\x04\x8a\x13\xdf\xb6\x32\xbc\x32\xe7\x47\x8e\x7f\xd0\x7d\x7f\xac\xba\xf8\xf8\xa1\x1c\x82\x93\x47\xc7\x03\xf8\x3b\x83\x91\x18\xc3\x48\xcc\x53\x78\xc2\x10\x25\x63\x78\x1e\xc1\xf3\x04\x9e\x0f\xe0\x29\x87\xee\xe1\x58\x8d\xd6\x38\x96\xcf\x93\x39\x7c\x3c\xa0\xf2\x79\x3a\x92\xcf\xf4\x21\x04\xa5\x09\x3c\x29\x7c\x50\x18\x67\x0a\xf9\xe9\x23\x78\xc6\x2a\x42\x56\x7b\x3a\x96\x15\x9e\x1e\x43\xc1\xa7\x27\xb2\xe0\xd3\x18\x4a\x39\x9d\xcb\x22\x4f\x29\xd4\x72\xba\x38\xbe\xdc\x8c\x1e\x8d\x21\xe6\xd1\xf8\x0c\x9e\x10\xf3\xe8\x08\x62\x8e\x1e\xa8\x8f\x53\x78\x9e\xa9\x0f\x59\xc1\x99\x6a\xfe\xd9\x48\x36\xe9\xec\x58\x42\x76\x76\x02\xed\x3e\x3b\x79\x04\x4f\x48\xf5\x40\x05\x3d\x90\x8d\x3d\x7b\x08\x69\x1f\xca\x82\xcf\x1e\x49\xf8\xce\xe6\x90\x6f\x2e\x9b\x7a\x96\xa8\xa4\xd0\x3b\x67\x09\xe4\x4e\x65\xb5\x67\x14\xb2\x51\x99\x2d\x1e\x8d\xe1\x29\x43\x62\xa8\x34\x3e\x81\x90\x13\x08\x39\x39\x85\xe7\x23\x78\x42\x33\x62\x00\x23\x7e\x00\x89\xa0\x33\xe3\x53\xf5\x2e\x21\x8a\x01\x8a\xf8\x11\x64\x06\x58\x62\x05\x45\x0c\xa3\x13\xc3\xe8\xc4\x09\x94\x07\x10\xc5\x00\x4b\x0c\xb0\xcc\x01\x96\x39\x40\x31\x3f\xa6\xf0\x94\x63\x3d\x57\xdd\x30\x3f\x39\x81\xa7\xcc\x36\x7f\xf0\x10\x9e\xb2\xb8\x39\xf4\xc2\x1c\x7a\x61\x0e\x35\xcf\xa1\xfd\xf3\x64\x04\x4f\x48\x0f\x0d\x4f\x8e\x61\xa4\x93\x93\x11\x3c\x1f\xaa\x8f\x47\xf0\x8c\xd5\x87\x4c\x9c\x40\xe7\x26\x50\x45\x02\x85\x27\x50\x78\x02\x0d\x4a\x60\xfe\x25\x30\xf3\x92\x04\xd2\x24\x10\x0e\x15\x25\x29\xe4\x4d\x21\x1c\xda\x96\x40\xdb\x52\x68\x4f\xaa\x5a\x92\x42\x4b\x52\xa8\x2c\x85\x36\xa4\x50\x4d\x0a\xd5\xa4\x49\x0c\x4f\x59\x4d\x9a\x1e\x41\x86\x14\x32\x40\xa9\x29\xa0\x28\x7a\x3c\x86\xe7\xc9\x00\xfe\x64\x0e\x7a\x72\x0a\x1f\x27\xb2\x26\x3a\x87\xf8\xb9\x8a\x9f\x9f\xc1\x73\x0e\x4f\x09\x2c\x4d\x1e\x41\x04\xc0\xbc\x18\x3f\x82\xa7\x4c\xb4\x38\x7e\x00\xcf\x53\x78\x42\xc8\x29\xc0\xbc\x38\x95\xc5\x2e\x1e\xc1\x24\x5d\x3c\x3a\x81\xe7\x43\x78\x42\x5a\x85\x2c\x17\x67\xea\x03\xe6\xf5\x02\xaa\x5a\xc8\x3e\x1a\x8f\x8e\xd2\x81\xfc\x3b\x1e\xc1\xf3\x48\x7d\x9c\xc2\xf3\x0c\x9e\x31\x3c\x53\x78\x52\xf9\x7c\xf0\x08\x9e\x10\xfb\x80\x42\x86\x87\x90\x1b\x00\x1a\x8f\x4e\x4f\xe4\x53\x0e\xf8\x78\xf4\xe8\x01\x3c\xa1\xa6\x47\x50\xc6\x99\x7c\x1e\x3f\x58\x5c\x6e\xc6\xa7\x63\xa8\xee\x74\x2c\x33\x9c\xaa\xba\x4f\x8f\xe1\xe3\xc1\x11\x3c\x8f\xe5\xf3\x14\xde\x4f\xe1\x7d\x7e\x0a\x89\x24\xc2\x19\x9f\x42\x03\x4e\x93\x33\x08\x4a\x21\x3e\x95\x11\x8f\x46\x72\x45\x8c\x1f\x8d\xe0\x23\x96\x80\x9e\x1d\xc9\x6e\x18\x9f\x1d\x1d\xc1\xf3\x14\x9e\xb2\x1d\x67\xc7\x10\x72\x0c\x85\x9c\x1d\xcf\x2f\x37\xe3\x78\x7c\x0a\x4f\x19\x1d\xcb\xc9\x36\x8e\x1f\xc8\x51\x19\xc7\x12\x53\x8d\x63\x68\x6c\x2c\x27\xc6\x38\x7e\xf8\x00\x22\x1e\x26\xf2\x79\x7a\x0c\x1f\xa7\xea\x43\xb6\x70\x0e\xb8\x63\x3c\x1f\x49\xe0\xe6\xd0\xb4\xf9\xf1\x43\x08\x82\x7e\x85\x35\x35\x9e\xcb\x35\x3d\x9e\x3f\x04\xa8\xe7\xd0\xd0\xf9\xa3\x11\x3c\xc7\xf2\x19\x43\xcf\xcc\xe3\x07\xf0\x7c\x04\x4f\xd9\xa8\xe4\x28\x91\x11\xc9\xf1\x31\x3c\x1f\xc2\x53\xc2\x9e\xa4\x50\x6d\x92\x1e\xc1\xf3\x04\x3e\xe8\x08\x9e\x47\xea\xe3\x11\x3c\x65\x07\xa5\x09\x24\x4e\xa9\xcc\x9f\x2e\x60\x3a\xa4\x72\xd3\x3c\x1a\x8d\x12\x78\xa6\xf2\x09\x45\x1e\x8d\x16\xa3\xcb\xcd\x51\x42\x17\xf2\x23\x59\x8c\x2f\x37\x47\x29\x85\x98\x54\xed\xc0\x47\x31\x6c\xba\x47\xf0\x71\x76\x06\xcf\xf8\x72\x13\x3f\x7c\x28\xb3\xc4\x0f\xe5\x60\xc6\x0f\x65\x17\xc5\x0f\x4f\x53\xf9\x94\x25\xc6\x0f\x65\x51\xf1\x23\x89\xee\xe2\x47\xa3\x87\xf0\x9c\xcb\xe7\xd1\x03\x78\x42\x88\x44\x98\xf1\x23\xa8\x2e\x7e\x04\x19\xce\x8e\x64\x67\xc6\x67\x12\x51\xc7\x67\xb0\xce\xe2\xb3\x07\x10\x03\x0b\x22\x3e\x93\xd3\x30\x3e\x9b\x1f\xc3\x53\x25\x96\x8b\x2e\x06\x84\x1c\xc7\x80\xe8\xe3\xf8\x88\xca\xa7\x5c\xba\x71\x2c\x27\x44\x1c\xcb\xe5\x16\xc7\xb2\x4f\xe3\xf8\xe4\x18\x9e\x90\x41\xee\x29\x71\x3c\x3f\x82\x6c\xf3\x13\x78\x9e\xc2\xf3\x11\x3c\xa1\x20\x89\x89\xe2\x58\xee\x84\xf1\x9c\x3e\x80\xe7\x23\x78\xa6\x97\x9b\x54\x13\x1c\x0b\xd9\x5f\x8b\xf9\x98\x5e\x6e\x16\x8a\x20\x59\xd0\x91\x0c\xa2\x47\xea\x43\xb6\x79\xb1\x38\xa3\xf0\x5c\xcc\x0e\x1d\xd1\xf0\xae\x46\xa6\xc3\xd5\xae\x3c\x48\xc2\xf5\xee\x63\x72\xfa\xf0\x51\xaf\xf7\x83\xa5\x36\xbc\xab\x7b\xde\xbc\x29\xdb\x63\xf8\x5c\xd9\x9a\xca\xc1\x3d\xaf\x73\x1f\x92\x83\x4e\x50\xa8\xdd\x3b\x0d\x93\xb2\x7c\x47\x3f\x09\x52\xa0\x5d\x93\x47\x02\xb1\xfb\x0c\xac\x5b\xef\x02\x02\x79\xfc\x76\x54\xe7\xe2\x88\x9a\x47\xe2\x5a\x71\x02\x14\x95\x77\xaf\x54\x7e\xac\xd3\x3e\x46\xda\x46\x56\x65\xef\x11\xc4\xe3\xd1\xf9\x60\x20\x2c\x03\x50\x95\xa8\x6f\xfe\xe0\x03\xb5\x38\xda\x7e\x53\x27\xd3\xa0\xa2\x3a\x48\xa8\xfa\xc8\x9b\xfd\x09\xc6\x6f\x26\xfb\xf4\xcf\xda\x12\x3b\x11\x24\x30\x39\xff\x3c\x4f\xc3\x62\xbb\xa5\xca\xbc\x5d\x49\x05\x10\xda\xca\xcb\x37\xab\xf6\x98\xd5\xa9\xf9\xc0\xf5\x7a\xdc\x54\x20\x49\xee\x62\x28\xdb\xfe\x8e\xeb\x11\x97\xd1\xa1\xef\x3a\xd6\x50\xe2\x7f\xe1\xb6\xcd\x85\xb9\xc3\x72\x0e\xa0\xc3\xee\x08\xdc\x15\xf1\x6b\x2a\x21\x0d\xe4\x44\x8c\x13\x01\x66\xf1\x4d\x84\x82\xd8\x8f\x12\x08\x17\x8a\x8b\xf0\x4a\x71\x11\x72\x11\xb3\xbc\x6c\x30\x25\xd8\x22\x3c\xf6\xb5\xb0\x80\x49\x20\x7c\x10\xb5\x2d\x7d\x99\xd7\x79\xd8\x34\x21\xa1\x40\x07\x29\x07\x2b\xbe\xe3\x96\x62\x96\xbc\x14\x08\x0b\x42\xa8\x33\x9f\xa9\x84\xa9\x1a\x95\x78\xa4\xfa\x07\x5e\x53\xf1\xb6\xdd\x1c\x27\x82\x5d\x9b\xb5\x73\x0e\x6a\x3e\x05\xe7\xc2\xfc\x37\xe2\x11\x25\x6d\xe1\x2d\x73\xee\x85\xbf\xca\x6b\xde\x4a\xff\xb6\xbd\xbc\x2c\x51\xd0\xa7\xda\x55\xa9\xfc\xba\xbc\x2c\xbf\x0e\x50\x05\x9e\x38\xc6\xe3\x5e\x2f\xfc\x50\xf3\x2d\x06\x83\xae\x8a\x6a\x07\x7c\x77\xc0\x6b\xf3\xc8\x9c\xc7\x9e\xc9\x21\x2b\x56\xca\xeb\x4f\x1b\x77\xba\xe6\x02\x88\xbc\xe0\xa1\x40\xca\x65\x8e\x72\x19\xea\x49\x82\x29\x4e\x7e\xa1\xb5\x45\x0b\xdf\xa3\x2b\xf5\xd1\x8e\xbd\xcf\x2e\xac\xd6\x28\x9b\x14\xd3\xf1\xac\xcf\xa2\x00\x7c\x6a\xbf\x94\x40\xc5\x69\xfa\x45\x50\x1d\x28\x98\x00\x3b\xe6\x48\x71\x25\x4d\x5c\x9f\x84\xb9\xd5\x3e\x15\xfe\xe0\x7f\xbb\xc3\x8d\xa0\x9e\x6c\x74\x9b\x99\x90\x7c\x5a\xcc\x7a\xbd\xee\x0b\x0e\x5a\x4e\xc6\x95\x2c\x30\xbb\x8c\x13\xd9\xf6\x63\xfc\xcf\x5c\x4b\x06\xd4\x17\xf2\x15\x15\x7a\xa8\xca\x6f\x6e\x9f\x5a\xef\x04\x0e\xdb\x7d\x49\xf2\xd0\xe3\x38\x06\x08\xdf\xaf\x53\x31\x74\x69\x0f\x8a\x5e\x8f\x86\x85\xe6\x70\x7e\xc7\x89\xd6\xf6\xfd\x86\xe3\x9f\x38\xfe\x07\x6f\x38\x5a\x57\xfe\x60\xea\x8a\xc1\x94\x18\x5f\xd6\xa6\xd1\x41\x5a\xc4\x57\x57\xf1\x3c\xa3\x81\x3c\xa5\x6e\xb7\x10\xf0\xac\xe0\x6b\xf8\xae\x42\x4f\x86\xfb\x4f\xbc\x26\x39\xfa\x0d\x37\x8c\x0e\xcf\xc5\xcf\xff\xf3\xdf\xff\x8f\x00\x1d\x00\xaa\xf6\x3c\xc7\x08\xbc\x6f\xf7\x09\x3e\x05\x68\x86\x10\x1e\x75\x89\x8f\xff\x6b\x6e\xb3\x7b\xbd\xf0\x1b\x4e\x84\xef\xef\xfb\x82\x8c\x41\x6c\xcb\x4b\xf5\xf8\xa8\xd7\xeb\xaa\x56\x3f\x42\xa8\x52\x13\xe4\x1b\x3e\x69\x02\x17\x79\x01\xff\xe3\xff\xd4\x2e\xf3\x02\xad\x59\x1c\x75\x58\x0e\xe6\xd3\xe7\x19\x4f\x3e\x9e\x77\xb4\xf7\xf0\xf1\xfa\xd3\x79\x47\x3b\x24\xd7\xde\xf4\x06\xe3\xf5\xa7\xc0\xf3\x0c\xbc\xcf\x7b\x52\x50\x63\x49\xfd\x91\xd7\x1c\xad\xff\x64\x14\xb7\x3b\x3f\x71\xad\xca\x04\x5d\xb7\xb7\xb7\x9e\xfc\xdf\xff\xd7\x93\x00\xc9\x49\xf3\x91\x83\x2b\x87\x31\x92\xb3\xec\x1b\xbe\x01\x9b\x19\x4f\xc1\xa3\xf9\x8f\xc0\xc7\x51\x0e\x9d\xb7\x5b\xb9\x20\x16\x82\x90\x7c\x58\x78\x3e\xdd\xf5\x84\x28\x54\x39\x63\x7c\xb4\xbf\x1c\x0b\x21\x29\x54\x11\x03\x5d\xd4\xc5\xb1\xba\x1d\xe5\xf8\x77\x72\xf1\x3b\x1d\x0c\x72\xdc\x25\xc1\x65\x7e\x99\xcf\x8d\xf2\xc2\xe1\x65\x7e\x68\x2e\x02\x26\x3e\x43\xa7\x2e\xcb\x0a\xdc\x45\xcb\x59\x14\x17\xa4\x38\x77\xa2\x7f\x8e\x13\x93\xcb\x0d\x0c\x78\xbe\x0c\x8c\xfb\xd4\x79\xbe\xdc\x8a\xdf\x08\xed\x72\x8a\x1a\xc9\x3b\x36\x18\xa3\x09\x1b\x8c\x23\x86\xb0\x55\x92\x7f\xad\x9c\x59\xc9\x02\xbb\x24\x9e\x84\xfa\x6e\x83\x7b\x66\x60\x11\x16\x7d\x12\xf7\xc7\x28\xb2\xb1\x72\xe7\x62\xfd\xb1\x27\x08\xdc\x6a\x41\xc3\xb6\xbf\xb8\xcc\x27\x5b\xd9\x0b\x15\xfe\x3d\x27\x37\x2c\x4f\xf9\xcd\xd0\x37\x89\x34\x69\xb2\xe4\x5c\x11\x35\x16\x5f\x97\xd4\x39\x7c\x3b\x9b\x46\x77\x5c\xd5\x61\x91\x85\x59\x21\xda\x9b\x9c\x16\xc6\xed\x9a\x2b\xa7\x4e\xff\x78\x45\x1a\xa5\xf2\xb0\x2b\x40\xf2\x0b\x76\x65\x43\xa3\xa2\x2e\xa1\xa8\xd7\x1b\x75\x89\x18\x26\x7c\x25\x23\x9f\xe7\xe9\x1b\xce\x72\x51\x86\x01\x40\xfb\x8e\x3f\xcf\xd3\x00\xee\x70\x7e\xc3\x49\xc0\xf3\x84\xaf\x6f\x03\x96\x87\x7f\xe1\x0e\x17\xc9\x1d\xe0\x2f\xbc\xb1\x84\x74\x52\x1c\x28\x08\xce\x03\x84\x03\xd3\x2a\x47\xe5\xfe\x85\x0f\x55\x42\x84\xff\xc0\x9d\xa3\xf7\x3f\x73\xfc\x57\x39\x27\x3f\xd2\x5b\x89\x72\x4b\x72\x77\x1c\x05\xcf\x73\xa0\x7d\x1e\x45\xc1\x37\x71\xf2\xb1\x5c\xc7\x09\x0d\xf0\x59\x14\xbc\x8b\xe7\x01\x1e\xbb\x04\xe3\x87\x51\xf0\x76\xc9\x16\x22\xc0\xe3\xd3\x28\x78\x2a\x8a\x2c\xc0\xe3\x47\x51\xf0\x24\x93\x41\x67\x51\xf0\x26\xde\x94\x34\xc0\x47\xa3\x28\x78\x1a\xaf\xcb\x97\x3c\xf9\x18\xe0\xa3\xd3\x28\x78\x5e\x26\x01\x3e\x3e\x8a\x82\xb7\xaa\xf4\xe3\x63\x99\xf8\x8a\xfe\xb4\x0e\xf0\xf1\x89\x7a\x7f\xc6\x6f\xf2\x00\x1f\x3f\x90\xf5\xa5\x01\x3e\x7e\x18\x05\xdf\xf1\x95\x4c\x7c\x1a\x05\x2f\xa9\xac\xf6\xf8\x51\x14\x40\x96\xb3\x28\xf8\x51\x2e\xb5\x00\x9f\x8c\xa2\x40\xe5\x3c\x91\xe5\x14\x2c\x17\x6f\x93\x42\x7e\x3e\x88\x82\x17\xa0\x4b\x14\xe0\x93\x87\x51\xf0\x4c\xd9\x6e\xc7\x0f\xce\xa2\xe0\x3c\xc0\x0f\xc7\x51\x40\x02\x7c\x36\x8e\x82\x1f\x78\x1a\xe0\xb3\x23\xf3\x72\xac\x5f\xc6\xa3\x87\x51\xf0\xb5\xfc\x3f\x85\xa4\xe3\xd1\x59\x14\x0c\x02\x3c\x1e\x8f\xa2\x60\x28\xff\xc7\x51\x70\x18\xe0\xb1\x6c\xa0\x29\x7d\x7c\x7a\xac\x12\x3d\x7a\x08\xd5\x8c\x1f\xe9\xcc\x8f\x1e\x45\x01\x96\xff\xba\x90\x33\x5d\xc8\x99\x2e\x44\xd6\xff\xf7\x00\x1f\xc9\x6e\x9c\x06\xf8\x48\xf6\xe1\xe5\xa5\x7c\x19\x47\xc1\x4c\xfe\x1f\x45\xc1\x6f\x03\xfc\xf0\xf8\x48\xf6\xa3\xec\x05\xf9\x7a\x6c\x5a\x2f\x3f\x4e\x4c\x3f\xc9\x8f\x07\xb6\x8b\x1e\x1e\x1f\x9d\x1e\x39\x10\xe5\xe7\xb1\xe9\x5b\xf9\x61\x7a\x5c\xbe\x3f\x74\xe3\x22\x3f\x4f\xfd\xa1\x79\x78\x7c\x3c\x3a\xb2\x9d\xea\x11\x20\xdf\xd7\xcf\x7c\x19\xbd\xa6\xd9\x57\x47\x13\x3a\x14\x3c\x52\x5a\xa4\xde\x3d\x73\xbc\x27\x2d\xc8\xc2\xc9\x2c\xde\xbd\x6f\xec\x2e\x0d\x40\xe6\xdd\x89\x08\x7e\xcf\x43\x31\x1d\xcd\x50\xe4\xdd\x9e\xe6\xfb\x93\xd3\x38\x04\xf1\x4d\x14\xd5\x54\x8d\xbd\x9b\xd7\xd8\x27\xc9\x6e\x94\x8c\x53\x02\xe7\x01\xf2\x6d\x21\x09\xc4\xa2\x4b\x94\x64\xcc\x6b\x16\x16\xc8\x38\x4d\xf9\x41\x7e\x60\x4e\xd8\x84\x29\x22\x51\x35\x27\x8f\xc3\x02\x45\x02\x9e\x23\x03\xc6\x5a\x62\x5e\xee\x1d\x7a\x59\xad\x52\x05\x82\xf6\x63\x52\x38\x18\x72\x1d\xa4\x2b\x53\x66\x51\xb6\xdb\x11\x21\xae\xca\xba\xad\x7a\x30\xbc\x51\x68\xef\x16\xfa\x5a\xf3\xf2\xed\x21\x92\xc8\x5d\x55\xe0\x74\x7b\xc4\x30\x59\x5e\x10\xae\x5e\x3c\x48\x55\x3c\x8e\x27\xa3\x88\x7b\xc8\xdc\xc2\xce\xe3\x86\xc0\x8c\x85\xc5\xf6\x3a\xc8\x96\xe7\x5d\x52\xf4\x7a\xe2\xc2\xcb\x1a\xeb\x66\xff\x99\xd7\xa5\x14\xf2\xcf\x39\x9f\x00\x23\xd3\x60\xc5\x41\xf4\x7a\x60\xb3\xc1\xdd\x3a\xba\x48\x42\x84\xb2\xe8\x40\x88\xf0\x68\x8a\xdc\x24\x05\xc8\x99\x82\x15\x83\xd4\xaa\xea\xc2\x89\xce\xdf\x05\xa3\x10\xbd\x5e\x28\xe1\x43\xb8\x40\x51\x4b\x44\x81\x70\x8e\x0e\x72\x52\x54\x2d\x7d\x53\xc6\x75\xab\xd5\x85\x55\xdb\xef\xe7\xf2\xe4\x07\x8a\x47\xfa\x48\xf7\x78\xd4\xeb\xbd\xe3\x5a\x41\xc3\xec\xc7\x02\xa1\x36\xea\x7b\x13\x37\xcf\xe9\x6a\x9a\xfb\x86\x72\x3a\x99\x4b\xe4\x5d\x57\xc7\xb1\x32\xd4\x18\x13\x36\xe5\x33\x5c\x12\x0d\x63\x6c\xa7\xec\x20\x8f\x64\x1e\xed\x68\xaa\x7c\x1c\x6b\x9d\xf0\xf2\x22\x76\xde\xab\x3a\x60\x4f\xa1\x24\x24\xd6\x56\x35\xe0\xd5\x45\x43\x35\x25\x22\x84\x4f\xca\x28\x7f\x3c\x22\x24\x84\x1a\xfb\x24\x9f\x21\x5b\x95\xcc\xa1\x6d\xea\x01\xec\x5e\x9a\x9a\xbc\x71\x49\xa0\x08\x07\x23\x00\x2d\x73\xe3\xc1\x58\x0e\x8c\xfe\x06\xf9\x59\x19\xe0\x3b\xf1\xdb\xe9\x2b\xd9\xf9\xd6\x17\xdd\x39\x6b\xed\x78\x86\xd0\x39\x62\x7d\x6b\x49\xa9\xc3\x2e\x46\xdb\x2d\x7b\x5c\xc3\x1a\x13\x10\x4a\x66\x95\x6f\xde\xcd\x9d\xbd\x47\xe7\xf4\x62\x3c\x3a\xa7\xfd\x3e\xfa\x2b\x9f\xd2\xfe\xc9\xa3\x19\x81\x97\xb3\x87\x33\xa2\x84\x2d\x42\x2d\xaf\x4f\xc9\xc3\x07\xe7\xf4\x82\x9c\xb9\xe4\x26\x09\xb4\xe9\xa9\x66\x9e\xb9\xf4\x63\x99\x7c\x7c\xe4\x4a\x1f\x8f\xc7\xba\x78\xc0\xf9\x33\x12\x7c\x1b\xf4\x69\x85\x42\x85\xa0\x92\x98\xec\x18\xd1\x08\xe6\xe6\x27\x4a\x71\x53\xce\x6b\xbf\xb2\x2c\xc5\xcd\xab\x57\x5f\x7d\xf5\xd5\x2b\xf8\xe1\x57\xf8\xd5\xd8\xfe\x54\xd8\xab\x97\x7b\x7f\x5f\x12\xaf\x2b\x9a\xef\xfd\x61\x59\x3d\xd4\xaf\xca\xfb\xea\xab\xf1\x18\x5e\xc7\x2f\xef\x2b\xfe\x9e\x6a\x55\x7c\x80\x05\x09\x0a\xef\x87\x8b\x57\xaf\x56\xf0\x2b\xfe\x99\xdf\xaa\xf6\xd3\x81\xb9\xfd\x7d\x95\xe7\x32\xd1\x3f\x55\xf4\xbf\x06\x0a\xfc\xa0\x65\x81\x36\xd7\x01\x77\xa5\x7b\xef\xa6\x47\xa7\xea\xe3\x51\x9c\xcc\x0e\x71\x41\x0e\xa7\x72\x12\xcc\x0e\x31\x23\x87\xd3\x97\x3f\x16\xb3\x43\xcc\xe5\xdb\x7c\x9c\xcf\x0e\x71\x4c\x0e\xa7\xf2\xc5\xed\xff\x65\xcd\xf3\x06\x2c\x56\xe3\xd6\x08\x10\xb2\x36\xf9\x20\x38\xc9\xab\xe6\xa5\xbe\x72\xaf\xdc\xcd\x15\x0f\x62\xe3\xd9\x38\xb3\xae\x45\x71\x42\x36\xc6\x8f\xc7\x42\x9e\x85\x96\x64\x74\xbe\xbc\x48\xce\xfb\xfd\x25\x5a\xa8\x73\xc7\x15\x09\x33\xb2\xf1\xd9\xcd\x4b\x84\x2e\xc8\xd1\xc9\xe9\xc4\x9e\x72\x32\x14\x8d\x4f\x8e\x4e\x2e\x48\xd6\xeb\x65\x17\x64\xfc\xe0\xe8\x64\x12\xfc\x18\x44\xe3\x07\xc7\x0f\x6d\xe0\xe9\xe9\xf1\xc4\xa2\x83\x6c\x20\xe3\x50\x34\x3e\x3d\xb5\xd9\x8e\x8e\x8e\x46\x93\xa0\x08\xa2\x47\xe3\xb3\x23\x13\xf8\xe8\x68\x74\x3c\x09\x6e\x82\xe8\xd1\xd1\xe8\x84\x90\x6c\x12\xcc\x83\x28\x78\x19\xa0\x83\x25\x71\x2e\x2a\xd7\x24\x78\x19\x58\xc8\xef\x82\x55\x40\x48\x78\x45\x16\xd3\xe5\x0c\x4d\xe4\x93\xac\xa3\x35\xb9\xaa\xfc\x3c\x69\x23\xcf\xd8\xcb\xd3\xeb\x05\xf2\x18\x97\xaa\xbc\x41\x1e\x44\x4c\x75\xe3\x15\xea\xf5\xc2\x94\x5c\x61\x88\xbf\xea\xf5\x42\x95\xe2\x47\x70\x96\xcf\x8b\x70\x49\xc6\x78\x4d\x16\xd3\xd1\x4c\x16\x3d\x18\xeb\xc2\xfb\xf5\xc2\x65\x5d\x6b\xfd\xbf\x98\x2e\xfb\xe3\x99\xae\x69\x1c\x48\x62\xb6\x4b\xae\xb6\xdb\x75\x57\x47\x6d\xb7\xc1\x38\xe8\x42\xfa\x5c\xfe\x6f\xb7\xaa\xd2\x35\xc2\xb2\x4d\xaa\x56\x37\x6e\x72\xd4\x03\xec\xd5\x87\x54\xd1\xaf\x02\xcb\x75\x0f\xbe\x92\xc0\x3b\xdc\xba\x22\xcb\xfe\xf8\x7c\x75\x91\xf4\x7a\x10\xb5\x98\xae\x66\xe7\xfd\xfe\x0a\x9d\x9b\x14\xb7\x64\xd9\xeb\x05\x5d\x05\xee\x40\xc2\xa4\x52\x8f\x75\xea\x09\x40\xfe\x2a\xc0\xd7\x64\x79\x7e\x7d\xb1\x3a\xef\xf7\xaf\xd1\x62\x7a\x3d\x23\xb7\x07\x4b\xb2\x1a\x8c\x2b\x03\x27\x6e\xf4\x3b\x18\x17\x00\x40\x0f\x82\x97\x01\xf8\x6f\x84\x52\xaf\x74\x8f\xbc\xdc\xe9\x7b\xb4\xd3\x64\x50\xe7\x87\x34\xaa\xc1\xd0\x30\xaf\x51\x36\x72\x35\x43\xaa\x5d\xd7\xe0\x8a\x18\x2a\x0c\x97\x13\xd5\x26\x98\x56\xf8\xbd\x0e\x5d\x5d\x24\x13\x99\x41\x4d\x36\x59\xe0\x2d\x99\x6f\xb7\xef\x27\x12\xa2\xe0\xc7\x7b\x5a\x2a\xcb\xbe\xc1\xcf\x41\x0a\xda\x03\x14\x81\xfe\x85\x0f\x25\x88\xba\x90\x25\xa4\xea\xf7\x97\x32\x55\xaf\xe7\x27\x81\xc6\x9d\x3f\x77\xd6\x9b\xcb\x70\x84\x3f\xe1\xa5\xaf\xab\xf6\x96\x2c\xf1\x6b\xf2\xdc\x98\x08\xaa\x95\x15\xbc\x0c\x60\x12\xcd\x54\x41\x30\x98\xe4\xed\xf9\xf5\xc5\x12\xa0\x89\x4d\x55\xd7\x12\x9a\xb7\x17\xd7\xbd\xde\x73\x23\x9c\xfc\x1a\x8f\xb0\xaa\x71\x8c\xdf\xe2\x6b\x4d\x96\x3f\x21\xd7\xba\x86\x6b\x59\x4a\xaf\xe7\x17\x01\x3d\x71\xde\x52\xc2\x11\x7e\x22\x4b\xc0\x6f\xb5\x37\xef\x7e\xff\xfa\xe0\xad\xcc\xbd\xa7\x36\xd9\x3e\x8d\xcd\xc6\x84\x3c\xb7\xf4\x6f\xaf\x17\xde\x90\x8d\xd5\xd1\xb9\x2c\xfb\x4a\x8e\x10\x52\x00\x3e\xbc\x71\xfc\x64\xfc\x7c\xb8\xc9\x95\x66\x9c\xe9\xb9\x11\xf6\xe2\x11\x42\x78\x0c\x5e\x2a\x9f\xa3\xb6\xe2\x2f\xcb\xbe\xd2\xfc\x09\x55\x12\xc1\x07\x8d\xe2\x6b\xa3\x92\x0c\xfc\xc8\x44\x96\x7e\x54\x87\xbd\x09\xcf\x18\x43\xac\xe0\xe6\x1f\x21\xec\xd2\x77\xeb\x90\xd5\x6a\x73\xa9\x70\x22\xab\xc2\xcf\xab\xca\xb1\xcd\xde\x0e\xaf\x69\x51\x32\x9e\x93\xe0\xc1\x70\xfc\x60\x78\x14\xe0\xb7\x15\xaa\xa9\xd5\x06\x1c\x24\xdd\x3c\x03\xf3\x9f\xd6\xbc\x10\x65\xaf\xb7\x13\xb3\xe2\xe9\x26\xa3\x13\x1a\x16\xf4\x1f\x1b\x56\xd0\x30\x18\x0e\x0f\x87\xc3\xc3\x8c\xcd\x0f\x9d\x5c\x71\x80\x50\xd4\xc2\x2b\x49\xe9\x02\x8e\x42\xea\x7f\x18\xaf\xd2\x89\x7a\x0d\xa7\xed\xc5\xcc\x30\x45\x11\x0d\x1d\x0b\x1a\x55\x35\x77\x1a\xc1\xa6\xa4\x9d\x52\x14\x2c\x11\x81\xdb\x25\x85\xbd\x3c\xda\x95\xae\x13\x68\xd7\x0a\xc5\x4f\xb9\x82\x22\xed\x80\xdb\xcf\x4e\xd0\x17\xca\xf4\x44\xc9\x56\xeb\x8c\xca\x36\x53\x5f\x5b\x31\xf7\xca\xd7\xbb\xe8\x61\x38\x89\xd0\xa1\xa6\x01\x02\xeb\x16\xbc\x66\xe1\x47\xdd\xdc\x4c\x42\x3a\x64\x20\x76\xfd\x34\x2e\x29\x18\x78\x0a\x58\x80\x30\x25\x54\x4b\x7c\xa1\x88\x3a\xf2\x15\x7b\x77\x3e\x21\x88\x05\x8a\x49\x10\x44\xc1\xdf\x02\x04\xf7\x3e\x70\xff\x83\x02\x9c\x7b\xf0\x15\x21\x95\xc4\x78\x48\x87\x39\xfd\x04\x9a\x2c\x72\xb2\xa0\x5e\x4f\x80\x75\xe8\x5a\x20\xd6\xf6\xc0\xaf\xe8\x27\x92\x83\x9a\xc4\x15\xfd\x84\x0c\x19\xf1\x91\xd6\x15\x7d\x76\x35\x15\xe5\xee\xb1\xe3\xeb\xc6\xdd\xc4\x69\xbb\x8a\xe1\xe1\xe5\xf0\xf0\x0a\xd7\x2c\xc8\x68\x8b\x84\x35\xc1\xd0\xbc\xdf\x47\x9e\xa6\x62\xaf\x07\xa7\xc6\xdd\x42\xbc\x33\x1b\x08\xdd\x7d\xa4\xb9\x86\x39\x8d\x45\x4c\xbc\xfb\xb3\xfd\x7e\xd8\xb5\xd5\x97\xb5\x32\xf6\x6c\xce\x2e\x36\xc0\x68\xd1\x9a\x9a\x46\xc4\x8b\x33\x1a\xd0\x2e\xbf\x71\x06\xab\xfc\x77\xd7\x6c\xca\x61\xa6\x20\xac\x94\x95\x19\x9e\xc4\x99\xb1\x38\x23\xdf\x87\x34\x4f\x7b\xbd\x5c\xe3\x19\x2f\x10\x19\x5e\x83\x17\x06\xde\x7a\x95\x79\xc0\x03\x7b\x13\x0b\xb1\x26\xd5\x5b\x39\x85\x95\x5a\xbf\xf6\xef\x7a\xe0\x4a\x90\x33\x59\x01\x03\x8e\xdc\x5d\x06\xd4\x28\x0d\x3c\x4f\x27\x71\x0e\x0e\xaf\x1b\x61\xfa\x26\x6f\x98\x6c\x8a\x02\x98\xb0\x80\x15\xa1\xe5\x24\x57\x6e\xae\xfb\xa5\xbe\xa5\xc3\xbc\x72\xea\x9a\x74\x5a\x28\xc7\xba\x33\x9c\x91\xd1\x79\x76\x61\x88\xcd\xf3\xcc\xdc\x39\x25\x64\x33\xcd\x66\x78\x41\xc2\x6e\x02\x63\x39\x2c\x79\xb6\xdd\xe6\xf2\x2f\x44\xc8\xf5\x53\xa2\x67\xaa\x9c\x80\xca\x51\xab\x4e\x2f\x67\xf7\x44\xd7\x43\xbc\xb0\x48\xbf\xcb\xc9\x35\x09\x43\x48\x91\x7c\xdc\x6e\xcd\x9b\xa7\xb6\xa4\x73\x23\xdc\x28\x06\x16\x8c\x2d\x87\xaf\x25\x21\x01\x79\xed\x8b\x3f\x31\x54\x56\x13\x01\x4a\xed\x08\xeb\xcc\x72\x1c\x7a\xbd\x38\x14\xb8\xf0\x83\x70\x62\xe6\xb2\x0e\x94\x9d\x98\x0b\x59\xbc\x7a\xd3\x58\x5f\x7f\x69\xc5\xba\xbe\xd0\xdf\x3f\xe5\x4c\xd8\xac\x29\x6d\x66\x05\xb5\xfa\x85\x51\x86\x38\x02\x83\x2f\x7a\xf2\x6a\xd2\x44\x8e\xc0\x92\x1c\x9d\x2f\x2f\x4c\xb2\xf3\x65\xbf\x0f\xf4\xa2\x2c\xc8\xcc\x7e\xa5\x52\x0b\xea\xb3\x32\x0a\x03\xcc\x91\x86\x1d\x48\xa7\xca\xbb\x97\x9a\xc7\xc9\xc7\x9f\xd6\xe1\xc2\x6d\x87\x83\x70\x31\x05\x0a\x77\x6c\x42\xa2\x11\xf4\x8d\x2a\x60\x34\x33\xbb\xbd\x0e\xe9\xf5\xf4\x0b\xb8\x50\x98\xb8\x74\xa6\x4e\xc7\x1a\x82\xa1\x0e\x95\x29\xbd\xaa\xee\x04\x5a\x61\x6c\x4a\x9c\xc4\xb9\xd2\x81\xed\xd2\xed\xd6\x6c\x73\x5d\x8b\xc2\xb6\xdb\xae\x68\x09\x6f\xdc\x5e\xe5\xde\xf9\xa1\xd8\x2f\x65\x5b\x20\x85\x3a\x5b\xc5\xb9\xbb\x5c\x89\xad\x8b\xba\xe1\xe9\xbc\xdf\xaf\xea\x52\xe3\xa8\x25\x7b\xaf\x97\x0f\x06\x1e\x8a\xf2\x99\x7f\x30\xbb\x18\x36\xf6\xaa\x14\xdf\x6e\x2d\x69\x81\x52\xf8\x46\x72\x36\x80\xd8\x4c\x30\xa0\x83\xf2\x7c\xd3\xeb\x75\xcb\xf3\x0d\xd9\x40\x8f\xa2\x90\x0d\xcb\x35\x4d\x26\x5c\xbf\xe0\x0d\xfc\xa1\x88\x29\xd3\x50\x92\x4e\xe2\x29\x45\x80\x2f\x36\x8a\x38\xcc\x48\x39\x51\x96\xa3\x74\x2a\xb9\xe9\x68\x8b\x6b\xca\xe1\xb8\x2c\x01\x27\x90\x0c\x56\x4b\x44\x8d\x97\xfc\x58\xd0\x30\x43\x07\x3e\xbc\x12\x20\x8d\x71\xeb\xb0\x92\x3b\xa8\x23\xc3\xb2\xbc\x48\xc3\xa7\xca\x4b\x30\x2c\xfd\xdd\x3c\xca\x34\xa1\xc3\x97\x89\xf9\xb4\x85\xd1\x3c\x8d\x98\xc6\xcd\x21\xbc\x20\xac\x11\xa0\x09\x07\xef\x1e\x4c\x19\x41\x7e\xee\x25\x04\xad\x3f\x83\xac\xa3\x58\x52\xc5\x30\x71\xe3\x69\xec\x74\x29\xa2\xd8\x9b\x9f\x65\xd8\x6a\xab\xba\x66\x9d\x4c\x42\x07\x6a\x90\x0e\x93\xab\x95\x8d\x1a\xa8\xdb\x8b\x0a\xfd\x46\x5a\x2f\x15\xea\xf6\xdc\x20\x86\xed\x56\x27\x92\x68\x36\xe5\xb9\x78\x01\xc1\xaa\x9f\xea\x6e\x34\xee\xb5\xc3\xc8\x16\xa1\x00\x85\x0e\x5f\x9c\xc6\xe0\x41\xbc\x5b\x34\x7a\x3c\x18\x3b\x42\xe1\x4d\x5c\x96\x5a\x61\xc6\x62\x2c\x6b\xe5\xba\x24\xc2\x6e\x1d\x07\x34\x02\xb6\xe2\xb9\x03\x46\x19\x02\xb0\xc2\x5d\x1b\xb3\x99\x64\xa4\xd4\x66\x00\xb2\x3a\x4e\x84\x81\xab\x85\xbd\x58\xbc\x64\xb9\x12\x53\x32\x1b\x51\xa6\x76\x18\xb5\xdb\x29\x9d\x9c\xa4\xd7\x4b\xa6\xa3\x19\xba\x8b\x07\x03\x1c\x66\x9a\x92\xca\x0c\x79\x15\x4a\x38\xeb\xa1\x33\x84\x99\x35\x79\x9e\xf8\xd2\x2d\x9e\x7d\xa7\x4a\xbb\xf4\x34\xac\xdd\x8b\xd1\x64\x14\x99\x5e\x98\xc6\xb3\xaa\x02\xc5\x67\x09\x20\x10\xa4\x72\x01\x39\xb2\x4c\x19\x41\xd6\x09\xf4\xda\x72\x91\xfe\x45\xb0\xcd\x1c\x2a\x9b\xdc\x15\xf6\x03\x89\x47\x1c\x71\x74\x27\x42\x8e\x03\x58\x8d\x81\xd1\x64\xba\xab\xf0\x86\xf0\xe1\x8a\x8a\x78\xbb\xbd\xab\x70\x46\x3c\xe6\x51\x22\x71\x14\x97\xb3\x20\xe9\x92\x8d\x3c\xb7\x36\x90\x55\x82\x9c\x85\x05\x12\x4f\x93\x99\x62\x30\xf1\x69\x32\xc3\x6b\x32\x3a\x5f\x5f\x2c\xcd\x08\xae\xcd\x08\xa6\x64\x39\x5d\xcf\x0e\x16\xee\xb4\x53\x84\x29\x96\x27\xa3\x30\xb5\xd3\x37\xd5\x63\x28\x47\x20\x23\xdd\x91\x12\xbd\x58\x91\x3b\x87\x4b\x5a\x1c\x31\x28\x04\xa1\x5b\x88\xf5\xd6\x06\x56\x30\x30\xac\x06\xef\x55\x15\xa1\x74\x41\xa1\xce\x28\x9b\x4c\x67\x91\xda\x63\xc0\x7a\x6e\xa3\x12\x67\x19\x49\xd5\x22\xf4\x22\x30\xb5\x08\xb3\x95\xea\xaa\x84\x5a\x80\xfb\x6a\x13\x96\x0e\x30\x6f\xd6\x0b\x43\x75\x20\xbc\x15\x0e\x64\x98\x87\xd5\xe8\xd0\x02\x17\x0a\x0f\x3b\x60\x3f\x13\x42\x58\x18\x32\x26\xcc\x35\x31\xa4\x43\x6c\x3d\xbe\x37\x6b\xb1\xbb\x5b\x28\xa3\x6f\xb0\x53\xe4\xfb\xf0\x73\xa1\xaa\x06\x24\x5d\xf8\x48\xda\x90\x4a\xc4\x87\x6a\xe2\x37\x24\xf2\x1b\xa2\xcb\xb1\x44\x1a\x60\xf8\xdd\x5a\x2b\xa7\x04\xa6\x09\x14\x16\xc6\x20\x42\x99\xe7\xb4\xa8\x5b\xfd\xac\xdd\x93\x2a\x3c\xab\x60\xa6\x7e\xa7\x99\x2d\xca\xc1\x55\x55\x66\x88\xca\x30\xc6\x1b\x54\x49\x24\xb1\xb1\xd3\x5c\x19\x60\x44\x9b\xe6\x4a\xb8\x05\x2e\xc2\xf4\x76\x46\x36\xd3\x5b\x27\xfd\xb5\xaa\xfe\x23\x8f\xe5\x74\xb8\xda\x64\x82\xad\x33\xfa\x89\xe5\x57\x0d\xdc\x65\x16\xca\x97\x6a\xaa\xd5\xce\xb8\xee\xe2\xaf\x45\xf6\x78\x47\x6a\x07\xb4\xf4\xcd\x56\xd9\xeb\xb1\xc7\x83\xf1\x84\xf5\xcd\x2e\x13\x29\x1b\x02\x9c\x08\x7d\xbc\x99\x18\x19\x9e\x1c\x45\xee\x78\xc4\x27\xc6\xb1\x45\xde\x0f\x8b\x89\xe7\xdd\x22\x1a\xa1\x68\x30\xae\x1c\x76\xd9\x8f\x7a\xf8\x46\xd0\xa2\x4e\xeb\x08\x3d\x2f\x41\x1d\xda\xae\xfe\x9c\x16\xf7\x60\x99\x7c\xa7\x40\x6f\xb5\xe3\x7c\x08\xa1\x8d\x72\x87\xde\x97\xa9\xc0\x0f\x03\x3b\x14\xb6\x94\x5a\x94\x5a\x04\x3a\x08\x55\x66\x55\x59\x70\x0c\xa9\xc2\xfd\x4c\xce\x04\x9f\x17\x78\x90\xc9\x2d\x11\x46\x0c\x08\xf0\x78\x98\x64\xbc\xa4\xbd\x1e\xd3\xc7\x3c\xd3\xd9\x7e\x26\x53\x84\x67\xb1\x4e\x1d\x64\x0d\x55\x13\x2e\x88\x2e\x68\x52\x84\x19\xd6\xef\x98\xc9\x73\x29\x8e\x87\xeb\xb8\x28\xe9\x33\x9a\xb1\x15\x13\xb4\x28\xe5\x60\x21\x49\xbd\xad\x79\xd9\xeb\x75\x77\xe3\xad\x04\xb6\x3a\x6f\xea\xe2\x10\xbe\x07\x28\x49\x4c\x64\x6c\xf5\x56\xdc\x66\xf2\x74\xe7\x7d\xf5\x83\x4e\xd0\xaf\x07\x0c\xa0\xbc\xe0\x60\xa1\xec\x06\x99\x0e\x21\x99\x95\xfa\x5a\x68\x26\x6b\x49\x62\xff\xe0\xce\x0c\x08\x4e\x6f\xb3\x59\x04\xc2\x0b\xdb\xb4\x9d\x96\x81\x1f\x93\x7d\x6d\x40\x38\x56\x5f\xba\x11\x61\x29\xa9\x73\x0d\xbe\x8b\x88\xfc\x0f\x84\x4b\xef\x90\x3f\x3e\x1c\x61\x37\xbe\x38\x21\xa3\xf3\xc4\x37\xc6\x90\xa8\x29\xb1\xc0\x4b\x92\x4f\x93\x99\x1e\x39\x39\x62\xcb\x21\x5f\xd3\x5c\x0d\x18\x32\x63\x63\xc6\x61\xd9\x6c\x86\x72\x13\x21\x87\x46\xe5\x6b\x8e\xcc\xd2\x7c\x93\xda\x42\x5b\x9a\x0d\x50\x21\xee\x89\x79\x09\xb9\x5a\x2f\x38\x08\x50\x34\x42\x78\x59\x1b\xcb\x65\x73\x2c\xeb\x01\x03\x09\x40\x00\xe2\x7b\x8b\x5e\x6f\x71\xb1\xe9\xf5\xc2\x0d\x59\xa0\x6a\xd3\x95\xfd\xd1\x3e\xbc\x1b\x3d\xbc\x6b\x30\x05\x64\x46\x56\x2d\x5a\x33\xb2\x2d\xf9\x11\x5e\xdb\x5d\xa7\xce\xce\x32\x22\xd5\x5e\x2f\x4c\x76\x57\x70\x24\x9c\x72\x81\xee\x03\xf3\x12\xb6\xe6\x8d\x34\x26\xc1\x05\x8a\x14\x9d\x5e\xe1\x79\x16\xe7\x1f\xeb\xde\x61\x0b\xc7\x41\xf3\x0b\x29\xda\x00\x80\x93\xa8\x2d\x43\xae\x7b\xfb\x11\xb6\x66\x8f\x0a\x83\xcd\x6a\xd1\x28\xb8\x94\xdb\x58\xbd\x4a\x83\x4c\xea\x25\x99\x34\x6a\x96\xd7\xad\xb5\xb4\x18\x0c\xd1\x68\x2b\x9f\xf2\xd9\x81\xae\x24\x86\x69\xb6\x53\x6e\x6c\x40\xaa\xcf\x33\xcd\xd0\xd9\xed\xe3\xa2\x36\xcf\x24\x1e\x05\x11\xc8\x82\x25\x4f\x97\x71\x51\x46\x62\x58\xfb\xfe\x1c\xb9\x02\xd1\x93\x3b\x43\x9b\xc0\x27\xd6\xb4\x4b\xb3\xe7\xab\xc8\xa6\x53\x30\xa8\xe1\xa8\xe4\xef\x57\xa4\x3c\xe6\xfc\x86\x16\xef\x13\xbe\x5a\xf3\x5c\xee\xdb\x1e\xe5\xb0\x43\x8f\xe0\x2f\xca\x15\xa7\x29\xcf\x0f\x25\xb4\x87\xea\xbc\xf2\x4f\x10\x32\xbf\x00\x2a\xfc\x0b\x81\xf9\x85\xe4\x90\x77\x52\x0b\x96\x62\x95\x29\xc3\x2a\xf3\xb8\x28\x83\xf6\x83\x5b\x93\x7e\x0a\x7d\x36\x0a\xb8\x03\x3b\x94\xe5\x04\x08\xdf\xc9\x29\x1a\x05\x77\x77\x01\x86\x55\x10\x05\x55\x15\x98\xe9\xe0\xe5\xf1\xaa\x44\xb8\x81\x58\x23\xed\x59\xcb\x02\xfa\xe2\x87\xe7\xa1\xaa\xe5\xd3\xc0\x65\x1c\x08\xba\x5a\x67\xb1\xa0\x01\x6e\xb6\x02\xfd\x47\xd2\xb1\xf5\xeb\x25\xc7\xae\x39\xfc\x5b\x38\x89\x24\x65\x1f\x0b\x5e\x6c\x4b\xbe\xd8\x7e\xa4\xb7\x37\xbc\x48\x3b\xc9\x36\x89\x4b\xba\xcd\xe9\xcd\x76\x7a\x39\xbd\xab\x2e\x43\x7c\x1e\xcd\xb6\xe4\x31\xfa\x8d\xb6\x1e\x20\xc0\x62\xe6\xbb\xdb\x35\x45\xdb\x6d\xf0\x8f\x4d\x5c\x32\x30\xd7\x6a\x42\x7b\xbd\xc3\xcb\xbb\xcb\xf2\x6b\x93\x9e\xea\x6d\xc0\x6e\x22\x54\xee\x91\x83\x30\xdf\x6e\x47\x08\xa1\xaa\x3e\xb9\x3e\xc4\xd7\x71\x99\x14\x6c\xed\xfb\x23\x73\x5b\x05\xe6\x38\x26\xb9\xc7\x3b\xc6\x25\xd1\xa7\x2a\x49\x6f\x2b\x5e\x0d\xde\x90\x62\xf8\xa1\xe4\x79\x96\xe2\x4c\xbf\x6e\xb7\x1b\x9c\x90\x02\x4c\x0b\xa9\xf2\xf1\x82\x14\xc3\x1b\x6d\x2f\x01\x34\xbc\xca\xed\xf6\x70\x7a\x79\xf3\x9b\xcb\x4f\xf1\x78\x70\xb9\x59\x2c\x16\x8b\xd9\x21\x5e\xfa\x42\x52\x4e\x52\xd5\x61\x34\x65\xf5\x48\x9e\xb5\x24\x95\x11\xe8\x9e\x0c\x94\xc6\x89\x20\x34\x34\x41\x9d\x18\x34\x57\xbc\x80\x39\x68\xe0\x78\x01\x49\x80\x30\x93\x01\x66\x70\x02\x30\xcd\x0a\x35\x04\xb1\xe0\xab\xc0\x54\x03\x1f\x15\x8e\xc9\x1d\x5b\x44\x34\x0c\xd8\x22\x40\x18\xc4\x06\x23\x81\x6f\xc0\x25\x18\x96\x3b\x46\x94\xe3\x94\x47\x39\x16\xc5\x6d\x94\xe3\x05\xcb\xe3\x2c\x93\x6f\x0a\xf6\xa8\xc0\xc0\xc7\x89\x0a\x6c\x98\x3b\x51\x81\x73\x7a\x23\x8b\xcc\xe9\x4d\x80\xb4\x3d\xc8\xa8\xc0\x70\x07\x19\x15\x38\xa5\xf3\xcd\xd5\x95\xdc\xe0\xf0\x75\x5c\xc8\x84\xd7\xb1\x84\x13\xdc\x2f\xb8\xcf\x8c\x7a\x1f\xa6\xdf\x64\x88\x5d\x04\x08\x83\xc8\xbc\x0c\x83\x17\x99\x8e\x43\x81\x0b\x68\x78\x79\xc3\x74\xb4\x7a\x83\x0c\x25\x55\xe9\x4b\x0a\xb0\x29\x0b\x53\x34\x0c\xf4\xab\xec\xbf\x3c\x62\x58\x2d\xaf\x88\x61\x77\x99\x29\x43\x8b\x0d\x8d\x38\x5e\xc4\xb2\x63\x94\x87\xb8\x88\xe3\x8d\xb9\x4b\x8d\x38\x7e\x15\xbf\x8a\x38\x7e\x91\x2f\x58\xce\xc4\x6d\xc4\x81\x6a\x97\xe5\xcb\x7f\x09\x00\x38\x4b\x94\x10\x80\x37\x42\x84\xcb\xcd\x9a\x02\xcc\x30\x20\x08\xdf\x32\x9a\xa5\x51\x81\x15\xbe\x90\x11\xea\x4d\x02\xb6\x32\x41\xea\x2d\x30\x2e\xc3\xcb\xa8\xc0\xf1\x4d\xcc\x84\xfc\x2f\x6f\xf3\x04\xca\x93\x2f\x81\x3a\x9f\x27\xc6\x86\x90\x9e\x09\xd7\x71\xc1\x40\xfd\xc8\xcc\x06\x13\x30\x38\x0e\x2a\xbc\x21\x77\x2c\x17\xb4\x58\xc4\x09\xf5\x41\x05\xcc\x0f\xc7\x52\x39\xc6\xf1\x8a\x82\x34\x7f\x04\x7b\xea\x26\x83\xa4\xea\x4d\x02\x96\x6f\x56\xb5\x80\xf5\x66\x9e\xb1\x44\x07\xb1\x05\xa3\x72\x84\xd6\x05\xbb\x86\xcd\xb9\x11\xca\x85\x72\x31\x5f\x0f\x8f\xe7\xa5\x90\x2b\xad\x19\x5c\x46\x0c\x2b\x1c\x11\x95\x58\xf9\x8d\x8f\x4a\x3c\xe7\x1c\x3c\x9c\x96\x38\xce\x6f\xa3\xb2\x72\x22\x5f\x8a\x45\x11\x4f\xb3\x19\xdc\xbc\x59\x1e\x64\x15\x22\xbc\x26\x87\xd3\xfe\xe5\xe0\xeb\xde\x57\xe4\xe2\x71\x77\xb2\xfd\xdf\xff\x36\x3b\xc4\x29\x39\xfc\xdb\x7f\x0b\xe5\x04\xa7\x9f\xc4\x96\xa5\x5b\xb0\xee\xb2\xcd\xe2\xfc\x6a\x13\x5f\xd1\x2d\xb8\xde\xd3\x0a\x98\xb4\xd8\x66\xac\x14\xdb\x92\x8a\x6d\x41\xaf\x69\x51\xd2\x2d\x9c\x9e\xb7\x73\x89\x18\xaf\x79\x12\xcf\xb7\x57\x45\xbc\x5e\xa2\xc0\x93\x72\x5b\x35\x5c\xfe\x31\x42\x31\x27\xb9\x6f\x52\xfd\x36\xa4\x56\x22\x1a\xdc\xbb\xa9\x7b\x1f\x39\xbe\xbf\x0d\x7e\x4b\x08\xdb\x6e\x83\xdf\x06\x84\x58\x61\xdd\x5c\xd1\xd8\xec\x67\x4a\xc2\x82\x30\xdc\xa2\x1f\x88\x19\x51\xce\x2f\x37\xbd\x5e\xf0\xdf\x40\x6b\x67\x4d\xe9\xc7\x10\x6c\x6f\xab\xa3\x46\x6a\xcf\xa6\xc2\x95\x77\x8b\x57\x61\xa0\x50\xe4\xc0\x20\x2c\x1c\xac\xa8\x88\xf5\x6d\xf7\xb9\x92\x8b\x06\x57\x4e\x0a\x4e\xb8\x30\xed\x82\x45\x70\x74\x8e\x18\xe9\xb2\x5e\x2f\xb8\xbc\x0c\x88\x27\x0f\x0b\x6e\x22\x5d\x25\x48\xd6\xa2\xd9\x1c\x56\xd7\x5a\xee\xb4\xae\x65\xd0\x27\x70\x23\x3f\x0c\x40\x33\x89\x3a\xd9\x98\xb4\x1f\x4e\xa2\x29\x7d\x3e\x93\x23\x3a\x9b\x5c\xa6\x7d\x34\x39\xb4\xad\x59\x85\x81\x9a\x2b\x01\x36\x2f\xad\x05\x05\xc3\x61\xe0\x67\x2a\xd7\x05\x8d\xbd\xd6\xb2\x45\x78\x38\xbd\x9c\x5e\xce\xe4\x66\x77\x89\xf0\xf9\x65\x74\x39\x9c\xe9\xcd\x8b\x79\x39\x15\x3f\x3d\x20\xa6\x78\x1a\x8b\x30\x78\x5c\x2b\x9b\x3c\x0e\xb0\x87\xba\x21\xfd\xc8\x4f\x7f\xf8\xe9\xd0\x15\x09\x41\x7f\x02\x49\xef\xc3\xe9\x65\x1a\x0f\x16\xb3\x43\x06\x7d\xd6\xde\xb0\x7a\x49\x7c\x5f\x49\xa3\xc1\xe9\x2f\x29\x67\xbe\xb7\x9c\xf1\xbd\xc5\x1c\x5e\xa6\x3b\x9d\xe4\x0f\xde\xd7\xe1\x24\xba\x1c\x5e\xa6\x5f\xa3\x49\xdb\x30\xee\x07\xef\xd0\x5f\x03\xba\x9b\xbf\x0e\xd0\x24\xf4\xd6\xc3\x35\xbe\x86\x99\x23\x8f\x77\x90\xe0\x50\x26\xa0\xc3\xf2\x23\x5b\x83\xf6\x54\x08\x15\x24\x7c\x25\xf1\x5d\x80\xed\x1b\x42\x91\x00\x7b\xfc\x63\x34\x09\x5b\x75\xea\x70\x4e\xba\x63\x5c\x90\xee\xd8\xac\x01\xe1\xd6\x80\xb6\xc4\xaf\x0c\x74\x02\xa4\xa2\xd7\xb3\x22\xfc\x07\xc1\x14\x9c\xd7\x16\xa4\x3b\x8a\x8a\x5e\x2f\x98\xa9\x04\xa1\x2c\x0d\x55\x39\xe9\xe6\x66\xcd\x88\xaa\x52\xde\x6a\x6c\x87\xcd\xc3\x70\x7a\xc5\x56\xb7\x9b\x19\x0a\x27\x5d\xfd\xfa\xf5\xe5\x11\x42\xfd\xcb\xb9\xea\x2f\xb8\xdc\x59\xdb\xa5\x34\x38\x92\xcd\x09\xbd\x41\x5b\x43\x32\x3b\x01\xbd\xb9\x88\xa9\x2f\xfb\x00\xfd\xfc\xf7\x3d\xb8\xe6\x0a\x5f\xb9\x55\xf9\xbf\xd5\x07\xa3\xd1\xbf\x54\x9f\x3d\xd4\x3f\xe4\x58\xef\xce\x89\x5f\x0a\x1e\xc8\x47\xd8\x62\xee\xbc\x02\x16\x4e\x59\xd1\x26\xc7\x31\x59\x0e\xd7\x9a\x4f\xfd\xa2\x7c\x9e\x6f\x56\xb4\x90\x7b\x61\xc8\x51\xaf\xb7\x04\x67\xfd\x7a\x83\xe8\xf5\x82\x61\xd0\x25\xb9\xa5\x55\x27\xab\x30\x56\xd6\x26\x63\x65\x1c\x02\x73\x14\xad\x42\x6f\x7f\xf5\x5e\xb9\xaf\x41\x70\xdd\xb8\x5b\xd4\x13\xc6\xce\x94\x73\x37\x43\xf2\x5e\xaf\x40\x77\x3e\x5e\xd4\x16\x53\x0b\x02\x9e\x0e\xac\xd8\x73\xfb\x84\xf5\x0c\xcb\xb5\xd7\xb9\x83\xa8\xf5\x24\x2d\x7a\x3d\x35\xc8\xf9\x76\x1b\xfc\x46\x01\xa2\x57\xcb\x5d\x80\xd0\x1e\x90\x64\x36\x8d\xd6\x3d\xb8\x14\x99\xef\x4d\xbc\xda\x80\x55\x5a\x14\x35\x9c\xde\x55\x33\xe4\x1d\x3b\xde\x2b\x88\xc5\x70\x11\x8b\x27\x45\xc1\x6f\x9e\x80\xa1\x50\xef\x53\xf3\x36\xac\x66\xba\x3a\x2a\x58\x15\x53\x89\x50\x35\x8f\x42\x69\xb2\x84\xf9\xc5\x08\x35\xad\x1c\x76\xc7\x72\xaf\x1d\x8c\xcf\xf9\x63\x32\x3a\x1f\x0c\xb8\x73\x19\xa3\x0b\xd4\x22\xdb\x1c\xe1\x92\xcc\x6d\xf1\xb1\x32\xc1\xf8\x98\x8c\x7a\xbd\xf2\xe2\xd8\xe8\xe3\xdc\xf5\xfb\x5c\xf7\x07\x5b\x84\x23\x42\x06\x83\x42\xf9\xdb\xa8\x8c\xf4\x71\xf9\x98\x1c\xcb\x3c\x0f\x51\xbf\x5f\x58\x99\x64\x3d\x69\x63\x24\xb7\xc7\x91\x32\x45\x0c\xdb\x4b\xf0\xdb\xcb\x43\xb3\xa5\xc4\x66\x65\x00\x4b\x09\xb0\x87\x57\x61\x55\x41\x50\xb3\x97\xb8\x56\x60\xbf\x21\x77\x92\xce\x8c\xba\x23\x43\x28\x75\x47\xd8\x4c\x51\x70\x4e\xa8\xe8\xa8\xee\x08\x2b\x64\x21\xdf\x80\x84\xed\x8e\x70\x73\xc3\x8f\x6a\xe6\xac\x9f\x3b\x0b\x98\x70\x97\x0a\x56\x34\xe1\x3c\x45\x53\x23\xb0\x9f\x28\x9b\x93\x46\x64\xff\x76\x4d\x89\xf6\x99\xb9\x2e\xe8\x35\x61\xda\xf6\x66\xbe\xe0\x84\x6b\xd7\x90\x85\x71\x87\x0f\xee\xa7\x49\xe1\xcd\xe7\x4f\xbb\x96\x09\xe0\x9e\xea\x8f\x71\x51\x9e\xe7\xe7\x39\x51\xa2\x31\x08\xac\xf3\x4a\x7a\xb5\x26\x06\xe3\x39\x70\x1a\x6a\xd2\xce\x38\x72\x2a\xe8\x35\x5c\x68\xe5\xa4\x18\x5e\x7f\x49\x61\x95\x92\x42\xd6\xac\x26\x60\x8c\xab\xa6\xaa\x77\xe5\x0e\x41\x87\x27\xea\x7a\xc3\xb3\x84\x57\xd3\xf0\xb1\x57\x3f\x56\x14\xe0\x9c\xca\x59\x49\x07\x03\xf4\x76\x98\x24\xda\xaa\xaf\x49\x35\xa5\xbe\x2d\xd8\x27\xce\x8c\xe1\x6b\xdf\x8c\xa1\xf3\x18\x87\xbb\x9e\x4e\xe3\x47\xd8\xb8\xdc\x19\xbf\xd6\x99\x62\x4f\xab\x9d\xa4\xc3\x81\x55\x7d\x56\x39\xde\xaa\x83\xb4\x9c\x97\x6f\xb5\x0b\x08\x22\xcf\x55\x01\xce\x4d\x0f\x2b\x8f\x6e\xe6\xc6\x56\x0e\x94\x9d\xcd\x5e\x18\xb9\x93\x55\x45\xd4\xdc\x73\xda\x88\xaa\x32\x6b\x42\x96\x71\x95\xf1\x79\xa3\x90\xc2\x0b\x84\xab\x5d\xf7\xd9\x2c\xd4\xc5\x54\x7a\x71\xfc\xa0\x93\xa8\xb3\x9a\x4a\xa7\x43\x6c\x07\x06\x95\x37\x72\xef\x42\x74\xa7\x1b\x6d\x1a\x48\xee\xe4\xec\x89\x1a\xa1\x72\x89\x95\x36\xd0\x35\x07\xef\x04\x91\x1f\x3c\xb3\x45\x5e\xf1\x2e\x41\xa3\x68\x98\xa0\xb8\x09\x45\x33\x91\x04\xca\x33\x17\xe4\x6b\x86\x36\x54\xb8\xec\x30\xe2\xc2\x32\x4a\x68\xaa\x65\x5e\x63\x11\x80\x72\x27\xfd\xc4\x92\x38\x53\xae\x41\x0b\x2f\xc0\x26\xaf\xf1\x9a\x99\x4b\x71\x2e\x89\x7e\x14\x80\x6b\x6c\xe0\xf5\x30\xb5\xae\xcf\x19\x61\x6a\xdd\x15\x84\xb9\x62\x6c\x3e\x30\x3a\xfa\x3c\x2c\xa0\xa1\x05\x8d\x57\x1a\x95\x84\xe0\x12\x5c\x4e\x71\x9b\x14\x0b\xe7\x6c\x09\x02\x89\x44\x76\x9e\x45\x23\xab\xab\x66\xe6\x2b\xb5\xf0\x4b\x08\xe4\xae\x87\x02\x65\xb9\xd6\x35\x13\x2c\x5d\x3a\x74\xb6\xd3\x62\x49\x8a\x19\x58\xeb\xe5\xf9\x2e\x5f\x5a\x2c\x6f\x77\x84\xbb\xd4\xec\xe4\x84\xd0\xc9\x93\x10\x45\xc1\xb9\x84\x60\xf2\x3a\x44\xd1\x93\x50\xf8\x84\xc3\x07\x5f\xb8\x17\xb8\x23\x2a\xcf\x8f\x40\x75\xc0\x6a\x33\xf7\xbb\x08\xc7\x14\xbf\x0a\x83\xf3\x00\xe1\x37\x28\xf2\xd8\x48\x36\xcb\x82\x17\xab\x00\xe1\x17\xf8\x43\x2d\xc5\x7c\x27\x85\x8a\xbf\x73\xe1\x55\x80\xb0\xa0\x10\x7a\x1e\x58\xb0\xd9\x02\xde\xc3\x40\x4e\x80\x80\xd8\x79\xe8\xba\x6b\xc1\x7b\x3d\x3b\x3b\x93\xa9\x7b\x75\x62\x62\x84\xbc\xf1\xd3\x28\x29\xce\x10\xe1\x1d\x88\xf1\x82\x36\xb8\xa2\x12\x8c\x6b\x2a\xc3\x78\xb1\xd3\x86\x25\xd5\xcd\xb0\x34\x99\x4d\x01\x53\x1b\xe1\xdf\xa3\xc8\xf0\x8a\x76\xbb\x08\x1a\x8d\x1d\x2f\xe9\x15\xd0\x41\xd0\x09\x50\x2a\xf0\x94\x54\xb6\x17\x32\x32\x02\x96\xad\xe1\x2b\xa9\x08\x1b\xac\x18\x56\xcd\x4a\xde\xc9\x7c\x61\x80\xf0\x15\x0c\x1c\x52\x1d\x8f\x9f\xca\x0c\xc0\x84\x69\x66\x98\xab\x11\xd0\x2c\xa2\x66\x73\x3e\xa9\x58\xcd\x2d\x6a\xc6\xbe\x55\xb1\x9a\x43\xd3\x2c\xb9\xa4\x58\x8f\x72\xb3\x9d\x8a\xb1\xa4\xd2\x7f\x40\xd1\x6b\xaf\xc8\x17\x6e\xba\x79\xe6\x9c\xbc\x59\xff\x32\xa4\x58\x1e\x65\x6c\xe4\xb3\x66\xa4\xef\xe5\xe5\xa5\x15\x61\x35\xb3\xc1\x23\x69\x88\x45\x05\xa5\x13\x61\xcb\x89\x98\xfc\x31\xfa\x13\xa0\xab\x30\x70\x9b\x55\xe7\x49\xf8\x4e\xb6\x47\xf6\xe8\xf7\x61\x49\x31\xbc\xbd\x91\xe0\x92\xc7\x01\xc2\x39\x7e\xaa\xce\x2b\xfe\xd4\x30\x79\x5f\x87\xef\x64\x77\xf8\x69\x2b\x2d\x16\x34\xf9\x26\xfa\xce\x20\x9b\x9b\xa6\xcc\x0b\x45\x93\x27\x61\xd1\x36\x41\x71\xe1\x2d\x36\xd3\x97\x62\xf2\x73\xf4\x2d\x8a\x14\xdc\x6a\x2c\x24\x90\xdf\xe2\xa7\x76\x32\xbc\x81\x8c\xf6\xd4\x43\x08\xdd\x6e\x0d\x43\xc2\x14\xf2\x2c\x7a\x81\x22\x38\x48\xea\x42\x66\x01\xc2\x3f\x50\x9d\x57\xad\x60\x4a\xc3\x3f\x60\x39\x9b\xb5\xaf\x83\xc8\xf2\xe1\x25\xce\xf9\x09\x42\x72\x7a\xa3\xcb\x68\xb9\x84\xdb\xbd\xb3\x01\xb6\x89\x98\x3c\x09\xe9\xe4\x77\xd1\x5f\xe4\xb4\xa0\x00\x4a\x55\x81\x65\x84\x27\xbe\x3b\x80\x6f\x6b\xd7\x79\xfa\x04\x3b\x3d\xbf\xac\x2e\xd1\xe5\x0c\xcf\x0e\x11\x20\xbe\xd7\xe1\x0b\x2f\xcf\xcf\x5f\x98\xe7\x99\x97\xe7\xbb\x1a\xae\xc4\x66\x71\xa2\xe8\x1b\xe3\xb9\xc1\xa5\xfd\xa6\x6e\x71\x60\x44\x48\x3e\xf9\x2e\xfa\x06\x33\xf5\xfa\x22\x7a\x66\x8c\x37\x91\xc7\xba\xa0\x77\x38\x97\x93\x0d\x96\xa7\x3f\x26\x93\xc3\xcb\xfe\x65\x7f\x3b\x18\x98\x1b\x0f\x33\x0f\x26\xba\x8b\x0c\x7a\xc0\x4c\x76\x0c\x6b\xed\xfe\xf3\xa0\x4b\xe8\x44\x4f\x06\x4a\xc3\x67\x72\xca\xe2\x20\x89\xb3\x2c\x80\x04\x43\x0d\xc5\x6f\xe0\xab\x31\xde\xdf\xca\x1a\x66\x66\xc6\x28\x5f\x72\xc6\xa5\x9c\x6d\xf2\x4f\xb5\xee\x51\x20\x74\xf5\xae\x13\xfc\xe6\x2e\xe8\x12\x61\x3d\xaf\x1a\xcf\x75\xb2\x29\x3f\x49\xa8\x5f\xe0\x7f\x78\xbd\xf7\x0f\xad\x29\x13\x54\xfe\xc2\x71\x54\xa0\x3b\xf7\x99\x95\xec\xb1\x0b\x64\x89\xae\xa8\x3f\x79\x03\xfd\x3e\x34\x8b\xdc\xe4\x43\xf8\x75\xa8\x27\xf1\x87\xc8\x9f\x1f\x7f\xfc\xf2\x6c\xfe\x14\xf9\x8b\x45\x31\x81\x72\x82\x13\x78\xd6\xd9\x1d\xfc\x96\xc7\xf9\x24\xfc\xce\xcb\xfd\xbb\x5f\x9c\xfb\x1b\x2f\xf7\xef\x1d\xc8\x41\xa4\xc7\xef\x0d\x06\x94\xfa\x5d\x1b\x22\xfd\x8d\xe9\xe4\x36\x24\xe5\x6a\x33\xbc\x0c\x59\x9d\x97\xfb\x0f\x4d\xc2\xc1\x16\xb1\xdd\x5a\x08\x15\x56\xbd\xcd\xe8\x24\x6c\x2f\x30\xd0\x8d\x94\x78\x47\xbd\x4d\xfe\x1c\xfd\x55\xee\x68\x9a\x07\xa7\x71\x92\x91\x4d\xf3\x0b\xda\x4c\x5c\x51\x91\xae\xa7\x1f\x74\xfc\xe2\xa1\xa4\xc6\x31\x53\x75\xcc\x5f\xd5\x56\xa5\x98\xfe\x2a\xe8\x0f\xde\xbc\x7f\x61\x26\xbc\x4c\x57\xc3\x88\x2f\xd0\xce\xc4\xff\xb3\xd7\xf1\xb6\x23\xd4\xcc\xff\x2b\x8a\xf6\xb4\xfc\x9a\xfa\x4e\x54\xfe\xda\x32\x76\xcf\x2c\xf2\x7e\x0d\x44\x48\xb3\xda\xef\xf5\x79\xd5\xe9\xd4\x81\xb7\x08\xa3\xab\x6c\xbd\xca\x35\x88\x26\x83\x77\x60\xe9\x13\x10\x5d\x5a\x80\xdb\x05\xd0\x3e\x52\x7f\xdb\xed\x08\xf5\xc7\xe0\xdf\x1a\xe7\x56\x73\xb4\x50\xd6\x4a\x14\xd2\x91\x8b\xf6\x95\xc4\xc5\x3b\x5a\xf2\x00\x45\x7b\x96\xd7\xaa\x3c\xcf\xc2\x0e\xdd\x75\x14\x71\x7c\x5e\x5c\x34\x8f\xad\x60\x09\xb0\xed\xbc\xea\x99\xfe\x93\xd8\x0a\xdc\x07\xa8\x8e\xa9\xcd\x75\xe1\x5d\x90\x2a\xa4\xa2\xe1\xf9\x80\x85\x6f\xda\x35\xa7\x7a\x51\x24\xbd\x9e\x1a\x08\xb7\xe3\x33\x3f\x61\x41\xdd\x5a\x25\xfe\x32\x7d\x52\xdb\x32\x18\xfd\xb2\x45\xe6\x5d\x98\xe1\x27\x21\xf7\x6b\xe2\xb4\xb6\xd2\x2e\x34\xd2\xff\x3e\x64\x14\x07\x92\x80\xe0\xd4\x9b\xb8\x7a\xda\xf2\x96\xf9\x12\x53\xef\x38\x2f\x89\x96\x9c\xe2\x8c\xe2\xc4\xaf\xac\xac\x57\xd6\x58\x21\x25\x6d\x52\xbb\xe1\xc7\x50\xc8\x69\x82\x9a\xcb\xa4\x74\x40\x51\x0a\x14\xd2\x2c\xf0\xe9\x85\x0d\x95\x04\xc3\x2e\x90\x1b\xda\x8e\x57\xba\x12\x0f\x58\x12\xcd\xe9\x2b\x7f\x1d\x1d\xca\x8d\x77\x52\xef\x60\xf0\x8d\xbf\xb3\xea\x10\x6e\x81\xb1\xf2\x4e\x46\x7a\x1b\x2d\x65\xbf\x20\x14\x99\xc6\x65\xb5\xa5\x9a\x7d\xd9\xc8\x27\x76\xe4\x71\x7d\x1a\xc5\x7e\x7f\x2f\xbc\xc2\x6a\xa7\xa5\x5e\xcf\x9c\x79\xbc\xf2\x0d\x39\x8d\x55\x9c\x3a\x46\xb9\xc2\x96\xb6\xca\x06\xad\xaa\x49\xbf\xb5\x23\xfc\xbc\x5c\x6b\x5a\x47\x5f\xba\x73\xdc\x59\x6f\x45\xbd\x43\xd9\x6a\x67\x0a\x3c\x09\x53\x0a\xd4\x95\x97\xde\x95\x9e\xd6\xc7\x93\xe5\x1a\xdb\xf3\x05\xcc\xe3\xb0\x75\x57\x7b\x01\x14\xde\x77\xf5\x92\x56\xf5\x92\x0c\x40\xb7\x12\xa0\x2f\x2f\xd6\x83\xf3\xd6\x2f\xfd\x16\x7a\x21\x40\x72\xa2\xf5\x7a\x4f\x6a\xb4\xe2\x75\xbd\xe6\xaf\xef\xa9\xe2\x1a\x4e\x90\xad\x4b\x44\x45\x85\x96\xd8\xb3\xc7\x87\x2b\x7b\x7c\xc8\xe5\x89\xf2\xe9\xee\xa2\xb8\xf2\x87\xa8\x36\x85\xaf\xa0\xeb\xd5\x5a\x2e\xfc\xf6\xcc\xbd\x89\xd5\x86\x7a\x34\x50\xef\xfd\x3c\xef\xeb\xed\xd4\xc2\x00\x96\xc8\x7c\x4f\x77\x8f\xec\x37\x70\xe8\x6b\xc2\x7b\xb3\x67\x11\xef\x23\x0e\xe0\xbc\xc7\x92\x7b\xfa\xf5\x06\xd6\x63\xdb\x4e\xda\x42\x41\x3c\x09\x9f\x53\x7c\x4d\xf1\x0d\x95\xd3\x48\xbd\xa0\xe8\xde\x71\x53\x29\xcc\x9c\xba\x71\x88\x41\xee\x12\xcd\xe6\x3d\xa7\xfb\x37\xfc\xbd\xfb\xbd\x8f\x42\x3e\x7d\xf9\x84\xfa\x68\x96\x61\xfd\xf0\xbf\x77\x8a\xbb\xd4\xaf\xc3\x0f\x5e\x95\x6f\x6b\x53\xc8\x91\x53\x6a\x17\x7c\x4d\xf1\x47\x7f\x26\xbc\xae\x03\x68\xb1\xf6\x6b\x8d\xb5\x9b\xd8\x16\x66\x93\x6a\x47\x0d\xf5\x1a\xc8\xe4\x54\x7b\x52\xc3\xa2\x4f\xbc\xf9\x19\x97\x9f\xa5\x73\x5f\xfb\xd0\x7d\xf4\xf2\x2e\x0a\xbe\xfa\x6c\x6e\x7f\x31\xff\xe0\x77\xc4\xcc\xeb\x83\x67\xf8\x9d\x5f\xc9\x3b\x3f\x9d\x61\xff\xbc\x0e\xd5\xe1\x79\x06\x4c\x17\x73\x02\xfc\x3e\xfc\x19\xab\xa0\xd7\xe1\xf7\xf2\x64\x35\x0b\xfc\xa6\x3e\x6d\x2b\xe9\x49\xb8\xa4\xf8\x29\x75\x3c\x2e\x39\x76\x4f\xdd\xae\xad\x9b\xf3\xc6\x70\x1c\x5b\xd5\x21\xac\x05\xc1\x3b\x73\xfc\x89\x6e\xb1\xb9\x4c\x8c\x82\x92\x2f\x02\x9c\x24\xd1\x74\x86\x35\xed\x17\x29\xbe\x67\x48\x25\x81\x37\x88\xf1\x08\x07\x60\x24\x37\x00\x7d\x4b\xcb\x14\x8e\x0a\xc7\x20\xc6\x9a\xe7\xeb\x87\xf5\x7a\x77\xd7\x8d\x64\x46\xa0\x9a\xa6\x91\x2c\xbc\x72\xca\xf0\x3e\x07\x7d\x47\x58\xb1\xc1\x60\x17\x3e\x83\xdd\x8f\x43\x58\xec\x68\x4b\x58\x7d\x64\xa5\xf2\x00\xd9\x0d\x63\xb0\xc1\x3a\x09\x80\x2b\x1c\x80\xe7\x27\x9b\x46\xdd\x00\xc9\x86\x0b\x9f\x15\x5b\x53\x0c\xc7\xea\xca\x10\x61\x77\x39\xd9\x25\xd7\xfa\xe2\x12\xec\x83\x86\x75\x33\x70\x9a\x6b\xe4\x0b\x94\x08\x6b\xa7\xd9\x5c\xa2\x12\xc2\x26\x79\xe4\x89\x2e\x12\x77\xe0\xef\x82\xe0\x4d\xbf\x1f\x74\x09\xef\xf5\x82\xc1\x40\xbe\x4c\x98\xdc\xe3\x92\x94\x26\x41\x4d\xec\xc6\x78\x88\xb3\xb7\xd0\x09\xdc\x43\x69\x8a\x9f\x50\xcb\xdf\x26\x0c\xdb\x95\x01\x4c\x1a\x49\x4b\x13\x8e\x35\x06\x06\x9f\xc8\x9f\xef\x3b\xda\xec\xbb\x11\x3a\x07\xb3\x37\xa1\xf1\x93\x36\xe1\x8a\xbd\x1a\x65\x93\x17\xd1\x07\x04\xa2\x92\xda\x97\x1a\xb7\x9a\xfd\x7c\xca\x1d\x77\x56\x16\x79\x8e\xb8\xe1\xca\x1e\x34\xd6\xf1\xc4\xbc\xd4\x76\xd5\xbc\xd7\xfb\x04\x16\x3a\x26\x8e\x72\x3e\x0a\x22\x51\x55\xe0\x7a\x94\x61\x8e\x25\xb6\xd9\x11\xf2\x37\xbe\x4c\xbd\xab\x66\x72\xdd\xd0\xa0\xad\x45\x77\xc9\xad\x89\x1e\x69\x2b\x9a\xe0\x54\x5d\x5f\xe0\x8e\x10\xe6\xc4\xce\x28\xb8\x11\x06\xa2\x54\x92\x67\x97\xf3\x43\x63\x1c\xdd\xd3\x13\x17\x3e\x6b\xfa\x7c\xa3\x2e\x88\x8d\xd7\x6d\x88\x35\xfa\xb6\x84\xbc\x41\x9c\x70\x60\xfa\xdb\x2b\xdd\xac\x4b\x16\x54\x5f\xfe\x9a\x0b\x14\xae\x6f\x14\x60\xc7\x62\xe0\x40\x4f\xe5\x42\xb8\xd4\xd7\x23\x36\x89\xcd\x22\xe3\xcd\x4d\x84\x4d\xaf\xcc\xf0\xe9\xd4\x78\x41\x18\x21\xc9\x81\xdb\xe7\x52\x2a\x51\x55\xa2\xf5\xb7\xe4\x72\xe9\x87\x3e\xa7\xca\xcd\xe7\xed\x16\x90\xa3\x0b\x98\xa8\x63\x66\x7f\x1c\x8d\x14\x37\x5d\x22\x6d\x79\xc6\xba\x83\xc5\xe0\x4a\x74\x91\x7e\x35\x71\x64\x20\xaf\xd7\x5e\xc7\x05\x1a\x52\x9f\x77\xd6\x84\xc8\x0f\x58\x1b\x01\x62\x3b\x98\x68\xbb\x3d\x9c\x62\x2b\x6d\xe5\xc7\xc0\xc4\x42\x93\x72\xbb\x8d\xa1\x09\x9a\x6d\xdf\xd5\xe7\xe7\xed\x76\x01\x56\x4e\x8b\x61\xca\x37\xf3\x8c\x6a\x2d\x6d\x48\x34\xe1\x6a\xb9\x4c\xb8\xbe\x65\xea\x87\x8b\xc9\x28\x1a\xa3\xa8\xd6\x94\xc9\x28\x8a\xeb\x41\x20\x16\x0d\xf2\xcf\x7a\xe3\x47\xde\x9c\x9a\xc4\xd1\xd1\xd7\x31\x72\xba\x0f\x2f\xf2\xf5\x46\x44\x30\xfd\x74\xb6\xce\xf0\xeb\x49\x64\xf2\x46\xdb\xcb\xbb\xed\x65\x85\x7e\x73\x88\x01\xe5\x3f\x55\xb8\x08\xf4\xb5\xa3\x4c\x99\x89\x0c\x0e\xbf\x0e\x6a\xb1\xcf\xf3\xd4\xc6\x7d\x7d\x18\xe0\x8c\xe5\x54\x47\xb9\x3c\x87\x01\x5e\xf0\x2c\x8d\x82\x79\x01\xf6\x92\x41\x6c\xfe\x9b\x22\x4e\x3e\x52\x51\x46\x41\x88\xa6\xb3\xbb\xea\xb7\xbf\xbd\x0c\x2e\x83\xbf\xff\x3d\xc0\x4b\x9a\xad\x69\x01\x3b\x54\x36\x01\xe6\x4c\x10\xd5\xe4\xac\x15\xbf\x06\xf4\x35\x36\xf0\xf1\x83\x36\x27\xf0\x69\x5d\xd0\xb2\x64\x3c\x7f\x92\x65\xfc\x86\xa6\x91\xc0\xe5\x47\xb6\x7e\x6e\xc3\x5b\x76\x46\xb8\x15\xaa\xdf\x07\x1d\x88\x2e\x79\xd1\xeb\x89\x2e\x79\xb6\xdd\xba\x1b\x21\xd0\xe0\x00\xeb\x3d\xac\x14\xb4\xf8\x0e\xc0\x0c\x03\x23\x92\x5d\x06\xb8\x06\x25\x88\x66\xcf\x0e\x5b\x85\xfc\xfd\x74\x7e\xa6\xd6\xc4\x34\x59\x7d\x51\xe2\x78\xbd\xce\x58\x02\xfb\xd2\x17\x57\xe0\xe7\xf9\x34\xf8\x67\x72\xfd\x53\xd0\xc9\x31\xc5\xfa\xaa\xbb\x39\xb2\xa0\x1b\x71\x3f\x98\xff\x4a\xf6\x2c\xed\xdf\x9b\x3f\x4b\xdb\x4a\x80\x81\x70\xb2\xf8\xad\xb9\x5d\xf4\xe7\x60\xf8\x65\x05\x55\x20\x37\xce\x72\x1a\x06\xbe\x02\xcd\x74\x86\xbd\xab\xf4\x9a\x1a\x85\x96\xf3\x37\x0b\xdb\xe9\x5e\x54\x5e\x59\xff\x8d\xae\xe6\xb4\x38\xe4\x45\x4a\x0b\x9a\x0e\x4a\x2a\x0e\x41\xce\x28\xc0\x53\x7d\xbf\x57\x06\x33\xbc\x57\x55\x43\x3b\xee\x54\xa5\xb9\x2b\x28\x1c\xbc\x7f\x4f\xcb\x1f\xd4\x1d\x1f\xbe\x03\xc1\x65\x68\x85\xf6\x7c\xa0\xa8\xd7\x03\x41\x9e\xcb\xda\x87\xef\xdf\xbf\x56\xf5\xbf\xa5\xe2\xfd\xfb\xed\x56\x85\xba\x30\x6c\xdd\xd1\x13\xe1\xc1\x0e\xa0\x0f\xe2\x0f\xf1\xa7\xc3\x81\x96\xe9\x3e\x5c\x17\x7c\xc5\x4a\xfa\x85\xe0\xfb\x9a\x26\x66\x63\x08\x05\x69\xd1\x78\x79\x7b\xbb\x9a\xf3\x4c\x6e\x8d\xf0\xd2\x8c\x18\x32\xa1\x76\x93\x49\xcb\xb5\x95\xd1\xc5\x69\x77\x1b\xd0\xeb\xdd\x53\x1d\xc8\x52\x94\xa2\xd8\x24\x82\x17\x84\x10\x1b\xde\x35\xef\x4e\x95\x7b\x62\x60\x8b\x6c\x85\xa8\xe6\x90\xea\xf3\x96\x45\x3c\x6f\x24\x07\xc5\x90\x5a\xa1\x44\xe2\x7f\x6c\xb7\xdd\x31\x2e\x24\x60\x0b\x76\xb5\x51\xf1\xdd\x11\x0e\x60\x94\x03\x06\x3a\xdf\x61\x31\xbc\x29\x98\xd0\x71\x08\xef\x9b\x27\xc5\xf0\x23\xbd\xad\x5b\x39\x2e\x94\xc0\xb9\x96\xf2\xc9\x7d\xd3\x40\x44\xee\x68\x7e\x7f\x59\x6b\x41\x75\x97\x0a\x6c\x11\xaa\x19\x06\x26\x52\x9c\x15\xba\x1f\xe9\x82\x16\x34\x4f\xa8\x36\x47\x27\x96\xac\xec\x2c\xe3\x32\xff\xad\xe8\xcc\x29\xcd\x3b\x2c\x67\x82\xc5\x19\x2b\x69\xda\x19\x74\x40\x49\x22\x44\xb5\x14\x49\x9c\x65\x34\x0d\x3c\xa7\x55\x21\x45\x51\xde\x30\x83\xe6\x1a\x10\x32\x12\x58\x4d\x0d\x07\xef\x8f\x74\x21\xf7\xe3\x5e\x4f\xbf\x0c\xaf\xa8\x98\x78\xef\x7b\x7c\x4d\xed\x9a\x88\x39\xef\xea\xae\x75\x1a\xfd\x75\xc2\x5c\xa9\xf6\xcb\xf4\xbd\x9e\x92\x6d\x23\x21\x25\xe0\xd6\xf4\x1c\x9d\x7b\xad\xc0\xa2\xee\x31\x48\x97\x7b\x45\x85\x57\xda\x33\x8d\x92\x78\x11\x16\xee\xc4\xd2\x61\x00\x3f\x3c\x55\x7d\x39\x8a\x98\xf2\x46\x5b\xc9\x49\x28\xdb\xb0\xdd\xd6\xd8\xd5\xde\x82\xe3\xa6\xae\x92\x8a\x37\xa6\x19\xaf\x17\x13\x07\x81\x17\xda\xae\x9c\xf9\xfe\x3d\xb4\x5f\x22\x8f\xd6\x5c\x72\x1d\xd4\x17\x43\xec\x13\x83\x61\xdc\x0e\xc2\x76\xdb\x46\x3a\xfa\xf5\xc9\x23\x91\x6a\x21\xaa\x7e\x29\x32\xf4\xd0\x9a\x46\x88\x4a\x5d\xa6\x26\xe0\xed\xeb\xc2\xb5\x18\x2e\xb2\xf6\x11\xc3\x9a\x05\xc4\x9a\xf1\x45\x49\x44\xe9\x19\xff\x34\xce\x73\x2e\x60\x16\x77\xe2\x0e\x48\x77\x74\xe2\xb2\x13\x77\x9c\x7a\x53\xa5\x1c\xac\x0b\x84\x0b\xf5\x06\xfe\x9b\x60\x54\xb5\xe7\xf5\x5c\xcb\xce\x96\x78\x83\xb3\x1d\x97\xc6\x8e\xe7\xb2\xb3\x4a\x85\x9d\x82\xa2\x1d\xbc\xb7\x72\xc5\x75\x1c\x05\xd7\x59\x6d\x4a\xd1\xa1\x4c\x2c\x69\xd1\x99\x53\x38\x3b\x77\x78\x51\x83\xf7\xc0\x73\x18\xdf\x70\x24\x0d\x76\x5c\x6c\x24\xbe\xf3\x70\x69\xa4\xc7\x81\x62\x83\xa7\xa2\xee\x08\xfb\x38\x2d\x52\xfe\xfd\x45\xaf\xa7\xa6\x8a\x24\xed\xd5\xc6\xf4\xe3\xdb\x3f\xbe\x19\xbe\x51\x1b\x0d\xc2\x25\x11\x38\xdc\x90\xe9\xdd\x47\x7a\x1b\x05\x62\x49\xf3\x00\xab\xb2\xbd\x2e\xb1\xba\x80\x31\x61\x21\x0f\x3d\xa8\x10\xd6\x79\x64\xe7\x36\xfa\xd9\x73\xb0\x1d\x0f\x3f\x2d\x0b\x02\x22\xa9\x9f\x96\x05\x8e\xab\x0a\x7c\xf3\x87\xa5\xd7\xbe\x0d\xc2\x19\x84\xe1\x0c\x61\x51\x85\xe8\xc0\x4d\xb0\xf2\x33\xfb\x26\x50\x1b\x4d\x72\xe2\x33\x79\x36\x82\x65\xe5\xe1\x15\x15\x83\x25\x8d\x53\x5a\xfc\x9b\x68\x06\x6f\x99\xec\x4c\x32\x35\x20\xac\x7c\xc5\xe1\x4a\xce\x90\x0e\x3a\x40\x58\x09\x4d\xb5\xdf\xa9\xc8\x27\xa1\x86\xe0\x23\xbd\x2d\x25\x1e\x04\xc7\xf4\x6d\xf2\x26\x0d\xa7\xd2\x84\x00\xc7\xc6\x0b\xf1\xac\xef\x4d\xe8\x34\x9f\x19\xb6\xdc\x17\x75\x1c\x2b\x07\x46\xcb\xe8\xbf\xae\xdf\x76\x99\xbb\x96\x58\xf8\x22\xa0\x41\x85\x79\x50\xd0\x72\xcd\xf3\x92\xea\x81\x2f\xff\x6b\x5b\xa0\x2d\x3e\x55\x07\x75\x23\xa9\x07\x4e\xdf\x03\x1c\x31\x09\x34\x2c\x68\xba\x49\x68\xd8\xa6\x82\x56\x10\x61\x3c\xca\x81\x4c\x4c\xd3\xfa\xaa\xb2\x93\xc3\x4a\xf8\x97\xb3\xc4\x6d\x95\x39\x29\x90\xbf\x33\x28\x59\xb1\x3a\x1d\xd8\x61\xc6\xcb\x3d\x4c\xcb\x60\xaa\x88\x98\xce\x13\x73\x25\x3d\x0b\x08\x21\x3b\x7b\xb7\xe0\xda\x57\x82\xda\xb5\x6d\xad\x0a\x9a\x45\xc1\x57\x72\x13\x03\x47\x7a\xde\x3a\x6d\xc5\xa5\x2f\xf2\xeb\x38\x63\x69\x27\x16\x82\xae\xd6\xa2\x23\x78\x27\xa5\x0a\xfd\x6d\x0a\xda\xc9\x79\x3e\x00\x60\xe7\x99\xdb\x39\x24\xf6\x07\xd7\x2f\xd3\xd1\x0c\xc7\xd6\x9c\xda\x18\x1d\x70\xc2\x87\xa2\x60\xab\xd0\x59\x4a\xf9\xc0\x59\x0e\x9d\x67\x22\x34\xac\x65\xaf\x17\xd2\x29\x9f\x91\x12\x61\x5a\xe1\x1c\xac\x9f\x3d\xfd\xf1\xe5\xb7\xfe\x2e\x27\x48\x70\x59\x5c\xe6\xc1\x81\x8e\xfa\x1c\x5d\xaf\x66\xdf\xa6\xc8\x06\x8a\x31\xf0\x6f\x9c\x72\x30\xc5\x7f\xfa\xf1\x25\xc9\x31\x1d\xb2\xf2\xdb\x4d\x96\xc9\xaf\xdd\x35\xd4\xed\x1a\x91\x30\x01\x6d\x5c\xc6\xd7\xf4\x6d\xbc\xa2\xdf\xf1\xb2\x89\xaa\x14\xf9\x26\xf3\x62\x46\xf2\x50\x78\x56\x60\x61\xf0\x13\x9e\x11\xb0\xc3\xa2\x3f\x7a\xbd\x02\x9c\x66\x2a\xe1\x77\xc2\xec\x07\x58\x07\xe5\x85\x50\xa9\x79\x21\x2a\xdd\x9d\x87\x7f\x0b\x97\x42\xac\xb7\xf2\x51\x22\x4f\xc7\xd3\x71\x39\x40\xd4\xd0\x11\xa3\x76\xe9\x7f\x1b\x97\xe2\x1b\xce\xad\x30\xe3\x1e\x37\xb5\x41\x1c\xa0\x83\x7c\xb8\x2c\xe8\x82\x50\x2c\x48\xae\xf4\x4a\x04\x31\xf9\x87\xd6\x94\xc0\xa6\xc8\x02\xa4\x3a\xd2\xf9\x2c\xba\x93\x39\x23\x01\x05\x60\xd3\xd0\x48\xd8\x36\x63\xd3\xc6\x48\xd8\xe6\x62\xd0\x3d\x16\xd0\x52\xbc\x8e\xc5\x52\xc7\x9b\x57\xac\x7c\x01\x45\xc6\x29\x10\x5e\xc6\xa5\xfc\x92\x7f\xd5\x1e\x8c\x26\x1f\x03\x09\x2a\x2d\x85\x3f\x8b\xb0\x9f\x68\xc5\x3e\xb1\xbc\xac\xa7\x9d\x35\x74\x59\x7f\x2d\xdc\xe6\x2d\x0b\xb3\x47\xe9\xd2\xd4\xdd\x6a\x28\x4c\x52\x7f\x47\xcf\xdb\x5b\x07\x4a\x6d\x5f\xba\x3a\xfe\x97\x3c\xff\xfe\xba\xd4\xf2\x7f\xd4\xb9\xf5\x3f\x8c\x70\x2f\x15\xe1\x5e\x3f\x74\xea\xdd\x67\x77\xce\xfd\x10\xaf\x27\xb2\x59\x3f\xc4\x6b\x4d\xc7\x1d\xd8\x03\x6a\x63\x94\x94\x5d\x57\x42\xb7\xdb\x30\x27\x14\x0f\xc6\x84\x90\x6f\x75\x92\xc6\x1e\x9e\x23\xa7\x17\x38\xcd\x63\xc1\xae\x69\x27\xe1\x29\x9d\x05\xc8\xd1\x14\x6a\xed\x1f\xb4\x77\x3e\xfd\x15\xbb\xdc\xce\xb0\xae\xf1\x24\x06\xb8\xd2\xa3\x34\xe0\xe4\x2c\x91\x36\x9c\x85\xe1\xf6\xcc\x9f\xe3\x76\xdd\x82\x9b\x2a\x6b\x30\x70\x13\xea\xe3\x8b\x1b\x28\x27\x0f\xb8\x77\x98\xe9\x67\xc6\xb8\xc0\x8e\xeb\x14\x75\xc7\x9f\x1b\xf1\x32\x2c\x70\xfb\x39\xdf\xe3\xc7\xc4\x0d\xdf\xb9\x6d\x1b\xa2\x66\xc4\x6c\xb7\x5d\xc3\x92\xb1\xc0\x39\xb3\xd1\x6c\x11\xee\xc4\x0e\xcb\x65\xbc\xaa\x25\x69\x99\x67\x6f\x0a\xfe\xe9\xd6\xa9\xb3\x79\xfe\x3f\x9f\xc5\x82\xee\x25\x06\x77\x2a\x0b\x65\xf2\x9d\x13\x1b\xe8\xda\x29\xa7\x9e\xd4\x77\x13\x1a\xa2\xc9\x4e\x09\x7b\xb8\x4c\x53\x39\x75\x66\x07\x05\x08\x51\x6a\x85\x3e\xe0\xf6\xe8\x9b\x4d\x7a\x13\xda\xc9\x3e\x67\x79\xaa\x93\xc8\xa9\xe2\xce\x43\x72\xf5\x31\x9c\xfb\x07\x5d\x56\xa1\x76\xf5\x40\xdf\x3c\xb3\xcf\x95\x29\x7f\x0d\xae\x8c\x93\x19\xf4\xf6\xb8\xcd\x7f\x21\xcb\xe9\x9f\xa0\x0c\x58\xf9\xe4\x43\xfc\x09\x16\x3a\x79\x0f\xdf\x3f\xe5\xf1\x46\x2c\x79\xc1\x7e\xa6\xa9\x0a\x6f\x01\xea\x7d\x48\xd1\xa4\xb6\xb3\x2d\xa2\x93\x91\x44\x4e\xb4\x52\xb4\x2c\x2f\xe6\x2c\x4d\x69\xfe\x0b\x8a\x58\x46\x27\xa3\x63\x57\x84\x3e\x56\xfc\x82\x02\x92\xe8\xe4\xe8\xc8\x15\xf0\x4d\x9c\xfe\xa8\x08\xaa\x5f\x50\xc6\x3a\x3a\x19\x8d\x5c\x19\xaf\xb8\xf8\x96\x6f\xf2\x5f\x02\x45\x1a\x9d\x8c\x4e\x5c\x09\xbf\xe3\x39\xfd\x05\xb9\x57\xd1\xc9\xd8\xab\xff\x1d\x5b\x51\xbe\xd9\xdf\x80\x5a\xde\x5b\x95\xe7\xc9\x9c\x17\xbf\xa4\xc9\xd7\x91\x57\xe1\x53\x9e\x2f\x32\x96\xfc\x92\xfc\x57\xd1\xc9\xe8\xcc\x95\xf0\x96\x16\xd7\xb4\xf8\x05\xf9\xe7\x11\x7d\x4c\x1e\x8c\x46\xbd\x1e\xbd\x78\x38\x1a\xe9\x52\x36\x49\x42\xcb\x72\xe7\x38\x2e\x08\x3d\xd8\x65\x29\x80\x6f\x51\x38\x05\xbc\xc8\xe5\x56\x32\x1e\x79\xfe\x44\x1e\x93\x23\x59\xb8\xb8\x38\x1e\x8d\xb6\xdb\x63\x18\x1c\x21\x6b\xf1\x21\xa5\xc3\x7a\xcb\xe9\xd0\xeb\x46\x3a\xac\x8d\x03\x1d\xba\x41\xa5\xc3\xfa\x14\xa1\xc3\xe6\xb4\xa3\xc3\xc6\x62\xa0\xc3\xdd\x35\x46\x87\xb5\xe9\x4e\x87\x6e\x59\x7a\x44\x7b\xb6\x97\x63\x6b\xed\x7f\xed\x28\x58\x3f\x1e\xf7\x7a\x76\x27\x76\x72\xea\xe3\xd9\xc4\xff\x88\x02\x59\x61\x47\x89\x2a\x80\x20\x70\xcc\x24\x19\x87\xe3\xdd\x02\x8f\xbc\x9c\x47\xb3\x3a\x05\xd3\xc9\x2d\x53\x37\x64\x44\xf3\x75\x37\x75\xbe\x2e\x47\x48\x1e\xd9\x6e\x33\x1e\xa7\x84\x62\x06\xc2\x41\x9b\x92\xc4\x98\x99\x9d\x9c\x85\x02\xf3\x10\xda\x8f\x2c\x87\xd1\x75\x49\xa6\x05\x43\xf6\xf7\xc6\x0e\x34\xed\xa0\x50\x1c\xe8\xb1\xea\xdc\xc4\x65\xa7\xa0\x1f\xc0\x30\x53\x67\x4e\x93\x58\x1e\x5f\x98\x0a\x67\x6a\x6c\x02\x7c\x72\x74\xe4\x14\x0c\x24\x90\x8e\xff\x59\x1b\xbf\xe4\x40\xd9\x44\xff\x35\x00\x84\x81\x31\xf3\xa5\x3e\x38\x27\xa3\xf1\x3e\x70\x5a\xd0\xf8\x81\xf2\x05\xf2\x6f\xef\xb4\x4d\x49\x8b\x0e\x2b\x3b\xf2\x44\xb3\xa6\xc5\x8a\x09\x19\x2b\xb8\xfc\x58\xf0\x62\xd5\x81\x53\x85\x9d\x6a\x43\xd9\x8e\xe3\x7d\xed\x68\xac\x9d\xa5\xb6\xaf\xfa\x6b\x37\x42\xc2\x15\x03\x9c\x2c\x4f\x78\x51\xd0\x44\x64\xb7\x00\xd9\x68\x1f\x64\xcd\x75\xbe\x3e\x50\xe6\xed\x7f\x1d\xd0\x94\xdf\x28\x80\x4d\xf6\xe3\x42\x62\x18\x80\xe7\x64\x1f\x3c\x75\x3c\x94\x1e\x28\x8b\xf9\xbf\x2a\x34\x30\xa8\x9d\x8c\xe7\x57\xb4\xe8\xc4\xd7\x31\xcb\x24\x51\x2c\xc1\x1a\xef\xed\x26\x87\x2a\x57\x07\xca\xcd\xe0\x1e\x90\xbe\x18\x22\xa0\xe9\x82\x77\x4b\xda\x89\xeb\x38\x4b\xb0\x15\x4d\x3b\x7c\x23\x02\x3c\xd8\xbb\x30\x6a\x98\xfc\x16\x40\xba\xfe\xf7\x81\x24\xc7\x2f\x96\x1b\x89\x5c\xae\x7b\xfb\xc8\xdb\x6a\xae\x0f\xb4\xb7\xc4\x5f\x61\xdc\x5a\xe0\x51\x98\xa3\x93\x6e\xa8\x5c\x90\x71\x27\xd1\x9b\x9e\x9c\x59\x67\xfb\xc0\xab\xef\x8c\x57\x07\xca\x9c\xcd\xde\xcb\x43\xf6\x2f\x63\x12\x0d\x5e\x09\xfb\x73\x47\x5b\x51\x62\xed\xe0\x39\x6d\x81\x7d\x64\x51\x56\xd5\xb7\xfa\x79\x3b\x3f\x6b\x47\x1a\xa5\xc6\xa6\xfb\xf7\xb0\xe6\xf6\x66\x30\x92\xf5\xf8\xce\x3f\x98\x8e\x70\xed\xc6\xde\xf1\xbd\x0c\xaf\xae\xaa\x89\xef\x7c\x86\xcb\xb8\xaf\xa9\x86\xb1\xe7\x87\x29\xae\xb8\x7c\xad\x87\x7f\xe1\xa5\xcd\x17\xde\xea\x7d\x29\x43\xfe\xcb\xee\xba\xee\x15\xdb\x99\xb5\xc8\x2d\x63\x8e\x63\x5c\xee\xe3\x5c\xd6\x4f\x75\xff\x59\x9c\xcb\x5f\x87\xa7\x9c\x69\x9e\xf2\x3b\x5a\x0a\x9c\x90\xc3\xbf\x79\x42\x68\x97\x87\xe1\x24\xba\xce\xd3\xcb\x61\xbc\x66\x97\x7d\x34\xf9\x50\xf2\xfc\x90\xb9\xee\x5d\xf8\xd7\x1d\xe1\x08\x2c\xef\x2b\x56\x74\x48\x51\xaf\xe7\xae\x40\x12\x5f\xc3\xcc\xbb\x67\x3c\x0c\xe4\x19\xc4\x89\xc8\x7a\x1a\x65\x7b\x53\x51\x2b\x85\xe9\xab\x88\xd5\x4e\xdf\xe5\x66\xae\x26\x54\xe8\xa7\x59\xd5\xd3\x68\xd3\xbd\xb5\x62\x6e\xbd\x24\x4b\x68\x43\x48\x89\x2c\x1b\xe1\xb5\xf9\x5c\xc1\x27\xad\xd4\x2e\x34\x3a\x50\xfd\x27\x68\x29\x58\x7e\xd5\xeb\x65\x56\xfa\xf3\x4f\xb1\x9c\x3d\xe1\xee\xd2\x97\x47\xb7\x6b\x2d\xee\x76\xa5\xfb\xff\x07\xb9\xd8\x0d\xeb\xeb\x0e\xf4\x25\x72\xad\x82\x51\x97\x6c\xbc\xb9\xb9\x19\x48\xca\x67\xb0\x29\x32\x9a\x27\x3c\xa5\xe9\x79\x47\x76\x4d\x49\x05\xf9\xe9\xdd\xb7\x83\x47\x01\xd6\x6b\x58\x93\xf9\x70\x75\x62\xde\x9d\x8d\x54\x1d\x20\x8a\x4d\x29\x68\xfa\x1d\x2f\x85\xcd\xa0\xb1\x4d\xd4\x72\x35\xaa\xa4\x0c\xf8\x5a\x06\x2b\x7e\x0c\xd6\x92\x07\xef\x57\xf1\x47\xaa\xb7\x86\x30\x87\xab\x2c\x7a\xd3\x29\xcd\x94\x68\xca\x59\x0f\xc5\x92\xe6\x2e\xd0\x95\x3f\x34\xa8\xe8\x80\x86\x39\xaa\xe4\xde\x23\xa7\xd0\xee\x1d\x2f\x75\x29\x45\xa8\x1c\x29\x79\xe8\x23\xea\x04\x72\x91\x25\xb1\x08\x73\x25\x8b\x1e\x74\x02\xe4\x82\x36\x45\x86\x83\x8e\x29\xc1\xf3\x65\xc9\x40\x98\xa2\x00\x49\x0a\x56\xe1\x22\xbe\xf9\xb2\x7e\xb0\x67\xd7\x96\xce\xa8\xb0\x1f\xb0\x23\x62\xcc\xa1\x34\x1c\x13\x3a\x5c\x51\xb1\xe4\xe9\x76\x4b\x01\xe6\xed\x36\xf8\xdd\xf3\x77\x01\xce\xc8\x9d\x8a\x88\x62\x10\xfd\x8c\x62\xbc\x29\xb2\x88\xca\x56\x54\xe7\x6d\x57\xd8\x44\x0c\xbd\x49\x04\x17\xda\x69\x2c\x62\x50\x35\xd0\xd3\xc3\x48\xe5\xcb\x1a\xba\xa0\x82\xd5\x0d\xbb\x0b\xb8\x8c\xe8\x2e\xc2\x70\x84\x99\x5b\xce\x1c\x07\x4f\x55\x71\x03\x59\x5e\x00\xce\x26\x9d\x26\x0e\xd9\x84\x05\xaa\x50\x18\x63\xb5\x48\x94\xff\xcf\xef\xdf\xbe\x7e\xa5\xad\xd5\xb1\xc5\xad\x0e\x45\x08\x5f\xf7\xc9\x58\x9f\x06\xc3\x11\xce\x3d\xa4\x01\xa3\x42\x11\x5e\xee\x9f\x3b\x39\xba\x4b\x86\x29\xcf\xbd\x8b\x7b\xa6\xb6\x00\xa5\x1c\xc1\x87\xca\x04\xfa\x8f\x7a\x64\xc3\x52\x9f\x55\x71\x38\xc2\x85\xab\xab\x1c\x5e\x51\xf1\x24\xcb\x4c\xba\xef\x54\xa7\x84\x08\x61\x86\x33\xe5\xca\x64\x84\x85\xcf\x6d\x43\xe1\x06\x19\xb7\x64\x77\xfa\x30\x1c\x31\x2c\xe8\x27\x50\xaa\xda\x94\x51\x8c\x3f\xfc\xe3\xcf\xdf\xfd\x18\x95\xd8\x4c\xac\x68\x53\x69\x0c\x51\x6c\x94\xe3\x44\xc5\xdf\xcc\x71\xe2\x79\x8b\x5e\xfc\xcb\xe5\x51\xbc\x40\x55\x85\x86\x92\x58\xf4\xbb\x0b\x1c\x0f\xda\x0c\x2f\xf2\x67\x74\xbe\xb9\xf2\x71\x12\x50\x9c\x9a\x6a\x53\x13\x82\xa6\x9d\x38\xef\xd0\xd5\x5a\xdc\x76\xd4\xe8\xc9\xa3\x96\x5b\x4e\xd9\xee\x72\xca\xd4\x72\xc2\x9d\x9b\x25\x4b\x96\x9d\x44\x5d\x8d\xcd\x69\x07\x88\x0b\x79\x40\x03\xca\x55\xc9\x1c\xc0\xb4\xe8\xfc\xa8\x11\xb1\xba\x92\x30\xf7\x11\x77\xd5\x30\x40\x38\x80\x6c\x85\x22\x22\x89\xb6\xec\x6a\x7a\xe0\x1d\xfd\x24\x34\xf2\x2c\xc1\x11\x1a\x24\x86\x01\xb2\x63\x5e\x4f\x8d\xb6\xdb\xf8\xa0\x24\x81\x50\xc7\x08\x28\x11\x2e\x73\x44\xed\x64\x11\x05\x40\xf5\xfb\xd1\x8e\xc8\x8f\x76\xe6\x15\x6d\x9f\x57\x74\xff\xbc\xda\xe0\xcc\xa8\xc7\xd8\xe1\xde\xf8\xc3\xcd\xf4\x70\x53\x0c\x4d\x7f\xb7\x2c\xf8\x4d\x1e\xc5\x6e\xf0\xcb\x7b\x26\x13\x1a\xc6\xd9\x4d\x7c\x5b\xfa\x83\x7b\x3d\x20\xe3\xfd\x78\x91\xee\x0e\x24\xac\x40\x87\x0b\x97\x80\x0b\x13\xbc\xac\xf0\x9a\xef\x6c\x08\x3e\xc2\xd3\x5b\x46\xa8\xad\x2a\xbe\x8f\xd3\x54\x22\x8a\x77\xfc\xb5\x42\x91\xdf\xf2\x22\x14\x38\x78\xf3\xfa\xed\xbb\x00\xa1\x0a\xaf\x37\xbf\x46\x69\x3f\xe9\xc2\xc0\xe6\xfa\xbf\x5e\xdc\x93\x77\x4f\xbf\x83\x02\x53\x9a\xfd\xeb\xc5\x3d\x7b\xfe\xf2\xf9\xbb\xe7\xa6\x3c\x5a\x53\xba\x6c\x16\x99\x52\x25\x86\x5b\xd5\x4f\x0b\xea\x42\x71\x97\x3d\xb8\xdd\x0e\xc6\x12\x65\xbb\xdb\xc3\xc3\xa0\xe6\x51\x1b\x26\x89\x91\xf5\x11\x9d\x92\xd2\x55\xd9\xb9\xe5\x9b\x8e\x28\x98\x62\xec\x48\x7a\xf9\xef\x72\xae\xfe\x5d\x7e\xc9\xdd\xa9\x13\x77\x74\xcb\xba\x9d\x9f\x4a\xda\x11\x4b\x99\x42\x07\xfd\xbd\xa3\x36\x20\x38\xa4\xd1\x38\x1d\x06\x8d\x0d\x0f\xee\x95\xf5\x0d\x8e\xda\xcd\xdc\x0d\x0e\x6e\xeb\xa2\xd6\xde\x08\x29\xa1\xdb\xed\x5d\x85\x94\x25\x4e\x81\x69\x85\xdf\x5f\x51\xf1\xed\x26\xcb\xf4\x4a\xfa\x2e\x2e\x97\x2d\x4a\x3a\xaa\xc9\x57\x54\xa8\xda\x03\x73\x8e\xb1\x60\xaa\x04\x71\x59\xb2\xab\x3c\xbc\xab\xb0\xc0\x14\x55\x58\xef\xe0\x2d\x05\xfe\x93\x4c\xd9\x3b\xa3\xb6\x1a\x1a\x98\xbc\x2a\x11\x92\xeb\x4b\xd3\x4b\xf3\x0d\xcb\xd2\x9f\x7e\x54\x16\xc5\xb0\xd0\x2d\xae\xed\xfb\x6a\xd3\x7e\xa7\x22\xcc\xeb\x76\xab\x34\x9e\x70\x6d\x8b\x27\x46\xb8\xf1\xb9\x44\xdc\x61\x2d\x0e\x4d\x9a\xbd\xe3\x45\x06\x28\xaa\xd3\x0a\x7a\x3c\x97\x7c\x93\xa5\x6f\x69\x9e\x1a\x0c\x26\xd0\xc4\xd2\x0e\xba\x09\xbb\x23\x13\xda\x24\xb2\x58\x9b\xda\xbc\x81\xc3\x4a\x51\x61\xdb\xf8\x5f\xb5\xe3\xd5\x9e\xcd\x9d\x5c\x16\xf2\x65\xf3\xb4\x0c\xcd\x74\x06\xd4\x90\x24\x8a\x8d\x44\xa8\x37\x6b\x78\x29\xe4\x94\x01\x03\xd7\xeb\xb0\x40\x93\x55\x58\xa0\xa8\xc0\xb9\xf6\x49\x8d\xcc\x45\xa7\x18\x5a\x52\x7a\xb7\x18\x1b\x15\xa0\x03\x26\xcb\x9a\x30\x72\x1b\x32\x14\xad\x43\x26\x09\x24\x46\x56\x21\x43\x35\xaf\xf2\xc1\xdf\xc2\x43\x34\xb1\xb8\x59\xa6\xc6\xb0\xaa\xb5\xcb\x11\xb4\xdd\x6a\x18\x98\x87\x9f\xe1\x50\x22\xfb\x25\x77\x3e\xaf\xcd\x89\x45\x27\xa7\xf2\x4d\x89\xe3\x1d\x06\xa8\xc2\xf5\x6d\x2c\x6a\x1e\xa9\xeb\x78\xc9\x5e\xea\xe8\x4b\xe0\x49\x1e\x85\x9a\xf6\xcd\x79\xb1\x8a\x33\xf6\x73\x73\xeb\x85\x74\x7a\x12\xa9\xf3\xcc\x53\xc5\x9c\x55\xe8\xc8\x54\x23\xb1\xc2\x6e\x74\x43\x2c\xda\xea\x25\x83\x46\xad\x02\x68\x87\x4b\xae\x25\xa8\x11\x27\x6a\xd3\xde\x4d\x50\x20\xab\xfc\xaa\x0b\xa9\xb3\xa8\x9b\x25\x34\x62\x77\xb3\xfb\x17\x07\xcd\xcc\xb5\xb8\xdd\xac\x0d\x16\x74\x33\x77\x33\x7a\xb7\x80\x1a\xcf\xb8\x99\xbd\x1e\xb9\x9b\xd9\x72\x76\x9b\x19\x5d\xc4\x6e\x26\x47\x05\x35\x73\xb9\x98\x66\x9e\x1a\xff\xb1\x99\xad\x1e\xb9\x5b\xa1\xc7\xf9\x6b\x66\xf5\xa3\x0a\x4c\x55\x56\x2d\x3c\x0f\xb9\xaf\x68\x4e\x8b\x58\xd0\x67\x54\x00\xdf\xf4\x07\x5a\x96\xf1\x15\xb5\xf3\xe9\xc0\xc2\x6e\xc8\xfa\xb0\xc0\xf2\xdc\x62\x18\x95\x1c\x0e\x6b\x22\x59\xaa\x23\x71\xdb\x2e\xd5\xc6\xec\x08\x85\xcf\xbf\x54\x8b\x7a\x22\xcc\xe2\x8d\x76\x5d\x63\x4e\x04\x21\x84\x46\x61\xc2\xf3\x92\x67\x74\x78\x13\x17\x79\x18\xf8\xc7\xf1\x0e\xcf\xb3\xdb\x8e\x5a\xaf\xa5\x26\xc5\x4b\x49\x25\x83\x1d\x6c\x5a\x0e\x3b\x01\x16\x38\x00\x16\xbf\xa2\xa3\x25\xf1\xdc\x1d\xc3\xda\xda\xc1\xdf\x2d\x98\x56\xf1\xc1\x89\x3a\x76\x15\x84\x02\x52\x3c\xc8\xc1\xba\x7a\x80\x0b\x52\xec\x43\x90\x32\x5e\xe3\xc1\x66\x02\xbf\x01\x81\x95\xb9\x7f\x02\x46\xed\x01\x39\x1b\x09\x5a\x14\xe6\xc8\x8a\x72\x1a\xbb\xcd\x4d\xf4\x9d\xa3\xed\x36\xec\x76\xd9\x5e\x29\x7c\x31\xf4\x06\x0b\xce\x9f\x95\xcc\x22\x8b\xf1\x25\x6e\xb5\x15\x01\x49\x5e\xb5\x4e\x8f\x16\x34\x08\x78\x47\x01\xed\x1d\x84\x45\xf3\x20\xbc\xdd\x06\xb0\xe3\x76\x6a\xc1\x07\x9c\x78\x1e\xc1\xc0\x6d\x5d\x4d\x37\xa0\xd7\xcb\xed\xd5\xec\x83\xd1\x24\x98\xbe\xd6\x57\x6e\x2f\x21\xf0\xb6\xf3\xdd\xbb\x1f\x5e\xce\x82\xa8\x71\x84\xce\x8d\x80\x75\x60\x37\x8a\x62\x97\x88\x2f\x80\x88\xc7\x1b\x12\xbc\x51\xa7\x8c\x4e\x68\x93\xc7\x60\x27\x48\x77\xf7\x34\x80\xd1\xe9\x3c\xf9\xfe\xc9\x9f\x3b\x86\xab\x6f\x93\x96\xc0\x1f\x31\x27\x42\xff\x90\x20\x8f\x32\x7c\xa6\x37\x95\xcb\x5c\xee\x2a\x2d\x78\x79\x47\xc5\x45\xd3\x45\xea\x54\xbd\x93\x1c\x98\x9a\xb8\x89\x9a\xef\x2f\xa4\x9e\xd6\x94\xe0\x63\xe0\xfb\xf3\xfb\x29\x4d\xee\x06\x06\xbe\xbf\x80\x46\x62\x53\x46\x0d\x0d\xdf\x5f\x42\x2d\xa9\xc9\x6f\xb1\xf1\xfd\x79\x6d\x32\x93\xcf\x3b\xaf\xde\x9b\xd1\xa5\x33\x39\x6b\x28\xf9\xfe\xcc\xb5\xa4\x26\xbf\x87\x97\xef\xcf\xed\x25\xb4\x79\x15\x89\xf1\x99\x7c\x2a\x91\xca\xb3\x7b\xe4\xaf\x61\x37\x4f\x6a\x0e\x16\x90\x91\x35\xd7\xa2\x6f\x9e\x54\x58\x55\xe1\x76\x3a\x66\x47\xfa\xcd\x5c\x8f\x55\x95\x2f\x67\x7d\xf5\xf9\xab\x9b\x72\xb3\x06\x5b\xc7\xff\x76\x2d\x98\x9a\x02\x45\x1b\x57\x59\x82\x23\xbb\x9f\x25\x34\xd2\xa7\x85\x5c\xcb\xb9\x41\x60\x18\xc0\x65\x11\x52\x0c\x63\x95\x22\xe1\xab\xf5\x46\xd0\x74\x18\x67\x2c\x2e\x55\x0a\x5d\xc6\x50\xed\x05\x1e\x4b\xf9\xf3\x59\x3c\xc2\xd8\x72\xa9\xbf\xa0\x22\x73\x96\xc3\xc0\xc1\x68\x17\x4c\x54\x1e\x19\x3e\xc4\x9f\xf4\x11\xb3\xfd\x2c\x5a\x3f\x0d\xba\x6d\xcb\xab\x2e\x40\xde\x09\xbf\x40\xf5\x01\xdf\xa3\x8a\xa2\x07\x3c\xa3\x57\x71\x72\x7b\x68\xa7\xd4\x00\xf8\x38\xf6\x72\x6d\xef\xf5\xdd\xde\x0b\xb1\x7b\xaf\x2e\xeb\x5a\x1c\x7a\xb5\xe4\xff\x61\xd7\x5c\xbe\x08\xbd\x33\xcf\x62\x19\xcf\xf9\xaf\x77\x15\xc6\x5a\x17\xcd\xe7\xd1\x43\xee\xdd\x9e\x37\x38\x37\xdd\xc2\x1d\x40\xbb\xe3\x03\x23\x0c\x67\xa8\x48\x31\x54\xf7\xb6\xbd\x9e\x39\xbc\x2b\x85\x32\x13\x8e\xaa\x90\x91\x9a\xd2\x22\x43\x93\xbb\x2a\x62\x68\xc2\x74\x92\xe1\x2a\x5e\xd7\x6e\x51\xd8\x22\x2c\x42\x81\xcc\x35\xc0\x2e\x0b\xc2\x39\x22\xd0\x32\x5c\x8e\x96\x10\x3a\x08\xe1\xdc\xf3\xa0\x2e\x36\x65\xe4\xd2\x50\x84\x05\x13\x19\x38\xac\x45\x51\xc8\x09\xc3\x75\xe0\xb9\x04\xae\x09\x95\x91\xf6\x0e\x05\x9a\xdc\x57\xe6\x10\xfe\xb7\x5b\xe0\x4a\xcf\xe3\xe4\x23\xcd\x53\x7d\x49\x93\xd2\xb4\x73\xc3\xc4\x12\x98\xd3\x4a\xbc\x20\x05\x22\x2e\x12\xda\xa3\x6e\x7b\x99\x5e\xf3\x10\x80\x2c\xf7\x13\x4b\xcf\x31\x34\x99\xde\x93\x99\x55\xb3\xe8\xde\xf8\x7f\x0a\x60\x56\xcd\xb4\xd7\xa7\x3a\x72\x61\xed\xc8\xa5\x88\x6f\xf6\x62\x8e\xff\x12\x1d\xa4\xfa\xf5\x4b\x53\x80\xc1\x2c\x15\x34\x2c\xe2\x1b\x6d\x9c\xb7\xbd\x1d\x9f\x11\x62\xf8\xff\x56\x5b\xec\x16\xb0\xb7\x3d\x7a\xdb\x34\x32\x16\xbf\x96\xb2\xd8\xff\x72\x68\xdd\x3b\x58\x8b\x9a\x66\x94\x44\x1d\xad\x9a\x51\xe2\x7f\xae\x66\x94\xa8\x69\x46\x79\xd6\x3c\xfe\x27\x98\xaa\xe0\x35\xf6\xf9\x1e\x6b\x19\xff\x76\x53\x15\x4f\x1c\xf9\xf4\x34\x8b\xcb\x92\xb4\xee\xb0\xb1\xde\x8e\x0c\x5d\xb7\xa3\xc1\x88\x4b\x12\xfb\x76\x09\x0e\xd4\x9d\xee\xe7\x44\xfd\xea\x8d\xfb\xf7\x1a\xbc\x60\xa1\x40\xed\xa4\xe5\xae\x15\xf3\xff\x3c\xa5\x39\x6e\xad\x5d\xc4\x35\x19\xef\xda\xd8\x6f\xda\xd1\xa5\x2f\x8f\xe6\xe3\xca\x0f\xff\xd8\xd0\xe2\xf6\xbf\x46\x81\xf6\x3e\x0d\xe7\x89\xdb\x05\xe0\x98\xb1\xab\xb9\x9c\xab\xf3\xd1\xbd\x7a\xb6\xf3\xb8\x64\xc9\x20\x2d\xf8\x3a\xe5\x37\xf9\xa1\xe7\xbc\xbe\x1e\xd3\xb6\x5f\x34\xf2\x1a\xd7\xee\xe5\x7d\xa5\xb4\x67\x55\x7d\x6d\xce\x54\x83\x45\x9c\x65\x92\x38\x19\xb0\xc5\xc0\xf5\xc0\xfd\x79\xe3\x2c\xd9\xc8\xda\x07\x6b\x5e\x32\x98\x5f\x38\xd0\x3d\xd1\x2a\x89\xf7\x6f\x19\x31\x8b\xcf\x14\x05\x5b\x37\xac\x60\xfd\x9b\x92\xd1\xb9\xb8\xd8\xb9\x26\xbd\x20\xe3\xc9\x28\xda\x75\x5e\x87\xce\x85\xb1\x66\x95\x13\xd1\x1f\x5f\x8c\xb7\xdb\xdd\xbc\xa2\x3f\x9e\x68\x27\x25\xee\x9a\x49\xf4\xc7\x60\x58\x33\x47\xce\xd5\x80\x6f\x2f\x04\xc4\x9e\x46\xe7\xec\xa2\x30\x86\xb3\x98\xa9\x8a\x93\x62\xca\x66\x07\x60\xfb\x20\x9f\xf2\x59\x55\xd9\x2d\x05\xc7\x64\x1a\x08\xbe\x0e\x70\x90\xd1\x85\x90\xfd\xcc\xae\x96\xf2\xff\x86\xa5\x62\x19\xe0\x60\x49\x21\x60\x86\x4b\x8d\x41\x9f\x9a\x09\x61\x70\xe8\x5d\x16\xdf\xf2\x8d\x88\xec\x1c\xc6\x22\xbe\x7a\x05\x76\xe3\x02\x5c\xd0\x3c\xa5\xc5\x8b\xfc\x4d\x26\x4f\xe9\x75\x99\x9b\xee\x18\xe1\x6b\x5a\x08\x96\xc4\xd9\x1b\x3d\xd2\x8d\x24\x41\xbc\x11\x1c\xd8\x02\x05\xfb\x99\xe7\xe2\xb3\x09\x0b\xce\xc5\xf3\x6b\x23\xc0\xd6\x48\xb3\xe2\x9b\x92\xc2\xdc\x45\x18\x58\xb7\xef\x0a\x76\x75\x45\x8b\x3f\xc9\xb6\xb6\x00\x27\x54\xb4\x6d\x71\xb3\xbc\xe6\xa2\x51\xc9\x95\xf3\x76\x41\x73\xf1\xa5\x19\x75\x72\xf0\xc8\xae\xa7\xfe\x9e\x66\x3a\x69\x0f\xe5\x3b\x5d\x76\x73\x19\x4d\x5b\x57\x53\x30\xc3\x82\xaf\x95\x9f\x45\x39\xb8\xea\x0d\xc6\x57\xbd\xc2\x10\xab\x57\x35\xca\xea\x9d\x4b\x3c\xff\x56\xdc\x66\xb4\x8c\xee\x2a\x2c\x29\x15\x5f\x88\x58\x5f\x75\x88\x30\xa8\x8d\x6d\x20\xc9\x25\x79\x2c\x76\xf1\x7a\x1a\xc8\x18\x08\x2c\xfd\x40\x1c\xa4\xec\x3a\x30\xb7\x75\xf7\x5c\xe1\x63\x97\x57\x79\x4d\x7f\xf2\xe6\x45\x80\xef\x2a\x3f\xc2\x03\x19\xa2\x0e\x94\x4b\x3b\x48\xb0\x59\xa7\xb1\xa0\x60\x7a\x3a\xbc\xdb\xe4\xec\x1f\x1b\xfa\x22\xd5\x9c\x9f\xab\x0d\x4b\x41\x64\x62\xc9\x4a\x84\x59\xf9\x7a\x4d\xf3\xc8\x35\x40\x13\x69\xd9\xad\x0c\x97\xb4\x18\x98\x98\x4b\x59\x29\x77\xa6\xd4\x4b\x68\x82\x74\x8a\x38\x51\x37\xfb\x77\xdc\x96\x27\xdf\x40\x29\x55\xd7\x05\x56\x46\x55\x14\xbc\xfa\x71\x82\x5f\x5d\x65\x3a\x52\xbd\xfb\xb1\x05\x35\x58\x31\xd2\x22\x21\xe6\xdb\x4b\x25\x0f\x77\x4a\xba\x43\x4f\x86\xff\x97\xbd\xbf\xef\x6e\x1b\xc7\x12\xc4\xe1\xff\xf5\x29\x64\xee\xac\x8a\x18\xc1\x8a\x9c\xea\x73\xe6\x3c\x72\x18\x6d\x2a\x49\x75\x65\x3a\x89\xb3\x49\xaa\x67\xea\x51\x6b\xdd\xb4\x04\xd9\xe8\xd0\xa0\x06\x04\xed\xb8\x2d\x7e\xf7\xdf\xc1\xc5\x0b\x41\x12\x94\x28\xc7\x4e\xa7\xba\x33\x67\xba\x62\x11\xef\xc0\xc5\xc5\x7d\xbf\xaf\x96\x51\xed\xf7\x66\xe3\x85\x9a\x43\x0d\x8c\x87\x8e\xad\x8e\xd9\x35\x13\x26\xb1\x5c\x78\xca\x5e\x31\x2a\x02\xd4\x93\x8f\x3c\xc8\x47\x97\x74\xf9\x9e\x2c\x08\xbd\x22\xcf\x84\x70\x55\x3f\x1a\x72\xb6\x1d\xb5\x3e\xb6\x83\x03\x55\x33\x4d\x96\x2f\xf4\xc6\x62\x61\xbe\xd6\xf6\xbb\xd7\xa8\x1a\x09\x49\x2d\x1c\x90\x69\xcd\x5c\x49\x11\x53\xb0\x07\xaa\x26\x9a\x1c\x88\xc1\x80\x18\x09\x88\xa7\x22\x61\x50\xaf\xc0\xd7\x34\x49\x5e\x90\x4c\xf0\xf4\xe6\x2e\x0b\x72\xaf\x8c\x32\xd0\x95\x30\x8c\x7a\x64\x30\x20\x60\x46\x05\x76\x3a\x99\xa0\x0c\x4c\x6d\x6b\x62\xc9\xf0\xb6\xc5\x8c\xdf\xd8\x41\xbc\x28\x9b\xbe\x5a\x86\xa8\xc0\x19\x69\xb1\x70\xb2\xbc\x8a\x98\xb6\xb5\x06\xe1\x4a\x09\xc1\x4a\x05\xf8\x73\xba\xc8\xdb\xb4\x78\x06\x10\xa0\x8e\x81\x84\xb2\xa0\xbc\xb3\x08\x13\x54\x14\x18\xee\x44\x5d\x58\xe5\xdc\xb9\x4c\x6f\xb4\x3c\xdd\xe6\x38\x4e\x77\x10\x66\x49\x98\xd3\x5c\x0e\x06\x07\x62\xa4\xae\x70\xc5\x50\x56\x4f\x4f\x7e\x0f\x50\x8f\x0d\x06\x07\x47\x20\xbc\x13\x98\xa0\xcd\xa6\x89\x22\x34\x16\x80\xd8\xa6\x45\xa1\x2f\x6a\x93\xcc\xdf\x3a\x63\xb6\x65\xc6\xcc\x99\x31\xab\x4c\x98\x57\x26\xfc\x5c\x0e\xac\xdb\x84\x5c\x4f\x9b\x87\xac\x9c\x76\x73\xf4\xcd\x26\x34\x48\x51\xd3\x3d\x94\x64\xe1\xed\x85\x7d\x4d\x00\xc1\x5f\x55\x7f\xde\xe5\x91\x30\xd8\x77\xcd\xc9\x15\x4d\xf3\xec\xcf\xb5\x67\x3c\xaa\x94\xfe\xd2\x78\xbd\x55\x14\xf7\xf6\xcd\x3f\x92\x03\x20\x64\x62\x3e\xda\xc8\x3f\x40\xaf\x7f\x80\x98\xd1\x92\x53\x99\x2d\x63\x11\x1f\x92\xb3\xe5\x21\x5d\x46\x8e\xd1\xb5\x41\x58\x38\x38\xd4\x8f\xf2\x3c\x40\x60\x0f\x43\x47\x22\x3e\x7b\xc5\x96\xe4\xf3\xd3\xc3\x23\xf9\x73\x25\xc1\x16\xc2\x27\x17\x06\xf1\x56\xf4\x39\xcd\x73\xd4\x67\x16\xa0\x69\x89\xbe\x81\x35\x37\x78\x1e\xf0\xa0\x83\xa6\x5d\xab\xc8\x1a\x3e\xa8\x01\x07\xa9\xc0\x83\x28\xd7\x7d\x4e\x84\x0e\x77\xf4\xd3\xcd\x2b\x85\xe3\x1d\x54\x8e\x30\xdb\x73\x8b\x48\xeb\x16\xad\x24\xbf\xc6\xf4\xc2\x1d\xa4\xa4\x87\x8f\x5a\xbe\x6f\x36\x5b\xe7\xaa\xb0\x76\xd9\x2a\xd0\xc6\x4c\x25\xc8\x3b\xf0\x1a\x34\xa9\xbd\x00\x07\x75\x4a\x31\xc0\x41\x83\x86\x0b\x70\xd0\x0e\x73\x4e\x61\x1d\x5c\x81\xbf\xa8\x10\x33\x3d\x6e\xf7\x17\xa6\x68\x4c\xaf\xec\x62\x1a\x94\x5a\x80\x42\x86\x75\x2e\xef\xe6\xfe\x38\x21\x13\x95\xb6\x48\x3e\x17\xef\x2d\x8c\x40\x53\x0a\x08\xa7\x56\xd2\xa2\x72\x72\xef\xf4\xa8\xb9\x5f\xee\x1d\x1f\xd5\x77\xae\x42\xe1\x39\x28\xc7\x21\xa2\x10\x58\xb4\x31\x95\x5e\x61\x30\x28\x83\xb3\xe8\x4f\x23\x91\xae\x21\x9a\xae\x48\xd7\x8e\x14\xdf\x29\xc5\xc1\xfa\x73\x80\x10\x6e\xb4\x94\x58\x66\x1a\x72\xf8\xd7\xd3\x54\x7e\x56\x6d\x31\x1f\x01\x1e\x52\xb8\xa2\xd1\x0f\x94\x41\x56\x6b\xe7\xb7\x66\xe0\x90\x49\x44\xe2\xa9\x6f\x7a\x6d\x0e\x0d\xdf\xed\xd8\x30\x3f\x78\x9c\x9b\x63\x03\x52\x54\xd1\x84\xe5\x5f\x9e\xbe\xe0\x7b\xeb\x1e\x28\x4c\x0a\x1d\xa8\x3f\x3d\x3d\xa8\x02\xd3\x45\x85\xd5\x53\x35\xd0\x68\x95\xf2\x97\x71\xcd\x41\x05\x62\xfe\xc4\xd6\x3a\x97\xa0\xc1\x80\xcf\xc8\xbc\x1c\x7c\x46\xe6\x30\xb0\x73\xdc\x33\x32\x77\x4a\x51\x81\xb0\x0e\x24\xe4\xd0\xf2\xe9\x3a\x28\xf1\xf1\x6c\x6e\x13\xc6\xa7\x7d\xaa\x14\x3a\x72\x46\xf5\x85\xce\x52\x39\x56\x99\x0c\xd1\x44\x97\xb2\xa5\x53\xaa\x2c\x05\xcb\xe5\xa7\x38\x98\x54\xbc\x65\x4c\x55\xbd\x13\x93\xee\x2d\x10\xd2\xd1\x82\x24\x25\x4a\xcf\x72\x41\xc2\x00\xca\x02\x4c\xb5\x05\xc9\x71\x50\xca\xce\x3c\x2f\x27\xaf\x3d\x73\xbe\x87\xcc\x77\xfb\xb6\xbf\x8d\x9e\x1b\xc9\x0b\xc3\x56\x74\x7d\x2d\xcc\x53\x31\x18\x90\x91\xa6\xd6\xf4\x53\x84\x3c\xef\xaa\xe5\x59\x80\xac\xc1\x8a\xb0\x6d\x90\xb2\x2d\x4d\xc0\x8e\xdf\x29\x6b\x35\x81\xce\xac\x4e\xdb\xe1\xd4\x52\xd0\xfd\xb5\xd0\x83\xf2\xe5\x6a\xa3\x8e\xcb\x88\x3d\x2c\x14\x90\x41\xa7\x41\xae\x36\x37\xcb\x2a\xd7\x4f\xae\x19\xd1\x8c\xdd\x88\x93\x2c\x4d\xae\xc8\x7b\xe8\x5e\xb9\x36\x87\x81\x92\x32\x4e\x08\xbb\xa2\x3c\x65\x90\xd8\x46\x25\x3d\x16\x24\x13\xca\xed\xcf\x29\x1b\x0c\xb6\x46\x28\xb4\x01\xab\xdb\x58\xf1\xc1\xa0\xb5\xc8\x7d\x2d\xda\x98\xb2\xeb\x94\x5f\x5e\xa4\x09\x09\xaa\x5a\xbb\x66\xf4\xdc\xae\x32\x40\x23\x73\x38\x24\xea\x7d\xfa\x87\xd8\x88\x34\x45\x49\xb1\xb9\xa9\x3f\x51\xb6\xa4\xec\x3c\x9b\xcc\xcc\x95\x0d\x96\x94\x07\xf3\x1d\x16\x11\xfb\x2e\xff\x7e\x44\xa1\x65\x6f\x5f\x55\x24\xba\xa5\x7e\xb6\xe0\x69\x52\xba\x40\x77\x10\x9a\xba\x5a\x9d\x36\x9b\x82\x46\xec\x59\x57\x0e\x8a\x19\x58\xb7\xea\x32\x93\x74\xff\x58\x3c\x31\x7f\x83\xec\x93\xcd\xc4\x3c\x22\x33\x31\xef\x95\x56\x4d\x60\x61\x5e\x1b\xea\xab\x86\xad\x25\x77\x0b\x5b\xab\x52\x19\x6e\x89\x58\x5b\x89\xf6\xa6\xe3\xe2\x4b\x6a\xea\x80\x8c\x40\x7a\xf7\x9a\x66\x62\xb3\x71\x7f\x81\x37\x44\x4c\x59\xe6\x07\xe8\x43\x2b\x29\x44\xc7\x88\x44\x10\x13\x96\x30\x43\x6e\x97\x9a\x42\x3b\xae\x8e\x5b\x76\x4d\xd9\x32\xbd\x36\x8a\xe5\x67\x8c\x5e\x02\xb6\xf9\x99\xc7\x97\x24\xac\xe1\x50\x16\xe9\xda\xe7\x04\x04\x98\x12\x64\x81\x4c\x08\x89\xc2\x8f\x2c\x65\x04\x54\xa4\xa3\xd8\x74\xf4\x16\x22\xc0\x06\x3c\x67\x4c\x59\x1a\xbb\x85\xef\x92\xf8\x06\xde\x0d\x74\x4b\x46\xf1\x72\x09\xe2\x59\xb9\x58\x22\x31\x74\x60\xeb\x11\xb6\x2c\xd3\x83\xf5\xe5\x74\xc8\x88\x93\xcb\xf4\x8a\x6c\x6d\xc1\x10\x16\x21\x2a\x90\x8e\xfa\x0a\x7f\xde\x0f\x9a\xca\xef\x24\xf1\xa6\xd9\xc7\x34\x5f\x5c\xbc\x20\x60\xec\xf6\x53\x9a\x26\x24\x66\xe1\xc1\x81\xda\xd5\xc1\x20\x48\x99\x90\x15\x20\x23\x5e\x40\x59\x5f\x15\x20\x7c\x11\x67\x6f\xd2\x2b\x78\x70\xb1\x5d\x22\xa8\xb5\x64\xb7\x82\xc7\x4c\xdd\x7c\xca\xce\x5f\x99\xef\x5e\x20\x39\xac\xd4\x3d\xa4\xcc\x6d\x4d\x96\x9d\x1b\x93\x65\xad\x2d\x65\xe7\x27\xb9\xd8\x63\x68\x08\xae\x72\x6a\x3c\x7c\xf4\x1e\xd5\x64\xe1\x4a\x0c\x6c\x17\xfc\x92\x29\xaa\xa3\x26\x03\x6b\x88\xbf\xd4\x33\x7d\x10\x7d\xe1\x8b\xef\xbe\xf1\xf0\x9a\xd4\x19\xb7\xfa\x44\x2a\x5c\x2c\x6e\x4a\xe5\xf6\x65\x83\x0b\x84\xe1\x81\x6b\x8c\xd3\x45\x2b\x83\xab\x92\xef\x06\x35\x24\xe1\xc6\xcb\x61\xef\xdf\x39\x50\x6a\xc0\xd8\x71\x48\x19\xb7\x12\x98\x46\x42\xf3\x4c\x69\x24\x34\xc7\x13\x83\xc3\x15\x7c\xcc\x22\xe1\x32\x19\x12\x77\x64\x83\x81\xcb\xc8\x64\x1e\x16\x46\xa0\x5b\x32\x74\x0d\xc3\xaa\xd4\x7d\x36\x13\x73\x2c\xc9\x76\xc9\xa4\x0c\x06\xa1\xac\x2b\xd2\xb5\xeb\x72\x0f\xc5\x08\x73\x5d\x0a\x52\xad\xb2\x98\xeb\x62\xaa\x8b\x95\xa8\xab\x2c\xa7\xba\x3c\xd5\xe5\x4a\xfe\xd5\x77\xb9\x0d\x28\x8f\x75\xb9\x16\x8a\x95\x15\x62\x84\xb0\x79\xf2\x9e\x8e\x51\xc5\xe8\x53\xbf\x46\x17\xe2\x32\xf9\x10\xaf\xc0\x2e\x18\xf9\x15\x2c\xbb\x35\x22\xda\x99\x2a\x4d\xc5\x9b\x34\xcf\xc8\x0b\x23\xa9\xf0\x15\x54\xb4\x0b\x4a\xad\x90\x2f\x2e\x20\x79\xda\x2f\x50\x5b\xcb\x61\x1a\x9f\xfd\x0d\x25\x9a\x6a\xb6\x73\xbe\x36\x9a\x5d\x5f\x10\x92\x54\x9a\xb8\x5f\x9c\xea\x0d\x89\xb9\xa5\x93\xb5\xa8\x5f\x51\x36\x12\x47\x3c\x63\x0b\x92\x89\x94\x67\xd1\x6c\x8e\xeb\xca\x8e\xfd\x75\x1b\x0e\x8f\x52\x47\x46\x55\x0d\x56\x15\x37\x07\x4e\x3b\x1f\x8e\x96\xb0\xa2\xf4\x34\x39\x4b\xd2\x74\xfd\xec\x3a\xe6\xa4\x14\xef\xb8\x51\x5f\x6b\x7a\x88\x92\xaf\x2b\x65\x89\xa8\xa8\x28\x23\x0c\x8e\xda\x1f\x7a\x4e\x05\x89\xb9\xdc\x93\xf0\x7e\x74\x36\x8e\x18\x29\x59\xbe\xb0\x67\xa6\x9c\x2e\xbd\xc7\xe9\x70\x7e\x3b\x31\x53\x4d\x38\x87\x79\xc4\x00\x15\x51\x70\x3e\x5c\x49\x04\xc4\x34\x2a\x8a\xe5\x5f\x6e\xf5\x63\x49\x6e\x29\x5e\x79\xb3\xd1\x72\x0d\xae\x4c\x60\x94\x7f\xbf\xfe\x2b\xd5\x22\xf6\x58\x1e\xb6\x6e\xe0\xe8\x90\xb2\xc5\x05\x91\x74\xc3\x09\x03\x6b\xf5\x95\x20\xfc\x3d\x0c\xa3\x00\x00\x5b\xe9\x2f\x9a\x94\xac\xb9\xd5\x48\x68\xf8\xa9\x30\xe8\x59\x7d\xb7\xc0\x09\xbb\xaa\x1e\x69\xca\x00\xea\xf7\x41\x0b\x6f\x2b\xe2\xd9\xea\x37\x47\x34\xfb\x45\xb2\xe1\xea\x1d\x33\x03\x76\x15\x51\x37\x54\x87\x15\x4d\x7d\x80\x7a\xb6\xa3\x06\x89\x28\x5a\x11\x1e\x3e\x18\xbb\xf7\xb6\x42\x7a\xc9\x4b\x1b\xb6\x77\x1a\x38\x44\x58\x0b\x4e\x84\xde\x77\xf5\x00\x34\xe8\xb6\xf9\xa1\x5e\x53\x19\x05\xba\xb2\x57\x5a\x1f\xe5\xdb\x56\xcf\x68\xa0\xa8\xa0\x2e\xcd\x21\x9c\xc8\x69\x60\x1b\x55\x97\xa9\xdb\xa1\x4e\x72\xed\x5a\xbc\xcf\x58\x40\xbc\x79\x2d\xa9\x9d\xc1\x68\x65\x30\x58\xf8\x4b\x26\x08\x57\xde\xc7\x1d\x87\x03\xbb\x0c\x02\xcd\x7c\x03\x52\x77\xc0\xb4\x39\xe0\x6b\x12\x5f\x49\x08\x4a\xf7\x1b\x30\x81\x66\xbe\x01\x53\x77\xc0\xb8\x32\xe0\x9f\xc8\xcd\x0b\x75\xfb\xe2\xce\xa3\x7d\x22\x37\xea\x7e\x7b\x86\xd2\x39\x9c\x24\xc9\xd0\xc4\xf6\x16\x53\x78\xde\x3c\x33\xa9\x0f\xcd\x32\xd3\x2c\x5e\x2e\xff\x08\x29\xa8\x61\x3e\xee\x67\xd5\x08\xc0\x9c\xb2\x73\x3b\x8c\x84\xfd\x93\x33\xb0\x2d\x66\xe7\x2f\xd2\xcb\x37\xb9\x4a\x24\x6d\x9b\xb6\xbe\x8e\x7b\xe2\x49\xd5\x05\x79\xc5\x50\x43\xc1\x6a\x9e\x9c\xf2\x7d\xea\xf2\x30\xeb\x0e\x4f\x72\x11\xfa\x0e\xa5\x05\x77\x81\x26\x13\x7b\xee\x6d\x53\x05\x68\x98\x33\xad\x7a\xad\x1f\xba\x65\xdb\xc9\x48\xc4\xfc\x9c\x08\xa3\xa3\xad\xa2\x62\x3d\xdb\xea\x47\x4f\xe3\x69\x65\xcc\xe8\xe0\x68\x72\x60\x19\x63\x12\x3a\x6a\xa0\x38\xac\x65\xc7\x8b\xc3\x56\x64\x1f\x73\x1a\x1f\xa6\xd7\x2c\x8b\x1c\x0f\x4e\x2b\x70\xcb\x46\x74\xa9\x32\xe3\xa9\x04\xf0\x65\x50\xaa\xc1\x80\xfa\xaa\x49\x26\x7f\xb3\x21\x21\xc5\xcc\x88\xd0\x0f\x8e\x0a\xbb\x86\x3a\x45\xa6\xd7\x54\x7b\xc3\x6a\xa2\x6b\x22\x11\xe6\xa4\xbe\xf8\x02\xd7\x20\xd9\x85\x16\x2d\xac\x68\xde\x3a\x4e\x32\xfa\x77\x12\x6c\x23\xbe\x10\x6e\x6d\x9d\x72\x6a\xd2\xa8\x2f\x2e\x62\x76\xbe\xa3\xa3\x02\xb7\x5f\x1e\xff\x6b\xae\x5e\xef\x4b\x5d\x49\x35\x24\x1c\x44\x68\x6f\x6a\x1f\x2b\xcc\x51\x28\x66\xe3\xb9\x9c\x30\x59\xbe\x4d\x97\xc4\x58\x0d\x6e\x36\xf0\x5d\xc9\x4b\x2a\x25\x08\x22\x18\x79\xa7\x1d\x22\xa3\xc7\xaf\xcf\x63\x94\xaa\x3f\xbc\xb7\x09\xdf\x2e\x2e\x68\xb2\x94\x9b\x35\x39\x18\xe3\x2c\x3f\x13\x9c\x10\xad\x5a\x50\x33\xd8\x71\x5a\x5e\xb1\xce\x3e\x07\xe6\xed\xe0\x0e\x67\x96\xae\x77\x1e\x99\x77\x7f\x06\x83\xd0\xbf\x6f\x4b\x9a\x2d\x52\xc6\xc8\x42\x84\x2d\x5b\x1b\x69\x83\x1f\x8b\x03\x5b\xe0\x23\xf3\xef\xbd\x53\x99\xf8\xf9\x11\x52\x67\x46\xac\xc8\x07\xc4\x0d\x76\xe4\x93\xbc\x19\x0e\x0e\x64\xc3\x15\x8d\x4c\x85\xf0\x9e\xd6\x24\x8e\xd5\x5f\x93\x5a\x29\xa6\x11\x91\x17\x9b\x11\x09\x8f\xe1\xc1\x18\xf5\xe8\x48\x52\x9a\x25\xb3\x3d\xa2\x92\xc8\x3c\x84\x4a\x41\xf3\xbd\xf5\x33\x54\xc7\xa1\x88\x68\x29\x33\x45\x1a\x1a\x0c\x7f\x82\xd3\x30\x36\x29\xd4\xfa\x12\x93\xe1\x90\x55\xeb\xc7\x4b\x93\x1b\x82\xe1\x34\x6c\x19\xce\x48\xba\x02\x54\xed\x0c\xf8\x20\xc2\x96\xcf\xe5\x1d\x08\xa9\x4b\xcc\xd7\x4f\x22\x46\x38\x0b\x69\x45\x48\xa4\xe7\x6a\x1a\xcb\xe3\x68\xd0\x9d\x2e\x40\xec\x22\x3f\x65\x67\x81\x9f\x35\x97\xb8\x54\xf7\xee\x7c\x6d\x80\x76\x89\x68\xc7\x25\xb1\xeb\xbd\x5f\xdd\x06\x74\x19\xfb\x36\x93\xb1\x1a\x50\x83\xd5\x89\xff\x0d\x05\x3d\x9c\xfe\xa9\xc5\xd3\x10\x15\xe1\x9c\x88\x67\x26\xa2\xb4\xa2\x66\x90\xf3\xf4\x48\x0e\xd1\x54\x53\xa5\x2f\x48\x22\x62\x70\xe1\xc6\x69\xc4\x47\x4b\xf9\xf3\xbf\x71\x6c\xfe\xfc\xad\x97\x3e\x61\xfa\xeb\x5b\x72\x0e\xe9\x70\xa6\xa1\xe4\x2a\xab\xdf\x30\x01\xb5\x2e\x61\xe2\x85\x8e\x0f\x88\xd0\x24\x7d\x6a\xaa\x29\x7d\x6e\xb5\xa9\xf9\xe6\x6d\x1a\x9b\x51\x7f\x2b\x47\x8d\xa3\xfa\x37\x7f\x53\x33\xea\x6f\x66\x84\xc1\xc0\x69\xbb\x6d\xd8\x52\xdc\xfd\x4e\x15\x91\xe5\x60\x10\xa6\x9b\x8d\xe4\x7d\x55\xd0\x09\x9a\xe9\x07\xdf\x6c\x6e\x8a\x63\xec\x6c\xb0\x92\xb6\x37\xfb\x86\x28\x62\x1e\x9a\xb4\x89\xe4\x66\x73\x1b\x59\xa7\x4a\x0f\xa1\x52\xa9\x04\xf1\xed\x6c\x87\xef\x00\xb9\x20\x5f\x1b\x8d\x78\x24\x9e\x41\xc7\x62\x30\x08\x7e\x3a\x79\xf1\x1b\x64\xb8\x1a\x69\xd1\xfc\x48\xa4\xbf\xae\xd7\x65\x10\x8c\xe0\x97\x8f\x6f\x5e\x6f\xa9\x71\x8c\x88\x32\x34\x90\xc4\x63\xdb\x44\xdc\x61\x7b\x8e\x51\x7d\x9d\xc2\x76\x57\x7f\x30\xae\x18\x56\xe8\x0d\x54\xf5\x03\x34\x0d\x0d\x8d\xfe\xce\x2d\x80\x9b\x68\x5e\x14\x75\x39\xab\x23\x44\x4e\x49\xb3\x25\x9a\x84\x55\xd2\xbf\xca\x11\xec\xea\xd0\x6d\x63\x9f\xf8\xf6\x15\xc2\x06\x34\x27\xd1\x11\xad\x01\xfe\x08\x9a\x62\x43\x7c\xbb\x88\xd7\x22\xe7\xe0\x22\xb4\x8e\xb3\x8c\x5e\x11\x6d\x9b\xd0\xb6\x6c\xef\x88\x5e\xd4\x76\x87\x41\x6b\x7b\xd9\xf2\x8a\xb7\x12\x98\x8a\xa7\xdb\x41\xed\xb4\x71\x7f\x5e\xb1\xb9\x6f\x33\xcd\x28\x6d\x14\x20\x2a\x6a\xe7\xd9\x65\x31\xde\x1d\x7c\x88\xf5\x6c\x1d\x68\xeb\x92\x2c\xfb\xd8\x78\xee\x9a\xf4\xe9\xb6\x5b\xb0\x8d\x03\x37\x52\xe7\x56\x2a\x32\xf4\xd8\x7f\xb7\x09\xbd\x7c\x4b\x25\xf7\x20\xf7\x6a\x7f\xc8\xf7\x10\x7d\xb5\x77\xb2\x5b\xfa\x55\x35\x58\x69\xfa\xe7\x75\xb6\xd8\x30\xde\x35\xf7\x63\xb1\x61\x7b\xfb\x02\x8b\x8d\xba\x55\xc5\x83\xd8\xca\xf0\x68\xa7\xea\xb8\xe7\x73\x09\xee\xd7\xf4\x89\xc4\xa3\xab\xb4\x10\x44\xd0\x34\x10\x3c\x27\x81\x36\xee\x2e\x94\xa4\xad\xb3\xfa\xbb\xaa\xf3\xe6\xbb\x7d\x93\x8c\x5c\x39\x98\x63\x9e\x26\x0d\x9d\xf0\x59\x2e\x44\xca\x02\x84\x63\x4e\xe3\xf7\x69\x43\x3b\x3a\xe2\x24\x5e\x9e\xb0\xe4\x46\xde\xa8\x84\x04\x08\x8b\xf8\x0c\x4c\x1e\x27\x63\x4c\xac\xfb\x97\xe3\xf0\x05\xbc\x9e\x3c\x84\xf8\x5c\xf9\x58\x1c\x1c\x95\xb3\x74\x8c\x8d\xa8\x62\x75\x34\x01\x1f\x58\x2b\x5b\xf3\xe1\xaa\xfa\x61\x8e\x7d\x16\x4b\x76\xd6\x30\x39\x6c\x2d\x98\x84\xbc\xf4\x38\xb0\x4e\x48\x8e\xf8\x5d\x96\x6a\xc3\xf4\x89\x59\x4b\x80\x83\x52\x7e\x32\xb1\xe2\x9b\x00\xc3\x00\xaf\xe3\x33\x92\xa8\xaf\x89\xfc\xd3\xfd\x9c\x90\xe5\x4f\x37\x4e\x59\x42\x96\x67\x37\xba\xc2\x0b\x92\x2d\x38\x3d\x2b\x6b\x2c\xcd\x07\x5b\xe5\x30\xce\x45\x2a\xf7\x3a\x21\x82\xd8\x6f\x0b\x49\x4e\xca\xca\x84\x2d\x63\x30\x76\x52\xcd\x8d\x2f\x8e\xfe\x4d\x3e\xaf\x63\xb6\x2c\x7f\x5f\xc4\xd9\x3a\x5d\xe7\x6b\xf3\xdb\x66\x47\x52\x3f\xc1\xc9\xb8\xac\xad\xdd\x3c\x61\x3f\xa8\x48\x48\x30\x6f\xe8\x47\xeb\x32\x94\x9d\xda\x29\xbf\xfe\x49\x35\x36\x67\x51\x09\x45\xd2\xd4\x7f\x04\xa8\xa1\x61\xac\xfd\xee\xec\x4e\x25\xea\x2a\xc7\x53\xbf\x4e\xb5\xf1\xb9\xa1\x54\x3d\x05\xf0\xce\xd7\xa6\x59\x67\x6a\x47\xb7\x93\x6f\x68\xad\x8f\x2a\xde\x3f\x4b\x97\x37\x8e\x6d\x92\xea\xab\xc5\x32\x49\x90\xcf\xe2\x30\x03\x69\x63\x09\x12\xa8\x00\xe5\xe2\x2b\x96\x11\x2e\xee\xae\xac\x8c\x97\xcb\x37\x31\x5b\xc6\x22\xe5\x37\x7a\xa2\xae\x34\x5b\x45\x5d\x8a\x93\xb2\xe8\xcb\x95\xa4\xfb\x71\xc2\x8d\xb3\xda\xd5\x81\x3d\x01\xdf\x41\x2a\x3e\xba\x76\xbb\x26\xb4\x04\xde\x51\xb9\xc1\xf5\x4b\x57\xa9\x66\x1c\x55\x6a\x37\x4f\xd6\x91\x1f\xb4\x49\x9b\x2d\x37\x57\xd1\x94\xbf\xd3\xbf\x51\xfd\x6e\x9a\x0a\xef\xcd\x07\xc0\xbf\x0a\x79\x35\xcc\x65\x1a\x73\x06\x4c\xa7\x11\xdc\x16\x45\xa7\xad\x64\x38\x2b\xd0\xce\x12\xd7\xf7\xc9\xb3\x1f\xc6\x71\x9a\x6c\x36\xe3\x02\x95\xef\x04\xc2\x2e\x66\x6f\xcc\xb2\x2a\xe7\x72\xa7\x65\x78\x54\x9f\x38\x4c\x1b\x77\x6c\x7d\xe1\x0e\x0f\x29\x3b\x5c\x43\xfd\x02\xe1\xea\x7b\xd2\x98\xc6\x45\xe9\x90\xb2\x65\x67\xca\x5a\xca\x69\xa8\xdb\x34\x9c\x08\x42\x05\xc2\x57\xdb\x27\x72\xd5\x69\x22\x57\xf7\x30\x91\x9a\xa7\xa1\x5f\x05\xb3\x05\x8b\x57\x9d\x00\x7d\x9e\x7f\xb6\x4b\x55\x3b\x3c\x60\x9b\xcd\xc1\xd1\x81\xf1\x01\x44\x83\x81\x43\x27\x54\x78\x73\x52\x52\xea\x00\x08\x63\x08\x7c\xae\x88\x13\xbd\xd6\x5e\x05\x3e\x6a\x44\x46\x00\xb2\xf7\xda\xc7\x52\xdb\x96\xae\x3f\x92\xcf\x42\x69\x68\x68\xca\x7e\x65\x82\x26\x6f\x14\x26\x08\xad\xb9\xcd\xf9\x79\x42\x5e\x65\x3f\x11\xca\xce\x15\x7a\x58\xfe\x74\x03\xc4\x96\x66\xc7\x1d\xcf\xce\xb0\x5b\x93\xe8\xe0\x08\xf5\x84\xd5\xbc\xa8\xfa\xf2\x30\x0a\xa3\x0b\x7b\x9e\xd0\xc5\xa7\x3d\x0e\x40\x80\xa5\x43\xe9\xd6\x18\x2c\x64\x07\xdb\xf7\xf2\x6e\x9b\xf6\x75\xf7\x43\x6f\x87\xaa\xcb\x96\x4d\xad\x60\x87\xbe\xc7\xdb\x48\x10\x15\x2f\x46\xae\xb7\x2e\x8f\xdb\x6c\x1c\xa0\x76\x3c\x4e\x8d\xb4\xd6\x07\xe8\x66\x9e\xaa\xe3\xaa\xa7\xab\x01\x57\xdf\x3a\xeb\xfa\xb6\x2f\x7f\xfc\x8c\xa0\xd0\x78\x57\xe2\x8c\x08\x9d\xef\xa2\x6e\x6e\x2c\x94\xdf\xa3\x16\xf1\x0a\x7e\x73\x1b\x3a\x46\x25\x2a\x84\x8c\x92\x7e\x05\xca\xba\x00\xf6\x35\x40\x68\x24\xe9\xc2\xf2\x53\xa8\x81\x0e\x1f\x8c\xe5\xff\x6b\xa3\xda\x32\xe3\xb4\x00\xd5\x5a\xa5\x2a\x2a\x56\x94\xc5\x49\x72\x73\x6b\xe7\xbb\xa4\x19\x64\x74\x50\xf5\x84\x84\x81\x31\xf2\x88\x50\x2d\x6c\x68\x7b\x80\xfb\xc3\x56\xa5\x81\x41\xdd\x55\x39\x3c\x82\x74\xc7\xa3\x4f\xe4\xe6\x79\xba\x24\x53\xcf\x51\x4e\x7e\x7c\x5c\xa9\x12\x36\x67\x8e\x3d\xcd\xd0\xe4\xf1\x7f\xb8\xed\x06\x03\x51\x57\xcc\x22\x40\x0f\x8d\xa3\xbe\x47\x6d\x42\x13\x8c\x94\x82\xae\x15\x47\x76\x94\x27\xee\x24\xb5\x5a\xe9\xdd\x78\xb9\xdc\x8f\xd8\xc5\x3e\x42\x75\x1b\xeb\xd2\x22\xbd\x81\x32\xd2\x6a\x4f\xe2\x8a\x6f\xf6\x56\x15\x11\xdf\x46\x6b\xec\xba\x63\xc8\x8a\x81\xbe\x1b\xca\x76\x94\x11\x26\xa9\x97\x0a\xb6\x04\x73\x36\xb4\xb3\x67\x87\x45\xdf\xd9\x75\xf9\x92\x2b\x9b\x99\x1d\x5d\x6b\x84\x50\x31\x2d\xf6\x3a\xcd\x57\x47\x79\xae\x9a\x75\x19\x61\x9b\x65\x4f\xb5\x53\x73\xad\xa1\x5b\x00\x94\x3a\xd7\xd2\xcd\xe8\x0f\x8b\x76\x83\x2b\x63\x5e\xb2\x63\xb3\xeb\x86\x56\x4e\x2c\x42\x15\x72\xd0\x67\xb1\x56\x31\xb4\x62\xdd\x06\x6a\x37\xb0\xda\x65\xaf\xe6\x18\xab\xb5\x8f\x01\x6f\xcb\xbe\x16\x6a\x3f\x25\xb9\x6b\x9b\xd6\xde\xfb\x99\xac\xb8\xa7\x35\x5a\x69\xd6\x97\x76\x9b\x7d\x8b\x39\xdf\x16\xfb\x33\xc7\x9c\x2f\xee\x36\x46\x9b\x19\x5f\xec\x0e\x92\xd5\xdf\xa0\x5f\xd7\x01\xea\x65\x3b\x47\xf8\x44\x6e\x24\x6a\xf5\x74\x9f\xe9\xee\xab\xf2\xdf\x74\x97\xfc\xb7\x53\xe0\xb1\x4e\xae\x8a\x64\x54\xca\x59\xe5\x6b\x54\x4e\x42\x31\x3b\xbf\x7c\x7c\xf3\xfa\xa7\x98\x67\x23\x33\x64\x78\x4b\x97\x93\xe0\x97\x3f\x7c\x5e\x9c\xff\xed\x71\x12\xe0\xb3\x24\x5d\x7c\x9a\xfc\x70\xab\xc3\x48\x66\xc1\x64\x16\x0c\x4c\xa6\xd5\x39\x0e\x32\x11\x0b\xd8\x17\x59\x32\x3b\xfa\x03\x3e\xc2\xb3\xd9\xe3\xff\xc0\xc1\x45\x9c\x5d\x04\x2a\xc9\xef\x6c\x66\xa5\x7d\x01\x0e\x34\x3f\x8e\x03\x57\x66\xa6\xde\x59\xc9\x15\x5b\x91\xb4\xf1\xf2\x9a\xcb\x0e\x7f\xc4\x33\xd7\x9d\xb6\xec\x6f\x3e\xc7\xcd\x52\x3d\x84\xb7\xcc\x8e\xea\x2d\x35\x13\x81\xc2\xff\x90\x93\xd0\xfb\x1f\x98\x59\xd4\xc3\x61\x05\x73\x59\x77\x16\x38\x11\xe1\x1c\x06\xd6\xde\xe5\xba\xf9\xb6\x23\x44\x55\x2b\xfc\x0f\x59\x23\x5e\xa6\x2c\xb9\x09\x9a\x2b\x96\x83\xc8\xbd\xd4\xd3\x6a\xd4\x2c\x87\xac\xd5\x54\x0b\x82\x7a\x8f\xf1\x18\xcf\xe6\x73\x1c\x38\xe1\x6c\x82\xed\xdd\x56\xe7\xbc\x6b\x12\x57\xcd\x49\xcc\xdb\x37\xb2\x1e\x1e\x6c\xc7\x46\xd6\xb7\xaf\xaa\x32\xc6\x35\xa5\x92\xbb\xbd\xb8\xea\xad\x74\x07\xb7\x9f\x87\x3c\xa0\x2f\xdc\xf3\xea\x36\xec\xec\xbb\xb2\x49\x77\x38\xcf\x96\x9a\xee\x06\xef\xaa\x2b\xb7\x7f\x57\x1d\x38\x9c\x9d\x8b\x51\x31\xf9\x76\xd4\x52\x07\xbb\xf3\x78\x48\xa7\xce\x2a\x40\xe1\xc0\xf8\x5c\x01\xfa\x18\x07\x7f\xf9\x0b\xe0\x1d\x89\xfe\x5e\x5e\xc5\x49\x30\x59\xc5\x49\x46\x8a\x1f\xf0\x25\x11\xf1\xe4\xf6\x12\x30\xb1\xf2\x92\xbc\x2b\xea\x1f\x5d\x9c\x65\x81\x2f\x6b\xf5\x97\xf8\x6c\x3f\xe4\x6b\x32\xfc\xf8\xf3\xdf\xaf\xfe\xfc\x7c\xb5\xef\x6b\xf2\x07\x1c\xd0\x55\x09\x63\x25\x5e\xb0\xf8\x5d\x9d\x00\xbe\xad\x35\x1c\xe3\xa0\xdf\x97\xb7\xf6\x3f\x54\x80\xbd\x39\x9e\x1d\x1d\xe1\x60\xa1\xd5\x57\x5b\x55\x14\x26\xc8\xc0\x61\xca\xe9\x39\x05\xe4\xfc\xff\x73\x8e\x16\xd7\x66\xe5\xbf\xad\x8d\x19\x55\x1b\xa5\x57\x84\x27\xf1\xcd\x8e\x05\xa8\xff\xdb\x73\x19\xb6\x6b\x35\xed\xa3\x71\x15\x2c\xd7\x31\x8f\x2f\x89\x20\x5c\x0e\x33\x2f\x0c\xb0\xff\x01\xb7\x44\x63\x2c\x23\x23\x98\x97\xbc\x0c\x5d\x08\xea\x2b\x33\x99\x4a\x7c\x02\xb3\xce\x9a\xd3\x6b\xf9\xe4\x96\x1a\x23\xe7\xa5\x65\x8b\x58\x01\xe2\x96\xe3\xe9\x07\xba\x07\x35\xae\x5c\x92\xfd\xa4\xe1\xe8\x79\xb5\xe4\x3f\xb6\x1e\xd7\x0e\x60\xb0\x62\xeb\x7e\xf5\xa1\x74\x7a\x74\x11\xfb\x3e\x2b\x39\x3c\x34\xf3\xf6\x3c\x0d\x66\x30\xdf\x12\xae\xbe\x78\x40\xdf\x3b\x5d\x19\x50\x56\xaa\x99\x71\xba\x98\x51\x16\xab\xf3\x2e\x0f\x54\x1e\xbb\xac\xb3\x03\x92\x25\x81\xd8\x01\x22\x3d\xdf\x7d\x37\x8a\x39\x81\x3b\x1a\x0f\x91\xd6\x78\x19\xb2\xe2\x3c\x07\x78\x65\xe4\xb3\xf8\x40\xcf\x12\x95\xdc\x63\x16\xfc\xef\x45\xce\xb3\x94\x4f\xc6\xff\x3b\x30\x43\x7f\xbf\xbb\xdf\xef\xee\xf7\xbb\x7b\x9f\x77\xb7\xe5\xbb\xea\x4c\x77\xbe\x03\xd8\xbb\x3c\xf1\x8f\x15\x5c\xcf\x1e\x1f\xe1\x3a\x94\x76\x7e\xfe\x01\x62\x2e\xd2\x64\x09\x66\x39\xd0\xae\xbc\x1e\xd9\x3a\x89\x6f\x26\x7d\x96\x32\x72\xdc\xf1\x96\x3e\x30\x2d\x68\xee\xfa\x7d\xd2\x84\x1e\x1b\xb3\xfb\xa7\x09\xff\x78\xf3\x69\xfc\xf8\xef\x7f\x4f\xef\x22\x61\x78\xe8\x3d\xd5\x1b\x50\xee\x69\x6f\xeb\x9e\xb6\x07\x27\xea\xb4\x81\x4e\x42\x05\x9b\xfb\xd0\x18\x7f\xd3\x88\xfb\x22\xab\xa5\x11\x6f\x46\x4f\x8b\x23\x3e\x6a\xc4\x82\xc4\x59\xc4\xb7\x04\x6e\xc3\xb9\x53\x5c\x0f\xd1\x86\x13\x13\x04\x67\x1d\x9f\x93\xff\x3e\x59\xad\x32\x22\xf0\xc2\xfd\xf8\x9b\xfe\xb8\x8a\x40\xa6\xfc\x53\x9a\x83\xf9\xd7\xf3\x84\x12\x26\xde\x2b\xff\x9f\x8b\x68\xa5\xdc\xd3\xd7\xd1\x0a\xfc\xd5\x97\xd1\x4a\xc7\xc9\xb8\x8c\x56\x26\x4e\xc6\x4d\x24\x5a\x7b\xb8\x8a\x6e\x4c\xb5\xf3\xe8\x46\xb7\x3d\x8b\xea\x1a\x0b\xd9\x02\x16\xbd\xd9\xe8\x29\x52\xc6\xcc\x3e\x9c\x46\xb7\x05\xbe\x8e\x98\x63\xac\x8e\x5f\xb6\x06\xf9\xb9\x46\x23\x73\x8a\xc7\x01\x27\x09\x38\x20\x40\x9c\x95\xc1\x20\x88\xcf\xb2\x34\xc9\x85\xfd\x6d\xac\xec\xaf\xdb\x6c\xe8\xaf\xa3\xeb\xbd\x87\x85\x20\x43\x76\xe4\x28\x8a\x5e\x6e\x36\xe5\xc8\xf2\xb7\x12\x90\x7f\x8e\xae\xdb\xf6\xad\x77\x71\x18\x7d\xd6\x5b\x2f\xff\x92\x7b\x7f\x3d\x4a\xe1\xc4\x94\xf1\xfe\x60\x10\x5e\x1c\x46\xd5\x6f\xda\xca\xf7\xb5\x6e\xe6\x2d\xfc\x98\xae\x51\x71\x1e\xc5\xd3\xe5\xe4\x1c\x62\x80\x9c\xea\x10\x90\xe7\x4a\x90\xfa\x21\xba\x18\x26\xb0\x02\x08\x48\x1f\x45\x11\x95\xb3\xcf\x45\x7a\x08\x9c\xbd\xfc\xa0\xa6\x7f\x12\xbd\x89\xc5\xc5\xe8\x92\xb2\xf0\x0c\x5f\x0c\xcf\xd1\xa1\xfa\x1d\x7f\x0e\xc7\xf8\x02\xe1\x67\xd5\xf2\x65\xb5\x7c\xb8\x3c\x3c\x47\x3d\x1a\x9d\x3f\x3d\x19\x0c\x9e\x3d\x3d\x99\x6a\x99\xc0\xe4\xfc\xe9\xb3\xc1\xe0\xe4\xe9\xb3\xa9\x92\x24\x4c\xb2\xcd\x46\xfd\x55\x98\x4c\xb7\x6a\x36\xaa\x7a\x39\x9d\x4f\x3b\xa6\xf3\xa6\xe3\x74\xde\x0c\x06\x9f\x9e\xbe\x31\xa3\x9f\x3f\xfd\x34\x18\xbc\x79\xfa\xc9\x4e\x4f\x4e\x47\xfd\x59\x04\xe5\x14\xa6\xa7\x3a\x28\xe7\xd9\x61\xf8\x61\xb8\x44\x93\x53\x1d\x1e\x74\xa1\x94\x15\x50\xe7\xc3\x30\x94\xa3\x3c\x7a\x3c\xf9\x00\x5b\xfd\x31\x5a\x37\x40\xa5\x0d\xbc\x2a\x17\x06\x39\x31\x27\x6e\xfe\x1c\x27\x39\x09\x03\x8b\xb9\xd0\x66\x13\x7e\x1c\x46\x0b\x84\x83\xf8\x2c\x55\xbd\xa6\xe8\x14\x02\x9d\x7e\x3c\xbc\xb2\xf9\x82\x83\x33\x92\xa4\xd7\x95\xd2\xe1\x65\x99\x12\xf8\xb9\xfc\x39\xbc\x7a\xb2\x18\xba\x17\xf2\x17\x75\x95\xdf\x47\xeb\xa7\x57\xbd\x34\x2a\xfb\xc8\x07\x83\x83\xe7\x83\xc1\xfb\xa9\x1e\x74\x52\x0e\x2e\x8b\xde\x0f\x06\xcf\xa7\xba\xf6\x24\xdf\x6c\xc2\xf2\x97\xae\x88\xb0\x99\x84\x3b\xb3\xe9\xe5\xe4\xf0\xca\x78\xe7\xde\x7a\x92\x28\xd0\x66\x02\x86\x54\xc7\x23\x3a\x2d\x0a\x37\x1d\x94\x9b\x9b\x96\x02\x1a\xf6\x60\xe7\xd8\x87\x9d\xb3\x48\xe5\x47\xb7\x37\x22\x55\xbd\xe4\xed\x98\xb3\x47\xdb\x71\x22\x9c\xbd\x0f\x3f\x0f\x1b\xa8\xaf\x97\x79\x26\x19\xe5\x00\x5b\x43\xaa\x2e\xee\xd3\xc4\xc2\x66\xfd\x9e\x94\xc0\xa7\x67\xbc\x68\x9f\xb1\x46\xcd\xab\xf6\x79\xab\x1a\xbd\x4c\x85\x27\x8d\x6e\x21\x2e\x51\xb8\x38\x5c\xa1\x47\x8f\x8b\xb6\xcb\xa9\x07\xbe\xd8\xf2\xc8\xac\xb7\x6c\x95\x77\xfd\x17\xea\xae\x3d\x5d\xab\x19\xf9\x96\x5f\x5e\xcd\x74\x30\x08\xbd\xbd\xe8\x2a\xc6\x38\xaf\x84\xd7\x78\x1a\x66\x0d\x20\x88\x62\x4c\x25\x26\x6c\x7f\xe9\xec\xbe\x88\x74\x3d\x39\xa4\xfa\xd5\x2b\xd0\xc4\xd3\x99\x86\x70\x9c\x7d\x49\xa0\x37\xc7\x76\x9f\x63\x8a\xd3\x52\xfb\x56\x8d\x1f\x33\x65\xda\x44\x54\x59\x16\x3a\x46\xa2\x13\xd1\x56\x52\x60\x32\xb2\x54\xd1\x7f\x69\xb1\xda\xb2\x0c\x8e\xee\x16\xeb\x61\xca\xe8\xb0\xca\x81\xd7\xf5\x34\x8b\x9a\xd6\x25\xed\x31\xfa\x30\x8b\x2a\xaf\xa5\xb0\x0f\x2b\xe6\xd1\xa3\x50\xc2\xd7\x46\xbd\x65\xe8\x11\x5c\xcb\x15\xfd\x0c\x31\x4d\x9d\x9a\xa8\x1e\xcc\x4c\xa2\xcd\x5e\x49\x9a\x91\x63\x1a\xd1\xaa\xb3\xef\x31\xa2\xab\xb0\x7d\x5e\x14\x61\x30\xbc\x03\x9a\x96\x2e\x94\xe3\x9d\x1d\x6e\x30\xe0\x2a\x5d\xb9\x18\xa5\x57\x84\xaf\x92\xf4\x7a\x58\xfe\xf9\x9b\xf3\xf7\x7f\xdb\x18\x8e\xb4\xe7\x9b\x64\x33\x5f\xde\x9d\x62\x71\x3e\x74\x30\x54\x4f\x06\xb6\x6e\x49\x1f\x48\x2d\xbb\x83\x9b\x20\xd8\x66\x77\x60\x53\x32\x61\x45\xe1\x49\x1e\xd8\x25\x58\xe8\x83\x2d\xbe\xe6\x8c\xdb\x80\x6a\x0a\xa9\xdb\xb4\x63\xae\x5d\x0c\x9d\x8e\x27\x14\x67\xa6\xec\x37\x9c\x97\x65\xd9\x74\x3c\xc9\x70\x62\xca\xde\x48\x1a\x73\x51\x16\x27\x53\x31\x01\x62\x6c\x01\xc9\xce\x6e\x17\x72\x6f\x06\x83\x30\xfe\xf7\x88\xe3\xfc\xdf\x23\xae\x1e\x93\x55\x94\x86\xa8\x17\xff\x7b\xb4\x92\x1f\x57\xe6\xb9\x54\x53\x99\xc4\x58\x8d\x3b\xc9\x8b\xc2\x5d\xc4\x6b\xca\x88\x7a\xcf\xa3\x54\x7d\xaf\x39\x24\x47\xd5\xa4\x11\x60\x53\x21\x51\x4d\x74\x5b\xf5\x29\x9e\x8c\x71\xd5\x53\xd8\x7c\xf8\xad\x5e\xe3\xb7\xb2\x46\x01\xb7\xf1\xd8\xf5\x9a\x36\xee\xd2\xc7\x88\x45\x44\x93\xab\xf0\x0c\x1e\x12\x97\x45\x80\x6c\xfb\xaa\x54\x4d\xdf\x16\x6b\xea\x84\xd6\x7c\x9e\x87\xd1\x21\x71\x49\x63\x5a\x73\x6c\x1e\x46\xcc\x5b\xe1\x37\x4f\x07\x1f\xd3\xb5\x2d\x2e\xdb\xf3\x4a\x79\x19\xd7\x54\xf2\x0c\x36\x0c\x89\xdc\xfc\xba\x5b\x72\x54\x0f\x6b\xeb\xf0\x8f\x38\x8d\xaa\x31\x53\x54\xd0\x5b\x65\xb5\x51\x4f\xba\xf5\xf4\x0f\x83\x81\x0d\x5e\x5e\x26\xdd\xfa\xc3\x7c\xea\xfe\x98\xcc\xe6\xda\x24\xe3\x56\x0b\x18\x27\x1c\x97\x0b\x9f\x8c\xb1\x5d\x85\x3c\x21\x65\x58\xc1\x2b\x47\xc1\xdd\xa3\xd0\x51\x46\x79\xf5\x38\x78\xe5\x38\x34\xb9\x53\x87\x99\x43\xee\xee\x78\x0d\x7e\x32\x4f\xe9\x6f\xcd\xa6\x72\xb3\x6b\x70\x95\xbb\x85\x6a\x05\x8b\x56\x9c\xce\x51\x2f\xb8\x80\x1c\xf8\x12\x9d\x2f\x4a\x1c\x2d\xaf\x98\x33\x81\xc8\x9d\xcd\x50\x60\xf1\x34\xa9\xfb\xcb\x8b\xc3\xa8\xfe\x6d\x22\x9e\x24\x75\x8f\x7c\xa7\x9a\x5d\x8e\x88\xc6\x2d\xf3\xf8\xcd\x99\xc7\xc7\x74\x1d\x39\x4b\x1b\x32\xcc\xcc\x2c\xec\xea\xa7\xcc\x76\x5f\xee\x08\x33\xb3\x28\x3d\xf4\x9d\x6a\x76\x16\x4c\xce\x82\xae\x42\x7e\x00\x31\xe5\x42\xb1\xd9\x30\xfb\x54\x69\xf0\x73\x39\x61\x8a\x53\x63\x06\x3f\x8b\xe7\x65\xb4\x9d\xca\xd7\xc2\x82\x35\x8e\xa3\xf1\x71\xfc\x24\x35\xa1\x94\xe3\xe1\x10\x85\x34\x4a\x65\x2d\x6b\x9e\xe3\xec\x38\xad\xde\xc7\x6a\x0d\xb9\x17\xd4\x39\x66\x4c\x46\xaf\x5f\xbd\x7d\xf9\xe1\xf4\xdd\xcb\xf7\xa7\xef\x9e\xfd\xf1\x65\x44\x46\x2f\x4e\xde\x9c\xbe\x78\xf9\xfa\xe3\xb3\xe6\x07\x59\xb7\x5a\xe3\xd5\x7f\xbf\x7c\x5d\x8d\xef\x3d\xee\x35\x2b\x88\x5e\xa3\x97\x23\x6d\x69\xf6\xb8\xd7\x18\x91\x69\xdb\xb0\x1f\x7b\x8d\xd9\x71\x6d\xd7\xc5\xf2\x24\x71\xe3\x56\x2b\x33\x69\x6a\xcc\xe7\xea\x46\xc4\x6a\x0f\xc2\x80\xae\x38\x64\x25\xeb\x91\x51\xc6\x17\x51\xf0\xbf\x02\x4c\x74\xce\x05\x1b\x95\xb1\xa4\xa0\x6c\xd9\x15\xcd\xe8\x19\x4d\xa8\xb8\x89\x0c\xb4\xd9\x32\x9d\x05\x62\xbc\xfe\x5c\x7e\x33\x89\x1d\x2a\x1f\xcf\x52\xbe\x24\x3c\x52\x31\x94\x6b\x86\xa7\x6e\x58\x11\x62\x3c\xd7\x20\xe1\xad\x00\x84\x01\x97\xd0\x34\xe9\x09\x95\x6a\x06\x61\x31\xba\xe6\x54\x90\x30\x78\x72\xb0\x4c\x17\xe2\x66\x4d\xfa\x17\xe2\x32\x79\xfa\x44\xff\x97\xc4\xcb\xa7\x4f\x1e\xa9\x7f\xe4\x38\x4f\x9f\x64\xeb\x98\x3d\xfd\xef\x27\x8f\xe0\xdf\x27\x8f\xd4\xc7\x47\x50\x3d\x90\xfd\x99\x28\x85\x92\x09\x83\x99\xad\x28\xcf\x0c\x9d\x07\xf3\xd3\x92\x11\xfd\x60\x54\x97\xe1\x06\x38\x21\x36\xb9\x02\x6d\xd2\x22\x8b\x84\xca\xff\xad\xcf\xd2\x98\x2f\x5d\x99\xe4\x22\x5d\xdf\x1c\x6a\x17\x50\x8f\xb7\x6f\xb5\x9d\x57\xaa\xe9\xf6\xb0\x77\xc2\xe3\xef\x51\xcf\xbf\x30\xea\xf9\x7d\x39\x3e\xcf\x82\x2c\x5f\x2c\x88\xd2\x5c\x40\x16\xf3\x39\xa6\x77\x88\xc9\x6d\x40\xa9\xe2\x95\xac\x40\x44\xb0\x16\x17\x5e\x0b\x60\x1f\xc9\x67\xa1\x1c\x75\xed\x27\x30\xff\x06\x25\xa2\xa9\x03\xce\x03\x8d\x5a\xf0\xd5\xad\xf7\x0c\xf6\xba\x5e\xcf\xd8\xa9\xe9\x79\x82\xe7\xb2\xf6\x14\xae\xfb\xd6\x1a\x47\x5f\xe3\x1a\xeb\xb4\xb0\xab\x74\xf2\x76\xc8\xd7\x5d\x3e\x50\xca\xa4\x59\x85\xc4\x38\x18\xe3\x53\x85\x10\x9f\x9b\x19\xb4\x58\x1e\x57\xb6\x00\xdb\xcc\x4f\xf5\x1e\xa7\xc1\xff\x2a\x7d\x5b\x1d\x6b\xd1\x57\x4b\x1d\xc9\x8d\x54\xa3\xd3\x4b\x08\xd3\x14\x85\x9d\xc1\x7f\x7e\x08\x05\xbe\x95\xdb\x3a\xf1\x24\xff\x26\x53\xa2\xd3\xf9\x40\x68\x07\x9b\x25\x44\x7b\x8e\xf9\x5d\x2f\x30\x2d\xe9\xb8\x1e\x6f\x06\x98\xe0\xe8\x96\x8c\xe4\xbf\x35\x67\xbf\x86\x7b\x06\x89\xc4\x8c\xcf\x2b\x57\xa5\xe8\x05\x19\xdc\x30\x77\x8e\x02\xec\xbd\xd5\xa4\x6c\x28\xaa\x19\x99\xdb\xb8\xd4\x21\x45\x08\x4d\x48\x55\x66\x00\x5f\x41\xd3\xe2\xac\xcc\x7b\x32\xd5\x33\xb1\x01\x65\xf5\x6f\x48\x22\xc2\xd3\x9b\x6a\xcc\x89\xfa\x49\x87\x26\x5f\x62\x6d\x0f\x43\x82\x70\x3d\x85\x8b\xed\x3a\xc0\x3a\xaf\xe3\x97\xba\xf1\x36\xd7\xa7\x83\x0f\xff\x0a\xb9\x65\xf6\x8f\x3d\xbc\xad\xdb\x0e\x0e\xc0\x1d\x36\xb3\x6a\xbd\x4c\x77\xbc\x61\x9a\x83\x7e\x44\x33\xe7\x7a\x67\xf9\x5a\xbe\x5f\x5f\x43\xaa\x40\x46\x34\xb3\x9b\xf0\xc1\x8c\x5b\xa5\xcc\x4c\x2c\x89\xe6\x15\x9c\x36\x3f\x8d\x68\x66\xbb\x69\x0a\x23\x0e\x8e\x8a\x5e\xcb\x90\x42\x13\x76\x5a\x11\x0a\xfb\x32\x52\xdb\x13\x8a\xed\x59\xac\xf7\x7c\xde\x1f\x54\x55\xfb\xec\xd7\x9b\xa3\xab\x93\xdf\x9e\xdd\x49\x55\x7b\x37\xa3\xc8\xfd\x96\xdf\xaa\xfc\x96\xdd\x48\x9a\xcf\x6d\x27\x7f\x1f\xaa\x67\xb2\x8d\xae\x82\x26\xde\x41\xdd\xc6\x0f\x95\x2f\xbd\xed\x69\x77\xb2\x6b\x34\x5e\xf9\xec\x22\xcd\x93\xe5\x47\x12\xf3\x17\xe9\x35\x3b\x81\x7c\xb4\xf2\x91\x93\xf3\x6d\x49\xe1\xd0\x94\xaa\x79\x73\x48\x24\x69\xfa\x29\x5f\x87\x41\xa6\x12\xcc\x4f\x0e\x0d\x9d\x1b\xa0\x91\xec\xfd\x4e\xa1\xfb\xed\x48\x1a\xcb\xfa\xa6\x6f\xa3\xda\x42\x14\x23\xf9\xfd\x17\x12\x03\x52\xab\x7c\x98\xd4\x1f\x2e\x68\x42\xb3\x9f\xe3\x4c\x9c\xa5\xa9\x08\x51\x83\x13\xaa\x86\x84\xfd\x41\xc2\xe0\x8c\xc5\x97\x24\xaa\x81\xc0\xa1\xf2\x2e\x9b\xff\x80\xb0\xb8\x43\x6b\xc2\x96\xb2\x2d\x78\x76\x0e\x06\xa2\x24\x98\x59\x44\x46\x8e\x19\xda\x31\x1b\x0c\xd8\x41\x14\x89\x63\x64\x07\x91\x1d\x54\x78\x08\x86\x70\xad\x59\xaf\xbd\x32\x71\xbc\xf9\x1a\x85\x42\xf9\x30\x96\x3b\xd4\x44\x69\x4e\x92\xaf\x83\x7a\x92\xaf\xad\xd7\x4c\x03\x89\xbe\x27\x92\xc2\x7b\x78\x74\xaf\x73\x4a\xa8\x91\xed\x65\xd9\x36\xcb\x9d\x37\xfb\x41\xb1\xe9\xff\xff\xdd\xbb\xf7\xe3\x93\xbf\x3d\xf2\x62\x53\xaf\x09\x74\xd3\xca\xd1\xb9\xd6\x5f\x6e\xde\xe8\x5a\x52\x49\x68\x36\x66\x4f\x4c\x59\x0a\xfa\xef\x84\xb6\xa8\xb2\x19\xbf\x2a\xd6\x50\x47\xca\x04\x0b\xea\x97\x5e\x3c\x80\xf3\xbb\x0e\x03\x97\x67\xeb\x20\x1d\xcc\xd0\xf6\x7a\x6e\x3a\x81\xc6\xd6\x97\x46\x51\xc3\x46\x83\xf0\xe8\x70\xcd\xe9\x55\x2c\xc8\x23\x45\x7e\x56\x8b\xff\x21\xca\x15\xd7\xd9\x51\xfb\x1c\x86\x0c\x1f\xa1\xd9\xd8\xb2\xe4\x95\x0c\x2d\x34\x93\x30\x0c\x39\x5a\x38\x1a\x0c\x42\x1e\xf1\x91\x5a\x05\xc2\x44\xfe\xda\x6c\x82\x00\x15\x85\x26\xaa\x9a\x2f\x4a\xf5\x81\xf4\x49\x11\x8c\x6c\xb0\xb7\x83\xef\x47\xde\x1e\x15\x36\x9d\xcd\x31\x97\x17\x90\x46\x07\x47\x38\x35\x84\x9e\xe0\x37\x16\xe3\xc6\x38\x8b\xc8\xac\xd6\xff\x3c\x44\xc7\x07\x21\x8f\xc2\x38\xca\x00\xb1\x86\x08\x8d\x96\x29\x23\x08\xf2\xa9\x42\xd8\xcb\x58\x45\xf9\x46\xf8\x40\x6c\x36\x4c\x0b\x33\x40\x8d\x72\x2c\x87\x44\xc7\xda\xb5\x3e\x47\xb7\x54\x4e\x21\x8d\x72\xeb\x4e\x2f\x27\x70\xc0\x07\x83\x6c\xa4\xe6\x5e\xfe\x15\x96\x3e\xf7\x74\x15\x52\xa4\x84\x0e\x69\x51\x58\xb9\x08\x2c\xaf\xd7\x55\x18\x01\x84\x7a\xbe\x10\x39\x27\xad\x12\x89\x22\xec\x04\xb4\xe6\xdf\x45\x7c\x49\x12\x08\x44\xed\x27\x91\xf6\x82\xf5\xfb\xa6\x94\xcc\xe4\x5c\x9a\x5e\xbe\x8e\xf6\x7b\x38\xc6\xa2\x0c\xa4\x56\x81\x69\x53\xc7\x25\xbf\x7d\xf4\x39\xdb\x73\xbb\xd6\x54\xc4\xdf\xf0\x86\x99\xe9\x35\xb7\xcc\x96\x6c\xdd\x34\x53\xeb\x9e\xb7\x2d\x89\xb3\x8c\xae\x6e\xbe\xcd\x4d\xd3\x93\x6b\x6c\x99\xf9\xbe\x6d\xc3\x74\x9d\xfb\xdd\xae\x65\x9c\x5d\x10\xfe\xad\x02\x99\x9d\x5d\x7d\xc3\xca\x82\x2d\x3b\x66\x2b\xdd\xef\x96\x5d\x88\xcb\xe4\x30\x8b\x57\xdf\xe6\x96\x99\x14\x68\xf5\x1d\xb3\xdf\xb7\x6c\x98\xa9\x73\xcf\xfb\x95\x5f\xc6\xac\x06\x61\xf7\x4b\x9f\x98\x11\x22\xfa\x9d\x6c\xf8\x5d\x90\x0d\x98\x45\x8f\x4e\x87\x9b\xc3\xe1\xa3\x73\xcc\xa3\xa0\x1f\xd4\x22\xad\xea\xf0\x12\x21\xd1\x94\x24\x5d\x85\x6d\x54\x24\x95\x7b\x44\x23\x6a\xa9\x48\x95\x75\x8c\x9a\x90\x69\x81\x0e\x27\x41\x47\x22\x7d\x9d\x5e\x1b\x0b\xea\x11\x27\xe0\x96\x11\x32\xcc\x5d\x1d\xf1\x45\xcc\x9f\x89\x70\x8c\xaa\xf6\xd6\xc3\x74\x94\x25\x74\x41\xc2\x23\x54\x6c\xbf\x1a\x74\xaf\xab\x91\xc8\x09\x2d\xe2\xac\x2b\x2a\x51\x66\x45\x4e\xab\xfb\xc1\x3a\xf7\x11\x61\xd7\x4e\xaa\xaa\x6a\x72\x0b\xaa\xb1\x68\x4b\x24\xb4\x03\xdb\xf0\xbd\xb6\x14\x34\x38\xdd\xdf\x33\xb5\xa3\x65\xa3\x6f\x67\x43\xcd\x9c\xea\xfb\x69\xbf\x7f\x9d\xed\xe4\xf4\x72\xbf\xad\x84\x06\xdf\xd0\x36\x72\x7a\xd9\xd8\x42\xf9\xed\x2b\x6d\x5f\xce\x16\xb1\x78\xc0\xb7\xcf\x8c\xa0\xed\x3a\xbe\xbf\x7d\xdf\xfa\xdb\x57\x33\x8d\xd0\x11\xa1\x42\x82\x7f\x84\xf4\x9b\xb3\xf1\x1c\xd3\x88\xcd\x8e\xe6\x76\x13\xc1\x56\xf3\xe8\x0f\xe3\x09\xc5\x71\xc4\x66\x8f\xe7\x38\x2b\x4b\xe2\xcd\x26\xc6\x79\x94\x4d\xd3\xc3\x1f\x27\xe9\xde\x32\x17\x3e\x18\x70\x63\xaa\x97\x4f\xb3\x29\x1f\x65\xf9\x99\x2a\x0c\xc7\x38\x47\xc3\x60\x34\x1a\x05\x93\xfa\xe7\x09\xdf\xf1\x0e\xee\x47\x22\xe6\x6c\x49\x78\xb6\x48\xf9\xb7\x49\x53\x97\xd3\xab\x53\xd5\x4e\xc9\x16\xba\xba\xac\x75\xbf\x94\x75\x2e\x29\x94\xbd\xc9\x07\xa7\xd5\xb7\x83\xa6\xed\xa4\xea\xb8\xba\x2c\xf8\x2a\x08\xfb\xfa\x0e\x1e\x96\x26\xde\xa6\x46\x2b\x22\x22\xb8\x8a\x61\x05\x9a\x8a\x89\x63\x24\x24\x10\xd2\xf4\xe4\x18\x8d\x2e\xe3\x75\x15\x5a\xae\x25\x71\xba\xcc\x17\x24\xac\x42\xb1\x0d\x7f\x67\x6c\x42\x50\x81\x67\xf3\x3b\x59\x05\x5d\x83\xa7\xc4\xb6\x5d\x13\x9d\x76\xad\x41\x8f\x7e\x35\x09\xb4\xd1\xc0\x35\xec\x8d\xc7\x5e\x7b\xe3\xb1\x6b\x6f\x3c\x9e\x4f\x82\x00\x3c\x34\xb4\xb1\x89\xd5\x48\x11\xe4\x45\xf6\x2f\x3f\xaf\xc9\x42\x90\x65\x3f\xee\xab\x16\xb8\x7f\x9e\x8a\x7e\xdc\x0f\x86\xa1\x45\xc4\x64\xea\xe8\xb8\x26\xf0\x5a\x96\xa9\x8b\xaa\xcc\x87\x91\x6e\x7b\x4c\x72\xd4\xeb\x38\x18\x68\x05\x4e\xbd\xc0\x3e\x9b\x53\x8f\x2c\xde\x2c\xa2\x98\x78\x0a\xc9\x60\xb0\x65\x38\x00\x2a\xf5\x7c\xa5\x3c\x8a\x22\xfb\xfd\xc0\xfc\x5d\x9a\xc1\x4d\xcd\xdc\x26\x76\xc0\xee\xb0\xe2\x23\xcf\xbf\x83\x4a\x3b\xa8\x58\x3e\xf5\x51\x38\x9d\xfc\xbf\xcd\x5f\xb2\xcd\xe1\xe6\x2f\x8f\xd0\x5f\x3e\x3c\x3a\xc7\xbe\x53\xae\xf2\xad\xc5\xbf\x34\xa8\xd5\x58\x97\xef\x60\x56\x05\x33\x4e\x2f\xff\xa5\x51\x91\x97\x7a\xfa\x0e\x24\x35\x5c\xe4\x62\x93\x7f\x7e\x58\x49\x2f\xd7\x29\xd8\xa8\x7a\x08\xe1\x24\xcd\x72\x4e\xac\x55\xf1\x43\xc3\x4c\xc5\xb8\x50\x91\x68\xa7\xa7\x49\x1a\x2f\x09\xc7\x2c\xba\x7d\xf6\xfc\xe3\xab\x93\xb7\x2a\xad\x54\x4f\x4f\xff\x42\x5c\x26\x67\x31\xcf\x1e\x7d\x22\x37\xd7\x29\x5f\x66\xf5\x49\x53\xd6\x17\x23\x65\xd5\xc9\x6f\xa6\x2c\x92\x3f\x20\xd3\x48\xd8\xb5\x07\x64\xec\x1b\x78\x9a\x0b\xb8\x53\x7b\x8d\x29\x79\xfa\xe6\xa8\x9d\xfb\x42\x26\xb0\x31\x1b\xa9\xf5\x3b\xb4\x3f\xdf\xef\x34\x15\x5b\x73\x99\x27\x82\x1e\xc6\x92\x34\xdf\xcf\x8a\xa2\x4a\xff\x7f\x65\x0f\x83\x87\xf0\x8f\xd5\xe4\xbf\x31\x76\xd2\x36\x7d\x0d\x1b\x70\x86\x79\xb4\xcb\x8d\xc3\x7a\xd4\x86\x2c\x02\xe7\xc9\x90\xdd\xcd\x23\xa2\x8b\x44\x05\xdc\x69\xb8\x65\xa7\xaa\x02\x90\xd2\xe8\x1a\x8e\x38\x0b\x30\x05\x7e\xab\x75\x17\xca\x55\x4c\xd5\x87\x67\x21\x41\x13\x52\xa0\xa6\x81\xa1\xb1\x21\x42\x05\x86\x9d\xce\x5e\xd0\xe5\x73\xc8\x8e\xad\xcd\x22\x53\x93\x65\x5c\x0f\x3e\x9a\xcd\x2b\x61\xe5\x8d\x8d\xb5\xde\x6a\x18\xf8\x4f\xe4\xc6\x64\x37\x94\x3b\x5d\x1f\x53\xaf\x02\x59\x6f\x8d\x5a\x91\x6c\x1e\xa0\x9e\x59\xcb\xcb\xcb\xb5\xb8\x09\xb9\x59\x4b\x0d\x5e\xaa\xcb\x90\xac\xe4\xa4\x4b\xbd\x9a\x9d\xfd\x57\xf2\xe9\x61\x11\xfd\x12\x48\xda\xe9\x5b\x83\x24\xbf\xab\xd7\xd8\x7e\x90\x26\x32\x96\xef\x24\xed\x41\x82\x55\x8c\xe7\x5c\xfd\xde\x20\x58\xb4\x9f\x72\x0b\x00\xa8\x53\xde\x6c\x66\x73\xf0\x24\x93\x00\xcd\x54\xf6\xe5\x15\x4d\x84\x9b\xd6\xde\x82\xf7\xe1\x51\x14\x45\x74\x04\x79\x9f\x4e\x56\x90\x20\xa8\x97\x7a\x93\x83\x36\xee\x0f\x08\x78\x20\xb3\x3a\xc2\xa2\x6b\x13\x06\xd9\x7d\x65\x13\xef\x45\x84\x15\x60\x0a\xfe\x19\x5a\x96\xd6\x9c\x73\x70\x7a\xaa\x10\xb3\xf5\x82\xd1\xbb\x91\xd3\xe5\xcf\x29\x57\xa9\x33\xee\x80\xf3\x19\x21\x4b\x59\x1c\xdf\x64\x22\x5e\x7c\xfa\xfa\xd6\x73\x5f\x48\x04\x8a\xde\x76\xc4\x0d\x20\xda\x48\x3c\xa5\x56\x0d\x90\x1b\x98\xa5\xab\x5f\xe9\x5a\xf8\xf2\x51\x35\xe1\x52\x75\x11\x20\xcc\x1a\x45\xa6\x47\x2f\xd0\xea\x01\x4a\xb2\x52\x79\xed\xa2\x6a\x1a\xb1\xb6\x17\x47\x65\xce\x0f\x59\xf4\xe3\x4e\x5c\x53\x3e\x3c\x22\xaa\x3a\x01\xfe\x2e\xd4\x14\x7c\xb3\x51\xca\x6b\xa3\xa1\xd8\x6c\xf6\xd0\x55\x08\xfc\xa0\xaf\x2c\x3c\xb3\xb3\xf1\x5c\xe2\x99\xd9\xd1\x1c\xc7\x11\x9f\x3d\xae\xd9\x78\x9a\x17\x07\xb2\x9d\xc7\x51\x8a\x53\x70\x25\x6e\x22\x01\x0d\x49\x98\x36\x8b\x2c\x24\xe1\xb8\x59\x68\x40\x35\xdd\xfa\x1c\x77\x45\xe3\x3b\x70\x78\x29\x3c\x71\x3d\xd4\x1a\x91\xfb\x3c\x18\xc7\xfc\xab\x1c\x8f\xbd\xc2\xf9\x3b\x91\xa6\xdf\x3d\x6e\xbf\xb6\xc7\xad\xdd\x54\x1e\x96\x7b\xd5\xc4\xdc\x58\xb8\x5b\x27\x71\xe0\xf8\x98\x3f\x21\xc7\x7c\x38\x44\x62\xc6\xe7\x0e\x36\xe7\x73\xed\x64\x1f\x8a\x48\xc8\x37\x1c\xb5\x50\xa4\x65\xde\x54\x82\x03\x89\xa9\xe5\x9b\xed\x0d\x69\xd3\x74\x7c\xb4\xb1\x0e\xea\x6f\x0e\xe6\xc6\x87\x53\x34\x86\xad\x23\x7d\x8e\x09\xaa\xdf\xef\x52\x9f\x31\x12\xa9\xfa\x81\x26\x33\x31\xb7\x53\x0b\x49\x24\x97\xa4\xc6\xd7\x13\x23\xda\x19\x73\x8e\xee\xc4\xba\xa8\x5b\x14\x71\x3f\x6f\x4c\x6b\x8a\x37\xbe\xc3\xaf\x70\xcb\x6d\x95\xcb\xd9\x9f\xfd\xfb\xc2\xd7\x7c\x56\xc3\xa1\xcf\x42\xa2\x99\x99\x3b\xee\x96\x5c\x45\x45\xbd\x53\x51\x59\xde\xc5\x6f\xb0\x7d\xcb\x16\x17\x39\xfb\x74\xa7\x98\xa4\x9d\x31\x54\xf9\xa6\xff\xcb\xbd\xe8\x72\x8d\x0f\xf8\xa2\xdf\x05\xba\xe0\xc0\x23\xda\x06\x5d\x26\x72\x25\xe6\xea\xcf\x05\xa1\x49\xc5\xb4\xcf\x9c\x1a\x8d\xd6\x31\xcf\xc8\x2b\x06\x36\x7e\x63\xc9\xbd\xb0\x90\xe2\x31\xc4\x63\x29\xcd\xfd\x4a\x84\x03\x04\x85\xf3\xe6\xe3\x40\x1d\x46\x80\x10\x3e\x88\x37\x9b\xf4\xc9\x91\x06\x95\xd9\xdc\xc6\x53\xcb\xa2\x31\xce\xa3\xc3\x23\x9c\x38\xe8\x99\x87\xf1\xa3\x14\xa1\xe3\xec\x49\x7c\x8c\x92\xd9\x70\x98\xcf\x23\xa1\xaf\x5c\x86\xb3\x61\x94\x5a\xac\x97\x54\xd2\xb5\x77\x25\xb4\xf3\xcb\x40\xb3\x39\x75\x3e\x51\x21\x0a\x2f\x4f\x57\x52\xc7\x34\x6c\xd0\xdd\xf9\x65\x80\x30\x51\x1c\x6a\x8b\x58\x06\x2c\x48\x1e\xd7\x2c\x48\xb6\x0a\x43\xbc\xd4\x17\x4c\x9e\x7f\x1d\xea\x6a\x6b\xf6\xaa\x6d\x48\x27\xbd\x5c\xc7\x8b\xae\x2e\x75\xdf\xd1\xce\x3f\x01\xda\xd9\xfd\x94\xed\x94\x5b\x3a\xd6\xc4\x5e\x9a\x86\xa1\x69\xd8\x72\x4f\xd8\x96\xfb\x60\x64\x66\xcf\xc2\x19\x9b\x97\xb7\xa3\x86\x15\x8c\x60\xc6\xf4\x68\x86\x7e\xc7\x49\x46\x98\xe8\x2e\x79\xda\xe7\x52\xed\xf7\x92\xab\x4e\xee\x24\xfd\xfe\xfa\xbc\x06\xff\x0a\x14\xff\x3e\x6c\x54\x15\x5b\xdc\x79\x76\x1d\x2f\x90\xc3\x94\x7c\x7d\x5e\xab\x69\xa8\xcf\x23\xb9\x2f\x8e\x78\xc0\xda\xca\xdb\x27\xad\xca\xa1\x88\x30\xbd\x1b\x6d\xab\x81\xb4\x8d\xfe\x48\x5b\x2c\xf2\xef\xfe\xd0\xa8\x08\x90\x77\x64\xe0\xdb\xe4\x8c\xed\x3d\x28\xbd\x34\x65\x8b\x24\x5f\x92\x6c\x97\x95\x9d\x0b\x06\xe5\xcb\x56\xb5\x92\x33\xc8\x49\x00\xfd\x50\xa7\xc4\x74\xb4\x91\x03\x0f\xb1\x55\x57\x87\x0c\x06\x25\x0a\x24\x25\xf1\x35\x25\x1e\x5b\x35\xe6\x6a\x6f\x79\xc8\xb0\x40\x05\x3e\x18\xa3\x89\x9a\xe8\x1d\x8f\x5e\x9d\x45\xfb\xd9\x57\xd9\xc0\xbb\x9f\xfa\x92\x2c\xbe\x93\x16\xbf\x53\xd2\xa2\xcd\xb4\xba\x41\x18\x3b\x1c\x86\x12\x59\x6a\x37\x22\x8e\xb9\xde\x6e\x89\xd0\xde\xe6\xb2\x4e\x48\x11\x3e\xa0\xd9\xdb\xf8\x6d\x48\x11\xaa\x87\x04\xe6\x60\x50\x7d\x84\x30\x3d\xe4\x77\x23\x6d\x16\x10\x99\xda\x1b\xa8\xcd\x6f\x22\xbc\xaf\xd2\xdb\x42\x36\x4f\xd7\xdf\x41\xfb\x77\x0a\xda\xff\x40\xaa\x79\x7f\xb6\x92\x6a\x12\x80\xa3\x02\xc3\xd7\xe7\xbb\xe8\x5b\x2f\xbf\x7c\x9f\x04\xae\xa2\xc0\x0f\xcf\xfc\x8e\xe1\xad\x6f\x71\x76\x48\xfe\x27\x8f\x93\xee\xa2\xf7\xef\xb7\xe5\x9f\xe7\xb6\xf0\xfd\x6e\x8b\x90\x84\xb0\x72\xe3\x11\xea\xb6\x08\xe5\xc6\x23\x4a\x4d\x59\x8d\xd6\x4a\x2d\x61\x65\xbe\xc0\x43\x94\x46\x14\x53\xfb\x10\xb5\xdc\xb3\xb4\x59\x72\x76\xf3\x2e\x16\x17\x8e\x04\xa7\x2c\x82\xb5\x3a\x32\x1f\xaf\x6c\x47\xb5\x6f\xbf\xa5\xa6\x7f\xd3\xdb\x4e\xd9\x96\x6e\xe0\x53\x19\xab\x2e\x50\xf3\x29\x26\x08\x75\xb4\x57\x29\xb3\xc2\xf0\x9e\x39\x2b\xcb\x54\x4b\x8e\xde\x63\x3a\xc8\xa6\x1e\xd3\x05\xe6\xca\xdc\x30\x41\xc8\xb1\x45\xe4\x0e\x65\xdd\x70\xf0\x31\x7a\x12\xcc\xdc\x26\x0d\xd2\xda\xf4\x5b\x68\x95\xc5\x36\xe9\xc0\xe8\xff\x90\x78\x71\x31\x2a\xb5\x3f\x08\x73\x63\xd2\xb3\x7d\x47\xc0\x9e\xe2\x41\x44\x09\x7b\x91\x19\x6a\x35\xdf\x09\x8d\x7f\x69\xd4\xf9\x95\x08\x8d\x46\x6c\x55\x9d\x75\x64\xa7\x10\x5b\xd7\xdb\x72\x4b\x6c\x4f\x3b\x91\x9c\xad\x7a\x4f\xc8\x4c\x6c\xc5\x0f\x01\x26\xdd\xd0\x81\x78\x30\x74\xb0\x27\xe1\xc5\x96\x35\xb2\xeb\x3b\x3e\xf8\x8e\x0f\xba\xe0\x03\x8f\x47\x34\x6b\x18\x1d\x7d\x4b\x74\x51\x67\x7a\xa8\x57\xc7\x12\xf7\x6a\xa2\x5b\x57\x49\xb6\xd1\x15\x2d\x64\x5c\x8b\x45\xea\x56\x2a\xae\x66\xc3\x20\xd0\x48\xde\xfb\x9f\xc0\xf8\x03\x15\x7b\x59\xd7\x3e\x1c\x26\x4a\x24\xf4\xdf\x2d\x87\xea\x77\x4c\xf4\x8f\xc7\x44\x5e\xd5\x4c\xc3\x6e\xdf\x27\x91\xf6\x78\x4f\x4b\x2a\x5d\x39\x50\x4f\xc8\x5d\x70\x9c\x06\xa6\x8e\xb2\xbb\x5d\xf8\x8e\xb7\xa9\x27\x1b\xd8\x8d\x23\xcc\x1e\x58\xae\xb2\x17\xb5\x7f\xce\xd3\x7c\xfd\xfd\x7d\xff\xfd\xde\xaa\xfb\x7a\xdf\xbb\xda\xb9\x78\x1c\x1e\x1a\x52\x02\x3d\x27\xa5\x48\x0b\x1d\x7f\xc4\x86\xfb\x81\xbd\x3f\xae\x7a\x4a\x54\x1d\x64\x58\xc9\x40\x97\x52\x96\xcd\x26\x34\x75\x9e\x85\x08\xb3\x59\x69\x6f\xc9\xd1\x3c\x02\x21\x26\x9c\x3e\xd8\xdd\xb0\x02\xef\x79\xa3\xef\x8b\xa3\x69\x90\x2e\x5f\x89\x40\x21\x9d\x28\x92\xae\x94\x06\x43\xdd\x28\x17\xe3\x68\xf2\x0f\x17\x62\x5c\xc4\xd9\x21\x83\x6c\x34\x9d\xa4\xc5\xe6\x5f\xd5\xe4\x2b\xe8\x88\xfd\x72\x69\x95\xa9\xcf\x8f\x70\xa9\xd2\xcc\x2a\x01\x54\xc3\x58\xf5\xb1\xd7\x58\xf5\xf1\x7c\x30\x70\x7f\x61\xad\x66\x95\xcb\x44\xb2\x3f\x4c\xcd\xe5\x3c\x08\xc7\x98\x97\xe2\xb1\x14\x13\x4c\x1d\xe1\xa6\x11\xca\xa5\x77\x42\x38\x17\x71\xf6\x96\x7c\x16\x5b\x95\xbf\xec\x3e\x94\xbf\xf2\xd8\x4d\xee\xfa\x3d\x8f\xbe\x6c\xf6\x4f\x7f\xfc\x66\xa9\x5f\x19\x04\xde\xe9\x61\x1f\x1e\x0c\x28\xfb\x6e\x03\xf0\x7b\xa5\x67\xfe\xa1\x36\x00\xc3\x3b\xd9\x00\x50\xf6\xd5\x6c\x00\x28\x13\x84\x67\x64\xd1\xf5\x61\xfb\x52\xaf\xa4\xfb\xa2\x2e\x7d\xca\x17\x2b\x1f\xb5\x8b\xba\xb3\x68\x80\xb2\xab\xf4\xd3\x83\x5a\x3f\xb6\xdd\xf8\xdf\x8d\xb3\xd4\xc3\xb1\x13\x6a\xf3\xdb\x1c\x7c\x0c\x4f\xf0\xfe\xc3\x9f\xdf\x8d\x62\x37\x31\x29\xaf\x70\xcf\x5e\x0b\x44\x1c\x47\xe9\x68\x9d\xae\xc3\x16\x4f\xa6\x18\x4d\x9b\x6e\xb9\xdb\x43\x04\x08\x7e\xf3\x0a\x26\x1c\x42\xb2\x59\xc7\x2b\x4b\xd6\x2d\x3c\xa9\xc5\xeb\xed\x62\xd5\xae\x70\x75\x81\xf5\x98\x75\x77\x75\x62\xfa\x5b\x4a\xbf\x0b\xb8\x7e\xaf\x4f\xd7\x37\xab\x7a\x33\xc7\xcf\xcb\x17\x32\xc0\x41\xab\x65\x02\x30\xcf\x12\x12\xbf\x25\x03\xa0\xcb\xf8\xbb\x98\xea\xfb\xdd\xf8\xd7\x12\xe2\x7c\x45\x2d\x93\x7c\x34\x7f\xba\x71\x74\xd4\xdf\x84\xca\xe7\x32\xfe\x6e\xf1\xfa\xfd\xc6\x7f\xc3\x86\x28\xbb\xee\xfc\xdd\xcc\x50\xbe\xf2\xbd\xff\xd6\x6e\xfd\x1e\x82\x5b\x25\x4f\x3b\x27\xe2\x10\x62\x23\xdd\x83\xf0\x6e\x1f\xaf\x1d\x9b\x34\xef\xae\x02\xb9\x7a\xf4\x03\x86\x89\x04\xb8\xb4\xa2\xfd\xb0\xde\x3a\x87\x47\x3d\xba\x0a\x0f\xea\x52\x0f\x83\xc4\x68\x14\x45\xe9\x94\x58\x8f\x46\x86\x46\x8a\xf1\x7c\x26\x42\x3a\x3c\xba\xd3\x8d\x94\x47\xb1\x35\x74\x03\xbb\x8f\xd0\x0d\x6a\x9a\x87\xf1\x77\xa7\xe0\xdf\x2b\xb2\xaf\x9b\xd0\x7b\x42\x00\xd8\xed\xaf\xc7\x0e\x70\x8c\x4e\x2c\xbc\xde\x2d\x4a\xa2\x69\xbe\xb7\x56\xdf\x1f\x0a\xc0\xa0\x14\x2f\x6f\xe3\x33\x3d\x06\x44\xab\x5a\x35\x5f\x0d\xad\x3f\xbd\xbf\x30\x00\x7a\x7a\x1e\xa3\xa8\xfa\xbb\xf6\xd5\x02\x01\xec\x25\xcb\x54\xd1\xa0\xe2\xe4\xfb\xa5\xff\x27\xb8\xf4\x6d\x6e\xfa\x5e\x13\x7e\xe6\x0d\x15\x5c\xdc\xe9\xca\x6b\x20\xfa\x5a\x02\xf8\x35\x5d\xfb\x62\x08\x77\x51\x30\xd2\x35\xe9\x46\x9f\x54\x83\xe6\xde\x7f\xb2\x0e\xef\x36\x89\x91\x9c\x60\xcf\xbe\xe7\x83\x41\xc8\x67\xf6\xd7\x5c\x42\x6b\xef\x21\x24\x9e\x6a\x5b\xf6\xf3\xe9\x5a\xf3\xf4\x92\x66\x64\x0f\xaf\x2e\xe6\xf7\x02\x01\x7b\x33\x71\x41\x58\xc8\xd0\x84\x55\xfc\xe3\xf9\xfd\x45\x86\x72\x6e\x60\x19\x43\xa1\x11\x83\x8c\x3b\x21\x15\xc0\x02\x66\x7c\x4c\x9f\x88\x63\x3a\x1c\x22\x3e\xa3\x6e\x0c\x32\x3a\x2f\x2d\x6a\x3c\xc6\x72\x98\xda\x3b\xa5\x72\x0f\x89\xaa\xff\x3e\x87\xa5\x82\x57\xb7\xd6\x93\xdd\xe9\xe6\x29\xb1\xff\xcf\x7a\x60\xb8\x7f\xf2\x2c\xdb\xa9\xc5\x7b\x86\x9b\xfd\xd4\xfc\xff\x94\x8c\xc2\x56\x76\x40\x9d\x7d\x0b\x3b\x70\x78\x37\x76\xc0\x6c\xfa\xc3\xb3\x04\xff\x93\x93\xfc\xc1\xf1\xc2\x43\xde\x70\xb6\xfd\x86\x33\x73\xc3\xd9\xfe\x37\x9c\x35\x6e\x38\x6b\xdc\x70\xb7\xfa\x2e\xdc\xe7\xa1\x6a\xeb\xfd\x15\x68\xd2\xfc\xa6\x8c\xc3\xbf\x08\x89\xc0\x31\x7f\xad\xb7\x9b\x4b\x32\x77\x2f\x98\x82\x58\x55\x9c\x66\x8d\x67\xf8\xbb\x07\xf1\xef\x85\x36\xe5\x95\x38\x37\xf8\xc7\x96\x40\xb8\x71\x14\x9c\xa5\x69\x42\x62\x49\xa8\x6a\xb8\x93\xf4\xea\xc9\x0a\xc2\xe1\xc6\x3d\x15\x90\x6e\x06\x76\x27\xf4\x49\x8a\xcc\xfe\xe7\x51\x3c\x15\xa3\x44\x90\x89\xfc\x2f\x4e\x22\x7a\x9c\x87\x09\x4e\xd1\x71\x32\x1c\xa2\x4c\xed\x75\x02\xa8\x9a\x3e\x2d\x9b\x2d\xa0\xd9\x39\x34\x3b\x17\x78\x15\xd1\xe3\x45\xb8\x92\xcd\x56\x87\x87\xa6\xd9\xaa\x0c\xc1\x13\x45\x51\x3a\x18\xc4\x83\x81\x2e\x4a\x11\xce\xee\x72\xe1\xe0\x0e\x7c\xad\x37\x5a\xa1\xae\xef\xfc\xdd\xef\xf4\x0e\xfd\x7e\x5c\xc7\x3c\xe2\xfa\x2e\x7e\x65\x94\x51\x41\xe3\xe4\xcf\x5d\x7c\xc8\xf6\x71\x39\xad\x75\xdc\x10\xfd\xb7\x24\x0e\x28\x35\x00\x1e\x4f\xad\x4a\x97\x1e\x4f\x55\x71\x17\xb7\xfb\xc8\x6f\x00\xee\x17\x75\xb9\x26\xfa\x46\x9a\x65\xa8\x13\x01\x6e\x62\x9d\xfc\x5a\xf9\x43\xfa\xb5\x76\x0f\xee\xcd\x09\xc8\x9c\xbf\x07\x14\xf9\x8e\xca\xbe\x07\x14\xf9\x1e\x50\xa4\x1a\xf7\xa3\x53\x40\x91\x83\xbb\x44\x14\xa9\xf6\xfb\x2f\x11\x50\x84\x93\x35\xf9\xae\xda\xfb\xdd\xa2\xce\xce\x06\xf9\x5a\xe0\xcf\xc0\xe2\x3e\x38\xa8\x71\x51\x1c\x4d\x67\x74\xae\xd3\x28\x2b\x49\x82\x5c\x34\xbe\x55\xdb\x35\xe1\x45\x2d\x93\x82\x3d\x7b\x5a\xdc\x09\x7f\x2b\xb0\xfb\x6a\xb2\x05\x72\x45\x78\xe7\x5c\x94\xdf\xa1\xfc\x5b\x83\xf2\xdf\x6f\x54\x6b\x90\xec\xda\x74\xe4\x1a\x0e\x43\x84\x26\x33\x36\xff\x66\xac\x77\xb3\x8b\x7c\xb5\x4a\xbe\x5f\x8f\xdf\xeb\xf5\xa8\x73\x34\x24\x22\x65\xce\xc6\x2b\x95\xee\xb0\xe2\xb4\xed\x04\x19\x86\x7c\x0e\xd5\xb4\xb3\xd5\xa7\x41\xa0\xc1\x40\x6c\x36\x90\x72\x82\xc7\x6c\x99\x5e\x1e\xd3\xa7\x47\xc7\x48\x27\xa4\x58\x25\xa9\xec\x20\x44\xff\x4e\x0f\x0f\xe5\xa3\x43\x66\x74\x8e\xe5\x7f\x22\x32\x63\xf2\x2f\x36\x8f\xb8\x15\x98\xdf\xe5\x2a\x6b\xf0\xbc\xd7\x68\x10\x8f\x6b\x92\xc6\x5e\xdd\xed\x2c\x6d\x21\xec\x4b\x5e\xa0\xf5\xf2\xa7\x08\xb3\x30\xc5\xd4\x8d\x5f\x9f\xce\xbf\x9d\xa8\x12\x00\x1a\xdf\x2f\xfb\xef\xf4\xb2\xff\x7e\xe4\x7e\xe5\x75\x48\x4d\xc8\x5a\xc9\xf5\x7c\x33\xaf\x5e\xca\xeb\x12\xa6\xef\x17\xe1\xfb\x45\xd8\x75\x11\x6c\x06\x31\x79\x17\x94\xfb\x23\xa6\x91\x08\x59\x85\x54\x0c\xdb\x1f\x54\x8a\x36\x9b\xba\x14\x09\x0e\x2d\xf2\x98\xba\x97\x81\x89\xea\x25\x12\x7c\xe5\xaa\xb3\xed\x39\x54\x0a\x6c\x2b\xb6\xdf\x35\xa7\xaf\x9d\x42\xa2\xb2\x6e\xd3\x14\xde\x88\xc7\x76\xca\x82\xb0\x47\xd6\x73\x97\xa0\x28\x23\x39\x1b\xd7\x42\xfe\x2e\x46\xf6\x95\x3e\xdc\xf5\x7d\x13\xf6\xf6\x22\xbe\x93\xef\xf4\x77\x1c\xf5\x2f\x8c\xa3\xbe\x2c\xb0\x3c\x98\x8f\x7c\x2b\xaf\xb4\x48\xcf\xcf\x93\x3b\x1a\x75\xaa\xb6\xdf\xb4\x59\xa7\x9a\xe2\xd7\x37\xec\x34\x5b\xf3\x3d\x26\xc3\x03\x49\x60\x3d\xa4\xb2\xbe\x5e\x8f\x91\xc7\x30\xad\xfe\xd6\x52\x6d\x40\xd8\x8c\xef\x63\xb4\x57\xa9\x93\x70\x1e\xbb\x29\xde\x4b\xcc\x0f\x89\xe9\xc5\x66\x23\x86\xf2\x0f\x32\x1d\x4f\xc4\xf0\xa8\x70\x74\x21\x69\x29\x07\xc0\x02\x35\x31\x04\xc5\x1c\xa7\x90\x7b\xcd\x5b\x74\x40\xee\x66\x57\xa6\x80\xef\x6b\x09\x7f\x73\xd6\x1d\x73\xfc\x2e\x22\xb2\xc0\x82\xee\x8c\x50\xaf\xa9\xb8\x48\xf3\xbb\x86\xa8\xf9\xc7\xe4\xdd\xfa\xa2\x2c\x5a\xa2\x61\xa4\x29\x30\xf7\xa0\xb1\x6e\x69\xbe\x40\x7f\x38\x15\x13\x51\x06\x34\x2c\x1c\xef\x4e\x70\x94\xd2\x5b\x2c\x31\xd2\x5d\xae\x87\x6e\xfe\x70\x49\x99\xb5\x91\xf5\x5e\x6f\xa9\x49\xb7\xde\x39\xd5\x73\xe7\x04\xc7\x7b\x24\x25\xdd\x23\xd5\xe2\x3e\x19\xe8\x3a\xe6\x2d\xeb\x9a\x04\x6a\xaf\x7c\x39\xdd\x53\x3e\xec\x11\x0d\x7e\x9f\xc8\xb2\x1d\x03\xb6\xed\x15\xfd\xaa\x7b\x4c\xa8\xae\x41\x77\xba\x87\x20\xe9\x18\xb7\x60\x1f\x0f\xb8\x2f\x77\x1f\xf2\x3a\x28\x75\xb6\x89\xee\x6e\xcb\xb9\x97\x65\x55\x77\xe3\x80\x3d\x54\x48\x7b\xc8\xdd\xba\xf2\xbe\xf7\x41\xe8\xb7\xb0\x13\x9d\xa9\x87\x3d\xde\xd5\x3d\x62\xa5\xef\xe5\x7c\xdd\x59\xb0\xff\xe5\x91\x54\x9b\x6e\x3c\xfb\x04\x75\xdd\x37\x12\x68\x57\x7f\x93\x66\x3c\x4e\x4c\x71\x8a\x63\x9c\xe1\x1c\x27\x78\x81\x57\xf8\x02\xaf\xf1\x12\x5f\xe2\x1b\x7c\x85\xcf\xf1\x19\x3e\xc5\xd7\xf8\x25\xfe\x8c\x3f\xe0\x13\xfc\x0c\x7f\xc2\x6f\xf0\x47\xfc\x1c\xbf\xc7\xef\xf0\x5b\xfc\x37\xfc\x0a\xbf\xc0\xaf\xf1\xcf\xf8\xef\xf8\x97\x2f\xa5\xe3\x5a\x1b\x3c\x83\x77\xf3\x17\x4d\x26\xdd\x12\x96\x5f\x2a\x36\x62\x72\x30\xc6\xe7\x44\x78\x42\x9a\xd9\xb7\xbd\xd8\xda\xb1\x7c\x66\xf7\xea\x97\x75\xea\xf7\xb9\x7c\x95\xf7\xea\x97\x77\xeb\x57\x3d\xe2\x7b\xf5\x4c\x3b\xf7\x9c\x0b\xb2\x57\xcf\x69\xc7\x9e\x15\x89\xb0\x57\xd7\x71\xa7\xae\x5f\x90\xc5\x5e\xbd\x66\xdd\x7a\xe5\xe9\x7a\xaf\x6e\xf3\x4e\xdd\xfe\x0c\x24\xc8\x4f\xfb\x81\x5b\xb2\x47\xd7\x7b\x75\xbc\xe8\xd8\x31\x5b\xee\x39\xe3\x55\xa7\x8e\xff\x28\x49\xa7\x3d\x7b\xbe\xe8\xd4\xf3\x2b\xb6\x1f\x4c\xac\x3b\xf6\xaa\xe9\xb2\xbd\xfa\x5e\x76\xec\x5b\x92\x71\x7b\x75\x7c\xd9\xa9\xe3\xff\x4c\x29\xdb\xab\xdb\x9b\x4e\xdd\xbe\x89\xf7\x3d\xb9\xab\xae\xfd\xee\xd5\xeb\x79\xa7\x5e\x4f\x34\x05\xba\x57\xd7\x67\x9d\xba\x7e\x47\xd7\xfb\x1d\xdb\x69\xe7\x6e\x9f\x41\xcb\xbd\x3a\xbf\xee\xd4\xf9\x7b\x49\x0d\xef\xd5\xef\xcb\x6e\xfd\x02\xf1\xbc\x57\xc7\x9f\x3b\x76\x2c\x0b\xf6\x04\xb8\x0f\x1d\xbb\x96\x94\xf9\x5e\x1d\x9f\x74\xea\xf8\x83\x22\xe4\xf7\xea\xf9\x59\xb7\x9e\x53\xbe\xef\x5e\x7c\xea\xd4\xf1\xc7\x78\x4f\x14\xf4\xa6\x5b\xb7\xc0\x2a\xec\xd5\xf1\x47\xa7\xe3\x76\x1a\x52\x75\x7c\x87\x6b\xf2\xbc\xd3\xbc\x7f\x65\xfb\xf6\xfb\xbe\x53\xbf\xff\xa5\x18\x9c\xbd\x7a\x7e\xd7\xed\xa9\x56\xfc\xd0\x5e\x3d\xbf\xed\x86\x41\xb5\x4f\xfd\x5e\x5d\xff\xad\x1b\x38\x4b\x66\x6b\xaf\x7e\x5f\x75\xea\xf7\x2d\xf9\xbc\xdf\x74\x5f\x74\xc3\xcc\x9a\xdd\xda\xab\xeb\xd7\x9d\xba\xfe\x45\x25\x90\xd8\xab\xe7\x9f\xbb\xf6\x7c\xa7\x79\xff\xbd\x53\xef\xff\x57\x72\x95\x7b\xf5\xfb\x8b\xd3\x6f\x17\x41\x6b\xc3\x4f\xbd\x9b\xbe\xed\x0e\x32\xe3\x44\x10\xaf\x0a\xa8\x4f\x9e\x44\xa2\x80\x0a\x6d\xe5\x50\x7c\xde\xda\xfe\x69\xa4\x2b\xb4\x95\xc3\x26\x77\xdc\x0a\x27\xc4\xc7\xbd\xfb\xf5\x7d\x81\xee\xc5\xe9\x15\xb2\x7c\x28\x31\x3b\xeb\x71\x88\xc8\x6c\x24\xfb\x44\xe5\xdd\xf3\x44\x2f\xaf\xc5\x6e\x80\x4e\x0a\x84\x74\xe2\x0c\xa7\xbd\x51\xd9\xd9\xb4\x1e\xfd\xf4\x69\x34\x9e\xa6\x13\x96\x27\xc9\x1e\xfb\x68\xd5\x29\x0f\x06\x50\xcd\xad\x71\xe3\xe3\x40\x5a\x05\x98\xc1\x66\x03\x59\xdf\x80\x4d\xc6\xbb\xc2\x6a\x3c\x3d\x9a\xb2\xc3\xa3\x09\xe4\x7e\x38\x72\xc3\x6b\x1c\x1e\xf9\x03\x6c\x98\xe0\x38\x44\x3b\xa6\x76\xdd\x1e\x03\x30\x5f\x71\x7b\x9c\x3b\x71\xc7\x38\x32\xd3\xff\xfc\x70\xf2\x76\x94\x81\x4a\x9b\xae\x6e\x42\x82\xa2\x28\xaa\x7d\x13\x46\xd1\x44\xb3\x97\x72\x85\xda\x82\xa5\xfa\x0d\x9c\xd7\xf6\xda\x2d\x25\x66\xfc\xba\xd0\xa4\x3d\x92\xf4\xd0\x75\x2b\x39\xb0\x03\xb0\x9a\xf6\x66\xe9\x7e\xeb\x33\xb1\x67\xf6\xc4\x3a\x7a\x6e\x0f\x8f\x76\xda\x82\xc0\x0c\x06\x0d\x1b\x81\x3b\x86\xc3\xb9\x2d\x3c\x31\xdf\x6a\x9b\x0a\x01\x67\xd0\x60\xb0\xad\x0a\x58\x63\x81\x51\x85\xef\x04\xd8\x22\xe7\x9c\xb0\xc5\xcd\xa3\xc3\xb3\x7c\xb5\x22\xfc\x70\x9d\x26\x74\xd1\xd5\xc8\x76\xdf\xbd\xec\x29\x6c\x54\xc7\x51\xc7\x64\x14\x2f\x04\xbd\x22\x1f\xe3\xec\xd3\x2b\x0d\x43\x66\xbf\x9e\x90\xd1\x65\xfc\xf9\x79\x39\xd5\x63\x63\x51\xa1\x03\xde\x2c\xab\xad\xb2\x0b\xba\x12\xa1\x8a\xe6\x24\xd0\x19\x27\xf1\xa7\x9e\xbf\x7f\xb0\x67\x13\xa8\x28\x7a\x55\x9b\x10\x1b\x2c\xa8\x3a\xee\xa1\x7f\x3c\x35\xcb\xc3\x6d\x4b\x28\xc8\x88\x30\x68\x2b\x4b\xb3\x77\xb0\xc5\xd1\x2d\x27\xff\x93\x53\x4e\xb2\x5f\xd9\x59\x9a\xb3\x25\x59\x3a\x83\x49\x9a\x26\x5b\x5c\x10\xb9\x85\x15\x83\x31\x88\xe6\x29\xc9\x1d\x49\xc2\xbd\x23\x7c\x95\xf2\xcb\x0f\x22\x16\x79\xe6\x0b\x03\x28\xff\x7e\x3a\x9e\x06\x59\xbe\x58\x10\xb2\x0c\x26\x81\x9e\x48\x50\x48\x22\x61\xc9\xd3\xf5\xff\xb5\x6b\xb2\x13\x5b\xc8\xc9\x27\xef\x49\x9c\xa5\x6c\x12\x50\xd1\x3f\x23\x49\xca\xce\xb3\xbe\x48\xfb\x71\xff\x07\xd9\xea\x87\xbe\x6c\xd1\x17\x17\xb1\xe8\x5f\xc7\x59\x3f\x4e\x38\x89\x97\x37\x7d\x9e\x33\x46\xd9\x79\xd0\x3e\x79\x4c\x46\xd9\x5a\xd2\xe2\x95\x9d\x02\xe3\xb6\x91\x3b\x30\xf6\x6e\x37\x1e\xfb\xbf\xeb\x9d\xfe\xa2\xad\x01\x6d\x30\xec\x8b\x9a\xc7\x09\x3b\x4f\x29\x3b\xdf\x67\x6b\x38\xc9\x44\xcc\x85\xc4\x4e\xf5\x1d\x1a\xad\xd5\x8c\x42\x44\x96\xfd\xf8\x3c\xa6\xac\x65\x93\x0c\x70\x7b\xe0\x09\x33\x3f\xd0\xf7\x04\x00\xb3\x7e\x7c\x05\xde\x65\xeb\xe5\x50\x06\x63\xcc\x22\xfd\xdd\xec\xe1\xb1\x78\x62\xfe\x3e\x16\xc3\x21\x62\x33\x31\x8f\xc8\x4c\xd8\x57\x9e\x15\x7e\xc3\x2d\x86\x10\x36\x26\xa1\x91\x31\x0e\x02\xaf\xa3\xcb\xf8\x33\xa0\x4a\x7b\x59\xaa\x57\x0b\xf5\xba\x02\x85\xc0\xca\xda\xf1\xee\xa7\xac\xba\x3b\xb5\xea\x2c\x7b\x11\x7e\xca\xc5\x9f\x08\x59\xbf\x8e\x05\xc9\x44\xc7\xf3\xfe\x64\x1b\x7c\xa3\x17\xe2\xf0\x08\x15\x3b\x10\xbf\x1a\x03\x1e\x54\xfd\xec\x9a\x87\xd5\xff\xfc\x3a\x4d\x45\x9c\x7d\x3a\xb4\x8f\xbe\xaf\x0a\x3c\xcd\x0f\x60\x9e\x79\x11\x67\x17\x11\x19\xf1\x78\x41\xe4\x55\x49\x92\x0f\x44\x88\x84\x2c\xd5\x8f\xaa\x79\x1a\x27\xe7\x84\x29\xc3\xc5\xf7\x39\x13\xf4\x52\x82\x1f\xff\x14\xa6\x92\xac\xcd\xb4\xbd\x10\x64\x54\x7a\xa7\xd6\x8f\x83\x38\x49\x02\x1c\xa3\xf2\x61\x48\x1d\x98\xf2\xf4\x77\xcd\x5d\x67\x6b\xa1\x9f\xb5\x63\x94\x5d\x53\xb1\xb8\x08\x55\x96\xc0\x48\xe7\x8a\xbc\x5d\xc4\x19\xe9\x8f\x27\x25\xcd\x7c\xc6\xf3\xb5\x08\x03\xfd\xe0\x63\x82\x7a\x50\xe5\x68\x22\xff\x09\x08\x5b\x06\x65\xe5\x4c\xa4\xeb\x10\x15\x05\xe6\x58\x82\x08\x2a\xd4\x8a\x6b\x57\x7e\x1c\x45\x91\xbd\xd0\xe6\x41\xeb\x99\x6b\xcf\xa3\xf1\x31\x2f\x2f\xf9\x70\xa8\x79\xa8\x38\x22\x33\x0e\x41\xb9\x0e\xe2\xcd\xe6\x20\x9e\xb1\xd1\x0d\x25\xc9\x52\x02\x87\x32\x01\x9d\xdb\xf8\xe8\xf2\xc6\xab\x30\x5e\x07\x47\x38\x8f\x48\x23\x51\x94\x36\xad\x34\xe4\x91\x49\x60\x7b\xbb\x62\x93\x14\xc7\xfc\x3c\x9b\xcc\xc8\xbc\x40\xa3\x53\x40\x99\x65\x52\xaa\xa3\x83\x28\x62\xa3\x53\x49\xe7\x25\x44\x76\x26\x6f\x37\x19\x0c\xc2\x2c\x3a\x18\x23\xcc\xca\x1c\x53\xd9\x94\x86\x39\x9a\xe4\x6d\x39\xaa\x88\xb2\x55\x2f\x90\xbc\xe2\x0e\x8c\xb8\x67\x0e\x67\xad\x0b\xe4\x91\x63\x0d\x54\x7e\xb8\x90\x45\xba\x16\x40\x60\xb5\x27\xf9\x29\xc0\x9e\x89\x68\x00\xff\x44\x6e\x32\xc9\x55\x5e\xd6\x80\xc5\x4c\x77\x26\xe6\x60\x7a\x6d\xa1\x2e\xae\x44\xf4\xb5\x9f\x33\xc3\xf7\xd6\x6d\xe2\xa8\xda\xf5\x34\x82\x1c\x7d\xb1\x9b\x2c\x6c\x49\x56\x84\x87\xa8\x47\x66\x6c\x1e\x52\xa4\x62\x15\xc6\x23\x4e\xb2\x34\xb9\x22\x58\xfe\xf5\x37\x48\x1a\xe7\x9c\xa9\x43\xcb\x66\x9b\x0d\xec\x3f\x4e\xbd\x69\x87\xe5\xf1\x94\x86\xb6\xe9\xaa\xd4\x89\x4f\xcd\x6b\x1a\xa2\x89\xcf\x89\x64\x74\x7a\x4a\x16\xa7\x1a\x29\x9f\x0e\x06\xb5\x0f\x21\x82\x84\xf9\x38\x89\xe2\x91\xc6\x4e\x23\xed\x24\x10\xe6\x16\x10\x92\x6a\xa3\x28\xc7\xc9\x2e\xac\x47\xd8\x22\x5e\x67\x79\x12\x0b\xb2\x04\x3c\xb6\x27\xb2\x7b\x28\x1e\xa3\xbc\x2f\xc6\x6d\xe0\xf4\x32\xfe\x44\x5e\x69\xcb\xeb\x49\x83\xbf\x80\x77\xe2\x9c\x88\x30\xd0\x04\x46\xe0\xa4\x88\xd6\x04\x01\x44\xc8\x92\xf5\xe4\xb5\x43\x05\xd6\x35\x95\x14\xc3\x27\x19\x73\x96\xed\x79\x0b\xee\x97\xd7\x94\xfb\xaa\xa4\x7a\xcf\x95\x51\x7f\x54\x37\x1b\xb1\x02\x1e\xe5\xff\xcb\x6c\x46\xbb\xaa\x05\x34\xcf\xd9\xe8\x8c\xb2\xa5\x0a\x85\xe1\x6c\x14\x5d\x85\xb4\xca\x25\x69\xe8\xa3\x33\x31\x2f\x89\xa1\x26\xaf\x56\xd2\x46\xf2\x36\x8d\x8f\xe3\x27\xe4\x38\x06\x8a\x28\x76\xe5\x1f\x31\xa0\x4c\x3e\x18\x70\xed\x1c\x73\xab\x2e\x91\x76\x37\xeb\x69\xd7\x99\xd2\xdc\x35\xc3\xa6\xa6\xb5\xd4\x96\x53\xd1\xc7\x45\xff\x51\xf4\x5b\x8a\x8c\x91\x2c\x43\x92\x5d\xdc\x71\x85\xd6\xfa\x78\x0f\x2f\xd3\x25\x5d\x51\xc2\xb3\xc3\x4b\xfa\x99\xb6\xd8\x6e\x3b\x0d\x0d\x29\xc4\xfd\xc5\x55\x4e\xf4\xfe\x69\x07\x33\xef\x37\x66\xda\x9a\x5c\x80\x30\x27\x80\x0e\x3f\x98\x09\x36\x24\x8d\x54\xf2\xd4\xa7\x12\x64\xc1\xac\xe0\x5d\x2c\x2e\x2c\x74\x2a\x4b\xe6\x7a\xa9\x0d\x3a\x39\x3a\xb5\xeb\x2e\xea\x96\x43\xf6\x71\x54\x6b\x57\xd4\xe7\x84\x8c\x4e\xdd\xdf\xb8\x4a\x34\xcb\xe2\xea\x97\x02\x15\x3d\xdf\xf2\x6e\x2b\xdd\x4c\x98\x87\x1b\xc5\xb5\xae\x26\x47\x8f\xc6\xb8\xba\x12\xc0\x16\xf8\xf4\x22\xce\x7e\xcd\xc8\xd2\xf4\x3e\x39\x38\x82\x6f\x1f\x88\xf8\xc9\x1d\x44\x7f\x7e\xc9\x24\xed\xb0\x7c\x79\x25\x2f\x8a\xfc\xe8\x70\x48\x3e\xd3\x24\x85\xab\x58\x2b\x07\x26\x9f\x72\x35\xf9\x6d\xad\x9b\xeb\x43\x05\x96\x34\xfe\xb6\x46\x5e\x66\x18\x15\xb8\xa4\xf1\x77\xb5\xf6\x70\x10\xa8\xa8\x9f\x9a\x87\x3c\x00\xd4\x5c\xdf\x58\xf9\xd8\xaa\x82\x6a\x07\x11\xc1\x14\x06\x45\x50\x5c\x60\x30\x0d\x6e\xef\xb6\x72\x86\x8d\xc6\x44\x1e\x0c\x59\xfa\xac\xda\xcc\xa4\x2a\x47\x68\x66\x55\xe0\x25\x39\xcb\xcf\x5b\xdb\x41\xa9\xad\x5c\xb4\xf8\x09\xc8\xe7\xbf\x09\x3b\xb2\x19\xf1\xee\x47\xed\x42\x44\x02\x53\xc5\x40\xd5\xf7\x28\x8a\x8e\x1e\x8d\x25\x4d\xd2\x28\x39\x42\xd8\xa1\xa4\x64\xf3\xdb\x1d\x68\xce\xc1\x56\x0f\x29\x14\x1b\xdb\x28\x6e\xba\x03\xf3\xfe\x27\x71\x66\xf8\x5c\xb2\x54\x97\x50\x7e\xfa\x20\xaf\x91\xfb\xe1\xbd\xe2\x34\x9d\x1a\x92\xe7\xcd\xb2\x55\x9e\x94\xdf\x9e\x2b\xaa\x9a\x94\x5f\xc0\xa1\xca\xed\xe7\x39\x5c\x3d\xf7\xcb\x2b\xb6\xa8\x34\xd3\xe4\xc3\xf3\x34\x67\x62\x32\xc6\x20\xbd\xfa\x25\x66\xcb\x84\xfc\x9c\x27\x2b\x9a\xe8\xf1\x9c\xef\xca\xb2\x42\x7d\xa6\x8c\x56\x6e\x92\x02\x98\x2c\x5f\x13\xee\xd2\x2b\xf6\x79\x45\x9a\x74\x69\x8a\x43\xa2\xd9\x5c\x95\x79\xf8\xdf\x68\x36\x2f\xb0\xc2\x22\xcf\x92\xc4\x23\x60\x99\xcd\x7b\xd0\xd6\xc7\x7b\x93\xd6\x21\xf1\xb8\xb5\xc8\xd0\x0c\x42\x4f\x78\x4b\xc7\x7e\x3e\xbe\xad\xc8\xe9\x98\x87\x02\x15\xd8\xd3\xf3\xa4\x69\x6a\x5b\x52\x09\x69\xc4\x8e\xd3\x27\x6c\xc8\x8f\x87\xc3\xd4\x70\x7a\x62\x96\xce\x7b\xb1\x64\x63\x34\x24\x6d\x36\x31\xd0\x62\xa3\x25\x59\x70\x22\xb7\xde\x02\x6f\xc0\xf2\x4b\x85\x1a\x03\x84\x63\x43\xd0\x13\x84\xe9\x60\x40\x8d\x5f\xb0\x6c\x8b\x0a\xa1\xd7\x1d\x82\x4e\xcd\x2f\xf5\xa8\xbb\xb4\x56\x20\x5c\xb2\xbf\x6a\x2b\x28\x6b\xcc\xc3\x85\xbc\xc0\x10\x8f\xbe\x8a\xee\x84\x5b\xf7\x15\x26\x6e\x46\x3b\x5d\x25\x79\x76\x01\x8d\xb2\x10\x15\xd8\xfd\xed\x82\x6b\x49\x2d\x4a\xe8\x8b\xc6\xc7\xe2\xc9\x0e\x88\x38\x1e\x0e\x05\x22\x5a\xdc\xdc\x52\x55\x52\x7f\xb0\x81\xbd\x56\x60\xf7\x6b\xf6\x66\x73\xcc\xa2\x31\xe6\x96\xdb\x3f\x66\x4f\xe4\x39\x33\x43\x96\x48\x86\xaf\x77\x70\x64\x35\x03\xca\x5b\x31\xa0\xd9\xcf\x94\xd1\xec\x42\xee\xd0\x60\xa0\xe4\x87\x21\xb5\xe4\xa8\x28\x5a\xa7\xaa\xf7\xcb\x45\xc4\x23\x73\xcc\xea\x6d\xe9\x95\x61\xfb\xd5\x8d\x57\xd9\x37\x76\xee\x92\x65\x5f\x5b\x77\x89\xce\x7b\x69\x05\x64\x43\x8d\x3d\xe4\x6f\xb7\x6a\x98\x22\xcc\xa2\x14\xc8\x3d\x88\xf0\xad\xc1\x93\x19\xaf\xb3\x2a\xf4\xe9\xfe\x9c\xd0\x0c\xd5\xf2\xf7\x46\x8a\xc7\xca\xc5\x29\x86\x60\xc7\xa5\x3d\x1e\x0e\xe3\xca\xd9\x7b\xaa\xce\x62\x73\xf6\x5c\x42\x63\x23\x1c\x73\xf9\x18\x05\xbb\x90\x8f\x84\xdb\xc6\x5e\x78\x90\x9f\x22\x5a\x22\x75\x7f\xc0\x9b\x79\xeb\x0d\x62\x2d\x57\xcc\x6c\x0b\x3c\xc1\x5a\x8c\x33\x3a\x4d\xd9\xcf\x92\x43\xa7\x7f\x27\x6e\xfc\xc1\xb6\x41\x6c\x1f\x5a\x5a\x47\x1a\xa2\x9f\x9e\xb3\x23\xea\x38\xcc\x2b\x06\xb8\x42\x82\x36\x9f\x36\xea\x94\xaf\x9f\xac\x35\x09\x1f\xfb\xab\xe9\xe7\x0f\xea\xfc\x28\xab\x54\x00\x44\x0f\xa7\x5f\x44\x18\xae\x51\x5a\xbe\x8e\x10\xd1\x02\x97\xcc\x68\xca\x20\x98\xb3\xa8\xe0\x16\x04\x7c\x55\x2d\x71\xbb\x18\x0e\x9d\x4b\xd3\x7e\x9d\x53\x75\x9d\xd3\xd1\x69\x46\x08\x7b\xc5\x96\xe4\xf3\x13\x31\x18\x84\xee\x07\xa0\x8a\x52\xc9\xc0\x55\xc9\x1c\xd7\x1a\xa0\xdc\x77\x80\x02\x7b\xd6\x30\x30\x08\x13\x80\xaa\x0c\xd0\x31\x3f\x46\xe5\x8a\x39\x76\x4f\x4c\x3e\x48\xf5\x32\x0d\x32\xf2\x1e\xf1\x88\x57\xba\x2a\xb6\x3b\xc0\xd6\x25\x2d\xaa\xd5\x0e\x56\x52\x89\x97\xdb\xc5\x35\x99\x00\xaf\x60\xc5\x95\xee\xc5\xc3\x36\x9d\x57\xda\x3c\x5f\xa9\x4d\xd2\x77\x50\x93\x81\x21\xe4\xf5\x5d\x7f\x1e\x33\x96\x8a\xfe\x22\x4e\x92\x7e\xdc\x5f\x24\x71\x96\xf5\xe3\xac\x1f\x5b\x39\x5e\x70\x27\x37\xd4\x8f\x96\xd0\xd7\xd5\x23\xe7\x9b\x91\x88\xbb\x9f\x7c\xd4\xa6\xf5\x39\xc1\xb7\x34\xb3\x55\x27\x92\x90\xd7\xce\xfb\x4d\x92\x3f\x78\x52\x56\x0c\x86\x0a\x21\x9b\x7d\x7d\x1b\x5f\x92\x61\xf0\x34\x28\xf0\x69\x09\x39\x27\xfc\xad\x81\x94\x5a\x9a\xc0\x91\xdc\x1f\x17\xc4\x2a\x68\x88\x66\x86\xc6\xad\xb5\x3a\x4b\xd3\x24\x0c\xfc\x23\x40\x3b\x3d\xd8\xc1\x51\x61\x8c\x7c\x7c\xfb\xd5\xdc\x23\x5b\x94\x56\x9f\xdf\x52\x5f\x5c\xfa\xbe\x68\x4e\x10\xd5\x04\x83\x12\x2e\x88\x03\x08\xef\xc9\x8a\x48\xe0\x33\xd0\x20\x5b\xf5\x2f\xe2\x8c\xfd\x20\xfa\x67\x84\xb0\xbe\x8e\x4d\x4f\x33\xb2\xec\x1f\xf6\x81\x2e\x0e\x51\xa5\x86\x84\x1c\xb9\x30\x13\xf5\x5a\x6c\x36\xc6\x2c\xe3\xc0\x88\xb6\x84\x2b\xf0\x2a\xbf\x4e\xc9\x44\x3f\xed\x38\x64\xa3\xd3\x53\x08\xce\x70\x7a\xba\xd9\x68\x30\x38\x27\x12\x3b\xab\x78\x0d\x27\xab\x90\x21\xe4\xa7\xc9\x2d\xa1\xd0\x58\xac\x6f\xd4\xc1\x40\xd2\x01\x10\x25\xc6\x7b\x23\x3e\xc8\x45\xf6\xc9\xe7\x35\x27\x59\x26\xf7\xf5\x32\xcf\x44\x9f\x50\x71\x41\x78\xff\x8c\xf4\x65\xeb\x7e\xca\x9d\x2b\x82\xfb\xf2\x0a\x05\x43\x33\x02\x52\x82\x0f\x35\x71\x13\x79\x42\x0b\x55\x04\xd0\x37\xa6\x10\xdf\x2e\x52\xa6\x22\x45\xa4\x7c\xa2\xaf\x10\xc1\xae\x39\xe1\x11\xbe\xe6\x54\x18\xd3\xc2\x45\xca\x56\xf4\x3c\x37\xa6\x86\x92\x5b\x94\x28\x57\x8f\x91\x55\x36\x6c\xea\xfd\x0a\x7b\x33\x21\xe5\x76\x47\x02\x15\x21\x93\x0f\x83\xf6\x85\x5a\x1a\x40\x43\x98\x15\x21\xc2\xa0\x2c\xd5\x09\xa6\xb2\x8c\x9e\x33\x14\xa6\xce\x12\x78\x53\xc8\xb3\x43\x8a\x5b\xd3\xd4\x75\xc1\xaa\xf7\x2d\xe1\x7e\xf7\xf2\xfd\xcf\x27\xef\xdf\x9c\x7e\xfc\xed\xdd\xcb\xd3\xd7\xaf\xde\xfe\xe9\xe5\x8b\xa8\xf6\xf5\xd7\xb7\xfe\xef\x2f\x5e\xfe\xfc\xec\xd7\xd7\x1f\x4b\x39\xdd\x39\x31\x24\x99\x21\x72\x22\x8f\x63\xd7\x2c\xb6\x5a\xd0\x39\x68\x79\xe9\x52\x3d\xe5\x51\x26\xfb\x48\xa3\x15\x56\xaa\xbb\xa8\x49\x21\x35\xcc\x76\x8e\xbc\x66\x3b\x47\xae\xd9\xce\x91\x63\xb6\xd3\x39\x8b\xd5\x7e\x19\xac\x56\x2a\x76\x0a\xdc\x46\x8e\x21\xef\x5c\xa1\x63\x50\x04\x12\x6b\xa9\xf5\xc5\x70\xff\xe0\x31\xf7\xee\x63\xe0\xfb\x1a\x60\xda\x7a\x1e\x81\xf7\x73\x80\xd3\x7a\x0b\x6f\x7d\x53\x3b\x96\x4c\xb7\xab\xc5\x2a\xe5\x40\x83\x01\x19\xb1\xf8\x92\x44\x51\xc4\x4a\xba\x25\xf7\xc5\xaf\xd1\x27\xd4\xab\xcb\xa9\x3e\xe4\x67\xd9\x82\xd3\x33\xb2\x8c\x0e\xc6\x38\x14\x8e\x66\xe4\xd4\xd8\x93\x21\x34\x23\x73\x6b\x26\x51\xa2\xb3\x02\x54\x99\x49\x74\x6b\x22\xdc\x68\x61\xe7\x92\x66\xeb\x34\x23\xe6\x67\x8d\x30\x9d\x8c\xb1\xbc\x57\xaa\x50\x69\x34\xe7\xb8\x3a\x15\x90\x83\xf2\x9c\xbd\x4e\x53\x78\x45\x95\x60\xac\x55\x3a\x5a\x31\x37\x50\x63\x6a\x96\x57\x62\xcb\x09\xc7\xa7\xe4\xf3\x9a\x2c\x44\xf6\x9a\xb2\x4f\x64\xf9\x1b\x25\x09\x0c\xa1\x2e\x1a\x34\x20\x12\xa5\x6a\x49\x4b\xe6\x88\x80\x0e\x8e\x30\xcd\x00\xdf\xaa\x3f\xad\x98\xa7\xf6\x96\xc6\x6c\x19\x06\xa6\x58\xbd\xc1\x2e\xaf\x88\x9d\x22\xd9\x51\xc9\x8c\xa9\x6e\x4d\x4d\xf5\xab\xe5\xbd\x66\xa9\x08\xab\xbd\x02\xa1\xd6\xcc\x19\x9c\xbd\xe0\xe9\x7a\x2d\x09\xca\xda\x94\xca\x61\xab\xf3\xdb\x9a\x69\x45\xe7\x7e\xb1\x9d\xa2\x29\xd8\xfc\xc8\x3f\x27\xcd\x5a\xe5\x70\x68\xaa\xad\x46\xfc\x15\xcb\x65\x4c\x83\x95\xf9\xbb\x51\xcf\x99\x31\x9a\x06\xc6\x2c\x64\x12\x5c\xc7\x54\xc8\xbf\x0a\xb9\xb5\x7a\x66\x9e\x8d\x68\x5b\x7c\x97\xf5\x3a\x2b\x19\x0c\x0e\xb6\x4d\xac\x40\xf8\x14\x6c\x9e\x27\x47\x9a\x91\x6c\x93\xf0\xba\x4c\xb8\x92\xd6\x94\xc3\x4c\xe5\x87\x49\x23\xdc\xae\x3b\xed\x83\xb1\x11\xbb\x18\xd1\xc1\x3b\x9e\x2e\x08\x59\x86\x62\xf4\xdb\xab\x97\xaf\x5f\x3c\xfb\xe9\xf5\xcb\xd3\xe7\x27\x6f\x3f\xbe\x7a\xfb\xeb\x4b\x93\x15\x4f\x37\x11\x9c\x9e\x9f\x13\x0e\xd7\x26\x0c\x32\xd3\x67\x29\xd7\x46\x85\x97\x5c\x05\xb1\x8d\x11\x8f\x45\x81\xa6\x55\x81\x05\x36\x9a\x31\xe0\xbd\x82\xd2\x56\x2b\xc0\x21\x89\xa8\x0d\x09\x8e\x45\x74\x78\x84\x86\x21\xdf\x6c\x82\x00\x0d\x4d\x6c\x49\x31\x64\xc8\x48\x1b\x9b\x1a\xda\x3b\x5a\x80\x06\x56\x71\x0e\x06\x45\xe4\xf3\x3a\xa1\x0b\x2a\x92\x1b\x43\xff\x29\x13\xc7\xda\xde\x7b\x0e\xd8\x85\xd0\xa6\xf0\xad\x02\x5a\x26\x7c\x59\x33\xa1\x08\x08\xda\x2a\x64\x7d\x80\x36\x9b\xe0\x49\xce\x3e\xb1\xf4\x9a\x3d\x0d\x7a\xcd\x34\x52\x25\x2e\x0b\x70\xe0\x4a\x24\xfa\x3f\x04\x43\x36\x0c\x7e\x80\x85\x99\xab\xd5\x3f\x23\x8b\x58\xd2\x18\xc1\x90\x0c\x83\x51\xff\xe7\x94\xf7\x2f\x53\x2e\x59\x2a\x79\x16\xb1\x22\xfb\x32\x42\x26\xfd\x0b\x21\xd6\x93\x47\x8f\x1a\x94\x8b\xbc\x31\x8f\x96\xe9\x22\x7b\x04\xf4\xce\xa2\x7c\x0c\x41\x8d\x6d\x64\x81\x25\x20\x4e\x2d\xb7\x22\x61\xef\x43\x9a\xb2\x2a\xfc\x3d\x7b\xfb\xfc\xe5\x6b\x2c\x91\x29\x9a\x68\x29\xa1\x11\x6d\x00\x86\xfd\x11\x15\x85\xc4\xe9\x2b\xfb\x44\xe8\x97\xa6\x7e\x83\xdb\xf5\x24\x2b\xc2\x3d\x76\x1a\x56\xf5\x73\x73\x46\xde\x2b\xa5\xe4\x8b\x4a\x09\xd4\x33\x26\x11\xf2\xda\x36\xaa\x36\x65\xec\xd0\x66\x30\x50\x3f\x9a\xf6\x35\x10\x7d\xcc\x57\x36\x75\x87\xd4\x2a\x52\x25\xcd\x52\x4a\xec\x49\xb5\x1c\xe2\xc2\xc1\x27\x78\x8b\x90\xbc\x8d\x17\x84\x4d\x72\xc9\xec\x10\x16\x20\x0c\x46\xc9\xf2\x37\xfc\x11\x20\xac\x4d\x3a\xe4\x27\xfd\x67\x80\xb0\xdd\xeb\x49\x95\x10\xd5\xb1\xf8\x24\xb9\xa2\xa4\xa5\x0a\x65\x0d\x87\xb8\x79\x19\x42\x1e\xfd\x88\x29\xf8\x34\x28\x5e\xa3\x61\x56\x87\x70\xe8\xa8\xac\x8c\x69\xfe\xcb\xb7\x7f\x1e\xbd\x78\xf9\xd3\xaf\x7f\x3c\xfd\xf8\xec\xc3\x9f\x3e\xa0\xc1\x40\x72\x0d\x69\x42\x46\x49\x7a\xee\xeb\x84\x2a\xf2\x85\x61\x0a\x08\xc5\x92\xa5\x0a\x29\xd5\xef\x46\x7d\x87\xbd\x11\x63\x4f\x39\xc9\xf2\x04\x52\xcf\x68\x21\x57\x03\xa5\xba\x2f\xbc\x42\xaa\xad\x99\x89\xd0\xe4\x71\x5b\x1f\xb0\x33\xfe\xe6\x44\x15\xc9\xe6\x4d\xe9\x58\xb5\x46\x33\x21\x9c\xf3\x2c\x97\xf8\x5e\x93\x54\x16\x90\x79\x6e\xc5\x85\xcf\x75\xca\xb6\x2c\x74\x2b\x4b\x10\x31\x35\x14\xa5\xa4\xc4\xf3\xf5\x46\xfa\x02\x96\xd2\xc7\xaa\xa5\x65\xe5\xf6\xda\x46\x56\x82\xdc\x28\x89\x66\x73\xab\x19\xa8\x97\xd5\x34\x07\x8d\xab\xb4\x6d\x65\x05\xf6\x16\x4c\xaa\xf6\x2a\xbb\xae\x7f\x63\x4a\xae\x62\x42\x3e\x53\x6d\x33\xd7\x52\x45\xf2\x44\x1c\x0f\x87\x04\xb5\x54\x9b\x91\x79\xa8\x55\x11\x9e\x9d\x01\xb3\x21\x67\x86\x1f\x25\x4f\xff\x2b\xbb\x00\x55\x1f\xc8\xb6\x01\xa2\x5e\xc7\x42\xce\xb8\xc0\xbb\x6b\xf9\xcd\x9a\x7a\x1e\xda\x7e\xb3\x79\x7c\xd0\x82\xa6\xcc\xdd\xe5\x39\x2b\x15\x12\x8e\x69\x50\xbc\xf8\x74\x96\x73\x46\xb8\x12\xc2\xcb\x37\x2c\x9b\xed\x28\x2f\x19\x48\x97\xd2\x22\x8d\x49\x65\x21\xd1\xd8\xce\xcc\x02\xb0\xb9\x46\x86\xa6\xac\x90\x9b\xe1\x87\x69\x77\x07\x8c\xd5\xa8\x6f\x91\xda\x7a\xf4\x68\xe2\x25\x85\x94\x95\xb3\x25\x86\x7a\xca\xfd\x01\x5a\x3c\xf6\xb6\x20\x46\xfc\x0d\x57\xb6\xfe\xe8\xab\xbb\x8d\x2a\xfd\xfc\xe8\xed\xc7\xd2\xc7\xfe\x8e\x2a\xb4\x00\x52\x8f\xa6\xc2\x03\x5e\xb8\x37\x6c\x57\xc5\xc6\xcd\x7e\xed\x55\x7f\x2a\x1d\x13\x01\x9b\xd8\x53\x9a\xfd\xd1\xd8\xe6\xbe\x48\x19\x69\x31\x97\x3b\xb5\x06\xbc\x4a\xc1\xa0\xe5\x98\x2f\x4e\xde\xbe\x0c\xa2\x28\x22\x9b\x4d\xf0\xf2\xfd\xfb\x93\xf7\x2f\x5f\xc0\x4f\x79\x65\x49\x96\x5f\x12\xdb\x77\xed\x45\x12\xfc\xe6\x36\x2e\x95\x3c\x86\x86\x32\x63\x09\x63\xbd\x17\xa2\x99\x98\x87\xc4\xdc\x2c\x3b\x0b\xc8\x43\x19\x31\xf5\x9c\x62\x06\x31\x97\xa7\xbe\x99\x46\x6a\x8e\x13\x7f\xd9\x2f\xcf\x3e\x9c\xbe\x39\x79\xff\xf2\xf4\xcf\xcf\x5e\xff\xfa\xf2\x43\xa0\x43\x31\x73\x83\xfd\x6a\xe3\x71\xec\xef\xc6\x2c\xbd\x8c\xdb\x0c\xd5\x9a\x9c\xe7\x60\x10\xfa\x3a\x36\xf8\xaf\xfa\x75\xe4\x72\xb2\x51\x14\xa5\x9b\x8d\x79\x52\xaf\x63\xce\xc2\xe0\xb7\x34\xef\xaf\x8d\x16\xb8\x1f\xf7\x47\x09\x8c\x14\xa2\xbe\x7c\x50\xfb\x3a\x5e\x57\x9f\x5e\x5e\x92\x25\x8d\x05\x49\x6e\xfa\x60\x9c\x4c\xd9\xf9\x23\x75\x80\x94\x9d\xf7\xa9\x18\xf5\x3f\x5e\xd0\xac\x4f\xb3\xbe\x22\x0b\x25\xc5\x9c\xb3\x2c\x5f\xaf\x53\x49\xf2\xf5\xc3\xb3\x5c\xf4\x2f\xe9\xf9\x85\xe8\x9f\x91\x7e\xf9\x9d\xb2\xfe\x2a\x87\xe8\xb1\x57\x84\x83\x14\x32\x5d\xf5\x1b\x24\x26\x1a\x19\x2a\xd2\xb3\x21\xd1\xc1\x11\xc2\xb1\xb2\xfa\x93\xd0\xe8\x1c\x7d\x1b\x1f\x65\x04\x0e\xe6\x21\x32\xbf\x23\x83\x5f\x4b\xdb\xcf\x10\x19\xc5\xb8\xfe\x00\x98\xd5\x6f\x1b\xea\x0e\xb1\x62\x8e\x0c\x17\x9c\x3f\xc9\x67\x51\xb1\x07\x3d\x8d\x97\x57\xf2\x86\x82\xfe\x68\x52\xb3\x3e\x74\x48\x2c\x79\x19\xb4\x01\xf8\x70\xe8\x7c\x2f\xb0\x4b\x42\x7b\xc8\x35\xe6\xe2\x73\x77\x30\xb7\x77\x87\x22\x78\x9d\xa6\xeb\x69\x89\x9a\xff\x96\xd2\x4a\x62\x75\x0f\x9e\x0f\x54\x88\xb8\x2c\xc0\x0c\x33\x4b\xd1\x2b\x09\x19\x9a\x64\x44\x7c\xa4\x97\x24\xcd\x85\x37\x3f\xbb\xa9\x0e\x13\x2e\xf0\x11\x2a\xb0\xfe\x32\xa9\x1b\x1f\xb6\xbc\x3c\x9e\x95\x11\x64\x2e\x42\x85\xbd\x80\x2c\xef\x75\xae\x77\xd7\x96\x35\xc6\xd3\x8c\x9f\xd9\x2b\xf7\xe9\xd3\x50\xff\x5e\xef\x62\xad\xde\xc1\x8e\x8a\xee\x4e\xec\xbd\x6d\x13\xdb\xb9\x63\x73\x5c\x39\x0b\x54\x82\x4a\x1d\x87\xb6\x2c\xd4\x62\x65\x1f\xb2\x9a\x1a\x0a\x41\x19\x19\x01\xa1\xb4\x7c\x0f\xf3\x23\x4b\x40\x3b\x6a\x21\xbe\x6a\xcf\x53\x26\x28\xcb\x49\x59\x4d\x4e\x6e\x4b\x57\xee\x84\x99\x7d\xa5\xcd\x8b\xec\x93\x5b\x4c\x1a\x25\xef\x5f\x7e\xfc\xf5\xfd\xdb\x06\x2f\x89\x8f\x2a\x6f\xac\xdb\xe2\xe3\x2f\xef\x4f\xfe\xab\xd9\xe0\x71\x6b\x03\xc5\xb4\x4e\x76\xf1\xf9\xb8\x9d\x9f\xad\xee\xf1\x24\xf8\xe9\xe5\xcf\xf2\x55\x79\xfe\xfe\xe5\xb3\x8f\x2f\x03\x5c\x43\xec\xd6\x2e\xb4\x75\x73\x6b\x1b\xa7\xf5\xfc\x3d\x2e\x0f\xb5\x31\x71\x1b\x29\x78\xcb\xd4\x79\xd4\xdc\xd3\x06\x7f\xa1\x83\xef\x3a\x08\x46\x5f\xa6\xda\x5b\x0e\x96\x4a\xd8\x73\x81\x21\x59\xac\x7d\x0d\x0f\x3a\x40\x20\x3c\x02\x06\xf0\x1a\x12\x03\xdf\xab\x88\x1f\x3b\x50\xe7\x36\x6f\xca\xad\x94\xd4\xca\xd7\x49\x8f\x4e\x69\xd5\xf9\xe2\x7d\x7c\x0d\x25\xd5\x4b\xfd\x5f\x54\x5c\x7c\xa0\xf2\x82\xa9\x19\x52\xc3\xbf\x87\x66\xf5\xcb\x17\x9a\xa8\x0a\x69\xd5\xa5\x02\x61\x3a\x13\x0d\x67\xa0\xa9\xd9\xdc\xab\xf4\x93\x9a\xbd\x2c\x0c\xa9\xd7\xd5\x83\x82\xcf\xc9\x34\x24\x11\xc5\x0a\xb9\x61\xee\x9e\x0e\x56\xfe\xcc\x15\xbf\x12\x36\x32\x28\x86\x63\xaf\x60\x90\xa0\x02\x77\x69\x00\xb7\x48\xd6\x46\xe6\x58\xda\xf6\x64\x77\x85\x12\x85\xd5\xca\x9a\x0c\xa7\x99\x8c\xbb\xcc\xd6\x75\xb8\xfb\x5f\x7f\x84\x7d\xae\x33\xae\x31\x4f\x3b\x75\x2c\xa6\xae\x1c\x28\x44\x40\x29\x4f\x08\x10\xcb\xd5\x73\xab\x4e\x9f\xdf\x98\x04\x3a\x9e\x83\x77\xd1\xbb\x7a\xbb\x7b\x4d\x10\x62\xa8\x24\x40\xe5\x70\x2e\xc7\xe0\x27\x32\xea\x2a\x11\xb3\x42\xaf\x30\x52\x13\x32\xde\xf4\xc7\x3e\x69\x65\x4f\x0e\x33\x18\x88\x91\x9e\xc7\x60\xc0\x4a\xa6\x99\x37\x55\x73\x54\xab\xe6\xf8\xd3\xa3\x29\x57\x51\x30\xd2\xe8\xe8\x38\x7d\xc2\x8f\xd3\xe1\x10\xd1\x59\x5a\x8d\x82\x91\xce\x7b\xb6\x6f\xab\x62\x9a\xb1\x61\x30\x09\x86\x64\x6e\x3c\x2b\xfe\x41\xae\x1d\x14\x49\xae\xab\x28\x7a\x89\xe7\x34\xa3\x26\x7e\x56\x36\x78\x36\xe8\x89\x47\xc1\x96\xb6\x19\x7a\xa9\xed\x4c\x9b\x66\x5c\x4a\x86\x45\xec\xa5\x60\xfe\xab\x90\x1a\xac\xf4\x78\x6b\x7d\x75\xa3\x53\xcd\x59\x1b\xe9\x54\x6b\xef\x8e\x24\xb7\x40\x35\xe7\xa0\xb4\xc2\x9b\x1c\x44\x11\xf5\x7c\x96\xfd\x37\xe1\x91\x6c\x05\xc6\xb4\x5e\xaa\x61\x90\x0d\x06\xe2\x20\x8a\xe4\x3f\x23\x9a\xbd\x20\x99\xe0\xe9\x0d\xc8\x2b\x2b\x6d\xad\xfe\x2c\x40\xc6\x6a\x37\xf8\x6b\x30\xd4\x56\xaf\x35\x1b\x9b\xbf\x06\x38\x83\xe2\xb4\xa5\xb8\x57\x61\xb7\x7e\x68\x70\x36\xfd\x25\x11\x64\x21\x80\xf7\x5a\xa7\x82\x30\x41\x25\xf7\xd7\xbf\x88\xff\x1e\xf3\x65\x9a\x67\xfd\x20\x23\xc9\x4a\x4b\xd5\xfb\x49\x9a\xae\x83\xfe\x19\x11\xd7\x84\xb0\xfe\x3a\x96\xa4\xa4\xe2\xd4\x7e\x18\xc6\xc3\xa0\x1f\xb3\x65\x7f\x71\x41\x93\xa5\xfa\x18\x0c\xb3\x61\x30\xea\xbf\x5a\xf5\x6f\xd2\xbc\x7f\x1d\x33\xd1\x28\xed\x8b\x54\x72\x64\x56\x1f\x70\x7d\x51\xeb\x38\x80\x8e\x69\xa9\x32\xc0\xfd\x75\x42\x24\xfd\xb3\x80\x6c\x37\xfd\xbf\x96\x8a\x9b\xbf\xca\xde\xfe\x6a\x79\x48\xa7\x60\xf7\x24\x3e\x11\xb2\x36\x8e\xdb\xfd\x78\x25\x08\xdf\x35\x0d\x3d\x3e\x15\x6a\xd4\x9c\x79\xc6\x0d\x50\x51\xa4\x56\xa7\x53\x68\xbd\xfd\xc2\x6b\x86\x95\x38\x06\x82\x2b\x97\x27\xe8\x1c\xaa\x66\xea\xfe\x70\xcc\x12\x16\xc6\x2a\x46\x0f\x18\x83\x79\x49\x78\x0b\xea\x6b\x82\x57\x6c\x22\xb0\x06\x57\x78\x07\x0b\xcc\x50\xe9\xa3\xeb\xd8\xf0\x2d\x3a\x18\x9c\x18\x10\xbc\x07\x47\xf2\x2f\xb5\xe7\xdb\xd3\x7a\xb0\xe9\x1e\xea\x8f\x66\xfd\xe5\x66\x31\x1f\xe3\xec\x53\xcd\x62\xcf\x75\x5f\x8f\x5d\xc3\x16\x0b\x13\x8a\x5f\x71\x0c\x4b\xc6\xc7\xec\x89\xb0\x26\xa3\xc3\xa1\xd5\x92\xcc\xd8\xbc\xc7\x47\xa5\x75\x53\xe4\xfe\xd8\x6c\x0e\x8e\x30\x1f\xb9\x16\x4e\x12\xb5\x6b\xa5\x01\x65\x7d\x3e\x18\x84\x7c\x64\xac\xa1\xc0\xff\xba\x6d\x89\x7c\xf4\x89\xdc\x40\xd8\xa7\xba\xc1\x86\xa8\x38\x2b\xb3\xc1\x80\x84\xae\x3d\x16\x43\x98\xc3\x37\x20\xc3\x8b\x22\x34\x3e\xc8\xce\x6a\x75\x17\x2a\x73\x58\x24\x06\x83\x50\x44\x3f\xeb\xe2\xb2\x2b\x43\xf2\x97\xb6\x6c\x27\xd7\xcc\x4c\xf1\x05\x91\x8f\xd7\x5a\x12\xfc\x92\x07\x97\x98\xd8\x26\x8f\xb5\x86\xe7\x7e\x2b\xb8\x32\xd5\x8e\x9e\x40\x3a\x55\x4d\x27\x24\x4c\x55\xf0\x30\x49\xa2\xd9\x5d\xa3\xd6\x49\x5e\x3d\x65\xfa\x20\xa9\xec\xb7\x9a\xb8\x56\x5e\xda\x69\xac\x6c\x7a\x38\x9a\xa8\x8f\x8e\xb7\x54\xfe\x10\xb6\xa5\xb6\xf7\xe4\xeb\x12\x21\x80\xee\x54\xd0\xf7\xc8\x43\xcf\x2a\x62\x64\x30\x08\x32\xf8\xa3\x5e\x60\xa5\x5e\x53\x9f\xab\x9b\x26\x89\x0b\x9f\x1f\x1c\xf1\xfa\xfe\x9a\xe1\x20\x1c\x9a\xb1\x07\x8c\xa2\xc8\x7e\x3f\x30\x7f\x97\x00\x36\x35\x73\x9b\xd8\x01\xf1\xd2\xef\xb5\x75\x5a\x5a\x06\x55\x4c\x78\xd4\x17\xf5\x3c\xa8\x26\x15\x9f\x2a\xbf\xa7\x49\x83\x36\x15\xa5\x5f\xb2\xba\xfb\x04\x2e\xbd\xbc\xed\xce\x2b\xc0\xe6\xbd\x86\x2b\xa0\xa5\x69\x3e\x5c\xc4\x5c\x72\x26\x46\x48\x53\xce\x51\x7f\x71\xe7\x08\xae\xc0\x97\x06\x3d\x6d\x37\x1c\x0e\x17\xd1\xed\x4a\x5b\x2f\x99\x97\x44\xab\xe6\x54\x1a\x3a\xa3\xa9\x93\xd8\xf6\xe6\x99\x7c\x77\x9a\x9b\x92\xf9\x7d\xc5\x2c\xa7\xb0\xcd\x5d\xcc\x09\x51\xb6\x0e\xb5\x04\x14\x35\x52\x76\x9d\x5c\x33\xc2\x2b\x22\x51\x84\x45\x44\xa6\x64\x94\xca\x92\x57\x4c\xf6\x01\xa3\xca\xd7\xb3\xdc\x40\xa3\xd9\xfd\x39\x96\x00\x73\x13\xa5\x75\x87\x7d\xbd\xa3\x2b\x86\x8a\x70\x8c\xe9\xe8\x74\x91\x90\x98\xe5\xeb\x13\xa6\x09\x3d\xd4\x14\xc4\x1a\x0d\xc9\xb3\x24\x09\xf0\x2d\xd7\xe1\x66\xc4\x05\xe9\xeb\xcc\x6a\x54\xf4\x13\x7a\x45\xb2\x7e\xca\xc0\x68\x62\xa9\xba\x22\xcb\x7e\xca\xfb\x39\xe3\x84\x2d\x09\x27\xcb\x00\x34\x4c\xb0\xb1\x7e\x48\xd2\x52\xb6\x24\x65\xa0\x81\x6d\xf7\x78\x17\x08\xab\x28\x21\xe2\x98\xc3\x1d\xe7\x2e\x64\xf1\x79\x19\x63\xa0\x3c\xc7\x68\x66\xd9\x9c\xc4\x68\xaf\x4c\xd9\x66\x33\x9b\x23\x9c\x40\x8c\x20\x52\x60\x75\xd6\x4d\xf5\x0c\x18\xbe\x36\xad\x3b\x91\x0e\xe8\xe5\x1a\x52\x6b\x8c\xf7\x5b\x9a\x4b\x42\xac\x9f\x32\x6d\x19\xe3\x28\x0e\x24\xe6\x01\xc5\x01\x65\xfd\x18\x88\xb7\x51\x19\x1d\x61\x69\x9d\xae\xd5\x5d\x85\x73\xa8\xdc\x55\xe1\xb3\x6d\xac\x5d\x5e\x88\x2e\x62\xe8\x3d\x6f\x5c\xf6\x3d\x47\x31\xc6\x95\xea\x24\x93\x9a\x12\xcb\x06\x65\x77\xa2\xa9\x68\x70\xab\x90\x6d\x16\xba\x4e\x53\x4e\xcf\xa9\xae\xa4\x7f\xd4\x1d\xbb\x4b\xe0\xb6\xdf\x4a\x09\x35\xd7\xc5\xf6\x37\xae\x70\x16\xa5\xb0\xc4\x7e\x2a\x5a\xcc\xaf\x5c\x6f\x81\x6d\x8e\x02\x9e\x5b\x36\xb1\x9e\xf2\x7b\x22\x4a\x27\x80\x83\x0e\x7a\xb3\x1d\x9c\x2b\xc8\x50\xa3\x48\xc9\x49\xfa\x0c\x66\x35\x37\x89\xab\xd5\x27\xf5\x90\x01\xae\x18\xd2\x5e\x87\xe9\x96\xab\x22\xaf\x09\x41\x68\x42\xb0\xf6\x84\xf3\xed\x88\x0f\x00\x80\x86\xa7\x7e\x38\x00\xa4\x56\xfd\xe4\xc0\xa3\xb2\x4a\x15\xa5\x1d\x8c\xc7\x3c\xd5\x2f\xa2\xa9\x00\x58\xed\xa9\x2b\x23\xf5\x30\x10\xf5\x7a\x6e\x13\xd0\x97\x5e\x4d\x9a\x91\x50\xeb\xd9\xd6\xf8\xe4\x92\x91\xaa\x99\x11\xf2\x52\x25\x94\x22\x9c\x16\x05\x5e\x45\x74\xf4\xea\xed\x9f\x4f\xfe\xf4\x12\x5f\x78\xac\xc4\x95\x9c\x4e\x4d\xdb\xff\xa0\x14\x78\xd5\xa7\xac\xbf\x98\xfa\x49\x5f\x49\xd2\x68\x92\xfe\x02\x57\xa3\x12\xd7\x5c\x07\x5c\xb7\x82\x02\x4d\x16\xb3\xd5\x3c\xba\xc0\x0b\x84\xb0\xa1\xfc\xeb\xae\x28\x96\x54\xbb\xaa\x32\x1d\x74\x15\x32\x54\x75\x44\x64\xae\xc7\xa1\x09\x40\x32\x8b\xe7\x38\x8f\x24\xf7\x21\x9f\xbd\x53\x87\xc5\xd1\x22\x67\x7e\x1a\x0c\xcf\x86\xc3\x9e\x98\xe5\xf3\xe8\x3c\x54\xdd\x63\x49\x70\x67\x00\xde\x38\x77\xfd\xc8\xce\x8d\x16\xcc\x6f\x93\xcd\x4b\x93\x6b\x82\x7a\x6c\xda\x54\xd3\x9d\xb0\x85\x09\x4a\xa3\x6d\xf9\x67\xa5\xe2\x8e\x63\x61\x2f\x85\xa2\x1c\xcb\xd4\xa1\x60\x67\xa9\xe8\x64\xc7\x09\x05\x4d\x78\x19\x36\x85\x57\xec\xb9\x6b\xfb\x79\xe3\xf7\xdf\x11\x4e\x66\x15\x2d\xd3\xfc\xfd\xf8\xef\x88\xdd\xfe\x3b\xe2\xbb\xff\xce\x83\xf9\xef\x08\x49\xdb\x35\xfd\x77\xe2\x50\xe0\xd9\xed\x27\x72\x33\x09\xe4\x39\xc3\xd6\x7c\x20\x22\x5f\x07\xda\x4a\xdf\x35\xf4\x71\x19\xe1\x0e\xa7\xe9\xb0\xba\x38\xc8\x54\xa7\x60\x70\x32\x18\xdc\x5b\x57\x2d\x38\xb0\x98\x4b\xe6\x5c\xb9\x26\xd1\x9a\x6b\xd2\x8d\x7b\x3a\xd0\x97\x4f\xb7\x5b\xdd\x0d\xad\x1b\xaf\x7e\xdc\x16\xff\xc1\x1b\xe2\xc3\x28\xde\x9b\x41\x44\xea\xd6\x25\x1f\x2f\x48\x3f\xcf\x48\x3f\x5d\xf5\xab\x1d\x85\xc8\x9a\x96\xc4\xfd\x6c\x4d\x16\x74\x45\x89\x96\x08\x1a\x21\x52\x9f\x4a\x8a\x7b\xcd\xc9\x22\x06\xf9\x28\x5b\xf6\xaf\x53\x75\x9d\xb7\x19\x90\x64\x5e\x0b\x92\x51\xff\x9d\x12\x5a\xaa\xc1\x6e\x34\x65\xea\x0c\xc6\x32\x41\xe2\x25\xee\x93\xd1\xf9\xa8\xff\xd7\x60\x28\x86\xc1\x04\xea\x84\xa3\xd1\x08\x99\xe8\x36\x21\xaa\x45\xd1\x0c\x0d\x4d\x55\xfd\x3c\x0c\xd0\x5f\x03\x84\xaf\xb4\x5a\x35\x5e\x2e\x5f\xd3\x4c\x10\x46\xc0\x7f\x08\xcc\x74\xe5\x4b\x0e\xe6\x6e\x58\x60\x1b\x46\x0c\x1f\x1c\x6d\x6d\xa5\x1e\xe0\x97\x95\xb6\x0e\x17\x53\x6b\x7d\xa2\x53\x90\x9b\xd6\x96\x19\xac\x0e\x39\x46\x05\x76\x2d\x48\xaa\xcf\x74\x39\xd1\xa8\xf6\x5b\xb2\x17\xf5\xc5\x54\x62\xa2\xd6\xd6\x59\x83\x2e\x63\xbc\x7f\xd2\x3a\x74\x7d\xb5\x91\xf7\x6b\x39\x8d\x7a\x49\x63\x32\x8d\xed\x6b\x4c\xc9\xb2\xcb\x0f\x29\x13\x30\x83\x44\x42\x8f\xea\xa1\xaf\x1b\x3c\xd7\x33\xd6\x04\x6b\x05\xc4\x86\x9c\x07\x26\x55\xa2\xf8\x8c\x08\xc9\xb3\x52\x91\x19\x56\xf6\x8a\xc6\xfd\x1f\xaa\x34\xd4\x0f\xa3\xfe\x07\x42\xec\x15\xa3\xc0\xe4\x2a\x7b\xae\x55\xca\xfb\x4b\x22\x62\x9a\x64\xa3\x00\xc4\x10\x3b\x10\x90\xcf\x37\x12\x04\x70\x67\xd1\xb8\x83\xc8\xba\x22\x61\x7e\xc8\x78\x3f\x75\xb7\xab\x84\xc6\x99\x93\x18\x58\x15\xbf\x91\xf3\xb0\xa4\x7e\xab\x3f\xd5\xb9\xa8\x7a\x4d\x8f\x1d\x9f\x67\x7f\x55\xe3\xa7\x0f\x35\x5f\x2d\x13\x9f\xef\x55\xe9\x84\x6d\x3a\xf3\xb8\x1b\x1d\x58\x92\xcf\x55\x57\x0d\x06\x95\xef\xc6\x13\xbb\x68\x77\xf4\xea\x34\x58\xdf\x3b\x98\xe3\x4d\xe5\x1b\x74\x1a\xa8\x98\x1b\xc1\x24\xa0\xcb\x84\x04\x05\xaa\x71\xb0\x5a\x38\xa5\xd8\x18\xf8\xc1\x80\xb1\x55\x7e\x83\x8e\x06\x19\x3b\xe0\x32\x11\xb5\x08\x18\x49\x9c\x09\x68\x53\x72\x22\x6e\x64\x11\x54\x89\xd1\xd4\xac\x57\xed\xa8\x8c\xf7\xd4\xac\x59\x46\xca\x41\xf5\x30\x4f\x9e\xe1\x4b\xf7\x00\x54\x0d\x00\xd5\xac\x6b\xa3\x6a\xa0\x4a\x60\xa8\x66\x45\x13\x33\x03\x55\xe3\x45\x79\x7a\x34\x56\xc1\xa8\x1e\x47\xaa\x59\xd7\x09\xa3\x81\xaa\x11\xa6\xaa\x75\x6b\x21\x80\xca\x33\x98\x8c\xb1\x05\xec\xc9\x18\x97\x01\x31\x26\xe3\xad\x81\xa0\xc8\x66\x73\x5b\x60\x16\x89\x91\x92\xbb\x81\x75\x11\x27\x19\x11\x4a\x6d\xcd\x22\xb6\xd9\x18\x67\xac\x67\x49\xab\x3f\x96\x44\x73\xe2\x82\x40\x1c\xe8\xa0\xc1\x95\x96\xcd\x95\xbe\xc3\x9a\x22\xe9\x61\x42\x64\x22\xb9\x75\xf4\x1c\xaa\x88\x6b\x0c\x35\xa5\x79\x65\x63\x08\x51\x8f\x45\x28\x41\xbf\x94\xeb\x28\xb8\x2f\xa7\xd0\x70\x18\x52\x54\xb0\xbc\x00\x94\x64\x2a\x10\xd9\xb6\x70\x63\xf5\x80\x64\xbe\xa0\x65\x5f\x27\x24\x19\x84\x58\xd9\x8e\xec\xaf\x63\x2a\x0e\x57\x29\xbf\x07\x5f\x78\x27\x1a\xc4\xb7\xca\x31\xd6\xc3\xef\x7d\xe7\xf3\x3a\xf3\x79\xdf\x5c\x9c\x17\x09\xb9\x3f\xa7\x1c\x10\x9d\x27\x25\x09\xcc\x22\x83\x2c\x11\xb6\x2e\x50\x99\xfe\xdc\x37\xb2\x76\xae\x0d\x78\x6d\x7d\x2b\x36\xa9\x5b\x3f\x3b\x8d\x12\xfd\xad\xd0\x01\x55\xfe\xf5\xd4\xd4\xb8\x4d\x37\x8f\x6e\x75\x30\x18\x62\xc5\x2c\x69\x48\x8c\x54\x00\x7c\x20\x9b\xb2\x00\xa0\xea\xf5\xfd\x0e\xb5\x22\xc4\x1a\x6a\x7d\x4c\x75\x08\x72\xa5\x3b\x42\x2a\x7e\xb7\x4d\xb6\x54\xe3\xd3\x89\x9c\x5c\xe6\x97\x78\x41\xd4\x05\x3d\xbd\xcc\xd0\xa2\xda\x5c\x3b\xcc\x76\x0b\x0e\xe4\xd8\x36\x04\x05\x42\x65\xe2\x27\xeb\x33\x15\x11\x2c\x0a\x1b\x1e\x35\xc3\x31\xc2\x69\x98\xe9\xd5\x37\x8c\xcf\xea\x1b\x01\x16\x68\x1e\xfb\x7e\x78\x90\xec\x18\x55\x67\xac\x1d\x06\x65\xda\xe8\x0b\xb6\x26\x93\x5b\x93\xb7\x6e\x0d\x5c\xf0\xca\xe6\xf0\x7b\xd8\x1c\xae\xd9\x95\x48\x82\x9f\x65\x42\x23\x81\xf9\x17\xee\x53\x29\x74\xc5\xd4\x85\xc5\x02\xa7\xd1\xc1\x91\x0b\x9f\x1c\xdd\xa6\xf2\xce\xd0\x50\x47\x40\xde\xb6\x61\x1c\xf9\x92\x0f\x19\x14\x2e\x0f\x22\xd5\xc6\x43\x4b\xa5\x05\x30\xa2\x81\x69\xb8\xad\xb4\xc6\x84\xcb\x05\x57\x66\x6d\xb6\x69\xc4\xc9\x65\x7a\x45\xaa\x6d\x79\xa5\x61\x61\x6c\x96\x75\x8b\x94\x11\x4f\xef\x4e\xdf\xe9\x66\x63\xbb\x4f\x57\xab\x46\x77\x25\x70\x24\x5b\x81\xc3\x6f\x2b\xda\xd1\x0a\xeb\xa7\x34\x4d\x48\xcc\x7a\x55\x08\x4b\xef\x01\xc2\xd2\x12\xc2\x52\x89\xe0\x22\x81\xd3\xd1\x9a\x93\x25\x5d\xc4\xc2\x7a\x6e\xfa\xac\x2e\xf8\x94\x7b\x6d\x26\xa2\x28\xe2\x05\x4e\x1f\x08\x40\x95\x4e\xac\x34\x76\x34\x67\xa3\xd0\x33\xe8\x7a\x79\x73\xfe\x21\x45\x36\x97\xc5\x2e\x18\xa6\x08\x1f\x8c\x0b\x50\x1a\xd3\xd0\x36\xab\x81\xa7\x11\x4a\x29\xd8\x91\x0f\x83\xb2\x3a\xa8\x80\x4e\x0d\x2c\x6d\x1b\xee\x36\x28\x2c\x00\x6d\x25\x3b\x4d\xc6\x32\xc5\x0d\x1c\x42\x9a\x91\x1d\xa6\x71\x26\xfe\xfe\x7d\x87\x63\x52\x53\x50\x81\xf7\x23\x6e\x62\x08\x49\x06\xe6\x87\x72\x76\x3f\xf4\x05\xb9\x5c\x27\xb1\x20\x7d\x35\x0f\x60\x7d\x94\xdd\xf8\x32\xa8\x05\x31\xd4\x7e\x1d\xb3\xb1\x11\x31\x1d\x70\x79\xeb\x2c\xe7\xa3\xa2\x5a\x35\xc2\xfd\x23\xe3\x3d\xaa\xb6\xc3\x95\x21\xce\xb8\x35\x86\x60\xc5\xdc\xb5\x3e\x54\xa0\xa3\xfa\x19\xa9\xa9\x85\x1c\x15\xa8\xb7\x7b\xef\xad\xb0\xf1\x3e\x36\xbe\x42\xfb\xb3\x4a\x5a\x38\xdf\x42\xed\xd8\xe5\x5f\xb2\xd9\x5d\xc8\x40\xdd\x81\x3e\x40\x86\xb7\xef\x0d\xeb\x06\x97\xf5\x44\x18\x0f\x93\x55\xd0\x37\xc1\x06\x5f\x8e\x59\x14\x4a\x7c\x56\x35\x4e\x13\x68\x2a\x26\x8e\x59\x99\x40\x08\x73\x95\x18\x82\x7a\x12\x43\x70\xad\x56\xb7\x2a\xc2\x7f\x9c\xf9\xfd\x0e\x86\x74\x4b\x96\xd5\xee\xe1\x2e\x4b\x7b\xdb\x2f\x31\xb2\xd5\x91\x37\xf7\xcd\x15\xb5\x9d\xcb\xfe\xc2\xe0\x9b\x98\xe2\x14\xc7\x38\x6b\xbb\x7e\x6e\xa4\xb0\x9a\x00\x85\xdc\xe9\x7a\xad\x52\x4e\xae\x08\x8f\x9a\x3c\x51\x8d\xab\xaa\x31\x64\x64\x24\x94\xc7\x64\x99\x9d\x4a\xe7\xaa\x2a\xa3\xcf\xb5\x26\xac\xd2\x01\xad\x3d\xe1\xe8\x72\x5f\x7e\x23\x85\x63\x7e\x66\xa3\x25\xcd\xd6\x49\x7c\xa3\xa8\xef\x61\xd0\x0f\x21\x9c\x70\x80\x19\x28\xc1\x2b\xa6\x22\xba\x49\xc5\x48\xa4\x66\xc3\x51\x33\x0e\xda\x62\x19\x14\x8e\x71\xd6\xc8\x99\x81\xb4\x05\x1c\xa6\x65\x1c\xcd\xba\xc8\x95\x58\x93\x93\x2d\xf6\x26\x4d\x63\x13\xc8\x8e\x54\x5b\x7c\x44\xb0\x9f\x99\x17\x7a\xf9\xe6\xe0\x5c\x8d\x27\xa4\x48\xb6\xcb\xea\xba\xdf\xce\x82\xbe\xc5\x3d\xdd\x73\x77\x68\x33\xcc\x69\x63\x8b\x24\x68\xa6\xf2\xbf\xd5\x04\x5a\xa9\xf3\xa3\x12\x57\x91\x97\x7f\x9b\x14\x59\x10\xaf\xfb\xc2\xa4\xd5\x4a\xe1\x1f\x5c\xde\x12\x61\xfe\xaa\x4b\x36\xe2\xca\xcf\xba\x2c\x23\xae\xfc\xf4\x48\x2e\xe2\xfa\x17\xe7\x4e\x0b\xf3\xd7\x0e\x8c\xac\xa4\x72\x7f\x97\x0f\x63\xa3\x78\x07\xaa\x7e\xa0\x97\xf3\x16\x34\x13\x9e\xe1\x70\x39\x5b\x57\xa8\xb0\x23\x0b\x96\x7e\x4f\x3a\xbd\xf7\x8e\xcd\x4c\x55\x18\x24\xfa\x94\xf5\x49\x8b\x71\x94\xac\xaa\x97\xc2\xf6\x32\x8e\x92\xaf\xaa\xa4\x6a\x8a\xba\x74\x55\x98\xb8\x05\x91\xd6\x24\xab\x10\x5a\xe2\x2e\x48\x9e\x66\x2f\x55\xfe\x13\xd5\xd6\x27\x4d\x23\x83\x81\xd7\xf9\x52\xb2\x9c\x5e\xbb\x72\x22\xf9\xcb\xcd\xc6\x5b\x52\xe7\x88\x5b\x3a\xf0\xf0\xbf\x20\x9d\x7b\x66\x98\x49\x20\xf7\x1a\x76\xc5\x0d\x69\x5d\x27\xe7\xc6\x1f\xa7\xfc\xf0\x47\xe5\xdc\xf8\x63\xc5\xb9\xf1\xc7\x9a\x73\x23\x88\xb5\x47\xd7\x34\x49\x8c\x1d\xb3\xda\xa2\x66\xc1\xc8\xd8\x9b\x01\x8f\x96\x65\x24\x3b\x35\xf6\xca\x3c\x3b\x3d\xb5\xb9\x06\xdd\x36\x38\x8b\x66\xf3\x5e\xe5\x53\xe4\xd1\x7b\x2b\xb2\xcc\x86\x31\x12\x4f\x18\x10\x62\xd9\x4c\xcc\x43\xd4\x8b\x7d\x12\x31\xbc\xcf\xdc\xa2\xac\xd8\xa7\xba\x8a\xf9\xe2\xea\x4d\x66\xac\x8c\x2f\x4a\x91\x4a\x3d\x68\x70\x5d\xf3\x99\xd1\xcf\x3e\x53\x01\xca\x2e\xeb\x09\x07\xcb\x9e\x19\xba\x35\x74\x33\xcf\xd9\x28\x81\xd0\x4a\x0c\x1c\x9a\x7b\x65\x3c\x86\x4a\x12\x3c\x67\x56\x4e\xcc\x07\x65\x35\x29\x50\x81\x99\x9c\x9a\x71\x14\x8f\x72\xc0\xd0\xd7\x6d\x02\xe5\x5c\x0b\x94\x79\x7c\xfd\xd1\xb3\x1a\x83\x0a\xc2\xdb\x02\xa7\xd8\x15\xa9\xd6\x64\x00\xfe\x88\x12\xc2\xe1\xe6\x63\xcc\x47\x3a\xf2\x99\x1c\x11\x79\xe2\xe9\x5e\x53\xb6\x4c\xaf\x47\x12\xfe\xf9\x2b\x26\x08\xbf\x8a\x93\x90\x82\xce\x07\x13\x8f\xd0\xd4\xb3\xf1\x9e\xcc\x88\xf6\xe5\x34\x79\x06\xab\xdb\x49\x66\xe9\x3c\xbc\xf5\xc4\xae\x50\x9e\x49\x51\x14\x6f\x36\x2c\x8a\xb2\xa9\xb0\x21\xf2\x38\x9a\x08\x13\x02\x8a\xa3\xa2\xc0\x63\x84\x6d\xf7\x05\x76\x3c\x97\x4c\x93\xa8\xe1\x41\xee\xc6\xec\xab\x06\xe0\x23\x90\xed\xcb\x35\x84\x88\x2a\x3e\x7d\x9b\x4d\x8d\xd9\x51\xce\x4b\x64\xbb\xb2\x22\x65\x57\x84\x8b\x7e\xce\x14\x1e\x05\xff\x02\x50\xeb\x88\x54\x1b\x70\x04\xa8\x67\x34\x37\x21\x29\xd3\x61\x88\xe8\xe8\x58\x3c\xa9\x23\x1a\xb8\x9d\x75\xdf\x45\xc9\x30\xe9\xf9\x1c\x44\xa5\x1d\x2b\x97\x0f\x09\x43\x7a\x11\xe5\xde\x5c\xc4\x99\xe3\xc7\xa5\xc4\x5f\x72\xd3\x07\x83\x90\xcc\xf8\x3c\x62\x33\x3e\xb7\x82\x76\x22\x37\x45\x99\xfb\x46\xc1\xa9\x76\x71\x3f\x55\x6e\x3b\xa7\xa7\x81\x93\x02\x75\xa6\x1f\xc4\xf3\x84\x5e\x5e\x12\x6e\x79\x60\x65\x8f\x6a\x1f\x75\x9e\xe6\x82\xb2\xf3\xc3\x0b\x71\x99\x9c\xc5\x3c\x7b\xf4\x89\xdc\x5c\xa7\x7c\x99\x3d\x5a\x28\xb6\xfe\xd0\xdf\xa0\xb5\xde\x5c\x47\x7a\xe6\x66\x8b\xa8\x44\xb8\xab\x90\xcf\xe8\x9c\x1a\xee\xe5\xf4\x34\x49\xe3\x25\x9c\xf6\x39\xcd\x04\xbf\x41\xb7\x76\x59\x8d\x1a\x90\x46\x1c\xda\x23\x5d\x47\xc5\x06\x29\x4c\xa8\xfb\x9a\xa8\x0e\x0c\x82\x17\xa7\xf6\xeb\xe9\x69\x80\x25\x3a\x6e\x8a\xd1\xa2\x80\x91\xcf\x22\xc0\x59\x14\x92\xba\xef\x75\x14\x00\x20\x05\x98\x34\x62\x71\x44\x26\x95\x2d\xea\x91\x86\x13\x76\xa4\x25\x3c\xb2\x61\xc3\x7e\x52\x2f\xae\xfe\xb9\xe7\x10\x6f\x35\x1c\x83\x6e\xdd\x6c\x1a\xb9\xbd\x38\xf0\xd0\x47\xc4\x47\x00\xad\x6f\x1e\xc9\xff\xf8\x49\x38\x5d\x28\xf7\xe5\xc1\x92\x7c\x3a\xbd\xaa\x9c\x82\xa5\x32\x37\x2a\xbd\x12\xc9\x34\xb0\xd7\x30\x98\xc8\x5b\x8c\x36\x1b\xed\x81\x48\xca\xa4\xbe\xf2\xf9\xad\xcb\x31\x06\x83\x32\xb5\xa0\x72\xeb\x96\xad\xad\xec\x54\x2e\x30\xe4\x0d\xd4\xda\x27\xa1\x66\xb4\xdb\x27\xc5\x6b\x93\xe2\xce\xa4\xb8\x19\x81\x6b\x0f\x4e\xfd\xbc\xe5\xc6\x9c\x5d\x25\xe2\x0c\xf3\x28\x1d\x81\xbc\xe3\x64\x25\xdb\x3f\x8d\xc6\xc8\x86\x6c\xcf\x01\x35\x54\xd7\xc3\x11\xcc\x27\x8b\xb8\x16\xf0\x20\x4c\x01\x6b\xe4\x25\x25\x70\x78\x98\x3f\x8d\xc6\xc7\x28\x9b\xe5\xf3\x88\x84\xf2\x1f\xbd\x94\x82\x24\x19\xe9\xd3\x55\xd8\xd8\x12\x8e\x90\xec\x13\x76\x43\xd5\xed\x99\xba\xdc\x55\xf0\xbe\x88\x05\x41\x19\xbc\xd1\xf2\xcf\x10\x64\xd6\xf2\x19\x0b\x91\x6a\x71\x9b\x45\xb7\x4a\x0f\x6a\x53\x4f\xcb\xe9\x25\x12\xa1\xf1\x6e\x08\x8d\xe3\x04\x0d\x06\xc1\xe9\xa9\xdc\xee\x64\x94\xe5\x67\x19\x38\xd0\x84\x63\xfc\x58\x62\xba\x6c\x96\xcc\x23\x3a\x95\xd7\x3c\x31\x2b\x9b\xc8\xbf\x51\x41\x21\x01\x0c\x50\x22\x1c\xc2\x8f\xc9\xbf\x1c\xe5\x40\x56\x48\x38\xc3\x7c\x3a\x9b\x2b\x63\x09\xfb\x17\xb2\xb1\xe3\xff\x59\xdc\x31\xdb\x6f\x3b\x5c\xe8\xaf\x24\xda\xac\x9a\xed\xc9\xd1\xdb\x53\xed\xae\xb7\xca\xfe\x2c\xaa\xea\x80\x9f\xbe\x3c\x37\x6a\x6b\x03\x35\x87\xdb\x2a\x03\x77\x4e\xbc\xd1\xc1\xcd\x5e\x14\xdb\x3a\x7c\x6e\x4f\xa4\x53\xa7\xcc\xe9\xb4\xb1\x87\xcb\x58\xc4\x87\x97\xe9\x92\x24\x87\x2b\x1e\x9f\x03\x89\xf1\x28\x96\x98\xe3\x91\xf9\xed\xdb\xdc\x2d\xcd\xc0\x48\x11\x42\xea\x6e\xab\x5b\x76\xbe\xad\x96\xe4\xb1\x1f\x19\x64\x72\x98\xae\x0e\x25\xac\xee\x9b\x5e\x48\xe5\xf3\x53\xcf\x79\x25\xf8\x08\xb8\x75\x05\x65\xae\x6f\x1d\x39\x24\x13\x29\x27\x01\xc2\x59\x2d\x54\x89\x1c\x1a\xe1\xbc\xd6\xc7\x5a\x39\xe0\x20\x9c\x54\x0b\x98\xb6\x7a\x34\x38\xcd\x0a\xd5\x2b\x09\xcc\x39\x5e\x19\x0e\xa3\x32\x8c\xc4\xe3\xe1\x18\xb3\x11\xcd\x7e\xd6\xbb\x81\x00\x95\x2f\xb4\xba\xe9\x22\x52\xc5\x92\x82\x67\x71\xf2\x46\x6e\xdc\xcf\x29\x47\xe1\x02\x8d\x4e\x61\x61\xbd\x8b\xcd\x06\xea\x64\x44\x98\x3e\xc0\x6f\x17\x85\x0b\x9c\xe2\x44\xe1\xf6\x70\x11\x89\xd9\x6a\x8e\xa6\x74\x5a\xaf\xfc\x22\x16\xb1\xac\xcb\x51\x19\x0f\xcd\x31\x69\x83\x82\x85\x9a\x86\xba\xad\xe5\x4c\x63\x9c\xc9\x21\x70\x8e\xcb\x87\x72\x51\xec\x2f\x4b\xd6\x3a\xde\x66\x5e\x6f\x61\xdd\xc1\xf5\x01\x68\x83\x3c\x96\xf2\x4b\x10\xe4\xc8\xc9\xfb\x10\xa8\x56\x1f\x37\x62\xac\xa6\x4c\x10\x95\x16\x51\xd9\xd1\x9f\xaa\x25\x7d\x60\xf1\x3a\xbb\x48\x5b\x23\xf9\xb7\x26\xcf\xaf\xb5\x0f\x55\xf8\x5a\x48\x65\xf6\x1c\xe2\x9d\x2c\x9f\x09\xc1\xe9\x59\x2e\xaa\x36\xea\xde\x5e\xc9\xa8\xa5\xa5\xee\x36\x5e\xc6\x6b\x41\xf8\x0b\xba\x7c\x9e\x5e\x5e\x52\xe1\x09\xde\xbc\x33\x45\x68\x23\x33\xbd\x8a\xd8\x38\x6a\x74\x1e\x92\xc1\x80\xcc\xd8\xbc\x3e\xb4\x4a\x8f\x71\x2f\x23\xd7\xc6\x55\x5c\x16\x81\x01\x2f\xe2\xec\x05\xe5\xe2\xc6\xd9\xbd\xba\x3d\xf4\xff\x21\xf1\xe2\x62\xd4\xac\x18\xe0\x40\xcb\x95\xe3\x44\x07\x0e\x6f\xb3\x0f\xdd\x32\x67\x9b\xb1\xe1\x19\xbb\x09\x03\xcf\x28\x12\xc7\xf2\x54\x29\xdd\xb7\x9c\xf1\xee\x7d\x51\xec\x57\x18\x34\x3b\x0b\x50\x81\x33\xc2\x9b\x22\xcb\x4a\x70\x54\xdd\xdc\x56\x94\xad\x38\x59\x27\xf1\x82\x3c\x57\xe0\xde\x08\xd0\xa9\x98\xbb\xf6\xcb\x91\x46\xfa\xfe\x18\x62\x92\x60\x32\x14\x08\x33\x47\x69\xa8\x87\x80\x2e\x53\x54\xe0\x78\xb9\x34\x88\xa1\x35\xd1\x32\x98\x13\x68\xa6\x58\x4e\xf2\x32\xbd\x22\x3b\x1b\x19\x93\x02\xdb\xae\x8a\x85\x3c\xd6\xca\xf5\x85\x99\x07\xa0\x12\x03\xad\x7c\x00\x9a\x3b\xa1\xdf\x00\x1a\xd5\x51\x5e\xc8\x1d\x69\x8b\xf2\x8a\xcd\xb3\x0b\x3d\x37\x8a\x0a\xec\x88\xc5\xee\x00\x0a\x8d\x2b\x02\x48\x41\x0b\xd3\xc0\x6c\xc2\x75\x51\xd7\xe0\xbd\xbb\x55\x51\x20\xc7\x6b\x22\xdd\x87\x38\x28\x5f\x79\x3f\xe5\xb5\xfd\x5d\x87\xd6\x75\xeb\x80\x2f\x26\xc1\x7a\x2e\xf8\x02\xf7\xf3\x8e\xa7\x9f\x6f\x6c\x6c\x89\x91\x21\x9c\xf0\xad\xf2\xe8\x2e\xfd\x15\xbe\x24\xb9\xf2\xe9\x9a\xb0\x25\x65\xe7\xf2\xc9\x31\x5c\x5b\x23\x1d\x41\x0d\xf1\xcc\xe6\x12\x5e\xf5\x2d\xdc\x69\xb4\xae\x57\x04\x07\x0d\x04\xf1\x96\xd7\x48\x00\x4b\x06\x08\x42\xe4\xeb\xc6\x33\x68\x83\x80\x38\x93\x3e\x90\x2c\xf1\x6d\x73\x2d\xa4\xe7\xc6\x48\xac\x3c\xad\xda\x37\xed\x32\xfe\x44\xac\xfa\xdf\x13\x4a\xd0\x62\x8e\x46\x82\x93\xfa\x86\x48\x24\x62\x51\xc7\xd8\x79\x9f\x19\x0e\x14\x97\x1a\x20\x9b\x1d\xda\xb3\xe3\x45\xd1\xe1\xf1\x27\x9d\xdf\x75\x91\xaa\x65\x75\x7b\xb4\x77\x3d\xc1\x3a\x94\xa8\x3d\x91\x90\xa0\x46\x88\xd9\xc6\x86\x54\xa6\xb1\xf5\xa9\x95\x13\xe8\xf0\x2e\xce\xe6\x9d\x5e\xc0\xf1\x41\xe4\xf8\x57\xc5\x5c\x1b\x07\xda\xa9\x34\x68\xa7\x5a\x97\xa8\xe3\x03\x98\x11\xa1\xc3\xd5\x84\xbb\x7b\xdc\xfd\xdc\x39\x27\x06\x18\x4a\x3f\x71\xf2\x40\xe0\xe8\xf6\xba\xd8\xbd\x5a\xbc\x9b\xda\x7b\xd1\x7c\x49\x14\xb5\xdf\xf3\xa4\x87\x6a\x90\x07\x8a\xce\x36\xb8\xf0\x05\x5d\x42\x0d\x04\x18\x10\x0c\x13\x27\xf5\x0a\xef\x49\x46\x04\xd2\x76\xe6\x26\x38\xc8\x4b\x89\xd4\x32\xea\xf3\xf7\x54\xf3\x0c\x83\xa1\x77\xfe\x23\xba\x0c\xd0\x30\x40\x41\x15\xfb\x37\xf5\xb9\x7e\xec\xef\x90\x53\x77\xc1\xfc\xfb\xf0\x88\x75\x36\xb4\xc3\x8b\xf2\x15\x79\x4e\x23\xec\xfb\x52\xe9\xc7\xca\xe5\xcd\x22\x32\x82\x55\x47\xe5\xf7\x67\xb5\xdf\x6e\x80\xbb\xec\x9f\x47\xf8\x54\x8b\xdb\x56\x52\xa3\xc1\xe1\xe5\xea\x30\x18\x92\xe3\x50\x0c\x06\x21\x1f\x46\xc1\xbf\x05\x40\x73\x0e\x06\x6c\xb4\x4e\x93\x9b\xcb\x94\xaf\x2f\xe8\x02\x95\xa5\x21\x1b\xc9\x7e\xff\x44\x6e\x36\x1b\x4d\xb3\x95\x04\x6a\x25\x84\x9b\x11\x1f\x28\x9b\x5a\xc5\x56\x12\x4c\x33\x7b\x61\x27\x07\x63\x5c\xf2\xe0\xf2\x97\x61\x38\x45\x24\x36\x9b\xdb\xc2\x06\x87\xac\xa1\xdb\xdb\x8a\x30\xc6\x92\xa0\xe1\x18\xa7\x1e\xae\x1d\x2e\x3e\x36\xf6\xf2\x23\xa0\x40\xb1\x76\x83\x28\x95\x6b\xa7\x16\x4a\x67\x64\x1e\x71\x78\xe3\x3d\xd1\xef\xe9\xf6\x51\xe2\xad\xa3\xc4\x11\xd7\xfe\x17\x38\x96\x0f\x2e\xad\x8d\x1a\x17\x05\x1a\x5d\x12\x11\x4b\xb2\xd6\x6e\xe5\x42\x09\x5a\x2c\xa8\xa8\xad\x75\xa6\x46\xb1\x0d\xac\xd2\x32\x39\x0a\xbe\x05\x61\x26\x87\xc5\x01\xdc\x02\x90\xaa\x64\xee\x04\xe2\xb9\x12\x98\x9b\xd9\xe6\xae\xa8\xd9\x0a\xba\x06\x83\x83\x64\x9a\x44\xf9\x24\x1f\x0c\xf2\x83\x28\x4a\xa6\x61\xb2\xd9\x84\x49\xc4\x43\x39\x0f\x84\xb3\xd1\xa9\xbc\xfb\xb3\x78\x1e\x25\x38\x71\x1e\xe6\x1c\xa1\x49\x12\xe5\x38\x29\xea\xf7\x7d\xd7\xf4\xcb\x1d\x54\x80\x60\xe4\xef\x31\x9a\x86\x6c\xb3\x09\x59\xa4\xdc\xc7\x90\x12\xb2\x98\xa7\x2f\x46\x68\xa2\x35\x00\xf1\x60\x10\xaa\xa4\xff\xe5\x04\xc5\xfc\x20\x8a\xd8\x66\xc3\xdc\xe8\xb6\xac\xfd\x61\xa1\x2d\x0f\x0b\x83\x57\x85\xb6\xbc\x2a\x98\x15\xce\x59\xae\x42\x1d\x2f\xbd\x94\x20\x82\x95\x8a\x9a\xd2\x54\xff\x3b\x63\xf3\x96\x68\x4d\xa5\xbe\xc2\x83\x2d\xec\x19\x81\xe6\x1c\x49\x4e\xca\xfd\x10\x96\x5a\x84\xc0\xfd\x1e\x80\x76\xb3\x5e\x5b\xe9\x0f\x64\x5d\x05\x2e\x07\x8e\x1a\x05\xa0\x84\x46\xb3\x79\xd1\xea\x8d\x51\xed\x6c\x4a\x27\x60\x7a\x0c\xe4\x73\x48\x41\x0c\x14\x8e\x61\x1f\x0a\x07\xfb\x56\xaf\x9b\x05\xf7\x3c\x0c\xca\xe7\x85\x60\x8d\x1c\x90\x7b\x09\x58\x29\x88\x8c\xdb\xa0\x88\x83\xef\x51\x18\x63\x2a\x2f\x81\xd1\x19\xe3\x3c\x8a\xdd\x5b\x60\x53\xda\x1e\xe4\x83\x81\xea\xc9\x11\x13\x66\x68\x9a\x47\xd9\x24\x1b\x0c\xb2\x83\x28\xca\xa7\xf9\x34\x8c\xf5\x99\xd1\x79\x94\x63\x68\xd0\x90\xf3\xe5\x38\x43\x68\x12\xe6\x6a\x66\x75\x81\x1e\xc3\x04\x5e\x3c\x81\x25\x02\x71\x7a\x43\x93\x3c\xca\x70\x5e\x54\x97\x09\xc6\xa6\x72\xa1\x79\xc4\x34\x9a\x49\xda\x96\xac\xc2\x89\x66\x48\x49\x3c\xeb\x4b\x41\x7a\xab\x9a\x42\xcc\x0c\x60\xce\x82\x40\x8c\x2a\xd7\xaf\x2a\xab\x8c\x61\xda\xbd\xd8\xbf\xb8\x1c\x2b\x80\x97\x8b\x53\x0a\xaf\x38\x72\x91\x4c\xa2\xd7\xcb\xe7\x10\x72\xb4\xe5\x9a\xc1\xba\x5b\xaf\x19\xe4\x49\x88\x95\x91\x45\xf5\x65\xf7\x02\x94\xd8\x6c\x42\x11\x49\x00\x5a\xb8\xa0\x75\xa8\xe0\x1c\xb2\x81\x54\x41\xab\xbc\xac\xdc\x0a\x4b\x8d\x0e\x45\xbf\x6a\xf6\xe1\x52\x2c\x2f\xd5\x61\xcd\xe4\xdd\x87\x69\xc5\xad\xd3\x71\x82\x42\xb6\x69\x58\x33\xc9\x01\x4e\xc1\xe8\x9c\x68\x0c\x80\x26\xb5\x55\x98\xc9\xa3\xea\xd3\xc0\x9b\x9a\x0a\x3b\xf5\xda\x9c\xb9\x9e\x33\x31\x73\xae\x12\x4f\x6d\x9c\x73\x3b\x6b\xbd\xed\xa1\xd4\x72\x74\xf3\xdc\xdd\x96\x80\x09\xa3\x01\xfd\x36\xe2\x24\x5e\x9e\xb0\x44\xf2\x1d\xdd\x08\x68\x30\x09\xf0\x2b\x54\x1e\x29\xc1\x53\xe5\x13\x34\xaf\x7e\x3a\x5c\x73\x7a\x05\xcc\x5b\xa5\xad\x61\x90\x78\xf6\xe8\x6f\x99\x63\x52\xf1\xc0\xe4\x72\x8d\x48\xef\x6c\x7d\x7e\x07\x4a\xf9\x3f\x3f\x9c\xbc\xfd\x60\x97\x19\x91\x11\x1c\x58\x44\x46\x1f\xe4\xbe\xb9\x74\x71\x1e\xf1\xd1\x2b\xf7\x54\x4b\xd2\xb3\x57\x27\xff\x4a\xdf\x1b\x31\xef\x81\xe5\x64\xcd\xd7\x8a\x44\x6d\x5c\xa2\x05\xdb\x32\xaf\x78\xd5\x9f\xb4\x54\x5c\x70\x92\xae\x09\x0b\x6f\x5b\x65\x94\x65\x98\x72\x46\xae\xfb\xb5\xe9\xcb\x07\x36\x4f\x12\x45\xab\xc9\x47\xc9\x06\x61\x35\xb0\xba\x48\x99\x88\xa9\xfc\xd0\xb3\xc9\x89\x54\x4a\x32\x27\xc6\xea\xe5\x5a\xdc\x60\x36\x3a\x55\xd9\x36\x41\xf8\xa5\x81\xdc\xfc\x02\xb3\x98\x25\x90\x42\x26\x20\x34\x83\x90\xa2\x64\x91\xf2\xa5\x63\xe8\x35\x18\xd0\x1a\x8e\x05\x5a\x51\xa7\x70\x08\x03\x79\x2f\x24\xfd\x46\x47\xa7\xe5\xbd\x01\x27\xca\xc2\xa5\xa7\x6b\xa2\xa9\x40\xee\x33\x55\x51\x6c\x4c\x32\xb9\x43\x3d\xfd\xc0\xb1\xdc\x38\x38\x72\x45\x53\x97\xfa\xde\x3a\x34\x58\x5c\x37\x57\x10\xae\x0c\x81\xff\x5c\xd3\x54\x58\xda\xbc\xb1\xb1\x98\xa9\xcf\x56\xb6\x04\xe7\xf1\x36\xbe\x24\x2e\xc9\xa7\x55\x02\x56\x1a\xcc\xd0\xd4\x77\xb2\x64\x94\xa4\xe9\xa7\x7c\xed\x08\xe5\xf9\x44\x32\x33\x8d\xc0\xd6\x6c\xca\x26\xf6\x47\xd8\xd2\xd2\xde\xc2\x00\xa1\x29\x9b\xb4\xd5\x32\xfb\x07\x61\xd7\x98\xc9\xd0\xb2\x45\xfa\x21\x31\x19\x6b\x42\xee\x36\x09\x98\x1b\x20\x77\xab\xc0\x54\xee\x66\xdc\x86\x71\xcd\x36\x68\xdc\xf0\x89\xdc\x64\xa1\xcb\xf5\xa0\xa6\x48\x9b\xa1\x5b\xa0\x4e\xc5\xe8\xb4\x14\x4d\x80\x71\x1b\x9b\x47\x92\x84\x83\x88\xb9\x77\x95\xbe\xf7\x6c\x60\xdd\xd6\x39\x63\xc7\x10\xd5\x31\x5f\x11\x9a\x64\x2e\xe7\x0e\xa7\xe8\x10\x71\x62\x2e\x39\x56\x56\xca\xe3\xf1\x92\x24\x44\x90\x7e\xbd\x56\xa5\xbf\x25\x10\x6b\xaa\x2f\xcd\x21\x20\x87\x05\xb2\x70\xbf\xd9\x30\x97\x35\xca\xcc\xf7\xf6\x31\x4d\x6f\xbe\xd3\x7f\x9e\xc4\x59\x16\xde\xae\x28\x49\x96\x0d\xc1\x62\x03\x0c\x24\x02\x7b\x13\xaf\x2b\x97\x83\xc4\x8b\x8b\xba\x61\x5a\x4d\xd7\xe8\x2a\xbb\xa7\x44\x89\x46\x71\x49\x55\xa3\x89\xac\xf0\x5e\xe7\xa4\xce\x2e\xe8\xda\x56\x62\xa3\x4f\x94\x2d\x55\x05\x0b\x9f\x83\x81\xed\xc3\x42\x46\xa0\xe0\xa1\xf2\x6c\x23\x9c\x84\x39\x0e\xaa\x72\xe1\x00\x37\xd1\x03\x71\x41\xcc\x0b\xaa\x1e\xf8\x24\x36\x21\xdd\x8c\xcc\x7b\xcc\x2b\x41\x61\x75\x6d\xf1\x60\x10\xca\xea\x51\xa3\x20\x44\x7a\x01\x6a\xce\x1e\xcd\x20\xf6\xd8\x7d\x13\xb8\x20\x2a\x9f\x96\x05\xc7\xda\xef\x19\x99\x9b\xb8\x3a\xee\xb7\x51\x73\x88\x72\xcb\xfc\x82\xf1\xca\x14\x14\x40\x38\xf7\x02\xb6\xd2\x37\x9f\xd0\xa0\x8f\xda\x0d\xd9\xaa\xfb\x56\xf3\xa8\xcb\xde\x03\xec\x43\xbe\x62\x36\x96\x4b\x9c\x8d\xe7\xa3\xf2\x18\xad\xab\xb8\x26\x38\x15\xf7\xcd\xeb\x33\xa6\xde\x19\xf3\xc6\x8c\xa9\x9c\x31\xf7\xe8\xcc\x99\x2c\x6a\xce\x57\x27\x8f\x6e\x9b\xee\x83\xcf\x4e\x69\xd6\xc1\xbf\x95\x36\x10\xbe\xe0\x31\xcb\x56\x29\xbf\xac\xbf\x96\x46\x51\x20\x1f\x64\x6b\x8b\xa8\xc4\x74\xd5\x77\xcf\x11\xe2\xd9\xce\x26\xc1\x90\x81\x02\xf5\x12\xd2\x5b\x3d\xfa\x7f\xb2\x5d\x68\x26\xb9\xa9\x72\x3a\x1b\xf8\x2f\x0a\xa7\x93\xbf\xfc\x5b\x38\xfb\x7f\xff\x36\x1f\x4a\x26\x03\x7e\x8d\xe4\x9f\xff\xf6\x08\x74\xd2\xb3\xa3\x39\x8e\x23\x3a\x7b\x3c\xc7\x59\x44\x67\x3f\x1a\x7f\x8b\x8b\x38\x7b\xaf\x4c\x80\x63\x65\x6d\x83\x0c\x57\x4a\x46\x2b\x15\x0a\xfa\x67\x08\x2a\xe4\x4c\x2e\x45\xbd\x3c\xca\x07\x83\x7c\x04\x41\x67\x30\xd1\x56\xc4\x84\x87\x1c\xe7\xd6\x00\x05\x48\xf5\x89\xc0\xc0\x5b\xc5\xd8\x91\x43\x7e\xbc\x59\x03\x3d\x3b\xc9\x8a\x32\x52\xac\x7d\x99\x39\x2a\x42\x2f\x9d\xe1\x48\xe4\x48\xc7\x37\xda\x10\xbe\x65\x7c\x6f\x43\x12\x33\xe7\x4b\x8d\x6a\xb6\xe7\xdc\x8d\x5d\xd9\x66\x04\xb6\x5b\xda\x2f\x99\x9d\xfb\xb6\xb3\x23\x72\xeb\x9e\x2d\x44\x1e\x27\xe6\xb5\x80\x14\x53\x14\x93\xc6\x1b\x1d\xa5\x98\x34\x44\x07\x51\x5c\xfd\x08\x5a\x44\x79\xd0\x55\xda\x3c\x6a\x30\x32\x29\xce\x15\xfc\x24\x11\x0d\x05\xfc\xc4\x8b\xa8\xde\x2e\x4c\x4a\x2a\x34\x5c\x80\x90\x02\x67\xe1\x02\x2a\x17\xe0\x37\xe5\x19\xc1\x95\xb1\x13\x97\x64\x2e\x4c\x20\x15\x75\xb2\x06\xfe\x4a\x4b\xef\x18\xac\xff\xb0\xab\xdc\xd6\x7a\xbb\x89\x57\xb2\x40\xa2\x28\x12\xd3\xf1\xe4\xa8\x68\xa8\x92\x4b\x22\x4e\xe7\x18\x74\x25\xfa\x98\x47\x1e\x64\xd4\x63\xf0\xb2\x5b\xac\x5c\x21\xcc\xb8\xa4\xc1\x1c\x99\x9a\x6b\xe7\xc6\xe4\x4b\x66\x39\x8c\x4b\x43\x54\x9b\x98\xb4\x95\x83\x2c\x8b\x2b\x24\x05\x5c\x96\xfa\xe6\x53\xcc\xbb\xe9\x6c\x53\xcd\x38\xb5\x3e\x2e\x3b\x74\xba\xa6\x7d\x03\xd5\xdf\x96\xaf\xcb\x84\x78\x31\xf8\x76\xc3\xa9\xb2\xeb\xd3\x2c\xbe\x22\xff\x25\x71\xd8\xdf\x20\xb7\x58\xb8\x4b\xfd\xa7\x0e\x30\xb5\x84\xa9\x02\x26\x65\x0d\x68\x76\x6e\xea\xd3\x0e\xe2\xc0\x28\x05\x27\x41\x50\x00\x7d\xe4\x92\x7d\xee\xed\x29\x39\xbe\x9d\x74\xe0\x6c\xfe\x25\x24\x20\x8c\x06\x49\xe9\x20\x35\xb8\x8f\x72\xab\x1b\x7a\x3a\x7e\x95\xae\x66\x08\x72\xc6\xb1\x99\xa8\x2b\x85\xe6\x9b\x8d\xe3\x22\x99\x56\x28\xbd\x0a\x00\x3a\x5c\xef\x81\xcb\x8f\x48\x3a\xcd\xf9\xe9\xbb\x20\x08\x3b\x01\xe4\xe2\xea\xa3\x98\x3a\x1c\x24\x37\x8c\xb8\xc0\xdc\x30\xe8\x8e\xa6\xbd\xa2\x5c\x2b\x89\xe2\xda\x89\x04\x1e\x02\x54\xa0\x5b\x32\x62\xa9\xa0\xab\x1b\xb3\xe9\x0a\xda\xcd\x96\xda\xd9\xe9\x28\x3d\x72\x56\x8e\x46\xc4\x05\x67\x51\xb8\x61\x44\x3a\x6a\x8c\x5b\x0d\xb4\xbd\xb5\x75\xf4\xe7\x07\x90\x4c\x6d\xad\x6b\x29\x80\xae\x9d\x7b\x1a\x18\xe1\x6c\xc7\x66\x1d\x6a\x3b\xca\xf6\x07\x93\xab\x69\x79\x99\x02\x35\x08\xa6\xbc\x8e\x17\xc4\x0a\x60\xff\xfc\xf2\xfd\x87\x57\x27\x6f\x9d\x1c\x22\x56\x76\xc3\x1a\x9f\x40\xa0\x3d\xe1\x8d\xef\x1f\x2d\x7d\x45\xfd\x6d\xca\x0a\x56\x5a\x85\x6b\x05\x96\xb3\xc5\x66\x7f\x26\x99\x15\xff\xe2\x8a\x48\xdd\x29\x80\xdf\xca\x20\x64\x92\x29\x09\x37\xae\x5c\x1e\xa7\xee\x89\x92\xf6\x6a\x23\x8e\x84\x9e\xf1\x98\x53\x92\x19\xcd\x9b\xfd\x50\x12\x84\x01\x60\x87\xbe\x59\x4a\x16\xe0\x7c\xa4\x37\xcc\xf5\x6b\xc8\xbb\x5d\x14\x23\x93\x6d\x11\x0e\x5b\xb1\xef\x7d\x3b\x56\xd5\x55\x19\x40\x34\xd5\x35\x18\x51\xfc\xcf\xe6\xed\x82\xb9\xc7\xb5\xd5\x3c\x97\x18\x04\x2c\x12\x0d\xf7\xc4\x60\x90\x42\x7c\x43\x82\x0a\x4c\xa3\x5b\x9a\xbd\xbc\x5c\x8b\x9b\xc9\xc1\x11\xa6\xd9\xeb\x34\x5e\x52\x76\x5e\xfe\x20\x4b\xf5\x37\xec\xa4\xfa\xf3\x43\x7c\x65\xab\xbc\x00\x71\x8b\xae\xf3\x96\x5c\xab\x3f\xfe\x1c\x27\x74\x39\x39\x18\xe3\x25\x5d\x7e\xb0\x42\xd5\x9b\x89\x18\xbd\x4f\x53\x25\xc6\xd5\x92\xd9\x91\x24\x09\x96\xa3\x6a\x3d\x6c\x42\x59\x00\xad\x90\x55\x9d\x40\x0a\x7c\x46\x16\xe9\x25\x51\x13\xaa\x14\x48\xde\x9e\x2c\x7f\x8a\x17\x9f\xaa\xdf\x41\x4e\x3c\x29\x17\x3a\xc6\xa5\x58\xb8\x6a\xd7\x36\x02\x7c\x46\xe5\xef\x8f\x69\x18\xe8\x39\x2a\xdc\xb1\x0c\x50\x81\xe5\xdb\xdd\xbd\x21\x2c\x2e\x40\x45\xa1\x07\x9c\xdc\x76\x6c\x6f\x1a\x62\xf8\x63\xd2\xc8\xa3\xb0\xed\x78\xeb\xc4\xa6\xc3\x30\xb3\xb9\x4d\xa8\xae\xc8\x24\x36\x0c\x7c\x86\xe5\x68\xb3\x89\x81\x80\x69\x59\xb1\xdc\xd4\x65\x93\x8a\x6c\x3d\x1c\xcf\x0a\xf3\xf5\x52\xef\xa9\xb1\x73\x5e\xca\x13\xd2\x60\x36\x36\xd0\x34\x56\x66\x9f\x13\xee\x1b\x6f\xcb\xc6\x15\x58\x0f\x50\xe9\xd4\xf4\xd5\x80\x2f\x0f\x60\xea\xf6\xa3\x9c\x2d\x60\x58\xf9\x77\xbd\xdd\x9e\x93\xf2\x02\xe8\xb6\x45\x14\x8e\x15\x51\x6a\x68\xad\x8a\x77\x8d\xbd\x81\xf2\xcc\xc2\x3a\x9d\xe7\x0a\xf8\x74\x08\x8d\x51\x26\xd9\xad\xc0\x39\xa6\x00\xa1\x1a\x45\x87\x6e\x4b\x29\xea\xb6\xfe\x70\x6d\x2a\x6f\xc9\xb5\x9c\x86\x19\xa3\xbe\x5b\x01\x16\xa8\xa0\xd5\x4c\x9e\x60\x41\x60\xe4\x3e\x69\x9f\xb2\xb0\x6e\x91\x60\xe3\xc5\x82\x50\x08\x81\x1c\x5c\x38\x99\x0b\x48\x11\xf2\x69\x95\x50\xe5\x68\x72\x5b\x60\x81\xd0\x48\x65\xea\x55\x7a\x23\x8e\xc5\x08\x9e\x24\x88\x8c\x44\xb1\x40\xa2\xe6\x7c\x19\xa6\x68\x30\x08\x9c\x36\xc1\x41\x14\xa5\xf2\x1d\x30\xcd\xcc\x87\x52\x7f\xcc\x42\x31\x4b\x41\xf2\x2d\xff\x8d\x08\xfc\x83\x05\xa6\xc3\x60\x14\x0c\x53\x27\x28\x6a\x11\x52\xa5\xf4\x0a\x78\x9a\x82\x67\x8e\x7d\x50\x69\xb7\x07\xb5\x49\x6c\xb5\x3c\xad\xb6\xe2\xfd\xbe\xad\xfa\xc5\x6c\x7a\x2f\x29\xe1\x91\xd2\xe8\x59\x47\xa6\x25\xf1\xd8\xb8\x56\x83\x0f\xb8\xa6\x2d\x2d\xc9\xdd\xed\x4a\xec\x46\x1a\x33\x56\xd7\x56\x1b\x8b\x29\xd1\xd6\xe2\xce\xb0\x10\xc0\xd9\x6b\x6a\x7b\x2f\xd3\x20\xc6\x46\x77\x4a\x4a\x6b\xdd\x09\x71\xe6\x52\x9f\x49\x29\x97\xab\xdb\x32\x03\xff\xd6\x14\x34\x0b\x9b\xc2\xa0\x74\xa3\x3b\xd8\x3a\xe1\x32\x93\x25\xb2\xca\x33\x57\x1c\xe8\xe8\xf8\x20\x44\x54\x09\x84\x6c\x6f\x20\xac\x33\x0a\x1d\x59\x22\x1f\x6f\xf2\x75\xe0\xb4\x0d\x24\x4b\xdd\x6b\x35\xb7\x2f\x99\xca\x7f\x27\xa4\xcd\x2d\xae\x02\x6d\x1f\x28\x3b\x4f\x20\x12\x87\x32\x7b\xde\x02\x78\xde\x23\x2c\x65\x40\x65\x3a\xcd\xd6\x71\x2b\xaa\xdf\x90\x94\x12\x25\x54\x16\x29\x0f\xb3\x7b\x3a\xe3\x0e\xb8\x66\xab\xf9\xc6\x61\xbc\xa6\x0f\xe4\x1f\xd3\x11\x1f\xf9\x44\xda\x5b\x11\x95\x0f\x14\x74\xe8\x15\xdf\xa1\x6f\xed\xc4\x78\x4c\x80\x88\xaf\xe3\xe1\x29\x37\x71\x6c\x4b\xfd\x4a\xfe\x16\x97\xae\xa6\xef\x8a\x67\xfd\x0e\x36\x03\x99\x12\x51\x14\xa2\x88\xc0\x1f\x12\x8b\x02\x37\x96\xda\x72\x6f\xb4\xa4\x9f\x39\x06\x0c\x7a\xca\x2a\xdb\x66\x1d\x62\x19\xc2\x34\x12\xa5\xa5\x03\x43\x38\x8d\x1c\xab\x84\x90\xe2\xba\x01\xaa\xf6\x66\x96\xd0\xe5\x28\xbc\x02\x74\x27\xb3\x7f\xbf\x51\xfc\x83\x47\x04\xf0\xdb\xc6\xb9\x8a\x6d\x4f\xd4\x82\xed\x72\xa5\x87\x9e\x72\xf0\xe3\xe8\xc7\xd1\x38\xf0\xce\xca\x31\xdd\x6a\x62\x07\xca\x56\x09\x91\xac\x6c\x80\x83\xff\x03\x9f\x1e\xa5\x1c\x12\x13\x1f\x02\x31\xe8\xf6\x63\x56\xb3\xd3\x13\x9e\x45\x60\x26\x5f\xa3\xdb\x02\x6b\x12\x32\xb5\x42\x9c\x09\xc3\x3c\xe2\x83\x01\xdf\x52\xd9\x4a\x76\x26\x5c\x8b\xee\x5d\x6d\x73\x49\xa7\xfe\x53\x27\x2e\x68\xcd\xd6\x60\xec\x49\x2e\xe3\xb5\x31\x81\x28\xdc\x88\xdb\x3a\x80\xc9\x22\x5d\xdf\xd4\x4d\xcc\x04\x34\xa8\xaa\x37\x64\x3f\x1e\x7b\x02\xe5\x95\x9d\x81\x19\x38\x01\xcf\xcf\x02\xbb\xdd\x6b\xae\xdd\x63\x0b\x39\x8e\x22\x8d\x7b\xe8\xdf\x49\xb5\x11\x44\x03\x6b\xd8\xbd\x95\x09\x15\xec\x84\x90\xaa\xda\x12\x2a\xae\xec\x50\x31\x44\xdd\x7a\x54\x75\x77\x76\x49\x98\xe0\x94\x64\xdd\xfa\xd4\x95\x77\x76\xaa\xf7\xb7\x5b\xa7\xba\xf2\xce\x4e\xcf\x89\xe8\xd6\xe1\x39\x11\x3b\x3b\xbb\x88\x3b\x2e\xf9\x22\xde\xbd\xdc\x4f\xe4\xa6\x63\x6f\xb2\xe6\xce\xee\xb2\xae\x0b\xcd\x3a\x2c\x14\xee\x75\xc7\xd9\xa9\xba\xde\x2e\x69\x99\x2c\x44\xc2\x79\xf0\xff\xb1\xf7\xae\xdd\x6d\xe4\x56\xba\xf0\x77\xfe\x0a\xaa\x4e\x0e\x53\x38\x82\x69\xaa\x67\x66\xad\x73\x68\x57\xb4\xdc\xbe\xa4\x9d\xf8\x96\x96\x3b\x3d\x09\xc3\xd1\x94\x59\x90\x85\x98\x42\x29\x28\xd0\xb6\x22\xf2\xbf\xbf\x0b\x1b\xf7\x4b\x15\x29\xb7\x3b\x6f\x66\x75\xbe\xd8\x62\x15\x0a\xd7\x0d\x60\x5f\x9f\xdd\x87\xb4\x62\xb7\x18\xec\x06\x9b\xf9\xa3\xee\x0d\x1f\x56\xcf\x35\x2a\x1e\xbc\x01\xa4\x1a\x7c\x7b\x45\x44\x1d\x67\x8a\xe3\xa4\x6e\xba\xd2\xc4\xbf\x82\x03\xb1\xca\xe0\x16\xe4\xff\x3f\xa4\x7e\x14\x05\x46\xd9\x11\x74\x56\x47\xaf\x41\xf1\xe6\x29\x06\xa2\xc3\xbb\xc3\x02\xf9\x31\x1e\xeb\xa0\xaa\xfa\x0b\xaa\x92\x8b\xb3\xaa\x3a\xcb\x43\x66\x66\xc1\xb7\x08\xee\x10\xe6\x64\xdd\xd6\xb9\x34\xef\x4e\x6a\x3b\x7f\x47\xd6\x2d\x7b\xdf\xbd\x6d\x75\xe4\xe7\x54\x7d\xa4\x33\x55\xef\x7c\x93\xdf\x85\xc7\x2e\xc6\xc7\xa9\x21\x9a\x94\xdd\xb3\x11\xc9\x68\x41\x1c\xd8\xa4\xef\x57\xa1\xd0\x55\x6a\x3b\xb0\xe1\x6e\xcb\x83\xb8\xd0\xb3\xa6\x83\x76\x61\x24\xb6\x1d\x3b\x02\x9b\x2c\x13\xa6\x5a\x39\xd4\xce\x2f\xca\xc2\xff\x5d\x20\x48\xe0\x59\x16\x2d\x83\x3f\x89\xfa\x5b\x32\xa8\xda\xb3\x56\x3e\xd0\x7f\xca\x12\x17\x17\x50\xe2\xe2\xa2\x40\xf8\xb2\xee\xe4\x8f\xcb\x1a\x30\x28\xe0\x82\xbe\xee\xcb\xdc\x6c\xdd\x8c\x42\x0e\xeb\x9f\x30\xfb\x96\x76\xab\xce\x25\xee\x08\xe3\x77\x9c\x5c\x03\x3f\x31\xfb\x57\x96\xe6\x9f\x9e\xa5\x99\x68\xd0\xcd\xdc\xcd\x26\x1c\x9a\xc0\x65\xdd\x95\x22\xcc\x2f\xe2\xbe\xf0\xbc\xe3\x85\xd5\x35\x68\x48\x4e\x17\xf8\x25\x42\x67\x6a\xed\xd8\x89\x30\xdb\x61\xb1\x2b\x5b\x84\x9b\x3d\x27\xb3\x46\x23\xc6\xb7\xe7\xc6\x3e\xf7\x9d\xca\xd2\xde\x25\x30\x27\xd0\x42\xcb\x40\xad\x5b\x5f\x91\xe7\xec\x63\xbd\xa6\x8d\x09\xab\x09\x5f\xfe\xd1\xbc\x62\xf2\xbe\x92\xc4\xd0\x7d\xeb\x74\xff\x00\x1e\xbe\x17\xbf\x41\xd2\xd2\x75\x79\xeb\x8f\x37\x73\x9e\x38\x94\x07\xc0\xe9\x52\x6d\xf5\xf8\xde\xc5\xc7\x5a\xb6\x63\x05\xd2\xe9\xe4\x77\xf8\x8a\x74\x5d\xfd\x3e\xf1\xd9\x98\x5e\xd5\xd7\xdf\xde\xb8\xd3\x0a\x17\xba\xa0\xca\xd7\x79\x77\x74\x8a\x0d\xfb\xc0\x5a\x27\x3c\xf4\x49\xbf\x76\x6c\x25\x01\x1d\xdd\x4c\x6e\x3c\x93\x28\xc2\xea\xdb\xb0\xb1\x40\x45\x9d\x66\xad\x28\x2d\x28\x84\xe7\x10\x82\xeb\xa6\xc9\x46\x54\xc4\xb3\xa5\xeb\x2d\xd0\x48\xb1\x01\x75\xd3\xe8\x38\xc8\xc9\xe4\xa8\xb7\xb0\xf6\x8f\xb5\x21\x0e\x21\xf1\x28\x9f\x9e\xb8\x7d\x03\x9e\x71\x41\x59\xf3\x9a\x3f\x86\xdd\xfe\x52\xaf\x45\xe9\xc8\xcd\xe2\xdf\x40\x18\xc5\xdd\x16\x37\xfa\x18\xea\xcb\xfa\x7b\x10\x70\x8c\xca\x74\x64\xde\x63\x41\x48\xd7\xca\x42\xe2\x38\x65\xb2\x00\x38\x1c\xf2\x69\xac\xe1\x26\xcd\x2a\xe2\xb6\x9a\x3d\x68\x1d\x50\x6b\x6b\xe4\xbe\xba\xe2\x8b\x76\x89\xbb\x8a\x4d\x65\x67\x24\xf9\x19\xa2\xc3\x35\x1a\xd1\x45\xbb\xac\xba\xed\xd6\xf9\x9d\xcc\x89\x21\xdf\x79\x6d\x05\x38\x6a\x60\x82\x02\x12\xeb\x5d\xbb\xed\x56\xc3\x9e\xa8\x8f\xe4\x50\xee\xb8\xce\xea\x1c\x00\x20\x8e\x4c\xc3\xf2\xe2\xec\xad\x30\x20\x7d\x05\x69\x2c\x47\xed\xbc\xd2\x31\x49\x01\x52\xec\x96\xbc\x03\x41\x28\x49\x0a\xf4\xfb\x03\x54\x30\xf0\xd2\xee\xaa\xdd\x0e\x83\xa0\xe7\x1f\x53\xfb\x27\x17\x3e\xd1\xbc\xda\xc0\xfc\x25\x35\x1f\x30\x7b\x29\x18\x47\xcf\x24\x58\x70\x8e\x47\x25\x1a\xe5\x30\x90\x94\x00\x0d\x4e\x65\xe0\xf8\xac\xa5\x5f\xd9\xed\xac\xfb\xfe\xf0\x86\x52\xae\x76\xc9\xcd\x14\x89\xd6\x1e\xf7\xb2\xdb\x29\x46\x2d\xa3\xa5\x8e\x77\x9b\x49\x90\x36\x0b\xf8\xde\x2b\x7d\xb2\x68\x90\x5e\x79\x70\x1a\xb8\x14\x15\xc7\x5c\x3a\x6b\xa4\x6f\x7e\x9c\xb2\xfa\x8a\x2c\xf1\x80\xb5\x11\x4a\x20\x34\xd7\x55\xc3\x99\xdc\xae\x1b\xa8\x55\x45\x53\x24\xa6\x50\x4c\xb4\xe1\x57\xf1\xaf\x30\x03\x5d\xa9\xa4\x83\x9b\xea\x56\xb3\x87\x2a\x43\x6e\xe1\x99\x86\x0b\xec\x99\x99\xbd\xe7\xf3\xdb\xc8\x05\xe2\x0a\x5c\x01\x34\xd6\x4f\x68\x3a\xef\xf7\x7a\x80\x09\x02\xd1\x39\xe3\xd8\xe9\x0c\xae\xce\xbc\x3c\xe8\xaa\xa0\x06\x98\xa9\x09\x0f\x35\x31\xe8\xe0\xd0\xef\x93\xf1\x89\xae\xd7\x07\x98\xc8\x29\x7b\xb6\xa6\xef\x2f\x85\xc2\x74\x93\xb5\x1b\x81\x22\x17\x4a\x60\x64\x37\x50\x2c\xeb\x90\xda\x11\x2b\x89\xd6\xaf\x9f\xfb\x35\x40\x40\xee\xe1\xb6\xf7\x70\x60\x98\x98\x6d\xff\x02\x40\xf6\xa3\x29\x0e\x6e\xcc\x3d\xe3\xb3\xb7\xaa\x89\x40\x89\xca\xe7\x02\x53\xd2\xe6\x55\x14\xe2\x6e\x87\xcd\x84\xcd\x6f\x9d\x43\x4e\xe2\x6f\x73\xd5\xbf\x2e\x7d\x6e\x1d\x1b\xe6\x4d\xfe\xd3\xec\xf2\xf5\x78\x7f\xf4\x3b\x32\xd8\x3d\xaa\x20\xfc\x5e\xd0\x0b\xb2\xba\x59\xad\x6d\x2a\xbf\x4e\x0b\x9a\x8d\xec\xa6\x94\x51\x86\x97\xeb\xab\xae\xc7\xfe\xbe\xd9\x7a\x53\x40\xc8\xc4\xa9\xc5\x3b\x10\xd2\xc5\xf3\x6a\x91\x37\x24\x2c\xa2\xea\xe9\xad\x75\x99\x3a\xd1\x01\x6c\x09\xf5\xa7\x8d\xa9\x82\x81\x83\x8a\xec\x6b\x44\x02\xf1\x19\xa2\xd3\x89\xc8\x4e\x68\x76\xe9\x19\x6f\xaf\x9c\xbf\xbb\x3e\x34\xb1\x3a\x95\xd5\x89\x00\xa5\xe1\x18\x80\x65\xf2\xee\x3f\xb8\x32\x7a\x66\x7d\xd0\x55\xab\x8f\xfc\x7a\x8f\x0b\xb8\x76\xfc\x6e\x9b\xed\xd1\x7b\x8a\xf4\x11\xd0\x41\x35\xed\x3b\x06\xf4\x3e\xc4\xde\x5c\x1c\x4e\x19\xb0\xf0\x59\x62\x1b\xa4\xf5\x58\xb8\x43\x81\x7f\xd0\xc7\x43\xdd\x65\xec\x17\xef\xbd\xbb\xfa\x63\xe9\xbb\xe5\x98\x83\xf6\x76\xd7\x17\x9c\x85\x78\x25\x16\x74\x89\xd9\x82\x2e\x2b\xee\x7b\xc4\xd8\x54\xa2\xe0\x87\xc3\x5d\x32\xbc\xf2\x06\xc9\x3e\xcb\x3a\xde\x55\xef\xcb\x5b\xbb\xdb\xe7\x85\x71\xb0\xb3\x5e\x5f\x3b\x34\x7a\x37\xd5\xbb\x63\xea\x56\xb2\x3a\x64\x3f\x1c\x78\x74\x07\x8e\x5d\x3f\x47\x13\xa0\x19\x38\x8f\x46\x6a\xdc\xde\x7c\x06\xe8\xd3\x61\x4d\xed\x3d\xa6\x6c\x85\x4f\x65\x85\xbb\x70\x84\xfe\xb1\x52\x7d\xc2\x6e\x76\x93\x17\xf1\xbc\xbc\x8b\x67\xe5\x26\x5b\xa4\x27\x40\x7a\xcf\xb8\xe2\x85\x70\xe7\xc2\xe0\x42\xf4\xfb\xe8\x65\x56\xa5\xa1\xcd\x8b\xb6\xce\x35\x16\x31\x5c\x61\xd6\xe4\x73\x3b\x45\xde\x26\x3f\xa4\x57\x76\x68\xb2\x06\x75\x20\x4d\xfd\x6b\xb5\x7a\x8a\xcf\xfb\xd7\xe6\x0b\x8e\xfc\xf3\xfd\x5b\xe5\xab\x1c\x7a\x09\x75\x7f\x0e\x9d\xf9\xc0\xf2\xe8\x9f\x13\xa5\xa8\x3e\x96\x2c\xf2\xce\x63\x59\xef\x3c\x16\x78\xe7\xf1\x9c\x77\x1e\xcd\x78\xe7\xd1\xd8\x3b\x8f\x66\xce\x22\x79\x52\x81\x83\x1e\x55\x0e\x7a\x74\x89\x05\xe6\xe0\xa0\x47\x03\x07\xbd\x9f\xd5\x17\xba\xcf\x3b\x39\xe0\xb8\xfc\x55\x1b\x92\x08\xfa\xdd\x9a\x13\xd1\x42\x5f\xfc\xe7\xd7\x9e\x25\xa6\x12\xd9\xc5\xa7\xec\xbd\xa4\xa7\x2f\xf2\x8e\xde\xb3\x09\xed\x8d\xf9\x45\x1e\xd4\xfd\x7b\x7a\x80\x45\xd6\x23\x92\x33\x64\x97\x72\x86\xc9\xe7\x84\xb7\x08\xa7\x46\x79\xdd\xfc\x83\xba\xa9\x13\x26\xae\x49\xcd\x94\x62\x7e\x0f\xb7\x39\xc4\x4f\x62\xd6\x8a\x67\xed\x86\x0d\x73\x22\x44\x69\x21\x3c\x9f\xf4\x50\xa8\x55\x43\xf1\x28\xbe\x87\xac\x24\x05\xf6\x7a\xa7\xf7\x09\x92\x52\xea\x76\x81\x82\xb0\x8f\xca\x94\x67\xbd\xea\x65\x0f\xef\xe8\x5d\x1e\x1f\x94\x07\x0a\xa3\xe6\xeb\x9f\x5f\x28\xfd\xa9\xcc\xfe\xc0\xd9\xd1\xe3\x9f\x9f\xd2\x08\xba\xf5\x5c\xf0\xdf\x59\xbf\xf9\x73\xd3\xbb\x84\x42\x02\xb5\x87\xc7\xdb\xe8\xe2\x85\x7f\x14\xce\x02\x42\x4a\x5c\xf1\x73\x8a\x89\x48\xf3\x12\x6a\x53\xbe\x44\x9d\xf0\x15\xe4\xed\xbb\x11\x24\x4c\x7f\x76\x65\xfb\xa2\x54\xbe\x40\x11\x61\xcf\x8f\x81\x4b\xba\x4f\x4d\xf0\xff\x8f\x90\xff\xb3\x09\xd2\x5f\x28\xf7\xef\x95\xae\xcc\xf9\xe6\xdd\xf8\x39\xb2\x35\xf0\xfe\xed\xd5\x73\xf6\x91\xf0\x8e\xf8\x98\x2e\x40\xc2\x5f\x24\xee\x35\xb4\x51\xdb\x08\x10\xe6\x32\x6f\x0d\x38\x08\xe9\x39\xd9\x06\x4e\x81\x1e\x72\xee\xd1\x48\xfc\x8f\xd0\x28\xf4\x6f\xb8\xbe\xb9\xf9\x67\xd6\x10\xec\x0e\x22\x1a\xf0\x94\x37\xc2\x33\xe0\x20\xe4\xc8\x04\xde\x4b\x32\x99\x67\xde\xfe\x00\x67\xee\x01\x24\xb6\x0b\x82\x57\x9c\xf4\x7a\x96\x58\x71\x55\x40\xff\xb4\xa9\xbb\x4b\xc2\xb5\x1f\xba\xbc\x23\x5f\xff\x02\xbd\x2b\xdd\x3c\x3d\x72\xd0\x49\x61\x06\x25\x56\x9d\x01\xfc\x95\xac\x61\xbb\x05\x9f\x36\x04\x80\xb8\x2f\x6b\x76\x03\x20\x71\x80\x06\x05\x60\xba\x62\xda\x51\xf6\x7e\xb3\xae\x61\x5e\x19\x42\x98\xc1\xd4\x7e\xd8\xe3\xc3\x79\x45\x44\x6d\x52\x24\x9f\x83\xbf\x46\xa1\x75\xae\x90\x15\x53\x1e\x5a\xbf\x27\x37\xe9\xc3\xe7\xdd\xa3\xee\x86\xad\x2a\x0b\xd6\xa7\x3c\xb6\x01\x47\xa1\x22\x5a\x80\x93\xb7\xbf\x07\xf7\xa2\x18\xe8\x8c\xeb\x84\xdf\x52\x48\xc3\x1a\x95\xb3\x30\x0e\x9d\x7e\xa7\x0c\x8a\xd3\xaa\x5e\xaf\x36\xeb\x5a\x10\x7d\xc8\x7a\xd6\x66\xbf\x78\xe8\x83\x17\x8f\x23\xd7\xac\x76\xf0\xaf\xb2\x23\xbf\x4b\xeb\xfa\x93\xa8\x07\xf1\x97\x55\x86\x79\x34\xc1\xef\x06\x79\xcd\x4b\x96\x08\x01\x22\xc6\xad\x9e\x88\x1a\x97\xbc\x62\x86\xbd\x44\xca\xcb\xa7\xaa\x2a\x3e\xd5\x9d\xd8\x6e\xcb\x4d\x25\xcc\xaf\x67\xad\x8a\x05\x02\x82\x26\x08\xe1\xcd\x69\x59\x57\x1b\x38\x91\x6d\x2b\x55\x55\x95\x6d\x55\xd2\x6a\x83\x4c\xc5\x93\x09\x35\x7f\x4e\x6b\x39\x28\xb4\xdd\xb6\x68\x5e\x2a\x1c\x59\xdc\x55\x47\x27\x99\xb9\xaf\xea\x1e\xf2\xe9\x76\xf8\xb5\x73\x63\xfc\x40\x6e\x06\xbd\x18\xe5\x30\x65\x87\x77\x3b\xac\x3f\xa0\xac\x39\xe0\x0b\xca\x1a\xfb\x89\x72\xe7\x1f\x72\x95\x84\x28\x6a\xf7\xe7\xbc\xf4\x36\xc7\xa3\xd2\x56\x8b\xbc\x4d\x83\x6c\xf5\x26\x4b\xda\xde\x4e\xe9\x82\xf6\x43\xc8\xab\xb0\xf7\x2b\x59\xca\x7e\xe2\x36\xd9\xfe\x0f\x5d\x59\xeb\x01\x0a\x8a\x9a\x97\xd5\x21\x18\x77\x7b\x5d\x7a\x16\xcb\xdd\x2e\x13\x95\xa1\xec\xd7\xdc\xe7\x7a\xbe\xbd\xd1\x26\xfc\x3c\x7e\x07\x7c\x05\x27\x1e\xea\x85\x43\xc1\x6f\xf7\x76\x5a\xef\x12\xdf\x42\x7e\x38\x40\x8b\x3a\xc9\x23\x08\x3e\xb8\x24\x3e\x90\x9b\x8a\x61\x49\x06\xf2\x18\x9f\x52\xb6\x5a\x6f\x1a\xd2\x95\x44\xf2\x2b\xaa\xbf\x04\x29\x57\xf5\xa0\xc3\x8f\x0f\x9a\xe5\xf6\x4b\x40\x64\xa2\x3e\x32\xe8\xa3\xc0\x0c\x48\x05\xb4\x39\xca\xc1\x2c\x63\x86\x97\x6d\x7e\x90\x77\xb0\xbc\x2f\x32\xd3\xfc\xbd\xe9\x35\x88\xeb\x0e\x7c\x05\x08\xe7\x4d\x3c\xa4\xc2\xc7\x62\x2d\x72\xed\x85\x74\x11\x47\x10\xfb\x9f\x83\xbf\xbf\xdf\x95\x57\x81\x37\x71\x9f\x3b\x5c\x50\xa1\x0a\xe1\xf2\x02\xbe\xce\xcf\xd5\x7d\xfe\xaa\x65\x4f\x9d\x83\x61\xec\x00\xb1\x20\xca\x7d\xa0\x82\xfc\x51\x2b\x4e\xaf\x45\xcb\x95\x9b\x80\x73\xd3\x7a\xe3\x29\x01\xdf\x38\x41\xf6\xcd\x21\xc9\x69\xfc\x71\x4e\xb5\x00\xd1\x9b\x9f\x4d\x79\xd8\xe6\xbe\x00\x24\x3b\x23\xb9\xbd\xf1\x24\xeb\x37\x5a\xc7\xf8\xc6\xaa\x18\xdf\x78\xb2\xb8\x7c\xaa\xa4\x2c\xd0\x41\x7e\x4f\xd6\x4e\x97\xe9\xb7\x33\xff\xac\x41\x74\x95\x9b\xc6\x5e\x04\x24\xa3\xed\x73\x1b\x0d\x14\x1b\xa1\x7b\x62\x6e\xdd\xfd\x91\x6b\x7f\x48\xed\x7b\x11\xba\x9c\x0d\x15\xd3\x1e\x37\x29\x05\x6b\x8d\x92\x1a\xb0\xa2\x87\xa1\x58\xbc\x2c\x59\x46\xb0\x94\x61\x14\x25\x16\xed\xef\xce\x5e\xbf\x1a\x8c\x7d\x8b\x02\xdc\x1c\xcc\x2f\x32\x51\x71\x7b\x9a\x1c\xa5\xc1\x9d\x2a\x24\x06\x83\x2c\xa1\x63\x15\x95\x42\xd1\xfe\x50\xec\xbb\xfd\xa9\x78\x7d\xfb\x53\x11\x8b\xfa\x19\xca\x54\xde\x23\x6f\xda\x3c\x89\x48\x4f\x23\x8b\x95\x5d\x03\x73\x08\x6b\xa5\x93\xfa\x78\xa2\xcd\xa1\x4b\x10\x88\x43\xa4\x57\x39\x66\xa2\x92\xc2\x8f\xfd\xb2\xa0\x51\x54\x80\xb0\x19\xcd\x98\xdf\x83\xf0\x2b\xcd\xc3\xd6\x2a\x9d\x7e\x8f\x6e\x4d\x37\x2f\x37\x22\xb4\x40\x9a\x3c\xc4\x9b\xff\x35\x80\xaf\x05\x1e\x57\x94\x74\x7d\x01\xc8\xdf\xfb\xbb\xce\x49\x45\xfa\xaa\xe3\xd5\x0c\xd3\x8a\x18\xf1\x88\x3f\xa4\x0f\xf8\xf1\x31\x62\x15\x59\xf0\x25\x16\x79\xbf\x2e\x06\x08\x6d\x83\x78\xc7\x43\x5b\x23\x87\x25\x77\x48\x42\xc8\xb0\x9a\x2c\xf0\xea\xa1\xe9\xcb\xf6\x6c\x9d\x83\xb2\x48\xe5\x6a\x32\xec\x7d\x58\x3d\x6d\x94\xea\x67\x4f\x8c\x78\x1a\xb0\x92\xdd\x15\x8a\x9e\xa6\xe2\x92\xb0\x8c\xb3\xb1\x50\xc8\xff\x71\x50\x46\xd0\x20\x8e\x44\xc6\xc4\xc0\x45\xac\xb7\x3f\xf1\x34\xec\xaf\x0d\x2f\x5f\xb2\xea\x36\x7c\x36\x8f\x0b\xed\x10\x3e\x6c\x38\x3a\xfa\x83\xed\x1b\x90\x0d\xef\xc8\x8e\x68\x41\x96\x3d\xf9\x54\x02\x55\x80\xb5\x23\x6b\x7a\xc7\xdc\xf3\xcc\x65\xf7\x4e\x10\xa6\xd5\xc9\x03\xfa\x90\x3d\xa0\xc7\xc7\x88\x2f\xe8\xbd\x93\xa5\xfb\x68\x41\x97\x23\xe1\x9b\xa5\x39\xda\x89\xbd\x38\xa4\xb8\x16\x82\xc7\x3a\x27\x1d\xc4\x73\xe8\x51\xc6\x4d\x98\x09\xdc\x04\xf6\x73\xa5\xaa\xd3\x92\xfd\x97\xd5\x65\xd4\x02\x50\xd3\x79\x43\xde\x6d\xde\x3f\x67\x17\xed\x3c\xb9\xa9\x17\x05\x6d\x8a\x25\x16\xd5\xed\x0e\xb3\x6a\xb1\x1c\x59\x6e\x33\x83\x6d\xe9\x23\x0d\x7a\xf8\x84\x3a\xbe\x7e\x71\x0b\xb9\x2a\x0a\x1f\x12\xf9\xda\x9d\x63\x04\x93\xcf\xd7\x35\x6b\xe6\x47\xb3\x5d\x0a\x90\xe8\x33\xae\xbe\xd3\xaa\xcd\x60\x2d\x16\x14\x44\xb7\xe5\xc8\x4a\xa3\xed\x64\x52\x7a\x2f\xaa\xc5\x12\x73\xd5\x2b\xd5\x13\xaa\xe4\x57\xaf\x0f\xad\xd7\x07\x84\x70\x6b\x98\x74\xcc\xcc\x5f\x3b\x14\xd6\x51\x3c\x5b\xd7\xef\xc3\x81\x2c\x0a\xc3\xe2\x15\xd9\x84\x44\xb8\x30\x9c\x58\xe1\x03\xef\x80\x6b\xaf\xd2\x45\x6b\x0c\x1c\xf9\xbf\x62\x56\x96\x3b\x84\x6f\x8d\x15\x17\x16\xea\x56\x4b\x13\xaf\xc5\x65\x80\x3d\x79\x34\xc3\xef\x79\xbb\xb9\xee\xe6\x5c\x8e\x45\x1e\x62\x1f\x3d\x66\x7c\xce\x76\x3b\x30\xde\xd0\x8b\x9b\x6f\x0d\x3d\xc5\x89\x00\xf7\x3a\xf7\xc6\x0b\x12\x3b\xf7\x47\x10\xa9\xe9\x02\xaa\xdb\xdd\x97\xf4\x0e\x8a\xe7\x08\xc1\x1e\xf3\x82\xa2\x89\xec\x70\x9a\x8b\xde\x1d\xe2\x77\xd1\x53\x74\xf8\x4a\x28\x64\x26\xeb\x3b\xb5\x61\x1e\x35\x92\x73\xbf\xdb\x4c\xb9\x9c\x69\x07\x4c\x93\xdb\x55\x30\x47\x3b\xd4\x13\x73\xff\xca\x53\x17\x02\x96\x41\x01\xd1\x51\x5e\xb8\xd3\xc9\xa0\xda\x22\xc2\x63\x92\x35\xf4\xe7\xd6\x0f\x1a\xa3\x4d\xa6\xa9\x8e\xe4\x92\x6b\xc7\x7c\x9d\x78\xae\xf4\xf2\x07\x77\xac\xf7\x5e\xdd\x21\xfc\x2a\x04\x63\xa5\x9d\x92\xe3\x8e\x66\x0e\xe9\xc2\x41\x77\x3c\x6b\xf9\x00\xc1\xe6\xa3\x61\x86\xe8\x6b\xe4\x54\xb7\x3e\xfa\x84\x52\x45\x58\xe2\x7b\x59\x5f\xef\x0f\x13\xca\x02\xe1\xe6\xc9\x77\x20\x72\xc7\x36\xa8\xc0\x7d\x5c\xc2\x8c\x05\x59\x5a\x90\x18\x79\x5d\xe6\x53\x59\x1f\x30\xd6\x23\xbe\xdd\x72\xa7\xd8\xb3\x0a\x43\xa3\xdf\xd3\x5d\x38\x65\x80\xd0\xbf\x59\xaf\xe7\xf0\x97\x8b\xf3\x79\x1e\x6c\x31\x13\x74\xf3\x7c\x78\xa0\x2a\x64\x22\x5d\x41\x28\x03\x30\x46\x2c\xc1\xc0\xe1\x4e\xcd\xf9\xac\xe5\x4e\x21\x2f\xaf\x79\xdb\xdf\x91\x05\x6e\xaa\xa8\xe9\x7b\x52\x53\x6b\xf8\xe5\x9c\x4a\xd5\xe5\x73\x73\x15\xb4\xae\x32\x5c\x57\x65\x57\x05\xd9\xe9\xfa\x67\xb9\x45\x08\x2e\x29\xbc\xa9\x3a\xdb\x43\x48\xe1\xc5\x3d\x65\x1c\x68\x95\x60\x17\xfa\x4f\x3d\xdc\x97\x91\x42\xe1\x8e\xbd\xa9\xdc\x2d\x49\xb7\xdb\xc5\xd2\x06\x73\xe7\xba\xa5\xc1\xa1\x6c\xda\xb0\x56\x27\xd4\xac\xb5\xb2\xcd\x03\x99\xb9\xa0\x6b\x41\x78\x92\xd3\x41\x54\x2c\x9d\x7b\x65\xbc\xb3\x43\x33\x41\xaf\x66\xb2\x5c\x98\xa9\x53\x40\xf3\xca\xfb\xe9\xf4\x85\xdd\x64\xa2\xee\x65\xcd\x78\xb5\xb8\x43\x58\x4c\x81\x17\x03\x68\x7a\x65\x4d\x71\xbf\x15\x46\x39\xc2\xad\x8e\x99\x95\xc2\x30\x04\xd7\x55\x55\xb5\x8e\x82\xeb\xec\xca\xaf\xaa\x75\x32\x3e\x61\x4c\x48\xe9\xf8\x44\x76\x7c\x00\x2a\xce\xbd\x21\x9c\x54\x55\xb5\xd2\x4d\x4e\x26\xe5\xba\x5a\x21\xdc\x56\xeb\xc5\x6c\xa9\x58\x91\x5a\xfd\xad\x29\x01\xfe\x36\x9a\x5f\x55\xa3\xca\x59\xc6\x54\xd6\xaf\x16\xcb\x82\xf3\xda\x66\x30\xdb\xec\xc2\x4b\xb5\x9b\xbf\x0c\x7e\x03\x8c\xed\x5e\xe5\xcc\xad\xe1\x2c\x17\x4b\x8f\x65\x5d\x2c\x77\x3f\x5d\xe1\x48\x16\x2a\x25\xc9\x32\xd4\xd6\xaa\x4e\x92\x46\x52\x73\x37\x7f\x8b\x33\xfb\x64\xfe\x18\xdf\x21\xcb\xca\x4f\xd6\x8d\x7e\x95\x14\x2a\xfb\xf8\xa4\x2f\xd4\x7c\x83\xc2\xd9\x04\x7e\x63\x8e\x95\x58\x6e\xdb\x52\xd3\xd8\x1b\xbb\x98\x6d\x54\x4f\x3d\xe4\xf6\x9f\x3d\xe0\x0f\x99\x55\x0c\x18\xbb\x29\xad\xd8\x82\x2f\x47\xb6\x59\x8a\x76\x3b\xdc\x10\x41\xf8\x15\x65\x81\xa7\x42\xa6\x75\x93\xe5\x09\xcc\xa1\xda\x0e\x89\xa9\x3a\xa5\x3d\xc6\x8b\x61\x17\xec\x4c\x4f\x3d\x79\x07\xce\x68\xf9\x51\xf4\x90\x9f\x16\x2d\x23\x6f\xdb\xd7\x8c\x14\xf3\xe2\xaa\x66\x37\xe6\xef\x6c\x31\x90\x78\x4c\x39\xfd\x23\x5b\xf0\x55\xeb\x55\x08\x3f\x94\x38\x97\xd7\xd1\x7e\x3d\x0a\xf4\x08\xac\x4c\x54\xf2\x2c\xa7\x74\xb7\xa8\x69\x81\x42\xe6\xcb\x3a\xd8\x27\xd0\x29\xae\xc6\xd1\xbc\xe1\x72\xb2\xe4\xde\xc7\xec\xc6\x64\xe7\x23\x6f\xdd\x85\xc4\xdf\x66\x06\xbc\xa7\xa9\xec\x1c\x1d\xde\xaa\x51\x09\xa5\x1c\x6b\x01\x77\xe1\x3c\xcd\x27\x6e\xef\x48\x85\x2a\x26\x27\xfd\xaf\xd5\xfd\xff\xfa\xcb\xfd\x53\xc9\x67\xff\xe5\x7e\xe9\x25\xda\x09\x36\x3d\xfa\xcb\xfd\x72\xfa\x7f\xd0\x7d\xfc\xdc\x15\xbf\x8f\x9f\x54\xc5\xbb\xba\x23\x85\x73\x02\x78\xe1\xee\xda\x58\xb7\xf1\x9b\x93\xc9\xc4\x72\x7f\x4e\x87\x71\xb2\x3c\xf5\x7f\xcc\x8b\x47\x4a\x6f\x33\x96\xc4\x08\x1d\x18\x5f\xd4\x74\x4d\x9a\x62\xa4\x15\x93\x8f\x3c\x6d\x78\x75\x34\xd3\xb1\x9c\xf0\x33\x40\x2e\xc0\x5e\x7c\x66\x45\xb6\xdb\xc5\xad\xa0\x62\x4d\x5c\x0b\x5a\xa8\x6d\x88\xa8\xe9\x7a\x2e\x76\x4b\x17\x61\xf0\x6c\x00\xab\xa4\x2a\x93\xa1\xcd\xb2\x43\x9b\xf9\x43\x9b\x2d\xe7\xb7\x90\x99\x12\x1c\x6e\x0c\x8d\xff\x5d\x4b\x53\xb6\xe1\xbf\xfb\x07\x53\x9e\x00\x14\xab\xc0\xb7\x5b\x81\x76\x0e\x59\xa3\x0f\xa9\xc2\xb3\xd5\x23\xcc\xb4\xc9\xa9\x7a\x56\x02\x52\xc3\x8b\xde\xcf\xfc\x49\xf5\x2a\x78\xe1\x2a\x78\xa1\xe8\xe7\xbb\xea\xef\xe5\x0b\x5c\xbc\xbd\x24\x63\xad\x71\x1b\x73\x9d\xfe\x62\x2c\x2e\xc9\x58\x39\xfd\x8c\xdf\x91\x55\xbd\xe9\xc8\x98\x8a\xf1\xa7\xba\x1b\x3b\x37\xb5\x6f\xd3\xef\xdd\xca\x0b\x7a\x45\x9a\x71\xbb\x11\x05\xc2\x3f\x0c\x15\x94\x75\xd6\xef\x5a\xae\xfc\xe9\xfe\x36\x54\x94\x76\xe3\x0d\xab\x37\xe2\xb2\xe5\xf4\xef\x50\xfc\xc7\x3d\xc5\x2f\x5a\xfe\x8e\x36\x0d\x61\x05\xc2\x7f\x4c\xcb\xae\xda\xcd\xba\x01\xec\x10\x29\x36\xc0\xa0\x39\xe9\xda\x0d\x5f\x91\x02\xe1\x3f\x0d\x55\xae\x28\x7b\xdc\x6c\xc8\x58\xb4\xe3\x7a\x2c\xa5\xd7\x35\x85\x0c\xc2\xbf\xbd\xcb\x77\x1d\xe1\x1f\x09\x1f\x03\xad\x17\x6a\x5d\x7e\xdf\x87\x24\x93\xd2\xf5\x3f\x3b\x92\x4c\x56\x8f\x89\xfe\x85\x16\xf3\x95\xd0\x62\x54\x27\x33\xf8\x73\x72\x8e\x04\x40\x20\xf9\x90\x32\x75\xd3\xfc\x48\xc5\xe5\x73\xd6\x90\xcf\x39\x5f\x1f\xc3\xc8\x6d\x68\xe3\xd0\x31\xe5\x49\x2c\xe7\x56\x12\xd4\x19\x11\x86\xc7\x5a\xd3\x4e\x80\x54\x27\x0f\x4e\xbe\x60\x56\x23\xc0\x55\x36\x48\xac\x04\x61\x71\x4a\x8d\x9a\x73\x4e\xa7\xdd\xf5\x9a\xae\xa4\x00\x39\xc3\x06\x1b\xa1\xa3\x7f\x27\xc7\xd5\x89\x06\x6c\x12\xbb\x92\xa9\x4d\xf0\xab\x5f\xa0\x47\x1e\xfe\x43\xff\xa0\xfd\xac\xef\x3c\x74\x80\x02\x78\x52\xf3\xc4\x83\x52\x1d\x69\x95\x85\x5c\xd4\x0e\x18\xb4\xdf\xab\x39\x5f\xd5\xac\x65\x74\x55\xaf\x5f\xa6\xef\x94\x9f\x9c\xd6\x57\x7e\x20\x37\x95\x1a\x9f\xfa\x49\x59\x23\x7f\x4b\x56\xdb\x67\xb4\x7f\x0f\x4e\x29\xfa\x89\xa7\x55\xab\x04\x36\x17\x3f\xf8\x5a\x59\x2d\x3a\xdd\x6e\xa9\x79\xf5\xc6\x75\xb8\xb2\x37\x71\x3b\x99\xb4\xaa\x80\xcf\xcb\xbc\x24\xa2\xae\x78\xdc\xf4\xb3\x96\x3f\xbf\x92\x84\x45\x45\x95\xf6\xc1\x29\x17\x8e\xad\xb7\x19\xfc\x71\x41\xc4\xea\x52\x03\xae\x79\x4e\x84\x69\xc0\x0d\x76\x6e\x8a\x5e\x31\xe3\x47\x06\x7d\x32\xce\x3e\x30\x81\x97\xf2\x52\x79\xd6\xf2\x15\x51\xbe\x0d\xd5\xd1\x49\x3a\x94\xe7\xdd\x99\xa8\x25\x65\xe9\x59\x78\x45\x3e\xa9\x42\x97\x75\xf7\x88\xdd\xf8\xc2\x0f\x44\x1c\xe6\xeb\x50\xf0\x93\x47\x33\xfb\xe9\x33\xb8\x5d\x5e\xb4\xb5\x64\x4b\xc9\xd5\xb5\xa8\x8e\x4e\x86\xfc\x1d\x9f\x77\x67\x81\xef\x61\x98\x5d\xd6\x1b\x62\x80\xee\x6d\x53\x02\x93\x90\x10\x93\xd4\xba\x90\xc4\x29\xc2\xcc\xf4\x17\xe7\x09\x6d\x9e\x90\xab\x5a\x18\xa7\x82\x7c\x47\x46\xd1\x82\x6b\x0d\xee\x45\xcb\x1f\xad\x0d\x09\x07\x1a\x15\x01\x11\x2d\x8e\x05\xd6\x69\x9d\x5c\x0d\xc8\xfc\x1d\x77\xa0\x8c\x3a\xa8\x53\x9f\xfb\xdd\xcf\x7e\x57\x25\x8a\xea\x1e\xf2\xea\x88\xf8\x3e\x25\x83\x52\x1e\x30\xfe\x56\x31\x30\x2f\xca\x81\x3d\xc8\x4f\xfd\x8c\xb7\x57\xaf\x3f\x31\x0b\x2e\xa3\x8a\x3c\x36\x5b\xba\xa7\x6c\x34\x0c\x15\xce\x02\xb4\x9b\xf4\x5c\x39\xe4\xee\x01\x2d\xb5\xf9\x4e\x2b\xff\x90\x81\x5b\xe1\x01\xb1\xbc\xf5\x03\x9b\x0c\x64\x31\xd3\x66\xbe\xcc\x88\x4a\x81\x76\x11\x10\x52\x7c\x42\xa9\x8a\x59\x5c\x31\xaf\x58\x54\x71\x7e\x1e\x4a\x79\x3c\x07\x03\x52\xa5\x1f\xad\xc3\x72\x9d\x9e\xb0\x2a\x76\x18\x30\xe3\x0b\x50\x77\x22\xaf\x8a\x6c\x84\x50\xb6\xcd\x7c\x27\x7b\x1b\x4f\x26\x23\xe8\x85\x4a\xaa\x67\x8a\x28\xff\xf8\x6c\xc3\x61\x63\x99\x84\x3c\xb0\xd7\x72\x30\x3e\x1e\xb8\x7b\x6e\xf9\x48\xb2\x4b\xea\xa6\xe9\x6d\x2d\xd4\xc3\xf7\xb4\xc7\x92\x2a\x94\x57\xb3\x7f\xb2\x88\xe3\xe3\x4c\xbb\x3d\x73\xdb\x97\xb9\x03\x18\x08\xe2\x33\x10\xae\x09\xe5\x82\xdb\x5b\x27\xe4\xbd\xc6\xec\x58\xe8\x14\xa2\xc3\x05\x0f\xed\x69\x95\x33\xe8\xc5\x04\x70\x59\x2b\x8f\xcf\x32\xff\xda\xe7\xf3\x3c\x6f\x70\x08\x10\xca\xc4\x01\xc9\xe3\x61\x80\x96\xec\xc7\xdf\x65\xaf\x26\x79\x76\x25\x50\xb5\xd9\x76\xb2\x70\x86\xde\xa1\x6c\xa3\x15\xc3\xd3\x1b\xf3\x8a\x29\xd4\xc3\xa8\x3c\xd6\x09\xf3\x93\x17\x0f\x4a\xae\x3d\x9f\x02\xf6\x02\x4d\x26\x74\x60\x95\xd2\x3d\x8d\x76\x60\x2e\xd1\xce\x00\xd3\x73\xaa\xd9\x8c\x20\x88\x0a\xd7\x55\xbb\xe8\x67\x49\x96\xa3\x7a\xbb\x2d\xf7\x94\x51\x90\xd4\xa5\x63\xc0\xb0\xb0\x0c\x18\xbe\x35\xaa\xf8\x5b\xb8\x64\xe7\xfe\x3d\xb1\x53\x49\x04\x14\x93\xee\x1c\xac\x11\xc2\xf5\x1d\x47\x9a\x3b\x31\xbe\xfa\x5e\x1a\x3c\xa3\xa3\xed\xb4\xb7\x6c\xf6\x90\xfb\xc9\x9b\x6a\x32\x29\xef\x70\xad\xc6\xbc\xe8\xfe\x61\x7a\xb1\x78\x25\x84\x3d\xe5\xa9\x6a\x88\x5a\x54\xda\xda\xbb\x7e\x35\x3c\xa1\x19\x92\x38\xfc\x7e\x89\xcf\xea\x2a\x54\xf6\x06\x37\xa8\x82\x2f\x35\x47\xd7\x55\xee\xc4\x02\x2c\x52\xcf\x07\x42\xdd\xa9\xfe\x40\xc1\x65\xc2\x2b\xe7\x2f\x40\x8e\xf7\x8b\x0f\x88\xf4\x76\xc9\x8c\x7f\x5e\xf6\x6d\xf9\xa1\x69\x96\x23\xfb\x82\xcf\x7e\x86\x13\xe0\x4b\xba\x71\xd0\xc4\x1c\xcc\xfe\xdc\xfd\xea\xc8\xb0\x17\x39\x06\xb5\x7f\xc3\x7e\xc1\x3e\xfd\xa7\xda\x9e\xfb\x27\x7f\xef\x84\x79\x43\xc8\x67\x5d\xdc\xbf\x3f\x46\xa0\xf6\x1a\x98\xd1\xdc\x0d\x72\x48\xbf\x02\xf6\x36\x5e\xcf\x08\x52\xf3\xcb\xd8\xeb\xbd\xa7\xee\xd7\x98\x93\xe1\x6b\xe1\xc0\xc9\x19\xac\x24\x9d\xa5\xe4\xbe\x8a\xa6\xeb\x60\x39\xe0\x71\x7b\x75\x2d\xbf\x5c\xdf\x64\x67\x25\x90\xbc\xfb\xb8\x34\x91\xcb\xbf\x6c\x82\x09\xc2\xe8\x0a\x4f\x6c\xb4\x0a\xac\x50\xcf\xc8\x91\xf3\xaf\xd4\x78\x38\x7c\xbf\x04\x9f\x1b\x8c\x9c\x7d\x79\x27\x2c\xe8\xb2\x92\x67\x4b\xa0\x01\xb3\x82\x06\x47\x79\x35\x58\x52\xc0\x0a\xe3\xaa\xb8\x92\xba\x76\x49\x56\x0b\xa7\x85\x08\x15\xf7\x9a\x2f\xea\x9b\x2b\x50\x5d\xc6\xc2\x73\x4e\x95\x19\x97\x91\x7c\x52\x66\x0e\xe5\xa8\xe5\xed\xa3\x06\x8f\x49\xc9\x91\x93\xab\x15\x42\x70\xbf\x6c\x9d\x81\x0e\xee\x2f\xac\x30\x85\xc3\x0e\xd4\xb2\x03\x9d\xea\x40\xa7\x3b\x50\xa3\x1e\xbe\x32\x5e\xb4\xbb\x53\xfb\x57\x3a\x33\xc2\x4d\xd3\xa3\x07\xf3\xe7\x5e\x51\xd4\x27\xba\x5e\x83\xe2\xec\xe8\x64\xe4\x96\x79\xb1\xc4\x19\x1e\x58\xb2\xaa\x4a\xc1\x57\x22\x30\x26\x80\x36\x5c\xf2\xaf\xa1\x7e\xb6\x47\xd4\x6f\xaf\x6f\x4a\x64\x1b\x51\xae\x14\xc2\x77\xa5\x88\xf9\xa8\x52\x2c\x78\xcc\x1b\x67\xce\x86\x44\xcb\x60\xc6\x64\x58\x33\x37\xc6\x99\xa7\x19\x9e\x9e\x9b\x49\x75\xbb\x13\xc2\xb5\x74\xbe\x80\x9c\x9a\xe9\x05\x65\x1f\xd2\x15\x5e\xcb\xa7\x64\x50\x17\xdb\xaf\x2c\x8b\xa9\x0a\xf4\xac\xbd\x5e\xeb\xbe\x4a\xd7\xb8\x7f\xfa\xcf\x54\x90\x1b\xed\xde\x10\xa6\x70\xa6\x4e\xd3\x32\x3a\x08\x57\xf1\x32\x89\x9a\xb5\xb4\x41\xc7\x1d\x11\x67\xb1\x06\xd8\xa9\xf7\xde\x13\x01\x8c\x0f\xc1\xf6\x51\xd0\x4a\x2c\x49\x43\x4d\x2f\xeb\x0f\xe4\x7b\xf2\xb7\x0d\xe9\xd2\x14\x30\x55\x9f\x66\x19\x6b\x65\x78\x4e\x29\x6c\x0e\xea\x7a\xbd\xb6\x62\xba\xdc\x23\xdd\x23\x4e\x94\x97\xb9\x31\xfc\xe4\xb5\xd1\xc6\x06\x94\xa8\xba\x71\x9b\xeb\x0f\x68\xa9\x71\x5d\x95\xfe\xa1\x8a\x9d\xe2\x1b\x61\x4d\xfd\x3e\x19\x18\xcb\x23\xd8\xe5\x27\x13\xe3\x57\xd9\x4d\x26\xe5\x91\x36\x21\xc0\xff\xe4\xf4\x48\xcc\x8f\xb4\x4a\x48\x59\xa3\x5a\xf3\x07\x97\x65\x8e\xaa\x8a\x21\x14\x53\xa6\x26\x63\x1d\x42\x69\x48\x6f\x20\x9e\xcc\x5f\xa5\xd3\x32\xd0\x43\xa5\xf4\xd4\xf9\x69\x49\x5c\x34\x7e\x5a\xc6\x66\x33\x01\x2c\xe8\xa4\x90\xd6\xc3\xab\x8b\x03\x9e\xf8\xc1\xfd\x7e\xc9\xdc\xbe\x4b\xb5\x8b\xda\x7d\x22\xdd\x8c\x83\x2c\xba\xbe\x2d\x95\xeb\x8f\x72\x44\xef\x94\x27\xba\xd7\xe4\xa0\xa8\x16\xa2\x17\x46\xba\xa2\x7c\xc3\x69\x1f\x7b\x2c\x23\x24\x57\x61\x6a\x07\xc9\x55\x97\x96\x4a\x2b\xcb\x1c\x40\x69\x5d\x39\xcb\xce\xbe\xaa\xa2\xd4\x61\xf9\xaa\x54\xa1\xb4\xaa\xe4\x88\xc9\x2c\x69\x52\x24\xaa\x46\x5e\x44\x59\xbd\xec\xd1\x09\xe6\xf2\x66\xa3\x17\x25\x01\x6b\x80\xa6\x71\x67\x34\xd0\xcf\x3d\x7d\x2c\x99\x36\xb5\xa8\x11\xb3\xb7\x85\x2a\xac\x0e\x3b\x78\x87\x05\x02\xef\xe3\xb1\xef\x4a\x4e\xa6\xe7\xd7\x35\x17\xb4\x5e\xcb\x92\x28\xfd\xd2\x7f\xed\xd7\x70\x74\x62\x60\x31\xf4\x79\x82\x6e\x65\xdb\x3a\x55\x9e\x0f\x51\xa2\xa4\x68\xca\x9a\xd3\xc5\x12\x9c\xf7\x47\x71\x2b\x14\x92\x3f\xcb\xc1\xca\x3b\xa9\x93\xf2\x1b\xfc\x31\xd5\x7e\x8c\xc6\xd1\xd9\x9f\xe2\xee\x13\x15\xab\xcb\xd2\x04\xb9\xa1\xdb\x55\xdd\x11\xe3\x22\x31\x37\x16\xb7\x11\x3c\xed\xc0\xd7\xcb\x3c\xbd\xbd\xe4\xe4\x62\x4e\xac\xb9\x18\x20\x49\xca\xb8\xc9\x51\x3b\x99\xb4\x53\x59\xd4\xfc\x7f\x54\x55\xf6\xde\x94\x1c\x72\x34\xd3\xf2\x92\x2d\x55\x49\x04\xa3\xd9\x7b\x5d\x31\xc3\xe8\xe9\xa3\x55\x2d\xd3\x76\x0b\x9c\x92\x9c\x56\x95\xc0\x58\x2d\xec\x64\x32\xb3\x45\x34\xf7\x31\x3a\xf4\xe4\xe8\xbb\xc6\x4f\xfa\xde\x03\xd5\x97\xb5\x52\xbf\x82\x2d\x7e\x0f\x3b\x80\x85\xd1\xf7\x06\xfc\x5f\x36\x84\xc6\x68\x55\x92\x1b\xc1\x3b\x65\xfb\xcf\x2b\x47\x36\xfd\x65\x74\x80\x6f\x58\xe0\x57\x0e\x64\x44\x47\x62\x0d\x44\xac\x44\xb1\x29\x8a\x79\xb4\xa8\x1b\xbe\x5d\x36\xa9\xc6\xee\xae\x04\x36\x46\x16\xb7\xde\x9a\x72\x1f\xf4\x0b\x77\x1e\xbf\x67\x03\x51\x92\xd3\x49\xd6\xa7\xdc\x36\x47\x41\xc6\x88\xa1\x98\x84\xb8\xbd\x5d\xda\xc5\x8a\xec\x82\x8b\xd7\x7f\x77\x57\xe0\x91\x1e\x4f\x00\x07\x40\x62\x7d\x2c\xfe\x33\x94\xd8\x92\xe8\x4e\x56\xe9\x14\x2c\xbf\x39\x39\x15\xf7\x4e\xe6\x33\x84\x79\x75\x22\x79\x71\x15\xe4\xbc\xe0\x61\x7c\x27\xb7\xe1\x86\x69\xd7\x8c\x5b\x94\xf6\x1a\x60\xbe\x13\xe1\x9f\x43\xef\xe6\x0b\xca\xea\xf5\xfa\xc6\x77\xb7\x15\x25\xda\x6e\x4b\x36\x3d\xef\x36\xef\xba\x15\xa7\x4a\x34\x81\x5e\x56\x33\xe4\x62\x1a\x98\xab\xf4\x77\x8e\x23\x3e\x2a\x93\x1c\xfd\x3a\x56\xbc\x40\xdb\x6d\xfe\x1d\xb0\xc4\x1e\x86\x33\x21\x26\xb9\x93\x6e\xea\xcf\xa5\x97\xc3\xce\xe5\xae\x4b\x02\x71\x1d\x4f\x45\x76\x28\x03\x38\xf1\xbb\x32\xcc\x9c\x27\x12\x77\x1f\xe2\xa2\x6d\x8d\x10\x84\x69\xf5\xb2\x16\x97\xd3\x2b\xaa\x9c\x2d\x71\xab\x24\x88\xba\x9a\x3d\xa8\x1f\xd2\x07\xf5\xf1\x31\x92\x87\xfb\xa2\x5e\xca\x23\x74\x51\x2f\xd1\x6d\x5b\xd5\xa3\x77\x9c\xd4\x1f\x76\xfa\xec\x6b\x27\x13\x2e\x19\x45\x88\xee\xa4\x48\xc7\xa7\xcc\xf0\xa6\x9a\x99\xa0\x1e\xc9\x58\xba\xae\xac\x2b\x7a\xaf\xc5\xab\xea\xe4\xc1\xea\x61\x45\x1f\xac\x4c\x23\xec\xde\x4a\x35\xc3\xef\xad\x96\xe8\x76\x5d\xad\xee\x9d\xe8\xa6\xba\x8a\xdf\x5b\xdf\x6b\xf1\xa6\x62\xf2\x7f\x13\x7d\x71\x41\x79\x27\xd4\xd9\x04\xea\xef\x79\x8b\x6b\xc9\x33\x3d\x6e\x37\x4c\xcc\x3b\x9d\x7a\x47\xff\xdc\xa8\x9c\x79\x8c\x0c\xa0\x91\xbc\xdc\x80\xd3\x12\xd0\x2b\x8e\x00\x4a\x28\x0b\x91\xe6\xd4\x16\x1b\x88\x39\x36\x6c\xba\x12\x0b\xaa\xe0\x17\x78\x51\xa9\x3b\x49\x93\x9f\xfa\x75\x9d\x08\x72\xe0\x52\x60\xff\xda\x6e\xdd\x9b\xd0\xff\x27\x7d\xe4\xda\xf0\x0f\x95\x54\xca\xf0\xeb\xf4\x51\x44\xa4\x50\x9e\x51\x8f\xc9\xcb\x67\x87\xd5\x75\xfd\x28\x13\x66\xe8\x57\x3d\x3d\x87\x6f\xb5\x70\x08\x11\x9b\x72\x6a\x15\xbc\x45\xa7\x51\x8c\xf4\x99\xe9\x37\xad\x03\xc9\x9d\xa8\x60\xb3\x6d\xc9\x1d\xe6\xe0\x17\xc2\x9e\xa5\xe1\xd2\x47\x87\x3b\x2d\xa3\xed\xd6\xff\x29\x9b\xff\x9d\x16\xcc\xc3\xbc\x48\xde\xe8\x02\xed\x53\x07\xfe\x79\xa0\xc9\xd3\x37\x65\x00\x8a\x23\xd0\x48\x6f\x05\x36\x8d\xe9\xd6\xdc\xd2\x90\x70\xff\xb1\x92\x7d\x7e\xa4\xeb\xb5\x01\x7a\x48\x3e\xc0\x6c\xea\xd3\x36\x06\x9b\xbf\xfe\xe1\x38\x03\x9b\x27\x09\xdb\xa4\x65\x99\x55\xd6\xc6\x12\xbf\xed\x27\xb4\xf9\xc2\xa6\xc9\x64\xe2\x3f\x90\xb3\x9d\x4e\x5b\x10\xc2\xab\x1b\x42\x0a\xd6\x54\xdd\x39\xdf\x93\xeb\x75\xbd\x0a\x03\x09\x20\xf4\x41\x9e\xde\xd5\x62\x89\xd2\x2e\x7b\xd3\x05\x85\xfb\x07\xac\x3d\x29\xbd\x3d\x1b\x2e\xd4\x82\x60\xb1\x9c\xae\x5a\xb6\xaa\x05\x60\xf1\x65\xa6\x33\xa9\x33\x68\x2d\x3f\x95\x41\xb7\x6c\x7a\xae\x50\xd0\x9c\xe7\x95\xa0\xb3\x07\xc2\x29\xc6\x84\x51\x33\xb2\x74\xdf\x4c\xa9\x5c\xa2\xd7\xf2\x34\x15\x46\x49\x16\x4d\x6a\xc9\xf0\x89\x9c\xeb\xf3\xc4\xd1\x24\x8e\x12\xb2\xac\x10\xe4\x8e\xdf\x33\xe6\xb8\x15\xe5\xa7\xba\xc3\xbc\x67\x29\x95\x46\x4e\xc7\x6c\x02\x9d\x94\x3c\xd3\x86\xda\x54\x04\x93\x63\x81\xbc\xb4\xa5\x3e\x39\x15\x28\xeb\xa4\x53\x72\x04\x89\xf2\x7a\x3f\x4a\xc6\x5f\xb2\xe9\x55\x7d\x9d\xf3\xdd\x21\x51\xc8\xf3\x0e\xe9\xb1\x25\xe8\x1e\x3e\x07\x15\xd0\xbc\x06\xd8\x90\x9f\x85\x18\x24\xbe\x32\x0a\x8b\xaa\x78\x72\x36\x1f\xdb\x83\xf2\x7f\xc9\xb2\xe3\x34\xa2\x05\x70\xf0\xe4\x51\xe3\x31\x0f\x26\x4a\x62\xaa\x10\x46\x15\x82\x6f\x81\xb0\xe8\xc5\xf4\x20\x06\xfc\x33\xd3\xa6\x2e\x62\x9f\x5a\x7f\xf6\x4c\x16\x5e\x06\x38\x34\x41\xbe\xd8\xc4\x4e\x14\x8f\x00\x38\x64\x6f\x08\xc9\xd8\x24\x97\xe2\xd7\x29\x57\xc7\x30\xa1\x98\x84\x88\x70\x52\x1c\x57\xd7\x79\xc9\x11\xe6\x3b\x08\x61\xfc\x05\x3a\x41\x2b\x11\x9e\xf4\x66\xd3\x0d\x83\x8f\xff\xc7\x44\x42\x78\xe1\x4d\x7a\x04\x76\xf9\xdb\xa9\x8d\x18\x94\x12\x4d\x45\x55\x3c\x76\xeb\xac\x01\x96\x95\x69\xa7\xe7\x57\x86\x9a\x15\x7f\xd5\x4e\xcf\x39\x11\x35\x65\xa4\x79\x99\xbc\x49\x7d\x99\xdb\xe9\xf9\x27\xba\x5e\x2b\xe6\xc5\x7d\x70\x74\x02\xc5\xf3\x2c\x8e\xfe\xf2\x5f\x51\x1b\x5f\x3d\xc7\x6f\x5e\xe7\xe0\x2b\x9f\x2f\x93\x83\x8a\xd8\x6c\xb1\x02\x42\x09\x33\x46\xf7\x14\xe9\xdb\x3f\x47\x72\x66\xfa\xf4\x0b\x2f\x8d\xa2\x56\x37\x5b\xc2\x33\x9c\x9e\x7b\x62\x54\x1e\x65\x52\xb6\x52\xd6\xce\x03\xed\x30\xb6\x9a\x70\x5c\x39\x6f\x65\x11\x0e\xc4\x15\xc9\x04\x12\xfa\x5d\x8f\x7b\x0e\x3c\x11\xe4\x8c\x57\xe8\x70\x77\xf3\xd1\x74\xfe\x4d\x59\x77\x32\x70\x74\x72\xb8\x19\xa7\x61\x49\x9f\x93\x2b\x19\x9e\x61\xe3\xfa\x16\x95\xd0\x71\xed\x87\xf9\x8f\x86\x07\x0d\x8a\x86\xb4\xd7\x7d\x3d\x9a\xd6\x9e\xf2\x99\x39\xa6\x06\x94\x38\xa6\x0d\xfb\x24\x3d\xa6\xa2\x92\x83\xb4\xd3\xe3\x50\x62\x2b\xeb\x6b\x04\x0b\x14\x38\x93\x45\x1c\x7b\xb2\xe2\x77\x77\x64\x1b\xf2\x84\x8b\x56\x43\xb3\xe1\xab\x4b\xd2\x6c\xd6\x24\x3a\x67\xcb\xcc\x7a\xf5\x14\xed\x77\xa7\x36\x3a\xbd\x60\xfe\xf5\xa3\xbe\xe3\x7d\xf0\xed\x76\xbb\x58\x6a\x20\x5c\x30\x3d\x29\x53\x1b\x7c\x91\xb9\x48\x90\x51\x29\x64\x2f\x99\x99\x0f\xa5\xa2\xcd\xc9\xef\xea\xd5\x87\x77\x1b\xce\x08\x1f\xf1\xe9\x5f\x5b\x1a\xf2\x78\x76\x02\xca\x42\x52\x57\x70\x42\x15\x98\x61\x36\x2c\x9c\xa3\x9d\x94\x12\x82\x13\x77\xa8\x78\x15\xea\x51\x8f\x4e\x06\x87\x1a\x84\xca\xf4\xcc\xde\x68\x78\xe6\x8d\x72\xa2\xe7\x4e\x1e\xf5\x4a\x4f\xd5\x37\x56\x47\xb8\x10\x4b\xcc\xe5\x7f\xc7\x27\x3a\x12\xc2\x1d\x6e\xa9\x7c\x54\x2e\xd8\x12\xf8\xb4\xdc\xcd\x71\xa0\x47\x92\x27\xfb\xb0\xd1\xd0\xe1\x37\x99\x38\x5d\x34\xf7\x84\xa3\xf0\x78\x33\xe2\x9e\xdc\xa8\xfc\x37\xf7\x4e\xf4\x19\x9d\x3f\x26\x39\x3e\x41\x77\xf5\xa5\x1a\x3e\x12\x7f\x9e\xa8\x8c\x7c\xef\x67\xd9\x97\x46\x06\xfd\x82\x58\x11\x3f\xd9\x71\x6e\x41\xfb\x1d\x6d\x44\x8e\x11\x48\xca\x07\x07\xfd\x28\x17\xa0\x13\xaf\xe1\x83\x7b\x27\x4a\x91\x3a\x78\xd7\x9d\x20\xff\x28\x70\x87\x95\x3c\xbf\xbc\x30\xc7\xac\x5a\xc0\xb4\x41\x27\x13\x9e\x88\xec\x54\x29\x06\xc4\x41\x3e\x3e\xfd\x2e\x32\x83\xdc\x4f\xcc\x42\x44\xaa\xc5\x1e\xa6\x6c\xef\x8e\xca\xdc\x2e\x93\x49\x79\x98\x53\x65\xf6\x9e\x39\xf0\xce\xf4\xee\xdf\xbb\x7e\x9a\xbb\x6e\x07\x76\xd8\xde\x8d\x75\x78\x84\x56\xb2\x40\x6e\x39\x82\x7d\x98\xf6\xd0\xac\x5f\xf2\xc2\x3a\xf8\x85\x17\xc6\xbe\x99\xa8\x12\x05\x9f\x85\x3b\xf5\x59\x3f\x12\x12\xb3\x1e\x9d\x28\x19\x88\x09\x59\xe5\xcf\x42\x2c\xe3\xa9\x3c\xd0\xcb\xc2\x45\x39\xe4\x0c\xa2\x3e\xee\xa0\x97\x82\x21\xe1\x7f\x43\x8f\x8f\xd4\xf5\xe8\x0b\xb1\x34\xe4\xa5\x97\xf7\x76\x03\x34\x50\xcc\x33\x1e\xba\x10\xa0\x0c\x0e\x09\xc8\x53\x7b\x00\xf0\x8f\x51\x7b\x3c\xe4\xa0\xfa\x10\xe0\x03\xa7\xfc\xeb\x5c\xf6\x44\x82\x46\xf9\x8c\xf3\xdc\xc6\x52\xf9\x70\x9c\x5a\xf5\x35\x10\x03\x53\x32\xe7\x94\x47\xab\x19\x6e\x5d\x4f\xe8\xc3\x16\x30\x5f\xb5\x75\x9d\x00\xd6\xeb\xbe\x0a\x4b\x93\xcd\xa1\x3f\x6a\xa7\x56\x00\x49\x22\xf4\x04\x79\xae\x34\x18\x03\xc1\x7d\x86\x93\x89\xec\xfa\x68\x32\x51\x1e\x18\xfa\xfa\x39\x40\x55\x2b\x79\x8d\x81\x0b\x9f\x0d\x46\xa4\x95\x2c\x72\xdd\xf4\x9f\xf5\x86\xa6\xc9\xc3\x24\x73\x93\xf4\x78\x4b\x8a\x56\x0d\x2e\xe5\xfa\x88\x58\x5d\x6a\x27\xb7\x9e\xc8\xc7\x60\x7f\x5a\xef\x33\x63\x45\x4f\xbc\x69\x4e\x7d\x26\xd6\x70\xa9\xcf\x64\x33\x72\x6f\x81\xa8\x3f\xf7\x8a\x5c\x50\xd6\xd8\x17\xb9\xce\x25\x4e\x92\x29\xa8\x73\x54\x9d\xde\xc6\x19\x77\x73\x6d\x94\xa3\xec\x43\x3e\x86\x1e\x27\x98\xcf\xbe\x9a\x38\x4a\x6d\xaa\x84\x63\x70\x5d\xcd\x38\x00\x89\x94\x8f\x4f\xb8\x78\xb1\xcf\x1f\xad\x34\xc8\x4f\xe1\xc4\x68\x67\xc9\x9e\x59\x31\x4e\x8c\x01\xef\xe0\xad\x95\xe7\x35\x59\xa2\x48\x57\xcf\x2b\xc3\x8b\xca\x49\xd2\xde\x9e\x76\x19\x4a\xb3\x74\x01\xd9\x94\x04\xf5\x2a\xa1\x5b\x52\x0a\x3f\x43\x00\x09\xde\x60\x77\xa6\x04\x8e\xae\x1a\xc9\x20\xeb\x8a\x58\x02\x54\x54\xe0\xcb\xa0\x04\xec\xd3\x32\xc8\x09\x94\x53\xa9\x64\xeb\xcb\x58\xe8\x19\x72\xf7\x7d\xe0\x84\x3a\x67\xb9\x5b\x27\x90\x9c\x13\x76\xf8\xe0\x8b\x26\xab\xdb\x89\xd6\x39\xc2\xea\xd4\x24\x26\xcf\xe7\xef\x35\x3c\xcf\xf3\x86\x30\x41\x2f\xa8\xc9\xe9\x80\xe5\x09\x7f\x6a\xce\x92\xec\xa1\x28\xaf\x5a\x28\xb0\x8f\x1a\x59\xd4\xc5\x8c\x3f\x8f\x5e\x11\xe7\x20\x01\x0e\xef\xe9\x37\x1e\x9b\xe2\x9b\x89\x3d\x86\x17\x0c\x53\xfb\xf4\x67\x3e\xe7\x1d\x2c\xd5\x88\x01\xac\x5b\xfc\x79\xa2\xf7\xb5\x4a\x1a\xeb\xee\x51\x1d\xcd\x76\x98\x4b\xea\xd4\x5e\x49\x61\xf2\x94\xc1\x6c\x3e\xce\x60\x6c\x1d\x72\xfa\x5d\x89\x93\xba\x3c\xb1\x39\x62\x89\x9a\xcd\x8a\x94\x59\x35\x28\xd9\x6e\xc5\x54\xe7\x3e\x91\x1c\xda\xd1\x89\x55\xc8\x13\x4d\xf6\xc6\x5f\x5d\xf2\xcc\x59\x19\x65\x4f\xfd\x47\x71\x03\x08\x1f\xb9\x4c\x47\x76\x41\x72\x0e\x57\x47\x89\x88\x70\x94\x10\x48\x30\xee\x9c\xef\xa9\x8d\x58\x7e\x45\x3e\xe9\xbf\xfb\x27\x75\x94\x90\x09\xb1\x8a\xe2\x70\xd8\x39\x8d\xa2\xce\x49\xe3\xf6\x56\x80\x8e\x39\x57\x62\x84\x8d\x2a\xcc\xf9\x81\x05\x06\x0b\x84\xb9\xb2\x98\x65\x6e\x22\x79\x4b\xcc\x35\xd9\x88\x1a\x07\xbe\x1d\x26\x8e\xd1\x7b\xe4\x32\xd9\x90\x1d\xc2\xc6\x84\xd0\xc7\xc8\xf7\x09\x21\xc9\x7e\xc8\x5b\x48\xc2\xf3\xd5\x4d\x26\xb8\x87\x89\x5d\xf9\x07\xcf\x3f\xac\x25\xa1\x63\x56\x70\xeb\x30\x13\x40\x10\x38\x53\x79\x85\x94\x96\xd9\x41\xb8\x1f\xcd\xa4\xb4\x9f\x46\x3d\xe4\x7d\x7b\x95\xa7\xa4\xb6\xa3\xf4\x7a\x38\x2b\x3f\x48\x97\xfb\x66\xc8\xf5\xb3\xcf\xb3\x59\xf9\x85\x82\x8b\x51\xfd\x8b\xb5\x3d\x76\xbf\x2c\xdb\xa3\x41\x02\x0a\xf4\xde\xda\x56\x18\x31\xdd\x03\x66\xc5\x7f\x19\x07\xbf\xba\x71\x10\xf8\x98\xbe\x40\x68\x62\xc1\x49\x62\x2c\x16\x73\x0a\xa7\xab\x6a\xdd\x98\x7a\x03\x8d\xd3\x6f\x0e\x09\xe1\xfe\x49\x5e\xde\xe0\x88\x17\x0d\x7b\x2f\x88\x83\x3f\xfe\x3e\x84\x88\xac\x2d\x2d\x98\x82\x21\x28\x84\xf0\xb3\xe1\x10\xdb\xbc\x44\x7e\xc8\x20\xcc\x15\x96\x95\x97\xe3\x50\x47\xff\x59\x76\xd3\xe6\xe4\x64\xb2\x1f\xfa\xe5\xee\x46\xcf\xbd\x26\xcf\xaf\x3e\xf3\xb1\xf4\xff\xe5\x54\x69\xa9\xee\xee\xe6\xd4\x3b\x1b\x53\xef\x6c\x4b\xdd\xb3\x0b\xb3\x39\x56\xf2\xfa\xe6\xaf\xab\xf9\xcf\x2e\x82\x76\xaa\xcb\xbc\xf1\x25\x8e\x1c\xa1\x7a\x5f\xf6\xdf\x3e\x43\x23\x3e\x60\xc8\x99\xb8\xf6\x03\x43\xe1\x13\xd5\x72\x6f\x1f\x0f\xb5\x33\xec\x3b\x91\x73\xaf\x5c\xc8\xf0\x51\x66\x8a\xcd\x1e\xcb\x7d\x69\x38\xe6\x78\xff\x0d\x4c\x78\x4e\x46\xe8\x91\x24\x87\xd7\x65\x20\xea\xd8\x9b\xd6\xc3\xad\xee\x83\xe0\x31\x5f\xf9\x8e\xcb\xcf\xcc\x20\xd0\x4d\x66\x93\x1c\x46\xb1\x9d\x71\x00\x4f\x23\x4f\x1d\x28\xc5\x7b\x3f\x8a\x14\x61\x66\x1e\x99\xa0\x51\x34\x72\xfa\x8e\x60\xa0\xa7\x22\xf2\xf5\x9c\x5b\x4f\x98\xac\x6e\x88\x25\xaa\xff\x83\x8c\x56\x7d\x26\xab\x43\x36\x76\x86\xb0\xee\x6e\xe9\xba\xd3\x94\xff\x43\xac\x50\x77\x1f\xf5\xe1\x07\x7b\xb6\x50\xe4\xb2\x10\x48\xcc\x81\x4e\xcf\x57\x3f\xe4\x7a\x39\x1a\xa0\x8f\x0d\x00\x2c\x90\x53\xe2\x07\x2e\xcc\x95\x08\xdd\xab\xfc\x8b\x47\xd3\xa3\xff\xbb\x9b\xe7\xc1\x30\xe7\x31\x70\x1d\xfd\x64\x86\x61\xf6\x93\xdc\x0e\xbe\x82\xd3\xc1\x4f\xf3\x0e\xc8\xde\xe0\xe9\x1d\xe6\x6b\xbc\xfb\xec\x24\x39\xea\x31\xca\xf8\xc4\x4c\x02\x4a\x79\x5f\x04\xf7\xd5\x6c\x52\x10\xbb\xac\x3b\xd5\xdc\x69\x10\x16\xe3\x7c\xcd\x7d\x25\x14\x64\x77\xfa\xf6\x26\x3a\xee\x30\xb1\x9a\x9c\x9c\x96\x1b\xc8\xf4\xab\x58\x5c\x2c\x49\x7f\x6d\x9b\x8b\x9c\x88\x8c\x28\xf7\xa5\x26\x91\xdc\x0a\x9d\xf6\x73\x1a\xf1\xa6\xbe\xab\x21\xe5\xce\xb6\x94\x21\x53\xca\xba\xd7\x94\xb2\x36\xa6\x94\x81\x89\xcc\x1c\x51\x5f\x60\x7a\x71\xf1\xd3\x36\xb8\xdc\x65\xf6\xea\x3b\x5b\x69\xb5\x21\x03\x3c\xc6\xd0\xf9\x4a\x63\x5b\x4f\x08\xed\x60\x03\x3a\xef\xe8\x3b\xbc\xb2\x2a\xe1\x73\xab\xaf\x75\x3a\x61\x7c\x80\x43\xf1\x4f\x36\xce\xf4\xdb\x66\x7a\x44\x40\x63\xa3\xe9\xd5\x02\x80\x75\xa6\xf6\xec\x16\x5f\x66\x79\xc8\x5e\x81\x26\x44\xd6\x4f\x58\x6b\x0f\x2b\x94\x53\x0b\xc3\xcd\x68\x18\xb6\x91\xdb\xce\x64\x6a\xd3\xb3\x97\x70\x2d\x01\xd2\x81\x4f\x33\x38\x73\x54\x25\x51\x2e\xfb\x28\xdb\x85\xca\xae\x23\xfd\x74\x76\x7c\x80\x71\xf0\x4f\xad\x75\x5e\xfd\x62\xb5\xce\x17\xbd\x23\xcf\x19\x58\x8d\x5e\xc7\xe8\x90\xff\x4e\x9a\xd0\xdf\x3f\x97\x01\x32\x83\x03\x7f\x59\x77\x19\xd8\xa4\xa3\xa3\xc1\xca\x17\x64\x99\x60\xa0\x3d\xad\x57\x97\xfd\x0c\x43\xbe\x1e\x93\x86\xf4\x03\xb9\x91\xdc\x5b\x26\x79\x12\xba\x05\xe1\x04\xc0\x5e\x23\xb8\x86\xf7\x44\xdc\xb5\x3d\x79\x3d\x2e\xc8\xd2\x60\x1b\xd1\x78\x6f\x1c\xb1\x08\x9f\x8e\x08\x93\x1b\x71\x38\x99\xa5\xfc\x96\xea\xe8\x5e\x9d\xe3\x91\x9b\x73\x31\xf8\xf0\x4d\x7d\x23\xb7\x56\xa7\xab\x76\xb1\x60\x7c\x4a\x1b\x79\x4c\xaa\x1e\x26\x2e\x65\xfe\x9d\x8b\xa9\x42\x6f\x48\x14\xee\x4e\x70\x8c\x32\x22\x96\xc2\xa6\xd6\xb4\xb9\x0f\xd1\x4e\xf1\xcb\xb4\x22\x53\x5f\x3b\x05\x16\x3e\x20\x6d\x86\x10\xa6\xe0\xb4\xab\x72\x1a\x23\x1c\xa0\xaa\x28\x48\x15\x46\x3e\x8d\xa9\x5c\x23\x82\x39\x16\x68\x2e\x7f\x77\xee\xf7\xae\xe4\x98\x62\x3d\x17\x08\xb7\x93\x89\xf6\xb2\x6a\xf1\xd1\x0c\x79\x17\x1b\xc4\x47\xea\x03\x5d\x19\x13\x0f\xc7\x75\xb0\x68\x0e\xf8\xf2\x97\x78\x7a\xe0\xeb\x81\x93\xe3\x27\xe5\xf3\xba\xd5\xf8\x89\xe7\xe7\x2e\xb7\x98\x2f\xcc\x5a\xa6\x62\xef\xd1\x13\x7f\xf0\xbc\x19\x2a\xa6\xc9\xec\xd0\x5a\x75\xf1\xe1\x3a\xe3\xd3\x93\x38\xc1\xc3\xb8\xcd\xb8\x41\xea\xb3\xb5\x91\xf7\x68\x63\xdc\xf2\xfc\x94\xf4\x95\x88\x1e\x98\xd3\x18\xf2\x67\xc3\x2e\x83\xbf\xb4\x02\xdf\x6c\xf3\xca\xcb\xab\xaa\xfb\xb5\x02\xe1\xd8\x4b\x22\x57\x91\x69\xf2\xac\xcc\x9e\xdd\xb2\xbf\xb1\xa3\x1f\x19\x53\xc3\x42\xba\xe1\xa0\x80\xb5\x74\xcf\x17\x64\x39\x72\xf6\x37\x2f\x6d\x58\x59\xc0\x34\x8d\x7f\x6d\x82\x76\x29\xeb\xae\xc9\x4a\x18\x0c\x18\x39\x6b\xe8\xb8\xf8\xf5\xf8\xb2\xee\xc6\xac\x1d\xdb\x2a\xc7\xf2\xa0\x68\xe4\x77\x44\xbe\x56\x64\xdf\x4c\x8b\x18\x2f\xda\x8d\x36\xdd\xe0\xaa\xc5\xba\xeb\xe8\x7b\x56\xde\xee\x70\x32\x9a\x28\x33\x45\x32\x81\xfe\x66\xb0\x59\x2a\xb2\x94\x51\x05\x17\x50\x7e\x3d\x00\xa9\xd3\x83\x1b\xb1\x8e\xa6\xfa\xaa\x80\x33\x83\x2c\xa8\xc9\x4a\x9c\x54\xb0\xa0\x4b\x03\xab\xb0\x73\x31\xcb\xfe\x10\xec\xb6\xc8\x31\xd9\xb2\x69\x29\x1e\xd2\x06\x53\x2f\x3d\xb0\x3c\x04\xdc\x5a\xfb\x1b\x2b\x5c\x6d\xff\x8d\x06\xa4\x38\xea\xf9\x36\xd8\x6f\x3d\xb5\xc4\x7c\x00\xd4\x57\xb2\x2a\xb3\xc9\xb2\x08\xae\x08\x6d\xb7\x5e\x7e\x4c\x00\x92\x48\x30\x85\x20\x3b\xea\x57\x21\x4c\xdb\xd2\xd8\x6f\xa4\x97\x4a\xf5\xdd\xcd\x70\x5d\xb5\x7d\xd0\x87\x5d\x95\x37\x99\xdb\xc8\x72\xb8\x54\xbb\xc9\xe4\x48\xf9\xff\x40\x22\xfe\x12\x9d\xf2\x53\xc7\x54\x74\x90\xf1\x1c\xcd\x3b\x4d\x8f\x67\xac\xbe\xee\x2e\x5b\x61\x94\x6a\x98\x9f\x66\x57\xaf\xa2\xf3\x3d\xeb\x51\x51\x4c\x43\xe2\xd2\xa7\xe3\x30\x69\x75\x03\xb4\xe5\x8e\xd7\x90\x26\xdc\xf3\x3c\x5d\xe5\x4e\xf1\x6c\x0d\x5f\x85\xa6\x0c\x6b\xf2\x73\x53\x94\x6e\xe7\xeb\xd2\x93\xd6\xa0\x87\x24\xb4\x58\xe2\x2e\xeb\xb2\x4e\x7c\xba\xda\x6e\x4b\x6e\x53\xac\x4d\x69\x83\xe6\xf6\x47\x4c\x5b\x08\xed\x90\x23\xad\x60\xf9\x2c\x61\xf5\x2c\x49\x4a\x56\x41\x5e\xd6\x5c\xe0\x81\x9a\xba\x28\x09\xac\x8a\x31\x88\xeb\xc9\xe7\x08\xc9\x56\x95\xa4\x6b\x8f\x91\x11\x73\xf9\x98\x42\x3c\x0b\xa8\x4b\x31\xe7\xb6\x38\xb7\x8e\x6d\x5e\x2a\x72\xfb\xd6\x28\x31\x76\xf8\xf2\x6e\x6c\x6a\x44\xbc\x3e\xea\x8f\xc5\x72\xf3\x92\xd6\x0e\xa8\x2b\x7c\x16\xcc\xcb\x32\x4f\x22\x58\x1f\x59\xf9\x28\xf3\x49\xfe\xfa\xeb\xcb\xd0\xeb\x80\xbd\xc8\x82\x2d\x03\x68\x37\x48\x5f\x6b\x6f\x31\x33\x08\xb1\x0f\x87\xed\x3c\x03\xc4\xf6\x78\x5d\x77\x5d\x06\x89\xad\xf1\x18\x57\xa3\x65\xf4\x39\x83\xf7\x44\xbc\xfe\xc4\x08\x3f\xf5\xf0\x38\xe0\x81\xc2\xeb\x5f\xb5\x0c\x7c\xfd\xb8\xd6\xba\xd8\xdf\xe0\xa6\x23\xa6\xeb\xb6\xfd\xb0\xb9\x7e\x56\xaf\x44\xcb\xc1\x51\x73\x7a\x1e\x3d\x2a\xe3\x47\x49\xe4\x8b\xee\x50\x49\x2a\x81\xc2\x0a\x35\x20\x0f\xf1\x10\xb4\x76\x58\x4c\x39\x79\x4f\xbb\x08\x74\x59\xaf\xae\x7e\xc7\x6f\xb6\x5b\x48\x5d\x61\x7f\x38\x9d\x8a\xf9\x3a\x57\xb9\x14\x02\x64\x4d\x57\xd9\x4d\x18\x24\xf3\x8b\x52\xf3\xed\x46\x57\xbe\x8f\x54\xe0\x06\x75\x45\x76\x70\x76\xdd\x0c\xb9\xc2\x19\xa9\xe9\x7f\xa6\x1b\x9c\x73\x81\x53\x22\x7e\xc5\x02\x71\xfc\x9c\x36\x15\x93\x4c\x17\xff\x97\x67\xdb\x57\xf7\x6c\xa3\x4d\x86\xef\xd7\x07\x45\x93\x1a\xca\x04\x01\x58\x94\xe4\x93\x82\x82\x9e\x59\xdc\x14\xe1\x37\x11\xb0\x6d\xce\xb0\x93\xc3\x2b\xec\x57\xbe\x9a\x20\x17\x1b\x20\x16\xb6\x07\x33\xdb\x37\xa2\xf0\xe4\xf3\xac\x5d\xe9\xcb\x44\xbf\x1b\xb4\x12\xa2\xfc\x86\x8d\x38\x13\x95\xae\x00\x9e\x02\x11\x98\x69\x4d\x0c\x90\x71\x7d\xde\x6d\x03\x03\x2a\xed\x06\x21\xa7\xa6\x7c\xa9\xb5\xf3\xea\x6f\x48\xd7\x7a\x45\x14\x9b\xf3\x71\xd8\x6b\xd6\x88\x4b\xff\xd3\x0f\x0b\x3a\xcd\xf2\xde\x15\xc7\x0a\xb5\xa7\xe2\x79\x8c\x54\x4c\x75\x76\x1e\x60\x4f\x55\xf8\xa6\x1e\x2b\xa6\xff\x3a\x62\xbe\xfa\x11\x33\x74\x6e\xa8\x3d\x93\x5d\x47\x65\xc3\x2c\xe4\xbf\xc5\x5c\x0a\x69\xbb\x81\x83\xcb\xdb\x31\xf9\xca\x86\xe4\x44\x65\x24\x8a\x4e\xbb\x75\x60\x92\x3e\xb4\xbf\x61\x1d\x57\x24\xc4\x26\xde\x5f\x87\xfc\xe2\xe7\x3a\x41\x95\xc2\x35\xe4\xe3\x58\x25\xc5\xc4\x4e\xd4\x6c\x25\xe9\xed\x95\xdc\x77\xe1\x09\x8b\x45\x4f\x57\x07\xcc\x82\x11\x93\x89\x30\xdb\x7b\x4e\x7f\x85\x05\xd4\x21\x1d\x25\xca\xd9\xe7\x06\xce\xef\xac\xdd\x3e\xdb\x09\x3b\x6b\x2e\x79\x84\x8d\x8c\x61\x81\x35\xef\x34\xfc\xd9\x67\x61\x17\xe6\x7c\xdf\xa1\x79\xce\x08\xe9\xdd\x00\x7b\x2e\x8d\x7e\x9f\x89\xfc\x74\x5a\x9f\x8e\x81\x9b\xd6\xf6\x2d\xb8\x5d\xde\xff\x52\x6e\x97\x8c\x00\xfe\xaf\xbb\xe5\x7f\xdc\xdd\x92\x59\xc5\xf8\x66\xe9\x8a\xc3\x8f\xfe\xbe\xea\xe2\xcb\x29\xa7\x4e\xef\xad\xe0\x2a\x8e\x99\xef\x07\x0e\xa5\x4d\x7c\x94\x0e\x5d\x32\xf9\xc6\x7e\xee\x2b\x86\x8c\xcc\x46\xac\x0c\x39\xc3\x09\xdd\xd4\x02\xd2\xc7\x98\x0c\x15\x0a\x77\xc6\xca\x7e\x55\x2f\x5e\x6a\x74\x25\xa5\xe8\xa9\x22\x3b\xd2\x28\x4d\x0a\xef\x2b\xe7\xa2\x0d\x63\xe7\x34\x0b\xb6\x9d\xcc\xef\xd1\x51\x88\x33\x9a\xab\x18\xac\xb4\x19\x45\x23\x44\xf0\x1f\x4e\x0b\xe4\x23\xe1\x37\x99\x69\x51\x39\x77\xbc\x7b\xef\x4e\xc2\xd0\xb9\x77\x5f\xf6\x77\xc6\xcc\xcc\x21\x97\x68\x5f\xed\x7d\x17\xdb\x60\x83\x5a\xba\xc9\x95\x71\x77\xef\xde\x2b\x71\xdf\x5e\xf0\x50\x74\xd5\x0d\x87\xdf\xfd\x22\xed\xd6\xe7\x79\xab\xdc\xa7\xfc\xe3\xa7\xd9\xc7\x4e\x6d\xf8\x99\x78\x73\xff\x94\x2c\xc8\x72\xbb\x2d\xe1\xff\x4a\xe1\x4e\x89\xb2\x98\x06\x69\x0c\xce\x88\xd6\xa6\xfb\xfb\x3a\x8e\xce\x29\x11\x06\xe0\x64\xc5\x07\x76\x67\x37\x6c\x55\x2a\x58\xa6\x61\xcf\x70\xf8\xee\x40\x37\x5d\xc9\x67\xc9\x85\x7c\x4d\xaa\x13\xfc\x48\xfe\xf3\x61\x80\x20\xd4\x3c\x1b\x0b\xb5\x8a\x84\x5a\x28\x72\xff\xed\x0f\xcf\x9f\x9c\xff\xfe\xe9\x9f\x96\xd5\x6b\x72\x7c\x7c\x5c\x98\x91\xdd\x03\xcd\x56\xe1\xa5\x71\xab\x58\x62\x9a\x1e\xf6\x50\x3f\x57\x8c\x85\xff\x24\x00\x13\x38\x31\x00\x03\xc0\x29\xd8\xdf\x06\xf9\xce\xcb\xc1\xf7\xb2\x66\xf5\x7b\xc2\x9f\xad\xe5\x05\x60\xcb\xc9\xca\xdc\xb4\x03\xa0\x82\x79\x65\xc0\x55\x1a\xdd\x9c\xd7\x07\x4e\x3a\xc7\x73\x63\x9b\x28\xe6\xfc\x5c\x1e\xf5\x15\xb7\x68\x0a\x56\xdf\xec\xf7\xff\xbc\x91\x5c\x12\x27\xcd\x5b\x4e\xdf\xbf\x27\x3c\x7c\xc9\xbd\xac\x81\xe1\x3c\x68\xd6\xaa\x4b\x67\xc7\xb2\x5d\x51\x4d\xbe\x1f\x83\xff\x26\x9b\x24\x36\xf0\xb0\xb8\xe8\x9e\x37\xd5\x2c\x67\xfd\xa7\xdd\x77\xb4\x69\x08\x93\x34\xe4\x67\x38\x1c\x38\x7a\xa3\x19\xd6\x20\x03\x97\x75\x77\x16\xcd\x70\x89\x2c\x18\x81\x5d\xe2\xed\xb6\xe0\x6d\x2b\x74\xc2\xc5\x66\xda\xd5\x1f\x49\x63\xf3\x2b\x85\x78\xe7\xf2\x5f\x49\x54\xb6\x16\x0b\xab\x10\x8e\x20\x4a\x81\x15\x76\x38\xc4\x7e\x53\x65\xe3\x0a\xb4\x8b\xe5\x81\x55\xe8\xd2\xb9\x4a\x72\xb7\x6d\x6f\x1d\xa4\x49\x4c\xac\x4f\x28\x17\x37\x79\x1f\x84\xde\xca\xd2\xcf\xe2\x9e\x9d\xd5\x1f\x0f\x1f\x9d\x2a\x1c\x57\xa1\x0d\x85\x07\xd6\xa1\x4b\xc7\x95\xbc\x22\x9f\x0e\xac\xe0\x15\xf9\x14\x7f\xfc\xc7\x7a\xdd\xaf\xef\x8d\x3e\x87\xb2\x51\x32\x25\x39\x45\x43\xbc\x76\x50\x85\x2d\x9d\x38\x0b\x66\x62\x1a\x1c\x72\x07\xd7\x8e\x40\x47\x3d\x5b\xc5\x70\xa7\xb7\x09\x70\x46\x1c\x67\x25\x45\x3a\xbf\x47\xf3\xa4\x8f\x58\x9f\x91\x73\xff\xc0\xc4\xda\x9d\xc8\x7b\x43\xe4\x9f\xbb\x20\x83\x88\x0f\x7e\x06\x65\xde\x13\xf1\x8c\x92\x75\xd3\x95\xc8\x78\x35\x86\xc7\x0d\xa6\x81\x8f\x0b\x41\x58\x25\x82\xa5\x99\x7c\xaf\x54\xa5\x75\x55\x60\x16\x35\xc2\x9b\x8a\x2c\x6a\xb0\xc6\x17\xb4\x29\x8e\xaa\xaa\x46\x3a\xeb\x59\xa7\xd3\x9d\x59\x03\x63\x61\x9d\xb6\x43\x8a\x2e\x6b\xbc\x41\x2a\xfd\x8d\x4a\x85\xe6\x5c\x3f\xc2\x2f\x5c\x64\x85\xfc\x02\x73\xdd\x87\x3d\x01\x3b\x7e\xb1\x9e\x28\x5f\xbf\x71\xe3\x23\x10\x36\x6d\x60\xb4\x7e\x9e\x86\x1b\x72\x51\x6f\xd6\x62\x2e\x16\xf5\xb2\xda\xa8\x84\x66\xa6\xf9\xe7\x4d\xb9\x41\x3b\x75\x75\x77\xc6\xaa\x19\xfe\x2c\x05\x6e\xfc\xac\xf0\x08\xcd\x85\x33\x69\xfa\x0e\xf8\xf6\x61\x78\x5f\x7b\x25\xd4\x35\xa8\x0d\x95\x39\x83\xb7\x11\xc3\xcd\xb5\x29\xd4\xbd\xf8\x24\xba\x26\xcb\x28\x56\x41\xb5\x94\x6c\x38\x45\x98\xbd\x0e\x5e\x56\x86\x71\x97\x33\x2e\x2e\xe0\x9b\xd8\x5d\xcc\xbb\xe5\x93\xa8\xda\x94\x2f\xa1\x9d\xf2\x5f\xf7\x79\x08\xd8\x4b\x55\x4f\x86\xa0\xcf\x53\x02\x09\x4a\x53\xab\x79\x70\x57\xb3\x67\x6b\xfa\xfe\x52\x3c\xca\xbe\x06\x7e\x43\x89\x2b\x21\x0a\x94\xc7\x4a\xf6\x8d\x20\xc3\xfa\xcc\x70\x78\x2e\xf9\xbf\x62\x70\x1b\xfd\x33\xe0\x21\x4a\x94\xe3\x8f\xe0\xd1\xfe\x9c\xc8\xea\x86\xef\xe9\x6d\x47\x58\x53\x16\x7e\x91\x78\xb5\x24\x63\x90\x11\xec\x55\x7e\x0e\xb9\xd6\x26\x1f\x88\xd6\x7c\x7a\x92\x1a\x30\x64\xa5\x40\x99\xf0\x2b\xc3\x04\x9e\xd5\x5a\x92\xc3\x0c\x13\x84\xd9\x54\xf3\xab\x51\x1f\x44\xcd\x05\x78\x7f\xa7\x0c\x42\x4a\x24\x7a\xb6\x3d\x87\x50\xbb\x09\x4b\x7f\xe6\x71\xe1\x7d\x06\x20\x3e\x91\x1b\x3c\x65\xb4\xbb\x3c\xb8\xd9\x93\x2f\x6c\xf6\x64\x7f\xf6\x63\x3d\x71\xe1\x24\x04\x99\xaa\x30\xf3\x57\x44\x55\x31\x6e\x2f\xf4\xb2\x58\x9d\xb3\x75\x96\x82\xf5\x31\xf1\x4a\xbe\xa7\x88\xd0\x24\xa1\xaa\xd0\x24\x81\x6f\xb5\xd0\x3d\x67\x58\x3b\xa3\xcf\x21\x96\x2d\x49\x09\xe7\xa9\x5b\x1a\xda\x3c\x5e\x93\x9a\x29\x5d\xa3\x94\x12\x71\x38\x26\xde\x7e\x52\xc5\x54\x09\x88\x8f\xc3\xe9\x28\x56\x3a\xa8\x1f\x8f\x15\xad\x8f\x2f\xd6\xf5\xfb\xae\x40\xd9\x64\x7a\xe9\xa2\xc9\x96\xf3\xbb\x24\x4e\x18\xd9\x50\x4e\x56\x62\xad\xb6\x1e\x69\xfa\x20\x38\x8d\x9d\x61\xb1\x1c\x45\xe7\xa6\xef\xca\x96\x78\x7a\x81\x87\x05\x51\x1e\x2c\x90\xc5\x29\x00\x5e\xc3\x2c\x9f\x9a\x5d\x01\x29\x86\xfd\xac\xd7\xeb\x83\xbb\x88\x75\x1a\xf3\x47\xe4\xf8\x18\x00\x4e\x75\xc2\x72\xe1\x41\x21\x2b\xa9\x84\x3d\x10\x16\xf7\xf5\x81\xd5\x44\x4c\xbb\x4b\x7a\x21\x4a\x50\xf3\xca\xef\xb8\x0f\x93\xca\xf7\xcc\x59\x99\xb0\x27\xc7\xc7\xad\xcf\x9e\x8c\x6a\xdd\xfa\x43\x06\x7e\x3a\xd0\x44\x8d\x70\x6d\x3b\xe5\x34\x13\xd1\x2c\x6c\x98\xa3\xcf\x7e\x24\x3f\x29\xe7\x94\xde\x41\xe7\x7f\x55\xd8\x03\x37\x39\xd4\x4b\x65\x91\xb1\xd1\x81\xb1\xc8\x6a\x05\xd3\x44\x96\x55\xbb\x8b\x6f\xd8\xd4\x03\xd0\x74\xa0\xf7\xfa\x70\x57\xa2\x3b\x2e\xce\x57\x97\x64\xf5\xe1\x59\xcb\x5f\xf3\xeb\xcb\x9a\xc5\xf3\x57\x24\x69\xae\x33\xc2\x5d\x4e\xad\x98\xef\x5c\xe4\x68\x5d\xb3\x15\x59\x67\x2a\x19\x10\xe0\xdd\xe8\xd4\xd7\x3d\xb3\x80\x86\x24\xfd\x6c\x6e\x55\x48\x4c\xbf\xbf\x0f\x0e\x85\xdc\x75\xdd\x82\xc2\x0d\xcf\x65\x99\x42\x26\xc6\x42\xb1\x93\xa1\xbd\xbc\x25\x61\x4a\xd9\xc1\x26\x0e\x9c\xc4\xbd\x5a\x90\xb4\x8b\xe7\x2b\x79\x90\x6e\xae\xfb\x86\x16\x77\x73\xa8\x74\x8f\xc1\xb4\xf7\x54\x29\x21\x1e\x2a\xb0\xd6\xe5\x81\x85\x8f\x8f\x85\x0f\x2c\x6c\xae\x3b\x70\x6f\x9c\x4c\x8e\x72\xa0\x7a\x99\xc7\x2a\x39\xa9\x26\xe4\x93\x9d\xd1\x52\xef\x4a\x82\xd0\x61\x0d\x8f\x58\x38\x83\x1e\x9c\xe6\xee\x4e\xce\xaa\x01\x48\xa6\xe5\x6a\x0f\xf1\x5b\x3d\x14\x61\xd4\xe7\xe6\x43\xb5\xa5\xe9\x7e\x70\x50\xef\xb9\x61\x82\x4e\x7b\x83\x46\x39\x05\xdf\xec\x70\xff\xdf\x81\x79\x18\x72\x05\x76\x11\x68\xbd\xea\x74\xaf\x36\x2f\x5e\x2d\x4e\x45\x0f\x60\x57\xf9\x1c\xf2\xd9\xb9\xa3\xf2\x80\x27\xf4\x23\x49\x64\xbd\x50\x42\x32\x61\x41\xa0\xd9\xf5\xbd\xda\x47\x81\xb7\x6a\xcc\xd5\x99\xbc\x83\x26\x34\xe4\xf7\x20\x89\x7b\x41\x30\xc8\x04\x03\xeb\xa0\x17\x27\x52\xe0\xa0\x98\x6a\x5f\xde\x79\xa4\x81\xee\xa1\x84\x83\x0c\x04\x85\xf3\x20\xff\x35\x25\x5d\x19\x4f\xf9\x7b\xe2\xe4\x99\x3f\x86\x86\x1b\xcf\xfe\x97\x8b\x29\x3a\x8d\x1f\x2c\xc8\x72\xee\x95\x4c\xc5\xa5\xd3\xbe\x17\xf2\x4b\x37\xe4\x24\xb8\x34\x92\xd3\xfb\x03\xd1\xb3\xb1\x01\x23\x66\xf3\x01\xb0\x4c\xb6\x44\xd1\x67\xfd\x0b\x32\x21\x87\xf4\x52\xa0\x5d\x7c\xcd\x26\x6a\x8c\xb8\x97\x61\x1a\x4a\xed\x7f\x3d\x99\x08\xe0\x86\x4f\xfb\xbb\x9f\x00\x05\x95\x02\xcd\xc5\x9e\x0f\x22\x78\x8c\xd8\x31\x66\x7e\xa7\xaf\x7b\x46\xda\xb7\xf7\x1d\x70\x82\x0d\x51\xe8\x0b\xbc\xd0\xa1\xe1\xa4\x19\x8b\x76\xdc\x11\x61\x03\x28\x44\x2b\xff\x14\xf2\xcf\x56\xd2\x13\x19\x6b\xa5\xf3\x58\x11\xb6\x16\x52\x02\x54\xe4\x84\x92\xa5\x78\xc0\x23\xc7\x23\xa1\x53\x3c\x67\x68\xb7\x12\x98\x57\x5f\x89\x7e\xb1\x2f\x29\xd3\xe6\x0c\x7c\x0c\xc0\x82\x56\xe0\x5b\x56\x5f\x91\x39\xc1\xed\xba\x81\x6e\x4a\x01\x89\xd3\xf7\x52\x32\x51\xbf\x39\x56\x9e\x0e\x62\x87\x40\x04\x0a\x58\xb0\x20\xa2\x23\xb7\x57\xe5\x24\x5f\x7b\x01\x0b\x24\xb2\x9d\x52\xf6\xbe\xe7\x60\x84\xde\x7a\x45\x8a\xec\xf7\xea\xe0\xe9\xd1\x0a\xb8\x02\xb1\x4e\x80\xb5\xe2\x59\xbb\x61\x7d\xea\x04\xf3\x3a\xfe\xcc\x1d\x75\x3d\x1f\xba\x02\xf1\xa7\x0a\x7b\x6c\x28\x36\xb0\x6f\x39\xab\x98\x3a\x92\x08\xc4\x0c\x5b\x7a\x59\x77\x83\x8d\x99\xe5\xf1\xe1\x99\xbc\x1a\x27\x93\x34\x12\xd1\x0f\x79\xb4\x82\x56\x24\xd3\x80\x94\x3a\xd8\xb0\x8b\x80\x54\x9c\x70\x1a\x5a\x1a\x85\x41\x12\x64\xbc\xd1\xfc\x29\xe0\xd5\x0c\x53\x17\x03\xc9\x1f\x52\x48\x7b\xaf\x81\x70\xc5\x82\x2f\x71\x5d\x11\x90\xd0\x16\xb3\x65\x55\x55\xf5\xe2\x64\x39\x99\xa8\x7d\x3b\x66\x8b\x76\xb9\xfb\xa2\xb0\x4d\xef\x2a\x14\x69\xaf\x5c\x8c\x58\xbc\x88\x98\x57\x71\x1c\x29\xc3\x02\x39\x75\x78\x60\x5b\x6e\x83\x19\xe0\x08\xd7\xd5\x0c\x02\xb3\xf4\x70\xeb\x87\x1d\xa4\x91\x87\xe1\x6e\xaa\x16\xd4\xe2\x8b\xcd\xb2\x5a\x90\xc5\x66\x89\xf9\x62\xb3\x5c\x1a\xb1\x33\x8a\x93\xd2\x7a\x7d\xc8\xec\xdc\x5e\x5d\x51\xd1\x43\xc9\x9f\x6c\x81\x24\x58\x56\xd5\xf0\x84\x36\x70\xf0\xf6\x7c\xff\x8e\xac\xda\x2b\x02\x25\x8a\x83\x35\x7d\xf2\xd3\xfe\xfb\x34\x93\x0f\x63\xcc\xc0\xae\xae\x66\x7d\xc3\x2e\x6b\xd6\xac\x49\x03\xd9\xe5\x21\xe6\x5f\x20\x2c\x4b\x18\xd0\xab\xe4\x10\x88\x72\x02\x24\x38\x07\x83\xec\x4c\x26\xa7\x80\xfa\x2c\xd7\x4c\x2f\x4c\x9a\x0b\x8e\x19\x6e\x27\x86\x2f\x4b\xf9\xd5\x80\xbb\x4a\xd2\x22\x90\x83\x5a\x09\xbf\x4e\x38\x59\xde\xae\xd7\xef\xea\xd5\x87\xfc\x36\x51\x5b\x24\xe2\x3a\x93\xd3\x40\xb9\x2b\x64\x42\x9d\x13\xce\x32\x3e\xe2\x0c\x5b\xea\xd2\x1a\x6b\x6b\x55\x61\x91\xd6\x86\xd5\xe2\x91\x46\xcf\x4a\xd4\x1a\xd8\x52\xab\xa8\xaf\xda\x8f\xc4\x83\xdf\xcc\x2a\xb2\xb5\x69\xb0\xdc\xdb\x30\xf2\x2f\x5f\x39\x7d\xa4\xf9\xb6\x5e\x7d\x28\x20\xab\x3b\xf1\x12\x15\xed\xe1\x94\xe3\x95\x10\xbc\x66\x1d\x95\xfd\x0a\x98\x3b\xa3\xdd\xce\x5c\xc5\x9f\xb4\x0f\x0a\xfc\x5f\x81\x7b\xca\x62\xb6\x44\x3b\xef\x84\x0d\xcc\x82\xbc\x62\xce\x72\x7e\x5c\xdc\xfb\x4d\x71\x4c\x46\x4d\x7b\xcb\xa6\xe4\x33\x15\x93\x89\xfa\x5f\xcb\x77\xac\x62\xda\xe7\x13\x3e\xde\x7d\xba\xa4\x6b\x52\x1e\x31\xc8\x98\xae\x94\x6d\x1a\x2d\xa4\x35\x7f\xd4\xe6\x8f\xce\xfc\xb1\xa9\xce\xc9\x82\x83\x85\x6f\x83\x68\xb5\x51\x82\x53\x87\xdb\x6a\x33\x25\x92\x0b\x94\x27\xec\x46\x75\x6a\x44\xd6\x1d\xb9\x85\xa8\xd4\xb6\x5a\x2c\xa1\x8d\xb5\x1a\x15\x28\xf8\xd4\x89\xb9\x8e\x4f\xcc\x92\x55\x6c\xb1\x5e\xd4\xcb\x25\x52\x55\x4e\x26\xad\xd2\xda\x31\xc9\x90\x43\x83\x93\x09\x35\x8f\x46\xd0\xa1\xea\x56\x75\x64\x4e\xb1\xea\xc6\xbc\xc5\xd0\x89\x39\xdb\xed\x5c\x63\xc9\xf1\x2c\xcf\x65\xd5\x8a\xce\xb8\x71\x61\x8c\x5c\x81\xbd\x87\x1d\xac\x77\x0f\x53\x62\x30\x73\x2f\xd0\xb8\x61\x2a\x1b\x86\x3e\xeb\x86\x0f\x3c\x7f\xa3\x23\xb4\x07\xf6\x25\x64\x94\xd5\x07\x63\x22\x3f\x18\xff\x37\xb0\xc9\xff\x3d\x2e\x34\x8e\x03\x3f\xae\x8a\x96\x8d\x8b\xe3\x33\xc1\x29\x7b\xaf\x7a\x73\x5c\x8c\x81\x3c\x24\x73\x0b\xd3\x38\x2e\x30\x3f\xae\x88\x4f\x6d\xd3\x71\x81\x5d\xb2\xb2\xc9\xa4\x94\x35\x3d\x06\x67\xe7\xf1\x27\x2a\x2e\xc7\x71\x78\x34\x43\xc7\xc5\xb4\x40\x38\xe6\xea\x79\xb2\x6f\xc0\x68\x08\x58\xd9\xf9\x2b\x3e\x06\x27\xc1\xa2\x32\x19\xaa\xb0\x72\x79\x23\x2a\xb1\xd7\x82\x2d\x3d\xb0\x12\xb6\x1c\x9d\x58\x7d\x6b\xec\xc9\x63\x52\xe6\xea\x6d\xae\xa5\xfe\x4c\xde\x17\x93\x3a\x31\x58\x95\x1e\xbb\x67\x04\xb5\x19\x12\x51\x86\x69\x89\x3e\xb7\x0c\x8c\xa6\x2e\x56\x09\x33\x3b\x9a\xbd\x22\x31\x7b\xc5\x74\xc4\xa7\xc0\x72\x5b\xa0\x91\x29\x50\xcd\x76\xb1\x09\x68\xe8\x10\xcd\x19\x4d\xf7\x2b\x86\xc4\x10\x46\x32\x18\x49\x4c\xbe\x3c\x75\xe2\x98\x71\x67\x9d\x9a\x0c\x90\xcc\x80\xc7\x53\xc8\x84\x66\xec\x21\x91\xce\x6e\xb8\x77\xcc\xf5\x2e\xab\x6a\xfb\x0a\x13\xa4\xcf\xf9\x33\x00\x2c\xfc\x87\xcd\xc1\x19\x29\xe5\x04\x24\xe3\xba\x56\xd6\xaf\x01\x74\xc8\xd1\xbe\xda\xed\x89\xe3\x2b\x3f\x18\x1a\x09\x5f\xef\x76\x45\x44\xfd\xac\xe5\xd6\x27\x94\x21\x65\xd5\xb4\x43\x39\x15\xd3\xf3\x6b\x63\x0d\xf4\x33\xb9\x61\x8e\xe6\x42\x0b\xc9\x6c\x59\xf1\xc4\x9e\x96\xf9\xaa\x9f\x3b\x1d\xe8\x12\x48\xfe\x0c\x42\x23\x46\x3e\x66\x15\x53\x98\x55\x6a\x19\x74\x63\xc6\xfb\x43\x9e\xb8\xdc\xa8\x46\xf4\x3b\xe7\x94\xa2\xde\xe6\xbb\x9b\xd3\x4b\xc9\xc3\xdb\x9c\x07\x1c\x92\x17\xea\xa4\x99\x36\xd7\x2b\xad\x66\x0f\xa8\x73\xe6\xa5\xbe\x30\x45\x97\x23\xee\x01\xca\xb4\x92\xa8\x85\x3a\xd1\x5f\xf3\x57\x1b\xb9\x38\xcf\x99\x68\xc3\x83\xac\x95\x8c\xf0\x80\x66\x67\x5f\xd2\xab\xbe\xe1\xe5\x55\x5a\xee\x76\xba\x53\x27\x05\x90\xd3\x1d\xd4\x4f\x49\xaf\x0e\x6b\x28\xab\x90\x2e\x3a\xf8\xc8\x8b\x0f\xd8\x6e\x0b\x06\x15\x78\xcf\x4e\x7b\xf5\xc4\xcf\x5a\xfe\xbc\x51\x89\xfd\xe2\x57\xa7\xf1\x83\x79\x6c\x7d\x4c\x78\x81\x54\x8e\x83\x26\x79\xe2\x28\xab\x1f\x3d\xa1\x8d\x07\xa4\x9c\x6a\xe5\x9e\xe7\xe2\xb2\x88\x51\x36\x50\x9d\x31\x8a\x36\x15\x01\xc5\xe3\x9d\x45\x13\x40\xac\x89\x5d\xf3\x94\x25\x3e\x15\x7a\x94\xbf\x0d\x89\x7c\x82\x53\x3f\x8b\xa0\xd9\xce\xea\xc9\x24\x03\x7e\x6b\xdc\xe4\x8e\x66\xa1\x73\x1c\x49\x4e\x74\x5f\xca\x48\xa6\x35\x76\xfd\x89\x3d\x94\xef\xda\x9b\x93\xb0\x37\x1a\x87\xb3\x47\x62\x8f\x45\x7e\x3f\xe7\xc7\xcf\x63\x8a\xc0\xa4\xca\xd8\x0c\x22\x41\x2c\x48\x45\x17\x58\x25\xd0\xa8\xcf\x12\xd1\x27\x75\x81\x60\xd5\x6b\xbe\x40\xbd\xdf\x05\xa8\xdc\x5a\x53\x6a\x14\x20\xfd\xfa\x0b\x4c\xee\x6c\xe3\xa8\x1b\x45\xa5\x2f\x49\xd7\xd5\xef\xc9\xdb\xb6\x4f\x75\x1d\xf9\xa5\x79\xd1\x9c\xb8\x00\x2a\xea\x0a\x04\x19\xd5\x33\xba\x00\xc5\x8c\xf8\xed\xc0\xd9\x9a\x69\xe9\xd0\x76\x54\x8d\x89\x1c\x0a\x5c\x8d\xdf\x4e\x70\x90\x1c\x56\xb5\xcd\x73\x1c\x69\x30\xa1\xda\x03\x3c\xf6\xf2\xd5\x82\x59\x56\x5d\x67\x05\x8a\x35\x95\x6e\x4b\x3c\x67\x1f\xa5\x24\x5f\x8b\x9c\x93\x98\xd6\x65\x80\xdc\x26\xc5\x15\x82\x92\x74\xa4\x96\xa9\xef\x5f\x57\xe0\x97\xa5\x20\x1c\xea\xc7\xea\x2b\xa2\x1b\x2f\xac\xc3\x41\xfd\x91\xfc\x28\x0f\x00\xc9\x18\x41\x34\x53\x4f\xaf\x7b\xce\x39\xbf\x6e\xad\x19\xb1\x1b\xce\x3a\x29\x1d\xd4\x54\xfc\x3e\xd5\xf3\xa4\x0a\x9c\xcc\x66\x54\x10\xbf\x46\xcb\xe1\x19\xc0\x33\xba\x53\x10\xad\xfc\x68\x22\x67\xa5\x5a\x90\x05\x5b\x2e\xe5\x49\xa5\xfe\xea\xd5\xb3\xaa\xd7\xe6\x4e\xef\xd9\xe5\x89\x53\x84\x3d\x70\x32\x24\xb0\x58\xaa\x34\xcf\x16\xa2\xcc\xa2\x9e\xa6\x0a\x8d\x48\x6f\xdd\x55\xb5\x91\x21\x37\xd5\x80\x3e\x0c\xaf\x7d\x42\xdb\x4c\x26\xe5\x3a\x99\x1f\x29\x7b\x66\xc3\x90\xfc\x93\x8e\xe1\x83\x0e\x48\x5e\xcd\x1e\xf0\x87\x1d\x88\x74\xb4\x22\x8b\xb6\xaa\x17\x7c\xb9\xc4\x10\x4b\xb7\xf1\xa0\x38\xd7\x8b\x76\xb9\xdd\x6a\x41\xbb\x7b\xfa\xb7\x4d\xbd\x2e\xd9\xa2\x5d\x62\x8a\xb6\x5b\xed\xed\xd4\x3a\xef\xdb\x48\xd2\x6e\x15\x53\x94\xc1\x49\x79\xa8\x0c\x66\xee\xfa\x38\x2e\xe6\xfa\x11\x6d\x8e\x8b\xdf\x14\xf1\x61\xa6\xc3\x58\x42\x53\x7c\xc4\x80\xbb\x40\x18\x29\x8f\x79\xf0\xb9\x59\x47\x74\x75\x7a\xa0\x91\xe7\x01\x5e\x55\x15\x39\x65\xc0\x1d\x7f\xf4\x7d\x9c\x95\xaf\x13\x47\x73\x9f\x77\x27\x10\xc3\x29\xcb\xbe\xcf\x95\xb5\xfe\xae\x5e\x9f\x2a\xe6\x01\xcc\xbe\xf3\x90\xbb\x9c\xe8\x30\x0c\x5a\xe5\xca\x19\xa7\x30\x3f\x92\xc8\xbb\xc4\xc3\xdc\x98\xce\xa3\x1a\x1d\x8e\x90\xe5\x43\x62\x61\x1f\x60\xcc\xc6\x14\xf5\x7d\x1e\x38\x9e\x45\xdf\x78\x29\x32\xa3\xf8\x24\xf2\x69\x7c\x93\x4c\x24\x42\xf9\x70\x26\x87\x56\xe6\x47\x45\x1d\xd4\xa1\xe0\x0b\x17\x9f\x15\x46\x57\x91\x4f\xe3\xdf\xa3\x5c\xe0\x95\x37\x17\x66\x61\x0f\x9c\x06\x53\xdc\x9b\x01\x1b\xb7\x95\xd9\xd7\x28\x89\xee\x72\x63\x8e\x15\x39\x87\x8d\x3b\xfe\xca\x8b\x4d\x8b\xf5\x4a\x8b\x25\xea\x0b\x49\x3b\x08\x27\x2e\xdb\xbe\x6f\x5c\x4c\x2d\x8a\x43\x73\xe0\x15\xdb\xe1\xce\x6f\xca\x5c\x7b\x41\x4d\x01\x75\x78\x3b\xfe\x50\xf2\xf0\x3e\xf1\xe9\x23\xd0\x8d\x90\x4f\xe3\x0b\x2d\xf8\xa0\x6c\x58\x9d\xeb\x43\x7a\x00\x1f\xd6\x91\xf4\x3b\xd7\x9b\xcc\xbd\x36\x34\x7f\x69\xf1\xde\x79\xcc\xd4\xec\xcd\x67\x03\x76\xf8\x83\xa8\x4d\x45\xb9\x7b\xbf\x06\x7b\x28\x0b\xf4\xf6\x09\xbe\xf6\x7a\x91\xd5\x57\x1d\x38\xa9\xb9\x4f\xbd\x79\xcd\x6a\xc2\x06\xa7\x36\xf7\x85\xed\xaa\xef\x2b\x38\x0c\x47\xe8\x0a\xda\x8f\xad\x20\xd8\xf3\xe9\x51\x10\x2b\xe6\x40\xc7\x5f\xfe\x22\x83\xb7\xdf\xee\x4b\x57\x90\x46\x16\xd3\xe6\x6d\xab\xb4\x33\xfd\x30\xdd\x57\xca\xe5\x74\xb1\x34\xbf\x89\xa8\x5d\x6c\x4d\x26\x0c\x36\x4e\x03\x10\x81\xc9\xe9\x16\x13\xa7\xb2\xc1\xbc\x07\x03\xdf\x75\x44\xe4\x4c\xc9\xc1\x17\x95\x48\x04\xd0\xf8\x1b\x67\xc5\xb4\xdf\x89\x65\x45\xc2\x59\xb0\x70\x73\x19\x49\x33\xaa\x50\xfb\x59\xa4\x75\x06\x89\xe3\x75\xb5\x94\x35\xe4\xf3\x6b\xc9\x63\x3f\xb8\x77\xa2\xcc\x3d\xc1\xfb\xee\x1a\xd0\xaa\x19\x8e\x03\x4d\x74\x88\x59\x6e\xe6\xa0\xa2\x9e\x56\x32\x02\x6c\x9f\x4f\xb1\xfa\x76\x14\xd1\xc2\xa8\xc7\x8f\x57\xc8\x4d\x04\xae\xc3\xbe\x9b\x7e\x69\xd4\xa0\x21\xed\xe0\x97\x1e\x07\xa8\xc5\xd4\xfd\xdc\x9f\x31\x4a\xb9\x3c\xf0\xca\xd1\xfe\x80\x2f\xdd\x27\xba\x1f\x7b\x3e\xd2\xa5\x1c\xab\x69\xba\x9f\x3b\x0f\x87\x19\x4b\xcf\xe1\x4e\xb9\xda\x05\xca\xd1\x97\xf5\x35\xe8\xc6\xc7\x14\x10\x8d\x25\x3b\x4e\xf8\xb8\xfe\x58\xd3\xb5\x3c\x42\x0a\xe4\xce\xb6\xc7\x7d\xbb\xdc\xd0\xfd\x55\x7d\x7d\x68\xaa\x11\x4e\x04\xa7\x24\x1b\x1b\x66\xeb\x5a\x10\x1b\x23\x13\xb9\x4c\xfa\x45\x80\x1f\x78\x2b\x8f\x9a\xd4\x43\x2e\xa6\xae\xd8\x2a\x77\x55\x5f\xe7\x1c\x9e\xd2\xc3\x99\x2c\xe4\xc1\xbc\xb4\x66\xa4\x5d\x04\x53\xfb\xbd\x05\x63\xc0\x14\xb7\x1e\x58\x0e\x6b\xf9\x95\x0e\x0d\xe9\xae\x5b\xd6\x91\xd2\x95\x72\xe0\x13\x6f\x48\xa4\x46\xf7\xc0\x88\x93\x29\x80\x33\xbe\x8a\xf1\x8a\x19\x32\x51\x27\xea\xfd\x2d\xf9\x2c\x78\xbd\xf2\xef\x74\xd5\x82\x95\x82\x76\x08\x73\x40\x9a\x78\xf5\x4b\xbc\xb3\xdc\xda\xfd\x55\x0f\x94\x78\xb2\xb7\x41\x0a\x72\x74\x67\xa0\x83\xd4\x1f\x06\x3f\x08\x27\x05\xc2\x5a\xce\xaf\x6b\x2e\x68\xbd\x7e\x62\x3e\xf6\x1f\x44\xef\x41\x9d\xe9\x7d\x2b\xb7\x7c\xd0\x03\xf5\xa0\x54\x7f\xe8\x02\xf1\x47\x6b\xca\x3e\x74\xc1\x57\xfa\x49\xa9\xff\x32\x65\x14\xc8\xc8\xf3\x3d\x5b\x5a\x4e\xde\xc1\xe9\x83\xde\x27\xd7\xa1\x77\xdf\x40\x4d\x41\xfc\x3a\x5b\x90\x25\xf2\x3c\xc9\x16\x62\xcf\xf5\x1a\x99\x99\xa0\x46\x4c\x2b\x2e\xcf\x09\x3b\x60\x0a\x70\xe9\xf2\x59\x9e\x75\xa4\x4a\x17\x90\x89\x71\xdd\xd7\xf7\xa0\xe3\x9e\x37\xa3\xe9\xb9\x3c\x22\x9f\xec\x63\x84\xa4\xa0\xf2\x9c\x5d\xb4\x86\x0f\x5a\x5f\x76\xe7\xd7\x3a\x0f\x10\x9c\x64\xcf\xf5\x0b\xee\xbf\x20\x60\x55\xbd\x58\x93\xcf\xf4\xa3\xb6\x49\xf9\x1f\xce\xfd\x0f\x0d\xc8\x8a\xc9\x2e\x54\x2d\x96\x87\x2c\x96\x77\x34\xa8\x6a\xc0\x67\xf6\x8d\xaa\xab\x74\x41\x20\x2f\xbe\x3b\x03\x3b\x70\xda\x0b\x6d\x22\x16\xda\x6e\xca\x73\xaf\x52\x8f\xde\xa8\x13\x16\xcd\x26\x1e\x86\xe2\x7f\x16\xba\xd0\x12\xe5\xe2\xf9\xf2\x1e\x84\x5f\x30\x12\xb5\xb6\x7d\x83\xf1\xde\x46\xca\x4c\xa8\x74\x38\x26\x41\x2e\x3e\x18\xa4\x69\x77\x46\xd6\x17\x5a\xab\x22\xcf\x80\x91\x87\xa9\x55\x0a\xb0\x50\xcb\x4e\xf9\x92\x2d\xe8\x91\x26\x93\x12\xca\xf0\xed\x96\xd8\x52\xef\xea\x8e\xbc\x34\x4c\xf6\x76\xab\x58\x39\x78\x63\x59\x6f\x9f\x0b\x4b\x3b\xfe\xfd\x57\xed\x38\x3f\xa8\xe3\xbc\xb7\xe3\xfc\xd0\x8e\xfb\x6b\x1b\xb9\xe4\xcc\x5c\xea\xdb\x88\x94\xb4\xd9\x3d\xe6\x06\xe2\x62\x9a\xf5\x9d\xe5\xf7\x95\x35\xde\x0f\xc7\x93\x2d\x66\x4b\xcc\xd5\x5f\x27\x4b\x4c\xd5\x5f\xdf\x2c\x71\xab\xfe\xfa\xb7\x25\xae\xab\x5b\x79\x75\xcc\x6f\x69\x33\xe7\x58\x0e\x6b\xce\x76\x3b\xdf\x31\x4f\xff\x61\x14\xd5\x78\x15\xb8\x79\x6a\x52\x66\x98\xa2\xd3\x52\x6b\x22\x93\x7d\x29\x37\x96\xd1\x83\xfb\x2f\xb1\x56\x76\xfb\x04\x8e\x57\x66\xd5\x2f\xbb\x10\xcf\xe2\x65\xcd\x6e\xd0\xdc\x34\x92\xec\x70\xbf\x11\x9e\x69\x64\x9d\x6b\x64\x9d\x6d\x44\x65\xc1\x33\x96\x86\xee\x65\x2d\x56\x97\x94\xbd\xf7\x72\x49\xb6\x93\x49\x0b\x77\x2e\xee\x26\x93\xce\xc0\xf9\x99\x33\xba\x35\xf7\xf5\x85\x71\x50\x36\x49\xa4\x95\x4f\x10\xc7\x1d\x96\xd7\xc1\x5f\x49\xd9\xe1\x16\x61\x70\x77\x94\x03\x90\x3f\xec\x37\xd7\xed\xf5\x66\x0d\x8e\x12\xea\xab\x16\xd7\x78\x8d\x57\x71\x24\x60\xb6\x83\xf9\x30\x38\x32\x99\x88\xc9\x44\x65\x59\x83\xeb\x59\xfe\xa1\xc0\x7f\x55\x42\xb6\x66\x32\x39\x02\x75\xe7\x94\x76\xc6\xf3\x2d\x79\x94\x1c\x3c\x51\x47\x33\x87\x2a\x98\x82\x60\x92\xe8\x45\x19\x35\xa0\x9e\x23\x17\x9a\x3d\x7b\x40\x1f\xaa\xa7\x8e\xaa\xa9\x71\x49\x51\x2f\x16\x74\xa9\xc9\xaf\x6e\x9a\xb7\xad\x99\x21\x81\x5b\x68\x0f\xb0\x4d\x74\xac\xb6\xfa\x20\x5f\xba\x56\xa5\xe3\x18\x75\xaf\x50\x66\x2c\x3a\xd7\x52\x70\x32\x99\x7e\xa9\xf4\x7b\xfe\x7d\xb9\xdd\x1e\xb5\xdb\x6d\x3b\xa5\xcd\x91\x9a\x61\x13\x43\xae\x82\x47\x85\x46\x46\x97\x2f\xe4\xc7\x30\x41\xba\x91\xae\xaa\x55\xa5\xdd\xa9\x11\xc0\xd5\x5c\xcd\xcb\x3a\x64\xe5\xc2\x9f\xdb\xed\x62\x89\xc3\x47\xc1\xe7\x6a\x7a\x24\xe7\x59\x2b\xdc\x8a\x2e\xec\x08\x26\x08\x5c\x6c\xc7\xfc\x34\x7d\x77\xeb\x57\x3b\x5f\xa8\x2a\x97\x3b\x34\xcf\x55\x13\xcf\x6c\xb0\x0b\xfa\xb8\xab\xc9\x44\x71\xb3\x98\xaa\xbf\xfd\x06\x71\x2b\xcf\x6f\x2a\x67\xaa\x4d\x49\xa9\x75\x54\x54\x57\xb3\x07\xf5\xc3\xd6\x11\x50\x6d\xe6\x14\x22\x26\xfc\x4d\xe9\x3b\xeb\x11\xdc\x61\x86\x3c\x68\x9c\x6c\x19\x9e\x38\xfa\xa7\xc5\x7a\x46\x97\xae\xba\xe4\x21\x27\x13\xae\x86\xdc\xaa\xbf\xfd\x21\x3f\x28\xe9\x76\xdb\xca\xeb\x2b\x1c\x2c\x45\xa7\xea\xa3\x8a\x4e\x2f\xe8\x5a\x10\x1e\xf8\xe6\xd9\x58\x5a\x20\x3c\xb2\x43\xf3\x78\xae\x4e\xc3\x76\xaa\xf6\xb0\x6a\x74\xa3\x3a\x95\xf5\x2b\x4f\x93\x91\x3f\x4c\x07\x53\xc9\xe8\xfd\x93\xb0\x1a\x2f\x89\xa8\x47\x61\xa0\x12\x99\x4c\x02\x23\x1c\x38\xd0\x79\xfa\xfe\x2f\x6e\x3b\xe6\x16\x0e\x6f\xdb\xa8\x26\x5e\xec\xe5\xbb\x83\xe4\x27\xe7\xab\x7a\x75\xd9\x93\x06\x4e\x1b\x6e\x81\x84\x5e\x40\x36\x97\xc7\x50\x58\xf1\xd8\x87\xb2\xd2\xbe\xe9\xf3\x7d\x08\x0b\x65\x18\x08\xc9\x7c\xe2\xa3\x13\x97\x79\x44\xd2\x9d\x66\x94\x13\xf2\xce\xb0\xca\x7e\x23\x23\x16\x06\x8d\xb1\x8c\x43\xa7\x3d\xc0\xf9\x50\x97\x28\x3e\x9a\xa1\x51\x6b\x3d\xf3\x65\x53\x14\xb3\x05\x4d\x9d\x4c\x33\x4c\xb7\xcf\x35\x5a\x0c\xb2\xc8\x2c\x6a\xdd\x8a\x20\xed\x69\x5f\x32\xd5\xa4\xfb\x1c\xdb\x01\xb0\x3d\x03\x38\xd1\x03\x50\x1d\x54\x43\x48\x01\x5b\x7a\xaa\x18\x5a\xca\xe8\x13\x49\xbc\x30\x6a\x93\x84\xe9\xa8\xaa\xa2\xeb\x09\x08\x6d\xc1\x61\x7b\x7d\x20\x37\x46\xa1\x75\x44\x27\x13\x66\x63\x48\x4d\x82\xda\xec\x88\x38\x9a\xd3\x5d\x06\xc0\x2e\xec\xc6\x00\xef\x9e\xd2\x72\xb8\x32\x98\xea\x33\xd1\x8c\xc4\x32\x51\x26\x8b\xed\x98\xda\x3c\xb6\xde\x2a\xe2\xda\x73\x0d\x6e\x7b\xd6\x11\xae\xe3\x7a\x7a\x59\x77\xa5\x40\x56\xda\x87\x8b\x0a\xa6\x17\xf6\x1c\x64\xb0\x35\xf7\xad\x72\x0d\xb0\x5c\xef\x68\x53\x75\x26\x85\xad\x4d\x5c\x6b\x9f\x98\xc0\xff\x53\xf9\x62\xde\x06\x79\x6b\x31\x47\x3a\x30\xc5\x0e\xc8\xab\x09\x24\x11\x57\xcf\x75\xbb\xbe\xb9\x6a\xf9\xf5\x25\x5d\xe1\x55\xa5\x44\x7e\xe8\xfb\x46\x4d\xe6\x45\x75\xab\x97\x70\xae\xfd\x25\x70\x28\x5c\xcd\x17\x64\x89\x13\x49\x6c\x4e\x70\x4e\x86\x9b\x8b\xe4\xb1\x3c\xf3\xe6\x1d\x3c\xa6\xdd\x1b\xd7\x9b\xf9\x1a\x73\xdd\x70\x51\x60\x1e\xb5\xb9\xc4\x89\x0c\x35\x5f\xe1\x9c\xf4\x65\xbe\x4e\xda\x04\xcf\x3b\x9e\x34\x7b\x74\x82\x2f\xeb\x4e\x5f\xa5\xf2\x57\x22\xf6\xa9\x87\x96\xcd\x9a\x1f\x9d\xec\x46\xc9\x02\x5f\x20\x7c\x01\x9a\xa6\xcb\x6a\x03\x89\x83\xf1\xb5\x47\x35\x9b\xbd\xf9\x94\x2f\x11\x6e\x2a\xa5\xa1\xc6\x57\x95\xe4\x91\x57\x72\x59\x0c\xc9\x36\x58\xa0\xed\x56\xfd\xbd\xc2\x97\x86\xc2\x4a\x9a\x0a\xc5\x55\x55\x35\xa7\x34\x12\x89\xe7\x34\x12\x35\x91\x4d\x3a\xe1\xc6\x40\x11\x56\x1b\xe0\xc6\x11\x41\x73\x17\x22\x68\xbe\x22\x11\xac\xa0\xe1\xcb\x9f\x42\x09\x97\x79\x42\xb8\xce\x50\x81\xdd\x39\xd7\xd1\xce\xb9\xce\xee\x1c\x9f\x62\x66\x19\x8a\xb9\x0a\x08\xe6\x6a\x32\x11\x55\x55\x5d\x46\x64\xd3\x60\x81\x6f\xfc\xf9\xb7\x3f\x56\xf8\x52\xfe\xb8\x89\xa5\xaf\xc1\x03\x34\xe7\x08\x6d\x8e\x63\xcc\x2a\x32\xd5\x33\x6b\x0f\x45\x75\x64\x6b\x2f\x26\x05\x70\xee\xc6\xa5\x87\xaf\xbe\x0a\xe6\xca\x53\xc3\x96\x61\x55\x6c\x89\xc2\x54\x97\xa6\x85\x8a\x63\x3e\x4a\x6f\x0b\xa1\x6c\x1a\x4f\x20\x9c\x2e\x00\x5a\xf7\xfb\x51\x86\x4d\x54\x92\x4a\x63\xb3\xc4\xb3\xc8\x2c\xa1\xf8\x72\xb5\xff\x1e\x95\xb4\x1f\xe3\x3f\xca\x16\xd9\x9a\xdc\x9a\x3b\x84\x70\x57\x09\x77\x0d\x30\x40\x06\x85\x64\x53\x10\x39\x21\x70\x87\x39\xae\x11\x5e\x2b\x44\xb9\xef\x54\x80\x9a\x8e\x2b\xf8\x5f\xa6\xdc\xb8\xbd\x18\xff\xba\x38\x66\xc7\xc5\xaf\x0b\x77\xe5\x54\x55\xb5\x41\x89\xb9\x4a\xfb\x5d\xda\x36\xc6\xaa\x97\xa4\x19\x6f\x98\xce\xae\x89\x61\x62\xc7\x9f\xea\x6e\xfc\x91\xf0\x9b\xf1\x9a\x7e\x20\xeb\x9b\x71\x3d\xbe\xa2\x9d\xa8\x3f\x10\x9b\xa2\xa3\xdc\x54\x84\x94\x1b\x2c\xa4\xf0\x1f\x81\xcf\xd9\x9b\xfb\x7b\x52\xbe\x01\xb7\x51\xcc\x10\x56\x03\x82\x43\xb2\x30\x3d\x28\x1c\x26\xe1\xf4\x1c\xce\x0b\x8a\x76\xba\x8c\x1c\xf4\x53\x65\x7a\x19\x6b\x5d\x87\x42\xd2\x63\x9e\xbd\xe7\xef\xde\xba\xd8\x48\x8f\x60\x52\xeb\x4a\x4c\xaf\x09\xf9\xf0\x68\xbd\x96\x3f\xe5\xc5\x78\x1e\x2d\x0a\x95\x53\x9f\xe2\xf1\x59\x84\xfb\x5e\x70\x3d\xb5\x5c\xb2\x66\x29\xad\x73\xdc\xa1\x5d\x3a\x3f\x7d\xab\xf7\x68\xbd\x56\xe3\x69\x0f\x9e\xc0\x36\x98\xc0\x47\xeb\x75\x6e\xfe\xb0\x98\x9e\x37\xb4\xf9\x01\xdc\xbc\xf5\xa8\xeb\x3d\x93\x6a\xfa\xf3\xab\x5b\x7b\x12\xee\x0a\x6f\x9a\xbf\xf3\x51\xe0\x15\xeb\x40\xb6\xdb\x42\xfb\x1a\x4a\x8e\x21\x8d\x02\x39\x95\x37\xe5\x31\x71\x95\x7c\xeb\x65\xa0\xcc\x62\xce\x1b\xfb\x98\x72\x51\x86\xc0\x44\x02\x16\x31\xe3\x98\x29\xdf\xfe\xf0\x4b\xb4\xb1\xe1\xbf\x0d\x8e\x5a\x8d\x38\x49\x47\xff\x4d\x36\x1d\xfd\x37\x7e\x3a\xfa\x6f\xbc\x74\xf4\x9d\xde\x0f\x19\x04\x76\x90\xb3\xad\xa5\x45\x05\x4b\x92\xd0\x35\xdd\x80\xdb\x42\xce\x47\xfb\x3d\x18\xd8\x44\x36\xd7\x3b\x1b\xcc\xf5\xce\xcc\x5f\x39\x39\xd1\xf5\x34\xef\x29\x65\xf5\xd5\xb6\xe0\x69\xf4\x7b\x5e\xc6\x63\x4e\x86\x3b\x3d\x97\x07\x9e\xcb\xf3\x8b\xa3\x2f\xd0\x0e\xff\xe0\x69\x0c\xf6\xba\xa2\xc2\xd4\x58\x37\x04\x98\xa7\xb4\x4d\x98\x52\xa8\x0a\x79\xfe\x02\x3f\x12\x73\xd5\xc8\x42\x90\x43\x60\x4a\x3e\x0b\xc2\x9a\x52\x07\x09\x7f\x24\x4c\x90\x06\xdf\xca\x1b\x7c\x9e\x84\x5d\x42\xca\x25\x13\xf4\x2a\x05\x4a\x97\xe9\xd4\x84\x8a\x88\xb2\x58\xb5\x4c\x10\x26\x74\x3e\x03\xfd\x6b\xbb\xf5\xa4\x79\x0b\xea\x1e\xfc\x82\x3d\xa3\x9f\xc0\xa9\xe3\x03\xec\x29\x6d\x81\xfb\x53\xd5\xa7\xe7\x72\xa3\x4b\xeb\x03\x57\x7b\x94\x70\x72\xbd\xae\x57\x64\xd0\xf3\xe2\xed\x25\x19\x73\xd2\x6d\xd6\x42\x1e\x5f\xf5\xb8\x23\xfc\x23\xe1\xe3\xbf\x6d\xe4\xa5\x55\x5e\xb4\x7c\x5c\xaf\xd7\xe3\xd4\x3f\x7b\x0c\x16\x48\x34\xa6\xdd\x98\x5e\x5d\x6d\x60\x13\x4f\xc7\x6f\xdb\xf1\x55\xdb\xd0\x8b\x9b\xb1\x1e\x75\x87\xc7\x9b\x8e\x8c\x6d\xde\x96\x02\xed\x94\x3d\x41\x4d\xb7\x4e\x46\xd3\x94\x85\xad\xba\xc0\x43\x1e\xc8\xb2\x84\x1f\x01\xd7\xe7\xd9\xac\xe3\x9e\xa6\x9c\xd4\xcd\x6b\xb6\xbe\x29\x11\x56\xd9\x77\x1e\x89\xc7\xaa\x67\xf3\x94\x09\x8b\xd1\x24\xcc\x3a\xa2\xa9\xf9\xd6\xb1\x3f\x63\x50\x43\xfa\x19\x93\xb1\x8a\x07\xca\x6b\x96\x24\x47\x91\x82\x55\x98\x45\x2e\x22\x6e\x2c\x5a\xce\x91\x23\x2d\xef\x1b\xd0\x8a\xf8\xfe\x29\xaa\xfd\x32\x8b\x23\x4b\xf2\x34\x82\x49\x0e\xad\x70\xbb\x8d\x1f\x93\x46\x3d\x4d\xfb\x70\xe2\x6e\xea\x7c\xe7\xe5\xa1\xb5\xc3\xe7\xe9\xe4\xa4\x18\xca\x96\x07\x08\xd6\x12\xdf\xaa\x40\xcf\xf9\xd1\x6c\x87\x76\x18\x6e\xe7\x30\x4c\x74\xde\x1f\xbd\xe4\x2f\xa2\xfc\x50\x5d\x31\x0a\x3e\xc3\x6a\x9e\xbf\xa0\x2e\xf5\xa9\x5f\x5b\x57\x7f\xec\x59\x7b\xac\xc1\xa5\xbd\x48\x31\x1f\x62\xda\x1b\x29\xcb\x31\x4f\x26\x13\xdb\x94\xb2\x8f\xed\x07\x52\x16\xf2\x5b\x79\x4d\xf4\x73\x53\x3e\x93\x92\xb4\xaa\x0b\x79\xcf\x1d\xf3\x53\x1b\x46\xe2\x56\xc3\x56\xcf\x21\x49\xe1\x79\x43\xbb\xae\x5d\xd1\x5a\x10\x9d\x12\x46\x7d\xdd\xf5\x10\xbb\xd1\x4c\x95\xde\x8c\xf5\xc7\xcb\x8b\xc8\xa9\x7e\xc4\x26\x13\x66\x4d\xda\xa0\x25\x3b\xdf\x30\x93\x64\x5a\x76\x40\x47\x9e\x26\xe7\xf3\x95\x8e\x48\x75\xa5\xbd\x51\x9a\xb8\xd4\x4f\x74\x6d\xe0\x28\xd3\x03\x3e\xdb\x8e\xbd\xb2\xfa\xa6\xa1\x34\x71\x37\x5d\x42\x2a\xd8\x0f\xcb\x71\xaf\x8d\x83\xdf\xcc\xde\x86\xfd\x37\xcb\x0e\x47\x7c\xf6\x3c\x23\x20\xc9\x23\xfd\x6f\x1a\x58\xcd\x4d\xbf\xe4\x1a\x0a\x04\x48\x69\xc1\x25\x9c\xd9\x87\xfd\xb4\x7e\xa8\x48\x26\x57\x6a\x87\xf0\x1f\x49\xf5\x23\x31\xb7\x6a\xfe\x1e\xcd\xdc\x92\x21\xb5\x98\x20\xa3\x47\x16\x94\x67\xff\xd5\x0b\x57\x56\xe5\xfe\xf4\x2f\x48\xe5\x67\xe4\xfe\x54\xef\xbe\xc6\x0d\x09\x68\x26\xf1\xe5\x18\x5d\x8b\x05\xca\x1e\x80\x6a\xc3\xc4\xf3\x0e\x47\xa1\xdc\xde\xc9\x1b\x68\xd1\xed\x55\x32\x3d\x87\x27\x49\xe4\x2d\xd6\x84\x7e\x1e\x47\xab\x77\xf3\x8c\x6b\x70\xb4\x4d\x3b\x22\xdc\xa9\x66\x79\x9a\x30\xd2\x58\x71\x2b\x4a\x9f\x62\xae\x82\xf9\xd1\x09\x96\xd4\x36\xff\x96\x68\x77\x30\x84\x61\xaa\xd5\x03\xed\xe0\xa5\x6b\x34\xfb\xf4\xbc\x36\xfb\xe9\x47\x2a\x2e\xfd\xbd\xaa\xe3\x7d\x3c\x80\xe6\x96\xad\x34\x79\x17\x1a\x95\xa4\xc0\x45\x43\x1b\xd9\x99\x02\x08\xef\x4f\x24\x8b\x56\x8d\x7f\xbb\xcf\x12\xa3\x0d\x31\x5e\xa0\x51\x04\x6c\x7b\x92\xe0\x18\x3b\xdc\xe3\x35\x04\x43\x7b\xd1\x42\xfd\x26\x1c\xed\xae\x31\x50\x42\x33\xf2\x6f\xb4\xed\xbc\x09\x2a\xce\x7b\x4d\x45\xd1\xf7\x69\x0c\x68\x1c\xc0\xdd\x07\xe5\x05\xf5\xfc\x58\x27\xe9\x86\xee\x58\x4f\xbe\x58\x56\xe5\x65\x69\x16\xf4\x5a\x64\x5f\x32\x2e\xe0\x62\xf6\xe5\xeb\x9a\x05\x1e\xe5\xba\x34\x20\xf1\x94\x0c\xd4\x58\x0b\xb1\xdc\x6e\x17\x4b\xab\x55\x9d\x4c\xfe\x44\x3c\x40\xf3\x1a\x7a\xd9\x69\x40\x73\xe1\xbc\xb5\x12\xbb\xb5\xef\xe7\x13\xc1\x56\xb4\xdc\xe9\x78\xc3\x2d\xe7\xc4\xea\xc5\x52\xc7\x5d\x3a\xd0\x42\x23\x5b\x53\x00\x2c\x1c\xd1\x43\xb2\x93\xd1\xde\x44\x5b\x25\x92\xd7\xa8\xd1\x05\x69\x8d\x4e\x96\x64\x17\x64\x39\x6a\xb5\x93\xbd\x3a\xa6\x5e\x84\x25\xca\x16\x90\xf3\x3c\x74\x32\x7f\x39\x87\xbc\xdf\xdd\x78\xc9\x42\x2c\xc1\x59\x2b\xb8\xeb\x55\xae\x00\xe5\xde\xc1\x7d\xb0\x11\xbe\xa0\xcb\x69\x96\x43\x2b\x17\x6c\x89\x46\x71\x3d\xd6\x0d\xba\x4c\xcc\xf0\xb0\x50\x7d\x1e\xfd\x86\x42\xec\x20\x1c\xc4\xea\xd0\x76\x25\x48\x24\x8e\x7c\xfd\x44\x60\x02\xbe\x73\x98\x1b\xd1\x54\xe7\x7d\x74\x06\x89\x68\xb1\xdc\x83\xd6\x82\xeb\xaa\x1d\x20\x13\x80\x2a\x0b\x39\xb0\x1a\xbc\x53\x4c\x5a\xb4\xed\x16\x22\x95\x4b\x82\xb6\xdb\x92\x99\x30\x5f\x0c\x21\xee\xe0\xe4\x5e\x83\x2e\xc7\x3d\xb7\xbc\x1b\xda\xf9\x44\x43\xa6\x19\xe6\xbd\x64\x68\xc4\xc3\x42\xd9\x55\xe7\x56\x21\x68\xaa\xdc\x6e\xcd\x77\xe8\x37\xb3\x5d\xce\xf9\xb1\xbb\x61\xab\xe1\xf9\xcd\x1c\x16\x8a\x4e\x43\xc7\x08\x86\x30\xad\x8e\xf8\x76\x3b\x53\xee\x8d\x2a\x88\xbb\x0d\xb2\x17\xd1\x78\xf9\x4b\x91\x18\x24\x8d\x8e\xa7\xaa\x02\x0c\x23\xfb\x5c\xb9\x0a\x6d\xb7\x47\x35\xba\x75\xd9\x02\x0f\x26\x32\x86\xb0\xf5\x01\x16\x4b\xa7\x08\x34\x4a\x99\x8f\xb4\xa3\xef\xd6\xd1\xcc\x7e\x0b\xf9\xc8\x94\x81\x73\xb1\xc4\xeb\x6a\xf6\x60\xfd\xd0\x28\xa7\x1e\xac\x0d\x29\xad\xaa\x6e\xb1\x5e\xe2\x8b\x6a\x15\xd1\xca\x91\x3c\x5c\x2f\x34\x81\x4c\x26\xe5\x85\x26\x0b\xbc\x51\x14\xb1\x42\x68\xb7\xd1\xd5\xf5\xd1\xc0\x26\x39\x5d\x7d\xc5\x6b\x6f\x44\x46\xee\x20\x13\x01\x5c\x1e\x4e\xa4\xd5\x10\x32\x38\xac\x20\x86\x76\xdf\xd7\x16\xbd\x28\x85\x3e\x08\x32\xa4\x06\x50\x3c\x23\xeb\x75\xc6\x0e\x58\x04\x82\x46\xba\x3d\x75\xda\x84\x2c\x11\x43\x3d\x3c\x87\x0a\xea\xca\x87\xdd\x0f\xb5\x57\xe5\x8f\xf1\x61\xaa\x26\xc8\x44\x10\xe1\x43\x6e\x31\x20\x8f\x43\x6f\x29\x17\x0f\x9f\xc2\x4a\xef\xdb\xc4\x3f\x12\x2b\xbc\x5e\x79\xc6\x6e\xcd\xda\xce\x8d\x40\x21\xe0\xf6\xc7\x49\xa2\x3c\x9f\xad\xd5\xfc\x29\xbc\x76\xea\x8d\xd8\xe1\x71\x32\xf9\x95\xde\x74\xd9\xfe\x3e\xea\xe7\xe5\x7a\x1d\x08\x43\x38\xf0\xf8\x0c\x3a\xfd\x15\x29\x19\xa6\xd5\x1f\xf3\x23\x05\x69\x60\x2e\x92\x11\xb3\xcc\x68\xfd\x11\xe2\xfd\x1c\x3d\x8f\x39\x7a\x6e\x39\x7a\x34\xbf\x73\x87\xf6\xf4\x67\x77\x08\x37\x6c\x48\x06\xd3\xd8\x03\x28\x23\xfa\x1f\xc0\x7d\xe6\x28\x8a\x58\x2f\x6f\xe5\x85\xa2\x3c\xc1\x91\x65\xc2\xbd\x40\x44\x7c\x64\x56\xed\xe8\x64\x57\xee\xef\x3e\x26\x28\xbc\x7c\x92\x2d\x2d\x96\x23\x36\x99\x80\x57\xba\x8d\xec\xe8\x2d\x9a\x78\xab\xf6\xc8\x55\xd1\xc6\xf9\x55\x2e\x64\xc0\xd3\x8f\xe4\x99\xa6\x51\x8a\xf4\x12\x77\x29\xaf\xee\x71\x82\x6b\x66\x08\x99\xfc\x1e\x83\xeb\x6f\x1a\xf8\x3d\x49\x13\xe1\x24\xd9\x40\x0e\xcd\x5f\xb2\x4f\x14\xf0\xe6\x06\xc5\x96\xed\xdf\xeb\x74\xcd\x6e\x1c\xf6\xd5\xaf\x52\xa3\x1a\xe6\x0e\x4e\x93\x3d\xe4\x26\xa6\x8f\x2d\x23\xbe\x56\xde\xa5\x02\xed\x80\x7f\xff\x83\x72\xf9\x53\xdb\xe8\xfc\x5b\x2b\xe1\x96\x8b\xc2\x0b\xea\x0b\x82\xe0\x0b\x79\x2f\xc5\xcf\x4c\x4a\xb1\x62\x89\xf0\x7f\xe6\x85\x66\xed\x0f\xf7\xf4\xd5\x1f\xdd\x00\xff\x4c\x02\x9e\x74\x53\x92\x34\xd7\xbd\x5d\x62\x5f\x33\x8e\x24\x8d\xd9\x6a\x7e\x47\xe2\x53\x8f\x47\xd7\x0c\xb6\x6e\x5d\xa0\xd0\xa8\x7d\x43\xb4\xe4\x2f\xbf\xcc\xc4\xbc\x60\x4b\xf0\xee\xe6\xb2\x43\x9b\x4a\x9b\x83\x5b\xeb\x17\x60\xac\xb9\x35\x6b\xc6\x0a\xb4\x6b\x5c\xbf\x6b\x37\x62\x0c\x4e\x01\x26\x6b\x9b\x1c\x01\x18\x9b\xa9\x61\x47\xbb\xea\xcf\x65\x57\x11\x52\x76\x60\xc3\xc7\xff\x59\xfe\x0e\x53\x94\x98\xa2\xfd\xc4\xfd\xe7\x5e\x2e\xad\xbf\xb6\x34\xe8\xae\x62\xdb\x23\x28\xe4\x11\x99\x4c\xca\xb2\xad\xbe\x57\x96\xf0\x1a\x13\xcc\xa7\xb4\xc1\x0c\x21\x63\xde\x6b\x94\x5b\xb4\x3c\x15\x55\xf0\x06\x68\xbf\xcc\x4b\x70\x44\x53\x7f\xee\x14\xc3\xaf\x82\x05\x21\x5d\xdd\x59\x6d\x76\x63\x49\xb1\xfa\xb8\xdb\xc9\x59\xa2\x61\x86\x3b\x7a\x51\x92\x31\x65\x9d\xa8\xd9\x8a\xb4\x17\xe3\xef\xcc\x11\xb6\x99\xea\xd0\x4e\x85\xd0\x55\xba\x1e\xa2\x91\x70\x9a\x05\x8d\x6e\x55\x52\xe7\x4e\xed\x5e\x2a\x6d\x1b\x95\x2c\x93\x52\xc1\x91\x1d\x5e\x7b\x64\x63\xbd\x50\x7d\xf3\xb3\x3c\xb9\x55\x24\x41\xc9\x2b\xa1\xe0\x40\xa5\x90\xc2\x2b\xa6\x7f\xe0\x23\x8e\x3c\x83\xa6\xf6\x6d\x69\x08\x00\x8c\xda\x54\xa3\xa7\x7c\xba\x5a\xd7\x5d\x37\xe7\x23\xea\x28\x6f\x32\xa1\x31\xba\x97\x67\xa7\x92\xed\x78\x85\x2b\xc9\x9d\x29\xdc\x50\xe3\x3d\xeb\x3a\x2f\x84\x7f\xaf\x34\x9e\x1b\xcd\x98\xf9\xdd\xf0\x7f\xe8\xb6\xe6\xc5\xb1\x40\x73\x36\x3d\x5f\x83\xb7\xa4\x4e\x8f\xea\xbf\x74\xcd\xb0\xb4\x19\x97\x63\x84\x5e\x94\x7e\xf5\x66\xf3\x45\x4d\xd2\xcf\x94\x41\xad\x23\x5e\x51\x39\x01\x30\x2f\x6a\xb5\x40\x7a\x8f\xbb\xe1\x3e\x70\x41\x0a\x6d\xf5\xca\x28\x80\x39\x1a\xb5\x53\x4e\xda\x6b\xc2\x00\x3d\xa8\xbc\x3d\x3f\xa7\xdd\x4b\xf8\xea\x68\x86\xcf\xcf\x55\x05\x7c\x87\x30\x9b\x9a\xab\xdb\x1b\x1d\xf6\xf0\xa4\x74\xc0\x9e\x1d\x2e\x17\xee\x24\x09\x5c\x8d\x23\xcc\xc1\x01\xc7\x63\x11\xc1\x40\x41\x10\x01\xc8\x32\x14\x6d\xb7\x31\x9b\xe6\xfb\xfb\x06\x9f\x2d\xf8\xd2\x85\x7a\xb4\x36\xdb\xd7\xe8\xa3\xce\x0c\x28\x1c\x9d\x2c\xa5\x70\x5d\xc6\x0f\x7d\x65\xaf\xf6\x40\xd4\x8e\xa3\x2f\xeb\xeb\x02\x21\xe3\x8b\xaa\xe1\xd0\xad\x73\x52\x37\x99\x94\x9d\x8e\xd9\xf1\x5d\x4d\xb9\x64\x30\xf0\x51\x17\x76\x65\x53\x75\xe0\xf1\x38\xca\x45\x49\xd8\xdb\x49\x49\x80\x5e\x98\xc4\xda\x48\x80\x59\x79\xa0\x5d\xac\x97\xd0\xbe\x72\x8f\x84\x9f\x3a\x70\x65\x35\x99\xac\x62\x9c\x2d\x39\xb7\x1b\x9b\x10\xcd\xa4\x8e\x3f\x3a\xd9\x29\x9f\xd6\x7c\x13\x7e\xfd\x50\xb9\xd1\x8b\x4c\x26\x17\xf9\x06\x76\x7a\xcd\x28\xe6\xc8\x45\xd7\x84\x8b\x46\x97\x23\xe5\x46\x46\xb5\x36\xb0\x06\x09\x71\xa7\xb4\x65\xd4\x68\xe0\xcf\x08\xff\x48\x57\x7b\x4c\x1a\xfb\xed\x13\xde\xa1\x5f\xfd\xc1\x84\xd4\x26\x8a\x3d\xb8\xe1\x7f\x4b\x4a\x2f\x93\xb7\xcb\x77\x06\x91\x5c\xe2\xe6\x65\x7d\x0d\xc5\x1e\x47\xf1\xb5\xf2\x1c\xf7\xa0\x49\x5a\x97\x4d\xf9\xf1\x9e\xe0\x82\x60\x5e\xde\xf8\xc1\xbf\x2f\x48\x90\xb1\x2d\xdb\x92\x52\x64\x35\x21\x4a\x8e\x7d\xab\x72\xe0\x44\x39\xfb\xe2\x6f\xfb\x5e\xeb\xf6\x9e\x11\xb1\xba\x84\xfe\x5c\x97\xb7\x3a\x65\xb5\x4a\x47\x94\x5c\xf4\x8b\xe5\x2e\x66\x20\xf7\x8d\xde\xc1\x16\xf4\x96\xdc\x19\x54\xd5\x79\x71\xef\xaf\x5d\xcb\xee\xd5\xd7\xb4\xc0\xba\x27\x5a\xd2\x4b\x7c\x1a\xf4\x27\x81\x47\x43\xde\xe8\x63\x4a\x86\xa6\x74\xfd\x54\xa7\x90\x43\xd8\x97\x83\xe7\x7d\x7a\x2c\x53\xc3\x7f\x92\x84\xb5\xb0\x37\xce\x3e\xfe\x83\x57\x67\xf2\xea\xa0\x49\x8e\x1a\x61\x02\x25\x68\xf7\xaa\x65\xa4\xa4\x72\x33\x4e\x26\xf0\xbf\x8a\x81\x60\x84\xd7\x82\x3c\x6f\x20\x38\x02\x61\x78\xf1\x9d\x2e\x38\xb2\xb1\x12\xef\x36\x74\xdd\x44\x48\xca\x98\xfa\x3b\xbb\xf5\xd2\x39\x95\x08\xb7\x1e\x43\x09\x81\x13\x68\x87\xbd\xd6\x7a\x67\x23\x9c\xc3\x91\x73\x14\x63\x53\xf7\xf5\xb3\x56\x0b\x8b\xa7\xd9\xa7\x3a\x5b\x15\x16\xda\xab\x04\xfb\xd9\xa5\x03\x5b\x6c\x98\x9b\x1a\x7c\x42\x3c\xe0\x97\xa8\x68\x84\x09\x83\x2f\x28\x6b\xfa\xa0\x31\x60\x28\xb2\x80\x2e\xae\xa4\x36\xf7\x20\xf9\x2e\x58\x45\x7d\x7a\xa4\x58\xd1\x1c\xbb\x5c\xd6\xac\x62\xdb\xad\x5c\xe2\x4b\x1f\x74\xd8\x95\x3b\xfd\x33\x31\xea\x48\xd7\x0f\xc9\xc9\x29\x37\x83\x33\x79\x5c\xfd\x2f\xf7\x6a\x5c\x1c\xf3\xe3\x42\xe5\x66\xa0\xcd\x7c\x0c\x5c\x8c\xfb\xfe\xdb\x9b\x70\xf5\x81\x25\xc4\xe7\x3d\x23\x52\xf9\x0c\x74\x22\xe9\xd0\x55\xc6\x88\x6b\x70\x42\xa8\x78\x11\x23\xbc\x47\xe6\x69\x81\x8c\x3f\xb5\x4f\x13\x9e\xcf\x90\x8d\x7a\x9a\x76\x97\xed\x66\xad\x33\x2e\xfb\x34\x60\x22\xf3\x33\xad\xce\x41\xcf\x25\x40\x84\x7a\xcf\xdb\x0d\xd3\x9f\x9f\x0e\xc8\x2a\x04\xcd\xcb\x32\xfd\x64\xbb\x35\x3d\xf8\x36\x7a\x13\xf6\xc5\x00\xcd\x66\x7a\x83\x07\x5b\x35\x33\x1d\x2d\x42\xc6\x23\x2a\xf1\x84\x3c\xc9\x7a\x42\x9e\xf8\x9e\x90\x27\xe0\x09\x69\x65\x1d\x0d\xd3\x3e\x99\x04\x29\x00\x4a\xfb\x02\xe1\x80\xb0\xc0\xe4\x10\xd2\x06\x0c\xa8\x8f\xc8\x48\xe0\x94\xe6\x91\x1b\x91\xa7\x89\x1e\x68\x5a\xe9\x3c\x1f\x0a\xed\x6c\x1e\xfd\x0b\x4d\xb4\xbf\x1e\x40\x37\x9c\x02\x10\x3d\x4c\x30\x78\x13\xce\x07\x27\x5e\x6d\xd9\x6f\x6f\x9e\x37\xb1\x29\xde\x69\x06\x72\x60\xfc\x76\x27\x27\x56\x1e\x66\x71\xf8\xbd\x5d\xc9\xb1\x58\xd0\xa5\xa5\xe7\x75\xe9\x75\xaa\x06\x3f\x66\x25\x9b\x6a\x7d\x9c\xe7\x2c\xe4\x26\x18\x3a\xa9\x24\x5d\xee\xa4\x5f\xf0\xa6\xc4\xe7\x17\x72\x36\x06\xee\x21\x5f\xb9\x96\xb1\x60\xc5\xde\xff\x34\x71\xee\x47\x90\xc5\xc6\xa9\x00\x7e\x8a\x57\xb9\xd9\x34\xd0\x6a\x7d\x17\xc7\x72\x4d\x64\x2a\x30\xa0\x3b\x2e\x7e\xed\xe8\xeb\xd7\x30\x2d\xbf\x2e\x12\x31\xdf\x4a\x08\xce\xe3\x5c\x32\x4f\x8a\x13\x55\xee\xe6\x26\x5b\x77\xec\x71\xde\xa2\x5c\x42\x79\x6a\x93\x13\x96\x70\x9d\x1a\x02\x95\xb2\x59\x78\x85\xd8\x6c\xf3\x19\xbf\x74\x3d\x80\x02\x69\xe5\xa4\x77\x04\x6a\xab\x02\x56\x08\x00\x98\x40\x94\x36\xdc\x2f\x21\xf5\xbf\xac\xd9\xcd\x01\x54\x4b\x3c\xaa\x9d\x3d\xe0\xce\x1e\x0c\x09\x63\x16\x7c\x59\x65\x77\xd6\x82\x2f\xbd\xcb\xa8\xc7\x0d\x8e\x25\x9d\x4a\xaf\x89\x68\x43\x3a\x6d\x6d\xf0\xd8\x5e\x12\xb4\x01\x4d\x9c\x23\x35\xea\x93\x1a\xc0\x9d\x96\x05\x34\x45\xd9\x7b\xb5\x19\x7e\xed\x1f\x33\x0c\xe1\xb6\xba\x8d\x72\x2b\x60\x4d\x9a\x7c\x4e\xb1\x0e\x4a\x9a\x8b\x1d\x96\x94\xae\x3b\xe1\x9c\x78\xbc\x94\x96\x65\x8d\xf0\xac\x8a\x20\x42\xa0\xed\x69\x47\xff\x4e\x26\x93\xff\xdc\xa3\x9e\x04\x43\xe1\xa3\xf5\xfa\x8d\xf7\x29\x89\x79\x77\x55\x21\x44\xba\x22\x6b\xb3\xad\x77\x38\xff\x71\x22\xe8\xec\xcb\x37\x5e\x66\x1a\x33\xf2\x77\x6a\xce\x84\xf7\xcf\x5a\xfe\x16\x42\xdf\x53\x41\x43\x7d\xaf\x8d\xfb\x70\xf4\xf4\x7c\xdc\x4b\x99\x42\xc5\xfd\x32\x9f\xe4\x21\xd1\xe2\xd1\x91\x0b\xe0\x99\x4c\x24\xdf\x5e\xaf\x49\xb7\x22\xcf\x60\x8b\xfe\x6d\x43\x3a\xd1\x01\x86\x83\xb6\xf6\xd6\x1e\x91\xc3\x01\x95\x13\x28\x36\x50\xe8\x47\x52\x7f\x78\x59\x5f\x6b\x5b\x6a\xeb\x1b\x51\x89\x31\xa2\x06\x24\x33\xaa\x17\xeb\x65\x75\xa1\x31\x3f\x2e\xf0\xca\xc4\xb2\x21\xdc\x2d\x2e\xa6\xb4\x59\x56\xab\x9d\x19\xd3\x65\x35\x7b\x70\xf9\xb0\x7d\x70\x29\x6b\xad\x17\x97\xcb\x5c\x16\x7d\x79\x40\xc0\xbb\x28\xb7\xbc\xd3\x9e\x5c\xbb\x6b\x9e\x4d\xfd\x23\xbd\x8c\x9c\x78\x30\xb1\xbd\x19\xd9\x53\x97\xdb\xe3\xd7\xd7\xc8\x34\xf1\xec\xe7\xe6\xa8\x27\x99\x94\xc1\xf2\x50\xb9\x3a\xbb\x85\x14\xf4\x41\xd9\xc1\xd4\x9f\x55\x8b\x6b\x54\xa7\xed\xb7\xc8\xce\x8c\x31\x60\xe3\x95\x4b\x05\xba\x7e\xb8\x72\xf3\x7f\x51\x89\xc5\x7a\x39\x62\x6a\x4e\xb7\x5b\x6d\xa2\xbe\xf0\x2d\xd4\x57\xe5\xc6\x1b\xd1\xd5\x61\x9a\x7b\xa5\x4b\x23\x0b\xb6\xc4\x6d\xd5\x2d\x28\xf4\x1d\x22\xbe\xbd\xfe\xca\xa9\x28\xc5\x76\xeb\x39\x17\x3e\xfd\x7c\x0d\x70\xfa\x70\xa3\x50\x9d\x5c\xf8\x1d\x19\x5f\x73\xd2\x11\xa6\x9d\x51\xc8\x58\xd3\xee\xf8\x9a\xb7\x1f\x69\x43\x1a\x73\xb4\xe3\xf1\xbb\x8d\x18\x53\x01\x71\x66\xac\x15\xe3\x0b\x79\x51\x4c\x21\xe6\x81\x5e\xc8\xcb\xc8\x74\xfc\x26\xa4\xde\x8f\xd5\xec\xc1\xc7\x87\xed\x83\x8f\xa6\xf3\xef\xab\x7a\xf1\x71\x39\xba\x59\x7c\x5c\x56\xef\xe3\xfb\x78\x03\xc7\xc5\x7b\xe4\x66\xfa\x5d\xc5\xa7\x92\x33\xbd\xd6\x1e\xb0\xcf\x5a\xfe\xcc\x06\xdc\xc9\x1d\x77\x83\xf0\x79\x35\xc3\x9f\xaa\x77\x66\xae\xce\x1f\x7e\x7a\x70\xee\xfb\x04\x3d\xad\xde\x2d\xce\x97\xf8\x33\xfc\x67\x76\xd9\x99\xd7\xcf\xcf\x08\xbf\x0e\x7f\x3e\xaa\x66\x0f\x1e\x3d\xfc\xfc\xe0\x91\xe9\xf6\x87\xea\xe9\xe2\xd1\x32\x12\x6e\x46\xaf\x17\x8f\x96\xd5\x07\x7c\x06\xff\x4d\x69\x23\xe7\xe2\xf3\x6f\x4e\x50\xa0\x8d\x7f\x46\x4a\x8e\x19\x16\xf8\x0c\x13\xbc\x89\xef\x71\x81\x6e\x55\x2e\x9d\x1d\x9a\xae\x6a\x11\x59\xb2\x14\x55\x48\x31\xb4\x7c\xad\x71\x51\xe8\x45\x29\x25\x80\x33\x73\xfd\xdd\x5e\x97\xdd\xe2\xf5\x62\xb6\x94\xa4\x80\x76\x3b\xa5\x42\x35\x63\x7f\x59\xcd\x1e\xbc\x7c\xd8\x3e\x78\x79\x7c\x8c\xae\x4b\xb2\x78\xb9\x44\x3b\x0c\x22\xae\xc6\xf7\xce\xf2\x55\x67\x7e\xfc\x41\x9f\x50\xc7\xb0\x40\xd3\x18\x20\x1d\x5f\x13\xf2\x61\x80\x63\x4b\x6a\x8e\x24\x40\x59\xe9\xe9\x70\x93\x9e\xc5\x47\xcb\xc9\xe7\x9c\x64\xa5\x5f\x80\x36\x9c\xd2\x66\x94\x72\x8b\x29\x73\x32\xda\x23\xee\xed\x70\xd8\xd5\xde\xe1\x61\x5e\x7d\x47\xd4\xd1\x9f\x19\x48\xa7\x5a\xd3\xf7\xa2\xb1\xe5\x1e\x81\x0a\xdc\xd8\xc7\xa5\x94\xce\x7b\x5b\xda\xb7\x2e\x24\x9a\xa4\x1d\xce\x94\xca\xf6\x5e\x75\x9b\xf7\x76\x5b\x6b\x46\xdd\x5c\xf1\xd3\x92\xf7\x5d\x0a\x3c\xbe\x11\x5c\x5a\xb1\x8c\x56\x86\x28\xb9\xfc\xc0\x24\x40\x89\x1a\x62\x40\xbb\xe8\xb0\x3c\x32\x2d\x18\x0e\x23\x03\xff\xed\x81\xea\x34\x2f\xeb\xeb\x32\x31\xff\x02\x17\x32\xd4\xb0\xc1\xe0\xf0\x98\x3e\x2d\x2c\x1a\x76\xe0\x2b\xb2\xb9\x7d\x32\xed\xc1\xfc\xae\xac\x40\xa7\x70\x9b\xa7\x6e\x23\x07\x48\x57\x2c\x2b\x5d\x79\x26\x55\xaa\xb4\xeb\x36\x6a\xda\xa4\x9c\x03\x63\x29\xa6\x43\x81\xd3\xba\xa8\x89\x9d\xf6\x65\xf1\x5f\x8f\xd5\x9d\x06\x95\x43\x50\xb5\x15\xbb\xfe\xec\xc7\x3c\x83\xbd\x94\xa5\xf6\x52\xab\xc4\x72\x82\x94\xe9\xa8\xc0\x1d\x66\x5e\xfc\xae\xee\x45\x21\x59\x71\x23\x4c\x71\x4f\x93\x08\xb1\x93\xca\x85\x05\xb7\x7b\x02\x78\x73\xc3\xd0\x28\x3f\xe1\x70\x32\x92\x94\xaf\x4c\xc2\x46\x69\xa8\xd0\xc4\x94\xe0\x6f\x52\x8b\xfc\x83\x16\xd2\xe5\x07\x3c\x60\x29\x6d\x61\x1d\x1b\x1e\xe8\x55\xa4\xa4\xa3\x6a\xff\xf9\x56\xd1\x76\xa0\xf0\x34\x71\x4d\x2d\xea\x53\xb7\xa6\xfa\x62\xd9\x17\xd7\xde\xd3\xf7\x3b\x2e\x99\x72\x5f\xca\x6b\x56\x6f\x77\x2a\x4a\x29\x8c\xbc\x05\x37\xd8\x3d\xd1\xb9\x26\xfd\x71\x7a\x97\xab\x68\x0e\xaa\x31\x68\xa0\x0b\xe7\xb9\x3e\x78\xe4\xb2\x2e\x87\x08\x26\x8c\xdf\xef\x22\xef\x32\xa2\xc2\x64\x8c\x66\xef\xdf\xb6\x5b\xf3\xe4\x13\xaf\xaf\xaf\x49\xf3\x4c\x57\x3d\x99\xf4\xbc\xb0\x9f\x9e\x96\xb4\xa2\xdb\xad\xc8\x65\x07\xdc\xeb\x0c\xa7\x30\x1a\xbf\xd0\xa9\x63\xaa\x43\x60\x14\x7d\xe3\x16\x1c\xd2\xbe\x42\x5d\x68\x87\xb0\xf3\xea\xc8\xed\x19\x15\xff\xa3\x71\x14\xe2\x4a\x5b\x03\x2c\x17\xe1\x0e\xd4\xb8\xd5\xc4\xab\x83\x79\xf0\xc6\x9e\x58\x9d\x25\x07\x7a\x4a\xa7\x69\xf0\x4e\xb9\xc1\x1d\x9a\xd3\xea\xcb\x67\x19\xcb\x1a\x30\xdd\xb3\x7f\xd4\xc0\x00\x1d\x22\xdd\x2e\xd1\x26\x31\xbb\xe4\x60\x2b\x84\x57\x17\x07\xcd\xc9\x2e\xb0\xc9\x24\xdb\xa9\xdd\xbb\x9d\xf0\x26\xb3\x07\xfa\x10\x2c\x7e\x02\x5d\x58\x35\x62\x0b\x0d\x38\x35\x62\x2d\xa9\xa4\x1e\xa2\x12\xa7\x47\xcc\xd1\xca\x7e\x8c\x0a\xaf\x92\x2f\xc0\xf9\xf0\xbb\xa0\x56\x95\xea\xac\x54\xb2\x91\x7e\x37\x25\x72\x4a\x52\x9e\x1e\xe9\xab\xec\xd1\x3a\x56\xa1\xf7\x49\x28\xa0\x58\x00\xf4\x0c\xc5\xa7\x79\x10\x22\xc2\xea\x92\xfb\xaa\xfb\x62\x24\x86\x9c\xa9\x67\x88\xf3\x27\x68\x6a\xf2\x19\x4c\x3b\xca\x56\x44\xb9\xcb\x84\x16\xa7\x7e\xbf\xf2\x19\xc2\xeb\xf2\xef\x52\xa0\xd4\xdb\x83\xca\xcb\x70\x64\x7d\x4c\xa2\x8b\x9b\xf5\xd8\x9a\x4c\xf0\x33\x6e\xd1\x69\x79\xd7\xd6\xb4\x09\x8a\xa5\x26\xa8\xc0\x00\x10\xd3\xbd\x40\x68\x5e\x96\xe9\x57\xfd\x56\x28\xaf\x97\x68\x32\x19\xee\x67\xd2\x4b\xbc\xaf\x33\x2a\xdc\xd8\x39\xff\xa7\x22\x40\xe6\xf8\x0b\x71\x5a\x08\x52\xf2\x6e\xfc\xb5\x52\x76\x25\x24\x9a\xa9\x2f\x8d\x0b\x00\x80\x5b\x25\x39\xc4\xd5\xd2\x8b\x72\x56\x55\x09\xad\xa2\xc4\x69\xc3\xe8\x31\x5d\x4c\x80\xee\x4d\x1f\x55\x0a\xe4\xa5\x77\x50\x40\x9c\xbe\x3e\x76\x87\x8d\x38\x7c\x16\x04\x9f\x07\xa7\x6f\x62\x07\x65\x68\x44\x94\xa6\x38\x97\x7a\xd0\x26\x95\xfc\x91\xae\xd7\x2a\xdf\x69\x99\x71\xfe\x50\xd2\xdb\xad\xc1\xf0\x98\x73\xa7\xf2\x16\x3b\x84\x3d\x45\xf5\x6b\xb6\x1a\x50\x56\xbf\x71\x55\x22\xad\x82\xf6\x1e\xf5\xa1\x74\xfa\x1d\xe9\xc0\x07\xdb\xcc\x61\xe8\x9f\xe2\x27\x66\x01\x60\x2d\x13\x9a\xf6\x90\xa9\xf0\x34\x3d\x45\x0b\xb1\xc4\xb4\xe2\x16\x0e\x05\x1c\x50\xcd\x80\x40\x6d\x1f\x39\xa8\x76\xc9\xe9\x52\xfb\x8c\xa4\x45\x0a\x2c\x78\xdb\x0a\xed\x14\xd0\x4c\xbb\xfa\x23\x69\x0a\x79\x72\x4d\x57\x1b\xce\x09\x13\x67\xa2\x16\x64\xda\xc9\x7f\x01\xd9\xa2\xdc\x54\xf5\x94\x76\xaf\xc8\xa7\x12\x9d\x16\xbe\xbf\x47\x31\xaf\x41\xc4\x85\x9a\xe4\x4b\xdf\xd3\xa0\x98\x17\x7e\x32\xda\x02\x5b\xb5\x63\xf9\x3b\xe0\x60\xe4\xa4\x6f\xc0\x2b\x75\xee\x5e\x49\xa2\x0a\xbc\x3f\xb3\x47\xb0\xc1\xf5\x86\xfc\x86\x42\xbb\x8d\x32\x13\x9b\xa4\xb3\x76\x37\x7e\x74\x4a\x47\xc4\xe6\x3a\x70\x06\x32\x61\x4a\xda\x25\x33\xcd\x40\x0c\x92\x6e\xec\x27\x9a\x68\x8c\x72\x49\x5a\x61\x5f\x86\x4e\xa4\x03\xdf\x29\xad\xab\xb0\x60\x1d\x3d\x0a\x97\xac\x59\xe8\x3b\x52\x5a\x44\x66\x0d\xfa\xc8\x54\x1c\x39\xe0\x52\x6a\xf5\x04\xf9\x4c\x3b\x11\xc7\x69\x19\x2f\x0a\xda\xbf\xd5\x7d\x41\x04\x0e\x53\x8a\x89\x9c\x29\xc8\x9c\x2d\x2f\xf9\x58\x47\x22\xbf\xca\x01\x01\xa4\xa7\x8e\x49\x6c\xa3\x40\x2f\x00\x4a\x23\x7b\x2a\x6a\xb9\x8c\xf5\xfb\x8b\x08\xa5\x28\xc1\xbc\xd2\x57\x4d\x40\xc6\xda\x34\x19\x40\xe7\x6d\x54\x72\x68\x82\x30\x3f\xed\x3b\x6c\xe3\xfc\xe1\xcc\x64\x38\xe8\x2b\x6a\x83\x94\x4b\x15\x7b\x73\x6e\x98\x3c\xe5\x56\x9a\x43\x47\xd0\x8e\x56\x67\xca\xfb\xc1\x94\xcf\xcc\x43\xea\x3b\x17\xba\x0e\x09\xe5\x10\x7b\xaa\xff\x9f\x0b\xaf\xf9\xde\xe5\xf0\x20\x4a\x6d\x71\x5b\x79\xcf\x15\x25\xcf\x2b\xe1\xe1\x39\xa4\xfe\x7c\x1e\xca\xab\x5c\x0c\x1f\xa6\x4e\x39\xef\x2b\x13\xc3\x2b\xc0\xe4\x21\x6b\xb0\x11\x80\x7d\x60\x7c\xd1\xf2\xf1\xaf\x8b\x63\x01\x7a\x8c\x91\x0b\xba\x1a\xea\x59\x40\x5e\xe9\xfc\xec\xf0\xf9\x65\xdd\xbd\xec\x9f\x58\xff\xda\x35\x08\xca\x7b\xc7\xb7\xc3\xf2\x9e\xe9\x5d\x26\x1d\xc2\xdd\x17\xa0\x75\x2a\xfa\xb1\x2b\x82\xf8\x84\xb9\xc9\x0a\xa8\x20\xd8\x22\x5c\x9f\xf3\x81\x3e\x84\xbc\xee\x1e\xb7\x3a\x15\x51\xa4\xbc\xf0\xd3\xc4\xc1\xb0\x96\x80\x55\xae\x0c\x64\x2c\x36\x90\x89\x4c\xe8\x64\xc9\x16\x7c\x89\x52\x7f\x5e\x83\xea\x7e\x4b\xab\x00\x35\xdf\xb8\xe0\x59\x3d\x26\x55\x51\xa2\x4a\x89\xa9\xda\x69\x41\x7b\x99\x6b\x4c\xe3\xec\x73\xe7\x5b\xd2\xee\x02\x2c\x3b\xdd\x98\x99\xc6\xde\x2a\x50\x1e\xc9\x27\xf2\x90\x03\x7d\x53\x10\x83\x09\x7a\xdb\xd8\x24\xd0\x7f\xdd\x08\x48\xf0\xae\x90\x30\x7a\xca\xc4\xe7\xbf\x11\x2e\xc4\x34\xca\xfc\xf9\x8d\x33\xcc\x67\x1c\x5a\xad\x36\xdb\x3a\x65\x79\xb4\xe0\x6c\xf6\x7d\x61\x3a\xde\x36\x48\xbb\x8a\xb2\x03\xf0\x79\xa3\x24\x6d\x48\xa6\x87\xd8\x64\x2f\xc7\x59\x1b\x66\xf5\x0d\xba\x15\x95\xd8\x6e\xb3\x16\x5b\xbd\x51\xc1\xbe\x49\x16\xec\xf8\x64\x29\x37\xa7\xa9\xa2\x9a\xa9\x7d\xaa\x35\xec\x03\x6c\x44\x10\x8d\x20\xd0\x2d\xaf\x84\xaf\x0e\xd3\x57\x4f\x98\x46\x8c\x22\x13\x7d\x40\x70\xb6\x40\x51\x5f\x5f\xaf\xe9\x0a\xa6\xa6\x40\x23\x15\x4d\xaa\xfb\xa2\xfa\xcd\xa5\x8c\x6c\xa6\x7e\xc8\x40\x94\xa9\x9d\x59\xb1\xd1\x53\x25\x38\xf1\xcd\x56\x2b\xa5\x6a\xb9\x52\xa9\x11\xa5\xc7\x2a\x32\xc0\x29\x58\x37\x46\xe5\x0e\xfe\x41\x45\x4c\x69\xb7\xbf\x01\x03\xa0\x11\x65\xeb\x46\xf9\x6c\x62\xbe\xc3\x03\xed\xf4\x7b\xcd\xf6\x1b\x99\x44\xe8\x44\xdb\x63\x64\x2a\x99\x09\x83\x3b\xbb\x61\xab\x52\x5e\x66\x1a\x57\xdb\x63\xd6\x74\xd0\xe9\x21\xf2\x5d\x7c\xef\x7b\xf0\x5d\xd6\x12\xd4\x7b\x4b\x0c\x33\x5b\x58\xb1\x7b\x10\xa7\x24\xeb\xd3\x26\x2f\xc7\xda\xf7\xdf\xcf\xa9\x93\x39\xe6\x00\x30\xa2\x42\x61\x0c\x8d\xb8\x98\x23\x70\x70\x09\xf0\xcc\x4b\x5e\xd1\xa9\x0a\xa9\xb1\xfe\xe2\x10\x4d\x83\x52\xa5\x03\x37\xe0\x40\xda\x51\x86\x19\xbc\xde\xa8\x42\x36\xf5\x36\xc4\x76\x9b\xd6\x1f\xec\x97\xc3\x1b\x0a\xea\xb5\x40\xc1\xad\xc5\xa1\x2f\x53\x37\xf6\xa0\x5b\x90\x3c\x3e\x37\xda\x16\x05\xea\x8e\xbe\xe6\x17\x2d\x0c\x17\xcd\xa1\x32\xcf\x0f\x3f\x5b\xad\x7b\xed\xa3\x6f\xf5\xd6\xed\x57\x07\xad\xec\x70\x70\x0e\xec\xa3\x82\x28\x86\xe0\xa7\x11\x82\xab\xec\x67\xa3\x05\xaf\x89\x9f\x83\x1c\x42\xbd\x5b\x84\x82\xa1\xc3\x26\xce\x6c\x17\xfa\x08\xa6\x5e\xf6\x74\xb9\x38\xae\x0f\xa4\x99\x3a\xa4\x19\xdd\x74\xd1\x57\xb1\x2d\x70\x20\xd1\xd8\xfa\x34\xcd\x0c\x82\xcb\xed\x0f\x11\xca\xc6\xca\x38\x18\xb3\xcc\xc9\x68\xa3\x8d\x87\x23\x79\x1c\x54\x68\x10\x13\xe3\x3d\x8f\x83\x60\xdc\x2b\xab\xf5\x2a\x1d\x8e\x99\xcf\x8a\x80\xf4\xd7\xc7\x1f\x9f\x58\xb6\x29\x17\x25\xe4\x40\x98\xf6\x32\xd0\xa2\x87\xa5\xca\x04\x38\x0b\x2c\xb4\x97\xe1\x0f\x99\x36\x15\xef\xd9\xfb\x7a\x88\xaf\xca\x0d\x01\xf7\xe8\x96\x20\xef\xaf\x52\xb3\xd5\xac\x65\x74\x55\xaf\x4b\x34\xf2\x59\x26\x5d\x5d\x3f\x07\x9c\xcc\x5d\x96\xe7\x44\xfb\xfd\x42\x83\xd1\x86\x95\xc4\x73\xd1\x07\x18\xd7\x3b\x19\x09\x97\xd9\x3f\x1b\xe7\x1a\xb8\xed\x09\xb9\x20\x9c\x93\xe6\xad\xfa\xd9\xc5\xf3\x22\xc7\xf5\x3d\xe9\xda\x0d\x5f\x11\x97\xbd\x2c\x75\xf5\x3d\x0a\x62\x91\x44\x04\xa2\x9a\xd3\x5f\x78\x29\x96\x7a\xdb\x89\x5d\xf3\x73\x0d\xed\xf5\xd7\x4f\x20\x51\x3c\x97\x90\x7c\xb3\xb2\x31\x5f\xb2\x62\xbb\xdd\x0e\xe1\xd6\x04\x21\x42\x4e\x85\xeb\x7a\xe5\x90\x36\xfe\xf8\xf4\xfb\xb3\xe7\xaf\x5f\xcd\x39\x66\x90\x4c\xe3\xc9\x59\xb1\x33\xe1\x59\x6b\xfa\x8e\xd7\x9c\x92\xce\x80\xe1\xd8\x07\x36\xc6\xf6\x71\xcb\xc9\x0b\x78\x7a\x53\x16\x50\x68\xfc\x04\x92\x40\xb7\x62\xaa\xab\x56\x3c\x68\x6d\xba\x00\xda\x15\xdb\x3c\xf0\xb9\x3f\x7c\xff\x22\x31\x4e\x63\x8a\x6e\xbb\x4f\x54\xac\x2e\x4b\x8e\x6e\x57\x75\x47\x7c\xaf\xf7\xb9\xbf\x46\x1b\xbe\xd6\x8e\x83\xd6\xba\x26\xb9\xaf\x91\xfd\xe8\xd1\x7a\xdd\xf7\x05\x28\xfa\x6d\x61\x65\x4e\xcd\x14\xfd\x83\x36\xaa\x13\xbf\x60\x7f\x5f\xfe\xe0\x99\xfa\xdc\x47\x16\x65\xbf\xa7\x2f\xda\x5d\x26\xec\xbb\xf1\x4a\xe9\xf9\xc6\x79\xd9\x84\x9f\x39\x37\x88\x9e\x0f\x7d\xaf\x0e\xf7\x69\xa8\x2b\x4e\xbf\x7c\xec\xbd\xf7\xe6\x2d\x50\x1b\x67\x3e\xfb\xc1\x7b\x1f\xb4\x17\xaa\x9f\xd3\x0f\x9f\xf8\x81\x70\xfa\x43\x7d\x59\xce\x43\x9d\x89\xa6\x23\xe5\xcc\x67\x04\xa8\x98\xb0\x12\x31\x12\x40\xcf\xe2\x30\xca\xcb\xb6\x13\xca\x0b\x48\x77\xe4\x0d\x27\x17\xf4\x73\xe9\x30\x33\x95\x16\x1b\xec\x90\xb5\x30\xbe\xe3\x25\x41\xe0\x18\x07\xe7\x29\x43\x58\xd8\x1f\x84\xad\xda\x86\xfc\xf0\xfd\xf3\xc7\xed\xd5\x75\xcb\x08\x93\x02\x10\xc2\xad\x2c\xb0\x91\xe7\xff\x05\x78\xe1\xf0\x4a\xdf\x57\xc5\xfd\x02\xe1\x23\x3a\x99\xf0\xc9\xa4\xb8\x5f\x1c\x55\x15\x9f\xae\x2e\x6b\xfe\x48\x94\x33\x04\x49\xb0\x8b\xfb\xc5\x31\x07\xc1\x2c\x26\xfe\xc1\xd8\x3f\x37\x4d\xe0\x93\x8a\x83\x7d\x30\xe4\x88\xe8\xa6\xd7\x7e\xf5\x87\xc4\xa7\xa4\xb7\xad\xf0\x9b\xac\x95\x60\xdf\x97\xcf\x72\x3e\x75\x03\xc3\x0b\x3e\xcc\x3b\xbe\x1d\x3a\x35\x7d\xfe\x56\x87\x7c\xff\xb8\x3f\xd6\x76\xdf\xfc\xfa\x7b\xe6\x0b\x5a\x7e\x92\x8f\x2e\x3d\xe8\x73\x45\xef\xd9\x9d\xd3\xb3\x57\x78\xf2\x82\x99\x9b\x46\xc1\xd1\x31\x43\xc9\x6c\xbb\x2d\x59\x55\x00\x9c\xb0\xea\xc6\xfd\xff\xfa\xcb\xfd\xbf\xdc\xbf\x3f\x15\xa4\x13\x00\x0e\x78\xff\x52\x88\xeb\xb2\x43\xa7\xf3\xe0\xc5\x29\x99\x17\xf7\x55\x8e\x3c\xbb\x19\x4e\x8b\xe2\x98\x1d\x93\xb9\x38\x96\x3b\x82\x68\xd1\x68\xb1\xf4\xb4\x0b\xd4\x6e\x48\x6e\x7f\x70\x84\xa9\xdb\x6a\x3b\xec\xed\xe2\x84\x03\x35\x63\x3e\x83\x84\x1a\xd3\x55\x7d\x45\x40\x51\xe3\x2b\xf3\xaf\xd7\x1b\xae\xd4\x37\x0c\xed\x76\x1a\x66\x41\x54\xf7\xff\xc2\x4f\xff\xc2\xee\x2b\xd0\x04\x73\xff\xc9\xeb\x51\xfb\x75\x58\x2c\x80\xf7\x44\x3c\x03\xbb\x6c\x97\x89\x44\xbf\x55\x17\x33\xd8\xf3\x0a\xdc\x90\x6e\x35\x2f\xe4\x9f\x3b\x6c\xdf\xbc\x6c\x1b\x79\xfb\x37\xe6\xb5\xfd\xed\x95\x79\xbc\x26\x35\x33\x05\xd4\x8f\xdd\x72\x87\x1b\x22\xc8\x2a\x8b\x05\x4d\x8e\xaa\xea\xd5\x64\xf2\x6a\xaa\x8a\x00\x69\xae\xda\xf5\xe6\x8a\x75\x7d\x73\x25\x2a\xdb\x5b\xdb\x97\xe7\x4d\xb1\x5b\x6a\x6d\xa1\xaf\xeb\x0e\x90\x0b\x6b\x6b\x3c\xce\x61\x7c\x13\xc9\x0c\x48\x22\x3a\x3e\xfe\x0d\x9f\xda\xb2\x2f\xe8\x15\x15\x21\x34\x45\x1b\x2f\xd6\x35\x15\x6a\x61\x82\xe7\x1b\xd6\x10\xde\xad\x5a\x4e\x4a\x8a\xa6\x1a\xbe\xb9\x2c\xce\x0b\x5c\x8c\x0b\x84\x46\x42\x1b\xa6\x61\x2c\x54\x0d\xa4\x05\x2c\x1b\xa1\xfd\xeb\x23\xdc\x72\xc3\xe2\xc5\xd6\xfb\x87\xdf\x38\x9d\xfd\x79\x43\xde\x6d\xde\x3f\x6e\x99\xa8\x29\x23\xfc\xf7\xe4\x46\xe9\xea\x6d\xfa\xce\x2b\x08\x10\xb8\xaf\x40\x4b\xca\xe9\xff\x41\xf7\xd1\xc8\x24\xdf\x9b\x4c\x4a\x51\xf1\xc5\xc9\xd2\xa5\x2f\x71\x0a\x13\x0d\xf6\x6c\x9d\x62\x04\xf2\x7a\xf9\x18\x96\x0c\x60\x0e\xba\x1e\xf1\x4a\xaf\xce\x2d\x6d\xe6\xc1\xaa\xd0\xa6\x40\x3b\xe7\xe8\x47\xea\xd5\xa5\xb5\xf2\x07\xb1\x8a\x7a\x6d\x44\xef\xda\xf0\x05\x5d\x06\x58\x95\x54\x4e\x26\xf7\xba\xf9\x7b\x72\xf3\x29\x9a\x53\x4b\x53\x4b\x0b\x69\xff\xa8\x5c\xc8\x5e\x2d\xd1\xde\x5e\x79\x56\x3b\x23\xe1\x00\x38\x4c\x42\x5c\xde\x71\xa8\x0a\xfa\xdd\x64\x28\x5e\x74\xb5\x4f\x33\xd3\xa9\x2a\xb9\x85\x6d\x3a\xb7\x99\x0f\xe4\x46\x45\xd8\xed\x50\xf3\xe6\xb2\xee\x9e\x50\x2e\x6e\x1e\x79\x84\x3f\x99\x1c\x25\xdf\xc1\x46\x9d\x1f\x0d\x7c\xb5\x0b\xd7\x3a\xab\x63\x2a\xde\xad\xeb\xd5\x87\x62\xe4\xdb\xad\x6c\x2b\xa7\xa2\x2a\xde\x73\x42\x58\x31\xdc\xb9\x12\xea\xd9\x00\xaa\xf8\x0e\xb7\xef\x00\xc1\x7c\xc0\xe4\xef\x70\xfa\x78\xb8\x7a\xd8\x9c\x65\xb9\x86\x96\x52\x8a\xdb\xbb\xa6\xdc\xad\xa9\x97\x67\x6c\xc4\x33\xd9\x35\x8d\x13\x9f\xaf\x04\x28\x29\x38\xa1\x1a\x3e\x16\xa1\x9d\x96\x78\xea\xa6\x79\xad\x06\xc6\x21\x19\x6f\x2b\x49\x46\x05\x77\xb9\xcf\x35\xd2\x99\xce\xdd\x10\x94\xde\x79\x79\x2c\xbc\x2f\x32\x64\xe7\x9d\xb3\x0a\xf2\x7e\x27\x07\x0e\x52\x66\xf5\x0a\x13\x65\x76\xed\xaa\x06\x93\x29\x84\x53\x57\x54\x60\x32\x7d\x72\x56\xb5\xf2\xff\x77\x86\x27\xc9\x62\x58\xc6\x56\x92\x42\x25\x1e\xf1\x93\x41\x95\xac\x22\xb6\x00\x9a\x4b\x76\x16\xf3\x8a\x20\x9c\x24\x8e\x82\x0c\x4b\xd5\x59\xc9\x91\x99\xea\x5b\x48\xbd\xc2\x21\xe5\x9d\x53\x61\xcc\x8f\x66\x36\x4a\xd5\xa0\x40\x7c\xa0\xac\x99\x17\xb6\xb3\x85\x96\x31\x35\x47\x35\x96\x4f\x3e\x90\x1b\xe5\x13\x18\xde\x0b\x16\xfe\xe4\x36\x48\xe1\xe3\xef\xea\x18\x53\xcb\xaa\x9e\x0a\xb9\x68\xf1\x5b\x72\xf5\x8e\x34\x0d\x69\x0a\x97\x09\xd7\x13\xec\x63\xf4\x1f\x95\x15\x4e\xfe\xa7\x90\x43\x76\xb8\x0b\xba\x31\x1c\xa9\x33\xed\x88\x00\xba\x76\x42\x16\xa0\x0f\x7c\x49\xc3\x3b\xe5\x52\x08\x0e\x9a\x90\x27\x4f\x72\xb2\xd1\xaa\xa7\xeb\x0b\xbb\x95\x60\x62\x16\x18\x83\x51\xee\x76\x97\x2e\xaf\x2c\x4a\x40\x09\x6d\x20\x2f\xd4\xf2\x12\x17\x72\x9c\x59\x68\xb5\xb0\x26\x6f\xb1\x5e\xd6\xef\xea\x6e\xac\x7e\x7f\xe9\xa2\xfe\xe3\x56\xc6\xc8\xcd\x3f\x79\x5d\x14\x4e\xf8\xb7\x9a\x87\x06\xe5\x46\x55\xcb\x2d\x6a\x3c\xe5\x2a\x88\x86\x97\x17\xe3\xde\x55\x3b\x0d\x17\x6d\xae\x17\x2d\x5a\x17\xda\xd9\xa3\xd1\xdf\x73\xe2\xe0\xc9\xee\xb5\xd0\xe5\x50\x16\xdc\x6c\x42\x1a\xb8\xe9\xb9\x63\xd5\xb6\x5b\xf3\x8c\xb2\x67\x6b\xfa\xfe\x52\x3c\xca\xbc\x6b\x6a\x51\xef\x4a\x86\x09\x02\x5c\x1c\x57\x06\xee\xd0\x92\xa0\x1e\xe9\xa4\x30\x8f\xdd\x04\x41\x52\x37\x0b\xda\x74\x1a\xfe\xd4\x1a\x71\x50\x38\x3b\x8d\xf8\x3c\x2c\xb4\xd3\xae\x22\x20\xe9\x7c\x11\xe1\xb8\x6b\x49\x69\x1a\x02\x32\xd0\x7c\x3d\x9c\xdd\xd5\x0b\x4c\xa6\xda\xc3\x4c\x3d\xf8\x0e\x93\xe9\x0f\xac\xde\x88\xcb\x96\xd3\xbf\x13\xfd\xf4\x6f\x98\x4c\x9f\xb5\xfc\x1d\xe0\x1a\xab\x47\x3f\x62\x32\x7d\xa5\xe1\x1a\xd4\x93\x3f\x62\x32\x7d\xdc\xb2\x8b\x35\xd5\xe8\x88\xd5\x9f\x24\x89\xc1\xd5\xa3\x7e\xff\x16\x93\xe9\x5b\x7a\x45\xda\x8d\x2e\xf0\xad\xec\xcf\xbb\x96\xeb\x9f\x3f\x60\x32\x25\x70\xa7\x7c\x57\x77\x97\x6f\xdb\x3e\x44\x5b\x27\x3b\x19\x6d\xe5\x1b\x15\x44\x0c\x2a\x62\x1f\x1f\x8f\x64\x38\x75\xe6\x74\x9a\xe6\xd2\xbf\xaa\x3f\x10\xed\x4d\xb2\x60\x4b\x94\x43\xe9\xd7\x37\x74\xa1\x67\x6b\x6c\xe7\xb8\xc0\x75\x55\xdc\x97\x14\x74\xdf\x91\xdd\xfd\xe2\x98\x8d\x58\x55\x55\x4f\x26\x93\xd2\xfb\xea\x49\xbb\x82\x45\x77\x1f\xc9\xb3\x5e\x73\xf2\x82\x8a\x35\x99\xb7\x52\xdc\xa9\xe9\x7a\x2e\xf9\x51\xac\x74\xa7\xf3\xdb\xeb\x16\x96\x7a\x5e\xef\x54\xea\x19\x80\xbe\x56\x73\x05\x1d\x7f\xdb\xca\x29\xcb\xcc\xd5\xed\x6e\x68\xae\x48\xf6\xd2\x07\x6c\x09\xd5\xb2\x2c\xa2\xfe\x9a\xea\x2e\x38\x61\x21\x7c\xae\x45\x83\xbf\xa2\x11\x3b\x65\x15\x5b\x7c\xb3\x9c\x03\x8a\x70\x52\xae\x23\x35\x5f\x5d\x96\xcf\xc1\x78\x5e\x3d\xd1\x2e\x96\x0b\xb6\x04\xa0\xcb\xed\x76\xb1\x04\x74\x49\xcd\x3d\x4d\xd5\x6c\x6c\xb7\x64\x0a\xf3\x83\xdc\xf0\xad\x43\x82\x4b\x41\x71\xa6\xd2\x7c\xbd\xfe\xc4\x08\xaf\x1a\x79\xa8\x81\xa4\xf2\x5d\xed\xce\xa3\xd7\xfc\xfb\x28\x27\x6f\x93\x00\x84\xef\x15\xff\x2e\xeb\xce\xe4\xdc\x33\x09\x7c\x74\xb1\x7c\x36\x65\xaf\xbc\xec\xf9\xaa\x25\xa0\x11\xaf\xbe\x93\x5d\xbc\xae\x79\x47\xbe\x27\xdd\x75\xcb\x3a\xf2\x1d\xa9\xa5\xdc\x97\x59\xc9\x5c\xfe\x4b\xc8\x26\x62\x8d\x01\x23\x2f\x07\x05\x40\x36\x8b\xb2\x13\x46\x47\xcf\x02\xd8\x72\x53\x92\x56\x6c\xc1\x97\xb8\xad\x66\xb8\xae\x8e\x4e\x1e\xb4\x0f\xa9\x29\xd7\x1e\x1f\x23\x7a\x51\xfe\xc7\xff\x05\x54\xf3\xd5\x65\xcd\x1f\xb7\x0d\x79\x24\x00\x41\xb1\xae\x8e\x66\xa3\x77\x9c\xd4\x1f\x76\xb2\x0f\x72\xa1\x6b\x13\x09\x44\xa7\xdd\xe6\x9d\xba\xc3\xcb\x19\xc4\x5d\x70\x7a\x55\x22\xbc\x09\xde\xb4\xc7\x27\xd8\xb4\x65\x8a\x8c\x36\x40\x0a\xdd\xb2\xda\x78\x32\xa4\x9c\x31\xda\x3d\x65\xf5\xbb\xb5\x9f\xad\x45\x3b\x4a\x9b\xe0\x14\x03\x35\xf7\xec\xe9\xa3\xb7\x3f\x7c\xff\xf4\x0c\xb9\x6f\xf4\xb1\x4b\x82\x4c\x53\x64\xfa\x7d\xdb\x2a\x7f\xce\xea\x33\x1c\x83\xde\x51\x5a\x7d\x90\x0b\xa3\x7d\xf6\xd5\x31\x54\xbb\x07\x6a\x25\xaa\x6e\x64\x9f\xc8\x7b\x5a\x15\xbb\x94\x15\x7b\x30\xd4\x3f\x12\x77\xe6\x66\x01\xd2\xff\x28\x0b\xb8\xef\x19\x09\x2b\x30\x60\x89\xbf\x55\xcf\x1d\x71\x55\x7f\x80\xef\xae\xab\x56\xfd\xff\x23\x15\x97\x4f\xd4\x35\x52\x5d\x4b\x36\x5c\x4a\xf2\xba\xe1\x6a\x23\x6f\xfb\x86\x5e\x5c\xa8\x46\x44\x5c\x99\x31\x9f\x9a\xd6\x5e\xf4\x15\xa8\x9e\x10\x8f\x6f\xf0\xc7\xf1\x37\xd2\x9b\xd5\xb4\x38\x3f\x27\x52\xba\xdc\xac\x49\x81\x6f\x21\x2f\xaa\x4a\x71\x87\xb0\x2a\xab\x58\x5f\x7e\x4f\x9d\xa2\x06\x4b\x70\x51\x90\xcf\xd7\x2d\x17\x5d\xb1\x0c\xd0\x82\x8a\x4d\x47\xc6\x92\x8a\x56\xa2\x18\xdd\xb5\x4d\x39\x0f\x7a\x96\x14\xbd\xe8\x0a\x8c\x9a\x2b\xb1\xd8\xcf\x9d\xe9\xdb\x87\xa1\x83\x3b\xdc\xc4\x07\xc1\x0f\x15\xc0\xe8\xfe\xf4\x0b\x66\xb0\xf6\xd4\x0b\x2b\x10\xf4\xc1\x74\xd9\x02\xa0\x31\x09\x70\x11\xa1\x02\xdf\xac\xa1\x9e\x04\x98\x7d\xf0\x24\x87\xf7\x22\xd9\x32\x1b\x04\xae\xfa\x98\x07\xb9\xc8\x76\x6c\x21\x96\x3b\x9c\x62\xc7\x65\xcb\x1e\x9d\x84\x45\xfb\xd4\xf8\x47\xc6\x8a\x68\x8a\xe7\x31\xe1\xf2\xdf\xce\xfa\x3e\xea\x6d\x6d\xb6\xdb\x43\x80\xdd\x7d\x75\xbf\xfa\x84\x88\xfd\x72\xf7\xae\x39\xfd\x58\x0b\x12\x90\x27\x70\xcd\x3f\x89\x40\x7b\x3f\xf0\x39\xb7\x02\xdf\xba\x0c\xc4\x72\x2d\x7b\xb2\xc8\x06\xec\xde\x6e\xa8\x76\x9f\x0d\x3c\xb8\x76\xff\xa3\xc1\xda\x13\x9e\xf2\xe0\x26\x92\x2f\x07\xdb\x09\xb9\xd4\x83\x1b\x09\x3f\x1b\x6c\x21\x60\x7a\x0f\x6e\x20\xf8\x6a\xb0\xfe\x80\x85\x3e\xb8\xfe\xe0\xab\xc1\xfa\x3d\x86\xfc\xe0\xda\xbd\x6f\x06\xeb\xf6\x99\xfb\x83\x2b\xf7\x3f\x1a\xac\xdd\x49\x0a\x87\x53\xbf\xfd\x64\xb0\xe6\x44\xe8\x38\xb8\x81\xe4\xcb\x03\xda\xf1\x18\xf6\x3b\xb6\xe3\x7d\xb9\xff\xf4\x72\xe0\xbd\x3d\xe7\x97\x2d\xc9\x49\x27\xec\x2b\xca\x2e\xd6\x64\x25\x5a\x1e\x1d\x6b\x52\xea\xfd\x49\x07\x9b\x76\xf3\xb5\xc2\xee\xe0\x95\xeb\x3a\x5f\xff\xb5\xfe\xac\x23\xa0\x7b\xe2\xfe\xf6\xba\x9c\x8d\xb8\x49\x4d\x2d\x39\x7d\x80\x2e\xf0\x7e\x57\xbe\x57\xf5\xfd\x8f\x4c\xb2\x8b\xf4\x58\x76\xa0\x30\xda\x44\x3e\x7d\x47\x2e\x5a\x4e\xce\x08\x6b\x9c\x43\xb4\x7b\x56\x85\xde\xfc\x1d\x11\xfa\x9a\x55\xdc\x7c\x59\x3c\x5a\xad\xc8\xb5\x9c\xe3\xfe\xa6\x30\x9d\x4c\x28\x18\xb0\xf8\xae\xe7\xc6\x3e\xc9\xc3\xb6\xf8\x09\x26\x60\x2e\x9c\xb5\xd4\xcf\xb8\x6b\x40\x19\x15\x80\x48\x08\xbf\xfc\xd7\xfa\x73\x49\x71\xf1\xdb\xa7\x6f\x0b\x9d\x16\xe1\x56\x07\x61\xde\xd2\x66\xce\xb4\x1d\x12\x17\xa0\x03\x1e\xb6\x45\x8a\xd0\xbc\xd5\xd4\xdd\x25\xe1\x81\x31\xb2\x9c\x61\xe6\xcc\x91\xc8\x0b\x52\x1b\x0c\xae\xbf\xdd\x8d\x48\xe4\xb1\x2e\xc2\x50\x32\xfd\xea\x39\x13\xb0\x45\x4a\x0e\x73\x73\xab\x03\x51\x9e\x37\x8e\x0c\x07\x27\x0a\xd2\x4d\xe0\xd0\x61\x24\x3f\x5f\x6f\x1e\xbd\x7d\xfc\x9d\x99\x31\x0e\x92\xf9\xc8\xf1\x97\x7c\xcf\x06\x55\xdb\x6e\x78\x73\x1e\xc4\x71\x7c\xad\xad\x99\x86\x2b\x63\x9a\xee\x57\x16\x6a\x12\x71\x76\xff\xaa\xb1\x5d\xd4\x9d\x78\xd7\xb6\x22\xc6\x0b\x4f\x4f\x38\x2b\x43\x83\xe8\xae\xbc\x86\x7d\xaf\xd5\x8f\x74\x45\xe6\xa6\xba\x42\x1e\x7d\x5d\xcb\x05\xf8\x6a\xbc\xa9\x79\x7d\x95\xb3\xc9\x85\x8a\x20\xcc\x2c\x52\x1e\xd8\x34\x1f\x7e\x63\x01\x33\x47\x4e\x1f\x74\xbb\x83\x21\xcb\xca\x4b\x24\xc5\xe2\x07\xed\x43\x06\xa2\x30\x5f\xd0\x45\xbb\x5c\x56\x44\xfd\x6f\x8f\x81\xe1\xcd\x9a\xa5\xe8\x3b\x6d\x57\x43\x80\xc6\xd7\x07\x4a\x2b\x5f\x2f\xbe\x77\x17\xb7\xbb\x1e\x14\x83\x7c\x27\x4c\xb5\x41\x5b\x49\xcf\x00\xb2\x05\x5b\xaf\x35\x3f\x4c\xa2\xa4\x0a\x53\xa0\x32\x21\xb2\xd0\xa7\x36\xe8\x13\xdd\xed\x41\x9c\xd9\xd3\xb4\x8f\x2a\x12\x07\x89\x44\x44\xe1\x7c\xa0\xa2\x17\x25\x43\x7e\x07\x79\xd0\x41\xb6\x3b\x08\xec\xe3\xf0\x6e\x9a\x58\xe5\x9f\xad\xb3\xff\xc0\x6b\x81\x36\xdd\x9c\xed\x76\x7b\xe1\xba\x74\xbb\xf2\x2c\xb5\xe0\x24\x3e\x4a\x32\x8b\x3d\xd7\x34\x68\x86\xed\x64\x8b\x29\x16\x11\xea\x95\x3f\x0d\x4c\xf5\xeb\x00\xc0\xa9\xaf\xd9\x15\x0f\xba\x29\xdf\x99\xde\xcc\x05\xfe\x45\x06\xa0\xa0\xfd\x57\xd9\xfe\xed\xc7\x70\xe8\x06\xe9\x00\x75\x0e\xbd\x06\xc3\xed\xf9\xe6\xf5\xd9\x5b\xff\x1e\xfb\x19\xef\x63\x73\x01\x33\xbd\x1e\xbd\x03\xa5\x87\x5c\xc2\xb2\xef\x3f\x84\x5d\xef\xc9\x59\xe0\x77\x5d\xb6\x9d\xd6\xd5\xdf\x15\x2e\xbb\x12\xf8\x81\x22\x5c\x3c\x79\xfa\xe2\xe9\xdb\xa7\x90\xf1\x5c\xde\xbb\xd7\xcf\x9f\x3c\xe3\xed\x55\x8f\x3b\x27\xe6\x78\x68\x17\x02\x71\x0a\xa4\x95\xb6\xe0\x5b\xd9\x56\x74\x61\xf4\xa3\xf7\x4e\x96\x90\x1b\xcc\xf5\xba\x21\x89\xbb\x66\x8b\xaa\xaa\xaa\x4f\x83\xaf\xaa\xa2\x98\x97\xac\x6a\x31\xaf\x8a\x53\xda\x54\xc5\x71\x8d\x4b\x67\xb5\x3a\x32\x56\x2b\xcd\xac\xb9\x34\x72\x84\x35\xdd\x8f\x54\x5c\x9e\xaa\x4c\x80\x36\x3d\x20\xb7\xb9\x91\xef\xd9\x94\xb4\x73\x66\x8b\x97\x1c\x80\x52\xc2\x3e\xb4\xa1\x3e\xd8\xbc\xa9\x6d\x11\x84\x22\x5f\xb7\xab\xfa\xf3\x0f\xdf\xbf\x78\x01\xaf\xe7\xdf\xcc\xfe\xfd\xff\x1e\xa8\x9c\x72\x81\x84\x2c\x52\x89\x1e\x96\x4b\x45\x2d\x91\xa1\x4a\xbf\x17\x23\x91\xcd\xf3\xa7\x94\xed\x74\x1a\x51\x80\x0a\x6b\xe4\x1a\xab\x52\x59\x32\x84\xf1\x03\xa9\x3d\xfb\x55\xc6\x19\x04\xc8\x34\xf8\x89\xad\x7f\xc8\x4c\x21\x74\xa4\x8d\x2d\x66\x4b\x84\xbb\x6a\xb1\x70\x8c\x49\xa6\xc3\x2e\x25\x64\xea\xec\x0b\x70\x07\x7a\x45\x8e\xf9\xc8\x2c\xce\x71\x7b\x2c\x7e\x53\x31\xb0\x62\xcd\xb0\x0e\xc4\x58\x2c\x11\xc2\xed\xb1\x8d\x68\xed\xec\x4a\x8e\xba\x05\x5d\x7a\xbe\x4c\xdd\x0e\x01\x8e\x54\x31\xa1\x4d\xf7\xbf\xff\xe3\xdb\xff\xfd\x1f\x4f\xaa\xc2\x2a\xfd\x07\x1c\x4e\x6a\x57\xc9\x0e\x30\xbb\x2f\x01\x6d\xca\x58\x49\xc2\x7d\xcd\xb5\xef\x1d\xac\x1a\xed\xce\x36\xab\x15\xe9\x3a\xf5\x0a\xb9\x98\x34\x57\xc2\xa4\x67\x0b\x4b\x28\xba\xf1\x55\x5a\x25\xd7\x82\x37\xf2\x23\xbe\xac\xdd\x09\xca\x98\x2e\xe9\xca\xe4\x3e\x55\x4e\x6f\x4a\xe3\xdb\x3c\x01\xfb\x15\x69\x5e\x92\xae\xab\xdf\x13\xdb\xe1\x91\x8e\x1c\x20\x2a\x72\x60\xfc\xef\xb3\x93\x79\xd0\x91\x44\xf1\x55\xb6\xb8\x56\x3e\xe9\xe3\x7f\x9f\xfd\x5b\x58\x38\x54\x60\x05\x25\xff\x3d\x2c\x19\x68\xa2\x82\x82\xff\x2f\x2c\x18\xa8\x94\x54\x41\xe3\xd6\x4e\x2f\x4a\xf2\x9b\xea\x3f\x66\xb3\x70\xea\x3c\x35\x11\x94\xdf\x05\x6f\x7d\x4d\xa4\x7a\x8d\xed\x5a\xf5\x79\xff\x92\xdf\x54\xdf\xcc\x66\x93\x09\x79\xf8\x6f\xb3\xd9\x76\xfb\x6f\xb3\x7f\xaf\xaa\x8a\xc8\x0f\x73\xc8\x29\xde\x87\xff\xfe\xcd\x37\xaa\xa4\x3c\xd9\xc3\x42\xd4\x82\x06\xca\xbd\xde\x55\xb7\x1b\xbe\x9e\x13\x7c\x45\xc4\x65\xdb\xcc\xc5\x0e\x6f\xaa\x7a\xea\x69\x1d\xf4\x47\x23\x6f\x30\xbc\x0c\xcf\x9d\xcd\xb4\x53\xe3\xa8\x82\x7d\xab\x5b\xda\xc4\x49\x70\x6d\x0f\x5a\x2f\xc0\x3a\x5f\xa6\xb5\xa8\x34\xfc\xe6\xb6\xad\xc8\x34\xdc\x07\x92\xdf\x16\xb5\xd8\x74\x98\x4e\x2f\x95\xe5\x50\xc1\xcc\x2a\x20\xe7\xda\x73\x46\xd3\xa0\xdc\x6e\x55\x00\xb3\x9b\x76\xfe\xb2\x9c\xda\x62\x2d\x9a\xb7\x2a\xb1\x18\x95\x2b\x05\xa8\x6f\x14\x77\x26\xea\x86\x6f\xb4\x4e\x00\xb8\x11\x82\x37\x92\x65\x50\x7b\xc5\x1f\x2c\xef\x99\x02\xee\x4f\x81\x40\xa3\x5a\x7d\xfa\xf6\x92\xb7\x9f\x58\xc5\x75\x0a\x38\x6d\x19\x0d\x77\x99\x98\x72\xfd\xe7\x5b\xf2\x59\xe4\x67\x8f\x27\xb3\x47\x2f\x4a\xea\xb7\xe1\xe7\x76\x84\xfa\x51\x5b\x05\x05\x2c\xd2\x75\x21\x94\x7a\xb2\x00\x2b\xa8\x20\x9f\xc1\x64\xb8\xe9\x50\xab\xef\x19\x5f\x7d\xe9\xbe\xaa\xdf\xb5\x3c\xf9\x46\x25\x55\x37\x4b\x66\x6b\x70\x4a\x4a\xf5\xfd\x1d\x96\x7a\xbb\x0d\x7a\x8d\xb9\xb7\xf2\x6d\x55\xdb\xa5\x96\x4b\xd9\xd9\xa5\x24\xfd\x4b\x29\x60\x29\xeb\xe9\x39\x70\x44\xf2\x6f\x00\xdb\xfb\xfe\xe9\xd9\x5b\x03\xf4\x27\xdf\x8c\x01\x52\x65\x2c\xda\x71\x71\x0c\x11\xea\xf2\xa1\x96\x7d\x03\x49\x5c\xb5\xf1\x2b\xc5\x60\x41\x49\xd6\x57\x54\x4e\xdb\x86\x29\x9d\x45\xe3\x1c\x6a\xa0\xbc\x8f\xf8\xa2\xb0\x5e\xe0\xf1\xb8\x69\x89\x42\x83\xef\x08\xb9\xd2\x80\xf2\xba\x86\x31\x65\xe3\x9b\x76\xc3\xc7\xf5\xf5\xf5\x74\xfc\x84\x36\xf2\xd7\xb8\xfd\x48\x38\xa7\x0d\x19\x53\x31\xfe\x48\xeb\xf1\x7f\xd7\x4d\xf3\x9a\xbf\xd6\x4f\xcf\x6a\xd6\xbc\x6b\x3f\xff\x76\xdd\xbe\xab\xd7\xdd\x7f\x1b\x4c\x7a\xa3\x77\x18\x2b\x3f\xca\xd3\x02\x8d\x98\x1b\x50\x74\xc2\x98\x31\xbb\x30\x03\xf3\xf9\x94\x76\xcf\xea\x4e\x7c\x0b\x1a\x0c\x0d\x31\xee\xcf\x46\x49\x0c\x3c\x75\xf8\x70\x77\x80\x0e\x14\x7c\x19\x47\x1c\xa2\xfe\x2a\x81\x15\x9c\xac\xd2\x6e\x82\x7a\x11\x6b\x95\xe7\x67\xed\x4d\xad\x0a\x4c\x26\x20\xb6\x1c\x55\x95\x18\xd6\x8a\xca\x3a\x1e\x8c\x57\x97\x72\x3f\x8a\x6a\x23\x2e\xee\xfd\xdf\x42\xd7\x51\xfd\xee\xec\xf5\xab\xa9\x62\xef\xe8\xc5\x4d\xc9\x35\x1e\x8b\xe6\x0d\x92\x60\x0c\x45\xba\x99\x38\x68\x0a\x5d\xe8\x51\xaa\xfa\xba\x1c\xba\x27\xe7\x72\xa2\x7e\x15\x98\x2e\xc4\x52\xb1\x12\x5c\xca\x79\x95\x9b\x66\x15\xd0\x02\xf0\x11\xfa\x67\x4c\x94\x07\x2d\x67\xa8\xfb\xcc\x14\xe6\xaa\x47\x8a\xc5\x5e\xb5\xeb\x02\xe1\x34\x52\x25\x29\xad\x42\x57\xe4\xf1\x15\x45\xa0\xe8\x8b\xb7\x90\xfb\x50\xa5\xf5\xbe\xff\x5f\x97\x42\x5c\x77\x51\x40\x0a\x92\x87\x89\xe1\x08\x8f\x8b\xfb\xf7\x21\x16\x45\x1f\x12\xdc\x64\xde\xf1\xf6\xd5\x9f\xda\xcd\xb8\xe6\x64\xbc\xe9\x28\x7b\x3f\x76\xd1\x92\x2a\x13\x0c\x6b\xc7\xb2\x4b\xe9\x1e\xd3\xc1\x22\xe3\xb7\x97\xb4\x1b\x7f\xa2\xeb\xf5\xb8\x16\x82\x5c\x5d\x0b\xb9\x29\x37\xf2\x50\xbb\x24\xea\xd3\xf6\x02\xfe\x36\x53\x37\xd6\x43\xc5\xe3\x4f\x97\x74\x75\x39\xa6\x6a\x3f\xaf\x5a\x76\x41\xdf\x6f\x38\x51\x10\x4e\xf2\x0b\x8d\xc0\xe5\xd5\x42\x3b\xf3\xf5\x74\xfc\x66\x4d\x24\x17\xd3\x11\x61\x9b\xfa\xf1\x92\x0a\xb2\xa6\x9d\x18\x5f\x6b\x15\x28\xd4\x65\xfa\x4c\xd8\x47\xca\x5b\x76\x45\x98\x98\xfe\xb5\x9b\xba\x1e\x29\x68\xb5\x71\x71\xcc\xa7\x57\x8a\x69\x73\xce\x28\x64\x87\xd3\x4b\x29\xa3\x7b\x24\x70\x61\x0b\xb5\x39\xe0\x0b\xb9\x91\xd5\xb4\x33\x74\xeb\xf9\xb6\xe4\xb9\xc9\x3e\xbe\x86\x4d\x26\x89\x4f\x26\xc0\x93\x28\x3e\xf5\xd4\xfc\x31\x5f\xdc\xaa\xdb\x62\x5e\x14\xc7\x04\x2b\xd7\xb2\xe2\xed\x25\x19\xbf\xab\x57\x1f\x08\x6b\xc6\xea\x1a\x6d\x48\xa3\x56\xb6\x66\x63\xa2\x4c\x6b\xda\xfd\xac\x28\x8e\xd9\x6e\xb9\xc3\x7d\x8c\x6c\xaf\xa2\x45\x7b\x76\xb7\x95\x58\x14\x8f\xd5\x81\x72\x4f\x9e\x28\xc5\x72\xbb\x2d\x00\x37\x6d\x1c\x3c\xb6\xaa\x8b\xaa\x90\xe7\xd3\xfd\x4b\x71\xb5\x96\x37\x67\x2b\x87\x65\xc0\x50\xff\x63\x76\x5a\x2c\x5e\x5f\x51\x21\x48\x33\x56\x22\xd9\xcd\xf8\xbb\xb7\x2f\x5f\x2c\x8b\x39\xc3\x0b\x2f\xac\x77\xac\xf7\xfe\xb8\x38\x56\xc9\xfc\x2f\xdb\xe6\xb8\x80\xd5\xdc\xf0\x35\x3a\x2e\xc6\xaa\x3d\xd2\x8c\x6b\x79\x7b\xe1\x42\xfb\xb6\x8c\xcb\xe2\xb8\x3d\x2e\x50\x81\xe9\x52\x0b\xa3\x7f\x61\x52\x1a\x75\xaa\xd1\xcc\x42\xdf\xee\xe4\xee\x23\x09\xec\xd5\x08\xbc\xda\xcc\xaf\x8a\xb9\xdc\xbe\xbb\x9d\x97\x4a\xbd\xf5\xc2\x32\xf4\x82\x11\x73\xcf\x3b\xc6\xc1\x3e\x93\x3c\x0f\xd6\x47\xe8\x5c\xd9\x51\x32\xce\x63\xa8\x04\x2f\xb8\x47\xeb\x75\xf4\xa2\x44\x68\xb7\x73\x06\x0a\xda\x63\xa0\x10\x82\xff\xd3\x38\x3d\x58\xdf\x9b\x03\x0d\xa5\xb2\xf3\xbd\xb6\x51\xd0\x62\xec\x1f\x5a\xf0\x14\xf0\xa8\xee\xad\x4c\x48\x54\xf8\x92\x32\x2a\x94\x92\xeb\x1e\x04\x38\xdd\xd3\xa6\x8a\xb0\x94\xe0\x35\xeb\x2e\x5a\x7e\xd5\xb9\x3f\x7b\x4b\xb0\x8d\x7c\xdc\xfb\xba\x49\x3a\xe8\xbd\xd4\x8e\xf3\x7d\xaf\xdf\xb5\xad\x0a\xb0\xdb\x6b\x68\xca\x18\x91\xf7\x5b\x8e\xf5\x74\x59\xa8\x93\x9e\xe7\x7d\x95\xc6\x25\xfa\xdf\x0e\xb5\xda\xdd\x37\x51\x14\xf7\x14\x86\x48\x77\x0f\xf2\x6e\x47\x03\x00\x12\xdf\x6b\xf1\x56\x48\xeb\xb8\xc6\x1d\xde\xe0\x35\x5e\xe1\x0b\x7c\x89\xaf\x71\x83\xaf\xf0\x0d\xfe\x18\xd1\x3c\xbd\x28\xef\x4c\xf6\x8a\x01\xd0\x20\x04\x26\xb8\xee\xbf\x4e\xfe\x32\x2d\x17\xb3\x7b\xff\x6f\xb9\x3d\x59\xcc\xee\x7d\xb3\x44\x7f\x99\xde\x47\x7d\xa0\x87\xde\xc9\x27\x2f\xc3\xff\x8f\xbd\xbf\xfb\x92\xe4\xb8\x0e\x03\xf1\xf7\xfe\x2b\xaa\xf3\x47\x17\x32\xdc\x51\x35\x55\x33\x03\x82\xaa\x9e\x44\xff\x06\x5f\xc2\x98\x00\x06\x07\x33\x14\x4d\x15\x8a\x73\xb2\xab\xa2\xba\x83\x93\x15\x59\x8c\x8c\xec\x99\x46\x57\x9d\x23\xcb\x34\x4d\xcb\xb2\x56\x82\xbc\x96\x8f\x0f\xc9\xc3\xe5\x6a\x65\x5a\xab\x95\x45\x1f\xad\x16\x94\x64\xf9\x81\x10\x08\xff\x19\xc0\x23\x5f\xf6\x5f\xd8\x13\xdf\x11\x99\x91\x55\xd9\x3d\xdd\x03\x80\x9c\x79\x98\x8e\x8a\x8c\xcf\x1b\x37\x6e\xdc\xb8\x71\x3f\x30\x45\x45\x27\x65\x1d\x7e\x1c\x32\x75\x7e\x0f\xfb\xc3\x1b\xfd\x81\x8c\xa0\xc4\x99\xe0\xe3\xf4\x04\x75\xa2\x3d\xaf\xf3\xbd\xc8\x9c\xa1\xe5\xf2\x88\xa6\x33\x24\x4f\xc9\x13\x44\x0b\x41\xa8\xe6\xb2\x31\xc8\x8f\x57\x62\xca\xd8\xde\xfb\x11\xd8\x61\xfd\x57\xee\x29\x53\x20\x26\xff\x42\x91\xe5\x29\x52\x32\xef\xa7\x57\x40\x29\x56\x32\xff\xb7\x57\xc4\x6a\x4a\xb2\x5a\x96\x2c\x28\x15\x38\x99\xfc\x2b\xb3\xac\xa6\x27\xb3\x69\xf9\x49\x18\x3d\x9c\x68\x92\x28\xf3\x94\x5d\x13\x53\x09\x99\xe9\xeb\x87\x32\xff\xb7\x2c\x62\xcc\x29\x98\x49\xca\x0f\x5a\x0d\x33\xf3\xfb\xf1\x54\xf1\x7d\x55\x2d\xdd\xa7\xa3\x9a\xef\x6b\x5b\xc9\x02\x9e\x36\xbd\xaf\x4a\xa3\xba\xb0\xda\xf5\xae\x36\x8c\xfc\x58\x57\xf4\x0f\xa8\x5b\xc9\xa2\x15\xed\xff\xaa\xc6\x94\x2c\xe4\xdb\x03\x54\x94\x9e\x64\x11\xdf\x40\xa0\xa2\xb7\xa4\xa0\xe8\x58\x0c\x78\xaa\x47\xf2\x73\xdd\x40\x20\xa0\x85\xe3\x16\x75\xf5\xe3\x03\x8a\x34\xa6\x53\x45\x40\x92\x63\x7f\x91\x3c\x3d\x5a\xe6\xfd\x54\xc8\xe5\x28\xc1\x32\xf7\x97\xb7\xc8\x41\xdd\x5f\xb6\xe9\xab\xc2\x66\x07\xdf\x2b\x88\x1e\xd0\x12\x66\x81\x4c\x55\xd8\xde\xe0\x93\xb9\x3f\x43\xdf\x30\x88\xf9\xbf\x77\x4c\x6d\x07\x44\x0b\xbf\x01\xce\xe4\x3a\x5f\x67\xf5\xaf\xb7\xdf\xbe\xa3\x3b\x9f\x06\xbf\x3a\xd5\x97\x7e\x81\xfb\xfa\xfc\x4a\x70\x65\x61\x52\x86\xec\xc7\xd4\xff\x28\x1f\x34\xec\xe7\xc2\xff\xfc\x96\x38\x64\xed\xe7\xbc\x02\x11\x79\x50\xda\xef\x65\x85\x40\xa8\x23\x46\x3d\x48\x48\xc0\x9d\xfa\x65\xac\xf9\x23\xb3\x69\xf9\x49\x5b\xc8\x31\x9d\xd2\xeb\xe9\x68\x77\x33\xef\xa7\x2c\x20\x7d\x63\x1a\xeb\xec\x84\xf8\x3d\x3e\xb0\xdc\x88\xa0\xbd\x2a\x9a\x7f\x42\x4d\xb1\xf0\xf9\xc4\x2b\xc3\xa8\x6e\x4d\x51\xe3\xb9\x1e\x51\xcc\x64\x7a\x08\xf5\x05\x4d\xff\x96\x87\x1a\x0b\x18\x65\x78\x3a\xd7\xbc\xaf\x26\xde\xac\x89\x95\xba\x6a\x3d\x70\xb7\xcd\x18\x29\xad\x93\x03\x34\x42\x7d\xc3\xf5\xd5\x75\x51\x94\x3d\xfb\x3a\x3c\x19\xf1\xb2\xf7\x85\xe5\xa1\xc5\xd2\x35\x32\xd1\xd4\x77\x41\xf6\x39\x99\xa3\x63\xc0\xdb\x72\x96\xa6\xc6\x46\x95\x4d\x63\x3f\xda\xb2\x55\x55\x5e\x40\x6f\x27\x00\x3d\x97\x3f\xfe\x4c\x0c\x1c\x1c\xc7\xbc\x4a\xd4\x50\x31\x44\x90\x0a\x06\x0d\x3e\x64\x9d\x4b\x6c\x18\x3b\xda\x70\xe2\x4f\x67\xde\xbe\x13\xaf\xf0\x84\x82\x4a\xa4\xea\x83\xef\x7d\x16\xc9\x70\x33\x15\xca\xef\x78\xf5\x16\x04\x01\x22\xe1\x1b\xf1\x21\x3a\x15\x76\x1e\x8e\x41\x72\x83\x01\xa9\x35\x08\x4f\x92\x84\x28\xe7\x80\xc7\x69\x61\xce\x43\xd5\x91\x94\xfe\x0a\xd7\x33\xd1\x0c\x35\xd5\x7a\xc5\x7e\xa9\xd6\x93\xf2\x66\x39\x30\xd7\x3e\x54\xbb\xa0\xf7\xa6\xbe\x5a\x21\xc7\x29\x68\xb3\x73\x21\xad\x4d\xf1\x50\xfa\x09\x51\xaf\xa3\x66\xec\xb2\xf3\x7b\x4b\x34\x15\x7e\x25\x62\x0a\x40\x00\xcc\x26\x44\x88\x52\x90\x70\x67\x7f\xc7\xcc\xc0\x2a\xa5\x35\x43\x47\xbc\xbe\x3a\x8e\x07\x62\x2a\x44\xa7\x58\x1b\xa6\xc9\xce\x8f\x10\x7b\x53\x04\xf7\xfa\x2a\x3a\x8d\xc5\xd8\x55\x40\x70\xb0\x53\x08\x57\xff\x0f\xd1\xa9\x02\x69\x7d\x1d\xbb\xdd\x58\xb5\x53\xff\xa6\x1a\x23\xfd\x87\x98\xcc\xa0\x6b\xeb\x0f\x60\x7a\x20\xed\xda\x52\xa1\x5c\xaa\xa3\x0c\xf7\x97\x79\x76\xba\xc8\xe9\xf2\x18\x4f\x55\x97\xa6\xd6\xdb\xf6\x93\xf4\xdc\x25\xa0\x05\x46\xa2\x19\x61\xb8\x2e\x1e\x8b\x72\xed\x50\xd2\x54\xd4\x28\xea\x19\xf6\x43\x22\x3c\x8e\x35\x17\x6a\x8c\xa9\x62\xa1\x29\xa6\x67\x43\x0b\x6d\x80\x23\x6e\x03\x47\x7c\x11\x38\x52\x0e\x47\x3c\x49\xa8\x63\x18\x15\xd4\x6c\x92\xae\x2f\xf4\x34\x5f\xcb\x29\xc2\x47\x84\x8f\x54\x6a\xf3\xf0\x46\xc0\x93\x2e\x04\x56\x0b\x61\xb7\x4a\x93\x17\xaf\x4b\xdb\x28\x1d\x5d\xbb\x69\x97\x78\x1a\x7f\x9f\xcd\x1a\x09\xc0\x18\x3f\x10\x31\x85\x42\x69\x50\x18\xfc\xc9\xf7\xcd\x6d\xbb\xf8\xa0\x01\xa3\x1d\x87\x08\x86\x6e\x55\xe0\x70\x9b\x08\x6b\x5e\xdb\x56\x6d\x7b\xa8\x46\x6e\x17\x4e\x69\x1b\x9c\x75\x63\xb1\x4d\x47\x47\x95\xb2\x4a\xf8\x78\x0e\x3f\xb0\x03\x14\xb9\x97\x76\xd8\x98\x4e\x8c\xe3\x19\x0c\x1a\x82\x38\x9c\xe1\xd9\x48\x04\x6a\x91\xde\x15\xac\xde\x98\xd0\xc3\x6c\x84\xd3\xc6\x93\x6e\x03\x66\xd0\x36\x98\x41\x2f\x86\x19\xc6\x35\xa8\x7e\x56\x30\x8b\xe7\xac\xae\x58\x89\xc6\x02\x15\x8e\xc4\xb5\x79\xd6\xd0\x65\x92\x52\x59\x9f\x3e\xc2\xb5\xbd\xf5\x5f\x6a\x54\xd7\x94\x86\x37\x75\x6d\x9e\x95\x62\x02\x1d\xe7\x13\x58\x24\x69\x33\xa1\xd9\xd9\x46\x68\x52\xc8\x44\x18\xc2\x71\x3e\x49\x0a\x2d\xff\xc7\x6b\xd8\x54\x25\xf0\xa4\x82\xe7\xb1\xc3\xda\xca\x85\xc1\x64\x66\xc2\xb0\x8b\x25\xeb\x63\x72\x82\x68\x81\x84\xc7\x7e\x01\x7d\xcb\x91\xb8\x27\x60\x9e\xe0\x3e\x49\x17\x48\xeb\x28\x89\x02\x9b\x54\x38\x03\xab\x9b\x43\xac\x56\xd6\x65\x43\xc0\x4e\xda\xed\x4a\x05\xc9\x0e\x1d\xa7\x93\xf5\x5a\x04\xab\xd6\x53\xbc\x9d\x3d\x4a\x4f\xd5\x9e\x6c\x72\x5e\x9f\x32\x46\x2d\xbb\x62\x98\xaf\x6e\x37\x4a\x45\x6d\x3e\x79\xd6\xd7\x2c\xa5\x68\x3e\x4c\x40\x9a\x3a\x68\x18\x8f\xe3\xda\xbc\x61\x08\xab\x15\xe9\x76\x23\xc5\xc3\xca\x35\x30\x33\xf7\xc7\x71\x67\xdb\x18\x1a\x27\x19\x47\x78\xa6\xa6\x68\xda\x5e\xad\x22\x3c\xab\xe4\x81\x5a\x87\x3e\xc5\xbb\x58\xc7\xbd\x94\xcc\x7a\x1c\x93\x82\x43\x30\x5f\xeb\x63\x69\x3e\xc3\xce\x35\x90\xdd\x98\x89\xd7\x32\xa7\x5f\xbb\xd4\x40\xce\xb9\x89\xb7\x7d\x1a\xcb\xed\xa0\xfa\x1a\x3a\xd5\x9a\xfa\x96\x21\x02\x78\xb9\xc8\x83\x35\x1b\x37\xf9\x69\x9c\xac\x56\x6c\x8c\x26\x40\x44\xb1\x08\xdd\x34\x36\xaa\xf6\xdb\x40\x54\x28\x9d\x1e\x7b\xfb\xd5\xba\x3d\x81\x39\x38\x43\x1b\x6f\x09\x04\x70\x7c\xd0\x37\xde\x24\x49\x72\xb1\xd5\xbb\x5d\x5c\xbb\xff\x58\x9f\xbe\x44\xba\x20\xf3\xa9\x54\x73\x45\xd7\xa7\xaf\xac\xaa\xbc\xec\x35\xf4\xd0\x38\x6f\xab\x3b\x41\x60\x24\xe2\xfe\xf8\xde\x90\x84\x86\x52\x5f\xba\x58\x51\x34\x50\x1f\x15\x5e\x54\x20\x73\x14\xa4\xc9\x60\x3f\xb5\xee\x2f\x52\x7d\x14\x14\xb0\x4c\xf0\x38\x9d\x40\xad\x36\x62\x5f\xec\xcd\x12\x39\x00\xe7\xfc\x65\x09\xe0\x34\xc9\x44\xe7\x70\x9e\x64\x26\x14\x92\x0c\xb5\xa9\x7f\x25\x36\x29\xbc\x9e\xd8\x9f\x52\xf9\x75\x0a\xe0\x1c\xc4\x85\x53\x4c\xaa\x12\x2b\x23\xc7\x02\xce\xc1\x4e\x3e\x4e\x27\xc2\x29\xe2\xd4\xf0\x07\x53\x71\x26\xac\xd7\x7c\xec\xc7\x89\xb6\x03\xda\xb1\x4e\xfe\x1b\xe1\x05\x8f\xc5\x25\xa1\x69\xc5\x2e\x73\x29\xc4\x32\xe8\x73\xa8\x05\x44\x31\x10\x67\xb1\x80\xa8\x88\x1c\x78\x21\x88\x16\x00\x96\x20\xce\x9b\x20\x9a\xc3\x52\xaa\x2d\x65\x89\xb1\x76\x19\x15\x06\xb0\x85\x02\x6c\x2b\x50\x66\x02\x94\x1b\x27\xd6\xc4\x9f\xc9\x68\x50\x2c\x7c\x37\x11\x91\x2e\x24\x9f\xa6\x59\x00\x13\xad\x87\x3a\x2e\x27\xfd\x53\x9d\x02\x2f\x7c\x8f\x0c\x46\x2e\x14\x70\x43\xa2\xec\x0d\xce\x39\xc2\xcf\xb8\x75\x19\xa0\x7d\x53\x3d\xc7\x1b\x6f\xa3\x79\x23\x47\xb5\x27\x37\x70\xc4\x56\x60\x6e\xa4\x61\x76\x85\xb4\x6b\xa6\xd7\x51\xb6\x44\xb4\xa6\x99\x68\x94\x6e\x14\xb6\xf3\x25\xb8\x3b\x37\xd1\xc7\xe4\xdf\x2a\x3a\x6b\xdf\xf7\xb2\x4d\x5d\xd8\x5c\xe4\x1a\x02\x99\xd9\x50\x9e\x96\x4c\x79\xa1\xcd\xf8\x09\x36\xd8\x27\xb7\xbc\xcc\x7d\xe2\x84\xf9\x94\xd1\xcb\xc8\x64\x47\xfa\x55\xda\x38\x2a\x0a\xd6\x7a\xf4\xeb\xc0\xa0\xcc\x4e\xf1\x9c\x06\xe9\x81\x29\x06\xda\x16\x0b\x70\xd2\xf6\xa3\x64\xa9\x37\x0f\x27\x35\x0e\x65\x0b\xe3\x0b\xb9\xe0\x43\x34\x9b\x1c\x3b\xca\x58\x0f\x82\x71\xc6\x5e\x49\x59\x1a\x58\x47\xb3\x39\xa4\x96\xe4\xb1\x8e\x74\xc5\x99\xdd\xd7\x68\xbe\x50\x8a\x40\x82\x79\x57\x21\x22\x2b\x5d\xb8\x23\xad\x1f\xfe\xe2\x6a\xdf\xae\xdd\xa8\xa1\x40\x04\x77\x1d\xd6\xdc\x0d\x34\xe8\x44\x7d\xe0\xf0\xd9\x71\x3c\xe4\xc9\xc2\x0b\x5b\xd0\x37\x33\x0c\x71\xf9\x2e\x3d\x20\x10\x01\x81\x00\xdb\x63\x9b\x55\x96\xce\xdf\x33\xbc\x63\xa4\x3d\x59\x57\xe0\x16\x52\x6a\xd3\x21\xfc\x3d\x39\x6b\x53\xdb\xc4\x0d\x6c\xe6\xf8\x68\xaf\xb7\xed\x07\xd0\xdd\xe8\x16\xc0\xa0\x91\x3a\xf2\xac\x6f\xc0\xc6\xd9\x43\xea\xb8\x54\x73\x9c\x09\x17\xdd\xee\x26\x9f\xb0\x9a\xfe\xd4\x05\xb0\x95\x7b\x94\x13\x96\xcf\xb6\x3d\xc6\x13\x4e\xf9\xc7\x68\x52\xcd\x56\xcc\x93\x1a\x7f\xc3\xe9\xd2\x86\x82\x75\xbb\x71\x13\x0d\x0b\xed\x2b\x43\xad\xe0\x67\x46\xc4\x82\xc3\x72\x89\x59\x6d\x79\x1b\xa2\xdf\x6c\x5e\xe1\x4a\x70\x44\xb4\x81\xc5\x46\xd6\xee\x80\x84\xee\xce\xa8\xe1\xee\xec\x46\xb2\xaa\x74\x38\xce\x27\xc6\x5c\xa5\xf6\x65\x47\x60\x04\xe9\x07\xa6\x17\xa7\xe2\x69\xd2\xe1\xab\x2b\xce\x1a\xaa\xae\x24\x9b\x08\x96\xe4\x46\x74\x24\xd9\x7a\x81\x00\x81\x8d\x07\x90\xf5\x0b\x4c\x8e\xca\x2c\xa5\xc2\xc3\x43\x3c\x80\x34\xf0\x32\x0c\x64\x8c\xda\xa5\x69\x8c\x37\x6d\xbe\x36\xb5\xec\x78\x8e\x40\x1b\xa2\x1d\xfa\x7b\xd3\x37\xdc\xfa\x1a\x1f\xdd\x2b\x68\x9a\xa5\x14\xcd\xde\x4c\x97\x4b\x4c\x8e\x78\x2d\xa7\x0a\x80\xb5\xa5\x6f\xd9\x86\x57\xcb\x38\xac\xc5\x33\x29\xaf\x54\xab\xa1\x42\x1f\x4a\xc6\xd2\x7b\x61\xd2\x32\x66\x00\xed\x60\xbc\xaa\x4e\x10\x73\x51\xcc\xeb\xcf\x2b\xe9\xe1\xbb\xf4\x05\xea\x5b\xbd\x72\xaa\x68\x94\x1c\x78\x09\xe2\x41\x40\x5b\x98\xeb\x07\x2d\xeb\xd3\x35\x88\x47\x8d\x7e\x3f\xce\xf1\x20\xb6\xa9\x91\x26\x5f\x69\xee\xd1\xd4\x82\xdc\x13\xe7\xf8\x6f\x40\x3d\x3f\x6c\xa2\x05\x83\x19\x41\x18\x12\xee\x9d\x48\xd2\x57\x23\xec\x7f\x30\x4d\x89\x11\x95\xc4\x04\xf8\xf8\xe9\x51\x75\xe3\x4e\x37\x4f\xa4\x4f\xde\x98\xa8\x5b\x93\x7a\x00\x33\x1a\x9d\x32\x66\xa8\x23\xa0\xcc\x21\xd5\xb7\x06\x6d\x6b\x1a\x92\xf6\x1a\x49\x6f\x2a\x9f\x0f\xe3\xb4\x41\x86\x5d\x15\xdf\xba\x67\x4f\x3a\x49\xf2\xf5\x85\x5f\x09\x7d\x78\xd8\x67\x0b\xff\xf5\x0e\xe6\x09\xe6\x4c\xa0\x14\xc6\x74\xbb\xbb\x3a\xe9\x39\x87\x77\x42\x43\xe3\xd5\x2a\xe7\xa0\xf5\xf6\x44\x95\x72\x1a\x00\x07\xa1\x43\x3d\xe8\xd0\x2a\x74\x3c\x22\x4b\x3d\xbd\x03\x0f\x58\xca\x86\x4d\xb0\x6a\x62\xf1\x0a\xe5\x1c\x79\x23\xde\x61\x17\xef\xf0\x6c\x84\xfb\x78\xb6\xde\xa9\x52\x7e\x7e\xe5\x17\x38\x59\xac\xd7\xeb\x0b\xbe\x3e\x49\x6f\x79\xf7\x2a\x55\xe5\xeb\x98\xb3\x1a\xe6\x11\xc7\x3f\xa5\x70\x7b\x20\xe7\x9b\x81\x9c\x4b\x20\x37\x3f\x34\xe4\x9b\xa0\x6f\xb4\x33\x7c\xd8\x6b\xe6\x23\x4d\x70\x5f\xfa\x31\x0a\x87\xc6\x36\x78\x85\x42\x78\xb5\x06\xb0\x70\xb8\x17\xcb\xb8\x94\xc9\x60\xbf\xbc\x65\x78\x96\x52\xf3\x2c\x59\x82\xc7\xe5\x04\x4e\x37\xd3\x96\xcc\x59\xe3\x9d\x62\x5c\x4e\x14\x62\x4c\xf9\x82\x67\x7c\xc1\xd7\xf5\xa3\xde\x5d\x70\xcf\xc9\x50\x83\x0e\x7f\xfd\xa2\xdd\xa0\xa7\xd3\xa4\xaf\xfd\x54\x5c\x0d\xa5\x45\x81\x8f\x88\xf6\xa0\xbb\x40\xf4\x28\xe8\x71\xe8\x6c\x49\xf1\x22\xa5\xa7\x9c\xdd\x10\xc1\x19\x44\xc9\x99\xea\x0d\xa3\x62\x34\x56\xd2\xd6\x09\xac\x9c\x69\x9b\xb8\xbc\x46\xf7\xbe\x7e\xe0\x0e\xd3\x18\x9a\x85\x78\x7b\x65\x7b\x6e\x19\xb8\x31\x9a\x58\x2e\xb0\x42\xab\x61\x9a\xa8\x1e\xc1\x0e\x2f\x28\x14\x0f\x1d\x17\x9f\x63\x34\x81\xa9\x21\xe1\xca\xd3\x71\x9b\x7b\x94\x09\x44\x87\xb7\x04\xa2\x33\x8d\xd9\x70\x5c\xba\xd9\x86\x63\x73\x73\x30\xb9\x4d\x77\xb2\x4d\x0d\x06\x63\xde\x79\x83\x73\xcc\x57\xb6\x35\xd4\x10\x49\xce\x6b\xce\x94\x69\xdb\x68\x30\xaa\x9d\xd7\xa4\x2a\xd1\xb6\xc1\x2d\xad\xb5\x6d\x2a\x10\x00\xb0\xba\x08\xdb\x1b\x69\x0e\xa2\x67\xda\x72\xe3\x82\xb5\x69\xb2\x39\x4e\x9e\xbd\xd3\x3b\x45\xda\x34\xd9\x1c\xb3\xcf\xb2\xe1\x4e\x91\xcd\x4d\xae\x9d\x9d\x54\x47\xfe\xe0\x9e\x0a\xf6\x78\x0f\x93\x23\x6b\x96\xdd\xd0\x57\x4b\x59\xc5\x25\xf7\x55\xd9\x36\xed\xfb\x11\x27\xdc\xb9\xba\xa9\x6d\xa7\x2b\x9d\x54\x65\xa7\x5d\xe5\xc4\x9e\x46\x3f\xde\x36\xbd\xaa\x4e\x42\xfb\xf7\x1c\x8b\x94\x9e\xb4\x5f\xa2\xd0\xbe\xbe\xa2\xae\x42\xfb\xfd\x8a\xba\x72\x0b\x5f\x19\x76\xfb\xc5\xb7\x76\x53\x17\xaa\x3a\xb2\xd4\xdd\x81\xdb\xb2\x87\x2d\x4f\xd8\xf0\xf0\x3c\xf2\x5c\xc9\x79\xab\x5b\x73\x99\x65\x50\x4b\xee\x47\xe3\xc9\x5a\xcb\xff\x95\x88\xe2\x4d\xc4\x52\xad\xdf\x86\xe7\x71\xc1\xaf\x5b\x22\x5a\x49\x52\x00\xdd\x56\x59\x71\xbb\x23\x5c\x24\xc1\x2c\x29\xe5\x73\xe0\x34\x29\xed\x73\xa0\x7c\x22\x4c\x32\x38\x15\x2d\x99\x37\x83\xa9\xd4\x3d\x33\x62\xc9\xb9\xc3\xd8\x13\xc3\xd8\x1f\x27\x03\xb8\x4c\x4c\xa4\x84\xe3\x5b\xcb\xfd\x63\xcd\xdc\xcf\xe0\x22\x21\xe3\xe3\x09\x3c\xad\x0f\x67\x01\xe0\x49\x72\x2a\x87\x73\x94\x9c\x7a\xaf\x93\x47\x20\x9e\x39\x0f\x96\xde\x83\xe3\x0c\x1e\x81\x9d\xf9\xf8\x78\x92\x9c\xac\xd5\xc8\xe7\x5a\x6c\x99\x36\x8b\xb6\x24\x17\x2b\xae\x96\xae\x72\x41\x2b\xf1\x14\x80\x4d\x82\x60\xd6\xcf\x30\x79\x58\x80\xd6\x82\x2e\x59\x1c\x6e\x11\x6e\x39\xa2\x94\x2b\x91\x68\xc1\x36\xa2\x2c\x57\x88\x63\x06\x19\x74\x1e\xa6\x55\x34\xac\x53\x06\x7b\xf9\x88\xc0\xc4\x75\x61\xab\xa3\x78\x80\x98\x82\x73\x3e\x21\x28\x1b\x79\xec\x48\x9a\x37\x46\x94\x6b\xf1\x72\x00\x9d\x1b\x08\x9d\x08\x27\x6c\x68\x22\xd2\xfc\x22\x8b\xb7\xbd\x11\xa8\xe0\x90\x0d\x71\xc6\xb5\x18\xa3\x11\x77\x84\x40\x0b\xcf\xa4\xcd\xfb\x2c\xa9\xc0\x47\x84\x21\x37\x0e\xa0\x03\x4f\x56\x6e\xa0\x52\x26\x7c\x34\xef\x8a\x26\xda\x46\x6f\x01\x42\xd3\x53\x09\xab\x37\xbf\xc0\x29\x81\x36\xbf\x59\x59\xed\xca\xea\x78\x35\xee\x5a\x74\x71\xb4\x80\xdb\x88\x31\x9b\x90\x56\xe1\xec\xc5\x1f\x24\xda\xbe\x3f\x88\x10\x53\x4f\xf0\x0c\x31\x4e\x27\x5a\x6d\x5e\xc6\x99\x10\x59\x3b\x35\x7d\x44\xd9\x14\x28\x12\x1c\xd2\x57\x38\x30\x8f\x13\x0d\xf0\x8b\xb1\x0c\x54\x5f\xc2\xb3\x87\xe8\x74\x84\x20\xd5\x6f\xac\x69\x71\x3c\x62\x1e\x29\xe0\x67\xc5\x08\xaf\x85\xbf\xc1\x00\x64\x75\x4b\xf6\x7d\xdd\x55\x65\xc2\x4a\x23\xc9\x0f\x70\x5f\x02\x70\xe6\xca\x78\x4a\x7d\x14\x18\x11\x52\x96\x0c\xc4\x09\xa3\x8e\x84\xec\xd6\x74\x3f\xd3\x47\xc2\x3c\x29\xc7\xd9\x64\xa7\x18\x67\x4d\xaf\x30\x6a\x4c\x73\xb0\x5e\xe7\x56\x84\x23\x35\x73\xf4\xda\xbc\x81\xc9\x43\xb3\x26\x62\x15\x14\x69\xed\x76\x9d\x57\x21\x91\x33\x3e\x56\x8b\xb2\x74\x72\xf6\xe3\x3c\xc9\x57\xab\xb3\x35\x90\x59\xc9\x99\x00\x1a\x9a\x8d\x96\xeb\x75\xae\xdf\x0d\x73\xf5\x52\x78\xae\x67\x1c\xd2\xf0\x68\xe3\xc9\x24\x5a\xa2\xb0\xf6\x63\xd6\x24\xe8\xdb\x8a\xd8\x68\x37\x49\x62\x7a\x2e\x94\x06\x2e\x08\x25\x55\x64\x9a\x2a\x2a\x3f\xa1\x1d\x45\x21\x5d\x16\x33\x70\xe0\x6d\x88\x1e\x6a\x4f\x0a\xa5\xf1\xe7\xd2\x77\xeb\x7f\x8c\x00\xa3\x7e\xd6\xc1\xa4\x43\x00\x4d\x82\x5a\xfa\x39\x44\x1e\x2d\x17\x4f\xbf\x9b\x23\x51\xe5\xa0\xaa\x90\x6d\x8f\x89\x1c\x68\x2f\x03\x5b\x03\x54\xd5\x9b\xf1\x35\x7f\x01\x80\x58\xc7\xf9\x15\x8a\xdc\x63\xec\x40\x11\x4f\x80\x54\xdb\xb6\x73\xb9\x10\xd0\x1c\x6f\xd2\x64\x8c\xf8\xe4\xf9\xa2\x8f\xd1\x04\x48\x95\xf4\x98\x26\x54\xaa\x77\x07\xc3\x80\xa2\x84\x02\xa9\xb6\xe1\xbe\x30\x34\x7a\xa9\xaf\x8d\x43\x6b\xa4\xb2\xd5\x6a\x97\xe3\xca\x6a\x25\x82\x5b\xf1\xa4\xab\xf5\xfb\x60\x51\x16\xec\xe2\xcd\x73\x86\x8d\x89\xd9\xed\x0e\x92\x7a\xeb\x61\xe1\x7c\xa3\x89\x8e\xd0\x01\x9f\x21\x86\xe8\x02\x13\x6f\x47\x8a\xc7\x44\xe2\xa9\x83\xab\xf9\x49\x35\x13\x7f\x1a\x31\x03\xab\x55\xe0\x79\x86\x09\xbd\xd0\x45\x4a\x4e\xef\xe7\x9c\x6c\x72\x7a\x4a\x57\x2b\x95\xa3\x29\x2c\x6d\xf5\x44\x27\x0f\x33\x4e\xe4\xba\x5d\xe3\x1e\xe7\x8e\xa3\xd0\x8e\x67\x3b\xc2\x13\xd8\x66\x3e\x2c\xc1\xc6\xa1\x4e\x23\xe3\x24\x5c\x3d\x3a\xba\xda\x2e\xef\x44\x85\x4f\x47\x61\x35\xd8\x4c\x76\x44\x03\xa1\xe3\xee\xc0\x69\xd5\x35\xb3\xe2\xb7\xaa\x51\xe8\xd4\x71\xca\xbb\x2f\x2d\x3a\xc2\x74\xcd\x55\x72\xf5\x66\xc5\x2f\x6b\x3c\xe9\x19\x26\xc5\x3c\x1f\xb4\x7c\x95\x6c\x7e\x88\x74\xdf\x2b\xe1\x53\x7b\x73\x0c\x11\xab\x73\xbc\x44\x3e\x8d\xe7\x47\xc8\x39\x43\x61\x51\x76\xa5\x6f\x58\x4d\x2f\x88\xd0\xe3\x54\x30\x38\x60\xe3\x5c\x1a\x9c\x8d\x44\x0a\x3f\x89\xf9\xda\xd3\x7a\x36\xb4\xb6\x5f\xd5\xf7\xc3\xcf\xe8\x6d\x10\x4a\xd8\x79\xef\xa6\x15\x10\xb9\xaa\x64\x86\x55\x17\xcc\x67\x15\x42\xfc\x58\x77\x58\x0c\x22\x24\x17\x4e\xb0\x7c\xc4\x52\xeb\xb0\x5b\x9c\x93\x32\x13\x52\x7b\xb1\x90\x3e\x66\x02\x0e\x8d\x2d\x80\x8c\xb7\xe8\x80\xf3\x37\xda\xed\x6a\x27\xc5\xe2\x6c\x14\x5c\x5b\xcd\xc9\x09\xb0\x9e\x8c\x61\x8b\xdb\xbd\x70\x64\xcc\xb6\xa8\xb3\xb1\x24\xdf\xae\xce\xc6\x76\x93\x04\x39\x20\xa2\x63\x66\x54\xd9\x78\x1a\x1a\xa3\x21\xe1\xa0\x51\x75\xda\xc0\x05\x56\xfb\xad\xb0\x80\x4f\xd6\xb5\x20\xc4\xad\xf4\x5c\xd0\x79\xf4\x59\x4c\x61\xce\xe6\x37\xb6\xe7\x92\xd7\xa0\x58\x42\x2c\xab\x0e\x8f\x02\x2a\xf1\x51\x4c\xed\x51\xb4\x67\x6f\xd2\xf4\xdc\x0f\xc5\x4d\x01\x69\xbe\x28\xca\xdc\x12\xd0\x8d\xbb\x39\x70\x43\x0f\xe1\x11\xd8\x8b\x84\x5f\x42\x57\xe2\x29\xb6\xd2\x46\x13\x1c\xa8\xef\x77\xe3\x89\x2f\xef\x4c\x13\x4f\x35\x17\x16\xf5\xd0\x0f\xc0\x0f\xd1\x6b\xa3\x11\x93\xb0\xa7\x53\x19\x51\xa0\x4c\xb0\x23\xb5\xf5\xee\xd7\xd3\x9c\x2a\xe7\xe6\x30\x85\x45\x83\xac\x74\x3f\xce\xa5\xea\xa5\xd0\xd8\xcd\x00\x9c\xca\x88\xbc\x79\x58\x56\x49\xe0\x94\x6f\xd0\xdc\x05\x4b\xad\xd3\x1a\xdf\x62\xe5\xc1\x39\x2c\x12\x2c\x3c\x95\x0a\x6d\xc0\xf6\x92\x1d\x0c\x38\xa7\x28\x4e\x04\x57\x1c\xbc\x45\xbe\xb3\x53\xd1\x9e\x2e\x81\xe0\x2e\xaa\xb0\x2f\xe5\x82\x2c\x6c\x31\xc3\x57\xa6\x8e\x88\xb7\xd0\xf6\xc1\x5b\x65\xe0\xc2\x5f\x9c\x96\x9c\x34\xc9\xc0\xcb\x46\x19\x78\xd9\xed\xc6\x85\x14\x80\x97\xae\x10\xc2\xf5\x7f\x4b\x00\x9c\x26\x03\x61\x58\xa4\xa4\x12\xd3\x5b\xf3\xfd\xa9\x96\x4a\x1c\x27\xd9\x78\x3a\x81\xcb\xe4\x18\xce\x92\xdd\xe1\x4e\xf4\x80\x73\xa2\xc7\x22\x82\xef\x6d\x16\x0f\x38\x20\x66\xc9\xee\x80\x97\x50\x91\x19\xe2\xa1\x92\xce\x2d\x36\xc3\x76\x29\x4e\xf1\x0a\x64\x17\xea\xdc\x3f\x4d\x76\x67\xea\xb0\xc6\xc5\xdb\x92\x59\x57\x1c\xc7\x02\x32\x00\x4f\x84\xf8\x5c\x2b\x6b\xed\x26\xc9\x09\xe0\xd8\x70\xba\x5a\xf9\x2a\xc4\x27\xaa\xbd\x23\x78\x08\x1f\x54\xd5\x7e\x95\x22\x31\x5c\xc0\x13\x78\x0c\xe0\xa3\xe4\x81\x44\xec\x57\x93\x07\x9e\xd4\xfd\x55\x10\x1f\x25\x45\x18\x93\x8f\xe0\xab\x62\x1e\x29\x78\xb4\x21\x46\x02\xbf\x6a\x0e\x84\xdb\x64\x2d\x15\x14\x21\x12\x38\x53\xbf\x73\xda\xed\xee\xe2\x6e\x77\xb7\x10\x9d\xaf\x56\xec\x40\xa6\x12\x34\x2a\x2a\x26\x47\x08\xac\xad\x40\xea\x14\xa8\x72\x8f\x4c\xd6\x23\x10\x1f\x36\x0d\xf4\x10\x3e\x52\xcf\x16\x7c\x48\x8f\xe1\xbd\x2a\x34\x42\x9b\xfe\x04\x1e\x43\x26\x0e\x79\x00\xef\x26\xf7\x24\x78\x6e\x27\xf7\x2c\x78\xd4\x18\xee\xc2\xdb\xdd\x6e\xfc\xb8\xa9\xf3\xc7\xf0\x36\x58\x1b\xbf\xb7\xc5\x1a\x7a\x8b\xda\x78\xdc\xb9\xb4\x8e\x73\xfa\xdb\x6d\x0a\x82\x64\xd3\x86\xe4\x12\x4e\xb8\x3d\xaf\x06\x4d\xd8\x49\x43\xd8\x89\x81\xe6\xa4\x9c\xa1\x61\xe9\x28\xc4\x27\x05\xb9\xab\x97\x55\xa5\xc4\x42\x4a\xd4\x8c\x2d\x10\x27\x2e\xb9\xc8\x85\x1f\x18\x4e\xf0\xb4\xc5\x1a\x76\xc8\x2e\x71\xc8\xae\xb0\x48\xeb\x76\x63\xd6\x64\x93\x26\x1c\xb2\x0b\xaf\xad\xc6\xb0\xe2\xea\x34\xb1\xb7\x44\x23\xde\xaa\x62\xdb\xe2\x26\x4b\xc1\x19\x1a\x6f\xd4\x8f\x73\x2d\xd0\x95\xda\xbf\x7b\xe5\xa5\xe7\xd2\x18\xef\x34\x19\xdc\xb6\x61\xff\xeb\xf7\x20\xe8\x39\xc4\xa8\x5e\xad\x28\x94\xba\xc5\xbe\xdb\x87\xbc\xea\x92\xc6\xbb\xd7\xe5\xfc\x5e\x87\xcd\xbd\x0e\x4f\x92\xf0\x88\x5d\xec\x3c\xf7\xa3\x84\x3f\x03\xd2\x77\x85\xec\x30\x17\x19\xbe\x98\x3d\x74\xb1\x84\xe9\xe6\xb9\xd7\x18\x70\x1b\x67\xc2\xde\xfb\xc6\xe9\xc4\x5e\x62\x4c\xf8\x21\x76\x20\x9e\x10\x1d\x6d\xf8\xa6\x3d\xce\x1b\x00\xeb\xd1\x76\x4c\x6c\xc7\xfb\x56\x5c\xfb\x9e\xd3\x31\xf0\x55\x7a\xb4\xbd\xb8\x07\xde\xa7\xeb\x4b\x78\x9b\xcb\xdc\xab\x71\xd3\x37\x4f\x10\x9c\xf7\x29\x3a\xc2\x05\x43\x34\x16\x46\xb8\x3d\x05\x93\xd1\x22\xc5\x24\x82\xbe\xab\x4e\xe0\x39\x1a\x43\x4e\x55\x7b\x79\x32\xee\x91\x8d\x8b\x4a\xde\x7d\xa8\xa4\x04\x5c\xb9\xad\x98\x06\x7f\xb1\xad\xa0\x86\xb5\xf1\x0f\x0b\xd6\x31\xf2\x87\xac\xdc\xca\xf7\x31\xe1\x00\x5c\xad\x74\x0a\xe7\x64\x87\xf5\xa7\x69\x96\x71\x28\x72\x5c\xa6\x79\x96\x89\x45\x97\x2e\x0a\x61\xd5\x65\x21\xb4\xc5\x69\x5e\x0a\x0c\xd8\x5e\xd2\x05\x70\x73\x85\xe0\xa8\x39\x7f\xad\x27\xad\x82\x58\xa8\xd8\xb1\x7c\x16\xb9\x97\xb3\x53\x98\x1e\x5d\xc5\xe4\xb3\x42\x68\xc9\xb0\x9c\x8c\x76\x87\x6b\x00\x6d\x29\x33\xa4\x6a\x11\x17\xd0\xb6\xa9\x91\x8d\xe5\x4f\xc3\x8b\xe2\x96\x95\x7b\x0b\x87\x0b\x6a\x6c\x53\xa5\xd2\x2d\xa5\xec\x36\xce\xb7\x77\x6c\x0b\x13\x5b\xb8\x4c\x10\xcc\x92\x0a\xc8\x61\x5c\xf6\x8f\xd3\xe2\x40\xfc\x1f\x67\x60\x24\x12\xef\x88\x56\xa9\x20\xe9\x71\x06\x00\x07\xb4\xd7\x93\xdb\x82\xf2\xd4\x2c\x2f\x00\x25\xcc\xf8\x22\x8a\xf4\xbc\xc1\xb9\xa5\xaa\xf7\x39\x71\xfc\x78\x5e\xe7\x96\x62\xb2\x8d\xee\x0b\x1d\xff\xec\x0d\xf3\x0b\x3a\x73\xff\x9c\xce\x55\x95\xdf\x3e\x5b\xc7\x37\xfc\x67\x37\x6d\xd7\x4b\x6c\x3d\x46\x78\x13\x6f\x5a\x55\x5a\x41\x40\x3f\xaa\xf5\xd3\x2c\xcb\x1f\xbd\x55\x66\x59\xc8\x70\x5a\x72\x1e\x3a\x08\x68\xa4\xe7\xcf\xef\x2c\x07\x68\x64\xdf\x16\x13\x72\x70\xed\x9b\x31\xa3\x25\x5a\xb1\xd5\x10\x7c\xe9\x1a\xd6\xb1\x55\x46\x91\x22\xf0\xf2\x45\x63\x28\x03\x8e\x6d\xe1\xa1\xb7\x8e\xf5\x40\x70\x82\xca\x03\x31\x67\x54\x5b\x2c\x9e\x3c\x8f\xbe\x48\x2b\x67\xdc\xe5\xe8\x65\xc0\xf3\xd8\x81\x39\x73\xe3\x69\xc8\xc8\x93\xd1\x9e\x61\x29\x65\x4c\xca\x6e\x17\xe9\xb8\x83\xcf\x8b\x65\x8a\xc9\x5e\x72\x03\x12\xf4\xa8\xf3\x4a\xca\x50\x8c\xfa\x45\x86\xa7\x28\x1e\x40\x02\xf6\xa2\x51\xb4\xa7\x33\x08\x00\x60\x64\x8b\x69\x81\x8f\xb3\x9a\xec\xc0\xf9\x3c\x92\xb6\x65\xe8\x40\xba\x46\x0d\xaf\xb0\xbd\x00\xbb\xa1\xc5\x78\x0b\xdd\xee\x2e\x2e\xde\x4a\xdf\x8a\x11\x38\x40\x7d\x96\xdf\xb9\x77\x57\xf2\xf6\xb1\x6c\xb9\xcd\xfa\x6a\x46\xe2\xd2\x56\x58\x7f\xea\x78\x43\x17\xf2\x72\xb4\x9b\x24\xc3\x6b\x03\x99\xe8\x0d\xaf\x0d\xd6\x4f\x11\x1d\x3c\x15\x80\x88\x2f\x05\x5a\xad\x34\xfc\xc5\xc6\x20\x31\x4b\xa4\xf7\x6e\x7e\x65\x3d\x60\x1b\xd7\xe4\xc9\x1a\x6d\xb1\x30\x9a\x71\xfb\x62\x6d\xbd\x30\x29\x92\xa0\x50\xb8\xd9\x64\x6f\xdb\xb6\x72\x0b\xd8\x05\x8f\xda\xa7\xe8\x08\xb9\xe2\xf1\xd8\x05\x96\x58\xfe\x86\x19\xa8\x80\x18\x57\x3f\xe8\xe8\x46\xff\x66\xff\x66\x54\x1b\xc5\x1c\xb1\xe9\xf1\xb5\xf4\x5b\x69\x25\x92\x8d\xc8\xbf\x32\xec\x72\x5a\x25\x9e\x78\x49\xf3\xa7\xe2\x43\x9f\x1d\x23\x12\x57\x3c\x4f\xa0\x7e\xfe\xd0\xc4\xda\xef\x73\xde\x36\x06\x3b\x32\x9a\x09\x5a\x07\x3c\xa8\xcb\x09\x0a\x5f\xd1\x85\xbe\xe8\xca\xcc\xd0\x84\xa1\x57\xab\x64\x38\x2b\xae\x2d\x4a\x72\xd4\x53\x37\x8b\xde\x3c\x37\xb5\x03\x45\x8d\xda\x4c\xef\x30\x9f\x9d\xf6\x96\x32\xa4\xc8\xf6\x47\x2b\x43\x41\xb1\x17\x0b\x4a\x4f\x93\x1f\x4e\x75\x69\xa1\xfb\xfc\x34\x26\x93\x04\x09\x03\xbf\x0b\xac\x8a\x0a\x01\x75\x3f\x57\x11\x53\xf0\x16\xef\xd7\x3a\x64\x94\xd2\x4b\x6b\x8c\x27\x68\xcd\xd7\x85\xfd\x2e\x16\xc1\xf2\x10\xc4\x4a\xaf\x56\x19\xf4\x36\xc7\xf4\xcb\xbb\xdd\xd8\x84\xa7\xf4\x8c\x3c\x6d\x36\x6f\x19\xe6\x40\x2b\x8b\x88\x97\x4d\x83\x44\x26\xce\xaa\x08\x4c\x98\x24\x49\xaa\x42\x78\xad\x56\xbb\x69\x9f\x2f\xd1\x6a\x65\xa4\x49\xa9\x6e\x52\xe8\xfa\xab\x74\x3d\xe8\x98\xf3\x49\x05\x38\x94\xde\x0c\x27\x60\xb5\xb2\xf5\x6c\x6b\x62\x80\x8d\xed\x6d\x0f\x8c\x28\xe2\x15\xd7\xe3\xce\x92\xea\x73\x61\x35\xee\xac\x92\xaf\x55\x43\xcf\x56\x3d\x91\xbb\xc1\x21\x53\xd0\x97\x31\xe5\xaa\x3d\xc9\xed\x85\x45\x63\x32\x50\x10\xe6\x1f\x64\xec\x78\x04\xd6\x81\x9d\xea\x11\xf6\x77\xee\xfd\xd6\xdb\xfc\x26\x79\x1c\x9f\xe9\x78\xab\x23\xa4\xe5\xae\x23\x21\x45\x76\x36\x7e\x2e\x62\x2b\xd6\x9b\xd4\x42\x0b\xdd\x04\x24\x22\xa8\xab\x68\x44\x2a\xba\x5a\xca\x20\xc7\xaa\x63\x37\x8b\xd1\xc2\x5c\xd3\x89\xda\x44\x64\x97\xcd\x71\x47\x3d\x88\x89\xfd\x6e\xe2\x69\x72\x9c\x86\x22\x72\xa7\x9b\x3f\x6a\x47\xe0\xe4\xc2\x86\xa3\x16\xdb\x38\xdd\xb5\xd8\xad\xcc\xc4\x6e\x8d\x99\x46\x2c\x20\x6a\xec\x6c\x88\xc6\xeb\x2c\x85\x1b\x96\x57\x46\x20\x7c\x4d\x0e\x5e\x76\xf0\x5a\x2e\xab\x34\xc8\xed\xf9\xfd\xdf\x06\x90\x93\x73\xa8\x97\x57\xfe\x18\x39\xc9\xce\xf5\xaa\xe4\x3b\xda\x87\x57\x73\xa7\xb1\x8b\xa3\x2d\xa7\x1e\x8c\xed\x9b\x82\xd5\x4a\x08\xf8\x03\x67\xaf\xa4\xd9\xd2\x47\xe9\x95\x1d\xbd\xb8\x78\x3b\x4b\x31\x51\x44\xb5\x8e\x4f\xd1\x58\x4a\xae\x3b\xb2\xc4\x84\x13\x28\xd5\x8d\x0d\x9d\xcf\x72\x23\xbb\xcf\x32\xc9\x0b\x05\xe7\xb2\xf1\xfc\x79\x8a\x41\x4f\x5c\x4d\x14\x11\xac\x38\xae\xee\x64\xfb\x82\x20\xa2\x5a\x52\x37\xaa\xa5\x89\x35\x2d\x11\x67\x37\xce\xdd\x0b\xd0\xbd\x53\xc2\x14\xaa\xe9\x00\x66\xb9\xf1\x5b\x28\xf1\x62\x67\x97\xf3\x07\xab\xd5\xf5\xc1\x4d\x19\x04\xf6\xfa\xe0\x79\x99\x88\x5e\x7f\xf5\xf6\x2b\x22\x38\xad\x3a\x03\x0e\xa6\x39\x29\xf2\x0c\xf5\x1f\xa5\x94\xc4\xd1\x7d\x19\x00\x54\x22\x4f\xe7\x51\x5a\x74\x4a\x92\x1e\x66\x48\xc5\x01\x16\xe3\x9b\x75\xd2\xa2\xc3\x89\x74\x3f\x82\x04\x8c\xb4\x92\xf1\xda\xe8\xc8\x6c\x59\x9e\x26\x4e\xa2\xce\xf0\xbb\xb5\x0c\x27\xd9\x13\xc6\xda\xbd\x65\x4a\xd3\x45\xb5\xa8\xc4\xe5\x4b\x76\xaf\xd0\x20\x2f\xaf\x3b\x5d\x88\xcf\xa6\x14\xcd\x10\x61\x38\xcd\x8a\x51\x54\xa4\x0b\xd4\xcb\x29\x3e\xc2\x24\x5a\x43\xe9\x35\x5a\x47\xcf\x4c\x4c\x6a\xb5\x92\x6a\xa2\xab\x95\x38\x9e\x41\x9f\xe5\x5f\x5b\x2e\x11\x7d\x39\x2d\x50\x0c\x54\x40\x60\xc0\xaf\xf2\xea\xf4\xb6\x15\xe5\x62\x3a\x59\x02\x5d\x5c\xb5\x06\x55\x5b\x5b\x60\x18\xbd\xd4\x92\x66\x56\x08\x70\x10\x81\x17\x7b\xc3\x83\xa8\x1b\x8d\xa2\x83\x68\x47\x7c\xdd\x4b\xa2\x68\x0f\xef\xc9\xc7\x4e\x0d\x79\x61\x62\xfb\xb6\x80\x3b\xd0\x4d\xaf\xc5\x63\xba\x60\x38\xbc\x9d\x6e\x0a\x1c\x50\xc1\x62\x34\x84\x34\x1e\xa9\xaf\xf2\xa7\xab\x66\xb5\x01\x81\x9a\x50\xa1\x09\x81\x42\x58\xf1\xe4\x38\x11\x02\x4b\x82\x95\x28\x2c\xd2\x7d\x59\xad\xc2\x7b\xa7\x8b\xc3\x3c\xeb\x76\xa3\x42\x24\xaa\x1f\xfa\x98\x21\x9a\xb2\x9c\x1e\x84\xce\x5c\x25\xd2\x59\x07\xc5\x23\xdd\xee\x86\xee\x44\xc4\xa5\x82\xd1\x72\xca\x72\x9a\x24\x89\xc9\xdf\xd5\x69\x4b\x67\x0f\xf4\xd8\x46\xa6\x43\x48\x93\x6b\xef\x8e\xdf\x9d\x7c\xe9\x5a\x80\x3d\xc7\xc9\x78\x52\x8d\x16\xdf\x41\x71\x0a\x0b\xa5\x56\x04\x33\x38\x95\x6a\x21\x35\x2f\x98\x05\x10\xc6\x1b\x65\x32\x80\x59\x52\x18\xbf\x2f\xb7\x32\xe1\xfb\x85\x4a\x81\x60\x0a\x0e\xf2\x18\xc3\x14\x16\xe3\x72\x02\x46\x28\x4e\xf7\xa2\x71\xb4\xe7\xda\xcc\x91\x58\x7c\x3b\x28\x47\x51\x04\xf6\xa2\x49\x24\xcb\x1a\x65\x10\x81\xc2\x15\xd4\x54\x7d\x4f\x3b\x98\x74\x0a\xa0\x5b\x9d\xaa\xda\x53\x5d\x5b\x75\xdd\xe4\x5c\x74\xf3\x0c\x78\x65\x3e\x12\xe9\x1d\x5e\xa4\x04\xfa\xa8\xd6\xbc\xfe\xa7\xaa\x57\xe3\xce\x3e\x8e\x22\x88\x80\x8a\x98\xdb\x8d\x40\x9f\xa2\x65\x96\x4e\x51\x7c\xed\x9f\x5c\x1f\x5c\x3b\x82\xd1\x5e\x04\xd6\x06\xe2\xb9\xe1\x85\x8d\xd6\x6c\xb7\xab\xdd\x37\x89\x64\x12\x89\xd8\xd8\x01\x34\x21\x07\x24\x06\x23\x02\xd1\x58\x4b\xfe\x26\x09\x22\xd3\x7c\x86\xbe\xf6\xce\x9d\x97\xf3\xc5\x32\x27\x88\xb0\x98\x81\xbd\x28\x89\xf6\x02\x5f\x08\x00\x1b\xc3\xdf\x1a\x45\xc7\xe6\x48\xb1\xb6\x48\x86\x0f\xaf\x15\xa7\x05\x43\x8b\x86\x8f\xe8\x31\xd3\x02\xa2\x2b\xba\x95\xbf\x53\x66\x48\xe8\x13\x5a\x15\x0f\xce\xa9\x69\x07\x79\xda\x0c\x89\xf5\xef\xe8\x81\xf9\x35\x99\xf7\xb3\xe1\xdd\x41\x86\xfd\x8c\xee\x58\x25\xd0\xb3\xf0\x7b\x83\x3c\x5e\x66\x68\x49\xd1\x94\xdf\x3a\x65\x68\x52\xdb\x77\x07\x17\x1d\xf3\x75\x66\xc2\x8d\xa2\xc7\xfc\x3a\x85\x59\x76\x3a\xea\xe0\x05\x87\x76\xc7\x56\x99\xd3\x7c\xd1\x79\xae\x02\xdd\xe7\xf6\x23\xb8\x3b\x14\xea\xf9\x55\xc0\xf7\x8f\x64\xec\xfe\x08\x96\x84\xe1\x6c\x14\xdd\xe8\x0f\xfa\x83\x48\x68\x16\x9b\x56\x9b\x03\x7e\xb9\xba\x17\x30\x72\xc0\x7a\xde\x49\x2b\x16\xd0\x69\x21\x06\xed\xe7\x7f\xd6\x71\x2a\x76\xd6\x97\x0a\x05\xa7\xe5\xb6\x70\x30\x08\x75\x41\x28\x98\xfa\xe7\x83\x81\xa9\x76\xc9\x10\x30\xed\xae\x2b\xf2\x53\x83\x20\xd0\xdd\x44\x4e\x05\xe8\x6f\x35\x0f\x98\xd5\x5d\xe9\xef\xad\x0d\xa4\xa6\x42\x2a\x38\xcd\x69\xa4\x34\x21\x7a\xe2\x53\x93\xfd\x58\x3c\x28\xa9\x10\xc1\x6f\xfd\x56\xff\xd5\x7f\x7e\xff\xd5\xb7\x5e\x79\xf0\xf6\x3b\x77\xef\xdf\xbd\xff\x8d\xb7\x5f\xbd\xa7\xdd\x6d\x05\x3f\xaa\x25\x03\xdd\x6e\x43\x30\x63\xbd\xa4\xfa\x18\xbe\x10\x76\x54\x1b\xf9\x7c\x61\x48\x6d\x02\xf1\xc0\x45\x08\xa5\x7d\xbf\x6e\xde\x3d\x75\x18\x5d\x88\x92\xd4\xa0\xf4\xb9\xa3\x26\x61\x48\x79\x0a\x87\x06\x56\xf5\x2b\xbd\x8f\xe0\xc7\xc2\x81\x6f\x71\xcd\x41\xa7\x36\x96\x08\x7e\x23\xea\xd2\x96\x3e\x44\x3d\xd9\xde\xb6\xfb\x95\xe1\x4b\xa8\x12\x56\x57\xdc\x19\x7b\x9e\x8c\x07\x90\x24\xda\x93\xb1\xba\xa5\xec\xb3\x5b\x3a\xbd\xcf\xf6\xf6\x00\x19\xb3\x49\x82\xc6\xcc\xb0\x9a\x44\x5f\x35\x65\xc3\x1c\xf6\x31\x02\x4f\xf2\xa6\xe6\x0b\x4c\x7d\xb1\x95\xf1\xce\x1e\xbf\xa6\xf2\x1d\xf4\x39\xc4\x64\xa6\xb4\xe5\xa4\xef\xf6\x31\x67\xbb\x26\x9c\xe7\x9e\xa6\x2c\x16\x6f\x5f\xc0\x30\x76\xd7\x85\xf9\xa2\x9c\x9a\x71\xc4\x7e\xf6\x08\xb3\xe3\xbc\x64\x2f\xe7\x25\x61\x23\x32\x8e\xd4\xef\xde\x94\x67\x44\x13\x9f\xbe\xaa\xce\x14\x17\x22\x74\x71\x03\x92\x9d\x30\x1a\x78\x3b\xe6\x29\x20\xc2\x15\x2c\x48\xb3\x16\x2e\x1a\x0f\x26\xdb\x41\xa1\x99\xcb\x76\x4c\xe8\xb5\x6d\x20\xf1\x4f\x90\x36\x4d\xe1\x9c\xd4\x05\x14\x4f\x6c\xbe\x53\x67\x5f\xed\x59\x5b\x65\x65\xcd\x89\x6c\x59\x59\xfd\xc8\x69\x06\x2e\xdc\x37\x98\xfc\xd8\xd3\xeb\xb2\xf5\x4d\x81\xca\x19\x4e\x2a\x67\xb8\x1d\x0b\xf1\xce\x7d\x6f\xc8\xa6\x8f\x56\x2b\xe8\x81\xf3\xca\x05\x7b\x67\x72\xd4\xc5\x68\x3c\xbe\xf6\xa5\x6b\x30\xe2\xfd\x8c\xaf\x15\x5f\xba\x86\x75\xfa\x9b\x71\xfa\x78\xc5\xaf\xac\x00\xcb\xec\x2f\x0d\x91\xfc\x12\xe7\x53\x96\x2f\x57\x27\x98\x82\x52\x7f\xc2\xd5\x2f\xd8\xff\x90\x66\x38\x2d\x56\x52\x96\xb7\x3a\xcc\x49\x59\x80\x4a\xa3\x87\x25\xd0\x8d\x15\x36\x6f\x3e\x4f\xb3\x15\xcb\x17\x29\x03\xb9\xfa\x9a\xeb\xaf\x63\x86\x27\xa0\x5c\xa8\xec\xd4\xc9\x4c\xbd\xbc\x42\x4d\xc0\x34\x7b\x30\x8a\xc7\xdf\x9c\x4f\xc0\x1c\xad\xe2\x71\x46\x27\x60\xae\x07\xf3\xa5\xeb\x27\xba\xd0\x31\x3e\x41\x3a\x5b\x77\xf8\xcd\x14\xe1\xbc\x3c\x9d\xac\xbe\x5d\x82\x53\x3d\x41\x5d\xe1\xf1\x6a\x7a\xbc\x2a\x8a\x55\x71\x5c\x9d\xda\x22\x65\x74\x75\x82\x28\x5b\x61\x32\x03\xf1\xc1\x08\x3f\x5e\xa1\xc7\xba\x14\x9e\x22\x0d\xf1\xc5\x2a\x03\x79\x59\x20\xfb\xc5\xf9\x80\xa7\xf5\xfc\xdc\xb4\x82\x88\xc9\x42\x44\x67\xca\xee\xbf\x5d\xe2\xf7\x74\xce\x7b\xbc\xaf\x09\xd4\xd8\xcc\x97\x5f\x02\x47\x16\x2d\x0a\xbf\x2a\x01\xe8\x91\x59\xfd\x47\x45\x00\xc4\xe5\x42\x66\xc6\x29\x20\x69\x76\xba\x8a\x0f\x41\xba\x8a\x67\x00\xa7\x47\x24\x5f\xc5\x4b\x90\x52\x44\xd8\x31\xe2\x49\x9a\x8b\xbc\x02\x9c\x92\x7c\xb9\x8a\x19\x38\x46\x20\x2e\x70\xb1\x2a\x90\xe9\xb7\xc0\xaa\x97\x6f\xa6\xbc\xbd\xe6\xef\x62\x05\x4f\x90\x1e\xdd\x1c\x39\xcb\x56\x78\x93\x60\xf5\x2c\xb1\xea\x4e\xe5\xc0\xfa\x62\xf3\xf5\x54\xc1\x06\x20\x6a\x33\x45\x5a\x2d\x2f\xc8\x4f\xec\x07\x9e\xae\x21\x04\xf2\xba\xaf\xae\x27\x5f\x72\x8d\xf0\x05\x88\x51\x01\x0e\xbc\xd1\xe6\x95\xfa\x71\x71\x9c\x57\x67\x34\xa5\xb8\x90\xdb\x35\xc6\xc5\xca\xc2\x0b\x9b\xdd\x0c\x1e\x8f\x31\x9a\xe8\x5a\x8f\x71\x6d\x33\xc7\x65\xb1\xc2\xba\x5e\x59\x34\x6e\xdc\xda\x00\x05\x1e\x22\xe2\x0e\xc7\x60\x3b\xc7\x6e\x0d\xb2\xc7\x76\x3b\xb8\xf9\xf8\xb1\x83\xa7\xef\x55\xa6\x3a\x4b\x59\x7a\x98\x16\xee\x74\x27\x10\x53\x8a\x04\xfe\xbe\x9d\x62\xca\x69\x58\xc4\xb9\x01\xa1\x3a\xbf\x44\xf9\x32\x13\xd0\x8c\x16\x29\xcf\x58\xc8\x9d\x11\x4d\x8f\x71\x36\x8b\xa0\xfc\x4b\x55\x66\x81\x1e\x0b\xfd\xe4\xc7\x72\x2d\xa3\x45\x7e\x82\x78\x9d\x5c\x91\x81\x68\x9a\x3f\x8a\x60\xf4\x10\x13\xd9\xe4\x7b\xf9\xe2\x10\xf3\x12\x32\x21\xf6\x52\x49\x04\x5b\x23\xb4\x2c\xc7\x11\xfa\x76\x89\x97\x0b\x44\x58\x04\x23\x4c\xe6\x39\x5d\x88\x27\xe0\x08\x46\x54\x84\xa9\x8f\x16\x39\x41\xc2\xdc\x7c\x89\xa6\xbc\x05\xa9\xc3\x2c\x12\x73\x5c\x1c\xf3\xdf\xc7\x08\x2d\x23\x18\x7d\x0b\xa5\xfc\x28\x88\x96\x79\x26\x76\x7c\x5d\x84\xbc\xed\x84\xbf\x92\x53\x64\x47\xb2\xb9\xd7\xbe\xf9\x6e\xf1\x4f\xbf\x74\x0d\x92\xe4\x5a\x3c\x7e\xf7\xd1\xbb\xd7\x7a\x93\xbd\xf1\x83\x77\xaf\xbd\x5b\xf4\x26\x20\x1e\xa7\xbd\xf7\xde\x9d\x4d\xf6\xbe\x04\xae\x41\xaa\x4b\xf0\x4f\x7b\x20\x1e\xdf\xee\xfd\xf6\x44\x15\xf8\xa7\xbc\x00\x4e\xae\xf9\x79\x8e\x64\x36\xaf\xc6\xef\x1c\x40\x7e\x4c\xeb\x40\x20\xb7\xa8\x08\x06\x82\xfa\xce\x2a\x8c\xd9\x98\x4c\xfa\x2c\x7f\x23\x7f\xa4\x1f\x1d\x26\xc9\xee\xc0\x4a\x17\xd3\x6a\x9b\x9a\xf7\x4c\x06\xc2\xb1\xb4\x6a\x9c\xde\xc2\xfb\x94\x73\xeb\xd2\x13\x10\xea\x1b\xb4\x1b\x93\xf1\xa0\xd6\x03\x19\x0f\xab\x85\x86\x5b\x0b\xdd\x91\x31\x39\x1b\xca\x0e\x1a\xca\x86\x3a\x1f\x4c\xec\x04\x0b\xbe\xc8\x31\x4a\x90\x74\xf8\xe4\xc0\x26\xf1\x20\xb5\x5a\x95\x31\x70\xbb\x10\xfb\x29\xa9\x66\x88\x62\x6a\xd9\xc5\x5b\x39\x15\xfc\x8d\xe1\x21\x34\x3f\x54\x88\x70\x6a\xe6\x6c\xb1\x2c\x94\xc8\x37\x6d\x8e\x78\xa7\xd5\x59\x89\x4c\x77\x2b\x95\x31\x58\xef\xe4\x31\xe7\xc4\x9c\x6c\x00\x53\x91\xe5\x0f\x50\xb9\x2b\x40\xe2\x61\xef\xe5\x74\x7a\x8c\x62\xb0\xc6\xf3\x78\x57\xe1\xb6\x54\x70\xe9\x76\xfd\xdf\x42\x9e\x2c\x9c\x1a\xdd\x7d\x44\x34\xe2\xab\xf7\x47\xce\x2d\xca\x67\x6b\xf9\x80\x78\x48\xf3\x47\x05\xa2\x9d\x59\x8e\x8a\x0e\xc9\x59\xa7\x28\x97\xe2\xda\x1c\x68\x11\x76\x96\xf2\x96\xbd\xcc\xb3\xd3\x39\xce\x3a\xfc\xfa\xd3\x41\xc5\xf3\xbd\xe2\x38\x5d\x8c\x3a\xc7\x8c\x2d\x47\xd7\xae\x1d\x61\xd6\xc7\xf9\xb5\xd3\x97\xbe\x76\x9d\x1e\x45\xc0\xa2\x7c\x69\x82\x13\x05\x1a\xb7\x2f\xe8\x0f\x66\x78\xca\x12\xa5\x95\x26\x7c\x14\xa8\x3c\x88\xd6\x85\xbd\xd0\x25\x67\x0e\x58\x5c\x81\x82\x34\xaf\x2b\xe9\x91\x86\x98\x72\x1c\xe3\xb0\xbd\x8d\xba\x12\x53\x5e\xe3\x6b\x05\x12\x16\xc2\xca\xcc\x4a\xb4\x22\x7c\x21\xc5\x95\x1c\x1d\x75\xc3\x11\x4c\x08\x43\x42\x39\x02\xc3\x4a\x87\xcc\x3e\x8d\xad\x96\xda\x94\x2f\x5e\x77\xec\xc4\xcc\xc7\xf1\xf5\xc9\x81\xfb\x63\x74\xb6\xde\xa9\x0f\x54\x79\x16\x1c\x8b\x0b\x4a\xdf\xbd\xa3\x4e\x7c\xdd\x99\xa5\x1c\x38\xb5\x53\x31\x39\x6a\x2a\x56\x12\xa5\xe2\x7c\xaf\xd7\xd0\x82\xb2\x06\x65\x77\x18\x43\x0f\x5e\x49\xa9\xe1\xae\xfa\xe0\x19\x6b\x38\xc3\x45\xf3\x9a\xe9\xaa\x62\xe9\xbd\xba\x36\xa7\xd5\x2a\xfa\x0b\xd2\xbc\x1e\x95\x6a\xd5\x9b\x7b\xdd\x83\xb6\x2c\x51\x0d\xb5\xe3\x43\x42\x19\x81\xd7\x11\x50\x10\x17\x4d\x51\xa4\x40\x81\x2f\x59\x85\xe2\x81\xb5\x25\x34\x4f\xd2\x8f\x6e\x64\x53\x47\x2e\x59\x72\x81\xd9\xa2\xa7\x3c\xb6\x7d\xc1\x31\xaa\xb7\x6d\xa9\xe2\xb9\x67\x91\x7a\x6d\xf3\xa1\x4f\x78\x8b\x66\x79\x42\xc6\x1e\xad\x16\x10\x3e\x08\xb4\x71\x29\x9b\x52\x0d\x43\x16\x16\x2a\xf4\xd2\x13\x80\x64\x59\xb4\xef\x2a\x0f\x03\xdc\x2c\x03\x2c\x30\x8a\x87\xbb\x49\x22\xb5\x8d\xb2\x3c\x65\xc2\x48\x42\x87\xd5\xd3\xcd\xb1\xd6\xcd\x81\x0a\x41\x38\x60\x23\xb4\x17\x75\xa2\x3d\xe6\xe0\x59\x83\x8e\x73\x78\x2f\x3d\x68\x53\x2b\x38\x6f\x5d\x31\x38\x52\x75\x5a\x72\xc4\x91\x75\xdd\x05\xb2\x3e\x25\x60\x09\x33\xcd\xd5\x4c\x75\x62\xae\x13\xc7\x3a\xb1\xd4\x89\x99\xe3\x82\xb0\x48\x76\x45\x64\x65\x65\xbf\x22\xcc\xd2\x75\xba\x30\x1a\xba\xbc\xe4\x3c\xa9\x20\x34\x8c\x8f\x85\x8b\x4b\x34\x8d\x11\x58\xad\xa8\x4e\xf2\xb5\x59\x26\xc7\xe3\xeb\x15\xbe\xc5\xdb\x89\x2e\x07\x37\x9f\x28\x17\x73\xf5\x4f\xcb\x89\x1d\x03\xe7\xe0\x66\x1d\x4c\x3a\xe2\x35\x7e\xde\x5f\x08\x1d\xa3\xd9\x5e\xf4\xa5\xc8\x38\xa5\x9d\x26\xe9\x78\x36\x81\x65\xb7\x9b\x8e\x97\x93\x6e\x37\x9e\x56\x6d\xa7\x97\x98\x49\x5a\x3e\x05\x70\xd6\xf8\x71\x06\xa4\x25\x9e\x7c\xb5\xe6\xfc\xc1\x3b\xe8\xe8\xd5\xc7\xcb\x78\x06\x23\x1c\x01\x38\xb5\x8e\x38\x16\x49\xae\x79\xc8\xc5\x8b\x83\x6e\x77\x37\x9e\x25\x71\x96\xe4\xe3\x45\x6f\x38\x01\xe3\xc1\x04\x68\x80\xee\x2f\x7a\x3d\xb0\xaf\x9d\x3f\xf1\x42\x19\xe7\x95\x78\x19\x38\x4d\x32\xc9\x2c\xea\x3e\x67\x70\xca\x89\xab\x15\xe2\x6c\x7b\x2f\xaa\xc8\xf2\xce\x2d\x21\xbc\x74\xfd\x92\xcd\x0f\xd0\x28\x7c\xf6\x08\x56\x48\x7b\x54\x46\x49\x40\xb6\x07\x6a\xc2\x64\xe4\x91\x33\xb4\xf5\x38\xac\xb7\xd9\xaf\x6c\xe8\x2d\xa0\xae\x4b\x92\x9f\xa2\x6e\x9e\x63\xde\x26\x03\x1c\x02\xef\xb1\x48\xe6\xf5\x8f\x55\x48\x46\xa1\xb5\xa5\xbe\xdc\x7f\xf3\x8d\x97\x52\x5a\x54\xca\xab\x5c\xe1\xd8\xe2\xa5\xbc\x24\xb3\xd7\x4d\x55\xbf\xa0\xd0\xe1\x3c\x0c\x17\x0d\x41\x2c\xc3\x04\xf5\x8a\x93\x23\x23\xbf\xb7\x59\x61\xf4\x34\x15\x24\x7c\x8f\x10\x41\x34\xcd\x2e\x1d\x31\x65\x47\xf7\x4e\x8e\x3c\x03\x06\xab\xe7\x2e\x35\x7c\x73\xc6\xf0\xfc\x14\xc4\x04\xc0\xdc\x0b\x0b\x84\x75\x40\xce\x24\x49\xf2\x6e\xf7\xda\xbb\xfd\xe2\xe4\xe8\x4b\xd7\xe4\x26\x17\xe1\xd2\x2b\xe5\x8d\xcd\x59\xef\xa6\xf3\x96\x92\xcb\x7e\x04\x06\xbf\x9c\xa5\x45\x01\x84\xdb\xc4\xa9\x48\x42\x8f\x2e\x1d\xb3\x45\x76\x2f\x9d\xa3\x38\x17\x3e\x0c\x1a\xe1\xec\x83\xed\xea\x50\x52\x82\x26\xb0\xb5\x62\xb4\x5a\x45\xae\xb6\xcf\x37\xdf\xbd\x76\xed\x08\x7a\x59\x32\xa7\x1f\x89\x9d\x6a\x67\x9f\xd4\x2c\x38\x77\x99\x25\xfd\x4e\x74\x2e\xd9\x4c\x74\x4b\x60\xd1\x73\xfc\x4f\x47\xc0\x2c\x89\x9e\xdb\x63\x7b\xcf\x45\xcf\x05\x70\x31\xcb\xd3\x59\x0f\x13\xcc\x8c\x73\x85\x9a\x2e\xcf\x06\x10\x99\xab\x1a\xb3\xfa\xeb\x14\x7d\xbb\xc4\x94\x5f\x08\xa4\xfe\x3c\xff\x6f\x77\x20\x36\xdb\x2e\xab\xdd\x2a\x39\x77\xb1\x28\x0b\xd6\x91\xbd\x75\x52\xd2\x71\x46\xd3\x8f\x74\x44\x48\x43\x99\x6c\x5c\x42\x92\x2e\xd0\x6a\x15\xcb\x44\xa2\xcd\x15\x51\x3f\x4b\x0b\x76\x47\x6b\x40\x5e\x8b\xc0\xde\x90\xb3\x35\x6b\xd7\x88\xcf\x2a\xf1\x0a\xe3\x48\x6b\x36\xc9\xaf\xd4\xca\x4a\x52\x8b\x3f\x9e\xe8\xf5\xd1\x59\x3a\xea\x46\x84\xa6\x7b\xd1\x35\x0f\xea\x11\xcc\x55\xa6\xd4\x06\xee\x55\xbe\xa6\xc9\x78\x02\x0b\xfe\x5f\xe9\x79\xb7\x52\xd0\xfe\x56\xd1\x7f\x80\xd2\x87\x0f\x0a\x84\x44\xb0\x87\xc1\x7e\x76\xcb\x7a\xe1\xd6\xbe\xae\xa6\xd2\x03\x37\xdf\x9e\x53\x0f\x4c\x18\x0e\xc0\x01\x89\xa7\x30\xea\xf1\xbd\x1a\x81\xd5\x2a\xd5\x51\xf5\x47\xf5\xe2\x39\x14\x6e\xb1\xfc\x0a\x85\xae\x00\xd6\x95\x67\x56\xe3\x9c\x28\x19\xec\xd3\x5b\x26\x5e\x04\x15\xf2\x2a\x67\x9e\x31\x8b\xc9\x98\x4e\x00\x58\x03\x7e\x70\xb9\xbe\x11\x5a\x34\x23\xe1\x76\x27\xd4\x5c\x8c\x60\x11\xc0\xfd\x45\x3a\xa5\x79\x4f\x93\xe0\xde\x61\x89\xb3\x59\x6f\x9a\x2f\x96\x25\x43\xb3\x0b\xed\x80\x2f\xc4\x8b\x78\x55\xd3\x99\x24\xa8\x3f\xcd\xb3\x2c\x5d\x16\xe8\xab\xe8\xb4\x80\x34\x41\x9c\x40\xff\x16\xaf\x0c\x71\x82\xfa\xf3\x2c\x65\x0c\x11\xf1\x31\xe7\xbb\xa5\x78\x23\x7d\xef\xb4\xaa\x1e\x1a\xdb\xa9\xa2\xda\xd5\x08\xa6\x7a\xe6\x00\x16\xc9\x60\xbf\xb8\x85\xf6\x8b\xbd\x3d\x90\x8e\x8b\x89\x73\x55\x2a\x26\xd2\xaf\x42\x80\x82\x9e\x71\x7c\x1f\x59\x33\xe5\xde\x10\xc0\x69\x9a\x65\x87\xe9\xf4\xe1\xc8\xea\x38\xf6\x86\x93\xf5\x3a\x4e\xa5\x17\x3f\x5e\x45\x78\xf1\xd3\x05\xe1\x3c\x21\x71\x26\x89\xca\x71\x10\x12\x98\x4c\xf3\x05\x26\x47\x2f\xeb\x1a\x1c\x1a\x52\xf0\x74\x9b\x1e\x15\xd6\x49\x79\x50\xe3\x12\x87\xb8\x2a\xe2\x5e\x2f\xa9\xfc\x83\x00\x58\x8f\x62\x9c\x9c\xad\xa5\xa7\x4a\x61\x09\x76\x84\x42\x66\x14\x1d\x51\xa0\xa1\x0d\x7e\x61\x2b\x54\xf5\xc2\xab\x6e\x9c\xa2\x6a\x96\x31\x4f\x44\x51\x20\x80\xa1\x9a\xcb\xa1\xf0\x2e\x05\xb1\xd1\x6b\x60\xb1\x6d\x9d\xb7\xef\xaa\xae\x9e\x55\x81\x33\x9a\x42\x0b\x9a\xe0\x15\x99\xdf\x45\x96\x9e\x6d\x84\x5a\x4d\x61\x5b\xf6\x98\x8d\x10\x14\xdb\x70\x44\xe0\x43\x74\x3a\x62\x7c\x97\xe2\x8a\x6f\xf3\xfc\x20\xc6\x7c\xec\x62\xe1\x01\xe8\x17\x4b\x85\x02\x03\x48\xc1\x88\x7f\xe2\x7d\x50\x00\x31\xe7\x01\x3c\xce\x4c\xef\x66\x5f\xb7\x82\xc5\x38\xce\x00\xd0\x53\x1e\x1f\x4f\x80\xbc\x50\x08\x12\xf0\x72\x49\x29\x46\xb3\x97\x55\xd5\xd0\x8a\x98\x2c\x56\xcf\x72\xcc\x43\xbc\x4e\xe5\xfe\x75\xd4\x93\xf8\x24\xa4\xd5\x8b\xe5\xd1\xcd\x90\x98\x18\xd2\x56\x9a\x25\x14\xc0\x53\xc2\xae\xea\xa5\x7c\x07\xf5\x6f\xbf\xf3\xce\xed\x6f\x3c\x78\xf5\xf6\xcb\xaf\x27\xd1\xff\x1f\xa5\xd3\xe3\x7e\x04\x75\xee\x1b\xaf\xbe\xf5\x9b\xf7\x5f\x4f\xa2\xf1\xa4\x6e\x78\xeb\x8f\x54\x13\x98\xde\x43\x74\x1a\x62\x71\xfd\xd2\xe8\xf1\x32\x25\xb3\xde\x52\x0d\xb0\xa1\x94\x33\xfb\xf3\xea\x2d\x69\xe7\x09\xc6\xa7\x16\x52\x1c\xd5\x18\x4d\x76\x5c\x5e\xd7\x58\xb3\x49\x07\xdf\x5a\xd0\x33\x04\xd5\x65\x77\x03\xa5\x4a\x74\xec\x53\x34\x2b\xa7\x5e\xf0\x4b\xeb\xdb\xbd\x16\x68\xd5\xe1\x48\x12\x8f\x23\x01\x6b\x47\xd6\xad\xd0\x83\x80\x35\x1c\x4f\xc0\x3a\xc6\xc0\xc4\x3e\xd6\x15\x88\xb3\x62\xd6\x05\x84\xe4\xc8\xe3\x50\x41\xb9\x88\x00\x40\xc1\xb6\x1f\x8c\xa3\x68\x32\xca\x5f\x1c\x1c\x8c\x2d\xad\xcd\x7b\x43\x30\x19\x55\x21\xf2\x24\x87\x10\x3d\x07\xbe\x04\xed\x3f\x36\xa0\xd7\x39\x7c\x39\xc8\xd5\x18\x4f\x20\x75\xec\x1d\x42\xb6\xc8\xfe\x0d\xc8\xc1\x0a\x92\x10\xbd\x2a\x66\x31\x14\xf9\xca\x13\xaa\xf0\xe5\x80\x8e\xa9\x3d\x9f\xf6\x86\xa3\x01\xa4\x09\x35\xf5\x7c\x1a\x69\x10\x29\x97\x6a\x80\x67\x7a\x72\x33\x7e\x00\x4b\x42\xf9\x66\xba\x1c\xd1\xf5\x45\x16\xc0\x3d\xe9\xbf\x8e\xd9\xf1\x9b\xe9\x32\x21\x0d\xdc\x81\x3e\x7f\x62\x04\xfa\xde\x20\xb6\xd1\x25\x4d\x76\x7b\x25\x29\xd2\x79\x50\x25\x6d\x0b\xf3\x15\x2c\x75\x84\x58\x4f\x4c\xc6\xb4\x1b\x2c\xa6\xd8\x15\x81\x3a\xba\xe4\xe5\xbb\x55\xf6\x34\xda\x1c\x9c\x38\x73\x21\x1c\x34\xea\x59\x43\xcd\x5d\x8d\x8c\x26\x1c\x74\x78\xac\x91\xa3\x30\xd5\x12\xd0\x97\x05\xe1\xca\xb6\xdb\xbc\x0a\x2d\xc0\x1f\x74\x78\x77\xa9\xba\x84\x8d\x90\xb7\xa0\x35\xd0\xa6\x41\x68\xe3\xf6\xd0\x16\xbc\x4e\x4f\x5c\xaa\x83\x17\x85\x8b\x01\xac\x0d\xd0\x3d\xa0\x9e\xfb\x38\xbc\x5c\xa8\x3b\x6d\x97\x21\xfe\xc7\xfa\x61\xae\xdd\x02\xa6\xea\x16\x90\x01\x38\x4f\x06\xfb\xf3\x5b\xd9\xfe\x7c\x6f\x0f\x4c\xc7\x73\xf7\x16\x30\x9f\x28\x06\x5d\x05\x1a\xab\x51\x2c\x10\x4f\x81\x70\xc8\xec\x51\x25\x38\x4b\x8e\xfb\x92\x38\x2a\xf7\xcc\xe3\x89\xa5\xf7\xa7\x71\xdd\x07\xf9\xa2\xc2\x9d\xc2\xdc\xee\xd2\x71\x3e\x11\xf6\x55\x35\x1c\x93\x7c\x2b\xf6\xf8\x56\xba\x16\x32\x06\x00\xd3\xa4\x74\x39\xf5\x5c\xfb\x2f\xad\xc0\x59\x7a\x82\xb0\x28\x94\x02\x11\xe6\xea\x24\x39\x5b\xef\x2c\x03\x5e\xcc\x9d\xf8\x35\x63\x32\xd9\xa1\xab\x55\x5c\x35\x4a\xf6\x5c\x42\x19\xae\x46\x9d\x70\xd3\xf1\x6c\xcc\x26\xc2\x9d\xb4\x74\x07\x65\xb8\x00\xec\xb2\x0b\xab\x55\xc3\x57\xcd\x23\x54\x2f\xa5\x68\x2d\xc6\xa6\x0f\xbe\x90\x99\x74\x7d\x50\x07\x91\x02\x62\x3f\xda\x43\xa3\x88\xe4\x44\x4a\xf3\x8a\x7e\xb4\xc7\x64\x83\x3b\x0b\x29\x4d\xc8\x01\xa4\xdd\x6e\x7c\x32\x8e\xf8\xc1\xbe\x47\xf6\xa2\x57\xf0\xec\xe5\xe3\x94\x1c\xa1\x48\xfb\x7e\xcd\x0f\x0b\x44\x4f\x10\x8d\x73\x78\xca\x0f\x4c\x31\x96\xa3\xa4\xd0\xae\x6b\x4e\xe0\x59\x4e\xee\x10\xcc\x46\xaa\x3c\x89\x23\x4c\x30\x8b\x5c\x85\xfc\x53\xc9\x89\x4b\xfd\x7b\x4e\x07\x0e\x93\x4d\x37\x88\x8a\xcc\xf9\x29\x5d\xfa\x63\xdf\x93\xc4\xd4\xb9\xc2\xd4\xaf\xb2\x2a\x7c\x50\xd8\xe9\x02\x4e\x52\x1d\x58\x1d\xaf\x56\xb1\x50\x82\xef\xe4\x30\xe5\x17\x44\x71\x75\x94\x50\x2c\x12\x71\x29\x55\xbe\xa2\x8d\x78\xbc\xd8\x29\x12\xa3\x8d\x21\x22\xd1\x11\x68\xef\x73\x76\x3d\x47\x9e\x27\x21\x55\x5e\xc4\x57\x14\xfd\x50\x58\x00\xe8\x79\x00\x93\xe5\x8d\x05\x62\xb7\x8b\xfa\x39\x27\xc6\x8f\x70\x96\xbd\x82\x0a\x46\xf3\xd3\x57\x33\x24\xb5\xca\x9c\xc5\x2b\xfa\x33\xf9\x31\x76\x98\xe5\x62\x2d\x77\xd9\x11\x44\xf0\x90\x5f\x2a\x97\x35\x86\x5c\x45\x60\xf5\xf1\xd4\x5c\x09\x64\x5c\xa5\xdc\x78\x28\x88\xc1\xa4\x89\x18\x10\x45\x0c\xb0\x20\x06\x48\x85\xc7\x38\xab\xde\x46\xe5\xa4\xa3\x25\x45\x27\x88\xb0\x57\xf2\xf2\x30\x43\xef\x20\x32\x43\x34\x82\xbb\x03\x2d\xda\x2e\x10\xb3\xb1\xfa\x63\xda\xb7\xf0\x84\xd8\x29\xd3\xdc\xd2\xd0\x8d\x61\x46\x1d\x32\x03\xd6\x13\xc0\xaf\x25\xe9\xec\x2e\xc9\x4e\x63\x33\xba\xc3\xf5\xda\xf3\x55\xf3\x75\x94\x3e\x7c\x33\x5d\xc2\x54\xa2\x85\x42\x85\xa0\x5b\x28\xdd\xb6\xd9\x96\xa3\xca\xa6\x74\x88\x5c\xf5\x2d\x4b\x3e\x52\x2b\x18\x42\x66\xfc\x25\x43\x89\xbc\xfd\xc0\xec\x76\x50\x1f\x17\x0a\x13\x30\x39\x92\xaf\xe6\x66\xf1\x47\x64\xb5\x42\x7d\x92\x33\x3c\x3f\xd5\xa4\x56\x8e\x4a\x5c\xa3\xb6\x9f\xef\xf2\xe6\x7f\x8e\xa3\xbd\x2d\x57\xa5\x3e\x5f\xa9\x55\x05\x0b\x8a\x2f\x40\x6c\xad\x2d\xb6\x4c\xbf\x72\xeb\xee\x65\x38\x1c\xe0\x64\xf3\x5d\xfd\xea\x5d\x6a\x39\x37\xed\xfa\x15\xdb\x75\xae\xaf\x88\xa3\xbf\x69\x09\x50\x97\xe7\xf3\x41\xe3\xe9\xbe\x63\xca\xa3\xc3\x5e\x49\xe5\xa6\x92\x43\x72\x88\x03\xf2\x06\xc2\x38\x51\x96\x53\x46\x22\x3a\xd0\xb6\x29\x86\x2e\x4a\x5b\xd7\x7b\x03\x7b\x7f\x95\x8b\x5d\xbd\x78\x87\xa5\x2b\xce\xa3\x0e\xb3\x6e\x30\x3a\x91\xf0\xe9\x2b\x38\x0a\x26\xc2\x1d\xb6\x58\x7f\x9f\xe3\xde\x06\x15\xec\x5c\x08\x5a\xcb\x1f\x54\x50\xac\xea\xd4\x6c\x60\xb0\x07\x33\xb4\xe4\x74\x8f\x30\xce\xdf\xda\x98\x60\x49\x92\x60\x75\x18\x1b\xc7\x1a\x31\x86\x44\x28\x7b\x36\xca\xb6\x3a\x68\x87\x98\x30\x1b\xae\x48\x8c\x0f\x32\x2c\xf4\x90\x33\x58\x5f\xea\x7b\x83\xc4\xeb\xd8\x97\xe4\x33\x1d\xa7\xc8\x93\xe4\xcb\xa0\x7a\x3a\x48\x6f\x8c\x79\x31\x21\xc6\x92\x22\x73\x22\x13\x90\x01\x98\x4b\x29\x38\xcf\x29\x44\x8e\x09\x4c\xb3\x75\x17\xd4\xa5\x0a\xed\x2f\x74\x57\x8e\xff\xfa\xa8\xac\xa9\x9a\x0d\x82\xaa\x66\x03\x57\xd5\x6c\x30\x19\x9d\xad\x61\xf5\x06\x63\x95\x17\xac\x4f\x89\x03\x32\x42\x7d\x31\xc7\xd6\xc0\xba\xc4\x2d\xf1\x79\x81\x13\x32\xbc\x08\x4d\x14\x38\xc4\xf3\xd7\x43\x74\xba\x13\x22\x42\x14\x1c\x50\x11\x8d\x8f\xf1\x7b\x02\xbf\x3e\x10\x11\xd1\xb2\xba\xff\xe8\x01\x1d\x69\x07\xa0\x2f\x65\x29\x79\xc8\x6b\x92\x91\xe5\xd1\x94\x17\xaf\x8d\x80\x6f\x74\xb1\xd1\x24\x10\x3a\x8f\x04\xa3\x25\x37\x14\x2c\x96\xa5\xef\x9d\xb6\x2b\xd3\xb2\x3d\xe1\x2d\x27\x6b\xf8\x4a\xd3\x47\x4d\x5f\x50\x3a\x6b\x82\xca\x23\x8a\x85\xd2\xdc\x96\xf8\x0b\x57\xe6\x89\xdc\x4e\xf9\xdc\xae\xc8\x37\x34\x2a\xd6\x52\xa8\x88\xbc\x7c\xbe\xf6\x49\xbb\xf6\x7d\x46\xb2\x65\xdb\xb4\x55\xdb\x1c\x21\xce\xd9\x30\x6e\xdf\xf0\x85\x06\x9e\xb7\x6b\x5f\x63\x67\xab\x36\xd3\x56\x6d\x0a\x9c\x6e\xd5\x5e\xd1\xae\x3d\xb9\x13\x5a\xb5\x58\xb6\x6a\xd1\xec\x9f\x76\x8d\x66\xfd\x0d\xae\xf4\x9b\x0f\x89\xa7\xca\x61\x87\x1c\x90\x5b\xf1\x03\x1f\x8f\x6e\x7b\x1b\x65\xae\x10\xc0\x67\x82\xf8\x27\x16\xc4\x43\xa9\x60\x22\x3a\x69\x05\xfc\x2b\xba\xb7\xfb\x2b\xfb\xf9\xbe\xbc\x1b\xc2\xb4\x6d\xea\x9c\xda\x7c\xf1\x02\x70\xf8\x73\x30\x21\xd9\x7a\x29\xa5\xe9\x69\x3b\xa5\x82\xc6\xf7\x91\xab\xbb\xc2\x07\x4c\x44\x86\x41\x7e\x74\xe8\xf2\xa3\xc3\xc9\x68\x3c\xd9\xd9\x72\x93\x93\xaf\x01\x4a\x1c\x8d\x5d\x85\x01\xef\xfd\x5f\x0b\xfc\xb1\x75\xb6\x5b\x2c\x33\xcc\xe2\xa8\x1f\x01\x98\x26\xf9\x38\x77\xae\x5b\x34\x19\x08\x27\xd2\xe6\xe6\x7c\x16\x81\x83\x54\x85\xbd\xc4\xe4\x28\x1e\xc2\xd4\x14\x07\xba\x25\x18\x81\xd1\x38\x9d\xac\xa5\x2f\xbd\xc0\x50\xd4\xeb\x81\x7c\x64\x17\x97\xd7\x03\x94\x44\xd1\x08\x73\xee\x3c\xb6\xba\x9b\x03\x88\x7b\x42\x59\x33\xfc\x00\xaf\xc1\x86\xba\x5d\xa1\xd0\x40\x4d\x47\x08\x74\xbb\xd4\x89\x20\x29\x05\x96\xbe\x16\xd1\x40\xd4\x50\xef\xf1\x45\xe2\x8f\x6d\x14\xdb\x1c\x0e\x38\x38\xf4\x4a\xef\x25\x94\xdf\x12\x8a\xbd\x24\x3a\x8b\xf6\xa8\xf2\xde\x07\x23\xb0\x17\xad\x23\x1b\x7a\x5c\x32\xf7\x08\x1c\x14\x23\xb4\x17\xf5\xa3\xbd\xad\x0f\xe5\xe2\xe8\xff\x0c\x8e\x3d\xff\x6d\x23\xa0\x7b\x80\xd6\xae\xa0\x78\xeb\x34\x24\xc7\xb1\x6d\x07\x36\xb0\xe1\x5f\x3c\xfa\x63\xf9\xa1\xd6\xf7\xb1\xa7\x10\x69\xc0\xbc\xed\xf8\x2e\xb3\x5c\xcd\x83\xb5\x13\x1c\xdd\x75\xb5\x69\xe5\x4a\xf4\x20\x2a\x89\x1c\xc8\x2c\x1a\x91\x98\x02\xb1\xb7\x0a\xc4\x0e\xa4\x86\xa1\x48\x8f\x2a\xda\x86\x0e\xfb\x1f\x36\xa5\x03\xb0\xea\x1d\x1c\x83\xf5\xaf\x9a\x47\xd5\x3a\xd6\xe4\x7c\xfa\x06\x09\x38\xdf\x91\x16\xe7\xc0\x9a\xb0\xf6\xca\x95\x52\x86\xc0\x3b\x7e\xfd\x14\x83\x34\xd1\x21\xb7\x21\x4e\x06\xfb\xf8\x16\xd9\xc7\x7b\x7b\x80\x8e\xb1\xfb\x8e\x8f\xad\x3d\xb1\x31\x2c\xf2\x9d\x5c\xd5\xdf\x2f\xdd\xa7\xd3\x5a\xb7\xfa\x25\x95\xf1\xb3\x64\xb0\x4f\x6f\x31\xe9\x98\x60\x4c\xdd\x6e\xa9\xa3\xc9\x65\x5e\x75\x21\x11\xaf\x5f\x21\x95\xca\xea\x22\x4d\xd3\x0c\x91\x59\x5a\x89\x20\x24\x8b\xd9\x05\x0b\x2f\xed\x25\x33\x89\xea\x98\xaf\xef\xb3\xda\xdb\x7f\xed\x09\xda\x35\x50\xac\xec\x9a\x0e\x26\xca\x5e\xdf\x29\x18\x52\x53\x14\x8a\x71\xbb\x9c\xbf\xd8\x1d\x42\xa3\xd7\xc6\xe8\xa9\x59\xa4\x14\x16\x09\x1a\x57\xda\x9f\xc4\x60\x7f\x37\xa6\x49\x9c\x26\x45\x9f\x08\x1f\xe9\xa0\x3f\xcb\x89\xb0\x4d\x55\x22\xe8\x54\xf9\xcc\x85\xbb\x6c\xb5\xd2\xca\xfc\xbb\x49\xc2\xc0\x3e\xef\x12\xec\x2b\x47\xe9\x25\x38\xc3\x7c\x08\x79\x52\xae\xe7\x98\xa4\x59\x76\x7a\xc6\x07\xb0\x4b\xbb\xdd\xa2\x2f\xc7\x6e\x53\x31\x30\x85\x84\xe8\x58\x39\x51\x37\x81\x99\xc9\x5a\x4c\x6f\xc7\x9a\xa1\xdc\x3f\x5d\x22\xe5\xe0\xe0\x0e\x39\x49\x33\x3c\xeb\xf0\x1b\xc9\x62\xc9\x3a\x2c\xef\x88\xa7\xc5\x72\xca\x4a\x8a\x3a\x24\x27\x3d\x31\xc3\xc3\xcc\xde\x1a\x23\xb0\x5e\xc7\x15\x65\xb0\x06\xf7\x66\x4f\xc4\x10\x9e\xad\x85\x01\x0d\x5a\xad\x90\x8d\xe4\xf5\xe2\x0d\x10\x9c\x88\x8b\xa1\xa3\x8e\x9e\x96\x0c\xd9\xd4\xc9\xe7\x1d\xd3\x32\xec\xa4\xac\xb3\xc8\x0b\xd6\xb9\x11\x69\x01\x3c\x8d\x11\xbc\x01\x60\x9e\xe0\xf1\x60\x02\xd3\x04\x8f\x87\x13\x58\x24\x78\x7c\xdd\xb1\x3d\xd1\x9e\x18\x00\xcc\xd4\xbb\xf0\x02\xd1\x23\x14\x97\xb0\x00\x41\x59\x69\x2e\xd4\xce\xc5\xb6\x8a\x53\x98\x05\xdf\x62\xab\x3b\x6a\x56\x52\xe5\x33\xe6\x33\xdf\x87\xe7\xf0\x5f\xe7\xd0\x3a\x3d\x01\x7d\x26\xda\x5b\xef\x67\xa3\x3e\x82\x82\x1e\x05\x6b\x10\x94\xce\x7a\x3e\x07\x50\x7f\x46\xfd\x7e\xd5\xa8\x1f\x27\x2e\xd7\x39\xcf\x20\x7c\xfa\xe4\xc2\x0d\x90\x20\x6c\xb9\x2c\x91\x5a\xfb\xd0\xbb\x8f\x08\x92\xa6\x28\xe2\x16\x9b\x76\xbb\x69\x35\x58\x6b\x20\x2b\x8e\xa6\x39\x99\xe3\xa3\x11\x22\x27\x98\xe6\x44\x60\x2d\xd0\xa1\x75\x53\x11\xcb\x3b\x3b\x41\xdb\xab\xec\x14\x15\x73\xd5\x42\x6f\x82\x7e\x5e\xb2\x65\xc9\x5e\x93\xbb\x84\xb3\x14\x21\x82\x87\x45\xfc\xfb\x45\xca\xe2\xbc\xdd\xa6\xa3\xf9\xa2\x47\xf2\x47\x9f\x83\x6d\xd7\x8a\xd8\xb9\x0e\xa3\x2c\xbb\x65\xcf\xb4\x58\x04\x2f\xca\x97\xc2\xb9\x41\x98\xfb\xfb\xec\xa8\xa0\xf8\xf1\x56\xfe\x28\x26\x62\x6d\x76\xb6\xac\xcd\x71\xb9\x48\x49\xcd\xb5\xea\x33\x92\xf8\x8c\x24\x5e\x15\x49\xac\xfb\x63\x28\x5e\x51\xcc\x44\x8c\x81\xd0\xd8\xac\xb3\x19\x31\x06\x00\xe2\xbe\xc6\xd6\x96\x84\x27\xcb\x39\x63\xf6\x0c\xb5\x9f\xa1\xf6\xe7\x06\xb5\xab\x27\x29\xc7\x6a\x89\xa6\x2d\x71\x5a\xe3\xef\x67\x8e\xd3\x17\xbb\x37\x7c\x4e\x4e\xc9\x36\x90\x66\xf9\x33\xa6\xe5\x69\x31\x2d\x2c\xb7\x2c\xcb\xd6\x75\x79\xef\x73\xb0\x26\xcf\x28\xfa\xaf\x11\x45\xaf\x5d\x7f\xd8\x7b\x2d\xa9\x75\xc9\xa6\x9f\x03\x64\xbd\x18\xa9\x2e\xd9\xf4\x0b\x21\xdd\xb1\x8a\x0f\xe9\xd3\x88\x97\xe9\x39\xdc\xd2\xb6\x22\x4a\x20\xa9\x5e\x4b\x89\x68\xbc\x40\xf4\x44\xb8\x75\xd0\xae\x3e\xef\x10\x86\xe8\x49\x9a\x8d\x76\x87\x50\x46\x52\xb9\x9d\x65\xf9\xa3\x57\x17\x4b\x76\x3a\xaa\x98\x64\x1d\xe6\x79\x16\xeb\x5b\xf9\x83\x07\xf2\x1a\xff\xe0\x41\x3f\x35\x35\x22\x00\x95\x83\xda\xe2\x37\xab\x8d\xed\x0e\xa0\x64\x2a\xee\xd2\xfb\x78\x81\x7e\x3b\x27\x48\x1a\x8b\xcc\x6a\x36\x2c\xaa\x0b\xcd\x2a\xeb\xdf\x4c\x55\xf3\x4c\x5b\xa4\xbb\x3e\xa4\x06\x29\xcc\x9d\x54\x3a\xe8\x20\x43\x99\x69\xb1\x3e\x56\x13\xdf\xa9\xc6\x8b\xae\x00\x26\x02\xda\x1b\xeb\x34\x43\xa9\x18\x3a\x8d\xa5\x99\x9c\xf2\xa5\x28\xcb\x89\x0f\x49\x81\x18\x4f\xe4\x25\x73\x1f\x79\x65\x17\xb4\x24\x81\x97\x5f\xe2\x0f\x5e\xc5\xcf\xbd\x43\x58\x4c\xe1\x70\x20\x9c\x82\xc0\x45\x4e\x97\xc7\x6f\xca\xe5\x0c\xbb\x37\x90\xa0\x12\x13\xd3\x50\x82\xb8\x16\x0a\x5b\x6d\x74\xa3\x91\x4c\x12\xa2\xe3\x2d\xf1\x42\x18\x46\x0a\xe4\x00\xd2\x84\x56\x3e\x19\xe8\x03\x48\x84\x4c\x5c\x14\x55\x0a\x05\x8a\x5d\x24\x40\x40\x06\xf5\xd9\x7b\xea\x03\x7b\x2f\xa6\x40\xd8\x00\x58\xf0\xb9\x8f\xc1\x26\x97\x83\xac\x0e\x50\xb0\x86\xca\xdc\xa8\xe6\x8e\xd6\x5b\x0e\xe5\x0c\xb3\xe4\xf8\xdf\xe0\x1d\x76\xeb\x5e\xc5\x45\x2f\x9d\x33\x44\x83\xef\x85\xc1\x6d\xed\x7f\x94\x4e\xcf\x64\x11\xad\xc6\x74\x85\x54\xd3\x12\xc5\x8a\x71\xd8\xa8\x31\x06\x8f\x46\x18\x81\x27\x4b\x8a\xa6\xb8\xc0\x39\x91\xbe\xc7\x25\x02\xe5\x0e\x02\xed\x6c\x05\xea\x4e\x45\x86\x58\x41\x33\x7e\xda\xeb\xa7\xc4\x92\xb3\x07\x99\x63\x62\x33\x4c\x92\xa4\x38\xc8\x94\x16\xc9\x78\x30\x01\xa3\xeb\x3c\xab\xdb\x8d\x4b\x27\x13\x9a\x12\xc3\x09\x00\x30\x56\xb6\x6a\xce\x8e\x88\xd3\xbe\xa2\x0f\x72\x8c\x29\x2c\x01\x3c\x93\xf3\x19\x61\xa8\x67\x33\xca\xd7\x00\xf0\x63\x81\x2f\xb1\x2a\x4a\x60\x66\x5e\x44\xa5\x23\xac\x56\x58\x72\x88\xe6\x39\x0d\x3f\x2b\x6f\xc0\x84\x8d\xa8\x74\x75\x68\x42\x36\xa1\x09\x7b\x86\x26\x0d\x68\xf2\x92\x58\xe3\x27\xc5\x13\xf6\x08\x21\xf2\x6b\x89\x28\x98\x4c\xb3\xb2\xc0\x27\x98\x9d\x0a\x6c\x51\x88\x93\x9e\x1f\x71\x8a\x66\xc4\xe1\xd8\x62\x4d\xf0\x60\x66\xf0\x88\x5f\x63\xb2\x5b\xd7\x57\xab\xec\x12\xde\x6c\xd1\xe3\x25\x9a\x32\x34\xeb\x5c\xef\xe4\xd4\xbc\xdc\x4e\x1d\x24\xcd\x5e\xbc\xde\xed\x4e\x25\x06\x96\xfd\xe2\x18\xcf\xf9\x25\x26\x88\x85\x85\x8f\x85\x05\x9c\x5a\x2c\xcc\x2d\x16\xa6\x1a\x0b\x05\x06\x19\x34\xfc\x8c\x58\xdd\xd2\x1a\xbe\x53\x88\xdb\x6f\x00\x15\xb7\x7b\xeb\xb1\xfa\xab\xbb\x0d\x7e\x6d\xe8\xe5\xbd\x74\x81\xee\xd2\x4b\x38\x5c\x35\xce\x3c\x3b\x64\x7f\x5d\x90\xe6\x32\x8e\x5a\x8e\x35\xcf\x70\xe5\x57\x1d\x57\x9e\x00\x47\xe4\xcf\x5e\x3a\x0b\x5b\xab\x5c\x11\x9a\xb8\x56\xdf\x5f\x10\x77\xb5\x4f\x82\x9e\xd8\x43\xcf\x2b\x64\xfb\x0c\x7a\x72\xcc\x84\xd3\x0a\x7a\x96\x07\xd3\x2a\x7a\x96\xdd\x6e\x44\x04\x73\x17\x99\xf8\xd3\xec\x74\x89\xee\xce\x65\xa1\x6e\xd7\xfa\x4d\xaa\x7e\x1e\x4e\x80\x6a\x50\x0d\x77\x0a\x45\x34\xda\x51\xec\xee\x02\x58\x2f\xa2\xcc\x2c\x86\x00\xb4\x65\x06\xb3\x66\x66\x30\x9d\xcd\x0c\xfa\x4f\x0d\xfa\xb7\x65\xc6\x14\xfa\x87\x55\x6d\x3f\x5f\xa4\xf2\xd9\x2b\xc6\x17\xed\x15\xe3\xfc\x24\x43\x7b\xa6\x78\x22\xed\xdc\xad\x74\x04\x5e\xbd\xfe\x2e\x69\xa6\x52\x0d\xa7\x33\x4c\xb5\xca\x6f\x91\xa4\xe3\xc1\x04\x96\x49\x3a\x1e\xf2\x33\x36\x1d\x5f\xe7\xb4\xcc\x57\xf9\x65\x60\x47\x45\x59\x9b\xea\xd6\xcc\x6f\x43\x51\xf9\x48\xe6\x6a\x24\x69\x51\xe0\x23\x12\x4f\xa1\x8d\xd9\x56\xa3\x3b\x44\xd1\x9d\xb8\x68\x3a\x71\xad\xf6\x70\x09\xe7\xe7\xa1\x30\x33\x3c\x9f\x3f\xa3\x2e\xcf\xa8\xcb\x67\x49\x5d\xdc\x87\x11\x9f\x5b\x9e\x67\x79\xca\x1a\x19\x93\xf3\xd0\x94\xeb\x22\x8e\x85\x62\xd3\x9e\x94\xaa\x88\x88\x1c\x87\xa8\x73\x3d\x6a\xc1\xfb\xa8\x37\xe1\x2c\x29\x65\xb4\xa6\xd2\xd5\xf2\x69\xe2\x30\xe2\x46\x31\x53\x9f\xef\xd8\x38\x83\x04\xe2\x73\xed\xf3\x73\x18\x0b\x7c\xf6\x37\x2b\xdf\x61\x99\x24\x01\x44\xe3\x00\x4e\xc8\x79\x99\xd3\xbc\xf9\x69\x2d\x60\x36\x72\xfd\xd2\x8e\x1d\x8d\x20\x69\x92\xeb\x85\xfd\x5c\x9b\x3f\x34\x1f\x41\x69\xff\x01\x36\x18\x49\x2d\x46\xe2\x35\xb0\x1a\x95\x6d\x5e\xed\x14\x3e\x86\x8c\x28\x3e\x5f\x27\xcf\x46\x44\x55\xbf\xa5\x92\x7b\xb3\x73\x47\x75\x5d\xf0\x4a\xb7\x7d\x0d\x6f\x27\x5d\x30\x7b\xe2\xdc\x17\xb6\xe6\x3d\x01\x53\x4f\x30\x9f\x9e\x8f\x0f\x23\x1b\x65\xf2\x55\x86\x4c\xc5\xec\x11\x42\x8b\xf0\x78\x2a\xd0\xb3\x0e\x4c\xdd\xcb\xdc\x90\xf3\x9f\xfa\x01\x1c\x17\x42\x83\x21\xce\xc0\x01\xbf\x4b\xa6\x07\xa5\x23\xdb\x18\xa5\x2f\x5e\xef\x76\x63\x53\xfb\xfa\x04\x40\xf7\x3b\x18\xa9\x5f\x59\xf8\x0e\x98\xfb\x77\xc0\x1c\x3a\x3c\x99\xbf\x2f\xb4\x85\x83\xb9\x06\x96\xe7\x21\xd8\x61\x83\x87\x2f\xd0\x16\x39\xcf\xa9\x7f\x8c\x67\xe8\x5e\x39\x9f\xe3\xc7\x02\xa9\xf9\xcf\xdb\xe2\x57\x93\xc8\x4c\x7b\x8d\xe6\xec\x02\x67\xbb\x23\xdb\x42\x07\x17\x1d\xf3\x41\x44\x7d\x9c\xa7\x27\x79\x29\x30\xd2\x34\x1c\x41\x63\xd1\x4d\xe0\x19\x9e\x8d\x3c\xa8\xf1\xcb\x7b\x4e\x54\x24\x3c\x7d\x24\x3b\x2b\x52\x12\x86\xb3\x51\xf4\x95\xfe\xa0\x3f\x88\xd6\x2d\xb4\x19\xb6\x0b\xf0\xc8\x6a\x45\x37\x10\xdf\x8a\xe4\xed\xb3\x3b\x21\x9a\xee\x1f\xda\x62\xa4\x38\x2f\x8e\xff\xea\xe3\x37\xa4\x10\x27\x31\x4d\x10\xf4\xd7\x89\x82\x03\x3a\x72\x20\x4c\x81\x6b\x56\x6a\x84\x51\xb0\xf0\x76\x44\x69\x77\x44\x76\x7e\xa2\x3f\xdd\xa6\x63\x14\x22\x79\x53\xcd\xbb\xe4\x76\xf9\x4b\xbb\xfc\xd9\x5a\x59\x0c\x7d\xd6\xcf\x9e\xa9\x7d\xf6\x2c\xce\x27\x67\x2b\xca\x43\x46\xd3\xe9\x53\xe5\x47\x9e\xc9\x9a\x9f\xc9\x9a\x2f\x49\xd6\xac\xd1\xf7\xc9\x05\xce\x2c\xef\xcd\x52\xf6\xeb\xf2\x34\xc7\xa9\xea\xdb\x14\x6d\x62\x34\x9e\xf4\x68\xdf\x40\x56\xf5\xa9\x1e\x37\x3f\xa3\xb1\xfc\xb3\xa6\xa9\x08\x5c\xf4\xe9\x2e\x64\xfa\xf2\xab\x88\x49\x3e\x1e\x3d\x01\xfb\x2a\x5b\xb8\x32\xf6\x55\xaf\xc7\x33\xe6\xb5\xc6\xbc\x4a\xcb\xa1\x73\xb1\xae\x2c\xff\xd5\xc7\xec\x5f\x0b\xc6\xf5\xb3\x27\xb1\x17\x66\x5b\x5b\x2b\xbe\x5f\x95\x7f\xac\x66\x95\xf6\xd6\x56\x0f\x2d\x97\x7f\xbb\x6d\x44\x6d\xf1\xb1\x4f\x77\xf0\xe7\x81\xee\x10\x8b\x7c\x74\xdd\x46\x5a\xda\xd2\x78\xf4\xb3\x27\x26\x01\x7f\x81\x5b\x9f\x66\x9a\x96\xb4\x2e\x2a\x27\xf9\xa3\x18\xb4\x81\x57\x49\xf0\xe3\xcf\x1c\x60\xcf\xde\x2c\x7f\x75\xde\x2c\xc3\x36\x9e\x43\x30\x1e\xf8\x8f\x78\x97\x84\xe8\x1c\x7f\x45\x08\x9e\x16\xa8\xde\xce\x2c\xf4\x19\xa6\x3f\xc3\xf4\x27\xc0\xf4\x46\xff\x14\x17\x47\xfa\x92\x4d\x63\xcf\x42\x38\xc6\x30\xdf\x88\xf2\xca\x0a\x76\xa3\xe3\x8a\xab\xe2\x71\xe4\x34\xee\xc9\x11\x68\xa0\xc9\xcc\x57\x4f\x10\x61\x68\x06\xcf\x1e\x98\x53\x9d\x94\x59\x06\xf5\x61\x6f\xd3\x77\x97\x7c\x60\x85\xcc\xf2\xde\xb3\x64\x96\x35\xce\x1d\x35\xbb\x1e\x96\x11\x5c\x42\x0e\xc0\xfa\xf3\x74\xca\x72\x7a\xfa\x5a\x4e\xc3\xde\xba\xfa\x22\xa2\xc9\x6a\x75\xb6\xf6\x23\x66\x89\x18\x87\x76\x69\x78\x01\xcf\xb1\xb1\x65\x57\x2a\xc3\x8a\x1e\x58\xe3\xde\xb3\xb0\xbf\xe0\xea\xfa\xdb\x1a\x60\x0d\x0b\xcf\x03\xaf\x0a\xf4\x64\x91\x82\xbd\x07\xbc\x56\x8a\x40\x2b\x90\x00\x48\x76\xa6\x39\x29\xf2\x0c\xf5\x1f\xa5\x94\xc4\xd1\xd8\x45\x9b\x89\xde\x29\x68\xc6\xf7\x4a\x81\x58\x87\x57\x7e\x2f\x27\x08\x76\x0e\x4b\xd6\xd1\x57\x39\x95\xc9\x6f\xde\x24\x67\xbc\x60\xb9\xec\x47\xc2\xab\x73\x81\xd8\x1b\x72\x35\xdd\xed\x21\xed\x59\xc5\x93\xaf\xfc\xca\x19\x3d\x58\x2e\x67\x29\x43\x81\xe2\x4f\xaa\x3b\x17\xe8\x0e\x32\xb0\x86\x6e\x56\x60\xfb\x5e\xbc\xc3\x50\xa0\x45\x01\x7e\xcd\xc7\xa2\x2a\x5e\xaf\x5d\x87\x20\x2e\x20\xc4\xe2\x4a\x19\x03\xa3\xf8\xe8\x08\xd1\x58\x19\x2d\x2b\x63\xf2\x08\x22\x89\x0f\xda\xc8\xbc\x09\xd2\xfa\xbb\x80\xb5\x9f\xe5\x55\xa9\x62\x8c\x45\x18\x54\x1d\x08\xf3\xed\xda\xe5\x50\x70\x51\xb3\xdc\x0e\x38\x36\xd0\xa5\xc4\x68\x16\x95\x0a\x26\x80\x63\xd8\x47\x8a\x43\x24\x1d\x7d\xc4\x2a\xac\x23\x63\x4e\xef\x58\x72\x37\xa9\xc1\x58\xb7\xd5\x61\x43\x6f\x7e\x45\xc7\x55\x43\x6f\x2c\x0d\xbd\x4b\x36\xdd\x34\xf4\x90\x0b\x87\xf3\xcd\x00\xa8\x51\x98\x9b\xd2\x26\x73\x74\xb4\xe1\x1c\x08\xcb\x55\x3e\x03\xff\xf0\x26\x8b\x29\xd2\xc5\xb9\x04\xd6\xed\x0e\x92\x84\x5f\x73\x2f\x47\xcb\xcc\xd5\x99\xc8\x50\x5a\xb0\xce\x30\xd2\x1c\x17\xe3\x27\x32\xc7\x00\xeb\xcb\x61\xb5\x22\xe3\x48\xfc\xec\x21\xe1\xdb\x41\x78\x8e\xe4\xc7\x4b\x92\xe0\x6e\x37\xae\x5f\xa1\xab\xfe\x23\x22\x50\xf5\xd5\x4f\x01\x90\x8c\x8a\x9c\xb7\x4f\x6d\x9f\xf3\xe7\x92\x92\x8e\xe8\xb7\x23\x80\xd8\x11\x3d\xc3\x8e\x71\x96\x0e\x3b\x39\xed\x44\x11\xe8\x3c\x4a\x8b\xce\x32\x2d\x0a\x49\x95\xdd\x36\x3a\x72\x65\x9f\x33\xb1\xe9\x50\x93\x6f\x80\x9a\x4f\xc2\x65\x7a\x84\x7a\x0c\xb3\x0c\x19\x86\xd7\x66\xb5\x44\x11\xf3\x20\xc7\xc2\x64\x44\xb4\x84\x9c\x78\xb7\x4f\xf4\x96\xa6\x98\x55\x57\x29\xb9\xe2\x0f\x84\x4f\xe0\x3e\xef\xf5\x0d\x5c\x34\xba\x05\x39\x46\xe9\xec\x95\x94\xa5\x4d\xdf\x31\xc1\xac\xe6\x8a\x41\xf2\x6d\x71\x9d\x47\xf3\xba\x8c\x80\x64\x85\xcf\xb0\xf6\xf8\x71\x54\xe2\x19\xe7\x31\x74\x18\xe8\x90\xe7\x0e\xa3\xaf\xb7\xa5\x6d\xe3\xee\x42\x29\x40\x9f\xad\x21\x31\xc2\x1c\xdc\xc7\xb3\x24\xd0\x27\xc4\x7d\xb1\x0e\x09\x52\x31\x26\x38\x49\x94\xa3\x34\xb1\x7f\x69\x49\xfa\xc5\xf4\x18\x71\xe0\xdf\x25\x53\x14\x47\xc2\x9c\x55\x87\xff\xad\x0e\x4b\x03\x30\x02\x90\x41\x0a\x60\x14\x05\x5d\x58\x54\x98\xaf\x86\x39\x91\xd0\xa0\x77\x50\x9f\xa2\x45\x7e\xc2\xe9\xdb\x4e\x05\x36\x2e\x13\x97\xe5\xf9\xc3\x72\x19\x47\x34\x2f\x19\xa2\xa3\x45\x8a\x89\x00\x53\x4c\xfb\x0f\x64\xde\x9b\x78\x4a\xf3\x0c\x1f\xae\x56\xb4\x2f\x73\x38\xc7\x06\xfa\xe9\x94\xe1\x13\x74\x9f\xa6\xa4\xc0\x4c\x3e\xaf\x36\x4f\x73\x07\x1f\xe0\xfe\x92\xe6\x0b\x5c\xa0\xbe\xba\x8d\xb8\x6c\x66\x6e\x43\x08\xa3\x99\x56\xa9\xda\x02\xd4\x1c\x32\x7e\x76\x82\xd1\x79\x4a\xaf\xbd\x7b\x49\x8d\xe6\x3b\x5b\xda\xf0\xff\x36\xaf\x31\xfa\xee\x34\x5f\x5e\x5d\x90\xdd\xc0\xa6\xad\xdc\x0c\xce\xda\x6c\x38\x87\xaa\xe4\x0f\x11\x29\x34\x56\xde\x8e\x41\xbd\x88\x3c\x4d\x22\x38\xd0\x4f\x35\x12\x99\x5e\x7d\x8c\x0b\x86\xc9\x91\x40\xbf\xfb\xe9\x51\x2c\x5c\xaf\x88\x61\xde\x43\xcb\x54\x5c\x74\x47\x51\x67\xd5\x89\x74\xf6\xdb\x54\x44\x4b\x1d\xed\x0e\x74\xce\x3b\x68\x99\xa5\x53\x75\x53\x91\x43\x91\x69\x41\x76\xef\xf3\x8c\x57\x64\xc9\x22\xc0\xd0\xd6\x1c\xf1\x54\x7a\x8f\x3c\xe6\xc0\x2f\xa4\xc6\x22\x38\x9a\x86\x22\x6a\x70\x11\xd8\x91\x67\x18\xea\x17\xba\x65\xce\x35\xd8\x5f\x09\x03\x50\x17\x59\xca\x76\xbb\x5d\x9e\xb1\x9b\x10\x51\x52\x65\x26\xc4\x96\xa3\xb2\x71\x5d\x4e\xb6\xa8\x32\x13\xca\xb9\x40\x72\x8c\x28\x66\xaf\xd1\x7c\xf1\x36\x45\x27\x38\x2f\x43\x20\x10\x6d\x8b\x8f\x3b\xac\xdb\x8d\xb7\x0e\xd4\xa6\x03\x43\x76\x46\xca\x74\x0a\x80\x35\xe4\xe4\x2d\xc0\xde\x4b\x56\x56\x2c\x1a\xdf\xc6\xb3\x97\x4e\xe3\x08\x73\x1e\xb6\x8f\x67\x42\xad\xd9\x50\x62\xb7\xa4\x0e\x09\x24\x22\x53\x88\x17\x20\xbe\x61\x40\xec\x94\x01\xfc\xaa\x6f\x27\x66\xce\x62\x9d\x93\xe4\x10\x09\xb1\x49\x42\xc4\x1f\xa8\xdc\x00\xd5\x00\x16\x6b\x86\xbb\x8e\x4e\xfc\x13\x16\x01\x92\xa6\x28\xa6\x70\xc8\x79\x73\xb1\xb9\xb6\x6d\x10\x0c\xc0\x5a\xbe\x47\xba\xb3\x92\x4f\x4e\x3d\x29\x96\x4b\x35\x28\xe5\x68\x53\x98\xca\xd1\xa2\x4d\x03\xdd\x34\x52\xa5\x73\xd2\x00\xad\x1d\xad\x4a\xba\x7d\x77\x17\x1b\xb6\x77\x75\x17\xa8\x7c\xb0\x37\x04\x6b\x28\xb7\xfc\x79\x90\x40\x5e\x15\xc4\xf2\x60\x6f\x35\xbb\xdd\x98\x5a\xe0\x60\x71\x2d\x88\xb1\x84\x10\xc7\x4a\xfb\x8d\xa8\x45\x2e\xb3\xcc\x53\x18\xbe\x1d\x37\x40\x02\xec\xe4\xea\xa4\x53\xd2\x3b\xb2\x1d\x24\xf9\x05\x40\xd2\xe3\x20\x39\xc1\x05\x3e\xcc\xd0\x7d\x49\xb5\xaa\xe2\x09\xdd\x4d\x55\x36\xa1\xe5\x82\xf5\xa3\x5c\xd5\x00\x90\x25\xe8\x40\xbf\xf4\x8c\x06\x90\x24\xe3\xc9\x3e\xeb\xf5\xf6\xf5\x6e\x12\x6f\x3e\x78\x1e\x53\x4d\x2f\xc0\x19\xe9\x97\x44\x7a\x11\xa1\x60\xe7\x90\xa2\xf4\xe1\xda\xcd\xb2\xd2\xbd\x35\x80\x45\x4e\x19\x9a\x35\x0c\xdb\x9b\x54\x7d\xf4\xe1\x91\xfb\x95\x38\xd1\xdd\x1d\x88\x58\x62\x86\xc5\xba\x2d\x94\x37\xec\x4e\x0e\x85\x0f\xc3\x73\x4b\x7f\xc0\x19\x11\xce\x3e\x77\x87\xaa\x1d\x89\xe1\x14\x68\xcd\x71\xca\xf7\x59\xde\xed\xc6\x31\x72\xb7\x05\x02\xc0\xa1\x76\xb9\x4b\xed\xa8\x81\x07\x02\x32\x12\x1a\x59\xad\x62\x67\xa8\xa6\x0b\xe8\x44\x2a\x83\x78\x53\x1c\x73\x1b\xc2\x9e\xd9\x98\xf5\x9a\x3d\x6f\xb7\xea\xee\x6a\x88\xb5\x1f\x4f\x20\x49\x06\x22\xc2\xb1\x7a\xec\x23\xb7\xe8\x3e\xd9\xdb\x33\x51\xc7\xc7\x64\xb2\xa3\xd8\xd0\x6e\x37\x66\x8a\xfb\x94\x19\x00\x92\xbd\xe1\x2d\xda\xed\x9a\x6c\x0b\x02\x1b\x71\xdb\xf0\xae\x6b\xd8\x70\x98\xbb\x83\x17\xb7\x4b\x71\xf0\x1f\xa7\xc5\x6b\x69\xc1\x0e\xf3\x9c\xc5\x00\xd8\x49\xcd\xf2\xa9\xb8\x19\xf1\x79\xbd\x9a\x21\x71\x49\x7a\xe9\xf4\x7e\x7a\xf4\x56\xba\x40\xb1\xba\xb9\xf0\xc9\x0d\xaa\x8f\x98\x8a\x8a\x08\x94\x26\xfd\x65\x4a\x11\x61\x6f\xe5\x33\xcd\xb0\xbe\x7c\x8c\xb3\x59\x4c\xc0\x7a\x0d\xdd\xce\xeb\xc2\xbe\xdd\xdd\x8d\x1c\xad\xe2\xdf\x46\x73\xd5\x40\xb4\x9d\xf9\xcb\x1f\x21\xda\x2b\x50\x86\xa6\xd2\xb3\x65\x4e\xf8\xac\xae\xb9\xf9\xbd\x45\x99\x31\xbc\x0c\x87\x19\xf3\x1a\x60\x68\xb1\xcc\x52\x86\x8a\x16\x4d\x85\xea\x4b\xb9\x83\x89\x3a\x35\x4f\xb3\xec\x30\x9d\x3e\xec\xe1\x79\xcf\x06\x03\xbb\xba\x57\x57\x87\xeb\xd4\xdc\xd2\xcb\x7a\x1e\x86\xef\x64\x72\xb9\x47\x51\x04\xb3\xf4\x34\x2f\xd9\xc8\x8a\x6b\x94\xc0\xcb\x54\xaa\x78\x9c\x8b\x82\xa0\xb8\xa6\x6a\x45\x00\x4a\xdf\x2e\x4a\xd8\xd7\xd4\x0a\x3f\x27\x00\x94\x1b\x12\x91\x94\x6f\x2b\xd5\x6d\x96\x16\x01\x0a\xed\x7c\xf4\x4c\x62\x24\x4e\x8f\x03\xeb\x60\x86\xd6\xd3\x43\xf3\x9f\x23\xf8\xb6\xf6\xdb\x05\xdd\x2e\x92\x3b\xb1\xa9\x00\x87\xb3\xdc\x8e\x9d\x08\x08\x81\x6f\x26\x84\x2e\xd5\xf1\x86\x85\xdc\xe3\x49\x4d\x94\x6d\xa9\x93\x64\xf0\xd8\xc1\x78\x32\x12\xe1\x83\x75\x5b\xf7\xd3\xc3\x3b\x9c\x0b\xab\x83\x24\x3d\x54\x61\xcc\xa3\x02\xa5\x74\x7a\xfc\x2a\x49\x0f\x33\x11\x7e\xb5\xba\x82\x1e\xc4\x64\x7f\x5b\x56\x31\x49\x92\x3a\x0c\x4c\x73\xa0\xdb\xdd\x1d\xee\xba\x45\xfc\x11\x80\x83\xa8\x37\x8c\x46\x4e\x0b\x7a\xac\x1c\x68\xe9\x54\x8a\x81\xcf\x8e\x53\x32\xcb\xd0\xdd\x25\x22\x8d\xce\x3c\x65\xf5\x9c\xe4\x4b\x44\xa4\xf9\x1d\xe1\x7d\x27\x49\x22\x8b\x2a\x51\xd3\xee\x50\x8a\xbd\xe7\xf9\xb4\x2c\xee\x90\x65\x29\x25\xad\xb2\x83\xd7\x78\xe6\xd6\x1e\x44\x55\x7e\x7d\xe8\x76\x65\x19\xd8\xdc\xe2\x57\xd1\xe9\x2c\x7f\xb4\x7d\xd4\x0f\x65\x39\xc7\x25\xa7\x37\xf8\x83\x98\xf5\x0b\x96\x2f\xf9\xfe\x4e\x8f\xa4\xd3\x76\x00\x77\x87\x60\x34\xbc\x21\x44\x83\x0f\xd1\xe9\xcb\xf9\x4c\x18\x1b\xe2\x82\xc3\x29\x5c\xc3\xc6\xf2\xec\x1f\xe3\xa3\xe3\x0c\x1f\x1d\x33\x34\x3b\xe0\x77\x09\x89\x9e\xdd\xae\x08\x5b\x6a\x33\x6c\xac\x4f\xb7\x06\x38\x88\x51\x5f\xad\x4e\x7f\x9a\xe5\x05\x8a\x99\x1c\x8f\x9b\x7f\x9c\xf3\x0f\x5e\x45\x18\x28\xe6\x54\x07\x23\x39\xc2\x35\x14\x61\x79\xef\x89\x41\xe0\xbc\x0a\x3f\x1b\x21\x8f\xcf\x52\x8d\x74\xb5\x1a\x4f\x80\x8e\x68\xca\xd9\xd4\xde\x50\x07\xc9\xd3\x47\x13\xde\xdb\x03\x78\x1e\x1b\x6b\xae\x6f\x97\x69\x16\x93\x31\x9e\x40\x04\xc0\x19\x4d\xb0\x62\xb2\xb4\xd4\xfb\xc5\xde\xf0\x80\x38\xb7\x09\x30\x22\x86\x27\x27\xeb\x35\xb4\x4b\x3e\xaa\xb2\x3c\xfa\x26\x67\xce\xd0\x6f\x97\x88\x9e\xca\x09\xe5\x34\x8e\xfe\x7f\x01\x32\xa4\x76\x8f\x25\x47\x98\x37\xdd\x8b\x8c\x6b\xbb\x7e\x49\xf0\xb7\x4b\x74\x67\x06\x00\xbf\x17\x32\x89\x73\xb1\x14\x5c\x5a\xba\x4e\x9f\xec\xd8\x33\x5b\xfb\xf2\x8e\x3f\xd3\xe4\x53\x11\xa0\x3c\xc2\x64\x96\x3f\xea\x76\xe5\xdf\x3e\x49\x4f\xf0\x91\x88\x5a\x59\xcd\xe8\x97\x05\xa2\xb7\x8f\xf8\x99\x13\x45\xe2\x62\x63\x22\xf0\xbe\x79\xef\xce\xab\x9d\x08\xbc\xd8\x1b\xae\x56\x4e\xf6\x7d\x8a\x67\x88\xb0\x6b\xe2\x0b\xc4\xc9\xee\xae\xee\x2c\xca\x09\xcb\xcb\xe9\x71\xc1\x52\xca\x22\x4c\x3a\xf2\x83\x11\x99\x9d\xf3\x64\x45\x8f\xd9\x9b\x28\x2d\x4a\x8a\x68\x93\x08\xf6\x41\x96\x16\xec\x8e\xd8\xed\xa3\xdd\x21\x9c\xe1\xd9\x1d\x52\x20\xaa\x59\xb5\xc0\xdb\xcb\x31\x2e\x5a\xea\xc5\x31\x8f\x62\xf3\xb5\x8c\xc0\x8e\xba\xe6\x2e\x4b\x16\x62\x0d\x5f\x3a\xbd\x33\x0b\xe1\xdb\x56\xb4\x66\x2e\x5a\x3b\xa4\x51\x14\xd3\x6b\x76\x84\x98\x8e\xce\x7d\x8f\x9d\x66\x28\xb6\x45\x80\x90\x2d\x39\xa3\x7b\x2d\x27\x2c\x21\x07\x91\xe9\x81\xf4\xe7\x39\x61\xa2\x1e\xe4\xe7\xb1\x9f\xff\x5b\x29\xc5\x29\x61\x81\x2f\x5f\x47\x9c\x6a\x05\x3e\xdc\xc3\xef\x21\x18\x5d\x73\xb3\x33\x4c\xd0\xeb\x4d\xe5\x5f\x4b\x17\x38\x3b\x55\x03\x95\xfc\xd6\x79\x20\x68\x20\x97\x4b\x56\x29\x0c\x3b\x98\xdb\x27\x25\x47\x39\x92\xa5\xf4\x08\x89\x6e\x6e\x33\x46\xf1\x61\xc9\x50\x1c\xcd\x52\x96\xf6\x34\xe5\xec\xa9\x13\x57\x09\x77\x42\x07\x87\x10\x1c\x9d\x20\xc2\x94\xf8\x22\xd6\x12\x67\xe4\xe3\x88\x08\x89\xad\xdb\x55\xb7\x75\x6a\x32\x84\x24\xbe\x7a\x3e\x60\xb0\x5e\xef\xe0\x6e\x97\xf6\xd3\xd9\x4c\xa8\x3e\xbc\x81\x0b\x86\x88\x78\x48\xb5\x3b\x0a\xe6\xfc\x06\x57\x2f\xb2\xc8\xcb\x02\x89\xb3\x13\xe6\x60\xcd\x77\xc1\x3b\x68\x8a\xf0\x09\xe2\xb3\x2d\xc2\x9b\x40\x9d\xba\xfa\x80\x91\x0a\x0a\x50\xe1\x7c\xe1\x7f\x83\xf5\x8d\xc0\x69\xad\x3c\x65\xbb\xdd\x5d\x66\x92\x8d\x32\x6a\x39\xdf\x08\x4a\x71\xa8\x99\xbf\xe4\x84\xa0\xb8\xaf\xa9\x3d\xf2\xa6\x5a\x68\x71\xa6\x08\x7c\xad\x31\x73\x72\x10\xfd\x33\x59\xfb\x3e\x7a\xac\xdf\x05\x0d\x8b\xa9\x7e\xaf\x03\xdc\x6f\x60\x53\x9b\xf3\x70\xc3\xc0\xed\x61\x4d\xd1\x32\x97\x6f\x01\x9c\xfa\x5a\xae\x81\xf3\x14\x8e\xea\x87\x5d\x71\x23\x5c\xd1\x07\xe2\xc0\x63\xad\xcd\x7e\xe5\x57\x5e\x97\x91\x74\xe8\x5f\x04\xfa\x8f\xf0\x8c\x1d\x8b\x66\xf5\xa4\xa1\x5f\xdd\x48\x7b\xe4\x25\xbd\x7f\xcc\x16\xd9\xbd\x74\x8e\xe2\x48\x54\x1d\x75\xec\x8e\xd9\xbb\xfe\x3c\x8c\x96\x8f\x23\x7b\x71\xde\x5c\x73\x38\x18\xfc\x93\x7d\xc1\x8e\x2e\xd2\xd3\x43\xf4\x76\x96\x4e\xd1\x71\x9e\xcd\x0c\x61\xb6\x6b\xb3\xb4\xdf\x04\xaf\x9d\x49\x82\xed\x2d\x8b\xb7\x2a\xfc\x0e\x4e\x37\x2c\x8e\x91\x47\x9c\x07\xd2\x07\x91\xcb\x50\xbb\x63\x02\xab\x55\x14\xad\x5d\xc6\x3a\x27\x75\xf6\xa5\x4a\xff\x55\x99\x48\xf0\x1c\x82\x29\xe5\x1c\xee\x6a\x55\x1f\xaf\x41\x13\xce\x84\x0b\x2e\x38\x27\x75\x0e\xb8\xda\x83\xf3\xbc\x1f\x99\xf2\x06\x7e\x42\xf0\xc4\xfa\xe6\x03\x94\xe2\x6e\xfe\xa9\xc2\xe4\x5b\xdd\xbf\x20\xaf\xcc\x4b\x7f\x25\xe1\xbc\xad\x62\x96\x95\x6c\xaa\x5e\xb6\x12\x57\x5e\x53\x50\xa9\xb8\xa7\xe5\x35\x96\xaa\x8d\x69\x75\x8d\x7b\x32\xba\x22\x16\x3d\x50\x67\xc3\xf3\x52\xce\x95\xd1\x67\x72\x23\x10\x63\x48\x01\x44\x00\x5a\xc3\x40\x15\xe4\x1a\x03\x5a\xa1\x1b\x31\x06\x3b\x28\x2b\xd0\x99\x94\x9c\x55\x2f\x58\xaf\x61\x94\xcd\x22\x97\xdc\xaa\x6a\xae\x2f\xff\x9c\xef\x81\xda\xa2\xad\x85\x1c\x2d\x36\x70\x7a\x31\xb9\xf9\x15\x7e\xb1\x50\x3f\x6f\x25\xbf\x31\x58\xad\x6e\x5c\xf7\x40\xc9\xbf\xd7\x00\xb9\x5e\x43\xff\x28\x08\xdf\x67\x51\x5f\x06\x44\xbf\xcd\x0e\x6c\x32\x66\xfa\xd1\x4f\xea\x92\xb1\x8a\x68\x27\xbf\x10\x8f\xfb\xe4\x2c\xed\x13\x08\x72\xda\xd4\xd4\x07\xfc\x22\x65\xd3\x63\x41\x45\x1a\xeb\x1c\xd1\xbc\x5c\xf6\x44\xda\x79\xa4\x24\xd3\x92\x52\x44\xa6\xd5\xb7\x4a\x28\xac\x6e\x60\x7e\x25\x2c\x77\xaa\x9d\x95\xc9\x37\xf7\xd5\xca\xdd\xec\x8e\xf5\xc3\x3e\xbb\x15\x57\xb5\xc7\x6e\x25\xc3\x83\xc1\xa8\x9a\xdb\x1b\x02\x57\x90\xc8\xf6\x86\xb7\x86\xab\x55\xbd\x2e\xdb\x1b\x1e\xc8\x81\xd8\x26\xc6\x6c\x4f\xee\x3f\x62\x64\x99\x54\x0f\xf0\x21\x3a\x2d\x6c\xf4\x74\xea\x5e\x0c\xcf\xb4\x08\x1a\x4f\x76\xd0\x38\x9f\x24\x64\x9c\x4f\x8c\x06\x2d\x5a\x5b\x3d\x8e\xc2\x43\x5f\x66\x65\x41\xbe\xd0\xc7\x94\x2f\xdd\x40\xf8\x7d\x96\x0b\x5d\xe5\x03\x93\x8a\xc1\x08\x89\xb7\xa7\x2c\x39\x53\xeb\x3f\x1a\x4f\x20\x45\x85\x78\x20\xb5\xc9\x97\xf3\x92\xb0\xd1\xc0\xca\x92\x94\xde\x97\x73\xbf\xd6\x59\xf6\xa0\x94\xd7\x8b\x82\xdd\x13\x39\x68\x66\xf2\xf2\x74\x86\xc9\x11\xbf\x39\xe0\xe2\xb6\x78\xe8\xe7\xe9\x07\xe8\xf1\x12\x0b\x5d\xdf\x7b\x5e\x13\x0f\x28\x5a\xa2\x94\x61\x72\xf4\xf2\x71\x4a\x47\x51\xb4\x86\xd3\xc6\x9b\x4d\xfd\x3a\x63\xaf\x3a\x9e\xfc\xa7\x22\xea\xdb\x1d\xf0\x43\x96\x4d\x8f\x95\x84\xef\xeb\xe2\x04\xae\x97\x51\xbc\xe8\xbd\x29\xcd\xb3\xac\xfa\x7d\xa8\xda\x40\xb4\xf2\x05\xeb\xe4\x9b\xf2\x33\xd0\x30\x78\x13\x15\x45\x7a\x54\x8d\x97\x11\xbd\x21\xbf\x76\xd4\x9a\xf4\xfb\x7d\x7e\x16\xe5\xb2\x76\xd1\x50\xe9\xad\xbc\xa3\x56\xab\x33\xcf\x4b\xf1\x12\x2d\x67\xdc\x50\xfe\xfe\xe9\x12\x49\x2d\x52\x5e\x28\x02\x50\x88\x43\xee\x12\x79\x2a\x04\xe6\xae\x7e\xbc\xee\xac\x79\xc3\x34\x9d\x22\x00\xf2\x73\xe4\xf6\x31\x4a\x67\x6f\x6e\x86\xcd\xfd\x4a\x39\x60\xb1\xeb\x2e\x79\x3d\x3f\xa9\xd5\xe4\x63\x12\x5a\x18\xad\xc4\xb8\xad\x24\xbe\x9e\xc4\xf1\x9a\xac\xa2\x29\x63\x04\x60\x7e\x9e\xda\xb6\x9a\xa0\x97\xed\x2a\x79\x97\x2f\x51\x2f\xb2\x12\xdc\x3b\x0c\x2d\x36\x4f\xf2\x3c\x62\x71\x47\x1a\xee\xe1\x49\xbb\xca\xb2\x4a\x6f\x21\xeb\x44\x00\x3a\xdc\x5e\xcb\xa9\xba\xec\x61\x55\xea\xb6\x35\x20\x17\x5a\x03\xf8\x40\xcd\x40\xbd\x0b\x55\x7b\x9b\xe1\x93\x08\xc0\x07\xd3\x9c\x30\x44\xd8\xc6\x42\xcb\xf2\x30\xc3\xd3\xdb\x6f\xdf\x19\x65\x35\xfd\xb2\xf3\x48\x30\x94\x3e\x8b\x69\xee\xb6\x64\x70\x12\x75\x67\xaa\x3e\x82\xa9\x2b\xac\xd1\x4e\xe2\x8c\x97\x67\xb5\x57\x3d\x76\x20\x49\x08\x7a\x24\xed\xf1\x38\xd1\xa7\xc9\x60\x9f\xde\x62\xfb\x54\x98\xef\xd1\x89\xa3\x04\x4d\x27\x2e\x0f\x4f\xb4\xeb\x5e\x04\xc7\x8a\x4f\x8b\x4c\xe0\x0a\x61\x9d\x63\x77\x5b\xe8\x9d\xf1\xaa\x86\x62\x3a\xf5\x47\xa3\x50\xfe\x69\x8e\x44\x31\x59\xfe\x30\xa4\xa0\xe0\x69\x0e\x43\xf6\x58\x85\x86\x38\x6e\xee\xe7\x57\x38\x90\xf0\x4d\xdc\xd7\xf2\x1e\xfb\x4a\x6f\x08\xca\xd1\xc3\x48\x8f\xaf\x82\x52\x6b\xf8\x08\x67\xd9\x2b\x0d\xd1\xb3\x5a\xec\x23\xad\x7a\x21\x9d\xcf\x15\x77\x88\x22\xdf\x71\x63\x81\x7b\x8a\x54\x2a\x29\x91\x7b\xb5\xa5\x22\x02\x3c\xa2\xb7\xdf\xbe\x13\x81\x1d\xd4\xed\x22\x49\x34\xd7\x10\x93\xfb\x48\x3c\x56\x6f\x30\x55\x51\x2f\x52\x0c\x15\xcc\x3a\x4d\xa9\x3c\x0e\xb7\x0e\x35\xdf\x77\x7e\x9d\xfb\x85\x4e\xbc\xc2\x35\x3f\xd2\x09\xbd\x6d\x63\x2d\x95\xcf\xd5\xca\x4a\x2e\xf4\x6d\x9a\x3f\x3e\x5d\xad\x76\x1d\xa5\x01\x18\xb1\x63\x44\x22\x70\xb0\x55\x16\x23\xd6\x48\xc0\x53\x9a\x43\x18\x6a\x0d\x19\x70\xae\xfd\x0f\xdc\xaf\x68\x76\x3f\x2d\x1e\x46\xa0\xbf\x44\x74\x9e\xd3\x05\xc7\x47\xf1\x74\xa8\xd9\xcd\x0b\x3f\x4a\x42\x62\xf9\x60\x7e\x0b\x3f\x60\xa3\x98\x69\x51\x98\x3f\xb3\xda\xd8\x14\x1a\xd5\x86\xd6\xac\xec\xd9\x04\x03\xd5\x92\x78\x8a\x03\x76\x5e\x0e\xab\x43\x9d\xc3\xc6\xdc\xad\xea\x0c\xa1\xe1\x92\xee\x6e\x6a\xa0\xca\x4b\x39\x2d\xd5\xd9\xa7\xa6\x87\x6b\xb4\xed\xe9\x3a\x32\xe7\x57\x5f\x33\xe8\x6d\xdf\xb3\x37\x3c\x63\x07\x1a\xb5\x8f\xd9\x9b\xa4\xf7\xbd\x54\x95\x86\xe2\xfa\xd3\xf4\xec\xbd\xf6\x67\xfc\x0a\xcd\x97\xb3\xfc\x11\x69\x9a\xf2\xcc\xfd\xfe\x44\x73\xd6\x2d\x5d\xca\xa4\x75\x63\x8d\xb3\xf6\xc7\x2d\xa6\xbd\x28\x0b\x76\xef\x38\x7f\x74\xcf\x63\xf7\x6b\x22\x42\x33\x94\x33\x75\xfb\x70\xee\x6a\xde\x45\x6f\x6d\x9e\xeb\x4d\x42\x35\xba\x51\xb0\x6b\x3a\x30\xe2\xc3\x5d\xd4\x57\x5d\x49\x43\x12\x57\x8c\xaa\x0e\xab\x6e\x77\x77\xb7\x2a\x41\x12\x6f\xf7\xb5\x5c\x3d\x04\xa0\xdb\xf2\x86\x6c\xa1\xf0\x56\xae\x4a\xd6\xd7\xdc\x4c\xca\x85\x45\xe5\x86\xea\x41\x42\xdf\xd3\x36\x4b\xb4\xdb\x4c\xdc\x6d\xb5\xdb\x8d\x03\x73\x5e\xad\x50\xbf\x3a\x18\x6d\xe7\x36\xf0\x74\x12\x9c\x93\xac\xf1\xf5\x37\x8d\xcf\xd6\x30\x38\x44\x88\xc0\x8e\x79\x0a\x90\xe5\x8c\x94\xbd\x81\x7f\x55\xc7\xad\x6f\x3e\x77\x66\x99\x66\xa6\xc9\xf9\x1d\xe3\xb7\xc7\x43\xea\x4d\x8f\x47\x6b\xef\xe5\x2d\x70\x52\x0b\x65\x07\x4e\x5c\x61\x4e\x2e\xac\x87\x11\x86\x84\xa7\x9b\xa1\xc3\xa9\xca\x57\x98\x25\x22\x98\x1c\x89\x17\x9f\x88\x53\xf7\x48\xeb\x49\xec\x26\x09\x13\xde\xd2\x56\xab\x1b\x5f\xd9\xf5\x34\x20\x6e\x0e\xdc\xdf\xab\x55\xfd\xe9\x4a\x01\x92\xa2\x02\xb9\x97\xe4\x58\xc8\xab\x5f\xce\x3c\x5e\xb3\x61\x76\xe2\x96\x7e\xa1\xe9\x35\xcd\x4e\x5d\x1d\x9d\x83\x9d\xa5\x0c\xc5\x67\x75\xe1\xce\x5a\x8c\xb3\x41\x6e\x0f\x49\xe2\x0b\xac\x21\xf5\x06\x8e\xa5\x28\x1f\xe2\xa6\x9d\xa3\x66\x13\xb3\x84\xc6\x04\x62\x88\x00\x58\xad\x70\x55\x8a\x5c\x13\x50\xb3\x03\x36\x22\x20\x78\x7f\x41\xe0\x0c\xb9\x2c\x01\x32\xb1\x75\x67\x91\x7e\x46\x68\x9c\x32\x5a\x07\xee\x21\xc1\x45\x71\x67\x51\xd1\xf0\xb0\x8f\x24\xfe\xbb\x45\x4e\xa4\xbd\x67\x04\x62\x04\x89\xb0\x7d\xad\x5e\x11\x8d\xc5\x96\x79\x0e\x50\x9c\xcc\x03\x81\x3e\x92\x4c\xc4\x2e\xe7\xa5\x29\x89\x2a\xa6\xf8\x1a\x55\x10\xa9\x92\x3a\xfb\x35\x9c\x31\x44\x95\xe9\x69\x5e\xc7\x3c\x7e\x3f\x75\xc9\x94\x61\x92\x39\x01\x16\x2a\x20\xd3\x0c\x23\xc2\xbe\xa1\x10\xcb\xc5\xa9\x40\x96\x2d\xfd\x66\xca\x8e\xfb\xe9\xa1\xb4\xa8\x0c\x96\xe9\x99\x14\xb8\x75\x1d\x6c\x86\xb7\x89\x61\xdc\xfe\xa9\x43\xda\xef\x02\x87\x3a\x7a\x92\xaf\x08\x1c\xc4\x24\xac\x62\xa4\x76\x01\xdf\x04\x8a\xa1\xba\xa8\x96\x55\xbc\x4b\x56\x2b\xa1\x9f\xb6\x61\xf3\x8a\x73\xa2\x3f\x65\x34\xfb\x2a\x3a\x15\x0f\xbe\x0b\xc4\x52\x91\x8e\x99\xff\x46\xc2\xfc\x37\x12\xb9\xd2\xb8\x78\xab\x5c\x2c\xd3\xd9\x57\xd1\xa9\x80\x6f\xcc\x80\x14\x59\xd7\x78\xa8\xfb\xa7\x4b\x4c\x8e\xea\xfc\xb0\x78\x6b\x31\x6d\x1f\x68\xa5\x5d\xa5\x5f\x76\x6f\x99\x4e\x39\x6c\x14\x62\x09\xfb\x2d\x05\x90\x98\x89\xb0\xd1\x6d\x1e\xe1\xc2\xe0\x61\x0a\x3c\xac\x01\x3c\x88\x83\x27\xd0\x2f\x0a\x5e\x97\xe5\xe1\xa8\x15\x1f\xba\xdd\xc0\x20\xdc\xc6\xdd\xb5\x33\x77\x5b\xad\xa4\x60\x25\xfb\xb5\x8b\x77\xee\x5c\xbc\xe9\x8b\xc3\x03\xda\x1b\x8e\x06\x00\xa6\xc9\x70\x3f\xbd\x45\xf7\xd3\xbd\x3d\x90\x8f\xd3\xde\xd0\xbd\x82\xa7\x13\x07\x87\xbd\xdb\x36\x82\xcc\xdc\xa7\x73\x65\x24\x52\x9c\x4b\x7b\x63\xa3\xd2\x06\x9f\x4e\x21\xe1\x50\x26\xf1\x00\x62\xad\x6b\x24\x6f\x20\x20\x66\x9a\x69\xe1\x1c\x03\x9e\xc7\x42\x3f\xaf\x94\x35\xb2\xa4\xf0\xf5\xca\x6e\x67\x59\x1c\x8d\x85\x72\x87\xec\x55\xaa\x76\x4c\x22\xd0\xc7\x0c\x2d\xe2\x52\x34\x91\xc9\xda\xd3\x24\xeb\xe7\xf3\x79\x81\xd8\xfd\x7c\xd9\x2b\x6c\x1a\xce\x93\xe9\x9e\xfe\x26\x75\x5a\x76\xe6\x2f\x16\x5e\xc6\x5e\xd1\xd7\x6b\xb2\x3c\x70\xd2\xc9\xbc\xe7\x17\x1c\x4d\x6f\x39\x9f\x85\x87\x74\x5b\x78\x0a\xd6\xfc\x9f\xdd\xc9\x21\x0d\x4c\x75\x62\x92\x99\xbc\x01\x9e\xa4\x0c\x45\x75\x76\xa5\xa2\x97\xd9\xb4\x9d\x79\x5f\xd5\x4e\x36\x75\xc1\x82\x5d\x70\xda\xda\xb8\x25\x9c\xe9\xbc\x94\x95\x34\x34\x1b\x57\xd6\xa8\xe8\x84\xec\x7d\x86\x36\x4e\xf1\x30\x2b\x69\x9b\x19\x56\xfa\x3d\x77\xaf\x2c\xd4\xeb\x96\x49\xeb\x26\x5c\xc1\x41\xbb\x9b\x7c\x54\x20\x76\xc7\x5c\xf7\x76\x07\xc2\xe2\xf0\xd2\x9a\x1b\x72\xa6\xb5\x46\x61\xf9\x9d\x3e\xef\xb3\xb4\x78\x08\x62\x8a\x8e\x10\x91\x2e\x7c\xde\x29\x09\xc3\x0b\xd4\x5f\xa4\xf4\xa1\x11\x3c\x75\x50\xec\xb8\x2e\x4c\x61\x01\x4b\x98\xc1\xa9\x71\x8e\x50\xaf\xfe\x88\xa6\xcb\xb8\xfa\x08\xba\xbf\x0f\x8a\x47\x98\x71\x2e\x40\xb0\xa4\x89\xb4\x76\x03\x67\xd3\xb4\x40\x9d\xc1\xc8\x04\xe3\x1f\x7a\x3c\x9b\x0b\xe7\x34\xa1\x7d\xff\x25\x4e\x38\x43\x54\x27\x03\x6c\x3c\x70\xf8\xb6\xeb\x25\x37\xbf\x02\x60\x96\x28\x3d\x97\x39\xcd\x17\xbc\x01\x5e\x31\x2e\x00\x8c\xcb\x24\x4b\x92\x5a\xfb\x07\xd9\x88\xf6\x43\x8f\x82\x7b\x19\x30\xfe\x3f\x0e\x62\x92\x0c\x60\x9a\x44\x11\x18\xa5\x49\x06\xa9\xd1\x89\xa2\x9e\x9e\x31\xd9\x0b\x92\x38\xda\x57\x24\x12\x7a\xc5\xc1\x68\xd7\x6d\x48\xf3\x70\x6d\x5a\xd1\x65\xc1\x88\x0f\xac\xce\x61\x06\x5f\x39\x9b\xe6\x59\x7d\xfb\x4c\xd7\x8e\x22\x75\x3c\x95\x4b\x35\xc7\x64\xf6\x75\xcc\x8e\xef\x0a\xd2\xe7\x0c\xa6\x84\x84\xa3\x34\x10\xf6\x71\x5a\x37\xdb\x2a\x5d\x98\xf9\xc6\x53\xce\x0d\x39\xea\x1a\x8a\x48\x8a\x7c\x30\xaa\x69\x91\x88\x6c\x6d\x30\x39\xbc\x09\x25\x3e\xe3\x05\xca\x4b\x06\xe2\x21\xba\x01\x76\x04\x5e\x0d\x6f\x8e\x5a\xce\x3f\xf8\xca\xab\x5b\x79\x7e\xc4\xff\x46\x88\xcc\xa2\x91\xa7\x66\x23\xd4\x3c\x24\xea\x81\x35\x10\xe2\x57\x96\x52\xc6\xdb\x8e\x01\x0c\x88\x21\x2f\xb8\xf3\xae\x68\xb7\x29\x00\x5e\x87\x4c\x4e\xf4\xfa\x88\x08\x01\x09\x61\x41\x21\x6b\x4c\x14\x40\x6e\x3e\x11\x3c\x1c\xd1\xe7\xe7\x0b\x1c\x01\x99\xb5\x60\xa4\x84\xc8\x5a\xb1\x7a\xde\x14\x62\xa6\x98\x77\xf9\xbe\x17\x81\xd0\x1d\xd6\xe8\x1a\x48\x0d\x12\xd1\xff\x75\x8d\xbb\xcf\x6b\xd0\x3f\x1f\x04\xbd\xee\x47\x03\xfe\x85\x91\x67\x38\x9c\xbc\xb0\xa9\xbf\xa1\xe8\x6f\x8e\x09\x2e\x8e\xe3\x17\x34\x2e\x0f\x5a\xac\x1d\x1c\x8f\xaf\x43\xf8\x02\x1c\x0e\x26\x93\xc0\x3a\x4a\xee\xfb\x76\x71\x4a\xa6\x6a\x07\x5d\x60\x29\x8d\x4f\x0b\x98\x5f\x19\x76\x8b\x8f\x21\x12\x58\x59\x13\xb1\x14\x37\x21\xd1\xd8\x4d\xf5\x52\xe4\x49\x19\xd3\xd0\xa2\x6a\xfd\x94\x1c\x3e\xa0\xa9\x92\x7a\xbe\xa3\xf2\x68\x5d\xe5\xc4\x17\xe9\x8d\x04\x05\x9f\xf2\xa4\x5a\x60\x10\x5b\x85\x0c\xb9\x70\x0d\x42\x1a\x43\xf3\x6e\x48\x6b\x0d\xb3\xa8\x6a\xb2\xc3\x01\x44\x7d\x36\x48\x50\x5f\x7a\xd2\x1b\x04\x31\xb2\x3e\x3c\xb7\x6f\xd5\xe6\x8d\x0a\x1c\x87\x37\x60\xa4\x57\xc2\x8a\x3e\x48\x7f\xca\x37\x4c\xd6\xed\xea\x54\xec\x60\xdd\xd0\x10\xe2\x2f\xb7\x43\xbb\x01\x1c\x0e\xe0\xf0\x06\x1c\x7e\x39\x88\x79\x0e\x73\x53\xe7\xf0\xbc\x39\x1a\xb5\x1e\x21\x43\x99\x0b\x49\x43\xf0\x8a\x5c\x73\xe8\x75\x3d\xe8\xd0\xeb\xfa\xa4\xdb\x75\x7f\xe9\x5b\x22\x5f\x49\xd9\xba\x59\x4a\xb4\x5a\x8d\x27\x90\x39\x97\x7b\xef\x45\x86\x5f\xee\xc4\x90\xdc\x33\xb3\xf6\xae\x14\xbe\xde\xbd\x78\x23\x38\xb8\x1b\xde\xe0\x6e\x54\x06\x47\xd4\x83\x8e\xed\x2d\x34\xc6\xf0\xeb\x0f\x1f\x2c\xa4\xc6\x0f\x9b\x76\x4d\x56\x83\xfd\xa6\x77\x52\xe1\x8f\xaa\xdb\x45\xfd\x74\x36\xd3\x05\x84\x37\x01\xe7\x77\x1c\x8d\x27\xee\xd3\x96\x7f\x54\xdc\x26\x33\xb5\xb9\xf4\xab\xab\x8a\x06\xa6\x06\x5b\x24\xda\x29\x42\x53\xbd\x18\x01\x33\x89\x90\x61\x55\xe3\x34\xec\x6b\xae\xd1\x8c\xd5\xde\x36\x0f\x2e\x3a\x2b\xdd\xa6\x68\xa8\x3a\x23\xfd\xb1\x3a\x25\xaf\x92\x88\x86\x81\x3c\xd3\x42\x87\x53\x76\x14\xa6\xeb\x1b\xc3\xbc\xf4\x22\x58\x13\x35\x56\xe9\x4d\x4d\x07\x05\xb6\x11\x57\xd4\x35\xb0\x22\xb0\x83\x92\x10\xf1\x38\x20\x31\x03\x23\xb2\x45\xf2\x2b\xc6\xd6\xb4\xb2\x55\x09\xcb\x6e\xd5\x1a\xbd\xaa\xda\xa2\x25\xc5\x65\x2c\x65\x0a\x75\xe1\x25\x50\xb3\xf4\x06\xa4\x5f\x8b\x89\xd1\x4d\x24\x5b\x89\x3a\xf1\x89\xba\x54\x59\x6e\x00\xa1\x67\x89\xac\xe5\xad\xcc\x79\xad\x02\x07\x64\xa4\xb8\x6d\x21\x36\x25\xd0\xfb\xba\x13\x1a\x34\x35\x47\x52\x6d\xf8\x6d\x4f\xa2\xb5\xb5\xf1\x68\x7a\x38\x58\x57\x39\x5d\x81\xa3\x01\x31\x72\x60\x51\x9a\xc4\xe0\x06\x4d\x4b\xe1\xb3\x40\x18\xf5\x1b\x91\xf3\x26\xc3\x16\x77\x1f\xa8\x49\xef\xd8\xaf\x41\xd6\x25\x02\xea\xe8\xba\x9d\x65\xf1\xa6\xd3\x1e\xb5\x50\x2d\xdd\x06\x5e\x54\x01\x2f\xf4\xa5\xe1\x4d\x52\x4a\xb5\xe8\x1b\xe7\x29\x9e\xd5\x1a\x07\xcf\xdc\xc1\xa3\xfa\xd8\xd1\xd6\xa1\x33\xd0\xcc\x98\xd8\x79\x54\x97\x28\x20\xe8\x34\xfa\x9e\x24\x80\xb3\xee\x28\xd7\x00\xd2\x84\x09\x71\xb9\xf0\x0e\x62\x0d\x58\x79\x3b\x54\xab\x57\x80\xed\x0b\xac\x25\xca\x08\x52\xcf\x74\x80\xf3\x77\x1b\x80\x96\x5f\x04\x4e\xf9\x26\x38\x49\x37\x1d\x81\x79\xd7\x3b\x92\x68\xef\x88\x96\x43\xde\x33\x6f\x78\x66\x1d\xab\xd5\xcd\x81\xfb\xbb\x2a\x2f\xff\xda\xf2\x15\x29\xa2\x96\xb6\xd3\x8d\xe5\x5e\x25\xf2\x65\x66\xf4\x1b\x9b\x4a\xdd\x4f\x0f\x79\x99\xeb\x2f\x6c\x6c\xea\xde\xcb\xbc\x90\xb6\x6d\xae\x8e\x65\x23\xa2\xb8\xf4\x51\xf8\xb2\x95\xa4\x08\x9c\xa1\xda\xbb\x26\x0c\xd8\x60\x28\x21\x62\x05\x24\xc3\x51\x6f\x08\xa9\x14\xa3\xa4\xb3\x13\xbe\xf3\x25\xe1\xe2\x4c\x66\x5d\xf2\xcc\x3c\x13\x6e\xe2\xbc\x5c\x3b\xf2\x0b\x2a\xfc\xa0\xd6\xe5\x17\x54\x2d\x38\xab\x5b\x07\x55\x80\x7d\x11\x38\x38\xcc\xa0\x37\x4a\x60\x9c\xa2\x54\xcc\x0d\xfd\xb9\x20\x00\x77\x87\xee\x40\xc4\x6b\x4a\xf5\x40\x1d\x47\xf7\x5f\xfd\xe7\xf7\x6f\xbf\xf3\xea\xed\x08\x46\x77\xde\x7a\xfb\x6b\xf7\xa3\x49\x1f\x93\x69\x56\xce\x50\x61\x0d\x84\x48\x3e\x43\x6f\xa5\x0b\xe4\x3c\xf8\x6e\x9a\x85\x19\xe1\xe6\x99\x1c\xc4\x81\x95\x6e\x33\xad\x10\xc2\xdd\x4f\x0f\xeb\x2c\x5f\x8d\x98\xfa\xcf\x6e\x95\x95\xba\xf7\xf2\xc5\x5a\x68\x62\x8f\xeb\x2a\x89\x15\xce\x56\xbf\x30\x55\xb2\xfb\x7e\x83\xad\xd9\xe7\xd0\x50\xf4\xa9\xdd\x3c\x96\x7b\x3e\x3f\x59\xcb\x6f\x37\x1a\x9f\xed\x5d\xc3\x9a\xac\x36\x44\xde\x1c\x43\xac\xdf\xf8\xb2\x67\x88\x35\x1c\x3c\x6f\x38\x7a\x96\x06\x7c\xad\x6b\x67\x7a\xd6\x07\x96\x5d\x24\xb8\x51\x39\xc5\xe7\x67\x7d\x5d\x10\xeb\xa2\x82\x68\x4d\x42\xc7\x32\x6b\x7a\x21\xcb\xac\xaa\x9a\xff\x13\x1b\x6a\x55\x1b\x7c\x8a\xae\x1b\xcf\x67\xea\x9f\x96\x2c\x17\xef\x4a\xc2\x81\xe2\x06\x23\x7e\x89\x48\x5b\xf5\x75\xc5\x82\x99\x46\x23\xfd\x40\xeb\xb8\x27\x01\x9e\x4a\xf0\x13\xf6\x54\xf1\xe7\xd2\xc2\x0c\xda\xee\x8a\xb0\xf1\xa8\x6b\x17\xed\x18\xaa\xb6\x7b\xc3\xfe\xaa\x79\xc3\xe6\x17\x21\x6d\xac\x6a\x09\xb2\x7f\xe6\x2b\xd8\x84\xc7\x61\x68\x57\xd8\xd1\x87\x7e\x54\xf3\xfd\x21\xf8\x6e\x3e\x9e\xeb\x07\xde\x83\x95\xd1\x86\xa8\x38\x4e\x29\x4e\x7b\xd3\x9c\x30\x9a\x67\x45\x12\x3d\x67\xde\x88\xcd\xb8\x32\x5c\xb0\xc3\xfc\xf1\x9d\x59\x04\xe0\x73\xd1\xe4\x39\x2d\x61\x15\xf5\x5d\x70\xf3\xed\x40\x1d\xbf\x08\x30\x92\x18\x00\x07\x97\xe2\x16\xeb\xda\xe5\x6d\xcd\xa7\xb9\x27\x21\xdd\xee\xa4\x63\x27\xb2\x56\x9a\xe6\x66\xfe\x5a\x5a\xb0\x97\xf2\x9c\x75\xbb\xb1\xbd\xb7\xef\xaa\xaf\xb1\xf6\x32\xd2\x57\xdb\xa7\xbf\xa4\x39\xcb\xf9\x47\xd0\x97\x0a\xc6\x85\x08\xfa\xa1\xd2\x09\xe9\x2f\x0a\x65\x39\xa6\xb1\x63\xb5\x22\xfd\x45\xfe\x5e\x20\xf7\x11\x3a\x7c\x88\x59\xe5\x03\x80\xf5\x61\x74\x88\xc4\xd2\x42\x78\x09\xd5\xe9\x24\x6c\x7e\xc9\x31\x63\x9f\x75\xbb\x62\x53\x08\x66\xe5\xfe\xe9\x12\xed\xab\x10\x09\x6a\xa0\x8e\x19\x35\xe3\xf7\x69\xc7\x79\xdb\xda\xd5\x7c\x07\x7e\xfc\xac\x3a\xc9\xc3\xc5\x7d\x0e\xe9\x57\x90\xf0\xd0\x46\x03\x2e\x4e\x34\x4d\x2c\xb3\x08\xa6\xda\x35\xc5\x4b\x98\xf0\x8b\x61\x31\x1a\x47\x34\x17\x7e\xd3\xbc\x1d\x12\x4d\x20\xcf\x1e\xe9\x5d\x11\xb5\x75\x7b\xa2\xa5\x1c\x1b\xa9\x5a\x24\x6d\xbd\x3c\xa1\x92\x18\x85\xf1\x5e\xe0\x3b\x68\x97\xf2\x0a\xa2\xf9\x3f\x05\xfe\x06\x0d\x0c\x71\x7b\xeb\x76\x77\xa9\x53\x4e\xcc\x4d\x2b\xc3\x25\x8c\x96\x68\x12\x39\x16\xe6\x01\x9f\x1d\x6e\xa3\x11\xd8\x61\x31\xea\x3f\x90\x79\xaf\xd1\x7c\x21\xfc\x7f\xc5\x58\x88\x57\xd7\x66\xce\x48\xa1\x68\x83\xf3\x8c\x72\xe9\xe8\xd5\x3a\xfa\xfc\xb1\xe7\xdb\xa3\xc2\x70\x4a\x11\xae\x7b\x10\x54\xed\x04\xcd\xc9\xb3\xa5\x7b\x51\xf6\x3c\x03\xb0\xd6\x4a\xb5\x31\x78\x48\x67\x06\xf0\x20\x9d\xcd\x44\xbe\xe8\xbe\x88\xb7\x2f\x34\x09\x39\x63\x20\xf5\xbb\x0d\xf1\xae\x1c\xeb\xf5\xba\x8a\xae\x4d\xee\x3b\xb4\x02\x50\xc8\xdf\xda\x06\x25\xfc\xa8\x7e\x3c\x54\x1b\x14\xba\xe8\x95\x19\x87\xf7\x04\xb4\xe8\xdc\x61\x31\xbf\x50\x1e\xa7\xc5\x9b\xf9\x09\x9a\x25\xbb\x03\x88\xf4\xba\x71\x8e\x53\x2f\xa1\xf2\x2a\x19\x70\xd2\xc2\xf3\x23\xc8\x80\x8a\x2a\xd2\xbc\xe6\xae\x4b\x17\x67\x58\x68\x5b\x15\xd3\x81\x5a\xef\x2d\xc5\x11\x71\x61\x5b\x77\x87\xb3\x7d\xaf\x12\x20\xe8\x62\xe0\x92\xad\xc1\x04\x5c\x88\x0d\xad\x48\x85\x93\x84\xed\x5b\x77\xf3\xee\x0a\xed\x6b\xaa\xcc\x5b\xd6\xb0\xfa\x69\x14\xa6\xf8\x48\xf8\x2e\x63\x71\xd4\xaf\xc8\xa7\x8d\x55\xec\x78\x99\xd2\x02\xdd\x21\x2c\x16\x91\x1f\x86\x03\x30\x81\x34\x19\xee\xd3\x5b\x5a\xeb\x5d\x1a\xac\x25\x44\x4b\xd8\xdc\x1a\x54\xd6\xd8\x71\xfc\xd0\x3a\x6c\x06\xbe\x18\x9b\xe1\x39\x51\x79\x62\x56\xc3\x6d\xed\x33\xbd\x02\x6c\xb0\x89\xbf\x0c\xe6\x2c\x60\xb2\x7c\x09\xc0\xab\x37\xfa\x79\x85\x21\xd4\xa7\x68\x85\xe2\x8a\xa0\x53\x45\x2c\x09\x7e\xdf\xea\x9d\x4b\x73\x70\x51\x79\x53\x05\x53\x2a\x02\x97\xb1\x4a\x15\x7b\xed\x27\x5f\xa1\x4a\x83\x9f\xd7\xd5\xb9\x0c\xd8\x5d\x9a\x57\xc2\xa7\xeb\x8c\xf0\x22\xb8\x6c\x6e\xbd\xd3\x0c\xa5\xb4\x66\x5d\x14\xf2\xcf\xb6\xe9\x3a\x2d\xf4\xc5\xa4\x7d\x89\x7b\xfc\x8a\x8b\xb0\xb8\xb1\xe8\xdb\xf1\xfa\x5c\xf7\x44\x1d\x10\x27\xc0\xaf\xe0\xa2\x25\x0d\xaa\xbb\xb2\xd9\xb8\x28\x86\x5f\xf1\x3d\x08\x55\x00\xd4\x18\x13\x72\x2d\xfc\x56\x85\x54\x20\x3e\xc7\x11\x1f\xf9\x8d\x50\x78\xfc\xd5\xc1\x1e\x57\xab\x73\x86\x7d\x74\xa6\x0c\xce\x2e\x33\x04\x64\xec\x38\xb9\xa1\x5a\x1e\x43\x85\xcf\x5a\x37\x92\xa9\xf0\xe4\x8e\x8b\xdf\xe4\xab\x0c\x62\x7a\xa1\xf0\x46\x02\x77\xde\xe6\xa8\x23\xef\xc3\x77\x64\x73\x09\x0d\xef\x3b\xec\x87\x3e\x92\xa8\x1a\xd3\x73\xb0\x27\x9b\xb1\x5b\xbf\xcd\x5e\x20\x04\xd4\x33\xbc\xfd\x5c\xe1\xad\x1b\xf4\x42\xc6\x25\xa5\x32\x2e\x29\x96\x71\x49\x6d\xac\x33\x2b\x44\x74\x7c\x08\xcb\xb5\xc2\x8e\xbf\x90\x3c\x19\xec\xe7\xb7\xb0\x66\x9f\xf3\x90\xcf\x61\x3c\xce\x27\x90\x1a\xb1\xa4\xf6\x89\xb8\x3b\xf4\x5d\x12\xea\xe2\x14\xe2\x4b\xda\x34\x46\xb5\x86\x6c\xf6\x03\xef\xef\x1b\x72\x0e\xef\xc2\x1b\xf6\x0d\xa3\x25\xea\x49\xc3\xc1\x1e\x9e\xf7\x96\x14\x15\x95\xa8\xab\xcf\xb6\xd0\x17\x76\x0b\xe9\x80\x0d\x4c\x13\xff\x6e\x37\xe2\x0b\x1e\x5d\x06\xe2\xde\xa7\x25\x92\x76\x0b\x77\xe6\x6f\x4b\xb4\xb9\x3a\x0c\x3e\x4f\x54\x87\x56\xa8\x8b\xfa\x76\xa6\x52\xb4\xe2\x07\x01\x7e\xfd\xfe\x9b\x6f\xbc\x94\xd2\xa2\xaf\x7b\x16\xa1\xf1\xa2\xaf\x9f\xee\x3d\xfc\x67\x47\x37\x5f\x8b\xe0\x61\x96\x4f\x1f\x8e\x9e\x3b\x8b\x0a\x81\x83\x45\x34\x1a\xab\x2b\xbc\x75\x93\x09\x03\x39\x5d\xd5\x0f\x4f\x62\x72\x82\xa8\x88\xd4\x1d\x15\x2c\x65\x32\x9a\x47\x34\x1a\x8f\x6f\xc2\x08\xcf\x23\x38\x1e\x5f\xbf\x09\xbf\x3c\x99\x48\x2f\xb5\x67\xf5\x42\xbe\x17\x44\x51\x6a\x3c\x8e\x2a\xde\x9f\x6c\x48\x81\x77\x94\xf4\x36\xe4\x1a\x8c\xe7\x67\x59\xfe\xe8\x65\xce\xde\x2a\x11\xef\x2b\xa8\x98\x52\x7c\x88\x66\x2f\x9d\xaa\x1c\x85\x99\xea\xd7\x1b\xe9\x21\xca\xdc\x74\xa6\x8a\x86\x5d\x8a\xf1\x0f\xbe\xc9\x29\x8c\xa6\x69\x36\x2d\x39\x7c\xdf\x56\x3e\x6c\x79\x9e\x72\x3c\xe1\x1b\x9f\xc2\x90\x06\x1f\xcf\x2c\x18\x26\xa9\xaa\x3a\xc3\x34\x72\x4c\x99\x61\xcd\x99\x05\x7a\xcc\x68\x1a\x29\x61\xa3\x3b\xb2\xe3\x9c\xe2\xf7\x72\xc2\xd2\xcc\x19\x09\x26\x98\x61\xbe\xa1\xef\x2e\x91\x74\x17\xe9\xbb\xa7\x8b\xa0\xf5\x5c\x12\xd5\xbc\xe4\x45\x30\xaa\xba\xa6\xe3\x28\x21\x6d\xb7\xa0\xb5\x74\x86\xc6\x78\x1d\x1a\x7b\x36\x68\xec\xc2\xa1\x63\x05\x0a\xb5\x11\x3f\x34\xe2\x22\x93\x72\x27\xe3\x3b\xbd\x0d\x39\x20\xe3\xd9\xae\xc7\xbe\x08\x7a\x0f\xca\xfc\x17\x99\x21\x7a\x87\x08\xdf\xba\xe2\xf7\xb7\x4b\x4c\x05\x0c\x8c\xe1\x67\xcd\x19\x86\x0d\x62\xe1\x7a\x3c\xad\xb9\xca\x50\xbf\xdf\x0e\xb8\xe6\x55\x95\x03\x6e\xdd\x38\x1a\xdb\xa0\x19\xcc\xe0\xb6\x98\x04\x27\x9e\x91\x09\xdc\x59\xf5\xda\x52\x8f\xa8\xa1\xb3\xee\xf0\xee\x4e\x10\x65\x78\xea\x2c\xfc\x84\xef\xbc\x1b\xb0\xbe\x93\x26\x13\x28\x3f\xb8\x1b\xca\x64\x86\xf7\x95\xfd\x6c\xb7\x97\xcd\xab\xec\x32\xef\x83\xde\x6c\x5e\xa6\xdc\x73\xf5\xac\xcc\xaf\xdf\xb0\x03\xc5\xf7\x17\xa0\x7a\xf8\x15\x14\xe6\x3a\x1c\xc0\xf1\x64\x52\xdb\x9b\x92\xea\xe8\xf6\xea\xfb\xd4\x74\x25\xb7\xab\xf3\xd3\xdd\xb5\x26\x3b\xb0\x79\x9d\x6f\x76\x0f\xdb\x4c\x4c\xdd\x1f\x6a\x47\xdb\x1c\x6f\x63\x9b\x6c\xb9\xbf\xcd\xcf\xca\x36\x37\xf9\x81\xdd\x6e\xbe\x55\x37\xbd\xf9\x50\xd9\xfb\x26\x5f\x93\x00\x3f\xc3\xa3\x04\xe6\x53\x8d\x20\x98\x2f\x8a\x2e\x38\xbf\x15\x79\x70\x73\x04\x95\xd8\xb4\x88\x4e\xd0\x94\xca\x0a\x6a\x7a\xb2\xbd\xb6\x7e\xaf\xb7\xf5\x37\x16\xe7\x60\xaa\xf6\xa5\x1f\x93\x2b\x19\x81\x95\xf0\x84\xc1\x81\xcc\x50\x15\x8f\x70\x6d\x98\x8f\x2c\xee\xd2\xb5\xc9\xc4\x1f\xa8\x4f\xe5\x9c\x2a\x8a\xd8\x99\x1c\xeb\xc8\xcd\xe4\x28\x5f\x81\xfe\x6f\x4d\x01\x2b\xd9\x92\x10\x56\x32\x6b\x28\x50\x27\x8b\xce\x27\x45\x1d\x6b\x39\x3e\x91\xb4\xdb\xb0\x12\x81\xc8\xa1\x5d\x55\x62\x66\x29\xa8\x2d\x23\x08\xa9\xd3\x58\xd8\x61\x96\x01\xfe\xd4\x92\xd6\xb1\x47\x21\xdd\x91\x71\xb2\x6a\x69\xb8\x21\xb2\x36\x67\x32\xa9\x12\xd8\x3b\xce\x84\xeb\x64\x9a\x17\xaf\x72\x45\x03\x18\x75\x3a\x9d\x0e\x6f\x7e\x78\x13\x3e\x2f\xd1\xe1\x86\x42\x87\xeb\xf0\x26\x4f\xf1\xf4\x00\x46\xef\xbe\x2b\x76\x7d\xb4\x4c\x69\xba\x40\x0c\x51\xde\xc0\x0d\x78\x73\xb2\xde\xd2\xea\x97\x37\xd4\x9f\xac\x03\x59\xcf\x78\xb7\x67\xbc\xdb\x33\xde\xed\x19\xef\xf6\x8c\x77\x7b\xc6\xbb\x3d\xe3\xdd\xea\xbc\x1b\x45\xe9\x2c\x27\xd9\xa9\xe1\x1e\x9e\xf1\x6c\xbf\xf6\x3c\xdb\xd0\xf0\x6c\xd7\xb7\xf1\x6c\x43\x78\x7d\xb2\x96\x38\x12\x66\xc7\x8e\xd3\xe2\xd5\x93\x34\x8b\x46\xf3\x34\x2b\xd0\xfa\x39\xb8\x40\x2c\x1d\x9d\x2d\x84\xf8\x4f\xbe\xf0\x3e\x91\xd0\xb1\x7f\x7c\x58\x44\xeb\x35\xb8\x2c\x21\x66\xe8\x61\xfd\xf2\x85\x99\x0f\xa7\x0f\xbf\xbc\x78\xbc\x37\x6c\x14\x66\x72\x2e\x6a\xf6\xd8\x15\x5a\xd6\x24\x95\x2f\xc0\xa8\xcc\xc4\xc2\x5d\x87\x22\x1a\xf9\xf8\xfa\x57\xe0\xe6\x80\xae\xc6\xf7\x96\xb7\x29\x22\x18\x19\x7d\x39\x85\x54\xc3\xa1\xe5\x27\x5b\x34\xc8\x47\xf1\x1b\x0e\x96\x40\xce\x65\xa3\x94\xb3\x38\xe3\x4a\x4f\xce\xce\x6c\x10\xae\x3a\x28\xf9\x02\x8c\x32\xac\xa7\xa8\xc6\xd3\x76\x96\x9d\x48\xee\x35\x25\xcd\x15\x58\xed\x1d\x88\x2d\xda\xe8\xf5\x6c\x05\x85\xe4\x93\xd0\x54\x4b\x92\x21\x31\xb6\xca\x64\x9d\xee\x36\x4f\xd6\x99\x70\xb1\x4c\x45\xb3\x7c\x09\x94\xce\xef\x61\xc9\x58\x6e\x32\x85\x4a\x65\xa6\xee\x10\x52\x05\xb1\xa3\xd4\xff\xa2\x73\x2c\x9d\xac\xd9\x3b\x64\x44\x03\x38\x14\x05\xcf\xa1\x02\xee\xbc\x3b\xe6\xdf\xcf\xff\xc4\xf9\x29\x5a\x1a\x6c\xbc\xa2\xe9\xf3\xc4\xca\xd9\x37\x51\xe7\x76\x50\x1b\x36\x51\xd5\xe6\x66\xc7\x63\x73\xa7\xa9\x3e\x14\x08\x4a\x1b\x3a\x19\x35\x93\xe4\x1d\xf0\x5e\x29\x45\x3a\x9b\x0b\x38\xd8\x61\x8a\xf1\x84\x20\x8e\x9b\xe1\xb6\x0d\x06\x37\xf9\x55\xdb\xa5\xde\x7e\x5f\x9b\xef\xcd\xd0\x3b\x08\x36\xad\xa0\x24\xf8\x81\x4b\xb5\x5a\x4d\xce\xf3\x90\x99\x99\x6c\x8d\x4f\x79\x81\xdf\xee\xdc\x15\xf2\xd9\x00\x0d\x13\xf7\x4f\xf3\xd4\x03\x5b\x66\x03\xea\xfb\xca\x8f\x02\x9b\x39\xe6\x0c\xfd\x8b\x9f\x5d\x8c\x56\x98\x1c\x04\x66\x15\xb9\x43\x73\xdc\x42\xf7\x14\xd7\xb9\x75\x52\xe1\x70\xa2\x86\x56\x94\x2c\xe7\xdb\x22\x43\x4c\x5c\x93\xe7\x73\xff\x0b\xa5\xea\xb1\xac\xf2\x21\x5d\x62\x96\x66\xf8\xbd\x4a\xa5\x62\x89\xb2\x6c\x7a\x8c\xa6\x0f\x23\x18\x09\x30\xb5\x3a\x7f\x9a\x42\x9e\x6e\x3d\x85\xae\xc3\x48\x3c\x84\xd6\x4a\x5a\x93\xf0\xc8\x94\xf4\x55\xcd\xe5\xc2\x5a\x6b\x21\x5d\xaa\x60\xa7\xe2\xa5\x92\x7f\x6d\x0c\x33\x69\x4a\xfb\xda\xb7\xbc\x4e\x35\xea\xa1\x29\x6a\xa5\x27\x9b\x0e\x01\x51\xd4\xc8\x28\x1a\xaf\x08\x3a\xc8\xa0\xd9\x07\xaa\x9e\x92\x72\x88\x91\x28\xcf\x8d\x91\xfd\x2a\x25\x24\xea\xe3\x4b\xfa\x5a\xc4\xbf\x59\x11\x80\x9c\xb8\xe5\x21\x75\x5d\x23\x2b\xd9\x30\xa6\xca\x0d\x47\x21\x05\x93\x42\x04\xcd\xe0\xab\x8d\xd5\xee\x14\xf0\x8a\x9d\x67\x2f\xf3\xad\x53\x16\x3d\x3c\x95\xe7\x62\xa8\xcb\xab\xe6\x3c\x35\xa7\x78\x49\x1c\xe8\xd5\x32\x9c\x37\xbe\xf5\x55\x9c\x9e\xbe\x7e\x1a\x66\x38\x4d\xb4\x00\xe7\x34\x64\x88\x2e\xe4\x6f\xfb\xa3\xed\x0b\xfa\x61\x5a\xe0\xa9\x8d\x41\x60\x44\xac\x62\x41\x39\xe8\x8b\x26\xd1\x61\x48\xb0\xe9\xcb\x2a\xeb\xc2\xc5\x90\x04\xb1\x2a\xa5\x53\x9e\xcc\x45\xea\xae\x14\x05\x6e\x16\xdc\xd5\xae\x4f\xee\x46\x6e\xe2\x10\x9c\xf9\x6d\xe3\x02\x82\xa2\x94\x56\xc2\xa3\x50\x6b\xbe\x28\x68\x73\xcf\x75\x41\xcd\xe6\xf2\x21\xb1\xcc\xe6\x1a\x55\x49\xc3\x56\x89\x88\x5e\x9d\x16\x05\x2b\x62\x93\x86\x72\x9e\x10\x63\xe3\x58\xab\x22\x8d\xcd\xa5\x43\x97\xea\x8d\x15\x6a\x37\x80\x86\x4b\xb8\xbd\x4b\xf8\x5c\xac\xbc\xb6\x18\x15\x6d\xc9\xb9\xaa\x6b\x81\x15\xe6\x3e\xd1\xab\x03\xcf\x78\xc7\x8a\xa9\xb5\x30\x78\x5a\x11\xfd\x8b\x86\x5c\xa9\xb1\x38\x0f\x5e\xd1\xf2\xf5\xd7\x8c\xfc\xfd\x25\x29\xa7\xf7\x25\x17\x21\xd8\xf8\xd2\xe0\xcd\x70\xac\x8b\x94\x37\x97\xaf\x4b\x88\xb7\x97\xb7\x82\xe3\xed\x65\xb5\x3c\xb9\x65\xc9\xac\xd5\x20\x1c\x39\xda\xe6\x82\x5a\xde\xb4\xb9\x54\x73\xac\x9d\xad\x55\xb7\x5f\x75\xaa\x52\x27\xaf\x64\x4e\x6d\x4b\xae\xb4\xcc\x09\x4f\xde\x62\xab\xfb\xee\xec\xcf\x51\xa3\x2a\xc7\xdd\x56\x5e\xb2\x4a\x9b\xa7\xea\x48\xdd\x1a\xf7\x71\x6d\xf7\x6e\x92\xec\x79\xcf\x86\xb5\x07\x3e\xbd\xeb\x2c\x03\x1b\x78\x44\x0b\xec\x3a\xcd\x38\xb6\x7c\xcc\xf2\x03\x4c\x6f\x7e\x8b\xaa\x08\x70\x2a\x77\xea\xa6\x4d\xee\x3d\xdf\x6c\x86\x71\xf5\x25\xe5\x52\x70\xd4\x04\x81\xd9\x5a\xb2\xf6\x4e\xd1\x02\x81\x5a\x63\x5a\x1d\xc5\x5a\xb0\xfd\x4d\xc7\xab\x77\xfb\x68\x5d\xb6\x2e\x57\xd9\x38\x92\xe0\xb6\x0b\x08\x33\x82\xf7\xf7\x8d\xa5\xb5\x74\x7f\xcb\xc8\x8d\x03\x96\x76\x02\x95\x26\xe1\xd1\x06\xa9\xb7\xd5\x2a\x90\x73\xbf\x69\xe4\xde\xcf\x6f\x93\x7b\xdf\x84\xcf\x37\x4b\x00\xf4\x68\xb7\x9e\xeb\xda\x4d\xb0\x22\x09\x95\xb0\xa0\xe6\x10\xb6\x0f\xab\x95\x02\x8d\xfc\xe0\x86\xa0\x63\x6d\x00\xb3\x51\xa8\xd6\xf8\x46\x2a\xc9\x1a\xc1\x0b\xc1\x87\x5a\x42\x12\xa2\x65\x96\x4e\x6d\x22\x41\x01\x02\xd7\x8a\xac\x35\x3f\x94\x5f\x80\x80\x55\x27\x74\xc5\x74\xa9\x35\x5d\xb8\xb2\x6d\x7b\xe9\xa4\xee\xca\x29\x58\xc3\xfc\xde\x3e\x4f\x37\x97\x47\x6e\xea\xe2\xdc\xaa\x44\x30\x18\x1c\xaf\x85\xb8\x7b\x8b\xb0\x3b\x14\x30\x59\xef\xcb\xba\x2e\xc9\x66\x61\x77\xf5\xcd\xf5\xdc\xd0\xbb\xa0\x58\x3b\x0c\x28\x1b\x3f\xaf\x19\x4a\xae\xe6\xfe\x0b\x6d\x5f\x0e\x78\xd1\x27\x18\x5f\x40\x2f\xa1\xf5\x43\x8f\x7a\xbc\xdb\x2c\xe7\x72\x1e\xd8\x9c\x07\x21\xed\xee\xa5\xe1\x4d\xc6\x7f\x3a\x6b\xd3\x41\xa7\xf1\x4b\xaf\x47\xf2\x9e\xf2\x86\xe3\x18\x56\xbb\xa3\x51\x22\xa3\x86\xc1\x58\xac\x1d\x06\x14\xbb\xaa\x38\x52\xa9\x35\xa8\x7d\x08\x66\x9f\x4b\x3c\xdf\x6e\x91\xeb\xfb\x2b\xa0\x8c\x31\x31\x42\xad\xaa\x8e\xdc\x1d\xa5\x70\x55\xe3\xd9\xc5\x35\x7a\xa3\x16\x5a\xcd\x73\x4c\x40\xed\xce\xee\xde\x4d\x48\xd3\xf2\x80\x8a\x9a\x0a\x6e\xe6\x88\x9f\x80\xd5\x76\xdc\xee\x45\xca\xab\x66\xdb\xd6\xdb\x9f\x01\x35\x38\x6e\xab\x50\xd3\x7a\xba\x00\xcd\x6b\x41\x70\x14\xb3\x79\xdd\x30\x9b\x37\xb6\x31\x9b\xd7\xe1\x0d\x8f\xa9\x6c\x42\xf9\xed\x2f\x7b\x4d\x67\x47\x93\x0e\x9e\x3a\x3a\x14\xe7\xa4\x10\xa7\xe9\xc8\x68\x7f\x84\x56\x30\xb0\xe5\x51\x11\xdc\xd0\x43\xe7\xc3\x15\x49\xfc\x2f\x49\xc0\xbf\xc1\xa7\xe3\xe5\xcb\xfb\x5f\x7e\xf8\x8d\x17\xc8\x57\x87\xd3\xa0\xbc\x7f\x83\xd1\xdb\x79\xdf\x2b\xd5\x51\x33\xc3\x27\x6d\x1e\x6d\xbc\x27\x22\x4b\xc0\x43\x4f\x9e\x4f\xe7\xe5\xd2\x1e\x62\xd3\x7c\x71\x98\xab\x33\xb5\xd5\x34\x9c\x87\xd6\x2b\x78\xa6\xac\x3f\x3c\x86\xb5\xdd\x2a\xcf\x89\x43\xe7\xae\xf0\xc4\x8f\x86\x57\xf9\x28\x78\x0e\x5d\x91\xab\xdb\xd8\x95\x1d\x79\x59\xfb\xfc\xa9\x6c\xf0\xe2\x5b\xe4\xcb\x2f\xbd\xf1\xda\x6c\xa3\x06\x99\x62\x42\xcc\x9b\x5e\xb3\x32\x59\x48\x1d\xc7\xb2\x2f\x6d\x98\xee\x0d\x0c\x43\x3b\x15\xaf\x27\xe5\x53\x55\xe7\xad\x98\x54\xc5\x8e\x56\xc7\xfb\xa4\xaa\x1f\x8e\x72\x93\xa7\xfd\x66\x15\x7b\xb7\x82\xf1\x85\xe0\xec\x1d\x0f\x32\x55\x2d\xa3\xe6\x16\xeb\xc7\x7c\x80\xc3\x19\xab\x5c\x57\x42\xb2\xe1\x9c\xbf\x90\x86\x53\x5b\x2e\xe0\xc9\xf8\x70\xcb\x54\x9b\x89\x78\xac\x78\x80\xd5\xae\xf1\xd5\x9a\x87\xd7\x87\x82\x15\xbf\x05\x01\x51\x5b\xd8\xf3\x41\x44\x4a\xe9\xfc\xd5\x71\xb4\x8f\x35\x8f\x18\xf5\xb7\x88\x53\xce\xcd\x1a\x9f\x93\xd3\xad\x5d\x18\x34\xc6\x6c\xba\xb0\xb6\x61\x85\x6f\x42\xcf\x46\xac\xb5\xc6\xda\x8d\x6d\x5b\xb0\xbd\xfe\xdc\xf9\x69\x50\xe4\x1e\xe4\x8e\xe7\x9b\xeb\x5f\xd9\xb8\x7f\x9d\x92\x0d\x5a\x7a\x01\xe5\xd8\x89\xcf\x36\xb8\x3a\x46\xe1\x8e\x1a\x9d\x8a\x04\x34\x60\x7d\xe5\x22\xc9\x97\x94\x94\xca\xf2\x76\x36\xdf\xde\x34\xe2\x63\xcf\x30\xa5\x3a\xe8\xba\xa3\x47\xdd\xf0\xd0\xdb\x9c\x9e\xb2\x79\x5b\xe1\x82\x8f\x43\x5b\xb4\x1e\x5b\x6a\xa7\x6e\xd1\x6f\xbf\x2a\x3e\xe4\x92\x19\x90\x06\x9f\x91\x97\xcf\x84\xdc\x7f\xe7\x15\x7c\xe3\xeb\xbf\x7d\x78\x91\x5b\x46\x48\x06\xbc\xf1\x8e\xf1\x19\x6b\x79\x5e\xd5\xda\x3b\xa3\xba\xb4\xf5\xdf\xe8\xfd\xf2\xf2\xd1\xe0\x1b\x2f\x9d\xbc\xfe\xce\xec\xc6\xeb\x61\x5e\x74\xa3\x05\x43\x2b\xba\xab\x7d\x6d\x5e\x12\x21\x6c\xd0\xcb\x69\x41\x76\xce\x87\x89\xd2\x8f\x1f\x11\x0f\x75\x1e\x22\x5a\x37\x9a\x41\x34\x34\xa4\x6d\xe8\x3d\x21\x0c\x07\x57\x8a\x86\xb5\x91\x5f\x16\x36\x36\x7b\xf9\xbc\x7c\x4c\xfc\xea\xbd\xdf\xb8\xf7\xf8\xf9\xe7\x1f\xb6\x23\x48\x57\x22\x84\xbf\xdc\x4b\x4d\xcd\xa3\x69\x9b\xb3\xd1\x11\xb8\x57\x9e\x71\x6a\xd2\xf6\xda\x99\x78\xd5\x78\xe6\x4f\xe8\xb2\x70\xec\xa9\x18\x6d\xdd\xf9\xe7\xc7\xf3\xe5\x6b\x5f\xfd\xca\x79\xc9\x5c\xc3\xdd\x7a\xbb\x25\xd4\x65\xd8\xc8\x7c\xae\xec\x63\xb6\x30\xbb\x4f\xc5\x60\xe6\x9c\x7a\xe6\xc6\x1c\x8a\xa1\x85\x21\xe3\x37\x39\xbb\xd9\x3c\x9d\x10\x1b\xba\x8d\xf1\x84\xcd\x36\x34\x55\x0b\xf8\x9a\x09\x4d\x93\xb5\x59\x3b\x33\x9a\xf3\x01\x44\xf8\xe0\x75\xad\xc6\x72\x62\x95\xfa\x9a\xe5\x84\x53\x39\xfc\x8a\x39\x83\xeb\xfd\xbe\x75\x55\x45\xeb\x7e\xfe\x27\xe7\x91\x20\xb6\x42\x8e\x8d\x7b\xa5\x51\x0f\x61\x5c\xe1\x65\x1b\x18\xdc\x56\x48\xfb\x05\xb1\x81\x38\x9f\xe9\x83\xf4\x6a\xac\x2d\xac\x7b\xf3\x34\xcb\x0e\xd3\xe9\x43\xce\x96\xd9\x40\x33\xed\x28\xf7\x13\xb8\xa1\x0e\x84\x12\xab\x44\xa3\x38\x3b\x42\x5e\xbc\x14\xe3\x2c\x13\x7a\xf1\x98\x45\xac\x13\xf5\x4d\x7a\x5a\x4c\x92\x84\x1c\xa0\x11\xe1\x90\x38\x17\x28\xb4\x3d\xae\xf1\x86\xf2\xf4\x80\xe0\x38\x0d\xad\x07\xe5\x70\x14\x3f\x11\xac\x44\xcb\xb0\x81\x13\x54\xd7\x18\x15\xbc\x73\xb7\x96\xf4\x1a\x8b\x84\xd7\xd8\xbe\xf3\x41\x87\x46\xc0\xdd\x2e\x4d\x92\x84\x1d\x04\xc7\x43\x9d\x88\x9e\x08\x62\x11\xe6\x61\xd4\x50\x12\xa9\x18\x10\x6d\xc0\xee\xfa\xd5\x3e\xbf\x97\x55\xeb\xd3\x13\x75\xbb\xbb\xbb\xee\x10\x1d\x86\x1e\xd4\xbe\x99\xe0\x12\x41\x27\xbb\xda\xd7\x6d\xc7\x89\x84\x4f\x65\xd8\x62\x0a\x9c\x08\x43\x3b\xda\xfb\x2a\x4e\x06\xfb\xf8\x96\x17\xf2\x54\x3a\x52\x8d\xc0\x3e\xde\xdb\x03\x2a\x8a\x29\xed\xe7\x02\x4b\x6e\xb3\x03\x9b\x8c\x31\x18\xd1\x31\x9e\xec\xb0\x38\x07\x07\xc8\x01\x73\xee\x8c\x13\x8c\xc8\xde\xde\x7a\x1d\x23\x00\x89\xe7\xd0\xda\xc6\xf8\x09\x8d\x1a\xcb\x51\xe3\xe0\xa8\xa5\x17\x60\xdb\x1f\x76\x46\x9d\xeb\x51\xa7\x09\xb6\xa3\xb6\xc9\x38\x07\x23\x3c\xce\x85\xef\x61\x16\xa7\x2a\x26\x4d\x91\xb8\xe3\x4f\xdd\xf1\xf3\x82\xc5\x8b\xbd\xa1\x1e\x49\x21\x22\x6e\xf2\xd1\xa5\x7c\xa7\xea\x6c\xba\x43\xf9\x3c\xe5\xaf\xde\x90\x4f\xd8\x4e\x17\x6f\x9d\x2e\xcc\xd5\x84\x57\x2b\x72\x6b\xa0\x1a\x3d\x33\x71\x17\x76\x87\x2a\xc2\xb2\x0e\x3b\x69\x60\x91\x26\x03\x58\x24\x61\x58\xd0\x5b\x09\xe9\x76\xd3\x5b\xc5\xbe\xec\xbb\x6c\x00\x49\xca\x41\x92\x2a\x90\x94\x0a\x24\x99\x07\x92\xd2\x01\x09\xcc\x57\x2b\x17\x2d\x4b\x87\x59\x90\xf0\xca\x34\x54\x32\x03\x2c\xea\x00\xcb\xce\x6b\x53\x4b\x7a\xc6\xe5\x5a\x80\x36\x95\x68\x04\x77\x87\x60\xb5\xda\x00\x19\x0b\xf5\xdc\xf5\x44\x7c\x66\x63\x52\x20\x1b\x79\xc2\xc4\xad\x66\xeb\x1d\x13\x11\xf2\x38\x2d\xee\x3e\x22\x86\x14\x3a\x43\x12\xde\x87\x4d\x48\x29\x64\x92\x1e\x6e\xa7\x22\xc6\x7e\x6e\x9d\x56\xa7\x09\xdf\xa2\xb0\x48\xde\x4c\xd9\x71\x7f\x81\x49\x2c\x13\xe9\xe3\x58\x92\x9c\xbd\x1c\x0e\x00\x4c\x7b\x43\x00\xcb\x84\xe3\x4a\x01\x60\x96\x94\xa6\x79\x38\x4d\x4a\x15\x22\x66\x7f\xda\xed\x66\x6a\x39\xe7\xb2\xec\x5e\x92\x83\x9d\x2c\x99\xbb\xc5\xe7\xaa\xb8\xf6\x58\x3c\xbd\x88\xa3\x60\xe5\x55\x3e\x61\x10\x79\x11\x88\x85\x77\x60\x21\x80\xbd\x3b\x97\x59\xc2\x53\xbc\xec\xf1\x36\x13\x42\xd8\x04\x43\xd4\x9f\x63\xa2\x02\x8a\x7e\x1d\xb3\xe3\xbb\xf3\x79\x81\xbc\x43\x83\x40\x0a\xb1\xa2\x31\x30\x85\x45\x62\xc2\x85\x29\x77\xce\x2f\xde\x74\x02\xb7\x9a\x8f\xe3\x9b\x93\x6e\xd7\xfd\x05\xcb\x64\x00\xb3\xa4\x76\xd8\xee\xee\xa6\xeb\xc0\x66\x9b\xc2\xb9\x5d\x9c\x63\x67\xef\x4c\xed\xde\x81\xcb\x64\xb0\xbf\xbc\x75\xbc\xbf\xd4\xf4\x64\x96\x4c\xed\xe6\xb1\xc9\x78\x09\x46\xd3\xf1\x72\x02\x17\x89\x8b\xc9\x33\x17\x93\x45\xb8\xc4\x62\xb5\xda\x5d\xc8\x78\x70\xf1\x0c\xc8\x60\x13\xb1\x57\xc1\x6e\xb0\xf9\x6a\xb5\x00\x30\x8b\xb5\x8b\x6d\x19\xe4\x97\xc6\x33\x48\xc0\x8b\xc9\xe0\x20\x2e\x6f\xe1\x83\x7c\xb5\x8a\xf3\x64\x06\x46\x69\x32\x83\xe5\xde\x1e\x18\x95\x7b\x7b\x62\xf7\xd9\x7a\x7a\xc7\xc0\x74\xb5\xca\xd7\x62\x49\x32\xab\x9b\x93\x38\x40\x71\xd6\x22\xad\xaf\xc3\x8d\xe0\x3a\xdc\xf0\xd6\xe1\xc6\x64\x47\x92\x52\x39\xa9\xdb\x2a\x3e\x72\xe9\x00\x98\x58\x00\x1b\x02\x96\x25\x83\xfd\xec\x56\xb9\x9f\x69\x40\x4f\x13\x62\x01\x6d\x93\x71\x06\x46\x64\x9c\x09\x2a\xb5\x9b\xae\x56\xbb\xde\xba\x39\x04\x48\x40\x78\x0a\xf4\x1e\x71\x81\x3c\x75\x81\x4c\x21\x86\x29\xd8\xb1\x5f\xe7\x76\x74\x2f\x0e\xba\xdd\x42\xfa\x19\xcf\x05\xbe\xa8\x38\xcb\x38\x9e\x42\xca\x97\xc0\x7c\x9e\x82\xb5\x39\x18\x2c\x6b\xe4\x78\xd8\x4a\xea\x31\x35\x91\x09\xfe\x4c\x12\xe4\xc5\x16\xc6\x09\xea\xeb\xab\x1f\xcc\x13\xb2\x5a\x61\x3e\x5f\xc3\x18\xe6\xab\x55\x6f\x98\x24\x09\x8d\x39\x85\xd1\x54\x36\xe5\xbf\xe0\xd0\x04\x8f\x15\x2b\xdd\x10\x7a\x3a\x49\x45\x24\x6b\x8a\x97\xaf\xe0\x74\x4a\x31\xc3\xd3\x22\x29\xed\xc8\xa5\x46\x25\x0d\xf3\x76\x65\x8c\x40\x9f\xe5\x5f\x5b\x2e\x11\x7d\x39\x2d\x50\x0c\x34\x1d\x88\xcb\x98\x55\x3e\x01\x07\x1e\xf7\x4f\x97\xe8\xf6\x31\x4a\x67\xe7\x6d\x5e\x5c\xe7\x0a\x4e\x3e\x42\x3d\x88\x58\xdb\x6b\x85\x76\x67\xd1\xa7\xef\xff\x4d\x34\x8a\x6e\x47\x30\xfa\x7f\xff\xfe\x7f\x53\xa9\x9f\xff\x8e\x4e\xfc\x0b\x9d\xf8\x5d\x95\xf8\xe4\x6f\xff\xcc\xa4\xfe\xd4\xa4\xfe\xdc\xa4\x7e\xa2\x2b\xfc\x4b\x95\xf8\x50\xb7\xf5\xa1\x6d\xe2\xaf\x4c\xea\x2f\x4d\xea\xaf\x4d\xea\xbf\xa9\xd4\xc7\xba\xa7\x5f\xfc\x48\x37\xfa\x1d\x9d\xf3\x43\x53\xfa\xc7\xfa\xdb\xbf\xd2\xdf\xfe\x56\x27\xfe\x9d\x6e\x48\x0f\xe1\x63\x3b\x84\x1f\x99\xd4\x5f\x98\x94\x06\xc4\x27\x1f\x98\x31\xeb\x0e\x3f\xd6\x8d\x7e\xfa\xd3\xff\xaa\x52\xbf\xfc\xbe\x18\xa8\xe8\xfb\xbb\x3c\xf5\x2a\xef\xf3\xef\x4d\xea\xc7\x3a\xf5\xcb\xef\x8b\xb9\xdd\x15\x49\xd1\xc7\xd7\x44\xf2\x03\x9e\xfc\x2d\x91\xfc\x5b\x9b\x14\x0d\x7c\x83\xf7\xf4\xfe\xff\x13\x8d\xa2\x97\xc4\xc2\xfc\x58\xa5\x3e\xf9\xe0\x77\x4d\xea\x3b\x26\xf5\x5d\x95\xfa\x9f\xff\x52\x25\x3e\xd2\xa5\x3e\xfa\x17\x2a\xf1\xe9\xfb\xbc\xb7\x97\x45\x63\xff\xbb\x4a\x7d\xf8\x5d\x9d\xf8\x9e\x4e\xfc\x9e\x4e\xfc\xbe\x4a\xfc\xfc\x5f\xab\xc4\x27\x1f\xe8\x42\x1f\xe9\xac\x8f\xff\x4e\x25\x7e\xf9\xfd\x7f\x50\xa9\x4f\xdf\xff\x59\x34\x8a\x5e\x11\xdd\xfc\xa9\x4a\x7d\xf2\xc1\xef\xa9\xd4\x87\x7f\x60\xb2\x7e\xdf\xa4\xfe\xd0\xa4\xde\x37\x29\x5d\xee\x43\xfd\xf1\xa3\x7f\xab\x13\xba\xad\x8f\xfe\x8d\x4a\xfc\xf2\x07\xba\xcb\x5f\xfc\x94\x27\x7e\x9b\xa7\xbe\x63\x52\x7c\x8d\x5e\x79\x8f\xa7\xfe\x95\x4e\x7d\xfa\x3e\x07\xf7\xab\x62\x90\xff\x87\x4a\xfd\xfc\x7b\x3a\xf1\x6f\x74\xe2\xf7\x54\xe2\x93\xbf\xfb\x1d\x9d\xfa\xdb\x7f\x30\x79\xdf\x31\xa9\xdf\x35\x5f\xff\x5e\xa5\x3e\x7c\x5f\x67\x7d\xf0\xef\x4d\xea\x3f\xe8\x8f\x3a\xeb\x43\x9d\xf3\xf3\x7f\x6b\x5a\xd0\x03\xfb\xf0\x3f\xa9\xc4\xc7\xba\x9f\x8f\xbf\x6b\x0a\x7d\x60\xba\xd6\x79\x1f\xff\xc4\x74\xf3\x7d\xdd\xc2\x7f\x34\x59\x36\xa5\x5b\xfd\xe8\x0f\x75\xe2\x0f\x54\xe2\xd3\xf7\xf9\x62\xbe\x26\x60\xf2\x67\x2a\xf5\xc9\x07\x3f\x54\xa9\x8f\xfe\x48\x25\x7e\xf9\x03\x5d\xec\xd3\xf7\xf9\x6c\x7f\x53\x54\xf8\xcf\x2a\xf5\x8b\xbf\x56\x89\x0f\xbf\xaf\x12\x9f\x7c\xf0\x23\x9d\xf5\x43\x9d\xd0\x39\xbf\xf8\x33\x9d\xf3\x63\x9d\xf3\xa7\x2a\xf1\xd1\x1f\xab\xc4\x2f\x7f\xa8\x4b\xff\xf2\x07\xff\xdd\xa4\xfe\x41\xa5\x3e\x7d\x9f\xe7\xbd\x2e\xc6\xf0\x13\x95\xfa\xf0\x4f\x55\xe2\x93\x0f\x7e\x6c\x52\x7f\xa6\x52\x1f\xff\xd0\x64\xd9\x62\x3f\x31\xa9\x3f\xd7\x6d\xe8\xf2\x9f\xfe\xf4\x3f\x9b\xd4\xff\xad\x52\xbf\xfc\xe1\xbf\xd3\x79\xef\xf3\x81\xdc\x11\xdd\xff\x17\x95\xfa\xf9\xef\xeb\xc4\xbf\xd3\x89\x3f\x50\x89\x0f\x7f\xa2\x13\x7f\xae\x13\x7f\xa1\x13\x7f\xa5\x0b\xff\x2f\x2a\xf1\xc9\x07\x7f\xa9\x53\x7f\xf7\x3d\x95\xfa\x85\xfe\xf8\xb1\xce\xf9\xf8\xf7\x4c\x21\x9d\xfa\xd0\xd4\xfb\x40\xb7\xfe\xd1\x9f\xa8\xc4\xa7\xef\xff\x8f\x68\x14\xfd\x33\x31\xe0\x3f\x57\xa9\x0f\xff\x5a\x25\xfe\xe7\xf7\x54\xe2\xd3\x3f\xe6\xf8\xfe\x55\x51\xea\xff\x54\xa9\x4f\x3e\xf8\x2b\x95\xfa\xc5\x4f\x4c\xd6\x7f\x53\xa9\x0f\xff\xc6\x64\xfd\xb5\x4a\x7d\xf4\x1f\x55\xe2\xd3\x9f\xfe\x17\x95\xfa\xe5\x0f\x7e\xc7\xa4\x7e\xd7\xa4\xbe\xa3\x53\x3f\xfc\xb1\xae\xf1\xc7\x9c\x66\xbd\x21\xba\xff\x0b\x95\xfa\xf0\x7f\xe8\xc4\xcf\x74\xe2\xbf\xab\xc4\x27\x1f\xfc\x8d\x49\x7d\xa0\x3f\xfe\x9d\xc9\xfa\x7b\x93\xfa\x5b\x95\xfa\x47\xdd\xfc\xc7\xba\x89\x4f\x7f\xfa\x63\x93\xfa\x91\x4a\xfd\xf2\x07\xdf\x33\xa9\xef\xea\xd4\x0f\x7f\x47\xa5\x7e\xc1\x49\xe0\x1b\x1c\x58\xbf\x10\xc5\xbe\x25\xc6\xcd\x67\xf5\xa6\x18\xf7\xff\xa5\x52\x9f\x7c\xf0\x0f\x3a\xf5\xb3\xdf\x31\x29\x5d\xee\xd3\x9f\xfe\xa5\x4a\x7d\xf4\x7d\x9d\xf5\xc7\x9c\x84\xbf\x25\x1a\xf9\x4b\x95\xfa\xc5\x07\x2a\xf1\x8f\xfa\xdb\xcf\xff\x48\x25\x3e\xf9\xd9\x77\xf4\xb7\x7f\x6d\xb2\xbe\xab\xb3\xfe\x95\xc9\xfa\x3d\x93\xfa\x9e\x4a\x7d\xfc\x23\x95\xf8\xe8\x07\x2a\xf1\xcb\x1f\xfe\xa1\x49\xfd\xa9\xee\x5a\x54\x14\xf3\xe4\x34\xea\x2d\x39\x4f\xde\xe7\x5d\x31\xc4\xff\xaa\x52\x3f\x7f\x5f\x27\xfe\x58\x27\xfe\xbd\x4a\x7c\xf2\x77\xef\x9b\xd4\x1f\x9a\xd4\x7f\x30\x29\x5d\xee\xe7\xff\xab\xce\xfa\xd9\xef\xab\xd4\xc7\x7f\x61\xb2\xfe\x40\xa5\xfe\xf1\xf7\x4d\x96\x69\xec\x67\xba\x83\x7f\xd4\xa5\x3e\xfe\x4b\x9d\xf8\x2b\xdd\xba\xee\xf0\xe3\x3f\x37\x3d\x9b\x36\x75\x4b\xbf\xf8\x23\x5d\xc8\x8c\x40\x97\xf9\xe8\x47\xa6\xda\xf7\x4d\xea\x3f\xfd\x7f\xec\xbd\x6b\x77\x1c\xc7\x75\x28\xfa\x1d\xbf\x02\xe8\x23\x4f\xaa\xa6\x6b\x1a\xdd\xf3\x02\xd0\x40\x61\x8e\x44\x52\x96\x62\x91\x92\x45\x4a\x96\x3c\x1a\xf3\x34\x66\x6a\x30\x2d\x36\xaa\x47\xdd\x35\x78\x88\x98\xb3\x92\x38\xb6\xe3\x38\x3e\x89\x43\xbf\x63\xca\x71\x6c\xc7\x71\x9c\xc4\x96\x1d\xc5\xa2\x14\xdb\x6b\x5d\xbd\xa8\xf3\x41\xf9\x0d\xe4\x47\xfe\x8a\xbb\xea\xd9\xdd\x33\x3d\x00\x28\x51\xc9\xcd\xba\x5e\x5c\xc4\xec\xae\xe7\xae\x5d\xbb\x76\xed\xaa\xda\xb5\xcb\x40\x59\xec\x2b\x06\xfa\x3b\x03\x19\x9c\xdf\xfc\xb6\xae\x49\x63\xf1\x9e\x6e\xe2\x5b\x26\xea\xb7\xba\xca\x2f\x6a\xe0\xfb\x0a\xb8\x77\xf3\xcf\x0d\xa4\xcb\x7c\x57\x54\xf3\xb8\x08\x13\xc8\x0a\xb4\x45\xe0\x33\xa2\xb3\x38\x13\x3c\x25\x3a\xeb\x17\x0a\xba\x73\xeb\xeb\x06\xfa\xa6\x82\xde\xfd\x91\x02\xee\xbe\xfa\x43\x05\xdd\xbb\xf9\x57\x06\xfa\x6b\x03\xe9\xac\x77\x6f\x70\xf4\x3e\x2d\x0a\x7e\x55\x41\xf7\x6e\x7e\xd3\x40\xdf\x56\xd0\xfb\x7f\xae\x80\xbb\x37\x38\x87\x3e\x2d\x32\xfc\x52\x41\xef\x7c\x5d\x01\x77\x6e\x7d\x5b\x07\x69\xe0\xf6\x5f\x69\xe0\xaf\x4d\xa2\xef\x1a\xe8\x7b\x3a\xf9\x37\x4d\xd0\x2b\x0a\x7a\xff\x2f\x14\x70\xf7\xd5\x1f\x29\xe8\xde\x4d\x9d\xf3\xde\x2b\x7f\x6f\xa0\x3f\xd1\xe9\x6e\xf0\x41\x71\x59\x60\xf6\x2b\x05\xdd\x79\xe3\x15\x05\xbd\xf3\x5d\x1d\x74\xeb\x47\x3a\xe8\x7b\x26\xe8\x6f\x75\xd0\xdf\x9a\xa0\xbf\x37\xd0\xdf\x19\xe8\x1f\x14\x74\xfb\xdb\x3a\xbd\x2e\xfe\xee\xab\xbf\x55\xd0\xbd\x57\xfe\xc1\x40\x7f\xaa\x63\x6f\x70\x6d\xe4\x8a\x40\xed\x5f\x15\x74\xe7\xd6\x3f\x2a\xe8\x9d\x1f\x99\xa0\x7f\x52\xd0\xed\xef\xea\xb8\xbf\x33\x71\xbf\x30\xd0\xbf\xe8\xc8\xbf\x57\xc0\xbb\x3a\xdf\xbb\x3a\xea\xf6\x6f\x15\x70\xef\x95\x2f\x6a\xe8\x7b\x1c\xb1\x2b\x9f\x15\xf8\xf0\xee\x7c\x46\xe0\xf3\x9a\x82\xde\xfa\x8e\x06\xbe\xab\x81\xbf\x51\xc0\x3b\xff\xa0\x80\x3b\xb7\x5e\xd7\x41\xff\x68\x82\xde\xd0\x41\xff\xa4\xf3\x7d\x4f\x01\xef\xe9\x02\xde\xfb\x96\x06\xbe\xa1\x01\x5d\xdb\x9d\x37\xff\x5e\xe7\xff\x17\x0d\xfc\x42\x27\xba\xa1\x80\xdb\x5f\xd7\xc0\x37\x15\xf0\xee\xcf\x4d\x7e\x83\xc9\x9b\x06\xcd\x37\xff\xc5\x40\xff\x64\xa0\x5f\x18\xe8\x47\x06\xf7\x5f\xea\x2a\x7f\x69\x82\xfe\xcd\x40\xff\xaa\xa0\xf7\xff\x54\x01\x77\x6f\x70\xe9\xf9\xac\x20\xdb\xbf\x29\xe8\xce\xad\x7f\x37\xd0\x6f\x15\xf4\xee\x2f\x15\x70\xef\xe6\x2b\x0a\x7a\xff\x0b\x26\x88\xb3\xd8\xb3\x62\x61\x70\x83\xb3\xf8\x67\x44\x71\xbf\x56\xd0\x9d\x37\xfe\xc8\x40\x7f\xa2\xa0\x77\xfe\xd5\x04\x7d\xd1\x40\x7f\x6a\xa0\x3f\x53\xd0\xdd\x57\x7f\xa9\xa1\x1b\x5c\x69\x79\x4e\x14\xfc\xba\x82\xee\xbc\xf1\xe7\x06\xfa\x0b\x05\xdd\xbd\xc1\x45\xcd\xf3\x22\xdd\x2d\x05\xdd\x79\xf3\x97\x0a\x7a\xeb\xa6\x02\xde\xf9\x37\x13\xf7\xba\x82\x6e\xeb\x44\x77\xde\xd0\x45\xbc\xf3\xba\x49\x95\xa5\xff\x57\x05\xbd\xfb\x2b\x05\xbc\xff\x7f\x4c\xdc\x6f\x15\x74\xf7\x06\xd7\x87\x3e\x2b\xb0\x78\x43\x41\xef\xdc\x52\xc0\x9d\x37\xfe\x4a\x07\xbd\xa9\x81\xdf\x98\xb8\xbf\x36\xd0\xd7\x15\xf4\xee\x6b\x0a\xb8\xfd\x23\x05\xdc\x7d\xf5\x77\x06\xfa\x99\x82\xee\xdd\xfc\x3b\x1d\x76\x83\x97\x1f\xf0\xca\x7f\xf3\xc7\x0a\xba\xf3\xc6\x77\x15\xf4\xd6\xdf\x6a\xe0\x07\x1a\xf8\x3b\x93\xe8\x27\x06\xfa\xb1\x81\x7e\x66\xa0\x9f\xea\x0c\x3f\x54\xc0\xdb\xba\xf8\xb7\x3f\x6f\x12\xbd\x6a\xa0\x9f\x1b\xe8\x35\x03\xfd\x4a\x41\xb7\x75\x4d\xef\x19\x2c\x7e\xa4\x43\xbe\x6f\x52\xeb\x7a\xde\xd2\xd8\xbc\xf7\xa6\x06\xfe\x8f\x2e\x48\xa3\x70\x3b\x43\xe1\x07\x06\xfa\x67\x03\xfd\x5a\x43\xaf\x1b\x9c\xbf\xa0\x80\xbb\xaf\xea\xe2\xdf\xd7\x84\xbb\xf7\x3d\x81\xa8\xa8\x9b\x8f\xe5\x80\xf0\x3a\x7f\x63\xa0\x1f\x6a\xe8\xde\xf7\x44\xdb\x62\x01\x8a\x3a\x26\x02\xe4\x7d\x1d\xec\x0b\xf0\xcd\x0c\x14\x05\x1c\x89\x2e\xe2\xf3\xf9\x8e\xe8\xa2\x3f\x51\xd0\x9d\xd7\x3f\x6f\xa0\x2f\x18\xe8\x4b\x0a\x7a\xf7\x8f\x34\xa0\x53\xbd\x7f\x43\x01\x77\x6f\x70\x9e\xe9\x8b\xc2\x3e\xaf\xa0\xb7\xbf\xa4\x81\x2f\x6b\xe0\x2b\x1a\xf8\xaa\x02\xde\xfa\x89\x02\xee\xbc\xae\x13\xbd\xfb\x67\x0a\xb8\xfd\xef\x0a\xb8\xf7\xbd\xdf\x29\xe8\xee\x17\xff\x54\x43\x37\x78\xd5\x03\x51\xe1\x9f\x2a\xe8\xce\xeb\x5f\x51\xd0\xdb\x7f\x69\x82\xbe\x6a\xa0\xaf\x19\xe8\x86\x81\x74\xba\xb7\x75\xe4\xbb\x7f\xa1\x80\xf7\xbf\xa9\x81\x6f\x29\xe0\xde\xcd\x37\x14\xf4\x1e\xef\x99\x81\x58\x35\x7f\x51\x43\x77\x6f\xf0\xb1\x42\x04\x42\x5f\x50\xd0\x5b\xff\xa0\x81\x9f\x6a\xe0\x1f\x15\x70\xe7\xcd\x3f\xd6\xd0\x1b\xbf\x33\x61\x5f\x30\xd0\xe7\x4d\xec\x6f\x14\xf4\xf6\x0d\x1d\xf4\xfa\x37\x0c\xf4\x2d\x1d\xa9\x83\xde\xd6\x21\x6f\xfd\xcc\x94\xf0\xa6\x8e\xfb\x1b\x05\xdc\xd6\xf5\xdc\xfe\x92\x49\x74\xcb\x54\xad\xc3\x6e\xff\xd4\x54\x73\x53\x97\xf0\x1d\x13\x94\x41\xba\xd4\xf7\x75\xc6\xf7\x75\xc8\x7b\x3a\xdf\xdd\x1b\x1c\xbf\xa1\x20\xce\x17\x15\x74\xe7\xf5\xef\x2b\xe8\xdd\xbf\x56\xc0\xbd\x9b\xff\xae\xa0\xbb\x37\x38\xf9\x77\x45\x86\x2f\x29\xe8\xbd\xd7\x14\xf0\xf6\x4d\x05\xdc\x79\xfd\x07\x3a\xe8\xfb\x1a\xd0\x21\xef\xfd\x44\x87\xfc\x50\x87\xfc\x58\x01\xef\xff\xad\x02\xee\xbd\xa2\x53\xdf\x79\xed\x96\x0e\xbb\xf9\x3b\x05\xdd\xbd\xc1\x69\x39\x12\x38\xfc\x99\x82\xde\xfe\xb1\x02\xee\xbc\xfe\x43\x03\xfd\x44\x41\xb7\xbf\x6f\x82\xb2\x64\x3f\x35\xd0\xcf\x34\xf4\xc6\x37\x75\x69\x3a\xe7\xdd\x57\xff\xc1\x40\xff\xa6\xa0\xf7\x75\x19\xef\x72\xda\x8d\xf6\x05\x46\x5c\x41\x0a\x05\x46\x5f\x56\xd0\x5b\xff\xa4\x81\x7f\xd6\xc0\xbf\x28\xe0\xed\x9f\x6a\xe0\x67\x1a\x30\x69\x7e\xae\x80\x3b\xaf\x1b\xe8\x4d\x5d\xe4\x7b\x7f\xa5\x80\xdb\x3a\xe4\xf6\x57\x4c\x22\x0d\xbd\x9d\x95\xa0\x0b\x7d\xff\x1f\x74\xdc\xab\x0a\xb8\x7b\x83\xb3\xc9\x8b\x02\xe1\x3f\x57\xd0\xdb\xaf\x29\xe0\xbd\x5f\x28\xe0\xfd\x2f\x2b\xe0\xee\x0d\x3e\x43\x5c\x13\xc9\xbf\xa2\xa0\x3b\xaf\xbf\xaa\xa0\xf7\x7e\x6a\x82\x7e\xa5\xa0\xb7\x7f\x6d\x82\x5e\x53\xd0\xbb\xdf\x51\xc0\xdd\x57\xff\x51\x41\xf7\x6e\xfe\xb1\x81\x3e\x6f\xa0\x2f\x68\xe8\x95\x1f\xea\x1c\x37\x38\xe3\x46\xa2\xfa\xbf\x50\xd0\x3b\x7f\xa4\x80\xb7\xdf\xd0\xc0\x6f\x15\x70\xe7\xf5\x5f\x1b\xe8\x96\x8e\xfc\x77\x13\xf4\x1b\x03\xbd\xa9\xcb\xfa\x9d\x06\xfe\x44\x01\xef\x7e\x57\x01\xef\xff\x4c\x01\x77\x5f\xfd\x81\x82\xee\xdd\xfc\xb2\x86\x5e\xf9\x63\x13\xf6\x25\x05\xbd\x27\x22\x25\xd1\xb8\x5e\xb8\x27\xb0\xfe\xaa\x82\xee\xbc\xfe\x3b\x0d\xdd\xfa\x63\x03\x7d\x5e\x41\xef\xbf\xaa\x81\x9f\x2b\xe0\xee\x0d\x3e\xa4\xa8\x28\xe3\xff\x28\xe8\xbd\x5b\x0a\x78\xe7\x4f\x15\xf0\xd6\xab\x0a\xb8\x73\xeb\x0b\x3a\xee\xcf\x4c\xd0\x97\x74\xd0\x17\x4d\xd0\x57\x0c\xf4\x65\x05\xbd\xfb\x8a\x02\xde\xff\xa5\x4e\xae\xa3\xee\xbd\xf2\x35\x03\xfd\x58\xe3\xc0\xbb\x81\xca\x56\xf2\x9c\xb1\xc0\xf0\x2f\x15\xf4\xd6\x2f\x35\xf0\x2b\x0d\xfc\xab\x02\xee\xbc\x79\xc3\x40\x5f\x33\xd0\xb7\x0c\xf4\x0d\x9d\xe1\x35\x1d\x74\xeb\xab\x0a\xba\xfd\xcf\x26\x48\x57\xf4\xce\x57\x4d\x90\x29\xec\x96\xae\xe0\x1d\x9d\xea\xf6\xcf\x35\xf0\xaa\x2e\xfd\xdf\x74\xc8\xcf\x4c\xcd\xa6\x4c\x5d\xd2\x7b\x7f\xad\x13\x19\x0c\x74\x9a\x77\x7f\x60\xb2\xdd\x34\xd0\xdf\x18\x28\x8b\xfd\xbe\x81\x7e\x68\x20\x83\xf3\x9b\xdf\xd1\x35\x69\x2c\xde\xd3\x4d\x7c\xeb\x75\x1d\xf2\x3b\x05\xbc\xff\x75\x05\xdc\xbb\xf9\x15\x03\xe9\xa2\xde\xd7\xd4\x7a\x57\x54\x23\x24\x83\x80\x84\xc2\x71\x53\xa0\x1d\x8b\xce\xe2\x08\x8d\x45\x67\xfd\x95\x82\xee\xdc\xfa\x86\x81\xbe\xa5\xa0\x77\x7f\xac\x83\x5e\xfb\x8d\x82\xee\xdd\xfc\x9a\x81\x6e\x18\x48\x67\xbd\x7b\x83\x8b\xee\x97\x44\xc1\x5f\x53\xd0\xfb\x5f\x51\xc0\xbd\x9b\xdf\x32\xd0\x77\x14\x74\xf7\x06\x27\x52\x22\x32\xfc\xb5\x82\xde\xf9\x86\x02\xee\xdc\xfa\x8e\x0e\xd2\xc0\xed\xaf\x69\xe0\x86\x49\xf4\x37\x06\xba\xa9\x93\x7f\xcb\x04\x7d\x5f\x41\xef\x7f\x55\x03\xbf\x51\xc0\xbd\x9b\x3a\xe3\xbd\x57\x7e\x62\xa0\xcf\x2b\xe8\xee\x0d\xae\xf1\xa6\x02\xb1\x1b\x0a\x7a\xeb\xfb\x0a\x78\xe7\x6f\x14\x70\xe7\xd6\x8f\x75\xd0\x4d\x13\xf4\x03\x1d\xf4\x03\x13\xf4\x13\x03\xfd\xd0\x40\x3f\x55\xd0\xed\xef\xe8\xf4\xba\xf8\xdb\xbf\x53\xc0\xbd\x57\x7e\x6a\xa0\x2f\xe8\x8c\x6f\xe8\xca\xef\xde\xe0\x85\x31\x81\xe2\xd7\x15\x74\xe7\xd6\xcf\x34\xf4\xc6\xb7\x14\xf4\xce\x8f\x4d\xe4\x3f\x2b\xe8\xf6\xdf\xe8\xb8\x1f\x9a\xb8\x57\x0d\xf4\x73\x1d\xf9\x13\x05\xbc\xab\xf3\xfd\xdf\x3f\x53\xc0\xdd\x57\xff\x5e\x41\xf7\x5e\xf9\x92\x86\xbe\xc7\xb1\x65\x52\xd9\xe2\x9a\xfa\x44\xa0\xf6\x0d\x05\xbd\x75\x4b\x03\x6f\x68\xe0\x4d\x05\xbc\xf3\x53\x05\xdc\xb9\xa5\x13\xbd\xf3\x33\x13\x64\x52\xfd\xb3\xce\xf7\xef\x0a\x78\xef\x7b\x1a\xf8\xb6\x06\xbe\xa9\x81\xef\xea\xfc\x6f\xfe\x44\xe7\xff\xb9\x06\x5e\xd5\x89\xbe\xae\x80\xdb\x1a\xc9\xdb\xdf\x52\xc0\xbb\xbf\x30\xf9\x0d\x26\x6f\x1a\x34\xdf\xfc\xb9\x81\xfe\xd9\x40\xaf\x1a\xe8\xc7\x06\xf7\x5f\xe9\x2a\x7f\x65\x82\x7e\x6d\xa0\xd7\x14\xf4\x7f\xbf\xac\x80\xbb\x37\x78\xce\x7d\x41\xb6\x6f\x2a\xe8\xce\xad\xdf\x18\xe8\x77\x0a\xfa\xbf\x5f\x51\xc0\xbd\x9b\xdf\xd7\x41\x7f\x61\x82\x38\xdb\xed\xcb\x15\x04\xef\xa4\x03\x51\xdc\xb7\x14\x74\xe7\x8d\x3f\x36\xd0\xe7\x15\xf4\xce\x6b\x26\xe8\x4b\x06\xfa\x82\x81\xbe\x6d\xa0\x2f\x2b\xe8\xee\xab\xbf\xd2\xd0\x0d\x4e\xdd\x43\x51\xc5\xb7\x15\x74\xe7\x8d\xaf\x18\xe8\xab\x0a\xba\x7b\x83\xeb\x1e\x47\x22\xdd\x77\x14\x74\xe7\xcd\x5f\x29\xe8\xad\xdf\x28\xe0\x9d\x5f\x9b\xb8\x5b\x0a\xba\xad\x13\xdd\x79\xe3\x2f\x75\xf2\xdf\x99\x54\x26\xfd\x1b\x59\xa9\xaf\x29\xe8\xdd\x7f\x55\xc0\xfb\x7f\x69\xe2\x74\xce\xbb\x37\x78\x5f\xbe\x2c\xf0\xf9\xae\x82\xde\x79\x43\x01\x77\xde\xf8\x9a\x0e\xfa\x77\x0d\xfc\xd6\xc4\xdd\x30\xd0\x37\x14\xf4\xee\xbf\x29\xe0\xf6\x8f\x15\xf0\xfe\x1f\x29\xe0\xee\xab\xff\xa4\xa0\x7b\x37\x7f\xa8\xa0\x0f\xf8\x04\xfc\xc1\xd7\x38\xc4\x87\xd3\x07\xdf\xe0\x10\x27\xed\x07\xdf\xe2\x10\xd7\xc3\x3e\xf8\x0e\x87\xfe\xd1\x40\xbc\x73\x3f\xf8\x3e\x87\xf8\xec\xff\xc1\x8f\x39\xf4\x33\x03\xf1\xe6\x7d\xf0\x53\x0e\xf1\xca\x3e\x78\x95\x43\x9c\x2d\x3f\x78\x8d\x43\x5c\xdb\xfc\xe0\xd7\x1c\xe2\x4c\xfb\xc1\x2d\x0b\x59\xff\xf1\xe7\x1a\xfa\xe0\xaf\x4c\x98\xa8\xe3\x77\x1c\xe2\x9d\xf6\x1f\x5f\xe0\xd0\x57\x34\xf4\xc1\x2f\x4c\x18\xc7\xf4\x3f\xbe\xcc\x21\xae\x25\xfd\xc7\xe7\xad\x69\x66\xe4\x38\xc9\x8c\x1c\x2d\xcb\x91\x97\x93\x01\x81\x4e\x42\x84\x29\x33\x58\xed\x7e\xee\x85\x89\xeb\xba\x6e\x8d\xff\xac\x5d\xe8\xad\xee\xa2\x12\xab\xda\xb4\x4b\x7a\xc7\xc7\xa4\xcc\x28\x33\x21\x69\x1c\xed\x93\x64\x75\x48\x02\x36\x49\x48\x6a\xa1\x6e\x2f\x6f\x60\xba\x38\x87\xbe\x3e\x6a\xcc\x36\xd1\x6c\x0a\x0d\xa4\xab\xc2\x66\x3a\xec\x17\x2c\x3b\x11\xfb\xa8\x56\xb4\x0b\x33\x18\xa7\xe8\xd7\x09\x9d\xec\xc9\xc7\xe1\xfd\x15\x17\x95\x9b\x13\x33\x6d\x61\x51\x66\x37\x3d\xd7\x98\xff\xff\xb5\xd8\x34\x66\xb5\x1f\x53\x16\x84\x94\x24\xb5\x01\xd9\x99\xec\xd6\x82\x41\x30\x66\xf7\x4b\x92\x55\xed\x84\xfa\x04\xc2\xe4\x0d\x73\x11\xcb\xec\x3e\x99\x23\x0c\xb3\x01\x25\x07\xcb\x4f\x93\xdd\x0b\x87\x63\x60\x7d\x6e\xb5\x63\xd9\xd4\xb6\x56\x81\x63\xc3\x55\xcb\x26\xb6\xf5\x90\xb2\xa1\xa4\x93\x28\x5a\xc1\xd8\xd8\xed\x26\x5d\xaf\xf7\x61\xac\xf8\x8a\x97\x91\xce\x69\x2a\x9c\xe7\x44\x78\x58\xd2\xc0\x21\x87\x8c\xd0\x01\xb8\x7e\x55\x9a\xf2\x3f\x2d\xfc\x9d\x27\x47\xbe\xb8\xe8\x11\xd2\xb0\xd0\x0f\xc2\x60\xfb\x6a\x3a\x19\x93\xc4\x09\xc6\xe3\xe8\x08\xf0\x10\x64\x0c\xc1\x20\x92\x29\x8a\x65\x1d\x1f\x83\xb2\x60\xcc\xa9\xc1\x9c\x8b\x85\x40\x38\x45\xfd\x80\x9e\x0b\x58\x10\xc5\xbb\x17\x28\x4b\x42\x92\x3e\x72\x74\xe5\x68\x4c\xfc\x79\x09\x61\xed\xc5\x03\x12\x59\x18\x63\x72\x7c\x7c\x2a\x6e\xbc\xe4\x53\x8a\xd5\x86\x69\x0c\x97\x21\xec\x64\xb7\x1d\x52\x00\x51\x92\x59\xbb\xa1\x50\x66\xa0\x3c\x6a\x1c\xf4\x89\x4a\xfa\x54\x42\x86\xe1\x21\x8a\xb1\x8b\x02\xcc\x94\x45\xdd\x66\xbc\x15\x64\xb6\xca\x29\x66\xca\x24\xb9\xe6\xad\x60\x9c\x1a\xab\x2a\x02\xb5\xe5\x2e\x67\xa6\x14\xcd\x54\x30\x8e\x07\x17\x73\x75\x1c\x1f\x87\x70\x69\x72\x7c\x0c\x26\x38\x75\xd2\x71\x14\x32\x40\x6c\x2b\x5d\xb5\xa0\x33\x8e\xc7\x00\x42\x94\x38\xc1\x60\x20\x99\x08\x4c\xa0\x36\x57\x5e\x4e\xc4\x58\x5a\x3a\xf3\x58\x3a\x5d\x7c\xaa\xab\x09\x3c\x7d\x6d\x18\xf4\x59\x9c\x1c\x2d\x4a\xb4\x17\x5c\x23\xb5\x41\x28\xe8\x1f\x24\x47\x33\x83\x8b\x8f\x9f\x8f\x7a\x5f\xa1\xc8\x5d\x58\x5a\xd3\x21\x63\x54\xa7\x1c\xa5\xbf\x98\x3a\x44\x32\x45\xa5\x02\xe6\xc2\x72\xa9\xae\x92\xe0\xda\xd5\x94\x10\x2a\x0d\x1c\x13\x3c\x57\x43\x6e\xb4\xe4\x4c\x2c\x19\xbc\x0e\x8a\x72\x23\x1c\x82\x15\x40\x96\x43\x9a\xb2\x80\xf6\x49\x3c\x5c\x66\x10\xb2\x51\x12\x1f\x2c\xf3\x71\xc1\x59\xf3\x42\x92\xc4\x09\xb0\xce\x05\x94\xc6\x6c\xb9\x1f\x44\xd1\x72\xb0\x2c\xe8\xba\x1c\xa4\xcb\x81\xb1\x6b\xb5\xe0\x14\x4a\x66\x27\x7a\x00\x6a\xcc\xd9\xf1\xf1\x5c\x73\xa6\xc6\xda\x79\x9c\xc4\x2c\x66\x47\x63\x92\xe7\xec\x79\x5b\xda\x65\x45\xf7\x6b\xe4\x28\x05\x85\xf2\x85\x9d\x5f\x56\xca\x28\x48\xcb\x6e\xc7\xf0\x56\x2e\x17\xf2\x15\xb3\xed\x92\xd2\x4b\x35\x0a\x71\x40\x78\x2d\x53\x65\x52\x1a\xaa\x41\xa7\x50\xd2\xd2\x4b\xf1\xd5\x93\x6c\x44\x12\x7f\xd6\xea\x52\x5d\x34\x19\x86\x54\x0d\x19\xde\x4e\x40\xa4\xa8\x35\x22\x5a\xe2\x77\xc8\x92\xa0\xcf\xce\x4b\xc1\x79\x41\xb0\x38\xa0\x48\xa6\xcd\xb8\x26\xd7\x51\xaa\x93\x96\x2f\x1c\x8e\x85\xe9\xe6\x32\x8b\x97\x79\x4d\xfe\xf2\x1f\x58\x36\x71\x86\x93\x28\xe2\xd5\xd9\xd6\x1f\x2c\x1f\x84\x6c\x14\x52\x1e\x4e\xf9\xe7\xce\x84\x2d\xef\xc6\x6c\xf9\x0f\xcc\xdd\xa5\x3f\x70\x96\xcf\x87\x83\xe5\xa3\x78\xb2\x3c\x8c\x93\x5d\xc2\x78\x61\x7f\x20\x07\xda\xb2\x12\xe6\xb3\xc5\x74\x2c\x63\xfb\x29\x9a\x90\x8e\xe2\x49\x34\xf8\x4c\x12\x8c\x1f\x97\x8e\x9a\x1f\x95\x43\x10\x24\x88\x40\xce\xdd\x18\xb8\xc8\x4c\xa4\x10\x24\x5c\x34\x4c\xa7\x68\x1c\x24\xa9\xbc\xc8\x95\x27\x1f\xe7\x52\xde\x62\xe2\x88\xf8\x01\x4f\xa0\x67\x25\xb2\x24\x45\xa5\x1a\x53\x54\x03\x89\x06\x84\x45\xab\x10\x45\xd6\xff\x94\x96\xd0\x75\x8c\x71\xa8\xc4\xa0\xbe\x60\x12\x76\xdd\x9e\x4e\xe6\x67\xc9\x62\x9d\x4c\xd8\xbe\x76\xbd\x9e\xfa\xee\x00\x8a\xe3\xae\xdb\x43\x09\xb6\xfe\xa7\x65\x87\x5d\xaf\x07\x7d\xc0\x44\x12\x64\xa2\x44\xf0\x92\xb8\x80\xa0\x2e\x84\xf0\x12\x72\xb5\x30\x51\x2f\xa2\x38\x90\x19\x02\x3e\xc5\x5a\xfa\xbe\x1a\x9f\x52\x68\xa5\xc2\xab\x66\x4e\x14\xa4\xd2\xb0\xfd\xc9\x21\xb0\x72\xf7\xd8\x2c\xe4\x4a\x82\x16\x02\xed\x04\x31\xcc\x9c\x34\x0a\xfb\x04\x78\x9e\xb6\x1e\xa6\x18\xe4\xc8\xe1\x5b\x10\x66\x88\x2a\x23\xd6\x04\xe5\xed\xa5\xc5\x78\xb6\x8c\xbc\x37\xbd\x7c\x3d\xeb\x08\xae\x28\x69\xfe\xf2\x09\x1a\x8b\x89\xc0\x67\x6a\x2a\x94\x9f\xe0\x3a\x1f\x62\x3e\x9d\x42\x24\x01\x93\xe3\x33\x21\x1b\xc5\x13\x61\x9e\xeb\xa7\x88\x57\xe4\x27\x28\x89\x63\xe6\x4f\x90\x1a\x4e\x17\x09\x1b\xc5\xb2\x2a\x4b\x05\x59\xb6\x44\xf1\xb2\x70\x88\xe0\xc8\x59\x61\x78\x04\x28\xe4\x3c\x14\x4d\x12\xe1\x32\x6f\xc0\x4b\x4d\xa5\x0e\x51\xa6\x57\x70\xb9\x7f\x25\x96\x65\x94\x5f\xc8\x3a\x61\x3a\xb5\x79\xbf\x33\xdb\xf2\xad\x29\x5a\xc4\xed\xf3\xca\xe3\x8a\x37\x3d\x49\x9d\x01\x4a\x72\xca\x8a\x1e\x09\x52\x32\x78\x5a\xcd\x55\x78\xc5\xbd\x6f\xb5\x26\xd1\x82\x98\xc6\xc9\x9e\x20\xc9\xb9\xa0\x3f\x22\x7c\xec\xd1\x6c\xec\xa9\x44\x33\x64\xc3\x65\x81\xc7\xc7\x67\xc9\xca\xd7\x5a\xc3\x70\x57\x63\x56\x1e\xcb\xf9\x95\xff\x5a\x1a\xc7\x01\x19\x27\xa4\x1f\x30\x32\x78\xaa\xa8\x54\x60\x4e\x34\xd3\x82\x12\x05\x6c\xb9\xac\x91\x62\xd5\x06\x16\xc4\xe0\x99\x70\xae\xe6\x4c\x35\xbf\xcd\x49\x6e\xa5\x87\x19\xd9\x24\xae\x92\x61\xe6\xcc\xf1\xa7\x11\x3a\x6a\x94\x58\x66\x6e\xc4\x98\xf3\x3d\x9f\x5e\x47\x61\xda\xa5\x3d\x31\x62\x15\x0c\x18\x84\xe2\x62\x2f\xc6\x89\x09\x77\xf2\x73\x89\x48\x91\x4c\xd1\xd5\x72\x2a\x68\x9b\xfe\x9c\x60\x31\x4b\x15\x75\x7d\xc2\xeb\x58\x23\x12\x8d\x49\xc2\x65\x0a\xeb\xba\xbd\x0e\xff\xc3\xb9\xd7\x66\x5c\x26\x99\x35\xf1\xd5\xd5\x5d\x64\xd5\x2c\xe8\x9b\xf8\xc2\x48\x1b\x04\xe9\x88\x24\x9c\x62\xc5\x6c\x2f\x38\x3c\xdf\xaa\x05\xa1\x4f\x72\x23\x70\x61\x67\xcd\xf0\x44\xae\xb3\xe6\x63\x30\x57\x21\x2d\x38\x45\xe3\x78\x20\x86\xc4\x13\x71\x7c\x6d\x32\xe6\x92\x43\x32\xc8\xcc\xd8\x55\x93\xad\x53\x22\x62\x74\xbf\xe4\x25\x2c\x73\x78\xd7\x54\x2a\x80\x62\x9a\x35\xe8\x73\x99\x34\x7d\x61\x75\x15\x59\x16\x84\x88\xd8\xd6\xaa\x5c\x2c\x59\xb6\xcc\x95\xe1\x94\x4d\xe9\x8b\xd8\xe7\x04\xa5\xf9\x04\x31\x53\x98\x55\x17\x11\x00\x30\x44\x72\xf4\x31\xf7\xb9\xd3\xc7\xe9\xe5\xc9\xce\x20\x9c\x57\x46\x3e\x1a\x4e\xe1\x10\x30\x1b\x5b\xb9\xeb\xd4\x56\xfe\x8a\xb9\x98\xa9\x39\x79\x8e\x8f\xf3\x74\x5c\x75\x18\x49\x19\x20\x65\x1d\x63\x6e\x92\x9c\xa5\x9d\x6a\x68\x5c\xa0\xbb\x21\x2d\x1f\x09\x25\x35\xd8\xd6\x2a\x11\x19\x2c\x81\x7e\xd9\xc2\x6a\x14\xa4\x7c\xa4\x15\x84\x4a\xa9\x2a\xc6\x32\x24\x9e\x8e\x27\x8c\x5c\x0c\xc6\x67\x45\x83\x0b\x0e\xdb\x5a\x4d\x78\xb6\xf4\x64\x54\x28\x3c\x8b\x56\x68\xc6\x3a\x57\x9f\x14\x52\x57\x14\x7b\x2f\xea\xf6\x82\x6c\x21\xa6\x04\x29\x83\x58\xa5\x02\xf4\x62\xfd\xca\x85\x8b\x4f\x3d\xf1\xf0\x95\x0b\x97\xbb\xa5\x8d\xe9\x41\xc4\xa6\x68\x2f\x08\xe9\x02\xf6\x0f\x87\xc0\xe2\xd1\x92\x25\xca\xfa\x3d\xb7\x0a\x90\xb3\xea\x2a\xd7\x57\xe5\xd8\xd2\x17\x82\xca\xcb\x2e\xcb\x59\x94\x20\x40\x16\x04\x55\xa1\x25\xd5\x4f\xb5\xba\x72\xea\xf8\x58\x38\x26\x4d\x92\xae\xac\xcd\xb6\x64\x22\xab\x27\xe8\x78\x4a\x1a\x49\x40\xd3\x40\xc9\xf0\x4f\x05\x8c\x91\x84\xa6\xfe\xcc\x4d\xf6\x39\x6d\xa2\x5b\x18\x2d\x19\x9d\x50\x21\x7c\x5e\x1c\x28\x25\xa3\xd0\x6f\x32\x6c\x8e\xe4\xbd\x29\x74\x12\x12\x0c\x9e\xa4\xd1\x11\x80\xa8\xb8\x7a\x99\x11\xbc\x7a\xdf\x22\xbb\x52\x0f\xac\x45\x6d\x13\x77\xea\x8d\x86\xee\xa2\x18\x53\xbd\x31\x11\x6e\xc5\xd9\xd5\xef\x00\xd3\x6e\xd8\x73\xf8\xb2\x53\x2f\x2e\xf9\xa0\x09\x2a\x15\x10\xc8\x6a\xfa\xa3\x38\x4e\x49\x6e\x49\x15\x20\x02\x21\x0a\x2a\x95\x85\x23\x2b\x90\x1a\x73\x00\x91\x56\x53\xaf\x46\xf1\xae\x44\x90\xaf\x50\x50\x00\x51\xb6\xed\x35\x9d\xa2\xd9\x3a\x4a\x67\x9c\xc2\x44\xc9\x57\x53\x49\xda\x8f\x13\xbd\xc4\x23\x2b\x42\x99\x5f\x88\x13\x5f\x16\x9d\x24\x0a\x4a\x17\xe5\x0f\xef\xed\x84\xbb\x93\x78\x92\x2e\xcb\x4c\xcb\x82\xd3\xe4\xa2\x8f\x2f\xee\x02\x3a\xd0\x2b\x34\xb9\xa6\x39\xa1\xfa\x6c\x41\x75\x8a\x50\xd2\xd2\xc2\xec\x3d\x64\x5a\xc0\x6a\x0d\x74\x3f\xf7\xc2\x6a\xaf\x0a\x1f\x5a\x45\xd6\xea\xd5\x87\xbc\x99\x75\x61\x59\x91\x09\xec\x24\xfa\xee\x34\x8a\x44\x27\xc8\xa7\xee\xe4\xad\xea\x33\x68\x63\x85\x2a\x66\x16\xd8\x0c\xad\xb8\x70\x8a\xb2\x0e\xf6\x67\x37\x77\xc2\xa1\xba\xa0\x79\xe1\xd2\xb3\xce\x13\x4f\x7e\xf2\xea\xc5\x27\xcf\x3f\xf3\xc4\x85\xab\x4f\x5f\xb8\xfc\xe4\x13\xcf\x5e\x78\xfa\xf8\x98\x39\x7c\x45\x22\xe2\x74\xa0\x16\xcd\xd9\x22\xb3\x63\x75\xef\x7e\xef\x46\xcf\xf2\xad\xee\x72\xcf\x5a\x4a\x72\x1a\x88\xd6\xc2\xda\x6e\xc7\x72\x2c\x9f\x77\xe2\xc3\x49\x12\x1c\x81\xb6\x5b\x9b\x4b\x05\x9d\x17\xe3\x90\x02\xcb\xb1\x20\xa2\xc7\xc7\x40\x8d\xa6\x39\xc2\x08\xa5\xb0\x1f\xd3\x34\x8e\x48\xa5\xa2\x00\x27\xa4\xc3\xb8\xf8\x05\x42\x94\xd5\x81\x12\x24\xd6\x48\xd7\x68\x7c\x40\x1f\x8d\x93\x8f\xba\xf7\x38\xbb\x1c\x90\x43\x99\x2d\x18\xca\xac\x1b\xf6\x90\x5a\x59\xb0\x24\xa0\x29\x9f\xa4\xae\xc4\x66\x4b\xf8\xd1\x49\x14\x51\xd1\xa5\x28\x80\x4b\x62\x17\xac\x9b\xf6\x30\xef\x40\x33\x18\xd1\x49\x19\xcb\x35\xc1\xb9\x75\x28\x99\x0a\x8f\x1e\x7c\x5e\x40\x21\x16\xb3\x83\xc0\x5a\x6f\x7a\x26\x50\x6c\x94\xea\xcf\x50\x0c\x1d\xb1\x03\x50\xa9\x04\x72\x35\x2e\xda\x57\xd3\xbb\x08\x95\x8a\xd1\xb4\x13\x05\xd8\x66\x87\x41\x8f\x2b\xa9\x6d\xab\x35\x79\x6c\xeb\x84\xbc\xa9\x72\xe9\x4d\x4b\xe7\x30\x31\x7d\x69\x0e\x97\x7b\x01\x1a\xb1\x14\xe6\x2a\xd6\x57\xa5\x3b\xc5\x8a\x74\x30\x34\x43\xac\x54\x91\x28\x19\x66\x66\xe7\x4b\xba\x5b\x12\x7f\x56\xdc\x6c\xb0\xf1\xba\x55\xd7\xcb\xa9\xce\x30\x02\x62\xd3\x29\x5c\x0a\x9d\x84\xc4\x63\x22\x57\xc4\xe0\x7a\xc9\x9a\x76\xf6\x84\x20\x5c\x7c\x9c\x52\xba\x9d\xfb\x9f\xef\x63\xe7\x7a\x3f\x21\x05\xc5\xca\xec\x15\x94\xac\xf5\x88\xda\x18\xec\x68\x00\x30\xbe\x3c\x9a\x9e\x70\x90\x58\xbe\x21\xfd\x9f\xd7\x50\xd9\xf7\x04\xab\xb2\x64\x6b\xc5\x49\x10\xcc\xdc\x53\x5c\xe5\xa8\x61\xc1\x0f\x03\x12\x11\x46\x74\x18\x22\xa5\x4d\x1b\xc7\x34\x0d\xf7\xc9\xaa\x5c\x81\xa6\xab\x7b\x64\x10\x06\x1f\x53\xa3\xd4\x6e\xe0\xfc\xee\xf1\xdc\xbe\xb7\x90\xc0\x4e\x98\x4a\x49\x3c\x33\xff\x5d\x16\x8e\xf0\x9c\x90\x91\x24\x60\x71\xb2\x1c\xea\xed\xe7\x5c\xc2\x32\x59\xd3\xed\x21\xb1\x53\x13\xe2\x15\x0f\xc5\x7a\x37\x80\x25\x47\x99\x2f\x0e\x94\x62\xd2\x9d\x29\xbf\x07\xe0\xe6\x0a\x48\x30\x08\x70\xea\x50\x72\xc8\x00\x84\xce\x20\xa6\x44\x3a\xfc\x10\xf7\xfc\x03\x47\xb4\x12\xa2\x15\x76\x7c\xac\x95\xa5\x15\x8c\x19\xdc\xe4\x55\xc2\xcd\x69\x5f\x9c\xee\x4d\xe0\xf5\x90\xa3\x10\xe3\xc9\x74\x18\xd2\x20\x8a\x8e\xae\x73\x04\x56\x92\x4a\x85\xab\xfe\x1c\xf7\x0c\x02\xd0\x24\x0a\xb9\xa4\x93\x6a\x46\x6c\x0e\x66\xe8\x54\x34\x6f\xa9\x54\xfd\x50\x2f\xcc\x2e\x73\x9d\x6e\x6f\x2c\xf6\x89\x07\x24\x65\xc9\xa4\xcf\x26\x09\x59\xa6\x31\xad\x89\x16\xee\x44\xd9\x11\x83\x05\xa7\x53\x00\x97\xe6\x7c\x14\x0a\xde\x30\x3b\xe9\xb3\x7b\x64\x92\x2b\xb9\x68\x5c\x3a\xe3\xe9\x9f\xd4\x3e\x05\xa7\x41\x27\xa6\x0a\x3e\x37\x0a\xe8\x2e\x19\x58\xf9\x43\x7a\xae\xc0\x28\x1d\x1b\xc0\x29\x9c\x22\x91\x52\x29\xdf\x21\x15\xfc\x97\x92\x64\x9f\x4b\x53\x3e\xe3\x8a\x94\x65\xdb\xfb\x80\x20\x0f\x76\xdd\xde\x52\xc1\x11\x55\xb6\x8d\x2a\xca\x75\x2c\x9b\xc2\x05\x27\xc7\x7a\xa0\xa8\x27\xad\xc3\x97\xf9\x68\xc9\xc2\x3f\x94\x97\x27\xde\x3a\xf9\x78\xb4\xf2\xb9\xa1\x66\x7d\x60\xed\x24\x24\xb8\x36\x8e\x43\xb1\x7c\xbf\x2e\xfb\x87\x85\x5c\xba\xad\x78\x53\xf8\xa1\xfc\xb5\x18\xbc\x85\xcb\x16\xdd\xc3\xd7\x69\xce\x33\x5b\xd6\x9c\x5a\x01\x81\x2c\xaf\xcf\x4e\x94\x22\x5c\xee\x48\x0f\x63\xb5\x8f\x53\x90\x94\x4b\x47\x35\x0b\xa8\x07\xc4\x38\xa1\x4e\xc4\x55\xb1\x4d\x89\xc8\x43\x67\x68\xd8\x03\xb5\x7e\x58\x92\x4c\x5a\x32\x4d\x49\x59\x54\xa9\x28\xef\x9f\xb3\x11\x46\x48\x75\xca\x36\xf3\xd4\x4c\x37\x2d\x5d\x9a\x57\x2a\x27\x54\x47\x1c\xae\xa5\x0a\x61\x11\x27\x18\x63\x13\xbe\xa2\xe1\xec\x70\xae\xa3\x71\xf3\x4d\x85\x73\x12\xe4\xb2\xa4\xb5\x16\x21\x4a\xa5\xdf\x27\x94\x91\x01\xba\x7e\x75\x2f\xee\x5f\x23\x03\x35\xaa\x99\x78\x5f\x7e\x17\xa9\xd0\x47\x0c\x23\xfa\xd6\x80\xa4\xd7\x58\x3c\xb6\x90\xee\xe3\xd3\x16\xe1\xcb\xfa\xfc\x3d\x13\x3b\xaa\x58\x0b\x76\xba\x73\x81\x59\x5d\x16\xec\xf9\xdd\x1e\x17\x04\x11\x1f\x9f\x94\x24\xa9\x7f\x7d\xaa\xea\x55\xf0\x4b\x51\x5e\x0a\x86\x43\x60\x49\x6f\x34\x16\xc6\x18\x58\x99\xbb\x41\x43\xdd\x83\x90\x0e\xe2\x83\x4e\x2e\xca\xa7\x40\x06\x42\x58\xa9\x48\x48\xda\x81\x5c\xe4\x4c\xa6\x27\xb3\xb9\x88\xa5\x39\x6b\x17\xae\xde\x2f\x14\xcb\x88\xe1\xcc\xcd\xcd\x93\x07\x94\x24\x82\x1e\x10\x95\x05\xaa\xc5\x4c\x41\x04\xf9\x62\x9f\x08\xc2\x25\x56\xa9\x14\x4e\x7a\xa1\x33\x8c\x93\x0b\x41\x7f\x94\x91\xde\x1c\x97\x5a\x61\xba\xf8\x28\x48\x39\xd6\x99\x1b\x21\x09\x9a\xf5\x10\xa8\xba\xda\xe9\xf6\x0a\x13\x43\x7e\x55\x29\xa7\x13\x99\xce\xca\x9c\xce\x50\xb8\x5d\xf3\xa6\x50\x37\x73\xae\x2e\x3a\x5b\x57\x72\x52\x05\x09\xe4\x45\x11\x6d\xa6\x83\x58\x97\xf6\xc4\x8c\x24\x5a\x25\x56\x5d\xb3\xec\xf8\x21\x70\xdf\x0b\xc6\xa0\xcc\x8a\x85\xf7\x7a\x6d\xe1\x7e\x3f\x81\x53\xbd\x32\x5d\xb6\x38\xd3\xea\x27\xec\x2f\xe6\xe6\xd5\xb9\x63\x2d\x95\x66\x76\xf6\xbd\xce\x1b\xa5\x0b\x10\x63\x34\x9f\x53\x62\x90\x4c\xa8\x13\xd3\x3e\x91\x93\xa7\x9c\xf5\x4b\xaa\x84\x6a\xc4\x2c\x5c\xfa\x09\x77\x4d\x25\x63\xb3\xb0\xb9\x2a\x49\xf4\x52\x64\x41\xc0\xf8\x2a\x36\xaf\xdf\x53\x19\x1b\xa6\xe7\xb9\x6e\x13\x1f\xf1\xcc\x7c\x5d\xee\xa4\x19\x5d\x93\xd4\xe1\x8b\x48\xbe\xf4\x71\x14\xa5\x3b\x74\x96\xf0\x99\xe5\x0b\x81\xfe\x5c\x6c\x42\xf6\xe2\x7d\x62\x12\x20\xea\x14\x08\x04\x20\x9c\x2e\x65\xb8\x1a\x91\x61\xc1\x2e\xe9\xe1\x50\x1a\xd6\x3c\xa1\x42\x2b\x95\xc2\x67\xa1\xbb\x0d\x75\x81\x34\xae\x42\xbc\x67\x51\xc8\x99\xaf\x4c\x2d\x61\xe4\x90\xd5\xf6\x48\x90\x4e\x12\x92\x64\x13\x5a\x21\xf8\xe3\x9f\x82\x95\x22\x2d\x95\xfb\x52\x79\x3f\xa7\x32\x9e\x51\x4f\xec\x07\x74\x3f\x48\xf1\x20\xee\x8b\x60\xb5\xe4\xb9\x10\x09\x5f\xba\xc0\x92\xd1\xfa\x90\xb2\xcf\x0e\x71\x2e\x17\xef\x8a\x73\x31\xe5\xb4\x00\x56\x7d\x60\xc1\x29\x3a\x08\x07\x6c\x54\xb2\x98\x9e\x73\x68\xe6\x95\x3a\x34\xf3\x7a\x9d\xfc\x87\x38\xa7\xce\x2d\xb8\x81\xc6\xc2\x19\xc6\x94\x61\x96\xa1\xe5\xa8\xbe\xb8\xc2\x71\x21\xd0\x11\x78\x4c\x51\x14\x52\x92\x96\x0e\x8d\x39\x84\xea\xa5\x08\xd5\xf3\x08\xd5\x15\x42\x74\x0e\x13\x9a\xb9\x53\x4b\xcc\x49\xe4\xea\x0b\x74\x95\x0f\x26\xb3\xd3\x21\xdd\x66\x26\xc6\x02\x2d\xdb\x19\x4a\x94\xf5\x99\x65\xf1\xda\xb3\x6d\xa8\x14\x07\xfa\x58\x73\xd9\x82\xca\xcd\x9e\xbb\x19\x6d\x69\xb4\x6b\x5e\xde\x6f\x5b\x29\x35\xd2\x6e\xd4\xb3\x79\x76\x49\x94\x4d\x30\xb1\x71\x1f\x6e\x73\x72\x86\xb6\x8d\x26\xb8\x0f\xa7\xd2\x53\xdb\xc2\xec\xf9\xac\xc3\x7c\xd6\x61\x66\xc2\x16\x4e\xd1\x30\x64\x3c\xcb\xe5\xe2\xc9\xe7\x03\xa1\x39\x52\x82\x4a\xe0\x21\x9c\x79\x6a\x6b\x3f\xdd\x07\x6a\xd6\x58\x7d\x61\x60\xaf\xe6\x57\x21\xc2\xd5\xe3\x30\x8a\xe3\x04\x88\x3d\xd3\x47\xa3\x38\x60\x20\x84\x55\xb6\xca\x87\x7c\x7e\x29\xc6\xe6\x47\x7f\x32\x61\xa3\x9a\x5e\xb8\xeb\x5f\xe9\xcd\x7b\x4e\x97\x2d\x26\x96\x5b\x19\x32\xac\x1f\xd3\x7d\x92\xb0\xb3\x9b\xad\xe6\x0f\x13\x5c\xc4\x59\x4a\xf1\x0c\xdd\x4a\x36\xa9\x6d\x43\x2e\xd4\x3d\xae\x04\x15\xcc\x88\x08\x9f\x30\xcd\x42\xbe\x4b\x0d\x11\x48\x97\x18\x86\xf9\x50\x46\xac\x01\x1d\x08\xaf\x93\xa5\xab\x56\xd9\x64\x40\x4b\xa4\x67\x29\xfd\xc8\x4b\x93\x20\xfa\x08\x3e\x7b\x97\x49\xd7\xed\x61\x8c\xc9\x87\xb4\xc8\x15\xf5\x17\x96\x68\x65\xcd\x61\x67\x6d\xce\x2e\xfb\xf8\x26\x80\x5d\x86\xe9\xef\xf7\x74\xfe\x7b\xec\xe9\x14\xec\xce\x33\x93\x46\x40\x50\x5d\x4c\x03\x5d\xb7\x87\x62\x9c\x74\x3d\x33\x2c\x29\xd7\xed\xfb\xe4\xd2\x84\x73\x57\xa5\x02\x2c\x2a\x20\x6b\x45\x2f\x67\x42\x2e\x69\xb1\x8c\x07\x21\x84\x68\x2e\x45\x5c\xa9\x80\x58\xa7\x88\x21\x84\x28\xdc\x8e\xa7\x0f\x68\xa0\xee\xb2\xb3\x6e\xba\x7c\x28\xd6\x26\xbf\xe7\xed\xdf\xf3\xf6\x7d\xf2\x36\x7e\x60\xcc\x1d\xa6\xb5\x80\xf3\xd2\x87\x9a\x88\xb2\x73\x42\x57\xf8\x90\x55\xd3\x33\xdb\xa2\x9b\x2c\x37\x3d\xab\x4d\x54\xcd\xb4\x5d\x66\xa6\xe7\x15\x4f\x11\x6a\xc5\xfd\x70\xae\xa1\x45\x91\x0f\x6e\x12\x0b\xd3\x1a\xe7\x89\x8f\xeb\xb0\xe5\xf7\xe3\xfc\xbf\xc7\x38\x3f\x99\x9b\xce\xbc\xe9\x1f\xa6\x17\x38\x33\x89\xc1\x78\x1f\x0c\x78\x1f\x7a\xe1\x87\x1a\x33\x17\x84\xe2\xf7\xfb\x49\xe7\xbf\x09\x33\x96\xbd\xb0\xa1\xa6\x9c\x04\x53\x3e\xe5\x84\x98\xe6\xa6\x1c\xc3\x7b\xbc\x9b\x41\x82\x42\xf8\xa0\xe6\x8a\xe8\x63\x54\xf1\xa3\xdf\xab\xf8\xff\x2d\x39\xf2\xbf\x52\x0d\xda\x7a\x60\x5a\x50\xf4\x71\xaa\xf8\xd1\xef\x55\xfc\xdf\xf3\xf6\x7d\xf3\xf6\x83\x53\xf1\x69\xcc\xee\x4b\xa9\x58\xb8\xd9\xb4\xf2\xe1\x37\x9b\x68\xcc\xc4\x7c\x24\x9b\xf0\xe0\x14\x76\xf9\x66\xe0\x7f\xf9\x26\xa4\x7b\xe2\x26\xe4\x47\x5c\xe5\xd0\x98\x3d\xb8\x5d\xc7\xb8\xd4\xd5\xc0\xff\xb7\xe8\xf5\x60\x37\x6d\xe3\xe4\xc1\x51\xef\xf0\x3f\x81\x7c\x4a\xfe\xcd\x50\xc7\xed\xc1\x95\x79\x9a\x79\xbd\x0f\x65\xa2\x73\xf8\x20\x68\x52\xd6\xcc\xff\x54\x63\x4c\x75\xc1\xa6\x52\x29\x3c\x4d\x17\xa6\x57\x38\x4a\x47\xd2\xd4\xdd\xda\x89\xe3\x88\x04\xf9\xbb\x77\xe6\x6a\xcf\xac\xc2\xac\x27\xdc\x8e\xbb\x82\x71\xa1\x4c\xfd\x1e\x8f\xbf\xb2\x52\x30\x6e\x0c\xf7\x8f\x6a\xfd\x78\x40\xf6\x42\x3e\xef\xe4\x1f\x96\x2c\xc6\x7c\xfc\x74\xd1\x6e\x35\x14\x02\xe6\x3c\x94\x05\xbb\xf2\xce\x2c\x23\x87\x2c\x48\x48\x60\x21\x8e\xd6\x45\x81\xd6\x22\xeb\xb6\x41\x38\x78\x9c\xa6\x24\x61\xea\x00\xf4\xc3\xb8\xdd\xc8\x6a\xc9\x9d\xad\x67\x81\x16\x74\x86\x49\xbc\x77\x85\x1c\xb2\x87\x13\x12\xe4\xcc\x66\x88\xac\xf3\xf1\x81\x95\xb7\xe1\x53\xa1\x16\x54\x81\x29\x61\x93\xf1\x39\x53\x9c\x38\x1c\x7f\x2c\xa0\x83\x88\x24\xc0\xea\x0b\xa3\x00\x0b\x65\x36\x03\x69\x7f\x44\x38\xf9\x9e\xe5\xb4\x7b\x66\x3c\x08\x18\x19\x3c\x2c\x9a\x04\xa7\xbc\xb9\x4f\x13\x3a\xc8\xdf\xd6\x3f\x73\x3b\x27\xa2\xac\x0c\x11\x65\x5e\x07\x16\x44\x8b\xfa\x01\x9c\xa2\x30\x7d\x36\x4c\xc3\x9d\x88\x9c\x0f\x07\xd2\x86\x41\x75\x46\xbc\xc3\xfb\x81\xb7\xc2\x24\x29\x98\x74\x48\xbc\x0e\x02\x1d\xc9\x15\x2d\x43\xa5\x2c\x0b\xd4\xa3\x22\x99\x50\xd3\xfa\x27\x69\x9f\x00\x2b\x11\x6d\xcd\x53\x87\xc5\xbb\xbb\x11\x11\x59\xc3\x28\x64\x47\x7c\xe4\x2f\xa6\xd8\xcc\xa1\xe6\x42\x3b\x8d\x94\xd0\xc1\x7c\x6e\x24\x7c\x2c\x28\x3a\x20\xf1\xd2\x25\x3a\xa1\x33\xe7\xee\x69\x48\x7d\x2c\xab\x74\x27\xa4\x03\xf1\x7a\xe9\xd2\x2c\xdf\x39\x22\x93\xbe\xfd\x1c\xf3\xf1\x7a\x10\x46\x91\xb2\xdf\x50\xac\xad\xc8\x30\x47\xe0\x7c\x31\xc3\xa1\x28\x67\x2a\x30\x2d\x6b\x53\x9e\x6f\xf4\xe4\x47\xe6\xce\x79\x11\xc3\x5a\xc2\x20\x8a\xdd\x4d\xba\x45\xc4\x7c\xc8\xba\xb4\x97\x3b\xf7\xa5\xbd\x25\x43\x3e\x59\x7c\x9e\xff\xba\xd6\x7e\xae\x7a\xab\xa7\x3d\x5a\xcd\xdc\xb7\x9b\x5b\x43\xcc\x6c\xd5\xaa\x70\x7d\x2b\x60\x93\x6d\x65\x9b\xb7\xb6\x0d\x69\x97\xf5\x30\xe9\xb2\x4c\xc7\xd5\x6a\xb7\x2c\x98\x0f\x5d\x40\xe0\x14\x30\x08\xe1\x14\xcd\xf2\x4f\xb9\x71\xd8\x1c\x8b\x2e\x95\xf0\x32\xd1\x46\x05\xb9\x60\x4c\x10\xd1\xd7\xa2\x72\xfd\x92\x90\x61\x42\xd2\x91\x78\xe1\xab\x7c\x18\xce\x70\xea\x5c\x09\xbb\x44\xbd\x25\x08\x08\x9f\x5c\x59\x49\x25\x69\x96\x44\xb0\xea\x82\xf1\x7e\x52\x8b\xcd\x53\x6f\x4b\xa4\x68\xd4\x46\x4a\x8c\xda\x34\x9a\xe5\xf5\x00\x86\xc4\xee\xf9\x54\x70\x6d\x09\x3a\x82\x37\x4f\x42\x46\x70\x0f\x47\x45\xcb\x8d\x19\x7a\xa8\x81\x59\x4e\x09\x19\x49\x8e\x8f\x2d\x69\xe4\x32\x3b\x98\x3e\xda\x3c\xe1\xb0\xd8\x4c\x07\x79\xd1\x5f\x98\x34\x26\x54\x1b\x32\x3f\xae\xd6\x6d\xe5\x53\x07\xd4\x97\x12\x66\x6b\x29\x5a\x37\xcd\x4c\xe0\xc6\xb0\x89\x87\xd5\xe6\xe7\x6e\x64\xe5\xe6\xf4\x07\xeb\x96\xec\x14\x43\xd6\x0f\x6b\xd8\x74\x55\x2f\x6f\xd3\xb2\xdb\x1c\x53\x94\x9f\x84\xf3\xc3\x85\x16\x8d\x07\xe7\x88\x4e\x32\x3d\xb4\x38\x91\x53\x3e\x1c\x75\xa5\x8f\xc6\xc9\x62\x4f\x0d\x06\xb3\x2e\xe9\x4d\xd1\x6c\x0d\x27\xb8\xe2\x28\xe4\xc4\x0c\xb1\x29\x4a\xc3\x5d\x1a\x44\x33\x0d\xc8\x6c\x91\xe6\x44\x71\xa8\x24\x60\xb2\x5d\xef\x24\xb5\xba\xef\x42\x14\xe3\xfa\x66\xbc\x95\x08\x7b\xa4\xb0\x1b\xd7\xea\x79\xa1\x1c\xf7\x96\xb2\xf6\xca\xca\x34\xd5\x75\x30\xea\x12\x44\xff\xab\xe5\x71\x28\xe4\xf1\xfc\x20\x29\xf4\x42\x61\x64\x14\x7a\xa1\x30\x36\xf6\x62\xde\xf6\x32\x27\x5b\x2a\x26\x0a\x77\xee\xc3\x05\x9d\xbc\x63\x99\x51\x31\x4c\x2f\x8a\x62\xe4\x9d\xd7\xf9\xe0\xec\x8e\x29\x71\xc2\xf4\x11\x32\x8c\x13\x02\x28\xec\xd4\x3c\x9f\x07\x5c\x0e\xf6\xc4\xa7\xeb\x7b\x4b\x73\x1e\x90\x1e\xd6\x1d\xb7\x3c\x4e\xe2\xfd\x70\x20\x5d\x21\xfd\x2f\xae\x9f\x07\x09\xf9\x5f\xcb\x81\xd8\x04\x62\xcb\xb2\x21\xcb\xd2\x9a\x3a\xb5\x3e\xc4\x5a\x2a\x43\x3c\xf3\x21\xa5\xaa\xc1\x34\x17\x5b\x16\x96\xcb\x11\xc5\x94\xcc\xef\x0d\x16\x57\x7b\x4a\xe4\xe7\x0c\xb5\x8c\x51\xf6\x5c\xa7\xf1\xae\xf9\xd8\xd7\x1c\x29\x89\x86\x8e\xac\x70\x0a\x91\xb2\x2f\x77\x0e\xc8\xce\x38\xe8\x5f\xfb\xc3\x34\xa6\xe3\xab\x62\xdd\x78\x35\x98\xb0\xf8\x6a\xb8\xc7\x71\xb9\x8a\xcf\x96\xec\xf8\xb8\xdb\x83\x72\x7f\xb1\xdb\xad\xf7\x50\x77\x56\x0f\x2c\x34\x42\x8e\x72\xce\x00\xe7\x03\x46\x50\x68\xc0\x8c\x05\x63\x99\x11\x05\x39\x5f\x68\x69\x76\x71\x6f\x99\x00\x66\x72\x01\x9b\xf1\x75\x86\x79\x51\x55\x1a\xce\xe1\x14\xa5\x4e\x9f\x84\xb9\x17\x7e\x69\x2e\x3b\xcd\xb2\xd3\x9a\xc7\xf3\x03\x8a\x3c\x88\x38\x97\x22\x3a\x45\xa9\x93\xc4\x13\x5a\xf6\x0e\x6b\x2a\x35\x42\x59\x78\xee\x22\x33\xa9\xb1\x2d\x5a\x23\x1d\xe6\x8b\xec\xf1\xfc\xc3\xc5\x99\x5c\x04\x24\x87\x3d\xd1\x9e\x64\x68\xc7\xf3\x73\x96\x7f\x14\x42\x44\x04\x26\x7c\xc1\x91\x6b\x46\xe1\x01\x64\xdc\x15\x46\x98\x06\x21\x61\x64\x28\xcb\x0b\x8b\xe5\x85\x10\xad\x00\xba\x95\x54\x2a\xe1\xb6\x9b\x3d\x03\xbb\x34\x88\xaf\x07\xea\xd5\xda\x1c\x56\x54\xd1\x24\x94\x34\x99\x1e\x8c\xc2\x88\x80\x78\x8b\x56\x2a\x74\x2b\x31\xad\x0e\x38\x82\xf2\x7d\xe0\x32\x42\xc7\x05\x5d\x89\x4b\x94\x6d\xcc\x20\x97\xa6\x9b\x04\x30\x88\x56\x78\xf8\x26\xe4\xcb\x59\x76\x25\xdc\x23\x80\xd5\x3c\x3e\xcf\x65\x54\x93\x2f\xd1\x93\x6d\x4c\x60\x38\x04\xc9\x96\x2b\x73\xdb\x76\xb2\x85\xdd\x4d\xf9\xc1\x57\xfd\x35\x4f\x94\x46\xe0\x26\xdc\x14\x7e\xb3\x44\x4c\xad\x96\x6c\x17\x92\xe5\x52\xf1\x15\x02\xad\x54\x40\x2a\xdf\xa9\xce\xd9\x8f\xa3\x38\x73\x25\x67\x30\xb3\x19\x44\x61\xf6\x15\x73\xba\x24\xfc\x4f\x08\x51\xbe\xd7\xc4\x19\x1e\x5f\x7c\x38\x64\x9f\xe4\xdd\xfa\xe5\x76\x67\x71\x2e\x03\x81\x28\x4c\x1f\xe5\x0a\x03\x11\xc2\x95\x6c\xbb\x1d\xb2\xed\x75\x34\x59\x41\xd0\x99\xbf\xb9\xba\x1c\x00\x06\x3f\x41\x30\x76\xa7\x25\xf7\x5a\x97\x55\x93\xb8\x44\x52\xa9\xa0\x2f\x9d\x6a\xf1\xb5\xe2\x54\xda\xef\xc6\xf9\x7b\x31\xd3\x99\x99\x81\x64\x2d\x25\x36\x83\xb3\xd1\x9a\x91\x6b\x64\x0a\x97\x82\x8f\xd8\xd2\x22\x93\x64\xbc\x90\xcb\xca\x56\x09\xac\x92\x3c\x1a\x42\xac\xb0\x5c\xef\xd8\xb4\x24\x81\x92\xcc\xb4\xc6\xe0\x2a\x99\x42\x3f\x90\x44\x50\x97\xb7\x03\x34\xc1\x20\x90\xe3\x0b\xb5\x49\x13\xa2\x08\xb7\xdd\xe6\x3a\x69\xa1\x7e\x9e\x3c\x24\x4f\x0f\x52\x13\x6b\xe2\x8b\x61\x14\x85\x29\xe9\xc7\x74\x90\x8a\x45\xcd\x09\xf4\xf3\x48\xa3\xba\x88\x86\x80\xd5\x08\x5c\xf5\x48\x63\x5a\xe6\xc8\x58\x54\xf5\xcc\x95\x73\x97\x75\x45\x53\x88\x86\xb8\x8f\x46\x18\xf4\x15\xde\xf7\x85\x67\x8d\xa3\x22\xc2\x2f\x9f\x0d\x75\x56\x9d\x9c\x88\xf8\x64\x31\xda\x17\x43\x3a\x61\x44\xe0\x0c\xd1\x18\x8f\xd0\x00\x83\xd1\x03\x42\xba\x56\xac\xa1\x04\xc9\x42\x2b\x1a\x6d\xd2\x3a\xa5\x07\x78\x92\xc5\x6d\x79\x2c\x9e\x24\xaa\x25\x7b\x78\x80\x8e\x30\x18\x2c\x6e\x89\x4c\xec\x22\xf1\xaf\x1c\x31\x21\x63\x45\xc9\x02\x82\x0b\x87\x18\x47\xae\x06\x18\x4f\xc9\x1b\xf3\x72\x4c\x89\x7c\x12\x5f\xd3\x60\x36\x94\xd3\x62\x75\xbd\xdd\x3c\xa9\x35\xb2\x4e\x79\x09\x6a\x1f\x1f\x65\xd3\xee\x6e\x2e\x65\xc9\xa8\x14\xf9\x58\xae\x04\xfd\x71\x04\xa0\xbd\x56\x23\xf0\x13\x6b\x5c\xc7\xfa\x90\x24\x58\x3b\xb1\x87\xee\x9f\x08\xd1\x14\x4e\x8f\x64\x2f\x89\xf1\xbe\x83\x77\x81\x0b\xd1\x55\xbc\x0b\x3c\x88\x0e\xf0\x2e\xa8\x43\x74\x01\xef\x82\x06\x44\x87\x78\x17\x34\x21\xba\x8c\x77\x41\x0b\xa2\x27\xf1\x2e\x68\x43\xf4\x30\x06\x3b\xaa\x97\xaf\xaa\xdf\x03\xf5\x7b\x41\xfd\x1e\xaa\xdf\xcb\xea\xf7\xc9\xc5\x5c\x21\x5a\xc9\x35\x8c\x33\xd2\xe7\x62\x4c\xd9\x48\x12\x48\x82\x8b\x99\x64\x99\xe5\x52\xd5\x0a\x59\xbc\x7a\x55\x12\xee\xd1\x49\x14\x3d\x4f\x82\x44\x27\xc8\xbe\xe1\x09\x43\x58\x96\xc2\xf9\xe4\x1a\x7e\x18\x5d\xc4\xe0\xe1\xc5\x0d\x94\x89\x5d\x74\x1f\x6d\x34\x48\xcc\xa0\x74\x4a\x4b\x17\xb7\x65\x71\x53\x72\x69\x20\x5c\xba\xb8\x78\xca\xca\xa6\xa8\xe2\xdc\xa5\x26\xac\x92\x61\x61\x8a\xce\x4f\x58\xc5\x3a\xe5\xf4\x25\xc7\x46\x8e\x4e\x27\x8f\x95\x6c\x8a\x33\x05\xcd\x14\x2b\xe7\x3c\x98\x9b\xd4\xae\xe0\x8b\xe8\x1c\x06\x17\x17\x77\x53\x6e\x36\x59\xd8\x2f\x0f\x40\xfa\x3f\x73\xe5\x5c\x61\x02\x78\x1a\x9f\x43\x4f\x61\x70\xee\x44\xc4\x74\x8e\x13\x58\xe6\x81\x89\xf4\x67\xae\x9c\xcb\x49\xf5\x4b\xf8\x29\xf4\x22\x06\x4f\x9d\x88\xde\x19\x38\xfa\x99\x2b\xe7\x32\xc1\xa6\x3f\x4e\x16\xef\xa7\x8a\x6b\x53\x8c\x94\xd8\x8f\xe3\x17\x33\x89\x7d\xfe\x64\x89\xad\xb3\xb2\x62\x39\xb9\xef\x39\xd1\xfd\x91\xda\x79\xb2\x0c\x97\x32\xf9\xc5\x9c\x4c\x7e\x02\x9f\xe7\x32\xf9\x51\x7c\x9e\x8b\xc6\x97\xf1\x79\x2e\x93\x1f\xc3\xe7\xb9\x4c\x7e\x04\x9f\xe7\x32\xf9\x19\x7c\x9e\xcb\xe4\x97\xf0\x79\x2e\x93\x3f\x83\xc1\x13\xaa\x8f\x1e\x55\xbf\x2f\xab\xdf\xc7\xd4\xef\x23\xea\xf7\x19\xf5\xfb\xd2\x89\x7d\x5a\x10\xcb\x67\x6e\x7b\x4e\x38\x9b\xaf\xd3\xa4\x56\x96\xb0\x36\x9b\xd1\x48\xe9\x67\xae\x9c\x9b\x15\x6e\x85\xa0\x13\x04\x5c\x56\x1c\x67\x92\x67\xf1\x67\xd0\xf3\x18\x7c\xe6\xe4\xe1\x36\x23\xb1\xcf\xdc\xfc\xa2\xdc\x2e\x60\x78\x3a\x11\x4e\x6c\xe0\x89\xed\x2b\xca\xf0\xe7\x1f\xa4\x0c\xcf\x97\x3e\x2b\xc6\x0b\x35\xe7\x25\x79\x91\x84\xa7\x8e\x9e\x4c\x9e\xe7\x4b\x9c\xaf\x62\x5e\xaa\x7f\x12\x3f\xbf\xf4\xbc\xea\x4a\xea\x0c\x00\x43\x56\xbf\xec\xea\x78\x3a\x85\x3a\x9e\x9e\x12\xbf\x5b\x16\x3f\xcc\xe2\x93\x53\xe2\x07\x65\xf1\xe3\x2c\x7e\xa7\x2c\x7e\x2f\x8b\x0f\xca\xe2\xf7\xb3\xf8\x17\xcb\xe2\x77\xb2\xf8\xd1\x29\xf1\xa4\x2c\xfe\x6a\x16\x1f\x96\xc5\x1f\x66\xf1\xc3\xb2\xf8\x6b\x59\xfc\xb5\xb2\xf8\x2b\x59\x7c\x5c\x16\xff\x74\x16\xbf\x57\x16\x7f\x29\x8b\x8f\xca\xe2\x1f\xcf\xe2\x27\x65\xf1\x4f\x64\xf1\xe9\x29\xf1\xe3\xb2\xf8\x47\xb3\x78\x56\x16\xff\x48\x16\xff\x52\x59\xfc\xb3\x59\xfc\x7e\x59\xfc\x27\xa7\x33\xc2\x61\xc1\xde\xe0\x6c\x92\x9c\xcf\x7f\x9c\xdb\x89\xc5\x14\xd1\x82\x47\x12\x92\x7b\x4a\x28\xcc\x1b\x54\x16\x4f\x53\x72\xc5\xe5\xee\x40\x8b\xb7\x06\x20\xed\x26\x3d\xcc\xba\x49\x6e\xf3\x3e\xb7\x2b\x09\xaf\xab\xcd\x13\xeb\x85\x17\xd2\x2a\xe8\xda\xb5\x5e\xe7\x85\x17\x06\x36\xe4\x9f\x16\x4a\x67\xc2\xab\x2f\xbc\xe0\x88\x78\xd0\xf1\xbb\xe4\x42\x2f\x4b\xdf\x51\x39\x26\xf7\x91\xe3\x13\x32\x4b\x84\x57\x3f\xf7\x3f\x40\xd7\xad\x6d\x04\xb5\x61\xef\x7a\x63\x0a\x1f\x5a\x45\xfd\x62\x60\x5b\x04\x0e\x71\xe1\xd9\x98\x64\x77\xe7\x85\x17\x80\x65\x77\x03\x14\xa0\xa0\x67\x5b\x2f\xbc\x00\x1f\xb2\x20\x1a\x2d\x48\x36\x41\x13\x34\xc9\x92\x8d\xe7\x92\x05\xb9\xe2\x50\x9a\xa5\x1c\x2c\x4a\x29\x4a\xcc\xa7\xdc\x2b\xa6\x1c\xa5\x91\x4c\x98\x16\xab\x3e\x9a\x4b\x16\xe4\xd2\xe5\x0b\xdc\xc7\xd7\x83\x28\xec\x93\x9d\x68\x42\x7c\xaf\xb5\xb6\x51\x6f\xac\x37\x50\x40\x59\xf8\xd2\x84\x1c\x8c\x42\x46\x7c\xaf\xdd\x6c\x36\x1b\x6b\x2d\x14\xbc\x34\x09\xfc\x76\xab\xd5\x90\xe0\x5e\x90\x84\x94\xf8\xeb\x8d\xf5\xf5\x56\xbb\x89\x82\x97\x27\x89\x2c\xa2\xe9\xad\xb5\xd0\x0e\x09\x77\x79\x5e\xcf\xdb\xa8\xb7\x5d\xb4\x13\xa6\x2f\xf1\x1a\xda\x6b\x6b\x6e\xbd\xd9\x44\x3b\x51\xd0\xbf\xe6\xbb\xfc\x97\xf6\x47\x64\x10\x44\x7b\x31\x1d\x88\xf8\xba\xdb\x6c\x21\x81\x4f\xbd\x25\x81\xfd\x30\x8e\x08\xf3\x37\xdc\x56\xab\xee\xd6\xd1\x4e\x12\x1f\x50\xdf\x73\xd7\xeb\xcd\x7a\xa3\x89\x76\x26\x49\x74\x74\x10\xc7\x03\xdf\x6b\xb6\x36\xda\xf5\x86\x87\xfa\xc1\x80\x30\x51\x44\xbb\xde\x6e\xb7\xea\xeb\xa8\x3f\x0a\x12\x96\x90\x49\x2a\x11\x6e\xb4\xea\xa8\x3f\x8a\xfb\xb1\x70\x21\xec\x35\xd6\xd6\x37\x9a\x6b\x2e\xea\xc7\x49\x10\x71\x24\x9a\xcd\xfa\x5a\x9d\x7f\xd2\x61\x14\x1f\x90\x44\x96\xd5\xda\xf0\x36\xd6\x3d\x11\x9c\x86\xd1\x35\x81\x6d\xab\xb1\xbe\x8e\xfa\x49\xb8\x97\xc6\xd4\xf7\x9a\xcd\x7a\xc3\x73\x5d\xd4\x3f\x0a\xa8\x22\xd5\x20\x48\xae\x49\xea\x36\x36\xc4\x87\x88\x6b\xb4\xd6\xea\x0d\xf1\xb9\x1b\x47\x03\x42\x13\x8e\x7e\xdd\xdd\xa8\x6f\xa8\x54\xbb\x49\x70\xe4\x7b\x9e\xe7\x6d\xb8\xde\x9a\x0a\x21\x84\xfa\xf5\x56\xdb\x75\xf5\xf7\x4c\x8a\x6b\xa3\xe0\x5a\xe8\x7b\xf5\x66\xa3\x51\x6f\xc9\x62\xf6\x82\x5d\x42\x59\xe0\x6f\x78\xee\x46\xbb\x29\x6b\x8c\xa3\x70\x9f\xc8\xd2\x5a\xad\x8d\xb5\x8d\x0d\x99\x34\x16\xf3\xa5\x68\xfd\x5a\xab\xee\xaa\xb0\xfe\x28\x1c\xf8\x9e\xeb\x36\x5d\xd7\xab\x8b\xb0\x84\x0c\x44\x71\x2d\xb7\x29\xbe\x53\xd1\x77\xbe\xd7\x6a\xb8\xeb\x4d\x4f\xe6\x4b\x49\x20\x2b\xd8\x68\x7a\x1b\x1b\x9e\xac\x40\x78\xb4\x14\xa4\x68\xae\x35\x9a\x8d\xe6\x5a\x16\x2a\x5a\xcb\x29\xd7\xdc\x68\xe5\x43\x49\x31\x94\x4d\x92\x97\x26\x71\x98\x12\xbf\x55\xdf\x68\xca\x30\xcd\x1c\xed\x8d\x8d\x16\xa7\x1d\x21\xe3\x71\x48\x45\xe7\x78\xed\x0d\x5e\x09\x21\xe3\xf4\xda\x91\xac\x78\xc3\x6b\x79\x68\x10\xee\x89\x0a\xdb\x1b\xee\x7a\xbd\xdd\x92\xdf\x24\xf7\x1d\x0f\x76\x55\x9f\xd7\x5d\xb7\xe1\x6d\x6c\xa0\x61\x98\x90\x9d\x24\xec\x5f\xf3\x3d\x4e\x20\xaf\xd9\x46\xc3\x88\x73\x8b\x1e\x23\x6b\x6b\xad\x8d\xba\x8b\x86\x71\x42\x52\xa6\xba\xaa\xde\x6e\xac\x37\xeb\x68\x38\xe9\x8f\xd2\x30\x10\x18\x79\x1b\x8d\x16\xda\x0d\x42\x9a\xee\xc4\x49\xcc\x19\x66\xad\xd9\x6c\xbb\x68\x77\x14\xa7\x4c\x97\xd5\xf0\xda\xed\x35\x0f\x71\xce\xe0\x99\xda\xed\xb5\xba\x8b\x72\x7c\xd2\x6c\xd4\x37\x3c\x1e\xc4\x1b\xb1\xde\xac\x7b\xbc\x2b\x64\x9d\x8d\xfa\x5a\x7b\x5d\xc2\x47\x24\x8a\xe2\x03\xdf\xf3\x9a\x6e\xc3\x6d\xb5\x90\x68\xa2\x4e\x3d\x8a\x29\x39\x1a\x90\x03\x35\x60\xdb\x2e\x1a\xc5\x4c\xd3\xad\xb1\xbe\xd6\x74\x51\x48\x07\x61\x40\x79\x6f\x7b\x8d\x66\x6b\xbd\x55\x6f\x8a\xa0\xdd\x58\x50\xb1\xd1\x70\x51\xb8\x1f\x27\x47\xa2\xed\x6b\x75\xd7\x45\x8a\xfd\x5a\x6b\xeb\x6b\xed\xb6\x8b\xa2\x60\x5f\xda\x9d\x79\x2d\xaf\x51\xe7\x9c\xa1\x43\x76\xa2\x49\x3a\x12\xf9\x1a\x8d\x76\x0b\x45\xc1\x01\x95\xd8\xaf\x7b\x1b\xee\xc6\x5a\x1b\x45\x64\x2f\xa6\xfd\x51\x38\x1c\x72\xc6\xe2\xb4\x5d\x5f\x6f\xa1\x28\xdc\x1d\xc9\x51\xed\x79\x8d\x8d\x46\xbd\xd5\x94\x41\x6a\xd4\xb6\xd6\xda\x5e\xab\xd1\x56\x61\x7c\x90\x79\xcd\xb5\x66\xab\xb5\xb1\x21\x83\x0c\x01\x35\x61\xda\xcd\xe6\x7a\x9d\xa3\x25\x62\xc5\x78\x6b\xac\xaf\xd7\x1b\xf5\x86\x0e\x92\x1c\xbc\xb1\x5e\x6f\xb5\x4d\xd0\x6c\x2a\x4d\xb4\xd6\x7a\xb3\xad\x70\xd4\x23\xa2\xbd\xd6\xaa\xaf\xb5\xeb\x2a\x50\x0f\x89\xba\xd7\xac\xaf\x6f\xa8\x6a\x35\x63\xae\x6f\xb8\x6e\xa3\xa9\x6a\xc9\x86\xc4\xda\x7a\xa3\xb1\xd6\x6a\x14\x82\xc9\x6c\x30\x23\x24\x52\x64\x69\xad\xf3\xa1\x25\xc3\x4d\x33\xd7\xd6\xd6\xbc\x75\x1e\xb8\xc7\x65\x58\x7d\xdd\x15\xa0\xe2\x97\x46\x7d\x83\x77\x65\x14\x52\x42\x05\x49\x5a\xed\x35\x17\x69\xb1\x61\x58\x76\x2f\x48\xe2\x98\x0a\xd9\xd9\x76\xd7\x85\xfb\xc0\xc9\x5e\x6e\x16\x68\xaf\x35\xd6\x1a\xf5\xba\x8a\x50\x43\xa7\xa5\x3e\xb5\x14\xa9\xd7\x3d\xce\xd9\x2a\x74\x3c\x49\xc6\x11\xf1\x37\xda\xed\x7a\x7b\xbd\xa1\x02\x0d\x95\x1a\x1b\x6b\xeb\xee\x86\x4e\x9b\x89\x8e\x75\x77\x7d\x6d\x6d\xc3\xd5\xe1\xe3\x24\xa4\xbb\x32\x47\xbb\xe9\xb5\x9a\x2a\x3c\x13\x14\xcd\xb5\xb5\x7a\xc3\xd5\xe9\xa5\xb0\x90\x3c\xed\x36\xd7\xbc\xb5\x06\xda\x0b\x07\x34\x63\xac\x76\xb3\xb9\xe1\xd5\xd1\x5e\x48\x19\x57\x7e\xf6\xf8\x0c\x56\xf7\xd6\x5b\x2e\xda\x0b\x53\x76\x94\xc4\xa9\x9e\xc4\x78\xd6\xb8\xdf\x0f\xd2\x90\xaa\x90\xfa\x06\xa2\xc1\x7e\xf0\x62\x6c\x64\x42\x7b\xbd\xbd\xde\xe2\x81\x47\xbe\x57\x5f\x47\x71\x34\x88\x82\x3e\x8f\x69\x37\x1b\xad\x16\x0f\x08\xf7\x89\x18\x93\x8d\xb5\xb6\xfc\x1a\x24\xc1\x8e\xbf\xe6\x36\xd7\xd7\x1a\x1b\x28\x13\xc9\xad\x06\x97\x2e\xf2\x5b\xa0\xdf\x5e\xab\x6f\x34\x9a\x4d\xa4\x69\xdb\x6c\x78\x2d\xde\xf5\xe3\x20\x22\x39\x51\xd1\x6a\xb7\xd6\xbc\x86\x2b\x83\x05\x99\x3c\xd7\xad\xb7\xd6\xd7\x65\x50\x46\x27\xcf\x6b\xd5\x37\x36\xda\x6d\x11\x9c\x23\x53\xb3\xb1\xee\xd5\xdd\x06\x1a\x07\xe3\xe0\x28\x38\x18\x85\x63\x39\x70\xdd\xb5\x35\x34\x26\x41\x7f\x34\x9e\x0c\x87\xa2\xad\x6b\xed\xb5\x06\x1a\x93\x64\xc2\xe5\x45\x7b\x7d\x63\xc3\x43\x7a\x6c\xb4\x3d\xb7\xd1\x42\xe3\x68\xb2\xc7\xe7\xe8\x7a\xb3\xdd\x58\x43\xe3\xf8\x60\xa0\x84\xac\xe7\xf1\x99\xd5\x73\x91\x62\x09\xce\x65\x6b\x8d\x36\x4a\xc8\x0e\xe9\xf7\x03\x15\xda\x6e\x6f\xac\xad\xaf\x7b\x48\x35\xdf\xf3\xda\xeb\x2e\x4a\xe2\xf4\x48\xe9\x03\xf5\x46\x6b\xad\xe5\x6d\xa0\x24\x3e\x0a\xe4\x78\x68\xd6\xd7\xdb\x7c\x9a\x48\x83\xc1\x20\x22\x32\xd9\x86\x57\x5f\xf3\xd6\xd7\x90\x19\xa3\x4d\xaf\xbd\xbe\x5e\x47\x69\x40\x07\xba\xa4\xb6\xdb\xa8\xaf\xb7\x9b\x28\x63\x46\xb7\xe5\x36\xea\x6b\x3c\x20\x1d\x91\x48\xa8\x08\x6b\xcd\x76\x63\x1d\xa5\x21\xa1\x34\xf0\x3d\xb7\xe5\xb6\xd7\x36\xd6\x50\x1a\x0a\xa7\xbf\x5e\xbd\xdd\xa8\x73\xa9\x51\x18\xdf\x0d\x0f\x65\x8c\xdc\xde\x58\x73\xdd\xb6\x0a\x91\x83\xbd\xb1\x56\xdf\x68\x36\x51\x6e\x9c\xeb\x10\xaa\x06\x72\x6b\xa3\xe1\xa2\x02\xd3\xb7\x9a\xee\x1a\xca\x44\x40\xb3\x5d\x77\x37\xd6\x5d\xc4\xb8\xf8\x6b\xf0\xc1\xc2\x3f\x48\x10\xf9\x8d\xfa\xfa\x46\x5b\x98\x4d\xb1\x88\xf8\x5e\xb3\xee\x36\xd7\xd7\xd7\x11\x8b\xf7\x02\x16\x0b\xa9\xbf\xe6\x6e\xb4\x50\x6e\xe4\xd4\x5b\xde\x7a\xab\x8d\xd4\x04\xeb\xb5\xda\x0d\xcf\x5d\x6f\xa3\x83\x11\x09\x98\xd0\xec\x1a\xbc\x45\xd9\x04\xb8\x56\xf7\x5a\xf2\x33\xdd\x8b\xaf\x69\xe5\x6f\xbd\x85\x72\x92\xa8\xbd\xd1\x76\xd5\xb7\x66\x47\xaf\xd9\x72\xd7\x9a\xd3\x99\x53\x15\x61\x3c\x60\x6c\x05\x30\x20\xb6\x65\x41\x87\x25\xe1\x1e\x80\x0e\x8b\x9f\xe0\x5a\xd9\xb9\x20\x25\x00\x22\xc0\x70\xe4\x90\x43\xd2\x07\x04\xc2\x0e\xd7\x7c\x0f\x01\x60\x58\x78\x02\x7a\x9c\x32\xf1\x8c\x0b\xf2\xda\x10\x6e\x6f\xaf\x57\xbc\xd6\x31\xdb\xde\x6e\x56\xea\x4d\x17\x09\xc0\x6b\x1d\xd7\x9b\x6e\x85\x21\xe0\xb5\x2a\x0c\x6e\x6d\x35\x8f\x39\x80\x3c\xf1\xd8\x55\x3f\x2b\x78\x07\xcc\x97\xc8\x93\x0c\x67\xeb\x16\xb1\xac\x5b\xe7\x7f\x1a\x3d\x55\xd0\x68\x36\x55\xbd\xd5\xaa\xf2\x94\xab\x5c\x5f\x94\x1f\xf5\xfc\x47\x43\x7e\xc8\xdc\xe3\x2c\xf7\xd5\xd9\xf2\x59\xb7\x29\x1f\xe6\x1a\xe4\x13\x9d\xb1\x78\x93\x79\x2f\xcb\xfc\x64\x56\x83\x4a\x53\xc0\xe5\xe8\x0c\x29\x65\xb1\xfb\xce\x28\x48\x9f\x3c\xa0\x99\xe1\x0d\xa7\xe2\x7e\x97\xf4\xa0\x6f\x09\x1f\xe7\xe3\x20\xd1\xaf\xa9\x28\xb2\x5c\x0a\x2e\x21\xfd\xdf\x55\x7b\x3a\x86\x33\x76\x72\x7b\x56\x32\x39\xd9\xde\xf6\xda\x15\xbe\x50\x20\xbc\x77\x39\x50\x6f\xb5\x2a\x04\x79\x30\xcb\x76\x55\x59\xc7\x24\x99\x99\xc2\x16\x76\x2b\x15\x40\x30\xc3\x14\x5f\x0a\x2e\x41\xa4\x8a\x53\xe9\xb2\xbc\x07\x33\xcf\xeb\x99\x47\x04\xe3\xe3\x63\x40\x30\xe7\x55\x88\x34\xf2\x80\x60\xe2\x24\xbb\x3b\x00\x42\x27\x41\xc4\xd9\x45\xc4\xd9\x41\xc4\x89\xc7\x41\x3f\x64\x47\x50\xb8\xc5\x3f\xcc\x0a\xbf\x30\x87\x98\x87\xf1\x9c\x3d\x5f\xe7\x40\x38\xd3\xcb\x21\xa8\x5e\x52\xea\x78\x7e\x1e\xd5\x0c\x7d\x69\x3f\x99\x60\x5b\x3d\x79\xb1\x8b\x6d\x26\xa1\x1d\x6c\x53\x65\x32\x2e\x71\xc2\x76\x92\x95\x70\x39\x77\x43\x47\xef\x05\xee\x05\x87\xc0\x95\x16\x1b\x7b\x21\xe5\x7c\x25\x3f\x84\xbd\x0f\x20\xf0\xf8\xd8\x85\x10\x6e\x79\xed\x8e\xe5\x5a\xbe\x65\x41\x9b\x38\x4c\xbd\x38\x06\xbc\x76\x0e\xbf\x27\x4b\xbb\xa1\x63\x3a\xc1\xa7\x5b\xd8\x3d\x3e\xa6\xdb\xd8\x13\x81\x3c\x88\xe9\x8e\x32\x9d\x74\xad\xa4\x93\x1e\x3e\x1b\x1d\x67\xcc\x16\x0b\xdd\x79\x0d\xe6\xf8\xea\x1a\x20\xce\x08\x11\x27\x45\xc4\x89\x72\xfd\xb7\x34\x9b\x2b\xcf\x04\x2b\xa4\x50\xc4\x5c\xda\x6b\xb3\xcf\xf9\x15\xb8\x65\x95\x13\x96\x62\xe2\xec\x0a\x28\xc1\xc4\xd9\x11\x50\x88\x0d\xed\x65\x13\x51\x90\x75\x8c\x0a\x49\x39\x79\xd0\x04\x07\xb5\x10\x45\x18\x04\x76\x08\x57\xeb\x5a\x78\x4e\x3a\x20\xc5\x8c\xd3\xa3\x03\x68\x2d\x81\xab\x13\xbb\x5d\x05\x74\x2b\x81\x3e\x95\xa1\x49\x8d\xf1\xd0\xba\x0f\x58\x8d\x72\xa8\x89\x26\xab\x38\xda\x72\x5a\x9d\xc0\x0e\xfd\x7a\x8d\x97\x9b\x56\x71\xdb\x85\xfe\x04\x47\xdb\x6e\xa5\x12\x6d\x79\x1d\xd7\x4f\x55\x8f\xa4\x68\x82\xf2\x74\x9a\x6a\x86\xbd\x76\x22\xc3\x5e\x9b\x61\xd8\x91\x61\xd8\xd4\x30\x6c\x74\x22\xc3\x5e\xd4\x3b\x5e\xaa\xad\x5c\xb6\x01\xb2\xd5\x76\x3b\xcc\x16\x56\x2c\x55\xb2\xda\x76\x7d\xb2\xe5\xad\xbb\x1d\xea\x93\xad\x7a\x33\x8b\x02\xf5\xa6\x5b\x23\x90\x27\x60\x70\x9a\x80\x18\xed\xa2\xeb\x83\x30\x1d\x47\xc1\x91\x78\x1e\x79\x7e\x43\x4e\x8e\x2b\xde\x65\x4e\x2e\x21\x80\x53\x34\x22\x87\x27\xa7\x1f\x91\x43\x20\x6e\x13\xcc\x3e\xc6\x57\x92\xd8\xb6\xac\xe9\x14\xa2\x04\x1c\xa2\x0b\x28\x04\x31\xba\xbe\x93\x70\x1d\x95\x94\x1a\x1c\x13\x65\xbf\x46\x3a\xde\xaa\xb3\x26\x4d\xd8\xc6\xf1\x01\xe0\x5f\x88\x68\xd1\x26\x4b\xaf\x6a\x89\xa0\x81\x1d\x0d\x98\xbe\x13\xab\xea\xd3\x6a\xca\xd7\xf3\xe1\x6a\x49\x76\x77\x16\xd0\x60\x8a\x4e\xee\x04\x77\x4b\x3d\xf1\xa4\xec\xf8\x93\x2d\xcc\x65\x7e\x45\x87\xef\xaa\xf0\xdd\x99\xf0\x1d\x15\xbe\x33\x13\xae\x70\x52\xb1\xea\x6b\x0b\x7b\x0b\x3a\xd5\xfa\x1f\x96\x7d\x59\x35\x14\x6a\x68\xd7\x40\x3b\x0b\x3a\x39\x77\x57\x41\x55\xa1\x06\x28\x10\x3e\xfe\x08\x0e\xd3\x4b\xc1\x25\x3e\x45\x2a\x2b\xc4\x19\xc1\xeb\x21\x02\x21\xec\x58\x9c\x41\x2c\x9f\xff\x04\xc0\x82\xf6\x19\x64\xb4\x42\x55\x08\x6a\xdb\x42\xcb\xd6\x99\x33\xed\x7e\x98\x4c\x3b\x2a\x93\x68\x17\xe9\x58\xd0\xf2\x45\x7e\x62\x5b\xd0\x82\xd3\x29\xe4\x8c\x7d\x0d\x3d\xfc\x60\x18\xfb\x9a\xac\x74\xa4\xe4\x86\x12\x1a\x0f\x92\xa9\xcf\x5a\xc3\x0c\x43\xe7\xfa\x7b\xf4\x89\x46\xdb\xb5\x1b\x6d\xb7\xaa\x8a\xda\x72\x21\x62\xa6\xc3\x8f\x8f\x25\x24\xcb\x87\x1d\xd7\x57\x35\xe9\x67\x71\xc4\x43\x2e\x80\x72\x79\x4c\x7d\xaf\x46\x61\x95\xa1\x10\xd7\xab\xb4\x96\x2c\x15\xb4\xa1\x8b\x80\x6c\x63\x2e\xe2\x48\xad\xde\x74\x7d\x62\x7b\x75\x17\x85\x7c\x86\xe0\x82\x52\x03\x5b\x5e\xdd\xed\x10\x5b\xa4\xa8\x99\x14\xb3\xf4\x3a\x69\x08\x02\x3d\x74\x52\x35\x68\xd2\x2d\xec\xcd\x34\x03\x66\x03\x2c\x52\xa9\xa2\x2d\xec\x9d\x61\xd8\x4d\x21\xd4\xb6\x19\xbc\x37\x9e\x7a\x7c\xd5\x5b\x77\xd1\x39\xec\xad\xbb\xab\x2a\x04\x3d\x8d\x9d\x8d\x76\xb3\x5e\x47\x4f\x61\x0f\x5d\xc2\xce\x7a\xbd\x55\xf7\xd0\x8b\xb8\xb9\x5a\xdf\x40\x8f\xe3\x36\xff\x39\x8f\x1b\xd5\xc7\xab\x8f\xa3\x27\xf0\xe3\xfc\x37\x5b\x60\x3c\x5a\xa6\x00\x3c\x96\x9f\xbd\x1f\x03\x72\xe2\x0f\x66\x14\xb8\xb9\x49\xfd\x79\x51\x90\xea\x49\x67\x04\xe7\x0b\x71\x91\x9b\x2f\x40\xbf\x9b\x37\xaa\x5e\x59\x9a\x4b\x2b\x5a\xd7\x8f\x53\xc0\x27\x2e\xa7\x2f\xbf\x53\x3e\xf3\xcb\xef\xdc\x0c\x5b\xc0\xe2\x50\xa8\x21\x5c\x4d\x54\x3e\xf0\x51\x82\x42\xfc\x19\x40\x9c\x04\xa2\x58\x00\xbb\x5c\x6f\xe0\xc0\x0e\x57\x17\x1e\x01\xc0\xa9\xd7\xeb\x2d\xb7\xd9\xaa\x86\xb6\xb3\xe6\xb5\xd7\xd7\xd6\xdb\xd5\xd8\x76\xdc\xb6\xdb\xf6\xda\x1b\xd5\x00\xae\x3e\x65\xac\x96\x43\xf9\x2e\x50\x2c\xd4\x05\x8a\x13\x9c\xfa\x80\x8a\x42\x9a\x8d\xb6\xbb\xd6\x5c\xe3\x85\x34\xd6\x5b\x6e\xbb\xb9\xc1\x0b\xf1\x9a\x0d\x77\xdd\x6d\xf2\x42\x9e\x86\x28\x11\x29\x5d\xb1\x67\x57\xe7\x29\xdd\x8d\x35\x8f\xd7\x1c\xf3\x9a\x9b\xde\x5a\xa3\xc1\x53\x5e\x82\x72\xbc\x3d\x06\x3c\xaf\x5d\x4d\x6b\x5e\x1b\xb5\x5c\xb7\x0a\x68\x2d\x85\xa8\xce\xa1\xb4\x96\xc0\x3c\x0d\x4c\x87\xbe\x7c\x36\xfd\xef\x51\xad\x96\x3c\x76\xa2\x5a\xf2\xd8\x8c\x5a\x12\x19\xb5\x24\x38\xa3\x1e\xfd\x48\x5e\xbc\x6c\x3f\xd1\x31\x52\x85\x20\x6f\xb5\x01\x7d\xb2\x7a\xde\x7e\x31\x4b\xfe\x4c\x21\xf9\xe3\x1d\x52\x25\x55\xe2\x9f\xaf\x02\x52\x7b\x31\x87\xd7\x4b\xb9\x64\x4a\xd1\xc1\x8e\xeb\x36\xbc\x86\xbb\xde\xf1\xea\xce\x46\xbd\x4a\x7c\xcf\x71\x5b\xad\x6a\xa1\xc2\xba\xd3\x84\x35\x1e\x9c\x2b\xeb\x33\x39\x4d\x9f\xac\xf2\xf9\x10\xf2\xc2\x9a\x6e\xb3\xd5\x21\xab\xa2\xb0\x4c\x16\x02\x62\x8b\xec\xab\xa2\x70\xc4\xcb\xcb\x4a\x7a\xf6\xa3\xeb\xde\xcf\xe7\x47\xcd\xf3\x4a\xf7\xee\x9f\xa6\x7b\x3f\x26\x98\xfe\x51\xa1\x7b\xcb\x97\xb3\x03\xf9\x90\x34\xe7\xf1\x42\x81\x62\x2d\x39\x5b\x9c\x1c\x88\xa2\x8d\x01\x0b\x68\x1d\xc8\x91\x1e\xc0\xea\xb9\xa5\x42\x6e\xb6\xc5\x55\xc6\x06\xd7\x12\xd5\x80\x7c\x29\x61\x80\x38\x41\x95\x38\x81\x4d\xb8\x6e\xc3\x07\x55\xb1\x78\xa3\x01\x3f\x7f\x22\xab\x3d\xbf\x50\x03\xee\x9f\xac\x01\x27\xe0\x31\xf4\xf2\xe9\x33\xa8\x64\x76\x59\x8c\xed\xad\x57\x81\x99\x50\x7d\xfd\x82\x7d\xa0\x18\xfa\xec\x13\x66\xbe\xd0\xda\xfd\x15\x5a\x3a\x47\x1a\xfc\xda\x70\xd5\xf3\xda\x66\x66\x94\x25\xc1\x0e\xf1\x89\x7c\x31\x2c\x58\x6d\xb9\x2e\xa2\xf9\xe8\x1d\x11\x5d\x93\xf0\x6a\xdd\x75\x8b\x13\xe2\x4b\xa0\xe1\x78\x8d\xc6\x7a\xab\xed\x55\x01\xc3\x4f\x57\x9f\x01\x0c\xc2\x9a\xe7\xb4\xbd\xf6\x7a\xbb\xbd\x56\x05\x04\x3f\x55\xe5\xe3\x0f\xd6\x9c\xe6\x86\xdb\xf6\x9a\x7c\x6d\x84\x2f\x55\x9f\x01\x14\x42\x88\x5e\x02\x35\x67\x63\x6d\x7d\xad\xbd\xde\xac\x32\xdb\x73\x36\xbc\xb6\xd7\xf4\x5a\x55\x3e\x22\x1a\x8d\x66\xab\x59\xa5\x3c\x91\xe3\xae\x79\x1b\xcd\x56\xa3\xca\x6a\x4e\xbd\xbe\xbe\xb1\xe1\x35\xab\xc4\xf6\x9c\xa6\xdb\xaa\x37\xeb\x6b\x3c\x51\x91\x12\x52\x0b\x7a\x1e\x3d\x7b\xb6\x3e\x7c\xbe\xa0\x83\xf4\xd1\x89\x3d\x7a\xd6\x3e\x2c\x2f\x74\x41\x8f\x9e\xa6\xb8\x3f\xaa\x9e\xbd\x10\xeb\x17\x33\x85\x7f\x12\xd7\x1c\xaf\xb9\xde\xf6\xd0\xa7\xb0\xe7\xac\xad\xd7\xd7\xd6\xd0\x43\xb8\xe6\xd4\x37\xea\xf5\x35\xf4\x69\x5c\x73\x36\xf8\x9c\x81\x9e\xc3\x9e\xb3\xb1\x56\xdf\x68\xa2\xcf\xe2\xe7\xaa\x9f\x46\x7f\x88\x9f\xab\x7e\x0a\x11\x82\x3f\x55\x7d\xa8\xf6\xe9\xea\x27\x73\x5e\x7b\xc8\x47\x97\x37\xb4\xb0\x52\xa7\x64\xd1\x6a\xff\xc4\x39\x96\x4f\xe2\x27\xad\xda\x01\x21\xd5\xc4\xfe\x6c\x95\xd5\xfe\xb0\x4a\xe1\x2a\x20\xc4\xfe\x6c\xed\x0f\xf9\x74\x9c\xd4\x42\x14\x60\xf0\x1c\x9f\xda\x42\x58\x7b\xa8\x1a\xc3\xd5\x4f\xa3\x14\x67\xc2\x25\xa8\x06\x76\xcc\x83\xc1\x73\xd5\xb0\x0a\xbc\x5a\x08\x21\x9a\xe0\xb4\x93\x13\x57\x01\x8a\x61\xf5\x1c\xd7\xdf\xfc\x4b\xc1\xa5\xa5\x62\x83\x26\x5b\x6e\x67\x22\x64\xd6\x04\xa5\x28\x2c\x13\x4c\x94\x9c\x28\x99\x28\xf9\xb0\x8b\xf3\x04\x50\x82\x18\x79\x30\xea\x3d\x25\x1f\xbb\x7e\x7f\xe6\x2a\x4a\x85\x57\x4e\x16\x8d\xb8\xea\xae\x40\xae\x79\xc3\xea\x15\xc4\xb0\xad\x74\xf8\x82\xd8\xca\x69\xf9\x55\xc6\x3b\x98\x71\x35\xc9\xa8\x7f\x04\xea\x6d\x1f\xae\xfc\xe5\x5e\x2f\x36\x3b\xc7\x80\xd9\xb4\x0a\x3e\x59\x4d\xec\x4f\x55\x39\x73\x64\x61\x0f\x55\x13\xfb\xd3\x33\x61\xcf\x55\x13\x58\x26\x81\x4e\xb2\x2d\xdb\x3d\xc5\xb6\xeb\xc2\x29\xb6\x6d\x0f\x9f\x62\x5b\xf6\x72\x16\x5f\x6a\x9b\xf7\xec\x29\xb6\x71\x8c\x9c\x6a\x1c\x45\x9d\x04\x30\x58\x62\x23\x95\xf1\xc6\x16\x13\x57\x6e\xb7\x19\x17\x75\xdb\x98\x75\xc4\x68\x9a\xe6\x9f\x47\x99\x3d\x8c\x10\xcb\x5a\xf3\x28\x26\x60\x98\x20\x52\x7e\x6f\x31\x01\xf2\x95\x13\x38\x85\xe8\x7a\x44\x86\xb9\x2b\xee\x62\x64\xa1\x50\xde\x94\xce\x3f\x8c\xef\xea\xdb\x8d\xd2\xaf\x1a\x33\x97\xa6\x93\xad\x70\x53\xdd\x62\xc4\x89\x1d\x6e\x6f\x6f\x7b\x4b\x04\xb0\x6e\xdc\x43\x14\x6e\xb9\x9d\x04\xc7\xb6\xe7\x87\x38\xce\xbd\x23\x2a\x06\xdf\xc7\x56\xe9\xb6\xdb\x09\x71\xec\x8b\x8a\xb3\x4a\xa7\x53\x14\xe3\x50\xbe\x2f\x1a\x3b\x02\x03\x94\xe2\xd8\xe1\xed\x47\x13\x1c\xa0\x68\xa6\x2b\xf2\x4f\x72\xf7\x33\xfb\xb2\xa2\x7f\xad\x9a\x87\x42\x4c\xa4\x7b\xba\xec\x6d\xd9\x64\xcb\xed\xb8\x7e\x02\x85\xf7\x2d\x18\x77\x69\x0f\x33\x10\x8a\x94\xb6\x4d\x7b\x66\xdc\xc4\xb9\xd3\xa5\x7e\x9e\x01\xba\x04\xb1\x9e\x7a\x19\x63\x96\x95\x04\xdb\xa0\x10\xc5\x48\x38\x0f\xd4\x97\xeb\x27\x86\x3c\x28\xca\xa1\x92\x56\x27\x12\x77\x75\x37\x55\x3c\xb6\xdf\xe7\xa3\x3a\xc6\xee\x66\xb2\x95\x6e\xda\x76\x22\xee\x55\x06\x98\x74\x93\x1e\x0a\xb1\xbb\x19\x6e\x4d\x36\x6d\x3b\x44\xb6\x1d\xc3\xa8\x1b\xf7\x30\x05\x01\x62\xdd\x30\xc3\x3c\x9a\xa2\x51\x39\xeb\xb2\x2d\xc2\x59\x97\x6d\xf3\x59\x9a\x6d\x63\xa2\x59\x77\x5c\x66\xe1\x2b\xb1\xc2\xa4\x73\x29\xb8\xe4\xdb\x64\x8a\x06\x33\xa5\x66\xcb\x46\x92\x7b\xca\x04\x05\xb8\xe6\xa1\x14\xbb\x68\x82\x5d\x71\x6f\x56\x76\x96\xbe\x54\x1a\x70\xfe\x90\x72\x8d\xe2\x31\x20\xdd\xa0\x07\xe1\xf1\x31\x98\xd8\x18\x24\x98\xaf\xdc\xf8\x24\x07\x52\x1b\x27\xab\xbc\x91\x10\x2e\x65\x97\x4d\xe7\xb2\x33\x51\x00\x12\x8f\x5b\x9f\x52\x4a\x38\x04\xf1\xb6\xa7\xa7\xf1\xc9\x2a\x88\xc5\x45\xd8\xbd\xb2\x56\xe1\x81\x74\xa6\xa8\x49\xd1\xc9\x26\x5a\x0a\x7d\x3a\x45\x47\x8b\x68\x81\xe2\x8c\x1a\x9c\x12\x79\x0a\x5c\x37\x6d\x88\x37\xa1\x0a\x5f\xc1\x80\x62\x41\x84\x4a\x85\x6e\x63\x2a\xc8\x94\xe0\x10\x53\x9d\x70\x36\x15\x48\xb6\xa9\x18\x82\x14\xa2\x70\x8b\x8a\xe1\x47\x21\x9c\x16\xa9\x34\x53\x43\x9e\x4e\xa7\x56\x54\x4c\xbc\xa0\x3e\x45\x9b\x6e\x82\xc2\xde\x14\xed\x4b\x8f\x0d\x99\xd5\x27\xda\xc5\xfb\xf2\xad\x5d\xb4\x83\xf7\x9d\xbd\x60\x8c\xae\x96\x71\xd9\xbc\x94\x26\xd3\x29\x3a\x28\xbd\xe9\x3a\x45\x17\xe6\xed\x56\x85\x8e\xc1\xd5\x0b\x8a\x41\x38\xa7\xd4\xc1\xad\x7a\x47\xc9\x5b\x71\x18\x19\x6e\x35\x3a\x9e\x6f\xd3\xdc\xbb\x3c\x42\x4e\xb8\xc7\xb3\x7b\x95\xe2\xaa\xb7\xbc\x52\x41\x21\x2c\xc8\x90\x10\x8a\xcb\xd1\x21\x97\x1f\x49\x0f\x13\x3b\xa9\xd2\x4c\x6e\xa0\xc3\x9c\x5a\xd6\x72\x21\xba\x9c\xfb\xf6\x5c\x88\x9e\xcc\x7d\xd7\x21\x7a\xf8\x14\x31\xa2\x78\x88\xeb\x4d\x80\xb7\x16\x62\x0c\x78\x83\x45\x3f\xba\x50\x4b\x25\x71\x47\x1d\x24\x98\x6d\x09\x5f\xa4\xa1\x68\x33\xe3\x2b\x23\xb9\xd6\x05\x01\x56\x87\x27\x7c\xa0\xac\x18\xfb\xfd\x40\x6f\x40\xc9\x5b\xee\xc1\xb6\xbc\xfe\xad\x8e\xf2\xe4\x0d\xfc\xd5\x00\x22\x86\x0b\x97\x85\x83\x19\x92\xe4\x92\xb3\x1a\xb1\x3d\xc8\x69\x94\x4a\x1a\xa5\x3d\x0c\x88\x9d\xc2\x6a\x90\x0d\xe5\xe2\xb5\x81\x6a\x56\x81\x2c\xa2\x7a\x42\xf9\xa4\xc6\x4a\xca\xaf\xa5\x70\xd5\x3c\xcf\x97\x54\x2a\xb1\x93\x90\x7d\x92\x88\xe3\xfe\xbc\x30\xbf\x56\x74\x9c\x25\x7b\x38\xd7\xf9\xd4\x28\x52\x12\x37\x01\x46\xf1\x2e\x48\x54\xb2\x27\x2e\x79\xc2\x3b\x4a\xb2\x9a\xa9\x9f\x2e\x0a\xb3\x9d\xaf\x6d\xec\x76\x40\xbc\x8d\x0f\x3b\x9e\xeb\xc7\xdb\xf8\x72\xa7\xc5\x7f\x9e\xec\xd4\x7d\x0f\x56\x8b\x99\xfc\x5a\xfe\xbb\x16\xc2\xd5\x85\x39\x4b\x8e\xb0\x64\x13\xa4\x86\xbf\x93\x9e\xd0\x14\x55\xfe\xa9\xcd\x92\xed\x0a\x0d\x33\x73\x54\xc2\x2a\xd6\xd8\x84\x55\x2c\x11\xe2\x0c\x56\xc5\x75\x88\xc4\x94\x12\xfa\xe1\x54\xee\xbe\x96\x8c\xda\xac\xdf\x4c\x95\xc6\xad\x8b\xae\xb9\x0e\x6d\x6f\x8a\xce\xcd\x3f\xb8\x7c\x80\x18\x3e\x42\x14\x5f\xc9\xfa\x2f\x01\x89\x8c\x15\xe3\x23\x7b\x45\x2b\xcd\x71\x4b\x20\xe7\x55\x39\x5f\x06\x7c\xbe\x84\x69\x37\xec\x61\x02\x92\x6e\xd8\x13\x9b\xd7\x42\xc5\x8b\x30\x03\x29\x44\x7d\x1c\x71\x35\x61\x88\xa3\xae\xd7\x43\x23\x4c\x41\x8a\xfa\x68\x08\x97\x8a\x5e\x6a\x46\x7c\x82\x19\xe1\x8b\xa0\x8f\x86\x68\x04\xd1\x08\x5f\x00\x59\xeb\xfa\xab\x23\x58\x1d\x89\x98\x4c\x23\x19\xe3\x91\x76\x5b\x33\xea\xba\xbd\x2d\xdc\xdf\x84\x23\x27\x1d\x85\x43\x06\x20\xaa\xd5\xc6\x22\xe5\xe6\xa8\x3b\xae\x79\xbd\xed\x21\x8f\x1c\xc7\x63\x15\xc5\x0b\x18\x28\xfb\x6d\x89\xc1\xd8\xf6\xf2\x2d\xc3\x63\xd1\x34\x30\xc0\x7b\xbc\x75\xdd\x1e\x74\x0e\x5d\x1c\x6e\xbb\x9d\x51\x37\xac\x79\x3d\xbf\x8f\x06\xce\xa1\x87\xc3\xad\x31\x0f\xe9\xf9\xc3\x39\xb2\xf4\xb7\x30\x88\x31\x27\x0e\xac\x54\xe2\x2d\x3c\xac\x54\xf6\xba\x13\x30\x42\x31\x72\xd1\x18\xf6\xa4\xd7\x8a\x24\xaf\x5f\xec\x19\xc5\x4d\xfa\x39\x2e\xbc\x0a\xa8\xa2\xe6\xd6\xd6\x80\x94\xbd\xb1\xca\x3a\xcc\xbf\x0a\xf8\x42\x06\xfa\x64\x8a\x12\x67\x10\xef\x05\x21\x2d\x63\xa3\xf9\x12\x59\x59\x89\xa4\x43\xfc\xab\xa0\x2b\xd4\x3e\xd2\xf5\x7a\x3d\x51\x36\xe3\x65\xb3\x51\x42\xd2\x51\x1c\x0d\xd2\xb3\x95\x5f\xfa\x2a\x2c\x2f\x7f\xd6\x77\x51\xe7\x2a\xd8\x75\xfa\x41\x14\xf1\x85\xbe\x7f\x95\xeb\xef\x89\x50\x12\x92\x29\x7a\x7a\x4e\xb8\x1b\x7d\x40\xea\x7b\x63\x98\x53\x59\x45\xac\x14\xee\xc2\xae\x21\xd9\xaa\x2b\xe1\x6c\x53\xe1\xf2\x14\xb9\x88\x08\x4d\x86\x6d\x63\x2f\x1f\x95\xd4\xbc\x1e\x4a\x6a\x1e\x8f\x56\xd3\x07\x06\x49\xcd\x83\x55\x86\x62\x5c\x74\x51\x12\x60\x91\x25\xee\xa1\x18\x65\x0b\xc5\xc0\x06\x32\xd8\xf6\x7a\x28\xb6\x79\x49\xb5\x00\x56\x41\x58\x8b\xe1\x74\x8a\x9e\x9a\x6b\x88\x59\x2b\xef\xa8\xc6\xa3\x31\x74\xd2\x38\x61\x5c\x91\xcf\x4d\xa1\xc2\x33\x04\xa8\x57\xc1\xd3\x80\x20\x67\xad\x05\x6b\x02\xa8\xb7\x60\x4e\x18\x1a\x9d\xa9\xe6\xad\x36\x84\xcf\xa6\x4b\x8b\x2a\x9c\x2b\xba\xe1\xb4\xaa\x7b\x80\x9c\x58\xda\x8b\x67\xd1\x5d\xcb\xb5\xb5\x58\x68\x9c\x05\x6d\x2d\x9e\xd1\xd6\xa8\x4e\x36\x9f\x26\x51\xaa\x53\x41\x3d\x9b\x2b\x92\x65\xfd\x71\x5a\xc9\xb3\x49\x75\x05\x4b\xd9\x1a\xee\xf1\xf2\xc6\x66\x4d\x0d\x71\x22\x9a\x8b\x82\x52\x15\x3d\xe6\x4b\xa3\xbc\x8a\x1e\xf7\x20\xec\xd4\x6a\xa1\x1f\xd8\x98\x2e\x15\x5b\x92\xcc\xaa\xe3\x1a\xb9\x5c\x0e\xe1\xb0\x5c\xf3\xd9\x6a\x38\x45\xe7\x4b\x31\x9c\xe9\x8c\xcc\xf3\xce\x2c\x7a\xe1\x3c\x7a\xc7\xc7\xca\xc3\x0e\x85\x4b\xf3\xa4\x2e\x47\x30\x9f\x47\x5f\x1f\x03\x81\xe1\x61\xa7\x05\xa7\xe8\x89\x82\xb0\x30\x4e\xca\x50\x09\xf3\x70\x6a\xea\x1a\x03\x5b\xb0\x80\x8a\x96\xab\xbc\xc2\x04\xb5\x59\xab\x85\xc6\x6f\x0e\xe3\x8b\x16\xc2\x85\xac\x9e\x2d\x6a\x35\x26\x62\x69\xb7\x56\x0b\x7a\x38\x29\xb8\x3a\x43\x8f\xfe\xd7\x70\x73\xb6\x10\xf8\x98\xb8\x39\xab\x20\xc7\xcd\x2f\xcf\x34\x36\x5b\xed\x9b\x55\x75\x92\x23\x2d\x85\x9b\xb4\x56\xdb\x84\x09\x5f\xda\x93\x2e\xeb\xd2\x5e\x2f\x57\xda\x63\x33\xa5\x09\xd5\x3a\x93\xbf\x8a\x11\xd5\x42\xd6\x15\x4f\x00\x04\xbd\xdc\x2a\x5d\x6e\x3a\x24\x50\xb4\x84\x6e\x42\xc0\xb8\xaa\xcd\xdb\x90\xc2\x2d\xf7\xf8\xd8\x5d\xc1\x5c\xa9\x40\xe2\x34\x1b\xa4\x38\x44\x01\x8e\x4d\x73\xb8\x22\x2e\x63\x3b\x81\x2f\xdf\x1c\x98\x4e\xd1\x23\x73\xa2\xce\xac\x4e\x04\x2a\x7a\xc2\xe8\x68\x3c\x7d\x0a\x6b\x80\xa9\x4d\x4a\xd6\x71\x7d\x9b\xc1\x4d\xbe\xe2\x93\x92\x3e\x09\xe8\x20\xde\x03\xb0\x1a\xd7\x6a\xc7\x62\x4b\xa4\x1b\xdb\x8c\x4f\x88\xfc\x87\x33\x9a\xfc\xe2\x3f\xd8\xd8\x03\x90\x29\x7a\xe6\x74\xc1\x51\xf3\x38\x6d\x4a\x46\x65\xc8\x25\x01\x5f\xa6\x10\xa9\x4c\x80\xd8\xc6\x33\x63\xd1\x24\xe1\xbd\x2e\xf4\x30\xb9\xc0\x94\x29\xb3\x05\xd4\x4b\x78\x66\x2b\x7e\x05\x64\x9c\x9d\x5b\xae\x64\x2e\x03\x6b\x1e\xa2\xf8\x51\x40\xd0\x67\xe0\x2c\x33\xd8\x36\xe3\xfd\xa4\xd3\x86\x7a\xa8\xf2\x21\x35\xbb\xa6\x93\x43\xb7\x1b\xf7\x44\x8f\xe6\xc6\x5c\x92\x5b\x40\x7c\xa6\x70\x6d\x5a\x22\x25\xd4\xdf\x67\x4b\x1e\xb3\x78\x09\x64\x0e\x28\xa7\x4b\x7a\x73\x32\x4c\x49\xbf\xf4\xf6\xe7\x24\xb7\x83\x29\x12\x3d\x1d\xee\x8e\x4a\x53\x06\xb3\x29\x9f\x20\xc3\xd2\x84\xb9\x0b\xc9\x41\xda\x27\x74\x10\xd2\xd2\x8b\xc9\xc9\x6c\x81\x71\xe9\xfd\xe4\x30\xb7\x07\x9b\xc4\x69\xe9\x1d\xd8\xfc\x1d\x66\x72\x52\x9d\xa3\x7c\xc2\xfd\x30\x10\xba\xd6\xc9\x97\x9a\x85\xfb\xcf\xd2\x86\x1e\xe5\x6e\x2e\x87\x29\x8b\x77\x93\xa0\xf4\x06\xf0\xb9\xdc\x0d\x5c\xad\x12\x3e\x9a\x10\x32\xd8\x0b\xe8\xf9\x30\xe8\xc7\x34\x2c\x6d\xd5\x53\x25\xf9\x2e\xf7\x63\x56\x8a\xcc\xa5\xb2\xc4\x6c\x92\xec\x92\xd2\xb2\x73\xb7\x9a\xf7\x82\xc3\xb2\x14\x2f\xe6\x52\x90\xa0\x94\x4a\x8f\xe7\x93\x0c\xc2\xf2\x44\xe7\xf3\x89\x92\xdd\xd2\x7d\xf6\xdc\x1d\xe6\xbd\xb0\xb4\x94\xdc\x2d\xe6\x71\x10\x26\xa5\x6d\x8a\x72\x69\x48\xb2\x37\x61\xa7\xed\xe9\xbf\x34\x09\x28\x0b\xa3\xd2\x64\xb9\x6b\xdd\x89\xf4\x65\x7e\xe2\xf1\x42\xda\x2f\x6f\xfd\x63\xb9\x24\xa3\xc9\x70\x58\x5e\x59\xee\x0e\x76\x3a\x29\xe5\xa1\x67\x72\xdd\x1b\xf6\xaf\x95\xb6\xff\xe1\x62\x9a\xc7\x69\x3f\x51\x1e\xb6\xe7\xd3\x5e\x2b\xa6\xbd\xcc\x48\xe9\xe5\xf1\x8b\xb9\x64\xc2\x16\x3e\x4e\x4b\x1b\xf0\x52\xee\x92\x78\x90\x84\xe2\x35\x97\x92\x64\x83\x2c\xd9\xcb\x61\x69\x85\xcf\xde\xdf\x81\x89\x35\x62\x6c\xec\xaf\xae\x1e\x1c\x1c\x38\x07\x0d\x27\x4e\x76\x57\xbd\x8d\x8d\x8d\xd5\xc3\x11\xdb\x8b\x2c\x14\xe2\xeb\xe9\xfe\xae\x5f\x92\xaa\xee\xba\xee\x6a\xba\xbf\x6b\x21\x91\xd4\x4f\xd0\x61\x14\xd2\x6b\x65\x49\x65\x81\x3c\xd6\x42\x87\x7b\x51\x59\x92\xe7\x2e\x3e\xc1\x93\xad\xaf\xd2\x60\x8f\xa4\xe3\x80\xb7\xfe\x70\x2f\xa2\xe9\xc2\xaa\x45\xec\xaa\x35\x45\x71\xd9\x83\x0a\x36\xb6\x2c\xc4\xd5\x0d\xe1\xfa\xf5\xc9\x21\xb0\x7c\x2b\xdb\x1b\xde\xc6\x6e\xa5\x62\x89\x12\xac\x15\xb1\x37\x47\xe4\xc6\xa7\xd8\x81\x81\xc2\x14\x5d\x87\x50\xdb\x83\x10\x85\xb3\x97\x1c\x18\xec\x5c\x17\x78\xfa\x61\x97\xf5\x50\x14\xf7\x83\xc8\x27\x53\xbe\x26\x0e\x4a\x10\x8a\xb3\xf3\x3d\xc0\x1c\x91\xba\x73\xa6\xad\x55\x79\x9c\x77\x40\x49\x72\xbe\xf4\x61\xf7\x4b\x97\x01\x71\x04\x22\x88\xc8\x72\xe1\x74\x5a\x76\x40\x3a\xb3\x51\xc3\xf0\x7c\xc9\xda\x14\xd1\xf4\xc1\x33\x4f\x3f\x6e\x68\x86\xc5\x31\x12\x73\xf4\xfb\xf2\xaa\xfe\x42\x62\x9e\xa6\x33\xfb\xf2\x3c\x81\xfe\x3c\xce\x14\x11\x38\x9d\x42\xc0\x60\x6e\x9a\x4e\xb5\x27\x81\xc9\xe2\xc3\x0d\xd2\x49\x17\x19\x55\xbf\x34\x21\xc9\xd1\x65\x12\x89\x89\x10\xf0\xf2\xb3\xa2\x23\x93\xb6\x2b\x4f\x82\xfa\x27\x55\x11\x9d\xa9\x8a\x87\xc5\xf6\xc1\x74\x8a\x86\x67\xdb\x25\x17\x25\x88\xb7\xcd\x49\x2a\x33\x8e\x4a\x91\x30\x0a\x8e\xd1\x9f\x72\x0d\x19\xe7\xfc\xc0\x17\x3a\x0f\x93\x99\xce\x9c\xeb\x4a\x4c\x0a\x9f\xca\xb9\x36\x25\x87\x52\x2d\x55\xdf\xf2\xb2\x0e\x56\xe7\xe2\x57\xaf\x0e\x02\x16\x5c\xbd\x8a\xd9\x74\x9c\x73\x31\x71\x3d\xe7\x5f\xc2\x1f\xa3\x60\x3c\x26\x74\x70\x6e\x14\x46\x83\xc5\xbe\xb2\x65\xc1\x4e\x28\x5e\xe5\x50\xbe\x90\x49\x0e\x09\xe9\x73\xdb\xc4\x9d\xe4\x3c\x7b\x41\x51\x70\x8a\x0a\x1d\x74\x2a\x2e\x73\x1c\x83\x66\x3b\xf8\xfe\x8a\xd0\x1c\x21\xf7\x01\xb1\xf5\x50\xce\x7f\xf4\x9e\xb6\xb4\xe0\xeb\x03\x58\x78\xb2\xcc\x2d\x1e\x37\xc6\x7a\x45\x99\x6e\x45\x9b\xb6\x9d\x42\x10\x60\xd6\x4d\x7b\xb0\x03\x82\xac\x43\xe2\x6e\xda\x43\x49\x37\xed\xe1\x00\xfa\x94\xff\x72\xc6\xe1\xec\xc1\x63\xe4\x9e\xe3\x66\x2a\x8e\x1e\xb3\x12\x2a\x15\x10\xca\x2c\xd9\xd6\xf4\x51\x1e\x31\x14\x48\xf1\x20\xef\x7a\xf4\xf1\x75\xce\xdd\x06\xb7\x91\xc1\xad\xb0\xc7\x39\x94\xb5\xa5\xd8\xdd\x4c\xb7\x86\xb2\xc2\x89\xa9\x70\x8f\x57\x18\xe1\x81\x1d\xc8\x4d\xa7\x09\x9a\x98\x56\xa0\x14\x31\x88\xa2\xe5\x90\x2e\xf7\x3b\x02\xb3\x89\xdf\xef\x46\x3d\x3c\xc9\x17\x39\xd2\x45\xf6\xbb\xb9\x72\x64\x43\x51\x8a\x62\xc8\x49\x23\x48\x91\x2f\x5b\x52\x48\x94\x26\x1c\xc5\x2f\x22\x52\x39\xda\xfd\x2e\xc7\xbb\x87\x31\x9e\x68\xa2\x4d\x72\x44\xdb\x3f\x93\x81\x01\xa7\xe4\x6e\xe9\xb9\x58\x71\xac\x56\x2a\x33\x01\xda\x3f\xf5\xb3\x21\x39\x38\x3e\x26\x46\xe8\x56\x2a\x44\x7c\x66\xb1\x39\xd1\xb0\x53\xc4\xc9\x49\xd9\x51\x24\x9c\x44\xe9\x49\x4b\xbe\x7d\xc0\xe0\xf1\xf1\x2e\x20\x90\xc7\x9c\x8b\xf7\xc6\x13\x46\x06\x97\x79\x52\x40\x84\x7d\x00\x2c\xcb\x52\xb8\x66\x97\xab\x43\x5d\xd5\x4c\xc7\x51\xc8\xc0\xea\xe7\x8e\x5f\x48\xed\xd5\x45\xf7\xea\x9c\x7e\x14\xa4\xe9\x13\x61\xca\x8e\x8f\x85\xa3\x73\x3e\x56\x4c\x52\xfe\xa5\x5e\x04\xa0\xf1\x80\x18\x01\x24\x44\x16\xbe\x2a\x9d\x6a\x3d\xcc\x58\x12\xee\x4c\x18\x01\x96\x28\xcc\x82\xf2\x21\x07\x53\xca\xe1\xec\x86\xc3\x81\xd8\xdb\x95\x27\x86\x9a\x8f\xf5\x51\x20\x75\x82\xc1\x00\xb0\x6e\xd2\x83\x85\xdb\x71\xf7\x53\x42\x42\xf6\xe2\x7d\x32\x5b\xc8\x93\xfa\x75\x03\x46\x0e\xd9\xb9\x98\xf2\x05\x10\xb6\xac\xfc\x5d\x36\x95\x20\xa4\x94\x24\x8f\x5d\xb9\xf8\x44\x21\xfa\x9a\x8e\xe6\x82\xf1\x72\xb8\x13\x85\x54\xdf\x77\x91\x72\xe7\x52\x3c\x20\x4e\x4e\xec\x2a\xcf\xea\xb9\xf3\x26\x55\xc0\x38\x21\xfb\x61\x3c\x49\x17\x16\x52\x10\xa2\xcc\xbc\x7c\x93\x4b\x31\x0c\x93\x94\x89\x5a\x72\x15\x5c\x01\x85\x59\x33\x8b\x38\x57\xbc\x15\x91\x95\xb3\x44\x38\x9b\x4b\x7a\x95\xe2\xfc\xf4\xcc\x54\x79\x12\x92\xd2\xdd\x3c\x8f\x03\x2b\x9e\x32\x7a\xca\xd1\x2a\x57\xea\x53\x1f\xb2\x54\xb7\xac\xd4\x0b\xf9\x39\x30\x18\x14\x67\xbb\x1c\xbf\x1a\xb5\x93\xc0\x2d\xd7\x3c\x07\x23\xa3\xc4\xf6\xa5\x36\xb8\x14\xbc\xee\xa4\x25\x9c\x9d\x67\x7f\xe7\xc5\x38\xa4\xc0\x5a\xb6\xc4\xc6\xb8\x24\xa1\x3f\xaf\x64\x96\x23\xb0\xc4\x84\xba\x5b\xc0\x81\x8f\xd7\x3e\x01\x0c\x79\x1f\x01\x8f\x7e\x4c\x59\x10\xe6\x1f\x8e\x99\x9d\x23\x67\x51\xd9\xc6\xae\x9a\x1c\x2f\xf1\x99\xe5\x45\x21\x98\x33\x01\xf6\xf8\xdc\x39\xc5\x79\x15\x82\xf2\x07\x56\x7a\x27\x31\x21\x51\xc0\xc8\xe0\x4a\x90\xec\x12\xb6\x24\xcf\x66\xe4\x8b\x30\xc7\xc7\xeb\x15\xaa\xdf\x2b\xd0\x32\xf5\xa9\x38\x0d\x65\x11\x9c\xed\x20\x97\xa3\x62\x1e\x91\x3c\x0f\xa7\x19\xcb\x9c\x9f\xc1\xc3\x54\xae\x8f\x31\xf1\x8b\x4b\x2f\xe2\x44\x3c\x3d\x5a\x28\x24\xaf\x31\x89\x12\xcc\xfb\x9f\x2f\xe2\x70\x9a\xab\xe1\x89\x53\x15\xf3\xab\x57\x63\xb1\x09\x9f\x17\x45\x28\xc1\xae\xde\xcf\x33\x92\x28\xd9\x8a\x85\xd1\x11\x15\xfe\xb9\x10\x71\x38\x73\x56\x2a\x54\xfc\xae\x60\x2c\x03\x8e\x8f\xa9\x50\xfe\x44\x00\x07\x3a\xac\x6b\xdb\x61\x0f\x53\x69\xa0\x28\x79\x4a\xbc\x5a\xc5\x05\x34\xa1\x24\x01\xb2\x08\x44\x9d\x48\x85\x20\xea\xf4\x83\x31\x9b\x24\x04\x6e\xda\x76\xd8\xd1\x38\xe0\xd0\x2f\xbc\xc7\x71\x35\xa6\xf9\xc6\x3e\x5a\x3c\xfb\xbe\x34\x77\x5f\x5c\xd4\x03\x3b\x8f\xfb\xe7\x97\x66\x69\x52\x54\x49\x32\xd2\xa0\x08\x27\x80\x89\x48\x4e\xa5\x89\xd9\x2c\xec\x63\x17\x0d\xf1\x44\x53\xa7\x2f\x26\xf6\x3e\x0c\x87\x00\xa4\x78\xd2\xed\xf7\xa0\xa8\x0d\x6b\xc2\x54\x2a\x52\x49\xc6\x9a\x30\x30\xcf\xc1\x65\x64\x49\x25\x59\xd2\x8c\x2c\xa9\x21\x8b\xb2\x8b\x1f\x0c\x4e\xc9\x82\xa3\x2c\x13\xa6\x10\xed\xc7\xe1\x00\xa4\xea\x70\x96\xa9\x57\xa5\xe6\x8a\x91\x18\xa3\x88\x0f\x88\x14\x5f\xe7\x1f\xbe\x0a\xe3\x98\xfb\xb2\x01\x48\x3e\x74\xc1\x90\xae\xcc\x8f\x90\xaa\xca\xa7\x53\x34\xe9\x4c\xa4\x08\x4a\xa1\x6f\xc8\x89\xbb\x69\x6f\x5a\x7a\xd3\x46\xf3\x3b\x71\xd2\x78\x92\xf4\x25\x2d\xf0\x8b\xe8\x45\x4c\x04\xff\x6b\x6a\xa9\xa7\x64\xe4\x8d\xed\x3c\xd3\x9b\x42\x1f\x2b\xb2\xc1\xae\xb4\x7f\x4d\x9c\x73\x93\x94\xc5\x7b\xa2\xdc\xa5\x92\xe3\xdb\xb0\x23\x9f\xc2\x08\x85\xa7\x48\x1f\xf0\x2c\x83\x99\xa5\x30\xcf\x0b\x2c\xf1\x63\x41\x44\x3b\x20\x74\x42\x1a\x32\x19\xce\x10\x75\x76\x26\x3b\x3b\x11\x49\x05\x03\xd3\x3e\x89\x82\x9d\x88\xd7\xee\x0c\x08\x0b\xc2\x08\x53\x05\x40\xbf\x98\x71\xc5\x43\x2b\x7c\xf5\x4f\xc4\x3d\x60\xbe\x72\x93\x31\x21\x9c\x5a\x13\x2a\xdf\x1b\x19\x64\x4f\xe0\x66\x5a\x1a\xb0\x62\xba\x17\x4f\x52\x42\x28\x23\x89\x15\x52\x13\x37\xbb\x7e\x3e\x3e\x06\x97\xf0\xf5\x2c\xad\x6f\x09\x38\xde\x27\x89\x85\x04\x18\x91\x60\x9f\xe8\xe0\x09\xb3\xb4\xd5\xfd\x23\xb8\xcb\xc5\x67\x2f\x93\x9f\xcf\xe4\xdf\x08\xdb\x4d\xe2\xc9\x38\x35\x6a\x94\x9c\xf6\x52\xcc\xf2\x37\x8d\x0a\x6b\xce\x67\x40\xb7\xbb\x08\xcb\x5e\x0f\x3d\x02\xa7\xcf\xe4\x66\xbf\x97\x16\xad\x06\x9f\x41\xa9\x58\x0d\x15\x66\x85\xac\x5f\x0d\xb1\x88\xd8\x65\x99\x08\x4b\xfb\xec\x54\x20\x8f\x3b\x5a\x78\x5c\xa4\xcc\x2a\xa9\xb0\x87\xd0\x99\xa5\xe9\x15\xeb\x86\x3d\x14\x61\xf3\x4a\x52\x1f\x27\xdd\x30\x7f\x6a\x10\x41\x34\xc4\xee\xe6\x50\xac\xad\x86\x50\x98\x52\x0c\xc5\x42\x25\xc0\x4a\x98\xc7\x28\xce\xc4\xf8\x50\x9d\x0b\x59\x3a\x84\xf7\x66\xcc\x93\xe7\x56\x1a\x06\x84\xa8\xdf\x1d\xf2\xf5\xd5\x52\x81\xb2\x49\xb1\x17\xc4\x2b\x7c\x9c\x48\xb3\x2b\xcc\x85\x74\xea\x9f\x99\x4e\xdd\x1e\x0a\xf9\x9f\x18\xbb\x9b\xb1\x20\x51\x0c\xf3\x8b\x4d\x61\xd6\x3b\xc9\x08\x14\x61\x77\x33\x12\xcb\xc4\x88\x2f\x13\xd3\x6e\x24\x2d\x16\x95\x9e\x22\x29\x12\xa0\xac\xb5\x28\xe2\x14\x41\xa1\x7a\x39\x1b\xce\x35\x35\x84\x53\x24\x5f\xe9\x38\x5b\xdb\x86\x0f\x94\x07\x24\x07\xa4\x38\xc8\x4c\x79\x13\x69\x6a\xa3\x9a\x9a\xca\xa6\xc6\x38\x90\x4d\x2d\xeb\xf4\x08\x05\xb0\x52\x51\x82\x32\x3e\xb5\x33\x79\x2e\x7f\xee\x90\x32\x73\x15\x31\xc8\x61\x2e\xef\x03\x84\x2f\x13\x00\x21\xea\xf3\xc9\x5c\x84\x90\xc2\x13\x7a\x04\x5e\x1f\x74\x6d\xbb\xdf\xc3\x64\x0a\xd1\x40\x5f\xf7\xc4\xac\x73\xe4\xef\xf1\x75\x48\x1e\x01\xae\x0d\xe4\x48\xb6\xb4\x80\xd0\xb4\x68\xc2\x9e\x8d\xfd\x69\x46\xfc\x20\x5b\xe0\x17\x8d\xb3\xd0\xa4\xf8\x19\x15\x3f\xfb\xd8\xdd\xec\x0b\xfb\xa4\xbe\x94\xef\x43\x1c\x76\xfb\x3d\x34\xc2\x31\xff\xc9\x6c\xaa\xd0\x40\x0f\xb2\x21\x1a\x56\x2a\xc3\x8c\xe4\x7d\x14\x42\xb4\x8f\x07\x3a\xe1\xae\x98\xad\x73\xd5\xec\x43\xb4\x83\xd3\xd9\xb0\xa5\x04\x0c\xd1\x08\xed\xa2\x1d\x14\x15\xe3\xc6\x10\x0d\x10\xcb\xda\x76\x15\x1d\xa0\x0b\xd8\x45\x87\xd8\xdd\xbc\xb0\xb5\xbf\x69\xdb\x17\xb8\x5a\x70\x15\xef\x76\x2f\xf4\xa4\x96\x75\x61\x1b\x1f\x56\x2a\xe0\x10\x5f\xb0\x3d\xb8\xb9\x02\x0e\xf0\x4e\xf7\x90\xf3\x88\x6d\x1f\x6e\xed\x6f\xc2\xcd\xab\x6a\xbf\xec\xe0\xf8\x58\xac\x7a\x94\x5d\x15\x90\xc4\x7a\x06\xa4\x28\x84\xd0\xb9\x2a\x24\x39\x9e\xa0\xd4\xb9\x4a\x0e\x43\xc6\x67\xfb\x29\x92\xe2\xbd\x84\xfe\x22\xa7\xec\x41\x91\xe6\xf8\x38\xdf\x9d\xce\x5e\x30\x06\x23\x38\xc7\x73\xbc\xe0\xd3\x4a\x3b\x0c\xd9\xd9\x0a\xe3\x7a\xfd\x82\x67\x4a\x25\x77\x72\xbc\x00\x54\x9c\xa7\x19\x8e\x97\x0f\xb2\x73\xff\x05\xc6\x57\x20\x81\x7e\xa2\xd6\xaa\xd2\xc1\x13\x92\xb6\x04\x4c\x5e\x43\x10\xcf\xc9\xeb\xe3\xf2\x58\x2f\xa8\xa1\x4f\x41\x0c\x51\x52\xa9\x84\x9d\xc4\x11\xe7\x5e\x20\x84\x4e\x9c\x0c\x38\x22\x7e\x38\x45\x22\xcc\x2f\x35\xf5\x98\x15\x21\xc4\xc0\x49\x26\x4e\x42\x4c\x33\xcb\x0b\xe3\xeb\x80\x8b\x2f\x14\xe4\x6f\x1f\x70\x5d\xcb\xdd\x4c\x85\x9a\x9d\x1a\x49\x33\x41\x91\xd8\x2a\x42\x7d\x4c\xf9\xcf\x10\x47\xd9\x2e\x59\xa0\x77\x9a\xf4\xfe\x18\x1a\x63\x77\x73\x2c\x74\xd1\x31\x04\x13\x1c\x75\xc7\xbd\xe3\xe3\x7e\x77\x2c\x64\xed\xa8\x3b\x36\x3b\x5e\x9b\xe9\x56\x22\x2a\x12\x65\xf0\x1a\x8a\xc2\x27\x98\xeb\x3b\x41\x92\xf2\xe7\x5b\x0b\x64\x50\x47\xee\x24\xdb\xc2\x28\x9c\xb2\x0b\x53\x94\x2e\xe3\x13\x47\x98\x5d\xc7\x08\x70\xd8\x8d\x7b\x9b\xb5\x5a\x2c\x6c\x5b\x40\x22\xbe\xc5\x6c\x59\xa9\x34\x3f\x97\x2c\x5c\x64\x71\xf9\x19\x2c\x5c\x6c\x27\x28\xe0\x54\xce\x5e\xcc\x62\xc2\x23\x48\x1a\x27\x45\xbd\xc1\xe8\x2a\x2c\xff\x72\xd1\x32\xab\x54\x68\x87\x00\x96\x49\x0f\x9a\xcd\xc0\xfe\x0a\xab\xad\xd0\x29\x11\x37\xf9\xf6\xf3\x57\x4d\x0a\xe4\x48\xb2\xee\x0f\x8b\xdd\x2d\x67\xce\x44\xcc\x9c\x85\x7d\x5a\x3a\x37\x75\x86\xe2\x3a\x87\xc9\x3c\xd1\x92\x70\x22\x24\xa1\x98\x4e\xfb\x82\x5a\x42\x36\x05\x70\x29\x92\xa6\x4a\x0c\x4e\x0b\xbd\x1a\xce\xf4\xaa\xe6\xf3\x29\xe2\xb2\x72\xfe\x3e\x5a\xf6\xaa\xa3\x6b\xf8\x23\x1f\x26\x87\x29\xd1\x4a\xf9\x24\x8a\x66\x5f\xd5\x9c\x22\xbe\xe2\x2f\x79\xf4\x75\xc1\x4c\xc5\xb9\x27\xdf\x59\x33\x13\x16\xbc\x4e\xba\xb6\xcd\x64\xc5\x53\xf1\x44\x1b\x2f\xff\x4c\x6c\xe9\xe6\xb9\x92\x89\x19\x9d\x65\x6c\x29\x99\x32\xc4\x2e\x8a\x8d\xe5\xf0\x66\x28\x46\xa3\x7a\xef\x2d\x10\x13\xbc\xb0\x84\x37\x16\x6b\xd3\xfc\xde\x14\xe2\x8d\x98\x6f\xa9\x7b\x62\x7b\x6c\x9b\xc8\x76\x90\xbd\x71\xf1\x39\x60\x99\x6b\x45\xee\x0e\xc5\x03\xe1\x18\x88\xe7\x3e\x9b\x2c\x72\x73\x32\x48\xdc\x68\xb2\x6d\x5a\x30\x75\x61\x5d\xda\x53\x86\x4c\xe6\x24\x20\x10\x5a\x4b\x00\x41\x88\x63\x79\xa5\x44\xcd\xa2\x21\x0a\xb3\x41\x10\xa0\x78\x66\x40\x05\x8c\x25\x7e\x89\x81\x90\x3c\x8f\xe4\x14\x9b\xb1\xa1\xdd\xaa\x17\xe4\xbe\x6c\x9e\x91\x40\xea\xe0\x32\x29\x6c\xc5\x5e\xba\x0c\xa8\x3a\x81\x54\x09\xb8\xbc\x2f\x6c\xd6\x52\xc3\xee\x19\xa9\xb5\x31\x52\x87\x9e\xe9\x38\x34\xb7\x1c\xcf\xd7\x7c\xdf\x67\x9f\x65\xe5\x88\x33\x1b\xbf\xd4\xd8\x79\x1e\xb9\xdc\x16\xfb\x0c\x47\x71\x55\xb5\xf4\x19\xdb\x25\x3d\xbb\x9d\xb1\x11\xea\xce\x68\x91\xc6\x33\x89\x10\x2d\xb6\xf5\x41\xa3\x25\x8e\x6d\x67\xd1\x10\xf7\x1e\xa7\x53\xff\xac\x54\x39\x4b\x3b\xd8\x59\xda\x51\x86\x09\x13\x07\xc8\x14\x31\xf1\xae\x20\x3b\x8a\xc8\x9c\x06\xb3\xc0\x50\x7c\xdb\xeb\x94\xf0\xe1\x19\xf8\x46\x9e\xa8\x48\x4a\xe5\xdc\x1d\x2e\x62\x9e\x05\xe8\xcc\xf4\x4f\x72\x4a\xff\x24\x9d\x93\xea\xf6\x73\x91\x69\x76\x6e\x03\x08\x4a\xe6\x59\xa4\x1c\x89\x85\x25\x88\x1d\xcc\x29\x94\x90\xe2\x15\xcb\xf2\x29\x84\xfe\x0e\xc8\xc9\x07\x44\xe0\x14\x8d\x55\xbe\xf2\xbe\x7c\x10\x5d\x90\xdb\x63\x14\x0f\xfd\x9e\x4e\xf4\x0f\x3f\x24\x8a\x75\xf9\xea\x17\xd3\x33\xf2\xaa\x78\xd4\x59\x91\x0e\xaa\x3e\x92\xb4\x12\x0f\x45\x8b\x9d\x75\x32\x28\x95\xcc\x57\xa5\x8e\xbc\x48\x38\x67\xf3\xe2\x41\xbe\x0b\xa0\xde\x17\xa6\x99\x7a\x17\xaa\x1b\x85\x2b\x5c\x4b\x93\x5b\xf5\x80\x76\xc3\x9e\x36\xc7\x5c\xd1\x13\xfa\x8a\x5b\x22\x9e\x3f\x14\x71\xc1\x02\xba\x76\x0e\xfd\xcb\xf2\xf5\x5f\x61\xf7\xe1\x9f\xd6\xd5\x87\xb9\xb4\x27\xa7\xbc\x9c\xa5\x34\xc2\x80\x91\x43\x56\x96\x6d\xee\xc2\x48\xd6\x5c\x6d\xf9\xf1\xa4\x5f\xd6\x70\x72\x0a\xba\xda\x53\x44\x39\x4f\xcd\x1d\x04\x6a\x76\xb7\x2c\x9f\x9d\x6d\xc2\xca\xe7\x26\x82\xaf\x8a\x5c\x95\x4f\x30\x45\xc2\x1e\xeb\xc3\xb5\xff\xe1\x8f\xab\xfd\xd9\x39\xe7\xfd\xb7\x3e\xcb\x5b\xda\x76\x13\x3d\x45\x49\x10\xa6\x0b\x3d\x3a\x8a\x86\x5e\x83\x53\x24\x1e\x7b\x38\x31\xd5\x45\x38\x55\x46\x2d\x25\xc7\x6c\x0b\xee\x18\x05\x39\x17\x0e\x6a\xbe\x8a\x48\x9f\x81\x05\xf5\x14\x0e\x6f\xcb\x29\x07\xa7\xc6\x26\xa6\x54\x54\x9c\x80\x08\x5f\xde\x28\x3a\x5f\x29\x97\x93\xcc\x9f\x00\x76\x3f\x08\x17\x16\x70\x74\xc1\x83\xfd\x0b\x1e\xf2\x97\xdb\x25\xa2\x3d\xb3\xa7\x97\x25\xd4\x3f\xc7\xd7\x3d\x51\x4c\xc9\xc2\x93\x45\x85\x29\xe9\x3c\xe5\x3f\x2d\xf7\xdf\x26\x7b\x67\xe7\x78\x3d\x55\xe5\xf6\x74\x11\x29\xf2\x94\x8e\x98\xa2\x78\xc1\xc6\x88\x30\xf3\x2f\x35\xed\x28\xb5\x89\x10\x3b\x2f\x25\xbc\x64\x89\xc5\x8f\xb1\x52\x74\x66\xad\x14\x73\xb6\x89\xd4\xf6\x20\x22\x45\x53\x45\xa4\x4e\x81\xe4\x01\x10\x9f\x72\xa6\x6a\x8f\x25\xdb\xca\x5b\x12\xe6\xf8\x25\x93\x89\x9c\x4d\x52\xcc\x3a\x8f\xfa\x4f\xa0\xfc\x15\xb7\x15\x8f\x73\x90\xbb\x99\x88\x3d\xbd\x04\x66\x7d\x93\x82\xb8\x9b\xf4\xe4\x9d\xe4\xc2\x5a\x43\x3e\x1e\x5c\xa4\xa1\x3c\xc2\x2c\x6e\x9a\xb8\xa8\x6f\x56\xd0\x9b\xd1\x56\x5f\xec\xc6\xca\xbb\x26\x2e\x5f\x5c\x77\xa3\x9e\xa9\x36\x1c\x02\xb1\xe2\x49\xb2\x53\xbb\x89\x3a\xb5\x0b\xf5\xa9\xdd\xa4\x70\x6a\x37\x91\x67\x68\xd2\xb3\x61\xc0\x0a\x8b\xb2\x59\x33\xb2\x8f\x30\xcf\x69\xdb\x64\x35\xf9\xa0\x85\x03\xf8\x74\x75\x61\xae\x28\x68\xf4\x06\x75\x56\xfe\x19\xfc\x12\x7a\xb6\x84\xd5\xac\x54\xb8\x1f\xcd\x0f\xfe\xb9\x73\x9c\x59\x0b\xb7\x5e\x0f\x2d\x3e\xe4\x91\x2e\x83\x78\x7e\x22\x0f\x7c\xd0\xf3\x65\x1c\xfe\x2c\xe0\x12\x46\xae\x3f\x17\x95\xc5\xa7\xe1\x4f\x62\x37\x3b\x9b\xfa\x54\x71\x8b\xf2\xa1\xec\x18\xea\x21\x2d\xe6\xaf\x62\xeb\x7f\x5a\x36\xb0\xed\x4f\xc2\xcc\xb7\x74\xa3\x0d\xa7\x0f\xe5\xce\x9a\x3e\xb5\xe8\xdc\xe9\x21\xb4\x4b\xd8\x89\x4b\xf0\xcd\x15\xc0\x96\x43\xba\x4c\xa0\x54\x8b\x84\x91\x6f\xb6\x43\xa5\xd5\x22\x73\xb9\xa6\xcb\x7a\x53\x94\x92\x59\xd9\x9b\x45\x8b\x52\xb9\xa2\x57\x66\x92\x51\x30\x84\x10\xd5\x56\x2a\x4a\xab\x34\x59\x4f\x77\x14\x7c\x55\xf1\xc0\xa7\x71\xd9\x4e\x0a\x62\xf8\xc5\x4d\x82\x59\xfe\x6c\x76\x13\x32\x4c\xcc\xc8\x9c\xa2\xe7\x4a\x9d\x65\x28\x7b\xb3\xcb\xcf\x7e\xd2\x9c\x43\x12\x71\x43\x48\x1d\xa9\x5e\x7e\xf6\x93\x4f\xc5\x21\x65\x7a\x89\x32\x1b\x9e\xdb\xf6\x75\x0e\x31\x73\xfa\x51\x48\x28\x7b\x0e\x25\xce\x91\xf9\x7a\x1e\x75\x41\x82\x13\x67\x2f\x60\x49\x78\x78\x25\x09\x68\x3a\x8c\x93\x3d\x69\xc9\x75\xb9\x9f\x10\x42\xcf\x5d\xb9\x28\x26\x70\x75\xeb\x1f\x42\xe7\x90\x17\x21\x4d\x74\x43\x2c\x52\x3e\x12\x4f\xc4\x6d\x94\x73\xa2\xd0\xa7\xb9\xdc\x37\x9e\x2c\x4c\xc5\xb5\x50\xb8\x9e\xa9\x11\x15\xf0\x04\x19\x32\x64\x10\xa9\x85\x0e\x8b\xc7\x26\xf2\x4a\x3c\xee\x4d\xd1\x67\x4b\xcc\xb4\x3f\x9d\xb5\x8b\x39\xfd\x51\x40\x77\xc9\xe0\x4a\x3c\xe9\x8f\x48\x2a\x44\xf1\x6c\x60\xd7\xed\x41\xf4\x9c\xb2\x3d\xfd\xc3\xfb\x1a\xa3\xe5\x43\x54\x5a\x90\x9e\x69\x90\x6a\x95\xad\xdb\xf3\x89\x1c\xad\x84\xcc\xdd\x4a\x9b\x93\xfa\x0d\x21\xdf\x19\x12\x6d\x9d\x69\x4d\xee\xd9\x37\xb5\xe1\xc6\x8c\x8d\x87\xef\x9a\x4d\x37\xe5\xb4\x42\xdc\x7d\x0c\x07\x84\xb2\x70\x18\x92\x04\x63\x4c\xb5\x14\xe6\x14\xc9\xf6\x76\xe5\x1e\x1c\x23\x27\x78\x04\xfa\xb4\x78\xee\x61\x06\x09\xb5\x57\x96\x43\x61\x66\xa7\xd6\x6c\x9f\x85\x5d\xda\xc3\xa2\x1b\xba\x39\x7f\x40\xa1\xb9\xbd\x25\x79\xb7\xec\xb6\xc4\xf3\xf9\xbb\x51\x24\x58\x70\x83\x2a\x77\x73\x4b\x6c\x5a\x94\xa5\xf9\x54\xfe\x3e\x10\xeb\x8f\xc8\x69\x6f\x45\x8a\x03\xfd\xb2\x34\x9f\xcd\xbd\x57\x99\xdd\x86\x98\x4f\x17\x97\xa4\x2b\xbd\xd6\x92\xbf\x00\x26\x06\x80\x18\xc2\x65\x29\x9f\xcb\x5d\xa3\x11\x1c\x79\x8a\xcf\x2e\x73\x8a\x5d\x96\xee\x0f\x67\xd3\x2d\xb8\x2a\xf6\x99\xd9\x74\xe5\x9d\x30\x99\x4f\xb6\xa0\xe2\x7e\x2e\x25\x3b\x2a\xbf\x30\x94\x7b\x14\x53\x30\x5e\x59\x1a\x42\x66\x12\x95\x93\x97\xe5\x92\x1d\x84\x74\x10\x1f\x9c\xe2\x69\x8d\xec\x2f\xb8\x53\x94\xbb\x31\xd6\xcf\xac\x62\x16\xdc\xc1\x3a\xd3\x9b\x91\x14\x78\x70\xe6\xf5\x47\xed\x1e\x4c\xfa\xfb\x22\x55\xc2\x55\xc5\xaa\x9e\x32\x00\xf0\x6a\x8d\x2a\xb1\x1b\xd5\xb8\x16\xc0\x2a\xb3\x41\xb3\xd6\xae\xc6\x76\xa3\x1a\xc0\x2a\xb5\x81\x67\xeb\x58\x11\x92\xd8\x41\x35\x84\xab\xed\xa9\x2c\xed\xe4\xc5\x9c\x26\x6b\xfe\x62\x46\x50\xae\x17\xe5\x8c\x00\x6d\x5a\x65\x39\x33\xa2\x34\x3f\x8d\xb1\x1a\xc9\x1c\x3e\xf1\xa2\xe8\xb6\xb7\xee\x1e\x1f\xd3\xad\x9a\x78\x0b\xa0\xd6\x68\xbb\xd5\x9c\xeb\x72\xba\xda\x68\xbb\xd0\xa7\xd0\x8f\x81\xf1\xc4\xce\xfc\xbc\x1d\xf2\xe4\xe4\xf2\xe7\x73\x4a\xaf\x24\x26\x3f\xc9\x4c\x14\x4b\xa8\xe1\x09\x27\xf0\x36\x81\x9d\x49\xc1\x63\x5b\xa6\x1c\xd5\x16\xee\x1b\x12\x9c\x73\xf8\x4b\x8d\xf7\x1d\xfe\xcd\x93\xd5\x08\xa2\xd8\x5b\xa5\x19\x5b\x64\xce\x33\xb3\x8c\x76\x52\x95\xdb\x7a\xc2\x4f\x1c\xc9\x9a\xc3\x60\x87\xfa\x4c\x44\xcc\x72\x8c\xb6\x02\x13\xcf\x85\xc8\x47\x43\x41\xe2\x0c\xc5\x4a\xdc\x49\x10\x60\x85\x40\xc6\x03\x85\x2b\x20\x3e\xd3\x23\x26\x9d\x52\x53\xe1\x79\x97\x49\xc7\xd4\x13\x60\x5c\x55\x22\x96\x79\xe2\x9c\x65\x82\xbc\x31\x7b\x82\x43\xc0\x20\x22\xce\x2e\x8e\x25\xb0\x83\x03\x09\x68\xaf\x94\xa9\xf8\x14\xaf\x2a\x68\xc1\xe7\xec\x06\x7b\x7b\x01\x26\x28\x9c\x16\x06\x42\xbf\x8c\x41\x59\xfe\x2e\x39\xcb\x3c\x82\x65\x53\x4e\x0c\x0b\x66\x11\x71\xd1\x2c\x22\x56\xae\xe1\xb0\xbb\x49\xc5\x54\x49\x61\x58\xa4\x0c\x9f\x9d\x50\xc0\x27\xab\xd0\x49\x8e\x8f\x5d\x94\x4a\x78\x97\xc3\x13\x09\xef\x1c\x1f\x9b\x83\xa9\x00\x13\x10\xf0\x3a\x09\x48\x79\x5d\x04\x4c\x20\x0a\x4d\x83\xbd\xb2\x67\xa1\x43\x27\xc1\x62\x07\x20\x74\x76\xb1\x74\x32\xe9\xec\x08\x3b\x2b\x14\x0a\xda\x4c\xfb\x25\xeb\xd0\xcc\x03\xdf\x5c\x2f\x18\x4b\x00\xba\x85\xdd\x0e\xc5\xae\x2f\xde\x6e\x01\x14\x7b\x88\xd5\x3c\xe8\xe7\x5c\x95\xd0\x2a\xe3\x3d\x2f\x5c\xdf\x09\x0f\x78\xb6\xd7\x43\x29\x4e\xb6\xdd\x8e\x74\x78\xe2\xd7\xb9\x5c\x41\x13\x9c\x6c\xb1\x9a\xc7\x03\xed\x3a\x0f\x0c\x6a\xb1\x99\xb6\x01\xa0\xb5\x64\x95\xc1\x2a\x43\xa9\x70\xa8\x35\xe1\x4b\x22\x74\x12\xda\x8b\x91\xce\x21\x07\x00\xfd\x04\xf6\xe0\x96\xdb\xb1\x6d\xea\x53\xa8\x71\x05\x89\xcd\xdb\xf1\x09\xa6\x70\xe6\x40\x2a\xc3\x65\xe8\x44\x7e\xd4\xf9\x47\x19\x96\xc2\xf2\x4c\x62\x29\xc4\xee\x10\x8d\xd0\x18\x0d\xe6\xfc\xd4\xe9\xf9\xa2\x86\x85\x0b\xb4\x52\x61\xc7\xaa\x74\x3a\x45\x47\x78\xb5\x5b\xb3\x7b\x1d\xd0\xf1\x5f\x18\xd8\x2f\x38\x9d\x17\x06\xd5\x63\xf1\x63\x43\xfd\x06\x2e\x8f\x17\x4f\xe0\xae\xee\xa2\xfd\xfc\x53\xb0\x47\x6a\x39\x80\xac\x5d\x0b\xa2\xdd\x13\xdc\xde\x1d\x39\x51\x90\xb2\xc7\xe9\x80\x1c\xe2\xfd\x1c\x6c\x3c\x02\x76\x79\xe3\xd5\xb5\x7d\x79\xa7\x92\xf1\xbf\x9b\x80\xe6\x1e\x88\x12\xfe\x1f\xf6\xe5\x27\x83\x70\x13\x0a\x1b\x4d\xb1\xa5\x01\xb7\x63\xe5\x6b\x52\xee\x59\xc4\x28\x84\x28\xed\x06\xbd\x0e\xff\x63\xe3\xd0\x4f\xbb\xb6\x1d\xf4\x70\x08\x11\xa0\x98\x72\x7d\x1a\x63\xcc\x97\x0d\x1c\xec\xe4\x92\x26\x3a\x69\xe2\x03\x05\x89\x73\x6d\x65\xa4\x75\x3d\xf4\x03\x74\xe8\xef\x49\x0b\x54\xe1\x15\x2b\xd7\x22\xe3\xa9\x60\x8b\x65\x3e\x3d\x73\x68\x2d\x44\x2a\xdb\x2d\xe9\x4c\xba\x6e\xef\xc4\x7d\xd0\x9c\xb8\x02\x4c\xbe\xee\x02\x78\x26\xe7\x10\x9e\xb2\xcb\x99\x4d\x8c\x80\x89\xd7\xb7\xb4\xfd\x32\x2a\x5b\xcf\x52\xb5\x35\xc3\xc4\x1e\x49\xda\x05\x14\x4f\xc4\x16\x49\xd8\xc3\xd4\x39\xcc\x6d\x43\x6a\x83\x7d\x4b\xec\xbc\xed\x2c\xf0\xe0\xa2\x77\x3d\xf2\xfa\x3a\xc6\xec\xf8\xd8\xda\x89\xe3\x88\x04\xd4\xc2\x18\x87\x9d\x58\xe0\x66\xd1\xc9\xde\x0e\x49\x64\xd0\x9e\x9f\xad\x6f\x70\xc8\x45\x82\x11\x77\x81\x98\x08\x3a\x80\x61\x8a\x22\xe8\xef\xfa\x2c\xef\x66\x39\x71\x82\x4e\x54\x0c\x3a\x1f\x30\xd2\x29\x5b\xaa\x72\xce\xe6\x91\x4b\x8b\x86\x4f\x36\xcd\x51\x27\x25\xec\x4a\xb8\x47\x00\x1f\x48\x09\x44\x74\x3a\x9d\xf1\xfd\xc4\x60\x59\x25\xf3\xeb\x0c\xd2\xc9\x99\x04\x99\x8b\x98\xbe\x3b\xe3\x55\x70\xc6\x54\x28\x37\x01\x84\x62\x02\x10\xde\x4a\x77\x00\xe9\xd2\x9e\x5a\x9c\x08\x23\x1f\xbd\x70\x11\x73\x01\x0f\x9f\x13\x60\xaa\xbf\xf3\x65\x89\xc4\xbc\xc0\x5c\x0f\x07\x85\x63\x30\x63\xef\xc7\xe4\x36\xd8\x93\xc3\x4a\xa5\x34\x56\x6f\x3b\x98\xd7\x3c\x16\x51\xe5\xfa\x14\x85\xf8\xfa\x54\xb6\x6b\x39\x94\xcc\xb1\x82\x31\xa9\x54\xac\x58\xf4\x75\x6e\x69\x2b\x2c\x6e\xae\x4f\xb5\x7d\x17\x5f\xdb\xcd\x25\x62\xc7\xc7\x80\x89\x44\x0c\x8a\x02\x49\x27\x99\xa5\x91\x1f\x9e\x4a\x16\x9e\x33\x91\xeb\xbe\xa4\x48\x91\x70\x3a\xf5\xf7\xa0\x5a\x92\x5f\xbd\x6f\x09\x9c\x7f\xf5\x8c\x0b\x63\x28\x5c\x5b\xe6\x1f\x25\xb9\x80\xaf\x8b\x9b\xfc\x51\xc0\xc8\x73\xbe\x8b\xcc\xc7\xf3\xbe\x8b\x92\x98\x05\x8c\xf8\x2e\x4a\xaf\x91\x03\x1e\x9b\xf6\x83\x88\x3c\xe7\x7b\x12\x78\xde\xf7\xa6\xe8\x70\x66\x95\xae\xaf\x84\x2a\x33\x23\x34\xd1\xaa\x78\x90\xf3\x3a\x49\xaa\x1c\x1d\x26\x2f\xa7\xaf\xe2\x00\xb1\x55\x1c\x40\x04\x26\x98\x54\xa9\x60\x76\xbe\xb0\xaf\x61\x52\x9d\xa0\xa4\x86\x59\x75\x02\x11\xc8\x7b\x1b\xa7\x55\x6a\x27\xd5\x44\x14\x40\x57\x71\x8a\x12\xfe\x67\xb2\x8a\x53\x88\x48\x35\xd9\x62\x55\x2a\xac\x71\x6b\x04\x31\x5c\x63\x68\x82\x6b\x13\x3e\x0d\x04\x10\xe5\xdb\x1b\xe6\xdb\x1b\xeb\xf6\xe6\x3c\x96\x33\x44\x60\xf5\x40\xb5\xdf\x84\x83\x89\x08\x94\xc4\x08\x34\x31\xd2\xfc\x4a\xe0\x72\x76\xe9\x20\xaf\x7e\xe6\x74\x40\xb5\x87\x4f\xa4\xc3\x3d\xdb\x5a\xb6\x7c\xcb\x9a\xce\xb2\x48\x76\x61\xc4\x4c\x5f\x5a\xfa\x63\x21\xea\x95\x56\x95\xeb\x04\xe3\xb9\x53\x7a\x91\x5f\xc1\x38\x3c\x3e\x4e\x56\x30\x56\xbd\x32\xc1\xca\xeb\x94\x65\x1a\x0f\x2c\x24\x2f\x4d\xcb\x1f\x0a\x97\x52\x33\x11\x4d\x6a\x4d\x31\x15\x11\x61\x0a\x2d\x02\xea\x22\x20\x41\x31\x97\xc4\x24\x4a\x09\x08\x8f\x8f\x63\x69\x23\x37\x5b\xb0\x1d\xda\xcc\x8e\x6d\x0a\xa7\x20\x76\x32\xd2\xa3\xdc\xc7\xf3\x28\xc8\xc7\x04\xf9\x18\xae\x89\xcc\x2c\x0d\x39\x77\xf1\x56\xb1\x0e\x20\x35\xc6\x97\x48\x1d\x66\x63\xf1\xd8\x45\x8d\xf0\x4f\xde\xf3\x22\x00\xe6\xe6\x53\x2a\xa1\x10\x50\x68\x5b\xb2\xa3\x75\xab\x13\xa8\x5a\x24\x86\x19\x84\x3e\xab\x54\x4a\x93\xdb\xcc\x4e\x44\x3b\x64\x00\x0a\x34\x90\x2e\xc6\x71\x01\x06\x82\xa3\x16\x20\x30\x57\xbf\x4a\x6c\xaa\x17\xdf\x28\x50\xbf\xf3\x95\x27\xf2\x9e\x91\xea\x7d\x7a\x7c\xcc\x56\x30\x4e\x34\x1f\xc5\xba\xe8\x98\x17\xcd\x79\x57\xe3\x61\x21\x0d\x40\x0b\x2e\x05\x06\xf3\xd4\xb0\x00\x95\x2c\x90\x2a\x7c\x99\x50\x4f\xa4\x33\x2e\x0f\x8b\xf3\x16\xfe\x93\x1c\x1f\x97\x55\x62\x53\xdb\x42\x96\x9d\xc8\x47\xb5\x78\x3b\xc4\x08\x42\x0a\xe0\x6c\xa0\x42\x02\x1d\x22\xba\x3f\xc6\x81\xd4\x8e\x4a\xf7\xc3\x11\xe5\xda\x5d\x92\xdd\x92\xb2\x6d\xe1\x5a\x3b\xed\x72\xd5\x83\x4b\x60\xae\x4a\xb0\x45\xaa\xc4\x54\x2c\x79\x9f\xc4\x97\x41\xc9\x7e\x27\x8d\x29\x91\x2f\x7d\x5e\xf0\xc1\xf0\xf8\x18\x0c\xf1\xec\x6d\x1d\xe5\x17\xc2\x3a\xff\xf8\xb3\x16\x44\x23\xbc\x68\xab\x13\x8d\x73\x51\xd9\x8d\x67\x88\x86\xca\x5a\x85\xe9\x2d\x65\x61\xd9\x3e\x9e\xbf\xd0\x3c\x2a\x9c\xb2\x0e\xe1\xa2\xfb\xcd\x96\x29\x89\x23\x54\xb8\xa3\x3a\xcc\x1f\xb9\xad\xa1\x9a\xa7\x0f\xf6\x2c\x64\x41\x74\x08\x6c\xe1\xe3\xd1\x26\x5d\x4f\xfc\xad\x8b\xbf\x0d\xf1\xb7\x29\xfe\xb6\x7a\x10\x4e\x91\x35\x3e\x44\xcb\x16\xff\x81\x16\xb2\x06\x64\x17\x5a\x10\x3d\x5c\x4a\x42\xe3\x85\xe2\x82\x0f\x06\xc7\xc7\x60\xb0\x80\x80\x97\x2e\x83\x13\xdd\xb2\x70\xed\x1f\xa2\xc1\xcc\xa5\xce\xac\xa5\x88\x40\x04\x08\x1e\x64\x64\x74\x76\x82\x94\x3c\x1b\x44\x4e\x3f\xa6\x69\x1c\x85\x03\x3e\x84\xb9\x12\xc7\x29\x20\x77\xf1\xd1\x21\xc8\xde\xcb\xea\x23\xe2\x0c\x10\x71\x08\x22\xce\x10\x42\xff\x02\x6f\xa8\x68\x26\xb4\xe4\x80\x30\x82\xfc\x5a\xa9\xc2\xac\x0f\x53\x43\x4c\x40\x7e\x17\x61\x20\x77\x11\x46\x28\xaf\x51\x0e\x20\xa0\x3c\x90\x73\xf7\x04\x30\x27\x45\xd4\x49\xb9\x34\xe7\x1f\x11\xa2\x4e\x24\xb7\x16\xcc\x86\x02\xa2\x8b\xb7\x16\x72\x07\x34\xce\x08\x87\xe2\x3e\xae\x93\x0a\xb3\x48\xc4\x9c\x48\xae\xa0\x59\x6e\x6b\x81\x7f\xca\xe5\xb3\x69\xd3\xc5\xfb\x6a\x53\xbf\xac\x4d\xfd\x99\x36\xf5\x11\x75\xfa\x0f\xb4\x4d\xfd\xfb\x6b\xd3\x95\x92\x36\x2d\x33\xae\x1f\xe5\xe6\x64\x96\xdb\x3e\x2c\xb4\x71\xc7\xb4\x31\x2c\x04\x86\xb2\x8d\x81\xea\xb7\x90\xf7\x5b\xaa\xda\x18\xf2\x36\x46\x85\x36\x86\x67\x6d\x63\xac\xfb\x2d\xd0\x6d\x4c\x41\x61\x8f\x2c\xdf\xde\x28\x6b\xaf\x1e\x68\xd8\xa6\x48\xef\x11\x31\xb9\x47\x34\x15\xf9\x2f\x7f\xfa\xe9\x2b\x75\x74\x0d\xa4\x10\x5d\x03\x13\x88\x2e\x72\xe8\x22\x87\xae\x80\x54\x2e\xf2\xcf\xe1\x2b\x60\x02\x97\x4e\x7a\x5c\x63\xe7\x94\xc7\x2f\xf6\x4e\x79\x3c\xe3\xea\x29\x8f\x73\xe4\xb6\x94\x4b\x7d\xb5\x3d\x99\x73\xaf\x76\x8a\xbb\xab\xd2\xc7\x3d\xa2\x53\x1e\xe7\x38\xf7\x51\xde\xe6\x08\x87\x00\x50\x0c\x08\x66\x1d\xe2\xb0\xf8\xc2\xe1\x38\xa6\x84\xb2\x30\x88\x80\xd8\x55\x9a\x0d\x84\x30\xb3\x92\x20\x16\x84\x5b\x2e\xcc\xc9\xcb\xa5\xcc\xef\x61\x66\x1d\x61\xfc\xdd\x67\x46\x87\x49\xd7\xed\xd9\x89\x4a\x53\x87\x7e\x82\xec\xbc\x79\x45\x6f\xf6\x4d\x10\xa5\x89\x13\xac\xdc\x6f\x07\x3b\x7c\xd8\x40\xd8\xe1\x02\x5f\xbe\xc4\x10\xe3\xd5\xcf\x81\x8e\x0f\x1c\xd8\x01\xdd\xad\x6d\xfc\xb9\x1e\x17\x99\x5d\xfb\x85\x1a\x58\xee\x71\xe8\xa1\xff\xc1\x7f\x5c\xd8\x01\x62\xbb\x06\x20\x0e\x39\x12\xfe\xdf\x3c\x41\x50\x7b\xf9\x13\x3d\xd8\x79\x68\x35\x2c\xec\x8b\x17\x0e\xcc\xd3\x82\xb3\x8c\xd4\x78\x59\x64\x38\x36\x1b\x31\x90\x8d\x92\xf8\x40\x24\xbf\x90\x24\x71\x02\xac\x90\xee\x07\x51\x38\x58\xe6\xd2\x3d\x60\xfe\xb2\x65\x2b\x67\xc3\x4c\x5a\x65\x0d\xc3\x28\xc2\xac\xeb\xf5\x8e\x8f\xad\x65\x75\xd5\x3f\x88\xc2\x5d\x8a\x59\xb7\xce\x03\xb7\x55\x60\x2a\xc3\x1a\x3c\xac\xa6\xc3\x8e\xf6\x76\x62\x9e\xbd\xc9\x43\x55\xe0\xcb\x24\x89\xf1\xca\x0a\xeb\xb6\x7a\x32\xe0\x20\x1c\xb0\x11\x66\xdd\x76\xaf\x52\xb1\xf9\x8f\x7a\x88\x2a\xe6\x83\x8e\x27\x5c\x53\x21\xe3\x84\xf4\xc3\x34\x8c\x79\x3d\xeb\x32\xf1\x7a\x4f\xf5\x8d\x76\x53\xc0\x92\x70\x4f\x64\xda\x50\x99\x84\x1d\x00\xeb\x7a\xae\x40\x61\x1a\xe4\xac\x03\xd2\xdc\xcb\x06\x39\xd8\xac\x7d\x4b\xae\xc2\x19\x9a\xd8\x19\x25\x6c\xd3\x7e\x3b\xd7\x6a\x1b\x98\xd6\x9a\x17\xb1\xb5\x19\xab\x69\x75\xc7\xb2\xb2\x47\x5e\x3d\xe4\x1e\x67\x51\x10\xaa\x12\x04\x1d\x3a\x16\x9a\x2f\xc2\xd0\x83\x17\x63\x39\x85\xa7\x59\x55\x51\x26\x89\x29\x8e\x13\xa8\x63\xfd\x6f\x59\x9a\xa1\x90\xb4\x21\x10\x1e\x7d\xd0\x70\xc6\xeb\x14\xf1\xf3\x7a\x21\xc9\x2e\x5b\x7a\xc2\xa4\x74\x33\x11\x17\x32\x12\x98\x1e\x84\xac\x3f\x02\xa4\x9b\xf4\xe0\xf5\x7e\x90\x12\xcb\xb1\xfc\x10\x33\x9c\x2c\xed\x24\x24\xb8\xb6\x24\xc2\x5c\xcb\x77\xb1\x7e\x61\x26\x81\x28\x8b\x56\x1a\x9c\x1f\x0e\x41\xb8\xed\x4a\xee\xb5\x45\x69\x22\x7e\x99\x2c\x85\xd8\xcd\x76\xee\xb7\xdd\x4e\x36\x94\x43\x68\x46\x29\xb3\x3d\xe1\x78\x7c\x5c\x6a\xd6\x90\xc8\x37\x40\x78\xd9\xe6\x30\x9a\xd8\x96\x3c\x0d\x0b\xc5\xfe\x22\x8a\x31\xed\x7a\xd9\x9a\x70\xcb\xed\x58\xae\x63\xd9\xd9\x36\x4e\x2d\x86\x4a\xd9\x75\x2d\x68\x87\xbe\xbe\x0e\xb5\x1d\xdb\x5e\x27\x34\x48\xc5\xb6\x07\x6d\xde\x2f\x3a\x88\x07\xf8\x61\xae\xa0\xb8\xa6\xb3\xda\xf5\x5c\x91\x53\x34\xc0\xd7\xad\x4f\x58\xa5\x76\x25\xc0\x73\xdd\x2a\x81\x0e\x8b\x1f\x0d\x0f\xc9\x00\x30\x38\x45\x3b\x65\xdb\x87\x85\xe7\xd9\x33\x7b\x99\x3a\x9c\xa2\x7e\xe9\x03\x59\x7c\xe6\x43\xa5\xfe\xb9\x16\x14\xe5\xb9\x70\x8a\x16\xf8\xe1\x9a\x13\xd9\x7c\x26\x58\x9c\x34\x6b\xcb\xee\xe2\x44\x4f\x69\x6e\x16\x09\xe3\xfb\xc0\x74\x1d\x4e\xd1\xb8\xbc\xe0\xb1\x24\xa8\xd8\x0d\x4a\xfc\x31\x4a\x4b\x2d\x29\xcf\xce\x37\x28\xc0\x71\x0d\x4c\x70\xa3\x6a\x86\x63\x6d\x3d\x7b\x2a\x79\x3d\xff\x60\x43\x2c\x3c\x99\x43\xdb\x43\xa9\xb9\x53\x97\x1d\xed\x60\x9c\x76\x42\x3f\xd8\x4e\x3b\x79\x9e\x09\x6a\xa9\xed\xe5\x98\xc5\x0f\xb6\xdd\x1c\xd3\x05\x45\x96\x0b\xa0\x3f\xc3\xbc\x5e\x2d\xc8\x73\x2f\x6f\x58\x4e\x6e\x30\x3b\xa8\x79\x10\x76\xdd\xde\x14\x3d\x77\x3f\xac\xd0\xe6\x1f\xcf\x8c\xc7\x24\x39\x17\xa4\xe2\xc6\xd3\xe1\xfd\x65\x9f\x16\x9f\xed\xc9\xed\x79\xa3\x23\xdc\xb5\x8e\x2c\x64\xbd\x6c\x09\x3d\x8a\xeb\x3a\xd6\xd8\x42\x16\xb5\x90\xf5\xff\xbc\x66\x21\x6b\xcf\x42\x96\x85\xac\x6b\x16\xb2\x2e\x5a\xc8\xfa\xa4\x85\xac\x2b\x16\xb2\x9e\xb2\x90\x75\xc1\x42\xd6\x67\x2d\x64\x3d\x6f\xfd\xbf\xec\xfd\xfb\x76\xdb\x38\xb2\x28\x0e\xff\xef\xa7\xb0\xf9\xeb\xa8\x01\xb1\x28\x91\x4e\xd2\x17\xda\xb0\x96\xdb\x49\x26\xe9\x89\xe3\x74\xec\xf4\x8d\x66\x7b\xd3\x12\x24\x31\x96\x48\x35\x2f\xb6\xd5\x16\x1f\xed\xac\xf3\x48\xe7\x15\xbe\x85\x1b\x09\x52\x94\xed\x74\xcf\xcc\x9e\xd9\xdf\x9e\x35\x1d\x8b\x40\xa1\x50\xb8\x15\xaa\x80\x42\x95\x0f\xd7\xeb\x06\x3d\x20\x44\x02\xfe\xf8\x8a\x7b\x3f\xa2\xbd\x6c\x1a\xe7\x69\x10\x8d\x52\x1e\x64\xa6\xcc\xe2\xbc\xaf\xcc\xab\x1d\x0e\x55\x9a\x73\xcd\x59\xb7\xa7\x5e\x69\x65\x6c\x76\xe4\xc4\xde\x0b\x0f\xec\x4e\x27\x65\xff\xa0\xdc\x4c\x4d\x87\x3b\x7a\x4f\x89\xb6\x05\x24\x56\x8e\x31\xc4\xea\x6d\x7d\x9a\x5f\x8a\xf3\x73\x14\x5a\x24\x85\xd0\x4c\x31\x86\x1d\x84\x72\x93\xb0\x59\x70\x90\x60\xbc\x87\x59\x05\x01\x41\x01\xbf\x8c\x92\xd5\x57\xec\xab\x0a\x99\x22\x46\x3d\xc2\x05\x76\xe7\x3c\xa4\xd1\x30\x4f\x12\x1a\x0d\x97\x3c\xae\xd5\x88\x0e\xc3\x79\x30\x83\x19\xa1\xbd\x28\x9f\xd3\x24\x98\xa5\x8f\xbc\xcd\xc8\x7a\x09\x5d\xcc\x82\x21\x45\x7d\xcf\xb6\xbe\xf5\xfb\x13\x68\xbb\xf3\xf0\xcc\xcc\x2f\x70\x51\xa0\xaa\x02\x46\xc9\x90\xd0\xde\x82\x26\x43\x6e\x63\x66\x3c\xd1\x3c\xe2\x8d\xab\x7b\x3c\x44\xb9\x08\x8f\xf9\xe6\xcb\x87\x82\xef\xbd\xdc\x3b\x3a\xdb\x7a\x61\xcc\x7e\xf0\x9d\x17\x16\x84\xf2\x7d\x17\xe6\x84\x8a\xcd\x14\xae\x59\x6b\xd9\x46\x0a\x13\x56\x9b\xe2\x23\x70\x49\x84\x35\x2e\x5c\x48\x6f\x2f\x5b\x06\xbf\xcc\xb8\x18\xa0\x6b\xb2\x63\xc3\x05\x61\x4a\xb2\x3b\xf2\x2e\xfc\xd5\x4a\xee\xbd\x93\x4e\x07\x4d\x88\xb3\x8b\xe1\xb2\x02\x01\xb4\x58\xad\x0c\x9b\x95\xcd\x3a\x1d\x83\x18\xdc\xda\xa9\xd3\x41\x0b\x06\x93\x11\xc3\x36\x20\x22\x06\x31\x84\x74\x75\x43\x8c\x2f\x18\xc8\x78\x10\x7b\xb6\xef\x1a\xff\x1f\xff\xe8\x74\xfa\xde\x65\x7c\xfb\xb3\xdf\xef\x65\x34\xcd\xd0\x05\x66\xa2\x83\x79\xd1\xcb\xe2\xb7\xf1\x8d\x5a\x59\xae\x61\xc0\x4b\xad\xbc\xe3\xbb\x7d\xef\xc9\x42\x2b\x34\x64\x20\xb7\x84\x51\x0d\xa7\xa4\xef\x8d\xe8\x78\xb2\x48\xd2\x27\x15\x48\xd5\xc7\x27\xaa\x8f\x63\x08\xd8\xe6\x4f\x6e\x60\x44\x5e\x32\x46\x67\x0c\x79\x4f\xe0\x11\xb9\x45\x14\x9b\x23\xa0\xc4\x30\xb8\xef\xef\x3b\x71\xbc\x23\xec\x14\xf6\xb9\xe3\x70\x4a\x6e\x75\xf9\x17\x26\x18\x2e\xf9\x69\xf1\x94\x07\xe6\x3d\xe1\x21\x79\x4d\xda\xe9\xa0\x13\x6e\x3b\x3c\x26\xe8\x64\x60\x20\x71\x2d\x14\xba\x86\x65\xb0\xff\x08\x3f\x57\x55\xc9\x86\xe1\x86\xd8\x1c\xc3\x88\x20\x23\x15\xa3\xb2\xf4\xbe\x31\xf3\xfe\x53\x9f\x4b\x2f\x23\x13\x9d\x74\x3a\x25\x34\xe6\x32\x0d\x9c\x72\x5b\x61\xe9\x10\x5c\x7b\xcb\x1c\xef\x07\xdc\xaa\xf3\xd9\x37\x07\x88\x4d\xb9\xe1\x34\x48\x8e\xe2\x11\x3d\xcc\x50\x8c\xf1\x6a\x35\x3c\x78\xfe\x35\xbe\x1b\x11\xf4\xec\x2b\x42\xc8\x70\x90\x96\x12\x05\xdf\xb6\xcb\x0f\x2c\xba\xa2\x92\x3d\x62\x2c\x04\x98\xa2\xb8\xee\x74\x76\x16\xbc\xd5\x09\x8f\xb8\x6c\x4b\x47\x2c\x87\x64\xac\xb6\x79\x45\x90\x59\xba\x31\xb8\x22\x87\xfb\xf3\x41\xc5\x9f\xe7\xd6\x61\xc9\xdf\x33\x36\xd8\x5b\x52\xb0\xba\xee\x74\x14\xf2\x2b\x93\xc2\x95\x3a\xed\x9e\x5b\x0a\x97\xcb\xaa\x84\x2b\xc2\x5f\xd0\x4b\x19\x6c\xdf\x70\x29\x19\x9b\xd4\x1c\x99\x57\xba\x1c\x46\x44\xfa\x15\xcb\xd1\xd3\x7f\x63\xe9\x57\x65\xe3\x0e\x89\xaa\xe7\xe0\xc0\xc1\xa6\x44\x24\xb3\x0f\x71\x43\x74\xa3\xe4\x4a\x80\x28\x29\x8d\x7b\xbb\x54\xca\xa8\x7c\x70\x30\x19\x7c\xe5\xf6\x3d\x36\x21\xb5\x29\xab\xb1\xc0\x72\xab\xdc\x75\x60\x82\xb1\xdb\x0c\xe2\xc5\xb3\x6c\x96\x05\x27\xf7\xc9\xea\x42\x9e\x39\x91\xd5\xdf\x49\x0d\x67\x0c\xe2\xc7\xfb\x84\x8e\xc3\xdb\xd6\xbd\x7e\x8c\x50\xc9\x6e\xb8\xa2\xc0\x36\x1c\x36\x8b\x93\x47\x6d\xea\x21\xca\x30\xdf\xd7\x95\xd7\x00\x15\x08\x8a\x3b\x0a\x60\x33\x38\xe9\x3f\x6d\xbd\xb8\x52\xda\x1c\x8a\xbb\x14\x9b\x69\x51\xe8\xb7\x1f\x13\x0d\x62\x46\xae\xd9\x22\x1b\x92\x59\x4f\xb4\x86\x7b\x17\xd0\x1b\x06\xb3\x62\x82\xee\x24\x4f\x67\xca\x01\x94\x5b\x97\x6b\x80\x01\x6a\x57\x73\xbd\xa7\x3e\xa8\x7d\xc0\xf5\x8c\x2f\xd8\x4e\xea\x4b\x33\x85\xcb\x8d\xb1\x9f\xc4\x70\x58\x61\x5d\xe7\xdd\x78\x9d\xa6\x95\xf9\xac\x1e\x5c\xaf\xe0\x66\x43\x00\x4f\xa2\x33\x9f\x4c\x0b\x9f\x85\xad\x9a\x7c\xc3\x50\x5b\x21\x43\x66\x3a\xa5\xf5\xa7\xe8\xb8\x17\x62\x12\xbf\x8d\x87\x41\xbb\x45\xa0\x1e\x0a\x95\x97\x78\xc0\xb4\x50\x1f\x8f\x07\x4c\x3d\x05\xe8\xe6\xaa\xaf\x9b\xa0\xa7\x0b\x3a\xe4\x56\xb5\x0f\x58\xa3\x96\x5b\x1d\x17\xb0\x1f\x38\x83\x2a\x81\x37\xd3\x7c\xd1\x02\xfd\x81\x89\x73\x6d\xc0\x37\x9f\x77\xfc\x13\x21\xbb\x6e\x58\xc6\x75\x40\x7b\x9f\xd0\xde\x92\x09\x66\xcb\x7d\xc7\xb6\x95\x40\xa0\x2e\xfd\x91\xe5\x00\xed\xcd\xe5\x41\xf3\x6b\xa0\xbd\x63\xa0\xbd\x53\xa0\xbd\xb7\x9a\xa5\x76\x4a\xb3\x57\xf9\x6c\xf6\x0b\x0d\x12\x44\x7b\x4b\x0c\x99\xee\x5e\x81\xe3\xa1\xbd\xe5\x46\x44\xd5\xb9\x4a\xfc\x48\xaa\xd8\x3f\xbd\x8f\x67\x47\xf7\x91\x57\xa7\xef\xe3\xd9\xd1\x43\x24\x96\x48\xef\xa3\x55\x23\x56\x3b\x22\xba\x5b\xba\x14\xe6\xae\x0d\x23\xd7\x81\xd7\xae\x0d\xc7\xae\x0d\xa7\xae\x0d\x6f\x5d\xbb\x68\x1c\x1b\x29\xcb\xa9\x51\x90\xd1\xb3\x70\x4e\xb9\xb8\x35\xe2\x77\x72\x4c\x4a\x62\x29\xb9\x90\xd9\xc2\x78\x94\x72\x81\x71\x14\x2c\x53\x2e\xc8\xa5\xd3\x38\xc9\x5e\xb0\x2f\x26\x90\xcd\xe3\x28\x9b\xa6\x30\x55\x19\xc7\xe2\x7b\x44\x2e\x51\x8e\x61\x4e\x2e\xd8\x9f\x25\xb9\x44\x33\x0c\xd7\xe4\x82\xfd\x99\x90\x4b\x34\xc4\x70\x4b\xc9\x05\xfb\x7b\x4a\xc9\x25\x1a\x63\x38\x61\xdf\x63\x0c\x87\xec\x7b\x8a\xe1\x8a\x7d\x4f\x31\x1c\x53\x72\x17\xb4\x29\x1a\x43\x8f\xbf\x0d\x78\x11\x2c\x11\xf6\x0b\x38\x6c\x83\x99\xd5\x61\x5a\xb5\xe8\xa9\x80\xe1\x94\x73\xa8\xef\x5a\x4d\x75\x9a\x50\x43\x97\xdf\xae\x8d\xdc\xd7\x40\xdd\xd7\x30\x76\x7f\x84\xd7\xee\x77\xf0\xc6\xfd\x08\x9f\xdc\xdf\xe1\xad\xfb\x13\xcc\xdd\x5f\xe0\xd8\xfd\x5b\x4d\x2f\xad\x6c\x99\x3d\x53\x3c\x83\x78\x1d\xe7\x49\x8a\xf0\x01\x13\x38\xfd\x02\x7e\x70\x6f\x28\xa4\xee\x4b\x0a\xa7\xee\xdf\x21\x77\xbf\x80\x8f\xee\x0f\xf0\xa3\xfb\x33\xdc\xb8\xbf\xc2\x4f\xee\xf7\x70\x2b\x6a\xfe\x59\xfc\x59\xba\x94\xc2\x2f\x6e\x46\xe1\x57\x37\xa2\x60\x3c\x31\xdc\x0b\x5a\xc0\xd9\x03\xdd\xf6\xf1\xec\xe8\x31\x3d\xa7\x81\xdd\xd7\x79\x1f\xcf\x8e\x1e\xd7\x7f\x35\xc0\xb2\x0b\x13\x0a\x94\xfd\x33\x76\x73\x0a\xaf\xdd\x90\xc2\x1b\x37\xa6\xf0\xc9\x0d\x28\xbc\x75\x53\x36\xaf\x67\x14\x8e\xdd\x21\x7d\xa0\x2f\x3f\x9e\x1d\xdd\xd3\x9d\x63\x0a\xb9\x3b\xa5\xf0\xd1\x5d\x50\xf8\xd1\x1d\x51\xb8\x71\xe7\x14\x7e\x72\x97\x74\xad\x53\xaf\x59\xa7\x4e\x58\xa7\x5e\x56\x9d\x7a\xd4\xe8\xd4\x9a\x33\x43\x69\xfd\xa6\x8e\x92\xab\xc5\x9f\x0c\x10\xed\xdd\x90\x5b\xea\x25\x9e\xed\xd7\x45\x7d\x1f\x22\x93\xa7\x2a\xeb\x22\xcb\xa9\x0f\x88\x5e\xc5\xf2\xa1\x2a\xae\x1f\x5b\xc3\xe5\x86\x1a\x0e\xe9\xfd\x55\xcc\xc9\xd5\xa3\x5b\xf1\xdd\x86\x3a\x4e\x1f\xac\xe3\xe4\xd1\x75\xe8\xc7\x5c\xc2\x6e\x44\x62\x7a\x57\x45\xb5\x2f\x60\xe4\x1e\x01\x75\x8f\x60\xec\xbe\x80\xd7\xee\x7b\x78\xe3\xbe\x87\x4f\xee\x07\x78\xeb\xbe\x81\xb9\x7b\x06\xc7\xee\xbb\xc6\xd9\x51\x45\xed\xe8\x7e\x62\x17\x64\xfe\x58\x5a\x7f\x70\x5f\x41\xea\xfe\x01\xa7\xee\x27\xc8\xdd\x97\xf0\xd1\xbd\x85\x1f\xdd\x53\xb8\x71\x6f\xe0\x27\xf7\x04\xea\xa2\x6a\xb3\x2d\x11\x4f\xaa\x1f\xd9\xd4\x4c\xc3\x39\x54\x2a\x1c\x36\xc0\xd2\xbd\x82\x5f\xdc\x43\xf8\xd5\x3d\xe6\x93\xf7\xad\x26\x66\x7e\xa0\x1b\xed\xed\xaf\xab\x10\xb6\xc4\xf3\x79\x14\x5b\xc8\x89\xcd\x37\x00\x3d\x26\x5a\xd3\x68\x8f\x69\xce\xd5\xce\x68\x46\x32\xcc\xeb\x6c\x0f\x3f\xfd\x9a\x7b\x55\xd5\x54\xb1\x94\x7b\x8e\x2a\x8f\x3f\x78\xaf\xe6\xdc\x9d\xa0\x0c\x2f\x16\x92\x85\x97\xc8\x32\x87\x19\x32\xcd\x14\xfb\x78\xd0\x48\x71\x43\x62\x70\x23\x83\x64\xc0\x6d\x80\x6c\x03\x50\xcc\xdd\xdf\x0a\x5b\xd4\x18\x45\x10\x62\x0c\xb2\xa2\x04\x43\xce\xcf\x53\xca\xb3\xb7\x36\x02\x02\xcd\xc0\xa1\xec\xae\xf7\xf7\x77\x57\x08\x29\xe4\x24\x40\xce\xb7\xb6\xcd\x4f\x0f\xdf\x31\x6c\x14\x22\x6e\x2a\x6b\xe3\x9d\xd2\x1d\x43\xed\xae\x8a\x69\xdf\x3f\x18\x61\xb4\x9d\xe3\xa6\x0c\x90\xf7\x7e\xe0\x88\x8c\x05\xcf\xef\x74\x50\xde\x7b\x4d\xf2\xde\xeb\x27\xce\xae\xe9\xec\x76\xf3\xde\x02\x83\xf1\xa3\x28\xcc\x24\x95\xbc\xf7\xe3\xbe\xb3\x5a\xe5\xbd\x1f\x0f\x9e\x3f\xad\xd5\x62\xdc\x70\xa8\xd5\x0a\xe5\xbd\x1b\xe2\x60\x30\x7e\xe5\x09\x03\x94\xb2\x7e\x8e\x51\x80\xf2\xde\x12\x63\xac\xb3\x7a\x08\x49\x7a\xf0\x6c\xb5\xb2\xf9\xf1\x64\xd2\x5b\x88\xb0\x8d\x21\x76\xcb\xfb\xdc\x05\x46\xa1\xf0\xdc\x3a\xeb\xc5\xe3\x71\x4a\x33\x14\xc2\xd7\x5d\x46\x89\xe5\x60\x0c\x79\x6f\x49\x42\x89\xb3\x14\x79\x58\xf2\xbc\x4c\x96\xbb\x00\xe4\xbd\x51\x99\xc6\x9b\x8f\x4d\x46\xac\xf9\x15\x7e\xf2\x35\x76\x05\x9d\x59\x8d\xce\x56\x22\xe9\x3a\x91\xb4\x24\x32\xb8\x9f\xc8\x36\x0a\xd7\xc8\x5b\xa3\x4d\x98\x70\x19\x3f\xc9\x1e\x36\x3e\x8a\x01\xe9\x74\x50\xbd\xd7\x8d\x5c\x74\x79\xde\xcb\x9f\x7c\xed\x4a\xf8\x81\xe3\xda\x4c\x57\x54\xe3\x51\x8e\x84\x3e\x10\x6e\xa6\xa7\x8a\x66\x33\x02\x6d\x4e\x95\xc2\x54\x52\x64\x7e\xdd\xcd\x7b\x3f\x59\x28\x35\x9f\xe3\x27\x5f\xbb\x2c\x99\xa5\x7c\x64\x29\x9c\x62\x39\xf7\xcb\x39\x90\xf7\x5e\x9b\x24\xef\xfd\xda\x77\x6c\x7b\xc5\x90\x1e\xf3\xcf\x27\x8e\x6d\x43\x8c\x72\xcc\x08\xc8\xf5\xa5\xa0\x31\xd5\x3b\xcd\x5d\x95\x3a\x03\xad\xbc\x6d\x46\xba\xd3\x2a\x3e\x47\x93\x03\xa2\x66\xba\x88\x70\xc8\x19\x03\xb7\xbf\xd6\x78\x43\x60\x9a\x18\x73\x78\x95\x21\x13\x61\x07\xc5\xe4\x88\x7a\xe1\x76\x18\x6d\x2f\x06\xb5\x3c\x37\xf4\xf1\x6a\xc5\xd7\xbc\xd8\x03\xaa\x7b\x61\xcb\x11\x56\x56\x0c\x21\x5b\x88\x5a\x55\x09\xab\xaa\x84\x52\x2c\x5d\xfd\x38\xa6\xbd\x5b\xf2\x81\xa2\x08\x8e\x29\x13\x41\x7b\x3f\xb3\xaf\x54\x7d\x0d\xd9\x57\xc6\xbf\xce\x4a\xc8\x33\xf1\x25\x21\xe5\x97\x84\x64\x5f\xe5\xf9\xc4\xda\x13\x06\xc6\x91\x39\xbb\x38\xd6\xdc\x47\xdc\x7b\xf0\x51\x40\x56\xc0\x22\x48\xd2\x36\x1f\xf0\xef\x15\xba\xf0\x73\xb0\xe5\xd9\xf0\xd5\x83\x04\x9e\x7d\x16\x81\x79\x36\x7c\x7f\x0f\x8d\xba\xab\xb2\x07\x91\x09\x8b\xb3\xf2\xfe\x12\x16\xe4\x8e\x1f\x29\x1a\x70\xe1\x1a\xdb\x06\xd8\x6c\x0f\x28\x60\x44\xfa\xbf\x9d\xa7\xdd\xf3\x91\xd9\x87\x39\xe9\xff\xf6\xa4\xcf\x1f\x52\x9c\x9f\xff\xf6\x45\xd7\x1c\xac\xbc\x73\x1f\xe1\xde\x5d\xe1\xf7\x27\xd5\x86\x78\x5d\xdf\xf1\xe9\xbe\x3d\x90\xa8\x43\x82\x92\x81\x45\x5d\x8a\x4d\xc3\xd0\xbc\x22\x96\x22\x80\x89\xe2\xfd\x48\x3b\xda\x8b\xac\x58\x3b\xda\x33\x43\x37\xd4\x94\xb5\x49\xcd\x92\x55\x1d\xa8\x2f\xc1\x38\x3f\xff\xa2\xa3\x47\xb0\xb8\x6c\x5c\xfc\xcb\x47\x1d\xc6\x6f\x68\xe0\x1a\x26\xe5\x7e\x24\x26\xea\x8a\x67\x65\x60\x93\x1b\x5b\x85\x46\x33\x44\x47\xf5\xfa\xfd\xae\x50\x06\x7f\xb4\x61\xf0\x97\x79\xd4\x8b\x9a\xe2\x0b\x89\xaa\xd7\xe3\x25\xca\x9b\xfb\x05\x23\xe0\x51\xb2\x1a\x02\x29\x97\x82\x5a\x84\xa1\x12\xe9\xcb\xcf\x46\x9a\x3f\x8c\xf4\xf6\x41\xa4\xbb\x0d\xa4\x1f\x1f\x46\x7a\xfa\xd9\x48\x7f\x7c\x18\xe9\xc9\x67\x23\xfd\xe9\x61\xa4\x87\x0f\x22\x7d\xd6\x40\xba\x7c\x18\xe9\xd5\x67\x53\x2a\x91\x9a\x88\xff\x39\xf8\xea\x9b\x01\x93\x91\xdc\x5d\xfa\x14\xdf\x57\x51\x23\x4c\x7e\xff\x37\xf4\x2b\x5e\x21\xcf\xb4\xfc\xf3\xd1\xf9\x08\xa3\x81\xeb\x0e\x10\xff\x89\x07\xfd\x75\x2a\xbe\x6a\x50\xf1\x2b\x49\x3c\xc7\x1f\xd8\xae\x85\x12\x6f\xd7\x37\x51\x22\x2c\x58\x6c\xdb\xc0\xf7\xd2\x71\xf6\xd9\x0d\x9e\xf3\x17\x4b\x96\x73\x1f\xd6\xa3\xcf\xc6\x3a\x7a\x78\x6c\x3e\x3c\x88\xf4\xe9\x1a\xa9\x36\x3c\x0a\xf5\xfb\xcf\xa6\xf7\xf5\xc3\x48\xdf\x7d\x36\xd2\xe3\x87\x91\x7e\xfa\x6c\xa4\xa7\x0f\x23\x7d\xf3\xd9\x3d\xfb\xf6\x61\xa4\x2f\x1e\x44\xda\x9c\xc4\x6f\xf5\x37\x8c\x0c\x6f\xdf\x79\x60\x15\xbd\xad\xd7\x31\x7f\x80\xaf\xd6\x30\xd5\x10\xbd\xfa\x2c\x75\xf8\x87\x87\x5b\xff\xc7\x67\x22\x74\xe8\xd3\xee\x83\x48\x5f\xd7\x74\xb4\x6b\x44\x2b\x91\x1d\x32\xd8\xd5\x36\xc6\xef\xda\x20\xe5\x99\x51\x03\xf4\xe3\x3d\xa0\x4f\x9c\xdd\xd5\xca\xd9\x6d\x94\xf8\xbd\x51\xc2\x31\x99\xf2\x31\x8c\xf3\x28\x43\xa5\x5e\x72\x85\x11\xc5\x40\x59\x6d\x4f\xb5\xb2\x3f\xb5\xd5\x76\x1c\xce\x66\x61\x4a\x87\x71\x34\x12\xf4\xe9\x25\x7e\xac\x95\x10\xe5\x4d\xc3\xb6\x6d\x2d\x8a\xd4\x2f\xad\x58\x85\x72\x63\x3a\x0d\xf2\xff\xd6\x4e\x42\x94\x67\x74\xbd\x77\xfe\xde\x06\x7c\xaa\x91\xaa\x03\x7f\xa1\x9f\x3a\x2b\x65\xa6\x16\x5e\x7b\xf0\xb5\xab\xc9\x1a\x3f\x34\x90\x27\xbd\xe9\x3d\xdd\xa8\xd7\xf4\x73\xdd\xc5\x4d\xb3\x2e\x4a\xa2\x03\x22\xf5\xc6\x68\x50\x22\x0b\x19\x32\x37\xe9\x85\x42\x8d\xa4\x18\x58\x9d\xe1\xa6\x3a\x4d\xf4\x8c\x10\x52\x4f\x2e\xab\x6a\x52\xf4\x6b\x4d\xec\x53\x50\x55\xfe\xf7\x6b\x6d\xa5\x8f\x6c\x2b\xa5\x6d\x63\x50\xa9\xb3\x5c\x93\xab\x17\xc9\x1e\x2c\x42\x9f\x41\x06\xcf\xb4\x22\x11\x6d\x0c\xde\x59\x38\xa7\x7f\xc4\x11\x3d\x11\x4a\x75\x15\xd4\xf4\x40\x08\xce\x28\xeb\x32\x59\xd3\x30\x0d\x8c\xcd\x6b\x94\xf5\xbf\x62\xea\xa5\x61\x1b\xb0\xcb\xbf\x9f\x7c\xa5\xbe\xaa\x4a\x92\x56\xba\xca\x33\x81\x46\x2b\xc2\x4d\xd0\xed\x0b\x39\x7e\x00\xbc\x7d\x31\x07\xcd\x52\x6c\x35\xcf\x9a\x43\x73\xdd\xbe\x9a\xd3\x4d\x55\xde\xbb\xa2\xf3\x7a\x29\x89\xa4\xb9\xa6\x67\x1b\x71\x6f\x58\xd7\xc3\xcd\xc4\xb4\xaf\xed\xf1\xa6\x02\x9b\xd6\xf7\xb4\x39\x47\xd4\x19\xc6\x3d\x6b\x7c\xd1\xac\x24\xe9\xa5\xf7\xf4\xae\x5e\xdd\x88\xae\xad\xf2\x66\x85\x1b\x16\x7a\x26\x17\x7a\x56\x5b\xe8\xd9\xa6\x7a\x1b\x0b\xfd\x5a\x2d\x74\x55\x5b\x93\xb0\x39\x6d\x2e\x76\x05\xa9\x05\xdb\x5c\x6f\xf7\xe2\x91\xed\xbe\xde\x34\x2e\xf7\xae\xf9\xc9\x63\x4a\xad\x2d\xfb\x4b\x5a\x6a\xe0\x86\x69\xd7\x67\xe0\x85\x96\xf7\x44\x4b\xbf\xd1\x9a\x6f\x52\x4d\xcb\xa3\x4d\xf3\x02\x21\xca\x98\x94\x0b\x32\x9a\xe6\xa6\x03\xe6\xe2\x7d\xca\x8c\xe4\xca\x06\x62\x48\xf2\x1e\x3f\xf5\xe0\xf1\xbd\xca\x13\x0b\x98\x8a\x2f\x7e\xd8\x00\x79\x71\x4b\xd1\x9d\xba\xda\x74\x8d\x27\xb7\xb0\xfd\xe4\x67\x03\x58\x8a\x6b\x3c\xb1\xe6\xfd\x27\xd6\xa8\xff\xe4\x17\x03\x32\x91\x6f\xbd\x71\x9f\x1c\xbb\x4f\x4e\xb7\x9f\x2c\x0c\x90\x77\x9e\xae\x67\x1c\x1e\x1b\x60\xbc\x3f\x36\x7c\x18\x05\x4b\x96\x70\x9a\x47\xa3\x60\x69\x80\x71\x1c\xcb\x1f\x67\x39\x4d\xc5\xaf\x9f\xe8\x28\x52\xbf\xcf\xa6\x79\x22\x7f\xbe\x4a\x42\xf1\xe3\x34\xc8\xf2\x84\xfd\xf4\xa1\xbc\x40\x15\x28\x05\x3e\x81\x4c\x20\x12\x28\x44\x69\x51\xd4\xf0\x41\x5c\xb4\xba\x9e\xf1\x7d\x10\xe5\x41\xc2\x91\xd3\xcb\x44\xfe\x3c\x0e\x92\xe1\xd4\x00\xe3\x70\x91\x84\x33\xfe\xcd\x52\xbf\xcf\x23\xca\xff\xcc\xd8\xd7\x61\x3e\xc9\xd3\x8c\x21\xa4\x8b\x8c\xf2\x17\xfc\x60\x9c\x0c\xb3\x58\xfc\x7a\x17\x5f\xab\xc4\x17\x74\x28\x7e\x4a\x62\x8f\xb5\xba\x45\xbd\xa2\x4a\x51\xa1\x5e\x9d\xa8\x4d\x54\x26\x6a\x12\x75\x08\xfc\x02\x75\x69\x7c\x72\x4a\x09\xbf\xef\xd6\xed\xf2\xdf\x9c\x9e\x88\x73\xa0\x36\xc3\xc4\x1a\x00\xc2\x85\x3b\x46\xc6\x93\x5f\xac\x27\x73\xeb\xc9\xe8\xec\xc9\x6b\x31\x8a\xbd\x27\x6f\x7f\x35\xf8\x75\xb2\x59\x1e\xa9\x1b\xbb\xb6\x6d\x5b\xb6\x63\xd9\xce\x99\x6d\xbb\xfc\xff\x3d\xdb\xb6\x7f\x35\xf0\x60\xfd\x6c\xaa\x32\x18\xa8\x5e\x94\x97\xfe\x71\xf2\xd9\xcc\xcd\x0a\x77\xba\xb1\xe6\xad\x32\x22\xfc\x9c\xbe\x7a\x9c\xd9\xc9\xad\xee\x64\xaa\x2c\xf6\xc0\x73\x1c\x06\xc8\x27\xfc\x03\x36\x2a\xe5\x2a\x79\xc0\x40\x45\xad\x9f\x36\xb0\x69\x1b\x7d\x9b\xdb\x93\x56\xe0\x61\x1a\x6f\xae\xfd\x94\xd6\x00\x37\x56\x7f\x42\x0b\x5c\x00\xc0\x63\xbc\x5d\x69\xa5\x2b\x39\x09\x35\xe2\xb9\xda\x7b\xd1\x7e\x15\x80\xc1\x34\x4b\x2f\xec\xdc\xdf\x40\x8f\x0a\xe3\xd5\xcb\x19\x25\xfa\xc7\x6a\xb5\xe3\x00\x77\xa4\x3d\x0e\x27\xb9\xc8\xdf\xb1\xc1\xe0\x7e\x16\x8c\x30\xda\x4e\x78\xd0\xac\x9b\x24\xcc\x64\x1e\x06\xc1\xd1\x7b\x22\x4e\x9c\xee\x99\xbd\x77\x45\x97\x90\xe0\x62\xed\xed\x7a\x56\xbb\xc7\x8c\x3a\x1d\x8a\x32\xed\x19\x4b\xc4\x03\xe2\x50\xfe\x88\x18\xb2\xa2\xe0\x57\x21\x9e\x77\x37\x8c\x67\x71\xe2\x1a\x36\x6c\xb3\xff\x1b\xc2\xbf\xb8\x6b\x04\x51\x1a\x5a\x97\xb3\x60\x78\x65\x14\xa0\x80\x9c\x6f\xbe\x6e\x03\x4b\xe8\x48\x03\xb2\x61\x5b\xc0\xd5\x81\x26\x09\xa5\x51\x13\x57\x1b\xe0\x92\xce\x66\xf1\x4d\x1d\xa1\xc0\xd9\x24\x2e\xa7\x2d\xb4\xad\xc1\xcd\x83\x09\x8d\xb2\xa0\x85\xc2\x35\xd0\xe1\x32\xd0\x49\xdc\x7d\xfe\x1c\xe4\x7f\x75\xb8\x9b\x69\x98\x51\xa3\xf0\xa1\xec\xbe\x6f\x9e\xc3\xb6\xf8\xaf\x41\x64\x12\x4e\xa6\xd9\x5a\x47\x32\xac\xf7\xc1\xaf\xf5\x28\x2f\xd0\x1c\x1d\x01\xdb\xec\x58\x0e\x2a\x2b\x68\x2d\xb0\xd6\xc1\x8a\xf8\xb5\x76\x96\xd4\xd7\x7a\xba\x24\x7e\x13\xfc\x7a\x8f\x7f\xa3\x48\xda\x54\xa4\xa5\xe7\xef\x2f\xa0\x86\xc0\xd7\x3d\x29\xd7\x96\x2e\xbe\xdb\xa9\x1b\x04\x0a\xbf\xad\xfa\x15\x74\xa6\x3f\x7b\x3b\x5b\x2e\xa8\x7c\xfa\x76\x14\x44\x51\x9c\x6d\x0f\x83\xd9\x6c\x3b\xd8\xe6\xb5\x6f\x07\xe9\x76\x50\x2e\x36\x03\x17\xca\x77\xbc\x78\x4b\x36\x9e\x88\x87\x57\x97\xf2\xef\x78\x72\x91\x25\x39\xe5\xcd\x51\x39\x5a\x4a\x15\x33\x5f\x34\x87\x94\x5e\xf4\x13\x19\x49\x1b\xbc\xbb\x2b\xba\x74\x0d\x9a\x0e\x83\x05\x63\x9c\xaf\xb3\xf9\xcc\x90\xf1\x39\xab\x35\x5f\x3e\xfd\x61\x2d\xa0\xb8\x57\x03\x47\x19\x2e\x0a\x10\x78\x66\x61\x74\x15\x8e\x97\x0f\x63\x90\x80\x7a\x59\xd6\xef\x67\x71\x3b\x01\x95\x21\x81\x42\x50\x41\x23\xe1\x2d\xae\x86\xe5\xfb\x94\xc9\x2c\x8f\xc5\xc2\xa0\xdb\xb0\x9c\xd1\xdb\xec\xe1\xa6\x54\xb0\xbc\x35\x3e\x06\xd6\xbb\xb2\x63\x53\x9a\xe5\x8b\xf7\xc1\x8c\x66\x19\x5d\x43\x25\xbd\x0a\xbf\x3f\x7c\xfb\xf2\xec\xec\xe5\xc5\xd1\xc9\xdb\x93\x0f\xa7\xca\x99\x95\x8c\x00\xb4\x47\xf7\x77\xf7\x4c\x93\xe2\xea\xb6\xc4\xde\xcb\xf6\xbf\xe1\x21\x88\x5a\x8a\x4b\x17\x0d\x1e\xf5\xbd\xcc\xef\xf1\x79\xa0\xfb\x2b\xf5\x6c\xf8\xf6\x39\x38\x4f\x9f\x83\xf3\xf5\x73\xd8\x75\x38\xdb\xf1\xa1\xfe\xf4\x55\x67\xf0\x1e\xf5\x4d\x03\xb6\x0d\x33\xf2\xb2\xf2\x57\xe2\x17\x32\x06\xd5\x57\xf5\xe8\x8d\xc4\xde\x0b\x78\x5a\x50\xa6\x89\xd0\x64\x5f\xf1\x88\x61\x1b\xe9\x4d\x90\x70\x6e\x52\x91\x9a\x93\x6f\x64\x34\xc4\xdd\x67\x7b\xa6\x39\x83\xdc\x24\x8e\x7d\x1f\x86\x1c\x72\xc8\x71\x35\x86\xf7\xcf\xe9\xb6\xbb\xae\xbe\xd7\xd9\x3f\xf0\xfb\x93\x79\x8b\xd7\x3a\xa3\x63\x10\x42\x07\x46\x27\x98\x2f\xf6\x0c\xd7\xd8\x97\x9f\xb3\x8c\x7d\x1d\xc8\xaf\x09\xff\x32\x8a\x87\x57\x44\x6b\xfd\x68\x9a\x65\x8b\x74\xe0\x9e\xf7\xcf\xfb\xde\x6f\xe7\xa9\x6f\xe2\x76\x6a\xbe\xdc\x0f\xb6\xa7\x09\x1d\x13\xe3\x4b\x93\x9a\x5f\x1a\x07\xec\x8f\xb1\xdf\x0f\x0e\xf4\xba\xef\x59\x51\x6b\xae\xc6\x17\x49\x3c\xa4\x29\x77\x5d\x09\x3b\xf6\xa3\xd6\x93\xfe\x26\x30\x23\xd9\x6a\x75\x57\xe0\xde\xa7\x34\x8e\xf8\x8b\x93\xde\x70\x46\x83\xe4\x6d\x18\x51\xb2\xe3\xc0\x23\xea\x68\x5d\x6d\x74\x13\x95\x77\x05\xec\x38\x15\x0a\x99\xd1\x46\x63\x3d\x50\xa0\x78\xb0\x23\x1c\xdf\x9f\xdb\x4f\x9f\x9e\x7b\x7d\xcc\xaf\x4e\xd3\x69\x38\xce\x90\x8a\xaf\x22\x9c\xfe\x72\x27\x50\x5a\x43\xfa\xe7\x89\x7c\x31\x20\x1f\x29\x07\x24\x5c\x73\x9b\xaf\x58\xac\x22\xf6\x68\x9a\x47\xea\x7a\xaa\xe0\xa6\x33\x59\xa7\x93\xf1\x8e\x52\xde\x5b\xf4\xb6\x71\x70\xce\x91\x0c\x43\xf3\x6d\x32\x94\xb1\x35\x62\x48\x35\x82\x34\xe2\x20\xe8\xe5\x91\x68\x44\xca\xa8\x16\x2e\x42\x2e\x78\x6c\x30\x1e\x3a\x36\xe8\x89\x90\xa7\x2d\xc4\xee\xd0\x5e\x98\xbe\x64\x90\x88\x7b\xa6\x2b\x83\x93\x55\x38\xe3\xba\xfd\x51\xbd\xdb\x4b\x9a\xef\xef\x7f\x94\x91\xeb\x38\x1c\xc9\xd3\x96\xbb\xc2\xcd\x70\x2f\x4f\xe9\x85\x08\x36\x93\xca\xcc\x1d\x42\x32\x3d\x99\x75\x96\xf6\xc9\x3d\x5f\x5e\xd1\x25\x49\x06\x32\xfe\xbb\x6b\x70\x36\x67\x40\xc0\xfd\xad\xb3\x6e\x72\x29\x8c\x27\xc2\x56\xf2\x52\xfe\xd5\xf7\x4a\x95\xd3\x4c\x29\x3b\xd3\xd5\x3b\x76\x44\x87\x71\x12\xb0\xe6\x08\xa8\x9b\x20\xbd\x90\x0d\xa7\x23\x77\xc7\x01\xd9\x77\x2d\x11\xd8\x02\x35\x6e\x45\xc1\x6d\x97\xb9\xdf\x65\xd4\xff\x0d\x79\x3b\xe7\xb7\x4f\x87\xd6\xf9\xed\xd3\xb1\xdf\xc5\xc8\x3b\x1f\xed\x89\xbf\xb7\xbb\xb6\x75\x7e\xbb\x3b\xf4\xbb\xde\xf9\xed\x33\xf6\xfb\x6b\xea\xb3\x8c\xf4\xfc\xd4\xef\xe2\xfe\x5c\xbc\x01\x4d\xcb\x38\x72\x5b\x65\x1d\x24\xf5\x9e\xf9\xe2\x1d\x35\x49\xbd\x5d\x5f\xb9\x81\xd9\x13\xb1\x7a\x0c\x63\x87\x90\x54\xbc\xa4\x9f\x8b\xdf\x4f\xfd\x0a\x4d\xed\x65\x69\xc0\xf9\x30\x9f\x96\x55\xeb\xb9\x3c\xb1\xa7\x5c\xf2\x1c\xd8\x7b\x62\x5c\x67\x24\x57\x8b\x07\x86\x84\x9f\x7f\xbc\x89\x32\x34\xe3\x95\x0a\xcd\x74\x88\xc5\x49\xd7\x10\xb7\x8a\x31\x8d\x2a\xb6\x94\x51\x8c\x53\x15\xd1\x40\x8c\xcb\x78\x36\x32\x4a\xa0\xdd\x76\xa0\x51\x38\xaf\x60\x9e\xb6\x82\x84\x59\x30\x0b\x87\x15\xd4\xb3\x56\xa8\x3c\x1a\xd1\x64\x16\x46\xb4\x02\x7c\xde\x4e\x16\x63\xf5\x15\xd0\xd7\xed\x74\xc9\xc7\x90\x15\xdc\x37\xed\x70\xd3\x70\x34\xa2\x51\x05\xf6\x6d\x3b\x18\xd3\x2e\xaf\x28\x13\x2f\xf3\xc9\x54\x6b\xf0\xb7\x7a\x67\xd7\x3a\xf5\x59\x95\x75\xd9\xc8\x1a\x1e\x90\xa7\x76\xa7\x33\xdc\x7f\xfa\x4d\x59\x36\xf4\x6c\xdf\x1b\x3e\x71\x6c\xdf\x8b\x7d\x1d\xf2\x5b\x0e\xf9\xad\x0e\xe9\xb4\x43\x3e\xe3\x90\xcf\xbe\x29\x2b\xdd\x88\xd3\xb1\x39\xa8\x63\xeb\xb0\x6d\x58\x9f\xf2\x5e\x5b\xad\x9e\x89\xde\x93\x01\x7d\x45\x2a\x8f\xb6\xaf\x26\x29\x71\x44\xe6\xb4\x9a\xa4\x7c\x2d\x3c\x37\x08\x21\xd3\x4e\x67\x0d\x70\x51\xcd\xe0\xb2\x04\x2f\xb2\xe0\xc1\x4e\x16\xfb\x64\xf7\xf9\x73\x1c\x8e\x91\x74\xbd\x35\x22\x8b\x03\xe2\x7c\x35\x10\x6a\xc3\x42\x48\x7a\x96\x61\x2e\xdc\xd0\x5b\x1c\x7c\x3d\x70\x5c\xdb\xf7\x16\x4f\xbe\xf1\x7b\x9c\x59\x6d\x8d\x07\xaa\xbf\x46\xae\x6a\xe3\x48\x98\x81\xb5\xc8\x36\x32\x36\xae\x2e\x45\x22\x0c\x15\x8e\x96\x22\xde\xc2\x77\x6b\xab\x6b\x2d\xbb\x34\x3a\x33\x76\xd7\x7a\xe1\xa9\x68\xd5\xbc\xad\x17\x60\xd9\x9a\x7a\xbd\xa9\xc7\xe6\xbc\xc7\xe6\xbc\xc7\x3a\x9d\x25\xff\x5a\xca\xaf\x6b\xfe\x75\x2d\x7a\x93\x57\x39\x21\x73\x21\x5e\x2e\xc5\x9f\xeb\xad\x64\x30\x1e\x20\xd5\x52\xd1\xbf\x25\xbf\x36\x60\x5d\x01\x9a\x60\x17\xa9\x96\xb7\x83\x5f\x36\xc0\xab\x8e\x9c\x94\x7d\x36\x29\xd8\xff\x34\x33\x55\x42\x94\xb2\xd5\xe9\xe8\xdf\x97\x8d\xef\x6a\x59\x0e\x02\x17\x05\xe5\xf0\x8c\x27\x10\x94\x83\x71\xc9\x3e\xd6\xd5\x36\x3d\x85\x43\xdf\xa7\xd7\x41\xa0\xb3\x80\x46\xdd\x10\xf4\x6a\xfb\x13\x93\xc5\x82\xf6\x0d\xfb\x61\x61\x69\x4b\x8a\x75\xd2\xc9\x40\xbb\x98\x22\x4a\x71\xb9\x46\x08\x35\xea\x50\x92\xf3\xff\x4a\xb0\x90\xe9\x86\xc1\xb7\x9a\xb0\x4e\x66\x59\x48\x6d\x66\x5b\xc2\x7b\x53\x7d\xeb\x97\x66\xdf\xdc\x69\xe2\x5d\x01\xb3\x96\xf8\x18\x9e\x0f\x91\x14\x24\x2a\x97\xa0\x14\xd3\xde\x34\x48\x4f\x6e\xa2\xf2\x8c\x2b\xc2\x4c\xae\x10\x9e\x0d\x47\x41\x16\x58\x86\x19\x99\x5f\x32\x79\x3a\x69\xa8\xb7\xd4\x8b\x7c\x6c\x7e\x69\x7c\xa9\x99\x03\xaa\x2d\x70\x60\x6c\x1b\x66\x26\xe5\xa2\x6d\x03\x33\xd9\xbf\x3c\x94\xe5\x33\x06\xc5\x03\x24\xfd\x2e\xb2\x04\xd3\xb0\xc6\x93\x32\xbe\x34\x09\x6b\x23\xdf\xe9\xa0\xdc\x6b\xcc\x5c\x06\xee\x37\xe0\xa0\xfe\xc9\x99\x38\xc6\xae\x72\xd4\x28\x04\x9a\x64\x72\x89\x0c\x53\xd4\x89\x0d\x1e\x0e\xff\xb2\x49\xcf\x25\xa3\xe7\xb2\x46\xcf\xe5\x43\xf4\x5c\x0a\x7a\x2e\xeb\xf4\xac\x9d\x3b\x68\xf4\x5c\x06\xc3\xab\x09\x77\xb9\x60\xd5\x49\xbb\xac\x48\xab\x26\x30\x27\x51\x52\x28\xea\x66\xa0\x55\x3e\x76\x85\x00\x40\x18\xb5\xfa\x9a\x93\x45\xc6\x71\x94\x59\x37\x34\x9c\x4c\x33\x97\x03\x62\x97\x0b\x03\x9b\xe0\xa5\xf3\x2d\xd7\xee\x3d\x67\xa0\x52\x28\xb8\x17\xbb\x08\xe5\x29\x21\xb1\x5b\xee\xe9\x1b\x0b\x71\xb9\xdb\xe5\x41\x64\x32\xe4\xd8\xf6\x13\xcc\x8a\xc9\x2d\x7e\x53\xa9\xeb\x30\x0d\x2f\xc3\x19\xa3\x4d\x42\x62\xb7\xb1\xdf\x6f\x2a\x9a\xd1\xdb\xcc\xd2\xc4\x56\x26\xbe\x58\xaa\x50\x35\x30\x4d\xb0\x46\x47\x63\x88\x07\x5f\xee\xa7\x8b\x20\x12\x87\x53\x6c\x71\xa4\xd5\x5c\x67\x4b\xc2\x9c\xa1\x1c\x9b\xc6\x01\x2b\x29\x17\x2e\x53\x43\x59\x99\x03\xc3\x95\x85\x79\x77\xb1\xc2\x4a\x81\xd8\x7b\x44\x61\x7e\x90\x42\x0b\x84\xb7\x68\x8f\xde\x2e\xe2\x24\x4b\x49\xbc\xfe\x98\xb3\x8c\x21\xb1\xdb\x1e\x12\x20\x22\x95\x6a\x3a\xa2\xb3\x70\x1e\xf2\xf0\xf5\x46\xcf\x80\x90\x64\xbd\x79\x70\xfb\x82\x2e\xb8\xb3\x8c\xbb\xa2\xf9\x22\x7a\x9b\x22\xe1\x35\xfd\x2e\x27\xf9\x6a\xe5\xa8\xd3\xf2\x2b\xba\x4c\x51\x80\x7b\xe3\x38\x79\x59\x0b\xc9\x3c\x13\x75\x0e\x49\xe0\xcd\x7c\x18\x93\xac\x97\x06\x63\xda\xe9\xd4\xfd\x3b\x0f\x31\x4c\xe5\x9d\x6d\x8b\xcf\x27\x11\xb4\x6a\x88\x61\x41\x12\xf6\x67\x44\xd2\x41\x6a\x46\xe6\xcc\xe5\xaf\x32\x76\xc6\xf2\x89\xbf\xe1\x09\xbf\xc5\xdb\x02\x93\xcf\x77\xf2\xd5\xaa\x4c\xe6\x75\x89\x54\xdc\xe9\xe8\x94\x0f\x71\xe5\x60\x7c\xa7\xea\x82\xd5\x2a\xdf\x0f\x71\xe9\x5a\x06\x0d\x61\x04\xb9\xe9\xe0\xad\xd8\x1b\xf9\x64\xc8\xc3\xb6\x61\x88\x8b\x6a\x38\x42\xc6\x87\x66\x41\x96\xd1\x88\xff\xce\x23\xf5\xa5\xf5\xa0\xe6\x6d\x10\x45\x24\x6a\x1d\x89\x98\x44\xbd\xf8\x9a\x26\x37\x49\x98\x89\x6b\x8c\x80\x0d\x07\x13\xb2\x50\x86\xb5\x46\xa9\xb6\xee\x90\x87\x3a\x30\x2b\x5b\x92\x55\xf3\x42\x7b\x5c\xfa\x8e\xfb\x08\x6f\xb9\x42\x5b\xad\x2c\x67\x87\x34\x02\xde\xad\x56\x51\x4f\x90\x30\xa0\x6e\xf9\x2c\x56\xef\xd4\x0c\x8b\xb0\xe9\xad\x07\x2c\x65\xe8\x02\xb5\x71\x14\x2d\x93\x47\x7b\xb4\x90\x93\x44\xea\x6e\x21\x86\x19\x49\x75\x69\x6b\xc8\x3e\x79\x50\xa7\x31\x09\xf6\x4a\x8d\x79\xb8\xa7\xe4\xdc\x07\x3a\x66\xec\xcd\x7c\x36\xb9\x3e\x63\xfe\xf0\x79\x17\x8b\x79\x57\x56\xc8\xf1\x88\xf6\xed\x21\x9e\xb9\x5a\x31\x20\x21\x11\xf1\xdc\x4e\x87\xd7\x46\x94\x43\xf6\xd2\xbb\xf7\x50\xeb\xcf\xbb\xc2\xf5\x78\x63\x18\x28\x54\xca\x65\xa7\x83\x36\xb5\x1c\x17\x1c\x2d\x45\x99\x97\xf8\xfc\x50\x05\x82\xa2\xce\x1a\xf0\x5d\x35\x4d\x5b\xce\x66\xc4\x6e\x47\x05\xb5\x3b\xdc\x35\x4b\x19\xa6\x4d\xf7\x47\x5e\x39\x0e\xd7\x21\x7a\x61\xfa\x5d\x3e\x1e\xd3\x84\xc7\x38\x6f\x49\xe7\x01\x97\xd7\x58\x55\x3b\x45\xca\x00\xbe\x9a\xa5\x7c\x2a\x30\x69\xca\x4b\x4a\xf5\x9c\xfd\x56\xc5\x95\x30\xe6\x25\x3e\xb9\x0b\xdd\x04\x66\xee\x8e\x03\x32\xd3\xbd\x2b\x8a\x2a\x3c\x5c\xe2\xcb\x18\xec\xaa\x2c\xb0\x75\xaa\x7e\x47\x6c\xe3\x9d\x31\x01\xb1\x4c\x2b\xe5\xde\xde\x9c\x50\x88\x7a\x43\x92\x41\xd4\x1b\xad\x9d\x0e\x47\xbd\x98\x77\xf3\x6a\xb5\xe9\x06\x31\x83\xbb\xea\x6a\xd2\xdd\xb1\x79\xec\xbb\xa4\xc0\x05\x44\xbd\xa4\xd6\x03\x5c\xc3\x66\xa5\x47\xd5\x0c\x39\xe5\x8e\x74\x3a\x1d\xf1\xb7\x9c\xc2\x67\xc1\xa4\xe4\x65\x6b\x35\xae\xc3\xc2\x9d\x10\x70\x8d\xe3\x78\x94\xcf\xa8\x51\x6c\xbe\xf0\x34\x2e\x2e\x68\x2a\xc1\x54\xb1\x1d\x5b\x90\x9b\xad\xfb\x85\x74\x3a\x19\xf7\x84\x12\x71\xe7\x32\xdf\x74\xb2\x92\x6f\xb2\xc5\xf2\xac\xd3\xe6\x57\x9e\x76\x3a\xec\xff\xbd\xaa\xa6\xaa\x90\xd8\xc6\x24\x71\xc2\x87\x2e\x77\xf6\x83\x45\xc4\xbb\x04\x25\x9b\x48\x4f\xc0\x90\xce\x4f\x8c\x66\x8f\x8b\x56\xd0\x02\xc3\x2e\x27\x48\x06\x42\x28\x3b\xb9\xba\x53\x08\x85\x90\x1c\xf5\x46\x28\x81\xb0\xdd\x77\x52\xe6\x17\xbd\xcb\x30\x1a\x71\xba\x20\xd4\x0c\x61\x59\x1f\x45\x2d\x93\xba\xd1\xda\x41\xcb\xd3\x19\xe5\x35\xb9\x68\x89\x2e\x48\x8b\x2a\xaa\xbf\xf2\x60\x9a\x61\xc8\x58\x75\x71\xbb\x17\x8e\x35\xde\x57\x17\xfa\xc5\x62\x10\x9e\xd6\xa2\xde\x82\x87\x36\x45\x51\x2f\x25\x0e\x2e\x90\xf7\x19\xfc\xa3\xb6\xa1\x0f\xea\xdb\x3b\xc5\x6e\x0b\x13\x7d\x80\x2b\xb7\x32\x8c\xca\xfa\x50\xf3\xf3\x99\xb4\xc5\xd4\x55\xcb\xc5\x10\x0e\xa8\x9a\x19\x3d\xb6\xd5\x06\x59\x9c\xb4\x59\xad\xa8\xc9\xd0\x1a\xe7\x98\xb6\x72\x43\x55\x5d\x8d\xfb\x11\x42\xca\xf4\x1d\xf5\xbb\x6a\xf0\x40\xd1\xe6\x96\x15\x62\x24\x63\x53\x85\x24\x42\xbb\x22\x1e\xd3\x37\x22\x12\x13\x7f\x7d\xd8\x7e\xe1\xaa\x8b\x7d\x3c\x40\x3f\xd7\x7a\xc3\xea\x64\x39\x19\xd8\x6e\xc2\xb0\xf4\x46\xa1\xb8\x83\x85\xb4\xca\x0d\x06\x8e\x6d\xbb\x01\x7f\x05\x98\x4d\x13\x9a\x4e\xe3\xd9\x08\x66\x15\x40\x3e\xe8\x7d\xe5\xe6\x30\x24\x11\x13\x8d\xde\x33\x81\x26\x89\xde\xca\x58\x27\x15\xd8\x70\xf0\x74\xd7\x1d\xc2\x94\x44\xbd\x61\x90\xd2\x53\x1a\xa5\x61\x16\x5e\x53\x58\x54\xc7\xd8\xd3\x4e\x67\x0a\x23\x56\x51\x7c\x45\xa3\x53\xba\x08\xf8\x28\xc0\xbc\x42\x33\x1a\xf4\xb7\xcd\xfe\xc4\x1d\xc1\x92\x44\xbd\x71\x18\x8d\x0e\x67\xb3\x63\x1e\x9d\x2f\x85\xeb\x0a\xd5\xb2\xd3\x59\xc2\x84\xd1\x14\x46\x3c\xfb\x68\x1a\x24\x92\xaa\xcb\x0a\xdd\x64\xe0\xb8\x13\xb8\x20\x51\x2f\x1c\xc1\x4d\x95\x7e\x21\x2c\x83\x2e\xe0\x25\x89\xb8\xc0\x02\xb7\x55\xe6\xcb\x81\xe7\xbb\x2f\xe1\x94\x44\xbd\x74\x1a\xe7\xb3\xd1\x69\x9c\x64\x70\x52\x01\x9c\xae\x56\xa7\x70\x48\x22\x6e\x8b\x1b\xc1\x55\x95\x73\x38\x88\xdd\x43\x38\x66\x25\xe3\x84\xe5\x9d\x55\x79\xc7\xed\x31\x6a\x69\x2f\x1d\xc6\x09\xb5\x32\xf1\xb7\x70\x8f\xe1\x48\x75\x51\xf8\x07\x85\x0f\x55\xa3\x8f\x3a\x9d\x23\x78\xcf\x07\x22\x1b\x4e\x0f\x67\xb3\x33\x06\x94\xc2\xbb\x0a\xe4\x7d\xa7\xf3\x1e\x3e\xb1\xf6\x46\xc3\x59\x3e\xa2\xaa\xeb\xde\x54\x20\x9f\x3a\x9d\x4f\xf0\xa2\x02\x39\x65\xd5\xc2\xdb\x0a\xe0\x45\xa7\xf3\x02\x5e\x91\xa8\x77\x4d\x93\xcb\x38\xa5\xf0\x47\x95\xf7\xaa\xd3\x79\xb5\xf5\x2f\xbc\xe1\x8f\x17\x2c\x39\x25\x77\x6a\x66\xbb\x21\xa8\x69\xec\xa6\x50\xce\x58\x77\x06\xcd\xd9\xe9\x8e\x21\x4c\x8f\xf4\xb9\xe8\x2e\xa0\x3e\xf3\xdc\x39\xd4\xa7\x98\x7b\x0d\xeb\x13\xca\xbd\x84\x70\xe4\xde\x00\x9b\x27\xee\x2d\xd4\x7b\xd6\x7d\x03\x7a\x3f\xba\x6f\xa1\x9a\x33\xee\x09\xf0\x19\xe2\x5e\x81\x98\x0e\xee\x19\xc8\x3e\x75\xff\x00\x35\xc2\xee\x07\xa8\x8f\xa7\xfb\xae\x00\x75\xcc\x79\x14\xcf\x64\x1c\x46\x94\x09\xe6\x90\x95\xf6\xdb\xa4\xba\x53\xaf\xc0\x1e\xba\x31\x9c\x85\x69\x46\x28\xd0\xf2\x04\x2c\xa5\xc2\x18\x71\xbd\x98\xd8\xb5\x9a\xf1\x48\x0f\x1c\x4d\xea\x2d\x33\x3d\xc7\x1f\xe8\x1f\xee\x1d\xd7\x68\xdc\x1d\xa7\x10\x7e\x8b\x2f\x66\xf1\x04\x7d\x69\xa9\xff\x9d\x47\xa7\xbc\xde\xed\x85\x18\x32\x77\xdb\xf8\x92\x71\xcf\x61\x90\x21\x0a\x5f\x1a\x5f\x4a\x4f\x6d\xf2\x3c\xef\x62\x91\xb0\x31\xa3\xa2\x10\x4d\x52\x19\x30\x5d\x71\x12\x99\x0a\x21\x63\x1a\xf9\x6c\xa6\x52\x20\x96\xe5\x45\x2b\xd9\x6e\x2e\xe2\x6c\x8b\x03\x91\x14\x52\x12\xf7\x12\x9a\xe6\xb3\x2c\xad\x05\x56\xbf\x18\x8a\xb0\x04\x7c\x50\x99\xda\x5b\x9f\x8f\x1a\x63\xe8\x74\x64\x0d\x4c\xdd\xe1\x37\x8d\xbc\xe5\x9d\x4e\x15\x77\xa9\x0c\xe2\x23\x73\x50\x4a\xd2\xd2\xa1\x9b\x4c\xc5\xb2\x82\x0b\x61\x3b\x8b\xd2\xea\x8c\x72\xad\xf1\x2d\x86\x13\xc2\x3a\x62\x6d\xac\xec\xd6\xb1\xb2\xf5\xb1\xb2\x7d\xd7\x30\x20\x23\x9e\xcf\x8f\x2c\xf5\x46\xaa\x19\x8a\x2b\x7b\x09\x75\x57\xbc\x0e\x57\x2e\x2a\x1e\x87\x9c\xeb\xb0\xd2\x62\x2f\xd9\x8f\xf7\x12\x93\x38\x58\x9e\x2f\x32\xa6\x10\xa2\x88\x07\x25\xd7\xd0\x94\x12\xd4\x5d\x7d\x50\xdd\x0c\xf4\x21\x75\x45\x71\x5a\x2f\x5b\x54\xbd\xb5\x61\x42\xff\xc5\x3e\xf2\x7c\x68\x5b\x0b\xf5\x49\x2f\xf0\x80\x9c\xb4\x6c\xa9\xa9\x80\x4c\xa2\x77\xd7\x62\x0b\xf3\xf0\x69\xa5\x9e\x1b\xf3\x30\x6e\x65\xbf\xc5\xfb\xc1\x5e\xcc\xfb\x8d\x4f\x8c\x20\x0a\x66\xcb\x3f\x28\x12\xcd\x54\xed\x8b\xbc\xd8\x87\x84\x0e\xe3\x64\xe4\xc6\xc0\x95\x74\x37\x2e\xe0\x4e\x4c\xea\xe3\x60\xe1\x26\x20\x27\xb8\x1b\x42\xa3\x67\x69\xbd\x67\xb3\xa2\x1c\x02\xb9\x3e\xc4\x05\x6f\x59\xbe\x28\x2a\x2b\x96\xbb\x42\xfa\x1a\x29\xe9\xcd\xf7\x67\x7b\x39\xa3\x57\x01\x0d\x49\xe4\xe5\x3e\x8c\x89\x0d\x53\x52\x9b\x31\x8c\x95\xaa\x62\xe3\xfd\xe9\xde\xd8\xac\xee\x9b\xd6\x00\xbd\x71\xad\xf3\x4a\x79\x7d\xc1\xb7\x9e\xd4\x5b\xf0\x78\xf2\x3e\x91\x44\xbb\x8e\xb5\x90\xeb\x7b\xb5\x72\x0a\x50\x1f\xfb\xc4\x5e\xad\xd4\xc7\x81\xb3\xee\x7a\xfd\xef\x74\xb9\x2d\x72\xb7\xa7\x41\xba\x9d\xc5\xdb\x97\x74\xfb\x60\xdb\xde\x0e\xa2\xd1\xf6\x3e\xd9\x76\x0c\xbc\xb5\x20\xa2\x36\x71\x67\x94\x7a\x0b\xad\x5a\xc5\xe9\x6a\x03\xb5\x90\xe3\x54\x6b\x15\xdf\x15\xd0\x10\x16\x58\x0d\xdd\x50\x0e\x5d\xfe\xe7\x87\xae\x68\x0c\x5d\xaa\x8f\x5b\xb9\x3a\x24\x71\xed\xc6\x2b\x6a\x8d\x73\x63\x57\x42\x7b\x01\x93\xd7\x79\x38\xbe\xba\x40\x69\x39\x6e\xc2\x1d\xd6\x72\x24\xfc\x26\x5f\xb4\x83\xfb\x21\xe3\x2d\x81\x19\xc9\x9a\xdc\x79\x58\xe1\x98\x31\x19\x6b\xc6\xcf\x04\x6b\xfc\x7a\x5a\x81\x8c\x19\xc8\x18\x16\x24\xeb\x95\x3d\x02\xa3\x2a\x7f\x31\xb8\x2b\xdc\x05\xcc\xcb\xfc\x14\x96\x55\xee\x9c\x95\x9e\x73\x75\x91\x9f\x69\xc8\xb8\x50\xd7\x64\xc7\x81\x09\xb1\x1c\xb8\x24\x76\xeb\x92\x8c\x55\x6c\x7b\xb6\x61\x19\xe7\xd1\xdf\xe9\xd2\xdd\x36\xd4\xde\x64\x70\x3f\xb2\xfc\xdd\x54\x24\xb7\xa8\x0b\x32\xed\xc9\xed\x25\xc6\x25\x0f\x15\xfb\xdd\xab\x7c\x36\xdb\xce\xe8\x6d\xa6\xef\x6f\x31\x7c\x69\xc0\x36\x97\xf6\xdc\xed\x2f\xb1\x4a\xbe\x10\x02\x20\x6e\xec\x34\x25\x13\x2e\xd9\xc4\x0d\x89\x1f\xc3\x85\x5f\x12\xcf\x87\x5b\x62\xef\xdd\xee\x0f\xd5\x5a\xbb\x2d\xd7\xd9\x29\x19\x7a\xb7\xbe\xbe\x37\x9f\x47\xef\xd7\xf7\xe2\xd3\x9e\xdc\xa0\xe5\x9e\xac\x68\x38\x61\xfd\x78\x48\xec\xbd\xc3\xfd\x1b\x85\xfc\xb0\x44\x7e\x45\x6e\xbc\x43\x1f\x8e\xc9\xa9\xea\x99\x2b\x0c\x67\xe4\xae\xd8\x3a\xee\x85\x29\x97\x9c\x06\xe8\xcc\xbb\xf2\xc9\xb1\x68\x34\x70\xe7\xbe\x27\xec\x9f\x97\x62\x93\x38\x56\xbd\xe1\x0a\x40\xa7\xde\x2b\x75\x89\x69\xb5\x92\xa5\x9c\x72\x1b\xe5\x4d\xe2\xb9\x7a\x73\xae\xda\xbb\x9e\xd5\x80\x71\x71\xd2\xe9\xa0\x4b\xd6\x88\x62\x42\x5e\x7a\x76\x65\x77\x78\x44\x5e\x2a\x6f\x29\x1f\x88\xb3\xf7\x61\xff\x68\xef\x03\x83\x9b\x98\xe4\xa5\xf7\xc1\xdf\x9a\xf4\xc9\x91\x56\xaf\xc1\xeb\x15\xd5\x6c\x07\xd7\x34\x09\x26\xd4\x35\x60\x22\x04\xb8\xf7\x44\x8e\xf4\xd6\xe4\xc0\x72\x3a\x1d\xf4\x9e\xa0\xf7\xe6\x04\xf7\x77\x75\xda\x8d\xd3\x46\xe9\xf7\x62\xb6\xbd\x23\x3b\xad\xd3\x63\xb5\xda\xb9\xb7\x83\x2e\x0f\x88\x9a\x05\xf5\x39\x6a\x9c\x47\x47\x53\x3a\xbc\xda\x56\x02\x6d\x35\xd9\xdf\x61\x0c\xe8\x7a\xb5\xba\x50\x83\x86\x3b\x9d\x77\x62\x84\x3f\x91\x91\x97\xfb\x5b\x9f\x06\x9f\x7a\x71\x9e\x2d\x72\xb9\xb5\x73\x26\x13\x41\xc5\x37\xdc\x50\x32\x9a\x18\x44\xaf\xbf\x17\xc2\x2e\x1d\xbd\x89\x46\xe1\x90\xa6\xee\x45\xaf\x9e\x50\x60\x17\x31\xdc\xe4\x2e\xcc\xe8\xdc\x4d\x41\xe0\x77\xbd\x7f\x04\x6e\xbf\x80\xa5\xa0\x94\x55\x81\x71\x51\xde\xfd\x07\x28\xc6\xe5\xc6\xf5\x86\xd8\xf0\x82\xc4\x6a\x62\xbf\xd9\x7f\xb1\xf7\x66\xc3\x46\x5c\x23\xe8\x8d\x22\xc8\x7b\x53\x6e\xca\x69\x2b\x67\x1f\x95\xcc\x79\xd9\xe4\xec\xc3\x3a\x67\x9f\x16\xba\x70\xa3\x8b\xa5\xed\x3c\xbc\x36\xb2\xe7\x91\x08\xaf\x15\x46\x13\x39\xeb\xcf\x23\x63\x2d\x5e\x7f\xf9\xb4\x62\x3f\xd9\x8b\xf8\x22\xae\xdc\xa7\x67\x5e\xe4\xcb\x21\xd6\x3c\xaa\x40\x40\x1c\x48\x09\x77\x37\xb6\x97\xef\xc7\x62\xdf\x97\xe6\x4f\x74\x40\xbd\xd0\xcb\x7d\xb6\x8d\xf8\x3d\xb5\x3b\xc2\x90\x70\x03\xa6\xd9\x80\xe7\x09\x6a\xaa\x9f\xab\x55\xcf\xb6\x1d\xdc\x9d\x6d\x39\x3b\x0c\x48\x39\x61\x0f\x23\x94\xc2\x10\xbb\x88\x83\x46\xbc\xe1\x64\x08\x41\x97\x0c\x71\xc1\x89\xe3\xc5\x89\xc3\x3d\x4b\x05\x5c\x27\x54\x1d\xc0\x43\x53\xea\x92\x61\x9c\xb4\x5a\x54\x36\xba\x8c\x49\xf5\x61\x34\xe9\xf5\x7a\x3d\x03\x03\x15\x17\x19\x75\xe9\x9f\x6b\x73\x9a\x84\xae\xdc\xcf\x6e\x52\xa2\x5a\x84\x6b\xa9\x08\xaa\x4d\xd7\xd3\x79\x31\x27\xe3\x44\xcc\x7b\xf6\xd3\x80\xef\x4f\x4f\xde\xf5\xc4\x56\x15\x8e\x97\x88\xc2\x9a\x0a\x5e\x9d\xaf\x92\x04\x65\x58\x9d\xe5\x13\x91\xcb\x2f\x71\xa2\xf2\x12\xa7\xbc\x0e\xda\x92\x31\xf8\xb2\xd2\x2b\x74\x56\x60\x0c\xc2\xf0\x4c\x1e\x46\x29\xd2\x14\xe5\x75\x05\xb8\xd3\x09\x05\x8a\x76\x51\x42\x4c\x9d\xad\x4c\xae\xc4\x54\x37\xe7\x66\x7a\x42\xa8\xeb\x09\xa1\xd0\x13\x64\xa4\x2a\xa6\x21\xb0\x6e\x63\x82\x79\xdc\x58\xc9\xca\xad\x80\x08\xc1\x49\xee\x42\xb9\xe2\x9b\x70\x6a\x41\x0a\x49\xa5\xd8\x8a\xd9\xa4\xe4\x1e\xed\xae\xe8\x92\xf0\x2f\x0c\x71\xd3\x18\xc2\xa8\xd6\xb4\x81\x3b\x9d\x58\x13\x84\x04\xcb\x0e\xb4\x14\xa2\x67\x33\xfd\x4f\xb6\x54\xf4\x4a\xc0\x26\x60\x63\x4b\xd7\x0f\x0c\x36\x74\x9f\x3c\x0d\x22\xf2\x74\xa8\xa8\xd6\xac\x50\x12\xe8\x9a\x92\x20\x4d\x67\xa9\x17\xaf\xcf\xb5\x70\xc4\x94\xce\x1e\x63\xa8\xa4\x45\x10\x15\x39\x0d\x1a\x47\x98\xdf\xaa\x85\x65\x4f\x57\xb7\x71\x92\x33\xf3\x52\x05\xcc\x88\x0d\xc3\x92\x33\xec\xcd\xf6\x87\x7b\x33\x46\x50\xe8\xcd\x7c\x94\x42\x8e\xb7\xe4\xe6\x90\xcb\x20\x8a\xf2\x53\x94\xd7\xe6\x5d\xb9\x9a\x66\xf1\x64\x93\xfa\xb6\xd5\xb6\x86\xf8\xd5\x83\x88\x80\x47\x71\x6f\x16\x4f\x7a\xc1\x62\x31\x63\xab\xa4\xd4\xce\xf8\x43\x84\x4e\xa7\xde\xc9\xff\x9e\x2f\xcc\x90\xf6\xc4\x12\xb2\xb5\x4b\xff\x74\xf3\xa5\xff\x53\xcc\x96\x13\x7a\x26\x8e\x8e\xbf\xc6\x10\xfc\xc7\x9c\x19\x37\x4e\xea\xfe\x0d\x4e\x8d\xff\xff\xef\x94\x53\x9e\x3a\x4a\x81\xbf\xce\x28\x1a\x75\x0c\x32\x37\xab\x3b\x21\xab\x95\x55\x21\xd8\xc9\xb8\xd3\x41\x7a\xc6\xe1\x6c\x31\x0d\x2e\x69\x46\xe2\x5a\x32\xde\x7c\xb4\xb9\xe9\x70\x72\x8d\xc5\xd5\x09\xe4\x81\xad\x69\x9d\xc4\x3a\x8d\x84\x10\x75\xe1\x78\x27\xc5\x5b\x77\xc7\x96\x92\xa4\xdd\x94\x24\x3d\xcf\x2e\x63\x8a\x5b\x8e\xef\x0b\x13\xc0\xac\xd6\x49\x10\x09\x0b\x9a\xfa\x7c\x8f\x2b\x3d\x58\x8e\x47\xc9\x9e\xeb\xbd\x75\x50\x5a\x0a\x26\xea\x74\x4b\xe9\x5e\xb1\x7a\x5d\x51\xab\x2e\x25\x41\xb5\x78\x73\x12\x54\x6b\x75\x46\x02\x6d\x61\x0e\xf9\x53\x87\xda\x9a\x18\x93\xa0\x65\x0d\x94\xb6\x1f\xcd\xfa\xdb\x86\x10\xaa\xc9\x9a\x56\x93\x35\xaf\x4d\xd6\xc6\xb4\x1b\xb6\x4d\xbb\x71\xf1\x3f\x87\x37\x07\x4d\xab\x0b\xd1\x82\xbe\x77\x6e\x9d\x7b\xe7\xfe\x79\xff\xfc\xee\xbc\x38\x47\xe7\xf8\xbc\x7b\x6e\x9e\x0f\xce\x7b\xe7\xe7\xe7\xbf\x9d\x7f\x71\xbe\xf2\xfb\x93\xad\xb6\x1b\x56\x85\x23\x59\x3f\x7a\xdc\x6d\x3d\xb6\xdc\xd5\x8f\x2d\x77\x7d\x97\xf3\x45\xb6\x2b\x54\x7e\x09\xab\xe0\x40\x91\xf2\x65\x58\xa6\x24\x60\xac\x0c\x1e\x28\x43\xbd\xcd\xe0\xe7\xe5\x3b\x3b\x31\x37\x33\x65\x33\xb7\x7a\xc9\x26\x8e\xff\xe2\xb5\xe3\x3f\x69\xf4\x15\x33\x05\x51\x4a\x41\x5e\x65\x3f\x34\xc4\x30\xac\x16\x52\x79\x6a\x25\xd6\x5d\x30\xe8\x3d\x77\x1d\x50\xeb\x31\x68\x2e\xc3\xb4\x68\xb9\x17\x56\xdb\xdf\x73\xb1\xfd\x7d\x85\x37\x74\xa5\x88\x58\x5d\xbd\xcd\x8b\xab\xd5\x53\xdb\xdc\xc4\xd6\x16\xeb\xcb\x49\xdb\xd9\xd8\xd6\xc7\xb6\xb6\x58\x5b\x61\xb5\x3d\xad\xf7\x15\xdf\xd3\xe2\xe6\x9a\x5b\xdf\xd2\xe2\xb6\x7d\xa8\xb6\xad\x39\x7c\x4b\x4b\x79\xb8\x24\xa9\x79\x4d\xc8\x98\x47\x49\x2a\x45\x79\x58\x62\xb8\xa8\xdc\xb9\xde\x10\xcf\x87\x97\xc4\xde\x7b\xb9\x7f\xbd\xf7\x92\x8d\xc7\x8d\xf7\xd2\x17\x87\x5d\x5c\x0b\xb8\x14\x3d\x76\xcb\xd4\x04\xb8\xa3\x6c\xcf\x4a\x5d\x5b\xc6\x1c\xe1\x6e\x02\xf8\xa2\xbe\x04\x7a\xbb\xa0\xc3\x8c\x8e\xca\xa4\x65\xb5\xce\x67\xe2\xe5\xd6\xa4\xd2\xd2\x6e\x61\x82\x81\x57\x80\x18\x79\xb3\x20\xcd\xde\x54\x24\x9a\x17\x18\xab\x83\xa7\xbf\x5a\xaf\x56\xe9\x29\x4c\x70\x51\x5c\x12\xcb\xd1\x4e\xa6\x3c\x1f\x0e\x89\x03\x57\xe4\xc2\xbc\x86\x63\xe2\xec\xef\x5f\x58\x0e\x9c\x11\x7b\xef\x6c\xff\x62\xef\xac\xa6\xe0\x1e\x11\x1b\x3e\x90\xab\xbd\xa3\xfd\x0f\x7b\x58\x27\xec\x6c\x8d\xb0\xa5\xf9\xe1\x21\xd2\xf6\xc9\x64\x70\x44\x3e\xb8\x57\xe4\x03\x7c\xd0\x9d\xc0\xa1\x2b\xeb\x08\xf7\x77\xcd\x23\xbc\x75\x45\x3e\x6c\x89\x63\x20\x2d\xc4\xce\xd2\xfa\x60\x3a\x18\xde\x91\xc5\xe0\xda\x2d\x5b\xc7\x6a\xbc\xc6\xe6\x05\x7c\x22\xc2\x96\xe2\x9d\xb9\x8b\xb7\x3e\x79\xef\x4c\xc7\x27\xc8\xd9\xdf\x3f\xc3\x5a\xc3\xdf\x90\x77\x7b\x6f\x0e\xc8\xfb\xbd\x37\x96\x5a\x84\x2f\xc8\x1b\xcb\x81\xb7\x24\xf2\x4a\x6f\xdc\x2f\x30\x5f\xc5\x6f\x3b\x1d\x74\xe3\xbd\xf0\x89\x83\xe1\x93\xf7\xc6\x27\xe8\x93\xf7\xc6\x74\xfc\xfd\x7d\x67\xe5\xe0\xce\x5b\x60\xd3\xf4\xac\xd3\x61\xc9\xfe\x8a\xa0\x13\x9e\xbb\x3a\xf1\xde\xf8\x98\xc3\xac\x44\x8a\x28\xdd\x39\xee\x74\xd0\x21\xb9\xbf\xff\x5e\x3c\xd4\x7b\xac\xfb\xf8\xc6\x3e\x21\x87\x80\x2e\xc9\x0b\xbc\x4f\x96\x22\xd6\xe4\x56\xad\xb7\x76\xbb\x4b\xeb\x12\x17\x85\x30\x88\xac\xaa\x34\x9d\xf5\x41\x7b\xa8\xd2\x83\x89\xac\xe1\x84\x7c\x2a\x1a\xe2\xc0\xe5\x01\x29\x05\x02\x7e\xb9\xdf\xb3\x6d\xc7\x3d\x6c\x32\xa5\x10\xdd\xc0\x1c\x37\x39\x53\xbb\xc9\x4c\xb5\x29\x64\x3d\x41\x36\x24\xd5\x82\x8f\x06\xb6\x1b\x71\x43\xdc\x46\x3b\x20\xae\x80\xc2\x81\xed\x86\x10\x30\x04\x8d\xa6\xb5\xb1\xb1\xec\x01\x36\x96\xf4\x4b\xce\x32\xae\xa2\xf4\xa4\x56\xe5\xec\x77\x36\x18\x9a\xe3\xfe\xcc\x1d\x0f\x1c\x77\xf8\x98\x46\x56\xab\xeb\x1f\x7d\xdb\xf6\xa8\x9b\x67\x07\x22\xc6\x02\x12\x62\x89\x78\xa8\xf0\x18\x8d\x39\xed\x74\x2c\x1e\xd5\x7f\x90\x90\xd8\x4d\x57\x2b\x4b\xc6\xf8\x47\x28\x24\xb1\xe5\x60\x2b\x31\x9d\x03\x92\x75\x3a\xf2\xc0\xc4\x4b\x20\xf4\x31\xaf\xa5\x54\x61\xa9\x17\x5b\x8e\xdf\xe9\xc4\x56\xd2\x00\x65\xe9\x18\xa2\x47\x5a\x65\x36\x1c\x01\x6b\x11\x5e\x6d\x1e\xdc\x55\x5c\xa6\x56\x6b\x3a\xc1\x8c\xbf\x57\x67\x76\xf6\x5e\xb8\x1f\xed\x85\x0d\xa8\x10\xfb\x2b\xc6\x0c\x23\x2b\xb4\x9c\x2d\x4d\xeb\xde\xb4\x9f\xda\x9b\x36\xd2\x35\xef\xfa\x42\xa5\x84\x90\xaf\xde\xa8\x3c\xbf\xa9\xd9\x0c\x33\x6d\x12\x52\xf1\x66\x92\x6f\x13\x31\x7f\x85\x1b\x69\x61\xdb\x58\xb6\x16\xe2\x0d\xcb\xb7\x9b\x99\x17\xf8\xd5\x45\x4e\x8e\xc3\x31\x4a\x57\xab\xb5\xeb\xc0\xbc\xba\x72\xaf\xd2\xf8\xcb\x34\x94\x57\x47\xbb\xe2\xb4\x22\x5f\x3b\xad\xa0\x28\xf7\x66\x3e\xa4\x10\x62\xf1\xaa\x2e\xed\x74\x78\xa0\x81\x32\x41\x9e\xd3\xe4\x55\x90\x4c\x2c\x0f\x34\x42\x75\x86\x56\x0a\xd0\x05\xef\x4b\xcf\xe7\xa2\xed\x7a\x0f\x23\xdd\xa2\x50\xb0\x03\xe3\xe2\x62\x16\x8f\x82\x74\x7a\x31\x65\xff\x94\x36\xa0\x17\x17\x06\x24\xe4\x5b\xdb\xfe\xda\xf9\xf6\xdb\xdd\xe7\xcf\xbe\x7e\x66\x7f\xfb\x2d\x9b\xd8\xa5\x51\xdd\x2b\x89\xcb\x37\x20\xae\x52\xff\x46\x23\x61\xe3\xa6\x65\x07\xa4\xff\xdb\xb9\x02\xe8\x99\x83\xa3\xca\x5a\xed\xdc\xff\xa2\x0f\x29\x59\x33\xd2\xcc\x3a\x1d\xfe\x3a\x5b\x88\xc6\xa5\xe1\x5e\xa7\x93\x41\xbe\x0e\x9d\xd2\xd9\xb8\xd3\xa9\xfe\x5d\x2f\xc6\x52\x61\x46\xd2\xd5\x2a\x5f\xad\x14\x69\xc8\xd0\x4c\x2f\x0c\x8c\xb4\xa7\x0b\x43\x7d\xbe\xed\xa0\x1d\x26\xd7\xab\xf5\xd0\xd0\x19\x58\xc7\x32\xcd\x6a\x87\x94\xd6\xa7\x0d\xe9\x6f\x53\x5c\x50\xcb\xe1\xe1\x08\x43\x1e\x8e\x30\x43\x8c\x21\x40\x0c\xb4\x34\x99\x8f\xe5\xb8\x5a\x0e\x1b\xd7\x29\xd6\x0e\x30\x39\x8f\xd1\x9c\x74\x27\x12\x0b\xf5\x12\x9f\x90\x8a\x92\xa4\x86\x22\xc3\x07\xba\x3b\xd4\x71\x53\xe5\x11\xae\xbf\x07\x0a\xaf\x6b\x43\x28\x25\x80\x04\x2b\x4f\xe0\xa1\x17\xf9\x24\xe3\xaf\xb1\x20\x02\xcd\x70\x5f\x73\xf3\xa7\x5b\x2e\xee\x10\xcd\xc3\xdb\xa2\x61\x82\x36\x0d\x52\x65\x5f\x34\x82\xb9\xa8\x4b\xd3\x74\x96\x44\x0d\x95\x96\x78\xbd\x66\xc4\x09\x13\x32\xf3\x8c\x8b\x0b\x6e\xcf\xf6\x29\xbd\x48\xa7\x41\xc2\x67\xb0\x0f\x97\x04\x8d\x48\xdf\xfb\xad\xe7\x9b\x5f\x48\x37\xd0\x93\x4e\x67\xc2\xef\xf7\xd5\xdf\xde\x9b\x97\x17\xef\x3f\x9c\x9c\x9d\xac\x56\x86\x81\xf1\xc0\x10\x36\x93\x28\x4d\x86\xf8\xc2\xe9\x19\xe6\x88\xfb\x8f\x27\xcb\x72\x05\xc2\x0d\xb9\x6e\x9c\xdd\xc2\x4b\x72\x5d\xe5\xdf\x92\xd2\x19\xbb\x61\x5e\x08\xdb\xd2\x1b\xac\x39\xb8\x38\x3f\xff\xed\x8b\x5e\xd7\x1c\x20\xec\x9d\xfb\x77\x05\x53\xc4\xd6\x94\xa2\x7e\xbd\x86\x55\xb9\x7a\x71\xaf\x3b\x40\x03\x72\x7e\x7e\x8e\xf0\x6a\x7b\x1c\x27\x6c\x51\x89\x04\x1f\x33\x44\x5f\x38\xbd\xee\xc0\xc0\xa6\xf1\x85\x81\xe1\x94\xcc\xf9\xb5\xed\x90\xc2\x49\x29\xcd\xc0\x61\x29\xcc\xc2\x15\x79\x81\x66\x60\x1c\x07\x0b\x03\xc3\x31\x79\x21\xfd\x0b\x82\x21\x0c\xa0\x0d\x6d\x59\x9c\x55\x57\x0b\x16\xdb\xef\xf4\xb9\x52\x3d\x55\xe7\x4f\xf6\x11\x9b\x31\xd9\x7e\xb4\x57\x3a\xcc\xf7\x32\x79\xa0\x9f\xd2\x8c\xbb\x27\x86\xc4\x63\x9a\x58\xcd\xed\xf5\x3f\x13\xfd\x87\x7f\x2e\xfa\xf7\x8f\x42\x7f\x71\x31\x0a\xb2\xe0\xe2\x42\xa8\xc6\xaa\x16\x9e\x15\x8c\x46\x88\xd5\x83\x1b\x3e\xb0\xb5\x25\x0a\x89\xbe\xee\x43\xcb\xe2\xab\x1e\x45\x84\x7a\xa1\xef\xd9\x3e\x26\x84\xa0\x84\x64\x78\xb5\x8a\x76\x48\xd4\xe9\x24\x3b\x24\xa9\x5e\x82\x96\xcc\xa0\xac\xe0\x53\x5b\x44\xdf\xfb\x92\x76\x76\x68\x9b\x51\x7d\x81\x68\x8d\x2f\xae\xbf\xf1\x68\xf1\xe5\xd2\xb4\x54\xa3\x9d\x0e\xe5\x17\x1d\xf4\x89\x43\x88\xdd\xe9\xd0\x7d\x92\x14\x48\x63\xbc\x3b\xaf\x11\xe5\x2f\xa0\xd8\x7f\x03\xea\x7a\x7e\xc3\x0b\xb7\xdc\xd7\x64\x3f\xa9\xce\x56\x07\x7c\x95\xd5\x05\xeb\x24\x5e\x29\x8a\x48\x86\xf1\x6a\x55\x11\x93\xb0\x4d\x5e\x19\x70\xb3\x8f\xcb\x38\x9e\xd1\x20\x32\x78\x18\xa1\x8b\x0b\xce\x77\x2e\x2e\x8c\x1d\x42\x84\x27\x0a\x1e\xe2\x77\x10\x7a\x6b\x36\x1d\xd9\x40\x25\xb9\x06\xdb\x5e\x0d\xdf\xe5\x7e\x4a\x1a\x4e\xbe\xcb\x78\xa3\x6d\xb2\x8e\xa8\x80\x0e\x84\x04\xea\xf2\x07\x00\x22\x06\xf9\xe6\x21\x42\x3b\xdf\x21\x8a\x57\x2b\x94\x11\x0a\x97\x9d\xce\xe5\x76\x18\x6d\x67\x18\x77\x3a\xe8\x35\xcf\x58\xbf\x29\xdc\x71\x2a\x51\xa7\x66\x6d\x5e\x3d\x53\x28\xd9\x1b\xce\x92\xe5\x5d\x46\x76\x76\x10\x35\x0d\x03\x17\x43\x7e\x62\x43\xf1\x5d\x75\xa7\xc2\x46\xe7\xd6\x0d\xb0\xf0\xd2\xd2\x38\x40\x95\xb5\xe0\x3b\x86\x47\x16\xb9\x28\x0d\xf0\x2b\x6c\x5a\x36\x8f\xe1\x5a\xe5\x14\xea\x0d\x33\xab\x48\xc8\x6b\x59\x81\x22\x3c\x88\xa4\x2d\x5c\x71\xa6\xd9\xf8\xf3\x15\x4d\x9a\xee\x9e\xca\x85\x78\x3c\x38\x16\x8f\x3c\xdc\xbb\xa2\x00\xbd\xe0\x88\xce\x68\x46\xdb\x5e\x1e\x70\x0c\x6c\xf7\x62\xb3\x5e\x80\x6d\xd7\xb0\x7a\xd4\xaf\xe3\x9a\xd0\xac\xe5\x6d\x46\xad\x0c\x1b\x81\xe3\xea\x98\x91\x96\xb1\x61\x13\xae\xa3\xc9\x19\x50\x46\x9f\xb9\x91\x4f\xec\x80\xe2\x01\x83\x56\x4d\xaf\x55\x3b\x0d\xda\xde\x39\xd5\xab\x55\x1e\x57\x07\x95\xe3\x17\x86\x4e\xc3\x5f\xc7\x99\xd2\xe6\x53\x9c\x9a\x09\x6b\xd5\x03\xe4\x58\x69\x4e\xdc\xd3\x4c\xe4\x66\xfc\x48\xb7\x80\xa3\xc7\x8f\x8e\xe7\xd7\xc1\x5b\xc6\xa4\xa5\x4d\x10\x91\x77\x9c\xf2\x2d\xb5\x24\xa2\x7d\x9b\xc7\x1f\x2b\x4f\xac\x2c\x67\x90\xf5\x16\xf1\x02\x61\xf7\x54\xb5\x34\x02\x07\x83\x8d\x71\xbd\xca\x47\x0c\x5d\xb3\xbe\xed\x68\xdf\x56\x03\x96\x79\x91\xef\x39\x8d\x66\x34\xc7\x45\x16\x7b\x57\xdf\x24\x80\x72\x89\xad\x56\x72\xbd\xf7\x75\x83\x65\x55\x30\x21\xef\x90\x2e\x9e\x25\xfb\xf6\x40\xe9\x85\x14\x32\x1f\xbb\x91\x97\x30\xb2\x88\x1a\x93\x0f\x8f\x1f\x93\x3b\xc6\xcc\xb8\x41\xec\x19\xcc\x83\x05\xfb\x85\xae\x56\xab\x23\x0c\x82\xdd\x89\xac\xa2\x8e\x73\xf3\x62\x7a\xa3\x6e\xa5\x24\x0c\xe3\x02\xb5\xa2\xcd\x01\x58\x2b\x37\xa1\xd9\x5a\xa1\x0d\x3d\x5c\x15\x12\xcb\xb7\x5e\x68\xe3\xd4\xae\x8a\xb1\xfd\x9f\x1f\xc2\x8b\x6e\x7b\xaf\x95\x0e\x46\x23\xa2\x7f\xb3\xee\xde\xc8\x3d\x54\x6f\x4a\x84\x51\x1b\xc2\x0d\x6d\xa8\x97\x97\xed\xe0\x5c\xf0\x2d\xbc\x82\x3f\x08\x7a\xdb\x32\x5f\x99\xb4\xff\x69\xcd\x77\x42\xa7\x93\x79\x36\x53\x19\xa8\x67\xfb\x83\xb5\xa7\x4f\xa5\xc2\x31\x64\xfb\x69\x15\x57\x81\x9f\xd4\x97\x36\x39\x31\xa4\x52\x4f\x88\x31\xe4\xc4\xe9\xdb\x30\x23\x9e\xbf\x17\x30\xf9\x44\x3a\x85\xa1\x4c\x9b\xce\xc9\x21\x1a\x97\x01\xc0\x30\xa4\x5e\xe0\x93\xf0\x80\x38\xbb\x76\xa7\x33\xae\x7c\xc0\xec\xda\x3c\x5a\xd2\x7b\x14\x74\x3a\x63\xac\x18\xdb\x98\x53\xb0\x25\xde\xd7\x5a\x0e\x8c\x48\xca\xbe\xa9\xcb\xc8\xdc\x33\xcd\xe9\x7e\xd8\xe9\xcc\xd4\x25\x60\xbe\xa7\x7c\xa8\x8c\xbd\xa9\x0f\x4b\xc2\xad\x32\xe7\x84\xf1\xb7\xf9\x60\xee\xda\xb0\x83\x46\x83\x05\x1a\xc1\x12\xbb\x09\x9a\xc1\x12\x22\x8c\x45\x9b\x03\x12\xef\x59\x56\xb0\xa7\x8c\x37\x53\x79\x14\xb0\x83\xae\x07\x0b\x74\x2d\x4a\xb0\x16\xc9\x42\xc3\x38\xca\xc2\x28\xa7\xdb\xb4\x18\x75\x3a\x23\xb1\xce\x96\x18\x66\xe2\xd7\xbc\x72\xe0\x3a\x2b\x50\x86\x99\xd8\x02\xaf\xc8\x09\x2a\x99\xe3\xab\xc1\xdb\x92\x2d\xb9\xaf\xc0\xc6\x70\xff\xb1\x16\x48\x19\xf3\xa4\x14\x8e\x2c\x5e\x2a\x91\xe3\x10\x95\xf2\x6b\xe2\x65\x3e\xa1\xde\x2b\x93\xc9\xaf\xfa\x81\xb5\x52\xed\x5e\x99\x8e\x00\x7e\xc5\x94\x3b\x0e\x9c\x95\x3b\x4f\xe8\xbd\xf2\x49\xb2\x76\x90\x20\x23\xd1\x97\x31\x0b\x79\x88\x79\xb6\x37\x29\xc5\x4e\x3e\xfe\xe6\xa1\xe4\xb7\x9d\x66\x3a\x70\xfb\x73\x91\xb9\xdb\x9a\x09\x11\x13\xae\x05\xc4\xd3\xcd\x10\x10\x79\xbb\x7e\x75\x0e\x26\xed\x2f\xb8\x87\x37\xf4\x96\xaf\x27\x08\x71\xa1\x29\x30\xaf\xab\xf5\xc0\x44\xa4\xc1\x4b\x25\x76\xb8\x86\x51\x2e\x0d\x42\xc2\xd5\x2a\x23\x24\xae\xc5\x03\x29\xf9\xbe\x14\x87\xb6\x34\x79\x58\xb3\x82\xca\x56\xab\xda\x53\x3d\xac\xbd\xd4\xff\xa3\xc0\xb2\x09\x8c\xb2\x08\x39\xcf\x31\x6e\xbd\xba\xdb\x8a\x5a\x02\x9c\x71\xf6\x80\xf0\x16\x13\x8b\xf8\x13\x7e\xb6\x44\x36\x9e\x65\x54\xd2\xd2\x9a\xb0\x7e\x13\x46\xa3\xf8\xa6\xd3\x41\x11\x11\x3f\x75\x1a\xa3\x0d\x07\x73\x10\x6a\x96\x09\x31\x04\xf8\x8e\x3f\x3a\xdc\x4e\x49\xa6\x9b\x2c\xa8\xe4\x4c\xbe\x3c\x44\x46\x44\x6f\x68\x62\x60\x88\xca\x94\x78\x36\x62\x29\x5b\xfa\xc3\x4a\xd6\xf4\xb5\x63\x34\xca\xbd\xff\x51\xa0\xc4\x96\x97\xe8\x69\xf8\x07\x25\x36\xc8\x77\x0e\xf3\x90\xe5\x8a\xcb\xe9\xd9\x88\xa6\x72\x53\x66\x35\xa6\xca\xc7\x9d\xb4\xcb\xbb\xa2\xcb\x79\xb0\xe0\x4a\xd7\x71\xb0\x80\x4c\x19\x08\x04\x69\x1a\x4e\x22\x94\x61\xa0\xfb\x8e\x4a\x14\x98\xcb\x0a\xf5\x50\xda\x21\xa2\x90\xc8\xfd\xf0\x8a\x2e\x55\xf5\xfc\x7a\x97\x24\xfc\x83\xad\x21\xad\x6e\x2f\x52\x9f\x8d\xe8\xe1\xbc\x20\x8d\xb2\x64\xa9\x1f\x91\x04\x9b\xb3\xd2\xb5\x2c\xda\x7b\xfb\xe1\xe3\x71\xb0\x20\x09\x24\xda\xb6\x71\x31\x0f\x92\xab\x97\x0c\xe6\x30\xfd\x98\xd2\x51\x6d\x37\xa0\x3b\x44\xef\xa6\x4e\x87\xeb\x9c\xdc\x96\x49\x66\x88\xbe\x54\x9d\x21\x7b\x96\x2b\xa6\xc0\xfe\x65\x0d\xe2\xce\x78\x80\xfd\xcb\xcb\x47\xbe\x62\x1c\x02\x44\xb5\x9f\xf2\xc3\xa2\xaa\x32\xa8\x57\xac\x7d\xf1\xf2\x58\xcf\x27\x6c\x6f\xd6\x5b\x25\x86\xaa\xd6\x96\x19\xcd\xb6\xcb\xc7\x56\x7c\xd4\x56\x2b\xe1\x52\xa2\x77\x7c\xf8\xf3\xc5\x8f\x87\x6f\x3f\xbe\xdc\xd2\x27\x80\xd2\xee\xb7\x58\xc9\x80\x50\xaf\xf1\x32\xd7\x47\xe2\x94\x8d\x65\xa7\x24\xe8\x45\xf4\x36\x43\x78\x6f\x27\xed\x8d\xe2\x88\xee\x55\x49\xa2\x6e\x4a\xc4\xab\x20\x39\x01\x18\x5b\x52\x3f\x19\xfb\x2a\x0d\x9e\x65\xe5\x7c\xa7\xe7\x97\xfa\x14\x43\x32\x40\x82\x37\x8b\x5e\x4a\xb0\x5b\xeb\x6e\x48\x08\x05\x9b\x90\xd8\xb2\xd6\x9f\x8c\xc4\xd7\x34\x19\xcf\xe2\x1b\x03\x17\x7a\x8f\x25\xda\x22\xa9\x57\x1c\xfe\x41\xeb\x9d\x79\x9f\x4c\x2b\x0b\x09\xa1\x8a\x37\x02\xd7\x04\x8f\xc6\xec\x62\x8b\x27\x93\x86\x8e\xb5\x3a\x1a\xc2\x54\xa2\x0e\xe8\xdb\x6a\x51\x47\x9e\x03\x14\xd7\x16\xd3\x7a\x6d\xb1\x98\x25\xca\xc9\x58\xad\x6f\x21\x26\xea\x99\x56\x82\x6b\xb3\x69\xd0\x9c\x6c\x31\xc4\x8d\xc9\x59\x1f\x80\xb8\x36\x17\x63\x30\xcd\xb2\x6f\xab\x5e\x3e\xa8\x26\x9e\x7c\x8f\xa7\x3c\x30\x72\x12\x1b\xdd\xc1\xb2\xc8\xda\xc3\x30\xad\x52\xd6\xd7\xb4\xd6\xd7\x22\xdd\xcb\xfc\x01\x5a\x63\x73\x65\x9e\xce\x01\x2b\x6e\xa3\x3a\x48\x16\xd1\xb9\x61\x8d\x41\xca\x15\x4b\xab\x92\x35\x96\x59\xca\xe4\xc2\x66\xd5\xb2\xaa\x6e\xf0\xe4\x5c\x16\x03\xe6\xd7\x5b\x3b\x0e\xa3\xd1\xda\x5a\x6d\x9f\x61\xaa\xc1\x03\x39\x8b\x4a\x45\x36\x79\xac\x28\x2c\xf1\x29\x89\x3e\x79\x58\x5f\x4c\x36\xcd\xf5\x04\xb7\x61\x96\x9d\x90\x88\x4e\x48\x38\xc3\x4c\xbc\xc8\x67\x6b\x58\x30\x3f\x96\xc6\x33\xf8\x62\x66\xec\xd1\x4d\xf8\xb8\xa9\x34\xbd\x6f\xe5\x98\xb0\x2c\x06\xa6\xe3\x69\x19\x27\x81\xed\x31\xdb\x1c\x1b\x16\xcb\x82\xa4\x6d\x35\xb6\xeb\x74\x8f\x40\x48\x1a\x13\x42\xb2\xd0\x02\xe2\x0a\xfb\x1a\x1f\xdd\x24\xbf\xe8\x85\x38\x2b\xd5\x01\x05\x4b\xad\x76\xb8\xd2\x83\x8a\x9c\xfd\x72\xdb\x63\x3d\x7d\xc7\xf8\xb1\xbb\xe3\x48\x13\xbd\xe6\x54\xc4\xae\x04\x50\xee\x37\xe4\x94\x2a\x20\xf8\x33\x44\x07\xff\x14\xa2\x39\xcd\xf7\x90\x9a\xfe\x19\x52\xd3\x7f\x12\xa9\x62\x46\x6d\x26\x56\x9f\x6a\x57\x74\x99\xb6\x10\xc8\x58\x73\xa0\x33\xa5\xc6\x52\xe5\x18\x37\x15\x4c\xef\x29\xc8\xe8\x0e\x5b\x4b\x8a\x3e\x49\x3e\xaf\x23\x59\x75\xf1\x3d\xd5\x49\x9f\x51\xfa\xde\x16\x55\x62\x76\x29\xbd\x46\x5c\xc2\xe6\x1b\x01\x17\x37\x92\x1a\xab\xe7\x3a\x6b\xb2\x87\xa5\x52\x13\xa9\x45\x2b\xad\xfe\x78\x31\x48\x38\x8b\xa8\xd7\x9e\xc5\xdf\x9f\x9e\xbc\x6b\x37\x7b\xa8\x42\x0c\x57\xc2\x2b\xc8\xd7\x36\x55\xdd\xbc\x5a\x2f\x32\x4d\x9f\x70\x73\x57\x51\xa3\x18\xcf\x8a\x75\xf0\xaa\xcb\x19\xd2\xa4\x61\x3d\x0c\x73\x45\x85\x61\xa8\xa7\xc8\xb2\xbe\x68\x0f\x53\x93\xc8\xdb\x6b\xee\xf8\x02\x9b\x86\x6b\x98\x91\x6c\x32\x8a\x48\xc4\x58\x21\x93\x25\x4d\x62\x6c\xef\x6f\x57\x2e\xb7\x69\x51\xa0\x14\x43\xa9\x29\xa3\xb0\xc5\xf3\x0a\x4a\x48\x8a\x07\x49\x75\x8c\x97\x01\xc5\x6e\x82\x57\x2b\xa4\xf9\x49\xc3\x05\x6a\xb9\x14\x6f\x89\x0e\x13\x21\xe7\x1b\x61\xd4\xe7\x7c\x2b\x8c\xda\x77\x6d\x4d\x5d\x09\xea\x87\x9e\x3d\x1a\x0d\xe3\x11\x1d\x64\x3d\x81\x65\x90\x30\x7d\x52\x24\x7e\xfc\xf0\xe6\x28\x9e\x2f\xe2\x88\x46\x19\x4f\x6d\x48\xf3\xd2\x43\x4f\x65\xb1\x30\x28\x5b\xce\x2d\x41\xb2\x81\x61\xb8\x54\x1a\x27\x64\xa6\xa3\x47\x81\x6b\xbf\x3a\x90\x38\xb7\xa4\x8a\x2e\x1f\xd3\x8a\xe8\x3a\x42\x4f\x37\x78\x65\x86\xbb\x7e\x59\xcd\xaf\xaa\x33\xd2\x3f\xf7\xd0\xf9\xa8\x8b\xcf\x7d\x75\x67\x4a\x31\x50\xa2\x39\xc8\x3f\xf7\xce\x47\x5d\x7e\x77\x6f\x18\x18\xb2\x41\x75\x90\x91\x78\x94\xa9\x04\xec\x0f\x77\xdb\x9e\xf0\x08\x08\x9e\xe3\xfb\x24\x62\x5b\x1d\xf5\x49\x54\x70\xbd\xde\xb8\x4c\x82\xe1\x15\xcd\xee\x23\x04\x9d\x7b\xe7\x3e\xbe\x87\x8a\x8a\x84\xf2\xec\x9a\xd5\x31\xe0\x15\x79\xbe\x7a\x51\xc8\x3e\x41\xd5\xef\x45\x7e\x49\x88\xf4\x7b\xd4\x42\x82\xd0\x7c\x15\xd2\x88\x21\x8d\xea\x48\xd9\x27\x64\xd8\xe5\xc9\x59\x51\x14\x28\x23\x21\xba\xd3\xfa\xdb\x35\xa2\x38\xa2\x46\x01\x19\x66\x6b\xb9\xcd\xaf\x94\xbc\xc8\x58\xf3\x09\x35\x48\x5c\x61\x49\x9e\x84\x73\xa4\xdd\x09\xff\xe6\x0d\xfe\xbf\x8e\xcf\x1b\x8d\x07\x48\xb9\x45\x30\x3a\x46\x8b\x2b\x3b\x6d\x7e\x55\x7d\x66\xf6\x27\x60\x6c\x1b\x58\x95\x24\x06\xe6\x96\x5f\x4a\x70\x0d\x88\xe6\x56\x55\xb9\x54\x25\x86\x3a\x84\xdb\x0a\x74\x5b\x2f\xee\xcd\x26\x46\x01\x86\x08\xc5\xdc\x66\x17\x12\x5c\xb9\xf7\xe2\x2e\xf9\x12\xe9\x92\x8f\x35\x62\x94\x0f\x69\xeb\x83\x2d\x9d\xd7\x7c\x27\xae\xdb\xb8\x6b\xd8\xb5\xb3\x8b\xa8\xd3\xd9\xa9\x3b\x7a\x8a\xf0\x80\x0b\xb0\xba\x51\x50\xbb\x87\x28\x94\x61\xb6\x48\x39\x31\xee\xba\xc9\xc9\x80\xa2\xba\x2b\xc1\xfb\x7c\x09\x96\x8e\x0b\x2d\xf9\x2b\xc3\x05\xde\x14\x83\x20\xf3\xb8\x48\xc2\xaf\xa8\xf8\x0d\x1e\x89\x80\x16\xd0\x32\x1f\x30\x76\x93\x22\xeb\xd1\xdb\x2c\x09\x86\x19\x49\x21\x13\x91\xec\x48\x0e\x59\xf5\x0e\xaf\x71\x44\xbd\xc3\x38\x85\x98\x7c\x82\xeb\xf0\x07\x05\x9c\x17\xb1\x5f\x1b\x26\x24\x6f\x1c\x53\xc2\xf9\x0f\x9d\x93\x17\xca\x07\x8a\xde\x94\xcf\xe7\x27\x8d\x10\x55\xf2\xa2\x74\xe0\x05\xfc\xa2\x04\x0c\xcf\x80\x04\x0c\xdf\xf0\xcb\x78\x06\xae\x9e\x17\xa0\x84\xff\xf4\x09\xfb\x1d\x01\xc5\x15\xe0\x43\x1c\x44\x0b\x31\x53\x55\x2c\x70\x6b\x75\xb4\x63\xde\xc4\x12\x1e\x85\xb3\x0d\x23\x63\x0c\xd5\x76\x36\xd0\xe7\x18\x95\x53\x4c\x8c\x41\x63\xfe\x24\xca\x61\x27\x95\x0f\x12\x2b\x53\xcc\x9a\x0f\x67\x49\x4c\x58\x06\x0d\x40\x09\x64\x5c\x97\xa9\xcf\xfe\x10\x2b\x05\xdc\xab\xce\x77\xe5\xd6\xb2\x81\x7b\x28\xf6\x47\x3b\x9d\x58\x3a\x51\x61\xa3\x02\xca\xf8\x1e\xb3\xc5\x1e\xcb\xa6\x76\x8c\xf2\x24\x56\x90\x60\x1a\xc4\x30\x03\x14\x02\x5f\x1b\x1b\xa3\x5e\x94\x7e\x39\x0f\xec\x02\x57\xb8\x5c\x83\xcd\x53\x31\xfd\x3f\x26\xb3\xd6\x6b\x99\xbb\x3c\x99\xb9\x25\x13\x1c\x18\xd8\xb3\xfd\xd5\xca\x30\xe0\xf7\x9c\x26\x4b\x37\x47\xdc\x61\x4f\xb6\x66\x24\xbb\xb6\xef\xdf\xeb\x66\xae\x75\x2b\xd7\x8c\x79\x76\xbe\x44\xb8\xeb\xf7\x27\x6d\xe1\x6a\x9e\x18\xa6\xb0\x84\x3c\x8a\x47\xf4\x30\x43\x36\xae\xec\xf8\x9c\xaf\xd8\xc7\xc7\xc5\x42\xbd\x14\x2a\xda\xdc\xcf\xb5\xc8\x27\x72\x0a\x4d\x68\xa6\xd9\x07\x09\xc1\x36\x85\x70\xdd\xc9\x5d\xc3\x54\x29\x5e\x87\x58\xc8\xbc\x37\xe9\xcb\xf2\x29\x4b\x5b\xa7\x88\x3b\xfb\x70\x8c\x76\x24\x0a\x71\x28\x27\xa7\xde\x8e\xb3\x55\xc9\xa1\xb2\x91\x46\x70\x39\x14\x81\x2f\xa8\xf7\xdc\x27\xc6\x88\x1a\x20\xdc\xfe\xb7\xb6\xe2\x5d\x30\xa7\x6c\xd0\x3c\xdb\xaf\x90\x36\x0c\x53\xed\xbd\x68\xdf\xb1\xf9\x9b\x9c\xcc\x33\x2e\x0c\x53\xba\xf0\x1b\x27\xf1\xfc\x48\x76\x35\x8a\xb0\x4f\x22\xee\x69\xc3\x76\x76\x9f\x3e\x7b\xfe\xd5\xd7\xdf\x7c\xab\x39\xac\x6d\xab\xb5\xb9\x00\x9b\x0c\xbc\x5c\xd2\xf5\xe6\x26\x95\xcf\x62\xd6\xd8\x11\x1d\x4f\xa6\xe1\xa7\xab\xd9\x3c\x8a\x17\xbf\x27\x69\x66\xa8\xf9\xb9\x61\x8f\xe6\xb2\x08\x2d\x30\xb4\x97\xae\x7a\x8a\xb3\x8c\x5a\xbf\xa3\xbb\x02\x12\x5c\x11\x56\x1d\xfa\x2b\x0a\x8b\x02\xe1\x41\xad\x8c\xbb\xe1\xc1\x13\x04\x50\x9f\xfd\x25\x6b\xa1\xed\xef\x0d\x6b\x58\xb7\x87\xe2\xf5\xe1\x25\xe5\x0f\x10\xe9\x68\xfb\x26\xcc\xa6\x9c\x51\x6e\xc7\xc9\x76\xe5\x5b\xb4\xe4\x84\x32\x8a\xad\x30\xe5\x81\x9c\x38\x7b\xf9\x7e\xd3\xf4\x7a\x2f\x37\xcd\x8a\xc4\xd9\x76\x18\x6d\x47\x2a\xce\x6e\x65\x7c\x9d\xfb\x18\x87\x4a\x8d\x9a\x31\x2d\x22\xf5\x66\x3e\x89\xbc\x99\x2f\x8f\x74\xee\x02\x92\xa0\xa8\x32\xa0\x1c\x12\x7b\x6f\xb8\x1f\xa8\x5a\x86\xa6\x89\x63\x85\x20\xf0\x86\xbe\xc0\xc1\x7e\x31\x34\xfc\x6f\x75\x85\x97\x3e\x6e\x91\x6a\x4f\x9f\x8c\x27\x5e\x60\x8d\x6d\xeb\x5b\xff\x6e\xb7\x30\xc0\x98\x84\x5c\xe8\xd2\x21\x90\x0e\x82\x4d\x09\xb4\xa5\xdf\x18\xf0\xf7\xd9\x95\x49\xcc\x88\xae\x73\xa5\x6a\x86\x6a\xc6\x32\x32\x82\x4b\x69\x45\xa5\xb8\x9a\x88\x2a\xe0\x6c\x95\x1e\xb6\x94\x67\x30\xcc\x9d\xf0\x48\x9d\xa3\x1c\xaf\x86\x71\xa6\x94\x82\x45\xaf\x79\x3e\xc4\x28\xc2\x10\xa3\x44\xbf\x2c\x11\x77\x19\xf7\x93\xac\x28\x0d\x75\xfb\x73\xf5\x0a\x2c\x61\xda\xab\xd3\x7c\x88\x97\x11\x44\x49\xcc\x37\xe4\xaa\xc1\x65\x09\x4d\x71\x6c\xe7\xea\x6d\x3e\x9d\x36\x4c\xf1\x97\xf2\xa5\xc3\xf6\x7f\x89\x3d\x60\xf4\xf1\xc3\x9b\xff\x92\x1e\x9a\x98\xc8\xb8\x5c\xd0\xed\xff\x12\xb8\xfe\x0b\xb6\x27\x71\xb6\xfd\x5f\x86\xa9\x50\x9a\xc6\x7f\x19\xe2\xb6\x4e\x51\xd4\x2a\x88\xc3\x7d\xbd\xb2\x6e\xf3\xde\x30\xd4\x37\x9e\xbc\x7a\xf9\xe4\xd5\x2b\xc3\x35\xfe\xdf\xff\xfd\x3f\xff\xef\xff\xfe\x1f\x03\x8c\x27\xaf\x5e\x3d\x79\xf5\xb2\x4a\x61\x2c\x33\x54\x1a\x14\xd3\xc5\xf9\x90\x64\x5e\xe4\xd9\xbe\x4f\x5a\x6a\xe7\xb7\xb3\xd5\x04\x92\x0f\x01\x45\xf2\x56\xc2\xb5\x21\x9b\x29\x79\x0a\x45\x82\x0b\xad\x86\x22\xf3\x8c\x27\x47\xbb\x4c\x6e\x63\xb5\x6b\x0e\x04\xea\xd2\x35\x88\x88\x74\xe5\x3b\xbe\x54\x3d\xb1\xcc\x49\xec\xa5\xfe\x96\xde\x5b\xda\x4a\xc9\xc1\x98\x30\x85\x8f\xad\xfa\xf2\xe2\x97\x5b\x04\x16\xc5\x43\xb1\x5f\xa3\x1e\x93\xd3\xe5\xfa\xe4\xf6\xaf\xef\xdf\x40\x48\x76\xbb\x09\xc4\x24\xb4\x1c\x6a\x7d\xa5\x6b\xf9\xca\xec\xe5\xd6\x96\x87\xc5\x4b\xf5\xe3\xd6\x51\x29\x8e\x16\xdd\xf1\x82\x18\x86\xae\xdf\xd7\x0f\xbe\x0a\xed\x10\x91\x68\xa7\x74\xe4\x4e\xf3\xde\xea\x06\x30\x8f\xaf\xe9\x59\xdc\xea\x5d\xc5\x24\xc6\xb1\x61\xa2\x06\x55\xb7\x0e\x31\x29\x67\x19\x2a\xab\xa4\x73\xe9\x10\x33\xc3\x05\x0c\x67\x71\x4a\xdf\x07\xd9\x54\x77\x6c\xa0\x1c\x75\x48\x24\xea\x3e\xae\x6a\xdc\xad\x3a\xf8\x5d\x96\xcd\x55\x29\x26\x31\x7e\x35\x70\x01\xb3\x30\xba\x87\xd8\xb7\x15\xb1\xeb\x34\x4a\xd2\x7e\xcf\x83\x51\x12\x64\xe1\xf0\x28\x4f\xd6\x1a\x2e\x0f\x02\x14\xbe\x1f\x0c\x73\xdb\xa4\x1c\xcb\xb6\x99\xe9\xd8\x18\xfe\x68\x0d\x7f\x82\x0b\xb8\xa4\x7f\x84\x34\xd9\x84\x1c\x42\x88\xb5\x0a\x8e\xd6\x2b\xd8\x36\x23\xf9\x37\x69\x56\x18\xae\x55\x18\xe3\x02\x82\x64\xb8\x5e\x11\xaf\x86\x12\x93\x42\x46\xcc\x0c\x22\x62\x46\x10\x12\x33\x84\x98\x98\xb1\xfe\xc8\xfa\xe2\xd6\x81\xb4\x1c\x3d\xc8\x49\x64\x51\x98\x91\xd0\xca\x60\x48\x02\x8b\xc2\x98\xa4\x56\x06\x53\x32\xec\x0e\xcd\x71\x77\xcc\xf6\xb7\x78\xdf\x5e\xbf\x22\x8c\xe8\x24\xc8\xc2\x6b\xba\x9d\x04\xa3\x30\x4f\xdd\x6d\xc3\x14\x6e\xc2\xf4\x58\x39\x17\xb7\xca\xb9\x50\x7d\x6a\x39\x64\x6d\xb0\x32\x5c\x46\x7d\x9a\x1e\xb0\x95\x82\xc3\x31\x2a\x1f\x6e\x8d\xbb\xb9\x35\xeb\x0e\x31\xcf\xe9\x74\x62\xe5\x54\x2f\xb2\x02\x18\x91\xd0\x4a\x61\x4e\xf2\x6e\x6e\xce\xba\x33\x58\x92\x45\x77\x61\x8e\xba\x23\xb8\x16\x8b\x30\xfd\x3d\xc9\xd0\x1c\xc3\x44\xfb\x9c\x62\xb8\x24\x71\x97\x27\x64\x41\x84\x50\x62\x89\xca\x86\x71\x8a\xd0\xdc\x9c\x5a\x4b\xdc\x47\xbb\xdd\xeb\xee\x04\x63\xee\xc3\xea\x82\x5c\xf6\x27\x70\x43\x2e\xfb\xd7\x5b\x25\x5d\x17\x96\xa3\x68\x42\xb5\x69\x49\xcd\x8b\xee\x50\xb5\xd1\xbc\xe8\x8e\x4b\x0f\x5e\x26\x31\x0e\x0d\x33\xe6\x59\xec\x5f\x1b\x6c\x3e\xfc\x68\xdc\x5d\x1c\x0c\xbb\x23\xdc\x98\x06\xd4\xbc\xe9\xe6\x6b\xbd\x65\xde\x74\x67\x58\x8b\x27\xb5\xb6\x1c\x5a\x3a\x98\xcf\x9d\xe6\xcc\x91\xa1\x2f\xca\xb9\xb3\x25\x5e\x13\x21\x36\x85\xb0\xe8\x1f\xd6\x25\x01\x86\x21\x89\xc4\x77\x1a\x46\xec\x7b\x4c\xa8\x39\x83\x29\xc9\xcc\x21\x2c\x88\xf3\x5b\x0e\x23\x92\x0f\x02\x2b\x75\x53\x8b\xc7\x99\x8b\x1e\x39\x6f\x22\x15\x8d\xb1\x9c\x34\x03\x7d\xd2\x8c\x79\x43\xa6\x6e\x35\x1b\x14\x98\x35\x16\x9d\xbf\x5a\x35\xb2\x96\x8e\x35\x15\x59\xb8\x31\x30\x12\x19\x86\xa8\xd3\x41\xa3\x7d\x9b\xfd\x4b\x46\x4f\x42\x33\xc4\x30\x3a\x88\x07\xfa\x18\x89\x85\x19\xf1\x31\x72\xc0\x30\x17\xa2\x47\xa9\x35\x53\x7d\x6b\xb1\x21\xde\x0c\x59\x0e\xc6\xb8\x39\x18\x53\xec\x8e\xd6\xe6\x4d\x03\x11\x9f\x14\xa3\x03\x92\x88\xc2\x4d\x9c\xd4\x8c\xaa\xe1\x49\xf1\xfa\x0c\xd1\x46\x2b\xc5\x18\xe3\x02\x12\x3a\xcc\xee\xe3\x7f\x7f\x86\xf9\x9b\xc6\x54\x32\xb1\x6b\xc9\xc4\xa6\x86\x69\x45\xa6\xf1\x2b\x53\xaf\xa5\x2a\xda\xe2\xf6\x5d\xe0\x28\x0a\x15\xc8\xb0\x11\xe5\xa9\x29\x95\x68\xee\xe2\x0b\x18\x96\x2f\x3a\xcb\xc7\x9d\x59\x10\xed\xc2\x94\xa8\x0e\x81\x45\xf5\x14\x65\x54\x3d\x45\x99\x13\xd5\x25\xb0\xac\x98\x01\x5c\x13\x87\x5a\xce\xae\x62\x10\xef\xdf\xc0\x25\x99\xf4\x77\xe1\x82\xec\x76\x27\xd5\x8e\x7d\xa3\xeb\xec\x07\xc4\x19\x5c\xba\x74\x9f\x58\xce\xc0\xba\x14\x8f\x9b\x03\xd6\xd7\x54\x13\x50\x5f\xd6\x4e\x21\xc2\x28\xa2\xc9\x07\x3e\xed\x2b\x90\xdb\x1a\x48\x9c\x67\xeb\x20\xa7\x35\x90\x34\x0b\x92\xec\x30\x9a\xcc\xb4\xb3\xfe\x93\x1a\x04\x8d\x46\x8d\xfc\xc3\xba\xaf\x77\xda\x5b\x04\x4d\x90\x2b\x7d\xcb\x82\xa0\x7c\x45\x6a\x45\x90\x93\xcc\x4a\x60\x46\x50\x30\x88\x5d\x2b\xc6\xfd\x25\x4a\xbb\xa9\x99\x77\x73\xc6\x14\x66\xdd\x1c\xc6\xc4\x9a\x75\x53\x98\x12\x6a\x0e\x61\x44\x32\x73\x0c\x73\x12\x99\x43\xb8\x26\x89\x39\x86\x09\x41\x53\x73\x8e\xfb\xbb\x70\x49\xd0\xc8\xbc\xc6\xbc\x6f\xe7\xd6\x14\x6e\xc8\xb5\x35\x82\x97\xe4\xa2\x7b\x61\xde\x74\x6f\xe0\x96\x84\x56\x0c\xa7\x64\xda\xbd\xb6\xe6\xdd\x11\x9c\x10\x74\xb3\x6f\x0f\x2c\xc7\x75\x70\x77\x89\x16\xc8\x86\xdb\xee\x6d\xf7\xa5\x75\xda\x3d\xc5\x18\x0e\x09\x3a\xed\xde\x58\x17\xdd\x13\xdc\x7f\x09\x57\x04\x59\xa7\xdd\x0b\xeb\x46\x7c\x1e\xf3\x4c\x53\x66\x9e\x89\x4c\x53\x66\x1e\x91\x43\x6b\x02\x1f\xc8\x95\x75\x09\xef\xc9\xb1\x35\x81\x77\xe4\xcc\xba\x54\xc2\xfd\x51\xf7\xc8\xfc\xd0\xfd\x70\xf0\xbe\xfb\xde\x7c\xd7\x7d\xc7\x9f\x81\x1f\xc3\x15\x39\xc3\x70\x37\xbc\x75\x0f\x61\xb8\x74\xaf\xe0\xd6\x76\x5c\x6b\x08\x4b\xf6\x67\x0c\xb7\x8e\xe3\x1e\x76\x51\xd8\xbf\xb5\x1c\x0c\x4b\xc7\x71\xaf\xd4\x57\xc1\x9f\xa0\x1d\xaf\x1b\x67\xbc\x84\x8c\xdc\x42\x44\x66\x88\x1b\x57\x8a\x98\x0b\xe4\x14\x62\x72\x02\x01\x39\x94\x0f\x4b\xab\x29\xb8\x90\x25\x67\xb0\x80\x97\x70\x4b\xcc\xd2\x26\x71\x1a\xa6\x9a\x5b\x28\x38\x25\x66\xb6\x21\xeb\x84\x84\xed\x39\xd6\x25\x1c\x92\x78\x63\xde\x31\x19\xa2\x43\xeb\x04\xc3\x19\x39\x3c\x38\xd9\x12\xcf\x55\x51\x4a\x66\x24\x47\x18\xc3\xe9\xfe\x6d\xa7\x83\x16\xe4\x14\x4e\xc9\x2d\xdc\x92\x05\x86\xd3\x83\x6b\xbe\x8b\x1f\x5c\x58\xd7\x38\xed\x09\xc9\x13\x9d\x76\xa7\xe8\x04\xc3\x69\x77\x8e\x4e\x30\x86\xb4\x17\x24\x43\xc4\x76\xc1\x53\x38\x81\x43\xd8\x39\xc3\x70\x7b\x70\xcd\x3d\x7b\xc9\x12\xb7\xdd\x29\x3a\xc4\x70\xdb\x9d\xa3\xc3\x5a\x89\x5b\x38\x84\x13\x38\xc3\x42\x76\xe0\x3d\x73\x04\x1f\xe0\x3d\x39\x81\x77\xe4\x10\x3e\x91\x13\x78\x43\x0e\xe1\x05\x39\x86\xb7\xe4\x18\x5e\x91\xa0\xbd\x75\xfd\x5d\xf8\x83\xbc\xe2\x95\x26\x03\x33\x69\x07\x72\x97\xe8\xb6\x7b\x6b\x8a\x99\xf7\x9a\x8c\xd0\x10\x9d\x5a\xb7\xac\xac\x19\xb5\x97\xc0\xf0\x1d\x79\x0d\x1f\xc9\x6b\xd6\x59\x7f\x1c\x5c\x8b\xb1\xfb\x9d\xdc\xa0\x3f\xfa\xac\x31\xaf\x30\x86\x9f\xf8\xd7\xa9\xf8\xda\x43\x2f\x2c\xb2\xdb\xfd\x1d\x1f\x5c\x0f\xd0\x27\x93\xfc\xde\x25\x67\x03\xc7\xb5\x1c\x78\x63\x91\xdf\xb1\x8b\x5e\x10\x1b\x3e\x91\x37\x04\x9d\x98\x87\x5c\x2a\x41\x6f\x59\x81\x9f\x78\x81\xf7\x26\xf9\xa9\x2c\xf0\xce\x22\x3f\x61\x17\xbd\x25\x36\xbc\x27\xef\xca\x02\x7c\x22\xfe\x48\xd8\x18\xbc\xc7\xf0\x0b\x61\x15\xbf\xc7\xf0\x37\xc2\xfa\xf8\x0d\x86\xbf\x13\x46\xd8\x1b\x2e\xc9\xbd\x56\x14\x7f\x01\x3f\xf0\x12\xef\x30\xfc\xcc\x4b\xbc\xc3\xf0\x2b\x2f\xf1\x09\xc3\xf7\xbc\xc4\x27\x5e\xe2\x78\x7f\xd2\xe9\xa0\x2f\x9a\xee\x49\x24\x4f\x81\x54\x29\x60\xbf\x5a\x3f\xc2\x8c\x7c\x6f\xfd\x02\x43\xf2\x37\xeb\x07\x18\x93\xbf\x5b\x3f\xc3\x94\x30\x31\x6f\xd8\x15\x11\xb0\xd0\xb4\x3b\xdd\xbf\x56\x67\x61\xde\x8f\x26\x9a\x12\x34\xec\xa2\x5f\xac\x9f\xb1\x35\xee\xa2\x1f\xad\x1f\x30\xee\x4f\x71\x37\x87\x5f\xcc\x69\x77\xe6\x17\x48\xf9\xe2\xa0\x94\xfc\x68\x7d\xe1\xd9\x3e\x64\x94\xfc\x62\x7d\xc1\x2d\x79\x29\xf9\x41\xa4\x25\x94\xfc\x2c\xd2\x42\x4a\x9c\xfe\x1c\x21\xf4\x92\x20\x4a\xbb\x11\x35\x33\xda\x4d\x28\xee\xa3\x25\xfb\xa6\xfc\x3b\xa3\x8c\xf3\x44\x3c\x3b\xe1\xd9\x18\x1f\x38\x03\xdb\x7d\xb9\x6f\x39\x83\x89\x5b\x89\x8d\x2f\x85\xa0\x18\x53\xb2\x44\xac\xa6\x2e\xfb\xc7\x64\x35\x75\xbf\xe0\xf6\x7a\xdf\x91\x11\x7a\x0d\xe8\xd6\x8a\x59\x1d\x21\xb5\x1c\x8c\xe1\xa3\x48\x3c\x55\x89\xa6\x83\x71\x51\xbc\x3d\xb8\x1e\x7c\x64\x83\x7a\x44\xae\xd0\xaf\xf0\x3d\xfc\x08\xbf\xc0\x29\x7c\x84\x33\xcc\xb8\x16\xfa\x01\x7e\x86\xbf\xc1\xdf\x55\x52\xb9\x54\x8e\x7a\xc3\x5b\xf3\xa8\x77\x6b\x3b\x70\xd4\x1b\x2e\xcd\xa3\xde\xd2\x76\x30\x7c\xdc\x7f\x3d\x10\xcb\x86\x01\xf0\x2c\xf8\x08\x63\xc4\xb3\x81\xc3\x63\x18\xa3\x0f\xfc\xf3\x83\xf8\xdc\x39\xc3\x2e\x7a\x44\xa1\xa3\xde\xd2\xe1\x9f\x8e\x28\x54\x5b\xd1\x2c\x5b\x90\xc1\x61\x04\x71\x8e\xac\x6c\xb8\x34\x3f\xf0\x8c\x0f\x2c\xe3\x43\x13\x03\x4b\x65\x59\xa2\x56\x05\x59\x96\xae\x93\x8a\x39\xb1\xb2\x17\x7e\x84\x5f\xea\x64\xbc\x87\x77\x1c\xc8\xad\x83\x70\x3e\xf3\xe2\xe0\x7a\xf0\x9d\xea\x6a\xd6\xa7\xac\x6f\x6f\xc1\xfa\x4e\xf5\x35\xeb\x7a\x36\x04\x2a\x2d\xed\x09\xb5\x74\x53\x67\x7f\xd7\xd2\xd9\xdf\xfd\x99\xce\x6e\x29\x74\x4f\x67\xdf\xfe\x89\xce\x6e\xe9\xeb\xef\x1e\xd5\xd7\x7a\xb5\x6f\xe0\x13\x9c\xb1\x24\xd9\x2d\x7f\x83\xbf\x4b\xd5\xa4\xec\x6d\x1b\x6c\xce\x20\xd2\x5e\x79\x54\x80\x30\xcc\xd4\x59\xa1\xd8\xe6\x60\x66\x1a\xc6\x6a\xc5\x5d\x74\xca\x8c\x45\x6f\x48\xa3\x2c\x89\xc3\x51\x73\xef\x8c\x08\xda\xb4\xf9\x31\xdd\x7a\x03\x43\xee\xef\x42\x42\x90\xb9\x61\x03\x34\xb7\xcd\x0d\xdb\x1f\xee\xef\x5a\x93\xfe\xae\x14\x0f\xbc\x29\x4a\x70\x37\x82\x39\xff\xe3\x17\xb0\xd0\x65\xbb\x8a\xd2\xea\x74\xad\x79\xf0\x3c\x40\xb4\x2d\xc0\x4f\x36\xc8\xdc\x19\x32\x33\x0c\x0b\xec\x52\x86\x57\x13\x08\xdb\xe4\xe3\x75\xbc\x59\x1b\x5e\x3a\xa0\x0c\x2f\xe5\x78\x33\x86\x77\x18\x27\x2d\x04\xdf\x87\x38\x7a\x10\x71\xc4\x10\x2f\x82\xd1\xe7\x60\x15\x32\x0f\x21\x54\xdc\xf5\x3f\x54\x45\xc2\xaa\xa8\x24\xe0\xc7\xd5\xd1\x66\xd1\x53\x47\x1b\x32\xb4\x4a\x6c\x7e\x1c\xd2\xf8\x41\xa4\xb1\xec\x8e\xcf\x40\x1a\x3c\x88\x34\x10\x83\x17\x65\x35\xd3\xbb\xfb\x70\xa6\xf5\x1e\xa6\x0c\x4b\x5a\xc0\xa2\x68\x3c\xbb\x17\x0a\x99\x42\x4d\xf5\x17\xae\xe4\x2e\x48\x68\x70\xca\xba\xdd\x5d\x7b\xb4\xc7\x16\x3d\xb1\x0b\x60\x20\x2f\xa3\xd1\x06\x80\x77\xc1\x3b\x71\x9a\xb7\x01\xcb\x22\x0e\xa3\x8c\xa1\x61\x30\x0d\x34\xa8\xc2\xb3\x5a\xd9\xe5\x91\x22\xfb\xee\x74\x9c\xf2\xd8\x80\xa3\xc0\x2a\x6e\x89\x6c\x48\x8d\xdf\x68\xf4\x38\x56\xf5\x51\x00\x2f\xda\x38\x65\x54\x06\x09\xe5\xa1\x9a\x5e\x8b\x7a\x90\xa4\x13\xef\x68\xf8\x07\x75\x22\x24\x63\x64\x78\xdd\x7a\x8e\xe4\x8f\xfc\xc1\xb5\x70\xd8\x24\x9f\x34\xe9\x98\x77\x4b\xa3\x81\x8d\x68\x0b\xa9\x49\x1f\xb5\xc6\x41\xa4\x37\x7c\x8c\xb5\x21\xff\xa0\x6b\x84\x9e\xed\x37\xdc\x0c\x94\x39\x8e\xcf\x25\xc6\x77\xeb\xaa\xcb\x07\xc8\xc8\x7b\xae\xba\xec\xe8\xba\xcb\x11\xc4\x0d\x9d\x25\x40\x4a\x9b\x84\x19\x0c\xb9\x8f\x46\xf9\x42\x6f\x4a\xe4\xe5\xab\x98\xa1\x49\xa7\x83\x62\x12\xa2\x21\x57\x28\xd4\x01\x3e\x19\xef\x99\x66\x8a\x77\x50\xba\x3f\xee\x74\x22\x34\x23\x81\x97\xfa\x90\x42\x80\xb1\x08\x6b\x8e\xd0\x94\xec\x4c\xf1\x20\xee\x95\x13\x0c\x61\x57\x7c\xbd\x8c\x46\x4c\x39\x99\x72\x03\x03\xd6\x99\xc8\xa4\x68\xc6\x4b\x83\x99\xc9\x5f\x7c\x6b\x1a\x96\x6e\x51\x44\x53\x86\x6b\x9b\x51\xd0\xbb\xfd\x87\xf0\xf6\x80\xf3\xf6\xa0\xb7\xfc\x87\x70\xf4\x80\x73\xf4\x40\xba\x77\x1c\xfd\x65\x66\xbe\xb3\x23\x90\x46\x0c\xe9\x30\x4f\xae\x1f\xcd\x65\xa9\x0c\x2f\xad\xc6\x31\xc1\x1c\x51\xc8\x11\x7d\x0e\xcb\x52\x0c\x2b\x21\x62\x2c\x5c\x8e\x8d\x08\xba\x92\x02\x82\x02\x3e\xb5\x4f\x48\x3e\x72\xa5\x3a\xfd\x1e\x42\x39\x3d\xe5\x98\x06\xe4\x68\x4d\xa5\x1e\x96\xf1\x7c\x61\x0c\x53\x58\xc0\x08\xe6\x44\xbd\xf2\x84\x25\xd9\x71\xe0\x5a\x33\x7c\xe5\xe7\xc8\xfa\xa7\x36\x81\x63\x1e\x03\x29\x40\x23\x39\x81\xc5\x35\x30\x99\xef\x99\xe6\x50\x7a\xda\x1d\xee\xcf\x3b\x9d\x10\x2d\xc8\xcc\x1b\xfa\x30\x84\x19\x9f\xc4\x4b\xa6\x26\x2f\xc9\xce\x12\x8f\xc9\x90\x4b\x64\x92\xdd\x22\x25\x6d\xca\x2f\xa1\xe7\xb2\x1a\xd3\x6a\x7a\xd7\x41\x60\x4a\x86\x96\xb3\x37\x3d\x20\xe3\x3d\xcb\x9a\xe2\x54\xce\xfb\x6b\x6f\xea\xc3\xc4\x9b\xfa\x78\xab\x5e\x56\x32\x6e\x84\x8b\x65\xa7\x83\xae\xbd\xa1\x4f\x4c\x8a\x16\x9c\x38\x98\xf0\xcf\x48\x7d\x2a\x64\xd9\xc0\xcc\x64\x9a\xcb\x4a\x00\x53\x9b\x55\x02\x2b\x83\x71\x11\x8e\xd1\xa8\x21\xe0\x8d\xaa\x35\x55\xf6\xff\x18\x69\xaf\xd3\xb1\x9a\xc6\x28\xc4\x62\xf2\xa1\x00\xab\xc9\x83\xe2\xf2\x46\x6e\xa8\x2f\xc5\xe8\x73\x97\x62\x34\x88\xd8\xe2\x89\xb0\x9a\x31\x43\xbe\x22\x87\xbd\x5b\xfb\x1f\xb2\xc0\x4b\x74\xce\x63\x57\xf8\xe3\x85\xa0\x21\x5f\xee\xc3\xc7\x32\x8f\x07\xa4\xb6\xa4\x6c\x7f\xc4\x91\xda\xff\x10\xac\x25\xba\x47\xb6\xff\x73\x84\xc0\x21\xe7\x00\x43\x3e\x83\x7f\xb6\x89\xf8\xf1\x8b\xdd\x62\x66\x3f\x46\xb8\x77\x8b\x28\xee\x2d\x51\x84\x55\x91\x5f\x9c\xfb\x21\x93\x12\xf2\xe7\xcd\x90\x59\x85\xf3\xb3\xb8\xee\x3d\x82\x28\xe7\xba\x43\xce\x2c\x87\x9f\xc3\x75\x83\x92\xeb\x2a\xe6\x13\x63\x8e\x28\xe0\x88\xfe\x0c\xd7\x8d\x89\x58\xad\x2e\xc7\x46\x04\x5d\x71\x01\xc3\x02\xde\x6c\xf0\xcb\xb1\x4f\x07\x96\xe3\x66\x07\x74\xc0\xfe\x25\x74\x60\xbb\x5c\xe0\x7b\xd1\x6a\xee\x56\xc0\xdb\x75\xee\xfd\x02\x32\xf2\x46\x06\x68\x80\x44\x70\x70\xc6\xbd\x2f\x18\xf3\x66\x5f\xad\x02\x45\x2e\x44\x0a\x98\x56\x42\xc5\x82\xd8\x30\xd2\x38\xf4\x14\xc3\xbc\xfe\xb9\x24\x9b\x8e\xf8\xd4\x8d\xe1\x3c\x8c\xd0\x05\x94\xae\x39\xad\x0b\xd8\x74\x64\xba\xc4\xe5\xbd\x22\x2b\x54\xde\x43\x5d\xe3\xfe\x14\x36\x29\x93\x70\x49\x26\x5d\x74\xad\x0e\xb6\xf9\x0e\x22\x84\x9d\x29\x97\x75\xd0\x98\xcc\xbd\x91\x97\xfa\x24\xe5\xbc\xb8\x12\x78\x78\xc0\xec\x85\x49\xc6\xd5\xb6\xb3\x43\xb2\xc1\x68\xcd\x92\xb8\xe2\x89\x19\x9a\x7b\xd4\x87\x39\x0f\x1a\x82\x5d\x51\x24\xea\x74\xd6\xcb\x68\x4e\x81\x50\xc0\xca\x04\xdc\x59\x14\x17\xc4\x60\x46\x16\x03\x74\x6d\x4d\xbb\x97\xb8\xbf\x70\x4b\x5a\x61\x49\x86\x38\x27\x8c\x58\x18\x92\xa5\x89\x38\xed\xb9\x8f\x0f\xec\xc1\xb8\x3b\x73\x6d\x6c\x5e\xc2\x9c\xc7\xbd\x19\x05\x59\xe0\x06\x5e\xee\xcb\xc8\x31\x2a\x88\xc5\x18\x2a\x85\xce\x5d\x82\x52\xc3\xdc\x21\x28\xe5\xc9\x9d\x94\x31\x82\xe7\x95\x30\x26\x9e\x71\xfe\x23\x05\x32\xd6\x21\x3f\x36\x1e\x09\xdd\xcf\xb7\xa9\x9a\xb1\x4a\x0a\xab\xdb\x3a\xdf\xcf\x43\xa9\xda\x7e\x94\xb4\xf5\xb9\x8a\x6d\x6b\x90\xe0\x9a\x64\xc8\x84\xa5\xcf\x54\x6c\x1f\xd0\x96\x95\x40\xf7\x79\x8a\xed\x03\xda\x72\xc0\x19\x4c\x50\xc0\x2b\xf2\x1a\x1d\x69\x4b\xfd\x0f\x4d\x33\xe5\x4c\x51\xbb\xb1\xe2\xbe\x16\xca\xaf\x4c\x9b\x00\x6c\xb5\xff\x81\x28\xca\x70\x15\x86\xa3\x44\x00\x59\xab\xdb\x05\x2a\xb8\xee\x56\xe5\xeb\x81\xb7\x8e\xf6\x6e\x41\xfa\x5f\x62\x3f\x69\x4f\x5c\x5b\x13\xda\x5b\x56\xe9\x4b\xa0\x9f\xc1\xb3\x33\xee\x24\x0b\xbb\x19\xc2\x92\xa8\x02\x68\xf1\xc7\x23\xd5\x6d\x5e\x40\x17\x10\xef\xd1\xbc\x2b\x58\x21\xdf\xdd\xa7\x80\x0b\x58\x4d\x8e\x6c\x55\xc5\x9b\xb0\x12\x6f\x9b\xfe\xac\x83\x4a\xa1\xb1\xba\x90\xa6\x18\xb2\xae\x55\x5e\x5f\x53\x8c\xa5\xfe\xfa\xb1\x65\xd3\xfd\x0e\x31\xc1\x50\x48\x83\xaf\x30\x2e\xe0\xf7\xf5\xed\xe3\x93\x06\x01\xe5\x68\x0a\x2f\xb3\x5c\x52\xe0\x36\x87\x62\x5f\x17\x2e\xee\xb8\xd8\x20\xfc\xcc\x70\xb9\xe0\xc1\x91\xd7\x56\x27\xed\xdd\xda\x5a\xa6\x0d\xd5\xa5\x2b\xcb\x73\xb4\x3c\xe7\x9e\x39\xa3\x1f\x1a\xd2\xde\x52\x43\xb9\x64\x28\xf5\xb3\x3f\xda\x5b\x6a\x58\x97\x0c\x6b\x39\x56\x8d\x75\xa8\xf5\x5b\x84\x58\x77\x95\xc5\x64\x4f\x94\x43\xb7\xb9\x60\xd2\x52\x50\xd5\xf9\xa6\xed\xa8\x53\x2b\x1b\xae\x97\xfd\x45\x55\x7a\xd2\x76\x9c\xa9\x95\x8d\x5b\xca\x3a\xff\x80\xd5\x05\x3f\xb5\x4a\x2e\x1e\xca\x88\x99\x69\x66\x2e\xd4\x52\x26\x00\x3c\x6c\x9d\x3e\x61\xfd\x02\x7e\x6c\x7a\x10\x15\x46\xac\x15\xbb\xfa\xa5\x7e\x53\x1f\xe7\xc9\x50\x63\x58\x7f\xab\xe5\x66\x41\x32\xa1\x1a\x2f\xfa\x7b\xc5\x8b\x7e\x81\x88\xfc\x0d\x12\xf2\x01\x42\xf2\xbe\xe5\x3c\x45\x86\x87\x82\x94\xfc\x28\xec\x63\x35\x09\x66\x46\x6a\x67\xdf\x29\xb7\xdb\xa9\xa7\x70\x9b\xae\xd5\x0a\xc5\x24\x10\x57\xb7\x14\xc5\x50\x17\x89\x50\xea\xd9\x3e\x99\x01\x13\x56\xea\xa7\xe5\x29\x6e\x05\x1d\xb6\x82\x32\xce\x5e\x3f\x55\x09\x5a\x4e\x55\x44\x3f\x3d\x7e\xcb\x55\x7b\xad\xe8\xc1\xc7\xef\xb6\x6a\x9b\xbd\xfd\x87\xee\xae\x8f\x54\xc4\x1e\xb9\xad\x7e\x96\xc4\x1e\x37\x8f\x76\xd5\x3e\x5a\xce\x95\x2f\xaa\x1b\x58\x7c\x47\xd5\x69\x63\x06\x11\x06\xda\xab\x99\x2e\xa2\x8c\xa0\xcc\x4c\x70\x7f\x97\x3f\x6f\x0d\x79\x91\x0a\xd1\x0f\x9f\x81\x08\x22\x82\x22\x33\xe4\x97\x2d\xb2\x48\x85\xe8\x67\x1d\x91\xb0\xdb\xfd\x49\xe0\x09\xc4\x0f\x55\x96\x89\x9d\x3f\xa1\x84\xe5\xe4\xfc\x47\x88\xb7\xca\x8a\x63\xcf\xf6\x21\xf6\x1c\x7f\xbd\xfa\x80\x65\x05\x9e\xe3\x43\xca\xfd\xa5\xb0\x5f\x39\xfb\x95\x73\x7f\xaa\x25\x21\xbf\x56\x7c\xe7\xef\xe8\x0b\x2d\xe3\x7b\x3d\xe3\x07\x2d\x83\xd2\x72\xbb\xf9\x3b\xfa\x19\xff\x59\x51\x41\xc4\x04\xa2\xe4\x6e\x94\x04\x37\xad\x91\x6a\x2b\x33\xc5\xac\x3f\xd1\x5a\x1d\x81\xcd\xda\xab\x6e\xde\x22\xb0\xe1\x02\x17\x05\x44\x8f\x45\xf6\x1c\xf7\x77\x2b\x74\xd6\xd3\x6e\x04\x16\x1f\x41\x79\x92\x6c\xb5\x7c\x3f\xed\xea\x29\x6d\x09\xfa\xe7\x1a\x4a\x96\x50\x87\xaf\x7f\xd5\xb1\x59\x2d\x09\xb5\xcf\x12\x9d\x76\xae\x5f\x14\x90\x50\xad\x9d\x4e\xff\x29\x86\x90\x92\xdd\x6e\x42\x21\x7e\x6c\xdf\x84\xe2\x38\xa4\x9b\xd0\xaa\x87\xec\x7a\x5b\x12\xd1\xff\xf2\xcb\xae\x53\x26\x33\xeb\x74\x05\xb4\xb4\x38\x43\x93\xbe\x63\xe3\x7e\xf9\xf9\x75\x97\x27\x40\xaa\x81\x5c\xb0\x94\x6e\x40\x21\xa7\xa4\x92\x8e\xca\xd4\xd9\xe3\xda\xd2\xfb\xe6\x5b\xfb\x1b\xe7\xa9\xfd\xad\xf3\x7c\xf7\xdb\xdd\x6f\x9e\xef\x76\xf9\x93\x8b\x94\x76\x23\x08\x49\x4e\xbb\xd1\x3d\x2d\x0c\xf5\x90\x7c\xce\x5e\xbc\xff\x7c\xcf\x34\x63\x15\x90\xf0\xa2\x1b\xf7\x9f\x43\x4a\x74\xbb\xd0\x9c\x68\x56\xa1\x5b\x25\xaa\x9c\xcd\x84\xb4\x36\x98\x69\x37\xb1\xf2\x6e\x08\x79\x37\x31\xd3\x6e\x88\x8b\x66\x77\x0d\x1f\x39\x58\x3c\x40\x41\xc4\xe7\x72\x42\x87\x19\x4a\x38\xa3\xe1\x91\x2b\xc7\xfa\x4c\x78\x8a\x61\x7a\x1f\x4a\x4b\x9f\x00\xe8\x69\x77\x4c\x31\xd6\xfb\x66\xb7\x3e\x17\xc7\xb4\x39\xbb\xb5\x94\x7a\x4b\x16\x75\x32\xfa\xbb\x30\xa2\xc4\xe9\x6b\x93\x74\x17\xc3\x9c\x92\xa7\x5d\x34\xa2\xfd\x5d\xd3\xc1\xb0\x7c\xec\x4c\x9d\x8b\x99\xda\xdf\x85\x90\x44\xdd\x11\x85\x98\xf0\xa0\x76\xdd\x11\x35\x23\x48\x89\x15\x43\x4e\x82\xaa\x1d\x6c\x50\x2b\x92\x63\x08\xf4\x21\x81\x5c\x6f\x61\xef\x79\x37\xb1\x16\xb4\x1b\xc2\x82\x76\x13\x93\x7d\x87\x8d\xfc\x98\xe5\x07\x2c\x3f\xe6\xf9\x41\x23\x3f\x65\xf9\x39\xcb\x4f\x79\xfe\x1a\x7e\x93\xe3\xe7\xa8\x19\x68\xd2\xc4\x6f\x72\xfc\x1c\x35\xcb\x8f\x9b\xf8\x4d\x8e\x9f\xa3\x66\xf9\xe9\x7a\xe7\x5f\x53\xe2\x65\x14\x22\xb6\xfa\x61\xc8\xd6\x0d\x4c\x29\x2c\xa9\x0f\x13\xba\xae\x3a\xcc\x50\xc6\xd4\x11\x32\x43\x5f\x3d\x53\x21\x42\x75\xdf\x71\xf2\x85\x0a\xb7\x68\xe6\x2e\x5e\x13\x29\x35\xb5\x9f\xee\xf4\xd8\x18\xa2\x08\x36\xda\x20\x40\xe9\x02\x48\x9d\x76\xad\xc9\x44\x49\x8f\xeb\x81\x7f\xf5\x6c\x83\xad\x13\x7e\xb4\x91\x08\x47\x3b\xff\x88\xeb\xa6\x84\x0b\x5f\xc9\x67\x1e\x2d\x36\x05\x95\x84\x8b\x62\x49\x01\x97\xb5\x01\xd1\x2e\x28\x2f\xa8\x7a\x62\x43\xab\x0b\xcf\xfa\x4e\x8f\x76\xbb\xb4\x77\x71\x6b\x9b\x94\x3f\x34\xe8\x3f\x05\x91\xb2\xe4\x29\x4b\x91\x22\x20\x04\x64\x99\xb2\x94\x29\x35\x98\x67\x02\xc6\xcc\x70\xff\x2b\x05\xf5\x4c\x40\x99\x11\xee\x7f\xa5\x49\x02\x37\xb4\xed\xc6\xfc\x86\xfe\x4b\xaf\xcc\x6f\xd7\x5f\x0b\x69\xa6\xd9\xef\x82\x77\xf0\xf0\xd5\xba\xbc\xe4\x5e\xbf\xda\x7e\xea\x5e\x50\x31\x73\xcb\x67\x23\x0a\x75\xe9\x58\xb3\xf5\x32\x7a\x1d\xbc\xf8\xdf\xfb\x7b\x3d\x6b\xb7\x96\xf5\x14\x5a\x6b\x42\xcf\xbb\x6a\x90\xcd\xf2\x25\x0d\x9b\x96\x2a\x7d\xa9\xd2\xd9\x14\xfe\x0a\x97\x06\x02\x6a\xd4\xb8\x4d\xc0\xda\x3c\x81\xea\xf5\x00\xac\x4d\x19\xed\x31\x96\x3c\x8c\x79\xd9\xca\x32\x22\x7a\x23\x16\x80\xb6\x5a\x6f\x5b\x17\xc4\xed\x86\x05\x71\x49\xcb\xa9\x7f\x49\x3f\x6f\x8a\xdf\xee\xaa\x1f\x4f\xd5\x8f\x67\x2d\xb3\x5f\xfe\x50\xc0\x4b\x05\xbc\x7c\xf6\x57\x17\x86\xd3\x3e\x01\x14\x75\xaa\x13\xcb\xa0\xf7\x2d\xf3\xb8\x6d\x36\x34\xd0\x95\xf8\xcc\x5d\x35\x11\x9e\x72\x56\xa5\xd0\x97\xe9\x4b\x96\xde\xac\x4c\xcd\x22\x55\xb4\xc2\xb2\xab\x63\xa9\xd2\x97\xbb\x2d\x58\x36\x90\xfc\x54\x90\x2c\xcf\xf4\x36\xb4\xbb\x96\xab\x26\xf9\xf2\x69\x5b\xee\x33\x95\xfb\x8c\x0b\x4e\xff\xc8\xa5\x7c\xbb\x5b\x4d\xf4\x5d\x92\xdd\xb3\x42\xa1\x9c\x55\x65\x81\xa7\xf5\x02\xed\xeb\xf6\xf6\x59\x55\xe0\x19\xc9\xe0\xde\xd1\x64\xfb\x89\x9a\xcf\x26\xe5\xeb\xb9\x5c\xcd\x2a\x67\x29\x36\x20\xd5\xe3\xff\x94\x75\x7d\xba\x71\x5d\xdf\x36\xd6\xf5\x49\xeb\xba\x3e\xf9\xcf\xdb\xe8\xee\xdd\x83\x9e\xfe\xfb\xec\x41\x7f\x6e\x13\x91\x6f\xec\x37\xcf\xb3\x84\x6c\x9c\x69\x5b\x0f\xed\x7a\x11\x24\x1b\x76\x3d\x96\xd3\xc2\x19\x24\x55\xcf\xfe\x39\x93\xf7\x70\xe3\xe4\x3d\x69\x4c\xde\x2b\xaa\xdf\x44\x5c\x06\x69\x98\x92\x72\xf3\x92\x88\x2f\x69\x16\x90\xac\xb8\xaa\xcd\xe8\xfb\xe6\x22\xf1\x7c\x45\x53\xf5\x93\xe3\x7e\xf0\xf2\x44\xf3\xc7\x7a\x71\x0b\xca\x57\xe9\x52\x0b\x85\x67\x89\x28\x29\x07\x76\x19\xd7\x2d\x91\x7e\xf1\x21\x26\x19\x3f\xd8\xe2\x8e\x54\xad\x10\x52\x1e\x28\x98\xab\x7a\x3c\xce\x57\xbe\x4f\xa2\x3d\x9c\x90\xbc\x1f\xd5\x88\xd2\x59\x2d\x6b\x6c\x97\x7a\xb9\x6f\x22\x35\x77\x59\x12\xee\xa2\xd0\x4c\x98\x22\xa7\x81\x65\x6d\x60\xb1\x99\x74\x53\x8c\xb7\x54\x5f\xa8\x8e\xd0\xde\xa8\x57\x5d\xf1\xe0\xdd\xd0\xad\x70\xf9\x63\x96\x83\xb1\x94\x09\x99\xba\x0d\x3a\xa6\x0d\xb7\x5b\xe5\x97\x3e\xf6\xc2\x91\x5d\x39\xb2\x3c\x3a\x84\x1c\x7b\xa5\x50\x45\x3d\x3e\xd0\x2d\x0a\x15\xe5\xd5\x41\x54\xa0\xde\x37\xcf\xf5\x50\x54\x0f\xeb\x1f\x42\x5d\xa0\xbd\x8b\xab\x2e\xff\xbd\x6b\x71\x45\x82\x69\x86\x6c\x71\x95\x19\x4b\x9e\xb1\x14\x19\xb7\xbb\x5a\x09\xc7\xca\x04\xb4\x96\xb8\x74\xc4\x79\x02\xdb\x54\x79\x96\xa6\x77\x1c\xd5\x66\x74\xc9\x90\x95\xff\x54\xc2\xc6\x0b\xf7\xbf\x2a\x8e\xfe\xbb\x19\x74\x29\xa6\xb5\x0a\x65\x7f\x51\x04\xbb\x5f\xf3\xd0\x44\x91\x3a\x6f\x3a\xdb\xa8\xd0\xfc\xaf\x86\xb2\xdb\xc2\x84\x9d\x7b\xe5\x9f\x92\xb9\x9f\x3d\x92\xb9\x37\x86\x47\x17\xcd\x5a\xd9\xbd\x1c\x44\x4d\x7c\x93\x4c\xe1\xc3\xa3\x98\x02\x63\x02\x47\x4d\x26\x90\xd1\x28\x0d\xe3\xe8\x7e\x3e\xa0\x9b\x1a\xbd\x7f\xe4\x82\x7b\xff\x2f\xd5\x74\x6e\x9f\x7f\x9e\xca\x23\x7f\x3c\xff\xe7\xea\x3e\x6b\x52\xfe\xe7\xea\x3e\xf5\x75\xfc\xd9\xe8\xda\xf4\x92\x47\x6b\x1e\x2d\xb9\xcf\x55\xee\xf3\x7f\xbc\x5e\xb2\x59\xcd\x68\x5f\x97\xed\x3d\x5e\xd7\x3d\x5a\xfb\xb6\xa1\xad\x3c\xaf\x4a\x3c\x2f\xeb\xfd\x6f\x5b\xc9\xef\x1e\xbd\x92\xdf\xff\xe5\x95\xfc\xe9\x91\x2b\xf9\xd3\xff\x84\xad\xf3\x7f\xb6\xb6\xf3\xe0\x2e\xb8\x2e\x09\x3c\xf6\xd0\xe6\x31\xda\xcc\xbf\x7c\x99\xbc\x79\xf4\x32\xf9\xf4\x97\x97\xc9\x0b\x5a\x0f\x97\xcd\xa5\x54\x11\xeb\x72\xe9\x70\x6b\x29\xd6\xa2\x80\x7f\xef\x72\xaf\x8b\xbd\x8b\x99\xed\x5c\x04\xea\xad\x78\x4a\xf8\xc9\x3a\x4b\xdb\x0d\xcc\xa7\xea\x77\xc0\x7f\x38\xbb\x17\x81\x29\x7f\xec\x06\x90\x13\x2d\xbf\xc4\xa4\x00\x02\xbc\x95\x10\x94\x74\x53\x21\x56\x77\xcb\x72\xfc\xbc\x5f\xab\x05\xf7\x73\x08\x09\x0a\x05\xe4\xb2\x01\xb9\xac\x43\x16\x92\xe6\xdd\xa7\x15\xcd\x33\x49\xf3\xee\xd3\x8a\x66\x96\xdf\x46\xf3\x90\x68\xf9\x25\x26\x8d\xe6\x98\xa0\xb8\x3b\x13\x77\x12\x15\x56\x2b\xab\xa8\xc2\xfd\x21\x04\x04\x05\x02\x6a\xa9\x43\x45\x35\xa8\x62\xa3\xea\xa1\x5e\xd4\xb7\xab\x09\x6f\xef\xe5\x75\xc1\x6c\x31\x65\x3a\xef\xdb\xff\x14\x4e\xc7\x67\x85\x62\x61\xac\x93\xd5\x6f\xd6\xf3\xa4\x82\xd9\xd5\x81\x76\x75\xa8\xf2\xe3\x5f\xa9\x6f\xac\x4b\x14\x1a\xe8\x7f\x93\xca\xc1\x26\x7f\x3b\x7b\xd6\x83\x3c\x32\x4d\x56\xb9\xf4\x67\xda\x6b\xb6\xa5\x77\xb8\x76\x15\xad\x77\x30\x4f\x5e\xc4\x37\x28\xea\x46\x66\xd2\x4d\xf4\xd9\x86\x71\xb1\xb1\x77\xff\x1d\x2e\x61\x4a\xde\xfe\x62\x9d\xb7\xaf\xcd\x3e\xd8\x30\x13\x61\xe3\x4c\x84\x8d\xd3\x12\xfe\x15\xfb\xc7\xab\x47\xed\x1f\xe2\x04\x45\xb2\x0e\xb7\x54\x9f\x6c\x6d\x37\x11\x9c\xe3\xfe\x43\x14\xfd\x0c\xe5\x8f\x47\xf1\xa1\x3f\xfe\xd3\x74\xa7\xff\x6e\x7e\xf4\xbf\x6a\xd8\x7f\x28\x53\xfb\xf7\x54\xfb\xfe\x47\xf2\xbc\xd7\x9f\xc1\xf3\xfe\xd0\x78\xde\xfb\xbf\xca\xf3\xbe\x7b\x14\xcf\xfb\xee\x7f\x65\xaf\x7f\x03\x85\xf5\xdf\x9f\x71\xfc\x47\x2a\xc8\xff\x23\x19\xca\xc7\xcf\x60\x28\xdf\x69\x0c\xe5\xd3\x5f\x65\x28\xbf\xb7\x5e\xc1\xff\xfe\x57\x85\xa6\xfb\x56\xa3\x06\x71\xcf\x5a\x6b\x5f\x53\xad\x0b\xea\x1e\x49\x1e\xb5\x6d\x94\x2d\x82\xbd\xba\x12\xfc\x69\xe3\xf5\xef\xef\x8d\xeb\xdf\x1f\xa9\xfe\xde\x46\x3e\xb6\xad\x94\xe4\x5f\xda\x4e\x3a\xc4\x51\x03\x84\x24\xb3\xc4\xc9\x47\x4c\xe4\x9d\x9c\xb8\xc1\xeb\xa3\x64\xb5\x0a\xf7\xed\x4e\xc7\xb2\x31\x53\xe2\x23\x4b\x9a\x11\xa2\x70\xb5\x4a\x54\x46\x4a\x50\xdc\x0d\xcd\xa0\x9b\xb0\x12\x66\xa8\xde\x0a\xa0\x1f\x29\x8a\xb1\xf9\x23\x45\x01\x96\xaf\x8e\x6a\xaf\x86\x63\x0c\xe5\xef\x00\x43\xef\x79\xb7\xfc\x4c\x31\x5e\xad\xb4\x10\xbf\x7f\xa3\xba\x79\xb0\x46\xbc\x7a\x96\x10\x0d\xd0\xd3\x6e\x9d\xf8\xc8\xca\x70\x7f\xd7\xd5\x1f\x1d\xb5\x74\x82\x2d\x8f\x7b\x6c\x79\xdc\xe3\xc8\xe3\x1e\x87\x37\xcb\x4a\x70\xff\xe9\xd6\xe6\x83\x09\x33\x85\xd0\x4c\xbb\x19\xc4\x56\x0a\x81\x95\x76\x23\xee\x4e\x54\x7b\x92\xd2\x3a\x9f\xab\x87\x26\x2d\xd9\x6c\x74\x7f\xa6\x35\xcf\xaa\x3f\xdf\x8f\xe5\x57\xda\x98\x1c\x5f\xd4\x8b\x7f\xdf\xcc\xff\xa1\x9e\xcf\xc3\x75\x6e\x46\x9f\x65\xe5\x63\x2d\x88\xc4\xcb\x42\x79\x7f\x2f\xc3\x2e\x88\xb7\xe6\x09\x96\x01\x63\xcb\xcf\xa0\xf6\xc9\x2d\xed\x43\xcf\xf6\x89\x0d\x31\xfb\xb3\x0b\x01\xfb\x43\x3d\xdb\x37\x77\xbb\xd4\x73\x7c\xc8\x88\xb3\x97\xed\x27\xfc\x8e\x3f\x13\x01\xd4\x1d\x88\xd9\x9f\x67\xfc\x7d\x36\x79\xd6\xa5\x5e\x26\xc0\x33\xd3\xf1\x25\xce\xc4\x72\x18\xba\x58\xfc\xf8\x1a\x02\xf1\xe3\x9b\x2e\xe5\x3f\x4c\xea\x25\x25\x6e\x8e\x39\x22\x0c\x77\x3f\xf6\x32\xcb\xf1\x79\x05\x16\x89\x78\x0d\x16\x89\xba\x01\x4f\xd6\x71\x0b\x84\x7d\x51\x01\x64\x24\xb1\x76\xf7\xb2\x03\x62\xef\x59\x96\x24\x13\xf1\xc2\x21\xa7\x0a\x33\xc4\xa2\xbc\x24\x09\x31\x0a\x4c\x81\x0c\xf7\x77\x21\x23\xb6\xd6\x4e\xde\x40\xd5\x24\x89\x43\x39\x5f\x0b\x21\xf6\x8b\x2f\xfe\xbb\x05\xa8\x75\xb9\x29\xb3\xff\xb9\x17\xdb\xba\x05\x6e\x6d\x17\xfe\x7b\xed\x62\x3b\xb3\xe1\x6f\x8d\x04\xfc\xdf\x75\xdc\x24\x98\xd3\xbb\xe0\x1d\x8f\xf2\xcc\x36\x05\x2e\x70\x61\x2d\x2c\xc0\x6a\x95\x95\x5f\x4b\xe7\x9e\xce\xf9\x77\x38\x27\x02\xd5\xd5\xaa\x87\x23\xf2\x8b\x26\xec\x60\x88\x9a\x76\x7b\x6b\x63\xd3\x28\xf1\xe7\xcd\xa1\x4a\x94\x24\x2a\x8a\x02\xd0\x0f\xfa\x8a\xa8\x87\x7e\xd3\x17\x0b\xc6\x42\xbd\x6e\xbc\x87\xd5\x41\x04\x80\x0c\x76\xc9\x89\x07\x8a\x0b\xf8\xb9\xb6\xe4\xee\x09\x23\xd1\x14\x22\x79\xe9\xd6\x10\x11\xf7\xc8\x16\xb3\xcd\x91\x1f\x9a\xcb\x83\xe3\x7f\x7c\x1c\x86\xf6\x8d\x2b\x03\xca\x1f\x11\xc5\x10\xe2\xa2\x00\x9a\xfd\x6b\xf9\x4b\xdd\xac\xec\x4f\x9a\x8f\x71\xe3\x31\x5c\x46\x85\xbf\x67\x6d\x70\xdf\xb8\x9e\xed\x6f\x5a\x21\x65\x3e\xec\x12\x42\x22\xbc\x01\x0b\xe3\xfc\xdc\xb3\x2d\xf7\xf6\x59\xda\xac\x11\xbe\x3f\x32\x29\x8a\xbf\xd5\x8a\x89\x0d\x01\x71\xf6\x82\xfd\x68\xcf\x34\x63\x30\xcd\x00\xdf\x37\x14\x89\x67\xfb\x5e\xec\x43\x28\xff\x26\x9e\x23\xbf\xc5\x5f\xea\x05\xac\xde\xc0\xc7\x7b\x0f\xb2\xb5\xe8\xcf\x30\x33\xb5\x04\x6b\xf6\x6d\x7f\xcd\x92\x2d\x6a\x7d\x29\xc3\x84\x01\x2e\x6a\x68\x62\x6b\x92\xdd\x77\x80\x90\x91\xac\x48\xfe\xd5\x73\x53\x75\xc3\xe3\xb6\x37\x7b\x5f\x92\xaa\x7a\x3e\xdb\x77\x3a\x9d\xdd\xfa\x1e\xd3\x1c\x95\xfa\x56\xa7\x7a\x11\xc3\x3f\x61\xdf\x3a\x20\x76\x19\x75\x21\x2b\xc7\x3d\xdb\x34\x19\x36\xe8\x39\xff\x4e\xc6\x5b\xe5\x6e\x53\x2e\xfd\x6c\x9f\xd8\xed\x8b\xb6\xec\xe1\x0d\x6f\x06\x78\x55\xa5\x37\xf5\xf2\x0c\xa4\x5b\x9a\x82\x66\xd8\xa4\xd2\x82\x58\x9d\x84\xac\x19\x0c\x97\xc3\xb7\x29\x1f\x17\x6a\xe3\xab\x76\xb9\x52\xd5\x0e\x37\xae\x15\xbe\x36\x7a\xcf\xf5\xe5\x12\x67\x6d\x30\xb6\x1e\x25\xac\x15\xc2\x11\xae\xd0\xd3\xe6\x46\x18\x8e\x11\x0a\xab\x60\x66\x07\x0e\xae\x22\xd8\xf1\x6d\x84\x70\x7d\xc8\x63\xdc\xd1\x87\xb4\xf4\x3b\xb5\x17\xef\x87\xfc\xa5\x2c\x03\x4f\x48\x20\x81\x62\xdf\x97\x11\x05\xd3\x3d\xd3\x8c\x70\xe0\x45\xbe\xe7\xf8\x26\xe1\x3f\x6c\x9f\x84\xe9\xbb\xe0\x9d\x88\xce\xef\xf8\x78\x90\x88\x64\x57\x26\x14\x90\xd7\x3b\x43\x8f\x61\x26\x1d\x5e\x45\x7a\x58\x6e\xcc\xe4\x6f\x26\x86\xe3\x88\x89\xd0\x59\xa9\x0d\x6a\x5d\x36\xcb\x6a\xce\x9e\x98\xfa\xc0\xfb\x62\x98\xb5\x3d\x8e\xf4\x7c\x0c\x19\xc9\x33\x88\x48\x9a\x41\x42\x66\x59\x85\x29\x44\xea\x11\x3f\x8f\xee\xb7\x29\x18\x41\x4e\x42\x45\xec\x8c\xa8\x57\x81\x30\xd4\xe8\x9e\x09\x5d\x28\x26\xf6\x5e\xbc\x3f\x13\x2f\x8e\x55\x53\xc7\x30\x25\x29\xe3\xfb\x0b\x32\xf4\x62\x5f\x2b\x95\x63\x18\x11\x7b\x6f\xb4\x9f\xef\x99\xe6\x08\x2f\xbc\x91\x4f\xc6\xc4\xb3\xc1\x64\x6a\xca\xc8\x87\x29\x8c\x20\xc4\x3e\x8c\x7b\xa3\x20\x0b\x08\x4b\xdb\x5a\xf4\xae\xe8\x92\x4c\x0b\x59\x1f\x04\x24\x43\x43\x5c\x56\x3b\xf4\x02\x36\x68\x22\x62\x36\x89\xcb\xfe\x43\x43\x08\x30\x0c\xd5\x39\x4e\xd8\x08\x42\xff\x27\x5f\x68\x4a\xff\x1d\x4c\x74\x0c\xf9\x4b\xcd\xb0\xe9\xd6\xea\x2f\x78\xa8\x08\xb9\x87\x8a\xb0\x17\x27\x23\x9a\x7c\xae\x27\xc2\x3c\xdb\xec\x87\x4f\x52\x4d\x05\xd5\x19\xaf\x63\x3c\x4e\x1f\xef\x8b\x43\x55\x92\x66\x2e\x65\x28\xa2\x02\xc2\x02\xc6\x6d\x6b\x31\xd1\xd6\xa2\xad\x87\x93\x14\x8b\xd1\xe6\xeb\xcc\xf6\xab\x55\x18\x54\xb3\x27\x24\x62\xe9\x25\x7c\xe9\x85\x26\xb7\x9d\xf7\x62\xb6\xb0\x56\x2b\x9b\x49\x4b\x21\x5f\xae\x3a\x54\x05\xd2\x27\x61\x91\x66\xd2\xbb\x2e\x4c\xdb\x88\x4b\x6b\xc4\x35\x68\x13\xa1\x95\xb8\xeb\x34\xc9\x2e\xca\xa8\x93\x7c\xae\xe5\x58\x4c\xc1\x80\xd8\x35\x16\x81\x42\xc2\x5a\xed\x65\x5e\xe4\xfb\x5e\xee\x63\xcf\xf1\x2d\x26\x13\xe1\x03\x62\x0f\xb8\x74\x44\x62\x2e\x14\x91\xd8\x24\x21\x76\xc3\x7d\x9e\xcc\x94\x72\xe0\xb9\x01\x4f\x16\x80\x05\x2c\xda\x28\x8f\x36\x76\x2b\xe1\xe7\x3f\x92\xbf\xc5\xe5\xca\xdd\x4b\xf6\xe3\x3d\xd3\x4c\x2a\x58\x46\x77\x4a\x6c\x29\xd6\x05\x38\x65\xfd\x1b\xf8\x5e\x52\xf6\xaf\xf8\x69\x12\xfe\xc3\xf6\x89\x95\xf6\x77\xb5\x2e\x1d\x3d\xc4\x7b\xd9\x3e\x9d\x10\x46\xab\x20\x07\x3f\x34\x13\x98\x8c\x99\x70\x62\xca\xec\x94\xd8\x72\x10\xec\xbd\x94\xb3\xe8\xb4\xca\x1c\x72\xcc\xa9\xef\xc3\x98\x0c\x19\xed\x9c\x70\x98\x12\x34\xb6\xd0\xd0\x0b\x2c\x47\x26\x71\xcf\xf1\x0b\x62\xef\x2d\xf8\x20\x2d\x04\xd7\x1b\xf1\xe2\x0b\xdf\xdf\x9a\x9a\x04\x8d\x4a\x04\xd8\x62\x1f\x55\xe1\x22\x37\xc9\x18\x66\x26\x99\x76\xc7\x45\xa4\x72\x4c\x22\x7f\xf2\xf1\xcc\x3b\x1d\x14\x5b\x64\xd6\xcf\xf1\x26\x90\xaa\xe7\xe6\xd9\x7a\x44\x7e\x1e\xd4\x72\x81\x96\x55\x44\xcd\x3c\x2b\x03\x40\x6b\xfd\x1c\xd5\xa2\xce\x5a\x6c\x96\x15\xfa\x86\xba\xcc\x6a\xfb\x0c\x44\xc4\x72\xd4\xac\x50\xac\x3b\x26\x96\xd3\xb7\xd9\x6c\xdd\x0f\xf7\x30\xd3\xec\xa9\xdc\xc0\x0e\x62\xee\xfc\x97\x6d\x14\x51\x49\x48\xc2\xb7\x97\xeb\xcd\x44\x4f\xfe\x2a\xd1\x93\x35\xa2\x6d\x48\x88\xe5\x68\x44\xb3\xc9\x5b\x51\xcb\x67\x26\xee\x74\x50\x64\x92\xaa\xf2\x88\x13\x7a\xd9\xca\xc7\xae\x65\x54\xe6\x6b\x9a\xf0\x58\xca\x70\xd1\xd2\x9e\xda\x69\x20\xaf\x5c\x36\x0f\x62\x32\xe7\x4a\x91\x5c\x35\x90\x33\x8d\x6f\x46\x3c\x71\x28\x26\x4f\xbf\xe4\x49\x5c\xec\x65\x3e\x04\xfb\xe9\x00\xb1\x95\xec\x45\x3e\xe4\x32\x3a\x36\x8f\x72\x21\xd3\x66\x65\x9a\x22\x7f\x56\x91\x27\xc3\xa7\xa2\x1c\x17\x70\xd3\xda\x9e\xbc\xd1\x9e\xad\xa8\x37\x42\x19\x18\x41\x32\x34\x40\x93\x03\x24\xf8\x71\x81\xa1\x84\xa0\x41\x1b\xc8\xa7\x0a\x84\x49\x7a\x6d\x20\xef\x2a\x90\x45\xd8\x0a\xf1\xb6\x5e\xcf\x87\x60\x14\x06\xb3\x36\xc0\xdf\x2b\xc0\x84\x03\x1d\x6e\x20\xeb\xf7\x3a\x59\x9b\x31\x7e\x6c\x62\x7c\xbb\xa1\x15\x1a\x20\x97\xc0\x37\xa3\xfc\xa9\x56\xf7\xd5\xeb\x38\x09\xff\x88\xa3\xac\x1d\xf8\xd7\x3a\xf0\x8f\x34\xc9\xc2\x61\x3b\xe8\xf7\x75\xd0\xcd\x04\x50\x5a\x41\xa6\x3c\x82\x77\x1b\xd4\x64\x0d\x2a\x6d\x03\xbb\x5e\x03\x3b\x0a\x93\xe1\xac\xb5\x8f\xb2\x75\xd8\x24\x4e\x5b\xd1\x46\x6b\xa0\x2f\xc2\x60\x1e\x47\xa3\x36\xe0\x78\x0d\xf8\xf4\xf7\x3c\x48\x5a\x69\x18\xae\xc3\x66\x41\xd2\x06\x39\x5b\x83\x3c\x4b\x42\xee\xd6\xa9\x0d\x7a\xba\x06\xfd\xd3\xb2\x15\x70\xa9\x01\x72\x5f\x74\xdf\x05\x69\x98\x1e\x31\xb5\xb4\xb5\x71\xa7\xad\xf0\x27\x0b\x1a\xb5\x41\x1f\xb6\x42\xb7\x41\xbe\x5c\x83\xcc\xa3\x51\x7b\xdb\x8e\x9b\xa0\x47\x41\x32\x0a\xa3\x60\xb6\x99\xea\x77\x9b\x8a\x6c\x22\xfc\xcd\xa6\x02\x6d\xc0\x1f\xd6\x81\xb3\x79\x3e\x9b\x7d\x88\xe7\x9b\x49\x7a\xbd\xb9\xd0\x26\xa2\x3e\x6e\x2e\xd2\x06\xfe\xaa\x09\xce\x98\x45\x90\x6c\x26\xe9\xa7\xf6\x02\x6d\xa0\x47\x0d\xc8\xe3\x38\x8a\xb3\x38\xa2\x3f\xb7\x72\x8d\x26\x5e\x05\xfd\x4b\x2b\xe3\x68\x42\xbf\x0b\xb2\x3c\x69\xef\xf9\x28\x6b\xc0\x9e\x66\x74\xd1\x06\x18\xb6\x01\x1e\x8e\x33\xda\xda\xba\xa0\x0d\xfa\x3b\x3a\x8e\xdb\x17\x71\xac\x81\xa7\x59\x30\xbc\x6a\x5d\xe9\x4d\xa0\x13\xae\x8f\xbc\xbc\x5d\x04\xed\x6c\x64\xdc\x5e\xe0\x45\x78\x4d\x93\x49\x18\x4d\x5a\x97\x7d\x7b\x99\x77\x71\xfb\x2e\x91\xb6\x83\x9f\x86\xb3\x69\x9c\xd3\x2c\x6b\x2d\xb4\x68\x2f\xf4\x53\x38\xd9\xc0\x8b\x46\x6b\x05\x98\xb6\x77\xb8\x58\xd0\x20\x09\xa2\x61\x6b\x99\x79\x7b\x99\x74\x48\xa3\xd1\x86\xb6\x5f\xb7\x16\x79\x41\xef\x2b\x73\xd9\x5a\xe6\x4d\x94\x86\x23\x7a\x92\x67\x6d\x45\x2e\x5a\x8b\x6c\xea\xe1\xbc\x15\xfa\x83\x10\x69\xda\x0a\xdc\x64\x05\x7e\x20\xb8\x7e\x2d\x86\x77\x84\x9e\x62\x08\xc9\x9d\x74\x54\x5d\xe1\x2b\xf4\x13\x28\x54\x49\x9e\x14\x32\xae\xcd\x35\x95\x5e\x48\xc8\x5d\xb1\x97\x71\x4d\x29\x93\xa1\x20\x68\x05\xe5\x65\xbe\x69\x18\x78\xb5\xa2\xdb\x61\xb4\x9d\xac\x47\xcd\x0d\x67\x33\x3a\x09\x66\x3c\x22\xbc\xbb\x6d\x98\x14\x6f\x25\x1e\xf5\x89\xe7\x17\xda\xc1\x56\x80\x92\xb5\xe8\xf8\xfc\x6c\x4d\xbf\xbb\x4e\x85\xae\xb5\xa6\xf1\x55\x7a\x5e\xc8\xf5\x3c\xa9\x25\x7a\x89\x8f\x7b\x51\x30\xa7\x84\x90\xac\x74\x5c\x25\x4e\x29\x2a\xa4\xb9\xea\xcb\xea\x0e\x40\xfa\xd6\xad\x2b\x8f\xe1\x98\xdf\xfb\x56\x08\xef\xd8\x27\x09\x81\x12\xe9\x4c\x15\xd9\x90\x94\xd2\xab\x4a\x4b\x4c\x07\xcb\x03\xd0\xb2\xbd\xca\x8f\xf9\xff\x8f\xba\x77\x6f\x72\xdb\x46\x16\x47\xff\xf7\xa7\x88\x75\x93\x29\x62\x84\x91\xf1\x06\x28\x0f\x33\xe5\x24\x9b\xdd\xec\x6e\x1e\x9b\x64\x93\xb3\xab\x33\x3f\x17\x88\x87\x87\x1b\x0d\xa9\x50\x94\xed\x59\x8f\xbe\xfb\x2d\x80\xa4\x48\x3d\x66\x6c\xdf\xb3\xa7\x7e\x75\x3d\xae\x16\x45\xe1\xd9\x00\x1a\xdd\x8d\xee\x86\x6b\xd9\xe0\x77\xa1\xc8\x79\xd3\xc5\x14\x2f\xb7\x00\xba\xbd\x1b\xd1\xab\x87\x6f\x44\xaf\xca\x53\xc7\x96\x41\xac\xec\xb4\x9f\xb0\x0a\x12\x79\x01\x13\x17\x46\x69\xd6\xd4\xc5\x6d\x02\x66\xeb\xd5\xb2\x68\x92\x67\xff\xe7\xfe\xbf\xd7\xd3\x67\x20\x32\xfa\xc7\xf2\xcd\x64\x12\xcf\x67\xa2\x36\xe9\x7b\x9f\x4c\x66\x93\xf6\x92\xec\x4e\x09\xbd\xeb\x75\x39\xc5\x60\x0f\x09\x25\x00\xd0\x9d\x9d\x3d\xad\x67\x37\x7a\xfd\xfd\x9b\xf2\x87\xba\x5a\xb9\xba\xb9\x4b\x1c\x38\x9e\x1e\x9b\xf2\xb7\xb2\x7a\x53\xee\x4d\x8f\x88\xa6\x77\xf1\x8d\x83\x2d\x72\xb6\x5b\x10\x04\x90\x0b\x0c\x97\x59\x35\x3a\x33\x7a\x9a\x1c\xce\xd7\x4b\x02\xe2\x2c\xed\x02\xcc\x9f\x9d\x0d\xba\xa0\xa7\x3b\x0d\xd6\x89\x69\x5a\xbe\xd6\xcb\xc2\x7e\x62\xf4\x72\x99\x6b\xf3\x5b\x68\x4b\xd3\xaa\xf6\x82\x54\x7e\xb9\x7c\x1e\x66\x40\x99\x25\x2e\xab\x16\xfa\x1a\xc4\x30\x67\x20\x48\x33\xd9\x26\x89\x42\x8d\x8b\x53\x03\x8e\x6e\x03\x6f\x75\x45\x4d\xab\xa8\x09\xcb\xa3\x38\x95\x21\xa4\xda\xc9\x41\x61\xd4\xb6\x07\x95\x1e\xd5\x1a\x64\xbf\x6c\x3d\x2e\x04\x80\xdd\xfc\xde\x42\x53\xad\xee\x8e\x4f\xdf\xde\x6d\x77\x07\x6f\xbb\x30\x89\xb1\x51\x4d\x54\x1c\xc5\x98\x0c\xdd\x10\x0e\x42\x65\x5c\x99\xf1\x0c\x54\x2f\x97\xc7\x26\x88\xc9\x31\xb9\xb8\x20\x47\xfa\xa4\x91\xda\xb3\x8c\x47\x6a\xcf\xab\xf6\x38\x0d\x14\x8b\xea\x7a\x44\x4a\xaa\x29\xb9\x8e\x83\xda\x36\xf3\xff\xe3\xf4\xe9\xb5\xa3\x65\x98\xf9\x6d\x49\x0b\xb7\x53\xc0\xec\xea\xae\x17\xd5\x75\x4b\x0b\x7a\xd5\x2f\x2c\xc0\x16\xc6\xe7\xf9\x21\x9d\xfd\x8f\x34\xaa\x3b\x60\xec\x5b\x04\x8b\x48\x68\xea\xbe\x61\x45\x24\x34\x05\xa8\x17\xc5\x61\xc3\xca\xfe\x2c\xae\xbd\x85\xaa\x82\x37\x19\xea\x6e\x8b\x40\xf0\x36\xc3\x8e\xc2\xbb\x0c\xc1\xd7\x19\x82\xaf\x32\x04\xf3\x6c\x52\xc5\x53\xf4\x41\xfb\xb9\x72\xb5\xaf\xea\xdb\xb0\xad\x9e\x9d\x8d\xbe\xcc\xca\xea\xcd\xd5\xe8\xfb\xfc\x2b\xdd\x38\xf8\xf2\xb8\x80\x37\x45\x69\xab\x37\x67\x67\xed\xe7\xac\x76\xbf\x6f\xdc\xba\x79\x51\x16\xb7\x3a\x20\xea\xeb\x5a\xdf\xba\xab\xc7\x7e\x9c\xe5\x45\x69\x93\x36\x05\x98\x8f\xc9\xcd\xda\x35\x3f\x17\xb7\xae\xda\xc4\xc3\x0d\x39\x56\x8e\xbc\x19\x6d\xe3\xf7\xf7\xc9\xcb\xe4\x0f\x00\xbe\xce\xf2\xd0\xea\x04\x4c\x5f\xed\xdd\x57\x0d\xde\xbd\xce\xd0\xf8\x76\xea\xdd\x41\xa4\x5e\x2e\x7b\x43\x97\xe2\xb6\x3f\x87\x2e\xa3\x79\xd6\xde\x7d\x3e\x3f\xed\x5b\x94\xc5\xa8\x42\x3b\x45\xd0\xac\x76\x31\x8c\x7a\x97\x06\xd6\xe3\x3b\xac\x43\xdd\xc9\x5d\xdf\x30\x30\x7d\x05\x6f\xb2\x55\x86\x9e\x34\xf5\xdd\xbb\xa7\xa3\xa5\xf8\x26\x01\x70\x3a\xbd\x79\x32\xde\x74\x97\xcf\x9b\xe7\x20\x71\xd9\xeb\x8b\xa6\x6d\x20\x88\x14\xb6\x69\x1b\xde\xea\xab\x63\x94\x92\x18\xea\xb1\x69\x5b\xfe\xfc\xe2\xe2\x66\x9b\x80\xad\x0f\xb2\xc7\xf2\xee\x5d\x98\x10\xa3\x7a\x46\xe5\xc3\x32\x5b\xc2\x3a\xc3\xcf\xd0\xf3\xf2\x39\x28\xdb\x52\xaf\x92\xfa\xf3\xb2\xad\x2d\x2a\x2a\xbb\xe7\x40\xc7\x4b\x58\x86\xaf\xa1\x12\x30\x4f\x9a\xfe\x19\x96\x23\x94\x85\x8d\xe1\xca\x75\x2f\x9a\xf9\x32\x6b\xc0\x13\x93\x39\xf8\x5b\xd8\xc5\x93\x30\x44\x68\x3b\xbe\xc2\xbb\xa7\x41\x1d\x7e\x60\x93\xb9\x8b\xbb\x27\xcd\xe7\xb7\x67\x67\xc9\xab\x8b\xac\x81\x77\xd9\xd8\x84\xed\xb7\x30\x2b\x6e\xee\xef\x93\x55\xbc\x96\xd9\x2c\x9d\xae\xfb\x19\xb2\x0a\x9b\xcb\xc5\xeb\xcf\x09\xbb\x4a\xdc\x25\x7e\x16\x6f\x15\xc9\x46\x53\xe8\x7b\xe8\x2e\xba\x7a\x2e\x5e\x01\x00\x6d\xbc\x27\x3f\x96\xf1\x4d\xd9\xb8\xfa\xb5\x5e\x26\x36\xde\xb9\x6a\xef\xef\x87\x31\x83\x36\x14\xb2\x4b\xf1\x02\xde\x02\x00\x6f\x32\x0c\x5f\x26\xdf\x03\x00\xb6\x6f\x47\x9b\xf0\x4f\x0f\x6d\xc8\x6f\x61\x37\x49\x4e\x11\x90\x13\xfb\x90\x1b\xd1\x8e\x9f\xef\x56\xae\xa3\x1f\xfd\x1e\xf4\x49\xb1\xfe\xa4\xac\x9a\x4f\xf4\xee\x32\xf9\x09\x78\x52\x66\xdd\xbe\x52\x5e\xbd\x49\xc0\x7c\x5a\x82\x69\xbf\xd1\x5c\xa1\xf9\x74\x77\x38\x1a\xc6\xe6\xfe\xde\x74\xe7\xcc\xf7\xf7\x89\xb9\x32\xfd\x88\xdd\x14\xeb\x79\xbb\x24\xa0\x89\x1f\xbb\xe3\xce\xb0\x54\x76\x07\xf6\x61\xb1\x94\xf0\xb7\x04\x6c\xe1\xba\xa9\x56\x27\xcc\x5f\xf4\x72\xb9\x3b\x90\x8e\x79\x47\xe1\x74\x62\x76\xfc\x0c\x85\x02\x76\x51\x71\xb2\x43\xc4\x9c\x58\x6a\xfd\x49\x4e\xdb\x1f\x38\xac\xbc\x5d\xde\x12\xbc\xab\x67\xa1\x49\x09\x80\x81\x01\x69\xc0\xb6\x5f\x94\xf0\xe7\xcc\x27\x93\x98\x7e\x02\x27\x2e\x88\x50\x13\x13\x28\xdb\x72\x02\x27\x45\x18\xde\x7a\xb3\x6a\x26\x00\x7e\x99\x2d\xae\xe1\x8f\xf1\x8e\x69\x0c\xbf\xcb\x08\xfc\x57\x46\xe1\x37\x19\x83\x5f\x65\x1c\xfe\x35\x13\xf0\xeb\x93\x77\x41\xf7\xe1\x84\xdd\xec\xe5\xcb\xa6\xd6\xe5\xba\x08\x29\xc2\xae\xa5\x5b\xb6\x23\x6c\xa9\x7d\xe8\xf8\xf6\x2a\xd9\xfd\xa4\xd9\xbb\xed\x93\xa7\x27\xb1\xd0\x1a\xaf\x8e\x4b\x1d\x31\xea\x9b\xfe\xf6\xf4\x78\x67\x50\x64\xc4\x66\xeb\x46\x37\xee\x69\x96\xfd\xb0\xbb\xab\x2c\x69\x77\x9a\x65\xc7\x6c\xf8\x24\xb9\xc9\x8a\xc5\x72\xe0\x83\xcb\x96\x5d\x08\x2d\xbd\x69\xf3\x67\x59\xf6\xaf\x3e\xff\xb7\x49\x05\x9e\x0c\xef\xbf\xb9\xda\x25\xfa\x2b\xbc\x99\x85\x01\xdd\xa1\xfd\x66\x56\x95\x2d\x6d\x1a\x61\x15\x3a\x18\x7a\x60\x75\xa3\x5f\xbe\x84\x37\x2d\xef\x08\x6f\x66\xaf\xea\x6a\xb3\x02\x7d\x28\xf1\xd8\xa0\xf9\x74\x79\xd9\x9c\x9d\x7d\x50\x05\xfd\xf8\x7d\x78\xe9\xdb\xc2\x27\xdf\x26\xa3\xf9\x5a\x0e\x9d\x0d\xdc\x53\xf7\xed\x1b\x58\x76\x95\xf6\x53\x4c\x07\xa1\xcc\x2d\xf5\x5d\xf7\x0b\x80\x3a\xd9\x00\x10\x85\xb5\x36\xcf\x77\xb0\x1c\x5a\xd6\xcd\xb3\xbd\x86\x95\x5d\xc3\xca\xbe\x61\x43\xdd\xdf\xb5\x94\xb9\x7f\xf1\x2f\x58\x8f\x78\x23\x9f\x95\xb3\xe6\x8d\x73\x65\x7f\x54\x04\x97\x19\x82\x26\xbb\xc0\xcf\x97\x97\xfe\xf9\x74\xba\x04\xc9\x4d\x9f\x66\xb1\xec\x79\x84\xf6\x3c\xf3\xb1\x06\x04\x7e\xb1\x5e\x4c\xa7\xe6\x3a\xbb\x01\x4f\x7a\x7e\x23\x33\x53\xbc\x1d\x8b\x5c\x23\xc9\xaa\xc8\x9a\xcb\x72\x66\x37\x75\xdc\xbe\xaf\xca\x99\xd3\x6b\x37\xda\x89\x9a\x67\xc3\xaf\x60\x9e\x1c\x22\x71\x3d\xf4\xf9\x2b\x88\x41\x3c\x73\x81\x7a\xe0\x74\xa6\xd3\xea\x52\x3f\x6f\x39\xb0\xae\xf9\x05\x78\x32\xa0\xe9\xab\x38\x44\x3b\x24\xc7\x45\xfc\x38\x8a\xd7\x81\xc4\x8c\xe4\xc4\x91\x34\x17\x96\x42\xb9\x9b\x64\xe5\xfe\x24\xdb\xcd\x99\xe6\x1a\x16\xdd\x2a\x78\xb2\x8b\x78\x3f\x5e\x8b\xdb\x68\x18\x5c\xf6\x05\x64\x3f\xed\x49\x4c\x7d\x05\x3f\x1c\x4d\xa8\xea\x68\x42\x75\xdf\x2f\x33\x77\x76\x56\x25\xee\xa2\xfb\x0e\xb6\x10\xf5\x69\xb6\x89\x83\x25\xec\xe5\xc2\xf6\xce\xa9\x1a\xc6\xbe\xce\x8b\x20\xf4\xfd\x0c\xe3\x2c\x98\x7f\x09\x43\xfa\x79\x15\xb3\xc1\x58\xce\xbc\xea\xea\xeb\x07\x28\xbc\xe8\x1e\x61\x18\xc7\x79\x15\x87\x33\xe6\xac\xe3\xa5\x5a\x30\x36\x7e\xfe\xe3\xde\xb9\xd4\xbf\xc7\x76\xb0\x5f\xb4\xc6\x35\x03\xd5\xf9\xfc\xc7\x63\xb6\xb7\xa9\xaa\x4f\x96\xba\x71\xcf\x3f\xd1\xcb\xda\x69\x7b\xf7\xc9\xda\xdc\x38\xbb\x59\x3a\x3b\x19\x9d\x53\xed\x6a\xf8\xd3\xe3\x35\xfc\xeb\x43\x6a\xa8\x37\x65\x59\x94\xaf\x4e\x96\xff\xc5\x81\x9b\xc1\x01\xbd\x7e\x5a\xde\xdf\x3f\x4d\xca\xac\x5c\x34\xd7\x27\x98\xf8\x21\x71\xdc\x83\x7d\xb5\x29\xf7\xba\x71\x70\xe5\xcf\xbe\xf4\xdd\xfa\x1f\x8c\x2a\x84\x3a\x7b\x1a\x8f\xed\xfb\xf3\xfd\x28\x79\xed\x36\xba\x18\x5b\xba\x99\x4e\x26\xb0\x02\x49\x99\x55\x8b\x62\xa4\xba\x88\xb7\x0c\x76\x48\xf9\xee\xec\xac\x7b\xbc\xfc\x0a\x3e\x38\xad\x87\xc5\x53\x5f\x8d\xc8\xf3\xfc\x34\x25\x3d\x5a\x4d\xdd\x02\x88\xad\x98\xeb\xec\x29\x7e\xa2\xcf\xce\x4e\xaf\x8a\x2d\xfc\x3d\x2b\x13\x36\x72\xfa\xf9\xf5\xc8\x2d\xa3\xb0\xc3\x7d\x13\x4e\x9b\x9b\xe4\x48\x36\xfd\x53\x6b\x77\x53\x83\xe7\x89\x6b\xc9\xda\xfd\x7d\xff\x94\xbd\xdb\x02\x10\xd7\xde\x69\x13\x9d\x2d\x80\x27\x8e\x08\xc3\xd8\xd7\xa0\x2d\x61\xd1\x5c\x6f\xe3\x70\xfd\x92\x95\x09\x06\xf0\x1f\xa7\x46\xad\x77\x73\x99\x94\x9b\xdb\xdc\xd5\x63\x6b\x97\xdf\x67\x66\xde\x7c\x52\x94\xeb\x26\x60\xaf\xf2\x9f\xfc\x32\xd3\x57\xbf\xcf\xec\x3c\x29\x3b\x6b\xe5\xe4\x97\x99\x06\x49\x03\x40\x34\x43\x81\xbf\xcf\x2c\x98\xff\x3e\xf3\xa0\x3d\xf4\x86\x7f\xcc\xea\xd9\xda\x2d\x5d\xac\x73\x64\xac\x3c\x62\x1d\x07\xfc\xfd\x65\xd4\x8b\x43\x86\x6b\xdd\xdc\x2d\xdd\xac\x76\xb7\xd5\x6b\x37\x92\x40\xdb\xde\x7d\x9a\xa1\xa1\x94\xdd\xa5\x27\x3d\xab\x16\x87\x76\xbd\xe3\xed\x56\xba\x0e\xd8\xdb\xd9\x62\xc7\xb9\xd6\x5b\xbf\x15\x36\xab\xf7\xae\x3d\xd9\x35\xa8\xeb\xee\xa8\x3b\x20\x01\xb3\x61\x3e\xec\x79\xa2\x0c\xd7\x94\x4c\xa7\x9f\xc6\x26\xfe\xf9\x34\x22\x9e\xfc\x6d\xc4\x50\xff\xd7\x43\xcc\xf5\xdf\x60\x9b\x75\x7e\xac\xaa\x1a\xfa\x00\x7b\xb3\xbf\xc2\x3e\x39\xc5\x70\x9f\x9d\x25\xbd\x89\xf9\xae\x17\x55\x0d\x82\x18\xff\x64\xb4\xfb\x8d\x50\x36\x32\x24\xd9\xf3\x81\xa9\xfa\x5b\x9e\xab\x68\x98\xd1\x67\x8e\xd7\x3a\x66\xc5\x62\x1d\x0d\x33\x86\xeb\xa2\xf5\x62\x3d\xb6\xff\xf2\xa0\xb3\xc9\xf0\xd1\x26\x23\xd9\x64\x66\xb1\x8a\xa7\xfa\xcb\xac\xdb\x69\x37\x70\x33\xac\xd1\x15\x34\x71\x1f\x9f\xf4\x6f\x26\x45\xf9\xc9\x26\x24\xdf\xa5\xc9\x86\xe4\x00\xde\x2c\x56\xd7\xd9\x12\x7e\x9d\x84\x87\x38\x13\x56\xf0\x06\x7e\x91\x6c\x60\x09\xc0\x9e\x7e\xe7\x6f\x89\xde\x9f\x13\x71\xf5\x6e\x3b\x64\xbf\xd8\x53\xfb\xfc\xa7\xf0\xfd\x62\xb9\xfc\x70\x94\x2f\xae\xe1\x3a\x80\x4d\x86\x9e\x6f\x22\xb6\x37\x3b\x6c\xb7\xb8\xde\x1c\xe0\x1a\x3d\xbf\x89\x78\xbd\x09\x1c\xf0\x32\x33\x8b\x9b\xeb\x81\x21\x58\x41\xdb\x63\x78\x09\x97\x23\x7e\x12\x1a\x00\x6f\xb3\x2f\x92\x65\x10\x24\x5a\x75\x8a\xed\x39\x96\xbb\xcb\xd7\xcf\xa7\xd3\x3b\x90\xac\x32\xbb\xb8\x0b\xe3\xf4\x75\xb2\x8a\x68\xbd\x83\x16\xde\x82\x27\xba\x55\xe5\xda\x78\xcf\x70\x78\x5a\x82\xed\x01\x92\x7b\xc4\xfa\x62\xd9\xb8\x7a\x0f\xab\xef\xc7\xdc\xad\x6e\xcc\x8d\x3b\x98\xa8\xcd\x3e\xd6\xca\xac\x19\xcc\x37\x1e\xd4\xb9\xed\x6c\xa0\x62\x1c\xd6\x2a\xe0\x75\x3d\x98\x38\x46\x8d\xdc\xe2\xba\xbb\xff\x79\x13\xaf\x7f\x4e\x74\xb6\x5e\x98\xd0\xe9\x0e\x6f\x1a\xea\x01\x6f\x06\xae\xc1\xd9\x59\x67\xd1\xa1\x0f\xa6\x56\x71\x38\xb5\x86\x89\xd3\x4f\x1b\xb0\x85\xb7\xae\x7e\xe5\xf6\x10\xd2\x46\x3a\x2a\xec\xce\x6a\xba\xb0\x87\x3b\xf4\xc3\x58\x70\xbb\xe7\x7a\x0f\x23\x83\x09\xd0\xce\x7d\x31\xde\x2f\xb2\xef\xd9\xf6\xd0\xaa\xce\x9a\xf6\xa2\xd0\xb2\x5d\xda\xcb\x8f\x58\xda\xcb\xc5\xea\xfa\xfe\xbe\x5f\xe0\x71\x69\x6e\x3a\xd5\xf2\x3a\x5a\xce\xac\x41\x2c\x23\xd4\xf0\x9e\xa5\x79\x12\x7f\x3b\x92\x3a\x3f\x65\xa1\xf0\xe6\x93\x3f\x26\x7b\x18\xda\x2b\x32\x48\xce\x3b\xf2\x3d\x3f\xa5\x42\x1a\xaf\xf6\x66\x37\x1c\xb0\xcc\xfe\x99\x80\x9d\x73\x79\x57\x74\xb1\x63\xf2\xbb\x39\x57\x1c\xcd\xb9\xfa\x68\xce\xa1\xe7\xcb\x38\xd3\x96\x61\xb9\x86\xb9\xb6\xbc\xee\xae\x35\xcf\xbe\x08\x18\x00\x4f\xbe\x4e\x34\x0c\x1c\xf1\x12\xae\xe1\xbb\xc8\xf1\x9a\xc8\xf0\x4c\x4d\xcb\xeb\x86\xcf\x9e\xc5\x6d\x99\x60\x34\xb0\xbf\xe6\x80\xfd\x35\x91\xfd\xdd\x1e\xac\xcf\xfa\x00\xd3\x2e\xae\xd5\xa8\xf6\xfe\x73\x9c\xf5\xb0\xac\xac\x5b\xcf\xff\x3c\x8b\x9f\xf1\x5b\xf7\x05\xae\x8b\x7f\x87\xe7\xf0\x01\xdd\xed\xaa\xb9\x9b\xff\x79\x16\x3f\x61\x60\x77\xc2\x17\x6d\x6e\x1e\x38\xab\x19\xc8\xe7\x03\x46\xa7\x97\xe4\xea\x8b\x76\xfc\x42\x5d\x81\xb9\x03\x81\xbb\x8b\xeb\xa4\xb5\xa5\xdf\xe7\xa9\xf6\x35\x0a\xb0\xca\x92\xe6\x91\xa3\x1f\xf7\xda\xd5\x77\x27\x0e\x7f\x0e\xce\x7d\x7a\xcd\x4c\x7b\xf6\x33\x3e\xec\x69\x00\x80\x4f\xdd\xfd\x7d\x27\x0a\x67\x59\xe6\xb6\xe0\xea\xdf\xf3\x3f\x3d\x39\xe6\x61\x5a\xcd\x49\xd5\xf9\x90\x81\x68\x82\x5e\x95\x4f\xd6\x4f\xb3\x78\xf1\x7e\x34\x1e\x5d\x83\x99\xa9\x56\x77\x09\x08\xbd\xec\x6e\x57\x9b\x55\x65\x56\x6c\xb7\x49\xd9\x39\x9e\x41\xdd\x34\xf5\x49\x64\xee\xe8\x65\x98\xad\xeb\x95\x36\x0e\xb4\xee\x3c\x2d\x3b\xef\xab\xfa\x36\x34\xb1\xbc\xfa\x7d\x76\x33\xff\xc7\xf8\xd0\x65\x16\xca\xfc\x39\x08\x55\x89\x83\x27\x8d\x9e\x93\x72\xb6\xac\x8c\x5e\x5e\x3d\x88\xea\x87\xba\x1c\x8d\x69\xcb\xd8\xed\x56\xc2\x89\x47\x53\x9b\x4e\xde\x4c\xba\x90\x00\xaf\x5c\xf3\xa2\x69\xea\x22\xdf\x34\xee\xbb\x9f\x12\x37\x8b\xed\x87\xae\xad\x35\x5e\xb6\x9f\xac\xb3\x4d\x18\xcc\x56\x5e\xd0\x59\xc4\xdb\x3a\xcb\xb2\xe2\xaa\x9a\x27\x45\x16\x76\xce\x26\x9a\xf0\x6f\xfa\x50\xd7\x2d\xb3\xf8\x58\xc1\xdb\xed\x91\xb6\xf2\x7f\xa1\x47\x61\xe3\xfa\x8f\xf4\x20\xf2\xbb\x20\x29\x61\x01\x7f\x6d\x67\xd2\x24\x0c\xdd\x6c\x32\x8d\x93\x63\xde\x8b\x54\x27\x86\xeb\x41\xbe\xfa\x23\x91\xf4\xa1\xe5\xf4\x4d\x8d\x2a\x92\xf7\xcc\x9d\xac\x9c\x4e\x26\x0f\xae\x99\x0f\x99\x20\x3b\x02\x92\x65\x59\x35\xc2\xef\x55\x31\x2f\x3a\x9c\x96\x8f\x0e\xf6\x47\x36\x21\x71\x1f\x5a\x65\x3b\x5a\xbb\x95\x1b\x57\xd9\xc9\xe5\xbb\x1b\xc9\xa8\x4f\x3d\x3e\xd8\xed\xa6\x57\x47\x34\xa3\x0a\x24\x29\x03\x5f\x5c\xce\x5e\x46\x51\xef\xc9\xe8\xd4\x75\xbc\xb8\xbb\xa4\xdd\x59\xeb\x69\x65\xfc\xd1\xa1\x70\xeb\xd1\xf3\x00\x4d\x79\x72\xaa\xf8\xa4\x38\x31\xcc\x3b\xb5\xc0\xd8\xf9\xa4\x7d\x59\x64\x0f\xdc\xb4\xd5\x97\x5e\x74\xa4\x31\x9e\x65\x16\xe0\xec\x6c\xbf\xe0\xc3\xb1\x2a\x7b\x39\xf1\xd1\x99\x02\x9b\x80\xb4\xed\x36\xaa\xdd\x00\x2c\x07\xc7\x90\x16\x89\x59\x03\x8b\xed\x69\xbb\x82\xff\x3b\x5d\x08\x29\x3f\xa0\xc9\x20\xe9\x26\x59\x14\x93\x4f\xce\xf3\x83\x8d\x20\x71\xd3\x2c\x10\xa3\xdf\x67\xaf\x86\xdd\xa0\x27\x20\x83\xc4\xdd\x6f\x0b\xa7\x50\xf2\x08\x91\x1c\xc9\x3d\xa1\x14\x30\xda\xf7\x92\xc7\xc4\x79\xf8\x40\xbe\xbd\xe5\xb6\x1e\x96\x5b\x39\x50\xd0\x40\x3c\xcb\x4c\xc3\x22\x5b\xef\xb0\x15\xf6\xd1\x89\x2b\x6d\x57\x5d\xa0\x93\x7f\x89\xf7\x0c\x9f\x76\xed\x79\xb4\xd7\x3b\x3c\xc2\x0a\xea\x07\xfa\xbd\x7e\xb0\xdf\xbb\x2d\x03\x2e\xe3\x2e\xb0\x8f\xf1\x4d\x7f\x92\xf4\x10\x5a\x96\xd9\xe6\xa1\xa2\x03\x4e\xb3\x6c\xd9\xe2\x24\x22\xe3\xec\x6c\x19\x89\x92\x9e\x27\x55\xb6\x8c\xae\x52\x61\x77\xd9\xf4\xb3\x68\xb7\x79\x0c\x58\x69\x00\x00\xc7\xcc\xd4\x9e\x56\x0f\xea\x6c\x97\xa1\x81\xeb\x2c\xe2\x75\x32\x7d\x08\x15\x9b\x5e\xb3\xd5\xb6\x7e\x56\x95\x41\x80\x68\x7b\xdb\xe9\xa6\xf4\xf5\x55\x7b\xa1\xf1\x5f\x92\xb0\x7b\xbd\xae\x0a\xfb\x09\x7a\xb2\x6c\x87\xb5\xc8\xb2\xcc\xdc\xdf\xb7\x9e\x24\xcb\x3d\xce\x28\xf0\xda\x06\xc0\x50\x66\x56\x6f\xfb\x20\x09\x85\x85\xf1\x06\xe9\x0f\x1f\xc4\xc7\x88\xfe\x83\x23\xd9\xa7\x0f\x98\xd6\x23\xa4\x77\x33\x30\x20\xba\xec\xf1\xdc\x74\x1c\xeb\xe1\x1c\x8c\xa4\xb8\x5b\xab\xc7\x3b\xc2\xa0\x40\xdc\xe1\xbb\x5b\xac\x8f\x6f\x0d\xf5\x78\x6b\xa8\xc3\xd6\x50\x7f\xd0\xd6\x50\x7f\xe4\xd6\x70\xaa\x84\x07\x36\xd6\x7d\x73\xbb\xe8\x72\xf8\x3e\x9a\x59\x3d\x8d\x33\x38\x8c\x7b\x91\x55\x07\x34\x73\xe4\x51\xb2\x7b\x5d\xef\x29\x08\xd7\xae\x19\xd6\x0d\x6c\x82\x50\xdb\x0d\x47\x15\x8d\xb3\xea\x9e\x7c\x56\x03\xf9\xac\xb6\x6d\xd9\xdd\xd1\xf2\x64\x32\x0f\x04\x17\x36\xee\x6d\x73\x8a\xf3\x19\x75\x7c\x12\xd2\x4c\x4e\xf1\xcc\xee\x3d\xbc\x57\x27\x6a\x74\x6c\x64\x5b\xa4\x7b\xdb\x7c\x59\x95\x8d\x2b\x07\xe5\xf8\x64\x32\x6f\xb6\xdb\xa4\x5f\xb0\x6d\x75\x61\x9a\x7f\x00\x47\x36\x2e\xcf\x05\x11\xa2\x73\xdf\x9b\x4c\xe6\xd1\x22\x0e\x6c\x61\x4b\x68\x4e\x88\xce\xb1\x80\x7e\xe2\xb6\xa9\x26\x30\x71\x83\x08\x7c\xd4\x95\xf8\x4b\x2b\x41\x7e\x57\x59\x77\x60\x67\x15\xb3\x8d\x94\xe7\x41\xdc\x9d\x96\x4f\xb3\xcc\xf5\x27\x4f\xcd\xd9\x59\xd3\xd5\xf4\xe5\x4d\xb1\xb4\x2d\x66\xb6\xa0\x35\xea\x74\xdb\xee\xd4\xe7\x51\x31\xb2\xf0\xed\x42\x81\x27\x16\xc9\xbb\xf1\xdd\x3c\x47\x52\x65\x2c\xbc\x73\x47\x2b\x0e\xbd\x12\x5b\x87\xc6\x62\x51\x0d\x07\x13\x7d\xb3\x3f\xa9\x5b\x5a\x36\x26\xe7\xdb\x31\x0e\x23\x4d\xdd\x19\x29\x9c\x66\x2c\x4e\xcf\x8e\x62\x44\x40\xab\xac\x68\x9b\x18\x8f\x51\x9e\x66\x59\x09\xf6\xfd\xf9\x92\x3a\x2b\xb3\x6a\x67\xe8\xa5\xa3\xbf\x9b\x0e\x2d\xaf\x17\x7a\x6c\xb8\x99\xd4\x59\xdd\x9b\xba\xb5\x12\xb1\x71\x89\x86\x7d\x70\x9a\x6d\x57\x4f\xa0\xab\x0f\x71\xcb\x0f\x10\x8a\xf2\x21\x42\x71\xd0\xaf\x6a\xd4\x2f\x9d\x55\x43\xbf\x74\xe0\x96\xc0\xbb\x28\x0a\x6b\xb0\xb3\xc7\x1b\x5c\x02\x0f\x8d\x45\x3b\x0f\xc1\xe2\xd0\x41\xb3\xf0\x49\xb1\xd8\x8c\x7b\x1d\xbe\x66\xeb\xae\x8b\x9b\xb0\x5d\x9e\x9d\x15\xad\xda\x6e\x0d\xb6\x5d\x1b\x82\x9c\x0d\x06\x41\xbb\x55\xa6\x3c\xa4\x00\x7e\x58\x69\x71\x35\x1a\xf7\xf7\x10\x86\x53\x4c\x20\x78\xf7\xef\x1e\x3d\xad\x82\x27\x7b\xe8\x4a\xda\xed\x21\xa3\xba\xb3\x21\x99\x36\xf0\x91\xf2\x9a\xd0\xcd\x26\x52\x91\xfd\x75\xd0\x74\x29\xb6\x83\x02\xe9\xff\x42\xf7\xff\x34\x34\xb7\x6b\xc5\xff\x18\x03\x27\x8a\x7c\x14\x09\x5d\xa2\x6d\xab\x34\xfb\x1f\xe1\xe0\xc8\x6e\xf4\x63\xb6\xd8\x93\x5d\x08\x6d\x0a\xcd\x7f\xa8\xf5\x51\xc3\x07\xdd\x89\x28\x34\xd1\x20\xae\x3d\x6d\xcc\xca\x48\xc5\x8b\xac\x8c\xaa\xbb\x7d\xb3\xd7\x1f\xea\xea\xb6\x58\xbb\xa1\xed\x15\xd4\x3d\x57\xd4\x19\xd5\xeb\xb0\xf8\x8e\x0d\xec\x51\x96\x5d\x5c\x14\x67\x67\x55\x02\xb6\xdb\x27\xe5\xc9\x23\xcf\x72\x38\xf2\x8c\xf5\x57\xe5\x93\x20\x27\xb9\xb3\xb3\x24\x69\xb2\xc4\x65\xc5\xc0\xec\xbd\x9c\xb5\xa7\xb6\xfd\x52\x85\xcd\xec\xe5\x6c\x77\xa8\xbb\xf7\x36\x6c\x54\xf1\xfb\x06\xb4\x87\xc0\x59\xb3\x05\xdb\x78\xb7\x78\xcf\x83\x3c\x1c\x00\x72\x17\xf7\x73\x7c\x0f\x43\x9c\x45\xe5\xcc\xbd\x5d\x55\x65\xdc\x43\x61\xb9\x4d\x28\xf8\x90\xf2\xf0\xc5\xae\x44\x7c\xf1\x9f\x29\x33\x49\xdc\x79\x46\xc0\x65\x86\xaf\xf6\x5a\x3b\x27\x43\x5d\x24\xd6\x05\x9e\x91\xf7\x55\x17\x73\xfc\xf0\xcd\x87\x74\xc5\x9d\xbb\xf3\x24\x69\xa6\x18\x9c\xbb\x8b\xa3\x8e\x54\xaf\x5d\xbd\xbe\xa9\xaa\xae\x68\x3c\x93\x08\x73\xf5\x21\xfd\xb9\xb8\x18\x97\x3c\x6d\xc0\x14\xff\xc7\xca\xee\x71\x85\xaf\x0e\x5a\x3f\x4f\xdc\x45\x46\xc0\x41\xc5\xe4\x18\x63\x0f\xd4\xdd\xf2\x22\x2e\x23\xe7\x3d\x06\x1b\x97\x25\xe3\x06\x0d\xcc\x7b\x1b\x03\x72\x5d\x94\x09\x7e\x96\x34\xdd\xb9\x8b\x7e\x9b\xe0\x28\x6c\x9d\x27\xe5\xb3\xcc\x39\x30\xd6\x2a\x8c\x58\xcc\xf3\x61\x4c\x21\x46\xe7\x17\x17\xae\x0b\x3c\x19\xca\x4b\xea\x0b\x07\x9e\x95\x60\xd0\x04\xe8\xdb\xd5\xb2\x68\x36\xf6\xe4\xe5\xe3\xb1\x55\xe7\xce\x81\x2d\x2c\x66\x2b\x57\x17\x95\xcd\xf6\xcc\x09\x47\xc9\x42\x9a\x6d\x82\xe1\xec\x60\x4e\xfe\x67\xba\x85\x2f\xf6\x3a\x76\x81\xd1\x79\x1b\x59\x6e\xdc\x39\x37\xad\xff\xff\xd8\xb9\x24\x09\xd3\xc2\x5d\x60\x70\x89\xae\x0e\xc7\xef\xd4\xe8\xcd\xc9\x31\x36\xf6\xd3\x4d\x63\xba\xd1\xe4\xfc\x5f\xc2\x45\x7b\xac\x14\xad\xa1\x8e\x4e\x90\x08\x47\xc7\xbb\xe0\x11\x45\x0a\xcb\xcc\x0d\x8b\xcb\xb5\x4b\x6a\x3b\xc2\x54\xe9\x0e\x1c\x98\x9e\x3f\x4d\x0e\x2d\x93\xc0\xc8\x28\x29\x7a\x7f\x3c\x8d\xc7\x2d\x83\x50\xb1\xf3\xf4\x68\x5c\x3c\x03\xcb\xa2\x41\xf5\xc0\x7c\x6f\x4f\xdb\x9a\xec\x36\x8c\x53\x0e\xf5\x27\xb6\x6a\xf0\xee\xef\xfd\x6e\xbb\x05\xf1\x1a\xfe\x13\x85\x8e\xac\x5a\x8f\x18\x04\x58\x3e\x71\x63\xa3\x99\xbf\x5d\x45\x9f\xa1\xa8\xa2\x08\x9f\xd1\x0e\x75\x9e\x34\xf1\x18\x31\x29\xb3\xc6\x81\xa1\x3f\xee\xe0\xd6\xfd\x20\xaa\x1d\xf9\x50\xfc\x67\xce\x1c\xfb\x13\xc7\xb3\xb3\xf6\x94\xb1\x89\xa7\x8c\xe5\xfd\x7d\xe9\xe2\xe1\xe3\xc1\x89\xf6\xf1\x39\x61\x03\x5a\xdb\xe6\xda\x65\x8b\xd0\xda\x6b\x58\xb8\x87\xec\xc2\x4e\x98\xa1\xb5\x71\x5c\xea\x87\xec\xc1\x8a\xce\x03\xa8\x88\xde\x6c\xad\x11\xd8\x0f\x67\x67\xe5\xb1\x63\x5b\x6c\xde\x62\xe1\xae\xaf\x61\x1d\xba\x31\xad\xc1\x9e\x44\xd6\x47\x49\x18\xaa\x3f\xe5\x67\xf8\x5f\xa3\x20\x06\xa6\x29\x5e\x9f\x74\x46\x2c\x46\xae\xb8\x23\xeb\xdf\xe3\x84\x7f\xff\x58\xa7\x45\x02\xf6\x55\xcc\xdb\x91\xf2\x64\x24\xed\x86\xce\x46\x19\x6c\x6f\x8a\x15\xe0\xd0\xc0\x2c\x66\x29\x67\x6b\xd7\xb4\xb1\x16\x07\xdf\xac\x78\x56\x3f\x2b\xd6\xed\x99\xbd\x03\xbd\x64\xd7\xd9\xaa\xee\xc5\x25\x1c\xb9\x71\xf5\xb6\xab\x6d\x99\x15\x74\x41\x20\x1e\x62\x08\xee\xff\xdc\xc4\x60\x38\xd5\x35\xac\x82\x9c\x57\x83\x6d\x5f\xb9\xdb\xcd\xce\x75\x18\x77\xd7\xa5\x5f\x43\xb7\x58\x5f\x8f\x6c\x0c\x8b\x0f\xf1\x02\x2c\xe0\x8d\x5e\x9f\x20\x4d\x93\x4f\x27\x53\xd7\x2b\x1e\xb6\xf0\x95\x7b\x50\x91\xb3\x88\x49\xaf\xb7\x70\xed\x0e\x63\xc5\x1d\xa7\xea\x4c\xc6\x8e\xf5\x26\x83\xe3\x60\x48\xb7\xd3\x90\xf5\x2d\xd8\x59\x10\xc6\xb2\x9a\xeb\x2d\x8c\x3e\x19\x27\x4d\x0e\xfa\x3c\x60\xf2\x69\x3c\x51\x5e\xa0\xeb\xfd\xec\xa1\xb1\xbf\xb9\xbb\xf5\xb1\x9b\x5b\x17\x95\x24\xb6\xe4\xa0\x98\x26\x16\xd3\x39\x5d\x36\x9d\x6c\x8d\x87\x05\xee\xb6\xad\x54\xfd\x3f\x29\xb5\xed\xdb\xb8\x48\x57\x36\x75\xf1\x3f\x29\xf3\xdd\x6f\xee\x6e\x3e\x34\xb7\x93\xfc\x7b\x2c\x8e\xab\x8a\x76\x08\x47\xf5\xa0\xf7\x54\x33\x1d\x06\x2b\x34\x37\xda\x2f\x3c\x3a\x28\x41\x80\xdb\x8d\x4b\x47\x7e\x9e\xe2\xae\x8c\xa7\x68\xdb\x5a\x3d\x8c\xe7\xc5\x7b\xfa\xd9\xa3\x0d\x8e\x7a\xd9\x6a\xbe\x5a\xca\xaa\xb3\x6a\xa0\x0a\xeb\x40\x15\x5a\xe5\xfa\xc8\x49\xf6\xc9\x7a\xb4\x3c\x4e\xe9\xc7\x02\xc5\x58\x1f\x51\x8c\xf5\x31\xc5\x08\xf4\x42\x5b\x9b\xec\x51\x0b\xd7\x33\x47\x7b\x71\x79\x4e\x10\x87\x18\xa7\xa7\x2b\x20\x50\xec\x3d\xd2\x30\xfa\xb1\x89\x3f\xc3\x3a\x88\xaf\x3b\x43\x94\xed\x43\x4b\x7c\x1d\x97\xf8\x66\x76\xa3\xd7\x50\x5b\xfb\xe8\x3a\xee\xd4\xe4\xd7\x9d\xa9\xe7\x6e\x9d\x6e\x3a\xc5\x62\xb7\xec\x36\xb3\xf8\xd9\xcf\xf8\x4d\x0c\x0a\xd7\xce\xa0\xcd\xd8\x92\x65\x33\xb6\x64\xd9\x44\x64\x75\xae\x88\x59\x4b\x42\x77\x4d\x86\x26\x5b\xce\x6e\xf5\x2a\x1a\x47\xc5\x71\x84\x37\x9d\xba\x6a\x52\x04\x96\xcd\x14\xcd\x64\x64\x60\xbe\x1a\x28\x86\x4e\x00\x2c\xb3\xc5\x35\xac\xb3\x9b\x53\x21\xfa\xb2\x22\x6c\x85\x3a\x6b\x66\xaf\x02\xd5\x8d\x6a\xfa\xa7\xad\xbf\x4d\xfd\x34\xcb\x6e\x76\x8a\xc8\x27\x4d\x47\x97\x75\x56\xb6\xab\xa7\x18\xf0\xeb\x16\x89\xbe\xc0\xe0\xb3\x7e\xf8\x76\x0e\xe8\x03\xb7\xb1\xb8\x9e\xfb\x3e\x42\x1c\x2c\x66\xb6\xba\xd5\xc5\x3e\x6f\x13\x6b\x3e\x50\x75\x0c\xbe\xe5\xbd\xbe\x2e\x76\x26\xf6\x6b\xe0\x5a\x60\x05\xd7\x61\xfe\x6c\xc6\x71\x9d\xd6\x97\x9b\xe7\xa0\x09\x03\x9b\x54\x6d\xec\xb4\xf5\x35\x68\x1d\xea\xfb\xae\x74\x1d\xa9\x07\x42\x55\x04\xde\xb6\xd6\xe5\xab\x93\x1c\xf0\xa9\x28\x7e\xbe\x0f\xd6\x17\x63\xf5\xf5\xcd\x0c\xc5\x74\xbe\xaa\x1f\x1a\xb5\xcf\xed\x42\xf3\x99\x6a\x75\x97\x1d\xef\xf8\xab\x04\x74\x68\x4b\x4a\xd0\x36\x32\x71\xa0\xaf\x26\xa9\x23\xcf\xbd\x1b\x62\xbb\xa7\x96\x09\x79\xfb\x84\xed\x41\x58\xab\x1d\x69\xcb\x83\x55\x56\xb6\x05\x42\x9d\x2d\x10\xc4\xd7\x70\x9d\x3d\xc5\x7d\x88\x34\x68\xb2\x19\x1f\x26\x8f\xdf\x69\x5a\x8a\xa4\x57\x09\x43\x9f\xe9\x05\xbe\xbe\xd4\x0b\x74\x1d\xed\xf6\xfc\x05\xba\x86\xab\xf0\xf2\xc2\x5f\x3f\x71\x59\xb2\xba\xb8\x01\xcf\x46\x12\x4f\x79\xb1\x99\x92\xf3\x25\x80\xeb\x68\xf6\x14\x7f\xf1\xcb\xaa\xaa\x63\x04\xc1\x9b\x69\xcc\x71\xe1\xce\x93\xf2\x62\x03\xc0\xb9\x81\x4d\xe6\xce\x13\x7c\xb1\x69\x73\xdc\xb4\x39\xea\x6a\x53\xda\xe4\x06\xc0\x66\xfc\xbd\xe9\xd4\xfa\x76\x38\x65\x8b\xbd\x03\x01\x71\x7b\x2e\xf9\xc3\xd8\xde\x4c\xdd\x79\x33\xd0\xfc\x2a\xf1\x57\x76\x08\x84\x35\xb7\xbb\xb9\xde\x6d\x96\x65\x8f\x4f\x58\x9e\x9a\xcc\x0f\x0e\x74\x90\xe9\xa0\x4f\x00\x98\x17\x61\x9a\x94\x87\xb3\xed\xb1\xbc\x3a\x5b\x4c\x63\x14\xe6\xa9\x5b\xe0\xeb\xeb\xb6\x18\x3d\xcc\xb9\xae\xb0\x1f\x03\x12\x4e\x96\x78\x90\x7f\x9d\x3d\x45\xa1\x90\x90\x33\xd7\xa5\x7d\x53\xd8\xe6\xe6\xc4\xcc\x6b\xb6\xd1\x21\xc2\xad\x4e\xfc\xe6\x62\xb5\x0f\xd6\x78\xd4\x87\x75\xf6\xf4\xa9\x6b\x5b\xbe\x0e\x59\x57\xda\xda\xa2\x7c\xf5\x61\x99\x37\xd9\x72\x90\x9a\x11\xdc\x19\x9b\xe2\x78\x50\x1d\x0b\xdd\x8c\x0a\xfd\xa6\x2c\x3f\x34\xc6\xe5\xe6\x63\xca\xfd\x7e\xd3\x7c\x68\xb9\xef\x6d\xef\x32\x94\xab\x97\xc5\xab\x0f\x9c\x3f\xe6\x7d\x05\x9a\x50\xe0\x03\x24\xc4\x0e\x24\xa4\x48\x40\x4f\x44\x34\xe8\xd6\xcd\x1a\xec\x61\x2e\xd9\x80\xbd\x1e\x27\x4b\xd0\xb6\x34\x31\x41\xf6\x48\x46\x0e\x09\xb7\xc9\x91\xae\xbd\xd5\x9f\x75\x47\x68\xb1\x41\x3b\xc6\x75\x37\xe8\xcd\x5e\xf9\xbd\x77\x4c\xb3\xd7\x8a\xa3\xb7\x6d\xda\xe6\xa1\x3e\xba\xa4\x4c\xe2\xf9\xea\x36\x09\xdd\xdd\xeb\x10\x06\x6d\x80\xdf\xbb\xe8\x59\x03\x5f\x9f\x42\xf9\xa9\x29\xbe\x85\xa7\x26\xe8\xd4\x6d\x61\xde\xd2\xcb\x81\x3a\xbe\x1c\x73\xf7\x49\x73\x91\x45\x0d\xd4\xd5\xb1\xa2\x24\x29\x2f\x1c\x78\xd6\x6c\xe7\xaf\x93\x66\x84\xc9\x37\x83\x7b\x49\x7b\x4c\x17\x17\x6c\x95\xc5\xb8\xea\x3a\xf2\x75\xd1\xbc\x7c\x77\xf5\xc5\x27\xd5\x65\x71\x95\x14\x59\x99\x54\xad\xc9\x75\x9d\xac\xa1\x06\x60\x1e\xdf\x15\xb0\x6a\xdf\x69\xb8\x06\x27\xfd\x79\x74\x24\x49\x60\x3b\x76\xf8\x6f\x9b\xb0\xe3\x11\x76\xd3\x6c\x17\xc4\xb0\x37\xfe\x06\x51\xa4\x3b\x70\xdd\xd8\xfb\xba\xc9\x2e\x70\xdc\xa9\x83\xb8\x76\xd9\xca\x1b\x23\x33\xd7\x51\xb0\xc1\xe8\x82\x7f\xf4\x16\x3c\x9f\x4e\x37\x97\xd5\x73\xa0\x17\x9b\xeb\xac\x4c\xdc\x62\x73\x0d\xdd\x62\x33\xc5\xd7\x00\xae\xc3\xbb\x22\x69\xc2\xbb\xa6\x7d\x77\x74\xb8\x71\x6c\xc1\x9a\x17\x6b\x67\x9a\xe8\x42\x04\x31\xac\xc0\x05\xde\x59\x5d\x2c\xca\xeb\x44\x07\xd0\xec\x61\xe4\xed\xbe\xc8\xd6\xaf\x21\xd7\x3f\xec\x96\x92\xeb\x3e\x01\x68\xd5\x42\xab\x6a\xa9\x9b\xf0\x7a\xfc\x0d\x80\x99\x59\xea\xdb\x55\xe2\xba\xcf\xb1\x87\xe5\x4f\xc7\xfe\x6e\x39\xd4\x59\x0e\xd7\xd9\xdd\x4c\xc3\x4d\xf6\x14\x8f\x82\x36\x8f\xac\xd1\x87\x51\xaa\x76\x1e\x1e\xbb\xd0\xa8\xe4\xea\x0f\xf3\x37\xb0\xce\x8a\xd6\x8d\xfc\x66\xa8\xef\x66\xd8\x03\x93\x3a\x1a\xc4\xc4\x03\x19\xb8\x79\xd4\xc2\x60\xec\x86\xd6\xde\xe1\x51\x66\xd3\xf2\x18\xf9\xe3\xbb\x96\xa2\xd7\xb9\xfb\x3c\x2b\xaf\xf0\xbc\x8e\x06\x9c\xdb\xc4\x81\xb9\x0b\x13\x13\xc4\xa8\xf8\xfd\x56\x3c\x2b\xca\xd7\xae\x3e\xa5\x4f\x4b\x8a\xfb\xfb\x38\xaf\x35\xac\xe0\xcb\xff\x8d\x46\xa2\xab\x26\x34\x12\x5f\x95\xbb\x46\x36\x60\xde\xc4\x26\x3a\xb0\x85\x37\x1f\xb5\xdb\x57\x99\xe9\xfd\x70\x5f\x01\xb8\x0c\xf4\xb9\x1a\xf6\xeb\x9b\x8f\xdb\xfc\x07\xfe\x79\x79\xb0\xf1\xdf\xbc\x77\xe3\x1f\xf2\x86\x79\xe4\x42\x09\x21\x5b\x9c\x7f\x1f\xba\x43\x86\x8d\x7b\xd9\xed\x85\x37\xe3\x19\xfd\xa1\x3b\x7f\x97\x7d\xbd\x8d\xd5\x87\x91\xf9\x3e\x2b\x13\x0e\xe0\x8b\x93\xc1\x0b\xa2\xaf\x67\xa0\x77\x3a\x73\x8b\xe1\x36\xa5\x40\xff\x76\x6b\xb9\x29\xcc\x6f\x3f\x35\x6e\x05\xe2\xa4\xed\x95\x7c\x18\xcd\x1b\xf0\xa4\x8b\xc6\x3f\xf8\x12\x7e\x3f\x8b\xc1\x58\x9a\x9f\x56\xce\x14\xbe\x70\x35\xd8\x05\x7c\x98\x40\x1f\xed\x72\xda\x30\x40\x31\x54\xff\x64\x3d\x99\xb7\xd2\xf0\x6e\xc7\x7d\xe0\x4e\xae\x3d\x6d\xe0\xd3\x20\x1f\xd5\xce\x14\xeb\xa2\x2a\xef\xef\xdb\x50\xee\xc5\xd0\x84\xdd\x6f\x3f\xd4\xce\x17\x6f\x41\x12\x4d\xe7\xee\xef\x93\x51\xb6\xac\xd8\x99\x2a\xf6\x6d\xee\x53\x97\x70\x03\x62\xbc\xff\xc9\x64\x1e\x3f\x5c\xf7\xf9\xaa\xfb\x5c\x75\x9f\xf5\x64\xfe\x51\xcd\x89\x93\x27\xb4\xe6\xbd\xbd\x3d\x6e\xed\x45\x32\x71\xd1\xfa\xbf\x45\xdf\xf8\x5a\x82\x89\xef\xda\xf3\xd9\x47\xb6\xe7\xeb\xe2\xad\x0b\xed\x39\x51\x1b\x39\x4f\x26\x9f\x8d\xeb\xeb\x29\xc7\x01\xce\x02\xbf\x3f\x12\x8b\x7f\x1b\x3b\x61\xb4\xab\x78\x70\x9f\x0d\x13\x69\x7d\xa4\x6b\x2f\xb3\x66\x38\xbc\xde\x9b\x74\x6b\x90\x94\x61\x6e\x96\x8b\x72\x34\x33\x7b\x69\x17\xa3\x79\x20\x16\x6d\xb1\x5f\xc7\xc6\x8c\xa7\xf8\x70\x5a\xf2\x22\x69\x12\xd0\xb9\xc4\xb8\x59\x59\x18\xb7\x77\xa6\xd2\x4d\xcf\x68\xe4\x8b\x51\x2b\xd5\x14\xd1\x90\xbf\x0f\x1a\x5c\x0d\xb7\x8c\x6d\x62\x24\x2b\xb8\xcc\xaa\x91\xb7\xd3\xf2\x72\x13\x1d\x40\x36\x70\x93\x2d\xe1\x32\x2b\x60\x11\xef\x21\x58\xc3\x75\x98\x65\x49\xb1\xbf\x96\xbe\x29\x4d\xed\xc2\xba\x05\xc9\x06\x2e\x61\x09\xc0\xe7\x68\xc7\x1d\xb7\xf2\xd9\xe6\x59\x01\xce\x0b\xd8\x71\xb6\xc6\x15\xcb\x64\xd9\xbe\x7a\x6f\x59\xf3\x78\x4b\x5e\x5f\x5c\xcc\xba\x39\x2f\xc0\xb3\x5d\x69\x6d\x0d\xcb\xf6\xdd\x7b\x8b\x83\x45\x68\x5c\xe8\xf4\x89\xf6\x05\x24\x1c\x37\xb1\x49\xaa\x5d\x33\x86\x8c\xe3\x96\x0c\xf9\xf6\x1a\x13\x33\x42\xb7\x85\xa3\x00\x77\xdf\xee\x34\x81\x3f\x25\x2f\xe1\xdd\xcc\x0c\x2a\xc3\x87\xb8\xd3\xc0\x49\x7c\x1b\xf9\xd3\xdf\xf6\x3c\x7a\x7f\x1e\x94\x97\xfb\xfc\x64\xb3\xc7\x6f\xee\x38\x90\x6e\x87\x6c\x60\xcf\x8c\x64\xcd\xe1\x66\x52\x3e\xaa\xb7\xe8\xf6\xa5\x32\xec\x4b\xcd\x9e\xe6\xe2\x41\xce\xfa\xe7\x41\x7a\x70\xb1\x03\x4d\x4b\xc4\xbf\x3c\x7d\x26\x13\x23\x08\x8e\x59\x3d\x30\x4c\xd5\x2a\xc6\x10\x8c\x84\xbd\xd8\x4d\x55\x7d\x59\xc5\x89\x5e\x07\x46\x05\x16\x31\x5e\x52\x05\xab\x38\x5d\x4b\x00\x63\x50\xc0\xa6\x1b\x95\x2a\x7c\x2f\xc2\xf7\x38\x76\x3a\x0c\xcd\x80\xb4\x1f\xf7\x99\xf0\x76\x38\x97\xd5\xab\xa4\x79\xe6\xc0\x29\x66\xfc\x93\x5d\x8a\xf2\xd9\x29\xae\xfc\x87\xfd\xcb\x31\x2e\xd1\x89\x32\x06\x43\x89\x8b\xb0\x85\x0d\x87\xaf\x17\x0e\xe2\x8b\x12\x8c\xac\x89\xca\x63\xd3\x90\xfd\x2c\x5d\x8e\xa1\x01\xdf\x8d\xb6\xd6\x62\xfd\x75\x51\x16\xd1\x4d\xe4\x6a\x9a\x4c\xb0\x9b\x4c\x03\x1f\x75\x89\x02\x7f\x35\x64\xf9\xd7\xf8\x68\x1c\x65\x81\x2c\x7d\x37\x77\x59\xd6\x62\xe3\x0f\xad\x9d\x87\x7b\x3b\x0a\x3e\xd4\x3c\x60\xb1\x32\x94\xf9\xcd\x98\x59\x3a\x28\x6a\x59\xbd\x9a\xb7\xf5\x9c\x9d\xf5\x2f\x30\xba\xbf\x27\xfb\xaf\xc8\xfd\x7d\xaf\xef\x09\xf8\x76\x23\xa1\xa4\x39\x1e\x8e\x06\x3c\x73\xdb\xd1\x40\x7c\x75\x92\xd1\xdb\x0d\x81\x4b\x2e\xf6\xda\xfb\xd7\xd1\x0a\xfd\x11\xfe\xb0\x9b\xbf\x0b\x0c\x31\x8a\x77\x98\xf4\x3b\x01\x0c\x04\x16\x16\xd9\x37\x09\x46\x00\x56\xd9\xbf\xc2\xe7\x30\xa3\xf4\xe8\x88\x2e\xfb\xa6\xf5\xfc\xfd\x57\xf8\x68\x12\xb0\x40\xd7\x91\x9e\x14\xd9\x57\x49\x11\x7e\xf8\xaa\xa3\x15\x3b\x62\x90\xeb\xf5\x07\x32\x49\x65\x36\x75\x50\x07\x2e\xa9\x0c\x1b\xc2\xc7\xf0\x9a\x6d\x24\xf9\x90\xb5\x49\x76\x7b\xcf\xf1\x96\x16\xbd\x93\x93\x20\x98\xad\xc3\xfe\xb5\xcc\xd6\x8b\xf5\xb0\x83\x3d\x4f\x74\xb6\xbc\xdc\x80\x18\xfb\xab\xdf\x33\x56\xed\xc6\x13\xe3\x23\xc1\x55\x56\xb4\x77\xac\x14\xc9\x12\xc0\xdb\x6c\xb4\xe5\x4d\x1d\xbc\xcb\x16\x6d\xa0\xc1\xa4\xfc\x0c\x83\xb3\x33\x7b\xb1\xba\xbc\x8d\xba\xdd\xd5\x58\x43\xb7\x0a\x82\xa3\x1d\xbf\xb1\x60\x8a\xe1\xa6\xbf\xc3\xe1\xf9\xea\xd2\x46\x1f\xdf\xf0\xc5\x67\x18\x9a\xac\x4a\x56\xe0\xb9\x8f\xae\xd6\xbe\x3d\xbd\x4f\x6e\x32\x73\xee\xc1\xe5\xa6\x0d\x4b\x79\xf3\xf9\x12\xb4\x7c\x47\x77\xd1\xd6\x0d\xd8\x6e\x87\x43\x82\xfd\x12\xcb\x8b\xa1\xcc\xcf\x33\xfc\xfc\xe2\xe2\x63\x0b\xbd\xcb\x0e\xf9\x81\x15\xb4\x83\x46\xc6\x5e\xac\xe0\x2d\x68\xd5\x8d\xd5\xe0\x5f\x72\x75\x37\x52\x2a\xde\x3d\xc4\x21\x34\x41\xfc\xdf\x1d\x81\xd4\xd1\x5e\x3d\x2e\xad\xf2\x6a\x32\x43\x6e\x32\x9f\xc0\x09\x80\x27\x6c\xfd\xda\xa4\x47\x6c\x50\x0d\xc2\x54\xcf\x32\xfc\x0c\x0d\x0a\xfd\x8e\x59\x8e\x11\x47\x7b\xde\x42\x8f\x8d\x52\xca\xf3\xe6\x59\x37\x8b\x76\x8a\xde\x93\xd2\x53\xc7\x53\x3d\xab\x92\xd1\x80\x46\xad\xc2\xe0\xcc\x75\x5e\x5e\x96\x17\x33\x1e\x6a\x3b\x0f\xd4\xbc\xb9\xcc\xf4\x55\x90\xb0\xe6\x93\xc9\xf6\x98\xf7\x19\x84\xed\xe4\xcb\xc8\x22\xbd\x8b\x74\xff\xd4\xf9\x4c\x57\x6b\xbb\x2f\xb4\xb5\x6e\x61\xd8\x15\x1e\x49\x1c\x37\x8d\x2e\xed\x16\xc4\xd5\xf2\xc8\x86\xfd\xd7\x04\xc4\x25\x1c\x3d\xa5\xc6\x0c\xc0\xd7\x47\xdb\xc2\xc5\x98\xea\x37\x60\xbe\x4f\x48\x77\x19\xff\xbd\xa3\x4b\x18\x36\xe3\x88\x47\x23\x1f\x84\xa4\xcc\xbe\x4e\x4a\xe8\xc0\x45\xd2\x64\x5f\xb7\xf6\x98\xa3\xbd\xab\xde\xa5\xfb\x3a\xa9\x43\xaa\x06\x3c\x2b\xc3\xbe\x55\x8e\x0d\x03\xc6\x3e\x0d\x27\xca\x83\xc7\xc5\x7d\xf2\x75\xd2\x4c\xcb\xf3\x1a\xe2\x67\xd1\xc9\x32\x06\x3f\xd8\xe7\x96\x9b\xc1\xe4\xef\x03\x4f\x49\x82\xec\x1d\xf5\x72\xf1\x3e\xa3\x07\x39\x8c\xb7\x49\x03\xff\x9d\x80\x5d\xf1\x51\x31\xd5\x32\x1a\x3b\xd4\xfd\x69\x48\xbe\x97\x74\xc6\xc1\x38\x40\xd1\x70\x16\x0c\x9b\x00\xca\x78\x2a\x3c\x36\x80\x68\xd5\x6b\x08\xee\xcd\xf9\x9d\x62\xeb\x49\x7b\x07\xd0\xa0\xcb\xd2\x17\x18\x3c\x9f\x4e\x8b\x68\x84\xb0\x28\x2e\xf0\xf5\x40\x00\x7e\xdf\xe8\xb2\x29\x96\x0e\x24\x0e\x16\xcf\x86\x50\x0d\xd5\x9e\x91\x45\x7b\xc4\xd5\x4a\x3c\xad\x5d\x5a\x8f\xcf\xc5\x91\x6e\x2a\x8c\xd3\xf5\xe0\x4c\xd2\xb2\x7b\x7f\x78\xdb\xec\xe1\xbc\x1e\x1c\x05\x7b\x9f\xf2\xc1\x32\xa5\xb8\x44\x57\x8b\xef\xf4\x77\xf0\x3b\xfd\xdd\xf5\x7c\x11\x58\xe5\xb6\xd9\xf3\x28\x53\x17\x97\xbd\xdc\x12\x5e\x87\x97\x23\x09\xfb\x7a\x0b\xab\xa3\xbd\xa7\x79\xfc\x88\x6e\xc7\xe6\x3d\xd9\x3b\x80\xef\xdd\x1e\x9a\x43\xb7\x87\x96\xfc\x24\x65\x0c\x95\x01\x7a\x49\x30\x6a\x68\xee\xef\x5d\x7f\x8d\xc9\xc0\x50\xc7\xdb\x5f\xea\x99\xee\x83\x8b\x03\x18\x0f\x50\xaa\x8f\xd1\xa1\x34\x23\x3d\x48\x11\x77\xca\x81\xed\xad\x76\xa3\xb8\x3e\x31\x33\xcb\x71\xc2\x07\x66\xef\x17\x63\xfe\xb8\x53\x04\x36\x21\xc3\x30\x0b\xfe\x3e\xd8\x0e\xc0\x26\xc3\x81\xe9\x80\x45\xb6\x98\xf1\x6b\x58\x1d\x72\xfe\xba\x0f\xd7\x71\x39\xf8\x83\x54\xc7\x33\xa5\x80\x0e\x22\x58\x82\xeb\xfd\x28\x6d\xfd\xa1\xfa\x93\xee\xce\xab\x51\xd0\x92\x78\x5e\x5e\x3e\x07\x45\x60\xa8\x93\x18\x47\xfb\xbc\xb9\x48\xea\x8b\x12\x9c\x3b\xf0\x2c\x86\x9d\xde\x6d\x58\xfd\x1c\xd4\x47\xf3\xe1\x71\xf9\x62\x1a\xa5\xe3\x26\x7c\xe2\xeb\x18\x45\x6e\xbe\x70\xb0\xb9\xde\x42\xfd\x31\x23\x56\x66\x49\x35\x0c\xda\x48\x82\x58\x1f\xe8\xd2\xf4\xe3\x6b\x44\x67\xd5\x89\x35\xa2\xf7\xd6\x88\xbe\xc4\x57\x0b\x17\x6f\x18\xbd\x9e\xeb\xcf\xb3\xf2\x6a\x51\x2c\xca\x78\x93\x75\x58\x40\xf1\xd2\x25\x58\x2c\xf4\x75\xec\xc4\x03\x93\xe0\xef\xc3\x24\x88\xfd\xed\x27\x42\x15\x09\xd9\xf8\xce\xf3\xdf\x07\x1a\x15\xc6\xbf\xe9\x4e\x5e\xcb\x0c\x1f\x1c\xd4\x17\x3e\x29\x2e\xb3\xe2\x11\x6a\xe1\x60\xd1\xcd\x81\x7e\xf1\x1f\x8d\x56\xfd\x21\xa7\xd8\x75\xa0\xf6\x0f\x6b\xfb\x2f\xf0\xf1\x29\xf7\xc1\x58\x3e\x56\x4d\xf3\x71\xd5\x34\xe3\x6a\x4e\x0f\xee\x4e\xbf\x3b\x10\xc0\x1d\xc9\x58\xb4\x97\x9a\x47\xb1\xf1\xfa\x91\x63\xf5\xdf\x1f\x58\xb5\x45\x94\x6d\x7f\xcd\xca\x04\x01\xf8\x4b\x56\x26\x02\xc0\x7f\xc4\x80\xd0\x7f\xcc\x04\x3a\xff\x07\xfc\x4b\xf8\xf8\x23\xfc\x34\x23\xec\xfc\x2f\xf0\x6f\x99\x3c\xff\x14\xfe\x57\x46\xd1\xf9\xa7\xf0\x9f\x19\x15\xfc\xfc\xd3\x61\x1c\xff\x7c\x70\xdb\xe4\x57\xba\x39\xb8\x5b\x7e\x7c\xf7\xfc\x9e\x21\x4d\x48\x7a\x35\x75\xf3\xe9\x2e\xdf\x74\x9c\xb1\x71\xfd\x69\x4d\x7f\xb9\x1c\x5c\xb6\x58\xf1\x3b\xad\x04\xbc\xc9\x7c\x87\x41\xb8\xca\x7c\x2f\xf1\xd8\x6c\x99\x4c\x66\x9f\xfd\x75\x12\xd8\xf8\x65\x32\x99\x7f\xf6\xd3\x04\xc0\xd7\xe1\xf1\xb3\x6f\xe6\x9f\x7d\x3b\x01\xf0\x55\xfb\xe5\x93\xcf\x56\x13\x00\xf3\xf8\x45\x7f\xf2\x99\x9d\x00\xf8\x26\x7e\xc9\xdb\x2f\x7f\x88\x5f\xbe\x98\x00\xf8\x7d\x7c\xfa\xc7\x04\xc0\x17\xd9\x62\xb1\x86\x18\xfe\xe3\x1a\x2e\xd6\x90\x43\x7e\xde\x3e\x61\x0e\x71\xff\x4c\x11\xa4\x28\x3e\x6b\x88\xe1\x1f\xe3\x67\x48\xd9\x3e\xb5\x29\xdb\xe7\x36\x65\x78\xae\x20\x86\x7f\x89\x9f\x14\xd2\xf3\xf6\x49\x40\xd1\x3d\x61\x02\x31\x89\xcf\x05\xc4\xf0\xd3\xf8\x49\x20\x39\x0f\x4f\x25\xc4\xf0\x6f\xd7\x70\xd1\x40\x0c\xff\x2b\x7e\x86\x12\xc2\x93\x83\x18\xfe\xf3\xfa\x7a\xac\x2a\x1c\xd8\xab\x75\x52\x83\xcb\xfa\xca\xce\x75\xfb\x70\x3b\xaf\xda\x87\xd7\xf3\xa2\x7d\x78\x35\x6f\xda\x87\xb2\xfd\xc8\xe7\x6f\xe6\xae\x7d\xfc\xc3\xfc\x7b\xb0\x77\x01\xc3\xb7\x49\x37\x58\x23\x06\x7f\xc7\x83\xc3\xe3\x18\x79\x3d\xf9\xda\x29\x60\x8b\x8b\x12\x3c\x6b\xc6\x3a\xf0\x96\x0a\x54\x35\x48\x4e\x1d\x69\x2c\xc8\xf5\x16\xcc\xea\xe2\xd5\x4d\x93\xbc\x80\x1a\x3c\x59\x67\x59\xf6\x62\x74\x42\x71\x42\x97\x5e\x3e\xfb\x27\x2c\x9e\xfd\x33\xde\x07\x9b\x39\x30\x5f\x87\x74\xc9\x3a\x7b\xb1\xd0\xcf\x5e\x2c\xd6\x17\xf8\x7a\x41\xae\x2f\x5f\x2c\xd6\xe1\xf3\x99\xbe\x5a\x5f\xe0\xf9\x3a\xde\x49\x08\x9b\x28\x56\x82\x79\x52\x0d\x6c\xd5\xa9\x1a\x5a\xff\x65\x1c\xaf\x11\x05\xe3\xfb\x1b\xb2\xac\xba\x6a\xe6\x4d\x17\x3f\xa7\xda\xfd\xe6\x1f\x3e\x15\x1a\x96\xd4\x4d\xcb\x31\xfa\x8f\x11\x9c\x57\xc9\xee\x8c\xc6\x39\x00\xe6\xab\xa4\x95\xda\xfe\x1c\x0b\x3a\x14\xa2\xc7\x0a\xae\x55\x02\x60\x91\xd5\xed\x01\x6d\xbd\xa8\x47\x8a\x60\x9d\x55\x97\xc5\x6e\x9b\x89\x6a\xad\x02\x16\x51\x9d\x55\x06\xea\x97\x94\xd9\xb7\x91\x6c\x57\xb0\x01\xe0\xaa\xb3\xdc\x48\x0a\x58\x4d\x31\x98\x2f\xae\xa1\x0e\xef\x76\x92\x62\xd9\x37\xe5\x58\x97\x3c\x30\xde\xfd\xe9\xc7\x6f\xf3\x65\xa4\x60\xfe\x40\xa6\x1a\xd9\xec\xad\x76\x5a\xed\xc4\xc5\x86\x9c\xd0\x65\x87\x76\xad\x92\x2f\x23\x2b\x0a\xe6\x3e\x94\xf7\x20\xdb\xee\xe1\x49\x3a\x14\x1a\x11\xc9\x68\x79\x52\xb4\x73\xc9\xaf\xb3\xdf\xe0\xaf\x33\x0f\x7f\x9d\xfd\x0b\xfe\x3a\xd3\xf0\xd7\x59\x0e\x7f\x9d\x59\xf8\xeb\xec\x15\xfc\x75\x66\xe0\x2f\xd1\x70\xbd\xed\xf4\xb0\xaf\xee\x86\x9b\x38\x0a\x51\x98\x44\x07\x6f\x08\xb8\x8e\xee\xc7\x0f\x55\xfa\x1a\xfe\x3a\xfb\x1d\xfe\x3a\xdb\xc0\x5f\x67\x4b\xf8\xeb\xec\x16\xfe\x3a\xab\xe0\xaf\xb3\x1a\xfe\x3a\x2b\xe1\x2f\xb3\x4d\x63\x0e\xeb\x0c\xa5\xcf\xfe\xfe\xf3\x97\x43\x9d\x07\x6f\xda\x3a\x8b\x93\x7c\x8d\x6b\xa3\xcc\x25\xcf\x66\xef\xc4\xf6\xd9\xab\xe3\x7b\x41\xda\x74\x93\xff\x67\x32\x75\xdb\xc0\x31\xba\xac\x70\xc9\x04\x7b\x29\x73\xe6\xbd\xf4\xc8\x11\xa3\x11\x31\x56\x10\x49\x54\xca\x84\xcc\xad\x32\x5c\xb0\xdc\x51\x29\x0d\x91\x3e\xfc\xe5\x26\xb7\x84\x60\x99\x3b\xe3\x27\x00\xea\xb6\x14\x9a\xd2\x5c\xa6\x9c\x70\xa6\xa9\xc8\x85\x33\x3e\x35\xa9\xb3\x4e\x50\x99\xd2\x54\x19\x4d\x38\xc9\xb9\xf1\x22\x37\xce\xe6\xa9\x51\x46\x58\x8a\x73\x9b\x3a\x9a\x3a\x99\x6b\x4e\x9c\x34\x79\xca\x14\xa3\x86\xa6\xda\xb2\x94\x69\x2b\x04\x16\xb9\x93\xa9\x48\x8d\xcc\x19\x96\x54\x73\x8e\x53\x66\x9c\xb0\xb9\xb5\x2e\x75\x56\x4c\x00\x5c\x77\x2d\xc0\x8a\xe4\x56\xe4\xda\x59\x91\x3a\xa3\x1d\x36\xc2\xe6\xce\x3b\xc1\x39\xb2\xde\x2a\x4b\x8d\xb7\xda\x89\xdc\x5b\x8b\x34\xa1\x58\x53\xce\x24\x33\x4c\x0a\x8d\x6d\x9a\xe6\x46\xba\xd4\x20\xc9\x45\x9e\xe3\xd4\xa5\xda\xa8\xd0\x57\x6b\xac\xb6\xda\xe5\x82\x86\xbf\x54\x84\xbf\xdc\x86\x3f\x9b\x86\xbf\x09\x80\x9b\x31\x26\xb5\x33\xd2\xa9\x16\x9f\xde\xe7\xb9\x54\x2d\x56\x53\x65\xbd\xd2\x2d\x6e\xbd\x4f\x55\x2a\x5a\x0c\x1b\x9e\x23\xcb\x5b\x3c\x1b\x96\x9a\x94\xb5\xd8\xf6\x32\x17\xb6\xc3\xb9\x91\xe1\xaf\xc5\x7c\xa8\x5a\xd9\x16\xff\xa9\xb3\xda\xf1\x09\x80\x4b\xd7\xc6\x46\x35\xbb\x98\x83\x77\xb3\x1c\xf4\x34\x71\xe9\xc2\x17\x8a\x10\x9c\x71\x88\x76\xa7\x7e\xed\xeb\x0b\xc2\xe2\x7b\x1c\x04\xf5\x47\xb2\x5f\xe0\x90\x5f\x72\x38\xa3\xfc\xa0\x08\x85\x20\x9e\x71\x38\x53\x00\xc0\x9b\x47\x8a\x20\xe2\x43\x4a\x58\xed\x4a\x68\x7f\x03\xd0\xee\xcf\xf7\xc4\x5d\xa2\xfb\x7b\xf7\x39\x06\x67\x67\x89\xbb\x38\x30\xeb\x7b\xd2\x2a\x8a\x76\x5b\x99\xbb\x98\xf1\x1d\x2f\xbe\x72\xb3\x9b\x8c\x0a\x74\xee\x62\x77\x56\x6e\xb6\xce\xf0\x8c\x5f\xe0\x19\x3f\x6f\xc2\xd7\x65\x36\x53\x17\xb3\x34\x7e\x99\x4e\xc6\xf6\xae\xb7\x6e\x7c\xb2\xd7\x59\x10\x1f\xea\xa9\x46\x1e\x4a\x8b\x53\x26\x54\xcd\x05\x86\xa3\xe6\x96\xe7\x0d\x00\xa0\x0b\x6f\x7b\xe7\xb2\x5b\x97\x84\x89\xc4\x18\xc2\x9c\x31\x86\x08\x17\x8c\x23\xc6\x25\xe3\x88\xf3\x94\x09\x24\xb9\x66\x02\x29\x6e\x98\x40\x9a\x5b\x26\x50\xce\x1d\x93\xc8\x0a\xc4\x24\x72\x02\x33\x89\x91\xa0\x4c\x62\x2c\x18\x93\x98\x0a\xce\x14\x66\x42\x32\x85\x85\x50\x4c\x61\x29\x52\xa6\xb0\x12\x9a\x29\xac\x85\x61\x0a\xe7\xc2\x32\x85\x8d\x70\x4c\x61\x2b\x3c\x53\xd8\x4b\xc4\x14\x41\x12\x33\x45\xb0\xa4\x4c\x11\x2a\x19\x53\x84\x49\xce\x14\xe1\x52\x30\x45\x84\x94\x4c\x11\x25\x15\x53\x24\x95\x29\x93\x44\x4b\xcd\x24\x31\x11\x5a\x99\x33\x19\xd6\x34\x93\xc4\x4b\xcb\x04\x45\xd2\x31\x41\x49\x84\x54\x7a\x26\x28\x53\x88\x71\xca\x15\x66\x9c\xca\x08\x95\x22\x8c\xd1\x54\x51\xc6\xa8\x8e\x30\x57\x8c\x51\x6a\x23\x74\x8a\x33\x42\x7d\x80\x0c\x29\xc1\x08\xc3\x4a\x30\xcc\x88\x92\x0c\x33\xa6\x24\x43\x8c\x2b\xc5\x10\x13\x4a\x51\xcf\x64\x84\x4a\xa5\xd4\xb1\x34\x42\x1d\xa1\x51\x9a\x5a\x66\x23\x74\x4a\x53\xc3\x7c\x80\x1c\xa9\x9c\xe6\x1c\x47\x48\x54\x4e\x35\xa7\x11\x32\x65\x68\xca\x79\x84\x42\x19\xaa\xb8\x8a\x30\x55\x86\x4a\xae\x23\xcc\x95\xa5\x82\x9b\x08\x03\xa9\xe1\xdc\x45\xe8\x95\xa5\x61\xc0\x02\xc4\xca\x52\x2a\x48\x84\x54\x59\x4a\x04\x53\x8e\x12\xc1\x95\xa3\x61\x70\x02\x94\x11\x2a\xe5\x28\x12\x69\x84\x5a\x39\xe2\x45\x1e\xa1\x51\x8e\x38\x61\x23\x74\x11\x7a\xe5\x88\x95\x28\x42\xac\x1c\x31\x1d\x24\x11\x52\xe5\x48\x2e\x59\x84\x5c\x39\xa2\xa5\x88\x50\x46\xa8\x94\x0b\x23\x17\xa1\x8e\x30\xd4\xa2\xa4\x89\x30\xd4\x22\xa5\x8b\x30\xd4\x22\x55\xa8\x45\x28\x1c\x21\xd9\x41\xae\x68\x84\x2c\xc2\x50\x0b\x53\x22\xc2\x50\x0b\x55\x2a\xc2\x34\x42\xad\x2c\x21\x2a\x8f\xd0\x44\x68\x95\x25\x58\xb9\x08\x7d\x80\x29\x8a\x10\x2b\x43\x50\x4a\x46\x90\x2a\x83\x7d\xca\x22\xe4\x2a\xc7\x3e\x15\x11\xca\x08\x55\x84\xa9\xd2\xd8\xa7\x5a\x69\xec\xd2\x3c\x42\xa3\x52\xec\x52\xab\x52\xec\x53\x17\xa1\x57\x0a\x7b\x8d\x22\xc4\x1d\x94\xd8\x6b\xa2\x24\x41\x9a\x2a\x41\x90\x66\x4a\x10\xac\xb9\xe2\x04\x6b\xa1\x38\x09\xc8\x0a\x50\x29\x46\xa8\x4e\x15\x25\x4c\x6b\x45\x09\xd7\xb9\x22\x84\x6b\xa3\x08\x11\xda\x2a\x4c\x64\x84\x4a\x3b\x85\x48\xaa\xbd\xf4\x44\xe7\x48\x7a\x62\x72\x2c\x1d\xb1\x39\x91\x96\xb8\x9c\x06\xfa\x9e\x33\x69\x28\xce\xb9\xcc\x29\xc9\x85\xd4\x94\xe5\x42\xa6\x94\xe7\x52\xa6\x54\xe6\x4a\x2a\xaa\xf2\x54\x4a\xaa\x73\x2d\x05\xcd\xf3\x5c\x72\x6a\x73\x23\x19\xf5\xb9\x91\x94\xa1\xdc\x4a\xc2\x48\xee\x24\x66\x2c\x0f\x6b\x56\x18\x14\xd6\xaf\xc1\xc2\x31\x6d\xb0\xb0\xcc\x18\x22\x0c\x73\x86\x8a\x9c\x23\xc3\x84\xe6\xc4\x70\x91\x72\x66\xb8\x50\x5c\x18\x21\x24\x57\x46\x0a\x1e\x3a\x21\x18\x37\x46\x09\xca\x9d\x49\x05\x11\xc8\x68\x81\x04\x35\x39\xf7\x82\x9b\x9c\x3b\x21\x8d\xe1\x46\xa4\xc6\xf2\x5c\x18\x63\xb9\x16\xce\x38\xae\x24\x32\x9e\x4b\x49\x2d\xe2\x42\x72\x8b\x38\x93\xd2\x62\x4e\xa5\xb6\x98\x63\x69\x2c\xe1\x48\x7a\x4b\x99\x53\xd8\x52\x66\x15\xb3\x8c\xe5\x4a\x58\x1e\xd6\xa5\xe5\x4c\xa9\xdc\x0a\x26\x94\xb3\x82\xf1\x14\x59\xc9\x68\x4a\xad\x64\x38\xe5\x56\x31\x94\x2a\xab\xa8\x4b\x73\x9b\x52\x93\x5a\x9b\xd2\x5c\x23\xab\x69\xaa\x89\xd5\x54\x6a\x6e\x73\x2a\xb4\xb2\x39\x65\x5a\x5b\x43\x89\xb6\xd6\x50\x94\x23\x6b\x89\xcf\x89\xb5\xc4\xe6\xdc\x3a\x92\xe7\xca\x3a\x92\xe6\xda\x3a\xa2\x72\x6b\x3d\x11\x06\x59\x4f\xb8\x21\xd6\x13\x6a\xb8\x43\x04\x1b\xe5\x10\x41\x81\x7d\xc0\xde\x58\x87\xb1\xb5\xc8\x61\x6c\x2c\x71\x04\xe7\x96\x3b\x82\x75\x58\x1a\x38\xb5\xda\x51\x9c\x5a\xeb\x28\x56\xd6\x07\xe8\x88\x63\x58\x39\xee\x18\x4e\x9d\x8c\x50\x3b\x8e\x75\x40\x12\x0e\xac\x08\xc7\xc6\x63\xc7\xb1\xf5\xcc\x09\xec\xbc\x70\x82\x20\xaf\x9c\x20\xd8\xe7\x4e\x12\xea\xad\x93\x84\x4f\x00\x80\xaf\x77\xbb\x01\x0a\xff\x18\xc2\x08\x21\x8e\x30\xc2\x48\x44\xa8\x10\x41\x18\xa5\x88\x20\x82\xf2\x08\x2d\xa2\x88\x22\x1f\x20\x26\x88\x21\x86\x19\xe2\x88\x61\x81\x04\xe2\x58\x45\xa8\x91\x44\x02\x1b\xa4\x90\xc4\x0e\xa5\x48\x12\x84\x34\x52\x24\x94\x91\x12\x86\x0c\x4a\x89\x40\x81\x3f\x4a\x91\x43\x39\xc9\x31\x42\x39\xb1\x18\x23\x43\x3c\x26\xc8\x52\x8c\x29\xb2\x34\x94\xed\xa8\xc0\x1c\x39\xaa\xb0\x40\x9e\xe6\x58\x21\x4f\x2d\x4e\x31\xa2\x1e\x6b\x8c\x18\xc1\x06\x23\xc6\xb0\xc5\x61\x57\x72\x18\xb3\x94\x20\x8c\x59\x4e\x30\xc6\xcc\x11\x82\x31\x47\x84\x61\xc2\x29\xe1\x98\x70\x4e\x24\x26\x5c\x91\x14\x63\xae\x89\xc6\x98\x1b\x62\x30\xe6\x3e\xd4\x2f\x30\xf1\x18\x0b\x4a\x31\xc6\x82\x53\x8a\x91\x90\x94\x61\x24\x52\x2a\x30\x12\x39\x55\x18\x09\x43\x53\xe4\x85\xa3\x39\xf2\x12\x51\x8b\xbc\xc4\xd4\x23\x2f\x09\x43\xc8\x4b\xc6\x08\xf2\x92\x33\x86\xbc\x14\x8c\x63\x24\x65\xd8\x2d\xa5\x62\x69\x84\x1a\x23\x99\x32\x83\xb1\xd4\xcc\x61\x1c\xb8\x62\x4c\x64\xce\x31\x26\xd2\x70\x82\xa9\x34\x9c\x61\x2a\x2d\x0f\xdb\xac\xe5\x12\x73\xe9\x78\x1a\xa1\xc6\x42\x3a\x6e\xb0\x90\x9e\x5b\x2c\xa5\xe7\x1e\x2b\xe9\x05\xc2\x4a\x21\x41\x70\xaa\x90\x60\x58\x2b\x24\x78\x84\x12\xe7\x0a\x09\x85\x8d\xc2\x42\x47\x98\x63\xab\xb0\xb0\x11\x3a\xec\x14\x96\x08\x7b\x85\x25\x89\x90\x12\xa4\xb0\xe4\x04\x87\x0d\x3c\x42\x45\x88\xc2\x32\x25\x44\x11\x99\x13\xaa\x88\x34\x11\x06\xca\x4b\x14\x0a\x88\x54\x01\x9d\x58\xd1\x48\xb5\x59\x84\x82\x48\x85\x95\x8a\x30\x25\x4a\x61\x95\x93\x54\x05\x6a\x9b\x46\xca\xae\x15\x4e\x51\x84\x98\xe4\x0a\xa7\x94\xe4\x0a\xa5\x8c\x18\x85\x52\x11\xa1\x22\x56\xa1\x34\x8d\x30\x27\x4e\xfa\xd4\x44\xe8\x88\x97\x5e\xa3\x08\x71\xd8\xed\x35\x8d\x90\x53\x2c\x9d\x16\x14\x4b\x1b\x48\xa6\xb4\x5a\x53\x2a\xad\xce\x29\x95\x46\x5b\xca\xa4\xd1\x8e\x32\x99\xe7\x88\x72\x99\xe7\x24\x42\x4a\x85\xd4\x39\x8f\x50\x52\x29\xd3\x5c\x45\xa8\xa9\x92\x2a\x37\x34\x90\x7d\x4b\x53\x29\x73\x4f\xb5\x94\x06\x51\x2d\x85\x21\x34\x97\xdc\x30\x6a\x24\x37\x9c\x1a\xc9\x8c\xa4\x56\x52\xa3\xa8\x93\xd4\x68\xea\x24\x31\x86\x7a\x89\x8d\x65\x48\x62\xe3\x19\x92\xc8\x86\x25\xe2\x2d\x61\x44\x04\x1a\x45\x85\xb3\x9c\x31\x61\x03\x2d\x12\xc6\xaa\x08\x53\x26\x02\xd7\x1f\x64\x05\x6b\x98\x12\xa9\x75\x2c\x15\xca\x7a\xa6\x85\x72\x88\x19\x11\x10\x6f\x85\x70\x94\x39\xc1\x1d\x63\x5e\x30\xc7\x39\x12\xcc\x49\x4e\x44\x60\x5e\xa8\x20\x2e\xe5\x4c\x10\xa7\xb9\x10\xd8\xe5\x5c\x0a\xe4\x0c\x57\x02\x39\xcb\x35\xf7\xce\xf1\x9c\x3b\xe7\xb9\xe5\xce\x23\xee\xb9\xf3\x58\x20\x1e\x08\x15\x89\x90\x71\xe3\xa9\xe0\xdc\x78\x26\x64\x84\x29\x37\x9e\x8b\x28\x59\x09\x13\xa1\xe3\xc6\x4b\x89\x22\x24\xdc\x78\x25\x59\x84\x82\x9b\xb0\x59\x72\xeb\x53\x99\x46\x98\x73\xeb\xb5\x0c\x75\x69\x19\xea\xd2\x0a\x73\xef\x73\x45\x23\xe4\x02\xf9\x5c\x49\x81\xbd\x51\x69\x84\x5a\x10\x1f\x04\x37\xea\x8d\x72\x82\x79\x93\x22\xc1\xbd\x4d\x89\x10\x3e\x20\x48\x7a\x9b\x0a\xa1\xbc\x4d\x95\x48\xbd\x4d\xb5\xd0\xde\xa6\xb9\xc8\xbd\x4b\xad\x30\xde\xa5\x5e\x58\xef\x34\x16\xce\x3b\x4d\x85\xf7\x4e\x73\x89\xbd\xd3\x52\x12\xef\x74\x2a\xa9\x77\x5a\x4b\xe6\x9d\x36\x52\x78\xa7\x9d\x94\xde\xe5\x48\x2a\xef\x72\x22\xb5\x77\x39\x93\xb9\x77\xb9\x90\xc6\xbb\x5c\x4a\xe7\x5d\x9e\x4a\xef\x5d\x9e\x2b\xec\x5d\x6e\x15\xf1\x2e\xf7\x8a\x79\x67\xb0\xe2\xde\x19\xa2\xa4\x77\x86\x29\xe5\x9d\x11\x4a\x7b\x67\x94\x32\xde\x19\x1d\x48\xb6\x31\xca\x7b\x67\x6c\x8a\x7c\x10\xa6\x88\x77\x16\xa7\xcc\x3b\x4b\x53\xee\x9d\xe5\xa9\xf4\xce\xca\x34\xf5\xce\xaa\x54\x7b\x6b\x75\x6a\xbc\xb5\x26\x75\xde\x5a\xa7\x91\xb7\x0e\x69\xec\xad\x23\x3a\x50\x6e\xaa\xb9\xb7\x8e\x6b\x19\xa8\xb8\x4e\xbd\x75\xa9\xd6\xde\xba\x5c\x1b\x6f\x82\x44\xea\x8d\x73\x39\xf2\xc6\xa3\x9c\x78\xe3\x49\xce\xbc\xf1\x2c\x17\x3e\xc8\xc5\xca\x1b\x2f\xf3\xd4\x1b\x9f\xe6\xb9\x37\x3e\xcf\xad\x37\xde\xe6\x3e\xec\x06\xaf\x3e\x6c\x37\xd0\x71\x1f\x30\x11\x3a\x44\x11\xc1\x21\x6d\xbb\x1b\xd0\x6e\x37\x90\x48\x20\x86\x53\x24\x11\xc7\x39\x52\x88\x63\x8b\x52\x24\xb0\x47\x1a\xc9\xb8\x0f\xc8\xb8\x0f\xa8\xb8\x0f\xa8\xb8\x0f\xa4\x71\x1f\x48\xe3\x3e\xa0\x29\xc2\x81\x51\x22\x98\xa1\x9c\x32\xcc\x51\x4e\x25\x16\x28\xa7\x29\x56\xc8\x50\x83\x53\x64\xa8\xc3\x39\x32\x0c\x63\x83\x0c\xa3\xd8\x21\xc3\x38\xf6\xc8\x04\x79\x02\x19\xa6\x09\x45\x86\x99\x50\x0f\xf3\x81\xd1\xe0\x98\x28\x94\x73\x4a\x52\x94\x73\x4e\x72\x94\x73\x49\x2c\xca\x79\x4a\x3c\xd2\x3c\xa7\x18\x69\x6e\x28\x41\x9a\x3b\xca\x90\xe6\x9e\x0a\x94\x0a\x4c\x23\x59\xa2\x29\x4a\x05\xa5\x39\x4a\x05\xa3\x16\xa5\x82\x53\x87\x52\x21\x18\x42\x5a\x48\x46\x90\x16\x8a\xb1\x08\x39\xd2\x22\x65\x12\xe5\x42\xb3\x34\x42\x8d\x8c\xc8\x99\x89\xd0\x22\x2b\x0c\xf3\x01\x72\x8c\x9c\x30\x9c\x20\x17\xd8\x14\xe4\x85\xe5\x3c\xc2\x20\x5f\x05\xaa\x1f\xa0\xc6\x38\xac\x37\x4c\x84\xe3\x36\x42\x8f\xa9\x70\x02\x47\x48\x30\x13\x4e\x30\xcc\x85\x13\x3c\x42\x89\x85\x70\x22\x8d\x50\x63\x29\x9c\x30\x58\x09\x27\x6c\x84\x1e\xa7\xc2\x49\x1c\x61\x60\x3c\x9d\x64\x11\x72\x9c\x0b\x27\x25\x36\xc2\x4a\x15\xa1\xc6\x56\x58\x69\x22\xb4\xd8\x09\x2b\x3d\x76\xc2\x28\x84\x83\x8c\x40\x08\x12\x46\x31\x82\x44\x1e\x38\x58\x91\x2b\x19\x61\x64\x52\x95\x8e\xd0\x10\x2a\x52\x65\x23\xf4\x84\x89\x34\x0d\xc2\xa6\x4a\x49\x84\x94\x08\x21\x53\x1e\xa1\x24\x52\x88\x54\x45\xa8\x89\x12\x3c\xcd\x49\x2a\x58\x6a\x23\xf4\x44\x0b\xaa\x51\x84\x84\xe4\x82\x68\x4a\x8c\xc0\x81\xcd\x14\x48\x0b\x62\x05\xd2\x8a\x38\xee\x75\x4a\x1c\x77\x3a\x27\x9e\x3b\x6d\x29\xe2\x81\x7d\x42\xdc\xe4\x88\x62\x9e\xe7\x38\x32\xd3\x34\x42\x46\x29\x4f\x73\x41\x19\x57\xb9\xa4\x9c\xcb\x3c\xa5\x9c\x8b\x5c\x07\xd2\x97\x07\x69\x8b\xe5\x96\x2a\x4e\x73\x4f\x53\x4e\x02\xed\xe7\xd8\x60\xaa\x39\x32\x94\x86\x45\xc5\x68\xe0\x79\x45\x90\xf2\x8c\x0c\x12\x9f\x09\x92\x60\x6e\x34\x43\x4c\x9b\x9c\x61\x96\x1a\xc3\x08\x53\xc6\xb1\xb0\x01\x79\x16\x08\x3e\x62\x9c\x71\x4b\x98\x60\x2c\x6c\x4b\x8c\x5a\xc6\x14\x23\x96\x33\xcd\xb0\x95\x2c\xa7\xde\x2a\x66\xa8\xb3\x29\xb3\xd4\x5a\xcd\x1c\x35\x36\xe7\x88\xe6\xd6\x72\x4c\xb5\x75\x9c\x50\x65\x3d\xa7\x54\x3a\xc4\x39\x15\x0e\xf3\xc0\x4e\x13\x2e\x29\x73\x94\xa7\x94\x3a\xc6\x35\xc5\x8e\x73\x43\x91\x13\xdc\x12\xef\x24\x77\xc4\x39\x25\x10\xb1\x2e\x15\x98\xe4\x61\xbb\x24\xda\xe5\x82\x91\xd4\xe5\x42\x10\xe5\x8c\x90\x44\x38\x2b\x52\xc2\x9d\x13\x9a\x30\xe7\xc3\x76\x17\x58\x48\x82\x3d\x12\x9e\x20\x8f\x25\xc6\xde\x63\x49\xb1\xf5\x44\x32\x6c\x3c\x95\x02\xe7\x3e\x08\xd7\xa9\x67\x32\xc5\xca\x73\x99\x63\xe9\x79\x60\xcf\xbd\x90\x0e\x33\x2f\x14\xc2\xd4\x4b\x45\x30\xf1\x52\x31\x8c\xbc\x52\x1c\x79\xaf\x94\x44\xce\x2b\x95\x22\xe3\x53\x95\xa3\xdc\xa7\xca\x20\xed\x53\xe5\x50\xea\x75\x8a\x90\x0a\x83\x8a\xa4\xd7\x29\x43\xd2\xe7\xa9\x40\xc2\xe7\xa9\x8c\x30\x8d\x30\x8f\xd0\x22\xe9\x4d\xea\x03\xd4\x18\x29\x6f\x34\x45\xa9\x37\x9a\x23\xed\x83\x88\x61\xbc\xd1\x0a\x59\x6f\xb4\x46\xde\x1b\x6d\x02\xeb\xad\x1d\x26\xde\xe4\x08\x33\x6f\x72\x82\x85\x0f\xc3\xa6\x7c\x9e\x0b\xac\x7d\x20\xf7\xd6\xe7\xb9\xc6\xde\xe7\xb9\x09\xdc\x73\xee\x08\xf5\xda\x20\x22\xbc\x36\x84\x28\xaf\x0d\x23\xda\x6b\x23\x88\xf5\xa9\x91\xc4\xfb\xd4\xa4\x94\xf8\xd4\xe4\x94\x7b\x65\x2c\x95\x5e\x19\x4f\xb5\x97\x16\x53\xeb\xa5\xa5\xed\x32\x67\xd4\x0b\x2b\x99\xf0\xdc\xa6\x2c\xf5\xdc\xe6\xcc\x78\x66\x2d\xf3\x9e\x85\xb1\xf5\x2c\x8c\xaa\xa7\x8e\x72\xed\xa9\xe3\x61\x67\x76\x42\x60\x4f\x9c\x12\xdc\x13\xa7\x45\xea\xb1\x33\xc2\x7a\xec\xac\xc4\x1e\x3b\x2f\xb9\xc7\x1e\xcb\xd4\x13\x4f\xa4\xf5\xc4\x33\x45\x3c\xf5\x5c\x09\x4f\x7d\xd8\x97\x98\x57\xca\x79\xee\xd3\x94\x78\xe1\x75\x2a\xbc\xf2\x79\xaa\x7d\xea\x4d\x6a\xbd\xf6\x56\x63\x6f\xbc\xd7\x2c\xec\x06\xf9\xb0\x1b\x58\xa4\x94\xc4\x08\x49\xa5\x02\xd3\xa5\x52\x2c\x90\x54\x1a\xa7\x48\x28\x83\x73\x24\x94\xc5\x16\x05\x79\x1c\x21\xa1\x7c\x20\x0d\x29\x22\x0c\x89\x14\x13\x81\x78\x1a\xe8\x2e\x4f\x09\xd1\x88\xa7\x94\x18\xc4\x53\x46\x1c\xe2\x29\x27\x1e\xf1\x54\x50\x8c\x78\x2a\x29\x8d\x90\x23\x96\x2a\x2a\x11\x4b\x53\xaa\x10\x4b\x35\xd5\x11\x1a\xc4\xd2\x9c\x3a\xc4\x52\x43\x7d\x80\x0c\x23\x96\x5a\x46\x11\x4d\x1d\x63\x11\x0a\x44\x53\xcf\x54\x84\x29\x0a\x19\x73\x44\x35\x66\x06\x11\x8d\x99\x43\x44\x13\x8e\x22\xc4\x88\x68\xca\x69\x84\x1c\x11\xcd\xb8\x40\x58\x33\xae\x22\x4c\x11\xd6\x9c\xe7\x11\x1a\x84\xb5\xe0\x2e\x40\x81\x22\xc4\x08\x05\x51\x39\x42\x16\xa1\x88\x50\x22\xa4\x95\x48\x23\xd4\x11\x9a\x08\x5d\x84\x3e\xc0\x80\x44\xad\x24\x41\x58\x2b\xc9\x22\xe4\x11\xca\x08\x55\x84\x81\xd0\x29\x99\x47\x68\x11\xd5\x4a\xba\x00\x15\x42\x4c\x2b\x85\x11\xd3\x52\x51\xc4\xb5\x54\x2c\x42\x81\x84\x16\x4a\x22\xa9\x85\x52\x48\x69\xa1\x34\x4a\x35\x57\x39\xd2\x9a\x2b\x8b\x72\xcd\x95\x43\x46\x33\xe5\x91\xd5\x41\x0c\x71\x9a\xa6\x04\x79\x4d\x53\x86\x83\x10\xc6\x31\xd6\x38\x6c\x74\x1a\xa7\x0a\x33\x8d\xd2\x14\xf3\xd4\xa7\x1a\x8b\xd4\xa7\x06\xcb\xd4\xa5\x16\xab\xd4\xa6\x0e\xa7\xa9\xd5\x08\xeb\xd4\x68\x8c\xf3\x34\xd7\x04\xdb\x54\x07\x62\x93\x6a\xcd\xb1\x4f\x53\x2d\x08\x4a\x95\x96\x04\xa7\x52\x2b\x42\x52\xa1\x35\xa1\x29\xd7\x39\x61\x29\xd3\x86\x88\x94\x69\x4b\x64\x4a\xb5\x23\x2a\x25\x39\x22\x69\x8a\x73\x4c\x74\x8a\x72\x42\x72\xe5\x73\x4a\x8c\x72\x39\x23\x4e\xd9\x9c\x13\xaf\x4c\x2e\x28\x52\x79\x2e\x29\x56\x3a\x57\x94\xa8\xc0\xa3\x53\xa5\xf2\x9c\x06\xb1\xde\x50\xae\x64\x6e\xa9\x54\x22\x77\x54\x29\x1e\x68\xb6\x62\x81\x66\x2b\x6a\x30\xcd\x15\x31\x84\x1a\x85\x0d\xa5\x56\x05\x66\xc1\x49\x6f\x38\x43\xd2\x19\xc1\xb0\xb4\x46\x32\x22\x8d\x51\x8c\xca\xdc\xa4\x8c\x49\x6d\x34\xe3\x32\x50\x71\x21\x03\x15\x97\x52\x19\xc3\x52\x29\x8d\x65\x41\x06\x70\x2c\x8f\xac\xb1\x91\xcc\x22\x66\x25\xb5\x98\x39\x49\x2c\x61\x5e\x62\x4b\x39\x96\xd8\x32\x4e\x24\xb2\x81\x40\x7b\xcb\x39\x0b\x84\x95\x73\x61\xad\xe4\x22\x70\xfc\x5c\x8a\xdc\xa6\x5c\x09\x6d\x35\xd7\x11\xe6\x22\xb5\x39\x37\x42\x59\xc3\xad\x90\xd6\x72\x27\x84\x75\xdc\x0b\x6e\x9d\xc0\x82\x59\x2f\x02\x97\x8f\x04\x15\xd4\x61\x11\xb8\x7c\x22\xb8\xc0\x8e\x08\x21\x82\xa8\x1c\xd8\xd1\xc0\xaf\x3b\xc7\x85\xe6\xd6\x05\xae\xdd\xba\xc8\xb5\x3b\x29\x1c\xcf\x9d\x14\x9e\x6b\xa7\x24\xe2\xa9\x4b\x25\xe6\xca\xa5\x92\x70\xe9\xb4\x64\x5c\xba\x5c\x72\x2e\x5c\x2e\x05\xe7\xce\x48\xc9\x59\x60\x4d\x39\x75\x56\x6a\x4e\x9c\x0b\x72\xaa\xf3\xd2\x44\xe8\x38\x0a\xe4\x96\x79\x8f\x14\x62\xce\x63\x85\x99\xf5\x58\x51\x66\x3c\x51\x8c\xe5\x9e\x2a\x1e\xa1\x64\xda\x33\xa5\x58\x58\x9c\x29\x53\x9e\xab\x9c\x49\xcf\x95\x61\xc2\x0b\x65\x19\xf7\x42\x79\xc6\xbc\x4c\x51\x84\x98\x51\x2f\x53\xca\x88\x57\x29\x63\xd8\xab\x34\x30\x47\x69\x60\xdd\x7d\x9a\x2a\xea\xc2\x34\xa3\xce\xeb\x34\xa7\xd6\xeb\xd4\x50\xe3\x75\xea\x68\xee\xf3\x34\xd0\xda\x5c\x63\x9a\xfa\x5c\x13\x1a\xf7\x81\x08\x39\x0d\x3b\x83\xa0\x22\xec\x03\x94\x7b\xa3\x53\xca\x7c\x94\x10\xbd\xd5\x26\x42\x47\x89\xb7\xda\x53\xec\x6d\x8e\x29\xf2\x36\x27\xc4\x7b\x9b\xb3\x08\x39\x09\x92\x80\x24\xd6\xbb\x30\xa1\xbc\xcb\x75\x84\x39\x09\xd2\x82\x25\x41\x72\x70\x01\x1a\x44\x52\x6f\x0d\x89\x90\x12\xe5\xad\xe1\x44\x7a\x6b\x44\x84\x2a\x42\x1d\x04\x41\x93\x13\xe1\x8d\xb1\x84\x7b\x63\x5c\x80\x16\x45\x48\x08\xf7\xb9\xa5\x84\xf9\xdc\xf2\x08\x25\x61\x5e\x5b\x15\xa1\x26\xcc\xa7\xd6\x44\x18\xf2\x2a\xeb\x03\x74\x98\x70\x2f\x1d\x89\x90\x11\x1e\x35\x3f\xc2\x0b\xa7\x88\xf0\xdc\xa5\x11\xe6\x44\x7a\xe6\x2c\x91\x9e\x3a\x17\xa0\x47\x44\x86\x1d\x83\x48\x8f\x7d\x10\x4f\xb1\xe7\x84\xb7\x0a\x0d\x8f\x7c\x4a\xf0\x04\x8c\xcc\xc7\x5f\x8e\x4e\x28\x50\xb4\xfa\xaa\xf7\x1c\x39\x47\x01\x39\x92\xe2\xa2\x01\xcf\x92\xf2\xa2\x19\x8c\xdf\x92\xfa\xea\xb4\xd7\x77\x05\xc0\xbc\x02\x0f\x5b\xfd\x3c\x6e\x0c\xd7\x06\x03\x28\xb3\x18\x0e\x00\x16\x60\xbe\x68\x60\xd9\xda\xca\x7c\xb8\x5f\x60\x1d\xfd\x02\xfb\xd8\x15\x83\x57\x60\x55\x7f\xa8\x71\x68\x13\x8d\x8a\x1e\x31\xd1\x89\xd8\xdb\x9d\xc4\x86\x36\xf6\x1e\xb4\x75\xb4\xaa\x2a\xc0\xb6\x0b\x99\xb5\x36\x7a\xe9\xbe\xd0\xa5\x3d\x15\x32\xcb\x0e\xa1\xb5\x62\xba\x1f\xaa\xa2\x3c\x19\x5b\xeb\xf6\x20\xe1\x37\xd6\x95\x4d\xd1\xdc\x9d\x4a\xfb\xf3\x41\xda\xbf\x16\xa5\xd3\xf5\xa9\x94\xdf\x1e\xa6\xac\x5e\x9d\x4a\xf6\xd7\x83\x64\xdf\xd7\xb6\x28\xf5\xf2\x54\xd2\xd5\x61\x3b\xfb\x58\x30\x27\xd2\xde\x1c\x75\xfe\xcd\xa9\x64\xff\x3e\x48\xf6\xd3\xef\xf5\xc9\xe2\xfe\x74\x90\xee\x6f\x9d\xed\xe4\xa9\xb4\x5f\x9c\x4c\xfb\xef\x93\x69\xff\x7e\x90\xf6\xe7\x9b\xda\xad\x6f\xaa\xe5\xc9\x01\xfd\xfd\x30\x71\x71\x7b\xb2\xd0\xd2\x1d\x24\xfc\x7b\x63\x4e\xa5\xab\xf7\xd2\xdd\xb8\x5b\xf7\xa5\x6e\xdc\xab\xaa\xbe\xc3\xe8\x54\xfa\xea\xc1\xf4\x04\xe5\xa7\x32\xe8\x47\x32\x9c\x6c\xd1\xfa\x91\x0c\xa7\xd2\x6f\x0e\xc3\xc7\xb5\x0e\xba\x5f\x6e\x72\x77\xe3\x96\xc5\xdb\xaf\x9c\xd7\x9b\xe5\xc9\x11\x35\xa7\xb3\xfe\xa8\x8b\x32\x3f\x3d\x57\xec\xe9\x1c\xbf\xea\xfa\xf6\x54\x72\xff\x40\xdb\xaa\xea\xe4\xe4\xbe\x39\x9d\xfc\x97\xa2\x2e\x6c\xb1\x3e\x95\xe3\xee\x74\x8e\x6f\xf5\xab\x5b\x7d\x2a\xfd\xeb\xd3\xe9\xbf\x29\xbd\xab\xcb\xea\x54\x8e\x57\xa7\x73\xfc\xb0\xd4\xeb\xd3\x55\xe4\x87\x33\xef\x27\xf7\xfb\x26\x10\x93\xd3\x0b\xfa\xa5\xfb\xb8\xa8\x7e\x07\x71\xa2\xba\xd8\x50\xc5\x49\x13\x94\x2d\xac\x32\x0c\x75\x46\xe0\x3a\xa3\x70\x93\x31\xb8\xcc\xb0\xbb\x10\xc3\x26\x64\x46\x96\x28\x31\x94\x61\x8c\x56\x10\xe3\x5e\xcd\x38\x98\x4e\x20\x02\x93\xc1\x90\xcd\x9f\x4c\x8d\xe0\x90\x7e\x9c\xfa\x66\xd7\xc9\xa7\x5d\xb4\x7e\xfd\xb6\x58\x0f\xbf\xaf\xc6\xd6\x49\x8b\x6b\xb8\x6a\x03\x15\xd8\xf6\xe3\x36\x13\xf0\x2e\x13\xf0\x75\x46\xe1\xab\xcc\x65\x59\x56\xdd\xdf\x87\x8f\xcd\xd5\x05\x9e\x63\x98\xc7\x77\x9b\xf6\x9d\xbe\x9a\xbc\x9d\xcc\x27\x77\x13\xf8\x72\x9c\x74\x7d\x65\xe6\x7e\xe8\xec\x9b\xde\x32\xb8\xbf\x36\x64\x75\xd5\xb4\xc6\x5e\xfd\x67\x1f\x14\x1c\x96\x60\xbe\x0b\xf9\x00\xe6\x2b\xe8\xbb\x1c\xb6\x4b\xd9\x9a\x0a\xed\x7d\x19\xe7\x2d\xe6\x16\xbe\x19\x8c\xe1\x6e\x21\x02\xd3\xd7\xf0\x0f\xbd\xc3\x66\x02\xe0\xdb\x6c\xfa\x87\x05\xba\x9e\xce\x38\xfc\x29\x3c\xfe\x61\xb0\xc2\x0a\xef\xbe\xcf\x92\x66\x88\xcf\x73\x75\xec\x79\x33\xe2\x0d\xdc\x90\x30\x01\x17\x18\x3c\x23\x83\x05\x7d\xeb\x97\x03\xa2\xb1\xe1\x7e\xb4\x24\x78\x6c\x25\x31\x75\x49\x09\xa6\xcd\x7b\x6e\xe7\x6a\x46\xc9\x9b\x78\x1f\x55\xd3\x47\xd7\x86\x2f\xc6\x57\xd2\x5e\x8d\x9e\x13\x30\xaf\xe1\x6f\xd9\x8b\xd9\xee\x22\xd4\x64\xd2\xe1\x77\x02\x66\x56\x37\x3a\x69\xc3\x7d\x02\xf8\xed\x41\xaa\x80\xe1\x3e\x8d\x81\x0d\x98\x55\xb5\x75\x75\x02\xe0\xcf\xd9\xb7\x33\xf7\xb6\x68\x12\x00\xbf\x0c\x8f\x61\x71\x26\x20\x0c\x83\x2b\x6d\x32\x79\x35\x01\xf1\x1a\xba\x64\x62\x96\x7a\xbd\x9e\xc0\x49\x5b\x12\xfc\x31\xfb\xb6\xab\x20\x99\x2c\x8b\xd2\x4d\x00\xfc\x61\xf4\x2a\xde\x88\x01\x9e\xfc\x96\xfd\x36\x8b\x57\x69\x26\xbf\xed\x8a\x2e\xca\xb5\xab\x9b\x64\xb2\xd2\xcd\xcd\x04\xee\x9a\xb6\x5f\xcb\xae\x57\xed\xeb\x75\x53\x57\xbf\xb9\x09\x9c\x98\x4d\x5d\xbb\xb2\xf9\xb2\x5a\x56\xf5\x04\x84\x7e\x7e\xdb\x55\xf0\x65\x68\xd3\x8f\xfd\x97\x5d\x07\xda\xb6\x3d\x5e\x4c\xfb\x6b\x3e\x9d\x90\x09\x7c\x75\x7e\x0b\x42\x57\x7e\x38\x2a\xa9\xed\x52\x57\x92\x2f\x96\xcb\x87\xca\x81\xaf\xce\xdf\xf4\xe9\xec\xdd\x04\xc6\xb5\x74\x35\x41\xee\x76\x32\x6f\x17\xd4\x04\xcd\x24\x0e\x5f\x27\x68\x46\x89\xbb\x0d\x3d\xa9\x9f\x66\xd9\x8b\xb3\xb3\x24\xa0\x6c\x74\x7b\x71\xdd\xf6\x71\xff\x4d\xe8\xe8\xfe\x9b\xd0\xe0\xfd\x37\x3f\x67\x3f\xef\xbf\xe9\x5a\x54\xad\xb4\x89\x2c\xd9\xb2\x7f\x33\x5c\x3f\x75\x2a\xcc\xcd\xe0\x34\x9b\x7d\x9f\x38\x00\xae\x5e\xee\x6e\x79\xdc\xbb\x7a\x6d\x54\x0c\xd8\x02\xf8\xe5\xc7\x56\x77\xf2\xba\x92\x8e\xdc\xf5\x4b\xf1\x65\xd2\x9c\x9d\xed\x1a\xd4\x64\xd1\xcf\xe9\xaa\x99\xc7\x86\x6d\x01\x80\x3f\x77\x11\x05\x13\x00\x7f\xeb\x47\xa0\x1d\x80\x96\xc6\xe9\xab\xbb\xab\xc9\xb7\x93\xe9\xab\xf3\xbb\xe9\x04\x4e\xa6\x6f\xa7\x93\x3f\xa1\x19\xff\x65\x32\xfd\x69\x3a\xf9\x53\x7c\x3f\x9f\x7c\x8b\x66\xbc\xfd\x2d\xbc\x9f\xb7\x39\xde\xc6\xf4\x31\xdf\x2f\x68\xc6\xff\x14\x73\xfc\xd2\xe7\x68\x7f\xef\xde\x03\xf8\xed\x61\xe7\xf1\x87\xe1\xfa\x65\xd2\xf5\x04\xfe\x78\x38\x27\xe1\x0f\x7b\xb3\x2b\x4c\xc6\xc4\x03\xf8\x62\xd6\xde\xdd\x9b\xdc\x1c\xcc\xcc\xb2\x1a\xcd\x7b\x5f\x95\xcd\xc5\x3a\x72\x8e\x18\xed\xbd\xf4\xfa\xb6\x58\xde\x4d\xe0\x64\xad\xcb\xf5\xc5\xda\xd5\x85\xdf\xe5\x0a\x75\x5c\xe8\xd2\xdc\x54\x75\x8b\x43\x7d\xd5\x5d\xa9\x39\x6f\xb7\x90\x89\x2b\xed\x64\x3e\xb9\x2d\xac\x5d\x06\x02\xf0\xe2\x28\x60\xf3\x68\xcb\xca\xbe\x1f\xee\x37\x7d\x33\x8b\x7b\xfa\x87\x8a\x5b\x0e\xbe\x01\xf3\x66\x0b\xdf\x1c\x1a\x15\x8f\x3c\xf4\xea\xee\x1e\xe0\xdd\x25\x14\xf0\x4d\x9f\xe1\x45\xff\xee\x43\x3d\x67\x46\xa1\x17\xeb\x9d\xdb\xd3\x1b\x30\x1f\xf9\x32\xb5\x25\xff\x12\x23\x55\x7e\x58\xb1\xab\xfd\xf8\xd1\x7b\x05\xaf\xce\xce\x56\x87\x65\x1f\x19\x2c\x3f\x52\xb6\x6d\x51\x64\xfb\xbc\x3f\x15\xff\xfe\x40\xe4\xde\x66\x77\xd9\x34\x66\xbe\x1d\x67\xfe\x88\x00\x70\xb7\xa7\xf2\x7f\x44\xa0\xb7\xbe\xfe\xbb\x3e\xff\x0f\x1f\x13\xd8\xee\x75\x97\xfb\xf5\x16\xbe\x19\xc7\x70\x1c\xf2\xac\x92\x0a\xba\xbd\x88\x6b\xe3\xdf\xf4\xde\x6f\x77\x7b\xbf\xad\xf7\x7e\x7b\xbd\xf7\xdb\x26\xfc\xd6\x07\xa5\x7e\x5b\xac\x7f\xae\x56\xef\x91\x9c\x43\xaa\x1f\x8b\x57\x37\xef\x13\x9c\x43\xba\x2f\xaa\xa6\xa9\x4e\xca\x02\x77\xfb\x09\xff\xea\xfc\xc9\xf2\x5e\x6f\xc1\xf6\xfa\xba\xe5\x76\x5f\xbe\x74\xb7\xb9\xab\x5f\xea\x4d\x53\xbd\x2c\x6e\x57\x55\xdd\xbc\x7c\xb9\x87\xdd\xc1\x27\x26\x69\xc6\x17\x32\xb5\xf7\x71\xa3\x6b\xb8\x89\x71\xd3\xe2\x85\xd3\xe4\x1a\xfa\x0c\xc1\x9b\x6c\x71\xfd\xdc\x5f\xf6\x03\xf1\xdc\x4f\xa7\x40\x67\xeb\x85\x6f\x1d\xbd\xce\xce\x6e\xba\x58\xa7\x0b\x7d\xbd\x40\xd7\x20\xbe\xed\xe2\xfe\xc6\xc0\xe2\x1b\xd0\x1a\xc4\x8e\x98\xf0\x1b\xbd\xfe\xfe\x4d\xd9\x5f\x13\xd6\xdf\x38\x5f\x47\x8b\xd8\x45\x7d\x9d\x6d\x62\xf4\xda\x50\x82\x39\x3b\x33\x49\x03\x9e\xdf\xf4\xd5\x83\x9b\xd9\xfa\xa6\xf0\x4d\x02\x86\xa8\x33\x55\x6c\x41\xc7\x50\x56\x70\x79\x7f\xbf\xb8\x06\xb0\x1c\x47\xdf\xdb\x0b\x26\x0c\x9b\x0c\x3d\x6f\x2e\xfb\xb8\x30\xcf\x9b\xe9\x74\x14\x17\x3f\xab\x16\xcd\x35\xac\xb3\xa7\x08\xae\x33\xfc\x7c\xbd\xf3\x02\x7d\xbe\x0e\xe9\xda\x78\x47\xe5\x62\x7d\xfd\x04\x3d\xcd\xe2\x05\xf0\xd1\xa3\xfc\x29\x06\xdb\xfa\xec\x2c\xa9\xfa\x3b\x9d\x9a\x8b\x0b\x88\x01\x74\x99\x4e\xf4\x6c\x9d\x95\x01\x39\x43\x38\xd8\x6d\x2b\x9e\xbc\xdb\xc2\x22\x7b\x87\xe6\x28\xc8\x1e\x8b\x3d\xd7\xc6\xd6\x99\xb4\x5e\x34\xd7\x3b\x87\xf4\x45\x73\x1d\xbd\x79\xeb\x66\xfd\xa4\x6d\x6b\x78\x95\xbd\x2b\xe6\x0d\x5c\xce\x9f\x62\xd8\xfd\x38\x7f\xb7\xdd\xee\x98\xda\x90\xa9\x0d\x64\xd2\xe7\x85\x25\x1c\x9e\x75\x98\x66\xcb\xd0\xdb\xdd\xbb\xad\x9e\xdd\x66\x0e\xea\x99\xc9\x6a\xa8\x67\xf6\x28\xf4\x94\x9e\xb5\x01\xd1\xef\xef\xbb\xa1\xb5\xce\x17\xa5\x1b\xdf\xfb\x06\xdf\xb9\x72\x73\xeb\x6a\x9d\x2f\xdd\xfc\x29\x8a\x11\xc0\xcb\x6d\xf4\x42\xdc\x27\x17\x93\x4d\xd9\xe6\xb6\x83\x8f\xfe\x4f\x77\xb7\x79\xb5\x3c\x3b\x6b\x3f\x67\x4d\xf5\x53\x53\x17\xe5\xab\x9f\xf5\xab\xb3\xb3\x87\x6a\x3c\x4e\x0b\xbb\xeb\x71\x26\xdf\x56\x76\xb3\x74\x93\x6d\x6f\xb6\x7d\x9c\x79\xf2\xf2\xa5\x5b\x77\xc9\xfa\x6c\x4f\x51\xdb\xdc\x43\x57\x92\xc2\x27\xf8\xac\x89\x21\xfa\x74\x8c\xc4\xaa\xce\x76\x71\xf0\xe3\x45\x7f\x2c\xfc\x3a\xa9\x62\x55\xa3\x7b\x97\xce\xce\xc2\xff\xd9\x50\xd3\x90\x69\x1c\x7d\x6f\x66\x6a\x17\xc4\xc4\xdd\x95\x80\x7a\x56\x27\xe5\x43\x4d\x2f\xe1\xc4\xf6\x0a\x8b\x03\x8c\xb7\xbd\x08\xd2\x35\x89\x0d\x5a\x47\xbc\x8c\x2e\xf9\xdf\xc5\x81\xaf\xdb\x38\xf0\x7a\x66\x93\x12\xd6\xa7\x82\x8d\x84\x49\xb4\x9d\xe5\x45\x69\x63\xbb\xe0\x28\x1e\x70\x19\x70\x74\xe2\x0a\x86\xec\xa0\xb7\x57\xc7\xb4\xcb\xcd\xba\xb6\x6f\x4f\x5c\x80\xe7\x76\x33\x58\x77\x54\x70\x12\x9d\xad\x42\x75\xd5\x69\xef\x9e\x0f\xa2\x33\x31\xca\x00\xd4\xb3\x55\x36\x99\x3c\x69\xaf\x54\x7a\x53\x94\xb6\x7a\x33\x7b\xe3\xf2\x95\x36\xbf\xfd\x79\x5d\x95\xab\x13\x94\xf4\x03\x93\x05\xe2\x13\xaf\x7b\x88\x34\x29\xa2\x6c\x0d\x9e\xb4\x5f\xb3\x06\xae\xb3\xf5\xd1\xc5\x6a\xed\x8d\x10\x3b\x0a\xbb\x9c\x4e\x41\x93\xc4\x7b\x21\xda\xa0\x22\xd9\x66\x9f\xd2\x25\x0b\x05\x49\x47\xe1\x92\x77\xf2\x20\x6a\x7e\xd7\xcc\x97\x4e\x17\x2f\xeb\xac\x76\xbf\x6f\x8a\xda\xc1\xf1\x5b\x9b\xb5\xb3\x68\x0b\xd5\xd1\x15\x73\x65\x22\x01\x74\x3d\x25\xc8\xca\x24\x05\x5b\x98\x3e\x72\x49\xf7\xa9\xf5\x6b\x2b\x13\x77\xef\xb3\xb3\xa4\x9c\xad\xb2\xa4\xce\xfa\x37\xb3\xdf\x37\xae\xbe\xfb\x29\xca\x8e\x55\x1d\x25\xd6\xb5\xa9\x8b\x55\x33\x01\x60\xec\x1d\x36\x5b\xd7\x66\x56\xbb\xd5\x52\x1b\x97\x3c\xfb\xef\x67\x8b\xff\xf3\xdf\xcf\xae\xcf\x3f\x7d\x06\x27\xcf\x82\x08\x35\x34\x30\x29\xb2\xb6\x4f\xb0\x6a\x1f\xea\xbe\xab\x71\x68\x5e\x6c\x9a\xea\x9b\x38\x30\x5f\xdd\x95\xfa\xb6\x30\xa7\x98\x8d\x2a\x99\xb4\x65\xdc\x95\x2f\x27\x31\x84\x61\x91\x4c\x74\x10\x5e\x27\x70\x71\x7d\x4a\x5b\x9a\x60\x14\x78\xf7\x22\x99\x58\x7a\xa1\xeb\x5a\xdf\x3d\x98\x92\x8c\x12\xbe\x2d\xd6\x0f\xa7\x13\x43\xc2\x36\x28\xc9\x83\x49\xf9\x90\x32\x72\xd7\x0f\x97\x39\x4e\xd9\xeb\x16\x1e\x4c\x4d\x47\x89\x6f\xf4\xea\x91\x62\x47\x29\x9b\xe2\xd6\xbd\xaf\xbd\xa3\x9e\x8d\xef\xff\x78\xa8\x74\xd6\x25\xf7\xcb\x47\xca\xc4\xb8\x4f\xb5\x59\xbb\xd9\xbf\x1e\xc6\x2b\xee\x1b\xbb\xac\xac\x5e\x77\x41\x19\xd7\xef\x41\x05\xee\xdb\xb0\xac\x37\x2f\x6f\xf5\xea\xe1\x84\xb1\x6f\x31\x5e\x78\x91\x4c\xe2\xe4\xbe\xe8\x08\xed\x83\x59\x64\x10\x60\xb7\x5b\xf0\xe4\xff\x0d\x00\x00\xff\xff\x44\x90\x43\x7b\xba\xaf\x16\x00") +var _distAssetsVendorD62e8ec23cd05cedaa719acf0f8b5554Js = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\xfd\xfb\x76\xdb\x38\xb2\x28\x0e\xff\xef\xa7\x90\xf9\x75\x34\x40\x04\xc9\x24\x75\xb3\xd9\x46\xeb\x4b\xc7\xb9\xf5\x44\x49\xba\xed\x8c\x27\x91\x35\xda\xb4\x04\xd9\xec\x48\xa4\x1b\x84\xe2\x38\xa6\xf6\xb3\xff\x16\x0a\x00\x09\x4a\x94\x93\xcc\xec\xb3\xcf\x49\xd6\xb2\x88\x5b\xa1\x70\x2b\x14\x0a\x55\x85\xdb\x28\x9e\x25\xb7\xad\x67\xcb\x4b\xc6\x9f\xbd\xf9\x07\xbd\x7f\xfe\xec\xc9\xd9\xfb\x3f\x9e\x9d\x06\xf7\x6b\xf2\xec\x9f\x67\xcf\xde\x9c\x4c\xde\xfd\xf1\xf6\xec\xed\xd9\x87\x77\x32\xf2\x24\x14\x2c\xd8\xf7\xd6\x64\xf2\xdb\xef\xef\x9f\xfd\xf1\x61\xf2\xea\xcd\xd9\xb3\x17\x7f\x3c\x39\x7b\xf5\xf6\x4d\xb0\xef\xae\xf7\x3e\x87\xbc\xb6\x48\xc2\x19\xe3\x64\xc6\xe6\x51\xcc\x08\x67\x7f\xad\x22\xce\x86\xc9\x6c\xb5\xc8\x43\xe6\xf7\xcf\x94\xf0\x55\x1c\x47\xf1\xd5\x19\x4b\x45\x4a\xf7\xbd\xbd\x68\x8e\xe6\xab\x78\x2a\xa2\x24\x46\x0c\xdf\x3b\xab\x94\xd5\x52\xc1\xa3\xa9\x70\xf6\x4c\x42\x4d\x20\x7c\x2f\xab\x62\xf4\xed\xe5\x9f\x6c\x2a\x5a\x53\xce\x42\xc1\x50\xbc\x5a\x2c\xf0\x1e\x67\x62\xc5\xe3\x1a\x6b\x4d\x26\xf4\x73\x12\xcd\x6a\x2e\x99\xb1\x05\x13\x0c\xa2\x08\x5b\xcb\xa2\x9c\xde\x2b\x44\x83\x12\xbe\x41\x15\xda\x41\x65\x23\x82\xad\xc6\x04\xf9\xd7\x7a\x2f\xff\xa4\xfa\x8b\x96\x80\x50\xbb\x91\xf3\x84\x23\x89\x93\xa0\xa3\x31\xe1\x74\x81\x18\x71\x90\xce\x8e\x1d\x22\x30\x89\xa9\x68\x2d\x58\x7c\x25\xae\x9b\xde\xcf\xf1\x2f\xd4\xfd\x39\x6e\x36\xb1\x18\xc5\xe3\x16\xfb\x72\x93\x70\x91\xa2\xbc\xdd\xbc\xb5\x84\x2a\x4c\xca\x9a\xa8\x16\xd2\xfb\x38\x79\x9a\xc4\xf3\x45\x34\x15\x41\x5e\xbd\x50\x3d\x19\x93\x68\x4f\xa2\x11\xd7\xa2\xb8\x26\xb0\x68\x5d\x87\xe9\xdb\xdb\xf8\x1d\x4f\x6e\x18\x17\x77\x28\xc6\xf5\x3a\xaf\x8a\x44\x11\x95\x68\x10\x36\x8a\xc6\x94\xa9\xaf\x78\x4c\xf9\x28\x1e\xe3\x35\x59\x86\x9f\xd8\x09\x9b\x87\xab\x85\x78\x06\xd8\xe4\xb3\x24\xa6\x02\x61\x12\x51\x24\x7f\x5c\x0c\x71\x09\x1d\x39\xba\xd9\x0e\x71\x34\xfa\x0e\x71\x54\x7b\x9c\x71\x31\x01\x42\xc4\x88\x20\x9c\xc4\xf8\x5e\x5c\x47\x69\x6b\xb5\x8a\x66\x34\x6a\x34\x08\x84\xa2\x19\x65\xea\x6b\xc6\x6e\x52\xba\x6f\xfa\x4e\x36\x41\x7d\x0d\x92\x40\xa8\x1c\x0a\x36\xbd\xd7\xb5\x05\xf7\xeb\xb5\x4a\x98\x86\x8b\xc5\x65\x38\xfd\x44\xb9\x0a\x5f\x87\xa9\x6a\x42\xfa\x24\x3d\x61\x37\x74\xdf\xd3\x95\xa5\x4f\x16\x51\x98\xd2\x58\x05\x39\x8b\xe6\x11\x9b\xd1\x98\xdd\xd6\x9e\x70\x1e\xde\x21\x53\x3b\x56\x19\x52\x11\x0a\x46\x9d\x98\xdd\x3a\xeb\xbc\x3d\x29\xc2\xf7\x45\x68\x25\x27\x45\xde\x92\x22\x7e\xa1\x5a\x5d\x4c\x98\x88\xc6\x23\x36\xce\xb2\x78\xc4\x1a\xce\x41\x14\xcf\xd8\x17\x67\xfc\x73\x54\xaf\x47\x06\xad\x9f\xb1\xcc\x13\xb5\xa2\x19\x64\x93\x1f\x45\x4e\x33\x63\xa2\x2c\x2b\xa6\x23\x11\xb2\x6e\x9e\xdc\xd6\x64\x13\x9e\x71\x9e\x70\xe4\x3c\x4d\x56\x8b\x59\x2d\x4e\x44\x6d\x1e\xc5\xb3\x9a\xea\xb4\xda\x7f\x39\x0d\xd6\x70\xfe\xab\x16\x2d\x65\xbf\xb0\x59\x6d\xce\x93\xa5\x8c\x15\x0d\xe7\xbf\x1c\xbc\x06\x60\x84\xd7\xeb\xce\x0d\x8b\x67\x51\x7c\xe5\xec\x53\x1a\xa9\x1e\xa8\xd7\x9d\x79\x14\x87\x8b\xe8\x2b\x9b\x95\xa2\x51\xd4\x92\x75\x9c\xb0\x9b\x14\x71\x4c\x78\xeb\x66\x95\x5e\xa3\x08\x63\x12\x15\x3d\x31\x55\x78\x46\x73\xe4\xb4\x64\x69\xd6\x9a\x5e\x87\xfc\x89\x40\x2e\xc6\x66\xf9\xef\x99\x5e\xe2\x94\xb5\xd2\x9b\x45\x24\x90\x73\xe0\xa8\xb5\x54\x04\x5b\xe9\x22\x9a\x32\xe4\x92\xa6\x27\xa7\xa3\x4b\x12\x6a\x26\xc9\xcf\xd1\x71\xf2\x73\xd4\x68\xa8\x15\x12\x52\x3e\x8a\xc6\x7b\x50\x65\xcb\xa1\x94\x86\x50\xbf\x4b\x29\x8d\xcd\x08\x6f\xf7\x5b\x18\xcb\x4e\x0b\xa7\x53\x96\xa6\xb5\x9b\x90\xb3\x58\x98\xde\x4b\xe6\x35\x9e\x24\xc2\xc1\x7b\x71\xeb\x26\xb9\x41\x78\xcd\x16\x29\xd3\x6d\x02\xf8\xd3\x24\x16\x51\xbc\x62\x32\x83\xec\x84\x10\xaf\xd7\xba\x75\x71\xeb\xcf\x24\x8a\xa1\x05\x45\xaf\xcc\xe5\xbc\x51\x19\xf6\xd1\xbe\x9c\x1a\xf5\xfa\x7e\x69\x6e\xe0\x75\xd8\xba\xe1\x89\x48\xc4\xdd\x0d\x6b\x6d\xad\xce\x82\x2a\x19\xfa\x6a\xad\x11\x43\x4f\xf6\x24\x95\xa5\x94\xb2\x2c\x73\x12\x20\xbf\xce\x3e\x95\xf0\x92\x79\x0d\x86\x55\xc3\xb0\x62\xb3\x4c\xd1\x61\x18\xa9\x99\xaa\x31\xcb\xf6\x35\xf1\x8e\xd2\x67\x5f\x04\x8b\xd3\xe8\x72\xc1\x10\xc3\x59\x86\xf2\x4c\x94\xe1\x35\xb1\x51\xd6\x38\xd8\x88\xca\x0e\x2b\xa6\x12\xa5\xb4\x58\x66\x59\xe6\xc8\xf5\x78\x27\xa7\x5e\x29\xc1\x4c\x92\xaa\xe6\x29\x6a\xd9\xba\xe5\xe1\x8d\xa2\xd5\x69\xbd\x8e\xca\x24\x61\x3b\x0b\xd2\xcb\xb5\x4c\x3b\x30\x2e\x88\xc2\x1d\x52\x44\x4e\xf7\xa9\xc9\xd2\x0a\x6f\x6e\x16\x77\x50\xbc\x44\x40\x72\x72\x6e\x47\xea\x79\x46\xdd\x12\x29\x29\x1a\x5f\x49\xa9\xea\x75\xd5\xf9\x6a\xc8\x50\x45\x93\x29\xc3\x7a\x8f\xd8\x9e\x12\xf5\xba\x2a\xb0\x19\x8f\x30\xa9\x80\x54\x1e\xac\x55\x9c\x32\x66\x0f\xd5\x26\x01\xdc\x49\x82\xcb\x70\xa0\xfb\x36\x87\x5c\x77\x89\x5c\xfd\xd6\xb8\x96\xaa\xc8\xc7\x7e\x4f\xf0\xbb\xfb\x12\x79\x86\xc0\x44\x8f\x0b\xd9\x2c\x24\xe1\xae\xa1\x5b\x17\x77\xf7\x3b\xa6\x90\x99\x14\xba\x18\x93\x0b\x9e\xcd\x1c\xbc\x89\xfc\x64\x0b\x7b\x43\x97\xf4\x4c\x30\x63\xab\x08\x11\x26\x82\xba\x3f\x8b\x63\x66\x88\x90\x30\x04\x88\x53\x36\x12\xe3\x3d\xf9\x87\x72\xd3\xe1\x83\xfc\x2b\xd8\xdc\xf7\x11\x36\xc4\x82\x95\x31\x32\xe4\xb5\xc4\x83\xc8\x2e\x95\x43\x42\x77\x77\xa7\x21\xe2\x7b\x05\xbf\x92\x6f\xb2\x84\x53\xf7\x67\x7e\x6c\xf6\xba\x9f\xb9\xc1\x3a\xa6\x62\xc4\xc7\x24\x2a\xb5\x75\xc4\xc7\xc5\x70\x6b\x16\x4d\x21\xaf\x43\xeb\xbd\x7c\xfb\x97\xf4\x75\x80\xaa\xb7\x60\x97\x44\xf9\x1c\xae\x98\x8d\x38\xc8\xd9\x09\x80\xb2\x99\x39\xfc\xc4\xfe\x50\xe9\x08\x07\x86\xcb\xa8\xcc\xa9\x70\x8b\xcc\x54\x5d\xa0\x29\x8a\x0d\xaf\x81\xcd\x07\x61\x5b\x83\x6f\x55\xb1\x83\xb6\x4a\x92\x41\x6d\x6e\xcc\x70\x71\x1a\xb1\x29\x12\x84\x61\xbc\xce\xc9\x41\x4e\x1a\x05\x11\x1a\x9f\x57\xc0\xef\xc8\xee\xa9\x82\x34\xcf\x61\x10\xb1\x26\x48\x31\xb8\xd4\xde\xf0\x25\x4b\x51\xb0\x13\x7b\x51\xbd\x0e\x53\xa1\xd8\x95\xb3\x0c\x85\xfc\x6a\xb5\x64\xb1\x48\xf5\x08\x1f\xfb\xf5\xba\x3d\x7f\xb6\xb6\xbe\x30\xae\xad\xe2\x74\x75\xa3\x59\x03\xbd\xe9\xdd\x86\x69\x4d\x61\x30\x23\x35\xf6\xe5\x86\x4d\x65\xe2\x7f\xa9\x28\x14\xcd\x48\x0d\x66\x93\xce\x8e\xff\xab\x16\xc5\xa9\x60\xe1\xac\x76\x95\x88\x20\x67\x38\x72\x64\x6a\x22\xd1\xe0\x80\xdf\xd8\x44\x12\x13\x60\xc1\x24\x33\xa4\x58\x31\xb9\xb9\x70\xd9\x73\x74\x34\xc6\x44\xb6\x96\x72\xa8\x22\x8c\xa7\x72\xa7\x5a\x0d\x64\x0b\x42\xc4\x61\x5c\x08\x27\xfb\x2e\x0e\x54\x94\x62\x38\xf7\x3d\x8c\xd7\x78\x7b\x1b\x02\x76\x44\xad\x52\xd5\x87\x73\xb4\xcf\xb3\xcc\x2c\x29\x5e\xda\x76\x10\xa7\x06\xe6\x68\x4c\x52\x02\xc7\x16\xbc\x49\x94\x05\xe1\x15\x14\x5e\xe1\x4c\xf8\x5a\x1f\x58\x5a\x21\x70\x9f\x65\x44\xf4\xc8\xfb\x92\x8b\xd8\xe8\x92\x81\xee\x6a\x41\x24\x0a\x92\xd3\x54\x0d\x94\x5f\xeb\xe2\x28\xd3\x62\xb1\xe0\x11\xcb\x4f\x2f\x7f\xa6\xad\x09\x0b\x3f\x4d\x52\xc6\x62\x1a\x5b\xf9\x60\xd2\x59\xe1\x0d\x9a\xcf\xf0\xbd\x3a\xce\x40\x3c\x76\x64\x07\xaa\x3c\xa8\x54\xdd\x74\xc1\x42\x6e\x2f\x91\xef\xc4\x04\x4e\x11\x42\xc2\xd2\xed\x72\xe6\x49\xe2\x10\x0b\xd0\x1a\xdb\x49\x07\x97\x21\x77\x64\xaf\xef\xce\x11\xa6\xb3\xb9\x43\x46\x86\x1e\xd8\x07\x11\x43\x4d\xac\xe2\x7a\xf9\xc0\xd9\xa8\xa8\x41\x9e\x96\xac\xd0\x16\x0e\x5f\x01\x07\x7b\x04\x15\xe2\xb8\x9c\xf1\xaf\xd5\x57\xe7\xa1\x5c\x76\x24\xd1\x25\xbe\x38\x55\x0d\xd6\x59\x5a\x0a\xa4\xd3\x52\x38\x38\x2d\xdd\x5a\x88\xe0\xf2\xb7\x75\x20\x73\x3e\xd4\x3f\xcb\x30\x8a\x35\x44\x28\x54\x9d\x37\xdf\x85\x20\x5f\xde\x85\x32\x83\x21\x6d\xa5\x94\x8d\x68\xa8\x24\x8f\xd3\x33\xa6\xe8\xd0\xcd\x99\x83\x30\x31\xbc\x28\xcd\xb9\x4e\x05\xb9\x5e\xdf\x4a\x51\x23\x5b\xaf\x97\x17\x5c\xbd\x8e\x36\x56\xe0\xfd\xe6\x49\xbf\x24\x23\x58\xe3\x35\x6c\x4b\x98\x38\xab\x58\xd3\xb4\xa2\x8e\xe7\x61\x2a\x7e\x4d\x12\x61\x53\x49\xb9\x34\x1f\x40\xb3\x80\xb2\x5f\xc6\x74\xb0\x49\x19\xe4\x76\x95\xb3\xd9\x39\x24\x55\xba\x5e\x37\x73\x63\x39\xcb\x17\x3b\x0e\x58\x6b\x99\x48\x3a\x20\x0b\x2b\xbc\xed\x61\x2b\x89\x59\x60\x77\x22\xa2\x38\x6d\x73\x94\x93\x14\xa6\xf9\x55\x49\xb2\x48\x4e\x5b\xac\x33\x48\x5c\x9c\x41\x6a\xcc\x26\xad\x40\x81\xb3\xcc\x19\xa9\x0e\x50\xe1\xb1\x24\x8e\xfa\x18\x50\xec\x9a\x22\x39\x15\x3c\x8a\xaf\x80\x49\x96\x74\x29\x87\x1e\x59\xd0\x25\x0a\xfb\x54\x9e\x38\x0c\x48\x05\xe8\x47\x61\x26\x16\xcc\x82\x53\x5e\xdb\xb2\x06\x93\xee\xc4\xab\xe5\x25\xe3\xd6\xe0\x59\x0d\x7a\x03\x69\x3f\x5a\x7b\xba\xab\xbf\x4e\xd4\xf9\xc5\x40\x97\xc1\x1f\x85\xbd\xb2\xb6\x25\x12\xd3\xd1\x18\x38\x37\xc5\xa9\xe5\xfc\x65\xa3\xc1\xb1\x3e\x5f\x0a\xc4\x24\xaf\xc6\x71\x7e\xf8\x88\x37\x84\x0f\x39\xaa\x5b\x58\x94\x45\x43\x1a\x17\x22\xf0\xd6\x99\x3d\x3f\x95\x2b\x49\xd3\x02\x49\xfa\x59\xaf\x43\xd5\xc0\x2b\xe6\x95\xcb\x24\xc7\xb4\xce\x81\x3c\x79\x63\xa9\xc8\x3f\x31\x81\x8c\x9f\xc3\xc5\x8a\xbd\x9d\xeb\x7c\x3a\x44\x85\xf9\xc2\x84\x95\x0e\xca\x46\x7c\xa4\xeb\x7a\x22\x4c\x94\xdc\xf2\x5b\x2b\x31\x45\x16\xea\xd7\x1b\xd3\x4e\x1e\x63\x27\x37\x73\xa8\x69\x72\x33\xa7\xf7\x6c\x79\x23\xee\x82\x7d\x8f\xac\xe2\x55\xca\x66\x67\xc9\x27\x16\xa7\xc1\x68\xac\xc3\xaf\xe2\x9b\x95\x90\xc1\xe4\x33\xe3\xf3\x45\x72\x1b\x34\x7d\x32\xbd\x0e\x79\xfa\x9a\xcd\xc5\xdb\xcf\x8c\x07\x2e\x70\x01\x2a\xe3\xbe\x47\xa2\xf8\x73\xb8\x88\x66\xc3\x24\x16\xd7\x01\x2c\x36\x1d\xf3\x3c\xe1\xcb\x10\xb2\xac\x52\xc6\x5f\xa9\xc8\x50\xb0\x19\x94\x4a\x13\xf9\x73\x13\xf2\x94\xcd\xe4\x8c\x79\x17\x4a\x0e\x7b\x34\x26\x4b\xc6\xa3\x59\xc4\x96\x0a\x16\x9f\x4f\xfd\x43\xdf\x97\x79\x6f\x19\xfb\x34\x0b\xef\x86\x51\xba\x0c\xc5\xf4\x3a\xd8\xf7\xd6\x98\x40\xab\x8a\xe6\xcf\xf4\x01\x21\x6f\x7a\x94\xfe\x43\x56\x6b\x38\x1e\xd9\x3d\x20\x56\x81\x51\xe7\xad\x8d\xfa\x89\xcd\x0d\x94\x17\xef\x1a\x93\x88\xee\x47\xe9\x9b\xf0\x8d\xec\xca\x59\xeb\x8a\x89\xb3\x68\xc9\x10\x06\x79\xa3\xe9\xae\x63\xb7\x5e\xdf\xe7\x2d\xe8\x65\xf8\xb2\xbb\xc7\x8e\x38\x57\xad\x81\xa8\x8d\x96\x41\x5c\xde\xc7\x76\x21\xd5\xa5\x10\xb3\xd1\xa7\xf5\x3a\xda\xe7\x2d\xd3\x77\x59\x56\x7c\xd7\xeb\x31\x96\x4c\x1e\x6b\x4d\x14\xd9\x04\x49\x68\x54\xaf\xbb\xc0\xed\x95\xc6\xd6\x44\xda\x73\x23\x97\x48\xe6\x14\x87\xb7\x2e\xa3\xab\x97\xc9\x8a\x63\xa2\x3a\x27\x97\x8e\x3c\xe7\xc9\x57\x16\xd7\xeb\x1b\x11\x92\x75\x33\x02\xbc\xbd\x62\x50\x68\xb4\x2e\x04\xe0\x3a\xae\x18\xca\x1b\x39\x06\xea\xec\x36\x47\x6f\xc2\x37\xc5\x4a\x57\x03\x32\x98\xa2\x6b\x24\x30\x61\x38\x90\xbf\x9b\x1d\x22\x8f\x5c\x62\x2d\xa8\x62\xab\x8b\xd5\x9f\x26\x4b\x36\xa8\x8a\x0c\xaa\xe5\xdc\xaa\x29\x7a\xfb\xe4\xb9\x70\xfb\x97\x5f\x7e\x71\x49\x4c\xdd\x9f\xe3\x63\xfe\x73\xdc\x68\x60\x39\xe9\x80\x4e\xd4\xeb\x4c\xcd\x2e\x25\x28\x19\xc5\x63\x12\x13\x61\x3a\x60\xdf\xd5\xcd\xd8\xf7\x94\x74\x79\x49\xb9\xde\xef\x34\x45\x92\x0c\xe4\xc8\x12\x20\x7f\x2e\x91\x46\x12\xc9\xb1\x4c\x90\x90\x3d\xf6\x64\x08\x05\x15\x8a\x4a\x1a\xb5\x19\x4b\x2b\x32\x12\x55\xdc\x14\x80\x2c\x3a\x72\xae\x23\x25\x39\x9a\xcc\x75\xe4\x42\x47\x2e\x28\x04\x54\xa4\x9a\x4b\x3a\x45\x05\x68\x11\xad\xf2\x88\xaf\x4b\x9d\x41\x7c\x5d\x52\x1d\xa1\x6b\x4f\xdf\x9f\x3d\xcd\x51\x7e\x7f\xf6\x94\xe6\x91\x2a\x43\x32\x9f\xa7\xcc\xc0\x57\x01\x5a\x44\xab\x3c\x37\x06\xdd\x9b\x39\x95\x73\xc0\xe0\x9b\x4c\xc3\x05\x33\x48\x43\x80\x16\xd1\xc4\x3d\x5e\x9a\x43\x57\xb1\xc9\x2c\x6d\x71\x40\xa2\xae\x0a\xe8\x72\xc4\xc7\x63\x80\x33\x8a\xc7\x34\x2a\xee\x6b\xe0\x5e\xe6\x8e\xee\x7b\xc5\x30\x5d\xc1\x74\x55\x83\xce\xf4\x41\x7b\xa2\x84\xeb\x27\xe6\xc2\x67\x5f\x52\xa4\xd9\xa0\x4c\x3e\x02\x39\xb7\x8d\x80\x1e\xd6\x00\xc2\x46\xf8\x65\x03\x90\xd9\x30\xd9\xf7\x28\xa5\x77\xf5\x3a\xba\x93\x13\x9c\xb7\x56\x37\x72\xb6\xbf\x85\x5e\xd1\x93\x54\xe2\x65\xed\x08\x97\xbb\xb6\xed\xab\x2c\xcb\x19\x93\x1c\xbb\x8d\xb9\x52\x80\x99\xd8\x60\x8e\xdd\xc1\x30\x14\xd7\xad\x29\x8b\x16\x20\x07\x75\x03\x08\xcf\x17\x49\xc2\x4b\x1b\xfb\x6d\xb1\x8a\x1b\x8c\x70\x6a\xa6\x3f\x48\x58\x45\xbd\x1e\xa5\xcf\xa3\x38\x12\x92\xf1\xab\xd7\x11\xa7\x13\x18\x46\x5e\x00\x78\x66\x1f\xfb\x63\x12\x51\xa8\x68\x19\xc5\xc8\xf0\x05\xa4\xb8\xb6\x48\x54\x6a\x78\x99\xe6\xa9\xcd\x22\x35\xa4\xae\xba\x39\x82\x65\x1b\xc1\xb2\x45\xbc\x5e\x97\xa3\x2b\xb1\x19\xc5\xe3\x2c\xdb\xe7\xf5\xfa\x2d\x0c\x38\xde\xa7\xf4\x16\xc9\x58\x49\xe2\xc3\x46\xc3\xa0\x1e\x36\x92\x02\xbf\x2f\xb2\x81\x30\x2a\xbc\x95\xae\x6e\x6e\x38\x4b\xd3\x13\x76\xc3\xd9\x34\x94\xe9\xe7\x21\x8f\xa3\xf8\x6a\x07\xd3\x3c\x4d\xe2\x34\x91\xfc\xbd\xfe\x68\xdd\x86\x3c\x2e\x87\x90\x63\x41\xab\xdd\x2a\x70\x41\xcd\x69\xd8\xbd\x7c\x5a\xd0\x88\x98\xe6\x24\xa6\x36\x45\x65\x49\xa4\x1a\x65\xde\x9a\x15\x10\x5f\x86\xf1\x6c\x21\x09\x7f\x55\xac\xe2\x9d\xe5\x8e\x69\x5d\xe4\x90\x84\x8e\xc6\xb2\x2f\x7f\x0e\x8f\x37\x8f\xec\x3f\x87\x8d\x06\xd4\x14\x51\xc7\xd9\x3e\xe7\xe4\xd9\x47\xe1\xb8\x80\x98\x4a\xb2\x19\x35\xa8\x73\x11\x8f\x9c\x46\xd8\x70\xc6\x35\xa7\x60\xd8\x47\xee\x18\x47\x0d\x9a\x36\x1c\xd9\x68\x3b\x7a\x94\x8e\x1b\x0e\xa9\x39\x7b\x11\x8d\x8a\xbb\x11\x5f\x5d\x4e\xd4\x22\x6a\xd7\xb6\x97\x98\xcb\x99\xf5\x17\xc4\x1a\xce\x45\xfc\xc4\xa4\x4a\xb0\x5b\xfb\x81\x84\xa6\xa8\x78\x82\xf5\xfd\x85\x83\x65\x31\xa7\x81\x72\xc9\x11\x6e\xa5\x22\x9c\x7e\x92\x0c\xc5\xbe\xb7\xce\xa5\x5e\x96\x98\xdc\x3a\x76\x48\x06\x53\xb6\xf6\x2d\x79\x42\xef\xd7\x05\xdd\xf8\xa4\x86\xee\x87\x87\x06\x2e\xac\x9e\xc0\x9d\x1a\xfa\x82\xf4\x37\xdd\x77\xad\x59\x71\xb6\x6b\xe5\x3f\xd7\x39\x2c\xa6\xdd\x44\xfd\x28\xe3\x3e\x2c\x33\xee\x53\x74\xbf\x26\x0c\x2b\xee\x7d\x83\x6d\x8e\x80\x71\xc6\xf5\x7a\x84\x80\x79\x1e\xa0\x18\xa4\xab\x6b\x32\x85\x2f\x02\xc9\x26\x00\x59\x70\xa0\xfa\x45\x06\x06\xb1\x61\xbb\x03\x7d\x47\x1e\x03\x0b\x9e\x57\xc5\xb0\xe4\xe3\x65\x55\xfb\xa6\xce\xbc\x4a\x55\x15\x60\x07\xa5\xaa\x8e\x0d\x4f\x65\x77\xe5\x14\x51\x89\x93\x99\x90\xad\x7d\x70\x65\xd3\x7d\x8f\x54\x8d\x10\x85\xc5\xf3\xd6\x74\xe6\x27\x76\x97\x0e\xac\xef\x12\xbb\x01\x04\x92\x70\x73\xee\x11\x45\x73\x04\x70\x97\xea\xcc\x53\xdc\x9b\x2b\xd6\xe1\x8f\xd2\x44\x7a\x67\x4b\xf6\xe4\x90\xbd\x4e\x6e\x19\x7f\x1a\xa6\x0c\xe1\xbd\x3f\x64\xf3\xff\x18\xf1\x86\x93\x3a\xf2\x43\x8c\xed\x73\xe3\x9f\xd6\xb9\x31\x55\x67\x98\xe2\xdc\x38\xf8\x03\x26\xd9\x1f\xa3\x0d\x98\x63\x23\x00\xcf\xc1\x9c\x58\x4d\x21\x31\x20\xb7\x3d\x36\x48\xd0\x3f\x11\xc7\x6a\x4c\x24\x1a\xf6\x39\x2a\x86\x25\xf2\xa6\xd4\xae\x57\xaa\x5d\x6f\xe4\xf4\xb6\xf6\xa3\xd7\xa5\x7d\x81\x3a\x4e\xa3\x20\xfd\x92\x55\x17\x4d\x73\xd7\xa9\x81\x23\xf7\x98\xb2\x01\x1f\x38\x0d\x27\x70\x9c\xc0\x69\x3a\x58\x15\xb9\x49\x6e\x91\xe7\x12\xb5\xaf\x84\x5f\x90\x4b\x22\x8c\xf3\x29\x8f\x70\x2b\x5d\x5d\xa6\x82\x23\x0f\x37\x14\x7e\xcf\xe9\x01\xba\x18\x8d\xfe\x75\x31\x1a\x3f\xbe\x18\xe3\x0c\x5d\x5c\xe0\x01\x1a\xbd\xbc\x1e\x2f\x97\x28\x4d\xf1\x20\x1b\x26\xd9\x70\x38\x90\xff\xb3\x93\x24\x3b\x39\x81\x3f\x03\xf9\x3f\x9b\xcd\x66\x83\xd9\x20\x9b\x25\x83\xec\x76\x94\x64\xb7\xe3\x41\x76\x3e\x4a\xb2\xf3\xf1\x20\xfb\x3d\x19\x64\x1f\xe0\x5f\x56\xfc\xcd\x3e\x7c\xc8\xae\xae\xd0\xd5\xd5\xd5\x00\x0f\xb2\x17\x2f\xd0\x8b\x17\x2f\xe4\x17\xcb\x9e\x65\x61\xf6\x24\xbb\xbe\x1e\x64\x2f\x5f\x0e\xb2\x4f\x9f\x06\xd9\x72\x39\xc8\xd2\x74\x90\x9d\xde\x7b\xe4\x68\x9d\x7d\xc9\xfe\x99\x7d\xfd\x3a\xc8\x3e\x7e\x1c\x64\x2d\x7c\x70\x45\xbe\x56\x22\xfe\xfa\xec\x34\x7b\x7d\x96\xbd\x7e\x3d\x90\xff\xb3\xc5\xbd\x47\x3a\x6b\x99\xfd\xa5\x5c\x9b\xbf\x96\x06\xe3\x7d\x71\x1c\xd5\x62\xf8\xbd\xad\x19\x13\xc3\x01\xa3\x24\x20\xcd\xaf\x07\x47\xf1\x18\x61\x79\x6c\xab\xd7\xd1\xaf\x72\x44\x23\x4c\x04\x7c\x8b\x91\x3b\x1e\x57\x94\x7a\x8d\xa2\x6a\x8a\x4a\xc4\xc8\x93\x64\xc2\x1f\x4b\x80\x1c\x80\xf0\x2a\x08\xb0\x92\x15\xf3\x77\x12\x8a\x10\xe1\x56\xc2\x67\x51\x1c\x2e\x76\x42\x66\x78\x6d\x91\xb8\xf3\x92\x38\x81\x15\x5c\xda\x00\x09\xfa\x17\x12\x84\x95\xa0\x63\xf2\x52\xce\x6b\xf9\xc7\x56\x56\xb0\x56\x06\x89\x28\x6b\xc1\x49\x0f\x3d\x57\xf4\x4b\x50\x97\x70\x1a\xe5\x17\x69\xc7\x1c\x2e\xd3\x7e\x1d\x45\x23\x31\x1e\x0f\xe4\x5f\xaa\x03\x01\x04\x50\x4c\xe5\x2f\xd6\x60\x0e\x2e\x46\xa3\x8b\xf4\xe2\x74\x7c\x80\x07\x71\x8b\xb3\x9b\x45\x38\x65\xe8\xe0\x5f\x17\xa3\xec\x62\xfc\xd3\xc1\x15\x71\x1c\x1c\x58\x09\x17\x17\x2a\xce\xac\xbb\x6d\x1d\x9b\x84\x3a\x8e\xc5\x2c\xa9\x33\x4e\xd2\xa0\x67\x28\x92\x0c\xd1\x40\xfe\xd5\xc7\x1c\x79\x02\x93\x41\x03\x2c\x59\xaf\xe5\x7e\x24\x3b\x00\x64\xf6\xe5\xee\x31\x47\x59\xe0\x69\xad\x5e\xfe\xcb\x26\x5f\xdd\xbd\x4a\x29\x9d\x68\x2d\x92\xf8\x4a\x96\x54\x07\x61\x60\x3d\xd9\x5a\xa2\xf9\xb5\xb5\x08\x53\xf1\x2a\x9e\xb1\x2f\xd4\xfd\xd9\x3d\xa6\xbc\x5e\xff\xda\x12\x2c\x95\x99\x7e\xc6\x8c\xb2\xbc\xf5\x5f\x49\x8c\x49\x29\x3f\xe1\x4d\xea\x95\x99\xfb\x7f\xd0\x83\x8b\xd9\x01\xf9\x20\x7f\xe4\xc7\x0b\xf9\x71\xdf\x5e\x1f\x90\xbf\xc3\x57\x67\x7d\x40\x7e\xa2\x07\xa3\x46\x73\x3c\xb8\x98\xdd\xf7\xd6\x07\xe4\x77\x95\x77\x70\x40\xfe\xa9\xbe\x74\xe8\x63\x11\xd2\x31\xbf\x01\x08\x8f\x48\x70\x8c\xe9\x80\x84\x28\x58\x01\xd2\x23\x12\x28\x87\xe4\xc6\x01\x89\x8b\xa4\xc6\x01\x89\x18\x3d\xf8\x98\xc9\xb0\x04\x19\x0c\x00\xc9\xab\x88\x24\xa5\x78\x34\x08\x54\x12\x1e\xc8\xc4\x50\x82\x70\x9b\x47\xe3\x7b\x97\xf8\xdd\xde\x7a\xf4\xb7\xb0\xf9\xf5\x62\xe5\xba\x4f\xdc\xe6\xc5\xca\xed\x3e\x7f\x7e\xb1\x72\xfb\xae\x0c\x9c\xf4\x65\xe0\xf9\x11\x04\x9e\x9f\x3c\x95\x81\x93\xe7\x10\x78\xee\xf6\xe5\x5f\x4f\x05\x9e\x3d\x1f\xdf\x7b\x00\x2d\x1b\x5d\xac\xdc\x1e\x14\x70\x7b\xcf\x9f\x5f\x1c\x98\x04\x74\x91\x3e\x1e\x94\x13\x4d\x12\x96\xbf\xeb\x83\x88\xa4\xac\x44\x66\x56\xcc\x50\xf7\x94\x49\x2a\x71\x86\x04\x1e\x58\xaa\x60\xcc\x92\x87\xb1\x7a\x9d\x0f\x78\x20\xd6\x96\x00\x90\x95\x96\xec\x02\xa5\x8c\x30\x3c\x00\x58\xc5\xd9\x95\x14\x67\x42\xb8\x57\xfa\x83\x5d\x3d\xfb\x72\x83\xa6\x0c\x15\x73\xc5\xb9\xb8\x70\xe4\x42\xb1\x97\x0e\xba\x18\xe1\x4c\xfe\x8c\x71\x76\x31\x42\xa3\x7f\x5d\x8c\x25\x41\xc5\x17\x63\x19\x0b\x84\xb6\x7c\xe7\x22\x57\x7c\x31\x87\xb3\x8c\x67\x59\x9c\x65\xd1\x1a\x63\x5b\xe6\xc8\x6c\x6e\xad\xa8\x6f\xd4\xbc\x38\xb8\xb8\xf8\xd7\x4f\x8f\x1b\x83\x16\xc2\xd9\xe8\x62\x7c\xbf\x1e\xcb\xd5\x7b\x71\xf1\x53\xdd\x51\x3c\xe5\xbc\xdc\x7b\xd7\xac\xcc\x94\x09\x58\xc8\xdb\x3b\x7b\xbd\x8e\x18\x1d\xb1\x31\x26\xa1\x3a\x7e\xc5\xf6\xe5\x1c\xc7\xf7\x5c\x92\x1a\x79\x82\x93\x04\xb6\x2c\x8b\x95\xc7\xe4\x39\x1b\xc9\xdd\x7b\x4c\x2d\x26\x6a\xa6\xeb\x06\x1c\x6c\x68\xaa\x13\xe2\xd6\xe4\x96\xca\x3f\x59\x76\xbf\x26\x42\x0e\x64\x6b\x72\x0b\x69\x6b\xd5\x96\x1b\x46\x5d\xb2\x64\xd4\x23\x9f\x19\xf5\xc9\x1d\xa3\x6d\x72\xc5\x68\x87\x5c\x32\xda\x25\x13\x46\x7b\xe4\x96\xd1\x3e\x79\xc6\xe8\x61\xd1\xe4\x2f\x76\xef\x9d\xca\xc0\xa0\xdd\xeb\x05\xed\x5e\xd7\x3a\x24\x95\x7a\xf8\x51\x87\x52\xb7\x5e\x67\x8f\x3c\xd7\xdd\xa7\x6e\x96\xb1\x47\x1d\xd7\xa5\xd4\x5d\xbf\x47\xce\x07\x87\xb8\xc4\x25\xd5\xf7\xe0\x77\x70\x8b\x93\x93\x8b\x63\x7a\x74\x74\x74\x34\x70\x9c\x06\x0b\x9c\x86\xd3\x60\x6b\x4c\xde\x23\x97\x8c\x9c\x0f\x1f\x1c\xe2\x8f\xcb\x70\xec\x3d\x49\x01\x92\x08\x58\x45\x64\xa1\x8e\x2c\xe4\xc8\x64\xc7\x4e\xf8\xe0\x90\xee\x8e\x94\x0f\x0e\xe9\x91\x7d\xd7\x4e\x7d\x87\xd4\x17\x71\xee\x1c\x4c\x5e\x99\x90\x87\xc9\x8a\x41\x0b\x63\xa6\x3f\x3f\x38\xe4\x77\xf2\xc1\x04\x64\x90\x31\xf2\xf7\x22\xfc\xc1\x21\x82\x91\x9f\xac\x88\x3c\xe6\x9a\xa1\x1c\x37\x93\x34\x26\x37\x0c\x52\x34\xb0\x0d\x85\xbd\xd1\x0d\x1b\x53\x9f\x52\x6a\xe6\xd2\x40\x8b\x61\xcf\x6e\x93\x93\xe8\x2a\x12\x1f\x64\xb7\x30\x1c\xe8\x89\x77\xad\x51\xac\x02\x53\x5d\xd2\x14\xaa\x2e\x03\x25\x5e\xc5\x72\xee\x79\x2e\xcc\xec\x6d\x20\xb4\x42\x0e\x2c\xd1\x69\xa0\xde\xe1\xb1\xfc\x18\x78\x47\xae\x1b\xf8\xac\x8d\x15\x2b\xfe\x96\x91\x27\x8c\x7e\x62\xc8\x79\xbe\x5a\x2c\x3e\x40\x4f\xef\xbb\xd8\x3a\xe6\x95\x49\x52\x0e\x3f\xde\x90\x33\xc7\x03\x34\x64\x5a\x8a\x24\xf7\xa9\x0a\x09\x8f\x3c\xf8\x81\xa4\x27\x38\x33\x39\xb1\x45\xfc\xce\xd8\x4e\x7e\x85\xb5\x26\xb3\x91\x73\xc5\x84\xd3\xc8\xe5\x6e\x03\xe7\xfd\xd9\x53\xc9\x11\xe3\x86\x18\x2b\x69\x94\x75\xba\xcb\xe9\xb0\x05\xa6\x5e\xd7\x62\x70\x60\xe7\x8b\x06\x53\x10\xe8\xc8\x55\xa6\x67\x36\xae\xd7\x3d\x18\xe7\x65\x12\x8b\x6b\x59\xd0\x3f\x82\xf0\x0c\xf6\x7e\x8d\x4e\xfa\x00\x3a\x9c\xe4\x85\xc9\x53\x66\x07\x81\xaf\xf8\x66\x71\x9b\xc0\x3e\x65\xb9\x26\xa6\x96\xe2\xe3\x2c\x53\x5f\xb9\x74\xb6\xf6\x26\x7c\xb3\xa7\x58\x10\x24\x1e\x79\x7e\xc3\xf3\xf1\x23\xcf\xcf\xd7\x7a\x83\x22\xd1\xe4\xf8\xc0\xf3\x09\x48\x7c\x06\x8a\xd4\xf8\x47\x81\x7f\x18\xb4\xbd\x26\x7f\xd4\x7f\xe4\xaf\xdf\xb2\x2d\xa9\x33\x28\x35\xbe\x9d\x6f\x09\x9e\x75\xfc\xf6\x61\xd0\xb0\x85\x3f\x8b\x63\xc5\xbf\x9a\x2b\x30\x81\xa3\x39\x8c\xba\xa4\xcd\x94\x16\xfa\x81\x1a\xc9\xa6\xb7\x26\xef\x91\x33\x74\xc8\xc8\x19\x0e\x81\x00\x39\xc3\xb2\x9e\x41\x59\xa3\x10\xba\xb3\xe1\x01\x09\x72\x86\xb2\x48\x89\xf4\xb1\x07\xf8\x68\x28\x9c\x9e\x5e\x27\x5c\xe4\x13\xd1\x80\xf9\x71\x38\x16\x88\x77\xc8\x81\x38\x87\x38\x43\x45\xbc\x74\xf0\x50\x11\xa1\xa1\x43\x7e\xd7\x5f\x43\x8b\x78\x41\xad\x95\xfa\x25\xc2\xc6\xf5\x0f\x76\xc5\xbe\x28\x3a\xa1\x4b\x7d\xab\x98\x55\x02\x28\xde\x50\x22\x36\xdc\x50\xae\x90\x04\x66\xc9\xd4\x86\xd9\xf4\xf2\xac\x43\x95\x79\x2b\xbb\x7d\x8a\xe2\x86\x13\xd1\xf5\xbd\x93\x04\x49\x6e\x8e\x84\xe7\x22\xf5\x3d\x45\x20\xa2\x81\xaa\x25\x0a\xae\x11\xc7\xa5\xeb\x25\xca\xd6\x4a\x71\xf3\x0f\x46\x0f\x4e\x46\xc9\xc9\x78\xa0\x8f\x7b\x17\x63\x79\xe0\xcb\x2e\x52\xdc\x90\x98\x0c\x0e\xc8\x3b\x46\x9d\xdf\xc2\x78\x15\xf2\xbb\xc9\x73\x76\xc9\xe1\x63\x18\xf2\xe9\xf5\xe4\xc9\x0d\x8f\x16\x93\x61\x78\x37\xf9\x6d\x15\xb3\xc9\x6f\xab\xc5\xdd\xe4\xc9\xea\x6a\x95\x8a\xc9\x29\xbb\x11\x6c\x79\xc9\xf8\xe4\xed\x54\x24\xf2\xf7\x4d\xf2\x59\x45\x9c\xb0\x29\x7c\x38\x46\x63\x79\xe2\x60\xf2\xa7\xaa\x45\xd6\x20\x81\x4b\xd0\x06\xb0\x84\x2b\xc1\x4a\x98\x12\x9a\x84\x24\x81\xd8\xe5\x0b\xf2\x79\x62\xb3\x34\xa0\xb2\x64\x11\xa4\x42\x8f\x3a\x9a\x6f\xb3\x39\xb0\x60\x0e\xfe\x75\x31\x6b\xfc\x74\xa0\x0e\x04\x02\x63\x41\x6f\x91\xc0\x7b\x4a\x52\x38\x47\xfb\x21\x12\x94\x55\x4d\x4a\x35\x12\x02\x5b\x95\x18\x21\x8c\x2d\x89\x56\x14\x4d\xd2\x28\x43\xfc\x88\xc0\x70\x3b\xf9\x10\x89\x72\x60\xd8\x9c\x31\x48\xab\xec\x5b\xdf\x37\x6c\xfb\x02\x72\x80\x4e\x72\x72\x5f\xb9\x2d\xec\xbb\x9b\xfb\x82\x86\xaf\x18\xab\x57\x8c\x86\x8c\xbc\x96\x7f\x8b\x7e\x7d\xce\x10\xbe\xcf\x43\x6c\x63\xf2\x6b\x09\xba\xd9\xa8\xd7\x85\x6c\x67\x34\x26\x91\xfc\x93\xe4\x22\x2b\x20\x55\x9e\x0f\xe7\x56\x4e\xe7\x68\xe4\xb3\x36\x11\x63\x4c\xcc\x8d\x7d\x4e\x6d\x34\xc1\xe0\x92\xaf\xc6\x24\xda\x4a\x36\x29\xc9\x0f\xa4\xd8\x20\xd5\xb1\xb5\x95\xca\x18\x26\x2b\x30\x5f\x49\xfe\x55\xc2\x16\xc4\x50\x53\x06\xe2\x28\x4c\x22\x1d\x82\xe3\xb5\xd5\x34\xbf\x03\x99\x13\x9d\x9c\x40\xb2\xba\xa4\xb1\x68\x04\xb5\x0e\x12\xce\xbf\x90\xd3\x48\xb4\xf4\x38\x93\xc3\x8d\x1d\xe2\x44\x8e\xb9\x1c\xda\xa4\x48\x74\x0b\x5a\x39\x23\x90\x81\xea\x5a\xa2\xef\xaa\xe5\x21\x08\x71\x05\x84\x62\x3e\x7e\x65\xc5\xc6\x14\xcd\x11\x3b\xf6\x5c\xb7\x5e\x77\x8f\x29\x33\x27\xf6\x07\x24\xe8\x85\x60\x65\x8f\x8f\xdc\x31\x65\x8d\x8e\xeb\x12\x51\xdc\x6c\xc9\x3f\xad\xf7\x67\x4f\x6d\x85\x1d\x2e\xa7\x46\x7e\x37\xd4\xba\x62\xe2\xfd\xd9\x53\xc3\x6a\x00\x6b\x21\x5a\x69\x39\x92\x69\xc9\xff\x37\x20\x17\xe8\x14\x8a\xeb\x45\x4b\x5f\xb2\xb2\x5c\xb1\xdf\x10\x4d\x6e\xb6\x56\xd4\x6f\xc8\x9e\x20\x2e\x89\xb1\x46\xe9\x24\xbc\x43\xb8\x29\xf0\xa3\x7e\x43\x6e\xbd\x39\x9c\x5f\x99\x7d\xf6\x03\x93\x21\x12\x92\x94\x7a\x8d\xfe\x63\x24\x9a\x1e\x6e\xa0\x7e\x83\x37\x63\x59\xf0\xa5\x22\xf5\xc5\xfd\x62\x48\xd3\x63\xea\x0e\xbe\x30\x94\x50\x26\xf3\xa6\x41\xfa\x0b\x1c\x71\x06\x32\xa6\xe1\x91\xb4\x09\x41\x1c\xc8\x30\x49\x31\xb9\x97\x54\x27\x48\xc8\x2c\xbc\x7b\x3b\x97\xdd\x11\x84\x16\x4f\xf8\x9e\x6d\xdc\xa2\x91\x84\xbe\xb4\x69\x95\xa4\x3f\x21\xb5\xee\xf0\x80\xa6\x69\x50\x08\x37\x93\xa6\x87\x0f\xfa\xb8\x91\x4b\x49\xc2\x63\x6f\x10\xd3\xb0\x71\xce\x50\x44\x0d\x9c\xa6\x07\x90\x82\xf0\x97\xf3\x0d\xe0\x03\x14\xd3\xb0\xb9\x19\x4b\x8a\xa2\x0d\x0f\x07\x16\x24\x12\xd3\x10\x93\xfb\x5b\xc6\x3e\x05\x31\x81\xb6\x45\x56\x7b\xce\x37\x46\x29\x1f\x35\x12\xc1\x77\x43\x21\x62\x24\xbf\xd0\x57\xcd\xb8\x11\xe1\x83\xbe\x25\x71\xda\x64\x94\xd5\x1d\x92\x20\x7d\xdc\x9a\x26\xf1\x34\x14\x88\xe5\xf7\x4a\x02\x63\x79\x30\xbc\x95\x6c\xd5\xed\xad\x62\xab\x6e\x13\x87\x38\x12\x45\x38\x8b\x39\xe7\x32\xed\xfc\x5c\xa5\x9d\xcb\xb4\x28\x4d\xce\x55\xf2\x3b\xa4\x32\x12\xe7\x56\x85\x4c\x12\x71\xce\x15\x83\xa3\x92\xbb\xf0\x9d\x27\x76\x15\x87\x72\x9b\xb3\x3b\xb2\xea\x9c\xdd\x39\xcf\xa3\x65\xad\x10\x3d\x93\x2c\xc7\xad\xac\xe6\x16\x40\x13\x99\x54\xc5\x77\x88\x51\x6c\xe4\xda\x2e\xf1\x70\x7e\xcc\x7f\x8f\x9c\x99\xe4\xdc\x9c\x99\x6c\xc0\x2c\xbc\x53\x6d\x9b\xcd\x7e\x80\x9d\xd3\xea\x2c\xe9\x30\x8a\xcb\x6c\xe1\xec\xdf\x02\x53\xc1\x5f\xce\xfe\x3d\x48\x65\x20\x4c\x41\x70\x74\xaa\x6a\xe8\x33\x1d\xa9\x87\x40\xc5\xbf\x43\xd0\x13\xc4\x99\x15\x43\xa9\x22\x58\x69\x34\x55\xdc\x33\x35\xa0\x10\xf0\xbc\x7c\x70\xed\xb0\x9d\xdf\xd3\x27\xf2\x59\x3e\x9a\x2c\xff\x7a\x96\x7f\xc9\xf6\xee\x60\x51\xad\xee\xde\xe0\x6c\x67\xdf\x51\xaa\x8a\x23\x9e\x7d\x4f\x41\xab\x0c\xcc\x3a\x59\x44\xd5\xa8\xca\x7f\x0f\xb7\x6b\x60\x3d\xcc\xef\xb6\x66\x1b\xdc\xae\xee\x3b\x50\xca\x52\x75\xc3\x50\xc8\xae\xdf\x31\xd7\xcd\xfc\x06\xf6\xf8\x1f\x8c\x3a\xa7\xab\x78\x16\xde\x4d\x86\x09\xfc\x9c\xad\x58\x2a\x7f\xcf\xd9\x2c\x56\x5f\x67\xd7\x2b\x0e\x1f\xcf\x79\x24\x7f\x4e\x43\xb1\xe2\x72\xbc\x6c\xf6\xf6\x83\x02\x24\xa1\x48\x10\xb2\xb8\x2c\x28\xcb\xc8\x02\xa5\xbc\x2f\x20\xef\x64\x98\x4c\xce\x56\x93\x73\x36\x39\xbb\x9e\x3c\xe7\x93\xd3\xb0\x94\xe9\xef\xc0\xa3\xfd\x04\x7f\x7f\x2f\x73\x6a\xff\xfc\xf7\x38\x35\x49\xea\x49\x28\x59\xb5\x54\xfe\x59\xc9\x3f\x8b\x32\xd3\xd6\x2f\xf3\x6c\xde\x18\x4b\xd2\x8f\x94\x2d\xaf\x5c\x4b\xf6\x7a\x06\x16\xcb\xd8\xc8\x94\x57\xa8\x4a\x4a\xca\x49\x3a\x36\x54\x1c\x5b\x8c\x49\x6a\x2e\xe2\xc9\x4a\x7d\x25\x98\x2c\xf2\xd4\x45\x9e\xba\x30\xa9\x80\x69\x98\xb3\x6e\x69\xfe\xb5\xca\xbf\x16\x1b\x8c\x9d\x6a\x51\xaa\x59\xb5\x14\xf8\xba\x95\x0e\xad\x20\xb4\xd0\xa1\x85\xc5\xc6\x95\x26\xf6\x16\x83\xb4\xd8\xcd\x62\x6d\x2f\x25\x5a\x01\x71\x23\xb3\x59\xad\xdf\x91\xf5\x21\xbe\x6d\xf5\x9d\x68\x3d\x04\x23\xfd\x36\x8c\x61\x14\x3f\x04\x21\x7c\x90\x7b\xfc\xc8\x36\x84\x0e\xd7\xc9\x8a\xa7\x08\x3f\xf2\xfc\x2c\xf3\xfc\x22\xe3\x6f\x7a\x5a\xbf\x07\x1e\x6b\xa7\xdc\xb4\x7c\x4c\xd3\x6a\x8e\xc8\x86\xac\xad\xf5\xa2\x78\x25\x18\x04\x4b\x17\x7a\x4c\x6c\xac\x9e\x89\x01\x02\x74\x48\xee\xf3\x2f\xe5\x5e\xfe\xf2\xa5\x96\xdf\x3a\x12\xac\xda\x1f\xae\x65\xc2\xf5\xb5\x4e\xf8\xc8\x20\xf2\x93\x8c\xfc\xf4\xe9\x61\x69\xaf\x46\x2d\xcb\xfc\x8e\xda\x7f\xae\x97\xcb\x2d\x31\xb3\xbe\x84\x77\x1a\x1f\x99\x75\x37\x89\x1b\xaf\xd1\x46\x8b\x7c\x9c\x03\x49\xd3\xff\x04\x8c\x89\x4b\xd9\x34\x89\x67\x36\xe8\x97\x0f\xe1\x67\x37\x69\x37\x76\x2f\x1f\xc6\xee\x5b\x40\x76\xe0\xf6\x1b\x43\x4e\x08\xf2\x55\xf8\x7c\x02\xa6\x3a\x72\x1b\x86\x61\x22\xce\xb5\xda\x80\x55\xc8\x6b\xab\x3d\x2d\x74\x08\x13\xea\xf3\x49\xf1\xf9\x32\xdf\x60\xaf\xf3\xaf\x4f\xf9\x97\x9c\x00\x39\xb7\x25\x07\x3d\x0f\xc8\xc1\x2e\x52\x64\x47\xfd\x33\xff\x96\x2d\xfe\xa8\x01\x58\x29\x2f\xf3\x14\x90\x0b\xbd\x74\x88\x84\x3f\x26\x77\x4c\xc7\x48\x66\xf0\xd3\xa7\x0a\x8b\x1d\xc5\xe3\xca\x0d\x6c\x4f\x8c\xee\xd8\x98\xfa\x1d\x30\xfd\x73\x83\xd8\x48\x99\x42\x87\x38\x4f\x2a\x8d\x7d\x26\x51\xfa\x6e\x69\x6d\xb9\x51\xfa\x6e\x88\x40\x82\x90\xcf\x7a\xd8\x47\x01\xcc\xb5\xec\xbd\xeb\x0a\x38\xaa\x5e\x89\x02\x81\x8d\x58\x2b\x00\xd3\x7d\x57\x0b\xdb\xa1\x0f\xaa\x11\xcf\x35\xf1\xfc\xbd\x1c\x4c\xc1\x7b\xc6\x18\x13\x31\xba\x2a\x47\xcb\xc8\x9d\xf5\xc8\x5e\xfc\x46\x4d\x1d\x38\x59\xfc\x78\xb5\xc4\x87\xe8\xcb\x72\x74\xb4\x13\x9b\x97\xff\xd3\xad\x2e\xe0\xfe\xdf\x68\xa5\xe6\x8f\x84\x20\x5c\xc0\x65\x86\x6c\x6d\xaa\x56\x5a\x2c\xe8\xbd\x9c\x40\xf1\x2c\xe4\xc1\x7d\x1a\x2e\xd9\x49\x78\x17\x38\xa3\xb3\x64\x16\xde\xd5\x42\x31\xae\xbd\x3e\x73\x48\xcc\xbe\x08\x13\xbf\x4c\x38\x4f\x6e\x4b\x49\x92\x71\x0b\x80\x3d\xac\x8d\x4c\xfc\x22\x4c\x75\x91\x0f\x2c\x15\x8c\xdb\xe0\x64\x9a\x2a\x33\x7a\x1d\xa6\x62\x5c\x2b\x17\x95\x58\x3c\x5b\xa4\x2c\x70\x5e\x3b\x6b\x52\xd6\x0d\x08\xee\x5f\x9f\x9d\x06\xce\x75\xb0\x5c\x06\x69\x5a\x7b\xe2\x90\xd7\x67\x2a\x08\xdf\x81\x33\x1c\x1e\x9c\x9c\x1c\xa8\x2b\xaa\xd7\x10\x1e\x0e\x6b\x27\xa4\x66\x62\x36\xa2\x6a\x79\x51\x48\x92\x88\x90\x5a\x55\x86\x35\xb1\x34\x1c\x02\x47\xab\xa4\xd7\x66\xa1\x60\x0e\xd1\x9a\x27\x81\xf3\x68\xe6\xa8\xb3\x3a\x88\xe8\xde\xaa\x68\xd8\x7e\x02\xa5\x0e\xe0\xc3\xe5\xff\x22\x14\xd1\x67\x76\x16\x2d\x59\x70\x3f\x5f\x89\x15\x67\x81\x13\xc5\xb5\x47\xa9\x43\x6e\xc2\x54\x04\xce\xa3\xb4\x16\x5e\x25\x0e\x49\x03\x27\xac\xcd\xd9\x6d\x4d\xd3\x4a\x87\xa4\xa9\xac\xa5\x08\x2f\x65\x0e\x45\x5d\x1d\xb2\x5c\x42\xa2\x26\xb6\x0e\xb9\x0e\x9c\x30\xae\x29\x8a\x79\x7d\x0d\x69\xd7\x6a\xec\x67\xb2\x18\x1c\x54\x66\x33\x88\x97\xec\x80\x43\x86\x00\x4d\x09\xe5\x87\x43\x05\x0c\x24\x4d\x0e\xb9\x93\x49\xea\xb2\xf1\xee\x0e\x52\x64\x20\x75\xd6\x44\xe5\x08\xde\x31\x62\x49\xa5\x82\x3f\x19\x98\x76\x04\xf7\xb3\xe4\x36\x70\xc9\x2c\xb9\x0b\x7a\x6b\x63\xed\x91\x06\xff\x60\xc4\xe2\x42\x82\x17\x45\x50\x15\xff\xc0\x48\x69\xfb\x0e\x0e\x46\xe1\xcd\xf8\xa2\x35\x58\x0e\x2e\x5a\x83\x83\x68\x4d\x22\x41\xef\xd7\x24\x11\xa5\x4b\x72\xd0\x1e\xc9\xcf\xfe\x83\x0d\xe5\xb6\x42\x01\x60\xe2\x10\xa7\xe9\xe0\xc0\x92\xce\x82\x4e\x89\x56\x6a\x96\x87\x14\x90\x47\x47\x02\x9c\x58\xec\x36\x8d\x33\x46\x7c\x9b\xc6\x7c\x18\x2c\xfe\xa9\x10\xad\x49\x78\x79\xc9\x0b\xe3\xc2\xd6\x81\x22\xd9\x07\x4e\x43\x72\xbb\x02\x09\xbc\x9e\x82\xba\x0f\xc3\xf7\x46\xdd\x14\xaa\xb5\xec\xa8\x84\x2d\x27\x2f\x34\x24\x10\xe2\x34\x41\x02\x0f\xa6\x12\xf7\x60\xa1\xb2\xe1\x81\x10\x94\x07\xff\xb6\x66\xf2\x6b\xc0\xaf\x06\xa6\xce\xca\xe5\x4a\xb2\x8a\x67\xad\xda\x49\x34\xab\xdd\x25\xab\xda\x3c\xe1\x57\x4c\xd4\x44\x02\x9e\x96\x6a\x91\x18\x38\x92\xf2\xe8\x96\x5a\xfa\x1a\x22\xbf\x9a\xd3\x1e\x3b\x84\x11\xb7\x6b\x55\x4f\x68\x26\x58\x9b\xec\x19\xad\x86\x18\x44\x91\xa2\x25\x41\x51\xa6\x2d\x51\x20\x1f\xfe\x84\x1c\xd5\x20\x85\xe0\xdb\xcf\x8c\xf3\x68\x26\x0f\x88\xab\x94\xd5\x94\xb5\x85\x16\xa0\xab\x1c\x48\xf5\xf4\x9b\x70\xc9\x88\x6c\xfa\x3c\xba\xc2\x12\xed\xe9\x75\x18\x5f\xb1\x5a\x18\xd7\xd8\x97\x28\x15\x51\x7c\x55\xd3\xdb\xa8\x81\x62\xd7\x53\x09\x25\xbd\x06\x87\x34\x49\xbc\xb8\xab\x5d\xb2\xda\x2a\x65\x33\xd9\x2f\x35\xf0\x03\x25\x01\x86\x60\x8a\xae\x8a\xd6\x4e\x19\xab\x5d\x0b\x71\x13\x1c\x1c\xa8\x0a\xfe\x4c\x5b\xd3\x64\x79\x70\xb5\x8a\x66\x2c\x3d\xf8\xff\x1d\x68\x05\xf0\xf4\x40\x55\xdc\xd4\x53\x04\x40\x2e\x13\xce\x6a\x51\x3c\x4f\x5a\xe0\x3b\x06\xfa\xa2\x35\x51\x88\xe4\x57\x1d\x5a\xa1\xb6\xa5\x3c\xbc\x28\xc4\x71\x1e\x1f\x89\x51\x39\x69\x8c\xe3\x8a\xc8\x12\xd4\x62\xd8\x10\xa7\xa9\x40\x1b\xb0\xf3\x9b\x93\x64\x0b\x4c\x96\xa1\xed\x48\xb0\x77\xdf\x8e\x56\xc7\xc1\xfb\x38\x5c\xb2\x80\x11\x55\x7d\x20\xd6\xca\x04\x69\x2f\x96\x1c\x8e\x8a\x2c\xad\x0c\x38\xa9\x3c\x45\x43\x04\x26\x38\x12\xac\x5c\xa4\xf0\xd3\x9a\x27\xfc\x59\x38\xbd\x2e\x39\xf1\x92\x33\xb1\x25\xeb\x20\xac\xa5\x47\x70\x0d\x6b\x8f\x61\xb2\xb1\xd4\xa6\xa2\x2c\x13\xaf\xd7\x73\x6b\x13\xeb\x53\x4d\x75\xd0\xb4\xd9\x88\xc3\x64\xbf\xb8\xbc\x05\x10\xfb\x60\x28\x25\xbb\x53\x50\xa0\x31\xc5\xdd\x2e\xe8\xe9\xac\x37\x95\x07\x6c\x43\x25\x73\xd8\xa7\xee\xcf\x49\xa1\xa6\xa3\x32\x08\x8a\x22\x2a\x09\xde\x28\x19\x63\x23\x6f\x68\x3a\x18\x1b\x0b\x0a\x2e\x87\x4e\x65\x68\x78\x63\x8c\x07\xdc\xca\x05\x3a\xd8\x3f\xbb\xc7\xe2\x67\xb5\x42\x25\x6e\x91\x25\x18\xd5\x67\x3f\x09\xcf\x20\x1c\xcb\xe6\xf0\xc2\x89\xd5\x2f\x54\xd4\xeb\xcf\x50\xa4\xdc\x14\xfc\x42\x45\xd3\xc3\x97\x9c\x85\x9f\xf6\x44\xb3\xb9\x4e\x1a\x8d\x5c\x7b\x5e\xac\x4b\xea\xe5\x73\x61\xab\x47\xcb\x9e\xcb\xaf\xdf\xea\xf5\xa6\x4f\x29\x58\xf4\xe5\xd6\x77\xa0\x5e\xcc\x47\x4b\x36\x3e\x76\xb3\xcc\xf3\x8e\xe1\x7b\xb0\x64\x01\x1f\x7d\x66\xe3\x63\x2f\xcb\xe0\xe3\x97\xa7\x0c\xf1\xd1\x0d\x1b\x13\xc8\x80\x07\x9f\x65\x8e\x3b\x55\xcc\xef\x1c\xc3\xb7\xfc\xa2\x94\xc2\x77\xbd\x8e\xdc\x7d\xf9\x7d\x25\xe3\xd5\xe7\x65\xf1\x39\x91\x30\xee\x24\x8c\x2b\x05\xa3\x7b\x74\x0c\xdf\x83\x2b\x19\x79\x69\x45\x5e\xb2\xf1\xe0\x52\x46\x4e\x54\xe4\xd1\x91\x8c\x9d\xb0\xf1\x60\xc2\x82\xa6\x47\xa0\x3d\x13\xd3\xa0\x13\x23\x83\x97\x2d\x3b\xbe\x61\x59\xf6\x99\x1d\x0b\xa5\x46\xfd\x19\x98\x71\x3b\xb7\x64\x95\xd2\x7a\xbd\xe9\x29\x55\x0c\x24\xe8\x6d\x65\x1e\xb0\x3b\xb4\x72\x3d\x33\xb9\x4c\x26\x2a\x4a\xd7\x91\xd7\x22\x3f\x4f\x94\xaf\x24\x99\xd1\xcf\x1f\x88\xc0\xa2\xe7\x33\x6b\xd4\xb4\x04\x0a\xc4\x4f\xfa\xe2\x76\xa2\xcd\x31\x57\x64\x01\xc2\x9d\x15\x65\x64\x51\x5c\xda\xf0\x56\x9c\xdc\x22\x8c\x49\x44\x57\xad\xc9\x2a\x65\xef\xcf\x9e\x0e\x46\x8b\xad\x3b\x20\x62\xa2\x86\x5a\x43\x64\x91\xdf\xc9\x08\xd0\x4f\x57\x65\x36\x0b\x94\x72\xeb\xac\x84\xb5\x26\xb7\xca\x0a\x0a\xac\x46\x43\x39\x49\x4a\xe1\xa5\x0c\xef\xd0\xe6\x55\xed\x23\xab\xbd\x9c\x8c\xc2\x6d\xf2\xe4\x16\xb7\x5e\xbc\x30\x46\x56\xa2\x75\x5e\x7c\x3e\xc3\x09\xf5\x48\x48\x3b\x84\xd3\x6b\x49\x31\x5f\xbc\x20\x50\x8d\x9c\x92\xef\x19\xfa\x24\x10\x26\x1e\xe9\x60\xb8\x0e\x91\xc4\x1c\x72\x9d\x13\x0f\x13\x84\x22\x15\x7a\x46\x3c\x8c\xe5\x94\xee\x1f\x47\x72\x46\xac\xe8\xbe\xab\xae\xb4\xef\x13\x9b\xd8\x48\x76\xa9\x35\x4b\x6e\x49\x58\x11\x7b\xa7\x1c\x21\x52\x53\x69\x42\x42\xbc\xa7\x91\xba\xba\x2a\x90\x5a\x94\x31\xb9\x25\x0b\x10\xf1\x19\x0b\x50\xd1\x9a\x0d\x24\x62\xa2\x35\xc3\x72\x56\xf7\x2c\x94\xcc\x1c\x69\xb1\x01\xe4\x60\x8d\x84\x20\xd1\x62\x2a\x9f\x68\xb1\x3c\x27\x0e\x22\x9a\xac\x63\xd9\xa6\xf8\x97\x73\x86\x38\xa0\x33\xa8\x98\xe4\x74\xdf\xd5\x60\x57\x15\xc9\xb3\xf0\x4e\x66\x40\x29\xfd\x55\x02\xd1\x43\x84\xf3\xd6\x50\xa5\x7b\x07\xd7\xf3\x66\x81\xd1\xb4\xb8\xf0\xc2\x6b\x30\x13\xce\x2d\xf6\xac\x45\x18\xca\xf6\xe7\xbd\x12\xc9\xbf\x98\x20\x3b\xd3\x2f\x5f\x18\x0a\x71\x96\x81\x6d\xbe\x15\x2f\x5b\xb9\x63\x71\x53\x38\x60\xd1\xaf\x0c\x85\xc4\x2d\x61\xa5\x71\x5e\xca\x9d\x6c\x63\xb6\x9b\x69\x9a\x27\xa8\xb9\x6c\x64\xa0\xed\xd2\xf4\x15\x63\x50\x1d\xd2\xdf\x14\x44\xa3\xd1\x48\x28\x31\x70\x2e\x31\x2d\x25\x97\x4a\x0f\x24\xa9\x15\x03\x2f\x70\x03\x1d\xb3\x07\xc4\x11\x02\x40\x1f\x5d\x13\xba\x2a\x85\x2e\x4b\xa1\x09\x50\x52\xd6\x9a\xe8\x73\x22\xdd\x77\x89\x01\x41\x5d\xa5\x2f\x41\x65\xba\x5e\xf5\x5f\x6d\xab\x5c\x62\x2d\x37\xb5\xfe\xd2\x42\x09\x33\xbf\x90\x1e\xa0\xb4\x20\x25\xfa\xaa\xd9\x2a\x57\x5c\x2a\xa7\x65\xe2\x80\xeb\x75\xb0\xf7\xb1\xae\x93\x71\x60\x83\x2a\x83\x49\xd7\xd8\xbe\x54\x4e\x31\x81\x35\xa7\xf1\x36\x16\x9e\xe6\x82\x38\x30\x11\x10\x2a\x66\x96\xf8\xba\x04\x5e\x61\xa6\xef\xb2\x87\x5a\xf8\x65\x95\x37\x51\xb8\xc9\xb4\xfd\x6c\xd1\x7d\xaa\x2f\x43\x2d\x13\xc2\x9a\x8a\x59\x0e\xec\x26\xb7\xad\x19\x54\x70\xdb\x9a\xed\x53\x9a\x98\x29\xb8\x61\x70\x0e\x66\x63\x4a\xfb\x56\xd0\x83\x7f\x5d\xa4\x8f\x11\x1a\x04\x4a\x8b\xfc\xbe\xb7\xce\x40\xdf\x1d\x37\xd1\x20\xb8\x98\x5d\xcc\x9a\xf2\x4f\x76\xae\x3f\xd5\x47\xa6\x74\xdb\xe1\x07\x63\x34\x08\xd0\x59\x56\xc3\xc8\x28\xa1\x6f\xfc\x8e\x5a\x64\x7c\x31\x6b\xe0\x01\xfc\x47\xa3\x8b\xc6\xc5\x96\xc2\x7a\x76\x91\x3e\xfe\x28\xd3\x7f\x3a\x20\xcb\x07\xb0\xd2\x48\x15\x38\x7d\x1f\x4a\xe5\x9f\x1f\x45\xe8\xb3\xd8\xa5\x66\x4f\xee\x04\x1d\x19\xa5\xdc\xe6\x70\xd8\x3c\x39\x71\xc8\x41\x8e\x74\x33\xef\xc0\x83\xb1\xd6\xdd\xcd\x33\x41\x7b\x36\x32\xbc\x78\xf1\xe2\x45\x73\x74\x3e\x3e\x3f\x6f\x3e\xcb\xb3\x98\xae\xdf\xc8\x51\x4e\x3f\x20\xfb\x5e\x5e\xc5\x49\xa9\x82\xfb\xf6\xda\xae\xbd\x54\xb5\x5d\xec\xc3\x87\xe1\xd0\x46\xdf\x73\x8b\x72\x3a\xe5\x62\x76\x7f\xb8\xce\xf1\x00\x34\x72\x3c\xcf\x8b\x9a\xf2\x44\x3b\xcd\x5f\xdb\x95\xe5\x28\xf6\xd7\x07\xe3\x31\xb9\x82\x6e\x7c\xf9\x52\x89\x6f\x5a\xa7\xa7\xa7\xa7\x90\x7c\x31\x0b\xf2\x3f\x17\xad\x8b\x59\x03\xe0\x9b\x7c\xa4\x32\x1f\xd9\xcc\xb6\x95\xa3\x48\xb5\x93\x74\xec\x72\x59\x46\x20\xff\x6f\x55\x2f\xf3\x90\x8a\x3c\xa4\x9c\x65\x23\x35\x4f\xb1\xe2\x75\x9c\x8e\x91\x5d\x71\x09\xb3\xff\x60\x20\xc9\xd0\x05\x42\x17\xcd\x81\x9c\xaa\x07\x51\x21\xcb\x98\x88\x4a\x8e\x04\xec\xb9\xc9\x8a\xde\x88\x16\xfb\xc2\xa6\x28\xc5\x59\xb6\xcc\xbf\x25\xb7\xb2\x52\xe7\x03\xa0\x09\x51\x9a\x80\xcf\x04\x30\x45\xba\x13\x9b\xb6\x48\xd1\x1c\xdd\x89\x91\x18\x8f\xbc\xb1\x82\xb0\x1a\xc9\x93\xc2\x7d\x44\x55\xb4\x3b\x06\x33\xd8\x7d\xaa\xc3\xfe\x78\x0f\x38\xfc\x75\x7e\x3a\x8c\xb0\xe5\xba\x06\x59\x6e\x20\xf6\x3d\x85\xcc\xa8\x3d\x36\xe7\x15\x89\xc3\x55\x15\x0e\x57\x1b\x38\xb4\x25\x0e\x09\x45\xab\x91\x3f\xce\x32\xa7\xe6\xe0\xc6\x95\xc6\x67\xb3\xfe\xe4\x81\xfa\xd7\x70\xfc\x32\x76\xf0\x0f\xe5\x54\x98\x76\xc6\x70\x16\xda\xff\x2c\x0c\x22\x9d\x31\x7e\xa8\x54\x48\x9d\x8f\xce\x1a\x3c\x2b\x44\x0d\x94\x64\x99\xe3\xe0\x06\x0a\xe1\x97\x9c\x8a\x5c\x79\xa9\x54\x0c\x48\xf2\xad\x1c\x7e\x49\xbe\x86\x49\x9c\x9d\xad\x58\x76\xce\x66\xd9\xd9\xf5\x2a\x7b\xce\xa3\xec\x34\x14\xd9\xe9\x2a\xc6\x64\x70\x91\xe2\x01\xd2\x92\x43\x7c\x91\xa2\xdf\xc2\x38\x7b\xce\x2e\xb3\x61\xc8\xb3\x27\x37\x3c\x1b\x86\x77\xd9\x6f\xab\x38\xfb\x6d\xb5\xc8\x9e\xac\xae\xb2\x53\x76\x93\xbd\x9d\x8a\xec\x4d\xf2\x39\x3b\x61\x53\x59\x44\xae\x49\xd2\x59\xab\xcf\x8b\x19\x0e\xd4\x8f\x24\x6f\xea\x0b\x0f\x2e\x52\x89\xc9\xfb\xb3\xec\xc5\xf0\x2c\x1b\x3d\x7b\x3a\x7c\x37\x1e\x9d\x9e\x8c\xcf\x70\x86\x46\x1f\xbf\x8e\xe5\x8f\xa2\x15\x9d\x35\xc6\x3f\x1d\x00\x73\xf9\x4c\xd0\xfb\xf7\x67\x81\x4b\x5e\x0c\xe5\xdf\x67\x27\x67\x41\xd3\xef\xb8\xe4\xd9\xe9\x59\xd0\x6c\xbb\x2e\x79\x7a\x62\x3e\x20\xa6\xe7\x92\xe1\x89\xf9\x90\x31\x1d\xdf\x25\xef\x4e\xcc\x07\xc4\x1c\xba\x96\x28\xef\xcb\xe6\xf4\xa7\xb7\x7a\x58\x64\x6f\x5a\xa6\x3b\x68\xf4\x2f\x3c\x7e\x7c\x81\xb3\xd1\x45\x7c\x21\xc0\x8a\xa6\x66\xdb\xf6\xa0\x8b\xf4\x22\x6d\xe0\xad\xf8\x7f\xc9\xf8\xc7\x07\x1b\x86\x40\x32\xee\xa7\x03\xa5\x72\x18\xcd\x91\x51\xf3\xa2\x55\x1c\x8b\x71\xcc\x3b\xda\x3a\x42\x6c\xd8\x23\xe4\x2a\x69\xc7\xb4\x73\x34\xf0\x59\xbb\x21\x02\x01\x26\x26\x60\x72\x20\x43\xc0\x9c\xfe\x99\xeb\x8e\x23\x81\x49\x0e\x83\x4b\x18\x45\x30\x2e\x07\x23\x19\x2c\xec\xf4\xea\x75\x7d\x2d\x9f\x67\x48\x64\x06\x4c\xc2\x35\x8a\x46\x1d\xc9\xde\xb6\xe5\x1f\x5f\xfe\xe9\xca\x3f\x3d\xf9\xa7\x3f\x86\xf6\x72\x9a\x90\x98\x32\x82\x04\x8d\x24\x29\xa8\xd7\x3f\xd8\x38\xed\x53\xeb\x44\x27\xa9\x03\x1f\x79\xf2\x8f\x3f\xc6\x39\x23\x04\xec\x48\x5c\xc5\x8e\x90\x7d\x14\x97\x16\x90\x59\x5c\x7b\x92\xe1\xa1\x09\xd1\x3e\x45\x36\x6f\x48\xa2\x39\xca\x85\x2a\xcf\x84\x76\x6f\x98\x0b\x13\x5d\xed\xcf\x7b\xa3\xbb\x22\x1a\x3f\xf2\x5c\xe3\x35\x01\xc5\xcd\x08\x1f\x78\xae\xfb\xb8\xe7\x36\x22\xd9\x13\x87\xb2\xd5\x47\xf2\x8f\xe7\x8e\x35\x93\xfa\xb5\xe4\x5e\x4c\x22\xa5\x12\x7e\x84\x91\x03\xb2\xab\x1d\x1c\xd1\x7d\xb7\x8a\x00\x14\xc6\x4b\x42\x7b\x36\x92\x24\x64\x9f\x52\xde\x7a\x75\xfa\x76\x72\xd8\x73\x3d\x6c\x47\xfe\xf1\xfc\xe9\x44\x82\xc3\xf7\xd0\x4f\xa3\xb1\xaa\x04\xdc\x11\xd1\x7d\xd5\x7e\x61\x9f\x59\xc9\x94\xcc\xa9\xe3\x34\x60\xab\x98\xd1\xb9\x91\x08\xdd\x68\x5f\x19\x11\xfd\x0b\xa0\x93\xfc\xe8\x88\x73\xd3\xd5\x2c\x1b\x8d\xf5\x69\x23\xb2\x7d\xc0\x26\x70\xb4\x20\x28\xa6\x68\xae\x33\x2f\x18\x4a\x08\xc3\x50\x04\x8f\x5c\x30\xc9\x77\x8f\x51\x48\xe7\xc5\x65\xd5\x3c\x9f\x3d\x31\xce\x45\x53\xf5\x3a\x34\xc0\x72\x4e\x65\x1c\x4c\x93\xb9\x2c\x0c\x52\x28\xbb\x64\x23\x77\x71\x4d\x6e\x1a\x85\xbf\x6b\xf2\xeb\x28\x19\x0f\x50\x3c\xb0\xfb\xc3\x0b\x2c\xe0\xda\xdb\x91\xd1\x49\x49\x69\x42\xa6\xb9\x5c\x19\xad\x68\x8c\xeb\xf5\x05\x9a\x33\x92\xe2\x7a\x7d\xce\x46\xe9\x18\xad\xc8\xb4\x35\x09\xc9\x94\xa4\xca\x1c\xc5\xf8\x57\x92\x3b\xc9\x4e\xc8\x7b\x90\x52\x72\xbb\x44\x67\xcd\x1b\xe2\x1e\xcf\xbf\xd1\xe6\x39\xce\x0f\x4b\xc7\xd4\xf3\xeb\xf5\x7d\xd7\x08\xc0\xf4\xcd\xa4\x3c\x02\x15\x47\x32\x64\x27\xe9\xf7\x05\xf4\xac\xdb\xf0\x7b\x05\xa7\x33\x23\xd2\xd3\x59\x8a\xdb\xe1\xe2\xa6\xb8\x38\xac\x55\x5e\x4d\xee\x95\x1c\x8f\xf1\x81\x08\xcc\x49\xc7\x00\x90\x98\x0c\xca\x41\x50\x7e\x0f\x72\xff\x38\x51\xfa\x6e\x58\xaf\x23\x14\xeb\x6f\xe5\x2b\x40\x1c\xcb\xf6\x22\xd1\xa0\x9e\x8f\x49\x9c\x65\x9e\xbf\x4f\xa9\xc8\x32\xc9\x2b\x60\x50\xf0\x28\x9c\xfd\xe4\x58\x12\x0b\x75\x4c\x40\x2a\x45\xe6\xc5\x5e\x0b\xfb\x86\x12\x8c\x03\x07\x55\xac\xb6\xb7\xd6\x8e\xb2\x20\x73\xb2\x24\x77\x8a\x99\x9a\xc8\x9f\xb9\xf5\x6e\x83\x76\x2f\x94\x7f\x65\xd9\x14\xe4\x03\x0b\x75\xca\xa3\x94\xde\x19\x97\xe2\x94\xd2\x49\xbd\xee\x38\x32\x6e\x70\x83\xee\x2d\x2f\x6a\xee\x1a\x07\xdb\x96\x0b\xfa\x7c\x17\xd1\x3b\x4b\x70\x73\xc3\x19\x0c\x1e\xba\xc3\x98\x5c\xa2\x3b\x0c\x7e\x60\xaf\xd0\x5c\xc8\x98\x00\xa5\x32\x0a\x48\xd4\x5d\x10\xa3\x09\x1e\xec\x14\x5a\xed\x69\x9f\xf0\xb2\x45\x66\x99\xe8\x86\x29\x86\xd0\xf6\x39\xa6\x4f\xea\x1b\xfe\x88\x34\x89\x70\x7f\x8e\x8e\x2d\x28\xe0\x89\x3e\xa1\x92\x97\xfc\xac\xfc\x81\x14\x27\x5e\x75\x40\x96\x43\x69\xbe\x8b\x58\x4c\x84\xe4\x8f\x24\xa4\x51\x34\x96\x5c\x91\xc0\x64\xa6\x4c\x53\x93\x06\x78\x78\x2a\xaf\x1b\x92\x34\xa8\xe7\x3e\x56\xee\xbf\xb6\x5d\x96\x11\x48\x48\xa7\x09\x67\x34\x21\x9a\x0b\x8c\xb3\x2c\x39\x8e\x95\xb5\x6b\x42\x38\x15\x18\xef\x4d\x11\x23\x3c\xcb\x60\x12\xe1\x60\x32\x00\x62\x1b\x24\x68\x01\x82\x3c\xdc\x9a\x44\x78\x20\x4a\x8d\x37\x32\xca\x20\x45\x8b\xcd\xb4\x85\x71\xe4\x27\xd3\xb7\x06\x75\x31\x40\x73\x2a\xcc\xe4\x40\x4b\x7a\xa9\x79\x95\xb9\xac\x06\x0f\xd0\x44\xc8\x85\x0e\x1e\x85\xe6\xf9\x5e\x50\xaf\x23\x7d\x13\x56\xc4\x91\x2f\xdf\x9d\x93\xeb\x67\x47\x9e\xf3\x64\x09\x53\xee\xb9\xf6\xe9\x8e\xe6\x18\x63\x1c\xcc\x4b\x0d\x68\x2c\x81\xb5\x0f\x62\xd9\x36\x39\x50\x21\x5d\xa1\x45\x41\x1e\x2a\x74\x6e\xb7\x8c\x2a\x67\x60\x66\x13\x44\x12\x84\x9d\xbf\x2c\x01\x16\xf4\x04\x66\x38\x56\xdb\xfa\x0a\x8d\x84\x92\xcc\x69\xc3\x2b\x22\x5a\xb3\xf0\x2e\xcb\x04\x18\xd8\x10\x01\xca\x42\x32\x11\xf6\x52\x22\xb4\x66\x10\xc4\x2c\x16\x91\x0a\x8d\xab\x10\x64\xf5\x7a\x15\x8e\x0c\x83\xb3\x82\x20\xac\x18\x46\x1c\xec\xee\x36\x98\x98\xc6\xc5\xd8\x0c\x64\x65\x18\x1c\x57\xe7\x24\x24\x77\xd3\x58\x48\xab\xc8\x8a\xde\x1b\xef\xd8\xfb\x70\x71\x50\xaf\xc3\x89\x89\x67\x19\x4a\x28\x27\x05\x91\x46\x11\x62\xb8\x2c\x70\x8e\xe6\x48\xbb\x8f\xb9\x62\xc2\x72\x60\xf9\x26\x5c\xb2\x34\xe7\x70\x0a\xef\x3d\x15\xb9\xe4\xaa\xd6\x3e\x51\x2c\x23\x43\xe5\x9f\x05\xb8\x88\x8d\x57\x53\x0a\xaf\x75\x5e\x8e\xf6\x1a\x9a\x1d\x03\x7a\xae\x65\xc5\x0b\xce\x2c\x73\xfc\x57\xdb\x8e\xe8\xf6\x5d\x92\x8b\xf3\xe9\xca\x78\x7d\x0b\x65\xe4\x82\x72\x28\x41\x99\xfc\x91\xcb\x63\x95\xfb\x94\x4b\x88\x16\xe8\x01\x89\x7b\x2b\xd0\x4a\xce\x58\x5b\x04\x96\xb6\xc2\xd9\x0c\x79\x4a\x3b\x3b\x2d\x64\x8b\x06\x97\xb4\x18\x94\x4f\xe2\x41\x77\x9a\x1e\x5e\xef\x1c\x72\x7a\x8a\x94\xe3\xce\xda\x0d\x4f\x3e\x47\x33\x36\xab\x45\x29\x5c\x7a\x47\x71\x2d\xac\x71\x36\x4d\xae\xe2\xe8\x2b\x9b\xd5\xfe\x78\xfe\x54\xb2\x60\xb5\x84\xd7\x5e\x9d\xbe\xad\xcd\x81\x7e\x9a\x0b\x63\xb8\x58\x17\x7c\xa5\xaf\xb7\xc2\xc5\x22\xad\x49\xf0\x35\x91\xd4\xfe\x4c\xd5\xcc\xc3\xa4\x76\x7b\x1d\x4d\xaf\x4d\x05\x9c\x2d\xa2\xf0\x72\xc1\x6a\xe1\x94\x27\x69\x5a\x0b\x17\x8b\xda\x25\x4f\x6e\x53\xc6\xd3\x5a\x18\xcf\x6a\x9f\x19\x4f\xa3\x24\x4e\x5b\xb5\x37\x49\x6c\xea\x3f\x90\x95\xcb\x65\xa3\x31\x48\x6b\x21\x67\xb5\x59\x94\x4e\x93\x15\x0f\xaf\xd8\x0c\x8a\xde\x46\x12\x18\xab\x71\xb6\x4c\x3e\xcb\x36\xc5\xb5\x30\xae\xad\x6e\xa6\xc9\x32\x8a\xaf\x6a\xcb\xf0\xcf\x84\x4b\x04\x58\x98\xb2\x56\xed\x1d\xfc\xd6\x38\x9b\x33\x2e\x31\xfe\xbe\xab\xea\x3f\xd3\xa6\xc4\x63\xeb\x92\xba\xb4\x4e\xcb\x9b\x8b\x24\x0a\x0d\x4b\x10\xec\xd4\x8c\xd1\x9c\xb2\xd8\x36\xcc\xaf\xed\xee\x65\x4d\x0a\xfe\xb7\x14\x0f\x93\xfd\x4c\xc8\x11\x54\x98\x22\x2c\x29\x88\xec\x5e\xe3\xb6\x89\xcd\x48\xcd\xd2\x0d\x58\x86\x5f\x8c\x3b\xf7\xd6\x77\x36\x72\x19\xc5\xcd\x65\xf8\xe5\xc0\xd9\xf6\x1a\xf0\x49\x54\xdb\x1f\x95\xde\xcd\xb0\xcc\xab\x4b\x26\xdb\x60\xfe\x3b\x90\x7f\x02\x16\xdc\x80\xf3\x9c\xe1\x46\x53\x24\xb2\xbb\x9b\x22\x1b\xfa\xff\x44\x53\x64\xda\x31\x2b\x35\xa5\x38\xc3\x3f\xb5\x15\x57\x94\x93\x4b\xb8\x9f\xcc\x59\xe2\x18\x09\x7d\x6e\x10\x14\xbe\x48\xfe\x58\x92\x21\x7e\x9f\x04\xd2\xee\xc0\x20\x07\x89\xa8\xf7\x73\x54\x3c\xf4\xd0\x68\x44\x58\x8c\xa2\x71\xc9\x92\x5d\x46\x8c\xd8\x18\x71\xed\x6f\x7f\x14\x8d\x2d\x37\x5b\x60\x4c\x2b\xe8\xc8\x78\x52\xf8\x6b\x15\x72\xc1\x38\x3c\xf4\xa4\xcc\x93\xb5\x55\x8f\xb2\xfc\xd0\xfa\xa7\x46\xc9\xca\x51\xfb\x11\xc4\xe4\xbb\x93\xfd\x36\xd4\x3b\x4b\x91\xe8\x04\x94\x32\xa9\xda\xff\xb2\xcc\x05\x2f\xb5\xba\x3e\x19\x8c\xa8\xde\x13\x65\x20\xa1\xca\x0e\x43\xee\x8c\xda\x96\x44\x46\x87\x54\xef\x97\x2e\x49\xa9\xda\x2c\xe5\xf7\x8a\x9a\x1d\x53\x86\x16\xd4\x6c\x9b\x32\x34\xa5\xa5\xbd\x33\xcb\x5c\xad\x0d\x6f\x0e\xa1\x95\xca\x06\xf9\x96\x01\x97\xc8\x6f\xb5\xa1\xdf\x1f\x82\x08\x9c\x3b\x95\x1c\x89\x71\xbd\xae\x2d\xed\x47\x62\x6c\x6d\x25\xc5\x6b\x47\xfb\x9e\xf6\xa1\xfa\x87\x35\x4a\x31\xec\x45\xa3\x3f\xc4\x28\x1e\x2b\x31\x1b\x2f\xca\xc2\x26\xfe\x7c\x91\x80\xb2\x82\xce\x02\x7e\x1a\xf3\x10\xb8\x91\xdc\x77\xcd\x93\x22\x72\xc7\x12\xb9\x31\x64\xd1\xd2\x94\x36\xa6\x0d\x8f\xb5\x1f\x2f\x1a\x3d\xd6\x79\xbc\x82\xef\xf4\x71\x4f\x1e\xfb\x8d\xf7\xce\xf0\x2e\xa5\x8d\xb0\xd1\x7f\x9c\x94\x8c\x29\x69\x23\x6a\xb4\x1f\xc7\x0d\xcf\x7f\xcc\xf3\xac\x22\xa4\xf7\xfa\x3d\x2e\x73\x28\x98\xe6\x4f\xcf\x4c\x2e\x57\x97\x97\x8b\x92\xbf\xa3\x3f\xc5\x2e\xef\x7c\xef\x2c\x73\xc4\x13\xb1\xe1\x76\xb3\xe9\x3d\x06\x2b\x3d\x9e\xac\xe2\x19\x6a\x7a\x8f\x19\x0e\xac\x08\xfb\x10\xf3\x46\xec\xd4\xa6\xb7\xbc\x99\xac\xc4\x54\x1b\x11\xcb\xe9\xe7\x34\x9c\xe2\x4e\xcd\x85\x2d\xbd\xc9\x64\x7c\xd3\xc1\x84\x37\x5e\xa3\xff\xfe\x6f\xc4\x0e\x7a\x2e\x68\x67\x0b\x08\xb3\x47\x3d\x17\xf4\xb2\xd7\x6f\x04\x72\x3e\x3a\xc4\x09\x1c\x4c\xe0\xfb\x23\xf8\xce\x01\xed\xe7\x8f\x0e\x49\xb4\xbf\x91\x8f\xfa\x1b\x34\x8e\x65\x96\x8f\x1f\xab\x35\x97\x35\xaf\x00\x7e\x4e\x41\xda\xf3\x5a\xa0\x84\x91\xdc\x8e\xe7\x95\xa0\x07\xfa\xae\x46\xdd\xf2\x1c\x5c\x59\x42\xf1\xd7\x36\x45\xa1\x48\x80\xa8\x55\x8b\x23\x18\xde\x2b\x74\xcd\x38\xb6\x8e\xad\x5a\x42\x84\x10\x1f\xf1\xfc\x1d\xbb\x31\x88\x2d\x1a\x45\xf9\x57\x72\x9e\x8f\x9c\x26\xa8\xb6\x4b\x42\xd3\x73\x1f\xc7\x23\x6f\xdc\xb8\x45\xf1\xc8\x2f\x28\x88\x64\x90\xa2\x81\x1b\x38\x0d\x78\xac\x65\xe4\x8e\x07\x51\xd0\xb4\x5e\x07\x7b\x6e\x21\x19\x93\xa8\x78\x3a\x45\xdb\x8a\x23\xf0\x55\xbd\x48\x62\xa6\x9e\xa0\xbb\x04\xee\x4b\x32\x72\x03\x56\x1c\x33\x02\xc9\xd7\x60\xeb\xd8\xd1\x8c\x8b\x00\x89\xb5\x58\x0a\xdc\xcd\x42\x20\x4f\x6b\x44\x5b\xa6\xe4\xc0\x06\x91\xd8\xc0\x84\xa9\x6c\xcf\xdb\xaf\xf6\x8c\xf4\xba\x8f\x9b\xf6\xec\xb3\x1c\xdb\x7e\x4d\x62\x03\x12\x1f\x78\x5d\x0b\xc2\x4b\x91\xdb\x00\xec\xef\x6f\x6e\x18\x86\xf8\xc0\x21\xd1\x35\x4f\xfc\x68\xb7\xbf\xeb\x32\xae\xdb\x9b\xfc\xaf\x20\x2b\xbf\x68\x66\x17\x0d\x3c\x40\x83\x00\x5d\xcc\x1e\xe3\x51\xab\x36\x06\xd9\x78\x03\x5f\x04\xf0\x83\x06\x81\xf9\xba\x68\xc9\x2c\xea\x56\xef\x3d\x94\x56\x85\xdf\xc9\xd2\xa3\x66\x63\x3c\x18\xb9\xcd\x23\xd2\x1a\x3f\xc6\x1f\x14\xc8\x72\xe4\xb0\x2a\xf2\xbc\x2a\xf2\x04\x22\xcf\xb6\x13\x5e\x7e\x37\xdc\x53\x85\x68\x31\xc7\xcf\xc5\x86\x73\x68\x02\xe6\xc0\x4a\x2b\x55\x8f\x11\x10\x9a\x41\x42\xef\x97\x69\xc0\xca\x24\x90\xcc\x02\xa5\x6c\x90\x92\x21\xa4\x01\x79\x5b\x07\xa1\xb6\x34\x96\x04\x6d\x00\x16\xef\x2c\x48\x5a\x25\xe2\xc9\x30\xa8\x57\x18\x39\xbb\x3c\xb8\x02\x95\xa0\x94\xa6\x23\x6f\x3c\x68\x7a\x81\x47\x12\x7a\x7f\x17\xb8\x64\x16\xdc\xa2\x74\xf4\x99\x8d\xf1\x63\x4e\xae\x21\x70\xa7\x02\x4b\x08\x5c\xa9\x40\x0a\x81\x4b\x9d\x22\x43\x27\x02\x01\x55\x06\xfd\x2a\xfc\x98\xaf\xa1\xd2\xf7\xdf\x51\xe9\x5f\x02\xa5\x23\x7f\x4c\x38\x26\x43\x15\x68\x43\xe0\x56\x05\x3a\x10\x98\xa9\x40\x17\x02\xd7\x2a\xd0\x83\xc0\x52\x05\xfa\x10\x48\x55\xe0\x50\x06\xd6\x4a\x9b\x85\xd2\x44\xf6\xe8\x3a\xd8\x72\x71\x9b\xd4\xeb\xc8\x99\xf3\x64\xe9\x44\x71\x2d\xc9\x32\x47\x24\xf0\x85\xcb\x4e\x11\x2b\x94\x74\x4b\xab\xa0\xec\x64\xf0\xb9\x00\x2f\x7b\x44\xe6\xf9\x95\xcd\x13\xce\x90\xc0\x03\x4e\xff\xa1\x86\x3f\x40\x08\xbe\xe1\xe9\xa4\xf2\x30\x35\x79\x29\x4c\xb8\xf6\x97\x00\x09\xf0\x85\x09\xc7\xc1\xbd\x9d\x29\x70\x8d\xa2\xb6\xbb\x5e\xa3\x4f\x02\x25\x2d\xd9\x20\x4c\xe0\x53\x24\x18\x13\x98\x1b\xb8\xb5\x4c\x69\x54\x86\x9f\xb4\x86\x32\x4a\x43\x8e\x81\xa1\x7f\x27\x50\x82\x09\x4c\xc3\x7a\x1d\x9e\xd8\xd1\x1b\x24\x3c\x80\x10\x6f\xcb\xd0\x30\xb1\x1c\x8a\xfd\x55\x22\xe3\xe6\x18\xaf\x39\x80\x42\x4d\x9b\x38\xc4\x69\x39\xb9\x49\x3f\x32\x1e\x8a\x06\x6e\xc0\xf1\x63\x6b\x47\xfd\x47\x09\x5e\x7e\x1e\xaf\xe5\x3d\x23\x8c\x4f\x9c\x26\x2b\xbc\xe3\xf8\x8f\x91\x30\x46\xee\xb9\x7b\x23\xc2\x0c\x69\x86\x13\xa8\x81\x00\x3e\x6b\x5a\x51\xfa\x64\x2e\x18\x07\xe9\x55\x33\xef\x6d\x52\x1e\x0f\xda\x10\xcd\xc6\x03\x50\x6c\x47\xd8\x1f\x44\xb5\x07\xa9\xc2\xb0\xb6\x2c\x7e\xa5\xb1\x71\x6f\xd4\x88\x25\x73\xfb\x09\x09\x52\x1c\x1a\xe0\xe5\x4b\x74\xc3\x78\x94\xcc\x48\x4d\x3d\x16\x82\xcb\xc7\x88\xfc\xb8\x57\x9c\x26\xf2\x82\xaa\x00\xa9\x29\x00\xb8\xf5\x03\x8a\xcb\xe1\x6c\xd6\x8c\xe2\xcf\x8c\x0b\x36\x6b\xde\x84\x3c\x5c\x56\x68\x2f\x47\x20\x0d\x89\x49\x4c\x23\x4c\x5e\x68\xeb\xef\x73\x21\x97\xfb\xa6\x40\x8d\x0f\x1a\x3c\x90\x9d\x60\xdc\xae\x5b\x7e\x02\x5e\xa8\xc3\x7d\xe1\x83\x81\x8a\x0d\x0a\x18\xd2\x13\x81\x84\x22\x82\x98\xa4\x3a\xa4\x27\xf0\x5e\x69\x51\xa2\x48\xeb\x44\x45\x59\x16\x91\xb4\x5e\x07\xa7\x34\xe0\x6e\xcb\x38\x5a\x69\xa4\x8f\x63\x4c\xc2\x7a\x1d\x1c\x67\x39\x27\x60\xf3\x71\x56\x7c\xe3\x46\x28\x33\x24\x85\xd2\x0f\x6c\xca\xac\xbc\x29\x27\x32\x4f\x54\xaf\x6f\xec\xcc\x8c\x84\x59\x96\x62\xbc\x3e\x17\xad\x79\x4c\xdf\x59\x0e\x9a\xc9\xb9\x30\xe2\xda\x0a\x07\xa8\xe7\x02\x84\xb5\x6a\x8b\xfc\xbb\xa0\x1f\x04\xf2\x88\x13\xce\x66\x0e\x26\x3f\x41\xb0\xe9\x11\x27\x5d\x5d\x0a\x1e\x4e\x85\xed\x76\xe7\xf7\xd2\x62\xa9\x5e\x05\x0d\x54\xb1\x62\xe4\xda\xdf\x98\xd7\xfa\xcc\x94\xe6\x5e\x47\x9b\x88\x37\x90\x68\xc6\xc7\xee\x40\xfe\xe0\x03\x14\x37\x37\xca\x48\xbc\x4c\x29\x1c\xe8\x5c\x1b\x79\x1a\x56\x9e\x66\x8c\x31\xce\x32\xcb\x27\xf1\x3f\x2d\x2d\x6d\xeb\x7a\x5e\xbd\x9c\x33\xb0\xd9\x75\xa5\x95\x1d\x14\x1a\x9c\xa0\xe0\x8d\xcd\xe3\x89\xf9\x43\x02\xda\xc9\xce\x9a\x9b\xe7\xed\xb4\x80\xdc\x52\xe6\x39\x33\x8a\x26\x1f\x1d\xb2\x91\xed\xbd\x98\x56\xe6\x1c\x7d\x1c\xab\xe7\x8c\x3e\x96\x0f\xf7\x8b\x30\xbe\x42\x5b\x0b\xf3\x95\x3a\xd0\x93\xf2\xd2\xb4\xed\x62\x6b\x22\xa9\x81\xed\xc5\x35\xab\x49\x18\xab\xf0\x8a\x69\x9b\x84\x15\x07\x37\xd5\xad\xda\xfb\xed\xc2\xc8\x36\x7b\x30\xe5\xd2\x0d\x51\xcd\x8e\x7e\xb4\xab\x0f\xac\x18\x65\x78\x5f\x18\xf9\x8a\x0d\xc3\x58\xdd\xb3\x70\xd8\x66\x72\x96\xf5\x7c\xbf\x7f\xe8\x1e\x32\xcb\x0b\xac\xe0\x36\xf1\x43\xec\x91\x68\x08\xfc\xc8\x22\xeb\x9c\x6f\xa8\x28\xdb\x2a\x81\xdb\xfa\x80\xb8\xc9\x78\x50\xd6\xed\xb3\xf8\x67\xeb\x8d\xa8\x87\xc0\x1a\xef\x32\x1b\x60\x8b\x68\x88\xb2\x9e\x84\xe2\xe6\x40\xe6\x92\x11\x23\x46\x72\x3a\x26\x6e\xe9\xf5\xa1\x84\x6f\xb9\x8e\x29\x53\x76\x36\x78\xaf\x1d\x3c\xc9\x1c\xb0\x0e\x03\x84\x12\x7a\x6e\xfc\xc8\xe0\x63\xa5\xd7\x9d\xe0\x4a\x4f\xa4\x8a\x12\x96\x3c\xd4\x90\x90\x7e\x65\x28\x51\xc2\x77\x97\x24\x96\x2e\xec\xde\x96\xcb\xca\x70\xdb\x1d\x0f\xb1\x9c\xc9\x85\x65\x45\x55\x9d\x06\x1e\xb2\xc2\x4d\x55\x55\x49\xae\xad\xd7\x52\x0a\x84\xf0\x5a\x79\xb7\xbc\xba\x7a\xd8\xaa\xfa\x96\xb1\x4f\x1f\xb6\xfd\x68\xbe\x78\xf1\x70\x31\x2d\x34\x29\x95\x8c\x38\x72\xae\xae\x64\x85\x8e\x81\xea\x14\xb1\x15\xd1\x2f\x5e\xc8\x6a\x1c\x0b\x96\x95\xb0\x9d\xa2\x1d\x87\x28\xe7\x90\xb2\x61\xb6\xeb\x10\x1d\xfb\xe2\x45\xe1\x0d\xe6\x83\xf1\xd7\xf9\x6a\x23\x97\x76\x18\xf2\xa2\x70\xe1\x79\x55\x7c\xca\x8a\x73\xcb\x64\x89\x75\x1e\x50\x48\x15\xae\x3d\x55\xa3\x8a\xb0\xc6\xba\x70\xf5\xa9\x9b\xad\x22\xc0\xcf\x86\xee\x07\xd3\x1f\xba\x99\xaa\xe0\x37\xbd\xcc\xf8\x85\x97\x19\x0d\x4c\x35\x78\xa3\x20\x4c\x51\x31\x8a\x1e\xf0\xee\xf9\x1e\x39\xbf\x83\x93\x9a\xdf\x13\x4b\x28\x07\xdd\x59\x48\xe8\x7e\x57\x3d\x99\x47\xf4\x55\xa3\x7e\x77\xc8\x3f\x94\x91\xed\xef\xdb\xfe\x41\x97\x6c\x4c\xdb\x8f\x91\xf2\xe0\xa7\x6b\x3a\x71\xc8\xc8\x39\x39\x51\x6e\x7d\x4e\x94\x57\x1c\xc1\x8c\x57\x18\x90\xf3\x9d\x18\x8f\x2f\x32\x74\xa4\xea\x39\xc9\xad\xc8\x65\xd9\x7c\x10\x4e\x92\x1d\x8e\x55\xd8\x40\x68\xbd\xef\x2d\x8b\xd0\x2c\x13\xad\x49\x62\x9b\x88\xee\xcc\xfa\x9a\xc5\x11\x8b\x85\xb1\xe7\x3e\x91\xc8\x9d\x38\x63\xf2\x59\x7b\x64\xdd\xae\x5e\x80\x0e\xf9\x2d\x32\x1e\xc9\x7f\x07\xf5\x0c\x2d\x61\x09\x39\x98\x01\x2b\x3e\x66\xdf\xc5\x7b\xb2\x3f\x4e\x74\x8f\xc8\xdf\xb6\xec\x93\x13\xdd\x2b\x9a\x62\xe4\x0e\x73\x74\x10\x72\xe4\x3e\x71\x4c\x64\xc7\x74\xce\x89\x43\x7e\xcb\xbf\x4f\x1c\xf2\xc2\xe0\x7e\xa2\xb0\x07\xfc\x2b\xa4\x43\x85\xe6\x7e\xe1\xba\x68\x09\xaf\x61\x2e\x8d\xdb\x06\x2d\x88\x55\xfe\x24\x8d\x50\x76\xa9\x1d\x4a\xea\xb0\xa7\x11\x59\xe6\xe3\x25\xcb\xc3\x78\x01\x1a\x4b\x59\x64\xe9\x8c\xc9\x15\x53\x7d\x92\xaa\x3e\x19\x1a\xd3\xd9\x7d\x0f\xba\x25\x95\x55\xa7\xa9\xa9\x5a\x0b\x7b\xa1\xea\x5c\x0c\x9c\xaa\xaa\x4d\xd8\xd3\xee\x9d\xd2\xbc\x6a\x59\xbe\xa8\x3a\x95\x45\x52\x67\x4c\x2e\x75\xd5\x2b\x4e\x16\xaa\xf6\x53\x63\xd5\x2b\x6b\x9f\x27\x1c\xbd\x47\xce\xe9\x0e\x47\x0b\xff\xfd\xdf\xc6\xb3\x42\xce\xf7\x22\x50\x70\xc2\x39\xb9\x3c\x3d\xdd\x45\x2e\x77\x15\xb6\xcb\x9e\xc2\x3c\x70\xcb\x62\x6e\x2b\xf9\x54\x7b\x34\xde\xa6\xc5\x9e\xfb\x78\x1b\xba\x0d\x59\x96\xed\xee\x2a\xfb\xed\xc2\xa7\x0e\xe9\xed\x28\xcd\xda\xdf\x2e\x7d\xea\x90\xfe\xae\xe2\x9d\xef\x28\x7e\xea\x90\xc3\x5d\xe5\xbb\xdf\x53\xfe\xd4\x21\x47\xbb\x00\xf4\xaa\x01\xc0\x54\x2f\x86\x81\x38\xcb\xd4\x4c\x78\x2b\xd6\xeb\xa9\x09\x77\xea\x90\xdf\x24\x3d\x84\x6f\x08\x7c\x30\x01\x08\xbd\xc0\x64\xc5\xa9\x1a\xc4\x9f\x57\x46\x22\x7a\x4c\x8f\x7e\x5e\xf1\x06\x75\x4e\x1d\xbc\x62\x68\xc5\x09\x67\x16\x87\x37\xe5\x86\xb4\x4c\x80\xb4\xc8\xbe\x46\x8e\xdb\x72\x1a\x70\x43\x9e\x70\x04\x30\x77\x00\xbc\x06\x80\x53\xae\xa6\xfc\xdc\xac\xb6\xe2\xcc\x96\x2f\xb9\xaf\xda\x57\xd7\xd7\x24\x66\x4f\x2e\x2f\xb5\x87\x96\xaf\x76\xf4\x9b\x70\xc9\x1c\x05\xe9\x9a\xd3\xab\xe2\xc4\x54\x60\x3b\xe3\xb6\x88\x7d\x7d\xcd\xe5\xb1\x82\xfe\x5d\x90\x6b\xde\x32\x0e\x0f\x2a\x04\x37\x31\x65\x59\x06\x26\x53\x11\x7d\x2e\xf4\x1b\xdb\xf0\x22\x10\x17\x6f\xe7\x48\xbb\x4e\x4b\x68\x01\x44\xbf\x59\x00\x8c\x4e\x84\xb3\xcc\x31\xee\x0b\x1c\x12\x82\x21\xde\x19\x12\xa3\x64\x8c\x07\xf2\xaf\xc5\x14\xc5\x38\x80\xf8\x12\x23\xa6\xee\x74\x51\x98\x65\xdb\x2e\x71\x4c\x85\x48\x5d\x5b\x90\x4f\x02\x34\xea\xd6\xd0\x22\x79\x74\xaa\x38\x23\xaa\x1b\x76\x75\xb2\x91\xf9\x66\xd1\x7c\x5e\xad\xe4\x65\x54\x87\x36\x44\xb7\xb6\x07\x65\x99\x8a\x62\xaa\x84\xdb\x12\x24\xae\xce\x97\xde\x46\x72\xcb\x89\x68\x8f\x75\x1e\xa3\xd8\xbe\x8b\x68\x6e\x5e\x4e\x60\x22\xe8\x9f\x48\x60\x7c\x3f\x0d\x53\xa6\x2e\xe4\x82\x84\xfe\x2e\x4c\x27\x1d\x78\xbe\xd2\xf8\xde\x83\x0c\xea\x82\xae\x94\xc3\x4e\x36\x6c\x41\x19\x44\xdb\xce\xa2\xd7\x4a\x90\x50\x48\x97\x67\x4f\x8f\x95\x72\xe8\x3d\xc4\xce\xd1\x63\x1d\x3b\x07\xdc\x08\xda\xe9\xed\x1e\xeb\xda\x19\xe4\x34\x29\xd2\x9b\x11\x3e\x38\xec\x75\xca\x59\xe0\x8a\xb1\x9c\xa7\xe7\x76\x0e\xf3\x4c\xfa\x7c\x19\x28\xcf\x5b\xcd\xd8\xd8\xd2\xf2\x41\x12\x4c\x50\xa2\xc6\x93\xc5\xb3\xb7\x73\xba\xa5\x0b\x26\x87\x2a\x3f\xc7\x21\x46\xff\x44\xa0\xa4\x59\x22\x16\xf2\x84\x97\x65\x3b\x86\x5b\xc6\xea\x3b\x13\x4b\x74\x3f\x88\x79\xc0\xb9\x19\x5f\x56\x1a\x33\x41\x95\x57\xc0\xdc\xf1\x23\x71\x89\x87\x9b\x5e\xe5\xe8\x6c\x64\xb6\x8f\x19\x7a\x8a\xe8\xc0\xa3\x76\xa3\xbd\x05\x46\xcf\x81\x87\x80\x34\xbc\xad\x52\xaa\xbf\x1f\x2a\x64\x9d\x68\x34\x16\x5a\x83\x19\xe1\x46\x7f\x03\x9a\xf1\xe5\xf8\xfd\x00\x91\x7d\x42\x01\xa0\x4d\x6f\x1b\x2e\x4c\x1c\xfd\x25\xe7\xe0\xf7\x82\x6f\x6c\x36\x57\x4d\x51\xa1\x87\xcf\x92\x43\x11\xd1\xa0\x72\xba\x36\x05\x47\xa2\x81\xec\xe1\x75\x83\x9e\xd9\x00\x4b\x4b\x54\x66\xdf\x1c\x03\xbd\x46\x76\x54\xd0\x63\x1d\x80\x4f\x7a\xac\xb3\x51\xd2\xac\xbf\x1d\x25\x3d\xd6\x56\x25\x3d\xd6\xc6\xcd\xe2\xfd\x35\x9d\xd7\xc8\xd6\xc4\xc3\xce\x92\x61\x71\x28\x62\x5a\x5a\x1d\x2c\xcb\x90\xbe\x21\x8d\xd2\xf7\x62\x8a\xf0\x60\x5b\x92\x13\x6c\x44\x69\xf7\x39\xf4\xdc\x38\x9a\xdc\xdb\xe9\xb6\xec\x26\x49\x85\xa6\xe1\x42\xad\xd0\x39\x4f\x96\xd5\x8f\xe3\x6f\xde\x91\xc1\x2d\x60\x49\xb7\x02\x76\x22\x66\x53\xd9\xc1\xb9\x40\xf7\x22\x01\x39\x0c\x91\xa0\x03\xb6\xce\x85\x3c\xb6\x70\x06\xe3\xd6\xf5\x6a\x19\xc6\xd1\x57\x86\xf6\x45\x49\x70\x53\xf9\x60\x8f\x41\xf5\x4d\x72\x5b\xf5\x4a\x82\xda\x9c\x78\xb2\x54\xe6\xc4\x4c\x15\x10\xc9\xff\x70\xcb\xa0\x45\xd0\x36\x91\xfc\x4f\xb6\x4c\x24\x0f\xb5\x4b\x24\xa5\x56\x5d\x31\x51\x95\xf5\x4c\xb9\xe7\x57\xc4\x74\xac\xf4\x5e\x46\x6c\xac\x85\x62\x50\x52\x57\xfc\x44\x54\xec\xc4\xca\xaf\x75\x61\x8b\xaf\x0a\xa8\xdb\x84\xaa\x0b\x24\x7a\x09\xb7\xc1\xea\xbe\xd6\xa8\xe9\x6d\xee\xce\x59\xb6\xcf\xad\x3e\xac\xd7\xd1\x26\x89\x47\x6a\x7b\xdd\xa0\xfd\x0a\xfb\x62\xe1\xfd\xc2\xad\x5b\x67\xeb\x5b\x3d\x52\x60\xe4\xb2\x86\x09\x12\xf6\x9d\xb4\x6e\x87\xba\xbf\xfa\xbf\xde\x90\x63\xbb\x21\x25\xe4\x61\xa7\x2c\xa1\x6e\xe7\x2d\x9a\x21\x6e\x19\x8b\xb7\x8c\x7d\x8c\x8f\x53\xbb\x2d\x24\xa1\x97\xea\x01\xa3\x4f\xa2\x78\xc5\x6f\x7f\x1f\x6d\x4e\xff\xc8\x0e\x24\x1b\xcd\x44\xd0\xb8\x98\xc6\x59\xe6\x20\xec\xc8\x63\xfa\x40\x03\x50\x37\x4d\x11\xe1\x38\x30\xdd\xa5\xaf\x09\x65\x1c\x94\xc6\x4a\x01\xc1\xcb\xcb\xe8\x0c\x89\x5d\x48\xc1\x91\x51\xa6\x99\xa7\xe1\xb2\x72\xac\x48\xfc\xbd\xa3\x15\xff\x4f\x8c\x96\xc4\xdd\x1a\x2f\xc4\xed\x20\xf9\xe6\xdc\x83\xd7\xc0\xf8\x31\xfd\xc6\x38\x97\x5a\xfd\x96\x57\xad\xb8\x32\xdd\x92\xf9\x20\x5e\x73\xe1\xa6\x07\xe1\x35\x79\x1b\x54\xe5\xa4\xff\x16\x2c\x3d\x42\x16\xb0\x7f\xec\xb8\xe0\x99\x59\x8c\xfb\x22\x8c\xaf\xe8\x47\x38\xbd\xe8\x1b\x8b\x7f\x5a\x01\x49\xf8\xe8\x6f\x10\xb1\x0c\xbf\xd0\xa1\xfa\x8a\x62\x7a\x06\x5f\x37\x21\x4f\xa3\xf8\xea\xf9\x22\xbc\x4a\x2b\xea\x81\xf7\x33\x35\x7d\x52\xb5\x95\xb4\x30\x8c\x0f\xa7\xad\x4b\x71\x86\x0b\x95\xaf\x6d\x03\x38\xed\x8c\x36\x7f\x69\x9f\x61\x6d\xef\x72\xbf\x8a\x23\x11\x70\x72\xc3\xa3\x84\x47\xe2\x2e\x78\x33\xe2\xe3\x75\xb1\xa9\x2a\xaf\xaf\xd5\xd2\xb4\x96\x29\xd4\x14\xf9\xe7\x1a\x13\xb1\x46\x0c\x54\xed\xb0\x79\xbc\xdb\xe8\x9d\xc5\x8d\x06\x06\x4a\xcd\x47\xf1\xb8\x25\x6b\x1e\x23\x66\x05\x8a\xc7\x22\x36\xe8\xbb\xcd\x09\xc3\xfb\x62\xa5\x5d\x5f\xf5\x92\x9a\x93\xff\x2f\xb2\xdf\xc0\x7c\xff\xa7\xac\xf7\x06\x88\xef\x60\xbb\x37\x4a\xfc\x47\x2c\x37\xfe\x3f\xc0\x6e\xe3\xff\x09\x56\x1b\x7f\x27\x9b\xdd\xa4\x3f\xc8\x61\x7f\x37\x7f\xad\x20\x03\x6f\xfd\xdd\x9c\xb5\x2e\x23\xb9\xea\xff\x84\xa7\x36\xd7\xc9\xf4\x27\xa1\x18\x2b\x78\x21\x82\x56\x2a\x21\xea\x05\x33\xca\xbd\xff\x17\xaf\x3e\xe5\x4f\xab\x30\x50\x67\x55\x69\xd0\x64\xf8\x34\x82\x2f\x88\xb5\x04\x61\x63\xcd\xcd\x69\xdb\x83\x87\x6a\x85\x97\x13\xd2\x20\xaf\x5b\xeb\xbe\x14\x28\x48\x04\x82\x1c\x0f\x70\x8b\x18\xb0\xdc\xd3\xb0\x76\xa1\x18\x30\xcb\x73\xad\x51\xa4\x61\x96\xe7\xda\x92\x86\x4d\x09\xdb\x14\xe1\xb5\x46\x57\x72\xa2\x3b\x84\x33\xc0\xa4\x96\x77\x45\xc3\xb2\xbe\x3a\x7d\xab\xde\xaa\xa5\x9b\x96\x36\xd5\x44\x23\xd7\x73\x14\x14\xcc\x50\x18\xe1\x54\x0c\x4a\x9b\xe3\x4a\x9e\x78\x02\xab\x97\x6a\x5c\xf7\x8f\xf6\x59\x75\x74\x6c\x22\x06\xe7\x88\x13\x31\x28\xb9\xbc\x18\x9d\x8d\x6d\xd7\x0d\xa3\x8f\x63\x27\x78\x28\xc3\x47\x07\x07\x67\xea\xb5\x0e\xfb\xd1\xe9\xbc\x61\x78\xa0\xf1\x53\x5d\x84\xb0\x9d\x88\x70\xb0\xa3\x83\x1a\x3d\x77\x6b\x09\x3d\x96\x13\xbb\x5c\xbc\xd0\x22\xfa\xe8\x10\xd9\x1a\xe7\xa3\x83\x71\x60\xb5\xeb\x1b\xad\xda\xd5\x26\xcd\xeb\xa7\x37\x1b\x73\x70\xe7\xd0\xe8\x7b\x7f\x73\x3e\x40\x07\x8f\x6b\xda\x4b\xf2\x24\x6a\x38\xb5\xc7\x07\x58\x29\x09\x30\xaa\x73\x3a\x44\x50\xc7\xd9\xd3\xc0\x5e\x2b\x65\x4d\x38\xba\xe6\xba\x93\x56\xdb\x07\x06\xfe\x4a\x4c\x9d\xc0\x04\xe0\x92\xed\x63\x12\x33\x00\xf6\x51\x8b\x4b\x39\x75\x46\x4e\x83\x35\xfe\x86\x9c\xf1\xdf\xe4\x66\x79\x6c\xbf\x7e\xa8\x15\x35\xf5\x94\xd0\x2f\x20\x82\xe7\xd4\x20\x7f\x21\x30\xa2\xa2\xf1\xb7\x91\x83\xc7\x7f\xab\x92\x5c\xf2\x46\xdc\x70\x2a\x3b\xce\x69\x44\x66\x66\xff\x76\xfa\xf6\xcd\xae\x17\x7d\xcb\x86\x05\x9b\x13\x62\xb5\x58\x68\x18\x9b\x4b\xa3\x0c\xc5\x4c\x78\x7d\x66\x74\x58\xec\x60\x83\xa2\x33\x9b\xcd\x6a\xe0\xe1\xf5\x44\x79\x78\x35\x58\xd6\x46\x2f\x86\x67\xe3\x8f\x66\x84\x57\x71\xf4\xa5\x02\xbe\xf5\x9a\x4a\x79\x5a\x1e\x00\x6d\x95\x25\x75\xd4\x2e\xe4\x6c\xc2\xdc\x04\x19\xa9\xb0\xb4\x61\xb3\xcc\xd5\x32\x5d\x70\x25\x99\xc4\xc0\xdc\x6d\x81\xba\x8f\xc0\xc6\x54\xcf\x22\xa2\xda\xa6\x83\x73\xa2\xda\xad\x83\xda\x7c\x16\x76\xa0\xc0\xda\x8d\x88\xb2\xc5\xd2\x51\x2a\xa0\x48\x96\x9c\x00\xf4\x09\x53\xec\xe9\x6b\x16\xde\x94\x5f\x4f\xb4\x9f\xe4\xb4\x26\x8c\x42\xdb\xdc\x71\x57\x9d\xa1\x13\x5e\xd6\x0a\x30\x1b\xbe\xd9\x60\xf3\xcd\x9f\x6c\x9f\xea\x0b\x87\x67\xbb\xd3\xee\x0c\x4b\x9d\x5f\xab\x7f\x2f\x16\xba\x88\xa9\xd9\xe6\x1b\xc0\x63\x1b\xc0\xd5\x4c\x14\x2d\x3e\xd3\x2a\xf8\x46\x9d\x03\x66\xca\x94\x45\x0b\x84\xca\xb2\x49\x7c\xd0\xd6\xa7\x53\x15\xd5\x7e\x8c\xe0\x3d\xa0\x32\xfb\xa5\xea\x84\x20\x7d\x03\x63\x31\x0b\xef\xd2\x57\xb1\x7a\x14\x6e\x7b\x30\x9e\xb2\x9d\xec\x4b\x31\x32\x54\xff\xa6\x15\x1c\xfb\x76\xbf\xc2\xd8\xc0\xb9\x60\x53\x55\x45\xcf\x9a\x70\x36\x43\x7d\x89\xbd\xc0\x60\xa8\x67\x77\x3f\x2d\x3e\xab\x6a\x33\xca\x2e\xe0\x0f\x4f\x56\xf4\x23\x55\x40\x13\x5e\xc5\x9b\xd3\xd2\x32\x80\xd8\x9e\x1f\x06\xfe\x79\xb9\x9f\x18\xcc\x29\xb6\x35\x7b\x2a\xc0\x57\x03\xc8\xa7\x87\x64\x25\x68\xc8\xf5\x48\x51\x3d\x60\x3f\xb0\x7b\xef\x6b\x9d\xab\xc0\xbc\x57\xa9\x5e\x65\xb3\x19\x48\x43\x40\x6c\x2f\x64\x56\x1c\x44\xec\x6d\x80\x44\x42\xf1\x02\x9b\xdd\x42\x58\xae\x76\x99\x3b\x08\x16\x03\x11\x98\xd7\x33\x07\x8e\xd2\x07\xcd\x4f\x7c\x48\x50\xbe\xf1\xb8\x0b\x78\x1b\x06\xba\x1c\xe4\x86\xb8\x02\xdc\x6f\xe4\x83\xc7\x9a\x31\x0c\x1c\x0e\xe2\x7c\xec\x66\x36\xcf\xf8\x6f\xf4\x8b\xba\x35\x69\x69\xd9\x7c\xf3\x01\x6a\x81\x1f\xf5\x1f\x98\x58\xac\x29\xb6\xe6\xed\x7f\x80\x5b\x6e\x7d\xc2\xec\x93\x9c\x42\x33\xcb\xfa\xd6\x98\xee\x1c\x93\xed\x87\x0e\x07\xdb\x7d\xfe\xa8\x9f\x65\xfd\x62\x9c\xa0\xfb\xcb\x07\x54\xf5\xd6\x4b\x5e\xf9\xa3\xfe\x20\x0e\xe2\x66\xdf\x4c\x54\xa3\x63\xb1\xbd\x2c\x2d\xbb\x0f\x54\x29\x81\x51\x57\xa0\xcd\xea\x34\xf5\x48\xb1\xbe\xed\xb2\xde\x15\xfb\x56\xd7\x4b\xb6\x9b\xea\xdf\x94\x72\x23\xbf\x58\x09\x46\xf3\xaf\x94\xa6\x5c\x09\x27\x24\x7b\x4d\xf3\xaf\x94\x2e\xb8\xca\x9f\xf3\xde\xf4\x7a\x43\x21\x7b\x0e\x39\x72\x9e\xa9\x2c\xdf\x33\xd2\x3d\xf3\xc8\x4d\xb1\x11\x3f\x70\x21\xfa\xbd\x63\xaf\xd7\x6d\x12\x7c\x15\x9a\x92\x56\xbd\x66\xc9\x6c\x2f\xd9\x88\xe5\x26\x51\x25\x89\x80\x72\x6f\x01\x03\x14\x5e\xa6\x88\xe1\x63\xaf\xa7\xbc\x92\x20\xf6\x98\xf6\x72\x2f\x43\xfb\x56\xc5\xf5\xba\x00\x15\x67\x53\xbb\xb1\x5c\x53\x4d\xa4\x7a\xf7\xd3\x56\xdb\xfb\xae\xf1\xb7\xad\x19\x41\x39\x4e\x91\xd2\xad\x49\xe4\x89\xa2\x5e\x47\xfb\x42\x4b\xb2\x26\x4a\x9d\xf4\x55\xfc\x8e\x27\x57\x9c\xa5\xe9\xc0\x52\xe8\x66\xcd\x44\x15\xf3\xc8\xbe\x67\x28\xd4\x66\x81\x2c\x43\xd5\x09\xca\x36\x6c\xf7\x49\xb4\xa2\x04\x98\xea\x5b\xe7\xd4\x95\x98\xee\x94\xf7\x17\xac\xb3\x6b\x64\xfe\xb0\x04\x77\x16\x30\x5d\x89\x2a\x8a\x97\x3b\xd0\x23\x4c\x77\x9d\x39\x28\x23\xd3\xf3\xd0\x1f\x16\x86\x39\x7f\xbe\x71\x84\xd0\x6e\x55\x01\xaa\xf8\xba\xc4\x1b\x75\xe6\x09\x64\xdf\x23\xc6\x33\x6c\xad\xf2\x85\x54\x85\x98\xd9\x15\x5f\x0b\x14\xe5\xc3\x6d\x9e\xe1\xd2\x3a\xbe\x05\x78\xa6\x07\xcb\x6e\x64\x61\x75\x59\xc8\xbe\xae\xc3\xf4\xc9\x22\xba\x8a\xd9\xec\x65\xb2\xe2\x5b\xab\x6a\xb7\x25\x18\x62\x94\x0d\xd4\xe5\x8f\x75\x84\x09\x5c\xb2\xd9\xb9\xb8\xc9\xf0\xa3\x9e\x4b\xa9\x6b\xa8\xf3\xc9\xe9\xd9\x2e\x96\xda\x2a\xf6\x4b\x89\x32\x29\x06\xc8\x2d\x55\xa6\x27\xf0\x37\xca\x74\x4b\x65\x34\x0a\xaf\xcb\xf3\x64\x77\x33\xed\x35\xa8\xcb\xbe\xdf\xa6\x3e\xdf\x65\x30\x57\x14\xa7\x2f\x85\xfe\x3e\x7b\xaa\xbf\x8d\x92\xcc\xce\xb3\x46\xf9\x71\xda\xb5\x29\xf3\xa6\x74\x03\x50\x5d\xe6\x69\xa2\xb4\x13\x05\x9b\xd5\xde\xc7\xd1\x67\xc6\xd3\x70\x51\x3b\x8b\x96\x2c\x07\x25\x57\x68\x4a\x4f\x95\x92\x64\x5a\x0b\xa7\x53\x96\xa6\x09\xdf\x54\x6c\x7f\x9f\x32\xe5\xb3\xc0\x98\xac\x3b\x24\xe4\x38\x67\x6f\x53\xa5\x1b\x2f\xbf\x1e\x04\x01\x59\x0c\x0c\x87\xbc\x61\xd8\x1c\x56\x00\x02\x7c\x3c\x08\x40\xe6\x28\xca\x3f\x51\xe5\x65\x77\x94\x94\xf3\x65\xc4\x6e\xd3\x7b\x64\xcd\x8b\x1f\x35\xc1\x97\x90\x0f\x76\x68\x8a\xe6\xdc\xda\x16\x4f\xc6\xb4\xc1\xae\xa6\x35\xd6\x62\x2d\xde\x8c\xdf\x52\xac\x59\xe3\x7c\xd1\x9c\x5e\x47\x73\xc1\x66\xb2\x8d\x76\x78\xb3\x83\x7e\xe0\x91\x82\x54\x34\x53\x05\x64\xc3\xc8\x47\x1e\x42\xa3\x24\x2e\xb9\x18\x90\x7b\x68\x92\x4b\x41\x8b\xfa\xf1\xe6\x3e\x59\x24\x69\x69\xc8\xfd\x1a\x24\xe9\x46\xdd\x88\x20\x46\xc1\x85\x13\x6e\x4d\x42\xc3\xaf\xe4\xef\x2f\x83\xbb\xb4\x50\x19\xb8\xca\x8f\xbd\x6d\xb0\x74\x73\x95\xb9\xc7\xcf\x20\x33\x11\x46\x92\x29\xcf\x4a\xea\xb9\xd9\xed\xd2\xb9\xbb\x94\x8a\x44\xad\x59\x7b\xc3\xe9\xd3\x2a\x6d\xb4\x25\xdf\xbc\x49\x04\x2b\xf2\x84\xce\x25\xf7\x04\xf6\xb9\x05\xff\x16\x8d\xf8\x18\xfc\xaa\x15\xc6\x03\x9f\xb9\xe5\x0a\x2f\x84\xdb\x74\xe0\x20\x0b\xd7\x2c\x8c\xb2\x2c\x73\x1c\xe3\xb8\xdb\xf4\x6d\x5e\xb1\x16\xdf\x2b\x34\x63\x78\xe6\x59\xbd\xa8\x0c\xf7\x25\x9e\x0f\x37\x25\xd1\x28\x1e\x53\x28\x12\xdb\x45\x0c\x5e\x05\x3e\x77\x56\x7b\x9c\xcb\x24\x59\xb0\x30\xb6\xb8\x99\x41\xa8\xdc\x3b\x71\x2a\x88\x30\x28\x06\x1a\xe3\x7d\x8f\x84\x32\x65\x2b\x03\x26\x82\x82\x3d\xf7\x9e\x61\xc7\xa0\x93\x52\xca\x06\x49\xc1\xd0\x07\x6e\xe1\x90\x9d\x5b\xcd\x14\x04\xf1\x46\x8a\x1f\xf5\x49\xac\x5f\x38\x55\xca\xb5\xa6\xa1\xca\x9f\x55\x1f\xbc\x58\xad\x46\x11\xb4\x53\x10\x14\x6d\x94\xd1\x00\x57\xeb\x9b\x1d\x7a\x82\xc5\x8b\x4d\x9a\x15\xd1\x99\x46\x6c\x9c\x73\x46\x3a\xaa\x65\x54\x01\xf7\x72\x1d\x82\x18\x0f\x62\x2d\x7d\x20\x1c\x4e\x44\x37\x92\xfb\xb0\x9f\x38\xda\x75\x32\x9f\x94\xb3\x8d\xd8\xd8\x1c\x20\xb6\x52\x5a\x22\x79\x7f\x73\x63\x5e\xbd\xc9\x5d\x43\x8a\x2c\xdb\xe7\x03\x11\xa0\x1d\xf0\x28\x2f\xfc\x60\x0e\x87\xc3\x61\x36\x1c\x66\x27\x27\xd9\x6c\x36\x9b\x1d\x5c\x55\xba\x5f\xd2\xde\xa3\x40\xa9\x7e\x07\x50\x0c\x4d\xb4\x74\x32\x76\x6f\x3b\x45\x1e\x28\xa3\x75\xe3\x77\xb3\x65\x3a\x43\x21\xe8\x7d\x34\x73\x80\xa3\xbb\xe1\xb9\x43\x35\x3a\xe3\x10\xcc\x15\x73\x74\x84\xfd\x08\xd3\xce\xeb\x7e\x55\x8d\x9d\x75\xc4\xc7\xc5\x60\x46\x78\x10\xe5\x45\x02\xcb\x25\xe9\xa3\xd9\x41\x94\x23\x12\xa6\xe2\x39\xbc\xf1\x54\xa9\x1d\x51\x51\x85\x7b\xcc\x06\x8e\x7a\x16\xca\x09\x1c\x59\xde\xb1\x2a\xe5\x78\xc0\x91\xc0\x81\x35\x56\x8f\xd2\x83\x08\xae\x93\x6f\x36\xaf\x6e\x73\xdf\x70\xca\x81\x8a\xba\x87\x3d\x93\x0b\x71\xc4\x8d\x0e\x0b\x1f\x53\x75\x2c\x1b\x39\x13\xa7\x21\x43\x9a\x74\x2a\xbb\xb2\xfc\x8c\xf0\xa0\x69\x82\xfd\x76\x24\x7a\x28\x7f\x2b\x4d\x56\x7c\xca\xcc\x52\x49\xb6\x93\x70\xc3\xc9\x9c\x46\xfe\x5c\x96\x89\x85\xd6\x69\x76\x61\x87\xa9\x85\xbe\xbf\x33\x76\x9e\x03\x3b\x34\xca\x6f\x7e\xc6\x41\x29\xbe\x54\xa6\x15\xa5\x6a\xe2\x66\xd9\x1f\x0c\xb7\x04\x4b\x05\x08\x42\xd4\xd4\x71\x02\x27\x15\x61\x3c\x0b\x25\xa3\xe8\x8c\x6d\x90\x0f\x55\x5d\xaa\xaf\x55\x40\xb0\x5a\x04\x6f\x5e\x7d\x5f\xb3\x20\x6b\xb9\x02\x88\xda\xd5\x40\x95\xf8\x07\xfb\xb7\x1b\xb3\xab\xc2\xed\x5a\xaa\xdb\x06\x63\xfb\xb0\xd2\xb1\x0d\x09\xb2\x3f\xfb\x12\x4e\xf3\x3d\x6c\x67\x51\x78\xfa\x42\x24\xea\x29\x21\xeb\x99\xaf\xe2\xd8\x6e\xc3\x04\x6d\x85\xad\x58\x3a\x1a\x5b\x94\x6b\x58\x95\x90\xca\xb6\x6d\xa4\xe4\xdb\x66\xa3\x11\xe3\xc4\x3c\xb2\x1b\x8f\xf1\x8e\x32\x72\x63\x2d\x24\xb2\xfa\x69\xdd\x04\x5c\x0f\x57\x34\xa0\x1a\xa3\x0d\x18\xbb\x8b\xe7\x97\x7b\x03\x67\x38\x1c\x3a\xf0\xc6\x43\xd3\xdb\xa7\x14\x45\xb9\x57\x9f\x6a\x34\x49\x88\xf1\x20\x52\xf2\xbc\xea\x12\x1b\x38\xd9\x05\xfe\xcd\xca\x7e\xb8\x9e\x1f\x29\xf0\xc3\xcd\xde\xb2\x5b\x54\x86\x38\x5b\xf3\x26\x17\x5e\xfc\xc7\x73\x09\x93\x12\x0f\x26\x39\xbc\xc8\x9e\x50\x3c\x3f\x4d\x6e\xcf\x07\xcb\x8c\x79\x6b\xaa\x94\x5e\xf3\x75\x1a\xf6\xcc\x89\x4a\x3e\xaf\x9d\x16\x38\xf4\x69\x38\x3f\x95\x1e\x09\xae\x9a\xc2\xbb\x61\xaa\x19\xfd\x30\x60\x0c\xee\x38\x37\x7b\x6d\x14\xc3\x8b\x61\xb4\x12\xc9\x86\x93\xed\xac\x87\x54\x81\xb2\x51\x4c\x36\x31\x31\x58\xd4\xeb\xf0\x08\xa4\xa3\x9e\x4a\xda\xd5\x83\x8a\x62\xb2\xad\xe7\xaf\x9c\xcd\xa2\x15\x3d\x55\x59\x76\x9f\x9b\x12\xcb\x87\x33\xaf\x2d\xf2\xa9\x9e\x66\xde\xc9\x03\x6d\x12\xcd\x01\xd2\x93\xd7\x99\x58\xe5\x1d\x9c\x65\xcf\xad\x25\x80\x09\x2b\x13\xf4\xe2\x15\xe8\x12\x59\x87\x18\x1c\xec\x84\x89\xb6\x32\xd3\xd7\xac\x3c\x30\x16\xe8\x7a\xfd\x47\x6a\xdd\xdc\x1e\xff\x77\x3a\x62\xe3\x55\xed\xed\x4d\x6e\x47\x97\x14\x69\x5b\xfd\x62\x61\xff\x6a\xb3\x73\x36\xaa\xdb\xea\xa1\xef\x44\x07\xfa\x0a\xee\xf7\x2a\xfa\xe7\x3d\x43\xcc\x7a\xf8\xbb\xb8\x43\x2d\xae\x4d\xa1\x2c\x00\x99\x47\x1c\x1e\x6e\xdd\xbc\x20\xd8\xe8\x6d\x53\x72\xa3\xcc\x79\x09\x85\xea\x32\xb7\x39\xb2\x1b\xd7\x63\x05\x53\x6c\x18\x10\x93\xc9\x70\x1f\xf9\xeb\xa1\xe5\xe0\x88\xd5\xeb\x4a\xe5\xc5\xac\x2f\x93\x92\xf3\x73\xdf\xe0\x7e\x72\x3f\xa8\xe0\xf7\xe0\x2f\x86\xf8\x46\x87\xe1\x80\x0d\xf8\x88\xa9\xdb\x94\x71\xc0\x4b\x6d\x18\x46\x71\x95\xec\x33\x07\x56\xc6\x69\x18\xc5\x15\xc0\xb7\xf2\x14\x95\x6d\x25\x95\x2a\xdf\x64\x1d\xbf\x55\x3d\xe4\xff\x26\x02\x86\xa5\xac\x44\x01\x12\x4b\x48\x7c\x37\x8f\x57\x2a\xf0\x3f\xc6\xe5\x95\xa0\x5a\x7c\x5e\x19\xbd\xf2\x26\x7c\x5e\x9d\xb6\x8c\xe2\xad\x14\xb5\x3f\xf7\xcb\xbc\x9e\x37\xc6\xd0\x3b\x31\xde\x51\x32\x67\xd7\xac\x91\xfb\x26\xcb\xb7\x8d\xda\x16\x98\xef\xe3\x1d\x6f\x1f\x84\xf1\x5d\xbc\xa3\x3c\xf7\x3f\xc4\xcf\x95\xaa\x28\x31\x82\xdf\x28\xb8\xdd\xc8\x6f\xb3\x77\x9b\xbd\xbb\x59\xdf\x0f\x63\xfa\x83\xa8\xfd\x7b\x58\xfd\x5b\xbd\xf0\x9f\xb6\xe1\x21\xa4\x7e\xa8\xc4\xff\xb1\xce\xfc\x26\xa3\x5d\xaa\x23\xdf\x4e\x77\x2c\xe7\xaa\x25\xfb\xed\x85\x3e\x5f\x2d\x16\x9b\x49\x38\x5f\xea\x5b\x9c\xb8\xb5\xdc\x0b\x86\x7c\x0b\x86\xcd\x92\x57\x25\x56\x32\xd0\xf9\xa2\xac\xe0\x9e\x2f\x2e\x5a\x83\x1d\xac\xf9\x0f\xc1\xde\xc9\x9e\x57\x57\x50\x45\xcb\x1e\x02\x2f\x49\xdb\xb7\x81\xef\xa2\x4d\x65\xf6\xbf\xdc\x1d\xd6\x01\xa0\xa2\x2d\x15\xa9\x39\x2a\xbb\x08\xe1\x77\x1e\x10\x72\x9a\x62\x78\x8a\xaa\xf1\xdc\x79\x44\xd8\x2c\x5c\x39\x62\x0f\x94\x2e\x15\xae\x18\x8d\x6f\x9c\x2f\x36\x1b\xbd\xe3\x84\x61\xb2\x7d\x83\xb5\xde\xde\xb4\x2d\xe6\xba\x04\x43\xf2\xbe\xff\xac\x64\xaf\xf3\xc1\xdb\x62\x66\x4b\x00\x6c\xc6\x7a\x0b\x32\xaa\x28\x40\xff\xce\x36\x47\xba\x92\x9f\xfe\xde\xfa\xb7\x79\xab\xff\xcd\xce\xa9\x66\xf7\xb7\xd1\xa9\xea\xa6\xca\x13\x48\x45\x4b\x7e\xda\xee\xb0\x9d\xa7\x90\x1f\x47\x6c\x93\x31\xfe\x5f\xec\xbd\x61\x14\xef\x46\xd1\xa0\x52\xd5\x73\x26\xad\xa2\xdf\xf2\x16\xfc\xbe\xd5\x6b\xe5\xea\xb6\xfb\xec\xfb\xd0\x51\xb7\x23\xe9\xbb\x61\x45\x1f\x39\x37\x60\x4b\xc7\x1a\x86\x57\xcb\xb9\x34\x78\x30\xe5\x89\x40\xae\x3e\x25\x9b\x47\x7d\xb6\x1c\xea\x68\xb7\x22\xde\x31\x1b\xf0\x81\x73\xb3\x74\x02\xe7\xdd\xd0\x09\xf8\xc0\x09\xe5\xf7\x93\xa1\xb3\x26\x2b\x01\x0a\xd2\xe4\xbe\x5a\x62\x1f\x18\x51\x3c\x12\xd7\x59\x2a\xb2\x78\x96\xf1\x19\x3e\x20\x5a\x74\x1f\x6c\x5f\x57\xb1\x47\x9e\x9b\x3b\x40\x6d\x80\xc7\xf7\x5b\x24\x23\xdd\x03\xcf\xc5\x03\x47\x5c\x3b\x01\xb8\x81\x1f\x38\xa9\x70\x02\xf5\x08\xad\x13\xcf\x9c\xa0\xad\x3e\xf9\xcc\x09\x64\x2e\xbc\x86\x67\x01\xc0\xf8\x2d\xbf\xa1\x87\x60\xb5\x7a\x80\x4a\x56\x6f\xee\x17\xaa\x06\x2b\x61\x80\x80\x2a\x75\x19\x90\x8c\xfa\x26\x30\x95\x29\x07\x38\xd5\x26\xe1\x57\x9c\x1a\x6d\xac\xe2\xaa\xf7\x72\xeb\xaa\xf7\x5c\xc0\x65\x9f\xf5\xbc\x90\xad\x9b\xd6\xa0\xf1\xe3\x68\xc3\x7d\xa5\x76\xdf\xab\x93\xc0\x93\x6f\xee\xc7\xd7\xe4\x57\xee\x44\x59\x95\x13\xf2\x09\xdf\x70\x2f\x6e\xe9\xac\x1b\xc7\xe2\xa0\x97\x6c\x5f\x31\xdf\xda\x85\x3a\x87\xae\xfb\x98\x1d\x78\x9d\x9e\x7b\xd4\x2f\xf2\x3c\xb3\xf3\xa8\xc4\xc7\xec\x40\x66\x2e\xf2\x7c\xb1\xf3\xec\x10\x05\x84\x29\x3c\xd1\x22\xbb\xe7\x94\xd3\x2f\x1c\x29\x77\x36\x6f\xd5\xb7\xfc\x7c\xa2\xa3\x1d\x4c\x3e\xa9\xcf\x6b\x07\x93\x33\xf5\x39\x73\x30\x19\xaa\xcf\x5b\x07\x93\xa7\xea\x73\xe8\x60\xf2\x87\xfa\xfc\xdd\xc1\xe4\x9d\xfa\xbc\xb3\x1d\x5f\xfe\xf9\x1d\xb8\x6d\x18\x20\x80\x0f\xf8\x11\x1b\x07\x6f\xc2\x37\x0a\xe3\x13\x4e\xff\xe4\x25\x8b\x57\x89\xf0\x1b\x15\x5b\x44\xbc\x32\xd9\x94\x43\x29\x4c\x5e\xab\x08\x50\x71\x74\x30\x79\xae\x82\x72\x70\x1d\x4c\xbe\xea\xdc\xda\xe3\x25\x79\xa9\xc2\xa0\xd2\xe2\x60\xf2\x2b\xb7\x14\x33\xc9\x7b\x4e\xef\xd3\x34\xe8\x74\x48\x1a\x74\xba\x64\x29\xff\x5c\x07\xbe\x4f\x66\x81\xdf\x23\xc3\xc0\xf3\xd6\xe4\xbc\x6a\x6e\xfe\x65\xb5\x1f\xb9\xc7\x0c\x37\x11\x3b\x76\x71\x96\x35\xac\x67\xe1\xff\xc1\x1f\xb2\x65\xa9\x70\x7a\x50\xb2\xb7\x57\xaa\x1b\x72\x01\xd0\xf3\x5c\x6c\x6e\x75\x15\x98\x49\x90\xb8\x48\x54\x2e\x5a\x23\x2b\xb7\xf6\xd2\x2a\xe8\x04\x21\x46\x27\x88\x1f\xf4\x5c\x8c\xc1\x3d\x3d\x7f\x44\x7b\x2e\x61\xf2\xef\x9e\xf2\x77\x38\x41\xd1\x81\xe7\x63\x12\xd2\xe8\x11\xf5\x7c\x92\xd2\x98\xac\xa8\x20\x0b\xca\xc8\x94\xf2\x01\x6f\x89\xe4\x79\xf4\x85\xcd\x50\xdb\x7e\xe5\xb1\x35\x70\x1b\xea\x95\xc7\xc0\x71\xc8\x9c\xea\x69\x79\x6a\x4c\xb7\x80\x9d\x9a\x1b\xfb\x9d\x77\xee\x89\x52\x4a\xb8\xa6\xf3\x63\x77\xe0\x34\x1d\x59\x6a\x46\xff\xda\xc0\x79\x9f\xca\xa8\x39\x36\x39\x6e\x8a\x1c\xd0\xcc\xcd\xf4\xa5\x05\xc1\xee\xa3\x8d\x7c\x86\x72\x5c\x37\x9c\x77\x4e\x03\x25\x83\x59\x23\x69\x38\x1f\xe0\xe1\x94\x06\x0a\x07\xb3\x46\xd8\x70\x86\x3a\x98\x0e\x6e\x1a\x69\xc3\x39\xd1\xc1\x55\x96\x2d\xb2\x6c\x3a\x70\xce\x4c\xc4\x60\xd9\x58\x35\x9c\x97\x3a\xb8\x18\x2c\x1b\x8b\xa2\xf4\x74\xb0\x6c\x4c\x1b\xce\x29\x04\x61\xba\x7f\xe0\x25\x9f\xb4\x06\x97\x0f\x0f\x59\x2e\xab\x26\xe9\xf4\x35\xf9\xc0\xe5\x34\xdc\xa1\xa8\x0f\x0b\xac\xac\x58\x53\x52\xdd\xbd\xaa\xec\x21\xfb\x2d\x87\xab\xf2\x54\xb2\x47\xc4\x2a\xad\x46\xa8\x6c\x51\x08\xe9\xe5\x98\xc2\xfc\x50\x27\x5a\xf1\x46\x0f\x59\x17\x82\x80\x31\x61\xd4\xb1\xf0\x99\x5b\x3a\x9a\xac\x79\xdd\x4a\x57\x0d\x22\xe1\xd3\xe8\x83\x7e\x50\xee\xa9\x2a\x2f\x80\x2f\x79\x71\x48\xf6\x30\xe4\xcd\xad\x30\xbf\x59\xa0\xa9\x4b\x84\xdf\x6b\x87\x50\x65\x7a\x60\xf7\x0f\xa8\x2f\x2b\xc5\xa0\xb2\x71\xb3\xb1\x30\x56\x86\xcd\x4a\x13\x5c\x7e\x63\x6d\xaf\x9c\x5b\xa5\xca\x8d\x2d\x56\x1a\xe2\xb9\x02\x8b\xde\xda\x6e\x39\x12\x98\x18\xcb\x66\x6d\x70\x6c\x04\x52\x1b\x86\xcc\x26\xfa\xa0\xbd\x67\xd9\x41\xe7\xb1\x9e\xaf\xf4\xb8\xaa\x6a\xb7\x74\xdc\x9f\x6d\xcc\x8f\xa2\x76\x65\xbc\x6c\xe6\xe5\x41\xbf\x11\x1b\xff\x4c\x85\xf5\xb0\x49\x35\xed\xb1\x6d\x82\x75\x9a\xdf\x79\x2c\x93\xc1\x41\x54\xc9\xb2\x37\xdf\x45\x3b\x2e\xe4\xe8\xb1\x4e\xd9\x8c\x57\x67\x38\xec\x75\x5c\x95\xc3\x63\x6d\x03\xa2\xb0\x23\x0f\xb6\xcd\xd2\x00\x95\xc7\x02\x37\xe2\xdc\x89\x94\xb8\xe6\xc9\x2d\x18\x9c\x3e\xe3\x3c\xe1\xc8\x79\x1f\x7f\x8a\x93\xdb\xb8\xb6\x8a\x23\x51\x73\x1a\x72\x37\x56\xd3\xc4\x76\xc9\x46\x4f\xb9\x8a\xd4\x64\x91\xbe\xe5\x26\x93\x5a\x08\x4f\x74\xf8\x25\x2c\x80\x4f\x3a\x74\x22\x17\xe5\x99\x0e\x28\xf3\x9f\xa1\x29\xa8\x56\xc5\x53\x1d\xfc\xdd\x58\x51\xfd\xa1\x23\x3e\xc0\xfa\x78\x07\xa1\x6f\x58\xd1\x6d\xee\xd3\x25\x9e\x4a\x77\x41\x31\xe4\xf6\x20\x3f\xf2\xfc\xc7\x7e\xf7\xc8\x67\xbd\x46\xdb\xeb\xb6\x7b\xac\xf7\xf8\xb6\x34\x0b\xe4\x86\x02\xfb\xbd\x44\x43\xf3\x57\x5b\xd4\xab\x78\x05\xb8\x62\x95\x90\xd0\x9a\x6f\x24\x2d\xcd\x72\xb9\x3d\x6d\x11\x3e\xf7\x98\x26\xe0\x7f\x38\x84\xbf\x69\x96\x25\xc7\xd4\xad\xd7\x43\xf8\x9b\x1e\x53\x37\xcb\x50\xd2\xa0\xaa\x61\x13\x2e\x27\x6e\x8a\x1b\x21\x26\x29\x0d\x29\x3c\xcd\x56\xa2\x6b\xc9\x23\xb9\xcd\xca\xdd\x33\x01\xbb\x44\xb2\xca\xa9\x1a\xbc\xec\x22\x37\x57\xf5\xe2\xcb\x2a\x27\x6b\x42\x26\x70\x3a\x41\x42\x27\x68\x6b\x8c\x47\x7e\x87\xa4\x0d\x1a\xd1\x09\xba\xe5\x28\x6c\xc0\x96\xec\x77\x30\xc6\x24\x6c\x52\x85\x4b\x04\xae\x17\x26\x08\xfa\x8e\xa4\xb0\x15\xaf\x94\xfd\x53\x28\xab\x50\xe3\x9e\x92\x95\x26\x81\x71\x41\xf8\x76\xf9\xae\x3b\x17\xc6\xff\xc5\x87\x9d\x4e\x79\x14\xf9\x21\x15\x13\x62\xc4\x1a\x4e\xea\x8c\x51\x31\x90\xa5\xfe\x39\x81\x29\x66\x42\x6f\xb8\xca\xa0\xfa\xe1\x15\x84\x54\xe3\x5f\xc3\x37\xb4\xe3\x39\x7c\x6e\x18\xcf\xe5\x98\x4c\x72\x6b\x9b\x14\xe1\x83\xbe\xc2\x5a\x37\xfb\x2b\x94\x54\x0d\x7f\xa9\x80\x6b\x0f\x46\xdf\x49\x94\xbf\x87\xe7\x2a\xbd\x11\x4f\x56\x64\x01\x6f\x00\x6f\x95\x24\xd7\x14\x09\xba\xcf\x08\xa7\x73\xc9\x86\xe9\x4e\x06\x8b\x12\xc9\x86\xfd\xca\x51\x2c\xf9\x73\xc9\x85\x63\x92\x14\x61\xb0\x5e\x08\x8b\xf0\xb5\x0c\xa7\x45\x78\x26\xc3\xab\x22\x3c\x94\xe1\x45\x11\xbe\x93\x61\x34\xa5\xd1\x31\x7d\xcf\x5b\x69\x5a\xaf\x83\x2b\xd4\x68\x9c\x65\xd1\xb1\x8c\x81\x08\x1d\x93\x1c\x53\x4f\x86\x97\x0e\x04\xde\xf3\xd6\x12\x82\x4b\x87\x24\xe3\x2c\x0b\x75\xf2\xb5\x03\x81\xf7\xbc\x75\x0d\xc1\x6b\x87\x84\xe3\x2c\x4b\x75\xf2\xcc\x81\xc0\x7b\xde\x9a\x41\x70\xe6\x90\x74\x9c\x65\x2b\x9d\x3c\x74\x20\xf0\x9e\xb7\x86\x10\x1c\x3a\x64\x35\xce\xb2\x85\x4e\xbe\x93\xc9\x23\xe7\xee\xce\x21\x8b\x31\x1e\xf9\x63\x2a\xc8\x74\xd4\x1e\x53\xf7\x18\xc8\x09\x99\x8e\x3a\x63\xca\x2b\x7d\x71\x1b\x8d\xd9\x92\x9a\x21\x12\x59\xe6\x91\xfd\x7d\x4e\x18\x89\xf1\xda\x7e\x72\x6d\x8a\x8b\xe3\x61\xbd\x8e\xae\xe9\xdc\xd2\x1b\x44\xaa\xba\x6b\x8c\xc9\xdc\xf6\x30\x76\xad\x26\x99\xed\x29\xe0\x1f\x5c\xc5\x6c\x04\xc1\xe0\x5a\x05\x0a\xef\x31\x1f\x36\xbd\xc7\x28\x58\xa9\x29\x7c\x8a\x1c\x2b\xb8\xed\xad\xde\x7a\x46\xa2\x64\xa5\x6d\x0e\xca\x35\x14\x27\x22\x9a\x32\x70\x56\x3f\x0d\x6f\x22\x11\x2e\x52\xec\x90\x7f\x70\x0c\x75\x6b\x8f\x36\xef\x91\xf3\x4f\xed\xda\x73\x15\x47\x5f\x94\xb7\xcf\x2f\x3a\x46\xef\x01\xfa\xb5\xa9\x2f\x85\x3f\xec\x7f\x3a\xe4\x60\xd4\x68\x8e\x07\x17\xb3\x06\xbc\xf6\x73\xef\x91\xf6\x1a\x0f\x0e\x94\x43\xe4\x7f\x3a\x95\xbe\x85\x8b\x97\x08\x3d\xd6\x7e\x6c\x3f\x39\x02\x2f\xa4\x2b\xff\xca\xb2\x9a\x87\x0b\xdf\x4a\x96\x07\x24\x13\xfa\x89\x46\xea\xf8\x2d\xbf\xd3\x72\x1d\xc2\xe8\x27\x41\x78\x6b\x1e\xd3\x6b\x4e\x94\x0f\x9e\x0a\x4b\x5d\x81\x1c\xe3\x08\xc8\x21\xa3\xb1\xd2\xa2\x55\xa2\xad\xfc\xf1\x3d\x22\x11\x22\xca\xa1\xcf\x2e\x10\xe0\x97\xe8\x9b\x10\x62\xdb\xf7\x59\x0e\x01\xdc\x32\xc4\xc9\xed\xc0\x7c\x20\x1c\x34\x4c\x13\x65\x31\x30\xa1\x22\x9b\x76\xf0\x05\xed\xfd\xa4\x9e\xf1\x61\x0a\xcb\x07\x14\x33\xb5\xf2\x7a\x7e\xb8\x95\xf9\xa3\x14\x54\x81\x53\x92\xcf\xc8\x95\xec\x37\xf3\xda\xc5\x0d\xe1\xad\x99\x7e\xd1\x80\x9e\x43\x4a\xaa\x9e\x1d\xa5\x97\x64\x87\xf2\x80\x25\xef\xca\xd5\xd3\x1d\x93\x53\xd5\x5a\x69\x73\x95\x37\xa7\xfa\x0d\xc4\xa2\x10\x02\x18\xd6\x9a\x99\x2a\xc4\x4e\x0c\xa2\x7f\x0a\xf2\x1d\x0a\x9d\xe5\xee\x80\x8c\x0a\xbb\x6a\x75\x82\x6f\x34\x6c\x18\xc5\xaa\xf4\x8c\xcd\xa3\x98\xa9\xfb\x5c\xba\x10\xb9\x01\x9d\x8e\xd9\x72\xe7\x64\x0c\x05\x8a\x57\xa6\x68\x2c\xb4\x59\x18\x8a\x69\x6a\x9e\xc9\x88\x68\x6c\x54\x81\x31\x41\x1c\x56\xc1\x53\x24\xe8\x10\x45\x44\x60\x0c\xfd\xc3\x62\xa1\xab\x89\x40\x2f\x3d\x52\xda\xe4\x64\x55\xbc\xca\xad\x0d\x0b\x65\x42\xbd\x8e\xac\x50\xa9\xfc\x40\x95\xdc\x4e\x08\x4a\xe5\xf5\x53\xc8\x10\x2a\xcc\x13\x64\xa8\x18\xa1\xaa\x4d\xfa\x2d\x8a\x44\xa9\xab\xb7\x87\xe9\xc1\xce\xb6\x06\x2b\x96\x34\x78\x11\x7d\x65\xef\xe3\x48\xa4\xf4\x4f\x52\x56\x29\xff\x43\x9e\x2e\x36\x7d\xb7\x98\x09\x50\xbc\xb0\xf1\x2b\x0f\x1c\x93\xc3\xb2\x9f\xa8\xd7\xd1\xaf\x9c\x32\xb0\xbc\xdb\x00\x7c\x76\xcd\x59\x7a\x9d\x2c\x76\x1c\x16\x15\xec\x7d\x4a\xdf\x73\xd5\xd3\x79\x65\x62\x00\x51\x01\x82\x1f\x2a\x88\x93\xc2\xf9\xac\x5e\x47\xb0\x1f\x53\xd1\xf4\xb0\xac\x11\xaa\x2c\x7b\x37\xae\x54\xd2\x61\xe0\x4d\x18\x09\xa2\x64\x58\x60\x8c\x68\x8e\x5f\xc7\xcd\xde\xa0\x70\x84\x1c\xf0\xe3\xa6\x37\x70\x16\x61\x2a\x94\x17\x27\x7e\xec\xaa\xe0\x09\x9c\xa2\x8e\x3d\x95\x59\x87\xfc\x81\xa3\x1f\xfb\x95\xa1\xbe\x0a\xa9\x82\x05\x4c\x58\xce\x46\x28\xa1\x88\xed\xcb\xb3\xe1\xeb\xee\xe4\xf9\xf0\x8c\xde\x9f\x3c\x39\x7b\x76\xf6\x6a\xf8\x6c\xf2\xfa\xed\xd3\x27\xaf\x83\xad\xa7\x59\x1c\x52\xce\x31\x39\x7d\xf6\xf4\xed\x9b\x93\xd3\xed\x9c\x81\x64\x49\x36\x32\x0f\xab\xf3\x81\x97\x13\xc8\x6b\x27\x3b\x44\x96\x0c\x1c\x5d\x2f\x80\xc9\x6b\x2b\xaa\x80\xf8\xa1\x15\xa5\xa0\x9d\x3f\x7b\xf6\xf7\x00\x9e\x62\x68\x8e\xce\xc7\xe7\xe7\x0e\x19\xbe\x7d\x73\xf6\x32\xaf\x40\xf6\xc3\x1a\x57\x78\x12\xcf\xc5\x79\x0c\x69\x61\x74\x1e\x13\xa1\x90\xa4\x8a\xdd\xe4\xa3\x70\xac\x19\x4f\xf8\x52\x16\x33\x15\x53\x92\xb3\xbf\x56\x11\x67\xf5\xba\xfe\x00\xf9\x58\x5a\xaf\xaf\x0c\x8b\xba\x42\x21\xcc\x80\x68\x8e\x12\x13\x97\xe8\x38\x09\x75\x41\xad\xd3\xe7\xd3\x30\x8e\x13\x51\x9b\x47\xf1\xac\xb6\x4c\x66\xab\x05\xab\xfd\xcd\x69\x84\x0d\xe7\x6f\x0e\xde\x53\x67\xd5\x45\x6b\x9a\xcc\x18\x75\x86\x6f\x4f\xde\xbf\x7e\x36\x79\xf3\xf6\x6c\xf2\xfc\xed\xfb\x37\x27\x0e\x59\x80\x58\x6a\x4a\x25\xee\xf4\x9e\x7d\xb9\x49\xb8\x48\x83\xfb\xf5\x7a\x4f\xb6\x61\xe4\x6a\x27\xdb\xd3\x96\x4e\x22\x9b\x17\x14\x9c\x42\x46\x6f\x3c\x62\xb9\x5d\x45\x84\x78\x96\xc9\xad\x6c\x4a\x8a\x82\x46\x8e\x9f\xbb\x5e\x1e\x85\x63\x93\xb8\x36\xce\xed\x92\xef\xe9\x2e\x12\x52\xf7\xe7\xf0\x38\x36\x6e\xe9\xc2\x46\x03\x47\x28\x96\x7d\x5e\x58\x57\xad\x11\x46\xf7\x5e\x30\xda\x24\x47\x8e\x64\xb1\x94\x7b\x16\x67\x8f\x21\xbf\xb0\xe1\x42\x31\x65\xc8\xeb\x4a\x3a\x1d\xb7\x26\x13\x96\x0e\xa1\x33\x07\x71\x70\x6f\x4e\xfe\xf1\x7a\x2f\x32\xee\x6c\x5b\x93\xcb\xf0\x92\x2d\xde\x25\x8b\xbb\x79\xb4\x58\xd4\xeb\xce\x2a\x56\xdb\xc6\xac\xb0\x36\x9c\x26\x71\x9a\x2c\x58\xbd\xae\x3f\x5a\xb7\x21\x8f\xcb\x21\xe4\xfc\xff\x01\xd0\xc1\x8d\x86\x24\x59\xc3\x45\x12\xce\xd8\x4c\x99\x02\x8a\xeb\x30\xae\x25\xf1\x94\xd5\x12\x75\x78\xa9\xdd\x84\x57\xac\x55\x3b\x93\x9f\x32\xc4\x93\xcb\xf0\x72\x71\x07\xef\x60\xcf\x58\x1a\xf1\xf0\x72\xc1\x0e\xa2\x58\xb0\x78\xa6\x9f\xb0\x5e\x86\x77\xb5\xeb\xf0\x33\x3c\x6f\x94\xb2\xbf\x56\x2c\x9e\xb2\xb4\x16\xcd\x6b\x92\xea\x30\xb9\x33\xe4\x0f\x64\xd7\xc0\xda\x99\xd5\x0c\x3a\xea\x4d\x6c\xb9\x9b\x47\x6c\x56\x53\x85\x45\x14\x2e\x16\x77\xad\xda\xab\x79\xed\x2e\x59\xd5\x66\x49\x2d\x66\x6c\x56\x13\x09\x20\x5e\x2a\xbe\xd1\x06\x65\xfc\xb9\xd1\xe2\x83\x38\x79\x9a\xc4\xf3\x45\x34\xcd\x8d\x40\x25\xac\xcb\xbb\x9b\x30\x4d\x01\x9a\xb6\x96\x84\x67\xcf\x76\x0c\x00\xdd\x77\xd7\xe4\xde\xeb\x06\x5e\x97\xf8\x81\xbf\x1e\x13\xff\x9b\xa3\xdf\xc6\x84\xa1\xae\xfc\xd3\x91\x7f\x3c\x0f\xfe\xba\xf0\x17\xd2\xe4\xf9\x9b\x21\x0f\x52\xfb\xf2\xcf\xa1\xfc\xd3\x93\x7f\x8e\xe4\x9f\xb6\xdb\x53\x3f\xf2\x8c\x7a\xef\xb9\x81\xe7\x12\xcf\x0b\x3c\x8f\x78\x7e\xe0\xf9\xc4\x6b\x07\x5e\x9b\x78\x9d\xc0\xeb\x90\x76\xd0\x26\x6d\xb7\x17\xb4\xdd\x1e\x69\xbb\xfd\xa0\xed\xf6\x49\x27\xe8\x90\x6e\xd0\x25\xbd\xa0\x47\xfa\x41\x9f\x1c\x06\x87\xe4\x28\x38\x5a\x8f\x49\x7b\x1b\x79\x86\xfc\x3e\xd4\xef\x2b\x84\x7c\xaf\xa7\x7e\xba\xea\x47\xa5\xf9\xae\xfa\xd1\x91\x47\xea\xa7\xaf\x22\xf5\x8f\x2a\xe7\xfb\xea\xa7\xad\x7e\x3c\x95\x53\x87\x54\x0d\xbe\x86\x09\x50\xbc\x43\xd5\x33\x87\xaa\x53\x0e\x55\x81\xb6\xfe\x51\xd5\xba\x1a\x8a\xfe\x51\x35\xb8\xfa\x47\x81\x76\x15\x68\xb7\x8b\xe5\xfa\x53\x1d\xe8\xbb\x0a\x33\x57\xd5\xe7\x6a\xac\x75\x7d\x6a\x70\x0e\xbb\xea\xa7\xa7\x7e\xfa\xea\xe7\x50\xfd\x28\x04\x8f\x54\x81\x23\x35\x8e\x47\x0a\xcf\x23\x35\x92\x47\x0a\xca\x91\x82\x72\xa4\xa0\x1c\x29\x28\x47\x0a\xca\x91\xaa\xd6\x55\x4d\xe9\xa9\x1e\xec\xab\x50\x5f\x21\xd8\x53\x08\xf6\x74\x16\xd5\xcc\x9e\x6a\x43\xdf\x83\x16\xf5\x55\x33\xbb\x2a\xb2\xab\xca\x75\x55\xb9\xae\xaa\xa1\xa7\x3a\xa4\xa7\x72\xf6\x54\x87\xf4\x74\x0d\x2a\x4b\x5f\x65\xe9\xab\xb4\xbe\xc6\x45\x61\xad\x42\x9e\x42\xc9\x33\x91\xaa\x0b\xd4\x0c\xf1\x14\x68\x4f\x21\xe8\xf5\x74\xa4\x2e\xa7\x22\xfb\x3a\x8b\xea\x33\x55\xbb\xd7\xd5\x30\x55\xd7\x75\x61\x8c\xbc\xbe\xce\xa2\x6a\x50\xc8\x7b\xaa\xd1\x5e\x57\x75\x6b\x57\x87\x54\x16\xd5\x5a\x4f\x21\xef\xe9\xf6\x75\x54\xfb\x3a\xba\x27\x74\xa4\x6a\x6d\x57\xf5\x67\x57\xf5\x67\x57\xb5\xbd\xab\xba\xa7\xad\xa7\x9b\xee\x56\xd5\x13\x6a\xa4\x7d\x35\xd2\xbe\x6a\xbb\xaf\xe6\xa7\xaf\x26\x8a\xaf\xa6\x86\x7f\xa8\xd3\x54\xf1\xc3\x1e\x8c\x91\x9a\x52\xbe\x9a\x44\xbe\x9e\xc9\x6a\x5e\xfb\x6d\x5d\xad\xca\xd2\x56\xc0\xda\x6a\x34\xdb\xba\x0d\xaa\xa2\xb6\xaa\xa1\xad\x6a\xe8\x28\x28\x1d\x05\xa5\xa3\xa0\x74\x74\x33\x55\xf1\x4e\x17\x13\x61\x36\x3d\xca\x50\xd7\x07\xb2\xd1\xed\x04\x5e\xb7\x43\xbc\xae\x24\x5e\x5d\xe2\x75\x7b\x81\xd7\xed\x11\xaf\xdb\x0f\xbc\x6e\x9f\x78\xdd\xc3\xc0\xeb\x1e\x12\xaf\x7b\x14\x78\xdd\x23\xe2\xf5\xdc\xc0\xeb\xb9\xc4\xeb\x79\x81\xd7\xf3\x88\xd7\xf3\x03\xaf\xe7\x13\xaf\xd7\x0e\xbc\x5e\x9b\x78\xbd\x4e\xe0\xf5\x3a\xc4\xeb\x75\x03\xaf\xd7\x25\x5e\xaf\x17\x78\xbd\x1e\xf1\x7a\xfd\xc0\xeb\xf5\x89\xd7\x3b\x0c\xbc\xde\x21\xf1\x7a\x47\x81\xd7\x3b\x22\x5e\xdf\x0d\xbc\xbe\x4b\xbc\xbe\x17\x78\x7d\x8f\x78\x7d\x3f\xf0\xfa\x3e\xf1\xfa\xed\xc0\xeb\xb7\x89\xd7\xef\x04\x5e\xbf\x43\xbc\x7e\x37\xf0\xfa\x5d\xe2\xf5\x7b\x81\xd7\xef\x11\xaf\xdf\x0f\xbc\x7e\x9f\x78\xfd\xc3\xc0\xeb\x1f\x12\xaf\x7f\x14\x78\xfd\x23\xe2\x1d\xba\x81\x77\xe8\x12\xef\xd0\x0b\xbc\x43\x8f\x78\x87\x7e\xe0\x1d\xfa\xc4\x3b\x6c\x07\xde\x61\x9b\x78\x87\x9d\xc0\x3b\xec\x10\xef\xb0\x1b\x78\x87\x5d\xe2\x1d\xf6\x02\xef\xb0\x47\xbc\xc3\x7e\xe0\x1d\xf6\x89\x77\x78\x18\x78\x87\x87\xc4\x3b\x3c\x0a\xbc\xc3\x23\xe2\x1d\xb9\x81\x77\xe4\x12\xef\xc8\x0b\xbc\x23\x8f\x78\x47\x7e\xe0\x1d\xf9\xc4\x3b\x6a\x07\xde\x51\x9b\x78\x47\x9d\xc0\x3b\xea\x10\xef\xa8\x1b\x78\x47\x5d\xe2\x1d\xf5\x02\xef\xa8\x47\xbc\xa3\x7e\xe0\x1d\xf5\x89\x77\x74\x18\x78\x47\x87\xc4\x3b\x3a\x0a\xbc\xa3\x23\xe2\xbb\x6e\xe0\xbb\x2e\xf1\x5d\x2f\xf0\x5d\x8f\xf8\xae\x1f\xf8\xae\x4f\x7c\xb7\x1d\xf8\x6e\x9b\xf8\x6e\x27\xf0\xdd\x0e\xf1\xdd\x6e\xe0\xbb\x5d\xe2\xbb\xbd\xc0\x77\x7b\xc4\x77\xfb\x81\xef\xf6\x89\xef\x1e\x06\xbe\x7b\x48\x7c\xf7\x28\xf0\xdd\x23\xe2\x7b\x6e\xe0\x7b\x2e\xf1\x3d\x2f\xf0\x3d\x8f\xf8\x9e\x1f\xf8\x9e\x4f\x7c\xaf\x1d\xf8\x5e\x9b\xf8\x5e\x27\xf0\xbd\x0e\xf1\xbd\x6e\xe0\xcb\xdd\xc9\xeb\x05\xbe\xd7\x23\xbe\xd7\x0f\x7c\xaf\x4f\x7c\xef\x30\xf0\xbd\x43\xe2\x7b\x47\x81\xef\x1d\x11\xdf\x77\x03\xdf\x77\x89\xef\x7b\x81\xef\x7b\xc4\xf7\xfd\xc0\xf7\x7d\xe2\xfb\xed\xc0\xf7\xdb\xc4\xf7\x3b\x81\xef\x77\x88\xef\x77\x03\xdf\xef\x12\xdf\xef\x05\xbe\xdf\x23\xbe\xdf\x0f\x7c\xbf\x4f\x7c\xff\x30\xf0\xfd\x43\xe2\xfb\x47\x81\xef\x1f\x11\xbf\xed\x06\x7e\xdb\x25\x7e\xdb\x0b\xfc\xb6\x47\xfc\xb6\x1f\xf8\x6d\x9f\xf8\xed\x76\xe0\xb7\xdb\xc4\x6f\x77\x02\xbf\xdd\x21\x7e\xbb\x1b\xf8\xed\x2e\xf1\xdb\xbd\xc0\x6f\xf7\x88\xdf\xee\x07\x7e\xbb\x4f\xfc\xf6\x61\xe0\xb7\x0f\x89\xdf\x3e\x0a\xfc\xf6\x11\xf1\x3b\x6e\xe0\x77\x5c\xe2\x77\xbc\xc0\xef\x78\xc4\xef\xf8\x81\xdf\xf1\x89\xdf\x69\x07\x7e\xa7\x4d\xfc\x4e\x27\xf0\x3b\x1d\xe2\x77\xba\x81\xdf\xe9\x12\xbf\xd3\x0b\xfc\x4e\x8f\xf8\x9d\x7e\xe0\x77\xfa\xc4\xef\x1c\x06\x7e\xe7\x90\xf8\x9d\xa3\xc0\xef\x1c\x11\xbf\xeb\x06\x7e\xd7\x25\x7e\xd7\x0b\xfc\xae\x47\xfc\xae\x1f\xf8\x5d\x9f\xf8\xdd\x76\xe0\x77\xdb\xc4\xef\x76\x02\xbf\xdb\x21\x7e\xb7\x1b\xf8\xdd\x2e\xf1\xbb\xbd\xc0\xef\xf6\x88\xdf\xed\x07\x7e\xb7\x4f\xfc\xee\x61\xe0\x77\x0f\x89\xdf\x3d\x0a\xfc\xee\x11\xf1\x7b\x6e\xe0\xf7\x5c\xe2\xf7\xbc\xc0\xef\x79\xc4\xef\xf9\x81\xdf\xf3\x89\xdf\x6b\x07\x7e\xaf\x4d\xfc\x5e\x27\xf0\x7b\x1d\xe2\xf7\xba\x81\xdf\xeb\x12\xbf\xd7\x0b\xfc\x5e\x8f\xf8\xbd\x7e\xe0\xf7\xfa\xc4\xef\x1d\x06\x7e\xef\x90\xf8\xbd\xa3\xc0\xef\x1d\x11\xbf\xef\x06\x7e\xdf\x25\x7e\xdf\x0b\xfc\xbe\x47\xfc\xbe\x1f\xf8\x7d\x9f\xf8\xfd\x76\xe0\xf7\xdb\xc4\xef\x77\x02\xbf\xdf\x21\x7e\xbf\x1b\xf8\xfd\x2e\xf1\xfb\xbd\xc0\xef\xf7\x88\xdf\xef\x07\x7e\xbf\x4f\xfc\xfe\x61\xe0\xf7\x0f\x89\xdf\x3f\x0a\xfc\xfe\x11\xf1\x0f\xdd\xff\x8f\xb6\x77\xdd\x6e\xdc\xd8\xd2\x04\xff\xeb\x29\x44\xf4\x29\x54\x44\x72\x13\x02\xc0\x7b\x48\x21\x76\x3a\xad\xf4\xc9\x3e\xce\x4b\xa5\xf2\xd8\x75\x8a\x87\xa5\x05\x91\x41\x11\x4e\x12\xe0\x01\x40\x29\x65\x81\xb5\xdc\x33\xd3\x73\x5d\x6b\x1e\x60\xfe\x4c\xff\x9d\x5f\xf3\x0e\xf5\x26\xed\x79\x91\x59\x71\x03\x02\x24\xc8\x94\x5d\xd5\xf6\x5a\x29\x30\x00\x04\xe2\xba\x6f\xb1\xf7\xb7\x89\x3f\x70\xc1\x1f\x78\xc4\x1f\x78\xe0\x0f\x7c\xe2\x0f\x7c\xf0\x07\x6d\xe2\x0f\xda\xe0\x0f\x3a\xc4\x1f\x74\xc0\x1f\x74\x89\x3f\xe8\x82\x3f\xe8\x11\x7f\xd0\x03\x7f\xd0\x27\xfe\xa0\x0f\xfe\x60\x40\xfc\xc1\x00\xfc\xc1\x90\xf8\x83\x21\xf8\x43\x97\xf8\x43\x17\xfc\xa1\x47\xfc\xa1\x07\x5d\x9f\x74\xb9\xfc\xd3\xa9\x15\x21\x38\x57\xdc\xa1\x41\x8e\x40\x6b\x70\xe6\xcb\x20\x7b\x1b\xac\xb7\xf0\xe4\x0f\x7d\xe2\x0f\xfd\xa2\xa6\x6e\x7d\x4d\xed\x43\x35\x85\xd1\x74\xb9\x99\xb1\x54\x54\xd5\x26\xfe\xb0\x5d\x54\xd5\xab\xaf\xaa\xb3\x5f\x95\xc4\xa5\x75\x58\x94\x25\xa1\xaa\xaa\x43\xfc\x61\xa7\xa8\xaa\x5f\x5f\xd5\x3e\x8d\xd5\x55\xdd\xb1\xec\xfd\x43\xf4\x21\x89\xd7\x2c\xc9\x1e\xbf\x65\xe9\x34\x09\xd7\x59\x9c\xc8\xca\xbb\xc4\x1f\x76\x8b\xca\x07\xf5\x95\xf7\x0e\x56\x2e\xac\xab\xb2\xa6\x1e\xf1\x87\xbd\xa2\xa6\xe1\xd7\x95\x10\xc9\xe2\x7c\x2e\x8d\xec\xd6\xfe\x21\x89\x57\x61\xca\x9c\x79\x18\x71\x99\x9b\xd7\xaf\xb7\xef\xb0\x4f\xfc\x61\xbf\xf8\x8e\xe7\xd6\x37\x79\xb0\x5f\xa9\xb4\x2e\x3b\xeb\x60\x76\x15\xcd\x44\x93\x07\xc4\x1f\x0e\xca\xaa\x6a\x14\x27\x5e\xd5\xf0\x58\x55\xd7\x59\x90\x64\xa2\xb2\x21\xf1\x87\xc3\xb2\xb2\x1a\x39\x9c\x8b\xcc\xde\xc1\xca\xb2\x24\x5c\x7d\x0c\xef\x16\xbc\xb6\xb6\xeb\x91\xb6\x5b\x2e\x6a\xaf\x56\x30\x6e\x73\x99\xed\x48\x6d\xdf\xb3\xb9\xac\xcc\x25\x6d\xd7\x2d\x2b\xab\xdd\x22\x6d\x77\x67\x8b\x78\x5d\x0f\x3b\x73\x64\x05\xe9\x63\x34\x7d\x93\xb1\x24\xc8\xe2\xc4\x92\xac\xdb\x23\x5e\xd7\x83\xb6\xeb\x93\xb6\x2b\xaa\xac\xdd\x2b\xed\xdd\x1a\x07\xd8\xb9\x5b\xc6\xb7\xc1\x92\x57\xc2\xd9\x1d\xb4\x7d\xd2\x16\x15\xd4\xec\x90\xf2\xd5\x9d\x23\xae\x52\x5b\x2e\x01\x6e\xb0\xd4\xf9\x3f\x3d\xae\x99\xb4\x10\xb0\xa6\xc5\xf5\x44\xae\x1e\x06\x85\x29\xa3\x51\xc2\x73\xb0\xed\x16\x9e\xf8\x97\x6b\x36\x94\x4a\xe3\x85\xfc\x01\x3e\x39\xd8\x8a\x06\xbf\x38\xfa\xd9\xe8\x54\xe2\xdd\xef\x7e\x95\x73\xaa\x01\xff\x74\xcd\x76\x53\xb8\x20\xc5\x47\x9f\x94\x86\x4a\x2c\xdf\xe9\x39\x5d\x6b\x7b\xb2\x0b\xa9\x78\x7a\x73\xc3\x6c\x1b\xdd\xdc\x30\x1a\x61\xd5\xa7\x9a\xdd\xa7\xfb\xe4\xf5\xea\xfb\x54\x60\xc3\xf0\x6e\x41\x69\xf3\xd3\x96\x18\xa6\x51\xe3\x13\xe9\xdd\x70\xea\x91\x5d\x2f\x38\x23\x19\x6e\x09\x50\xb2\x15\x0e\x07\xa7\xfe\xfe\xd3\x10\xd5\x3c\x0f\x91\x7e\xa3\x5d\xf7\x86\x71\x32\x66\xbe\x03\x21\xde\x6e\x0f\x3a\xe5\x31\x65\x96\xcf\x0c\x9b\xfc\x96\x4f\x84\xc7\x45\x44\xae\x33\xd7\x10\x91\x72\x8c\x1a\x9c\x56\x61\xb4\x5f\x6f\xbf\x41\x15\x19\x94\x26\x10\x4d\x63\xd1\xd3\x16\xac\xc0\x82\xa7\x3b\x96\x91\x9a\xd7\xb6\x5b\xec\x04\x5b\x2c\xa8\x1a\xf1\xdb\xbc\x01\x35\xa4\xc7\x58\x84\x10\xf2\xbf\x1d\xec\xcc\xe2\xa9\x68\x3f\xc4\x34\x42\x21\xb6\xed\x08\x85\x12\xe5\x97\x5d\x2d\x19\xbf\x73\x68\xc1\x6a\x7b\xda\x68\xe7\x79\xc4\x30\x79\x12\x83\xc1\xe5\x2b\xce\x7e\xe5\xda\xf4\x6b\xe8\x57\xd1\xa2\x8e\x6c\x11\xd7\xbd\x63\xfe\x77\x88\x21\xe0\xe5\x3d\x01\xb5\x83\xb8\x16\xbe\xa9\x0d\xe5\x13\x27\xca\xb0\xa0\xcc\xde\x38\xaf\x61\x26\xfe\x7e\x07\x6b\xf1\xf7\x1a\x56\xe2\xef\x07\xb8\x17\x7f\xbf\x81\x47\xf1\xf7\x47\xb8\xa3\xb3\x51\x48\xc2\x71\x36\xc9\x73\xc4\xff\xd0\xa7\x2d\x86\x5b\x33\x6b\x1f\xdc\xd0\xd9\x28\x22\xeb\x51\x34\xce\x26\x04\x45\xe2\xd9\xa7\x2d\x36\x91\x94\xe2\x04\x2d\x4f\xc3\xe8\x74\x26\x51\x83\x30\x24\x18\x4d\x69\x63\x61\xdb\x37\xb6\x5d\x58\xbd\x6f\xc6\xcb\x09\xb6\xed\x14\xdd\xc1\x12\xe7\x39\x9a\xd3\xe9\x88\x97\x91\x64\xbc\x9c\xc0\xdd\x78\x39\xa1\x33\xdb\xae\x21\x41\xfc\xa1\x11\x7f\x88\xdc\xdb\xf6\x74\x14\xa3\x39\x44\x98\x3c\xda\x36\xbf\x41\xe9\x7c\xb4\xef\xe5\x5c\x94\x28\xfb\xaa\x8a\x71\x14\xe6\xa0\x20\x9a\x2a\x58\x47\xb5\xef\x8a\xb5\xab\x2c\x80\x6a\x1b\xba\x7a\x9b\x44\xec\xe1\x94\x9d\x54\xb7\xa6\x28\x43\x19\xde\xd9\x83\xaa\x98\xef\xce\xdd\x12\xc3\x56\x59\x6c\x9b\x45\x98\x9a\x3b\xa7\x4c\xb3\x51\x5a\xcf\x0d\x78\x76\xc8\xb6\x68\x8e\xc9\xca\x1c\xa4\x82\x56\xcd\x47\x31\x7a\xad\x4a\xc5\xfe\x85\x39\x26\x73\x58\xd9\x36\x42\x77\xce\x7d\x98\x64\x9b\x60\x99\xe7\xe5\x35\x9f\x6a\xcc\x07\x70\x0e\x7c\x31\x7c\xb4\xed\x5b\xdb\x6e\xdc\x8e\x97\x13\xdb\x0e\xd0\x2d\xf0\x0a\x30\xde\x9e\x6c\x9c\xd7\xd4\x83\x8d\xf3\x1d\xf5\x61\xe3\x5c\xd3\x0e\x6c\x9c\x0f\x74\x00\x1b\xe7\x1b\xea\xf5\x60\xe3\xfc\x48\xdb\xfc\xce\x9f\x69\x8f\xdf\xfa\x48\x3d\x7f\x60\x30\xa7\x4d\xc1\x91\x3c\xae\x2e\x81\xda\x0c\x5c\xf4\x06\xae\x68\x08\x2a\x51\xc3\x84\xeb\x37\x5b\x96\x3c\x16\xb0\x7c\x0c\xe1\xed\x54\x24\xd0\xcd\xca\xb8\xda\xad\x62\x3e\x7e\x0d\x2b\xde\xe5\x00\x75\x16\xd6\x87\x30\x9a\xc5\x0f\xb6\x2d\xff\x3a\x6f\x83\x6c\x41\x85\xb3\xee\x48\x96\x90\xba\x97\x52\xb6\x9c\xdb\x36\xff\xd7\x7c\x81\xff\x26\x7a\x4a\x90\x65\xb8\x8b\x58\x18\xe1\x3a\x6e\x73\x27\xb8\xcd\x5d\xc1\x6d\xfc\x1a\xe6\x2f\x3b\xf1\xb4\x75\x16\x41\x6a\x48\x9f\x07\x38\x4f\x89\x60\x27\x69\xba\xc8\x6c\xa3\x2a\xaf\x11\x0c\x0a\x3a\x34\x94\x74\xa8\xed\x9a\x54\x8f\x21\xdf\xc5\xa3\x03\x07\x72\x91\x33\x17\x25\x21\xf2\x44\x32\x23\x72\xe0\x39\xc6\xa9\x4c\x02\x92\x5d\x73\xc5\x19\xb8\x5a\x39\x84\x36\x17\xa5\x78\xb3\x6a\xa4\x86\x2a\xc7\x70\xb1\x6d\xff\x76\xce\xc1\x90\xef\x61\x64\xcd\xc2\x7b\x0b\x3f\x97\x87\xc8\xe6\x71\x2d\x1c\x0a\x7e\x52\x23\x59\x1c\xe3\x0b\xfb\x89\x79\x46\xf2\xb4\x94\xb2\xda\xd3\x45\x3d\x39\xc7\xe4\x8c\xbe\x62\x5b\x7d\xc9\x24\xda\x1e\x67\x12\xb5\xbd\x3e\x49\x9c\xb9\x9a\xb6\xda\xfb\x7b\x93\xa4\xa5\x94\x8c\xc6\x28\x13\x98\xae\x5c\xf8\x80\x10\x97\x1b\xef\x34\xd0\x59\xf6\xe5\xe6\x4b\xf1\xd3\x96\x8b\x8e\x77\x2c\xb3\xc2\xe8\x34\xc9\x73\x2b\x55\x97\x7b\x32\x9c\xf5\x52\x01\x40\x4a\x39\x2e\xdd\xac\xf9\xb8\xb1\x59\x29\xc7\x49\xaf\x12\xf1\xb6\x6d\x23\xb9\x58\xa4\x2e\x84\xe5\x9a\xf1\xfa\xc4\xeb\x83\x9a\x1a\xae\x10\x43\xdb\x23\x6d\x6f\x3b\xe1\x2b\xe8\x59\x53\x53\xee\x8a\x27\x16\x6d\x56\x4c\x9c\x6f\x90\x06\xf2\x6c\x86\x41\x1e\xa6\x6f\x74\x99\xcf\xcb\x1e\x92\x30\x53\xbf\x3b\xfc\xb7\x68\x0e\xc9\x34\xa9\x69\x1f\x17\x31\x0e\xee\xcc\x42\xd2\x2d\xe4\x40\x79\xda\x1f\x8a\x88\xfc\x3a\x22\x8f\x12\x11\x6d\xaf\x12\x74\xd8\x76\x23\x42\x21\x55\x80\xf9\x06\x1e\xb1\xa8\xe0\xc0\xdb\xca\x69\xe7\x2b\x2f\x37\xfe\x6d\x9f\xdf\x9b\xf6\x57\x41\xf4\xf7\xd9\xe9\x34\x8e\xee\x59\x92\x29\xd9\xfd\x34\x8b\x4f\xd7\x49\xb8\x0a\xb3\xf0\x9e\x9d\xca\x69\xc7\xa6\x10\xdf\x3e\x26\x28\xf9\xf8\x24\x42\x91\xf3\x1d\x3c\x49\xbd\x87\x08\xe1\x49\x6e\x5b\x9f\xf8\xbe\xe4\x33\xbc\x96\x1a\xde\x52\xb0\xdc\x71\x67\x32\xf6\x7a\xe2\x5c\x52\x72\xe4\xc4\x64\xc7\xa5\x18\xdb\x3e\xc8\x4d\x18\xea\x1c\x9f\x62\x4d\xe6\x4d\xc4\x50\xeb\x9d\x2e\xab\xd5\x74\x0a\xb4\xc9\xa6\x58\xf1\x9d\x01\xe9\x88\xf1\x38\xc8\x0d\xb8\x4a\xe9\x63\x64\x6d\xa2\x74\x1a\xaf\xf9\x52\x4d\x2d\x4e\x23\xa4\xf5\xa4\x14\xd4\x24\x86\x75\x28\x02\xa1\x19\xea\xfb\x18\x85\x10\x01\x17\xf9\x0e\xe8\x62\xe3\x68\x32\x66\x13\xca\xd9\x2a\x57\x4e\x7d\xe2\x75\x7d\xe8\xfb\xa4\xcf\x35\xcb\x76\x0d\x03\xa9\x58\x22\x8a\xc6\xf9\x43\x8c\x1a\xee\x31\xed\xa8\x70\xd6\x46\xc9\x48\x8e\x9d\x92\xc5\x88\x27\xd6\x84\xe7\x0f\x89\xe7\x8b\x83\xac\xa3\xfc\x61\xd7\xdf\x4f\xee\x32\xc4\x4c\xc1\x2f\xc3\x79\x5e\x08\xa5\x91\x6d\x47\x2a\x03\xda\xce\x2c\x24\x4d\x8b\x9c\x86\xd1\x34\x4e\x12\x26\x0e\x12\xef\xe3\x69\x70\x40\xd5\x6d\xd7\x70\x85\xea\x22\xeb\x1f\x59\x64\x82\xa2\x0d\x3c\x32\x10\x54\xec\x6b\xf6\x9d\x62\x54\x3b\xbe\x52\x16\xda\x8a\x11\x78\x1d\xcf\x1c\xe3\xf1\xc4\x99\xc6\xeb\xc7\x1f\xc3\x6c\x11\x46\x79\x5e\xe7\x26\x12\xa9\x68\xcd\x80\xc6\x48\xa7\x65\xe3\x9a\x46\x88\x18\x04\x5c\xd5\x08\xb9\x6a\x87\x61\x49\x77\x65\xe4\x4b\x7f\x54\x76\xd0\x9f\x10\x39\xa0\x30\x95\x81\x4d\xab\x30\x42\xa5\x77\xcb\x72\x14\x90\x10\x2d\x21\xc0\xb8\xb5\x81\xa0\x95\x62\x98\x53\x4f\xa8\x0d\x9b\x8b\xd4\xb6\xd3\x8b\x4d\x73\x6a\xdb\x68\x4e\x5b\x1e\x6c\x9a\x74\xda\xf2\x20\x15\x7f\xf0\xf9\xb4\xd5\x3a\xbd\x74\xcf\xf1\x86\x4f\x52\x32\x4a\xc6\xe9\x84\x26\xe3\xcd\x84\x28\x37\x23\x5e\xc0\x1f\x9e\xf3\x17\xe7\x85\x8f\x8b\x58\x33\xed\x3e\xf1\xda\x7d\xf0\x3a\x1e\xf1\x3a\x1e\x78\x1d\x9f\x78\x1d\x61\xc9\xac\xe1\x14\xbf\x6f\x8c\xcd\xdd\xa2\x9d\x0e\xb2\x62\x58\x13\xce\x45\x8b\x61\x0d\xf6\x06\x51\x8c\x74\x70\xe9\x19\x43\xe9\x15\x43\x99\xf0\xf1\x0f\x0e\x8c\xf3\x92\x16\xa3\xbb\x19\x25\x24\x44\x1b\x48\xf0\xf9\xf2\x32\x3d\xc7\xd9\x38\x6d\x36\x27\xb4\x08\x06\xca\xbe\x32\x16\x47\xb8\x97\xd7\x71\x55\xf7\x3b\x9e\xea\x7e\xbb\xff\x15\x3d\xb8\xa2\x79\x29\x24\xe0\x14\x36\x7c\x4c\xf8\x3a\x0a\xd1\xa6\x18\x90\x29\x8d\x51\x00\x4b\xe1\x97\xc2\x6c\x3b\x69\xd0\x44\x8e\xe2\xf9\xf2\x72\x7a\x8e\xc3\x39\x42\x29\xdd\x8c\xa7\xcd\xe6\x04\x37\x68\x8a\x0b\x19\x5f\x38\xad\x15\x0f\x4e\x9b\x4d\xf1\x2c\xcb\xf3\x29\x5f\x25\x1b\x6c\xdb\x9b\xf1\x74\x42\x69\x89\x41\xcb\xef\xe5\xb9\x0e\x7c\x6d\x30\xdb\x6e\x79\xdb\xea\xc0\xb8\xc4\xeb\xb8\x7a\x80\xf8\xc0\x1c\x61\x3f\x5d\xa5\xa7\xf7\x8b\x55\xe1\x4b\x45\x5d\x0c\x14\x97\x94\x3b\xdd\xc3\x5c\x41\xee\x3d\x8f\x52\x06\x1b\xea\xf3\x3f\x4b\xda\xa6\x22\x26\xae\xc3\xff\xcc\x69\x8f\xff\x59\xd0\xae\x08\xd7\x99\xc3\x8c\x66\x79\x5e\xa4\x05\x33\x46\x38\x85\x75\xb9\xee\x56\x70\x0f\x8f\x7c\xc5\x61\xb8\xa3\x21\x7a\xe4\x8a\x7c\x84\x52\x58\x43\x1b\xc3\x0d\x0d\xd0\x5d\x31\xf2\x0f\xd4\x85\x2b\x9a\x8c\x66\x28\x83\x1b\x4c\x36\xe2\xc2\xc5\x6a\x75\x9d\xdf\x5c\x3e\x9c\x3f\xa8\x51\x5d\xe4\xf9\x03\x1f\x55\xce\xf0\xd1\x3d\xbd\x45\x2b\x7a\x37\x7e\x98\xc0\x03\x3c\x62\x60\x98\x3f\x93\xe0\xab\xf1\xc3\x84\xde\x17\x70\xf7\xf7\xb8\x9a\x07\xb1\xb0\x38\x35\x5c\xa9\x2f\x77\xb5\xbe\xbc\x92\xbf\x7b\xfa\xf7\x83\xd6\xa7\xaf\x64\x3e\xca\x95\xf2\x50\x0c\xe7\x68\xaa\xe7\xbf\x40\x7a\x9e\x8f\x5a\x1e\x11\x01\x74\x53\x72\x25\x67\xb3\xba\xbc\xa1\xd3\x25\x9d\x2e\x74\x3b\xa4\xdb\x81\x7e\x9f\xf4\xfb\x7c\x5e\x6b\x04\x02\x3d\xaf\xed\xb6\x5e\xef\xbe\x9c\x58\x3e\xc1\xc1\xb1\x6d\x2f\xd8\x4c\x0a\x1b\xfc\xc4\x17\xb8\xf2\xa6\x0a\xb9\x08\xcd\x57\xf7\x92\x53\xba\x00\x2d\x8b\x81\x5f\xd0\xcd\x68\xde\xf2\x88\x0b\x33\xba\xe1\xcd\xf7\x04\xac\xc4\x85\x2f\x80\x91\xce\xcf\x05\xbf\x5a\xf0\xf1\x9e\xe2\xa7\x94\x4e\xc7\x8b\x09\x2c\x9a\x74\x26\x53\x09\x72\x39\x9b\xff\x82\xcd\x68\x71\xe1\x92\xf9\x05\x5d\xec\x8b\xd8\x1f\xd9\x6c\x33\x65\xa7\x5c\xd2\x58\xad\xb3\xc7\xd3\x80\x0b\x01\xa7\x0f\x61\xb6\x38\x8d\xe2\xd3\x30\x0a\xb3\x30\x58\x16\xf2\x96\xf8\xec\x66\xb4\xb8\xa4\x2e\x99\x5f\x2e\xce\x79\xf5\x58\x36\xc0\xb6\x51\x4a\x33\x94\x82\x6c\x05\x2c\x4b\x3f\xf8\xb4\x6e\xb0\xdb\x6d\xd2\x6e\x97\xc3\x7c\x44\x64\x1a\x78\x6a\xfb\x0c\xd5\xf6\x11\xd2\x4b\xba\x66\xd3\x90\x4b\x2e\x07\x08\x8c\x4c\xdf\x59\xf8\x84\x09\x9c\xed\x7d\x6b\x11\xca\x28\x73\xa6\x71\x94\x66\xc9\x66\x9a\xc5\x09\xce\xf3\xac\x41\xa5\x28\x64\xdb\x8d\x10\x19\xc6\x15\x01\x29\x50\xa0\x74\x47\x02\x17\x5b\xe7\xf9\xc8\x68\x36\x8e\x27\x12\xcb\xbb\xc0\xc0\x36\x1c\x36\x45\x85\x24\xab\x08\x46\x43\xd2\x1f\x16\x8c\xbc\x73\x44\x5c\xeb\x74\x0e\x53\x87\xd2\x6e\x24\x54\x31\x8c\xa4\xc6\xde\xe9\x90\x0e\x97\x67\x3b\xcf\x95\xba\xf4\x5a\x1e\x28\xd2\xdd\xef\xf1\xa5\xac\xdd\xd1\x21\xa5\x4f\x5b\xa3\x0d\x85\xe9\xe8\x36\x8c\x66\xa6\xb0\xa0\x2d\x6a\x25\x4f\x0b\x76\x5d\xd9\xbd\x8a\x51\x52\xf7\x32\xe1\xb3\x30\x0d\x32\xb4\xfb\x3c\xae\x24\xc3\x31\x25\xb3\xcd\x9e\x71\x41\x48\x6f\x5c\xf8\x3a\x4d\x71\x49\xe9\x22\x3a\x9e\x80\xc4\x0c\xcf\x04\x66\x78\x34\x0e\x27\xd4\x0a\xc6\x56\x33\x6c\x5a\x13\xeb\x24\xe5\x7a\x63\x69\x7a\x79\x0d\x81\x05\x96\x61\x90\x7b\x8d\xac\x66\xe4\xfc\x14\x87\x11\xb2\xc0\xc2\x4d\x0b\x5b\x85\x71\x8e\xbf\x8b\x18\xd7\x6f\x51\x06\xda\x29\x10\x22\x4c\xb8\x46\x1c\x01\x2b\xcd\x74\xd5\xb5\x64\xdb\x68\x63\xd8\xed\xcc\x5b\xb0\xe1\x33\xa8\xf6\x47\x8f\xf4\x7b\xe5\x22\x39\x72\x46\xd2\x51\xe6\x69\xb9\x3b\xb4\xde\xf5\x29\xb8\xb3\xf8\x84\x5a\x2f\xf5\x78\x5a\x94\x46\x35\x96\x90\x62\xbc\xb7\x08\x1f\xdd\x52\x9c\x4f\x9f\xec\xbb\x3f\x5b\x7f\x2e\x0c\x5d\x44\x6d\x0a\x36\xb2\xde\x6d\x96\x4b\x81\xcf\x57\xc9\x67\x82\x76\x93\x36\x1b\xe6\x02\xae\xc3\x2b\x53\x41\x82\x9f\xb6\x5b\x94\x29\x5b\x05\x27\x92\x21\xc6\xa3\x84\xc4\x23\xbe\xf7\x88\xf5\x5e\xdb\x4a\x50\x20\xe4\x05\x5c\x6b\xe9\xcc\xc4\x7a\x62\x6c\x64\x0c\x01\x09\xcc\x8d\xa8\x35\xa6\xce\xc1\x63\xa0\xa7\x6d\xa1\xc8\x1e\x17\x67\xb4\xdd\x0c\x2b\x34\xf5\x81\x88\xda\x95\x52\x7f\xe7\xb9\xa2\xfa\x70\x88\x9d\xb9\x98\xcb\xa1\x36\xec\x7b\x8a\xb1\x70\x49\x82\xcb\x0b\x5c\xbe\xdc\x50\x86\x7a\x03\x2e\x25\x31\x34\xe8\x72\x0e\xc2\xd0\xa0\xcf\x59\x08\xd7\xa1\xda\x9c\x7b\x30\xd4\x1d\x60\x98\xf1\x9a\x3a\xd8\x99\x07\x69\xf6\x27\xf6\x08\x6b\xc1\xa1\x86\x18\x56\x74\x31\xb2\x6e\x52\x3e\x41\xe1\xcf\xcc\x82\xfb\x03\x89\xc4\x67\x9c\x57\x71\xe5\xf4\xb5\xc5\x75\x20\x5c\xa2\x5f\x70\x95\x4f\xe2\x91\x53\xe6\xdc\xcc\xcf\x93\xf3\x84\x26\x4e\x24\xd8\xbc\xf3\xd9\x38\xb5\x4a\x4c\xea\xf1\x74\xc7\xb2\x57\x25\xcd\xdd\x31\x2b\xc1\x52\x7e\x99\xf7\xc7\xb8\x13\xe1\xa7\x14\x31\x98\x42\x06\xd6\x4d\x68\x61\x60\xce\x4d\x46\x33\xfe\x27\xa4\xa1\x08\x43\x10\x65\x73\x45\x7f\xf9\xf5\xb2\xb8\x1e\xaf\x26\x54\xa7\x44\x8a\x6c\x7b\x83\x22\x48\x80\x8d\x97\x13\xbe\x43\x0b\x0a\x13\xa3\xa9\x61\x3f\x7f\x9a\x2e\x59\x90\x98\x46\x3f\x4d\x51\x18\x5d\x4b\x6b\x7c\xc6\x29\x1c\x6f\x01\x44\x72\x00\xa2\xf3\x88\x46\x4e\x84\x23\x27\x11\x39\x98\x9c\xb5\x6d\xa3\xc8\x59\xd3\xc8\x59\x3b\x51\xc1\x3c\x0a\x75\x24\x72\xc2\xc9\x89\x68\xf5\x7e\x73\xb7\xea\xb1\x3d\x58\x96\xc4\xf8\x7c\x44\xef\x51\x02\x4c\xcc\x4f\x01\x53\x12\x39\x11\xc4\xfc\x93\x27\xfa\x43\x62\xaa\x9c\x70\x02\xaa\x61\xb1\x6d\xa3\xd8\x89\x68\x88\x21\xb4\x6d\x14\x3a\x6b\x1a\x63\x48\x78\x43\xf8\xf8\x20\x71\x15\x8a\x92\x65\x51\xb2\x14\xcf\x8c\x57\x93\x56\x6b\xab\xcd\xea\xd1\x16\xe6\x71\x72\x15\x4c\x17\x95\x66\x16\x0d\x2c\x33\x87\x43\x44\x03\xae\x28\xee\xaa\x86\xf5\xfa\x4c\x1b\xf3\xa5\x34\x4a\x9c\x48\x67\xc2\x3c\x17\x42\x4f\x84\x12\xe7\x1e\x12\xe7\xb3\x4c\x24\x72\x9e\xd8\x76\xe2\x24\xe7\x98\xaf\xbb\xf5\x16\x16\x41\x4a\xf6\xf7\x65\xa3\x71\x8f\xca\x21\x63\x02\x8b\x66\x61\xdb\x51\x65\xba\xd5\x26\x38\x60\xe8\x2d\x5e\x1f\xaf\x26\xfc\xf5\x29\x9f\x9d\xf9\x9e\x45\xb4\x80\xba\xa4\x22\xd7\x49\xb9\xb2\x46\xb1\x73\x4f\x13\x82\xc4\x34\xc7\xf4\x29\x24\x21\xdf\x57\xc2\x68\xfa\x99\x64\x70\x4f\x12\x58\x13\xb1\x8a\x96\x10\x15\x5a\x1d\x69\x78\x5b\xb1\xaa\xf3\x1c\x89\x65\x12\x63\x88\xc4\x92\x8a\xf8\x25\x5f\x28\xcd\x26\xc8\x8d\xc9\x27\x52\xec\xc9\x70\x42\x63\x8c\x81\x6d\xe1\x8e\x65\x57\x51\x96\x3c\x92\x7b\x48\x59\x76\x9d\x25\x71\x74\xb7\xd7\x66\x61\xe7\x37\xe3\xe4\x12\xfc\x24\xc7\x3c\xa3\xeb\x32\x33\x8d\x73\xf3\x99\x6a\x2c\x55\xbd\x52\xb7\x50\xbb\x3b\xd4\xe3\x50\xa4\xbb\x38\xcf\x6c\x3b\xe3\xd3\x94\x71\x4e\x57\x85\x88\xc8\x4a\xe4\x6b\x9a\xd1\x6c\x94\x15\x53\x9e\x39\x37\x73\x3c\x9a\x22\x17\xac\xcf\xec\x91\x73\x2e\x36\xca\x9c\xcf\x44\x5a\x7d\xf5\xef\x7b\x32\xce\xf8\x72\x70\xee\x27\x58\xe7\xc3\xd0\x42\x18\x4c\x91\x27\xa2\x60\x46\x96\xf2\xe4\xb1\x8a\xb7\xa1\x91\x88\xd1\x9f\x0b\x91\x89\xf3\x03\xaf\x4f\x3c\xaf\x0f\x9e\xdf\x26\x9e\xdf\x06\xaf\x33\x24\x5e\x67\x08\xed\x3e\x69\xf7\x95\x5a\xd0\x1d\x90\xee\x00\x7a\x03\xd2\x1b\xc0\xa0\x4b\x06\x5d\x18\xf4\xc9\xa0\x0f\xc3\x0e\x19\x76\x60\x38\x20\xc3\x01\x0c\x87\x64\x38\xdc\x4e\xa0\xfb\x6c\xbb\x81\xb6\xd1\x73\x2a\x7d\xc7\xb2\x1f\x59\xf0\x59\xda\xea\x07\x92\xec\x0f\xbc\x7a\xb2\xcf\xf5\x0e\x4e\x26\xfb\x9e\x22\xfb\x9c\xaa\x2f\xe8\x12\x75\x39\xd5\x5f\xa2\x1e\x86\x35\x75\x61\x55\x1b\x6f\xed\xdc\x2c\xe5\xa2\x92\xf1\x1c\xf7\x78\x6b\x32\x00\xb5\x04\xb8\x08\xb8\x85\xc7\x7a\xa1\x73\x81\x98\x13\xd4\x26\x13\x19\xbb\x5c\x9f\xce\xb6\x78\x7b\x72\x6f\x48\x39\xd5\xbd\x55\x08\x8b\xea\x68\x53\x12\xb1\x82\x65\x64\x63\x6f\x72\x78\x43\x17\xef\x6c\xf9\xca\x26\x75\x2a\x73\x59\x6d\x32\x4a\xc6\x9e\xce\x8d\xe1\x04\x52\x59\x1c\x33\xc8\x26\xf8\x20\x91\xcd\xf8\xf6\x14\x8f\x97\x3d\x2c\xbb\x9e\xc9\x1e\xb2\x82\x77\xfc\x8b\x86\xf8\x0b\x9c\x74\x2d\x78\x7f\xc6\x25\xdd\x46\xe3\x5f\xb8\xd0\xff\x6c\xde\x17\xab\xf3\xf9\x5a\xde\xb7\xac\xe5\x7d\xeb\x66\xb3\xc2\xeb\xf6\x98\x5c\x5c\x65\x72\x11\x5a\x9a\x4c\xae\xa6\xfb\x5c\x8c\x0e\xca\xa3\x86\x86\xa7\xf2\x4d\x73\x2d\xca\x84\x57\x4e\x46\x2b\x34\xd7\x74\x11\x3b\xb2\x26\xc4\x30\x49\x6c\x7b\x5a\xe0\x2e\x87\xb8\x88\xf2\x4b\xc6\xaa\xa8\x66\x62\x7f\xe7\x47\x17\x02\x80\x6a\xf7\x8b\x9c\x42\x2f\x8f\x50\x68\x1a\x22\x61\xf9\x28\x03\xdd\x44\xdd\xd1\x68\x25\x64\x37\x96\xa9\x9c\x3e\x63\x3e\xc2\xf2\x00\x12\x36\xf3\x34\x8b\x13\x46\x56\x15\x5a\x51\xa1\x11\xed\x01\x69\x0f\xa0\xe3\x93\x8e\xaf\x68\x44\xdf\x23\x7d\x4f\xca\xef\x92\x46\x70\xba\xf0\xb5\xc0\x20\x4d\x17\xfa\xca\x9e\xd6\xf3\xb5\x18\xa8\xe8\x81\x20\x18\xa9\x24\x18\x15\x82\xc0\x09\xc4\x54\x11\x0c\x4e\x10\x7a\x1d\x29\x06\x0e\x7a\x52\x0c\xf4\xfc\x0e\x16\xf2\x5f\xff\xa0\xc1\x09\x12\x10\xa6\x21\x39\x52\x77\x34\x1a\xb3\x09\xdc\xd2\x3b\xb8\xa1\xf7\x23\x71\x56\x47\xac\x60\x36\xb3\xe0\x81\xde\xda\xf6\xad\xb1\x94\xae\xe8\xd3\x16\xbe\xd4\xe4\x3c\x7a\x18\xb3\xc9\x49\x8c\x1e\x80\x81\x25\x57\x82\x20\xdd\x35\xdb\x1a\x71\xa5\x7b\x2a\xc3\x55\x33\x03\x55\x56\xea\x18\x2e\x61\x78\x4b\xac\x45\x90\xfe\x9b\xde\xbf\x63\xd9\x81\xf7\x4f\xf5\xeb\x23\xb9\x97\xc8\xc1\x3a\x02\x81\xeb\x59\x5b\x47\xfd\x3b\x12\x24\x83\x54\xb9\xec\xb1\x37\x20\x51\xef\xe0\x6d\xfd\x01\xdd\xe9\xad\x6d\xa3\xc7\x3c\x7f\x70\x94\x00\x66\xdb\x8d\xb9\xa9\xd9\x21\x4e\xd6\x6f\xb1\xf6\x61\x45\xd8\x89\xd8\x17\x91\x4f\x0e\xcb\x99\xb9\x16\x84\xff\x16\xde\xd3\xeb\xf1\xcd\x04\x3d\x8e\x9e\xb6\xa4\xe5\x82\x87\x1b\xf4\x1a\x5e\xd2\x4a\x65\xd7\x62\xa7\x89\xec\x50\x9f\xe9\x02\x99\xfd\x16\x95\x20\x4e\x62\xe0\x13\x6d\x3c\xda\x76\xe5\xc5\x52\x2a\x90\x1f\xcb\x68\xf7\x3c\x6b\xb5\xce\x31\xe3\xdf\xcc\x4a\x19\xa9\xc1\xc4\x27\x5a\x2e\xa7\x55\x9f\xf3\x1c\xa1\x5b\x9a\x21\xd3\x40\xcc\x45\x95\x0c\x6e\x39\x45\x97\x5b\x64\x2d\xba\x78\x07\x19\xdc\xee\xa4\x4a\x4e\x38\xf9\x4b\xe0\x1e\xa2\xf1\xcd\x04\x22\x0c\xd1\x16\x1b\x4e\x48\xf4\x01\x1e\x4c\xb3\x0f\xbd\xc5\x80\x5e\xe6\xf9\x27\xae\x97\x7f\x41\x7a\x95\x62\xf8\x82\xc4\x72\xc3\x70\x6f\xdb\x5f\xe4\xa9\x35\xc6\x80\x3e\xe5\xf9\x7b\xcc\x4b\x6e\x30\x3c\xda\xf6\x83\x23\x54\x85\x82\xce\xa9\xdf\xd2\x18\x79\x4b\x57\x4e\x95\xe8\xa3\x0c\x18\xdc\xc3\x0d\x86\x00\x99\x1b\x28\xc1\x90\x3a\xef\xae\xae\xbe\xa5\x8d\x02\x74\x71\x86\x78\x7f\xe1\x6a\xcc\x26\xf4\x16\x42\x14\x3a\xdf\x35\x43\xe7\xc7\x66\xe8\xbc\x7e\x81\x6e\x1b\xf4\x0e\xc3\x15\x86\xc7\x3c\x5f\x39\x85\x84\xc7\x5f\x81\x7b\x0c\xb7\x15\x4a\xe5\x0d\x88\xe7\x0d\xc0\xf3\x3b\xc4\xf3\x3b\x8a\x62\xf5\x7c\xd2\xf3\xa1\xd7\x21\xbd\x8e\xa6\x58\x2e\xe9\xbb\xd0\xef\x92\x7e\x57\xd1\xad\x41\x8f\x0c\x7a\x25\xf5\xaa\x31\x74\x57\x0f\xaf\x06\x47\x0e\xaf\x06\xc4\xe3\xaa\x76\xb7\xc6\xaa\x7a\x48\x17\x96\x56\x8d\xe3\xee\x92\xc2\xe6\xc3\x46\xa5\x57\x89\x0b\x09\xc6\x44\x3a\x04\xc8\x51\xe8\x11\xcf\xeb\x95\xb2\x59\x8d\xbd\xb1\xda\x8b\xe1\x91\x5e\x08\xd7\x24\x61\xa0\xe1\x55\xd5\x58\xee\x6a\xfb\xd2\x13\xc7\x00\x02\xa3\xa1\x98\x73\xbe\x32\x3e\x85\x2b\x06\xf1\xee\x0d\x03\x88\x03\x82\x5a\x01\xee\x72\x38\x62\xc4\x72\xad\x26\x33\x95\xeb\x1a\xe3\x8e\xe5\xb6\x07\xdd\x96\xdb\x6f\xf9\xdd\x4f\x6e\x9f\xb8\x3d\xd2\x1e\x3a\xc3\xe1\xf0\x9f\xac\x06\x8d\x25\xed\x29\x00\x31\x5a\x5d\xe6\xb5\x5b\x5c\x68\xc6\x79\xde\xa8\x54\xb6\xfb\xe8\xbb\xe0\x1d\x7f\x6c\x64\x3c\xc2\x99\x78\x98\xbe\x0e\xa3\x30\x63\x28\x34\x10\x5e\xf5\xb1\xf5\xc7\x20\xba\xd3\xa6\xe7\x37\x12\x21\xe2\x34\x0b\x57\xc5\x89\xfe\x49\xa9\x40\x40\x46\x99\x4a\x8e\xfe\x7a\xb3\x5c\xfe\x45\xa6\x68\x4f\x8a\x42\x13\xde\x0a\x71\x45\x38\x53\x78\x7e\xd9\xe5\x70\x38\x1c\x8e\xac\xa6\x09\xb8\x17\x35\x91\xe5\xf2\xff\xac\x66\x91\x76\x99\xcb\x0f\xd2\x4e\x13\x8d\x5a\x3d\xd2\xea\xe0\xa6\xd5\xb2\x9a\x01\x2a\x3e\x51\xa4\xf9\xdf\xb9\x21\xc1\x7a\x70\xd3\xfa\x64\x96\x0a\xec\x2c\x51\x4c\x2a\xb5\x48\x30\xa2\xfd\x1b\x05\x44\x21\x6e\x5a\x8e\xd5\x44\xc9\xe5\x70\x38\x4a\xc4\x94\x06\x28\xe1\xa5\xff\x64\x6d\x49\xbc\x85\x27\xb1\x41\xf9\x5a\x7b\xb6\x39\x57\x5b\x03\x3b\xed\x23\xae\xd3\x65\x7e\x52\xca\x6c\xbb\xf4\x3d\x10\xbf\x54\xa0\xab\xf8\xb9\x7f\x6e\xf0\xa6\x38\xea\x5e\x84\x51\x66\x64\x96\x44\xda\xf4\x5b\x56\xc7\xe4\xa1\x7c\xa7\x4d\xbc\x4e\x5b\x0a\x49\xbc\x2f\xcf\x3c\x9a\x37\xf2\x69\xd7\xb4\x43\xf9\x8a\x04\xcb\xe5\xe9\x8a\x65\x8b\x78\x76\x1a\x47\xa7\x02\x06\x6d\xf7\xd4\xbd\xfb\xb5\x53\x77\xdf\x3d\xbc\xe5\xa5\x07\x51\x31\x0d\x35\xa6\xbc\x6a\x55\xde\x91\xaa\x84\x87\x98\x24\xb3\xda\xb0\xdb\x3b\xea\x8c\x64\x19\x9c\x0a\xaa\x8e\x7c\x10\xa6\x1f\x34\xc9\x78\x3f\x87\xb5\x2a\x7e\x93\x5e\x15\xbe\x4a\xa0\x53\x43\x28\x62\xa2\x2d\x99\xa0\x11\x79\x84\xc2\x92\x09\xd3\xb6\x1c\xa9\xde\xb1\x43\x5e\x57\xe9\xaa\x9e\xdb\x51\x52\xa9\x7b\xd0\x3b\x5f\x9f\x05\x30\xbe\x6f\x43\x67\x2e\x4e\xaf\xb0\x96\x08\x02\x48\x69\xc2\xef\x6d\x68\xec\xcc\x61\x49\xdd\xf3\xc2\x28\xb4\x3c\xc7\x1b\xed\x83\x18\xd0\x74\xbc\x6c\x36\x27\x42\xa6\x13\xaa\x5b\x80\xab\xc7\xd5\x6e\x87\x78\x6e\x07\x3c\xb7\x4f\x3c\xb7\x0f\x9e\x3b\x20\x9e\xcb\xd7\x58\xef\xc8\xa9\xac\x96\xae\xbb\xfa\xf0\x4e\x1f\xca\x72\x29\x3b\x55\xc6\xd6\xa3\xee\xd3\xca\x71\xfa\xb5\x72\x9c\xfe\x4e\x39\x4e\x5f\x2b\xc7\xe9\x0f\xca\x71\xfa\x1b\xb8\xa3\xeb\x51\x44\x56\x23\xe9\x0e\x2d\xbc\xa2\xe9\xd3\x16\xd7\xfa\x47\xc3\x2d\x5d\xd7\x78\x59\xdf\x50\x43\x52\xc8\x73\x53\x6e\xe0\xf7\x4b\xaf\xea\x75\xe9\x55\x3d\xa7\x08\x4d\x69\x63\x66\xdb\x77\x86\x63\xf5\xdd\x78\x39\xc1\xa3\x3b\x92\xe0\xf1\x72\x02\x0b\xfa\x68\xdb\xd3\x51\x2a\xbd\xa4\xef\x0f\x38\x0b\xa7\x75\xce\xc2\x77\xb6\x1d\xa0\x3b\x58\x82\x74\x09\xfe\x33\x86\xdb\xf1\x72\xd2\xa0\x73\xdb\x8e\x85\x47\xf0\x42\x88\x4d\x37\xba\x10\x09\x07\xec\x39\xde\x9e\x44\xce\x34\x4e\x18\x0d\xe1\xdf\xc3\x5b\x58\xc9\x35\x22\xaa\x46\x1f\xde\x4a\x19\x46\x79\x1e\xf5\x8e\x1c\xe1\xca\xd3\x92\x55\x90\x4d\x17\xc7\x4f\x12\xe9\x99\x73\x76\x92\x25\x8f\x4f\xd6\x99\x73\x66\x8d\xd9\x04\x65\xb8\x3c\xa7\x30\x0e\x30\xb2\x71\x34\xa1\x0d\x0f\x1a\xfb\x0f\x86\xf8\x49\x47\x47\x54\x7c\xa4\x78\x1b\xbf\x26\x8f\xf8\xed\x23\x14\x45\x79\x9b\xf6\xbe\x26\x89\xc8\x00\x68\xc3\xee\xa4\xb8\x44\x5f\x6d\x01\x2e\xa1\x88\x63\x06\xa5\x5e\xf2\xd1\x11\xfa\xa5\xe7\xbb\x5c\xc1\x4c\x8d\x63\x57\x98\xd2\x46\x8c\x76\xce\xf1\x98\x18\xa6\xc2\xc2\xc4\xbe\xb0\xe9\x3e\x56\xec\x78\x52\x3e\x71\x97\xc4\x9b\x75\x4a\x9f\x02\x62\xf5\xad\x2d\x57\xb3\xad\x3e\xe7\x38\x96\x55\x20\xfc\x32\xb0\xfe\x70\x11\x5c\x5a\x5c\xbf\x98\xef\xd7\x76\x86\x46\x04\x9f\x09\x61\x81\x7f\xee\x64\xff\xab\x85\x96\x75\xc0\x8d\x5e\xda\x19\xac\xe0\x56\x53\xc2\x92\x77\xf8\x94\x52\xed\xe9\x64\xdb\x56\x60\xf1\xdf\x63\x77\x62\xdb\xd6\xad\xbc\xf6\x26\x5b\x74\x4c\x32\x95\x50\xc3\x29\x27\x73\xb3\x9a\x01\xcb\xe8\x53\xe9\xc7\x3f\x5e\x4c\x6a\xda\xdd\xdf\x42\xbf\x41\x2d\xbd\x94\xb8\xfe\x3e\x1b\xd5\xd5\xd4\xf0\x20\xa1\x67\x41\x31\xfe\xc9\xc1\x91\x10\x47\x13\x9b\xe5\x72\x0b\x96\xe8\xb1\x46\x0f\x4a\x2a\x3a\xd1\x93\x40\x0f\x2a\x0b\xc4\xee\xdd\xab\x2c\xd9\x62\x48\xc6\x8b\x09\xb2\x2c\x0c\x8d\x6c\xab\xdd\x42\x84\x63\xe8\x2c\xcf\x1b\xeb\x3c\xb7\xd4\x5c\xaa\xef\x34\xa6\x79\x5e\xf9\x70\x63\x2e\xfb\xb0\xe2\xcb\x67\xbc\x98\xc0\x3d\x4d\x50\x00\x0b\x10\xbd\x3e\x06\xcb\x97\xc9\x3e\x52\xba\x19\xcd\x6c\xbb\x11\x8e\x9e\x66\x71\xc4\x48\xc3\x55\x6e\xb7\xab\x4a\x40\x13\xd9\xb9\xab\x42\x97\x12\xc8\xcc\xbb\xde\x76\x8b\xe1\x91\xde\x8f\xdd\x09\xdc\xd1\xfb\xb1\x37\x39\x89\x90\x8e\x34\x2c\xc8\x34\x83\x47\x0c\x21\x92\xe9\x47\x8c\xf2\x05\xf8\x94\x66\xa3\x5a\x83\xe9\x5d\xe1\x56\x2f\xcd\x57\xdb\x1a\xd3\x66\xf5\x21\xbc\xd5\xb6\x69\xad\xbd\xb9\xc4\xf3\x5d\xd0\x67\x97\x3a\x9a\xb9\xdb\x27\xdd\xbe\xd2\xe3\x0a\xba\xf7\x1b\x84\xc5\xba\x15\xac\x77\x98\x16\xe8\x32\x5a\x8a\xd3\x4c\x05\x10\xda\x36\xca\x9a\xd4\xba\x13\x36\xc9\xf0\x2e\x8a\x13\xf6\x2a\x48\x99\x2a\x96\xa6\xca\xd5\x66\x99\x85\xcb\x30\xd2\xa5\x2b\x51\xba\x89\xc2\x69\x3c\xd3\x65\x1b\x51\x96\x66\xe1\xf4\xf3\xa3\x2a\x7a\xb4\x30\x08\xf6\xae\x05\xc6\x5e\x8d\xc0\x58\x6f\x37\x1b\x56\x7d\x19\x84\x9b\x95\x79\x7c\x2a\xa9\x7e\x98\xbe\x12\x2e\x07\xd7\xeb\x84\x05\x33\x2e\x2a\xd5\xb2\x00\x15\x8f\xa3\x60\x38\x39\xd7\x2f\x8d\x1a\x6b\x58\xc1\x3d\x9d\xc2\x23\x75\xe1\x8e\x36\x1a\x0b\xce\x12\x17\x30\x83\x36\x3e\x7f\xbc\x58\x4a\x07\x9d\x47\xe9\x66\xc6\x2f\xd7\xf4\x6e\x74\x87\x36\xe3\xc7\x09\x3c\x42\x82\x89\xb8\x5a\xf1\x9d\x1b\xa2\x35\xb6\x6d\xb4\xa2\x05\x9f\x46\x2b\xba\x1e\xa7\x13\x3c\x6a\x34\x56\x24\x42\x6b\x8c\x61\x65\xdb\xf3\x4b\x17\xdf\x53\xd9\xa4\x35\xc4\x68\x5d\x38\x0b\xdd\xc3\xbc\xe5\xe1\x96\x27\xfc\xaa\xf8\xc7\xee\x2f\xe9\xd0\x75\xfb\xde\x70\xe8\x77\x3b\xfd\x8e\x3b\x1c\x7a\x7b\xf2\x33\x3e\xc9\xc6\xf7\x13\xba\xde\xde\x37\x9b\xdb\xc7\x66\x53\xbb\x35\xdc\x57\x5c\x76\xd4\x62\x53\xcc\xb5\xe2\xb7\xd2\x3b\x78\x68\x5e\xfa\xbd\x0d\xda\x4a\xc2\x52\xe6\xcb\xb6\x12\xb0\xc4\xbc\x08\xf6\xd2\x6d\x73\xf6\xf2\xb4\x85\x29\x7d\xda\x9e\x73\xf9\xe5\x90\x6d\x72\x0e\x0b\xf9\x81\x19\xac\xa5\xa1\x92\x2e\x46\xfb\x54\x89\x6d\xc9\x86\xd3\xdc\x3b\x1a\x21\xfe\x52\x36\xf2\x89\x87\xe1\x96\xba\x27\xf5\x81\xab\x8f\xc7\x22\x48\xc3\x4c\x8a\xd2\x0d\x4b\xa2\x62\xa1\x47\xe5\x5e\x32\xe3\x94\x5d\xcf\xc0\xf9\xec\xf2\xf6\xfc\x56\x39\xc2\xdd\xd3\x6c\x74\x87\x02\xb4\xa6\x6c\x7c\x3b\xc1\x9c\x96\xac\xc7\xde\x04\x93\x3b\x24\x0a\x30\xa5\x74\x99\xe7\xf7\x94\x52\xed\xaa\x76\x7a\x5f\xba\x2a\xae\xe8\xa3\x76\x25\x38\x6f\xa0\x35\x5d\x29\xdb\x1d\x76\x38\x8d\x3a\x57\x9f\x08\xd1\x0a\xee\x60\x2d\xdd\xf4\x21\x3b\x50\x29\x76\xbe\xf9\x78\xf5\xf2\x4f\x74\x09\x89\xf3\xf1\xea\xd3\x9f\x3f\xbe\xa3\xd3\xca\xec\xb6\x89\xd7\x55\x7a\x99\x9e\xe3\x01\xe9\x0f\x60\xd0\x26\x03\x21\x57\xd4\xa8\x3b\x95\x78\x62\xbf\x87\x91\x15\x09\x60\xbb\x96\x7e\xb0\x95\xc5\x2d\xa5\x5e\x42\x21\x3c\x16\xe1\x00\xc2\x49\xbb\x47\x3c\x11\xd0\xd5\xaf\xd1\x7e\xaa\xc2\x4f\xe7\x88\xf0\xa3\x3c\xf7\xfb\x35\x4a\x4b\xb5\x92\xee\x91\x4a\xba\xc4\xef\xf2\x4a\xbe\x66\xdc\xf2\x8f\xb9\xff\x2b\x1b\x93\x88\x53\x53\x27\x85\xda\xde\xd4\x3f\x22\x83\xf6\xdd\x32\xa0\xd4\x34\xe4\xd8\x76\x54\x94\xab\x28\xd1\x2d\x3c\x09\xd9\x96\xd7\xf8\x55\x89\xf1\x88\x13\xb9\x0c\x85\x91\x4d\xec\x0e\x49\x77\x58\xa8\xb6\xfd\x23\x7e\x68\xda\x11\xcf\xf3\x7d\x71\x48\xf2\x15\xb1\x27\x86\x80\x66\xa6\x00\xa1\x99\x47\xd0\xa0\x34\xa9\xd5\x34\x02\xdb\x46\x31\x0d\x0c\x67\x28\xfe\x68\xf9\xd3\xb6\x23\x14\x63\xdb\x0e\x6d\x3b\x44\x0c\x62\x1d\xe5\xe3\xfb\xc4\xf3\xfd\x82\x28\xf5\x9f\x19\xc5\x6e\x76\xaf\xf0\x65\x4a\x74\x80\x75\x76\x28\xc0\x73\xc4\x10\x2e\x64\x07\xbc\x1b\xea\x39\x62\x28\x1b\xbb\x13\x6c\x48\x17\xfc\xe7\x6e\xe8\xa7\x7a\x0c\x32\x41\x15\x2a\xcf\xca\xb2\x9d\xe8\xeb\xca\x0b\x90\x8d\xfd\xda\xb7\xe4\x0d\xf9\x6a\xe7\xf0\xab\x90\x8d\xdb\x87\xdf\x97\x77\x77\xc3\x4f\x93\x32\x18\xb0\x7f\xdc\x0f\xcd\x58\x17\xca\x77\xcb\xfa\xd9\x12\x2a\xee\x9e\x71\x02\x15\xb1\x66\x35\xa2\x90\x75\xad\xfd\xc6\x78\xe1\x88\x69\x43\x85\x85\x49\xe1\x13\x66\x86\xbc\xf4\x8f\xf0\xa2\x41\xc5\x3d\x2e\x2c\x60\x14\x20\xde\x8b\x7b\x39\xea\xe1\x55\xb0\x67\x26\xbc\x30\xc4\xbb\x32\x4f\x42\x3c\x0e\xc5\x91\x30\x36\x7d\xcb\x06\x03\x32\x10\x4d\x3b\x12\xa1\x57\x1d\x31\x85\x61\x92\x8a\xbf\x55\xd7\x4a\x35\x2a\xe2\x8e\x1a\x14\xb3\xfb\x83\x1a\x32\x5a\xdd\xba\x65\x66\x81\xa3\x9d\x14\x71\x66\xb6\x5d\x18\x72\xc5\x0f\xc4\xb0\x38\xf0\xde\xc2\x93\xde\x66\x83\xaf\x92\xdc\x23\x47\x01\x3a\x6e\x6b\x70\xc4\x44\xa3\x09\x4e\x67\x60\x7a\xfe\x3e\x43\x5b\x2f\xcf\xba\x85\xa7\x65\x29\x53\x65\x94\x8d\x63\x21\x53\x65\xc4\x92\xb2\xbb\x45\xc5\x19\x33\xde\x73\x09\x2c\xc8\xc9\xe0\x98\x0f\xf8\xc1\x78\x2e\x48\xb8\x9e\x62\x58\x06\xc2\x51\x86\x22\x94\x08\x59\x20\x11\xbb\x3e\x43\x45\x5c\xa4\x8a\x7d\x88\x29\x73\xe4\xe3\x2a\x2c\xae\x68\x7a\x2c\x68\x5f\x11\x3e\x07\xc1\xd6\x94\x8d\x07\x35\xdc\xa0\xfe\x40\x65\x50\x1e\xa8\xc8\x31\xf5\x85\xd2\xff\xb4\x3d\x91\x31\x5e\x01\xd4\x6c\x92\x1a\x1d\x52\x1c\x4d\xd6\x46\x82\x29\xd8\x11\xc3\x40\x15\xa1\x00\x9e\xb8\x00\x43\x64\xbc\xef\x16\x43\xcc\x9f\x6b\x5a\xa7\x06\xa0\x89\xc1\x42\xf5\x21\x55\x25\x88\x4c\xba\xd7\xf0\xce\x3e\xf7\xc4\x65\x30\x3c\x70\x80\xde\xf7\xa5\x04\xca\xa9\x02\x17\x40\x07\x1d\x79\x7e\x2e\x06\x63\x2a\x8c\x9a\x5d\xe5\x52\xb3\x3b\x14\x0b\xda\x40\xe3\x89\xf3\x99\x3d\xa6\xb6\x2d\xf0\x6c\xad\x30\x52\x05\x08\x73\x2d\xff\xc0\x60\x1d\x5e\x26\x6b\x7d\xe2\xbe\x11\xaa\xe8\x5a\xa5\x24\x83\x5b\xb8\x81\x87\x3d\xb8\x93\x85\x6d\x33\xae\x51\xbc\xd7\x12\xde\xfb\x31\x9b\x9c\x54\x43\x28\xa4\xbf\x14\x11\x97\xca\xdd\x69\x0f\xc5\xc3\xf4\x1d\x3f\x4d\x0a\x77\x9a\xc3\xf0\x1d\x3b\xcf\xc1\x15\xad\x4c\x20\x7c\xa1\xa5\x63\xd6\x0a\xae\xb9\x56\xf3\xbe\x02\x48\xf0\x92\xbe\x1f\xcf\x27\x79\xfe\x7e\x6c\xfd\xc7\xff\x58\x0c\xe9\x24\xcf\x57\xb6\xfd\x7e\xbc\x9a\xc0\x67\xfa\x32\xcf\x1f\xd0\x0a\xc3\x27\xba\x1a\x7d\x19\x3d\xa0\xc2\x6d\x0b\x93\xcf\xda\x29\xee\x2d\x2d\x48\x60\x66\xdb\xef\xf5\xf9\x76\x9e\xbf\xe4\xc2\xf9\x5b\xdb\x46\x37\x74\x8a\xde\x96\xa7\x55\x0c\x63\x2e\x47\xa8\x98\x66\x43\x98\xb8\x11\x52\xb5\x6d\xa3\x25\xba\x81\x2b\x19\xc0\x9c\xe7\x35\x72\xc9\x8d\x68\x77\x80\x6e\x60\x0e\x33\x8c\xe1\x8b\x6d\xbf\xb4\x6d\xdd\xdd\x06\xa5\x2f\x9d\x28\x58\x71\x96\x70\x4d\x1b\x2e\xd4\x25\x4e\x7f\x69\x9c\x86\x6d\x85\x13\x5f\xe3\x31\xcf\xf9\x6c\x36\xae\x79\xf7\xe5\x07\xde\xc3\x1c\x3e\x63\x10\x1e\xe9\x9f\x21\x1d\x5f\x4d\xe8\x0c\x56\x5c\xdc\xbf\xa3\x4f\xf2\x73\xe4\xcb\xe8\x33\x79\x40\xfa\xe3\x18\xf8\x5c\x93\x7b\x59\x28\xe6\x1d\x83\x1a\x12\xf2\x69\x0b\x8f\xc2\xde\x7e\x2b\x83\x72\xc4\x9f\xf7\x79\x1e\xa3\xf7\x70\x0b\x77\x5c\x11\x51\x61\x38\x28\x74\x3e\xc8\x43\xe5\x45\x9e\x5f\x63\xc8\xe0\xae\xb0\x82\xdd\x49\x23\x7b\x97\x78\x6e\x77\xef\x1c\x59\x6f\x51\x79\x92\x2c\x37\xea\xa0\x43\x06\x1d\xc9\xfb\x60\x30\x24\x03\x2e\x01\x0f\x8e\x00\x08\xec\x6d\xb2\x90\x36\x3c\x61\x6d\x95\x34\x71\xdc\x9f\x8c\xa3\x09\xc2\x27\xb1\x22\x8e\xe6\xf8\x86\x02\x7b\x55\x81\x88\x25\xf1\x0a\xc5\x50\xf1\x62\xe3\x54\xd4\xdf\x1a\x74\x76\x7b\x2c\xc4\x3a\xb3\xed\x46\xb8\xeb\x83\xb4\xdb\x18\x48\x69\x2c\x1b\x94\x8a\x15\xb4\x3f\xdd\xd2\x94\x94\xc8\x58\x58\xfe\x6c\xcd\x8a\x48\xb7\xc0\x50\x6c\x36\xac\x12\x8f\x58\xd8\x86\x07\xcf\x8e\x61\x2d\xbe\xae\x62\xce\x41\x1a\xb4\x1a\x4c\x07\x9f\x0f\x8e\xe2\x11\x3c\xe9\xa7\x8e\xea\x7b\x0d\x4f\x3e\x35\x3c\x28\x6e\x08\x31\x83\x7d\x59\xaf\x3c\x83\xe6\x35\xa2\x3c\x8f\x90\xe7\xe2\x4b\xdf\x77\xfd\xae\xd3\xe9\x75\xfb\xc3\xce\xc0\xed\xf5\xbd\x81\xba\x73\x51\x77\xa7\xe5\xb3\x96\xd7\x6f\xd0\x08\xc9\x2b\x5c\xe7\x73\xe3\x8a\xfc\x55\x4d\x2e\x24\x12\x76\xd9\xf2\x58\xab\x67\xdb\xec\x82\xff\x1d\xb1\x26\x7b\xc1\xce\x7c\xa2\x5b\x85\x18\x6e\x79\x5b\x12\xa9\x5e\x1c\x39\xeb\x1a\xb6\x0b\xa1\x69\x1d\x3f\x40\x4c\x43\xe4\x43\xab\x2b\x53\xd4\xf1\x4b\xbf\x2d\xc3\x5f\x7d\xf0\xfc\x3e\x7e\x81\xfc\x96\x0a\x83\xf5\xa1\xc5\x95\x62\xa3\xfb\x52\xf4\x12\x99\xaa\x6a\xe2\x65\xb8\xac\x50\x24\xf9\x43\x8c\x33\xa3\xc8\x30\x43\x87\x17\x9b\xd1\xf2\x05\x0a\xcf\x36\x67\x41\xd3\x3b\x8b\x5b\xde\x59\x8c\x5f\x6c\x5e\x04\x04\x25\x5c\xa6\x41\x5e\x33\xe0\x25\x21\x6e\xa1\xac\x15\x62\x7c\x99\xe6\x79\xd2\xa0\x09\x7f\xcb\x3b\x73\x31\x59\xbe\x10\x8b\x6a\xd8\x26\x43\xae\xd1\x0f\x6b\x84\xae\x9d\xb6\x2e\xe3\x3b\x6f\x5d\x27\x7f\xca\x81\x16\x83\x3c\x50\x83\x3c\x18\xb1\x96\x31\xc8\xcb\xf8\x0e\x79\x32\x11\x95\x18\xe2\xa3\x78\x2d\xe2\x8d\x34\xbc\x8b\xea\xbe\x55\x4e\x6c\x9e\xb3\x06\x65\x7c\x7a\x2f\x5c\x11\x09\xa7\x2b\x3f\x12\x38\xe6\x75\xfa\x5c\x5c\x64\x59\x60\xed\x04\x37\x29\x7b\xa0\x8c\xb4\x48\xa9\x0b\x1b\xcd\x1d\xc2\xf4\xea\x4b\xc6\xa2\x34\xbc\x5d\x32\xa3\x45\x06\x64\x0c\x2c\x69\x43\x1c\x95\xd4\x44\xd1\x6c\x50\xc1\x64\xd8\x3d\x57\xdb\x65\x5d\x71\x94\xa2\xa7\xad\x48\x34\x32\xad\xf0\xf3\x00\x31\x88\x40\x6d\xd7\xa7\x90\x58\xef\xad\xe6\x69\xb3\x99\xc2\x83\x00\x83\xc2\x5b\x98\x9b\x18\x64\x7f\xba\xfa\x0b\x89\xe0\xdd\xd5\xd5\xb7\xa4\xe1\x81\x8a\xe7\x20\xfb\x44\x2c\x2c\xfd\x28\xad\xf4\x71\x75\x1b\x2f\x4d\x44\x11\x46\xd0\x6e\x44\xce\x29\x1b\x89\x44\x81\x1f\x2c\xdc\x94\x80\xf0\xb1\x70\x3b\x95\xd5\x6d\x8c\xea\x5e\x5b\x12\xf1\x41\xff\xbe\xb2\x4e\xa6\x5c\x0f\x29\x3c\x7f\xa3\x89\x13\x0a\xc7\xf3\x1f\x59\xf0\xb9\xa6\x6d\x07\x2a\x6e\xb8\x95\x7a\x1b\xde\x7e\xb5\x0f\x5b\x88\xa3\xd7\x09\x63\x3f\xb3\x3a\xbb\xf9\xd2\xb6\xe7\xc2\x7b\xca\xb6\x37\x42\xec\x57\x9f\xb2\x6d\x5e\x13\x30\x15\xf2\xd9\x27\x5e\xa7\xb0\x94\x9b\xde\x99\xca\x52\x33\x3c\x62\x00\xd1\x47\xc6\x5e\xbb\x27\x0c\x20\x22\xc8\xe2\xed\x26\x13\x81\xfe\xef\x6f\x53\x96\xdc\xb3\x24\xcf\x23\xe7\x47\x76\xfb\xa7\x30\xdb\xbd\x03\x01\x8d\xb8\xf8\x31\x65\x69\x0a\x29\x8d\x34\xbc\x22\x6c\xa8\xa5\x8a\x2d\x2a\xd5\x1d\x14\x1c\x33\xc9\xcb\x30\x99\xbd\x20\x3a\x08\x65\x94\x3c\xd7\x4c\x69\xe0\xcc\xe2\x55\x10\x46\x02\x50\x9e\x7d\x09\x33\x84\xcf\xd9\x39\x67\x97\xcc\x99\x47\xc0\x28\x13\xac\x4b\x30\xb6\xb0\xc0\x46\x8a\x35\xc7\x64\xa3\x04\x61\x52\xf8\xd1\xc7\xdb\x6d\x71\x2d\x0c\x53\x2c\xca\x58\x82\xa4\x6f\xe2\x06\x27\x66\x5b\x02\x51\xf1\xa7\x70\xfa\x19\x2d\xf1\xb6\x08\xf3\x6d\xc4\x7c\x64\xa2\xe0\x3e\xbc\xe3\x5c\x9e\x57\x52\xfc\x70\xd2\x2c\x88\x66\xc1\x32\x8e\x18\x97\x75\x52\xdb\x4e\x9d\x84\xa5\xf1\xf2\x9e\xe9\x60\xa0\xa2\x40\x69\x73\xf8\xa4\xf2\xd1\xa9\x93\x2d\x58\xc4\x3f\x28\x8d\xa8\x95\x9b\xca\x13\x29\x02\xdd\x1e\x51\xe7\x9c\x8b\x6a\x0b\xaa\x4d\x6c\x0a\x8f\xed\x13\xfb\x92\xbd\x8b\x67\x0c\x59\x16\x3e\xe1\xd2\x63\x8c\x96\xd8\x89\xe5\x14\xa2\x05\x3c\x4d\x17\x41\x12\x4c\x33\x96\x7c\x1b\x64\x01\x69\xb8\x5b\x0c\x95\x8f\x2d\x9c\x59\x90\x05\x74\x4e\x1b\xf3\x7d\x61\xba\x08\xd1\x79\x9a\x47\x24\x02\xa1\x13\xa9\x50\x8a\x13\x11\x08\x21\xe5\x89\x10\x03\xcb\x73\xc4\x68\x08\x09\x57\x2a\x32\x1a\xaa\xf8\xf3\x1e\xf1\xda\x3d\xa5\x9f\x6a\x53\xe0\xf0\x37\x04\x79\x96\x19\x64\x43\x83\xfb\x9c\x08\xc7\xe9\xb5\x5c\x8e\x54\x82\x90\x19\x35\x4a\x60\x8c\x42\x15\xcd\x0c\x44\x8c\x1a\xd4\x9e\x6f\x82\xd9\xa9\x5a\xd9\xa7\x86\xf5\x8f\x6b\xec\x94\x41\x42\xa3\xad\x0a\x28\x51\x13\x2a\x83\xfd\x55\x09\xa7\x9e\x94\x6b\xc9\xa5\x94\xe6\xcc\x6b\x43\xed\xd8\x83\xe8\x42\x11\x2b\xc9\x07\xe2\xb9\x27\x44\xf5\x5e\x2c\x2a\x76\x5b\xe9\x86\x7d\x11\x6c\xa1\xe8\x79\x90\x72\x16\x65\x8a\x33\x9b\x3c\xdf\xe3\x02\xf2\xbc\xec\x69\x0b\x99\x38\x3c\xa5\xd7\x82\xf6\x0a\xe7\x34\x2b\xb8\x9d\xce\xd8\xfc\x6e\x11\xfe\xf4\x79\xb9\x8a\xe2\xf5\xdf\x92\x34\x2b\x8f\xd3\xc6\xc9\x84\xf6\x21\x2a\x2d\x5c\xda\xa9\xb7\xe2\x69\x2b\x32\xea\xb0\x2d\x86\x7e\x83\x6e\xd0\xd3\x16\x18\x1e\x27\x5c\xa1\x92\x8d\x14\x2a\xa8\x28\xcf\x30\x56\xf1\xaa\x16\x6e\xf0\x01\xdf\x39\x8f\x2c\x82\xb2\x68\x20\x1d\x70\xf6\xb0\x26\x96\xd4\x83\x29\x0d\x9d\x39\xcc\x69\xec\xcc\xcf\x37\x97\xcb\xf3\xc2\x73\x67\x01\x33\x9a\x96\x21\xba\xd2\x3b\x07\xd6\x74\x3a\x8a\xd0\x0c\xeb\x48\xde\x29\x9a\x61\x4c\x78\x09\xac\xa8\x3e\xa7\x82\x7b\xea\x9e\xaf\x2e\xef\xcf\xf1\x5c\x6e\xca\x19\x2c\xe8\x7a\x7c\x2f\xfd\x7b\x50\x32\x5e\x4c\xe8\x6c\xbc\x28\x93\x69\x24\x5b\xb2\x39\xec\xe3\x53\x84\x93\x2b\x82\xae\xc2\xc9\x87\x47\x2c\x81\x85\x6b\x9c\xeb\x2a\xaf\x07\x57\xcd\xbc\xdf\xc5\xc8\x7a\x73\x75\xf3\xe1\xe3\xfb\x4f\xef\x2d\xbe\x0a\x8c\xb9\xdd\xee\x47\x2d\x67\x90\x50\x86\xba\x43\xae\xbb\xcc\x93\x60\xc5\x2c\x3e\xd3\xb1\xea\xa9\x8c\x8b\x74\xd2\xec\x71\xc9\x9c\x59\x98\xae\x97\xc1\x23\xb5\xa2\x38\x62\x16\x30\xd4\x6f\x63\x27\x58\xaf\x59\x34\x7b\xb5\x08\x97\x33\x94\x60\x48\x9c\x34\x99\x52\xeb\xa7\xe0\x3e\x90\xd8\xc0\xc4\x02\x94\xc9\xc8\xe8\x8c\x45\xd9\x8f\x12\x64\x4e\xd3\x2b\xec\xc4\x6b\x16\x21\x0c\x99\xf3\x90\x84\x19\x43\xd6\x85\x7c\xed\xb2\xa0\x68\xaf\xd5\xf2\xbd\xf8\xeb\x99\xba\x65\xf1\xc7\xa7\xcb\x38\x65\x88\x4f\x7b\xe6\xbc\x3e\x8f\x5a\xad\x73\xac\x1c\x97\x8d\x90\xe4\x31\xd7\x5a\x0a\x4f\x8d\x0d\x27\xf5\xbb\x66\x5d\x45\x31\x6b\xc1\x62\xaa\xee\xd8\x94\x8d\x50\x5a\x31\x08\x09\x97\x30\xbe\x87\x53\xa8\xdc\xd8\x2c\x97\x20\xd2\xc1\x30\x4c\x12\xba\x41\x95\x28\xfa\x84\x84\x85\x19\xda\x73\x5d\xe2\xb9\x2e\x78\x7e\x97\x78\x7e\x57\x1f\x5f\xc9\xc3\x0c\x97\xf4\x5c\xe8\xb7\x49\x5f\x50\x85\xaf\x7a\xeb\x1d\xf3\xf5\x55\x5e\x8b\x0a\x76\x4e\x7e\x44\x9c\x9b\xf4\x3b\xa4\xdf\x11\xc8\xc7\x47\xec\xae\xda\x7f\xb9\xad\x2d\x98\x6e\xbf\x8a\x91\xd7\x1d\xd4\x83\xad\x71\xed\x7d\x47\x78\xe2\x0a\x41\x19\x4d\x19\x48\xec\x8e\x94\x06\x7a\x67\x6d\xa8\x7b\x9e\x5e\x6e\xce\xb1\x74\x83\x4e\x68\x30\xde\x34\x9b\x13\xc8\xc6\xc9\xa4\xea\x0d\xa9\x37\x91\xd9\x1d\x2d\xff\x78\xee\x51\xef\xbf\x3d\xf3\x61\x47\xef\x9e\x4e\x5b\xd1\x4d\x75\xa8\xdb\x17\x36\xb5\xaf\x80\x5f\x2b\xc8\x39\x3e\x0a\xcb\x7d\x61\x91\xd1\x58\xc2\xcb\x05\x2a\x52\x72\x63\x22\xcb\x29\x7c\xc2\x32\x58\x9c\x4b\x0e\xa2\xac\xc0\x16\x43\x8d\xc8\x99\x97\x58\x86\xc0\xc6\xd9\x44\xad\x1e\x45\x3e\xb4\xc1\xb1\x00\x74\x91\xd3\xad\xa6\x58\xc8\x87\xe5\x44\x1f\x31\x55\x97\xe0\x37\x6e\x9b\x2b\x15\xb1\x19\x34\x0e\x01\xdd\x43\xf6\xab\x42\x47\xda\x76\xed\x40\xbd\x0b\x56\x2c\x1d\x1d\xbe\x85\xe4\xdb\x98\x8c\x27\x27\x5f\xe1\x97\x81\x6d\x5b\x63\x85\xa5\x26\x29\xc9\xc4\xa2\xb4\x30\x28\x57\xb4\x6a\xd3\x68\xcd\x59\xec\x0e\x6e\xe6\x69\xa0\xdc\xa6\xf1\x76\x8b\x18\x26\xa1\x84\x9e\x90\xe3\xda\x26\x9e\xdb\xd6\xe3\x29\x46\xed\x98\xfb\x9d\xdb\x53\x16\x5a\xb7\x60\x1b\x96\x5c\xce\x16\x58\x05\x59\xb0\xb0\x58\x27\x87\xc7\xa1\x56\x77\xe4\x5f\x0b\x55\xab\x7a\xc4\x73\x7b\x92\x2e\x88\x36\xd5\x68\x8d\x07\xbf\x20\xb9\x78\xaa\x20\x9d\xdd\x63\xfa\x81\xb7\x03\x08\xb3\xc7\x52\x82\x3d\x2b\xe4\x3e\x55\xbd\x63\x99\xe1\xd3\x5b\xdb\x35\x26\x41\x63\x22\x71\x06\x3a\x62\xe3\x78\x52\x0b\x0f\x69\x1e\xbe\x4a\xab\x71\x89\x67\x6b\xde\x1b\x55\x7e\x95\x6d\x23\x95\x57\x64\xf3\x46\x81\xc0\x77\x90\xc7\xae\x92\xf4\x6a\x1e\x2c\xb6\x8b\x18\xa3\x23\xb6\xbe\x72\x8c\x14\xfb\xed\x78\x18\x35\xbc\x7a\x16\x7c\x1c\x14\x49\x42\x8f\x71\x6a\xe3\xc2\x92\x8e\x15\x12\x81\x84\xff\x48\x1a\x34\xb0\xed\x08\xa5\x90\x60\xdb\x5e\x4a\xbf\xe1\x44\x12\xd0\x73\x7d\xb2\x2b\x88\x25\x7f\x84\x66\x82\x54\x72\x09\xe4\x5f\x62\xb4\x84\x04\xe7\x79\xf1\x4e\x41\x3b\x77\x3a\x2d\x29\x46\xc7\x23\x1d\xcf\xe8\xfa\x91\xa3\x51\x73\xb5\xef\x4f\x3b\x97\xde\x7e\xf3\x3a\xae\x91\x73\xf8\x3a\x7e\xda\xd6\x9e\xb6\xea\x25\x7c\xe4\x30\xb2\xe7\x57\xbd\xa2\x7b\x47\xb0\x67\xa4\x04\x89\x42\x95\x84\x40\x38\x32\x8f\x59\x21\x8f\x8e\xd9\x44\x1e\x2c\x05\x22\x4b\x21\x17\x71\x22\x14\x39\xd7\xcd\xc8\x79\xfd\xa2\xe2\xbf\x98\xc8\xc0\x32\x8d\xe8\x01\x81\xe8\xad\xf4\xe8\x35\x22\x94\x44\x6e\x80\x23\xcc\xb6\x94\xea\xf5\xda\xe2\xfc\xca\x99\x3f\x17\x82\xcc\x90\x8b\x85\x85\x4f\xb0\xd7\x08\x09\x9b\x9e\x21\x18\xbb\x30\xa5\xe3\x89\x94\x88\x15\xfd\x0c\x20\x29\x9d\xd4\xa7\x72\xe1\xb0\xd1\x38\x81\x60\x9c\x4c\x26\x24\x30\x39\xf0\x74\x6b\xb2\xe0\x52\x8e\x2d\x08\x66\x5d\xfe\x83\xb2\x8b\xed\x1d\xc5\x45\xc7\x88\xf7\x5d\xec\x7c\x64\xf3\x25\x9b\x9a\x7e\x19\x81\x6d\x07\x4e\xfc\x10\xfd\x69\x6f\x71\x29\xdf\x7c\x67\x8e\x62\x71\x9e\x28\x1d\xf4\xb5\xd0\x3d\xca\x34\x39\x4e\xf8\x5d\x85\x5c\xa4\x89\xbb\x92\xc5\xa5\xf8\xa0\xb5\x50\xaf\x2e\xd5\x82\xe9\xe3\x52\x26\xe9\x55\x46\x94\x0e\x16\xe9\x11\x8c\xe6\x7a\x67\x11\xe2\x77\xba\xb8\x69\xb5\x5c\xae\xbb\xb4\xbc\x33\xb7\x06\xb1\x3b\x54\x0e\x99\x7c\xfb\xb7\x85\x28\x59\xe2\x60\x4a\x2f\x0e\xdb\xb6\x5a\x9c\x14\x3a\x5c\x5f\x7f\x99\x21\x17\x8f\x5a\x2e\x49\xa4\xe1\xd7\x6b\x77\x88\xd7\xee\x80\xd7\xee\x12\xaf\xdd\x35\xfa\xf0\x15\x3f\x1d\xd1\x87\x37\xd1\x4e\x0f\x14\xd8\x5d\x97\xcf\xc4\xd9\x3f\x8f\x5b\xcd\xc9\xc8\x1d\x7f\xf9\xc7\xc9\x99\xd1\xb5\x41\x83\xd2\x08\xc5\x4d\xcb\x1d\x58\x38\xcf\x7d\xbf\xf8\xfd\xc5\xeb\x59\xbb\x0a\x9a\x8e\x7d\x36\x7b\x59\x1e\x6a\x27\x90\x5d\x5e\x5e\xba\x79\x8e\x02\x27\x63\x29\xdf\x5a\x23\x2e\xc8\xb8\x18\x7f\xad\x7f\x35\x8c\xef\x6b\xd8\xd9\x4f\x8c\x34\x3c\xb8\x27\x82\xdf\xef\x88\x02\x4f\xd2\x9b\x56\xc0\xdb\x2a\xea\x52\x97\x83\x62\x57\xf7\xd2\x86\xd8\xe1\xc1\xa8\xbe\x12\x5c\x38\x14\x40\x5b\x15\x47\x22\xe1\x66\xa1\xcf\x56\xd5\x19\x4d\xcc\x85\x5e\x3d\x46\xc8\x15\xb9\x56\xa5\x01\x89\xef\xe3\x44\x1b\x37\x8a\x43\x73\x6d\xf6\xeb\x91\x61\x4f\x34\xbb\x86\x67\x55\xb4\x84\xf6\x91\xf0\x20\x0d\x47\xed\x1d\xcb\x62\xe1\x79\x47\x7c\x05\x4a\xda\x13\x72\x06\x96\x61\x41\xf5\x21\x1b\x87\x13\x48\x76\xa4\x77\x79\x02\x27\x3e\x77\x44\xcf\xd5\xc6\x4a\xed\xdc\xaf\x8d\xde\xd2\x2a\x9e\x26\x53\x4b\xca\xeb\xbd\x21\xa7\x6f\xc8\xb2\x9a\x29\xd6\xf6\x07\x2d\xb8\x5a\xf8\x44\x66\x33\x09\xa3\x74\xcd\xa6\xd9\x75\xbc\x49\xa6\xac\x8e\x8a\xa6\x5a\x90\xdc\x02\x3a\x8c\x7c\xa7\xd1\x0d\xea\xf2\x6c\x9e\x2c\x6d\x1b\xc5\x28\x01\x2b\x12\xaa\x74\x9e\x87\xc5\x0f\x2e\xd3\x0b\xe1\x5d\x7a\x8e\x21\xfd\x68\xa0\x9e\x0a\xc4\xcd\x91\x65\x35\xf9\x5f\xb2\x91\xc6\x0f\xb5\x79\x32\x8c\xf9\xdb\x22\xbe\x5f\x46\x84\x92\x54\x5c\xe8\x5f\xa1\x1a\x3a\x82\x94\x1a\xcc\xcb\x41\x97\x62\xbc\xc5\x65\xf8\x8b\x81\x17\x53\x0c\xd2\xbe\x7b\x44\x1d\x0e\xd5\x22\x4c\x25\x44\xc4\x58\x24\xb6\xaf\x1c\x07\x1b\x96\x69\xc5\xf5\x86\xa4\x37\xd4\x71\x2c\x52\x0b\x51\x5e\xdd\x5e\x5d\x52\x91\x5a\x23\x57\x47\x70\xc3\x5d\x07\x75\x19\x25\x71\x9c\xa5\xab\x87\xea\xc3\xce\xb5\x77\x5f\x81\xe5\x0c\x0a\x1d\x4a\x69\x38\x85\x4b\x6d\xac\x4c\x83\x5c\xcb\xaf\x20\x0e\xf2\x06\x9d\xf2\x2f\xe8\x90\x3d\x39\x68\x6c\x76\x9a\xc6\xbc\x24\x8c\xee\x4e\xe3\x6c\xc1\x12\x99\xb9\x33\x88\x94\xe8\x79\x1a\x27\xc2\x9e\x50\x46\x1b\xc6\x02\x4b\x5c\xf9\xf1\x34\xa8\x09\x90\x5c\xfb\xd5\xff\x20\xbe\x2a\x00\xc1\x44\xa0\x60\x18\x4d\xe3\xd5\x3a\xc8\xc2\xdb\x25\x3b\x4d\xd8\x94\x85\xf7\x2c\x31\x82\x19\xab\x30\xf8\x9d\x3e\xe9\xf4\x45\x4e\xa1\x67\x21\xbb\x08\x18\x20\x86\x7a\x02\x49\xaf\x76\x1a\x20\xa5\xbb\x71\x05\x3a\xec\x05\x36\x34\x80\x25\x45\x11\x3d\x0b\xce\x20\xa4\x67\xb7\x2f\xce\xee\x20\xd0\x86\x6c\x2b\xe0\xca\x84\xfc\x15\xca\x5f\x02\x9f\xd8\x59\x06\x69\xf6\x26\x9a\xb1\x2f\x79\xce\x0b\xc2\xb2\x00\xc3\xb4\x74\x2e\x3f\x43\x78\x34\x3a\x13\x8d\x40\x96\x85\xc7\xde\xe4\x1c\x2d\xf3\x7c\x2a\x70\xe9\x6a\x41\xdf\x78\x77\x36\x22\x30\xb7\x10\x64\x44\xa4\x19\x1f\x67\xd9\x39\x64\xfd\xb3\xd5\xdc\x38\xa9\xa0\x11\x4d\xeb\x0f\x68\xd4\xf8\xeb\x5f\x53\x6c\x81\x12\x92\x36\x7c\x1b\x8a\x88\x01\xba\x31\x9b\x15\x69\x8c\xc0\x0d\x30\xf1\x40\x24\xc0\xf1\x8a\x27\xe8\x46\x05\x1b\x8c\x22\x27\xe4\x05\xcd\x88\x13\x62\x85\xf8\x9c\x61\x98\x8a\x57\xa2\x02\x50\xca\xb6\xd5\xee\x8a\x84\xab\xd5\x2e\x46\x51\x48\xbd\xf3\xf0\x62\xd7\xe2\xd9\xf2\x05\x36\x60\x61\x6d\x2a\x69\x7f\x28\xd2\x9c\x8f\xc3\x89\x86\xef\xda\x0a\x38\x81\x9d\x38\xb4\x5e\x8f\xf4\x04\x23\xa9\xcb\x21\xb3\x27\xec\x87\xe9\xae\xd5\xac\xd0\xec\x28\xcd\x46\xc2\xc1\x30\xcf\xbd\x33\x46\xa9\x77\x96\x11\xd6\xa0\xcc\xb6\xb3\x06\xcd\x34\x97\x3d\x96\x17\x46\xbb\xcd\x49\xa3\xd3\x1e\x57\x15\x3a\x53\xa3\xc4\xaf\x6c\x50\x9a\xed\xa3\x8a\x37\x2d\x72\x3a\x15\xc1\xb5\x29\xcb\x4e\x03\x91\xe9\x57\x2e\xd1\x86\x55\xb1\x05\x3e\xa5\x2c\x53\xfe\x98\x4e\xba\xa3\xba\x22\xeb\xe6\x46\xbc\x77\x73\x63\x85\xd1\xd3\xb6\x94\x72\x14\xde\x36\x97\x32\x90\x8a\x15\xd8\x89\x31\xe4\x32\xae\xc8\x7c\xb5\xab\x31\x83\x51\xa9\x3c\x86\xf3\x31\x46\x19\x8c\x27\x5c\x10\x94\x00\x90\x85\xd2\x2a\xfc\x42\x8c\x00\x3c\xe1\x92\xb1\x2b\xf9\x9b\x13\x10\x4b\x4b\x11\xd7\x89\x8b\xcf\xd0\x8c\x44\xca\x80\xb4\xdd\xa2\xa7\x2d\x34\x3c\x1d\xe6\x84\x61\xba\x60\xd3\xcf\x24\x96\x02\xb2\x47\x3c\xd7\xab\xb8\xd2\x6b\x27\x42\xaf\x2e\x6d\xc9\x51\xd8\x97\xa1\xc2\x3b\xed\xea\x93\x89\xe7\xe3\x9e\x0a\xd4\x96\x93\xd8\xb6\x33\xdb\x16\xf9\xc0\x6d\x3b\x74\xe6\x28\x83\x00\x9e\xaa\x39\x0b\x5c\xa8\xc7\x3b\x13\x2e\x6b\xdb\x8a\x53\xa4\xb2\x89\x09\x9e\x54\x58\x0b\x0f\x67\x4e\x31\x81\x0c\xfb\x9e\xe9\xc0\x59\x01\xa7\x3c\x22\x11\x31\x81\xc0\xca\x68\x32\x62\xc4\xf4\x23\x8b\x45\xc2\x25\x06\xf1\x7e\x67\x74\xb2\x85\x4a\xc3\x25\x03\x2d\x9b\x7c\x0c\x19\x5f\x84\x32\x28\x2f\xaa\x50\x49\x4b\x5f\xc1\x7c\x14\x2a\x2f\xe2\x7f\x0c\x47\x52\x19\xdc\x00\x8a\xab\x8b\xcf\x1e\x31\x8a\x74\x95\xd6\xdd\x17\x7a\x6b\x38\xb6\x6e\x6e\xa6\x71\xc2\x5a\x3f\xa5\x37\xe9\x22\x48\xd8\xec\xe6\xc6\x92\xe1\xc0\xb5\x77\xe8\xd3\x16\x9f\x1f\x10\xbb\xca\x85\x2d\xdb\xc9\xff\x94\x7c\x20\x1b\x65\xe4\x69\xcb\x25\x1c\x4b\xa7\xe0\xb6\xf8\x46\x92\x2a\x6c\x91\xf4\x2c\x72\xd4\x15\xac\xe2\x19\x23\xc2\xb3\x72\x64\xad\x37\x09\xb3\x88\x25\x89\xb3\x05\xd3\x78\xfd\x98\x84\x77\x8b\x8c\x58\xff\xfa\xff\x9c\xfa\xae\x37\x3c\xfd\x96\x45\x61\x7a\xfa\x61\x93\x2e\x3e\x07\x09\xbb\x3f\x45\x3f\x2f\xe3\x30\x89\xa7\x9f\x9d\x64\x83\x2d\x21\xf7\x48\x79\x47\x85\xc3\x2b\x5f\x31\xaf\x2e\xad\xcb\xae\x0e\xd1\x6e\x3f\x1f\x0e\xb8\x34\x19\x05\x42\x46\xa8\x8b\x4a\x28\x29\x7f\x9e\x4b\xb8\x01\xce\xdd\x50\x80\x85\xc3\x70\x46\x42\x94\x54\x56\x95\x04\x68\xd5\x0e\xb8\x5e\x5d\xaa\x97\x43\x30\x20\x5f\x41\xf3\x6d\x34\x44\xa0\x83\xe9\xc5\x36\x52\xae\xfa\xe2\x7c\xa4\x72\x2a\xe5\x15\x6e\xfc\x02\x02\x53\xae\xfc\xc2\x5c\x72\x34\x33\x4c\x5b\x1d\x4e\x74\x7f\x0b\x4a\x7b\x11\xdb\x51\x08\x2f\x88\x6b\x68\x58\x80\xb6\x27\x22\x4a\x58\x1f\x80\xe9\xb3\xa3\x0b\x37\xcf\x37\x97\x74\x39\x62\x23\xcb\x52\x74\x93\xa0\x98\xa6\x42\x37\x7f\x15\xcf\xd8\xcb\x8c\x4b\x07\x17\xdd\xae\x3f\xec\xe5\x79\x7c\xd9\xed\xb5\xbd\x61\x9e\x6f\x9a\x9e\x8c\x68\x42\xc1\xce\xc3\x4d\x8f\x3f\xde\x6b\xfb\x6e\x9e\x07\x97\xdd\x7e\xbb\xd3\x1e\xb1\x51\xaa\x95\xfd\x0d\x26\x31\xe1\xbf\xa5\x9d\x7a\x03\x9b\xa6\x8f\x49\xd0\x12\x6f\x34\x51\xdc\x12\x5f\xba\xb8\xf0\x5c\xdc\xec\x75\xbb\xed\x9e\x3a\x5d\x1f\x12\xaf\x3d\x94\xc1\x94\x22\xdb\xe3\x31\x8f\x7a\xff\xf8\xe0\x41\x99\x21\x27\xdb\x4f\xda\xa1\x42\x1b\xfe\x83\xd5\x4c\x9a\xd6\xe9\x2c\x66\x29\xe7\xb4\xc1\x74\xca\xd6\xd9\x69\xc2\xee\xd8\x17\x23\x6f\x44\x31\xcc\x8a\xb8\xc8\x60\xcf\x81\x4f\x06\x32\x27\xe5\x11\x7b\x91\x36\xe7\xf5\x94\xb5\xa8\x2b\x80\x64\xcf\xac\xb3\x3b\xa8\x4b\x7f\x21\x7d\x13\xd4\xf7\xa4\x5d\x28\xa5\xd6\x85\xd5\xd4\x1e\xf5\x96\xa5\x34\xb0\xb4\x49\xad\x53\xde\xfa\xbf\xa7\xd6\xdf\x37\xd5\x1b\x11\x2e\xa2\xb6\x03\xb0\xec\xbf\x6d\xe2\xec\xdc\xc2\xcd\xbf\xb7\xfe\x1e\x43\xda\xb4\x2e\x05\xe0\xf2\xc5\x99\xd5\xcc\xf8\x8f\x43\x1e\xd1\x5a\x0b\x79\xda\x9e\x24\xd2\x72\x98\x4a\xcb\xe1\x07\x61\x39\x0c\xf7\x23\x9f\x65\x70\x34\xff\x4c\x11\x4b\xcd\x69\x9b\x93\xc5\xdf\xc7\x0f\x2c\x79\x15\xa4\x0c\xe1\x3c\xcf\x94\x7a\xcb\x1f\xd4\xc2\x62\x7b\x8b\x41\xc7\x99\x40\x62\x0c\xef\x8e\xdd\xf1\x58\x7a\x19\x11\xc7\x28\x0d\x42\xed\x62\x98\x0f\xbb\x7b\xeb\x34\x07\xd5\x71\xae\x98\x18\xcb\x60\xa4\x91\x75\x6a\x11\xf5\x60\xc2\x45\xf8\x48\x81\xf1\x4e\x2f\xe8\x26\xcf\x2d\x8b\xd2\xa5\x36\x85\xa4\x27\xd2\xad\x65\xda\xda\xc0\x82\x2a\xe5\x65\x09\xc2\xc3\x6e\xca\xc2\x25\x9a\x9f\x15\xd8\xf2\xc5\x48\x2d\xf4\x48\xcc\x6d\x1b\x2d\xe8\x42\x6d\x19\x17\xe6\x18\x43\x30\x5a\x34\x53\x92\x36\x17\x72\x7b\xb4\x89\xd7\x6e\x17\x59\x21\xca\x6d\xf2\x5c\xc9\xe6\x19\x14\x47\x4e\x68\x49\x58\x04\x78\x10\x24\xd4\xb2\x44\xae\x45\x89\x11\x19\x73\x8a\x12\x73\xd1\xd8\xad\xc1\x15\x7a\x15\x6f\xa2\x4c\xc9\xae\xb7\xec\x34\x62\x77\x22\x32\xd1\x52\xc6\xff\xf8\xd2\x3d\x47\xf1\xe5\xe5\x25\xf5\xb0\x0c\x35\xce\x30\xf6\xec\x98\x6b\x33\xfc\x7a\x27\x2b\xc8\x2e\x49\x38\x22\xef\xf4\x4a\x92\x50\x81\x53\x10\x96\xc1\x94\x5a\x63\xab\x19\x34\xad\x89\x05\x1b\x6a\x68\x4c\x69\x33\x6d\x5a\x2f\x2c\x4e\x39\x55\xa9\x2c\xf9\x83\x55\xf5\x16\x2c\xbf\x15\xd2\xa7\x2d\xa4\x34\xde\x77\x40\x6c\x34\x02\xbe\x13\x70\x9e\x5b\xbf\xfe\xf2\x7f\xfc\xeb\x7f\xb1\x1a\x54\x5d\x88\xe2\xad\xf0\x4e\xe5\x7b\x2a\x1d\x65\x68\x8e\x09\x7f\xfa\x84\x6f\xe7\x70\x9c\x4c\xe8\xc6\xdc\x66\x69\xb9\x2d\x42\xe1\x87\x38\x15\xa6\xce\x7a\xd9\x82\x51\x93\x46\x81\xc7\xe5\x4e\xc4\x68\xa1\xcd\xa2\x0d\x58\x16\xc6\xe0\xef\xdd\x58\xca\x1b\x15\x08\x2b\x11\x9d\xaa\x2c\x97\xf5\x9b\xb1\x46\x82\x33\xe0\x72\xfe\x9a\xfd\x35\xfa\xeb\xfd\x5f\xe7\x7f\x4d\x4e\xff\xf5\xbf\xfe\xb7\xff\xeb\x97\xff\xf6\x5f\xff\xcf\x5f\x7f\xf9\xe5\xd7\x5f\xfe\xf3\xaf\xbf\xfc\x0f\xbf\xfe\xf2\x3f\xfe\xfa\xcb\xff\xf4\xeb\x2f\xff\xe5\xd7\x5f\xfe\xe7\x5f\x7f\xf9\x5f\x7e\xfd\xe5\x7f\xfd\xf5\x97\xff\xed\xd7\x5f\xfe\xf7\x5f\x7f\xf9\x7f\x7f\xfd\xcf\xff\xf7\xff\xf7\xcb\x2f\x7f\xdd\xf8\xae\x3f\x10\xff\x0e\xff\xba\x99\xb3\xf9\xdc\x52\x2a\x57\x5d\x06\xa3\x42\xd1\xaf\xc4\x97\xf7\x7b\xea\x08\xbc\x2d\xc3\x4a\xba\x43\x85\xd3\xea\x62\x31\x90\xda\x07\x70\x41\xa7\x5c\x7f\x79\xb3\x5a\xb1\x59\x18\x64\x0c\x66\x74\x2a\xa1\xe3\xca\xa2\x35\x9d\x3a\x6f\x59\x9a\x06\x77\xec\xd5\x22\x88\x22\xb6\x84\x15\x9d\x3a\xdf\x86\xe9\x9a\xeb\x34\x70\x4f\x5d\x78\xe4\x0b\xe2\x6e\x3f\x72\xbf\x29\xd4\xf5\x70\x8e\x1e\x77\xf2\xff\xf1\x59\xd2\xe0\xab\x7c\x09\x28\xbb\x17\xbf\x86\x0c\x71\x2a\x78\x5b\xd9\x95\x1a\x93\x40\xb8\xb6\xe1\xed\xc9\xc2\xb6\x67\x79\x8e\x16\x07\x32\xda\x8c\x27\x90\x50\xef\x7c\x0f\xea\x39\x39\xc7\x1a\xc1\xa7\xd0\xae\x93\x66\xb3\x3c\x1b\x79\x1c\x37\x9b\xf7\x15\x5f\xf9\xb4\xce\x04\xc5\x46\xac\x4c\x95\xc8\x30\x64\x78\x0b\x11\xba\xc7\x70\xbf\x35\xe3\x6f\x18\x7e\x32\x3a\xb6\x85\x3d\x27\xcb\x39\x1e\x45\xd5\x2e\x94\xae\x8b\x01\xba\x03\x06\x1e\xc6\x5b\xb2\xb2\xed\x95\x13\xc5\x0f\x3b\x0f\x8b\x32\xf3\xb9\xf5\x08\xc5\x14\x85\xc2\x24\xb2\xc6\x0e\x5f\x8d\x3e\x84\xe2\xaf\xe7\xc4\xd1\x4a\xce\x22\xbd\x15\x48\xd8\xb1\xb3\x8e\xd3\x4c\xcd\x2c\xc4\xbc\x06\x32\x75\x82\xd9\xec\xea\x9e\x45\xd9\xf7\x61\x9a\xb1\x88\xd5\x47\xc9\x1a\x2f\xda\x76\x63\xea\x84\x2b\xfe\x89\x6b\xe1\x52\x91\x8e\x50\xb5\x95\x53\xf3\x3b\x88\x35\x2d\x0b\x38\xb5\xd9\xc2\xfe\xc7\x90\xa5\x9a\x68\xc1\x2d\x57\x71\x31\x89\xa8\x15\x47\x09\x0b\x66\x8f\x69\x16\x64\x6c\xba\xe0\x64\xd6\x0a\xa3\xd3\x25\xb2\xa4\x0b\x87\x55\xf5\x1c\xd8\x54\x9c\x9a\x8c\xa7\xb0\xb3\x5f\x91\x39\xcf\x1b\x27\x61\xab\xf8\x9e\xc9\x17\x25\xe0\xc4\x5d\x61\x53\xae\x02\x65\xa4\x12\x33\x2f\xde\x64\xc5\xe8\x83\xb0\xca\xec\x18\x25\x16\x20\x11\xdc\x67\x45\x94\xa4\x46\x71\x16\x5e\x42\xca\xba\xda\x26\x7d\x95\x67\x41\x6c\xf2\x63\x06\x7c\xc9\xbe\x64\xce\xaa\xe0\x0b\xc4\x45\xfa\xaa\xaf\x08\xf4\x48\x7a\x3c\xe1\x0b\x77\x14\x22\xd6\x14\xc9\x73\xe2\xc2\xac\xa8\x78\x8c\xf8\xfa\x11\x7b\x7e\xc1\x3c\x8f\x24\x95\x2a\xbc\x34\xcd\x13\x12\xf7\xa4\x8a\xc3\xa5\x04\x88\xcc\xf0\xde\x34\xd9\xe7\x8f\x49\x1c\xdd\x9d\xca\x1d\x6b\x08\xa1\x15\x76\x58\xe6\x3d\xf2\xea\x32\x90\x19\x61\x20\x5c\xee\x78\x7e\xe4\xe9\x69\x98\xbe\x0b\xde\xa9\x50\x0e\x97\x20\x76\xe9\x8e\x42\x12\x61\x54\x04\x13\x78\x75\xd9\xb8\x0a\xcb\x49\xff\x99\x0a\x4d\xb4\x2b\x4c\x6b\xc7\x41\xef\x68\x82\x2b\x73\xfe\x0f\x4c\xba\x01\xcf\xc8\x27\x5b\x8c\xf9\x1e\x0a\x07\x71\x77\xe6\xfd\x68\xf6\xa8\xaf\x75\x46\xc5\x42\x47\x95\x1e\x89\x5a\xbf\x96\xcc\xb0\x7d\x04\xa6\x4e\xe4\xc9\x2c\xad\x57\x75\x09\x7a\x2a\x32\x5e\x38\x47\xc2\x54\x65\x68\x48\x43\xd3\xa8\x51\x8a\x43\x3d\x5f\xc3\x7f\x28\x36\xe9\x75\xba\x8a\x4f\xaa\xe8\xcb\xb6\x4e\x63\xe1\xf5\x24\x7e\x71\xdf\x57\xf8\xc5\x5e\x5f\xe2\x17\x8b\xa9\x58\x69\xd9\xfb\x5e\x94\x0c\x30\x3c\xea\xe4\x6b\x77\xda\x23\xed\x56\x59\x9f\x6e\xd4\x81\xc8\x83\xb2\x8f\x5e\x69\x37\x9d\x2f\x0a\x98\xe4\x5a\x05\xc7\xbe\xd7\xd1\x9f\x2f\x4b\x67\xae\xcf\x1a\xa3\xe4\x93\xb2\x08\xc1\x5b\x8d\x8e\xf5\x4a\xc1\xb0\x7f\x94\x9e\x2c\xf0\x41\x18\x91\xfa\x18\x7e\x12\x39\xde\x3b\x18\xbe\x55\x71\xa6\xef\x14\x0e\xf3\x1b\x9d\x9f\xe3\x7b\xfe\x8a\x8b\xe1\x35\xef\xf1\x10\xc3\xcf\xca\xe6\xf7\x47\x2a\x4d\x9f\xf0\x0d\xfd\xd9\x99\xc3\x9f\xe9\x1f\x9d\x39\xfc\x48\x43\xa7\xdc\xa5\xf0\x37\x1a\x3a\x85\x36\x09\x3f\xd0\xd0\xf9\x73\x18\x65\x03\x61\xed\x84\xbf\xec\x86\xb4\xc3\x77\x74\x23\x43\xd5\xbf\xd9\xcc\xe7\x2c\x81\x3f\xd1\x8d\xf3\x6d\x90\x05\x3f\x84\xec\x01\xfe\x40\x5f\x21\x17\xc3\x3f\xd0\x57\xc8\xc7\xf0\x8f\xf4\x15\x6a\x63\xf8\x27\xfa\x0a\x75\x30\xfc\x27\xfa\x0a\x75\x31\x30\x46\x5f\xa1\x1e\x86\x8c\xd1\x8f\xa8\xe1\x62\x48\xc4\x85\x87\x21\x62\xf4\x27\x89\x3f\x92\x42\xc8\xaf\x3f\xb3\xc7\x14\x62\x7e\xa5\x82\x10\x21\x60\xf4\x2f\xa5\x35\xff\xfd\x1c\x52\x5e\x90\x88\xc4\x53\xb0\x29\xaf\x3f\x86\x77\x8b\x0c\x96\xbc\xe0\xa7\x38\x8c\x60\xca\xaf\xd2\x38\xc9\x60\x2e\xae\x44\x22\xa2\x05\xbf\x2c\xfc\xea\x66\xf2\x57\x05\xdf\x70\xcd\xe8\xdb\x4a\x30\xe1\x4a\x14\x54\x33\xe2\xdc\x33\xfa\x09\x59\x7c\x6c\x66\x37\x15\x1f\x75\x78\x14\x77\x66\x6c\xbe\x53\x7e\xc7\x68\xea\xbc\x7a\xff\xee\xfa\xd3\x47\xb8\xe5\xd7\x9f\xfe\xf2\xe1\xea\x5b\xb8\xe1\x97\x3f\xbc\xb9\xfa\x11\x1e\xf8\x18\x79\x50\x2b\x1f\xbf\x64\xe8\x03\x62\xc0\xc6\x8f\x6c\x22\xc4\x15\x0c\x57\xac\x4e\x80\x3f\xf5\x28\x15\xf2\xc3\x0f\x22\x72\x95\x4f\xaa\xd7\x13\x33\x87\xc6\xde\x04\x3b\xb7\x62\xfe\xf0\xd8\x9d\x6c\x31\x7c\x61\xb4\xd1\xf8\xc1\xb6\x1b\x8d\x1f\x8c\x03\xa4\x94\x65\xb6\x5d\xa9\x5a\xd6\xe7\x49\x60\x73\x61\xed\x83\x6b\x56\xab\x72\xaf\x95\x82\x95\x70\x05\x2b\xf9\x3b\x7d\x2c\xf0\xa3\xe6\x0a\xf1\x7c\x9e\xb2\xac\xc2\x15\xe0\x3d\xdb\x65\x41\x0f\x22\xfc\xe6\x96\xc9\x4c\x99\x9a\x1e\xaa\x80\xf6\xbf\x99\xc0\x3a\xc1\xa9\x98\x02\x99\x75\xac\xc1\xa5\x92\x97\xbb\x0d\x13\x39\x9d\x64\x8d\xf7\xaa\x46\xac\x6b\xb2\xde\x64\xb5\x35\x99\x61\x07\x46\x63\x75\x16\xf6\x2d\x7c\xde\xfd\x8a\x7a\xe2\xd3\xee\x3c\xc1\xa7\xdd\x27\x4b\xd7\x79\x17\x22\xaa\x3d\xc9\x20\xa4\x2f\x99\x88\x94\x38\x8f\xb8\x98\x2b\xf4\xa9\x4c\x08\xb7\xc5\x61\xe2\x16\xde\xb2\x3d\x7d\xee\x1b\x71\x71\x20\xe9\x88\x84\xb3\x9f\x8d\x93\x89\x88\x05\x7b\xc5\x0e\x9e\xcc\x49\x7b\xdc\xd5\x01\x67\xfe\x29\xdd\x1c\x48\xb3\x32\x2f\x4d\xc1\x53\x58\xd0\xcf\x28\x95\x99\x64\xc4\xb1\xd0\xc2\xb6\x1b\x5f\xd0\x42\x61\x1d\x05\x74\x21\xe5\xb1\x14\x83\x48\xa9\x95\x51\xf7\xbc\x21\xe0\x5a\x2a\xd8\x44\x59\xb3\x89\x23\x29\xe5\xc7\x2a\x17\xf3\x49\x4a\x23\x91\x3b\x6e\x6e\xdb\x9b\x4b\xdf\xb6\xd1\x94\x2e\xd1\x14\xcc\x5c\x95\xe0\x8b\x38\x17\x17\x12\xba\x42\x45\x6e\x7d\x39\xae\x22\xe6\x3c\xc1\xe7\xc9\x65\x26\xaa\x17\xa8\x98\xf3\xd1\x14\xa5\xe3\x6c\x02\x19\x26\xfc\xaf\x31\xce\x1f\x2b\xa2\x65\x89\x40\xee\x42\xb6\x3f\x38\x49\xf1\x85\x0c\x9f\x67\x97\xec\x1c\x0b\xab\x53\xd9\x36\x66\x4c\x62\xb2\x85\x0f\x6a\xd7\x55\xb6\xd8\x8c\x95\xe1\xe6\x3f\x88\x9c\x23\x18\x7e\x62\x35\x41\xbf\x33\x0d\xa7\xf2\x81\x8d\xe6\xea\xa5\xf7\x4c\xd9\x39\x88\xbe\xaa\xb0\xe2\x6f\x19\x7d\x2a\x53\xb3\x92\xda\x85\xfb\xba\x5a\x13\xf0\x45\xf5\xbc\x24\xac\x78\x0b\xec\x9e\x25\x8f\x75\x21\x75\xff\x64\x56\xf8\xbc\xc4\x3d\x78\x0b\xf3\x70\xb9\xac\xab\xed\x7b\xd5\xf3\xda\x4e\xce\xc3\x65\xc6\x92\xba\xd7\x3e\xab\xd9\xf9\x87\xdf\xd1\x18\x51\x71\x34\xab\xab\xf6\x3f\xfd\xce\xbe\x45\x33\xc1\xc6\xea\xaa\x64\xec\xf7\xd5\x59\x93\x3f\xe9\x0f\xbf\xab\xa6\x50\x32\xd8\xba\xb6\x25\xbf\xaf\x6d\x61\x34\x5d\x6e\x66\xac\x2e\x07\xcb\x69\xf6\xfb\xaa\xe4\xbc\xbd\x36\x7e\x93\x1d\x5b\x1f\x86\xfc\x50\xf7\x72\x70\xf4\xe5\x55\xb0\xae\x7b\xe9\xe1\xf7\x75\x40\x4a\x2b\x75\x15\xa6\x47\x5b\x61\x48\x39\x75\x2f\x6f\xbe\xf2\xf2\x3d\x4b\x52\x56\x9b\x8d\x0c\x32\xaa\xdf\x29\x89\x5a\xa9\x71\xa1\xec\xcc\xe7\x24\xdb\x3d\x8f\x2e\x92\x73\x2c\xd1\xd5\xc7\xd1\x04\xe4\xdf\x66\x73\x22\x4b\x5a\xad\x4c\x95\x65\x66\x42\xe0\x45\x98\x6e\x21\x8d\x57\xb5\x3d\xfe\xc7\xdf\x35\x82\x5c\xa8\xab\xab\x6d\xca\x76\xc9\x18\x7f\x78\x73\x2b\x98\x7a\x6d\x8e\x9f\xe2\xc9\xa8\xc0\x69\x85\x90\x3e\x0a\x4e\x6c\xb0\x7d\xf4\x01\x25\x90\x08\xae\x8e\x51\xa2\xa4\x28\x48\x9c\xdb\xc7\x8c\xbd\x17\x32\x4d\x33\x7c\x91\x38\xdf\xfc\xe5\xd3\xd5\xf5\xcd\x87\xab\x8f\x37\x57\xdf\x5f\xbd\xbd\x7a\xf7\x09\x56\x46\x62\xea\x6c\x14\x91\x47\x94\x41\x84\x71\x2b\x14\xaa\xd6\xbb\x03\x62\x84\x26\x59\xbb\x04\x1e\x44\x70\xca\x16\xde\x54\x19\xb9\xbe\xad\xf4\xf4\x6b\x86\xcc\x61\x03\x8f\x6b\xed\x42\x14\xd0\xd9\x25\x25\xa3\x0f\xe9\x0a\x45\x05\xa3\x8c\x25\xb4\x61\xd8\xcc\x2e\x93\x5d\xb1\xad\x54\xe6\xa5\x05\xfc\x22\x3c\xc7\x72\xa2\x9b\xf1\x84\x46\xe3\xb8\xd9\x9c\x6c\xe1\x7b\x46\x9f\x34\x70\xc8\x3e\xe3\x8a\x77\x99\xd5\x56\x02\x8f\xec\x3f\x19\xee\x3f\xa9\x90\x4b\xf6\x9f\x8d\xf6\x9e\xdd\xc2\xeb\x03\xa3\x2a\x85\x40\x36\xbe\x65\x13\xdb\xd6\x71\xed\x85\xb7\x59\x66\xdb\x32\x0b\x84\x6d\x2b\x5b\x74\x33\xc3\x94\x16\x3e\x80\x5b\xf8\xf9\x40\xbd\xaf\xb9\xe0\x96\xd1\x3b\x19\x63\x84\x47\x73\xe4\xcb\x40\x21\xf2\x67\x69\xa3\x81\x3f\xee\xcb\x6d\xca\xde\x8e\x76\x5e\xb6\xed\x07\x94\x70\xe1\x17\x25\x60\xa9\x9c\x06\x38\xcf\xc5\x4f\x91\x3c\x44\x5d\xa7\xf2\x5a\xc4\xf6\x15\x0e\x0c\xea\xde\x43\x12\x66\x12\x8d\xd4\xb6\x1b\x89\xa3\x7f\xaa\xbb\xac\xf0\xe6\x57\xf7\xcb\x82\xd1\x37\x85\x23\xa3\xf4\x6c\x54\xc0\x90\x0c\x6f\x4f\xee\x58\x9e\xa3\x3f\x3a\x73\xfa\x33\x83\x9f\x9d\x39\xfd\x23\xc3\x10\xa0\xc0\xb9\x6e\x06\xce\xeb\x17\x8d\x3b\x56\x7a\xdf\x3f\x1d\x0a\xd6\x22\x3f\x33\xa8\x04\xa9\x3d\x92\x3f\x32\x81\xe5\x64\x4c\xec\x42\xcd\xa8\xd0\x33\x6c\x1b\x2d\x18\x9d\xd5\x09\x42\x4b\x56\xf1\x80\x14\x6b\xff\x1b\x46\x67\xe8\x89\x4b\x3c\xf8\x64\x86\xbe\x61\xf0\x3d\xc3\xb0\xe0\x17\x6b\x7e\xad\xf4\x4c\x0c\xe2\xde\x93\x50\x08\xc9\x3b\x26\x12\x80\xbd\x61\x30\xad\x4b\xab\x85\x9f\xb6\x05\xe2\x3d\x59\xec\x82\xe1\x93\x9f\x78\xfb\xdf\x32\x5e\x9f\x25\xa9\x82\x05\xd6\xad\x55\x96\x15\x04\xc2\x02\x2b\xae\x96\x7f\xaf\xe3\x94\x96\x65\x79\x11\xbb\xc4\x2c\x0c\xdf\xf0\xa2\x15\x3b\x26\xdd\xf3\xc5\xbc\x3d\x82\xa3\x05\x9b\x22\x21\x58\x13\xa1\x0d\x6d\x34\x36\x78\x64\xbd\x5a\x06\xab\x35\x9b\x59\xc4\xb2\x70\x53\x81\x21\xc1\x9c\x8a\x15\xd6\x64\x30\xa3\x62\x7d\x35\x19\xac\x69\x38\x5e\x4e\xe0\x91\xae\xf3\x5c\x1c\x11\xac\x6d\xfb\x3d\x5a\x63\xb8\xa5\x8d\x75\x9e\x37\x52\xe7\xe5\x37\x3f\xe8\xc4\x4d\x6b\xdb\x36\x81\x8c\x3f\x9b\x4d\x51\x9a\x4a\x72\xa8\x2f\xd5\x47\x95\x05\xc8\xb9\x99\x15\x34\xd8\xb9\x1f\xcf\x27\x28\x79\x91\x35\x23\x27\x86\x2b\x86\xb7\x5a\xaa\xdf\x4d\xe0\x56\x5b\x67\x79\x38\x2d\x6a\x95\x10\x07\x48\xd9\x18\x05\xaa\x0a\x8a\x84\x7d\xd5\x25\xd1\xa5\xdf\xed\x8e\xfc\x6e\x97\xf8\xdd\xae\x1d\x61\x08\x9d\xfb\xf1\x4c\x7e\x3b\x74\x62\x88\xcc\xaf\x0b\x0e\x53\xee\x20\x11\xce\xbf\x3d\xb9\x1d\xa1\x35\x4d\x50\xb5\x01\x10\xe2\xa7\x29\x62\xb0\x86\x25\x58\x37\x33\x95\xab\x44\x28\x5e\xb0\x81\x39\x75\x61\x26\x49\x30\xa7\x00\x4a\x6f\x4d\x4c\x57\xb4\xef\xf2\xdc\x32\x8c\x30\x16\xa5\x68\x43\x6f\xf8\xc3\x79\x6e\x5d\x0b\x67\x9e\xea\xed\x4d\x11\xc8\x28\x75\xe9\x64\xf4\x89\xa1\x35\xdf\xdf\xaf\xd4\xe6\xe1\x3f\x4e\x62\x9a\xc0\x8c\x73\x8d\x08\x54\x4e\xf1\x47\x2a\x59\x9b\x5c\xa1\x27\xa6\x55\x38\x94\x90\xc4\xfb\xaa\x7d\xc9\x23\xc2\x39\x42\x01\x7d\x6c\xcd\xf0\x85\x7b\xf0\xa9\x22\xd1\x3a\x0a\xe8\x0a\x85\xf8\x45\x86\x9b\xb3\xcb\xc7\xc3\xb5\xa6\x34\x38\xcb\xe4\x5b\x29\xbd\x47\x09\xe7\x58\x5c\x5b\xfa\x0e\x05\x34\x7d\xa1\x12\x85\x2e\x10\x13\x63\x0b\x4f\xb7\x24\x86\x98\xcc\x60\x49\x02\x60\x24\x85\x7b\xc2\x1f\xfe\x13\x8a\xf1\x16\x9f\xcf\x2f\xd2\x73\xfc\x19\x31\x98\x37\x9b\x5c\xd3\xfa\x42\x8d\x85\x4b\xaf\xd1\x37\x82\x6c\x7c\x01\x33\x71\x86\x05\x6b\x8c\x49\x85\x54\xad\x45\xd8\x51\x8d\xb1\x64\x8d\x5a\xf2\xce\xbb\xbd\x44\x57\x6b\x90\x0f\xc8\x7c\xb3\xf2\xda\x73\xba\xfa\x92\x2f\xa7\x86\x8b\xf3\xfc\xc0\x02\x12\x4b\xa6\x70\xa0\x95\xab\x09\x03\x5f\x31\xa3\xaf\xad\x95\xf8\xe8\x5a\x89\x47\x85\x22\x1f\x8e\x78\x5b\x1e\x51\x02\x6a\x4d\x40\xa8\xbd\x15\x1b\x94\x46\xbb\x77\x31\x51\x05\x98\x1c\x5b\x66\xea\x29\x3e\x73\x7c\xc8\xff\x80\xee\x1a\x94\xee\xbb\xc5\x8f\x5e\xa2\xc7\x22\x94\xf3\x25\xba\xc3\x98\xf0\x92\x4a\x96\x48\xf1\x95\x75\x9e\x2f\xd0\x1a\x18\x3c\x8e\xd9\x44\xc0\xda\x1b\x53\xf8\x05\xa2\x3c\x47\x5f\x2a\x31\x1f\x6b\x2c\x17\xf7\x27\xfa\x65\xbc\x66\x13\x78\x4b\x1b\x8d\x4f\xb6\x8d\x4a\xd0\xb9\x4f\x02\x84\x4d\x7b\x6f\xc9\x5f\x18\x5e\xd1\x82\x73\x9c\xf0\x2f\xde\x33\x11\x4a\xcc\xd7\xc7\x2d\xe3\xa3\xcf\xaf\x6e\xca\xc2\x47\x06\x6b\x0c\x68\x33\x52\x93\x8b\xc7\x2b\x36\xa1\x74\x49\x56\xa2\xdd\x5f\x70\x9e\x7f\x83\xbe\x1c\xa1\xeb\x4b\x4e\xd0\xaf\xc6\xcb\x09\x5d\x0b\x16\xfb\x5d\x33\x70\x7e\x14\x6c\x16\xad\x1b\xf4\x51\x24\xec\x12\xac\x17\x96\xf0\xb4\x27\x72\x92\x6c\x6b\x72\xe6\xca\xda\x7c\x74\xe2\xb9\x9e\x11\x11\x31\xb7\x84\xa7\x79\x12\xaf\xc8\x2b\x06\xf1\x9c\x7c\xe4\xcc\xcc\xda\xab\xd1\xe2\xad\xe6\xa3\xfd\xa5\xee\x26\x5f\x1f\xfc\x73\x1f\x60\xc9\xf9\x2e\xbc\x41\x4b\x55\x20\xbe\xff\x85\xf1\x8f\x48\x0e\xbb\x35\x6f\x34\xde\xc2\x52\xf0\xe7\x28\xcf\xbf\x14\x16\x59\x4a\x17\x4c\xcc\x5c\x51\xb0\x60\xe6\x5b\x35\x5b\xcd\xc3\x45\x34\xb1\xe8\x90\x66\xeb\x95\xaf\xa1\x1a\x5b\xe9\xd8\x03\x7f\xb2\x63\xfd\x45\xb8\x21\x8f\x5f\x91\xb8\x8b\xf7\x6e\x8b\xb4\x56\x95\xca\xbe\xec\x3c\x23\x07\x58\xbe\xbe\xc5\xa2\x49\x75\x42\xc3\xb7\x7c\x82\xdf\x8e\x3e\x91\x57\x7c\x04\xde\xca\xf1\x5d\x33\x78\xa5\x11\x68\x6a\xe1\x7b\x4c\x2f\xe1\x32\x9c\x4e\x23\xeb\xa9\x58\xf4\xdd\x3c\xb4\x7e\x9f\x78\x7e\x5f\x9c\x4d\x7a\xed\xbe\x38\x25\xf4\xda\x03\xd8\x39\x8c\x2b\xc2\x70\x75\x0c\xbb\xd7\xe9\x12\xaf\xd3\x05\xaf\xd3\x23\x5e\xa7\xf0\x45\x2d\x10\xfb\x34\xf0\xb7\xd7\xeb\x10\xaf\xa7\x33\xc2\xb5\x87\xa4\x3d\x84\x8e\x4b\x8a\xd8\x56\x99\xcf\x52\x04\x3f\x54\xb3\xe0\x1a\xb9\xe3\xf6\x22\x55\x34\x84\xb8\x91\x41\xce\xc0\x03\xdc\xc9\x94\xcb\x5b\xfa\xdb\x7c\xa3\xbb\x0a\x4f\x61\x30\xd4\x41\x4d\x3d\xe5\x7a\xa1\x33\x96\x78\x7d\x79\xa6\xd4\xdb\x3d\x53\x6a\x0f\xe5\x99\x92\x38\x39\x9a\xe9\x93\xa3\x75\x79\xda\xb3\x2a\x5c\x97\xef\xd5\x09\xcd\xa3\x86\x06\xbd\xa3\x46\x50\x3a\xdc\x52\xc5\xe5\x84\xdd\xa5\x61\xc1\x0d\x8d\x2a\xc7\x2c\x0f\x34\x2a\x8f\x59\xae\x68\xe4\x70\x71\x05\xbe\xd0\xc8\x3c\xca\xb9\xa6\x91\xf3\x26\x9a\x87\x51\x98\x3d\xc2\x7b\x7a\x03\x2f\xe9\x95\x13\xdc\xa6\xf0\x99\x5e\x09\xdc\xb9\x4f\xf4\x4a\x2a\xf2\xf0\x96\x5e\x39\xcb\xf8\x0e\x5e\xd1\x2b\xe7\xfb\x77\x3e\x7c\xa4\xe1\xc8\xba\xb9\xb5\x48\x21\xbb\x7e\x10\x25\x4b\x5e\x62\x48\xa8\x3f\x89\xd2\x58\x95\x2a\x79\xb6\x44\x02\xfa\xb6\xce\x9b\x85\xef\x22\x79\xf0\x90\xf0\x91\x1d\xbc\x48\x5a\x59\xcb\x83\x0d\x45\xde\xc5\x45\x8a\x5b\x1e\x2c\xe9\xe6\xf2\xd2\x83\x29\xf5\xdb\x42\x3b\xfe\x2c\x20\xf1\x3a\xb8\x25\x2e\xfa\x7d\x4c\x5c\x21\x16\x2d\x28\xbb\x70\xf3\xdc\x95\xb9\x3e\xbc\x33\x76\xe1\x8e\x3c\xe2\x0a\x86\x8f\x18\x7d\x89\x18\xc6\x0d\xca\xf2\x9c\x51\x4a\xaf\x47\x28\xa4\x02\xea\xcd\x23\x2e\x44\x74\x83\x09\x8a\xe8\x27\xf4\x16\x31\x7c\xf6\x0a\x03\x7b\x81\x62\x2a\x3e\xc0\xe5\x3d\x8f\xcb\x81\xad\x16\xc4\x2f\xa8\x8f\x01\xb1\x26\x8d\x9a\xcb\x4b\xea\x8d\xa6\x67\x31\x99\xbe\xe0\xcf\x79\xad\x25\xc6\x2f\xe2\x4b\xea\xf3\x67\x9b\x4d\x88\xcf\xf8\xb3\xe2\xb9\x0d\xff\x98\xfa\x8a\x7a\x11\x85\x14\xb1\x17\x71\xcb\xc3\xe2\xed\x8c\x3f\x49\x97\x98\xf0\x56\x89\x92\xa5\x79\x8b\xba\x18\x9f\x67\x97\x74\x70\x1e\x8c\xe7\xcd\xe6\x84\x72\x91\x33\x84\xf0\x8c\xfa\xdd\x1e\x64\x2d\x3a\xc0\xe7\x22\x6b\x39\x8d\x2e\x2e\xb2\x3c\x84\xb4\x49\xb3\xf3\xf4\xd2\x35\x9f\x8f\x20\x92\xcf\xa7\xe2\x79\x6d\xd1\x1a\xb7\x5a\xf3\x49\x4e\x3d\x7f\xf0\x62\x01\xc1\xb6\x98\xad\x77\x3b\xb3\x55\x4c\x4d\x2c\xa6\x26\xe4\x53\x13\xd0\x98\x4f\x4d\x4a\xc3\x56\x1f\x36\x34\x11\xb3\xc5\xc6\x9b\x56\x6b\x02\x53\xea\xf9\x7d\x7b\x29\x33\x46\x5d\x5e\xd2\xbe\x68\xcf\x94\xb7\xe0\xc5\xb4\xc9\xc6\x9b\x09\x6c\x5a\x2d\xd5\x18\xd9\xf8\xa9\xcd\x6b\x6e\x89\x59\x9f\x5e\x5e\xd2\x56\x5a\x76\x24\x12\x2f\x46\xbb\x2f\x86\x73\xe4\x8a\x34\x04\x53\xea\xb5\x82\x22\x27\xc5\x94\x52\x1a\x6b\xa9\x36\x1a\xbd\x0b\xde\x91\xe5\xa8\x75\x4d\xae\x4f\xa2\x26\x55\xa3\x3a\x6d\xd1\x40\x85\x68\xa0\xa5\xc0\xfa\xc3\x2f\x22\x31\xe4\xd3\x56\x86\xcb\x81\x78\x53\xc9\x38\xdd\x9e\x5c\x5c\xf8\x9d\x9c\x8d\xfd\xc9\xc5\x85\xd7\xcb\xd9\xd8\x9b\x5c\x5c\x0c\x72\x36\x76\x27\xe5\x3b\xdf\x97\xef\x8c\xf9\xd8\x33\xe3\xde\xeb\xdd\x7b\xc0\x2e\x2f\x07\xb6\xdf\xed\x1a\x0f\xfd\x7c\xf0\x21\x7e\xe1\xf5\xf4\x95\xdf\xd9\x79\xf1\x8f\x46\x6b\xf9\x86\xeb\xfa\x30\x30\x3a\xf3\xcd\xce\x6d\xbf\x0d\x1d\xe3\xf6\x9f\xf5\xa4\xaf\x10\x1b\xdf\x4d\x8e\x1f\x19\xa9\xf3\xa2\xe2\xe5\x1f\x77\x1d\x7c\x67\xa8\x99\x60\x6d\x2d\x62\xe3\x0f\x13\x25\xb6\x7f\x41\xb7\x4a\xab\xa1\x6c\xfc\x71\xe2\xdc\xdc\x42\x40\xc3\x26\x1b\xff\x24\x20\x4f\x15\x9f\x0e\x20\x68\x96\x6e\x92\xd1\x28\x25\xa9\xa3\xcc\x93\xc8\xf8\xea\xdf\x50\x91\xae\x47\xa7\xb5\x0e\xca\x2f\x07\x35\x5f\xd6\x06\xcd\xb4\xf8\xfa\x86\x06\xf2\xeb\x4b\x1a\xa1\x66\xc8\x29\xb9\x7b\x3e\xbd\xc8\xce\xa7\xcd\x26\x4e\xc7\x9b\xe6\x74\x42\x97\xe3\x78\x34\x25\x59\x6b\xda\xf2\x26\x5b\x5e\x33\xd7\x69\xa5\xfe\xb5\x34\xf9\xfc\x8d\x90\xf6\xf3\xbc\x5a\xca\xc9\xdc\x8d\x14\xf7\xf3\x7c\x59\x73\x20\x2b\x1e\x00\xf9\x58\x21\xe8\xdf\x88\xe4\x97\x50\x11\xd1\x1b\xf4\x46\x48\x9c\x5b\x5c\x9a\x66\x7f\x80\xbf\x50\x74\x53\xe7\xb4\x31\x95\x0a\xe8\x8d\xac\xef\x3d\x9a\x09\xef\x0d\x3c\xbe\x9b\xd0\xf7\x7c\x82\xbf\xa3\x6b\xf4\x1e\xc3\x9f\xa8\x7b\xfe\x9d\x36\xa7\xfe\xe9\x1c\xa3\x1f\xe8\x77\xe3\x3f\x35\x9b\x13\x1c\x46\xa7\x37\x79\x9e\xa2\x1b\xf8\x01\xde\x8f\x7f\x98\xe0\x93\x38\xcf\xd1\x5f\x2a\x22\xf3\x0d\xde\xf2\x56\xfc\x41\x10\xf3\x07\x24\x5b\xee\x63\x0c\xff\x40\x1f\xc6\x77\x13\xe1\x7b\x18\x65\x83\x93\x3f\xe8\x2b\xe4\x82\xef\x75\xfa\x9d\x41\xbb\xd7\x19\x60\x28\xcb\xbd\xb2\x7c\x88\xa1\xf1\x07\xe7\x4e\xbf\x80\x6d\xbb\xfc\xe5\xe1\x3c\xdf\x20\x5e\xb7\x90\x19\x79\xd9\x8e\xd9\xf6\x1f\x8c\x5c\xc7\x0c\x32\xbe\x67\xf9\x66\x91\x56\x00\xe1\xc3\xf0\xdc\x17\x84\xa2\x25\x45\xad\xea\x08\xeb\xa1\xad\x4e\x8f\xb6\xae\xf2\x81\x96\x70\x77\x37\xb7\xf4\xbe\x3c\xb5\x93\xbc\x2e\xc3\xe0\x4a\x2c\xba\xf1\x87\x09\xcd\xb6\x15\xfc\x6d\xb9\x03\x55\xf5\x0f\x60\x69\xd6\x6e\x61\xe0\xaa\xdc\x8d\x59\xa2\x25\x96\xf1\x87\x09\x84\x74\xae\x7c\xae\x42\xce\x08\xc3\xcb\xa8\x58\xf5\x7b\xe7\xea\x62\x53\xa2\xc4\xf4\x00\x8f\x5a\x21\x11\x38\x24\xfb\xef\x95\xea\xb5\x68\xf2\xc7\x09\x95\x69\xa3\xc6\x3f\x4d\x68\x58\x74\x23\xd9\x42\x68\xdb\xe8\xcf\xe8\x66\xc7\x70\x75\xb3\xb4\x30\xfc\x19\x3d\x18\xb6\xaf\x9b\xdb\xa2\xe8\xc0\x93\xa6\x45\xec\x26\xb6\x30\x06\x3d\xe3\x77\x7b\x33\x5e\x2c\xf7\x1f\xe5\xa0\x79\xc0\xf0\xd8\x9d\xe8\x49\x14\x38\xa1\xbb\x93\x7e\xe0\x1d\xf1\xec\x9b\x28\xf3\x7a\x35\xa9\xfa\xd5\xa3\xbe\x79\x08\x21\x72\x68\x28\x36\x92\x29\x66\x20\x32\x71\x70\xf6\xc0\x49\x75\xf1\xf5\xdf\x53\xe5\xa9\x59\xa5\x6e\x5b\xdb\xaf\xeb\xc7\x1b\xa4\xea\xea\xec\xd6\x85\x8b\x26\xfc\xe6\x37\x2f\x2f\x2f\x5d\xf1\xb6\x00\xd4\xa8\x7f\xfd\xdd\xc1\xd7\x15\x7b\x29\xde\xef\x75\x8e\xbe\x3f\xd8\x7b\x5f\x72\x2f\xa8\xdf\xe3\x7f\x2b\x26\x0e\xbe\x17\xf6\xf3\x03\x5b\xbb\xee\xb9\xdd\x19\x36\x9e\xe3\x53\xf1\xda\x3c\xd7\x1e\x73\x0d\x4d\x57\xfe\xdb\xdf\xda\x9d\x30\xe3\x25\x3e\x60\x3f\x1f\xfc\xd4\x6f\x7f\x6b\x7f\x92\x76\x5e\xfb\xe6\xf0\x6b\x95\xb9\x31\x5e\xe3\x93\xf2\xc7\xbd\xd7\xb6\xf8\xe4\x11\xed\x92\x3e\x78\x44\x55\x72\x95\xca\x1d\x1b\x48\xcf\x25\xe1\xd0\x65\x2a\x2e\xf4\x06\x92\x42\x71\xa1\x0f\x26\xf4\x4b\xa1\x9b\x2a\xf4\xf7\x83\xba\xa8\xd4\x39\xa5\x4e\x29\xb5\x49\xa5\x35\x9a\xfa\xa2\x44\x8b\x97\x1a\x61\xa1\x0b\xd6\xb8\xd9\x6b\x7e\x1a\x55\x1c\x0a\x8b\x8c\xad\x1d\x91\xaf\x32\xd0\x0e\x5d\xe2\xb8\xd0\x12\x9e\x30\xc8\xba\x97\x3d\x5e\xd2\x06\x6a\x84\x66\x27\xf3\xbc\x11\x16\x9d\xe4\x92\xc5\x52\x69\x2b\xd6\x9b\xc2\x93\xce\x70\xaa\x13\x97\xca\xf0\x2e\x4b\xde\x14\xbe\x59\x60\xf8\x69\x81\x58\x56\x65\xb1\xbe\x56\x4b\xc0\xf8\xd1\xeb\x48\xcb\xbd\x91\x7f\xf7\x7c\x7e\x31\x3c\xc7\x28\xa2\xe1\x78\x21\x14\x84\x09\x1e\xa1\x18\x99\xb0\x13\xa9\x98\xae\x6a\xd9\x46\x9c\x3d\x91\xa9\x00\xaa\x2f\x7d\xa0\x5f\x7e\xf3\x03\x59\x82\xf4\x59\x23\x53\x10\x0e\x6b\x24\x05\x3e\xe7\x64\x63\xa2\x21\x57\xf3\xa5\xf2\xd2\x03\xde\xa8\xae\x76\x7f\x4d\x82\x68\x16\xaf\x0e\x64\xbe\x2c\xf3\xf7\x48\xfc\x53\x4b\xdb\x03\x4b\xdf\xe4\x91\x65\x11\x06\x16\xbe\xb1\x00\x35\x9b\x51\x33\xc4\x85\xc5\x08\xb5\x7b\xb8\xf4\xf6\x3d\x0e\x70\x52\x22\x08\xef\x26\xce\xda\xa4\x2c\x79\x79\xc7\xa2\x2c\xcf\x2d\xcb\x48\x9b\xe5\x75\x8e\x44\x44\x0e\x0e\x38\x56\x6b\x3f\x34\xde\xb7\x3c\x67\xce\x4d\x56\x1b\x33\x2f\x92\x62\xef\xc1\x49\xc0\xa9\x88\x77\x3b\x4d\xd8\xdf\x36\x61\xc2\x66\x86\x43\x5a\x25\x9b\x8e\xd7\x3d\xe6\xd9\xbc\x93\xac\xb8\xb0\x7b\x74\x3d\x69\xf7\x10\x06\x8b\xa3\x31\x55\xa1\x23\xa7\x23\xcf\x91\xbe\xa4\xf1\xe8\x69\x4b\xa2\xe2\xc6\xd3\x16\x9f\x58\x37\x16\xa5\xac\x44\x4d\xca\x73\x61\xf6\xcc\xb8\xac\x99\x01\xd3\x60\xe5\x81\x80\xdb\xd1\x71\xd6\x1e\xf1\xba\x1e\xec\x85\xf2\x96\x9b\xba\x5b\xe3\x56\x2d\xa1\x1f\xbd\xae\x8f\x2b\xe9\x0e\xf8\xd5\x57\xe2\xb3\x1f\x3e\x9b\xe1\xd9\x92\x16\xb8\x58\x75\x03\x82\x3a\x78\x99\xb8\x3e\x3e\xba\x36\x8a\x3b\xb0\x6d\x15\x2c\x1d\x8c\x62\x12\x62\xa4\x16\xb2\x63\x35\x85\x90\xee\xa4\x59\x9c\x30\x1a\xed\xc7\x79\x97\x40\x4b\xdd\x23\x40\x52\x9d\xfe\xc1\x5c\x54\xc2\x55\xb8\x0a\x10\xea\x63\x21\x5e\xab\xa7\xde\x0a\xc4\x94\xba\xf4\xe8\x8d\xd2\xe3\x9f\x8d\xc3\x49\x9e\xb3\xdd\x34\x2b\xf1\x98\x3f\x3f\xa9\x24\x3a\x92\x56\x3d\x31\x71\x3a\x57\x95\xd7\x3d\x1e\xe3\x76\x22\x82\xc4\x40\x9f\x3b\x9a\xbe\x69\xc2\x91\x79\x8b\x81\xa1\x76\x17\x23\xab\xbc\x23\x52\x8b\xb7\xbb\xa4\xdd\x55\x06\x46\x61\x3c\x14\x1f\x7b\xae\xe9\x4f\x47\xd7\x75\x7c\x8c\x3a\xaa\x11\x22\x52\xad\xc1\x97\xc5\x00\xa3\xf1\xc4\x11\x9e\x6c\x82\x40\x16\xad\x3b\xe8\xdc\x16\x6a\x9d\xa2\x22\xd9\x6c\x25\x18\x8f\x3f\x20\x9e\x3f\x50\xa6\xcf\xb2\xad\x47\x42\xf8\x6b\x06\x46\x38\xc2\x09\x0b\x62\x39\x24\xbc\xcc\x18\x0c\xc9\x19\xcb\x0f\x3c\x17\xc0\xda\x1c\x0c\xff\xc0\x60\x48\x97\xba\xea\x68\x1c\x76\xb3\xfb\x3d\xc3\xf1\xec\x90\x77\xa3\xb5\x02\x37\xd6\x2a\xfc\xe8\x2c\x08\x68\xc3\x3d\x89\x4f\xc3\x68\x3c\xb1\x6d\xa9\x85\x79\x78\x1c\x4f\x4c\x5d\x3c\xa0\x0d\x6f\x6b\x46\x27\x06\x66\x97\x8e\xb8\xe4\xed\xf7\xea\x2b\xbe\x49\xc5\x4c\xc5\xc6\x24\xed\x74\xfb\xb9\x00\x4c\x66\xb7\xbb\xbc\xdb\x0d\xf7\x44\xf4\xdc\xaa\x76\xd6\xe1\x65\x66\x77\xe3\xdd\xee\xc6\xd5\xee\xfe\xfb\xf6\x54\x36\xe9\x60\x77\x7b\xcf\x02\x3b\xda\xe9\xae\xc6\x5f\xd4\x4b\x51\xba\x38\xf2\xb5\x68\xae\x55\xb3\x5b\x35\x4e\x90\xbf\x7f\x65\xf6\x6a\xd8\x4d\x6d\x9b\x75\x8a\xda\x22\x43\x58\x47\xc9\x94\x03\x8d\x66\x3c\xd0\x31\x2a\x9e\x8a\x51\x69\xab\x0c\x61\xdd\x36\x3e\x09\x39\x2b\x15\x69\x93\x1a\x22\xb8\xa3\x72\x5c\x6c\xa4\x24\x62\x02\xde\xb2\xe8\x6b\x12\xaf\xf6\x35\x4e\x48\x20\x84\x39\x2c\x24\xe6\xf1\xac\x8e\x89\xf1\x71\x18\xf1\x7f\x88\x14\x23\xd7\xfb\xde\xcc\x2b\xba\x3e\xe0\xea\x7d\x5f\xba\x7a\xaf\x54\xc2\xe2\x29\x5a\x08\x8b\xc3\xbd\xc8\x3c\x1c\xa1\x15\xac\xeb\x9d\x84\x85\x73\xb6\x3c\x56\xbd\xcb\xf3\x19\x95\x01\x26\xb6\x9d\xa2\x3b\x2c\x50\xe1\x25\x0e\xd4\x0c\x65\x74\x83\x16\x45\x8c\xf9\x79\x76\xf9\x78\xfe\xd8\x6c\xe2\x25\x4a\xe0\x11\xee\x47\x2b\xb4\x10\xb9\x8f\x31\xe1\x7f\x55\xee\x29\xe1\x18\x4e\xd5\xb9\xdb\x42\xe3\x82\xcf\xce\x1b\x28\xa4\xf3\xaa\x6f\xb9\x59\x57\x80\xe6\xb0\x82\x71\xa8\x9c\x9c\x1e\x27\x7c\x75\x91\x50\xbb\x9c\x6b\xbf\x57\xd5\x18\xfa\x08\x89\x5a\x32\xbb\xc7\x65\xea\x18\xac\xdb\x26\xfc\x5f\x71\xc0\xa5\x92\x59\x95\x59\x70\xe5\x11\x96\x58\x5a\x35\xd2\xc9\xf1\xed\xa0\xf0\x6d\x63\x3a\x9e\x38\xca\x43\x97\x13\xbd\x46\x6c\xdb\xde\xd9\xd8\x2b\x0a\x91\x07\x2d\x17\x5f\xb8\xc6\x0e\x41\x41\x9e\x6b\x8a\x1e\x63\x63\x09\x1d\xf1\xf4\x0d\x46\x71\x7d\xa6\xfb\x3c\x77\xc9\xb3\xf6\x92\x38\xf5\x2b\xf7\xd2\x11\x49\x46\x33\xbd\x6b\xa3\x65\x32\x73\x25\x11\x69\xb8\x45\xbd\x6a\x30\x87\xa4\x2f\x44\xc1\xde\x73\x53\x15\xb6\xbb\x0a\x2c\xb2\x5f\x48\x46\x4a\xdd\x73\xab\x22\xd2\xa0\x8b\x91\xdc\x10\x85\x2f\x54\x45\x74\x97\xd6\xbe\x4c\xe6\x3a\x90\x3f\x42\xea\xaa\xab\xcf\x34\xdb\x9a\x88\x2a\x32\x52\x40\xbd\x02\x99\xba\xfa\xac\x5d\x30\x6f\xc2\x66\x53\xad\xad\x06\xcb\xf3\xe4\x92\xea\xfc\xcf\x23\xa4\xbf\xa3\xf6\x4c\x88\x3c\x8c\x49\x88\x5c\x90\x80\x42\x12\xc1\xbe\x74\x57\xc8\x46\x6c\x9c\x4c\xc8\x38\x01\xfe\x97\xab\xfc\x65\x4e\xb7\xd8\x79\xa9\x27\x88\xc6\x52\x6b\x85\xa8\x00\x26\x8a\x8c\xec\x6f\x91\x91\x23\x4f\xac\x6e\x09\x4b\x2c\x49\xf9\xa0\x4b\x06\x5d\x18\xf4\xc9\xa0\x5f\x8a\x77\xbd\xdf\x2a\x71\x29\x38\xdd\xf1\x44\xc4\x65\x99\xcb\x53\x84\x5c\x36\xa8\xc6\xff\xad\x5d\xaa\x87\xfc\xbd\x15\x2a\x9c\xc2\x78\x00\x53\x37\x04\x8b\xb0\x9d\x45\xa9\xfb\xa5\x16\x93\x0e\xd7\x7c\x76\x8e\xfb\x9d\xbe\xa8\x73\xe0\x40\x53\xf6\x94\xf7\xce\x8c\x51\xdb\xd0\x46\x23\xd5\x1b\xd4\xb8\x51\xb7\x49\x37\x65\xcf\x53\xb3\xe7\x87\x7c\xd6\x65\xca\x1c\x8d\x9b\x79\x68\xaf\x9e\x68\xa4\x5b\x39\x3e\x09\x0d\xca\x8c\xc4\x10\xd1\xa4\xe5\x89\x03\x93\x7d\x76\x2f\x7c\xe3\x74\x90\x2a\x8a\x20\x46\x55\xd3\x21\x86\xe8\xc2\x15\x0f\x25\x4d\x11\xaf\x44\xdd\xf3\xa8\xd5\xc2\x5c\x8f\x10\xaa\x9e\x6d\x67\xe3\x68\x62\x86\x10\x47\xbc\x3d\xf2\xba\xe5\xed\x4c\x4c\x61\xf9\xd1\x08\xfa\x92\xbc\x96\xf4\xe3\xf7\xc8\xb4\xde\x01\x99\x76\x15\xac\xab\x02\xed\x01\xd7\xfe\xdf\x23\x33\xfc\x56\x69\x96\x0b\x00\x25\xa0\xf5\x5e\x32\x98\xe2\x20\x8c\xa1\x22\xb5\x5f\x43\xd2\xa9\xc2\x8d\x87\x61\x13\x92\xbd\x22\x24\xc4\xf3\x5a\x5f\xff\x43\x31\x4c\x11\x7b\xa8\x43\x4a\xd8\x91\x18\x30\xd2\x31\x4e\x21\x4a\x2a\xa3\xc3\x4c\x18\x86\x82\x69\x66\x9a\x69\x4a\xe6\xb8\x03\xc3\x51\x97\x17\xfe\xf8\xcc\xb6\x0f\x4c\xab\x19\x00\x5a\x99\xde\xaf\xc4\x4c\x1c\x14\x7a\x2b\xf3\x2e\x0e\x8a\xaa\x53\xdf\x26\x9d\x76\x39\xf5\x75\x09\xe8\xff\x2d\x1d\xa9\xeb\xc3\xbf\xa5\xf9\xde\x57\x9a\xff\x5c\x69\x57\x37\xbf\xaf\x60\x8a\x3a\x9a\xa3\xb6\xfb\x3a\x24\x5b\x24\xef\x18\x4f\xe4\x51\xaf\xd1\xc7\xbd\xe5\x1d\xda\xf6\x46\x51\xf0\xca\xba\x95\xee\x5b\x75\xb1\x1a\x29\x32\x82\x18\x44\xa6\x1c\x15\xf6\x10\xce\x51\x46\x2b\x69\x5e\x32\x28\xb3\x5c\x6b\x1a\xb4\xa9\x1e\x04\x96\xc7\xc5\x21\x67\xec\x20\xa0\xc7\x02\x81\x50\x06\x53\x9a\xa2\x65\x2b\xc4\x30\x37\xdc\x58\xa6\x18\x16\xd4\x3d\x5f\x5c\x4c\xcf\x17\xcd\x26\x9e\x8f\x17\x13\x6a\x64\x18\x17\xbb\x44\x9b\xbd\xc2\xe6\x02\x13\x71\x7c\x16\x36\x17\x45\xf0\xdf\x5c\xcd\x82\xf6\xc3\x52\x94\x4e\x22\x4b\x54\xbc\xa1\x54\xe6\x19\xaf\xff\x9b\x85\x45\x1f\xa3\x43\x6b\x2b\x8d\x57\x3b\x2b\xeb\x50\x54\xce\xef\xa0\x7e\xfd\xe7\x62\x38\xe9\x96\x16\xf0\x7b\x5a\x63\xea\x75\x14\x1b\x15\x21\xdb\x1b\x3a\xf6\xc0\x87\xf6\xa4\x22\xcd\x9a\x0b\x68\x23\x1e\x44\x05\xa6\x6a\x9e\x37\xea\xee\x2b\x54\xbb\x03\x2c\xf6\x50\x24\x91\x21\x4d\x28\x2c\xd8\x58\xc7\x58\x56\x7f\x83\x02\x82\xa8\xca\x1a\x52\x33\x90\x08\x7f\x3b\x44\xaf\x5f\x23\xbe\xca\x80\x7e\xa4\x5a\x25\xab\x12\xbe\x7b\xe2\x85\x23\x70\x93\x86\xfc\xfc\x6d\x90\x31\x0b\x9e\xa2\xf8\x61\xdf\xab\x43\x1c\x50\xf3\x07\x84\x29\xf0\x53\xb8\x12\x50\xec\x85\x6c\x2d\xbe\x72\xdc\x34\x25\x19\x56\xd7\x5c\x59\x88\x57\x68\xc4\x8d\x67\xf1\x9b\xeb\xf7\x72\x3f\x34\x28\x0d\x71\xd1\x24\xe3\x06\x09\x25\x37\xe8\x92\x6e\xd7\x58\x3b\xbf\x95\xc3\x97\xf9\x51\xaa\x84\xf4\x50\x5a\x4d\x85\x52\xab\x47\x41\x38\x5f\x38\x59\xfc\x9f\xae\xdf\xbf\x43\x38\xcf\xbd\x06\xa5\x7b\x9d\xe1\x37\x55\x24\x8a\xd9\x81\xfd\xca\x85\x3c\x63\xf6\x96\xbf\x59\x73\x20\x5c\x0a\x62\x71\x99\x6b\xc0\x8a\x36\xab\x5b\xe1\xfc\xa1\xd1\xb1\xf3\xbc\xc8\x9b\x9f\xe0\x51\x66\x0e\x2b\xc2\x2a\x75\x8a\x14\xd4\xab\xde\x9a\xbb\xcb\xec\x18\x12\x8c\x42\x51\xfd\x90\x84\xab\x50\x42\x9b\x41\xb8\x33\x02\x27\x42\x94\x0b\xf3\x5c\x66\x75\x0f\x21\x02\x86\xba\x3d\x8c\x4d\x40\xd7\x1e\xe9\xf6\xca\x63\x9f\xfe\xc1\x93\x91\x6a\xd5\x10\xd2\xa8\x84\x60\x88\x69\xa4\x17\xe5\x49\x65\x82\x9a\x96\xd5\xa0\xd6\x9b\xe8\x3e\x58\x86\x33\x51\x6c\xd9\xb6\x44\xc1\x47\xd1\x01\xf4\x74\x29\xe2\xc4\x46\x64\xd0\x49\x89\x8b\xcc\x46\xa1\x71\x83\x54\xab\x96\x63\x5a\x22\xe3\x0f\x8e\x1c\xa6\x18\xa6\x5a\xed\xc0\x6e\xc1\xd3\x6d\x18\xcd\x08\x43\x9d\x9e\xd4\x5a\x3b\x3d\xd2\xe9\x95\x6b\x7c\xf0\x5c\x1e\xab\xc1\x97\x05\x86\x48\x89\x4f\xba\x08\xd2\x37\x4a\xd4\x13\x69\x80\xf6\x3d\xe7\x85\x0d\xf4\x34\xe0\x33\x26\x0e\x73\x50\x00\xb1\x3e\x6d\xd9\xd1\x1e\x4a\x41\xaf\x61\x0a\x7a\x79\x2e\x4e\xa8\xca\x14\xaa\xf2\xcc\x4a\xe7\x76\x94\x9f\x29\x62\x4a\x2a\xb9\x7d\x04\x50\x98\x08\x0e\x94\xa9\x85\xce\xb9\x36\x50\x7d\xd1\xd0\x07\x1a\x5a\x19\x68\x68\x65\x40\xbb\x30\xab\x95\x55\x4d\xa9\xea\x0d\x8e\x9c\xe8\x68\x90\xe0\x1a\x84\xfd\x98\x9e\xfd\xf3\x5f\xd3\x17\x85\x20\x8d\xc6\xff\x7c\x8a\x26\x2f\xf0\xd9\x89\xcc\x0a\xa0\x17\x78\x77\x20\x00\x81\x43\x9d\x2c\xe0\x6b\x10\xc7\x65\x6a\x0b\x64\x59\x4d\x19\x37\xbb\x52\xe9\x4f\xc7\xde\x44\x81\x45\x97\xc7\x98\xd6\x56\x09\xc1\xd5\x44\x69\x83\xe7\xb2\xcc\x4e\x01\xdc\x34\xdc\x39\xdb\xf1\x30\xb2\xde\x06\x6b\x0b\x6a\x58\xd8\x3e\xa5\x62\x3b\x5a\xa2\xd6\xf8\x5c\xc3\x64\xe7\x1a\x06\xde\x1d\x1f\x41\x23\xe9\xcb\x1d\xcb\xae\xa2\x2c\x79\x54\xda\x37\x88\x46\x60\x28\xcd\x66\x5c\x07\x74\xee\x77\x43\xb3\x8c\xa0\xc9\xc8\x99\xb1\xf9\xce\xeb\x92\xdf\xba\x44\x01\x5b\x45\x42\xee\xe6\x94\x6e\x48\xbc\xce\x10\x3a\x43\xd2\x19\x42\xd7\x23\x5d\x71\xdc\x39\x78\x06\x92\xe2\x50\xf0\x09\x99\x22\xfa\x6f\x49\x06\x81\x4a\x92\x3d\x8d\xd3\x85\xa1\x7b\x35\x50\x60\xdb\x7d\xcf\xa5\x66\xd4\x73\x80\xde\x09\xda\xec\xbc\x7d\xf9\x8f\x37\x3f\xbc\xfc\xfe\xcf\x57\x18\xdb\x76\x20\xf2\x61\x4b\xe8\x48\xde\xee\x6c\x61\xc1\x93\xa8\xaf\x46\x8c\x90\x40\x54\x17\x9e\xf0\x53\x65\x97\xc3\xce\xd0\xed\xf9\xbd\xae\xd3\xf3\x3b\x7e\xd7\xeb\xf6\x46\x45\xba\x6b\x86\x9b\xe2\xfa\xfb\x77\x3e\x09\x11\x6b\x79\xcd\x98\xff\x8b\x5f\xc4\x88\x35\x3d\x6c\x72\x6b\x18\xfa\x64\x28\x69\xca\x71\xc9\xa0\x48\x09\x9e\x86\x51\xb5\xb7\xa1\x6d\x7b\x67\x21\x72\xf1\xa5\xd9\x09\xfe\x18\x31\xb4\xce\xcc\x40\xd5\x52\x1c\x29\xa3\xcd\x0c\xdb\xb6\xdb\xa0\xd9\x28\xbb\x70\x47\x2d\x86\x5a\x19\x2e\xb3\x76\x67\xcd\x62\xac\x51\xf6\x22\xe3\x2d\x27\xd9\x8e\xa4\x71\x2c\x91\xbf\xd9\xea\x2c\xa8\x6f\xb5\x30\x9f\x18\xcd\xe6\xcf\xd5\x89\x70\x66\x4e\xf7\xa2\x81\x22\xaf\xf8\x19\xf2\x5a\x0c\xe3\x33\x7f\xb7\x65\x47\xb0\xdb\x8a\x15\xd5\x2e\x24\x2e\xd5\x80\xe9\x6d\xbd\x08\x19\xca\xaf\xbf\xd0\xf9\xdf\x91\x99\x9f\xdd\x3b\x6b\x57\xe7\x54\x25\x56\xf7\xea\x32\xec\xd7\x48\x7b\xfa\xdb\xcb\x9f\x6b\x5d\xb7\x10\xbb\xbc\xbc\xa4\x2e\x1e\xb5\xbd\x96\xb1\xa4\xcb\xe5\xd6\x74\xba\xaa\x65\xdf\xbf\xff\xce\xbf\xc2\xa4\xbd\x37\x18\x5f\x4d\xf2\xa5\x13\xe2\xef\xb6\xe9\xc0\x5e\x50\xe3\xd1\x0c\x51\xed\xe0\x0f\x8f\x33\x5c\x39\xf8\xae\x69\x31\x41\x61\xa3\x68\xc3\xca\x2b\x57\x84\xf8\xa9\x24\x4d\x35\xba\x2e\x19\x8a\x53\xf5\x63\xd9\xfa\xf7\x47\x57\xa6\xdb\x27\x0c\x0d\x3d\xd3\x12\x3d\xf4\xc8\x50\x50\xa0\xba\x2c\xf8\x75\x2b\xf9\x36\xdd\xa9\x78\xf1\xb8\x8e\x77\xe9\x62\x99\x3a\x2c\x82\x98\xba\x10\x50\x17\xd2\x7d\x4b\xcd\x86\xba\xe7\xc1\x45\x7a\x8e\x37\x17\x28\xa1\xa1\x61\x9a\x0b\x9a\xcd\x09\xc6\x23\x14\xd3\xf8\x05\x8a\xe8\xe6\x2c\xc1\x2f\xa2\xa6\x07\x1b\x9a\x60\x12\x37\x69\x72\xe9\x8e\x50\x44\x93\xb3\x0d\x7e\x11\x91\x02\xb6\x7c\x43\x05\x31\x1b\x79\x67\x2e\xd9\xbc\x28\xb7\x6f\xbc\xab\x21\xd4\xa5\xe1\xaf\xe9\x6d\xb8\xda\x2c\x8f\x99\xb5\x94\x15\xb0\xdb\xa0\x21\xea\xf8\xc3\xce\xb0\xd7\xf7\x87\x5d\xe8\xe2\x3c\xf7\x1b\x34\x54\xfd\xdc\x96\xd3\xc9\x2b\xac\xb5\x07\x34\x19\x44\xb4\x99\x41\x48\x7b\xdd\x6e\xbb\x6b\x27\x10\xab\xab\xa8\xc8\xe4\x95\x87\x2f\xe2\x26\x42\xea\x81\xcb\xcb\x4b\xaf\x87\x5f\xc4\xcd\xf0\x85\x2a\x8a\x64\x91\x74\xe9\xbc\x74\x2b\x7b\xb2\x90\xa5\x87\xcf\xf0\x67\x28\x27\x77\x19\xdf\x79\x6e\x1d\x41\x30\x88\x7d\xb1\xf5\x3c\xf7\x6a\x77\x98\x9f\xa7\xee\x19\x1f\x5b\x13\xc1\xe8\xea\x38\x44\x5d\x66\xef\xa3\x95\xd5\xfa\x81\x1a\x0d\x3f\xd3\x5c\x6a\xb7\xd5\xc7\x49\xe7\xce\x87\xd2\xf0\x2e\x22\x82\x96\xd6\x91\xc0\x63\xc9\x97\x0d\x4a\xa0\x19\x7b\x41\x81\x8e\xae\x37\x9f\xb5\xbc\x7e\x83\x36\xe4\x02\x0f\xa3\x05\x92\x45\xd8\x58\x69\x15\x06\xb8\xdb\x7f\x41\xb8\x15\x3b\x17\xe8\x8f\x2d\x4d\xc8\x08\x92\xbc\xba\x15\xa3\x16\xff\x8b\x5f\x48\x42\x7b\x75\xe6\xef\xaf\x27\x83\x16\x3d\x23\x8b\x62\x5d\x37\x8b\xe6\xee\x31\x3e\xad\x67\x8a\x66\x0a\xa4\xce\x96\x21\x91\xa9\x6d\x4e\x12\x79\xd1\xf2\x08\xca\x5a\x09\x3e\x13\xf8\xe1\xcd\x58\x74\x66\x5b\x43\x34\xfd\x63\xf9\x89\xf7\xe7\x36\x4b\x36\xd1\xb4\x9e\x25\xb9\xa3\x92\x17\x91\x02\xdd\x53\x82\x73\x9a\xab\xc9\xaf\x4b\x21\x7c\x34\x9c\x4f\xe7\x07\xd1\x06\xc9\x7e\x57\xdb\x23\xdb\xf2\xf8\xbd\xd7\x91\xa7\xef\x2a\x44\x6f\x4a\x75\x76\x18\x11\xd3\x27\x75\x88\x45\x25\x25\xdf\x8c\x46\x8e\x14\x00\x61\x4d\x67\xb0\xa2\x33\x43\xb3\xb8\xa7\x96\xbc\x67\x51\x1a\x23\x01\xfc\x88\x56\x18\xc3\x23\xb5\xf8\xcb\x5c\xb3\xd8\x4d\xcc\x64\xe2\x2b\x17\x73\x95\x22\x06\x0d\x4f\xa6\xbf\x4a\xb5\x29\xd1\x00\x24\x29\x90\xb7\x74\xfa\x09\x99\x14\x0a\x65\xf4\x71\x94\x89\x76\x22\x4c\x16\x28\x83\x36\xc6\x66\x7e\x03\x57\x54\xd9\x69\x53\x4a\xe3\x3c\xef\x74\x45\xd4\x14\xd7\xfc\x06\x03\x2a\xf2\x52\x64\xe6\xd3\x3e\xc6\x79\xee\xf9\x22\x5a\x40\x6b\x77\xef\x82\x77\x45\x88\x7e\x67\x20\xdf\x4f\x1f\x42\x91\xbc\xcf\x7c\xd7\xc3\xf8\x69\x1a\xa4\xec\xb4\xd7\x23\xe2\xef\x70\x40\x22\xea\x43\x48\x3b\xc3\x93\xdb\x84\x05\x9f\x4f\x44\x71\x7f\x28\x6f\x7b\x9e\x47\x22\x3a\x80\x90\x76\xbb\xea\xfe\x8c\xcd\x83\xcd\x32\x23\xf2\xcb\xcd\x6c\xab\x59\x61\x20\x32\x8c\xcb\xa0\x21\x1f\xab\xcc\x99\x1b\x35\x26\xe7\xcb\x8b\xe9\xf9\xb2\xd9\xc4\x12\x43\x60\x63\x36\x6a\x89\xf1\x45\x67\x90\xe7\xc1\x65\x68\xf4\x47\xef\x04\x9d\x83\x11\x6d\x20\xc2\xdb\x6d\xf1\x59\xa1\xee\xce\x90\x75\xea\xc6\x9e\x85\xf3\x9c\x5f\xbb\xb7\xe2\x72\x86\xac\xa6\xfb\xc5\xb3\x30\x7e\x9a\xd5\x4c\xe3\x2e\x97\xbe\xf0\x84\x16\x93\x54\xd2\x5d\x55\xe2\xf3\x67\xb6\x8d\xee\x47\x1b\x93\x50\xad\xa4\xe7\xc1\x7b\x75\xb4\x93\xe0\x2d\x26\x7a\x95\x35\x68\x8c\x12\x8c\x47\x01\x92\xc1\xc9\x22\x29\x1d\x24\x30\xc3\x44\x60\xd3\x14\xb6\xec\x5b\x01\x54\x2a\xd2\x61\xa3\x35\x26\x56\xa1\xbb\xc0\xdb\x37\xef\xd4\xd5\xbb\xe0\x1d\xbc\xbb\xfa\xee\xe5\xa7\x37\x3f\x5c\xdd\xbc\x79\xf7\xfa\xcd\xbb\x37\x9f\xfe\x02\x1f\xde\x5f\xbf\xa9\x96\x5c\x7d\xb8\x7e\xf3\xfd\xfb\x77\xa0\xa5\x7f\x08\xd3\x37\x51\xc6\xee\x58\x02\x02\x66\x17\xc2\xf4\x3a\x98\x33\x5d\xc6\x3f\x75\xfd\xf2\x35\xaf\xe0\xd3\xd5\x77\x57\x1f\xc5\x17\x2b\x05\x46\x02\xcf\x32\x0f\xa6\xae\xd3\x74\x63\x86\x07\xea\x9e\xdf\xe8\xc5\xff\x70\xfe\xc0\xa7\x19\xad\xe1\x96\xde\x8c\x1f\x26\x58\xa4\xf5\x99\xc1\x2d\xb6\xed\x39\xff\x0b\x53\x7e\x0f\xe3\x13\x63\x8b\xd2\x15\xac\x2a\xb1\x4c\x33\x28\x6d\x47\x6a\x54\x61\x86\x6b\xe3\xa9\xa5\x15\x08\x8a\x24\x98\xca\xc2\xa6\x10\xa0\xf7\xbd\xd0\x65\xd4\x72\x97\xf4\xbb\x3b\x71\xc9\xfe\xb1\x8c\xdf\x06\xe9\xd4\xed\x79\x52\x43\x4e\x0a\x9d\xc1\x87\x56\xd7\x64\xed\xa2\xd2\xaf\x0a\x62\xd2\x9d\x55\xcf\xdb\xde\x57\xf4\x8d\x1a\x2a\xad\xed\x91\x25\x54\xba\x6d\x87\x55\x02\x5d\xf8\xa8\xfa\x75\x59\xb0\x8f\xf5\xae\x98\x6b\xc2\xd0\xc0\x35\x79\xff\xc0\x25\x03\x59\xe5\xf3\xa4\x1f\xa3\x4a\xae\x5a\xd7\xf0\x6c\xd6\xa0\x6c\x97\xab\x3c\xc3\xc4\x3d\x28\x19\xae\x21\xb6\x1b\x9f\x33\x56\xfc\x01\xa5\x4f\x00\x82\x30\x7c\x41\x77\x61\x9b\xb7\xb5\x1d\x7e\x9e\xe0\x54\xb4\x60\x77\x97\x91\xbd\xaf\x54\xfb\xfc\x3c\x75\xb2\xac\x7e\x67\xcf\x92\xd6\x57\xea\x7f\x86\x10\xe3\x79\x7e\x45\x6d\x53\x66\x95\x92\x1a\x34\xc4\x69\x41\xd1\x86\xf2\x86\x52\xe2\x3c\xcf\x27\x9e\x57\x1e\x36\xf9\xc7\x92\x38\x97\x5f\x6d\x1f\xfc\xea\x9b\xa8\xf6\x9b\x6f\xa2\xf2\x8b\x6d\xe2\x79\x6d\xe3\x8b\xbf\xf5\x88\x54\xb8\x87\x88\xfc\xca\x45\x12\x0f\xe1\x11\xe8\x39\x4e\x16\xbf\x0e\xbf\xb0\x19\x6c\x0c\x6b\x13\x2c\xe9\xd8\x85\xe2\xff\x09\x4c\xb5\x84\xa1\x1f\x27\x22\xd9\x64\x92\xb0\x69\x76\x1a\x46\xf7\xf1\x34\xe0\x6d\x69\x58\x30\x3f\x08\x30\xdb\xf2\x20\xa2\xd9\x79\xb3\x99\x5c\xf4\xce\x71\xd4\xa4\xec\xc5\x72\x9c\x4c\x80\xff\x43\xa3\xbf\xf3\x58\x1f\x22\xba\x41\xd1\x99\xc7\xfa\x78\x0b\x87\xb2\x31\xf4\x20\xa1\xee\x79\xab\x95\x5d\x52\xf7\x1c\x27\x4d\xba\x1c\x67\xbc\x92\x6c\x42\x37\x28\x39\x13\xa2\x66\xf2\x77\xec\x85\xc7\xfa\x95\xf4\x09\xa6\xd7\x41\x0f\x32\x6a\x59\xe7\xad\x16\x13\x95\x70\x79\xc7\x6a\x50\x9a\xa9\xb0\x7e\x99\x6c\x72\x39\x66\x13\xad\xdc\xa9\x13\x0f\x51\x74\xc2\xdf\xd5\x27\xbb\x4d\x95\xec\xd1\x72\x2d\xe8\xb7\xb4\xa7\x01\x6e\x26\x3a\x2b\x5f\xb6\x85\xf5\x01\xb8\xb5\xf2\x7c\xf8\xef\x7c\x4a\xbd\xd1\x9a\xdf\x6e\x79\x90\xbc\x60\x98\xac\x11\x7b\xc1\x20\x3b\xf3\x21\xc1\x5b\xf3\x9c\x4b\x38\xf2\x20\xcb\x75\x5c\xd7\xe5\x8d\x1e\xb0\x56\x57\xcf\x0a\x6a\xe3\x3c\xb7\x3c\x5e\xec\x0c\x8b\x42\x57\x14\x3a\x7e\x97\x97\xf3\xbf\xe5\xf3\xbe\xb8\xe5\x56\xff\xf3\xfc\x01\x7f\x12\xb9\x5f\x66\xcc\xbd\xed\xdd\xb6\x83\x7e\xaf\xe3\xba\x03\x17\x1b\x55\xca\x23\xcc\x1d\xed\x26\x35\xc0\xd2\xcc\xf5\xac\x17\x4d\x9d\x97\x68\x04\x29\x6c\xd4\xe1\x39\x4c\xb9\x5c\x25\x32\x3a\xae\xa8\x65\x71\xc1\xd6\x15\x58\xec\xcb\x0b\x37\xcf\x97\x97\x7e\x4d\x82\x9c\xa9\x10\x2e\x37\x0d\xaa\x9d\x90\xac\x77\xc1\x3b\xf1\xd2\xe6\x82\xb6\x3c\xe6\x7b\x22\x5d\x17\xbf\xd0\xd2\x97\x9a\xcd\x8d\x7c\x53\x78\x0f\xad\xa8\xd5\xb2\x60\x43\x5b\x1b\x0c\x9b\x4b\x8f\xb5\x7c\x8f\x2f\x8b\x84\x0b\xb7\xf5\xeb\xd0\x85\x84\xb2\xf3\xe4\x92\x76\xdc\x61\xef\x1c\x67\x4d\xea\xf9\x90\x9c\x89\x9f\xf2\xec\x21\xb9\xa4\xbe\xbc\xc1\xcb\xfd\x42\xf5\xd9\xa2\xcd\x8b\x35\xf2\xa1\x37\x04\x0f\xe3\x56\x6f\x88\x2f\xdc\x91\x2c\x6a\x65\xe0\x61\xb2\x39\xe3\xd7\x99\x80\x4a\x7c\x41\x3b\x5d\xb7\xdd\x1d\x0e\x7b\x7e\xbf\xdd\x77\x3b\xc3\x1e\xa0\x8c\x76\xfd\x56\x86\x2f\x5d\xd9\x9e\x39\x72\x21\xc1\x10\xd1\xe5\x79\x74\x49\xfb\xe7\x78\x8e\xf8\x66\x72\x31\x44\x2d\xda\x3f\x91\x8f\xac\x91\xe7\x42\x24\x73\x4b\xf0\x7d\xd8\xf2\xf8\xc3\x7e\xfb\x1c\x2f\x90\x77\x71\xe1\xb7\xc5\xd3\x7e\xfb\x44\xfc\x8c\x30\xcc\x91\xc7\x9f\x5e\x70\x59\xf7\x9e\xce\x90\x0a\x4e\x56\x1f\x9b\x0b\x08\x85\x8c\x57\x26\x6e\x9a\xfb\x60\x59\x68\x79\xf7\x74\x79\xe9\x8e\x56\x4d\x84\x52\x7a\xaf\xf7\xc6\x05\x5d\x8e\x2c\xd7\xb1\x2a\xaf\xb4\x52\xdc\xbc\x27\xf7\x45\xba\xa6\xb4\xb5\xc4\x4d\xcb\xb1\x9a\xba\x88\x17\x60\xb2\x6a\xde\x6b\xaf\x05\x95\xbd\x49\xf9\x6b\xb5\x3b\xa4\xdd\xd9\x39\x75\xf4\xeb\x52\xb8\x1f\x25\x93\x3a\xaf\x98\xa4\x92\x82\x38\x7e\x48\xd8\x34\x4c\xc3\xb8\xe2\x28\x18\xee\xab\xf4\x72\xd7\xa9\x2e\x79\x60\xfa\x01\x54\x9e\x0e\x0e\x6e\x91\xe2\x4b\x35\x5a\xb4\xda\x1e\xea\xf1\xff\x60\x3e\x7c\x80\x10\xe3\xbd\x44\x80\x6c\xa4\xbe\x9d\x61\xa2\xaf\x40\xcb\x52\xf5\xe3\xf7\x1c\x5f\x59\x3e\x22\x06\xda\x62\x90\x6a\x73\x4a\xbf\x62\x4e\xe9\x93\x61\x5f\xd4\xf9\x3c\x29\xad\xa8\x6f\x9a\xb0\x20\x63\x44\x28\xb5\x66\x7d\x5c\xb2\x15\xf5\x3d\x47\x44\xd3\xbe\x27\xdd\x01\x36\xaa\xae\x80\x3f\x86\x2c\x25\x5c\x0b\x57\x82\xa0\xe7\xba\xc4\x73\x5d\x13\x1b\x48\x7c\xed\x39\x16\xac\x67\x7c\xed\x91\x28\x35\xdf\x38\x89\x53\x1d\xd3\xc2\xfa\xb1\xdc\xeb\xfa\x54\x76\xd8\xc1\x4e\x1c\xbd\x4e\x18\xfb\x99\x9d\xf0\xd6\x0f\x31\xb2\xe6\xe2\xe7\xf1\x43\x38\x23\xd7\x95\x6d\xf3\x9f\x23\x26\xf3\x1e\xea\xf3\x11\xcf\x1d\x12\xcf\x1d\xea\xa3\xcf\x0e\x19\xca\x15\x71\xec\x1c\xbf\xe3\xea\xb3\x62\x0f\x3b\xf3\xa2\x3d\x87\xf0\x37\x6b\x12\x8d\xd7\xe7\xb0\x55\x79\x47\x32\xed\xd7\x52\x28\x48\xb2\x89\xca\x55\x53\x34\xaf\x46\xfe\xab\x6f\xc6\xbb\x60\xc5\xd2\xba\x16\xf0\xc7\x7d\x3d\x31\x9e\xeb\x13\xcf\xf5\xf5\xa7\xf8\x27\xea\x92\x65\x97\x23\xe0\x97\xa7\xe5\x66\xff\x8d\x2c\xc2\xc7\x7b\xbd\xd3\x67\xbc\x73\x1e\x5d\xf4\x58\x38\x5b\x88\xe6\x1c\x39\x42\x18\x78\x65\x23\xc2\xf4\xea\x4b\xc6\xa2\x34\xbc\x5d\x3e\x77\x69\x34\x54\x52\x65\xd4\x60\x79\xce\xf8\xe2\xa8\x59\x1a\xa2\x0d\xc7\x93\x37\x1b\x6d\x78\x9d\xc4\x3f\xb3\xe8\xb9\xdf\xe7\xd7\x79\x2e\xd2\x87\x8a\x3c\x07\x07\xbe\x7e\x84\x48\x55\xbf\x7e\xcd\x82\x25\x9b\xfd\x3b\x7f\xfd\x37\x92\xb3\x50\x50\x19\x5f\x9d\xe0\x78\xbe\x47\x3c\xbf\xf4\x2e\xf6\x8f\x26\xf3\x2d\x57\x57\xbf\xec\x96\xf0\xa1\xff\x5d\x6b\xaa\x4f\x3c\xb7\x5f\xbb\xa6\x8e\x10\xb9\xa3\x94\x67\x9d\xb0\x7b\x16\x65\x6a\xa5\x89\xe4\xbb\xff\x3d\x88\xd0\xb1\x74\xba\x47\xdb\x97\xb2\x60\xf9\xdf\xa9\x49\xcf\x53\x6c\x8b\x65\x50\xcd\x2c\x2e\x96\x84\x2f\x12\x9a\xa8\x65\xe1\x13\xcf\x37\x34\xcc\xba\xbc\xb7\xf5\xbe\x19\x22\x16\xf7\x69\x7b\x12\x8e\x6b\xd3\x53\x4f\xa8\xf5\xb3\x05\xa1\x74\x66\x1a\xc7\xa2\x39\xa7\x3f\x4f\x4a\x57\xa6\xfd\xec\xe4\xb5\x9e\x4d\x4a\xe6\xd1\x35\x58\x4d\xe9\x97\x83\x9b\xd6\xc4\xda\x6a\x47\x09\x6d\xb8\x32\x83\x73\x79\x6f\x8e\xe5\xa1\xdd\xd3\xd2\xbf\x93\x12\xd7\x8e\x7a\xfe\x0c\xad\xfc\x39\x79\x64\x0b\xad\xdc\xfc\x8a\x56\xc7\xbf\xaa\x85\xd7\x25\x51\xdd\x9f\x95\x22\x9d\x89\x0c\x73\xdf\xa8\x73\x02\x33\x41\x54\x47\x81\xf9\xf1\x66\x2d\xd4\x22\x9e\x29\xa7\xd4\xb5\x02\xfb\x5b\xf1\xfb\x03\x95\x1c\xca\xef\xeb\xe4\x50\x3d\x99\x32\xfe\x8e\x2f\xf9\x2e\x46\x32\x43\xd4\xb0\x27\x33\x44\x79\x5e\x47\xa6\x88\xf2\x3a\x03\x95\x23\xca\xeb\x62\xf8\x42\x37\x46\xb6\xa5\x6b\xba\x29\x32\x38\xbe\xa7\xd7\xb6\x7d\xad\xb3\x63\xa7\xf0\x92\xbe\xb7\xed\xf7\xce\xfd\x20\xcf\x2d\x0b\x3e\xd3\x8d\xf3\x21\x89\x57\x61\xca\xe0\x13\x35\xd2\x0f\x4e\xd1\x35\x86\xb7\x15\x60\x48\x78\x45\x43\x7a\xeb\xcc\xe1\x23\x6d\x34\x76\x9c\x95\xa4\x48\xfb\xd9\x49\x58\x1a\x2f\xef\x19\x12\x88\xf0\x28\xab\xd8\x47\x9f\xb6\x78\xbc\x97\x0c\x7b\x52\x51\xc5\x18\x7a\x0b\x6f\xf1\x56\x83\xe2\x7c\xca\xf3\x9a\x88\x01\xd5\xde\x8f\x8c\xaf\xd3\x30\x8e\x44\x86\x40\x6c\xdb\x99\x93\x2d\x58\x84\xde\x9a\x11\x0b\x89\x70\x25\xa1\x2f\x8b\x08\x36\xab\xe7\xf4\x2c\x6c\xdb\xad\xff\x9f\xb9\x77\xdf\x6e\xdb\x48\xfa\x45\xff\xd7\x53\x88\x98\x6c\xa4\xdb\x6c\x41\x84\x24\x2b\x36\xa4\x16\xb6\xe3\x4b\xe2\x19\x3b\xce\x58\x9e\x64\xe6\x83\x10\x6d\x88\x6c\x8a\x88\x41\x80\x01\x9a\xba\x44\xc0\xbc\xd9\x59\xe7\x91\xce\x2b\x9c\xd5\xd5\x17\x34\x40\xd0\x97\x6f\xcf\xb9\xac\x95\x58\xc4\xad\xaf\xd5\x55\xd5\xd5\x55\xbf\xf2\x29\xa5\xb7\xed\xed\xe7\x8b\xb2\x58\xb2\xfd\xe3\x63\x47\xa7\xe2\xcf\xf1\x43\xd3\x20\x4c\x7e\xde\x34\xc7\x6b\xdf\x32\x34\x5a\x00\xde\xc2\xa6\xb7\x1b\xe2\x94\x41\x73\xb0\x68\x58\x43\x7e\x1f\xc0\x6a\x60\xde\x65\x8e\x1f\xc4\xbf\x74\x24\x63\x69\x4a\xca\xbc\xcb\xe9\xce\x35\x1a\xb0\x70\x00\x5a\xf5\x0d\x49\xa9\x4f\xc5\xaf\x4a\x1d\xe1\xdb\x6c\x4e\x1e\xe0\x48\xca\x4c\x43\xee\x15\x1f\x03\xee\xcd\x93\x34\x83\x53\x0e\x35\x35\x24\x83\xdf\x62\xec\xc8\x94\x72\x6f\x56\x2c\x93\x34\xdf\x11\x93\x58\x85\x28\xad\x6b\x74\x00\x15\x2c\x5c\xf7\xb5\x50\xd1\xc4\x4f\xea\x63\x32\x12\xfb\x8d\x2a\x2c\x69\x1e\xa0\xa9\xeb\x4e\x3d\x96\x73\x56\x22\x31\xcf\x15\xca\x31\x99\xba\x2e\x9a\x7a\xec\x2e\xe5\x08\x43\xc4\x34\x24\xc5\xa5\x14\x18\x8f\x98\xaf\x30\x43\x77\xc8\x51\x93\xb7\x37\x5d\x24\x69\xbe\x3b\xbd\x9f\x66\xcc\xc1\x38\x40\x05\xfd\x19\xce\x1f\x94\x67\x65\x49\xd6\x24\xc3\xc1\x5a\xdc\x0b\x32\x94\xeb\x49\x99\xe3\x87\xa9\xeb\x8e\x12\x68\x80\xac\x2b\x43\x73\xdc\x34\x27\xda\x4e\x73\x56\x9c\xe0\x04\x95\x90\x31\x00\xef\x88\xf1\xa4\x51\x4c\xe4\x28\xfb\x84\xbb\xee\x48\x76\xee\x85\x06\x87\x78\xd1\x99\xdf\x7b\x59\xff\xba\xef\xf3\xa9\x70\xe2\xe4\x24\x14\xf4\x27\x9d\xe7\xd7\x75\x11\xa7\x97\xf6\x84\x7d\x08\xcf\x3d\xb6\x4c\x39\x72\xd6\xf9\x22\xc9\x67\x19\x9b\x19\x52\x75\x48\x4a\x18\x0e\x50\x49\xd7\x5e\x91\x9b\xe7\xa5\x7e\x8e\xc3\x12\x3d\xa8\xf1\x0a\x18\x29\x59\x52\x15\xb9\xe0\x55\x01\xca\xe9\x1a\x56\x53\x91\x31\xec\xba\xb9\xc7\xc4\x4a\x37\x3f\x90\xf3\x0f\x5d\xd8\xae\xfa\x7e\xb7\xb4\x6a\x85\xf8\x7e\x31\x93\x1f\xea\x5a\xb4\x3d\x3c\x08\x7c\xb8\x93\xe8\x58\xc0\x42\x2c\x20\xa6\x6c\x31\xdc\xbb\x11\xfc\xf1\xa7\x21\x1c\x0a\x7f\xa4\xe9\x43\x50\x04\x12\x65\x00\xe2\xc8\x54\xa7\xf6\x68\xc8\xeb\x2f\x1b\xd2\x9d\x76\xa8\x4c\x5b\x7f\x94\x9d\x70\x60\x98\x38\x0c\x93\x79\xa6\x3a\x28\x56\xd4\xc0\x28\x89\x99\x69\x40\x07\x7b\x33\x70\x80\x06\xe7\x64\xdc\xbb\x9c\xd5\x35\x12\x7f\xe8\x68\x42\x10\xa7\xdc\xbb\xbc\xad\x6b\x8e\xbd\xcb\x1b\xca\x08\xf7\x2e\x2b\x7a\x20\xfe\x24\xf2\xb5\x44\xbc\x30\xd5\xe8\xbf\x98\xfc\xae\x92\x28\x34\xe4\xd5\x50\xa2\x2b\xaa\xb3\xd9\x8e\x4a\xef\x72\x86\x1f\x4a\x55\x51\x49\x4b\xa8\xa7\x84\x65\x06\x36\x28\x4a\x59\x0b\x95\xa6\x16\x45\x9b\x11\x5a\xad\xd5\xd9\x6e\xca\x2b\x96\xcd\x1d\x7c\x82\x38\xfd\x59\x68\x7a\xe1\x75\x3f\xb9\x78\x4e\x1f\x2e\x6f\x83\x92\x5c\xce\x82\x91\xdf\x40\x0d\x5c\xc5\x6e\x91\x0c\xbd\x92\x06\xa2\x0c\xbd\x81\x1f\x7a\x1d\xa5\xf8\xe1\x8d\x42\x96\x13\xc4\x21\x08\xac\x94\x63\x50\x8a\x31\xf0\xc9\xef\xa8\x84\x04\xab\x2d\x33\x54\xef\xdb\x95\xc1\xe9\x66\xb3\xf3\xbe\xae\xd1\xc7\xce\x78\xac\xa4\x6d\xe3\x23\xd1\x5d\x73\x88\x73\xb9\x70\x30\x99\x09\x96\x92\xdb\xde\xd3\xa2\xbd\x0c\x89\x86\x4a\xa8\x2d\xd9\x56\xf5\x5b\x57\xcf\x4d\xf5\x2a\x0d\x56\xd3\x90\x5e\x16\x59\x19\xda\x0a\x8b\x5d\xfe\x34\x94\x2d\x2f\x2b\x13\x4f\x3b\x03\x46\x00\x3f\x6f\xba\xef\x2c\xcc\x3b\x39\xe0\x1b\x58\x87\x7d\x12\xaf\x17\x7d\xb4\xd4\xa8\x07\xc1\xdf\x07\xfd\x86\x9e\xa3\x1b\x35\x00\xd8\x8a\x58\x2b\x3e\xd2\x01\xb7\x68\xb1\x11\x23\x25\xb0\xe9\xc1\x80\x7a\xd7\xe5\xa4\x54\x5c\x9a\x8a\x05\x23\x7f\x06\x9d\x86\x4f\x65\x36\xb3\x52\x07\x0f\x27\xae\xab\x7e\xf4\x1e\x54\xae\xfb\xbb\x6c\xda\x48\x88\x68\xcd\x9b\x1b\x02\xe3\x3c\x98\x43\x49\x7c\x07\x82\x55\xd5\x08\xe6\x25\x52\x6c\xe6\x72\xce\xd9\xed\x6e\xbe\xa3\x5d\xb2\x45\xb1\x0a\xeb\x4f\x8b\x1e\x2a\x66\x19\x72\xe1\xaa\xbb\x62\x5d\x53\x31\xdd\xe2\x66\x43\xae\xbc\x39\x7d\x3e\x98\xa9\x94\x52\xfa\x51\xa2\xef\x26\x00\x7a\x5e\x20\x86\x83\x54\x82\x16\xcc\xd1\xdc\xfb\x61\x3c\xf7\x7e\x1d\xcf\xbd\x57\x8f\x46\xef\xc9\x83\xa2\xb9\xe0\x23\x00\x48\xf8\x07\x47\x18\x59\x94\x28\xef\x1d\x62\x64\xdd\x49\x14\x8c\x8d\x56\x85\x44\x99\xe7\xba\xbc\x96\x86\x1f\x64\x93\x07\x8c\x79\xcf\x3b\xb1\x00\x68\x42\xb4\x8c\xc5\x60\xe6\x30\xe3\xac\xda\x2b\xcb\x46\x55\x5d\x8f\xde\xe3\x6e\x05\x30\x52\x43\x13\xf1\x12\x55\x72\x56\x61\x14\x3e\x06\x32\x80\x0a\x77\x8b\x1c\xa1\xf7\x42\xef\xef\x03\x3d\x7c\xf4\x64\x2c\xa7\x27\x97\xd3\x5b\x69\xa8\x6c\xab\x4d\x7a\xf9\xd0\x5a\x9e\x49\x04\x35\x73\x99\xbd\x48\x6b\x10\x29\xfc\x06\x0d\xa2\xe8\xca\x3e\x49\xfe\x51\xac\x94\x13\x7f\x67\x09\xee\x27\xa4\x5f\x76\x45\x8b\xf1\x98\xac\xe9\xc8\xdf\x29\x25\x85\x2a\xe3\x2a\x49\xc6\x63\x62\x74\x15\xd1\x62\x20\x3d\xfb\xfb\x75\x5d\xa3\x35\x70\xd5\xa8\x8a\x29\x23\x7b\x7b\x49\x5d\xe7\x00\xfa\x2f\xe5\x9c\xb9\xd1\x98\xc5\x57\x78\x70\xca\x5c\x78\x37\x1d\xa2\x2f\x93\x5e\xd4\xe3\xb6\x7e\x43\x5f\xd3\x6e\x5f\x07\xba\xb6\xd9\xf0\x76\xd0\x72\x21\x9a\x4c\x83\x52\x0f\x36\xa3\x69\xb7\x41\x6a\x4f\x72\x14\xf8\xfe\x11\xf1\xfd\xc7\x81\xef\x3f\x1e\x00\x5b\x57\xc0\x76\x06\x74\xfd\x38\xf0\x0f\x8f\x01\x89\xcc\x3f\x6a\xf7\x66\x32\x36\x4c\xc1\xdb\x59\x20\x4a\x36\x7e\xc4\xf1\x93\xe0\xf8\x89\xc6\xc3\xb2\x81\xd0\x25\x36\xd6\xe3\xe0\xe9\x63\xf2\xf4\x38\x78\x7a\x0c\x7b\xa3\x2f\xf0\x0a\xd0\x31\x77\x87\xe0\x26\x85\xa4\x9b\xc0\x7b\x36\xcf\x20\xfa\xfe\xa1\xc1\x32\x98\x9c\x54\x6d\x34\x05\xdc\xe8\x5a\x59\x7b\x47\x50\x9d\xa0\x3b\x19\x0a\xa5\x8a\x14\xa4\x2b\x3e\x0f\x86\xdb\x95\xca\x6c\x93\x05\x2a\xcd\xc0\x27\x61\x82\x72\xc2\xc9\xda\x84\xd9\xc9\x2b\x65\x32\x97\x63\xf6\x24\x38\x1c\x00\x8f\x87\x31\xf8\x92\x90\x00\x85\xfc\x2e\xc6\x22\x51\x63\x51\xa9\x2d\xa0\xed\x29\x76\x74\x2c\xb6\x8a\x43\x63\x64\x76\x4d\x64\x4e\xd7\x9f\x8f\xd8\x9e\x76\xc6\x87\x08\x75\x77\x23\x6a\x7b\x41\x47\x9d\x92\xa6\xfd\x31\xb5\x4f\xb2\xe7\x75\xbd\xe8\x0c\xb2\x69\x50\x4f\xdc\x01\x10\x4c\x82\x54\x52\x97\x72\xd3\x4d\xe9\x30\x64\x81\x1d\xdd\x7f\x10\x83\xda\xbc\x70\xdd\xd1\x1c\x5b\x49\x46\xc4\x40\x42\x82\x66\x4a\x4b\xcb\x0d\x4c\x1d\x2f\x49\xff\xaf\x49\x60\x01\x1e\x33\xe9\xf4\xe5\x77\xee\x21\x40\x4f\x95\x4f\x0e\x36\x9f\x10\x0e\xf0\xa8\xf0\xf8\x70\xcb\x63\xc2\xa1\x8d\xf0\xce\xd1\xa7\xde\x21\x3c\x3a\x8c\x25\x7a\x71\x4e\xa3\x7c\x9d\x65\x71\x9b\x4a\x48\xb0\x34\x05\x9b\x00\xe9\x4d\x72\x76\x8b\x32\x75\x43\xb0\x02\xf9\xdd\x9a\x96\x96\x3a\x31\xa3\x29\xaa\xd0\x1a\x87\xeb\xa0\x6f\xb1\xc1\x64\xd5\x5b\x2f\x5a\xc1\x9b\x91\x16\xe7\xba\x42\x2b\x1c\xae\x82\xd9\x26\x29\x5b\x91\x62\x1d\xbf\x22\x65\xf1\xd2\xe7\x2e\x87\x9f\xb0\x54\x3e\x7d\xda\x85\x21\x3a\x34\x50\x27\x1d\x90\xa1\x8d\xb5\xab\x68\xc8\xeb\x1e\x95\xa0\xdc\x9b\xa3\x87\x86\xf8\x3a\x7c\xcc\x6f\x70\x7b\x71\xd0\x5f\xe3\xbd\x73\x96\x7e\x1b\x81\x0a\x39\x84\x56\x4b\xe4\xc9\x52\xaa\x95\x66\x3a\xe6\xea\x4d\x32\x9a\xb4\xfa\x6f\x1b\x1f\xa6\xa2\x1d\xa5\x0f\xd6\xe6\xe2\x37\xc7\x37\x87\x5f\xe0\xde\xa3\x7c\x3e\xd5\x10\x69\x23\xa1\xdd\x95\x8c\xf1\xe1\xae\x68\xf1\x99\x22\xd9\x21\x6c\xcc\x0c\x25\xa4\x51\xb3\x63\xc6\xb0\xeb\xca\x92\x76\x59\xc4\xe3\xee\x21\x8a\xd5\x03\x68\xf5\xd7\xc6\xbe\x1e\x3e\xe9\xa8\x77\xac\x85\xa7\x49\x3b\xf0\x34\x3b\xf6\xae\xc7\xbb\xfc\x48\xa3\x18\x0e\xa6\xb9\xca\xaa\x2c\x05\x3b\xc7\xcd\x0e\x43\x4f\x8e\x30\x2a\x5a\x63\x69\x5f\x77\x6c\x51\x6c\x76\x66\xc5\x83\x0e\xec\xbb\x4c\xcf\x4c\xfa\x62\xc5\x2c\x14\x85\x28\x55\x74\x56\xe4\x90\x10\xab\xb9\x5d\xa4\x19\x43\x23\x84\x18\xe5\x91\x41\xc1\x01\x08\x72\xd5\x76\xa3\x88\xab\x12\x98\xfa\xd8\x6f\x14\x8c\x59\x67\x96\x54\xbe\xad\x41\x07\xb6\x5d\xad\x80\xaa\x75\x66\xd1\xcb\x93\xa3\xe0\x09\xd8\x8e\x0f\x3f\x75\xa6\x36\xf1\x37\x96\x92\x5c\x41\x76\x0b\xb6\x66\xb8\x1b\x3c\x4e\x13\x24\x5e\x0c\x1d\xa8\xf5\x69\xe1\x4b\x9c\xa9\x74\x58\xe8\x20\xfd\x76\x4f\xbe\x86\x1d\xd4\x8a\xcd\x63\xae\x5e\x3b\x8e\x3e\x75\xe2\x36\xe9\xc7\xa7\x7e\xe7\x77\xd3\xf2\x6b\x41\x2a\x1a\x28\xd3\x14\x75\x1b\xd8\x09\x31\xd3\x45\x27\x24\x23\xd3\x21\x01\xc5\x03\x5b\x3c\x99\xa0\x15\xc4\x31\xa5\x74\x1a\xf2\xa8\x8c\x03\x94\x50\x31\xc4\xa2\x30\x1c\x16\x28\x31\x99\x13\xc3\xc4\xb3\x29\x12\xdc\x05\xae\x19\x0f\xe1\x5f\xc9\xa4\xa7\x3a\xb5\x55\x50\xa1\x8c\xc2\xc9\x43\xc8\x50\x46\x4a\x62\x9e\xf4\x0f\x41\x37\xc6\x4c\x79\x80\x9a\x23\xaa\xa3\x2f\x8b\x32\x6a\x47\x65\x91\x54\xc3\x94\x23\x17\x6b\xcf\x8f\xf1\xe8\xb3\x61\x47\x9a\x4b\x28\x49\x65\x1f\x45\x6e\x56\x6e\x3f\xdd\xe6\xd2\x48\x46\x45\x5d\x0f\xae\x2a\x68\xd0\x97\x21\x7c\xb5\x55\x16\xb7\xf9\xdf\xd8\x3d\x1c\xcc\xf9\xfa\x60\xce\xf7\x03\xdf\xb7\x0e\xe6\x8e\xbe\x40\x97\xeb\xf4\x72\xe3\x2c\x6c\xb3\xde\x8d\x57\xba\x81\xd1\x80\xec\xdf\x4a\xa6\x42\x3a\x72\xb6\x62\x89\x6f\x88\xa5\xfe\x40\x7c\x36\x20\x53\x9e\x3b\xed\xa4\x62\x7b\xd1\x6b\x5c\xb5\x6d\xed\x82\x45\xda\x9b\x2e\xd8\xf4\x23\x5c\xd8\x6d\x4c\x21\x27\xbf\xb8\xdb\x36\xb3\xdc\x94\x9e\xfd\xe3\xad\x21\x8c\xec\xbe\x2e\x01\x2b\xbd\xd0\x2b\x3d\x51\x2b\xbd\x52\x5d\x91\x39\x92\x8e\xa5\xae\x2c\xe6\x61\xaa\x4e\x7f\x2b\x54\x6d\xf4\xab\xb7\xe4\x49\x25\x6b\x9b\x93\x05\x99\x6d\x2e\xfa\xa3\xce\xa2\x3f\x8c\xc9\x8a\xa6\xde\x1c\x65\x62\xc3\x27\xf5\xd0\xd1\x0a\x6c\xf4\x53\xb4\x00\x2c\x85\x36\x24\x1d\x2d\x44\xe9\x64\x86\x77\x56\x74\x8d\x26\x18\xf2\x79\xa0\x55\x9b\x4a\x15\x4c\xfb\x3e\xa5\x74\x65\xe5\x45\x1d\x4d\xd1\xac\x1b\xf5\x3e\x87\x1a\x67\x44\x25\x62\x9c\x0b\x7e\x51\xd7\x73\x31\xd8\x75\x0d\xdf\xcf\xcd\xf7\xed\x87\x73\xc9\x6d\x68\x45\x72\xf9\x35\x99\x2b\x1f\x2e\x7d\xbd\x46\x13\x52\x19\x61\x37\x9a\x34\x1d\x97\xa1\x91\x68\x56\xc5\xb8\xeb\x22\xf8\x2b\x39\xd4\x8c\x54\xd8\x42\x20\xea\xb1\x21\x9d\xf4\x6b\x0b\x3b\x6a\xd5\xa3\xed\xa0\xdc\x56\x18\x8d\x62\xe9\x32\x1e\x26\x69\xe3\x65\x80\xaf\xab\x59\x3f\x86\x49\xcf\xbd\xf7\xec\xfa\xe5\xdd\x4a\xe1\x9e\x67\x96\xaa\xbc\xa0\xfb\xc9\xfe\x35\x99\xc9\x3f\x2b\xb0\x3c\x65\x68\x81\x47\x94\x42\x2e\x49\x15\x70\x8f\x46\xab\xba\xde\x86\xd8\x31\x33\x67\x51\x10\x58\xef\xe0\x98\x8e\x7c\x22\x4b\x59\xd4\x75\x86\x66\x98\xd2\x59\x5d\x3b\xfb\xc9\x7e\xea\x8c\x68\x86\x16\xc4\x49\x1d\xdc\x60\x8c\x1f\x32\x3a\xa4\xb8\x09\x55\xc3\x0e\xc1\xc8\x48\x4e\x21\x16\xb7\xb0\xb0\x83\xf4\xcc\x94\xae\x9b\xbb\x2e\xeb\x9c\x90\x51\x9a\xb9\x6e\x11\xb2\x20\x45\x2b\xb0\x73\x4d\x51\xee\xba\xa3\x22\x64\x5e\x55\xac\xcb\x29\x83\xc0\xf5\x60\x8a\x50\x4e\x3b\xe0\x08\x19\xb6\x5f\xc9\x45\x21\x6b\x8d\xdf\x15\x08\xa2\x96\x08\x5b\x73\x92\x59\x91\x1c\xcb\xee\xd1\x9b\x10\x04\x99\xe0\xc1\x19\x61\x9f\x05\x28\xd0\x5b\xb7\x88\xc5\xbd\x10\x7c\x8e\x1f\xc4\x5d\x2a\x0f\xd7\x6f\x68\x82\xa6\x98\xdc\xd3\xc9\x89\x76\x16\x3c\xbb\x3f\xc1\x4b\x74\x13\xdd\xc3\x01\xcd\xbc\x33\x00\x19\xb1\xa6\x99\xce\xad\x80\x0a\x49\x0b\x8e\xe8\x80\x36\xdf\xa9\x5b\xb8\x03\xfe\xaf\xce\xa7\xb5\xad\x44\xe3\x88\x58\x21\x15\xc7\xc7\xc1\xf1\xb1\x0e\xac\x80\x90\x8a\x27\x07\xc1\x13\xcb\x4b\x6b\x08\xd1\x7d\x50\x61\xf6\x0f\x26\x78\x07\x98\x15\x7a\xe0\x49\x29\x86\xc8\xb4\x13\x7a\x21\x06\x6e\x5e\x94\x53\x36\x0b\xf2\x11\xa5\xfb\xde\xbe\xc7\xee\xd8\xb4\x21\x0f\xe2\x4f\x90\x2b\xd6\x39\x09\xfc\x83\x89\xc5\x3a\x07\x3d\x9e\x80\xa2\x9d\x6b\x67\x24\x8a\xb9\xf6\xe6\x59\x72\x5d\xb9\xae\x46\xe2\x90\xd5\xda\x67\xfc\xf0\xc2\x16\xa4\x09\x58\x62\xb6\x9b\x1a\x0c\x89\x19\x80\x21\x98\xf7\x61\xfc\xcb\x27\x1a\x36\x42\x31\xf2\xc3\x63\xb5\x2b\xf4\x9f\xc2\xc8\x3c\x36\xcb\x8b\xf8\xa4\x5b\xa4\x60\xd1\x92\x8a\xda\xba\x2c\x86\xa1\xa0\x8f\xa8\x84\x74\x2d\x55\xee\xd0\xa0\x8c\x78\xbc\xd3\x67\x69\xa9\x86\x5d\x29\x49\x2e\xb3\x80\xca\xe1\x40\x25\x8e\x78\x8c\x94\x6b\xb0\xd8\x75\x6f\x18\x22\x39\xad\x00\x66\xae\x85\xf9\x02\x18\x57\xcd\xee\xb9\xe4\xb7\x3b\x72\xb7\x0e\x2e\x6b\x99\x49\xd8\xad\x3f\x19\xad\xbd\xeb\xac\xb8\x4a\x32\xfd\x55\x82\xd6\x24\x93\x26\x91\x29\x5d\x7b\xeb\x3c\x9d\x16\x33\xb6\xb3\x6e\x51\x1a\xe9\xc4\xac\xc2\x39\x59\xd0\x28\x26\x33\x3a\x39\x51\x20\x42\x68\x4e\x65\x09\xf8\x44\x36\x72\xa5\xab\x9c\x83\x79\x63\x11\xcd\x62\xba\x22\xe0\xb0\xbe\x72\x5d\x64\x97\x2b\x56\x6f\x6a\xdf\xc1\x64\x8a\x31\x99\x8d\xc7\x8d\xe5\xa0\x3e\x0b\x45\x55\xc1\xa2\x89\x95\x66\xf4\x34\xf0\xfd\x36\x35\xc6\xe1\x71\x70\x68\xf8\xfd\xe3\xe0\xf8\x31\x10\xc5\x97\xc6\x27\xb4\x44\x61\x20\x94\x7c\x1d\xa0\xf0\x54\x8a\x77\x41\x26\x6b\x45\x26\x24\x53\x48\x90\xc9\x1d\x99\x1a\x50\x48\x32\xb7\x43\x17\x16\x74\xff\xe2\x1b\x14\x7d\xe3\xfe\xaf\x6f\xe3\xfa\x62\x76\x31\x0b\xeb\xd3\xe8\xb7\xb3\xf8\xd1\x19\x96\x62\xa0\xf7\x14\xef\x5f\x6b\xea\x2b\xd9\x2a\x4b\xa6\xcc\x21\x07\x7d\xfa\x5b\x6d\xd2\x5f\x9b\x00\xd7\x50\x60\xa2\x28\x30\xd7\x14\x98\x0f\x51\x60\xa2\xfd\x70\x73\x52\x90\x14\x07\xa5\xbc\x52\xd3\x56\x60\x48\xad\xdb\x90\x4d\xa1\x91\xd2\x95\xa1\x3f\xa2\x32\x30\x75\x28\x30\xb5\x28\x70\x2e\x29\x70\xd1\xa1\xc0\x2d\x38\xcc\x3b\x70\xd0\xd9\x26\x97\x97\xe4\x78\x43\xe7\x8a\x56\x01\x54\x59\xb6\xe1\x9e\xce\x0d\x8d\xce\x6d\x1a\x35\x61\x92\xd7\x34\x8a\x4f\x14\x31\x5e\xd1\x35\x9a\x13\x89\xca\x2c\x87\x86\x5e\x61\x19\x66\x99\xce\xd1\xb5\xdc\xf4\x5f\x61\x32\xba\x51\x77\x81\x4e\x55\x3b\xae\x04\x01\xbb\x2e\xb2\xab\xa9\xd0\x82\x14\xf6\x1d\x4c\xee\x31\x36\x75\x5f\x92\x5b\xea\x38\xe4\x25\x9d\x90\x3b\x3a\x39\xb9\x3b\xbd\xd6\xe1\x99\x77\xe3\x31\x7e\xb8\xa2\xd7\xd1\x5d\x6c\x56\xd3\x79\xa7\x26\xf2\x8e\x66\x68\x8a\x12\x74\x25\x1d\x3d\x30\x31\xc8\xcf\x64\x82\xc9\x33\xb1\xf0\x3e\x52\xff\xe4\xe3\xe9\x95\x2e\xf4\xe3\x78\x8c\x9f\xd9\x47\x12\x94\x52\x74\x49\xaf\xa2\x8f\x31\x0e\x2f\x03\x55\xfa\xa5\xc9\xf4\x7b\xe5\x5d\x97\xc5\x7a\x05\xa7\xbe\x33\x39\x42\x6f\x69\x74\x1e\x9b\x04\xc3\xe4\x9d\x18\x2c\x43\x29\x1f\x5c\xf7\xad\x2c\xfe\x83\x2c\xe2\xb9\x99\x23\x65\x1f\x54\xb6\x8d\xb7\x58\x69\x76\xcf\xe9\x12\x9d\x93\x05\x79\x47\x9e\x91\x0f\x82\x46\xde\x9d\xd1\x97\xae\x8b\x6e\xc7\x74\xa1\x4e\xa6\x5f\x92\x77\x78\xfc\x9c\xbc\xa4\xef\xc6\xe7\xba\x83\x7a\xbd\xdf\x8e\xcd\x5b\xb8\x89\xdb\x94\x9a\x4b\x58\x06\xb9\x74\x17\x91\x0d\x5f\xd3\x7c\xac\xb1\x82\x49\x46\x0b\xfd\x73\x4a\x67\x9b\x14\xef\xba\x28\xa1\x29\x4a\x84\x5e\xbe\xc0\x44\x51\x7c\x45\xa6\x2d\x95\x97\x7a\x39\x55\x3b\xca\xa2\x9b\xb6\x59\x3b\xa4\x51\xd7\xf9\xc6\x51\x46\x56\xe7\x1b\x07\xac\xae\x8e\xab\xef\x28\x1b\xaf\xf3\xbf\xcc\x0d\x6e\x62\x09\x72\x69\xa2\x75\xbe\xdd\x78\xb6\x56\x4f\x4e\x9d\xa0\xa2\x49\x94\xaa\xdb\x3e\xd9\xf3\x71\xdc\x8b\x07\x96\x1c\x7a\x9c\xee\x98\x5c\x90\xfa\xb0\x56\xdc\x99\x9e\x65\xb2\xf9\x0b\x3a\x47\xd3\x7d\x7f\x62\x2c\xad\xe2\xdd\x45\x58\x06\x8b\x53\x9a\x85\x86\x4c\x8a\x68\xb1\xe7\xc7\xa1\xe9\xa3\x8f\x03\x79\x6b\x6c\xdf\x2a\x9b\x8a\x16\x11\xa4\x02\xec\x7b\xf3\x57\xa1\xe3\x04\x55\xa3\xf5\x70\xcd\x95\xb7\x24\xd1\x1d\xe6\xd2\x5f\x1a\x1e\x61\xb8\xf4\x81\xde\x83\x59\x22\xbb\x62\x49\x39\x28\xb3\x93\xff\x7f\xc8\xec\xe4\x4b\x65\x76\x25\x39\xe6\xba\xcb\x31\x33\x5a\xb5\xdc\x66\x27\x45\x19\x81\x7c\xe8\x95\xcd\xfb\xb4\xf8\x2e\x50\x45\xd6\xed\xb1\x9d\xfd\x12\xc9\xfa\x5f\x65\x1a\x82\x9e\x4e\xc3\x3d\x3f\x98\x4a\xae\xd3\x97\xb2\xca\x41\xb8\x3f\x73\x5f\x8a\xd5\xf5\xa4\x63\x9a\x50\x9e\x83\x89\x92\xaa\x16\x44\xaa\x11\xaf\x52\x51\x85\xed\xf3\xf1\x11\xd6\x92\x55\x08\x59\xa1\x79\x00\x33\x22\x33\x3a\x9a\x76\xcd\xf6\x30\x19\x16\x7c\x8a\x73\x2f\xf6\x3e\x86\x42\x56\x59\xca\x07\x84\xea\x54\x69\x2c\x26\x12\x9e\x3a\x53\x87\x52\x27\xb9\xba\x9a\xea\xf8\xeb\x7d\x74\x85\x1f\xed\xe3\xc8\x8f\xeb\xfa\x68\x44\x1d\xce\x2a\xde\x3e\x0b\x03\xbc\x2f\xd6\xaa\x62\x3e\x80\xd9\xe2\x24\x57\xf6\x0b\x09\x7c\x6f\x5e\x10\x65\x78\xed\x73\x2f\xc4\xe2\x7f\xeb\x05\xfb\x29\x46\xed\x93\x33\xbf\xae\x1d\xf3\xc8\x0b\xcd\x83\x70\x48\x50\xf7\xd5\xbe\x36\x08\x47\x7a\x42\x71\x45\x80\x51\xbc\xa3\x33\x31\x19\x76\xa2\x60\x68\xbb\xa8\xb0\xc0\x79\x01\xcb\x16\x8e\x01\xbd\xf4\x3a\x2f\x4a\xf6\x3c\xa9\x58\xe8\xa4\x4e\xe0\x38\x78\x8c\x98\xb7\x5c\x67\x3c\xcd\xd2\x9c\x85\xce\xd2\xdc\x54\xe2\x3a\x74\xd6\xe6\x56\xc5\xd3\xe9\xc7\xfb\xd0\xb9\x87\x3b\x90\x28\x6c\x66\x43\xd6\xb6\x53\x19\xf0\xb3\xb3\xb3\x89\xda\x36\xab\x89\xd6\xbb\x47\x32\x1d\x3b\xd7\x0e\x3e\x41\x05\xcd\x74\x1e\xf7\x14\x63\xd7\x1d\x21\x94\xd0\x95\x25\xa4\xcf\xe6\xa0\x7a\x82\x28\xd3\x4c\x76\x4e\x0a\x25\x68\x31\x29\x2c\xb4\x6f\x75\xf7\x54\x63\xef\xb8\xae\x3e\x1d\x5b\x13\x9d\xb3\xd5\xc7\x82\x7a\x8b\x68\x12\x6b\xb1\x33\xa7\x09\xd1\x58\x0c\x67\x74\x26\xd4\x61\xab\x01\x82\xe1\xca\x62\x5d\xd7\xba\x6d\xb0\xef\x77\xe7\x94\x1a\xb0\x9f\x70\x54\x89\xb7\x04\xa5\x21\xc7\xc1\x75\xad\x1a\xee\x38\x38\xe8\xf7\x01\xe3\xb6\xd6\x59\xb8\x36\x22\x67\x86\x83\x75\x13\x38\x13\x4d\x30\x4a\x4e\x4f\xb6\x10\xcd\x46\xa8\x96\xa2\x92\x30\x8a\xb5\x7a\x68\x80\x82\x9b\xa0\x24\x16\x47\x6d\xd3\xe0\x6a\x9e\x5a\x7c\x11\x4f\x2d\x5a\xef\xc9\x54\x70\xd5\x55\x47\x0b\x4d\x31\x24\xd8\x1d\xd2\x42\x73\x3a\x45\x2b\xa3\x85\x92\xd5\x88\x52\x69\x06\xcb\x3b\x9c\x35\xb7\x38\xab\x0a\xe9\xec\xe9\xa2\x4b\xd8\x80\x48\x9a\xc2\xe4\x86\x66\x9a\x52\xc9\x3d\x45\xd9\x20\x85\x67\x43\x14\x9e\x6d\x52\xf8\x4c\x92\xf6\xb5\x83\xc9\x35\x50\xee\x12\xcd\xc2\x2c\x70\x7e\x43\x61\xe0\x8c\x33\x45\xbf\x63\x07\x3b\xe4\x1e\x93\xab\x4f\x91\xbe\x16\xf7\x57\x9d\x15\x0b\x42\xbd\x7b\xda\xb4\xab\xb8\xf9\x1a\x5d\x93\x05\x0e\xa3\x45\x1c\x44\xad\xae\x79\x49\x27\xe4\x96\x4e\xc8\x4b\xa1\x1d\xdf\x9e\xea\x6f\x4f\xf0\xc3\xb5\x45\xa6\xb3\xf0\x36\x90\x47\x65\x77\xe4\x1c\x4a\x9a\x85\x8b\x40\xeb\x64\xb7\xd8\x56\xa4\xcf\xeb\x1a\xdd\xd1\x39\xaa\x90\x55\x82\xe8\xfa\x24\xb8\xc5\x96\xf2\x8a\x29\xa5\x97\xf8\x96\x26\x68\x41\x6e\xc9\x0d\x36\xc9\xab\x5f\x4a\x5a\xd6\xa5\x5f\x12\xf1\xd9\x4b\x8d\x95\xde\xf6\x78\xf7\xa5\xe9\xc5\x3b\xea\x9f\xbc\x3b\xa5\x5a\x6f\xdc\xf3\x4f\xde\x49\xc8\x13\x55\xd6\x79\xf4\x2e\xde\x56\xc6\x2d\xbd\xa4\x77\x1a\xdf\x64\xb7\x5f\xb9\xa8\x7a\x43\xf6\x49\x5b\x87\xf1\x5d\x19\xda\x71\x4a\x2b\x8d\x90\x8b\xd2\x32\x03\xd2\xf1\x73\x29\x39\x18\x3a\x38\x7a\x8a\x37\xd4\x9b\xe3\x63\x29\x24\x1f\xc3\x71\xf5\xbe\xb7\xdf\xc2\xc2\x56\x1d\xdf\x69\x65\x69\xda\xb4\xa3\xb4\xb1\x12\x70\xba\xdc\xec\x6c\x31\x28\x3a\xfb\xc9\xfe\x95\x33\xd2\xe1\xa2\x0f\xca\x1a\xe7\x24\x0e\x01\x53\x4c\xe0\x5c\x39\x0d\x6e\x70\x58\xf5\x1d\xa6\x18\xcd\x3b\xde\x63\xce\xbe\x49\x47\x68\xd8\xb2\xb3\xef\x68\x93\x4e\x9a\xef\xb2\x90\x49\x03\x50\x30\x2a\x5c\xb7\x63\x09\x94\x1d\xd0\xca\x15\xc3\x06\x6b\x13\x07\x6d\x57\x44\x2b\xf3\x64\xc9\x5c\xb7\x1a\xb0\x8c\x26\x96\x7b\xa6\x0d\x5a\x0b\x96\xa9\x83\xa3\xa7\x6a\x9e\x36\x6c\x6a\x30\x4f\x5f\x9a\xb9\xe3\xd3\x88\xa3\xe7\x8c\xff\x3f\x86\x38\x9a\xcc\x06\xb3\x53\x75\xe1\x42\x45\x03\x30\x61\xb4\x05\x0c\x65\x00\x18\xba\x1d\x2d\xf4\x60\x28\xf5\x5a\x8f\x44\xfd\x43\xd1\xb9\x24\x9f\x2e\x3a\xa1\x92\x9f\x0e\x5a\x52\x2d\x4a\x1c\x0d\x1e\x6b\xce\x78\x0f\xfd\xc0\x3f\x94\x75\x7f\xee\x8c\x5f\xd7\x7d\x95\x5e\x7f\xdd\xc0\xca\x2f\x1c\xf1\xdf\x40\xb5\x9f\xb3\x94\x9a\x6a\xb3\x34\xff\xf8\xb5\x15\xcb\x6f\xb6\x55\xfd\xb9\xf0\x29\x53\x75\x91\x7d\x26\x3e\x70\xb3\xe6\xad\xb5\x7e\x75\xa6\x31\xff\xe0\x29\xe4\x56\xd2\x68\xce\x9a\x97\x3c\x08\xe1\xf6\x73\x91\xe6\xfc\xd9\x27\xd3\x46\x18\xdc\xf7\xa7\x81\x7f\xd0\xe6\x24\x3c\xf8\xe2\xf4\x61\x2d\xa0\xb9\xde\xe7\x1d\x4e\x04\x2b\x74\x1c\x8f\xe5\xb3\xea\xd7\x94\x2f\xba\xf0\xe6\x87\x18\x39\xfa\x89\x83\xad\x16\xeb\x9b\xdb\x43\xd9\x19\xb1\xbf\xdc\xf4\x06\xdb\x92\xf6\x2b\xa7\xa9\x95\x37\xa6\xea\x24\x16\x0f\x4c\x96\x98\x14\x95\x98\xe4\xd6\x5e\x8e\xd9\x3e\x7d\x3a\xf6\x7d\x4d\x2a\x1c\x70\x83\x2f\xa0\x15\x39\x52\x09\x91\xb9\xd6\xf3\x39\x09\xfc\xc3\x5e\x1e\x18\x72\x7c\x18\x1c\x1f\xc2\xd0\x7e\x6e\x0b\xad\x29\x6b\x9e\xde\x7d\x2e\xf4\x74\x83\xb4\x38\xdf\x4e\x5b\x9f\xdb\x00\x9a\x7a\x8b\x9c\x4f\x8b\xec\xeb\x59\x88\xf8\xd0\x21\x8e\xfa\x76\x80\x8d\x7c\x36\xf1\x95\xdd\x84\x2a\xfd\x8a\x88\xf4\x6e\x0b\xe4\xa7\x43\x0d\xf8\x92\xe3\xed\x43\xc8\xb6\xa5\xd0\xef\xe6\x65\xb1\x7c\xae\x70\xd9\x48\xd2\xb9\xab\x57\x98\xed\xd9\x38\x1a\x25\xae\xeb\x0b\xf9\xa7\xe9\xad\x25\xf0\xce\x47\x1d\x2a\x37\x08\x21\x04\x9c\x9b\xf3\x4d\xd0\xd4\x84\x4e\x4e\xf2\xb3\xe4\x04\x0e\x73\x39\x1d\x77\x41\x53\x49\x8a\x38\xf1\x7d\xff\xc8\xf7\x7d\x6c\x25\xe6\xb5\x20\x4f\xf8\xd8\xd9\x4d\xab\xdd\xbc\xe0\xbb\xc9\xae\x44\x8d\x17\x2c\x62\x77\x25\x1a\xe3\x60\xed\x26\xcd\x4f\x8f\x1f\x3f\x3e\x3c\x0e\x0b\xc4\x71\x50\xa0\xc7\x8f\x0f\x9e\x1e\x8f\x11\xe2\x7b\x80\x4b\x7a\x8c\xcf\xce\xfc\x09\x26\xfc\x7f\xf8\x93\x83\xa3\xf1\xe3\xe3\xc3\x83\x09\x36\x96\xc0\x12\x92\x63\x21\x8b\xf6\x64\x96\x90\x96\xa9\x7c\x75\xaa\xaa\xc3\x09\xde\xe4\x1e\x69\x3e\xcd\xd6\x33\x48\xfd\xd5\x0e\xae\xbe\x39\xc0\xec\x46\xa3\x7f\x9b\x74\x20\xd6\xc7\x26\x36\xef\x6b\x12\x46\x5a\xcb\xbb\xbf\xac\xbf\x54\x44\xa6\x3c\xc9\xd2\xe9\x67\xe2\x9c\x37\x28\x3b\xdd\xbe\xae\xbf\xfc\x38\x51\xc8\x0a\x38\x52\x7c\xf2\x18\xab\x6d\x5b\x3b\x84\x43\x0e\x79\x86\x15\xb6\x5e\x79\x9b\xa9\xe2\x8c\x73\x5d\xeb\xab\x97\x9a\xa8\x94\xd6\xc3\x2e\x1c\xf6\xad\x0b\x10\xe8\xa7\xc4\x84\x90\xa4\x63\x93\x50\x8e\x6c\x38\xd3\xe1\x8e\xb8\x82\xe4\x6e\x30\x06\x5f\x2a\xad\x3f\xaf\x27\x0c\x6b\x46\x8b\x92\xcd\x07\x39\xca\x50\xe2\xa4\x4d\xd9\x38\x69\x4f\xaa\xb4\x4f\x8f\xa1\xdc\x32\xb9\x1d\x66\x06\x62\x07\xec\x95\xc9\xad\x4a\xb8\x61\xa5\x0d\x1a\x60\x0f\x51\x4c\x2a\x3a\x39\x29\xcf\xaa\x13\xac\x82\x72\xf4\xce\x39\xaa\x00\x57\x99\x54\xa7\xb9\xeb\x76\x9f\xb5\x54\x5e\xc5\x6d\x28\x51\xd2\x5f\xc8\x5b\x12\x9b\x1d\x0c\xa5\x5d\xea\xbb\x4d\xd9\x4a\x49\xc9\x56\x2c\xe1\x81\x84\x12\xeb\x60\xf2\xb4\x45\x7e\xa9\x74\xac\x96\x49\xf6\x99\xc8\xfc\x8d\x99\x54\xdf\x6c\x59\x48\x5f\x9d\x00\x68\x40\xe7\xa9\x78\x52\xf2\x2d\x5a\x4f\xfb\xac\xc3\xb9\xda\xdb\x9f\xd4\x7c\x3a\x5f\x97\x34\x45\x46\x73\xf9\x42\x35\xc8\x10\x90\xa0\xa0\x4f\xe9\x38\x39\x29\x5b\x1d\xa7\x24\xe5\x38\xd7\x5f\x52\x4a\xf3\x2f\xd2\x71\x86\x52\x04\x0d\xcf\x22\x2f\xd3\x8f\x9f\x11\xf3\x9b\xd3\xa8\x3e\xda\x36\x8f\x9f\xdb\x23\x9a\xca\xd7\x57\x5f\x5b\xf3\x7a\xbb\xee\x3e\x94\x7f\x68\x4b\xb5\x5f\x99\xee\x42\x7e\xb1\xad\xda\x2f\x91\x3b\x47\x18\x49\x58\xdf\xaf\xaa\xf7\xd0\xd4\x06\x30\xa2\x50\xdb\x97\x0a\x9b\x3e\xae\xf1\xe3\x27\x5d\x1f\x5b\xdf\x57\x69\x85\x9f\x1e\x61\xef\x6f\x2f\xff\x05\xe7\x08\xc7\x0a\xdc\xc0\x3f\x38\x96\xe8\x06\xfe\xc1\x91\x84\x37\x80\x2c\xf7\x33\x95\x4b\x06\x00\x0e\x20\xef\xff\x12\x7e\x4c\x24\xc4\xc1\xb1\x2f\x11\x0e\xbe\x7b\x8a\x01\xdc\xe0\xf0\x89\x84\x36\x78\xe2\x2b\x68\x03\xc1\x86\x6f\x35\xa6\xf2\x4b\xed\xfe\x77\xa7\x42\x6a\xce\xa9\xc4\xf1\x21\xef\xb4\xeb\xe0\x33\xe5\x4b\xf8\x51\x01\xa8\x90\x0f\xf4\x9d\x37\x27\x6f\xe9\x33\x6f\x4e\x9e\xd3\x73\x80\x2a\xc8\x75\xd2\xfd\x9f\x69\xee\xfd\xf5\xfc\xdd\x4f\xe4\x77\xfa\xb3\xeb\xfe\xec\x49\x34\xe4\x74\x7e\x4f\x5e\xd0\x19\x72\x2e\x17\xe9\x6c\xc6\x72\x07\x93\x9f\xc4\x65\x37\x77\xd1\x6b\xfa\xd0\x78\x2b\xe5\x8c\xfd\xba\x7a\x29\xdd\xc3\xaf\x32\x46\xde\xd0\x29\x72\x2a\xa8\x61\xaf\x64\xd7\x69\xc5\xcb\x7b\x07\x93\x57\xed\x6d\xa1\x07\xfd\x29\x2e\x8b\xd5\x5e\x7b\xe7\x47\xba\x01\xcb\xf1\xfd\xd0\x41\xfe\x7b\xf2\x0f\x9a\x7b\x7f\x97\x2f\x93\x5f\xe9\xe8\x1f\x75\x3d\xfa\x47\xfb\x55\xf7\x0a\xf2\x74\x3f\x5f\xa4\xd9\x8c\xfc\x41\x0b\xd7\xcd\x06\xcc\x3b\xdf\x8d\xe8\x1d\x7a\x8b\x1e\x1a\x90\x9c\x0f\xc3\x8e\x5d\x6f\x5b\xd9\xaa\x64\xfc\x77\x0d\xf6\x92\xa6\xc1\xe2\x5f\x1c\x0e\x4b\x95\x0f\xe8\x47\xc2\xf1\x4e\x6e\x82\x13\x7e\x8c\x78\x4c\xde\xea\xe8\x8b\xdc\x75\xd9\x88\xd2\x1f\x5d\xf7\xad\x78\x91\xe4\xb8\x09\xde\x92\x5f\x06\xa2\xb5\x5f\x45\x2c\xa6\x77\xe8\xbd\x15\x02\x63\xa0\xf6\xbc\xcb\x8f\x94\x11\xde\x90\x7f\xd1\xef\x5d\x57\x0d\xb2\x35\x60\x5e\xca\x59\x99\xf0\xa2\x0c\x37\xd7\xd2\xc6\xdb\xac\x19\x84\x76\xed\x58\xd4\x1a\xf2\xc3\x36\xb4\x47\x46\xa1\x3b\x3f\xa0\x3f\x65\x0f\xa5\x2a\x46\x6f\x55\x24\xca\xb5\xd8\xb3\xa6\xe8\x15\xe1\x38\x44\xa5\xc7\x0c\xd9\x00\xbe\x3b\x79\x81\x5d\x97\x45\x2f\xe2\x88\xc7\xae\x8b\xd4\x2f\x0a\x81\xb9\xf4\x0e\x95\x26\x0c\xe1\x2a\x63\xc1\x4b\x34\x81\x2c\x8b\x18\x07\xea\xdb\xba\x16\x03\xfb\x82\xbc\x44\x3e\x79\x68\x30\x26\xa6\x80\x09\x26\x7f\xa8\x86\xe2\x40\x8f\x7e\x43\xfe\xd6\x73\x5a\x04\xf1\x62\x25\x85\xa0\x37\x00\x65\xc0\xb1\xe0\x0c\x13\x48\x9b\xa5\x2c\xda\xc5\x59\x7a\x82\x7f\x40\x8c\x94\x34\x8f\x52\xb1\xa1\xe1\x51\xd9\x26\xe3\x64\x0d\xf9\x66\x60\x12\x5f\xdb\xa7\x1c\xf4\x16\x41\x6a\xc0\x36\xa8\x45\x85\xb2\xfe\xe8\xba\x62\x84\x98\xc4\x5c\xfe\x93\x30\x0c\x9e\x9b\x88\x03\xca\x9e\xb2\x82\xc0\xef\x57\xf0\x43\xdd\x13\x63\x07\xe9\x0f\x5f\xc4\x11\x8b\x71\x5d\x73\xdc\x90\xbf\x6f\xa2\x6c\x30\x7a\xd9\x9d\x13\xa0\x40\x55\x1e\x87\xf2\xfe\x24\x1c\x6b\x17\xce\x0f\xd2\xff\x59\xfb\x68\x76\xde\xeb\x4c\x58\x5d\x77\x26\x14\x06\xbd\x6c\x1a\xf2\xcf\x61\x68\x49\x08\x27\x15\x2d\x11\xc2\x5d\xc6\xc7\x76\x10\x2b\xa0\x16\xaa\x50\x2b\xea\x9a\x53\xfa\x02\xfe\x5d\xd7\x75\xae\xe3\x68\x4c\x78\x59\x43\xfe\x6b\x6b\x2d\x40\x91\x24\xa7\xcf\x51\x19\xfe\x19\xc8\x1a\x0b\x51\x23\xec\x50\x75\x8d\xc9\x09\x96\x1d\xa3\xb9\xcc\xea\x51\xd7\x25\x8c\xff\x8f\xd0\xd7\x42\x56\xf9\x2a\xe2\xed\x24\x17\xcd\xce\xf7\x75\x8d\x2a\x84\xde\xdb\xa1\xdf\x2a\x56\xa7\xb3\x60\xd4\xee\xd6\xe0\xd1\x20\x47\xb2\xe0\x76\x83\x6b\xf9\x7c\x8e\x1c\x69\xb5\x67\x74\xb1\xa9\x29\x0d\x5b\x71\x89\x85\xdf\x59\xca\xcd\x90\x24\x24\xe5\xcf\xfc\x27\x81\x65\x67\xe8\x44\xfe\x8c\x5e\xc4\x40\x65\xa8\x25\x1b\x58\x6b\x7f\x68\x15\x4e\x2c\xa4\x12\x1b\xf4\x99\xdd\xc2\x75\x7f\x75\xdd\x3f\xd0\x8f\x43\xfe\xb0\x15\xe3\x01\x6f\x30\xf9\x05\x82\xd0\xbf\x10\x5c\x49\x05\x23\x7d\x6c\x30\x79\xe7\xcd\xe9\xdf\xc9\x33\x6f\x4e\x7f\x20\xda\x09\x5a\x48\x2c\xfa\x4f\xb8\x7c\x22\x2e\xbf\x81\x9f\x47\xe2\xe7\x7f\x91\xc2\x75\x47\x00\x37\xe4\xba\x15\xfa\x91\x38\x43\xd2\xc8\x21\xdf\x00\x8d\xaf\xbc\xf9\x50\x18\xfd\x2f\x68\x06\x91\x39\x98\x24\x28\xf1\x7e\x18\x27\xde\xaf\xe3\xc4\x7b\xf5\x68\xf4\x3d\x79\x90\x33\x14\xbc\x6f\x5a\x96\xf0\x57\x6a\xe7\x84\x23\x69\xf5\x1c\x0e\x25\xce\x57\x25\x4b\x66\x20\xfc\x34\xa7\x25\xe0\xe3\x49\x94\xaf\x1d\x91\xee\x23\x44\x61\xfc\x10\x38\x2e\x25\x96\x40\x25\x16\x7e\x15\x59\xe7\xd5\xb4\x58\x89\xe2\xaa\x0e\x40\x3b\x63\x74\x72\xf2\x57\x4d\x08\x8c\x9d\xe0\x19\xfa\x6b\xc4\x64\x16\x60\x43\xf1\x8c\x7e\x44\x33\xaf\xe2\x45\xc9\x30\x29\xc5\x27\x5c\x6f\x4e\xcf\x4a\x76\x82\x97\x88\xb3\xa8\x94\x1f\x41\xa8\x90\xee\xb0\x22\x49\x87\x88\xd5\x33\x6c\x81\x7d\x43\xd8\x98\x3a\x0e\x0e\xdf\x44\x2c\x0e\xc4\x3f\xf4\xbd\x98\x6d\xf2\x91\xdd\xbf\xea\x7d\x94\xce\xd1\xe8\x5f\x62\x70\xfb\xa4\xcf\x6c\xbb\x8e\x94\x3e\x82\xe2\x4d\x07\x76\xd3\x7c\xf7\x0d\x4e\xe7\xe8\x8d\x60\xdd\x56\x42\x6b\xde\x90\x75\xc5\xce\x19\xe7\x36\x0e\x38\x7e\xf8\x95\x8e\x26\xf2\x51\xba\x5c\xd9\xf1\x34\xf0\x08\xc2\xd9\xba\x1d\xed\xc3\x6e\x7e\xfa\x98\x9a\x87\x77\x88\xe1\xe0\x6f\xe8\x4e\x85\x93\x91\x5e\xf0\xe5\x0f\x64\x03\x63\xf3\x6f\x64\x6b\xb4\xda\xdf\xc9\x00\x46\x63\xf0\xcf\xde\x5d\x39\x17\x55\xf0\x5f\x0d\x26\x3f\xbb\x6e\xdb\x7e\x34\xfa\xbe\xae\xb3\xcd\x03\xb3\xf7\xc8\x1c\x96\xc9\xd0\x5b\x67\x44\x7f\x47\x52\x10\x38\x0f\x0d\x5c\x3d\x24\x01\x6b\xac\x6b\x39\x0e\x72\x01\x60\xe2\x08\x55\x10\x76\x77\x4a\x0b\xdc\x66\xf0\x13\xfc\x9a\xc5\x24\xa5\xfe\xc9\x06\x7b\x4a\x4f\xb0\xe2\xce\x2d\x9b\x82\xb8\xc3\x1d\xc0\x78\x11\xdc\xd5\x8f\x09\xba\x02\xd8\x41\x73\x4c\x0f\xa2\xee\x5f\x96\x7b\xc8\x3d\x3c\xef\xa0\x12\x2b\xe9\x35\xa0\x10\x96\x80\x38\xd4\xf7\x20\xc0\x64\xf4\x2f\x21\xb9\x0d\xf1\x60\x22\xea\xa6\x9c\xfc\xae\x3c\x2d\x7e\x06\xb0\x16\x4c\x2c\x9d\x2a\xfa\x29\xd6\xd9\x37\xad\xbb\xe4\x27\xfb\x1d\x9d\x32\x02\x93\x39\x7a\x6f\x56\x8d\xb8\x12\xfb\x5b\x9d\x93\x45\x30\x9d\x39\x52\xfa\xb5\x1a\x5a\x85\x18\x67\xa2\x49\x34\xec\xa6\xf2\xd4\x9f\x1c\x05\xfe\xe4\x88\xb4\x98\x85\x4f\x02\x7f\xf2\xc4\x44\x9b\xb4\x9e\xfc\x1a\xed\xe0\x38\xf0\x0f\x8e\xad\x24\xee\x32\x5c\xd7\x3f\xfa\x2e\xf0\x8f\xbe\x23\xfe\xe3\x49\xe0\x3f\x9e\x10\xff\xb1\x1f\xf8\x8f\xfd\x16\x05\xc1\x3e\xab\xf4\x83\x63\x7f\x20\x0c\x5a\xa5\x57\x38\x08\xbe\x3b\x20\xdf\x3d\x0d\xbe\xd3\x50\x80\x0a\x05\xe1\x28\x78\x7a\xd4\x4f\xbb\x30\x94\x89\xf4\x33\xb6\x88\x63\x6d\x63\x7a\xdc\x85\x05\x00\x7b\xf6\x5a\x9b\x2b\x32\xb5\x21\x9a\xaa\x14\x0b\x90\xb0\xf7\xfb\xf5\x7c\xce\x4a\xb5\xe3\xfa\x4e\xec\xb8\x8a\xce\x83\x19\x2d\xbc\x17\x09\x4f\x7e\x49\xd9\x2d\xc4\x32\x3d\xfb\xfe\x17\xd7\x9d\x7a\x69\x05\x77\x96\x74\x61\x4d\x28\xd8\x0d\xc8\x0d\x4d\xbd\x5f\x5e\xbf\xfc\xd5\x40\xe5\xfd\x2a\x0d\xe4\xd3\x11\xa5\x0b\x4c\x1e\xac\xe2\x83\x85\x0e\x91\x95\xf8\x0c\xa9\xf7\xfc\xdd\x4f\xe7\x1f\xde\xab\x1c\xc7\xf2\x25\x08\xf3\x13\xb5\x0d\xf1\xd2\x95\xeb\xae\x00\x28\x2d\x83\xe4\x05\x37\x3a\xe6\x90\x68\x1b\xcc\x3f\x3e\x95\x59\x69\x94\xb3\xdb\xdd\x05\x3a\xc0\xc6\x95\x53\xe9\x01\xde\xd5\x3d\x67\x6f\x4c\x36\xaf\x6e\x6b\x86\xb2\x7c\x1b\xaf\xad\x11\xa5\x4b\xd7\x6d\x99\x9e\x5e\x37\x4b\xb9\xac\x12\xe5\xce\x62\xeb\xc7\x54\xdd\xb4\x2a\x95\xe1\x3d\xa0\x6c\xd0\x0a\xf5\xd2\x83\x97\xe0\xb5\xc3\x6e\x91\x54\x90\xc8\x02\x63\xb4\x46\xe9\x5e\x8e\x21\xb8\x89\xdd\xee\xce\x54\x2d\x53\x75\x55\x88\x8d\xf3\xe4\x24\x3f\x4d\x4f\xf0\xd4\xab\x18\xff\x47\x9a\xf3\x27\x68\x35\x1e\x93\xcc\xbb\xd6\x97\xf9\x78\x8c\x2d\xa5\xac\x69\xe1\x6c\xec\xfe\x5b\x19\x9e\x2d\xa0\x90\x6e\x56\x70\xff\xe8\x71\xe0\x1f\x3d\x26\xfe\xd1\x71\xe0\x1f\x1d\x6f\x83\xbd\x68\xa3\x4e\xbf\x24\x63\x6d\x4b\x4a\x23\x49\xf4\x82\x16\xc9\x83\xa6\xce\x40\x2e\x00\x43\xad\xca\x7e\xd9\x6d\x88\x31\x36\x0e\xa5\xb4\x15\x05\x1c\x61\xe4\x00\x50\xe4\xe1\x81\x43\x8e\x3e\x6d\x2e\x06\xa7\xa7\x9e\xe1\x44\xde\xd4\xc6\xd3\xa3\xc0\x3f\x02\xe3\xc9\x50\x12\xd8\x4e\x75\xc7\x47\x0e\x79\xf2\x9f\xab\x6e\xc0\x9e\xa9\xab\x7b\x9d\x73\xff\xb8\xeb\x5f\xf9\xbf\x59\xd9\x70\x52\x70\x5d\xd9\x7f\x78\x20\x07\x2c\x7c\x56\x65\x4f\xba\x9e\xc5\xff\x9b\x75\x0d\x98\xf5\x74\x5d\x62\xc5\xfc\x87\x87\x71\xc0\x9a\x67\xd7\xf6\x1f\x1e\xc7\x01\x6b\x9e\x5d\xdb\x7f\x76\x20\x87\x81\xb6\xff\x43\x95\x99\x4c\xbb\xa6\xbe\xa1\x74\x9c\x43\x50\xab\xca\x58\x09\xc9\xd7\x0e\x30\x9a\xe8\x08\x33\x25\x3e\x9f\x1e\x29\x3b\xe5\x77\x0a\x80\x75\x62\x22\x85\xa5\xc0\x3c\x7a\xaa\x4d\x94\x4f\x31\x99\xd1\x51\xea\x3d\x9b\x8a\x5d\xc8\x3f\xa5\x42\xe8\xba\x4e\xe7\x1a\x72\x36\x93\x15\xad\x04\xcb\xfd\x95\x25\x1f\xc9\x72\x28\xca\x5d\x3a\x37\xce\x61\xe7\x41\xee\x87\x76\x5b\xff\x01\x5f\xa5\x6b\xba\x91\x1f\x19\x82\x92\x19\xd6\x36\x96\x55\x7b\x44\x30\x92\xb2\xe7\x46\x0b\x1c\x47\x34\x1e\xd2\x1e\x43\x4e\x7e\x88\x04\x0d\x0d\x3a\x46\x6c\xa0\x07\xb6\x67\x50\xce\xc0\x25\x6a\xa3\x38\xa2\xb2\x27\x5f\xd1\x0d\xbf\x2d\xfd\x0e\xb9\x27\xd7\x24\x23\xa3\x89\x98\xf6\x9d\x85\xeb\xce\x5c\x17\xad\x11\xca\x29\x48\xb2\xe7\xed\xf6\x1f\xdd\x77\x1a\x6a\x25\xb3\xc3\xa4\xf2\x7e\x7a\xf9\xf2\x05\x1d\x4d\x48\x81\x22\x47\x9a\x14\x1d\x22\x36\xa5\x0e\x71\xae\x19\x78\x12\x30\xee\xc4\x03\x11\x02\x57\x56\x49\x25\xe5\x11\x8b\x77\x12\xc4\x09\x23\x16\xb5\xa6\x6a\x34\xb9\xd0\xc7\x97\x42\x7b\x56\xe7\xaa\x73\xa1\x8c\xcb\x5f\x12\xd4\x4e\x5a\x28\x0a\x75\x78\x3a\x8f\x58\x0c\x9f\xeb\x2d\x88\x68\x04\xa5\x4c\xc6\xd8\x16\x4d\xd7\xe9\x5b\xad\x82\x14\xe0\xbf\x3a\x18\xca\xda\x8d\xec\x20\x38\x3a\x20\x8f\x27\xc1\xe3\x89\x74\x26\xeb\x82\xf3\x48\xed\x53\xa7\x5a\x18\x4a\x2f\x3b\xa8\x77\x3e\x9e\x58\xfe\x75\xd6\xec\xfc\x7f\xee\x59\xa7\x1b\x21\xc8\x08\x62\xce\x49\x4e\x46\x7e\x2f\x11\xb7\x35\x1a\xd0\xeb\xaf\x4e\xfa\xf1\x9d\x56\xb6\x0f\x34\x4c\x91\x42\x16\x38\x54\xe9\x1a\x8f\x1e\x9b\xe3\x4f\xd0\x9b\x1c\xf2\x30\xcf\x12\xfe\x36\x59\x0d\x67\xb4\x51\x27\x7d\x16\xd8\x92\xc2\x1c\x32\x87\x6f\xa4\xa4\x6b\x94\x13\x31\xee\xa8\x24\x39\xc9\x09\x27\x13\xe2\x13\xcb\x7d\x21\xf2\x63\xb0\x12\x0a\x9d\xed\xf0\x31\x46\x8e\xaa\x52\xaa\x6b\xfd\xf8\x1e\x09\xe0\xf4\x38\x38\x7c\x4c\x8e\x1e\x07\x47\x8f\xb5\x6a\xf6\x5d\x70\x2c\x69\xe1\x6b\xcf\x43\x8f\x7c\xe9\x5f\xd0\xeb\xf7\x27\x5c\x33\x8c\x1f\xda\x57\xb8\x60\xe8\xbe\xb5\x9e\x1c\x0d\x79\x50\xdd\xf0\x03\xfb\x78\xfa\x33\x59\x6f\x15\x9c\xf7\xa4\x6d\xb4\x0d\xb7\xce\x72\x5e\xa6\xdb\x1a\x6d\xfc\xe6\xfc\x49\xe0\xfb\x56\x6c\xf5\xd3\x2f\x71\x30\xf2\xf5\xb1\xf1\x91\x16\x36\x13\x45\x3d\x8f\x0f\x37\x1b\xb2\xcd\xf6\x51\x7d\xc2\xa2\x50\xc8\xa8\xa4\xc4\x9b\x43\x6e\xa4\x5c\x88\xac\x87\x86\xcc\xe9\xe4\x24\xd3\x03\x3c\x3f\xc1\x66\xb3\x82\x24\x6d\x71\x9a\x45\x73\x70\x16\x70\xdd\x0a\x4d\x25\x6a\x9a\xea\xf4\xb4\x87\xde\xa0\xd0\x4e\xf4\x7e\xf9\xf1\x61\xf0\xd8\x3a\xc6\xff\x4c\xda\x5e\x6b\xe8\xfd\xcd\x1e\x83\x49\xe0\xab\x47\xfe\x6b\x61\xa8\x1e\xab\xf0\xe1\xef\xf4\x24\x88\x9d\x6f\xa5\x00\xcf\xcd\xe9\x7d\x07\x9e\x73\x9e\xe6\x49\x96\xdd\x0f\x9c\xd3\xcb\xcd\x1b\x49\x35\xc2\x67\x5d\x17\xfa\xa7\x58\xb8\x03\x76\x16\xb6\x63\xdb\x6c\x25\x98\x63\x68\x9b\x9d\x0d\x23\xe0\x84\x21\xdc\x07\xaa\x34\xcf\xcb\x06\x37\x01\x23\x5f\xf7\xad\xb4\x22\xca\x4f\xcd\x80\x2a\x38\x48\xb5\x9b\x93\x60\x8e\xbd\x7c\x89\x43\x89\x8d\x3f\xe3\xc1\x65\x82\xb4\xa5\x87\xfc\x2f\x12\x27\xfe\x62\xdf\x9f\x5c\x78\x17\xb3\x31\x82\x7f\x71\x88\x76\xdf\x16\x57\x69\xc6\x2e\xf6\x2f\x6e\xc7\x38\xdc\x3d\x4f\xe6\x49\x99\x5e\xec\xef\xcb\xa0\x9a\xc2\xf6\x03\x4b\x2c\xef\x89\x55\x32\x7b\x99\x0f\x8a\x85\xaf\x64\x2d\x70\xfa\xa5\x8e\xbb\x0f\x02\xff\xf0\xc0\x00\x5e\xb6\x24\xf6\xd5\x46\x99\xff\x17\x7a\x7f\xce\x93\x6d\xd9\xfb\xbf\xb2\xff\x93\xcf\xf4\xff\x70\x28\x8d\xf2\x56\x57\x83\x37\x6c\xfe\x95\x9a\x80\x18\x7f\x02\xdf\x42\x9f\x9c\xae\xeb\xc1\xe1\x67\x53\x2a\xdb\xb5\xbf\x4f\xaf\x17\x5f\x59\xfd\x81\xa9\xfe\x65\x3e\xdb\xa8\x7c\x78\xeb\xfe\x78\x82\x91\x93\x54\xf7\xf9\xf4\xb5\x3a\xaa\x90\x1f\x4a\x63\x21\x7c\x38\x20\x44\x2d\xc8\x7d\xe4\x1f\x1f\xb5\x19\x5a\x54\xa0\xac\x4e\x01\x3d\x91\xfc\xe8\x3b\x05\x5b\xf3\xe4\x89\x8a\xb6\x14\x9c\x6b\x4a\x33\xe4\xa4\xa6\x52\x32\x17\xd7\x9d\xbc\x1d\x64\x41\xd7\xd2\x8a\x47\x66\xf4\xe1\xf9\xf9\xf9\xfb\x75\xc6\xde\xa4\x15\x0f\x46\x13\xf2\xfc\xfc\xfc\x9c\xdf\x67\xec\x05\x9b\x66\x49\x09\xf9\xbf\x82\x91\x2f\x6e\xff\x22\x98\xaf\x7c\xcd\x27\xcf\xb3\x94\xe5\xfc\x3d\x9b\x72\x7d\xe7\xc5\xbb\xb7\xbd\x4b\x59\xa5\x75\xe3\x43\xf1\x91\xe5\xba\xa2\x17\x09\x4f\x3e\x94\x49\x5e\xcd\x59\xf9\x9a\xb3\xa5\x7e\xef\x55\x9a\x99\x5a\x7e\xfc\xf0\xf6\xcd\xb3\x2c\x7b\x5e\x64\x99\x04\x62\xd7\x37\x37\xef\xbc\x2a\xca\xe5\xcb\x8c\x09\xda\xd5\xb7\xce\x99\x78\xc7\xba\xf9\x96\xcd\xd2\x44\xd7\xff\x36\x5d\xb2\x0f\xf7\x2b\x06\x03\x21\x9e\xfe\x94\x2c\xd9\xec\xa7\x62\xc6\x84\x2a\x26\xae\x8b\x99\x19\x95\x9f\x93\x54\xf4\xf6\x8f\x35\xab\x4c\x0f\x7f\xce\xd6\xd7\x69\xde\xfe\x32\x05\x9d\xff\xf2\x83\x34\xd3\xe9\x37\xcf\x7f\xf9\x41\xe6\x5a\xb3\x6e\xfc\x9c\xf0\xc5\x39\xbb\xb6\xef\x14\x69\xce\xad\xeb\xee\xf0\x9d\xff\xf2\x83\x1c\xad\xa2\x34\x43\x75\x0e\x21\x3a\xd2\xf0\x66\xee\x89\xc9\x3b\x5f\x30\xc6\x75\xdb\x3f\xb0\x3b\xfe\xa1\x4c\xa6\x1f\x9f\xb7\xd3\x67\xee\x99\x1b\xc5\x7a\xaa\xdb\xdb\x90\x15\x4d\xd1\x0c\x93\x25\x9d\x9c\x2c\x4f\x57\xfa\x30\x7e\x39\x1e\x4b\xa9\x76\x43\xee\xe9\x2a\x5a\xc6\xe4\x9a\xce\xa2\xfb\x98\x5c\xd1\x44\xfc\xb9\xa4\x57\xae\x6b\xed\x7f\x76\xd2\x39\xba\x74\x5d\x74\x19\x4d\xe3\xba\xae\xd0\x25\x99\x92\x05\x26\x97\xd1\x5c\x5d\xce\xc9\x3d\x26\xeb\xe8\x3e\xa6\x0b\x72\x8d\x31\x50\xff\x6e\x9a\xef\xe6\xf8\x32\xba\x89\xeb\xba\x40\x97\xe4\x86\xe4\xd1\x4d\xac\x14\xf6\x36\xd1\x50\x2f\x1d\x8c\x7f\x7c\x14\xf8\xad\x59\x1d\x0c\xea\x4f\x9e\x04\x4f\x9e\xc0\x4a\xfb\x12\x6d\xef\xf0\xb8\x35\x23\x7e\x0f\xc8\x5e\xaf\x97\x4b\x41\x2f\x9c\x05\x80\x44\x46\xa6\x19\x4b\x4a\xfb\x26\xdc\x50\x8c\x51\x22\x21\xb7\x0c\xf1\x13\xda\x9e\x76\x80\x3a\xee\x8a\x80\x28\x56\x06\xf2\x8a\xee\xbf\x3d\x7f\xfd\x72\xd7\xbb\xf0\x0c\x97\x27\xeb\x4f\x6e\xf4\xad\xf2\x37\x78\xfa\x01\x49\xe9\x68\x04\x0e\x9e\xd2\xc4\xac\x5f\x20\x07\xad\x1f\x05\xca\x43\x8b\xfd\x0d\x9d\xfe\xf0\x90\x07\xaf\x5a\x57\x58\x05\xa7\xac\x94\x1b\xdc\x80\xdd\xb9\x69\x00\x4e\xf2\x87\x71\xea\x7d\x0f\xa0\xac\x15\x0c\xe4\x87\x74\xc9\x8a\x35\x0f\xd6\x28\xf7\xda\x4b\x2c\xb6\xff\xaf\x73\xce\xca\x9b\x24\xd3\xcf\xf4\xb5\xf2\x01\xb5\xe5\x8c\xd1\x35\x0e\x87\x92\x1d\x33\x74\x38\x79\x0c\x3b\x80\xc9\x91\xfc\x73\x88\x49\xc7\x4a\x70\x00\xbb\x81\xc9\x61\x70\x38\x39\x04\x9a\x38\x9c\x1c\xc1\x44\x1d\x4e\x1e\x4b\x9d\x06\xca\xde\x0a\x25\x66\x8f\xff\x86\x6c\xe7\xa4\xdc\x74\xab\xca\x69\xe9\x2d\x92\xca\xd2\xd1\x49\x3a\xa4\xf0\xc9\xa3\xad\x50\x1d\x84\x3f\x34\xa4\xa0\xa9\xf1\x25\xaa\x6b\xe7\x7f\xfe\x4f\xc3\xce\x49\x42\x53\xaf\x23\x56\xe0\x79\x57\xd0\x90\x8a\xa6\x9e\xc5\xf1\xe1\x15\x5b\x02\xb4\x58\x1c\x6b\x15\x3d\x6f\xe2\x7e\x21\x33\xbf\xe9\x82\xed\x5c\xb1\x0c\x79\xb0\x6c\x21\x09\xe5\x99\x2e\x4a\x6d\xac\xe0\x04\x8c\x16\x1f\x51\x5e\xd7\x91\xe5\xbf\xe1\x5d\xa6\xf9\x4d\xf1\x91\x6d\xf8\x32\xa9\x08\xe0\x9d\x3e\x39\xa7\x44\x66\xf4\xcf\x29\xa5\x0b\x75\xb0\x2d\x4a\x56\x3e\x1d\x3f\xb0\x5c\xf6\x74\x37\xad\x76\x93\xac\x64\xc9\xec\x7e\xb7\x5c\xe7\xb9\x50\x7d\x64\x54\x2b\xa5\x74\x26\xcf\x31\xe1\x6b\x87\x52\x9a\xaa\x82\x8a\x1d\xe3\x69\x26\xb1\x5e\x4a\x6f\xc9\xf8\xa2\x98\xd1\x94\x94\x5e\x52\x5e\xd3\x42\x23\xce\x24\xb4\xf4\x66\x2c\x63\xd7\x09\x07\x66\x96\x68\x0c\xf9\x73\x94\x28\xb8\xbe\x0a\x6a\xa9\x28\xa5\x2b\x3c\x2d\x72\x9e\xe6\x6b\xa3\xbf\x57\x4d\x23\x5a\x90\xb3\x3b\x2e\x1a\xa0\xeb\xc1\xa5\x57\xb1\x9c\xd3\xd2\xbb\x54\x7f\x93\xf2\x1a\x02\x69\x77\x3b\x0d\x36\xef\xeb\xa1\x98\xea\xa1\xa0\x33\xd9\xd2\x9d\xd2\x9b\xa5\xd5\x2a\xe1\xd3\xc5\xcb\xbb\x29\x5b\x49\x25\x5f\x3c\x91\x08\x2e\x8e\x32\x13\x59\x85\xb9\x6e\xe9\x25\x57\xe5\x7a\x05\xa9\x4f\xe0\xa9\x2c\x0b\xef\xe4\x74\xa1\xe0\xa6\x32\x0b\x17\xdb\xc9\x8b\x72\x99\x64\xa2\x8c\xb5\x07\xd3\x2c\x9b\x53\x42\x80\x76\x38\x0b\xe6\x64\x0d\xa3\x36\x30\x02\xca\x81\x0f\x9e\x4b\x47\x7d\xf9\x55\xd3\xb4\xbd\x94\x85\xba\x2e\x92\xbd\x52\x53\xa1\x9e\xab\x09\x59\xcb\x2e\x35\x0d\x62\x00\x05\x42\x8a\xc6\x50\xb0\x6e\xeb\x43\x8b\x1c\xf9\x20\x4a\x0c\x74\xc3\x85\x96\x1b\x30\xed\xc2\x2c\x98\x94\x49\x2c\xd2\x79\x5d\xd5\x28\xde\xce\x9b\xa6\x61\xde\x6d\x99\xac\xe8\x5a\xa1\x71\x38\xd5\xba\x5a\xb1\x7c\xc6\xa4\x5a\xed\x90\xb9\x75\xeb\x5f\x29\xcb\x66\x0e\x59\x50\x87\xdd\xb1\xe9\x9a\x83\x0a\x3e\xa3\xce\xb4\x58\xae\x32\xc6\xd9\xcc\x21\x2b\xfa\xd0\xd8\x10\x38\xf8\xa1\xed\xc2\x4d\xe7\xea\x5e\x5c\x49\xec\xa3\x87\x66\xe7\x3a\x2a\x62\x3a\xec\xce\xd3\xec\x48\x54\x24\xb5\x20\xbb\xf8\xb8\x4a\x18\xa3\x2b\xf4\x01\x45\x31\xc6\x78\xe7\xd2\x75\x2f\x47\x94\x42\xe6\x1e\x18\x8c\x4b\x52\x60\xd7\x45\xd7\xf4\x52\x5a\x19\x6f\xe9\xbd\x05\x81\xb7\xb4\x7e\x77\x97\xfc\x35\x6e\x3b\xf2\x52\x70\xc3\x48\x92\x38\xd1\x43\xa8\x09\x2b\xf6\xe6\x45\xf9\x32\x99\x2e\xda\x0d\x26\xc7\x0f\x2c\xe2\xf1\x90\x30\x53\xe6\x61\xe0\x14\x26\x97\xac\xa9\xe8\xae\x4d\x81\x65\xbf\x68\xb9\x63\x91\xd4\x42\xa9\x2f\x50\x07\x34\x59\x6d\xb8\xad\x76\x08\x0e\x63\x2e\x77\x39\x00\x17\x14\xc4\x2c\xf0\x0c\xb1\xa8\x8c\x09\x23\xa9\x5c\x04\xb2\x67\x23\x4a\x2b\xb5\x06\xe4\x42\xa9\x80\xb2\xa7\x74\xad\xf0\x09\xb4\x45\xc4\x75\x1d\x99\xcc\xae\x65\xf2\x53\x33\xee\x53\xe2\x5c\x5e\x26\xb7\x49\xca\x1d\x1c\xaa\x96\x99\xf4\x0d\x53\x4f\x3d\x1b\xc8\x3f\xc1\x15\x2f\x21\x0c\x9a\xda\xc5\xa7\xe1\xba\x91\xfa\x29\x0e\x36\xca\x1e\xca\x69\xa1\x70\x3d\x19\x29\xd0\xba\x57\xa4\x9e\x98\x8d\x92\x9b\x04\x55\x72\x49\x62\x18\x38\x31\x9a\x8d\x89\xf6\xe2\x94\x87\x2a\x23\x5a\x41\x0a\x1c\x14\x08\x37\xed\x44\x9e\xc3\xb9\xb5\x56\x86\x8c\x98\x8b\xf4\xd2\x8f\x35\xff\x96\xa7\xe6\x2d\x03\x06\x20\x0a\xb2\x85\x3d\xb6\x05\x79\xb2\x15\xae\xdb\xf2\xf5\x2e\xa3\xa3\x9c\xc8\x36\x0c\x95\xa5\x8f\xe3\x57\x3b\x5b\x58\x91\xa0\x26\xcb\xbd\xf0\xc3\x82\xed\xea\x9a\x77\x67\x05\x93\xfe\x56\xab\xb2\xb8\x49\x67\x6c\x37\xd9\xfd\x16\x3e\xfe\x76\x57\x96\xe5\x98\x31\x5a\x35\x52\xdc\x66\x28\x27\x6d\xdb\x35\x27\xee\xca\x2d\x49\x71\xc6\xb6\x3f\xd8\xac\x14\x08\xb1\x3f\x58\x2b\x75\x7a\x90\x4a\x61\xa1\xc4\x71\x58\x48\xd6\x8d\xca\x08\x68\x63\x9d\x71\xb1\xf5\x89\x69\x21\x69\x81\x94\x9e\x20\x33\xca\xe0\xcf\x9b\x62\x6a\x16\xf4\xc8\x96\x23\xd6\xf8\x4a\xaa\x54\xa3\x8b\x37\x9b\x81\x83\x22\x40\x5f\x36\xa0\x66\x30\x65\xc3\x8c\x07\x5b\xbe\xab\x16\xd4\x50\xf1\x2d\x75\xbd\x6b\x0d\x6f\x42\x20\xbc\x29\xa6\x01\x8b\x26\x71\xb3\xe3\x83\xe7\x87\xeb\x22\x2e\x33\xd1\xbc\x29\xa6\x94\x81\x55\xfc\xa0\x7d\xa2\xac\x78\xf2\xd9\x41\x4c\xb8\x97\xcc\x39\x2b\xe5\xf5\x61\xac\xe2\xd0\x78\x79\xff\x52\x9a\x80\x0d\xce\xbc\xa9\xff\x59\x5b\x3f\xf3\x14\xfb\x4f\x8b\xbc\xae\x1f\x9a\x1d\x0e\x13\x49\x8d\x5c\x52\x9e\xea\x1c\xa6\xce\x7e\x9b\xf2\xb6\xc0\x8f\x26\xe8\xae\xad\x96\x46\xba\x6f\x4e\x59\x14\xdc\x69\x62\xc2\x0c\xab\x7d\x27\xd1\xa9\x4c\xfa\x23\xc6\x91\xd8\x3b\x99\x02\x3f\xa8\xb3\x3c\xa6\x1d\x8f\x59\x54\xc0\x9a\x2b\x7b\x98\x41\x32\xcd\xdc\x90\x7d\x12\xe8\xc2\xe0\x12\x03\xe6\x50\x5a\xfd\x94\xfc\x84\x98\x09\x24\x52\xda\xe4\x9e\x6f\x25\x0a\xdc\x2d\x55\x52\xc1\x93\xf1\x38\x3d\x65\x06\xb4\x04\xd0\x5e\x54\x56\x89\xd4\x42\x2e\x52\x8c\x29\x4a\x63\x22\xd5\x06\x3a\xf2\x49\xb9\xd3\x7b\xce\xcd\xc3\x09\x29\x9b\x36\x50\x0d\x48\x38\xd1\x10\x21\x0f\xe2\x32\x78\x6b\xf1\xa1\xb7\x46\x42\x28\x2d\x85\xb7\xa0\xfe\xda\x35\xd1\x12\x81\xb7\x1d\xb4\xd8\x7b\x72\xdf\xb9\xbe\x21\xf7\x51\x15\xd3\x1b\x50\xc7\xb2\x04\x9c\x0d\x69\xab\xa7\xea\x7d\x93\x23\xd6\x7a\xb5\x71\x7b\xc0\x83\x7d\x68\xd8\x7b\x98\xbd\xfa\xf0\x75\xc4\xc1\x2f\x8f\xd2\x9b\xba\x1e\xa8\x92\x52\x8a\xb8\xdd\xae\xba\xe6\x00\xc1\x81\x71\x43\x98\xb7\x4c\xca\x8f\x43\xd2\x58\x89\xfc\x2e\x70\x77\x38\x78\x17\x31\x72\x8f\x03\xc4\xbc\xcb\x4b\x18\xaf\xcb\x4b\x7a\x4f\x2a\x58\x55\x75\x8d\x98\x18\x98\x81\x76\x61\x4c\xd8\x56\x15\xe3\x16\x13\x26\x5a\x97\x80\x0e\xb6\xd9\xbc\x07\x25\x24\x03\xd6\x34\xe4\x25\xba\xb3\x37\x21\xd6\x45\x94\x6c\xd5\x9d\x08\xf3\x9e\xd9\x9b\x26\x7a\x27\xaa\x13\x77\x68\xd7\xad\xa0\x05\xe6\x14\x9c\xea\x0e\xad\xcd\xed\x76\xf7\x3c\x34\xa9\xa8\xc4\x61\x11\x14\x40\x87\x68\x40\xf0\x9a\x6f\x81\x17\x2b\x6f\x47\xf3\xbe\xd8\xfe\xbe\x14\xc3\x70\xdb\x1d\x3e\x87\xdc\x7e\x42\x21\x24\xb7\x66\xdb\xb7\xf9\x8a\xc9\xaf\x6b\x0a\x8b\x1d\x31\x0c\x1f\xd9\x7d\x35\x40\x81\x16\xdc\x50\x29\xd3\x6a\x70\x9d\xd1\xad\x0d\x88\x29\xd9\x0d\x2b\x2b\x86\x30\xd9\x5c\xe4\xbc\x45\x25\x92\xc2\x9e\x7b\xab\x62\x85\xe4\xfe\x4c\x25\xea\xe8\x2e\xe5\xdc\x5e\xe7\xed\x61\x76\xbb\xba\x45\x73\xe5\x11\x10\xfd\x40\xac\x84\x78\xf4\xc1\x5a\x17\xc1\x47\x02\x6c\xaf\xef\xbc\xa0\xd2\xc3\xb1\x1b\x9d\x6a\x0f\x38\x84\xfa\x0d\x1b\x31\x95\xa8\x0e\x7e\xca\xdb\xba\x35\xf2\xa2\x23\x75\xe0\x56\x57\x00\xc2\x2d\xa9\x61\xf4\x05\x85\xe6\xce\xcf\x30\x19\x31\xdc\x19\x58\x60\xd7\x8e\xda\x21\x1a\x90\x4a\xa3\x2d\xca\x94\x60\x10\xa3\x02\x3c\x76\x5c\xb6\xb0\x65\x3a\xa4\xa0\x8c\x29\xc7\x0d\xa9\x78\xb1\x0a\x3a\x67\x39\xa6\x0b\x13\x15\xe9\xd0\x6b\x57\x34\x89\x2d\xb9\xd3\xd5\x3b\x98\xd4\x3b\xe4\x96\x93\xd9\x1a\x84\x14\x2d\x37\x49\xd6\x90\x8d\xed\xe7\xe0\xa8\x03\x94\x97\x2a\x68\xa7\x45\x2c\x6f\xb7\x11\xa9\x04\xc0\xd5\xfb\x66\x25\x28\x95\x9e\x20\xc7\xd4\xa8\x25\x39\x49\x3f\xa5\x7c\x8c\x46\xa9\x41\x70\x2d\xfa\xfd\x6d\xa1\xa6\x8a\x33\x3a\x39\xd9\xdb\x2b\xf4\x46\xbf\x3f\x30\x45\x4c\x2a\x9a\xf4\x07\x07\xc4\x2d\xa5\x34\xf1\xa4\x00\x36\x58\xb9\x80\x5c\x22\x6d\x0f\xfa\xd9\x29\x35\x14\x67\x40\x4e\x95\x05\x8e\x38\x5a\x07\x71\x24\xde\xbc\xbe\xdd\x2a\x20\xb2\xac\xb5\xeb\x66\x5d\xe2\x3d\x4d\x8c\xfe\xd2\x56\xde\xde\x03\xaf\x97\xde\xfb\x6d\xa1\xf6\x17\xd6\xdd\x46\xdb\x1e\xd6\x5f\x5d\x57\xa3\xf1\xbf\x46\xd9\xa6\x9d\x86\x97\xf7\xbb\x15\x4f\x38\xd8\xdf\x77\x6f\x53\xbe\x28\xd6\x7c\x17\x3e\xdf\x2d\xca\x5d\xd5\x02\xe7\xbf\xd1\xe0\xa6\x69\x88\xb4\x62\xf4\xfc\x87\x5a\xa7\xd9\xad\x33\x5f\xca\x99\x2f\x8d\xc5\xab\x37\xf3\x65\x2c\xb1\x90\x37\x66\xd1\x2c\xc9\xb4\x3b\x51\x2a\xe3\x25\x34\x3e\xb5\x9b\xa9\xe4\x46\x2a\xb1\x5f\x9b\xa6\x70\x5d\xe4\xc0\x6f\x58\x5f\x75\xed\x68\x7b\x09\x5c\x63\xd7\x2d\xda\x5a\x5d\x97\x9f\xd2\xc2\x2a\xce\x75\x91\x04\xe3\x93\xbb\xf5\x44\x82\xee\x19\xfa\x0c\x1e\x2c\xe5\x47\x26\x0e\x25\x89\xe2\x46\x45\x88\xb6\xb1\x2b\x58\x52\x76\x35\x42\x5b\x87\x27\xda\x78\x81\xc4\x4e\x53\x5f\x6c\xba\x35\x7f\x01\xc3\xb0\xfa\xec\xc9\xc8\xd1\x6e\xc7\xe1\x66\xd8\x36\x07\xbe\x0d\x2c\xe3\x95\x7a\x03\x19\xc6\x43\x0d\xab\x85\x77\xbb\xcc\x58\xef\xf6\xda\x02\xe5\xe2\x0c\x2c\x53\x16\x53\x56\x27\xae\x58\xa8\x7c\x8f\x63\xb2\x6a\xc8\x3c\xcd\xd3\x6a\xb1\x05\x79\x61\x2b\x59\x71\x49\x56\x9d\x94\x0c\x36\x59\x71\xa9\x64\xdb\x7b\x0c\x3b\xe6\xa6\x33\xe2\xa5\x35\xaf\x82\xb3\xa9\x4d\x08\x26\xcf\x50\x29\x9a\x38\x94\x34\xf5\x3f\xd8\x44\x49\x83\xd0\x3c\x25\xba\xcb\xad\x52\x22\xb7\xec\x21\x29\xcd\x61\xd6\x45\x2b\xb5\xf8\x4e\x9b\x66\x83\x2f\xa4\x99\x10\xa4\x99\xe2\x04\x09\xe7\x6c\xb9\x82\x43\x5d\x2d\x61\xc1\x9e\x66\x93\x9a\xed\xde\xd9\x95\xc5\x0f\x7a\xc3\x18\x88\x8d\x0d\x69\xb7\xb3\x41\x49\xd4\xf6\x35\xc8\x1b\x62\x8c\xb0\x16\xa5\xe8\xa9\x57\x82\x43\x0c\x2b\x6b\xd0\x86\xe1\x86\x87\xe6\x18\x21\x78\x68\x74\x86\x9a\x6b\xad\x44\xbd\x5f\xe7\x3c\x5d\x32\x9a\xb7\xf9\xdd\x8c\x0a\xe8\x94\x60\x0c\xeb\xbf\xbb\x4b\x77\x4b\x07\x23\x70\x4e\x7d\x68\x62\xf1\x0f\x81\xad\x68\x77\x71\x75\x0e\x19\x36\x9a\xb5\x2c\x66\xeb\x8c\x0d\x18\x9a\xe4\x03\xdd\xe4\xb0\x7b\x49\x85\xbe\x39\x85\xf3\x9f\x90\xcb\xb8\xd8\x8d\x68\xb2\xf6\x95\x4d\x96\xfe\xfb\xdf\xd7\xac\xbc\xdf\x2d\xd9\x1f\xeb\xb4\x64\xd5\x6e\xb2\x7b\x9b\xe6\xb3\xe2\x16\xb8\xfb\x6e\xb2\xab\xbf\x74\x5a\x25\x11\x31\xdc\x04\xf0\x2f\x72\xd6\xb9\x0c\xe1\x9a\xb5\x59\x88\xe5\xf7\xa1\xfc\x23\x53\xcb\x7e\x62\x18\x6e\x74\x9a\xd7\xdc\xea\x09\x49\xb7\xd8\x40\x0b\xaa\x94\x25\x92\x00\x09\xe7\xd3\x84\x93\x8a\x4a\x44\x23\xb2\xa6\xa5\x46\xfa\x21\x19\x7d\x68\xc8\x94\x66\x2d\x48\xe3\x9c\x66\xfd\xc3\x9b\x05\x9d\xb7\xcf\x67\x74\x21\xa5\x81\xac\x1a\x83\x85\x97\x2c\x07\x36\x2b\xc3\x7b\x39\x27\x87\x13\x61\x2b\x1d\xb3\x97\x17\x33\x38\x91\x6e\xc8\xcd\xd0\x96\x4c\x26\x69\x10\xdb\x40\x60\x60\x72\xc4\x1a\x72\x4f\xa5\x01\x7b\x34\x21\x55\x39\x15\x7f\xf2\x22\x9f\x32\xf9\xe3\x2d\xcc\xbe\xd8\xd4\xb6\xca\xd6\xb5\x7d\xfc\x02\x56\x4f\x8a\x4a\x5a\xd6\x75\x8e\xd5\xfe\x4b\x1d\x99\x23\x47\x7a\x94\x19\xbd\x06\x98\x33\xe1\xa0\xbf\xa6\x42\x77\xbd\xc7\xa8\xa0\x3c\x4a\x63\xb1\xa9\xbc\x66\xfc\x19\xe7\x65\x7a\xb5\xe6\x82\xb3\x76\xae\x11\x40\xf9\x26\x62\xe7\x68\xdd\x23\x05\xde\x29\xbd\x05\x4b\x66\x5e\xb2\x5a\x31\x05\x20\x80\x12\xec\xad\x92\x92\xe5\xfc\xa7\x62\xc6\xbc\x92\x2d\x8b\x1b\xa6\x9f\xb4\x1b\xf8\xab\xde\xd0\x50\xca\x42\x36\x76\x9c\x60\x63\x45\x08\x81\x33\x30\x07\x61\x16\x4d\xb5\xa9\x23\xae\x6b\xfd\x59\x60\x02\xf4\x25\xd4\xea\xa0\x83\xb2\x58\x12\x97\xde\x3c\xf7\xd2\x3c\x95\x39\xaa\x1a\x72\x4b\xf7\x7f\x8b\x2e\xaa\x8b\xf5\xab\x97\xaf\x5e\x5d\xdc\x3d\x9b\xc4\xe3\xba\x77\xfd\xcd\xfe\x75\xcf\x76\x2e\x59\xf6\x68\x24\x28\x42\x32\x6a\x47\x9a\xa3\x0c\xd2\x51\x49\xaf\x2c\x57\xeb\x25\xc4\x31\x8d\x6e\xe0\x0f\x72\x12\xf0\xa4\x14\x5b\x87\xba\x06\x2f\xec\xba\xd6\x84\xd5\x49\xe4\x7d\x36\x71\x5d\xbe\x27\x8d\x60\xb8\x11\x2d\xa7\x97\xf6\xfe\xe9\xf7\x3f\xc4\xba\x0e\x9c\x43\xef\xc8\xf3\x1d\x62\x6f\xa7\x2e\x89\x6c\x48\x30\x21\xbc\x90\x3e\x0e\x9b\xdb\xcf\xc2\x46\xee\x24\x7d\xd7\xf1\xde\x2c\xd9\x2f\x07\xec\x74\x02\xa2\x3f\x62\x63\xe0\xc6\xb2\xb2\x38\x90\xf7\xe2\x86\x88\xb5\x7a\xce\x93\xe9\xc7\x01\xe7\xba\x4b\x6f\xc9\xca\x6b\xe9\xa6\x63\xdb\x46\x10\x44\x50\x99\x6d\xaa\x50\xcd\xe4\x32\x95\x19\x96\x79\x43\x58\x32\x9c\x74\xfc\xd2\x13\x4f\x0c\x06\x22\x59\xf6\xdc\x72\x6d\x21\x64\x5a\x86\x2e\xbd\x65\xa2\x32\xcf\x77\xcf\xe4\xcd\x2e\x5f\x1f\x3f\x09\x4a\xc1\x62\xaf\xd6\x0d\x12\xdb\x56\x70\x61\x1f\xb3\x9b\x93\x7b\xc0\xa6\x4f\xcb\x6a\x08\x3f\x03\x0a\x60\x7f\xa0\x09\x6e\x48\x96\x7c\xf2\x95\x3d\x1f\x37\x84\xfd\xb1\x25\x0f\x75\x4b\x7f\x63\x36\x46\x30\x4d\x41\x9b\x88\xa0\xd7\x4e\xa1\x54\xbb\x6e\x79\xca\xc3\x48\xed\x48\xe3\x20\x8a\x45\xf1\xb6\x0b\x5e\xaf\x97\x66\x56\xea\x7a\x73\x02\xe5\xc4\x07\x15\xa9\x8a\x92\x07\xa5\x27\xfe\x40\x40\xf7\x94\x89\x2b\xf8\xd1\x90\x4b\x8f\xdd\x71\x96\xcf\x28\x2c\x46\xf5\xdb\xaa\x4f\xc1\x90\x49\x8b\x0d\xb0\x3a\xdb\x85\xbc\xae\x1f\x1a\x52\x51\x9f\xac\x37\x81\xb3\x32\x3a\xf2\xc1\x02\xe2\x5c\x15\x45\xc6\x12\x8b\x73\x24\xae\x8b\x32\x9a\x74\x0a\xab\x54\x61\xe3\x31\x26\x1b\x0c\x28\xa9\xeb\x25\x4a\x70\x5d\xa3\x84\x3e\x34\x98\x54\x94\xd2\x35\xa4\xb1\x80\x79\xad\xf6\xf6\xf0\x49\x75\xba\x3e\xa9\x24\xfe\xb1\x64\xf4\x88\xd1\x2e\x08\x97\x95\xe1\x34\xa7\x2c\xe2\x31\x71\x8c\xc5\xcd\x19\x51\xb1\x65\x48\x46\x94\xe6\xa2\x75\x90\xe2\x0b\x5d\x7a\x69\xf5\x73\x96\xa4\xb9\x8a\x40\xce\x45\x13\x52\x0a\x8b\xd8\x4b\x2b\xf8\x8b\x72\x8c\x71\x88\x4a\x9a\x88\x12\x0b\x9a\xba\xee\xa8\xfb\x42\x89\xc3\x28\x0e\xd2\xba\xee\x17\x57\xe2\xb0\x0c\x1e\x1a\x92\xd2\x91\x4f\xc4\xe7\x54\x4f\x07\xca\x48\x41\x72\x8c\xdb\xe4\x94\xa2\x39\xf0\x4a\x6e\xa1\x89\xb5\xf3\x87\x1e\xd8\xdd\x2a\xc9\x67\x45\xa0\x54\x0c\x67\x8c\x14\x33\x1a\x03\x9c\x55\x29\x1e\x2e\x11\xc6\x9e\x8a\xf5\x47\xfb\x17\x2f\xf6\xaf\x89\xe3\x60\x92\x56\xef\x59\x32\xbb\x17\x12\x8f\x09\x35\xa5\x43\xd0\x7d\x15\x46\x2c\xea\xbc\xe8\x1a\x4a\x1a\xd2\xe9\xd8\x90\x1f\xbe\x01\x0f\x19\x09\x69\xa2\x4d\x69\xf2\xfd\x58\x8c\xbe\x11\x25\x0a\x44\x04\x50\xca\xf1\x90\xe4\x41\x25\x9d\x6b\x7e\xe0\x58\x34\x0f\x3b\x49\x7b\x11\x60\xd7\x55\x3a\x46\x89\xc1\xa1\x41\xb4\xf3\xe5\x72\xc5\xef\xb7\xb5\xb3\x93\x05\x57\x36\xd8\x6f\x13\xf2\x11\x99\x80\xe7\xe5\x4d\x92\xf5\xf6\x71\x42\x25\x78\x90\x6a\x03\x38\x80\xc0\xcf\x06\x6f\xb0\x49\x93\x71\x8e\xe4\x14\xc0\xcc\x85\x0c\x03\xc2\x2c\x0d\x34\xdf\x49\x7e\x5a\xba\xee\xc8\x17\x14\xa9\xc6\x24\xca\x63\x92\x13\xf1\x07\x9f\xe4\xe3\x31\x3e\x01\x83\x83\xf8\x4c\x19\x02\x75\xe6\xc2\x81\x0f\x54\x2e\x1f\xcd\x48\x1b\xc2\xcb\x74\xf9\x29\xe9\xe2\x38\x01\x12\x7a\x40\x4b\x29\xb7\x00\x8f\x45\x96\xc9\x47\xd6\x93\x5f\x76\x0a\xbd\xba\x8e\xda\x3c\xda\x5a\xd5\x42\x2f\xad\xe8\xfd\x50\x8b\x9b\x52\x22\x8d\xe5\xd7\xb6\x36\x11\xb1\x38\x60\x26\xb7\x7b\x49\x18\xc6\xa4\x6c\x88\xf6\x0b\xec\xfb\xbe\x74\x5a\xcd\xc3\x3d\x3f\x58\x6b\xa2\x60\x00\x9a\x03\x55\x6d\x35\x6f\x8c\xb5\x79\x55\xcc\x04\x49\x3b\xa3\x0f\x63\xcc\x00\x0f\x80\xf2\x28\x8f\x5b\x3b\xb5\x82\x52\x4f\x09\x6b\xc8\x75\xc9\x56\x1b\xad\x6a\x1d\x50\xa3\x58\x61\xf1\xb0\x16\x4a\x70\x54\x9e\xa4\xa7\xc5\x49\x3a\x1e\xe3\x11\x47\x70\x32\x93\x62\x99\x92\x47\xa1\x11\x88\x7b\x36\x5c\x4c\x57\x7c\x5a\x5e\x3f\x82\x1b\xd3\x09\xa9\xa8\x84\xc0\x37\x74\x94\xb7\x3d\x29\x4e\xf3\x93\x62\x3c\xc6\x8a\x1d\xa6\x54\x54\x59\xc4\xa4\x20\x25\x84\x21\xa8\xec\x09\x12\x83\x1e\xa8\xa9\x50\xdc\xf1\x73\x1f\x18\x3b\x89\x14\xae\x51\x4c\x40\x6b\x59\xa7\xb3\xc0\x27\xd5\x7a\x25\xb6\x4a\xc1\xaa\xc1\x64\xab\xb3\x16\x30\xd7\x79\x1e\xc9\x2b\x73\x80\x1b\xd3\x72\xe3\x16\x26\x4a\xa7\x70\xbe\x97\x82\x64\x57\xfa\x82\xee\xca\x8d\xc4\xee\x2b\x73\x76\x28\xe8\x64\xf7\x45\xc2\x99\xc2\x52\x57\xec\x45\x32\x2e\x55\xb1\x41\x2a\xd9\x75\xfa\xfb\xc5\x2c\x32\x7c\xc9\x19\xf3\xb1\x13\x3b\x31\xe5\x1e\x2f\xde\x14\xb7\xac\x7c\x9e\x54\x0c\xe1\x46\xda\x8e\xee\x36\xed\xfd\xad\x84\x24\x15\x59\x93\x8c\x4c\x09\xa4\x30\x25\x2b\xb2\x24\x37\x10\x55\x77\x45\x2e\xa9\x53\xa5\x7f\xfe\x99\x31\x67\xec\x3f\x12\x2c\x55\x34\x96\xdc\xda\x5b\x31\x95\x2d\x8b\x9c\xd3\x35\x43\x98\xbc\x93\x7f\x9e\xc9\x3f\x1f\xe5\x9f\x0f\xc3\x3a\xb5\xd8\xd6\x70\xd7\x45\x73\x80\x34\x9a\x34\xe4\x2d\x7d\x68\xfa\x7b\xb0\xe7\x82\x30\xdf\xd3\xe7\xde\xaa\x58\x91\x9f\xc5\x5f\xb1\x95\xfb\x5d\xff\x78\x41\x9f\xab\x1d\xdf\x4f\x74\xdb\xd2\x99\x10\x8b\xc8\xca\xd3\xfc\xa4\x94\x62\x97\x45\x65\x6c\x87\xe4\x6b\x9e\xbf\xe7\x37\xe4\x35\x75\x20\x49\x2d\x9b\xd5\x15\x78\x15\xb3\x59\x0d\xa7\x45\x75\xb2\xe6\xc5\xbc\x98\xae\x2b\xf8\xb5\xca\x92\xfb\x7a\x5a\xe4\xbc\x2c\xb2\xaa\x9e\xb1\x39\x2b\xeb\x59\x5a\x25\x57\x19\x9b\xd5\x12\xe7\xad\x4e\xab\x65\xb2\xaa\xb3\xa2\x58\xd5\x90\x80\x62\x95\xb1\xba\x58\xb1\xbc\x2e\x59\x32\x2b\xf2\xec\xbe\x56\xdb\xeb\x59\x5d\x4d\x8b\x15\x9b\x39\xe4\x0d\x75\xa2\x8b\x8b\xbb\x83\xc9\xc5\x05\xbf\xb8\x28\x2f\x2e\xf2\x8b\x8b\x79\xec\x90\x57\xd4\x41\x61\x70\x71\x71\x71\xe1\xd5\xd1\xc5\xc5\xed\x5e\x5c\x47\xbf\x5d\x4c\xf6\x2e\x2e\xee\x92\x49\x8c\xc7\x0e\xf9\x93\x3a\x17\x17\x91\x33\x7e\x33\x76\x1e\x21\x67\xfc\x6a\xec\x60\x48\x5b\x01\xd7\xd1\xa3\xdf\xbe\xa9\x47\xff\x8e\x43\x8a\xd5\x9d\x30\xf8\x16\xb5\x25\xfe\x26\xfe\x7e\x1b\xe3\x47\xf8\xdb\xfa\xc2\xe9\x3f\xb8\x70\xc4\x93\x0b\xa7\x56\xe5\xe2\x5a\x95\x72\x71\x11\x3b\xe4\x47\xea\x04\x6d\x85\x17\x17\x08\xa1\xaf\x2f\x1a\xd7\xfd\x27\x08\x47\x17\x17\x71\x5c\x3b\xe3\x3f\xc7\x0e\x7e\x84\x6b\xef\x11\xbe\xb8\x10\x55\x93\xef\xed\xb4\x32\x6f\xc6\xce\xd8\x21\x90\xb4\xe3\x1f\xf6\x7d\xe7\x37\x68\xe3\x18\x0a\xfe\x4d\x15\x1a\x63\x5d\x0b\x7e\x24\xfb\x30\xfe\x46\x7d\xfc\xeb\xc0\xc7\x8f\x88\xfc\xe3\x60\xf2\xc7\xd0\x63\x14\x9d\x8d\xff\x2d\x9a\xf8\x66\xec\x60\xf3\xea\x2f\xbd\xe6\xd5\x67\x0e\x26\xff\xb2\x6f\xfe\x88\xc9\x0f\xfd\xf2\x5e\x8d\x9d\x6f\x1c\x4c\xfe\x46\x1f\x5e\xbf\x08\x3a\xcf\xfe\xa2\x46\xd7\xc1\xe4\xf9\x9b\x67\xe7\xe7\xdd\xa7\x17\x17\x5e\xfb\xfc\xc3\xb3\x1f\xba\x4f\xe5\xa3\x3a\x7a\x14\x8b\xc7\xcf\x3e\x7c\x78\x1f\xf4\xea\xfd\x13\x93\x9f\xcf\x5f\xfe\xe3\xc5\xbb\xfe\x83\x1f\x31\x79\xfe\xe3\xeb\x37\xbd\xc6\x04\x08\x08\x17\x36\x25\xb5\xd8\x76\xd4\x39\x5f\x88\xff\xf7\xc4\x05\xde\x43\x53\xb1\x7f\xaf\x8b\xf9\x1e\x98\x0b\x25\x45\xa8\xd1\x62\x37\x2c\xaf\x8b\xd9\xac\x46\x28\x1a\xef\xc5\x35\x46\x17\x17\xb3\x47\x38\xaf\x5b\xa2\x54\x0f\xd4\xf5\xc5\xc5\x6c\x8c\x6b\x6c\xa8\x0d\x66\xdf\x49\x1d\x4c\x84\xaa\xde\xeb\xa9\x20\xf6\xd7\x63\x07\x7f\xa3\x5e\xc9\x19\x9b\x55\xcf\x8b\x9c\xb3\x3b\xde\xef\x9b\x28\x4e\xce\x5d\xd0\xb6\x8a\xfd\x51\x5f\xf3\x3a\x93\x3d\x6a\x3b\xd8\xed\x03\x0a\x83\xbd\x8b\x8b\x19\x0e\xa1\xe9\x56\xc3\x50\x48\xa3\xdf\xf6\xe2\xfa\x1b\xd5\xc4\x86\x7c\x43\xf7\x7f\xfc\xf0\xf6\xcd\x37\xfb\x29\xf9\x3b\xdd\x17\x0d\x4c\xf3\xd5\x9a\x2b\xbe\x52\x8b\x76\x25\x25\x4b\xea\xab\x35\xe7\x45\x8e\xc5\x7b\xff\xa4\xfb\xbf\x2d\x2e\x66\xe2\xe7\x7f\xd1\xfd\xdf\xa2\xdf\x1e\xe2\xf1\xc5\xc3\x45\xf5\xe8\x22\xca\x13\x9e\xde\xb0\xdd\x8b\xdb\x7d\xf2\x57\x59\xda\x5f\x50\x24\x18\xc1\x18\xd7\xe8\xe2\x76\x8c\xeb\x0b\x4f\xdf\xc0\xdf\xec\x13\xc6\xe8\x7e\x34\xfe\x77\xbc\x4f\x38\xeb\xd0\x1a\x2c\xae\xe8\xe2\x62\x96\xec\xcd\xe3\x07\x9f\x1c\x37\xd0\x8b\xb0\x96\x5d\xc4\xb5\x07\x3d\x10\x6b\xa2\xdc\xe6\xc9\xeb\x4c\xee\x9c\x31\xdf\x03\x40\x70\xa3\x04\x8c\x68\x5e\xd7\x65\xc8\x83\xfc\x74\x12\x0e\x60\xa7\xa3\x7c\x2c\x11\xc4\x83\xc1\x87\x67\x67\xfe\xa4\x06\xb4\x71\xe2\x4f\x0e\x0e\xdd\xbc\x96\xe0\xe2\x0d\xc9\x19\xdd\x47\x91\xe0\x76\x77\xfe\xfc\xe2\xee\xbb\x79\x5c\xff\xb6\x17\x5e\xcc\x70\xfd\xdb\xde\x37\x8a\x0f\xaa\x27\x7b\x17\xeb\x57\xaf\x5e\xbd\x12\xc3\xb0\x7f\x4d\x52\x36\x2c\x80\x78\xe8\x5c\x4c\xe0\x74\x20\x74\xfe\xaf\xff\xf3\xff\x70\x02\x66\x52\x30\xed\xf9\x78\xec\x5c\x5c\x38\x63\x06\x47\xb4\xa2\x69\xcf\xb8\xf1\x77\xd9\xf3\xb1\x31\x0c\x22\xff\x18\x8f\x9d\x5d\x27\x90\xaf\x37\xa4\x60\xf6\x86\x74\x21\x76\xb6\x09\xa3\x97\x6c\xc0\x1b\x00\x02\xe9\x99\xa7\x05\x86\xeb\x3a\xf3\x94\x65\x33\x19\xe5\x4d\xa5\x81\xf0\xa7\x64\xc9\x7a\x42\x9d\x3c\xcc\xd2\x32\x70\x5a\x9b\x99\x03\xa6\xef\xc0\xc9\xd8\x35\xcb\x67\x8e\x32\x5a\x6b\x3c\xa6\xe7\xf4\x85\xd4\x34\x6f\x3d\x58\x95\xe2\x8b\x0a\x93\xee\xd5\xf3\xc8\xbe\xd6\x56\x99\xd6\x44\x29\x8d\xdd\xef\x18\x7e\xf8\x9d\x3e\x40\xb9\xc1\xf3\xe1\x74\x54\x3f\xab\x6a\x19\x51\xd5\x72\x8c\x9b\xad\x7a\x2d\xb3\xd4\xda\x13\x16\x95\x4a\x87\x1d\x8f\xe3\x13\x7c\x62\x14\xd8\x72\xcf\x6f\x2c\x5f\x9e\x8a\xa9\x94\x92\xda\x57\x83\x54\x4a\x83\x59\x09\xcd\x45\x3a\xb5\x17\xb7\x39\x2b\x5f\xb4\x7a\x0a\x0f\xb9\xe9\x4e\xf0\x54\x7a\x1d\x82\xe3\xba\x51\xee\x47\x96\x01\x51\x6c\xfb\xc4\x96\xe6\xa5\xeb\x3e\x95\x7f\x7c\xb8\x34\xf9\x9a\xa4\x1b\x94\xeb\x22\x24\x0a\xee\x54\x56\xd7\x3c\xb8\x15\x7a\xf2\xcc\x75\x17\x88\x63\xc2\xc5\x6e\x63\x46\x96\x32\x03\xbb\xaf\xca\x45\x73\xfa\x57\xc8\xd2\x2c\x74\x61\xa1\x90\x14\x74\x1e\xf9\x31\xbc\xf3\x94\x8a\xba\xc0\x3c\x8f\x32\x0a\xb6\x55\x65\xa4\xfd\xfe\xfe\xf5\x0c\x15\x6d\x9e\x78\x68\x48\xe6\xa5\x33\x4a\x69\xd1\xe6\xcf\x02\xd5\x37\xc3\x24\x37\x87\xbd\xd7\x60\xc5\xb8\x1e\x28\xca\x75\xaf\x10\x27\x19\x76\xdd\xcf\x95\x03\x09\xe4\xa3\x83\x58\x3f\xd7\x24\x96\x13\xbb\x89\xd5\xf7\xf7\x1f\x92\x6b\x41\xb8\x12\x86\x52\xb4\x10\x3a\x77\x18\x63\xd7\x2d\xbb\x6f\x3e\xcf\x92\xaa\xfa\x09\x52\x04\xf1\x2d\x4f\x3e\x5b\x9b\x79\x53\xf4\x86\xe4\x0d\x9c\x6a\xfd\x51\x25\xae\x3b\xfa\x18\x31\xb1\x3a\x63\xb1\x49\xbf\xa9\xeb\xd1\x8d\x8c\xb0\x91\xdb\x76\x98\x88\xd6\x12\x0c\x3b\xd8\xe1\x35\x27\x67\xee\x9e\x32\x41\x5d\x44\x6c\x5d\x5f\xba\xee\x2f\xa6\x2c\x20\x68\x34\xa5\x3d\x23\xb8\x93\xce\x1c\x8c\xc3\x29\x9d\x9a\xbd\x69\xce\x48\xca\x00\x54\xbb\xff\x22\x99\xd2\x4b\x4c\x2a\x8a\x56\x34\x11\x65\x6a\x8d\xb5\xda\xdb\x3b\xc1\x2b\x70\x0b\xfa\x8b\x33\x9e\x8a\xde\x8c\xaf\x18\x12\x77\xf0\xce\x3d\x5d\x29\x88\x76\x02\xe9\xca\x18\xd3\x6d\x72\xdd\x7b\x86\xb8\x65\x58\xc7\x75\xcd\x9b\xd6\x69\xde\x1a\xcd\x6b\x0f\xac\xc1\x32\x7c\xae\x28\x9f\x65\x19\xba\x87\x71\x94\x8b\xfe\x0e\x3f\x7c\x94\x47\x47\x8d\x3a\xcc\x7c\x98\x52\x4a\x2f\xc5\x84\x49\x63\x7d\xaf\xc7\x8d\xf1\xa8\x5b\x23\x66\x7a\xfe\x0f\xe2\x7c\xe3\x3b\x58\xad\xdb\x76\x31\x8b\x2d\x82\x02\xdb\x6b\x37\xe4\x5d\x4f\x6d\xcb\xae\x2a\x5d\x92\xc4\x20\xe0\xb3\xdc\x9b\x26\xd3\x85\x82\xc8\x32\x48\xc0\x3c\x62\x5e\xb5\x48\xe7\x1c\x61\x40\x8f\x85\xe9\xa7\xa9\xc5\x3e\x32\x66\x3b\x64\x45\x97\x31\x1d\x4d\x08\x6b\x9f\x4f\x59\x6b\x19\x9d\xf5\x8f\x48\x0c\x87\xd6\x27\x83\xd2\x29\x8f\x21\x8e\x2d\x26\xa9\x8d\x31\x66\xc4\xec\x99\x80\x90\x9b\xe1\x03\x0f\x60\x16\x62\x3f\x6b\x35\x77\xce\x36\x99\xa6\xda\x14\xd6\x0e\x26\x29\xd5\xf0\xae\x27\xa9\x20\x95\xdc\x4b\x38\x2f\x7f\x4c\xf2\x59\xc6\xa2\x32\x4a\xe3\xd8\xf6\x2f\x5d\xb0\x8e\x11\xc4\x75\x21\x6c\xc9\x75\x7d\x23\x70\x3e\xc0\x41\xb9\xb4\xce\xb4\xd7\x3a\x3f\x18\x24\x8a\xdb\xe3\xf6\x15\xb0\xd2\x0e\x3b\x2a\x61\x6b\x7f\x52\x52\xe9\xc2\x73\x9e\x5e\x65\x69\x7e\x0d\x9e\x9f\xa5\xb5\xe3\xda\xf3\x8d\xa5\x22\xf4\x83\x3d\xbf\x6d\xe5\x8c\x7d\x32\x21\x83\x03\x1a\x94\x43\xb7\xaf\x57\x31\xc4\x70\xd2\x41\x29\xb3\x86\x72\xb5\xad\x5c\x35\x1c\x5b\x4a\x53\xcd\x44\x6d\xbd\x65\x5d\x3b\x52\x61\x83\xab\x6d\xf5\x2d\x3f\xd3\x8f\x79\x51\x2e\x9d\x34\x87\x33\x67\x9b\x3e\x94\x71\x4c\x2b\x06\xa1\x93\x25\x57\x2c\x93\x6f\x5a\xbf\xad\x6f\x3a\x05\x98\x0f\x45\x73\x02\xde\xbf\x4c\xab\x17\xd6\x8d\xba\xb6\xef\x8c\x28\x1d\x31\xd7\x4d\x04\x3d\x0f\x7d\x6d\xd5\x2e\xfa\x6c\x3f\xb3\xfa\x7d\x63\xf7\x3b\x63\x68\xb3\xeb\xbb\x9c\x8e\x39\xb1\x1f\xc1\x99\xbf\xa6\xf1\x14\x22\x25\xa3\x98\x68\xda\x26\x1c\x93\xc4\x24\x8a\x3e\x49\x04\xa5\x97\x51\x4a\x8b\x28\x89\x05\x73\x17\x84\x4e\x47\x28\x17\x7f\xc4\x6f\x0c\x28\x38\x56\x94\x4d\x67\xcd\x6b\x44\xbe\x91\x20\xfa\x21\xc1\xe5\xba\xac\x31\xb6\xd5\x92\x56\xcc\x53\x66\x22\x0a\xe1\x7a\x15\xf3\xd2\xea\x9f\x6f\xdf\x0c\xf8\x51\x32\x70\xb6\xad\x56\xc9\x94\xfd\xe3\xfd\x6b\x52\x52\xc4\xfa\xda\x01\xc3\xc6\x7e\xa2\x2a\xd6\x36\xdb\x6f\x24\xf7\xe6\x00\x92\x5c\x1a\x6a\xac\x6b\x47\x6c\x21\xc4\x6e\x62\x01\x6d\x61\x5c\x97\x36\x60\xd9\x49\x49\x42\x59\xb8\x59\x6b\x70\x6b\x0c\x61\x52\x37\x79\x0a\x9e\x6d\xed\x1a\x4f\xfa\xcd\x0a\xd1\x8a\xa2\x19\x4d\x36\xda\x4b\x96\x74\x54\xa0\x19\x26\xb7\xb2\x24\x94\xd2\x99\xa7\x72\x5d\xff\x92\xb2\x5b\xec\xba\xa9\xc7\x8b\xd5\x88\x52\xa1\x22\xa5\x5e\x32\x9b\xbd\xbc\x61\x32\xdc\x99\xe5\xac\x0c\x37\x6f\x21\x67\x9d\x67\x45\x32\x73\x48\xc1\xc8\xc8\xc7\x41\x2a\x18\x59\x32\x5d\xc0\x5b\xa2\x40\xeb\x12\x39\x45\xde\xbe\x8e\x31\x29\x81\xeb\x81\x10\xaa\xe8\x74\x48\xd9\xde\x65\xde\x54\xeb\x09\xd4\x49\x1d\x32\x62\x3d\x69\x6d\x1e\x3b\xb8\x11\x25\x0e\x11\xc6\xd6\xb2\xed\x03\x6d\x2d\x34\x9e\x17\x4b\x29\x34\x1c\x8c\x55\x75\x9b\x2a\x92\xf3\xc8\xd1\xb2\x7e\xb3\x56\xa3\xd9\xd0\xff\x92\xa4\x31\xdb\xa6\x23\xc9\x2f\x85\x4a\xb7\xa5\x89\xab\x4e\x13\x19\x16\xaa\xde\x25\x19\xf5\x0a\x94\xe4\x36\x74\x17\x5d\xf6\x9b\x29\x2a\x0b\x51\xee\xcd\xd3\x8c\xb3\xd2\x7b\xfd\x62\x70\x39\x68\xf9\xcf\x19\x29\xdb\x43\xda\xc1\x31\xdc\x54\x9e\x04\x1b\x6c\x1a\x92\x43\xba\x81\x6e\x0d\x7d\x98\xcd\xbe\x92\xec\xba\xcb\x96\xaf\xf7\x94\xde\xb6\x1d\x65\x18\x95\x71\x10\xc5\x4d\x83\x83\xff\x40\x57\x64\x7d\x5d\xe6\x62\xba\x24\x79\xfb\xe6\x3d\xd9\x55\xd3\x22\xb1\xf2\xa5\x83\xf4\x7f\xa2\xf3\xd2\xcc\x3b\x38\x04\x62\xcb\x01\xc5\xa0\x92\x16\x5b\x5a\x85\xed\xd6\x68\x4d\x3c\x2a\xa4\xb3\x78\x4a\xf9\x00\x9d\x30\x0c\x9b\xb9\x82\xa6\x6a\x1f\xf7\xdf\xab\x41\xe9\x90\x30\x35\x7a\x0c\x3e\x3c\xfb\x81\x0e\xaf\xcb\x4f\xe5\x44\xee\x8d\x8f\xf5\xd1\xd6\x5d\x4b\x00\xfb\x87\x90\x6f\x6a\xc6\x26\xd1\x69\x7f\x4f\xab\xcf\xc9\xcc\x41\xca\xd6\xc2\xc1\xa3\xee\x91\xf4\x01\x7d\x50\x9a\x52\x01\xc7\x37\x27\xd8\x07\xb7\xf0\x96\x27\xe7\x7d\x27\xfc\x5c\xeb\xd6\x85\xa1\x0c\x30\x07\xf6\xc7\xc5\xda\x57\x7d\x19\xd9\x74\xbf\x59\xb6\x49\xee\xb7\x6c\xb5\x18\x6e\xc8\xbd\xe8\xed\x8d\xf8\x47\x6e\xb8\x5a\x2e\xd5\x1f\x37\xd8\x6f\xf5\x18\xd3\x26\x47\xca\x73\x56\x0a\x49\x47\x9d\xd3\x64\x37\x9d\xd1\x6f\x9d\xf1\xe5\xd8\xf9\xf6\xec\x74\x3f\x39\x3b\x95\x06\xb3\xf6\xf6\xde\x45\x79\x71\xf1\xed\xee\xb2\x4a\xb2\xac\xb8\x9d\x26\x2b\xbe\x2e\x19\xfd\xf6\xdb\xb3\xd3\x62\xa5\xcc\x04\xd2\x72\x0f\xf7\xf6\xe5\xcd\xb3\xd3\x7d\x79\xfb\xcc\x21\x6c\x73\x76\x9d\xa8\x5b\xdc\x6f\xf4\xdb\x6f\x63\xc3\x9f\x5d\xf7\x46\x65\xf3\x8e\x1e\xfd\xf6\x4d\x4c\x5b\x23\xfa\xb7\xf5\x85\x73\x01\xb6\xd7\xc1\x42\x75\x4b\xda\xa2\xea\x5a\x17\xd5\x9a\xeb\xc3\x00\x96\x41\x2d\x0d\x98\xdb\xca\x4a\x67\xff\xa6\xb2\xff\x43\xa5\xfd\x9b\x6e\xf9\x2e\x50\xe7\x19\x03\xdf\xb4\x8f\x06\xbf\x4c\xfe\x02\xd5\x8d\x1f\x0d\x7c\xea\xfd\xc5\x1b\x47\xe3\x7f\xc7\x20\x31\x7b\xd3\xcb\x7a\xf3\xb9\x28\xd9\x9c\x7e\xfb\xed\xae\xd1\x19\xbf\xd5\xbf\xba\x13\x3c\xf8\x5c\xce\xde\xbe\x35\x7d\x3b\x5b\x36\x68\x52\x47\xc7\x3b\xfd\x2d\xb6\x50\xcf\x1d\xe2\x98\xe4\x3b\x5d\x91\xcd\x71\xef\x75\x99\x01\xd7\x79\xb1\x6d\x1a\xc4\x73\x3a\x1b\xa2\x0d\xf8\x52\xda\x96\xcd\x79\x8b\x83\xc9\x01\xc8\x83\x81\x89\x61\x39\x74\x72\xa0\x24\xf3\x88\x38\x81\x1e\x0b\x07\x93\x8d\x75\x63\x46\x6c\x34\xd9\x5e\x4d\x5b\xc0\x97\xd6\x33\x54\xcc\x23\x12\xdc\x39\x98\xe8\x2f\x89\xf7\x28\x70\x00\xe6\x1e\x95\x1e\xe4\x66\x60\x95\x7e\x5f\x33\x83\x6b\xba\xd2\x8f\xea\x7a\xe5\xdd\xb2\xab\x8f\x29\x7f\xdb\x7d\x57\x3c\x58\x16\x7f\x0e\xdc\x2d\x86\xde\xac\x7a\x37\x05\x77\xe9\x6b\x3d\x62\x54\xa6\x45\x9e\xc3\xc2\x83\xf7\xe9\xb5\x0e\x3b\x84\x03\x9a\xf6\x2a\xaa\x46\x62\x9d\x43\xcf\xee\x55\xcf\x46\xd4\x21\x3f\x0a\xaa\xbe\xa1\x37\x66\xc0\x2c\x03\xfa\x8d\xb2\xbb\xd4\x42\xb7\xbb\xa7\xf7\x43\xef\xdc\xdb\xef\x70\x3d\x1e\x2b\x70\xae\x4e\x4a\xa6\x75\xf3\x9f\x8b\x2a\x15\xcd\xc6\xe4\x8a\xf2\xba\xb6\x5e\xcb\x79\x92\xe6\x15\x0e\x87\x1c\x18\x9e\x76\x76\xec\x21\xeb\xeb\xe8\x81\xd8\xd9\xf3\xae\xad\x61\xc7\x3a\x7a\xcd\xeb\x7a\x84\x46\xb9\x34\x73\xe6\xa6\x20\x71\xb7\x34\x55\x87\xed\x4f\x94\xe3\x80\x6d\x6b\xba\xeb\xfa\xc7\xee\xd6\xa7\xe0\x73\xd4\x97\x97\xe9\x1c\x49\xcf\xd2\x13\x4e\xed\x36\x82\xbe\xc0\x2d\x5d\x60\x34\xd9\x31\xe6\x14\xf2\x81\xf2\x70\xa3\x1c\x66\x1f\xe3\xce\xc5\x2a\x98\x28\x04\xb6\xd1\xd6\x36\xed\x8d\xf8\xb6\x47\x46\xd4\xd6\x35\xf2\x5d\x94\x0f\x6e\xe1\x64\x9c\x65\xdf\xee\x8b\xc3\xed\x83\xc0\x71\xe0\xe3\xba\x1e\x49\xdf\xb6\x17\x4c\x6c\x66\xd8\x4c\xfa\x00\x0d\x7f\x01\xb5\xe4\xa1\xe8\xde\xac\xae\x7b\x8d\xa0\x94\xde\xba\xee\x15\xba\x25\x0c\x87\x7b\x7e\xc0\xe5\x5b\x7c\xdb\x5b\x1c\x87\x7e\x30\x0d\x7f\x42\x53\xc2\xf0\x9e\xf8\xc3\x71\x30\x09\x8e\xdc\x5c\x7c\xed\x0f\xcd\xcf\xb6\x71\x2d\x8d\x13\x4a\x3b\x6d\xa0\xf0\x58\x97\x09\x24\xb3\xa8\xa8\x8a\x32\x18\xa5\x75\x3d\x32\x76\x65\xe8\x91\x69\x74\xe8\x07\xa9\xb8\x28\x86\x1a\x08\xc1\x39\xb6\x4d\x5a\x59\xb0\x76\x94\x17\x12\x58\x99\x6c\xea\x49\xbc\x75\x2e\xed\x7f\xa5\x7e\x89\x6f\xbc\x54\xf5\x5f\x3a\x49\xa2\x3c\xa6\x94\x56\x51\x1e\x9f\xe0\x7c\x3c\x36\x44\x10\x2e\x18\x12\x0f\x89\x78\x84\x03\xf5\xde\xad\x68\x70\xa5\x7f\xfb\xc1\xa4\x21\x33\x1c\xcc\x1a\x52\x31\xcd\xec\x86\x0f\x9d\xe0\xec\x02\x22\x0a\x65\x58\x21\xb6\x3f\x31\xac\x73\x63\x2a\x86\x48\x50\x9f\x30\xc0\xe6\xaf\x57\x82\xeb\x2e\xc1\xfa\xcd\x8d\xf5\xfb\xbe\xae\x47\xf7\xca\xbe\x20\x9d\xd6\x2c\x7b\x38\xc7\x18\xf3\xf2\x5e\x9d\xeb\x19\xce\xc8\x65\xf4\x66\x5d\x0f\x70\x53\x41\x90\x9a\xe5\xa8\xd3\x91\xf6\x86\x61\x27\xc6\x2e\x68\x19\x47\x3f\xca\x04\x59\x4d\x3b\x22\x9c\xcc\xe4\x70\x44\x2c\xc6\x06\xfe\x17\x46\x46\xb3\x9f\xc1\xd1\xfc\xcc\xa8\x5c\x29\x4f\xed\x8a\x81\x75\xa0\x57\xc4\xa7\x3f\xde\x31\x11\x2e\xad\x35\xb5\xe7\x5d\xa3\xdc\x27\xdf\xca\xd1\xb2\xdf\x24\xbd\x37\x71\x98\xc2\x89\xd5\x68\xa9\x77\x0f\x3b\xfd\x1d\x4a\x11\x16\x81\x6d\xc4\xa8\xeb\xd1\x32\xec\x6d\x89\x39\x0e\x50\x31\xb0\xa9\x94\x13\x5a\x78\x90\x07\x69\x9e\xb2\x59\xa8\xa0\x1d\x02\x30\x25\x8b\xfe\xb3\x6a\x9a\xac\xd8\x40\x98\x41\xcf\x77\x4e\x9e\x4f\xc8\x4f\xca\xb2\x43\x89\x9b\xbe\x95\xce\xf9\x7d\xce\x93\xbb\x5d\x78\x93\xec\xae\xf3\x92\x4d\x8b\xeb\x3c\xfd\x93\xcd\x76\xd9\xdd\xaa\x64\x55\x95\x16\x79\xb0\xeb\x8c\x55\x91\xeb\x3c\xfd\x63\xcd\xce\x8b\x72\xc8\x6e\x65\x6d\x9d\x60\xd5\xcf\xe9\xa8\xf4\x66\x8c\xb3\x29\x7f\xb1\x5e\x65\xe9\x34\xe1\xac\x22\x53\xaa\x18\xe8\x39\x17\x7a\x0a\x58\xa6\xe5\xa1\xad\x50\x58\xc4\x03\xf4\x01\x93\xb9\x0e\x4a\xa6\x0c\x32\x9d\x9d\x60\x90\x28\x51\x11\x83\xb1\x4a\xed\xaa\x0a\xac\x16\x3f\x18\xce\x99\xf2\x32\x06\x23\x22\xf1\x0d\x7d\x4e\x65\x00\x30\x6b\x48\x4a\x2b\x18\xfc\x0f\xec\x6e\xa8\x03\x25\x75\x1c\xe0\x8c\x85\x25\x98\xdb\x5d\xb6\xd8\xda\x15\x75\xfd\x54\xfe\xf1\xe1\x52\x86\xd4\x6d\x38\x17\x42\xe8\x05\x38\x2d\xe4\x2d\xf0\x82\x7d\x13\x9a\xcd\x28\xf3\xc0\x41\x01\x14\xc1\x13\x76\xc2\x14\x86\x87\x32\xb8\xe3\x72\x0c\x5e\xa9\xe6\x08\xf0\x50\x56\x7d\x64\xb3\x53\xd9\x52\xc0\x7a\x6c\x8c\x63\x1d\x8c\x9b\xdc\xbc\x43\x19\x6d\x4a\xb8\xb2\x21\x28\x97\x36\x48\xc9\x68\x2a\xfa\x60\x9d\xc2\x04\x8f\x27\x44\xea\xe3\x3f\x57\x6c\x3d\x2b\x82\x8c\xc9\x94\x5d\xc1\xdf\x48\xbb\x3c\x82\x07\x88\xba\x9b\x89\xbf\x25\xcb\xc0\xa5\x21\x78\x70\xce\x9c\x60\xf3\x64\x5b\xfa\xbd\x8f\x26\x0d\x71\x76\x07\x9e\x37\xc4\x19\x9b\xdb\x25\xbb\x49\x8b\x75\xa5\xba\xdf\xf9\xf6\xdf\xdb\x5e\x6a\x1a\xb2\x2a\xd9\x2b\xb0\xfb\x04\x0f\xe0\x1a\x33\x64\x9b\x8a\xfc\x18\xf0\x43\x7a\x36\x20\xc2\xa2\xc3\x98\x22\xf1\x6f\x5d\xb3\xe8\x08\xfe\x7d\x1c\xd7\xb5\xbd\xa6\xd4\xab\x62\x6f\x06\x44\x78\x20\x93\x30\x1e\xc6\xd4\x11\x4b\x23\x3a\x8c\xe1\x3c\x8b\xb4\xee\x07\x47\xb8\x51\x5e\x37\x9f\x6c\x4b\x87\xc7\x10\x27\xe7\x0b\x59\x81\x1f\x9b\x92\x0e\x71\xa8\x5a\xa7\x57\x34\x62\xd1\x24\x16\x0d\x3f\x8a\xe9\x18\x89\x3f\xa1\x68\xb2\xf8\x79\x1c\xd7\xb5\x8f\x83\x83\x47\xc8\x61\x37\x4c\x86\x62\xc2\xb7\x4e\x31\x9b\xe9\x2b\xc8\xff\xf8\x58\x7e\xfb\x5d\x3c\x66\xd1\x93\x8d\x17\x02\xf1\xc7\x75\xfb\x35\x36\xda\xc5\x68\x68\xe9\x8c\x44\xf5\xae\x2b\x46\x47\xd3\xda\xdf\x3c\x18\x03\x75\xa2\x29\xca\x08\xc5\x4a\x0c\xa0\x43\xa1\x78\x93\x76\x87\x3c\x28\x5d\xf7\x5f\xf2\xf5\x12\x82\xe5\x69\x82\x4a\xc8\x05\xa9\x52\x59\xe9\x44\xef\x0e\x76\xcc\xc9\xc2\x1e\xc7\x7b\xfa\x37\x86\x89\x99\x88\x72\x27\xed\x18\x72\xd1\xe3\x83\x58\x07\x97\xc1\x1d\x7b\xb6\x0e\x31\x6e\x04\x41\x4b\x12\xfa\xf0\xec\x87\x81\x08\x8b\xbe\xf1\x70\xf0\x80\x49\x19\x85\xc2\x8d\x00\x8a\xd1\x64\x38\x7b\xa8\x39\x21\x10\x6c\x70\xf8\xec\x4a\x19\x11\xa5\xcb\xd8\x66\xbb\xce\xd5\xf9\xb8\x89\xf3\x80\xf4\x60\xb6\xa3\x10\xfa\xcd\x78\xb6\xb1\xb1\x23\xbd\x83\xea\x6f\x30\x18\xee\xce\x11\x1b\x44\x90\x92\x73\x30\xc0\xd7\xa6\xad\x85\xc9\xba\xb0\x53\x96\xf5\xc2\xca\x06\x6d\xf4\x0e\x86\x05\xd6\xe0\x86\xf4\x16\x6c\xc7\xd7\xda\xdc\x36\x68\x87\x4a\x11\x40\xb9\x15\x2e\x24\x3d\xb2\xd3\x50\xec\xf8\xc4\x60\x05\x23\x31\x06\xe9\x58\x30\x73\x47\xde\x0a\x85\x02\x5a\x06\xfa\x8d\x30\x1d\xc1\xe5\x6f\xea\xb2\x74\xdd\x09\x00\x37\x69\xf2\x2a\x71\xe0\x3c\x6a\x1f\xda\x0f\xce\xf6\xfc\xc0\xf9\xc6\x7e\x26\xa9\xa8\x25\x41\x59\xd5\xbf\xd5\x2b\x48\xb0\x88\xd4\x10\xcf\xf7\x82\x0b\x82\xbf\x11\xee\x17\x5a\xcb\x2f\x40\xbe\xc1\x01\x65\x6a\x08\x54\x97\x3d\xf6\xa1\xf4\xb1\xb3\xe7\x00\xc9\xf6\x59\x0c\xe9\x21\xa0\x00\x47\x81\x49\x69\x49\x9d\x24\xd4\xc9\x92\x8a\xdb\xf7\xf7\x8e\x30\xa9\xa8\xa3\xbc\xfd\xa0\x19\x7a\x74\x85\x94\xcb\xd5\xf8\x0c\xa4\xc9\x1d\x8d\xec\x3d\x84\x45\xe4\xa2\x25\x6b\xd9\x8e\x8e\x6f\x32\x2d\x46\x94\x26\xa1\x63\x89\x39\x67\x80\xf3\xdf\x74\x37\x23\xf7\xb4\x92\x61\x0e\x43\x2b\x84\x5c\xd3\xd1\xda\x75\x47\x15\xb9\xa2\x23\x5f\xc8\xeb\x1b\x10\xcb\x85\xd2\x21\x96\x27\xf2\xc7\x82\xf2\x93\x05\x5d\x44\x4b\x69\xd2\xae\xc2\xc5\xf6\x25\x77\x1f\x88\x8e\x2f\xfa\x6a\xf0\xc8\xdf\x59\xd1\x25\x75\x8a\x3c\x83\x28\x3e\xe6\xba\xa3\x95\xeb\x76\x7a\xd3\x98\x25\x9f\xce\xd1\x8a\x46\x49\x78\x63\x49\xf9\xe0\xc6\x13\xa3\x0f\xbf\x63\x92\xb8\xee\xb5\x6c\xdc\x15\x45\x33\x8a\x32\x8a\xa6\x14\xcd\x29\x5a\xd0\x1b\x1c\x5d\xc6\x75\x8d\x16\xd1\x65\x4c\x1f\x1a\x8c\xa3\x85\x52\xbf\x5e\xbf\x10\xf7\xe7\xf6\xb5\x7c\x81\xc5\x80\xe3\x29\xf8\x1f\xf8\xb7\x64\x91\x1f\x63\xf1\xe7\x20\x26\x0b\xa1\x17\xdf\x58\x2e\x62\xd1\x2c\x3e\x59\xd0\xf1\x58\xa8\xcb\xae\x2b\x46\xa5\xae\xd1\x15\x9d\xd1\x09\xae\xeb\x95\x84\x7e\x81\x71\xea\x0e\x84\xeb\x8e\xc7\x57\xae\xbb\x90\x80\x6f\xd3\x88\xc5\x34\x7a\x49\x66\xe4\x2a\xd6\xa8\x09\xb6\xbf\x92\x28\xcf\xee\x14\xff\x0f\x75\x8a\xc0\x01\xfb\x95\x34\x3f\xa0\xcf\x75\x43\x48\x85\x4f\x4c\xf7\x08\xa6\x7b\xd4\x99\xee\xba\x1e\x8d\xc7\x57\x75\x0d\xbd\x90\xcd\x5f\xfc\x37\x9a\x2e\xc6\xe6\x2a\xc6\x64\x31\x12\xc3\x85\x4f\xf0\x89\x52\xda\xaf\xf6\x68\x8a\xa5\x11\xe7\xea\x7f\xe4\x94\x4e\x5c\xf7\x6a\x3f\x3f\xa3\x93\xa6\x19\x90\xb2\xed\xf1\x04\xa8\xbe\xa0\x99\x55\x30\x32\x00\xc2\x2b\x95\x9f\x2a\xea\xf5\xcb\xd6\x19\x9c\x75\xae\x0e\xc0\xd9\x6c\x57\x16\x20\xd5\x7a\xbd\xce\xd3\xe8\x32\x0e\x85\xa2\x18\xa4\x2d\xb8\x3c\x2a\x69\xc4\x08\x23\x8e\x43\x78\x4c\xec\xba\x7a\x6e\xfe\xa8\xef\x6e\x15\xda\x9e\x01\xac\x13\xa9\x22\x36\x5d\xd0\xa5\x0d\x7f\x00\x16\xe5\xf4\x27\xc4\x48\x11\x25\x31\x8e\xe9\x08\x95\x62\x7f\x0e\x57\x0d\xde\x92\x44\x82\x4c\x48\x29\x9e\xa6\x42\x0f\x94\x03\x13\x3c\xe4\x05\x0f\xb2\xae\x39\x51\x83\x24\x11\x15\x8d\x5e\x6d\x7a\x36\xb5\x12\x45\x8c\x45\xb7\x03\x82\x9d\xa5\x6d\x27\x0a\x92\xd0\x5c\xdb\x01\x52\x12\xc5\x80\xef\xde\xf1\xf8\x42\x05\x4d\xa2\x2a\x96\x1a\x49\x25\x7a\xc3\xc5\x9f\x02\x77\xfb\x42\x00\x3b\x57\xcb\x5d\x50\x5d\x88\xe0\x9e\x50\x72\x41\x4a\x4c\xe0\x26\x5c\x8e\x4a\x49\xcf\x4d\x83\xc9\x22\xa9\xfa\x5d\xdc\xea\xa6\xa2\xfc\x2d\xad\x8d\x79\x83\x89\xde\x97\x6f\x29\x85\x6d\x68\x3c\x64\xb3\x60\xc4\xed\x3d\x0d\x64\xdc\xc6\xad\x5c\x63\x42\xae\x89\xaa\xb2\x24\xbf\xde\x52\xcd\x0f\x4a\x39\x04\x7d\x60\x1b\xbd\xc2\xf7\x40\xad\x64\xb3\x59\x3d\x59\xb0\xe1\x14\xb4\x33\x2b\x00\x97\x92\x2e\x43\xee\x41\x49\x7d\x27\xbf\xbb\x65\x16\x88\x07\xa2\x01\xfd\x67\xf2\xbe\xe2\xfe\xa8\xa4\x65\x8f\xce\xa5\x03\xce\x04\x0e\xfd\x4c\xbf\x41\x3e\x37\xb7\x8b\x34\x63\x08\x75\x8d\xa3\xb8\xef\x99\x85\x5b\xdb\x68\x83\x09\x4f\xca\x4e\x2c\xb6\x31\x16\x33\x2f\x2b\xa6\x89\xb4\xd4\xb6\xbf\xc5\x2a\x5c\x74\xce\x9d\x35\xd4\x14\xd4\x91\xce\x1a\x52\x16\xc5\x60\x6c\x37\xa3\x94\xae\x1a\x02\x91\x30\xdb\x9e\xcf\xbc\x04\xf2\x9d\x29\x83\xb4\xeb\xa2\xd1\x4c\x54\xf9\x0a\xc2\x67\xea\xf6\x37\xb0\xd8\xd1\x08\x69\xb8\x18\xe6\x2d\x4a\x36\xaf\xeb\x7f\x33\x8f\x27\x57\xe0\x64\x06\xa1\xc5\x70\x30\x11\x2c\x19\x1a\xf9\x98\xe8\x83\x0a\xb8\x9e\x60\xa2\x0e\xb1\x06\x75\xef\x4f\xba\x75\x59\xde\x64\xa2\x15\xcc\xd3\x91\x3f\xb5\x23\x4f\x9d\xac\x47\xfa\x20\xaf\x21\xfa\xd7\xb0\x5e\x6e\x3b\x73\xd9\x57\xa6\x00\xe8\x14\x51\x0e\xe0\x6d\xa9\x6c\xb9\xe2\x9b\x09\x82\x3f\xbb\xd1\x07\x44\x54\x4d\x12\xa7\xc7\x43\xb1\xa0\xb2\x0d\x03\xad\x1d\x19\x89\xe0\x41\xed\x70\xb0\xbb\x60\xc9\x8c\x0d\x66\xab\xfe\xa7\x5a\x71\x66\x4c\x71\x43\x60\x00\x87\x5e\xfe\xfb\xc0\xcb\xd2\x6d\xee\x7f\x73\x9a\x2c\xe7\x3b\x83\x31\xd4\xde\xe2\x0d\x81\x70\x8f\xcd\x78\xd9\x7e\x51\xdb\xea\x74\x5d\x87\x2b\x04\x19\x66\x00\xab\x61\xa3\x80\x38\xed\xef\x49\x40\xe9\x85\xd8\x5f\xfd\x4d\xdf\xfc\xa7\xc3\xf7\x6f\xd8\x66\xde\x9e\x68\x12\x03\x8f\xeb\x3d\xb6\xac\x9c\x11\xdf\xf3\xc5\x3b\xec\x8f\xfe\x1b\xed\x66\x27\x2a\x4f\x27\x61\x39\xe6\x41\x09\x6f\xde\xb0\x7c\xb3\x34\x2b\x24\xee\xa4\x3c\xe5\x27\xe5\x98\x1e\x60\xd6\x77\x30\x60\x0d\x26\xc5\x6c\xf6\xa9\xcf\xfd\xcf\x7c\x9e\x6d\x74\xa5\x1b\x6b\x6a\xda\x7a\xc6\x43\x1e\x94\x27\x7b\x7b\x42\x75\x39\xd1\x85\xe5\x9d\xc2\xae\xbf\xb4\xb0\x93\xf1\x38\x3f\xe5\xc3\xa5\x34\x0d\x36\x54\x9e\xf3\x05\xb5\x68\xfe\x0f\xf2\x50\x26\xb3\xb4\x08\x46\x13\xc9\x43\xae\x8a\x3b\xf1\x7b\x9e\xca\xfc\xfb\xab\xa4\xaa\x6e\x8b\x72\x26\x7e\xa7\xcb\xe4\x1a\xd0\x55\x70\xab\x46\xf1\x98\x82\x05\xd6\xc4\x62\x3f\x54\xeb\xab\x65\x0a\xa9\x38\x24\x30\xe1\xc6\xfb\x2b\xf9\xbe\xf6\x4d\xbc\x66\x1d\x40\xf0\x2b\xd6\xc5\x77\x9a\x90\x4e\x98\x84\xe3\x9c\xf0\xd3\xf2\x84\x8f\xc7\x38\x1f\x03\x2e\x40\x17\x8c\x3a\x6f\x4b\xba\x64\xdd\x78\x1d\xee\xcd\x52\xa1\x03\x72\x60\x1e\x42\x91\xaa\xeb\x9c\x24\xb4\x74\x5d\xdb\xa6\x46\x29\x2d\x48\x45\xef\xda\x43\x10\x2e\xd9\x4f\xd8\xd9\x9e\xa5\xc6\xc6\xca\xe1\xd0\x44\xe9\xfa\xdc\x3a\x4a\x4c\x8c\x95\x51\x7d\xd1\x4a\xab\x4f\x6d\xf5\x84\xda\x5b\xc1\xb1\xd1\x7a\xb3\x8e\x81\x4a\x5c\x97\xa9\x52\xcc\x91\x61\xc7\x96\xf9\x89\xf6\xa5\x73\xa9\x9d\x73\xa9\x9d\x73\xa3\x9d\xf3\x9e\x76\xce\xbb\xda\x39\x49\x5d\x37\xfd\x84\x03\x32\x96\xb5\xd6\x35\xdf\xd1\x81\x13\x28\xa3\xd3\xa8\x90\x3b\x2a\x7b\x37\x42\x29\xad\xcc\xe1\x56\x74\x10\x53\xb1\xe1\x12\x9d\x17\x6f\xd3\x05\x81\x7b\x9b\x1d\x6c\xe5\xbe\x99\xef\xdb\x8e\x93\x6b\xab\x87\x77\x86\xda\xf6\xb2\x6d\x75\x4e\xb0\x80\x03\x1a\x54\x94\xc6\xea\xbd\x01\x31\x22\xd1\x95\x4d\x85\x2f\x99\x6d\x34\xb0\xb5\xdb\x28\x26\x15\x9d\x90\x75\x4b\xb9\x19\x95\x71\xda\xdc\x40\x5f\xa0\x82\x32\xa5\xe2\x96\xae\x3b\x2a\x51\x01\xe5\xd4\x35\x4a\xb4\x7d\x9e\x64\x70\x80\x2d\x2e\x2a\x6c\x23\x49\x98\x26\xdc\x59\x4d\xb0\x54\xe1\xdc\x75\x47\x42\x0f\x87\x44\x03\x77\x0c\xe5\x18\xa6\x6c\x94\xca\x7b\xa9\xb8\x27\xde\xc7\x1d\x1f\x64\x15\x0e\xdd\x23\xc6\x98\xcc\xc4\x3f\x2b\x9a\xe8\xbe\x2c\x69\x51\xd7\xdb\x59\xd2\x04\xd6\x98\x09\xd0\x4f\x21\x40\x5f\x2a\xd1\x51\x1e\x5b\xa9\xf4\xca\x06\xf1\xba\x76\x1e\x39\xa4\x6a\x4f\xf2\xa3\x2a\x0e\x2a\xd8\x13\xdc\xd0\x11\xab\xeb\x51\xe1\xba\x3c\x5c\x06\x2f\x19\x5a\x92\x05\x61\xd0\x42\x72\x4f\xcb\x30\xad\x6b\x54\x84\x2c\x58\xd5\x75\x0e\xa0\x1d\x49\x70\x03\xfe\xf7\xae\x5b\xa2\x1b\x72\x2f\xdf\xcc\x61\x9b\x9b\xd1\x97\x0c\xdd\x93\x19\x26\x39\xca\x88\x98\x1e\xf1\x6c\x4a\x75\x16\xc0\x93\x29\xec\x3a\xe6\x34\x8b\xa6\x30\x25\xf7\xd1\x2c\x9a\xc6\x62\xe3\x71\xa3\x7e\xcd\xb1\xe5\x33\x98\xd6\xb5\xc4\x0f\x53\x13\x9f\x89\x21\x9a\x1a\x3f\x08\x53\xdc\xbd\x2c\x2e\x93\x93\x78\x13\x4d\x45\x39\x3b\x29\x48\x53\xe9\x3f\x96\x91\xb5\x4c\xcc\xb1\xfd\x6b\x94\xd1\x34\xfc\x09\x15\x64\x8e\x83\x85\xb8\x75\xb6\xe7\xbb\x2e\x2a\xa2\x4c\xb4\x2f\x11\x7f\xe6\x18\x2b\xdb\xc1\x3d\xf4\x94\x52\x9a\x84\xf7\xfa\x48\x67\x45\x74\xd1\x38\xb8\xc7\x24\x0d\x55\x03\x12\x72\x4f\xd6\x38\xd0\xb1\x30\x09\xb9\xef\x78\x8d\x9f\xb3\x7e\x46\xc5\xb4\x8b\x90\x90\x7b\xfa\xfc\x22\x02\x93\xb1\x50\x05\x00\x49\x54\x6c\xad\xcd\x23\x67\xd7\x89\xc9\x9a\x26\xa1\x1f\x4c\xc8\x74\x38\x16\x50\x86\xc3\x37\xa4\x22\x42\x99\x9d\x6f\x79\xe9\x27\xc8\x94\x20\xf6\x45\xea\xc5\x05\xb5\xd3\xd7\x58\x89\x5d\x46\x89\x20\xfd\xba\x2e\x47\x94\x66\x62\x4d\x21\x4e\x4b\xdc\x52\xd9\x54\xbd\x1e\xcc\xd5\x8f\x16\xea\x47\xee\x16\xd3\x26\x3e\x59\x9f\x16\x27\x6b\x19\x2d\x5f\x76\xfb\xba\x56\x7d\xc5\x0b\x1a\x5d\x32\x74\xcb\xd0\x02\x93\x12\xc7\x2d\xb7\x13\x1f\x48\x9b\xb8\xf5\xba\x8e\x39\x82\x03\x35\x71\x57\x1d\x5b\x63\x1c\x5d\xc6\x72\xa4\x53\x3a\x1e\xaf\x4f\xd2\xd3\x42\xac\x60\xbb\xca\x54\x95\x01\x78\x14\xca\x10\x22\x96\xff\xfa\xcc\x77\x5d\xd9\x00\xf8\x29\xe4\xa7\x31\x58\xae\xf7\x7c\xac\x90\xe0\x90\x02\xfe\x76\x76\xe5\x49\xc5\x7a\xef\x40\x96\x18\x3a\x8f\x9c\xc0\x71\x1a\x0b\x6c\x46\x07\x2b\x95\x64\x7d\x9a\xba\xee\x79\x5b\xe4\x9a\xa4\x82\x95\x88\xe6\x89\xbb\xc6\x06\x6a\xee\x82\xf8\xc6\xcd\x42\x2b\x46\xfa\x18\x11\x5a\xa8\x2f\xae\x6d\x2c\x6c\x3d\x4e\x55\xab\x96\x74\x8c\x25\x60\x8e\xbf\x66\x24\xa1\x95\x90\x32\x1f\x59\x9e\xfe\xd9\x0f\x69\x55\xe6\x1d\x1b\xd0\x81\xbe\xd3\xb6\x7d\x21\x4b\x8c\x3f\x67\x38\x09\xa6\xe6\xc8\x14\x94\x96\x8a\x32\xb2\x86\x95\x28\x1a\xa0\x0f\xc3\x4e\x2a\x65\xf7\x4c\x20\x06\xc2\x75\x47\x28\xa5\xbf\xca\x80\xc5\x0a\x03\xb2\x90\xeb\xa2\x8a\x56\x7a\x00\x04\xfd\xab\x35\x56\xd7\x15\x26\x6b\xc5\xc4\x69\x14\x63\x4c\x4a\x3a\xf2\x09\x4a\xe9\x1f\xa6\x04\xc1\xf6\x69\xaa\x63\xb5\x48\x21\x5f\x57\x93\x54\x12\x00\xb9\x83\x42\xad\x49\xd9\x05\x47\xc3\xb6\x52\x63\x35\x97\x2e\xc2\xa2\xdd\x58\xb4\xf3\x6f\x51\x12\x5b\x4d\xcd\xa2\x24\x96\x1d\x10\xbf\xc4\x5c\xd5\xf5\xe7\x2b\x4f\x88\xa2\xce\x20\xdd\x52\x29\x78\xb6\x94\x12\xb2\xc6\xa4\xc3\x08\x75\xf8\x6c\x50\x85\xed\x11\x18\x0e\xde\x21\x46\xd6\xd8\x0c\x7d\x23\x4a\x94\xde\x42\x69\xb6\x65\x3a\xc5\xa4\x14\x52\x96\x3e\xb3\x26\x73\x54\xc9\x99\x91\x87\x35\x10\x2d\x48\xca\x56\xe2\x94\xc0\x3c\x2b\x7a\xce\x10\x8f\xca\x18\xd6\x56\x98\x6a\x29\x1a\x14\xfa\xd7\x09\xaa\xe8\xb3\xce\x09\x8e\x15\x19\x66\x8c\x3d\x16\xd8\xcc\xd9\x84\x14\xb4\x2f\x2c\x89\x02\xbe\x9d\x93\x15\xb9\x21\xf7\x74\x42\xae\xa9\x33\x71\xc8\x15\x2d\x5c\x37\x8a\xc9\xa5\x68\xff\x2d\xcd\xc8\x9d\x10\x9a\xa9\xeb\xb6\xbe\xdc\x48\x48\xbe\x29\x26\xe7\xf4\xe5\x98\xca\xed\xd5\x6d\xe8\x07\x1d\x00\xa8\xba\xf6\x7c\xf2\x8e\xde\xa9\x26\x00\xc1\x4e\x25\x20\x97\x74\x78\x4a\xea\x7a\x8a\x4f\xae\x47\x94\xbe\x73\x5d\x05\x05\x33\xa7\x77\xd1\x75\x8c\x4f\xae\xc7\x63\x29\xa3\x5c\x57\x79\x04\xac\xe8\x84\x24\x75\x3d\xdf\xf0\x92\x9a\xd5\x35\x5a\xa0\xb9\x98\xe7\xd1\x12\x9f\xdc\x50\x16\xad\xb4\xf7\xfa\x0d\x9a\x8b\x8f\x66\xa4\xc2\xf8\x41\x91\xf5\x1c\x2b\x83\xb5\x68\xcc\x4b\x7a\x8e\x9b\xd2\x75\x11\x9a\xd3\xd1\x8d\xa8\xcc\x75\xef\xf7\xf6\x48\x01\xf9\xf1\xe4\xeb\xb8\x49\xe7\xe8\x7e\x4c\xaf\x49\xe9\xba\xa2\xb9\xf7\xa6\x45\x27\x37\x94\xab\xda\x6e\xd0\x15\xb9\x14\x03\x6b\x89\xda\xfb\xb3\x89\xb4\x54\x5f\x8b\x89\xbd\x8a\xae\xe3\xba\xbe\x84\x7f\x91\xf8\x43\xdf\x4b\x07\x94\x35\xc6\x3b\x97\x42\xf6\x5d\xe2\x46\x0b\xb4\x35\xb9\xc4\x64\xea\xba\x42\x87\xb8\x34\xb3\xe8\xba\xf7\x06\x4f\x48\x70\xcc\x8e\x67\x06\x5a\xb7\x9e\x0f\xb2\x6b\x24\xa3\xb7\x98\x5c\x35\x6d\xcc\x44\xc6\x50\x81\x83\xa2\x41\x85\xe0\x86\xd8\x38\x03\x50\x66\x9c\x7a\x1a\xb2\x6e\xdd\x04\xe8\xa6\x29\x54\x2a\x8a\x06\x79\x66\x5b\x06\x04\xc8\xa3\xef\xba\x09\x62\x74\x61\xaa\x11\xaa\x07\xe8\x39\xb4\x84\x00\x6e\x1f\x8c\x4d\x6a\x51\x82\xf0\x59\xd3\x99\xd0\xb1\x67\xd6\x31\xae\x89\xa8\x3d\x3b\x70\x5d\xe7\xf5\x0b\xc8\x94\x90\xd1\x75\x34\x89\xb1\xda\xe2\x3f\xed\x05\x3d\x2e\x05\xb1\x1a\x09\xb4\x86\x23\x77\x10\x7a\x32\x30\x9b\x53\x64\x62\x33\x50\xa6\x45\x99\xcd\xb1\x94\xe5\x93\x63\x7d\x06\xd1\xa6\xbb\xd8\x59\xc0\x99\x74\xc7\xb8\x47\x5a\x71\xb2\xd6\xac\x49\x6e\xee\x74\xe7\x40\x4f\x2a\xe8\xdf\x3c\x1b\xd6\x42\x87\xfc\x86\x93\x60\x6d\xc0\x94\xf6\xf6\x60\x91\xac\xa3\x22\x26\xb6\x1c\x05\xd0\x53\xe8\x84\xdc\x4d\xcd\xa9\xec\x83\x52\xb4\x52\x3a\xff\x64\x57\x74\x80\xf1\x5a\x6b\x3b\xc3\x81\xc6\x2a\x60\x7a\xad\xf5\xaf\x82\xf8\x98\x8c\x10\xa3\xa9\xf1\x93\xbd\x62\x82\x62\xfb\xb1\xdd\x82\x36\x48\xa9\xcf\x82\x94\xdd\x74\x51\xd7\x15\x62\x64\x86\x31\x4a\xc1\x8b\x8a\x94\x64\xc4\xeb\xfa\x33\xd1\xce\x80\xc7\x65\x3b\x0b\xd1\x4b\x1d\x38\xeb\x60\xed\x2a\xa4\x5c\x74\x21\xd4\xe8\x92\x6c\x3a\x1c\xd1\xd1\x68\x4e\x16\x08\x93\xae\xdb\xe6\x96\x20\x2b\xff\x13\x4e\xb0\x9f\x08\x25\x1e\xf0\x9e\x37\xbb\xb8\x21\x27\xfa\xbf\x48\x8f\x79\x87\x38\x7f\x91\x26\xaa\xd6\x3a\xd8\xb3\x4d\x89\xf7\x85\xcc\xac\xeb\xb9\xb2\x54\xd5\x60\x5b\x5d\xb0\xf4\x7a\xc1\xeb\xdb\x74\xc6\x17\x0e\xe9\x6f\x65\xa4\x58\x1b\x8e\xcb\xe2\xc4\x31\xa7\xbc\xdd\x3d\x6f\xe8\x07\x07\x32\x72\xae\x75\x63\xdb\xf4\xcb\x1e\xea\x17\xd8\xe3\xf6\x21\x24\xc3\xea\x49\xd7\x21\x1f\xd6\x81\x03\x00\x80\xce\x67\x3a\x2d\x5f\x35\xbd\x56\x5f\x0e\x76\xd2\x75\x3f\x6f\x0c\x6c\x07\x42\x87\x38\x82\xb7\xd4\xb6\x29\x53\xc0\x74\xbd\x36\xb5\x7e\xf5\xaa\x59\xaf\x37\x1a\x04\x9b\xc7\x1d\x7b\xec\xa5\x7d\x38\xe2\x71\xd8\x1b\xea\x00\x80\xd3\x86\xfd\x00\x73\xcb\x0f\x30\xb7\xfd\x00\x31\xa9\x58\x83\x18\xde\xb9\x84\x15\x4f\xef\x00\x8e\x71\x55\xd2\xbb\xd6\x9b\x4b\xdd\x8a\x9c\xc0\x91\xf0\x8e\xab\xd2\xe8\xa4\x97\xb6\xff\x9e\xbe\xa0\x77\xd6\x5d\x72\x29\x41\x83\xef\xb4\x97\x1c\xb9\x94\x81\xb2\x2f\x8a\x29\xbd\x93\x3f\xc9\x65\xeb\xd3\x79\x67\x7e\x8a\x7a\xc1\x45\xd1\xb8\xc0\xde\xa9\x1b\xe0\x88\x79\xbe\x81\x40\xd3\x43\xae\x33\x0e\x24\xe5\x89\x50\xca\x23\x2e\xb8\xd9\xd3\x91\xed\x22\x6f\x2c\x40\xed\x2d\xad\x1c\x5c\x42\xf4\x51\x85\x4a\x0d\x3f\xa8\xe1\xed\x8c\x28\xcc\x1b\xf2\x6e\x2b\xc2\x58\x14\x0f\xd8\xe4\xfb\x11\xf5\x4c\x42\x76\x96\xba\x64\xcb\xa3\xee\x99\x1e\x69\xe0\xbb\x1d\xde\xde\x5a\x09\x3f\x76\xc1\xd3\xbe\xd0\xf5\xa7\x07\x1d\x23\xda\xfb\x81\xee\xff\x76\x8a\xa2\x64\xef\xcf\x38\xfa\xed\x62\xff\x62\x72\x16\x00\xd4\x18\xbf\x28\x2f\xf2\x8b\x79\xfc\x08\x47\xdd\xeb\x8b\xfd\xf0\x0c\x85\xc1\xe9\xc5\xfe\x85\x7f\x56\xe3\x6f\xf6\xd3\xb6\x55\x6f\x7b\x3e\x37\x4b\xc4\x71\x78\xe9\x5d\x97\x6c\xd5\xd5\x2c\xf3\xd6\xe5\x43\xa3\x3e\x92\x9c\x80\xc7\x6d\xd9\xe0\xa0\x15\xbb\x43\x5f\x77\x37\xc9\xea\x93\x0d\xd8\x16\xfe\xc9\x4f\x5b\xb8\x45\xb1\x7f\x56\x65\x5c\xaa\x4d\x83\x46\x61\xd4\xd7\x5b\x00\x8f\x78\x34\x89\xad\xf3\x32\xc4\xa8\x13\xe4\x05\x47\xe0\x1a\x85\x1d\x4c\xa4\x81\x51\x8b\x38\x70\x7e\xb1\x3b\x06\xca\x42\xcf\x53\x1b\x9c\x91\xc2\x28\x8f\x83\x28\x0e\xba\xaf\x20\x46\x54\x8f\xf8\x50\x8f\xba\x14\x06\x30\xc3\x16\x2c\x2e\x7a\x00\x17\xcb\x01\x5f\x3b\x92\x77\x00\x7f\x65\x4a\x8c\x1d\xcb\x11\xb5\x05\xc2\xe9\xe4\x2b\xb0\xf0\x8f\xc5\x7a\x51\x23\x67\x1d\x68\xc0\x9e\x84\x4e\x4e\xf8\x69\x0e\xf6\xe9\x74\x8e\xda\xc5\x8e\xd2\x88\xc7\x32\x59\x59\x6b\xc4\xc4\xc6\x45\xbf\x5b\x41\x14\x63\x62\x97\x24\xc7\x05\x31\x02\x85\x58\xd1\x90\x67\x7e\x68\xb3\x25\x54\xe2\xa0\x34\xbe\x78\x43\xae\x69\xdd\x7a\xde\x2a\xe4\x67\x50\x23\x47\x3e\x06\xb0\xd8\xc1\xa3\xac\x4f\x7e\x38\xc1\x80\xd5\x3a\x74\xba\x36\x52\x6f\x6e\x3a\xc3\xb9\xee\x33\xa3\xb9\x89\x01\x0d\x4c\x2b\x74\x9c\xb5\x82\x6f\x7c\x4e\xde\x4b\xa8\xaf\x8b\xea\x11\x3a\x8d\x2e\x6e\x2f\x7e\x8d\xc7\x67\x38\xfa\xed\x2c\x7e\x54\xff\xc5\x42\xfb\x3a\x41\x06\xa3\x7c\x90\x80\x53\x52\x80\x78\xe9\x4c\xab\x51\xa4\x9f\x0f\xb4\x51\x69\xba\x29\x75\x4e\xa5\xd1\x64\x12\xbb\xae\x73\x26\x7f\xb7\x70\x58\x71\x8b\x5f\x7e\x46\x0f\xc3\x48\xda\x77\xc0\x09\x21\x0e\xde\x1b\x90\xa3\xba\x1e\xa5\x91\x78\x59\x3b\x35\x0b\x25\x8e\x7b\x12\x8c\x3c\x04\xd8\x03\xac\x26\xda\x24\x25\x69\x21\xa2\xb9\x79\x06\x31\x21\x1a\x2a\x89\x53\x6e\xa7\x2d\xbe\x0c\xc5\x22\x0d\x84\xe4\x69\xb1\xc2\xc9\xa5\x50\x0d\x2b\x26\xd4\x0d\xf8\x92\x70\xed\x0f\x06\x2b\x73\x00\xc0\x29\x87\x59\x25\x1f\xe4\x14\xa5\xd2\x15\xaa\x8f\x88\xcc\x71\x8b\x8d\xcf\xf1\x52\x66\x67\x4a\x63\x1c\xaa\x1f\x88\x8b\x2b\xd9\x15\x70\x3c\x4c\x09\xb7\x11\x53\x21\x8b\x97\x52\x72\x0b\x9a\xf7\x63\xb4\xd3\xe8\x20\x6e\xb3\x3e\x4d\x62\x5a\x10\x6b\xe1\x52\x5f\x66\xfd\x6b\x3a\x22\xe1\x83\xc9\x9c\x22\x9d\x41\x3a\x1f\xc8\xe5\x17\x2c\x05\xc9\xb5\x12\xd3\x83\x8c\xca\xa1\xfa\x0b\x94\x88\x2e\x05\x6f\x34\x08\xba\x48\x96\x83\x1b\x6c\x99\xad\x04\xad\x91\xe7\xf4\x12\xe5\x92\x4c\x7f\x96\x44\x2a\x75\xf0\xaa\x5e\x95\xec\x06\x85\xc1\x3f\x72\x9e\x66\x35\x44\x00\xef\x93\xdf\xe9\x03\x78\x90\x95\x2c\x87\xe3\x36\xe9\xf8\x51\x41\xee\x02\x76\x07\x47\x66\xe2\xb3\x6e\xfe\x82\x17\xad\xb8\xb5\x64\xbb\xdf\x93\xed\x27\xe6\xb0\xaf\xc3\x03\x17\x49\x35\x84\x23\xaf\x3b\x64\x99\x4d\x3a\x48\xe7\xc3\xbc\x4d\xa2\x14\x4d\x4e\xd8\x69\x79\xc2\x36\xf8\x9b\x84\x9a\x8f\x58\x6c\xf3\xb7\x86\x4c\xb3\xa2\x62\x55\x3f\x71\x91\x1d\x46\x65\x33\x63\xb0\xf6\x24\x74\x93\x13\x4b\x25\x05\x96\xaf\x61\x1b\xd2\x2a\xa0\x0f\x18\x5a\x46\x1a\xe5\xf1\x49\xe9\xba\xa5\xd0\x38\x7a\xa1\x4f\x60\xca\x6d\x5d\x05\x7c\xdf\x75\x51\x12\x26\xd2\xf9\x44\xb9\x92\xf6\x63\xd0\xb7\xc8\x2d\x80\x3c\xc6\x0f\x85\x39\x01\xee\x9a\xc1\xfa\xc0\xf6\xe6\x34\xaa\xc3\xaf\x0b\x1c\x14\xe0\x41\x30\x63\x77\x83\xae\x14\xe1\x00\xf4\xb2\x12\xe5\x62\x40\x88\xa2\x74\x6c\xe0\x94\x81\x2d\x6b\x9e\x22\x18\x56\xa0\x98\x09\xf0\x2e\xf5\xa3\x83\x9c\x23\x27\xbc\xac\xc4\x6e\x5b\x90\xdf\xb3\x2c\x43\x9a\x07\x07\x7b\x7e\x43\x92\xd9\x2c\x18\x0c\xe6\xda\x48\x0b\x60\xf5\xac\x93\xab\xe0\x9a\x71\x84\x09\x90\x1d\xc6\x42\x58\x24\xb3\xd9\xf7\xfd\x1c\x07\x76\xa1\xc9\x6c\x86\x34\xc2\x75\x0f\x3d\x3f\xe8\x5d\x6b\x62\x65\x18\x3c\xbb\x14\xfa\xf0\xc3\x80\xc3\x87\xf6\xb3\xd8\x0c\x08\xd5\x11\x5c\x36\x4f\x54\xc1\x43\x6a\x3d\x0f\xb5\xf4\x1c\x31\x62\x1f\x1c\x63\xf3\x36\xac\xfa\x6d\x7e\xd9\xfd\xcf\x00\xfe\x3a\xef\x3b\x6c\xa8\x97\xc5\xea\xef\xf8\xc7\xe2\x46\xf2\x88\x6d\xef\xf6\x7d\x81\x55\xd9\xcf\xb2\x6c\x6b\x17\x06\x8a\xff\xd4\xeb\x5b\x6a\xf8\x7c\x9f\xed\x7a\xa0\xd3\xa2\xa4\x2f\x18\xaa\xbe\x77\xb3\xf8\xb4\x92\x17\x83\xf3\xf2\x0e\x21\x7b\x92\xeb\xfa\xa1\xc1\xd6\x6e\x19\x12\x5d\x18\x3e\x3c\xf8\xbd\xbd\xb9\x86\x74\x60\x8a\x51\x0f\xbc\x6c\xb9\xee\xab\xd7\xb4\x18\x0d\x37\xee\x04\x48\xec\x62\x1c\xce\x96\xab\x2c\xe1\xcc\x01\xef\xc6\xf6\xc3\xba\x66\xd8\xc8\xed\x28\x26\xcc\x86\xa8\x84\x18\x8b\xce\x22\x04\x44\x6e\x16\xdb\x39\xc1\xcd\xf1\x97\x95\xa1\x83\xb7\xfa\xa2\x03\x83\xdd\x71\x5d\x7f\x8c\xe1\x88\xb8\xc4\x24\x77\xdd\x0d\x5e\x93\x83\x49\xcc\xec\x12\x20\x0d\xa8\x2d\x52\xcf\x04\xff\xfc\x1d\x5c\x69\x3b\x8b\x3f\xc5\xe4\xe7\xd6\x36\x95\xb6\x89\x33\xd5\xd7\x2d\xcf\x48\xb1\x56\xf3\x7e\xa2\xfb\xd1\x6f\x9d\x9d\xd7\xd8\x4e\x1f\xf3\xda\xe6\x8a\xed\x11\xe5\x9b\x36\x30\xcf\xba\xfb\x4a\x1f\x8a\xab\xf1\x00\xac\x3a\xe6\xba\x4b\x04\x51\xbb\x32\x51\x38\x0e\x53\x9d\xc4\x00\x52\x36\x82\x86\x95\xa4\x99\x50\xa2\xcd\xbb\x7c\xc1\xf2\xf6\x45\x18\xcc\x80\x2b\x63\x9d\x9c\x7a\x12\x31\x6d\x64\xcd\xb1\x06\xc1\x83\x08\xfc\xfe\x5b\xb8\x69\x2e\xbd\xe7\x49\x96\x5d\x25\xd3\x8f\xdd\x24\xa4\x8c\x0e\xf0\xf9\x4d\xde\xd5\x26\xbd\x53\x6c\x4e\x85\xce\xa2\x9f\xc0\xc4\x4a\xba\x3e\xc3\x3c\x2a\x63\x2a\xa4\x30\xe1\x8d\x50\x6b\xda\xec\x13\x0d\x51\x11\x9e\xc6\x73\x40\xca\x5d\x38\x6a\xd9\xf3\xc9\x9a\xf6\x44\x7f\x4a\x53\x88\xc0\xce\xa7\x10\x56\x4f\x47\x93\x93\xc4\xf8\xeb\xd2\x3d\x5f\x49\xdf\x44\x9b\x6d\x4f\xc6\xe3\xea\xd4\xb8\x27\x63\xf0\x37\x2f\xa2\x4a\x1f\x80\x96\xd1\x24\x26\xa5\x54\x2a\x99\x57\xf1\x62\xf5\x2e\x7f\x95\x64\x15\x83\x23\xb5\xa2\xcd\xc5\x32\xf2\xf1\x0e\xf3\x96\x6c\x59\x94\xf7\x70\x66\x35\x12\x5a\x1f\x1d\xf9\x90\x15\xb3\xa0\x65\x18\xc5\x01\xa4\x3b\xc8\xe8\x43\x47\x4e\xb5\xb9\x7a\x94\x7f\x05\xef\x94\xbd\xe7\x93\x44\x4b\x6e\x2b\x9d\xab\xd8\x41\x3d\xa8\xb1\x2d\x49\x77\x65\x2d\x51\x8e\x43\x7d\x54\xe0\xba\x90\x2f\x0b\x72\x8c\x14\xda\xe3\x2a\xc8\x5d\x37\x37\xdb\xdf\x56\x89\xa1\x57\x28\xc7\xae\xcb\x51\x8e\x1b\xdc\xa0\x36\xb1\x0d\x51\x0d\x5b\xeb\x95\xd1\x10\x09\x87\x38\xd0\x0f\xd5\x2a\xf3\x31\xd9\x62\x8e\x39\x41\x25\xbd\xf4\x54\x1e\x06\xc4\x65\x3a\x80\xb3\x3d\xff\x04\x17\xda\x1c\x5d\x12\x1f\x93\xf2\x94\x56\xae\x5b\xed\xed\x35\xba\xea\xbe\xb2\x68\x74\x90\xb6\x38\x46\x0a\xd0\x91\x0a\x2b\x4a\xb9\xe7\xb4\xd9\x19\x78\x38\xfd\x54\xc5\x2b\x13\xe0\xc0\x9b\x29\x4d\xe4\x51\x1f\x84\x90\x76\xde\x1e\x98\xd1\x51\xd1\x90\xac\xb0\x95\x87\x7e\x41\x65\x5d\xf3\xba\x46\xb2\x3c\x5d\xbd\xf8\x64\xb0\xb8\x51\x0a\xfe\x89\xec\xd7\x94\x77\x92\x7f\xb4\x62\x28\x05\xd2\x8b\x18\xd1\x47\x2e\xea\x18\x33\xd4\x1e\xc3\x38\x28\xe3\x96\x9e\x08\xaf\x6b\x6b\x46\x45\xd9\x03\x6d\xcd\x3c\x5d\x69\x3f\xdd\x91\xf5\xdd\x60\x7b\xf3\xc6\xb0\x81\xcc\xce\x29\xf3\x82\xcd\x59\xd9\xf9\xc6\x9c\x67\x46\x91\x93\x17\x3c\x9d\xdf\x3b\x42\x9e\x16\xd7\x25\xab\x2a\x87\x58\xdc\x08\x39\x72\x91\x39\x78\xcb\xdd\x83\x98\x44\x4e\xc9\xaa\x22\xbb\x61\x0e\x71\x04\xc3\xec\x15\x20\x98\xc3\xee\x70\x29\xdd\x47\x13\xa2\x0b\x9a\x39\xb2\x54\xc0\x9f\x25\x8e\xe0\xbe\xff\xdd\x42\x7d\xa2\xca\x11\x85\xc6\x24\xa7\xce\x8a\xe5\x33\xd0\x17\x52\xfa\x00\x79\x59\x07\x26\x21\x6f\x48\x92\xdd\x26\xf7\xd5\x60\x92\x2f\x90\x0a\xed\xbc\x48\xe9\xb0\x31\x4f\x9b\xc9\x29\x35\xd9\xc8\x34\xd8\xd2\x1a\x20\xd4\x9d\x74\xd5\x69\x83\xdc\x4f\x99\xf2\x5a\xd6\xae\x27\xb2\x03\x1c\xb9\x85\x2b\x49\x79\xbf\x44\x2c\xca\xa3\xa3\x18\x18\xaa\xfc\xb5\x53\x44\x79\xe4\xc7\x31\xda\xa8\x31\x05\x34\xc1\xa1\x44\x5b\x3b\x20\xf7\x2c\x09\x69\x7e\xc2\xde\x40\xd2\x0d\x12\x5a\xb2\xa0\x25\x2d\x36\x3d\x35\x9b\x6a\x80\xc4\x35\xe4\x08\x0c\x78\x94\x47\x93\x78\xec\x08\x22\x77\x62\x59\x59\x0a\x99\x63\xda\x2a\x1b\xdc\x60\x22\x93\x4c\xcb\xed\xb5\xac\xad\x21\x62\xec\x6c\x2f\x49\x2b\x30\x6f\xd2\xaa\x05\x49\x9b\xb6\xbc\x1f\xc0\x21\xdf\xae\x64\xd2\x29\x2b\xe5\x15\xc9\x36\x53\x66\x65\x3b\xf2\x48\xf3\xb4\xc0\x0a\x6f\x82\xe6\x6a\x88\x2a\xb2\x86\x40\x85\xb2\x6d\x9c\x95\x28\x52\xec\x15\x14\x1a\xc0\x87\x85\x74\xd1\xdf\xad\x58\x36\xdf\x83\x31\x59\xc3\x89\x2e\xde\xc9\x20\xb9\xce\x97\x66\xea\x03\xa1\x28\xba\x4f\x96\x28\xc3\x61\x1a\x66\x5a\xfd\x48\x50\x41\x4a\xf2\x9a\xa4\x58\xfd\x7c\x23\x34\xb2\x00\x15\xe3\x31\xf9\xf4\x4b\xe6\x6e\xa9\x26\x4f\xcc\x09\x16\xdf\xe6\x23\x4a\x5f\x83\x6c\x54\x9a\xca\x9a\x0a\x5d\x85\xa0\xb4\xae\x4b\x3d\xb5\xf0\xb6\x1c\x8a\xa6\x21\x53\x9a\x86\x59\x27\xf5\x76\x79\xff\x90\x21\x4b\xf9\x69\x69\xd8\x63\x3a\x57\xf6\x8f\x45\xf1\x51\xec\xa6\x87\x9f\x20\x46\xa6\x5e\x25\x74\xc2\x0f\x65\x32\x15\x3b\xdb\xb1\x7f\x46\x85\x0c\x11\x0d\x7c\x33\xd0\xc0\x52\xd1\x19\xb0\x50\xd5\xb4\x1d\x1e\x4e\x11\x0e\x90\x55\xcb\x35\xe3\xa0\x6a\xca\xea\x91\x5d\x09\xdd\xf2\x1a\x92\xf1\xcd\x8c\x7f\x48\x97\xac\x58\x73\x34\x15\x65\x7f\x62\x79\x8a\x35\x1f\x4d\xe2\xe8\x30\x86\x9d\x6b\x82\x26\x84\x91\x25\x4a\x71\x98\x06\xaf\x09\xeb\x0c\x39\xe8\x3d\xfd\x37\x39\x0e\x79\xf0\x1a\x1e\x1e\x6c\x3c\xcc\x71\x98\x07\x6f\x30\xee\xae\x0f\xf5\x73\x5b\x6e\xa8\x11\x15\x72\x5b\x89\x06\x46\x52\x19\xe3\x55\x6c\xaa\x90\xe5\x80\x03\x4c\x42\x79\x74\x20\x74\x41\x1e\x3d\x8e\x77\xd2\x88\x0b\x46\x42\x13\xd1\x2a\x52\xb9\x2e\xfc\xb0\xf9\x4a\x4e\x85\xe6\x12\x1d\xee\xb1\x38\x3a\x88\x35\x20\x97\xbe\x73\x68\xdf\x99\xc0\x1b\x42\x18\x13\x3d\x64\xe2\x02\x13\x59\x28\x17\x37\x84\xe4\xc3\xa4\x88\x78\x34\x89\x87\xb2\xff\xcb\x27\x1d\xbe\x22\xf4\x4b\x65\xd3\x0b\x86\xc5\x69\xf7\x23\x9a\x18\xf1\xdb\x60\x92\x9a\x81\x2d\xb0\xb4\x8d\xc2\x5a\x2a\x48\x81\x49\xd1\x90\xdb\x05\x1b\x8a\xd8\xd8\x48\xa2\x57\x52\x4e\x72\xaa\xd3\xc8\x91\x94\xaa\xd4\x8f\x56\x5b\x12\x8b\xe6\x10\x26\xd5\x50\xe6\xd3\x96\xc1\xe3\x07\xd8\xe1\x49\xc6\x29\x7e\xf5\xab\x3c\xf3\xc3\x8d\x3a\x82\x92\xec\xed\xf1\xba\x4e\xec\xc5\x0b\x7b\xb7\xa6\x81\xdc\xe3\xa7\x54\x6c\xdb\xc4\x1e\x29\x91\x1c\x1c\x4e\xfe\xf4\xdb\x24\x51\xeb\x8a\x8c\x38\x26\x46\x8a\x02\x58\x2e\x88\x51\x84\xeb\x7a\x89\xd2\xa8\x8c\x5d\x57\xfc\x2b\xf7\x48\xe6\x98\x38\x91\x52\x4f\x41\x8b\x80\x33\xd6\x2b\x78\x9b\x88\x6a\x4c\xe9\x56\x5a\xaa\x96\xa8\xd5\x56\xf0\xcf\xff\x9b\xb7\xbf\xef\x6e\xdb\xc6\xd6\xc6\xe1\xff\xfd\x29\x2c\xde\x19\x1e\x20\x82\x65\x39\x9d\x73\xd6\x39\x74\x50\x3d\x69\x9a\xb4\x9d\x69\x9b\x36\x4e\xa7\xed\x30\x1c\x2f\x5a\x82\x6c\x4e\x28\x52\x05\x21\xbf\x8c\xa9\xef\xfe\x2c\xec\x0d\x80\x00\x49\xa5\x99\x9e\xfb\xfe\x75\xad\xc6\x22\x08\xe2\xfd\x65\x63\x63\xef\xeb\xe2\xa7\xff\x20\xaf\x6e\xf3\xb2\xfd\xa6\x52\x42\x56\x79\xd9\xbe\xcd\xab\x6b\xd1\xbe\xd5\x2d\x27\xaa\xa5\x68\x11\x7a\xa5\x05\x3b\xf6\x9f\xde\x7e\x43\x61\x0d\x7e\x72\x7a\x74\x68\x79\xe1\xbe\x11\x38\x7d\x84\x33\x77\x53\x23\x80\x8a\xf9\x39\xbb\xcb\x65\x05\x1c\xd9\xff\x32\xa8\x40\x80\x65\x4c\xfb\x51\x2c\x2d\xb0\xcb\xe9\xd8\xe5\x94\x1c\x47\x53\x35\xdb\x88\xa6\xc9\xaf\x05\x53\xb8\xd4\x80\xbe\xe2\x12\xb5\xcb\xaf\x6c\x4c\xee\x6f\xed\xc1\x5a\xe3\x2f\xab\xb0\xcd\xa8\x3d\xdd\x43\xb3\x7c\x1d\x8c\x9d\x6e\x0f\xfc\x42\xcf\x40\x83\xa3\xde\xc3\x14\xfe\xf2\xcd\x77\xc6\xbd\xf0\xdb\x3a\x5f\x89\x55\xc4\xbe\xd0\x4b\xdb\x68\x5c\x84\x13\xfe\x82\xda\xb2\x12\x64\x4e\xc5\x87\xb1\x71\xfa\x35\xf6\xb4\xa0\xc8\x91\x1f\x2c\x87\xfd\xfa\x12\x41\xdd\x39\xa3\x93\x58\x1d\x95\xe1\x19\x83\xe8\x3f\xe7\x85\x4a\xcc\xef\x60\xc2\x11\x34\x05\x58\x9c\x9c\x98\x84\x21\xe6\xe5\xcc\x24\x40\xdb\x96\xb8\x07\x3e\x99\xb3\x09\x68\x64\xe2\x38\x88\xff\xf9\xbc\x6d\xbf\xee\x4d\x8a\xf4\x32\xb3\x7a\x43\x88\x07\x55\xe2\x58\x33\x16\x59\x8a\x72\xa4\xfe\x86\x08\x17\x7a\x0a\xb4\x2d\xb4\x96\x39\xdd\xf9\x6f\xc0\x6a\xb7\x07\x45\x37\x5b\xd5\x17\x4b\x59\x97\xe5\x22\xe8\x68\x93\x23\x00\xef\x0e\xd1\xa0\x0f\xf4\xdc\x30\xa2\xed\x36\x9c\x3a\x3f\xf5\x6d\xcd\x0c\xcd\x99\x15\x86\x46\x7c\x12\x38\x97\x70\xfb\xe9\xa4\x13\x7e\xa5\xd7\x03\x30\x8d\x3d\x2e\xf4\xa1\x6a\x32\x67\x92\xfe\x04\x09\x36\x4c\xa6\x4d\xc6\x26\x73\x48\xf4\xc8\x7a\xab\x07\xc4\x97\xf0\xc1\x06\xe9\x37\x73\x60\x37\x2b\x41\xcd\x4e\xba\x9b\x6f\x8b\xf3\x4f\x13\x52\x72\xc5\x86\xf7\x75\xee\x90\xd4\xa9\xba\x25\x00\x2d\x9a\x3b\x27\xe7\x45\xa1\xc0\x3f\x98\x49\x96\x2f\xaa\xa4\xb2\x84\x8a\x4d\xc6\x1a\x66\x5f\x79\x9e\x13\xc5\x42\x24\xe5\xc2\x96\x83\x26\xbb\x05\x42\xab\x30\x49\x93\x7a\xcf\x7e\xe6\xa7\xff\x38\xd9\x34\x27\xa7\xec\x37\x7e\x7a\x82\x46\x02\xd4\xd7\x42\xfd\x2d\xd4\x7f\xcf\x54\xfd\xd3\x76\xeb\xcc\x0b\x5c\xb4\x5f\x03\x53\x1f\x6b\x43\xf6\x33\x8b\x36\xcd\x89\x87\x8c\xf3\x1b\xfb\x1b\xda\x24\x7c\x35\x36\xbd\xc2\xfb\x6d\x44\x4e\xf2\x9f\x27\x53\xef\xf6\xbb\x2b\xe2\x5f\x61\xe1\x28\x9a\x99\xa1\x18\x45\xe3\x0a\xfd\x6b\xfa\xd7\xd9\xae\x58\x4d\xa7\x7b\xf8\xcb\xcf\xd8\x5f\x7d\x4e\x64\x80\x31\x1a\xd3\x97\xa7\x7e\x6a\x3d\xa4\x94\xc7\x3d\xfb\x0a\xb9\x99\x7d\x2c\xc6\xf0\x0b\xae\x12\xa3\xa9\x47\x36\xf4\xce\xeb\x9d\xf9\xf1\x98\xb1\x3e\x56\x6c\x59\x57\xeb\xe2\x7a\x27\x41\x5b\x00\xb7\xe4\x94\xa9\x3d\x6b\x84\x3a\x44\xae\x88\x77\x48\x50\x03\x0b\x30\xdc\x57\xa7\x29\x5a\xa4\xbf\x12\x45\x33\x2e\x8f\x42\x3e\x4e\x7c\x53\xd1\x90\x3d\xb2\xe8\xf3\x3a\x0f\x70\x95\x01\xa0\x24\xc8\x38\xe9\xd5\x5c\x9f\xc5\x82\x00\x2c\xc1\x9e\xe5\xcb\xa5\x68\x9a\x43\x5a\xef\x2e\xf9\xb6\x55\x23\x5a\x59\x65\xf1\xfb\xf5\xa9\x64\xe1\x2e\x58\x74\x09\x13\xbc\x6f\x69\xf0\x91\x49\xca\xba\x7b\xce\x85\x4c\x14\x1d\x2a\x98\x82\xfb\xb8\x7e\x67\x07\x53\xbb\x07\x9e\x4c\x1f\x25\x27\xaa\x47\xaf\xab\x05\x59\xd0\x3d\xff\xaa\xcb\xc2\x75\x7d\x69\x51\x1d\x57\x8b\x54\x65\x89\x0a\xb4\x95\xd4\xb7\x69\x46\x41\xc1\x70\x98\x54\xa9\x4a\x65\x96\xed\x89\xdf\x12\x7a\x7d\xf7\xd8\x60\x49\x45\x7f\x67\xd8\x19\x69\xd0\xa4\xd9\x7b\xab\x8f\x31\x37\x79\xf3\x65\xae\xf2\x4f\x1f\xf3\x5d\xdd\xe3\x78\xd2\x2f\x8f\xd2\xe2\x95\xfe\xfc\x09\x38\x2c\xfc\x95\xfd\x68\xfe\xfe\x62\xac\x17\x1e\xd1\x74\xe1\xe9\xfb\x7d\xfb\x3e\xb5\xbf\x33\xfa\xe4\x94\xfd\x9d\x9f\xa6\x2f\x4e\xfe\x9e\xf9\x2b\xcd\x5f\x06\x66\x71\x5d\x9f\xf7\xf9\x4a\x80\x45\x99\x47\xab\x5c\xe5\x27\x5a\x00\xb1\xeb\xcb\xdf\x59\x74\xf2\x24\x8e\xfa\x4e\xfe\xfd\x01\x05\x6c\xb6\x81\xb9\x9e\x16\xe7\xe0\x50\x27\xc7\x08\xfe\x95\xdc\xc1\x8e\x08\xc7\xd7\xbc\x6c\x44\x84\x9b\x2d\x89\xf4\x92\x8e\x18\x4e\x80\x54\x25\x38\xe7\x53\x31\x8d\xa2\xc5\x54\x24\xbf\x38\x6b\x8f\xbf\x5c\xbc\xf9\x1e\x0d\x12\x60\xce\xd0\x3d\x91\xf6\xe8\x58\xd0\xc7\xfd\x8f\xde\xf0\x45\x97\x26\x0b\x29\xdf\xd9\x8c\x5d\xfa\x37\xdc\x83\x4e\x74\xee\xd7\xe6\x25\x11\xb4\x6d\x9f\x78\x4f\x7b\xb6\x0a\xbf\x09\xe6\xdf\x8f\x33\x9c\x9f\xb6\x0c\x66\xca\x7c\xd9\xff\x84\x3e\xfe\x68\x24\x29\x03\xb4\x78\xf9\xb1\x54\x9f\xf4\x53\xbd\x3c\x98\xec\x93\x20\x59\x10\x4e\xbc\x3b\xfd\x41\x26\x3d\xa8\x7b\xbc\xe2\x65\xb9\x3e\x3c\xd7\x9e\x2d\x6a\x30\x86\xd0\xb4\xc5\xbb\xca\x81\x7d\xfb\x47\x58\x48\x6a\x34\xe4\xaa\xbd\x3b\xf0\xc9\x13\x7c\xc3\x22\xd3\x88\x7a\xac\x34\x11\x35\xdc\x4f\xd2\xf9\x06\xe2\x3c\xce\xe1\x70\xa0\xf3\x21\x15\xd7\x0f\x28\x49\x77\x00\x64\x38\x54\xf1\xee\xe9\x57\x52\x19\x35\xea\x7f\x52\xca\xfe\x82\x6e\x90\xc0\x85\x7c\xf4\x04\x86\x42\x3f\x57\x1f\x3d\xb3\x30\x3f\x86\xba\x15\x5c\x18\xe1\x88\xeb\x89\xd4\x38\xb8\x2c\xdf\x3d\x4d\x7e\xea\xd3\xd8\x5b\xdc\x8b\x62\x4d\x6a\x6f\x9d\x75\x38\x84\x6e\x0d\x20\xd2\x36\x17\x13\x94\x2e\x64\xe2\xbf\xf9\x4b\x2f\xf4\xe8\x77\x0b\x03\x4c\xf9\x7b\x83\x8a\xca\x86\xe7\x3c\x7c\xa3\x6b\x3e\x3e\x1c\x7b\x74\xf7\x83\x9c\xcc\x88\x72\x35\x37\x77\xe5\x66\x4c\xfd\xb6\x13\x3b\x31\xbe\xbb\xea\x96\xe8\x2c\xa6\x38\x78\x6c\xae\xef\x23\x3a\x8d\xe0\xa3\x88\x55\xfc\x89\xdb\x7f\x98\x8c\x63\x40\x55\x1e\x70\xaa\xeb\x58\xde\x04\xf0\xad\x6b\x24\xa5\x49\xd5\x5d\xc6\x00\x2b\xdd\x9e\xad\xc4\xb0\x50\xf4\x11\xb8\xe4\x74\xfe\x88\xc4\xcb\x2f\x67\x10\x0b\x33\xaf\x1c\x17\x14\xd0\x42\x39\xef\x26\x7e\x39\xbb\x84\x68\xfa\x24\xd8\x20\xb0\x6b\x54\x54\x4e\x11\xce\x0d\x4f\x8b\xf7\x4d\x75\x72\x02\x1e\xb3\x44\xe7\xc5\x8d\xe9\xaa\x05\xcd\xf5\xbf\xa5\xcc\x6c\x30\x35\xdc\x63\x31\x77\x55\xe8\xb5\xfe\xe5\xcc\x54\xc6\xac\x13\x35\xa5\x6c\x52\xc5\x31\x4c\x50\xb8\x3e\x01\x65\x04\xd1\x8b\x42\x57\xce\x71\xde\x6e\xd3\xec\x10\x23\x3a\x72\x6b\x0b\x76\x80\x84\x75\xce\x35\xb3\x64\x8f\x78\x39\x73\x58\x6f\xde\xd7\xe4\x78\x4b\x4f\xaa\x5c\x17\xcb\x0c\xf9\x84\xfa\x4b\xd1\x58\x0f\x61\x39\x9f\xd9\x2b\xe7\x11\x4b\x1e\xa2\xb8\x60\x82\xeb\x96\x65\x52\xb7\x73\x7f\xb4\x3f\x97\x0b\xdb\xaf\x76\x35\x73\xbc\x13\x4e\xea\x4a\x46\x07\x7a\x38\x2a\xdc\xd4\x3a\x0a\x47\x80\x99\x05\xcc\x74\xae\x40\x33\x78\xdb\xa5\x5a\x58\x02\x6b\x99\xae\xdf\xba\x69\x33\x32\x2e\x3f\x3e\xf5\x46\x13\x59\x96\x22\x97\x3f\x7e\x34\x1d\x33\x60\x70\xb4\xb3\x34\x1b\x55\xf9\xf9\xb2\xdb\x19\x2b\x42\xe5\x12\xee\x05\x2c\x0f\x2c\xac\x1a\x5f\x9f\x76\x72\x52\xb5\x6d\x11\x1c\x89\x6b\x96\x6a\xe9\x08\x84\xb2\x8f\x74\x1e\x76\x06\xb8\xec\x60\x09\x11\x83\x8a\x48\xb3\x18\xd4\x69\x9e\x31\x11\x0c\x56\xa4\x3a\x81\x01\xa9\xd7\xfd\xe9\x94\x99\x27\x18\x83\x4d\x77\x48\x6b\x88\xaf\x91\x53\x4e\x2d\x84\x64\xae\x27\xd9\x42\x4b\x53\xab\xa7\xef\x67\x2d\x7d\xbf\x9a\x92\x45\x92\x8a\x57\x19\xbc\x78\xbf\x9a\xb6\xf4\xd4\xb0\xb3\xf5\x29\x5f\xff\x61\x99\x75\x29\x6f\x29\x89\xa6\x42\x4c\x23\x0a\x67\xbc\x3f\x65\x4f\x1d\x61\xae\x14\x3c\x8d\xde\xd5\xdb\x88\x45\x6f\x8b\xeb\x1b\x15\xb1\xe8\x8b\x5a\xa9\x7a\x13\xb1\xe8\x5b\xb1\x56\x51\xc6\x2a\xc1\x07\x67\xfc\x90\x65\xd5\xbb\xb4\x75\xf6\x71\x3d\xb8\x65\xb8\x11\xaa\xf5\xb9\xab\xde\x6c\xeb\x46\xac\xc0\xea\xaf\x02\x41\xec\x6d\x5d\x1b\xf0\x1c\xf2\x07\x92\x6d\xdb\x20\x11\x52\x03\x8e\x7a\x2f\x9e\x69\xd2\x7c\x9c\x1b\x36\xaa\xea\x0a\x44\x3c\x22\x38\x32\x76\x35\xea\xa1\x04\x62\x35\xa0\xfc\x6e\x8d\x0b\x4a\x10\x1a\xc7\x85\x80\xb3\xa0\xfb\xfa\x72\xb6\x84\x75\x28\x32\x31\x22\x80\x41\x1e\x68\x28\x9c\x75\x2e\xcb\xf9\x23\x8e\xbc\x1a\x0f\x66\x79\x5a\x67\x36\x9b\xb4\xce\x58\xf7\x93\x2b\xcb\xc2\x53\xa3\x8e\x42\x3a\xde\x55\xd8\x3f\x28\x53\xd4\x8b\xad\x13\xea\x4e\x76\x9d\x94\xbd\x13\x63\x85\x78\x36\x67\x0d\xaf\x86\x38\xa4\xc7\xd5\x6c\xb9\x93\xc4\xc7\x8a\xf7\xbb\xc4\x6c\x6d\x60\x8e\xb0\xe3\x7a\x14\x97\x5a\x56\x97\x80\x21\x4b\x20\x02\x72\xe1\xa7\x2a\x5b\x44\x51\x12\x6d\xef\x23\xca\x96\x81\x9b\x44\x2f\x5a\xdb\xea\x48\x13\xce\xcb\x38\x9e\xee\x68\x1c\x2b\x81\xe6\xc4\x2e\x3b\xf4\xc2\x5d\xc6\xf1\x32\xfd\x2c\x03\x67\x77\x90\xc8\x76\xa7\xfc\x19\x2b\x79\xd9\xb6\x3a\x9c\x2d\xf9\x74\xd7\xb6\x67\x38\x49\x2f\xb1\x5d\xa0\xb0\xcb\x69\x49\x19\x39\x3b\xa9\xe9\x53\x72\x76\x42\x6a\x5d\xec\xd3\x5d\xdb\xce\xfe\x93\xd2\xe7\x7c\x1e\xc7\x24\xe7\x73\xca\x96\xa7\xbc\x3e\x5a\x3e\xe5\xcf\xd8\xe0\x63\x73\x25\xbe\xf7\xfc\x02\x96\x7c\xba\x6c\x5b\x9d\xe3\x5c\x6f\xc4\xe9\x59\xb6\x58\x4e\x89\xfe\x3b\x3d\xa3\x4f\x65\xfa\x2c\x4b\xa6\xfa\x5f\x56\xe9\x85\x60\xb6\xab\x0a\xc5\x4b\x56\xcd\x1a\x95\x4b\xc5\x97\xac\x9a\x89\x6a\xc5\xc1\xa5\x1c\xd4\x23\xa5\x80\x71\x61\x3b\xcd\x23\xa8\x04\x6c\x98\x70\x02\x54\x9e\x23\x13\x2b\x78\x29\xfc\x43\x3d\x28\x2d\xe4\xec\xaa\x5e\x3d\x04\x2c\x22\xb2\xe7\x9c\x06\x78\x19\x66\xfc\x2a\x6f\xfc\xb2\x8f\x51\x57\xba\x71\x8f\xc2\x44\x74\x55\xd6\xcb\x0f\x11\x65\x50\x04\x5e\x04\xb4\x9f\x03\x56\x4b\x2d\xf4\xa2\x11\xc4\x9c\xe5\x1d\x30\x49\xfd\x3c\x3f\xaf\xa7\x53\x4a\x2a\x80\xef\x36\x13\x11\x7c\xc7\xab\x70\xfa\x31\xb5\x20\xae\x04\xba\x17\x0a\x3d\xf0\x71\x35\xae\xbc\x2a\xb4\x2d\xe2\x1b\xa4\xb5\x1e\x95\xbd\x44\x38\x70\xb5\x45\xa8\xef\xec\xcd\xee\x5c\x80\x15\x0b\xa6\x8b\xd6\x4e\x34\xc1\x1c\x27\x5e\x8e\x18\xc2\x50\x74\xf7\x32\x46\x3d\x1c\x3a\x70\xce\x5d\xbd\xf0\xaa\xaa\x40\x64\x72\x5d\xc3\x5e\x79\xf4\x1b\x0f\xc9\x28\x90\x3e\x9a\x9b\xfa\x6e\x64\x26\xae\xcd\x4e\x0b\xb2\xf2\x4d\xb1\x1a\xbb\xf7\x37\x71\xe8\x9e\xa9\xfa\xfa\xba\x1c\xdb\x85\xa3\xab\xba\x2e\x45\xee\x5f\xcc\x2e\xcc\xa1\x42\x67\x4c\x8c\x5d\xbb\xce\xc0\xfe\xee\x6f\xfd\xb9\xc9\x65\x71\x89\x7f\xed\x87\xf6\x11\xbf\xdd\xbb\x0d\xee\x46\xa0\xaa\xc0\xe2\x30\xb5\x80\xcc\x04\x9c\xe8\x2b\xc1\x4f\x43\xaf\xa5\x9e\xd3\xd2\x69\xc1\xb6\xfa\xf3\x27\xed\x3f\x36\xf5\x6a\x57\x8a\x27\xed\xfb\x53\xb2\x48\xfe\x99\xdf\xe6\xad\x58\x6e\x72\xda\x2c\x65\xb1\x55\xa7\x05\xdb\x08\xfe\x88\xd0\x6e\x49\x7a\xc6\x22\x4b\x3c\xb4\xd9\x95\xaa\xd8\x96\x82\xff\x87\xfd\xf5\x1f\x9f\x47\x2c\xea\x28\x87\x32\xa6\x6e\x44\xbe\xc2\x8f\xc0\xa3\x14\xdf\x9b\x9f\x19\x5b\xd6\x65\x92\x3e\x73\x2f\x9f\x2f\xeb\xf2\x5a\xd6\xbb\x2d\x46\x73\x4f\xde\x17\x4a\x06\x1f\x28\x3d\x31\x4d\xa2\xf0\xd3\x8f\xba\x4a\xd2\xcf\xfa\x51\x9f\x2b\x69\xa2\xcb\xcf\x47\xbe\xb9\x34\x1e\x8b\x49\x3a\x67\x51\xc4\xa2\x28\xf3\x96\x91\x5b\x9f\x0b\xd6\xa9\x16\xf8\xef\x50\x63\x2e\x0e\xf0\x18\x22\x90\x0d\x4d\xbc\xcf\xfb\xf4\x41\x8b\x11\x46\x21\xfb\x59\x9a\xb1\x9e\xda\x0f\x1d\xde\x16\xce\x1e\x54\x80\x92\x5a\x86\x9c\x9e\x3d\x5c\x33\x58\xfc\xec\x41\xfc\x79\x75\x2e\xa7\x53\x8a\x13\x51\xa4\x32\x63\xd1\x75\x59\x5f\xe5\xe5\xab\xdb\xbc\x8c\xc0\x83\x18\x57\x07\xd5\x7f\x47\xe9\x7e\x23\x66\xf5\x56\x41\x7f\x71\xfc\x5d\xd4\x15\xdb\x88\x19\xb4\xb1\x0e\x52\xeb\xba\x56\xfa\x87\xed\x57\xf8\x9d\xe3\xed\xd6\x06\x0c\x18\xf2\x15\x7c\x71\x03\x8f\x2b\x18\xe2\xd7\x82\x5d\x09\x76\xa9\x47\x73\x1b\xff\x9f\xc5\xfb\xbb\xe9\xf9\x69\xd7\x25\x77\x87\x00\x95\x2c\xa8\x07\x5b\x73\x65\x96\x6a\xbb\xe0\xbf\x96\xf9\x35\xac\xd9\xd4\x82\x15\xcd\xd9\xb6\x6b\x86\xd5\xf3\xed\xf9\x0a\x9d\x15\x00\x70\x69\x95\x51\x44\x9c\xac\x69\xff\xd2\xa3\xa6\xd4\xb6\xf6\x0d\xab\x3d\x44\xa2\x3a\x4b\xea\xee\xae\xe3\xd2\xb8\x5d\xd7\x46\xf9\x91\x73\x40\x54\x08\xe8\xb4\xfa\xbe\xce\xab\xe2\x56\x2f\xac\x0d\x27\x2b\xb3\x81\xd7\xb4\x6d\x53\x1c\x93\x74\x08\x66\xbf\xe3\x1b\x91\x36\x59\xdb\x6e\xc4\xcc\x0e\x62\x96\x7b\x4e\xc3\x3b\xbd\x99\x5e\xce\x6e\xd4\xa6\xfc\x41\x0a\x63\x9f\x5b\xd3\xe9\x4e\x6f\xab\x4b\x70\xeb\x47\x14\xa1\x9c\xe7\x1d\x64\xf2\x51\x57\xbf\x3c\xe0\xbf\x27\x39\x5f\xfb\x36\xcf\x3e\x30\x29\x8f\x22\x54\xc3\x19\x4c\x17\x5b\xb9\x77\xe2\xde\x08\x98\x66\x5d\x5f\xf7\xbe\xd2\x5d\x71\x5e\xf3\x9b\x74\x65\x91\x24\x2a\xf0\x21\x32\xb6\x84\x35\xab\xe8\xe7\x27\x67\x14\xcc\x91\x0c\xe0\x95\x6b\xe4\x92\x17\x70\x19\x9f\xf3\x5b\x41\xc2\xc6\xad\x29\x8b\x70\x2d\x8b\xe0\x66\xe9\x41\x90\x9c\x32\x24\x5d\x5e\x42\x8e\x79\xba\x84\x1c\xb7\xb6\xa7\x2c\x46\x62\x44\x9d\x07\x6a\xdd\x11\x58\xee\xaf\xb5\x40\x7f\x68\x54\x05\x79\x57\x07\x3a\x96\x5c\x75\x49\xf4\xa9\xd8\xfa\xd4\x6a\x86\x89\x0d\xd6\xf6\x88\xb2\x2b\xd1\x7b\x6f\xe9\xe8\x58\xd4\x11\xd3\x0d\x22\x19\x7e\x36\xdd\x04\xd7\x21\x95\xdb\x95\xa0\x6c\x8b\x20\x9e\x2f\xcb\xba\x12\xfc\x5a\xcc\x96\xfa\x07\xf4\xd5\x64\x4e\x7b\x4f\x6e\x70\x58\xe0\x4f\x9d\xa0\xef\x9d\xae\x3b\x35\x97\x22\xff\xfc\xfe\xf9\xa9\xfb\x1d\xb1\xed\xac\xaa\x21\x83\x97\xf8\x19\x9f\x4c\x06\x39\x75\x69\xfb\xae\xe3\xb0\x10\xbc\xd2\x9b\xd5\x07\xf1\x70\xca\xee\xcd\xae\xb7\xa9\x77\x8d\x68\xb7\x75\x51\x29\x21\xdb\x25\x3a\x00\x6f\x44\xb5\x6b\x57\x32\xbf\x6e\x57\xb2\xde\xd2\x76\x59\x16\xcb\x0f\xa7\xec\x02\xbe\x49\xff\x31\xcb\x9e\x52\x7d\x1a\x9c\x91\xd9\x94\xb6\xd4\x5b\x4a\xde\x08\x9f\x3e\xc0\x05\xbf\xf0\x82\x3d\xc6\xed\x0f\x22\x74\x2f\xe6\x9c\xf7\xcc\x9b\xdc\x09\x20\x00\x75\xed\x2c\x9e\xf6\x7b\x42\x39\x27\x11\x40\xc2\x82\xc6\xc8\x93\xf6\xde\xf5\x50\xda\xe0\xe8\xc5\x9a\xf0\xda\xd5\x5d\x54\x3d\xda\xab\xd7\xc1\xf9\x5b\x82\xc2\xb4\x6a\x5b\xc9\xa4\x3b\x82\x2b\x0a\xc9\x37\x90\xbc\x4a\x9b\x8c\xd5\x9e\xc4\xa4\x67\x1d\x5c\xf2\x56\x08\x0f\xc3\x79\xb1\x20\x05\x97\xac\xe2\x2e\x89\xc4\xbc\x88\xe3\xe1\xbd\x99\xd4\xb1\x2b\x56\xb9\xb8\xe6\xd1\x2b\x81\xc1\x13\x2f\x68\xc1\x5f\x08\x37\x83\x27\x85\x03\x0e\xf0\xd1\xf0\x6b\x38\x52\x14\x8c\x14\xa3\x07\x5b\x42\x67\xf5\x7a\x4d\x04\xd8\x03\x8d\x99\x28\xee\xe9\xec\x7a\x57\xac\x78\x0e\x7f\x00\x2c\x0f\x9e\x2f\xe1\xcf\x74\x0a\xa6\x5b\x43\x1d\x8c\xb8\x15\x95\x42\x0b\x23\x74\x8a\x28\x58\x05\x37\xca\x5d\x27\x7d\xe7\xe0\x22\xe5\x82\x3c\x71\x97\x10\x93\x33\x50\x94\xba\xef\x75\xd8\xa3\x23\xb9\x4e\x26\x67\xec\x06\x58\x5d\xe4\xe0\x1e\xa9\x02\x2e\x6a\xb3\xc7\x42\xae\x70\x56\x3b\x8b\xc5\xac\x68\xde\xc9\xe2\xfa\x5a\x48\xe3\x92\xa5\xd0\x99\xd3\x6a\xd1\x29\xb1\x39\x02\x96\x41\x5e\xc2\x51\xf0\x71\x4f\x67\x2b\x51\x8a\x6b\xbd\xf8\x5a\x5a\x7a\x55\x6f\x7f\x90\xf5\x36\xbf\xce\xb1\xae\xae\xfd\xf3\x11\xeb\xa3\x27\x9d\xc2\x59\xb1\x1c\x14\xa6\xb6\x64\xcc\x94\x83\x50\x96\x4f\x38\x27\x45\x58\x70\x7d\x6c\x58\x04\x9f\x03\x47\x35\x7f\xdc\x43\xf4\xae\xaf\xa1\x44\xdf\x6c\x36\x62\x55\xe4\x4a\x04\x45\x63\x02\xdc\xb6\x44\xa5\xbe\xc4\xd5\x00\xf4\x3c\xb7\x1d\xf7\x4e\xde\xdd\x45\x04\x59\x99\x9b\x61\xdb\x26\x0a\x9b\x8e\x38\xf5\x75\x9e\xce\x33\x76\x39\x03\xc3\x88\xee\x4a\x5b\x0f\x21\x0b\xe8\x6c\xfd\x37\xd9\xc7\xca\xa7\xe5\x70\x4f\xcd\xd8\x69\xb5\xf5\xae\x15\x0e\x80\x37\x82\xee\x4d\x18\x7f\x44\xc9\x29\x79\x1c\x7a\xca\x05\x7c\x12\xbe\x14\x63\xf9\x1c\xd8\xad\xcd\x86\x22\xf3\x02\xdc\xa6\xcc\xcc\x88\x82\x63\x1e\xa9\xb9\xa4\x36\x04\x6c\xca\x2c\x5a\x05\x28\xa8\x0f\x79\xd5\x0b\x40\x92\xb1\x93\x44\xf6\x26\x09\x23\x3b\x7e\x8b\xe5\x6f\x68\xdb\x7a\x4f\x80\xee\x49\x72\x7e\x6b\xb2\x44\x23\x0e\xfb\x14\x98\x2d\xf5\x6f\x44\x2e\xbb\x76\x32\x5d\x04\x84\xfa\x0a\x51\xe6\xec\x2b\x7d\xb2\x03\x9c\x07\xab\xaf\xf1\x2c\xd7\x0c\xb5\x30\x65\x25\x27\xe6\xaa\x21\xa2\xfe\xa5\xb1\x96\x96\xac\x64\x57\xc2\x8d\x31\xdf\x70\xc0\xfa\x42\xa9\x4a\xa5\x65\x66\xd0\x86\xce\x32\xb6\xe5\xa4\x49\x9f\x19\x3a\x22\x03\x7d\x33\xb3\xd8\x37\x94\xad\xe2\x98\xac\x79\x7f\xa6\xad\x60\xa6\xb1\x15\x27\xc5\x62\x1d\xcc\xb7\x64\x3d\xbb\x2a\xaa\x95\x61\x38\x58\xb1\x83\xdf\x2e\x79\x77\xb3\x02\x50\x6a\x2b\x56\xcb\xe2\x1a\xd2\xd8\xe0\xd5\x63\xe5\x56\x0d\xc9\x74\x9f\x24\xd8\x43\xcc\xf6\x6d\x52\x30\x1f\x07\x23\x81\x9e\x3e\x00\x92\x61\x7c\xb4\x29\xeb\x56\xa5\xad\xc1\xf5\x99\x45\x70\xdd\xc0\xc8\x0d\xdf\xa1\xe8\x4b\xcc\x4f\x9e\x66\xdd\x6a\xf2\xb2\xde\x55\x8a\xcf\xd9\x5a\xcf\xba\xdd\x36\x8e\x27\x67\x13\xce\xcd\x53\x07\x57\xb1\x65\x39\x68\x17\xfb\x46\x48\x7a\x21\x1a\x18\x26\xad\x58\x4e\x29\x5b\xeb\x17\xba\x9d\xf5\x5f\x9b\xd2\x92\xb2\xa5\x1d\xd1\x76\x84\x86\x01\x1c\xff\x50\xca\x8a\xc5\x8d\x75\x5b\xb9\x09\xcb\x3b\x9d\xb2\x39\x5b\xd2\xc4\x88\xa5\xcb\x6e\x99\xc6\x09\xa9\x2b\xe9\xdd\x97\xfd\x81\x89\xd9\x5d\x18\xc7\x71\x30\x4d\xe3\xd8\x9f\x3f\x16\x01\xf4\x13\x87\x6c\xb1\x26\xff\xab\x51\x8b\xd9\x1d\x1c\x7c\xd0\xbd\x9c\x54\x1f\x1f\xbc\x40\x0b\xc2\x1a\xde\x00\x1d\x57\x8f\xf0\xe8\xfd\xfb\x19\x8d\xa6\x76\x0c\xbd\x7f\x3f\x23\x8b\x64\xf6\xf4\xfd\xfb\x59\x4b\x23\x3a\x8d\x88\xfe\xf5\x84\x46\x40\x41\xc1\x6f\x3c\xcc\xad\x73\xba\xe4\x37\x00\xb9\x55\xc4\xf1\x66\xc2\xf9\x72\x66\x07\x7e\xdb\x02\xc2\xbe\xee\x55\x08\xc7\x6e\x6f\xe2\x78\xd2\xe0\xf8\x5d\xce\xdc\xf0\xd5\x9b\x4d\x1c\x57\x10\xaf\x71\x8c\x8e\x24\x7a\xfa\x14\xcc\xed\xda\x76\xd2\x85\xeb\x21\x7d\x13\xe0\x6c\xf9\xdf\xf4\x86\xcc\xc9\x09\x5b\x1b\xad\x5d\x1c\xdb\x5f\xdd\xa8\xa4\x47\x79\x1c\x4f\x6e\xba\x5d\x48\x9f\x68\x72\xb9\xaa\xef\x2a\x37\x25\x6c\x80\xfd\x6a\xcb\xbc\x95\xf2\xd2\xb7\xac\x24\x82\xad\xba\x97\xf6\x9a\x10\xa6\x61\x07\xcf\xbc\x3a\x2e\xaa\xe3\x1d\xb5\x7d\xe9\x2e\xdf\x56\x53\x3d\x28\x60\x98\x4e\xe6\xf4\xa8\x6f\x6c\xb2\x83\x11\xe9\x62\x47\x98\xc9\x31\x0e\xc8\x88\xee\xc1\x7f\x6a\x3b\x70\x4c\x09\x5c\xfe\xf4\xb0\x77\x83\x68\x5d\xdc\x6b\xa1\x6b\x07\x37\x26\x78\x3e\xeb\xdf\xca\xc1\xaa\xec\x09\x05\x91\xcd\x0d\x24\x93\xb4\x41\x5c\x35\x18\x57\xcb\xc1\xe0\x74\x6f\x8d\x82\x5f\x1f\x50\x79\xc3\x14\x3f\x3b\x57\xcf\xfb\x39\x01\xe6\xc9\x2e\x55\x9e\xbd\xb3\xe1\x51\x6d\xba\x31\x0d\x5c\x0f\x78\xc3\x35\x59\x6a\xc1\xe2\x4b\x53\xe3\xb6\x85\xae\x0a\xc2\x3c\xe7\xf8\xc6\x1d\xdb\x6d\x19\xcd\xc2\xd3\xf8\x91\x58\x89\x08\x2c\xa4\xe0\x79\xaa\xa6\xd3\x8c\xc2\x48\x2d\x1a\x4f\x62\xb8\x50\xf5\x76\x2b\x56\x84\x9e\xa3\xb1\xe4\x6c\xb9\x93\x52\x54\xca\x14\xad\x98\x89\x52\x6c\x98\xd4\xa9\xd4\xbc\x70\xd9\xa4\xd2\x4b\x6e\x4c\x12\xf1\xd2\x6d\x66\xd2\xcd\x0a\x33\x04\xeb\x99\x1f\xe2\x47\xb0\x87\x5d\x7f\x1e\x91\xc6\xe4\xfb\xe6\xea\x9f\xbc\x66\xcd\x4c\xef\x3e\xbc\x86\x3f\x9d\x6d\x18\xa9\x38\x19\x88\x9c\xb5\x9b\xbb\x46\xf6\xc4\x84\xda\xb6\xb6\x55\xa1\x66\x0f\x37\x35\xdd\x01\x8f\x85\x16\xf2\x49\x33\x93\xa2\xd9\x95\x8a\x83\xc6\xb8\x19\xca\x7d\xcd\x50\x72\xed\x2e\x00\x97\xb3\x6d\xdd\x28\xdb\x77\x71\x1c\x3e\x07\x7d\xc9\x6c\x4e\x60\xcf\x85\x0d\x7c\xd8\x38\x06\x86\x7c\x9a\xb1\x1d\x57\xe1\xc2\xc0\x4a\x2e\x66\x48\x1f\x02\xb8\xeb\x71\x5c\xfa\xd6\x2f\x24\x82\x73\xa7\xcf\x87\x20\x66\x48\xb8\xf0\x39\x3f\x33\x16\xa9\xa5\x96\x75\x6e\x8a\xe6\xbc\xe4\x65\xe0\x7e\x0e\xb2\xa7\x01\xdf\xf2\x93\xb5\xa9\x4e\x3a\x16\x07\xb0\x5b\x2e\x1d\xa3\xb9\x19\xaa\xc6\x3b\xf7\x71\xcf\x90\xbb\x60\x07\x8a\x3d\x27\xa8\xe6\x69\xa1\x7b\x10\xc0\x4e\xdd\xda\x67\x89\x6f\xf3\xb4\xc8\x78\x15\xc8\x0b\x8b\x4b\x52\xa0\x40\x6c\x70\x2f\x4a\xf0\xe9\x34\x20\x43\xf8\xca\xf0\xd1\x96\x6e\xef\xa2\x4c\xa7\x14\xc7\xce\xd9\xf5\xa8\x76\xeb\x64\x63\xe0\x63\xf5\x28\x48\xca\xae\x1f\xea\xbd\xb3\xd3\x29\x8d\x1b\xd6\x73\xf5\xbb\x5f\x29\x8b\x01\x09\x58\xb7\x20\x54\xeb\x71\xd2\xeb\xd5\x71\x93\xd2\xc1\x21\x80\x09\xf6\x28\xaa\xdd\x46\x58\x6b\xd2\xbe\x75\x29\x58\x79\x82\x03\x8e\x77\x5e\xb4\xa6\x51\x7a\x02\x14\x55\x5e\x42\xa2\xce\x06\x66\xec\x5d\x70\x25\xf8\xf1\xcf\x07\x6f\x52\x91\xf5\xac\x5b\x0f\xd6\xcf\x18\x34\xfc\x4e\x95\xee\x64\xa1\xec\x6f\x63\x54\x0b\x97\x0c\x7b\xb6\x2e\xc6\x61\x46\x52\x67\x24\x9c\x2d\x44\xa2\xf7\x00\xd3\x92\x60\x2c\x67\x56\x84\xe4\xb1\xac\xf3\x55\xf2\x58\xd5\x5f\xec\xae\x8c\x6d\x2e\x83\x21\x9c\x3c\x82\xa4\x38\x62\x49\xa9\x0b\xdc\xb6\x4e\x03\x70\x23\xac\x6b\x85\x01\xcf\x54\x33\x48\x20\x8e\x3f\x10\xc5\xac\xc6\x2c\x8e\xbf\x03\xa0\x45\x9c\x1e\xfa\xb0\xc5\x26\x67\x7b\x66\x0e\x15\xff\x6f\x72\xa1\x4c\xd7\xc6\x5d\x18\x8c\xd8\x84\xda\xf5\xe1\xdf\xcc\xc4\xec\x98\x2e\x9f\xb6\x85\xf7\x39\xec\xd2\x57\x62\x5d\x4b\xb1\xab\xb0\x61\xfd\x55\x2e\x2c\x41\x77\xa9\x80\xab\x9d\x5e\x7f\x82\x31\x04\xa6\xb0\x41\xc8\x0c\xcb\x09\x1a\x37\xf7\x1d\xdd\xef\xf7\xe8\x8c\xe2\xc4\x94\x81\xe9\xfd\xa8\x7b\x88\xce\x70\xcc\x6b\xc4\x98\x32\xce\x86\x49\x59\x94\xd8\x9b\xa2\x09\x00\xaa\x30\xaa\x73\x17\x0a\xc6\x1a\x53\xe0\x82\x8a\xab\xe1\x62\x64\x12\x59\x44\x27\x30\x59\xc7\x68\x18\x50\x34\x66\x6f\xf9\x01\x77\x1a\xb1\xe2\x0e\xaf\xd2\x05\x59\xa2\x4d\x58\xc6\xfb\x2f\xcd\xd6\x25\xfc\x76\x5b\xbc\x11\xc9\x0b\x9b\x25\xee\xea\x76\x18\xc4\xf1\x67\xb8\x1b\xc0\x93\x67\x85\x6c\x43\xba\x1d\x20\xb1\x61\x98\x50\x28\x25\x88\xf0\x19\xa3\x00\x5c\xad\x58\xb9\x28\xc1\xb3\xb9\x6c\xc4\x26\x60\x0a\x0f\x86\x70\xd8\xf4\x55\x39\x33\x55\x6c\xc4\x85\xca\x37\x5b\x8e\x2d\x6a\x1f\xdb\xf6\xcb\x5c\x89\x59\x55\xdf\x11\xa3\xf4\xe9\xe6\x3e\x87\x39\xd0\x5f\x43\xf9\xa3\x87\x43\x96\x98\xd7\x6c\xd8\xe2\xba\xa9\xc6\x04\x24\x0c\xff\x88\xa4\x83\x11\x2e\x8a\xcd\x0e\xaa\x99\x4c\xce\x58\x28\x30\x0c\xbd\xa6\x87\x43\xe3\xe8\xd0\x38\x78\x23\x98\xde\xc3\xcd\x6b\x97\x0b\x30\x53\xf5\xc4\x92\x3d\xeb\x49\x25\xff\x4e\xc6\xc3\x7a\x7d\x2c\xeb\x81\xf8\x83\x79\x8f\xb5\xd2\xbf\x53\x88\x8f\xb4\xf2\xef\x95\xe6\x80\xd2\x0e\x6f\xbc\x07\xa5\xdd\x3b\xa4\xa5\xbc\x54\x7f\x15\x0f\x7a\xaf\xb9\x82\x6d\x01\xf0\xcc\x96\x7a\xba\x97\x6e\x83\xba\xc9\xab\x6b\xb1\x7a\x57\xef\x00\x4f\x5e\x87\x28\x59\x9a\xaf\x56\x42\xe5\x45\xa9\x7f\x41\x67\xfc\x70\x93\x37\xf0\xd1\x46\xa8\xdc\x44\xd9\xe6\xd7\xe2\x17\xfb\xe3\x57\xfd\x03\x0c\x31\xcd\xdb\xdb\x42\xdc\x99\x5c\x24\x6e\x87\x2b\x9b\xab\x7c\x69\x7e\x7f\xc0\xa8\x1f\xc4\x83\x0d\x31\x44\x5c\xee\x17\x16\xab\x2c\x44\xa5\x7e\xe9\x7e\x42\x66\xf5\x7a\xdd\x08\x0c\xc5\x9f\x10\x6a\x6e\x2a\xbe\x59\x79\x0f\x70\xd2\xd6\xc5\x5b\x4a\x21\xaa\x5f\xba\x9f\xf0\x05\xae\x02\x5e\x2b\xa8\xda\xdc\x23\xe0\x83\x0b\xbf\xbb\x29\xc6\x4e\x6e\xdc\x0a\x9d\x21\x79\xaf\x98\x41\xfc\x38\x7e\x65\x01\xa1\x71\x4b\x5a\x18\x3f\xe0\x99\x6d\x88\x45\xf7\x33\x11\x33\xd7\x16\xee\x7b\xdf\xbf\xe1\xbe\x97\xd6\x59\xac\x16\x67\xc9\xb3\x58\x2d\x3e\x4b\xfe\x1c\xab\xc5\xb3\x64\x9e\x98\x0f\x71\x2c\x58\xfd\xa8\x1e\x26\x1d\x0c\x17\x32\xe4\xe1\xad\x48\x51\x45\xec\xaa\xdc\x49\xf3\x58\xef\x54\x34\xc4\x34\x0a\xcf\x20\x22\xe3\x7d\xd1\xc2\x09\x2d\xdf\x39\xfb\xce\x0f\x87\x04\x84\x61\x5c\xdc\xe6\x03\xc5\x88\xf2\x61\xc3\xe0\x12\x4a\xaf\x1b\x32\x89\xe0\x77\x7d\x2b\x64\xc4\xe0\x67\x29\xf2\x5b\x61\x83\x77\x2a\xb2\x9d\x6e\xa2\x9b\x27\xfc\xc0\x3c\x98\x4f\xec\xab\x4f\xac\x71\x58\x3c\x66\xf5\x36\x89\x32\x42\xf2\x60\x64\x80\xeb\x4e\xb8\x4b\x00\x6f\x81\x3b\xfa\xb9\x01\x03\x17\x48\xdc\x08\x4c\x7d\xf4\xbe\x0a\x88\x21\xb0\xc7\x79\xe1\x8e\x7f\x4c\x76\xa7\xd7\xf1\x4b\x19\x66\xbe\x01\xcc\xf1\x81\x95\x70\x40\x77\x67\xad\xed\x4c\x81\xde\x75\x46\xba\x10\xbe\x67\x75\x35\x54\xd5\x1d\x8a\xce\xce\xf4\x07\xeb\xf5\x21\xbf\x30\xb0\x5d\x1f\x2e\xf4\x3a\xc4\x35\x8d\x13\x44\xfc\xf6\x62\x97\x44\xf4\x54\x0d\x78\x31\x55\x75\xa7\xeb\x45\xe5\x5a\x68\x1a\xcd\xa2\xa9\xf7\x2a\xe9\x5e\x01\x95\x09\x1e\xc9\x58\xe5\x0e\xce\xb0\xaa\x8e\x5e\xff\x19\xc2\x1d\xc0\xd4\x14\x14\x17\xfa\xf5\x1a\x80\xdf\xc5\x01\xec\x4c\x50\x0b\xa8\x38\xee\xb0\x24\x3a\x4c\x60\x40\xae\x51\x4c\xb9\xdb\x42\x10\x72\xf0\x66\xe1\x85\xc1\x0f\x3c\x78\x5d\x16\xf8\x0c\x30\x89\x2e\x0a\x16\x95\x15\x0c\x92\x16\x93\x5c\x8a\xbc\xbd\x92\xed\xb2\x2e\x5b\xb1\xb9\x12\xab\xf6\x46\xb6\xc5\xe6\xba\x05\x01\xb8\x2d\x8b\xea\x43\xab\x57\xf2\x76\x9b\xcb\x7c\x43\xc9\xc7\x6c\x98\x00\xd2\x95\xbe\x3f\xfd\xfc\xf4\xba\x60\x6f\x75\x06\x78\xcf\xdf\x3e\x07\xa3\xb0\xf6\xb9\x4e\xed\xb4\x60\x3f\x08\x7e\x6a\x2e\xab\xdf\x37\x4f\xc9\x22\x49\xff\xc1\xb3\x96\xbf\x6f\x9e\xda\x3b\xec\x19\x3d\x2d\xd8\x3f\x05\x3f\xfd\xc7\xfb\xe6\xe9\xf3\x09\x59\x24\xef\xd3\x97\x5f\xbe\x78\xf7\xe2\x7d\xda\x9e\x9c\xd0\x56\x07\x64\xef\x33\xfd\xfb\xf3\xf7\xcd\xd3\x27\xbe\xe7\xd5\x97\xe1\x5d\x30\x42\xb6\xe9\x9d\x4c\x4b\xf3\x1f\xc8\x10\x28\x50\xf9\xe0\x72\x91\x92\x3a\x1e\x40\x04\x5b\x90\x39\x12\x81\xd5\x4c\x44\xd3\x79\xd6\xb6\x1e\x4e\xd9\xf7\x21\x63\x19\xcc\x21\x82\xab\xf6\x21\x9a\xc5\x69\x74\x1a\x4d\x8d\xe4\xeb\xa5\xf4\x8d\xe8\x39\x68\x9d\xa2\xf9\x6e\x67\xf9\xe0\x38\x81\xfe\x93\x2e\x84\x2f\x40\x3b\xe7\x9b\xc4\x8a\xf8\x83\x5c\xfd\x9c\xbe\x15\xa3\x6a\x15\xb6\x43\x10\x95\x1e\x3f\xab\x3e\x04\x84\x8a\x74\x52\x7b\x9e\x20\x14\x2e\x48\xe1\xaa\x8f\xd5\x94\x95\xbc\x76\x4a\x75\x37\x0b\x8c\xe2\x34\x37\x93\x87\xe5\xdd\x4d\x15\x2b\x0d\xf0\xd8\x9c\x55\xbc\x4c\x8b\xac\x6f\xfc\x14\x5c\xfc\xb2\x82\xe9\x38\xa9\xcc\xe8\xd1\x8f\x61\x99\x1a\xfe\xa3\x57\xa6\x1d\xf7\xa1\xd2\x1a\xca\x8c\xa3\x0e\x62\x8c\xb8\x96\x78\xed\x19\x0f\x2b\x6e\xef\xab\xd3\x4c\x9f\x62\xac\x31\x71\x67\xb7\x34\x67\x37\x9d\xe7\xf5\x8a\xdf\x9c\x9c\xb1\x5b\x40\xd4\x66\x0f\x7c\x43\x6e\xe1\x62\xe1\xa1\x6d\x01\x53\x6f\x70\x0b\x7f\x1b\xc7\x13\xdf\xa8\x23\x8e\x7f\x30\xfb\xf3\xad\x87\xcf\x1f\xce\x63\x07\x97\x23\x66\xe2\x37\x52\xd0\xa3\x87\x38\x26\x40\x87\x7c\xeb\xa9\xd0\x0a\x56\x83\x15\x11\xa1\x94\xb2\xd7\x82\xd4\x76\x21\x86\x02\xdd\x40\x7f\x91\x82\xdf\xe9\xa3\x32\x70\x7c\x85\xd6\xb6\x93\x33\x26\xf4\xbe\xe1\x4f\x01\x30\x06\xf0\xcc\x8b\x7c\x0f\xb3\x9a\xb2\xba\x6d\x2b\xa3\xd8\xda\x71\xd2\x18\xac\xc2\x5b\x41\x0a\xcf\xae\xe7\x7b\xe1\x08\x4b\xce\xd7\xcf\x6f\xce\xd7\xd3\x29\x2d\x79\xc1\xd6\x13\xce\x57\x40\xed\x71\x89\xb6\x26\xa4\x64\xe0\xef\x4f\xd9\x4e\x9f\x84\xd0\xbc\xa9\x61\xb7\xfa\x85\x4b\x8e\x52\x26\xad\x6b\xf8\x3a\x63\x25\x5b\x53\xa4\x57\x44\x9b\xa1\x26\x6d\x3a\x2c\xe7\x5e\x05\xb1\x74\x0d\xfb\x46\x50\xdd\x89\xe7\xeb\xe7\x3b\x53\x98\x46\x27\x65\x4d\x8c\x4a\xdf\xc4\x68\xe2\x06\x78\x19\xda\xd5\xe9\x12\xba\x2d\x77\xc9\x4a\xe0\x76\x9b\x35\x72\x19\xc7\x11\x5a\x6d\x46\x13\xce\xfd\xc4\x7a\x14\x13\x97\xb3\x4b\x71\x9b\x97\x3f\xc9\x32\x8e\x27\xe5\xac\xaa\xbf\x83\xaf\x74\xba\xf6\x05\x26\xc8\x1e\xab\xba\x5a\x8a\x44\xc7\xa9\x96\xa2\x6d\xcb\xde\x72\x02\xc1\x11\xdd\xd3\xe4\x5a\xe7\xd7\x19\x6e\x39\xef\xd1\x7f\x0a\x60\x9b\x28\xd9\x92\x3a\x35\x9e\xb7\x0e\xfc\x4b\x0c\xb8\x08\x58\xc1\xd5\xc2\xc7\x94\xa7\x89\x60\x35\x9f\x9f\x1b\x5e\xa2\x0a\xcd\x79\xc1\xf0\x57\xb6\xed\xd9\xc4\xc7\x87\x07\x71\xa4\x14\x79\x05\xb3\xf2\x16\x39\x0b\xab\x80\x4a\x98\x48\xf0\x31\xa8\x90\xef\x44\x47\xf1\xba\x38\x88\x1b\x98\x66\x7b\xe4\x6e\xc2\xf7\x1c\xf5\x6d\xe7\xc6\x79\x8c\x6d\x53\xbc\x14\x2c\x7a\xfe\xe4\xec\xf3\xe7\xa7\x4f\x9e\x7d\x1e\x21\xaa\xf1\x40\x4c\xe9\x8c\x3e\x7c\x16\xb2\x9e\x49\x14\x5b\xf3\xc2\xfa\xa8\x4f\x48\xdf\x86\x0a\xdb\xc4\xf7\x07\x38\x0b\x03\xd0\x0d\x1a\x19\x25\x88\xa0\xb8\x4a\x82\x8d\xdc\x92\x1a\x38\x65\x52\xeb\x47\x6f\xfa\x38\x06\x46\x5e\xa7\x15\x10\xf1\xe9\x3f\xa5\x45\x53\xea\x08\x40\x48\xc9\x77\x87\x38\x40\xe2\xd8\xea\xbb\x1a\x73\x20\xd8\xd9\xbd\x96\x37\xf6\x57\x62\xd2\x42\x7f\x85\xc8\x1a\x8b\xc1\x73\xdb\x92\x5d\x60\x05\xc6\x9b\xe0\x11\x5a\x44\x01\x3e\x33\x45\x9d\x77\xdd\xb6\x50\x11\x06\x06\x96\x7e\x15\xeb\x7e\xd5\xbe\x15\x04\xea\xa6\x6b\x66\x2c\x60\x60\x9b\x5a\xda\x8e\x37\x6d\xe4\x0d\x17\x9f\x0d\x4a\x90\x9c\x4d\xd6\x71\x8c\x77\x69\xdd\x88\x5a\xa2\xa3\x56\x35\x70\xb5\xf4\x29\x11\x2b\x70\x14\x08\x84\x78\x18\xf3\xbe\x3b\xa8\x70\xc3\xbe\x58\x93\xaf\x88\xa4\x06\xba\x5d\xa6\x4f\x3a\x8f\x74\x08\xb2\xdb\x5f\x87\x4e\x60\x43\x8a\xb4\xca\x16\x3d\xc9\x0c\x18\x0c\xc3\x4b\x47\x30\x02\xb3\x97\x8e\x47\x7e\x06\xa6\xc3\xf7\x32\xfd\xd1\x43\x28\x20\xfe\xa3\x95\x12\x87\x32\xfc\x0a\x88\x7f\xc6\x66\xc9\xbf\x9c\x80\x38\x7e\xd9\x3e\x8c\x48\x47\xf8\xa9\x4d\x9c\xbe\x3b\x6e\x1f\x67\x17\x7c\xcb\x91\x65\x05\x6d\xe8\x8d\xe1\x3d\x30\x77\xd3\x81\x20\x7b\x66\xae\x64\xfa\x13\xaa\x17\xf6\x3f\xfd\xa0\xb6\x45\xdd\xa3\x6f\xcf\x2a\x3a\xff\x5c\x31\xf0\x58\xa4\x7b\x86\x36\x98\x23\x67\xcf\xd7\xa2\x77\x5c\x0a\xaa\xf7\xc7\x8b\xf8\xa5\x6b\xcf\xc0\xfe\x13\xcb\xb9\x95\xe2\x0f\x15\xc7\x4a\x70\x61\x56\x67\x23\x61\xff\xd3\x0f\xb2\x4a\x8a\xae\x5c\x47\x6a\x56\x54\x8d\x90\xea\x0b\x50\x73\xeb\x65\x32\x00\x56\xd6\x05\x45\x0d\xf8\xbf\x5d\x4e\xc8\xd9\xdf\x1b\x7a\x01\x83\x8c\xd1\xfe\x6b\xcf\xf2\xb5\x1a\xd5\x10\xfc\xdf\xcf\x2e\xa0\xc3\xd1\x59\x0f\x80\x52\x1d\xa8\x3e\x5c\x35\x9b\x4d\x12\xb5\x7b\xa9\xca\x28\x5c\x83\xf7\x79\x74\x48\x6f\x97\x14\xc0\xdb\xa1\x0f\xe0\x81\xed\x75\x78\x4e\x1c\xd9\xaf\x3c\x5b\x57\xa3\x26\x8a\x63\x61\x50\x79\x38\x57\x0b\x91\x18\x5d\xb4\x16\x7f\x46\xdd\xdd\x40\xfa\x0a\x9c\xd7\xf5\x8e\xfa\x89\xb3\xba\xbb\xb7\x81\x33\x11\x5e\x6d\x86\xcc\x2c\x21\x5e\x01\x62\x5e\x78\x27\x0b\x87\xc1\xe3\x6c\x95\x47\x71\x5f\x44\x1c\x4f\xde\x7a\x44\x69\x93\x8d\x48\x9d\x11\xbe\xf8\x98\x11\x7e\x46\x1f\x05\xef\x9b\xd8\xeb\x41\x2d\x1f\x90\x8d\xc1\x1e\x32\xe0\xc6\xdb\x54\x46\x9a\xbb\xf2\xc3\x1d\xa6\xb0\xc3\xbc\x72\x73\x9d\x28\x9f\x7b\x10\x18\x7b\x65\x46\x98\x5d\xd8\x70\x82\xc3\x65\xdc\xe1\x15\xc8\x48\x2b\x21\x8e\xad\x55\x19\xa7\xce\x09\xee\x23\x23\xbd\x73\x33\x0f\x87\xf7\x91\x07\x28\x8c\x53\xfb\xf9\x7c\xa4\x66\x40\x6e\xc3\xc0\xce\xc7\x94\xc5\xb8\x43\x18\xde\x9b\xbd\x5e\xfb\x3d\x65\x1b\xd6\xea\x5d\x9d\x44\xf8\x2b\xb2\xcb\x96\x0e\x32\x3f\x23\xe6\x4f\xad\x24\xc2\xf5\xc2\x86\xbe\x80\xd9\x1c\xc1\xa4\x8e\x6c\x03\xbc\x28\xcb\x24\xf2\x1a\x63\x44\xe7\xd6\x43\x4e\x17\x81\x23\x1e\x52\x6a\x01\xe6\x54\xed\x18\xfb\x4e\xce\x58\xce\xe7\xe7\xf9\x73\x5e\x9f\xe7\x5a\x7e\x05\x02\xce\xda\x73\x45\xc7\x09\xa1\x65\xbc\x4b\x52\xa4\x79\x46\x53\x95\x11\x49\x59\x63\x59\x7f\x99\x44\x22\x84\x60\x6e\x7a\x58\xe8\x95\x53\xae\x7c\xdd\xf7\x5c\xb6\xde\xca\x8b\xc9\xf6\x9e\xa2\xcb\xf2\xd4\x7a\x2c\x7f\x11\x5a\x65\x5a\x02\xd3\xe0\x18\xe3\x44\xad\x42\xdc\x79\x0c\x4e\x72\x56\x6f\x45\x25\x24\x68\x89\x04\xc5\x02\xbe\xac\x37\xdb\x9d\x12\xab\x0b\xf0\xf3\x54\x74\xcf\x7e\x0a\x8a\x23\x85\x31\x0c\x6b\x23\x0a\x25\xe8\x54\x27\x3f\x8b\x51\x51\xd8\xba\xf0\x5a\x61\x0c\x5c\x46\xbf\x00\x21\x35\x8e\x49\x04\x67\x9e\x9c\x43\xe6\xf6\xa6\x1b\x64\x42\xa2\x68\xdb\x4a\xbd\x14\xb6\x2d\x48\xcd\x60\x8b\xea\x79\xa0\x52\xca\x26\xdb\xd9\xb6\xb8\x17\xe5\x17\xf5\x3d\x14\xb8\x21\x34\x8e\xbf\x36\x13\x3e\xa7\x71\xfc\x93\xbd\xa7\x45\xb4\x91\x66\x06\xa4\x7f\xac\xe0\xcd\x6c\x53\x54\x3f\xc3\x43\xad\x1f\xf2\x7b\x7c\xe8\xc2\xbd\x50\xfb\x1d\xcf\x99\x2e\xe9\x9d\x89\x89\x61\x95\xff\x4d\xc1\xbc\xaf\x6a\xea\x21\x30\xe5\x8b\x7c\x1a\x45\x89\xc7\xde\xfe\x5b\xa0\x6a\x7a\x0c\x00\xa7\xf0\xfe\xb4\xe3\xdf\x73\x4c\x1a\x5c\xd1\x03\xe8\xbd\x46\x53\x62\x23\xee\xf7\xfb\x80\xc2\xc5\xe6\xaa\x30\xed\x25\x7d\x2c\x8d\xb7\xe5\xb2\x69\xde\x89\x7b\xc5\xa3\xad\x61\x6b\x4c\xf2\x2b\x80\xaf\x15\xe7\xa5\x58\xab\xe4\xe4\x4c\xff\xb7\xbd\x3f\x87\xfa\x26\xff\x35\xdf\xde\x9f\x6f\x72\x79\x5d\x54\x27\xaa\xde\x26\xfa\xcd\x36\x5f\xad\x8a\xea\x3a\x99\x9f\x5f\xd5\x72\x25\x64\x32\x8f\x00\xd0\x75\x3c\x79\xcb\xc7\x79\x6e\xfc\x3c\x13\xf0\x95\x3d\xbf\xaa\xef\x4f\x9a\xe2\x5f\x3a\x1d\x4c\xe5\xe4\xaa\xbe\x3f\xaf\x6f\x85\x5c\x97\xf5\x5d\xd2\x00\x8a\x9e\xc9\x39\xc9\x77\xaa\xb6\x99\xf9\x25\xf0\xcb\xf9\xa7\x73\x28\xdf\x9f\x22\x56\x85\x5e\x32\x65\x28\x34\x2d\x0d\x1c\x3e\x6a\xdd\xc2\x19\xb0\xa4\x47\x05\x8f\xce\xfe\x14\xa1\x2d\x73\xbd\x65\x3b\x7e\xf6\x8c\x73\x2e\x89\x9a\x61\x59\xbe\x15\x6b\x45\x5d\x75\x65\x71\x7d\xa3\x78\xf4\x5f\xf3\x3f\x45\xac\xe1\x9f\xfd\x97\x89\x0a\xc1\x7a\x49\x71\x21\x50\xca\xee\x3b\xdb\x3a\x3c\xb2\xad\x1f\xb1\xdc\x66\xb5\x9c\xe1\xd5\x13\x8c\xab\xd3\xcf\xa8\xae\x90\x7f\xc8\x2d\x29\x5b\x22\x8a\x72\x37\xbc\xa4\xb7\x07\x23\xab\x70\xbd\xab\x56\x04\xa0\x97\x5e\x97\x75\x0e\x24\x3a\x7b\xe7\xf7\x8e\x67\xd6\xa1\x1f\x13\xf8\x38\xe9\xd4\x47\x5f\x1c\x2d\x9d\x4f\xb2\xad\xc8\x55\xbe\xfc\x70\x0d\x79\xbd\x2c\x8b\x2d\x8f\x0c\xbf\x85\xee\x4c\x3d\x28\x42\x1f\xa1\xf1\x4f\x22\xb6\x85\xcd\x45\xc2\xf1\x18\x3a\x22\x4c\x87\x83\x71\xe8\xc8\xb7\x1d\xaa\xcd\x96\x3d\x5e\xd5\xf7\x17\x30\x9e\xde\x8a\xb2\x38\x80\x3e\x0f\x10\x31\x7b\x16\xae\x22\x07\xe2\x35\x26\x9e\x65\x35\x3d\x10\xad\xd0\x9b\x31\x66\xf8\x9d\x1b\x20\x07\xe2\xee\xf6\x0c\xc7\x35\x96\xf5\x50\x09\xf3\xfd\x9e\xd2\x3d\x25\x38\x50\xff\x26\x78\x1a\xfd\x2c\xae\x3e\x14\x2a\x62\xd1\x77\xf5\xbf\x22\x16\x6d\x9a\x28\x63\xbf\x8e\xf8\xa1\x41\x37\x61\x5b\xb1\xaf\x42\x57\xfa\xbf\x0a\x8f\x15\x4a\xcf\x53\xbd\xfe\x36\x40\xe8\xf1\x95\x48\x45\x80\xf6\x27\xf4\x71\xf4\x57\xb1\x10\x09\xbc\x1a\xdd\x3d\x15\x70\xa4\x85\xb0\x88\x53\xd1\xb9\x61\x48\xfe\x37\x11\x20\x45\x21\xd6\xf6\xdf\x44\x2a\xb3\xa9\xa2\x90\x81\xd3\x67\xee\x61\xc5\x17\x38\x42\x9f\x80\xc7\x57\x55\x57\xa2\x05\x65\x3c\x59\x4c\x4e\x96\xa9\xc8\x33\x3a\x9b\xd2\x53\xf6\xa3\x7e\x7d\x72\x72\xca\x7e\x11\xfc\xd1\x2d\x33\xde\x44\xba\x2d\x9a\xe2\xaa\x28\x0b\xf5\x90\x44\x37\xc5\x6a\x25\xaa\x88\xd9\xc5\xc7\x78\xea\xef\xd9\xdf\x05\x7f\x2c\x85\x52\x42\x5e\x6c\xf3\xa5\x5e\x4c\xa2\x79\xc4\xd6\x75\xa5\x7e\x06\xc2\xd8\x24\xfa\xf3\x7c\x1e\x79\xed\xf7\x17\xd1\x63\x48\xb4\x16\xdd\x1d\x45\xdf\x02\x66\xde\x26\xbf\x27\x73\x56\xa5\xcf\xb2\x13\x22\xdb\x76\x4e\xe9\x94\x54\x00\x0c\x01\x28\x10\x89\xea\x66\xad\x05\x3f\x0b\x9c\xc5\x78\x84\x5c\xb5\x00\x7f\x73\x96\xcc\x19\x42\x79\xce\x91\xbe\x8e\x73\x52\x2d\x22\x5c\x0b\xa3\xc4\xce\x93\xc8\xa9\x86\xe7\x88\xb1\x97\x3f\xff\xf3\x79\x3e\xe5\xcf\x68\x84\xcb\x96\x45\x0a\xd8\x4d\x1d\x54\x87\x9c\x4a\x91\xe6\x00\xf0\x59\x50\xca\xaa\x05\x71\xa9\xd9\xc8\x27\x1d\xae\x87\x59\x72\xa3\xf0\x23\x9b\xfa\x64\xf8\x81\x29\x22\xc6\x9f\x46\x3f\x23\xff\x2e\x7e\x47\x13\xbf\x20\xa3\x69\x77\xa1\x00\x68\xe8\x47\xff\x48\xca\x49\xf3\x69\xf1\x6c\x9f\x01\x34\xd3\xe7\x00\x7e\xb1\x9b\x72\xaf\xfb\xe0\xe7\x52\x14\x25\x11\x69\x84\xcb\x71\x34\x55\xc3\x01\xaf\xdc\x80\xcf\x4e\xea\x93\xdd\x49\x73\x32\xfb\x4f\x4a\x75\xaf\xb3\x5d\xd7\xcf\x4a\x85\x63\x07\x04\x22\x56\x70\x32\xd9\xce\x06\xeb\x16\xd1\x92\x10\x8d\xe3\xa8\xdb\x17\x03\x84\x15\xf7\x41\xc4\x26\x67\xac\x02\xc9\x95\xe5\xdc\x08\x64\x15\x65\x0d\xff\xb4\x12\xeb\x01\xd5\x89\x4f\x3d\x2e\xe4\xfc\x28\xe7\x91\xde\x77\x23\x4b\xdb\x37\x5e\xd6\x38\x2e\xda\x16\x23\x72\xce\xf3\xb6\x9d\x78\x7b\x8e\x16\xca\xa2\xa2\x2a\x8b\x03\x20\x31\x58\x01\x80\x5d\xd6\x7b\x31\x98\x61\xbc\x15\x4b\xd5\x38\x56\x32\x03\xaf\xf1\x89\x2d\x41\x6a\xde\xe0\x6d\x2a\xb8\x1e\x8a\xb4\xc9\x28\xb8\x38\x05\x65\xd2\xbd\x33\xb5\x53\xaf\x6d\x49\x31\x36\x9f\x58\xcd\x2a\x96\xd3\xa9\x9e\xb3\xde\x36\xab\x7c\x97\x12\xcf\xae\x4d\x7a\x46\x54\x40\x4b\xe9\xc5\xf3\x14\xd1\xcb\xa6\x41\xc0\xaf\xc7\x5a\xaf\x3a\xea\x21\x79\x1c\x42\x8f\x82\x76\xd4\x08\xf7\xd0\xab\x91\x89\xec\x8e\xfa\x80\xda\x21\x17\xd1\x59\x94\x48\x30\xf3\x73\x40\x32\xc9\x63\x5e\x15\x1b\xb0\xdc\xf9\x46\x09\x09\x3f\xc0\xec\x19\xad\x65\xca\xdd\xa6\x7b\x5c\x17\x65\xf9\xc6\x14\x43\x3f\x96\xe2\xfe\x2b\x59\xdf\xd9\xdf\x17\x37\xb2\xa8\x3e\xc0\x53\xb7\x2a\x4e\xe6\xec\x5a\x16\xab\x17\x52\xe4\xf6\xf7\x4b\x48\x35\x7c\x7a\x55\xad\xc2\x80\x0b\x95\x4b\xf7\xf5\x5b\xcc\xc4\xfc\xf4\xe2\xbe\xad\xef\x5c\x44\x3d\x68\xbe\x76\x99\xd6\x5d\x39\x51\x0c\x84\x1f\xdb\x9b\x1c\x8d\x79\xee\x8a\x55\x7d\x07\xbf\xfe\xf5\x0d\x10\xec\xe9\x5f\x75\xbd\x41\xbb\x55\xb3\xd7\x25\x8f\x7b\x06\x5b\xe3\x88\xd1\x01\x5a\x0f\x7c\xd6\x53\xc9\xff\x77\xef\xd9\x1c\x6e\x3c\x00\x21\xd6\x00\xf0\x29\xdb\xf1\x1f\xdd\xe1\x03\x2c\xcc\xf1\x14\x54\xac\xc9\x0e\x80\x68\xfe\x2a\x88\x3e\x30\xe7\x38\x78\x61\x0c\x80\xa3\xa7\xf7\xd8\x78\xb8\x10\xdd\x34\x8c\xe3\xe8\x5a\xa8\xa8\x80\x9f\x9d\xa2\xb9\xe0\xb9\xf1\x59\xc4\x29\xb4\x28\x92\x32\x55\xd9\x51\xa7\x14\xe1\xa4\x76\x8e\xbd\xc8\x77\x6f\x77\x2c\xa9\x67\x1c\xd2\x93\x12\xc9\x0d\x2e\x52\xa1\xd7\x91\xa8\x82\x41\x14\x51\x86\x8a\x22\x7d\x6e\xc4\x95\xdd\xbe\x99\x70\x5e\xb7\xad\xae\x93\x9c\x02\xbb\xc8\x10\xf1\xa8\xe9\x10\x8f\xe8\x50\xb4\x6b\x5b\x38\x04\xea\x8d\x11\x84\x6c\x87\x13\xd9\x89\x76\x91\x3e\xfc\xe9\xda\xf0\xa8\xa8\x6e\x84\x2c\xf4\x74\xd4\x0d\xd1\xf4\x1a\x82\x83\xc6\x3d\x37\xfe\xbb\xd2\x18\xb5\xec\x16\xa5\x0e\xe9\x0c\xa9\x99\xa4\xd0\x38\x5c\x22\xa5\xc5\x00\x8e\x37\x80\x84\x32\x3d\x6a\x37\xf5\xae\x5b\xfd\x7e\x24\x1f\xef\x48\x1a\xf4\x9a\xdf\x59\x73\x26\xdd\x39\xd1\xc1\x07\xb9\xa5\x1b\x80\x85\xe4\x26\x2f\x0d\xb4\x90\xd2\x8b\xd9\xdf\x01\x1c\x8c\xff\x1d\xe8\x40\x11\xb0\x47\xb6\xad\x5c\x90\xda\x5f\xd6\x0a\xca\x00\x38\x5d\xb6\x6d\xd1\xbc\xd6\x2b\x90\x20\x35\x5d\xd4\x6d\x3b\x4f\x90\x11\xc2\x29\x63\xd2\x08\x39\xf1\x23\x66\x24\x8d\x6c\xa0\x34\xf1\xaa\xc6\xfb\x2b\x94\x9d\x2f\x8e\xba\xfd\x89\x69\xa2\x21\x06\x98\x05\x28\x1b\x5f\xd9\xe1\xd5\x17\xba\xc7\x8b\xea\xba\x8b\x42\x28\x9e\x96\x16\x66\xd7\xac\x68\xd2\xe8\x06\xfa\x25\x00\x5a\xb4\xd2\xaa\x8d\xb3\xa7\x03\xd8\x68\xbf\x5f\xcd\x96\x9b\xf3\xc9\x76\x16\xc8\xe0\x7a\x07\xeb\x64\x47\xc0\x42\xb5\x32\x25\x6b\x38\xc9\xdb\xb6\xfa\xe4\xbd\xb8\x06\xaf\xaa\x85\xd9\x5a\x2a\xd6\xb0\x9a\x26\x0e\xca\xb6\x89\xe3\x1c\x65\xa4\x3f\x22\x5c\x78\x5d\x5d\xeb\x81\x70\x62\x72\xb1\x5b\x17\xe6\x0f\xd2\x07\xdb\x0d\xa7\xbb\xc1\x16\x23\x45\x27\x88\x82\x1d\x39\xc2\xa6\xe9\xb9\xc1\x24\xf7\x90\xc6\xd8\x5f\x04\x99\x33\xc9\x76\xf6\x82\xc8\x8e\x08\xef\x18\xcc\x7f\x13\x64\x3b\x1b\x9e\x7e\xd8\xc8\x76\x66\x64\x08\xaf\x16\xb8\xb3\x75\xa9\x75\xa3\x65\x74\x48\x94\x62\xad\x4e\x60\x1c\x3c\x76\xdf\x24\xf3\xfd\xc8\x98\xf8\x78\x22\x7b\x6a\x36\x75\xcf\x12\x10\xb5\x0c\xfa\x24\x6a\x14\x0b\x51\xc4\x8c\xba\xc1\x88\x8d\x43\xbd\xa2\x9b\x22\x62\xaa\x27\x09\xde\xab\x75\xc3\x2f\x20\xee\x9f\x33\x70\x9f\xaf\x87\xd4\x7f\x72\x21\xad\xe3\xe7\x71\x44\x93\x54\x66\xe7\xd5\xf3\x3f\xc3\x4d\x67\x91\x0a\x2d\xba\x56\x99\x4e\xbf\x4e\xab\xac\x6d\xeb\xb4\x3a\x79\x06\x7f\xe7\x1e\xc6\xdd\xde\x17\xc3\x1d\xb0\x5c\x57\x38\xbd\x1a\xf2\xbf\x00\x2b\x43\x70\xd1\xd7\x5f\x08\x0f\x2b\xf1\x7b\x8a\x3e\x80\x02\xc0\x03\x49\x1f\x12\x1c\x6b\xdd\x49\xb8\xd6\x07\xe8\x3c\x7f\x5e\x80\x32\xb5\x4e\x55\x9a\x67\x59\x37\xd6\x40\xe2\xd7\x7b\x98\xad\x50\xbd\xef\x7b\x9b\xcb\x85\x0f\x45\x27\x69\xd2\x0d\xd4\x3d\xd8\x07\x0e\x31\x74\x8d\xf2\xf9\xdd\x9d\x10\x15\x97\x8a\xc9\x83\x46\xee\x52\x31\xbd\x5a\x8e\xf8\x0c\xeb\x13\x19\xaa\xe6\x4b\xb1\xb1\xee\x08\x5b\x59\x6f\xb9\xb4\xc6\x74\x4d\x51\x5d\xf3\x42\xaf\xfe\xf8\xbb\x43\xf0\x41\x73\x3e\x80\x48\x6a\xb8\xb2\xa6\xd5\xb9\x54\xf6\x26\xed\x8e\x5b\x17\x01\x6b\x79\x2d\xaa\x15\xaf\xf0\x27\xe0\xe4\xd5\xbd\x8d\x55\x76\x1b\xeb\x9e\x2d\x77\x72\xa8\xf9\xc7\x5a\x6e\xcd\xd2\x6d\x8b\xeb\x86\x8a\x30\x6b\x2e\x02\x5b\x99\x5b\x55\xff\x1b\x57\xfc\xee\xfd\x9e\xc9\xdd\x08\x23\x0e\x93\xbf\x97\x99\xdf\x00\xb3\xd5\x0e\x45\x51\xc3\xf0\x5b\x37\x5c\x71\xdb\x66\xa9\xd7\x96\x99\xbd\x50\xeb\x7f\xf8\x54\xb0\x39\x3b\x1b\x7f\x67\x6e\x86\x31\x55\x7b\x21\x57\xdf\x71\x62\x5b\xf5\xa4\x6b\x7d\xfa\x54\x4d\xbb\xa7\x30\xbd\x46\x89\xad\xb9\x8c\xf1\x83\x3a\x0b\x2a\xf4\x7d\xb4\xe9\x5b\x5e\xed\x38\x96\x7a\x86\x2d\xa4\xc3\xb1\x38\xd4\xa8\xee\x3d\xb2\xa3\xec\xd9\xe0\xd4\xe0\x0d\x52\xff\x1d\xf3\xd3\xe3\x8f\xce\x75\xa9\xb7\x35\x9b\xbe\x71\x18\x2c\x20\xbd\xea\x32\x7b\x77\xb9\xd6\x50\x5c\x07\xa7\x02\xbb\xcc\xc2\xc5\x98\xc8\xb8\x27\x98\x77\x8b\x30\x6a\x42\x94\x9d\xba\xd8\x1a\x18\xce\x22\xc0\x7c\xc5\x73\xe0\x04\x70\x7b\xf5\xda\xdc\xf4\x8a\x77\x39\x5b\xdf\x43\x9b\xba\xd4\x07\x21\x44\xd0\x64\xb4\xe0\x13\x7f\x55\xfb\x48\xb9\xff\x2a\x90\xd5\x6e\x4b\xfb\x65\x07\x51\xfe\x2e\x71\x6b\x49\x50\x01\x78\x37\x05\xce\x4f\x70\x9d\x0a\x9a\xdc\x88\x0c\xef\xf4\xd4\x1f\x06\xc3\x5e\xf8\xd8\xaf\x6b\xaf\x02\x7a\xea\x41\x40\x60\xe5\x34\x56\x40\xeb\x70\x01\x6b\xcb\xa3\x3e\x06\xe5\xe3\x36\x4b\x7b\xd6\xdc\xe9\xcd\x6a\xf8\x6e\xf6\x9f\x27\x28\x63\xd4\x0d\x11\x4f\xe1\xe7\x0f\xdf\xd0\xd3\x67\x9e\xd7\x5b\x04\xdf\x46\x3a\xab\xf5\x3d\x1f\x0c\x44\xe6\x3a\x86\x3f\x22\xd7\x41\xa5\x58\xa1\x58\xad\x10\xc1\x09\xb1\x14\xdb\xe6\xa6\xbe\x6b\x6f\x8a\x95\xa0\x4f\x4e\x59\xae\xf8\x69\x07\x02\xfc\xc4\x43\x68\x6a\xe0\x1e\x42\xc5\x31\x01\x9b\xe4\x6a\x86\x6a\x39\xf4\x34\xfb\x6d\x27\x1a\xf5\xc2\x9e\x5a\x5f\x4b\x44\xde\x1b\x0d\x27\x8d\xa2\x49\xc0\xac\xd3\x98\x92\x82\xd1\xfd\x6d\x5e\x52\x7c\x54\xc5\xf2\x03\xa1\x1e\xe2\xcf\x4e\xf9\xf2\xc1\x38\x07\x53\x65\x4d\xa7\xf7\x94\x55\x8a\x77\xbe\x53\x5d\x32\xa5\x1a\x92\xda\x3f\xa2\x34\x9d\x08\x74\x77\x57\xa8\xb5\x33\xdb\x38\x7f\x76\xa2\x68\x91\xda\x0d\x7a\x4a\x24\x87\x3d\x9d\x66\xbc\x48\x3d\xc5\x57\xc6\x7d\x86\x72\x52\xcc\xcc\x81\x97\x17\xe6\xe2\x49\xef\xa6\x5d\x39\x96\x6a\xcc\x22\x8f\xac\xd5\x4c\xe9\x1d\x4f\x48\x3c\x94\xa4\x19\x9d\x2d\xeb\x6a\x99\xab\xe0\x55\xf4\x34\xca\xa8\x81\x1f\x2d\xfa\xf0\xa3\x40\x30\x51\xa4\x75\x86\xeb\x9e\x64\x8a\x89\xce\x85\xcf\x83\x35\x55\x43\xb9\x40\x27\xb8\xd6\x43\xc9\xdc\xa1\x7b\x50\xd4\x3e\x5c\xf5\x0c\x89\x38\xfd\xb6\xb7\x90\x09\x30\x1f\xf6\x34\xa4\x25\x2e\xd6\xc4\xa2\x0e\x4d\xce\x8e\x3a\x05\x74\xa5\xda\x56\x77\x2c\x93\xbe\xea\xae\xc4\xb5\x5d\x77\xf0\xb4\x74\x9b\xc4\x09\x80\xc6\x9f\x9d\x10\x79\xda\x05\x82\x9e\x0e\x8b\x5d\x62\xf3\x34\xfd\xe6\xb0\xe1\xba\x41\xe4\xae\x22\x9d\x9c\xd2\x78\x5c\x7f\x44\xb0\xb4\x64\x15\x93\x19\x65\xd5\xf3\xb3\x38\xce\x17\x32\xd1\x87\x87\x61\xa4\x33\x36\xcf\x8c\x2f\xbb\x43\xe2\x16\xe0\x7e\xcd\x26\x67\xc0\x6e\xdc\x38\x40\x6c\x74\x98\x16\x6c\x0b\xea\x0b\xdf\x52\x59\x51\x56\x6f\x95\x17\x36\x99\xb3\x47\x63\x93\xf6\x0a\x96\x8e\xe4\x71\xcf\x70\x11\x49\x06\xd2\xc9\x9e\x49\xca\xac\x53\x99\x39\x28\x17\xa2\x49\x94\x0b\x7c\x83\x1b\x60\x22\x99\x6b\xcc\xc4\x35\xb7\x6d\xbe\x44\xba\x96\x64\xd8\x4a\x49\x9a\x31\x03\x19\xa8\x9f\x7d\x52\x4f\xa7\xfc\x34\x52\x19\x11\xac\xd4\xfb\x2c\xd0\x96\x9b\x9f\xb3\xa0\x06\x30\x84\xcd\x0b\xac\x80\x6b\x7b\xd7\x5b\xc6\x43\x9d\x55\xe8\x53\x37\xc2\x87\x0b\xa6\x26\x8b\x5e\xf7\x26\x20\xbc\x16\xbe\xa3\xf6\x11\x92\x5f\x4f\xe6\xce\xd8\xc3\x75\xbd\xc4\xae\x3f\xeb\x6e\xf3\x17\xe4\xd3\x3b\x96\xa9\x8c\xd2\xa4\xf1\x29\x2c\x6d\xb0\x91\x03\x28\x5b\xf2\x12\xb6\x00\x2c\xc5\x47\x40\x0d\xe0\xbd\x44\x1d\xa7\xae\x01\x57\x69\xc5\x7f\x25\x92\x66\xac\xe6\x80\xfc\x19\x4a\xe4\x35\xaa\x7e\xea\xf4\xcc\x46\xe0\xfa\xf0\x40\x99\x34\x0c\x5e\x00\x58\x5c\x33\x47\x9d\xa3\x47\x70\xa8\xdd\xa8\x40\x9d\x81\xe7\x1b\xd0\x68\x50\x57\x86\x9a\xe7\xc6\xa0\x90\xd4\xb4\x4b\xa3\xca\x58\x4d\xb1\x90\x6d\x4b\x4c\xa6\x32\x63\xc0\x52\x5e\x18\xab\x4d\x05\x48\xc9\x7b\xb2\x1c\xed\x7b\x1a\xae\x47\xc1\xa2\xe2\xd6\xa6\x92\x09\x66\x3f\x77\x4b\xd4\x06\x80\x8e\xeb\x2d\x85\x83\x90\x4f\x05\x50\xe2\x86\x6f\xb2\x83\x17\x14\xa2\x72\xfc\x02\x50\x73\xd0\x16\xb9\x23\xce\xdc\xe4\x5b\xb2\x64\x4b\xc5\x4a\xca\x36\xc4\x16\x15\x44\xc9\x38\xf6\x1f\x2d\x4a\x4c\x49\x59\xd9\x11\xe8\x9a\x18\xf6\xd9\xf0\xe8\x9a\x50\xfd\xdb\x16\xc7\xf2\xcf\x19\x66\x5d\x13\xaa\x7f\xbb\xe5\xd2\x84\xe1\x93\xdb\xe8\x36\x3e\x3c\xda\x8e\xd9\x25\x23\xaf\x8a\x4d\x52\x32\x24\x30\xf0\xab\xbc\xa7\x94\x95\xfb\xcb\x99\xdb\x59\x3b\x0f\x88\xb5\x62\x8f\x76\x93\x48\x1e\xa3\xa7\x51\x92\x8e\x0c\x45\x73\x6e\xe9\x66\x39\x3a\x73\x9b\x16\xdb\x09\x22\x8d\x60\xc5\xba\x2b\x32\xbd\xde\xc8\x7d\xb6\x67\x26\xf9\xde\xb9\x73\x43\x04\x5d\x18\xba\x01\xdc\x9d\x12\xc1\x3b\xc2\xfb\x23\xdf\x62\x67\x0e\xee\x6e\x3d\xab\x60\xc9\x61\xd4\xf9\x9b\x9c\xcc\x78\xf8\x88\xb4\xf9\x41\x90\xa3\xf9\x50\x68\x47\x69\x06\x58\x58\xed\x03\xe6\xde\x6c\x6d\x2f\xea\x0a\xb8\x34\xb5\x4a\x35\xfd\xc4\x6e\x10\x03\x63\xa5\x4f\xca\x5b\xab\x0d\x66\x9b\x40\x99\x9c\xc3\x11\xd9\xa1\xc2\xb1\x68\x7d\xaf\xc5\xa9\x08\xab\x0b\x16\xc1\x12\xbb\xac\x6d\x0d\xb0\x23\x4c\xcc\x90\xdf\x04\x08\x5a\xe8\x6c\x57\x41\xe8\x2a\x8e\x49\xee\x1e\xf8\x9c\x35\x7a\x86\x3a\xda\x11\xe6\x3f\xf8\x3b\x6c\xf7\x4d\xdb\x36\x84\xee\x29\xeb\x42\xa6\x53\x76\x33\xb2\x63\x8f\x85\x75\x1f\x9d\x9c\xb0\x8e\xaf\x05\xca\x68\xba\xac\x6d\xf3\x90\x07\xc5\x50\xfd\xd9\xc5\x2c\x63\xb5\x43\x39\x83\x9d\xdf\x5a\xba\xc0\x2b\x7d\x26\x8e\x50\xf6\x04\x15\x29\x2b\x38\xe7\x64\xb3\x88\xb4\x0c\x1a\x25\x11\x36\x20\x7c\x87\xbf\x27\x5c\x1f\xcf\x27\xb7\x1e\x1e\xc0\xad\x5e\xd1\x96\x75\xa5\x8a\x6a\x27\x8e\x36\x7c\x32\xdf\xaf\xf4\x5a\x74\x1b\xc7\xb7\xa0\x65\xe9\x94\x0d\x15\xdd\x17\x6b\x42\x76\x7c\x84\x02\x8c\xc2\x91\x24\x0c\x5d\xd1\xce\x9a\x7b\xdd\xa7\xee\x8a\x63\x22\x67\xd6\xc0\x85\xa7\x5b\xf7\x9b\x75\x3f\x7f\xf1\x7e\xff\x9a\x31\xd3\xeb\x25\x94\xcd\x02\xa5\x83\x27\x49\x37\x6a\x3a\x65\x6b\x87\x4a\x4f\x96\x23\x84\x0c\xf0\xdd\x62\xc9\xcb\x84\xac\x11\x64\x1a\xf8\x1a\xfb\xdc\x0e\x6d\x5b\xb2\xb1\xcf\x19\x7e\x44\x29\x65\xc4\xbb\xd3\x5b\xb6\xad\x79\x3a\xc1\xab\x75\x1d\x86\x07\xb3\x09\x2f\x47\x29\x22\xd6\x65\x9d\x03\x5e\x06\xdc\x8d\xdc\xe0\x92\xe8\x8d\xa2\xad\x83\x84\x2f\xf7\xd4\xb4\x41\x09\x5c\x03\xee\x0d\x2b\xb9\x4b\x77\xb9\x88\xa2\x64\x09\x77\x0d\x0e\xda\x3e\x28\x11\xb8\x04\xd9\x56\x8d\x63\xd2\x35\x31\x77\xf6\x01\x63\xa3\xd9\x8b\xd7\x7d\x9f\xce\x33\xbf\xbf\xfc\x37\x67\xfe\x9b\x5f\xfd\x37\xcf\x32\x3d\xc8\x77\x7c\x72\xc6\x56\x54\x57\xfa\x76\x61\x73\x2e\xaa\xe3\xdb\x38\x26\x1b\x7e\x6b\x0e\x45\x34\xb9\xf5\xf9\x93\xec\xaa\xc0\x1e\xad\x09\x83\x6e\x94\x3a\x8e\x89\xfd\x80\x4f\x36\x94\x6d\xe2\xd8\xeb\xd4\x61\x9b\xba\x61\xb9\x69\x5b\xd3\x91\xcc\x47\x15\xb3\x6b\x0f\x5b\x79\x9c\x11\x15\xd3\x13\x83\x62\xd9\x97\x8a\x6c\x16\x7a\x82\x24\x73\x56\xb1\x1b\xca\x20\xb9\x5b\x5d\x19\x3d\x7b\x76\x46\xa3\xb2\xd1\xdd\x0a\xaa\x2c\x1b\x62\xfe\xf2\x39\xa5\xfb\xac\x5b\x65\xfb\x6c\x4f\x8b\xf0\xe0\x60\x57\x66\x41\x93\xf0\x05\x48\x7c\xd6\xb8\xb4\xd9\x0a\xb1\x1a\xc0\x9a\xa0\x9c\x29\xe2\x78\x84\x2a\xcc\x17\xa2\x05\x4d\x1e\xed\xbe\x9b\xc8\xb6\x9d\xc8\x38\x56\x6d\xbb\x01\xeb\x61\xd1\x89\xb9\xc2\x0a\xd2\xf8\x5e\xc5\xf1\x64\x03\x46\x86\xca\x63\xd8\x5e\xdf\xcf\xea\xf5\x7a\x51\x39\x91\x98\xcf\x93\xee\xd6\xcc\xe4\xdf\xbd\x05\x3a\x0c\xfb\xa0\x5b\x12\x0f\xdc\xba\x3e\x8d\x9f\x88\x17\x9c\x76\xc1\x59\x32\x1e\xc5\x49\xf8\xf6\x06\xaf\xc2\x45\x38\x8e\x01\x6e\xaa\xea\xf6\x13\xfc\x05\xcc\x4c\x94\x55\xb3\xba\x5c\xf1\xca\x09\x21\xac\xfb\xe9\xef\x12\x5a\xb4\xaa\xcb\x15\x8d\x63\xf8\xdb\x29\xc6\x74\x0a\x26\x9f\x1e\x07\x92\x09\xa7\x7b\x2d\xa1\x07\xda\xe7\x75\xbe\x12\xef\xea\xc3\xfe\xdf\x20\x65\x18\x53\xec\x5c\x50\x58\x3c\xdc\x45\x38\x9b\x5b\x86\x05\x3d\xd4\xf4\x89\x12\xa4\x19\x41\xdc\xbd\xba\xda\x33\x61\xdc\xcc\xcd\xbb\x43\x97\x7e\xbc\xbf\x8a\x0b\xe4\x11\x83\x16\x25\x18\x53\x9f\x6b\x43\x65\xab\xe2\x6b\x03\x8e\x17\x8e\x28\x56\xd3\x73\x52\x38\xbc\x7d\x40\xcf\x5b\x17\x55\xd1\xdc\xc0\x0a\xac\x40\xd2\x24\x93\x39\xdd\x77\xac\xd8\xf8\x9e\xe7\x4c\x6f\x55\xc8\xc7\x07\xad\xe6\xf1\xda\xe5\x46\xc9\x89\x4d\x6b\xde\xb3\x9c\xf6\x8f\x3d\xc1\x0c\x18\x43\x95\xd0\xd1\xad\xf5\x28\x3e\x31\x45\xa4\x2b\xcd\x28\x0f\x14\xba\x95\xfb\x5c\x50\xca\x20\xd4\x59\xf7\x88\x01\x83\xd5\xb8\xb7\x39\x16\x62\xa2\x45\xb8\xce\x13\x21\x60\x8e\x82\x96\x07\xa1\xb6\x09\x00\x95\x29\x9e\xd7\x10\x98\x4c\xff\x0b\x45\x8f\xe3\x0a\x50\xcf\x68\xc7\xf3\x0a\x7e\xc4\xf9\x30\x62\xee\xa4\x8a\xee\x23\x3c\xf1\x39\x17\xb3\xe2\xe4\xe4\x9c\xd6\xfa\x13\x2d\xbf\x4e\x2c\x74\x82\x2b\x29\xbc\x82\xb2\x4e\x80\x11\x93\x40\x80\x1e\x5d\xd8\xa9\x92\x32\xa5\x97\xf8\xda\x62\x54\x16\xec\x8c\xd2\xa3\x89\x8a\x63\xa9\xa5\x8a\x11\x72\x30\xec\xf9\x11\x0d\x9e\x6d\x5d\xe2\x58\xb7\x3e\xd6\xa4\x4c\xfa\x4d\xc5\x2a\x2e\x53\xdb\xac\x51\x06\xbc\x3c\x61\x2b\x67\x61\x33\x57\x8b\xaa\x3b\x17\x23\x2c\xb1\x19\x92\x93\x39\xeb\x11\xac\xe9\xbe\x05\x18\x7f\x6c\x56\xfc\xeb\x39\x19\xeb\xed\x47\x75\x6d\xaa\xb0\x4d\x15\xb6\xa9\xf1\x23\xd2\x4d\xa9\x4c\x53\xa2\xc3\x07\xdc\x69\x7a\x4d\xa9\x53\x71\xcd\xa8\xa0\x19\x51\xb7\x36\x3f\x57\xcf\x73\xf0\x96\xa9\x52\x95\xc5\xb1\xfe\xd7\x14\x36\x78\xf0\xd6\x26\x3b\xda\x6d\xa5\xf6\x34\xb8\x0b\x37\xd2\x24\x43\x79\x91\xa1\x24\xd9\xbf\x11\xb7\x5c\x73\x6b\x9d\xc5\x91\xf9\xeb\xef\x3b\x81\x3d\x10\x2a\xa5\xdb\x76\x8c\x57\xe6\x00\xac\x06\xce\x6e\xbb\x8a\x95\x8a\x28\x68\x49\x4c\xd8\x77\xa4\x68\xca\x62\x25\xbe\xac\xef\xaa\xa4\x54\x46\xc6\xa5\x0c\x02\x7f\xda\x42\x10\x94\xdf\x04\xbd\x43\xc6\x1b\x1d\x6c\xaa\x49\x99\x5e\x77\xbf\xa9\x3a\x03\x24\x4c\x63\x0f\xe1\x6f\x76\xca\x7b\x01\x29\xe1\x0b\x93\x50\xf7\xce\x24\xb7\xff\x7d\x7f\x8b\xe1\xa2\x6e\x6b\xa9\xec\x0a\x0d\xd5\xc3\xd1\xc8\xd3\xac\xd3\xe0\xf6\xd7\x5c\x70\x9e\x82\x7b\x6a\x8c\x8c\x07\x25\x5f\x53\x7b\xae\x9e\x4b\x1f\x59\x94\x08\x0e\x4e\x05\xc4\x78\x17\xe0\xc4\x95\x6e\x64\x9d\x9c\xb0\x33\x7a\x24\xdd\xd9\xc4\x68\xbd\xeb\x2d\x01\x15\xb0\x51\x07\x7b\x47\x6d\x1e\x5e\x67\x60\x39\xac\x4c\x62\x95\xe6\xb9\x04\x80\xa9\x40\x31\xcd\xcf\x3e\xf3\x5e\x07\xda\x4d\xd5\xb6\xa4\x80\x65\xb1\x51\x84\xda\x0f\x41\x31\x11\x44\x43\x9b\x6f\xe6\x6d\xf7\xfc\xb1\x29\xeb\xbb\xe4\xbf\xe6\x73\xb6\xce\x1b\x95\x3c\x9b\xcf\x3b\x0d\xff\x9f\xe7\x73\xb3\xe5\xae\x84\x16\x8a\x43\x5d\x9c\x63\xf9\xd4\xc9\x01\xb6\xb8\x13\x33\x54\xd6\xb6\x0a\xc9\xbe\x60\x39\xf7\x56\x78\xd9\x75\xb7\xb7\x81\x06\x0a\x75\xc9\x14\x3d\xaa\x06\xc5\x17\x68\x08\x64\x63\x15\x06\xa4\xb0\x7f\x83\x79\x88\x59\x83\xa9\xe1\x2b\x04\x5b\x89\x7e\x87\xb6\x03\xaf\xf2\x22\x4a\x8f\x0c\x14\x46\x64\x39\x97\x22\x4b\x9e\xf1\xa6\xe2\x11\x42\x73\x02\x84\xa2\x96\xe2\xb7\x0a\xf1\xd5\xc5\x8a\x2b\x83\xea\x22\x56\x8c\x7c\x8c\xfa\x03\xbe\xe5\x91\x8a\x2c\x44\x8e\xe1\xfd\x60\xdb\x19\xfc\xf8\x9b\x7d\xcf\x5d\x4e\x7b\x63\xe3\x7d\xa3\xd8\x4a\x71\x83\xfa\x9d\x2b\x25\xbf\x06\xa7\xde\xa3\x40\x60\xd2\xe1\x1f\xbd\xaf\xbf\x84\x4f\x0f\x5e\x88\xb3\x0e\xf1\xe3\xdf\x60\xb4\xec\x3e\x3a\x44\x28\x3b\x28\x57\x78\x27\xd0\x1d\x80\xf5\x16\xfe\xd9\x04\x78\x21\xfe\x1b\xff\x3c\xd3\x7f\xe8\xc0\xed\x37\xc0\x2f\x58\x5c\x82\x66\xd4\x5e\xfd\x13\xc3\x2c\x11\x38\xc7\xeb\x09\xc4\xb1\xfa\xe6\x3a\xba\xe7\xdf\x07\x37\xe9\x1e\xa6\xba\x5e\x98\xad\x5d\xd7\xe2\x46\x25\x8e\xde\xc2\xb3\x39\xc0\x65\x9c\xcb\x05\x84\x05\x2d\x01\xfc\xeb\x45\x67\x91\x56\xf8\xa6\x79\x15\x2f\x9c\x45\x9a\xa2\x74\x51\x25\xa4\x47\xe9\xa2\x98\x9c\x46\x11\xd5\xd5\x29\x3a\x4b\xb1\xc2\x9e\x9a\x31\x09\xcb\x48\xa0\x13\x30\x7a\x00\x10\xf5\x8b\x6a\x05\x15\x35\x2f\x0d\xf5\x39\xc8\xb9\xb6\xfa\x09\x42\xd1\x3f\xf6\x69\xf4\xd1\xc4\xd7\x1f\x8e\x71\x6c\x06\x29\xf2\xde\x02\x00\x8e\x1d\xd0\x66\xd3\x33\x43\xf5\xc8\xbf\x3c\x1b\x50\xdc\x18\x3a\x60\x13\x97\x6b\x49\x08\xec\x52\x47\x87\x5c\xff\x02\x4d\x69\xb1\xd8\xe9\xfa\xb4\x9c\x37\x60\x3d\x47\x27\x4c\x5e\xa4\x15\xb0\xfd\x0c\xd1\x6b\x24\x0c\xca\x9b\xc1\x3d\xac\xcf\xcb\x0d\xa2\xb5\x5a\xf4\x7a\x52\x9a\x1b\x45\x2f\x2d\xd4\x56\x3a\xd8\xbb\xe1\xc8\x41\xd6\x51\x53\xe6\xd3\xf7\x77\xd3\xd3\x6b\x3a\x2a\x31\xac\x94\x31\x0e\x74\xdd\x76\x04\x41\xe1\x91\x35\x60\xa4\xec\x0d\x5d\xe7\x5c\xa0\xe5\x4d\x9d\x5e\x9e\x31\xf8\x17\x94\x5f\xc6\x4c\xd3\xa4\xb2\xc8\x61\xa4\x98\xf7\x35\x65\x85\xf5\x32\xdc\x9a\x6b\x5b\x44\x6a\xc2\xf5\xac\xb5\xa0\x0d\x2d\x22\xcd\x01\xf9\xdc\xc6\x44\xcc\x5b\xfd\x46\x07\x79\x2c\x6a\xaa\x5b\x2e\x88\xe8\x11\xfc\xa3\x9f\xe0\x71\xe4\x5d\x96\x3e\xa8\x00\x61\xc3\x9f\xd4\xc6\x10\xc5\xa7\x42\x2a\xf3\x06\x00\xc6\x23\xcf\xdc\xfa\xda\x4f\x21\xbc\xd8\x10\x74\x21\x92\x31\x17\xe0\xb0\x60\x21\x8d\xe0\x76\x08\x2e\xdc\x5f\x42\xd1\x18\xe0\xe3\x4b\x68\x0f\xa3\xf8\xe3\x4b\xa8\xe7\xa9\x97\x62\xf2\xaf\x8b\x7b\x70\xbb\x11\x59\x7f\x29\x1d\x94\xef\x0f\x2e\xa5\x07\xd6\x48\xbd\xc5\xd8\x02\xe0\x26\x5f\x98\x10\x6b\xec\x19\x2c\x80\x9f\xbe\xc0\xa1\x05\xe1\x27\x2e\x66\x3a\x32\x10\x1c\x6f\xed\x62\x95\x5f\xa1\xd1\xf6\xb8\x39\x4b\x6f\xd1\x8b\x54\x7e\x05\x46\xc3\x9e\xe3\xfb\x02\xec\x0a\xbf\xa9\xb4\xd8\x7c\x36\xa7\xc9\x56\x59\x44\x43\x8b\x71\x42\xdb\x76\x33\x0c\x04\x74\x38\x29\xd6\x8b\x79\x72\x72\xa6\xd7\x2b\xd3\x3a\xc9\xe3\xba\x96\x49\x74\xa3\x36\xe5\xeb\x5a\x46\x0c\x06\x67\x82\x63\x54\x7f\x18\xe9\x6e\x0b\xa4\x04\xd8\x60\x3c\xc3\x10\x2b\x3c\x1c\xa8\x92\xf0\x3d\xae\xbb\x7b\x7f\x15\x02\x0f\xf8\xa8\x03\x36\x45\x68\x29\x86\x92\x60\xdf\xe4\x64\x24\x6d\x15\xc7\x44\xf5\x3e\xfe\xd4\x5c\x7a\xe7\x24\xd3\x4b\x11\x8b\xa4\xc8\x57\x6f\xaa\xf2\x21\x62\xd1\x26\xbf\xff\x16\xa6\x47\xc4\xa2\xa5\x28\x4b\xe3\x4c\x65\x9e\x7e\x30\xf6\x0d\x2c\x92\xf5\xdd\xc5\x36\xaf\x74\x78\x5d\x9a\x5f\xbb\x46\x7c\x97\x6f\x23\x16\xad\x65\xbe\x11\x5f\x18\x3b\x56\xeb\x82\xf1\x6a\x85\xc8\xd6\xfe\x59\x4c\x0b\x24\x6e\x00\x03\x6a\x47\xb0\xcb\xc3\xe1\xb2\x6f\xe5\x98\xaf\x56\x2f\xa1\xfb\x46\x6c\xd8\x7c\x4c\x33\xb4\x67\xdc\x90\xce\xd8\x61\x64\x3a\xeb\x13\x8e\x61\xf4\xb4\xe9\x12\xe1\x9d\x7e\x15\x7b\x30\x87\x70\x6a\x60\xb5\x88\xe2\xb0\x8a\x39\x70\x75\xb3\x95\xc1\x7a\xb0\xb3\x6c\x79\x05\x7f\x50\x44\x82\x85\x82\x16\x39\xbc\x3b\x83\xe8\x38\x9a\xde\x6a\x79\x79\xaa\x17\x57\x43\x67\x30\x3f\xaf\xb9\x4a\x73\xf8\xba\xea\x4c\xe8\x8f\xa3\x69\x0d\xd1\xc0\x65\xbf\x9a\x72\x7c\x3a\x2a\xf4\x34\x6c\xf8\x2d\x90\xdd\x1a\x73\xb5\xc1\xd2\xcb\x1a\x07\xfd\x84\x40\x12\xc6\xe5\xf4\xff\x45\xdb\x79\x49\xff\x4e\xf3\x4d\x06\xe0\x07\xc1\x49\x52\x2f\x09\xb6\xfc\x51\xf4\xff\x4d\x83\x43\x7a\x63\xad\xfe\xf9\xc9\xd9\x39\xad\x78\xe5\xb0\xa4\xdc\x2b\xf6\xbf\xe8\x06\x3c\x69\xf7\xbb\xc1\xbb\x8d\x35\x3b\x1f\xab\x3c\xeb\x62\x7d\x76\xeb\xef\x97\x56\xc3\x37\x50\x4a\xa8\x38\xae\x16\xc8\xb4\xef\x8d\x6a\xa3\x92\x08\xba\x8a\x26\x70\x53\x3b\xd2\xb9\xb2\xeb\x5c\xaf\xc0\x41\xe7\x4a\xd7\xb9\x00\x5c\x4d\xf7\x07\xa8\x74\x71\x7c\xa1\xb5\x43\xb1\x26\x15\xc2\x03\xf2\x39\xab\xb9\xc9\x82\xe5\xd8\xc5\xe7\x8a\xe7\x69\x01\x9d\x52\xcf\x6e\xf2\x06\xf3\x54\x74\x51\x07\xc5\x56\x34\xa9\xbb\x8a\x29\xa3\x2c\xec\x80\xd6\xc1\xbc\x1f\xdb\x04\x3d\x53\xf4\x18\x72\x03\x31\x8e\x3d\x82\xb2\xe8\xf2\xd2\x6d\x02\x97\x97\x91\x43\xe0\x6e\x02\xd9\x66\x10\xe4\x3a\x57\x19\x05\xaf\x58\x44\x51\xe2\xab\x88\xc3\x74\x41\x0c\xa2\x08\xb4\x62\xaa\x35\x3e\x05\xf9\xdc\xe8\xc5\xf4\x50\x13\x7a\xa8\xd9\x91\x5e\xd9\x91\xde\x1f\xdf\xc4\x0c\x70\x18\xff\x38\xc8\xdd\x58\x56\xc0\xd2\x69\xa9\x14\x8f\x1c\x79\xa2\x91\x22\xaf\x14\x3f\x7d\x2f\x4f\xaf\xc3\x73\xe9\x6d\x5e\x1e\x5a\x1f\x2c\xea\x8b\x53\x75\xf7\x26\xf3\x82\x54\x5c\x8f\xa8\x31\xd5\xa6\x91\x7c\x8a\xa3\x01\x20\x91\x5e\xdb\xf0\x40\x54\xf0\x6a\x11\x0e\x31\x3b\x08\x6f\xf3\x92\x50\x9a\x08\xba\x28\x78\x14\xb9\x8b\x18\x37\xe6\x8b\x45\x31\xd5\x2f\xc2\x49\x52\xa0\xb5\x0c\x5a\x7d\x14\x63\xd8\x54\x46\xb7\xa7\xbb\x4f\x4c\xa3\x68\x4f\x29\x03\xb1\xea\x36\x2f\x3d\x43\x68\x43\x80\xd3\x0f\x1e\x07\x5c\x03\xf3\x1a\x23\x67\x29\x1f\x99\xb9\x1b\x76\x05\x8b\xe0\x60\x05\x9e\x51\x90\x14\x9e\xb3\x0a\x3d\x46\x68\x52\x2c\xc2\x32\x14\x23\x05\x28\x3e\x96\xfb\xf5\x30\x77\x22\x39\x5a\x81\x77\x79\xd3\x85\x1c\x48\xdc\x44\x72\xc3\xeb\x47\x17\x0e\x0a\x86\x5c\x01\x35\xbe\x39\xb6\x4a\xdd\x58\xd2\x12\xbe\x05\xf2\xae\x2d\x5d\x62\x49\xaa\x3f\x4d\x02\x34\xe5\xf1\xa1\xb1\x27\x60\x72\x7c\xab\x88\x41\x0c\x13\xe0\xea\x85\xe2\xcc\x81\x54\xcd\x10\xb5\x8c\xc7\x0d\x08\xd8\xa1\xa4\x94\x73\xa3\x64\x3a\x31\x77\xcd\x06\x8d\xb5\xe1\x39\xa8\x07\x12\x20\x98\xc9\x17\xf5\xf4\x2c\xb1\x86\x94\xa8\x94\xe4\xf5\xf3\xf9\x62\x97\xe4\x8b\x1a\x4c\x41\x77\xe8\xd1\xb1\x26\x84\xc0\x29\xd6\xb1\xb7\x68\xc9\xb1\x02\x8a\xe2\x38\x9e\x48\xc7\x06\x13\xc7\x64\x22\x7d\xc1\xcc\xbe\x68\xdb\xc9\x07\xe2\xbf\x61\x91\x25\x6f\x8e\xa8\xc5\x9a\xbb\x24\xd2\xcc\x00\x96\xbb\xfd\xf2\xc8\xa8\x29\x95\xdb\x5f\x9a\x81\xc7\xd4\x80\xa5\xde\x6f\x1c\x3d\x2b\x3e\x08\xeb\xe8\xe1\x9b\x8e\xe6\x27\x27\xe7\x94\x80\xd9\x68\xee\xd5\x8c\x77\x50\x42\xdd\x40\x34\x09\x22\x57\x3d\x65\x35\xac\x38\x70\xc7\x34\x99\xbb\x1e\x95\x80\x4d\x1d\xf4\x05\x3f\x39\xa3\xac\xde\xef\x03\x99\xd4\x28\xd8\x3a\x8d\x5e\x4f\x56\x0c\xa6\x5f\x36\xd4\x0d\x40\x7b\x0d\x5c\x58\xdc\x89\xd5\xa2\x1e\x7a\xf5\x20\xc2\xb6\x2c\xac\x95\xfa\xc8\x60\x75\x88\x70\x04\x08\x73\x04\x0c\x97\x83\xab\xc8\x00\xf7\xd7\x8c\xeb\x45\x54\x57\x51\x62\x55\x84\x14\x8e\x1a\x06\x55\x9d\x47\x75\x65\x01\xd6\x8b\xea\x18\xf9\x75\x2f\xcd\x99\xdd\xbc\x80\x3f\xad\xc5\x5d\xbf\x2a\x77\x92\x3e\x39\x65\x77\x61\x41\xc6\x58\x09\x8e\xdc\xc4\x34\xd8\x83\xec\x71\x00\xb3\xae\x67\x8d\xcf\x6b\x6b\x6c\xa1\x90\x4a\xef\x81\xa7\x45\xdb\x56\x19\xbb\xe6\x6b\xb3\x2a\x33\x03\x2b\xbc\x40\xee\x94\x44\xb1\x2b\xef\x9d\x43\xd1\x86\x08\x1d\xbb\x55\x47\x85\x97\xa4\x48\x06\xc6\xb7\x7c\xc7\x0b\xae\x93\x67\xfa\xe0\x5b\xf4\xbc\x74\xfd\xe7\xc9\xa5\x39\xe9\x5d\x4f\x07\x24\x95\x7a\xa8\x5d\x77\xb2\xdb\x0c\xa4\xb6\x38\x26\x57\xfc\xda\xcb\x95\x5d\xf3\xab\x19\xda\x1f\x50\x76\x65\xe8\xf8\x28\x5b\x72\xef\xd3\x04\xc5\x6c\xdd\x57\xd3\x6b\xbd\x09\x28\x9f\x59\x47\x05\xcc\x3a\xd7\x6c\xc8\xfd\x1b\xc7\x8a\xd2\x8e\x1d\x96\xd7\x8b\x67\xc9\x67\xcc\x6b\x05\x7e\xd5\x31\x3b\x32\xe5\x91\x7f\x71\xe5\x23\x93\x8f\xf1\xf9\x5d\xfd\x2e\x9f\x1f\x2a\x8a\x94\xe5\xee\x32\x00\xa1\xca\xb0\x97\xe8\x5d\xc6\xb2\xa0\x14\x94\x49\x6e\x57\xf2\x54\x65\x89\xbf\x0e\x48\x06\x4a\x83\xd5\x80\x04\xee\x1a\x91\xde\xea\xb6\x9d\xac\x6c\xeb\x1b\xb6\x36\xf7\x6c\x29\xc5\x98\x34\x2b\xd7\xa4\x8e\xe3\xc9\x6a\x66\x49\x87\xe2\x78\x72\x0b\x56\x60\xc8\xb9\xb8\x0a\x48\x0e\xdb\xf6\x9a\xd9\x7e\x2e\xa7\xd7\xc0\x7f\xc6\x7d\x20\x33\x7a\xde\x9c\xf7\x42\x1e\x70\x05\x6c\x28\xdb\xf1\xe6\x68\xc7\xb5\x04\x11\x82\x67\xa1\xb7\xa7\x89\xb7\xf3\xa1\xb4\xda\x76\x67\x92\xfa\xb9\xa8\x56\xf5\x1d\xa0\x95\xd8\xc3\x01\x69\xf8\x03\x9c\x0e\xf4\x2a\xae\x0e\x52\xc7\x6d\x79\xc3\x70\x1e\xf0\xfc\xf3\xb3\x45\x99\xac\x1c\x51\xa3\xae\x0e\xb9\xb1\xa4\x7b\x03\xc6\x3d\xfc\x2a\xb3\x14\x43\x8d\xa5\x01\x04\x9b\x02\xcb\xaf\xda\x30\x09\xf4\x9f\xcb\x38\x6e\xd2\x65\xd6\xbd\x89\xe3\xaf\x48\x43\x41\x13\x60\xfa\x3b\xf8\x04\xf5\xa2\x8e\x6e\x48\x0d\xb8\x52\x3a\x45\x0b\x16\xfe\x5a\xf7\xab\x1a\x21\x60\x21\xb4\x6d\x57\xce\x06\xc5\xd8\x08\x74\x01\x26\xd3\x87\xd9\x16\x2e\xd8\x24\x6d\xdb\xc9\x57\xa4\xa0\x6d\xbb\x8c\xe3\x0d\x29\xd2\x6b\x68\xc0\x5b\x94\xc3\xc8\x8e\x17\x58\x0d\xa2\xff\xc2\x18\xec\x88\x3f\xdd\x8c\xe6\xd7\xec\x50\x8b\xc7\xf1\x76\x48\x56\x7a\xcd\xee\x14\x65\x3a\x2f\x42\x3f\xfa\xe5\x18\x07\x12\x7e\x3c\x2c\x83\x99\x3f\x3b\x5b\xd6\x1d\xc0\xfe\x39\xba\xba\xc6\x10\xb0\x1c\xb0\xd3\x70\xeb\xae\xb7\x66\x30\xc9\x50\x8b\xdf\xe3\xcb\x99\xef\xe9\x51\x9f\x1d\xb9\x42\xa4\x40\x45\x07\x58\xae\x43\x1e\x2d\x4f\xe7\x79\xe0\xc6\x27\x4c\x5b\x17\x54\x59\x44\x4d\x13\xf8\xf5\x80\x05\x3b\x34\x0e\xd6\x12\xbf\xe7\x20\x7e\x3c\x96\xa6\x04\x0c\x59\x7f\x6f\x43\x2f\xca\x3f\xc0\x24\x82\x19\x87\x17\xb3\x66\x35\x32\xed\x46\x14\x73\xc4\x4c\x21\x0d\x26\xee\x7a\x3d\xfe\xed\x11\x22\x12\x83\xf9\x03\xbe\x81\xe1\x82\x81\x02\x7a\x67\xb2\x57\x01\xf7\x77\xdb\x56\xc3\xa1\x27\xb0\xd6\xcc\x8f\xcb\x48\x01\x78\x24\x67\x00\x95\x8b\x84\xa3\x7f\x3c\xe3\x93\xb3\xa3\x62\x11\x24\x5f\xd0\x84\x54\xa3\x63\xb9\x2b\x8d\x31\x03\xd4\x09\x80\xbb\x37\xb2\xf6\x2b\x2e\x66\x65\xbd\x44\xf7\x8e\x7b\xff\x96\x9d\x5d\xe8\x83\xe0\xe2\xf4\xe8\x72\x06\x8a\xd7\x5f\xbe\xfb\x76\x88\x4b\x08\xda\x1b\xd5\xb6\x03\x8b\x22\x47\x8f\xa7\x07\x2d\x40\x6c\x4a\x0e\x23\x5f\xcc\xbe\x7c\xf3\xdd\x0f\x3a\x41\x49\x31\xe1\xd7\xb2\xde\x5c\xc0\xe7\x20\x49\x88\x7b\x75\x7a\xbf\x29\x23\x6a\xf0\x33\x2b\xfa\x28\x1d\xd4\xb1\x43\x3a\x9c\x00\xba\xa0\xb9\x9f\x6d\xbe\x78\x78\x97\x5f\xeb\x63\x0f\x89\x20\x49\x29\xa4\xac\xa5\x67\x8e\x7c\x39\x83\x10\x12\x7d\x53\xdd\xe6\x65\xb1\x3a\xfe\xe5\xbb\x6f\x93\xe3\x68\x0a\x04\x27\xd0\x12\x6f\x74\x6d\xd3\xf7\xd9\x93\x53\xf6\x02\x4e\xc0\x8b\xf7\xd5\xe9\x35\xfb\x60\xc4\xae\x66\x77\xb5\x29\x94\xb9\x44\x69\x8b\x4d\x7e\x2d\x5a\x29\x1a\xa1\xda\x75\x51\x0a\xb8\x55\x79\xf7\xd1\xeb\x97\x0f\xe2\xe1\x5a\x54\xd4\xbf\x6a\xf9\x4e\xf5\x8c\xd4\x46\x7d\xad\xcd\x7c\xf1\x1c\xee\x15\x98\xa1\xb4\xed\x1b\xab\xeb\xa6\x0b\x3d\x49\x0a\x9a\xe8\x14\xa7\x51\x1a\x4d\x87\x3c\x24\x4e\x57\x5f\x2c\x54\x12\x69\x31\x21\x8b\x58\x61\xa9\x01\x2c\xc9\xbc\x6c\x5b\xfb\xe5\x84\xf3\x2b\x9d\xbf\xb1\xfc\x0f\x6d\xaf\x14\x75\x59\x15\x90\x92\x4a\x8b\x0c\x13\x83\xe1\x92\x6f\xf8\xf8\x55\x20\x40\x71\x8e\xcd\x6c\xa0\x6c\x54\x84\x26\xea\xa8\x4a\xad\xa5\x52\xc6\x45\xb5\xac\x57\xe2\xa7\xb7\xdf\xbc\xac\x37\xdb\xba\x42\x06\xc3\x69\xc4\xa3\xe9\xc8\x1b\xff\x28\x4a\xf7\xa0\x57\xc2\x93\x3c\xb5\x88\x3a\xc3\x16\x06\x48\xb2\xd9\x3f\x7f\xdb\x09\xf9\xa0\xa5\x4a\xbd\x57\x94\x79\x51\x39\x33\x41\xdb\x01\x01\x30\x45\x81\x07\x74\x2d\xa1\xb1\xee\xa8\xee\x5a\xd2\xf3\xdf\xf9\x4e\x11\xc9\xc0\x67\x47\x77\x9b\x3b\xcd\x1a\xd9\x2d\x8e\x68\xcf\x62\xb2\x11\xb2\xc8\xcb\x71\xdc\x38\xd3\xb4\xc4\xa8\x9e\x4c\x44\xac\x07\x05\x68\x0c\x3f\x68\x0c\x78\x6e\x04\x00\x18\x4d\x32\xcc\xfd\x3b\xea\xa9\x84\x99\x56\xdd\xe9\x5b\x2c\x7c\x81\xd0\xa8\x0d\xf7\xd4\x9a\x6e\x0e\x92\x73\x0a\x92\xc0\x51\x5c\x37\x97\x6e\x63\xa3\xbe\x29\x1a\x12\x25\xf6\xcc\x1b\xd1\x38\x7e\x67\x06\x74\xa0\x47\xd1\xc2\xc2\x07\xd5\x01\xfe\xe2\xdb\xa5\x05\xd8\x9f\xdc\x38\x30\x60\xba\xa7\x61\xe5\x7c\xab\x2e\x5f\x65\x14\xd2\x6d\xa1\x11\x40\x4f\x49\x24\xe9\x02\x15\x44\x72\x44\x41\xf4\xa8\x2b\x92\xa0\x80\x6e\x08\x39\x3b\x6e\x81\x17\x8a\x45\xef\xe5\xfb\x2a\xd2\x1b\x5f\x32\x12\x55\x8e\x47\x45\x2c\x59\x47\xc7\xa3\xf8\xe9\x9f\x9e\xcd\x4f\xaf\xd9\x5b\xc5\x4f\xff\xcf\xec\xe9\x93\x53\xf6\x83\xe2\xa7\x24\x5d\xc4\x19\xbd\xe4\xe9\x3f\xe2\xec\xe9\x29\xfb\x27\xac\x39\xb3\xa7\x0b\x9a\xa4\xc7\xef\x55\xf6\x94\xa4\xff\xd0\x29\x66\x4f\xe9\x93\xd3\xeb\x0d\xfb\xd2\xac\x49\x5f\xbd\x7a\xd7\x7e\xfd\xea\xc5\x97\xfa\x90\xf8\xbd\x0e\x7b\x7f\xfa\xfe\xf4\x94\x7d\xa3\xf8\xe3\x9e\x7d\x0b\xff\xbe\x56\x3c\x7a\x7a\x1a\x59\x57\xd2\xe8\x69\x44\xd9\xbf\x46\x0c\x72\x72\x1f\x20\xf6\x6b\xff\xee\x36\xb4\x3d\x1a\x6e\x09\xce\xc8\x54\xa7\x7d\x64\xfd\x59\xe7\xac\xee\x5f\x87\x07\x97\xbb\x78\xe9\x20\x0d\x29\x6f\xc5\x6b\xa3\x0c\x8e\xa6\x11\xe7\xbc\x4a\xe7\xd9\x82\x54\xbc\x72\x28\x2a\x6d\x1b\x3d\x8d\x18\xba\xbc\x09\x70\xf5\x48\x33\xea\x2c\xcd\x25\xa5\x49\xff\x1d\x9c\x03\xa4\xcf\x04\xf3\x45\x7f\x65\x46\x60\x0f\xc1\x39\xff\x56\x75\xb5\xcf\x49\x83\xef\x77\x0e\xa7\x23\x6d\x32\xb4\xa7\xc4\x35\x23\x6d\x8c\x47\x52\x37\x24\xcd\x27\x25\x6f\x8c\xd9\xf1\x21\xa3\xdc\xb2\x6d\xeb\xb6\x2d\xd2\x32\x5b\xd4\x8b\x09\xd9\xf1\x92\x1a\xfd\x5a\x42\x14\x10\x3e\xeb\x33\x45\x67\x44\x5f\x52\x96\xeb\x7f\x26\x67\x74\x4f\xd9\xce\x6e\x96\xb9\x1f\x39\x9d\x67\x5a\x1e\x2f\xc0\xff\x2a\x8e\x73\xe8\xe6\xae\xde\x3f\xa9\x9e\x37\x22\xbf\x9c\xe5\xff\xcc\xef\x2f\x84\x52\x45\x75\xdd\xcc\xd6\x65\xae\x8c\xd7\xa8\xa3\xfe\x96\xb8\x21\x74\x2a\xcd\x54\x66\x5a\xb2\x2f\x52\x09\xe4\xb3\x6d\x4b\x2a\xfe\xb8\xa7\x34\x95\x19\x92\x1a\x7b\xec\x65\xbe\x6b\xab\x60\x15\x65\x62\xff\x2f\x05\xd7\xb5\xfc\x15\xfe\xf5\x8d\x90\x96\xaa\xb8\x15\xc9\x9c\x95\x79\xa3\xbe\xab\x57\xc5\xba\x10\x2b\x70\x81\x55\x39\xb8\xc2\xfa\x65\x4d\x1e\x77\xb2\x4c\x6c\x22\x20\x65\x47\x5f\xbd\x7a\x17\xb1\xa2\xf9\xb6\x5e\xe6\x65\x82\x26\x10\x57\xf5\x4e\xb5\xf9\x76\xab\xff\x3f\x69\x54\x2d\xf5\xce\x3e\x9b\x9e\x40\x9e\x4d\x51\x57\xb0\xc1\xeb\xbd\xbe\xbd\x2b\x56\x40\xd7\xf9\xe4\x14\x57\x9c\x57\xc6\x9f\x7e\x59\x97\x94\x21\x2d\x0c\x50\x07\xca\x5a\x0b\x66\x40\x32\x31\x99\xb3\xbc\x79\xa8\x96\x86\xd5\x57\x89\x4a\x01\xf3\x5b\xa4\x0f\x49\x05\x8a\x5d\xa7\xf7\x27\x77\x77\x77\x27\xeb\x5a\x6e\x4e\x76\xb2\xc4\x7d\x6d\x75\x7e\xbc\xbc\xd1\xa2\x8c\xe2\x3f\xbd\x7b\x7d\xf2\xdf\x11\xd3\xe2\xde\x56\x19\x97\xbd\xd7\x0a\x29\x17\x50\x5c\xda\xea\x0d\x2b\x42\xb8\x76\x0c\xd1\x3f\x23\x76\xaf\x9f\x83\x9c\x36\x25\x3b\x76\x12\x16\xfb\x67\x03\x98\x9a\x5e\x04\x1d\x62\x62\xfc\x33\xbf\xcd\x0d\x75\xc6\xde\x96\xbd\x49\x1e\x75\x9a\xa7\xef\xaf\xee\x37\xe5\xfb\xab\x53\xcc\xf2\xf4\xfd\x95\xfe\x7b\x8a\xe9\x9d\xbe\xbf\xd2\x7f\xdf\x5f\x9d\xee\x99\x14\xcd\xb6\xae\x1a\xf1\xba\x10\xe5\xca\x7c\x1c\xd9\xc0\x5f\xbe\xfb\x36\x32\xb5\xb0\x41\xef\xc4\xbd\xb2\xc5\xb2\x61\x7f\xb9\x78\xf3\x3d\x96\xe0\x56\x48\x65\x9c\x16\xa1\x88\x51\x82\x62\x23\x0a\x8d\xc7\x50\x67\xdd\xd0\xf8\xa8\x53\x89\x12\xfd\x35\x8a\x99\x26\x58\x57\x3c\xe9\x44\xda\x3d\xf3\x86\x34\x0e\x19\xdb\x55\xf7\x4a\x1f\xc4\xdc\xa0\xda\x1d\x30\x2a\x51\x8b\x9f\x14\x81\x89\x13\xce\x15\xca\x14\x4d\x7e\x52\x24\x0c\x05\xb6\x0c\x1d\xd0\x31\xd5\x7c\xad\xc8\x37\x8a\x42\xe0\x3b\x99\x57\xcd\xb6\x96\x4a\x07\x7e\x6b\x02\x7b\xfe\xd5\x63\x4a\xa6\x1e\x27\x1c\x58\x75\x1a\x44\x87\x9e\x3b\x23\x2a\xf1\xba\x69\xbd\xdb\x92\x47\x70\x14\xdf\xf0\xed\xcc\x54\xbb\x6d\xb7\xec\xb6\x7b\x8c\x63\xe2\x43\x74\x6c\x8c\xb0\x44\x17\x97\x64\x43\x13\xab\x45\x7c\x08\x9c\xff\xd9\x35\xbf\x9c\xbd\xcc\xcb\xf2\x2a\x5f\x7e\x68\x48\x54\x57\x4b\x71\xbc\x11\x9b\x5a\x3e\x44\x94\x5d\xf1\xed\xac\x51\xb9\xda\x35\x2f\x81\x50\xfd\x71\xcf\xee\xf4\x0a\xfb\x4a\xff\x73\xcf\x23\x24\x1b\x15\xab\x88\x5d\xf0\x47\x29\xf2\xd5\xc3\x85\xd2\x07\x6b\x20\xf7\x7e\x6b\xc6\xc5\xd7\x22\x5f\x8d\x91\x47\x1f\x21\x14\xb6\x3e\x98\x20\xed\x4a\xc3\x1f\xf7\xe7\x8a\xff\x53\xa1\x9f\x6a\x4e\xcf\x69\x93\xaa\x01\x3d\x00\x10\xac\x73\x72\xf0\x55\x00\xb4\xa0\xd2\x67\x19\x3d\x52\xbc\x49\xc5\x48\xd4\x7d\x20\x5f\x28\x94\x2f\x94\x11\xf9\xd8\xb1\x96\xf9\xae\x85\x7a\x51\x96\x61\x5d\xc6\x40\x8a\x97\xc6\xdc\x0b\xb4\xf8\x6f\x11\x2e\x63\x50\x73\x6f\x34\x62\x96\x4b\xf0\x29\x78\xd5\x2f\x5c\x36\x12\xd4\xb6\x82\xdd\xa5\x22\xe3\xe6\x96\x73\xcf\xea\x5b\x21\x65\xb1\x12\xdf\x15\x1b\x64\xac\x3c\xa8\xdb\x5e\x82\x9f\xdd\xc6\xc4\xe3\xc2\xa6\xd0\xf5\xed\x78\xf7\x80\x57\xfb\x92\x5e\x58\x77\x3c\x91\x5e\x98\xf1\xe0\x3b\x79\x28\x14\xa0\xaf\xf4\x59\x3d\xd5\xff\x32\x91\xaa\x2c\x0b\x89\x30\xf2\x2b\x3d\x5b\x46\xec\x63\xda\xf6\xde\x6d\xca\x71\x5c\xcc\x20\x22\x51\x94\xbd\x21\x73\x7b\xa3\xbb\x87\x33\xc2\x83\x43\x62\xb8\xa0\x6c\x3b\xdb\xc9\x92\x13\xa2\x27\x81\xfe\xd9\xb6\x66\x07\xa1\xd3\x28\xa2\x4e\x72\xfb\x5e\x31\x6f\xf5\x9f\x46\xa7\xa7\x91\xfe\x16\x31\x7d\x66\x1b\xa1\x6e\xea\x55\xdb\x4a\xc3\xfb\xb5\x75\x21\x18\x85\x6d\xbb\x1d\x99\x93\xee\x01\x44\x17\x7a\x58\x16\x8a\x22\xeb\x2d\xba\x9d\x2d\x65\xdd\x34\x5f\xd6\x9b\xbc\xa8\xe8\xe3\x08\xc8\xb7\x16\xd3\xf4\xb1\xbb\xc4\xcd\x14\x2a\xc3\xcc\x03\xfe\x61\x41\x22\xfc\x5f\xbd\xfa\x4c\xf5\x3e\x5c\x37\x6a\x82\xa8\x05\xde\x8b\x12\xc2\xcd\xf1\xfc\x05\x7d\x0c\xd3\xd1\x6b\x66\xb1\x36\xb5\x8a\xe3\xed\xcc\xdb\x0f\x3b\x26\x3c\x27\xe5\xd8\x78\xe6\x03\x6e\xcf\x38\xf8\xa8\xdb\x54\xe6\x2b\x40\xea\xcb\x4b\x4a\xd9\x17\x7a\xb1\x64\x5b\x26\xd9\x05\x65\x4b\xab\x64\xb8\x00\x41\xe4\xe6\xb8\xa8\xc8\xda\x6a\xa9\x75\xd6\xb8\x29\xd3\x38\x9e\x73\xbd\xe4\x81\xf8\x30\x9d\x82\xd4\x11\xe8\xaa\x22\x58\x0d\x55\x2e\x55\xd7\x8d\xf8\x27\x04\xeb\x63\x5b\xb0\x40\x30\xac\x2c\x93\x2f\xcd\xb1\x04\xa3\x52\x56\x63\x33\xbb\x51\xf2\x16\x6e\x48\x83\x8f\x16\x07\xda\x05\x60\x2e\xcd\x92\x8b\x32\x02\xd2\xc5\xb9\x9b\x88\xdf\x15\x18\xc0\xd7\xd6\x34\x22\xfe\xe9\xe8\xce\x14\x8b\xa6\x91\x96\x7c\x57\xa6\x84\x28\x2c\x5b\x07\x1e\xca\xbc\x5e\xf0\x8a\xd5\xe9\x75\x78\xd8\x5d\x40\xfb\x38\xe5\xe4\xc2\x34\x40\x4d\x17\x51\x1c\x25\xd1\x22\xa2\x53\xd3\x71\xc6\x22\xd2\xc4\x47\xf5\xf3\x76\xb6\xcc\x97\x37\xe0\x09\xc4\x6b\x57\xba\x1f\x14\x8b\x9e\x9c\x45\x94\xad\xc6\x13\x8c\x2e\x79\x34\xbd\x57\xd3\xe9\x74\x65\xe7\x67\x8d\x3f\x8b\xb5\x15\x02\x01\x06\xc2\x97\x0a\xd3\x3a\x8b\xe3\x8b\x59\x7f\xd1\x24\xd1\x37\xeb\x13\x1b\xe7\xe4\xa2\xa8\x96\x22\x62\x83\x2f\x41\xf9\xab\xf2\xeb\x8f\x25\xf2\x7d\x5d\x89\x93\xef\xf4\x14\x88\xba\xd8\x94\x32\x6f\xe0\x77\xbd\x6e\x94\xe4\xbd\xfe\x95\xfe\x23\x1d\xcf\xc9\x24\x70\xf2\x0e\x2c\xb0\x83\x04\x28\x1b\xfb\xe0\x05\x88\x89\x91\xbf\xc4\xa4\xf3\x0c\x94\xe4\x28\x40\xa6\xe1\x9b\x6c\x71\xf0\xcd\x54\x9f\x0e\xa0\xd8\x7e\xf0\x42\xef\x60\xd3\xd7\x6a\x1a\x9d\x1f\xff\xc6\xe7\xb3\xf9\x59\x94\x44\x11\x4d\xba\x64\x10\x79\x68\x3b\xbb\xc1\x5d\x8d\x8e\x14\xf3\xa6\x7b\x9d\xde\x64\x60\xd2\xb5\x9d\x21\x15\xcc\x85\xa8\x56\x16\x43\xca\x0f\xc3\xfb\xc4\x0d\xbb\x60\x5b\xda\xb6\x4b\x77\x83\x7b\x61\x96\x76\x48\xe4\x9e\x47\xf0\x14\xb1\x6b\xe0\x08\xdd\x76\x90\x1b\xec\x02\xfd\xa5\xb7\xb3\x66\x07\x9a\x53\x1d\x02\x30\x1c\x5b\x54\x0e\x52\x56\xf0\x2f\xb4\xd8\x65\x96\x17\x90\x21\x2e\x66\x9d\xfc\xc1\xcf\xd8\x3a\x8e\x6f\x7b\xab\x06\x70\xda\xa4\x17\x6c\x9b\x05\x0b\xd2\x76\x06\x82\xbf\x6e\x78\x85\xee\x30\x9f\x03\x00\x39\x3f\x04\x4c\x65\xeb\x11\x99\xe8\x5a\x4a\x70\xdf\x52\x5c\xcc\x97\x7c\x72\xc6\x8a\x59\xa3\x4f\x43\x77\xec\x0d\xed\xd6\x60\xd8\x50\xd5\x8d\xac\xef\x8e\x5f\x1c\xbd\x21\x27\x67\xec\x05\xdd\xef\x61\x2f\x85\xa7\xe8\xfb\xfa\xd8\x49\x97\xfe\x09\xfe\x0d\x9e\x42\xdd\xb1\x14\x04\xc4\x3b\xf6\x8a\xdd\x73\x79\xb4\x6c\x5b\xb2\xd4\xe7\xd9\x5d\x1c\xf7\x7c\x7b\x76\xba\xb9\xcc\x8d\x48\xce\x1b\xbd\x5a\xb1\xa0\xb1\xd4\xe7\xf3\xc5\x9f\xf5\x59\x8d\xab\xcf\xf9\xb3\xf9\x3c\x8e\xd5\xf3\xcf\xe6\xf3\xb6\xfd\x6c\xfe\x67\xce\xb9\x62\x55\x1c\x93\xbb\x81\x5b\xb7\x07\x75\xe5\xc8\x66\xec\xe9\x83\xe9\xd6\x73\x63\xf1\x3c\x7a\x1a\x71\xce\x77\xe9\x3c\x3b\xa7\x3b\x77\x93\xeb\x3c\x4c\x90\x1b\x5b\x38\xf9\xa4\x6d\xc1\xd6\x25\x94\xb9\x7a\x33\x8c\x52\xcf\x1a\x4d\xcb\x1f\x8d\x16\x55\x1a\xf0\x33\xd5\xff\xe2\xea\x54\x51\xfa\xb8\x73\xe7\xee\x82\x1e\x5d\x49\x91\x7f\xd0\xbb\x9e\x2e\x4c\x51\x1d\x4b\x5a\x43\xb9\x40\x98\xe9\xf8\x9f\x25\x8a\xa5\x3b\xa4\x0d\x9e\x75\x47\x9a\xb4\xd0\x72\xe3\x54\xbf\xc8\xe8\x63\xcd\x0b\x93\x62\x0e\x04\x39\x05\xdd\x03\x26\x46\xae\x73\x70\xe6\xdf\xf5\x04\xeb\x1e\xc7\x5d\x51\x6a\xca\x64\x5a\x67\x7b\xb2\x65\x17\x80\x34\xdc\x6f\xdf\x1e\x08\x32\xf0\x83\x3c\xee\x81\xd6\xb2\x53\x28\xe0\xe6\x00\x2d\xb1\x4c\xcf\x32\xe4\xa4\x04\x61\xcc\x2b\x32\x2d\xd3\xbc\x2f\x5d\x06\x55\xca\xb3\x23\xe4\x7d\x5c\xda\xae\x39\xaf\xc1\x56\x4d\xcc\xc2\x63\x61\x6a\x68\x0b\x47\xc2\x41\x2a\x9d\xec\xe2\x18\x50\xe4\x74\x09\x5f\xc3\x99\x29\x8e\x89\xe2\x7e\x00\xdc\xfd\xd8\x1a\x00\x92\x41\xcd\xbc\x9c\x75\xb6\x38\x5a\x6a\xdd\x33\x4e\xdd\x8d\xeb\xdb\x2e\x8e\x77\x60\x58\x0f\xbd\x43\x72\x5e\xa6\x3b\xe8\x8f\x3a\x6b\xdb\x32\x8d\x9e\xc2\x4f\x8f\xc1\xb8\x04\x23\x9f\x86\x17\x1e\xaa\x2b\x4d\xcf\x32\x34\xc8\xf7\x12\x80\x65\xd4\xa5\x01\x4f\x94\x3e\x02\x84\x73\xbe\xc8\x81\xe1\x38\x01\x9f\xfd\x12\x46\x18\xa9\xb9\x8e\xc3\x96\xae\x43\x1b\xdd\xfe\xde\xf8\x82\xc8\xb9\xce\x3e\xd7\x2d\x02\x13\xbe\xa1\x8a\xe7\xce\xe2\x51\x2f\x13\xf8\xdc\x2d\x0e\x46\x6b\xd9\xc0\x21\x2a\xb8\x21\x61\xf0\x27\xc9\x17\x2f\x12\xbd\x42\x60\xf7\x35\x80\xfc\x26\xeb\x8d\x1e\x92\xd3\xe8\x58\xd5\xba\x01\xf6\xfb\x7d\x98\x8e\x59\x46\x23\xa6\xdb\x3d\x51\x7b\x3d\xea\xee\xd8\x05\x60\x23\x2d\x48\x6f\x77\x26\xaf\xf8\xc5\xd8\xec\xfb\x36\x6f\x94\xdb\x90\x11\xbe\x64\xb0\x1d\xf3\x57\x94\x1d\xfa\x5e\x6f\xbc\xf6\x33\xb3\x09\xf3\x57\x94\xb2\x67\xb8\xc8\xb4\x6d\xf4\xf5\xab\x17\x5f\x46\xb0\x97\x68\x11\x66\x71\xcf\xa3\xaa\xb6\x04\x00\x89\x59\x8b\x30\x54\x6d\x6c\x39\x12\x72\xcf\xef\xe0\x48\x22\xd8\x0d\xbf\x43\x89\xa6\xe4\x13\xb2\xe2\x77\x66\xb3\x40\x69\xea\x9e\x4d\x54\x1c\xdf\xb7\xad\xde\x79\x4c\x93\x2a\x30\xcc\x06\x28\x0c\xd8\xa2\xe1\x60\xc3\x95\xfb\x09\xd4\x49\x44\xb6\xed\xbd\x3e\x53\xb0\x72\xf1\x10\xa0\x89\x6d\x58\x7a\xc3\xee\xd9\x45\x46\x93\x07\x1f\x4e\x6c\xa3\x37\x99\x7b\xb6\xca\xba\x44\xf5\x09\x8b\x5c\xe9\xf3\xb4\x59\x88\x83\xed\xa9\x5c\xe0\x06\x65\xba\x29\x81\xa7\x57\x58\x46\xbd\x5f\xb1\x72\x71\x93\xe8\xe4\xae\x01\xa5\xc7\xcb\x24\xa3\x3a\x25\xd2\xdb\xe9\x5e\x9a\x9d\xd4\xed\x76\x27\x27\x56\xa6\x86\x0b\xb6\x31\x89\xba\x06\x83\x35\x7b\x1e\xbe\x80\x73\xef\x5f\x2e\xde\x7c\x7f\xc0\x79\xeb\xf8\xd2\x3a\x91\x30\xc9\x22\xd0\xe0\xe0\x59\xf9\x02\x14\x51\xe3\x47\x5e\xfb\x8d\x35\x6f\xe9\x18\x5f\x03\x33\xb2\x6b\xa1\x22\x16\x6d\xeb\x46\x0d\xa1\xd0\x7b\xce\x5a\x21\xf3\xc3\x86\x18\x68\x7d\xb0\x4b\xaa\x00\x44\xdb\x6a\x5a\x50\x8f\xd2\x41\x73\x81\x02\x49\x30\x63\x05\x65\x17\xa4\xa4\xc0\x39\x22\x99\x99\x33\x09\xe0\x64\xf4\x6f\x9a\xe2\x18\x0c\x1a\x75\xaa\x96\xfc\x99\x1f\xa8\x31\xe4\xea\x67\x86\xaa\x4d\x97\xa1\x6d\x02\x06\x02\xb7\xa7\x86\x3c\x73\x8a\xca\xb3\x50\xa5\x06\xca\x31\xf3\x95\xaf\x87\xd8\xef\x59\xb7\xcc\xf6\x70\x5e\x3b\x2a\x6c\x84\x69\xde\xf7\x2f\xb3\xee\x64\xbe\x7d\x51\x8e\x58\x0e\xfb\x87\x78\xd8\xc3\x08\xe2\xb1\x10\xc1\x3d\x53\xdf\x74\xae\x25\x6a\xc5\x2f\x0d\x60\xf0\x80\xae\x9c\xce\xc4\x6f\x64\x4e\x3d\xaa\x3e\x1b\x2d\x74\x7e\x09\xd8\x3c\x6d\xca\x4c\xf5\xaf\xc2\x1c\x7f\x27\xdc\x5f\x9d\x0b\x24\x37\x35\x47\x6a\xf0\x3c\x3e\xa7\xba\x80\x83\xe0\x8e\x8e\xda\x51\x3b\xa2\x5d\xb9\x51\x88\xe8\x76\xf8\xa6\xaa\xc6\x69\xa9\x0f\x59\xdb\x7b\xae\x14\xee\xfb\xd0\x91\x82\x7e\xdc\xbc\xde\x59\xd2\x4b\xae\x9c\x0c\x45\x3a\x4f\xf8\x85\x9c\x99\x0e\x82\x1b\x3d\x8f\x94\x92\x62\x91\x47\xf4\x2a\x9b\xce\xc7\x60\xcc\xb4\x44\x86\x65\xd6\x49\xab\xd0\x78\x9b\x26\x98\xfe\xae\x1a\xe4\x10\xb0\x28\x42\xff\x11\x41\x67\x55\xad\x48\x74\x55\xaf\x1e\xa2\x21\x1f\x70\xe7\x6a\xe2\xc8\x21\xed\xf5\xa0\x25\xab\xa7\xfb\x0e\x80\xd1\xf8\x78\x6e\x1b\xb1\x5b\xd5\x8d\x45\x56\x1a\xc1\xe5\xe8\x45\x04\xae\xa9\x52\x00\x5d\xe7\xf8\xab\xb1\x44\x26\x44\xf8\x1c\x6f\x5a\xe2\xc3\x47\x24\x3c\xf9\x08\x6b\x02\x64\x13\xdc\xbb\xdc\xdf\x48\xdf\xcf\x1e\xec\x29\x3a\x5e\x1a\x31\xfb\xe5\xbb\x6f\xbf\x56\x6a\x6b\x0e\x59\x66\xe7\x57\x7a\xf6\x82\x12\xf8\x67\xc5\x1f\xe7\x00\x1c\x70\xf6\xec\xd9\x67\xc9\xb3\xf9\x9f\xf7\xec\x37\xd5\xbf\xdc\xb9\xbf\x91\x84\x1e\xe9\x23\x93\x6c\xf8\x64\xf2\x9b\x8a\xe3\xe8\xae\x50\x37\x2f\xa5\x58\x89\x4a\x15\x79\xd9\x44\x45\x75\xfc\x9b\x62\x5b\xf8\x90\xff\xa6\x20\x9a\x29\xac\x3b\x5e\x90\x81\x99\x08\xab\xf0\x84\xa7\x53\x6e\x5b\x9d\xf0\x44\x05\x1a\x2c\x2b\x59\x04\x14\xc7\xbe\x09\x2a\x57\xa6\x78\x5a\x1c\x07\x96\x4b\x82\x76\x6a\x4c\x81\x66\x4b\xe1\x71\x4b\x3f\x35\x42\xe2\xbd\xfc\x6c\x9b\x37\xcd\x5d\x2d\x57\x7a\xaa\xdf\xdf\x48\x14\x2b\x3b\x71\xd6\x0f\xd4\xf2\x2a\xf7\x02\xac\xf8\x6a\x22\xda\x33\x44\x1c\x37\xb3\xbe\x7e\x74\x2c\x8c\x74\x9f\xe8\xcc\xbd\xaa\xb6\x6d\x91\x46\xbf\x9c\x98\x9e\x12\xab\x13\x60\x34\xcd\xda\x96\x8c\x86\xf3\x28\xec\xda\x88\xb2\x82\x36\xc3\x03\x75\xce\xc0\x2c\xfb\x48\x8e\x59\x22\xfb\x6a\x65\xb8\x2c\xa8\x78\x33\xab\xab\xb2\xce\x57\xf0\x03\x04\x17\xf8\x05\x47\x50\xf8\x65\x0e\x9e\xf0\x1b\x4e\x75\x20\x0d\x2d\x6f\xf2\xea\x1a\x19\x86\x99\x39\x69\x83\xa3\x4b\x63\x0f\xe1\x89\x91\x82\xd0\xfd\xa5\x8f\x8c\xd5\x18\xc1\x65\x51\x93\x39\x33\x31\x69\x52\x13\x1b\xce\x1a\x4f\x46\xd2\x2f\x7e\x56\xa9\x0d\xca\xda\x76\x34\x1a\xde\xeb\x00\xef\x45\xe3\x4e\x10\x46\x81\x06\x6f\xe8\x88\x79\x92\x17\x53\xdc\xab\xc5\xe3\x55\x51\xe5\xf2\x21\xe9\x82\xf7\xc9\x23\xdc\x00\x85\x11\xf7\x0c\x88\x38\x87\x9a\x7b\x42\xd1\x15\xc1\xb6\xaa\x24\x94\x55\xbd\xb6\xb5\x2d\xaa\xa5\x56\xac\x79\xe7\x87\xeb\xda\x7e\xd1\xf5\x42\x95\x8c\xb6\xbd\xd7\x99\x5a\x76\x6d\xbc\x33\x37\x70\x17\x8d\x2a\x17\x64\x1c\x57\x00\xc3\xc8\xa4\xce\x1f\x7b\x0e\x75\x0a\x0d\xaa\x13\x54\xa0\xae\xc2\x2b\x63\x84\x45\xb2\x07\x89\x9d\x21\x84\x41\x2d\xc3\x6e\x3f\x50\xbe\x43\x36\x92\x58\x32\x91\xe0\x96\x8b\x84\x76\xe9\xde\x84\x00\x44\x01\xbb\x3b\xcd\x50\x02\xe1\x78\x87\x1d\xdc\x52\xb9\xfb\x4f\x8c\x62\x2e\x3a\xbb\x5b\x4a\x76\x1c\x5c\x64\x1e\x08\x17\xcb\xcd\x68\xf8\xfd\x49\xf7\x26\xb8\xef\x34\xb9\x9d\xbe\xbf\x22\x8b\x44\xa7\xda\xea\x88\x14\x83\xe1\x92\xf3\x13\xc4\x28\xe1\x0b\xab\x9e\xd0\x44\x99\x18\x6d\x2c\x27\xbe\x05\x1b\x70\x07\x9d\x61\xd5\xa8\xe6\x97\x6e\x2e\x36\x6c\x54\xc4\x27\xd1\x82\x61\xd7\x98\xdd\x22\x3d\x9e\x07\xfa\xcc\xc0\x25\x4d\xb8\x6a\x09\xd3\x35\x2f\x94\x92\xcd\x47\xd6\x6b\x2d\x75\x44\xcf\x31\xee\xe7\x11\x35\xee\x3c\xfe\xc7\x48\xa8\x0d\xe6\x46\x8f\xe6\x8e\x3b\xb1\x11\x5e\xe2\x33\x6b\xe4\x32\x11\x7a\x61\xdf\xd3\x59\x5d\x91\x48\x4f\xaa\x63\x73\xbe\x0a\x97\x38\x65\x0d\x1b\xad\x05\x3b\x13\x71\x5c\x13\x6f\x19\xc2\x73\xdf\x9f\xe7\x7f\x86\x0d\x10\x1f\x75\x83\x54\xa0\x81\x0c\x70\x65\x94\x96\x0b\x3f\x3a\xae\x91\xad\x53\xb1\x5f\x15\x4f\x33\xf6\x95\xe2\xa7\x84\xd3\xf7\x0b\xb2\xe0\x71\xfb\x84\xb6\xef\x17\x68\x31\xe9\x8d\x5b\x7d\x8a\xd9\x26\xd1\xd2\x5c\x86\xe2\xf5\xf6\xd6\xde\x8d\x0e\xe9\x3d\x7e\x55\x68\x39\x0d\x67\x2a\xf4\x34\x98\x46\x97\xa8\x01\x0f\xc4\x66\x01\x96\x26\x62\x74\xfc\xe8\x3c\xe0\x06\x7c\x1b\xb1\xc0\xad\xa3\x47\x82\x05\x6a\x69\x35\x83\x98\x71\x4c\xbe\xb2\x06\x58\xba\xe9\xe9\x22\xda\xc9\x32\x1a\xe2\x2f\x28\xa3\xe1\x86\x3b\x0b\xf5\xbf\xbd\xb3\xe8\xf2\x34\x37\x0b\x91\xfe\x8b\x6e\xbe\x4d\xdb\x46\x58\x0b\x30\x5e\x0f\xcc\x58\xec\xe5\x9e\x2d\xbe\x6d\x51\xbe\x21\xbd\x10\xba\xe8\x05\x10\x2d\xed\x06\x21\xac\x59\xa8\xb4\xc9\xb8\xfe\xc7\x5d\x4c\x7c\x85\x17\x13\xd3\x82\x26\xbd\x76\x82\xf6\xf1\xee\x3f\x6c\x7b\xd9\x2b\x0b\x13\x13\xec\x14\x0b\x10\x00\x3a\xbd\x98\x99\x77\x68\x9f\x90\xf1\xe1\x95\x6f\xde\x99\xab\x16\xd3\xe8\xf8\x2e\x6f\x8e\xab\x5a\x1d\xeb\x01\xa4\x5b\x8c\xe5\xe9\x3c\xdb\xb3\xb0\x35\x38\x1e\x96\x01\xfd\xbb\xc8\x98\xfe\x27\x40\xfe\xe5\xce\x29\x73\xcf\xaa\x11\x14\x54\xb7\xb6\xd4\x0b\xf0\x7e\xea\x20\x30\x48\x41\x13\x48\xae\x06\x1b\x4f\xa8\x7c\xd8\xde\xb2\xd7\x94\x7a\x00\xef\x9a\x1b\x52\x50\x20\x74\xdb\x00\x3c\x79\x4d\x72\x38\x73\xe5\xbc\xee\xf8\x17\xec\x12\x04\x06\xe2\x78\x7f\xf9\xf5\x3b\x80\xb2\x80\xb2\x72\x42\xfe\xa6\x78\x35\x2b\x36\x5b\x3c\x6b\xc1\x48\x1a\x89\x48\xf4\xa8\xd3\x47\x04\xea\x91\xf0\x47\xcf\xf5\x60\xfb\xfc\xf9\x29\xfe\xf1\x1f\x22\xf6\x8c\x73\xfe\x37\xe5\x1d\x13\xdc\x4d\x98\x31\x0d\x81\x24\xc6\x95\x14\x43\xf4\xc4\x45\x9a\x25\x64\xd4\xe5\xda\x18\x66\xe8\xf5\x59\xb5\x2d\x19\xab\xe5\x82\x90\x82\x93\x4f\xae\x27\xed\x5f\xf4\x5e\xe5\x8d\xd0\xc1\x70\xb3\x5b\x39\x63\x6e\x63\xf6\x34\x5c\xe3\x0a\x4a\x13\xc5\x01\xed\x72\x22\xe3\x38\xcd\x18\xa9\xf9\x3b\xb4\x8d\x10\x94\x2e\x52\xd5\xcb\xa1\x4e\xcf\x32\x9a\x25\xa4\xe6\x77\x08\x3e\xab\x58\x0e\x3d\x9b\x3b\x92\xb7\x4b\x92\xd3\x6e\x1d\xbe\x9c\x6d\x84\xbc\x16\x24\xcd\x58\xed\x9f\xc4\x28\xed\x2c\x52\x8c\xa2\x00\x84\xa5\x83\x58\x28\x2c\x47\x84\xed\x86\x0b\xdf\x13\xbf\x23\x67\x40\xb7\xae\x8a\xdf\x2a\x62\x49\x89\xf5\xa1\x5b\x9f\xd1\xf1\x69\xce\xf4\x33\xd8\x16\x87\x36\x32\x89\x1a\x01\x8e\x55\x48\x44\xfa\xc3\x9b\x8b\x77\x7a\x9e\x59\x4c\x98\x79\x1c\x8f\x68\x5c\x8a\xb6\xed\x2b\x5d\xd0\xea\xca\xa8\x43\x69\x0f\x9e\x57\xd0\xc7\xba\x9b\x86\x2c\x9f\xe9\xd8\xa4\x5a\xe8\xed\x72\x55\xdc\x7e\xee\x20\xce\x88\x37\x04\x01\xe2\x60\x8d\x88\xf5\x70\x70\xb6\x73\x57\xc6\x71\xa8\x1a\xca\x07\x87\xe3\x00\x84\xb0\x6e\x5b\x4f\xc1\x0e\x72\xb3\x62\x22\x03\x64\x6e\xa3\xa4\x70\x9a\xb2\xee\x32\x9c\x75\x6a\x3c\xd6\xd3\x01\xfa\xda\xc4\x40\xcf\xc8\xba\x6b\xb1\x21\xe5\x60\x1f\x52\x31\x3c\xf4\xc3\x1e\x25\xe8\xc8\x51\xdd\xa0\x09\xae\xc6\x3e\xbd\x9c\x5d\x4b\xb1\x25\x0e\xea\xd2\x3f\x7d\x5a\xbd\x0c\x6c\x1f\xc8\x3a\x62\x7a\x55\xd7\x17\x8f\xe3\xe0\x08\xf2\x06\x7e\x1e\x86\xe5\x71\xb7\x25\x1d\x9f\xb1\x21\x10\x04\x2a\x75\xbd\x68\xb2\x35\x7f\xdc\x1f\x45\x5a\x56\x2f\x96\x7a\xc3\x2a\x3b\xf2\x3d\x8f\x0b\xde\x52\xe5\x47\x94\x35\xdc\xb2\xc0\x13\x44\xa3\x35\x49\x83\xda\x94\xed\xba\x80\x12\xa8\xf3\x18\x09\x38\x0c\xcb\xb6\x8d\xd6\xc5\xbd\x58\xc1\x03\x5e\xc9\xef\xfc\xdd\x77\xa7\x6a\xf0\x7c\x5c\x90\x9c\x93\x8a\x2f\x5d\x21\x08\xa5\xc0\x7b\x5f\xe8\xf5\x42\xac\x15\x4d\x42\xf6\xdc\x9a\xb6\xed\x9c\x15\x7e\xd0\x0e\xe9\x8e\x11\x11\x99\x28\xee\x98\x10\x64\x00\x8d\xab\x27\xb9\x01\x25\x06\x6a\xfd\x38\x26\x6b\xfd\x17\x9f\x4e\x1a\xfd\xef\x34\xef\xa2\xe8\xdc\x21\x8e\xfe\x61\x9e\x4f\x1a\xf8\xa3\x37\xce\x68\xd7\xe8\x95\x56\x1f\xc1\x17\xfa\x64\x5f\x54\xd7\x36\xdf\x35\x4d\x96\xd0\x3c\x6b\xa4\x52\xf2\xb4\x8e\x75\xbf\x2f\xe1\xe0\x72\x08\x63\xa4\x13\xab\x41\x09\x37\xa6\x4f\x83\xa1\x8b\xa9\xce\xdc\x58\xb1\x58\xa9\x8a\x1a\xa9\x10\xb1\x1a\x7a\x60\x08\xd5\xa2\x3a\xa4\xe5\x59\xc0\xa2\x7f\x80\xc5\x50\x0b\xb3\xa1\xae\xd3\xf7\x53\x64\x8f\xaa\xde\x26\xd0\xa6\x53\x39\xdb\xe6\xd7\xe2\x57\x2c\x14\xd3\x2d\x97\x60\x3b\x9a\x37\xbf\xe0\x9b\x3d\x4d\xe0\xa3\x39\x46\x99\xef\xad\xaf\x3e\xdb\x8e\x70\xdf\x17\x6b\xa7\x26\xb5\xa0\x9c\x7e\xed\x58\xc1\xc3\xc4\xb4\xb0\xd6\x0d\x46\x1c\xb7\x95\x3f\x47\xe8\x47\xea\xda\xdd\x92\x1a\xde\x3c\x37\x27\x06\x8d\xc0\x84\x0e\x81\xd7\x3f\x80\x86\xb0\x6d\xe5\x6c\x65\x5e\x9a\x0d\xeb\x1c\x11\x75\x39\x97\x20\x13\xb4\x2d\xfe\xee\xc5\x02\x3c\x06\x37\x55\x47\x66\x35\xaa\x7a\x3d\x94\x25\x7d\xbc\x46\x3e\x95\x01\xe4\x3f\x29\x60\x05\x70\x05\x87\xe9\x35\x20\x29\x7f\x57\x6f\x1d\x3d\x39\x65\x05\x76\x52\x3f\xd2\xb7\x62\xad\xba\x58\xf6\xea\xa4\xeb\xef\x93\x02\xfe\x75\x4d\x8c\x9c\x53\xef\xf4\x0a\x0d\x48\xff\x5d\xff\x9f\x60\x0e\xfd\xa8\x40\xc3\x89\x7e\x79\x7b\xe6\x37\xe5\x27\xfa\x8b\x84\x4a\xf2\xa0\x33\x74\xcb\x7f\x4a\xa3\xfa\xdf\x38\xd5\x79\xdb\x56\x62\x1f\xa2\xe0\x3a\xe2\xb5\x24\xf2\x46\x72\xc4\x1c\x51\x1b\x86\x9b\xb1\x7f\xc0\x65\x30\x88\xa2\xf7\x81\xa3\x01\x7c\x6d\xf5\x11\x52\x4c\xb8\x09\xd2\x29\xd5\x7a\x8c\xdf\x12\x41\x17\x35\x17\xc9\xff\xf4\x87\x40\xcd\x85\x3f\x43\x7d\xfa\x5f\x77\x63\xbf\xa8\x53\x95\x25\x22\xad\xb2\xa3\x7a\x51\x3b\xbe\x39\x22\x17\xb5\x3f\x55\x93\x82\xc9\x45\x91\xd4\xfe\xc4\xa6\xf0\x19\x2f\xf6\x80\x16\x3c\x58\xcb\x7a\x60\xc7\x7a\xbb\x86\x3d\xe3\xe3\xa4\xbf\x40\xed\xba\x2d\xee\x45\xf9\x83\x65\xc3\xf5\x6f\xc1\x02\x02\x60\x4b\x53\xae\x28\xb3\x74\xf2\x92\xe2\x61\xa1\xdb\x56\x52\x95\x01\xed\x6a\x22\xf7\xd4\xeb\x48\xc3\xf0\xed\x18\x89\x61\x7c\x27\x86\x58\x65\x08\x2e\x8c\x1f\x39\x96\x56\x10\xe9\xa3\xa9\xb0\x4a\x99\x44\xb1\x28\x4a\xa2\x7a\xa7\x20\x78\xdf\x43\xab\x85\xde\xad\xbc\xde\xed\xd4\xc8\xbc\xdf\x6e\x5a\x40\xf7\x10\x9c\x9d\x44\x5f\xe8\xbd\x59\xb6\x2d\x81\xab\xfa\xa2\x6d\x27\x78\x36\xb2\x0c\x6f\x89\x25\xe4\x75\xa2\x68\x7f\xe0\x00\x84\x82\x1d\x38\x76\xa7\xd1\x62\x28\x58\xa6\x74\x9b\x34\xd6\x82\x2e\x54\xea\xea\x99\x25\xca\x2d\x56\xfd\x55\x2b\x8d\x96\xb0\x70\x42\xb4\xff\x01\xa9\xc6\x8e\xc1\x05\xa9\xf9\x20\x3e\x73\x94\x69\x0a\x16\x43\x38\x7d\xd6\x65\xa9\xbf\x67\x75\xf0\x64\x23\x58\xaa\x62\x8c\x10\x3e\x75\x99\x53\xeb\x8b\xa2\xdb\x67\x81\x33\x5d\xd7\xb9\xa1\x8e\x7a\x11\x51\x24\x1a\xba\xd7\x07\x86\x45\x91\x58\x63\x21\xb8\x27\x74\x83\x23\xba\x2a\x77\xf2\x18\xdc\x7e\x8f\x8d\x2f\xf0\xb1\x75\x02\x3e\x96\xa2\x29\xfe\x25\x8e\xb1\x94\xc7\xcb\xb2\x58\x7e\x38\x5e\x5d\x95\xf8\x63\x53\xef\x1a\xb1\xaa\xef\x2a\xfc\xb5\xdb\xe2\x5f\x7d\x08\xc1\x5f\xf5\xad\x90\xe6\xd7\x4e\xe1\x0f\x51\x29\x1b\x56\x8a\xfc\x56\x1c\xa3\x52\xf5\x18\xbd\x35\x8f\xd1\xcb\xf3\xf8\x83\x78\x80\x74\x3f\x88\x87\xad\x14\x4d\xa3\x7f\xec\xb6\xc7\xc6\x1e\x7e\x23\xaa\x5d\xe4\x59\x7e\xfc\xae\x90\xeb\xdd\x6f\x0f\xf0\x26\xe7\x8b\x4e\xf2\x45\xed\x15\x93\xe6\x4e\xcf\x5e\xa5\x8f\x78\x7c\xdf\xe8\xaa\x7d\xc4\xdf\xbb\xab\xab\x9e\x9f\x5d\x75\x89\x02\x44\x83\x7e\x72\x57\x85\xaf\xc6\x0b\x6f\xe4\x6d\xf1\x84\x71\x3f\x67\x12\x2e\xef\x06\x9f\xf4\x3e\x58\xaf\xdd\x17\x74\xcf\x2c\xa6\xc3\xef\x10\x41\xa0\xfc\x6f\x08\x1d\x76\xd5\x81\xaf\xdc\x37\x7a\x1b\x1e\x80\x4d\x79\xd9\x47\x4f\x9f\x46\xa6\x2d\x75\x80\x62\x60\x60\xfd\x34\x62\xd2\x34\xc1\x56\xd6\xf7\x0f\xe3\x8e\xaa\x0c\x9c\x71\x87\xaa\x2f\x38\xd2\x8b\x54\x65\x86\x2b\x41\x6a\x99\xd8\xa3\x4e\xe4\x35\x0a\xa8\xdd\x41\xef\x19\x65\xa4\x18\x51\xf3\x08\x7b\x3c\x33\x4e\xde\x95\xf5\x2d\xe8\xa7\x00\x30\x79\xb3\xeb\x5d\xb1\xe2\xc2\xff\xd3\xb6\x97\xf0\x77\x3a\x65\x85\x96\x80\x6f\xea\x72\xf5\x56\xe4\xab\x87\x10\x03\x06\xa0\x70\xf3\xd5\xc3\xcf\x79\xa1\xa6\xd3\xc4\x3c\x01\x39\x05\xd8\x20\x80\xbf\x23\x0f\xbc\x1f\xad\x12\xe4\x2f\x17\x6f\xbe\xe7\x9e\x07\xcd\xa5\x73\xca\xe4\x1f\xe0\xdb\xd7\x26\x23\xbe\x81\x47\x04\xcd\xe0\xb7\xec\x72\xb6\xcc\x37\xa2\x7c\x99\x37\x82\xff\xca\x2e\x51\x13\x7d\x05\xdf\xdf\x39\x17\x73\xf8\xe4\xfb\xdd\x46\xc8\x62\x39\xc2\x62\x81\x5f\x75\xd7\xcd\xa4\x83\xf7\xe2\xca\xb7\x4c\xe6\x5a\x96\x9b\x14\xcd\xf7\xf9\xf7\x44\xf8\x14\xea\x82\xd2\x3d\x8b\x6c\xca\x5d\x27\xae\xc4\xba\xa8\x44\x1c\xe3\xdf\x59\xbe\x59\xd9\xdf\x24\x42\xdf\x96\x88\xa5\xd9\x08\xe7\xf8\xa5\x91\xf4\xff\xaa\xb8\x98\xfd\xf3\x47\x1d\x93\x3d\xd1\xbf\x9f\x74\x0c\x31\x55\xfd\xb2\xae\xd6\x65\xb1\x54\x7c\xec\x20\x3a\x7b\xa2\x05\x23\x38\x18\x3e\xe1\x4f\x14\x90\x6c\xd8\xb4\xdc\x1b\xf3\xf8\x57\x45\xd9\xe5\x1e\x14\x47\x2e\x4c\x7f\x76\xa9\x83\xe9\x00\x56\x5d\xcf\x8d\xa3\x4d\x5e\x54\x2f\x71\x9d\xe2\xe1\x8e\x44\x1f\x9d\xcd\xa7\x59\x93\x70\x4f\x14\xac\x01\x48\xa7\xa3\x06\xd0\x55\x8a\x34\x9f\xf2\xe8\x14\xc1\x57\x33\xac\xef\x8e\xd7\x3a\x82\x96\x7f\xec\x85\xd5\xce\x8e\xf8\xdd\x11\xbe\xe5\xfa\xf4\xd7\xb6\xe1\x64\xc2\xab\x22\x05\xf8\x35\xaf\xd0\x01\xff\x65\xbd\x2b\x57\xa0\xd0\x5c\x17\xd5\xea\x78\x53\xaf\x76\xa5\x30\xb8\x76\x52\xfc\xb6\x2b\xa4\x58\x1d\x5f\x3d\xa0\x73\x7e\xf2\x29\x1f\xd2\x3d\x54\xc7\xf1\xc7\x95\xbc\x99\xad\xc4\xb6\x61\x4b\xde\xcc\xac\xda\x9d\xad\xb9\x4e\x0b\x9d\x7b\x4b\xa7\xed\xbb\xe1\xf3\xf3\x9b\xe7\xf6\xf9\xfc\x66\x3a\xa5\x91\xb8\xdf\xd6\x52\x35\x70\xaa\x4e\x6f\xb2\xc5\x3a\xbd\xc9\xf8\x2e\x89\x4c\xe9\xc2\x70\x95\xc0\x9f\x8a\xe8\x20\x96\x3b\x79\x60\xe9\x2b\x5f\xd6\x94\xed\xf6\x7a\x39\xd1\x6b\x9a\x1e\x67\xab\x6e\x30\xde\xc1\x9c\x89\x63\xef\x5d\xe7\x1b\x81\xa6\xf8\x71\x1c\xa5\xa8\xaa\xb2\x21\x99\x2e\xc4\xe3\x7e\xa6\x6a\xf4\x80\xc3\x15\xc3\xbc\xa4\x6d\x4b\x0c\x7f\xdf\x2b\x3d\x61\xbc\x9f\x70\xf5\xd2\x49\xa6\x78\x19\x1c\x06\xcd\x2e\x2f\xcb\x3a\x5f\x09\x8b\xcc\xc7\xd1\x3c\xc9\xe8\x04\x09\xe2\xb3\xd4\x63\xa1\x47\xe2\x00\x47\xd3\xe3\xfe\x48\x2e\x48\x05\x9d\xc2\x95\x5e\xe8\x9c\xea\x18\x70\x2b\x20\x3c\xcd\xfc\x17\x00\xde\x22\x32\x5e\xed\x19\x19\x07\xd7\x32\xdb\x8b\x5e\x1a\x8d\xd8\xcd\x15\x83\x4b\xcc\xb1\xe8\x5f\xa0\x84\x47\x74\xa2\xb4\x6d\xbd\xc7\x69\x37\xd6\xf7\x4c\xcd\x2e\x45\xfe\xe1\x52\xef\x9d\xbc\x60\x5d\x5b\xf0\x47\xec\x9b\x44\x30\x33\x0a\x12\xc5\xa4\xb8\x2e\x1a\x25\x1f\x92\xc2\x18\x5a\x0b\xaf\xf5\x66\xf8\x01\x53\x7e\x98\xf9\x76\x4f\x28\x13\x24\xfa\xff\x09\xdd\x25\xa7\x27\x40\x1e\x51\xe5\x65\x73\x7a\x25\xeb\xbb\x46\xc8\x13\x51\xdd\x16\xb2\xae\xf4\xea\x1f\xb1\xd4\x0d\xc8\x2c\xb8\xaa\x8b\x76\x8d\x38\xd6\x8b\xe0\x52\x45\x47\x42\x57\xfc\xcb\x37\xdf\x71\xa1\x57\xe5\x42\x8a\x75\x7d\x0f\xbf\x5f\xde\xc8\x7a\xa3\xcf\x5c\xbb\x46\xc8\x17\xd7\xa2\xd2\xcb\xd5\x4d\xd1\xa8\x1a\x16\x13\xab\x2d\xe6\x62\x76\x67\x16\x6f\x18\x09\xa8\xd0\xe0\x03\x0d\x69\x23\xca\xb5\x03\x7d\xc6\x07\xfd\xef\x0c\x87\x03\xe7\x66\x5c\x8c\x0f\xe7\x9f\xcd\x50\x87\x2f\x3c\x76\x7e\xce\xb9\x7d\x35\xc8\xd0\xca\xb3\x2e\xd3\x2e\x00\x92\xb1\x8f\xdc\x7f\x33\x48\xc5\x56\xd3\xa5\xd2\x05\x40\x2a\xae\x19\xfc\x37\x83\x54\x4c\xb3\xb9\x44\xdc\x33\xa4\x61\x1b\xd5\x0b\x1f\xa4\x50\xe5\xb7\xc5\x75\xae\x6a\xe9\xd2\xf0\x42\x20\x15\xf7\xcc\x83\x77\x03\x41\xc4\xbd\xeb\x3a\xb6\x1b\x04\xea\xc8\xc0\xf4\x2c\x74\x9a\xe0\x3f\x78\xe4\x3a\x58\x1e\x19\xb4\x99\x45\x50\x75\x1b\xcb\x35\x45\x85\xca\x7a\x1b\xcf\x54\xca\x46\xb3\xb5\x2d\x20\x56\x6d\x63\x8d\x14\x2b\x89\xbe\x7d\xa8\xee\x8f\x09\x88\xce\xf5\x4a\x50\x3d\x5a\xbb\xd1\x58\x1f\xe1\x36\x34\x99\x68\xd9\xca\x4e\x4c\x39\x5b\xc2\xc0\x45\xc0\xc4\x7a\x2b\x64\x4e\x8f\xbc\xf1\x9c\xc3\x57\x0d\x7e\x35\x36\xd6\xbe\xa9\x1a\x95\x97\xa5\xc1\x5d\x3b\xf2\xa7\x45\xb3\x3f\x30\xfd\xf4\x90\xac\x4b\x61\xd6\x03\x6f\xe2\x31\x1b\x79\x25\xae\x76\xd7\xfe\xe3\x56\x8a\x65\xae\xc4\xea\x64\x2d\x72\xb5\x93\xa2\xe9\x9d\xb8\xc1\x61\x37\x9c\xa8\x76\xb5\xf2\x26\x5a\x75\x24\x67\xdf\xbe\xf9\xea\xab\x57\x6f\xe1\x36\xe3\xb1\xac\xaf\x07\xf7\xc2\x56\x0a\x12\xdc\x14\x93\xce\xca\xfa\xda\xec\x32\xc2\x23\x19\xda\xb3\xbb\x5c\x0e\xd0\x85\xc6\xbe\xd7\xf1\x46\x13\x40\xa3\xf0\x4f\x48\x01\x22\x8e\x26\x51\x54\xeb\xfa\x53\x52\xd0\xf1\x46\x13\x80\xa6\x1e\xa4\xc0\x9c\xbe\xc8\xa4\x30\x83\x78\x0b\xa2\xba\x24\x21\xc4\x6e\xbf\x3e\xfb\xd2\x27\xe5\x9b\x37\x8d\x08\x2f\xff\x0f\x15\x1d\x63\x8e\x25\x62\xc4\xc4\x82\x57\x5e\x7f\x17\x1f\x19\x76\x2a\x2f\xf4\xd9\x7f\x6c\xc8\x79\x11\x41\x13\x3a\xfa\x66\xa7\x8a\xf2\xf0\x30\xdd\xd6\xe5\xc3\xba\x28\xcb\xe1\xe0\x44\xed\x56\x6f\x80\x6e\x65\x71\x9b\xab\xe2\x5f\x62\x8c\x5a\x2e\x9d\x67\xac\xe2\xd7\xa9\xca\xd0\x51\xc6\x6e\xc7\x76\xb1\xb0\xe7\xe2\x24\xd2\x52\x42\xa1\xa3\xe7\xbc\x48\xcf\x9c\x42\x5c\x7f\xca\xc9\x9c\x49\x24\x4d\xaa\x28\xa9\xa7\x51\x12\x4d\xf3\x69\x74\x12\x4d\xaf\xf4\xe8\x9b\xbd\x7e\xf1\xf2\xdd\x9b\xb7\xbf\x5e\xbe\x7e\xf3\x96\x8b\xd9\x4b\xdb\x3e\x5c\xcc\xde\x9a\x3d\xd7\x9f\x3d\x35\x1f\x93\x71\x45\x57\xe8\x21\xc9\x83\x07\x81\xeb\x5e\xa6\x67\xd9\xc2\x7f\x48\x1e\xf7\x47\x06\x1c\xdb\xe4\x69\xa0\x7e\xa0\x1b\xb8\xc2\xbf\x68\x22\x85\x2f\xd0\x16\x07\xea\xb6\x2a\xa0\x14\xb9\x7c\xa0\x44\xe1\x0b\x63\x4c\x85\x51\xd7\xb9\xde\xf8\x1e\xbe\xcb\xab\xfc\x5a\xc8\x97\x87\x3e\x1c\x89\x16\x24\x53\x34\x5f\x8a\x46\xc9\xfa\x41\xac\xf8\xe4\xac\x17\x56\x54\xd7\x7c\x72\xb6\x37\x3c\x99\xe8\xc3\xeb\x43\xf2\x54\xb3\xb2\xae\x3f\xec\xb6\xe3\x36\xe6\x3b\x63\x63\xec\xb7\xc0\xac\xaa\xe5\x06\x00\x86\x00\xce\x99\xee\x99\x16\xde\x20\x33\xbf\x0f\x6e\x2c\x00\xf8\xb0\x38\x73\xfd\xc9\xba\xa8\x20\x91\x2f\x87\x9f\xae\x46\x3f\xd5\xb5\x83\x2f\x01\x71\x2b\x34\xff\xe9\x45\x6c\x5b\xe2\x5d\xe8\x10\x5b\x14\x6b\x8f\x3d\x8a\x66\x67\xac\xa8\xf4\x98\x76\x9c\x89\x23\x2d\xaf\x0f\xfd\x5a\x62\x76\x71\x96\x2e\xd4\xb6\x42\x1c\xbb\x9f\x84\xd2\xfd\xef\x35\x21\x85\x16\x84\x71\xf4\x4d\xa5\x25\x05\xbd\xef\x1e\x5e\x79\x10\x23\xf2\xcd\xcf\xdf\xbf\x7a\x9b\x79\x60\x71\x4c\x40\xa3\x62\x81\x5f\xd7\x72\x64\xda\xfe\xe1\x19\xc0\xcc\xe9\x61\xb4\xf8\x08\xfe\x66\x78\x72\xc0\xa4\xd7\x21\x96\x76\x47\x10\xf7\x25\xda\x32\x01\xf4\xca\xb7\x30\xee\x90\x2b\xc4\xae\x20\x0e\xdc\x5b\xe8\x25\x60\x4f\xa8\x0f\xb3\xe3\x0d\x4c\xe4\x4c\xec\x92\xbd\x16\x06\xbd\x83\x28\x16\x35\x45\x75\x5d\x0a\x05\x6e\x23\xee\xf3\xe6\x93\x3f\x2f\xb4\xd0\x50\xa9\x22\x57\xc2\x4f\x60\xe7\x0f\x96\x41\x53\x3e\x1b\x6d\xca\x67\x7e\x53\x3e\x83\xa6\xac\x38\x80\x1f\x4c\x64\xd7\x62\x32\x68\xb1\xca\x2f\xd8\xb0\xb9\x54\x07\xa1\xaa\x2b\x21\x67\xae\xb6\x1d\x45\x1b\x0e\xc9\x2a\x3c\xab\xbb\x0b\x88\x62\xdf\x37\x08\xee\xa1\x1c\x95\x46\x66\xe9\x3e\xf7\xee\x2f\x74\xe0\xf8\x01\x4f\xaf\xe5\xae\xe5\x8e\xbc\x86\xf6\xca\x68\x5c\xa0\xab\x38\xc6\xee\x8c\x63\xec\x97\xbd\x21\x0f\xf4\x00\x99\xcd\xb4\xe2\x85\x3d\x5e\xd2\x4f\xcc\x9a\x15\x7e\x8e\x7e\x41\x2a\xf0\x28\x46\x9e\x70\xcc\xff\x60\x01\xfe\xed\x5c\x0f\x57\xd8\xab\xec\x24\xcc\x2c\x54\x94\xfc\x5b\xd5\xc1\x7a\x54\x06\x67\xb7\xb0\x59\xb4\x2d\xe6\x30\x56\x9f\x32\x6f\x9a\x23\xd4\xc5\x8c\x2a\x54\xb0\xc2\xc7\x66\x09\x89\x20\x89\x0a\x55\xbd\xdd\x2c\x28\x7b\xc4\xcb\x07\x96\xc8\x60\xe4\x0d\xe4\x03\x6f\x80\x1b\x9f\x37\xa2\x68\x6f\xb0\x3e\xda\x6d\x5d\x97\x75\x43\x04\xa0\x14\xaa\x0e\x8a\xee\x40\xc6\xbc\x66\xb5\x57\xdc\xe5\xb0\x61\xcd\x0a\xdb\x1c\xf5\x5c\x84\xfd\x77\x7a\x91\x75\x9a\xa4\x82\xcf\xcf\x8b\xe7\xca\x51\xc7\x4e\xa7\xe6\x46\x87\x03\xdc\x61\xc3\x6b\x30\x63\x15\x52\x3d\xb0\x92\xd7\x08\x2e\xba\x2e\x84\x64\x4b\xfd\x04\xb3\xfc\xa8\x4a\x9b\x8c\x2f\x17\x7a\x11\x29\xd9\x23\x06\x26\xcb\x3d\x4d\x20\x84\x6a\x41\xa8\xf9\xf2\xa1\xca\x37\xc5\x52\xaf\x9a\xdd\x13\x9f\xe4\x10\xc3\xef\x84\x75\xb8\x6f\xd9\xc6\xd4\x6b\x8b\x27\x79\x79\xf6\x07\x07\x34\x32\x5d\x85\xed\xb5\x8c\xcb\x36\x99\x9c\x39\xd6\xe2\x0e\xd3\x2b\x8e\x97\x86\x7f\xcc\x23\x8f\xc2\x40\xa0\x4e\xae\x60\xd8\xe9\xe5\xf4\xdd\xc3\x56\xb8\xdd\xac\x21\x15\xc5\x60\x2f\x48\x0f\x52\x57\xa3\x1b\xbd\x4b\xd9\x06\x57\x76\x09\x63\xd2\x6a\x98\x3e\x88\x07\xfd\x05\xab\xf8\xfc\xbc\xea\x78\x3f\x2b\xdb\x17\x05\x57\xa9\x4c\xab\x2c\x3b\x2a\xba\x5d\xb8\xe8\x76\x61\xaf\xf1\x56\xc6\xf6\x7c\x5c\xda\x42\xb1\x6a\x74\x74\x1d\x88\xbc\xf7\x65\x53\x3c\xc7\x6e\x61\xd0\xfe\x2c\xf2\x0f\xdf\xe5\xdb\xa3\x50\x92\xdd\x42\x8c\xcd\x21\x69\xd5\xae\xc4\x28\x4a\x76\x32\xaf\x2f\x74\x0a\xb3\xe3\x63\x1c\x3d\xad\xb9\x32\x02\xe5\xae\x2c\x41\x31\x6f\x5e\xba\x7d\x7a\x05\xa1\x15\x33\x57\xf9\x2b\xf1\xce\xe8\x0c\x1d\x1c\x38\x48\x50\xdd\x04\x30\xc1\xdb\x8e\x98\x02\x91\x81\xed\x98\x1b\xc8\x91\xd2\xa9\x21\x47\x6e\x39\xdc\x54\x1b\xe4\x6f\x91\x1c\x83\x32\x85\x95\xef\x16\x8b\x4d\xfe\xc1\x45\x22\x5d\xed\xc3\xba\x1b\x77\xbb\x20\xc5\x3d\x93\x66\x3d\x1f\x88\x45\x46\x40\xf1\xd6\x05\x7f\xd7\xeb\xf8\xb5\x49\x58\xa8\xb1\xf6\xd5\x67\x9d\xca\x4f\x49\xf2\x9a\x55\xc1\xc4\xee\x37\x73\x8d\x2d\x9a\x73\x19\x2c\x7f\x02\xfc\xc7\xc9\x9c\x15\xfa\x7c\x59\x5c\x57\x14\xf0\xb9\x98\xae\xdc\xa4\xab\xb8\xa9\x13\x1d\x2c\xea\xaf\xf3\xa2\x14\xab\x63\x55\xdb\x45\x3d\xaf\x8e\x71\x4b\x59\x8a\xe3\x7a\x7d\xfc\x1f\xd1\x74\xa4\xfc\xd3\xe8\x3f\x66\xc7\xdf\xd5\x8d\x3a\x2e\x8b\x0f\xa2\x7c\x80\xaf\x36\xb8\xb6\x95\x0f\xe6\xc2\x64\x75\x0c\x59\x1f\xd7\x12\x13\x45\x20\x5d\xa3\x87\xc7\x73\xeb\x2c\xa2\x47\x23\x17\x2e\x5e\xb9\x2f\x8b\xaa\x50\xaf\x71\x8a\x2d\x0e\x84\xa3\xac\x9e\x04\x8d\xd2\x89\x58\x00\x89\xd0\x6f\xa0\x9c\x52\x46\xe6\x0c\xcd\xb3\xf4\x14\xa1\x24\xf7\x26\x8e\xb1\x3c\x6d\xf8\xa0\x05\x49\xa7\xb2\xc7\x11\x6f\x86\x3b\x6b\x50\x0a\x65\xb7\xfc\xf4\x1f\xe9\x3f\x92\x6c\x9a\xc0\xbf\x4f\x4e\xd9\xc3\x81\x19\x6c\x0d\xf8\x87\x77\xbc\xa3\x12\xe2\xdc\x97\x10\xe7\xdd\x71\x73\x6d\x75\xe0\xc2\xfd\xf4\x0f\x99\x66\xdb\xc4\xd5\x1f\x7f\x86\xaf\x61\xc6\xe4\x38\xc8\x06\xeb\x96\x08\x23\x04\x87\xc9\x4b\x15\xac\xdc\x87\x56\x48\x8c\x5b\x7c\x62\xbc\xb2\x13\x60\x71\x29\x1d\xbb\x4e\xc0\xa8\x6e\x48\x7e\x6c\xcd\x35\x71\x4d\xd5\x3f\x21\xe6\x3a\x2f\xca\x0b\xa1\x60\x5d\xbe\x10\x66\xb5\xbc\x34\x84\x27\x1f\xff\x54\xb7\xc7\x9b\x8f\x46\xdc\x3b\x32\xbe\xfe\xa2\xa8\xbc\x25\x7c\xec\xfa\x42\xdc\x1d\xd7\x8e\x6b\x17\x50\xe4\x75\xb7\x04\x91\xff\x2f\x9d\x39\x82\xd9\xae\x4f\x6d\x41\xbb\xcc\xf0\x34\xab\xb7\xe9\xe1\xf8\x49\xab\x8c\xf7\x5a\x4c\x07\x49\x5d\xe0\x5d\x35\x52\x64\x7b\xde\x3c\x94\xe9\x27\x8d\x06\x8f\x4b\xb3\x57\x1c\x95\x05\x2f\x83\x51\x30\x78\x69\x0b\xac\x32\x36\x5a\x63\x65\xda\x1d\x92\x38\x80\x56\x3d\x2e\x3d\xa9\x60\xc5\x86\x4b\x34\x23\xec\xb5\xad\x77\xa2\xd3\x52\x3f\x9c\xe9\x0e\x1d\xe5\xcc\xb1\xca\xd8\xc4\x73\xd1\xab\x50\xef\x14\xd7\x01\xbf\xa0\x77\x96\xab\xcf\x4d\xae\xa5\x2c\x9b\x5a\xb7\x2c\x80\x31\x7b\xf7\xe8\x04\xee\x4a\xaf\x86\xee\x70\xe7\x62\x85\xfd\xee\x47\x59\x78\x99\xe5\x2b\x34\x45\x1f\x94\x95\x17\x0e\x6e\xcf\xd7\x7b\xf4\x34\x46\x81\xe8\x6d\xae\x40\x82\x55\x0f\x04\x72\xab\x3b\xb0\x81\xd4\x96\xdd\x28\x5b\xa5\xa7\x6c\xed\xc0\x64\xc1\x27\x46\x34\x4b\x59\x5c\x8d\xf9\x63\x1f\xfb\xd9\x75\x6d\x14\x3c\x1a\x8d\xd8\x97\x02\x1d\x53\x8a\xba\x5a\xfc\xce\x7b\x22\x90\x65\xa5\x5f\x8f\x45\xf0\xe4\xca\xa5\xa3\x0b\x5d\x50\xd7\x2e\xaf\xad\xe0\xf6\x07\x4b\xec\x12\x5a\x1c\x08\xff\xc4\x12\x0e\x0a\x34\x2c\xea\x41\xbb\xfd\xde\xd2\x0d\xbc\xb7\xe4\xc0\x9b\xde\xda\xe0\xe5\x06\xf3\xd1\x17\xf4\xc6\x15\x93\x9f\xd2\x28\x7e\x2a\x8b\xc3\xaf\x90\xe2\xfb\x13\x1a\x67\xf8\x91\x70\x42\x2f\x81\x72\x87\xf7\xce\x96\x85\xdb\x68\x27\xff\xa6\x25\x25\xbf\xa6\x56\x63\x60\xef\xe9\xe2\xb8\x53\xa3\xf5\xa6\x8d\x7d\xa1\x4f\x40\x10\xcf\xd3\x18\x19\x25\xf8\x41\xa5\x4e\xff\x14\x27\xba\x43\xb7\x3b\x89\x4a\xe6\x12\x4c\xaa\x3d\x3d\x38\x77\xd1\x28\x4b\x59\xaa\xb0\xd7\xb5\x04\xcc\xcf\xbe\xbd\x47\x6f\xdf\x84\x0e\xd7\x9f\x39\x3d\xdb\xc8\x97\xc1\xae\xd1\xfb\xfa\x68\x70\x8e\x38\xb8\x6e\xa8\x30\x64\x98\x25\x81\x13\x82\x57\x89\xd1\xcd\xf6\xd0\xde\x65\xf7\x13\x39\xa8\xd1\xa7\x6c\x80\x56\x91\xea\x6d\x4b\x83\xaa\xc9\x83\x55\x93\x07\xab\x06\x75\x92\x41\x79\x0e\xd7\xca\x65\x2e\xb2\xfe\x16\xd6\xfd\x4e\x95\xf3\xad\xd4\xbf\x8f\xac\xba\x67\x4c\xbd\x60\x0b\x16\x74\x5a\x95\xd1\x5e\x7a\x0b\xfd\xcf\xa7\xcc\xb3\x4e\x1b\x0b\x93\xcc\x7a\x28\x20\xd2\xc3\x88\x8a\xdc\xda\x03\x86\x85\x3b\x27\x63\xf2\xac\xbf\x2a\x0d\xde\xf0\x34\xa3\x06\x08\xfe\xd1\xaa\x74\x12\xc5\x9c\x42\x07\x0c\x9a\x99\xea\x0e\x70\x87\x44\x83\xb0\xdf\x51\x93\x7a\x82\xfe\x02\x3e\xa9\x58\x40\x70\x1b\x94\xc6\x68\x59\xec\x7d\x5a\x7f\x1c\xd9\xba\x75\xf2\x77\x5a\x74\xf5\x0a\x42\x7f\xb7\x4e\x15\xd6\xe9\x43\x55\xdf\x55\x63\xb3\xd2\x69\x65\x58\xc5\xea\x43\xa2\x72\x1e\x2a\x6a\x06\x42\x1b\x65\x0d\x9f\x9f\x37\xcf\xad\x37\xdd\x79\x63\x35\x37\x3b\x9e\xa7\x4d\x76\xb4\x0b\x3b\x8f\xe3\x19\xb8\x4e\x77\x19\x9f\xcc\xe9\x7e\x64\xd5\xff\xc8\x9c\xf7\xeb\x02\x53\xe3\x53\x76\x0b\xff\x23\x90\x3f\x0e\xbf\x86\x34\xfb\x87\x4f\xc5\x6a\xb3\x38\xf6\x96\xfa\xb1\x0d\xf3\xd6\xb2\x55\x98\x39\xeb\x1d\xb8\x0e\xad\x88\x85\x3f\x52\x2d\xab\x49\xbf\x31\x82\x89\xee\x4f\x28\x4f\xf1\x26\xac\xfc\x65\xc4\x56\x6b\x84\x00\x10\x68\x32\x51\xd6\x02\x55\x76\x90\x5d\x76\xa9\x0b\xb5\x7a\x1f\x5d\xbc\xbf\xf9\x5f\x15\xb7\xa7\x3e\xfc\xa3\x45\x1e\xc8\xdc\x7f\x5c\x98\x18\x24\xb5\x38\x74\x7d\x22\x86\x27\x1c\xb8\x04\x57\xd9\x51\xdd\xb6\x04\x7f\x8e\x9d\x79\xa8\x31\x82\xa9\xda\x56\xb2\x66\x68\x6d\x69\x01\x17\x8e\x1b\x63\x8f\x29\x3e\x52\xbc\x90\x56\xe2\x18\x8c\x33\x77\x87\x65\xf2\x43\xe2\x86\x27\x69\x7c\x92\x8c\x34\x7e\xbf\x67\xc0\xcb\xe1\x42\xcf\xbb\xbe\x7f\x80\x7a\x5c\x1f\x5a\x54\xae\x38\x89\xa2\x29\xf8\x2e\xc8\xbc\x5a\xd5\x1b\x42\xa7\x1d\x33\x55\x07\xc3\x1d\xcd\x80\x11\xfc\x90\x65\xc5\x01\x3b\xba\x7f\xc3\x7e\xa7\x67\x1c\xe1\xb4\x3d\xd2\x9b\xd1\x00\xbb\xd2\x33\x80\x5b\x08\xbb\x79\x01\xc8\x53\x7f\x08\xba\x6f\x6b\x73\xa2\xd8\x33\x40\x6e\x19\x0c\x55\xfa\x68\x63\x70\xa1\xe3\x5c\x0b\xf5\xea\xfb\xbf\x8d\x81\x06\xe8\xb7\xfa\x95\xb0\xb0\xfd\x5c\x18\xa8\x91\xc0\xd2\x88\x15\x5c\x12\x52\x0d\x2d\xfb\x30\x6e\x1c\x3b\xc8\xec\xee\xa4\xd6\xb9\x98\x54\xa6\x56\xb4\x6d\xe5\x90\x62\xaa\xb3\x07\x1c\x7f\x6f\x4d\x5d\xf1\x2f\x6d\xdb\x31\xc3\x2d\xcf\x80\x39\x8e\xbd\x87\xb6\xad\xc4\xdd\xb1\x35\x38\x27\x91\xb7\x81\x46\x14\x06\x97\xa9\x6d\xf1\xff\x27\xef\x5f\xbb\xdb\xb6\xbd\x7d\x51\xf8\xbd\x3e\x85\xcd\xdd\xa1\x3f\x31\x0c\xab\x72\xda\xbd\xd6\x7a\xe4\xa2\xfe\x3b\xb6\x92\xb8\xf5\xad\xb6\x93\x34\xd5\xd0\xd6\xa2\x25\xc8\x42\x4d\x81\x2a\x08\xd9\x71\x25\x7e\xf7\x67\x60\xe2\x42\xf0\x26\x3b\x69\xbb\xf7\xd9\xe7\xf4\x45\x63\x91\x20\xae\x13\x13\x13\xf3\xf2\x9b\x65\xa7\x10\x7f\xbf\x7b\xcc\x63\xc5\xe6\x40\x0e\x3d\x8a\x0d\x61\xf4\x28\xd6\x73\xdd\xa3\x59\xcf\xbd\x96\x1d\xf3\xd7\x7a\x9d\x97\x04\x06\x63\x1f\x9a\x8f\xa4\x59\xa9\xf5\x9a\x66\x59\xc8\x30\xd3\x3e\xb7\xaa\x6b\x76\x49\xac\xb3\xdb\xaa\x7f\x7e\xf8\xfa\xb4\x3f\xba\xb8\xbc\x39\xb9\x38\x3f\x3c\x1d\xbd\xe9\x1f\xde\xbc\xbf\xea\x5f\xf7\xb6\xf7\x70\xff\xd7\x9b\xfe\xf9\xf1\xe8\xf2\xea\xe2\xe6\xe2\xe6\xd3\x65\xff\xba\xb7\xd2\xf9\x9c\xb6\xbb\xd8\x8e\x5f\xfd\xad\xaf\x1f\xbd\xed\x6e\x86\x4f\x2f\xde\x8e\xae\x6f\x0e\x8f\x7e\xbe\xb9\x3a\x3c\xea\x8f\x2e\xce\x47\xc7\xfd\xcb\xab\xfe\xd1\xa1\xaa\x5e\x95\x55\x05\x3e\xf4\xaf\xae\xcd\xcf\xab\xc3\x93\xeb\x6a\xb1\x3d\x7c\x7d\x73\xf5\xfe\x48\x75\x04\x9a\x7f\x73\x72\xda\x57\x4f\x47\x87\x97\x97\xa7\x27\xba\xd4\xe8\xa6\x7f\x76\x79\x7a\x78\xd3\x1f\x7d\xbc\x3a\xbc\xbc\xec\x5f\xa9\xea\xf2\x87\x17\xe7\xa7\x9f\x46\x6f\x4f\x4f\xce\xce\xfa\x57\xa3\xa3\x8b\xb3\xcb\x8b\xf3\xfe\xf9\x0d\x0c\x6b\xf4\xd3\x2f\xef\xfb\x57\x9f\x46\x27\xe7\x37\xfd\xb7\x57\xae\x67\xa3\xe3\xfe\x9b\xc3\xf7\xa7\x37\xa3\xc3\xeb\x4f\xe7\x47\xa3\x8b\xd7\xd7\xfd\x2b\xd5\x53\xf8\xe4\xaa\x7f\xd5\x3f\x3f\xee\x5f\x8d\x4e\x2f\x2e\x2e\x47\xa7\x27\x67\x27\x37\xbd\x3d\xfa\x1d\xee\x9f\xbd\x86\x87\x87\xc7\xa3\x77\x17\x17\x3f\x5f\xf7\x56\x19\x76\x53\xb8\xca\xb2\x96\xde\x0b\x11\x2e\xc5\x00\x57\x48\x92\x3a\x91\xdb\x93\x77\x4c\xe6\x2e\xd0\xb2\xcc\xa2\xf4\xe2\x91\x5f\x1a\xf1\x09\x90\x20\x83\xca\x02\x05\xfa\x70\x0a\xca\xdd\x82\xe7\x56\x34\x8c\x06\x62\xd8\x82\x38\x32\x7e\xa0\xfe\xd6\xd8\x2b\x74\x20\x86\x3d\xc0\xba\xe6\xed\x76\xa8\x9f\x83\xef\xca\x40\x0c\xb5\x7a\x51\x1d\x2b\x95\x16\x4b\x26\xd3\xba\xa1\xb9\x84\x6f\x84\xa1\xa8\x5a\x43\xc7\xdc\xb1\xb5\x15\xd9\xfc\xc2\xb2\xf3\xe6\xfd\xf9\x11\x2c\xb4\x2b\x3a\x82\x6f\x15\xe9\x5c\xab\x2e\xd6\x54\xe5\xc2\x40\x4c\x65\xf6\x37\xc2\x75\xa5\x75\xc0\x89\x29\x0a\x3f\x74\x00\xb0\xde\xb6\xfa\x79\x6b\x43\x8f\x93\xbf\xda\xcb\x64\x53\xbf\x92\x4c\x5b\x0a\x68\xa7\xbc\x9a\xad\xba\x59\x4e\x73\x6f\x68\x64\xe9\x67\x99\x03\x47\x97\xe9\x67\x89\x5c\xf6\xa7\xc1\x72\xd8\x2a\xe6\x1c\x83\x18\xfe\xa8\xd2\xae\x92\x84\xe3\x4a\xa6\x35\x77\xfe\xd4\xd8\x5b\x68\x86\x34\xed\x8c\x09\xed\xd8\x7d\x51\xdb\xfd\xb1\xeb\xfe\xd8\x75\x7f\xaa\xba\x3f\x46\xe3\x72\xdf\xa7\xba\x7b\xb6\xbe\xc1\xd4\x90\xea\x78\x30\x1d\x22\xc5\xf1\x34\xbf\xeb\x9f\x7f\x58\xaf\x99\xda\x7f\xcd\xe7\xb2\x10\x89\xd8\x85\xe4\xb6\x8c\xdf\x55\xfd\x6d\x37\x38\xba\x6b\xf4\x50\x38\x08\x2f\x0c\xb6\x5a\x4d\xd8\xb2\x39\x4e\x2b\x25\x28\x5a\x49\x77\x90\x1e\xb3\x74\x11\xc9\xf1\xec\xc2\x60\xf7\xd5\x54\x24\x4c\x45\xcd\x45\xd5\x32\xe8\x1a\x13\x0e\x26\xb8\x1b\x9d\x50\xd9\x3b\x73\x05\xe6\x64\x75\x47\xe5\x96\x01\x83\xf3\xfb\xa9\x38\x55\xf1\x43\xde\x38\x69\x36\x21\xd5\x6e\xba\x5c\xa8\x79\xda\xe0\xa7\xbc\xf1\xb3\x98\xdd\x7e\x3b\x89\x64\x34\x8a\x26\xd1\x42\x36\x78\x94\xd6\x7f\xe6\x6c\x1a\x23\x70\x31\x75\x35\x3c\xe3\xf4\x6c\x24\x5e\x7d\xd6\x3b\x7a\xa2\x38\x38\x8e\x64\x74\x68\x7b\xb1\xa2\x7c\x39\xa7\x22\xba\x8d\x01\xb0\xb6\x90\xce\x3f\x9f\x32\xeb\x4f\x9b\x65\x08\x37\xd6\xeb\xcc\xf2\xc7\xaa\x9b\x5f\xd6\x82\xf0\x5a\x78\xf9\x5a\x6c\x9a\x9d\xba\x15\x32\xfe\xfc\x75\x53\x2f\x96\x00\x15\xf8\x75\x9e\xe4\x44\x18\x51\xd4\x05\x77\xda\x8b\x82\x4e\x06\x3e\x8e\xf8\x51\x24\xa3\x38\xb9\xeb\x73\x29\x18\x4d\x5f\x3f\x35\xe4\xf8\x09\xe6\xc9\x84\xc6\x81\x36\xbf\x06\x92\xce\x17\x71\x24\x29\xfc\xce\xf0\xf8\xb9\x3a\x74\x67\x40\xbc\x3f\x44\xa1\xe8\x9c\xbb\xb4\xef\xe7\x87\x67\xfd\xeb\xcb\xc3\xa3\xfe\x35\xc2\xcc\x95\x00\x0b\x7a\x9e\xe5\x1c\x6c\xb9\x60\xa7\x65\xd3\x27\x04\x29\x3f\xbf\x09\xbc\xec\x99\xd3\x44\xf4\x0b\x10\x1d\xde\xf1\xcd\x9b\x8f\x6f\x8e\xda\xed\x24\xc7\xf0\x37\x01\x70\x03\x3e\x6c\x05\xd0\x58\x40\x88\xee\x11\xe8\xb3\xa6\x28\x8c\x50\xbb\xcd\xb4\x0e\x05\xba\x34\x89\xd2\x19\x15\xec\x4f\x8a\x20\xdf\xae\xbe\x85\x24\xea\x0e\xa2\x91\x9b\x59\x96\x21\x6f\x65\xbe\x60\x33\x57\x77\xe5\x17\x39\x83\x8b\x25\x8f\x13\x88\xfb\xaf\x16\x9d\x53\x19\xc5\x7f\x89\xf4\x30\x60\xe0\xbc\x84\x00\x23\x92\x94\x09\x90\x71\x56\xd8\x67\x5a\x53\x90\x2e\x17\xb4\x80\x50\x94\x9b\x74\xac\x25\x32\xa6\x51\x4a\xcf\x20\x73\x12\x18\x60\x13\x20\x14\x0d\xce\x58\xd9\xdd\x2e\xbc\x5c\x4a\xc1\x6e\x97\x92\x9e\xb2\x39\x93\xbd\xef\x6c\xde\xbc\x33\x45\xcd\x8a\x0a\xd5\xce\x2f\xd6\xdd\x73\x75\x2b\x96\xa0\x91\xae\x6b\x72\x71\x79\x3d\x78\x54\x87\x01\xd4\x08\x00\x6c\x8d\x39\xb2\xad\xfd\xf5\x8e\xca\xbc\x74\x68\xe8\x5e\x57\xd6\xa2\x21\x2f\x65\x2d\xcd\x5d\xec\xee\xc1\xc9\x25\x21\x1a\xa8\xd9\x55\x11\x72\x4c\xe1\x76\xee\x76\x84\xa1\x51\xd1\x49\x6e\x53\x2a\x1e\x68\x5e\x94\x9a\x24\xb5\x08\xe1\x24\x73\x8a\x06\x1f\xea\xa5\x76\x33\xd9\xbb\x6d\xa8\x78\xa0\x28\x2d\x86\x81\xfa\x32\xc0\xe5\x11\xca\x0a\x88\xd0\xa5\xb2\xaa\x63\xae\x24\x00\x7f\xa9\x0e\xdd\x24\x47\x6a\x6c\x65\x90\x9e\x4a\x9c\x93\xf3\xd5\x81\xed\x77\xe7\xbc\x3b\xc0\x49\xc3\x73\x7a\x0e\x35\xbb\xea\x05\x3b\x14\xb5\xa8\x92\xc6\x85\xe6\x1f\x99\x83\xe6\xd6\xab\x76\x45\xc7\x89\x98\xa4\xe5\x48\x74\xe6\x21\x0d\xab\x85\x5b\xe6\x2b\x84\x63\xa3\xdc\xf2\xfa\x1d\x52\x84\xc7\x6e\x6d\x4d\x9d\x61\x8c\xa9\xe7\xb6\x3c\x85\x79\x0c\x07\xd4\x08\xf2\x33\x32\xae\x2c\xb4\x75\xb6\xd7\xcb\x97\xda\xe5\xd3\x15\x02\xca\x11\xc2\x29\x2c\xbe\x7d\xa4\xd6\x63\x42\x56\x13\x36\x39\x02\xe8\x02\x7f\x20\x02\x27\x38\xca\x19\x61\x4c\xc4\x7e\xfc\x83\xd8\x89\xf6\x63\xab\x73\x1d\xab\x61\xf1\x8e\x16\x03\x0f\x25\xd2\x2e\x88\x33\x52\x68\x63\x8c\x5a\x0d\x1d\x1a\x43\x87\x64\x38\x98\x0d\x51\x96\xb4\xdb\x2c\x14\x38\x51\xfb\x81\xc5\x71\xb9\x3b\x05\x13\x61\x66\x49\x04\x9a\x8f\x26\x13\x90\x78\x2f\x74\xe5\x02\x85\x63\xd8\xf3\x78\x82\x70\x81\x36\x97\xcf\xd3\x26\x54\xa8\xe9\xb1\x52\x27\x54\x58\x21\xc8\x32\xf1\x62\x19\xce\x6a\x79\x4e\x95\x74\xd5\x38\x4d\xa8\xc1\x5f\xe6\x68\xcf\x0e\x2d\xc3\x13\x2a\xe9\xb8\x46\x46\xd9\xde\x53\x4c\x30\x5e\xce\x9d\x69\x6b\x23\xb7\x2a\xf3\x84\x1a\x76\xa5\x2d\x0d\x38\xa9\xa7\xf4\xa8\x42\xe9\x49\x81\xd2\x53\x35\x07\xe1\x00\x0a\x15\x19\x95\x2a\x67\xc8\x7f\xd9\x40\xb4\x52\x07\x21\x85\xfc\xc7\xee\x7a\xcd\x7e\xec\xaa\x5b\x86\x3a\x82\xd3\xf1\x8c\x4e\x96\x31\xbd\xe0\x63\x8a\xc2\x20\xd2\x0a\xe1\x40\x13\x4a\xfa\x32\xa2\xdb\x6f\x20\x37\xed\x1b\x86\x97\xa8\x62\x3b\xf5\xa6\xaf\x81\xac\x22\xcc\xf0\x12\x65\x1a\x21\x7f\xd3\x9c\x8a\xca\xac\xd1\xdc\x8d\xd9\xe4\x85\xc6\xe3\x64\xc9\x65\x0f\x5a\xbb\xa3\x12\x85\x02\x07\xda\x4e\x12\x20\xbb\xc4\x3d\xe3\x7f\xe8\xaf\xb7\x5a\x15\xbd\x89\x7b\x34\x83\x0c\x19\x75\xa7\x91\x0b\x9a\xd3\xab\x9b\x77\x28\x0c\x6a\xcf\x50\x2f\xdf\x37\x11\x9d\x06\x51\xd1\x70\xda\x00\x1d\xa8\x22\x1b\xde\xeb\x7e\x8f\x14\xcf\x86\x9e\xa6\x17\xdc\x49\x81\xea\x10\xa4\x8e\xc5\xd2\x72\xde\x6e\x97\xb2\x06\x0e\xc0\x9e\xac\x50\x24\xcc\x1e\x40\xdf\x16\x6a\x69\xbc\x24\xc3\xbd\x41\x42\x9a\x0d\x7d\xa8\x1a\xd6\x61\x3e\xcc\x70\x43\x37\xab\xf0\xbc\x5a\x8d\xee\x1a\x4d\x1a\x24\x5b\xe1\x9d\xf0\xae\x0b\x95\x1d\x2f\x4b\x52\xab\x54\x52\xab\xac\x93\x5a\xa9\xed\xbf\x1c\xf0\x21\xb2\x6e\xe8\x60\x89\xf2\x65\x52\xd4\x12\x9a\x73\x27\x20\x8e\x8a\x0c\xe7\xe4\xb7\x59\xa2\x71\xec\xbf\x26\xe9\xc3\xca\x91\x9a\xef\xde\xa6\xe8\xf1\x43\x14\x2f\x69\x5a\x22\xf4\x23\xef\x15\x98\x18\x3a\x29\x8d\xc4\x78\xf6\x33\x7d\x7a\x54\x1d\x29\x15\xb7\x8f\x75\x51\xbd\x84\xb5\xf5\xbe\xf1\x5e\xe9\xc2\xe3\x24\x4e\xca\xdb\xec\x48\x3d\x83\xd7\xde\xe0\xfd\x2e\x55\xe7\x61\x95\x79\x45\x6d\x77\x36\x4e\x57\x6d\x9f\x9e\xa9\x18\x3a\x56\xc3\xaa\xb4\x85\xa4\x70\xd0\xd6\x94\xf2\x9e\x64\xc5\x4b\x46\xd4\x74\xc9\xb8\x8b\xd9\x7c\x5e\xbe\x49\xf0\x64\x42\x77\xb5\xd3\x6e\x80\x03\xf8\x66\xf7\x36\xba\xa5\x71\x5d\xbc\xe8\xc6\x8b\x87\xa9\xfe\xdb\x64\x31\x56\x75\x8e\x93\xf9\x82\xc5\x0d\xea\x04\x7b\xb1\x78\x41\xf0\xaa\x77\x93\xb1\x2d\x08\x3a\xa5\x82\x42\xae\xc6\xe7\xaf\x37\x2e\xf8\xd5\x7d\x9d\xb7\x6d\x1f\xa9\x26\x6b\xeb\x7a\x60\xf4\xb1\x7e\xd8\xb5\xd8\x0c\xb6\x1c\x03\x2c\x03\x07\xdd\xeb\xdd\xb5\xa8\x78\x60\x0d\xfd\xae\xad\x29\xbf\x9c\xd9\xbe\x3e\x32\x41\x01\x37\x3b\x92\xb5\xd5\x78\xe1\xc3\x81\x48\x1f\x0a\x13\xa7\x16\xbb\x7e\x3d\x92\xa5\x2c\x5c\x02\x5f\x12\xca\x8e\x0b\x48\xa8\x79\x36\x69\x3c\xc7\x0f\xf8\x09\xdf\xe1\x5b\x3c\xd2\xa9\x03\xf1\x35\xbe\x68\x32\x9d\x1d\x86\x68\x05\xe0\x0f\x5b\x94\x9c\x84\x83\x40\xd1\x4d\xc2\x29\x97\xbd\x5d\x43\xd1\x41\x9e\x21\xfe\xb0\x0e\x38\x29\xc3\x34\x0f\xea\xb8\x2f\x55\x67\x15\x15\x8e\x1e\x7b\xf3\x88\x71\xaf\xca\xfb\x67\xab\xbc\xf9\xd2\x2a\x6f\x9e\xad\xf2\xec\x4b\xab\x3c\x7b\xb6\xca\xa3\x86\x2a\x7b\x6e\x42\xd3\x6f\x6b\x66\xf4\xe8\xd9\x8a\xaf\x9a\x2a\xde\x15\x49\xe2\x57\x75\xf5\x6c\x55\x97\x2f\xad\xea\xf2\xd9\xaa\x7e\xff\x12\xb2\xf9\xfd\xd9\xea\x8e\xbf\x6e\xf6\x8e\x9f\xad\xf8\xfc\xeb\x2a\x3e\x7f\xb6\xe2\x93\x22\xca\xda\x7a\x0d\x29\x10\x0d\xcc\x35\x42\x98\x76\x44\xf4\x48\x24\xa6\x20\x6d\x9f\xe6\x1b\xee\x4d\xc9\xef\xfc\xcf\x10\x0e\x32\xdb\x31\x13\x74\x81\xc0\x03\x93\xba\xc7\xe4\x0d\xa6\x9d\x19\x8d\x17\x54\x90\x3f\x30\xed\xd0\x74\x1c\x2d\x68\xff\x33\x00\xe2\x15\x1d\xa0\x0a\x37\xf7\x6d\xef\xe6\xce\xa6\x21\x18\xc7\x65\xf2\xee\xe6\xec\x34\x8f\xf0\xd4\xbf\x75\x80\xa5\xce\x67\x4d\xcd\xcb\x20\x80\x10\x59\xea\xf2\xa8\x1a\x97\x4b\x75\xa7\x77\x7f\x43\x22\x44\x26\xad\x23\x8d\xab\x37\x8f\x10\x74\x9a\x39\x89\x23\x09\x90\x02\x33\x39\x8f\xaf\xa3\x29\x25\xa9\xc4\xb4\xc3\x52\xd5\x01\xf8\xbd\x54\xbf\x47\x10\x58\x7e\x45\xf9\x84\x0a\x2a\x52\x7f\x2d\x3e\xd9\xf0\x3f\xd2\x55\xf5\x08\x28\x73\x4d\xa5\x8c\x7d\x34\x6a\xb4\xd2\xe3\x20\xdf\xc8\x76\x3b\xfc\x46\x92\xbe\x3d\x9e\xd5\xbf\x54\x84\x20\x6d\x2e\x01\x0a\x78\x29\x04\xe5\xf2\x6a\xc9\x4f\x93\x64\x81\x42\xb4\x5e\x2f\x3b\xb7\xd1\xf8\xfe\x76\x29\x38\xcd\xef\x3d\xde\x95\x07\x34\xb7\x3f\xcb\xdc\xd7\xf9\x1b\x69\x73\x96\x1b\x5b\xc6\x8d\x5d\xb5\xd2\xaa\x50\x51\x16\x26\xbd\xf9\x12\x03\x3a\x34\x06\x8e\x9a\xef\x3d\x62\x83\x92\x04\xac\x2a\xb3\x28\xad\x6d\xcb\x95\xac\xb6\x57\xea\x62\x5a\x47\xe9\xa2\xd4\x8f\xa2\x87\x11\x35\x26\x96\x94\xca\xe5\xa2\xcf\xef\x18\xa7\xce\x93\xa4\x50\xce\x85\x51\x84\x81\x3a\xc9\x7b\xbb\xc9\x52\xc6\x54\x06\xf8\x98\xc3\x06\x71\x6f\x73\x46\x64\x4b\x5c\x41\x09\xe7\x6a\x55\xae\x20\x57\x80\xe3\xea\xc7\xa5\x2f\xcd\xa1\xdf\xdb\x9d\x24\xf3\x5d\x0d\x30\xa9\x64\x0a\x8b\x4f\x14\x60\xbf\x84\x79\xb6\xa9\x0a\x29\xa8\x3a\x28\x0c\x5e\x92\x96\x2f\x9e\xad\xcc\x8d\x35\xec\xe2\xc7\x1c\xd3\x03\x85\x47\x21\x42\xf8\xac\x34\x1f\xae\x0e\x23\x39\x14\xc5\x9c\xa9\xdc\x58\xe3\x99\xaa\xf1\xa6\x34\x7f\xe5\x42\x37\xaa\x50\x50\x94\x79\xfc\x56\xf4\x01\x58\x9a\x06\x6f\xd2\x73\xf1\xb2\x5c\xf3\x7d\x88\x80\xfd\x15\x3d\x93\xc3\x40\x33\xaf\x00\xaf\xbc\x90\xea\xde\xf6\x5e\x56\x1c\xb9\x2e\xd5\x8b\x93\x71\x80\x67\xa2\xf8\xce\x3b\x63\x24\xfd\x2c\x77\xa7\x8c\xc6\x93\x00\x7f\xa6\x8d\xc5\xc6\x33\x3a\xbe\xbf\x4d\x3e\x07\xf8\xb1\xb1\x50\xcc\xf8\xfd\xae\x4c\x02\x7c\xd4\x58\x84\xf1\xc5\x52\xcd\xbb\x68\xa0\x5a\xef\x2c\x31\x45\x8f\x78\x53\x5d\xaa\xe7\x91\xa0\x51\x80\xaf\x29\x6a\xdd\x75\xfa\xe7\x1f\x3a\xcf\x3a\x6c\xac\xd7\x1b\xd6\xfb\x50\x2d\xe5\xad\xde\xd8\xb0\x25\x0f\xf3\x3c\x2f\x0d\xfb\xb2\x8e\xb4\x6b\x49\x2d\xd0\x39\x10\x2e\x16\xd4\xf8\x8f\x16\x09\xbc\x6e\x33\x94\x68\x46\x18\x2e\x1e\x00\xb5\xf9\x9f\xd7\x35\xd8\xb0\x0d\x54\x4b\xb7\x4b\x16\x4f\x80\x80\xb4\xab\x5e\xe1\x62\x9c\x3e\x32\x39\x9e\x85\xb4\x73\x9b\x24\xd6\x17\x5b\x1d\x23\xaa\xed\xb3\x64\x42\xd1\x6a\x1c\xa5\x54\x55\xc8\xc0\xb1\x2e\xe8\x19\x56\xf7\xb9\xe3\x9e\xbd\xd6\x0d\x74\x6e\x21\xbf\x03\x40\xe8\xc1\x47\x82\xce\x9e\x26\x42\x91\xbd\xfd\x68\xd6\xb1\xcf\x58\xc2\x6b\x3e\x33\x67\x4d\x5e\x5c\x03\xf5\x56\x4b\x42\xb6\xa9\x66\x4e\xe3\x86\x1c\x78\xc3\x7a\xc9\x46\xf5\x26\x3d\xaf\xa3\xb6\xea\x8d\x9c\xe4\x52\x51\xd6\xbb\xe6\xba\x95\xd4\x78\xe3\x78\x42\xf9\xeb\x2b\xc3\x08\xf2\xf5\xb4\x9f\x42\x17\x02\xfc\x93\x6c\x7a\xad\xee\x4f\x32\xc0\xbf\x49\x84\xe7\x06\x45\x4d\x09\x2e\x2f\x27\xdb\xe5\x62\x12\x49\xda\x4c\xb6\xf6\x18\x40\xad\x46\x7a\x73\x27\x45\x1d\xbd\xd9\x40\x43\xcb\xe3\x5b\x9e\x40\x37\xeb\x1c\x5f\x9c\x69\x4d\x68\x6a\xd0\x82\x1b\x1b\xa9\x39\x4b\x5e\xd2\x1c\x16\xc4\xce\xcb\x01\x34\x77\x23\x28\x3d\xf2\xaa\xe9\x7d\xee\x9c\x27\x13\x5a\xf3\xc6\xef\xa9\x01\x33\xce\xb4\xc8\xa5\x3b\x78\x16\x8d\x45\x52\x3c\xef\xfb\x5c\x2b\xb1\x34\x8b\x61\x52\x9b\xec\xdf\x24\x82\x9c\x53\x4c\x3b\xe3\x68\x11\xdd\xb2\x98\x49\x46\xeb\x3c\x91\xbf\x1e\xee\x49\x6b\x6d\xb7\xbb\x2d\x1b\x53\xb3\x82\xa4\x92\xa7\x6c\x4a\x8f\x9e\xc6\x31\xb5\x29\x8e\xd2\x9e\xc5\xa9\x33\x69\x27\x55\x89\x71\xa1\x04\xc2\x80\x40\x00\xf8\x86\x5e\xe9\xfc\x21\xc2\x9a\x64\xde\x25\xc9\x7d\x4f\x64\x86\x97\x1e\x59\xb6\x6d\xe0\x07\xea\x62\x39\x5a\x82\x5c\x74\x1c\xab\x1e\x9d\x1d\x9e\x1f\xbe\xed\x5f\x8d\xae\x6f\xae\x4e\xce\xdf\x8e\x4e\x2f\x2e\x7e\x7e\x7f\x59\x83\x18\x48\x0f\x7c\xb5\xa3\xd3\xe3\x69\x9f\x45\xef\xc0\xd8\x9d\xeb\xa6\xc1\x94\x96\xf5\x9c\x54\x1d\x8b\x70\x65\xec\x6d\x3d\x81\xad\x2a\xa1\xb7\xbd\x67\x12\x10\xbb\x0a\x82\x0c\x4b\x2b\xf4\x6d\x18\x8f\x5d\xae\xb1\xf0\x53\xca\x02\x8c\x90\xad\xbc\xdd\xf6\x6a\x05\xb0\x73\x48\xe5\xe6\x70\xb1\x5c\x80\x08\xcc\x9d\xc9\x18\x2e\xea\xa7\xae\x66\x14\xb4\x66\x14\x26\x05\xb8\xf0\x07\x51\xae\xf8\x33\xc7\xb4\x63\x0b\x1e\x69\x62\x2c\xd1\x62\xde\xe2\x2a\xcb\x9a\xfd\x54\xf2\x7d\xfb\x42\xe7\x14\x7f\xab\x6f\xf4\x80\xa9\xd9\x88\x5f\xd2\x44\xf9\xdb\x8d\x6d\xb1\xf4\xda\x1c\x69\xc0\xfb\xde\x30\x91\x42\xc6\x8c\x17\x37\xd8\x54\xc1\xc6\x56\x1b\xd8\xcd\x0b\x1b\x6d\x64\x57\x9a\x7b\x5e\x80\x60\xff\x81\xd1\x47\x42\x3b\x60\x22\xb9\x96\x3a\x26\xff\xe4\xfc\xc3\xc5\xcf\x7d\x42\x3b\xef\xd5\xf6\x55\x8d\x5c\x59\xed\x24\xa1\x9d\xc3\xdb\x54\x8a\x68\x5c\xa5\x7b\xda\x19\xd1\xcf\x0b\x2a\x18\x28\x09\x63\xc3\xf4\x68\xe7\x44\x51\xa0\x4e\xa2\x6e\xaf\x9f\xf0\x94\x0a\xe9\xfd\xf6\xfe\x54\x97\x56\xe3\x08\x49\x3b\xfd\xfc\x0c\x22\xb4\xf3\x4e\xdf\xd6\x69\xe7\xea\xe2\xe2\x66\x74\xd5\x7f\x03\xe0\x79\xa6\x23\x84\x76\x4e\x19\xbf\xf7\x7f\xdf\xd0\xcf\xf2\x50\xd0\xc8\xfc\x09\x89\x6f\xd5\x27\x46\x86\x55\x15\x79\xe7\xad\xef\xe5\xf1\x67\x33\xe4\x9e\x09\x0a\x18\x6b\x80\x59\x83\x2e\xa2\xaa\x65\x13\x83\xce\x41\xa5\x6a\x51\xfd\xe3\x6c\xf3\x79\xfc\x7c\x13\x58\x87\xd4\xb6\x8e\xdc\x01\xa0\x94\x86\xda\xb4\x68\xa3\x2a\x68\xc7\xde\x17\xf0\x0a\x14\xd6\x3d\x99\x19\x5c\x31\xfc\x8e\xbc\x09\x57\x6c\xd2\x0b\x66\xbf\xcf\x3e\xbf\x4f\xc4\x32\xc0\xb7\x71\x32\xbe\xef\xfd\x6b\x15\xa4\x4f\xf3\xdb\x24\x4e\x83\xde\x60\x88\x21\x93\x09\x64\x51\x50\xbf\x07\x7b\x78\xf0\xea\xbf\xb0\xc7\x90\xf0\x60\xf0\xea\x3b\xdc\xc5\x83\xe1\x70\x08\x57\xf4\x21\x9e\x46\x71\x4a\x87\x43\x1c\xcc\xa2\xb4\xff\x10\xc5\x41\x0f\x9e\x64\xff\xc2\x6a\xb8\xbd\x95\xd6\xbb\x83\x17\x4a\xb0\x88\xc6\xf7\xd1\x1d\x4d\xbf\x6d\x54\xdc\x83\x4f\x90\x95\xf9\xd3\x6f\x95\xf0\xd3\x99\xdd\xa6\x81\x56\xff\x17\xd6\xe6\x1d\x2c\xcb\x6b\x35\x49\x69\x47\x0f\x02\x85\xc1\x55\x5f\x1d\x13\xef\x6f\xfa\xa3\x9b\xc3\xb7\x81\xf6\xfd\x78\x4f\xa2\xce\x1b\x11\xcd\xe9\x63\x22\xee\xff\x16\x4f\x9d\xc1\xeb\x21\x89\x3b\xc7\x4c\xc8\x27\xb5\x1d\x6e\xa2\x3b\x87\xa0\x95\x61\x41\xd5\x84\x2d\x25\xad\xb7\xa4\xed\x83\x56\xe4\xf7\x84\x71\x14\xd6\xa8\x05\x06\xaf\x87\x3a\xa3\x5f\x67\xa2\xaa\x07\xab\x38\x0c\xde\x90\xfa\x7b\xfc\xbe\xc3\x52\xfd\xc3\xe8\xb1\xc8\x76\x57\x09\x86\x91\x3a\x11\xdc\x38\xc1\x6e\x88\xc2\xf7\x7a\x0a\x3e\x3e\x43\xbd\xa6\xc7\x8e\x7a\x2b\x0d\xbc\x84\x6e\x1d\xff\xb7\xe3\xf7\xab\xce\xca\x10\x77\x7f\x94\x74\x74\x1f\x95\xec\xe3\xde\x7e\xc8\xdf\xc2\xd0\x8c\xc3\xb0\xda\x04\x07\x3a\xae\x57\x4b\x3a\x4e\xd0\xa0\xda\xe4\xfe\xa9\x44\x0f\xef\x2f\x8f\x0f\x6f\xfa\x01\xc2\x6f\x4b\x2f\x34\x53\x03\xe1\xd4\xf0\xb7\xb7\x1a\xe8\xbe\x54\xee\x10\x9c\xae\x03\x84\xbf\x69\xc4\x40\xa9\x9b\x9b\x3b\x5a\x8b\xe1\xfd\x9b\xa5\x13\x87\x83\x01\xfb\xf3\x97\x62\x10\xa2\xad\x5c\xda\xb4\xf6\xd6\x93\x44\x83\x45\x99\xc4\xf2\x48\x67\x51\x40\x9d\x38\x4a\xe5\x15\x7d\x60\xa0\xa3\xd4\xb8\x28\xf0\x0c\x4c\x74\xe6\x41\xe6\xe6\x52\x74\x18\x9f\x51\xc1\x64\x7a\x9a\x24\x29\x45\x90\x7f\x0e\x4b\xaf\xef\x0f\xf0\x5d\x2d\xf1\x76\x64\x74\x67\x6c\xeb\x85\x66\xad\xa1\xdd\x35\xdb\x2a\x45\x9b\xa9\xab\x05\xa0\xe7\xc0\xe0\x3d\xbc\xf6\xbc\xa3\x3e\xb5\x84\xc6\x7f\xa4\x30\x34\xd3\xb3\xd0\x84\xff\x66\xe1\x37\x08\xff\xda\x34\x73\xb9\xe8\x68\xc3\x76\xfd\x9c\xfc\xd2\x4d\x1e\x24\x6b\x14\x94\xd7\xe2\x72\x88\xe7\xa7\xad\x86\x79\xdb\x43\x9e\x9a\x90\xc7\x66\xaa\xf0\xe2\x08\x6d\x3f\x1a\x02\xc0\xc3\x6a\x31\x70\x1e\xfd\xc9\xa2\x2c\x01\x2a\xa6\x09\xf6\xce\xc2\xb8\x03\x07\xbc\x3b\xa7\x35\x17\xf8\xad\x99\xcc\x1c\x09\xd7\x32\x3d\x3d\x59\x5f\x31\x19\xb9\x50\x18\x76\x71\xdc\x61\x29\x74\x0b\x76\x71\xb1\x10\x9b\x86\x31\xf5\xb3\x8a\xc0\xd8\xc0\x7b\x84\x4d\xc3\x71\xf9\x55\x44\x43\x3a\x90\x43\x8d\x57\xe8\xbf\x9c\x75\xde\x9f\x1f\xf7\xdf\x9c\x9c\xf7\x8f\x95\x38\xd0\xbf\xea\x9f\x1f\xf5\x35\x10\x60\xd8\xc5\x13\xc0\x70\x89\xc6\x33\xc5\xb5\x51\x88\xb2\xd0\xd1\x14\x36\xa9\x17\xa8\xce\xf8\xb4\x79\xdd\xbc\x9e\x50\x6f\x2f\xcb\x2c\xfc\x05\xe1\x9f\x1a\x49\xd2\x05\x4d\x5b\xa2\xe4\xb5\xfb\x59\x27\x60\x33\x9b\x02\x73\x07\xb8\xf7\x33\x7d\x22\xc2\xfb\x7d\x13\xdd\x91\x38\x17\xca\xbc\x53\x28\xec\xe2\xb1\xda\xaa\x6f\x12\x61\xe5\x47\xa4\x11\x58\x30\x57\xcf\x49\xa1\x12\xcc\xb3\xa6\x35\xb5\xc0\xe9\x75\x50\xba\xf6\xcc\xa8\x67\x14\xde\x20\x2c\xc3\xf0\xc6\x91\xbb\xc6\x8d\xb5\x13\x90\x9e\x73\x3e\xf8\x54\x4c\x95\x09\x05\x52\x55\xa0\x5a\x69\xa9\x4a\xbb\x02\xbf\x21\x4c\xe9\xf3\x4b\xb0\xbf\x71\xf2\x73\x01\xb7\xb2\x00\x0e\xf6\x59\xb1\xc2\x84\xbc\x64\x39\xe2\xce\xd1\xc5\xf9\xf5\xcd\xe1\xf9\x8d\x92\x4a\x3c\x9f\x6e\xb5\x14\xb0\x31\xc6\xc9\xfc\x96\x71\x8a\xc2\x01\xc3\xc9\x10\xfd\x83\x2b\xe2\x46\x56\x5e\x15\x45\x08\xa2\xb2\x50\xd8\x63\xbb\x98\x39\x28\xfe\x62\xa6\x20\xc2\xda\x6d\xeb\xc3\x05\x38\x72\xae\x47\xfa\x61\x31\x0e\x87\xe4\x61\x5a\x7c\xbd\xf6\x63\x79\x88\x4d\x1f\x86\x23\xe2\x94\x28\xe0\xf2\x63\xa8\x24\xc2\x02\x01\x24\x81\x92\x8f\xb4\x32\xa1\x9e\xd6\x23\xa0\xf5\x24\x7b\x29\x49\xb9\x59\xc9\xd9\x41\x33\x79\xc9\x66\xf2\xda\x74\xe8\x38\x12\x93\x40\x28\xb5\xd2\x23\x16\x9d\xd1\x83\xd9\xf8\xe2\xab\x68\xa0\x72\x78\xfb\x57\x06\x5d\x77\x86\xb9\x99\xbc\xa2\xca\xda\x46\x3b\xeb\x52\x16\xac\x50\x46\x77\x45\x81\x14\x7b\x85\x88\x99\x95\x6f\x94\x1c\x55\x73\x3d\x94\x54\x6b\x98\xbe\x6e\xc6\xbc\x63\x5a\x53\xcf\x8b\xb7\x18\x16\x75\x7b\x4b\xef\x59\x91\x57\x36\xfc\xda\x23\x9e\x4d\xc3\xf2\x81\x96\x43\x94\x1a\x12\x02\xb3\x2e\x08\x93\x2c\xbd\x14\xc9\xe7\x27\x14\x0a\xef\x9c\xba\x14\x6c\xce\xf4\x25\xd8\xd2\x9e\x19\xcb\x07\x3f\xb4\x5f\x9d\x31\xb2\x22\x48\xc8\x44\xc9\xbd\x35\x67\x52\xb1\x3d\x8a\x0e\xf4\x22\xba\x11\xbf\x60\xef\x80\x7a\xe3\x46\x2c\xe5\xec\x29\x40\x08\x5b\x01\xdb\xe7\xd5\x7e\x01\xd4\x7b\x69\x13\x30\x4b\xf8\x83\xc1\x3d\xca\xc2\x99\x12\x52\x26\x90\x47\x31\x8a\x73\x51\x05\xf3\x17\xb0\xef\xcd\x27\xa8\x31\xe2\x2b\xde\x1d\x89\xbb\x14\x4e\x4d\x45\x0f\x40\x15\x98\x7f\x8d\x20\x23\x6a\x16\x5d\xa0\x1c\x6b\xd7\x66\x84\x8c\x62\xc0\x30\xe6\xd1\x9c\x4e\xe0\x78\xb0\x0c\x25\x22\xcc\x51\x86\x27\x21\x86\x09\x8e\x2a\xab\x0d\x19\xe7\xfc\xf5\xde\xcc\xd9\xf5\x70\x2d\x43\x57\x23\x56\x9c\xdc\xef\x92\x62\x16\xba\x4b\xaa\x73\xb6\x4b\x5e\xf7\x9c\x23\x01\xe4\x8e\xb4\xa2\x0c\xfb\xcb\x2b\x61\x81\x38\xab\x6b\x51\xde\x9b\x83\xd7\x43\xbd\x6b\xe1\xf8\xfb\xba\x15\xfa\x4b\xb3\x68\xbb\xfa\xf7\xcc\xa3\xbb\xc9\xf8\xf3\x99\xfc\x9f\xa7\xec\x8d\xb3\xe1\xbe\xf6\xc8\xca\x9c\x93\xaa\x35\x37\x8e\xa8\x71\x1c\xff\xd8\x4d\xa2\x70\xad\xc2\xdb\x7b\x2f\x93\xd0\x67\xd4\xbb\x1f\x0d\xe8\xd0\x7c\x58\x73\x41\xc2\xe9\x5f\x3c\xd5\xa1\x09\x75\x6c\xc3\x7a\x98\xa3\xe6\xef\x12\xe3\xfc\x43\x5c\xb3\x57\x43\x6f\x99\xf6\xa2\x6f\xc4\xa9\xd3\x85\xef\xa8\x3e\x42\xa0\x37\x7a\x6a\x8d\x7e\x48\xe2\xc1\xea\x9e\x3e\xf5\xde\x36\x05\x9f\xe6\xb3\xf7\x76\x98\x65\x43\xa4\x29\x20\x57\xe3\x2c\xf5\x7d\x29\x47\x12\x20\xd4\x00\x57\x4b\x1f\xb8\x5a\x10\xdd\x0b\xf0\xe5\x76\x30\xca\x1e\xd4\x3a\xad\x82\x00\xd2\x9a\x74\x52\x9e\x77\xd8\x98\x3e\x13\x11\xee\x4a\x4e\xbd\x92\xdb\x5d\x0f\x88\xdb\xcb\x98\xb2\x5d\xc9\x96\xde\x68\x44\x43\xeb\xb5\xff\xd3\x59\x8b\x54\x6d\x07\x3a\xf3\xdf\xaf\x00\x41\x68\x2e\xaa\xa8\x07\x5d\x3d\xc8\x7f\x6f\x3a\xfd\x8d\x22\x6b\x42\x4b\x8a\xa8\xe3\x93\xab\x9b\x4f\x5a\xab\x89\x17\xe5\x97\x87\x57\x6f\xaf\x03\x84\xe7\xe5\xe7\x56\x2d\x0e\x7a\x2e\xa7\x23\x9f\x6b\xa9\xec\xa1\x5c\xfa\xe4\x7a\x74\x7c\x72\x7d\x79\x78\x73\xf4\xee\xe4\xfc\xed\xe8\xf0\xe6\xe6\x4a\xd5\xfa\x54\x2e\xf7\xee\xf0\x7a\xf4\xfa\xf4\xe2\xe8\xe7\x00\xe1\xbb\xf2\xcb\xd7\x17\xef\xcf\x8f\xd5\x67\xb7\x94\x2c\x3a\x47\x89\xa0\x1f\x18\x7d\xb4\x0a\xd7\x45\xe7\x68\xc6\xe2\x89\x7a\x94\x5e\xeb\x38\x50\xbc\xe8\xa8\x9f\xd7\x32\x92\x34\x7f\x04\xf4\x09\x81\x06\xf6\x59\xd4\xd1\xf1\xe2\x87\xb0\x78\x79\xc9\xf2\x6f\x55\xd9\x19\xfb\xcc\x38\x0e\xc3\x53\xb2\x52\xa7\xb5\x75\x0c\xd9\xee\xe2\xaf\x54\xf8\x3e\xd0\xa1\x4d\x37\x33\x98\xd0\x46\xed\xaf\x2e\x30\x37\xca\x99\x5f\xbd\xd4\x2e\x83\x3b\xf5\x10\xfc\xde\x05\xd5\x56\xf8\x72\x37\x54\xc5\xb5\xa2\x36\xf4\x2e\x44\x59\x86\x06\xe3\xce\xe5\xd5\xc5\x65\x5f\x91\xc2\xf1\xc9\xf1\xe8\xe8\xdd\xe1\xf9\xdb\xfe\xb0\x2c\x9b\x6e\xdb\x3e\xfb\x2a\xa6\xc1\x82\x0e\xb1\x20\x39\xc0\xfd\x81\x1c\xd0\x61\xcf\xda\x38\xea\x91\xf1\x3e\x0d\xdb\x6d\xf5\x7f\x4f\xfc\x33\xea\x0e\x94\x65\xf8\x54\x3d\x39\x94\xb2\x16\xf0\xd7\x45\xde\x28\xce\x73\x0a\x39\x58\x8f\x2f\xce\x2a\xa5\x9d\xa9\x63\xa1\x0a\xab\xc5\xb3\xe9\xea\xcd\xec\xc1\x69\x47\x3c\x94\xd9\xf7\x57\x27\x84\x90\x59\xe7\xfa\xc3\xdb\x91\x0b\x40\xd1\x01\xa6\xb3\x1c\xd7\x29\x17\x68\x05\x06\xb4\x72\x06\xa6\x54\x90\xc3\x72\x28\x70\xc7\x75\xd7\xeb\x20\x92\x12\x52\xad\x26\x07\xc2\x8e\x0b\xc2\x6a\xc3\x08\xf5\xc4\x20\x1a\xaa\x51\x4c\xd8\xe4\x8a\x8e\x29\x7b\xa0\xea\x75\xc1\xb1\xcf\xbd\x56\x6b\x5b\x7e\xf1\xc8\xe2\xb8\xfe\xcd\x84\x4d\xe0\x42\x53\x5f\xa1\xfa\xee\x7d\xe9\xae\x56\xfa\xae\xf4\x02\xa9\xad\x9e\xdb\xbc\x6e\x29\xbe\xa5\x1b\xe0\xea\xad\x37\xbc\x6f\xcb\xbe\xa5\x1d\x41\x93\x05\xe5\x3a\xf8\xc8\xdf\x42\xc6\x22\xa0\x76\x52\x2e\x16\x5d\x46\x22\x9a\xa7\xbd\xc1\x50\x47\x18\xd5\x1a\x22\x6e\xcd\x99\x37\xa2\xce\x16\xf5\x20\xd3\x3f\xff\xf3\xea\xcd\x8b\x6c\x51\xff\x90\x81\x89\xce\x17\xf2\xc9\x5a\x98\xf0\x23\x25\xb7\xd4\x99\x86\xe2\xe8\x29\x59\xca\xde\x88\xe2\xb1\xe3\x45\xbd\x81\x89\x1f\x71\x5e\x6f\x43\x2c\xa3\x3b\xdd\xba\xf1\x4b\x73\xe1\xd8\xaf\x19\x9f\x30\x7e\xa7\x3e\x52\x94\x17\xe0\x00\xbe\xa2\x93\x00\x07\x8c\x4f\xa8\xa4\x62\xce\xb8\xf6\xf5\x9b\xb0\x54\xf1\x12\xf5\x4a\x46\xb7\x06\xe6\x22\x50\x24\x1f\xe0\x20\x5a\xca\x04\x12\x84\x07\xd8\xa6\x64\x55\x05\xa7\x89\x98\xab\xf6\xb5\x2f\x82\x73\xc3\xb3\x55\xf5\xb6\xf7\x70\xa1\x19\xf5\x60\xc2\x26\x27\x3c\xa5\xc2\x66\x4b\xff\x8a\x98\x4e\xaa\xbf\xec\x14\xea\x26\xce\xe1\x43\x0b\x0c\xde\x2b\x94\xe1\x71\x25\x66\xb1\xa8\x85\xf1\x66\xa6\xd0\x84\x79\x6a\x2c\x60\xce\x4a\xfb\x48\xf1\xe3\x17\xd1\xf4\xb7\x6e\x76\xb4\xc7\x4b\x9f\xe6\xbe\x3d\x35\x7a\x7f\x9d\xf1\x51\x15\xfc\xec\x53\xc4\x02\x6c\xc6\xf6\xa0\xd9\x4c\x1f\x9e\xf3\xe4\xcb\x28\x44\xc7\xec\x9b\xc5\x56\x1d\x8f\xa9\xb4\x6b\x9f\x46\x0f\x9a\x46\x84\x59\xf5\xc8\xfa\xc4\xaa\x1f\x94\x8f\x0d\x79\xa9\x5f\x73\x08\xb5\x35\x3f\x78\x62\x6d\x2e\xe6\x81\x84\x13\x34\xc0\xc1\x8c\xb2\xbb\x99\x04\x42\x5c\x2c\x21\x49\x65\x80\x83\x38\x82\xf8\x98\x98\xa5\xe0\xfe\xab\x2b\x9d\x47\x8a\x12\xe7\x4c\x35\x37\x5f\xc6\x92\x2d\x20\x8c\xca\x90\xe6\x22\x92\x6a\x87\x05\x38\x48\xd9\x9f\xea\x41\x2a\xe9\x22\xc0\x01\x88\xa7\x01\x0e\x1e\xd9\x44\xce\x82\x21\x86\xdf\xbd\x20\xd0\xd4\x0a\xab\x6f\xc4\xdc\x09\x0a\x57\xb5\xb2\x67\xa0\xe6\x30\xc8\x70\xea\xbf\xf4\x42\x4d\xf5\xfb\x2a\x14\xb0\x3e\x01\xed\xfa\x5a\x85\x4b\x6e\x27\x04\x2c\xf1\x2d\xc6\xb7\xfa\xce\xe7\xbe\x4f\x07\x74\x68\x12\xc0\x5a\xff\x2f\x43\x11\x66\x9f\x84\x66\xed\x50\x4b\x8a\xa7\x95\xf6\xca\x21\x34\x1b\x47\x72\x3c\x0b\x45\x6e\x03\xec\x6b\xc0\x67\xfd\x9e\x10\x9a\x85\x12\x69\x34\x5b\x84\x85\xe2\x31\x6a\x9a\x34\x2e\x89\x99\x3a\xfd\x63\xce\xec\x1f\xd1\x67\x0d\x20\xa8\x28\x3e\xf7\x51\xf8\x4c\xf1\xe7\x2f\x23\x79\x8f\x02\x35\xd1\x5f\x6f\xa0\xe5\x26\x0a\x06\x2f\xda\x21\xce\x49\xdd\x91\x72\xee\x63\x5b\x47\xcd\x22\x81\x98\xb2\x71\x02\x61\x6e\x86\x56\x52\x1a\x6b\xd7\xc2\x3e\x9f\xf8\x3f\xaf\x65\x24\x6a\x28\xff\x51\x44\x8b\x9c\x28\x35\xf1\x6b\xb2\x1a\x62\x55\xbf\x41\x77\x49\xe2\xb4\x38\x61\xe0\xdf\x71\x4d\xf1\xf5\x57\xcc\x17\x8c\x48\x4f\xd7\x05\xc5\x87\xee\xac\xba\x63\x37\xe7\x9f\x77\x92\x45\xed\x59\x15\xb4\x5d\x70\x4b\xd9\x83\xe2\x7b\x1c\xb0\x29\xb8\x4d\xfc\x4f\xbc\x67\x7c\x26\xf0\xaa\xec\x66\xf1\x3d\xbc\x0b\x16\xea\x18\x55\x7c\x13\x0e\xbc\xac\x5a\x0e\x1b\xef\x8b\x20\x66\xfc\xfe\x86\xc9\x98\x06\x43\xcf\x03\xa3\xf4\xfd\x3f\xe5\x94\x61\x9c\xb9\xdd\xa9\x79\xef\x72\x1a\x4c\x05\xa5\x7f\xd2\x70\x65\xa7\xbd\x66\x4f\x3b\xeb\x1c\x7c\x7a\x53\xf9\x34\x43\xfb\xe1\x45\xdd\x31\x7c\xe8\xd1\x5e\x14\x60\x91\x2c\x25\xed\xdd\x53\xac\x31\x30\xec\x1f\xa9\xfa\x0b\xf2\xd9\xab\x3f\x82\xb1\x0e\x3c\xd9\x7d\x9c\x51\x1e\x68\x7a\x91\x6a\xda\xf4\x9f\x82\xc6\xe6\x99\x39\x71\xed\x2f\xc5\x23\xf5\xdf\xda\x4d\x49\xe3\x76\x04\xfa\x47\x80\xe3\x24\x52\x74\x6e\x9e\x9a\x5f\xf9\xb9\x6b\x9e\xe7\x27\xba\x09\xcd\x51\xc7\x6f\xdd\x5e\x99\x09\x3a\x55\xec\x16\xd6\x53\x1d\xf0\x71\x51\x08\x30\x3c\x7b\x98\x1f\x33\x85\x63\x43\xf7\x29\xef\x46\x41\x94\x10\x11\xd7\x42\x1a\xe3\x77\x27\xbc\xfc\xe4\x62\xa9\xaa\xa5\x0f\x94\x4b\x3d\xb1\xe3\x98\x8d\xef\x83\x2f\xbf\x23\xb5\x3c\x35\x9a\xab\x4e\x83\x88\x6b\x9e\xed\x80\x58\x47\x8c\x3f\x24\xf7\x10\x7e\x6e\x02\x32\xd5\x61\xf0\x64\xdc\x8e\x51\x18\xec\xda\x38\x4d\x84\x47\x66\xf9\xae\x60\xad\xe1\xcc\x88\x62\x16\xa5\x28\x0c\xec\xc7\x1d\xbf\x88\x6a\xb4\xfc\x99\x80\x6b\xe5\xe6\x8f\xa1\x88\xfa\x50\xcf\xf4\xf3\xdf\xe9\x72\xee\x33\x91\xf7\x2f\x3f\xd3\x02\x78\x1a\xe0\xa0\xa6\x3b\x01\xae\xd7\x40\xc2\x27\x39\x1e\x01\x21\xf7\x26\xc5\x41\x71\x26\x68\x86\xf0\xc8\x90\x7b\xb9\x55\x0d\x44\x80\xf5\xbf\x69\x53\x43\xf0\xd6\xea\x39\x75\x51\xd7\xec\x36\x34\xab\x6e\x86\x52\xff\x29\xb5\x60\x3f\xd2\xdb\xaa\xdc\x20\x3c\x6d\x6a\x07\x5e\x96\x06\x74\x43\x35\xf6\x83\x87\x26\xad\x11\x5e\xac\xd8\xba\x51\x38\xa0\x3e\x20\x48\x55\x32\x28\x18\xbb\x58\x7a\x6c\xea\x24\x12\x43\xda\x6c\x78\x5e\xd8\xa7\x8a\x0b\xe9\x3d\x54\x19\x99\xb7\xf7\xd5\x32\xda\x9d\x56\xe1\x69\xdb\x3a\xe7\x81\x29\x60\x1a\xf1\x3e\x56\x73\xd7\xd0\x44\x2d\x6d\x68\x3a\x83\x3f\xec\x2a\x06\x23\x33\xcd\xde\x36\x2f\xf0\xb6\x86\xf9\xaf\xa9\xdf\xe6\x54\xdc\xb6\x3d\x1d\xb1\xf4\x10\x7a\xa7\x81\x76\xd4\x85\xf3\x35\x3d\xfc\xa2\xfe\x56\xf6\xcd\x3f\x3d\x08\xec\xc0\xb7\xcb\x2d\x83\x70\xb7\x4d\x88\x44\x25\x52\x30\x63\x94\x6a\x8c\xee\x67\x19\x8b\x49\xfb\x1c\xe9\xde\x15\x33\x56\x18\x15\x4a\xb1\xc3\x80\x58\x1d\xdc\x6a\xc9\xd2\xcb\xfd\xe5\xda\x36\xee\xf5\xee\x6e\x84\x5a\x92\x88\x03\x97\xb7\x70\x2b\x40\x3d\x0d\x21\xa3\x67\x6b\xe8\xd2\x30\x1a\x10\x2d\x33\x77\xd8\xa0\xe2\xeb\x09\x74\x90\x35\x86\x1d\xe1\x88\x74\xf7\xa3\x5c\xdd\x1a\xed\xec\x20\x36\x0d\x93\x8e\x1d\xe5\x9b\x44\xc0\x0c\x85\x1c\x33\x2c\x07\xd1\x10\x53\xec\x2c\x91\xdb\xdd\x56\xbe\xa1\x4a\xe7\x45\x75\xfd\xdd\x71\xe3\x93\x49\xdd\x9e\x70\xf9\xef\xfc\x82\xed\x76\x69\xab\x58\x51\xd3\x6f\x76\x97\xf1\x20\x43\xb8\x7c\x50\xfd\x85\xbe\xe8\xf4\xa1\x95\xde\xac\xd7\x85\xde\xa0\x86\xee\x24\x4b\x19\x00\xcd\xc0\xc1\x55\xa6\x98\x6d\x50\x5c\xb1\xf4\x9a\x29\xb9\xf5\x48\x9d\x9f\xc8\x4b\x77\xd2\xf5\x88\xa7\x73\xbb\xbc\xbd\x8d\x69\x9a\x7b\x59\xc0\x51\x79\xac\x65\x47\x8b\x9b\x66\xaf\xbe\x9a\xb2\x31\x23\xdb\x7c\xbd\x0e\x46\x29\x8d\xa7\x01\x21\x04\x3c\x2f\x74\xde\xd5\x76\x9b\xb5\xdb\xb4\x54\x4d\x88\x30\x40\xeb\x82\xc3\x5d\x2a\x93\xc5\xa5\x48\x16\xd1\x5d\xa4\x67\x04\x97\x19\x63\x4e\xe4\x8d\xd4\x0f\x91\xc7\xc5\xcd\xe0\x13\x20\xb5\x50\x49\x96\x56\xd3\x02\xad\x2e\x2d\xd0\x3c\x88\x40\x38\x26\x2b\x78\x6e\x34\x46\xa9\x96\xe3\x40\xf8\x48\x3c\xbc\xac\x87\xce\x34\x8e\xee\xee\xe8\xe4\xc4\xa1\x4c\x20\x75\x03\x33\x8e\xe3\x09\xef\xb8\x88\x42\x93\x04\x6e\x74\x47\x39\x15\x91\xa4\x37\x6e\xf1\xc2\xd8\x22\x37\x20\x35\x29\x00\x78\x53\x2e\x53\xc6\x44\xe3\x16\x15\xad\xb4\xc7\x6a\x40\x93\x68\x27\xa7\x13\x92\x78\x3f\x6e\x92\xd0\x56\x95\x65\x58\x49\x77\x7f\x03\xdf\x37\xb2\x6f\x81\x79\x9a\xbf\xde\x81\xfc\xe8\xf5\x4c\x31\xa5\x28\xb0\x1b\xd0\x7c\xd9\xc4\xdf\xb6\xfc\x67\xaa\x2a\x5f\x96\x33\x2b\x2c\x8b\x2b\x2c\x0a\x2b\xcc\xeb\x67\x8a\x77\xec\x6c\xbf\xbf\x3a\x35\x68\x9e\xea\xb0\x35\x2d\x55\xa7\xa4\x34\xf8\x43\x41\x4f\x93\x68\x02\x62\xac\x2f\x70\x37\x9e\x12\x5a\x78\x72\x29\x88\xca\xd5\xe8\xbc\x7f\x79\xd8\x7d\x61\xdc\xee\x9c\x2e\x7d\x54\xed\x65\x8d\x5c\x65\x79\x36\x2d\xce\x92\x24\xdd\x7d\xf9\x83\xf5\x53\xde\x97\x16\x8f\x4e\x10\x9b\x33\x58\x77\x48\xb8\xbd\x95\x39\x0b\x95\x9b\x26\xb5\x20\xbd\xe0\x7f\xa8\xcb\x45\x41\xef\x5c\xef\x5a\xee\x44\x9b\x8f\x33\xca\x5b\x7e\x2e\x49\x78\x9b\x52\x19\x7a\xb7\x03\xa3\x90\x95\xce\x3b\x2c\x9a\x43\x3e\x50\xd9\x6e\x83\x79\xc0\xf4\x1c\xad\x24\x91\x06\x74\xc1\x98\x32\x9e\xe8\x50\x5b\x3d\x75\x95\xf9\x6d\x14\xcb\x4e\x3a\x63\x53\x19\x1a\xd4\x45\x41\xe4\xc0\xd6\xb3\xbb\x37\x6c\x01\x46\x21\x4b\x7f\xc9\x59\xc0\x41\x5e\x8d\x21\x75\xd9\x59\x24\x8b\x10\x69\x03\x67\x6a\x20\xb5\xfc\x02\xf7\x14\x61\x38\x5e\x4c\xc5\x5e\x15\x86\x86\xee\xa9\xff\x99\x79\x98\x77\x0d\xe7\xef\x8c\xb8\x7c\x4f\x2b\x0f\xd3\x00\x4b\x94\xd1\x38\xa5\xfb\x59\x86\xd0\x0b\x54\x09\x66\x03\xe8\xfb\xb1\xaf\x4e\xbf\x28\xa9\xd3\x2b\x8a\x73\x7d\x73\x4f\x83\x4c\xcf\xda\x19\xc5\x47\x94\x5c\xd0\x56\x39\x7e\xe5\x48\xdb\xed\xae\x28\x39\x53\x2f\xbd\x20\x9d\x2b\xfd\xe6\xb2\x6c\x8c\xeb\x1f\x1e\xbd\x1b\x9d\x9c\x07\x08\xff\x4e\x9f\x09\x01\xd0\xf6\x6b\xe3\x57\x29\xa3\x3b\x42\xb5\xb3\xb7\x5a\xf0\x4b\x3a\x24\xdb\xdd\x4d\xa9\x1f\x37\xba\x9d\x95\x2c\xd6\xf2\x0b\x2c\xd6\x10\x33\xa0\xda\x3d\xa6\x24\xb8\xa5\xaf\xfe\xf3\x3f\xff\xf3\x7f\xfe\xe7\xee\xed\xed\x2d\xdd\xfd\xfe\x3f\x5e\x75\x77\xff\x7f\xd3\xf1\xed\xee\xab\xbd\xef\xe8\xf4\xfb\xef\xbe\x1b\x8f\xa3\x57\x1e\xec\xce\x39\x2d\x5c\x0a\xea\x1c\x78\x37\x18\x9a\xdb\x6d\xaa\xc6\x9d\x59\xcb\xed\x1f\x50\xdb\x7a\x1d\xfc\xfb\x9e\x3e\x05\xda\xba\xfb\xc1\x3d\x63\x13\xca\x25\x93\x4f\x81\xb6\xde\x9e\x34\xce\xb6\xcb\x19\x66\x20\x36\xcc\x84\xdf\xd3\xa7\x37\x89\xb0\xa9\x27\x2d\x85\x90\x8d\x73\xce\xd2\xfe\x7c\x21\x9f\xaa\xb3\x0e\xa2\x5c\x67\x4e\xe7\xc9\x9b\xa4\xd6\x34\xa7\x93\xdc\xd1\xcf\xb2\xc1\x15\x46\xf7\xcd\xf2\x7d\xdd\x37\x27\xb6\x98\xbe\x29\x56\x21\x7e\xcc\xf9\xa9\xd3\x99\x9b\x03\x01\x96\xfb\x4d\x22\x42\x81\xac\xfc\x6a\x7a\xa4\x9e\x24\x44\x82\x38\x2a\x8a\x31\x4d\xb6\xf2\x9d\x1d\x0c\x6e\x09\x89\x51\x1c\x73\xac\xbe\xed\x31\x13\x45\x82\x4f\x37\x39\xd2\xb8\xec\x34\x56\xa0\x60\x05\xa7\x42\x9d\x8c\x5e\x3b\x6d\x44\x00\x80\x2f\x31\x7b\xde\x23\x65\x2a\x92\x79\x6d\x9e\x31\xcb\xe2\xed\x40\x20\xaf\xd9\xc1\x47\x0a\x14\xa2\x9a\x01\x98\x52\xed\x52\xae\x2a\x79\xa3\x21\xf1\x14\x17\xae\xad\x6f\x30\xf4\xf2\xbe\x37\x03\x66\x0a\x17\x30\x6c\x78\x97\xaa\x3b\x14\x15\xdf\x75\xbb\x0e\x8d\x1b\x0e\xe6\x00\x70\x51\x64\x16\x9e\x50\x84\xdf\xfc\x5f\x3a\xb9\x2f\x1a\x33\x9c\xe8\x39\x18\x6c\x3e\x03\xd6\xc1\x57\xcd\xc0\x9f\x9b\x67\xc0\x09\x89\x76\x0e\x92\xc2\x1c\xa8\xf7\x76\x0e\xee\xe9\x53\x4a\x24\x4e\xcc\x71\x46\x04\x4e\x1a\x7d\x82\xcc\x3c\x9c\xf0\x09\xfd\xdc\x48\x1d\x7e\xea\x31\xc8\x90\x28\x3c\x27\x6b\x48\xb5\x61\x37\xe4\x47\xea\x65\xf5\x1f\x0c\x71\x42\xba\xfb\xc9\x0f\x7c\x3f\x51\xf7\x43\x07\xf0\xed\x7c\x3a\xc5\x20\x19\x7a\xa9\x45\xed\xf4\x0a\xcc\x30\xff\x02\xea\x75\x4a\x41\xcc\x55\xa3\xb6\x65\x1c\x91\xed\xbd\x4d\x74\xad\x6a\x08\x23\x12\xad\xd7\x76\x40\x3f\x92\x57\xa8\xdd\x36\x71\xf1\x12\x61\x66\x09\x1e\x27\x3b\x3b\x99\x96\x01\x12\x45\x0a\xd1\x81\xeb\xad\x86\x6b\x33\xa1\x1c\xa7\xe0\x7c\xa7\xfa\xfe\xac\xc3\xf4\xa6\xfd\xa1\x57\x0e\x36\x08\xdf\xc4\x54\x2d\xaf\x4c\xfd\xbd\xf4\x6e\xc3\x41\x80\x85\x3d\x7a\x4d\xb8\xbf\x3d\x0c\x04\x4d\x97\xb1\xb4\x87\x81\x39\x1a\x44\xe5\x68\xa0\x1b\xb6\xcd\xe0\x1a\x44\x00\x5d\xb5\x4c\xc4\x30\xd4\xb4\xa2\x98\x3e\x78\xf2\x9b\x81\xe7\xf3\x30\x49\x38\x55\xb3\x59\x4c\xd0\xc1\x50\xbb\xfd\x8a\x10\xc2\xac\xb0\xe5\x11\x06\xb7\x13\xfd\x9a\x9a\x5f\x59\xeb\xeb\x8f\xab\x0d\xc7\x91\x9d\x1f\x7b\x20\xe9\xf9\x29\x1f\x48\xf6\x26\xa2\xe7\x0b\x24\x59\x18\x54\xe5\x80\x62\xa5\x03\x4a\x2d\x84\x55\xaa\xd8\x23\x0a\x9e\x45\x84\x03\x05\x35\x1f\x52\xfe\x72\x51\x3b\xb9\x70\x72\x45\xe6\xe4\x62\xfa\xe4\x4a\xec\xc9\xf5\xfa\xaf\xba\x4e\x7e\x75\x50\x40\x93\x2c\xd0\x71\x41\x01\x55\xe2\xf6\x75\xaa\x40\xd3\xef\x28\xc2\xef\xff\x1f\x3a\x84\xc1\xde\x73\x5b\xd4\x16\xec\x0e\xdd\x60\x3e\x52\xb2\x32\x94\x59\x83\x3a\xdd\xcd\xb0\x5a\xd4\x26\x08\xd3\x0c\xff\xf1\xbc\xa0\x27\xe8\xd4\x93\xf2\x2e\x23\x39\xb3\x3b\x1b\x3a\xf3\xf2\x98\x06\x27\x99\x97\x5c\xa7\x73\x41\xdd\xd5\x38\xdc\x98\xa7\x5d\x33\x85\xaa\x1f\x74\xbe\xbf\xa6\x76\x73\xd9\x0a\xc1\xf3\x39\x8f\x03\x2a\x78\xf5\xbb\xc4\x7b\xc5\xe0\x03\x8e\x74\x66\xeb\x2e\x8e\x3a\x23\x48\x07\xc6\xa5\x29\x8f\x60\xfd\xbd\x28\x01\xa6\xd3\x56\x12\x42\x42\x4a\x94\x04\x61\xe5\xf1\x6d\x4f\x1e\xcf\x9d\x3c\xf3\xa7\x55\x8e\xa5\xbe\x36\x1d\x81\xe4\x3c\x26\x6e\x98\xa3\x83\x3f\x69\xf1\x7c\x0d\xb9\xcf\x60\xc3\xed\x2e\x42\xbd\xb4\xf3\xee\xf0\x7a\x74\x7e\x78\x73\xf2\xa1\x3f\xba\xfe\x74\xf6\xfa\xe2\xb4\xdd\x7e\x4b\xd5\xe7\xef\xf5\xe7\xa5\xaf\x10\xea\x7d\xa2\x5e\xed\xde\xf9\x58\x2d\xf9\x82\x1e\x28\x56\x08\xf3\xec\x1c\x43\x1b\x68\x19\x18\x31\xb5\x01\x8c\xf0\x9d\x9e\xcc\x0f\x85\xaf\x4b\x9b\x99\xda\x19\x97\xde\x77\x6a\xc7\xbc\xb8\x39\x55\xd8\x6b\xed\xcc\xff\xb6\xb9\x31\xf7\x95\x39\xcd\x2a\x8c\xbe\xe2\x7d\xdb\xad\xf5\xbe\xed\x0e\xdb\x6d\xff\x97\x77\x47\x51\x3b\xab\x65\x40\xaa\xa4\x01\xa3\x82\xbb\x9a\xc5\x88\xa2\x07\xdf\xd0\xde\x4f\x34\xfc\x85\x1a\xd4\xa9\x7f\x6b\x13\xab\x7d\xff\x33\xb5\x8f\xed\x65\xce\xbe\xf9\x89\x86\xbf\xd2\x0a\xe6\xd4\x4f\x34\xfc\x8d\x86\x12\x3c\x21\x81\xb7\x7f\xf8\x7f\x13\x33\xc8\x59\x81\x2c\xb1\x82\x52\x8c\xd3\x4b\xe2\xf1\x04\x0e\x06\xc3\x00\xb9\x5d\x2e\x6a\x76\xb8\xf0\x04\x57\xef\x1e\x69\x77\x8f\xc3\xc7\x2d\xec\x76\x81\x0e\x4e\xa9\xbd\xfa\x70\xd4\xab\xd9\xf9\x02\x1d\xbc\xf1\x8b\x34\x6d\x71\x81\x0e\x5e\xfb\xe5\x3e\x51\xaf\x76\x7f\x5b\xc3\xdb\x8f\xf4\xff\xab\x3b\xb5\x6e\xbf\x59\xf0\xb7\xbf\x65\x47\x51\xb7\xa3\x72\x5d\xce\xa7\x67\x9c\xfd\xed\x8d\x22\x77\xee\x7f\xfb\xcc\x17\x15\x09\x39\xff\xf4\x67\x27\x9e\x9b\x7e\x19\x1c\x56\xe1\x01\x54\x7c\x43\x4b\xd2\x91\x7b\xf3\x4b\xf1\xcd\xaf\x60\x74\x74\x6f\x7f\xa5\x1e\x96\x5e\x8e\x1b\xab\xa1\xf3\x74\x40\xad\xe3\x57\x7a\xf2\xf8\x52\x11\xb3\x7b\x9a\xe3\xc3\x16\x27\x0f\x28\xff\x6e\xc9\x26\x26\xd2\x2e\xcb\xdb\xfc\xcd\x0f\xae\x70\xeb\x29\xcb\xc3\xf3\x5c\xbc\xb5\x7f\xb7\xab\xe0\x27\x2f\x50\x62\x95\x55\x8c\x21\x05\xbb\x09\x35\x3f\x71\x44\xe4\x20\xa9\x82\x19\x44\x07\xa1\x7a\x4e\xba\x38\x41\x3d\xfd\xe7\xce\x4e\x84\x83\x60\x27\xd9\x39\xa6\x3b\x11\xca\x80\x5b\x51\xf9\x8c\xbe\x32\x35\x88\x40\x9b\x78\xdb\x06\xa5\x6d\xb0\xe3\xd5\x02\xf9\xd6\x01\xa1\xb7\x49\x85\x69\x6b\x0a\x91\xcb\xec\xeb\xc3\x12\x69\x4b\xaf\x94\x58\x48\xcc\x25\x59\x05\xed\xa0\x17\xb4\xa3\xf9\x62\x3f\xc0\xc1\x0f\xea\xef\x58\xaa\x3f\x7f\x54\x7f\xde\xa9\x3f\xff\x15\xfc\xab\x17\xb4\xff\x58\x26\xf0\xfc\x5f\xea\xf9\xff\xf8\xfc\xea\x3f\xd5\x8f\xff\xd6\x3f\xfe\xa3\xab\x7e\x10\xfd\xe3\xbb\xe3\xfd\x20\xc3\x4c\x92\x6f\x07\xed\x1f\x7e\x0c\xfe\xf5\xdf\x64\xf8\x2d\x4e\x0a\x3f\xef\xf2\xdd\x12\x49\x9f\x1f\x48\x75\x21\x75\xef\x52\x59\x52\x80\x12\x42\x0f\x28\x09\x82\x5e\x15\xcf\xb8\xdd\x0e\x3d\x10\x62\x84\x01\xf0\x40\x16\x80\x5a\x96\xe5\xea\x9a\xf5\xa9\xb5\xfb\x56\x4f\xbb\x17\x08\xe4\xd7\x27\xe4\x7a\x1d\x8a\x66\x9f\xcc\x48\x1d\x29\x42\x76\x66\xfa\x58\x15\xe6\xe6\x30\x4e\x62\x2f\x4c\x48\xe6\xb4\x0b\x57\x40\x43\x00\x15\xb0\x38\x0d\xb2\x21\x3b\x8b\x48\xa4\x8a\xcc\x5c\x5d\xee\xd4\x92\x07\x41\x2f\xe8\x49\xa0\xb8\xa9\xac\xbf\x04\xf1\x90\x6f\x56\x0e\x79\x01\x63\x60\x87\xd4\x06\x4d\xb2\xbd\x87\x93\x0e\xe0\x36\x11\x3e\x60\x9d\x8b\x8f\xe7\xfd\xab\x21\x4e\x3a\x2c\xf5\xf0\xb2\x88\x29\xe2\x20\xec\x6a\x50\x2a\x8b\x5f\xe0\x44\x03\xf0\x25\x4f\x74\xe2\x0c\x09\x29\x19\x14\xf3\x4d\xea\xf0\x36\x36\x0d\x73\x24\xc8\x50\x90\x58\xea\x7e\x53\x1c\x4c\x93\xe4\x36\x12\xbd\xdb\xe8\x4f\x35\xe3\xf6\xa7\x0e\xf6\xa7\x6e\xa2\xde\x24\xe2\xfd\xd5\x29\x89\x25\x64\x37\xdd\xaa\xcb\xbe\xf9\xfe\xea\x14\x49\x49\xde\x5f\x9d\xe2\xca\x77\x63\xfd\x1d\xd8\x2f\xab\xa2\xbe\xec\x18\xd7\x77\x04\x68\x1e\x70\xcc\x41\x16\xc9\x30\x38\x4a\x96\xf1\x64\x8b\x27\x72\x6b\xca\xf8\x64\x0b\x7c\x9e\x55\x4b\x5b\x6a\x29\x19\xbf\xdb\x9a\xd3\xf1\x2c\xe2\x2c\x9d\x6f\x4d\x13\x01\x6f\xae\x23\xce\xa4\x01\x5f\x0b\x50\x4b\x4a\x9d\x6d\xcb\x36\x11\x06\x4b\x11\x03\x70\x67\xa5\x8f\x59\x16\xc2\xfd\x35\x4a\x53\x2a\xe4\xcd\x4c\x4d\x37\x93\x1a\xde\x74\x82\xc2\x04\x70\x07\xea\x6e\xb8\x1c\x53\x84\xf9\x86\xc8\xc6\x5c\xa5\x69\x14\x29\x06\x5d\xa2\xc8\xd5\x92\x72\x97\xea\xf5\xfb\x36\x89\x76\x6e\x3d\xaa\xbb\xd5\x83\xf7\x42\xa9\x20\x0a\xa5\xa6\x32\xac\x41\x39\x92\x8e\x4c\xea\x02\xb5\xeb\x1a\x16\x7e\x18\x9b\xa2\x5e\x0f\xc8\xb2\x56\xab\x70\x6e\xe1\x56\x12\x87\x02\x7e\xc2\x53\x19\xc5\xb1\x85\x20\xcc\xbf\xf3\x14\x66\x3e\x89\x6b\x27\x08\xab\xfa\x6d\xa8\xc5\x07\x15\x80\xb8\xe0\xbc\x3d\x1d\x45\xf3\x17\x9b\x2b\x56\x52\xd3\xda\x84\x4d\x4c\x1a\xad\x12\x4e\xb0\xd9\x9e\x90\xb5\xaa\x73\x4b\xef\x18\x27\x65\xd7\xcb\x12\xa7\xe8\x62\xbf\x07\xf0\x89\x17\x8f\xaa\xaa\x19\x27\xf3\x39\xab\x68\xd3\x8c\x1c\x5f\xc3\x0f\x5a\x4d\x2f\xc8\x20\xf7\x49\x12\xa4\xbb\x2f\x72\x37\x23\xb1\xb3\x83\xe4\x40\x0c\xf3\x01\x80\x6b\x3c\x2d\x46\x18\xcf\x99\xf4\xfb\x36\x65\x3c\x8a\xe3\xa7\xda\x61\xed\x65\x19\xe6\x59\x38\xf3\x21\xfe\xd4\x39\xeb\x23\xfe\x4d\xf5\x41\x3b\x6b\x12\x0e\xcc\x84\x4d\x72\xcb\xa8\xc1\xcb\xdc\x20\x24\x2c\x04\x5d\x44\x82\x1e\x8a\xbb\x7a\x38\x4b\x93\xad\x46\xaa\x25\x3c\xf2\xcf\x1f\x52\x74\x1e\x41\x2b\x53\x48\xc7\x79\x9d\x82\xdf\x72\xa9\xc6\x42\x35\x05\x42\xc8\xe5\xf4\xfa\x4f\x34\x81\x6d\xaa\xb4\x1c\x0d\x06\x95\x16\xa5\xe8\x89\x77\xb8\xba\x0c\x47\x10\x58\xb7\x13\xf4\x82\x1d\xda\xd1\xe8\xee\x59\xb6\x01\xd6\x71\xa6\x97\x60\x21\xc9\x6a\xf2\xc4\xa3\x39\x1b\xeb\x4e\x41\x74\x91\x7e\x70\x13\xdd\xa9\x5f\xde\xc4\xaa\x9f\x9a\x31\xd8\x5f\xce\x13\x1a\xd0\x60\xb7\xf7\xb0\x71\x7c\xb2\x3f\x4d\x94\x72\x14\xc7\x54\xf4\xb6\xbb\xb6\xea\xeb\x71\xb2\x00\x8c\x4b\x0f\x4a\xd6\x95\x3e\x31\x11\xfc\x90\x20\x7e\xde\x70\x40\xff\xa3\x5a\xca\x1a\x00\x2c\x6d\x32\xe3\x66\x6a\xc1\xd7\x87\xa8\x83\x66\xea\x80\x84\xc6\x09\x97\x22\x51\x03\xb5\x18\xbc\x29\x8d\xa7\x3d\x27\x31\xb3\x83\x5a\x54\xab\x9e\x0e\x31\x65\x08\xc3\xae\x62\x7f\x82\xbf\xe6\x43\x67\x94\xa7\xe6\x81\xc8\x0a\x64\x51\x9f\x3b\x16\xd9\x7f\x22\x15\xcb\x35\xa1\xe3\xb5\x24\x65\x8d\x6f\xd6\xeb\xbf\x13\xa5\xba\x9c\xbb\x87\xaf\x20\x97\x35\xed\x09\x0b\x3b\x19\x22\xac\xdd\x0e\x6e\x00\x86\x54\x74\xbc\x5f\xb6\xad\xa3\x5a\x18\x63\xb7\x1e\x0b\x69\xca\x5d\xd3\x78\x5a\xaf\xbf\x55\x33\x63\x0a\xdd\x44\x35\x72\xfd\x56\x51\x4f\xa2\x8a\x36\xef\x48\xc5\x7e\xed\xdc\xb9\x50\xfa\x63\x87\x57\x5c\x53\xbb\x61\x05\x59\x38\x93\x08\x3f\x48\x88\xf2\x9d\x4b\xfc\x54\x07\xeb\xf6\x95\xa0\xcc\x0f\xb2\x65\x6e\x26\x51\x0e\xc8\x68\x00\x8a\x89\xcc\xf2\xcd\x7c\xa7\x28\x19\x18\xdb\x6d\xe3\x5d\x29\x77\x6a\xd3\xce\x85\x3e\x78\xaa\xae\xd9\x39\xaa\x58\x3d\x94\x81\x95\xd0\x26\x65\x33\x39\x82\x18\x45\xe5\x2c\x4a\x3f\x8a\x68\xb1\xa0\x13\xcb\x03\x99\xa9\x26\x8e\xd2\xf4\x8a\x4e\x0d\xdc\x60\xc3\x23\x55\x77\x01\xa9\x10\xac\xb9\xdd\x1e\x60\x26\x38\x07\x91\x0d\xbc\x7a\x52\x3e\x42\x0b\x4a\x09\x37\x16\xab\xb2\xf2\xc6\x6b\x34\x55\xfe\x49\xae\x7d\xf8\xd8\xdd\x1d\x15\x61\xe0\xe5\xb9\x34\x43\x03\xf1\xaf\xf0\xfe\x28\xa6\x91\xd0\xb4\x14\x58\x07\xa7\xda\xc0\x65\x8a\x5a\xa2\xdd\x0e\xe1\xdd\x58\x7d\x64\xde\xa8\x42\x28\x14\x10\x25\x6b\xde\x94\xbe\x43\x99\xac\x3b\x87\x73\x70\x70\xe9\x16\xc5\x9f\x04\x0b\xd9\xe1\x16\x0c\x59\x67\xcf\x7c\x09\xef\x64\xf9\x38\x18\xc9\x62\xce\x93\xc1\x9c\x0e\x35\x4a\x83\x77\xc1\x7b\x2c\x14\x82\x20\x69\x48\x1a\x2d\x41\x17\x1b\x3a\xb7\x2a\xbc\xe7\xf9\x64\xa1\x03\x5d\xf7\xa0\x3b\x44\xbd\x25\x0d\xa1\x6a\xec\x57\xdb\x97\xc6\x83\xd6\xde\x19\x1d\x02\xfb\xa0\x3b\xc4\x82\xd0\xc1\xde\x10\x3b\x22\x91\x07\xbb\x7b\x3d\x1d\x72\xfa\xf9\x62\x1a\x9a\xd4\xd5\xa0\x7e\xdc\xdd\xdb\x26\xc4\x3a\x25\x10\x31\xe0\xe0\x5b\xb7\x5d\x36\x63\x1a\xe5\xa2\x91\xab\xd9\xa0\x0b\xc5\x12\x42\xc8\xa8\x73\xb1\x48\x3b\x6f\xa9\x5c\xaf\xf3\x9f\x67\xd1\xd3\x2d\x3d\x4d\xc6\x51\x6c\x73\x66\xb3\x01\xcb\x3d\xd9\x70\x4a\xa2\x41\xe4\x7b\xb6\x0d\xf8\x90\x0c\xf4\xb7\x1a\x3b\x15\x07\xbb\xba\x97\x78\xc0\x70\x6a\xe0\x72\xb3\x4c\x6b\x37\x3e\x4b\xb2\x82\x7b\x66\x2d\x04\xbd\x1b\x66\xcf\x0e\x91\xe4\x1e\xed\x03\x8a\x29\xde\xee\x0e\x5b\x96\x47\xa7\xcb\x5b\x7d\x97\x55\x44\x80\x00\xb0\x2d\x7f\x24\x77\xf6\x2c\xc7\x1e\x28\x4e\xb0\xbd\x37\xcc\x30\xd3\xb2\x71\xc5\xf9\x35\x9f\xc4\xee\x10\x27\x44\x00\xb8\xc5\xe0\x95\x76\x73\x67\x13\x88\x8d\xb7\xd3\xe1\x2b\x8b\x18\x6a\x15\xf4\x09\x51\xbb\x1d\x46\x44\x5a\x5f\xe6\x13\xc8\x71\xbb\x09\xf3\x22\x42\x18\x38\x23\xef\xa4\x7e\xdc\xbd\x6a\x13\x47\x78\xbb\x8b\x75\x26\x07\xd5\x72\x4a\x58\x3e\x3f\x9d\x00\xfd\xb8\xbb\x87\x97\x24\x3d\x78\x94\xaa\x23\xd6\xb3\xbe\x13\x20\xd4\x1b\x49\xdd\xb7\x20\x95\x4f\x31\x85\xde\xb7\xdb\xe1\x12\x98\xf6\x85\x0c\x97\x18\x0a\x04\x2c\xfd\xc0\x52\x76\x1b\xd3\x00\x01\x3e\x62\xa1\x0b\x09\x5e\xe2\xed\x3d\xd3\x7e\x86\xaf\x25\x49\xb5\x13\xe5\x22\x8e\x9e\x7a\x5b\x3c\xe1\x74\x3f\x40\xf8\xa2\x51\xd8\x78\x39\x50\x12\x37\xb8\x3e\xae\x3f\x8d\x50\x49\x06\xc6\xec\xc5\x58\x49\x2f\x47\x40\xf2\xfc\xf4\x9c\xa3\xb9\xb9\x02\x99\x4e\x39\x0c\x56\xa7\xa4\x64\x53\x8f\x76\x77\x82\xad\xd2\xe4\x58\xd2\x00\x45\xd1\x41\xaa\x98\x4b\xcf\xc2\xd1\x6e\x5d\x3b\xb8\xd2\x48\x5d\xa4\x3c\x38\x9e\x43\x49\x56\xf5\x74\x8a\x56\xa2\x44\x26\x7a\x7d\x31\x4c\xd3\x3c\x5a\xa0\xb0\xb2\xb0\xf6\x14\x5d\x5c\xab\xa2\xa0\x77\x47\xf9\xba\xe2\xc2\x8b\xda\x60\x23\x42\x08\x3d\xb8\xd6\x51\x81\x59\x86\xef\xcb\xc2\xbf\xb7\x79\x2c\x0d\xf6\x02\x40\x9d\x50\x7b\x49\x71\x0f\x60\x1a\xcc\xee\x26\xbd\x97\xca\xf4\x6e\x18\xc6\x33\x5b\xc5\xee\x07\xad\x2d\x51\xad\x2e\x71\x4c\x92\xca\xb6\x18\x93\xf8\x20\xf1\x76\x44\x6f\x30\xc4\x53\x12\xeb\xad\x32\x36\xfb\x23\x41\xad\x25\xf1\x94\xb3\x6a\x73\xdc\xc8\x70\x8a\xe3\x83\xf1\x60\x9c\x73\xb8\x5e\xa2\x7d\x3d\xce\xd4\xbb\x08\xa7\x95\x9d\x62\x3b\x5f\xd8\x2f\x37\x7f\xe3\xbe\x58\x44\x72\xe6\xb6\x84\xde\x03\xbc\xee\xb5\x4b\x0e\x3b\x01\xf3\x1a\x48\x1f\xff\xe8\x26\x51\x13\x57\x04\xf3\x55\x7d\x29\xb8\x8c\x14\xfb\xb4\x5e\x87\x35\x4f\xd5\x36\xbf\xf5\x53\xdb\xca\x1c\x17\x8e\xae\xd7\x5d\x43\x82\x46\x19\xdb\x73\xa2\x68\xcd\xe6\x39\x6b\x9e\x76\x23\xdb\x63\xfe\xb5\xf2\x29\xcc\x27\xab\x7e\xfd\xaa\xf6\xeb\x57\xfe\xd7\xaf\xf4\xd7\x2f\xc6\xd1\x02\x88\x41\xc2\xb1\xe8\x4c\xa3\x38\x7d\x22\xac\x04\xae\xf5\xf7\xae\xa9\x15\x1a\x75\xb3\xd6\x01\x02\x5a\x6e\x15\xfd\x47\x42\x74\x20\x7b\xa2\x61\xf2\x73\xf1\xea\x48\xfa\x87\x3a\xc0\xd7\xf8\xb6\x53\x5c\x8f\x39\xcd\xea\x9e\xb6\xf8\x60\x41\x87\x84\x39\x65\x8c\x76\xe6\x73\xca\x98\xc4\x46\x17\x68\xa3\x0b\x4e\x09\x40\xa2\x29\x6e\xb1\x24\x62\x10\x0d\x5b\x35\xca\xf7\x65\xbb\xbd\x1c\xfc\x3c\x3c\x50\xef\xc9\xb2\x97\x02\xd8\x4f\x08\xbf\xd4\x4e\xbf\x94\xa1\x8e\x9d\x61\xea\x49\x8a\x39\x14\x73\x48\x85\x1d\x90\x04\xd5\x8e\x83\x73\xf9\x4a\x56\x90\xf8\xdf\x04\x08\x5f\x6e\xb8\x9a\x18\xd4\xa3\x45\xe7\xec\xfd\xcd\xe1\xeb\xd3\xfe\xe8\xa8\x7f\x7a\x3a\x24\xdb\x5a\x96\x1d\x5c\xc9\xa1\xbd\xa4\x18\x48\xd4\x3a\xa0\xf5\x1a\x20\x53\xfb\xf5\xe0\xd3\xb0\xe8\x43\xfe\x3b\xf4\xb1\x90\x40\xe9\x3c\x44\x08\x1f\x4b\x32\x18\xee\x87\x5d\x3c\xd5\x9a\xa3\x37\x10\x8c\x8e\xc2\x63\xa9\xbf\x3b\xff\x47\x55\x09\x49\x9d\x2a\x21\x69\xbc\x9a\x17\xaf\xdf\xb4\xa3\xff\x28\xdc\xbd\x69\xe9\xee\xed\x65\xbe\xac\xe8\x61\x9d\x9b\x2d\xb4\x05\xd2\xa3\xfe\xf3\x3c\x9a\x53\x9c\xd4\xe4\xa0\x60\xd3\x30\x07\x88\x42\x8d\x06\x56\x0b\x34\x77\x60\x29\xd9\x66\x6e\x08\x05\xae\x54\x8a\x7a\x60\x7e\xe0\x96\x88\x13\x67\xe1\x70\x09\xe0\x82\x1d\x0e\x6d\x47\x56\xf2\x70\xb9\x34\x5c\xe1\xdf\xb5\x22\x59\x5d\xe2\x7d\xcd\x54\xc3\x88\xf3\xdb\xa2\xf1\x34\xf0\x26\x09\xfc\xa8\x3b\xee\xb2\xdb\xa0\xfb\xe0\x0d\xba\x0f\x5e\x99\x7f\xad\xae\x50\x53\x5a\xa3\x28\xf0\xba\x92\x33\x9a\xca\x4d\xfb\x40\xb6\xdb\xd2\x46\x73\xad\xd7\xc1\x84\x3d\x04\xe6\x10\x48\x9a\x75\x2b\xbe\xee\xc4\x4f\x22\xa5\x3e\x6a\x56\x7c\xc2\x5d\x19\x70\x2e\x55\x3f\xc2\x60\x34\x3a\xbc\x7a\x7b\x3d\x1a\x05\x0e\xe5\xd6\xbe\x86\xcc\xfa\xf9\x6b\xcf\x45\xcc\x0b\x73\xe9\x1d\x4b\x48\x5f\x3f\xa9\x44\x7e\xdb\x6a\xc6\xd1\x42\x2e\x05\x0d\x21\x2b\x3e\x16\xc8\xd9\x98\x19\x30\x97\x04\x47\x7e\x62\x17\x88\xa3\xd1\xfa\x85\x4e\x39\x98\x26\x0f\xac\x8a\xf4\x99\xe9\xe3\x77\xda\xdb\xa9\xef\x11\x5a\x40\xb2\x36\xb4\x1b\xe9\x61\xa6\xfb\x61\x4a\x56\x19\x52\x8c\xaf\x50\x8d\xeb\x2e\x4e\x48\x8a\x0b\x83\x4a\xea\xc7\xa4\x43\x89\x74\xc4\x68\xf1\x6a\x1a\xa1\x76\x3b\x72\x4e\x4f\xa8\xe2\xad\xba\x24\x67\x91\x9c\x75\xe6\x8c\x87\x91\x0b\xcc\xa8\x19\x53\x2b\x21\xab\xec\x65\x7d\x71\xa7\x48\x4c\xba\xfb\xf1\x0f\xcb\xfd\xd8\x1e\x1f\x63\x12\x0d\xe2\x61\x2b\x19\x8c\x4b\x23\x8e\x64\xa8\x04\x3a\x43\xff\xde\xd2\x4e\x3a\xfd\xb3\xcb\x9b\x4f\xa3\xc3\xab\xab\xc3\x4f\x66\x95\x13\xa0\xf9\x06\x5d\x28\x66\xd8\x5d\x22\x79\xe7\x81\xd1\x47\x9c\x12\x59\x5a\x5c\x75\x6a\x95\xbb\x8e\x63\x72\x24\xc3\x25\xda\x0f\xcb\xbe\x2b\x1e\xa5\xb2\x49\x80\x40\x2b\xe1\xee\x9e\x44\x76\xd8\x04\x65\x28\x14\x38\x46\x38\xb6\x18\xf2\x8c\x3e\x92\x08\xc7\x83\x27\x3a\x24\x09\x8e\x6d\x28\x79\x0e\xd2\x8b\xa5\x63\x08\xed\x76\x18\x1b\xae\x48\xf2\xa7\x9a\x7b\x8f\x49\xea\x5c\xb4\x10\x9e\x92\x67\x54\xb0\x5e\x2e\x9d\x13\x25\x84\xb7\xf4\x14\x90\x31\xd6\x7a\x10\x75\x75\xee\xe2\x45\x27\x9a\x4c\x1c\x50\x22\x0a\x23\x3c\x46\x78\x9c\x2b\xa3\x4a\xd1\x80\x46\x19\x35\x23\x41\xb0\x4d\xc8\xd8\x32\x89\x96\x12\x34\x69\xd9\x7a\x35\x2e\xea\xb4\xac\x3a\x0b\x8f\x3b\xa3\x42\x0c\x2b\x60\xc7\x78\x9a\xb0\xcd\xd5\x14\x40\xc5\x02\x13\xfe\x37\x01\x39\xe2\x56\x86\x14\x8f\xf1\x12\x4f\xf1\x2c\x87\xfe\xf4\x17\xcd\x68\x73\xda\xed\x70\x92\x6b\x0d\x85\xcf\x61\x4c\x89\x9a\x7e\xcc\x9a\x47\x34\x31\x9c\xb1\x59\x9b\xec\x56\x63\x30\xa7\x43\x63\xa5\xdb\x6c\xe2\xd1\xba\x7f\xff\xf0\x80\xf8\x17\xd3\x69\x9c\x10\xea\x2b\x1d\xf7\x61\x2d\xd3\x92\x76\x90\x63\x69\x34\x80\x29\x95\x05\xcd\xa0\xc4\x5c\xcf\x9c\xda\x1a\x15\xac\x18\xbc\x24\xbc\x93\x23\x35\xe1\xd8\xff\x69\x0b\xc1\x11\x99\x73\x14\x14\x56\xef\xa9\xa5\xa8\x90\x3c\x40\x73\x1f\x74\x69\xc9\x7e\x41\x94\x5c\x92\xcf\xd6\x27\x22\x52\x7b\x70\x39\xd8\x1b\xee\x83\x46\x2a\x57\xc4\xc4\x6a\xed\x4c\x7c\x46\x8c\xf0\x67\xd9\x31\x57\x77\x88\xce\x59\x62\x8e\x10\x4e\x76\x77\x33\xab\xcb\xf2\x54\x38\x6a\xc3\x5a\xde\x23\xf2\x5d\x7b\xe0\xfd\xdd\x2b\xba\x36\x09\xb5\x69\xaa\x7a\xa2\x4d\x97\xe6\xb1\x77\xd9\x2f\x77\x40\x2b\x0f\x50\xbb\x7d\x58\xec\x35\x57\x3c\x43\xe2\x08\x73\x2c\xbc\xab\xf6\x98\x70\xaf\x97\xbc\xb1\x97\x1c\xb5\xca\x6a\x8a\x2f\xe8\x25\xf6\x3a\x23\xa1\x07\x6a\xee\x8c\x8f\xd5\x94\x98\x4b\x3a\xc3\xcc\x4f\x51\x50\x6d\xd1\x5c\xc9\xa7\xf9\xe8\x95\xcc\x6f\xd6\x5b\xfd\x55\x1b\x5f\xf6\xe5\x4a\x09\x5f\x99\x82\x70\xdc\x6e\xc7\xae\x8d\xb8\xb6\x8d\x7b\x09\xc3\x02\x88\x6e\x84\xbf\xa2\x45\x03\xd5\xa0\x78\x67\xe0\x4d\x5b\x10\x09\x16\x5d\x25\x31\x0d\x18\xdf\xe2\xed\x76\xb9\x66\xa1\x5e\xe1\x91\x0c\xb9\x57\xd4\xfb\x9e\x6f\x64\x82\x49\x99\xf9\xf0\x8d\x4c\xd0\x30\x94\x0d\xe6\x60\x9f\x03\xdd\xd1\x21\x91\xb8\x68\x90\x4a\x2a\x76\x2e\x4f\x68\x34\xf8\xe4\x35\xd2\xa3\x3c\xa8\xd7\x18\x0e\x26\x74\x38\x44\x3d\xf8\xb7\xc0\xed\x9e\x11\x4a\x0b\x3c\xad\x3c\x07\xa1\x2c\xcf\x19\xe3\xc7\x17\x67\x01\x1c\xa0\xde\x81\x55\x9a\x9c\xd2\x5b\xcb\xb4\x61\xd0\x35\x77\xba\x4a\xa7\x60\xe4\x30\x05\xdc\xfc\xe1\x72\x51\xb1\x22\x13\x06\x05\xa5\x67\x07\x79\xf9\x09\x7d\x2a\x15\xa7\x16\xed\xf6\xb6\x33\x50\xe9\x04\x56\x1c\x59\x6f\xc7\x23\xa9\xf8\x51\xb1\x03\xa4\x60\xce\xc2\x52\x83\x07\x77\xb1\x54\xc4\x68\x7c\xa2\x19\x4d\xc3\xc4\xbd\xdb\x2b\xcd\x86\x07\x08\x5b\x33\x53\xfe\xc1\x9f\xb1\x9a\xf5\x28\x10\xa5\xae\xab\x58\x8d\x7f\x4c\x5a\x32\x6d\x70\x30\x28\xdb\x48\x93\x06\x57\x83\x2f\xa7\x9a\xea\x80\x37\x53\x45\x83\x6d\xb6\x18\xd5\x0c\x96\xd9\x5c\x05\x73\x22\x0b\xe7\x7d\xbe\xe8\xc7\x54\x46\x2c\x4e\x75\x02\x40\x16\x99\xd9\xe8\x6d\x77\x33\xcf\x46\x75\xfa\xa5\x5f\xef\x65\xda\x48\xf1\xa6\xea\x1c\xd1\x2d\x38\x47\x74\x8b\xce\x11\xdd\x82\x73\x44\xb7\xec\x1c\xd1\x2d\x3a\x47\x74\xbf\xc8\x39\xa2\x5b\xe7\x1c\xf1\xa7\x36\x5d\x9f\x4b\xfc\xae\xaa\xc9\x76\xe6\x62\x25\x80\x59\x15\x4c\x51\x3e\xb7\xc6\x62\x7d\x11\xb6\xe6\x62\x6b\xa5\xfe\x53\x5a\xf7\x35\xc5\x22\x73\xd7\x01\x1c\x91\xe4\x20\xf1\x2f\xc7\x16\x7d\x5a\x5b\xbc\xf3\xe7\x24\xc2\x85\x2b\xb9\xb5\x3f\x83\x71\xda\x98\x9c\xb5\x81\x7c\xa5\x3a\xd9\xa3\xb8\xd8\xbf\x9e\xc4\xd6\x3f\x01\x3b\x0d\x02\xc7\xfe\x0d\xb8\xf7\x46\x16\x2e\xed\x51\x96\xe1\xd7\xcf\xea\x4d\x37\xeb\x2e\x7d\x63\xfa\xd7\x61\xff\x6f\x76\xc8\xa8\xa8\x29\xca\x66\xef\xe7\x75\x16\x2f\xf7\xd7\x68\xf4\x65\xf1\x62\x28\xf3\xdd\xae\x17\xfc\x8b\x6e\x3f\xcc\xdd\x7e\x98\x11\x7a\xe1\xfe\xc2\xdc\xfd\xc5\x2a\x7a\xea\xae\x31\xac\x41\xe8\x67\x5f\x76\x8d\x61\x9b\xaf\x31\xd8\x5d\x60\x98\xc6\xee\x4c\x70\xa4\xc3\xc4\xcf\x25\xc2\xef\x9f\xf3\x81\xea\x7e\x91\x0f\xd4\xdf\xbf\xcd\x3f\x3e\xe7\x44\x9f\x13\x2c\x35\xa1\xbb\x10\xcf\xab\xf8\x5e\xab\xe8\x78\x62\xcc\xcd\x8f\x9d\x37\x87\x47\x37\x17\x57\x9f\x46\x6f\x2e\xae\x0c\x4a\x47\xab\xb2\x1d\x45\x67\xba\x8c\x63\xb5\x86\x06\x38\x66\xaf\x8b\x8a\x9b\xef\xbd\x2c\xef\x58\x61\x77\xac\x36\xb1\xd5\xa8\x7a\x6b\x64\xa1\x9a\x9b\x1c\xc8\x36\x10\x8e\xf5\xc7\xb3\xba\x67\x4d\x7d\x86\xc3\x15\x1c\xb4\x36\x39\xa1\x40\x0e\xc6\x3a\xe7\x20\xfa\xb8\x65\xf2\x8d\x80\x5a\xa3\x5c\xeb\xb3\xd0\x27\x5e\xd9\x4c\x4b\x0b\x0d\xa1\xb8\x95\xee\x62\x69\x43\xd0\x9e\x75\x05\x02\x12\xd6\xea\x2d\xd8\xc3\x7a\xf5\xd8\xa4\xe0\xc9\x72\x32\x41\xa1\xc5\xc4\xa1\xfc\xc1\xb2\x7b\x91\x24\xb2\x14\xa4\xae\x19\xb8\xe1\xc8\xb3\x64\x19\x4f\xae\xe8\x34\x5e\xa6\x33\x9b\x2e\x21\x77\x67\x21\x06\x3e\xcc\x60\x82\x25\x0b\xd5\xb5\x94\xac\xa2\xf8\x31\x7a\x52\xd2\x93\x11\xaf\xd4\x39\xda\x32\x6d\x94\x11\xf3\x75\x9c\x6a\x4c\x84\x7f\xac\x8c\x49\xec\x71\xb5\xa9\x4e\x04\xa0\xbf\x3d\x8b\x18\x47\xa1\x7b\x2d\xd4\x7a\xde\x89\x68\x8e\xd5\xf5\x23\xc1\x51\x28\xf1\xca\xec\xba\x1e\x83\x58\xdf\x6b\x76\x1b\x33\x7e\x67\x30\x85\xf1\x18\xb5\x26\xc9\x8a\x92\xa9\x89\xee\xce\x1e\x67\xaa\x99\x6d\xaa\x63\xcb\x8d\x9e\xc3\x0b\x02\xd7\x61\xf5\x75\x7d\x37\xab\x37\xe9\xd8\x04\x10\xe1\x12\x19\x7f\x90\xc6\x90\xf9\x4d\x58\x03\xb0\x1a\x84\x00\xad\x6c\x76\x8c\x32\x01\xf3\xb9\x57\x94\x83\x7b\xf3\x16\xa7\x9b\x2f\xb7\xbf\xa8\xd0\x4a\xee\xc2\x55\xb3\xec\x66\xa4\xe6\x91\x0d\x27\x20\x90\xd5\xde\xf3\xf0\x6d\x89\x76\x5b\x6a\x77\x65\xe7\x2b\x9c\x3b\x3f\x5b\xcf\x60\x28\xa4\x1d\x87\x43\x35\x3b\x9a\xac\x3f\x49\xf0\x44\x76\xb1\x5d\x9e\x65\xed\x53\xee\x16\x44\x51\xeb\x93\x06\x57\x1c\xd3\x50\xe2\x3d\x4f\x94\xfb\xd9\x39\xcb\x7d\x63\xc2\x40\xd4\xdf\xbf\x48\xd2\x6d\x2d\x3b\xb7\xd1\xf8\xfe\x76\x29\x38\x15\x9d\x84\x87\x01\x74\xb1\x01\xe2\xab\xbb\x4f\x7f\xf8\xe4\xcc\x6e\x74\x67\x07\x7d\x92\x03\x3a\xec\x8c\xac\x23\x78\x4e\xc6\xa1\xba\xda\x56\x2a\xa7\x7c\xf2\xe2\xaa\xd9\x34\xdc\x36\xd5\xb3\xf4\x83\xaa\x36\x44\xa0\x9c\xff\x45\xfe\x78\xd7\xe9\x9f\x7f\xe8\x8c\xae\xfa\x57\xfd\xf3\xe3\xfe\xd5\xe8\xf4\xe2\xe2\x72\x74\x7a\x72\x76\x72\x63\xe2\x23\xd4\xd8\xb0\xfe\xda\xcd\x32\xf6\x82\x26\x18\x9f\x2a\xe9\x95\x6e\xe9\xe5\x63\xfc\x6e\x8b\x71\xd3\x77\xf0\x15\xa6\x92\x8e\x25\x9d\x04\x4e\x67\xf7\x8b\xdc\xd9\x29\x0e\xe8\xf7\x84\x71\xd0\xb6\xe3\x9f\x25\xca\xa0\x45\x6f\x68\xb9\x73\xd7\x37\xd2\x92\xe3\x37\x52\x51\x50\x12\x3f\xd0\x96\x59\x88\xa6\x1a\x29\xca\x32\x35\x85\xb0\x50\xbf\x6e\x64\x6b\x56\x2d\x57\xb1\x49\x7f\x57\x6b\x93\xfe\xae\x10\x43\xfc\xdd\xb0\xce\x9a\xfd\x7d\xed\x97\xdf\xfb\xd6\xec\xef\x87\xbd\x59\x67\x1c\x33\xca\xe5\xeb\x25\x8b\x27\x54\x68\xa6\x35\x52\x3b\xc8\x30\xc9\x91\xf0\x53\x96\x4b\x9b\x3a\x91\xd1\xc7\x2b\x7a\xc7\x52\x29\x9e\xac\xec\x3c\x52\x8b\xc4\x38\x9d\xbc\x49\xc4\xf1\xc5\x99\x15\x78\x47\x3e\xf7\xf4\xea\x84\x10\x1e\xfd\xb3\x90\x23\x79\x77\xcf\x61\x3c\x5e\xd9\x75\xbd\x82\xf2\xf9\xe7\x74\x9e\x3c\xd0\xc9\x55\xb1\x96\x5b\x3d\x04\xc2\x36\xf1\x23\x25\x58\xf2\xc9\x05\x9c\x3c\xa0\x41\xaf\x0a\xa9\xac\xc0\xae\xd8\x34\x34\x84\x7a\x78\x79\x79\x7a\x72\x74\x78\x73\x72\x71\x3e\xba\xe9\x9f\x5d\x9e\x1e\xde\xf4\x47\x1f\xaf\x0e\x2f\x2f\xfb\x57\x5e\x12\x98\x82\x75\x68\x21\xf1\xaa\x28\x4e\x15\x05\xa4\x0c\x80\x4c\xe8\x63\xd8\x10\x89\xf5\x17\xac\xb3\xdc\xca\xe9\xac\x2e\x06\x87\x35\x19\xf4\x8c\x35\x74\xc2\x1e\x82\x4c\x9b\x38\x6b\x2e\xd4\x76\x82\x3d\xe7\xea\xcd\x32\xbb\x6c\x90\xd9\x65\x49\x66\x67\x2f\xf0\xb1\x96\xaa\xd8\xb3\x6a\x6e\x59\xaf\x91\x2b\x6a\xdd\xca\x85\xd8\x04\x7c\xb0\x0a\x51\xa8\x08\x62\x3a\xe6\xb2\x88\x2c\xf4\x24\x43\xaa\x05\x46\xcc\x0a\xb9\x0f\xf3\x17\x28\x73\x92\xe5\x48\x93\xdd\x31\x05\x86\xa5\x7b\x09\x47\xfc\x78\x29\xc4\x13\x0a\x19\x32\xf8\x44\xba\xdc\x4d\x52\x7b\x77\x82\x1c\xf3\xf2\xc5\x95\x0a\x5b\x69\xa5\x60\x83\x4d\xc0\x64\xf7\x92\x86\x26\xb7\xfe\x90\x9a\x8f\xd5\xfa\xee\x43\xce\x40\xfa\xb8\xf5\x41\x86\x96\x53\x50\xfe\x50\xc3\x33\x30\xc7\x02\xb3\xe2\x1e\xb5\x23\xd0\x8c\x5b\xed\xe3\x50\x47\x6c\x5b\xb9\xa2\x12\x40\x54\x7f\x3a\xc1\x17\x8a\x0b\xd1\xe7\x32\x32\x69\x71\xb0\x55\xe5\x5e\x03\x39\xd4\xf2\xc7\x92\xd7\x56\x35\xa1\x31\x95\x74\xab\xe6\xc3\x6a\xf5\x43\xdd\x21\xc5\x9c\x4a\xfa\xa7\xd2\x8d\xce\xb0\x44\x0d\x12\x6f\x5c\xcd\x69\xc4\x97\x0b\x35\x15\xea\x56\x6c\x25\xd7\x12\x4f\x6d\xb7\x69\x41\xbb\x54\x76\xf7\x56\xed\x17\x6b\x2a\xf3\xb2\xed\x12\x4f\x46\xf6\xf4\x96\xc4\x63\xcd\x0e\x20\x15\x7e\xb9\x78\xa9\xdd\xdd\x7d\x4b\x2b\x72\x20\x86\x2d\xae\xc5\xbb\x90\x02\x4e\x8a\x77\x48\x3b\x11\x46\xe0\x3d\x08\x85\xaf\x15\xef\x4a\x5d\xb1\x3e\x65\xa3\xaa\x44\x37\x02\x47\xf3\xc3\x38\x06\x96\x1f\x22\x7b\x0f\x79\x9d\x2c\xf9\x24\xad\x63\x4d\x83\x3b\x97\x85\x7e\xa5\xed\xa5\x36\x5d\x90\xec\x14\x7e\x2b\x71\x9b\x89\x54\x9e\x27\x13\xc5\x8e\xdc\xdf\x21\xc2\xea\x58\x32\x8f\xed\x9f\xa1\x1e\xcc\xb8\x81\xf5\x94\xe0\xdb\x29\x7f\x80\x34\x5c\xfa\xcc\x59\x50\x01\x72\x49\x1a\xa2\x52\x14\xb0\xbe\x57\x79\xbb\xa1\x3a\xa2\xe2\x8a\xb4\x1c\x74\x1e\xf8\xac\x0b\x67\xab\x30\x49\xf6\xf1\x27\x69\x41\xc7\x10\x2e\x6f\xb5\xd4\x93\x68\xc3\x72\xcb\x69\x23\xa4\x4e\x89\x32\xd4\x66\x77\xc0\xb9\xde\x79\x8c\x99\xba\x24\x4d\x92\x95\x28\x0a\xca\xce\x48\xa7\x0b\xbc\xcc\x0b\x0c\x4c\x81\xb9\x84\x8f\x0c\x94\x5a\xe4\x59\xb3\x52\x12\x15\x6f\x6d\xad\xe4\x47\x42\xdb\xed\xed\x74\xbd\x0e\x23\x7b\x45\xeb\x94\x6f\x68\x24\xc5\x95\x2f\xb5\x47\xb8\x58\xf2\x13\x5f\xe8\x47\x61\x84\x8d\xf6\x27\x50\x9c\x91\xad\xd7\x29\xca\xb2\x1a\xc9\x25\xee\x1c\xbd\xbf\xba\xea\xeb\xb8\x1d\x17\x0b\xe2\xae\x05\xde\x9d\x40\xdf\xc0\xd8\x7a\x6d\x07\xfe\x23\xd5\x2e\x0d\xfb\x36\xe1\xb8\xd9\x68\x4b\x75\x76\x27\x0b\xb8\x13\xe6\xb7\x84\x25\x6a\xb9\x1d\x36\x55\x97\x04\x87\x55\x5e\xd8\xb0\xed\xf6\x5b\x69\x23\x2a\x65\x13\x05\x90\xa2\xb8\xbb\x5d\x2f\x7b\xd9\xcd\x5a\x95\xc9\xba\x06\x6d\x79\x7b\x4f\xe7\x15\x2a\x13\x5b\x88\x30\x25\xdb\x5d\x37\x0d\xd4\x6d\xf3\xe7\xe7\x0e\xe7\x20\xec\xb0\x97\x0a\x97\x31\x0b\xfe\xaf\x5e\xd8\x99\x45\xcd\xa2\x63\x06\x1b\xb7\xc8\x48\x48\xed\x2d\xc6\xa7\xf6\x3a\x08\x64\x3a\x90\xde\x85\x24\xab\x6e\x01\x0b\x8c\xda\x2d\x4b\xbb\xb4\x7e\x61\xaa\x47\x9b\xdf\xb1\xc2\xe5\xc2\x16\xbd\xe0\x63\x6a\x75\x92\x81\x9f\x9c\x44\xb8\x3a\x74\xdd\xe6\xd6\xd5\x04\x0a\xe1\x73\xdf\x7a\x22\x5a\xaf\x2b\x4b\xa3\x4f\xdf\xea\x22\x5a\x32\xab\x1b\x85\x5d\x17\x73\x07\x34\xe0\xcb\x1b\xb8\x92\x81\xa8\xd0\xeb\x48\x05\xf9\x55\xeb\xef\x7e\xfb\xab\x8e\x8c\xcf\x7a\xdc\xbe\x24\xba\xbd\xa3\xb8\x1f\xed\x14\xc4\x1c\x5a\x14\x0f\xf0\xf6\x1e\xa6\x1d\x2b\xef\x54\x52\xfd\xd6\x9d\x1d\x15\x54\x80\xc3\xf1\x98\xa6\x10\xfe\xff\xdf\x5a\xb1\xa1\x3f\xfa\xef\x2d\x96\x02\x56\x40\x14\xc7\xc9\x23\x9d\x6c\x31\xbe\xc5\x13\xbe\xcb\x72\xb5\xf0\x96\x67\xb8\x4a\xb7\xc2\x74\x39\x9e\x6d\x45\xe9\xd6\x9b\x28\x95\xaf\x93\x44\xa2\x4e\xa0\x75\xc0\xbf\x42\x7c\xf2\x09\xa7\x42\xba\x99\xfe\x4d\xcf\xf4\x4f\xff\xf7\xcc\x74\xf7\x4b\x67\xda\x83\x0e\xa8\x06\xbe\x15\x26\xc6\xcd\xa8\x9b\x9e\x9f\xf4\xf4\x50\x41\x56\x06\x2c\x52\x54\x2f\x1f\xbe\xe2\x99\x16\x8c\x3d\x15\x2b\x8f\xc9\x0e\x25\xb2\x0c\x0b\xf1\xd7\x8c\x37\x1a\x7c\x43\x7e\x99\x5f\xf9\xe6\x1b\x9e\xee\x5d\x73\xf0\xec\x4b\x2f\x76\x26\xe0\x94\x8b\x2f\x8b\xb9\x7e\xc6\xac\xf8\x85\x31\xd7\x7b\xcf\xdb\x1b\x98\xa8\x77\xa4\x66\xc2\xb8\x3a\x0b\x1c\x35\xae\xd2\x3f\x18\x96\xfd\xfc\xb5\x98\x8b\x0c\xf3\x0d\x1e\xb1\x45\xaf\xd7\x82\x3b\x65\xab\xea\x14\xc9\x84\xf1\x84\x5c\x59\xd7\x58\x13\xac\xad\x6e\x95\x4f\x0b\xb5\xc0\x9e\x73\x1b\x24\x5a\x04\x5d\x67\xa3\xd1\xcd\x4b\x4b\x51\xf6\x94\x8c\x8a\x9e\x72\xba\x32\x9c\x12\xeb\x80\x19\xae\xc6\x7a\x41\x3d\xcf\x46\xd5\x85\xc8\xc9\x58\x8e\x2a\xf5\x73\x6c\x13\xe1\xf7\xd2\xac\x29\x1e\x3b\x8f\x54\xd4\x45\xfd\xcb\xfd\xaf\xa1\x44\x5f\x18\xa2\xbd\xc1\xe1\x03\x72\xf6\x0a\xaf\xa9\xfd\x3c\x75\xa8\xb0\x49\x2a\x1d\x34\xe5\xa6\x20\xee\xb2\x29\x5f\x55\x06\x5b\x4b\x08\x84\x53\xa3\x20\xa0\xd1\xfd\x59\xb4\xc0\x4b\x07\xb4\x7c\x07\x2e\x1b\x9a\xa0\x2e\xa6\xb9\x0a\x3a\x16\x05\x93\x4c\x0a\x9e\x46\x86\x3f\x78\xe0\x43\x02\x88\xdc\xdd\x12\xe9\xbe\xd6\x88\xca\x7d\x90\x17\x53\x01\x0e\x90\xd2\x79\xfd\xa6\x26\x4b\x3a\x6a\x49\xb2\x14\x6a\x22\xfd\xc0\xf3\x58\x84\xab\xa9\x49\xc0\xdb\xc0\xf7\x23\x01\x3c\xd8\xe6\xf0\x53\xfb\xd4\xe4\x87\xf5\x12\x12\x24\x82\x44\x1d\x33\x3e\x9b\x66\x8f\xa5\x36\xbd\x6a\x25\xe9\x85\x9e\xe3\xca\x3a\xe6\x29\x67\x5d\xaa\x91\xa7\x05\xcd\x50\x86\x10\x4e\xc4\x17\xe5\x5e\xd4\xb9\x35\xf5\x81\x30\x15\x24\x11\x78\x26\xc8\x1f\x75\xa8\xe7\xb7\x9d\x38\x19\x1b\xfe\x60\xd5\xc4\x08\x4f\xc4\x33\x76\x4e\xa3\x73\x16\x9b\xe1\xc2\x36\x79\xd1\x7b\xb7\x7c\x5b\x99\xfd\x43\x5d\x24\x15\x6f\x30\x47\x16\x40\xa5\xa6\x5e\xae\xad\x2d\x51\xae\x39\xe4\xf6\x0e\xde\x78\x78\x7c\x61\x4b\x6c\x1a\xd6\xb5\xd2\x29\x1c\x17\x35\x48\xc8\x22\xef\x84\x05\x23\xb5\x8d\x3a\xb6\x60\xce\xa8\x1a\x10\x5c\x66\x1c\x40\xb2\xc2\xe9\xc5\xca\xa7\x97\x89\xcf\xd0\x71\xd1\x1b\x4c\x9a\x6e\xb8\x7e\x79\x83\x0f\x64\x2b\xa9\xe2\xf4\x3c\x57\x8d\xfd\xa2\x54\x91\x63\xa3\x0d\x9a\xbd\x8d\x75\xba\x8f\xdf\xc1\xf8\x4b\x55\x5f\x46\x42\xb2\x28\x7e\x79\x75\xe6\x03\x53\x0d\x58\xbc\x16\x5f\x78\xd6\xef\xfd\xa5\xb3\x7e\xef\x8b\x7d\x0b\x72\x4e\x38\x17\x8d\x51\x26\x9d\x28\x7d\xe2\xe3\x53\x36\xa5\x47\x4f\xe3\x18\x5a\x53\xd7\xb1\x34\x67\x90\x0f\x1b\x3e\x9e\x38\x26\x0e\x9b\xf6\x49\x34\xeb\xfa\xff\x1e\xe9\x81\xd5\x49\x0f\xac\xfe\x4c\x36\xaa\x3c\xac\xbe\x99\xd0\x98\xde\x29\xd9\x3a\x21\xc2\x8b\x57\x88\x94\x8c\xcb\x49\xe2\x82\x45\x6d\xfc\xba\x99\x7b\x4b\x43\x61\xf9\x4c\xd7\x5e\xdd\x98\x17\x74\xe6\x77\x22\x64\x38\x35\x0e\x28\xac\xf1\xc8\x84\xb3\xd2\x75\xa8\xea\xaa\x1e\x89\xbb\xb4\x65\x42\x26\x14\xad\x00\x58\x73\xcb\x8f\x7b\xb0\x48\xae\x79\xff\x34\xfe\x3f\x7b\xc6\x5f\xd4\x35\x5a\xf4\x49\x9d\x0b\x48\x81\xec\xe1\x1e\xe5\x15\x0b\x5b\xed\x06\x87\xc2\x17\x54\xfb\xbe\xd4\x5f\x5d\xad\xe2\x86\x09\x97\x05\x58\xf9\xe7\xeb\x95\xde\x77\x79\x45\x8d\x02\x50\x43\x2d\x66\xdd\x7e\xb5\x32\x58\xa9\x56\x5b\xed\x66\x31\x45\xed\x0d\xd7\x00\x3a\x30\x9e\x31\x9b\xac\x3c\x35\x1d\xcb\xa1\xb9\x8b\xa6\x35\x81\x57\xde\x16\x97\xc5\x9d\x97\xbf\xc9\x6c\x57\x1b\x3d\x6f\x14\x41\x75\x64\x74\x67\x56\xb2\xde\xdb\x19\xad\x9a\xcd\x61\xe5\x80\xc6\x1a\xcc\xa1\x86\x6b\x52\x39\xce\x51\x5f\x93\x10\xbe\x6b\x14\x07\xac\x0b\x9b\xf1\x7d\xd0\x53\xf4\x22\x28\x9c\xe2\x86\x21\xbc\xce\x41\x69\xb3\x13\x86\x23\x15\x59\xf1\x9d\xd3\x46\x00\x57\x81\xc7\x19\xec\x71\x70\x5b\xbe\x26\xbb\x51\x3c\xef\xa4\xe9\xc6\x29\xea\x9d\x2a\xed\x55\xfb\x49\x38\x8b\xa7\x37\xf5\xde\x14\x57\xdd\x34\x5f\xe6\x8a\xe9\x79\x60\x16\xe4\x04\x6c\x7b\x06\xf7\xf7\xd1\x5f\x3a\xf1\xbe\x14\x51\xac\x7c\xe2\xed\x3d\x8f\x28\xf6\xf8\x8f\x1f\x40\x5f\xe0\x14\xea\xc5\x01\xfc\x55\xed\xc2\x4b\xee\xc7\x23\x51\x77\x3b\x2d\xe1\x62\xd5\xdc\x15\x5d\x89\x59\xe7\xfc\xfd\xe9\x69\x6e\x01\xfd\xc2\x1b\xe2\x97\x00\x73\x21\xdc\x17\x95\x80\xf0\x7a\x3c\xad\x47\x91\xe1\xcf\x4d\xb2\x64\x29\xfe\xb1\x8b\x3c\xa1\xe7\x5a\xf8\x4b\x90\x17\x04\xf1\x1c\x0a\x83\x70\xee\x8c\x36\x39\x62\x84\x41\x14\xd1\xc0\x6e\xfc\xc7\xbd\x83\x0a\xec\x83\xfa\x7e\xcf\x85\xd2\x6a\xa4\x87\x1e\x40\x90\xa8\x0f\x5e\xd5\x7f\xf0\xaa\xfc\x01\xcb\x85\xac\x0b\x4f\xc8\x2a\xdc\xda\x68\x65\x88\x0e\xe0\x20\xd8\x75\x05\x7b\xc1\x2e\x24\xc7\x9f\x32\x1a\x4f\x82\xbc\xda\xc3\x67\xe7\xc0\xd6\xe6\x81\x90\x60\x4e\xc4\x40\x78\x48\x4a\x8c\x94\x06\x5c\x9c\xa1\xf2\x60\x39\xea\x31\xad\x6d\x67\x16\x0c\x83\xa1\x5e\xe0\x75\xeb\xbe\x20\x52\xe6\xcf\x6f\x44\x45\x9b\x82\xa3\x56\x01\x6c\x36\x0f\x5e\x1f\xbc\x1d\xa2\x84\x08\x1c\x11\xf5\xa7\x6f\x30\xb3\x25\x5a\x79\xd4\x30\x49\x0f\xc2\x84\x48\x1c\xa9\xa1\x40\x4d\xa9\x92\x4c\xcc\x9f\x03\x31\x44\x3d\xbf\x0d\x92\xb6\xdb\x61\x42\xa8\xaa\xdc\x5d\xf0\x6b\x8d\x29\x65\xb7\x24\xac\xfd\x73\x75\xe0\x30\xdc\x05\xbb\xfb\xe2\x07\xea\xb0\x38\x3d\x57\x25\x31\x34\xcc\x7c\x65\xf2\xd9\x27\x8a\x17\x69\x95\xe9\x2d\x8d\x7b\xc1\xbf\x6d\x76\xff\x71\x9c\xa4\x4b\x41\x77\x75\x77\x83\x2f\x4a\xc3\xaa\xfd\x41\xcc\x97\x98\x55\x95\x04\x5b\x4b\x70\xe9\x32\x2c\xd1\xb8\x08\x0e\x12\x1c\x0d\x3b\xe3\x84\x8f\x23\x19\xf2\x50\x22\x84\x32\x03\xfb\x7d\x56\x2b\x09\xd5\x29\x3b\x34\x72\xf5\x7a\x5d\x97\x15\xc4\x29\x1f\x20\x7b\x5f\x10\xf4\x1c\x6c\x8a\xb7\x85\x8f\x8a\x57\x0f\x6f\x27\x58\xaa\x9d\x47\x8b\xf0\x4c\x20\xed\x94\x16\x04\x9e\x3b\xe1\x95\xa8\x05\x95\xde\xd2\x7e\xc3\x97\x82\x5c\x09\x1f\x68\xed\xf7\x67\x77\x4a\x4d\x82\x59\xcf\xa6\xe6\x41\x86\x00\x3c\x9a\x12\xe4\x8d\x63\x35\xc2\x49\x95\x4c\x22\x8f\x4c\x12\x84\x53\xd2\xdd\x4f\x7f\x48\xf6\xd3\x9d\x1d\x14\x0d\x52\x9f\x4c\x52\x6b\xe7\x6f\xd8\x04\x07\xea\x7f\x66\xf5\x04\x66\x76\xd1\x22\xc5\x65\x40\x87\x6e\x75\x31\x78\x70\x29\xdc\x9a\x32\x1c\x15\xf0\xe3\x8f\x45\x05\x50\x95\x10\xb9\x5e\x03\x0c\x92\x3c\x28\x9f\x0d\xbd\x4a\x40\x3e\x60\x1f\x94\xf0\x8d\x0e\x96\x20\xd0\x15\x20\xbf\xa8\x85\xaf\x03\xd8\x8e\x66\x83\x80\xbb\xbf\xed\x37\xc0\x0e\xa5\xc9\x52\x8c\xbd\xdc\x0c\x16\x61\x28\x7f\x22\x30\x07\xc7\x06\x0f\x64\x48\xe3\xc8\xe4\x45\xca\xe3\x72\xe2\x15\x94\x7b\x71\xae\x8f\x5c\x10\xd8\x0c\x06\x86\x19\xc0\x81\x7d\x89\xcd\x28\xcf\x71\x00\xd5\xb2\xf4\x28\xe1\xa9\x84\x9c\x19\xb0\x66\xc2\x3b\x54\xe8\xe3\x96\x84\x2f\x36\xa6\x53\xdb\x0c\xb4\x63\x27\xcc\xca\xc0\xc5\x09\xb3\xee\x11\x76\x7a\xac\x8b\x44\x61\xe2\x4b\xc7\xc4\x16\xd7\x80\xf3\xa1\x24\xc7\x26\x1e\xa6\xb4\x76\x98\x57\xd2\x0d\xc1\xa4\x19\x73\x77\x69\xcd\x8c\xcc\x9c\xaf\x2c\xca\xb5\xcb\x19\xe6\x83\x4f\xc3\x02\x51\xe5\xca\xe8\xba\xa6\x73\x8d\x7b\xe3\x30\x6c\xda\xc1\x5f\xb4\x04\x78\xb2\x89\x66\x37\xe7\x5e\x74\xb4\x7b\x2b\x22\x3e\x9e\xbd\x3c\x95\x0c\x6b\xa6\x2b\x96\x57\x36\x44\x7a\xfb\x4f\x88\x54\x5f\x68\x6c\x26\xc5\x12\x34\x36\x13\x7f\x49\x9a\xc7\x1a\xfa\xf3\x80\xd3\xbc\x70\xe2\x56\x1d\x51\x32\x74\xe0\xb4\x14\x07\xa2\xc7\x0d\x49\x32\x1d\xac\xfd\x05\x70\x4f\x6a\x14\x39\x92\x53\x8e\xf9\xa4\x93\x06\x17\x10\x9f\xe0\x89\x9b\x83\x22\x15\x51\x4d\x45\xd4\xcb\x6c\x0b\xeb\xe8\x16\xed\x54\x14\xd5\x32\x39\xe3\xdf\x0f\x25\x19\x27\x3c\x4d\x62\x8a\x3a\x71\x72\x67\xaf\x0c\xde\x86\xd3\x81\x84\xa2\x84\xaa\x74\xf6\xfe\x26\x40\xf8\xcf\xf2\xe3\xeb\x8b\xf7\x57\x47\xfd\xc0\x6b\xfb\x9d\xd0\xbe\x73\x79\x9b\x2e\x37\x1f\x5c\x65\x7d\xd5\xd2\x75\xc7\xcb\xc8\x1c\x56\x31\x5a\x6c\x97\x74\x9f\x5e\x0b\x32\x08\xa2\x58\x06\x38\x00\xe8\xcf\x00\x07\x73\x2a\xa3\x00\x07\x63\x29\xe2\x60\x88\xdf\x0b\xf2\xed\xff\x1a\xc7\x6c\x7c\xbf\x9e\x27\xcb\x94\xae\x65\xb2\x1c\xcf\xbe\x6d\x2d\x3a\x87\xd0\x37\x83\x24\xed\x9c\x0f\xe9\x44\x3f\x4f\xa1\x87\x1f\xeb\x9c\x11\xa9\x11\xa6\x4e\x5c\xbf\x9f\xad\x6c\xa0\xe1\xa3\x32\xfc\xc7\x33\x15\x1a\x1f\xc5\x97\x54\x98\xe1\x0f\xcf\xa8\x16\x74\x7c\x0d\x24\x9d\x5f\xf9\x5e\x07\xf6\xe2\x61\x5b\x75\x2a\x06\xf8\x0d\x7e\xc4\xc2\x7f\x02\x26\x48\x5e\x52\x3d\xd8\xeb\x76\xbe\xa6\x24\x31\x4c\x6c\xbe\x88\xd9\x98\xc9\x1b\x0d\x62\x62\xa2\x27\x27\xc9\x9c\x18\xd7\x16\xfa\x40\x39\x40\x3a\xe9\x1d\x70\x47\x65\xdf\x3e\x09\xbd\x64\x52\xcb\x67\xcc\x23\xee\xa3\x26\x97\x18\xd7\x57\x6d\x8d\x4c\x78\x8e\x09\xb4\x5e\x07\x40\x14\x81\x31\x7d\x1c\xe6\x03\xad\x95\x7a\x72\x11\xa6\x34\x2f\x16\xda\xc2\xf8\x17\xd5\xbf\x05\x6f\x23\xaa\x88\xa0\xf4\x7e\x20\x87\xe5\x23\x84\x9a\x1e\x99\xd9\xab\x67\x1a\xc5\x29\xb6\x07\x98\x1b\x6f\x3e\x4d\x00\x69\xa2\x85\xee\x00\x1d\x48\x63\x96\x35\xbf\x6d\xd3\x3d\x9f\x6b\x18\x2b\x4a\x1d\x9d\x82\x12\x41\x90\x12\xad\xd8\x83\xd1\xb5\x0e\x09\x3d\xa1\xa1\xdb\xe5\xed\x6d\x4c\x53\xc0\x9e\x34\x8f\x16\x02\x56\xff\x58\xa7\x0b\x0a\x20\xaf\xa5\x7e\x63\x5c\x60\x7e\xa6\x4f\x29\xd8\x8c\x2d\x6d\xe8\x31\x02\xe4\x0e\x40\x80\xb2\xf2\xdd\xac\x78\x61\x76\x90\x4b\xfa\xef\xf7\xa2\x23\x69\x2a\x43\x6d\xbc\xb5\xb6\x4d\xf0\x17\x61\xe9\xb5\x9a\x47\x7a\xa4\x08\x41\xfb\x14\x93\x20\xc8\x4c\x16\x31\x23\xde\x45\xfc\x29\x40\x3f\x92\xae\x4d\x8c\xdf\x2d\xa5\x20\x78\x2d\xfc\x1c\x04\x6c\x1a\xd2\xc1\x6b\x31\x10\xc3\x9d\xe0\x67\xfa\x14\x0c\xdb\x6d\x8d\x97\xeb\x2a\x84\x97\xc8\xa5\xd9\x77\xf7\xcb\x2c\xa4\xd8\x59\xc1\xd1\x7a\xad\xe1\x4e\x9d\xba\x5e\x27\x7a\xf0\xa7\x4e\x4d\xc8\x7a\x4d\x3b\xa9\x4c\x16\x97\x22\x59\x44\x77\x91\xa6\x13\x1c\x76\xb1\xbe\xe8\x78\x78\x2b\x8e\x7a\x8a\xc4\x0e\x52\xfc\x0a\xee\x62\x14\x9b\xbb\x59\x0a\xee\x02\x5a\xbf\xdb\xaa\xb9\xd0\x80\x24\x5e\xf7\xfc\x20\xe4\x5a\x01\x28\xd4\x69\x40\xf9\xe4\xe0\x2b\xae\x6d\xdc\xbf\xb6\xe9\x6a\xcc\x79\x94\xe2\x41\x2e\xd4\x53\x75\x4b\xeb\xfd\xe5\xfa\x55\x8d\xb6\x76\x8a\x32\xf4\xd7\xab\x14\x85\xfa\xfe\x7a\x75\xfe\x8d\x47\xd5\x98\x21\x1c\xa3\x06\x2f\xec\x3f\x84\x75\x45\xd4\x71\x6a\x4d\xc7\x83\x09\x3e\x6b\x8a\x28\x7d\xc6\xeb\x03\x47\x78\x09\x41\x8f\xb9\x71\x69\x4c\x62\xbd\xfd\xf1\x94\xc4\xfe\x95\x72\x46\x62\xc5\xca\x5b\x6c\x1a\x4e\x1d\xb2\x27\x02\xac\xeb\xa9\xd1\x4c\x85\x4b\xfd\xe7\x1e\x42\x83\xb7\x43\x14\x91\xa5\x56\x70\x2c\x7d\x34\x99\x56\x44\x96\xb9\x1b\xae\xd9\x80\x13\x32\x18\xe2\x05\x79\xb5\xbf\xf8\xc1\x56\xbe\xbf\xd8\xd9\x41\x13\xed\x5a\x0c\xb5\x2e\x0c\xfa\xd3\x5c\xcb\x28\xcb\x25\x9b\xa0\xb0\x60\xca\xfa\xa0\xae\x16\x73\x1c\xe1\x09\x1e\xe3\x29\x4e\x30\xc3\x33\x98\x60\x03\x79\x53\x6f\xd0\x48\xe6\x20\x44\x99\x03\x55\xc3\x7e\xd8\x33\xfc\xa3\x76\xfa\x2f\x06\xa4\x08\x1c\x28\xe1\x77\xb7\xb8\xd6\x41\x35\x72\xa5\xae\xe0\x6e\xb0\xc3\x8d\x58\xb9\xc1\x3b\xa5\xa8\x3e\xdb\x43\x2d\x39\x78\x3b\x84\x70\x75\xef\x60\xcf\x05\x28\x4c\xbd\x83\x98\x96\x4e\x61\x77\x08\x35\x18\x5a\xc0\xc6\x22\x5f\x04\x83\xe1\x10\x2f\xdf\xbe\xc8\x6c\x60\x2d\xe4\x1b\xad\x06\x46\xc7\x5f\x28\xdb\xd3\xb8\x7e\x3d\xea\x6b\xf2\x8b\x1a\x56\x7e\xf0\xab\xe8\xfd\x26\x32\xfc\xf3\xcb\x8c\x32\x25\x79\xc9\xf5\xc2\xf4\x6a\x6e\xcd\xff\xc2\x33\xd1\xfc\x0d\xc6\x18\x5b\xaf\x3b\x6b\xb5\x99\xd4\x54\xe2\x5c\x08\x0a\x02\xba\xde\xf2\xdf\xfc\x8d\x5b\xde\xc6\x87\xf8\x1b\xdd\x37\x30\x9b\xaf\xf2\xee\x14\x97\x0e\x73\xd7\x39\x7f\xbb\xfd\x0c\xda\x97\x7c\xc8\x0c\xf3\x67\x89\x2d\xb7\xea\x6d\xde\x95\x76\x37\x16\xd0\x78\xf2\x96\x08\x75\x33\xdb\xe2\xb6\x22\xd7\x7d\x86\x8b\xf3\xb9\x71\xab\x39\xb8\xa3\x82\x71\xdb\xd5\x6e\x6f\x65\xae\x72\x5e\xf0\x0a\x7b\xf9\xbe\xc1\xbf\xfc\x3d\x0b\x5a\x49\x1f\xf4\x62\x6b\x47\xcd\x8c\xd7\xe7\x07\xd2\x4f\x5f\x66\x1a\x81\xa1\xfd\xaa\xbd\xdc\xbe\x11\xf8\x37\xfd\xd7\x2f\x02\xff\xa4\x95\x95\x98\x16\xf3\x4e\x89\x27\x17\xc0\xd2\x94\x7d\x6f\xc2\x1e\x02\xd0\x41\x7b\x01\xa2\x93\x09\x70\xb4\x53\x75\x75\xe2\x54\x84\x46\xe4\xaf\x51\x0c\x8b\x9d\x9d\x0c\xaf\x12\x63\x5c\x43\xb8\x46\x01\x09\x55\x1d\xe8\x9b\x00\xfc\x6d\xab\x43\xbd\x90\x56\xba\xa5\x0b\xc0\x3f\x01\x42\x1d\xc6\x99\x2c\x7c\x84\xb7\xbb\x78\xbb\x8b\x20\x59\x52\xba\x88\xe4\x78\xa6\x5f\xd3\xda\x47\x10\x19\x94\x8d\xd5\xb3\x90\x7b\x99\xea\xd5\x34\x4a\xfe\x2c\xb0\x84\x0e\x8d\x31\x6e\x0d\x2e\xb4\xbe\x74\x17\x54\xbc\x4b\xe6\x97\x2f\x50\xb9\x6c\x22\x31\xbd\xfe\x6f\x44\x32\x2f\xdf\x9a\x0a\xb1\x46\x66\xa7\x58\x1f\xd3\x5c\x77\x2c\x3a\x6a\xba\xc1\x1a\xb5\x50\x17\xfc\x87\x82\xc7\x4a\x8b\x5b\xb0\x7f\x55\xaa\xdd\x0e\xdd\xdf\xf6\x22\x5a\x1a\x14\xc2\xcc\x7e\x61\xaa\xb3\x1f\x99\x9f\xce\x3c\x5c\xfe\x2e\xb1\xdf\x99\xa6\xed\x77\xe6\xa7\xbd\xd5\x56\xbe\xe3\xeb\x35\x5b\xaf\x93\x03\x5a\x42\x90\x00\x2a\xe2\xd8\x34\xdb\x63\xd8\x54\xd4\x4b\xb2\x5e\xa1\xa4\x81\x1b\x32\x31\x52\x8d\xd6\xaf\x56\x64\x3b\xe8\x8e\x6b\xdb\xc5\xfc\xfc\x8e\xea\x3b\x69\xbc\x7c\xca\x95\x7b\xf6\xad\xd4\x56\xbe\x4c\xa9\xb8\x14\xc9\x03\x9b\xd0\x89\xf5\x8d\xb2\xed\xd4\xbd\xb3\x97\xf9\xda\x26\x97\x44\x67\x29\xe0\xed\x36\x5f\xaf\xb7\xf7\x1c\xc4\x83\x5f\x5a\xc9\x81\x4b\xf4\x00\xd0\xaf\x66\xc6\x4d\xd5\x8e\x98\x9c\x9a\x7e\x1b\xaa\x6a\xb7\xd5\x33\x30\x65\xe3\x18\x53\x84\xf5\x37\xe1\x4f\x02\x4b\x94\xe9\x44\x8f\xc5\x9a\xd2\x06\x51\xd9\xd4\xe3\x8e\x8c\xe2\x74\xe2\x42\x25\xd8\x5f\x35\x7b\xd2\x0a\x4e\xba\x98\x73\xd2\xcd\xb5\x5c\x85\x14\x5b\x7c\x67\x07\x53\x7e\x40\x4d\x10\x69\x91\x11\xe9\x42\x3d\x17\xd4\x0f\xd0\x54\x86\x4c\x36\x7c\xb2\xdd\x55\x57\xf5\x86\xb7\x9e\x41\x28\xf2\x3a\x22\x5c\x47\x2a\xec\xf0\x99\x5e\xd4\x96\xd7\x5d\xa8\x7b\x65\x32\xa2\x34\x72\x23\xc3\x8b\xae\xdf\x5f\x5e\x5e\x5c\xdd\x5c\x8f\xfa\x1f\xfa\xe7\x37\xa3\x8b\xcb\x9b\x93\x8b\xf3\x6b\x42\xcd\xae\x2e\x66\x18\xdd\xe8\x20\xdb\x20\xb4\xb8\xc8\xb7\x62\x7a\xa5\xb2\xb7\x69\x41\xae\xf1\x05\x14\xa9\x6a\x7a\x4e\x26\x31\x99\x80\xe8\x41\xf1\xb8\xec\xd1\x4d\x62\x4a\x9e\x90\x36\xa4\x25\xf6\x19\x22\xac\x16\xcd\x91\xa3\x27\x9a\x63\x9a\x13\x22\x75\x54\x88\x69\x69\xe3\xed\x35\x89\x2c\x75\x59\x8d\x0a\x92\x52\xde\x92\xb5\x3e\x41\x5b\x4a\x5c\x32\xad\xb5\x6a\xba\x5b\x6c\xbf\xdd\x0e\x75\x92\x4a\x93\x6d\xf9\x2f\x8f\xe5\xa5\x42\x12\xe8\xf7\x8d\x33\x8d\x92\x3a\x51\x48\xf1\x60\x75\x4f\x9f\x7a\xc1\x38\x59\xaa\xf5\x4f\x03\x7c\x47\x65\xd5\x5f\x78\x15\x4d\x26\x69\x4f\x70\xac\xf7\x53\xda\xe3\x3c\xcb\xb2\x21\x2a\xa5\xa5\x5a\xd6\x2e\x3b\x38\x35\x0c\xe8\xa0\x3b\x04\xbb\x6c\xb5\x6f\xc1\xbf\x83\x1d\x9a\x21\x4c\x07\x7b\x43\x2f\xdf\x71\x5c\xb8\x4e\x7b\xb5\x6e\x13\x22\xda\x6d\xb7\x52\x07\x21\xb3\xfe\x32\x46\x11\x4e\x11\x66\x1d\xc6\x1f\x92\x7b\x7a\x2d\x23\xc9\xc6\xaf\xe3\x64\x7c\x1f\x0a\x17\x89\x88\x50\xaf\x58\x20\x14\x08\xe1\x6d\x9d\x6d\x72\xcc\x9f\xc1\x00\xfc\xdf\x98\x20\xb1\x36\x58\x67\xca\xff\xcf\xb9\x33\xbd\x04\x9f\x9f\xf2\x3b\xc6\x69\x35\x11\x80\xea\x0e\x1b\x9b\xcc\xbd\xff\x7b\x12\x13\x8e\x79\x43\x6c\x4e\xde\x5b\x9d\x97\x19\xe2\xe8\x00\xb8\xbb\x0f\xbd\xb7\x13\x6e\xe0\xf4\x51\x4b\x74\x6e\x93\x44\x9a\xdb\x39\x58\x0b\x88\xe8\x98\x98\x8e\x37\x89\x92\x97\x5d\x32\xc8\xe2\x40\xd7\xeb\xb0\x8b\xaf\x3b\x77\x8a\xf7\x83\xb3\xab\x2d\xf6\x46\x7f\x0c\xd1\x30\x85\x2f\xc0\x1d\x65\x9e\x4c\x68\x7c\x45\xa7\x79\xd6\x06\x42\x48\x84\x18\x59\xe9\xe9\xed\x09\xec\xb5\xc8\xf3\xa8\x21\x84\x21\x09\xa5\x0e\xe8\xe1\x08\xcb\xe8\xae\x57\xba\xa8\x14\xc3\xc8\xad\x98\xb9\x24\x91\x0f\x7f\xda\x7a\xbe\xa9\x15\x74\xb2\x97\x66\x75\x6d\x42\x65\xd8\x0e\xa3\x17\xd9\x3f\x1f\x7a\x4b\x07\x12\xc7\xbe\x3a\x6d\x64\x45\xbf\xf2\xa2\xe8\x21\x3d\x9e\x8d\xb9\x25\xd1\xaa\xfb\x4c\x60\x53\x3e\x17\x70\x24\xd8\x11\xda\x5b\x2d\x8c\x11\xd2\x0b\x35\x60\xcf\xfa\x3e\x65\xf9\x17\x65\xec\x59\x88\x4a\x0a\xe0\x6d\x80\x19\xf2\x9c\x64\x67\xe5\x70\x87\x82\xda\x66\xca\xeb\x3c\x3b\xdd\x32\xc8\xcc\x73\xa4\x99\x54\xb0\x21\xcb\x89\xf0\xe6\xea\x5c\x08\xb0\x5c\xaf\x07\x43\x2c\x86\x39\x2b\x30\x4c\x2b\x77\x78\x35\x30\x8b\x03\x9d\x2f\xcf\x02\x33\x1b\x74\x66\xc3\x59\x17\x1b\xae\x5f\x2e\x7e\x54\x5d\xa8\x60\x4d\x73\x1b\xda\x15\x24\x89\xb7\xea\x1e\x18\x88\x55\x23\x79\x18\x77\x10\x94\x0d\x02\x7e\x0e\x7a\x06\xcf\x8e\x4d\x2a\xcb\x4d\x02\x92\x4e\x54\x53\xaf\x72\x02\x80\x17\xe2\xf7\xc6\x2a\x9b\xbc\xb5\x97\x25\x4b\x4b\xc5\x13\x86\x1f\x94\x7a\x49\x88\xff\xe8\x98\x4e\x7b\x96\x19\xcd\xa2\xd4\x44\xf9\x6a\x33\x45\x60\xf6\x61\xb0\xc3\xd1\x41\x58\x1e\x6c\x69\xa4\x3e\x16\x8e\xda\x90\x33\x1e\x72\x2c\x1c\x46\x80\x29\x66\x7c\x0d\xc3\xea\x2c\xd5\x4e\xa6\x49\xb7\x56\x42\x41\xf4\x7c\x44\x6b\xa0\x72\x8c\xf0\x3f\x7f\x4e\xca\xf5\xf1\x10\x69\x7e\xa9\x8e\x3b\xc7\x4c\xc8\xa7\x92\x0b\xc4\xc6\x24\xa3\x0d\x10\x8d\x80\x4f\x64\xee\x42\x1a\x1f\xa0\xb2\xda\xbe\x25\xb4\x04\xe6\xd8\x90\xa7\xc8\x2f\x66\xfe\x56\x9b\x90\x71\x6f\x0c\xc6\xeb\x60\xa2\xc6\x61\x83\xfb\xf1\xc3\xf3\x3a\x08\x8d\xd4\x02\x55\x7b\xa4\xaf\x1b\x39\x37\xfb\xc1\x53\x3f\x94\x1c\x40\xcc\xe6\xd1\x59\x06\xbf\x96\xe6\x8b\x5d\xc8\xd9\x52\x9e\x71\x8e\x1e\xe8\x3f\x7b\x6e\xf8\xb6\x66\x57\x44\xda\x22\x72\x50\x1d\x81\xad\x73\xb8\x01\x5c\xb3\xbc\x72\x30\x81\x4f\x2f\x9d\x40\x3b\x71\xf7\xf4\xc9\x9f\x2e\xfa\x9c\xb6\xa6\xd0\x19\x59\x83\x12\x6a\x62\xc6\x9e\x9f\xbf\x8a\xbd\xba\xdd\xa6\x03\xdb\xa7\x61\x39\xab\xeb\xdd\xb3\xec\xd8\xe6\x81\xfe\x9b\xf8\xf1\xed\xcb\xb6\xa6\x47\x83\x93\x3c\xe4\x2e\xe7\x15\x8a\x55\xe8\xed\x9b\x3f\x7b\xd1\x44\x37\x4c\x60\xdd\xa1\xeb\xa5\xed\xcb\xc9\xab\x72\x51\x15\x90\xa0\x5b\x1d\xeb\x85\x82\xa2\xf6\x46\x6b\xe5\xd2\x0a\xd9\x72\x7d\x65\x59\x09\xc5\x92\xb1\xc1\xc5\xe5\x90\x55\x0b\xe6\xa3\x67\x13\x72\x17\x10\xaa\x73\x09\x49\x78\x22\x42\x96\x85\xc5\x99\x84\x21\x34\x58\xe1\x49\xe1\xea\xad\x46\x98\x27\x45\x72\xa3\x75\x76\xf0\xad\x3c\xe2\x06\xac\xe6\x79\xd2\x1b\x5f\x46\x81\x57\x5e\x7f\x2c\x6c\x99\x5b\x34\x17\xc2\x5c\x5a\xe0\x56\x69\x6d\x1d\xce\xb0\xe7\x35\xeb\xdd\xd2\x65\xe5\xe0\x79\x02\xcb\x33\xaa\x10\x8e\xdc\xb0\xe1\x37\x1c\x24\x5e\xf6\xe3\xca\x3e\xe1\x39\x4c\x6c\x53\xbc\x67\x01\x2f\x8e\x77\x04\x9d\x52\x21\xf2\x58\x59\x3b\x14\x06\x90\x5e\x2e\xc2\x07\xc4\x28\x36\x0e\x19\x1e\xb8\x84\xc6\x83\x61\x4f\xe2\x25\x0f\x05\xca\xb7\xd4\x50\xed\x29\x3f\xf7\x72\x6d\xd6\xa4\xe4\x0b\xbb\x99\x34\x76\x33\x6a\xb7\xc3\xbe\x54\x5d\x48\xaa\x9d\x8d\xf0\xc0\x75\x10\x5c\x4b\x55\xd7\x54\x0f\xfa\xbc\x00\xc6\xfa\xd9\xdb\x61\x10\xef\xee\x76\x66\xbb\x0d\x18\xb0\x3a\x14\xbd\xdd\x0e\xac\xb1\x26\xd0\x84\xf6\xb4\xa0\x07\xd2\x5e\x7e\x8c\x4e\x2c\x1f\xfb\xb5\x1f\x1c\x96\x40\xb0\xba\x17\xc5\xde\x53\x77\x7d\x2f\xc2\xa1\x98\x1c\x4f\xbb\x61\xe6\x6a\x36\x7a\xe0\xe7\x91\xb3\x2f\x60\x4f\xa6\x8b\x68\x4c\x95\x3c\x4b\x3b\x23\xfa\x79\x41\x05\x53\xf7\xdb\x28\x3e\x8b\xc6\x22\x49\x49\x5f\x67\x8c\x3e\xe4\x64\xc5\xa6\xbd\xba\xab\x9f\xaf\xe8\xb5\x23\x3f\xb1\x0a\x92\x50\x18\x93\xbb\xd0\x3a\x60\xfd\xef\x2b\x84\x32\xac\x0d\xc4\x75\x55\x82\x18\xa8\x6d\xfb\xac\x21\xef\x98\x5e\x51\xca\xc7\x34\xad\xe6\x98\x35\xae\xe1\xaf\xd4\x5d\x2c\x8c\x7c\x9b\x3e\xe6\x25\xef\x24\x5e\xf4\x4e\xea\x25\x00\x9f\x3c\x23\xa6\x1c\xb0\xcb\x00\xb5\xdb\xa6\x9c\xf9\x8d\x27\x24\xc5\x13\x97\xb3\xac\xdd\x0e\x17\x75\xbb\x70\xd2\xa0\xa8\xc9\xd3\x68\x66\x28\x77\x2e\xc9\x10\x9e\xb5\xdb\xe1\xbc\x86\x6f\xcf\xca\x07\xa0\x54\xcc\xc9\x6b\x9e\x0e\xba\x43\x2f\x23\x35\xf8\xc8\xab\x3b\x0e\xcd\x10\x5e\xb4\xdb\xf3\x83\x9a\x4e\xcc\xc3\x05\xb8\xb4\xf4\x16\xeb\xf5\x7c\xbd\xbe\x37\x10\x25\x33\x3c\xc1\x0b\x3c\xcf\xa1\x62\x6a\xec\x52\xd1\xe0\xed\xf0\xe0\x46\x84\x11\x8e\xb0\xfa\x1b\x4f\xc1\xeb\xc4\x73\x55\x5d\x22\xc8\xe3\xe5\x3d\x89\x90\xfa\x22\xc9\xaf\xc9\xee\xaf\xfc\xea\x3c\x45\x95\x94\xdc\x9e\xce\xaa\x2a\x67\xea\x88\x16\x2f\x70\xd7\x99\x7a\x50\x31\xe0\x22\x57\xdb\x64\x99\xdf\x07\x1c\xe1\x29\x42\x83\x9f\x21\x3d\x89\x01\xb0\x14\x8a\x36\x85\x88\x9e\x4a\xa4\x59\x17\x15\xe5\xe8\x31\xc3\x7a\x1d\xeb\xbf\x51\x35\x27\x34\x3c\x12\x58\xe6\x9f\xa0\xac\xa8\x24\xf4\x3f\x38\x17\x79\xe0\x6c\xd9\x46\x83\xab\x96\x15\x94\xe1\x59\x94\xce\x9a\x3a\x5c\xc2\x6c\xc9\x70\x9c\xdc\x6d\xec\xe8\x69\xb9\xa3\xf3\x65\xb9\xa3\xf9\x46\x2d\xf7\x4f\x9d\xb5\xa1\x20\x1c\xb5\xdb\x62\xf0\x46\x0c\xdd\x59\x6c\xbc\xff\x4b\xd9\x5d\x1d\x4d\xb3\xc1\x9f\x62\x48\x38\x66\x83\xb7\x43\xc2\x07\x9f\x86\x98\xa9\xcf\xd5\xca\xb0\x0c\x07\x7f\x2c\xa9\x78\xda\x5d\x80\x66\x32\xd8\xd8\xfb\x77\xe5\xde\x0b\x1a\x4d\x12\x1e\x97\x17\x54\xb3\xaf\xba\xed\xa9\x7a\xb2\x5e\xd3\xac\x66\xf6\x0b\x7a\xfb\x54\x53\xcb\x92\xdf\x26\x4b\x3e\xa9\xef\x54\x44\x9b\x97\xd2\xb3\xcf\x2f\x79\x4c\xd3\xf4\xaf\x32\xd8\x57\x8e\xd1\xa2\xcc\xe5\xdf\xdf\x38\x59\xd7\xe5\xc9\x0a\x76\x69\x34\x9e\xed\x32\xbe\xe1\xbb\xdf\xeb\x06\x03\xdf\x02\x90\xc9\x2e\x00\xa6\x6c\x6c\xf6\xa2\xda\x2c\x4f\xc4\x3c\x8a\xd9\x9f\xf4\x25\xdd\x3e\xac\x7e\x7f\x47\xe5\xae\x11\xdf\x77\x1f\x22\x11\xf4\x66\x9e\xa2\xf5\x43\x94\xab\x61\x6a\x27\x59\x43\x85\xd5\xd1\x33\x9c\x41\x5e\xb2\x3e\xad\x4b\x42\x07\x05\x08\x23\xf3\xd0\xa6\x73\xf1\x3a\xbb\x00\xbd\x01\x66\xd0\x47\x73\xf1\x68\xd8\x4b\xb4\xe3\xeb\xb0\x73\x6e\x2f\x48\x43\x1e\x4f\x48\x56\x1e\x77\x80\xc3\xba\xc0\x8a\x30\x50\xd7\xe7\x00\xf5\x6a\x86\x02\xd9\x3c\x38\x88\x95\x0f\x3c\xe4\xfe\xe5\x1b\x0b\x3d\x8d\x51\x9a\x52\x21\x77\xad\xb7\xef\xae\x93\x38\x76\x67\x70\x7d\xda\xb5\xbc\x34\xe8\x7d\x16\x78\xca\xad\xdc\xd2\x3a\xe4\x9d\x69\x03\x82\x88\x59\xb4\xdf\x4b\x8b\x06\x0c\xe1\xfe\xb9\xcb\x93\x56\x67\xa7\x64\xa0\x1b\x32\x78\xdd\xc9\xed\xef\x37\x89\x06\x1f\x29\x00\x17\xe9\x78\x85\x25\x8b\xe5\x09\xd7\xf7\xbd\x94\x1c\xf2\x62\xdc\x37\x64\xac\x86\xaf\xdc\x17\xe3\xaa\xe0\x58\x57\x6a\x99\xca\x64\x6e\x1c\xe4\x6b\xde\x17\x1a\x78\xc7\x64\x6a\x41\x1c\x0b\x2f\xce\x58\x9a\x52\xf7\xaa\xae\x65\x45\xa6\xf6\xbd\x9e\xf5\xca\x4b\x2f\x5b\x49\xd2\xd1\xb2\xda\x7e\x58\x77\xe3\x63\x3c\x66\xdc\x24\xde\xbe\x8d\x93\xf1\x7d\xda\x02\x37\x95\x30\xb0\xb7\xe0\x3b\x08\xf1\x81\x47\x46\x4f\x39\xb1\x4f\x54\x57\x19\xbf\x0b\x47\x10\x42\x04\x45\xe0\x93\xd8\xfe\xb6\x05\x1e\x79\x9e\x54\x95\x93\xee\x3e\xff\xa1\xef\xb0\x48\xf9\xce\x0e\x0a\xbb\xb8\xcf\x07\x7c\x88\x20\xb1\x70\x86\x42\x89\xf2\xe1\x2b\x49\xde\x8c\xe4\x34\xfa\x13\xa2\xff\xd5\x23\x20\xd3\x89\xf1\x2f\x35\x28\x95\xa8\xd6\x64\x5b\x58\x75\xeb\x00\x95\x92\x95\x11\x31\x57\x46\xa9\x0b\x8a\xf5\x4f\x02\x83\x4e\xd7\xa4\x59\xa9\xff\xb4\x93\x70\x52\xf8\x2a\x55\x73\x5a\xf8\x70\xc3\x7d\xfc\xa5\xf8\x3a\x0f\x79\x4e\xa3\x66\x54\x9d\x56\xf1\x2a\x2b\xf4\xa5\x1a\x3e\xb2\xa0\x48\xa2\x0e\xd5\xc7\xec\x8d\xc6\x16\xcd\xb6\xb2\x11\x93\xdc\x7f\x6a\xd5\x99\x1b\xee\x54\x1e\xa0\xb9\xba\x1b\x5b\x3c\xd5\x26\x6a\xde\xd9\xc1\x5c\xc3\x5b\x43\x97\xeb\x4e\x5d\xbf\x57\x03\x3a\x7c\x06\x36\xe9\xd9\x91\x8c\x2a\x18\x4a\xad\xdc\x2c\x5d\x4c\xe2\x64\x06\xcd\x0b\x23\x62\x66\x44\xb5\xfb\x6f\x67\xc7\x45\x7b\x39\xf7\xb6\x17\xc3\x33\xd5\xcc\x71\x01\xa2\xe9\x59\x20\x25\x6f\xec\xa3\x2a\x7e\x52\xab\xa6\x2d\x4d\x21\xc5\x34\xe4\x75\x95\x96\x33\x81\x03\xbf\xb2\x88\x6c\xbe\x2a\x88\x1f\x84\x7c\x03\xef\x33\x58\x70\x1c\xa1\x9e\x30\xb1\x16\x14\x61\x4f\x91\x64\xc0\xfc\x2c\xb4\x96\xe8\x15\x98\x41\xb6\x0f\x09\xd2\x53\x97\x20\x3d\x81\x3c\x84\xc4\x89\x52\x09\xc2\x90\x02\x15\xc2\x31\x1b\x59\xec\xce\x4e\x96\xbb\xe7\x54\x78\xf3\xce\x8e\x5b\xee\x3c\x04\xa5\xce\x8d\xa1\xa4\x4f\x6a\x79\xf8\x64\xde\x29\x64\x73\x41\x55\x94\xb7\x0e\x56\xdb\x11\xaa\x01\xdf\xb6\xa9\x2a\xfc\x4a\xf4\x98\x00\x77\x1b\xe0\x70\x5f\xb6\x03\x8a\xe7\xdd\x80\x0e\x6b\x73\xd4\x6f\x89\x56\x0e\xd9\x04\x16\x12\xac\x83\xf0\xcd\x25\x29\x25\x17\x3c\x04\x8b\xe9\x32\xa6\xe0\x3a\x11\xa9\x1b\x34\x2b\x98\x67\xf5\x76\xe8\x05\x3b\x09\x4e\xd1\x7a\xdd\xf4\xd2\x99\x6f\xb4\xe2\xc2\x5d\x1d\x43\x4e\xd4\xd5\xd0\x6e\x43\xf0\xfe\x51\xd2\x9e\xfb\xa3\xc3\x52\x3d\x0c\x63\xd6\x3d\xa8\x1b\xf4\xd2\x99\x31\x2a\xd3\x2d\xac\xe7\xd5\x01\xa7\xb9\x88\x6c\xc2\x21\x0b\xe2\x47\x2f\xa4\x1d\x4e\x1f\x0d\x08\x7e\x74\x0b\xdb\x04\xb3\xfc\xab\x42\x69\x94\xf5\xec\x46\x1f\x3d\xbf\x37\x21\xd6\xa7\x50\x0c\xc1\x4d\x15\x66\x1d\x76\x52\xae\x4b\x85\x73\xcf\x94\x2a\xb0\x58\xc8\x73\x50\xc4\xf4\xa5\x3b\x81\x43\xef\xdd\x5a\xe8\x6f\x34\x6e\xff\x68\x23\xfb\xa9\xd2\x8a\x3b\xea\x0a\xd4\x92\xef\x4d\xee\x68\x84\x11\x5e\x58\x64\xab\xc4\xea\x05\x3b\x14\x15\x08\xcd\x61\x74\x7e\xe6\x21\xd3\xcb\x89\xc2\x22\x88\xd7\x5b\x01\xa9\xe4\x92\x9a\x63\xdc\x65\x57\xd7\xfb\x71\x04\x29\x97\x15\x19\xbe\x49\xc4\xb9\x55\x54\xd5\x29\xb5\xb1\x4b\xbd\xc4\x41\xde\x31\x51\x54\xbd\x9e\xcb\xdc\x03\x69\x9d\x39\x6c\x44\x8b\x1b\xc0\x77\x5e\x69\x8e\xa2\x7f\x76\x21\x45\xb3\x36\xf3\x4a\x4f\x2f\x26\x32\x6f\x72\x5f\x7c\xa2\xfb\x7b\xc8\x9f\x48\x8a\x13\xdb\xd5\xc8\xa7\x11\x57\x31\x0a\x39\x66\xf8\x82\x87\x02\x27\x08\x01\xc6\xbc\x86\xd0\x05\xaf\x82\x1c\xc8\x2c\xce\xed\x47\xcb\x83\xb4\xb7\x2c\xac\x60\x5c\xe1\x56\x63\xb2\x51\xc8\x05\xd6\x15\x17\xd7\x72\x6c\x2b\x19\x6b\x50\xca\xe7\x32\x1b\x02\xbc\x57\xa5\xfa\x00\x5f\x83\x73\x96\x06\x08\x28\x34\x90\xda\x04\x43\x6a\x0c\xed\xb6\xc9\x92\xe3\x32\xe3\x5c\x9c\x9f\x7e\x1a\xbd\x3d\x3d\x39\x3b\xeb\x5f\x8d\x8e\x2e\xce\x2e\x2f\xce\xfb\xe7\x37\xd7\xed\x76\x38\xd3\xee\xd0\x22\x4c\x91\x3d\x52\xb6\xa1\x8a\xfc\x6f\x43\x7b\x2b\x1d\xb1\x33\x16\xa1\x7d\xa2\x7a\x30\x69\xb7\x3d\x30\x50\x42\xc8\x44\x87\xe9\xad\x74\xcc\xce\xc4\x12\x7b\x6b\x46\x26\x4e\x79\x0b\x37\x2d\x29\xc2\x79\xc8\x11\x36\xb5\xe1\x54\x83\x02\xdc\x8a\x90\xe1\x25\x86\x57\xe9\x7a\xcd\xad\xc7\x4e\xd8\xc5\x8f\x9d\x85\x60\x0f\x91\x04\xe4\x96\x63\xc5\x46\x72\x2a\x37\x02\xdd\xcc\x0d\xe9\x9d\x54\xf5\xa8\x0a\xbc\xed\x56\xae\xe4\x77\x55\x89\x56\x98\xab\xf1\x4f\x43\xb4\xf9\x02\x03\x27\x4a\x8c\x67\x08\xcf\xea\x28\xf9\xcc\xba\x3b\x94\x2d\x29\x0d\xf7\x9d\x12\x5c\x6b\x53\x29\x23\x31\xd8\xab\xb5\x75\x61\xca\xef\x92\x56\xb6\x0e\x76\x4a\x02\x4b\x4d\x65\x5a\x96\x10\x08\x0b\x63\xb9\xbc\xe1\x64\xa5\x99\x74\xaf\x36\x24\xc3\x4b\x7d\xec\xb1\x9e\x7b\x75\xb8\x15\x39\x4e\x2e\x70\x64\xf8\x8c\x93\x37\xe1\x8a\x4d\x7a\xc1\x78\x36\xfd\x65\xfc\xee\xbf\xbe\x0b\x30\xdc\x97\x7a\xff\x5a\x05\xda\x63\x2a\x0d\x7a\x83\xa0\x3d\x31\x61\xa4\x43\x1c\xc0\x7d\x00\xf4\x8a\x41\x6f\x30\xd8\xfb\x1e\xef\x0d\x87\x18\x12\x6e\x3e\x44\x71\xd0\x9b\x46\x71\x4a\xb3\x7f\xe1\x39\x95\x51\x6f\x95\xf3\x84\x5e\xb0\x88\xc6\xf7\xd1\x1d\x4d\xbf\x35\x48\xb0\xbb\x96\xce\xd2\x6f\x2d\x2a\x4d\xcc\x6e\xbf\xb5\x32\x4b\x9a\x43\xc5\x76\x66\xb7\x69\x90\x65\x08\x1f\xb9\xfe\x9e\x7f\xfc\xed\xcf\xd3\xeb\x93\x93\xfa\xfe\x5a\x54\xdb\x00\x07\x37\xf4\xb3\x7c\x03\x18\x46\x38\xf8\xb7\x05\x66\x0e\x70\xd0\x8e\x20\x97\x72\x65\x40\xdf\x63\x7d\xdb\x1b\x0c\x5e\xfd\x17\xf6\xf6\x0c\x1e\x78\xe0\x48\xda\x30\x3a\xc4\x35\x65\x3c\xd0\x24\x53\xca\x58\x51\x57\xd5\x86\xd8\x14\xda\xf9\x0e\x77\xf1\x20\xc8\xb1\x78\x83\x61\xd3\x37\xff\x81\x55\xe9\x3d\x3c\x18\x0e\xf1\x60\xb0\xf7\x1d\xfe\x1e\xfe\x08\xfe\x6d\x74\xf9\xfe\x10\x87\x79\xd5\x1a\x0b\x3a\x50\x65\x5f\x7d\x87\xbf\x53\x9f\xab\xff\x70\x00\x9a\x45\x0a\xce\x9b\xbd\xc1\x30\x6b\x68\xef\xd5\x3f\xd5\x5e\xe5\xd1\x1e\x7e\x35\xcc\xec\xac\xfd\x23\x34\x05\xba\x3a\x47\x4f\x57\x8e\x9e\xa6\xd3\xc3\xd3\xff\x78\x77\x1c\xd7\xd2\x53\x95\xea\xf1\xe0\xd5\x2b\x6c\x95\x09\x43\x0c\x1d\xfc\xa7\xba\xac\x5b\x71\x7d\xbe\xe4\x24\xd8\x95\xc9\x62\x37\xa6\x0f\x34\x0e\xf0\xef\x9c\x68\xe5\x17\x3e\xde\xe8\x22\xe5\x82\xed\x46\x1e\xaf\xc8\xf3\x7a\x1a\xa8\x7e\xe3\xeb\xa0\x61\xf1\x2b\xd0\x81\x2d\xef\x02\x29\xe8\x14\x38\xf8\x9c\x87\x2b\xe3\xc4\xd1\x5b\xa9\x8e\x58\xe5\x18\xd6\x95\xf6\x56\x50\x59\x4f\x60\xc6\x65\x62\xad\x70\xc6\x1a\xfe\x3b\xd7\x36\xf2\xcb\x82\x11\xdc\xe6\x99\x74\x16\xf2\x2c\x2b\xe6\x9b\x15\x74\xda\x63\xee\xcb\xbc\xae\x7a\x9b\xba\xe9\x4f\x46\x0d\xee\x75\x9d\x83\x46\xad\x43\x2c\xfb\xeb\x79\x1b\x18\x06\x87\xe2\xb2\x17\xa9\xc8\x23\xa2\x0e\xac\xf0\x9d\x83\xba\xe0\x0a\x1a\x07\x16\x80\x73\x54\x29\x08\x10\xad\x19\xa0\x7f\xd3\x8e\xa0\xc9\x82\x72\x1d\xcf\xe9\x8f\xa7\x50\x5b\xee\x0f\x53\xe9\x94\x27\xcb\xf9\x34\x02\xd2\x9c\x25\x10\x9c\x78\xde\x02\xad\x82\x77\x8b\xc0\x1c\xcb\x01\xeb\x5c\x7c\x3c\xef\x5f\x0d\x71\x62\x74\x9d\x1b\xb3\x0a\x16\xd2\xb6\x99\xd3\xac\x25\x49\x85\x4e\xd5\x11\x0c\xc9\xbc\x2a\xae\x71\xf4\xc0\x85\x84\x81\xb5\xe4\x9a\xc6\x54\x09\x12\x21\x45\x3d\xaa\x43\xf4\x6d\x06\x18\x54\x4c\xff\x92\x8f\x29\x28\xa7\x38\xb4\xf9\x61\x1a\x13\xac\x99\x4c\xbd\x17\x9e\xfb\x59\xc5\xc9\x4b\xd0\xa9\x03\x8d\x69\x8a\x24\x77\x49\x5b\xbc\xf4\x8a\xc7\x3c\x43\x98\x86\x41\x95\x3f\x28\x66\xf2\x2d\xc8\xfa\xea\xa8\xa1\x9f\x17\x89\x90\xa9\x62\xc2\xf5\x25\x15\x1b\x01\x90\x96\x21\x2e\x8a\x3a\xc1\x32\xa5\x5b\x6a\x22\xc7\x32\x68\x19\xd3\x14\x38\x59\xd0\x4b\x63\x36\x0e\x29\xf6\xfc\xfa\x57\x94\x2f\xe7\x54\x80\x27\xf5\x76\xb7\xde\xcd\x7f\x4b\x76\xec\x07\x8a\x4b\x35\xd6\xaa\x81\x57\xce\x00\x3b\xe6\x85\xf5\xe6\x9f\x6c\xac\xf9\x8b\xea\x7c\xb6\xb6\xf9\x97\xd4\x36\x7f\xae\xb6\x05\xa5\xf7\x5f\xd4\x3f\xfb\xc1\xc6\x5a\x53\x2a\xbf\xa8\x52\x53\x7e\x63\x9d\xce\x87\xe6\xc5\xb5\xba\x2f\x32\x40\x4d\x68\xa6\x5c\x47\x8f\x05\xe2\xd5\xf1\xf7\xb7\xd1\xad\x3a\xcc\x6a\x3e\x5d\x4a\x16\x7b\x44\x0e\x29\x46\x4a\x14\xad\x0f\xb7\x02\x55\x53\x3b\x58\x32\xc5\xd4\xcd\x26\x99\x61\xea\x91\x53\x61\xcf\x5a\xeb\xc2\x2c\xa4\xa8\x65\x74\x35\x80\x40\x97\xe7\xad\x52\x3c\xd3\xd0\x38\xa1\xb0\xe8\x84\x02\x25\x11\x9a\xcf\x82\x1f\x6e\xc8\x70\x62\x4d\xbf\x39\x0b\xf4\x2a\xb1\x29\xf0\xe1\xe4\x70\xb8\x4e\x4b\xae\x97\x65\x12\x28\xce\x90\x57\x1c\x99\x28\xc3\x3d\xbc\x7c\xc6\x7c\x34\x8a\x4d\xc0\x58\xfa\x81\x0a\x48\x16\xe6\x32\xc4\xea\xe3\x89\x4e\xfa\x7c\x92\xe7\x8d\x9d\xc6\x91\x54\xe5\x27\xb6\xb8\xcd\xc3\x65\x9c\x21\xfd\xc4\xcf\xa3\x09\x4d\xc7\x82\x2d\x64\x22\xd2\xe2\x8b\xc7\x48\x8e\x67\x8c\xdf\x15\x9f\xce\xd9\x67\xc6\xd3\x72\x15\x8b\xd2\x93\xf1\x2c\x62\xfc\xa3\xaa\x80\x96\xab\x85\x57\xa5\x67\x32\xba\xab\x3c\x28\x15\x99\xc6\xea\x91\x4d\x52\x0e\xbe\x41\x56\xda\x81\xb5\xf0\xbc\x51\x3b\xe3\x84\x5b\xe7\xff\xdc\x33\xd5\x7b\x98\xaf\x1e\x2e\xcd\xaf\xa9\x25\xb3\xb7\xbe\xca\x49\x07\x29\x42\x4e\xd4\xe5\x34\x8a\xd9\x9f\xa5\xd4\x18\x5e\x4f\xd7\xe4\xbf\x32\x2c\x3a\x4b\xfe\xb2\xe2\xff\x4b\x17\x57\x57\xbb\xfa\xb2\xfe\xfd\x72\x34\x8b\xd2\x37\x71\x74\x17\xfe\x17\xd2\x1f\xb9\xe4\x26\x95\x5d\xe0\x7f\xa6\xa7\xc9\x84\xad\xea\x19\x34\xf6\x01\x33\x9d\x90\x86\x5c\xd4\x9d\x6b\x5e\x70\xa0\x6a\xe2\xd8\xa6\x4c\x0b\x91\x0d\x95\xd6\xbb\xd3\x7b\xd1\x7a\xf0\x53\x97\x47\x13\xc5\x76\x8e\x60\xe9\xd5\x3b\xe7\xd4\xe5\x21\x66\x43\x66\x49\x35\x9c\x6b\xe8\xce\xb1\xcb\x10\xfa\xec\x3c\xec\xc1\x3c\xa4\x54\x6e\xfa\xb2\xb0\x38\x7b\x35\x2d\xd1\xe6\x1c\x71\xb6\xa1\x57\xb5\x0d\x15\x3f\x2c\xb4\xf3\x4a\xb7\x53\x98\x9b\x67\x5b\xf9\xde\xb6\xd2\xf8\x59\xa1\x8d\xef\x55\x69\xfb\x71\xcd\xea\x87\x5e\xe9\x36\x45\x76\x99\x47\x77\x54\x5e\x08\x8d\xe6\x7f\xf1\xc8\xcf\xa2\x5a\xff\x2f\xf5\xed\x80\x0e\x4d\xca\xc2\x01\x1d\x96\x7d\x5f\x96\x71\x0c\xfe\x29\xe5\xfa\xae\xeb\xbd\x3a\xab\xf5\x01\x78\x1d\x95\xba\x8e\x29\xe3\x93\x13\xcb\xd3\xf6\x8a\x30\x8a\x85\x34\xad\xfb\x96\xa5\xef\x3b\x29\x77\x83\xcd\x40\x12\x9b\xf3\x34\xab\x36\xf3\xaa\xa4\x39\xca\x81\xaa\xfc\x86\x84\x4b\xfc\x2a\xca\x0d\xe5\xbe\xa7\x03\x39\x2c\x69\x93\x5d\x74\x93\x80\x80\xfd\x86\x2e\x7c\x57\x09\xc7\xcd\x0d\xd1\x7e\x27\xf8\x7e\xde\x14\x2d\x37\x65\x14\xd7\xac\xdc\x89\xdc\xe7\x74\x20\x8a\x6f\x22\xdb\xbd\x28\xcb\x38\xe1\xcd\xfd\x2b\x12\xc7\x5f\x9c\xa4\x8a\x2d\x6e\xf3\x44\xcd\xa2\xf4\x84\xbb\x9e\x14\xc9\xea\xeb\x7a\xd2\x6e\xf3\xa2\x0e\x70\xbb\xdb\xf2\x5a\x75\x30\x11\x58\x74\x1e\x55\xa3\xc7\xea\x78\x2b\x2f\x50\xbe\x38\x35\x3b\x29\x0c\xe0\x4c\x84\x6c\xa9\xb0\x52\xee\x70\x62\xed\x76\xa8\x9f\xd5\x6e\x24\xac\x56\x8f\x08\xd5\xb4\x12\x72\x2a\x2d\x17\x0d\xa7\x45\x1a\xb2\x8d\x62\xdf\x82\x9a\xdb\x44\x0e\xba\x3d\xa8\x57\x5d\xbd\x8a\xd5\xe6\xc9\x2a\xec\x14\xd5\x54\xff\x2a\xaf\x1e\xb6\xea\x34\x11\xfd\x68\x3c\x3b\xe1\x35\x7d\x74\x4b\x82\x1b\xc9\x57\x0b\x0d\x4d\x14\x4c\xcb\x14\x6c\x6b\x8c\xb6\x18\xdf\x12\xc4\x1b\x95\x61\x1f\x3d\x81\x13\xa4\x33\x71\x45\x68\xbd\x0e\xb5\xa7\x47\x84\x70\x32\x88\x86\x3f\x76\xdb\x6d\xc0\x3b\x2e\x53\xb9\x5a\x5e\x13\x55\x54\x9b\x67\xbd\x71\x75\x95\x7c\x12\xc0\x3c\xd8\xb3\x6d\x63\x15\xaa\x78\xa9\xbd\x06\x9c\x40\x28\xbb\xc9\x00\x0b\xb2\x12\xf5\x91\x6a\xb5\xa1\xb5\xd0\x93\x4d\x1d\xf1\xfb\x01\xae\x2a\x70\x28\x97\x13\x65\xfb\x3d\xaa\x9b\x80\xd8\x7d\x19\xe4\x21\x2d\x6a\x71\xa4\x62\xed\x8a\xbc\x07\x43\x84\x25\x38\x41\xe4\x5d\x7b\x59\x7b\x79\xdd\x05\x2a\x70\x31\x1e\xb6\x56\x3b\x8a\xa3\x82\xb0\xd9\x54\x6b\x41\x24\xdd\x38\xc3\x45\xe1\x75\xe3\x5c\x37\x34\x5d\x9a\xf5\x42\x85\x95\x9e\x3f\xd3\xe5\xb4\x14\xe8\xb2\x2a\x88\xd1\xb2\xd4\xbf\x96\xc7\x1f\x34\xa1\x7b\x2e\x23\x02\x95\x9b\x0e\xc1\x80\xb0\x78\xba\x49\xbc\x3c\x75\xd5\x11\x36\x0f\xad\x78\x60\x87\x81\xe9\x97\xde\x1b\xc0\x3d\x3f\xda\x6b\x44\x91\x47\x34\x93\x96\xbd\x77\x04\x48\x91\x91\xb4\xbc\xb0\xa6\x9e\xe2\x6c\x55\xd8\x95\xab\x08\xd7\xf9\x34\x1c\x74\x7b\x50\x37\x78\x80\x7d\x66\xbc\xaa\xf1\xa9\x4a\x34\x61\x60\xee\x3f\x01\x02\xfe\xa2\x59\xe1\x2c\x4a\xab\x35\x94\x25\xbb\xe2\x19\x96\x57\x54\x64\xa7\x67\xfa\x76\x55\x2b\xf7\xe0\xc6\x13\xce\xde\xca\x5a\xfe\x19\x17\x7a\x01\x7a\xd2\xb1\x49\x89\xb9\x6d\x2b\xf4\xd5\x97\x1a\xf2\x54\x28\xd6\xa9\xfd\xe8\x84\xba\xfa\x0b\x04\x99\x00\x4b\x47\xb2\x39\x14\xf3\x6b\x63\x71\x65\xc3\xca\xbd\xd2\xcf\x6b\xef\x3e\x32\x9e\x37\x08\x39\x87\x91\xfc\xd4\xab\xab\x7a\xc3\x62\xdb\x13\xd7\x7d\xe6\xaf\xb8\x24\x84\x44\x2e\xfa\x50\x93\xf6\x3c\x79\x68\x18\x80\x59\xfa\xf2\x10\x43\x0a\x29\xbb\xdc\x3a\x35\x7d\xfc\xa2\xc5\xf2\x3a\xfa\xd5\x2b\x06\xea\x7f\x58\x33\x9e\xaf\x19\x47\x58\xe8\x88\x20\xaa\x03\x7d\x6b\x16\x2f\x9a\x4c\x6e\x92\x53\x77\xdf\xad\x8b\x55\xd0\xcc\x63\x99\xce\x1c\x4e\x8d\x79\x79\xb0\xd7\xeb\x82\x17\xb0\x9d\xc3\x37\x22\x99\x37\xd5\xd5\x5c\x8f\xbe\x45\xf9\x2f\x6a\x00\x0e\xb5\x9c\x50\xce\x8a\xf0\xe3\xf7\x9e\x8d\x3c\xcf\x80\xf0\xfd\xb0\xdd\xf6\x7f\xe1\x84\xb8\x65\x84\x73\xc7\xf6\x11\x32\xba\x2d\xc2\x04\xeb\x2e\x2a\xde\x08\x8e\x15\x51\xbb\x1d\xfd\x50\x55\xa9\xb4\xdb\x61\x62\xd3\xcc\x47\x78\x0f\xd5\x68\x5d\x76\x77\x71\x44\x76\xf7\x10\x06\xc0\xda\x08\x25\xda\x35\x6a\x05\xe0\x2d\x39\x3a\xac\xc4\x73\x2a\x67\xc9\xa4\x27\xf0\x3d\xe3\x13\xc8\xa2\xc4\xc7\x3d\x96\x15\x12\xf9\x2b\x61\xa5\xf5\x4a\xfb\x22\xbe\xda\x26\x24\xed\xa8\xc2\x07\x85\x3e\xf4\x42\xfd\x94\x70\x00\x0f\xe7\x63\xc2\x50\x41\x98\xa9\x59\x90\x32\xd3\x2e\xe9\x87\x54\x4b\x26\x1f\xb9\x3e\x46\x1c\x24\x98\x48\x64\xd2\x6e\xc3\x14\x55\x87\xbe\x5e\xa7\x3b\x3b\x7a\xdc\xb5\x53\x57\xa3\xa2\xea\x56\x14\x2e\x20\x26\x14\x9f\xc1\x3e\xb3\x5d\xac\x1d\x8d\x35\xee\x57\x46\xf2\x43\x6a\x35\x7f\xb4\xe1\x0c\xf4\x8c\xec\xd5\x36\x42\x54\x92\x38\x0a\x47\x6f\xb1\x97\xa8\x3c\x12\x99\xaf\xa4\x28\x17\x6e\x55\xe7\x02\x82\x9e\x84\x5d\xd9\x6e\x0d\x69\xd5\x91\x1b\xe9\x96\x9d\x94\xa5\xef\xa3\x6c\x5d\x42\x07\x7c\xb8\x0f\x0b\xb3\x80\x8c\x1f\x40\x8c\x90\x23\x00\x70\xaf\x59\x47\x13\x23\x82\x1e\x2c\x39\x40\xc0\x87\xac\xae\xbd\x9d\x1d\x94\x65\x59\x83\x5a\x31\xcd\x0a\x64\x55\x58\xc0\xb9\x39\x7c\xeb\xd8\x43\x8e\xa7\x0f\x1f\x3e\xbb\x0e\x02\x15\x87\x2c\x6a\x86\x2c\x06\x7c\xd8\x32\x23\xdd\x86\xa4\x32\x70\xa7\x80\xad\xd2\x6e\xef\xb9\xbf\xd7\xeb\xb0\x24\xf4\x01\x05\xea\x5d\x5b\x99\x21\x80\x10\xd4\x1f\xa2\xa2\x7c\x94\xdc\xa6\x54\x3c\x50\x01\x80\x5e\xcd\x38\x7e\x2f\xa0\xb1\x22\x30\xb6\xf4\x71\xb1\xed\x2d\x53\x5d\xdc\xe1\x90\xf0\x86\xc3\xcd\x70\x60\x99\xb9\x1e\xb8\xe7\x39\x36\x9e\x45\xfc\x8e\x02\xe6\x4c\xae\x19\x6d\xb7\x43\x0a\xe3\xa5\x7a\xbc\x3c\x1f\x94\x06\x85\x92\x0d\xa0\x50\x7a\x1b\x55\x20\xa1\xbc\x8d\x36\xca\x77\x5a\xde\x9e\xdd\x6b\x71\x51\x46\x2d\x28\xa3\x75\xa8\x38\x81\x5c\x32\xea\xac\x4e\xb4\x77\xf8\xc4\x13\x48\x69\x0e\x30\x65\x14\xf4\x4b\xd8\xe3\x71\x7d\x82\x67\x3c\xf6\xc3\x29\xf2\x20\xd7\xa9\x96\x4f\xc6\xb9\xc0\xe1\x5e\xcd\xbc\xf0\x57\xeb\x05\x5b\x7f\xf7\xf0\x70\xcc\xe3\x90\x22\xff\x80\xf7\x3f\x08\x6d\x45\x02\xe5\x9e\x46\x9a\x9f\x1a\xcc\x2a\xf3\x8b\x08\x84\x65\x4b\x55\x26\x8a\x89\xa2\xb5\xe3\x57\x4d\x20\xa5\xe9\x9b\x6f\xd3\xc8\x15\xb8\x79\x3f\x75\x1f\xd5\x44\x2c\x3d\x9f\xde\xa9\x76\x37\x16\x1e\xf4\xcb\x22\x3f\x74\xed\xd8\x18\xa1\x2e\xbb\xd7\x3e\xfb\x91\x74\xf7\xd9\xee\xae\xbd\x9e\xd3\x01\x83\xeb\x79\xa2\x69\x4e\xef\xa3\xc4\xec\x1c\x02\x83\x4b\xcc\xf6\x51\x94\xe9\x69\x76\x8c\x23\x63\x66\x8c\x2d\x93\x4d\xe6\xa5\xf8\x05\x66\xa5\x45\x12\x3f\x4d\x59\x1c\x37\x1b\x4d\xcb\x86\xa6\x17\x58\xa4\xc4\x92\xc7\x49\xb2\x50\x0f\xac\x03\x87\x0b\xd4\xad\xfd\xde\xb3\x6b\xe7\xef\xa9\x10\x89\xb0\xfd\xfe\xf6\x41\x33\x4c\xbf\x37\x0b\x41\xc7\x91\xa4\x93\xdd\x29\x8d\xe4\x52\xd0\xfa\x31\x80\xaf\x45\x8d\x79\x2c\x4f\x51\x81\x63\xc0\xdf\x9e\x55\x0c\x66\x36\xf9\x37\x49\x24\xa6\x10\xc3\x6a\x7e\xd7\x7a\xf5\xbf\x4e\x92\x98\x46\x3c\xbc\xb5\xee\xfb\x54\x43\x6a\x8d\x67\x54\x5d\xd5\xe7\xde\xef\xc9\x87\x28\x5e\xc2\xd3\x07\x63\x8b\x73\xc5\x9e\x30\xed\x44\x31\x8b\x6a\xb5\x4b\xaf\x29\x44\xc3\xc4\xe0\x47\xbf\x84\xac\x98\x1d\x37\x0f\xd6\x66\x59\x23\x09\x16\xfc\x37\xb2\x26\x4b\xa7\xc4\xab\x71\xc2\xa7\xec\x6e\xe9\x2c\x9c\xbe\xbd\x73\x0f\xa7\x85\x40\x55\xb4\x62\x21\xc2\x52\x6a\x07\x0a\xc0\x88\x6f\xb0\x88\xaa\x72\xbf\x18\xb0\x0f\x81\xb2\x0c\xfa\xad\xae\x86\x90\x5a\xe8\x57\xaa\x67\x86\xfc\x62\xfe\xf8\xc8\xe4\xcc\xa4\x1a\x68\xd0\x19\xfe\x42\x5d\x28\x47\x1e\x8b\x90\xeb\xaa\x2d\x0f\x50\xcd\xa4\x54\x12\xa9\x96\x4f\x8a\xa7\xb2\xe6\x33\x4f\xfb\xb4\x25\xa5\x99\xad\xed\x2e\xf4\x4e\x3b\xac\x1f\x4a\x32\xa1\xe0\x47\xb2\x88\x8b\x6e\xc7\x7e\x6f\x2a\x12\xf6\x77\xb5\x12\xf6\x77\xc3\x03\xff\x47\x6f\x46\x5b\x90\xd7\xa3\xc3\x52\x9b\xc9\xee\x60\x9e\xbb\x26\xf5\x5c\xb3\x06\x2e\x33\xcb\x3b\x72\xc2\xcf\x23\xc9\x1e\x28\x7c\x47\x00\xdd\x30\x9a\x4c\xe0\xd7\x85\x39\x54\x9b\x06\xfa\x60\x5b\x38\xc6\x80\xdc\x68\x51\x3d\xbf\xec\xe3\x73\x3b\x4f\x10\x22\x0d\x19\x7d\xb9\xfc\xc8\xe2\xf8\x08\xce\x4c\x32\xa6\xa5\x77\xc7\x6c\x62\x5e\x4d\xd5\x2b\x1a\x8d\x67\x90\x41\x16\x48\xbe\xf0\x04\x3a\xe2\x55\xb5\xac\xbe\xcd\x2b\x8b\xcd\xd0\xdd\x2d\xe8\x18\x83\x73\x6a\xfd\x8d\xca\xf3\xcb\xe7\xce\x02\x8e\xbc\xc3\xc0\x43\x37\xd9\xde\x73\xa9\xe1\x2b\x72\x58\x58\x56\x0e\x6b\xa8\x0b\xe6\x62\xf1\x81\x82\x8a\xbe\x67\x7f\x63\x32\x43\x1d\x9e\xba\xd0\xa0\xe8\x79\x8a\xa8\x44\xd1\xba\xeb\x23\xf8\x90\x23\xcc\xf3\x15\x76\x73\x74\x0e\xdb\x82\x6b\x20\x55\x72\x02\xac\xed\x3c\xe1\xb5\xe1\x58\x26\xf2\x25\x83\x42\xfd\xf9\x42\x3e\x91\x99\x66\x86\xaf\xe3\x88\xdf\x93\x89\x6c\x51\x30\x9f\xd2\x54\x55\x56\xad\x61\x7b\x22\x8d\x33\xd6\x2d\xbd\x63\xdc\xb2\x1b\xbd\x7e\x29\x91\x80\xcc\x09\x3f\xcc\x2b\x46\x53\xc2\x61\xcd\xf9\xa4\x5c\x5a\xa8\xe7\x3c\x91\x6c\xfa\x54\x7c\x45\x7e\x55\x33\xfe\x40\x85\x60\x13\xab\x6f\xa3\x14\xb8\xa3\xcf\xe4\x08\xa3\x7a\x20\x1a\x43\x32\x57\x41\x90\x13\xa8\x19\x36\x95\x7a\x7a\x4c\xc7\x89\x88\xd4\x8b\x3f\x75\x2d\xb6\xe0\x9b\x44\xe4\xef\x46\xe5\x57\xae\x9d\x5b\x7d\x5e\x28\x11\x90\x79\x95\x3d\x6a\x86\x54\x79\xde\xc7\xb4\x03\xaa\xb6\x9f\xe9\x13\x49\x54\x8b\x4b\xee\x7e\x47\xea\xf7\x94\x71\x96\xce\x1a\x95\x9d\xb4\x5e\x9d\xea\xdb\x89\x41\xca\x11\xd4\x02\xe8\x1d\xc6\x71\xc1\x8a\x5c\xb1\x30\xb7\xdb\xb4\xac\xe9\xbc\xa6\x1e\xc3\xf0\x1b\x22\x87\x86\x75\xc3\xc3\x9b\xe8\x2e\x7d\x93\x08\xd5\xf7\xdf\xa8\x1d\x19\xb0\xfa\x2b\x6f\x68\xf0\xe0\x52\xaf\x47\x83\x82\xd3\xd0\xe0\xb1\xe6\xf6\x7a\x5b\x99\xaf\xc9\xb9\xab\x99\xfc\xee\xfe\xa4\x42\xc7\xc5\x1e\x9b\xee\x78\x24\x55\xc7\x07\x56\x19\xf6\xb8\x37\x66\x64\x0f\x34\x07\xe5\x1d\xda\x6e\x17\xf9\xb4\x44\x60\x81\xea\xfa\x1f\x0f\xf6\x86\xfa\x56\xb9\xcf\x7e\x70\x21\xaf\x6c\x67\x07\x89\x01\x1f\xb0\xe1\x50\x1f\x59\xea\x4f\xe4\xc5\x9b\x01\x35\x34\x76\xd2\x43\x2b\x5a\xaf\x6d\x08\x95\x4b\x7a\xe3\xc9\xd3\xce\xe9\x30\xac\xe1\x38\x02\x73\x2b\xe3\xdf\xd3\x27\xc5\xbb\x30\x53\xd2\x68\xa9\x9b\x44\xf5\x0d\xc3\x31\x28\xb0\xe2\x3b\x28\x03\x45\x3d\xed\xd0\xcf\x8b\xc8\x6d\x45\xd5\x4b\x2a\x35\xd3\x75\xa7\xc5\x3b\xac\x13\x7d\x3c\x44\x92\xba\x87\xef\x1d\xa5\xb8\x47\xaf\x5b\xb4\x33\x8d\x97\xe9\xec\x30\x7d\xe2\x63\xfb\xb8\xac\x96\xf8\x48\x08\x49\x3b\x47\xef\xaf\xae\xfa\x1a\x61\xd3\xe1\x23\xe8\x71\xb6\x3e\xd6\xbf\xc6\x7f\x56\x95\x7c\xcd\x4c\x5f\xb1\x70\xb8\xbb\x57\x9d\x25\x42\xb4\x5e\x57\x5c\x0e\x42\x84\x0e\xfe\x34\x9e\x52\xa1\x54\xa7\x73\x4d\x63\x02\xad\x68\x11\xa6\x92\x02\xe6\xd3\x15\x7d\x60\x4a\x7a\xd5\xf0\xa5\x91\xef\x7f\x69\xb2\xe3\x16\x52\x03\x48\xf1\xb4\x3a\x81\x53\x7f\xa0\xa6\x7a\x11\xc9\xd9\x10\x65\x53\xc6\xa3\x38\x7e\xd2\x2d\x90\xdf\x94\x58\xa0\xdf\xa9\xbb\xa8\xdf\x0a\xa1\x3e\xf8\x25\xf8\xa0\x69\x91\x6b\x5e\x51\xb1\xe7\x1e\x01\x95\x63\x49\xf8\x99\xc7\x7e\xdc\x3b\x90\xbb\x7b\x3d\x48\xe7\xbc\xb7\xcf\x7f\x90\xa0\x37\x10\x03\xbe\xbb\xe7\x1f\x50\xdc\x61\xa8\x9d\x9a\xa0\x4c\xaa\x85\xa9\xb2\x58\xf1\x37\x1f\x88\x98\x29\x49\xde\x1e\x8b\xad\x1a\xac\x9a\xf4\x20\xe4\x44\x6d\x71\x89\x23\xb2\xbd\xd4\x61\x46\xc7\xfd\x37\x87\xef\x4f\x6f\x46\x87\xd7\x9f\xce\x8f\x46\x17\xaf\xaf\xfb\x57\x1f\xfa\x57\xd7\xa8\xa7\xca\x76\xa6\x1c\x33\x92\x2a\xf9\x9a\xf2\x09\xe5\xf2\x67\xfa\x94\xe2\x88\x68\x8d\x61\xae\x42\x8a\xc9\x60\x88\xc7\x75\x67\x67\x6c\x43\x3c\x33\x3c\x25\xdd\xfd\xe9\x0f\x56\x40\xd8\xdf\xd9\x99\x22\x2a\x43\x36\x98\x0e\xf1\x18\x95\x8e\x70\xb7\x2f\xd4\x11\xbe\x52\x0b\x9c\xf6\x62\xad\xeb\x8c\x32\x73\xa2\x83\xeb\xb5\xb6\x98\x9c\xc2\x71\xcc\xd5\x06\xff\x87\x97\xd6\xf8\xef\xe1\x88\x9c\x40\x90\x64\x9a\x1b\x05\xc4\xa0\x3b\x6c\x45\xeb\xb5\x18\xec\x0d\x0d\x0c\x7f\xd5\x89\x1a\x20\xcd\xee\x5c\x34\xaf\xcc\x93\x75\x02\xa4\x5a\xc4\x38\x15\xb9\x93\x98\x89\x16\xa2\x3b\x41\x2f\xd8\x09\xd3\xf5\x5a\x22\x6c\x11\xad\x98\x17\x9b\x97\x64\x28\x6b\x75\x8d\x32\x23\x91\xe1\x4a\xdd\x41\x96\xa5\xbb\x0a\xb0\x53\x73\x03\xa1\x3a\x92\x44\xaa\x9d\x61\x9b\x8b\x0e\xe2\x50\x8d\x01\xab\x01\x60\x31\x78\x35\x44\xbd\x58\x4d\xb4\x8c\xee\xfc\x73\xfd\xcc\x3d\x22\x47\x6a\x43\x45\xe2\x5e\xf3\xd6\xc3\x14\xf0\x35\xc9\x15\xd6\x6e\x72\xcb\x39\x25\x6f\x29\x5c\x3b\xa2\xf1\x3d\x9d\x90\x8f\xee\x07\xf9\x64\x84\xd6\xfa\x70\xc6\x3b\xd9\x59\xf2\x85\x48\xc6\x34\x4d\x69\x5e\x26\x25\xdb\x5d\x3c\x92\x39\x49\x51\x1d\x7e\x76\x63\x52\x3c\x93\x0b\xa9\xc5\x84\x86\x6a\x9f\xe4\x7a\x7d\x9d\xc3\x43\x6f\x3d\x6a\x13\x70\xe9\x93\x94\xf4\x81\xab\xe8\xe6\xf3\x9a\x3e\x7b\x4f\x0f\xe3\xd8\x2b\x7f\x2d\x1d\x9f\xdf\x14\x9e\x09\xc4\x7d\xa7\xe1\x2a\x41\xe2\x36\xe9\x26\x1f\xe5\x40\x0e\xd5\xb8\x8c\x12\x77\x94\x2b\xe0\x28\x02\x73\xc1\x16\xe3\x5b\x4b\x20\x10\xfa\xd9\x06\xc4\xb7\xdb\x94\x40\x80\x5f\xe1\xe9\x40\x0e\xdb\xed\xb0\xe6\xa9\xb1\x09\x21\x2d\xc5\xba\x6e\x5e\xd3\x48\x8c\x67\xc7\x2c\x55\x22\x4e\x9d\x4f\xd9\x93\x34\x47\xf4\xb3\x9f\xc0\x04\x13\xab\x01\xd0\xcb\x73\x7e\x78\xd6\xbf\xbe\x3c\x3c\xea\x5f\x8f\x5e\x7f\x1a\x9d\x1c\x13\xff\x11\xa1\x9d\x1b\xa0\x0c\xc8\x18\x04\x60\x2b\xe7\x89\xd4\x20\xca\x74\x42\x68\x0e\xa9\xac\x44\xb3\x25\x3f\xe1\x37\x22\xe2\xa9\x3e\x2d\x88\x45\xc5\x07\x2f\xdb\x9f\xcf\x2f\x3e\x9e\x8f\x2e\xaf\x2e\x2e\xfb\x57\x37\x9f\xd4\x89\x48\x68\xe7\xb8\xff\xfa\xfd\xdb\xd1\xc9\xf9\x4f\xfd\xa3\x9b\x93\x8b\xf3\xd1\x9b\xf7\xe7\x47\x26\xdf\x81\x56\x2f\x9c\x69\xed\x12\xed\x68\x2e\x42\x3b\xa7\xec\x56\x44\x02\xce\xf7\x4e\xec\xfd\x0d\x22\xdd\x79\x32\x51\x8d\xb9\x46\x8e\x4f\x8e\x47\x47\xef\x0e\xcf\xdf\xf6\xf5\xd3\x5f\x3f\x8d\x8e\x2e\xce\x6f\xfa\xe7\x37\xea\x0b\xa3\x26\x71\xbb\x46\x5d\xf6\xe3\xe4\x36\x8a\x73\x0d\x8a\xe7\x12\x3c\xc1\x8b\x7a\x65\xe3\x3c\x27\x9f\xc5\xe6\xb8\x7a\x0b\x41\xb0\x28\x44\xce\xbb\x8a\x1e\x7c\x39\x60\x51\xa7\x9c\xcc\x1d\xdd\x6c\xe6\x6c\xf7\xf1\x93\xc7\xd1\xed\xb7\xa0\x59\xbc\xab\xef\xf5\xad\xaf\x1c\x60\xbe\x9f\x4d\xe5\xda\xd9\x13\x9e\x16\x32\xf7\xdf\x2a\x5b\x70\x0b\xdd\x19\x79\xdd\xb9\xb3\xdd\x71\x6f\x1f\x4b\x57\xb7\x6d\x42\xdb\xed\x3b\x30\x72\xfa\xc5\xfe\xff\xd4\xbd\x6b\x7b\xe3\xc6\x95\x27\xfe\x9e\x9f\x42\xc4\xe4\x41\x50\xcb\x12\x9b\x72\x66\x66\x77\xa9\x2e\x73\xe5\x76\x7b\xe2\xc4\x7d\x49\x77\xdb\x49\x86\xe1\x72\x20\xb2\x28\x56\x1a\x02\xe8\x42\x41\xdd\xb2\x88\xef\xfe\x7f\xea\xd4\x1d\x28\x52\x54\xc7\xd9\x79\xfe\x7e\xe1\x16\x81\x42\xdd\xeb\xd4\xb9\xfe\xce\x4b\x37\xb3\xc3\xac\xa7\xbe\xb8\x88\xaa\x2f\x2e\x16\x68\xbf\xf7\x7f\x0e\x6e\x9c\x16\x58\xd6\xf5\x59\x83\xb7\x80\x2a\x2b\xbb\xa0\xbf\xc3\x91\x3b\x91\x06\xe9\xcb\x5b\x0f\x87\xf2\xbd\x97\xc2\xa0\x17\xd2\xa2\x0d\x68\x9f\xfd\xf9\x7f\x83\xaf\xf0\x47\x45\x58\xac\xa3\x78\xec\x34\xf8\xe9\x80\x3f\xb8\xc3\x5d\x1f\x40\x44\xb6\x65\x5f\x85\x0b\x69\xba\x22\x97\xcc\xcf\x41\x09\xfe\x68\x8e\x3b\x27\x6c\xbf\xb7\xf8\xa3\xc8\xb6\xe5\x23\xc6\x6b\x17\xf7\xee\xce\xb8\x0d\x76\x05\x8c\x0b\xfc\x92\x3f\xdf\xcb\xa7\xa6\xaa\x17\x60\x47\xd7\x77\x6c\x1e\xb8\x5f\x41\xa2\xd2\x66\x2e\x2c\x13\x56\xec\xf7\x99\xfc\x4d\x3e\x64\xc8\x1b\xd8\x0b\x2b\x5e\x74\x71\x19\xe4\x44\x87\x46\x3e\xee\xdb\xd3\xc3\x6e\x0a\x0d\xcb\xde\x67\x94\xed\x59\xf2\x7a\x97\x7d\xb0\xba\xf9\x70\x36\x5c\xbf\xde\x1d\x3f\x39\x6e\x7e\x00\xdd\xd1\xf3\xd5\xf2\x05\xd9\x3a\x4d\x7b\x73\x37\xd3\xe9\xcd\xc7\x1b\xc6\x6b\x11\xe2\x48\x4f\xeb\xf0\xb7\x99\xda\xa0\x01\x35\xb5\x2e\xb2\x7c\x26\x67\xd5\xa0\x7c\xd9\xc7\x45\x9a\xbe\xc9\x0a\x0f\xe0\xc4\x0f\x6e\x2f\xf6\xfb\x7c\x7c\x9d\xaf\x3e\x5e\x37\x5c\x36\x47\xcb\xba\xe1\x2e\x31\x02\x6a\x0f\x90\xf2\x8f\xd8\x12\xfb\x2b\xfc\x26\xb8\x71\x68\x07\x11\x1b\x7a\xfe\x96\x58\xc3\x95\xdb\xf6\x7f\xf7\x4f\xe0\xe8\xad\x9b\xf2\x6f\xb5\x3e\xcf\x83\x55\x8d\x10\x84\x7f\x8b\x12\x84\x7f\x0b\x09\xc2\xbf\x2d\x06\x6c\xbf\x8f\x65\x67\xdd\xef\x33\x46\xb8\xe4\x3a\x01\x2e\x39\x58\xcc\x8e\x33\x45\xa6\x3a\x33\x94\x33\x56\xe1\xdc\xdb\xb4\xaf\x4d\x4f\x6d\x2e\xd0\x41\x6f\xf7\xf2\x59\x56\x11\x8e\x73\xc2\xd0\x34\xab\x14\x7e\x72\x4e\x78\xb7\xc9\x88\xe3\x45\x26\x70\xd8\xdc\xf7\xfe\xc4\xf8\x6a\x66\x66\xe6\xc9\x3e\xa9\x22\x84\xbd\x1a\x30\xd2\xeb\x5e\x6e\x0f\x57\x3e\xcb\xa3\x5a\x45\x13\x98\x19\x34\xb8\xdf\xc3\x3f\x26\xd9\x8a\x55\x4f\x1a\x06\xbf\xb6\xef\xce\x7f\x77\x59\x7f\x4d\x26\x97\xf5\x39\xf9\x9d\xea\x66\x43\xd8\xbc\x5e\xe0\x42\xfe\x33\xba\x90\x72\x8a\xfc\xe3\xab\xc5\xa0\x48\xd3\x6c\x95\xa6\x6a\x56\x1b\x5c\x20\xdc\x48\x62\x41\x28\xc2\x3d\xea\x2b\xcb\x4a\xc2\x52\x2c\x10\x2e\x74\xd4\x67\x03\xbe\x31\xc6\xf7\x17\xe8\xf1\x0f\x8f\xc9\x55\xf8\x3b\x7b\x51\xff\x62\xfe\xf2\x32\xb5\x7f\xb1\xe3\xca\xcc\xff\x31\xfd\x01\x57\xe4\xef\x52\xbc\x97\x7b\xbb\x02\x4b\xcf\xf0\x02\x33\x84\xff\x4e\x3b\x16\xcb\x6f\x5c\x8b\x5f\xe8\x24\xa3\x55\xc4\xd0\xdc\x6b\x55\x3d\x7e\x0d\xd0\x26\xa0\xb0\xb7\x2d\xfd\x18\x87\x9a\x74\xcf\x86\x8a\xc0\x7e\x37\xfd\xc5\x09\x40\xea\xd2\xde\xef\xb9\xbe\x66\x8d\xb7\x17\xe6\xe6\x16\x94\x57\x41\xb7\xe3\x5f\x45\x3b\xfe\x55\xd0\xf1\xaf\x16\x0a\x7c\xc6\xba\x70\x6b\xa6\x47\x85\x61\x8d\x46\xce\x0b\xa3\x24\x8a\x33\x17\x59\x32\x4d\x90\x14\x90\x18\xf9\x4f\xd0\x64\xa1\x01\xd7\x90\x0c\x0f\xf0\xd5\xf4\x02\x4b\x51\x75\x5a\x42\xba\x12\x86\x7d\x85\xc4\xd4\x26\xce\xc6\x75\x53\x83\x38\xbd\x9e\x0e\x2f\x5a\xa4\xf0\xd3\xfe\xac\x71\xec\x7e\xc6\x3f\xe1\xbf\xe2\xff\x38\x10\xc9\xa5\x9d\xa1\xf2\xf5\x9a\xae\x43\xcc\xa9\x9f\x1b\xda\x50\x32\x5f\x1c\x03\x63\xcb\xd7\xeb\x63\xfe\xe7\x50\xab\x61\x0c\x9d\x49\x29\x4d\x35\xbe\xd5\x7b\x6a\x12\xd5\x43\x41\xbd\x20\x08\x61\xe3\x06\x6f\xfc\xf3\xa0\x2f\x5a\x48\x83\x56\x70\x09\x7e\x65\x1a\xcf\x0b\xb4\x5f\x07\x40\xee\xe1\xd3\x81\xd7\xca\xaa\xa0\x39\x37\xc8\x1e\x66\x90\x03\x27\xd7\x4f\x2e\xc5\x73\xea\xf2\xbc\x9b\x33\xcf\x09\x95\x32\x55\x29\xff\x91\x67\x9e\xc1\x1f\x5f\x2d\x06\xf2\xaa\x76\x5a\x2e\xa5\xe3\xb2\xd7\xf6\x7e\xff\x7d\x26\xc9\xdd\x9c\xe3\x72\x81\x5a\x1b\x86\xdb\x93\x3d\x7e\xc6\xbe\x70\xf2\x13\x8e\x89\x2f\x7f\xc5\xb1\x0f\xe3\xda\x5d\xd9\xd9\x0c\xe1\xe1\x85\xba\xbf\xfe\xd8\xe1\xe8\x22\x22\x07\x04\x01\xc6\x44\x91\x3f\x42\x0d\xbf\x81\x15\xfb\x0f\xfc\x27\x3f\x43\xde\x5f\xbe\x84\x2b\x57\xd4\x77\xc8\x3a\x41\x65\x19\x4a\x53\x78\x18\x04\x8d\x49\x1e\x4d\x9b\xf7\x95\x08\xc0\x3c\xae\xa4\x4a\xd3\x88\x52\xaa\x92\x13\xa9\x0c\x18\x69\xea\xfd\x50\x84\xc4\x61\xa8\xb3\xc0\x7b\x37\x13\x08\x1c\x9f\xba\xdb\x19\x4e\x74\x5c\x9b\x39\xb4\x31\x0b\x2e\x62\x43\x9b\x92\xfe\x30\x90\xbb\xfc\x0f\x64\x78\x81\x2e\xb3\x98\x2b\xa3\xbe\x6d\x5d\xd0\x89\xcb\x9f\x94\xa6\x59\x6e\x8f\x47\xa9\xc9\x41\x8e\x10\xce\xad\x2b\x2c\x0b\xa3\x1c\x32\x8e\x7d\x97\x59\xe7\xeb\x21\x27\x4d\x5d\xef\x48\x4e\xc5\xd2\xd2\x09\xa5\xfd\xa6\xfa\x65\x8b\x5a\x94\xfd\x05\x5c\x0f\xff\x13\x0e\x57\x9a\x66\xff\x69\x0f\xca\x1f\xc8\x70\x02\x54\x51\x4e\x3e\x8e\x1f\xf7\x03\x8e\xe7\x3e\x0b\x09\xd1\x2d\xca\xca\x94\x09\x3c\x9c\xe0\xbf\xa0\x36\x9b\xc4\x2b\x3d\x38\xe9\xe1\x2c\xc3\x0d\xf1\xa7\xaf\x27\xb3\xdf\x28\xa7\x67\x2c\x70\x89\xa6\x92\xc9\x28\xf1\x9c\x62\xb1\xb0\xdd\xf6\xd7\xfd\x9d\x19\xca\x1f\xcf\x98\x4e\x77\xf1\xc7\x85\x94\x06\x81\xd2\xfd\xa7\xa5\x82\x72\xdc\x6e\xab\x53\xfa\x65\x23\x76\xb6\xa1\x40\xe0\x94\x42\xd1\xc3\x9f\x46\x23\xf7\x84\xcb\x27\xe7\xe7\x7f\x7a\x4e\x26\x69\xfa\x1b\x45\xd3\x7c\xc1\xa9\x54\x61\xb7\x34\x43\x03\xc1\xef\x1f\x40\xa8\xd2\xba\x6b\x00\x9e\x76\x25\x19\x0d\xf8\x4f\xcb\x51\xa5\x69\x56\x91\x80\x69\x43\x5a\x68\xaa\xfa\x47\x01\xd7\xfa\xc0\x55\x08\x37\x8e\x49\xaf\x07\x4d\x9a\xd6\x63\x41\x73\xbe\xae\x74\x06\x81\x4a\x55\x03\xfe\x1e\x72\xce\xd8\x26\xa3\x84\x10\x65\xde\xb1\xb7\x86\x3c\x5b\xf2\x3c\xe0\x4f\x19\x47\x68\x45\x94\xd3\xad\x81\xe9\x38\x1c\x29\x2e\xf0\x4a\x8a\x09\x5c\x65\x03\xb5\x34\x84\xa3\x87\x82\x00\xa4\x13\x64\x26\xdd\xcc\xbe\xcc\xff\x62\x83\x8d\x34\x25\x5f\xc0\x7d\x3a\x2d\x5a\x34\x95\xf4\x93\x30\x05\x71\x58\x10\x7e\xa4\x77\x1c\x0d\xf2\x34\xa5\xe0\x29\x29\xc7\x11\xa1\x48\x40\xda\xbf\x0d\x3e\x85\xf0\xd2\xee\x43\xa8\xaf\xf0\xd6\xbc\xa2\x27\x0b\x6f\x15\xe9\xd1\x33\xb9\x10\x2c\x8c\x75\x90\x1c\xf9\xe8\x02\x61\xd8\x0f\x86\xe7\xee\x13\xd6\xdc\x67\x77\xc6\x9f\x58\x51\x40\x05\x69\xea\xfd\x30\xa7\x28\x3a\x5e\x5b\xca\x1f\x6f\xef\x21\x1c\x3a\x3b\xd8\xfc\x91\xc1\x1e\xd6\xf1\xe8\x8b\xa3\x13\xfb\x9a\xd9\x9b\x23\x3a\x33\x17\x6a\x0a\xfa\x13\x34\x31\xa7\xc2\xcc\x0b\xae\xdd\xfe\xcf\x07\x75\x30\x37\x6b\xb6\xfe\x51\xd9\x4e\xe5\xe4\xb8\x5f\x47\x67\xc7\x15\xeb\x6c\x87\xce\x53\x39\x3f\xb0\x03\xab\xaf\x2f\xe4\x7d\xd5\x5b\xca\xf3\x0b\x4d\xb5\x6a\x1a\x57\x9b\x35\xb4\xcb\xff\xd7\x34\x64\xc8\xcc\x5d\x98\x87\x0e\x22\xf6\x33\x2f\xd7\xe5\xd3\xea\xfa\xd6\xbf\x77\x3b\x55\xad\xbc\xaa\xfa\xf1\x2f\x99\x20\x13\x29\xd7\x92\xf3\x0b\x34\xf5\xc0\x13\xd3\x34\xe3\xe0\xd1\xde\x61\x25\xcf\x2f\x10\xc2\xde\x48\xb1\xbc\x01\x92\xff\xa3\xf2\x0c\x5c\xd3\x4d\xc5\x69\x02\xf7\x01\x06\x2e\x0c\x53\xd7\x91\x0d\xf5\x04\xe0\x5e\x0f\xd8\xe3\x3d\x50\x61\x93\xb2\x07\x03\xb5\xd7\x7a\x5b\xf5\x32\x63\xcf\x27\xfb\x3d\x97\xff\x63\xe7\x7c\x48\x26\x28\x4d\x25\xe3\x94\x28\x1e\x33\x91\x44\x03\x7e\xcf\x17\xf0\x77\xe1\xfa\x14\x8c\x44\xeb\x1f\xcc\x48\xd8\xc2\xec\xd3\xfb\xae\xde\x35\x47\xda\x6d\x1f\x5c\x70\x21\xc0\x12\x37\xce\x73\x32\xcb\xe0\x39\x9b\x4d\xa6\x0c\x9d\xd7\x92\xba\x8a\xe7\x93\x59\x33\x12\x4a\xfb\xa4\xf8\x8c\x04\xd4\x3a\x8a\xee\x25\x28\x4d\x41\xdd\xa2\x7b\xee\xbf\x92\x5d\xd6\x5f\x48\xe9\xc4\x7c\x80\x9a\xf3\x8b\xe7\xc5\xa8\x36\x63\xcd\xfd\x0f\x9c\xff\xac\xec\xe7\x96\x1a\x53\xfa\x86\x53\xfa\x0b\xcd\xe6\x0b\x4f\xb9\xb8\xa6\x01\x63\xdb\x73\xee\x92\x94\x7a\xea\x5c\xcb\x32\xad\x37\xdd\x51\xf2\xef\xf4\x5f\x3d\xb5\xb7\xb7\xe5\xd8\x26\x73\x3b\xd0\x68\x00\xec\x5f\xcf\xc9\x8e\x22\xaa\x4d\x27\x5a\x30\xa7\x78\x2e\x30\x5f\x98\x84\x22\x25\xd2\xd1\x11\xa6\x18\x60\xe8\x0d\x9c\x97\x6a\xc7\x13\x80\x18\x08\xc4\x8a\x94\x1a\x14\x93\x61\x36\xda\x51\xc9\x73\xf7\x1a\x1a\x31\x3c\xb1\x4d\x55\x48\xd2\xc8\x5e\x6f\x3d\x35\x3c\xed\xf1\x95\x72\xa3\x72\x20\xb7\xea\x04\xee\xf7\x49\xe7\x78\x27\x38\x57\x85\x2c\x77\x6c\xca\xd8\x63\x9b\xe0\x5a\xb9\x57\x24\xdb\xbc\x0e\xfc\xd8\xbc\xc8\xca\x32\x72\xd2\xe0\x16\x2c\x23\x1b\x57\x72\xb1\xb8\x56\x87\xe6\x2f\x07\x2a\xf6\x0f\xe7\x3d\x75\x0a\xf5\xfa\x11\x0c\x60\x49\xfd\x24\xa9\x41\xb8\x0e\x81\x7e\xc1\xa6\x40\x1f\xc3\x31\x59\x29\x7f\x3a\x03\xdc\xb1\xfc\x48\xef\x2d\xcc\x87\x77\xd3\x82\x71\xf5\xa8\x40\xdc\x71\xb3\x3b\x22\x1c\x43\x1b\x70\x8b\xd9\x48\x81\xaf\x27\x33\x31\xe2\xd3\x73\x48\xaf\xce\xbe\x9e\x58\x0f\xfc\x4a\x72\xaa\x25\x5a\x52\x50\xbe\x28\xcc\x28\x9d\x70\xb3\x43\x6c\xbb\x6e\xaa\x76\x4b\x84\x6d\xda\xbb\x9f\x41\x9b\x6c\x7a\x7e\x81\xeb\x9e\x33\x87\x1c\xad\xdd\xd4\x8d\xec\x43\x85\x72\x29\x25\x5d\xcb\x8e\x34\xa6\x23\xb9\xa4\x5f\xf0\x77\x83\x6b\xd5\xa9\xde\x55\xdf\x8f\x64\x03\xc7\x35\xb5\xf2\xac\xbc\xd1\x0e\x8d\x7f\xa4\xf7\x06\xc4\xaa\x77\x1b\xf6\xab\xa8\x45\xb5\x3b\x5c\xc3\xa1\x06\x0e\x86\xee\x99\xc9\x89\xc6\xde\xc2\x8e\x88\x46\xc6\x8b\x39\x5d\x20\xf9\x3f\xa3\xe2\x81\x28\xe3\x0b\x3f\xe0\xd5\xec\xaf\xc1\x35\xcd\x38\x56\x9b\x0c\x4f\x30\xb7\xa7\x19\x70\xbe\xe2\xa3\x39\xb1\xbb\xda\x17\x6d\x4e\x21\xa8\xfc\xfc\x5c\xfe\xf5\x9c\x4c\xc2\xb8\x7c\xd3\x8d\xe5\x91\x6e\xac\x6c\xcb\xf1\x4d\x85\x1e\xfe\xe2\x30\xe1\xc2\xa4\x67\xd7\x01\x29\x02\xbf\xad\xf3\x73\xf6\xb5\x0d\xaf\xaf\x08\x10\x73\x86\x06\x55\x9a\xfe\x3e\xab\xa0\x6c\x12\x69\x30\xf1\xf9\xc2\xe5\x53\x6a\xfd\xe6\xd4\x5a\x3f\x51\xcf\x32\x76\xc4\x60\xa3\x92\x92\x1d\x22\x20\x7a\x23\xea\x98\xe7\xc8\xf6\x78\x8a\xf6\x2c\x58\x2b\x55\x65\x00\xd1\xc0\x67\xe1\x1b\x22\x6f\x3e\x15\xaf\x98\x19\x08\xb9\xdb\xea\xee\x48\x5e\x02\x57\xe9\xc9\x51\x4c\x52\x14\x9f\x97\x0b\x15\xe1\x6d\xa3\xc2\x4a\x7c\x81\x06\xd7\x9c\xe6\x1f\x5b\x85\xef\x7e\x04\x0d\xe2\x1f\x6c\xd4\x21\x61\x58\xf8\x8b\x8e\xc7\x65\xd4\x01\x0a\x42\xfe\x5d\xf3\x2a\x28\x4e\xab\x1f\x28\x96\xb2\x9e\xf1\x5e\xf0\x6b\xeb\xd3\x98\x03\x9f\xa8\xc7\xc7\xe8\x7b\x7c\xd8\x65\x9a\xaa\x78\x29\x7d\xe4\x02\x59\xc7\xb1\xd1\x1c\xd8\xca\xf9\xc2\x91\xdf\x8a\x4c\x2e\x2b\xc7\x53\x54\xa3\x11\x2a\xe7\xd5\xc2\x69\x54\xd8\xa1\xd0\xb4\x9c\x4c\x2e\x73\xe7\x25\x95\x8f\xc8\x57\xe8\x81\x67\x6c\x9e\x2f\x30\x9b\xe7\xa3\x8b\x05\x6a\xdb\xee\x51\xfe\x4c\xb3\x20\xc3\xcc\x4b\xef\x5e\x7e\x4f\x3b\xe9\x4f\x5f\xa8\xcd\xae\x3c\x80\x7c\x8b\xf8\x9b\x8e\x48\x17\x08\xad\x03\x16\x07\x4a\xc8\x3e\x2b\x03\x96\xc2\x25\xd6\x22\x30\xf3\x6a\xbd\xf2\x98\x76\xb6\xc9\xe0\x24\x1b\x52\xe0\x18\xf3\x88\xd0\xc8\x06\x5a\xff\x58\xed\xf7\xd5\x01\xa5\x5e\xd5\xb7\xbc\xee\xf7\x4e\x87\x72\x48\xeb\xb3\xdf\x67\x3d\xe5\xca\xa1\xb2\xfa\x98\xaa\xf1\x69\xa9\x17\xd8\x3c\x39\x84\x8f\x34\xc8\x7f\xf8\x81\x6a\x9b\xa4\xf5\xe6\x4d\xd3\x4c\x4e\x80\x66\x78\x31\x1d\x7f\xa4\xf7\x98\xa2\xd0\xe3\x77\x78\xe1\x9b\xdc\x69\x90\x1a\x3c\x06\x60\x61\xdd\x5a\xe1\xd8\x20\xf7\x66\xce\x17\x69\xfa\x51\xeb\xde\x95\x03\xab\x2c\xf7\xe2\x20\x47\x65\x15\x78\x3a\xca\x55\x6c\x43\xbc\xb4\xa0\x93\xd8\xa7\x9e\x7e\x29\x35\xb8\xe0\xd1\xca\x4f\xdc\x73\x30\x79\xae\x61\xe4\x78\xaf\xb5\xd0\x02\x5f\x7a\xf9\x5a\x3f\xd1\xac\x44\x26\x2c\x58\xb7\x5c\xe2\x37\x92\xca\xa9\x5a\xcd\xda\x9c\x9a\x22\xb6\x17\x9c\xab\x7b\xa5\x51\xcd\x5c\xa7\x8e\xa5\xe3\x0d\x86\xd3\x73\x61\x1e\xaa\x5d\xef\xa9\x43\x8f\x04\x60\x28\x82\xc2\x2d\xd0\x9a\x09\xc6\x33\x79\x24\xfe\x0f\xcd\x57\x5b\xc8\x9b\x39\x03\x9e\x7b\x1a\x27\x6b\xc6\x07\xc7\x50\xe2\x80\xaa\x0d\x55\xb4\xe7\xf2\xae\x2a\x72\xc1\x0a\xaa\x55\xaf\x1c\xcd\x74\x58\xd1\x54\xf9\x0b\xd9\xe4\xae\x1f\xe9\x3d\x0a\xc2\x74\xf5\x58\x0f\x20\x98\x1a\x9f\x6d\x37\x53\xb3\xae\x5f\x26\xec\xf3\xcb\x8f\x2e\x79\xe3\xa5\xd9\xf5\x72\x03\x83\x0f\xeb\x2b\x9a\x09\x84\x3f\x80\x2e\x56\x65\xbd\x45\xd3\x0f\x54\xf3\xf5\xc0\xfc\xec\xee\x63\x58\xb1\xd8\x22\x97\x88\x6d\x1d\xa1\xb3\xe0\x4f\xc7\x11\x9f\x0b\x60\xbf\xa8\xb6\x4e\xb5\xb8\x7b\xcb\x07\x2c\x1c\xd4\x66\x6c\x5c\xea\xa8\x3c\xb4\x68\x00\xfc\x23\x60\xd5\xec\xf7\x13\x34\xba\xb0\x50\xef\xda\x66\x38\x4e\xcc\xee\x90\x07\x27\xe3\x63\x15\x26\x8d\x30\x8f\x33\x01\xfd\x36\x3b\xa7\xff\xc1\xb0\x8d\xf2\xdf\xf3\xf3\x83\xed\x35\x65\xa4\x45\x98\x36\xf9\xd8\xf3\x4d\x8d\x5e\x85\x5d\x0b\xe0\x23\x9c\x13\xd2\x66\x60\xc0\x2e\xeb\xc1\x54\x09\x85\xcf\x66\x72\x5d\x9b\xab\x19\x30\x90\x75\x12\x21\xee\x25\xf1\x64\x07\xe6\x4a\x8f\xe8\x31\xe6\x05\x6b\xb4\x2e\xe1\x55\x59\xda\xe9\x10\xb6\x52\x81\x70\xa9\xda\x3f\x3f\x37\x7f\x81\x3e\x5f\xb2\x33\x90\x4f\xdb\x66\xd3\x70\xe0\x82\x87\xf8\x09\x38\xe7\xf4\x00\xcd\xe0\xf1\x14\xde\x06\x0e\x41\x51\x31\x75\x55\x78\x0f\xec\xc9\x53\x64\x0d\x7f\xa2\x19\x37\xd9\xfa\x35\xe1\xe3\x92\xf0\xf1\x4e\x41\x34\xed\x53\x65\x14\x12\x5c\x0f\x9f\x12\x92\xe0\x78\xeb\x1e\x62\x69\x05\x32\x2d\x73\x57\x4d\x56\x12\x36\xaf\x16\xc8\x33\x13\x41\x34\xa2\x2f\xde\x98\xd0\x62\x37\x74\x3d\x3d\x7a\x1e\x76\xd5\xae\x29\x24\x53\xb8\xd9\xd0\x95\xa0\xeb\xcc\x0e\xe3\x42\x83\x2c\x77\x4b\xc4\xb1\x41\x3e\xd2\x7b\x88\x48\x37\x3f\x46\xc9\x38\x19\x51\x6b\x44\xf2\x89\xd0\xd1\xe6\x29\x16\xa3\x0b\xcc\xd1\x54\x7c\x7d\x01\x04\x18\x6e\x51\xf9\x85\xb1\xdc\xd3\x9e\x10\xf5\xee\x1f\xd4\xf9\x1f\x51\xf8\x1b\x1d\x72\x18\x7c\x64\x68\x95\xed\xc1\xdb\x2f\x56\xc4\x1f\x56\xb8\x57\x60\x5c\x8d\xab\xb0\x01\xcb\xe0\x50\xe7\x0c\xaf\x84\x7c\xe1\xed\xef\xb6\x87\xef\x33\x81\x66\x76\xca\xa6\xd6\x60\xe2\x39\x63\xd1\xe3\x41\x8a\x81\x5f\xa7\xbe\x27\xc3\xce\xef\xf7\x5e\xe6\xe8\xd7\x61\xd3\x76\xae\xa6\x79\xbf\xe9\xef\x7d\xc6\x0b\xfc\xe0\x09\x9d\x5f\x28\x27\x82\xaf\xac\x3f\xe1\xef\x00\x1a\xd6\x04\x45\x65\x11\x8b\x81\x17\xa8\xe4\x9e\xb9\xd3\x80\x22\x70\xe5\xdc\x73\x9f\xb4\x0f\x4b\x3f\x39\x54\xe2\xac\x60\x09\x2b\xe5\xbb\xc4\xb7\x93\xc1\x33\x8f\xf3\xf5\xd5\xf7\x3f\xf4\x2c\x01\x14\x60\xf3\x5c\x44\x87\xdb\x14\xde\x81\x07\x09\x86\xf9\x12\x8c\x51\x42\xcd\xab\xc5\xa0\x74\x98\x86\x59\x0e\xaa\x4e\x03\x34\x28\x7f\x22\xb9\x89\xff\x2e\x79\xe6\x1c\x97\xfe\x56\xf8\xee\xbf\xa1\x2f\x72\xcf\xbe\x8e\xf4\xe5\x17\x6f\xbd\xfb\x7e\xef\xb4\x35\x2b\xfe\x12\x32\x34\xb6\xbe\x17\xf8\x0b\x95\xba\xfe\xf7\x8f\x28\x1a\xdc\x9a\x91\xa1\xe5\x8b\xdd\xa2\xd9\x87\xe1\x0c\x74\x80\x92\xa9\xc8\x7d\x72\x7d\x80\xab\xad\xa9\x68\x76\x91\xa8\xf7\xb2\x8f\x41\xa5\xb9\x64\x49\x5f\x8d\x61\xb8\x1f\xeb\xdc\x47\xb7\xca\xfa\x1a\xa4\x6f\x68\xd4\xa7\x4b\x1b\xb3\xb1\x35\x6c\xfc\x2e\x12\x50\xe8\x93\x47\x81\xa6\x95\xc2\xe6\x6e\x76\xfa\xeb\x5a\xfb\xa0\xe2\x02\xaf\x88\x0f\x39\x4e\xbd\x59\xc5\x81\xa9\x98\x06\x93\x0b\x61\xf8\x59\x43\x38\x2e\x08\xc5\xfd\xf5\x2d\x94\x2b\x07\xe8\x41\x51\x8b\xec\x6a\xaf\xbc\x75\xe7\x52\x52\xd3\xcc\x4e\x1d\x60\x83\x40\x4a\x34\xbb\x0c\x08\x73\x58\x9b\x1f\x1f\xd9\x0f\x00\x47\x1d\xb8\x52\x15\x79\x2d\x88\xc5\xe9\x38\x00\x15\xdd\xe5\x49\x6d\x5d\x1a\x3c\xce\xab\x0a\x20\x79\x57\xd5\xed\x35\x2b\xbb\x32\x8e\x15\x6f\xe0\xcb\x9a\xfd\x42\x0f\x78\x66\x6b\x6b\x6b\xbc\xac\x6d\x4a\xa3\x23\xcd\x17\x41\xce\x22\x28\xdf\x0b\x0a\xf4\x1c\x9d\xac\xfe\x0b\x1c\x52\x6b\xd3\x57\x04\x5a\xe0\x23\xc8\x31\xb2\x0f\x3d\xdc\x98\x5e\xcb\xb2\x94\x03\x79\xb1\x0b\xf0\x67\xfa\x2b\x06\xdb\x49\x71\xee\x7b\xb8\xe2\x2c\xac\x0e\xb8\x04\x96\xb3\x72\xcc\x8c\x87\x94\x4b\x57\x52\xc1\x0b\xe5\xaa\xa0\x1f\xe5\x7d\xb8\xb4\xdc\x0e\xe6\x67\x9a\x81\xc9\xf0\xc1\xaf\x8b\xed\xf7\xfd\x61\x57\x72\xa4\xde\x6e\xcd\x11\xce\x5b\x57\x8b\xcf\x23\xfc\xac\xf4\x12\xf3\xc9\xc2\x24\xdf\x80\x10\x2f\xb8\xd8\x24\xb7\x3c\xe3\xb1\xae\xb3\x20\x9d\x70\x1e\x4b\x7f\x6f\x84\xd2\x4e\x52\x80\xae\x0b\x47\x0c\xef\x07\x73\xf2\xca\xa8\xa6\xcd\x20\x7e\xa2\x69\xfa\x13\x35\xc0\x81\x39\x78\x0a\x80\x6f\xa1\x24\x58\xb3\x8c\x92\xd2\x65\x39\x41\x2a\x2d\xa6\x49\x5d\x82\xa6\x94\x30\x7b\xa6\x11\xce\xba\xa6\x47\x08\x3b\xad\x20\x82\xff\x9a\x72\x78\x0a\x7a\x9f\x34\xbd\xca\x38\x7e\xa5\x4d\xba\x08\xc2\x35\xbb\x20\x1f\xef\x4c\x47\xc3\x36\x0d\x87\xf9\x47\x9a\xa6\x7f\x04\xaf\x9e\xd6\x85\x34\xfd\xa8\xee\x88\x9f\x14\x30\x91\xdb\x8c\x7f\xf5\xae\x9d\x9f\xa8\x8e\x43\xfc\x91\x0e\x7e\xa2\x84\xf7\x7c\x85\x7e\xa2\x44\xd8\x5c\x80\xe6\xb0\xf8\x7e\x46\xff\x01\xb5\xe9\x7e\x78\xd3\xa7\xe3\x43\xfe\xa8\x5a\xc7\xbf\xa1\x7d\x97\x42\x17\xaf\xe4\x47\x87\xfc\xc9\xa7\xe9\xb8\xb4\x3a\x76\xec\x3b\x73\x93\x52\x72\xb3\xbe\xa7\xbb\x7c\x26\x8f\xc6\x7b\x2f\x25\x5a\x35\xfb\x8b\x51\x26\x28\x85\xa9\x32\x65\x4d\x7c\x87\x8d\xae\x29\xdc\xc4\x22\x2a\xfb\x21\x6c\x0d\x70\xe5\x54\x9e\x15\xea\xef\x1e\xee\x04\xdf\xef\x87\x6c\xbf\x07\xb1\x9e\x46\xfd\xef\xe9\xb8\x29\x3f\x96\xd5\x27\x8b\xbd\x30\xe3\xd3\xde\xb3\xe0\xc8\xe8\xae\x7b\xb8\xd0\x14\x97\xa4\xc7\xb9\x89\x99\xf0\x04\xef\xa9\x88\xc5\x95\xbb\x20\x76\xde\x71\x38\xb5\x9a\x1d\xf2\x27\xc8\x94\x33\x67\x0b\xe4\x52\x3f\xda\xbe\xfc\x67\xb7\x2f\xf2\x7a\x25\xf3\x05\xce\x09\xc5\x0d\xf1\x7b\x70\xd9\xf8\xfa\x14\xb6\xc9\x9c\xba\x28\xe3\xa4\x31\xb2\x2f\x4a\x53\x57\x10\x3d\x78\x6f\x74\x10\x69\x3e\xbe\xcd\x77\x59\x24\x78\xe9\x15\xc4\x34\xb7\x68\xa0\x10\x0a\xb5\x21\xbc\xc2\x85\x31\x81\xcf\x5f\x65\xb9\x3a\x4a\x0b\x64\xac\x0e\x77\x90\x79\xf1\x15\xb0\x63\x0a\xf3\x09\xae\x81\x95\xe7\x9a\x91\x31\x72\x0d\xef\x11\xca\x09\x28\x36\xf3\xe8\x4a\xe6\xbd\x95\xcc\xe7\x7c\x31\xed\x3d\xce\xb8\x07\x89\xb8\x21\x6b\xdb\xf6\xca\x05\xa6\x6f\x10\xea\x2d\x28\x1b\xe7\x85\x64\xc3\x66\x7f\x0d\x90\x04\x72\xb9\x42\x39\x36\x6f\x51\x8b\xa6\x39\xb9\xcf\x72\xa4\xd1\xb9\xac\xbf\x9b\x3f\xad\xe0\x2e\x41\xea\xf1\x8f\xbb\x75\x2e\x3a\x41\x56\xe1\xa5\x8b\x2e\x3d\x76\x28\x47\x71\x64\xe5\x8c\x23\x35\x6f\xf3\x66\xfc\xf7\x8a\x95\xb0\xe0\x78\xbb\x40\x58\xcf\xe7\xd6\x5a\x79\xc0\xa7\xc2\x4e\x99\xe7\xcb\x9b\xfb\x28\x0a\x64\xe7\xbb\xe4\xca\xdf\x48\x7d\x6f\x83\xb1\xbd\x0b\xba\x42\x6d\x37\xcc\xf1\x37\x8a\xc4\xfd\x81\x92\x67\x7f\x1b\xc3\x3e\xfb\xcd\x33\xcf\x07\x53\xf8\xdc\xa1\x17\xf4\xf6\x90\xa0\x01\x7f\x3e\x99\x89\xcc\xc1\xfb\xfc\x81\xe2\x64\x0c\xf4\x77\xea\xf1\x4d\x5d\x07\x5c\x5c\x13\xee\xea\x69\x13\x84\x1b\x62\xc2\x9e\xf9\xb8\x6e\xae\xd5\x6a\x66\xe5\xe8\x02\xd7\xc8\x1c\x0b\x9c\x20\x9d\xfb\xd3\x2f\x53\x8f\x2e\xd0\x40\x8c\x82\x67\x13\x5c\xa2\x41\x4e\x0a\xbd\x86\x0a\xcc\xa2\x79\x9e\x5f\xa2\xac\x22\xab\x60\x04\xe8\xf9\x64\xc6\xb2\x4c\x8c\x8a\x79\x33\x1a\x2d\x46\x2b\x14\x1b\x0b\xb5\x05\xf0\x0a\x57\x98\xa1\x36\x4b\x12\x0c\xf0\x12\xbe\x7b\xa9\x08\x4c\x24\x43\x1a\xd0\x88\x87\x0e\x59\xed\x33\xf9\x4a\x92\xf2\xc9\x80\x52\x36\x80\x12\x55\x11\xdb\xbf\x68\xa3\xab\x95\xae\x2c\xa9\x15\x22\xcb\x71\xa5\x0f\xc7\xb0\x44\x2e\xd1\x6e\x31\xd6\x09\x1e\xb3\xdf\x9a\x53\x75\x56\x53\x71\xb6\xc9\x59\x41\xd7\xd3\x33\xb5\x8f\xe4\x51\xdd\xe5\x62\x7b\x96\xfc\x76\xc4\xdc\xbe\x1c\xfd\x36\x39\x5b\x55\x4d\xb1\x86\x14\xbd\xd7\xf4\x6c\x53\x35\xe5\x7a\xfc\x5b\xa3\x69\x06\x0f\x46\xed\x56\xdd\x13\xf3\xad\x3b\x6b\xde\x07\x19\xaa\x67\x59\x6d\x7c\x46\x00\x83\xce\xfa\x7c\x29\x1f\x6a\x79\x43\xa0\x08\x56\x08\x7d\xe4\x82\xa8\xa9\xf8\xb1\x43\x59\x32\xf0\x2b\xe5\x58\x63\xed\xfd\x45\x77\x09\x4d\x63\xa5\x75\x62\x4e\x5f\xc2\xe4\x22\x43\x0f\x4a\xc9\xd6\xc1\x25\xb0\x25\x2c\x32\xc0\x65\x06\x49\xbd\x2d\x77\xa3\x40\x01\x90\x53\xd1\x93\xe1\x05\xe6\xe3\x25\xa7\xf9\xfa\x4d\x59\xdc\xeb\x9f\xce\x47\x5c\x33\x6d\x2a\xd5\xc1\x0b\x60\xc0\x74\x99\x1b\x2a\x04\xe5\x5e\x81\xda\x7f\xe0\x32\x61\xcf\x85\x45\xeb\x5b\x84\x11\x9e\x8e\x3a\xaa\xc0\x4e\xe5\x3a\xd8\xd3\x58\x30\x29\x38\xfa\xcd\x4f\xb4\x9b\x9d\x01\xa5\x88\x57\x5a\x21\xd7\xc9\xca\x11\xed\x9c\x54\x03\xf7\x02\x38\x82\xfd\x9e\x0b\x6f\x00\xb9\x5c\x86\xb6\xf5\xf5\xbc\x59\x49\x38\x1a\x2f\x77\x7a\x51\xf4\xf5\x54\x7a\x3c\x26\x07\x3f\xf6\x6e\x46\x3e\x29\xea\x59\xb0\xab\x9e\x0c\xc6\xba\xf2\xb5\x25\x4c\x6c\x93\x79\x32\x9b\x2a\xe6\x67\xe2\xd3\xe5\xf0\xd0\xc1\xdb\xda\xf9\x71\x4e\x66\x37\x54\x40\x74\x41\x4d\x45\x10\x2f\xa1\xe1\x69\xcd\xdc\x78\x49\x7e\x73\xfb\x52\xcf\x45\x4c\x27\x9e\x07\x39\x01\x7b\x27\xa9\xf2\x42\x33\xf9\xac\xf2\x36\xdf\x94\xb7\xa8\x6d\x31\x1b\xdb\xcd\xe7\x5d\x85\xaa\x59\xb7\x2d\x27\xb2\xa0\xdd\x96\xbd\x82\x6e\xc3\x42\xc1\x5d\xcf\x3f\xc8\x14\xec\xac\x99\x08\x73\x2a\xca\x6f\x97\xb1\x8f\xad\x1c\xea\xc8\xa9\x3c\x54\x4e\xd2\x0c\x81\x51\xbb\xc2\x1f\x48\x79\xf2\x0a\x7f\x3e\xf1\x22\x39\xad\x73\xa1\xcd\xfc\xe4\xcb\x80\x72\x32\x63\x8a\x1b\x2a\x3b\xb9\x3e\xe0\x87\x63\x93\x1f\xd9\xa9\xd3\xda\x70\x77\x86\xfd\x90\xe3\x47\xcd\x83\x1e\x58\xa7\xbe\x00\xee\xfb\xbe\xbd\x16\xab\x27\x4d\xbf\xb3\xd0\x1f\xa0\xf6\x84\xe5\xbd\xe9\xa5\x41\xb1\x90\xc8\xd6\x32\xd8\x4d\x62\x21\x28\x57\x3b\x45\xe9\xfb\x15\x3b\x4a\x6e\x75\x0f\x59\x27\x2d\x32\x33\x11\x33\x9c\xc4\x6b\x30\x12\x95\xbc\x80\x3c\x9f\x5c\xa3\x37\xc7\xf9\x61\x2b\x7e\x6f\x43\xe7\x69\x9a\x87\x21\x1c\xf8\x07\x6f\xd4\x15\xe4\x4d\x86\xf6\x0e\x42\x20\x06\x5b\xd6\x2c\x10\x5c\x89\xef\xf4\x43\x9d\x7e\x5e\x76\xdd\x3f\x80\xb3\x70\xda\xd4\x4f\xf3\xeb\xbd\xbd\xae\x94\x69\xa6\x56\x00\x8f\xef\xd5\xc2\x07\xaf\x56\x45\x75\x7d\x4d\xb9\xfb\x02\x36\x7e\xbf\x07\xbd\x3c\x08\x91\x5b\xfb\x45\x5e\xca\xcb\x57\xde\xd9\x72\x48\xe7\x55\x59\xdc\x9f\x99\x33\x24\xef\x6b\x21\x6f\xe9\xaa\xd4\x37\xf9\xf4\xec\xb7\x23\x25\x23\x97\xf5\x8e\xae\x04\x88\xc7\xb2\x79\xd7\xa7\x43\xf3\xa6\x83\x58\x40\xd6\xbc\x33\xde\x9c\xee\x8a\xf6\x49\xc9\x31\x00\x4a\x6f\x3e\xed\x0e\xd1\x53\x10\x4e\xd9\x51\x57\x4d\x7b\x9e\x06\x9d\xdf\x84\x82\x80\xdd\x6d\xcd\x5a\x02\xb4\xd0\xdd\xfd\xaa\x84\xb3\xb2\x8c\x6d\x9b\x3b\x9d\xce\xef\xd6\x6c\x55\xb5\xfb\x71\x4d\x2a\x2f\x3f\x11\x23\x07\x46\x86\x6b\xd0\x72\x80\x97\xad\x3d\x31\x3a\xf8\x3e\xf4\xbe\x31\x72\xf1\x7e\xef\xef\xe8\x06\x29\xb8\x24\x70\x28\xc2\x8a\x3f\x69\x10\x66\xb2\xbf\x7d\xdd\xae\xf3\xa7\xee\x10\x22\x47\x40\xc4\x01\x02\xc2\x3d\x02\xa2\xc3\x03\xfc\x6b\xcf\xb4\xd5\xbd\xf9\x50\x8b\x79\x9b\xfd\x1e\x1c\xa7\x7b\x88\x28\xa5\xd2\x21\xb2\x83\xac\xd1\x89\x69\x76\x8f\x5e\xe7\x65\xec\x3a\x2f\xa3\xd7\x95\x7e\xb9\x54\x57\xa0\x2d\xa2\x83\x4f\x5b\x5c\x46\x6f\xc3\xce\x57\xa6\x88\xf7\xd5\xc1\x4b\xcb\x60\x5e\x51\xa2\xbf\x46\xe3\xce\x1d\xe8\xc5\x36\xbb\xfa\x6e\xbb\xd9\xf9\x94\x2e\x49\xd7\x61\xc6\x38\x89\xe9\xdc\x85\xb2\x27\xec\xf7\x0f\xed\x34\xd3\x3f\xb4\x5b\x4e\x54\xfd\xca\x8d\xfa\x55\x93\xed\x43\x1a\x58\x33\x7a\x5d\xac\x6d\xb1\xfa\xcc\x33\x5a\xf5\x74\x6a\xe6\x1b\xcf\x48\xa2\x74\xb7\xbc\xcd\xa0\x27\x9f\x78\xbe\x53\x10\xaf\xef\x9b\x1d\xe5\x28\xfb\x4e\x7f\x8d\x3c\x75\x55\x25\x7e\x45\xd5\xae\x1e\x0d\x68\x77\x67\x1a\x67\xb8\x14\xd9\x7c\x81\x30\x13\x28\x03\x45\xaf\x98\x5f\xc8\xff\x7d\xb5\x40\x53\x57\x42\x40\x01\xe0\xf4\x73\x41\x2a\x31\xbe\x66\xe5\x5a\x39\x46\x0c\x22\xc0\x3f\xb9\xda\xf9\xb5\xe8\x44\x52\x3c\xb4\xda\xea\xf1\xff\x9f\x23\x51\x95\xf4\xcf\xf9\xb1\x6f\x54\x81\xec\xe4\xed\xab\x2d\x15\xdd\x85\x74\xe0\xe7\x76\x07\x0f\xec\x06\x6e\x4f\xd9\x33\xb8\x78\x54\x06\x33\x07\x32\x2e\x89\x29\xcd\x0f\x01\x01\x24\xe4\xfb\xe6\x62\x81\x7f\x5d\xb1\xe2\x24\x99\xa2\x63\xb7\xe7\x10\x12\x6d\xac\x8c\x75\x73\x6b\x03\x86\x8f\xdd\x06\xc6\x55\xc8\xfb\xa2\x44\xf8\x44\xe2\xce\x5c\xe8\x40\xdc\x35\xc3\x54\xeb\xee\xf1\x3e\xcb\xe9\x4f\xfd\x19\xd7\xb8\xd6\x80\x00\xa0\x54\x6d\xb8\x57\x53\xe8\xb8\xa9\xd8\x0b\x3b\x84\x03\xac\x81\xe2\x4a\x08\x21\xb5\xb8\xcc\xca\xfd\xbe\xe7\x37\xf0\xf5\xa4\xc7\x24\xe3\x32\x4d\xe5\xcd\xee\xd8\x68\xe0\x86\x8e\xb6\x03\x8c\xb0\x89\x13\x1f\xca\xe6\xa4\x50\xaa\x2f\xe9\xba\xc3\x91\x72\x84\x1e\x63\x48\x45\x38\x1b\x7a\x16\x0f\x8a\x5b\xb2\xaa\x95\x90\x45\xfa\x27\xd3\x16\xd8\x08\x7b\x2f\xdb\x53\xb0\x12\x87\x19\xc9\xe4\x38\x23\xf9\xdb\x64\x24\x46\xc9\x6f\x7d\x46\x32\x89\x30\x92\xb6\xa9\x8d\x38\xcc\x3d\x7a\x6c\xa3\x97\x56\x41\x38\x3a\xa1\xc1\x98\x25\x9d\xf0\xd0\x5f\xd9\x26\x4b\xca\xe6\xf6\x9a\x72\x3f\x72\xd3\x33\x5c\x0e\xd5\x2f\x13\xe6\xe1\xe3\x58\x39\xab\x46\x88\xad\xae\x6c\x8e\x28\x5a\xb7\x01\x5a\x1f\x96\x6d\xbc\x69\xe3\x20\x12\xa8\x57\xb9\xeb\x8c\x56\x30\x46\xdb\x67\xba\x7d\x1d\x71\x18\xef\x81\xe1\x17\x87\xcc\x65\x9a\xb4\x13\x06\x78\xd3\x66\x76\x61\xf6\xf6\xfb\x18\xa0\x18\x68\x25\x9e\xfd\xed\xfd\xb3\xb1\xa0\xb5\x05\x15\xdb\x89\xe3\x66\xec\x25\xa7\x37\xac\x16\xfc\x9e\xcc\x17\x26\x1b\x73\xc5\xe9\x0f\xec\xfa\xfb\x72\x4d\x3f\x93\xa3\x8e\x0a\x92\x45\x50\x30\x7b\xf7\xdf\xdc\xbf\xce\x6f\xe9\x01\xc0\xce\xb0\x25\xcc\x89\xd1\xf2\x60\x1d\x81\x60\x42\x0f\xc4\xbc\x5c\x8c\x4b\x59\x91\x9f\xb7\x62\x5e\x2e\x94\x77\xa5\xfc\x3e\x02\xe6\xee\xcb\x0b\xa6\x11\xb3\x28\x56\x50\x0d\xfa\xa9\x4c\x88\xdc\x39\x43\x06\x83\x1e\x8d\x8c\x38\x68\x6b\xb3\xc1\x17\x13\xfc\x20\xfb\x37\xa5\x58\x27\x70\x98\x8a\x16\x21\xbf\x7b\x2f\x54\x4d\xb2\xb1\x58\x7e\x3b\x53\x0c\x3a\x3f\x54\x21\x0d\x6b\xfa\xae\x3f\xb6\x8e\xff\x6b\x6c\x0c\x80\xf8\xdb\x9d\x5e\xab\xd9\xe6\x87\x46\x21\xf0\x05\x42\x16\x10\xc5\xe1\x24\xee\x14\x2b\x73\xab\xf8\xac\x9d\x18\xf8\xc0\x89\xb7\x02\xdf\x46\x07\x99\x25\x60\x84\x4d\xf0\xca\xd0\x18\x75\x4b\xde\x89\x5e\x62\x74\x29\x51\xbd\x71\x5a\x56\x7c\x2f\xc8\xf0\x02\xdf\x08\xf2\x20\xc5\xa9\xe9\x04\x2f\xa3\x48\xa1\x53\x59\x88\x8a\xb3\xe8\xcb\x6e\x22\xab\x68\x21\xb0\x02\x1f\xf8\xde\x46\x22\xd6\x54\x8c\x46\xf8\x48\x2d\x92\xa7\xc5\xd7\xd0\xe7\xa5\x20\xf3\xc5\x20\x00\xc0\x5c\xaa\xd9\xfb\x24\x62\x2e\xb5\x8e\x36\xbf\x14\xca\x85\xe3\x10\x2c\xaa\x75\x94\xa2\x58\xf4\x10\x41\x31\xef\x42\x5f\x3f\x96\xfd\x68\x93\x65\x94\x80\x0f\x2e\x7f\x51\xad\xe9\x95\xc8\x26\x08\x7d\x4d\xfe\xfd\xdf\xd2\x94\x3e\x27\xff\x7b\x62\x9c\xaf\xae\x94\xdc\x39\xc8\xd3\xd4\xe0\xf6\x2a\x68\xd3\x1c\xa2\x1d\x1d\x39\xfa\x0c\xe4\x28\xeb\x1a\x76\x9c\xe1\x42\x1f\x3c\x55\xad\x70\x46\x84\xc1\x27\x31\xcf\x17\x84\x5f\x86\xf5\x73\x9c\xbb\x50\x9b\x5a\x39\x73\xb3\x4d\x76\x27\x14\x8b\x22\xc5\x6a\x03\xfd\xc5\xe7\x35\x8c\x48\xcc\xd9\x82\xd4\xb8\x49\xd3\x66\x2c\x0c\x5c\x2c\x21\x6f\x84\xa7\x03\x0d\xf1\x59\x1b\x84\xc2\x56\x1b\xec\xf5\xcc\x33\xf8\xc9\x2a\x3d\x44\x55\x65\xee\x05\x45\x40\x83\x90\x5c\x0b\x56\x36\x74\xa0\x20\x90\x1a\x84\xe5\xe0\x1b\xf0\x44\x33\xe3\x26\xac\x45\xd9\x9c\xda\x7e\x65\x68\x81\x15\xd4\x15\x24\xb4\x76\x91\x3c\xc2\xaa\x3b\x0f\xed\x84\x81\x72\x42\xce\xe4\x8e\xc1\x87\x51\x74\x2f\x10\xa6\xfb\xfd\xb5\xf0\x09\xee\x52\xe0\x48\xea\xa8\xcf\x42\xc5\x91\x0c\x60\x0f\x7b\x6b\xfa\xc6\x75\x26\x9c\xb7\x40\x0a\x75\xd8\xfa\x33\x3a\xcd\x22\x6e\xee\x60\x74\xba\x57\x8a\x47\x39\x3e\xec\xa7\x3e\xea\x02\xe6\xa2\x6e\x5a\x22\x3a\x58\x57\xf2\xcb\x8c\xc7\x53\x38\x65\x1c\x49\x96\xcf\x08\x01\x8e\xaa\xec\xf7\x5c\xae\x7e\x87\xd6\x28\xeb\xe7\xa0\x93\x80\xa9\xdf\x8b\x07\x41\x92\xac\x6e\xae\x01\x7c\xf8\xac\xda\x9c\x01\x03\x84\x12\x63\x7d\xfd\xb4\x65\x05\xf5\x93\xad\xda\xc8\x89\xfd\x3e\xc9\xb4\xa1\x1a\x25\xad\x71\x55\x09\xb6\x99\xf1\x2d\xf1\x23\xb3\xae\x0c\x73\xc6\xef\x3d\x78\x2b\x23\xae\x38\xad\x70\x1f\x0d\x30\xf4\xd1\x30\x4f\x51\x9a\x72\x7f\xcf\xa6\x29\x6f\x57\x00\x84\x51\xa2\x87\xb6\x8d\xe0\xf6\x7e\x52\x53\xfe\x51\x74\x81\x62\xb4\xd9\x3f\x4c\xe3\xe2\x45\x44\x79\x9c\x48\x0c\x5d\x43\xf2\x20\x90\x7a\x81\x69\x34\xde\x34\xa5\x43\x62\x50\x84\xd5\x8f\x37\xda\x3d\x5e\xfe\xfd\x1a\xd8\x20\xf5\x37\x34\xa5\xfe\xfc\x36\x17\x54\xfd\xa5\x8e\x90\x17\x4e\xf5\x48\x07\x94\x59\x29\xfa\xa6\xa6\x2a\x20\xfd\x85\xc0\xef\x04\x79\xf0\x72\x5d\xbd\x15\x5d\xe3\x2b\x87\xf8\x0f\x48\xd2\x6d\x59\x10\xba\x80\xf0\x07\x36\xfb\xa8\x09\x13\x53\xd1\xc7\x53\xf8\x3f\x66\x9e\x87\xb4\xf0\x83\x66\x03\x0f\xfc\xb9\x58\xb8\xa4\x3e\x8a\x40\x96\x3d\x1f\x18\xe2\x81\xc0\x10\xa2\x3d\x6b\x00\x99\x0a\xac\xa1\x31\x5c\x93\x7c\x06\xdb\x4e\x0a\xcc\x8a\xa0\x4e\x3d\x87\x93\x6f\x55\x7f\x34\xa6\x3c\x60\x23\x3e\x7c\xca\x4a\x34\xcb\xf2\xb9\x58\x44\xb2\x7d\x5a\x5f\x4f\xdc\x90\x65\xa6\x6d\xc9\x59\x73\xc6\x34\xb6\xa7\x64\x99\x85\x1f\x9a\xd7\x18\x5d\x91\x1b\x5c\x90\xc8\x48\xe1\x58\xd7\x64\x99\xc1\x0c\x20\x5c\xef\xf7\x59\x0d\x2e\x22\x02\x4b\xa1\xcf\x01\x8c\xee\xf7\xc3\xac\xee\xb4\x14\x4e\x59\x81\x57\xc4\x1b\xad\x6d\x1b\x5b\x7b\x04\x74\xb8\x20\x4e\x9b\xdf\xd8\xbf\xc2\x0f\x6b\xfb\xa1\xfa\x0b\x4d\xed\x9f\x53\xf7\x7a\x35\xf4\x46\xb8\xdf\x17\xea\xa7\xfe\x42\x7b\xa4\x84\x37\x7e\xe3\x52\xab\x59\x7b\xdf\x0a\x6f\xac\x79\xaf\xc0\xdf\xd0\x6c\x83\x4b\xe1\xf9\x07\xc9\xfd\x84\x4b\x5c\xe3\x5c\xd2\x8b\xda\x03\xf9\x9e\xea\x5b\x49\x73\x75\x02\x7d\x4d\x26\xfb\x7d\xa2\x8e\x2a\x2d\x73\xa7\x86\x65\xb4\x4e\x74\x72\x8d\x5b\xca\x6f\x7a\xcf\x67\x5d\xdf\x60\xb7\xe5\xe5\x1a\xed\xf7\x80\xb3\x97\xab\xe9\xbd\xcd\x3f\x52\xed\x58\xc7\x90\xf1\x07\xea\xbe\xe1\xc8\x69\xb3\x5b\xbd\xcd\x6a\x34\x2d\xd2\xb4\xf0\x3b\x7c\x7e\xd1\x6d\xda\x3a\x82\xe4\x70\x2a\x54\xd3\xb0\xd1\xac\x2f\x83\x8a\xad\x03\x68\x04\x3e\xce\xeb\x9a\xdd\x94\x28\x7b\x68\x71\x8e\x70\x43\x3c\xb8\xd0\x42\x21\x34\x98\x8b\xda\xe3\x2f\xb3\x42\xb3\x0e\x2b\x52\xce\x8b\xc5\xe0\x83\xc8\x56\x68\x96\x35\x64\x38\xc1\xf5\xbc\x58\x10\x38\xaa\x05\x5e\xe1\x1c\x3f\xb4\x08\x4d\xe1\xe1\xca\x2c\x4a\x23\x37\xed\x78\x59\x37\x3b\xca\x49\x35\x7e\xf7\xe6\xcd\x07\x84\x6b\x6f\x98\x1f\x84\x8a\x5e\x2c\xc9\xdf\xcd\x19\xab\x15\x5c\x9c\x5b\x3e\xb5\x94\xbe\x0b\xff\xeb\x1e\xbd\x31\x97\x92\x97\x28\x81\x23\xb3\x0e\x37\x41\x0e\x24\x8e\x0e\xc4\xf4\xd4\xa4\x9c\xfd\x7e\xfa\x0d\x6e\xc8\xe4\xb2\x79\xce\x54\xb0\x99\xb9\xfc\x9b\xd1\x08\xd5\x19\xc5\xfa\xf1\xbc\x59\xe8\x94\x01\x98\xe9\xe4\x0f\xa1\xe3\x9e\x4b\x05\x51\xce\xbe\x9d\xbe\xc6\x2b\x32\xb9\x5c\x3d\xcf\x4d\x75\xab\xd1\x08\x15\x19\xc5\xf9\x7c\xb5\xb0\xb9\x07\x5c\xe8\x85\x37\xbe\xd8\x7d\x95\xa6\x76\x06\x24\xef\x12\x73\x44\xb5\x45\x4a\x90\x90\x5c\xf4\x83\xef\x85\xa4\x73\x64\x3c\xb4\xb8\x91\xff\x2b\x3a\xb6\xc6\x95\x62\xd0\x83\xe5\xc3\x7d\x77\x24\xcf\xb5\xdd\x25\xce\xc3\xeb\x20\x15\x22\x7a\xd0\xe0\xfe\xf2\x4a\xc0\xfa\x6f\x36\xa7\x0b\x6b\x8e\xbe\x25\x93\xcb\x5b\xc7\x6c\xdd\x2a\x69\xb6\x26\x62\x7e\xbb\xc0\x5b\xc2\x71\xd6\x90\x6c\x4d\x6a\xe4\x51\xb6\x6f\xc4\x6c\x6b\xf3\x84\x67\x6b\x34\x7b\x27\xa6\xd9\xd6\xe6\x1e\xcf\xd6\x08\xaf\x8d\x0d\x81\xd1\x1a\x4d\xd7\x68\x48\xc8\x3b\x48\x40\xdb\x28\x66\x0f\xb6\x7e\x05\x7a\xbb\x57\xf2\xc0\xc3\x87\x69\xda\x7d\x22\x39\xd5\x15\x79\x2b\xb2\x43\x44\x03\x37\x00\x58\x87\x37\x50\xa8\x47\x3b\xcc\xeb\x06\x35\xfd\x13\x26\x6f\x26\x65\x9e\x2f\x10\xfe\x56\x64\x15\x2e\x70\x33\x2f\x16\x7a\x7a\x57\x78\x83\xd0\xa0\xf7\x5d\x62\xf8\xe3\x04\x41\x42\x65\xcb\xc6\x3b\x8e\x5e\x03\x70\xd5\x2a\xcb\x4b\x9d\xa6\x19\xcd\xcc\x0f\x6f\xed\x24\xf9\xfe\xc4\xc4\xb6\x6a\x44\x9a\xba\xbf\xad\xe3\xfa\x0e\xa1\x36\x13\xb8\x80\xab\x8f\x62\x2f\xd1\xc9\x96\x4c\x2e\xb7\xcf\x57\x66\xd1\xb6\x6a\xd1\xe4\x1c\xd5\x82\x37\x2b\x51\xf1\x64\x08\x9e\x96\xab\xf9\x76\x01\x4e\x96\x9d\x41\x70\x04\xf7\x7b\x4e\xc0\x8f\x80\x91\x46\xfe\xb3\x19\x5f\xfd\xf0\xfd\xd5\xfb\xe5\xab\x97\x1f\x7e\xff\xe6\x5b\xa4\x52\x28\xa5\x29\xf3\x2f\xb5\xef\x84\x8e\x8f\x5d\x93\x17\x02\xe0\x75\x6b\xdc\xa0\x41\x4e\xd6\x90\x7e\x0b\x33\xb2\x56\x5e\xe6\x6d\x94\x25\x60\x36\x81\xeb\x50\xf1\x07\x1c\xcd\xbe\x57\x89\x8e\xe0\x34\x32\x34\xd5\x3f\x29\x74\x0c\x61\x50\xca\x71\x9c\x63\x86\x0b\x3f\xbf\x6b\xd8\xd9\x34\xcd\x5e\x74\x95\x97\x96\x4a\xe1\x8a\x08\x9d\xc2\x53\xb2\x9a\x38\x27\x7c\x5e\x2d\x70\x4d\xca\x79\xd5\xf7\xe2\xcd\x0d\x7b\xa0\xf2\x48\x7b\x3c\x38\x83\x1e\x57\x48\xf2\x1f\x84\x59\x80\x37\x34\xcd\x72\x4b\x32\x09\x9d\x57\x92\x4f\x78\x90\xb3\x31\xcd\x35\x38\x60\xdd\x6a\x93\xca\x77\x02\xff\x22\xf0\xef\x05\xfe\xe6\x90\x72\xcb\xa9\x5b\x76\xb1\x64\x54\x21\x5b\xd6\xcb\xe9\xe1\xad\xb1\x17\x33\x83\x94\xcd\x29\x94\xbf\x15\xec\x70\x5d\xdd\xd2\xa8\x7f\xad\x80\x58\x62\xd4\xda\xf8\x82\x87\xd6\x85\x82\xc4\x72\xee\x6b\x21\x7a\xce\x17\x83\x57\x22\x63\x68\x56\xce\xf9\x82\xfc\x42\x33\x86\xa6\xf0\xa7\x5c\x51\x48\x9a\xe3\x16\x31\x33\xde\x0b\xea\x6c\x90\x1f\x85\x8d\x23\x81\x5c\xa1\x2f\xdc\x86\x0e\xc3\x91\xf4\x51\x31\x11\x49\x54\xf3\x2f\xfe\x9c\x4a\x49\x71\x32\xf8\x95\x6d\x72\xf2\x0b\xd9\x83\x4c\x38\x5c\x0f\x6a\x7a\xdf\xb7\x26\xf5\x3d\x0a\xb9\x17\xaa\x62\xa2\xd3\x67\x7c\x9a\xd9\x53\x0f\x64\xaf\x0e\x96\x84\x7a\x5b\x01\x2c\x06\x3a\xef\x0c\xb8\xf9\x0d\x8e\x28\x39\x39\xad\x76\x34\x9a\xfb\xf0\xb1\x4c\x44\x46\x3b\x63\x33\x10\x75\xf2\x0f\xb1\x4d\x06\x1e\xef\x16\x91\xc4\x62\x37\x38\xaa\x6f\xf8\x33\x88\xb8\xf6\x57\xcf\x2b\x33\xe8\xee\x74\xbf\x9c\x9e\xd6\x39\xd3\x6e\xf7\xde\x43\x13\xff\x6e\x8a\xb8\x54\x6e\xfe\x63\xef\x6f\xc3\x06\xfe\x08\x39\x8c\x95\x15\x10\x02\xed\x77\xbb\xe2\x3e\x96\x31\x0a\x2e\xec\xb9\x2c\xb7\x40\xb6\xe0\xdb\x9c\x0b\x96\x17\xa7\x94\x5f\x53\x11\xa4\x81\x0a\xb3\x3c\x0c\xbd\x28\x4d\xb3\x0d\x1c\x9c\xbc\x9c\x4c\x9f\xe8\xd2\xae\xcf\xad\x62\x02\xcc\xc9\x3c\x19\x78\x7c\xe6\xff\x98\x6a\xcd\xce\xc0\xea\x89\xac\xbc\x32\xbc\x18\x18\xa8\x6c\xe8\x8b\x9f\x8b\x73\x32\x30\xda\x32\x35\xb1\xe0\x58\xe2\xdc\xac\x42\x7a\xe2\x45\x5c\x99\xcc\xa9\xc8\x41\xf2\x98\x10\xc0\x38\x12\x85\x88\x46\xd9\x5a\xae\xc3\x06\x0f\x1a\x52\x10\xdd\xe5\x6a\xf3\xe9\x65\xc1\xbc\xbf\xeb\x4b\x6f\xd7\x73\x93\x8e\x8f\x43\xbc\x44\x39\x67\xfe\xae\x67\x0b\xcf\x7a\x60\x1a\x2d\x31\x40\x4f\x00\xce\x57\xdf\xf8\xec\x2f\x97\x75\x86\x3c\x35\xc5\xcb\xcc\xff\x61\x17\xeb\x9f\xb4\xe2\xe1\x7a\xfb\x27\xd4\xc1\x13\x06\xd7\x87\x5f\x04\x47\x02\x63\x21\x5c\x30\x83\xd8\x7c\xa5\xa2\x14\x96\x19\x32\x7f\x1d\x0d\xd0\xeb\x6e\x17\x29\x67\xba\x78\x51\xc3\x72\xf5\xa6\xdc\xaa\xb5\xce\xa0\x0d\x94\x74\x63\x45\x7f\xf4\x6c\x78\x34\x4d\x8d\x05\x6c\xbf\x9f\x60\xeb\x89\x2c\xa7\x40\x85\xa3\xf8\x14\x71\x10\x42\x4f\x09\x5f\x61\x4d\x21\xdd\x9e\xa4\x92\x01\xb3\xf4\x8d\x98\x31\x98\xf4\x6f\x84\x21\x80\x0c\xb5\x4e\x72\x36\x19\x9f\xbe\x91\xfc\x80\x6f\xea\xf6\x12\x89\xf5\xf8\x9c\xef\x44\x3f\x0a\xd3\x31\x37\x84\xb6\x08\x87\x79\xa5\x7e\x89\x54\xd2\x2d\x11\xcd\x37\x4b\x3f\x9d\x7d\x27\xd4\x45\x73\x2c\x8b\xd5\xef\xc5\xa1\xcc\xe7\x70\x87\x3f\x03\x69\x3a\xcc\x7f\x7e\x28\x6d\x79\x98\x1a\xbc\x97\x04\xdc\x24\xac\x8b\xf5\x16\xb8\x0b\x95\x22\xac\x5b\x46\xd6\x24\x5f\x13\xc8\x21\xf6\xe6\xcf\xaf\x5f\xbe\xf3\x9d\xce\x81\xf2\x08\x17\x93\x06\x05\x00\xd8\x5e\x15\xe5\x87\x86\xc7\xab\x46\xb0\xf2\xe6\xb4\x01\x9a\xc2\x05\xbb\x7e\x46\x3f\x8b\x67\xab\xaa\x14\xbc\x2a\x0a\xca\x1f\x2d\x5e\x54\xab\x5c\x8e\xe4\x59\xbe\x63\xa7\x17\x2e\xab\x92\x2e\xcd\xaf\xd3\x3f\xdb\xe6\xf5\xf6\x4b\x3e\x63\xb5\xa8\xf8\xfd\x17\x7c\x99\x37\xa2\x3a\xfd\xb3\xfa\xbe\x16\xf4\xf6\xd9\x0d\x2d\x29\xcf\x05\x5d\x3e\x61\x1a\xf5\xa7\xee\x8b\xe5\xa6\x3a\xf9\xab\x75\x5d\x9c\x5a\x54\x3e\x3a\xbd\x3b\x50\xfa\xd4\xc2\x3f\x37\x94\xdf\x2f\x77\x39\xcf\x6f\x1f\xdf\x65\x00\x0a\xb9\xa2\xf6\xe1\xd3\x3e\x78\xc2\x84\xe6\xab\x2d\x3d\x29\xab\x3f\x5e\xe3\x1d\xbe\xed\x1c\xeb\x43\x20\xe9\xc9\x0f\x76\x4f\x74\xc2\x7a\xe3\xce\x7f\xdc\xd8\x70\xdb\xf6\x30\x2e\x7c\xf2\xba\x2a\xe9\x13\x2b\x2e\x4f\xaa\xf8\xf7\x79\xbd\x7d\x62\xc5\xec\xb4\x8a\xd5\xc9\x7a\x62\xdd\xd5\x49\x75\x5f\x35\xa2\x7a\x62\xc5\xf9\x49\x15\x9b\xf3\xf9\xc2\x3b\x9e\x27\x55\x5f\x7f\x61\xf5\xdf\xe5\x52\x48\xbc\x3f\xb9\x95\x83\x35\x1c\x6d\xd7\xd1\x8e\xef\xaa\x53\x47\xd4\x9c\x34\xa2\x77\x70\xe4\xbe\x7d\xff\xc3\x89\xb5\x16\x4f\xa8\xf5\xc4\x2a\x57\xa7\x57\x79\x62\x8d\x9b\x93\x6a\xfc\x93\x24\x6a\x6f\x35\x4d\x3b\xa9\xde\xed\xc9\x3d\x65\xe5\xcd\x7b\x45\xd5\x4e\xac\x7a\xfd\x84\x79\x7d\x5a\xcd\xbb\x93\x6a\xfe\xa6\x59\x7d\xa4\x02\xf2\x36\x9e\x58\xef\xad\x57\xef\x63\x9c\x4a\x8c\xf9\x38\xce\xb6\xdc\x52\x91\x7b\x37\x9f\xfb\x10\xea\xf2\xee\x52\xe0\xb7\x1f\xbd\x32\x62\x6c\x9e\xd6\xb7\x87\xac\x9e\x1e\x93\x8b\x16\xd4\x0f\xb4\x4e\x23\x7b\x88\xeb\x83\xa7\xf3\xe4\x67\x6f\x3b\x2d\xb0\xf7\x6b\x0a\x1a\xc6\xe5\xcf\xbb\x6f\x69\x41\x6f\x72\x41\xed\x03\x15\x28\xb5\xf6\x11\x0c\xbd\x94\x2d\x2e\x4b\xe6\x7c\x91\x48\x11\x11\x80\xf0\xcb\x19\x9f\x72\x0d\xcb\x3e\xc1\x25\x44\x4e\xd3\xb1\x57\x3b\xca\x98\x72\x65\xbf\xa1\x02\x41\xd4\xab\x94\x5d\x78\x5e\xd6\x4c\xb6\xf1\xa1\x82\x4d\x34\x8d\x88\xad\x94\xb8\xef\xc0\x0c\x9f\x88\x9c\xdf\x50\x91\x48\x09\x16\x32\x17\x87\x75\xec\xf7\xe1\x43\xdc\x4f\xd8\x86\x2b\x4f\x96\x61\x08\x6b\x78\xd7\xcb\x7c\x34\x42\xd5\x3c\xf7\xe5\xdc\x7c\xe1\x41\xbe\x68\xf7\x7f\x25\x9a\x73\xba\x61\x9f\xa1\x45\x29\x69\x5c\xf1\x1b\xdd\xbd\x4a\x8e\x4c\x47\x1d\x7f\xe9\xa0\xfc\xcf\xe5\x78\xf4\xef\x3f\x33\xb1\xfd\xef\x18\x4e\xeb\xdc\xa5\xf5\xc6\xf3\xf6\x24\x3b\xe5\x98\x85\x4c\x7b\xe4\x90\xad\xe9\x75\x73\xf3\x98\xc4\x13\x1e\x03\x2d\xae\x3c\x28\x65\xe7\xb4\xaf\x6f\x04\x89\x96\xdd\xee\x0a\x2a\x07\x0f\xed\x1b\x27\xbc\xf0\x69\xed\xd9\xee\xb9\x56\x9e\xea\xe9\xe1\x61\xb4\x63\xf8\xd9\xf4\xa1\x6d\xbd\x6e\x3d\x2a\x1a\x1d\xe3\xf4\xfd\x39\x81\x0a\xce\xaf\xf3\x6b\x1a\x67\xb3\xaf\x79\xf5\xa9\xa6\xfc\x9c\x96\x77\x8c\x57\xa5\xec\xd0\x29\xe4\xaa\x2b\x8b\xc6\xe9\x53\x53\x0a\x76\x1b\xe7\xc1\x15\xbd\xea\xac\xd9\xc9\xa2\x8d\xfc\xfa\x28\x63\x1c\x93\x70\x35\xbf\xf7\x36\x17\x5b\xb2\xc1\xea\x51\x5e\x6f\xe1\xf7\x16\x47\xb7\x44\x71\x38\x4e\x43\x79\x37\x69\x0f\x1d\x41\x8e\xc6\x6b\xa0\xce\x26\x21\x89\x5c\xb1\x04\x8b\xe3\x31\x05\x55\x2c\xa6\xa0\xea\x29\x40\x03\xd8\x5a\x5e\x55\xe2\xc7\x77\x3f\x60\x11\x51\x9a\xd3\xb1\x99\x40\xa0\x0c\x4d\x4d\xf9\xd5\x0d\x2d\x05\x2e\x09\x1d\x6b\x39\x13\x33\x42\xc7\xeb\x6a\x05\xfd\x7f\x55\xad\x29\xae\x08\x1d\xab\x00\x17\x9c\x4b\x7a\xa2\x1b\xa8\x49\x22\x05\xe1\x04\x17\x64\x78\xa1\xfc\x2f\x1a\x39\xa5\xdf\x35\x45\x21\xa7\x14\x69\x9d\x17\x3c\xaf\x9b\x1d\x6c\x48\xbd\x04\x72\x8c\x25\x32\xe6\xae\x4d\x96\x63\x81\x06\x2b\x42\xc8\x7a\x56\x93\x44\xf7\x24\x99\x26\xcf\xfe\x25\x21\x84\xac\x34\x80\x43\x36\xc1\x5f\xa1\x59\x56\x1a\x12\xf6\x5e\xe4\x82\x66\x0f\x90\x91\x71\xdd\xe2\x24\xc1\x6b\x84\xbd\xef\xd1\x34\x2b\xc8\x10\x32\x46\x34\xe6\x1b\xdd\x33\xbc\x46\xda\x94\xd8\xeb\x61\x5e\x6f\xd5\xad\x25\xaf\x99\x4a\x77\x72\x47\xb6\xae\x93\xbb\xfd\x3e\x79\x06\x1d\x4b\xd3\xe4\xd9\xbf\xc0\x9f\x3b\xe8\x78\x5e\x6f\x93\x23\x8d\xee\x10\x6a\xd9\x26\x2b\x9c\x32\xd8\x70\xcd\x6d\xf6\x60\x96\x46\x45\x89\xda\x85\xd2\x83\x51\x4f\xcd\x1a\xd9\x95\x53\x8f\xdd\x42\xea\xc5\x99\x52\xec\x2f\xa1\x2a\x15\x2c\xaa\x5a\x50\xf5\x42\xfd\xdd\xa2\x81\x8a\x61\x57\xb9\x85\x21\xa2\xc1\x5c\x28\xab\xbc\x5c\xd1\xc2\xf0\x66\xa2\xd9\x25\x78\x38\x41\x58\xe8\x2d\xe0\xe9\x99\x99\x55\x25\x69\x47\x41\xed\xa4\x9a\x25\x76\x7c\xc9\x48\x68\x34\x14\x68\x81\xe3\x44\xf7\x3a\xc1\x54\x67\xb1\xf5\x9b\xae\xca\x15\xa7\x82\x7e\x1f\x1c\xa0\x04\xc2\x24\x94\x4d\xfb\xdb\x3e\x3a\xb1\x77\x1e\xe2\xdf\x0f\x80\x9e\x5b\xcc\x57\x88\x96\xa8\xc6\x8a\x77\xf4\x63\x26\x3c\x35\x58\x54\x0b\x7e\xa4\x89\x5f\x49\x27\x9e\x4d\x70\x3e\x16\xfc\xfe\xfb\xf2\xae\xfa\x48\xe5\x2e\xa2\x21\xca\xe1\x26\x80\x73\xc2\xcc\x1e\x44\x73\x08\x71\x65\x1f\xc9\xcd\x0d\x8f\x72\xfb\x08\x64\x04\x75\x56\x2d\x3f\x66\xc3\x51\x13\xb5\xb9\xab\xf0\x00\x72\x92\x95\xee\xd9\x85\x85\x61\xf9\x97\x04\x21\x8b\xbd\xab\x4e\x88\x72\x32\xbe\x12\x99\xcd\xde\x7b\x81\x20\x6b\x13\x77\x9f\x23\xcc\x46\x84\x8f\x72\x9b\x4d\x27\x4d\x33\x36\x22\xc9\xbf\x24\xa3\x52\xfb\xe3\xca\x9a\xd1\x94\x8d\x48\x3e\xaa\x7c\xb7\xba\x6d\x00\x40\x83\x4b\xa2\x26\xc3\xd4\x6d\x74\xd0\x76\x38\x89\xc2\xda\xcc\x92\x67\xf0\xd7\x7c\xb2\x00\x4f\x9d\xe4\x59\x32\x2a\x11\xe6\xba\x51\x84\x79\xeb\x6e\x83\x02\x17\x96\x35\x36\xc7\x2b\x79\x96\x60\x56\x32\x01\x14\x68\xba\xca\x12\xfb\x23\x41\x52\x98\x90\x65\x56\x59\xa2\xfe\x4a\x10\xae\xed\xa3\xda\x3c\xd2\xa4\x41\x3f\x76\xbf\x12\x84\xab\x12\xf0\x84\xcc\x3b\xef\x67\x82\xf0\xa6\xe2\xb7\xb9\xa9\xcd\xfe\x48\x10\xb6\xe7\x8b\xf7\x89\x07\xb7\x94\x43\x9f\x7b\x3e\xfe\xc4\xca\x75\xf5\xc9\xa3\x24\xdc\x23\x23\xbd\xf3\xae\x12\xd9\x3e\x85\x25\xe9\x68\x3b\x9f\xc2\x92\x1c\x66\x35\x7a\x0c\x05\x6f\xca\xa2\xaa\x76\xbf\x0a\xe3\x70\x0a\x8b\x98\xc7\xf9\x81\xf2\x1f\xe6\x07\xe0\xea\x38\xc0\x0f\x94\x86\x1f\xc8\x49\xd9\xe7\x07\x72\x40\xf6\xf3\xa9\x1f\x38\xc7\x79\x24\xd4\xad\x82\x32\xf1\x9b\xdf\xfb\xbd\xda\x04\x76\xbf\x98\xd8\x10\xd9\x19\x95\x25\xea\xf7\x79\xb9\x2e\x2c\x92\x4c\x8b\x73\x43\x45\xfa\x06\x22\xe3\x28\xa1\x69\x8c\x7f\x89\x21\xfd\xe1\x8f\xef\x7e\x38\x40\xa5\xf5\x77\x19\x72\x64\x01\x0b\x62\xc6\xa8\x8e\xab\x50\xc7\x55\xc8\xe3\x8a\xa9\xfc\x4b\x9d\x57\x0a\x89\xa5\x30\x60\xc5\x04\x2d\x18\x1b\x8e\xe9\xc6\x58\x8e\x8b\x80\x90\x12\xce\x4f\x5e\x8b\xf7\xd4\xdc\x40\xb2\x26\x77\x1c\x8f\xd4\x66\xd0\xa0\x54\x1f\x4e\xa8\xd5\x3b\xc8\xfd\x6a\x97\x0a\x8f\xf5\xe5\x1d\x2d\xad\x6f\x5f\x76\x78\x41\xe0\xaa\xbd\x66\xe5\x5a\x37\xd7\x99\x56\x61\xa7\xf5\xc7\x77\x3f\x98\xec\x05\xae\x47\x43\x7b\xcd\x1f\xec\xb2\x8a\xd5\x53\x48\xcf\x08\xeb\x8d\x92\xaf\xd7\x61\x07\x13\xd7\xb3\xe4\x50\x5f\x61\xec\x96\x52\x45\x2c\x4c\x30\x81\xb2\xd0\x81\xdb\xfc\xc8\xfc\xc8\xaf\x62\x6f\xfa\x9f\xf7\xba\x95\xa6\x7a\x50\xb1\x8a\x4f\x1c\x57\xd9\x66\xa5\xe5\x1a\x1c\xc1\xc8\x9f\x46\x29\x7b\x06\x9e\x7f\x12\xb1\xfc\x62\xda\x78\x0a\x65\xac\xc0\xfd\xd6\x10\xc4\xdc\xd9\x8d\x3f\xeb\xff\xce\xe1\x7f\xff\x2a\xff\x77\x6f\x7e\x9a\xff\x12\x7b\x98\x9e\xcd\x3f\xdf\x2f\x9e\xdd\xe0\x7e\x1c\x89\x71\x11\x20\x17\xff\xfe\x3f\x5e\xe5\x62\x3b\xe6\x79\xb9\xae\x6e\x33\xb4\x9f\xe0\x2c\xf9\x2c\xb9\x0d\x3a\x13\xd3\xdf\xa5\x62\xff\xbf\x90\x0b\xb5\xb9\xf8\x77\xd4\xaa\xa8\xc7\xfa\x9f\x46\xbb\xb5\xbc\x81\x85\x11\x8e\x80\x44\x3d\x42\xcc\xeb\x18\x31\xaf\x8f\xd2\x57\x76\x98\xbe\xd6\xbd\x5b\xc0\x80\x9c\xec\x28\x8f\x0f\x47\x03\xfc\x1a\xb1\x60\x0c\x0a\xbd\xf7\xb4\xa0\x2b\x51\xf1\x2c\xb9\xce\x6b\xc9\xcd\x08\x92\x24\x03\xa0\xb6\x04\x24\xe6\x2b\x21\x38\xbb\x6e\x04\xcd\x92\x2d\xa7\x9b\x04\xf5\x29\x9f\xfc\x12\x68\x88\x88\x50\xc5\xf0\x2e\x7a\xf4\x2a\xda\x55\xbb\x5a\xf2\x55\xdd\x8b\x48\x8d\x17\x58\xae\x03\x57\x8a\x5e\x15\x5b\xb3\xfe\x7d\xd9\xed\x91\x5d\x3d\x8a\xe4\xad\x92\x40\x73\x89\x4a\x45\xad\xa6\xb9\x23\xbc\x92\xa1\x4e\x49\xeb\x88\xac\x92\x44\x11\xd6\x81\xa3\x96\xd8\x65\x01\x15\x46\x03\x91\xa6\x02\xdc\xad\x41\xcd\xa9\x47\xc8\xe9\x1d\xab\x9a\x5a\x6e\x9b\xa0\xf8\x54\x87\x86\x7a\xb2\xae\x5a\xe9\xa3\x37\xa9\xe5\xfd\x44\xa8\x0f\xd0\xca\x2a\xbd\x36\x20\xf1\xcb\x8e\x94\xf9\x2d\x1d\x08\x22\xdc\x01\xfc\xdb\xb3\xdf\x3c\xc3\x09\x28\x0f\x79\xff\xa9\xc9\x02\x62\xdf\x48\x81\xe6\x1d\xbd\x79\xf9\x79\x97\x25\xff\x37\x19\xf1\x51\x92\xcd\xc8\xb3\xfd\x6f\x50\x82\x64\xf9\x43\xe5\xc4\xa1\x72\xcf\xfe\xf6\xec\x6f\xcf\x9e\xdd\x48\xf9\xc1\x7a\xa8\xb0\x11\xc9\xe8\xb8\xa6\x39\x5f\x6d\xf7\xfb\x24\x41\xa3\x90\x69\x90\x93\x12\xb9\xfc\xa3\x6b\x34\xa0\xdd\x35\xa2\x08\xfb\xeb\x42\xd5\x31\x07\x5f\x40\xf5\x0d\x85\x06\x0e\xf0\x04\xff\x58\x23\xc1\xea\x52\xb3\xba\xbd\x6d\xed\x7b\xe0\x75\x76\xe3\xcc\xdf\xec\x63\xd8\xbc\x53\x7d\x61\xa9\x67\x50\x99\xac\xd8\x0e\x28\xd2\x7f\xa5\x44\xa1\xb8\x69\xd8\x7a\x9a\x67\xa8\x1d\x04\xd5\xba\xb9\x10\x26\xab\x18\xee\x37\x62\x92\x3e\x1d\xde\xd2\xde\x3c\x7e\x61\x4f\x82\x09\xfb\xc7\x3b\x73\x88\x25\x73\xab\x3a\x78\x9c\x3b\xeb\xd2\x28\x9f\x15\xaf\xf6\xfb\xac\x82\x3c\x00\xb6\x5d\xc9\x7c\x05\xdd\x42\x28\x4d\x69\xe6\x0a\xa0\xf6\x30\xbf\x65\xda\x4a\xe2\x6d\xc3\xa0\xe2\xbc\x96\xb7\x51\xe3\x34\xc1\x17\x92\xe9\x2c\x7b\x02\x51\x40\x53\x25\xed\x73\xe0\xd0\xd5\xdf\x9a\x5b\x8f\x97\xc7\x7c\x24\x46\xb0\x29\xbf\x84\xe5\x8b\xbf\x89\xe0\x0d\x86\x73\x73\x9c\xe1\x7b\x7c\x62\x0f\x30\x7b\xf5\x93\x98\xbd\x8e\xef\xd0\x3f\x89\xd3\x8b\x59\x40\x9e\xc2\xca\xfd\x93\x18\x25\xa5\x2f\x7e\x84\x2f\x62\x31\xbe\x88\x45\x94\xde\xfe\x56\xd6\xc0\x33\x87\xaf\x45\x49\x55\x3a\x57\xa2\xe3\x28\x63\x1b\x9d\x9e\x7a\x73\x69\x7c\x97\xee\x71\xeb\xb2\x19\xb2\x03\x4a\x10\x64\xc7\x05\xc1\x06\x5e\xbd\xc8\x8b\xe2\x3a\x5f\x7d\x54\x90\x93\x5b\xd8\x84\xa7\x36\x81\x23\xf5\x64\xaa\xe5\x53\x49\x43\x40\x0b\x14\x9e\x44\xec\x18\xc3\x21\x3e\x70\x2e\x2a\x5c\x59\xbd\x19\xd0\xf4\x24\xc1\x9e\xfe\xec\x89\xea\x24\x90\x4d\xbc\xe3\xb2\x08\x24\x84\x60\x4f\xdb\x0d\xeb\x3b\xa4\x3a\x66\xe7\x90\x4a\x61\x04\x49\x60\x3c\x13\x8f\xe7\x01\xa9\x79\x8f\xd6\x3b\x0b\xb4\x93\x2a\x1f\x62\x9c\xa5\x8c\x38\x53\xff\x58\x95\x29\x9a\x26\x89\xfb\x90\xf9\x7d\xaa\x38\xbb\x61\xe5\xc0\xc5\x8e\x67\x36\xdc\x60\x55\x15\xa3\xe4\xd9\xb3\x64\x44\xc7\xdb\xaa\x16\xb2\xe7\x98\x8e\xe5\xd8\xb5\xe2\x63\x2a\x5f\xc9\xdf\x48\xe5\xae\xd1\x0a\x5f\x22\x94\x61\x0b\xd4\xba\x84\x3b\x2b\x17\x29\xd5\xdf\xc6\x3c\x13\xf3\xf4\x94\x13\x36\x92\x03\x1f\x95\xb0\x5f\x94\x5f\x28\x74\x92\x30\x4c\x23\x36\x92\x8e\x2f\xa8\xa9\x27\x4d\x93\xaa\xf4\x44\x68\x06\xcf\x5c\xf4\x2f\xdd\xef\xe9\xd7\xff\x13\x5a\xe8\x32\xd7\x61\x85\x6c\x93\x65\xe7\x3a\x7e\xdc\x38\x0b\x5c\x95\x6b\x2e\x2b\xfa\x6a\x9c\xa0\xfd\xfe\xd0\xdb\x7f\x1d\x4f\x12\x79\xb1\x76\xdf\xbf\xaa\xae\x59\x41\xcf\xde\xe7\x9b\x9c\xb3\x04\x0a\x90\xa0\xc0\x8b\x2d\xaf\x6e\x69\xec\xcd\x9f\xe1\xfa\xa8\xcf\xde\x6e\xc1\xe8\xd1\xb3\xe2\xe8\x98\xf6\x4c\x0e\xdf\x72\x4c\x30\x76\x18\xa9\x67\x0c\xea\xba\xd0\xda\xb3\x25\xb7\xc7\x48\xa0\xf6\x94\xb3\xd1\x73\x2a\x7c\xca\x65\x72\xe0\xca\xb0\x3f\x55\x34\xc5\xb3\x95\x46\xb4\x73\x2f\x6a\xe3\x9a\xf3\x85\xfe\x28\x26\xba\x32\x7e\x64\x6b\x7f\x1f\x69\x46\x62\x46\xa7\xd4\x9c\x26\x8b\x11\x64\x55\xfb\x6d\xf4\x0a\x6b\xfe\x1b\xf0\xf5\xba\x02\xb8\xc7\x43\xfa\x68\x6b\xb2\x58\xbc\x6d\x83\xcc\x03\xcb\x39\xae\xca\x2c\x81\x3f\x5d\xfe\xfa\x24\x20\x7a\x62\x2c\x38\xbb\xb9\x91\xcc\x4b\xaf\x1c\xb8\x96\xc7\xab\x73\xf9\xb7\x8f\xd6\xe6\x15\x93\x95\xb5\xb8\x0c\x3c\x61\xa2\x49\x9e\xff\xf1\xc4\x3b\x60\xed\xe2\xb4\xa6\xb7\xd7\x05\x05\xde\x18\x40\x19\x51\x08\x52\xac\x87\xb4\x5c\x57\x3f\xbe\xfb\xe1\x83\xed\x55\x96\xf8\x3d\x4c\x30\x7c\xa9\x57\x0c\x2a\xa6\x9f\x05\xcf\x57\x02\xec\x1a\x57\xfc\xa6\x06\x53\x18\x08\xb3\xc6\x57\x05\x57\xa4\x1c\xdf\x56\x6b\x5a\xd4\xb8\x26\xe5\xd8\x73\x72\xc2\x0d\xe9\xb6\xee\x35\x2d\x77\x75\x8d\x87\x13\x2b\xb3\x36\xe3\xe5\x47\x4a\x77\xdf\xaa\xbd\xe9\x3c\xf1\x7e\xca\x8b\x86\xd6\x52\x22\x68\xe4\x9c\x7a\xde\x38\x87\x04\x3e\x7f\x50\xf1\x8d\xa3\xa3\x14\xac\x19\x29\x81\xe5\x6a\x78\xf1\x5d\xc5\xe3\xe8\x5b\x8f\x1a\x27\xbf\xbe\x98\xf1\xf3\x8b\xe9\x44\xce\xcf\x85\x6f\xa4\x3c\xbf\x88\x9b\x29\x45\x30\x3b\xc8\xba\x81\x9a\x1e\xe3\x39\x5d\x98\x50\xb1\x12\x41\x07\x59\x7d\xb5\x12\xec\x8e\xfe\x33\xf6\xd2\x3f\x6d\xd5\xd5\xbf\xaf\xd8\x8a\x57\x05\xbb\x36\x21\x57\xc3\xc6\x8e\xe6\x7b\x48\xc0\x09\xbe\x03\x69\x9a\x0d\x33\x3f\xb8\xa7\x46\x2e\x79\x88\x09\xb4\xb3\x35\xef\x38\xdd\xe5\x9c\x7a\x4e\x9b\x6e\x57\x61\x18\x49\xbd\xcd\x8b\xa2\xfa\xf4\xf2\xe7\x26\x2f\x50\x56\xe3\x46\xc9\xfb\x7e\x7f\x91\x9a\x5a\x4e\x57\xd5\x4d\xc9\x7e\x89\x49\xd8\xb5\x01\x1c\xd4\xdc\x58\x18\xe0\x77\x60\xa0\xae\x46\x00\x49\xf4\x5a\xb8\x2a\xd7\x3f\x54\x79\x2c\xa9\xee\x3f\xd8\x90\xae\x18\xda\x03\xf3\xbc\x45\x12\x73\x24\xbf\x01\x27\x0b\x60\x32\xf9\x18\x24\x3a\xba\xc6\x0f\xab\x86\x73\x5a\x0a\xeb\x81\x36\x05\xdd\xa9\x81\x54\x44\x59\x62\xda\xee\x16\x4c\x10\xd6\x8f\x24\x97\xfa\xc8\x57\x1d\xb3\xeb\xa1\xd2\x56\xd8\x43\x96\xfd\x3d\x54\xd4\xf8\x41\xd8\x5e\x28\x9f\xbf\x53\x7a\x9f\xa0\xd3\x18\xea\x7e\xe8\xc2\xa3\x5c\xc3\x41\x56\x60\x57\x15\xf7\x1b\x56\xf8\x6e\x5c\x86\x3b\xf8\x95\x45\xcf\x5f\xe7\xde\x3e\x00\xd1\xba\xcd\x6b\x98\xc2\x28\x47\xac\xb6\x2f\x4c\xb7\x29\xa7\x45\xa9\xf8\x6d\xd8\x4d\xd9\xe2\x7d\x1f\x5e\x18\x41\xee\xee\xb3\x32\x4d\x59\x9f\x8a\x2b\x9c\xef\x52\xca\x6c\x05\xfb\xc5\xa7\x0c\x71\x30\xd6\x23\x94\xc4\xc7\x67\x55\x84\x39\x14\x02\xfd\x04\xb3\x5e\x5d\x0a\xf1\xbf\x73\x44\x4d\x5a\x0b\x2f\x6e\xdd\xf8\x0c\x19\x48\x96\x0a\x1b\xa0\xc1\x58\xef\x4d\x8a\x7d\xaf\x37\x7a\x55\x99\x7f\x4d\x08\x3c\x7f\xf0\xbd\x8c\xab\x76\x81\x54\xd6\x0a\x43\x6b\xbf\xab\x78\x77\xe9\x70\x98\x52\x28\x5c\x81\x43\xa4\x86\x6b\x09\x9b\xeb\x2c\x4c\x38\x27\xd5\xbc\x72\xc9\x52\xcc\x6b\x5c\x77\x38\x77\x2f\xf5\x84\x89\xeb\x76\x4e\x2c\x7c\x44\x2c\x76\xa5\xbb\xc5\xe4\x13\x5d\x1d\xe0\x0c\x40\xb4\xe3\xa5\x8b\xc5\xe4\xb8\xb2\xdb\xc2\xe6\x4e\xaf\x41\x95\x96\x23\xef\xd6\xd4\xf7\x0c\x07\x9c\xd9\x21\x53\x44\x92\xc5\x88\xa4\x2f\x89\x2b\xd7\x60\xe5\xb7\x02\xfa\x03\x8f\xae\xe8\x59\xf2\x8a\x38\x4a\x74\xf4\x0b\xbf\x4c\x87\x78\x19\xf2\x7b\xe4\xb3\x08\xf5\x95\x32\xd2\x23\x5f\xc9\x22\x27\x13\x3d\x3f\x9c\xea\x34\x25\x42\x94\x3a\x3d\x02\x9b\x0a\xf5\x03\x93\xf2\x2a\xdf\x1d\x83\x48\xdd\xe6\xf5\x41\x62\x03\x95\x40\x08\x31\x85\x88\xdc\x5a\x04\xd6\xc0\x3e\xba\xa9\xfa\x00\xb2\xe9\xa1\x6e\x4e\x77\xdd\x17\xec\x15\x54\xe9\x10\x4a\x84\x70\x69\xf3\x72\xc8\x76\x94\x9b\x5e\xaf\x21\x9b\x4b\x40\xf5\x28\x84\xdd\x8a\xf5\xc0\x8a\x43\x2a\x0a\x7a\x66\x90\x92\xa7\xdc\x82\x8b\x9a\x99\x3d\x18\xdd\x7a\x42\x6c\xe1\x13\x17\xb1\x3b\x2c\x77\xbe\xb4\x77\xa2\xab\x7f\x9a\x8c\x54\xfe\x94\xd3\x3b\x07\x21\x8c\x07\x1d\xd1\x23\xf7\x65\xf7\x7a\x3c\x65\xf3\x95\x64\x32\x08\xd5\x48\x87\x31\xef\xda\xce\x5d\xda\xd9\xad\x71\x06\xfb\xeb\x49\x34\xd4\x7d\xe2\x87\xba\x4f\x16\x2a\xb4\xa3\x8f\x72\xf1\xf5\x45\x18\x56\xaf\x7b\x0e\x1b\x84\x7e\xde\x15\x6c\xc5\x84\x42\x0f\x1e\x5e\x68\xb0\x0a\xc8\xd2\xae\xb3\x13\x8c\x69\x09\xe9\xf0\xaa\x7c\xcd\xca\x9b\xf7\x52\xda\xcf\x05\xad\x89\xa7\x53\x11\x07\xca\x18\xa0\x13\x48\x1b\x53\x5b\xc8\xe2\x6a\x27\xc7\x5b\x13\x71\xec\x24\xf2\xf0\xf6\xf0\xee\xee\x0a\x37\x2a\xb3\x66\x41\x92\x67\xcb\xa6\x6c\x6a\xba\x5e\xae\x9b\xdb\xdb\xfb\x25\xe5\xbc\xe2\xcb\x5d\x2e\xb6\xea\x42\x59\x82\x52\xf8\xd9\x14\x9e\x27\x70\x65\x42\x1e\xff\x4a\xe1\x50\x71\x34\x65\x00\xad\x57\x11\x2e\x2b\x45\xd3\x8a\xf0\xfd\xfe\xa1\x3d\x36\xf0\x34\xcd\x6a\x0d\xc5\x3e\x4a\x96\x85\x7a\x9b\xe0\x07\x29\x1b\x0b\x0b\xeb\x38\xad\xc6\xe1\x83\x16\x61\xef\x33\xd5\xa1\x47\x3f\xc2\xa0\x9e\x2d\x5a\x84\x70\x63\xb1\xd1\x00\xde\x21\x37\x68\xf0\xdd\x4f\x50\x30\xc7\x68\x50\x67\x2b\x9c\x98\x5e\xca\x3e\xac\x70\x62\x5a\x37\xb5\xe3\x46\x81\x24\xae\x5c\x1f\x71\x85\x57\x96\x05\xc8\x8c\x4b\xb6\x7b\x0b\x94\x69\xd7\x74\x09\xa0\x7f\xbd\x7b\x39\xf1\x06\x06\x2a\x45\x77\x6b\x4c\xcb\x1b\x56\xd2\xef\xcb\x4d\x65\x70\xe5\x84\x8e\x2b\x3a\x50\x6c\xbc\x69\x8a\x42\x0e\x52\x6f\xea\xd1\x05\xc2\x5d\xb0\x39\xc9\xcf\x17\xdf\xe9\x72\xd3\xbc\xc5\x87\x9a\x1c\x30\xc0\x8a\xab\x29\x57\x69\x77\x35\x24\x00\x0b\xe7\x6e\x9c\xaf\xd7\x70\x03\x7e\x57\xf1\x97\xf0\x71\x26\x70\xed\x9c\xd3\x99\x97\xaf\x4f\x65\x26\x4a\xbe\xa5\x1b\x56\xb2\xf2\xe6\x2c\x3f\x83\xfd\x77\x66\x9b\xe0\x67\x92\x59\x86\x67\x16\xb3\xbd\x11\x35\x5b\xd3\xb3\xbc\x3c\x53\xd5\x9f\xb1\x1a\x32\xf6\x81\x28\x49\xd7\x72\xde\x8c\x9a\x5f\x29\xc5\xe5\x1f\x2a\xf0\x7e\x48\x42\x36\xc8\x88\xac\x9d\xf3\x3c\x09\x4f\xa0\x46\xd1\x91\xeb\x04\xeb\x67\xd6\xf7\x80\x65\x46\x7f\x15\xc8\x86\x41\x03\xc6\x54\x0e\xbc\xb7\xee\x99\xde\x55\x60\x47\xc0\x3e\xca\x45\x98\x0b\x8c\x3a\xa4\x5b\xf2\x3b\x24\x32\x3a\xe7\x0b\x34\x16\x95\xfc\x63\x74\xb1\xc0\xf2\x9f\xaf\x16\x08\xf0\x6a\x6e\xab\xa6\x0c\x51\x65\x14\x37\xfc\x85\xb0\x22\x0f\x2d\xd6\xcc\xa7\x59\x68\x4e\xeb\xaa\xb8\x53\x81\x58\xaf\xf2\x5d\x26\x10\x6e\x88\x18\xb0\x71\x2e\x4f\x7b\x43\xe4\x1f\xc8\xc2\x59\xea\xa3\xd7\x80\xe8\x17\x1e\xbd\x0d\x51\x70\xe3\x02\x1b\x44\x8c\xef\xd7\xd3\x72\x34\xc2\x30\x84\xb7\x15\x2b\xc5\x74\x85\xcd\x56\x9e\xae\x5a\xbc\x25\x0a\xe5\x6f\x60\x30\xe2\x2d\x4a\x8e\xe4\x53\xb7\x60\xfe\x68\x54\xdb\xeb\x53\xc8\x5d\x13\x92\xbb\xca\x04\x49\x0c\x2f\xf0\x2d\x39\x70\x1e\x06\xb7\x69\x9a\xed\x6c\x4a\xfc\x7e\x01\xb2\xd1\x18\xe1\x9a\xf8\xac\x70\x78\xf0\x5c\xc9\xe9\x26\x3c\x75\x48\x12\xa0\xbb\x90\x00\xdd\x75\x08\xd0\xba\x45\xb8\x1a\x03\xa0\xaf\x22\x43\x77\x08\x17\xe4\xce\xa3\x3e\x78\x67\x1c\x7e\x22\x7d\xbb\x55\x3e\x64\xf7\x47\x89\x41\x22\x85\x18\xa6\xc5\xfd\x16\x6f\x1c\x45\x3a\x70\x73\xc1\xb4\xdd\x90\xc6\x27\xf1\xd7\xc4\xaf\xc6\x3d\x5f\x1e\x6d\xfa\x1a\x9a\xd3\x94\xf3\xa6\x47\xf2\xbb\x9b\xa8\x7d\x94\x08\xdd\xe0\x25\xc2\xaa\x6b\x7a\x1e\x3b\x1d\xd3\x4f\x4f\xe8\x16\x3e\xb9\x5b\xd8\x2e\xd5\x09\xbd\x6b\x1f\x29\xb3\xc2\x26\xb5\x88\xca\x9d\x8b\x57\xb8\x40\x5d\xd4\x9a\xbc\xc3\x11\x46\xbc\x53\xfd\x45\x05\x5b\x92\x62\x5c\xda\x8c\xa2\x34\x1d\x02\x58\xd7\xcc\x3c\x1c\x25\xe3\x64\x24\xa6\x9e\x1d\xb1\x0e\xf2\x35\x7e\x19\xba\xd0\x43\x8b\x23\xc8\x44\xbf\xf3\x0a\xfd\x6e\xe1\x72\xba\xeb\x21\x75\xc9\x46\xff\xec\x73\xa0\x09\x52\xb2\x54\x6e\x49\xda\x08\xaa\x13\x2b\xaa\x87\x98\xe1\x12\xac\xcc\xfa\x86\xf1\xed\x2d\xd5\x13\x58\x64\x75\x94\xea\x04\xcf\x17\xbe\xaf\xf2\x13\x6a\x88\x02\x93\x3c\x29\xc4\x3a\xee\x15\x71\xc8\x14\x55\x86\xc9\x8d\x37\x0a\xc4\xe0\x3b\x79\x01\x7b\xc2\xc2\x75\x5e\xb3\x55\x82\x14\x61\x19\x70\xc2\xc7\xf4\xb3\xa0\xe5\x3a\x7b\x30\x1e\xa8\xfd\xc0\xf2\x24\x33\x63\x59\x2b\x60\xf1\x33\x57\x21\x4a\x4c\x84\x6c\x49\x3a\x42\x89\x53\x0a\xd8\x74\x11\x25\xe6\x72\xbd\xbc\xbe\x41\xde\xb6\x83\x10\x0c\x60\x04\x8e\xc9\x44\xe8\xa1\xf4\xd2\x3d\x76\x5b\x86\x98\x40\x2d\x29\x71\x34\x98\x58\xdd\x99\xec\xeb\xa9\xeb\x17\x22\xac\x7c\x99\x10\x1e\xe9\xfc\xaf\x20\xcd\x28\x21\x85\xd5\xbe\x7e\xcd\x5c\x53\x77\xca\x5c\x43\x9f\x22\x0e\xc2\x2d\x79\xce\xca\x4d\xf5\x0f\x6c\x77\x8d\x5e\x13\xd9\xe0\xbe\xda\xf5\xcb\x7d\x86\x9e\x10\xb5\xdb\x11\x63\xd7\x74\xc7\xe9\x4a\xee\xde\xf3\x0d\xcd\x45\xc3\x69\x7d\x24\x20\x47\x13\x1d\xac\xd5\x37\xcb\xbf\x3f\x0e\xaf\xd3\x09\x0d\x7e\x3a\x59\x38\x05\x31\xe7\xd0\x56\x7b\x6f\x28\x1d\xd9\x61\xd0\xc3\x7c\xdb\x7d\x1e\xd1\xdc\x50\x47\x20\x09\x21\xbb\xd6\x3b\x65\x74\xfc\xee\xcd\x8f\x1f\x5e\xbe\x5b\xbe\xfc\xe9\xe5\xeb\x0f\xcb\x6f\x5f\xbe\x7d\xf7\xf2\xc5\x95\xc2\xf7\xd2\xef\x96\x2f\xde\xbc\x7e\xfd\x52\x63\x7e\x79\x12\xff\x1a\x18\xa1\x3f\xd3\xfc\xe3\xab\x7c\x17\x80\x0f\x9b\x74\xb3\xd6\x1e\xfe\xfc\x02\xa5\xa9\x4d\x2d\xfb\xd0\x4a\xc6\x03\x82\x39\x2d\x8c\xa4\x01\x11\x9d\x2c\x06\x0c\xb2\x64\xcf\xf8\x9c\x2d\x14\x34\xa0\xc5\x51\x98\x3e\x5b\xb2\xf5\x6f\x74\xb2\x20\x06\x91\x7a\xdd\x42\x09\x5b\x27\x46\x50\xe3\xf6\x8d\xc3\x89\x40\x8a\x8e\x58\x7d\x66\x1b\x1b\xe4\x5a\xe5\x94\xc1\x77\x71\x75\x7f\xf5\x64\x4f\x33\x9d\x11\x45\x0a\xdc\xe0\x5e\xc6\xbb\x46\x80\xca\xc5\x50\x55\xb1\x18\xaa\x65\x4d\x9d\x22\xb2\xef\x94\x65\x4d\x85\x46\x5d\x21\xb9\x6b\x57\x7e\x99\xc5\x42\x5f\x75\xd8\xcf\x12\x54\x78\x70\x11\x1f\xcc\x18\x0c\x2a\x62\xb3\x7c\xde\x23\x42\xf5\x1f\x03\x6e\xf1\xf4\x32\x4e\x32\x4a\x84\x5c\x70\xfd\x72\xbf\x9f\x2f\x1c\x8a\x1e\xf3\xd6\x4b\x39\x86\x2d\x7f\xde\x8d\x7f\xde\xd5\x90\x35\xde\xb3\xf1\x9a\xbd\xa1\x41\x1e\x6c\xbe\x98\xd1\x28\x57\x58\x0f\x14\x54\xd7\xc0\xd3\xf0\x79\xbe\x70\x19\x59\xc8\xe4\xb2\x76\xa8\x84\xa3\x51\x6d\xb2\xb1\xb0\x79\xbd\x18\x24\x60\x4a\x4d\x20\x09\x40\xbd\xaa\x76\x54\x8a\x37\x92\x41\x12\x35\xa9\x20\x31\x71\x3e\x5e\xe6\xa0\xc4\xfe\xd3\x5b\x8d\x10\x12\xcb\x8a\x64\x2d\x84\x9d\xb2\x19\x55\xd5\xda\x4c\xa3\x60\xc3\x15\x6a\xb2\xc1\xed\x8d\x95\x37\xb1\x9a\xbb\xf5\xf6\xca\x66\x74\xdc\xf0\xe2\x8f\xf4\x1e\xea\x52\x77\x55\xd7\x86\x7e\x42\xa8\x33\xd4\x3f\x4d\x46\x2a\x63\xf2\xd0\x20\x7c\x3e\xb4\xbe\xd6\xf4\x90\xfd\x53\x0d\xd6\x59\x8a\xe4\x9a\xcd\xca\xf9\x6a\xfc\xfe\xc3\xd5\x87\x97\xcb\xf7\x7f\x7d\xf5\xcd\x9b\x1f\x16\xd3\xa3\x75\x80\x78\x81\x73\xc2\xc3\x7d\xaa\x74\x19\xc2\x07\xce\xaf\xf4\x28\xe7\xf9\x42\x8a\xa3\x37\x81\xf9\xc1\x37\x5d\x37\x68\xcc\xe9\xba\x59\xf9\x98\xc6\x9e\xcb\x17\x24\xd2\x6f\xe6\x62\x81\x69\x8b\x6b\xa4\xc2\xf1\x34\x49\x74\xf7\xea\x1f\x69\x14\x11\x96\x1e\x28\xfe\x48\x12\x67\x3d\xf6\xc8\x87\x00\x33\x23\x2b\x5d\xd3\x2f\xae\x36\xfa\xa9\xad\x78\xa9\xe5\x8e\xef\x2a\x1e\xad\xd8\x8b\xda\x09\x8e\xa2\x67\xcf\x1a\x27\x23\xbb\xdd\xf6\xfb\xc7\x0a\xee\x78\xb5\x43\xfb\xfd\x43\xdb\x6a\x0f\x19\xe1\xb8\xbb\x63\x03\x6a\xc1\x03\x22\x12\x1a\xb4\xa6\xb0\xd3\x94\xe8\xab\x1d\x4d\xb4\x03\x90\x7b\x95\x98\x57\x3a\x45\xe4\x4f\x8c\x7e\xaa\x75\xd8\x9d\xb9\x96\xdf\xd1\x6e\x7a\xc3\x80\x90\xb9\x7b\x79\xc0\x7d\x14\x9f\x28\x95\x52\x72\xf1\x98\x95\xea\x14\x98\xe6\x3b\xe3\x55\x46\x2f\xe8\x05\x2d\x45\xe8\xfa\xbd\x56\x56\x0d\x59\xe3\x7c\xa1\x3f\x3f\x38\x50\x37\x4c\xb5\x59\xcc\x6f\xbf\x42\xf9\xe6\xd0\xf3\x47\x3d\xa2\x22\x8a\xf2\xa7\xc1\x41\xeb\x5d\x44\x3b\xde\x35\x11\x9f\x20\x88\x6b\xdd\x1c\x06\xdf\x81\x54\x94\xf9\x18\x56\xed\x96\xae\x59\x2e\x3c\x22\xf3\xcf\xea\xbe\xbd\x8f\x8e\x76\x0c\x57\x84\xcd\x27\x0b\x9c\x13\xa6\xf5\xb3\x17\xe8\xb2\x37\xe6\x43\x3d\xb7\xe3\x9f\x57\xd6\x74\x9c\x23\x1d\xc7\xbb\xe1\x34\x16\x4c\xf7\x98\x0b\x0a\x7c\x66\x60\x71\xf3\x43\x5e\x5a\xff\xf4\x65\xf6\xda\x7d\xda\x2a\x77\xd2\xce\xfa\x09\x32\xba\xa7\x52\x7e\xef\xab\x58\xb5\x43\x54\xa7\x94\x94\x2d\x19\xf8\xb7\xb1\x4d\xc6\x49\xa5\xbf\xe8\x4b\x9a\x19\x43\x78\xd8\xf9\xd8\x68\xdf\x23\x27\x3e\x41\x16\xed\x5f\xca\x69\x33\x57\x24\xc7\xc9\xce\xbb\xdf\xeb\x04\x4d\xe7\x8b\xcb\xce\xed\x23\xa2\x50\xc7\x74\x9c\xaf\xd7\x26\x71\x4a\x26\x46\x80\x2f\x86\xa9\x42\x11\xd3\x57\x3d\x98\x8e\x21\x93\x1c\xee\xf4\x96\xf0\xf6\xce\x25\x68\xef\x75\xb7\x20\xda\xed\xaa\x56\x38\xff\x3e\x49\x2b\xc6\xa0\x55\x7f\x73\x47\x39\x67\x6b\x5a\xcb\x2e\xc2\x7a\x01\x0b\x08\xd4\x1c\xc6\x82\x02\xd7\x2f\x2c\xba\xb7\xbb\x5a\x89\xef\xcb\x4d\xa5\x35\xc2\x5b\xbd\x31\xae\x1d\x88\x1d\x5e\x13\xf9\xdd\xdb\xab\x77\x57\xaf\xde\x9b\x0f\x07\xcd\x38\x98\xb4\xfe\xf4\x58\xef\xac\x66\x7c\x9b\xef\xe6\x74\x31\x10\x46\xc8\x5d\xfb\xc7\x75\x95\x17\xab\xa6\x80\x08\x82\xd5\x96\xca\x3b\x2a\xd3\xe6\xb2\x0e\x4f\x21\x14\x67\x87\x4d\x35\xf2\x34\x6f\x0d\x2b\xc4\x24\xa1\x1e\x37\xe5\x9a\xae\x2a\x50\x78\x68\x69\x0a\xbc\x20\x43\x14\x18\x8a\x2b\xa4\x55\x1f\x3b\x72\xa3\x4d\x40\xdd\x89\x71\x9f\xf8\x12\x07\xc7\x3b\xad\x0d\x84\x7d\xdf\xbb\x28\xb4\x27\xac\x07\x71\x65\xd5\x86\xf5\xb6\x6a\x8a\xf5\x3b\x5a\xae\x29\xd7\xb9\x95\x39\xfc\xf8\x40\x6f\x77\x72\xf8\xe0\x3e\x04\xf7\x9d\xdd\x3a\x31\x23\x79\x27\xe3\xa8\xbf\x4e\x87\x27\x94\x47\x27\x94\xeb\x09\xe5\x66\x42\x07\xa5\xda\x3f\x6a\x36\x11\x70\x00\xd7\x74\x53\x71\xfa\x4a\x32\xda\xbd\xcb\x6a\x23\x69\x59\xec\x0d\xa7\x6b\xc6\x3b\x51\x34\xf2\xb9\x96\x9e\xac\xcb\x6f\x8f\x57\xd0\x3e\x17\xaa\x52\x7b\x5c\xe8\x67\x80\x5d\xb8\x0d\x9b\xb2\x08\x7f\x5a\xe4\x8e\xde\xf3\xb7\xf9\x2e\x71\x12\x4b\x03\x02\x29\x02\x89\x36\x40\x19\x94\x22\xc4\x7e\x5f\xa7\x29\x94\x30\x49\x1f\x0b\xd8\xbb\x62\xb5\xcd\x9e\xfd\xdf\x6c\xfc\x3f\x10\xc8\xac\x68\xa0\xc1\xec\x0b\xc8\xc9\x56\xcc\x2f\xe4\x7d\x42\xe7\xcd\x42\x6e\xc8\xe1\xa4\x95\xb5\xab\xdc\x6b\x15\xb2\xbc\x59\xc0\x0b\x53\x9d\xb9\x43\x1b\x6a\xc0\xf8\xf4\xfc\xc2\xe0\xb8\x1b\x89\xf6\xc8\x59\x9d\x87\xdf\x9e\x5f\x2c\xec\x3c\xf9\xd7\xce\x86\x95\x6b\x98\xca\x8c\xe1\xbc\xcb\xa6\x1e\x88\xa8\x00\x4b\x19\x7c\xa3\x36\x98\x95\x4d\xb2\x0e\xe5\xa6\x48\x73\x46\xb6\x95\x9e\xae\xcc\xdd\x36\xdd\xa5\xa9\x45\xc5\x69\x82\x10\x7c\x6c\x6f\x1c\x1f\xb5\x2e\xef\x1e\xb1\xde\x61\xa0\x9e\xde\x4d\x40\xe2\x50\x7d\xc4\x29\xd6\x82\xa1\xee\x60\x70\xb9\x44\xf9\xc7\xa8\x50\x5d\x12\x1e\x13\xb4\x9c\x23\x5d\xd9\xb9\xdc\xd2\x34\xa3\xa4\xfb\x10\x61\x1e\xf7\xfd\xa0\x1a\xac\xa4\x7b\xaf\xc5\x73\x90\xf4\xba\xe7\x50\x9b\x2c\x94\x2a\x60\x36\x21\x7b\x52\x62\xf2\xa4\xc0\x07\x07\xeb\x5f\x14\x9a\x40\x1d\x60\x5b\x66\x4f\x12\x2b\xad\x83\x06\x51\x54\x28\xbf\x2e\xfc\x95\x2b\x67\x4b\xa0\x7c\x53\x6a\x91\xe8\xba\x93\xae\xe0\xdd\xd4\xa9\x2b\xcd\x15\x5f\xa5\x69\xe5\x76\xe3\x7e\xaf\x53\x22\xe8\x63\xa1\x36\x64\xdd\xcd\x99\x94\x5b\xbf\xa2\x6e\xc9\x79\xbe\x30\x47\x07\x6a\xf6\x09\x91\xa2\x68\x3e\xad\x8e\xa7\x56\x96\x25\x32\xe4\x4a\x47\xd9\xa2\x92\x40\x42\xa5\x0e\x13\x37\x28\xf7\xfb\x7e\x66\x11\x39\xac\x19\x27\x74\x9a\x69\x11\x47\xe8\xf6\xa3\xac\x94\x20\x14\xa1\x9e\x73\x2b\x0e\x5c\x4d\x3c\xcd\x64\x77\x1f\x50\x34\x28\x21\x51\x62\x29\x19\xe0\x4a\x6e\x6f\xf9\xaf\x1f\x8d\xf7\xec\x06\x27\xe3\x44\x8a\xef\xe5\xb8\x6a\x44\x41\x05\x2e\x82\x0d\x8f\x57\xc6\xbf\x1d\x0d\x1a\x49\x51\x93\xdb\x9c\x95\x09\x16\xb3\xac\x02\x44\x3f\xd3\xd7\x9c\xd0\xce\x60\x2a\x34\xcd\xaa\x30\x86\xd7\x34\x97\x93\x0a\x0d\x8a\xfd\x3e\x2b\x88\x98\xd1\x1e\x47\xb9\x89\x9f\xaf\x0a\x4d\x0f\xbe\xd9\xef\xfb\xd5\x78\xdd\x53\x79\xd2\xbb\x59\xce\x0b\x35\x89\x5b\x52\x0c\x0a\x72\xa0\xea\x2d\x6a\x57\x69\x5a\x80\x68\x68\x88\xd0\x4a\xdb\xbb\xf1\xce\xfb\xca\x0c\x7e\x9a\x8c\x72\x34\xa8\xd3\x34\x5b\x93\xfb\x8c\x22\x94\xa6\x35\x21\x64\xed\x3a\x03\x6b\xa2\x33\x15\x29\x6d\x26\x79\x00\x9d\xfa\x74\x83\xe5\x02\x4d\x6b\xac\xd6\x62\xda\x60\xb0\xd6\x57\xd8\xeb\x52\x81\x6d\x4b\x3b\x39\xc6\xa5\xa8\x76\x3f\xd0\x3b\x5a\x48\x01\xdb\x6c\x67\xeb\x5e\x7b\xab\x32\x74\xe0\x12\x73\x2c\xd0\x60\xad\x5c\xea\x40\xe5\x04\xa6\xba\x0a\x29\xb8\xc1\xaa\x5c\xd1\x0e\x6b\x99\x2c\x6b\x2a\xde\x40\x47\x6a\x2d\xe5\xb2\x7a\x55\x95\x25\x5d\xe9\xc7\x31\x62\x04\x80\x1f\xfd\x7c\xf2\x33\x21\x37\x3d\x44\x2e\xaa\x6d\xc6\xad\x35\x54\xf6\x7b\xe6\xff\x88\xec\x18\x4d\x72\x10\xc2\x42\xe5\xa3\x54\x9b\x10\xba\xdb\xed\x15\xf8\x25\x7a\x89\x41\x8e\xd2\x36\xdf\x91\x14\x2e\x62\x8d\xac\x67\x00\xe5\x2c\xc0\x9e\xe6\xb7\xe2\xad\x01\x93\x77\x64\x76\xdc\xbd\x74\x6f\x68\x7d\x9a\x42\x06\x9f\x60\x57\x08\xbb\x2b\x5c\xef\xbd\x15\x8b\x75\x4d\xfb\x32\xc9\x1e\x0e\x2a\x3d\xb7\x04\x1c\x71\x2a\x38\xec\x1a\x95\x11\x20\x02\xf5\x26\xab\x54\x1a\x2f\xb5\xd5\x54\x29\xb3\xdf\x4c\x0d\x7a\xdb\x81\x0e\xd7\xdf\x7b\x26\x11\x94\xd9\x80\x06\x52\xe5\xb4\x2d\x84\x5a\x4f\xc3\xa2\x90\xbd\x8e\xc5\xf0\x47\x14\x47\xc1\xa3\xbe\x21\xcf\x9b\xab\x81\x0b\xad\x75\x09\x65\xbe\x9e\xc8\x53\x19\x6a\x79\x4e\xed\xba\x64\x9c\x1b\x56\xac\xed\x4e\x79\x45\x45\xbe\xce\x45\x1e\x72\xc4\x55\x14\x0c\xf2\xde\xdd\xfc\xb1\x4d\xf1\x85\xb6\x7d\x48\x8a\x33\x34\x29\xaa\xba\xa9\x70\xfc\x14\xee\x90\xe4\xbc\xd4\x7b\x58\x6e\x0f\x1b\x14\x37\x2f\x47\x36\x91\x5a\x9b\x81\x9c\x7b\x4c\x31\xec\x71\xac\xf8\xfc\xc2\x45\xe5\xa4\xa9\x96\xf0\x9c\xf7\xc2\x8d\x62\xe7\xb9\x1f\x62\x24\x19\x98\xee\x83\xfd\x5e\x2b\xb7\x19\xe9\x88\x33\x8a\xa5\x0e\x4b\xcf\x99\x4b\x79\xdc\x7f\x65\xe7\xa0\xea\x08\x15\xf6\x13\xd9\x80\x67\xac\x9d\xf5\x9e\x4c\xb3\xde\x23\xf2\xd0\xe2\x80\xe1\xef\x95\xc0\x41\x5f\x90\x9c\xc5\xa8\x0e\xb8\x36\x72\x9b\x9a\xc1\x5e\x3d\x28\xf2\xa8\xcd\xec\x9a\x60\x08\x2f\x88\x8c\x5b\xf6\xb0\x0e\x6d\x6d\xce\x70\xa3\x52\xb8\xd6\xce\xe4\xd2\x18\x59\x08\x32\xb7\xae\x48\x01\x82\x3f\xe4\xfe\x1c\xe4\x73\xf5\x6b\x41\x56\xb3\xca\xfc\x3d\xbd\xce\x6c\x6a\x03\x25\x7e\x1b\xce\x2a\x77\xeb\x7d\xed\x69\xe5\x83\x84\xdf\x19\x45\x2a\x51\xf2\x15\xca\xa8\x56\xd2\x21\x34\xf5\xb6\xca\xd2\xda\xb4\xa8\x65\x28\x9d\xfb\x84\x73\x4d\x1b\x44\xdc\x6a\x74\xae\x3e\xae\xdc\x67\xac\xb0\xd4\xde\xe9\xb8\x85\x17\x45\x5e\xd7\xd9\x03\x53\x01\x38\xda\x99\x61\x3a\x9c\xb4\x08\xdf\x79\xa1\xb5\xb5\x67\xbb\x35\x9f\x66\xd5\xf8\x0a\x3a\xa8\x81\x3c\x70\xe5\xe2\xc4\xba\x49\x4d\x8f\x62\xdc\x3f\xb4\xd8\x67\x8d\x34\xc4\x3d\xd8\xdf\xd4\xdf\x21\xe7\xa2\x9e\x81\x40\x35\x85\x35\x35\xf1\x53\x28\x7b\xe8\xa4\x1b\xb8\x33\x20\xee\x7d\x69\xa2\xc3\x4b\xf6\x44\x69\x7d\xcc\x4b\xe3\xe5\x63\x31\x93\x1e\xa4\x04\x37\xf5\x1d\x9b\x8d\x82\x22\x74\x65\x01\x66\xc8\x31\xf3\x46\x32\x2e\x25\xff\x28\x27\x5d\x89\x82\x19\x07\xb3\x5d\xed\xf7\x9b\x6a\xe5\x56\xd9\xc9\xb5\x60\x12\xdc\xdb\x24\xc0\x2d\xc2\xcb\x9f\x77\xdd\x49\xe8\x8e\x5f\x83\xd1\xe0\xfc\x24\xfd\x64\x1d\x17\x97\x1a\x52\xc7\x19\xc0\x1c\x99\x5c\xc0\x71\x13\x4b\x82\xf0\x2a\x48\xc3\x56\xb8\x48\xcd\x81\xca\xad\xab\x2c\xf2\xae\x8e\xa6\x53\x01\x90\x40\x1a\xd1\x83\x94\xf2\x60\x33\xf2\xe0\x9f\xbd\xe9\x70\x82\xe5\x96\x95\xff\x82\x2d\x53\xfe\x91\xd7\x72\x4b\x3b\xf2\x67\xb5\x22\xb4\x2b\x30\x19\x58\xea\x9c\x3c\xb4\x97\x01\x55\xcb\x31\x9d\x57\x0b\xcc\xe7\xd5\x02\xe1\x72\x5e\x2d\x48\x8e\x99\xfc\x67\x38\xb1\x89\x89\x6b\x59\x31\x47\x40\x98\x3b\x15\xd7\x28\x4d\x87\x6c\x5e\x2f\x8c\x41\xb7\x5b\x7f\x83\xf9\xbc\x5e\x60\x2a\x8b\xe0\x72\x5e\x2f\x48\x63\x8e\x6b\xd9\x66\xa0\xe8\xb2\x11\x5f\x4e\x78\xf6\x49\x61\xb6\x46\xb8\xd0\x0e\x04\x2b\x70\x7c\x0d\x85\xe5\x1a\xe7\x08\x53\x52\x18\x55\xe0\x7c\x81\x6f\xe5\x0c\xde\x91\xb9\xbb\x1a\xee\x0f\xcf\xcd\x3d\x4a\xd3\x44\xe7\xaa\x33\x0f\x93\x21\x21\xf7\x69\x9a\x28\x38\x3c\xf8\x65\x7c\x2f\xe9\xfc\x7e\x81\x97\xe4\x46\x99\x94\x25\x57\xaa\xc4\x83\x4f\xc6\x13\xc3\xdb\x48\x92\x4e\x2d\xd3\x34\xfb\x04\x69\x31\xe5\xf7\x2f\xc9\xcd\x38\xaf\xf5\xf6\x8c\x1b\x3c\xb3\x7b\x84\x3f\x07\xfb\xe6\x1e\x0d\x3e\x93\xeb\xec\xb3\xaa\xe2\x3d\xb9\x19\xcb\xad\x00\x26\xc0\x0a\xfe\x7c\xb3\x41\xd9\x67\x84\xdf\x90\x43\xd5\x66\x9f\xf1\x4b\xfc\x1e\xe1\x2b\x92\x8f\x92\x69\x32\xba\xc7\x1f\xc9\xc3\x01\x2d\xeb\x34\x6c\x1a\x07\xdb\xf0\x33\xb6\xb5\x87\x1f\xbd\xf1\x5e\x98\x27\xb0\x61\xdf\x63\x65\xb2\x9c\xbe\xc4\xf2\x5a\x99\xde\xe3\xbe\x2d\x7e\x7a\xd5\x25\x86\x39\x56\x5a\x03\x38\x78\xa0\xde\x9c\x7e\x52\x19\x7c\x35\xf1\x54\x87\x60\xd9\x0e\x6e\xe7\xf7\x0b\x72\x3b\x7f\x29\xff\x77\xb5\x20\x1f\xf1\x4e\xc9\x38\x1f\x81\xd4\xcb\xbf\xee\xcd\xc5\xf5\xf0\xf3\xae\x9e\xee\xf0\x6d\xbe\x9b\xde\xe2\x40\xed\x3d\xbd\xc3\x4a\x45\x3f\x7d\x30\xa6\xc4\x69\x9f\x67\x2b\xc9\xed\x9c\x2e\x94\x55\xd2\x3a\x00\x68\xb7\xf5\x47\x3f\x32\xbc\x48\xef\x5b\x1c\x71\x58\x28\x95\xca\x2b\xb0\x0d\x7c\x69\xdd\x7d\xa7\x85\x52\x12\xe7\x16\xe1\x9a\xfa\x24\xff\x57\xc5\x65\x38\x5d\x0b\xb5\xdf\x0f\x21\x56\x9d\xd5\x1f\x68\x2d\xfb\x89\x32\x93\xe8\xf8\x32\x2b\x3b\xf6\x2d\xd9\x63\xad\x66\x84\x29\x92\x44\xc1\x78\x2a\x59\x24\x71\x6d\x8b\xca\x61\x58\x00\x39\xe0\xe9\x70\xcf\x02\x48\x04\xa5\x1c\x57\x05\xa7\x7e\xec\xa8\x55\x6d\x4f\xbb\xea\xca\xa3\x5e\x33\x09\x1a\xdf\xe6\x3b\x5c\x05\x57\x03\x45\xc6\xca\xe8\x3f\xe5\xc8\xf8\xd1\x54\xbe\x1f\x8d\xca\x22\x4f\xd8\xbc\x9a\xe7\x0b\xe8\x79\xad\x75\xa2\xb6\xa5\xb8\x2f\x41\x56\x23\x9c\x68\x43\x24\xa8\xbb\x12\xd4\x99\x78\x3f\xea\xd2\x2a\xbb\x94\xe1\x12\x0d\xae\x39\xcd\x3f\x9a\x84\x98\xc3\x49\x8b\x37\xac\xec\x10\x91\x03\x13\xc2\x36\x59\xd7\xe5\xb9\xef\xf1\xe4\x72\xd6\x3a\xdb\x07\xc3\x15\x39\xa6\x1d\x37\x57\xbb\xe1\x83\x6b\x92\x8f\x97\x21\x17\x9c\x55\xf2\x0e\x07\x5b\x8b\x42\xc8\xaa\x2f\xe3\xe6\xb3\x1c\x57\x4e\xbe\x2e\xc8\xe4\xb2\x78\x5e\x4b\x4e\xd9\x4d\xbd\x55\x0b\xc1\xf3\x79\xb1\xc0\x6b\xb2\x55\xbd\xc1\x3b\xb2\xf6\xb5\x63\xb7\x64\xab\xfd\x30\xce\x14\xec\xa7\xf9\x89\xef\x4c\x96\xa4\x7b\x2f\x83\x29\xa4\x7c\xcf\x4c\x19\x34\xcb\xee\xbc\xad\xb3\xc3\x5b\xe5\xaa\x81\xef\xc9\x3a\x4a\xba\xef\xb0\xad\x7e\x0b\xd4\x1e\xa1\xe9\xed\xcc\xe5\x42\xbf\x27\x74\x7e\xbb\x40\x69\x9a\xdd\xa9\xd4\xef\x91\x3a\xee\x23\x75\x64\xf7\x64\x3b\x8e\x53\x73\x7c\x47\xae\xb3\x6d\xc8\xfc\x23\xbc\x3b\xe0\x8d\xb1\x3e\xe4\x8a\x71\x3f\x24\x41\x13\xaa\xa2\x87\xae\x80\xf7\xa6\x2c\xee\xd3\x74\x78\x31\x24\x84\x99\x5b\x76\x7d\x60\x93\x6f\x91\x0a\x20\xd0\x4d\xdf\x60\x17\xfc\x3e\x58\xce\x18\x19\x4e\xa6\x90\x94\x62\x09\x46\x9d\xe1\x05\x6a\x9d\x3d\xc1\x4c\x35\xbe\x43\x6d\xaf\x5b\x44\xce\x4c\x7c\x36\x08\xf0\x02\x43\x7e\x14\xa0\x65\xbf\x57\x81\x67\xd9\x83\xca\x33\x7f\x8f\xef\x58\xcd\x74\xba\xb0\x8f\xf4\x7e\x7a\xbb\xdf\x9b\x35\x68\x51\xcb\xd2\x94\x47\xe2\xf7\xd5\x9e\x3c\x6c\x83\xf5\x84\x3d\xbd\x35\x15\xd5\x19\xe8\x9f\xde\x2e\x3d\xe4\x3a\x83\x13\xbd\x50\x66\x99\x5a\x84\xfd\x03\x34\x5e\x15\x34\xe7\x99\xbe\x22\x8e\x79\xa3\xde\xe2\x3a\x78\xfb\x1e\xb2\xd9\x1e\x29\x4f\x1e\xaa\x72\xda\xf7\xae\x3b\x02\x39\xdc\xb6\x4e\x2e\xbb\xc5\x0f\xce\x8a\x35\x8d\x5a\xbd\x9c\x1d\xe9\x29\x96\x0d\x65\x07\x71\x06\x32\x8a\xa6\xa2\x6d\x15\x4e\x71\x25\xb7\xce\x77\x3c\xbf\xa5\x9f\x2a\xfe\x11\xc4\x4a\x94\xdd\x29\x46\xec\x13\xb9\xf3\x1c\xcc\x3f\x3d\xd5\x57\xfb\x89\x00\x5c\xff\xcf\x3d\xb3\x75\xbc\xce\x11\xf0\x8e\x27\x27\x53\x38\x25\x6b\xee\x93\x9c\xb9\x9f\x9a\x0b\xf6\x69\x89\x63\x97\x1a\xe0\xd3\x73\x45\xff\xe2\xdc\xaa\x56\xed\x71\x27\x37\xfe\x07\x2d\x7f\xaa\x7d\xaa\xb2\x67\xbc\x2f\xaa\x4f\x9e\x9b\x12\xbb\x75\x88\xb1\x65\x25\xd8\xe6\xde\x70\xcc\xea\x1e\xce\x92\x86\x17\xc6\xdf\x0d\xec\x14\x01\xaa\x82\x76\x5c\x73\xd0\x0c\xb0\x9d\x0b\x4f\xe9\x19\xb8\xb6\xe1\x64\xcd\xd6\xae\xf5\x04\xb5\xbe\x1a\x53\x5d\xf4\xc7\xbf\xff\xc4\x8a\xc2\xab\x00\x73\xe4\x6b\x05\x43\x17\x43\x6a\x3e\x03\xcd\x0a\xb9\x8a\xe7\xd2\xba\x26\x4a\xa3\xe4\xe9\x6b\x0a\xb6\xa2\x78\xf9\xab\x39\x81\x5b\x5c\x1e\x15\xb9\x2d\x7a\x08\x13\x9d\xe7\x00\xc5\x17\x29\x6a\x9e\x49\xfe\x1b\x30\x1d\x34\xa3\xa7\xb2\xb9\x65\x2a\x35\x82\xf0\x88\x2c\xd1\xf9\xdf\xe5\x43\x85\xed\xb1\x86\x58\xdd\xe0\x85\x89\x26\x54\x21\x9b\xf5\xa1\x4a\x5d\xd0\xe1\x37\xf7\xaa\x37\xf1\x82\xfe\xf6\x30\x1d\xf6\xf6\x87\x1d\x03\xf8\x4e\xfe\xa9\xa1\x0d\x5d\xbb\x4b\x8e\x0a\xca\xd5\xbe\xab\xe5\xa6\x8c\xe2\xe6\x54\x0e\xa9\x3e\xe2\x32\x5f\x8f\x97\xac\x64\x6a\xbe\xf8\x1f\x22\x7a\x7c\xf0\xc2\xbf\x89\x20\xbf\x23\xed\x83\xa6\xf2\x12\x95\x3d\x25\x4e\x7c\x66\x3c\x44\xbf\xd2\xdb\x25\x8d\x9f\x4d\xf8\xa9\xc8\x40\x0d\x2e\xd5\x08\x57\xa4\xe9\x8f\x70\x25\x7b\xd6\x47\x06\xd2\x68\x02\x98\x93\x0a\x97\x84\x45\x16\x6c\x2e\x16\x60\xb3\xe5\xf2\xed\x0d\x15\x2f\x83\x85\xcf\x4a\x24\xc5\xaf\x71\x10\x28\x69\x62\x13\x9c\x71\x1d\x37\xce\xe4\x9e\x83\x72\xae\x9e\x53\xab\x36\x6f\xcc\x03\x32\x9c\xe0\xa1\xd5\x05\xf3\x40\xb7\xa7\xea\xea\x44\xa8\xb9\xe0\xb1\x1c\x17\x26\x58\x0d\xa1\xb0\xb9\x16\xd8\xdc\x20\x26\x02\x7c\x18\xd3\x54\x0a\x77\xeb\x58\x58\x0c\xca\x1a\x74\x34\x54\x7d\xd5\xd4\xa2\xba\x75\xb1\xea\x67\x8a\x5d\x3a\xab\x4a\x2f\x36\x5d\xc5\xae\xeb\x08\x75\x0d\x0d\xaa\x62\xd4\xcd\xc0\x5b\x40\x0c\x70\xed\xc6\x1c\x33\xa2\x8b\x42\x95\x20\x6b\x8d\x26\xdd\xc0\xfc\xfd\x7e\xdd\x8b\x01\x92\x8d\x35\x7d\xa8\x5e\x11\x10\x4f\x6f\xe7\x53\x8d\x04\x9c\x05\x99\x0f\x18\x4e\x3c\xc8\x30\x29\xa4\x22\x59\x71\x40\xa1\x83\x51\xe4\x5d\x3e\x8c\x85\x85\x71\xe7\x37\x40\xc5\xac\xc6\x21\xc9\xee\x39\xe6\x44\x6a\x0d\xbf\xc0\xdd\x07\x16\x35\x6a\x15\x12\xf8\xbe\x1b\x83\x31\x19\x40\x4a\x9a\x8c\x21\xfb\x46\x7e\x0b\x8b\xea\xd0\x29\x83\xa1\xb2\xe3\x20\x96\xe6\xeb\x88\x6b\x1a\x7c\xec\x5f\x94\x3a\x7f\x32\x1d\x8b\x2a\xb8\x1c\xbd\xf5\xe9\xb6\xd6\x03\xb9\x5c\x79\x9e\xd5\xdf\x32\x45\xc4\xe3\x1e\x59\x74\xfc\x29\xaf\xaf\xae\x61\x7f\x4a\x61\x81\x99\x1f\xb3\x6c\x82\x6f\xc7\x45\x75\x03\xbf\x51\x26\xd0\x34\x73\xe0\x9a\xc3\x0b\x1b\x97\x4e\xc7\xf0\x07\x16\x58\x73\xfb\x08\xb3\xf1\x92\xd5\xd0\xa8\xb2\x56\xac\x33\x5d\x08\xcd\xc0\xfb\x52\x63\x39\x1b\xaf\xf8\x60\x08\x19\x84\xee\xaa\xd2\xb2\xc5\x5c\x36\x9f\xb9\x67\x30\xba\xa5\xee\x87\x9b\xe6\x17\x3a\x72\xaa\xef\x22\xcd\xba\x1f\xfc\x40\xf3\xbb\x58\x5a\x02\x28\x18\x4b\x8f\x60\xcd\x41\xf6\xdd\xe1\x83\xe3\xca\x3c\x7e\x78\x40\x77\x0c\x53\x60\x0f\x27\xa0\x04\x36\x6d\x66\x73\x36\x23\xbc\x0a\xc4\x06\x23\x2e\xc0\x8d\xdc\xe0\x8d\x35\x33\xd4\x82\x37\x92\x66\x8e\xd7\x75\x61\xd0\xb2\xeb\xfd\x7e\x7e\xb3\xc0\xce\xeb\x96\x15\xeb\x6f\xdf\xff\x90\xa1\xc1\xd6\xe0\x50\xf8\x2a\x12\x87\x46\x81\x3b\x01\xee\xc3\x09\xae\xb4\xc2\x0f\xfc\xb4\xeb\x9a\x72\xf0\xbe\x02\x95\x4c\x4c\x55\x37\xb9\xa4\xcf\x37\x46\x8d\x41\x47\x23\xb4\x01\x44\xb4\xbc\x28\xb4\x3b\x3a\xc2\xab\xf1\x6d\xbe\xcb\xb6\x01\x70\x0a\xf6\xba\x79\x00\x68\x63\xb9\xcd\xeb\x57\xd5\xba\x29\xe8\x37\x79\x4d\xd7\xef\x94\xa3\x15\x30\xa5\xea\x3e\xe6\xf1\xfb\x98\x91\x87\x38\x7c\xc1\x94\xe2\x0e\xa6\xc5\x34\x12\xdc\x13\xb9\x93\xce\x6f\xf3\x9d\x71\xb5\xeb\x86\xed\x77\x52\x45\xc7\x18\xa2\x39\x05\x24\x92\xf8\x1b\xc2\x51\x6b\x1d\x67\xe4\x5a\x5b\xbd\x07\x30\x12\x98\x99\x04\x02\xc7\xb9\xa2\x7e\x36\x81\x9f\x55\xe1\xb7\xa6\xc0\x43\x0b\x15\xc5\x27\x35\xca\x0e\xf5\xa6\x16\x4c\xff\xd4\xe1\x48\x5b\xa5\x00\xb7\x16\x60\x6f\x9b\x8d\x97\x4b\x75\x77\xf3\xfb\xe5\xd2\xf8\xc9\xf1\xf1\x6d\xbf\x75\x77\x5d\x5a\xf8\x24\x95\x23\x45\xe4\x5c\xe8\xe4\xed\x8f\x33\x6c\x92\xbd\x63\x79\x01\x80\x94\x56\x07\x0c\xde\x9f\x8a\xe9\x03\xbd\xae\x45\xf4\x06\x2f\xcb\xc3\x3c\x9f\x97\x04\xe7\xce\xa1\xcd\x5b\x5c\xfb\x4c\x39\x77\x29\x94\x27\x20\x57\x8a\x95\xd0\xbf\x5a\x9d\xe1\xc5\x34\x1d\xdf\xe1\x3a\x55\x07\x94\xfb\x41\xb7\x9c\xa1\xde\xac\x76\xbb\x66\x30\x5c\xbd\x12\xb1\x8c\xa7\xc8\xa0\x83\x04\x7c\xaf\x3c\x3d\x3e\x9e\x7f\x27\x0e\xc1\x0d\x50\x12\x2e\x3c\x9c\xa8\xdd\xe7\xbc\x52\xfc\x91\xd8\x70\x50\x56\x6b\x77\x1a\x56\xde\xa4\x69\xe7\x19\x5d\x1b\x8b\xa9\x30\x09\x3c\x4e\xf1\x87\x82\x40\x77\xa5\xac\x75\xfe\x15\x93\xcb\xca\x85\x7d\x56\xa3\x11\x7a\xa0\x84\xcf\x2b\xad\xb5\xb5\x0a\xd6\x9c\xac\xfb\x41\xbc\x1a\xf0\xcd\x86\x6f\x68\x17\x85\xdc\x54\xd7\x18\xc7\xa6\x82\xbc\xcd\x18\x16\x38\x9f\x37\x0b\x34\x60\xa4\x18\x17\x4c\x93\x8c\x5a\xde\x05\x9f\xca\xf7\xca\x2b\x05\xbc\x33\xc1\x96\x0d\x30\x1b\x9e\x53\x95\x72\x15\x1b\x12\xd2\x2f\xae\x7c\x9d\xf6\xfb\xac\xf6\x5e\xa2\x16\xbc\x39\x1d\x14\x63\x4d\xfe\x0e\x7d\x80\x5c\x81\xa4\x6e\x01\x58\xc9\xda\x35\x44\xb5\x2b\x8c\xf3\x1d\xea\x3f\x1a\xdb\xe5\x52\x69\x67\x18\x1a\x58\x43\xc5\x2a\x4e\x33\x37\x64\x15\x90\xbd\x3b\x46\x3f\x4d\xcf\x55\x5f\x13\x6d\xd6\x0f\xda\x20\x1b\x23\xee\x18\x2d\xc2\xf1\x1e\xe0\x95\x35\x74\x9f\x7b\x34\xe2\xdc\x20\x02\x4d\x61\xc6\x90\xe4\x13\x5f\x40\xbd\xef\xaa\x0a\xfc\xf2\x62\x43\x6e\xc1\xb8\x7f\x20\xcb\x84\x41\x4f\x53\x38\x5b\xcf\xfe\x25\x1b\x8f\xd0\xec\x19\x9a\x4f\x16\x21\x9c\x6f\x0f\x8c\xdb\x56\xa7\x1c\xbe\xfb\x45\x0e\xc7\x0c\x76\x36\xf4\x9c\x2e\x32\x01\x49\x97\x2d\x61\x7b\x95\x71\xac\xa6\x9a\xcb\xaa\xff\xdf\x40\x93\x6f\x1e\x87\x26\x7f\x1a\x24\xf9\xe6\x89\xe0\xd4\x79\x08\x4e\xdd\x5d\x80\x0e\x1e\x79\xae\xf3\xc2\x3d\x16\xf0\xf7\xcf\x01\x06\xbf\xec\x40\x82\x5b\xf4\xd8\xc7\x02\xf9\xba\x50\xe1\xf8\x83\x09\xc4\xab\xff\x79\x70\xe9\x75\x04\xa6\xec\x9f\x04\x98\xae\x48\xef\xc1\xd9\x79\x04\x38\x3d\x58\x73\x9b\x8b\xd4\x25\x1a\xab\xd4\xa2\xf7\xa0\xd5\x69\x34\xf4\xd1\x5e\x19\xe6\x03\x9d\x84\x2c\x04\x99\x3d\x1a\x30\xed\xeb\xa1\xba\xe0\xb4\x46\x7e\xac\xc1\xd2\xfb\xdf\xb7\xe3\xb4\x10\x73\x10\x8b\xbe\x7e\x1c\x04\xba\x3b\x61\x01\x1a\xb4\x8e\x50\x8e\x64\xb0\x0a\x3e\x0a\x0d\xb8\x5e\xb8\xa9\x14\x63\xd1\xa3\xe9\xb0\x7c\x9a\x6d\x99\x91\xe0\x9a\xb0\x09\xcd\x23\x77\x08\xd1\x8a\xc3\xc7\x6c\x34\x5e\xc4\x75\x66\x72\x44\x9a\xf8\xb9\x40\x81\x69\xd9\x03\xa1\x9c\x71\x2c\xf4\x1e\xfc\x9c\x8b\x05\x02\x59\x8f\x37\x25\xca\xe4\xcf\x39\x5f\xe0\x44\xf7\x50\x1d\xb9\x93\x40\x20\x3a\x7c\xb7\x64\xf1\x45\x5c\xf7\xbd\xdc\x30\x1f\xf4\xda\x91\x16\xd5\xd8\x29\xc8\x10\xce\x6c\x96\xaf\xd7\x7a\x69\x0f\x56\xdb\x77\x76\xf6\x48\x4f\x16\x40\x57\x47\x87\xe2\x52\x74\x3c\xaa\xa2\x35\x5c\xa3\x63\x6c\x0f\x08\x79\x87\xd2\x3f\xb2\x83\x02\x48\xdf\xcd\x3f\x4d\x2d\xbc\x26\x8b\xa5\xef\x57\xbc\xba\x35\xce\x55\x48\x33\xfe\xd1\x34\x9f\x95\xc7\x2c\xe5\xe4\x21\x4c\x09\x36\xa5\xed\xe0\xd8\xc7\x2b\x23\xbb\x19\xe6\x28\x47\xa8\x6d\x75\xa0\x9f\xe4\x0b\x75\x68\x8e\xdf\xf7\x4c\x05\x9d\x71\x1b\x74\x66\x50\xf5\xb1\x40\x38\x06\x96\xab\x53\x8b\xa5\xa9\xf9\x2b\x3b\x50\xce\x66\x1c\x95\x45\xed\x0f\x23\x7d\xc7\x3c\x85\x0f\x72\x38\x83\x17\xc6\x4b\x52\xf8\x16\xa8\x12\x57\x3a\x42\x71\x4d\x0b\x2a\xe8\x99\x98\xd3\x05\x16\xf3\x4a\x5b\x9a\x17\x44\x07\x57\x45\x3d\x0b\x4a\x6c\xca\x69\x3f\x32\x3d\xf5\x76\xb1\x08\x21\xc6\xc3\x73\x20\x40\x56\x8e\xa3\x67\x94\x18\xbc\x2b\x8d\x2b\x9a\x24\x91\xed\xc1\x41\xc6\xd5\x63\x72\x8d\x08\xa1\x33\x3a\x4d\x72\x49\xc6\x95\x8b\xef\x1f\xde\xbf\x79\x3d\x56\xfb\x8d\x6d\x24\xdb\x35\x4d\x12\x95\x07\xf0\x80\xab\x75\xa7\xf2\xf8\xac\x81\x06\xb2\x4c\xd3\x2c\x9c\xb4\x52\xfb\x40\x6b\x5e\xea\x80\x2b\x05\x57\x99\x52\xe4\xa4\x95\xda\x95\x42\x8f\xf5\x71\xec\x90\xd8\x68\xaf\x95\xc4\xad\xc6\x9b\x08\xde\x50\xc8\x4c\x3c\x4d\xca\xe6\xf6\x5a\xb9\x10\x8a\xd9\x6b\xf8\x3b\xa3\x48\x85\xf8\xbe\xd9\x64\x28\x98\x27\x98\xfe\x2b\x94\xc1\x7c\xed\x72\x5e\xcb\x6b\x06\x4d\xd5\x4c\xed\x78\x53\xd2\x43\x79\x65\x0e\xb3\xd4\x1d\x4f\x1b\xea\xc5\xa7\x9c\x41\x8e\x2a\xed\x78\xc5\x21\x2e\xbc\x5c\x0c\x58\x9a\xb2\xc3\x2e\x14\x62\x5e\x2e\xd2\xd4\xce\x78\xb9\x68\x35\x8b\x7f\x50\x03\x6d\xb3\x22\xe0\x8a\x28\x6f\xc7\x0d\x24\x14\x56\xe6\x7b\xb0\x5c\x81\x29\x24\x8b\xde\xe1\x38\x27\x0f\x3a\x17\xe8\x72\xc7\xab\x15\xad\x35\xab\xe1\xda\xf3\x5d\xf4\x2b\x29\x70\x62\xae\x43\x43\x9c\x77\x2c\x47\x2e\x2d\x68\x37\x47\x82\xfa\xc6\xa8\x4c\x4a\x64\xac\x5f\x19\x3b\xc8\x56\xf4\x58\x4d\xe6\xa3\x50\x74\x13\x18\xe4\xed\x02\x79\x12\x4c\xad\x25\x98\x5a\x2f\xeb\x63\x83\x8a\xcc\x67\xc7\x35\xef\xa0\x4f\x84\x59\x5c\x87\x4a\xeb\xae\xba\x8e\x5f\xd6\xc1\x3a\xe6\xb7\xe3\x3f\xfd\xf8\xf2\xdd\x5f\x97\x1d\xc8\x81\xc0\xad\x38\x47\x15\xb8\x47\xd5\x68\xbf\xcf\xd8\xbc\x5e\x90\x7c\x5e\x2f\x8c\xc4\xbb\x69\x8a\xe2\xfe\xfd\xaa\xda\xf5\xb2\x41\xd8\x84\xcf\x87\x8b\xb0\xce\x62\x72\xcc\x50\xab\xa7\xae\xbb\x96\x07\x13\x72\x7c\xb4\x14\xc4\xf4\x69\x7b\xbf\x86\x74\x18\x65\xdd\x48\x39\xda\xbf\x82\xeb\x8c\x61\xee\x6f\x08\xc3\x3d\xc5\x82\x42\x58\x10\x14\x82\x70\xa9\xbd\x82\x8f\x9e\xd7\xee\x57\x30\x9c\x1b\x2a\xfe\xf4\xf6\x15\xf5\xa3\x92\x3c\x39\x5c\xa9\x66\x5c\xcc\x4e\xa0\xb6\x02\xef\x21\xa8\xa4\x13\xb0\x13\xab\xc9\x02\x95\xd0\xb9\x38\xbf\x50\x79\x2a\x6c\xc4\xb1\x36\x7d\x6b\xe1\xd7\xc5\x05\xdb\x48\x5d\x87\x37\x26\x45\x4d\x32\x9c\x60\x88\xb1\x29\xc8\x7c\x81\x57\x64\x72\xb9\x7a\x2e\x2e\x47\xa3\x15\x62\x1b\x7b\x7e\xec\xc0\x32\x3a\x5f\x2d\x90\x13\x02\x36\x64\x72\xb9\x79\xce\x7c\x0f\xbe\xcd\x68\x84\x24\xff\xf1\xf3\xae\x9e\x6f\x16\xb8\x30\x91\x8e\x97\xc1\x1e\xa8\x31\x93\xe4\x4a\x9b\x04\x72\xa2\x95\xa8\x5b\x02\xbe\xc1\x05\xf8\x06\xd7\x56\x1d\x9c\x5b\xae\xd9\x8d\x8e\x6c\x11\xde\x2a\x36\x2f\xb6\xf3\x7a\xa2\x8f\x25\x9a\x38\xd8\x4c\xfe\x32\x56\x64\x02\x50\x36\x46\xaf\xf6\x3c\xbf\x1c\x8d\x2a\x39\x11\x65\x6f\x22\xd8\xbc\x5a\x20\xe4\x80\xd5\xac\x2e\x4d\xff\x51\x90\x09\x44\xef\x7a\x33\x53\x3c\x5f\x81\x7f\x63\xd6\x10\x08\x0b\x56\xee\x8d\xc8\xc6\xff\xf0\x34\xad\xe1\xc7\x7e\x5f\x47\x80\xd2\x6c\x91\xfe\x2b\xf9\x81\x73\x84\x84\x42\xda\xc9\x31\x4d\x9b\x21\x21\xb1\x6f\x00\x23\x30\xf6\x62\x41\xf8\xbc\x59\x60\x7d\x43\xc8\xbf\xd5\xc6\x3c\x76\xde\x8e\xcd\x36\xec\xb2\x20\x76\xad\x8e\x80\x6d\x74\x94\x90\xa3\x51\x13\x9f\x77\x50\x46\x22\xcf\x83\xf4\xd0\x2c\xc3\xf6\x35\x93\x8c\xe5\x8e\x34\xf3\x2c\xe4\xfd\xa8\xe6\x99\x1d\x98\x67\x28\x12\x9b\x67\xe6\xcd\x33\x14\xd2\xf3\x5c\x0d\x09\x89\x7d\x21\x37\xee\x3c\xf6\x62\x41\xc4\xbc\xb2\xb3\x2c\xff\xf6\xf8\xed\xed\x41\xe4\x11\x16\x45\x1e\x61\x1a\x79\x84\x6a\xef\x39\x34\x38\xd4\xa8\x0d\xb3\xd9\x62\x35\x07\x98\x75\x62\xcb\x14\xbb\xb8\xda\xd2\x75\x63\x2d\x47\x7d\xeb\xb1\x91\xbb\x1e\x75\x99\x5a\xd6\xfd\x77\x04\xa4\x40\xd3\xc6\x1b\x90\x06\xb5\x6f\x97\x2b\x59\x2b\xd7\x29\x9c\x68\xc7\x9c\xb0\x8d\x44\x03\x89\xd5\xe3\xe8\xeb\x3e\x5e\xe3\x13\x6e\x5b\x05\x00\xb5\xb3\xe6\x27\x4f\x50\x0d\xbf\x8f\x3e\x8c\x5d\xbf\x21\x14\xce\xc0\xb9\x8a\xf9\x29\x7b\x14\x24\xb0\xb5\x37\x4f\x1c\x2c\xba\x41\x8f\x39\x36\xdf\x7d\xad\x43\x64\xe2\xe1\xd2\x29\xc6\xaa\x12\xc3\xaf\x45\xca\x1d\x5b\x3b\xc9\x32\x43\x57\x6e\x73\xfe\x11\x4c\xde\x57\xb5\x36\x7a\x47\xe4\xf2\xc0\xa9\xca\x97\xcd\x43\x73\xf9\x61\xed\x4d\x58\x81\x49\xaf\x23\x67\xa2\xa0\xb9\xf9\xbc\x6b\xee\x8f\xb7\xae\xce\x9a\xf9\xbe\xe7\xdf\x13\xbd\x6a\xe1\x6a\xe5\x90\x4c\xd6\x20\xf6\x03\xa8\xb2\x0b\x8b\xb4\x7c\x59\x57\xcb\x52\xcd\xc5\x62\xbf\xcf\xe4\x3f\x31\xc7\x28\x8b\x6a\xaa\x34\x2c\x60\x52\xb4\x61\x07\x31\x99\xff\x32\xcb\x49\xad\xc2\xa0\x5f\x6c\x59\xb1\xee\x78\x27\x09\xfc\x60\xa2\x37\xa7\xc3\x89\x9f\x52\x80\xb5\x08\x8d\xaf\xab\x0a\x62\x32\x54\x6b\x24\x77\x31\xa4\xb8\x6a\x33\xd6\x8f\x9a\xfe\xd4\x4d\x94\x45\x6d\x3e\x89\x4b\xfe\x35\x99\x5c\x9e\x9f\xbb\xd0\xc4\x39\x5f\x38\xe5\x77\xc0\x77\x30\x0d\xb5\x2e\x32\x86\x4b\xa3\x73\x6f\x5b\x15\x83\xf5\xf0\x89\x15\x85\x36\x7e\x42\xac\x44\x2f\xa8\x41\xef\xc3\x08\x39\xd2\xa1\xff\x60\x66\xec\x7d\xe6\xb0\x07\xe4\x6a\xcd\x5d\xd7\x17\x03\x39\xae\xd0\x54\xcd\x36\x19\x77\x3e\xef\x15\x79\x9f\x51\xe3\xeb\x81\x82\x90\x95\x32\xb6\xe9\xc1\xbf\xea\xa0\x6a\x5c\xca\x26\x08\x0f\x2f\x5a\xb5\xd8\x9f\xfd\xaa\xb5\xf9\x32\xdf\xef\xb3\x2f\xa9\x39\x57\x35\x23\x3f\x91\x86\x0f\x8c\x82\x19\x99\x2f\x06\xe5\x21\x75\x4b\xff\x99\x32\xd9\x7e\xd8\xf2\xea\x53\x39\x0b\x7e\x4d\xe9\x40\x5d\x9a\x92\x95\x13\x0a\xd8\xa4\x1c\xdf\xd2\xba\xce\x6f\xa8\x7d\x61\x9f\x40\x8a\x2a\x91\xaf\x3e\x7a\xaf\xe0\x37\xc2\x3d\xa5\x55\xe9\xca\x20\x74\x99\x71\xb2\xaa\xca\xba\x2a\x28\x52\xed\x6b\xe9\x0c\x44\x06\xc9\x27\xc3\x0c\x9d\x7d\xda\xb2\x82\x9e\x69\xc1\x8b\x95\x37\xca\xfd\x6c\x7a\x96\x8c\x4c\x16\x34\x10\x48\x5b\xac\x29\x68\x24\x64\x4b\x47\xad\x96\xc7\x77\x87\xc2\x9d\x62\xc0\x3f\xfb\xbb\xc3\x26\xac\x08\xf6\x07\x3f\xb2\x0d\xba\x9b\xc0\xd5\x60\x0e\xe2\x2c\x3b\xf2\x7d\x0e\x4b\x3d\x15\xe3\x1d\xbb\xab\xc4\xef\x5d\x1a\xba\x16\xb5\xad\x3b\xb4\x9f\x3b\x28\x4c\x65\x00\x48\x03\x94\xcb\xb7\x4f\x75\xf8\x88\x51\xb2\xf4\xe0\xea\xdf\x64\xdc\x01\x12\x60\xa6\x5e\xe2\x0a\xcd\xaa\x20\x31\xfa\xfb\x7f\xa8\x49\x9c\x93\x6e\x40\x79\x35\x13\xd3\x4a\x05\x94\xc7\xbb\xd2\xfd\x80\xcd\xc4\x94\xa9\x0f\x70\x8e\x66\x79\xd0\xbd\x37\xbd\xcc\x8e\xce\x02\x50\x22\xe8\x90\xfc\xad\xfc\x33\x72\x6d\xfa\x73\x60\x32\x1c\xb0\x6d\x7a\x25\x8c\xb7\xa7\x4b\x04\xc9\xd2\xb4\x72\xad\x5e\x05\x92\xfe\x50\x05\xdb\x58\xac\x08\xe7\x6d\x59\x5b\x26\x23\x79\x91\x97\xbf\x15\x67\xfa\xfa\x3f\x53\xb1\x70\x67\xbf\x4d\x46\x7c\x94\xfc\xf6\xec\x9a\xae\xf2\xa6\xa6\x67\xf7\x55\xc3\xcf\xf2\xdd\xee\x6c\x9b\xd7\xb2\xf8\x86\x95\xac\xde\xd2\xf5\x99\xd3\x68\xc8\xe3\xc0\x4a\x51\x9d\x31\x51\x9f\x6d\x18\xaf\x85\x3a\x1d\xe3\xb3\x0f\x95\xab\xbe\x34\x2d\x54\xe5\xd9\x1a\xe2\xfd\x60\x64\xaa\x68\x7d\xb6\x6e\xb8\x72\xfe\x74\xf5\x62\xd9\xf8\xd9\x2a\x2f\xcf\x56\x79\x51\x9c\xfd\x17\x58\x86\x32\xf4\x5f\xb2\x06\xb1\xa5\x67\xff\xe5\xf6\xeb\x7f\x9d\x29\xda\x72\xb6\xcb\xeb\x5a\x76\xae\x52\x25\xc0\x18\xfa\xcc\x43\xc0\x7b\xe6\x20\xef\xfe\xeb\x6c\x5b\x55\x1f\xeb\x71\x82\xda\x8e\x7c\x7a\x81\x1b\xff\xee\x69\xe4\xdd\xd3\x9c\x9f\x4b\x06\xbf\x22\x19\x03\xa8\x38\xed\x87\x27\x69\x89\x8e\x22\xf4\xfe\x9c\xf3\x85\x5a\x06\x50\x7a\x5b\x7d\x8f\xbd\x8d\x20\x5c\x25\xd3\x64\x99\x10\xc2\xe5\xb7\x36\x68\x25\x42\x97\x4b\x30\x1f\x0f\xa4\xec\xdc\x2a\x29\xe4\xa5\xbe\xc1\x0b\x54\xf8\xc6\x99\x8e\x05\xd0\xa4\x86\x1a\xe6\x69\x3a\x14\x28\xba\x0d\x5e\x57\x62\x2b\xa7\x5e\xb3\x2e\x30\x71\xe1\x66\x18\x9f\x7d\xbf\x81\xb5\x58\xb3\xb5\x2e\xe6\x95\xc2\xc0\x37\x9d\xc1\x60\x60\xb5\xae\xe9\x19\xec\x9d\xf5\xd9\xf5\xfd\x99\x1a\xb0\xac\x5f\xf0\x86\x9e\x6d\x78\x75\xeb\xed\x05\x9d\xdd\x12\xd4\x41\x5e\x6a\x0b\x0c\x15\xc0\x47\xae\x33\xa2\x3a\xbb\x6e\xae\xaf\x0b\x3a\xf6\x63\x14\x3e\xf6\xe4\x3f\x42\xfb\x0c\xb2\x9c\x20\x6d\x68\x94\x85\x1d\xe7\x60\xc4\xf0\x52\xcb\x31\x3a\x30\x93\x45\x03\x33\xf3\xc5\xa0\x1e\xb3\x5a\xb3\x0f\xeb\x59\x35\xaf\x81\x5d\x93\x42\xce\x4e\x27\x1e\xf5\x1e\x59\xdd\x4f\x66\x41\x10\x91\x8b\x80\xb7\x23\xf8\xe0\x73\x7f\x8f\xfa\xe7\xc8\x35\x07\xee\xa6\x03\xd7\xbf\xd4\x9f\xbe\xcd\x85\xbc\x30\x25\x8f\x38\x17\x5e\x5a\xd2\x52\x61\x21\xa8\xe4\x8b\x31\x6f\xab\xcb\xc0\x12\xe2\xa7\xce\xd4\xea\xb4\xde\x4b\x97\x8d\x13\x57\xf1\x12\x60\x4b\xd1\xb8\xa4\x4d\x9f\x54\xc7\x00\x18\x7c\x4a\x8b\x06\x4d\x9a\xe6\xe3\xab\xb7\x6f\x97\x2f\x3e\xbc\xfb\x61\xa9\x9d\x92\xdf\xbe\x7b\xf3\xf6\x7d\x9a\x66\x41\x27\x59\x79\xd6\xec\xf7\x9a\xeb\x0d\x61\x26\xb2\xa6\x33\x9e\x2e\xaa\x86\x05\xe2\x73\xce\x74\x61\xea\xd0\x56\x0f\x2f\x16\x8d\x83\xba\xd5\xa3\xc8\x04\x9d\xd6\x3b\x6f\x42\x4f\xef\xa2\x97\x13\xf5\xe4\x7e\x7a\xdf\xa0\xd6\xed\xc4\x57\xfe\xc5\xda\x91\x48\x21\x3e\x24\x94\x45\x69\x44\xce\x0c\x6c\xfc\xfb\xbd\x88\xc5\x27\x49\x61\xef\x90\x30\xba\xe3\xd5\x2d\xab\x29\xa1\xe3\x15\xc0\x76\x06\x3e\xdc\x9b\x6c\x28\xfa\x6e\xcf\x26\x96\x80\x0e\x44\x44\x46\x03\xe1\x2b\x71\x37\x85\x0a\x37\xf0\x29\xc8\x8b\xee\x7d\x4d\x7b\x16\x10\x81\x42\xa8\x0d\xcd\xc2\x47\xb0\x36\xca\xac\x02\x44\x0d\xa5\x6c\x9c\x57\x0b\x7f\x7e\xdf\x39\xdc\x1b\x67\x02\x27\x73\xba\xb8\xe4\x16\x42\xe4\xd2\x88\x12\xdc\x44\xb5\x1b\x58\x44\xeb\xf2\x46\x08\x11\x4e\xb7\xaa\xfa\x6c\xe0\xfc\xea\xb0\xa3\x0c\x71\xc5\xea\xb2\x4e\x57\xde\x6a\x55\xba\x35\xb3\x3c\xa8\x06\xa6\xa5\xc6\x06\xab\xa7\xb1\xd0\x9a\x4f\x79\xfd\x63\x4d\xd7\xd3\xe1\x85\xd1\x94\x82\xca\x4b\xde\xfe\x33\x39\x3a\xf5\x27\x9a\x0a\x80\x00\x32\x7e\xd9\xa6\x6f\xd8\x82\x0e\x56\x68\x4a\x49\x85\x1f\x9c\x7b\xdf\x94\x62\xe3\x92\x37\xad\xbc\x8e\xfe\x3d\x14\xb0\x64\x23\xdc\xc7\xf9\x33\xf3\x00\x6e\xbe\xba\x9d\xf1\x6d\xce\x4a\x3b\x22\x95\x01\x8f\xfb\x3c\xa1\x42\x3f\x53\xae\x82\xad\x1d\xf0\x43\xdb\x62\x81\xda\x65\x88\x24\x74\x1b\xf7\x55\x06\x31\x31\xf4\x03\xcf\x7a\xcf\x6c\x86\xd1\xa0\x46\xbf\xc4\xb4\xf7\x4d\x6b\x6c\x07\xfe\x43\x9d\x28\x51\xbd\x69\xb1\x23\xf5\xd3\x08\x24\x1f\x2e\x01\xff\xc4\xcc\x20\xeb\xe5\x9f\xf6\xd3\x1d\x8e\x46\x00\xef\x22\xe5\x69\x79\xab\x48\xce\xc5\x3a\x19\x5b\x48\x00\xe7\x06\x7a\x71\x59\xb9\x6f\xc1\x0d\x54\xbe\x13\x84\xce\x2b\x75\xc7\x78\x49\x36\x31\x27\xd7\xca\x1d\xbd\x44\x76\x87\xa7\xe9\x90\x65\x1c\x0b\x74\x89\xdc\x0e\x2f\x61\x7c\x0e\xde\x41\xa3\x46\xd9\xb4\x23\xee\xda\x1c\xff\xbd\x62\x25\xd4\x0e\x60\x41\x26\x42\x98\x39\xa4\xa6\x20\xdc\x65\x7a\x87\xc3\x38\x95\xe9\xbd\x4d\xad\x9f\x3c\x4b\x5c\x4a\xfe\x64\x9b\xd7\xdb\x04\x37\xbc\x50\xc9\xa4\xa3\xe8\x43\x5d\x22\x7c\xd0\x73\xb9\x55\xa1\xd5\x9d\x20\x1a\xdb\xdb\xf5\xe1\x50\x69\x75\x57\x7e\x4b\x96\x5e\x7c\xf1\xb7\x4f\x8e\x2f\x36\xe1\xab\x8f\xa4\x84\x3a\x25\x1c\xf7\xcb\xf2\x0f\xfb\x7e\x95\x66\x1f\xd2\x40\xc3\x02\x4d\x6b\x17\x6d\xea\x05\xa9\x70\x22\xfc\x5f\x7f\xa8\x55\x88\x22\x6f\x6d\x30\x8d\x0b\x0a\x3d\xec\x7a\x06\x46\x00\x9b\xc9\xb5\x57\xdd\xc0\xfa\x4f\x6b\x9e\xbb\xe7\x8c\x56\x62\x6d\x55\xb1\x80\xb3\xc3\x0b\x90\xbc\xd3\xd4\x87\xf2\x60\x0e\xfb\xc9\x53\xa4\x05\x50\xd1\x2c\xf4\xc3\xf3\xc6\x7d\x20\xfb\x7e\x89\x6b\xc3\x4d\x6d\x01\x07\xe6\xe5\xcf\x4d\x5e\x00\xda\x51\x80\x3a\xe7\x21\x76\x74\xb2\x65\x97\x4f\xd8\x30\xc2\x53\x70\x3f\x3d\x03\x99\x0e\xd9\x7e\x52\x6e\xbd\xc3\xf1\xeb\x47\xe2\xce\x1f\x8b\xc3\xee\x6d\xcb\xae\xb7\x6c\x1c\x48\x59\x32\x1a\x06\xa1\x2e\xd0\xca\x08\x29\x93\xf5\x2e\xf8\x10\xc6\x6b\x46\xc7\xbb\x6a\x97\xa1\x71\x88\xfd\x66\x60\xd5\xec\x7d\x33\xa5\x16\xa0\x46\x39\xe7\x4e\x69\x00\x17\x27\xda\x16\xd3\x98\x7f\x43\x54\x3f\xdc\xc3\x30\xe8\x3f\x9a\x57\x07\x91\x55\x64\x5f\x3a\xc0\x8e\x76\x7b\xf6\xe4\x05\xd9\xad\x0e\x9e\x4a\xc4\xcc\xa1\x33\x4b\xbd\x97\x05\xe9\xba\x8b\x4e\x29\x6f\xa3\x88\x24\xc2\x22\xb2\x0e\xa7\xab\xea\xa6\x64\xbf\x50\xae\xfd\xcb\x79\xad\xf2\x14\x62\x15\x7e\x20\xdc\x9d\xe5\xce\xb6\xe4\xb5\x00\x34\x47\x55\x5c\x0f\x6a\xe7\xca\xcf\x49\x0e\x08\x17\x2a\x3f\x56\xad\xc5\x90\x5c\xeb\x8c\x1b\x3f\xdd\x16\xf8\x7b\xb4\x9d\xb1\x10\x38\x5b\x7d\xa3\x58\xd4\x3b\x35\x02\xeb\x79\x5a\xfa\xdf\xf9\x22\x96\xb2\xf3\xab\x10\xfb\xd3\xa6\xec\x4c\x12\xdc\x09\xc6\xb0\xb3\xd1\x40\x40\x06\x2e\x88\xa4\x22\x0d\xc2\x2b\x0f\x89\xa6\x94\x97\x7c\x91\xa6\x85\xe4\x0a\x35\xdb\xb7\x01\x20\xeb\x66\x0c\x79\x92\xdf\x6c\xb2\x02\xcd\x9a\x71\xdd\x5c\xd7\x82\x67\x85\x4b\x6b\x3d\x6d\x06\x2b\x45\xd5\xe0\xd2\x2b\xe7\xc5\x02\x6f\x0c\x2a\x9b\xff\x02\x37\x68\xc0\x46\x24\x99\x4e\x21\xed\xef\x34\x19\xad\x2c\xd5\x1e\x31\x8b\xf2\x9b\xe3\xe4\x3c\x41\x72\x62\x8f\xc3\xbf\xc5\x7d\x80\xc9\x43\x8b\x23\x2c\x4c\x03\x1c\x8c\x97\x4e\x4e\xc8\x06\x7c\x1f\x7c\x52\x80\x78\xd1\x4d\x86\x12\x71\x83\x52\xb9\xef\x54\xcc\x39\x0f\x75\x8b\x39\xa9\x7c\x7c\x4a\x79\x21\x78\x90\xe8\x3d\x55\xb3\x52\xe6\x16\x19\xf3\xe3\x9d\x4b\xa7\x7a\x79\xcb\xab\x1b\x9e\xdf\xde\xe6\x82\xad\x3c\xc5\x57\x7d\x76\x7d\x7f\xf6\xe3\xbb\x1f\xce\x56\x79\x59\x56\xe2\xec\x9a\x9e\x81\x3a\xe5\x13\x13\x5b\xe6\xc5\x40\x8f\xcf\xde\x16\x34\xaf\xe1\x2d\x68\x4a\x54\x4c\x74\xa9\x4c\xca\xb5\xa0\x39\xc4\x43\x33\x92\x83\xae\x92\x41\x4c\x01\x61\xad\x3f\x45\xfe\x1d\x73\x08\xee\x1c\x33\x32\x81\x03\xcd\x0f\x63\xe9\x71\xa4\x04\x9b\x18\x1f\x59\x8e\x46\xad\xfd\x5c\x20\xd1\xff\x36\x4d\xd9\x68\x64\x79\x79\x42\x08\x6b\xb5\xb1\xea\xd9\xdf\xc6\xcf\x6e\x1c\x33\x5b\xf7\x6d\x44\x1e\xc3\x59\xca\xe3\xa1\x50\x93\x79\x04\x35\x99\x6b\x5a\x3f\xc1\x6c\x74\x81\x1c\x2b\xe9\x74\x2a\xe6\x28\x54\x08\x01\x2c\xd6\xa0\x24\x55\x44\x65\xd3\x84\x13\x44\x03\xa1\x2b\x66\x70\xc8\x32\x4e\x1e\x5a\x34\x2f\x17\xe4\x21\x57\x38\x76\x2d\x2e\x09\x47\x46\x5f\x5b\x46\x64\x49\x4d\x49\xd5\x3c\x94\xf3\x6a\x31\xe8\x55\x9d\xa7\x69\x96\x43\x95\x79\x2b\xf9\x6d\x49\x0e\xf7\x7b\xd3\x84\x86\xca\xd3\x38\x85\xad\x72\xd5\x74\x3e\x51\x39\xc2\xb2\x3c\xe1\x9e\xb8\x55\x78\xd9\x8c\x23\xde\xbe\x59\x02\x2e\x8a\x10\x60\x23\xff\x98\x4f\x16\xe8\x70\xbe\x53\x85\x41\xf3\x4c\xe7\x61\x3f\xce\x24\x98\xc2\x1e\x6b\xa2\xcd\x45\x8f\x95\xbe\x65\x9f\x59\x59\x3f\xb3\x01\x8f\x3b\x5e\x7d\xbe\x3f\xf5\xab\x55\x55\x8a\x9c\x95\x94\x9f\xf8\xd9\xaa\xda\x9d\x52\xe8\x56\xb2\x75\x8f\x96\x63\xf5\x39\x95\xe7\xee\xd4\xce\x2a\xb7\xcf\x93\x47\x26\x3b\x21\x09\xd3\xa9\xf3\xed\xa0\x61\x4f\xfc\x00\xfa\x73\xe2\xc4\x05\x6b\xfa\xb4\x6f\x56\x15\xa7\xcb\xa7\x6d\x06\xa5\x32\xd6\xd6\xf8\xa3\x08\x49\xe1\x94\xed\xee\x4f\x9a\x30\x5d\x9e\x96\xcd\x2d\x3d\x6d\x8a\xf5\x17\xe7\x4f\xda\x9c\x15\xe4\xa5\x7a\x4a\xfd\xb7\xea\x2a\x5a\x3e\xbd\x67\x4a\x15\xb7\xd4\x13\xa7\xf1\x34\x4e\x9e\x08\x25\x7c\x9f\x5a\x5c\x2b\xf9\x4e\xdc\x05\xf4\xb3\x78\xc6\xeb\xbb\x03\x60\x53\x5e\x41\x49\xa6\xce\xab\xcd\x49\x15\x5a\xa7\xfd\xd3\x61\x9d\xf0\x1d\xbe\xc7\x37\xf8\x1a\x2f\xf1\x27\xfc\x12\x7f\xc6\xef\x3b\x42\x47\x5c\xbd\x4b\x71\xf2\x46\xef\xdd\x07\xb7\x2c\xd3\xe1\x04\x47\x55\xbc\x67\xc2\xb0\x07\x92\xae\x1e\xac\xd2\x02\x93\x3d\xb1\xee\xce\x77\x47\xdb\xd0\x06\xc8\xfb\xb7\x72\x99\x5e\xc9\xa5\x3b\xb1\x19\x7e\xd2\x10\x5e\x18\xd2\xfb\xe4\xfa\xcb\x93\xea\x57\xa4\xfa\xa4\x0a\xd9\x89\x15\x6a\xb2\x7e\x52\x9d\xd5\x49\x75\xb2\xfa\xa5\xba\x01\x4e\xaa\x33\x3f\xa9\xce\x2b\x75\x4d\x9c\x54\x63\x7d\x52\x8d\xaf\x73\x29\x60\x3e\xad\x5e\xef\x9b\xe3\xbd\x3d\xb9\xc6\xab\xa3\xf5\xbc\x52\xa4\xef\x69\x9d\xf4\x3f\x3a\x5a\x3b\xa7\xb7\xd5\x1d\xbd\x3a\xf5\xa0\xd5\x63\xf3\xc1\xd1\x5a\x9b\x92\xfd\xfc\xcd\xe9\xbd\x55\xc5\x1f\xd9\x4f\x4f\x9b\x00\x5d\xfe\x91\x83\xea\x38\x89\x93\xaa\x6d\x4e\xdc\x54\x96\xdd\x38\xa9\xd6\xe2\xf4\xcd\xff\x56\x5d\x2c\x27\x55\xbb\x3a\xa9\x5a\xf5\xe2\x29\xf5\x6e\x4e\x24\x82\x9c\x3e\x89\x84\x6f\x4f\xaa\xb6\x07\x5d\x79\x72\xed\xbd\x2f\x8f\xcf\x36\x7c\xff\x7b\xc3\x66\x9d\xd4\xc6\xfa\xc4\x89\x31\xbc\xd8\x49\x95\xee\x4e\xaa\xf4\xa5\xc7\x16\x9d\x54\xed\xed\x49\xd5\x2e\x9f\x7c\x83\xdd\x9d\x56\x2f\x78\x0d\x94\xe2\xbb\xea\xd4\xb9\xbd\x1b\xbb\x4f\x1e\xd9\xcf\x8e\xb5\x3c\xa9\xe6\xfb\x93\x7a\xac\xe9\xe9\x93\xe7\xf9\xe6\xa4\xda\x95\x66\x54\xed\xb9\xf7\x86\x43\x3d\xa9\xfe\xeb\xd3\xb6\x87\x61\x63\x4f\xaa\x73\x79\x52\x9d\x6f\x15\xaf\xfb\xe4\x1d\xf2\xc9\xab\xfd\x30\x67\xf9\xee\xfd\x4f\x6f\x4f\xac\xf0\xe5\x49\xdd\xad\x4a\x50\xc2\xeb\x18\xa4\x93\xab\x0e\x3f\x3b\xda\x82\x0a\x15\x3d\xb1\xe6\xcf\x3a\xb2\xb4\x05\x8b\xda\x51\x2d\x43\x20\x78\x9f\xae\x6b\x38\x55\x68\xe8\x4b\xd5\x27\x5b\xc6\x3c\x0b\x58\x85\x73\x15\xb5\x4b\x08\xc9\x8d\x0d\x7f\x32\xf0\x2c\x47\x26\x92\xb6\xf2\xbc\x66\xdc\x53\x05\xef\x98\x18\xd7\xf0\x84\x10\x52\xa7\xa9\xe5\xb7\x4d\x54\x72\x85\x20\x03\xa2\x87\x58\xa6\x67\xc6\x41\xe1\x47\x5e\x42\xef\x7a\xf5\x37\x91\xfa\x73\x94\xa6\xf9\x91\xfa\xcf\x2f\xfe\x47\xf4\xb5\x02\x63\x57\x0e\x6c\x2c\x2b\xe7\xf5\x02\x97\x0a\xea\x47\x29\xe0\x0a\xd3\xbf\x62\x50\x7f\x62\x62\xb5\xcd\x6a\xf4\xb0\xca\x6b\x6a\x63\x65\xa7\xf0\x4b\x07\xc8\x4e\x0d\xfb\xae\x7a\x0e\xaf\xb4\xd2\xca\x7b\xa5\xe0\x33\xe9\x0b\xd3\x05\x84\x27\xba\xac\xd2\xa7\x4c\x8d\xf2\x6e\x45\x0c\x1e\x3f\xde\x58\x44\x20\xbc\x25\xaf\x72\xb1\x1d\xdf\xb2\x32\x5b\xe1\x0d\xc2\x6b\x32\xb9\x5c\x3f\xdf\x5e\xae\x8d\x5e\x71\x47\x68\x56\xcd\xd7\x0b\x9c\xcf\xd7\x6e\x28\x3b\x33\x94\x5d\x6b\xbb\x22\xbf\x57\x2d\xdb\x09\x9e\x76\x45\x26\xb7\x84\xb3\x2a\x58\x98\xe9\x44\x7d\xba\xce\x05\x0d\x86\x77\x43\xc5\x07\x76\x4b\x33\x04\xc9\x48\xf5\xdf\x68\xa0\xeb\x33\x25\x27\x6d\xab\x6d\xb3\x90\xfd\x43\x9e\xca\xf5\x74\x02\x99\x77\xa6\x17\x58\x4f\xef\xf4\x2b\xac\xa6\x76\xfa\x3b\xac\x26\x72\xfa\xaf\x18\x66\x69\xfa\x6f\x58\x69\x60\xa6\xff\x8e\x2d\x70\xd0\xff\xb4\x27\x60\xfa\xbf\x30\x80\x86\x4e\xff\x37\x96\xfd\x9b\x5e\x4c\xda\x9e\x03\x82\xd6\xd7\x9e\x5b\x94\x5e\xfe\xf5\x04\x9d\x67\xfc\xf9\xe4\x71\x15\xa2\x53\xbd\x45\x4e\x76\x07\xda\xfa\xd7\x54\x2a\x5a\x8d\x50\x5f\x4d\xf0\xe8\x71\xb7\x16\xb2\x58\x56\x50\x15\x06\xee\x12\xb3\x29\x93\x74\x37\x8f\x56\x9a\x96\xdd\x7d\x41\xad\x0f\x29\x1d\xcb\xde\x65\xce\xe4\xe1\xd1\x19\xd9\x43\xa6\x11\x02\x7a\xcd\x0b\xdb\xbc\x83\x38\x55\x5a\x66\xac\x12\x95\x03\x0a\x16\xb3\xca\x70\x81\xd0\xd7\x64\x62\x49\xc7\xbc\x5e\x0c\xb8\xef\x9b\xcf\x36\x59\xd8\x71\xa1\x6c\x01\x39\x31\x8e\x1c\x08\x73\x70\x78\xaa\xd4\x37\x39\x82\x8c\x0e\x5a\x41\x7f\x7e\x5e\x7f\x4d\x26\x97\x28\x9f\xd7\x0b\x42\x33\xf9\x8f\xee\x7d\x6b\xdc\x57\x7b\xb3\x20\x10\x92\xb5\xc3\x04\xa8\xb2\x98\x4b\x92\xa7\xab\xb7\x7e\xaf\xe2\xcc\x6c\xd6\x6a\x73\xf6\x6d\x2e\x28\xca\xc1\xb1\x4d\xfe\x99\x09\xef\xb8\xf4\x3f\x57\x26\x35\xd0\xec\x43\x4a\xe9\x1c\x2c\x4f\x5e\x29\x2c\x90\xbe\xe4\x9c\x47\x42\xa8\xc4\xd7\x58\x8c\xb8\x41\x69\x9a\x2c\x97\xc9\x90\x10\x63\x60\x63\xe5\x4d\x36\xc1\x5f\xa1\x34\x85\xf8\x42\xc2\x67\x34\x13\xf3\xc6\x8c\x7c\x2a\x20\x08\xd2\x46\xcc\xc0\xa6\x13\xb3\xf9\x42\xe9\xf5\xed\x5f\xa7\x9d\x9c\x40\xe1\x85\xe7\x91\xd2\x5e\xbe\xf3\x53\x4c\xf8\x27\x80\xc9\x3f\x7a\x60\xca\xf1\x77\x3f\xbe\x06\x7c\xb8\xe5\xdb\x77\x6f\x3e\xbc\xf9\xf0\xd7\xb7\x2f\x97\x2f\xff\xf2\xe1\xe5\xeb\xf7\xdf\xbf\x79\xfd\x3e\x4d\xe9\xf8\xe5\xeb\x9f\xc6\xf0\xe4\x5b\x57\xe4\xfd\xf8\x3b\x5d\xaf\xf5\xc4\x08\x78\x0c\x46\xeb\xcc\x94\x70\x0b\x83\x1f\x4c\xd2\x9f\xe9\xc3\xaa\x2a\x37\xec\xa6\xb1\x9c\x87\xcf\x87\x5c\xe0\x4f\x9c\xd9\x88\x26\x95\xcf\x21\xa6\x46\x33\xee\x41\xda\x65\x49\x5b\x67\xa3\xa0\xe5\x6a\x13\x78\x90\x52\xda\x3d\x7b\x2e\xb6\xac\x5e\x20\xd4\xb6\x58\xe9\x79\x69\xfd\xeb\xf4\x4d\xd7\xc6\x7f\xa5\xbe\x95\xbf\x52\xaf\xca\x5f\xa5\x3f\xa7\xf1\x81\x4e\x65\xec\x5f\x17\xa1\x12\xf9\x58\x0a\x03\x60\x66\xcf\xc1\x7a\x00\xd1\x90\xe1\xbe\x8f\xa9\x8c\x0f\x61\xfe\x57\xb1\x4c\xa0\x26\x44\x43\x1b\xf8\xc0\x9c\xea\xc5\x3e\xa1\x0e\x3d\xf7\xbd\x3f\xbc\x62\x7d\x6b\xa0\x80\x9c\xb2\x0e\x53\x5b\x38\x08\x89\x38\x3b\x2e\x70\xb2\x5c\x72\x9a\xd7\x55\xb9\xfc\xc4\xc4\x76\x09\xd5\x2f\xc1\x56\x5d\x2e\x97\x09\xd6\x29\x4d\x68\xb8\xe4\x2d\xe0\xc0\xeb\x24\xcb\x3f\x96\xd6\x6f\x63\xfd\xe3\xbb\x1f\x5e\x9a\x98\x06\x15\xc9\xe8\x8d\xd1\x73\xc2\xd5\xf8\xc7\xfd\x62\xe6\x6a\x33\xb5\xf7\xc2\x7c\xbe\x65\xf5\x2e\x17\xab\xad\xc9\x8d\x85\x94\x7f\xec\xd0\xa2\x80\x0e\xe4\xb0\xdb\x96\x76\x44\x12\x52\xf5\x32\x0d\x60\x79\x8c\xd5\xc6\xa6\x59\x92\xd7\xf7\xe5\x2a\xe9\xc4\xb5\xf1\xf1\x75\xbe\xfa\x78\xdd\xf0\x92\x72\x1b\x3d\x9c\x25\x3a\xca\x23\x51\x79\x0b\x21\x54\x16\x75\x6a\xdb\x40\x96\x8f\xc0\x6f\x34\x5a\x17\x1f\x2f\xe5\xb6\x84\x59\x03\x58\x27\x5d\xa7\xaa\xb1\x2a\x4d\x90\x88\xe1\x9b\x73\x22\x3c\x56\x23\x3f\xe5\x30\x38\x2b\xa3\x3b\x0c\x8b\xa0\x6b\xa7\x32\x32\x34\x4d\xe3\x68\x47\x4a\x89\xed\x18\x13\xfd\x40\x33\x07\xb4\x7b\x09\xa7\x69\xff\x5e\xb6\xdf\xda\x3b\x59\xf2\x27\xee\x97\xdd\x1a\xf2\xf1\x49\xb7\x5e\xc7\xe4\x16\x30\x8e\x37\x05\xbb\xbd\x95\x44\x80\x6e\x28\xa7\xe5\x01\x93\xa7\xbc\xf5\x9e\xe8\xd1\xd6\xc9\x61\x72\x98\x60\xf4\x5c\xd6\x60\x75\x7b\x8e\x0e\x77\x9d\x7c\x63\x60\x86\x00\x0d\x4f\x82\x70\x45\x1c\x5a\x93\x50\x0e\xd7\xb2\x67\x08\xf2\xd8\xa0\x31\xa7\xf9\x5a\x9e\xd8\x0f\xf9\x8d\x9b\x3f\x87\xc5\xa5\x52\x46\xc3\x6e\xa4\xab\xaa\x5c\xeb\x1f\x0a\x27\x3b\x83\x26\x45\x7e\xf3\x5d\xc5\x51\xc6\x10\xc2\xac\xa5\x9e\x72\x89\xd4\xf1\xcc\x1d\x0d\x29\xc7\xa0\xe6\x30\x7e\xe3\x59\x96\x93\x07\xfd\x9d\x62\x5e\x58\xc9\x02\x51\xff\x71\x98\x39\xf0\x5b\xa8\xa9\x52\xbf\x1a\xdc\x54\x6f\xb8\xf0\x60\x6c\xee\x21\x39\xdc\x98\xd3\x2e\xdc\xda\xd7\xac\xa4\x28\x9b\x8b\xf1\xb7\x8c\x8b\x7b\x5d\xdc\xc3\x53\x1d\x03\xd2\x4d\xe7\xb9\x18\xbf\x78\xf3\xfa\xfd\x87\xab\xd7\x1f\x96\x1f\xae\xfe\x03\x2d\x00\xf6\xc9\xc3\xdf\xeb\x8d\x46\x05\x3d\xe8\x75\xc2\x27\xa2\xe9\xb5\x98\xd5\x1f\x78\x23\xb6\xf7\xdd\x04\xa8\xae\xaa\xfe\xcd\x6a\x20\x67\xba\x29\xe9\xec\x2e\x91\x94\x44\xf6\xf5\xcf\x92\x6c\x1a\xca\xdf\x77\x1b\x27\xe6\x8b\x71\x32\xa2\x97\x50\x5b\xbe\x5e\xbf\xd1\xbc\x84\xc1\xce\x53\xd4\xc9\x2a\x26\x4d\x75\x0e\x1c\x1f\xb5\x78\xcd\xd6\x3f\x96\x9f\x9e\xdc\x9a\x32\x98\x7c\x49\x83\x07\x5f\xc6\x83\x70\xb5\x4c\xf2\xbf\xd0\x40\xf9\x23\x6d\x59\x0d\x10\x53\xe5\x81\xb0\x19\xe8\x08\x97\x9c\xf6\xbc\x1c\xff\xf8\xfa\x8f\xaf\xdf\xfc\x19\x58\xd6\xb7\x2f\xdf\x7d\xf8\xab\xdc\x10\x8b\x08\x96\x80\x59\x8e\x17\xdb\x9c\x95\x1f\xf2\x9b\xfa\xbb\x8a\x03\x9c\x46\xb0\x3a\x63\x8d\x6c\x3e\xee\x24\x21\x8d\x38\x7e\xd6\x0e\x86\xcf\x48\x6d\x7e\x6a\x2f\x55\x4d\x4d\xc5\x8f\x07\x6b\x0a\xc8\x49\x70\x74\x64\xa5\x6c\xcc\xea\xef\x15\x8c\x37\xfb\x45\x4a\x27\x68\xbf\x97\xcf\xde\x1a\x0e\x0d\xb0\x50\xa0\xb8\xdf\xfc\xf1\x84\xbe\x58\x68\x08\x53\xd5\x7b\xe7\x0b\xed\x52\xb3\x55\x1a\x56\x23\x47\xbe\x07\x73\xf3\x04\x02\xdf\xf5\xf5\x78\x92\x33\x72\x9c\x40\x9f\xe6\xe4\x2e\x42\x4a\x17\xcb\x11\x6d\x38\x85\x45\x27\xe3\xe6\x51\xbf\xd1\x2f\x45\x8b\x35\x98\x23\x36\x1e\xd5\xff\x35\xa7\x8b\x34\x1d\x66\x43\xb8\x2b\xc2\xe7\x3e\x39\x2a\x51\xe0\x77\x56\x79\xfe\x9d\x6a\xe7\x2a\x3f\x91\x04\x0d\xe0\xfe\xf0\xb2\x72\x56\x41\xf2\xb6\xd3\xdc\xd1\x0f\xba\x38\x7d\xa9\x43\x79\xf4\xfa\xfd\xf5\xbd\x79\x8e\x39\x78\x3d\x26\x4a\xff\x77\xf9\xf9\x18\x45\xf7\x71\x87\x97\x08\x53\xb2\xc2\x9b\x01\xd5\xb6\x67\xb2\x03\xaf\x5a\x65\xda\x26\x9f\x30\x35\x3a\x1f\xf2\xd9\xe3\x07\x68\x60\x57\x27\xd4\xf7\x05\x20\x74\x7c\xe5\x1f\xa3\xad\x41\x2a\xd9\x70\x4a\x7f\xa1\xd9\x7c\x81\x70\x14\x9c\x85\x7a\x1a\xc5\x5d\x66\xf3\xc5\x7f\xa1\xd3\xf5\x1a\x97\xe4\x55\x06\x81\xc0\x3a\xed\x56\x45\x22\xbc\x2d\x9f\xf1\x48\xf0\x97\x3b\x13\x54\x5e\x0c\x96\x35\x3d\x92\xbe\xb1\x02\x81\x06\xd0\x64\x04\xe0\xdd\x01\x32\x0d\xc0\x6d\xe8\xd0\x2e\x79\x4f\x7b\x2e\xa6\xb7\x0a\x29\x44\x57\xfd\x15\x21\xbd\x91\xce\x6c\x2b\x2e\xab\x0e\x27\x24\xf0\xc8\xa6\xa8\x75\xfd\xe7\x31\xa6\x41\x17\xe5\x98\x06\xa1\xa0\x77\x06\x2c\xd3\x25\xbd\xb5\x28\x70\x15\x29\x2f\xab\xe7\x4c\x85\x7f\xb1\x4d\xc6\x55\x3d\x4a\xcd\x78\x05\xb3\x52\x21\x5c\x61\xa7\xaa\x34\x3e\xb4\xe7\x17\x61\x72\x39\x2f\xe8\x12\x1a\x54\x39\x81\x4a\xd0\xd0\x9b\x2f\x00\x6e\x41\xad\xe8\xb4\xd7\x0e\x0b\x52\xcd\x05\x90\xd3\xe7\x17\x43\x02\xb5\x0a\x55\x2b\x97\xb5\xba\xd2\xd7\x1d\xe0\x16\x53\xc8\x6f\xf7\x2e\x84\xe6\xf0\x2a\x1f\xba\x84\x47\x7e\xa5\x4b\x9f\xd1\xe8\xbb\xf4\x47\x77\xe6\x57\x8b\xd0\xd3\x7f\x12\x8b\x06\xf8\x9d\x57\xe6\x77\x5e\x34\x80\x59\x13\x9b\x08\xfa\xf9\x24\x4d\x33\x3e\x22\x0c\x61\xd9\xfb\x32\x4d\xc5\x90\x88\x59\xec\x3c\x0d\x09\x6d\x63\x91\x8d\x4a\xc2\x0a\xb2\xf8\x7d\xf2\x53\xd4\x7f\xe1\xb8\x2e\x06\xde\xe1\xd1\xb1\x00\x48\xed\x01\xbc\x45\x98\xba\xd6\x5e\x9a\x9d\x71\xe8\x83\x09\x9e\x97\x8b\xe0\xb4\x7c\xf6\x74\x24\x2a\xb8\x4b\xc7\x1e\x7f\x2f\x69\xe1\x9d\x95\x4d\x55\x10\x57\x57\x5b\xbd\xdf\x5f\x79\x8a\x65\x13\x56\x35\xb0\x9a\x87\xc2\xda\xdf\x94\x40\xeb\xf0\x57\x79\x58\xba\xb4\x61\xf9\x7a\xb0\x0e\xca\xd5\xf9\x82\x97\x84\x94\x3e\x18\x0e\xe1\x3e\xb4\x89\x85\x68\x3e\xa0\x63\x74\x97\xac\x23\x3b\xee\x16\x20\xc3\x0b\x7f\x26\xdf\x74\x03\x56\x6f\xf3\x5d\xd6\xa7\x07\x21\x19\x68\x11\x40\x4c\x5c\x75\xf9\x1b\xeb\x24\x87\xb3\x6c\x05\xde\xec\x7c\xfc\xf2\xd5\x37\x2f\xdf\x2d\xaf\xde\xbd\xbb\xfa\x2b\xe4\x97\x5b\xe9\xd3\x59\x5f\x89\x1e\x0f\xab\xe1\x8c\x6d\xaf\x83\xbe\x84\xb4\xd5\x1d\x71\x6e\xb2\x6d\xcd\x93\xf9\x22\x59\x90\xf7\x59\x3c\x32\x5e\x65\x97\xc4\xb5\xff\xce\x87\xdd\xd5\x51\xb8\x2a\x02\x65\xa2\x84\x31\x93\xdd\x41\x47\xd5\x42\xba\x24\x80\x2f\x51\x37\x12\x79\x7f\x40\x8c\x74\xbd\x03\x96\x68\x82\x5a\x25\x6b\xbf\x29\x8b\xfb\x0c\xd2\x6d\xe4\x4f\xad\xc3\xeb\xcf\xf9\x45\xaf\x3e\x10\x58\xfa\x28\xde\xbd\x83\x38\x89\x1e\xc4\x89\x7f\x10\x27\x92\xc0\xc4\x6e\xcd\xf0\x7a\xd4\x9b\xcd\xdc\x91\x5e\xf7\xc0\x20\x42\x81\xcc\x50\xc2\x46\x14\x61\xab\x82\xe0\xfb\x3d\xff\x9a\xcd\x38\x61\x53\x4d\x87\x08\x1b\x71\x74\x49\x9f\xf3\x4b\x54\xce\x4b\x5d\xc3\x82\xc4\x66\x80\x8e\x46\x2e\x98\xbb\xc5\x2b\x63\x7d\x8a\xa3\x28\x2f\x1d\xba\xf3\xf0\x02\xd2\x95\xc9\x39\xff\xbe\xff\x49\x80\xcc\x65\x2c\x4e\x59\xd8\x65\x52\x22\xe8\x6c\x79\x7e\x81\xb0\xa5\xa0\xa5\x8b\xf9\x67\x84\x5f\xb2\xaf\xc9\xe4\x92\x29\x10\x98\x58\xff\x19\xf2\xcd\x79\xcc\x5e\x23\xb2\x6f\xf9\x7a\x0d\xa4\xc6\x08\xb7\x9d\x0e\x7a\xdb\xa2\x5b\xd2\x0a\x54\x2a\xb5\x9e\xe6\xbc\x4e\xab\x2b\x52\xb8\x53\xdd\x36\xaf\x83\xd7\xf5\xc1\xed\xba\xcd\xeb\x1f\x58\x2d\x68\x49\x79\x6d\x24\x81\xff\xa3\x0c\xc3\x2b\x2d\x87\x83\x0c\x7d\xb4\xa4\x82\xe1\x49\x54\x5e\x32\x78\xf4\x42\x89\xc1\xd1\x84\x7f\xbd\x2b\x20\xfe\x85\x1b\x92\x4e\x21\xe8\x17\x8b\xe5\x02\x3c\x5a\xaf\xfd\xa0\x57\xad\x66\xed\x0e\x04\xa5\x7d\x21\x17\x0a\x62\x32\xf7\xf7\x26\x2e\xc9\xe4\xb2\x7c\xce\x2f\x4b\xe3\x5e\xa0\x4f\x9f\xd9\x6e\x59\x29\x45\x2b\x6d\x58\x64\xb8\x54\xc0\xd0\x6d\x40\x05\x21\xed\x25\xf4\xf6\x8d\xa4\x1e\xfa\xef\xd8\x46\x51\x74\xb1\xc7\xb6\x86\x13\x54\x6b\x5e\x52\xee\x1a\x98\x8b\xdb\x7c\x17\xd1\x50\xfc\x63\x73\xf0\x2a\x0b\xe3\xa4\xfb\x7d\x52\x3a\x53\xc3\xe8\xcc\xd9\x82\xd8\x79\x50\xef\x5a\xc8\xf0\x03\xdd\xfb\xe6\x1e\x86\xbe\x61\x85\x88\xa6\xfd\xfc\x7f\xd3\xd7\x4e\xff\xd2\x94\x1b\xdc\x39\xd3\x55\x4e\xe1\x96\xf8\x55\x3b\x18\x76\x0d\x66\xa0\x7f\xaa\x87\x2e\x69\x8c\x27\xb6\xab\x9d\x0e\x9f\x7c\x73\x7f\x28\x6b\x8e\xae\xf2\xf6\x10\x5f\x82\xdc\xc0\x0e\x57\xa2\xde\x3f\x52\xc9\x86\x95\x51\x51\xf0\xde\x1c\xce\x7f\x60\x96\x6c\x03\xd1\x3e\xea\x16\x8e\x77\x8f\xde\x51\x7e\x1f\xeb\xdf\xf5\xaf\xd5\x3f\x56\xbf\x0c\xdb\xe8\x36\x71\xbc\x83\x79\x19\xed\xde\xcd\xaf\xd7\xbd\xab\x32\xd6\xb9\x9b\x53\x3a\xc7\xe9\xba\x09\x20\x50\x3d\x15\xed\xf1\xd3\x05\xb8\x35\x9c\xd0\x8c\x63\x61\x09\xa0\x4b\xf1\x25\x59\x87\xbb\xea\xe3\x81\xec\x4c\xc7\xb5\x6d\xe2\xeb\x8b\x99\xf0\xb5\x6d\xe2\x91\xdc\x4c\x8f\x92\x02\xe1\x05\x84\xc0\xe1\x07\xe5\xab\xe0\xf7\xdf\x43\x27\x41\x77\x8b\x4b\x90\xfe\x2b\x48\x2a\x5b\x29\x35\xc9\x81\x73\x13\x67\x9a\xcf\xa8\x3a\xba\xa0\x97\x5a\xc5\x32\xb4\x46\x89\x01\x0d\xb2\x52\x0c\x89\xae\x85\x95\xab\xa2\x59\xf7\x62\xfd\x3d\xb1\xda\x67\xbf\x26\xf0\x4d\x5d\xf1\xce\x69\xef\xf0\xa8\xc1\x2c\xe9\x41\x66\x08\xbe\xf3\x24\x92\x50\xe3\x30\xb9\x64\x2e\xca\xdb\xc6\xf1\xe6\x84\xce\xd9\x02\xd7\xc4\x17\x5b\x72\x84\x9b\x40\xf3\x91\x23\x5c\xc8\x07\x36\x0c\x07\x65\x35\x04\xa8\x6f\x32\xe7\x65\xd8\x5a\xe7\x38\x18\x44\x53\xb2\x9f\x23\x73\xb7\x33\x49\xc5\x56\x46\x0b\x16\x99\xc1\x9d\x9e\x12\x9d\x5e\x59\x6c\xab\xa6\x6f\xf2\x87\xc1\x9b\xe9\xf5\x5c\xb9\x40\x30\xd2\xe2\x2b\x21\x74\x16\xd9\x3d\x02\xa0\x37\x0f\xc8\xeb\xb4\x8d\x11\x7d\x21\xfb\x82\x10\xfe\xd8\x95\xe4\xae\xb0\x8d\xd0\xc0\x0f\x80\x98\x35\xed\x2d\x9c\xcf\xf2\x9b\x59\x92\x1c\xee\x4c\xbe\x98\x66\x1d\x79\x8a\x4a\x11\x5e\xcf\x12\x2b\x6b\xca\xc5\xd5\x01\x41\xec\xa5\x03\xc2\xd7\x60\x46\x46\x9d\x18\x2f\xff\xc9\x95\x6f\xb1\x3c\x40\x4a\xb0\x8a\x4d\xc4\xcb\x9e\x2c\x05\xcb\xe1\x3e\xaa\x0f\x02\x39\x99\x91\xf8\xdf\x4e\xb0\xc5\x5b\xda\x55\xbb\x6e\xb3\xb1\x79\x62\x9b\x6c\xe2\x4b\x01\x70\x1b\x5b\x2d\x42\x5f\xe4\x39\xbf\x08\x89\x87\x99\x89\x8c\x9e\x5f\xe0\x0b\x95\xaf\x70\xcb\x36\xa2\xdf\xb6\x6e\xc9\x6b\xbc\xd7\x26\x8d\xb6\x39\x39\xd0\xe2\x04\x61\xda\xe2\xa6\x8c\xb6\xd7\x9b\xe2\x09\x4c\x6c\x50\xfa\xf1\xb9\x9d\xf8\x33\xca\xe5\xe5\x59\xff\x7f\xdc\xfd\x7f\x77\xdb\x38\x92\x2f\x8c\xff\xaf\x57\x21\xf3\xce\x6a\x88\x11\xcc\xd8\xdd\x7b\xbf\xf7\xae\xd2\x6c\x5f\xc7\x71\xba\xbd\x1d\xc7\x59\xdb\xe9\xde\xfe\xaa\xb5\x5a\x5a\x82\x6c\x4c\x28\x52\x03\x42\x76\x3c\x16\xdf\xfb\x73\x50\xf8\x41\x80\x04\x25\xda\xc9\xce\xdd\xe7\x39\x27\x27\xa6\x48\xa0\xf0\x1b\xa8\x2a\x54\x7d\x8a\x34\xf2\x76\xe9\x56\x6b\xb5\xd4\x76\x13\x45\x35\xac\x37\xb2\x9a\xa6\x66\xd6\x15\xc4\x5b\x71\x5d\x56\xad\x57\x81\x0e\xac\x94\xd0\x89\x4a\xeb\x2e\x90\xba\x92\xc1\x6e\xae\xbc\xdc\x6c\xf4\x6b\x75\x0b\x64\xd1\xdb\x6c\x00\xeb\x1a\xac\x22\x9f\x7c\xa3\xc8\x90\x8c\xa3\xeb\x8e\x21\xab\x89\x01\x76\xa1\x6e\x2b\x81\xe6\x0d\xb9\xa5\x99\x7b\xd9\x59\xa0\xb0\x92\x7a\x9b\xf8\xdb\x6c\x7f\x1f\x59\x45\x4a\xca\x00\xf9\x80\x6c\xe5\x1e\xc9\xe6\x4d\xb2\xaa\x23\xe0\x4e\xb9\x6d\x76\xd5\xb7\x47\x15\x16\xa5\x5a\xc0\x15\x02\x9a\xa1\x53\x34\x2e\x97\x1d\x3d\xd3\xb6\x96\x62\xbf\xc2\xde\x58\x64\x9b\x32\x42\x30\xc7\xd9\xd5\x36\xb8\xf3\x72\x2e\x3e\x3e\xc3\x54\xb9\xae\x6f\xbf\x9f\x71\x51\x6d\xbf\x7a\x64\xdb\xfa\x63\x4c\x26\x62\x24\x61\x4e\x8d\x7c\x8a\x8d\x17\xaa\x63\xef\x3c\xea\xd8\xb3\xcc\xba\xa8\x71\x24\x60\xab\x85\xf6\x5d\xce\x35\x34\xf0\x1c\x9f\xc4\xe3\x40\x96\x1e\x4c\x7a\xd7\x12\x1a\x0b\x79\x3b\xb7\x66\xf6\x07\xb7\x92\x27\xfa\x0a\xa4\x14\x43\xe2\xd0\x8f\xc3\x45\x7c\x8d\xf4\x79\xaa\xf8\xc9\x05\x3e\x11\x09\x8f\xe3\x73\x9c\xb4\xd8\x88\x42\xf6\xa3\xf0\x5a\xe5\xa8\x95\xaa\x72\x7b\x6f\x99\x36\x9b\xf1\xa4\x44\xa3\x6d\x09\x42\x12\x8f\x27\x08\x1f\x57\x26\xd9\x47\x64\xa4\x8b\x22\x48\xda\xd9\x5f\xc6\xc7\xd6\x15\xe8\xe5\x33\xae\x40\x6d\xe0\x86\x2e\xf7\xa0\x93\x9a\xd1\xda\xee\xab\x6b\xd6\xb8\xba\x56\x17\x9a\x12\x98\xc4\xbe\xbb\x65\xcf\xaa\x78\x0d\x4b\xc3\x53\xfb\x6d\x56\x97\xbe\xe6\x74\xbd\x8b\x7f\x9a\x4e\xab\xe2\xa7\x52\x50\x07\x74\xb1\xb3\x4c\xac\x2f\x9a\x67\x2d\x3a\xe3\xc8\xc9\x18\xb9\x79\x42\x00\x74\xcf\x3f\xaf\x57\x5b\xb4\xca\x2e\x01\x05\x69\x2b\xf9\x95\x79\xd3\x3e\xc8\x3a\xde\x9c\x8c\x3d\x02\xa1\x32\x38\xa0\xd2\x38\xa8\x83\xc4\x8a\xd5\x29\xf5\x31\xca\x78\x10\x85\x26\x46\x26\x26\x38\x58\xd0\x2c\x49\xe9\xdf\xc9\x5b\x13\x37\xd3\x31\x3a\x12\x6d\xa9\xe2\x4c\x7b\x4c\x72\x5e\x28\x0d\x3e\xb9\xbc\xa7\xdb\x1b\x56\x60\x6b\x15\x51\x84\xc6\xcc\x9d\x7b\x99\x3d\xdd\xe8\xb3\xa6\x9b\xf6\x10\xfd\xc7\xad\x92\xd5\xe3\xd7\x2d\x11\xfb\xbe\xfe\x1f\x54\xeb\x17\x57\x55\x3b\x43\xfe\xa3\x7a\xd7\x5e\xa2\x1e\x2d\xed\x7c\xae\xf5\xca\x9e\x93\x09\xe7\x19\x79\x41\x6e\x21\xbd\x2a\x02\x0a\xa7\xfe\xbf\xd6\x44\xe7\xb5\xd2\xa7\x66\x73\x70\x35\xad\xcc\xa5\x50\x89\xf3\xc5\x62\x5b\x0b\x24\xcb\xb5\xad\x0b\xee\x12\x1f\x0f\xde\xa6\x94\x27\x35\x23\x9d\xe7\x4c\x0d\x9f\xf5\x49\x77\x8f\xcb\x6e\xe6\x36\x5f\x73\x18\xd4\x76\x18\x83\xa8\xf2\x52\xa3\x24\xdb\x3e\xe7\xff\x9a\x75\x99\x73\xed\xe9\x31\x45\x31\xea\x87\x5b\xc2\x2d\x1b\x34\xeb\x20\xd9\x12\xe1\x9e\xb9\x11\xee\xe5\x25\x04\x81\x4b\x08\x36\xce\xec\x49\x9c\x55\xb1\xfc\x23\xa7\x24\x57\xd9\x27\x3d\x36\xb4\xff\x06\x83\xc0\xb7\xee\xdd\x2c\x6b\xde\x31\x58\x97\x53\x85\xbf\x11\xa4\x9e\xa9\x4a\x64\xf5\x80\x8f\xdf\xf7\x82\xa9\xb7\x8b\x06\x72\x49\x35\xb9\xfd\x16\x32\xdb\x44\x1e\x9f\x55\x69\x5b\x8b\xb6\x58\xa0\xba\xa2\x8f\xbc\xb0\xdb\xb1\xe5\x35\xaf\xfd\xaa\xdd\xc2\x35\xb7\xdd\xbd\xf3\x6c\xa3\x75\x97\x14\xfa\x73\x9d\xb5\xd8\xb1\x09\x0d\x03\x73\x7f\x08\x13\xf7\x37\xca\xef\x94\xc7\x46\xfb\x5c\x71\xd3\x39\xd3\x86\x66\x33\x06\x31\xa3\x5b\x4d\x8f\x5f\x6c\x31\xe6\xd8\xaf\xd8\xd3\x35\x84\xa8\xbb\xef\xd2\x3c\xe1\x61\x63\x39\xa2\xcd\xe6\x00\x0d\x19\xf0\x82\xff\x17\xaa\xd6\xa8\x8f\xa8\xce\xbe\xa8\x0e\xcf\x6f\x6f\x53\xe2\xad\x4b\x0b\xb1\xbd\x66\xe3\x4a\x3c\x4b\x66\x77\x64\xcb\xa0\xdf\xaa\x68\x8b\x73\x88\xf5\x07\xce\x04\xde\xe3\xe7\x39\xdb\x71\x0d\x3e\xec\x59\x3b\xb2\xf4\xa6\xf9\x36\x3b\xb2\x74\x9c\x52\x4e\x0d\xc5\x47\x92\x41\xe0\x27\xed\x69\xa0\x6d\xf7\x69\x71\x45\x38\x4f\x05\x27\xd5\xbc\x85\xab\x5b\xd7\x56\x89\x6b\x46\x20\xe6\x83\x87\xfe\x25\xdc\xa5\x01\xfc\x1a\x2d\xde\xad\xd3\x05\x4d\xfd\xc5\x35\x4b\x33\x59\xf5\xf5\xbd\xf3\xb5\xa2\xd5\xa8\x8d\xce\x38\xda\x3b\xc4\x56\x42\xf1\x53\x0d\x4f\xbd\xa2\x75\xbb\x9d\x0a\x10\x95\x39\x80\xa8\x06\x2d\xe3\xcf\x45\x5f\x91\xea\x2f\xd7\x05\xa0\xa0\x16\x84\x07\x5b\x4e\x92\xfe\xb6\xe3\xc5\x3e\x29\x08\x7e\xaa\x55\xda\x69\x51\x89\x30\x8b\xf8\x1d\xc9\x3c\xb6\x52\xe0\xdd\xa4\x44\x2c\x32\xdf\x6c\xac\x9f\x34\xbb\x55\xbd\xd8\x2c\x4e\x7b\xc0\x30\xb7\xb7\x0e\xe4\x45\xb0\x5d\x8c\x0a\x66\xf1\xa2\x52\xd4\x8c\x64\x4e\x73\x54\x19\xc1\x29\x38\xf6\xf7\xed\x2e\x0e\x50\x69\xb9\x37\x60\xd1\xe4\x11\x0d\x03\xf1\x37\x40\x18\x22\x70\x88\xdf\xf0\x10\x20\x0c\x12\x66\xfa\x28\x5e\xa9\x47\x31\x31\x1c\x47\xff\xe6\x50\x58\x1e\x7c\xce\xf4\x52\x63\x5b\x85\x23\x63\x95\x29\x3a\x73\x6c\xc9\x5f\xb6\x4b\xd4\xf1\x40\x9f\x05\x1c\xf0\x0d\xb9\xcf\xa7\xe9\xd4\x54\x45\x29\x26\x98\x0c\x20\x64\x07\xf8\xda\xaa\x5f\xa8\xf2\x47\x2a\xab\xd2\x2f\xc8\x0f\x84\x89\x11\xd1\xcf\x01\xc2\xeb\xcc\xfe\x50\xfd\x0a\x10\xae\xc5\x15\x13\xdf\xef\x92\x22\x40\x86\x14\x99\x5f\xac\xf4\x97\x5b\xc2\xe5\x0f\xeb\xbb\x7c\x51\x88\xcf\xb9\x7c\xf4\x64\x2e\x9c\xdc\x45\x33\xfb\xbb\x9c\x5d\x3f\xae\x88\x45\x45\xbd\xf1\x11\xb3\x12\x57\x34\xab\xf4\x14\xb4\x35\xe2\x2b\xd5\x7a\x9b\xce\xd3\xd2\x60\x51\xf0\xb8\xd1\xd7\xc8\x72\x8d\xf8\x06\xf3\xb1\x05\x60\x73\xfb\xe9\xf5\x22\xbf\xfc\x67\x60\x55\x58\x13\xb7\xa1\x98\x79\x92\x35\x96\x53\x56\x56\xdb\x7e\x3e\x91\x11\xad\x3c\xaf\x94\x82\xbf\x16\x47\x23\x70\xd2\x38\xa7\x93\xb9\xae\x72\xe2\x6a\xb8\xe9\xa5\xe1\x6d\x03\x92\x58\x6b\xc1\x6b\x99\x49\xcd\xdf\x31\x06\x9b\xdb\xd0\x49\xa7\x63\x72\x29\x95\x9d\xe0\x67\x70\x56\x56\x17\xea\x5a\x25\x70\xdc\x50\x1f\x7e\x95\xf9\xe5\x53\x89\x33\x05\xe3\x9f\x67\x60\xc2\x2d\xfb\x19\x02\x03\x3a\x6d\x06\xdc\xf6\x38\x83\xdd\xde\xd3\x33\x62\xea\xc7\x74\xb3\xa9\xb3\x91\x76\x23\x89\xe5\xb0\x03\x28\xf0\x4f\xbe\x5e\xcc\x1c\xc7\x30\x95\x31\x6b\x76\x21\x1d\x0c\x42\xba\xad\x0b\x33\xf0\x13\x35\x56\x9c\xe0\xd8\x3e\x95\x15\xa8\x1c\x7c\xd5\x8b\x9e\x75\x61\x59\x2a\x9f\x4e\x53\x52\x3e\x18\x84\xf9\xf6\x19\xa1\x50\xf3\xd4\x25\x11\xc2\x74\x30\x50\xed\x00\x57\x16\xe9\xd3\x56\x90\x6c\x8e\x92\x38\x2c\x62\x8a\x6c\x67\xa5\x02\x8f\x33\x23\x9d\xe6\x3a\x50\x5e\x12\x87\xeb\x98\x22\xf1\x49\x26\x5b\xe3\xb1\x93\x8a\x2e\xc2\xbd\xc3\xbd\x0a\xba\x69\xef\x40\x07\xe1\x38\x74\xd9\xd9\x4e\x7a\x4c\x1f\x8a\xb2\xbd\x1d\x40\xe6\xfd\x9b\xe4\x86\xf8\x9d\x9d\xda\xdd\xa0\xbe\x1a\xf7\xa6\x86\x34\xfd\x0c\x37\x66\xef\xde\x92\xe0\x42\x46\xde\x55\xd2\x6f\x30\x15\x05\x64\xb7\x64\xae\xec\x2e\x41\xf3\x50\x19\x75\x06\x78\x6e\x7c\x38\xfd\x69\x2b\x07\xd0\x12\xaf\x5d\x4b\x1f\xbd\xed\x5b\x8a\x7e\xe2\xf7\xb8\x95\x53\xa7\x04\xce\x84\x66\x77\x84\x51\x5e\xbc\xcf\xf3\x82\x48\xd7\x19\x13\x5a\xcb\x5c\x1c\x99\xd0\x9b\x11\xcd\xa8\x63\x66\xe3\x84\xa5\xc9\x28\x6f\xf1\x64\x96\x87\x8c\xb2\x91\x07\x17\x64\xb0\x59\x8e\x0f\xdc\x2f\xb1\xf4\x9f\x84\x57\x72\x73\x81\xb4\xf1\xde\x81\xf3\xd2\x64\xab\xf5\x90\x9d\x5d\x59\x14\xd7\xfb\x4f\xc8\xeb\xf7\xf2\x52\x80\x46\x96\x2b\x73\x33\xa8\x77\x65\x46\xbc\x95\x86\xbe\xc7\xd4\x55\xf0\xca\x83\xcc\xba\xc8\x6e\x2c\x6e\xb7\x84\x00\x81\x2a\xc7\x84\x8d\x68\xc4\xfb\xb7\x2f\xdb\x55\x1e\xe3\x93\x43\x6b\x1f\xdc\xcc\x19\x5c\x80\x33\xaf\xb7\xb4\xb9\xbe\x97\x09\xed\x96\xd5\xad\x79\x34\x86\x92\x3d\x70\x83\x41\xe8\x0e\xe4\x78\x82\x30\x98\x4c\xb5\x8c\xfc\x60\x40\x7e\x6c\xfb\xa6\x2f\x66\x76\xf6\x94\x74\x0a\xae\x02\x60\x3a\xf4\xd4\xe9\x64\x53\xc1\xfa\xb2\xd6\xd8\xf6\x37\x0b\x7f\x4d\x7f\xc8\x40\x8d\xed\x7c\x1f\xd3\x89\x6b\x8e\xac\x7b\x9e\xaa\x2d\xd4\x5b\xf4\x41\xaf\x6d\xde\xef\x1f\x96\x0e\xab\xab\x8b\x21\x93\x12\xd3\x31\x8b\x8c\x9b\xf5\xdb\xb3\xb7\xd3\x93\x9f\x8f\x3f\xfc\x74\xea\x7a\x5b\x37\x3a\xc3\xd8\x28\x45\x53\x89\x64\xe0\x9b\xb9\x21\x1a\x99\x21\xb7\x2c\x29\xa6\x34\xbb\x4f\x52\x0a\xf8\x07\x30\xf4\x5b\x48\x34\x4d\xdd\x7c\xf3\xe1\xe8\x60\xe4\xeb\x11\xdc\x61\x50\x71\xa6\x31\x1d\xea\x83\x36\xd2\xfd\xd9\x61\x69\xca\x5d\xc0\x6f\x3a\x0f\x06\x31\x99\xde\x94\xec\xb6\x37\x73\x99\xfd\xd6\xcd\xd4\x65\x77\xd9\x91\xa8\xd9\x91\xbb\xe7\x3b\x19\x0c\xf6\x1c\x09\x79\x30\x90\xfb\x49\xd3\x7f\x42\xc6\x16\xc3\x66\xef\xad\x6f\x95\x72\x93\xd9\xdd\x95\xcd\x8d\xb1\x46\x09\xae\x6f\x59\xbb\xd7\x45\x23\x83\xae\x98\xec\xa3\xad\xe7\xa1\x5d\x78\x6b\x72\xaf\xb3\x03\x97\xe0\x44\xdb\x66\x81\x4c\xa2\xec\x59\x79\x2f\x07\x07\x98\x7c\x58\x1b\x86\x66\xf5\xcd\x7c\x1c\x66\xfb\x14\xbd\x0e\xc1\x65\xb2\x65\xa1\x2b\x4b\x9e\xe6\x87\x1f\x73\x54\xdf\x33\xad\xed\x21\x47\x5b\x0e\x41\xff\xf4\x94\xad\x81\x4e\xaa\x66\x74\x73\xf0\xda\x8f\x60\xb7\xa8\x52\x5e\xb9\x4b\x91\x08\xf0\x90\x05\x6f\x30\x7e\xfa\x4c\x1e\x47\xba\x03\xea\xd8\xa5\xda\x0f\xdf\x26\xd5\x7d\x6e\x3b\x07\x3c\x39\x72\x78\xf9\x6a\x07\xf0\x55\xb6\xb6\x97\xca\x6f\x75\x6d\x99\x0e\x7e\xe6\x78\x44\xed\x13\x0d\x5b\x99\xa1\xa7\x0c\x26\x00\xb7\x6e\x84\xf6\x33\xb8\x12\xd2\x0c\x51\xeb\xe1\xd9\xa3\x7a\x1d\x1a\x77\x4d\x2a\x76\x0b\x6d\x75\xe7\x6e\x32\xa8\x2c\x4b\xf0\xe2\xac\xe0\xfd\x1c\x08\x08\xbc\xae\xa2\x3b\xda\x66\x55\xf8\xa9\xd6\x69\x52\xd2\x4c\x52\x9a\x14\x16\x56\x0a\xc2\x53\x46\x74\x69\xa3\xa4\x1b\x70\x98\x2f\xe2\xc8\x73\x58\x72\x63\xfb\xd0\x25\xdc\xdd\xf6\x50\x8c\x35\x28\x83\x5d\x86\x33\x5f\x21\x21\xec\x88\x99\xb2\x8d\xf9\xaf\xe2\x64\x34\xc4\x80\x06\x90\xb8\x73\x6e\x93\xf1\xfd\x44\x85\x57\xf3\xc8\x0b\x8b\x78\xad\x74\x11\x15\x57\x2d\xe7\x02\xbe\x83\x79\x49\xa3\xe9\x6f\x24\xf9\x7c\x45\x38\x9e\xc3\x0b\xf1\xeb\x3c\x59\xe1\x95\xf3\x6b\xa9\xa1\xbe\xee\xa5\x29\x78\xf1\xb8\xbc\xc9\x53\x14\x06\xef\x2e\x8f\xcf\x4f\x7f\xbb\xb8\xfc\x65\x7a\xf2\xfe\xf8\xea\x2a\xb0\xb4\x45\x8f\xb6\x27\x42\x78\x80\x0b\x83\xa9\x24\xd6\x88\x11\xf0\x6d\x7e\x8b\x28\x19\x91\x64\x09\xb7\x01\x40\x70\x12\x93\xa8\x8e\x0a\x82\xd3\xd8\x10\xc9\x06\x83\xcc\x68\x0f\x4c\xbc\x36\x21\x60\x0e\x06\x49\xf5\x61\x11\xdb\x31\x27\x39\xc2\x77\xf1\xc1\xeb\xbb\x1f\x16\xda\x34\xfe\x4e\x9b\xc6\xcf\xe3\xc5\xf8\x6e\x82\x57\x31\x1f\xcf\x27\x78\x29\xaa\xbf\x8e\xe6\xa4\x98\x31\xba\xe2\x39\x7b\x97\xb3\x0a\xa9\x85\xe0\x39\x66\x08\xdf\x57\x85\x2e\x41\xbe\xbd\x97\xa4\x1e\x63\x32\x9e\x4f\x7a\xa9\xa8\xa1\x06\x02\x9d\xa3\x1f\xf7\x0f\x07\x83\x70\x15\x3f\x1e\x41\x7f\x2e\x93\xcf\xda\x58\xf0\xd1\x80\xf5\xad\xd0\xa8\xfe\x71\x85\x10\x9e\x89\x26\x35\x29\x39\x31\xa9\x9e\x4a\xfc\x88\x57\x08\x95\xf7\x47\x4b\x00\x51\x12\x95\x5c\xa1\x51\x85\xcc\x50\x61\xa8\x7a\xc0\x6e\x36\x9b\x39\x04\x28\x3b\x12\x55\x8f\x57\x23\x5f\x9a\x50\x10\x2c\xa5\x90\x26\xba\x92\x45\xeb\x0c\xfc\xc4\x6d\xe8\x1b\x0c\x1d\xb7\xa0\x19\x2d\xee\x00\xc1\xa7\x40\x21\x53\x6f\x2d\xeb\x0d\x82\x03\x41\x26\xd0\xb1\x42\xdd\x3f\x4c\xfa\x51\xdf\xb6\x05\x43\xd5\xec\xfd\x1c\x42\xb2\x4b\x0b\xe3\x0a\x32\x19\xf5\xaa\xa9\x36\x18\x84\xf3\x68\x4e\x52\xc2\x49\x33\x1d\x66\xd1\xbb\xe3\x93\xeb\x8b\xcb\xdf\xa7\xef\x2e\x2e\xa1\xd7\x60\x5b\xe6\x3a\x8e\xb0\x8d\xc3\x0c\xcb\x49\x99\x30\xcb\x13\xe0\xb5\x35\xc5\x33\x14\x35\xba\xa2\x24\x62\xd7\xa6\xfc\x9d\xb4\xe4\x72\x16\xf1\xbc\x2a\x4d\x9b\x3d\xa6\x31\x69\x8a\xcb\xa9\x5a\xbc\x71\x37\x63\x04\xee\x1a\x23\xa8\x68\x7f\xaf\x99\x10\x46\xc6\xcc\x36\x46\x60\x93\xea\xe6\x73\x2d\x45\x6e\xd8\x36\xb4\x57\xb5\xbe\xa0\x4e\x1b\xf2\xba\x78\x37\x6f\x8a\xbc\xe6\x90\x2e\xa2\x15\x21\x9f\xcf\x5d\x8c\x24\xe0\x39\xaf\xf2\x35\x9b\x91\xea\x32\x26\xb4\x00\x79\x0b\xc2\x9b\x9f\xc5\xb4\x49\x6c\xa3\x3d\x03\x1f\xc8\x8d\xbb\x82\x25\x81\x37\xd3\x1b\x23\xbf\x2a\xfd\x54\x7f\x9e\xab\x5c\x95\x79\x40\xda\x26\xce\x8b\x4f\x8d\x7c\xee\xa6\x5c\x6f\x1e\x99\x87\x68\xb3\x09\xa1\x3f\xe4\xfc\xb3\x7a\x04\x37\xdb\x2b\xd2\x23\x51\x0e\xcf\xaf\x40\xc7\xd8\xec\x5b\x0f\xc8\x0a\x97\x46\xfc\x32\xc7\xe9\x17\x4e\xb2\x82\xe6\xd9\x51\x30\x0a\x86\xfe\x4f\x42\x7c\x0b\x34\xc2\xc2\x0f\xc1\x30\x84\xfd\x46\x05\x4d\x55\xb5\xdb\x6c\xdc\x75\xa1\xd7\x98\x36\x2a\xb7\x57\x85\x2e\x20\x44\x08\xc2\x56\x4a\x72\x6b\x3a\x37\xf7\xd5\x68\x48\x86\xc1\x8f\x81\x38\xae\x88\xa8\xc5\xbc\xd9\x30\xaf\x0e\x8a\x75\xd5\x41\x59\x77\x95\x35\x4d\x14\x13\x43\xcb\x94\x86\xd4\x40\x3d\x6b\x6b\xe3\xa8\xc2\xe7\x12\x13\xdf\xd6\x35\x41\xf8\x56\xc9\xb8\x7a\x03\x3b\xca\xc0\xc8\x1a\x35\x6a\x7c\x3f\x51\x11\x8c\xf1\xda\xda\x92\xac\x6d\x68\x7d\x54\xc4\x6b\x69\x20\x3b\x32\x2f\x09\x60\x45\x6b\x24\x32\x13\x28\xd3\x52\xe5\x16\x90\x62\x89\x94\x8d\x51\x12\x16\x0a\xd7\x59\xfd\xee\x19\x97\x4b\x86\x2d\x34\x43\xe2\xb7\x5c\xd2\x63\xe7\x3b\x6d\xd5\x1d\x4e\xe3\xc0\x65\xb1\x5d\x5d\x52\x9d\xab\x59\x6c\xef\xb1\xbc\xfa\x00\x58\xcf\x45\x7c\xf0\xba\xf8\xa1\xbe\x3b\xbd\x2e\x86\x43\x73\xf4\xaf\xe3\xe2\x87\x83\xcd\xa6\x9e\xe6\x87\xb8\xd0\x88\x35\xd5\x5e\x55\x4c\x70\xea\x9c\xe3\x10\xa1\x55\x1c\xee\x3a\xd6\xea\xeb\xd9\x0f\x8b\xd7\x33\x7d\x96\xdf\xc5\xe9\x78\x36\xc1\xf3\x78\x3d\xbe\x9b\x28\x58\x6e\x62\x0e\xd0\x3b\x71\x80\x6a\xfc\xf9\x44\xa4\x98\xc7\xab\xc6\xa1\xbc\x32\x87\xf2\xbc\x79\x28\xcf\x51\x49\x17\x61\x26\x1a\xee\xa1\xba\xd4\x54\xeb\x07\xf4\x12\xcf\x51\x29\xbe\xc5\xf3\x0a\x9f\xda\x3f\xb7\xe1\xde\x99\x78\x36\x7f\x5b\x4e\x11\xbb\xd5\xa5\xe4\xf3\x11\x5e\x58\x84\xb6\x4c\x6d\x65\x9d\x65\xe5\x6d\xae\x47\x20\x51\x1d\x45\x77\x80\xbd\x44\x84\xb4\x79\xa7\xcf\x52\x82\xf0\x4a\x42\x32\x89\x99\x3e\x18\xac\xaa\xf3\x6c\x5d\x33\x21\x6c\xd6\x07\x21\x54\x35\xae\xc6\xe0\x5a\x2a\x4f\xcf\xb1\xe4\x69\x88\xf4\x24\xa8\x6b\x18\x7d\x6c\x4f\x05\x64\x23\x26\xe1\x6b\xf2\x5a\x22\xb3\x2a\xd1\xbb\x82\xa3\x81\xc8\xd6\xeb\x15\x61\x80\xcb\x5f\x5d\x53\x98\xc2\xce\x14\x00\xab\xd7\xc9\xc1\x86\x67\xd5\x75\x14\x3c\x82\xc5\x41\x7a\x9c\xd6\xab\x2e\x0f\xc5\x72\xdf\xc6\x7d\x72\xeb\x8a\x8e\x45\x53\x41\x7b\xb3\x79\x82\x40\xd8\x24\x99\xdd\x9d\xa8\x6b\xc3\x2d\x85\xbd\xd0\x56\x0a\xf6\x3c\xbb\xa2\xca\x1a\xf9\xa9\xb4\x39\x21\x77\xf2\x18\x57\x96\xb7\xa6\x31\x85\xe3\xec\x0f\x63\x40\x2d\x1c\x1e\x1d\x71\x96\xea\xa6\xb1\x9e\x05\x06\x90\xa3\xb2\x84\xc9\x03\x25\xec\x9c\xba\x82\xf3\xd0\xd3\x17\x3d\xdd\x01\x72\x18\x71\xdc\xd0\xaa\x81\xee\xc1\x46\xa6\xc7\xc0\x99\xdd\x9e\x39\x5c\xf9\xac\x98\x6b\x4f\x8f\xbe\x83\x68\x7d\x87\xa5\x70\x6b\x28\x3d\xcc\x84\x6f\x70\x4e\x3e\xa6\xa2\xa9\x95\x28\x4b\x5c\x2b\x04\x90\xb7\x5f\x5c\x8a\x64\x5e\x3d\xc5\x4c\x74\x6b\xdc\xae\x68\x14\x25\x87\x62\x65\x9d\x84\xf5\xeb\x50\x71\xf6\x85\x24\xae\x6d\x15\x08\xc9\x33\xf2\xa4\x62\x30\x60\x90\xf0\xca\xe6\x96\xc5\xf1\xac\x5b\x5c\x8d\x5e\x4b\x25\xd4\xa9\x21\xcd\x6d\x65\x9d\x2f\x16\x6e\xa5\xc8\x5e\x1c\x37\x61\xef\x8f\x88\x3a\xa9\x41\xd3\x42\xca\x10\xf5\x6e\x2b\xde\x6c\x1d\x41\xa1\xd7\xea\x37\x96\x22\xb2\xe6\xa2\x6e\x95\xc5\x50\x64\x85\x28\x43\xf8\x36\xa2\x85\xdc\xec\xf6\x0e\xe0\xc7\x39\xe1\x77\xf9\x3c\xde\x3b\x84\xf9\x78\x13\xdf\x5a\x2a\x9c\x9b\x67\xa8\x5c\xac\xe0\xb3\xdf\xe6\x0e\xb4\xa6\x3f\xe9\x74\x3b\xda\x01\xd9\xdd\xab\xaf\xc8\xfd\xdc\x1f\xfd\x9a\x1b\x48\xaa\x6f\x20\xc5\x2e\xd2\x10\xa9\xf2\x86\x44\xa3\xf5\xdf\x26\xac\x1e\xd2\x6e\xeb\xf9\x16\x76\xbc\xae\xcb\x13\xc3\xa0\x8c\x01\x9d\xf7\xcb\x5c\x48\x0d\x1f\x21\x7c\x7a\x65\xb2\x45\xa4\x70\xc0\x00\x48\xc3\x14\x0c\xb6\xcf\x66\x95\x84\xc4\xb0\x87\x16\x7b\x8e\x00\x3f\x4a\x7e\x70\x18\x6d\xac\xa1\x61\xab\xc4\x72\xb9\x40\x43\x44\xf5\x60\xfa\x91\xa2\xd1\xf6\x15\xcb\x67\xa4\x28\x7c\xed\xf7\x48\x7a\x96\xb2\xbe\x9e\x03\xdb\x97\xb9\x2a\xab\xda\xbc\x95\x87\x7b\x59\x81\xa1\xd9\x2a\xcb\x1c\xe7\xf6\x35\x70\x55\x15\xb1\x58\xf2\xe8\xc3\xf1\xf9\xe9\xd5\xc7\xe3\x93\xd3\xab\x98\x59\x3f\x9c\x2f\xd3\x37\xbf\x4f\xcf\xde\x3a\xdf\xe5\x2b\x49\x5a\x34\xf0\x38\x4d\x63\x66\xfd\xa8\xfa\x1d\xe7\xd1\xcd\xa3\xf8\x19\xd7\x46\xe4\x19\xeb\xf0\xbf\x5c\xeb\xd9\x69\x89\x3e\xcb\xb4\xe1\x05\xf1\xa1\x7d\x88\xab\xbb\xf5\x9c\x8d\xad\xa0\x16\x4d\x37\xf6\x6e\x0e\x29\x9e\x49\x26\xda\x68\x1f\x2f\x7e\x3d\xbd\xbc\x3c\x7b\x7b\x3a\xbd\xf8\xed\xc3\xe9\x65\x80\xf0\xe2\x2b\xf7\x8f\x76\xe9\x51\xec\x22\x9e\x23\x9d\xea\x43\x70\x0a\xad\x36\xa1\x78\x7f\x21\x8f\x2d\x67\x50\x8b\x34\xdd\x80\x95\x07\x09\x6b\xb1\x96\xd3\x52\x1f\x71\x59\x04\x2d\x6d\xb9\x28\x19\xcf\x26\xb6\x9f\xfd\x78\x36\xe9\xbd\xa0\x4c\x98\x66\xcd\x03\x5f\x51\x8c\x09\x1c\x81\xb4\x0c\x13\xdf\xca\x5d\x18\x8c\x79\xb9\xed\x2c\xf4\xe1\x67\x0e\x3e\xe3\xb2\xad\x9d\x90\x5d\x77\xe2\xfa\x4c\x48\x7d\xef\xda\x46\x59\xf9\x72\x53\x63\x5e\x62\x90\xad\x2a\x85\x85\xd9\x17\x95\x8c\x2d\x7d\x3c\x8a\x82\x30\x7e\x7d\x67\x41\x77\x93\x39\x0a\x29\xc2\xac\x32\xc4\xfa\xef\x38\x2d\xea\x43\xd1\xe8\xde\xd4\xea\xde\x12\xf5\x9e\xb7\x7b\xbd\xc4\x98\xea\xab\x4d\xa6\x54\x9c\x89\x97\x1a\x5f\xfe\x57\xab\x8f\x98\x6f\xda\x53\x4c\xeb\x12\x81\xba\x72\xab\xae\xe4\xba\x9c\x1d\x26\x88\x62\x77\x2f\x40\xcf\xde\xbd\xc3\x89\x54\xb2\xbd\x2d\x56\x38\x5a\x2e\x0e\xc4\xef\xa0\xba\xa9\xb1\x3f\x99\xb8\x77\x81\x36\x78\x1d\x67\x72\x9d\x11\x34\xd9\x6c\x34\x22\x6b\xcf\x56\x51\xc6\xf4\x88\x37\x43\xb0\x81\x1d\x64\x20\x59\x76\x34\xb2\xa0\x5c\xa9\x60\x6b\x6c\xe1\x19\x02\xbb\x1c\xd1\x58\x85\x71\x19\xb9\x92\xb5\xa6\x2c\x12\x54\x21\x01\x3d\xf1\x52\x44\x71\x10\xf8\xaf\x8a\xe8\x43\x4b\x2d\xb9\x06\x63\x59\x01\x0d\xeb\x3c\x09\x46\x26\x5e\x22\x36\x1f\x3f\x00\x12\xad\xf8\xa6\x30\x69\xab\x4f\x92\x39\x14\x9f\x94\x65\x68\xf5\x49\xcb\x14\xe2\xa3\xe9\x96\xea\x33\xa8\x92\xc4\x37\x6d\x30\xa8\x3f\x88\x6a\x8b\xf7\x50\xe9\xea\xf5\x25\xb9\x3d\xfd\xb2\x12\x1f\x18\xb9\x25\x5f\x56\xd6\x27\xb9\x49\x8a\x4f\x66\xdd\x99\x4a\xd0\x14\x3c\x5f\xa1\x12\x34\x25\x29\x2d\x78\x50\xe2\x2c\x6e\xc4\x5f\xd3\x8c\x6e\xdb\xa4\x55\x1c\x87\x67\x9a\x7a\x2e\x63\x3b\x79\x6f\x5a\xe6\x86\x46\x35\xf1\x54\x56\x20\x2a\x10\x62\x62\x4c\x26\xf1\x21\xe6\x88\x2e\x42\x66\x23\xd9\xb0\x2a\xe0\x91\xd7\x5a\x5d\xc2\x72\x81\xa0\x59\x4d\xb2\x2a\x88\xa0\x2f\x18\x0f\x2a\x89\x62\x34\xe2\x3b\x80\x67\x3f\x53\x8d\xbf\x92\x2f\x9b\xda\x1e\x30\x4f\x5b\x18\x1d\x20\x01\xcd\xc4\x9c\x42\xaa\x84\xf9\x54\x2f\xaa\xdb\x95\xc0\x5b\x29\x72\x78\x34\x15\xf9\xa4\xf9\xa1\xd4\xb1\xe9\x77\x98\x0b\xaa\xeb\x35\x9d\xc7\x09\x26\xd1\x2d\xc9\x08\x4b\x38\xf9\x49\xbc\x68\x16\x10\xbe\x50\xb9\x53\xa0\x61\x12\xa2\x1e\x85\x25\xba\x56\x37\x88\x55\x80\x44\xa8\x83\x12\x37\x9a\xa5\x82\xc5\x70\x48\x10\xaa\x44\x17\x1e\xaf\xe1\x4c\x23\x20\xaf\xf0\xb8\x10\xe4\x71\x45\xb8\x0a\x34\x68\xe7\x49\x75\x1e\x83\x47\xa3\xc6\xa6\xc7\xe3\xca\xf6\x3a\x66\x47\x41\xc1\x03\x41\x71\x54\xc1\x44\x8b\xb7\xd9\x5a\xbd\x95\xe3\xa8\xd3\x3e\xaa\xb7\x61\x30\x24\xc3\x00\x05\x38\x35\xf5\x28\xed\x06\xca\xd9\x1e\x67\x98\x44\x0f\xcc\x41\xea\x54\x61\x9c\xf6\x6e\xec\x28\x92\x32\xf0\xa4\x42\xa6\x1f\x0c\x6e\x2a\x08\xec\xfe\xe7\x90\xe0\xcf\x21\xc7\xb7\xd5\xae\xf3\x59\x79\x9e\x40\x9c\xa6\x0a\x37\xf6\x54\xbe\x30\xfe\x9d\xf1\x85\xbc\x1d\xaa\x52\x3c\xc8\x17\x55\x8a\x2b\xa8\x6a\xb1\xf2\xe9\x3d\xeb\xa8\xd9\x64\x30\xf0\x21\xe0\x3b\x80\x50\xea\xf9\x2c\x24\xf8\x00\x2a\x28\x6d\xd2\x2b\x95\x9d\x17\x6a\x90\xf4\xe6\xb9\xb2\x9a\xaf\xb4\x2c\x56\x08\xc7\x2a\x7b\xc8\x30\x77\x4d\x00\x4c\xa0\xb6\xac\xc7\x5a\x74\x34\x0c\x95\x0f\x77\x34\x25\xa1\x5a\xc9\x0c\x39\x66\xef\x58\xf0\x79\x99\x44\x02\x8c\xdf\x61\x52\xe1\x02\x36\xcc\x5d\xe9\x22\x7c\x27\xe7\x9c\xaa\x2e\x19\x73\xe3\x8a\x6d\x14\x79\xe0\xc8\x85\x49\xa5\xe6\xf7\x1f\x97\x7a\x03\x1a\x1b\x0a\x7f\x97\x28\x36\x60\x78\x49\xb4\xac\xee\x53\x0d\xff\xac\x26\x77\x29\xc7\xb3\x96\x0c\x66\x18\xac\xbe\x9f\xab\xc9\x89\x49\x53\x01\xd1\x27\x21\xf7\x3b\x23\x58\x31\x49\x2d\x23\xdb\xf6\xe3\x9d\x7b\x8e\x77\x6f\x44\xd2\x0a\xcd\x21\x08\x94\x87\xbb\xbe\xf2\x01\x47\xf7\xec\x47\x85\xfc\x1c\xe0\x00\xe1\x4f\x21\x1f\x67\x13\xb4\xd9\x88\x37\x44\xfe\xa8\x34\xd6\xa5\xa3\x9d\xaf\xea\x6e\x1a\x6a\x1a\x61\x5d\x2e\xea\xdc\x6f\x14\x73\x0f\x3d\x03\x11\x76\xbe\x34\xc6\x89\x5a\x4b\xf4\x57\xa5\xfb\xed\xd9\x4a\x7c\x1d\x0e\xcb\xcd\x08\x5d\xff\xab\xd2\x10\x4b\xf2\x20\xc7\x34\xe7\x82\x5e\xfe\x83\x01\x19\xff\xdb\x44\x51\xfc\x8d\xf2\xbb\xf3\x24\x9b\x27\x3c\x67\x8f\x57\x84\x73\xc2\x62\x12\x71\x92\xb0\x79\xfe\x90\x35\xbf\x14\x84\xaf\x57\xcd\xd7\x16\x2a\x7c\x4c\x22\xf0\xff\x8d\x49\xf4\xf3\xf1\xd5\xf4\xc3\xf1\xf5\xd9\xaf\xa7\xd3\x8f\x97\x17\xff\xfe\xbb\xfb\xea\xea\xf7\xf3\x37\x17\xef\x63\x12\x5d\x5e\x5c\x5c\x0b\xf9\xe7\x8e\xcc\x3e\xff\x9c\x14\x57\xeb\x15\xd0\xfc\xe9\xd3\xd9\xdb\xe9\x2f\xa7\x22\x57\xdb\x0a\x2d\x5c\x95\xdc\x41\x75\x36\x27\x86\x8f\x1e\x0e\x73\xb0\xca\x28\x62\x29\x11\x04\x78\xed\x58\x0c\xa5\xf0\x4b\x3c\xcd\xe2\x2c\x0c\xa6\x53\x99\x6a\x28\xf8\x99\x28\xcb\x1f\x42\x08\x53\x64\x2a\x33\x53\xe6\x4a\xe3\x49\x55\xd8\x5d\x75\x8e\x01\x05\xb1\x5d\x87\xb3\x21\x44\x91\x5e\xa4\x79\xce\x42\x78\x64\x49\x36\xcf\x97\x21\xfa\x8b\x45\x1a\x0d\x45\x7a\xeb\x96\x57\x85\xd8\xc5\xbc\x94\xe6\x3d\x66\xef\xd9\xb1\x59\x15\x47\xbb\x12\x78\x00\x80\x2a\x24\x1f\xfb\x9a\x92\x78\x80\xbc\x18\x7a\x02\x4b\x8c\x5d\x5b\xa6\x84\x8c\xc6\xbc\xec\x6d\x1b\xb5\x79\x4f\x5e\x63\xbe\xfa\x23\x0a\x25\x56\xd1\x46\x2c\x90\x3f\x40\xd6\xd9\xc0\xce\x26\x9f\xd1\x2b\xbc\xf4\x68\xb9\xcd\x12\xc3\xf7\xf1\x52\xae\x2d\xff\x5d\x63\x89\x0c\x97\x13\x58\xaf\x03\xf4\xe3\xfe\xa1\x2f\x44\xc6\x2a\xe2\xa4\xe0\xe1\x52\x0b\x09\x76\x30\x15\xe3\xc2\x7d\x20\x1a\xe7\xce\xd6\xfb\x9e\xb4\xa0\xb2\x27\xd6\x6d\x2d\xce\x8d\x6d\x98\x61\x59\x9f\xdd\x54\xc3\xf1\xa8\x76\xda\xc6\xbd\x83\x0c\xf3\x79\x1f\x12\x84\x1f\x2b\x56\x04\xf3\x52\x2d\x9e\x5b\xf5\xfa\x16\xef\x1d\x4a\x15\xf2\xd4\xae\x4a\x55\xd8\x83\xdc\xb0\xa7\xd5\x56\x6d\x3e\x9d\x5a\xdd\x30\xd5\x5b\xbe\x20\xf5\xc5\x4f\xea\x4a\x92\xe2\x83\xc1\x17\x0f\x35\x3b\x0e\xc5\x17\x9b\xda\x31\x50\xe3\xc6\x9a\xaf\x22\x28\x19\x0d\x57\x14\xb6\x80\x12\xe5\x3c\xe9\x59\xcf\x31\xef\x69\x6b\x3c\xaf\xa4\xec\xa2\x54\xc9\x2c\xac\x72\xf8\x3b\x86\x4d\x93\x21\xfc\x10\x32\x7c\x0a\x26\x0c\x57\x21\xc3\x17\xf0\xc4\x4a\x09\xe4\xd7\x2a\x6f\xe0\xf3\xad\xf3\xf2\x24\x76\x8e\x23\x7c\x69\x1b\x02\xe0\x8f\xf1\xbf\x5e\x5d\x7c\x88\xe4\x41\x48\x17\x8f\xf8\xaf\xf1\xe1\xc1\x01\x7e\x1b\xff\x33\xfe\x10\xbf\xfa\x8f\xf1\x1f\x0f\x7f\x9a\x0c\xff\xf4\xaa\xea\x9b\x33\x37\x74\xce\xde\xa1\x8e\x96\x5f\x79\x45\x42\xa8\xf8\xea\x44\x1c\x35\xcf\x48\x48\xa1\x84\x8a\xd1\x36\x41\xfa\x04\xae\x1d\x69\xbc\x77\xd0\xbb\x61\x24\xf9\x2c\xdd\xfa\xcc\x89\x1e\xc7\xd7\x9b\x4d\x25\x6c\x57\x27\x20\x24\xae\xc2\x7d\x58\xe7\x20\x14\x6d\x4e\xcf\x51\x23\x49\x1c\xc7\xe7\x47\x32\x30\xec\x51\x30\xd6\x1d\x3b\x0a\x86\xf2\xdd\x30\x10\x82\xe0\xd8\x12\x4d\x9b\xd4\x15\x57\xa1\x69\x7f\x14\xeb\x48\x7e\x90\x3c\xf5\x08\x7e\x68\x29\x59\xfe\x52\x5c\xe7\xa8\x16\x39\xdf\x26\x5e\xda\x9c\x47\x86\xb2\xfa\xf4\xad\x02\x96\xab\xeb\x5a\xd5\x99\xe3\x13\xca\x66\xeb\x34\x61\x93\xc0\xe2\xd9\xe0\x94\xc6\xf4\xc8\xc3\xeb\xf1\x1f\xdf\x9a\xbc\x4a\xc8\xee\x55\x06\xa7\xc1\x38\xc0\x3e\x78\x64\x51\xf2\x30\x06\x57\xcd\xa3\xa0\x1f\x8c\x02\xdc\x0f\x30\xfd\x31\xfe\x2b\x7a\xca\x86\x71\x10\x45\x51\x3f\x18\x86\x06\xd6\xf3\xaf\x68\x18\xf4\x97\x39\x23\x7d\xca\xc9\xb2\x08\xd4\xf8\x66\xc3\xf8\x2c\x04\x8c\x65\xf0\xa6\xd2\xf5\x1d\xc6\x41\x7f\x12\x94\x62\xee\x0d\x0f\x71\x86\x46\x3b\xaa\xad\x05\x7a\xbb\xde\x4f\xa2\xde\x97\xa2\xd5\x79\x7c\xf0\x3a\xff\x81\xea\xea\xe7\x6e\xf5\xf3\xaa\xfa\x79\xbd\xfa\xb4\x59\x7d\xb1\x8c\x74\xed\x25\x44\x34\x1d\xe7\x93\x5e\x36\x8c\xdf\x87\x09\x1a\x06\xa3\x7e\x30\x14\x4d\x4a\x3c\x4d\x2a\xad\x26\x55\x3b\xd6\x7b\x6b\xc7\xfa\x20\x8f\x01\x60\x90\xc5\x44\xaa\x52\xbd\x73\xbc\xf5\x15\x88\xb6\x3f\x48\xee\x98\x4f\xa0\x6a\x7f\x77\xb7\x02\xd8\xb3\x7e\x76\xf6\x54\xf1\xe6\x4d\xfb\x56\x53\x6d\x03\x9f\x6a\x9a\x82\x38\x26\x50\xc4\x6f\x3e\x23\x3b\x29\xfe\x0f\x06\x95\xd2\x07\x5e\x4c\x84\x74\xd9\x5a\x96\x3c\xf8\x64\x4a\xc9\xf9\x34\x39\xb6\xdf\xa0\xc2\x7f\xf3\x95\x09\x0c\x6a\xcf\xc3\xf9\xfd\x0d\xf2\xfc\x5a\x5f\x3d\xe2\xe5\xef\x6d\xe6\xb2\x96\xd7\x5f\x4a\x97\x94\xc7\xd2\xb3\x27\x12\x69\x62\xe9\x4c\x13\x15\x3c\x67\x24\x66\xea\x07\xfd\x3b\xd1\x5e\x1d\x4b\x0a\x57\x86\xea\xd7\x1d\xe5\xe6\x59\x65\xd9\x6c\x14\xdf\x57\x2a\x18\xee\xe6\x95\x2b\xf0\x39\x3e\x1e\xba\xa2\xa3\x56\xfd\x51\x68\x8a\x19\x0e\xad\x62\xb4\x5e\x40\xc1\x67\xcb\x4a\x99\x14\xf2\xd4\xd4\x4d\x02\xfd\x41\x29\x51\x3e\xfc\x31\x70\xaa\xae\xf8\xd1\xb4\x57\xfb\xd2\x88\x67\xb7\x68\x9b\x4f\xc0\x3c\x5a\xad\xd9\x6d\xd3\x2d\x46\x26\x55\x38\xc7\xcd\x5e\xb4\xfb\x4d\xf7\x68\x29\xcd\x0a\x34\x9b\xff\x3b\x0c\xe2\x4f\xf8\x17\xfc\x27\xfc\x6f\xf1\x5d\x18\x58\xb2\x40\x20\x92\xd9\xb2\xc1\xbf\xe1\x16\x11\xe2\x27\xdc\x2e\x75\xfc\xd2\x2e\xaa\xfc\xa9\x4d\xed\x77\x4f\xc9\x43\xf1\x0a\x78\xbf\x5d\x3a\x6a\x99\xd4\xd2\x50\xff\xf5\x6f\x6b\xc2\x1e\xbb\xa5\x6d\xbf\xd0\x6c\x24\x05\x78\xc5\xe9\x5c\x85\x33\x6f\xb9\x20\xad\x72\xcd\xf2\xe5\x2a\xcf\x44\x16\xa9\xd6\xd8\x91\x5c\x63\x4e\x90\x2f\xbc\x82\x9a\xd8\x9a\x43\x3e\x81\x3a\x5e\x3c\x76\xa3\x0f\x1a\xf0\x29\x98\x6e\x74\x2c\x46\x67\xbc\xa3\xe9\x1c\x0a\x7a\x66\x46\xf1\x62\x5a\xf0\x84\x93\x97\xe4\x7b\x4e\x8e\x3a\x50\xc7\xce\xe1\x49\xf8\xab\x84\x73\xd6\x71\xfc\xe5\x30\x4e\x57\x09\xe3\xb4\xe5\xaa\xbb\xca\x03\xf3\x4a\x65\xd9\x37\x53\xa1\x5b\x41\xaa\x1d\xcb\x24\x4b\x6e\x49\x13\xfa\xaa\xee\xc7\x83\x17\xf8\x0e\xcf\xf1\x0a\x2f\x6b\x8a\x6e\x75\x48\xb8\x01\x7f\x43\x82\x83\xbf\xfe\x9b\x5c\x20\x4f\x95\xf9\xdb\x68\xef\xc0\x6f\xb9\x55\x5d\x79\x94\x25\xc2\x3b\x48\xbe\xa5\x85\x20\x36\xef\x4c\xda\xcd\xb6\xb5\x84\x64\x3e\x3f\x11\x73\xf0\x57\x98\xeb\x9d\xe8\x83\x75\x8d\xc9\xb4\x95\x3a\x2d\xae\xe8\x72\x95\x92\x93\x94\xce\x3e\x77\x26\xef\xe4\xda\x4a\xff\x96\x70\x51\x87\x37\xf9\x3a\x9b\x17\x9d\xe9\x3b\xb9\xba\xd0\x3f\x49\x29\xc9\xf8\x25\x99\xf1\x67\x17\x62\x65\xed\xdc\x12\x9a\xdd\x56\xd9\x5e\xd4\x2a\x87\xc2\xae\x72\x2f\xf3\x1c\x72\x3e\xab\x6d\x26\xd3\x2e\xea\x66\xa2\x3c\x8b\x7c\x95\xab\x4b\xaf\x9d\x75\x5d\x1a\xa6\x97\xce\xb6\xaf\x8a\x5b\xc2\x4f\x53\x00\x29\x7c\xd6\xba\x70\xb3\x75\xa9\xb9\x4a\xfe\xdc\xea\xab\x6c\x5b\x4b\x28\x5e\xd6\x86\xa2\x7b\x1b\x8a\x97\xb5\xa1\xe8\xde\x06\xe0\xc0\x5e\xd2\x8a\x7a\xc6\xdd\xa5\xbc\xa4\x25\xf5\x8c\xdb\x4b\xd1\x76\xb0\x57\xfc\x31\x25\x6f\xc9\x8a\x91\x19\x60\x8f\x9d\x93\xa2\x48\x6e\x49\xf7\x52\x77\x10\xda\x5a\x0b\xf0\xd8\x7b\x6b\x71\x5b\x9d\x0a\xcd\x3a\x9d\x56\x27\xfa\x40\x7e\xaf\x58\xb3\x4e\xb4\x69\x27\xda\xd7\xe4\x0b\xbf\xd2\x2c\x48\x27\xba\x79\xc7\x3a\x33\xf2\x8c\x99\x95\x74\x23\x2a\xd8\x41\x30\x3a\x7c\x5e\x95\x8b\x6e\xd4\xcd\xde\xf8\x3c\xea\xeb\x4e\xd4\x05\xe1\x2b\xc1\x57\x3e\x8f\x78\xda\x99\xb8\xb2\x32\xef\x44\x75\xd6\x89\xaa\x04\x26\x7b\x5e\x7d\x17\x9d\x28\x9f\x7f\xba\x3e\x7e\xf3\xfe\x74\x7a\x72\xfa\xfe\x7d\x47\xc2\x77\x91\x9d\x69\x2b\x75\xc9\xc7\x7e\xd4\x9c\x6f\x27\xf2\xf3\x4e\xf5\xbe\x4b\x8a\xe7\x92\xad\xb2\x74\xa8\xf3\x49\xc5\x7a\x77\x22\xbf\xb2\x6a\xdd\xce\x40\xcb\x71\x3c\x57\x0c\x7a\x37\xca\x4b\x8b\xf2\x76\xa9\xb7\x29\x9e\x6c\x17\x80\xa5\x0c\xbb\xc3\x16\xcb\x1e\x6b\x17\xd5\x5f\x22\x93\x6a\x4b\x57\x67\x22\xa1\x7a\xc6\x56\xcc\xf9\x46\xcd\x17\x49\x9a\xde\x24\xb3\xcf\xfb\xe2\xcb\xbe\xc6\x68\xfc\x26\x4d\xf1\xc6\x26\x80\x56\x54\x36\x30\x08\xb4\xe3\x9d\xe0\xf2\xb7\x89\xec\x9d\xac\xe3\x5e\x18\x4b\x41\xcd\x2e\xe9\x9d\x2a\x03\xba\x40\xe1\x2e\x36\xb3\x1d\xf2\x3e\x30\x69\x46\xc1\xd0\xd2\x72\x59\x31\x3b\x32\x40\xd3\x4a\x93\xc7\x7c\xbd\x8d\x10\x27\xcb\x55\x9a\x70\x32\x32\x14\x8b\x57\x0e\x49\x15\x14\x25\x93\x38\xb3\xcf\xeb\xc6\x16\x71\xbc\xcb\xc8\x77\x46\xcc\x7c\x89\x70\x3f\x57\x0c\x08\x99\xef\x2f\x48\xc2\xd7\x8c\xd4\xa7\xda\xb3\x10\xf2\xe2\xa7\x82\x64\x73\x6f\xf8\x89\x6f\x1d\xb3\x52\xa2\xe7\x40\x31\x85\x72\x0b\x53\xbf\xc6\x04\x3c\x4d\xf3\xc1\x60\x2f\xdc\x03\x3d\xbc\x7d\x97\x96\x21\x7d\x9f\xa1\xaa\x5c\x77\x12\x31\x50\x93\x00\x5f\x61\xc1\x2d\x26\x0e\x7e\x2a\x14\x11\x5d\x9d\x7e\x78\x3b\x3d\x3e\xb9\x3e\xbb\xf8\xa0\x1c\x8f\x5b\xd4\x9c\x83\x01\x1f\x53\x67\xe3\x98\xc0\x05\x28\x8f\xee\x93\x74\x4d\xe0\x7a\x59\x96\x26\x37\x52\xbf\x65\x97\xe3\xb5\x45\xe2\x0a\x43\xd3\x03\xc5\x25\x06\x3a\x0a\x86\xa4\xe9\x07\x63\xc2\x9d\xef\x81\xa5\x57\x61\xa0\x16\xaa\xd1\x6a\x46\xe4\xc2\xd4\x1a\xad\xec\xc7\xc3\xa3\x4c\x8e\x56\x1e\x1f\xbe\xce\x7f\xc8\xe0\xee\x83\x8e\x73\x77\xb4\xf2\x49\xcf\x67\x60\x72\xc4\xdd\x38\x0b\x14\x49\x80\x31\x07\xab\x34\x7c\x52\x70\xad\xbc\x86\xd5\x4a\x4b\x54\x96\xa5\xf4\x5c\xae\xa1\xbd\x26\x0e\xf6\x4e\xe7\x65\xe9\x55\xe4\x3d\x0b\x91\x7d\xb7\x3e\xf5\xdb\xa0\xb5\xcf\x0c\xfb\x28\x91\xc9\x33\x88\x33\xf6\x96\x14\xb3\xb7\x64\x96\xb3\x84\xe7\x0c\x89\x7d\x33\x5b\xd0\xdb\xb5\x3a\x7d\x0f\xb1\x7d\x16\x1f\xb6\x7a\x23\xd6\x64\x77\xed\x79\x54\x22\x9c\xac\x56\x24\x93\x5a\xa3\x7a\x04\x3e\x57\x9f\xf4\x5c\x5c\xfc\x6e\xba\xd8\x7f\x58\xb4\x12\xd7\xb8\x61\x3c\x01\x64\xc1\x46\xf8\x24\x9f\xdb\xfe\x68\x2c\x0d\xa9\x41\x6e\x08\x70\xf5\xe3\x0d\x05\x85\x8e\x18\x7f\x9a\xd1\x1a\x76\xbc\xb9\xc3\xf7\x5f\xf6\x97\xb8\xa2\x39\xca\x70\x83\xe6\x28\xeb\x06\xd7\xba\x43\xa3\xfe\xd2\x89\xae\x8f\xfa\xb6\x63\xa8\xeb\xd9\xd2\xcd\x37\xf1\xe9\xf0\xfb\x51\x20\xa3\xb2\x7e\x20\x0f\x29\xcd\x48\x80\xbf\xfb\x5f\xa3\x60\x96\x64\x33\x92\x06\x25\x4e\xea\x43\xc5\xa2\x6b\xd8\xca\x1d\x09\x03\x3f\xc1\x7e\x3b\x0a\x02\x2c\x76\x48\x7a\xb3\xe6\x55\x7f\x8e\x83\x64\xcd\xf3\x59\xb2\xa2\x1c\xbc\x50\x02\x2c\x5f\xe4\x8c\x49\x5b\x6e\xf1\x6b\x91\xcf\xd6\xa2\xab\xe6\x46\xb1\x1b\x2c\x72\xb6\x0c\x70\xb0\x4c\xbe\x68\x30\xb5\x60\x49\x33\xf3\x0c\x28\x62\x77\x79\x3a\x87\x0b\x12\x46\x92\x79\x9e\xa5\x8f\xf0\xf8\xb7\x35\x65\x40\xa2\x20\xa9\x44\xfd\x7e\x4b\x19\xd1\x06\xea\xc5\x8a\xa4\x29\x58\xe5\x04\xe2\x5c\xba\x51\x77\x3f\x01\xa7\x3c\x15\x2c\x96\x45\x58\x22\x58\xeb\x3a\x89\x65\x6e\x6a\xa3\x62\x3b\x3c\x77\xf6\xc9\x1b\xb2\x3c\x0b\x83\x55\x52\x70\xe2\x00\xb7\x10\xa5\x9c\x11\x5d\x69\x50\xeb\xac\x1c\xb3\x35\x7f\x56\x7a\x9a\xad\x3a\xe5\x28\xf1\xcd\xfa\xe6\x26\x25\x05\x44\x3b\x10\x33\x71\xc5\x08\xff\x85\x3c\x82\x66\xc4\x67\x0e\x96\x8f\x49\xf4\x99\x3c\x9e\xe4\x73\xc9\x15\x6c\xa1\x1e\x22\xcc\x1d\x17\x2e\x3e\x01\xfb\x43\x7f\xea\x91\xeb\x86\x69\x47\x19\x09\x60\x8a\xc9\xe6\x44\x2a\xb3\x3a\xe6\x4b\x3c\x6b\x86\xce\xd9\x56\x27\x62\x62\x11\xab\x59\xef\xe4\x2c\xc2\x80\x88\x5e\x50\x5d\x47\x10\x2e\x42\xb5\x48\xf6\x33\xbd\x4a\xb8\x09\xe9\x0c\x4b\xa5\x41\xa0\x98\x25\x2b\xb2\xbf\x62\xa4\x28\xac\xc4\x30\xcd\xcf\xb2\x7a\x6a\x78\xbd\x4f\xb3\x7a\xca\x8b\x75\xd3\x63\xad\xbd\x4d\xd8\x50\xca\xcd\xb8\x0b\x52\x9f\xc9\xe3\x47\x51\x8f\x7a\xa9\x9f\xc9\x63\xa3\x82\x9f\xc9\xe3\xa7\x55\xb3\xcc\xe6\xac\x50\xe5\x09\x1a\x42\x7e\xb1\x09\xbc\xcd\x1f\x1a\x2d\x14\xe9\xe6\xf9\x83\xd5\x42\xdb\xb4\xad\xb0\xad\x96\x72\x27\x7a\x77\x9d\xe5\x32\x1f\x08\xc2\x89\x9b\x52\x4e\x10\x24\xe1\xbd\x2d\x1e\x72\x30\x68\x58\x12\xe7\xe8\x89\xb5\x30\x46\x79\x8d\x31\x1a\x27\x38\x9b\x94\x12\x98\xc6\xc3\x76\xe5\x83\x41\x1e\x26\x38\x43\x3d\x60\x8d\xed\xfa\xa8\x55\x15\xa0\xc1\x20\x8b\x0a\x9e\xaf\xc4\xc9\x96\xdc\x26\x72\x7e\x5b\xb1\x02\x92\xce\x67\x8c\xef\x8e\xf3\x1f\x15\x84\x6f\xca\x59\x92\x15\x54\x10\xb9\xce\x3d\x9b\x82\x9c\x9c\xb3\x35\x63\x24\xe3\xa0\x2f\xc3\xcc\xf3\x52\x1b\xe9\x89\x67\x90\x2a\xac\xdf\x31\xc1\x00\x52\x41\xbe\x50\xf3\x57\x39\x5e\xb3\x08\xd6\xe4\x60\xa0\x1e\x0c\x1f\xf5\x22\x91\xd1\xbd\xf3\xfd\x2f\x17\x18\x6f\x58\xfe\x50\x10\xb6\xbf\x2b\x66\xc3\xd7\x58\x0d\xd4\x8d\x11\xba\x0b\xa1\x38\xc1\x45\x9b\xeb\xd2\xba\x66\x26\xeb\x77\x63\x8e\xdb\x19\xb8\x06\x3f\x10\x4c\x70\x46\x12\x46\x0a\x7e\xb1\x80\xd8\x1d\x7e\xb9\x56\x02\x9d\x24\x4c\xdd\x56\xe0\x2c\x76\x7c\xdf\x94\x88\xe2\x0b\x87\xaf\x51\x6c\x42\x6e\x1b\xe5\xfa\xbe\x3b\x60\x79\xe5\x6b\x2e\x01\x73\x32\xcb\xcd\x85\xf7\x84\x30\x59\x55\xa3\x2c\x75\xe5\x7f\xa3\xfc\xce\x1b\x22\xab\xb5\x09\x9a\x3e\x01\xbf\xaf\x2d\x25\x30\xc2\x48\x36\x27\xac\x35\x2c\xad\xbd\x9c\x22\x9d\x5a\x23\x10\xa8\xd3\x41\x22\x9f\x7e\x33\x49\x46\x07\x30\x17\x25\x11\xfb\x5a\xaf\x2e\xcf\xf8\xb6\x06\xa3\xed\x89\x69\x74\x97\x14\x6f\x2f\xce\x3d\x5b\x32\x39\x9a\xe7\x33\xe0\x92\x22\x98\xc9\x57\xc0\xbb\xe5\x2c\x24\x68\xa4\x8c\x9f\x4c\xf1\xba\xa8\x1a\x96\x9f\x7c\xdd\x56\x79\x93\xc9\x94\x73\x93\xcf\x1f\xab\x1e\x3b\x9b\x4b\x9e\xee\x81\xa6\xe9\x19\x9c\xf6\xaa\x89\xa3\x35\x9e\xd3\x79\xfd\x15\xc4\x2c\x48\x49\xc2\x2e\xe5\x60\xad\x7d\x21\x7d\x3b\xf2\x83\xee\x88\xea\x98\xbe\x6a\x40\x2d\xcc\x3e\xa7\x42\x8d\x77\xd5\x24\xaa\xf8\xa9\x35\xe6\xc9\xad\x10\x6f\xbe\x8a\x5f\x35\x3d\xb4\xd9\x04\x81\x86\x72\x56\x84\x37\x9b\xd0\x4d\xa3\x0e\x65\x07\xba\x03\x95\x58\x82\xc7\x02\xf3\xb0\x2d\xa2\x91\xd3\x13\x56\x1e\x1d\x6a\x8e\xa3\xb2\xec\x15\xd1\xbf\xfe\xdb\xa7\xd3\xcb\xdf\xa7\x67\x1f\xae\x4f\x7f\xba\x3c\x96\xa7\x7c\x98\x46\x7f\xaa\x3b\xcb\xd8\x55\x33\x7e\x6d\x47\x00\xa3\xa8\xbd\x98\xb5\x69\x9d\x4e\x35\x72\xbf\x3a\xdf\x4a\x69\x34\x3f\xab\xab\x48\x1c\x05\xf0\x6c\xf7\x31\xe4\x37\xc0\xb1\x0e\x22\x7b\xa7\x6e\xdb\x9b\x79\x88\x9e\xac\x0d\x99\x43\x40\x46\x1d\x20\x49\x72\x35\x45\xfc\x54\x76\xae\x4d\xd3\xee\x6c\xfb\xc1\xb8\x1b\xb3\x78\x57\x14\xad\x4e\x02\x70\xbd\xca\xdf\xde\x36\xaf\x3e\x0c\xdd\xe9\x4f\x55\x9f\x55\x37\xce\x2f\x3a\xd7\x9f\x77\x56\x6b\x6b\xac\x2e\x6c\xdc\x5d\xfc\xb4\xcc\xd7\x05\x01\x9e\x69\x14\xc0\x73\x7e\x2f\x1a\x09\x8f\x29\x49\xee\x89\x7e\xbd\xe6\x41\x89\xe7\x71\x5e\xbf\x30\x20\x52\x0c\x7c\xe2\xf9\x7a\x76\x57\xf0\x84\xf1\x51\x00\xcf\x57\xe2\x39\xc0\xf0\xbc\xcc\x05\x21\x78\x3c\xcf\xef\x89\x7a\x2b\xb6\x63\xf9\xf2\x34\x9b\xab\x77\x4a\x60\x92\xaf\x4f\xa4\xa2\x41\x88\x0d\x42\x3c\x18\x05\x4a\x7e\x80\x37\xeb\x15\xfc\xfe\xb4\x82\x5f\x20\xaa\xc0\x8b\x8f\x52\x68\x81\x5a\xcb\x5c\xf0\x28\xf3\xc1\xa3\xc8\x09\x0f\x22\xaf\x8a\x44\xb4\x24\xd9\x5a\xc5\x76\xf8\xc2\xcf\x49\xb6\x0e\xf0\x2c\xa5\xb3\xcf\xa3\x60\x26\x6d\xb1\xe6\x37\xa9\x7a\x31\xcf\xd7\x37\xc6\x44\x0b\xe8\xc8\xe6\xc1\xa3\x6c\x1e\x08\x5a\x34\x1b\x05\x4a\xa4\x53\x6f\xf2\x35\x57\xaf\x2e\x84\x0c\xd6\xe8\xfb\x53\x29\x58\x36\x3a\xff\xbd\x78\x0e\x70\xb1\xbe\x59\x52\x3e\x0a\xe4\xdf\x00\x83\x08\x3f\xd2\x92\xbc\x92\x72\x83\x99\x8e\x84\xc3\x92\x5b\x35\x1e\xe2\x51\x0d\x87\x78\x94\x2f\xe4\xb3\x2a\x5e\x3c\xaa\xd2\xc5\xa3\x2a\x5c\x3c\xaa\xb2\xc5\xa3\x98\x1a\xf2\xe5\xc5\xbd\x4c\x99\xaf\xc4\xef\x7c\xa5\x69\xcd\x35\xa5\x79\x50\x62\x96\xe7\xe6\x44\x0c\xc4\x69\x1a\x6c\x3b\x61\xb4\xdd\xb0\x5c\x34\x3f\x4b\x30\xf1\xa2\xe6\x32\x0e\xb7\x69\x80\xd5\xd2\x88\xac\x6f\x47\x30\x81\x20\x83\x52\x12\x95\x4a\x7a\x0b\x86\x12\xf0\x5a\x2c\xa5\xbd\x9c\xbf\x10\x35\xa6\x27\x0d\xf1\x65\x44\x06\x6a\x6b\x17\xac\xa6\x04\x98\x2b\x78\x2d\x29\x61\x3a\xc4\xec\x74\x12\xf9\x77\xe1\x39\x8c\x36\x9b\xa2\x66\x72\x88\xc2\xdc\x78\x78\x1b\xc8\xc6\xe4\x28\x19\xb5\x70\x3d\x09\x42\x12\x83\xed\x3d\x2d\x20\x62\x6f\xa8\x70\x4a\xc4\x31\x4d\xd5\x5e\x53\x39\x99\xcb\x90\x58\x45\x75\x6c\x89\xfc\xc9\x7c\x0e\x76\x17\xde\xac\x78\x2f\x8f\x68\x11\x06\x91\xe7\x1b\xaa\x22\x70\x0a\x16\x1d\x90\x2a\xc2\xe0\x53\x26\x5a\xd2\xe7\x79\x3f\x99\xcf\xfb\x7f\x6e\xe4\xfb\x73\x1f\x2a\x2c\x12\x88\x5e\xea\xab\x43\xb3\x1f\x06\xc3\x30\x8f\x0a\xd5\xb2\xcd\x26\x1f\x1f\x4c\x34\xf7\x80\x86\x01\x8a\xfa\xe7\xc9\x67\xd2\x2f\xd6\x8c\xf4\x1f\xf3\x75\xbf\x20\xbc\x6f\x75\xb3\xa0\xc7\xef\x48\x5f\xcc\xaf\x7e\xce\xfa\x49\x66\x28\x0b\x46\x5a\x7d\x89\x02\x64\xbc\x49\xd6\xe2\x43\x86\xc0\xd3\xc6\x72\x2c\x0c\xd7\x1a\xea\x10\x66\x97\x9a\x80\x61\x8e\xd7\x38\x1b\xaf\x27\x7a\xd6\xa9\xf7\x3e\x1f\x16\xe3\xaa\xfd\x8c\x71\x57\xd3\xd6\x37\x95\x81\xd1\x70\x2d\xe4\x10\xb8\xfd\xc4\x7b\x07\xc6\x17\x08\x10\x3e\x32\x87\x15\x62\x60\xac\x4f\x4b\x4c\xbd\x64\xc1\x99\xe0\x58\xcb\x5d\x61\x30\x4f\x78\xb2\xaf\x46\x4b\x5f\x6d\xd1\xd8\xd8\xbe\x34\x99\x86\x71\x06\x5a\x3d\x60\xf5\x8c\x52\x86\x44\x46\x94\x2b\x70\x12\xe7\xea\x06\xab\x47\xc1\xc3\x55\xf5\xbc\x02\xc6\x05\x24\xdc\x27\x29\x1a\xe6\x11\xe5\x64\x19\x16\xa8\x77\x10\xc7\x71\x0a\x6e\x5a\x95\xaf\x65\xa3\x6e\xfb\x81\x84\x50\xa1\x1a\x9e\x76\x5b\x3d\x53\xa9\x00\x9c\x20\x54\x96\x74\x11\xd2\x4a\xfa\x9a\xc5\x7b\x07\x78\x11\x1f\xbc\x5e\x54\x8e\x44\x8b\x0a\x3f\x97\x8e\x17\x93\xde\xdd\x60\x70\x17\xc1\xe6\x00\xae\xea\x71\xcc\x06\x83\x70\x16\xdf\xa9\xbe\x66\x00\x7a\x30\x33\x2e\x41\x33\x79\x3d\x69\x2e\xf9\xee\xc6\x7c\xa2\x3b\x47\x3c\xe3\x79\xcc\x71\x1d\x53\x41\xaa\x52\xcc\x1a\x97\x9b\x9c\x1c\xc5\xe0\x1c\x0e\x84\x7b\xb9\x93\x54\xa6\xbe\x19\xe5\xd5\x97\x90\xe0\xbd\x43\xf1\x8f\x47\x82\x89\xc0\x80\x34\x93\xd0\x14\xf3\xa8\x98\x31\x42\xb2\x7f\x37\x4f\xbf\x63\x1e\xcd\xc0\xc4\xf5\xdf\xcd\x13\xbc\xe3\x2c\xfd\x85\x3c\x62\x1e\x25\x29\x97\x0f\xc5\x1d\x5d\xa8\x47\xc1\x88\xc9\xa7\x9b\x35\xe7\x79\x06\x4c\x64\x2a\x58\x11\xa9\xe7\x6f\x33\x7c\x61\xe6\x4e\x57\x2b\xff\xb9\x8e\x56\xe8\x18\xa9\xc8\x08\xb3\xcb\xd8\xb3\xf3\x8f\x73\x37\x60\x53\x25\x39\x9b\xc0\x87\x2c\x26\x6e\x75\x5e\xf3\xc1\x00\x82\xc9\x44\x59\x3e\x27\x62\x73\x1a\x0c\xb4\x7f\x22\xdb\x6c\x98\xc4\x6b\xde\x0b\x0f\xf0\x2c\x52\xd8\x73\x05\x0a\xc5\xfa\x45\xaf\x91\x77\xbd\x71\x74\x94\x85\x1c\xaf\xc2\x39\x26\x08\x8d\x20\x18\xf9\xf6\xc5\x33\x18\xd0\x2a\x03\xae\xc4\xf7\x0f\xf9\x9c\x94\x3d\x22\xb6\x5d\x18\x3b\x0d\x68\x11\xe6\x78\x29\xf5\x87\x30\x1d\xee\xbd\x7d\xc1\x27\x1e\xb0\x13\xdd\x0f\xbd\x79\x2e\xb6\x9f\x96\xfa\x4b\xe4\x0e\xd1\x2b\x19\x80\xe7\xca\x90\x73\x40\x5e\x05\x42\x0f\x01\x91\xbd\xae\x81\xac\x7c\x36\xf7\xa4\x7f\xa6\xe4\xcc\xde\x80\xda\x52\xfa\x68\x96\xfa\x7c\xf1\x22\x1a\xd8\x3d\x35\x18\x74\xea\x39\xa8\x26\x95\xd5\x94\x5e\xa0\xb5\xfe\x93\x98\x18\x8d\x51\x46\xde\x8e\xe5\xf8\x1e\x95\xb2\x8e\x24\xca\xb3\x90\x0f\xd5\x71\x16\x60\x7d\xae\x49\x8f\x95\x66\xd7\xfa\xfb\x12\x54\x8d\x99\xb5\xfd\x72\x08\x0d\xca\x6b\xdb\x6f\x78\x80\x53\x4b\x7e\x44\x10\x1e\x54\xf4\x71\xad\x0e\xe3\x46\x1f\x4c\x7c\x75\x21\x91\x92\x7a\xe5\x1c\xb7\x37\xda\x4c\xec\xae\x80\x86\xe9\x14\x68\x36\x5c\xe9\xea\xc9\x1d\x57\x4f\x65\xca\x21\xf7\x5d\x0a\x4c\x0a\x00\xf9\x48\x8c\xcc\x28\x4d\x0a\x7e\xb6\x65\xff\xc5\x07\x0a\x48\x24\xd9\x7a\x46\xe4\x6a\xef\x95\x16\x1d\xb5\x6d\x14\x02\x3e\x55\xd1\x41\x12\xb1\xa7\x27\x66\x5f\x25\x08\x67\x12\xbf\x20\x81\x50\x3f\x10\x02\xbf\xa1\x3b\x01\x14\x39\x69\x83\xb1\x9d\x03\x23\xd6\x3c\x39\xe2\x6d\x0c\x95\x5e\x27\x1d\x8f\x6d\x17\xa5\xa9\xb9\x60\x11\x51\x10\xa1\xee\x8c\x64\x3e\x16\x77\xcc\x26\x92\x53\x73\x59\x34\x8e\xa2\x7c\xb1\x08\xab\xe9\xf2\x97\xbf\x58\xf8\xa9\x16\xf7\x27\x0b\xf2\x73\x71\xbb\xef\xbb\x4b\xac\x7d\x36\x9b\x9a\xb1\x20\xac\x59\x3f\xa3\xc0\x55\xa9\xcf\x3b\x6b\x0f\xb4\xc0\xfd\x75\x51\x8b\xb7\x6a\xca\xbb\x89\xc9\x35\xb1\x58\xc2\x27\x56\x2d\x22\xb5\x91\x76\x2f\xc4\xf7\x32\xef\xf4\xd8\x93\xbb\xd1\xe9\x87\x5f\xa3\x69\xf3\x7b\xaf\x41\x33\xc7\x3e\x3a\x83\x01\x33\xfa\xcf\x90\xc6\x55\x8c\x5c\xba\x84\x1e\x53\x54\xf0\x5e\x3e\x18\xd0\x23\x2a\x17\x95\xd8\xf5\xc4\xb6\x5d\xff\x2d\xd7\xee\x35\x4b\xb2\x62\x41\x58\x80\x46\xe3\xc0\xc8\x83\x01\x56\xf2\x5f\x60\x04\x40\xf5\x9c\x4a\x59\x2f\xd0\xc2\x1e\x3c\x42\xec\x28\x25\xde\x05\x93\x26\xa6\x07\x41\x4f\xba\xf0\x05\xfd\xf2\x73\x9e\x7f\x2e\xc6\x64\x12\x3f\xad\x58\xbe\x2a\x44\xb9\x76\x45\x26\x65\x89\x46\xcd\x0e\x89\xf7\x54\x90\xb0\x24\xce\x75\x04\x04\x7b\x58\x3a\xdc\x81\xed\xd4\xbc\x3c\x2b\x8e\xfb\xae\x99\xf8\x42\x15\x4d\xab\x52\xc6\xe3\x1d\x4c\xba\xeb\xe6\xea\x3e\x81\xbb\x9b\x2a\x51\x05\x5f\x00\x51\x47\xa2\x62\x95\x52\x1e\x06\xaf\x02\x84\x59\xcc\xc7\xfa\x74\xd9\x3f\x34\x98\x50\xce\xcb\x38\x98\x06\x43\x86\x79\xf4\xd7\x9c\x66\x90\xad\xf4\x35\x5b\x41\x8c\xb9\x30\x53\x0d\x88\x4b\x19\x84\x55\x6c\xd4\x1a\x43\x4b\x86\xd7\xb1\x44\x52\x83\x57\x19\x06\x06\x86\xb4\xff\x90\x14\xfd\x2c\xe7\xfd\x45\xbe\xce\xe6\xfd\x87\x3b\x92\xf5\x45\x9f\xd1\xec\xb6\xbf\x5e\xf5\x93\x3e\xf4\x68\x5f\x9b\xa3\x46\xfd\xeb\x3b\x5a\xf4\x69\xd1\x5f\xe6\x05\xef\xa7\xf4\x33\x49\x1f\xfb\xf3\x35\x48\xb7\xcb\x24\x5b\x27\x69\xfa\xa8\xee\x9b\x38\x4d\xb8\x20\x93\x64\x7d\x09\xfc\x2a\x78\x85\xa8\x7f\x45\xc8\xa8\x7f\xc7\xf9\x6a\xf4\xea\xd5\x2d\xe5\x11\xcd\x5f\x9d\xfe\xf2\x71\x95\x1d\xdb\x7b\xb8\xb2\x6e\xad\xcc\x60\x83\x21\x47\x9b\x8d\xf7\x43\x86\xca\x90\x63\x31\x10\x56\x00\x04\x5a\x62\x62\x19\xa2\x7b\x10\xdb\xf8\xff\x1b\x7b\x06\x78\xc5\x4b\x69\xab\x2d\xb9\x51\xa7\x27\x04\x4b\xb5\xd9\x6c\x4f\x04\x26\x04\x1d\x57\x4f\x3b\xb6\xe3\x33\xc0\xa8\x9f\xb5\x94\xd4\xf1\x1a\xec\x01\xee\x89\xd4\x75\x0c\x06\xa4\xba\x25\x39\xb2\x9e\xe5\x5d\x9d\xb9\x31\x01\xa0\x46\xc7\xe3\xd3\x2b\x1a\x68\x21\x4e\x4c\x27\x25\xc5\x89\x47\x29\xe4\x89\x27\x2d\xf8\x09\x21\xea\xe1\x8e\xce\xee\x7e\x3c\xd4\x38\x61\x42\x46\x82\x00\x2c\xbb\x3c\xa7\x3c\xdb\xd6\x9f\xd5\x4d\x6e\xbf\x10\x59\xfa\x15\xb3\xda\x5f\x26\x62\x66\x70\x96\xcf\xd7\x33\xd2\x9f\xb1\xbc\x28\xf6\x0b\xca\x49\x5f\x02\x3a\x89\x3c\xf7\xeb\x34\x13\xb2\x21\x4d\x29\xa7\xa4\x78\xdd\x5f\xa5\x24\x11\xec\x7b\x06\xea\x1f\x7e\x97\xf0\x3e\xf0\x95\x45\xff\x86\x88\x0c\x37\x30\x6b\x13\x46\xfa\x2b\x10\x3d\xd3\xc7\xbe\xb4\xad\x99\x47\xfd\x77\x39\x53\x18\x25\xd9\x22\x67\x4b\xa8\x37\xee\xd3\x6c\x96\xae\xa1\x82\x77\xf9\x83\x98\xb5\xca\x7e\x0b\xb8\xb8\xfe\x43\xc2\x32\x9a\xdd\xe2\x7e\x41\x08\x4c\xd2\x62\xf4\xea\x15\x8c\xf8\x5f\x8b\x68\x96\x2f\x5f\x59\x27\x4a\xf1\xea\xfe\x30\xfa\xf2\xea\x7f\xf0\x7c\x36\xbd\x91\x8d\xde\x87\x46\xef\x57\x8d\x8e\xfa\x57\xb2\x1b\x16\x0b\x32\xe3\x64\x3e\xea\x07\x7f\x1e\x92\xe1\x9f\x83\x3f\x2b\xb4\x3c\xe3\x16\xea\x1d\x44\xbd\x0f\xb8\xde\x0b\xa3\x65\x42\x33\xd8\x7d\x2b\x18\x3e\x37\xce\x9f\xf7\x90\x56\x0a\xd2\x31\x99\xf4\x94\x48\x9c\x59\x37\xcb\x82\xfb\x00\xa6\x3b\x43\xa5\x0a\xbf\x63\x5c\x3f\x01\x12\xd2\x95\x86\x7c\x07\x16\x55\x30\x15\x9b\x8d\xc6\x28\x74\xbd\x2f\x7d\x79\xf2\x46\x9e\xa2\xad\x1c\xd8\xd2\x1c\x70\xc0\xa2\x8d\xbc\x48\x9a\x3b\x49\xeb\xfe\x8d\xee\x4d\x60\x15\xd7\xc7\xa4\x6d\xab\x77\xee\xa6\x75\xcc\x77\x1b\x63\xc8\x8c\x09\x92\x09\x70\xb5\x7d\x4c\xf5\x70\xae\x25\x02\x1a\x96\xe1\x06\xad\x12\x0a\x4c\x1c\xeb\x5f\xaf\x42\x29\xd1\x00\x60\xc6\x76\x9d\x0d\x06\x21\x8b\x01\x58\xa8\x07\xe6\xc3\xd2\x8e\x41\xae\xf1\x54\xc8\x40\x56\x19\xeb\x6a\xe4\xa4\xcb\x37\x80\x92\xab\x37\x97\x10\x28\x78\x56\xbd\xb0\x1c\xb6\x7d\x03\x3c\x13\x6d\x16\xbd\x54\x25\x0b\x51\x59\x2b\xc1\x71\xbf\xde\x46\xa5\x99\x5a\x12\x5b\x82\x7c\xd2\xe2\x08\xb0\x50\x30\x6c\x7a\x2a\x28\xc5\x4f\xf3\xb4\xac\x40\xc7\x2b\xed\x50\x25\x70\xa9\x37\x21\x97\xf2\xf5\x6b\x57\x35\xf1\x1a\xd1\x45\xc8\x2d\x1c\x2c\xa3\x25\x90\xb0\x8b\x24\x3d\x57\x75\x74\xd0\xbb\x6d\xa4\xb7\xbc\x81\xe6\x93\xf8\x31\xd3\x0a\x0b\x28\x90\x3c\xf4\xaf\x88\xb1\xa1\x48\xcc\xa4\xc7\xbc\xb4\xcc\x74\xac\xc9\x31\x9e\xe0\xac\x9a\x21\x0e\x44\x9c\x0e\x2c\xba\x63\xf7\xd8\xcb\x36\x9b\x2c\xb2\xc3\xed\x38\xbf\xc9\x7c\xb3\x71\xf7\x12\x53\x91\xd4\x66\x6f\x1d\x7b\x11\x39\xd1\x1c\x8c\xa4\x59\xd5\xca\x54\x86\x73\xac\x29\x4a\x2f\xa5\x05\x69\xcf\x76\x94\x86\x5b\xae\x37\x64\x91\x33\x12\x0a\x79\x84\x15\x30\x3a\x08\x4b\x47\xed\x6c\x7e\xbc\x00\xf3\x30\xd0\x73\xa8\x2f\xa5\x84\x62\xb4\x30\xce\xcc\x15\x8c\xda\x01\x06\x83\x50\x3d\x59\x58\x47\x6a\xce\x6d\x36\xad\x9f\xae\xcc\xa5\x86\x27\x49\xfe\xf7\xf3\x0e\xa9\x8a\x0e\x89\xf2\x0e\x69\x1e\xc8\xcd\x67\xca\x6b\x09\x85\x28\x5f\xcd\xcb\xc5\x6e\x86\xa9\x0d\x4e\xe4\xb9\x96\x09\x46\x16\x97\x8b\x40\x2c\xae\xca\xeb\x2c\x64\xc0\xe5\xab\x61\x7d\x92\x4e\x64\x23\x12\x19\x6f\x32\x95\x00\x57\x6e\x68\xb4\xf4\xcb\x14\x4e\x19\x7a\xe3\x35\xd9\xf6\xe5\x1b\xbd\xf5\xca\x98\x76\x61\x16\x15\x10\x0e\x4a\xcc\x69\x13\x5b\x08\x19\xbd\x19\x04\xa6\x16\x74\xa5\x33\x92\x21\xb6\xd9\xe4\xaa\x86\x7a\xcb\xc8\x0d\xb8\xb2\xcc\xd3\x85\x23\x6d\x80\xe9\x74\xf3\xfc\xeb\x82\xd0\x23\x4d\x2a\x5f\xec\x13\x53\x8b\x49\xa1\xaf\xff\x79\x04\x2a\x22\x32\xc7\x3c\x92\xba\x3f\xa5\xd6\xc2\x4f\xb4\x10\xfb\xfb\x68\xef\x00\x2b\x73\xce\x91\x11\x40\x1a\xf7\xc0\xc6\x4a\x7c\xb7\x31\x94\x34\x05\x0d\x56\x8c\x48\xd3\xaa\xc0\x63\x24\xe5\x58\x91\x46\x26\x29\xde\x73\x0c\xc5\x2c\xd1\x48\xdd\x61\x9e\x24\x99\x90\x85\x2a\xf9\x85\xf4\x93\xbe\x19\xe2\xfe\x03\xe5\x77\xf9\x9a\xf7\x93\xbe\xd9\xba\xfa\x1f\x9b\x1c\xea\x63\xbe\x06\x96\x14\x76\x29\xc1\x69\xca\x70\xa4\xc3\x00\x08\xf4\x13\xc5\xab\xf6\x4d\xf4\x9b\x57\x9a\x0b\x88\x02\x54\x5a\x86\x5a\xda\x2a\x4b\xf0\xe0\x4b\xd0\xd7\xf3\x84\xa6\xae\xa5\xb6\xd9\x4d\x25\x3a\x9b\x32\xbe\x32\xb8\x83\xd5\x79\x07\xc1\x38\x54\xc7\x34\x82\x74\x60\x02\x17\x48\x32\xde\x18\x29\xb1\x32\x7e\xee\xea\x55\xc8\xfc\x5e\x85\x59\x7c\xf8\x3a\xfb\x81\x03\x48\x32\x1b\x67\xae\x9f\x5a\x36\xe9\xed\x1c\x72\x75\x48\x82\x67\x80\xf4\x25\xf0\xdc\x34\x50\x64\xf8\x4f\x8b\x08\x03\xa3\x32\x5f\x5f\xb5\x04\x92\x1d\x93\x89\x8a\xf0\xaa\xec\x11\xa4\x15\x7a\x66\x07\x6a\x0c\xd5\xa4\x56\x31\x8d\xe1\x02\x4b\x1f\xe4\xcf\xf3\x0a\x72\xd6\x64\x67\x64\x31\x3b\xd7\xab\x15\x23\x53\xa6\x96\x40\xf7\x5c\x77\x49\xa1\x5d\x04\x9e\x93\x8d\x66\xd3\x79\xbe\x7c\x4e\x8e\x79\x15\x8c\xef\xe5\x1e\x48\xae\x77\xd8\x93\x59\xc9\x23\x6e\x6d\x25\x6f\x2f\xce\x47\x06\x70\x43\x0c\xba\x36\x3a\xa9\xf6\x9b\xaa\x32\xa3\x0a\x3e\xc3\x89\xc0\xf5\xbc\x21\x7b\xa5\xf2\x79\x87\xce\xa7\x5b\xeb\x66\x54\xff\xe4\xf5\xfa\x43\x4f\xd5\x46\xc5\x2b\x1d\xce\xef\xf9\xba\x3f\x4b\xb2\x3f\xf3\xbe\xa0\x6c\xe5\xec\xe7\x6b\x5e\xd0\x39\xe9\xc3\xcc\x26\x6a\xb3\x12\x1b\x91\x8a\xfd\x15\xb4\x19\x5c\x5a\xd8\xc4\x5e\x3b\x63\xef\x4d\x4c\x69\x05\xd4\x50\x03\xc5\x9e\xe9\x89\xd8\x36\x71\x3a\xc6\xdb\x90\x1d\xfe\xac\xb9\x29\x47\xef\xa5\x31\x77\x74\x0c\x25\x6d\x53\x54\xcd\xbe\xdd\x23\xc8\x7c\x23\x28\x04\x14\x77\x08\x33\xa5\x7b\x53\x8a\x8e\xb9\x89\x9f\x89\xfc\x43\xd3\xa5\x00\x9d\x6f\x2b\xf5\x12\xe1\xfa\xba\xa3\x5f\xb3\x52\x9c\x0d\xa7\xdb\x78\x3e\x63\xf9\xe9\x2c\x6c\x9d\xa5\x79\x6e\xa1\x1b\x56\xa7\xa6\x54\xff\xbf\x7c\x0f\xaa\x0f\x76\xb5\xab\x3c\x35\x07\x02\x82\xa1\x1b\xee\xc0\x58\xdf\x13\xdf\x25\x66\x3d\x2d\x5c\xe3\x91\x2d\xc6\xd0\x82\x5b\x53\x0b\x94\xa8\xb8\x1b\xe0\xf5\x44\xa3\x45\x9a\xdc\xde\x92\xf9\x99\x69\x34\x0a\x03\xe8\x44\x79\x6d\x1b\x05\x43\x8e\xa5\xa5\xe6\x88\x61\xd1\x93\x23\x52\x62\x9f\x43\x72\x06\x6a\x7a\x14\x12\x88\x29\x01\x4c\x80\x44\xbe\x95\x46\xfc\xb5\x89\x91\xa3\xe7\xdd\xd1\x78\x8f\x94\x67\xf9\xd7\x7c\x8b\xd5\x6f\xcf\xc8\xaf\x9a\x16\x8e\x5d\x21\xad\xa6\x85\xb4\xa9\x6c\x1d\x67\x79\x57\x2e\x15\x48\x5f\x28\x6f\x4b\xb8\xce\xec\xa4\xdf\xba\xf7\x6d\xee\xe1\x45\xec\x47\x63\x09\x56\x43\xf3\x32\x19\xa3\xde\xa1\xbc\x0a\xf2\x46\x6b\x2d\xcf\xda\x7d\xb0\xad\xfb\xef\x57\xb7\x69\x7e\x93\xa4\xc5\x3e\x23\x45\x9e\xde\xd7\x5b\x2a\xef\xcb\xdb\x03\xbb\xbd\xd4\xb3\xcb\x84\xc2\xea\x20\xaf\xd9\xb5\x85\x1e\x4e\x52\x3a\x4f\x38\xd9\x17\x8c\xa9\x97\xc4\x6d\x4a\x97\xcb\x1d\x70\x9c\x5d\xfa\xbb\x35\xa6\xe0\x57\x46\x9e\xc5\x54\x69\x67\x62\xaf\x73\x95\xfc\x56\x05\x29\xc4\x1c\x95\x4a\xd5\xe5\x09\x56\x9b\x34\x82\xd5\x4a\x06\x7d\x95\xb0\x02\xa2\xaf\x4a\xec\x60\x98\x39\x0d\xd0\x9d\x12\x27\x51\x96\xb3\x25\xb8\x95\xfb\xef\x48\xe4\x4d\xe6\x48\xdd\x64\x1e\x4c\x70\x16\xf3\xb1\xb9\xc7\x34\xf7\x49\xc1\x5e\x1c\xb3\x23\x36\x0c\x46\xc1\x50\xc8\x03\xe0\x03\x1e\xbe\x0a\xff\x88\x36\xd3\xcd\x3e\x8a\x5e\xdd\x62\xaf\x48\x36\xbb\x4b\xd8\x31\x0f\x0f\x51\xc4\xf3\x4f\xab\x15\x61\x27\x49\x41\x42\x54\x22\xb1\xfb\x26\x91\x9a\x96\xcd\xaa\x69\xcf\x48\xd3\x4c\xb0\x89\x89\x99\xce\x21\x43\x27\x8b\x0f\x76\x6c\x82\x71\xa6\xe0\x4d\xe4\x73\xc8\x10\xc2\xe2\xa7\x92\x6a\x54\xde\x0b\x7e\x47\x98\xf8\x06\x46\xce\xb6\xbd\x09\x66\x00\xf1\x9c\x54\xc5\xb6\x62\x56\xd7\x06\x00\x44\xa7\xb0\xe5\x4b\x5c\x7b\x0f\xe1\x30\x70\x62\xbd\xe9\x38\x36\x14\xc6\x06\x27\x31\xc5\x85\x89\x0c\x6c\x87\x1f\x96\x51\xa0\x11\x5e\xc7\x89\x6b\xc6\xf4\x2a\x40\x38\x8d\xc1\xca\x69\x7d\x94\x44\x45\x4a\x67\x24\x3c\xc0\x6b\x04\x02\x36\x88\x95\xce\x50\x0f\x06\x32\xad\xac\xcd\x2c\x4e\xac\x3b\xef\x5e\x12\xcf\xc6\x33\xeb\xce\x5b\x2a\x0f\x21\x04\x76\x85\x62\x80\xc2\x99\x29\x66\xff\x10\xa9\xbb\xef\x28\x40\xa8\xa7\xea\xee\x84\xd9\x45\xe1\x42\x86\xb5\xb8\x8b\x03\xd0\x46\x49\x20\xfe\x73\xf1\x38\x92\xa4\x85\xf8\x49\x17\x8f\x48\xf0\xd6\x74\x11\xee\x25\x9b\xcd\x1e\xf3\x5b\x62\x9f\x65\xb0\x8d\xf4\x75\xd4\xcc\x51\xff\x3f\x21\xf2\xd7\x7f\xe2\xfe\x72\x5d\xf0\xfe\x8d\x91\x0c\x16\x39\x5b\xf6\xff\x53\xac\xb8\x91\xe8\xc0\xff\xec\x9b\x1b\x88\x27\x93\x99\x60\xf8\xce\xb0\x7e\xf3\x9b\xd4\x82\x80\x77\x26\xc5\x73\xca\x44\xd6\x51\x8a\xe1\x4f\x02\x56\xff\xa3\x02\x37\xa6\xea\x28\x50\xaf\x82\xe1\x5d\x29\x26\x80\x1b\x66\xcb\x8b\xbf\xe3\x5b\x08\x8d\xc5\x19\xc7\x31\x83\x18\x8f\x47\xe6\x5d\x3f\xe1\xfd\x60\xc8\x22\x4f\x95\xab\xe5\xfb\x87\x58\xb7\x62\x48\x47\x21\x17\x6b\x2b\xcf\xf9\x30\x88\x82\x61\xbd\xbf\x41\x0b\x88\xea\xf9\x02\x04\xb1\xad\x49\x0a\x33\x06\xca\x17\xab\x6f\x18\x37\xb2\x43\x28\x52\x04\x97\x0f\x09\xc4\xd7\xba\x6e\x04\xd5\xb6\x37\x0d\x2b\x66\x04\x4e\xa2\x75\x41\x2e\xf3\x35\x27\xec\x43\xb2\xac\x67\x09\x6e\x92\x82\xce\x02\x30\xce\x84\x90\x17\xf2\x4f\x1c\x04\x23\xf5\x24\xff\xd4\xab\x3e\x0d\x90\xb5\xfd\x5c\xab\x3e\xf3\xae\xc2\x6e\x1d\xd8\x33\xec\x23\x44\xbd\xd3\x14\x91\xe6\x4f\x6b\x6f\xa1\x87\xe6\x64\x96\x2c\x89\x5c\x2b\x1c\xd9\x15\x6a\xbb\x5e\x84\x99\x50\xeb\x8f\x50\x23\x5a\x38\xbb\x1b\xb1\xc9\x9d\xe4\x19\x67\x79\x9a\x12\xf6\x0d\x89\x42\xf2\x6f\x48\xef\x5c\xcc\x24\x5f\x3c\x43\x77\x32\xc9\xf1\xb4\xfa\x5b\xed\x81\x04\x66\xaf\x9a\x62\x8a\xe4\xcf\x24\x5d\x6d\x69\x73\x7b\x5d\xe0\x55\xe7\xba\xd4\x97\x8b\x0c\xb7\xda\xad\x8a\x62\x7f\xeb\x52\x50\x07\x8a\x9f\xb3\xfc\x21\x7b\x97\x33\x31\x43\x5b\xcc\xc6\xb7\x1d\x19\xb4\x51\xa8\x60\xb7\xc5\xbe\x2a\x03\x8f\x86\x74\x18\xfc\x29\x40\xb8\x68\xe1\x35\xf0\x3a\x76\x6f\xe0\x71\x1a\x1f\xbc\x4e\x7f\x58\x6b\xd3\xdb\x54\x9b\xde\xce\xe2\xf5\x38\x05\x55\x66\x22\xa3\x83\xcc\x10\x2a\xc6\x0a\x8a\x2b\xc9\x0a\xb1\x44\xae\x73\xa3\x9b\x7d\xb7\x4e\xd3\x0c\x36\x3e\x3c\x43\x93\x78\xef\x40\x5f\x2a\x14\xa2\xd5\xdb\x72\x78\x6f\x86\x9b\xad\xcc\x62\x6e\x9d\x54\x7f\x61\x3a\x42\xa2\xb1\x52\x02\xae\x47\x2e\xd9\xa4\x10\xec\x9e\x58\xb1\x99\x0c\x66\x9f\x28\x67\x40\x84\x67\x71\xda\xea\xe3\x6a\x33\xb9\x9d\x42\x29\xd4\x6c\x6d\xea\x4c\x72\x9a\xfc\xfd\x71\x9a\xe6\xc9\xbc\x3d\x89\x6d\x05\xbb\x53\xc9\xb3\x0d\x73\xfa\x42\x56\xa5\x23\x8e\xbc\xce\xb0\x0b\x05\xfa\x79\x54\x8b\x2e\x54\xf3\xec\x3d\xf4\x48\x47\x4c\x64\x99\x7c\x2b\x45\xb6\x86\x34\x60\xd0\xd9\x99\xae\x9d\x69\x2b\x75\x18\xc0\xce\x10\xfd\x2c\x52\xe9\xb7\xd2\x34\x22\xe9\xb3\x31\x9a\xb7\xcc\x57\x15\x5c\xf9\xf9\xaa\xab\x76\x27\xe6\x67\x01\x7e\x58\x8a\x8e\xec\x96\x66\xc4\xaa\xd2\x0b\xc4\xc3\x2e\xa2\x61\x11\x1b\x28\x68\xe3\xe5\x6b\xf5\x89\xbc\x95\x9a\xad\x0b\x9e\x2f\x15\x06\x14\xbc\xb1\xdd\x3d\xbf\x06\x4e\xc0\x2a\x2a\x9a\x3e\x24\x7c\x76\x77\xa6\x5a\xac\x3c\x30\xd4\xf9\xa5\x74\x23\x81\x6d\xf2\xbe\xaf\x3b\x47\x5e\xea\x4a\x38\xa1\x27\xeb\x3e\x6f\xb4\x77\x58\xa2\x12\x4f\x6f\xf2\x9c\x5f\x3d\x66\x33\xdf\x5d\x9a\xac\xa7\x48\x41\xe6\x47\xe2\xc7\x28\x24\x70\x16\xac\xcd\x49\x0e\xae\x80\xca\xf8\xf0\x11\x6c\x32\x23\xab\xf9\x47\xb2\x86\xd5\x8b\xd8\xf9\x3c\x6a\x7c\x6e\xb4\xdb\xfa\x08\x01\x69\xe5\x6b\x10\xd9\x58\xe5\x97\x1a\x31\xe0\x32\x70\xa0\x13\x04\x56\x62\x4f\x6f\xb2\x75\xa6\xbb\xb2\x0a\xfb\xcf\x0a\xd5\xad\x26\xe6\x73\x32\xe3\xf4\x9e\xd8\xce\x90\x35\x37\x00\xe3\xaa\x2b\xfb\x28\xde\x93\xa1\x7d\xb4\x8b\xa4\xee\x97\x26\x50\x94\x85\xa8\x52\xeb\x42\x49\x6f\xaa\x2f\x42\xa7\x53\x80\x8b\x92\xed\x93\x06\x90\xb3\x7c\xb9\x5a\x73\x32\x47\x2d\x31\x1a\xcd\xfd\xbe\xca\x24\x6f\xf5\x4b\xc1\xb8\x27\xf3\x8b\x2c\x7d\x0c\x11\x9e\xd3\xf9\x89\x34\x1d\x51\x66\x77\x35\xdd\x9b\x83\x1c\x62\x0f\x82\x68\x1a\x4f\x18\x17\x6c\x5d\xcd\x55\xc2\x1a\x88\xc8\x4e\x63\x3a\x69\x4e\xe7\x57\xd0\x56\x48\x23\x8e\x70\xd5\x4d\xb2\x9e\x8d\x05\xe2\xa6\x37\x82\x75\x83\x0c\x76\x4a\xae\x3e\x85\x15\x9e\xc6\xa7\xcb\xf7\xad\x13\xdc\xc9\xe1\xd0\x32\x79\x81\x2f\xf4\x4d\x80\x86\x23\x4e\xec\x8c\x40\x1d\x2a\x42\x1b\x2c\x66\x35\xc4\x54\x7b\x72\xe2\xc0\xde\x51\x34\x4b\xe6\xc0\xab\xd6\x12\x34\x35\xf3\x19\xa6\x96\x75\x35\x54\x3c\xcc\x71\x63\x2c\x31\x29\xc5\x91\xe0\x74\x4e\x8d\x39\x96\x1d\xb1\x66\x69\x89\xef\x69\x51\xd3\xd1\x56\xf8\x3d\xbd\x66\x4f\xf6\x6c\x3f\xf4\xa9\xb9\x7b\x9f\x4e\x2b\xc3\x3f\x6b\xdb\xd7\x3d\x23\xef\xb8\xf5\x7a\xce\x63\xdf\x69\x95\x83\x90\x5c\x44\xc5\x5d\xbe\x4e\xe7\xf2\x1e\x54\x62\x95\x48\x3d\xee\x15\xe1\x1c\x5c\xc9\x51\xc4\xef\x48\xe6\x5b\x26\x25\x1a\xf1\x12\x17\x75\x18\x14\x12\x81\x0e\x5d\x69\x13\xd4\x2f\x50\x8b\x5c\x1b\x50\xaf\xe3\x9b\x9c\x71\x32\xaf\xa4\xcd\xc1\x80\x46\x53\x59\xe1\x73\x3a\x63\x79\x4a\x6f\x22\xb9\x73\x54\x99\xaa\x9b\xf9\x5d\x29\x65\x95\x73\x5c\xa0\x1e\xd4\x62\x5b\xc9\x47\x95\xc5\x06\x89\x96\xd2\x12\x19\x54\x6a\x6b\x6b\xca\x50\x6b\x57\xac\xcc\x2a\xc5\x58\xc9\x89\x8d\xa9\x35\xcf\x41\x40\x15\x0f\x08\x55\x15\x71\xb0\x75\xbe\xf6\x1c\x5b\x67\x9e\x93\xac\x2c\x51\xaf\x70\xed\x0b\xda\x37\x50\xbf\xe9\x45\xc7\xf8\xf6\x4f\x65\x8f\x47\x3c\x3f\xad\x66\x9e\xd8\x57\xd4\xa1\xc6\x11\x9c\x5f\xd5\x81\xda\x98\xa0\xb8\x96\x39\x44\xcd\x43\xd5\x21\x51\x10\x76\x4f\x67\x64\xb4\xaf\x4d\xf6\x04\x09\xfd\xec\xc9\xeb\xd8\x5d\x00\x8a\x8f\x5c\x48\xeb\x96\xa0\x7e\x7a\xdb\x69\x74\xc7\x81\xb7\x3b\x0e\xec\xee\x38\x90\xdd\x21\x4a\x94\x6e\x48\x31\xd5\xae\x55\xf0\xd2\x39\x05\xc1\xb7\xbe\x78\x7b\x71\xae\xaa\x28\x97\x9a\x10\xd7\x63\x62\xff\xc2\x96\xed\x28\x2d\xde\x48\x06\xef\x48\xd1\x53\x3f\xe3\x37\x32\x6a\x68\x68\x25\x51\x28\xcc\x55\x1a\xb7\x3c\xf3\x5e\x1f\x03\xaa\xc6\xc0\x5f\x79\x6a\xbb\x77\x88\xd5\x4e\x2c\x27\x5e\x1c\x64\x79\x26\x04\x5c\xab\x7a\xce\xfe\x21\x37\x30\xeb\x8d\x55\x49\xfb\xb5\xaa\xa7\x93\x52\x1f\x41\xf6\xcb\xce\xf5\x14\xf3\x45\x4f\x08\x59\x0b\xfd\x2b\xae\x3e\x8c\xdc\x0f\x3e\x0b\x4d\x43\xc3\xe4\x81\x32\x1d\x86\x4b\x07\x37\x6c\xe5\xc8\x9c\xfe\xb1\xb8\x2d\xb7\x2f\x6d\xde\xca\x4a\x2f\x9b\xaa\x53\xab\x86\xeb\xd7\xc8\x9d\x18\x0e\x7f\x15\x7a\x3a\xc6\x9e\x22\xd6\x7b\x64\x70\x06\x88\x13\x6d\xd3\x5a\x93\x71\xe3\x4c\x6e\x1c\x8f\xd6\xe1\x28\x27\x59\xec\x4e\xb2\x3a\x0b\x18\x37\x2b\x88\x9d\x59\x1f\xd7\x17\x05\x26\xfa\x98\x32\xa6\x64\xa4\x0c\x11\x4e\xe3\xc2\x92\x35\xd2\x12\xf5\xfc\xe2\x56\x5d\x76\x7f\x31\xf8\xe2\x57\x7a\x92\x3a\x17\x7a\x0d\xdb\x82\x76\x21\xaf\x83\xaa\xe2\xab\xc1\xac\x98\xe4\x2f\xfd\x85\x36\x85\x43\x29\x35\x7a\x29\x19\xee\x64\xab\x28\xf9\x95\x38\x54\x2d\x51\x01\xcd\x66\x7e\x1f\xa2\x27\x90\x0b\xfa\x75\x95\x95\x3c\xa3\x88\x56\x4f\x21\x6b\xfa\xb2\xe4\x21\xe6\x62\x6a\x8d\x83\xfd\x9b\xf5\xec\x33\xe1\xfb\xb3\x64\x76\xa7\xc4\xbe\x49\x65\xd7\xee\xe1\xa4\x60\x4e\x7a\x05\xdf\x47\xb1\x7f\xde\xc6\x77\x0d\xe9\xd7\x83\x64\x44\x6a\x1c\x71\x8b\x50\x9c\xac\x79\x2e\xa4\x24\x30\x83\x55\xf7\xd1\x62\xa1\xc0\x6f\x6b\xe0\x34\x63\x50\x7c\x95\xe8\xfc\x27\xbd\xfd\xfe\x29\x4e\xcd\x06\xf4\xb8\xd9\x84\x8f\x62\xb3\x5e\x7a\x9d\x8e\x33\xe3\x74\xbc\x97\xd6\xfc\x72\x07\x83\x24\x4a\xe9\x0d\x4b\x18\x25\x95\xc4\x7d\x92\x33\xf2\x1e\xde\x3e\x86\x26\x86\x23\x40\x10\xa8\x12\x43\x14\x49\x2f\x5c\x84\xcc\xa9\x99\xcc\x69\x46\x8a\xe2\x2d\x59\x10\xc6\x92\xb4\x88\x0f\x6b\x22\xa4\xfe\xed\xeb\x13\xed\xe5\xa0\xf8\x2a\xd5\xa5\x6a\xf3\xb1\x3a\xd5\xec\x9e\x4e\x3a\x5d\x09\x2b\xa1\x92\x6d\xa7\x2b\x46\x56\x09\x23\xef\x72\xf6\x53\xf5\x51\x4b\x43\x3a\xbf\x4a\xfc\x90\x50\xfe\x2e\x67\x6f\x2f\xce\x2f\x49\x32\x7f\x0c\x01\x18\x9b\xa6\x73\x5d\xcb\xa6\x4c\xf4\x72\xe6\xc4\xcc\xf3\x9b\xa4\x20\x6a\x27\xb5\xf9\x49\xf9\xca\x84\x64\xd2\xe8\x58\x80\x9c\xed\xf0\x99\x1e\x7c\x68\x5f\x07\xab\x88\xe2\x25\xae\xf3\xa9\xed\xea\x11\x2f\x19\xcb\x35\xca\xdf\xb7\x8d\x39\xad\xa4\xd9\xd0\xfa\xb1\xd9\xcc\xd4\x13\xd2\x0b\xd0\xe8\x1b\x44\x87\xbf\x35\xdb\x90\xe1\xa6\x41\xa3\xe3\xff\xd6\x22\xaa\x3a\x43\x17\x22\x65\x8a\x3c\x9d\x37\xf2\x4f\xa7\x3a\x5e\xb4\x23\xcd\x09\xee\xcf\xfe\x5d\xe2\xda\xfc\xb0\xcb\xdd\xd3\x8b\x53\xfe\x8d\x68\x01\x49\x8e\x40\xab\x5e\xcc\xee\xc8\x7c\x9d\x12\x14\xaa\xd0\x22\x1a\x70\x3b\x98\xe7\x4b\x48\x17\x28\xe6\xeb\x4f\xa1\x54\x66\x3c\xca\x1b\xb4\x1b\x9a\xcd\xb5\x68\x5c\x25\x45\x25\xd6\x3f\x1a\x9d\xed\xb8\xe8\x54\xcb\xef\xea\x31\x9b\x85\x60\xa0\xb6\x20\xec\x52\x2f\xd5\xe6\xf6\xd3\x5c\xc5\xc3\x61\x89\x93\xf9\xbd\xe8\xa7\x67\xe5\xdb\xdf\xc7\x07\x1a\x28\xd4\xf3\x19\xf4\x5c\x79\x94\x67\x33\xa2\x1a\x28\xf9\x40\x3a\x7f\x43\x66\xf9\x12\xca\x7a\x14\xeb\x4f\x6c\xac\x3e\x2f\x02\xf1\xe1\x23\xcb\x97\xb4\x20\xa8\xa1\xd4\x53\x1f\x7a\x9c\x3d\x3e\x35\x3a\x61\x26\x66\xbf\x98\xec\x65\x5b\x3e\xaf\xf2\x50\x39\x5b\x5b\x3b\x9a\x33\xdb\xe0\xdd\xa5\xb2\x42\x8a\xd7\xd1\xe5\xd5\xaf\x1f\x23\xe8\x6e\x33\xf5\xac\x12\x64\x0c\x71\xb7\x8e\xa0\xba\xb3\x54\x76\x08\x83\xf5\x86\xad\x6e\x17\x13\xc8\x66\x9d\x2c\x65\x69\x7d\x8c\x4c\x43\xb9\x36\x1c\x15\xc2\xdb\x5f\x25\x2c\x32\xe6\x25\xc0\x0c\x17\xae\xd6\xdc\x6e\x8e\x77\x9d\xf4\x3a\xed\xf5\xba\x8d\x95\x64\xe0\x76\x4e\xed\xbd\x3c\x1a\x60\x3a\x48\xc3\x44\xb9\xf3\x55\xd5\x82\x4f\x6c\x0d\x26\x8b\x81\x32\xb1\x0c\x76\xee\x17\x78\xc7\xd2\x33\x43\x1c\x20\xc0\x9f\x71\x66\x9e\x33\xc3\xd9\xa3\xec\x99\x9e\x44\x60\xa2\x11\x2d\xae\x49\x21\x18\x34\x14\xa2\xcd\x46\xa2\x32\x29\xbb\xeb\x63\x79\x99\x0e\x97\x8e\x05\x92\xb5\x00\x8f\x3d\xf3\xf6\x8a\x24\x6c\x76\x57\xa1\x02\xee\x1d\xa0\xda\x69\x84\x42\xd2\x3c\xf8\x8e\xb6\x0c\xcb\xc8\xb7\xdf\x21\x7b\xd2\x6b\x85\x3a\x9c\x6a\x00\x05\x65\x6b\x31\x7b\xcd\x41\xd2\xf7\xb7\xb6\x3e\xbe\xd2\x05\xd7\xa7\x96\x37\xbf\x35\xd7\x30\xab\x77\xaa\x0d\x29\xfe\x72\x25\xcc\xee\xce\x3d\xac\xd7\xfd\xd9\x13\xb5\xd0\xf7\x52\xce\xe9\x2c\x77\xb6\xc1\x20\xf4\x7f\x96\x3c\x00\xda\xc2\xf0\x38\x21\xf9\xfd\x29\x7c\x3e\x9a\x16\x84\xb9\xc4\x88\x46\xe5\xd6\x52\x54\xbc\x7e\xd4\x54\x72\x56\x37\xc6\xa0\xe6\xb4\xf7\x42\xd1\x09\x1e\x15\xa3\x54\x7b\xb2\xc6\xc1\x6a\xd4\x97\x90\x8f\xb7\xea\x26\xb3\x08\xea\x20\x78\x07\x14\xc9\x19\xe4\xf2\x2e\x2c\x7f\xa8\xd6\x7a\x66\xaf\x75\x52\x4a\xf3\xe4\xde\xad\xab\x4b\x83\xaa\x34\x75\x69\xee\x56\xb6\xcd\xfb\x48\xfb\x0f\xd7\xec\x73\xb5\x92\xcb\xbe\x68\xc0\x9a\x67\x31\x2c\x4b\x4d\xa7\xe6\xf1\xf6\xc6\x4f\x92\x6f\xf3\x46\x86\xf2\x44\x11\x2c\x6b\x4a\x36\x28\x7f\x24\x8d\x80\x74\xf9\x6e\x0a\xbf\x22\x1e\xa7\x51\x1d\xd7\x09\x1c\xcd\xff\x2a\x83\xe0\xd4\x1a\x66\xd9\x49\x60\xfb\x80\xd1\xaa\x6b\xbb\x3c\xad\x1f\x19\x89\xdd\x4a\xd4\xe9\x78\xcd\xf3\xf7\x46\x69\xe2\x4d\x7a\x97\x14\x77\x22\xe9\xcf\x49\x71\xb7\x2b\x29\x2d\x78\x2e\xa4\x8d\x59\xf4\xb3\x7c\xdc\x91\x01\x94\x5f\x78\x16\x7d\xc8\x33\xe2\x4d\x1a\x1e\xe0\x79\xb4\x62\xf4\x3e\xe1\x60\xd7\x70\x2f\xc6\xad\x75\x58\xc0\xd0\x6e\x16\xbd\x01\x81\x13\xec\x1b\xeb\x43\xa2\xf5\x9e\xb2\x07\xab\x59\x71\x25\xdf\xd7\xfa\xb9\x9e\x3a\x98\x9a\x27\xf7\x12\x2b\x24\xb0\x9d\xad\xe4\x55\xc3\x71\x35\x08\x7a\x76\x83\x29\x07\xd1\x5a\xd3\x9b\xf8\xd6\xd2\xb6\xdc\xb4\x5e\x6e\xd7\x34\x14\xdf\x1e\x9b\x6b\xa7\x21\xb8\x34\x43\xf0\x9a\xaa\x50\x00\xaa\x18\x93\x49\x9c\x81\x7d\xe9\x78\x82\xc5\x83\x74\x2c\xe7\x08\xb3\xc1\x80\x87\x12\x23\xc1\xe6\x82\x9a\x5e\xfd\x14\x8c\x50\x31\x8b\x1e\x68\x36\xcf\x1f\x06\x03\x8f\x03\xe0\x49\x25\xb8\x6b\x4f\x5f\x31\xd6\xd6\xeb\x90\xe0\x27\x09\xae\x39\xe2\xd2\xd4\x91\x94\xa8\xa7\x89\x46\x7a\x8d\xc9\xb4\x39\x2a\x45\x5d\x07\x03\xa8\xf1\xb6\xad\x3a\xe4\xc0\x60\x10\x7d\x50\xd4\xdd\x6e\x4f\x3f\xfc\x1a\x9d\x9e\xbf\x39\xbd\x9c\xbe\xbf\x38\x7e\x3b\xfd\xf9\xe2\xe2\x97\xab\xcd\xe6\xa9\xc4\x34\x7e\x2a\x71\x1e\xd3\x5e\x95\x35\xdf\x3a\xd0\x35\xd3\xf2\x56\x88\xa8\x8e\x7e\x6b\xcd\x21\xcb\x62\x36\xe6\x60\xab\x05\xe6\x4d\x15\x42\x53\x36\x3e\x14\x63\xf7\xdd\xa4\xd4\x6e\x6e\x72\xe7\x1a\x07\x49\x51\x10\xc0\x23\xa3\x05\xac\x13\xe5\x57\x19\xe0\x40\x22\x06\xc1\xcb\x60\x62\x79\x7a\x8f\x03\xc3\xe3\x40\x36\x13\x58\xb7\x9e\xb5\x8a\xb8\x3b\x91\x0e\x2f\xf5\x9c\x96\x1f\xa7\xc9\x04\x81\xad\x27\x58\xaf\xcb\x7a\x16\xb5\x8a\xeb\xb9\xd4\x6b\xc0\x36\xb3\x06\x60\x96\x88\xbd\xdb\xa8\xca\xba\x99\x3e\x79\x57\xd9\x33\x3c\x2b\x68\x71\x9a\x49\x4c\xb5\x26\x16\x09\xac\x28\xed\xe0\x27\x11\x51\x01\xb9\x8e\x1d\xb1\xd1\xde\x9e\x9a\x6b\x1f\x20\x58\xe6\xc5\xc7\xeb\xb3\x8b\x0f\xc7\xef\xa7\xef\x4e\x8f\xaf\x3f\x5d\x9e\x5e\x89\x29\x2a\xe7\xe1\xbb\xcb\xe3\xf3\xd3\xdf\x2e\x2e\x7f\x99\x5e\xbc\xf9\xd7\xd3\x93\xeb\xe9\xc5\x6f\x1f\x4e\x2f\xa7\xc7\x97\x3f\x7d\x3a\x3f\xfd\x70\x1d\xeb\x74\x3f\xbd\x3f\x3b\x3f\x3f\xbd\x9c\x5e\x7c\x98\x9e\x5f\xbc\x3d\x7b\x77\x76\x7a\x69\xbe\x9d\x7c\xba\xba\xbe\x38\x9f\x9e\x5c\x9c\x7f\xbc\xf8\x70\xfa\xe1\x5a\xe4\x9e\x7e\xbc\xbc\xf8\xf7\xdf\x1b\xd9\xdf\x7d\x98\xfe\x7c\xfa\xfe\xa3\x95\xf9\xc3\xf1\xf5\xd9\xaf\xa7\xd3\xb7\xa7\x27\x17\x97\xc7\xd7\x17\x97\xd3\xab\x4f\x1f\x3f\x5e\x5c\x36\x4b\x3e\xfe\xf0\xd3\xfb\xd3\xe9\x9b\xcb\xe3\x93\x5f\x4e\xaf\xa7\x6f\x3e\x9d\xbd\xbf\x9e\x9e\x7d\xb8\x6a\x16\x71\x71\xf9\xdb\xf1\xe5\x5b\x53\xcd\xab\xe9\x6f\x67\xd7\x3f\x4f\xaf\x3e\xbe\x3f\xbe\xbe\xbe\x3c\x7b\xf3\xe9\xfa\xb4\xca\x74\x7e\x7a\x7d\xfc\x7e\x7a\x0d\x44\xdf\x8a\x3a\x7f\x3c\xbd\xbc\x3e\xb3\x13\x5c\xbc\xfd\xf4\xfe\x74\xfa\xe9\xc3\xd9\xbb\xb3\x13\xd0\xb1\x99\x4f\x67\xe7\x1f\x2f\x2f\x7e\x3d\x7d\x2b\x6a\x71\x7d\x09\xdd\xe5\x26\x78\x7f\xf6\xe6\xf2\xf8\xf2\xec\xf4\x6a\x7a\x76\x75\x79\xfa\xd3\xd9\xd5\xf5\xe9\xe5\xe9\xdb\x98\x44\x7a\x18\x62\x12\xbd\x3d\x7d\x77\xfc\xe9\xfd\xb5\x19\x19\x77\xc7\x78\xda\x46\x68\xb4\x77\x88\xb7\xd7\xa4\x4a\xd1\x6c\x86\xf5\xad\xa5\x0f\xaa\x14\xcf\xe9\xda\xd1\xde\x01\xee\x34\x70\x55\xc2\xb6\x29\xd0\x24\x65\xa6\x4f\xf5\xa9\x7d\xf2\x35\xeb\x6f\x4d\xde\x8a\xc0\x8e\x15\x30\xda\x3b\x28\x7b\x9e\x71\xca\x2a\xe7\xd1\xca\xcf\x29\xc3\x72\xdd\xe9\x54\x56\xd8\xb3\xbc\x3a\x27\xf6\xc2\x1d\xcb\x53\xc2\x27\xed\xc5\x31\x41\x9b\x0d\x29\xad\x09\x43\x35\xac\x62\x48\xb7\x4e\x32\xd4\xdb\x31\x09\x13\x6d\x1b\x66\x08\xb5\x4d\xa2\x8a\x54\xeb\x84\x2f\xd4\xed\x6e\x45\xac\x39\xdf\x2a\x32\x9e\x25\xb5\x56\x4e\x4c\x16\x81\x96\x49\x69\x91\x69\x5b\xba\xa9\x0a\xdb\x52\x11\x7b\xce\xfc\xad\x0a\x78\xd6\x86\x32\x53\x9e\x23\xcd\x42\x5b\xa6\x7f\xb3\x9c\xb6\x0d\x6e\xa1\x82\x7b\x54\xa4\xdb\x16\x4c\x45\xb3\x75\x57\xbd\x03\x62\x73\x5f\xe7\xe8\xb5\xe5\xe9\x01\xb3\x6b\xcf\x21\xfb\xca\xca\xde\xbe\xfe\x2a\x3a\x5b\x0e\x08\x89\x8c\xb4\xf4\xd4\xc7\x5a\xac\xcd\x1a\xd9\xc7\xd0\xb2\x27\x91\xb6\x2b\x12\x3b\x96\x74\x45\x6e\xd7\xe9\x77\xef\xb2\x00\xc6\xf7\xa0\xdb\xe9\xbf\xed\x42\xb0\x76\xd3\x68\x91\x96\xa1\xc6\xf5\xcf\x29\x04\xb1\xeb\xe2\xda\x2e\x25\x11\xcf\x0d\x19\x53\x9f\xdc\x88\xd1\xe3\xa0\x2a\x24\x98\x68\x00\x7e\x00\xfd\xb0\xee\xa4\xe1\xb2\x4e\xfa\xf7\x55\x92\xb4\x44\x1a\xf3\xba\xd2\xb7\x22\xcb\x18\xf3\x5c\xf4\x5a\xc7\xfa\x34\x29\x41\xc0\x47\x21\x55\x81\x38\x62\xda\xea\x9f\xbe\xab\x9b\xbe\x3a\x12\xef\x37\x89\x31\xcd\x9a\xd8\x39\x95\xdb\x8a\x38\x78\x24\xd0\xbb\xbc\x1b\x14\x82\xaf\x0a\xd8\x05\x0e\x48\xf0\xb8\x25\xf6\x33\xb0\xf5\xdd\xe6\xdf\xd6\x5b\xf1\x9a\x9f\xb5\x24\x2b\x3a\xd5\x66\x92\x1b\x1f\xb9\x54\x86\xfa\x3e\x3d\x24\xcc\xef\x97\xdf\x88\x7c\xdf\x6e\xa3\xae\x24\x6f\x0b\x9a\x52\xf5\x61\x67\x23\x70\x4d\x42\xe5\xdb\x6a\x60\x6e\x74\xbb\x1d\xa9\x5b\xda\xe0\x5d\x2e\x01\xcf\x25\x5c\x65\xd9\x6e\xc4\xaf\x5a\xf7\x5b\xc2\x9e\xd9\x33\xb9\xaf\x67\x48\x34\x15\xa3\x76\xb6\xf8\x54\xd0\xec\xf6\x8a\x33\xba\x5a\x91\xf9\x3b\x29\xe2\xbc\x4b\x93\xdb\x42\xc6\x17\x79\x2b\x06\xf9\x9d\xa2\x19\x83\x2d\x66\xfd\x95\x99\x35\xe2\x5d\x4c\xe4\x0d\x07\x24\x82\x8f\x22\x31\x38\x7b\xeb\x5f\x57\x24\x49\xed\x6c\xfa\x7d\x4c\x22\x51\xa5\x58\xec\x67\x0b\x08\x44\x02\x42\xa5\xbd\xde\x92\xd8\xc1\x30\x29\xe2\xa4\x67\x92\x69\x4e\x24\xe9\x29\x02\x9a\xb3\x10\x2f\x80\xb0\xe6\x0e\x92\x9e\x2e\x51\x1f\xdd\xf2\x8d\xae\x8f\x3e\x75\x4d\x3a\xa8\xb1\x3e\x3e\xcd\x5b\xd5\x2a\x7d\x2e\x8a\xf7\x56\xd3\xf5\xe9\x26\x5e\x37\x3a\x4d\x9f\x5b\xe2\x63\xa3\x93\xef\x95\x09\x43\x73\x24\xab\xdb\xe5\xfa\x8d\xf4\xfe\xe1\xa4\xec\xd5\x87\xe2\xb1\xcb\x28\xcb\xde\xf5\xec\x33\xb5\x0d\xe1\x05\xd2\xae\xb3\x5f\x35\x89\xab\x30\x01\x1d\xb0\xdd\x49\xb4\xa4\x85\x68\xc1\x85\x34\x49\xfa\x94\x71\x9a\x5a\x3b\x45\x5c\x4f\x70\x36\xdf\xf6\xd5\xfd\x56\x5b\x1c\xb1\xff\x78\x93\xa6\x30\xce\xf4\xeb\x35\xf3\x16\x78\x5b\x59\xb4\xf1\xd5\xad\x67\xde\xf8\xde\x68\x68\xd2\x34\xa6\x2c\x71\x1a\xaf\x5d\x9b\x2c\xef\x58\x9a\xee\xee\x06\xf2\x27\x16\xd1\x7d\xfe\x99\x78\x7b\xe8\xe7\xe3\x0f\x6f\xdf\x9f\x5e\x3a\x22\x2b\x8f\xa1\x4b\xcc\x27\xae\x74\x44\x3b\xba\x8c\xf5\x6a\x81\x93\x64\x32\x55\xb8\xef\x00\x74\x0e\xa3\xae\x6d\xd1\xbb\xb7\x67\x55\x71\x85\x40\xdb\x48\x41\xd0\x13\xaf\xec\xf8\x14\xbc\x01\x8f\xa5\x8d\xac\xa7\x52\x70\x0c\xb6\xea\xe3\x5e\xb0\x10\x76\x2c\x83\xe7\xac\x80\x4e\xb3\xbc\x31\x0a\xf5\x5c\x59\xb5\x18\xea\x49\xbf\x62\xda\x2b\x79\x34\xb1\x26\x71\x51\xeb\xe2\x86\xbd\x5a\x93\x0d\xda\x3a\xfe\xef\x3e\x7d\x80\x18\xe1\x42\xf4\xb8\xbe\xb8\xfe\xfd\xe3\xe9\xf4\xf4\xdf\xaf\x4f\x3f\x5c\x9d\x5d\x80\x1e\xe9\xf8\xe3\xc7\xe9\xc9\xf5\xe5\xfb\xe9\xe5\xc5\xa7\xeb\xd3\x4b\x90\x29\xe1\xfd\xfb\xb3\xe3\x2b\x21\x6f\xfe\x7c\xf1\x36\x26\x1e\xb3\xab\x98\x44\x95\x6c\x73\x7e\xfc\xe1\xf8\xa7\xd3\xcb\xe9\xd5\xf5\xe5\xd9\x87\x9f\xa6\xef\x2f\x2e\x7e\xf9\xf4\x31\x26\x91\x22\x7a\xfa\xeb\xe9\x87\x6b\x41\xf5\xfc\xf4\xf2\xa7\xd3\x98\x44\xef\x2f\x7e\xfa\xc9\xd2\x87\x41\x8d\xde\x56\x55\x14\x49\xad\xf8\xe6\x7a\xa4\xdc\x97\x7b\x07\xbd\xf6\xfc\xf0\x51\x95\x02\xcf\xb2\x64\x78\x74\x2b\x05\xaf\x76\xb5\x04\x12\x79\xfa\x00\xde\x3b\x5d\x25\xdf\x78\x3b\x15\x3e\x6d\x1f\x8f\x3d\xf7\x3c\x32\xee\x72\x6d\x8c\xaf\x4a\x20\xd6\x92\x7c\xdc\x97\xd0\x8b\x5d\x4c\x4d\x2d\x51\xe8\xb9\x82\x9c\x6d\x75\x39\x4f\x6e\xf7\x97\xc9\xea\x05\x31\x51\xb7\xe3\xdc\x3c\xc7\x65\xb0\x61\x4f\x6a\x1f\xd0\x42\x16\x2b\x68\x9e\xed\x9b\x70\xe8\xcf\xb2\x55\xed\x82\x56\x63\x9b\x89\xb6\x19\x89\x2e\x2d\x23\xd1\xc7\x5d\x46\x9f\xcb\x36\xa3\x4f\xaf\xcd\xe9\x4e\x72\xad\x36\xa4\x86\xdc\xa3\x1b\xa9\xb8\x6e\xb6\x8a\x2b\x7b\xd5\x6d\xae\xc6\xa7\x30\x56\x1f\xd5\x14\xec\xee\x71\x6c\xe7\xdb\x25\x65\xbc\xa8\x8c\xa2\x59\x86\xf7\x1c\xb8\x8d\x69\x64\x8c\x2d\xb4\x18\x4f\x23\x7d\x47\xf9\x91\xe5\x5f\x1e\x41\xec\xc5\x4f\x2f\xb4\x6f\x75\x6e\xf4\xc1\xea\x8f\x5a\x46\x51\x97\x49\x26\xe3\x95\x17\x6b\xe6\x38\x38\x36\x4b\xaa\x65\xd3\x66\xb3\x4d\x2b\x2b\x6f\xf2\x78\xef\xe0\x1f\x60\xfd\x09\x45\x37\x1b\x03\x26\x3a\x95\x5d\xe8\xcc\x67\x04\xda\x6a\xf9\xe0\x18\xb5\x59\xde\x96\xd2\x18\xc2\x76\xcf\x74\xbb\x5a\xba\x2b\x61\xab\x1f\xb6\x3b\x77\x5a\x09\xa1\x42\xb4\xe9\x76\xba\x8b\x40\x23\x03\x10\xaa\x8d\x90\xdf\xaa\x43\x5b\xa2\x39\x69\xc3\xc0\x1e\x45\x2b\xd0\x9a\x84\xd5\xb3\xaa\x0c\x36\x28\xaa\xa8\xa6\xb7\xac\xc7\xa4\xb6\x59\x50\x33\x5b\x87\x02\x6b\x74\x6a\xe6\x38\x26\xe4\x98\x74\xa3\x5c\x5b\x6e\x94\x56\xc7\x01\x02\x97\x07\x53\xc3\x8a\xc2\x09\x31\xcb\x08\xe2\xf2\x26\x9d\x55\x51\x57\xca\x30\x43\x0a\x84\xde\x44\x38\xc7\x32\x66\xa7\x89\x92\x59\x0c\x87\x88\xc5\xd9\x98\x8e\x8b\xc9\x04\xe7\x60\x38\x2c\x11\x72\x30\xc3\x2c\xba\x01\xe4\x75\xcc\xa2\x64\xc1\x09\x43\xbd\x3c\xe2\xf9\xaa\xc8\x19\x0f\xa5\x4f\x97\xd9\x32\x6f\xaa\xaa\x3d\x19\x03\x93\x11\xd1\x93\x3f\xac\x5a\x48\x70\xa0\x6d\xae\x02\xb4\xd9\x54\x81\xee\xf4\x84\xe7\x16\x66\xfc\xd4\x05\xfe\x37\x3d\xee\xc2\xfb\x4b\xaf\x25\xb1\xd9\x00\x14\x06\xdc\xd4\x37\xdf\x29\x33\xae\x31\x99\xe8\x0b\x54\xb1\x36\xc5\x07\x37\x26\xb1\x4e\xa4\xcd\xe8\x2a\x0b\x24\x86\x4a\xf5\x71\xcc\xa1\x8f\x26\x31\x2f\xcb\x9a\x95\x92\x3d\x2b\x47\x9e\x68\xc7\xbe\xb5\xd3\x96\xb0\x9a\x3b\xd3\xfa\x74\xb7\x7f\x06\x5e\xa2\x32\x8f\x6f\xe6\x9a\xd7\x7d\x97\x48\xcb\x36\xe3\x04\x27\xc8\xcd\xfe\x1f\x3e\x69\xfe\x64\x74\x03\x33\xbe\x67\x9f\x30\x31\xf8\x66\x5a\x41\xea\xc3\xa6\xb1\x11\x26\x1e\xd7\x41\xd7\x3a\x4b\x79\x1f\x29\x24\x18\x0b\xec\x3d\xc0\x4f\x42\x94\x48\x09\xcf\x33\xed\xaf\x58\x4f\x2c\x21\xd7\x9b\xe9\xaa\x2a\x55\x6c\x9f\xb6\xbb\xb2\xa0\x5f\x3d\x1e\x91\x96\xb1\x8f\x24\x1e\x00\xae\xbb\xee\x92\x00\xb7\x84\x76\x71\xcd\xb1\x14\x22\xe4\x0b\x73\x83\x0d\x05\x0e\xa6\x3c\x5f\xbd\x27\xf7\x24\xfd\x95\x92\x07\x0d\xc6\x14\xe0\x2a\x68\xd2\x7e\xbe\xe6\x29\xe1\xf5\xfc\x60\x3c\xa1\xbf\x75\xb0\x06\xb3\xb2\x3a\x4c\xb2\x8e\x07\xeb\x9a\x36\x6d\xc9\xf0\x9c\x92\x2a\x0b\xaa\x9b\xca\x38\x2b\x90\x56\xbe\x35\xf3\xae\xb6\xee\xd9\x9a\x71\xb9\x25\xa3\xdf\x66\xcb\xef\x0e\x6b\x78\xed\x45\xa4\x0c\x6c\xb7\x5b\x86\x55\x19\x82\x0e\xc5\xe8\xf5\xb5\xbf\xc8\xd9\x3e\x48\x12\xb7\x34\xbb\xd5\x6b\x47\x5b\xed\xb2\x5d\x33\xd5\x08\x28\x92\xc6\x7e\x32\x4f\x56\x96\x3d\xa0\x25\x65\x6c\x2b\xb0\x46\x14\x42\x89\xd6\x28\x99\x82\x40\x93\x79\x2c\x3f\xda\xef\x7d\x15\x68\x2e\xc8\xf6\xba\xde\x45\x27\xbe\x22\xea\x24\x7c\xf1\x20\xf0\xbc\x32\x21\x7a\x0f\xef\x51\x19\x72\xdb\x0c\x4f\xf2\xc4\x95\x05\x1e\x58\x33\x63\xb3\xc7\xc1\x05\xcd\xa5\xfd\x4b\x59\xe7\x3d\x38\xd6\x79\x0f\x7e\x99\x75\x0b\xea\x4c\x27\xff\xc7\x86\x00\xea\x8d\xff\xd7\xd1\x29\xb0\x55\x50\xee\x88\x32\x63\x8e\xe7\xc2\x92\xbb\xd2\x70\x6c\xf6\x1e\x88\x25\x42\x53\x3d\x6e\x95\xec\x55\xec\x94\xbd\xd6\x35\x92\x5b\x45\xb9\xf5\x4e\x72\x69\x67\x51\xce\x2b\x02\xcd\x62\x16\xb9\xd7\x98\xcc\x27\xff\xb0\x6a\x5e\xda\x52\x91\xe0\xea\x5f\xea\xff\x27\x03\x4d\xe9\x20\x71\xc0\xaf\xf7\x6c\x7f\xa7\xa4\x20\x3d\xb2\xd9\x68\xef\x01\x1b\x79\xc3\x24\x88\x09\xea\x55\x56\xdf\xae\x80\x50\x3f\xcb\x17\x49\x9a\xde\x24\xb3\xcf\x23\xe2\xa4\x2b\x8d\x2b\x95\xed\x2c\xc5\xaa\x20\x14\xe1\x13\xa0\x7b\x81\x57\x42\xd9\xb0\xbf\xaf\xfb\xf4\xb8\x68\x1b\x6d\x2e\x39\x47\x8d\x37\xa3\xa6\x23\x50\x2c\xb1\xd1\xc1\xf5\x46\xbd\xaa\x2c\x32\x59\x75\xf7\x1d\x72\xcb\x37\x82\x20\xe4\x54\x52\x3b\x15\x3d\x1f\x41\x48\x32\xea\x69\xae\xa5\xe8\xb7\x64\x25\x8e\xf5\x6c\x46\x89\x91\x33\x1b\xa8\x42\x66\x64\x76\x40\xf7\xd4\x3c\x30\x76\xa0\xf1\x7c\xa5\x84\xda\x1c\xdf\x6d\xd0\x26\xbd\x86\x68\xd7\x05\xf8\xa7\xc2\xbe\xf6\x88\x5b\x4e\xd1\xe0\xa7\x64\xfa\x6a\x6b\xa8\x63\xc9\xaf\x02\xbe\xbe\xdc\xbb\xbd\x5e\x8e\x5f\x89\xb3\xa1\x21\x4b\x0d\x16\x0e\x94\x04\x11\x29\xc1\x2a\xd6\xc6\x6c\xa5\x2e\x52\x7f\xc2\xc5\x7e\xc8\xc9\x1c\x82\x69\xe6\xeb\x8c\x03\x48\xab\xa4\xd0\xff\x33\x60\xb8\xfe\x19\xf7\x6f\xd6\xbc\x4f\x79\x9f\xca\xb8\x9d\x55\xe8\x6d\x19\x5d\x86\xf2\xa2\x2f\x77\xe7\x28\xd0\x60\x34\x75\xaf\x0c\x6e\x81\x29\x26\x75\xf5\x0e\xd8\xa4\xc9\x48\xe7\x25\x6e\x99\xb0\x7e\xb1\x1b\x5b\x71\xd3\x1d\x82\x40\xee\xf5\xd8\x75\x58\xf0\xf1\x38\xe6\x95\xd2\x1b\xba\xc6\xe4\x4d\x43\x6a\xe6\x44\x13\x53\x07\x3a\x03\x21\x42\xc2\x74\xda\xe1\x41\x99\x58\xcb\x7a\x7f\xdb\x3d\x65\xb7\xe2\xa1\x78\x78\x28\xd5\xd7\x63\xd7\x7b\xa2\xce\x48\xae\x43\x84\xfc\x6c\x3b\x36\x7c\xfe\x68\x3f\x18\x86\xcc\xc5\x5d\x38\x0a\xe6\xf9\x32\x18\x05\x62\xd6\x0b\x16\xdd\x87\xb0\x52\x2f\xab\x08\x11\x9a\xf4\x58\x1d\x76\x42\x05\x57\x6f\x47\x69\x7a\x46\x3f\xab\x5e\x64\x1e\x3c\x18\xbd\x6f\x4a\x1e\xb0\x92\x7f\xdc\x3b\x5f\x1f\x18\x92\x93\xcd\xb0\xd9\x3b\xf3\x95\x25\xea\xcd\xba\xa1\xe9\x00\xba\xc0\x60\x10\x7a\x05\xb4\xdd\x15\xf4\xcb\x01\x1d\x1a\x56\x1b\x53\x6f\xf9\x96\xb4\x57\x4d\x08\x31\xf8\x0d\x2e\xdd\x48\xb6\x5b\xf2\xa0\x51\xf7\x42\xf4\xdc\x7a\x5e\x31\x2a\x17\x32\x98\x3d\x8b\x78\x66\xfb\x09\xf8\xf8\x5b\xcf\x95\x4b\x17\x46\x77\x87\x6b\x42\x6d\xdf\xf1\xc2\x2b\x8f\xd9\x44\x07\x19\xf5\x27\x15\x74\x45\xaa\x98\x6b\x6f\x05\x69\x7d\xf6\xb8\xbc\xc9\x53\x14\x06\xa7\x1f\x7e\x3a\xfb\x70\x3a\xfd\x78\x7c\x79\xfa\xe1\x3a\x70\x81\x23\x81\xa9\x7e\xe6\x15\xa3\x87\x89\xe4\x31\x80\x5b\x59\x1f\xb9\x53\x4c\x2d\xb4\xc9\xf3\x1d\x0b\x76\xf4\x63\x45\x1f\x42\x81\x4e\xab\xdf\x10\x5d\x11\x82\x7f\x16\xeb\x9b\x62\xc6\xe8\x4d\x1d\xb3\x43\x2b\x19\x29\xce\x2b\x10\xf7\x28\x40\x38\x89\xc7\x13\xa5\x4c\xcc\x6d\x65\x62\xf0\x97\x20\x8e\xe3\x90\xc6\xf9\xb8\x98\xa0\xa3\x44\x6d\x4e\xe3\xff\xf8\xe3\x8f\x68\xf2\x97\x00\x8d\xd4\x1b\xaa\x01\xa1\x12\x05\xa6\xfe\xc7\x1f\xe2\x80\x5b\x0f\xe3\x20\xfc\xe3\x8f\x28\xfa\x0b\x3a\x0a\x94\xe5\xce\xd3\x4a\x9c\xa4\x2c\x1b\x11\xcc\xc8\x2d\xf9\x32\xb2\x70\x7c\x83\xff\x08\x86\x6b\x89\xe5\x2b\x03\xa6\x8d\x78\x59\x05\x90\x84\x92\x52\x84\xb3\xf8\xa9\xc4\x10\x8d\x76\x9d\xf9\x5a\x6a\xc3\x0a\x1f\x60\x1a\x1f\xbc\xa6\x3f\x68\xe4\xdc\xd7\x14\xa2\x9d\xd1\x49\x1c\xc7\xe0\xc3\x19\x53\xd4\x63\xd0\x15\xe2\xe8\xc5\x87\x92\x7c\x29\x05\x72\xe2\xda\x5f\x2a\x1a\xf1\x81\x49\xd3\x88\xec\x12\x5b\x9d\xcf\x0a\x37\x7e\xd4\x78\xd2\x73\xbf\x6a\x33\x89\xa7\xd2\xb1\x47\x09\xa9\x17\x4b\x49\x3b\x48\x29\x9f\xa6\x15\x61\x10\x38\x39\x9b\x11\x70\x39\x0a\xf3\x98\x46\x59\xfe\xb0\xd9\xd0\x68\x99\xff\xfd\x83\x7c\x92\x91\x25\xd5\x8f\x65\xa1\x1e\xf2\x0f\xf9\x03\x3a\x92\x20\x05\x21\x45\xa3\xb7\x09\x27\x22\xaf\xa5\x02\x5e\xcb\x70\xee\x98\x2a\x8f\x2b\x51\x33\xc0\x45\xae\xb1\x5e\x3f\xc4\xdf\x7b\x7d\xb6\xf8\x51\x98\xc4\x1c\x17\x71\x86\x46\x61\x1e\x73\x9c\xc4\x19\x2e\x62\x8a\x00\x5b\xc0\x00\x19\x9b\x50\x12\x60\x93\x5a\xe8\x69\x94\x43\x93\x16\xf1\x2c\x24\xcd\x40\x38\xfd\x75\xa5\x9d\x5c\xc4\x71\x9c\x1e\x99\xec\xa3\xa6\xd1\x11\x67\x8f\x56\xcc\x07\x91\x2c\xd3\xfe\xf5\x54\x3b\x41\xb3\x88\x7c\x99\x91\x95\xb2\x6c\xa0\xe5\x82\x66\x49\x9a\x3e\x3e\xf1\x10\x95\x65\x98\xe0\x05\x5e\xe3\x02\xd9\x72\x28\x7a\x72\x42\xa1\x4a\xab\x48\xba\x08\x7d\x8d\x4b\x75\xb4\x58\x15\x25\x2f\xd9\x6c\xc2\xc4\x3f\x5f\x31\x15\x0b\x31\x8f\x0f\x5e\xe7\xd5\x94\xcd\x87\x43\x14\xf2\x98\x8d\xf3\x09\x8a\x60\xcd\x48\x6c\x6a\x82\x06\x03\xaa\x3c\xee\x54\x80\xc1\xca\xa3\x77\x4c\x26\xd0\x14\x21\x24\x41\x97\x27\xde\x5a\xad\xf1\x2c\xa6\x61\x8e\xf0\x42\xb9\xb3\x5d\x5d\x5f\x7e\x3a\xb9\xfe\x74\x29\x6d\xf0\xdf\x9d\xbd\x3f\xed\x2d\x06\x83\x70\x1d\x93\x61\x30\xea\x07\xc3\x99\x2a\x09\x0b\xa1\x21\x4f\x49\xc4\xe9\x92\x84\x6b\x84\xcc\x0d\xc6\x9d\x68\xc2\x3c\x16\x72\xd3\x2a\x3e\x78\xbd\xfa\x41\x97\xfc\x7a\xa5\x61\xb6\x97\x71\x32\x5e\x4d\x7a\x77\xb2\xf2\x4b\x75\x31\x11\x12\x3c\xc7\xb3\x0a\x4c\xcb\x06\x97\x33\x0b\x5a\x90\x65\xf1\xc1\x6b\x56\x91\x65\x9a\x6c\x16\x27\x63\x36\xe9\x79\x66\x63\x26\xaf\x3c\x04\x7b\x05\x0f\x30\x3d\x66\xf8\x6e\xcc\x26\xa8\x5c\x0c\x06\x76\x63\x4e\xb3\x79\xb8\x46\x65\xe9\x5b\xdd\x89\x77\xcd\x27\x71\xdd\xc4\xc7\x88\xab\xb5\xb0\xa2\xcb\x7c\x4e\x17\xb4\xab\xc1\xb9\xff\x7e\xbe\xab\xf5\x6d\x41\xf8\xb9\x2a\xee\x3c\xc9\x92\xdb\xe7\x61\x5a\xd7\xb2\x6e\xbd\xba\x9e\x25\xab\xe4\x86\xa6\x9c\x92\xae\x50\xd4\x3c\xd2\x3d\x71\x52\xe5\xad\x23\x3d\xcb\x89\xf6\x4a\xf0\x38\xc9\x4e\x1e\xc4\x1b\xf5\xa7\x83\xf9\xb7\x14\x9b\xf8\x2f\xe4\xf1\x04\xca\x51\x2e\x39\x59\x4b\xa0\x5a\xc0\xa8\x6f\xc4\x65\xa6\x10\x99\xf6\x96\x34\x61\xde\xb0\x42\x03\x52\x70\xa8\x3c\xb9\x7d\x97\x33\xdd\x77\x48\x07\xc3\xc4\x89\xfa\xcc\x92\xd9\x67\x07\x42\x97\xc4\xd4\x6c\x5a\x96\x5c\xc8\xa3\xf5\x6a\x0e\xe1\x1a\x72\x9c\x28\xf5\x92\x98\xc3\xeb\x25\x41\x61\x02\x4e\xf7\x38\x2b\xab\xdd\x9c\x42\x2b\xa8\x04\x42\x91\xc1\x81\x74\x1c\x46\x1d\xe2\x23\x67\x28\x1c\x43\xaa\x09\x42\x4f\x34\x26\xca\x7a\xbf\xb6\xa3\x82\xfe\x50\x6f\x32\xf0\x8e\xa2\xd2\xae\x58\x41\x38\xf0\xf7\x74\xf6\x96\xcc\x72\x96\x00\xe1\x1c\x61\x13\x70\x37\x53\x75\x29\xdb\x93\xd3\xd6\x89\xb0\xe6\xc4\xef\x0b\xad\xd2\x48\x37\x02\x99\xce\x3c\x4c\x97\xc9\x8c\xe5\x3b\x12\x33\x32\x5f\xcf\xc8\xb4\x9e\x67\xc7\x14\x6a\x5d\x13\x64\xb9\xe2\x8f\x9d\x57\x03\xa4\xde\xba\xc6\xb2\x9c\x9f\x3e\x8b\xa4\xce\xb0\x83\x6a\x46\x9e\x41\x31\x23\xbb\xea\xf8\x9c\xea\x6d\xa5\x75\x93\xe7\x69\x67\x62\x22\xf1\x56\x6a\x10\xf2\xbb\xfb\xde\x24\x52\x6f\xa5\x47\xfe\xb6\x4e\xba\x57\x0f\x52\x6f\xa5\x77\xfb\x0c\x9b\xa2\xed\xfd\x76\xcb\xbb\x0f\xe8\x2d\xdf\x3e\x9e\x9d\xc1\xfa\x79\x94\x6e\xaf\x55\xfa\x8c\x5a\xa5\x3b\x6a\x95\x67\xe4\xb7\xa4\xfb\x3a\x90\xc9\x77\xb8\x61\x48\x0c\xf2\xce\x34\x75\x86\x1d\xf1\x0e\x94\x39\x6c\x76\x7b\x9c\xd2\xa4\xfb\xd1\x58\xcf\xb8\xb5\x94\x24\xeb\x1a\xa5\x81\x47\x49\xb6\x3d\x42\x43\xde\x9d\x43\xc8\x77\x44\xd1\x58\x2f\x3b\xc7\x8e\x28\xd6\xcb\xed\x6b\x17\xc0\x58\xba\xd1\x5a\xd2\x6c\xc7\x3e\xf0\xa5\x3b\xad\xe4\xcb\x0e\x5a\xab\x67\xd0\x5a\x6d\xef\x2f\x30\xde\xec\xda\x61\x39\xdb\x69\x4a\xf8\x96\x2e\x16\xdd\x09\xca\xf4\xbb\x5a\xfb\xa6\xeb\x02\x81\xf6\xbe\xd9\xbe\x3a\x16\x34\xe5\x9d\x39\x52\x16\xc9\xe4\x1d\x28\x3e\xa3\x92\x3a\xc3\x56\xaa\xeb\x8c\xfe\xad\x33\x45\x91\x78\x27\xb5\x67\xd4\x50\x26\xdf\x45\x31\xef\xbe\x3e\x20\xf5\x76\x27\x3a\xc1\x51\x17\x64\xd6\x7d\x3a\x9a\x1c\xdb\x65\x84\x3c\x4d\x9f\x43\x55\xa5\x6f\x91\x09\xda\xc5\xa7\xda\x4d\x7a\x97\x20\x30\x3b\x5d\x95\x80\xf5\xef\x91\x48\xc2\xd0\x29\xa5\x0e\x36\xbf\x69\xaf\xc2\xa4\xf9\x8d\x24\x9f\xcf\x93\x15\xae\x89\x84\x99\x6b\xe2\x46\xec\x2b\x37\xaf\xfa\xc4\x49\x21\x1d\x78\x07\x03\xcf\xcb\x10\x61\x19\x6d\xf8\xe2\x21\x33\xdd\x6d\xf0\xf2\x90\x16\x5b\x74\x5d\x0b\xd3\x8a\x22\xa6\x47\x8d\x20\xb9\x68\xf4\x54\x56\x50\xd6\x2a\xe1\x98\x4f\xe2\x0c\x3f\xdd\xfa\x00\x07\x73\x21\xf4\xe8\xfb\x6c\x68\x9d\xd2\xab\xc9\x0b\x5d\xd1\x13\xb9\xd8\x5e\xa4\xa0\x43\x10\xea\xe9\xd8\x75\x22\x5f\x05\x79\x6d\xf2\x02\x1a\x78\x9c\x49\xcd\x14\x57\x91\x4f\x04\x81\x0c\x73\x24\xc1\x0f\xab\x81\xa0\x0d\xb9\x5b\x8e\x94\x12\x72\xb2\x56\x21\x87\x63\xb6\x55\xc8\xc9\x70\x5e\xf9\xe7\x35\x85\x9c\x6c\xb7\x90\x43\x63\x16\xdd\x27\xe9\x9a\x60\x93\x1f\xb7\xe7\xf4\xcb\x3b\xdb\x65\x99\x6f\x2f\x0e\x1b\x69\x11\x24\xb4\xa6\x9d\x66\xa5\x86\x69\xde\x4e\xe3\x0c\x06\x1c\xfc\xcd\x21\x7e\x03\x68\x5d\x09\xa8\x5b\xb3\x31\x9d\x58\xb7\xb2\x74\xd2\xec\x74\xa6\x15\x38\xe3\x89\x23\xb4\xa2\x27\x75\x1f\x46\x50\xa9\x0b\xf7\x68\xc7\x9e\xa4\x82\x8d\x8d\xf3\x89\x74\x47\x27\x5f\x56\x49\x36\x57\x0b\x82\x92\x02\x85\x89\x18\x02\x2d\x81\x0a\xd1\x33\xb3\x2c\x1c\x75\xe7\xba\x2e\xf5\xb9\xf6\xa2\x1f\x7b\xbb\x20\x37\x6e\x9a\x38\x8b\x0f\x5e\x67\x3f\x90\xd7\x99\xae\x8b\x0a\x42\x5f\x85\x47\xc9\xc7\xd9\x44\x5d\x31\x87\x14\x99\xc8\x1b\xa5\x25\x38\xdb\x89\xc9\x04\x95\x13\x04\x4a\x28\x10\x0d\x3d\xb7\x25\x4a\xe6\xd7\x61\x77\xc8\x30\x50\xf5\x09\xbc\xa1\xc3\x41\xe2\x17\xa4\x20\xc2\xa3\x5d\x1a\x58\x51\x94\x98\x18\x89\xf1\x2b\x0b\xdb\xeb\x5a\x5a\xe6\x8b\xd1\x58\x2f\xa9\xb5\x31\x1f\xf2\x8c\x6c\x6d\xcb\x8b\x88\xef\x35\x08\x4a\x7a\x42\xc2\x7c\x11\xc1\xbe\xf6\x35\x6c\xab\x29\x08\x9b\xb5\xb5\xb0\x9b\xf8\xbd\x0e\xca\xed\xd2\xac\x2e\x4b\x40\x43\x9c\xa9\x32\x40\x00\x7d\x76\x19\xde\xb9\x49\x50\x1c\xc7\x4c\x92\xbd\xe5\xdf\x8a\xe6\x8f\x86\x22\xf9\x66\x24\x75\x2d\xd3\x6f\x56\xcb\x1f\x0c\xc5\x6f\x56\xcb\x1f\x74\x2d\xa5\x98\xda\x36\xc5\x12\x21\x07\xa2\x90\x20\x95\x2e\x94\xc8\x7a\x4a\x0c\xdd\x9d\xab\x8a\xb2\x25\xa1\x3e\x5c\x01\xb3\x5b\x63\x5c\x0e\x80\xb5\x36\x09\x2c\x9b\xac\x84\x82\xf9\x71\xf5\x83\x3a\x29\xce\x10\x16\xdc\x28\xb4\x9f\x09\x26\x25\x9b\xbb\xf8\x23\x22\x8b\xef\xa2\x18\x00\x35\x44\x6a\xc3\x7b\x79\x13\xee\xc9\x84\x39\xab\xe1\x8e\x3c\x43\xff\xd7\x81\xc7\xfc\x2a\x44\x92\x06\xb3\xe9\xe8\x6c\xd5\x0d\x9c\xe9\x3e\x56\xdb\x84\xc7\x93\xa0\xbe\x2b\x34\x22\x73\x55\xbb\x42\xb6\x4e\xd3\x38\x8e\xe9\x66\x13\xc8\x1e\xa8\x2e\x17\xe9\x51\x36\xa2\x91\xec\x83\x50\x94\x2a\x8d\xd4\x9c\x99\x63\x6a\x96\x2b\x96\x46\xde\x0c\x2a\xea\xaf\xfe\x0f\x49\x66\x77\xaf\xf4\xd5\xd4\x51\x1e\x3b\xc1\x88\xe1\x6b\xf4\x97\x3f\xbd\xc2\x41\x00\x37\x82\x04\x93\x61\x0c\x2d\x40\x56\xb3\x6a\xa0\x36\xc4\x20\xd9\x70\x3c\x6e\x70\x9f\xb5\x86\xe6\x4e\x14\x5a\x5a\x00\x33\x22\xa6\xff\x11\xbc\x38\x46\x21\xb5\x42\xdb\x13\x84\x46\xfa\x3d\x1c\xb6\xde\xa6\x26\x4e\x53\x63\xb1\x5d\xaf\xbc\x50\x91\x72\x30\x4a\x6b\x07\x7e\x06\x53\x61\x55\xfb\x18\x85\xdc\xad\x65\x6b\xdd\x8a\xda\x6d\x93\x61\xa2\xfd\x22\x85\x60\xad\x59\xcc\x31\x8f\xc7\x13\x84\xe5\x18\xfa\x5a\x02\x4d\x64\x7a\x02\x94\xb5\x1b\xe1\x6f\x5f\x9c\x14\xc3\x7d\x25\xa6\xdb\x59\x4e\xde\xce\x72\xf2\x06\xcb\x69\xb8\x79\xb7\x16\x95\xfd\xaa\x0c\x69\x27\xa7\x83\xf2\xb3\xba\xaa\xae\x7a\x88\x17\x27\x54\xb2\x9d\xd6\x34\xc4\x04\xf0\x90\xac\xd9\x97\xa0\xc1\x20\xf1\x66\xce\x85\xd8\x16\x12\xb4\xd9\x84\xb9\x0a\xf1\x80\xa9\xe6\x76\x11\xc8\xbd\xb4\x44\x25\x89\x8a\xf5\xd2\x67\x2d\x43\xed\x03\xc6\xb6\x8b\x26\x43\x5e\xe2\x03\xa9\x84\x53\x2c\xc6\x97\x67\x11\x38\x4f\xf8\x9d\xc8\x24\x83\x7d\xe1\xfd\xc3\x57\x07\x52\x75\x26\xa9\xd5\xc2\x42\x77\xa3\x46\x33\x45\x4d\x12\x03\x93\x30\xa8\xda\x4a\x02\x6c\x24\xab\x37\x8f\xb1\x37\x7f\x01\x3b\x9d\xdc\x3f\x82\xa1\x6f\x12\x55\x03\x00\x45\x00\x61\x39\xab\xc0\x44\x46\xeb\x79\x1a\x22\xb9\x92\x16\xe3\xef\xe2\xb8\x31\xbb\x8e\x76\x16\xe3\x31\x2d\x76\x53\xc4\x71\x9c\x19\xf3\x95\x75\xad\x15\x14\x49\x03\x16\xfa\xb7\x38\x55\x0f\x2d\x1d\xf0\xb5\xdb\xbe\x3b\x1f\xa9\xda\x0d\x65\x81\x28\xa4\x98\xdb\xfb\x60\x9d\x55\x30\xca\x9d\xb8\x9b\x18\xf8\xcd\xd7\x64\x73\xc7\x6d\xb4\x76\x4b\x53\xe9\x68\x3c\x29\xc5\x72\xa6\xd1\x2a\x5f\x85\x48\x6f\x36\x2d\xc6\x42\xaf\x79\xe5\x4b\xc9\x85\x2c\x67\xbc\x32\xe3\x3d\x21\xe5\xd1\x31\xd7\xd6\x19\x99\x2d\x7f\xd2\x45\x98\x8d\x73\xb0\x29\x42\x4f\x2c\xde\x3b\xe8\xdd\x30\x92\x7c\x2e\x85\xbc\x07\x18\xae\x4a\xe0\xdb\x3b\x54\x02\xdf\xde\x41\xe9\xd4\xf9\x18\x85\x39\x2a\x6d\xed\x1b\x52\x86\x70\x6f\xe9\x62\xf1\x9c\x69\xc1\xfd\xd3\x43\xd9\x3d\xdf\x4a\x6b\x6c\x5a\xfd\xe2\xfe\xbe\x63\x6a\x9a\xd8\x9d\xc9\x7c\xbd\x27\x33\xef\x8b\x56\xd2\x08\xd4\x72\x17\x0b\xf0\x1f\x34\x93\x8a\x6d\x9b\x5f\x4a\xcd\xf7\x8f\x9a\x5d\x8e\x41\x34\x8d\xb9\x3b\xb9\xb8\x25\x57\x59\xeb\xb8\xa1\xa4\xca\x8e\x04\x27\x35\xca\x1a\x63\x28\x16\xb5\xd1\x74\xca\x11\xcc\x99\x6b\xbf\x08\xbc\x84\xb1\x1b\xd8\x6c\x24\x42\x9f\xea\xe6\x90\x8b\xd3\x80\xea\x53\x53\x51\xf7\x1c\xae\xf4\xa8\xc5\xe2\xa4\x79\xce\x36\x3d\x34\xb4\xc7\x0c\x82\xda\x59\xa3\x59\x71\xea\x82\x7d\x01\x1e\x04\x98\x74\x40\xf0\x57\x95\xf7\x84\x21\xa0\x8e\xe6\xd3\xd1\x83\xf6\xbc\x73\xb5\x31\x47\x13\x49\x48\x85\xa5\x5b\xd7\xb7\x32\x08\xd8\x4f\x2d\x55\xa3\x3c\x3a\xe1\x79\xb3\xb1\x14\x8c\xd6\x38\x03\x89\x2c\xe7\x74\xf1\xa8\xf5\xa2\x27\x77\x49\x76\xab\x63\xd6\x24\xda\xdc\x7c\xe6\x51\x62\xee\xc5\x71\x3a\x18\xa4\x5b\xb0\xc1\x81\x3c\x23\xcb\xfc\x9e\x5c\xdc\x14\x84\xdd\x13\x86\x42\x21\xd2\xcc\x34\xdd\x79\x1c\xfc\x1f\x41\x13\x22\xa3\xe2\x55\xbc\x08\xd7\xa0\x00\x12\x13\x68\xa5\x6d\xb1\x94\x35\xd4\xfc\x28\x18\x4f\x82\x91\x5a\xc3\xaf\xa5\x5e\x76\x3e\xaf\x28\x43\x95\x97\x78\x26\x3a\x62\xbc\x9c\x94\x24\x2d\x48\x3f\x8d\x57\x2d\xf3\x97\x8f\x0f\x26\x98\x0a\xb2\xfa\xc0\xc9\x46\xf6\xf1\x93\xd9\xe3\xe2\x14\x54\x60\x2a\x4a\xa1\x25\xea\xd1\xaa\x5f\x53\xa4\xb0\xcd\xb4\xbf\x4c\xa7\xa3\xe6\x1e\x1d\xd9\x8d\x35\x5c\xf8\xbd\x9e\x7f\x68\x74\x17\xde\xe3\x55\xeb\xfe\x10\x92\xea\x98\x34\x7a\x77\x35\x68\x69\x25\x28\x2d\x1a\xdc\x6b\x73\xfe\x1b\x6b\xd7\x91\x10\x37\x64\x07\x89\x7e\x3a\xd4\xfb\xc4\x98\xe1\x2c\xce\x36\x9b\x20\x29\x66\xc1\xc4\xe6\x42\xef\x6a\xbb\x2e\xd4\xb4\x7d\x0d\xd1\x6a\x07\x93\x27\x05\xf7\x68\x2a\xf9\x38\x9f\xe0\x22\x4e\x44\x35\xd6\x71\x32\x3e\x9c\xe0\x54\xb2\x9f\x60\xed\xc4\xa4\x66\xcb\xec\x41\xd2\x83\xcc\xc4\xce\x2d\x90\x9c\x49\x62\x9a\xaa\x93\x25\x98\x93\x62\x26\xa6\xda\xfa\x68\xff\xf0\x2f\xe9\x28\xd5\xba\xce\x83\x12\x09\x1e\x52\xf6\xe0\xcc\x91\x82\xcd\xdd\xc8\xd6\xeb\x94\x66\x54\xc1\xe6\xe5\x0a\x48\xd2\x4b\xc2\x6e\x49\xdb\x47\x79\xcb\xd0\xf6\xf5\x81\x24\x9f\xa7\x05\xf1\xbb\x2c\x76\xb5\xb8\xd1\x45\x74\x44\x96\x54\xd6\xdb\xdb\x2f\xd7\x81\xe4\x47\x55\xd7\xce\xa4\x65\xb6\xad\x94\xa7\x62\x83\xbc\x22\x5d\xef\xc3\xa8\x5d\x5d\x12\x41\x57\xdb\xeb\x21\x8f\xb9\x84\x81\x3a\x62\x3a\xe5\xc8\x20\x4b\xc9\xd4\x79\xcb\xd8\xdb\xa3\xd3\xc9\x2a\xde\x2c\x0c\xee\x72\x4f\x87\xaf\xf9\x0f\xf5\x13\x5b\x72\x51\x92\x01\xa9\x0e\x67\x0e\x66\xb0\x0c\xe9\xbc\x99\xc6\x6c\xf8\x4c\x1e\x8b\x90\xe9\x83\x3d\xb3\x6d\xb6\x75\xdc\x07\x71\xb2\x13\xc1\x6b\xb1\x71\x3e\xa9\x2e\xab\x4a\xa2\x7a\x3d\xe6\x7e\xf8\x1b\xa6\xcb\x90\xc9\x36\x1b\x6e\x59\xf0\xb3\x2d\x7d\xa3\xa6\xf5\xb7\x8d\xc8\x20\x18\x46\xa9\x8c\xe1\x1e\x65\x0c\xd7\xf7\x03\xa4\x67\xe3\x8a\xd8\x9d\xc4\xbd\x9d\x04\xd8\x1f\x13\x2c\x3d\x24\xc6\xcc\xf0\x40\xa4\xdc\xd2\x40\xb3\xf8\xbe\xca\x29\xc2\xc3\xa4\xa8\x29\x7e\xa4\xfe\xda\xd3\xda\xcc\x21\x62\xdc\x67\x85\x24\x68\x71\x0e\xa5\xde\xb7\x0d\x78\x71\x75\x5d\x93\xcc\xe7\x3e\x09\xd4\xd0\x81\x83\x8b\xe0\x3d\x15\xc5\xa9\xc4\x5c\xc5\x3e\xdc\x9e\xcb\x8a\x8f\xc8\x05\x83\xb1\x3d\xb5\x14\xde\x65\x04\xdd\x56\x67\x10\x15\x9c\xb6\xfb\x7d\xb5\xed\x13\xc2\x58\xce\xf6\x01\x47\xb0\x0d\x00\x4c\xab\x1b\x6f\x92\xd9\xe7\x9b\x35\xcb\x5a\xb0\xbc\x7c\xbe\x38\x27\x6b\xc6\x48\xc6\x2f\xd7\xd9\xfb\x3c\x5f\xf9\x70\x49\x55\xec\x16\x70\x28\xf9\x6b\x4e\xb3\xf8\x0e\x93\xe8\x86\xdc\x52\x07\x51\x30\x95\xaf\x24\x37\x4f\xb2\xb9\xfb\x0d\x62\x2d\x01\x1f\xac\x82\xb9\x79\x0a\x4a\xcd\x47\xa5\x29\x4b\x1d\xb7\x50\xb8\xdd\xbe\x52\x29\xe6\xd7\x74\x49\x98\xcf\xef\x3c\x15\xc9\xe4\x57\x25\x59\x24\xd9\x8c\xa4\xcd\xf4\xa9\xf3\x45\xa6\x4d\x13\x4e\x98\x97\x28\x7c\x69\xa9\x57\x9e\xcd\xc8\xcb\x04\x17\x69\xc0\x4e\xc0\x72\x5d\xac\x53\x6b\x6f\xac\x16\x2d\x8f\xd6\x59\x71\x47\x17\xdc\xba\xcf\xc7\x55\x67\x5d\x64\xb3\xaa\xc3\xb8\xd3\xc9\x17\xb5\x8a\x35\x3a\xda\xc9\xeb\x36\x2a\x23\x5f\x5e\x28\x8d\x75\x6c\x14\x28\xb8\x0e\x45\x4b\xdc\xbe\xe5\xd6\xa8\xf9\x56\x9e\x1e\x37\xb9\xe8\xa2\x39\xb9\xc9\xd7\x6d\xed\xd4\x1f\x5b\xda\xc8\xef\x58\xce\x79\xcb\x64\xd4\x1f\x5b\xf2\xde\xd0\x6c\x1e\x13\x13\xdf\xef\x72\x9d\xc5\x24\xaa\xd6\x5f\x4c\xa2\xbf\xad\xc9\x9a\x14\x10\x80\xbe\xb8\x5f\x81\xb3\xd8\xbf\x89\x57\xce\x79\x8d\x13\x08\x51\xa7\x50\x32\xc3\x20\x18\x82\x9a\x8c\x25\xd9\x3c\x5f\x86\x68\xa8\x3d\x72\x42\xd0\xfd\x4a\x2d\x7a\x10\x05\x38\x08\xc4\x66\x53\xa7\xac\x61\x92\xc7\x55\xa4\x44\xe5\xe8\x7a\xcd\x92\xac\xa0\xe6\x1d\xf8\x05\x06\x38\x00\x27\x88\x4b\xfd\x4b\x07\x6b\xc3\xc5\xa4\x67\xea\xaf\x91\x96\x5d\x57\xe8\x35\x7e\x52\x8f\x50\xf2\xa8\x2a\x30\xcf\xde\x88\x8d\xc0\xd1\x8a\x25\x31\x29\x71\x9e\x9d\x66\xf3\x9a\xd8\x98\xc4\x1c\x3e\x88\x26\x5c\x4b\xf4\x74\x16\x39\xbf\xf5\xd7\x73\xc2\xef\xf2\xf9\x28\xc8\x33\x05\x8a\xb1\x48\xd7\xc5\xdd\x28\xb7\xe1\xaa\x66\xf6\xf8\xb1\x75\xe6\x1b\x3a\x67\x90\x52\xed\x0a\x29\xed\x4c\x00\xa0\xa9\x67\x31\xfc\x16\x39\xb1\xf3\xf9\xe9\xd9\x53\x60\xd1\x53\x33\xe3\xbf\x6e\xe5\x74\xa3\xcc\x5c\xca\xb6\x61\x02\x1b\x67\x36\xe5\xcc\x50\xbe\x73\x6f\x28\xb8\xbe\xa1\x60\x08\x95\x2e\xe3\xa0\xdc\x9a\xbf\x55\xb8\x84\xdd\xf1\x92\x9e\x1b\x03\xa1\xd0\xc1\x9e\xbe\x4d\x00\x84\xac\x3d\x00\x02\xea\x65\x35\xa4\xb0\x5a\x00\xaa\x11\x00\x9e\xb6\x05\x47\xc8\x90\xbe\xe1\xb4\x78\x07\xea\x76\x36\x67\x34\xdb\x16\x1a\x40\x25\x10\x3c\x9c\x7c\x34\x38\x0d\x2f\x0a\x11\xe7\xf3\xe2\xf5\xe2\x76\xa7\xf9\x2c\x9e\x62\x12\x3d\xc4\x0f\xd0\x6d\xb3\x64\x49\x52\xfa\x77\x12\x9f\x8a\x9f\x49\x71\x47\x98\xf8\xf5\x05\xb6\x73\xf5\xe9\x4a\xfc\x00\xbb\xa7\xc5\x63\x7c\x01\x22\xfd\x9c\xb0\x62\x96\x33\x12\x1f\x43\xc2\x15\xe5\x09\x24\xfd\xbc\x45\x6a\xba\x25\xfc\x0a\x9a\xda\xdd\x9a\xba\xca\xb2\x5d\x20\x2b\x9e\x4f\xba\xb0\x49\xab\xf1\x7c\x35\xee\x4f\x27\xaf\x6e\x95\x1a\x2c\x8b\x00\xb2\x2a\x3c\x24\xdf\xfb\x2e\xbf\x4e\xe5\xdd\xbc\xdc\xde\x29\x0e\xf6\xc1\x65\x39\x89\x5f\x85\x7f\xec\x6f\xfe\x98\x6e\xfe\x88\x36\x7f\x14\x68\x18\x46\xe8\xe8\xd5\x2d\x2e\xe2\x57\xe1\x7f\x6c\xfe\x78\x85\xc2\xf1\xf1\xfe\xff\x7f\x82\x5e\xdd\xe2\x75\x97\x52\xaa\x7b\xd8\xa4\xb1\xe0\xf4\x7a\x3a\x62\x11\xcf\x3f\xad\x56\x84\x9d\x24\x05\x09\xd1\x28\x08\xca\xaa\x6a\x85\x9f\x2c\xcf\xdf\xe7\x0f\x3a\x07\x5c\x58\xa5\xf1\xab\xff\x10\x75\x9f\xaa\x4a\xe3\x59\xfc\x2a\x8c\x90\xb7\x39\x0b\xd5\x9c\xcd\x1f\x11\x0a\xc7\xc9\xfe\xdf\xa1\x45\x77\x5b\x5b\x54\x49\x9b\xad\x0d\x09\xa6\xc1\xd0\xd3\x18\xcc\x1a\x46\x7e\xd5\x48\x0e\xc3\xec\x28\x6b\xe4\x41\x25\xce\x2a\xc5\xd1\xab\xc0\x2b\x72\x81\x71\x9b\xf8\xcf\x74\x96\x60\x65\xcc\x8f\x19\x66\x56\x94\x55\xe9\x1b\xfd\x2a\xa8\xbe\x2f\xda\x7a\xd6\xaa\x0a\xf4\xec\x3c\x7e\x05\x9d\xf4\xc7\x7c\xa2\xc6\x7f\x28\xba\x6b\x15\xbf\x12\x7d\x5b\x0c\x5f\xdd\xe2\xe5\xf3\x26\xc3\x1c\x07\x7f\x3a\x9c\xfe\xe9\x3b\xab\x36\x2b\x1c\x4c\x03\x54\x1f\x57\x7c\x5f\x4d\x3c\x51\x83\xf5\xc1\xc1\xc9\xc1\xfe\x1f\xeb\x83\xef\xfe\xf9\x1d\x8c\xd9\xe3\xf3\x0a\xbe\xef\xda\xe6\xdb\x46\x9b\x45\x69\x37\xcf\x2b\xed\xb6\x6a\x66\xad\x5d\xd5\x89\x3f\x75\x0c\x5f\xf6\x5c\x9d\x3c\x43\x9b\x4d\x03\x70\xe6\x3b\x04\xd7\xdb\x5d\x8e\x17\x7c\x88\x10\x6e\x6a\xcd\x59\x7c\xd0\x6b\x54\xf6\xd5\x3f\xfd\x9f\x70\x7c\xb0\xff\x2f\x93\xa1\x5c\x22\x8e\x6a\x5e\x1d\x18\x47\xab\x84\x15\xe4\x2c\xe3\x61\x86\x0f\x0f\xd0\xfe\xe1\x88\x0d\x87\x38\x8f\xa9\xd1\x34\x1e\xf1\x31\x9d\x68\xfd\x8f\xd2\x0f\xca\x13\xa2\x12\xce\xf3\xa3\x7c\xa4\x54\x10\xf9\x51\x20\x59\xa0\x60\x64\xae\x38\xf2\xa3\x20\x18\xc9\xcd\x2d\xcc\xa5\xfa\xdf\x58\x9b\xc9\xd7\x08\xae\xae\x45\xbf\x55\xaa\xd2\x07\x67\x04\xe4\xc2\x79\x25\x26\xa7\x95\xe6\xd4\x4a\x73\xa3\x2e\xa4\xaa\xaf\x5f\xac\xaf\x79\xe3\xeb\x95\xf5\x75\xdd\xf8\x7a\x61\x7d\xbd\x6b\x7c\x3d\xb6\xbe\x2e\x1b\x5f\x3f\x5b\x5f\x1f\xf5\x57\x26\xa3\xba\xd5\x11\xd8\x23\xd9\x01\x83\x81\xef\x30\xa1\xa4\x08\xe5\xf7\x6a\x5a\xe0\xa7\x87\xd1\xd3\x2c\xcf\x16\xf4\x76\x6d\x0e\x15\xfb\x88\x39\xc4\x0f\x8c\x72\xa2\x3f\x81\xe1\xb0\xe7\xc4\x79\x50\x48\xbf\x25\x4e\xf3\xd9\xd7\x51\xfc\xc6\xcc\xe9\x54\x5f\xd4\x94\x25\xd6\x67\xfe\x37\x69\xf2\x95\x69\x72\xc5\x67\x7c\x13\xc2\xa7\x15\x61\xcd\xb1\x7c\x13\xba\x5f\x0c\xdd\x8a\xc3\xf9\x26\x84\x8f\x0d\x61\xcd\x47\x7d\x13\xb2\x17\x15\x59\xc3\x82\x7d\x13\xc2\x9f\x35\x61\xb1\x95\xf7\x1a\x6c\xad\x97\x6b\xed\xa8\x80\xac\xf8\xae\x5a\x5c\x0f\x02\x36\xa4\x9e\xaf\xd5\x51\xef\xa4\xf0\x6a\xf8\xc6\x64\x52\x9a\xe0\x27\x8a\x23\x57\x9e\xf8\xaf\x48\x36\xcb\x41\x66\xee\x58\xd3\x33\xe5\xae\x41\x85\x10\x0c\x59\x5d\xad\xa9\x5f\x25\xaa\xb1\xd4\x6e\xd6\x8b\x05\x61\x31\x91\x98\x4b\x62\x27\xf9\x98\x17\xf1\x81\x82\xa3\x13\xbc\xf2\xc1\x36\x35\xa9\xac\x6c\x53\xf3\x4c\x7e\xfc\xee\x7f\xfe\x4f\x0b\xe8\x0c\xe4\xec\x30\xb8\x58\x89\xe4\x7d\x41\xa3\x9f\xdf\x13\xd6\xff\xdf\xfb\x37\x94\x17\x51\xff\xa7\x9c\xf7\x01\xde\x2c\xd2\xe8\x5b\xb2\x62\xca\x56\x69\xc3\x1b\xc7\xe3\xfe\x77\x3f\xfc\xf0\xbf\x91\x5b\x6d\x3b\xa3\x36\x9c\xaf\xd4\xdb\xf1\x77\xaf\x59\xf3\xf6\xc0\x46\x76\xb0\x77\x1d\xba\x08\x83\x6c\x2d\xa6\x93\x05\xf1\x30\x18\x64\x3f\xfe\xf3\x77\xff\xf2\xcf\xff\xf2\xff\xfb\x5f\xdf\xfd\x8b\xb7\x7d\x84\x25\xd9\x5c\xb6\xed\xfb\xef\x9c\xc6\x65\x2d\x8d\xcb\x24\x46\xb4\xec\xec\x66\x0b\x4a\xcc\xa3\x55\xdd\x7e\x5b\x76\xf2\xfe\xa1\x86\xb2\x96\x39\xc6\x64\x78\x38\x69\x56\xea\x9a\x3d\xd2\xec\xb6\xcf\xf3\x3e\xd0\xe9\xe7\xaa\x92\x34\xeb\xaf\xf2\xd5\x3a\x4d\x38\x99\xf7\x8b\x34\xe7\x7d\x9a\x15\x9c\x24\xf3\x7e\xbe\xe8\x27\x7d\x46\xe0\xc2\x56\x7e\xaa\xd5\x1c\x4a\x8a\xb9\xa9\xdb\x6f\x94\xdf\x35\xd8\xe5\xff\x0e\x35\xc4\xee\xab\xef\x26\x31\x33\xea\x74\xcf\xc2\xe1\xb5\xb5\x98\xe6\x0f\xfb\x29\xb9\x27\x69\xe7\xd5\x78\xc5\x93\xd9\xe7\x58\xfc\xcd\x59\xe2\x5e\xa0\xb5\x2d\x45\xb5\x12\x13\x71\x1a\xc6\xe3\x89\xac\x32\xe8\x48\xb7\x2e\xbd\xfa\x0d\x45\x65\x84\x01\x99\x35\x0c\x21\x90\x15\xb3\x99\xdb\xb0\x31\x26\xd9\x70\xd8\x23\x69\x41\xaa\xf8\xdd\x93\x5e\x55\x7e\x56\xda\x57\x12\x40\x69\xcc\x27\x62\xb3\x90\xf7\x1d\x8c\x2c\x5a\x2f\x30\x64\x6a\x32\x81\x94\xcc\x56\xff\x13\xbb\xc1\x10\x9a\xdd\xd4\xb9\x2a\x9a\x98\x61\xd2\x3d\xe9\x89\x0b\xe5\x74\xe2\x57\x41\x5a\x8e\x55\xb3\xef\xc9\x2c\x26\xdb\x7a\x1d\xf0\x10\x3d\x9b\xbe\x98\xcd\x12\x09\x5e\xd0\x30\xd6\x07\xa2\xf5\xf0\xfc\x8e\xe5\x96\x85\x25\xdf\x9e\x8f\x5b\x19\xad\x4c\x96\x0c\xea\xcf\x86\x99\xcc\x38\xcb\x57\x75\x3b\x3f\x9d\x54\x8c\x9f\x79\x96\xa3\x03\x47\xed\x65\xf2\xd0\x96\x83\xa8\x95\x7e\x4b\xb8\x9b\xca\x1d\xf0\x8a\x60\x03\xd5\xca\xd4\x53\x83\x5b\x89\x54\x29\xc9\x7c\x87\xa7\x9b\xd4\x9a\x05\x62\x5d\xb1\xda\xfa\xcc\xf2\x79\xed\xde\x14\x18\x80\xfd\x9b\xe4\x86\x80\x8d\xbc\x4e\xd8\x39\x58\x67\x41\x98\x84\x56\x7d\xb3\xa6\xe9\x9c\x30\xbf\xbd\x28\x8d\x16\x39\x53\x30\xac\x52\xc5\xad\x2c\x4f\x49\xf4\x21\x9f\x93\xb7\x17\xe7\xd7\x8c\x90\x93\xbc\xda\x61\x5a\xc2\x65\x11\x6b\x12\x33\x6b\x5a\x10\xcb\x3e\x9b\xa3\xcd\x06\xee\x18\xa5\x57\x52\x26\x38\x49\x5e\xbc\xcf\xf3\x82\xa0\x90\x61\x52\x81\x7c\x36\xe6\x6b\x26\xb1\x56\x3f\x15\x24\x25\x85\x76\x54\x74\x83\xc0\xe9\x10\xa4\x8d\x8f\xb5\xe1\xd5\x28\x93\x6e\x72\xb8\x29\x81\x52\x8e\x39\x67\xf4\x66\xed\xba\xad\x40\x0f\x13\xe7\x33\xcc\xd2\x12\xb3\x32\x64\x91\xa7\x9f\xc4\x58\xb7\x75\xa1\x8e\x9f\xed\xed\x3d\x6d\x78\xa7\xcd\xa9\x01\xb6\xd9\x0b\x03\x2b\x7b\x13\x59\x43\x9d\xe6\xb3\xcf\x6f\xc9\x0a\x60\xd7\xb8\xb7\x9b\x33\xdd\xcd\x34\xce\x9a\xdd\x4c\xa3\xe9\x34\x5f\x91\x0c\x08\xd5\xf1\x79\xd4\x9e\xec\x29\x6d\x38\xd4\x50\xc9\xc9\x6a\x45\xb2\xf9\x49\xbe\x84\x3e\x0d\xfe\x69\x78\x33\x0a\x86\x7c\x18\xfc\x13\x80\x31\x56\xb2\xbf\x55\x4c\x35\x41\x50\x89\x45\x05\x66\x69\x5e\x90\x46\x0d\xdc\xdc\x55\x1a\x2b\x3b\x6e\xa9\xc4\xbe\xa8\xc4\xfe\x7e\x6b\xed\x45\xed\x64\xd1\x32\xe7\xcf\xd7\xe7\xef\x63\x8f\xa1\x98\x9f\xfa\x6d\xba\x64\xff\x14\x80\x91\x51\x70\x7d\xfc\xe6\xfd\x69\xa0\xc2\x6d\x44\x44\x4e\xad\x88\x27\xb7\x1f\x92\xa5\xb1\xc6\xe5\xc6\xf4\x33\xf8\x41\xe6\xa3\x3f\xee\x1f\xa2\x80\x33\xc8\xa9\xf6\x40\x3a\x3c\xc4\x74\xf8\x3d\x02\x1f\xdf\xe0\x07\x7e\x93\xcf\x1f\x7f\x84\xbe\xfc\xe1\x95\xfa\x81\xca\x00\x72\x1c\xb5\xd4\xac\xff\x4f\x01\x1a\xb9\xfd\x56\x35\xd0\x59\x97\xda\x2e\x66\x7b\x0b\xad\x2d\x1b\x60\xbf\x67\x8c\x70\xf2\x26\x5f\x67\x73\x69\x5f\xa8\x1b\x0c\x2e\xc1\x76\x87\x5e\x3b\xf7\xa4\x5a\xa7\x23\x21\xd6\xe3\x30\x8b\x43\x79\xc4\xa3\x8a\x80\x54\xb6\x84\x34\x66\x70\x8a\x5e\xd1\x9b\x94\x66\xb7\xe8\x28\x8b\xd2\xa4\xe0\x00\x7c\x3c\xa2\xd1\x8a\x91\x7b\x9a\xaf\x0b\xfd\x59\xeb\x6f\x76\xf7\x4a\x98\x0f\x06\xdf\xc7\x71\x9c\x47\x62\xe7\xbd\x7e\x5c\x11\x15\x37\xa5\x99\x7e\xd3\x9c\xbb\x55\xab\x9c\x5e\x84\x36\xc3\xcc\xf4\x6c\x50\xda\x96\xb9\x3e\x39\x32\x42\xe6\xc5\xe9\x17\xce\x92\x13\x91\x53\x0c\xf7\x96\xcf\xf1\xde\xa1\x53\x17\xbb\x34\x6b\x25\xa0\x2e\x89\x44\x6d\xc5\x2a\x6c\x54\xd6\xec\xde\x7a\x4a\x0e\x06\xc1\xf5\x9b\x8b\xb7\xbf\x07\x7b\xfe\x99\xad\x2b\x6d\x51\x0b\x03\x98\xa4\x1a\x03\xd7\xf8\xe2\xd3\xec\xb6\xd9\x26\x25\xa5\xc1\x6d\xa5\xce\x0f\x4a\x36\xb7\x1d\x16\x79\xa7\xdf\x4b\xe5\x0a\x72\x49\x96\xb9\x67\xff\xe7\x95\xc7\x74\x53\x35\xe9\x65\xaa\xbe\xb3\x99\xaa\xef\x26\x0a\xc8\x3e\x56\xc7\xc7\x12\x4c\xe4\xdd\xd3\x23\x90\x2e\xf3\x01\xea\xe5\xee\x21\x11\x88\xc5\x13\x60\x86\x30\x8d\x68\x56\x10\xc6\xdf\x48\xfc\x3e\x8e\x73\x9c\xb9\xed\x6b\xb4\xc1\x6e\x25\x28\xe1\x4b\x9c\x89\xe3\xe6\x03\x79\x50\x29\xd4\xe1\x8e\x6a\xec\x44\x0e\xe2\xa9\x89\x45\xe0\xbd\x11\xb3\xd1\x1e\x5a\x98\x8d\x35\xa7\xce\xef\xfb\xa5\xfd\xeb\x81\x32\xb2\x0f\xb0\x9a\xdc\x7e\x6d\xc4\xfe\xea\xd5\x8a\xe5\xb7\x2c\x59\x6e\x89\x9d\xd7\x60\x5f\x54\xd5\xe1\xd6\x4c\xc7\x56\x50\x97\x85\x4d\x61\x01\xb3\x98\x44\x74\x2e\x3d\x20\x08\x4f\x00\xb1\xf5\x46\x6c\xf0\x38\x89\xd9\x66\x13\xcc\x52\x4a\x32\xbe\x1f\x0c\xff\x3a\x1c\xaa\x4d\xe2\x89\xce\x47\x09\x16\xa9\x47\x14\xcb\xc1\xb4\xef\xdd\x99\xb6\xb2\x66\xd2\x14\xd7\x42\x7e\x60\x98\xa2\x11\x35\x9c\x34\x04\x56\xf8\xd7\xab\x8b\x0f\x11\xe8\x9a\xc3\x1c\x21\x2c\xb6\xc8\xb7\x21\xc1\xb2\x10\xa8\xc9\x88\x63\x46\x16\x84\x31\xc2\x46\x45\x89\xca\x52\x19\x66\xac\x6f\x1b\x7c\x46\x65\x12\xdb\xd0\x37\x26\x96\xbe\x31\xff\xf1\xfb\xa3\x7c\xff\xfb\xd1\x01\xc2\x45\xfc\xfd\xeb\xe2\x87\x1c\x60\x68\x93\x71\xb1\xff\xbd\xad\x79\x2c\x84\x48\xc0\xf2\x07\xe5\xca\xc2\x48\x32\xbb\x4b\x6e\x52\x82\xc2\xe0\x5c\x46\x25\xed\x2b\x75\xc6\x39\xe1\xc9\x3c\xe1\x49\x7f\x91\xb3\x7e\x30\x64\x1a\x61\x14\x72\xce\xe9\x8c\xa3\xd0\xf1\x8f\x8c\xf2\x55\xe1\x81\xd8\xc6\xb9\xee\xbc\x64\x9c\x4f\x7a\xc5\x03\xe5\xb3\xbb\x90\x81\x76\x03\x3d\xcd\x92\x82\x04\x3c\x0f\x46\xeb\x31\x53\xa1\xa4\xc8\xb0\x90\x4e\x20\x3d\xf8\x48\xbf\xff\x2e\x18\xc1\x93\xc4\x2a\x56\x3f\xa0\x1b\xed\x6c\x4e\x26\x19\x43\xd6\xfe\x6c\xb0\xd3\x65\xf0\xd6\xb0\x40\x76\xfa\x82\x33\x37\xb1\x51\x74\xd5\x12\xca\xd0\x4a\xfb\xb5\xf4\xc5\x91\x9b\x03\xf6\x88\x1a\xfd\x7d\x10\x0c\x5b\x4a\x91\x63\xe8\x16\xe5\x4f\xef\x4b\x09\x88\x6f\x56\xc2\xbd\x3d\xa7\x33\x56\x8c\x2e\x29\xa7\xf7\x4e\x7f\xf8\xae\x55\xc8\x8f\x3f\x7e\xaf\x07\xe8\x7f\x0d\xd4\xe8\xf4\x0f\x46\xfa\x86\x10\xc8\xf5\x0f\x47\xf6\x0d\xf1\x07\x50\x26\x85\x0c\xc9\x8f\xdf\x8d\x9a\xd7\xc7\xe6\xe3\xf7\x23\x3d\xfa\x35\xd2\x7b\x87\x2e\xe9\xbd\x83\x1a\x35\xe8\x4f\x45\x43\xbe\x2a\xe1\xd7\x3f\xc3\x64\xe8\xff\xcf\x96\x2a\x69\x83\xde\x96\x19\x8f\xca\x32\x04\x86\xc7\xea\x2c\x0d\x03\x6f\xf7\x95\x8e\xf5\x48\x98\x58\x3e\xf6\xb0\x2a\xfe\x51\x90\x6b\x8e\xac\xf5\xb1\x36\x60\x69\xf2\xf7\xc7\x7d\x38\x05\x93\x8c\x37\x32\x5e\xf0\x3b\xc2\xc2\x02\x00\x50\xc7\xb0\xb2\x20\x0e\xdd\x7a\x62\x36\x89\x2b\x57\x84\x56\x3b\x05\xd8\xe3\xe5\xb7\x72\xf9\xfa\x07\x18\x34\x26\xfa\xfc\x73\xad\x62\x5b\xfc\x73\x03\xa9\xc0\x8c\x83\x21\x1c\x8d\xa0\xe3\x45\xea\x3a\x56\x70\x81\x43\xa3\x4e\x09\xc2\x60\xc8\x86\x01\x0a\x44\x3d\x3e\xbe\x3f\x3e\x39\xfd\xf9\xe2\xfd\xdb\xd3\xcb\xa9\x8c\x81\x1d\x93\xe8\x37\x26\x78\xa5\xb9\x96\x41\x49\xf4\x31\x61\x42\xd6\x7c\x4b\x16\x10\x80\x0d\x42\x33\x5f\xf1\xb9\x6c\x41\x95\xac\xfe\xfb\x34\xb9\x25\xac\xfe\xf2\x7d\xf2\xf7\xc7\xfa\xbb\x13\x38\x37\xc4\x00\x7c\x94\x87\x8e\xf3\x4e\x4a\x15\xaa\x4b\x4f\xd4\xe9\x18\x93\xe8\xf8\xa6\xe0\x2c\x99\x71\xeb\x95\x20\x6e\xfd\x3c\x07\x0f\x77\x91\xf4\xfa\xfa\xf2\x6a\xfa\xe6\xfd\xc5\xc9\x2f\xb6\x28\xbc\xc6\x69\xcf\xdb\x07\xfb\x87\x38\x4c\xe3\xf5\x66\x13\xae\xe3\xa7\x12\xa1\x71\x1a\x5d\xac\x48\x66\x22\x32\x69\x76\xe5\x60\x12\x07\xbe\x0f\x01\x4e\xc7\x69\xf4\x96\xce\x4f\x1c\xe9\xf6\x70\x12\x07\xf5\x97\x26\xa9\x94\xe4\xdf\x27\x8f\xf9\x9a\xc7\xdf\xc9\x94\xf6\x3b\x95\x10\xa2\x5c\x11\x16\x7f\x2f\x52\xa8\x1f\x81\xf1\xf3\xb9\x58\x15\x78\x11\x07\x83\x84\x73\x56\x88\x23\xd9\x6e\xf9\x02\x92\x41\xa0\xdb\xff\x1a\x3d\xd6\x81\x94\x28\xf3\xc5\xa2\x20\x5c\x6b\xf5\x21\x8e\x9a\x73\x1a\x29\xc6\x71\x9d\xcd\x8a\x78\x3c\xe9\xae\x65\x34\x7a\x21\xc8\xaa\x70\xa1\x91\x55\x8a\x51\xe7\xc9\x04\x5a\x09\x5f\x2a\x9c\x07\x9a\xb6\x2c\xb7\xb1\x55\xed\x89\x02\xb4\x55\x14\x99\xc4\xdb\x31\x44\xc7\xd9\x04\x69\x6d\x4b\x19\x22\x3b\x44\xb0\x85\xd0\x94\xc5\x64\x7c\x38\x11\xac\xcd\xf8\xbb\x89\x60\x6c\xc6\xdf\x4f\x7a\x2c\x22\x5f\x56\x2c\xa4\x08\xe7\x47\xd2\x59\x0c\xa6\x8c\x60\x3b\xc3\x0c\xe7\x98\xa3\x51\xf3\x35\x70\xb1\x76\x88\xc9\xfb\x67\x96\x33\x7f\xcc\x92\x25\x9d\xb9\xa5\xb8\x2f\x75\x19\x66\xc1\xd4\x74\x08\xa4\xf9\xe2\x85\x13\x44\xf0\x41\x8f\xf8\xc5\xe1\x6d\x44\xf6\xdb\xca\xa6\x20\x99\xcf\xc3\x80\x2e\x02\xaf\x41\x38\x5d\x84\x7b\x64\xb3\x39\x04\x30\x32\xa3\x77\xae\xa9\xfe\xaf\x7e\xff\x70\x7d\xfc\xef\xfd\xd3\xcb\xcb\x8b\xcb\x51\xff\x7f\xd0\x45\x9f\x91\xbf\xad\x29\x23\x45\x3f\xe9\xcb\x38\x8c\x7d\x5d\x03\x21\xf5\x4b\x33\x86\x47\xb1\x2b\x9d\x2d\xc2\xa7\x84\xdd\x16\x5e\x5f\x16\x18\x00\x32\x3e\x98\x08\x09\x82\xe7\x1a\x21\x07\xe1\xc3\x12\xd3\xc5\x35\x73\xef\x13\x85\x90\x71\x9f\x7f\x26\x57\x3c\xe1\x74\x06\xdb\x5d\xc8\x84\x80\xb4\x78\x97\xa4\x85\x93\x34\x1b\x0c\x7c\xa9\x33\xa4\x60\xe4\x64\x9f\xac\xb3\x94\x14\xc5\xb7\xeb\x17\x49\xef\xff\x4a\xdf\xb4\x37\xd8\xd7\x3d\x2d\x3d\x69\xf7\xcd\x03\x75\x30\x9d\xbe\xb2\x67\x20\xe6\xd1\x7f\x41\xbf\xcc\xd7\xab\xb0\xde\x3f\xdf\x75\x9e\x3b\xf8\xf0\x6b\x66\x8f\x60\xbc\x3c\x3d\x94\xa3\xa7\xdc\x6a\x4b\x6b\x4b\xf8\x60\x10\x7c\x26\x8f\xa0\x83\x18\x1f\x4c\xc4\x1e\x90\xcb\xc6\xf1\xf1\xa1\xf8\x89\x46\x39\xec\xdd\x1f\x35\xbf\x7b\x29\x44\x2c\x92\xcd\x74\x20\xd9\xdc\xee\x8b\xef\x4a\x7c\x93\xcf\x9d\xf0\x61\x22\x3b\x3f\xe3\x04\xb0\xe5\x42\x91\xfe\xaf\xeb\xe5\xea\x13\x4c\xd2\x30\x38\x7d\x7f\x75\x1a\x88\x97\xa2\x0c\xb0\x4a\x85\x24\xa2\x47\x2b\x06\x31\x5a\xac\xf0\xa1\x78\x2d\x2b\x7d\x9d\x87\xc1\xd9\xf5\xe9\x25\xe4\x23\x19\x27\xec\x3d\x2d\x78\x18\x80\xfe\x44\xbc\x4b\x85\x94\x6d\xa5\xa1\x50\x3a\x09\x83\x37\x97\xa7\xc7\xbf\xd8\x49\x4c\x16\xdf\xb8\x7c\x07\xf5\xca\x57\xe1\x77\xba\xd6\x61\xf0\xee\xec\xc3\xf1\xfb\xf7\x4e\x31\x15\x51\xf2\x85\x72\xa8\x8a\xca\x58\xb5\xa7\x35\xb3\x6a\x7f\x36\x18\xf8\xea\x50\x1b\x6b\x9a\xed\x13\xcd\x87\x7c\xb3\x5d\xd4\xd0\xfc\xba\x95\x51\x5d\x9d\x5b\xce\xac\xbe\xd0\x11\x16\x38\x9e\xbc\x38\xaf\x94\x8f\x81\x38\x4f\x06\x83\xe0\x76\x4d\xe7\xf0\xfc\x9c\xda\xcf\x73\x22\x83\x9c\xf1\xe4\x33\xe9\x27\xfd\xff\x0c\x86\x6c\x7c\x30\x19\x06\xff\xd9\x97\xf2\x25\x34\x02\xe6\x6a\x36\xce\x27\x06\x7d\xcf\xbb\x96\xff\xd9\xbf\x7a\x1b\xea\xa3\x50\x2a\x9d\x9a\xbb\x18\x06\x84\x87\x5a\x5a\x67\x30\xf7\xc5\x6e\xb4\xaf\xce\xf6\xfd\xfb\x84\xb5\x1f\x01\x5c\xbb\x1b\x42\xd7\x26\xd2\x4f\x98\x6a\x2e\xe9\x63\xc2\x92\x65\x11\x26\x1a\xae\xe5\xad\x24\x79\x35\xcb\x57\x04\xea\x77\x43\xb3\xb9\xf3\x32\xdf\x5e\x6b\x97\x80\x74\xee\x6e\xd9\xab\x4d\x6b\xac\xc8\x4f\x2d\x8d\xd0\x26\x7f\xc6\xad\x50\xf4\xf8\x66\xb3\x47\xa3\x02\x68\x1a\xae\xfc\x67\x92\xae\x88\x1c\x10\xe0\x9d\x0c\xd8\x91\x6c\xbc\x76\x75\x3e\x14\xc3\xa9\xba\xcf\xe4\x0d\x73\xc9\x1f\x25\x98\xe3\xbd\x03\xa9\xd0\x2b\x11\xe6\x3b\x2b\x69\x6e\x0e\x06\x03\xd1\xc9\x3d\xab\xc2\x15\xca\xc1\x60\x90\xb5\x54\x96\x0a\x1a\xa0\x4e\x35\xb2\xb6\x3b\x62\x55\xa5\x2b\x8f\xdf\xd6\xba\x33\x51\x77\x78\x96\x5b\x2c\x98\xee\x3f\x81\x72\xa6\x18\x11\x4c\xb3\x94\x66\xa4\x18\xf1\xb2\x14\xec\xb9\x56\xc4\x15\x52\x47\x27\x3f\x2a\xfb\x06\x78\xaf\x4d\x1b\xd4\xa7\x98\x49\x7b\xa2\xc7\xed\x36\x06\xff\x3d\x24\x81\x64\x3e\x57\x1a\xb4\xa6\x51\xc0\x52\x7d\x20\x6d\x22\x83\x56\x7f\x1a\x37\x77\xbb\xc4\x0a\x20\x36\x39\xd2\x42\x83\xa2\x88\x9c\xcc\x23\x57\xa4\x48\x26\x28\xac\x3e\x4a\xc1\x02\xdf\xfe\x7f\xbe\x2f\xdd\x1b\x25\x02\x3b\xd0\xa2\x6e\x9b\x9c\xeb\xf9\x0f\xca\x70\x16\x60\xb9\xc7\xe7\xe3\x83\x49\x1c\xc7\xb3\x48\xae\x16\xc4\xe2\x5c\x1c\x0e\x59\x9c\x0b\x41\x88\xc6\xb9\x10\x84\xc0\xb4\x44\x25\xde\x13\x89\x3f\x65\x9f\xb3\xfc\x21\x6b\x52\x34\xd9\x29\x38\xad\x95\x8d\xc1\x95\x26\x59\xd5\xf8\xaa\x8b\x27\x3d\xba\x4a\x73\xda\x18\x74\xd9\x38\x03\xb0\x02\x50\x39\xc5\x51\x55\xf0\xa8\x28\x6d\xd4\x64\x85\x12\xb2\x8e\x9b\xf3\xc3\x47\x69\x6d\x53\x5a\x97\xf5\x56\x29\x09\x55\x50\xbc\x69\xb3\xc3\x33\x83\x3f\x33\x5a\x13\x59\x72\x2a\xf5\x10\x1c\xdb\x5f\xe7\xb2\x77\x8c\x00\x66\xdd\x56\xd5\xc7\xd7\x78\x80\xeb\xdb\x27\x4d\x02\xd9\xd7\xfa\xfa\x65\xcf\x2d\x65\xff\xd0\x8e\x1d\x2c\xab\x22\x77\x1e\xd8\x2c\xe1\xec\x73\xc3\xf1\x9a\xac\x4e\x63\x24\xe8\x98\xdd\x20\x09\x52\xcc\xd4\x45\x90\x72\x55\x22\x78\xfc\xf4\x99\x3c\x8e\x94\xe6\xfa\x1a\xd4\x84\x6d\x3e\x31\xf5\x1a\x95\xe5\x04\x69\x33\x91\xa6\x1e\xeb\x06\x1a\x32\x7d\x76\xf7\xc3\xad\xc4\xfc\xbf\x45\xf7\xcb\xaa\x54\x87\x82\x35\x04\x70\x3c\xa8\x68\xb8\x34\xbb\x95\x7a\xaa\xae\xe3\x22\x2d\x31\xbe\xc1\x68\xc8\x0a\xd6\x47\xc3\x36\xd9\xaf\xdf\xd0\xb8\xdd\x64\x02\x86\xdd\xa9\x66\x4b\x0f\x9d\x55\x4f\x32\x22\xb3\xe8\x9a\x7c\xe1\x35\xff\x06\x1e\x71\xf2\x85\x87\x62\xd3\xaa\x58\x96\x59\xa4\x2e\xa0\x1b\x89\x67\xea\x62\xba\x91\xde\xba\xe4\x6d\x66\xb2\x3e\x86\x76\xae\x77\xd6\x95\x6b\x23\x97\x73\x1f\x6b\xe7\xfa\x7f\xd8\xfb\xb3\xf6\xb6\x75\x6b\x61\x1c\xbf\xd7\xa7\xb0\xf5\xef\xd1\x43\x1e\xc3\xaa\xe4\x21\x83\x1c\xc4\xc7\x3b\x71\x76\xdd\x26\xce\x6e\xec\xec\x9e\x56\xd5\x93\x43\x4b\x90\xc5\x1d\x89\x54\x41\xc8\x89\x77\xac\xf7\xb3\xff\x1f\x2c\x2c\x4c\x24\x48\x29\x43\xdf\xf7\x5c\xfc\x2e\xe2\x88\x24\xc6\x05\x60\x61\xcd\x4b\xe7\xbb\x0a\x7a\x6a\x88\xae\xd6\x73\x91\x90\x4c\x09\xe8\x0d\xb3\x7a\xa8\xa1\xd1\x0d\x46\x19\xe1\x60\x11\x81\x06\x00\x01\x1a\x1b\x65\xb2\xea\x51\x59\xa3\xea\x04\xc2\xc9\x8e\x4e\x94\x35\xd8\x51\xc8\xbc\xd8\x59\x24\xf7\xf0\xed\x86\xed\xac\x0a\x06\x96\x98\x90\x89\x18\xe9\xf2\x69\xce\x17\x60\x70\x69\x72\x6c\x45\x89\xba\x3a\xed\x6c\x15\x55\x79\x26\x44\x78\xbe\x4c\xa1\x7b\xa6\x6e\x0b\x10\x9b\x09\x24\xc4\x40\x28\xc6\x49\x0a\x61\xa1\x4c\x7b\x2f\xad\xc4\xac\xdc\x60\xc4\xc8\x6e\x1f\xc2\xf2\xb9\xfb\xc0\x4a\xf1\x4a\xe5\x17\x81\xf2\xd7\x7c\x55\x40\xb0\xda\x9a\xe6\x7b\xe1\xe2\x1b\xbb\x29\xd5\x7b\x6b\x75\xf1\xb5\x50\x69\x49\x98\x3c\x3c\x08\xc9\x63\x9b\xf6\xc1\xb2\x58\x96\x86\x5c\xe1\xa0\xd3\x37\xdc\xbb\xde\x6b\x3c\x00\x2e\xd3\x40\xfd\x22\x94\xf7\x19\x1b\x1e\x8d\x48\x41\x85\x51\x20\x4b\x36\x64\xa5\x7c\xc9\x53\x47\xda\x18\xad\xc0\x26\x47\xd2\x9f\x8a\x77\xf8\x62\xf1\xd2\x20\x25\x4b\xc9\xc2\x30\xc1\x78\x31\xc8\xba\xe7\x6f\x7e\xb9\xfe\xfb\x87\xb3\x77\xef\xce\xfe\xbe\x8e\xe5\x04\x2a\x84\x32\x27\x2b\x45\x1e\xe7\x72\x6d\x0a\x45\x25\x87\x16\xf4\x1b\x26\x62\x4e\xd6\x2a\x70\x88\x14\xce\x7c\x95\xf3\xeb\xe4\x36\xe2\xa4\x88\xc9\x9c\xae\xba\x4a\x2f\x4a\xc6\x74\xd5\xc5\xd4\x73\xa9\x48\x59\x41\xa6\xf2\x85\xb9\x64\x9c\x33\x37\x7f\x78\xc0\x5f\xe3\x0d\xa7\x6f\xb0\xf3\x22\xc9\xe4\xe1\x9a\xa6\xd9\x64\xc7\xf0\x2f\x56\x73\x3c\x0b\xc0\x7a\xf6\xad\xb0\xc6\x40\x61\xde\x6a\xb6\xa6\xa7\x91\x8a\x92\x60\xa0\x6a\x35\x4b\xd1\x1c\xf2\x14\x3b\x9c\xa1\x5d\xa4\x31\x99\x92\x99\xb3\x4c\x93\x4e\x67\x12\xc7\x83\xed\x1a\x73\x9b\xa9\x36\xe2\x2c\x35\x2a\xbb\xb6\x40\x1b\x76\x69\x5b\x62\x3b\x29\x9f\x50\x92\x01\x0e\x7b\x10\xc4\x02\x41\xa1\x9e\x1e\x33\x0e\x25\x4a\x89\xe8\xb2\xbb\x64\x7e\x05\x37\xa2\x3c\x83\x99\x6c\x61\x99\x2f\x35\x4b\x2e\x1c\xe1\x90\x2b\x13\x18\x77\xff\x9e\xb2\xf9\x64\xd3\x64\x5a\xa2\x7b\x2f\xcb\x41\x2c\x6b\xa7\xb2\xc4\x2b\x57\x72\xdd\xea\xd1\x85\xad\x39\xf4\xae\x36\xad\x9b\x6a\xaa\x39\xc1\x32\x51\x79\x7a\xdc\xbf\x24\x53\x96\x89\xab\x74\x02\x1b\xa2\x82\xbd\x38\x5e\xb0\x72\x8b\xc3\xa3\x3b\x7e\xb0\xf9\xda\x38\xfb\x5d\x49\x7c\x47\xa6\x95\x0b\xd8\xe9\xe0\xfd\xc7\xe3\x4e\x47\x74\x6f\x57\x09\x9f\xb0\x89\x6a\xad\x0c\x23\x38\x11\x5b\x5e\x32\x80\x1d\x8e\x14\x76\x38\x2e\xa1\xb9\x3c\x06\x04\xe1\xa2\xbd\x39\x2d\x3a\x9d\x42\xa2\x81\x4e\x67\xd5\x32\xe3\xd3\xd2\x44\xc9\x11\xcc\x6d\x3c\x3e\xe5\xd6\xb6\x74\x24\x02\x4a\x48\xb1\x0a\xea\x2e\x2b\x84\xc3\xd7\xe2\x7b\x39\xad\xd8\x48\x42\x56\x15\x6d\x67\xa5\x83\x49\xa9\x80\x2b\x8e\x2d\x7a\x5e\x53\x95\xbd\x13\x7f\xf1\x7b\x72\x15\xa3\xa1\x8e\xdc\xef\xd5\x7e\x80\xc1\x4e\x68\xef\x24\x79\xa6\xa5\x9a\x27\xc9\xde\x5e\x9c\xdb\x7d\x34\x4c\x46\x4e\x60\x4c\x45\xc1\xa5\x92\xa0\xaa\x6a\xa6\x3f\x00\xf4\xcf\xeb\x69\x7c\xd8\xa2\xc0\x17\x26\x69\x66\x9c\x9d\xf0\x0e\xff\xd9\xdd\x5b\x86\xe0\x4f\x56\x22\xcd\x57\x85\xff\x91\x5b\xd2\xbf\x42\xf0\x07\x6d\xfa\x0b\x31\x89\x6a\x43\x60\x43\x48\x23\xe4\xf3\x1b\x0a\x16\x42\xef\xfb\xdd\xde\x57\x96\xef\xc7\x6b\x15\x78\xa2\x10\x65\x81\x83\x76\xa1\xeb\xde\xac\xd2\xf9\xc4\x98\xaf\x5b\x8e\xe6\x96\x09\x9c\x75\xa8\x97\xd3\x7a\x10\x0e\xea\x01\x88\x92\x95\xcf\x5b\xad\x94\xb2\x1c\x40\x6e\x0c\xb9\x39\x5c\x1d\xbc\xba\x39\xe5\x5a\x0a\x06\xa6\xf8\xe9\xef\x12\xf9\x36\xc8\x5d\x6c\xb9\x8a\x7b\x42\x21\x26\xaf\xd3\x1b\x7a\x6e\x36\x20\x1a\x7b\x96\x70\x52\x18\x8a\xce\x88\xb5\x44\xce\x41\x88\xc2\x6d\xa6\x64\xa1\xed\x49\xb4\xdc\x66\x94\x98\xcf\x6d\xc5\x91\x4f\x85\x24\x48\xc6\x81\x97\x69\xa7\x27\x30\xee\x78\x95\x73\xed\x4f\xa2\x4e\x50\x4d\xbe\x76\x74\x17\x42\x40\x77\x67\x2c\x59\x92\x8c\xf2\xee\x22\x99\xcf\xf3\x71\xa4\x03\x13\x88\x40\xc0\x3c\x31\x4c\x83\x19\x91\xf3\x53\xe5\xe2\xf6\xcb\x3c\x19\xb3\x59\x2e\x47\x13\xe5\xf1\x00\xfd\xde\x72\x23\xad\xe7\x5d\x49\x2e\x14\xb3\x37\xaa\xab\x8c\xb0\x98\x64\xe8\x48\x52\xa6\xd0\x82\xe6\x03\xde\x9e\xe8\xce\xf3\xfc\xe3\x6a\x19\x22\x46\xdc\x48\xbb\x48\xac\xf1\xd3\x2f\x8a\xd4\x53\xd6\xaa\x2e\xad\x87\x6f\x0c\xae\x81\xe7\xf5\xc0\xed\xcc\x8c\x0c\x6d\xe5\x78\x1c\x1a\xb6\xfa\x58\xe7\xac\xa5\xc7\x4d\xb8\x32\x6a\x7a\xe1\x0c\x41\xc5\xd7\x01\x6a\xd0\xc0\x0a\x29\x67\xd5\xfa\xc3\x43\x94\xa9\x6a\x88\x69\x59\x1c\x13\x3d\x23\xe6\x4f\x87\x7b\x73\x59\x3b\x23\xd5\x7c\x64\xc3\xe6\x2e\x41\xd7\x70\x9e\x7a\x77\x6b\x9b\x41\xe0\x1f\xb7\x6f\x47\xeb\x05\xc8\x06\xb9\x90\x36\x01\x2b\x9a\xe5\x10\xb8\x79\x4d\x69\x57\x34\x54\x31\x56\xfa\x4c\xca\x16\x4d\x8e\x61\xd2\xd5\x8f\x94\xd7\xb5\x34\x8b\xaf\x8c\x6b\xe5\xb1\x52\xa2\x95\x42\x3b\x8a\x91\x94\x66\xc6\xbf\x61\x8a\x9e\x8c\x60\x42\x04\xf8\x42\x19\xea\x51\x15\x02\xfb\x14\xf3\x55\x4d\xe3\x41\xba\xd7\xc7\xeb\xc0\x4a\x6a\xe8\x97\x59\x52\x9c\xdf\x25\xf3\x01\xef\xe2\x2f\x82\xbd\xc9\x55\xff\x37\xc8\xae\x1c\x51\x95\x06\x0a\x11\xae\xe4\x10\xa4\x54\x1e\x3e\x6a\x71\xc9\xeb\x73\xf1\x3a\xb9\x61\x8a\xde\xec\x4e\x19\xe4\xcb\x77\x28\x85\x7e\xac\xe2\xd1\x9a\xa3\x7c\xad\xec\xe6\x4b\xe4\x04\xe1\xdd\x65\x55\x91\x2d\x5f\x2b\x02\x5f\xee\xb5\x64\x52\x6d\xd9\x55\x59\xa3\xce\xb8\x76\x14\xb5\xa4\x19\x07\xd2\x0c\x99\x6d\xab\x40\xe4\x9b\x68\x2d\xc2\x91\x6a\x0f\xae\xb4\xa4\xe4\xe5\x60\x3c\x49\x92\x9c\x88\xa7\xe1\xe6\x01\xfd\x5d\xf0\xe4\x49\x82\xe4\x43\x24\x50\xdd\x34\x70\x79\xc7\x80\x48\xb1\x96\x99\x24\x65\x41\xe3\x80\xad\xe3\x35\x04\xc7\x6f\x00\x9d\x67\x19\x70\xf9\x52\xa5\x62\xf1\x04\x6b\x76\x62\xfa\x7b\x78\xc1\x0a\x91\x2f\xf5\x86\x41\x55\x1c\x37\x64\x61\x58\xe8\x99\x1b\x07\xc2\x92\x49\xe5\x15\x34\xf0\x76\xa3\x77\x3c\x1a\x48\x86\x8e\x8d\x12\x56\x85\x2f\x24\x47\x5d\x9e\x52\xa1\xa4\x12\x02\xc5\x78\x4e\xc3\x2d\x7b\xce\x98\x31\xfe\xae\x97\x50\xe0\x2d\xc3\x24\x9f\x52\xf8\x72\x89\x39\x2d\x5c\xb9\xc4\xfc\x34\x4a\x6a\x79\x72\x16\x93\xa4\x86\xc1\x5f\x11\xa5\x9f\x04\x5a\x63\xb7\x0f\xe4\x46\x3c\xd8\xae\x2d\xb7\x95\x4a\x1b\x6b\x24\xfd\xce\x9a\x95\x6a\xb0\x0f\x42\x5a\x35\x01\x11\xfb\x36\xe9\xd5\xa0\x7a\x48\xb3\xa6\xda\x35\xae\xac\xaa\xb5\x50\x41\xec\x47\x61\xd8\x2f\x89\x18\x30\xa2\x5e\x0d\xc4\x3a\x0e\xf9\xe2\xbb\x01\xa3\xdc\x16\xb4\xff\xb5\xea\x19\xa3\xe4\x19\xea\xc9\xc9\xe2\x27\x86\xd9\x08\x5c\x63\x12\x41\x12\xca\x87\x29\xb6\x30\xda\xcf\x5b\x4c\x75\x07\x19\xf8\x35\x04\x3f\xd6\xef\x59\x35\x8a\x6f\x34\xed\x43\xd3\x51\x15\x86\x40\x01\x1d\x7d\x52\x80\xab\x4d\x02\xfe\xf2\x91\x44\x53\xce\x2c\x95\x93\xae\x0a\x9d\x04\xbf\x49\xe9\xa6\x5c\xe3\x35\x10\xf4\x32\x42\xb6\xc9\xa6\x37\x8a\xb2\x58\x45\x2b\x57\x7c\x5f\xab\x61\xe1\xe5\x72\x79\x8b\x82\xf6\xf3\x65\x58\xa0\x39\xbd\xb5\xcc\x77\xa6\x89\xff\x47\x8c\xf4\x2a\x36\xfa\xe1\x62\xc4\x05\x60\xec\x9b\xdd\x6f\x55\x87\xb8\xfe\x52\xd6\x0a\xff\x5b\x5b\x70\x1e\x0e\x47\x31\x50\x78\x12\x30\x6f\x92\xf1\x2c\x2d\x65\x42\xfc\x2e\xf8\xf4\x7b\x07\x47\xdb\x81\x48\x96\xfc\x06\x28\x55\xaa\x7d\x0b\xa0\x9a\x1b\x09\xc0\xaa\xcc\x1f\x95\x88\x4b\x0b\xc9\xe8\xe0\x28\xf6\xb7\xb6\xde\xa5\xe6\x08\x79\x07\x08\x03\x50\x68\x42\x99\xf1\x3b\x56\xd5\xd6\x07\x16\x7a\xbf\xef\x56\xf9\x5b\x2a\x66\x18\x60\x24\x84\xb9\x82\xf5\x2d\x75\x2e\x5b\x08\x6d\x84\x06\xd8\x61\xf7\x20\x33\x29\xb3\xcb\x80\x1f\x1f\x3d\x21\x25\xaa\x06\xb9\x71\x10\x9d\x72\xb6\x4c\x38\x9b\xd8\x6b\x61\xb7\x2f\xaf\x83\xdd\x9e\x62\x60\x03\x3e\xc3\x6e\xdb\x07\x4f\x9c\x62\x57\xc9\x94\x35\x14\x7d\xea\x14\x7d\x89\x7e\xea\xaf\x78\x72\x5b\x76\x26\xb5\x55\x0e\xdd\x41\x5c\x7a\x5e\x20\x5e\xb1\xbe\x53\xec\xba\x14\xb6\xd8\x29\x76\x00\xc5\x20\x4a\xb5\x25\x56\x79\x92\x15\x98\x45\x38\x58\xeb\x69\xdf\xe1\xca\xbf\xa2\x9a\xea\xac\x6c\x15\x16\x2e\x7c\x74\xa4\x0a\xfb\x06\x60\x35\x65\x8f\x4d\xc3\x35\x2e\xa1\x5e\xe9\xbe\x6e\x79\x9b\xc2\x76\xcc\xef\xf2\x5c\x94\x06\x61\xf7\xb0\x5a\xce\x1e\x61\x44\x9c\xf6\x07\x3d\x53\xe9\xd7\x94\x8b\x55\x32\x0f\xd5\xf5\x6a\xf6\x09\x33\x75\xc0\xdb\xb9\x61\xba\x07\x07\x7a\x02\x4d\x85\x0e\x55\x21\xb5\x97\xcf\x78\x39\x1c\x94\x29\xf8\xf8\x29\x76\x8d\xfc\xab\x5e\xce\x20\x79\xd8\x7b\x10\x2d\x5b\xf5\x49\x9f\x70\xac\xac\x7d\xaa\x1c\x4a\x4b\xe7\xe2\xae\xe9\xf7\xc9\x81\x99\x72\x88\x43\x09\xcf\xea\x89\x9a\x95\xcb\x5a\x5d\xb1\xf9\xb4\xae\x8b\x23\xec\x22\xc0\x8a\xd5\x55\x39\x0e\x54\x41\xc7\x9a\x9a\x1a\x8f\xb0\x06\x04\xac\x78\x95\x73\xc9\xb7\xd6\x95\x7d\x8c\x65\x4b\x74\x67\x63\x07\x4f\x7b\x58\xa9\xcc\x98\xd5\x95\x3f\xb4\xe5\x3d\xc7\xa0\x9a\xe2\x47\xce\xd6\x03\x35\x50\x10\xf4\xfa\x02\x39\x7e\xac\x37\xdf\x16\x65\x9f\x98\x86\xaf\x16\xc9\x7c\xbe\x45\x8d\xa7\x66\x6b\x6f\x57\xe1\x51\xcf\x81\x27\x1e\xb6\xc6\x0a\x47\x4f\x9d\x0a\xa0\xe0\x0a\xef\xb4\x63\x85\x25\x8c\x11\x7d\xcd\x3d\x72\xe8\xb4\x56\xb9\x37\x2a\xee\x7b\x35\x4e\xe9\x87\x41\x32\xf7\xd0\x25\x73\x0f\x95\x53\x3a\x1a\x52\xd6\xa1\x6b\xcd\x73\x04\x0c\x6f\xd5\xa5\xef\x1f\x71\x9f\xb3\x07\xe1\x65\xa7\x63\x1a\x69\x38\xd2\x65\x91\x00\x94\x2f\x1f\xca\x60\xa1\x10\x4e\x0c\x16\x2c\x98\xf8\x35\xe1\x29\xb8\x0b\x38\xef\xcc\x09\xab\x48\x25\xd0\xac\xae\x60\x42\x1e\xef\x89\xae\x5c\x54\x5a\xb7\x05\x41\xf0\x50\x2d\x00\xe3\xcc\x97\x91\x47\x14\x94\xce\x6a\xb0\x52\xb3\xf2\xc8\x34\xac\x0d\xf1\xf5\xb3\xb7\x44\x15\x8b\x67\x43\xae\xd5\xdc\xb5\x51\xa3\xa8\xdf\xa7\x04\x5d\xa2\xcf\xd5\x56\x92\xb2\xca\xa0\x4e\xd6\x5f\x92\x20\xfa\x5a\x45\x2b\xe9\x37\xcd\x95\xd9\x5a\x8f\xa9\x45\xd9\x09\xb3\xc1\xb3\x7e\xc9\x55\x35\x47\xc2\x56\x39\x77\x0e\xc3\x86\x61\xe8\xd8\xa7\x9d\x33\xac\xa6\xc5\x2c\xcd\xb5\x20\xd9\xa1\xe2\x4f\x5d\x22\xd2\x5e\xc0\x2b\xce\xd3\xe0\x39\xf6\x2e\xce\xa3\x32\x39\x63\x2a\x5c\x80\x14\x77\x5c\x73\x35\x3f\x56\x48\xa3\x2a\x7e\xab\xa1\xd1\x54\x3f\xae\x48\xad\xa6\xa0\x42\xb7\x75\x01\x49\x9c\x82\x4f\xf5\xc5\xab\x3d\x61\x6a\xb0\xdb\x23\x28\x67\x9c\x5a\xaa\x0b\x89\xe4\x79\xf4\xe8\xc8\x63\xa7\x51\x10\x10\xe1\x8e\x2e\xf0\x86\xd1\x1e\x29\x35\xbd\x29\x2a\x0e\xdd\x63\x1a\xfa\x7a\xbc\x4d\x5f\x15\x3c\x50\x47\x79\xd9\xf2\x0a\x1d\xd4\x94\x3b\xb4\xe5\x74\x93\x35\x25\x8f\x4a\x2d\xd6\x14\x73\x08\x8d\x0d\x0d\x3e\xb2\x25\x9b\x1a\x7c\x42\x4c\x72\x9e\xa6\x62\x86\xdc\x83\x1c\x00\x35\x85\xfa\x9a\x1e\x9d\xe7\xc9\xa4\xae\x8c\xee\x10\xc4\xa7\x75\x85\x74\x77\x93\xd5\xf2\x87\xb9\x82\xba\x78\x75\xf9\xed\x2e\xa1\xbd\x56\x99\x4b\x8e\xfa\x8f\x88\xd6\x0b\x2d\xf3\x1f\x37\xe0\x7e\xa0\xa7\xc7\x86\x72\x56\x5e\x64\xb5\x1b\xde\xb0\xee\xc7\xdb\xec\xfb\xaa\x42\x21\x7c\xda\xfa\x47\xd8\x7b\x3a\xbd\x7f\x7f\x78\x50\x53\xe8\xd8\x22\x80\xba\xcd\xd9\x77\x0e\x77\xcd\xc1\x3e\x70\x26\xda\x48\x9c\x1d\xa8\x41\xfd\xb6\x5a\x04\xa2\x2e\x96\xc0\x71\x7c\xb0\x0d\x38\x64\x53\x17\x01\xfe\x40\x23\x93\xe3\xc3\x6d\x5b\x51\x9a\x80\x86\x96\xb6\x42\x81\xb2\xa5\xf3\x7f\x85\x38\xc8\xaa\xac\x24\x3a\x96\x38\xa2\xb1\x51\xb5\x55\x93\xa2\x60\x5c\x5c\xd5\xd1\xca\xd1\xf1\x23\x73\x53\x9d\x2f\x96\xe2\xde\xe7\x06\xbd\xab\x49\x51\xf7\x4a\xc6\x56\xab\xb1\x26\x19\x1d\x8e\x48\x4a\x7b\x2d\x51\x52\xdb\xa0\x82\xef\xcb\x42\x5e\xae\xa0\xc6\x9d\xcf\x6f\x12\x08\x86\x03\x33\x18\xb4\x5f\xbc\x3e\x7b\x7f\x75\xde\xde\x4b\xf7\xf6\xd6\xc6\x26\x04\x36\x58\xa4\x17\xd4\x4e\xc7\x92\xa2\x6a\x97\x46\xc6\x86\xc4\xd5\xc0\x65\xa8\x8b\x04\xb1\x53\x43\x5a\xd2\x1d\x8e\xe0\x8f\x58\x17\x06\x08\xc9\xad\x6e\xd8\x1c\xc2\xdd\x1b\x0b\xef\xcc\xb8\xa9\x9c\xe4\xcf\x69\xef\x24\xdf\xdf\xd7\x2e\x3b\xd9\x30\xc7\x70\x9b\x8a\x74\x49\xb0\xbe\xa5\x19\x0f\x62\x92\x74\xf5\xac\xa3\x98\x48\xbc\x90\x23\xc5\xa9\xdc\x2e\x41\x53\xb4\x76\x1a\x41\xdd\x11\x4e\xcc\x2a\x8a\x10\x34\x9f\x41\x84\x0c\xd4\xcd\x24\x60\xd6\x62\xe5\xf7\x28\x05\x57\xe2\x51\x24\xd3\x32\x21\x89\xc5\x7b\xa0\x23\x4d\x2d\x1e\x7f\xe1\x51\xdf\x35\x90\x62\xa7\x91\x28\x81\xdd\x11\x73\x45\x71\x3c\x70\x45\x49\x60\xfb\xc3\xa3\x9e\xdb\x42\x98\x70\x52\xd6\x85\x0d\x04\x52\x64\x8d\x2c\x7f\x4a\xb8\xc3\x99\xa8\x2e\x0e\xfd\x2e\x82\x23\xd4\x12\x36\xac\x72\xb4\x45\x95\xb2\xa4\x0d\xab\x1e\x6f\x51\xf5\x32\x9f\x60\x02\x06\xbc\x23\x20\xc6\x6f\xb3\x80\xe0\xa9\xc7\xf4\x7b\xf3\xac\xde\x30\x76\x25\xab\x5a\x49\xc3\x67\xf8\xfe\xc8\x05\xf8\x23\xab\x1d\x55\x56\x3f\xba\x7c\x97\xcf\x77\xb8\xc8\xc0\xbc\xb4\xd2\xa2\x60\x2b\x9b\xe4\xa3\xde\x9e\x0a\x88\x50\xca\x8d\xb2\x12\x04\x03\x66\x7d\x35\xb3\x02\x78\x16\x1b\x28\xf4\x47\x4f\x35\xa5\xa3\x8f\x41\x0d\xd6\xb3\xf2\x3a\xa0\x9c\x9a\x44\x8d\x8f\x9b\xcd\x3d\x96\x79\xb3\xa1\x87\x96\x57\x63\xe0\xef\xf5\x9a\xa8\x7a\xc8\xfd\x6c\x55\xb7\x48\x7f\x67\xa6\xa2\xba\x18\x36\xb8\x1c\x59\xde\x67\xac\x32\x1b\xba\xe6\x25\x95\x68\x3c\x1f\x41\x5f\x75\xed\xab\x0a\xb5\xba\x4e\x44\xc2\xf8\xa7\xea\x80\xa5\x29\xf5\xa2\xbe\x92\xec\x34\xd3\xca\x79\x34\x16\x51\x18\x75\xd0\x33\x21\x4c\xcb\x0a\x79\x9a\x91\xd4\x06\x30\x01\x8d\xda\x5b\x95\xe5\x57\x1d\xc3\xeb\x59\x5a\x5c\x18\x1b\xb8\x49\x1c\xa5\x71\x4c\x94\xb3\x34\x2b\x8a\x34\xcf\x8c\x29\x8c\x6f\x0b\x62\x0c\x3f\xb4\xb1\xc7\x04\x1d\x74\xbc\x48\x20\xc6\xbd\xaf\xc6\xc1\xc5\x18\x87\x64\xae\x4d\x7e\x4a\x45\x65\x1e\xdd\xa4\xd0\x46\xe0\xca\x2f\x91\x24\x94\xfb\x36\x46\x51\x4e\xb2\xb8\x85\xca\xf3\xe4\x54\x74\x67\xea\x75\xe2\x38\xd9\x0e\xd2\x53\x6b\xe3\x94\xdc\xdf\xb0\xd7\xf9\x38\x99\x47\x39\x58\xac\xdf\x96\x44\x23\xf2\x85\xc9\xd6\x94\xc7\xbe\xef\x81\x24\xf2\x49\x9d\xe1\x1c\x5a\x19\xf7\x4e\x32\xeb\x15\x9f\xed\xed\xc5\xda\xd6\x7c\x98\x8d\xe2\x96\x4d\x79\xa6\x55\x6d\x4e\x07\x6a\x4a\x5f\x09\x36\xa6\x9c\xf1\xc1\xb8\x39\x51\x1e\x34\xe9\xd4\x75\x88\xde\xa5\x34\x35\xf1\xf8\x4a\xd0\x4b\x25\xf4\xac\xf7\x42\xb1\xd1\x67\x41\xd2\x1a\x8e\xcb\x90\x82\x36\xb8\x00\x21\xe0\x0b\x02\x5a\x6a\x13\x4d\x7c\x45\xf3\x61\x6f\x44\xe6\x34\xb7\x7e\xd2\x02\x4e\xce\xbd\x6f\x6f\x90\x80\x4a\xc8\x81\xc6\xcf\xac\xc1\xc9\xc3\x98\xcb\xbb\xeb\xc7\x2d\xe5\x11\xc8\x9f\xe4\x2f\x6d\x36\x4c\x3d\x33\x79\xbb\x31\xea\x0d\xe5\xd3\x69\xd4\xb4\x49\x63\x13\x3e\xbd\x37\x6a\x71\xca\xcd\x84\x49\x68\xfb\x65\xe8\x7e\x5f\xde\x82\xa5\x29\xf0\xfa\x29\xf0\xd2\x14\xde\x67\x2a\x3f\x4c\xd9\xce\xde\x53\x8f\x07\x82\x7d\x28\x9e\xcb\xdb\x88\xc8\xf5\x56\x2c\xba\x35\x3b\x5c\x71\xa0\xd3\x35\x54\xc4\x82\xda\x7a\x18\xd0\xc0\xd4\x5e\x43\x14\x03\x63\xa8\xa7\x70\x80\xfa\x4d\x52\x6d\x8c\x2b\xf0\x07\x49\xd7\x80\xc4\x4a\x41\x99\x85\x0e\xca\x9c\x53\x51\x35\x0a\x50\x31\x4c\x3c\xf4\xeb\x3b\x36\xb3\xf8\x14\x69\xc3\x32\xf6\x73\xad\x6e\x25\x9e\x1d\x98\x9b\x2b\x00\x44\x49\x95\xa8\x50\x27\x25\xf5\x50\xc9\x3e\xd5\xcc\xaf\x5b\x38\x91\x0c\x59\xec\x68\x82\x1e\x3f\x22\x1c\x98\x11\xd5\x1e\xc8\xd5\xad\x95\x7b\x90\x2e\xba\xb2\x86\x7f\x11\xeb\x74\x98\x6b\x09\xe8\xd0\x28\xf6\x42\x8e\xca\x6f\x71\x02\xfe\xc1\xac\x08\x2d\x8d\xad\xaf\xa6\x88\xbd\x93\x60\xbd\x70\x82\x54\x12\x82\x13\x08\x22\x81\x51\x15\xc0\x81\xc6\x52\x77\x3d\x43\xa8\x2f\x79\xe4\x8e\x3c\x7a\xdc\x27\x65\xf8\xb9\xf1\x02\xf3\xb8\x46\x24\x5c\x21\xfc\xee\x7a\x06\xb2\x0e\xd4\x3c\xb0\xa6\xd3\x92\x71\x6e\x4d\xa7\xde\xaa\x1d\x3d\x81\xd0\x5d\x70\xa4\x15\xf9\x87\x7b\x44\x05\xd3\x59\x9b\x48\x34\xf5\xd0\x05\xd4\x89\x98\x1a\x6e\xff\x55\x55\x46\xf2\x28\x28\x23\x79\xe4\xca\x48\x1e\x61\xcc\xdd\x79\xb5\xf6\x63\xa7\xd8\x63\x93\xb8\xeb\xdf\x4a\x21\x63\x48\xbc\xdd\xdd\x28\x79\x78\x58\x3d\x3c\x88\x98\x4c\x29\x44\x72\x66\x0f\x0f\xcc\xa5\x92\x1f\x1e\x76\xa3\xdd\xec\xe1\x41\x7e\xcb\x86\xbd\x91\xbe\x21\xc9\x8c\x7e\x59\x24\x69\x36\x48\x88\x04\xef\x60\x45\xc0\x50\x72\x20\xd6\xad\xca\xbe\x92\x50\x9c\x91\xfc\x3b\x49\x70\x4d\x4f\x90\x31\x99\xba\x64\xf8\xfc\x34\xaa\x9e\xb7\xb9\x7f\xd8\x54\x01\x24\xc1\xe7\xf2\xd9\xb3\xdf\x93\xfc\x5f\xb1\x05\x35\x5f\x7c\x07\x35\x9f\x87\xcd\xfa\xca\xfb\x0d\x62\x07\x93\x95\xda\x71\xa1\xcd\x12\xdc\x6a\x8f\x47\xfe\x1e\x52\xe6\xf1\x12\x49\x5b\x28\xc8\x9b\x72\xac\xcd\x8e\x4b\xab\x1c\x87\xf4\x40\x11\xb3\xe3\x21\x73\x22\x62\x15\x33\xe2\x47\x6e\x4c\xf4\xa9\x1c\x6b\x32\xba\xc5\x90\xeb\x90\x83\xd2\x31\xb8\x1b\x71\x96\x1c\x1f\xcc\xb6\xd0\xc8\xa6\x49\x77\xc8\xb4\x89\x3e\xe0\x5b\x94\x5a\x04\x74\x89\x7a\x18\x9a\x8b\xc7\x92\xcd\xda\x45\xdc\xa0\x2b\x5b\x5d\xcd\x22\x88\x02\x2b\x93\xda\x5e\x19\x89\x6e\xa3\x3a\x2f\xca\x26\xad\xe4\x04\x25\x56\x0a\xc4\x83\x1e\x49\xd5\xb5\x3f\xd8\xed\x3b\x52\xa1\x25\xed\x9d\x2c\x9f\xcd\x34\x61\xb3\xd4\x46\x90\x0b\x3a\x1b\x2e\x4d\xc4\xe3\x45\x77\x3c\x4b\xf8\x99\x88\x7a\x31\x86\x3d\xee\xb4\x07\xb2\xd8\x1d\xfa\xc5\x4e\xa3\x76\x07\x2d\xc0\xda\x94\xd2\x45\x7c\x47\x57\x2d\x15\xd1\x48\x7e\x4a\xb3\x3b\xc6\x0b\xa6\x3f\xcd\x4d\x14\x92\xc5\x2e\xa5\xd3\xb8\x2e\xc4\x6d\xeb\x8e\xf2\xf5\xdd\xa9\xdd\x0e\xfe\xf5\x1b\xdd\x55\x66\xb9\xdc\xeb\xdb\x79\xf6\xd6\xe0\x08\x5b\x53\x59\xc5\xfc\xd9\x54\xdf\x8d\x7c\xfb\x5f\xed\x41\x3a\x8d\x76\x93\x58\xbd\x53\xc1\x7d\x12\x49\x51\xdf\xd2\x44\x12\xc2\x37\x74\xd1\x92\xdb\xf7\x86\x2e\x0c\xbd\x19\x63\xb0\x8b\x7b\xe3\x4b\x70\x13\x9f\x40\x12\xa6\x0f\x26\x42\xbe\xbc\x60\x6f\x87\x1f\x46\xcd\xc3\xe9\xaf\xe3\x78\xbd\x36\xd3\xb1\x5a\x66\xbd\x7a\x7b\x7d\xb2\xbb\x1b\xad\x1e\x1e\xe6\x0f\x0f\x3c\xb6\x6b\xfc\x89\x4e\xac\xe4\xef\xd3\x73\xda\x3b\xf9\xa4\x25\x7f\xe7\x74\x32\xfc\x34\x22\x9f\xe9\x39\x1e\xc5\xd6\x79\x17\x3b\x54\x94\x98\xd6\xf5\x44\x9f\x91\xe4\x72\xd5\xd7\x9f\x51\xdc\xe7\x62\xb8\x48\xd4\x1e\xa3\xef\xd4\x22\x87\x0f\xf1\xd7\x6b\x95\xeb\x91\xb5\xc4\xd6\x65\x2f\xf8\x1a\xbf\x30\x1b\x0c\x87\x14\xdf\x43\x18\xb4\x10\x09\x6c\x8c\x20\x98\x18\x3a\x2c\xb1\x5e\xd2\xe5\x20\x80\x49\x28\xe8\x5f\xa2\x2f\xbd\xb2\xac\x32\x4a\xea\xc9\x46\x59\x6d\x83\x7c\xb3\x6a\x64\xbe\xdb\x73\x62\xe1\x17\xb2\x84\x17\x7e\x6f\xbd\x86\xfb\xf0\xde\xb7\x4d\xa9\xb8\xef\x20\x4d\x6a\x64\x06\x64\xb7\x6f\x0d\x31\x34\x7d\xec\x39\x1d\xaa\x97\x1e\x1d\x01\x87\xbd\xc1\x14\x41\xbb\x85\x93\xdc\x77\x64\xae\x33\x81\xf3\x36\x65\x85\x22\x36\xaa\x9b\x9e\x71\x05\x7d\x9d\xde\x58\x7f\xcd\x48\x54\x49\xe2\x32\x69\x50\xe5\x28\xbe\xcf\x76\x1c\x3c\x7c\x1c\x3a\xa0\x6b\x9d\x48\xc0\xdd\x09\xe3\xf0\xe7\xf4\x4d\x22\x66\xdd\x45\x9a\x81\xfc\x0b\xf8\xea\xf2\xa4\x73\x07\x10\xd6\x86\x2f\xb2\x18\x46\xb9\x0d\xe7\xe0\x2f\x1c\xa2\x06\xa6\x4b\x22\xf6\x93\x80\x01\x0c\x1f\x26\xa3\x78\x5d\xe1\x7e\x36\xad\x2e\x1a\xda\xc8\xa1\x59\x3c\xd0\xb0\xc4\x45\x7d\xde\xc7\x10\x1f\x88\xfc\x97\x0a\x27\x16\xf6\x2b\x18\x8e\x74\x8a\xd4\x40\xd6\x42\x36\xe4\xa3\x16\x64\x4d\x0d\x37\x9f\xc5\xeb\x70\xf7\x10\x36\x3f\x52\xec\x26\x92\x46\x5b\x0c\x3a\x41\xb6\x15\x58\x29\xcd\xe9\x54\x77\x92\x1c\xb0\xbe\xd0\x75\x6c\x40\xbc\xcd\x31\xab\xe2\x80\xfd\x47\x9f\xd2\xde\x29\x7b\xbe\xdf\x3f\x15\x94\x0d\xa2\x0a\xcf\xa5\x4a\xaa\x0c\xb1\x47\xf1\x86\x02\xfd\x72\x9e\x82\x34\xbb\x6d\x0f\x74\xf6\x25\x0d\x6a\xc2\xe9\x41\x39\x23\x00\x4b\x32\x59\xb0\xf7\xc0\x08\xa7\x87\x5e\x12\x03\x08\xfc\x2e\x3f\x1e\x94\x3f\xad\xb4\xcc\x45\x7e\x3d\x74\xbe\x7a\xa1\xf4\x5d\x81\xda\x45\x76\x97\xcc\xd3\xc9\x8e\x81\xda\xce\x32\x29\x0a\x36\x81\xbc\x87\xae\x6c\xa1\xad\x7c\x98\x31\x0a\x76\x91\xfe\xce\x2e\x16\x0b\x36\x49\x13\xc1\x22\xf1\xec\xd9\xe1\x03\x97\x74\xb2\x65\x40\xfb\x87\x90\xe3\x24\xf7\x8b\x86\x9d\x30\xd9\x73\x6a\x13\x58\x3e\x3c\xb0\x67\xbd\xd3\x30\x4c\x45\x2c\x7b\x3a\x1e\x30\xcd\x33\x57\x45\x1f\x01\x89\x84\x61\x7d\x0d\xc2\x0a\x78\xe6\xe9\x16\x03\xfe\x44\x75\xd6\xb5\x07\x65\x19\xc0\x4c\xbb\x42\x41\x6b\x35\x77\x4e\x5d\x6b\xc7\x8d\x12\x05\x6c\x33\x18\x14\xb2\xc6\x16\xd1\xbd\x51\xc2\x81\x65\x98\xc6\x32\xfa\xc6\x4b\x69\xa6\x83\xcc\xe4\x34\xf3\x9d\xb9\x12\x9a\x05\x82\xcc\xec\x52\x9a\x76\x3a\xf8\x2b\xef\x74\x12\x8c\x23\xaa\xf1\x44\x41\x7b\x27\x85\x75\x31\x2a\xf6\xe8\x41\x2c\x86\xc5\x68\xd8\x1b\xd1\xf6\x7f\xb5\xf7\xf0\x77\xc5\x88\x22\xe4\xd6\x95\x7a\x18\xb0\xec\x25\x66\xf8\x21\x15\xb7\x9c\xec\xf6\x09\xef\x74\x38\x04\xb5\xd4\xd1\xf1\xec\x8d\x83\x42\xd2\x66\xd0\xd5\xac\x84\x4e\x1f\x14\x16\x9e\x89\x98\xe4\xe5\xef\x09\x26\x54\x77\xce\xc7\xd3\x63\xe3\x38\x9f\x57\xe5\xb1\x75\x06\x3e\x8f\x88\x8f\x39\xa0\xb6\x8e\x97\x52\x6b\xbc\xfe\xf4\x71\x65\x6f\x79\xd2\xbe\xf2\x57\x8d\x84\xa1\x75\xe1\x79\x18\xf8\x06\x56\x8f\xc2\xed\xea\x81\x85\x02\x84\xd4\xd9\x60\x1d\x36\x37\xb5\x08\x79\x83\x9b\xb8\x0c\xdb\x09\xf7\x76\x5d\x79\x50\x74\xd4\xab\x3f\xbe\xa1\x1b\x14\x83\xb5\xd5\x79\xcc\x07\x06\xee\xac\xf6\xc1\x63\x14\xa1\x3a\x21\xf6\xb7\xdc\x7b\xe6\x92\x48\x75\x1e\xb4\xca\x47\x11\x6b\x47\x39\x05\xcb\x47\x24\x23\x20\xd3\xe2\xa7\x7d\xc9\xf6\xea\xf1\xdb\xa8\x60\xff\xbe\xbe\x1f\x87\xfa\xb6\x21\xd4\x7e\x6c\xc7\xd5\x93\x56\x98\x9c\x35\xce\x98\x8e\x41\x98\xa9\x86\xe2\xcb\xfe\xab\xbb\x71\x2b\x0a\x5b\xdd\x70\x4a\xb8\xe5\xe8\x40\xea\x50\x7b\xe8\xd0\xce\xc2\xa8\xfb\x9b\xb7\x73\x45\x20\x5d\xbf\x9b\x9b\x45\xd1\xe5\x20\xce\x75\xa6\x90\x87\x4e\x2c\x58\x7b\xe5\x69\x2e\x2e\x70\x4c\x58\x57\x32\x76\xca\xed\x3e\x9f\xdc\xa3\x4d\x8b\x67\xee\x53\x27\x20\xd2\xc1\xd8\xcf\x2f\x5f\x5e\x5c\x5e\x5c\x5f\x9c\xbd\x6e\xeb\x04\xa3\x22\xc2\xa5\x56\x86\x46\x59\x4c\x78\xe4\x1a\x56\xb9\xc1\xd0\x91\x75\x49\x85\xdf\x72\xa9\xbc\xdb\x49\x18\x74\xae\x29\x8f\x3f\xed\x92\x3d\x9a\xc5\x0f\x30\x6d\x98\x7f\x46\x59\x57\xc5\xf6\x82\x1c\x67\x18\x8f\xbf\x86\x0b\xe6\x15\x06\x57\x84\x18\x5c\x98\x42\x25\xf6\xbb\x28\xc5\x7e\x4f\x3b\x9d\x34\xd2\x3c\xa8\x13\xb7\x2d\x44\x60\xa3\x77\xbe\x4b\x42\x68\x4f\x7d\x56\x75\xb9\xd7\x5b\xcf\x7b\xab\xfa\x71\x22\x78\x85\x2d\x62\xaa\x1c\x38\x74\x63\xb5\xf8\x28\xb8\x3d\xd5\xbc\x9c\x8a\x81\xa2\x51\x9a\x89\x4b\x5e\xd6\x99\xec\x32\x6d\x1f\xd0\x6b\x59\xae\xa5\x77\x22\x2c\xc3\x22\x34\xb3\x86\x81\xd9\xc5\x28\xb6\xdd\xea\x5c\xbf\xb9\x7b\xfa\xca\xb2\x90\x34\xfe\xc2\x5d\x69\x6d\x49\xc2\xc6\xc1\x4f\xd1\xd9\xd7\x95\xef\x6c\x5e\xb0\xa6\xef\xa0\x5b\x88\xbd\xa4\x9e\x7e\x34\x76\x16\x3f\x7b\x76\xd4\x4a\x3b\x9d\x28\x7f\xa0\x4f\xc0\x59\x42\xfe\x7a\xac\xaa\x48\xa2\xcd\x89\x96\x80\x09\xa4\x12\x88\x05\xd0\xb2\x34\x1a\xc4\x04\x58\xd1\xde\xc9\xea\x99\xc9\x41\xbf\xf2\x80\x53\x0c\x57\x2e\x9b\x0a\x98\x28\x41\xea\x45\xc7\x26\x0b\xed\x23\x8c\xc9\xe4\x46\x09\x64\x31\x2e\x60\xd5\xd6\x46\x68\x5b\x1b\x4d\x92\x36\x1a\xbf\x94\x37\x8e\x96\x55\xd7\x49\x74\xc0\x32\x46\xac\xa3\x8f\x71\xab\x9c\x95\xea\x1a\xa0\xf5\xa6\xce\x2e\xc6\x09\x64\xd5\x90\xbd\xb7\x59\x1f\x9c\x85\xf4\xc1\x99\x65\xfa\xbd\xbe\x11\x6c\xf2\xa3\xca\x27\xc6\xb4\xbe\xb7\xac\xc7\xcb\xbc\x0b\xaa\xc6\xb2\xe9\x11\x14\xb4\x9a\xa0\xef\xed\xab\xdc\x4a\xa0\x33\x97\x48\x0f\x5f\x21\xba\x33\xe2\xd5\xad\x8a\x94\xc0\xad\x2b\xb3\x55\xea\xcc\xd1\x91\x1d\xcb\xb1\x59\xa8\x94\x57\x2a\x84\x05\x08\xba\xd2\x5a\xee\x8f\x6b\xb9\x3f\xaa\x09\xc9\xde\xc0\x32\xbe\xf8\x5f\xb3\x47\xf0\x56\x3d\x35\xb1\x72\xa2\xd8\x11\xa8\xda\xc5\x13\x8d\xbb\x64\x8b\x8d\x61\xf9\x67\xdb\xd3\x37\x6c\x91\xc6\x5d\xa1\x49\x04\xd3\xc1\x09\xc4\x15\x12\xa7\x21\x09\x63\x15\x1f\x38\x15\xd7\x8e\x65\x84\x2b\x95\x74\xd6\x36\x90\x81\xee\x05\xc0\xff\x5d\xbd\x61\x9c\x93\xba\x41\xde\x8d\x05\x26\x95\xc3\x0d\x14\x71\xc9\xf5\xa9\x0f\x18\xe4\x3b\x4a\x9d\xcb\xc4\x9a\xd0\xa9\x64\x5b\xb8\x19\x90\xfe\xa8\xd9\x12\xc4\xd9\x0c\x4e\xa4\xa2\xba\xeb\xfa\x8d\xea\x00\x37\xf1\x67\xbd\x89\x8d\xf5\xdc\x3b\x98\xe2\x2f\xee\x92\x98\x19\xba\x31\xa4\x24\x45\x67\xc2\x11\x6a\xd4\x2e\x42\xc1\x66\x24\xe9\x5b\xe6\xa3\xbd\xab\x5d\x57\xb7\x56\x49\x98\x47\xc2\xac\x96\xce\xe0\xea\x88\x69\x07\x9e\xd0\x96\x60\xdc\x30\xb1\x36\x51\x73\xaa\x79\x07\x7f\x81\xa9\xfd\x46\x55\x98\xac\x97\x1b\xa7\x18\x8e\xab\xfe\xda\x0b\x96\x85\xa1\xb3\x94\x34\x01\x0b\xc1\x54\xed\x9b\x4f\x2a\x7c\xcf\x6b\x5b\xd2\x0f\xaa\x85\x24\x2e\x52\x3f\x26\xbe\x96\xaa\x8c\x64\x0d\xb5\x01\xb1\x3c\x61\x8c\x6b\x56\xa7\xae\xd0\x09\x15\xdd\x74\x52\xca\x80\xbb\x46\x83\xb0\x2a\xda\xe0\xdd\xa4\xa8\x1e\xc2\x6a\xbc\xfa\x53\xe7\xf7\xc0\x9b\x39\xfb\xb4\x73\x53\x22\x01\x21\x0d\xbd\x93\x3f\xb7\x02\x3d\xf2\xc5\x2c\x35\xea\xeb\xc0\xce\x33\xb0\x4d\x4a\xb1\xda\xe5\xe7\x53\xf7\xe1\x07\x8f\xa5\x67\xc6\xf2\x37\x6f\xd5\x6a\x46\xe4\x2d\xed\x69\xf5\xd5\x20\xb4\x01\xd8\xa7\x9d\xab\x1f\x00\x30\xb9\xcd\x4b\x49\xa0\x75\xd6\x65\x2f\xf9\x73\x53\xa6\xe7\x72\x7a\xe6\x4a\x52\x66\xcc\x33\xca\xba\x36\xb7\xe6\xbb\x55\x26\xd2\x85\x93\x6c\xf3\x6f\x3c\x15\xec\x6d\x36\xbf\xb7\xaf\xfe\xc4\x92\xa5\xc9\xa8\xa9\xed\xe4\x58\xd7\xfd\x8d\xcd\xb8\xaf\x4c\x43\xde\xcb\xf3\xd7\xaf\x3f\xfc\xe5\xf2\xed\xdf\x2e\x3f\x38\x24\xea\x87\x5f\xde\x5e\x5d\x5c\x5f\xbc\xbd\x74\x03\xdf\x65\xf4\xcb\xba\xb5\xb9\x86\x2a\x9c\xea\xd4\xa8\x53\xce\xd8\xef\x0c\xe2\x01\xe5\x35\x28\xc1\xc4\xd9\x94\xac\x79\x41\x87\x23\x74\x53\xe1\x3c\xb9\x2f\xe8\x30\xc5\x67\xa1\xdc\x0c\xf5\x67\x85\x92\xec\x33\x5e\x79\x13\xf3\x42\x89\xab\x37\x05\x86\x0a\xe8\x64\x1c\x81\x12\x8e\xc9\x28\xcd\x99\x8d\x26\x06\xca\x89\x81\x57\x0a\x48\x20\x16\xab\xfc\x2b\x8e\x74\xaf\x46\x79\x63\x33\x4f\x9b\xfc\x5d\x21\x6d\x8e\xd5\xe0\x68\xe1\xc5\x90\x8f\xfc\xa8\x66\x56\x61\x23\xd4\xef\x32\x1f\x06\xb6\x55\xba\x13\xc3\x91\x39\x13\x55\xc0\xde\x30\x4f\x2c\xe4\x4d\x73\xd6\x18\xc2\x12\x17\xa9\xbe\xdd\xc8\x5b\x3b\x74\x38\x8e\xbd\x15\xb6\xfd\xa1\xdb\xa7\x95\x03\x07\xba\x85\xc4\xe1\x0a\x50\xe9\xf4\x5e\xe9\x75\x82\x4b\xe9\x84\x93\x92\x43\xe1\x81\xa5\x14\x38\x47\xb5\x93\xea\xe6\x88\xfb\x6c\x03\xec\x74\x29\x0f\x78\x22\xff\x25\xcf\x03\x08\xf9\x0b\x0e\xc3\x1b\x13\x51\xe0\x77\x97\x02\xef\x65\x7c\x87\x0f\x04\xbb\xf2\xfa\x5d\x3b\xe1\xee\x2a\x68\x20\x47\x36\x75\xd3\x8d\x6d\x82\xeb\x32\xe2\x9d\x58\x61\x86\xe8\x1e\x5c\xa1\x07\xe9\x1d\x57\x61\x86\xe9\x9f\x5a\x6f\xc5\xbd\x3c\xca\x96\xbe\xd2\x16\x6e\xfa\x64\x0b\x33\xbb\x86\x03\x6e\x72\x68\xd7\x72\x20\x38\xf8\x21\x1b\xa1\x17\xf0\x65\x75\xbd\xdd\xf2\xd8\xa9\x2d\x7f\xb5\xf1\xa8\x6b\xa9\xa6\x11\xf6\x73\xe7\xf4\x0b\x73\xfa\x9b\x63\xc1\xb5\xf8\x30\x1b\x99\xa6\x30\x31\x78\x6a\x83\xe5\xe2\x68\xaa\xe3\xa8\xa0\x0a\x3d\x76\x2f\x9f\x7b\xdd\xfe\xd6\x4b\x34\x64\xca\xdc\x9d\x52\x9a\x79\xf6\xcb\xb8\x6a\xf2\x7b\xb5\x4a\x29\x04\x2f\xfe\x88\xb8\xd5\x3d\x6b\x20\xd6\x9d\x6b\x2c\x07\x07\x1b\x2e\xed\xa8\xb4\x6a\xb1\xd9\xdb\x95\x5b\x2f\x69\x29\xd9\x4a\x90\xa3\xe0\x36\xc6\x5c\xd8\xd5\xc6\x78\xd3\x98\x8d\x2f\x40\xb4\x93\x9a\x9d\xcf\xcd\xce\x4f\xf5\xb6\xe7\x7a\xdb\xa7\x66\xcf\x73\xb3\xe7\x53\xbb\xe1\xd3\x2d\x76\x7b\x6a\xb6\x3a\xd7\xbf\x62\x65\xf2\x2e\xca\xbc\x0a\xd7\xec\x6b\x4a\x79\xf5\x18\xa4\x5f\xb9\xad\xd3\xaf\x3c\x36\xe9\xff\xaa\x63\x90\x7e\xd5\x31\x48\xff\xb7\x1c\x83\xf4\xbb\x8f\x01\x5f\x47\xb9\x4a\x76\xa5\x0f\x40\xa1\x92\xa9\xd7\x1d\x00\x9c\xa1\xde\xfd\xa0\x1f\xa8\x97\x9b\xc4\x4a\x44\xa3\x68\x2e\xef\x22\x56\xaf\x9a\x37\x66\x16\xda\x98\xd9\xa6\xfb\x5c\x4d\xd2\xed\x6a\x13\x31\xe6\x95\x75\xae\xdb\x6c\x1b\xf0\x56\x9b\x80\x3d\x02\x75\xab\x82\x2f\xb7\x92\x02\xcd\x90\xed\xf7\x47\x9b\x85\x5e\xaa\xb0\x1e\x1d\x2c\x5c\x61\x65\x05\x7a\xf1\x56\x2d\x65\x86\x5d\x73\x2f\xe3\xad\x3c\x03\x6e\x00\xe5\x6e\x2a\xbd\x7b\xcf\x0a\x35\x44\x5d\x06\xaf\xf4\xf7\xda\xd4\x5d\xfd\xbd\x28\x7a\xfc\xe8\x49\xc7\x34\x2f\x67\x7f\x73\x9f\x4c\x26\x3c\x72\xba\x89\xe3\xe7\xcf\x9f\xc4\xc6\x53\x32\x2d\x50\xd2\x53\xdb\x6c\xef\xe0\x68\x63\x9b\xa6\x39\xb9\x4b\xea\x5a\x3a\x38\x3e\xde\xbe\xa1\x7c\xd9\x6f\x94\x60\xd7\xb7\xb1\xd7\x77\x5b\x39\xf8\xd6\x56\x0e\xdc\x56\x0e\xbf\xb5\x95\xc3\x38\x90\x40\x6d\xec\xbb\x73\x3d\xb0\x67\xcf\x0e\xd6\x86\xaf\x54\x92\x90\x29\xed\xf7\x8e\x9e\x1c\x3f\x7e\x44\x66\xf5\x3b\xc9\xd8\xdb\xd9\x88\xfc\x96\xb5\xd2\xbb\xca\xa5\xe4\xf4\xd3\x38\x59\x26\xe3\x54\xdc\xd3\x29\x71\x24\x88\x2a\xac\x25\xe8\xdb\x80\x6d\x03\x85\x9b\xaa\xd8\xb2\x9b\x56\xe2\xfe\xf7\x69\x26\x0e\x0f\x8c\xd5\x86\xe5\xf4\x74\x06\x07\xec\xdc\x82\x07\x2d\x06\xdd\xb1\x64\xa5\xb1\xf4\x1c\xa7\x9b\x60\x4f\x53\xaf\xa7\x66\x0e\x71\x59\x8e\x20\xab\x70\x44\xfa\x3b\x7b\x31\x63\x56\x1d\x2d\xfb\x19\xba\x0b\xb6\x37\x52\xf9\x35\x4d\xc9\x92\xeb\xac\xe4\xc9\xbc\x61\x6b\xa9\xdd\x5d\x64\x1a\x24\x3d\x17\x08\x71\x03\xec\x34\x77\xb7\x37\x75\xc6\xd3\x2d\x98\x80\xa8\xb5\xe5\xb5\x5a\x7b\xcf\xfb\xfb\x48\x83\xa9\x6d\x57\x8b\xb5\x60\x8a\x8a\x72\x2c\x02\x85\x0d\x9f\x80\xe5\x54\x44\x65\x95\x26\xa2\xa2\xa6\x10\xca\x18\x14\xd8\x2c\x3b\x43\xd2\x23\xe8\x61\xc0\xdc\x4b\xd5\x63\x76\xd5\xab\x3d\x7a\x48\x00\xbc\x6e\x86\x88\xd0\x60\xa0\xa3\x21\xdb\xeb\x8f\xe8\x38\x12\x44\xb9\xa2\x17\xa5\x44\x1f\x1e\x6e\x86\x91\x20\x44\x1a\xe1\x81\x4d\x6b\x36\x20\xc0\x0a\x97\xa7\xca\xc8\x38\xea\x91\xc3\x58\xcf\x52\x6c\x31\x4b\xa1\x07\x9c\x4f\x03\x23\x41\x61\xc3\x38\x5f\xb2\xda\x32\x3b\x25\x40\x3c\x7f\x7e\x00\x90\xe3\xac\xf6\xc6\xb5\x85\x5b\x65\x28\x86\xad\x07\x1f\xc4\xb3\x67\x87\xbd\x75\x24\x48\xdf\x38\xfb\x3b\xe9\x3d\x1a\x0f\x90\x0b\x0a\x7d\x78\x5a\xce\xa1\x1a\xd1\x83\xfe\xd1\xe3\xa3\x27\x87\x8f\x8e\xd0\x8c\xc3\x45\x53\x0a\xb2\x43\x41\x80\x04\xc2\x38\xdc\xbf\xb8\x78\xcc\xc5\x7a\x48\x8b\xea\x04\x9a\x4e\x31\x12\x50\x4c\x1b\x57\x5f\x31\x22\xca\x8b\x97\xa4\x94\x0f\x35\x54\xcc\x29\x88\x32\x92\x46\x31\x06\x0b\x4e\x96\x62\xc5\x59\x55\x1a\xff\x8d\xc1\x8d\x1c\xb0\xa0\x56\xa9\x3c\x41\x03\x41\x1f\x73\xb0\x18\xf1\xb0\x96\xef\x6b\x29\xbe\xdd\x5f\x04\xd6\x75\x60\x97\x98\xa8\x1a\xae\xa4\x1f\xa4\x8d\x33\x74\xfb\xa9\x93\xe0\x7d\xd7\x0c\x25\x2e\xcb\xbf\x3d\xce\x94\xac\x3e\xd3\x7e\x7f\x46\xb4\x69\xb1\xa0\x56\x26\x7c\xc8\xd5\xb5\x28\xcb\xcf\x2d\xa4\xe2\x90\x56\x05\x8b\xd6\x9d\x25\x6c\x4a\x5f\x4e\xcc\xeb\xa0\x2a\x6a\xd1\xa2\x5b\x15\x24\x61\xb9\x85\x6a\xe4\xbb\xa6\x31\xbb\x9f\xf8\x21\xde\x2a\x9a\xb3\x99\x23\xfe\x52\xd1\xd5\x21\x92\x3b\xa4\x0b\x05\x1b\xad\x1f\x0e\x8b\x92\x5c\x7b\xd9\x52\xee\x5d\xb5\x7c\xc9\x56\x7a\x5c\x87\xca\x0d\x70\x1d\x92\xaa\x9e\x38\xc4\xd2\x9d\x96\xc2\xbb\x79\x9d\x31\xc1\x7c\x6c\xfa\x53\x1e\x53\xb2\x9c\xb1\xcd\xc8\x2a\xb7\x2d\x8f\x4f\xc4\x33\x0e\x28\x22\x93\xf8\x49\x22\x08\x03\xcf\xb5\x95\xe7\x2f\x4a\x2a\x04\xae\x6d\x9d\x7f\xa0\x12\x21\x2d\x80\x63\x08\x1a\x7e\x74\x45\x72\x4b\x29\x9d\xcb\x05\xc5\x72\x7e\xaa\x24\x5b\x54\x17\xbb\xf1\x82\x83\xc5\x5f\x66\x7b\x7b\xf2\xf5\x38\x5f\xdc\xa4\x19\xbb\x4e\x6e\x6f\xd9\xa4\xd1\x1b\x01\x68\x3d\x2d\xbf\x7e\x96\x59\x8f\x84\x14\x3c\x12\xe4\x90\x24\x03\x9d\x42\x42\x4c\xec\x7d\xdc\x4a\x77\x29\x9d\x77\x3a\xea\xe2\x70\xd8\xf9\x65\xa4\xd2\x8f\x61\xff\x57\x72\x75\x02\x97\x16\x74\xcd\xe4\x41\x98\xa0\x43\xc8\x09\xda\x43\xf3\x13\x13\x84\x41\x77\x9d\xf9\x5d\x67\x5e\xd7\x59\x0c\x2d\x65\xec\xb3\x80\x60\x44\xbc\x6e\x28\xdf\x03\x84\x6f\x00\xc0\x22\x59\x86\xaf\x5e\x65\x25\xa6\xd3\xb4\xa5\x05\x66\x60\x0a\x67\x67\xdb\xa5\xf4\x5c\x16\x33\x46\xf7\x2f\x92\xf1\x8c\x51\xd6\x85\xff\x27\xd6\x82\x9f\x75\xdf\x2f\x27\x09\xdc\x09\x72\xc7\xe8\x02\xea\xf7\xcb\x94\x8b\x7b\xe7\xd3\xfb\x77\xef\xce\x2f\xaf\x3f\x5c\x9f\xfd\x4c\x59\xf7\xd7\xb7\xaf\xcf\xae\x2f\x5e\x9f\xe3\xe3\x8b\xb7\x97\x57\xd7\x67\xe6\xeb\x75\x72\xab\x74\x7f\x12\xc8\xef\xd8\x5d\x5a\xa4\x79\xa6\x9a\xd1\x15\x29\xeb\xa2\xed\x9f\x53\x5d\xbe\xc4\x60\x9a\x57\xf7\xd9\x78\xc6\xf3\x2c\xfd\x1d\x1b\xc1\x31\x9b\x60\x9b\xba\x68\x9a\x67\x67\x5c\xa4\xd3\x64\x0c\xba\xae\xd7\x69\x21\x2e\x04\x5b\x68\x55\x99\x9d\x2c\x6a\xb9\x9c\xde\xb4\xca\xab\xdf\xb2\x83\xc9\x5a\xce\x18\x2f\x93\x4b\x14\xb7\xd5\x5d\x89\xa1\x6b\x05\xfc\x3c\x6a\xac\xb4\x00\x6d\xde\x25\xf3\x15\x8b\x62\x4a\xa9\x83\x3a\x1d\x28\xa5\x24\xed\xa6\x13\x1c\x5e\x2e\x37\x5b\x22\xff\x14\x1b\xaf\x14\xd9\xbd\xc6\xcd\x69\x96\x31\x4e\x45\x13\xd3\x03\xe3\xa8\x52\xc8\x51\x8f\xe4\x43\xd3\xde\x28\x8e\x6c\x7b\x40\x7b\x35\xcc\x2f\xea\x91\xa4\xa6\x2a\x98\x4b\xf8\x8c\xed\xca\x1e\xed\x1c\xcf\x51\x4b\xf9\x86\x84\x02\xcf\x31\x0d\xb7\xb5\x76\x18\x0c\xa7\x3b\xb2\x0b\x10\x61\xf2\xe5\x74\x42\xc5\xda\xdb\x95\x05\x29\xf7\x63\xaa\xf7\x36\x34\x0f\x1c\x1d\x66\xfc\x9c\x2b\x43\x94\x48\x39\x66\xc7\xad\xd2\x41\x98\xd7\xf7\x72\x99\x5c\x6e\xe8\xe7\x32\xb9\x74\x7a\x1a\x63\x4f\x7d\xd3\x93\x77\x02\xc7\xf5\x3d\xcd\x36\xf4\x23\x28\xa5\x33\xec\x65\x8a\xbd\x1c\xd8\xf9\x38\xa7\x7e\xaa\xd3\x13\x97\xc9\xc4\xa0\xb8\x91\xf0\x6f\xa5\x14\x67\xae\xa4\x32\x24\xa7\x57\x27\x85\xf2\x06\x61\xa4\xb1\x77\xfc\x61\x14\xfa\xcc\x25\xa5\x0a\xdc\xd8\x13\x22\x9f\x94\x11\x5c\x93\xfc\xb3\xe6\xa4\xe9\xa4\x78\x6a\x42\x6b\xc8\x7a\xe4\x59\xb7\x1b\x9d\x1c\x4e\x79\x6f\x6f\x06\x72\xc4\xd4\x39\x45\x4b\x27\xa1\x0b\xf3\x13\xb9\xf4\x74\x8a\x94\x79\xcb\x4f\xec\xc2\x86\xbd\x51\x29\x83\xcb\x1d\x02\x2c\x92\xdf\x08\x44\xea\x29\x27\x5a\xb9\x37\x45\xe2\xf5\xba\x74\x41\x4c\xc8\x4a\xd2\x61\x1b\x08\xbe\xaf\x13\x44\xcf\x93\x42\x00\xf7\x88\x89\xf4\xc0\xce\xba\x10\xbf\x02\x30\xd5\x8b\x6f\x92\x46\x37\xae\x86\xd3\xe9\x2e\xa5\x33\x6d\x73\xec\x8e\x65\x46\xcc\x2b\x35\x16\xa4\xe7\x17\xcb\x95\x60\x51\x1c\x97\x3e\xa3\x39\x5e\x05\x6b\x9a\xa8\xda\xfe\x2c\xf5\x02\xbb\xb7\xf1\xa2\xa5\x22\x20\x6c\x52\x71\x65\x1a\xb6\x59\xf0\xe8\x4c\x53\x5e\x08\x2a\x48\xd6\x2d\xd8\x38\xcf\x26\x94\x93\x6c\x23\x7d\x5d\x39\x48\x65\xba\xa4\x72\x18\x88\x50\x16\x40\x7e\x8e\xc1\x95\x08\xc1\x5c\x79\x04\x27\x9f\x55\x1b\x30\x40\x8d\xe7\xb5\x0b\xaf\x1c\xa9\x7e\xa7\xc4\xe8\x8b\xb8\xb5\x8a\xee\x62\x0c\x8b\x50\x07\x14\x64\xec\x35\x48\x78\x10\x24\x22\xb9\x2d\xa8\x20\xfc\x1b\xc0\xd0\x0c\x84\x2d\x40\x50\x92\x53\xc8\xa1\x10\x41\xf7\xfb\x1b\xdc\x7d\x35\x2c\x5a\x82\x1a\xe8\x65\x92\x32\xb4\x5a\x26\x0d\xa3\x7b\x05\xa3\xdb\xef\x86\x91\x04\x11\xec\x54\x20\x18\xe5\x4e\x95\x7d\xfc\x48\x60\x35\xe9\x35\xb7\xdd\x3e\xce\x00\xb5\xe8\xf7\xd6\xd9\x39\x69\x77\xb5\xac\x10\x2e\x4c\x67\xb9\x14\xc9\xad\x3e\xec\x72\xc2\x8c\x94\x9b\xd4\xe7\xde\x9e\x65\x67\x3f\x96\x48\xe9\x5b\xb2\x8a\x6e\x15\xf0\x6f\x9a\x2d\xa2\x64\x07\x9a\xf8\x73\x2c\x1e\x7d\x44\xf7\x55\x54\x9c\xbf\xa5\x6c\x2e\x4e\xdb\x8f\xcd\x4e\x87\x9d\xb8\x69\x71\x25\x3c\x3a\x1d\x8f\x8a\x7a\x78\x88\xca\x35\x4a\x38\x8f\x54\xe7\x62\xe8\x35\xc9\xa3\xab\xc8\xad\x4d\x28\xd0\x83\x81\x21\x8b\xcb\x1c\xcb\x0d\x86\x38\xf9\x4e\x44\x08\x3b\x1a\xa0\x93\x75\x0d\xbb\x0e\x88\x71\xa1\x08\xc4\xad\x10\x63\xe3\xe1\x76\x56\xc1\xf4\xd0\xb2\x4d\xce\x20\xd7\xb3\xec\x2b\x8e\x98\x8f\xdd\x6e\xd4\xbe\xf9\xb4\x41\x25\x58\xbe\x0a\x1b\x36\x93\x4d\x7c\x3d\xa1\xbb\x7d\x62\xf7\xb8\xda\x20\xde\x18\x29\x6b\xd4\x93\x30\xf6\xb1\xee\xe6\x74\x7a\x39\xf5\x47\x38\x28\x7d\x8f\x30\x96\x79\x68\x43\xa4\xd3\x68\xb7\xdc\x5c\x1c\xee\x26\xf2\xb4\x08\x66\x06\x35\x3b\x9e\x69\xc9\x00\x77\xb7\xb6\x6e\xfa\xbc\x55\x05\x20\x37\x98\xd6\xf1\x9d\x34\x93\x02\xa7\x32\x5d\x40\xa3\x2a\x4a\x69\x76\x7a\x3e\x88\x4a\x2b\x94\x82\xbc\xad\x2e\x03\xf9\xa6\x49\xa8\x36\x2a\x9d\x85\x8e\x9c\x83\xf0\x02\x4b\xdf\x23\xc2\x61\x38\x3d\xe1\xc0\x27\x4c\xa2\xdf\x4e\x26\x37\x87\x37\x8f\x9f\xb0\xfd\xc3\xc9\xc1\xc1\xfe\x11\x3b\xba\xd9\x7f\xf2\xf8\x71\xb2\xff\xe8\xb0\xff\x78\x7c\x30\x3e\x1e\xf7\x8f\x8e\xdb\x50\xb8\x36\x8f\x3b\x6e\x50\xc5\x81\x32\xbb\xdd\xe6\x35\xdc\x72\x3d\x31\x06\x4d\x58\x64\xe0\x33\xf4\x9f\xcb\xa9\x9a\xbf\x0a\x17\x10\xc4\x9c\xa6\xbd\x57\x39\x8f\x78\xec\xb0\x19\x22\x49\x33\x75\x60\x24\xbd\xc4\x32\xf5\xeb\x23\xbb\xa7\x5c\xfe\x95\x54\x9d\x60\x1c\x94\x8b\x80\x39\xd8\x22\xa7\x02\xfe\x2b\xb5\x49\xb2\x6f\x22\x53\x03\x97\x15\xee\x11\x3d\x32\xc4\x23\x7a\x18\x58\xe3\x57\x6f\x5a\x91\x15\x39\x98\x40\xf8\xa5\x0a\x6f\xdc\x21\xab\xf2\x72\x16\xc0\xb1\x67\xdd\x62\x96\xaf\xe6\x93\x77\x6c\x91\xdf\x05\xd6\x69\xd7\x1b\x12\xba\xa5\xb0\xaa\xc7\x92\x0b\x4e\xa4\xeb\x00\xa2\x80\xf1\x38\x88\x6d\x2e\xf3\x09\x03\xfb\x08\x2d\xc2\xd9\x2e\x4b\x6f\xaa\x25\x42\x16\xdf\x2d\x92\x25\x05\x5f\x0f\x2f\x89\xec\x3c\x2d\x94\x3d\xae\xec\x2e\xfb\xc8\x26\xb2\xa3\x20\x32\x34\xeb\xda\x88\x0b\xd3\x02\x62\x7f\x07\x04\x28\xfe\xb8\x7c\x90\x63\x6a\x96\x28\x8e\x75\x03\x51\x38\x65\x0b\xe2\x05\xe3\xda\x42\x31\x58\xaf\xd7\xf8\x69\x4d\xe3\x03\xaf\x14\x09\x00\x8a\x61\x9a\x93\x00\x8d\xb6\xbb\xab\xa1\x68\xf5\x9e\xb5\xc2\x2c\x5b\xea\x53\x52\x5c\xc9\x45\xad\xd1\x36\xaa\x82\x7a\x3a\x86\xe3\x16\x9d\x8e\x80\xcd\x60\x53\x2d\x36\xb4\x60\x28\x17\xb9\x74\x99\x0f\x5a\xc8\xb5\xcc\xe4\xd1\x1c\xa1\x87\x40\x46\xac\xf9\x10\xc7\xc6\xa3\x34\x26\xa9\xc2\xc5\x05\xe3\xe2\x27\x36\xcd\x79\x99\xb9\x71\x0c\xbe\x64\x9f\x99\xd3\x67\x5a\xea\x33\xa7\xdc\xef\x33\x75\xfa\xcc\xbd\xb3\x9a\x79\x5d\x46\x39\x11\x31\xc9\x41\x7b\xee\x9d\xac\xf2\x08\x64\xb7\x2d\xe6\xb5\xc4\xbb\x1c\x8e\x23\x58\xd7\xf9\xad\xda\x8c\xfc\xa5\x56\x35\xd5\x90\x16\xc2\xa9\x3d\x61\x73\x26\x98\xb3\x92\x30\x15\xb0\x87\x46\xd9\x78\xed\xc2\x43\x4b\x46\x82\x8e\x69\x73\x58\x32\xa9\x65\xac\x65\x79\x25\xbb\x37\x18\x3d\x20\xc2\x7d\x0b\x87\xfe\xac\x29\xd1\x71\x75\x37\xb7\xac\xb1\xfd\x5b\x13\x0f\x22\x31\x6d\x06\x7d\xaa\xb2\x52\x42\x4f\xe7\x16\x36\x35\x89\xa0\xb5\x87\x59\xe4\xfc\xe1\xc1\x3b\xcf\x19\xe4\x75\x70\x69\x69\x70\xac\x93\x3f\x06\x4c\x6f\x3f\x11\x57\xaf\x60\x23\xd4\x76\x23\x2f\xc7\x5f\xd8\x90\x75\x31\x54\x58\x6f\x44\xdb\xea\x67\x9b\xc8\xd7\xbf\xf0\x55\xc6\x68\x7f\x44\xdb\xf0\x4b\xbd\x7c\x99\x67\x8c\x1e\x8c\x68\x5b\xfe\x68\xaf\xa3\xb3\x87\x87\xe8\x8c\x7e\x59\xa3\x57\xf3\x75\x3d\x44\x35\x96\x53\xa9\x51\xd0\x85\x1e\x61\xa0\x6d\x03\x20\x67\xb6\x20\x25\xd0\x96\x71\x0b\xb7\x00\x41\x7b\x14\x15\x2c\x9f\x72\xbd\xf6\x4d\x7e\x1a\xf7\xd9\x38\xcc\x20\x9f\x21\x20\x4e\x4e\x62\x2d\xea\x42\x19\x97\xfe\x32\xc0\xb5\x93\x8b\x80\x91\xd0\xdc\x90\x50\x3b\x67\x0a\x66\x6e\x31\x78\x51\x2e\x25\x61\x37\x70\x91\x94\x29\x2e\xbf\x44\x4a\xfd\x9f\x4c\xee\x92\x6c\xcc\xae\xf3\xbf\xb0\x46\x33\x58\x9c\xbc\xc6\x5a\x76\x5f\x65\x54\x68\xdd\x55\xd6\xe9\x00\x55\xb1\x4b\x29\x3b\x89\x35\xa9\xd1\x83\xc0\x69\xe6\x78\xd9\x60\xf7\x99\x66\x52\x2d\x60\x9d\x52\xb1\x3e\xba\xe5\x10\x73\xde\xfe\xb6\xf7\xc2\xc6\x61\x32\xbd\xab\x6d\xb4\xf8\x2c\xf6\x2d\x84\x13\x6e\x20\x89\xca\x67\x39\x9d\x2a\x4b\x29\x80\x76\xa2\x34\x3d\x35\x20\x7d\x07\x48\x2d\xca\xe2\x01\x38\xe7\x45\x69\x6c\xbf\xbd\x91\x28\x2a\xc3\x9b\x4c\xbe\xb8\x00\x3c\x17\x65\x31\xd1\x6b\xae\x27\xab\x9a\xa9\xbb\x36\xec\x74\xb8\x37\xdd\x93\x88\x53\x1e\x23\x0d\x64\x83\xf3\x20\x58\x85\xab\x1d\x24\xce\x19\x40\x4c\x1c\x01\xaa\x24\xc8\x23\x10\x0e\x24\x93\x01\xff\x9b\x32\xf2\xdd\x72\x53\xd8\x6e\x80\xbd\x90\x3d\xe4\x94\xcb\x0b\x58\xf5\x17\xb7\x72\x67\xc0\x5c\xdf\xb9\xf8\xf1\x34\xe2\x70\x99\xa8\xbb\x25\xc3\xdf\xaa\x15\x1c\x67\xae\x48\x3b\x71\x0a\xab\x01\x6e\xcc\xda\xc5\xd8\xdd\xd4\x51\x6a\xa6\xa2\xc0\xbe\x35\x70\x71\xf4\x99\x3f\xd7\x94\x8a\xf2\x3d\x95\xc5\x2d\x7d\x77\x45\x29\x8c\x31\xc5\x31\xa6\x6a\x8c\xd9\x69\x66\xc7\x68\x32\x1a\x2a\xcc\x57\x73\xc7\x98\xc5\xf3\x86\x86\x98\x87\x20\x0a\xd0\x13\xab\xb4\x54\x73\x03\xb8\xd3\xf2\x77\x90\x73\x28\xb8\x3e\x14\x0a\x83\x68\xba\xbe\x15\x1a\x1d\x73\x4f\x6c\x89\xc2\x8e\xe2\xd3\x88\xe9\x0b\x3a\x8b\x89\xe8\xaa\x2b\x3a\x02\x58\xc4\xf1\x00\x09\xec\xea\x74\x00\xfb\x57\x2d\xf0\x60\xcb\x4e\x14\xea\xf2\xaf\xdd\x92\x92\xf5\xba\x6c\xc6\xa0\x8c\x39\xb6\x37\x62\x20\x41\x13\x08\xfb\xf2\x6e\xe1\x3e\xcd\xf3\x4f\xfb\x73\x76\xc7\xaa\xc6\x0f\x3a\xee\x69\xc9\x04\x82\x43\x3c\xd7\x37\xfe\x41\xaf\xc6\x49\x5d\x1a\x2e\xdb\xfb\xea\x6a\x6f\x16\x22\x4a\x40\x8f\xae\x9a\x6c\x8a\xbf\x8a\x81\xef\x49\x52\x55\x1b\x1d\x07\xd5\x46\xc7\xae\xda\xe8\x78\x34\xf8\xb2\x26\x85\x1c\x13\x03\x4a\x5f\x87\xd3\x27\x2b\xea\x06\x45\xd0\x2e\x03\x64\x4e\x2f\xa3\x15\x49\x95\xfa\x8d\x8c\xe9\xbc\xbb\x48\xb2\xe4\x96\x71\x32\xa5\x73\x08\xee\x04\xf1\xe0\x76\x7f\x8a\x5e\x45\x63\x08\xcb\xec\x04\x8e\x8b\xa6\x71\x4c\xc6\x71\x20\x97\x47\x92\x65\xb9\xd8\x51\x21\x01\x76\x4c\x78\xaa\x62\xe7\x53\x2a\x66\x3b\x18\x28\x6b\x47\x39\x00\x17\x3b\x49\xb1\x93\xec\xf0\x3c\x17\xb6\x64\xb7\x1d\xb7\x72\x0a\x1d\x62\x3c\xdd\x29\x59\xe9\xc8\xda\xe8\x03\xfa\x91\xdd\x17\x51\x12\xfb\x8e\x2e\x86\x64\x1c\x32\x92\x0c\xd9\x68\xb4\x8e\xc9\x84\x0e\xdb\x8b\x24\xcd\xe4\x6e\x9a\x17\x72\x87\x40\xe8\x95\xf6\x88\x2c\xe9\xac\x52\x1d\xa9\x05\x1b\xb9\x0e\x62\xd9\xad\xe3\x96\x1f\x6c\x5e\xdf\xbb\x0b\xda\x3b\x59\x3c\x3b\xfc\x4f\x1d\x85\xf8\x64\xb1\xb7\x17\xc3\x25\x65\x32\x9d\x82\x66\x13\x77\x43\xf5\x0b\x99\x05\x93\x9f\xe9\x61\xf4\x47\x2d\xaf\x0e\x68\x98\x0b\x88\x37\xa4\x32\xeb\x46\xf8\x99\x2c\xc9\x84\xf4\x20\x9e\xac\x57\x41\x95\x2d\xbd\xcc\x4b\xcf\xf3\x98\xe0\x3e\x2d\x60\x9f\x16\x4c\xbc\xc4\xd0\x73\x2f\x30\x2d\x9a\x87\x8f\xff\x0e\x86\x04\x0a\x31\xd4\x17\x94\xe5\x7e\x95\xe5\x6e\x99\xc0\xb8\x53\xbf\x26\x65\xdb\x5e\xed\xe5\x3e\xf1\x23\x1d\x43\xbc\x8c\xbc\x80\x20\x00\xc9\xbc\x9b\x88\xa8\xe7\x1d\xa9\x3b\x11\x71\x08\x43\x09\x26\x48\xa5\x0c\x66\x4e\xfc\x80\x1b\xc2\x54\xae\x89\xc0\x7d\xf2\xad\x96\x81\x92\xfe\xaf\x31\x93\xf9\xdb\x2c\x15\xac\x58\x26\xe3\x20\x1b\x93\xb3\xae\x60\x85\x00\xde\x85\x75\xb3\x9c\x2f\x40\x50\x66\x82\x8c\x7d\x66\x72\xb4\x10\x03\x40\x47\xaf\x08\x2a\xc1\xde\x33\xb9\x67\x30\xb3\x92\x0a\x3b\x6d\xc6\xc0\x99\x32\xd4\x4b\xf3\xac\xb1\x8d\x0f\xa2\xbe\x8d\xb4\x30\x1e\x2d\xb2\xde\xab\x94\x2b\x61\x09\xbd\x15\x72\x80\x1a\x05\xdc\xbf\x9a\x27\xb7\xc5\x2b\x9e\x2f\xe8\x2b\x02\xd1\x9c\x0c\x76\xb8\xa7\xbf\x13\xd6\x7d\xb1\xe2\x05\x58\xce\xbc\xc8\xb3\x31\x67\x82\xfd\x94\xaf\xb2\x49\x41\x59\xf7\xea\xfc\xdd\xc5\xd9\xeb\x8b\x7f\x9c\x5d\x5f\xbc\xbd\xfc\xf0\xea\xe2\xdd\xd5\xf5\x87\xcb\xb7\x2f\xcf\x3f\x5c\x5d\xbf\xbb\xb8\xfc\x19\x0c\x70\xd0\xe0\x50\xcf\x82\x75\x2f\xd9\x27\x0c\x35\x68\xdf\xbd\x7c\xfb\xe6\x9a\x33\xe5\x9c\xc7\x57\x30\x4d\xca\xba\x17\x2f\xdf\xbe\x79\x31\x4b\xb2\x5b\x06\x9d\xfd\xfa\xf3\x87\xcb\xb3\x37\xe7\x57\xbf\x9c\xbd\x38\x57\x75\xec\xc7\x86\xbd\xc3\xba\x6f\x2e\x2e\x2f\xde\x9c\xbd\xfe\xf0\xe2\xec\x97\xb3\x9f\x2e\x5e\x5f\x5c\x5f\x9c\x5f\xc9\x06\xce\x5f\x9d\xbd\x7f\x7d\x5d\x79\xad\xb4\xd7\xe7\xd9\x5d\xca\xf3\x6c\xa1\x6e\x5e\xff\x49\xc5\x5d\x63\x26\x72\xd3\xcf\x50\xcf\x46\x0e\x4c\x6f\x56\x42\x7e\xbf\x4a\x17\xcb\x39\x0b\x7c\x50\x2b\xf5\x8e\x15\xab\xb9\xd0\xe6\x54\x69\x76\xfb\xeb\x1b\xca\xba\xaf\xf3\x4f\xaf\xe5\x05\x07\x0f\x2f\xf2\x6c\x82\xa7\xc7\xb5\xbf\x0a\x84\x55\x65\xdd\xf7\x97\x2f\xcf\x5f\x5d\x5c\x9e\xbf\xfc\xf0\xee\xfc\xd5\xf9\xbb\xf3\x4b\x00\xd3\xe5\xfb\xd7\xaf\x9d\x17\x8e\xd3\x7e\x22\x19\xdf\xa8\x51\xcb\xc4\x24\x65\x95\x08\x86\x4e\x23\x20\x1c\x9b\xa6\xf3\xf9\xe5\x6a\x3e\x2f\xe2\xe8\xe9\x93\x18\x6d\x22\x1b\xf9\xb3\x64\x52\x0e\x5a\xad\xd0\x45\xe5\xe4\x1e\x04\x4f\xee\x81\x7b\x72\x0f\x46\x83\x76\x71\x5f\x8c\x93\xf9\xbc\xdd\x0a\x8c\x71\xc8\x46\xf4\x0b\x16\xb0\x25\x25\xa5\x45\x74\x41\x30\x60\x16\x2a\x2a\x67\x40\x8e\x43\xb8\x75\xb5\x5e\x62\xce\x13\x02\x77\x28\x3e\xd8\xda\x67\x53\x51\x09\x11\x48\xb2\xf8\x4b\xd6\x2d\x96\x92\x40\x93\x95\x20\x3f\x2b\xf6\x5c\xe9\xc7\x51\x10\x94\xa6\xc1\x47\xad\xac\x8b\xc3\x3f\xcd\xcc\x57\x00\xdf\xc0\x7d\x46\x33\x29\x2d\x1f\x88\x49\xad\x47\xeb\xd7\xda\x51\x80\xa4\x03\x0d\x28\x96\x9c\xdd\x69\xdb\x89\xcd\x96\xb5\xce\x9e\xc2\xd8\x39\x5a\x9b\xf0\xf3\x2a\x9d\x28\xf3\x2e\x79\x03\xd6\xfa\x1e\xba\x66\x59\x8e\xe8\x7d\x5b\xdb\xde\x06\x3d\xb2\x5a\x42\x4a\x29\x3b\x9d\x0e\x90\x08\x67\xa7\xb3\x81\x4a\x31\x73\x3a\x19\xec\xf6\xe1\xc7\x72\xa0\x43\x4e\x53\xaa\x43\x51\x9f\xca\x7b\x62\x0c\xf1\xd1\xc0\xbe\x9a\x95\x74\xf5\x35\xf2\xce\x29\x08\xab\xb3\x92\x1e\x02\x02\xe5\x54\x8f\x71\xc5\xaf\xef\x3b\x6d\x61\xe0\x60\xd9\xe6\xb7\x5c\xc2\xba\x49\x09\x50\xb4\xb5\x55\xab\xf2\x54\x95\x64\x8e\x7e\x6f\x25\x91\x16\xef\x74\xa2\x70\x41\xaa\x00\x6b\x75\x37\xda\x1e\x29\x36\x16\x16\xe5\xb8\x46\xde\xb6\x00\x00\xaf\x24\xe5\xfb\xef\xd9\x4f\xd0\xf8\x14\x47\x89\xf9\xcf\x5a\x61\x84\x6b\xac\xdd\xa0\xac\xb6\x87\x2b\x21\x61\xed\x31\xa1\x0a\xed\xf6\x62\xb2\xd4\xbf\xfb\x31\x59\x7c\xad\x82\x0c\x54\x10\xdf\x60\xb1\x89\xbe\x3f\xf9\x4f\x79\x3e\x77\x81\x6f\xd5\xca\x02\xbf\x06\xa5\xfd\xcc\xd5\xb0\x55\x6f\xa9\x4d\xc6\x47\x5b\xd9\x90\x2c\x13\x2e\xc0\xd0\x06\x26\x0a\x09\x58\x3c\x6b\xf3\x38\x12\xf1\x36\x56\x38\x5b\x1a\xd4\x18\x8f\x73\x74\xf8\x01\xa0\xc0\x18\x02\x9e\x3f\xf6\xe3\x50\x58\xeb\x1a\x25\xb8\x92\x7b\x9d\x0d\xc5\x88\xde\x47\x3c\x76\xdc\x2f\xb4\xed\xe0\x29\xeb\xfe\x96\xa7\x59\xd4\x6e\xeb\x60\x8b\x0a\x45\xf8\x76\x0b\x8e\xb9\xde\xbd\x85\x7c\x5b\xbf\x6c\xef\x1a\xd4\xd4\x15\xb9\xf2\x76\x3f\x6d\xb7\x07\x57\x26\x45\x40\x02\xf9\xf6\xfa\x35\x39\x22\xf3\x65\x1f\x44\x75\x8a\xf3\xc8\x21\xec\x57\x89\xb7\x54\x7e\xef\x11\x8f\x23\x46\x32\xc8\xb2\x1c\xcb\x05\x9f\xe7\xc9\x04\xf4\x85\x7e\x7c\x5a\x92\x2b\x2b\x5b\xd9\xe9\xa3\x0d\x9d\x72\x47\xd9\xa9\xe2\x8f\x46\x5c\x36\xed\x72\x56\xb6\xb5\xa3\x6d\xa6\xa0\xc6\x27\xdb\x50\xec\x07\x84\xca\xd5\x6d\x13\xa7\xb5\xe3\xed\x5b\x03\x79\x9a\xfb\x9c\x97\x9e\x13\x9a\x9f\x0e\x41\x58\x80\x3c\x85\xdf\x3d\xc6\x09\x25\x89\xed\xfd\xe9\x26\xd0\xd8\x55\xb0\x41\x0c\x38\x8e\x04\x9b\xb6\x91\xdd\xde\x24\xcb\x28\x1e\x66\xa3\x96\xb9\xd9\xd2\x4e\x07\x62\x55\x80\x4b\xfb\x7c\xaa\x4a\x47\x59\x1c\x13\x0f\xba\xa9\x1d\xd1\x41\xaf\x71\x44\xf2\xff\x83\x16\x2b\xe5\xf4\xe1\x64\x77\xd7\x81\xe9\xe3\xef\x98\x94\xbf\x78\xce\x10\xf5\xc8\x4d\x2f\x4f\xb6\xda\xca\x25\x48\xe1\x1a\xc4\xad\xf4\x34\xc2\x2c\xe9\xe9\xf0\x60\x14\x13\xf3\xd0\x77\x1f\x7a\xa3\x38\x1e\xe8\x82\x8a\xbb\xaf\x7d\x70\x56\xb5\x71\x64\xbb\xbb\xe1\x11\xf9\xfb\xfd\x74\x32\x58\xda\x16\xfb\x3d\x5f\xad\xe3\x6d\x3b\x1f\x6a\x1a\xf7\xbb\x25\xb8\x12\x9e\xdb\x9c\x2a\xda\x56\xde\xeb\x93\x97\xfa\x2c\xe3\x0a\x9b\xb0\x56\x4f\xc5\x46\xe5\x80\xe5\xe3\x27\xe9\xf3\xde\x49\xba\xbf\x1f\x7f\xc9\x86\xe9\x7e\x7f\xe4\x0f\x63\xed\xcf\x50\xf2\xfc\x6a\x41\xd1\xc2\xb0\xfd\xe2\xfd\xbb\x77\x17\xe7\x2f\x77\x5e\xbc\x7d\xf3\xcb\xdb\xcb\xf3\xcb\xeb\x1d\xb8\x54\x21\x60\xd8\xce\x30\x9d\xd0\x47\xd3\x5e\x6f\xca\x6e\x9e\xee\x27\x3d\x36\xdd\x3f\x3a\x3e\x7a\xbc\xff\xf4\x29\x4b\xf6\x93\xf1\xe1\xc1\x93\xe9\x93\x5e\x32\x66\xc9\xa8\x6d\x31\xe5\x8d\x73\x47\x45\xbb\xec\xe1\x61\x97\x0d\x6f\x47\x8a\x41\xf9\xb0\xd1\x17\xc2\xbb\x5c\x13\x0e\x56\x9e\xf2\xf7\xf0\x76\x44\x4d\xa2\x02\x8f\x18\x59\x65\x9f\xb8\xe7\x7f\x23\x97\x8a\x33\x70\x3a\xf6\xa2\x0e\xb4\x7c\x2d\xcf\xc9\x89\xd9\x24\xa0\xb4\x81\xe0\xd3\x29\xe5\x6a\x08\x20\x23\x96\x97\x88\x2b\x3f\x59\x72\x06\x1a\xaa\xcc\x79\x29\xb7\x42\x96\x2c\xd8\xa4\xbb\x60\xfc\x96\x45\x99\x7a\x8a\x63\xb2\x7b\x13\xa5\xc6\x50\x29\x6d\x09\x9a\xae\xd7\xa4\x21\xec\x83\x1a\x66\x25\x06\x81\xab\x00\x52\xac\x06\x35\xc0\x91\x9b\xec\xd4\x13\xf1\xe8\x6c\xd3\x9a\xf8\x90\xab\x71\xca\xf7\xb4\x0b\xe0\x80\x07\x22\x15\x7c\x72\x88\xe5\x73\x59\xde\xbb\xc3\x4c\xb1\x73\xd7\x1c\x14\x48\x4a\xf6\xf0\xd0\x78\x19\xda\xba\x9f\x9d\xeb\x13\xf3\xb3\x58\xba\xde\xe4\xc7\x60\x9d\x8e\x6d\x8f\xba\xed\xfd\xe9\xfa\xcd\x6b\xdb\xda\xd5\xd6\xad\x55\x78\x88\x6e\x96\x4f\xd8\xf5\xfd\x92\xd9\xd6\xde\x3a\xad\x61\x06\x1a\x5b\x7e\xdd\x28\xdb\xf8\xa0\xb4\xde\x0d\xb6\x4c\xcd\x09\xc3\x2d\xaf\x27\xd9\x7b\x01\xf1\x6e\x34\xfd\xc6\x49\xea\x1a\x0b\x92\x54\xf9\x09\xb5\x51\xc4\xb7\x2f\xd8\x67\xd1\x96\x6f\x93\x5b\xe5\x3e\x87\xe5\x8d\x59\x59\xea\x99\x95\x6d\x08\x4d\x54\x63\xcc\x54\xe5\x9c\x9b\xed\xde\x44\x72\xdb\x12\x8e\xa1\x5e\xd9\xd6\x2d\x7e\x78\xa8\xbe\xa4\x25\xdb\x71\xad\x29\x33\x84\x30\x18\x34\x05\xec\xaa\xb4\xc7\x8a\x6f\x72\xd7\x62\xbb\x8a\xd9\x89\x04\xd5\xdb\x59\xae\xf1\x29\xb3\xbb\x3a\xc6\x22\x4a\x4b\x99\x4f\xd4\xbe\x70\x4c\x64\x1d\x8b\xd9\x58\x07\x81\x21\x1f\xff\xcd\x3e\xb1\x1b\xec\xaf\x79\x85\xe3\xad\xe5\x0e\xe0\xdc\xa3\x91\x33\x69\xb0\x20\x68\x62\x68\xb6\xb1\xfa\x83\xbd\xa0\x17\xdf\xe3\x5e\xf4\x1e\x0a\x8c\x4d\x2e\xc6\xc3\xc3\x39\xfc\x35\xb9\x9c\xec\x91\x7b\x78\xa8\x1e\xdb\x75\x24\xe2\xd3\xfe\x20\x92\xcb\xd1\xe9\xc8\x0b\xe5\xb4\x37\xf8\x2c\x5f\x1e\x0e\x02\x3d\x48\x04\xd1\xe9\xf4\x41\x94\x60\x4f\xbc\x2c\x7e\x34\xb8\x92\xff\x1d\x0f\xfa\xc8\x3d\x21\x05\xf6\x84\x04\xf4\x06\xee\x45\x6a\xb6\x28\xa7\xe7\xb2\x05\x8b\x23\x85\x24\x23\x98\x12\xa9\x16\x51\x8c\x16\x23\x28\x75\x94\x88\x2b\xe2\x0e\xa9\xf7\x74\xdb\x8e\x10\xeb\x79\x3d\x8a\xaf\xe8\xe9\xf0\x60\x53\x4f\xf2\xe4\x58\xfc\x40\xcf\x23\xee\x4e\x8b\x2b\x5a\xbb\xae\xbb\x6b\xf6\x59\x44\x69\x7c\x02\x3c\x21\xfa\x2f\xc7\x60\x74\xae\xed\x13\xff\x96\x0a\x45\x71\x9c\x45\x39\x11\x24\x75\x88\xb5\xc3\xde\xb6\x50\x68\x98\xf0\x2b\x9e\xdc\xca\x0f\x4a\x9b\x83\x0d\xf7\x7f\x40\xc3\xa0\xe2\x75\x1a\x3d\xf0\x21\x69\xcf\x45\x29\xd9\x9d\xad\x70\x58\x53\xc1\xa4\xa0\xb3\x8c\xd5\x51\x7d\xdb\x7e\xda\x4a\x5b\xe5\xb8\xb6\xf5\x9a\x1a\xfd\x83\x7a\xe2\xd8\x27\x47\x4b\x7c\x82\x0a\x41\xcf\x9d\x95\xeb\x1f\x6e\xc9\x01\xf0\xe7\xcf\x0f\x75\x2e\xb9\xc7\x1d\x6e\x5c\xdb\x34\x99\xef\xd9\xef\xf4\xf5\xeb\x52\xff\x2a\x2c\x9e\x24\xa3\xdc\xd2\x07\x35\xa5\x4d\xbc\x39\xaf\xf4\x21\x96\x3e\xcf\xc6\xf9\x84\x4d\x6c\x56\x36\xee\x15\x3b\x1a\xc0\x7f\xc7\x1b\x47\xb2\xb6\xb0\x38\xaa\xdf\x6c\x2d\x74\x16\x5f\x69\xe7\x3b\x81\xdc\xbb\x03\xca\xe3\xcd\xd5\x95\xe9\xbe\xdd\xb5\x4e\xed\x66\x2e\x16\x78\x46\x60\xc4\x20\x8f\x8d\x12\x16\xf0\x78\x3f\x33\xeb\x0d\x09\x18\x9d\xf6\x1a\x18\xc8\x96\x7b\x82\x1c\x14\xd3\x6f\x60\x07\x51\x4a\xe1\x15\x6f\xe0\xd1\x5a\x38\x50\xb7\xfc\xd1\xa6\xbd\xe6\xad\x90\xe6\x89\x5a\xac\x92\xa2\xc7\x95\x64\x3c\x6a\x90\xc6\x48\x9c\x00\x59\x72\x9c\x41\x3c\x3a\x28\x71\x81\x2a\x3f\x8e\x1d\x64\x33\x0c\xea\xcf\x96\x1b\xee\xce\x3b\x62\x47\x8f\xc3\x7c\xa7\x6a\x03\xb9\x58\xa7\xf8\xa3\xfa\x6d\x04\x18\x5e\xb1\xa8\xfc\x14\xb7\x14\xf7\x92\x14\xc0\xbb\xcb\xd5\x7c\xee\x4c\xe9\xb8\x01\x89\xda\x16\x51\xb9\xac\x64\x34\xc2\x48\x67\x74\x7f\xd6\xc6\x26\x8d\x3d\xac\xa6\x33\x05\x81\xbc\x44\xbd\xd2\x8b\xa4\xd5\x62\xa4\xa0\xa9\x9b\x8c\x74\x45\x0d\xf3\x9c\x4e\xa3\xd5\xf3\x5e\xfc\x25\xa1\x49\x77\x2c\x71\xaf\x63\x45\x30\xa7\xbd\x93\xf9\xb3\xd5\xc9\x7c\x6f\x2f\x4e\x5c\xe1\x53\x31\x9c\x8f\x48\xde\x4d\x44\x34\x8f\x25\x47\xec\x0e\xc3\x1d\x41\x02\x89\x89\x25\x71\xee\x6c\x80\xe3\xa6\x5d\x58\x16\x9f\xa4\xd3\xc8\xbf\x10\xd3\x38\x4e\xf5\xe1\xed\x74\x58\xf7\x36\x17\x39\x6c\xd2\x79\xc1\x94\x91\x0a\x30\xf4\x59\xc9\xb1\x43\xe2\xc7\x1c\xcf\xbe\x53\x8d\x54\xee\xd6\x37\x51\xee\xa2\xa4\xe3\x26\x41\xdd\x57\x0d\x56\xde\xe3\xdf\x30\x58\xa7\xda\xe6\xc1\x36\xcb\x01\xb5\xd8\x0b\x87\x0c\xcd\x53\xb0\xa4\x34\x5d\xd8\xa6\x1a\x0e\x01\x56\xdd\x44\xa9\xbc\x71\x5d\x94\x82\xd3\x14\x2e\xf6\x7e\x74\x18\xec\x91\x65\x77\x2a\xad\x2e\x60\x71\xae\xb1\xb8\xc8\x43\x32\xfa\x88\xdb\x4b\xa1\x29\xc1\xce\xd6\x1e\x9f\xc0\x20\x26\x45\xc1\xb8\x68\xa3\xcc\x5e\xf9\xcb\xf1\xee\x18\xfc\x85\xb6\x72\x99\x0d\xb9\x3b\x99\x29\x6a\x46\xc4\xe6\xee\x50\xe0\x25\xc2\x67\x4d\x02\x3a\x57\xdf\x9c\x52\x8e\x47\xaf\x89\x8e\x8b\x12\x47\xae\x7f\x59\x14\xc3\xde\x57\xb9\xdf\x0d\x13\x56\x93\x60\xe6\x6b\xbc\x08\xc1\x26\x9a\x93\x0c\x01\xf6\xdb\x6a\xb1\xdc\x4f\xa7\xfb\x59\x2e\xf6\x31\x8f\xe2\xa4\x2d\xbf\x82\x03\x6d\x56\xc7\xab\x7e\x9b\x7b\xd0\x26\xb8\xc0\x6a\x85\x6c\x32\xdd\x51\xb4\x76\x59\x37\x99\x7f\x4a\xee\x8b\x77\x06\x5a\x9d\x8e\xc3\x78\x67\x2e\xd6\x50\x11\x0a\x26\x00\xe4\x6a\x94\x02\x7f\x76\x33\xdf\xfd\x56\x03\xbd\x26\xf1\xcb\xf6\xae\xc8\x68\x86\xce\xb5\x10\x23\x9d\x28\x50\xdf\xeb\x7d\x9a\x79\x41\x38\xbe\x4e\xa7\x14\x92\x52\x78\x76\x94\x7a\xf2\x76\x42\xb5\x69\x5e\x4c\xcd\xca\x90\xd4\x7b\x18\xfe\x5c\x59\x52\x22\xfc\x6e\x98\x9b\xf4\xc4\x51\xd5\x6b\x13\x68\xf5\x58\xaf\x8a\x77\x1b\x6a\xf4\x5d\x0a\x4d\x14\x9d\x62\x96\x6c\xdc\x90\xc8\xe4\x86\xcd\xf7\xda\x3b\xc3\xf6\x1e\x3c\x7f\xb8\x5d\xa5\x93\xbd\xf6\xa8\xed\xf3\xc0\x0d\x14\x65\x88\x5b\x02\x0e\xb0\x4e\xb1\xe0\x30\x43\xcd\x84\x65\xa5\xd9\x17\x2a\x8f\xe8\x16\x2d\x1f\x36\xdc\xcc\x7e\xcb\xf9\x92\x65\x68\xf4\xb4\x4d\xbb\x0d\x74\x7d\x13\x13\xe9\xf6\xe2\xb0\x8f\x47\x01\x72\x8a\xf0\x2d\x14\x5b\xe1\x2e\x43\xb7\xb6\xa0\xa9\x1d\x92\xbe\xac\x8b\xda\xcb\x5a\xd0\x42\x63\xed\xc0\x1d\x5d\xc4\xf1\xba\xd2\x49\x1e\xc7\x9c\xe6\xd5\x4e\x56\xe1\x4e\xf2\xb8\xc5\xe9\xaa\xa1\x93\x15\x10\x62\x0e\xf0\x40\xb9\xc5\x16\xb9\x60\x06\x84\x24\x21\x2e\x37\x50\x21\xc4\x9d\xca\xf9\xd2\xaf\xeb\x2c\x66\x58\xb2\xe3\x70\x45\x8e\x0a\x55\xf4\x20\xee\x39\x24\x09\x53\xd6\x12\xdd\xe9\x5c\x05\x82\x26\x35\x5a\x57\x81\x51\x84\x64\x01\x67\x44\x50\x4d\x8f\xc6\x95\xca\x84\xe5\x3f\x4e\xcd\xf1\x3c\x2f\xec\x3c\x5a\xa0\x44\xaa\xd8\xb6\xda\xcd\x3e\xec\x8d\xe4\x0d\x31\xec\x8f\x80\x7b\xb9\xeb\x16\xe3\x19\x9b\xac\xe6\xec\x42\x6e\xf2\xf9\x1c\xaf\x56\x0e\xf1\x03\x4d\xb4\x86\x5b\x26\x5e\x32\x65\xeb\x97\x73\x49\x79\xa7\xf2\xbe\xc8\xd8\x27\x78\x9b\xab\x14\x9b\x92\x3b\xb4\xe0\x6f\xd2\x51\x36\xeb\xae\x49\x42\x73\x63\x11\x5d\x50\x95\xee\x96\x91\x55\x69\xc3\xcf\x3d\x38\x80\x19\xf5\xd8\x18\x24\x66\xb7\x60\x4b\xad\xf6\xd1\xdb\x25\xfa\x9f\x15\x64\x56\x35\x7a\x9d\x48\xd6\x40\x31\xdd\x63\x52\x90\x15\x99\x91\x69\xdc\x6a\x58\x72\x39\x3f\x03\xa6\x84\x60\x3c\x9c\x25\x4d\x24\x98\xae\x93\xdb\x68\xe2\x13\x8f\xd7\xc9\x6d\x1c\x2d\x43\x92\xae\xdf\xa2\x25\x91\x0d\x68\x7a\xee\xb7\xef\xd7\x0c\x28\x22\x24\xd5\xf0\x03\xb5\x80\x49\xf6\x6c\xb5\x02\x6a\x20\x9a\x7c\xe1\x6d\x54\x06\xe8\x18\x18\x8e\x9c\xef\xfb\x2e\xd6\xb2\x6b\xa7\x5a\x54\xed\x75\x89\xbd\x5b\x97\x98\x5b\xed\x79\xe9\x0c\xa6\x95\x59\x3a\x25\x8d\x1f\x1e\x22\x7f\xdf\xaa\x52\x66\x3d\x38\x11\x71\x35\xa6\x47\xe6\xc7\x5e\x28\xf4\x1d\x76\xb8\x05\x4b\x01\xec\x6a\xbe\x3c\x2c\xed\x5a\x4f\x2d\x9e\xd4\x7c\xca\x62\xc9\x9b\x9e\xd6\x09\x9e\xb4\x05\x82\x73\x9c\x0b\xf9\x59\x67\x77\x06\xfb\x53\xc8\xc4\x5e\x38\x28\xa1\x49\x92\x93\xe2\x98\x73\x1c\x73\xdd\xc0\xb8\x1c\x98\x7f\x9e\x24\xd7\xac\x57\x7d\x4e\xf3\x9a\x41\xe7\x6a\xd0\x64\x4c\xcb\xc3\x2e\xdb\xcd\x46\x09\x59\x91\xdd\xdd\x94\xcc\xcb\xbc\x54\x11\x3a\x0b\x2f\xa3\x82\x8c\xcd\x49\x78\xf9\xbd\x54\xbb\x1f\xef\x23\x31\xc6\xbc\x96\x8c\x87\xd8\xbb\xfb\x38\x07\x43\xbf\x63\xb8\x10\x3f\xc4\x86\xa7\x19\xfb\xaa\x90\x21\x9b\x4e\x84\x19\x98\x3e\x13\x56\x45\x66\x0f\x85\x7b\x02\xb6\x54\x91\x65\x56\x45\xa6\xf5\x63\x46\xd5\x42\xe0\x00\xd9\xa3\x60\xa0\x7b\xe9\xdb\xd3\xee\xc8\x2b\x2c\xff\xb8\x5a\x06\x54\x99\xb0\x0e\x40\x7a\x5e\xd4\xeb\xe8\x15\xd2\xaa\xea\x8c\x9c\x1c\x2c\x0a\x0f\x30\x91\x68\x17\x53\xd0\xe1\x67\x41\x7f\xfd\xba\x50\x28\x8e\x82\xf5\x7b\xa2\xe8\x78\xda\x72\x1b\xff\x83\x3b\x21\x39\xd2\x69\xc4\xc1\x8a\xb2\x1c\x9b\xc3\x0e\x01\x79\x39\x38\xd8\xe9\x34\xba\x91\x94\x62\x46\x39\x50\x40\x3b\xe9\x34\xaa\xa8\x8c\x79\xa7\xc3\xe3\x2f\x19\xbd\xf4\xf2\x67\x71\xc2\x2d\x6c\x8c\x41\x9a\xe3\x6e\x77\x6f\x72\x6b\x59\xb0\xf0\x30\x4c\x48\x56\xf1\xee\x77\x8d\x5d\x45\xad\xab\x86\x59\x90\x96\x8e\x02\xd1\xe9\xdc\x28\xcd\xa8\x32\xae\xfd\x80\xf6\xcd\x26\x96\x0f\x79\xbd\x29\x9c\x4d\x5a\x08\x57\x75\x18\x32\x11\x64\x6e\x24\x07\xb6\x95\x5e\xd1\x9a\x04\x0e\x47\x66\x09\xd3\x42\x60\x8c\x2d\x11\x88\xb1\xf5\x29\x12\x4e\x94\xad\xb8\x05\x72\x22\x6d\xc7\x86\x7d\xba\xb9\xd6\xb4\x83\xb7\xb2\x03\xdc\x69\x57\xe2\x5c\xbe\x72\xb4\x2b\x3d\x79\x4b\x21\x9d\x81\x39\x0f\xfb\x83\x5e\xec\xbc\xbd\x4e\x6e\x4f\x0f\xf0\xd5\x92\xb3\x65\xc2\x21\x21\xf6\xe9\x11\xbe\x53\x14\x09\xbc\x7a\x82\xaf\x0c\xae\xf8\x53\x9e\x7f\x3c\xed\x3f\xc2\xd7\x88\xc1\xe0\xe5\xe1\x81\xdf\x0b\xd0\x38\xa7\x8f\xfc\x46\x5f\x24\xf3\x39\xe3\xa7\xfd\x03\xdd\xb0\x42\x10\xd0\xc0\xc1\xf1\x23\xaf\x2c\x50\x85\xd9\x98\x9d\x1e\xf7\x65\xd3\xd6\x0a\xe2\x77\xd7\xaf\x65\x77\x37\x62\x1d\xa1\xed\x17\x1f\x35\xe8\x2c\x1d\x09\x33\xca\x97\x3f\x6a\xe2\xcb\x65\xa9\x1e\x37\x28\xfc\x54\x13\xc0\x29\xe8\x36\xe4\x5e\xbc\xf6\x1b\xd8\xd6\x88\x32\x33\xec\x93\xfe\x55\x54\xae\x4c\x5f\xf2\x0e\x84\x68\xd5\xab\xaf\xc1\xcc\x52\x0e\xef\x22\xca\xc9\x8a\x14\x24\x71\x07\xd9\xa0\x67\x2b\x29\x2c\x2a\x34\x72\x4a\x33\x43\x4e\xe5\xf4\x95\xb2\xbd\xf3\xfc\x04\xd1\xa1\x21\x96\x73\xfb\x32\x31\xf8\x60\x90\x11\xac\x37\x48\xc9\xd8\xa9\x30\xc8\xd1\x6d\x02\xb0\x2b\x06\x98\x57\x98\x16\x22\xcb\xc3\x4f\x75\x21\xa8\x13\xef\xab\x2b\x1c\x8b\xc9\xc7\x21\xaa\x2a\x43\x9a\xa4\x6f\x39\x55\x52\xd0\xa4\xa4\x2d\x5f\x35\x02\x3f\x07\x14\x5c\xc7\x59\x61\xd4\x54\x52\x41\xb1\x85\xc2\xaf\xa1\x55\x93\x04\x7f\x0c\x29\x46\x20\x24\xd5\x8d\xe4\x66\x95\x00\xb1\x47\x78\x77\x95\x71\x96\x8c\x67\xb2\xef\x38\x8a\x5b\x19\x2d\xd6\x49\xc5\xd6\xf5\x71\x40\xb2\x2b\x6f\x3e\x47\xb9\x89\x5b\xab\x75\x13\xa5\xf1\x29\xa7\x4a\xc0\x33\x10\xf4\x55\x14\x71\x6a\x68\xf5\xb8\xb2\x84\xa9\x59\x42\xd4\x32\xba\xeb\x58\x5a\x3d\x61\x96\x95\x6f\x5e\x47\x87\x51\x7b\xec\xa9\x00\x32\x70\x01\x11\x5d\x65\x26\xa5\x79\xbe\x95\x84\x27\x44\xb1\x89\xb5\xda\x25\xb5\x02\x08\xe0\xd7\x2a\x42\x87\xdd\x9b\x28\x69\x80\x65\x4a\x13\x1d\xcd\xd6\xd1\x2a\x3e\xde\x56\x4b\x19\xb2\x81\xf6\xf3\x96\x29\xb2\x3c\x7b\xfe\xfc\x88\x14\xf4\x49\x27\x23\x2b\x3a\x1c\xb5\x8e\x3a\x59\xa7\xb3\x52\xfd\x2a\xff\xd4\x98\x1c\xb8\xef\xc0\x59\x35\x26\x7d\xf7\x9d\xf2\x5c\x95\x74\x93\xe3\x01\x9a\x12\x79\xa0\x13\xb2\xbb\x5b\xc4\x24\xd5\xea\x36\x70\xfb\xb4\xd3\x79\xbc\x59\x65\x8b\x8d\x2a\xcf\x61\xe1\xda\xce\x6e\xc4\x81\x00\x72\xcc\x51\x61\x91\xa1\x23\x3d\x78\xdc\x6c\xe5\xea\xda\xdf\x7a\x6a\x5f\x0f\x2f\xa6\x5d\xbb\xe9\x5a\x72\x51\x3b\x9d\x28\xa9\x71\x8d\x62\x4e\x59\x2a\xd0\xd6\xb2\x8a\xae\x10\x35\x59\x9d\x80\xe6\x56\x53\xd7\xd3\x31\x65\x45\x10\xb1\xe5\x31\x08\xd3\x53\x92\x90\x1c\x83\x9e\x14\x34\x01\xfe\x45\x77\x31\xa7\x85\xe3\x47\x2d\xaf\xf1\xdf\xa3\xd4\x6b\x99\x1c\xc5\x6a\xd0\x63\x9a\xab\xec\xd2\xc8\xfd\x14\x64\x6a\xdf\x64\xc9\x82\x15\x64\x46\x57\xee\x1d\x1d\xcd\x89\x42\x44\xb3\xf8\x4b\xde\x1d\xcf\x59\xc2\x1d\xad\xe2\x84\xf6\x4e\x26\xcf\xc6\x9a\xe2\x98\xec\xed\xc5\x78\x78\xc7\xc3\xc9\xc8\x96\x5b\xd2\x99\x63\x88\x49\x16\x74\xa6\x2c\x41\xc9\x1d\x35\x89\x91\xee\x69\xef\xe4\xfe\xd9\xdd\xc9\xbd\x6d\x64\x39\xbc\x77\x1a\xb9\xf5\xfc\xb2\x17\x31\xf9\x40\x7b\x27\x1f\x9e\xdd\xea\xde\x3f\xd8\x8a\x8b\xe1\xed\xf0\xc3\x68\x14\xb7\x72\xdc\xc0\x19\xb9\x25\x53\x72\x47\x76\x7b\xf1\x3a\xd3\x1e\xca\x2a\xdb\x92\x7d\x34\x9b\xb1\xe9\x3e\xb5\x4c\xa7\x2f\x35\x51\x92\x1c\xbb\x23\x40\x98\xa3\x97\x68\x45\xf3\xf2\x52\x17\x95\xa5\x4e\x0c\x02\x54\x22\xf3\xd6\xef\xd1\x8a\x3c\x3a\x92\x5b\x70\x5e\x91\xe4\xe8\x18\xda\xfd\x0e\x27\x53\x5b\xfc\x89\x2c\x3d\x2d\x69\xf7\xb4\x5b\xbb\x29\xd5\x3f\x80\x72\x33\xd7\x10\x3f\x46\xbf\x9f\xc2\x44\x44\x06\x7d\x1d\x0e\x8a\x4c\xc9\x9c\xcc\xc8\xee\xee\x18\x60\x2a\x5f\x99\xac\x20\x85\x15\x05\x41\xeb\x07\xc7\x8f\xe2\x4e\x67\x37\x20\x15\x92\x54\x67\x89\x13\xfe\x5b\xb4\x24\x13\x52\x10\xd7\x5c\xfd\xc9\x26\x52\xc1\x3f\xbf\xc1\xe3\x06\x67\xd9\x97\xe4\xe5\x71\x2b\x09\x48\xf2\x5c\xef\x87\x7e\x49\x8c\x7a\xc3\x6e\xd3\x0c\xa4\xb6\x3f\xf3\x7c\xa5\x6c\xdb\x4b\x72\x59\xe5\x47\xab\x8c\xe6\x9d\x29\x1c\x96\x5a\xaa\x95\x8f\xb2\x4f\x3b\x7f\x72\xe4\x1d\xcd\xae\x0a\xdf\x21\xef\xd8\x20\xe3\x68\x94\x01\x16\x4c\xb8\x92\x8e\x82\xec\xee\x66\x92\x94\x50\x7b\xe6\x4f\xcd\xd1\x60\x0d\x25\x5f\x04\x02\xd8\x8d\xe7\x49\x51\x38\xd9\xb0\xb5\x94\x6c\x63\xfa\x6b\x67\x44\x01\x27\x57\x25\xca\xfd\x72\xa7\x22\x75\x12\xc0\x6c\xcb\x64\xcc\x06\x19\x11\x7c\x55\x88\x34\xbb\x1d\xf0\x75\xab\x0d\xdd\xb7\x29\xd8\x43\xbb\xe3\xd1\x91\x10\x48\x69\x06\x43\x36\xa2\xa9\x8a\x96\x64\xa4\xa2\x25\xf7\x61\x7f\x1a\x98\xe4\x89\x11\xa1\x92\x3c\x81\xe8\x3b\x1c\x5e\x69\x27\xd5\x39\x3e\x4d\x77\x9e\x37\x97\x33\x0a\x01\xe9\x9c\x74\xf8\x1b\xca\xbb\x66\x82\x24\xa1\xbc\xab\xa7\x28\xd1\xb6\x9d\xa2\x00\xd7\x1b\xb9\xdf\x5e\x47\xee\x5c\xe3\x98\xa8\xa4\x85\xbb\xc6\x65\xb2\xd8\x2c\xef\x12\xc4\x68\x55\xe0\x6a\x3a\x29\xeb\x5d\x82\x52\xaf\x94\x14\x71\xbc\x5e\xcb\x71\x41\x97\x75\x53\x5e\x95\xa7\x0c\x62\x2c\x32\xa7\x51\x4a\x57\x66\xde\x2b\x6f\xde\x2b\x33\x6f\xb2\x71\xf4\x98\xa5\xd1\x9f\xc2\xd6\x73\x98\x5b\xaf\x39\x7f\xb5\xcb\x5c\xf2\x4f\x1e\xdf\xd8\x87\x9b\x99\x91\xbe\xc3\x59\xbe\xaf\xc4\x65\x01\x7b\xf5\x9b\x39\xeb\x16\x60\x9f\xe3\xa6\x0d\x05\xbe\xed\x96\x89\x48\xc4\x27\xfb\xfd\x5d\x4a\xf3\x4e\x27\x0d\x78\x74\xe5\x7b\x7d\x92\xc4\x84\xa3\x44\xab\xd3\x89\xf4\x4f\xb9\x7f\x13\xcd\xba\x3e\xdd\x64\x42\x56\x25\x93\x9c\xeb\x2d\x31\x98\xd6\xbf\xe8\x1a\xf0\x48\xab\xe8\x4e\xd2\xc9\x0b\xb8\x5e\xb4\x12\x27\xf1\x17\x8b\x7d\x5e\xb2\xb1\x78\xe1\xa8\x36\xa2\xf6\xcb\x52\x1d\xe5\x85\xfe\xff\xd3\xd2\xc6\x76\x0c\xa8\x48\x23\xde\x4d\xde\x78\xd5\xbb\xc3\x99\x94\x7f\x7d\xe0\xa4\x4a\xac\x9f\xb9\x32\x73\xf7\xca\xda\xe4\xb6\xf7\x43\xba\xbd\x4e\x6e\x2f\x93\x05\xf3\x7b\x0e\x71\x11\x19\x92\x29\xfd\x1a\x32\xc5\x55\x38\x39\xe3\x08\x33\xfb\xa0\x7c\x52\xc4\xf3\xd8\x28\xa8\xa6\x25\x8a\x86\xcc\x5c\x2a\xf4\xa7\x68\x2a\x99\xff\x4c\xa9\x89\x30\xc0\xce\x8c\xac\x50\x39\x2a\xe9\x54\x7f\xd0\x78\x44\x7a\xf6\x88\x44\xd3\x46\xe6\x34\x71\x42\xbe\x60\xfb\x63\xb9\x0f\xe6\xc8\xb2\xe2\xf1\xb9\x86\x1a\xc4\xbc\x55\x1c\xa2\x63\xa9\xb4\x95\xd3\x5e\xad\xbb\xa5\x25\x3c\x12\xfa\x2a\xca\x1b\xc4\x12\x45\x8d\x58\x22\xf7\x19\xdb\x24\xc0\xce\xa6\x7e\xd2\xbb\xd4\x9d\x5a\x59\x46\x61\xc9\x0c\xee\xaa\x51\x9e\x6c\xcb\x1b\x65\xce\xd4\xac\xaa\xdd\xdb\xbc\xad\x44\xa7\x2f\x4d\x49\x82\x99\x48\x73\x6b\xd1\xb0\x49\x16\xe5\xb5\xe5\xa3\xba\x8a\x1b\x67\xa6\x93\x83\xf6\x81\x70\x37\xb3\x09\x11\x49\x99\x63\xc8\xe7\xf4\x91\x01\xf3\x92\x62\x47\xb3\xa4\x38\xbf\x4b\xe6\x1a\xd5\xa6\x88\x16\x3d\xc2\xa4\xe4\x24\x2b\xcb\xab\xd1\xe4\x8e\x79\x5e\x99\x42\xad\xba\x22\x56\x8f\xbc\x69\xd7\x35\x67\x50\x46\x00\xf2\x4c\x2a\x47\xb9\x44\x5c\x02\x1b\x56\xd0\x04\x27\xbf\xdf\x3f\x29\x9e\xd3\xde\x49\xb1\xbf\xaf\x2f\xc7\x64\x58\x8c\x24\x93\x50\x73\x53\xc8\xcf\x31\x9c\x55\xd5\xa6\xbc\x32\x56\x64\xb7\x8f\xb7\xc6\x5c\xde\x1a\x8e\x05\xe8\x7c\xaf\x4f\xc6\x31\xc9\xec\x75\xa1\x7f\x0e\x57\x23\x3a\x76\x66\xfd\x75\x17\x46\x5a\x9a\x25\xf2\x99\xad\xf7\x51\xbb\xa3\xa4\x0c\x3a\x4e\x16\x04\x34\x63\x31\x91\x5f\xd2\xec\x8e\x71\x88\xa1\xa5\x42\x69\x39\x9f\x30\x77\x4b\x9b\x60\xb0\x2d\xf5\xc9\x52\xef\xcd\x9e\xc2\xe5\x6d\x8c\x8a\xb4\x2a\x4e\x78\xfa\xf5\x57\x48\x88\xfd\x28\x1b\x61\x20\x8b\xd0\x4a\xe5\x25\xa8\x82\xec\x20\xe2\xca\x49\x82\x7a\x2a\x7b\x3f\x46\x39\x49\x03\xc6\x21\xff\x02\x51\x8c\x2b\x57\x7d\x5a\x36\xfd\x18\xe7\x8b\x45\x2a\x5c\xa6\x05\xe9\xf4\xbf\x35\x2a\xdc\x0d\x01\xa2\x55\x8d\x79\x83\xca\x3d\xef\x9a\x40\x6a\x94\x13\x73\x9f\xd0\x8c\xe4\x1e\x9f\x4a\x53\x92\xfb\x4a\x78\x53\xaf\x4d\xf2\x1f\xa9\x5b\x34\xed\x1a\x7d\x3b\x2e\x09\xaa\x91\xdc\x51\xb5\xb8\x56\x13\x0a\x08\xf0\xa5\xac\xde\xfe\xd5\x04\x9e\xed\x80\xa3\xc1\x50\x05\xd0\x8d\x0a\x4b\x65\xc1\x31\x49\x27\xfb\x08\x12\x15\xa5\xae\x2d\x3f\x55\x0d\xeb\x7e\x28\x90\x4a\x26\x09\x16\x66\x08\x24\x35\xca\x16\x18\x05\x2a\x6b\x02\xdc\xa1\x10\xe0\xcf\xec\xd0\xf7\xa8\x63\xd5\xd1\x4d\x5c\xb5\xea\xaf\xea\xc8\x48\x2a\x22\x9f\xb3\x6e\x9a\x4d\xf3\xa8\xfd\xbe\x60\x3b\xff\x33\xce\x33\xc1\x3e\x8b\xff\x21\x3b\x49\x36\xd9\xf9\x1f\x89\x94\x9e\x2d\x13\x31\x7b\x1e\xff\xcf\x8e\xc8\x77\x20\x68\x11\xd0\xd3\x3b\x82\x2d\x96\xf3\x44\xb0\x6e\x3b\x26\x22\x6a\xcb\x77\x6d\xa5\x7f\xfd\x3b\xfd\x15\xb6\xf2\xcf\x0d\x7a\x58\xad\x85\x2d\x54\x20\x2c\x54\xaf\xe5\xe3\x64\xee\x33\xa0\x46\xae\x94\xd2\xde\x49\xfa\x4c\xdf\x35\x27\xa9\x56\x9b\xe5\x34\x1b\xa6\x23\x92\x50\x31\xcc\xf7\xfb\x23\xe0\xa9\x25\xed\xa7\xb0\x66\x8e\x21\x99\x55\xcb\xc3\x64\x44\x8b\x75\x4d\x3c\x98\x7a\xbf\x4c\x18\xa3\x31\x62\x85\x96\x14\xda\x5c\xce\x53\x11\xb5\x25\x00\x72\xff\x31\xa1\xf9\xb0\x37\x52\x96\x42\x10\xdd\xaa\x2f\x99\x7b\x30\x5a\xb2\x37\x95\x36\x40\x56\xa0\xa3\x94\x26\xa7\x42\x95\x51\xb2\x9e\x41\x36\x4c\x46\xa7\x82\xca\xff\x06\x92\xe6\x4a\xcc\xdd\xd1\xfe\xaf\x76\xdc\xe9\xac\xd4\x77\xf9\xdf\x20\x12\xce\x58\x6d\x1b\xa4\xa0\x69\x4c\x24\x95\x38\x59\x8d\x59\x5d\xde\x3a\xc5\xad\xac\x4d\x08\x28\x34\x45\x79\xba\x8d\x98\x23\xdd\x20\xf0\xae\x08\xc4\xd5\x97\x0c\xf8\x24\xf6\x69\xe7\x67\xeb\x11\xa2\xe2\x65\xfe\x3d\x72\x03\x4f\x68\xd6\x2f\xe0\x2f\x96\xa8\xe8\xb4\xb1\x4d\xcf\x67\xd1\xed\x37\x1b\xd1\x94\xc4\x35\x56\x29\x53\xe3\x4b\xb9\xa2\x79\x48\x21\x37\xc7\xd7\x0e\x2c\x32\x75\xd9\x1b\x08\xa4\x31\x99\x4a\xf2\x01\xee\x70\x0c\xc5\x11\x15\x64\x15\x93\x19\x4d\x74\xc7\xd1\xd4\x8d\xd4\x01\xa6\x61\x33\x8f\xb2\x5c\xd2\x99\x26\x3c\x17\x74\xa2\x89\x0c\x72\xe7\xd0\x31\xf7\xb4\x4c\xb1\x2d\xb4\x34\x77\xb7\x1f\x93\x5b\x7a\x57\xde\x97\xf7\x40\x78\x28\xa5\xac\x7a\x77\xa7\x88\x66\xfb\x22\x8e\xc9\x7d\x89\xf2\xba\xd5\xaf\x60\xe9\xee\x5c\xa1\xa5\x3e\xc4\x37\x5a\x38\x8c\xd2\xcb\xbb\x72\x18\x12\x2d\x2e\x1e\xbb\xe2\x62\x58\xbd\x4f\x74\x3c\xfc\x30\x22\xe7\x74\x3e\xfc\x24\xcf\xf9\x67\x35\x6c\x3c\xe7\x9f\xe2\xd6\xcd\xf0\x7c\x44\x3f\xaf\xd3\x69\x74\x1b\xeb\xfe\xae\x68\xef\xe4\xea\x99\x9e\xee\xc9\x95\x6e\xec\x2d\xbd\xda\xeb\x93\x33\x7a\x3b\x5c\x0c\xaf\x46\x3a\xf2\xc9\x2e\xa5\x67\x9d\x8e\x9a\x43\xf4\x96\x9c\xc5\x6b\xf5\xdb\x19\xe0\x8d\x76\xb7\xb1\xce\x37\x70\xc1\x2c\xf5\xf5\xfd\x97\x2d\xac\xb2\x1d\x03\x12\x1b\xcf\x7c\x3b\xab\x02\x37\xf7\x85\x0d\x33\xec\xe4\x73\x70\x8e\xef\xa3\xad\xdc\xaa\x3c\xd7\x27\x75\x79\xe8\x1c\x03\x90\x44\xc4\x8a\x5f\xf4\x89\xcd\xaa\xf1\xe3\x01\xcf\x6a\xa5\x2b\x71\x54\xe0\x7f\x89\x12\x3b\x4e\xd7\xf7\xa4\x81\x7a\xd3\x3e\x6c\xaf\xd3\xc2\x33\x3c\x7d\x74\x1c\xf0\x63\x83\x42\x4e\x99\x4d\x41\x64\x3c\x52\xd7\x89\x30\xae\xa5\x91\x36\xae\x7e\x86\xc1\xa0\xd5\xf4\x63\x3d\xaa\x0b\xc1\x16\x2a\x26\x32\x49\x51\x37\xe1\x38\xf3\xc0\x1e\xf8\x43\x48\xd8\x88\x64\xa6\xbe\xea\x64\xd7\x57\xe9\xcd\x3c\xcd\x6e\xa9\x90\x3c\x21\xc6\xc8\xfc\x03\xb4\xf0\xd7\x26\x0b\x26\x6c\x70\x99\x70\x96\xa9\x70\x9c\xd8\xa6\xce\xb2\x67\x4c\x6e\x28\x6f\x4c\xa9\x04\x0d\xa0\xb8\xa6\xce\xf0\xde\xf6\x02\x82\x51\x13\x01\xb4\xa6\x38\x14\x58\x63\xbe\xc4\xa6\x82\xf2\xbb\x1b\xfd\xcb\x0d\x0b\xfa\x57\x80\xc1\x7f\x6f\x8c\xb4\x52\x85\x80\x0a\x42\xf1\x7f\x7b\xd2\x19\x16\xdc\x34\xe7\xcc\xa6\x2c\x37\xf3\xf9\x47\x99\x33\x65\xfe\x10\xc1\x4b\x91\xd9\x31\xa0\x80\x43\x77\xa5\x84\x00\x3a\x10\x0c\x30\xa8\x76\x63\xa9\x9c\x53\x81\xdc\x1f\xae\x4b\x63\xd2\xca\x69\xb2\xb6\xb2\xce\x3f\xfb\xd9\x04\xaa\xc3\xe1\xa5\xe1\x64\xfe\x70\x52\xca\xf5\x70\x24\xeb\x5e\x1a\x8e\x4e\x01\x02\x4e\xe7\x90\x11\xc5\x8d\xeb\x9f\xb7\x52\x9a\x3b\x63\x61\x72\xb5\x41\x55\x90\x4e\xa3\x5d\x93\x46\x1d\x42\xdb\xec\x86\xce\xb9\xb6\x11\xc2\xd1\x5e\x5e\x45\x82\xb4\x8b\xbb\xdb\x76\xdc\x12\xfc\xfe\x8b\x06\xc6\xd9\xe4\xb7\x64\xcc\x32\x01\x01\x07\xda\x37\x00\x1a\xc8\x70\xd1\x7e\x36\x4e\xf9\x78\xce\x9e\x3f\xfb\x23\xfe\x68\xc7\xeb\x71\x22\xc6\x33\x89\x21\xd6\xd3\x34\x4b\xe6\xf3\x7b\xbd\xa8\x92\x4d\xe7\xca\x87\x53\x4e\x5e\x7b\x78\x3e\x3c\x70\x05\x20\x98\xa4\x95\x7e\xbf\x7f\x77\x21\x2b\xb0\xf5\x1a\xac\x1a\xec\x6c\x34\xe6\xf1\xc6\x1e\xb5\x27\xe9\x5d\x3b\x18\x84\xc2\xe1\x7a\x7e\x54\xd8\x0e\x7b\xe5\x28\x08\x49\xc8\x94\x23\x9b\x4a\x0e\x2b\x37\x71\x66\x24\xc1\x9a\x9f\xb2\x86\x9a\x6e\x9c\x44\xa8\x3a\x10\x65\x60\x64\x5f\xd9\x40\x8d\x0e\x09\x54\x28\xaf\xde\xbe\x3b\xbf\xf8\xf9\xf2\xed\x4f\x7f\x3e\x7f\x71\x0d\xda\x22\x79\xcd\x5e\x26\x0b\xd6\x15\xf9\xfb\xe5\x92\xf1\x17\x49\x21\xaf\x31\xdc\x9b\xed\x67\xc5\xdd\xed\xf3\x67\xb2\xa3\xf4\x36\x53\x74\xc9\xf3\xf6\x1e\xdf\x6b\x3f\xfb\xa3\xff\xf2\xd9\x1f\x65\xc9\x76\x4b\x28\x83\x4c\x39\x40\x9a\xc3\xbd\xe9\x2c\xb3\xfd\xb9\x36\xae\x25\x09\x76\x82\xad\x56\x5b\x49\x4a\xad\xac\x2b\xab\xed\x9b\x32\xd8\x92\x24\xa5\x20\x91\x56\xd9\xe8\xf3\x1a\x04\x20\xca\xa7\x1f\x24\x21\x39\x91\x47\xde\x09\xcb\xf2\x57\xc9\x62\xcb\xeb\x2c\x4a\x89\xdc\x9a\xeb\x48\x48\x5a\x9c\x70\xc5\x39\x72\x47\x15\x02\x01\x64\x1d\x7b\xdc\x4e\x27\x44\x63\x04\x77\x32\x1c\x7f\x3b\xf7\x36\x4c\xa6\x6d\x12\x22\xd5\x1f\x4a\x95\x89\xb5\x1d\x93\x03\x4a\xa9\xa8\x1e\xb8\x58\xab\x6e\xb4\x51\x68\x6f\x1d\xb1\xf8\xf4\x5b\xfc\xfd\x4c\x44\xcf\xb8\xbb\x2a\xd8\x9c\x15\x05\x3a\x73\x51\x13\xf3\x0a\x9d\xbb\xda\xed\xaf\x0c\x1b\xd9\x7c\xb0\x14\x8e\x83\x53\x95\xc5\x01\x4a\x70\xc3\xd9\xd0\x26\x50\x74\xb7\x4f\x72\xca\x4f\x39\x38\xf1\xa5\xf9\xaa\xc0\xad\x30\x10\x98\xef\x37\x9d\x4f\x5a\x79\xa7\x93\xef\xa4\x68\x47\x99\x4f\x77\xae\xd9\x67\xa5\x77\xdc\xed\x95\xf2\x53\x29\x1d\xa4\x0f\x0a\xc2\x63\xed\xe7\xfe\x75\x23\xd4\x81\xc4\x3a\x1d\xff\x1a\x08\xf4\x11\x93\x04\xb7\xde\x40\xd1\x30\x9c\xd1\xf6\x4c\x88\xe5\xe0\x8f\x7f\xfc\xf4\xe9\x53\xf7\xd3\x61\x37\xe7\xb7\x7f\x3c\xe8\xf5\x7a\xf2\x58\xb5\x5b\xe5\xe8\xde\x1c\x33\x61\x30\xfa\xc5\x3b\xcc\x83\x3e\x99\xb0\x62\x3c\xe8\x13\x91\x8a\x39\x1b\xf4\xd7\x24\x65\x25\xae\x04\x6c\xf6\x4e\x86\xed\x9b\x36\x69\xdf\xa4\xb7\xf2\xef\x3c\x1f\x7f\xfc\xd7\x2a\x17\x4c\x3e\xe4\x93\x7b\xf9\x1f\x6f\x93\xf6\x18\x68\x42\xf9\x23\x9f\xc8\x6f\x13\xb9\x5f\xe5\x76\x27\xed\xc9\x5c\xfe\x11\x90\xbb\x02\x13\x58\xc8\x8f\xb3\xbe\xfc\x73\x20\xff\x1c\xca\x3f\x47\xf2\xcf\xb1\xfc\xf3\x48\xfe\x61\x09\x14\x92\x4d\xa6\xf2\xdf\x42\x76\x3f\x4f\xe1\x0f\xa8\x4d\x8d\x5c\xb5\xbd\x60\x22\x69\x93\x76\x96\xc3\x48\x72\xd9\xdd\x52\xfe\xe3\x72\x20\x7c\x75\x23\x07\x59\xc8\x7f\x8b\x64\x2e\x3f\x16\xcb\x44\x56\x2b\x04\xcf\xa1\x99\x42\xf0\xf4\xa3\x2c\x5b\xac\x6e\xe0\xaf\xac\x0d\xb2\x6a\xf9\xbf\x1c\xf8\x4a\xfe\x93\x55\xef\x12\xde\x1e\x05\xf3\x13\xe8\x35\x85\xb0\xd9\x7d\x24\x80\x73\x46\xff\x38\xfc\xa7\xd8\xff\x27\xdf\xf9\xe7\xe7\xb3\xde\x3f\x57\xfd\x47\x4f\xe4\xdf\x27\xbd\xf3\x7f\xae\xe4\x9a\xed\xc3\x7f\x67\xf2\xef\xc1\x13\xf8\xfb\x14\xfe\xbe\x92\x7f\x8f\x5f\xfd\x73\x75\xd8\xeb\xf5\xfe\xb9\x7a\x75\xfe\xea\xd5\xe8\x8f\x24\x61\xb4\xbd\xca\x40\x31\xc3\x26\xd6\x86\x72\x92\x8f\xe1\x96\x53\x66\xd0\xfa\x49\x19\x5f\x31\x52\xb2\xc6\xae\x72\x62\xba\x82\xa6\x1d\xc1\x04\xe9\xbd\xda\x85\xd6\x09\xaf\xd9\xba\xa1\x5c\xa1\xe2\xbe\xbb\xf2\x3f\x7b\x1d\x07\xb1\xe4\x9a\x94\xde\x87\xe2\x9e\x93\x0c\x90\xe9\x29\xb8\xf7\xb9\x57\x2a\x95\xf4\xc5\xc3\x03\x90\x3c\xf2\x06\x84\x60\x8b\x43\xa1\x2f\xc2\x51\x3c\x88\x38\x75\xbf\xee\xf6\x63\xc2\x3b\x9d\x5d\x85\x7e\x60\x15\x6b\xd3\x78\xa8\x61\xed\x24\x3b\xed\x3d\xb6\xd7\x96\xf8\x23\x9d\xb0\x9d\x24\xdb\xb9\xfa\xf5\xe7\x1d\x94\x1b\xb6\xfd\x24\xa1\xe1\xa9\x5e\x5e\x45\x9c\x11\xe6\xab\xe7\x6b\xa0\xc2\xe2\xc6\x94\x79\xf2\x2a\x62\x25\x8c\x05\xd7\x96\x68\xc0\xb7\x58\x4f\xe3\x5b\x3f\x8a\x7a\x05\xcb\x5b\x93\x40\xaf\x9b\x0c\x32\x1d\xc1\xe5\xc9\x48\x26\x2f\x4d\x6d\x83\x0a\xf1\x0c\x4b\xd8\x97\x39\xd8\xd7\xc6\x15\x11\x31\xdb\x74\xf9\x71\x4b\xef\xab\xda\xda\x6b\x43\xb8\x08\x5c\x56\x43\x88\xc5\x4d\xf7\x29\x58\x4a\x61\xa3\x95\x41\xb6\x1c\xba\x25\xb0\x79\x5b\x25\x00\x24\x12\x00\xc9\x96\x9d\x25\xe5\xce\x08\xf3\xae\x80\x44\x81\xaf\xa0\xf9\xa9\x47\xc1\x0c\x5c\x9a\xa7\xe5\x91\x2c\x8c\x14\x98\xdc\x56\x2d\xd9\xf5\xa6\xbc\x81\xa5\x1d\x76\xed\x67\x10\xf4\xd6\x7d\xdb\x36\x8c\xa7\x37\x4a\x5e\x4e\x2a\xb9\x5b\xf8\x77\x06\xdc\xfb\x96\x00\x0d\xa5\xc3\x16\xce\xfb\xd1\x7c\x3e\x55\x06\x90\xac\xc9\x82\x4b\x9f\x9a\x4a\x0e\x86\xc3\x60\x0e\x86\x43\x37\x07\xc3\x21\x46\x3a\x96\xf4\xbf\xdb\xc5\xe5\x95\x3c\x57\x84\xc7\x03\xff\x3d\x1e\x6a\xbe\x8e\x94\x24\xa6\x92\xea\x83\x9b\xbc\x57\x19\x15\x2c\x4a\x24\x15\x2b\x39\x53\xf5\x93\x70\xf0\x7e\x0e\xe5\x08\xc9\xd6\x71\x54\xb0\x87\x87\xa8\x60\x36\x61\xe1\x9c\x7d\x53\xb0\x08\x87\x78\x34\x97\x8b\x20\x8e\xdd\x97\xf2\x12\xab\xcf\x5f\xdf\xb4\xa8\x8d\x2b\x11\x84\x56\x86\x27\x2c\x5c\x4d\xc5\x98\xf5\xbe\x47\x6a\xcd\xf1\x44\x07\x32\x53\x18\xcf\x39\x3f\xef\x27\xe1\xee\x91\x75\xd7\xc9\xcd\xbf\x32\x57\x14\xd9\x98\xc9\x5f\x63\x86\xcb\x34\xc6\x59\x4f\x19\x1d\x33\x5c\xaf\x31\x93\x0b\xd6\xf2\x12\xb4\x4c\x55\xed\x19\xa3\x45\x70\x21\x5b\xe1\xe5\x9d\xa9\x6a\x13\x46\x87\xed\xdf\x92\xbb\xa4\x18\xf3\x74\x29\x06\x92\xa4\xb9\xd1\xbf\x47\x64\x29\x3f\x9f\xb5\x49\xfb\xa7\xb7\x2f\xff\xde\x26\xed\xd7\x17\x97\x7f\x69\x93\xf6\xc5\x9b\x9f\xe5\xdf\x57\xef\xce\xde\x9c\xcb\x8f\x67\x57\xf2\xbf\x57\x6f\xdf\xbd\x69\x8f\xc8\x42\xd6\x39\x7f\xf3\xd3\xf9\xcb\xf6\x88\xdc\xc9\x87\x19\x67\x53\x49\x47\xf1\xb1\xa4\x0e\x93\xf1\xc7\x5b\x9e\xaf\x80\x81\x49\x60\x30\xed\x11\xb9\x97\xe5\x64\x81\x91\x95\x00\xdd\x32\xf7\x5c\x82\xee\x9f\x19\x45\x8f\x70\x58\xaf\x1b\xaf\xa0\xbe\x43\xd8\xc3\xc3\x2d\x8b\x96\xf2\x3e\x8d\x3b\x9d\x5b\x16\xdd\xc1\xd9\x35\xb5\x3e\x78\xb5\x76\x6c\x64\xd9\xe8\x96\x45\x0b\x59\x0d\x6a\xdd\xcb\x42\x4e\xb5\x4f\x7e\x35\xec\xfb\xe1\x01\x9b\x73\x62\xea\xb2\xb2\x41\xa7\x76\x34\x54\x03\x34\xdc\x0c\xd0\x2c\x9f\x23\x2b\xf8\xc8\x4c\x7c\xc8\x56\x0a\x97\x66\x90\x5d\x1f\x98\x34\xab\x39\xfd\x84\x86\x22\x37\x2c\x4a\x25\x17\xf2\xc5\xe3\x42\xc6\xf9\xfc\x55\xce\xdf\xbf\x7b\x8d\x4e\x39\xb7\x2c\x9a\x30\x92\xe8\xfe\xda\xab\xac\x48\xa6\x6c\xd0\xde\xd3\xda\x5a\x09\x1b\xd9\xce\xa9\xf3\x69\x90\x3b\x21\x7f\x99\x47\x73\x01\x4b\x9c\xb4\xf0\xee\xdd\x61\x71\x26\x4f\x37\x6d\x2f\x79\xbe\x6c\xbb\x41\x2b\x44\x57\xe4\xaf\xf3\x4f\x7a\x06\xad\x02\x8a\x4b\x6a\x4d\x95\x25\x19\x2d\x14\x25\x96\x08\xc1\xe5\xa3\xd0\xb4\x90\x2a\x80\xa9\x2e\xda\x85\xb8\x9f\x33\x60\x09\xfd\x16\x1f\x1e\xc0\xd5\x1e\xe1\x45\x72\x9a\x91\x28\xa1\x57\x6c\x98\xfa\xb0\x1b\xc5\x9d\x4e\x32\xcc\xfd\xca\x23\xb9\x4f\x4c\xe7\x31\xf9\x62\xf2\x4f\x4d\x06\x19\x91\x48\x67\xc0\xd7\x70\x1b\x5f\x31\xfa\xe5\xe2\xf2\x97\xf7\xd7\x03\xc9\x43\x2d\x06\xbb\x3d\x92\xac\x24\x9c\x39\x97\x9c\xd4\x6e\x8f\x48\x9e\x64\xb0\xdb\x5b\x93\xab\xf3\xd7\xe7\x2f\x6c\xb9\x35\x79\xfb\xcb\xf5\xc5\xdb\x4b\xe7\xc5\xf5\xf9\x7f\x5f\x9f\xbd\x3b\x3f\x73\x5e\xbd\x3e\xfb\xe9\xfc\xb5\xf3\xfc\xea\xe2\xfc\xf5\xcb\xab\x73\xb7\x99\xd7\xe7\x3f\x9f\x5f\xbe\x74\xdb\x05\xf1\x8e\xf3\xe2\xa7\xf7\xd7\xd7\x6e\x47\x6b\x7b\xb2\xde\xb2\xb2\xfc\x44\x43\x2c\xa5\x5f\x50\x1e\x3f\x60\x60\x77\xec\x99\x1f\xf3\xb5\xf2\xe9\xaa\x50\xd6\x26\xd5\x22\x90\x7f\x24\x45\x6e\x87\xe2\x46\x01\x03\x21\x30\x81\x2d\x68\x6e\xd3\x7a\x69\xba\x45\x01\x1c\xf4\xbc\xd0\x80\x24\x5f\x06\x01\xa2\x14\x8f\x5e\xec\x50\x3b\x2f\x14\x4e\x97\xc3\x0a\x5d\xe6\x51\x1b\x96\xa9\xad\xd0\x41\x5b\x83\x1a\x9e\xe3\x4e\xa7\x0d\x1a\x0c\xb0\x2e\x5e\x57\x9a\xfe\xa5\xb9\xe9\xb6\x5a\x48\xb4\xbe\x6e\x4b\x8a\x70\x2c\x80\x0b\x0b\x35\xf6\x1b\x36\xe6\xbc\x7a\x83\xd7\x11\x4e\xd8\x9e\xae\x33\x56\xf2\xed\xc6\x79\x83\x1b\xef\x3b\x26\x59\x7f\x70\xa2\x94\xbf\x60\x3b\x7e\x0c\x64\x95\xb6\x5e\xf4\x6c\xdd\x0a\x64\xd0\xfa\xa8\xf0\xff\x75\xed\x85\xfe\x6f\x24\xc3\xbc\x6c\xf4\xde\x46\x7c\x29\xaf\x5a\x8d\x22\x77\x25\x8e\x44\xd4\x59\x72\xc0\x07\x01\xba\xdc\xaf\x09\xfe\x80\xdd\xd8\x62\xdd\x0f\x1f\xbc\xfb\x3e\x27\x19\x49\xe2\x75\x30\xc6\xb4\x15\x8e\xbf\x84\xd4\xad\x59\xb9\x93\x94\x66\x5a\x39\x05\x96\x51\xb2\x9f\x96\x4e\xb8\x73\x9a\x56\x88\x84\x3c\x1e\xa4\xdd\x52\xf7\x48\x9c\x7d\x84\x5b\xbb\x26\x67\xd9\xb5\x5a\x8a\x37\xf5\xb4\x55\x73\x1c\x05\xc2\x9d\x58\xe3\xfa\x68\xc9\xd3\x4c\xc5\x37\x06\x32\x0b\x2d\x90\x5a\x11\xa1\x03\x6b\x2b\x05\xac\x20\x08\x72\x9d\xa1\x4f\x47\xdd\x76\x87\x01\xf7\x67\xf3\x0a\xf8\x90\xd7\x50\x6f\xd9\x9e\xf0\x66\xe6\xc3\x40\xfb\x23\xea\x8c\x88\x11\x8c\x5f\x8f\x1e\x11\xe5\x45\x8a\x9b\xe9\x3f\x2f\xca\x80\xdd\x0a\x4e\x1c\x1f\x50\xf3\xd8\x2d\xc7\x4f\x45\xb9\x35\xc9\xc5\x93\xc0\x38\xe3\x41\xa5\x68\x08\x5c\x66\xc7\x90\x17\xff\xcf\x0f\xa7\x47\xbe\x54\xce\xe0\xb9\x44\xd6\xa9\x01\x0c\x1e\x49\xb0\x4d\xb4\xd2\xcf\xc2\x4f\x28\x45\x72\xb0\x59\xab\xee\x86\x72\xd2\x36\xf7\x1c\x9e\xb3\x88\x13\x7b\x18\xd5\x51\x24\xc2\xef\x48\x35\xe8\xf4\x95\xea\xd3\xf7\x86\xc5\xe4\xdd\xff\x07\xcb\x1f\x02\xcb\x6b\x16\x93\x5f\xfe\x9f\xc3\x12\xd9\x34\x1f\xf5\xe0\x6d\x4e\x3e\x45\x75\x08\x27\x1c\xce\xc5\x39\xd9\x18\x75\x84\x64\xf4\x13\xc4\xc1\xd4\xd9\xdd\x11\xb9\x64\x76\x3f\xfd\xf6\xbf\x03\x06\x06\x2b\xef\xf6\x55\x4a\xf7\x0a\x50\x0c\x61\x02\x36\xe8\x5f\x0f\x95\x96\xe8\xea\x26\x28\x24\x26\x53\x00\xb0\xc4\x24\xdc\x9e\xae\x93\x10\x7b\x78\x30\x39\x44\x6c\x4e\x40\x9b\x46\x0b\xa4\xd2\x98\x14\xb0\xdd\x1e\x84\xd2\x82\xa8\x32\x36\x51\x89\x1c\xe0\x65\xad\xdc\xda\x8b\x5e\x53\xcc\x73\x51\x68\xd1\xf5\xd8\x1a\x66\x69\xf3\x0f\xa6\xcd\xb2\x74\x08\x96\xa5\x31\x62\xa2\xd9\x9a\x75\x79\x9e\xfb\x59\xf9\xac\x05\xc2\x37\xa6\xc3\xed\xf9\x99\x7d\xf6\xfa\x31\x51\x36\x9b\x94\x83\xb5\x66\x36\x4c\x47\x74\xea\x92\x86\x12\x17\x80\x44\xc4\xfc\x89\x21\xba\x64\xf4\xa5\x60\xf3\xe9\x40\xac\x55\x0e\x62\x79\x63\x84\x22\xab\x04\x12\xf7\xf6\x82\x23\xed\xb9\x23\xed\xc9\x91\x72\x67\xa4\x42\x8e\x34\xa3\xbd\x93\xec\x19\x15\x27\xd9\xde\x5e\xcc\x87\x59\x65\xa4\xbc\x3c\xd2\x75\xab\x41\x35\x20\x67\x11\xd8\x7a\x12\xb5\xcd\xa7\x9e\x84\x1c\xd6\x71\xd8\x1b\xe1\xba\x61\x58\x9c\x2b\x36\x9f\xd6\x59\x91\xdc\x32\x11\xf5\x62\x5d\x10\xcc\xdf\x6a\xc5\x95\xca\x40\x12\xcb\x82\x69\x7b\xdd\x81\x50\x25\xcd\xd0\x28\xa5\x53\xb5\x3b\x05\xd6\x36\x76\x7e\x75\xe3\x32\x3b\x0e\x2b\x58\xab\xb9\x06\x33\x1b\x2c\x21\xab\xdc\xa4\x59\x39\xc9\xab\xd6\xcb\xa0\x38\x52\x18\xeb\xc2\x2a\x23\x20\x4b\xf5\x08\xb3\xa5\xca\x80\xa9\x6d\xaf\x0c\x96\xda\x82\x01\x08\x30\x27\xcb\x2d\xa6\xf4\xd5\xa5\x43\xd3\x67\xd6\x70\x49\x7f\x33\xe5\x1d\xe3\xca\x6a\x05\xf7\x80\x6b\xf8\x06\x2b\xf8\x00\x76\xaa\x81\x88\x7b\x96\xce\x27\x81\xb2\x6a\x87\xdb\xed\xa8\x33\xf2\x56\x90\x4b\x09\xb5\x94\x11\x4b\x5c\x09\xea\xc4\x80\xa1\x65\xcf\xa9\xd3\x38\xea\xec\xad\x96\xe9\x5d\x92\xdd\x32\x54\x35\xfd\xf4\xfe\xe7\xc1\xce\x58\xe9\x9b\x6e\x99\xd8\xf9\x83\xd2\x35\x4d\x79\xbe\xd8\x01\x7b\xd6\x93\x1d\x55\x9f\x62\x20\x58\xaf\xcd\xc0\xc9\x62\x23\x39\xa8\xea\x8d\xf2\x7f\x75\x58\xde\x78\xa8\xb5\x7b\x53\x8b\x77\xa9\x18\xa3\x8b\x3a\xc4\x6f\x2c\xe5\x55\x74\xc1\x89\x0e\x8b\xa9\xdc\x04\xac\x57\x76\xa5\x80\xe3\xa5\x5d\x2a\xe1\x47\x28\xac\x6f\xc9\x2f\x67\x0b\x28\x75\x81\x4d\x28\x55\xf9\x52\x69\x52\x5d\xc7\xa1\x1a\xf8\xa5\x52\x63\x62\x62\x02\x6c\x72\x33\x37\xee\x38\xa1\x53\x5c\x19\x2a\xc6\x38\x89\x83\xe3\x35\xc9\xf5\x89\xe3\x5e\x11\x6a\xb6\x32\x1f\xbf\xd9\xd2\xa4\xdc\x66\x6b\xa2\x9b\x06\x31\x50\xdd\x8a\xfa\x9d\xd5\xed\x8c\x50\xaf\xfe\x8a\x36\x76\x5a\x5a\xfc\x9a\x3e\xc3\x5b\xa9\x04\x47\x8c\xe4\x50\x45\x6c\xce\x22\xeb\xf6\x01\x53\x81\x77\x54\x38\x9c\x5a\x78\x55\x75\x88\xb5\xd2\x7a\x62\xb4\x35\x16\x88\xb6\x06\x19\xb2\x21\xe0\x9a\x75\xe7\xca\xe2\xb5\xf5\x37\x09\xaf\x33\xc9\x69\x68\x85\x49\x42\x7b\x27\xc9\xb3\x54\x77\x94\xe8\x8e\x0a\x9a\x0e\x93\x51\x2b\x1f\x26\x23\xc7\x2b\xa7\xb0\x1d\xa1\x17\xbd\x03\x09\x82\x69\x20\x74\x5b\xf3\xbd\xbd\x78\x35\x9c\x8f\x54\x99\xfc\xde\xf1\x8a\x19\xd3\xc6\x1d\x40\xa6\x35\xdf\xf5\xa2\x92\x19\xed\x9d\xcc\xac\xb9\xfd\x4c\x0f\x7b\x42\xa7\xc3\xd9\xa8\x35\x1e\xce\x46\xdd\x54\x55\x8a\x26\x76\xd0\x4b\xba\xcd\x2e\x20\x8b\xc6\x62\x05\xb9\xa3\xbd\x93\xbb\x67\x3a\xb8\xcc\xc9\x9d\xee\xfd\x9e\x2e\x86\x77\xa3\xd6\x72\x78\x37\xd2\x4e\x60\xf7\xf1\x5a\x07\xf4\x6b\xb0\xec\xd0\x58\x42\x05\xe2\x76\xa2\xec\x72\xca\x2a\xa1\x77\x15\x5e\xfe\x20\x78\x92\x15\x09\xaa\x03\x4d\x18\xc7\x72\x0b\x9a\xb0\x2e\x37\x82\x36\xd6\x3c\x84\x9a\x78\x4d\xd6\x84\xba\xf4\x68\x0b\x4c\x8f\x76\xcb\xc4\x59\xb9\xfb\x9a\x2b\xbe\x3c\x4c\xac\xfe\xf2\xed\x9b\xba\x1a\xe5\x09\xc8\x1a\xa0\xaa\xaf\x18\xaf\xf8\x90\x61\x9f\x76\x2e\x24\x5f\xd4\x8c\x6e\x9d\x2a\xce\xb9\x52\x64\x14\x6f\x46\xa9\xa5\xaa\x78\x52\x74\xd5\xaf\x40\x9b\x6e\x43\x75\xb1\xa4\xcb\xcd\x6e\xc6\x8b\xa1\x56\x4b\x91\x7e\x9d\x69\xd6\x62\xbc\xd2\x2c\xb1\x1c\x2e\x7c\x15\xef\x39\x38\xcf\xa9\x59\xb7\x73\xb5\x5f\x29\x64\x09\xb0\x4c\xee\xab\xbc\xaa\xc9\xc5\x2d\x81\x3a\x92\xef\x50\xe2\xc7\x8d\x29\x41\x9d\x21\x56\xf2\x82\xba\xbb\xd2\x9d\x8b\x4d\xf0\xc9\xba\xe7\xd9\x5d\xca\xf3\x0c\x74\xe9\xaf\x15\xa1\xf4\xaa\x49\x3b\x9f\x4e\xa3\x5d\x23\x6f\xfd\x94\x66\x93\xfc\x93\x51\xc6\xb7\x04\xfd\x52\x3e\x2f\xa0\x63\x98\xa9\x20\x8a\xa5\x83\xa1\x72\xf4\x83\xfa\xc1\xfa\xe6\x7c\x53\xee\xf7\xd7\x4a\x9b\xad\x1c\xa3\xdd\x19\xbd\x52\x33\xfa\x7d\x23\xcf\xaf\x6e\xa4\xca\x2a\x1d\x05\x57\xe9\xc8\x5d\xa5\xa3\xd1\x60\xbf\x4f\xf2\x6a\xdd\xe3\x60\xdd\x63\xb7\xee\xb1\xac\x8b\xd4\xab\x48\xc6\x1f\xb5\xbc\x61\xc6\x92\xa5\xc6\x87\x4b\x9e\xdf\xf2\x64\xa1\xc5\x0c\xec\xb3\x60\x3c\x33\xf1\x72\x97\x63\x9a\x62\x84\xdd\x84\xe6\x48\x72\xad\x38\x87\x00\x21\x57\xe9\xef\x8c\xf6\x1a\xbd\x35\xb4\xa7\x55\x05\x37\x39\x41\x37\xb0\x79\x4d\x98\x94\x3e\xa8\xe7\xe9\xd2\xfb\x3c\xd5\xf7\x17\x3c\x15\xcb\xfd\xbe\xa4\x3a\x96\xf9\xb2\xa9\xb3\xc2\xab\x34\x5d\xee\xf7\xcd\xcc\x9c\xf7\x8a\x3d\xaf\xef\x4c\x7e\xef\x03\x91\x03\x71\xa9\x16\xc9\x7c\xbe\xf5\x0c\x71\x90\x0d\x95\xfc\xb1\x40\xd9\x34\x52\x7c\x59\x2e\xf2\x3a\xe6\x7f\x39\xde\x63\xfb\xd5\xb5\x69\xe9\x25\x04\x19\x80\xdc\xf9\x55\x74\xa6\x3b\x5c\x8e\xcd\x82\x9b\x2d\x22\xe7\x9a\x4c\x26\x1c\x89\x3a\xb5\xaa\xd7\xdf\x36\x0a\xd9\x8f\x6d\xa4\x32\x6f\xdd\x2d\x4f\x64\x21\xb0\x46\x11\x89\xa8\xd8\x64\x3a\xd8\x54\x0e\x98\xba\x3b\xb8\x95\x4e\xa3\x7d\x10\xec\xc5\x8e\xad\x44\xcb\xd1\xdc\x60\xc1\x6e\x0e\xa1\x6d\x22\x16\x83\x6c\x8a\x38\x21\x90\xed\xb6\xe6\x1e\x2f\xba\x1c\xef\xc9\x13\x61\x6b\xca\x51\x6a\x3f\xf0\xb7\xab\xb2\xa5\x8d\x23\x55\x58\x41\xc4\xdb\xcc\x5c\x2e\xc2\x7f\x5b\x91\x15\xa7\xc5\x9b\x64\x3c\x4b\x33\x76\xea\x35\x81\x2f\x23\x16\x0f\xbc\xf7\x57\xf7\x05\x60\xb4\x72\xe3\x58\xde\x5b\x2a\x4c\x85\xc8\x40\xc5\x8d\xd9\x10\x8f\x1f\x0f\xbc\x79\x5a\xcf\x48\x95\x93\xf0\xf8\x89\xff\x1d\x4f\x98\xf9\xfc\xb4\x52\xdd\x6e\x6e\x5d\xe8\x51\xaf\xdc\x46\xb5\xcc\xb1\x5f\x46\xcd\xa9\x9b\x2f\xfb\xf8\xfd\xe8\x69\xf5\x7b\xe0\xa0\xe8\xd6\x0e\xbc\xd2\xe0\xdd\xe7\xb6\x76\x70\xe4\x7d\xc7\x0b\x40\x7f\x3c\x0e\x7c\xbc\xd6\x0d\xac\x5d\x28\x23\xf4\x4b\x8b\x98\x98\xef\x91\x20\x8c\x20\xbc\x91\xf8\xfd\xd3\x26\xb3\x66\x70\x81\x0b\x3a\x93\x6e\xe9\xc7\x06\xdd\xfc\xf4\xed\xdd\x6c\xef\x05\x47\xde\x37\xdd\x7b\x5a\xd2\xed\x66\xd0\x70\xe8\xf3\xdc\x92\xc6\xf6\xe5\x18\x9c\x28\xaf\xe0\xae\x82\x34\x5f\x5d\xf8\xed\x47\xad\xab\xf9\x0c\x36\xfe\x35\xdf\x96\x4e\x2a\x14\x39\x32\xbc\xeb\xb2\x3b\x7d\x23\x4e\xf2\x85\x8a\x3b\x50\xa6\xdb\xfd\x8c\xd0\x0e\x3d\xcf\x90\x4c\x87\x04\xf7\xd3\x9c\x5f\xa8\xb4\x4a\x2a\xe4\x48\x50\x7b\x2c\x47\x25\xdb\x92\xef\x8c\x32\x47\x78\xa6\x77\x96\xf1\xa8\x04\x3d\x24\x7c\x0d\x36\xb7\xc5\x6a\x51\x67\xc9\xe9\x75\x50\x71\xfb\xb3\x56\x1d\x81\xc6\xd5\x3b\x78\xba\xe6\xc9\xf8\x23\x93\xc4\x18\xc9\xd6\x2d\x6d\x79\x13\xca\x23\x56\x89\x22\x56\x2b\xc7\x76\xf7\xc0\x9a\x64\x6a\xad\xea\x36\x98\x5d\x48\x8d\x93\x65\x95\x65\xbe\xac\x33\xd2\x77\x76\x0d\x7a\x42\x57\x5e\xbb\x0d\xf9\x93\xaf\x15\x6e\x97\xe1\x01\x71\x34\x51\xcc\x8a\xab\xa7\xf4\x77\xb2\x24\x30\x12\xc9\xcd\xb7\xb4\xf9\x6b\x5d\x9b\x50\xf2\x75\x5a\xd4\x5b\x33\x07\xdb\xfb\xbb\xdf\x1e\x61\xa5\x16\xb1\x6c\xe0\x16\xdf\x5a\x71\xd4\xe9\xb8\x4f\x3a\xcc\x46\x75\xdd\x5a\xbe\xd1\x22\x87\x18\x79\xa5\xc0\xa0\x2c\x26\xe2\xe1\x01\x78\x2e\x75\xf6\x94\x13\x71\xc4\x62\x5c\xc6\x0f\x1f\xf2\x25\xcb\xf4\x46\x2d\xf7\xa4\x85\x5a\x0c\xf7\x48\x23\xfc\x6f\x54\x23\x5d\xf0\x03\x4d\x7f\x67\x6e\xee\xb3\x0f\x1f\x20\xed\x51\x6d\x3f\x72\x5f\xc9\x3e\x9c\xe1\xb8\xdd\xa8\x4f\xb6\x89\xf2\x37\x27\x33\x57\x1d\xfd\xa4\x5a\xb6\x8e\x13\xad\xba\x13\x24\x49\x77\x3b\x94\x50\xab\xbe\x8d\xf8\xa2\xec\x93\x41\xbc\x0d\x27\x9b\x72\x93\x45\xd5\x8d\xcf\xd1\x3f\x97\x47\x84\xfc\xec\x07\x2f\xe7\x94\xc4\x4c\xe4\xab\xaf\x00\xb9\xa0\x46\xc0\x64\xc4\x95\x2e\x02\xe7\x18\x94\x5d\xcd\x2e\x95\xc8\x3a\x73\xf2\x5c\x01\x60\x6a\xe6\x63\x48\x33\x09\x94\x8a\x19\xb4\xba\xde\x3c\x4b\xe8\xcc\x4b\x86\x55\xb7\xaf\x3e\xa5\xf3\xf9\x0b\x2f\x69\x16\xd1\xa4\x4e\xf5\x8d\x9d\x9c\x39\x97\x5e\xe6\xb0\xe0\xdd\x51\x39\x9a\x07\xc1\xa3\x79\xe0\x72\x7f\x07\x68\xa4\x8f\x6b\x53\x4d\x6f\xa6\x2e\x0f\x05\xb0\xe6\x61\xd8\xa0\x05\xce\x3a\x30\x9d\xce\x4b\xdd\x3c\xff\x92\x67\xb9\x55\x83\x97\xb4\x56\xbf\x9c\x26\xad\xca\x08\x98\x10\x5e\x55\x10\x6a\x70\x35\xac\xab\x77\x15\xe8\x20\x16\x7f\x88\x8c\x71\x97\xb7\xbb\xaa\xdc\x90\x47\x62\x58\x81\x76\xe6\xad\x5b\xdd\x2e\x28\x55\xd6\x08\x43\x22\xb6\xc9\xc4\x41\x79\xd5\x6e\x35\x5e\xaa\xa0\x46\x5d\xdf\x41\x8c\xb5\xe7\x5c\x37\x52\x45\xa4\x0a\x39\x9a\xf7\x8d\x4e\x36\x95\x56\xd0\xc5\xc6\xb4\xf1\x76\x0b\x94\xa3\x1b\xf1\xf1\x99\x6a\xa2\x7c\x56\x2a\x3b\x40\x57\xf6\xb3\xd0\xc9\xaa\x36\xe9\x63\x3d\xb2\xf3\x86\x8d\x3b\xdf\x4d\x16\x19\xe3\x7e\xaf\x69\xcb\x41\x77\x93\x7c\xa1\x51\x9d\xb1\x42\xa2\x65\x14\x01\x7e\x58\x15\x7f\x24\xd7\x90\xc0\xc1\x31\x9c\xa4\x92\xf6\x4c\xdd\x11\x6c\xf0\x78\x5a\x04\xbc\x79\xcd\xc5\x5e\x45\x58\x0a\xc4\xba\xed\x57\x3c\xb9\xad\x41\xe8\x9e\x5b\x56\x3a\x8d\x3c\x22\xf5\xaf\x7e\x3f\x82\x38\xfe\x6b\x65\xff\xc0\xaf\x1d\x20\x77\xfd\xd6\xff\xbb\xd4\x91\xbb\x5c\x8e\x07\x9f\xb7\x64\xe0\x7b\xbe\x19\x60\xd6\x6f\x30\xd0\x87\xbb\x80\xcc\xd9\x5a\x68\xf3\x5a\xe9\xc2\xd9\x15\x10\xfd\x98\x4d\x5e\xe4\x99\xc0\x5b\xda\xdf\x77\x78\xe8\x44\xb5\xd5\xa6\xbd\xb6\xca\xaa\xed\x36\x6c\xeb\x58\xdd\xff\x5e\xf3\x0d\x8b\xed\xc1\x55\x97\xfb\x9a\xa1\x57\x36\x69\xa0\x5d\x8d\x27\xd4\x16\x2a\xaf\x6c\x4d\x5f\xea\xf6\xf1\xe7\x5e\xbb\xb8\xee\x0e\x40\xdc\x58\x86\xdb\xc6\xba\x88\x04\xec\x0c\x37\x3a\x0c\xd6\x23\x14\xeb\x3c\xe8\x6d\xd0\x50\x8b\xdf\x81\x56\x6c\x2f\x5b\x61\x95\x46\x37\x33\x73\x46\x7c\x6f\xb3\x32\x89\x46\x5c\xc2\xc0\xb1\xd2\x0b\x5e\xb8\x4e\x3d\x34\x8e\xc8\x02\x19\x07\xc3\x43\x29\x99\xc1\xdb\x6e\x03\xd1\xc4\x4b\x2d\x94\x6c\x54\xbd\xe1\xa3\x86\x97\x65\x77\x9e\x0a\x05\x82\x63\xb8\x81\x0c\x20\x6d\x85\x36\x52\xd5\x55\x62\x92\x37\x2a\x44\x4c\x76\xbf\x06\x65\x48\x80\xf3\xd4\x8b\xbd\x5e\x13\xd5\x8e\xb3\xda\x5f\xdd\x96\x53\xd7\xd5\xb5\x5c\xb2\x4f\x78\x5f\xfe\xb4\x4a\xe7\x13\xc6\xe9\x7b\xa5\x9f\xf8\xdb\x26\x69\x90\x12\x16\xf8\x71\xa8\xfc\x8c\x78\xce\xe3\xc4\x92\x28\x85\x97\x66\x1a\xe2\x1b\x34\x2b\x04\x26\x65\xb5\x9a\x27\xd3\x75\x5b\x06\x17\x9e\x4e\x47\x6b\xfe\x63\x6b\x35\xd8\x3b\x11\xd6\x20\x40\xec\xed\xc5\x6c\x28\x1c\xdd\xfa\xba\x2c\xfc\x68\x30\x5f\x03\x91\xc0\xb6\x61\xb1\xdc\xa8\x49\xdb\x86\xc8\x72\x22\x2b\xad\x41\x7e\x1c\x26\x9e\x02\xa8\x46\x73\x3e\x08\xd6\xbd\x3d\x90\xe1\x37\x11\x4e\x58\x72\x7f\x1f\x8d\x36\x6a\xa8\xbd\x1e\xa5\xd4\x2d\xaf\x5d\x25\x60\x76\x3a\xf3\x23\x6e\x01\xf6\x69\xe7\x4f\xcc\xb2\xe2\x6a\x23\xb0\x4f\x3b\x3f\x31\x85\xf5\x44\x23\x75\xfa\x15\x3d\x31\xb7\x07\x25\x5e\xf7\x89\xe1\x1a\xd3\x13\xbd\x0d\x2b\x6f\x1e\x1e\x3c\x3b\x24\x7c\xeb\xda\xa8\x68\x21\x80\xd7\xb2\x76\xec\x37\x23\x93\x3b\xb0\x42\x90\xa0\xf8\xf3\x5f\xdf\x6b\x5c\xfd\x15\xd1\x67\x02\x07\x87\x55\x3f\x3b\xd1\x72\xc9\x9f\xd5\xff\x60\x09\xfd\x37\x16\x93\x5f\xff\x2f\x8e\x96\xb3\x22\x14\x90\x35\x7c\xca\x21\xbf\x74\xe9\x94\x07\x92\x2c\x32\x57\xdd\x2e\x86\x7c\xa4\x99\x4f\x9c\x68\xab\x72\x60\xbf\x1d\x85\x91\xcc\x80\xed\xef\x0d\x32\xee\x20\xf6\x84\xf0\xbe\x20\xb6\x13\xa4\xf9\xf3\x57\x22\x4a\xbf\xba\x8e\xe6\x02\xc8\x22\x40\xbd\x30\x07\x23\xfe\x5b\x70\xa2\x1d\xc9\x8c\x25\x13\x90\xaa\x7d\x15\x7a\xb4\xf5\x45\x92\xce\xa3\x78\x4b\x54\xd9\x84\x06\x9b\x11\xdf\x26\x74\xb5\x01\xe9\xd4\xe2\x0c\x34\x07\x95\x8b\xf9\x33\xa3\x07\x8f\x9e\x1c\x1d\x1e\x1f\x1d\x1f\x93\xbf\xd4\x1b\x84\xaa\x3b\xef\x1b\xcd\xdf\x25\x02\xce\xb5\x76\xe3\x5b\xad\xfd\x87\x23\x45\x91\x7b\x59\x74\x7f\x2b\x70\x53\xd6\x48\xfc\xc1\xae\xd8\x4e\xca\xb5\x43\x51\x36\xc8\xed\x6c\xb5\xb8\x61\xdc\xba\x48\x88\x4e\xa7\xf2\x8e\x9f\xda\x9e\xd1\x54\x19\x42\x46\x84\x2a\x1b\xc7\x8c\x6a\xa5\x57\x3c\x5f\x44\x02\xf5\xa1\xea\xfd\x78\x9e\x67\xc6\xee\xf9\xb7\xc2\x69\x5c\x51\x95\xf2\x31\xa4\x76\xb5\x58\x67\x38\x22\x19\x65\x27\xd9\x33\xf4\x24\x70\xf4\xf7\xb7\x4c\x44\x59\x6c\x55\x34\x20\x1c\xcc\x97\x41\xaa\x18\x87\x93\x2f\xef\x4d\x24\x8e\x4f\x3c\xad\x98\x4d\x79\x3e\xbb\x06\x47\xa2\x73\x89\x75\xc1\xd7\x0a\xed\xdd\x5e\x0b\x75\xb8\x42\xa9\x6f\xdb\x37\x79\x3e\x67\x49\xd6\x1e\xc0\x93\x8d\xb1\x34\x30\x15\xe0\x03\x02\x76\x20\x49\xaa\xff\xe8\xef\xd2\x9e\x8d\xb8\xa6\xa6\xfd\x26\x11\xb3\x6e\x72\x53\x58\x2e\x63\x37\xe2\xcf\x7f\x66\x71\x0b\xb3\x01\xe8\x06\xfb\xeb\x75\x24\xe2\xd8\x99\x24\xcc\xeb\x5d\xf2\x29\x62\x24\xa0\x6c\xd6\x93\xc1\xf1\xea\x81\x20\x0c\xdd\x0a\x72\x6c\xcf\x7a\x1a\x08\xee\x80\xe4\x15\x21\xc7\x52\x89\x6b\x94\xe5\x62\xa7\x58\xa4\x36\xc4\x8f\x53\xeb\xd9\xb3\xc3\x87\xa3\x35\x58\x89\x6f\x55\x95\xc9\x0a\x10\x77\xae\xe5\x43\x56\x7f\x3f\xed\xf7\x07\x87\xea\x9b\xca\x64\x69\x3e\xf5\x9f\xb6\xc2\xe0\xdf\x39\x78\x6c\xe0\x57\x97\x64\x45\xc1\xd3\x46\x1f\x40\x5e\xf0\x37\x7d\x9c\x5b\xfa\xd1\xcb\x95\x55\x01\xfd\xff\xc9\x94\xfb\xb0\x7e\x55\xbf\x29\x9d\x4a\x6a\x63\x06\x43\xa7\x3b\xf9\xab\x65\x01\x28\x6f\x6f\xd8\x67\xbd\x53\x1c\xd6\xf0\xff\x88\xd1\x20\x64\x64\x80\xf6\x05\x87\x66\xe3\x28\xe5\x7a\xbf\xef\x6f\xcd\x9d\xbe\x51\xec\x83\xac\x5a\x69\xe0\xb5\x51\x42\x69\xf7\xed\x04\x3a\x7a\xdc\xd1\x5d\x19\x0b\x02\xf6\xfc\xf9\x21\x5a\x0d\xe0\xab\xfd\x48\xbe\x8b\xb7\x59\x0c\xa6\x56\x44\x79\xdf\x16\xac\x4a\x65\x2b\x98\xc0\x37\x07\xd3\xa0\xf7\x40\xaf\x91\x75\x54\x85\x1a\xb9\x3d\xd5\xfa\x9c\x65\x72\x30\xc8\xd9\x91\x3f\x34\x9a\x97\xb9\xe6\x46\x86\x83\x33\xe6\x5d\xc5\x92\xf2\x35\x53\xb9\x40\x6b\x5c\x47\x64\x39\x15\xec\x99\x91\x1e\xd9\xef\xc7\xa8\x68\x16\x7e\xd0\x2d\xd7\x71\x0b\x4b\x07\x8c\xb3\x85\xda\x60\x92\x24\x04\x12\xad\xdc\x8f\x20\x3d\xc2\x4c\xce\x95\x66\x2f\xac\x65\x39\x8b\x9b\x9d\x28\xf6\xb2\x87\xde\x1a\x4b\xf4\x1c\x02\xed\x40\x36\xce\x27\x6c\x72\xb1\x58\xb0\x49\x5a\x76\x21\x2c\xb7\x20\x37\x76\xa8\x91\xcb\x95\x6b\xd6\xd1\xd8\x33\xda\x50\x8a\xee\x64\xb5\xac\xf2\xb5\xdf\x78\xc7\x63\xe3\x8e\xed\x9e\xbe\x4d\x4c\xc7\x68\x68\x1f\xbe\x80\xbc\x2a\x42\x1b\x9e\xfd\xb0\xe1\xf5\xb5\xed\x95\xb5\x89\xd3\xa3\xf2\x7d\x78\x96\xfb\x72\x4b\x1a\xbb\xb7\xb4\x8e\x18\xac\xb4\xb3\xbf\xaf\x06\xcd\xd8\xc7\x1f\x36\xea\x5e\xab\xb9\x4b\x16\x74\x80\xfa\x4a\xdd\xb8\x4f\x66\xe1\x69\xac\xeb\x78\x4f\x75\x59\x75\x6f\xfa\x2e\xad\x9f\xee\xb4\xb2\x69\xf9\x9e\xc0\x3d\x5e\xa2\xe4\x2a\x81\xc5\xd0\x62\x12\xe8\x27\xbd\x81\xe0\x09\x7c\x2e\xb7\xab\xe8\x9b\xbd\x61\x52\xe1\xba\xab\xa6\x58\xee\xf5\x09\xa7\x62\x9f\x05\x60\xe5\x34\xc7\xb1\xb9\x30\x72\x56\xc5\x11\x39\xcb\x62\x22\x2f\x0d\x78\xc3\x68\x11\x74\xc4\x8c\x29\x76\xa8\xfb\xbf\x6e\x30\x77\xc2\xf0\x49\xdd\x64\xfe\x29\xb9\x2f\xde\xb1\xbb\x64\x9e\x4e\x12\xf0\x9b\x37\xab\x96\x76\x3a\xa9\x5a\x98\x29\x4f\x16\xac\xc6\x5e\xc9\xb1\x4c\x32\xb9\x2c\xa8\x70\xb2\x5c\x68\x49\xae\x63\x86\x84\x6e\x0f\xa5\xbe\x69\xde\x44\xd0\xb3\xcf\x6c\x5c\x0d\x2c\xe6\x98\x4c\xda\x41\x82\xcb\x0a\xaa\x40\x14\x52\x39\xd9\xe5\x36\x73\xc1\x89\xe7\xc9\x0f\xd5\x7c\x33\xce\x28\x6e\xe9\x68\x29\xa7\x99\x63\x21\x27\x59\xf7\x41\xa9\x2f\x54\x9e\x02\x75\x52\x36\x7b\x75\xda\x57\x76\x7d\xa8\x42\x08\xa2\x41\xb7\x49\xad\x0d\x16\xc2\xaa\x83\x81\x10\xa8\xec\x22\xd5\xba\xca\xca\x71\xfe\x79\xcc\x96\xea\x23\x09\x8f\xb2\xe9\xc6\x87\xc2\x8d\x17\xbe\xd3\x9c\xb6\x51\x72\x24\xba\x60\x56\x94\x66\xb7\xbf\xbe\xa1\x7f\x55\xa2\xdc\xff\x6e\x0a\xbf\xa2\x62\x5c\x61\x58\x2d\x1d\x84\x25\x09\x26\x51\x2a\x44\xc2\x05\x15\x3a\xf3\x30\xe5\x24\xe9\xf2\x55\x26\xd2\x05\xa3\x19\x49\x30\x7f\x12\xe8\x62\xdb\x24\x81\xa5\x54\x82\x12\x15\x09\x52\xff\x06\x97\x54\xce\x32\x9a\x93\xc4\xa6\x5f\x4a\xbe\x29\x6c\xc0\x56\x02\x0a\xd5\x47\xd9\xba\x0d\x4c\x58\xb6\x12\x58\x14\xbe\x98\x22\xdb\x4e\x4c\x51\x78\xc2\x89\x2c\x9c\x02\x8a\xc1\xc9\x50\x87\x16\xc1\xa2\x89\x83\xac\x59\x9e\x53\xb8\xd2\xeb\x2c\xe8\x7e\xa2\xcd\xb5\xd5\x12\xe9\x1c\x51\x46\x1c\x66\x9b\x32\x99\xb6\xfe\x51\xb3\x53\x52\x95\x6a\x0b\x12\x9c\x29\x0f\x37\xbd\x53\x0a\x5a\x0e\xfa\xac\x4a\x99\xac\x64\xb0\x27\x04\xbf\x6f\x13\x95\x08\xa5\xe8\x7e\x50\xc9\xb4\x8c\xf9\xdb\x75\x72\x6b\xa2\x30\x7b\x29\xb6\x62\x12\x8e\x25\x91\xea\x4d\x91\xd3\xb4\xba\x29\x72\x39\x49\xb4\xac\x4c\x7f\x57\xb1\x46\xe5\x6e\x2b\x83\x45\x0e\x03\x69\x67\x74\x37\x83\x24\xb3\xe3\x7c\x71\x93\x66\xec\x4a\xe2\xf7\xd8\x5f\x19\x79\xfe\xf3\xed\xd7\x11\x45\xa9\x79\x19\x2b\x84\x15\x19\x0e\x75\x24\x98\x9f\xf6\x8b\x68\x85\x95\x6e\x39\x37\x45\xb9\x20\xda\x18\x9f\xb3\x3b\x52\x58\xad\x20\x41\x1f\x43\x5c\xfd\x56\x6a\x52\xc4\x43\xb4\x4b\xfa\x5e\x1b\x86\x46\x2b\x48\x27\x9e\x69\xee\x45\x3d\xc7\x31\x19\xd3\xa5\xd0\x65\x04\x59\x91\x79\x4c\xa6\x78\xed\xbc\x4e\xb3\x8f\x0c\x04\x71\xad\xb1\xbe\x10\xa2\xdc\x32\xf3\x3c\xfe\xc2\x91\xbb\xf8\x83\xe1\x0b\x22\xa1\x5e\xc5\x04\x21\x9e\x66\xb7\x2a\x63\xac\x83\x6d\xa7\xe6\xab\x4a\xad\xc7\x1a\x4b\xa7\xf1\x5a\xdb\xfc\x48\x04\x93\x58\x55\x3d\x2d\xd6\x24\x5d\x47\xff\xcd\x62\xf2\xe7\xcd\xd2\x58\x65\xa3\xaf\xaf\xcf\x45\xc2\x3f\x42\xae\x38\x81\x2a\x96\x0b\xd0\x9d\xd2\xdd\xbe\x79\xf3\x92\xcd\x99\x60\xe6\xcd\x22\x59\x52\x26\xff\x3a\x86\xbf\x69\x76\x2b\xcf\x06\xae\x59\x93\xdc\x56\xa9\x66\x7d\x65\xa5\x93\x76\x58\xf7\xa0\x57\x5a\x0d\x56\xaf\xb5\xee\x8b\xac\x14\x7e\xc5\x0c\xf5\x2b\x0a\xb1\xbe\xb3\x5b\x2b\x1a\x4b\x4f\xa3\x39\xcd\x87\xe9\x28\x0e\xa0\xb5\x81\x33\x73\x4c\x60\x9f\x74\xef\x16\xaf\x72\xae\x26\x2f\xc7\xb5\x8a\x31\xa1\x3d\x64\xab\x82\xdd\xe7\x2c\xff\xcc\x2e\x7f\x1a\x7f\xc9\x87\x6c\x44\xa7\x34\xb5\xa9\x75\x88\x88\x49\x5a\xbf\x94\xe5\x8d\x65\x0a\xab\x7d\x30\x6d\xac\x3c\xb5\x67\x74\x1d\x93\x52\xb4\xd2\x29\x71\x0c\xff\xf4\x52\xf6\xd0\xb1\x24\x71\x7d\x20\x91\x37\x96\x9f\x16\xf9\xdd\x06\xf5\xb1\x5c\x91\xbc\xb4\x06\x09\x4d\x87\x6c\x44\x0a\x9a\x0e\xb3\x91\x8a\x15\xd3\xfa\x47\x94\x90\xca\x5a\x64\xa7\xb5\xd0\x8f\x49\x8e\xb1\xb4\xa2\x44\xfe\x2e\x05\x60\x2e\x14\xdf\xa8\xf6\x5f\x0d\x61\x2c\x87\xc6\xa9\x18\xb2\x51\xcb\x75\x4c\x8c\x62\xf2\xe7\x88\xc7\xfe\x1e\xd5\x7d\xf1\x98\xa8\x46\x77\x64\xbd\xca\x46\x07\x78\x4d\xf2\xac\xea\x7e\xa4\xb6\x63\x18\xe9\x46\x3e\xd8\xd5\xa5\x60\x9b\xd5\x4a\xb1\x12\xf7\xe4\x5d\x3b\x70\x9d\x90\x82\xac\xd4\x0c\xe7\x27\xd1\xbc\x74\xe5\x60\x89\xd2\x95\x33\x4f\x0b\xb1\x8f\xb4\xc8\x1c\x0e\xa8\x97\xe3\x7e\x0e\xb7\xb3\xca\x65\xc5\x26\x34\xeb\x5e\x5c\x5e\x5c\x5f\x9c\xbd\x26\x73\x27\x3f\xd7\x0a\x4f\xc2\xfc\x2b\xee\x2c\x7d\xac\xe7\x70\xdb\xb9\x57\x4a\x1c\x0d\x57\x90\x05\x6c\x3c\x8a\xc9\xfc\xdf\x73\xb3\xa9\xfb\x64\x37\xda\x9a\xdb\x8d\x1f\x1e\xdc\xc7\x96\xd1\x7c\x19\xd0\x28\x16\xc1\xe4\x1d\x93\xb7\xa6\x4e\x84\xa7\x23\xd1\xfd\xb8\xab\xb4\x14\x36\x4f\xf7\xaa\x6f\x40\x77\x60\x90\x10\x88\xeb\xf1\x00\xe3\x12\xa5\xb1\x87\x34\xf1\xfa\x4c\xa8\x00\x13\x9a\x82\x26\x81\x50\xef\x89\x1b\xfc\x38\xca\x2b\x4e\x10\x05\xc9\x1d\x4a\x4e\x2d\xcf\x0a\xee\xc1\x3f\x2b\x56\x84\x14\x71\x4b\xe5\x48\xd3\xa9\xd1\xae\xee\xb3\xf1\x8c\xe7\x59\xfa\x3b\xe3\xd1\x17\x91\x70\x49\xcc\xaf\x88\x99\xce\x80\xaf\xe3\x6e\x71\x9f\x8d\x8d\xc5\xaa\xdf\xa7\x17\x26\xbd\x88\xd7\x2c\x90\x49\xd4\xf3\x4a\x95\xc0\xf4\x91\x75\x1d\x6a\x40\x90\xf0\x00\xb1\x81\x94\x02\x49\x25\x6d\x50\xf6\x4e\x89\x32\xa0\x12\x4c\x08\xd5\xaa\xb3\x88\x17\xc1\x7d\x6d\xce\x81\xa5\x21\x54\x2a\x5b\x73\x2d\x0b\xb1\xc5\xb5\x6c\xc2\x5d\x31\x4d\x3d\xfd\x09\x88\x29\x73\x3b\x23\x03\x44\x19\x6a\x14\x9b\xee\xd9\x30\x5f\x68\x5a\xd8\xd6\x8b\x10\x2b\x68\x82\x2d\x5f\x16\x46\x21\xa0\xad\x15\x74\x9b\xaa\x41\xb4\xcd\x00\x4b\x4b\xd1\x44\x0d\x06\x67\x8a\x67\xac\xfc\xba\xca\x6b\x22\x32\xe5\x0d\x70\x75\x82\x89\x39\xe2\x02\xed\xce\x2b\x4a\xd4\x0b\x77\xb4\xcf\x05\x6d\x24\x61\x38\xe3\x25\x27\x26\x0d\xb2\xed\x51\x91\x2f\x78\xfb\x52\x96\x4a\x0c\x76\xfb\xeb\xb8\x2a\x27\x11\x56\x4e\xc2\x3a\x1d\x66\xec\xe4\x24\x49\xeb\xb9\x70\x92\xd4\xbf\xac\xe1\xcc\xfe\x55\x6d\xcb\x6a\x67\x62\x1d\x1b\xca\x26\xd5\xa4\xfc\x96\x0a\xf1\x3a\x7e\x73\x5b\x05\x79\xf1\x4d\x6a\xf1\xa2\xa4\x0c\x6f\xdc\x67\x3c\xff\x04\x29\x68\x77\x8a\x59\xbe\x9a\x4f\x76\x32\x76\xc7\xf8\xce\x0c\xac\x56\xda\x8a\xc0\xd8\x8e\xf7\x44\x93\x11\xcb\x48\xa2\x14\x42\x61\x8d\x77\xac\x58\xcd\x05\xe5\x2a\x43\x4b\x56\xb7\x33\x3d\x75\x84\xe3\xd6\x91\x17\x18\x45\x03\xd0\x6d\xae\x2d\x71\x93\x85\xbc\xb1\xd9\xa7\x9d\x42\x38\x3e\x37\x05\xbc\x9a\x8b\xa6\xd0\x1c\x25\x95\x86\x1b\xa4\x6d\xb9\xd7\xf7\xa4\x88\x2a\x41\x3b\x54\x50\x81\x9e\x4b\x43\xaa\x7c\x52\x83\x28\xbf\x86\x78\x13\x4c\xb8\x62\x7e\x3c\x87\x92\xc0\x77\xa6\xcd\x5a\xce\xc5\x05\x9d\xc3\xbd\x85\x49\x5b\x21\x15\xed\x72\x3f\xd9\xeb\xb7\x72\xd5\x1e\xe4\xc2\x48\x6c\x44\xea\x15\x2d\xf6\x31\x46\x84\x33\x48\x5d\x74\xa5\xb3\x45\xcd\x1d\xbf\xab\x82\x8c\x29\xd7\x3d\x4c\xe9\x6a\xff\xf0\x3f\xc7\x2d\x5b\x67\x4a\xc6\x2a\x34\x66\x37\x69\x70\x27\xb3\x7d\x25\x02\x23\x5a\x70\x96\xcc\xe7\xf9\xb8\x56\x6c\x0b\xa2\x41\x50\xb3\xf6\x3a\x1d\x14\xf0\xf9\x99\xfa\xfd\x96\x8d\xb1\x2b\x40\x25\xa5\xbc\x7b\x93\x14\x6c\x8f\x91\xdc\x0c\x7f\x2f\xb3\x39\xf9\xf3\xe7\xb4\x77\x92\xef\xef\xc7\x4a\xd5\x11\xe5\x7b\xaa\x02\xc9\xf7\xd2\xb8\x85\x95\x29\x23\x99\xf9\x25\xe4\xf2\x53\xb6\x86\x70\x1c\x65\x99\xb3\x46\x64\xc6\x32\xcd\x99\xb2\xea\xf3\x74\x26\x06\xe5\x2f\xd8\x8c\xbc\xe0\x6d\x4d\xb5\xa7\xb0\xd2\x14\x2b\xa9\x97\xa6\xbc\xab\xfd\x4a\x51\xcf\x20\x89\x46\xe3\x6c\x84\x56\x4f\x30\x56\xc9\xd1\xd7\xdc\x52\x05\xda\x7a\x38\x75\x5a\xc2\x01\x38\xd8\x49\x2e\xf3\x25\x28\x2e\x9b\x82\x79\x24\x75\xb6\xa6\x2e\x8d\x77\x9d\xdc\xde\xb2\x49\x1c\x0d\xcb\x4b\x67\xa7\x38\x8a\x8d\x1d\xab\x84\x7b\xa3\x84\x13\xcf\x92\x2c\x67\x2a\x6d\xa1\x09\xad\xac\xcc\x5e\x05\xec\x7b\x87\xff\xe9\xf6\xa0\x5e\x5a\xb5\x69\xba\xdd\xe5\x09\x19\x7d\x2b\x48\xca\xc3\x4f\xdc\x5d\x2d\x9a\x7d\x45\xa6\xdf\x2f\xd0\x80\xbb\x39\x34\xbd\x6d\xfb\xaa\xec\x37\x9d\x0f\x1b\x89\x80\x7c\x03\xaa\x95\x90\xa5\x3d\x6f\x88\x3d\x12\x44\xc2\x8a\xf3\xb1\x8f\x5c\x07\x34\x52\x46\x70\x2a\x03\x52\x08\xdb\xa6\x15\x6c\xeb\x6b\x1a\x8d\x71\x9b\x1c\x8a\x08\x0d\xe5\x43\x20\xeb\x7e\x65\x10\xbc\x7b\xfe\xe6\x97\xeb\xbf\x7f\x38\x7b\xf7\xee\xec\xef\x6b\x92\x86\xb0\x6d\xba\x65\xbf\x29\x91\x47\x35\x3d\x8d\xbe\xb1\xfb\x78\x10\x6d\x03\x33\x49\x03\x97\x71\xaa\x4b\xa2\x4b\x5c\xc5\xdd\x83\xab\x11\xa0\xc2\x9c\xc6\xfa\xa4\xf7\xf0\xc0\x9e\x53\x7e\x3a\x1d\x64\x2a\x96\x27\x70\x02\x69\x08\x85\x39\x48\x25\x71\x90\x8a\xa2\xfb\xcd\xe8\xa0\xf6\x92\xb3\x25\xf3\xc2\x72\xda\x5b\x12\xf1\x08\x58\xd7\xf4\x3c\x56\x0d\x06\x9d\x79\x83\x4e\xdd\x41\x5b\x90\xf3\xfd\x12\xd4\xb3\x3d\x61\x62\x9b\xe5\x12\x75\x3f\x13\x27\xf9\xde\x5e\x9c\xaa\x68\x9c\xf2\x5e\xc9\x63\xc8\x4c\xd9\xda\x6a\x47\x7e\x35\x3a\x73\xb0\xa6\x6c\xdb\x00\xf8\xe1\x21\x72\x5e\xd3\x10\xbe\x2b\x03\x50\xa2\x11\x8d\xb0\xec\xeb\xc6\x1e\x6d\xb1\x96\xca\x78\x5b\xb9\x2b\x49\x2d\x8c\x5b\xd5\x46\xa8\xab\x74\x8d\x38\xe1\x7b\x99\x49\xba\xc6\x2c\xa2\x4b\x1a\xb9\xaf\xef\x53\x25\x7b\x66\x48\x0e\xaa\x74\x07\xe9\xed\x80\x4d\xd6\x26\x65\x21\x0b\xf1\x4e\x1d\xe9\x35\x9b\x84\x34\x50\x2f\x76\x44\x18\x34\xb4\x06\x25\x97\x4b\x77\x17\xc9\xd2\x49\x16\xf0\x76\xda\x60\x05\x50\xaa\xea\x9f\x6c\xc8\x62\x8b\x37\x9b\x1b\x86\x66\xa5\xa5\x4b\xc6\x5d\x76\x99\xf0\x82\x5d\x80\x0b\x6d\xbf\x67\xa9\x04\x89\x04\x32\x85\x04\xc4\x30\xb3\x73\x78\x3b\x0d\x4d\x9a\x99\x7b\x42\xed\x82\xe2\x9b\xaf\x89\xf2\xa9\xc3\xb7\x90\x3d\xc0\x47\x8a\xf8\x25\x11\x97\xd5\x6f\xff\xd6\xdb\xa3\x0e\x4b\x7f\xe3\x50\xc3\x57\x0b\x6a\x4f\xb7\x1a\x58\x06\xd7\x4b\xa6\xaf\x97\x1f\x3b\x3e\x73\xf7\x94\x17\x26\xd7\xfd\xa9\x06\xd3\x52\x23\x70\x21\x0d\xbc\x22\xce\x7a\xea\x52\x69\x0c\x77\xc3\x2c\x09\xf9\x12\x43\xfe\x2a\x43\xae\x14\x26\x91\x15\x83\x3a\xe1\x53\x11\x10\x51\xd6\x59\xc7\x78\x22\x4a\x27\x74\x84\x83\x0d\x15\x9a\x4c\x69\x24\x4e\xed\x38\x14\x8d\x84\x33\x88\x9d\x51\xb5\xf4\xb0\xe1\xb2\xd7\xb7\xa7\xca\x03\xb0\xe9\xf6\x5c\x95\x6f\x4f\xe8\x2a\x78\x91\x2e\x18\xbf\x0d\x89\xe8\x9b\xae\x51\xd5\x5a\xfd\x3d\x4a\x72\x9d\xa2\xa3\x85\xf9\x6b\xd3\xe2\x15\xcf\x7f\x67\x59\xc4\xe3\x4e\x07\xac\x9e\xb1\x1e\x24\x7c\x1a\x8e\x6c\xdc\x50\x15\xad\x54\xb8\x61\x4a\xf3\x61\x32\x3a\x01\x38\x70\x03\x9f\x22\xee\x74\x22\x50\xb7\xaf\x8a\x59\x54\xc4\x92\x24\x00\x0f\x18\x17\x5b\x26\xa3\x38\x5e\xfb\x7b\x7b\x0b\xb4\x10\xd8\x7a\x6b\x09\x29\x91\x5f\xdd\x67\x62\xc6\x44\x3a\xbe\xf4\x22\x9c\xb9\x98\x4b\x19\x16\xf5\x63\x55\xe1\x4c\xd4\x94\x6c\xff\x57\x7b\x8f\xfd\x40\x8e\xa6\xb2\xb2\xc6\x19\x4f\xce\xa1\xf1\x66\x57\xeb\x14\xa0\x26\x14\x38\x3c\x60\xd8\x1b\xa5\x04\x0c\x8f\xa4\xc0\xc2\x8d\xbd\x62\x99\x50\xbf\x1a\xf0\xce\x28\xdc\x7e\x15\x4c\x7f\x38\x0d\xb3\x89\x9e\x0d\xd0\x30\x99\x4b\xc3\x08\x22\xf6\x78\x88\x86\x59\x35\x32\x6b\x55\x56\x0d\xc1\x5e\x21\x46\x7c\x56\xcd\xc8\x5c\xd4\xa8\x16\xc9\xd2\x32\x3a\x35\x26\x51\x5f\x8f\x16\x1b\x4d\xa8\x15\x12\xe0\x15\xca\x21\xa3\xa2\x06\x8b\x65\xa7\xd3\x01\x87\xeb\x3f\xab\x92\x30\xa5\x30\xca\x88\xb0\x02\xad\x7b\x0a\x32\x95\xc7\xc1\xd8\xe9\xa6\x12\x69\x64\x43\x36\x4c\x47\x23\x2a\x86\xe9\xc8\x50\x12\x1a\x0a\x8d\x67\x6e\x91\x2c\x1b\x37\xd0\x22\x59\x06\x76\x8e\x87\x0d\x9d\x3d\xe6\xd4\xf2\x06\xdd\xb2\x81\x9c\xe5\xe0\x85\x37\x78\x36\x14\x30\xf8\x6c\x98\x8e\xd6\x81\xdd\x34\xdf\x40\x0b\xa5\x99\x60\x3c\x4b\xe6\xbf\xca\x79\xbb\xd8\x4d\x7f\xb8\xf6\xd8\x92\xda\xeb\xdb\xa7\x52\x14\x85\xf5\xfd\x74\x50\x6d\x77\xf5\x04\x92\x37\xee\x00\x9b\x5b\x9a\xf0\x56\x8c\x76\x98\x16\x52\x83\xcb\xb7\xe4\xbb\xbf\x67\x5c\x9a\x92\x09\xaf\x49\x60\x09\x7f\x30\x59\x53\x41\x78\xea\xd6\xce\xdc\xfd\x9c\xd2\xcc\x3d\xc6\x3a\x04\xa5\xfb\xb2\x12\x8d\x32\xa7\xe0\x53\x11\x1d\xfe\x67\xaa\x92\x0e\x9a\xc7\xbd\xbe\x7c\x51\x38\x2f\x0e\x88\x88\xdd\x28\x5a\x94\xd2\x42\xe5\xf5\x18\x16\x24\x21\xf9\x68\x33\x95\x33\x46\x2a\xc7\x21\x6e\xe0\xb8\x17\xcd\xb2\x42\x55\xa6\xe9\xa0\xfb\x2b\xf0\xed\x97\x45\x79\x25\xcb\xf7\xc5\xe1\x7f\x06\x6f\x8c\xf1\x66\x9d\xa3\xda\xab\xcc\x9d\x74\x69\xb7\x6a\x9c\xd8\xa4\x0f\xfb\xfa\x1d\xd5\xc8\x3e\x96\x8b\xbb\xb8\x1f\x73\xe1\x0f\x9d\x01\x0f\x0f\xff\x53\xec\x1d\x8c\x48\xf9\x55\xbf\xf2\x6a\x34\x42\x4e\x70\xaa\x1c\x34\x56\xa2\x99\xd5\xf6\x0f\x1b\x99\xa9\x5a\x49\x73\xad\x98\x4c\x54\xb9\xb4\x52\x6e\x26\xc8\x54\x90\x1e\x44\x7d\xc6\x0a\x3f\x5f\xd1\x89\xd2\x17\x2d\x9b\xee\xf7\x92\x81\x14\x46\x8c\x45\x6b\x54\x3f\x5a\x99\x32\x98\x46\xc6\x67\xa2\x62\x44\x40\x1a\x8e\x1a\x4b\xea\xa2\xe1\x5b\xc0\x04\xa9\x5a\x68\x9c\x8c\x67\xec\x67\x9e\xaf\x96\x45\xf5\xe3\x3c\x2d\x54\x5a\x9e\xba\xde\x7b\x0e\xc6\x2a\xfa\xce\x83\x70\xbf\x08\xf7\xcb\x9d\xfb\x45\x45\x6a\x9e\x39\xc1\x6b\xe5\x9b\x8a\x65\xb8\x5b\xa0\x64\x24\x1e\x82\x9b\x05\x8a\xef\x56\x56\x81\x27\x9a\x73\x69\xdb\x72\x7e\xab\x60\xa0\xe3\xe8\x28\xe7\x51\xf9\xe6\x77\x16\xfd\x01\xe5\x3e\xda\x0e\x02\x06\xca\x8c\xc6\xf6\xcb\x84\xdd\xac\x6e\x95\xe9\xd3\x20\xc0\x14\x24\x5d\xa7\x40\x94\xbb\x81\x53\xe1\x03\x98\x74\x0c\xfc\xab\x13\xeb\xa0\xb5\x87\xa9\x42\x44\xbc\x5e\x2b\xeb\x81\x3c\x74\xa4\xf3\xee\x94\x89\x71\xad\x6b\x91\x71\xf9\x1c\xa6\xdd\x77\xec\x36\x2d\x04\xe3\x43\x36\x1a\x81\x65\xc6\x3c\x4f\x26\x95\x8a\xa5\x82\xa5\x10\xce\x11\x54\x84\x2e\x7f\xf5\xe9\x39\x5f\x82\x55\x6a\x45\xf7\x56\xae\xa3\xb1\x5b\xa5\x53\x59\xa1\x3e\xe0\xb6\x32\xe9\x71\x02\xfc\x42\xf1\xba\x88\xd9\x58\xda\x84\xfb\x95\x85\xc3\x26\x17\xe8\x23\xa8\x4d\xf1\xf3\x9a\x38\xd3\xe8\x11\x0b\x71\x7d\xa1\x98\x9a\xf8\x75\x6d\x8b\xfa\xbb\x57\xbc\xd6\x1b\x0f\x38\x3e\x70\x5c\x4b\x95\xa5\x8b\xeb\xa5\x9c\x19\xb3\xb2\x2f\x4a\xbb\x2a\x54\x78\x6b\x38\x06\x45\xfa\x3b\xcb\x25\xa7\x4c\x94\x66\x9a\x45\x5f\x70\xcb\x0e\x04\x61\xd9\xdd\x20\x5b\x93\x4b\x95\x6f\x2d\x4a\xc9\x2a\x06\x8b\x68\x6b\x18\xb6\x1c\xd3\xb9\x1f\x2c\x5b\xb6\xf4\x35\xa6\x91\x73\x39\xea\x12\x61\x28\x3c\x4b\x7e\xfa\x25\xac\x27\x9b\xae\x49\x51\xf7\x01\x8c\xb3\x02\x9f\x92\xf5\x9a\x14\x1b\x27\x3a\x25\xbd\x98\x24\x24\x35\x13\x0d\x22\xcb\xba\x19\x41\x38\xef\x52\x08\xf1\x3c\x26\x45\x28\x80\x2d\x6a\xe2\x3c\x01\x31\x87\x7c\x37\x90\xa0\xca\x43\x49\x90\x46\x32\x0f\x7a\x12\xa1\xb6\xcd\x2d\x3d\xa8\xa0\xb4\x28\x26\x85\xfd\x52\xe8\x57\x72\x2a\x03\xe7\xc8\x6a\xf5\x2d\x8b\xd7\xb2\x3b\xc8\xad\xf1\xc2\xdc\x02\x95\x2d\xe8\x5c\x10\x8e\xb7\xb8\x06\x57\x14\x63\x78\x03\x35\x74\xc8\xee\x10\x6e\x4c\x51\x56\x90\xd2\x39\x6a\x9f\x5f\xbe\x6c\xc7\x9a\xb1\xb3\x6d\x19\xeb\x71\xb7\x4f\x88\x78\x9b\xd3\xf4\xd4\xb1\x50\x4a\xe3\x81\x8e\xcb\x00\xa6\x07\x6a\x0c\xa4\xa0\x01\x63\x3e\xbd\x80\x85\x80\x17\x91\xdc\xe0\x31\x51\x66\x71\x2f\xa2\x82\xb0\xb8\x55\x0a\x39\xb5\x22\x79\x4c\x04\xc6\x45\x81\xfa\xef\xa2\x55\xec\xbc\x52\x67\x96\x65\x22\x18\x67\xb6\xbc\x63\x4c\x04\x76\x03\x78\x3d\x4f\xbc\xbc\x8a\x28\x0e\x44\xd9\x85\x59\xcb\xb6\xfe\x81\x31\xac\xf4\x86\x53\xd6\x32\xea\xdd\x72\x1c\x13\x94\x67\x19\x9b\x38\x37\x1c\xd9\x79\x06\x77\x07\x8c\x17\xcd\x9b\x03\xde\x50\x1e\xd9\x9a\x99\x4b\x33\xd3\xf1\x64\x5a\x6e\x28\x2a\x9c\xc5\x41\x6c\x02\x51\x35\xcf\xc2\xb5\x12\xd8\x34\x95\xd4\x9f\x4a\x4e\x2a\xa7\xcf\x00\xfe\x42\xb0\x45\x88\xd5\x34\x34\x4b\x14\x77\x17\xc9\x12\x82\x76\x11\x1f\x1c\x4e\x2b\x95\xf8\xc3\xdb\x2d\x61\xaf\x6e\x09\x4d\x50\x63\x09\xbf\xdc\xbb\x29\x19\x93\x43\xb2\x76\xa2\x26\x33\x41\x30\xad\x80\xb6\x99\x2f\x41\x2a\xd1\x3b\x97\x89\xa8\x08\xac\x3c\xc9\x71\xed\x7d\xd2\x4d\x2d\xe4\x2a\x2e\x01\x62\x05\x80\xd0\x8f\xd5\xab\xca\x77\x6e\xa8\x23\x2a\xb5\xcc\xd5\xda\xb5\x4b\xe8\x7e\x4e\xab\xfe\x8b\x2e\xb0\x4a\x81\x50\x83\xed\xda\x60\xd7\x15\x7c\x53\x63\xc4\x6d\xfa\xf6\x17\xd6\xd8\x2b\xa6\xc6\xab\xbd\x0c\x20\x4d\xc8\xd8\x39\xd7\xc0\x43\x8d\xc2\xc3\x04\xa6\xad\x3a\x75\x5c\xa9\x33\x13\xae\x3b\xb7\x16\x8c\x35\x35\x43\x70\x71\xaa\x6b\x88\xd6\x55\x77\xc9\x63\x59\xbe\x68\xca\xc7\xe8\xd0\xcd\x4e\x17\xee\x15\x53\x57\xb3\x4a\x59\x3b\x0d\xc8\xed\x01\x0b\x54\x69\x22\x4c\xad\x3b\xb7\x97\xda\x53\x78\xbb\xc8\xaf\x2f\x6b\x06\xe3\x46\x59\xf3\xae\x44\xdd\x42\xab\x79\xb8\x4e\x9c\x6d\xd5\xd1\xbb\x3c\x17\xe5\x6c\x97\x56\xdd\x7c\x89\x79\x5f\xdd\xa8\x11\x9d\x0e\x2f\x67\xca\xf4\xe6\x12\x87\x99\x13\x0e\xa1\xef\x55\xa7\x35\xe9\x35\xcb\x55\x98\x26\x6e\x37\x03\x54\xef\xea\x65\xbe\xac\x03\x5d\x1d\x44\x74\xd5\x4d\x81\xca\x9c\x43\x5d\x89\x05\x8c\x43\xdd\x90\x32\x56\x2f\x36\x16\x8b\x90\x22\x46\x19\xea\xab\x9c\x6f\x48\x23\xeb\xd6\x87\x92\xfa\x82\xae\x77\xff\xb5\xee\xbe\x35\x19\x61\x88\xe8\x74\x94\x64\x29\x3e\xd9\x8d\xb8\x75\x56\x8b\xe2\x18\x9c\x4b\x4e\xe2\x13\x63\xab\x09\x42\x0a\x05\xab\xcf\x55\x53\x6c\x4d\xe7\xb0\xec\x8e\xf8\xa9\x5a\xf4\xb5\x12\x38\xe4\xa5\xfb\xe5\x0a\x35\x6a\x0e\x57\x50\x76\x3f\x76\xc4\x68\xbb\x94\xe6\x46\x42\x29\xcb\x7a\xb9\x5c\x22\x25\xdd\x8c\x09\xa3\x5f\xe4\x4c\x06\xbb\x7d\x02\x33\x80\x78\xda\x6b\x2d\x97\xf4\x9c\xcd\x6d\xd9\x9e\x2e\x2b\xaf\x48\xa1\x08\x5c\xc4\xd4\xa9\x83\xd5\xe3\x35\x1e\x26\x79\x24\xc2\x5b\xcf\x0b\xb9\x11\xa2\x66\x39\xb5\xa1\x34\x4e\xf8\x73\xda\x3b\xe1\xfb\xfb\x1e\xc5\x62\x84\x01\xb0\xf6\x98\xa8\x1a\x02\x73\x40\xd4\x81\x28\x23\x65\x5e\x35\x6e\xb6\xb9\x81\x92\x5b\x84\x30\x29\x14\x42\xf5\xf8\x13\x9f\xc1\x43\xa9\xb2\x51\x4f\x79\xb7\x7b\xbb\xa9\xa6\x9f\xa9\x87\xad\x37\x8f\xc6\xab\x61\x7a\x5c\x8e\xb7\x98\xc8\x72\xdc\x38\x8b\xe5\xd8\x99\x02\x4f\xb6\x68\x90\x27\x8d\x0d\xf2\xc4\x69\x70\x5a\xd5\xb4\x54\xc3\x17\x4c\x97\x35\x0d\x9a\xf4\x55\xb6\xc1\x62\x9b\x06\x8b\xe6\x06\x0b\xb7\x41\x3c\xa8\x8d\xad\x6a\xa7\x65\x2c\x6b\xea\xb2\xec\x6e\xab\x7a\x2c\xbb\x73\x9d\xe2\x5f\xe7\x9f\x5e\xb3\x3b\x36\xff\xf5\x0d\x5d\x2a\xe1\xe2\xa2\x56\xb8\x88\x03\xbf\x5b\x84\x73\xdd\x94\xd1\x91\xdb\xfb\xdd\x02\xd1\x99\x13\x01\xe2\x6e\xb3\xcc\x59\x11\x10\x8e\xb2\xe4\x1d\x9b\x52\xe1\xa6\xa1\xba\x4b\xf8\xf5\xd6\x1e\x68\x4a\x3e\x58\xf5\x3e\x13\x60\xb5\xc0\x47\x8d\x4e\x32\x8d\x16\x50\xb7\x4c\xfc\x9a\xf0\x28\xb6\x66\x44\x55\xb1\x75\xb0\xbc\x97\x94\xfc\xd7\x90\xd1\x32\x22\x1a\x17\x04\xba\x17\xc3\xd4\x02\x9c\xca\x69\xcb\x2d\x78\x7c\x17\x34\x98\x2d\x44\xbd\xc6\x3d\xf0\xf2\xfc\xd5\xd9\xfb\xd7\xd7\x1f\x5e\x9c\xfd\x72\xf6\xd3\xc5\xeb\x8b\xeb\x8b\xf3\x2b\xaa\xd9\xff\xd7\xc9\x7d\xbe\x12\x12\x13\xe3\x8b\xeb\xe4\x56\x3e\x2d\x39\x5b\x26\x9c\x9d\xf1\xdb\x42\x3e\x2a\x88\xeb\x27\x13\x29\xf8\x4f\x79\xfe\x51\x62\x7c\xbc\x58\xf4\xa3\x27\x5a\x30\xb5\x15\x2d\x23\xbf\xab\x91\xaa\xd2\xfa\x2b\x24\xad\xcc\xc6\xb2\xfc\xba\xc5\xba\x6f\x2e\x2e\x2f\xde\x9c\xbd\x6e\x1e\x74\xdf\x1b\x74\xdf\x1f\x74\xdf\x1b\x74\xff\x2b\x07\xdd\x6f\x1c\x74\xbf\x32\xe8\xbe\x32\xc5\xbb\x17\xb4\xfd\x1f\x7b\x37\x83\xde\x7f\xb4\x5b\x66\xcb\xdf\x0a\xcf\xa0\x23\xcb\x27\x4c\x09\x2a\x29\xbd\x17\x6b\xd6\xbd\x3a\x7f\x77\x71\xf6\xfa\xe2\x1f\x67\xd7\x17\x6f\x2f\x3f\xbc\xba\x78\x77\x75\xfd\xe1\xf2\xed\xcb\xf3\x0f\x57\xd7\xef\x2e\x2e\x7f\xa6\xf7\xea\x48\xdc\xd4\x78\x8b\xf2\xc8\x75\xd2\xd5\x01\x0a\xd2\x72\x80\x02\x3f\x9c\x45\x9a\xdd\xc2\xe5\xfa\x92\x2d\xc1\x8a\x25\xed\x8e\x93\x6c\xa2\xc2\xa0\x80\x48\x3d\xed\xa6\xd9\xff\x9f\xbb\x3f\x6d\x6f\xdc\xb8\x16\x45\xe1\xef\xfc\x15\x24\x4f\x02\xa3\x0e\x4b\x6c\x52\xdd\xc9\x4e\xa8\x2e\xf3\xf4\xa0\xb6\xfb\x44\x3d\xa4\xa5\x8e\x8f\x0f\xcc\xad\x40\x64\x51\x2c\x0b\x04\xe8\x42\x41\x6a\x59\xe4\xfb\xdb\xdf\xa7\x56\xcd\x00\x48\xb5\x9d\xec\x7d\xef\x73\xbf\x90\x40\xa1\xe6\x61\xd5\x9a\xd7\xcf\x74\x2e\xe8\xe2\xc3\x9a\x09\x41\x95\x8f\xc8\xde\x18\xb3\xa1\x0d\xea\xa2\x0b\x1f\x8d\x31\xfb\x8a\xc8\x90\x7f\x40\xf8\xf2\xeb\x86\xc0\x96\x71\xb3\xff\x38\xb7\x23\xa8\xf2\x75\x2a\xe6\x2b\xba\xb0\x1e\xaf\x4b\xd3\xe9\x2b\xd7\xaf\x11\xce\x9b\xce\xec\x3e\xd1\xd5\xfd\x42\x45\x52\xe9\xde\x31\xb1\xea\x7a\xe6\x7b\x5d\xf0\x74\x57\x6d\x36\x05\x17\x74\xd1\x47\x9e\x76\x2e\x33\xd7\xe2\x2b\x70\x31\x6d\x30\x29\x2f\x32\xc0\x49\x4f\x7b\x20\x24\xc5\x76\x7b\x27\xe2\x02\x45\xd1\xb5\xfc\x43\x27\xa8\x20\x85\xef\x87\xda\xc9\xb8\xdd\x9c\x17\x98\xfd\x3e\x47\x20\x7b\x63\x7c\xf8\x4a\xca\x76\x52\xb0\x8a\x3f\x72\xa5\x02\x9a\x78\x1e\x23\x47\x13\xee\x38\x66\xfe\x50\x3b\x2c\x8a\xbc\x8e\x46\x51\x9c\x7b\xdd\xf6\x63\x23\x04\x7b\x88\x86\xa1\x0c\x4c\xbd\xb5\x80\x23\x3a\x6a\x0c\x4d\xf9\x3b\x56\xc2\x9a\xb6\xe9\x8d\xd9\x28\x3a\x61\xbf\x94\xcb\xc7\x1e\x21\x36\xa8\x17\xaf\x6d\x4d\xc8\xf3\x2d\xe1\x2d\x5b\x1e\xbc\xe7\x9e\x88\x28\x8a\x7b\x77\x22\x16\x68\xbb\x3d\x95\x7f\x3d\x42\x72\x74\x82\xac\x96\x08\x98\x88\x0b\xe5\x73\xb0\x0b\x45\x8c\xdd\x4e\x4b\x26\xee\x8f\x99\x08\x30\xaa\xf1\xcf\xd4\xee\x40\x4c\xa4\xa6\x9d\x65\x63\x98\x35\x81\xb1\x1b\x65\xed\x7d\x30\x50\x37\x28\xce\xe1\x08\xe9\x1e\x78\x15\xe5\xe8\x4e\xc4\x39\x8a\xa2\x38\xe6\x24\x77\xf0\x68\x08\x2b\x10\x3f\xf9\xcf\x3f\xfe\x34\xb8\x9a\xc4\x3f\x2d\x06\xe8\x8f\x7f\x78\x82\x50\x14\xf1\x64\x3c\x9b\xbe\x07\x87\x94\xb1\x7c\x46\x2a\x1a\x2e\x48\x61\x63\xaf\x91\x60\x46\x72\x84\x69\x1d\x56\x18\x1f\xa4\xc1\x9a\xc7\xda\x21\xe3\xbe\x98\x50\xbf\x65\x6e\xea\x2d\xd6\x27\xe7\xe8\xa8\x63\xec\xe4\xdc\xd4\x78\x31\xb7\xee\x04\x28\x14\x9e\xca\xbf\xc3\xc3\xe3\xcd\xe1\x1d\x1d\xb5\x0e\x8f\xa3\x96\x99\x20\xf5\x65\x8c\xa2\xbd\x4d\xd5\x0e\x53\x4b\xb3\xbb\xfd\x71\x52\x42\x50\xe0\x06\x6d\x08\xce\xed\xd6\xc7\xf2\xfc\x3a\x6a\xa6\xd6\xfb\xe2\x8a\x84\x0d\x28\x67\x0e\x3a\x66\x05\x68\x79\x78\xc7\xd3\xb3\xef\x04\x7b\x36\x67\xb9\xa9\xd9\xd3\xb5\x70\x2a\x79\x18\xe8\x01\xbc\x9d\xb0\xa2\x2a\xed\x54\xa4\xb5\x1d\xd7\x09\xf5\xd6\x21\x95\x21\xac\x17\x38\x8d\xa2\x0f\x22\x4e\x91\x35\x57\x6e\x9d\xed\xd4\xe6\x0f\x33\x69\x83\xe4\x70\x6d\xc3\x2c\x08\xe1\xa2\x0d\x77\xf6\x27\xae\x31\xab\xaa\xd9\x56\x85\x59\x65\x4a\x2b\x67\x08\xe8\xd7\x96\x3b\x44\x04\x36\xf3\x70\xd1\xe2\x3c\x58\x84\x7d\x27\xc9\x07\x0c\x34\x8a\xce\x21\x38\x87\x47\x44\x03\xd8\xf5\x9b\x3c\xe1\x51\xd4\x3b\x97\x07\xe3\x04\x71\xc2\xdb\x7a\xd3\x1a\x11\xc7\x69\xa4\x00\x10\xdc\x1b\x52\x68\xdf\x46\x55\x5b\x88\x2d\xe3\xa7\xa0\xaf\x2b\xc1\xd5\xc5\xfd\xc6\x9a\x0c\x70\x07\xc0\xe4\x92\xa9\xb8\x79\x16\xc5\x32\xe2\x7a\xb7\xd4\x41\xc7\x31\x00\x11\x79\xf0\x5b\x50\xf9\xbf\x10\x42\xa8\x6d\x2f\x8a\xfa\x7f\xdc\xfe\xb1\x6f\xd3\xa0\xfe\x5d\x2c\xf1\xaa\x0f\x72\x52\xac\xf2\xd2\xc1\xf6\x6a\x10\x04\x5e\x83\x80\x2b\x02\xce\x8c\xaa\xd1\xe7\x4e\xd8\x32\x9d\x5a\xfd\xb9\x2f\x50\x71\x01\xec\x6c\x88\x25\xf1\x5b\xc2\x10\xe9\xf0\x28\xc1\x48\x6a\xb0\x0c\xb7\x6d\x6c\xd9\x5a\xb8\xb1\x0f\x9c\x82\x66\xe6\x43\x21\x61\x1e\x83\x5f\x51\x04\x30\x7b\x1a\xff\x8b\x1b\x01\x4d\x62\xde\x7a\xc4\xf7\x0c\x59\x77\x34\x18\x08\x3a\x10\x6a\xf0\xd0\xf6\x8e\xa2\x2f\xea\xde\x09\x51\x38\x79\x32\x95\x0e\xd4\x26\x9d\xd3\xcf\x9f\xde\xca\x03\x60\x37\x3e\x95\x84\x1e\x68\x83\x13\x62\xc3\x47\x06\x89\x43\x51\x7c\xde\x6c\x28\x7f\x95\x96\x92\x68\x05\x87\x90\xc1\x2e\x6d\x43\xa4\x93\x99\x52\x2a\x53\x03\xf3\x22\xeb\x97\x48\x9f\x16\xe8\x98\xee\x70\xff\xe2\xe5\x87\xd7\x3f\xf6\xe1\x64\xea\x96\x83\x16\xf6\x06\x23\x0c\xf1\xe9\x56\x5a\xc3\x18\xb4\x04\xb1\x1e\x8d\x3c\xb2\xbe\x46\xed\x1b\xce\x2b\xd9\xb2\xe3\xda\x03\x00\x35\x5d\x1e\xb5\x4c\x93\x9c\x08\xab\x88\xf5\x42\xc4\x20\x28\x65\xcb\xb8\x40\x56\x71\xe6\x56\xef\x44\x09\x5d\xf4\x1b\xe1\x48\x21\xdd\x6c\x58\x6e\x40\x80\xcc\xac\x76\x5b\x81\xf0\x78\xcf\x28\xfc\x7e\x36\x88\xa2\x03\xa1\x87\xbc\x78\xb7\x87\xc6\x61\x07\xfb\x02\x98\x9c\x48\x8d\xcd\x12\x29\xfe\x38\x58\x6d\x1c\xb9\x19\x87\xd3\xe2\x64\x07\xc7\x61\x3a\x59\xa3\x4d\x0f\x45\xa2\xfc\xfa\x51\x84\x6a\xd0\xb9\xaf\x06\xed\x38\xbc\x3a\xf2\x91\x06\xa8\x2e\xa2\x52\x9e\xb0\x19\x1c\x36\xbd\xc1\xf6\x11\x99\x3b\xa0\x05\xc2\x81\xf9\x1d\x6f\x19\xd9\xa1\x38\x7e\x1e\x4a\x6f\x61\x42\x3b\xc1\x63\x90\x92\x76\x3c\x04\x61\x1e\x45\xad\x07\x49\xe7\x0f\x02\x6c\xfa\xdd\xaf\xf7\xce\xf3\x80\xa9\x15\xf6\xdf\x29\xc7\x70\x6d\xf4\x25\x1d\xfe\x52\x51\x7e\x7f\x4e\x33\x3a\x17\x05\x8f\xbf\x29\xe7\x9c\x6d\x44\x72\x9d\xad\x39\xe9\x7f\x33\x10\x83\x6f\xfa\xb3\x6f\x34\x1e\x68\x40\x76\xa7\x41\x96\xbf\x4a\x73\x49\x7c\x2f\x59\xbe\xe8\x96\x94\x2b\x41\xec\xa2\xab\x28\x46\x49\x78\x75\xff\xc9\xf2\x23\x7d\x4b\xfd\xb3\xff\x55\x81\x38\xff\x0d\xf1\x40\x8d\x4c\xc5\xce\x01\xd4\x0b\xbb\xcd\xc3\xcd\x88\xa5\x3f\xda\x08\x68\x0c\xdc\x03\x0b\xee\x1b\x50\x91\x62\x49\x79\x07\xac\x80\x03\xc8\xa9\x76\x67\x91\x3e\x1a\x46\x34\x85\x30\xa2\x07\x83\x62\x9a\x1b\xc6\x0b\x8d\x13\x66\x0d\x40\x66\xad\x57\xf6\x36\xf3\x90\xf8\x3a\x6a\x02\x3b\xd2\x0f\xc0\x65\x6e\x86\x36\xb1\x09\x37\x62\x93\x60\xf6\x7e\x6b\xbc\x2f\x27\x22\x31\xbd\x78\xac\x06\xd7\xd6\xb4\xe5\x62\xb2\xd5\x28\x79\x56\x3b\xaf\x7f\x4f\x11\xa2\x34\xb0\xf9\x2e\xfe\x4c\x91\x63\x07\xde\x89\xbd\x38\xe6\xce\x66\x3a\x15\x3e\x1d\xd0\x46\xa2\x1f\x79\x24\xba\x27\x37\x16\x1e\xa9\x2e\x2c\xa9\xee\x2a\xfe\xe2\xb7\x3e\xde\xd3\xfa\xf9\xfe\x2e\x4a\x34\x58\x1e\xee\x06\x26\x6c\x0b\x7f\x38\x5c\xb8\xbb\xbf\xe4\x0b\x51\x8f\x31\xd2\xf0\x99\xaf\x2f\x02\x9a\xf0\x99\x3a\x86\xb9\xc6\x75\xac\xe9\xc0\x6e\x47\x87\x86\xcb\x47\x4d\x70\xb7\x4b\xb1\x43\x98\xc6\xfd\xff\x75\x9d\xb1\xf5\x9a\xf2\x27\x95\x60\x59\x1f\x27\x7d\xfa\x65\x53\x70\x51\xf6\x71\x9f\xca\x29\x3b\xba\x4a\xaf\x68\xd6\x9f\xe1\x10\x90\xf4\xab\x92\x76\x4b\xc1\xd9\x5c\xf4\x3b\x74\x98\x96\x0d\xc7\x95\x70\x94\x7a\xcd\xe8\x19\x62\xbb\xed\xab\xec\x72\x80\xcb\x94\x65\x15\xa7\x10\x15\x4b\xd6\xc2\xae\xf3\x3d\x22\xcc\xf1\x89\x78\x5e\x07\x5c\x10\xc0\x4d\x4f\x80\x03\x55\x62\xe6\xb3\x76\xa2\xc8\x84\xdc\x70\x3e\x17\x91\xbb\x17\x79\x9c\x4b\x52\x7b\x74\x52\x3c\x67\xa6\xd6\xc2\xd4\x9a\x12\x96\x14\xb3\x0e\x4d\xd2\x19\xc9\x93\xd4\xb7\x16\xc2\x74\xb8\x64\x59\xf6\xbe\xca\xb2\x72\x4f\x8f\xe5\x98\x95\x21\x02\x44\xb6\x84\x95\x53\x61\x0e\x12\x3e\x53\xce\x39\xdd\xf1\xa7\x43\x9a\x97\x15\xa7\xdf\x55\x6c\x41\x0a\xa7\x8a\xca\x7e\x55\x49\x0c\x53\x30\x6e\x22\x29\xa6\xc3\x2a\xbf\xe3\xe9\x26\x68\xd6\x8b\xf7\xd2\xb8\x4b\x4e\x21\xd6\x3e\x5d\x74\x01\x55\xe9\x8a\xa2\x7b\x45\xbb\x1b\x4e\x4b\x9a\x0b\x2f\x88\x09\x74\x02\xb2\x36\x17\x72\x5f\xdd\x22\x2c\xee\x45\xc4\x68\x52\xd9\xbf\xd3\xff\x57\xdf\xab\xb4\xef\xd3\xd5\xaa\x07\xe0\x3b\xd2\x37\x32\x20\xd4\xa9\x23\xea\x67\xb8\x93\xa8\xa7\x71\x46\x4c\x89\xf3\xb3\xb7\xaf\x4e\x09\x1d\xbe\x66\x73\x71\x4e\x65\xba\xd2\x75\x57\xfd\xd2\x9c\x31\x6d\x60\x7b\x43\xef\x4b\xcd\x79\x1e\x39\xe0\xc5\x02\x51\xc6\xe5\xb5\x5c\xac\xc1\x20\x77\x67\xb8\x68\x66\xd8\x6e\x65\x29\x97\x25\x75\x40\x58\xb7\x65\x04\x7a\x60\x98\xa4\x4c\x74\x0f\xda\xa4\xa9\xad\x71\xd8\xeb\x5d\xba\x58\xb4\x99\xc9\xd6\x3d\x92\xd2\xa9\xad\x31\xa1\x33\x62\x54\x61\xe5\xab\x1c\xca\x4c\x8b\x27\xf7\x38\x1f\x6d\xa9\xce\x78\x13\xf5\x6a\x9d\xe8\x89\x88\xa2\xe6\x47\xf5\x65\xe6\xa4\x75\x7a\x69\x4a\xed\xdd\xea\xe0\x3c\x28\xbd\x00\x13\xbd\xcf\x78\xdf\xb3\x66\x9b\x7b\xbc\x81\xb5\xc7\x0a\xb1\xfe\x00\x03\x35\x07\xa3\x22\xc4\xdb\x63\x62\xd4\x35\x22\xc2\x58\x17\xda\xde\xbb\xe5\xc2\x55\xbe\xa1\x94\x05\x8f\x2b\x90\x88\xa3\xf1\xcc\x49\x25\xa8\xfa\x4e\x65\xeb\xda\x79\x7e\x8b\x80\xd6\x7a\x99\xf2\xdb\x3c\xac\x97\x01\x4a\x13\x8f\x8a\xf6\x6b\x3e\x92\x3a\xe6\xb0\x54\x1d\xef\x98\x35\xa6\xd1\x79\x7f\x57\x78\x99\x75\x00\xaf\x05\xb6\x92\x7a\xa2\x3b\xed\x93\xec\xe0\xe2\x6a\xbf\xd5\x07\xcd\xad\xa8\x6f\x61\x51\x0b\xe3\x2b\x3f\x42\x5c\x87\x94\x65\x7b\x33\xc9\x8f\x2a\x4c\x5c\xcd\xa5\x96\xab\x83\xb8\x9c\x6a\x6b\xb5\xc7\x8a\x50\x1b\x22\x99\x85\xb1\x05\xdb\x02\xef\x09\x0f\x40\x68\xf5\xe0\x9d\x76\x12\x69\x94\xb2\xdb\x4d\xe1\xe5\x57\x70\x27\xe8\x6a\x3d\xa4\x01\x04\xbd\xf7\x04\x36\x2a\x1a\xb4\x66\x6a\xee\x70\xa8\xa8\xdd\xc2\x7f\xfd\x9d\x71\x4c\xfc\xab\xce\xc4\xc8\x54\x40\xc6\xea\x79\x4e\x62\x01\x3b\x63\xaa\xfe\xd4\xa6\xd1\xa0\x47\xcd\x39\x05\x12\x8d\xde\x12\x95\x03\x6b\xfd\x0b\x81\xd5\xbb\xfc\x0e\x6a\x05\xaa\xca\x7d\xf6\x73\xb0\x68\x76\x41\xa6\xb1\xd0\x2d\xd9\xca\x4d\xbd\xca\x1b\x46\xd0\xbe\xb7\xea\x54\x39\x8d\x6e\xb0\xa9\x3d\x22\x9f\xde\x4e\xa9\x3f\x16\xf8\x0b\x2a\x54\xde\xd9\xd5\xdf\x54\xfd\xe9\xa1\xc0\xdf\xc4\x6f\x4f\x8f\xd9\x02\x45\xef\x2a\xcb\xb4\x6f\xe2\xc7\x74\x4b\x5a\x86\x71\x30\x88\xe4\xbf\xb8\xa7\xcc\xd1\xd7\x2c\x57\x70\x44\xf9\x6f\x3b\x9c\xff\x8f\x9c\x36\x03\x56\xa1\x17\x1a\x12\xeb\x93\x63\x57\xc5\xe0\x1d\x73\x58\x14\xe5\x25\x7f\x1e\x2b\xca\x59\xee\xa8\x4e\x88\x78\x2c\x21\xdb\xca\x60\x18\x4b\x4e\xe9\xaf\x34\x4e\x66\xbe\x19\xa4\x44\x69\x56\x35\x64\xfd\x76\xed\xa3\xea\xb3\x20\x78\x5e\x80\x9a\xc3\x42\x81\x17\x4e\x65\xec\xa5\x11\x1b\xec\xa5\x88\xa0\x34\x4d\xe8\x70\x33\x27\xa3\x19\x01\x0d\x37\xf9\xca\x53\x32\x9e\x11\xd0\x4f\x93\xaf\xcb\x0d\x39\x9e\x11\xd0\x2e\x93\xaf\xe5\x86\x3c\x9d\x11\xd0\x0d\x83\xd7\x11\x79\x26\x5f\x47\xfa\x75\x4c\xfe\x24\x5f\xc7\xea\x55\x8c\xc8\x9f\x67\xa4\x2f\xf4\x57\x31\x26\xff\x21\x5f\xf5\xd7\xdb\x11\xf9\xcb\x8c\xf4\x6f\x47\xfd\x9d\x24\x13\x62\xbf\x93\xe4\x61\xa7\xb4\x1e\xbd\x59\xb8\x63\x9c\x1e\x2d\x0b\xbe\x4e\xc5\x6f\x9a\x0e\x4f\xcb\xc2\x2d\x6f\xcb\xf6\x80\x3d\x36\x64\xa5\xb6\x26\x46\x92\x96\x1c\xcd\xe4\x3d\x2c\x49\x2a\x56\x12\x2e\xf1\xf4\xb2\x2d\xca\xb8\xdb\x35\xaa\x84\x18\xba\x98\xe6\xdb\xad\x4d\xf4\xe2\x94\x7b\xa9\xaf\x8a\xf5\xa6\xc8\x69\x2e\x6a\xe9\x17\xbc\x82\x10\xb3\x7b\x92\xf7\x15\x93\xaf\xe7\x9b\x2c\x15\x5e\xda\xbb\x62\xc1\x96\x8c\xf2\x9d\x1a\x81\x86\xd6\x5f\x33\x00\x7e\xdd\xd2\x7f\x7e\xad\x2a\x7a\x97\xde\x5f\xd1\xb3\x62\x9e\x4a\x90\xc5\xca\xef\x00\xa3\x66\xe5\x1b\x9f\x8d\x49\x87\x1f\x36\xa5\xdb\x87\xf2\xa5\xb9\x05\x41\x10\x26\x37\xa1\x7c\x50\xbb\x43\xf1\x61\x60\x2b\xaa\x47\x95\x6c\xc4\x23\x72\x4f\xea\x67\xf5\xc1\x0c\x11\xb6\xa7\x79\x51\x9f\x94\x40\x5d\xee\xd3\x97\xca\x2f\xbc\xae\x48\x4d\x1f\xec\x58\xfb\xa6\x3e\xea\x81\xba\x3c\x72\x1b\xd7\x13\x55\xd6\x0f\x9e\xac\x43\xee\x6e\xef\x5d\x65\x08\x66\x43\x6e\x78\x3f\x41\xf7\xc5\xe7\x8d\xfe\x55\x76\xc7\x4b\x50\x59\xdc\x7e\x22\x63\x39\x51\xee\x3d\xe8\xb1\xca\x30\x76\xbd\x75\x39\x82\xfd\x42\xc6\xc7\xfe\xa8\x5d\x2e\xbb\x7b\xc8\x58\x4e\xa4\x7d\x55\x5f\x7f\x64\x34\x5b\x90\xb1\x9c\x4a\x78\x54\xa9\x1f\x53\x0e\x66\x94\x63\x39\x93\xfa\x25\xec\x15\xbf\x26\x63\x6f\x0a\x5f\xf0\xeb\x60\x54\xf2\xf3\x7f\xb8\x41\x99\xaf\xfe\x01\x20\x63\x39\x75\x7e\x4a\x98\xa7\x36\xba\xbf\x7a\x99\x5b\x46\xf9\x9a\x5e\x55\xd7\xd7\x94\x93\x63\x39\x97\xe6\xcd\x2c\x06\xa3\xb9\x38\x67\xa0\x3b\xae\x1d\x82\x1f\x8f\x61\x51\x1a\x1f\x54\x89\xcf\xf9\x4d\x5e\xdc\xe5\xe4\x58\xce\xa9\x7e\x51\x5f\xe4\x89\x38\x96\xf3\xf8\x1d\x35\xdb\xd4\x1d\x99\x63\x39\x8d\xee\x5d\x7d\xff\x3e\x2d\xd5\x76\x3d\x96\x93\x69\xde\xc2\x6f\x1f\x53\x9e\xae\x4b\x72\xfc\x67\x2f\x87\x4a\x33\xfd\xd1\xc1\x45\xc9\xf1\x7f\x40\x8f\x4c\xac\x51\x55\x0b\xcd\x36\x72\xe4\x72\x3e\xd5\xb3\xd9\x1f\xf9\x3c\x15\xe4\x18\xf6\x1f\x3c\xf7\x3b\xe1\x7c\x9c\x7e\xd9\x70\x5a\x96\xac\xc8\xc9\xd3\x51\x30\x21\xee\x8b\x85\xe5\x70\xd0\x01\x8c\x1b\xf5\xad\x58\x04\x67\x41\x5e\x7a\x35\x58\x61\x44\xb9\x32\xeb\x77\x54\xe7\x90\x73\xc8\x8c\x33\x8c\x58\x78\x33\xa8\xbe\x7b\x33\x5a\xa8\x1b\xe3\x2a\x9d\xdf\x5c\x55\x3c\x97\x23\xfb\x9d\x1c\xae\xab\x8a\x65\x8b\x8f\x59\x2a\xe4\x7d\x03\x0c\x1a\x1d\x0f\x34\x64\x15\x94\x54\x5c\xb0\x35\x2d\x2a\x81\x03\x7b\xe3\x5d\x8d\x61\xc0\x96\x71\xdf\xa4\x38\x5a\xf9\x23\x2f\xd6\xac\xb4\x18\xab\x7e\x1d\x72\x5a\x16\xd9\xad\xe7\x12\xb8\x05\x3d\x1a\x8a\x15\xcd\xc1\xea\xb4\xbd\xea\x77\x95\x00\x1d\xbf\x0f\x57\x25\xe5\xb7\xd4\x0a\x90\x46\x98\x01\x92\x52\xff\x1e\x53\x84\x0b\xb2\x28\xe6\x95\x92\x80\x84\x22\xf4\xbe\x63\x1b\xb1\x61\xa1\x8a\xc4\x05\x7e\x98\xaf\x52\x9e\xce\x05\xe5\xaf\x53\x91\x4e\x7a\xa3\x1d\xc2\xcd\xbe\xe6\x64\x30\xc8\xff\x78\x8c\x8b\xe1\x22\x15\x29\xe9\xf7\x07\x39\xce\x2d\x6b\xad\x99\x9f\xc7\x14\x8f\xd0\xae\xc6\x51\xd1\x3c\x36\xdd\x8d\x07\x37\xf1\x35\x33\x7f\x63\x83\x6c\xbf\x6b\xef\xa8\x40\xdf\x35\x8b\xd8\x02\xfe\x77\xe5\xa9\xa9\xb8\x6b\x21\x8f\x5f\xa7\x82\x0e\xf3\xe2\x0e\x82\x6f\x49\x0c\x5f\x2e\xaf\xaa\xfc\x3d\x20\xfc\xbb\x9d\xe2\x24\x3e\xf9\x69\x31\x78\x82\x4b\xf2\x67\xb7\x13\xaa\x96\xb8\xcd\x9a\x29\x63\xa3\x59\x13\x11\x45\x94\x10\xba\xdd\x3a\xce\x8a\x4c\x4b\x87\x82\x96\x22\xe0\x22\x65\x01\x05\x52\xe4\xc0\x1f\xdb\x6e\xed\xe3\x05\x84\x9f\x88\xa2\x5a\x42\x62\xdf\xdf\x51\xb1\x2a\x16\x33\x57\xe3\xdc\x38\xd0\x32\x38\x7f\x4e\x8e\xc6\x98\x91\x91\xe7\x70\xfb\x84\x3d\x2f\x4e\xd8\x80\x3c\x43\x6c\x19\xf3\x84\x01\x7e\x14\x45\x3c\x61\x83\x31\x20\x09\xe8\x21\x27\xac\x73\xc5\x69\x7a\xe3\x5c\x44\xd9\x26\x96\x7b\x9a\x38\x6e\x69\xe2\xcf\x07\x9b\x38\x3a\xde\xdb\xc8\xaa\xce\x45\xff\x9d\x12\xb0\x11\xce\x49\x32\x6b\x7a\xc4\x22\xc2\x08\xbe\x69\xc2\x06\x4f\x07\x7c\x86\x53\x62\xc2\x7d\xc8\xa4\x91\x4c\x5a\xc3\xf4\xc2\xfb\x18\xb2\xf0\xeb\x12\xde\x8e\xe5\x9b\xb2\x24\xb7\x9d\x28\xa2\x48\x9b\xcb\xb0\xbc\x5b\x4c\x0b\xc5\x82\x99\xf4\xfb\x3b\x63\x42\x9c\xa2\x96\x91\x2e\x6a\x23\xc5\xb9\x5e\x2e\xe3\x02\xeb\xa8\x84\xd9\x44\xf4\x5b\x22\x12\x4e\xd8\x20\xce\x49\x5c\x1c\x31\xf4\xa4\x44\x47\xf9\x1f\xcb\xd9\x94\x11\x3e\x28\x27\x05\xe1\x96\xb3\xfb\x2d\xf8\xf9\x9a\xb2\x41\x39\x61\xb0\x9b\x37\xfb\x2d\x26\xfe\x25\x46\xc1\xc3\x0e\xff\xee\xb5\x79\xd8\x69\xa7\xc0\xbf\x54\xb4\xa2\x2f\x29\xcb\xaf\xe1\x2a\xa1\x0b\xcb\x0e\x54\x0b\xf2\x77\xf9\x5d\x79\x31\x78\x67\xbc\xa1\x80\xa8\xde\xfa\x0b\x85\x1a\x6c\x29\x90\xa7\x68\xb2\xb9\x80\x08\x0a\xd6\x0f\xd0\x75\x56\x5c\xa5\xd9\x07\x9d\xc8\x0f\x51\xd3\xb0\x7c\x6f\x0a\x5e\x67\xda\xd3\xe7\x5e\x9b\xc6\xa5\x7b\xc0\xb1\x80\x2f\xc9\xd3\xff\x49\x07\xcf\x1c\x71\x3b\xd5\x35\x4e\xb4\x1a\xad\x18\x82\xc4\xbd\xc9\xf6\xc0\xdc\x88\x6c\x75\xdf\xc1\xeb\xd4\x15\x70\x78\x70\x41\xf2\x61\xba\x14\x94\x77\x1a\xf3\x63\x98\x6d\xd8\x72\x13\x9b\x13\xeb\xfc\x4b\xee\x9b\x79\x2f\xbd\x36\xb7\x5a\x5d\xc2\x44\x35\x8d\x8d\x14\x77\x4f\x4d\x1d\xb6\x8c\x53\x2b\x37\x30\x5e\x2b\xb3\xb8\xb9\x0c\xa8\xc3\x49\x69\xe2\xfd\xdf\x16\x37\x60\x6c\xfc\x41\x01\xb8\x89\x97\x6c\x75\xd9\x2b\xe2\xb6\xc0\x49\xf5\xdc\xb4\x72\x52\x69\x98\xe6\xbe\x0e\xc8\x33\xa3\x08\x19\x0b\x92\x26\xd5\x60\x3c\x43\x51\xc4\xe3\x34\xa9\x66\x58\x60\x99\x72\x3c\xc3\x25\x3c\x3c\x9d\x21\x6f\x6f\xf5\x1e\x9f\xc4\xe6\x50\x86\xeb\xaa\x14\x80\x56\x1f\xfe\x1a\x5b\x1d\xa6\xf1\xce\x07\x20\x85\xb1\xc6\xde\xdb\xaa\xf3\x00\xa7\xf6\x7f\x6f\xac\x02\x02\x34\xf7\xe4\xb7\x23\x9d\x0a\xfb\x2c\xee\x8d\x74\x68\x91\xf2\x87\x82\xef\x35\xcc\xde\xdb\xee\xb7\x23\x1d\x01\xac\xd6\x86\x8a\xf5\x9b\xcf\x69\xd6\xaa\xfd\xa9\x36\x28\x68\x7e\x2a\x60\x6a\xf6\xb6\xde\x62\x5a\xdb\x20\xd8\xc7\x10\x2a\x19\x75\x82\xdd\xa6\x05\x17\xc6\xa7\x72\x41\xe6\x5a\xc7\xc9\x3a\xf9\xf9\xf6\x68\x3c\x8d\xad\x2e\x4f\x81\x9f\x21\xdc\x1b\xa1\x49\x6c\xb3\xee\x5b\x4e\x84\xbe\x3d\x1a\x47\x51\x9c\x27\x85\xbc\x9c\x80\xf3\xa3\x27\xab\x26\x65\xc0\xa1\xf7\x12\x7f\x3a\x94\x90\x41\x67\xc0\x0f\x90\x38\x51\x5a\x07\xfa\x4e\x31\x97\x89\xd8\x99\x9a\x3f\xe7\xec\x97\xea\x91\x48\x75\x8d\x89\xa1\x66\x62\x08\x4c\x4c\xcc\x42\xb0\x18\xe4\x07\x1f\xec\x98\x21\x17\x97\x4c\x4f\x2d\x5b\xc6\xb6\x12\xeb\x75\x66\xef\x70\x8e\x9e\x75\x94\x3f\x77\x81\x53\x04\xaa\x43\xfa\x30\x7b\x25\x3a\x65\x52\x0c\x8e\x67\x84\x63\xf9\xf0\x74\x66\xa3\x26\x3c\x3e\x15\x97\xd7\x54\x00\xf9\xf6\x36\x5f\x16\x0d\x60\x6b\xce\xc9\xca\x87\x58\xf8\x19\x52\xbc\x6f\x09\x16\x6a\x13\x88\x1e\x3c\x93\x10\x61\x5c\x10\x4d\x80\xcd\x9c\xdd\x83\xaa\x8a\x2b\xeb\x41\x9a\xc6\x3a\x40\xe8\x01\x7e\xff\x15\xd5\xcd\x41\xa1\xa1\x40\x0f\x79\x5c\x60\x66\x03\x39\xac\xf7\xca\x46\xfe\x25\xe9\xaa\xbc\xe5\x5a\xae\xeb\xf0\x5e\xd6\x24\x0e\xcc\xd9\x2f\xea\xfa\x7c\xd8\x61\xf7\xfa\x3e\x5d\xd3\xb7\xfe\x15\x6a\x53\x4b\x60\xad\x73\xba\xa8\xe6\x1e\x07\x56\x8e\xd3\xf1\x97\xf8\x0c\x76\xdd\x26\xe6\x58\x24\x7c\x86\x85\x62\xc6\xba\xc6\x0e\x4a\x7c\xca\xf9\x8a\x2e\xaa\xac\xb9\xf3\x7d\x1f\x48\x5e\x65\x09\x9d\x05\x3b\x36\x6d\xca\xcb\x7f\x2c\xaa\x6e\x2a\x04\x5d\x6f\x04\x5d\x74\x45\xd1\x35\x6d\x74\xd3\xbc\x9b\x6a\x2a\x2e\xef\xa6\x5d\xa8\xb1\x1b\xf7\x07\x74\xd0\x47\x5d\xb1\x4a\x45\x77\x51\xd0\x32\xff\x46\x74\xe9\x17\x56\x8a\x3e\xea\x58\xd9\x39\xff\xb7\xb5\xb3\x2c\x78\x37\xed\xaa\x5d\xdf\xde\xa8\x0f\x52\x1a\x0b\xc4\xa6\xa9\x07\x30\x74\xe4\xe7\x02\x4d\x52\xcd\x0c\xd7\xef\x2d\x38\x85\xe7\x41\x56\x4e\xf1\xd7\x6f\xb9\x28\xf2\xdf\x0c\xf0\x74\x9b\xc4\xaa\x73\x34\x3b\xfc\x3c\x3f\x81\x4b\xb8\x5e\x24\x69\xc9\x3b\xc3\xbd\x31\x21\xc4\x78\x39\xd6\xeb\x2d\x66\xc8\xdc\x53\x31\x02\x30\xd0\x52\x74\x30\xc0\x46\xd7\xb9\xde\xbe\xbb\x5b\x41\xcf\x91\x2d\x63\xa5\x24\xa4\x2f\xc2\xb1\x77\xf9\x3e\x0e\x7f\x9c\xf4\x04\x2e\x91\x87\x9d\xb9\xb3\x1a\x93\x61\x94\x52\x4e\x10\x6f\x8c\xbd\x98\x61\x11\x8c\x91\xcf\x70\x2e\xcf\x51\xad\x7d\x20\xe2\x07\x83\x8e\xd3\x04\x52\x92\x0a\x0b\x3e\x6e\x43\x81\x8e\x72\x0b\x20\xb4\xe9\xf2\x49\x4f\xf9\x03\x57\xfe\x18\xb8\x0d\x3e\xe3\x72\xc0\xb9\x0c\xa4\x30\x3b\x7c\xdd\x22\xcc\xb0\xed\x5d\x39\xaf\x0d\x30\xfe\xfa\x0e\x92\xc7\x05\x5c\xe3\xa3\x13\x7f\xb2\x73\xc4\xb5\xc8\x38\xd8\x56\x1d\x7b\x7b\x28\x7a\x31\xd8\x64\x69\x40\x67\xe0\xd2\x90\xd8\x69\xa7\xc6\x20\x21\xe5\x34\xe6\xa4\x90\x75\x2b\xd5\x30\x4b\x7d\x19\x72\xbb\x8c\xa2\xb4\x0b\x64\x98\x20\x32\x2b\x4a\xd2\xd9\xa4\x85\xc7\x52\xc0\x0d\x3a\xc6\xb6\xb3\x05\xc2\xf9\xb7\xcc\x38\x8e\xcb\x8f\x58\x87\x7a\x5a\x41\x95\xb3\xa7\xcc\xc8\xe8\x24\x7b\x5e\x9d\x64\x83\x01\xa2\x49\x36\xf3\xfa\x9e\x0d\x9c\x97\xe2\x84\x63\x81\xa9\x47\xa0\x5f\x86\xf3\x89\xc1\x52\xf4\x98\x90\xc6\xc4\xa2\x70\xe6\x30\x0b\x67\x47\x99\xe3\xb9\xf9\x2c\xc8\x95\xbe\x92\x34\x9f\xde\xe6\x46\x1d\x4a\x0a\x59\x83\x20\x45\xe2\xeb\x26\xc4\x39\x29\x92\xe3\x19\x9a\x32\x32\x9a\x54\x12\x93\xd0\x2e\x21\xb6\xdb\x98\x93\x1e\x60\x18\xd8\xa5\x9a\x11\x69\x0f\x9e\x2e\xaa\x05\xc3\xe3\x11\xc2\x7c\x06\x7b\xeb\x8e\x8c\xf0\x29\x19\x61\x09\xb7\xce\xc9\x08\x7f\x20\x23\xfc\x82\x8c\xf0\x0d\x19\xe1\x0b\x32\xc2\xef\xc8\x08\xbf\x22\x23\xfc\x89\x8c\xf0\x47\x32\xc2\x3f\x93\x11\x7e\x4d\x46\xf8\x3d\x19\xe1\xb7\x64\x84\xcf\xc8\x08\xbf\x21\x23\xfc\x2b\x19\xe1\xef\xc9\x08\xbf\x24\x23\xfc\xf9\x90\xa4\xd4\x19\x24\xa8\xdb\xee\xf5\xe9\xcb\xcf\xdf\xd9\xe8\xce\x5a\x57\xc3\x18\x39\x07\x0e\x85\x55\xd2\x79\xa0\x7f\x72\x49\x6f\x69\x2e\x5e\xa5\x59\x76\x95\xce\x6f\x4a\xf2\x40\xf3\x85\xbc\x71\xc1\x2b\xdc\x24\x99\xed\x8c\x30\x96\xad\xa9\xe1\x35\xbd\x5d\x04\x31\x97\xe4\x97\xd2\x55\x98\x56\xa2\xe0\x55\x6e\x7b\x64\x12\xce\x6b\xc1\x9a\x82\x0b\x38\x24\x5d\xb7\xdb\x87\x5d\x33\x0e\xb1\x9f\xc7\xb0\x36\x01\xf1\x53\xa4\xd4\xa5\x9f\x44\xf6\x66\x9e\xec\xcb\xec\x01\xaf\x91\x19\x4b\x91\xbf\x94\xf3\x10\xd6\xa6\x13\xb7\xdb\x7b\x9b\xeb\x34\x5f\xd4\xf3\x9c\xe6\x0b\x97\x03\x22\x0e\x7e\xaa\xf2\xd3\x2f\x1b\xc6\xe9\xe2\x42\x4d\x99\xfa\xc6\x6b\xc9\xe0\x30\x45\xa9\x72\xfb\xa5\x5f\xa8\x59\x3c\xcd\x03\xf9\xf4\xaf\x83\x81\xa2\x88\xb8\x9d\x67\xb0\xa1\xf1\x57\x81\xb7\x2d\x01\x1f\x5e\xd2\x7c\x21\x89\x24\x1d\x90\xa6\x36\xc8\xcb\x80\x9b\xbc\xdd\x16\x9a\x75\xb1\x31\xfc\x65\x1d\x2f\xb9\xde\x39\x74\x48\x89\x09\x36\x95\xdf\xfd\x53\x6d\xf7\x4a\x5d\x80\x52\xc5\x01\x08\x95\xe9\xcd\x6e\xd6\x35\xf5\xac\x6b\x62\x33\xb0\x69\x4c\x6d\xc4\x06\x45\x9c\xe9\x1e\xc5\x08\x4d\x62\xcf\x54\xf4\xe5\x60\xd0\x72\x1a\x8c\x23\x26\x84\xbf\x1f\x0c\x30\x6d\x6d\x1b\xa0\xe2\xba\x76\x31\x83\x8e\xf5\xb9\xa9\xf3\x52\x70\x76\x7d\x4d\x79\xdc\x87\x81\xf6\xb1\x44\x22\x51\xb8\x95\x94\xea\x38\xa8\x47\xd1\x70\x29\xbf\xd8\x6a\x60\x61\xc6\xa0\xc0\x55\xe4\x4d\x45\x47\x07\xd6\x7b\xf6\x68\x78\x98\xdb\xc5\xfd\x86\x5a\x0d\x7d\x75\xac\xbb\x92\x0e\xef\x5e\xd1\x6e\x6a\x79\xd7\x7d\xe4\xbb\xec\xa8\x41\x81\x3a\x02\xca\xf7\x55\x0f\x06\x00\xb2\xf7\x5d\xa8\xa0\x0b\xe8\x5f\xf7\x8a\xce\xd3\x4a\x5e\x8d\x0a\xed\x03\x13\x7d\x8b\xf7\x59\x7d\x06\x39\xba\xe5\x72\xbf\x01\x7c\x7b\x9f\x7a\x74\xbb\xfd\xda\x7e\x2d\x97\xbf\xa1\x63\xea\x0c\xf4\xc6\x10\xe9\x04\x85\x56\x29\xdc\xb7\x4a\xd1\xdc\x5d\x01\x91\x47\x7a\x23\xcc\xad\x59\x10\x1e\x23\xcc\x8e\x8e\x00\xa3\xee\xe5\x5f\xd1\xb7\xb9\x59\x1f\x8b\x22\xfb\x5d\x82\xf0\x94\x55\x70\x5e\x3e\x98\xf3\xb2\xff\xf2\xc3\x82\x50\x09\xc0\x38\xa1\xf2\xf2\xcb\x09\x4d\x8e\x43\x8d\x13\x09\x71\x62\x63\x87\xc4\x87\x3f\x17\xe1\x99\x7c\xf1\x6f\x69\x43\xd6\xea\x35\xb2\xa0\x4b\x5a\xa7\x38\xd1\xc3\xcd\x60\xd0\x71\x4c\xf5\x3a\x42\xa0\xc5\x3e\x0a\x13\xc9\xbf\x7d\x3a\xcd\x8f\x9e\x4e\x46\x08\x17\xe4\xe9\x49\xf1\x3c\x57\x71\xd7\x92\xe2\xe8\xa9\x8f\x8b\x14\x61\x3f\x0c\xb9\xa2\x47\x02\x54\x39\x5c\xe8\x7c\x36\x9c\x83\xc0\x30\x86\x70\x41\xbc\x8d\x48\x43\x0f\x17\x5e\x07\x9b\x34\x28\xe6\x5e\x07\xc5\xb7\xe3\xa9\x38\x1a\xcb\x0e\xe6\x64\x7c\x92\x3f\x17\x27\x39\xec\x96\xfc\x68\xec\x77\x30\x9f\x69\x81\x61\x6d\x76\x39\xf8\x38\x55\x68\x21\x53\xe8\x20\x4b\x8e\x67\x58\xf3\xfe\xe0\x96\x9f\x5a\xca\xcc\xd0\xbb\xc1\x9c\x2b\xf5\x6c\x03\xb0\x62\x64\xc7\x14\x53\x1d\x98\xbe\x37\xc6\x55\x30\x5a\x88\x02\x7e\x95\xd5\x5d\xa4\xbd\x33\xfe\x08\xfe\x3d\x8d\xc3\x8d\x73\x8b\x13\x21\xc9\x1f\x1d\xa7\x15\x76\xc4\x07\x09\x58\xeb\xbb\xe2\xd5\x7f\xdb\xae\x90\xcd\x7f\xfd\xce\xa8\x75\x16\x3d\x7c\xfa\xff\xda\xee\x18\x99\xdd\x61\x25\x91\x2d\x6c\xd3\x8f\xe6\x9e\xca\x52\x41\xb9\x3f\x7d\x0e\x40\xc8\x4a\xe0\xb3\x5f\xfe\x67\x0b\x58\x1a\x3a\x71\xbf\x0d\xd2\x68\x79\x91\xa5\xe3\xf3\xa9\x31\x1b\x9c\x8c\x1c\x7b\x74\x14\x45\x55\x9c\x27\xc5\x11\x70\xc0\x63\x0f\x7f\x37\xee\xea\xc6\x23\x84\x70\xa2\xc9\x92\xd9\xee\xb7\xf6\x81\x26\x4f\x6b\x40\x0f\x86\x1c\x1b\x66\x9a\x9c\x04\x79\x07\x08\x11\x9a\x1a\xbc\xf6\x90\x9e\xcb\xbd\x8d\x72\x22\x34\x23\x42\x36\xca\x88\x90\x8d\x16\x44\x24\x4f\xe5\x1e\x10\xc9\x33\xb9\x07\x1c\x8b\x68\xbb\x4d\x71\x45\x96\x10\x21\xdc\xc7\xcb\x5d\xcc\x8e\x0a\x99\x50\x34\xaa\x9b\x32\x67\x39\xbd\x9e\x30\x5c\x20\x5c\x1a\x86\x3a\xc0\x6d\xd5\x7f\x45\x6b\xd9\xa8\x92\x50\x1d\x08\x14\xb4\x22\x74\x35\x78\xd6\x09\xbe\x65\xb3\x1e\x21\xd7\x56\xd6\x62\x53\x09\xf3\xe2\x5b\xc0\xd1\x97\x48\xe3\x3c\x98\x94\xf7\xff\xae\x49\xa9\xdc\xbe\x48\xa3\x28\xc5\x59\xd0\x7f\x3c\xd7\x73\x94\xb9\x89\x99\xb7\x4c\x4c\x65\x26\xa6\xda\x3b\x31\x4a\x2d\x32\xc4\x8a\x95\x98\x7d\x50\xe0\x0d\x99\x0f\x9e\x75\xb2\x64\x23\x51\x85\x6b\xd8\x7e\xd7\x08\x53\x92\x25\x73\x33\x81\x6b\xb2\x88\x57\xba\x1f\xf3\x41\x49\x08\x59\xa3\x2c\x99\xcf\xc8\x0a\x43\x39\xe6\x9a\xb9\x0d\xd7\x60\x3e\xf8\xd3\x2c\x98\x79\x83\x81\xac\xf1\x08\xaf\x24\xd6\x09\xac\xc5\x5b\x84\xdb\x32\xcd\x71\x89\x76\x72\xcf\xcc\xcd\xd0\x38\x05\x6c\x38\xcb\x2e\x3c\x22\x2f\x0e\xd7\x4c\x61\xd5\x9a\x70\xf1\xd6\xed\xad\xc5\x5a\xad\x36\x82\xab\x61\x0f\x85\x58\xc3\xd0\x65\xf5\xab\xb4\x6c\xd6\x1d\xea\xd5\xaa\x41\xd4\x85\x33\x9a\x00\x70\x5d\xac\x33\xb4\xce\x06\x03\x6c\x4c\x83\x0c\xf9\xd0\x79\x54\xa3\x61\xea\xf7\xf4\x4c\x6e\x0b\xe8\x5e\x4c\xd1\xa4\x17\x1b\x6b\x2d\x49\x85\x6c\xb7\x3d\xaa\xe8\x01\x78\x52\x2c\x4f\x14\x45\x3a\x51\x77\x4a\x9b\x63\x84\x20\xb8\xa9\xb9\x5f\x07\xd1\xb2\x4c\x3b\xb3\xce\xb7\xe5\xe8\x18\x7e\x21\xdc\x02\x7a\x90\x0f\x7a\x62\x26\x4d\x1a\x1c\xcf\x8b\x2a\x17\x94\xeb\xa0\x83\xe6\x0d\xab\x19\x9e\xac\x82\xe3\x8b\x4b\x7c\x8c\x70\x40\x2d\xe9\xf0\x2d\x35\xfa\xc8\xde\x9a\x4d\xf2\x0a\xfc\x70\xb7\x29\x37\x8b\x28\x6a\xb0\x03\xf5\x28\x76\x08\x22\x9c\x5f\x1e\x50\x94\xaf\x75\x40\xf3\xb4\x1c\x3b\x9b\x88\x26\x3f\x9b\xe6\x0b\xc0\xba\xe9\x02\x3c\x89\x15\x95\x24\x8b\x24\xad\xa6\x09\x00\xcc\x24\x09\x20\xf8\xfd\x43\x4e\x34\x73\x19\x14\x58\x58\x9e\x66\xd9\x3d\xd8\x0b\x32\xc4\x96\x31\x93\x98\xbf\xe2\xfb\x79\x81\x5d\x02\xe6\x6f\x9d\xf3\xab\x4f\xac\xb9\x75\xcd\xf6\x2f\x94\x84\xa9\xfb\x5b\xb8\x37\x1e\x33\xdb\x78\xa6\xad\xd1\xb3\xce\x71\x76\xbd\x4a\xeb\xc0\xc4\x12\xab\xa0\xa7\x2a\x31\x2f\x9f\x9d\x01\x16\xfc\x6a\x09\x42\x02\x41\x23\x69\x35\x5b\x89\x96\x96\xa6\x8e\xd8\x50\x65\x26\xce\x48\xc8\x30\xe1\x95\x90\x29\xae\x4b\xab\x38\x14\x6b\xca\xb9\x00\x21\xd4\x12\xf5\xc2\xc8\xd2\xcd\xee\x87\x75\x8c\x11\xce\x91\x5c\x3e\x67\x52\x56\x17\x5b\x31\xf4\x90\xc7\xcc\xad\x29\x14\x96\x24\xb7\x59\x88\x3d\xa5\x5b\xf2\x43\x4f\x03\x68\xd6\x3c\xd3\x8e\x2b\x53\xbb\x2a\xac\x02\x96\x85\x93\x8f\x73\xce\xd4\xdc\xd4\x30\xab\x36\x31\x6a\x3b\x42\x68\xfc\x07\xd7\xef\xab\x1c\xa7\xe4\x6e\x30\x30\xac\xed\x16\x80\x8b\x82\x34\x20\xe1\x25\xce\xa8\x9a\x66\x66\x00\xad\xd7\x48\xc7\x13\xa0\x2e\xb4\xeb\x61\x87\x9d\xb4\xdd\x50\x25\x1e\xe1\x96\xda\x1f\xb9\xa6\x52\x6f\x35\x1c\xc4\x3e\x60\xaa\xdb\x32\xcc\x13\x31\x20\xa5\xd5\xa8\x30\xf7\xad\x98\xf9\xe1\x8e\xdb\x7a\x2c\x8e\xc6\xb8\x44\x00\x10\xc4\x23\xb7\x2a\xee\x8d\x2c\x1b\x0b\x7a\xac\xcf\xe1\x9e\xdd\xfe\x28\x7b\x06\x7c\xc3\x1d\x70\xa2\x91\x27\x6c\xa6\x0e\xb3\x3e\x56\x21\x0f\xb2\xb1\x5f\x1f\x63\xf4\xfa\xb0\x27\x38\x77\x21\x78\x0b\x5a\x31\x5f\xe1\xd4\xa8\x8e\xb4\xe6\x6b\x95\xe3\x85\xf8\x9b\x20\x23\xcf\x2d\xb4\x55\x72\xf0\xd9\xb9\x46\x5e\x55\xdb\xe5\x27\xe2\x39\x57\xeb\x0b\x72\xae\x44\xcc\xbe\x65\x08\xd4\xf1\x3a\x46\x31\x4e\x0c\x9e\xc1\xcc\x16\x12\x8f\x35\x82\x59\x99\x0c\x94\x96\x7c\x78\x3a\xc3\x19\x3c\x18\x0c\xac\x06\xf4\x1c\x51\x95\xe3\x14\x57\xb8\x90\x04\x6f\x86\x76\x3b\x6a\xb6\xca\xc8\xba\x65\x68\x3f\x2e\x6a\x99\xda\xf6\x4e\x73\xad\xf6\xa3\x5c\xfb\xab\x6e\x94\xf1\xab\xf5\x7d\xa8\xd5\x76\xc2\x1e\x00\x66\x2a\x6f\x2b\x82\xf6\xcb\x0e\x54\x5f\x1e\x19\xa4\x04\x47\xbd\x76\x70\xf4\xd0\xdc\x1a\x4a\xe2\xd3\xb6\xf2\x98\x93\x77\xa9\x58\x0d\xd7\xe9\x97\x78\x84\xe9\x91\x08\xc0\x8e\xeb\x58\xad\xac\xa7\x8f\x7b\x80\x8b\x6f\xaf\xc9\xfd\xc8\xdd\x6d\xc3\x17\x62\x8d\xa1\x6d\xae\x51\x6a\x27\x39\x80\xfc\x87\x20\xba\xae\xb7\xfd\x10\x1a\x1c\xa3\x29\xdf\x40\x9a\x07\x5d\xcf\x1a\x80\xcb\x37\x9a\x26\x6b\xce\x2a\xfd\x22\x0c\x8b\xde\x08\x0c\x00\x57\xea\xf0\xa9\x72\xb7\x32\x69\xb9\xd5\x46\x07\x0d\x7c\x0d\x1a\xba\xc7\xc8\xf7\x41\x09\xa4\x4e\x31\xcd\x17\x93\x2f\x18\x00\x62\x39\xd1\xa9\xe7\x90\x3a\xda\x61\xdd\x56\x39\x79\x50\x8d\x2c\x26\x6f\xf0\xbc\x58\x6f\x32\x2a\x9f\x7f\xdd\x61\x89\x11\x7f\xc0\x12\xa3\x99\xbc\xc0\xc0\x82\x9a\xdc\x60\x33\x07\x93\x0b\x5c\xe7\x8b\x4d\xde\x61\xcb\xa8\x9a\xbc\xc2\x3e\x2b\x68\xf2\x09\x7b\x1a\xdd\x1f\x31\xdc\xca\x93\x9f\xb1\x21\xf9\x27\xaf\xb1\x21\x74\x27\xef\xb1\x4f\x3f\x4d\xde\xea\xd7\xc9\x19\xce\x8a\x62\x53\x4e\x1e\x44\x21\xd2\x6c\xf2\x3d\xce\x69\x29\x7b\xfa\x72\xb7\xb3\x4e\x51\x7c\xd0\x76\xd0\x02\x3a\x00\x82\xce\x04\xfa\xf3\x50\x09\xb9\x36\xf8\x73\xc3\x44\x40\xa7\x48\x2c\x44\xdb\x2b\xfc\x40\x3e\x77\x9c\xe1\xc0\x0f\xca\x38\x61\x91\x5e\x1f\x41\x54\xdc\xaf\xb2\x60\x6b\xb5\x3b\x78\x24\x60\xed\xe5\x2d\xe5\x82\xcd\xb5\xd2\x2b\x6f\x73\x45\x15\xfa\x06\x30\x38\x4f\xbb\x07\x8f\xbe\xe1\x19\x74\xff\x79\x43\xef\xff\xd9\x65\x65\x97\xd3\x5f\x2a\x79\x6a\xfb\x41\x30\x23\xdb\x2e\x78\xfc\x49\x17\x0b\x1d\xe5\x14\x7c\x7f\x11\x79\x6d\xb2\x65\xdc\x90\x44\x72\x04\x79\x4f\x17\xd7\x34\x2e\xb0\x2a\xc7\x91\xe7\x71\xf6\xd6\x86\x30\xb7\xa2\x83\x74\x30\x68\x2b\x05\xd1\xc9\x95\x2b\xac\xb6\x96\x72\xaf\x8c\x2a\x91\x23\x5c\x78\x2d\xa9\x56\xf2\xf6\x56\x74\x09\xd9\x06\xa8\xcb\xd4\xa6\x53\xe6\x29\x5b\xe6\x14\x66\x06\xe6\xc2\xba\x2b\xf3\x4b\xd2\xb4\x2d\xb6\xa0\x9d\xc9\xe1\x5d\x9a\xdd\x68\x9f\x17\xae\x90\x28\x36\x65\xc1\x45\x4b\xf4\x90\x74\xae\xbc\x15\x68\x03\x55\xb3\x77\x8c\x4b\xf9\x83\xdb\x26\x54\x11\x2d\x6d\x90\x4a\xcd\x03\xdb\xa4\x62\xe5\xbf\x73\x5a\xca\xaa\x21\xe5\xf1\x2d\xb6\x77\x73\xad\x59\x59\xb2\xfc\xba\x7b\x43\xef\x3d\x87\xd3\x12\x22\x8e\xb6\x5e\xb7\x70\x4e\x46\x27\xf9\x73\x0e\x9c\x5e\xb6\x8c\xb5\x86\x50\x92\xcf\xd0\xf0\x86\xde\x07\x38\x65\xc0\x47\xd4\xa3\xe2\x03\x45\x07\x24\x7c\x46\x1e\xd8\xe2\xcb\x84\x63\x09\x10\x28\xbe\x4d\x33\x8b\xd0\x2b\x97\xea\xcb\x4c\x39\x53\x37\x5c\xd0\x5d\xeb\x5a\xd7\x98\xfc\xea\x42\x5a\xd1\xf9\x8d\x7c\x97\x5d\x72\x83\x81\xa1\xec\x19\x87\x48\x72\x40\x88\x87\x6c\xf1\x45\x0f\xa0\x23\x82\x4e\xcb\x1e\xc3\x67\x4c\x87\xf2\x4e\x97\xa0\x3f\xf0\x5e\x96\x66\x37\xcd\x9d\xa0\x23\x8d\x78\x2c\xf5\x91\xc1\xd2\xeb\xbe\x74\xd4\xdd\x93\x88\x59\x87\xcb\x06\x34\x33\xe8\x96\x95\x4c\xc4\x1c\xf7\xfb\x3a\xde\x3f\xec\x2d\x6f\xe5\x71\x7d\x57\xc2\xe8\x9b\x12\x56\xaa\xd7\xa7\x85\x81\x30\xbf\x9f\x67\xb4\xbb\xa0\x02\xdc\xd5\x4c\xba\xfd\x81\x18\xf4\xbb\xcf\x8f\xe4\x03\x9c\x63\x89\xb1\x38\x2d\xf9\x43\x5e\x91\x34\x99\x91\xd0\x84\xcf\x66\xbf\xab\x45\xe8\xa7\x6b\x7e\x67\x08\x17\x13\xb3\xc5\x9b\x15\x6a\xd1\x4e\x79\x28\x6a\x6a\xea\x39\x69\x6b\x45\x7b\x7c\xab\xcd\xa4\x2c\x1e\xc0\xfe\x7c\x40\x4c\x77\x76\x08\xbb\x8e\xe7\x68\x57\xdb\x86\xd0\xad\x06\x16\xeb\x3b\xee\x30\x27\xd9\xeb\xa3\x49\x52\x2b\x68\x13\x3b\x8e\x3e\x18\x19\xb4\x4f\x4f\x2e\x7d\x2e\x4e\xa8\x76\x1f\x98\xd0\xd9\x50\x1e\x0e\x22\x89\x2d\xbf\x2f\x30\x2b\xfb\x85\xcf\x41\x28\x6c\x18\x32\x23\x5e\x37\xa0\x75\x6e\xe2\x9e\xc9\x73\x70\x62\x01\xbd\x61\x08\x8d\xb6\x5c\xf1\x61\xe0\x3e\xf9\x96\x8c\x7c\x4d\xcf\xa4\x98\x29\x7b\x01\xd9\x39\x34\x2f\x72\xc1\xf2\x8a\xba\x24\xd2\x1b\x99\xe8\x7b\x05\xc2\x82\x10\x92\xc2\x01\x55\xf4\x8a\x6e\xf9\xff\x57\x98\x25\xad\xca\xd5\xdb\x7c\x5e\xac\x59\x7e\x1d\x6b\x95\xe5\xae\x17\x94\x47\x67\xae\x2d\x87\x5f\xea\x90\xfb\x04\x35\x17\x07\x63\xf1\x80\x6b\x2f\x0d\xdc\xa0\xff\xdb\xad\xb0\xee\xe2\x0f\xde\x1e\x35\xd7\x61\xe0\xff\xdc\x1c\x92\xe7\xb9\x73\x1f\xa6\xa6\x5f\x9d\x95\x8e\x88\x99\x9c\x0d\x0c\x9e\x2d\xad\xfa\x71\xfe\x75\x77\x45\x1b\xe0\x6f\xf5\xae\x93\x78\xc5\x06\x83\x19\x19\x6d\x69\x6d\x02\x43\xef\x3a\xc6\xb7\x0d\x00\xa3\xe4\xe8\xc8\x2b\xae\x5d\x05\x29\x6c\xca\x37\xe9\xfc\x5a\x8c\xea\x8e\xa7\x9b\xf7\xa9\x60\xb7\xf4\xbc\xda\xd0\x86\x89\x0e\x30\xd0\xbd\x58\xec\xdc\xa8\xce\xdb\x69\x00\xcd\x47\x43\x6d\xb8\x31\x90\xd0\x99\x93\x37\x3a\xfc\x60\x3d\x6f\x16\x7c\xf2\xa0\x63\x3e\x61\x9a\x57\x6b\x8d\x1a\xf7\xc6\xf8\x8e\x33\xa1\x9e\x47\x78\x5e\xe4\x4b\x76\x5d\xe9\x6f\xa3\xdd\x0e\x29\x49\x62\x4c\x71\x8e\xb0\x88\x73\x0d\x7d\xe7\x12\xf1\x7f\x95\x66\xd9\xab\x16\xe0\x3b\x52\x21\x6e\xbd\x70\x0a\x24\x54\xc9\x1e\x75\xe8\xde\xde\x6b\x2a\x8a\x2b\xc7\x17\xfc\x91\xb1\xd0\xc7\x7a\xef\xd4\x86\x84\xe6\x4b\x82\xa3\xde\x6b\xba\xb8\xa0\x6b\x49\x0b\xd1\x33\x88\xa8\x99\x35\xfa\x29\x2f\xd7\xed\x36\x16\x84\x2a\xb7\xbc\xf1\x08\x39\x27\x64\x43\x9e\xde\x11\x01\x8e\x52\x7c\x52\xa8\xc1\xff\x51\xcd\x8b\x28\xca\x83\x65\x11\x48\x3b\x15\xe5\xf0\x05\xf3\xd0\xbd\x99\xf2\x5b\x77\xb1\x62\xa5\x0b\x8e\xa8\x5c\xb3\x6d\x8a\xb2\x64\x57\x19\x7d\xe5\xa6\xe2\x13\x14\x6c\xd1\x30\xaa\xbb\xa3\x93\xbd\xd0\xac\x81\xed\xb6\x45\xad\x54\x34\x10\x19\xa6\x31\x40\x55\x13\x44\x84\xab\xe6\xa2\x92\xd8\x6d\xcd\x29\x14\x95\xab\xae\x69\x04\xbd\x9e\xca\xe7\xac\x1a\xf0\x87\xa5\x16\xa4\xbf\x4b\x37\xfe\x76\x6e\x71\x3a\x28\x5a\x9c\x0e\x4a\x5c\xa4\x93\x0f\xdd\xb6\x25\xfe\xcb\x76\xdb\x1b\x43\xd8\x21\xb7\xf8\x12\xf2\xf6\x61\x87\xf4\x59\xde\xcd\x21\x76\x86\xd9\x28\xa4\x37\x42\x58\xf7\x51\xd9\xa7\x1b\xd7\xb8\x72\x93\x03\x48\xca\x7d\x2b\xe0\xc0\xf1\xda\xce\x3b\xfd\x4f\xc0\x9a\x29\xb4\xf4\xd6\x04\x4a\x1f\xf7\xff\x97\xca\x73\xc4\x24\x41\x9c\xa7\x59\xf9\x84\xe6\xb7\x8c\x17\xb9\x32\xdf\xef\xe7\xc5\x82\x1e\xad\x0b\x49\x88\xb6\xe6\xae\x04\xcb\xca\xd6\x2f\xf2\xa2\x49\x19\x18\x99\x9b\xaf\x0c\x76\x83\xac\x19\x8c\xab\x5b\x8b\xad\xa9\x48\xf7\x7e\xc8\xdc\x97\x79\x9a\xa7\xfc\xfe\x68\x49\x53\x51\x71\xea\x75\x01\xc2\x98\xf7\x71\x60\xe5\xde\xde\xbd\xb2\xf0\x07\x25\xfb\xcb\x8b\x2c\xf3\xf3\xbb\xb4\x27\x19\xbb\xf2\x5e\x2f\xd7\xec\x0b\xf3\x06\xa0\x69\x29\xf7\x4e\xf9\x2d\x9b\x7b\xb5\xeb\x5d\x5e\x7b\x7f\x32\x2f\xd6\x9b\xb4\x3d\xb9\x12\x74\xd1\xda\x73\x1d\xca\xab\xf5\x9b\xf6\x05\x63\x8c\xf9\x9f\xdc\x52\x5e\xee\x9b\xe9\x5b\x46\xef\xda\x97\x8e\x17\x95\x08\x86\xe3\x6f\x8f\x2f\x82\xe6\xb2\xce\x23\x1d\x09\xc7\xe5\xa2\x12\x17\x73\xaf\xbc\xca\xb3\xa2\xd8\xb4\xd7\x22\xb3\x1e\x41\x9c\xd9\x7d\x0d\x15\x77\xc1\xd2\xa5\x9b\x4d\xc6\xe6\xb5\x7d\xe3\x25\x3e\x51\xd6\x80\xe5\x91\x76\x0f\xd0\x5e\xf4\x89\x91\x5d\x79\xbd\xce\xaf\x59\xde\x78\x6f\xc9\xb8\x29\xb2\xfb\x25\xcb\xb2\x60\xaf\x6d\x38\x9d\xa7\x82\x2e\xdc\x46\x0c\x3d\x27\x18\xd3\x1b\x50\x7a\xa9\x70\x86\xe7\x78\x89\x57\x78\x81\x37\x78\x8d\x6f\xf1\x3d\xbe\xc6\x57\xf8\x12\xdf\xe1\x53\xfc\x05\x9f\xe3\x0f\xf8\x05\xbe\xc1\x17\xf8\x1d\x7e\x85\x3f\xe1\x8f\xf8\x67\xfc\x1a\xbf\xc7\x6f\xbf\x86\xeb\x71\x46\x1a\xa0\x94\x4b\x68\x23\xe8\x17\x31\x64\x6b\x38\xfa\xc3\x53\xd9\xed\x28\xda\xf3\x61\xbb\x7d\xd8\x75\xce\x86\xac\x7c\x6f\x7c\xca\x4b\x08\x75\x36\x14\x85\x8a\x42\xd6\xc4\x40\xfa\x50\xae\xbf\xdb\x03\xa9\xce\x70\xff\xf4\xfd\x3f\xfa\x18\x82\xae\x03\xa2\x70\xfa\xfe\x1f\xe1\xbd\xbe\xdb\x07\xe5\xce\x70\x3f\x2b\x8a\x9b\x6a\xe3\x17\x3f\x83\x14\xf0\xb2\x0b\x17\xbe\x7e\xaf\xd7\xf8\x76\x78\xfa\xee\xe5\xe9\xa7\xcb\xd3\xff\x73\x71\xfa\xfe\xf5\xe5\xc7\x4f\x1f\x2e\x3e\x5c\xfc\xf8\xf1\xf4\x3c\x8a\xf6\x77\xb4\x9e\xb7\x8f\x1f\x42\x0c\xa4\x9d\x1f\xc6\x87\xa7\xef\xff\x31\x6c\x94\x96\x20\xf8\x4c\x76\xf9\x83\xdc\xc7\xe4\x9d\x7d\xc4\x67\xb2\xe3\x26\xb5\x74\xa9\x2f\xdc\x36\x25\xaf\xcc\x0a\xe3\xb3\xe1\x6b\xf5\xf4\x49\xef\x6b\x72\x36\xb4\x8f\x9f\xbc\x6c\x5e\x71\xcb\x18\xfe\xe8\x7d\x3f\x85\x7d\x4d\x7e\x6e\x24\xd9\xdc\xaf\xbd\x4f\xda\xf9\xec\x7b\xfd\x80\xcf\x86\x6b\xca\xaf\x29\x79\xaf\xfe\x61\x68\x39\x84\xf8\x56\xfe\x58\x83\x57\x7c\x36\xfc\xee\xf3\xdb\xd7\x97\x7f\x3b\xfd\x91\x30\xfb\x28\xcb\x54\x6c\xf1\xa6\xe0\x32\xbb\x7a\xc2\x67\x43\x96\x97\xe0\x64\x95\x99\x27\xd9\x56\x7a\x43\x95\x4b\x33\xe6\x9e\xf1\xd9\x70\x9e\xe6\x6f\x95\x5d\x22\x73\xcf\x72\x83\xf2\x7b\x9b\x6e\x9f\xf1\x19\xa0\xb2\x84\xc1\x1f\x3e\x1b\x56\xaa\xa7\x95\xea\xe1\x2b\x73\x3f\x91\xc2\x3d\xe3\x33\xed\x64\x8b\xdf\x93\xc2\x3e\xaa\xf9\xa0\x5c\x90\xb9\x7e\x90\x75\xa7\x3c\x27\x73\xf8\xc3\x67\x43\xb8\x75\xc8\x5c\xfd\xc3\xbb\x86\x0c\x90\xa6\x9f\xfd\xf4\x37\x55\x3e\xf7\xbf\xc9\xf7\xce\xd9\x90\x57\xf9\xdb\xfc\xb5\xae\xcc\xbd\xc8\xc5\x02\x43\xca\x17\xc1\xc6\x90\xd9\x1e\xb8\xf6\x0a\xf6\x5a\x57\xc5\x8a\xfc\x7b\x08\xe0\xcd\x27\xf3\xe1\xfe\x8f\xd8\x7c\xfa\x21\xe5\x2d\x05\xbc\x54\xcc\xca\x57\xfa\x42\x9a\x54\x43\xf7\xb2\x53\xab\xa7\xaf\x74\x92\x7a\x2f\x72\x93\x57\x57\xe5\x9c\xb3\x2b\x4a\x52\xf7\x8c\xcf\x86\x6f\x43\x24\x80\x3c\xb8\x52\x93\xa0\x0a\x5b\x68\xe2\x57\x50\xe5\x7e\xba\xf7\x86\x81\xe4\x9f\xa4\x8a\xf4\x97\x7d\xe3\x55\x4e\x6e\x86\x97\xfa\x62\xf8\x54\xe5\x2a\x6d\xe8\x30\x03\x72\xe3\xbd\x98\xaf\x60\x38\x70\xa3\xfe\x4d\x1a\xcb\x17\x32\x89\xe5\x0b\x9d\xa2\x15\x80\x6e\xf4\x83\x4e\xb5\xda\x66\x37\xf6\x51\x7f\xa1\x50\x01\xb5\xe5\x57\x69\x79\xae\x19\xfc\x46\x20\x79\xd3\x92\xa8\x73\x83\x5a\xc4\x0d\xfc\xe9\x14\x25\x97\xbf\x51\xff\x3a\x0d\x3c\x2b\xde\x28\x89\x89\x4a\x29\x54\x5f\x0a\xd7\x0f\xab\x7a\x7c\x63\x1f\x6b\x5f\x3e\xa8\x32\xfe\xab\xce\x61\x15\x0c\x6f\xec\x63\x30\x1b\x76\x1c\xfe\xeb\x3e\xe8\x2e\xcb\x61\xe3\xcb\xfd\x53\x95\x9f\x01\xaa\x00\x90\xfe\x46\xc2\xca\x57\xc1\x97\x3a\x84\x87\x1b\xef\x0d\xa9\xec\xea\x9a\x3d\xd9\x61\xcb\xf8\x6c\x68\xf0\x27\xf2\x06\x9f\x0d\x2f\x17\x54\x05\x1d\x28\x38\xa9\x86\x39\x50\xb6\xaf\x69\x39\x7f\x4d\xe7\x05\x4f\x05\x00\xa1\x4b\x01\x6e\xf1\x17\xa4\x1a\xea\x27\xfc\x66\x98\x66\x2c\x2d\x49\xa5\xfe\x01\xfa\xcc\x57\xf4\x0d\xd4\x22\x3b\x28\xdf\x16\xe0\xa1\x5c\x01\x32\xd3\x05\x1b\x67\xa3\x6a\x24\xed\xbf\xea\x2e\x4b\x2a\x4c\x6e\xdb\x31\x3d\x1f\xcd\x3b\xa7\x92\xf7\x06\x90\x72\xcc\x0d\x43\xdd\x38\x97\x2d\x5f\x48\x6b\x7e\x80\xe9\x22\x25\x25\xfc\xa9\xcb\x4a\x0d\x4d\x3d\xff\xc0\xc4\x4a\xdf\x3d\x2a\xd9\x4b\x90\x0d\x5d\x53\xf1\x31\x15\x2b\x58\x04\xf5\xa8\xae\x36\xd5\x9a\x82\xca\xe7\xf0\xaa\x1e\xf0\xd9\xf0\xcd\xe9\x8b\x8b\xcf\x9f\x4e\xcf\x49\x3c\xc2\xe6\x6a\x41\xf1\x03\x2b\x4f\x73\xb9\xb4\x8b\x49\x36\xb4\xcf\x3b\x9c\xd9\xfc\x30\x30\x98\x70\xc2\x86\xf0\x8f\xcf\x86\x45\x4e\xaa\x61\x21\x0f\x44\xba\x00\xdf\x9f\xf2\x06\x92\xcb\xe5\xde\xe4\xf6\x04\xb7\xa4\xde\xe7\x30\x01\xba\x9c\x2f\x4e\x6f\x25\x04\xab\xdc\x33\x3e\x93\xa7\xd1\xe4\x92\xbb\xc0\x7f\xc5\x80\x24\x15\x39\x25\x95\x7e\x80\x14\x45\x6d\x56\xe6\x09\xd2\x5e\x66\x69\x7e\x03\x69\xf0\x04\x69\x1f\x95\xb3\x71\x48\xd5\xcf\xf8\x6c\x98\x17\x82\x2d\xef\xcd\xa6\x78\xb5\x4a\xf3\x6b\x59\x7f\x5b\xb2\x1c\xfd\x2d\xe5\x9c\x2d\xe8\xab\x55\xca\x72\xd9\xbf\x30\x01\x9f\x29\x00\x16\x96\x93\xf9\xda\x92\xf1\x99\x04\x4d\xcd\xbc\xcd\x44\x79\x0c\xe0\x49\xa7\x33\xc8\x57\x4f\xc2\x67\x43\x6b\xbc\xf5\x10\x6e\xf6\x49\x6f\x84\x57\x69\x69\x5e\x5f\xcc\xe7\xb4\x2c\x0b\x5e\x4e\x7a\xa3\x1d\xdc\x8f\x7e\x66\x52\xd5\x12\xe0\xde\x15\xf3\xd5\xdf\xa8\xfc\x66\x1e\xe5\xdd\x9e\x7b\xe9\xee\xc5\x6e\x00\x98\x95\x1f\x20\x60\x8b\xdb\x04\x7e\x22\xec\x30\xf9\x0e\x0e\x4f\xab\xa1\x7d\xc6\x67\xc3\x25\xcb\x59\xb9\xb2\x33\xed\xbf\x9a\x0e\xe9\x93\x60\x9f\x5d\x97\xf4\x17\xef\xcd\x94\x31\xf9\x61\x4f\x40\x37\x24\x8e\x5d\x79\x2f\xae\x16\x57\x03\x4c\x12\x04\xbd\x27\xa5\xf6\xdc\xf1\x4e\x9d\xdf\x8c\x5d\xf1\x94\xab\x15\xb1\xcf\xea\x2c\x07\xab\x15\xbc\xab\x33\x1b\x7c\x2f\x6b\xdf\xe9\x97\x4d\x6a\x37\x82\xca\x52\x4f\x52\x87\xd0\x78\x4b\x53\x87\xd0\xbc\xd9\x35\xf0\x3e\x87\x09\xb2\xb4\x84\xb1\xca\xe3\x96\x81\xb8\xea\x4d\x6e\x75\x57\xae\x70\x25\x80\x02\x27\x95\xfa\xc7\x67\xc3\x77\xfa\x1d\xfe\xf7\x03\xda\x22\xd7\x64\x2a\x80\xd6\x0b\x40\xcb\x55\x12\x50\x15\x17\x80\x91\xeb\x84\xaf\x26\x54\x04\x2d\x15\xc1\x0c\x95\xce\x87\xac\xbc\x50\x29\x50\xe7\x1c\xd4\x3b\x74\x42\xbd\xce\xb3\xe1\xe5\x4b\x87\x8f\x2c\x2d\x7a\xf7\x76\x78\xf6\xe1\xbb\xef\x4e\x3f\x45\x51\x7c\x36\x3c\x2b\x40\x6d\x6b\x65\xbe\xca\x62\x2f\xc8\xe5\xf0\x05\x3e\x1b\x6a\xd2\xec\x21\x2b\xe6\x93\xf5\x30\x2b\xe6\xf8\x6e\xb2\x1e\xde\xe1\x45\x5a\xae\x28\x67\xbf\xd2\xc9\x7a\x68\x9f\xf1\x82\xce\xd3\x35\xcd\x74\xb2\x7d\xc1\x5e\xaa\x4b\x83\x0b\x63\x79\x2f\xd3\xf4\x23\xae\xf2\x05\xe5\xe5\xbc\xe0\x32\xa7\x7b\xc1\xf3\x74\xc3\x44\x6a\x6b\x30\x2f\xf2\x48\xab\x59\x23\x97\xfa\x41\x8e\xd8\x20\xd6\x1f\x79\xf1\xe5\x5e\x2d\xdc\xe5\xb0\x99\x08\x67\xd2\xa0\xe6\x41\xde\x96\x54\xac\xae\xfd\x94\x53\x72\x69\x9e\x20\x6d\x73\x0f\x09\x1b\x05\x8f\x4f\x7f\xa9\xd2\x8c\x5c\x9a\x27\x7d\x63\xbe\xe1\xe9\x9a\xde\x15\xfc\x46\xf1\x47\x2f\x87\x8d\x34\xc0\x75\x7f\x0e\xa2\x41\xa0\x87\x9d\x4d\x1d\x6a\x8e\x0f\xb9\xd5\x09\xee\x8b\xe3\x1a\x91\x85\xfb\xa8\xc8\x9b\xcb\xa1\x21\x6d\x5e\x41\x8f\x81\xf3\x77\xe9\xbd\x00\x95\x66\xf9\x89\x97\xde\x8b\xa9\x03\x66\xc0\x54\x04\x2f\x76\xce\xcd\x27\xef\x4d\x96\x9a\x7b\x54\x80\x2c\xe8\xbf\x43\x4f\x38\xb5\x6b\xe6\x5e\xf0\xd9\x50\x49\x05\x4c\xcf\xbd\x37\x28\xb5\xb9\xb7\xbd\x57\x8f\xf2\x50\x56\xc0\xcc\x0c\x86\xd0\x48\x73\xf9\x4c\xd5\xfe\x2b\x3e\x1b\x2a\xcf\x7c\xaa\x9f\xe7\x8a\xeb\x44\x2e\xdb\x52\xe5\x6c\xc9\xdb\x9b\x2e\xe4\x54\xa9\x27\x7c\x36\xd4\x9e\x23\x83\x1d\xd4\x48\x83\x59\x93\xab\xa8\xbb\xe9\x5e\x24\x2a\x03\xdc\x61\x72\xa9\x1f\x60\x27\x99\xce\xea\xa7\xd6\x9d\x5e\xe4\x67\x45\xba\x20\xaf\xf4\x83\x42\x97\xe5\xd3\xf7\x45\x71\x53\x92\x57\xc1\xab\x26\x4a\xed\x5e\x71\x94\x9e\x4b\x56\xdd\xdf\x78\xdf\xce\xed\xc6\x73\x69\x97\xc1\x50\x2f\x83\x41\x7e\x3a\xff\xc7\x47\x79\xda\xce\xff\xf1\x11\x96\xd4\x70\x7a\x2e\xdd\xb3\xac\x41\x39\x5c\x21\xf7\x43\xf5\xa0\xf0\xe8\x0d\xcd\x17\x34\x17\x7f\xa3\xf7\xb0\x43\x05\xb9\x1e\x36\x13\xf1\x9b\x21\x05\x44\xe8\x4a\xfd\xe3\x37\x12\x87\x39\xd5\x49\xe6\x11\x52\x73\x0a\x29\x39\x55\x79\xd4\x67\xfc\x66\x78\x55\x14\x19\xb9\x82\x3f\xfc\x46\xc5\x34\x22\x57\xea\x5f\xd6\x0e\x47\xf8\x4a\xfd\xe3\x37\xc3\x6b\x59\xf0\x5a\xc0\x13\x85\x47\x59\x5f\x26\x53\x33\x01\x4f\x14\x1e\x65\x6a\x91\xd3\x1f\x52\xd9\x0f\xf5\x80\xdf\x0c\x39\x4d\x17\x65\x3d\xe1\x43\x9e\xc9\x4c\xe6\x11\xbf\xb1\x84\x3a\xcb\xaf\x5f\x00\x5d\x70\xd5\x48\x92\x24\x43\xbe\x20\x57\xf2\x57\x36\xc5\x65\xad\x1c\xbf\x19\x96\xd5\x9a\x5c\xc9\x5f\x39\x18\x96\xcb\xa1\xb0\x1c\x06\xf6\x05\x86\xf5\x05\x9e\x37\xf0\xbc\x91\xf9\xe5\x06\xbf\x82\x3f\xf9\x46\xc5\x6b\xb6\x5c\xca\x04\xf5\xa4\x72\xbf\xbc\x57\xf9\x5f\xca\xde\x2d\x59\x26\xe9\xc1\x2b\xfd\x60\x53\x20\x93\x79\xc4\x6f\x86\x55\xce\x7e\x21\x57\xf0\xa7\xdf\x20\x87\x7a\x50\x29\x45\xae\x12\x0a\xd9\x43\x60\xc7\x96\x72\x53\x5f\xb9\x67\xfc\x66\x38\x97\x9b\x11\x52\xf5\xd3\xfe\xbb\x51\x05\xa9\x3f\xef\x83\x60\xcc\x93\x7b\x29\x7e\xda\x1a\x88\x07\x75\x87\x95\x70\x5b\xae\x01\x20\xeb\x94\x43\x97\xee\xcb\x0f\x1f\x2e\x4e\x5f\xb7\xd4\xdb\xe4\xda\x55\x3e\x4f\xf3\x9c\xa6\x7c\xbe\x7a\xcd\x4a\x20\x33\xa0\x4d\xc0\x79\xf6\x64\x80\x3b\xda\x79\xba\xbe\x73\xcf\xf8\x4e\x3b\x0b\x1e\xae\x94\xcf\xe0\x3b\xfd\x80\xcf\x8c\x17\x61\x93\x43\x56\xb1\xa2\xf3\x9b\xab\xe2\x8b\xac\x41\x3f\x4a\xd0\x46\xbf\x88\x37\xe0\x35\xfa\xce\x3d\xeb\xf4\x17\x9c\xa6\x3a\x59\x3e\xe2\x33\x88\x73\xe0\x77\x25\x78\x37\xc4\x9f\x79\x7f\x97\xe6\xe9\x35\xf4\xa1\x25\x55\x66\x9e\xd7\xd2\x5e\xa5\x9b\xf4\x8a\x65\x0c\x70\xbc\x3b\x79\x8b\xdb\x57\x5d\xb7\xf1\x1b\x1e\x54\x5d\x4b\x94\x59\xd7\x61\x92\xae\x58\xd7\x6b\x3e\x7a\xa9\x72\xc2\xe0\xfe\xb9\x4a\x79\x49\x1e\x84\x96\x79\x4e\xee\x86\xe6\x11\x7f\x16\x2c\x2b\x27\x0f\xb4\x9c\xa7\x1b\xcf\x9f\xf2\xe4\x6e\x58\x4f\xda\xc9\x5b\xf9\xfb\x8b\x77\x67\x2f\xf7\x55\xb6\xc3\x7b\x98\xb6\x1a\x99\x8a\xa2\x58\x3d\x78\x02\xf8\x95\x58\x67\xe7\xe9\x92\x36\x79\xe0\xf1\x08\xdf\xd9\xcf\x48\x07\x46\x44\x16\x33\x73\x25\x5d\x2e\xf7\x91\x95\xb2\xa7\xfa\xb3\x7b\xd9\xbf\xeb\x2f\x4e\xdf\x7d\x3c\x7b\x71\x01\xec\x69\xb9\xb5\xef\x24\x06\x6b\x84\xc4\xea\x04\xdd\x29\x7c\xd3\x24\x1d\x3c\x1e\xd0\xd1\x7f\x9c\x7e\x3a\x7f\xfb\xe1\x3d\x39\xf5\xb0\xcf\xff\xfd\xf7\xcf\xa7\x9f\x7e\xbc\x7c\xfb\xfe\xe2\xf4\xbb\x4f\x2f\x2e\xde\x7e\x78\x1f\x45\xbd\x2f\xc3\x9f\xff\x5e\x51\x7e\x6f\xce\xc6\x01\x76\xfa\x1f\xf6\x32\x2f\x4c\x25\xbb\xba\x20\x3c\xe8\xd9\x48\xf5\x8c\xd1\x3b\x58\x79\xf2\xc0\xca\x73\xb6\xde\x64\xf4\x55\xc6\xe6\x37\x93\x2f\xc3\xe0\x5d\x9e\x72\xed\x25\x5b\x16\x99\x7c\x19\x86\x09\xf2\xbb\xfc\xd7\x49\xea\xbb\x97\x60\xbe\xab\xb8\x86\xee\xb3\x7a\x37\x5f\x95\x43\xef\x4f\x74\x2e\xbc\x2c\x5e\x62\x50\x0b\xcb\xaf\xdd\xa7\x5a\x8d\xc1\x37\x59\xea\x53\x51\xc0\x57\x5d\xaf\x7d\x95\xdf\x20\x74\xb7\xf7\xd1\xbd\x63\x56\x9e\xeb\x60\x98\xc0\x4b\x7d\x63\xc2\xa7\x4f\xe4\x5e\x6a\xff\xb4\xd3\xc0\xc5\xe0\x51\x5f\xfc\x37\x1f\xd2\x29\xd1\x0a\xf9\x52\x4f\x31\x38\xd6\x6b\x56\x6e\x34\x3d\xfd\xa5\x9e\x22\x41\x55\xa1\x45\x19\xe7\xf6\x51\xe2\x9e\x95\x28\xbc\x2f\xfe\x2b\xc0\x80\x72\xe5\x7d\xf5\x5f\xe5\x57\x56\x8a\x82\xdf\xfb\x19\xc2\x14\x89\xce\x14\x39\xf5\x32\xf8\xaf\x40\x0b\x18\x34\xea\x4d\xc1\xc9\x79\xf8\xee\x89\x34\x1c\xba\xf5\x26\x9d\xcb\x16\xc8\xf9\xfe\x6f\xad\xe5\x5a\x0b\x48\xe4\xab\xa8\x04\xe5\xaf\xcf\xcf\xc8\xb9\x7b\xb6\xe9\x36\xd1\xa4\x98\x04\x1c\x8f\x70\x88\x2b\xa2\x58\x89\xde\x7c\xb1\x4f\x1f\xbf\xf2\x09\xc4\xd7\xa9\x48\x5f\x2c\xd2\x8d\xac\xf8\x83\xff\xe6\x0b\x3f\x40\x86\xe0\x72\xb5\xa6\x2b\x55\xfa\x55\x2a\x1b\x55\x0a\x45\x06\x90\x1e\xc9\x2b\x84\x65\x94\xf7\x51\x14\x41\x2e\xd3\xfe\x81\x9c\x6d\xd5\x29\xf2\x59\x47\x34\xff\x95\xec\xa9\x4a\xe7\xea\xc8\x1d\x5c\x0a\xf2\x2b\xfc\x61\xf5\x36\x34\x83\xf8\x75\xe8\x86\x09\x1f\xfe\xfe\x39\x67\xc2\x7d\xf5\x5f\x15\xf3\xa3\xda\xbc\x29\xb8\xa6\xcf\xc9\xaf\xf5\x94\xdd\xde\xb9\xd7\xea\xdd\xdf\x93\x33\x4f\x22\xfb\x3d\xce\x87\x6f\xcf\x2f\xdf\x7f\x78\x7d\x3a\xcd\x87\x4a\x73\x62\xa8\x35\x2f\xc8\xd9\xc4\x49\x5e\x75\x9a\x92\xbc\x92\xb6\x74\x72\xe6\xab\x71\x58\x51\xfe\xef\x53\x8c\x77\x09\xfd\xa7\xc3\xf1\xf1\x70\xd4\x57\x95\x07\x0a\x1e\xfb\xaa\x56\x1a\x33\x0d\xf9\xb2\x2a\x16\x45\x2d\x5a\x3a\x7a\xe0\x5a\xd1\xa4\x23\xa6\xb1\x7d\x21\xe1\x37\x4c\xf5\x2c\xe9\x74\x4c\xcd\xfc\x11\x81\x26\x5e\x31\x30\x0f\xb3\x99\xf5\x9b\xcb\xaa\x86\xc3\xe5\x71\x39\xe2\x74\x5e\x5c\xe7\xec\xd7\x30\xc2\xc1\x6f\xb7\x23\x08\x74\xbe\xfc\x40\x39\xd6\xd0\x46\xc5\x24\x74\x0a\x57\x97\x97\x26\x96\x8b\x0e\xe5\x27\x93\x30\xdd\x29\x0d\xa1\xba\xde\x95\xd3\x1c\xd7\x6e\xc9\xd6\x1a\xa2\x6a\x8f\xda\xb2\x8e\x6b\x88\x94\x0b\x7e\xce\x3d\x0d\xf7\xfd\xea\xa4\xa6\x8c\x0e\x1c\xcf\x21\x7e\xf3\x8b\xc5\x02\x00\x49\x14\xc5\x94\x84\x49\xb1\xdf\xb0\xf1\x29\x4c\x8d\x2f\x29\x93\x9e\x2e\x16\x9e\x4e\x2e\x45\x5a\x7b\x0b\x4c\x38\x9d\xdd\x66\x8b\x47\x4f\x70\x07\xb5\x4a\x6f\x95\x17\x4f\x63\x2a\xc1\xf2\xae\x58\x51\xeb\x21\xaa\xbb\x49\xcb\x52\x39\xfd\xfc\xa7\x28\xfe\xd9\xd7\x46\x53\x5e\xe3\x70\xe9\xf9\x3d\xc0\xb5\x29\x42\xbb\x9d\x36\xb6\x68\x2a\x7b\x17\x10\x9c\x9b\x5b\x33\x65\x59\x17\xa7\xb9\x4b\x51\xa3\x26\xd4\x8b\x4b\x51\xd4\xac\x8f\x6d\xad\x0c\xa7\xc6\xe1\x36\x1d\x80\x87\xc1\x5e\x8a\xbc\x38\x9c\x79\xac\x02\x7b\x77\xd2\xb8\xd0\x8f\xbe\x9e\x56\xda\xf4\xf0\x3f\x6a\xba\xd0\x1f\xa0\x7c\x40\x68\xc2\x66\xbe\x7a\xb2\xb6\x1d\x7c\x90\x49\x13\x41\x04\x48\x45\x05\x84\x6c\x5d\x69\xf9\x2d\xdf\x75\xa8\x51\xe5\xdd\xb1\x03\x16\x2d\xc1\xd4\x24\x74\x46\xc4\x0e\xd7\xf2\xc3\x94\xef\x31\xfd\x55\xf1\xa5\x99\x8b\xb6\xaf\xa7\x54\xd6\x94\x76\xd4\xec\xc8\x19\x4c\x71\x8e\x3a\x79\x14\xe5\x06\xbc\x9d\x4a\x22\x52\x22\x8e\xf5\x94\x58\xe0\x12\x61\x1e\x97\xc8\x5b\x84\x32\x88\xe1\x50\x6e\x32\x26\xe2\xfe\x93\xbe\x32\xf2\xcf\x10\x08\x44\x21\x61\xa7\x7c\x4a\x3e\xf9\xe3\xf6\xa7\x27\x4f\xae\x3b\x7b\x82\x40\xa8\x69\x7c\xfe\x74\xbb\x3d\x52\x4e\x4b\x4d\x4c\xfa\xfe\x1f\xfb\x68\x4a\x27\x0b\x3a\x2f\x16\xf4\xf3\xa7\xb7\x16\xe5\x89\x29\x1a\x72\xba\xc9\xd2\x39\x8d\x2b\x4c\xf3\xfa\x77\xd5\xf0\x9c\x3c\xf9\x63\x3c\x9d\x1c\xc7\xd3\xc9\xb3\xed\x9f\xb7\x2f\xb7\xaf\xd0\xf6\x69\x3c\x9d\xbc\xdc\xbe\xde\xbe\x40\xdb\x67\x23\xe4\xf7\x69\xe9\xf7\xa9\x51\xa3\xdf\xe2\x1c\x37\x7b\xa4\x5a\x5c\x91\x27\xf1\x4f\x4f\xb6\x3f\x0d\xb7\x3f\xfd\xcf\xed\x4f\x83\xed\x4f\xd3\xed\x4f\xdb\xed\x4f\xf1\xf6\x27\xb4\xfd\x29\xd9\xfe\x34\xdb\xfe\xf4\xb0\xfd\x69\xb7\xfd\xe9\x27\xf4\xe4\x1a\x2f\x48\x10\xbb\x0b\x6f\x0c\x60\xf3\xc8\x9b\xb4\xfc\x70\x67\xc5\x42\xae\xb3\xeb\x86\xa2\xa6\x75\x04\x47\xb7\x5b\x63\x4b\x78\xe0\xe8\xcb\x93\x2d\x8f\xbe\x2a\xdd\x4d\x4b\x38\xf8\x25\x9d\x17\xf9\xc2\xc1\x03\x79\xf0\x0d\xc2\xf4\xcf\xa1\x72\x14\xdc\xdb\x68\x8f\xd0\x58\xa0\x43\x0d\xf0\xe2\x96\x2d\x68\x77\x93\xf2\x74\xdd\xfd\x27\x98\x2c\xfc\xb3\x59\xa1\x76\x15\x98\x88\x19\xce\x49\xd3\xca\x6a\xca\x27\xfd\xfe\x80\x5b\x8f\xab\x8f\xc3\x34\xd3\x6e\x1a\xb6\x3c\x74\x0e\x87\xf3\x9d\x72\xa8\x92\xcc\x3a\xb7\xc9\x68\xb6\x57\x13\x5d\x80\x26\x3a\xe8\x81\xe2\x16\xab\x6a\xad\xe3\x9f\x0f\xe7\xab\x94\xbf\x2a\x16\xf4\x85\x88\x19\xea\x48\x9c\x61\x53\x89\x18\xcc\x7e\x7b\x63\x6b\x9b\xce\x77\xf8\x36\x19\xd7\x5b\xb3\x5e\x06\x64\x91\x67\xff\x81\x7b\x23\xe5\x87\xfd\x36\x39\x3e\x98\xf5\x68\x0c\xd5\xab\xac\xcf\xf6\x65\x55\xa0\xf7\x5e\x8e\xf4\x3e\x1c\xa9\x77\xfa\x60\x80\x76\x6f\xaf\x70\xff\xa7\x9f\xfe\x30\xee\xa3\x1d\xbe\x0f\xba\x6b\x55\xcb\xe2\xe4\x3f\x9f\xcc\x06\xa8\x2f\x33\x1c\xb7\x66\x18\xea\xaf\xcf\xda\xbe\xf6\x55\xa7\xae\x65\xa7\xae\x0f\x77\x6a\x87\xaf\x9b\x33\xa6\xd6\x66\x1d\x0b\xac\x73\xd9\x75\xbd\x18\x9e\xbe\x7f\xf5\xe1\xf5\xe9\xe5\x8b\xf7\xaf\x2f\x5f\x9f\xc2\xe3\xc7\x17\x17\xdf\x5f\x9e\x9f\x7e\xf7\xee\xf4\xfd\xc5\xf9\x74\x19\x73\x34\xe1\xb2\xda\x7d\xb3\xeb\xd7\x2b\xf3\x1d\x1a\xc2\x55\xcd\x87\xf0\xc3\x0e\xe1\xcb\x43\x7e\x85\xef\x2c\x7e\xe1\x59\xd0\x3f\xfb\x0f\xb8\xab\xbd\x4d\x34\x92\x48\xbb\x77\x8f\x8c\x11\xf2\x9c\xa1\x09\x0f\xde\x62\x46\xac\x57\x07\xe3\x29\xa9\x69\x0c\xa8\x6e\x45\x5c\x41\x70\x70\x3c\x27\xa3\xce\xf8\x38\x8a\x4b\x72\xfc\xfc\x79\x3c\x27\xfd\x3e\x21\xa4\x9a\x3e\x9b\xfc\xe9\x2f\xf2\x21\xec\xc8\x74\x3c\x79\x76\xdc\x92\x7c\x3c\x19\x21\xd9\xcb\x8a\x54\x5a\xbd\x7d\x8c\x70\xcc\x08\xdb\x6e\x93\x19\x52\x37\x5d\x85\x70\x5c\x90\xc2\x4b\x19\xf5\x48\xfc\x2c\x2a\x11\x42\x78\xfc\x2c\x2a\xa3\x88\x27\xf3\xd9\x60\x80\xf5\xd5\xf8\x20\x0f\xfd\x64\x8e\x95\x6e\x7e\x16\x57\x68\x67\x4e\xcf\x43\x9e\xae\x69\x39\x61\xdb\xed\x25\x2e\x57\x45\x95\x81\x32\xc6\x82\x96\x93\x62\xbb\xbd\xf4\xae\xf1\xd3\x1a\x7a\x40\xa1\xe3\x3a\x40\xd1\x30\x57\x58\x1b\xd1\x41\x50\xbe\xb4\xfb\xbf\xd7\x06\x2f\xc2\x79\xa5\x65\x0b\x83\xf9\x41\x6d\xda\xcd\xa8\xae\x2d\x37\x6f\x5f\xc4\xb9\x2a\xc5\xa6\x62\xe2\x85\x12\x4e\x85\xa0\x3c\x27\xfd\xbe\x75\x62\x71\x4d\xbf\x98\xf5\x82\x24\x8d\x26\x94\x41\xa2\x9c\x0d\x93\xe2\xdd\xbd\xe7\xc1\x7e\x35\x63\x9a\xaa\x81\xf6\x60\xa0\x47\x10\x1f\x03\x12\x26\x6e\x02\xec\xed\x2a\x13\xbc\xb0\xff\x75\xb0\x97\x48\x48\x2c\x71\x1f\x8b\xf7\xe4\xcf\x19\x18\xfe\xd9\xe8\x41\xf9\xac\xa3\x49\xa3\x79\x2a\xe2\x42\x21\x84\xb1\x40\x1e\xb0\xfb\x12\x18\x7d\xc9\x01\xef\x33\x59\x86\xaf\xdb\x6d\xec\x4f\x8e\x04\xec\x9f\xe8\xf5\xe9\x97\x4d\xec\xcf\x21\x42\xfe\x14\xee\xb0\xdf\xc8\x35\x3d\x60\xcb\xe5\x16\xc7\x0b\xba\x0f\x86\xbd\x60\xb5\xeb\xe1\x7c\x27\xb9\xb3\xd7\xcd\x43\xcb\x23\xbd\x29\x12\x9e\xe4\x33\x30\xdd\x3a\x8d\x19\x86\x5b\xd0\x18\x3c\xec\x3c\xd7\xd4\x41\x09\x9d\xbd\x08\xb2\x17\xbb\x70\x04\x9b\x4a\xb4\x7b\x00\x81\x3e\xab\x0a\xc1\xa6\xc7\xab\x23\xef\x34\xfa\x67\xaf\x39\x98\xc5\x2f\x31\xc3\xcc\x58\x71\xaa\x4a\x31\x4b\x4c\xca\x8c\xe4\xda\x33\x56\x6d\x9a\xa6\xf5\x3d\x9d\x0f\xd9\x62\xa2\x31\x7d\x97\x8c\xea\xf9\xb4\xc5\xd7\x90\x2d\x74\x58\x62\xaf\x8a\xa4\x96\x80\x65\xb6\x19\xce\xc3\x59\x50\x52\xa5\x3d\xfe\x9e\xc2\x75\xec\x19\x9b\x93\x64\xd6\x31\x7b\xb7\x03\x6b\x2a\xea\x6b\x2a\x1e\x59\x53\x01\x6b\x7a\x2e\x17\x14\x49\xe2\x0c\x86\xc1\xd0\xbe\x05\x15\x32\x6f\xe1\xe7\x2d\xbc\xbd\x0f\x9d\x79\xd1\x24\x78\x42\x6b\xc6\x5f\x2a\xca\xef\x75\x4c\x44\xba\xdd\x3e\xec\xbc\x43\x7e\x63\xc7\xdd\xa1\xc4\x5d\xce\x4f\x7e\x1a\x3c\xb9\x5e\xe3\xfe\x1f\x8f\x47\x92\x16\xe3\xf7\x0f\x82\xb4\x22\xc7\xda\xcf\x91\xbc\x6a\x48\xbf\xbf\xb3\xf8\xc0\x0b\x6f\xa2\x95\x33\x12\x8d\x82\xd6\x93\x71\x90\xb3\x3d\x63\x23\x1f\x98\xd0\xd5\xb3\xc9\x44\x98\x90\x8b\x86\xd9\x27\x00\x75\x49\xed\x69\x9f\x90\x10\xe5\x43\x6d\x5a\x8a\x47\x58\xe2\x38\x23\x89\x42\x75\x20\x92\xab\xc0\x2d\x90\x99\x17\x85\xda\x10\x44\xec\x3a\x17\x07\x09\x2b\x2f\xda\x18\x09\xcb\x62\x46\xfa\xff\xd9\xc7\x05\x49\x46\x78\x84\xc1\xc1\xa6\x73\xdb\x69\x0d\x79\x31\xb8\xaf\xab\x48\x6f\x84\x33\x32\x92\xf7\xe8\xc9\xdc\xd1\x86\x73\xb9\xaf\x4c\x13\x4b\x42\x93\xf9\x0c\xaf\xc8\x5d\x5c\xe2\xa5\xa2\x8c\x0b\x84\x17\x64\xa5\xc6\x8c\x37\x64\x35\x0c\xee\xb1\x93\xec\xb9\x35\x5e\xcd\xcc\x16\x5d\x93\x32\xc9\x66\x9d\x67\x3d\x42\xd6\x70\x1d\xc0\x8d\xdb\x1b\xe3\x9c\xe4\x16\x61\x04\x24\x13\xb3\x01\xe9\x3f\xe9\xe3\x9c\xdc\x26\x2a\xeb\x2c\x5e\xe3\x1c\xd2\xef\x5d\x0a\x42\xbb\x34\x99\xcf\xc8\x83\xa1\x4b\x97\xe6\xea\xc1\xea\x82\x5d\xd4\x6e\xd7\xcd\x6e\x57\x81\x93\xe3\xf6\xf6\x10\xce\xdd\xdd\x95\xe2\xdc\xde\x75\x6c\xd0\xff\x43\x1f\xe7\xfa\x0e\x2b\xf0\x21\x6b\xb2\x28\x12\xc3\xb4\x54\x6e\xcc\x86\xa9\x24\x36\x8d\x0b\x14\xe8\x13\x98\xbe\x97\xf4\x1a\xdc\x3f\x4e\x4a\x43\x52\x97\x93\x74\x87\x76\xf8\x22\xa0\x95\xd4\x97\x7a\xfc\x32\x1f\x7e\x40\x8d\xda\x8d\x74\x8b\xa1\xf5\xc5\x8a\x72\xda\x65\x65\x37\x2f\xba\x40\x83\x77\x65\x89\x45\xb7\x3f\xa0\xbe\x61\xbc\xe7\xd4\xd5\xb6\x6a\xb7\x89\x01\x38\xb5\x0f\x01\xe4\xb1\x1f\xe1\x2a\x4d\xf2\x19\x61\x1e\x9d\x10\x0e\xaa\x54\x2c\xe7\x26\x9a\xdc\xeb\x05\x63\x0a\xcb\x19\x22\xeb\xc0\x9d\xa8\xcb\x49\xba\xab\x0f\x13\xd2\x12\xfc\xe5\xab\x26\x84\x11\x3e\x34\x2b\x64\x02\x82\x98\x51\x17\x66\xd4\x29\x61\x49\xa1\x36\x73\x6a\x36\x73\xae\x77\xed\x80\x5c\x27\xa9\xde\xa4\x29\x76\x78\x44\xff\x49\xbf\x47\x34\x85\x65\x10\xe3\x5c\x16\x19\xe4\x08\xc3\xc6\xf1\x80\xa8\xaa\x4f\xdf\x92\x6a\xf0\x20\xcf\x52\x12\xbd\x38\xc8\x8b\x90\xbc\x76\xda\xe6\xcb\x2b\xd2\xb2\x89\x92\x19\xe6\x06\xc3\xbf\xa1\xf7\x65\x2c\xa9\x0f\x50\x08\x88\x7d\x1c\x7d\x1f\x16\x21\x57\x1a\x43\xf8\xc5\x99\xc3\x43\x6c\xf8\x9f\x16\xa6\x03\x43\xea\x3e\x2b\xdc\x7d\x56\x92\xd1\x49\xf9\xbc\x30\xb5\x97\xa6\xf6\x4a\x1e\xba\x64\x46\xfa\x83\x96\x7a\x8a\xa4\x9c\xa1\x8e\x30\x88\xb9\xb2\x0e\x4f\x07\xa4\xbf\x27\x3b\xd2\xe1\xba\xe2\x14\xd9\x90\xa7\x3e\x4f\x71\xda\xef\x4f\xfa\xd3\xfe\x40\x68\x56\x4f\xd4\xaf\x9d\x45\x70\xb4\xbb\x6f\x2e\xbd\x50\x2e\x86\x98\x89\xfa\x08\x73\xf2\xb0\xc3\x07\xae\xeb\x24\x9f\x99\xec\xa4\x8f\x70\x41\x6e\x62\x96\x8c\x66\x08\xa7\xc4\x4c\x07\x2e\x25\x78\x34\xfe\x5f\x3b\x12\xdf\x35\x3b\x71\x5a\x91\xbe\xe0\x15\xed\x4f\xe2\xf4\xdb\xe3\x28\xea\x27\x33\x49\xf9\x14\x9a\x7e\x49\x8f\x8e\xe5\xee\x2a\xc1\x9d\x7b\x52\xd8\xf4\x11\x96\x5f\x66\xdb\x6d\xcc\x93\x62\x46\x92\x19\x42\xb8\x02\xff\xcb\x53\xd9\xfc\x78\x86\x26\xfd\x3e\xc2\xe5\x54\x7e\x36\xf3\x3b\x81\xbc\xd5\x9e\x23\x6d\xb9\xe0\x6d\x71\x10\x35\x96\x64\xef\xa6\x99\x89\xbf\xd3\x1b\xcb\x9d\xe3\x58\x63\xff\xa3\x8f\x4e\x00\xd1\x2f\x80\x79\x4c\x0d\xb5\x38\xc2\x05\x32\x61\x0a\xbd\xec\xd3\xbe\xf6\x76\x2b\xcf\x9f\xd9\x31\xb6\x50\x3a\x18\x63\x7b\xd1\x75\x82\xda\x52\xe4\x7c\x20\x84\x6b\x2a\x37\x92\x3a\xa1\x34\x38\xa1\x14\x4e\x28\x45\xda\x47\x30\xed\x3c\x4e\x98\x53\x22\x8f\xd2\x24\xa6\x0e\x9d\x89\x29\xc2\x99\xf7\x9a\xe9\x51\xcd\x2d\x5d\xd2\x99\x7f\x3b\x8e\xa2\xfe\x93\x3e\xf1\x7a\x30\x3f\x1a\xa3\xfa\x84\xc8\x34\x9c\x91\xcc\xa5\x64\xd6\x8f\x81\xa4\xa1\x7b\x23\x77\x78\x97\x64\x74\xb2\xb4\xd7\x3a\xdc\x4a\x1f\x62\x8e\xa9\x4f\x00\x2f\x11\x42\x66\x83\x2e\x07\x03\x74\x62\x0a\xaf\x24\x80\x58\x90\xd1\xc9\xc2\x1d\xff\x05\xf8\xf8\x5e\xcc\x2c\xc8\x8f\xa2\x95\x0e\x36\x91\x2c\x66\xa8\xc3\xdb\x19\x20\x00\x53\xda\x60\x37\x55\x97\xea\x76\x6b\x90\x95\x9c\x70\x15\x2b\x87\x27\x63\x09\x5d\x78\x72\x0c\x9e\x90\xeb\xf9\x4a\x92\xca\x7c\x15\x49\x65\xbe\x8c\xa4\xc9\xb1\xf5\x74\x97\x59\x9a\xe4\x08\xbc\xa7\x16\xc0\x5a\xcc\x7b\x84\x94\xe6\x4b\x79\x04\x74\x08\xeb\x11\x52\x99\xb4\xea\xc8\x5e\x5b\x90\x3e\x65\x47\xd5\x04\x4a\x4d\xcb\xa3\x7c\x32\xda\xa1\x5d\xbc\x52\xcb\xb6\x21\xab\x64\x64\x7d\x65\x6f\xa2\x68\xe3\x4d\x48\xcc\xe4\xbb\x46\x1e\xa2\x08\x38\x48\x7f\x90\xcb\x6a\x13\xf5\x69\x3c\xfa\x93\x5c\xdc\x4c\x23\x1f\x7b\xc8\x25\xe2\x50\x01\xa0\x62\x81\x58\x54\x3e\x38\x7a\x6c\xbb\x0d\xc2\x32\xe8\x6b\x0e\x90\x4a\x08\xbc\xc0\x9c\xc9\x7c\xdf\xc4\x10\x14\x9a\xc0\x65\x12\xd4\x8c\xb1\x72\x50\xf5\x22\xe6\xa8\x63\x71\x7a\xc3\x70\xf1\xe2\x75\x8e\x4e\x2a\xc7\x87\xa9\x0c\x1c\xcb\x48\x9e\x54\x33\x3c\x27\x99\x46\x05\x97\x72\x5f\xfa\x48\x17\x5e\x91\x2b\xbc\xd0\x61\x28\xe6\x3d\x42\x2e\xa3\x68\x29\xff\xec\x15\xb0\x21\xa3\x93\xcd\xf3\xb9\xa9\x7b\x23\xeb\x5e\x90\xde\x48\xfb\x94\x9e\x27\x9b\x19\xbe\x85\xd0\x9a\x49\x3a\x18\xcc\x3a\x2b\x42\xc8\x55\x14\xc5\x2b\xf2\xb0\x43\xf8\xd1\xd3\x18\x45\xcb\x64\x33\x9b\xae\x92\xf5\x8c\xdc\x46\x51\x0b\x81\x71\x8b\x26\xea\xeb\xae\x4c\x2a\x0f\x9d\xcc\x2c\x3a\x09\xbc\xd7\x72\xb2\xc2\xac\xd4\xc1\xf3\x27\x0b\x7b\x93\x94\xbb\x78\x83\x33\x0c\xe4\xbc\x04\x8d\x46\xcf\xa5\x3f\x1a\x3e\x1d\x3e\xeb\x3f\xde\x43\x09\xa4\x2f\x86\xef\x0b\xbe\x86\x95\xe2\xe4\x21\x37\xcf\xe7\x0a\x0f\x99\x64\xd8\x26\x7d\x4c\xc5\x6a\x52\x6a\x29\x81\x7c\x31\x79\x96\x21\x5c\x5e\xa7\x9b\x56\x6c\x09\x44\x2a\x1d\x1a\x17\x71\xbf\x8f\x79\x4d\xbc\xe5\x42\x87\x77\xa9\x75\xfb\x6e\x6f\xb8\x82\x70\x2d\xcb\xc1\x65\x80\x37\x14\xf2\x16\x91\x3b\xa4\x6c\xd9\x21\xa5\xda\x21\x42\x6f\x7a\xd4\x49\xe3\x39\xce\x70\x91\x64\x33\xb5\x25\x97\x84\x3b\xd1\x4e\x36\xeb\x2c\xa7\x34\x9e\xe3\x25\xb4\x3d\xc9\x15\x7b\x9e\xe1\x39\xda\xed\x62\x89\xb1\x04\xf2\x55\x31\x55\xbe\x0c\x31\xd5\x14\xba\xf2\x78\xa6\x82\x3c\xe9\x40\x40\xef\xc8\x85\x27\x7a\x7d\xe7\x89\x70\xf9\xe5\xcf\x65\xe8\xb3\xa0\xc5\x0a\x3b\xf0\x6e\xd2\xe7\xe5\xed\x46\xfe\xd5\x25\xc0\x6d\x06\xd9\x0d\xf1\x6f\x56\x5c\xbf\xb8\x2a\xb8\x20\x77\x98\x0e\xdf\x6a\x23\x74\x40\x88\xc1\x19\x36\x1d\x5e\xf0\x34\x2f\x99\xac\x45\x19\x62\xfa\x29\x8a\x30\xa4\x43\xa5\x32\xf5\xf1\xc5\xa7\x17\xef\xce\x2f\xcf\x7f\x7c\xf7\xf2\xc3\x19\xa1\xc3\xfa\xfb\xf9\xc5\x8b\x8b\x53\xf7\x6a\x1a\x73\xd5\x91\x56\x69\x74\xb1\xc7\xe5\x8c\xdd\x3e\xd0\x2f\xb5\x26\x30\xef\x46\x36\x07\x11\x9b\xfb\xae\x7a\x18\x27\x5d\x68\x2e\xe1\x9a\x96\x65\x7a\x4d\xc1\xd9\x46\x4b\x1e\x53\xe9\x46\x54\x5c\x39\x7c\xbe\xe0\xe9\x9c\x4e\xf7\xa4\x87\x2b\xae\x9c\xa4\x71\xf5\xdf\xe2\x0b\xa7\xe6\x53\x45\xd5\x69\xbf\xa2\xd0\x7d\x96\x73\x25\x42\xa8\x72\xc2\x93\xee\x61\x15\x94\x5f\x2f\xde\xaa\x6a\x24\x3b\x08\xa6\x51\xa9\x67\x11\x73\xb8\xe2\x21\x94\x60\xc2\x67\xf5\xe0\xf2\x06\x93\xa2\x51\x44\xbd\x88\x7d\x3c\x8a\xb8\xf3\x76\x45\x13\x7e\x34\x86\xfb\xaf\xed\xfa\x8d\xa2\xd2\x08\xb9\xfa\x1e\xd9\xd0\x47\xbb\x38\xb7\xbc\x37\x41\x72\x9f\xa6\xc0\x49\x6a\xca\x8c\x30\x97\x98\x85\x98\xb9\xf8\x71\x12\xd7\x0f\x63\xd6\x7b\x78\xb0\x1c\x1e\xb5\x17\x7c\x22\xa0\x5f\xce\x17\xbd\x75\x39\x28\x3f\x11\x90\x87\x99\xb8\x83\x81\x00\xb1\xc6\xca\x94\x28\x41\x9d\x85\x0b\xb4\xa6\xac\x21\xc9\x67\xbb\x5d\x28\xfb\x04\xaf\x67\x59\x71\xed\x23\xe8\xff\xae\x88\x26\x3a\xe0\x1f\x0f\x9c\xb7\x32\x85\xb9\x14\x80\xb9\xa8\xc3\x1e\x7b\x9b\xbd\xfb\x3f\xfa\x03\x36\xe8\x4f\xba\xfd\x41\xe1\x71\xe2\x52\x28\xa5\xb3\x4b\xfa\x24\x88\xa0\x6f\x85\x34\x75\x51\x22\xdd\x6e\x69\xd7\x78\x8f\x28\x96\x5d\x85\xc3\x6e\xb7\x8d\x69\xae\x67\x7c\x0f\xdf\xf7\x07\xaf\x6f\x78\xac\x8a\x22\x15\x9d\x0c\x76\x28\x02\x4f\x34\x27\xae\xf8\xc6\xbb\x5a\x24\x6e\x9f\x66\xd9\xe4\x61\x87\x95\xa9\xde\x02\x82\xcb\x83\x11\x96\x7c\xdc\x75\xaa\x38\x1f\xa6\x59\x26\x81\x86\x9a\xb1\xde\x58\x39\x1e\x93\x5b\x46\x6e\x22\x3c\x8f\x05\xc2\x14\xd9\xfd\x0a\x67\xc3\x3b\x29\xdb\xad\xf2\x54\x9f\x6b\xe3\xae\x05\x78\xe6\x93\x3d\x43\xae\x26\x81\xd8\xd2\x2f\xe4\x58\xfd\x5c\x45\xd5\x50\x1c\xec\x75\x5c\xa0\x28\x5a\xc7\x29\x42\xe0\x20\x53\x8d\x19\x28\x7a\xbd\xae\xb9\xb6\x39\x5c\x98\xc3\x09\xe8\x75\xe8\x15\x33\x23\x23\xbc\xb4\x24\xdb\x49\xf6\x7c\x09\x2c\xaf\x42\x05\x0f\x49\x93\x6c\x06\x1e\x77\xda\x2a\xd2\x5e\x2f\x65\xb7\xe4\x0c\x27\xfc\x40\x56\x8b\x99\x4e\x73\xed\x2a\x71\xe7\x8b\xcf\xed\x61\x0f\x8f\x10\xf5\xa0\xc9\xad\xb7\x9d\x94\x02\xe0\x04\x5c\xdc\x29\xa1\x6a\xff\xf2\x52\x5d\x19\x97\x47\xc7\x7f\x1e\xff\xf5\x2f\x7f\x1e\x8d\x46\xe3\xa7\xcf\xfe\xf4\xd7\xe3\xd1\xd1\xd3\xa7\xc7\xc7\x77\x4f\xe5\x05\x16\xdc\x2a\xf7\x5a\xf4\xd9\xbf\x34\xb7\x91\x29\x7b\xfc\xf4\xf8\xaf\x7f\x3d\xfe\xcb\xd3\xd1\xf1\xe8\xe9\xd1\xf1\xd3\xa7\xc7\x50\x38\xbc\xa2\xae\xb5\xd4\xb1\x7f\x79\xf9\xf7\x8f\xae\xe8\xd3\xbf\x1e\xff\xf5\x2f\xc7\xcf\xfe\xf2\xec\xd9\xd1\xd3\x63\x5d\xb0\xed\xc6\xbb\x82\xe2\x97\xfb\xe3\x4a\x1a\x04\x5a\x71\xc6\xfd\x48\xa5\x46\x5c\xf9\xb4\x35\x72\xee\x53\x3f\x58\xf3\x53\x13\x87\xd9\x0f\x6d\x6a\xca\x3f\x6b\x2d\xff\xcc\x2f\xff\xcc\xc6\x71\x36\x9e\x0c\x97\xbc\x58\x7b\x3e\xc8\x45\x11\x48\xc9\x58\xa9\xef\x44\xeb\x32\x9f\x95\x2f\xe6\x82\xdd\x82\x8f\x14\x48\xa8\x78\xa6\x2d\x18\xfb\xd5\x66\x91\x0a\xda\xb7\xee\x04\x8b\xec\xb6\x11\x12\xda\xc0\x73\xb0\x35\x71\x95\x7a\x78\x40\xcf\xb6\xfd\x2a\xad\x4a\xba\x78\x79\x0f\x7d\x60\xf9\xb5\x9f\x69\x5c\xcf\xa4\xbd\x71\x1d\xcc\x63\x2a\xfa\xa4\x38\xfe\x2d\x79\x2f\x6f\x19\xf8\xf0\xfa\xbb\x27\x3e\xd0\x61\xae\x93\xfb\x19\xe1\xdb\x2d\x55\x3c\x72\x13\x34\x42\xd0\x5c\x18\xe6\xb9\xc2\xe1\x0c\xf3\x7c\x91\x8a\x54\xf1\x5f\xe5\x13\x44\xdc\xf4\x27\x66\xf1\xae\x58\xd0\xcc\xd5\x7e\x35\xb3\xf1\xb4\x37\xca\x4a\x2b\x58\x09\xb0\xcd\xf4\x53\x92\x6b\x57\x80\x1b\x94\xcd\xc5\x80\x51\xca\x5d\xef\x25\x16\xe4\x57\xb3\x61\xb7\x85\x30\x56\x70\xfe\x87\x92\xfe\x52\xd1\x7c\x4e\xc9\xd1\x18\x17\x81\x27\x7e\xd3\x9b\xdc\x58\x8f\x0d\x39\x95\x88\x86\xc4\xb2\x65\x0d\xb1\xd7\xbf\xc2\x45\x8b\x38\xbc\x7c\xbd\xf4\x2b\xd6\xaf\x97\x46\x51\x9c\x1e\xca\xb3\xdd\x42\x6c\x26\xdb\x7b\xf4\x1b\x56\x5c\xd6\xde\xd7\xb2\x9f\x3e\xd4\x62\xb7\x72\x14\xc5\xbd\xf4\xe0\x08\xb6\xdb\xb6\xef\x8d\x56\x90\xd1\x77\x94\xab\xc5\x87\x8a\x6e\xb3\xeb\xcd\x03\x04\xa7\xbe\x92\xdc\x7b\xd1\xca\x65\x7e\x92\xc1\xbd\x4a\xc3\xcf\xf7\x56\xdc\xcf\x97\x94\x47\xe3\x19\xa0\xc3\xa8\x46\x3e\x97\x27\x83\x41\x65\xa8\xa2\xa0\x48\xa5\x58\xf8\xd9\x90\x95\xda\xeb\xce\x42\x3b\xc6\x6c\x6e\xa2\x4c\x15\xdc\x85\xbb\x88\x1a\x47\xec\xe7\x3a\xc5\x44\x31\x32\xbb\x89\x9b\x73\x10\x37\x25\xd7\xcc\xc1\x9d\x69\x63\xd7\xf5\xc6\xf8\x36\xc0\x63\x52\x95\xb3\x7b\xd4\x55\x39\xfa\x48\x52\x69\xae\x94\x6a\x05\x94\x79\x80\x08\x1b\x2a\xe9\x5d\x0b\x62\xda\x68\x8b\xe9\x23\x3d\x14\xb6\xb9\xd7\x6c\xa1\xb8\x1a\x14\x43\xf4\xba\xdb\xb8\xaf\x66\xa2\x0b\x3d\xee\x23\x3f\xda\x4c\xdb\xd1\x51\xdd\xd1\x00\x05\x79\x47\xf9\x50\x80\x7b\xb1\xa2\x7b\x23\xc4\xf8\x2d\x41\x46\xfd\x7d\x87\x85\x1a\xea\x1e\xf5\x25\xbf\x98\x9a\x12\xf9\x19\x42\xbe\xab\x40\x2c\x5f\x51\x4e\xe7\xb4\x25\x61\x2d\x1a\x92\x48\x5e\xa8\xb8\x1a\x5a\x14\xa9\xa4\x90\x5a\x05\x57\x4d\xb0\x0e\x21\x1d\xfe\x21\x6f\xfc\x5a\x40\x2c\x6f\x2b\xd9\x41\x79\x69\xf9\x09\xde\x3d\x35\xf2\x61\xb1\xfa\xfb\x81\x65\x99\xf2\xe4\x10\x1b\x1f\xbd\xfe\xe7\xd7\x6c\x11\x7e\x95\x23\x31\x7d\x6e\x0c\xc6\x36\xb5\xdd\xc6\xcb\x60\x0c\xc1\x09\xa8\x43\x61\x89\x69\xbb\x5d\xd4\xbd\x4b\x4b\xb3\x71\xfb\x08\xdb\x6b\xdb\xbb\x54\x9c\x08\xcf\x4f\x8b\xbd\xb7\xe1\x86\xd3\x3a\x39\xee\x0f\x0e\xee\x29\xd4\xb8\xc8\x47\xf5\x8b\x7c\x1c\x4c\x49\x0a\xa9\x1e\xa0\xd4\x8b\x01\x93\x42\x17\x8c\x07\xd6\xe0\xb4\xb1\xc4\x07\xa7\x9f\xea\x6a\x04\xbf\x6f\x4c\x2c\x4c\x87\x95\x56\xfb\xb5\xb8\x79\x93\x57\x80\x1c\xba\x3f\x0d\x20\xc3\xf6\xc2\x3c\x98\x29\xf3\xa0\xb9\x09\x1b\x16\x87\x1f\x20\x44\x83\xd0\xdf\xda\x18\xc5\x35\x04\x87\xda\xdd\x51\xd6\x42\x0b\xab\x3e\x37\x30\xb2\x51\x2b\x46\x36\x9a\x45\x51\x10\x88\xbd\x49\x08\x7e\x3b\x9e\xfa\xb1\xd9\x0d\xd2\xc7\x9b\x19\x8f\xbd\x8c\xc7\x36\x63\x33\xaa\xe7\xb7\x4f\x5b\xd1\x48\xd6\x82\x46\xb6\xe2\x8b\x6a\x3b\xeb\x88\x56\x8e\xa3\x24\x27\xa3\x11\x5f\xe7\xbf\x6b\x3e\x3a\x4d\x32\x14\x74\xfb\x28\x96\xbb\xda\x17\x29\x37\x08\xed\xdc\x23\xb4\xf9\xb7\xc7\x53\x7e\x74\x2c\x09\x6d\x46\x8e\x4f\xd8\x73\x6e\xe2\xfa\x1c\x1d\xfb\x84\x36\xd3\x11\x69\xec\xae\x84\x61\x83\x11\x98\x81\xe7\xfe\xfd\x6c\x24\x5c\x0d\x6c\x78\x30\x46\xa0\x2b\x94\x2b\x60\x5b\x64\x59\x71\xf7\x49\x9f\xac\x72\x4f\x58\x13\xd5\x66\x67\x3f\xec\xb6\xc5\x7c\xed\xb5\xfa\x59\x9e\x36\x93\xea\xed\xc7\xe1\xe5\x09\xd7\xa0\x40\x3b\xb5\xd0\xfb\x3d\x22\x7a\xf7\x71\x6c\x40\x60\xb7\x3f\x08\x40\xe2\xa0\x8f\xfa\xb2\x9a\xac\xa8\x09\x2c\x0f\x40\x51\x1b\xb7\xc0\x57\xf3\x74\xe6\x09\x31\x35\xc5\xa8\x2b\xd3\x37\x4e\xd6\x15\x84\x1d\xf6\x95\xd3\xf4\x22\xd0\x63\xb4\x3d\xaf\xeb\x4e\xd0\x28\x0a\x18\x14\x97\x12\x7c\xf8\x04\xca\xae\x95\x7b\x79\xd9\x51\x3a\x8f\xb2\xa5\x1f\x68\x7a\x13\x38\xd3\x3d\x8f\x2d\xff\xa9\xb9\xb3\x5b\xcf\xc4\x78\x16\x6e\x78\x90\xdd\x36\x0f\x7f\x6b\xd9\xe3\xe0\x3c\xb9\xb8\xd1\x34\x8c\x12\xc8\xb0\x95\x8d\x33\xc0\x0f\x71\x49\x98\x41\x51\x2b\xf3\xa8\x82\xb0\x67\x84\x19\xcb\x05\x3c\x27\x1a\x2d\x92\x38\xe2\x17\xf0\x8b\xcd\x50\x14\x69\x1b\x89\x25\x01\x73\xcd\x98\x21\xbc\x22\x1f\xe2\x65\xcd\xbb\xb4\x62\x9e\x3d\x5c\x53\xd1\x5d\x53\x91\x4a\xca\xc8\xe1\x7d\x2f\x62\x30\x68\x61\xcb\x58\xb3\x32\x59\xf9\x86\x17\xbf\xd2\x3c\xe6\x68\xbb\xe5\x35\x7e\x66\xdc\x37\x35\xf4\x2d\xd3\x30\x54\x0f\x06\x83\x3a\xeb\x6f\x6b\x07\x86\x1c\xe6\xaa\x08\xbe\x41\x08\x8e\x78\x8e\x97\x08\x3b\xb3\xa6\x2f\xe0\x5b\x9b\xe1\x15\xc2\x2b\xc0\xcd\x16\xe4\x61\xc9\xf2\x85\x33\xee\x75\x42\x31\xcc\x48\x32\xeb\x3c\xf5\x64\xf8\x10\x91\xb4\x36\xe3\xd4\xb3\x06\x56\xee\xc3\x77\x9e\xf2\x71\x41\x46\x27\x86\xd1\xf5\x6d\xa1\xc2\x2c\x2f\xe3\x5c\xcf\x27\x4d\x0a\x89\x2d\x2a\x26\x92\x84\xbd\x85\xc4\x3f\xad\xce\x3d\x96\x33\x2a\x17\xd1\xcd\x66\xaa\x12\xdd\x2a\x7a\x9e\xd4\xd4\xa7\xb6\x15\xd0\x6b\x8b\x6c\x61\x09\xdd\x8c\x82\x06\x85\x60\xbf\x66\x82\x6c\x84\x41\xa1\xfc\x81\xab\x8e\x0a\x5d\x14\x24\x28\x7e\xc9\xc1\xd7\x96\xcc\x8a\x79\x9a\xbd\x57\x63\xf1\x40\xa0\x1c\x9d\xd1\x50\xf0\xec\x0d\x68\xe2\xdc\xe6\xcf\xbc\x21\x7b\xc3\x2d\x55\xb2\x47\x6c\x79\x8e\x4c\x77\x3b\x8b\x3c\x44\x51\xbc\x20\x1f\xe2\x05\xce\x10\xc2\x66\xf9\x17\x08\x2f\x76\x28\xd4\xe8\x0d\x37\x72\x2a\x04\x67\x57\x95\xa0\xed\xd5\xd6\xf7\x32\x45\xdb\x6d\x9d\x37\x1f\xf7\x5d\x25\x7d\x34\x3d\xbc\x8d\xa9\xdc\xc6\x93\x20\x55\x26\xb9\x2e\xbe\xf0\x69\x1a\xc0\x88\xa8\x07\x28\xa8\x0a\x49\x64\xc5\x3c\xef\xf4\x2e\x98\xee\xfb\x20\xaf\x84\x2a\xcb\xe0\x0c\xdc\x1c\x62\x70\xd9\xd0\x36\x97\xb0\x87\x3e\xb6\xb0\x31\xd4\x17\xe2\xeb\x6f\xfb\x3c\x16\x8f\xe0\xb4\x78\x29\x48\x72\x84\x97\xfb\xbd\x52\x6c\xac\xf1\x5c\x72\x13\x16\x70\xc3\x8b\x39\x2d\x95\x5e\x57\x9c\xa3\x43\x64\xd5\x35\xf8\x71\xa8\x85\xb4\x6d\x21\x06\x1d\xcd\x66\xa0\x20\x52\x58\xa0\xb2\x35\x6f\x53\x1f\xeb\x7a\xa3\x03\xf5\x53\xc0\x7b\xa1\xa2\xbd\x4a\x63\x9d\xc3\x4d\xfb\x93\x8a\x14\xa5\xd7\x72\xeb\x73\x15\x73\xe5\x4d\xc1\x01\xe3\x57\xa4\x59\x3d\xbb\x97\x9b\x57\xf9\x4b\xba\x2c\x38\x85\x99\xf8\xbe\x28\x6e\xe2\xc3\x05\xea\xd5\xab\x68\x73\x07\x0a\x98\x59\x6e\xab\xf7\x37\xf6\x9b\x86\x1d\x7f\xb1\x14\x94\x7b\xfd\x96\xe8\xc2\xa1\x22\x57\x74\x5e\xac\xa9\xd9\x61\x3a\xbf\x5c\x99\xf0\x43\xdb\x02\x19\x35\x1d\xbb\xe6\xb1\x40\x1d\x1b\x4e\xae\x14\x69\xb9\xfa\xe4\x33\xf6\x54\x3c\x18\x2a\x49\x7b\xf9\x03\xec\x3f\xf9\x90\xd8\x3d\x3d\x23\xb9\x8d\x94\x65\x23\xbc\xaa\xdd\x75\x12\xf7\xf5\x53\x9f\xa9\x9d\xb4\xdd\xf6\xe4\x25\x1b\x73\x22\x8c\xde\x84\x06\x9a\x2b\x56\x22\xad\x52\x7b\xd1\x44\xa4\xe0\x5e\xaf\x1d\x1d\x13\xc0\x1c\xf2\x79\xe1\x0d\x2c\x84\x28\xa2\x48\x41\xbf\x14\x17\x08\xa7\xb0\xd5\x41\x87\x02\x42\x63\xcc\xe9\x82\xb6\x04\x71\xd2\x5a\x93\xc6\x88\x98\x9a\xb1\xd4\x86\xe6\x90\x11\xd9\x35\x43\xab\xc9\xe7\xed\xb6\x3e\xe8\x28\xea\x99\xc8\x43\x75\x70\xb9\xd1\x12\xc3\x28\xea\x35\x82\x2b\xf4\x68\x8f\x58\xe5\x75\xa5\xe8\xe1\xf7\x2f\x10\x7b\x52\x04\x72\xb9\x5a\xf5\x1c\x45\x91\x27\x05\x71\x55\x99\x4a\x76\xb1\x77\xbc\x31\xd5\x0f\xa8\x89\xdd\xca\x2e\x81\x2c\x0d\xa4\xa5\xc5\xb5\x53\xbd\x55\xa2\x37\x05\x48\x14\xe3\x7c\x9f\x26\x6a\x97\x0e\x2f\x8d\x87\x78\x60\xef\xd5\x56\x56\x81\x54\x20\x65\x9b\x87\xb9\xa9\x05\xe7\x56\x40\x53\x30\xb2\x6b\x86\xb2\xeb\x8d\x70\xff\x8e\x65\x99\xde\xcb\x50\x4d\x1f\xfb\x0d\xf9\x04\xbe\x77\xab\xb8\xc4\xe1\x95\xeb\x81\x32\xb5\x6a\xfd\x14\x53\x84\xf0\x69\x2c\x94\x39\x16\x00\x11\xdc\x02\xf8\x90\x1e\x56\x78\xd4\x5b\x4f\x28\x33\xd1\x77\xe5\xd4\x04\xa4\xd2\xbe\xe3\xd9\xd2\xfb\xf6\x21\xa5\xb6\x75\x17\x10\xba\xfe\x25\x56\x06\xe4\x9c\x9c\xc6\x8c\x70\xa4\x30\x1b\xd6\x32\x26\xbe\x17\x56\xd2\x9a\x70\x20\x29\x66\x0a\x3e\x05\xa0\xb1\x9d\x2f\xd7\x6c\x87\xc6\x68\x6f\x4b\x62\xa7\xe1\xb6\x3c\xdb\x8d\xd9\x69\x6c\xe0\x9a\xcc\xa2\x9e\xa0\xa0\x5b\xbd\xf3\x1e\xa4\x13\x40\xe9\x52\x31\x5f\xd5\x36\x79\x0b\x91\xab\x5c\xc1\x58\x1b\x7d\xc5\xb9\x0e\x6c\x9a\x82\x1b\x5e\xb1\x94\x82\xb4\x56\xcd\x4f\xff\x82\x6d\x5c\xa7\x2d\x1c\x5a\x6a\xe3\xd3\xc4\x82\x50\x14\x45\x6d\x5a\xf6\x6d\x91\x5a\x60\xca\xa7\xcd\x2b\x9b\x34\x52\x0e\xdc\x54\x1e\x44\x00\x32\xc1\x3f\xe9\x9a\x21\x37\xd1\x01\xc0\xc3\xac\x46\x18\x8b\xe3\x11\xe6\x7b\x22\x81\x42\x35\xfb\x22\x5d\x06\x11\x6a\x21\xe7\xd4\x7b\x56\x2a\x2e\x6e\x25\x63\xb4\x03\xef\x4b\x0d\x86\xe0\xa5\x81\x4a\x26\xca\xa6\x3f\xf0\xc3\x51\x36\xfd\x9c\xd3\x66\xd2\x24\x6e\xf4\x01\x37\x73\x1d\xee\x97\x59\x12\x2f\x8a\x67\x9b\x02\xd4\x4d\xdd\xb4\x86\x7a\x48\xaf\x88\xbd\x38\x17\xda\x0c\xd4\x10\x97\xf2\x88\x78\x3a\x49\x90\xaf\x40\xea\x2e\x43\x06\xe7\x65\x38\xc4\x77\x47\xd8\xde\x92\x24\xc5\xe5\xce\x12\xaa\x3c\x0c\xd8\x84\x00\xd2\x60\x11\x06\x7e\x6b\xc1\x2c\xcd\xac\x46\x91\xa8\x9d\x4d\x09\x73\x0f\x1d\x57\x1f\xd3\x6d\x83\xca\xa0\xcc\x86\xc5\x2e\xbe\x41\xf8\xdd\xa3\xd3\xa3\xd9\x0c\x66\x72\xd2\xaf\x99\x9c\x87\x1d\x4e\xdd\x44\xa5\xbf\x65\x32\x5a\xb1\x7a\xcf\x4c\x45\xd5\x2a\x91\x37\x9a\x5c\xcd\xa2\x28\xae\x62\xe1\x64\xaf\xea\x26\xc7\x22\xb4\x20\x4b\xae\x66\xc6\x9a\xde\xc3\x9d\x8c\x81\x70\xc7\x9e\xdb\x05\xb5\x08\xe2\x94\x91\xe0\x1d\x3a\x3a\xe1\xc3\xb5\xbe\x46\xe4\xe7\xb5\x77\x71\xb0\x28\x3a\x05\x4e\x4a\x6c\xaa\x6d\x9b\x7a\x66\xe7\xfd\xd5\x23\xf3\xae\xb5\x4c\xcc\xac\x17\xcd\x59\xb7\x73\x6e\x76\x1d\xc3\x85\x43\x70\x39\x29\x3c\x88\x7c\x6e\x93\x63\x8e\x70\xb1\xdb\xb7\x12\x1d\x63\x47\xdd\x20\xb7\xf2\x96\x85\x71\x9b\xb4\xe5\xd6\xe5\x0a\x6f\xaa\x25\x84\x18\x94\x9a\x16\x96\x5f\x1b\xcf\x04\x8b\x2e\xcc\x69\x3f\xd4\xa3\x33\x2d\x07\x8a\x82\x3b\x9c\xef\x21\xe1\xea\x9b\x45\xa1\xcd\x3c\x44\x64\xe9\x76\x1b\x53\xc2\xcd\x88\x1f\x80\x71\xb5\xf2\x62\xc4\xe5\x89\x48\x46\xb3\x99\xa4\x4d\xad\x54\xdc\xcd\x6e\x20\x63\x77\xc9\xaa\x87\xca\xcf\x0f\x56\x01\x2f\x5b\xb1\x14\x0f\x05\xb1\x85\x51\xe3\x7a\xf3\xc8\x15\x53\xdb\xd8\x77\x5e\x63\x8d\x3f\xac\xf2\xf8\x93\x4b\xb6\xf8\xc3\x93\xa1\xa0\xa5\x88\x19\x9a\xe6\x09\x53\x91\x46\x27\xea\x09\xe7\x3b\xbd\xff\x60\xd8\x9f\x5a\xa6\xed\x77\x73\x38\x3b\x62\x9f\x12\xc5\x0e\x7f\x3c\x1c\x7a\xb0\x45\x01\xe2\x97\xa6\x06\x87\x83\x2d\x87\x98\x02\x9a\xaf\x7e\x96\x5e\xb5\x82\x90\x7e\xdf\x64\x5d\xc4\xb5\xb6\x71\xf3\x2a\xef\xf7\x95\x11\x5e\x2c\x06\xa4\x3f\xec\x23\x2c\x06\x44\x91\x3e\x18\x9c\xfd\xdd\xc6\xfd\x6f\xc0\x85\xc6\x37\xa0\xfc\x84\xbe\x86\x4d\x60\x00\xd8\xd7\xb4\xdf\xe5\x09\xd5\x40\x9d\x7a\xdc\x08\xd5\xb8\xa8\x29\xe9\x74\x02\xfd\x24\x4b\xee\xb4\xa0\x96\x1e\xff\xc6\x9b\xad\xb8\x7f\x2e\x52\x2e\x3c\x39\x67\xdf\x60\xa0\x15\xde\x57\x44\xdf\x7f\xca\xfe\x4d\xe6\x6f\x8a\xe7\xd5\xd0\x99\x3f\xd2\x94\x84\x9d\xff\xd6\x2a\x3f\x4e\xb9\x65\x07\x4e\xc2\x3c\x6d\xc3\x01\xf9\x86\xa4\x9d\x7f\x8e\x29\xf6\x5b\x48\x52\x2d\xcc\x51\x8c\xd6\x5d\x5b\xd7\xb5\xe0\x5f\xb9\x56\x47\x9e\x8c\xc2\xe3\xa8\xb6\xa2\xe5\xca\xe9\x90\x57\x13\xf8\x46\xed\xb2\x65\x57\xd1\xd9\x5d\x13\xaf\xb4\x7d\x3e\x8c\x35\x89\x52\x3c\xac\x0d\x46\xee\xa1\x7a\xf5\xba\xa3\xa9\xd1\x50\xb0\x1d\x2d\xdb\xa7\x37\x09\x27\x6e\xe6\xa1\x29\x60\xa5\xb2\x3f\xeb\x60\x20\x81\x44\xcf\x33\x16\x51\xa2\x02\x0b\x00\xc0\x2d\x92\x91\x23\xfb\xcf\xb1\xe5\x18\x48\xd0\x6c\x78\xd8\x71\xb8\x7f\xea\x03\xab\x6f\x9e\x9d\xa7\xe3\xec\xf9\x74\x09\xb6\x39\x09\x86\x6a\x76\x0d\x9b\x1c\x9c\x00\xb3\x78\x29\x16\xba\x47\x65\x7b\x8f\x3e\x4a\x3a\x84\x2e\x64\x5f\x6c\xc4\xed\xba\x90\xfe\x23\x1c\xb4\x9f\xf7\x05\x06\x57\xaa\x54\x01\x71\xaf\xd9\x9f\x77\xa9\x15\xe3\x73\xcf\x5e\x9b\xe4\xbb\x4e\x53\x57\xff\x67\x68\xe5\xf5\x41\x2c\x41\x5f\x00\xbf\x5f\x1b\x31\x99\xfd\x7e\x4d\xc4\x87\x1d\x2e\x9b\x65\xff\xe4\x65\xfa\x93\x95\xf4\x6a\x24\x86\xd5\x90\x98\xd2\xa1\x8d\x4d\x5d\x08\x23\xe2\x56\x1c\x64\x2e\x97\xca\x57\x5c\xca\xb1\x95\x69\x95\xa4\xc0\x2c\xb8\x31\x52\xcc\x7e\x17\x8a\x93\x6e\x36\xd9\xfd\x45\xa1\x3a\xd0\x06\xc0\xb3\xd8\x43\xb4\x8d\x8f\x0f\x1f\xaf\x28\x11\x4a\xc0\xee\x2c\xd0\xa3\xb0\x86\x1d\xbe\x1d\x76\xcc\xc1\x40\x93\x91\x3c\xc9\x9d\x0c\xc4\xe4\x08\x88\x5d\xdd\x2f\x3d\xf6\x32\xa6\x80\x99\x83\xee\x84\x44\x83\x6a\x9f\x5b\x3d\xb7\x00\x36\x89\x53\x6d\xa0\xf5\x11\x67\x01\x3a\x64\xe5\xdd\x08\x6c\x6b\x9c\x61\x80\x82\x9b\xde\xc4\x83\x12\x7d\x41\x46\x00\xc3\x8d\x1d\xf3\xf3\xf4\x64\x30\x28\x54\xf0\xf3\xc2\x0e\xc1\xf0\x0e\xfd\xe2\x21\x2f\x0c\x3d\xcc\x49\xd1\x01\xdd\xb4\x9d\xaa\x57\xb8\x20\xca\xc5\xb7\x64\x74\x72\x74\x54\x18\xc9\xa4\xac\x1a\xaf\x88\x33\xcb\x5f\x18\xf8\xa4\x0e\x7d\x31\xc3\x1b\xe0\x44\xc9\x7e\x6f\xc8\x52\xd9\x90\x59\xe5\x85\x69\xf1\x2d\x99\x2b\x82\x54\xd1\xd5\xb0\x57\x74\xb7\x64\x0d\xf1\x0a\xeb\x32\x38\xc3\xc6\x45\xc7\x35\x15\x5e\x96\x37\x05\xd7\x16\x5b\xda\x4c\x2a\x2c\x83\x39\x2e\x74\xb9\xaf\x6a\x42\xae\xcb\x86\x6c\xea\x8c\x6d\x80\x4c\x1b\x4b\xc1\x69\xcb\xb5\x45\x14\x2d\x2c\xf6\x5a\x1f\x9c\x77\x62\x6d\xa6\x28\xda\x78\x5c\xdc\x75\x14\xc5\x1b\x83\x42\x41\x5d\x86\x56\x72\xb9\xd6\xda\xf9\xd7\xe2\x24\x96\x93\xb5\xdd\x6e\xea\x9c\xe3\x78\x01\xae\x8d\xe6\xe4\x5d\x2a\x56\xc3\x35\xcb\xe3\x02\xcf\x11\xbe\x25\x1b\x84\xf3\x28\xea\xb1\x28\x8a\x6f\xc9\x6d\xeb\x88\x6e\xed\x88\x10\xf6\xf1\x9e\x61\x95\x97\x2b\xb6\x14\xf1\x2d\x44\x68\xcf\x5c\xf0\xf5\x86\x29\xe2\xbb\x82\xd3\xae\xae\x45\x7b\x67\x2b\xbb\x77\x94\x53\xeb\x8c\x71\x95\x82\x97\x46\x4e\xbb\x29\xa7\xdd\x85\x5a\xac\xae\x31\xc0\xef\x2e\x0b\x0e\xbe\xdc\x14\x37\xa4\xdb\x1f\x38\xfe\x79\xae\x79\xd5\x2c\xbf\x4d\x33\xb6\x48\x05\x7d\xa5\xad\xc8\xe2\x00\x4b\x9b\x23\x5c\xc5\x65\x53\xf7\xd3\x4b\x90\x38\x1a\xc2\xa5\x3c\x9a\xcd\xda\x1e\x71\xa9\xe6\x05\xf7\x1e\x0c\xb8\x32\x3c\x49\xb8\x7f\x87\x1b\xb4\x1f\xec\x0f\x0a\x23\xfd\x4f\x9d\xf4\xbf\x34\x57\x64\x4d\x0f\xa0\x03\x56\x41\x10\x2b\x38\x10\x35\x14\xb8\x92\x80\x01\xe2\xd1\xe7\x8f\xed\xf8\x16\xe0\xe2\x58\x04\x10\x6a\xdb\xc5\xce\x07\x8a\x2a\x25\x3c\x71\x48\xdd\x0c\x05\x64\xce\x9e\x63\x62\x6e\xd4\x8e\x0e\x11\xaf\x0c\x5c\xd8\x32\x06\xfc\x03\x2e\x04\x42\xa8\xf3\xf3\x03\x1e\x2b\x14\x86\x57\xbf\x47\x42\x67\x40\x25\xd9\x93\x2d\x04\x24\x9d\x94\x94\x60\xe6\xa4\xb6\x9a\x0d\x0c\x4e\xef\xba\xaf\x82\xa9\x93\x1d\x4d\x01\x06\xb7\x8f\xa4\x05\x49\x70\x8e\x21\x1e\x76\xd8\x01\x3c\x9c\x92\x64\x76\x52\x1c\x1d\x9d\x18\x4f\x9d\x79\x14\x51\x70\xeb\x27\xc7\x2b\xc7\xed\x11\x00\x55\x38\xa9\x12\x9a\xcb\x6e\xaf\xe2\x0a\x4d\x59\x92\x29\x33\x26\x35\x77\x93\x86\xf8\x25\xd3\x79\xca\x24\x9b\x4d\x52\x65\x6f\x9d\xc1\xd9\x4b\x0f\x9c\xbd\x1f\x8b\xaa\xbb\x60\x8b\xfc\x1b\xe7\x46\x90\xe6\x45\x75\xbd\xea\x2a\x35\xae\x27\xe0\x08\x9d\xcd\x95\xfc\x9e\x0a\xca\xcb\xae\x28\xba\x65\x2a\x58\xb9\xbc\xef\xa6\x59\xd6\x2d\x96\x70\xf8\x5a\x4f\xa5\x72\xa0\xd1\x1f\xd0\x41\x7f\xd8\x7d\xc7\xca\x12\xb8\x02\xca\x52\xb6\xdb\x1f\xa4\xee\x9c\x36\xf6\xaf\x9c\x5a\xcd\x58\xf9\x84\xf0\xfb\x7f\xcd\xe6\xf0\x73\x6e\x6f\xeb\xc5\xe7\x4f\x67\xa7\x2a\xf0\x12\x64\xf0\xcd\x0e\x6b\xd9\xfe\xdf\x6d\x74\xf8\xf6\x6b\xb0\xc8\x7d\x48\x9a\xe3\x33\x55\x3c\x53\x78\xd8\x7e\x64\xed\xb7\x30\xfa\xf6\x20\x5b\x96\xe7\xaf\xb5\xfc\x3e\x62\xb6\x0f\x99\xb2\x8f\x56\x33\x54\x1b\xb2\x7b\xbb\xf7\xbd\xf7\x4d\x49\x5e\x7b\x63\x89\xbb\xe8\xc4\x9a\xdf\x56\x09\x6d\x41\x63\x2c\x4f\x21\xc8\x1b\xbb\xca\xe8\xcb\xfb\xcf\x9f\xce\x82\x1a\x53\x2f\xa6\xbc\x3c\xce\x82\x8c\x30\xb7\xce\x34\x4e\xc4\x73\x7e\x32\x18\x08\xa3\x9b\xcf\x12\xa1\x6c\xda\x0d\xde\xb2\x24\x49\xa8\x8b\x18\xe0\x87\x5a\x30\x32\x97\xf7\xec\xf2\x6b\xd0\xc8\x39\x4a\x84\x32\x11\x28\xd5\x10\x57\x2d\x30\x7e\x8e\x97\x38\xb3\x57\xfe\x82\xac\x34\x65\xb7\x98\x96\xf1\x02\x4d\x56\xa1\xac\x63\xd5\x22\xe8\x28\x8d\xaf\x82\x00\x56\x8a\x59\xa7\xd8\x6e\x57\x0d\x3c\x61\x83\xa6\xb1\xa6\x70\x83\xdc\x64\x85\x26\xf5\xa4\x8d\xd9\xf1\x55\x1c\x1a\x8d\x06\x48\x3d\x78\xa5\x81\x23\xee\xd6\xec\xcc\x4a\x8d\xa9\xb3\xb7\xb3\xec\x31\x2b\xf7\xdd\x6f\x8e\x08\x77\xac\xbe\x62\xf7\x8b\x8b\x6d\x7b\x6f\x3c\x29\x75\x14\x39\x29\xf5\xa8\xa3\x93\xc4\x76\x1b\x7c\x18\x6b\xae\x73\xe8\x16\x07\xe7\x41\x82\xe2\xec\x71\x37\x82\x7c\xef\x08\x18\x19\xe1\xc2\x59\xae\xb2\xe7\xc5\xc9\x60\xc0\x90\xb5\xfd\x54\xbe\x73\x68\x92\xaa\xd1\xa4\x6e\x34\x3b\x3b\x9a\x5b\x70\x57\xbf\x47\x11\xc8\xc8\x59\xb2\xb4\x14\x2d\x56\x54\x9a\x62\xf5\x75\x82\x8a\x6c\x71\xde\x48\xdc\xa3\x86\xae\xfd\x44\xea\x30\xa9\x8e\xeb\x17\xe8\x18\x69\x83\x45\xbf\xf5\x96\xd2\xc6\x32\xc5\x18\xa7\x65\xc5\xb5\x25\xba\xed\x39\x51\xee\x09\x6c\x84\x10\xfd\xb5\xa4\x22\x56\x8a\x45\xbc\x8d\x87\xc8\x6b\xce\x0e\x0c\x93\xd2\x9d\xbe\x75\xba\x89\x29\xde\x8b\xc7\xd9\x7b\x19\xe7\xa4\x37\x3a\xe1\xdf\x92\x51\x14\xe5\x27\x47\x47\xce\x86\xd0\xa0\x6e\x86\xd8\xa3\xca\x59\x39\x7e\x48\xcb\x49\xb1\x93\x1b\x44\xb9\x6e\x61\xe0\x1f\x6d\xbb\xed\x07\x2f\xca\x73\x8d\xef\xa1\xe7\xe8\xcf\x68\xb7\x43\x3b\xcc\x0f\xf9\xc4\xea\xd6\xc7\x61\x81\x0d\x85\xa2\xde\x61\xf3\x56\xae\x89\xc1\x38\x3e\xa3\xb3\x43\x64\xdc\x33\xba\x73\x26\x19\xb9\x04\xfa\x3d\xa1\x19\xde\xf5\x5d\x11\xa0\x82\xf5\x8f\x1a\x5a\xcb\x15\xbc\x54\x77\x51\xbb\x79\x49\xd1\xb4\x4b\x1c\x85\x83\xd1\xb6\x26\x2c\x07\x56\xba\xeb\xa6\xe9\xa3\x8f\xdd\x87\x00\xa8\x40\xb8\x48\xae\x66\x35\x5b\x76\xa8\x4e\x14\x9f\x74\xa0\x2d\x28\x18\x17\x38\xf7\xc5\xbc\x9e\xd5\x84\xac\xc4\xda\x12\x15\xa1\xad\x4f\xcb\x22\xb1\xe1\xa5\x92\x09\x7f\xfe\x74\x16\x17\xe0\x92\x72\xb8\x60\x0b\x37\x31\x31\x6b\x9e\x20\x99\x49\x14\xb6\x27\xfe\x88\x7a\x23\x64\x58\xa3\x6e\x5d\x0a\x30\x9e\x50\x64\x59\x60\x8e\x35\x2f\xd6\x9b\x8c\x02\x37\x0e\x17\x72\x53\x34\xad\x37\xea\x3e\xd9\xf9\x7d\xb0\xbf\xae\xa9\xb8\x68\x5a\x7c\x80\x3e\x98\x75\xbc\xe8\xa1\x72\x7a\x6d\xa9\x59\x5d\x63\x4c\x84\x76\xb2\xf5\x03\xee\xa0\x60\x67\xbc\x35\x78\x94\x11\xef\x18\x57\x65\xef\xe9\x1d\x40\x25\x0d\x5c\xb5\xd3\x6f\x2b\xb6\xe1\x9a\x0b\x74\x1e\xfb\x96\x73\xe1\xb6\x71\x18\xa7\xcf\x9f\x09\x7a\xf5\x22\x5f\x40\xac\xbc\x7f\x6f\xe7\x1a\x4c\xe1\xfe\xe7\x4f\x67\x0a\x35\x06\xcb\xa3\xbc\x10\x5d\x87\x7d\xf6\x8d\x1a\x9a\x37\x9b\xc2\x4d\x63\xc7\x6e\xab\xba\x2e\x89\x52\xdd\xa8\xcd\x00\x4b\xae\x66\x72\xcb\xb4\xeb\xe7\x02\x98\xa8\x8f\x22\x04\x95\x6e\x37\x84\x18\x5e\xec\xae\x0f\x60\x5b\xcd\xb5\x5b\x5c\x5f\x71\x61\xa7\xaa\x6f\xd9\x3f\x07\x74\xfa\x30\x23\xda\xd9\x5f\x1d\x82\x48\x08\x3b\x6d\xfd\x92\xdc\xcf\x26\x5e\x7f\x52\x52\xeb\x6b\x81\x05\xc2\x25\xd9\xc4\x01\x70\xc1\x69\xb8\x3d\xd8\x32\x3e\x8b\x53\x7f\xf6\x0a\xef\x05\x01\x9e\x50\x1a\x77\x62\x75\x1e\x81\x77\x9e\x4b\xad\x84\x60\xe6\xbc\x6a\x83\x68\xd6\x61\x5a\xeb\x80\xb6\xdb\xbd\x70\x52\xd2\x75\x16\x17\x7d\x14\x9a\xb6\xc2\xb6\x0c\xa7\xc8\x58\x76\x88\x6a\xf3\x4a\xf3\x0c\xe3\x74\x0f\xc4\xcb\x50\x3b\x16\x60\x7d\xbe\x91\xe0\xe4\xa7\xf8\x10\xea\x80\x70\x43\x45\xf0\x5f\x41\xf6\x2c\x43\xc5\x28\x30\x9a\xe7\x50\xe3\xf0\x8d\xca\x64\x4c\x7e\xdd\x33\x6a\xc1\xa8\x0e\x6c\x82\x28\x8a\x79\xcb\x72\xa2\xf6\x4b\x84\xdb\x89\xae\xcf\xc2\x9e\x1b\xd4\xc9\x5f\xf8\x9e\x82\x84\x63\xee\x99\xed\x3e\x76\xfb\xe4\xf6\x9e\xf4\x36\x28\x07\x43\x1e\x73\x5b\x9c\x53\x21\x32\xea\x9b\x43\xea\x4a\xbb\x77\x2b\x9a\xfb\xe9\xac\xec\x9a\xda\x16\xf2\x42\x61\x9a\xc5\xa6\xc2\x83\x9f\x7e\x61\x10\xac\xc8\x72\xb5\x53\x6c\x06\xb1\x0f\x9d\x48\x21\xde\x86\x84\x12\x8b\xa2\x15\x45\x71\x0a\x63\xbf\x53\x8e\x0d\x0e\xbe\x7f\xa7\xa5\x0e\xb8\x99\xf3\xb9\x32\x85\x56\x2b\xb0\x65\x59\x14\xb1\x86\x32\x6c\xe0\x43\x27\x8a\x62\x89\xdf\x03\xe7\x26\xa4\x7e\xac\xd5\x85\xb5\xb9\xc2\xfd\xcf\x12\x51\x60\xf9\xb5\x32\x8e\xe8\x1a\xb5\x5a\xed\xe1\xd0\x41\x38\xdf\x16\x5d\xdd\x4d\xaf\x55\x0d\x69\x92\x7a\xa2\x07\x60\x24\xea\xb3\x98\xcc\xb0\x76\x2c\x53\x73\x22\x38\x42\xd3\xd8\xb4\xff\x42\x08\xba\xde\x40\x0f\xe4\x15\xe5\x2d\xbd\x28\x40\x20\x8e\x6b\x37\x21\x9a\xb4\x95\xdd\x5b\xee\x75\x03\x39\x28\x50\x0d\x54\xb5\x18\x97\x82\x69\x1e\x6f\xd9\xc8\x2d\x98\xcb\x1e\x1b\x34\xc3\x6b\x05\xb6\x15\xa8\xa4\x94\xdd\x22\xef\x2e\x20\xbc\x16\x04\x2e\x53\x0c\xab\x13\xb3\xc1\xc3\x61\xb8\xe0\x1d\xc2\x9f\xfa\x50\x67\xc4\x87\xa4\xc0\x1c\xa1\x9e\xe1\x7c\xdc\xba\x78\xa4\x9d\x7e\x6a\x8a\x91\xef\x62\x8a\xe4\x64\x2b\x8a\xca\xe1\x93\x4a\xad\xbd\x69\x3d\x7c\x90\x5e\x6b\x98\x4a\xb6\xf4\xa0\x37\xc2\xfd\x00\x4b\xed\xe3\x44\xdb\xc7\xd7\xb0\xd7\xf6\x0a\x2c\x40\x54\x80\x90\x62\x51\xc7\x61\xdd\x4d\xe3\xe0\x01\x45\x58\x6f\x27\x7f\xf1\x2e\x3e\xbd\x78\x7f\xfe\xf6\xe2\xed\x87\xf7\xdd\x57\x1f\xde\x7d\x3c\x3b\xbd\x38\x1d\xf6\x11\x0e\xce\xa6\xb1\x93\x52\x68\x48\xaa\x68\xfa\x38\xf5\x4d\x07\x0b\xe4\x38\xed\x81\x6d\x68\x27\x54\xb8\xd6\xb1\xd9\x53\x4c\x3d\xe7\xf1\xae\x09\x4c\x8d\x6d\xf4\x4e\xf1\x90\x52\x40\x73\x82\xf5\x6f\x47\x6f\x9c\x4a\xf4\x26\xe5\x02\x66\x0f\x26\xac\xf4\x71\x29\xed\x17\x42\xdd\x76\xc5\x90\x7e\x61\x82\x2e\xfc\x4b\x8f\x0f\x06\x48\xc5\xf5\x8a\x99\xcd\x20\xef\x33\xd5\x3d\x2b\xb6\xf7\x81\x94\x07\xb1\x9c\xc0\xee\x93\x24\x9c\x25\x00\x0b\x53\xe4\x1c\xf8\xca\xd8\x0c\x9a\x90\xf9\xe4\x7f\x2c\x50\x00\x8e\x2c\xb7\xc0\x0d\xa1\xe3\x31\x16\xa8\xcf\xa5\x6f\xf2\x09\x8a\x61\x95\x6b\xf6\x80\xf5\xff\x07\xa7\xd8\x9b\x01\xa0\xef\xeb\x13\x60\x7b\x07\x73\x00\x59\xdc\x14\x78\xc0\xfd\x6b\x86\x3b\xc6\x22\x9c\x73\x75\xbc\x16\x7a\x31\xeb\x4d\xbb\x7d\xab\xa3\x46\x7d\xe0\x9f\x55\x81\x58\xe2\x0a\x61\xe1\x84\xcf\x70\xb3\x01\xaa\x0a\xfe\xc6\x9a\x75\x29\xa8\x72\xe4\xc8\xaf\x0a\x3d\xa8\x7d\xe8\x4d\x7b\xba\x8f\x31\x13\x20\x36\xd5\xce\x03\x4a\x5f\x4f\x5f\xcb\xc3\x19\x90\xcf\x1a\x3a\xb7\x5e\xf1\x75\x10\x6d\x4c\x74\xda\xb8\x42\x42\x79\xff\x6a\x80\x28\x1a\x82\x8e\xc0\x4b\x9d\x6d\xa8\x8f\x13\x61\x7c\x63\x61\x5d\x93\xf1\x02\x66\x00\xd7\x7e\x56\x14\x0c\xa1\x75\xea\xf7\xf3\x4b\xb4\x4c\x2e\x25\xc2\x89\x71\x1d\xf3\x99\x01\x08\xe2\xc1\x5e\x84\x15\x84\x93\x24\x1f\xe2\x1c\x64\xac\xb9\xbb\x25\x3c\xa6\x74\xa1\x34\x7b\x9c\x02\xb2\x57\x8d\x4e\xb4\x43\x97\x35\xd6\xd3\xe2\xe0\x04\x03\x70\x92\xd9\xe0\x21\x4e\xf1\xe1\xa6\x9d\xc0\xa2\x2a\x25\x4d\x67\xe5\x00\xce\x54\x94\x4d\x45\x4d\x9d\xbe\x95\xc5\x3c\x91\x13\x81\x7b\x23\x39\xbd\x35\xa0\x77\x00\x46\xd2\x86\x6e\x99\x7b\x2d\xc9\x43\x78\xc4\x24\x8a\xa7\x80\x20\x3c\xa9\xe5\x93\x8f\x16\xb4\xc8\x17\x00\x11\x93\x64\xb6\xc3\x95\x71\x2b\xa7\xbc\x06\xa6\xad\x81\x5f\x32\x52\x24\xf9\x0c\xcf\x49\x9a\xe4\xb3\x4e\x16\x45\xda\xaf\x0e\x21\x64\xae\x9e\xb6\xdb\x98\x03\xe2\xcf\xa7\x71\x69\x4f\x34\x4c\xd8\x1c\xe1\x2c\x8a\x4a\x03\xbb\x8d\x38\x3c\x43\x68\x52\x6d\xb7\x99\x59\xab\x9e\xac\x4b\x3f\x4f\xe3\x4a\x69\x9c\xd7\x60\x8f\xae\x0f\x4d\x4a\x0f\x52\x1a\x01\x9f\x1a\x84\x19\x00\x66\xce\xcd\x9c\x19\x4b\xa3\x0f\x72\x54\x16\xe1\xd2\xbc\x53\xd2\x68\x55\x83\x62\xac\x33\x0c\x39\xbd\xa5\xbc\x84\x14\xb9\x90\x0e\xff\x68\xd5\xa9\xa1\xce\x47\x07\xf0\xc1\xfd\x30\x83\xc1\x52\xd6\x35\x65\x00\x5d\x2d\x40\xd7\x9c\xb8\xf4\x93\x54\xe9\x8d\xd8\x88\x87\x79\x92\xce\x3a\x55\x5c\x60\xa7\x1e\x6e\xf4\x6b\x1b\x62\x1e\xb0\x0f\x52\xa6\x35\xaa\x2b\x45\xa8\x48\xde\xe6\x61\x6c\xbb\x0d\xb4\xcd\xb5\x67\xef\x3a\xaf\xd5\x70\x4d\xc0\x70\x1f\xcf\x09\x3d\xe4\x18\x0b\x2f\x89\xef\xdb\x8a\x47\x51\x8f\x1e\x74\x68\x85\x57\x84\xd6\xc9\xcc\xd0\x3f\x16\xc7\x8b\x7a\x9d\x6d\x55\x36\x7c\x60\x75\xe6\xdb\xed\x72\xbb\x5d\x6d\xb7\x8b\xa9\x1e\x13\xe4\x90\xd8\x64\xa6\xc5\x97\x0e\xbf\xcc\x40\x89\x80\xef\xbd\x0c\x1a\x5e\x90\xec\x52\x2b\x4f\x8b\xa2\x4e\x1d\xe5\x48\x79\xd2\x21\x04\x7c\xdc\x47\x91\x0e\x51\x2a\x5f\x34\xdf\xcb\x08\xd3\xc2\x3b\x00\x00\xff\xbe\x6e\x48\xe0\x8f\x19\xe6\x33\x15\x50\x83\xef\x71\x1c\xe7\x5b\xf7\xc3\x2e\x1b\x81\x6e\x85\x09\x1f\x06\x2e\xb8\xac\xbf\x78\x26\xb7\x59\x91\x54\xc3\x1b\x7a\x3f\x23\x95\x8e\x8d\xc7\xb5\xc3\xcb\x6a\xa8\x5b\xd8\xd7\x5c\xad\xa0\xd5\xa1\x54\x4c\xd8\x90\x4f\xb0\x5f\xb7\xb8\x49\xed\xad\xb4\x9b\x25\x83\x57\xf3\x83\x98\xb6\xb9\xf8\xea\xe2\x9f\x60\x87\xc3\x02\x9b\x2a\x6b\x1e\x22\x7c\x6a\x97\x46\x91\xaf\x0d\x62\x39\xae\xb8\x6e\x12\xdf\xda\x26\x02\x36\x24\xd5\x2e\x0e\xfd\x83\xaf\x62\x38\xee\xd4\xc4\xb4\x75\x42\xb5\xf4\x7b\xfd\x6d\x3c\x32\x04\xd6\x3a\x04\x30\x31\xc1\xb9\xec\xb0\x28\x48\x40\x07\x78\xdd\x6d\x67\x7c\xec\xbf\xd9\xf0\x3e\x22\xbe\x06\xca\x39\x19\x29\xe7\xaa\x31\x23\xa9\x44\xf8\xe2\xf0\x52\x4c\xf8\x0c\xc9\xeb\x5c\x6b\xce\x14\x8a\xe1\x05\x48\x64\xe1\x6b\x07\x37\xcf\x51\x8a\x8d\x4d\x69\x40\xda\x89\xd9\x1e\xd6\x9f\xf1\xd0\x15\x96\x88\x53\x1c\xdc\xd1\x0a\x05\x54\xb7\x49\xdd\x91\x14\x8c\x35\x8a\x16\xed\x14\xb0\xb9\x6b\xbc\x3b\xa6\xc9\x7c\x37\x6a\xcb\x0d\xe3\x14\xdf\x3c\x54\x93\x29\xea\x3f\x46\x5a\xa7\x7e\xaf\x44\x53\xab\xea\x82\x42\xc2\x41\x29\xa6\x12\xc2\xc9\x95\x0d\x2f\x3c\x6b\x53\x70\x20\x2a\x84\xa6\x97\x3d\xde\x56\x4c\x91\xf1\x7e\xa5\x2d\x3e\x7d\x91\xcc\x45\xb1\x27\x76\xc8\xbf\xcb\x35\xf1\x3e\x2f\x3b\xd3\x58\x87\xf6\x6a\xed\xb3\xe5\xd6\xf4\xc6\x48\x5f\x11\xe1\x98\xc0\xbf\x1d\x07\x0f\x60\x7c\x4d\x17\x2c\x15\xde\x8d\xf3\xdf\x34\xa8\x6e\x6b\xbf\x54\xd8\x50\xb9\x37\x97\x9c\x96\x7b\x63\xad\x35\x44\x0d\x9c\x88\xa9\xa8\x89\x15\xf2\x9a\x13\x48\xcb\xc0\x83\x15\xcf\x93\x91\x65\x11\x18\x9e\x18\x18\x60\xb0\xfc\xba\x9b\x76\x75\x07\x02\x6b\x0c\x23\xe8\x69\xc3\x82\x3c\x76\x19\xc3\x14\x1b\x3b\x9a\x16\x12\x66\xbb\x0d\xc5\x5c\x06\xc8\xb4\xb0\xd2\x0a\xdf\x3b\x9b\x08\x11\x0a\xe1\xbb\x68\x4b\xad\x8b\x36\xdf\x3f\x5b\xaa\x66\x12\x8a\xfc\xc0\xc4\x6a\xaf\x4c\x7a\xcf\x8e\xb7\xcd\x05\x72\xa7\xff\xe2\xdd\xe1\x54\x2d\x32\xb0\x95\x23\x2c\x81\xa8\x67\x2c\x19\xcf\xb4\xf6\x74\x9d\x2d\x59\xa0\x43\xa2\x2e\x3c\x97\xc8\xc3\x92\x8c\xf0\x8a\x94\x4d\xdb\x85\x93\xe5\xf3\xd5\xc9\x60\xb0\x44\x0f\x55\x3c\x0f\x14\x63\x93\xe5\xcc\xb3\x00\x73\x01\x24\xe7\x35\x5d\xf7\xbd\xa8\x26\xc5\x73\x98\x39\xe8\xdc\x7e\x41\x5a\xeb\x98\x84\x0d\x6d\xf3\x95\xa2\x88\xe4\x7e\xa6\xd9\xfb\x8a\xab\x63\xb5\x29\x82\xa9\xc9\x95\xce\x3a\xb7\x2c\xc8\x96\x6e\x85\xa6\x0d\xb9\x5f\x2b\x84\x33\xf2\xce\x14\x44\x32\x6f\x88\x80\x14\xde\xdf\xc2\xdb\x6e\xa2\xe5\xbe\x22\x55\x89\x20\x00\xac\xdc\x00\x8c\x64\x36\x78\xdd\x73\x16\x45\x69\x32\xb7\x12\x23\x7a\x32\x18\xcc\xd1\x09\x5b\xc6\x73\x42\x6c\xbe\xb0\xf5\xa5\xba\x29\x3a\x4b\x9f\x79\x9b\x5a\xa7\x72\xf3\x81\x09\xba\xe3\x25\x68\xdd\xad\xb3\xd8\x5b\x8e\xd2\x2d\x47\xc3\x08\x60\x89\x33\x5c\xea\xa0\xc8\x81\x19\x99\x8f\xcf\xa9\xd8\x65\xdb\x6d\xcf\x74\xb0\xab\x02\x0e\x2e\xc8\xc3\xae\x53\xc5\x0b\xcc\x8d\x7e\x79\x40\xe9\xd8\x53\x70\x2b\xf1\xf2\x35\x5a\xd7\xf1\xf2\x5b\x14\x45\x8b\xb6\xc4\x78\x91\xdc\xce\xc8\x3a\xb9\x75\x74\xe3\x2a\x8a\x7a\x1b\x68\xca\x5f\xf8\xff\xe2\x63\xec\x8e\x70\x00\xef\xc3\x6d\x17\x53\x0c\xa7\x1b\x62\x55\xa9\xab\xb5\xe6\x0c\xf1\xbf\xa4\x6f\x5f\xcf\x55\x1f\x63\x75\x57\x6a\x53\x24\x13\x62\xe3\x57\x1d\x75\x04\xa2\x87\xf8\x01\x47\xf2\x62\x41\x8f\xd6\xc5\xa2\xca\x68\x2d\xd6\x48\x3d\xa2\x48\x2d\x9a\x88\xe5\x44\x05\x68\xd4\xa5\x96\xec\xbd\x4a\x95\x7f\x50\x27\xc2\xd8\x6e\xe3\xd6\x0c\x10\x45\x47\xec\xe8\x30\x2d\xd3\x0d\xf9\x3b\xa6\xc3\x34\xcb\xc8\x27\xf5\xaf\x24\x87\x0b\xf2\xb3\xc4\x06\xd3\x39\x25\xaf\x31\x38\x6f\x59\x91\xb7\xfa\xc1\xe4\x78\x03\xfe\x28\x80\xc7\x44\x7e\xc5\x30\x70\xca\xc9\xf7\xf0\x24\xc7\xc8\x96\xf7\xe4\x1d\x06\x65\xd7\x25\xbb\xae\x38\x25\x12\xc3\x2c\x72\xb2\xa1\xf2\x7f\xb9\x24\x6b\xea\x5c\x5a\x90\x1f\xb0\x91\x8c\x90\x5f\xb0\x0a\x66\xf3\x19\xd3\xe1\x92\x65\x82\x72\xf2\x9d\xec\x5d\x79\x9f\x4b\xa2\x1c\x96\xe3\x02\xfc\xbe\x12\x3a\xb4\x8e\x06\x86\xf3\xb4\x14\xed\x31\x4e\x18\x79\x58\xb3\x2f\x2c\x9f\xb4\xba\x7e\x29\x34\x10\x2d\x72\xdd\x2f\xf5\xb6\x5c\x62\x2b\x44\x20\xfe\x76\xc0\x6d\x73\xaa\x61\x00\xdd\xe1\xc2\x6f\xc6\x04\xb9\xb7\x5e\x2c\x6c\x98\x7b\x3f\x7a\xe3\xc5\xfd\x86\x6a\x15\x6e\x53\xa3\x0a\x06\x7f\x45\xbb\x69\xd7\x96\x35\x02\xab\x5c\xfb\x24\x62\x84\x43\x2c\x48\x08\x91\x20\x1f\x49\x32\x43\xf8\x48\x45\x8d\x33\x91\xd3\x04\x50\x15\x9a\xeb\xb7\xc3\xc5\x72\x39\x69\xbd\x5f\x54\x9d\x1d\xa7\x89\xa0\xaa\x04\x15\x38\x57\x97\x0d\xd9\xc6\x74\xa0\xd5\xb8\xc0\x63\xed\x90\x59\xf7\x60\x87\xf5\x3c\x4d\xea\xbb\x59\xa3\x46\xaa\x25\x1d\xc5\x92\x21\xdf\x3b\x5f\x2d\xf0\x62\x3c\xc2\x2c\x29\x66\x08\xfc\x00\xee\x76\x9d\x70\xed\x99\x56\x3f\x7b\x60\xa0\x4d\x0d\x21\x91\x7a\xe3\x9d\x6f\x24\x6a\xe6\xff\xd8\x27\x27\xc3\xdb\xa0\x5b\xc8\x9e\xc8\x1f\x22\x76\x6c\x08\xfb\x24\x2e\x90\xbe\xa0\x92\x59\x2d\xa8\x8b\x1c\x87\x9c\x60\x1d\x29\x18\x02\x7b\x4f\x28\xde\xa4\xf7\x59\x91\x2e\x26\xe0\x89\x43\x0c\x2f\xaf\x2b\xb6\xf8\x1b\xbd\xc7\x6c\x21\xdf\xd8\x02\x53\xd9\xf1\xf7\x2a\xf3\x82\x8a\x94\x65\xf2\x03\xa7\x65\x95\x09\x0c\x9e\xfc\xde\x2e\x26\x5c\x92\xb2\x32\x77\x26\xe1\x81\xcc\x00\x0f\x58\xb0\x35\x3d\x17\xe9\x7a\x33\x79\x2d\x49\xad\xbc\xb8\x8b\x11\x06\x99\xd6\xa4\x48\xfa\x6e\xf8\x47\x77\x4c\xac\x8e\x40\x43\xbd\x3f\x9b\x3a\xc3\x00\x53\x91\x76\x33\xb7\x43\x51\x54\x52\x71\xc1\xd6\xb4\xa8\x84\xaf\x6f\x64\xd6\x82\x92\xd1\x09\x75\xb1\x9d\xa8\xe1\xa1\x0a\x02\x11\x37\x39\x11\x43\x3d\xe2\x0e\x1f\xca\xb1\x12\x3e\xbc\xa1\xf7\x03\x3e\x64\x0b\xac\x63\x3b\x7d\xe7\x27\xeb\x11\x62\xae\x6c\x2f\x81\xc3\x62\x34\xea\x21\x45\xbd\x21\x5c\x58\xb9\x9d\xd0\x0e\x98\x4c\x4b\x68\xe7\x22\x10\xef\xf0\x9f\x46\x61\xd8\x1c\xa3\x76\xd2\xe2\x45\x06\xb4\xc5\x7d\x95\x7b\x65\xf3\x66\xd6\x9f\x76\x1c\x86\x25\xd3\xe3\x39\x16\xf6\x42\x5a\x83\x62\x05\xe6\x7e\xe4\x1b\xf4\xb0\x53\xf8\x83\x3e\xf3\x2b\x32\xc6\x0b\x72\xec\x36\xca\xc6\xc5\xc9\x0f\x9b\x0d\xba\x11\x45\x32\xe9\xb4\xd6\x39\x0b\x0f\x09\xc9\xa6\x35\x41\xcb\xf0\x52\x51\xb8\x84\xac\xa6\xe0\x11\xdc\x6c\x20\x34\xf1\xbe\x2d\xa6\x72\xbd\x8d\x8d\x2a\x68\x84\x5c\x07\x99\xd1\xe4\x2a\x36\xb2\x44\x77\xe3\x40\xac\x65\x42\x38\xd4\xcc\xd1\x64\xad\x49\xc0\x16\x4f\x12\xd7\xda\x75\xdc\x0e\xfe\x27\x2d\x2e\x7a\xf8\xb4\x7e\xf6\x0b\x05\xbe\x1b\x56\xe7\x10\x18\x82\xb5\x19\xea\xf2\xfb\x07\x6a\x23\xba\xe0\xdc\xc8\xc6\x98\xd3\xc2\xdc\xed\x62\x8e\x45\x30\x84\x7c\xbb\x8d\x55\x80\x8b\xe6\x58\x6a\x83\xb1\x59\xd5\x70\xe4\x0d\x6e\x8e\x49\xa7\x97\x47\x11\x83\x60\xad\xfa\x3b\x18\xa8\x53\x35\x62\x59\xa3\x76\xc8\x6e\x97\x7c\xed\x76\xa0\xdc\x5e\x48\x7d\xb7\x61\x8e\x98\x9e\x98\x38\x27\x02\xe9\x88\xe5\x12\x6b\x36\x7b\x55\x89\x74\xfd\x5b\x82\x30\xbf\x0e\x05\xa4\x41\x8e\x2a\xcf\x9e\x58\xd1\x5c\x4f\x47\x11\xfa\xf7\x90\x7d\x2d\xd0\xce\xec\x40\xd8\xa8\x39\x66\xb5\x98\x30\xd4\xee\x0f\xb9\xfb\xcc\x73\x4c\xed\x16\xc1\x97\x41\x20\x99\x7b\xe3\xa5\xca\x6e\xb2\xa5\xa4\x8f\x4d\x76\x22\xb0\xfd\xb4\xc2\x40\x3e\x0f\x2f\xcb\xea\xaa\x9c\x73\x76\xe5\x22\x08\x4f\x8b\xa1\x03\x55\x51\x54\xc9\x5b\x31\x5b\xb2\x2c\xa3\x8b\x3e\xa6\x68\x62\xb6\xc8\x25\xa6\xbe\x9d\xf9\xf5\xbe\xc6\xd5\xeb\x02\xfb\xfd\x30\x75\xdc\x86\x75\x5c\xd5\x25\x7d\x61\x07\xc1\x32\x4f\x1b\xd4\xd2\xda\xd9\x61\x49\x3a\x23\x42\xfe\x0d\x56\x33\xc2\xe1\x61\x31\x23\x39\x8c\x33\x85\xf9\xd3\xec\x30\xbf\xff\xae\xe9\xcb\x00\x59\xf3\x1b\xe5\xc4\x94\x85\x90\x95\xb5\xc9\xe1\x70\xcc\xbd\x29\x9a\xf4\x15\x7a\xa4\x66\x0b\x8f\x7c\xcd\x3a\xc7\xa3\xc7\x0c\x54\x25\xcd\xcd\xa2\xa2\xed\x0a\x17\x6d\x97\x3c\x45\x39\x11\x49\x39\xc3\x4c\xfe\x0d\xf8\x0c\xe7\xd3\xbb\x58\x31\x33\x53\x34\x61\x71\x2a\xb1\xd8\x96\xe5\x23\x23\x2f\x52\xd5\x5d\x83\x08\xc4\x29\x69\x03\x04\xb8\x24\xca\xf4\x22\x45\x72\xf7\x32\xc2\xe3\xdc\x13\x73\x97\x2a\x2e\x6c\xa5\x30\x08\x46\xf2\x8e\x81\x64\x3d\x42\x96\x80\xd8\x10\x22\xa6\xd7\xb1\xc0\x35\x44\xe9\x85\x51\x69\x2b\xbb\x73\x83\x33\xcd\xd3\x5c\x29\xde\x6a\x62\x22\x15\xdd\x32\x5d\x53\x93\x73\xd8\x47\x68\xd2\x83\xdb\x1b\x6a\x2c\xd0\x24\x9d\xae\x63\x81\x19\x9a\x18\xa8\x6a\x5f\x16\x51\x74\x0d\x6f\x28\xf0\x6a\xed\xc7\xe9\x54\xdc\x1b\xbb\x82\xb9\xac\x22\x8a\x7a\x74\xbb\xcd\x55\x05\xd6\xc8\xa4\xdb\xd8\xfa\xf3\x55\xca\x72\x13\x2d\x4f\x85\xcd\x80\x5f\x45\x78\x04\x5b\xd0\xd3\x1d\x56\x34\x88\xbb\x2d\xe2\x39\xe6\x96\x39\xa4\xd7\xbc\x6d\x33\xd5\x9a\x63\x92\xfe\x21\x64\x89\xae\x1c\x37\xca\x87\x34\x25\x81\xb1\x4c\xe9\x44\x74\x1a\x80\xdb\x02\x9c\xbb\x58\xee\x99\x12\xa7\xf2\x2a\xb0\x30\xf9\x16\x9c\x74\xef\x31\x5d\x09\x7d\xd8\x1a\x45\x9e\x57\x81\x39\x9c\xd2\xa6\x31\x5e\xe3\x20\x8e\xc5\xdc\x2a\xee\x5f\x82\x9e\xce\x87\xfc\x93\xa2\x14\xb4\x8f\x86\x4b\x56\x7e\x2e\x59\x7e\xad\x08\x5d\x45\x0e\x10\x42\x6e\x1a\x5f\x35\x17\xdd\xb9\xd7\x93\xd7\xac\xc9\x95\x33\xa1\x08\x78\xad\x77\x67\xf0\xc5\x83\x0e\x6e\xa1\x58\xbb\xb0\x47\x9f\x9b\xed\x56\xfb\xf6\xd7\xc7\xc8\xf4\x99\xd3\x75\xca\x72\x96\x5f\x7b\x29\x00\xc5\x3c\xbf\xf9\x66\xd4\x14\x0c\x37\x95\x3a\x3a\x38\xe3\xb3\x09\x7b\xc8\x60\xaf\x41\xa3\xd9\xae\xa7\x14\x22\x54\xf3\x00\x98\x1a\x3a\x58\xb7\x95\xce\x57\xa7\xb9\xe0\xf7\x31\x4d\xf2\x19\xce\x41\xc6\x63\x18\x95\x74\x7e\xf3\xa6\xca\x00\x24\x81\x6d\xbd\xea\x4d\x23\xdd\x5f\x7f\xb6\x8c\x47\xc4\xba\xbb\x33\x83\x0e\xdc\x12\x9a\x9d\x7b\x1f\x07\x3d\xa5\xa8\x36\x31\x4a\x46\x23\x21\x04\xd0\xa0\xef\xd2\xfb\x2b\x7a\xb1\xa2\x79\x7a\x95\x35\xc5\x96\xfe\x19\x6d\xd9\x69\xd6\x2e\xa6\xb9\x3d\x7c\x98\xd6\x1b\x75\x14\xdc\xa2\xfe\xad\x5b\xa1\x87\xd4\x40\x2e\xb8\xde\x35\x22\xe7\x40\x17\xaa\xdf\x23\x1a\x58\x28\xe2\xf9\x85\xb0\x17\x18\x16\xee\x02\xc3\xdc\xa1\x0c\x2d\x24\x23\x43\xf5\x4a\x56\xb2\xb4\x5f\x6a\xcf\x71\xb0\x72\x76\x7a\xd7\xcd\xe3\x39\xea\x00\x14\x4c\xa7\xd7\x71\x29\xa1\x60\xbc\x89\x4b\x2c\x91\x1c\xdd\xcb\x3b\x66\x18\x01\x2f\x44\x0c\xa6\x0a\x41\xd0\x9d\xf0\xbb\xaa\xb3\x05\x4d\x14\xda\xaf\xa2\xc4\x43\xf6\x16\xf6\xbd\x41\x9a\x98\x3a\x6e\x0b\x36\x16\x55\xfb\x4e\x6c\x45\xf3\xa7\xfe\xec\x04\x7b\xc3\x60\x6d\x36\xc3\x27\x98\x6e\x6f\x02\xbd\x5d\xb5\x78\xb1\x97\xd5\x19\x1c\xa4\x0e\x0b\x31\x92\x16\xf8\xa4\xac\xc3\x17\xd3\xeb\x98\xc9\xe6\xe3\x66\xfb\xa6\x7e\xbc\xf7\x80\x21\xdb\x37\x53\x68\x9f\x57\x1b\x77\xb8\x8e\x8e\x82\x83\x93\x88\x19\xe1\x50\x8b\x3f\xf7\x07\x0e\x4c\x47\xe2\x4b\x75\x02\xc1\x57\x40\x6f\xd9\x82\xbb\x47\x73\x2e\x4c\xce\x46\xc4\x89\x73\x4b\x30\x3d\x3a\x0e\x75\x4f\x3f\xc0\xc4\x4f\x7c\x04\x12\x44\xf2\x13\xbe\x9b\x98\x6f\x0e\x5b\xe2\x34\x2d\x8b\x7c\xc2\x95\x53\xb2\x0f\x04\x98\x72\x97\xfd\x81\x23\xa6\x07\xfd\xa3\x3e\x7e\xa1\xfd\x73\xed\xf3\xc0\xee\xf5\x90\x2d\xc8\x0b\x13\x6f\x4b\xd1\x0c\x16\x88\x37\xad\x2f\x0d\xf8\x0a\xd2\x3c\xfc\x8a\x24\x33\xdc\xbc\xb0\xc1\x8c\x5c\x5f\xd8\x08\xcf\xb5\x93\xb3\x36\x46\x52\x14\x05\xf2\xd9\x16\xa6\xd2\x8f\x45\xa5\xf8\x49\x9b\xb4\x2c\x41\x70\x05\x67\x8e\x77\x1d\xab\xa4\x04\xb3\xff\x25\xe3\xa5\xe8\x9a\x9b\xaf\x2b\x0a\x48\x35\xb6\x03\x1e\xe2\xd1\x47\x3b\xed\x14\xd4\x57\xc7\xa5\xd3\xb6\x8b\xb0\x37\x06\x10\x2a\x42\x18\xa1\x95\xad\xf0\xda\x50\x5f\xad\x5f\x0d\x6d\x66\x50\xc6\x1c\x3d\x5c\x2b\x5f\xfc\x3b\xe3\x19\x60\xf2\xd8\xe8\xdf\xa4\x2c\xa3\x0b\x39\x18\x3b\x80\xee\x37\x1a\x30\x7e\x33\xe9\x7e\xcc\x68\x5a\xd2\x6e\x05\x00\x8a\x76\xbf\xc9\xe9\xdd\x37\xdd\x62\x23\x6f\xd7\x82\x63\x00\x5a\xda\x8f\x89\x3f\x01\x06\xd7\xbc\xa2\x80\x7e\xd2\x85\x9c\x42\xc7\xab\x1b\xc2\x04\x1d\xc6\x1c\xcc\xf5\xd0\x2e\xbf\x94\x88\xd7\x52\x50\xee\x23\x5e\xc2\xa3\xdb\x1c\xa3\xc4\x68\x37\x03\x8d\xaf\x08\xd8\xdd\x57\xc5\x26\x03\x85\x3e\xc3\xb8\x3c\x18\x99\xcc\x53\x5f\xf1\xe6\xc0\x88\x9e\x9b\x68\xbf\x86\xc5\xfb\x3d\xd1\x7f\x9d\x07\xe5\x76\xf6\xc3\x23\xa5\xb5\xe6\xec\x0e\xed\x34\xc0\xd7\x11\xdb\x9a\x81\x6e\x2e\xfc\x29\x79\x90\xd9\xdc\x5e\x02\xb0\x6a\x59\xc4\x3e\x1b\xc2\xa3\x82\xde\xf9\xb3\xd3\xc2\x46\x7b\x2c\x2c\xd2\x60\x8c\x30\x53\x78\xc4\xe8\xa4\x00\x97\x04\x36\x62\x8c\x93\x46\x14\x33\xed\x31\xe1\x41\x1b\x22\xf6\x80\xf0\x6c\x5c\x80\x29\x02\xf7\x20\x21\xcb\xe9\x06\xb9\x00\xb6\x0a\x91\x49\x7d\x44\x26\xf3\x31\x83\x1b\x89\x19\x58\x1e\x4f\x89\x33\x84\x4b\x43\x98\xf5\xc6\x1d\x16\x45\x3d\xa3\x7c\x9e\x92\x8b\x58\xd2\x8b\x68\x97\x27\xc5\x8c\xa4\x3b\xa5\x60\x55\xaf\x25\x4f\xf8\xac\xa6\xf8\x43\xa7\xd7\x71\x85\xad\x1b\x65\x20\xef\xd6\x71\x25\xef\xc7\x9e\x7b\x6b\xc7\x6a\x69\xab\x50\xe7\x68\xdc\x2a\xce\xa1\x9e\x1e\x01\xdf\xc5\x0e\x9d\x47\x93\x30\x64\xae\x40\xb5\x26\x43\x5b\x71\x08\x0c\x44\x9d\x46\xa6\x6b\x39\x47\x7a\xe1\x72\x15\x4b\x46\xce\x04\x95\xcb\x65\x0a\xa7\x64\x74\x92\x3a\xea\x3b\x85\xce\x89\x24\x9d\xcd\x08\x4b\x52\x2f\x5c\x8b\xdf\x3f\x09\xef\x26\x6a\x46\x76\x98\x4d\x9b\x97\xbd\x2e\x73\x33\x84\x4d\xb9\x3f\xde\xc3\x2b\x5b\x64\x87\x76\x71\x85\x73\xed\x65\x1e\x4d\x5e\xf9\x6f\x3b\x27\x06\xbe\xbc\x04\x38\x75\x79\x49\xa8\xcf\xf2\x7c\x15\x72\xe5\xb4\xb8\x38\xce\x9d\xc2\x3a\x53\x60\x99\x59\x3a\x90\xba\xd2\x9f\x02\xc0\xa3\x7a\x0d\xd0\xc6\xc9\x6e\x6e\xf0\x8d\x92\xde\x64\x18\xbe\xb7\xc3\xac\x7a\xa0\x63\x60\x70\x7f\x31\x32\x71\xd0\x9f\x37\xb8\xd9\x44\xcb\x90\xad\xf3\x49\xef\x3a\x30\xea\xcc\x60\x36\xa4\x85\x2c\x1a\x84\xdf\x31\xb1\xea\xa6\x79\x37\x95\x2d\xf4\x11\x80\xc4\x1b\x25\x06\xdb\x27\x93\x77\x1c\x63\x79\x46\xeb\x5d\x44\xf6\x34\xf1\x3a\xff\xc2\x5a\x03\xa5\x73\xfa\x48\x3f\x10\xe6\x1d\x2f\x2e\x7a\x83\x7a\xb3\x06\x94\x72\xf7\x5f\x69\x9f\x22\x06\x44\x26\xf9\x0c\x1d\xc0\xe5\xd6\xda\x72\xb0\xe5\xd3\xb5\xfa\x84\xdc\x26\x95\x93\xa1\xe9\xe6\x0c\x9e\x7f\x0e\x43\x15\xee\x9b\x9a\xa0\x42\x0c\xf5\x38\x1f\x33\x46\x56\x42\x3e\x04\xc9\x10\x90\xf3\x14\x10\xb2\x8f\x8f\xf8\xc6\xa9\x81\x69\x63\x5d\xdd\x1b\x5b\xc7\x38\x8f\xfa\xbc\xd9\xc5\x5f\xbc\x8b\xe1\xe7\xc7\xf7\xdd\xc7\xf8\x06\xee\x4c\xbb\xe3\x6e\x1e\xdf\x6e\x5a\x72\xfa\x15\xbb\xce\xf6\xe4\x75\xed\xf0\x80\x5f\x22\x38\x3d\x1f\xfd\x29\xf4\xa9\x83\x73\x98\xb3\xf7\x07\xe6\xcc\x72\xde\xe3\xaf\xd6\xbf\x44\xdb\x6d\xcd\x8c\xf2\xeb\xc2\x1f\x76\xf6\xac\x4d\x8e\x99\x59\x9a\xdf\xe3\x04\xb2\x8d\xeb\x12\xe0\xda\x56\x63\x35\xe4\x9c\xe4\xfb\x38\x27\xce\x9f\x51\xcd\x0d\x0c\xb3\x6a\xeb\xd6\xd0\x4b\x93\x7f\x75\x2e\x0e\x0b\xc0\x7e\x11\x9c\xd1\xf4\x39\x53\xd0\x9f\xd0\x44\x80\xb6\xbb\xd1\xfd\x72\xdc\x16\x8e\xc5\xa3\xac\x96\x70\x9b\xbe\xad\x6f\x0e\x73\xe6\x71\xe3\x56\xa0\x16\x79\x20\x84\x50\x5f\xf0\x60\x30\xb6\x76\x71\xb4\xd9\xbd\xab\xb4\x5c\xed\xdb\xb7\xba\xaa\xc0\xfb\xd7\xfb\xda\xf1\xd8\x29\x54\xf8\xec\xbf\xe3\x24\xbf\xf7\xa6\xe8\xcd\x7f\xfd\x14\x79\x3a\x11\xbf\x65\x86\xce\x60\x86\xc0\x90\xcc\x9b\x24\xdb\xf1\x5f\x95\x53\x1b\xd9\x5e\xbb\xa8\x56\x7d\xa3\x3b\x84\xbd\xbb\xf6\x7b\x47\x43\x3c\xe8\xa1\xda\xc8\xa6\x00\x9d\x4c\xf0\x8a\x86\x33\x6e\x8d\xba\x85\xb8\x9a\xf3\x94\x0d\x2a\xe8\x9a\xe7\xba\x53\xf3\x7c\x76\x18\x00\xbd\x7c\xd4\x79\xfe\xbe\xc5\x1e\x61\xe6\x96\xfb\xdf\x03\x1d\x02\x0f\xab\x7b\x39\xb3\x45\x83\x33\x5b\xec\xe3\xcc\x16\x86\x63\xb3\x4e\x37\x6f\x72\xc2\xf6\x41\x9b\xc3\x6c\x1b\xb9\xdf\x40\x2c\x52\x87\x05\x5e\xdd\x12\x2e\x20\xed\x47\xd6\x22\x5b\x75\x3e\xe0\x02\x0b\xcc\x20\x8b\xc7\x68\x7b\x8c\x1d\x14\x02\x93\xcf\x61\xd0\xeb\x36\x46\xc3\x74\xdf\x1d\xb7\x4e\x37\x5d\xfa\x65\x03\xae\x3e\xd3\x80\xa9\x90\x76\x4b\x3a\x2f\xf2\x85\xe5\x29\xf4\x91\xc4\xf4\xfd\x83\xd8\x08\xd6\xa3\x03\x5e\x35\x70\xa9\xd6\xd3\x27\x9b\x3e\x7c\x9f\xfa\x87\xee\xa5\x02\x4b\xb2\xcd\x96\x33\xf7\xc3\x01\x60\xe1\x72\xfd\xd2\xc8\xa5\xbc\x82\xcb\x4c\x72\x7f\xfd\x43\x5e\x3e\x3f\xee\xdb\xfd\xa8\xe6\x7a\xa5\x2e\x6b\xf8\x57\xb6\xfd\xef\x60\xc3\x87\x31\xb0\x8d\xf8\xb7\x85\x37\xaf\x15\xb1\xda\xfc\x51\xd0\x1e\x21\xff\xd8\xa1\xaf\xe4\xde\x7f\xdd\xa1\x78\x68\x6c\xd8\x8e\x51\x36\xb5\x1c\xf9\xfa\x21\x71\x86\xe2\x85\x35\x9a\xaf\x9d\x91\x14\xce\x48\x61\x02\x19\xba\x03\x67\x3c\x35\xef\x39\x3e\x7c\xbb\x8d\xeb\x3d\xfa\x87\xba\x90\x5f\x7a\x67\xe8\xbb\x7f\xe1\x0c\xa9\xf9\xb5\xc7\xe8\xbf\xf5\x10\xe9\xb6\xbf\xfe\x1c\xfd\xd8\x76\x8e\xe4\x02\xfd\x0d\xff\x81\x8c\xdc\x84\xfc\x5d\x9d\x95\x39\x4d\xfe\x30\x23\x14\xcb\xff\xc1\x78\x46\x04\x3e\x26\x84\xc4\x7f\x18\x90\x63\x14\x45\x39\xd5\xae\xde\xfe\x0f\xe9\x57\xf9\x82\x2e\x41\x52\x69\xa7\xec\x8e\xe5\x8b\xe2\x6e\xaa\xfe\xcc\x6d\xf6\x7f\xc9\xff\x01\x27\xab\xff\x9b\xfc\xdf\xe1\xbb\x4a\x80\xbb\x87\x0f\x57\x25\xe5\xb7\x94\x6f\xb7\xff\x77\xf8\x03\xbd\xfa\x1b\x13\xf5\x2f\x98\x52\xbf\x09\xcb\x39\x29\x69\xb6\x8c\xa2\xb6\xc6\x75\xd0\xab\x28\xea\x27\x9a\x07\xa8\x53\x66\x7d\x42\xc8\xc3\xce\x46\x6c\x56\x97\x98\xfe\x88\xb0\xa0\xad\x63\xf9\xcc\x72\xf1\x97\x57\x59\xba\xde\xd0\x05\x2c\x49\x7b\xab\x6c\xbd\x29\xb8\x38\x9f\x73\xb6\x11\x65\x7b\x96\x77\xca\xd1\xe9\xab\x55\x9a\xe7\xd4\x73\x91\xc9\xbd\xf8\xb4\x4d\x96\x9a\x8f\x4a\x50\x3c\x46\x8a\x23\x9e\x53\xcc\x28\x2e\x28\x4e\x29\x2e\x29\xae\xe8\xff\x9f\xbd\xb7\x5b\x6e\x1b\xd7\x1a\x05\xef\xf5\x14\x12\xa7\x9b\x9b\x68\x41\xb2\x64\xe7\xcf\x94\x61\x55\x7e\x9c\xee\xec\x9d\x38\xe9\xd8\xd9\xdd\x7d\x64\xed\x7c\x14\x09\xd9\x6c\x53\xa4\x1a\x84\xec\x38\xa6\xa6\xce\xfd\xd4\x54\x9d\x47\x38\x35\x35\xd7\xf3\x10\xe7\x29\xe6\xfa\x7b\x92\x29\x2c\xfc\x10\xfc\x51\x92\xde\xdf\x3e\x33\x53\x73\xc6\x17\xb4\x08\x02\x0b\xc0\x02\xb0\xb0\xb0\xb0\x7e\x70\x22\xc6\xca\xda\xee\xc6\xf4\xc0\x9a\xe6\x4b\xda\x50\x15\xfb\x6e\x42\xc5\x60\xde\x7b\x23\x31\xc8\x74\x8e\x3c\xf1\xaf\x3f\x9e\x23\xf9\xae\x85\xdf\x2a\x55\xdb\xe1\x7c\x47\x46\x5b\x4a\xa7\xde\x86\x12\x85\xba\x61\x4a\x3f\xf1\xf3\x38\xbc\xc6\x49\x99\x76\x43\x59\x1e\x67\x69\x3e\x4c\xb3\x88\x0e\x57\xb0\xcc\xf7\xfe\xe1\x4d\x7d\xef\x22\xea\xa3\x8b\x21\x9a\x56\x7e\x5f\xfc\x50\x88\xdf\xdf\xed\x21\x5c\x9d\xff\x09\x44\x19\x1b\x89\xa1\x4b\xe8\x6c\x3c\x77\x5d\x67\xac\xdf\xf6\x21\x4e\x11\x25\x39\xe5\xaf\x56\xca\xe0\x05\xe1\x94\x36\x43\x71\x77\x37\xd4\x5b\x8a\x83\xb1\xff\xd7\xa9\x97\x51\x32\xc2\x81\xc4\xd5\x5f\x45\x32\xce\x29\x89\xb2\x10\xd6\xa9\x72\x06\x7b\x4e\x3f\xf1\xd3\x2c\xa2\x9e\xe3\x20\x1c\xd0\x61\x26\xa7\xa3\x97\x53\x7c\x1f\x5e\x05\x2c\x08\x39\x65\x2f\x02\x1e\xf8\x60\xe0\xd4\x5a\x67\x4e\x65\xa4\x96\x8c\x92\x7e\x3f\xa3\xdf\xef\x6f\x91\xcf\xe9\xd4\xf3\x62\x59\x77\x75\x3e\xa0\xa1\x98\x40\xe3\x61\x96\x6a\x87\xb8\x4b\xda\x0e\x37\xa6\x90\x75\x7f\xb8\xce\x72\xae\x80\x78\x23\xd1\xb9\x54\xdf\x62\x10\x42\x7e\xdd\x11\x88\x8d\xd1\x3f\x36\x31\xb3\xc4\xfe\x52\x42\x24\xe7\xc5\x4b\x9d\xe8\x58\x42\x67\x07\x81\x61\x18\x14\xf3\x9c\x1b\xca\xf8\x27\xa7\x19\x1f\xd3\xfb\x1b\xa1\x43\xb6\x49\xdf\xa6\xaf\xb3\x6c\x5d\x14\xea\x45\x19\x33\x23\xbb\xbe\xbf\xc1\x58\xf8\x62\xde\x37\x1c\x96\x41\xe2\xd6\x43\xf0\x55\xeb\x06\x91\x9f\xb1\x12\xad\xb7\xd9\xba\x58\x2b\x84\xe2\x11\xda\x4a\x8d\x7f\x4a\x7e\xe9\x28\x05\xe3\x2b\xa9\x2f\x18\xed\x08\x05\xa6\xd5\x25\x80\x1d\xb0\x54\x02\xc5\x92\xc9\x86\x99\x0a\x04\xe0\x65\xb6\x7a\x41\xa9\x45\xa6\x72\x2d\x97\x6d\xd9\xc0\xab\x96\xec\x42\x44\xf1\x6e\x52\xd9\x22\x1a\x96\x1f\x86\x1f\x3f\xbe\x7b\xff\xf6\xcd\xab\xb3\x93\x8f\xaf\x4e\xcf\xce\xdf\x7f\x78\x73\x72\x7a\xfe\xf4\xfc\xd5\xdb\xd3\x8f\x1f\xe5\x9e\x7f\x43\xc9\xd7\xb3\x9a\x73\xee\x1d\xed\xc6\x69\x37\xf0\x2c\x0d\x54\x07\xfc\xc0\xdc\x50\x74\xd3\x08\xf9\x79\x27\x16\xdf\x9a\x7a\x77\x14\xdf\xd0\xd9\x1d\x9d\x4b\xa2\x7f\x49\xc9\x7d\x90\x07\x6b\xff\x67\x2c\xf0\xeb\x5f\x51\xac\xc3\xd0\x5d\x63\x4b\xdd\xd7\x8f\x71\x90\x24\xfe\x7b\x5c\x0a\x52\xfc\xdf\x31\x0b\x42\xea\xbf\xc0\xe2\x0c\xe6\xbf\xc2\xd6\x51\xcc\x7f\x89\x95\x72\xba\xff\x19\x83\x6a\xba\xff\x13\x36\x8a\xe9\xfe\x1b\x6c\xd4\xd2\xfd\x00\x67\xa9\xbf\xa6\xa0\x1a\xbd\xa2\x58\x9f\x9b\x7e\xd1\x47\xa6\x3f\xf0\x2a\x58\xfb\x1f\x30\xa0\xde\x8f\x28\x96\xdb\xa5\xff\xe3\xd6\x52\xf7\xbf\x14\x27\x31\xee\x49\x7d\x7e\x79\x3b\x66\x4d\x52\x39\x52\x9e\xf3\x3b\xd8\x6f\x38\x78\x36\xb7\xbf\x56\xb4\xfc\xd5\x6d\x84\x82\xeb\x8b\xad\x69\xf8\x3b\x98\x86\xe1\x8f\x1f\x69\xfe\x06\x0c\x07\x04\xa1\xd8\x42\x25\x27\xa2\xbe\xe1\xf3\x6c\xb5\xce\x52\x41\x71\x18\xcd\xd6\x34\xf5\xee\xbf\xf3\x6b\xac\x00\xb0\x2f\x34\xa1\x62\x94\x8c\xea\xeb\x54\x42\xf6\x94\xd6\x8d\xfe\xec\xab\xe4\x4a\xe2\x76\x8b\x70\xdb\xe6\xf9\x32\xc8\xf9\xb3\x2c\xb3\xaf\x21\x61\x41\x34\x2f\xe8\xa5\x09\x44\xcb\xf4\x94\xd6\x10\x53\xf9\x6f\xa8\xf2\x11\xee\xb5\xea\x96\xca\x06\xb8\xae\xfc\x3f\x0c\x56\xd1\x54\xa1\x77\x36\x07\x75\xd4\x1d\xf5\x4e\xd5\xff\xe1\xf3\x24\x5e\x2f\xb2\x80\x45\x7f\x3d\x83\x3a\x68\x3d\x45\x5d\x2d\x36\x89\x65\xf3\xa6\xee\xde\x5a\xe3\xcc\x93\xdc\x2b\x9f\xa5\x73\xe3\x36\x75\x96\xce\x75\x87\x74\xf0\xa7\x59\x3a\x27\xf7\xb1\x9f\xe2\xc4\xef\x8d\xb1\xfa\xe8\xdf\x97\xf1\xcc\xa9\x28\x04\xfc\x44\xac\xcb\xe2\x18\x97\xbf\xc1\xdf\x68\x42\xc4\x41\x59\xa7\x6d\x4b\xc7\xb8\x84\x62\x36\x0c\x09\xc7\x6c\x58\xf3\x74\x92\xa2\x7b\x36\x04\xcf\xfd\xa8\x28\x94\x9c\x4b\xa2\xce\x2c\x52\x91\xed\x5e\x9d\x62\x17\x30\xcf\x20\x90\x64\x2a\xdd\x4a\x56\x29\x66\x1b\x05\x3a\xbb\x5b\x2d\xb2\xc4\x75\xe5\x7f\xc3\x1d\x9d\x07\x97\xae\xbb\xab\xc6\x66\x5e\x7c\x2f\x6f\xf3\x1d\x39\xdb\x9d\x2d\xc2\xbb\x0a\x3b\xe5\xa2\x70\x74\x31\xb1\x8b\x82\xa5\x50\x8d\x44\xc7\x4b\x6f\xec\x72\xb0\xec\x64\x10\x1c\xf7\x89\x5b\x2e\x85\x4e\xbc\xf4\x1e\x88\xaf\xad\xfa\xe3\xa0\xdc\x63\x6a\xaa\xaa\x8e\xa7\x35\xd7\xef\x60\x04\x2c\xdd\x45\x83\x43\x98\xf6\xa6\xa7\xd8\x51\x6b\xdc\xa9\x63\x5c\xf6\x42\x10\x94\x7d\x68\x90\x74\xde\x6f\x0b\xa2\x8c\x01\xa4\x8c\xb0\xcc\x86\x11\xe8\xe2\xb5\x5c\x02\xd1\x19\x9f\x6f\x87\x8b\x38\x55\x11\x3e\xe2\xd2\x39\x5b\x0a\xe6\xee\x2d\xd7\xcf\xb5\xde\x4e\x9b\x0b\xc1\xd0\xbd\x6d\x4b\x8c\x51\x6a\xdd\x28\x45\x1e\xc7\x4e\xe0\x80\x08\x43\x54\x97\xb5\xef\x9a\x0a\x45\xa5\x40\xa9\xba\x77\xc8\xc5\x40\x95\x4d\xfa\x9a\x38\x0e\x66\x1e\x1b\xe6\x64\x84\xb6\xde\xac\xae\xc7\x52\x21\xa7\x72\x80\x5a\xc8\x88\x9e\xa9\x4e\x0e\x3f\xea\x1f\x86\x31\x97\x1a\x00\xd3\x16\x26\x41\x8f\xc3\xb6\xd5\xa0\xa8\x95\x57\xd2\xd5\xd5\x2d\x11\x4c\x7a\x4f\xff\x2e\xb1\x30\xd5\x6d\xf3\x4d\x85\xb6\xaa\x7c\x5d\xb5\xd2\xbe\xb4\x1c\x4d\x58\x79\xef\xc8\xb4\xf9\x46\x0a\xae\x34\x3b\xe9\xb0\x9c\x6f\xc4\x7e\x29\x8a\xde\x18\xa7\xc6\x62\x0b\xbe\xf7\x46\xd8\x81\x09\xe9\xc4\x69\x37\x75\x5d\x2f\x1d\xde\xb2\x98\xab\x6f\xbb\x17\x66\x3a\xbc\xa6\x77\x70\x5f\x5e\x27\x9e\x55\x59\x2f\x73\x5d\xea\x59\x43\x2f\xa8\x5b\x0a\x69\xa0\x16\x25\xd8\x37\x9c\x91\x8d\xc7\xbc\x31\x42\x38\x80\x5f\x07\x08\xe1\x1c\x7e\x3d\xb0\x83\xc2\x6d\xaa\xa3\x50\x99\xc3\xd4\x37\x5b\x2a\x95\xa7\x9e\x64\x97\x88\x06\x44\x9f\x5e\x83\x74\xf4\x3c\x6a\xeb\xba\xf0\x1d\x67\xe9\xe7\x52\x2f\x44\xcc\xd8\x6e\xd0\x0d\x13\xd0\xb8\xc9\x2b\x66\x5c\x5b\x64\xa2\x5a\xc8\x51\x69\xd6\x65\xcb\x9a\xdf\x0b\xee\x85\xa6\xa1\xae\x01\x34\x52\xae\x82\x3c\xfd\x8b\x38\xad\xd3\xb4\x1b\x4b\xdf\x34\x71\x4e\xa3\xee\xa0\x9b\x6f\xd6\x94\x79\xa8\x92\x43\x9e\xe8\x0d\xa3\xdd\xe3\x2d\xe2\x6d\x5e\x35\x40\x30\x02\x0b\xea\x73\xb5\x21\x7a\xbc\xbc\x21\x36\x1b\xc8\x25\xe5\xef\xf4\xd8\x81\x89\x18\x2a\xe5\xb9\x16\xad\xd1\xb2\x8a\xb7\x6b\x01\x3f\xf7\xc4\x28\x0f\x93\x38\xe7\x34\x7d\x9e\xc4\xe1\x35\xb8\xdc\x6f\x4c\x95\x2f\xd9\xcf\x95\xa2\xab\xf6\x81\x80\x40\x07\x62\xf3\x67\x34\xcf\x81\xbb\xde\xe4\xbc\x4b\x63\x7e\x45\x59\x77\x41\xc1\x9b\x71\x37\x63\xd6\xc8\x60\x70\xdb\xec\xf4\x8d\x85\x5e\x67\x77\x7c\x0f\x70\x4b\x51\x4e\xda\x7b\x6b\x55\xfb\x6a\x1b\xa2\xd8\x26\xeb\x63\xac\x97\x8d\x20\xf1\xf6\x12\x93\xcc\x1c\x16\x1b\x93\xaa\x23\xaf\xe0\x74\xda\x9a\x2a\x6d\x6f\xa8\x75\x67\xcf\x05\xe3\x82\x03\x4d\x9a\x11\x8e\x3d\x6e\x02\x52\x57\xb0\xaf\xb5\xe5\x2c\x52\x22\x8f\x6c\x8d\x4b\xbd\x51\xeb\x7d\xe0\xc8\xf6\xc8\x3a\x2a\x23\x8b\x06\x00\xad\x8d\xda\x52\xf5\x6d\xaa\x7f\x28\x97\x13\xb2\xa9\x4f\x25\xfa\xa5\xb6\x8e\x34\xee\x6b\x85\x21\xbf\x4d\xf5\x8f\x0a\x0c\x79\x4a\x50\x30\xe8\xa7\x5d\x10\xe8\x27\x28\x4f\x3f\xd5\x4a\x43\x54\x44\xa5\xdf\xc4\x83\x38\xa5\x8c\x94\x8c\x00\x49\x55\xec\x44\xf8\x80\xa6\xd6\x8b\x6f\xce\xfa\x8b\x2c\xba\x33\xb1\xb8\xad\x99\xdd\x40\x76\x55\xcd\x4b\x5e\x40\x40\x76\xca\x88\x37\xc2\xa6\x4d\x48\xb0\x37\xa1\x04\xd1\xb6\x09\x0d\x33\xb3\x74\xb6\xc8\xd4\x9c\x7d\xad\x56\xb1\x77\x27\xf4\x32\xe0\x54\xa2\x4c\x9c\xae\x95\x59\xb3\x4c\x90\x4d\x0a\x35\x4f\x2c\x07\x47\x2b\xb8\xd6\x92\xa5\x23\x2e\xdc\xfe\x89\xde\x76\x33\xdd\x19\xef\xde\x1e\xf7\x40\xb3\x29\xd8\x1e\x49\xf9\x1b\x52\xcd\xf8\x88\x5f\x22\xa5\x44\x78\x75\x94\x8c\xb1\x29\xc7\x74\x15\x73\xae\x32\x58\x08\xa9\xcc\xb1\x36\xb4\x68\x97\x0d\x9e\x13\xa8\x3c\xb4\x51\x5a\x62\x66\x37\x52\x43\xcf\xe1\x2a\x0b\x55\x46\xb4\x0a\xac\x99\x1f\x70\xf4\x3b\xa3\x09\x05\xc3\x0d\xde\xac\x82\x7e\x6a\xad\xa0\x6c\x1e\x87\x1c\x95\xc6\xe5\x9c\x65\x77\x2d\xcb\xb9\x32\xab\x86\x2a\x9f\xd7\x3e\x50\x3b\x86\xf6\x2b\xa5\x94\x0b\xb6\xed\x5c\x93\x98\x38\x3f\xdb\xac\xd7\xe0\x79\xf0\x5f\x4d\x5f\x66\x4e\x98\xad\xef\x1c\xec\x84\x1b\xee\xcc\x31\x27\x9a\x25\xb6\x14\x0e\x67\x74\xee\x53\xcc\x48\xaf\x57\xc5\xf8\xf3\x6c\xb5\x0a\xd2\xc8\xb4\xad\xbc\xf9\x5c\x66\xec\x24\xa8\x07\x7e\x05\x47\x6e\x5f\x01\x21\xf5\xda\x19\x44\xb6\xe7\x15\x8d\xc2\xd0\xd6\x81\x71\xa2\x80\x07\x03\x83\xb6\x81\xd3\x87\x43\x06\xf8\x4f\x7b\xca\x39\x8b\x17\x1b\x4e\x3d\x56\x46\x5b\x13\x7b\xa9\xfd\x61\x5b\x9e\x85\x93\xed\x97\x7d\x03\x28\xdb\xaf\xff\x0f\x31\xba\xd9\xff\x88\x8c\x6e\x40\x98\xb7\x2f\x78\x5b\x2f\x25\x01\x72\xdd\xd4\x66\x61\xd3\x92\x85\x4d\xa5\x5c\x72\xb3\x3b\x8e\xda\xff\x1d\xfc\xab\xbe\xe1\xab\xb1\x76\xda\xbf\x98\x60\x4b\x25\xbd\x83\x06\x1a\x6f\x79\x1e\xfd\x7f\x84\x2b\xd1\x9c\x47\x7d\x9b\xa7\xf6\x66\x02\x02\x2f\xb9\x8f\x10\xaa\x7f\x55\x18\x13\xcd\x7c\x58\x9c\x86\xe4\x27\x2a\x5e\x6e\x89\x71\x1d\xa1\x83\x32\x24\x60\x8c\x70\x0e\x9c\x89\x63\x28\x78\x05\x47\xbb\xe8\x38\x30\x2d\x16\x98\x97\xc1\x35\xf5\x90\xbd\x67\xaa\x0b\x4d\xf9\x59\xee\x55\x5e\xb9\x4d\x94\xa5\x76\xa2\x58\x9e\x47\x88\xc3\xb8\x20\x10\x86\xfc\xe9\x1f\x27\x52\x06\x58\x25\x50\x4e\x14\x33\x47\xe9\x2b\x49\xaf\xbc\xb2\x61\x2a\x3e\x40\x70\x4d\x95\x1f\x1c\xed\xd3\xa2\xe5\xfa\x81\x56\x4a\x6e\x1b\x45\x49\x75\xb0\x86\x41\x14\x81\x4c\xf8\xb5\xda\xda\x3c\xcd\x20\xed\xaa\x13\x15\x45\x6f\x54\x7e\x15\x1d\xa9\x5f\xcf\xa8\xce\xc9\xfd\x35\x60\x34\x70\x50\xb5\xc0\x30\xe7\x77\x09\x1d\x2e\xb3\x94\x9f\xc5\x9f\x29\x71\xc6\xfb\x6b\xee\xb4\xe6\x59\x64\x2c\x12\xac\xe3\xa8\xfd\xf3\x3a\x88\xa2\x38\xbd\xdc\xf9\x7d\x15\xb0\xcb\x38\xdd\x5d\x3c\x53\xae\xdf\x9d\x60\x91\x67\xc9\x86\xd3\xd6\x7c\x33\x3e\x75\x58\x7c\x79\xc5\x1d\xdf\x49\xe8\x92\x3b\x73\xe2\x0c\x0e\x0f\x0f\x0f\xd7\x9f\x1c\xe5\xec\x40\x49\xf9\xd7\xc1\x25\xfd\xed\xed\x72\x99\x0b\x36\x70\xe7\xa8\xe7\x21\xcb\x92\xe4\x3c\x5b\x77\xda\x1a\xc5\xb3\x35\x61\x7d\x67\xfd\xa9\xd1\x96\xca\x64\x61\x34\x88\xb2\x34\x11\xbb\x78\x03\xbf\x30\x29\x89\x99\xeb\xb8\x3e\xe8\xeb\x35\x4d\x23\x08\xce\xea\x55\x0a\xa2\x96\xc5\x55\xe5\xa0\xdb\xb2\x0b\x5e\x42\x64\xb5\x56\x48\x39\x09\x77\xad\x41\x6b\x6a\x19\x7e\xc9\x34\x50\x16\xff\x93\x13\xb3\x39\xd7\x4b\x3b\xc1\xb6\xc5\x63\x71\xda\xba\x43\xbb\x5a\xb2\x1b\x55\x66\x0d\x28\xee\xad\x42\x21\x76\x30\xb9\xda\xe9\xe3\x57\xb0\x2c\x29\xd1\x6e\x1c\xeb\xa4\x9d\x34\x48\x69\x8c\x82\xe3\x87\x72\x8d\xd2\x4f\x34\x54\x0c\x98\x67\x91\x73\xeb\xb2\x8f\x92\xde\x58\xba\x3d\x97\x9e\xc2\xa4\x6e\x89\x67\xf1\xc9\x76\x7a\x1b\x8b\x6d\x93\x7d\xf8\xef\x09\x96\x64\x03\x7e\x87\x1d\x5f\xdb\xd7\xb4\x9c\x60\xac\x83\x8a\x8d\x9e\xf2\x50\x62\x6d\x09\x38\x4c\x68\xc0\x0c\xb1\x57\xe7\x98\x4a\x9a\x94\xd3\x4a\xad\x7c\x0b\x71\x95\x3c\x3b\x37\x09\x59\x8b\xda\x09\xd4\xdb\x70\x99\x85\x9b\xdc\x43\x58\xad\xf7\x4b\x6a\xef\xc8\x6a\xb6\x3c\x4d\x92\xf7\x41\x7a\x49\x73\xef\x9b\x4f\x16\x15\xa2\xad\xcb\xe8\xd3\x53\x4e\xf9\xbf\x6c\x0f\x97\x8c\x7f\x69\xab\xab\xf7\x72\x2c\x3f\x18\xc5\xa5\x40\x9d\x64\xe0\x84\x50\x4b\x6d\xc4\xc9\xfd\xcb\x2b\x19\xf1\xb9\xab\x9b\xdc\x95\x8e\x80\xc1\x06\x4c\x09\x88\x24\xfc\x6e\x26\x7e\x6d\xb8\xf3\x17\xb4\x85\x8b\x90\xe6\x0e\x66\xd7\x64\x50\xa1\xcf\x82\x15\x54\xd0\x9a\xeb\x5d\x25\xe9\xab\x78\x01\xf1\x4a\x0f\x94\x53\xeb\x7e\xc5\x8f\x3d\x8a\x50\x51\x8c\xc1\x2d\x69\x9a\x45\x54\x70\x6c\x5f\xe8\x98\x6a\x80\xdd\xb1\xa0\x2b\xbf\x29\xaa\xfe\x17\x38\xa6\xca\x6e\x6a\xbd\x30\x8d\x45\x5a\x3d\xa2\x38\x51\x9c\x0b\x36\x38\x72\xd0\x37\x54\x19\xe8\x72\x43\xdb\xb4\xae\xa4\xff\xc0\x84\xd2\x20\xea\x66\xcb\x6e\x09\xb9\x2c\xa6\x1b\xb6\xe1\x8d\x76\x79\xf5\x86\x19\xa0\xa8\x28\xbe\xd0\xe8\x3f\xd7\xea\xdf\xb2\x4d\x37\x0c\xd2\x8b\xbf\xf0\x6e\xb8\xe1\x5d\x08\x64\xbe\x64\xd9\xaa\xab\x6e\x42\x73\xa9\x19\x65\xf5\x48\xcc\x92\x96\x9e\xe4\x7f\xd1\xda\xdc\x9a\x77\xdc\x7e\x79\x16\xc9\x6c\x70\xae\x54\xde\xe4\xf4\xf9\x6f\xb3\xad\xd9\x27\x95\x9f\x1a\xc2\x08\x40\xdf\xd9\xc9\xeb\x93\xe7\xe7\x32\x2a\x90\x98\x2f\x10\xca\x9f\x1a\x7a\x20\x98\x56\x98\x1b\xa5\xbd\xf9\xab\xd3\x77\x1f\x6a\x05\x8a\xc2\x39\x3f\xf9\xf5\xfc\xe9\xfb\x93\xa7\x35\x48\xc6\x2f\xfc\xae\xf1\xe8\x30\x31\x22\x5f\x62\x01\xa8\x22\x99\x9e\xfc\x59\x12\x26\x20\x46\xde\x08\xab\x16\x6a\x1f\x27\x18\x20\x2a\x92\xd5\x56\x65\xd9\x29\x19\x8b\xbc\xde\x38\xf0\xcb\x9f\x72\x1a\xc9\x43\x9d\x83\xc4\x44\x57\x08\x51\x82\xf8\x56\x32\x89\xe3\x3a\xc7\x28\x5b\x88\x3a\xb1\xea\xc2\x69\x16\xd1\xe7\x12\xba\x8c\x1d\xdb\xa4\xac\x38\x15\xbc\xab\x2c\x18\x43\xec\x24\x73\xe1\x59\x1e\x8d\xf8\xb6\x3e\xcc\xd6\xe5\x32\xba\xdf\x5a\x01\xa5\xc9\x7d\xcd\xcf\x5c\xcd\xe5\x01\xd5\x1a\x8b\x14\x9c\xa4\x2b\xad\xf9\x74\x46\xe7\x45\x01\xff\xc8\x6c\x8e\x90\x72\x62\xb6\x4c\x7d\x8e\x43\xfe\xc9\x67\xca\xbf\xf2\x16\x67\x69\x48\xbf\x00\xbf\x14\x79\xc4\x1e\xba\x4f\x87\xd9\x72\xe9\x49\x07\x02\x4a\x73\x85\xd9\x9a\x2b\x5a\xd7\x68\xf8\x91\x28\xe6\x0e\x60\xc6\xd2\x6f\xe2\x2a\xae\x12\xc9\xd2\xde\x6f\x36\x97\xde\x37\xe5\x8d\x42\x69\x21\x37\x46\x98\x11\xcf\x6b\xe9\x28\x82\x0e\xce\xe6\xc8\x04\x3c\x90\x21\x21\x58\x3d\x8c\x02\x9b\xa5\xf3\xe1\x52\xab\xe3\xc0\x5b\xc8\x3f\x59\xc6\x4a\x0a\x0d\x3b\xdc\xe5\xb5\x54\x8d\x53\xe9\x30\x0f\xbc\xdd\xcb\x38\xf8\xdc\x76\x6e\x67\x45\x40\x98\x64\x47\x01\x98\x0c\xa6\xb3\x4c\xb4\x42\x1a\x77\xab\x97\xe1\x47\xf9\xaa\x9c\xf6\x89\x54\x2b\x42\xa4\x72\xa5\x04\xbe\xf6\x62\x5f\x79\xda\x87\x7a\xa1\xc1\x5b\x5c\x12\x06\xd6\x94\x19\xc9\x01\x64\xde\x43\x70\x1e\xe8\x3d\xb2\x49\x4c\x3d\xaf\x89\xa0\xec\xba\x3d\xd6\x8c\x35\xaf\xe3\xbf\x2b\x5d\xae\x52\x39\x35\x77\xa4\x2d\x5c\x3a\x94\x42\x3a\x6f\x97\xa4\xe1\xac\xaa\xd4\x6a\x79\x3c\x94\xeb\xc2\xc0\x59\xa6\x1e\xdb\x01\xe3\xfc\x2a\x66\xad\x20\x5e\x1a\x69\x05\x8c\x05\x50\x2e\xcb\x20\xaf\xde\xd9\x52\x29\xbb\x7e\xc0\x14\x9f\xf1\xbd\xe2\x87\x6c\xca\x4d\x5b\xd9\x7e\xe9\xa9\x50\xfb\x09\x2b\xeb\x16\x19\xbe\x5e\xbf\x54\x57\x2c\xaf\xc1\x95\x88\x52\xdf\x7f\xdb\xab\x64\x47\x53\xb7\xed\x8d\xfd\x53\x80\x77\xf6\xab\xd1\x33\x35\xc2\x5f\xed\x57\xec\x55\xae\x49\x94\xee\xb0\x81\xd5\x6e\xb6\x5f\xf5\x45\x50\x9f\x1d\xb8\xfb\xd3\xf9\x9b\xd7\x8a\x99\x91\x2f\xcf\xb3\x44\x11\x6d\x2c\xb6\xe4\x53\x85\x76\x07\x35\xc8\x2a\x87\x31\x69\xd3\xff\xb3\xc3\x0a\x54\xe4\x65\x56\x6d\xae\x3b\x26\x36\x1f\xb6\xc5\xdc\x8c\x71\x63\x3b\x36\x81\xc5\x2d\xd3\xc6\x8a\xce\x30\x6d\xaa\x3f\x52\xd7\xf5\x8c\xc2\xb1\xee\x06\x68\x1c\xb3\xa2\x30\x1f\xaa\x5d\x96\x9f\x91\xeb\x3a\x92\x44\x38\x31\x48\x68\x3d\xe9\x8e\x4d\x1b\xbc\x70\xb5\x10\x66\xa3\xb9\x74\x2c\x22\x47\xb0\xcd\x07\x7e\x43\xc4\x5e\x14\x15\x84\xc8\x3e\x80\xcf\x80\xb4\xad\xbc\x6e\xa6\x5e\x89\xd0\xc0\xaf\xe2\x62\xbb\x9b\x68\x3d\x46\xf6\xae\x23\xed\x05\x62\x6c\x0c\xe6\x6b\x96\x04\x71\x53\x6b\x4b\xcc\xc7\xda\xe5\x17\x49\x3d\x66\x04\x7a\x08\xd7\x3f\x43\x18\x26\xb9\x44\xc4\xb2\x6e\x37\xd9\xe8\xec\x26\x1e\x0c\x07\x38\xfb\x33\xe4\x43\x16\xd8\x6e\xb7\xbb\xe8\x32\x4e\x71\xd6\xb4\x2f\xb0\xef\x59\x6b\x6d\x98\xc6\xda\x5c\x7b\x93\x24\x56\xab\xdb\xdd\x36\xc6\x96\xaa\x90\x5e\xb2\x68\x07\x00\xaf\x39\x45\x40\xb7\xaa\xfd\xc6\xeb\x29\x0c\xaf\xd6\xc8\x2e\x27\xc0\x2a\x58\xb7\x51\x21\x43\x38\xca\x5e\x6f\x51\x73\x21\xcb\x15\x76\x08\x2c\x6f\x8b\x3a\x9a\x59\xb0\x3d\x2d\xcb\xb2\x2b\xe6\xe1\x15\xcd\xf5\xfc\x6a\x64\xe8\xa4\x3a\x0b\x31\xbf\x74\x67\x8a\x22\x1d\xae\xb2\xcf\x6f\x5a\x52\xf3\x96\xc4\xac\x25\xed\x96\x2e\xae\x63\x5e\xfb\xb0\x63\xd8\x25\x4f\x34\x01\x9d\x16\x4d\x74\x7a\x84\xb0\x49\x4d\x39\xc2\x9a\x06\xaa\xc1\xa2\x84\xfa\x29\xf6\x61\xa3\xb7\x46\x09\x1d\xae\x03\x46\x53\xe0\x5d\xb7\xe2\xc8\xb1\x45\xb5\x6d\xe0\x05\x5d\x6c\x2e\x89\xfa\x0f\xd6\x16\xea\xf7\x90\xd1\x4b\x31\xbb\xd8\x0b\xba\x66\x34\x04\x13\x0b\x2d\xc3\xb2\x66\x78\x33\xff\x2f\x01\x6b\xcd\xb8\xf5\x14\xe3\x0d\xda\xac\x15\xcd\x59\x90\x1e\x4c\xbc\x76\x73\x0a\xc8\x3e\x85\xa7\x6f\x74\xca\x95\x06\xae\x91\x4e\x0d\x7f\xa1\xc1\xf5\x9b\x60\x5d\x14\x1e\xd5\xbf\x89\xfa\x0f\x2a\xb4\x5f\x52\x6a\x95\x0d\x58\x33\xba\xa4\xec\x34\xd0\xf1\x38\x3f\x5e\x5a\x41\x51\xa4\x67\x20\x9c\x4a\xe7\x54\x44\xfa\xe9\xe1\x46\xfb\xbd\x9c\x50\x3a\x36\x44\xa9\x38\x63\xa9\xb8\xbd\xa0\x39\x98\x7b\x64\x72\xab\x2d\x23\xdc\x10\x42\x8c\xe1\xe2\x2e\x95\x1b\xa3\x65\x23\x1b\x90\x4d\x65\x51\x9f\x7a\x99\xf4\xff\x20\x66\x89\xb9\xdb\x8a\x91\xe1\x26\xe5\x11\x50\xd2\xcf\x58\xc0\x6d\x6c\x45\xc1\x34\x90\xcb\x33\xd5\x1e\x3b\xb6\xf8\xa3\x3c\x05\x3d\x4f\x82\x3c\xff\x1f\xf0\x96\xae\xdc\x85\x3e\xae\x33\x19\x98\xcc\xf2\x2b\xf7\x5e\x9e\xb4\xfe\xdf\xaa\xc9\x55\xb6\x5d\x5b\x17\xfe\xff\x4a\x56\x7f\x52\xc9\xaa\x44\x21\xdc\x8e\x3e\x0f\x92\xe4\xf9\x15\x0d\xaf\xff\x7b\xdc\xb4\x56\x94\x13\xb4\x15\xc1\x92\xf2\xf0\xca\x0e\x2a\x30\xaf\x68\xfe\x36\x14\x03\x18\xa1\x92\xb2\x0e\xdf\x9f\xfd\xfd\x9d\xf6\xba\x82\x53\x32\x73\x5e\x66\x6c\xf5\x22\xe0\x81\x83\x9d\x97\x71\x42\xdf\xd3\x20\xa2\xcc\xc1\xce\xb3\x24\x5b\x38\xd8\xf9\xf0\xfe\xf5\x19\x0d\x58\x78\xa5\x62\x5f\x63\x47\x5e\xdd\x3b\xd8\x81\x7d\xfc\xd9\x66\xb9\xa4\xcc\x11\x87\xde\xb4\x63\x53\x49\x08\x73\x05\x4b\x37\x0c\xb8\x37\xd3\x4d\x76\x7e\x82\x0a\x04\xa0\xf7\xf4\x8f\x0d\xcd\x39\xfc\xca\xd7\x59\x9a\x53\x01\x74\x91\x31\xfe\x3c\x4b\x39\x13\x7c\x2d\x73\xe6\x08\xe1\xb8\xa9\xa8\xc1\xd0\x3d\x9d\xb1\xf9\x2e\x95\x72\xb1\xa2\xef\x6b\x83\xbf\x43\xee\x26\xc0\x6c\xab\x62\x5a\x2e\x81\x13\xbe\xdd\x56\xf6\xc4\x36\x3f\x4f\x25\xc1\x43\xf7\xf5\xd9\xa0\xaf\xc8\x77\xb4\x11\x82\x09\x69\x0d\x9d\xdc\xe8\xae\xdf\x6f\xbf\x38\x85\x8d\x2c\xc5\xa6\xc1\xe5\x85\x7a\x9d\xf9\x6b\x5e\x76\x80\xec\x10\x02\xf9\xd9\x1a\x42\xb9\x96\x64\x98\x04\x1d\x4d\xa0\x91\x6a\x42\x09\x54\xef\xce\xbe\xa1\xda\x78\xe9\xb5\xd4\x8c\xca\x5d\xa2\x51\xd7\x2e\xe1\x4d\xbc\x04\x89\x0d\x78\xda\xb6\x37\x2c\xa6\x83\x12\xa4\x60\xdb\xa8\xef\x32\xe2\x7c\x2d\x58\x20\x68\xe2\x57\xb4\xf1\xc0\xc6\x4a\xac\xfd\x96\x86\x5a\xfb\x99\x3d\x13\xdb\xdd\x33\x18\x0d\x78\xe5\x3a\x0c\x74\xf4\x74\xb8\x1e\xab\x8f\x50\x99\x58\x3f\x23\x9c\x95\xf2\xa1\xf8\x28\x9b\xc4\xfd\x3e\x62\x5e\x3a\x8b\x8d\xf8\xa7\x67\xd4\xee\xdf\x31\x88\x27\x40\xa3\xad\x11\x16\xe3\x74\xb7\xc9\x79\xeb\xd4\x54\xda\xc7\x94\x7c\x61\x17\xfb\x8f\xaa\xfd\x52\x7b\x86\x31\x7d\xc6\xdb\x6d\xcc\x11\x2c\x94\xfe\x98\xb6\xe4\xf8\x32\x41\xff\x02\xa4\x2c\x05\x58\x06\x12\x1c\x5e\xbe\x0c\x8b\x9a\xb5\x65\xb6\x46\x10\xfe\x54\x96\x9a\xd1\xa8\xd5\x07\xd7\x96\x2b\xb2\xda\x01\x18\x88\xda\x59\x7c\x99\x06\xc9\xdc\xf9\xf6\x59\x29\x91\x21\xe5\xee\x02\xcb\xfa\xb2\x57\xe1\x08\x38\xa1\x26\xe7\xaf\xa4\xab\x90\x49\xdd\x05\xaa\x37\xcb\xcd\x86\x38\x87\x7d\x04\x55\x4b\xdb\x87\xc7\x57\xc7\xd8\x62\x65\x71\xbd\xfd\x30\xee\x95\x2a\x8c\x7a\xdc\x4e\x9b\x85\x7f\x8e\x66\xe6\x80\xc9\x72\x60\xe9\x6d\x37\xfd\x0f\xd1\x4c\x39\x4f\xbe\xe5\x52\x1a\xc4\x9f\x10\x0c\x48\x95\xb2\x6e\xa1\xdb\xce\x27\xfa\x24\x3c\xad\x6b\x9c\x08\x18\x53\xaf\x61\x28\xac\x60\x4b\x94\x22\x04\x1a\x54\x95\xfa\x70\x6f\x8c\x7b\x63\xe4\xef\x28\x2a\xd1\x06\x4e\x11\x05\x33\xa5\x0a\xf9\x94\xdc\x8b\x77\xd3\xd5\xc5\x66\xb1\x48\x68\x2e\x56\x57\x28\x78\x94\x44\x31\x4f\x5b\x15\x3c\x1c\x10\x3c\xac\x0c\xb0\x7d\x9b\xfe\x27\x67\x7e\xb9\x9d\x8b\xd9\xaf\xaf\xb6\xfe\xac\xf1\x98\x17\x97\xb3\x6f\xd6\xcc\x30\x27\x0d\xde\x01\xa7\xdf\x54\x42\x2e\x4c\xa7\x7a\xf8\x6d\x75\x73\x31\xfc\xf8\xf1\xe5\xdb\xf7\xcf\xa5\x45\xec\xd3\xd7\xaf\x3f\x3e\x7d\xf6\xf6\xfd\xf9\xf3\xb7\xa7\xe7\xef\xdf\xbe\x7e\x7d\xf2\xfe\xe3\xbb\xb7\xaf\x7f\x7b\xf9\xea\xf5\xeb\xa9\x27\x18\xd5\x2c\xa1\xc3\x24\xbb\xf4\x9c\x6f\x2d\x46\x38\xdb\xd0\x6e\x9c\x77\x73\xca\x71\xf7\x36\x4e\x92\xee\x32\x63\xa1\xe2\x25\x93\xa4\xbb\xce\x92\xbb\x65\x9c\x88\xc6\xf6\x46\xad\x02\x1c\x3a\x54\x6c\x15\x44\x23\x56\xbf\x77\x9a\x55\x79\x7a\x2d\xa1\xa2\xe8\xd1\x61\x0d\x81\x5b\xe4\x51\x08\x7c\x59\xff\x40\x62\xac\xd2\x24\xee\x48\x8a\xb6\xe5\xb5\x36\x9f\x72\x9f\x8a\x73\xf5\xa4\x25\xd6\xc7\x7d\x6e\x71\x93\x7e\x83\xbd\x14\x7b\x2e\x06\x7d\x54\x31\x21\x35\xaf\x19\xcb\xb8\x86\x5a\x4f\x55\xbc\xcb\x2f\x78\x91\x64\x0b\xdf\x66\x5c\x55\x56\xe0\x5e\xe5\x6f\x5b\x73\x81\xdd\xdd\xdb\xbe\x60\x92\x6c\x81\x7b\x23\xb5\x82\xcd\x38\x8b\x65\xe0\x21\xbc\x54\x8c\xb1\x5f\xb2\xc8\xd0\xba\xa0\x64\x7b\xfd\x0a\x0f\x2c\xbe\x6e\xa5\x54\xdc\xca\x83\xe4\x91\x7f\x66\x96\xc4\xab\x94\x3f\x81\x62\x73\x07\x9b\x44\x70\x0b\xd1\x9e\x6a\x3b\x8b\xb0\x3f\xbe\x4a\xf9\xf8\x51\x6b\x91\x96\xe4\x57\x29\x3f\xd8\x6f\xcd\xdc\x92\xfc\x32\xc9\x82\x9d\xe9\x8f\x1e\xa8\xf4\x39\xce\x88\xd5\xfd\x61\x9c\xff\x3d\xa6\xb7\x45\xd1\xae\x27\x5c\x86\x90\xfa\xaa\x00\x18\x1d\x0f\x6a\x31\x9c\xe4\xe1\xb4\x61\x04\x09\xb2\xc6\x33\x73\x01\x81\xf7\x66\xff\x08\x06\x9f\x47\x83\xc3\x8b\xc1\xff\xf4\xdd\xf7\xee\x5f\x7e\xe8\x0f\xff\xf1\xf1\xdf\x8a\xff\x79\xbe\x17\x0f\x39\x95\xb7\x2f\xad\xe7\x30\xad\x0b\x60\x5c\x31\x08\xde\xef\x0a\x26\x54\x77\x19\xd3\x24\xea\xa6\xc1\x8a\x3a\x16\x53\xc3\xb3\xd7\xd9\x2d\x65\xcf\x83\x9c\x7a\xd6\x79\x30\x6f\x4a\xcf\x77\x37\xd7\xf2\xda\xb5\xb1\xec\x89\x53\xfa\xa9\xa1\x3d\xc3\x09\x1d\xca\x58\xef\xc8\x98\x87\x67\x29\xb5\x3c\xa8\x2a\x4a\xcc\xb7\xa5\x11\x71\x3a\xd4\x0b\x49\x30\x0e\xb3\x9a\xb2\xf7\xbc\x45\x17\x93\x43\x58\x38\xd3\xaa\xc4\x68\x46\xad\x82\x35\xb9\xdf\xe2\xca\xa1\x36\x99\xd2\x16\x05\x7a\xe3\x87\x4f\xaa\xec\x49\xbe\x57\x39\x1d\x6d\xb8\x51\x6c\x03\x50\x2d\x4e\x67\xa3\x39\xa6\x32\xf0\x9f\x04\x42\xcd\x99\xaf\x2a\x3e\x3b\x0d\x56\x54\xa0\xbf\x09\xb2\xd9\xa2\x19\x37\xf0\xec\xb0\x4e\x72\x9e\x51\xb8\xa0\xfa\x90\xd3\x08\x19\x16\xbe\xdd\x61\xcf\xd3\x84\xd1\x20\xba\xeb\x8a\xa7\x83\x50\xa7\x2c\x49\x7a\xa3\x12\xf0\xd2\x76\x87\x4e\x6f\xbb\x96\x0b\x25\xb8\xdd\xa0\xc3\x2c\x4d\xb2\x20\xaa\x04\x59\xf6\x20\x40\xc5\x26\xe1\x10\x95\x28\x4b\x69\xd5\x51\x34\xba\x67\x1e\x95\x71\xb3\xd0\xd6\xf6\x60\x75\x55\xce\x24\x51\x57\x49\x19\x31\x23\xb6\xa0\x90\x0f\x45\xab\x9f\xe6\xd6\x0a\xf6\xaa\x61\xae\x22\x83\x0f\xb8\x48\x37\x92\x63\x1d\x0e\x53\x1e\x1e\x64\x35\x25\xf9\x12\xe8\xbb\xe3\xf4\xb5\xd4\xd8\x28\x6b\xcb\xa9\x44\x9f\x9d\x13\x21\xcc\x87\x0b\xa8\xbb\xac\x76\x5d\x53\x89\x29\x51\x3a\xb6\xc2\x74\x3c\xcb\xa2\xbb\x16\xbd\x17\x99\x41\x14\x79\x95\xc6\x9c\x50\x4c\xa7\x2d\x86\x22\x65\x2e\xd0\x64\xa4\x7e\x3a\x14\xfb\x88\xeb\x8a\x0d\xc1\x22\x4c\x71\x5e\x11\x04\x21\xab\xa0\xc8\x09\x05\xf5\x2e\xe1\xba\x7a\x97\xf8\x36\x00\x3a\x37\x00\xb1\xf7\x44\xd7\xad\xed\x89\xdf\x06\xef\x5c\xa9\xa1\x1b\x8d\x12\xbf\xb2\x0b\xb9\xae\xee\xa3\xe7\x71\x22\x76\x75\x51\xb9\x20\xd8\x3b\xc1\x73\x84\xa6\x5e\x59\x81\x35\x51\x48\x24\x46\x59\xee\x6e\xb8\x86\x72\xbd\xaf\x7a\xb3\xd6\xa2\x73\xd4\x68\x98\x67\x6f\x22\xbb\xfb\x5a\x14\x99\x98\x31\xd3\x9d\x2d\xd2\xc1\x1d\x4a\x6c\x7c\xfd\xae\xb1\x5e\xc4\x51\xda\xba\x92\xf6\xe7\x82\xc4\x18\xad\xa1\x81\x80\x20\x18\xa5\x96\x5b\xaf\x69\xa5\x54\xde\x28\x85\x41\xb3\x7c\x6f\x9d\x04\x71\x3a\x11\xbb\x4c\x4e\x39\xf9\x70\xfe\x72\xf0\xc4\xb1\xdb\xf0\x0c\x46\xa8\xfa\x0e\x8c\xfc\x57\xe1\xb7\x94\x41\xff\x81\x89\xa5\x1a\xf1\xa5\x0e\x05\xeb\x75\x12\xcb\x9b\x9f\xbd\x4f\x83\xdb\xdb\xdb\x81\x58\x0a\x83\x0d\x4b\x68\x1a\x66\x11\x8d\xea\xfd\x04\x77\x88\x6a\x0e\xca\x95\x2d\xd6\x50\xe3\xb8\x15\x96\x61\x28\x69\xc5\x35\x43\xb5\x8b\x36\x6d\x96\x2e\xd0\x6a\xdf\xab\x45\xac\xb9\xd2\x2c\xf9\xf5\x39\x5b\x05\xa6\xd7\x6e\x53\x25\x26\xcc\x36\x82\x59\x80\x08\x54\x41\xd4\xd5\x19\xbb\xa2\x54\x37\xc8\xbb\xa2\xcb\x25\x1b\xf1\xe5\x16\x88\x09\x29\xaf\xe8\x61\xf3\xb2\x26\xfb\x2e\xe5\xc1\x5a\xbb\xa7\x0a\x95\x45\xd1\x86\x24\x1b\x23\xbe\x19\x0f\x4f\x79\x91\xbb\x42\x3a\xce\x3e\xd8\xb7\xd4\x47\x09\x73\x9c\xe2\xd8\x1e\xab\xf2\x4a\x69\xf7\x58\x69\x7f\x82\x3a\x1d\x37\xf6\xa8\x14\xf6\x28\xac\x37\x27\xd0\x1f\xa7\x08\xa7\x7f\x62\x30\xdb\xf5\xc8\x1a\x5b\x4f\xd5\x81\xbc\xd1\x30\x4c\xc9\x68\x92\x96\x17\x55\x5a\x4f\x4c\xb1\x6d\xc3\x25\xcb\x56\xcf\xaf\x02\xf6\x3c\x8b\xa8\xf4\xf2\x52\x8e\xe5\xef\x59\x9c\x7a\x8e\xa3\x7c\xc7\x34\x5b\xfa\x2f\x9b\x44\x60\x04\xda\x32\x89\xaa\x53\x07\x96\x5b\xb9\x3b\x29\x5b\x00\xbd\xeb\xec\x98\x42\x60\x6b\xab\xa6\xc0\x9d\x99\x02\xbf\xe7\x59\xfa\x2d\x25\xfe\x7a\xf6\xf6\x74\xb8\x16\x8b\x5e\xcd\xda\xad\x65\xe1\xa7\xd8\xaf\xda\xad\x36\x25\x01\xc4\xfd\x21\xb9\xc7\x75\x70\x5b\xcd\x71\xce\xa8\x0a\xc2\x2c\x7f\x13\x36\x65\x7d\x07\x77\x9d\x3e\xf7\xf9\x16\xdb\xa0\xa5\x12\x1c\xa9\xde\x94\x80\x5e\x9c\x29\x2f\xaa\x99\x57\x4b\xd9\x57\xb8\xf6\x61\x45\x35\x49\x9a\x13\xe4\x66\x9b\x95\xad\x90\xf1\x53\x2b\x70\xae\x82\x7c\x67\xcc\xfc\x55\xb0\xae\x1f\xb9\x05\x74\x54\x85\x90\xd3\x56\x57\xd6\xa6\xdd\x80\x9d\x6a\x11\xc5\xe5\xb6\x28\x09\x00\x12\x8d\xf0\x7a\x15\xac\xd1\xae\x96\x30\xd0\x7f\x55\xe2\x69\x53\x23\x9b\x63\xa6\x78\xe3\x4a\x8d\xd7\xf4\x2e\x6f\x92\xeb\xd9\xbc\x12\xb9\xbb\xc9\x7c\x4b\x0e\x17\xae\x0c\x40\x37\x4d\x1c\x75\xaa\x80\xe1\xe4\xf2\xcf\x80\x36\x80\x79\x3b\x60\x9a\x72\x16\xff\x53\x90\xad\x46\xcf\x18\xe6\xf3\x12\x7e\xe5\x50\x95\x34\xe5\x4b\xe5\xf1\xaa\xa5\x25\x3a\x8a\xfb\xcc\x79\x71\xf2\xfa\xe4\xfc\xc4\xc1\xce\x8f\x27\xe7\x0e\x76\x7e\x3a\x79\xfa\xc2\xc1\xce\xdb\x77\xe7\xaf\xde\x9e\x9e\x39\xd8\x79\xf7\xf6\x4c\xa4\xbf\xfb\x70\xee\x58\xf1\x87\x6f\x2c\x95\x17\x20\xc0\x1e\x27\xbc\x28\xee\xb7\x08\xd8\xe4\x8e\xba\x5f\x31\x47\xb4\x9b\xfa\x81\xa6\xf5\xf4\x5b\x3d\xc6\xc8\x25\xb7\x61\x09\xa1\xe2\xa9\x8c\x79\x18\x8d\x68\xca\xe3\x20\xc9\x09\xb5\xdf\x30\xd7\x4c\x82\xbe\x3f\x52\xaf\x40\x5d\x13\x8f\xea\x77\xa4\x56\xd4\x8a\xf2\xab\x2c\x22\x54\xfd\x50\x89\x59\x44\x45\x52\x16\x29\x37\x64\x52\x2a\x25\x0e\xbd\xf0\x03\xc7\x45\x21\x35\x1b\x68\xc9\x6a\x42\x68\x48\xeb\x1d\x57\x8e\x5f\xb6\x23\x57\xd1\x19\x73\xee\x36\x54\xd8\xee\x13\xb7\xdf\xa4\x03\xde\x6a\x8a\x93\x07\x2b\x3a\xc8\x58\x7c\x19\xa7\x0e\xee\x99\x5e\x57\x19\xa5\x76\x1c\xf0\x1d\x38\xf0\x18\xe1\xea\xb7\xaa\x52\xbf\xc8\x59\x91\x12\x36\xe4\xd9\x87\xf5\x5a\xcb\x19\xf0\xca\x08\x51\x52\x74\x3c\x18\x4f\x53\x5f\x33\xe0\x80\x41\x0e\xff\x34\x2c\xf8\x59\x1a\x94\x29\x94\x72\xf5\x43\xe5\x52\xf8\x55\x26\x3d\x4b\xca\x98\xb6\x42\xf3\xa0\x11\xda\xfe\xc2\xb4\x0c\x66\x6a\x35\x15\xb9\x6e\xdc\x3e\xb3\xc4\x29\x0d\x36\xb2\x20\x49\xb2\x5b\x1a\x75\x97\x19\xeb\xfe\x78\x72\xde\xcd\x58\x57\x00\x02\xd5\x61\x9a\x83\xc2\x70\xf5\x6c\xe7\xc5\xd5\xe0\xb3\x95\x33\xad\xda\xc4\x2c\x69\x0c\x8b\x57\x1e\x82\xab\x3f\xee\x39\xae\xd3\x22\x04\x50\x67\xd9\xd2\x6c\x41\x65\x26\x0e\xa8\x6d\x6b\xe9\xca\x90\xd1\x75\x12\x84\xd4\xdb\xbb\xe8\xef\x5d\x62\xa7\xeb\x80\x9e\xb4\xda\xdc\x89\xd3\x96\xa1\xc3\xb5\x68\x21\xa2\x82\xf3\xfd\xf0\xfe\x95\xf1\xc6\xe7\xa5\x08\xb7\xa4\xc6\x08\x9c\xe9\xf1\x46\x8c\x5b\x19\xb2\xff\xde\x30\x5f\x20\xc4\x37\x5e\xc2\xe4\x90\xf1\x80\x6f\xf2\xd2\x33\x27\x57\x29\xd3\xfd\xd1\xc8\xd7\x2f\x4a\xc7\xfe\x9a\x58\x45\x8e\xc9\xfe\x68\xa4\xed\x84\x21\xe5\xe8\x60\x34\xb2\x81\xca\x33\x50\xf9\x1b\x44\x9a\x53\x6e\x7d\xf5\x9d\xb7\x7f\xab\x9e\x91\x1a\x93\x1c\x9b\x35\xc7\xc5\xb3\x28\xf4\xa1\xaa\x1c\x5c\x8a\xb6\x37\x16\x75\x0c\x93\xac\xd5\x33\xa9\x80\x7c\x23\xef\x7c\xee\xc5\xd2\xf6\xab\x67\xcd\x2d\xda\x62\xa5\x39\x78\x63\x5f\x4c\xa9\xb4\x4b\x3b\xed\xf2\x1b\xab\xbb\xf4\xaa\x75\xe0\x7b\xd9\x77\xdf\xc2\x12\xb6\xd0\x51\x43\x1e\x56\x48\xf0\x15\x52\x2c\x3c\x21\xbc\x61\x89\xaf\x71\x23\xda\x7e\x39\x6c\x08\x75\xe4\xf6\x24\x1b\x02\xab\x50\x57\x3f\xb2\x2b\x75\x9c\xad\x2d\x8a\x84\x39\xa2\x23\x80\x49\xb7\x00\x0b\x32\x3b\x18\x8d\xf1\xc1\x68\x1f\x1f\x8c\x0e\xf0\xc1\xe8\x31\x3e\x18\x3d\x99\x77\x2e\x87\x8c\x46\x31\x6b\xc6\x6c\x89\x97\xde\x60\x4c\x08\x59\x58\x91\xfe\x6d\xb5\xa5\x20\xbd\xac\x0b\x4b\x65\x83\xba\x62\x6e\x57\x5d\x43\xd7\x9a\x5e\x22\xe5\x3e\xc9\xe4\x81\xd1\xa7\x5b\x08\x01\x38\x7c\xf1\xf6\xcd\xc9\xa7\x90\x82\xf5\x3f\xe1\x95\x57\xb8\x70\x83\xe0\xaf\x95\x64\x25\xac\xbf\x05\xf5\x44\xbb\x74\x1b\xff\xa4\x3c\xdf\xaa\x4d\x25\x0d\x56\x94\x70\xc5\x64\xaa\x78\xd7\x8a\xee\xe8\x40\xf4\xf0\xbf\xde\xb0\x9d\xca\x49\x00\xc3\x9e\x65\xbb\xca\x55\x1c\x61\xd4\xfa\x53\xea\x12\x41\xac\xe1\x1d\x82\x42\x56\x6a\x39\xab\x55\x81\x63\xd8\xca\x02\x45\xc2\x5d\x57\xff\xd2\xd7\xc3\x26\xf0\xb0\xd7\xc4\xa2\x27\x6f\xbe\x68\xa4\x35\x6e\xa0\x2b\x0e\x92\x0c\x8a\x5c\xd3\xbf\xbe\x79\xfd\x13\xe7\x6b\x75\x85\x64\xfb\x58\x43\xf7\xea\x0e\xda\x43\xdb\xbc\x45\x78\x69\x8e\x88\x44\xcf\x81\xb6\xa5\xd3\xba\x6e\x3c\x4a\x40\xea\xf2\x34\x49\xb4\x52\x90\x52\x18\xf2\x90\xa4\x24\x92\xde\x60\x6a\x11\x62\x36\xbd\x48\x67\x17\xbc\x3b\xd7\x14\x59\x11\x77\xf9\x65\xaf\x7d\x37\xa8\xed\x03\x7e\x6d\x1f\x90\x5b\x4a\x47\xba\xa2\x97\x57\x38\x7a\x17\xf0\x1d\xf3\xd9\x50\xfe\x14\xc7\x92\xa2\xa3\x6d\x27\x05\xe2\xe7\x30\xd5\xfe\x0f\xef\x5f\x0b\x3a\x9a\x4f\xc1\x4d\x86\x4e\xf2\xd3\xaa\x90\xe9\xd7\x81\x42\xf4\x40\xe4\xd7\x8a\xa2\x06\x48\x1d\x82\x5f\xfe\x14\xf8\xeb\x30\x4f\xae\xbc\x18\xa7\xe2\x70\x91\xb7\x49\x8c\xb3\xba\xfc\xfa\x94\xf2\xdb\x8c\x5d\xeb\x5d\xb8\xbb\x84\x30\x89\x8e\x06\xc0\xa5\x4e\xcb\x7f\x04\x04\xcc\x92\x26\x80\x6f\x9c\x8c\x00\x63\x4d\x53\x2f\xd0\xdc\x62\x00\x2c\x69\x6f\x84\xb0\x13\xa7\x61\xb2\x89\xa8\xe0\x45\x02\x9b\x57\x9b\xe6\xc3\xdb\x98\x5f\x3d\xb7\xb8\xbb\xde\xc8\x77\xb2\x55\xcc\x1b\x79\x5d\xd7\x6b\xc9\x3d\x46\xd8\xe0\x5d\x74\x15\x70\x6f\x09\x50\x2d\xd4\x03\xe9\x95\x42\x1d\x1c\x98\x01\x6d\xbf\x15\x01\x31\x9a\x1a\x64\x39\xa7\x95\x52\x10\x2e\xd7\xb0\x57\x2e\xe2\x86\x9b\x0b\x75\x75\xbf\x41\x80\x59\x60\xd9\x21\xbe\x50\x78\x25\x88\xb3\x8d\xe4\x07\x84\x90\x1c\x44\x28\x77\x67\x32\x30\xbd\x01\xdb\xea\xa7\xc0\x40\xde\x0a\xd8\xb9\x98\xcf\x86\xbb\x08\xca\xbd\x70\x2a\xc8\xba\x6f\x25\xa0\x2d\xda\x7e\x1c\xea\x3b\x69\xd2\x1b\x61\x3e\x04\x35\x3f\xc1\xc4\xc8\x5f\xe4\x23\xe6\x43\xb5\x82\x49\x82\xb9\xbe\x91\x26\x37\xf0\x5b\xa2\x91\x5c\x0a\xd2\x59\xe6\xa2\x56\x2e\x6a\xe5\xc2\x54\x03\xdd\x22\xef\x7e\x2b\x8d\xc3\x54\x45\x4d\x31\x0a\x24\x77\xe3\x1c\x18\x50\xa5\x69\xd0\x1d\x74\x57\xc1\xdd\x82\x76\xef\xb2\x0d\xeb\x2e\x58\x76\x9b\x53\xd6\x95\xd6\x1f\x79\x37\x60\x14\x32\x87\xd9\x0d\x15\xa7\x85\x2e\xbd\xa1\xec\x8e\x5f\x89\x9f\x77\xd9\xa6\x9b\x52\x1a\x4d\xd5\xda\xcc\xec\x20\x07\x81\x75\xec\xcf\x06\x03\x4c\xb7\x5a\xdd\xf2\x9c\xe6\x7c\xea\xd9\x6f\x96\x2a\x7c\x5c\x0b\xee\xa9\x20\x08\xb4\x67\x82\x96\x18\xd7\xd2\xcd\x3c\x59\xbf\xaf\x91\xad\x6c\x33\xa8\x65\x98\xd1\x8c\x04\x61\xb8\x05\x60\x7e\x3c\x54\x11\xf6\x05\x38\x40\x98\x56\x23\xc0\x49\x74\x82\x24\x84\xca\x40\x9a\xa6\x35\xaa\x5e\x29\x5e\x6a\xd0\x55\x2d\x78\x99\xd1\x39\x68\x4f\x56\x54\x56\xf7\x82\xdf\x83\x4f\x3b\xf4\x56\xed\xd8\xad\x56\xd4\x5a\xb5\xce\xa3\xee\xbf\x95\x10\xfe\xad\xbb\xd8\xf0\x6e\xcc\xbb\xb7\x41\xde\x65\x54\x6c\xec\x10\xdd\xf5\xdf\x40\xf3\x7f\x60\x65\x74\xc4\x1c\x45\xad\x96\x21\xd5\xa8\x12\x6d\x39\x2e\x93\x6c\x11\x24\x53\xf9\xaf\x35\x47\x4e\x93\xe5\x54\x3c\x7c\x29\x30\xb1\x47\xb3\xa2\x84\x2b\xc7\xff\xe3\x2a\x8b\xe2\x65\x4c\xd9\x9b\x20\x0d\x2e\xc5\xb1\x6e\x1d\x2c\xe2\x84\xc7\x34\x27\x5f\xcc\x11\xf3\x8a\x1c\xc3\x1a\xd0\xa2\xf0\x28\x71\x0e\x86\xe3\x03\x07\xe1\xfb\xed\x76\x8b\x6c\xbf\xe3\x5f\x73\xc3\xdd\xd2\xa5\x7f\x91\x27\x6e\x50\x9a\x7e\x9e\x45\xf4\x4d\x0c\xfb\x50\xab\x53\xed\x86\x9e\x32\x25\x69\x70\x13\x5f\x06\x3c\x63\xc3\x4d\x4e\xd9\xd3\x4b\x9a\x72\xb1\xe7\x9b\xd4\x75\x12\xf0\x65\xc6\x56\x98\x91\xbd\x4b\x1a\x5e\x67\x17\x7b\x17\x51\x79\xbf\x8f\x53\xb2\xf7\xe6\xec\xd5\x49\xf7\x22\xda\x33\x69\x31\xd9\x3b\x67\xb1\x20\xf0\x17\x7b\xde\xd4\x9f\x3d\x1e\x1c\xce\x8b\x8b\xe8\x7e\x1f\x6f\xd1\xc5\x70\xf8\x03\xbb\x91\xa1\x23\xf6\xc0\xd5\x88\x28\x91\x91\xbd\x93\xe8\x92\x5e\xec\xd5\xd2\x03\x92\x16\x45\x5c\x14\x19\xce\x49\xe0\xba\x5e\x3a\x6d\xb8\xcc\x79\x03\xe7\xee\x47\x7e\xdf\xcb\x8a\x22\x46\xb3\xf1\x1c\xe1\x0d\xe9\x65\xae\xbb\x27\x43\x92\x5c\xec\x95\x2d\x4b\xc8\xc6\x75\xf7\x7e\xe6\xa2\x13\xfd\x8b\xe1\x45\xd4\x2f\xbf\x85\xb2\xd0\xf3\x2b\x96\xad\xa8\x5d\x68\x49\xf6\xde\xae\x29\x0b\xec\xb4\x2b\xb2\xf7\x74\xbd\x4e\x68\x57\x9c\x31\x37\x9c\x32\xf5\xa9\x44\xdc\x0d\x4d\xa3\x8c\x21\x1c\x91\xbd\x37\x41\xd8\x7d\x7b\xd6\xfd\xb5\x3b\xbe\x88\x2e\x5e\x78\xb3\x27\x12\x1f\x17\x11\xba\x78\x51\x82\x5c\x93\xbd\x77\x57\x41\xca\xb3\xd5\x5f\xcf\xca\xd4\x95\x6c\x15\x54\x26\xfb\x63\xbe\xb9\xee\xde\x9b\x6c\x11\x27\xf4\x62\xef\xe2\xd6\xea\xc8\x0d\xd9\x7b\x9a\x46\x2c\x8b\xad\x21\xb9\x23\xab\xa2\xb8\x29\x8a\xbd\x5b\xba\x78\x7b\x56\x3c\x4b\x82\xf0\xfa\x19\x65\xec\xae\x80\xae\x75\xdf\xc4\x69\xac\x7f\x66\x8b\xb8\x78\x75\x22\x41\x5b\x23\x7d\x29\x40\x88\xbe\x28\xa8\x1c\xe1\x05\xd9\xbb\x58\x3c\x67\x6f\xcf\x2e\x16\x65\x55\x1f\xc9\xde\x6d\x9c\xea\x82\x1c\xe1\x5b\xb2\x34\x46\x51\xde\xde\xdf\x65\x64\x11\x18\xea\x1f\xc4\x10\xfc\x80\xf6\x50\xe7\xd6\x75\xbd\x5b\x72\xba\x11\x8b\xd2\xbb\x15\x83\x88\xf0\xad\xeb\xde\x1e\x93\xf1\x43\xd7\xf5\x96\xa4\x37\x16\xa3\xaa\x2e\xc1\x4f\xc8\xa5\xeb\x7a\x49\x51\x2c\xc5\x9c\x00\x41\xd5\x6d\x51\xdc\x1e\x8d\xf7\x87\xe3\x31\x42\xf8\x13\x61\x45\x11\xb8\x6e\x7e\x4c\x0e\x2b\x31\xcf\x2b\xec\xfe\x7b\x7a\x79\xf2\x69\xed\x39\xde\x3f\x8a\x8b\x8b\x1c\x39\x7d\xda\x77\xbc\xa9\xff\x1d\xbc\x5d\x5c\xe4\x3f\x38\x32\x5e\xc2\x5b\xfc\xb4\x35\xe2\xa6\x20\xee\x41\x9e\x9f\x06\x2b\x8a\x53\x72\xe6\x71\x24\xe7\x2d\xab\xb3\xb1\xf2\x02\x3f\x95\x47\xbd\x7e\x3a\x1b\xcd\xf5\xfd\x47\xc7\x82\x61\x32\x8e\xb0\xca\x8a\xfa\x5e\x3c\x4d\x67\xe3\x79\x3f\xf6\x1d\x07\x6d\x2d\x25\x9d\xeb\x7a\x98\xde\xf0\x2a\x4e\xa2\xd3\x2c\xa2\xda\xdd\xcb\x84\x1f\x8f\x26\x83\x01\x47\xb4\xe2\xa2\x88\x0e\x21\xe2\x38\xbc\x94\x87\xda\xf2\x54\x74\x5e\x8d\xb5\xe5\x51\x54\x75\x06\x85\x6a\xb1\x98\xed\x58\xfd\x3b\xbc\x7c\x49\x19\x20\x03\x8d\x42\xab\xb7\x60\xe5\xe3\xc5\xca\xa7\x55\x98\x4b\x69\x48\x8a\x70\xe3\xba\x97\xa3\xb8\xd2\x88\x5d\xc1\x5e\x38\x42\xc6\xb9\x46\xc5\x11\xc0\x24\x2b\xaf\x98\xfa\xfd\xac\x06\x8e\x57\xec\xfd\x5b\x83\xf0\xca\xfe\x95\x1d\x2e\xbd\x03\xd4\xfc\x6d\x64\x09\x75\xb0\xb3\x66\x34\xa7\xa9\x8c\x84\xe4\x20\x1c\x37\x42\xf3\xc6\x4b\xef\x80\x10\x6e\x4c\x0b\xc1\x7e\x8d\x5b\xf6\x81\x82\x41\x53\x3e\xa6\xf2\x52\x13\x44\xa7\x78\x1c\x75\xa2\x0c\xbc\xeb\x8f\x5b\xc0\x5c\x65\x39\x47\x98\x13\xa2\x2f\x74\x7b\xa3\xed\xed\x55\x9c\xd0\x7a\x25\x65\xbb\xde\xe9\x63\x64\xdd\x19\x54\x10\xf2\xf8\x46\x0f\xa5\x12\x06\xbc\xa7\xc8\xce\x22\xd8\x53\x29\xf9\xdc\x96\x46\x93\xf9\x55\x10\x65\xb7\xef\x21\x4a\x85\xfd\x56\x05\x38\x41\x94\xec\xfe\xda\x32\x3d\x7f\xdf\xb1\x00\x3b\xb0\xfc\x80\xe2\x30\x04\x76\x87\xe6\x53\x9f\x78\x6c\xea\x74\x1d\xb1\x84\xfa\x2d\x91\x5e\x4b\x1b\x03\x73\x38\xed\x3a\xfa\x66\x92\xd5\x6f\x26\x5d\xb7\x77\x06\xa6\x10\x48\xd3\x37\x81\xf4\x3e\x71\xba\x4e\x9f\xd9\x17\x94\x7c\xfb\xb6\xd5\x89\x49\x4b\x78\xe9\xd6\xd5\xa3\x3d\x9e\xd8\x33\xed\x44\x9c\x7c\x8b\x82\xca\x78\x14\x39\xe5\x67\x3c\x60\x32\x10\x1e\x8e\xb7\x3b\x9c\x87\x54\xc6\xc9\x5a\x32\xba\x02\x90\xfb\x0c\x05\x85\x38\xcf\x14\xe2\xe5\x3d\x70\x65\xa6\x94\x23\x6f\x62\x19\x18\xb5\xb7\x30\x4b\x92\x60\x9d\x53\x4f\x1c\x14\x25\x28\xd1\x52\xc7\xa8\xf7\x39\x60\xd3\x07\x1f\x64\x8b\xed\x4f\x1c\x61\xe5\x5c\xb3\x1a\x41\xb7\xf4\x56\xb3\xad\x04\x60\xd5\xa2\xe9\xba\x59\xf3\x0e\xbf\x25\x9d\xba\xf5\x61\x23\x1e\xa0\x94\xd9\x23\x2b\xca\xfc\x6b\x8d\x41\x13\x03\x1a\xee\xf7\x8c\xac\x98\xa2\x5e\x43\xb3\x37\x45\x45\xd1\x1b\x13\x42\x98\xeb\xf2\xb6\x8f\x70\x7f\x0d\x31\xd2\xad\x39\x62\xaa\x7c\x69\x07\xcd\x94\x5b\x1a\x77\xdd\xc1\x98\x10\x0f\x94\x11\x41\x8f\xc4\xdb\x9b\xfd\xe3\x22\xbf\xd8\x8c\x46\xc1\x68\xbe\x87\x60\xea\x19\x57\x03\xa8\x53\x52\xbc\xb4\x28\x46\x38\x20\x71\x51\x8c\x26\x13\x1d\x70\x9e\x1a\x59\xa3\x73\xc1\x1d\x9c\x01\x59\xce\x8f\x46\x45\x91\x1f\x97\x66\x3d\x41\xdf\xe3\x83\x0c\x75\x82\x3e\xc9\x07\x19\x0e\xfa\x84\x0d\x82\xef\x19\xce\x48\xde\x1f\x6f\xb7\xab\x69\xfb\x28\xc5\x59\x0a\x43\x4b\x46\xd8\x4a\x3a\x49\x23\x52\x75\x2a\xb4\xf5\x05\x1f\x57\x85\x01\x24\xa7\x1c\x6d\xa3\xe0\xbf\xdd\xca\xed\xfe\x73\x45\x53\xef\x2a\xce\x87\x71\x64\xbb\xee\xb3\x7e\xf3\x78\x45\xc9\x48\x5f\x26\x4b\xbb\xe7\x57\x9e\x32\xca\x50\x46\x43\x3a\x08\xbb\xc1\xfd\x4f\x6d\xc6\xb3\xb4\xdc\x30\x18\x8a\x97\x1e\x58\xa8\x95\x68\x62\x6a\x0c\x07\xe3\xed\x67\x6b\x12\x9a\x4a\x6a\x48\x8a\x23\x40\x8c\x68\xde\x11\xe9\x0b\xee\xe3\x45\xc0\xe9\x94\x0e\x97\x1e\xf2\xed\x08\x58\xba\xd5\x2a\xf3\xc0\xe4\x45\x5b\xfc\xf9\xeb\x57\xd8\x4b\x23\x70\x35\x05\xfb\x74\xe2\xf5\x14\xd6\x8a\x82\x1d\x19\x3c\x89\xe9\x03\x9e\xee\x74\xe5\x2a\x93\x76\x26\x1b\x11\xab\x61\x36\x46\x8d\x1b\x5a\xc0\x36\x53\x21\xbb\x9e\x91\x83\x11\xfe\x40\xee\xb5\xce\x57\x8b\x95\x42\x79\x3e\x19\xbe\x0b\xf2\xdc\xd9\x6e\xf1\x2f\xe4\x5e\x3a\xbb\xf4\x7b\xe3\x2d\xfe\x83\xdc\xcb\x3b\x3f\xdf\xf9\x61\x95\x6d\x72\xea\x6c\xf1\xdf\xcb\xb4\xbe\xa0\x20\x8e\x35\x72\xbf\x35\x16\x2a\x98\xaf\x99\x49\x9f\xd5\x27\x7d\x8a\x26\x62\x4d\x65\xae\xeb\x65\xd6\xca\x91\x92\xde\x6c\x00\x8a\x2f\x99\xed\xbe\x23\xee\x07\xd6\xe2\x48\xfb\x6f\x02\x7e\x35\x5c\xc5\xe2\x10\xcf\x07\x52\x24\x1c\xf7\x45\x49\x9c\x92\xac\x3f\xc6\xe2\x8d\x0d\xe2\xef\x19\xb2\x8b\xc9\xf8\x17\x3f\x92\x99\x63\x5f\x2f\xff\x4d\x33\x71\x93\x1f\x55\x7d\x47\x84\x4e\xd0\x8f\xf2\x22\xfc\x3b\xef\x47\xd4\x87\xfb\x2e\x05\xe5\x47\x71\xc4\x37\x85\xbf\xb3\x4f\xa5\x33\xdd\xe0\xc1\xd8\xca\xf2\x73\x7d\x5e\xcf\xe6\x6a\x5b\xa3\x0d\x85\x1b\x0e\x71\xeb\x2d\xd6\xc6\x52\x11\xfd\xd5\x43\xf7\xe5\xdb\x7f\xb2\xb6\xe0\x4e\x35\x9a\x8c\xdc\x5c\xa6\xac\x26\xb7\xa7\xc8\xf7\x7e\xb5\xa4\xfa\x54\x29\x03\xfd\x0a\xd6\xc1\xaf\xa5\xcd\x17\x03\x14\xfd\x95\xec\xcd\x04\x7d\x8b\x96\x17\x9b\xd1\xc3\x27\x8f\xc5\xf3\x70\x34\x10\xff\x96\x0f\x2e\x36\xa3\x47\x23\x78\x79\xb4\x5c\x5e\x6c\x0e\x46\x0f\xc4\xcb\xc1\xe8\x10\x5e\x02\xf9\x02\x5f\x1e\x40\xb6\x07\xd1\xe2\xe1\xc5\xe6\x01\x85\x97\xc3\x65\x18\x5e\x6c\x82\x10\x5e\xa2\xc7\xc1\x72\xbe\x57\x8e\x04\xa5\x25\x36\xf7\x2e\x6e\xcd\x61\xa6\x28\xe8\xb1\xf3\xdf\xfe\xb3\x03\x46\x19\x95\xbb\xe1\x1e\xa9\x29\xa5\x17\xc5\x5f\x8d\xd2\x7b\x89\x2c\x4e\x2b\xfc\x34\x9f\xf6\x7a\x1e\x1f\xe6\xd9\x86\x85\xf6\xcc\xbc\xb8\x75\xd0\xf1\x60\xec\xba\xd0\x10\x54\x14\x5c\xc3\xf2\x21\xa5\x04\xc8\x68\x85\xf3\x97\xd1\x88\x40\xe9\xa0\xb6\xe5\x08\xc6\x04\x14\xaf\xb5\x91\x45\xc7\xf0\x82\x32\x02\xa5\xc4\xf4\x81\x44\xe8\xc1\x23\x81\xf0\x07\x4f\x0e\x06\xf0\xef\x10\xf0\x3e\x06\xbc\x2f\x22\x78\xc2\x80\x84\x63\x78\xee\xc3\xf3\x01\x3c\x1f\xc2\x53\x0c\xd4\xa3\xb1\x1c\x9b\x71\x20\x9e\x0f\x16\xf0\xf2\x90\x8a\xe7\xe3\x91\x78\x46\x8f\x20\x29\x0a\xe1\x49\xe1\x85\xc2\xa8\x52\x28\x4f\x9f\xc0\x33\x90\x1f\x44\xb5\x8f\xc7\xa2\xc2\xc7\x07\x00\xf8\xf1\x03\x01\xf8\x71\x00\x50\x1e\x2f\x04\xc8\xc7\x14\x6a\x79\xbc\x3c\xb8\xd8\x8c\x9e\x8c\xe1\xcb\x93\xf1\x21\x3c\xe1\xcb\x93\x7d\xf8\xb2\xff\x50\xbe\x3c\x86\xe7\xa1\x7c\x11\x15\x1c\xca\xee\x1f\x8e\x44\x97\x0e\x0f\x44\xcb\x0e\x1f\x40\xbf\x0f\x1f\x3c\x81\x27\xe4\x7a\x28\x93\x1e\x8a\xce\x1e\x3e\x82\xbc\x8f\x04\xe0\xc3\x27\xa2\x7d\x87\x0b\x28\xb7\x10\x5d\x3d\x0c\x65\x56\xc0\xce\x61\x08\xa5\x23\x51\xed\x21\x85\x62\x54\x14\x0b\x46\x63\x78\x8a\x94\x00\x2a\x0d\x1e\x40\xca\x03\x48\x79\xf0\x18\x9e\x4f\xe0\x09\xdd\x08\xa0\x19\xc1\x43\xc8\x04\xc8\x0c\x1e\xcb\xdf\xa2\x45\x01\xb4\x22\x78\x02\x85\xa1\x2d\x81\x6c\x45\x00\xa3\x13\xc0\xe8\x04\x21\xc0\x83\x16\x05\xd0\x96\x00\xda\xb2\x80\xb6\x2c\xa0\x15\x8b\x03\x0a\x4f\x31\xd6\x0b\x89\x86\xc5\x83\x07\xf0\x14\xc5\x16\x0f\x1f\xc1\x53\x80\x5b\x00\x16\x16\x80\x85\x05\xd4\xbc\x80\xfe\x2f\xc2\x11\x3c\x21\x3f\x74\x3c\x3c\x80\x91\x0e\x1f\x8c\xe0\xf9\x48\xbe\x3c\x81\x67\x20\x5f\x44\xe6\x10\x90\x1b\x42\x15\x21\x00\x0f\x01\x78\x08\x1d\x0a\x61\xfe\x85\x30\xf3\xc2\x10\xf2\x84\x90\x0e\x15\x85\x11\x94\x8d\x20\x1d\xfa\x16\x42\xdf\x22\xe8\x4f\x24\x7b\x12\x41\x4f\x22\xa8\x2c\x82\x3e\x44\x50\x4d\x04\xd5\x44\x61\x00\x4f\x51\x4d\x14\xed\x43\x81\x08\x0a\x00\xd4\x08\x08\x12\x3d\x18\xc3\xf3\xc1\x00\xfe\x89\x12\xf4\xc1\x63\x78\x79\x20\x6a\xa2\x0b\xf8\xbe\x90\xdf\x17\x87\xf0\x5c\xc0\x53\x34\x96\x86\x4f\xe0\x03\xb4\x79\x39\x7e\x02\x4f\x91\x69\x79\xf0\x10\x9e\x8f\xe1\x09\x29\x8f\xa1\xcd\xcb\xc7\x02\xec\xf2\x09\x4c\xd2\xe5\x93\x07\xf0\x7c\x04\x4f\xc8\x2b\x49\xe3\xf2\x50\xbe\xc0\xbc\x5e\x42\x55\x4b\x81\xa3\xf1\x68\x3f\x1a\x88\x7f\x07\x23\x78\xee\xcb\x97\xc7\xf0\x3c\x84\x67\x00\xcf\x08\x9e\x54\x3c\x1f\x3e\x81\x27\x7c\x7d\x48\xa1\xc0\x23\x28\x0d\x0d\x1a\x8f\x1e\x3f\x10\x4f\x31\xe0\xe3\xd1\x93\x87\xf0\x84\x9a\x9e\x00\x8c\x43\xf1\x3c\x78\xb8\xbc\xd8\x8c\x1f\x8f\xa1\xba\xc7\x63\x51\xe0\xb1\xac\xfb\xf1\x01\xbc\x3c\xdc\x87\xe7\x81\x78\x3e\x86\xdf\x8f\xe1\xf7\xe2\x31\x64\x12\x04\x67\xfc\x18\x3a\xf0\x38\x3c\x84\xa4\x08\xbe\x47\xe2\xc3\x93\x91\x58\x11\xe3\x27\x23\x78\x09\x44\x43\x0f\xf7\x05\x1a\xc6\x87\xfb\xfb\xf0\x7c\x0c\x4f\xd1\x8f\xc3\x03\x48\x39\x00\x20\x87\x07\x8b\x8b\xcd\x38\x18\x3f\x86\xa7\xf8\x1c\x88\xc9\x36\x0e\x1e\x8a\x51\x19\x07\x82\x52\x8d\x03\xe8\x6c\x20\x26\xc6\x38\x78\xf4\x10\x3e\x3c\x0a\xc5\xf3\xf1\x01\xbc\x3c\x96\x2f\xa2\x87\x0b\xa0\x1d\xe3\xc5\x48\x34\x6e\x01\x5d\x5b\x1c\x3c\x82\x24\xc0\x2b\xac\xa9\xf1\x42\xac\xe9\xf1\xe2\x11\xb4\x7a\x01\x1d\x5d\x3c\x19\xc1\x73\x2c\x9e\x01\x60\x66\x11\x3c\x84\xe7\x13\x78\x8a\x4e\x85\xfb\xa1\xf8\x10\x1e\x1c\xc0\xf3\x11\x3c\x45\xdb\xc3\x08\xaa\x0d\xa3\x7d\x78\x3e\x80\x17\x3a\x82\xe7\xbe\x7c\x79\x02\x4f\x81\xa0\x28\x84\xcc\x11\x15\xe5\xa3\x25\x4c\x87\x48\x6c\x91\xfb\xa3\x51\x08\xcf\x48\x3c\x01\xe4\xfe\x68\x39\xba\xd8\xec\x87\x74\x29\x5e\xc2\xe5\xf8\x62\xb3\x1f\x51\xf8\x12\xc9\xfd\x76\x3f\x80\x2d\x76\x1f\x5e\x0e\x0f\xe1\x19\x5c\x6c\x82\x47\x8f\x44\x91\xe0\x91\x18\xcc\xe0\x91\x40\x51\xf0\xe8\x71\x24\x9e\x02\x62\xf0\x48\x80\x0a\x9e\x08\x72\x17\x3c\x19\x3d\x82\xe7\x42\x3c\xf7\x1f\xc2\x13\x52\x04\xc1\x0c\x9e\x40\x75\xc1\x13\x28\x70\xb8\x2f\x90\x19\x1c\x0a\x42\x1d\x1c\xc2\x3a\x0b\x0e\x1f\xc2\x17\x58\x10\xc1\xa1\x98\x86\xc1\xe1\xe2\x00\x9e\x32\xb3\x58\x74\x01\x10\xe4\x20\x00\x42\x1f\x04\xfb\x54\x3c\xc5\xd2\x0d\x02\x31\x21\x82\x40\x2c\xb7\x20\x10\x38\x0d\x82\x07\x07\xf0\x84\x02\x62\x4f\x09\x82\xc5\x3e\x14\x5b\x3c\x80\xe7\x63\x78\x3e\x81\x27\x00\x12\x94\x28\x08\xc4\x4e\x18\x2c\xe8\x43\x78\x3e\x81\x67\x74\xb1\x89\x14\x7b\xb1\x14\xf8\x5a\x2e\xc6\xf4\x62\xb3\x94\xec\xc7\x92\x8e\x44\x12\xdd\x97\x2f\xa2\xcf\xcb\xe5\x21\x85\x67\x85\x15\x89\x69\xf5\xfe\x48\x69\x3f\x3f\xe5\xde\x08\x1d\x93\xc7\x8f\x9e\xb8\x6e\x4a\x35\x77\x50\xf2\x05\x19\xb5\x59\xe1\x89\xc7\x8e\x46\x53\x7e\x3c\xf2\xb9\xe1\xf5\x90\xeb\x0a\xd8\x00\xf1\x29\xf7\x38\x42\x13\xc4\xfb\x84\xb5\x1c\x46\x03\xda\xe4\xab\xf9\x31\x9b\x0e\xc6\xfe\x78\x22\x5d\x60\x71\x42\x8c\x32\x38\x57\xb7\xe7\x1e\xef\x33\xb4\xb7\x8f\x33\x92\x1e\x8d\xa6\xc0\x29\x87\x34\x4e\xbc\x18\xf9\xf0\xb2\x4c\xb2\x8c\x79\x92\x69\xce\xac\xb3\x14\xf5\x32\x34\xe5\x3e\xeb\xc0\x0f\x46\x32\x9f\x93\xac\xaf\x98\xe6\x9c\xc2\xf1\xce\xd2\x87\xa0\x15\xf9\x46\xc7\x64\xd0\x11\x1a\xc9\x68\x12\xdb\xc7\x37\xe3\xcc\x89\xce\x62\xf0\x13\x9a\x81\x5e\xf9\x11\x77\xdd\x6c\xc8\xb3\x63\x5e\xaa\xd2\x8b\x77\xe9\x4e\x4a\xe6\xe9\x11\x91\xe2\xba\xce\x82\x2e\x33\x46\x1d\x42\xd8\x34\x25\xb1\x9f\x53\x12\x23\x2c\xf3\x7c\x29\x7f\xcf\xce\xbf\xb5\x7c\x46\xf5\x48\x3a\x4d\xfd\x9c\xca\xb8\x78\xb4\xa9\x93\xe4\x2c\xf4\x1f\xcf\xf9\x6d\xbe\xa8\xfc\xe5\x79\xce\x6f\x4f\x4f\xbf\xff\xfe\xfb\x53\xf8\xc3\xa7\xf8\x74\x6c\xfe\x64\xda\xe9\xeb\x9d\x7f\xdf\xf2\x5d\x55\xb4\xd8\xf9\x87\x45\xf5\x50\xbf\x84\xf7\xfd\xf7\xe3\x31\xfc\x1c\xbf\xfe\x12\xf8\x2f\x54\x2b\xbf\x3b\x98\x13\x27\x85\xbf\xd3\x53\xf6\xfd\xf7\x0c\xb3\xd3\xd3\x55\xf9\xc7\xfe\xe4\xdf\xaa\xed\x2f\x35\x7f\xdf\xa7\xa9\xc8\xf4\x67\xa1\xfe\x53\x7f\xba\xf2\x53\xdd\x93\xd5\xea\x54\xfe\x28\x07\x4f\xfb\x0f\x02\xe6\x7c\xe7\xd1\x67\xf4\x58\xbe\x3c\x09\xc2\xf9\x1e\x4e\xc9\xde\x4c\x4c\x88\xf9\x1e\x8e\xc9\xde\xec\xf5\x7b\x36\xdf\xc3\x99\xf8\xb5\x18\xa7\xf3\x3d\x1c\x90\xbd\x99\xf8\xd1\xb1\xed\x66\xe5\x12\x82\x63\x7c\x42\x6f\x68\xa2\xb5\xb6\x60\x4a\xeb\xd0\x2a\x19\x61\x0d\xef\x5d\x1b\x9c\xc8\x49\x1a\x12\x27\xe1\xcc\x21\x24\x99\x3a\xaf\x1d\xdf\x79\x0f\x5e\xe3\x47\x84\x6c\xcc\xe9\x59\x67\x70\xdd\x1e\x93\x34\x6b\x83\xca\x03\x89\x5e\xb1\x4b\x7c\x65\xca\xe0\x48\x9c\x52\xd7\x64\x34\x59\x1f\x89\xc5\xbb\x46\x91\x3c\x0e\x7b\x4b\xb2\xb1\xa9\xe1\x1a\xa1\x23\xb2\xff\xe0\xf1\xd4\x50\xb4\x25\xf2\xc7\x0f\xf6\x1f\x1c\x91\xa5\xeb\x2e\x8f\xc8\xf8\xe1\xfe\x83\xa9\xf3\xde\xf1\xc7\x0f\x0f\x1e\x99\xc4\xc7\x4f\x1e\x4e\xb9\x29\x31\x10\xdf\x90\x3f\x7e\xfc\xd8\x14\xdb\xdf\xdf\x1f\x4d\x1d\xe6\xf8\x4f\xc6\x87\xfb\x3a\xf1\xc9\xfe\xe8\x60\xea\xdc\x3a\xfe\x93\xfd\xd1\x03\x42\x96\x53\x67\xe1\xf8\xce\x6b\xa7\x94\xb9\xad\xc8\x08\xdf\x90\x70\xb2\x82\x56\xaf\x24\x86\xee\x48\x34\x5b\xcd\x3b\xce\xca\x21\xe4\x6e\x2a\x7e\x93\x1b\xff\x86\xdc\x6d\x75\xa9\x4b\x32\xc2\x0b\x12\x4e\x2e\xa1\xd4\xa5\x2c\xf5\x91\x44\xb3\xcb\x79\xc7\x19\x3b\x84\x7c\x74\x5d\x47\x60\x70\x31\x15\x69\xc4\x49\x1d\x5f\x5d\xac\x7d\x44\xae\xeb\x2d\xc8\x47\x0c\xdf\x3f\xba\xae\x27\x73\xbc\x77\xc4\xf9\x53\xc1\xbf\x25\x63\x7c\x42\xa2\xd9\x68\x3e\xb9\x3d\xba\x1a\x8c\x27\xfd\xfe\xad\xac\xe4\x13\x89\x66\xb7\xf3\x8e\xd3\x77\x08\xf9\xe4\xba\x50\xd9\x89\xfa\x1f\xcd\x6e\xfb\xe3\xf9\x54\x64\x20\xce\xd8\xf1\x1d\xec\xf4\xc8\xa7\xa2\x38\xe9\xa9\x4f\x45\xe1\x8c\x9d\x1e\xe4\x4f\xc5\xff\xa2\xf0\x20\xf3\x09\xc2\x27\xe4\x93\xa9\xfd\x8c\x8c\x26\x67\xd0\xb3\x33\x59\xe9\x5b\x12\xcd\xce\x80\x04\x3b\xd8\x21\xe4\x2d\x12\xaf\xc4\x39\x75\x4a\x9f\xe8\xdf\x43\x3a\xe4\x7e\xaa\x5d\x81\x08\x78\x4f\xc9\x59\x7f\x3c\x79\x7a\x74\xe5\xba\x90\x27\x9a\x3d\x9d\x4f\xfa\xfd\xa7\x68\xa2\x6b\xbb\x26\x67\xae\xeb\xf4\xe0\xdb\xd9\x40\x34\x52\xe6\x1e\xab\xdc\x53\xe8\xca\xa9\x83\xcf\xc9\xd9\xe4\xfc\xe8\xe9\xa4\xdf\x3f\x47\xd1\xec\x7c\x4e\xae\x3b\x67\xe4\xe9\x60\xbc\x35\x0d\x7f\x43\x46\xf8\x39\x09\x27\x6f\xa0\xf1\x6f\x64\x73\xde\x93\x68\xf6\x66\xde\x71\x5e\x3b\x84\x3c\x57\x70\xdf\x4f\x45\x1a\x11\xd3\x5f\x0d\xcb\x7b\x31\x2c\xcf\xc9\xfb\x72\x0c\xde\x91\xd1\xe4\x1d\x00\x7a\x87\xc0\x59\x01\xe4\x8b\x66\xef\xe6\x48\x02\xfe\xdd\xee\xe7\xef\xe4\x5d\x7f\x3c\xf9\x5d\xb4\xdc\xe4\xfc\x7d\x8e\x26\xfd\xfe\xef\x65\x57\x5f\x10\x68\x85\xf7\x6e\x1a\xcd\xde\x0d\xc6\x73\x3f\x44\xf8\x94\xbc\x20\xc4\x93\xe9\xbf\x1f\x5d\x4d\x45\x31\x3f\x44\x68\xfa\x42\xaf\x4e\x3f\xc4\xaf\xc8\xbb\xc9\xab\xa3\xdf\x27\xfd\xfe\x2b\x14\xcd\x5e\xcd\xc9\x69\xe7\x1d\xf9\x7d\x30\x36\x8d\x7d\x8d\x5f\x8a\xf5\xf7\x99\x8c\x26\x9f\x8f\xae\x26\x08\x76\x4b\xd5\x8c\xcf\xba\xc1\x3f\x91\xcf\xd0\xd6\x7e\xff\xb3\xc8\x05\xdb\xa8\xc9\x32\xe9\xf7\x3f\xa3\xc9\x4b\xe5\x4a\x9b\xde\x76\x73\x6f\x84\x7f\xc2\x9f\x91\xb4\x10\xb8\x97\xa2\xc2\xcf\xf8\x03\x79\xa9\x96\x7c\x15\x96\xf3\xda\x11\xd3\xec\xf3\x5c\x02\xd2\x0d\xfb\x85\x3c\x9b\xfc\x72\xf4\x19\x5a\x14\xe8\xea\x7e\x11\x2d\x7a\x76\xf4\x8b\xeb\xbe\xd4\x7e\xa8\x3e\xe0\x11\x96\xb5\x8e\xf1\x33\xfc\x8b\xd2\xb0\xfc\x83\xfc\xa2\x6a\xf9\x45\x40\x71\x5d\x1b\xc4\xa4\xdf\xff\x45\xb4\xb8\x01\x61\x1f\xff\x21\x20\xe0\x67\xe4\x17\x68\x7b\xbf\xff\x4b\xe7\x99\x28\xbd\xa3\x36\xd1\x47\x25\xe9\x34\x74\xcf\x1b\x13\xf2\x52\xde\xf8\xde\x50\xf1\xfe\x9a\x6c\xf4\x55\xf8\x3f\x2e\xf2\xbe\x94\xe2\x43\x0e\xa0\xbc\xaf\xcb\xdb\x61\xfc\x72\xb8\x49\xa5\x7e\xa4\xc6\xe3\x08\x5b\xdf\x11\x42\x78\x4c\xc8\x77\xde\x4b\xd4\x06\xfd\x22\xef\x7f\x27\xa1\x43\x0e\x9e\x0d\x6a\xc0\x2b\x23\x74\x35\xb0\x3f\x0a\xd8\x08\xab\xd8\x54\xc9\xf4\xe5\x90\xd1\x1b\xca\x72\xea\x21\xff\x65\xd5\x21\x63\x48\xab\x37\x72\x10\x8d\xa9\xea\x1d\x93\xb9\xae\x67\x3e\x91\x44\xf0\xa0\x32\xe6\x10\xd2\x52\xbf\x25\x15\x93\xee\x8a\xb6\x79\x44\x6f\xfa\xd7\x45\xed\x8e\xb8\x71\x6f\x5c\x5e\xff\xd2\x61\xc0\x79\xa0\x5c\xe9\xa0\xca\x9b\xe7\x64\xa9\xd3\x07\x97\x9f\x66\x42\xa6\x84\x0e\x3f\x2a\xe9\x76\x0e\xd7\x87\xe6\x0d\x9c\xf9\xa7\x33\x3e\x27\x9e\x78\x16\xc5\x92\x22\xed\x65\x8f\x55\xee\xe4\xa3\xaa\xac\xcf\x82\x01\x91\x91\xf5\x8b\x02\x62\x59\xe0\xd3\x4a\x77\x5b\x54\x06\xd1\x4e\x0f\xe1\xb5\x4e\x47\xd4\xee\xb4\xf5\xf6\xd5\x4e\xe3\x98\xa4\xae\x2b\x7a\x28\xad\x4b\x15\xcb\xfc\x93\x17\x8b\x32\x19\x08\x27\x01\x01\x24\x36\x6a\x0a\x99\x41\x84\x4e\xcb\xfa\x63\x84\xd0\xd6\xba\x4a\x5b\x55\xe6\x87\x42\x91\x0c\xd5\xae\x66\x71\x79\xc4\xf8\xa6\x1b\xbd\x7d\x84\x25\x87\xcf\x6c\x0e\x9f\xcd\xe2\xb9\x7d\x9d\x97\x5a\x47\xa3\x1b\x5a\xf5\x8d\xde\xd4\x2f\x80\x7b\x34\xe9\xb1\x89\xe3\xb5\xf4\xf4\xf6\x42\x05\xfe\xab\x5f\x3d\xd5\xfd\xc1\x11\xe9\xe6\x12\xfa\xc9\x40\x70\x7b\xb7\xa6\x18\xae\x64\x4f\xa8\xc7\x41\x96\x1b\x66\x11\x5d\xc1\xbd\xc7\xab\xcb\x34\x63\xd6\xd8\xdf\x51\x3b\x4c\x6c\xfb\x84\x19\x86\x1b\x96\x67\xec\x69\xc8\xe3\x9b\x98\xdf\x75\x2a\xda\x0d\x70\x0b\xbe\x61\x6f\xd7\xb5\x5c\x3f\xd9\x93\xf9\x4b\x19\xc0\xe7\x60\xcd\x0c\xb7\xdf\x4f\xd1\x60\x4c\xc8\x4f\x1e\xc3\x60\x75\xeb\xba\x4c\x59\xfe\x89\x37\xcb\x8a\xa6\x3a\xe5\xd5\xf0\x9a\x80\x43\x65\xc6\x05\x95\xf7\x60\xf6\x4d\x59\xed\xfe\xea\x8a\x2a\x67\x64\x58\xfa\xe0\xb0\xb2\x2e\x97\xb5\xbc\x6b\x3b\xaf\xa5\xd2\x6f\x6a\xb1\x87\x70\x5a\x4f\xf0\x90\x2f\x16\x94\x68\xf2\xdf\x21\x0e\x5a\x6f\x5c\xc2\xb8\x55\x30\x72\x9e\xad\xdf\xb1\x6c\x1d\x5c\x82\x1a\xc7\xb4\x91\x02\x50\xa4\x37\xaf\x67\xe0\xde\xab\xe2\x84\xe4\xc4\x3e\xc6\xcb\x13\x5f\xd3\x97\xe0\xb4\x99\xe4\x8f\x08\xa9\x34\xae\x04\xf9\x09\x40\x42\x1f\xf1\x6d\xf5\x56\xe0\xac\x2a\x34\xe0\x26\xcc\x70\xce\x42\xad\xbb\x61\x32\xbf\xad\xcc\xb9\xdb\xab\x38\xbc\xaa\x12\x6c\xb1\x1e\xc6\x2e\x1d\x2e\x36\x9c\x67\xe9\x94\x93\xb1\xbf\x6f\xbf\x1e\xf8\x0f\xcc\x2b\x2c\x9d\x7d\x84\xf0\x25\xd8\xb6\x72\x96\xfc\x8d\xde\x81\xbb\x7e\xb9\xaa\x0e\x10\xe6\x40\xe3\x9f\x52\x7c\x4d\xf1\x79\xe5\xa8\x2b\xf6\x72\xd7\xcd\x8f\x0e\xcb\x33\x81\x3c\xfd\xbe\xf1\x9c\x28\xbe\x31\x57\x5f\x4e\xc4\x82\xcb\x4b\x08\x21\x13\x83\x0e\x26\x24\xbc\x60\xd9\x1a\xde\x2b\x1b\xd2\x1b\xaa\x6c\xcf\x64\x5f\x9e\x9a\xae\xbe\xf1\x9c\x7c\x1d\xa4\x0e\x76\xfe\xfd\x3f\xff\x2f\x0e\xea\x9c\x7b\x14\x9b\xb4\x19\xc7\xbb\xb4\x8a\x9c\x4f\x0e\x9a\x23\x84\x47\x62\x04\x4b\xe5\x29\x31\x2b\x73\xca\x7f\xa2\xf1\xe5\x95\xe8\xea\x53\x4a\xb8\x4a\xfb\x25\x8e\xf8\xd5\x11\x19\xbb\x2e\xaf\xe4\x3a\xde\x77\xdd\x9e\xec\xf1\x13\x24\x75\xcb\x18\x79\x4a\xa7\xb5\x96\xf9\xe5\xfb\x7f\xfb\xaf\x0e\x06\x7a\x06\xce\xff\x92\xe0\xce\xef\xc6\x69\x12\xa7\x74\xb0\x48\xb2\xf0\x7a\xd2\xbd\x15\x55\xf9\xdd\xf1\xfa\xd3\xa4\x2b\x43\x19\x0e\x20\x0e\xa1\xdf\x1d\x8c\xd7\x9f\x6c\xab\xf5\xaa\xa2\x52\xb8\x1a\xc8\xd8\xc6\x8e\x53\x71\x42\xf3\xdc\xc6\x5e\x8f\x5c\x1b\x97\x10\xd7\x54\xb9\x9f\x11\x68\xdb\x89\xaa\xa7\xff\xe7\xff\xf1\xd4\x11\xdb\x3a\x79\xeb\x71\x3c\xc2\x63\x34\xbc\xa4\xfc\x59\xb6\x49\xa3\x38\xbd\x7c\x9e\xc4\x34\xe5\xef\x65\x04\xa2\x14\xb2\x8c\xf1\xfe\xce\x2c\x1d\x4b\x09\x0d\xf7\xbc\x1e\x2b\x0a\x41\xf3\x97\x9c\x10\x36\x84\x5e\x0a\xe6\xe6\x9a\x92\x54\xbe\x0d\x54\xea\xd1\x81\xc4\xed\x7b\x8a\xdf\x51\x72\xd0\x23\xce\x45\x7a\x91\x2e\x1c\x63\xa5\x92\xee\x69\x12\x35\x6d\xf7\x5e\x30\xc2\xea\xae\xd4\x48\x91\xf8\x11\x49\x27\x5a\x53\xc7\xbe\xb9\x4b\x1d\xcc\xe5\x9d\x72\x0c\x1e\x78\xab\x77\xca\x19\xd1\xee\x7b\x38\x76\x2e\x04\x4b\x68\x4e\xab\xf1\x60\x8c\xa6\xf1\x60\xec\xc7\x08\x07\x24\xb3\x40\x32\x47\x00\xec\x91\x60\xea\x29\xaa\x9b\x99\x2d\x37\x40\x08\xf3\x3e\x09\xfa\x63\xe4\x9b\xaf\x08\x73\x12\xf7\xc7\x46\xc0\xc4\xda\x83\x07\x97\x56\x3a\x17\xe9\xb4\x10\x58\xd8\xe2\xdf\x69\x5b\x04\xa6\x69\x5d\x3b\xa3\x04\x51\x51\xf6\xe8\x91\xaa\xae\x47\x43\x4b\xa8\x37\xde\x6e\x9b\x8e\x5f\x41\xe5\x48\xd0\x9e\xec\x36\xa5\xec\x85\x9e\x4c\x06\x52\x55\x03\xca\x02\xaa\x3a\xd8\xf3\x7a\x5c\x6c\xab\x52\x3f\x49\xab\x19\xa2\x1e\xf8\xd9\x19\xf5\x88\xd8\x70\x57\xe2\xe3\x49\x1a\xbd\xcb\xe2\x94\xe7\x9e\x03\xed\x3d\xcf\x4e\xd2\xc8\x81\xfd\xe5\x05\x25\x4e\x96\x42\x2c\xb6\x38\xf5\xde\x97\x24\x07\x15\x85\xf7\xbe\x1e\x47\x4b\xe5\xc4\x8e\x6c\xc0\xc4\x41\x6d\x9e\x40\xdf\x8b\x5d\x4d\x64\x44\xf8\x54\x09\x25\x45\x7f\x5f\x51\x72\xbf\xc5\xaf\xc5\xb3\x24\x53\x2f\x69\xcd\xcd\x9a\x1d\xd2\xe1\x75\xe3\x36\x97\x22\x44\xc9\x6b\x3a\xa3\xf3\x92\xdb\x73\xdd\x66\x59\x30\xba\x6b\x05\x00\x5f\x90\x26\x86\x02\x14\xa4\xcc\x3b\xbb\xd8\x21\xf1\xd5\xe7\x5b\x84\x3d\x4a\xfe\x13\x98\xce\x20\x65\xd2\x07\xff\xe4\x69\x6e\x47\x07\xf6\xfe\x31\xbb\xb8\xbd\x18\xcc\xfb\x17\x7b\xfa\x47\xff\xd3\x2a\xf9\xce\x5c\xac\x6b\xb2\xf2\x92\x7a\x55\xcf\x36\xab\x44\xc6\x0f\xfa\x56\xa8\xbf\xe7\x59\xfa\x75\xb0\x22\x97\x63\x0e\x67\x4d\x77\x42\xb2\xb3\x74\xeb\xd3\xa2\x90\xbf\x1d\x31\x7c\x8e\xc5\x5b\x7c\x56\xac\x0e\x27\x2f\x69\xe9\x3b\xe3\x15\x9d\x71\x85\xc7\x78\xe9\xf5\x8c\x48\x1c\x72\x5b\x4e\x88\x1c\x1d\xef\x8c\x19\x06\xf8\xa7\xe6\x95\xbd\x3d\x46\x31\xf9\xa9\x84\x6d\x34\xbb\xba\x10\x4d\x20\xae\x97\xcc\x10\xf8\xe5\x6f\x4d\x9d\x39\x1f\x9d\x7e\x36\x27\x10\xd6\x0a\x8b\x27\x89\xc5\xcf\xad\x8c\x94\x54\x8e\x28\xf8\x16\x48\xd6\x94\x29\x55\xd2\xd4\x7a\x25\xf6\x37\x84\xa5\xe5\xbb\xa8\xa8\xf4\x26\x1d\x80\x8e\x9c\xf5\x21\x9d\x05\x73\x62\x25\xcc\x02\xe3\x06\x22\x05\x02\xfd\x53\x75\x49\x3c\x53\x18\x7e\xed\x71\xdc\x44\x0e\x45\xd3\x9f\xc4\xfc\xf7\xe1\x29\x4e\x65\xe5\xd8\x7c\xa0\xa5\x27\xf8\x91\xed\xa3\x9a\x4b\xf7\xd2\x62\x4d\x82\x65\x96\xad\x4a\xab\x92\xca\xb1\x14\x6d\xa9\xe8\xfb\xe9\x81\x10\x4c\x6f\x27\xb6\x1d\x3d\xc0\x49\x05\xe8\x7d\x6c\x3c\xae\x0b\x1e\x01\x54\x69\xe2\x6d\x53\x85\xe6\x97\x7a\x80\x86\x89\xd8\x44\x52\xca\xde\x64\x11\x55\xe7\x63\xf3\xee\x71\x04\x1c\xb7\xc0\x5c\x8f\xd0\x09\xe2\xd2\x54\x96\x53\x4c\x89\x4c\x36\xfb\x7a\x51\xdc\x8b\x77\x9f\x82\xa9\x27\x38\x24\x34\x95\xfe\x51\x3b\xf8\xf4\x04\x0f\x1b\x30\x0e\xfd\x06\xee\xd0\xbc\xc9\x68\x53\xa2\x65\x7f\x6f\x9e\xc2\xe1\xdc\xb3\xce\x72\x63\xdc\x0e\x6a\x7e\xea\x05\x82\x19\x51\x1d\xb0\x7b\x01\xe1\x9a\x79\x51\x3c\x51\x7e\xcc\x83\x9c\x3f\xcf\x92\xcd\x2a\x7d\xa7\xcb\x97\x49\x92\xf9\x1e\x69\x8f\xe7\x29\x3d\xb3\x41\x8b\x84\xb7\x2c\x08\x13\x4a\x98\xad\xf2\x55\x8e\xb5\xc7\x07\x9a\x25\x43\x47\xa3\xa2\xe0\xc7\xe0\xc1\xe2\x73\x33\x4c\xa7\x73\x7e\x45\x19\x95\xc6\x69\x5d\x01\xb8\xeb\xf4\x3d\xde\xd7\x85\xfb\x8e\xf4\xdf\x42\x8d\xff\xe0\xa1\x25\xda\x65\x84\x4e\x7a\x0c\xda\x93\x4f\xac\xe3\xea\x68\x02\x07\x25\xa3\xe6\x0f\x2a\xf8\x8c\xa6\xb3\x74\x8e\x33\x31\x31\xae\x36\xe9\xb5\xc0\x87\xb4\x6b\xe5\x47\x19\xba\x67\x24\xee\x2c\x18\x0d\xae\xb7\x7c\x40\x32\x33\x51\x24\xf0\x19\xb7\x94\xb7\x7e\xac\x5e\x73\x09\x7e\x24\x26\x1c\x32\x96\xb6\xe8\x60\xd1\x26\x13\xb1\x04\xd2\x1f\xe3\xfa\x7e\x9b\xa9\x70\xe9\x9d\x58\x30\x4e\x09\x18\x10\x79\x19\x29\x99\x0a\xd1\x74\x24\x8e\xd5\x0a\x7e\xe5\x33\x97\x1f\x53\xc3\x6b\xf4\xfb\xf1\x16\x61\xcb\x90\xfa\x6f\x8d\x96\xd6\x1b\x88\x59\xa5\x51\x0a\x96\x6c\x15\xaa\x02\xfb\xae\x22\x2f\xe0\x03\x3a\xbc\x02\xde\x19\x44\x06\x16\xf2\xe9\x24\x9d\xa4\x24\x55\x3c\x00\x4a\x55\xb6\x3e\xb1\x16\xdd\xcf\xd5\xa3\x80\x56\x68\x46\xd6\x61\xa7\x63\xdb\x50\xc8\xcf\x98\x91\x9f\x14\x4e\xc1\x33\x76\x6a\x74\xe6\x27\xe9\x84\x93\x14\x5b\xd5\xda\x77\x8e\x69\x39\x01\xe2\x79\x8f\x70\x29\x97\xe8\x93\x4a\x7a\x65\x52\xe8\xd1\xef\x73\x39\x0f\x2d\x8d\xbb\x9a\x54\x0d\x3e\x77\xa8\x1f\x65\xb6\xa6\x23\x28\xf2\x69\xe0\xf6\xd9\xdd\xf0\xa9\xf5\x29\x59\xe2\x12\x66\x23\x25\x71\x27\xcc\x52\x1e\xa7\x1b\xda\xa5\x30\x25\x31\xeb\x57\xa7\x6e\x49\xcc\xa4\x09\x41\x8f\x4a\xd4\x94\xeb\x23\x20\xa3\x49\x70\xa4\x92\xcb\x66\x04\xa5\xde\xb1\x9c\xdd\xc1\xbc\x52\x7f\x8e\x60\x21\x74\xf8\x80\xe4\xa6\x92\x7e\x60\x29\x1a\xd6\x74\xe7\x8e\x35\x22\x5c\x97\x1f\xa9\x9f\x7d\xb9\xe0\xcb\x42\x7f\xad\x16\xd2\x6e\x68\xa0\x09\xd2\xbc\xe8\x65\xc6\x56\x01\x87\x79\xa9\x09\xc0\x6b\xf3\xd1\xd6\xdd\xa3\xdc\x92\xcb\x19\x03\x5d\x29\xcd\x94\xa1\xc1\x7b\x20\x85\xb0\x37\x06\x5a\x86\x7c\x02\xc3\x6b\x5e\x06\xdc\x53\x24\x4d\xd3\xca\xf0\x4a\xdf\xb2\xe5\x3c\x0e\xaf\xef\xec\x89\xcb\x79\x4d\x92\x08\x47\x3e\x39\x27\x05\xdd\x0e\xaf\x06\x62\x59\x5a\x5a\x81\xf5\x02\x0a\x26\x38\x2b\x11\xbf\x5c\x77\x44\x88\x02\x5b\x16\x03\xe3\x1c\x53\x88\x2b\x34\x61\x51\x81\x95\x2b\xae\x02\x57\x50\x8e\x46\x53\xee\x5b\x88\xcf\x76\xe5\xaa\xc4\xc0\x09\xaa\xb9\xa4\x36\x6d\xf0\x49\x9b\x25\x61\xa3\x5e\xcb\x71\x75\x84\x07\x63\x7b\x68\x72\x6e\x36\x01\x89\x15\x3d\x1f\x90\xdd\x19\x09\x72\x84\x3a\x95\x65\x64\x00\x96\xce\x52\x05\x84\x63\x36\xa5\xdc\x63\x18\xf6\x17\x86\x80\x36\xe9\xb3\x5c\x6b\x40\x52\x81\xa5\x9a\xa0\xbb\x28\xd8\x31\x9f\x96\x88\xe4\xc8\x67\x02\x03\x26\x61\x84\x7c\xba\xf5\xb8\xac\x44\xd6\x5b\xad\xc9\x72\x51\xcc\x77\x6a\xef\x36\xdd\xe5\x49\x7c\x54\xfc\xe3\x6d\xff\x6e\x8b\xd0\x68\x96\xec\xf2\x28\xb7\xce\xf2\x63\x62\x6d\xe6\x5a\x51\x1f\x57\x00\xe4\x5f\x04\x40\x48\x75\x0f\xaf\x15\x5e\x53\x7a\xbd\xab\xb4\xaa\x54\x6b\xa5\x28\x80\xa8\x28\x74\xec\xab\x0a\xa4\xb4\xe6\x1d\x51\x3b\x97\x5a\x67\xf9\x51\xb3\x0f\xe8\xeb\x15\xf5\xfb\xa8\x56\x05\x0d\x9a\x21\x25\x39\xf9\x52\x5b\xdb\xcf\x2b\x53\x4e\x08\xf5\xb9\x54\x1d\xa6\x39\x9f\x52\x6d\x31\xe4\x03\x87\xa7\x1a\xd7\xef\x6b\x38\xb8\x8e\x36\x1a\xf0\x5f\x04\xcd\x25\xed\x52\x0a\x5d\x6e\x02\x3f\xa8\x58\x5a\x68\x82\x26\xf5\xb1\x6d\x81\x7a\xb6\x0e\xc2\x8a\x20\x4e\x03\xa5\x25\xd0\xbd\x59\x69\x69\xa2\x1a\xfe\x05\x14\xa0\x09\x2a\x3b\xd2\xa9\x37\x81\xd6\x27\xd3\x75\xbc\x86\xb3\x78\xc3\xb0\xc3\xe2\x32\xbf\x30\x17\xa1\xf8\x57\x06\x49\xcb\x53\x14\xb9\xd5\xe3\xc4\x8f\x07\x63\x54\x9f\xbd\x1c\xf7\xea\x13\x6d\x11\x84\xd7\x1f\xd6\x55\x33\x15\x95\x7d\x40\xea\xfd\x09\x81\x9d\xdd\x35\xc3\x2b\x3c\xf0\x51\xc9\x43\x6b\x27\x91\x75\x86\xf8\xa5\x8d\x69\x5c\xe6\xaf\xf0\xd8\x2d\xec\x75\x3d\x09\xa0\xa1\x9d\x7c\x38\xc0\x6c\x7c\x86\x42\x03\xaf\xba\x9c\xa7\x2d\x4d\x32\x1f\x2b\xcd\x42\xfe\xa8\xbe\x9e\xc4\x40\x28\x5b\xc8\x16\x0c\x55\x21\x5b\x86\x3c\x0a\xde\xbf\xb4\x29\x70\x33\xda\x76\xc9\xd8\x74\x1e\x5f\x09\xed\xad\xa6\x94\x62\x88\xf5\x74\x52\x17\xad\x65\x34\xd9\xd4\x75\x95\xe5\xee\xf1\x48\x3a\xef\xf0\x52\xd7\xed\x8d\x7b\x4a\x18\xae\x49\x0e\xb1\x4d\x80\x71\x2a\xcf\x5d\x71\x9b\xbb\x01\x36\xad\x59\x19\xf8\x14\x22\x1e\xc4\x95\xc5\x98\x6f\x16\x39\x67\x06\x3e\x36\x32\x48\x44\x48\x5c\x4a\x45\x5a\x1a\x52\x86\x7a\x6f\x2c\x80\x70\xc3\x04\x8b\xfb\x15\xb2\x6d\xa1\xc4\x9a\xa3\x02\x3b\x35\x70\x57\x71\x44\x5f\x4a\xe1\x79\xc0\xea\xb1\x36\xab\xa3\xd8\x27\xd2\x0a\x55\x57\xe7\xa1\xed\x32\x4e\x83\x24\xb9\xab\x65\x1c\x40\x78\xff\x4a\x35\x49\x96\x5d\x3f\xbd\xa2\xb6\x7f\xa4\x2a\x75\x28\x4f\x95\x86\x4a\xb9\x2e\x2f\xcb\x81\xd3\xc9\x1a\x25\xc8\xe9\x79\x76\x4d\xd3\xa6\x92\xde\x0e\x88\x60\x00\x6b\x8a\x95\x13\x46\xda\x49\x25\xad\x86\x5b\x70\x7a\xd7\xbc\x61\xd9\x0b\xbe\xc5\x35\xdf\x61\xd2\x64\xd4\x2a\xa3\x70\x1e\x65\xa1\x29\x2e\xd8\x4c\xa6\x3d\x8c\x7e\x7a\x6d\xa0\x81\x59\x20\x24\x9b\xd6\xe5\x96\xf1\x9c\x49\x14\x34\xc2\x0e\x09\xb1\xe4\x75\x63\xd5\x19\x95\xb5\x83\x30\xe2\x47\x0a\xc7\x8b\xfb\x6d\xe7\x23\x64\x94\xd7\xfb\x54\x34\x49\xfa\x98\x64\x35\x0f\x19\xc6\xa6\x55\x9e\x03\x41\x20\x9b\xe1\xd4\x3e\x52\x68\x81\x87\x35\x55\x52\x74\xcf\xec\x86\xc7\x1d\x7d\xbe\x90\x4d\xc9\x6e\x28\x4b\x82\xbb\x5c\x1c\x76\x36\x64\x8c\x13\x32\xea\x28\x30\xa4\x37\xc2\x76\xdb\xf2\xf6\x76\x95\xbc\xd6\x66\x92\x1c\xd1\x89\x26\x02\xf1\x6c\x33\xef\xa4\xc7\x10\x56\x43\x69\x7e\x6c\xf0\x18\x53\x1c\xcf\x36\xfd\xf1\x1c\xa7\x08\x6f\xfa\x64\x1f\x27\xc4\xf0\xaf\x54\x05\x01\xe5\x28\x5e\x7a\xf9\x30\x5b\x07\x7f\x6c\x28\x32\xc5\x19\xde\x0c\x18\xa6\xd8\x51\x8d\xee\x3a\x7d\x8e\xf0\x86\xb0\xfe\xbe\x14\xf0\x82\x16\x2f\x3b\xda\x4c\x58\x9f\xec\xeb\x73\x7c\x3c\x63\xfd\xf1\xbc\x23\xff\x11\x2f\x9b\x66\x7d\x6d\xd8\x6c\x03\xda\x6e\x71\x86\xb0\xee\x7a\x80\x59\x63\xb8\x59\x7d\xac\xf1\x86\x8c\x26\x9b\xa3\x3a\x2a\xcb\xd3\xdc\x06\xe5\xde\xc6\x04\xc3\x00\x9b\xfd\xdc\x8f\x31\x58\x59\xd3\xdc\xcf\x86\x8b\x4b\x88\xf2\x54\x14\x19\xa0\x18\x5e\xa6\x99\x74\xdf\x6b\x85\x4b\xb0\xcf\x54\x3d\x2e\x8d\xff\xf3\xa2\xd0\xbf\x66\xa3\x79\x8f\xd4\xe6\x96\x31\x64\x16\x65\x7f\x06\xde\x09\x44\x21\x16\xdf\x7c\x4c\x87\x19\xf8\xb6\x82\x09\xff\x53\x7c\x79\x95\x88\x83\xa6\x8c\x8a\xe0\xba\x1f\xa8\x67\xcd\xc6\x54\x82\x47\x38\x23\x6a\x62\xa7\xa8\x13\x83\xc0\x53\x62\x2c\x46\x58\xfa\x60\xa4\x4f\x97\x9c\x32\x92\x0e\xf3\xe0\x86\x7a\x3d\x95\x2e\xda\x49\x32\xf5\x03\x67\x43\x85\x83\xa9\xfa\xf6\x5c\xbe\x12\xf3\xc1\xaf\x7e\x10\x04\xb8\x9a\x53\x1e\x26\x19\xc4\x1d\x13\xad\xbc\xd2\xed\x7f\xc9\xc4\xe1\x1c\x9c\xf6\x97\xed\xd7\x89\xc4\x3a\x3c\xd5\xbf\xe1\x7e\x7f\x07\x28\xa3\xa2\xd4\xd5\x5d\xb1\x22\x50\xf0\xaa\x20\x07\x40\xe0\x58\xfc\x97\xb7\x8f\x20\xe3\x4e\xa1\x26\x4b\x76\x68\x1f\x78\x43\xee\xa5\xb8\x37\xd2\xa1\xee\xb2\xc6\x66\x6b\xc4\x17\x38\xc6\x99\xaa\x21\x20\xa0\x5a\xce\x07\x56\x4f\x4a\x69\xe8\x74\x4c\x0f\xfc\xf1\x68\x84\x70\x4e\xf8\x24\x3f\x0e\x26\x83\x41\x0e\xf3\x27\x3f\x22\x59\xf5\xd8\xa7\x5e\xa1\xee\x0d\xf9\x8d\x7a\x19\xce\x07\x63\xf0\xfb\x62\x0d\xa8\xe8\x46\xe2\xba\x70\xa3\x98\xf7\xbd\xa4\x12\x65\x85\x4f\x93\x92\xfe\xfa\x23\x24\xea\xb0\x51\x6b\xce\xf7\x79\x47\x2a\xc1\xbe\xf4\x36\x92\xa8\xc0\xca\x2a\x27\xa2\x66\x43\x26\x4a\xfc\x14\x17\x45\x7a\x1c\x22\x90\x1a\xe7\x83\x31\x4e\x49\x68\xc6\x22\xd6\x81\xf9\x71\x40\xb2\xe3\x54\x8b\x39\x7e\xa3\x5e\x8a\xb3\xc1\x18\x59\x8d\xc7\x39\x09\xa6\x21\x07\x6d\xb1\xb3\xe0\x86\x46\x5e\x0a\x11\xcc\x7d\x83\xfe\x3f\xa8\x27\xc7\x08\xe1\x0c\x55\x83\xd3\x78\x19\xe6\x25\xcd\x63\xe8\x7e\x2d\x86\x9c\x29\xa2\xa8\xef\x28\x72\x25\x65\xac\xac\x01\x42\xf8\x60\x5c\x14\xe9\xf7\x0f\x09\x19\x89\xae\x90\x78\x78\x13\xd3\xdb\x97\x2c\x5b\xb9\x6e\x7a\x24\xdf\xce\xb3\x69\x2e\x57\x0b\x92\x01\x00\x73\x38\xb2\xbd\x8e\x53\xea\xa1\x2d\xc2\x0c\x96\x59\x65\x1a\xcb\xda\x10\xb6\x26\xe2\xba\xb1\xdf\x58\xcb\x37\x03\xdb\xd1\xbf\x53\x10\x11\xd4\x90\x8d\x99\xdc\x43\x32\x25\xa5\xce\x80\xbd\x87\x6d\xcf\x71\x80\xf9\x59\x71\x2f\xd6\xa4\x11\x4d\x7a\x99\x38\x19\x7b\x68\x82\x6e\x44\x7a\x66\xbe\xe0\x0a\x04\x4b\x9d\xa9\x14\x3c\xd0\xe1\x22\x09\xd2\x6b\xd1\xb5\xf2\x5a\xc1\x24\x79\xf2\x92\xc7\x9a\xc7\x5a\x6e\xa0\xae\x02\xca\x9b\x79\x98\xee\xa6\xe0\xb4\x9e\xe0\xe9\x36\xe9\x68\xd0\x96\x66\x93\x85\xa7\xaa\xf9\xc3\x78\x04\xd1\x2c\xef\x21\x5e\xf3\x6c\x34\x97\xb5\x32\x24\xe7\x85\xb9\x9b\xe6\x92\x41\x51\xe1\xaf\xb9\x3c\x2f\xaa\x93\x81\x5e\x52\xdb\x86\x30\x5d\xf4\xa6\xeb\xf4\xe5\x05\x62\xdf\x51\x4e\x08\xbb\x3c\xeb\x06\xd1\x8d\x58\x47\xdd\x9c\x33\x1a\xac\x86\x0e\xda\x56\xc2\x81\x7c\x95\x3b\x13\x83\x7c\x49\xe5\x74\x31\xac\x4c\x9f\x56\xc2\x6d\xf7\xc4\x30\xd2\xe3\x06\x77\xa3\x19\xdb\x0a\xc7\x23\xce\x3f\x82\x85\xfa\x32\x3f\x47\xd5\x76\x54\xe5\x8c\x1a\x72\xe2\x49\x2d\xc3\xac\xc1\x35\xcd\xc1\x80\xbb\x91\xdc\x27\xfb\x1d\xab\x97\x5f\x82\x20\xf6\x77\xb5\xc9\x4a\x7d\x34\xc1\x9d\x1a\xd7\x9b\x5e\xb7\xf8\x07\xd2\x3b\xfd\xf0\x87\x3d\x50\xdf\xc8\xe3\xcf\xd4\xff\x7a\xd3\x06\x82\x59\xae\x60\x42\xaf\xcc\xc6\x29\x1c\xb0\xde\x6f\x32\x90\xc7\xda\x9d\xb1\x9d\x38\x18\x00\x58\x43\x8f\x1a\x24\x5f\xef\x37\x35\x32\xab\xe8\x15\xc5\xb0\x3b\x4b\x5f\xe4\x7a\xf5\x31\x6c\xb1\xe4\x86\xb4\x55\xb2\x22\xcc\x50\xad\x3f\x82\xee\xb4\xcc\x2c\x38\xf7\xd0\xe9\x07\x35\xa5\x0c\x21\x29\x79\x68\x54\xfa\x15\xa6\x15\xe1\x45\xb5\xf3\xd0\xe4\x84\x97\xce\xfb\xcb\x8f\xc8\xe7\x92\xbb\xbf\xab\x73\xeb\x25\xaf\xce\x38\xa1\xf6\x29\x89\x82\x73\x8c\xb5\x3e\xb8\xeb\xab\x34\x7d\xf2\xf2\x6c\x9f\xd4\xbc\xe2\x5a\x1c\xb8\x14\xfb\x52\xec\xb2\x4e\x30\x71\x86\x03\xb5\xbb\xe6\x24\x90\xfd\x85\x0d\x31\xc0\x1e\x27\x39\xf7\x02\xcc\x11\x52\x94\x37\x91\xac\x95\xbe\x47\x42\x38\xd4\x24\x76\xa3\x59\xf9\x3a\x9d\x4d\x24\x9d\x4d\xe1\xaa\x68\x36\x17\x9b\x5c\x51\x84\x52\x0c\x37\x0c\xaf\x90\xeb\xf6\x42\x4d\x5a\x43\xd5\x79\xf8\x8c\x63\x72\xc3\xbd\x1c\x87\x38\xd1\x83\x9d\xba\x6e\x56\x2a\x23\xdf\x71\x2f\xc4\xb1\x18\x69\xd5\x6c\x9d\xaf\x8c\x71\x9b\x0a\xbe\xb2\xcc\xaa\x33\x58\xda\x86\x16\x95\x86\x3b\x1a\xed\x0f\x82\x11\xe3\x87\xcc\x9b\xfa\xff\x28\x2e\xf2\x3e\x02\xd9\xba\xb7\x08\xc2\xeb\x4b\x96\x6d\xd2\x68\x80\xa6\xde\xc5\x59\x1f\xed\x21\x75\xa5\x2f\xaf\x29\xa8\x51\xe5\x19\x61\xa6\xfd\x73\xe9\x24\x95\xd0\x67\xb6\x6f\x2f\x75\xe1\x3f\x1b\xcf\xa7\x8e\xe2\x8e\x1d\xdf\x31\xcc\xb1\xd3\x51\xda\x76\xb3\x74\x3e\x05\xdf\x30\x6c\xb6\x3f\xf7\x2b\x9e\xc9\x44\x1b\x73\xe4\xf4\xc5\x17\xe5\x9c\x2c\x47\x8e\x76\x3d\x34\x4b\xe7\xda\xaf\x8c\x76\x40\xb4\x3f\x37\x3c\x85\x25\x9b\xff\xc8\x4b\xef\x32\x62\x66\xe8\x9b\x19\x36\x5c\x26\x01\xe7\x34\x3d\x5b\x07\x69\xae\xda\x03\x5e\x5a\x49\x39\xe4\x76\x16\xd9\xa9\x8d\x38\x5a\x89\x49\x22\x66\xe4\xf2\x4b\xdb\x71\x8a\xf0\x95\x05\x2a\x88\x22\xb1\x77\x40\xf7\x5d\x77\x26\xca\x4b\xdd\x06\xb5\x39\x2f\xb8\xb7\xe2\x1e\xb3\x38\x74\x34\xe9\x2d\xf5\x3c\x12\xc3\xb9\x94\xf2\xc4\x2f\x70\xfb\x53\x2f\x27\xbd\x31\x0e\x5c\x57\x71\x11\x29\x86\x42\x48\xfe\x23\xfa\xc8\x80\x37\x92\xef\xf6\x37\x64\xc1\xbd\x1b\x51\xed\x52\x57\x8c\xaf\x44\xd5\xf8\x4a\xe2\x29\x22\x57\x62\x58\xc5\x66\xd7\x11\xbb\xcc\x86\x38\xab\x81\xd3\xf7\x36\xd3\x48\x1c\xbf\xfa\x1b\x3f\x42\x70\xd6\xeb\xe5\x45\x11\xf6\xc8\x46\xd9\x60\x26\x47\x4b\x39\xf3\x27\x28\xf6\xac\xa3\xa1\x4a\xc5\x49\xff\x21\x3d\x40\x38\x44\x9d\x90\x6c\xb6\x2a\x95\x2c\x25\xc3\xa1\x01\xac\xb3\x5c\xcd\xdd\xb5\x0d\x41\xac\x24\x59\xbe\x13\x7b\x6b\x1c\x8a\x45\xbc\x96\x06\x93\xb7\x82\xe2\xe1\x13\xf1\x2c\x09\xc4\x27\x5e\xa1\x46\xab\x80\x5d\x53\xb6\xd3\xe4\xab\xd4\x2b\xad\x2f\xa4\x9b\x76\xff\x38\xfa\xc0\x30\x63\x73\x19\x90\x53\x55\x50\x71\x81\x52\x2a\xa0\xd6\xaf\x36\xea\x5e\x49\xfa\xfd\x14\xd1\x59\x3a\x87\xad\xde\x63\x45\xe1\x31\x41\x64\x90\x92\x17\x54\xef\x39\x0c\xd8\xa7\xf6\xa5\xd0\x52\x8c\xad\xbd\x81\xcb\x96\xcb\x3b\x45\xe8\xb1\x24\x7e\xc0\x64\x57\x93\x64\xe3\x23\x98\xf0\x38\xd5\x45\x78\x56\x2b\xa0\x13\xec\xec\x92\x62\xb8\x6e\x2f\x6d\xd4\x2d\x4e\xac\x50\x47\x78\x85\x33\x02\xc5\xc3\x2b\x1c\x10\x79\x2f\x27\xbf\x01\x54\x84\xf3\xc6\x16\x22\x2d\x5d\x2b\xa3\xf0\x65\x33\x57\x50\x29\x94\x83\xd0\x31\x17\xe0\xd2\x46\xb5\x28\xbc\x60\x08\x5e\x5e\xf3\xf8\x86\xbe\xa6\x4b\x3e\x55\x06\xb1\x84\xfb\xda\x34\x16\x89\x73\xbc\xb1\x6e\x75\x16\x59\x76\x2d\xa0\x39\x84\x04\x3a\x34\xb6\x38\x3d\xf5\x74\x25\xc3\x38\xcd\x29\xe3\x02\x1a\xd2\xd4\x45\x57\xca\xb3\x6a\x95\xef\xc5\x62\x9d\x82\xe9\x2d\xd4\x08\x26\xb8\xb0\x81\x78\xa9\x35\xcc\x82\xac\x7c\x12\x1b\x95\x6c\x08\xce\xa5\x48\x55\xe4\x47\x68\x6b\x8c\x69\xb7\x1e\xc3\x31\x0e\x10\xde\xfc\x77\xc3\xda\x37\x75\xe0\xdb\x10\xf6\x2d\xf8\xfa\xf6\x41\xfa\x02\xd2\x0c\xb6\x44\xd6\x81\x3c\x9c\xca\xbe\x94\x68\x1c\xf0\x2a\x22\x53\xd8\x1b\x70\x42\xc0\xa9\xa0\x25\x5e\xc1\x21\xf9\xce\x93\x29\x5a\x73\xb6\xef\x25\xd3\xd8\x1f\x49\x1f\x62\x06\xbd\x4b\x32\x9a\x2c\x8f\x2c\xb1\xd1\x52\x76\xee\x8a\xe4\xb3\xe5\xbc\xc4\xe9\x95\x18\x44\x45\x5c\xcf\xb8\xb7\xc1\x57\x0a\x2f\xa8\x13\x4d\xc5\xd1\x5c\x64\x50\x08\x89\x4c\x9b\xc5\xaf\x7e\x88\x7c\xf8\x18\x6f\x05\xc9\xdd\x98\xaa\xa5\xc9\xe8\xa6\xac\x7a\x2d\x2b\x58\x91\xcd\x6c\x6d\xaa\xee\x91\x15\x18\x68\x7b\xe2\x5f\x9f\x84\x48\x21\x66\x05\x78\x42\x67\x82\x35\x59\xe9\xb6\x14\x85\x27\xd3\x49\x88\x45\xa3\xf2\xa2\xf0\x72\x0b\xd9\x2b\xed\x6f\x52\xe6\xea\xef\xcc\xb6\x95\x7b\xea\x35\xf7\x72\x84\xf0\xc6\x75\x37\x3d\xd8\x66\x37\x22\x69\xa3\x6c\xd4\x6e\xc8\x2c\x97\x5a\x84\xca\xbe\xf6\x0e\x5f\x56\x87\x61\xb0\x2f\x3e\x5f\x0a\x2e\xbc\x44\xf9\x82\x8c\x26\x0b\x1b\xe5\x0b\xa4\xf6\xf1\xd9\x62\x2e\xfb\x7a\x57\x14\xde\x5d\x73\x92\x40\x06\xd9\x55\x29\xbb\x80\xfd\xb0\x14\xc2\x7e\x24\xa3\xc9\xc7\xa3\xcb\x49\xbf\xff\x11\xdd\xc8\x92\x77\xa8\xa3\x7e\x6d\x0c\x9f\x71\x53\x52\xe0\x6b\x5e\xd3\xa3\x9e\x70\x7b\xad\x95\x57\xe7\x33\x3e\xef\xc8\xe1\x60\x80\x3a\xd7\x65\x6a\xf1\x30\x68\x32\xb0\xec\x4c\xaf\x15\x70\x52\xf6\xcb\x15\x4d\x4f\x56\x6b\x7e\x07\xfe\x24\xa5\x14\x95\x0f\x06\xb8\x54\x7b\xd6\x35\x4d\xa9\x94\x3a\x9a\x66\x9d\x73\xdb\xe0\xa1\x46\xae\x1b\x8e\xdf\xb8\xbd\xb1\xf1\x19\xd3\x38\x52\xe6\x54\x70\x36\xa5\xa8\x53\x01\x44\x6a\x62\xce\x37\xd6\x56\xf4\xcd\xf0\xa5\x8d\x5a\x3b\x7c\x5b\xad\xef\x79\x45\x6b\xa3\x46\x25\x06\x63\xdf\xb2\x42\x79\xbf\x23\xab\xa4\x60\x95\xac\xef\x78\x55\xb9\xc1\xd6\xe6\x51\xaa\x27\xfa\x15\xcc\xbc\x7b\xa5\xff\x07\xd6\xd1\xf2\xc2\x65\x9c\x46\x9e\x94\xce\xaa\x9f\x99\xd8\xdd\x52\x49\xc1\x63\xb9\xc8\x8a\x02\x7a\x30\x78\xce\x95\x90\x24\x53\x80\x06\x99\x72\xc4\x06\x45\x78\x86\x63\x41\x26\x8a\x02\x7a\x31\x78\xcf\xad\x70\xba\x41\x51\xf0\x61\x1c\x0d\xe8\x30\x8e\x2c\xef\xa0\xbc\x12\xb0\x8b\x9c\x70\xe9\x78\xb8\x32\xe0\xa9\xb5\x19\x48\x89\x0a\x96\x2e\x62\x53\xdb\x45\xac\x17\x4b\x85\x59\x33\x07\x95\x8f\xcb\xc8\x75\xe5\xf2\xf2\xf8\x54\xf6\xc7\x87\x56\x2a\xfa\xfe\x4e\xf0\x91\xb1\x26\x20\x47\x23\x04\xda\x42\x26\xa1\x85\x6b\x79\x61\x0f\x11\x74\xa0\x37\xb2\x8e\x32\xa7\xcd\xcf\x63\xeb\xf3\xab\x3f\xdb\x63\xb1\xfd\xa5\x2d\xdb\x5f\x3a\x8b\xe7\x9d\xac\xa5\xb7\x35\xde\xc1\xec\x3d\xd6\x17\xb1\x3f\xaa\x5d\xd0\x46\x43\x56\x47\x83\x49\x68\x51\x90\x7d\xcd\x6d\x07\x98\xb2\x4d\x4a\xd5\x13\x07\xd0\xad\xac\xde\xad\xc0\x74\x2b\x27\xa3\x49\x7e\x14\x94\xdd\xca\x25\x88\x0d\x09\x14\x4d\xdd\x34\x7a\x26\x73\x24\xc4\x7c\x81\x09\x3b\x12\x87\x5f\xce\xbd\x44\xce\x58\x26\x27\xab\xce\x03\x73\x36\x46\x78\x29\xb3\xf0\x0c\xa7\x72\x7a\x96\x19\xde\x73\xe5\xe0\xa4\xe7\x85\xc7\x64\x04\xde\x03\x46\x45\x11\x1e\xc1\xef\x63\x02\xa8\x90\x6f\x65\xa3\xaa\xeb\x52\x06\x6f\xb7\x17\xb5\xae\x8d\xa1\x63\x32\xf2\xad\xb7\x11\x2a\x0a\x59\xcd\x9f\x04\x06\xbd\x4b\xd1\x91\x06\xa7\xdf\x47\x46\x2f\xa5\x37\xb2\xcd\x38\x5f\x56\x29\xfb\x84\x93\x17\x52\xdd\x84\xea\xa5\x3e\x18\x8b\x89\x5b\xd5\x4f\xb5\xb4\xe7\x2b\xd4\x45\x0f\x6c\x4a\x5e\x72\xcf\x5a\x15\x84\xa4\x53\xee\xff\x4c\x3d\xdb\x7c\xf3\x27\x8b\x96\x1e\x53\x50\x55\x90\xe2\xe4\xaa\xfb\x19\x31\xfb\x7f\x2b\xcd\x4b\x7b\xcf\x38\xdc\xc1\x95\x99\xe4\x8d\x1a\x39\xe5\x5e\x8a\x26\x28\x25\x6a\xc4\x9b\xcd\x86\xfa\xfb\x96\x49\xe0\xb3\x4a\xe3\x4f\x40\x24\x57\x9b\x8b\xb6\x6a\xaa\x22\x2a\x2d\x56\xaa\xf1\xd2\xf3\x52\xc2\x66\x71\x0b\x5d\xb1\x14\x55\x25\xb9\x34\xe3\xa0\x6f\x5d\x64\x81\xdb\x38\xba\xa4\x60\x6e\x05\x3a\x7d\xa9\xda\x3f\xd3\xc6\xf0\x8b\xc1\x76\xdd\x0f\xfa\x86\xcb\x1a\xd6\x52\x6f\xde\xbe\x8d\x53\x3a\x6c\x86\x33\x4b\xcb\x0d\xb8\x44\x94\xc6\x11\x94\x4c\xa5\xc0\xe8\x4c\x50\x6b\xf1\xab\x72\x70\xd2\x85\xe5\xd1\x98\xed\x9a\x9d\x4c\x7a\xdc\xa9\x28\xc1\x99\x8e\xef\x20\xd4\x15\xec\x57\xfc\x7a\x2f\x3d\x4f\xec\x3d\xd6\xe7\x1d\x34\xbc\x17\xb7\xe1\x33\xae\x30\x21\xfa\xde\x06\xe8\x9b\x78\x6a\x6e\x05\xee\x70\x5a\xf1\x5d\x14\x3b\x3a\x8a\xcc\x48\xc4\xd6\x48\x94\xe6\x01\x75\xc6\x09\x33\xe2\x51\x02\xab\x0e\x69\xbd\x64\xe3\x91\xba\xaa\x67\x6b\x69\xa0\x4b\x3d\xdb\x54\x9a\x70\x13\x42\xb5\x86\x6d\xdf\xa8\xfe\x6e\x4b\x1f\xc1\x4c\x6b\x35\x67\x93\x8c\x08\xea\x8c\xea\x5a\xcd\x52\xb1\x37\x6b\x51\x31\x36\x12\xa4\xf2\xe3\x2c\x80\x6a\x73\x42\x58\x59\x6d\xae\xab\x6d\xfa\x98\xfa\x83\x2b\xb1\x3b\x18\xbc\xca\x6c\x7a\xb1\x96\x23\xcf\x31\x53\xda\xeb\xfa\x28\x92\x12\x2a\xa9\x8f\x58\xc5\xf7\xe6\x64\x0d\xc4\x1b\x66\x68\x4a\xe2\xf2\x30\x2f\xd5\x99\xd5\xb9\x7b\x10\xcb\x53\x37\x20\x41\xc2\x39\xb5\xe0\x64\x55\x38\x6c\x40\xd2\x0a\xf7\x9d\x99\xf3\x3b\xeb\x13\x2f\x85\x8d\xaf\xa9\xc2\x39\xc8\x54\x25\xcd\x3d\xee\xef\x15\x3e\x54\xdd\xa9\x42\x07\xa3\x2c\xec\x70\x10\x28\xc7\x29\x15\x64\x8c\x61\xa6\x6e\x36\xb1\x49\x97\xf2\x2d\xf2\x07\xf7\x4c\x92\xf5\xf5\x39\x84\x25\x8a\x48\x0f\xc4\x93\x95\x48\x37\xe6\xea\x09\x70\xde\x61\xc7\x35\x90\x70\x23\x5d\xad\x84\x95\x80\x09\x45\x5b\xa9\xa2\xf4\xdb\x0e\xd9\x36\x84\xac\xa6\xf8\x8d\xd4\x07\xc4\x5a\xa9\x4c\x8e\x29\x61\x53\xa9\x9a\x84\x7c\x5b\xa5\xe4\x47\xae\x4c\xb5\x61\xca\x49\x51\x22\xf0\xe9\xdb\xdf\x2a\x37\x46\x71\x4a\x4f\xb3\x16\x25\xa4\x9f\xa5\x34\x1f\x6d\xf1\x82\x7a\xbf\xa9\xeb\xe6\xbf\x71\x72\xbf\xc5\xdf\xf1\x8a\x59\xd1\xcf\xe5\xfe\xd1\xa3\x45\xb1\xf7\x8f\x8b\xfc\x87\xa6\xc5\x98\x25\x23\xe2\x15\x39\xe5\xf4\x3b\xee\xff\xcd\xb8\xa2\x67\x33\x3a\x2f\x0a\x4f\xfc\x23\x76\x48\xb4\x33\x08\x85\x16\xae\x06\xdf\xb9\x8e\xad\xa8\xfc\x6b\x65\xeb\x78\xae\x0d\x7b\xcd\x71\x0b\x6f\xa6\xce\x3a\x88\xa2\x38\xbd\xd4\x86\xbb\xc3\xf1\xfa\x93\xe3\x4b\x9d\x80\x94\xdc\xaf\x19\xf5\x9f\x7b\xce\x9a\x51\x07\xcf\xd8\x1c\x5b\x4e\x94\x07\x02\x3b\x0e\xc2\x2a\x52\xbc\xcf\x70\x98\x25\xfe\x08\xaf\xb3\xdc\x1f\xe1\x70\xe5\x53\xcc\x59\x10\x27\x71\x7a\x09\x1a\x9f\x7e\x6f\x8c\xc1\x06\x14\xde\x72\x1f\x42\x32\xbf\x55\x31\xc1\x04\xac\x5f\x58\xb0\x5e\xc7\xe9\xa5\x83\xb6\x62\x3a\xd2\x20\xdf\x30\x6a\xdb\x45\xc9\x3d\x8d\x78\x7c\xc8\x68\xce\xa7\xf2\x9f\x9a\xf8\xfe\x08\xc9\x3b\x47\xa5\xab\xa2\xbe\xce\xe2\xc1\x78\xee\xab\xbb\x85\x40\xbb\xba\x49\x41\x16\x3b\xc2\xa9\xc0\xb5\xbc\x8d\xfb\x2b\xc7\xcf\x41\x4f\x43\xae\x0b\x5d\xbd\x20\xb6\x01\x09\xa9\x97\x29\x8d\x22\x19\x4f\x31\xce\x52\x24\x8d\xde\x0c\x00\xca\xac\x37\xb0\x94\x15\x9b\xe2\x9a\xcc\xe6\x98\x31\x2f\xc3\x29\x06\xed\x93\x0c\x83\xdd\xaa\xae\x86\x7e\xe2\x94\xa5\x41\xf2\x46\x56\x17\xb9\xee\xcf\xd4\xcb\x10\x92\x57\xc0\x15\xb5\x8d\x6a\x82\xd6\x78\x81\x46\xa8\xdf\xe4\xc5\x8e\x4c\x38\x2d\x15\x64\x1c\xa7\x01\xbc\x54\x99\x01\x68\xe6\xad\x09\xcf\x7c\xc2\x56\x36\x09\x13\x61\xe0\x07\x56\xc1\x5a\x8d\x88\xe4\x0a\xd6\xf2\xc0\x3e\xc2\x02\xdb\x6a\xaa\x54\xe2\x5f\xbc\x69\xc3\xba\x84\x16\x4f\x3d\x33\x0f\x00\x97\x00\x10\x97\x69\x61\x10\x5e\x89\x19\x82\x7c\xaf\x9a\x13\x62\xf3\x56\x12\x6c\x01\x04\x84\xc9\xc6\x5e\x0d\x4e\xb5\x8c\x4c\xb2\x4a\xdd\x6f\x25\x2f\xb1\x31\x02\x33\xd3\x1d\xd0\x5f\x15\x9d\x99\x78\x7b\x17\x8b\x70\x35\xe0\xc1\xc2\xc4\xa4\xc9\xcb\x58\x10\xa8\x28\xf2\xe1\x1f\x1b\xca\xee\xa4\xad\x73\xc6\x5c\xb7\x96\xe0\x39\x43\x59\xde\x51\xf3\x4b\xd7\x51\x86\x2e\x71\x64\x86\xc1\x2d\x0b\xd6\x83\xab\x20\xbc\x36\xa6\xa5\xd2\xdd\x89\xc3\x68\x1a\x51\x26\x88\xa7\x83\xcd\xbd\x5a\x3a\x5c\x33\x8a\xe4\xbf\x12\x58\x63\xbc\x6b\xdf\x9b\xc3\x6c\x5b\x4b\xfd\x27\x6b\x47\xb1\xbd\x08\xfc\x6f\x0e\x10\xa3\x58\x86\x0e\x0d\xaf\x02\x56\xba\x02\xe0\x43\x1e\xf3\x84\x12\xe7\xe2\x62\xe3\xf4\x6b\x1e\x26\x87\xda\x7b\xbb\x37\x7e\x04\xda\x4e\x15\x33\xe8\x80\xc5\xc1\x20\x09\x16\x34\x71\xb0\x02\x53\x09\xaa\xfb\xd7\xea\x3d\xd3\x46\x0b\x40\xe0\xa4\x85\x43\x1d\x60\x43\x92\x9f\x69\x55\xf7\x0e\x94\x25\x94\x36\xd7\xd8\x75\x7b\x7b\xdd\x6e\x83\x48\x53\xcb\x26\x4f\xf0\x43\x8e\x83\x6b\x02\x5d\x8b\x00\x95\x96\xf6\xa8\xe3\x74\x9d\x1e\xc9\x8a\x42\x9c\x4d\xe3\x1e\x29\xbd\xa5\xbb\xee\xc1\x7e\x8f\x54\x90\x10\xf7\xc7\xa8\x28\xbc\x8c\x38\xff\xed\xbf\x3a\x08\xa7\x7d\x92\x61\x46\x9c\xae\x43\x4a\x83\xbd\x74\x0b\xd7\x5d\x15\xea\x8a\x7c\x8e\x97\x02\xd4\x4a\xa9\xaf\xe5\x6b\x1a\xc6\x41\x02\x0a\xaf\xf8\x8a\xf4\xc6\x1d\xb8\xc0\x52\x46\x00\xe8\x3e\xa9\x87\xfc\xd0\x96\xf0\x2f\x59\x70\x29\x4d\xda\x4d\x7f\x23\xe9\xd3\x7e\x09\x33\xfd\x55\x1a\xd1\x4f\x24\xea\x48\xb1\xe7\x52\x46\x1d\xe2\x08\xaf\xc8\x7a\xba\x96\x37\x91\x83\xc8\x37\x0c\x49\x24\xea\x55\x1e\xe9\x6e\xea\x75\x1a\xdf\x0d\xa1\xba\xca\x8c\x70\xd4\x5f\x21\xd4\x91\x8e\x39\xa6\x49\x95\x54\x18\x7f\x19\x37\x73\x84\xfc\xea\xc7\x1b\x84\x69\x49\x6f\xa8\x52\x45\x5e\x67\x79\x7f\x85\x6f\x64\x40\x9b\xa4\x4f\x56\x2a\x8d\xac\xe0\xca\x6c\xad\x98\xc5\xa8\x4f\x56\x7d\xe9\xfe\xe3\x4e\x6f\x12\xb1\x74\xda\x4f\xc8\x7a\x36\x9a\xcb\xf6\x5f\x4a\x04\xd7\xef\x19\x17\xe4\x72\x00\xf0\xbf\xbf\x9c\x78\x77\x64\x47\xa3\xff\xe6\x2d\x10\x76\xcc\xea\x46\xdf\x14\xbc\xe7\x6e\xa7\xe7\x8c\x0b\xee\x98\x5e\x2d\xc0\x1c\x5e\xba\x78\x10\xad\x2d\x0a\xe7\x22\x55\xbf\xa7\xde\xee\x26\x95\x25\xa6\xce\xbf\xff\x97\xff\xd5\xf1\x9d\x7f\xff\x2f\xff\x7b\xcb\xe2\x6d\x34\xd6\x34\x03\x70\xa3\x9b\x31\x16\x74\xf8\xae\x8a\x23\x6b\x1a\xbe\x13\xdc\xca\x55\x96\x44\x94\x79\x50\xee\x2b\x50\xbf\x32\x07\xee\x9a\x73\xe0\xce\x6a\x4a\x67\xc7\x6c\x18\x63\xc8\x05\xc6\x37\x5b\x19\x36\x5e\x95\x31\x4c\x7e\x63\x69\x94\xd3\x74\xe7\x24\x2b\x0b\xeb\x86\xbb\xae\x77\x45\x7a\x23\x5d\x99\x01\x2f\x15\xb3\x2a\x8b\x97\x1c\xec\x13\x12\xda\x64\xc0\x2c\x9f\x31\xc2\xac\x28\x64\x1c\xba\xab\xa2\xc8\xb4\x93\x46\x26\xc8\x71\x27\x75\x5d\xef\x63\x9f\xa4\x08\xc7\xf2\x57\x2c\x59\xd1\xdb\x92\x1e\xcf\x92\x39\xfe\xa8\xc2\xad\x94\xf7\x15\x27\xdd\x38\xed\x6e\xd0\xa6\x6e\xe7\x7e\x82\xc0\xaf\xc3\x5d\x42\x95\x87\x45\xd8\x0a\xe4\xef\xdb\xea\x70\x9d\xe0\xcd\xec\x64\x6e\x85\xa6\x6e\xdb\xdd\x6f\xd1\xb6\xfd\x43\x62\x7b\x4e\xa2\xac\xa2\x99\x5d\xaa\x08\x6a\x95\x01\x9c\x03\x39\x27\xf1\x34\xee\x3b\xdd\x70\x35\x58\x66\x2c\xa4\x83\x05\x38\x75\x73\x7c\xa7\x9e\x62\x28\x57\x22\x0e\x9a\x59\x8e\x43\x92\xf4\xcd\x09\x72\x52\x1e\x76\x97\xfa\x6c\x7f\x45\x46\x93\x2b\x23\x1d\x77\xdd\x9e\xe7\x2d\x09\x9f\x5d\xcd\xc5\xa6\x74\x9c\xb8\xee\x52\x5d\x80\x25\x68\x72\xd5\xef\xa3\x89\xa4\xa6\xd9\x31\x09\x4b\x47\xc2\xd5\xf6\x76\xa8\x54\x26\x50\x6a\x1b\x22\xf7\x20\x41\x90\x41\x2a\x27\xe2\x0d\xc2\xf2\x9e\x09\xac\x7a\x65\x46\x9d\x2d\x21\xe2\x97\x2d\x05\xe3\xac\xae\x97\xd8\x4b\x5d\xd7\x96\x21\x74\x62\x29\x7f\x6d\x9b\x9f\x38\x46\x58\xe4\x87\xd5\xa9\xf9\xad\x38\x5d\x6f\xf8\x30\xa5\x34\xca\x9f\xcb\x41\x32\xe3\xeb\xba\x5e\x5c\x14\xe0\x53\xa6\x6d\xfc\x76\x44\x5b\x93\x93\x4e\xf0\x6f\xf5\xe0\x64\xe1\x6a\x20\x65\x13\x8e\x38\x21\x46\x48\x4e\xd9\x96\xd6\xe4\x94\x7f\x48\x69\x14\xf3\x60\x91\x50\x2f\xd6\xb1\xc8\xea\x0d\x88\x51\xb9\xb2\xea\x9b\x61\xc5\xa5\x16\x63\x75\xbd\x62\x5b\x50\x14\xab\x03\x3e\xce\xc8\xa8\x2a\xad\x86\x41\xc4\x09\x0e\xf1\x12\x5f\xe1\x88\xc4\x7a\x85\xaf\xc9\x08\xaf\xc8\x18\xdf\x08\x0e\xe0\x4e\x6e\x8d\xf1\xd2\xbb\x23\x64\x8d\xee\x37\x24\x21\x21\xc9\xc5\xa7\x2b\xa3\xa2\x22\xfe\xdd\x91\xf1\x5e\x29\x59\xb8\x14\xe7\x82\x85\x9e\x7c\xf2\xae\xcb\x92\x70\x7c\x94\x8d\xbd\x25\xe9\xec\xe3\x1c\x9f\x90\x5b\xeb\x5e\xd8\xbe\xdd\x3d\x51\xb7\xbb\xb7\x4a\x74\xb4\x76\xdd\x13\x6b\x3e\xa0\x4b\x39\x11\x4e\x4a\x2f\x7d\xb7\x6a\x1a\xaf\xcb\xd8\x85\x20\x61\x12\xcf\xe3\x75\x51\x9c\xd8\x72\xaa\x5b\x10\x8f\xad\x2d\xf8\xc8\x72\xcf\x74\x0b\x72\xaa\x5b\x10\x4d\xad\x5d\xf7\xee\xf8\x56\x5d\xf8\xc1\x17\x9c\x10\xc7\x41\xf8\xa4\xc2\x6c\x6e\xa4\xa6\x90\x95\x08\x39\x72\x79\x43\xe9\xe5\xd3\xbc\xef\x4c\xa4\x49\x01\x24\x8b\xaf\x4a\xd5\xfb\x2e\xa9\xf6\xd3\x0b\x35\xac\x32\x83\xc8\x4e\xd3\xc8\x64\x16\xad\xbf\x73\x5d\x6f\x51\x14\xde\xc2\xe2\xe5\xcb\x5c\xf8\x16\x74\x1e\x4e\x24\x3b\xe9\xba\x9e\x77\x55\x14\xde\x95\x38\x53\x20\xc5\xa9\x9e\x68\x56\xf3\x64\x18\xe8\xe9\x5c\x5e\x80\x7e\x12\x84\xb4\xf2\xc5\x82\x30\xfb\x34\x27\xf6\xb7\xd9\xa7\x79\xa7\x82\x60\xaf\xb7\x84\xeb\x8a\xa5\xbe\x09\x3d\x51\xd7\x15\x4b\x72\x2b\x3d\x96\x76\x65\x97\x8f\x15\x82\xa5\xb8\x15\x50\x0c\xb2\x40\xc1\xc5\x2c\x50\xd5\xe5\xed\x42\xcf\xa3\xb3\x3e\xd9\x47\x8b\xd9\x59\x7f\x3c\x97\x78\x48\x24\xca\x16\xb3\xb3\xb9\x14\x53\x2f\x8b\x62\x69\x86\x56\x43\x79\x4b\x46\x93\xb7\x47\x97\xe5\x6c\x7c\x8b\x38\x03\x87\x5a\x97\xb3\xb7\xb2\xe0\x52\x34\x51\xdd\xc9\x8c\x10\x4c\x7c\xc1\x6b\x8b\x5c\x6a\x56\x09\xe2\x35\x8d\xfa\x63\x5f\xfc\x40\x83\x35\x5e\xda\x97\xbd\xe2\x3b\xb4\x1f\x97\xb9\x15\x19\xed\x2c\xf5\xa4\x83\xb8\x9b\x08\x2e\xda\xd7\xc7\x24\x52\xac\x9a\x6e\xe5\xd3\x52\x21\x29\xc2\x77\x48\x2d\xc2\x1b\xb9\x70\xae\xc9\xba\x7f\x63\xed\xb7\x3d\xa5\x09\x70\x4e\xae\x8f\x9f\x4e\x6f\x0c\x4d\x7e\x3a\x58\x23\xff\xa6\xc3\xcd\xc1\xdd\xe3\xf8\x1c\x07\xd3\xa0\xbf\xf1\x37\x38\xc4\xeb\xfe\xb9\x82\x42\xc8\xdd\x34\xf1\x1d\x07\xe7\xf8\x0a\xb0\x7e\x7d\x4c\x9e\xa2\xfb\x1b\xa2\x81\x09\x50\x78\x4d\x9e\x2a\x07\x1b\x6b\x72\x8d\x43\xe2\x38\xdb\x1b\xe3\xb2\x32\xc3\x19\x61\xb3\x55\xbf\x2f\x78\x1b\xf2\x33\xf7\xe4\x0b\xe6\x16\xbf\x84\x14\x4b\x52\xfa\x02\x1e\x4f\xde\x94\x62\xfc\x37\x62\x44\x2b\xad\xad\x02\x7f\x33\x47\x18\x00\xbf\xe9\x8f\x6b\x80\x6d\xc3\x7b\x56\x75\xc0\x1d\xa7\xc6\x8e\x8b\xd1\x9c\xb7\x1b\xfc\x62\x26\x05\x96\x95\x6b\x97\xf2\xfa\x02\x37\x15\xa5\xac\xfb\x46\x4f\x4b\xe5\x72\x70\xd0\xa2\x6b\x9a\xfe\x4c\xbd\xef\x3c\xf3\x8a\xd0\x80\xf5\xc7\xfe\x58\x66\x4d\xb3\x48\x65\x05\x09\x5f\xa9\x80\x7a\x15\x47\x11\x4d\xc9\xb3\xba\x3f\x81\x98\xb5\x98\x79\x08\x3a\x9b\x11\x3e\xc9\x8e\xd8\x24\x23\x6a\xe7\x0c\x40\x6b\x50\xa0\x01\x74\x54\x7f\x53\x06\x3a\x38\x03\x9b\x85\x94\x64\xfd\x00\x5a\x8a\x95\x8d\x58\x60\x99\x4a\xc0\xf1\x8e\x95\xfe\xb5\x02\x56\x8b\x10\x90\xb3\xaf\xf9\x1c\xbd\xd7\x6d\xfb\x46\x97\xa3\x9d\x8c\x4d\x53\x92\xb1\x61\x44\x93\xe0\x8e\x46\xcf\x83\x24\x59\x04\xe1\x75\xee\x07\xe2\x43\xc0\x7c\x4f\x3c\x45\x57\xad\x98\x69\x1b\x86\x47\xc8\x0e\xcb\xd7\xe2\x04\xa5\x29\xd9\x64\x33\x5a\x71\x65\x1a\xa3\x2d\xda\x62\x29\x8b\x67\xb6\x08\x3e\x13\x58\xb1\x1c\x06\x30\x63\x97\x18\xb0\x8e\x41\xca\x6e\x65\x0c\x3a\xe3\x73\xcf\x1a\xbd\x84\xed\xb2\x26\x00\x87\xe9\xe9\x65\x79\xeb\x60\x1d\xb3\xcd\xb7\x59\x3c\xef\x80\x76\xab\x38\x28\x4f\xaf\xe4\x18\xf8\xce\xe5\x86\x73\xca\x20\x6d\x5d\x56\xe0\x2b\xb6\x56\x24\x47\x3a\xab\xdc\x36\x1d\x08\xcf\xb6\x62\xea\xde\x6a\x6b\x2a\x20\x55\xad\x8e\x90\x55\x74\x1b\x60\xb2\x2a\x56\x02\xd8\x1a\x48\x50\x5e\xdd\x2c\x81\xab\xb3\xce\xf2\x58\x00\xf0\xbb\x8c\x26\x01\x8f\x6f\x28\x1c\xe3\x40\x84\x5f\x46\xbc\x14\x6c\x5a\x2d\x49\x8b\x7b\x75\x20\x5d\x51\x81\x2a\x28\x00\x88\xd7\x0a\x7f\xa4\x3f\x49\x87\x8f\xa6\x4d\x2a\xe0\xed\x67\x79\x8a\xdf\x47\xba\x6c\xd9\xb3\x25\xab\xaa\x62\xec\x12\x55\x9a\xd5\x2d\x78\x50\xa0\x21\xca\x81\xcf\xd4\xdb\x5d\x48\x2d\x63\x23\xdd\x65\xfa\x17\x66\xc3\xc5\x26\x4e\x38\xf2\x7f\xad\xaf\xeb\xab\x4a\x83\xd4\x65\x9d\x1d\xfc\x58\xb5\xb8\x23\x3f\xe9\x90\xb4\x70\xaf\x00\xc3\xa0\x64\x5f\xfc\xcb\x28\x85\x5c\x2a\x93\xce\x2c\x8b\x96\xe2\xd3\x1e\xe1\xa5\x24\xd5\x92\x8d\xf5\x54\xb3\xa4\xcc\xde\x33\x99\x88\x29\x89\xad\x0c\xc4\x2a\x89\xd5\xfc\x43\x3e\x83\x06\x57\x3b\x47\x98\x85\x07\x95\xf3\xde\x6b\xf3\x07\x62\xaa\x9c\x9a\x5f\xa0\x1e\xac\x3c\x94\x54\xe4\xbf\x7e\x35\x4d\xc7\x47\x66\x82\x3b\xa8\xc9\xf7\x4b\xc5\x74\x47\xe0\xa4\x7c\x45\x6c\x6a\xbf\xda\x4d\xf6\xbd\xca\x97\x0a\xbe\xcb\x50\xd0\x15\x60\x15\xd0\x52\x33\xda\x70\xac\x86\x71\x0f\x99\x07\x83\x6c\xe7\x54\x9a\x8c\xcf\x20\xe0\x89\x57\x59\x6f\x10\xf4\xd5\x0a\x37\x8d\xe9\x17\x0f\x1a\x95\xf6\x6c\xb7\x48\xea\x08\x28\x4c\xdd\xb2\x60\x2d\xb1\x0b\x8d\xb0\x7a\x5b\xcf\xe0\xcb\x39\xa7\x27\x84\x99\x84\xb6\x00\xd7\x41\x1d\x7b\x2e\xeb\x61\x33\xbf\x2b\x03\x57\x95\xbf\xfa\xf5\xd4\x4e\x73\xca\x88\x8c\x96\x35\x9b\x45\x57\x41\x37\x59\x92\xc4\xb2\x61\xd5\x41\x91\x5f\x45\xc7\xe5\x2f\x65\x1e\xaa\x5f\x9f\x19\x1c\x7d\x19\xc0\xb3\xca\xd8\xd6\xd3\x0c\x50\xe8\x8b\xfc\x0a\xbd\xd1\x07\x5b\x3d\xd4\x8d\x82\x95\x11\xb6\x2f\xa3\x64\xce\x41\x39\x86\x5d\xa7\xdf\x84\x8f\x9d\x84\x2e\xb9\x2f\xd0\x6b\x99\x18\xc4\x9f\x68\xf4\x23\x64\x9a\xa6\xf2\xed\x5d\x96\xfb\x83\x54\x95\x3c\xcf\x78\x90\x80\x57\x5d\xd4\x77\xd6\x9f\x8c\xdb\x5b\xa7\xdf\xcc\x21\x32\x38\x5f\x9f\x6a\x4d\x24\xc5\xd5\x99\xdc\xcc\xa2\x29\xd3\x56\x6f\x7c\x56\xdf\xde\x00\x67\x9d\x4b\xc9\x92\xee\x56\xe9\x73\x2a\x37\x72\xa3\x40\x62\x16\xe7\xc4\x8c\xef\xd7\x30\x2a\x66\xf6\x5a\x9c\xda\xff\x05\xa8\x73\x94\x55\xe2\x97\x90\x93\x23\x1c\x54\x71\x91\x5b\x44\xb9\x3e\xa0\xe2\xdc\x68\x07\xdb\x76\x5a\x87\x1d\xe1\xde\x2e\xbc\xb8\x6e\x36\xab\x5f\x6a\xa6\xf2\xab\x33\x87\x1b\xa1\x32\x3f\xc9\xeb\xa2\x48\xc0\xdc\x5f\x69\x89\x11\x41\x75\xda\xc1\x75\x9b\xa8\xa5\x09\xb7\xd0\xaa\x71\xf6\x9a\x2e\xf9\xee\x26\xd5\x66\x60\x89\x4b\xd5\xcc\x57\x69\x4a\x99\x35\x15\x91\x60\x69\x35\x3f\xa5\xcd\xec\x75\x19\x59\xe1\xd9\x9a\x86\x15\x5b\x7b\xa5\x9b\xd6\x9a\x6f\xb6\x99\x5b\x7b\x6f\x48\xb2\xba\x04\x31\x41\x02\xa5\xc9\xbc\x13\xba\x6e\x3b\xbe\x66\xe1\xbc\x6d\xa2\x7d\x01\x1b\x49\xbd\xdb\xfa\x2b\x74\x54\x7d\x76\x6a\xae\xff\xcb\x43\xce\x30\x48\xe2\xcb\x54\xcc\x2e\x20\x5a\xe6\x4d\x6d\x34\x56\x94\x31\x49\xd0\xca\x4d\x03\x6b\xdd\x1f\xf0\xf7\x17\xa3\x98\xa4\x60\xb7\x78\x16\x2f\x92\x38\xbd\x6c\x0c\xb5\xe1\x21\x53\x5b\xec\xd1\x42\x27\x53\xd4\xb9\xd3\x0d\xb4\x2c\x6a\x1b\x12\x3e\xcd\xda\x94\xb7\x67\x82\x2b\x51\x7c\x4d\x0c\xcc\x49\x6c\x5d\x05\x97\x8c\x87\x49\x15\xa4\xc5\xbe\xdf\xb5\xf9\x10\xeb\x0b\xd2\x8c\x08\xb6\x36\x0c\x7c\xa7\xf9\x60\xcc\x6b\x5c\xa2\x69\xbd\xd8\x54\x2e\x59\x69\xc0\x07\x61\x21\x46\xa2\x00\x1c\xe9\xaa\x0e\x03\x2b\x57\xf6\xe0\x40\x4c\x15\x85\xbb\xfa\x74\x8e\x55\x50\x09\xcb\xc7\x3f\xb3\x35\x33\x61\x03\x93\x48\x2e\x45\x30\x99\x20\x6a\x60\xbc\x3e\x02\xc2\xa6\xbe\x4f\x82\xa3\xa6\x3f\xc0\x0d\xc9\x67\xc1\x1c\x27\x86\xec\xcd\x36\xd0\xb1\xa6\x66\x83\x1a\x4a\xd4\xd9\xa8\xc0\xd3\x6f\xb2\x4d\x2e\x43\x60\xe4\x45\x91\x34\xa5\x9b\x31\x04\x57\x18\x80\x27\xfd\xdc\xc1\x0e\x67\x1b\xc1\xdb\x2f\x98\xb7\xc1\x89\x44\xe7\x97\x29\x5f\x02\x22\xd1\xcd\x30\x58\x64\x37\x74\x9a\x55\x89\x60\x82\x99\x9a\xf3\x45\x21\x2d\xe6\x91\x9f\xd5\x24\xea\x38\x17\x75\x39\x8c\x46\x2c\xb8\x75\xec\xd3\xd9\xa2\xca\x04\x08\x96\xff\xa7\x33\x08\x7c\x8d\xee\x3d\x56\xae\x08\x71\x84\xb7\xd6\x47\x79\x98\x57\x2a\x2e\x62\xfe\xab\x0d\x01\x96\x5e\x47\xb9\x71\x90\x8e\xd1\xcb\x1d\x00\xd6\x23\x08\x6e\x6f\x28\xfb\x51\x35\xdb\x8b\x07\xa4\xb9\x31\x68\xa7\x16\x43\xa5\x88\xf2\x5a\x42\xda\xb1\xb1\xea\xcc\x40\x09\x48\x0c\xa9\xdb\x4a\x3d\xa5\x83\x0b\x7d\xc8\x79\x58\x56\xa1\x0e\x5f\xc4\x31\x87\x2f\x6c\xe1\x02\xc8\xbd\xcc\x29\xbd\xd9\x43\x5b\x5a\x36\x33\x4d\x6e\x4a\x13\x47\x56\x71\x5c\x5f\xd7\x28\x33\x6e\x44\x8d\xf6\x55\x16\x0e\xc3\x15\x48\xa6\x2c\xb5\x33\xf1\xfa\xbe\x94\xac\x2f\xb2\xe8\x4e\x9d\xce\x90\x66\xf3\x5b\xce\x8f\x13\xa7\x53\x47\x80\xe0\xe4\x95\x3f\x7e\x49\x4f\x07\x62\x57\xac\x52\xf3\xdc\x0e\x17\x00\xe4\xd5\x41\x36\x32\x14\x18\x43\x72\xcb\xf2\x6a\x02\x0c\x43\xf0\x96\x5f\x29\x7f\xee\xf1\xba\x2e\x07\x36\x2b\x8d\xaa\x95\xa6\xb8\x73\xcb\x72\x42\xe9\x6a\xa9\x13\xaa\x75\x60\xb0\xe3\x17\x58\x41\x32\x58\xdd\x61\xce\x19\xf5\x38\x9a\x30\x81\x79\xd5\xba\x09\x33\x2a\x86\x20\x09\x07\xd3\xb8\xa2\x18\x13\xc2\xa0\x16\xe9\x65\x5a\x2e\x52\x91\x76\xf9\xe5\xe5\x8c\xc4\xaa\x2b\xc1\x11\xe5\xea\x57\x9c\x7d\x45\xa5\x82\xb0\xb3\x16\xcd\xca\x93\xaa\x94\x00\x7c\x47\xad\x83\x50\x77\xec\x3c\x5b\x5b\x01\x36\xaa\x79\x01\x64\x05\x01\x83\x26\x80\x3a\x66\xce\xf4\x3c\x54\x0a\x2c\xd1\x3b\xb9\xa8\x7e\xb2\x5c\x4f\x57\xd2\xcb\xb0\x0a\xf6\x78\x81\xba\x97\xf3\xc9\x69\x10\xc5\x41\x12\x5f\x53\x19\x62\xa1\x74\xdc\xff\x3c\x5b\xad\x37\x9c\x4a\x81\xfa\x74\x47\xba\xc7\xc5\xd9\x45\x19\x97\x4b\xd1\x7b\x4a\xee\x61\x76\xae\x03\x96\xd3\x57\x29\xf7\x98\x4d\x03\x10\x96\x1a\x69\xcd\xaf\x52\xa5\x75\xab\xf7\xc4\x38\x3f\x0d\x4e\xbd\x14\x48\x10\x2a\x0a\xfd\x2a\x43\x34\xc8\x00\x34\x95\x2e\x93\xb4\xa2\xc4\xf2\xd6\x46\xfb\xb3\x41\x49\xa2\x53\x58\x5d\xcf\x02\x49\xe9\x2c\x43\xcf\xea\x38\xe9\xec\x39\xac\x9a\xea\xb2\x18\x00\x70\x0b\xe6\xa2\x01\xed\xfa\x9b\xa0\xa9\x09\xd0\x02\xae\x3e\x03\xce\x59\x25\x9c\x93\x92\xcb\xa8\xe1\xbf\x5f\x05\x6b\x9f\xda\x7a\x51\x18\x70\x63\xa5\xc1\xbb\xe5\x8a\x5c\x99\xc6\xd6\xb7\x6d\x15\x2b\x0a\x36\xed\x2f\xc1\x07\x77\x58\xad\x75\x88\x2f\x75\xd5\xbe\x6a\x3d\xb1\xac\xe7\x67\xaa\xab\x8a\xe7\xe8\x98\x7d\xa1\xaa\x78\x67\x55\xf1\x1c\xcb\x98\xa8\x7e\x45\x03\xfd\x8d\xb5\x2d\xaa\x21\x78\x27\x92\xde\x2b\x56\x88\x55\x22\x39\x3d\x67\x96\x29\x80\xc5\x1d\x97\x7e\x68\xf8\x51\x35\xf5\x3c\x43\x8d\x91\x15\xe9\xb3\x8d\x94\xdd\xcc\x3b\x7f\x42\xc8\xc6\x8f\x95\x8e\xf5\xa9\xa8\x48\xfd\xec\x33\xa0\x43\x53\xa6\xdd\xb3\x94\xc6\x57\x15\xa9\x19\x38\xae\xc2\x29\x81\x3e\x30\xd4\x49\x5d\xb7\x27\xa5\x50\xd3\x14\xd8\x60\x1f\xdc\x07\x2a\x59\xa7\xeb\x7a\x20\x8e\x4d\x31\xc3\x2c\xf5\x28\x48\x09\x65\x18\x27\xb8\x66\xff\xb0\x8e\xa4\x5b\x33\x84\xa5\x09\x68\x9b\x44\x4a\x54\x49\x5e\x82\xb2\x11\xc4\x32\xd9\x2d\x12\xb4\x65\xf1\xe0\x0d\x46\x2a\xf4\x9f\x12\x66\x98\x0e\x90\x0d\x92\x5f\xa5\x55\x45\xe9\x55\x08\xb8\x61\xc9\x06\x9f\x7b\xd5\xb3\x90\x02\x8f\x63\xa5\xf8\xb6\x95\x62\x36\x05\xf1\x9c\x79\xa9\xac\x4b\x4d\x27\x51\xc4\xe7\x58\x8c\x8e\x9f\x62\x46\x43\x2e\x3d\x08\x89\x69\x16\x5b\x2b\x25\x96\x53\x4a\x4f\xa7\x78\x28\x7f\xe0\xab\x20\x97\x4b\x31\xf7\x7b\x63\x6b\x8a\xbd\xab\xf0\xaf\x5c\x65\x07\x83\xa4\xc1\x58\xb9\xc2\x01\xcf\x6b\x5e\x0a\x02\x9e\x92\xd3\x87\x7a\xea\xa7\xab\x0d\x9a\x82\xd0\x5b\x7c\x9b\x6d\xe6\x3e\xe8\xc2\x86\x1c\x38\x17\xf1\x83\x70\x98\x60\x52\x26\xb4\x23\xb2\x8d\xe0\xa2\xca\xe6\x16\x85\xd7\x6a\xb9\x4c\xaa\x27\x66\xad\x9c\x2b\x23\xb5\x01\x0d\x94\xec\x8b\x59\x6a\x57\x1a\x5e\x0a\x16\x2a\x2a\x15\xf8\x87\x1e\x89\x4b\x81\x7d\x2d\x3f\x99\x49\xf3\x58\x81\x9c\x4a\x21\x12\x5b\x0e\xf9\x94\x94\xcb\x0a\x80\x24\x36\x18\xd3\xa9\xdc\x43\xb8\x6a\x86\x35\x18\x4f\x72\x7d\x4d\x20\x0d\xb1\x70\x22\xfe\xf5\xc7\xf3\x0e\x5c\x1c\x06\x8b\xdc\xdb\x0c\x17\x19\xe7\xd9\x6a\x90\xa8\x1f\xe8\x78\xdf\xb8\x03\x31\x5f\xfb\xc9\x90\x67\x6b\xb4\xb7\x3f\x60\xf0\x63\xbb\x55\x39\x98\x2e\xae\xd3\xe1\x28\x23\xf0\x8f\xe5\x68\x54\x31\x0d\xeb\xc5\xab\x3b\x25\xb3\x9c\xa6\x90\x53\x06\xaa\xf0\x6b\x79\x5a\xd8\x90\x4c\x4a\xf9\x13\xa2\xfc\x41\xc1\x79\x9b\xa6\x11\x5e\x92\xcc\x5c\x23\x0b\xec\x1d\x10\xb2\x31\x6c\x4d\xc9\x18\x49\xa5\x96\x07\xa0\xb0\xa2\xbc\x42\x40\x18\x6e\x4b\x88\xa8\xd5\x14\x33\xc9\x42\x4a\x17\x98\x09\x42\x13\x34\x18\x28\xbf\x43\x95\x4f\xe1\x91\x7a\x3d\x49\xa3\x6f\x82\x15\x4a\xef\xbc\x61\x47\x9a\xc7\x68\xdd\xa8\x11\xc4\xa7\x0c\x09\x29\xc1\x0d\xec\x72\xd3\x8d\xcd\x07\xee\x98\xc9\xfe\x2b\xe6\xbd\x85\xe3\x55\x88\x9a\x13\x22\x45\x08\x98\x82\xa2\x88\x25\x37\x50\x14\xa2\x56\x75\x8f\x1c\x92\x04\x27\x03\x32\xc6\x4b\xe2\xc0\x57\x67\x0b\x6d\x1b\x8f\xc1\x47\x5a\x43\x3d\xb4\xa7\x18\x9b\x3c\x64\x94\xa6\xd2\x21\x0e\x21\xf2\x6d\x98\x64\x97\x71\x18\x24\xbf\xbe\x78\xf7\xaa\x28\x9a\x69\x26\x5f\x44\x6f\xe2\x90\xca\x6c\xbd\x9a\x03\x28\x79\x74\x38\x35\xee\xbc\x4e\xed\x98\x57\xa5\xca\xde\x27\xc9\x7e\xed\x5c\xdd\x2a\xb4\xd5\x97\xa2\x5f\x75\x4c\x0d\xc4\x2c\x05\x19\xdb\x6a\xa0\xd8\xa8\xe3\xf1\xd6\x52\x7c\x55\x26\x6e\x2d\x9d\xdd\x6b\xf4\x0b\xa7\xb5\x6c\xbf\x35\xb2\x89\x14\x43\x76\x05\x03\xc8\xa1\xd2\x1f\x98\xe2\xf8\xb8\x1c\xad\x1f\x18\xe6\xd9\xda\xe7\x62\x6d\xfd\x90\x62\xb9\xd4\x7c\xae\xd6\xdc\x0f\xa9\x58\x6e\x8d\xc3\x46\x6c\x07\x7a\x8d\x3a\xc9\xf1\x08\xf4\x08\x52\x3d\xc6\x08\x14\x7e\xda\x08\x9b\xeb\x7a\x11\xd9\x34\x66\x91\x09\x27\x38\x9e\x46\x33\x05\x84\x90\x74\x1a\x19\x3a\xe3\x8f\xe6\xfe\x66\x17\xaa\xb7\x26\xc8\x9c\xeb\xf6\xc0\xeb\x5f\x5c\x14\xbd\x18\x3a\x0c\x76\x60\x92\x4d\xd5\x3e\x56\xea\x93\xbe\xd2\x94\xd9\x68\xde\x89\xc9\x7a\xaa\xb8\x66\x80\xa1\x99\x64\x78\xe9\xf3\xb4\x44\x09\x02\xec\xad\x05\xf6\x34\xee\xd6\x0a\x77\x5b\xff\x05\xdb\x96\xa1\xa3\x63\x91\x67\x20\x29\x16\x64\xbf\x21\xb1\xa6\x6c\x56\xea\x1d\xf1\x56\xfd\x1b\xb4\xb7\x0f\x8e\x01\x60\x97\xa9\x91\x72\x2c\xbd\x01\x5c\x5a\xfa\xcd\x3d\xef\xee\xe8\x72\xb6\x98\xa3\xc9\xa2\xdf\x47\x13\xa9\xbb\xb8\x98\x5e\xce\x16\x83\xf1\xdc\x1f\xe1\x5b\x22\xbe\xe2\x13\x75\x14\xf0\x0c\x86\x97\x53\x85\x1b\x5f\x22\x0b\xe9\xa6\x58\xbd\xf6\x40\x5a\xa8\x32\x43\x79\x8d\xcf\x4a\x66\x81\x87\x8f\x1a\x07\xb7\xdb\x4e\x5c\xa7\x0a\xde\xc9\x70\x91\x5d\x6e\x80\x40\x77\xca\xd9\x91\xc7\xe9\x65\x42\x9f\x43\xdc\x4a\x49\xc2\xdf\x49\xb5\x7a\x28\xc1\x78\xb6\x26\x2b\x7c\x32\x64\x12\x32\xb9\x31\xeb\xea\x64\x6b\x48\x3b\x92\x90\x61\x7f\xd6\x9b\x36\xc9\x10\xc2\xb2\xbf\x99\xdd\x9d\x4c\xb6\x07\xda\x1b\x4f\x33\xa8\x01\x3c\x65\x98\x01\x84\x54\xf5\x3b\xd3\x83\x09\x17\x02\xbf\x33\xfc\x82\x29\x24\x8e\x14\xbc\x11\x40\x1a\xe9\xc2\x23\xcb\x2a\xe9\xb4\x4d\x55\x42\x2b\x2e\xe2\x84\x8c\x26\x49\x79\x5b\x9f\xf4\xc9\x01\xf8\x91\x25\x74\x96\xcc\xf1\x46\xfc\x03\xf5\x92\xa3\x7c\xea\xc5\x64\x84\x33\x32\xc6\x01\x91\x83\x81\x7c\x7e\xb4\x99\x66\xc4\x8b\x09\x1f\xe4\xa8\x3f\xf6\x3d\x08\x7e\xa2\xa6\xc4\x41\x51\x70\x42\x36\xae\x2b\x60\x1c\xcc\xa5\xcd\x76\x4c\xbc\x8c\x6c\x06\x39\x1a\x8c\x31\x3f\x16\x5f\xbd\xc0\x2c\x58\xa9\x22\x04\x1c\x84\x20\x92\x50\xf9\xfe\x1c\xe7\x00\x85\x11\xe2\xa5\x96\x37\x93\xa9\x6c\x84\xaf\x0b\x03\x24\x86\xb0\x9e\x28\x0c\x36\x9e\x18\xe9\xbd\x90\xce\x92\xc1\xfe\x9c\x08\xa0\x83\x83\xb9\x7c\x1f\xcf\x2d\x80\x13\x24\x6a\xdc\xef\x7b\xc9\x80\x1c\xa0\xb9\xe9\x26\x28\xe2\xe9\xb9\xca\x5c\x37\x26\xd0\x01\xe5\x38\xa9\xec\xae\xee\x28\x54\xd1\x7f\x30\x77\xdd\x9e\xf8\xf1\xb0\x59\x87\x07\x68\x16\x5d\x33\x7d\x57\xaa\x44\x8a\x54\x8a\xed\xdd\x4f\x31\x30\x02\x7e\x8c\x69\x1a\xf9\x19\xd6\x4c\x80\x1f\xe0\x72\xef\xf4\x73\xac\xf7\x54\x7f\x63\xf1\xa2\xaf\x2a\x47\x82\x17\x52\x9b\x50\x61\xa6\x2e\xa9\xa5\x46\x13\xd6\x63\x04\x7c\x1e\x55\x83\x1f\xc2\x29\x70\x52\xd1\x55\x8a\x2d\xcb\x86\x49\x2c\xed\xc2\x19\x78\xb6\xa9\x97\x8d\x07\x03\x13\x29\xc0\xb6\xc2\x2f\xa5\x17\x8a\xb2\x80\xda\x42\xdd\xda\x07\xd3\x06\x0f\xa9\x9c\x9f\x4a\x25\xa2\xba\xd2\x89\x7d\xa6\xe4\xfd\x3e\x6a\x9c\x0e\xf9\x9c\xdc\xdb\xd6\xe6\x4c\x1a\x07\xee\x38\xb0\xc8\xca\xae\xdb\x8f\x1b\xa8\xa1\xf2\x62\x9f\xfb\xec\x56\xbc\x66\x5e\xed\x50\xc8\xed\xd8\xb6\x9f\xa1\x11\xd0\x14\x4b\x6c\x2c\x25\x19\xcf\xaf\x94\x18\x81\xd4\xbf\x9c\xd3\x4f\x4a\x56\xd0\xf8\x54\x8a\x3f\xaa\x8e\x62\xed\x3d\x10\xa4\x25\x66\x4b\xad\x5b\x76\xda\x0d\x51\xb7\x4d\xd2\x9d\x7a\x55\x33\xe6\x27\x56\x6a\x13\x85\xae\x7b\x33\x1d\x54\x45\x9a\xbb\xb6\x4a\xc9\x80\x18\x71\x4f\x43\x80\x54\x01\x82\x2c\x09\x2d\x42\xbe\xe2\xcd\xd6\xc1\x25\xfd\xf5\x2d\x48\xc6\x8a\xa2\x2c\xa0\x7f\x28\x25\xe5\xa2\xa8\x81\x92\xc2\x16\x01\xca\xb2\xba\xff\x67\x7b\x21\xf6\xd2\x3f\xd9\x89\xf3\x6c\x5d\xed\xc3\x6f\xff\x6c\x1f\x2a\x02\xc5\x0f\xac\x34\xcf\x1a\xc9\x8b\xd7\xfa\xd5\x89\x76\xa6\xa6\xd2\x6d\xdf\x30\x26\x71\xc6\xe6\xf2\x4a\xc2\x75\x3d\xde\x27\x1f\x99\x67\x7f\x2a\xfd\x22\x5a\xc8\xfb\xa5\x7e\x69\xd3\x33\xe7\xbf\x0f\x70\xb3\x0f\x07\x26\x30\x6d\xd2\x67\x2c\x92\x6d\x81\x1a\xc5\x29\x15\xfc\x55\xe9\xdc\x45\x0a\x18\x9c\xff\x8b\xba\x3f\x5d\x72\xdb\xc8\xfe\x06\xe1\xef\xbc\x8a\x22\x42\x0f\x5e\x64\x33\x49\x91\x52\xab\xbb\x8d\xaa\x2c\x86\x6c\x4b\x96\xdb\x96\x37\xa9\xbd\x34\x9b\x7f\xbf\x10\x99\x2c\xa6\x85\x42\xb2\x81\x64\x49\xa5\x22\x23\xe6\xfb\xdc\xc4\x5c\xcb\x5c\xca\x5c\xc9\x44\x9e\x93\x2b\x00\x96\xd4\x1d\xcf\x97\x71\x84\x55\x60\xee\x7b\x9e\x3c\xcb\xef\x94\x72\x55\x94\x46\x71\xa2\x60\xbf\x58\xf0\x16\x13\xae\x29\xb2\x62\xc4\x9e\x05\x7b\x8a\xe4\xc5\xb8\xc5\xa4\xc1\x51\xa5\x89\x1e\x62\x9d\xe5\x70\x48\x70\xd0\xa1\x46\xe7\x2f\x2a\x5c\xe3\xc8\x6c\x3d\x45\x47\x17\x23\xd6\x40\x4f\xb2\xa0\xa0\xf9\x34\xd7\x8b\xc7\x80\x15\xb2\x06\x49\xb3\x56\x8a\x17\x90\x02\x89\xee\x11\xdb\x53\x73\x32\x8e\xd8\xde\x7b\x65\x83\x21\x2a\x82\x21\x2a\x42\x5f\xb9\xff\x0e\x19\x7d\xc0\x61\x67\x1e\x13\x47\x0d\xac\x40\x13\xe8\x0b\xc0\x2b\x97\x3b\x18\x30\xd3\xf9\x9a\x54\x63\xa6\x5b\x41\xc5\x98\xe9\xf6\x3a\x7d\x1b\x37\xa4\xf5\xe1\x30\xac\xbd\x3d\x9b\x63\x4d\x8a\x0f\xbc\x3e\x39\x24\xd5\x88\x19\xa2\x46\x8c\xc0\x46\x7d\x77\xc4\x29\xfb\x4f\xc6\x35\x7c\x1c\x54\xe3\xc2\x93\x71\x62\x5c\x40\x91\x81\x55\x7b\xb4\xd4\x2c\x63\x08\xd6\x8c\x53\xeb\x34\xae\x8e\x08\xfd\x05\x99\x5a\x2f\xf1\x8f\x7e\xaf\x52\x41\x22\x09\xec\x6f\x75\x68\x43\x48\xee\x5c\x44\x91\x29\x8f\x5c\x09\x4c\x1d\x41\x15\x2d\xe6\xe6\xaa\xce\xf1\x1e\x0d\x20\xaf\x8b\x39\xce\x3c\x6b\x0c\x1d\x6b\xfe\x9a\x05\x61\xdb\xd2\xe8\xea\x2b\xbd\x16\xdb\xcd\xa5\x68\x7e\x01\x7c\xbc\xca\x2c\xa7\x86\xad\x78\x56\x75\x4c\x91\xe9\x1e\x14\x21\x69\xe9\x3c\x6e\x81\xb5\xcf\x65\x0c\x21\x30\xcf\xf6\x71\x00\x2d\x59\x82\xfc\xa8\x84\xe4\x7b\x83\x0a\xc3\xa6\x3a\xb8\xd8\x28\x5e\x27\x84\x0e\x1d\x0e\x71\x91\xd9\xb4\x8c\x95\xf3\xfd\x78\x96\xef\x69\x10\x12\xf8\xc0\x5e\xb5\xa0\x77\x8b\xac\x9e\xf3\xf1\x2c\xe7\x74\xc6\x98\xbe\x6d\x27\x25\xbf\xe1\xe5\x90\x19\x9f\x8f\x1b\xb6\xe7\x19\xd0\x9d\x84\x6e\x59\xc3\xe9\x9a\xad\xb2\x3d\xdd\xc4\xc5\x47\x18\xcc\x9a\x2c\x59\x4f\xa4\xda\xf2\x1a\xd2\x6e\x5d\xda\x21\x2b\x09\xa1\x01\x2a\xd3\x57\x11\xd1\x33\x1d\x00\xfe\xac\x19\x68\x72\xfa\x1e\xac\x59\xf4\x98\xfa\x13\xe0\xca\x9a\x5d\xd5\x9d\x29\x7d\x20\x55\x64\x14\x9d\x3f\xd1\x2a\xb6\x6f\x5b\x7c\xd3\x0a\x47\xd0\x8f\xac\xeb\xc0\x60\x49\x7f\x53\x77\xc1\x88\xbc\x2b\x37\x87\x35\xff\xfe\x27\x5e\x32\x41\x01\x04\x77\x22\xf7\xaa\x11\x6b\xce\x2a\x42\x65\xe0\xce\xb0\x63\xfa\xb2\x96\xc8\x88\xa9\x47\xbd\x67\x23\xb9\x98\xda\xf9\xfe\xa6\xce\x2a\xeb\xc3\x0c\x45\x76\xe3\x19\xb5\x2c\x4b\xc1\x7e\xd5\xeb\xb0\x06\xfb\x25\xe3\xd8\xac\xb2\x8e\xcd\xc4\x26\x13\x97\xb2\x5b\x8e\x4b\x41\x11\x59\x9e\xc4\xc8\x1a\xba\x8a\x19\x9d\x91\x81\xba\x98\x82\x0f\xe0\x69\xe8\x91\x03\xb2\x08\x62\xa1\x74\x1b\xf6\x77\xdd\xb7\x02\x76\x61\xad\x37\xc0\xd7\x80\x3b\x38\x59\x6d\x47\x59\x03\x63\x73\x39\x3d\x1c\x1a\x3b\x30\x97\xd3\xf9\x2c\x9f\x12\xe4\x59\xee\x63\x10\xfd\x92\xed\x8d\x36\x3b\x44\x97\x46\x68\x22\x6c\xaa\x72\x60\xab\x67\x18\x17\x4a\xd6\x7f\x0c\x44\x08\xd5\xd8\x5c\x6f\x16\x17\x24\xec\x9f\x64\x05\xf7\x9c\x56\x15\x0b\x1c\x6a\xaa\xc6\x33\x62\x0e\xfa\x0b\x56\x1d\xa9\xa0\x0e\xee\xe6\xee\x0d\xbf\x12\x55\x2e\x81\xe4\x17\x1f\x29\x06\x08\x90\xcb\xea\x48\x25\x15\x61\x3b\x7f\xed\x8a\x3a\x50\x61\xdf\xc8\x09\x08\x75\x3d\x31\xb7\xb7\x29\xb1\xd2\xaf\x27\x40\x7a\x40\x26\xa7\xb7\xfe\xee\x94\x38\xcc\xb8\xeb\x42\x4d\xd0\xf5\x98\xdc\x5d\xea\x7a\xaa\x39\xea\x08\xe4\xdc\xbc\xd0\x2f\x43\x0d\xdf\xbf\xc7\xf4\xc2\xd8\xdc\xef\xb8\xf4\xad\x30\xa6\xc0\xc1\xa5\x0d\x9b\xc2\x79\x17\x1f\x64\xc3\x29\x5d\xb1\x15\xe2\x00\xc7\x87\xa3\x9e\xd3\x15\xae\x9a\x0d\xcb\xfa\x37\xfc\xbc\xcd\x93\x8d\x91\x8a\xcd\xd0\x54\x08\xf4\xd9\x4c\x60\x42\x68\xc9\x00\x45\xfb\xfc\xe1\xbf\x1a\xeb\xa3\x2c\x62\x83\x96\xe3\x19\x21\x69\x5a\x8e\xc7\x6e\x1d\xaf\x22\x93\x30\x64\xcf\x5a\xbb\x32\xe4\xd2\xa2\xb9\xb5\x58\x6c\x11\x8c\x31\x5b\xa3\xf9\x0f\x2b\x0f\x87\xf5\x44\xc9\x0b\xb6\x77\xcc\xa2\xd9\x90\xad\xf1\x28\xa5\xd7\x78\x25\x55\x74\x37\x77\x56\x31\x25\x5d\x83\xe9\xcd\x2c\x77\xae\x3a\xf6\x14\x8b\x23\xc4\xb0\x1a\x6e\xd8\xf5\x85\x9c\xcb\xf1\xf5\x68\xc6\x3f\xcb\xaf\xc7\xf2\x3c\x1b\xae\x0e\x87\xcd\xe5\x0d\x00\x85\xb1\x35\xdd\xb0\x1b\x72\x3c\xae\x0e\x87\x6c\xc5\xc4\x42\xb8\x07\xde\x92\x0c\x56\x68\x4a\xb6\x87\x94\x77\x00\x46\xb7\xa7\x4a\xe6\x2b\xb0\xfe\xd2\xed\xca\x57\xd8\xbe\xa3\x4e\x8c\x66\x94\x2e\xe9\xca\x60\xce\xca\xbc\xec\x24\xb6\x74\xf7\x31\xbf\x7f\x5e\xc2\xad\xe0\x40\xd7\x04\xf2\xfa\x67\x43\xb6\xc7\x02\x6d\x71\xff\xac\x33\xb8\xde\xc1\xd1\x62\x39\xdf\x4f\x94\xcc\xf7\xd8\x8a\x72\x6e\xef\x8f\xdc\x5d\x7d\xb8\xea\x51\xfb\x49\xd2\x02\x80\xf1\xe8\x94\x8a\xc0\x32\x17\x2b\x03\xe0\xa1\xcb\xa9\x55\x9b\xf3\x15\xd3\x15\x8b\x2b\xc4\x31\x82\xe1\x99\x9b\x7a\x72\x77\x03\x87\x15\x0e\xfe\x59\x67\x2b\x5b\x6b\x9a\xae\x60\x1f\x15\x70\x3d\x8b\x45\xa3\x47\xdf\x92\x89\x7b\xd4\x54\xa6\x35\x95\x74\x05\xfb\x67\xd0\xb0\x0c\x5a\xb1\xc1\x56\x90\x39\xda\x5a\x81\x25\xd6\x78\x46\xf7\xac\x9c\xeb\xcf\x1c\x83\xc7\x33\xb8\x84\xb7\x74\x4d\x77\xb8\x2c\xaf\xf1\xcf\x4d\xfb\xa4\xc1\x1b\x14\x16\x9a\x8c\x5c\x48\xf4\x10\xaa\xc3\xe1\x3f\x6b\x63\x0e\x3b\x9c\x01\xfe\x9e\x4e\x75\xc1\x04\x18\x0b\xf0\x8d\xba\x60\xfa\xe2\xda\x31\x45\xaf\x59\x4d\x70\x70\xc1\x20\xf6\xd6\x40\x15\x5c\x5b\x93\xfb\x6a\x7c\x8d\x39\xae\x71\xd1\x8e\x2b\xfa\x86\x5d\x31\x56\x0e\x6e\xd8\x6e\x94\xbd\x99\x4f\xf3\x19\xa1\x6b\xf6\xa6\x33\xa4\x74\xcb\xae\xe6\x98\x39\x37\x99\x91\x39\x5c\x1e\x0e\x37\x43\xb6\x4f\xd3\x9b\x21\x6b\x0e\x87\x9b\xd1\x88\xae\xd9\x94\xb1\x1b\x57\xc4\x4d\x0b\x15\xcc\xaf\x0f\xd3\xff\x9b\x71\x56\xe2\x95\x62\x7b\x5d\x5c\x30\xa1\x49\xa3\x76\x2b\x06\xc8\xf4\xf4\x2b\xe1\x86\xae\x83\xc9\x96\x64\xb0\x65\xbf\x23\x4d\x78\xcb\xc4\xc5\xef\x7a\xa0\xe6\xe3\x59\x2e\x2e\xd9\xef\xa6\x6c\xc0\xca\xf4\xf7\x69\x4d\x6f\x98\xe4\xe6\xb4\xa1\x37\x54\x77\x9f\xde\xd2\x6a\x1c\x7a\xf0\xe4\x55\x4b\x25\xa9\xcd\x21\x68\xab\x84\xf8\x18\x8f\x94\xfb\x47\x4d\xee\xfe\x00\x1d\x61\x50\x09\xe9\xe8\x08\x07\x3a\x21\x2d\xc6\xc7\x9f\x3f\x03\x2b\x9f\x3f\xea\xfb\xac\x86\x9d\x5d\x3d\x4a\x35\x5a\x89\x5f\x66\xc9\x9b\x3a\x21\x64\xf0\x9f\x14\x72\x0c\x55\x59\xfe\xa8\xad\xa6\xfd\x1f\xb1\x2a\xcd\xc3\x27\x53\xb7\x7c\x2f\x1f\xa3\x1d\x72\x9b\x81\x52\x13\x60\xf2\x58\x48\x1a\x5a\x1f\x0e\x81\x55\xb1\xea\x1f\x5e\xc7\x9a\x69\x8f\xae\x8b\x18\xb4\xf1\x52\xde\xbb\xff\x12\x42\xfd\x58\x2f\x54\x57\x27\xd1\x0e\x75\xd8\xc7\x9a\xb8\xb7\xde\x29\x89\x90\x60\x56\x1f\xc6\xca\x77\x1e\xce\x5c\xff\xc5\xe5\xa3\xa0\xff\x9e\xb5\x24\xe0\x01\x32\x0b\x34\x0a\xea\x96\x07\xd0\x10\x44\xec\xee\x48\x2b\xfd\x8f\x70\x8a\xe5\x8d\x51\x5d\xf9\x56\x2f\x6c\x19\x04\x07\xda\xb5\x05\x9b\x02\xfe\x9b\x8c\x94\x6a\x23\xe7\xcd\x7d\x2a\xc8\x45\xa0\x82\x3c\xa8\x17\xcd\x92\x49\x33\xbb\xba\xb2\x91\x0c\x6a\x1e\x09\x5a\x61\x82\x40\x2d\xc7\x72\x54\x9d\xbe\x7a\xa5\xcf\x37\xda\xd6\xf2\xcb\x55\x9f\xaa\x1c\xf5\x7a\xc9\x79\x4d\x03\x35\xe4\xbc\xa2\xa1\x6a\x64\xae\xfa\x14\xe5\x02\x8a\xac\xaa\x22\xcd\x1f\xa7\xf1\x73\x2f\x7b\x8c\xdf\xff\xfc\x86\x44\x81\x57\xe4\xc0\x0f\x09\x8f\x64\x43\xf5\x29\xf1\x7e\xc5\xea\x34\x75\x04\xc3\x13\x7a\xbf\x82\xd3\xc3\xe8\x91\x34\x7e\xec\x2e\x05\x77\x6f\x20\xff\xe7\x73\xfb\xe4\x72\xf8\x83\x67\x53\x43\xde\x01\x67\x4a\x74\x38\x53\x68\x71\x28\xda\x9c\xa9\x62\x34\x22\x2e\xd0\xfb\xf4\xd6\x6f\xa0\x11\xeb\x89\xf0\xb7\xd4\x5c\x8e\x32\xe8\xd7\x8a\x8b\x32\x13\xe1\xe1\xfe\xb0\x22\x87\xc3\x8c\xfc\x49\xe5\x72\x14\x3e\xc4\x8a\x2a\x42\xcc\x93\x2b\x5a\x33\x18\xd2\x81\xea\xc7\xb8\x53\x0c\xf4\x22\x94\xd7\x00\x4d\x53\xe3\x52\xfe\x18\xfa\x8f\x6e\x8b\xfe\x5b\x3e\xce\x6a\xaf\x98\x08\x8a\x8d\x5d\xe5\xc4\x4a\xaa\xb1\x01\x45\x48\xba\x20\x72\x20\xc7\x61\xe2\x13\x18\x2d\xaa\xbe\xbd\x03\x7d\x12\x08\xfc\x75\x6c\x78\x13\x85\x0b\xfa\x6d\x0c\x0c\xae\xe3\x0a\xdc\x96\xf8\xe7\x06\xb0\x7c\x6f\x8c\x37\x8e\x07\x78\x25\x16\x40\x6a\x57\x69\x3a\x63\xac\x84\x27\x18\x10\x2c\xee\xb5\x5c\x06\x70\x85\xc4\x99\x55\x97\xfa\x61\x7d\x77\x63\x9d\x99\x51\x8b\xa1\xde\xe3\xcb\x6c\x6c\xe3\x06\xa5\x7e\x10\x63\x79\xd4\x2d\xd6\x29\x7e\x82\xb5\x4c\x96\xc9\xf1\xab\xf0\x35\x6e\xce\xbd\x68\xbd\x92\xf1\xca\x6b\xa1\x06\x1c\xec\x7d\x75\x5a\xd1\xcb\xab\x74\xc1\x70\xeb\xb7\xb4\x6a\xf3\x19\x9f\x6b\x12\xdb\xbf\xa4\x23\x4b\xd8\xba\x95\xd6\xe3\x6a\x46\xca\x75\xba\xd0\x7a\x51\x2d\x61\xbb\x87\x65\x05\x06\xb3\xc1\x2a\x32\xbe\x5c\xe0\xd9\x8c\xef\x1f\x03\xdf\x68\x60\x55\x51\x12\xe3\x23\x8c\x7f\x3e\x28\xdc\xa8\x70\x4d\xed\xb3\x35\x5a\x8b\x55\x9a\xd6\xce\xb9\x5a\x00\x4a\xba\x07\x0d\xb0\x6f\x43\x53\x9a\x9e\x40\x23\xde\xeb\x46\x30\xe5\x35\xca\x74\xd9\x01\x7c\xa4\xb2\xae\xdd\x5e\x4b\xf2\x4c\xa5\xe9\x07\xcf\xad\x09\x1a\xb2\x81\x6d\xe8\x4c\x04\x2f\x02\x77\x70\x90\xeb\x85\xcd\x55\x8f\x2a\x72\xe9\x23\xe7\x90\x31\xcf\x7c\xc8\x88\x55\xd4\x96\x3b\x62\x95\x2f\x54\x5d\x44\x3e\xe6\xea\xa0\x5d\x71\xed\x51\x42\xcb\xb0\xd9\x56\xf0\x7a\xae\x47\x15\x9d\x91\x81\x9c\x9b\x1a\x4d\x4a\x6b\xb4\x6f\x3c\xf9\x50\x9f\x9f\x21\xa8\xe7\x77\x51\x9b\x72\xa8\xf0\xe8\xba\x1b\x34\xc5\x98\x75\x6d\x71\x31\x28\xe0\xd0\x14\xfd\xb5\x4d\xc1\xb0\x2a\xa8\xef\xb5\x64\x05\xd6\x16\xd6\x60\xae\xde\xb0\x44\xba\x6f\xf5\xa7\x49\xd3\xfd\xa9\x4a\x1a\x53\xc9\x64\x25\xab\x55\xa1\x32\x30\xcb\x37\x66\x57\x7a\x77\x43\x7d\x3e\x36\xcc\xbc\x37\x59\x49\x5f\xef\xf1\x75\x25\xba\x2a\x92\xa0\xaa\x7e\x81\xa7\xc1\x77\x73\xf3\x77\xc4\xaa\x5c\xd9\xc0\x51\x09\x4b\x1d\xd6\x62\xaf\x45\x72\xa8\xcb\xbf\x72\x7a\x70\xfd\x2b\xd4\xc1\xcd\x5b\xea\x47\xdc\xa7\xbf\xa9\x2f\x37\xd0\xdd\x14\x5e\x77\xd3\x7c\x8e\x84\x6d\x55\x75\xa2\x55\x74\x98\xa9\x8b\xca\xad\x8d\xc3\x41\x5d\xb2\xca\xce\xbc\xc3\x4e\x6f\xa9\x94\x3a\x9a\x14\xb5\xc7\xec\x0a\x91\x56\xb9\xf3\x70\xc8\xdc\x37\x38\xcf\x1a\xcf\x18\x7b\x91\x15\xb4\x26\x69\x5a\x18\xcd\xb6\xc8\x94\x0a\xc6\xff\xae\x7b\xc6\x75\x8e\xc6\xf0\x88\xa1\x71\x24\x5b\x2c\x69\x1f\xc7\x91\x05\x04\xe6\xb6\x47\x25\xce\x74\x8b\x16\xad\xca\xe0\xa2\x7c\xa6\x0e\x87\x9a\x9d\x3a\xd8\x0c\x95\x07\x4b\x2a\x97\x14\xc6\x3c\xaf\xbd\xce\x71\xd3\x73\x6c\x1b\x4f\xb4\xf2\x7c\x3f\x1a\x91\x66\xc4\x8a\xc5\x1e\xcf\x60\x78\xe4\x0f\x19\xde\x0a\x95\x7e\xed\x8b\x4d\x26\x19\xf3\xfa\x86\xf1\xbd\xc0\x9a\x51\xb1\x90\x98\x77\xac\xa8\x1c\x8d\xcc\xf6\x65\xcd\x58\x01\x26\x32\x80\x03\xa3\xab\x25\x77\xc6\xd5\x64\xc8\xea\x73\x5b\x76\x56\x5d\x4c\xe7\xd3\x3c\xa8\x22\xaa\xa3\x1e\xb1\xea\x4f\xc5\x42\x8e\x21\x9d\x7e\x8b\x62\x75\x54\xef\x9a\xe3\x89\xde\x07\xe6\xe4\xa7\xc8\x79\xbc\x97\x6a\x36\xa5\xd6\x68\x2b\xb8\x9b\x2c\xe6\x31\xe0\x3c\x1b\x28\x0e\x7d\xf6\xa3\xc5\xfd\x50\xf8\x55\x36\x1a\xd5\x3d\x28\xc4\xbb\xd6\x5a\x32\x86\x50\x5b\xf9\x0e\x21\x30\x81\x9a\x6a\xc5\xee\x6a\xbe\x2b\x6a\xee\x13\x84\xdb\xf5\xda\x2a\x1d\x83\xfe\x33\xb3\xb7\xe0\x30\xe0\x1e\x9b\xab\xcf\xbe\x50\x2a\xbd\xad\x1b\x59\x37\x1f\x47\x40\x04\xf6\x76\x63\xeb\xfd\x84\xf4\x16\x28\xa3\xe1\xe5\xa4\x8e\x40\x2b\x0a\xbc\xd8\xd5\xe1\x50\x0c\x19\x26\xd8\xd5\xe2\x1a\x4c\x94\xbc\x47\x34\x9f\xcf\x20\x5a\x0f\x33\xf4\x90\x95\x21\xcc\x4a\x97\x1c\x39\x1c\x34\x85\x66\xa2\x2f\x7a\x08\x11\x67\xf8\x36\xe1\xd7\x3b\x75\x9b\x91\xf3\x6c\x7f\x38\x04\x6a\x4e\x5b\xf9\x0e\x95\x9c\x7e\xd9\xf2\xca\x0c\x72\x75\x45\xd2\xf4\xa6\x82\x93\x7b\xcb\x8b\x35\x15\x84\xee\x0f\x87\x2b\x08\xa1\x32\x74\xdc\xe3\xad\x17\x5b\x0a\xc4\x46\x96\xd6\x86\xc0\x18\x7e\x82\x86\x95\x7e\xb3\x76\x98\x01\x50\x4e\xf2\x7f\xff\x5f\xb1\x59\x0a\xce\x65\x82\xac\x7d\x11\x9b\xa3\x81\x74\x15\x4c\xd1\x6c\x84\x92\x3b\x56\x01\xc3\x2a\x0a\x36\x06\x48\x01\x29\x59\x59\x0d\x38\x48\x4d\xfe\xe4\x1b\xbd\x0a\x9a\x8b\xa5\x54\x28\x89\xb2\x07\xf2\x7f\xd4\xf0\xd0\x2c\xb8\xe1\x2b\x59\xad\x8b\xfa\xd6\xf7\xc9\xe0\xef\xda\x59\x65\x49\x62\xb1\x7b\x6d\x1f\xa1\xea\xa0\xa7\x32\xea\x29\xc6\xba\xfe\xca\xb8\xbf\x93\xbf\x3d\xf9\x53\x66\x13\xb9\xfe\xba\x3c\x68\xb3\x1d\x1c\x19\xb7\xb1\x07\x75\x6e\x14\x07\x95\xdc\xe9\x05\x05\x0f\x54\xd5\x7a\x82\x5e\x75\xb4\xca\xa3\x6b\x53\xae\xa8\xfc\xa4\x6d\x15\x11\xf3\xe0\x55\x12\x5e\x2a\x7b\x3f\x67\x28\x5d\xc2\xc7\x37\x05\x05\xf5\xb1\x09\x0a\x98\x03\x64\x5c\x18\xd6\x77\xc9\x92\x52\xd5\x89\x26\x66\x9d\xac\xa0\x23\xc3\x04\x67\xf7\x4e\x1c\x45\xcd\x0a\xc1\x17\x06\xd8\x53\x04\xbf\x2b\x42\x65\xef\xcc\x77\xb8\x66\x78\xa0\xf0\x75\x12\xc2\xc1\x14\x6f\x1a\x59\xee\x15\x3f\x3f\xb3\x26\xd0\x1c\xac\xea\xfe\x55\x9d\xdd\xf7\x9f\x92\x3b\xb0\xce\x6b\x19\x48\x5b\x7f\x0a\xf3\xfd\x98\xe7\x35\xf9\x94\x92\x70\x4d\x60\xe6\xb1\x22\x1d\x1b\xc7\x4d\x16\x5c\xcd\xfa\x89\xb9\xd1\x4f\x3b\xa1\x2f\xe7\x2d\xdb\x84\xef\x69\x3f\x8c\xeb\x2c\x14\x38\xfd\x6c\x58\xa0\x20\xb1\xc3\xb1\xd9\x44\x16\x36\xbb\x2c\x7a\x15\x83\xcc\x6a\x83\xe3\xa7\xf4\x59\x6c\x66\xac\x66\x2c\x33\x5c\x56\xc6\x2a\xd2\x52\xfa\xb3\x2f\xfe\x75\x90\x66\x2e\x50\x66\x93\x8b\x09\xaf\xd6\xe3\xcc\x8b\x6c\x36\x91\xc8\x06\xa3\x67\x84\xcc\x1f\xe5\x33\x42\x25\x59\xc8\xe5\x11\xb5\x64\x57\x3c\xdb\x50\x11\xca\x95\xda\xac\x8e\xd0\xc2\x76\xe8\xfd\x92\x43\x9f\xa0\xe5\x34\xb8\x93\x04\x1b\xce\x8c\x43\x09\x1e\x3a\x91\x30\xd4\x1a\x5f\xc8\xe5\x79\x56\xa0\x84\xa5\xd6\x74\x99\x92\x97\x0a\x94\x27\xcd\x2f\xc6\xd0\x0b\x4e\xe6\x36\x40\x61\x24\x2a\x84\x3a\x19\x50\x81\x9e\x5a\xe8\x0c\x09\x95\x1b\x5e\xce\x93\x5a\x95\x49\x8e\xed\x91\xfa\x9c\x1d\x4e\xc9\x51\x1c\x0e\x41\x3b\xc9\x31\xbb\xa6\xf5\xe1\x30\x35\xcf\xc7\x6a\xbe\xcd\x2b\x1a\xf5\x53\xd0\x8d\x85\xf4\xb5\xdb\x88\xde\xb2\x75\xc6\xe9\x4d\x5b\x07\x93\x5e\xb1\x75\xa6\xc6\x33\x1d\x13\x29\x4b\x10\xfa\x86\xb9\xf7\xe9\x94\x31\x4e\x7f\x37\xbf\xab\x34\x55\x8c\x6d\xe9\x3b\x36\x65\x6c\x43\x9f\xb1\xe1\xf5\xe1\xb0\x61\xec\xda\x51\x42\xe0\x8a\x0c\x8e\x9f\x5b\x14\x2c\x3c\xc6\xe6\xbc\x67\x59\x39\xff\x3d\x7f\x43\xd2\xf4\x19\x7d\xa5\x7f\xbc\xc9\x7f\x27\x69\xfa\x6e\xde\xe4\xd9\xcd\xfc\x36\xbf\x42\x4e\x00\xfd\x9e\xbd\x9f\xef\x75\xd0\x55\x7e\x6b\xa4\x61\x83\x55\xf6\x8a\x42\x71\xf4\xfb\xb1\xfe\x32\x36\x21\xfe\x55\xf4\x94\xbe\xa5\xaf\xe9\xcb\xc1\xcd\x3c\x7b\xca\xca\x34\x7d\x83\x05\xdf\x62\x91\x6f\x59\x39\xdf\xe7\x3b\x50\x0d\xf1\x52\x9d\xd7\xac\x9c\x37\xb9\x5e\xd9\x82\x3a\xd9\xd2\x4b\x9d\xfb\xf7\x34\x7d\x36\xdf\xe7\x57\x46\x22\x9a\xeb\x32\xe7\xad\xec\x79\x43\xdf\xb2\xa1\xad\x6a\x9f\xdf\x9a\xd3\xeb\x35\x04\x42\x09\x4d\x7e\x85\xf5\xbf\x84\xec\x61\x3d\xf9\x9e\xd0\x55\xf6\xd4\x74\xea\xed\xf8\xa9\xef\x94\xfb\xba\x80\x61\x4c\xd3\x55\xd6\xb8\x30\xdc\x72\x10\xa1\x0b\x78\x8d\x9f\xf4\xe5\x58\x7f\xd9\x51\xc9\x86\xf2\x70\xb8\xad\xb2\x5b\x2a\x0d\x68\xa1\x64\xb7\x84\xde\x56\xd9\x15\x84\x40\xc0\x15\xa1\xd9\xb0\x30\xe9\x0a\x93\xae\x70\xe9\x0a\x4c\x57\xb0\x2b\x72\x24\xf4\x0e\x75\x5b\x51\xd0\x5d\xa0\x62\xf3\xd6\x38\xae\xcc\x08\x5d\x83\x16\x53\x06\x17\xfd\xd6\x08\xe9\xd7\xc8\x53\xb2\x01\x74\x3b\x59\x6d\xe9\x1a\x74\x35\xdc\xac\xed\xf0\x9c\xda\x1a\x65\x8d\x6b\xfc\x69\x72\xd2\x1b\xf6\x5c\x65\x3b\xc2\xf4\x1f\x3d\x2c\x2c\x2e\xeb\x66\xbe\x0b\x8f\xb6\xd1\x0c\x7d\x23\x80\x15\xce\x15\xdb\x64\x58\x0c\xbd\x99\x4f\xd1\x5e\x0c\xea\x46\x6b\x9d\xc1\x4d\x9a\x66\xb8\x3c\x71\xa9\x3e\x9a\x67\xab\xcc\xce\x20\xce\x09\x42\x83\xba\x49\xd1\x93\x80\x63\x6d\xe6\xd4\x0d\x37\xc9\xdb\x59\x31\xc5\xd8\x07\xda\x94\x9f\x3c\xb5\xc7\x98\x52\x91\xa1\x0f\xe3\xca\xa9\xe2\x22\x9c\xf8\x46\xae\xf6\xce\x6f\x55\xf0\x58\x18\x80\x7b\xbc\xaf\x2b\xc5\xeb\x9b\xa2\xcc\xd4\xe4\x4d\x29\x2a\x70\x36\x86\x94\xf7\x70\x3a\x50\x86\x64\xfa\x52\xdc\x18\xf2\xe3\x46\x34\xe2\x8d\x28\x85\x02\x82\xa6\x4d\x5a\x7d\xae\x4b\xf8\xa9\x50\xfc\x72\x3a\x77\xe5\xb1\x86\x2b\x57\x4b\x17\xb6\xee\xde\x3a\xb2\x9a\x0d\x6b\x32\x4f\x92\x3c\xc1\x07\x4b\x72\x3c\x5d\x29\xc9\x4f\x46\x21\x21\x70\x6f\x6f\x4c\xf9\xa1\xe6\xc5\xef\xe6\xc5\x13\x8d\x63\xa4\x69\x8b\xaf\x1c\x88\xc9\x08\x7d\x06\x06\x97\x81\xb5\x7b\x94\x1f\x20\x00\x45\x75\xf5\x79\xb9\xaf\x01\x8c\x82\x0d\xa7\x21\xea\x5f\x30\x34\x27\xb3\x80\xbc\xe7\x64\x71\x33\xfa\x1e\x5b\x40\x67\xd3\xd0\x17\xdc\x33\x43\xfc\xfd\xb7\xc5\x12\x9a\x54\xd2\x50\xb6\xc3\x40\xfc\x50\xf3\x62\xfd\x7d\x55\xde\x06\xd9\xfd\x20\xa1\x47\x03\xf8\x0d\xce\x0c\x08\x6d\xa5\xd1\xdd\xff\x23\x18\x4b\x23\x73\x89\xe8\x2d\x93\x34\x71\x3c\x47\x4d\xad\x3a\xb1\x06\x2f\x9f\xcb\x1a\xd0\x8f\xdf\xab\x97\xbc\xda\x5b\x7e\x42\xc3\xcb\x9e\x59\xaa\x79\xc3\x35\x45\xba\x4f\xd3\xfe\x51\xef\x18\xfc\x86\xf9\x40\xcc\xfd\x68\x4a\xba\x50\x20\x35\x5f\x71\x71\xc3\xd7\xcf\x71\x15\x10\xfa\xa6\xb5\x0c\xde\x7f\x6c\xf8\xa1\xb1\xd1\xd8\xa4\xa9\x19\xbf\x37\xe5\xbe\x3e\x35\x7c\x33\xfa\xf4\x53\x87\x8f\xd0\x78\xb3\x07\x86\xe8\x66\xd3\x7f\x64\x25\xf6\x2d\xfe\x66\x2b\x36\xb0\x3c\x8e\x74\xf6\x64\x1a\xf6\xf8\xd5\x3d\xf2\x46\xd4\xbc\xd3\x7b\xd0\x21\x29\x38\x6e\x45\xa8\x69\x1f\xb2\x2c\x90\x4f\x56\x2d\xa9\x3c\x25\xfc\xda\x5b\x40\xe6\x12\xc5\x52\x43\xcb\xe1\x80\xa3\x10\x91\x14\xad\xac\x02\x59\x1e\xbe\xfa\x51\x14\x60\x04\xe9\x7b\xb6\x1a\xd7\xb4\x66\x2b\x4f\x43\x6c\x6c\xce\x53\x32\x99\x3d\xdb\xd8\xb7\xd8\x06\x0e\xfa\xa1\x4c\x53\xd1\xb6\x7f\x4d\xd3\xac\x64\x9d\xd0\x93\x72\x41\x94\xfe\x6e\xf0\xca\x98\x11\x73\xb5\x22\x23\xd2\xbc\x06\xc7\x7b\x90\x66\x6c\x2f\x27\xd3\xe9\x93\xc3\x61\x7b\x31\xd6\x1f\xfa\xbe\x7e\xc0\x33\x4c\x49\xf7\x84\x7e\x5f\x99\x1f\x84\x8a\x96\xc1\xc5\x9a\x4d\xcf\xd7\x17\x22\x32\xb8\x58\x8f\x46\x04\xb2\x80\x05\xff\x1a\xe1\x83\xcb\xcb\x96\x3a\x31\x8a\xcc\x43\x47\xe3\x20\xa5\x2b\x5b\xf2\x9a\xc1\xee\xb2\x63\x9f\xe0\x9c\x48\x9d\x88\x61\x3b\xda\x89\x31\x1d\xef\x46\x04\xc6\x0e\xc7\x90\x03\xfa\xbd\xbf\x0e\xdb\x82\x4a\x6b\xe7\xd1\x51\xa1\x0f\x20\x34\xad\x58\x52\x2d\x69\x65\xf0\x47\x02\x43\x3f\x40\xf1\xaf\xed\x9b\xbc\x8a\x56\x50\x78\x91\x3c\x6d\x3d\xa5\x6b\x74\x06\x3a\x04\x87\x71\x56\xf1\x0b\x98\x17\xf8\x7a\xcf\x03\xa1\xb2\x33\x0f\x18\x98\x37\xeb\xa6\x94\xb2\xce\xaa\x31\x20\x94\x58\xd1\x4f\x50\xa2\x51\x3c\xb1\x1f\x79\x35\xe2\x2d\x79\x36\x36\x90\x4a\xf6\x2b\xcf\x40\x49\xaa\xc0\x2f\x74\x40\x09\xa8\xa0\xbc\x02\xd5\x09\xc7\xdd\xc2\xdf\x81\x7f\xb4\xbd\x0f\x34\xde\xcc\x06\xcd\x85\x9c\x67\x92\x35\xb6\xb8\x5f\x54\xf6\x9b\xfe\xdb\x10\x72\xa2\x09\x84\xe4\xee\xc1\xb3\xa7\x2a\xf4\xd1\x78\xc9\x0a\x20\x43\xa3\x92\xf6\x84\x8c\x4f\x94\x44\x0b\xe6\x5c\x0b\xa3\x9a\x9a\xa4\x4a\x7a\x05\xba\x82\xca\xd1\x2c\x9c\x93\xb7\x55\x2f\x58\x2a\xad\x62\x79\xfb\x00\x98\x24\x86\x7e\x50\x72\x17\x4a\xdb\xe0\x46\xb2\x03\x6f\x45\x0e\x6e\xbe\xe6\x9d\x90\xbc\xee\x99\x56\x2a\x19\x20\x89\xd0\x82\xdd\x1d\x07\xca\x9b\x6f\x2a\xb9\xbb\x94\x88\x0c\x86\x66\x8a\x10\x34\x92\x56\x9f\x1c\xef\x3a\x5c\x7b\xa3\xf7\x80\xa3\xb5\xc7\x34\x17\x15\xe8\x93\x63\xb6\xcb\x66\x0c\xbe\xcc\x31\x46\x90\xc2\x57\xcd\xf6\xf3\x29\x5a\xe9\x7a\x89\x98\xcd\x25\xec\x8b\x76\xe5\xd1\xba\xd1\x9a\x34\xd3\xaf\x22\x9b\x8e\x8c\x25\x19\xac\x86\x4c\xe8\xb7\x40\x50\xf2\xca\x2a\x88\xdf\x3b\x4a\x60\xf8\xd7\x0d\xea\x8e\x13\xa8\xa2\x6c\x19\xf2\x86\x4e\xa0\x18\xd6\x7d\x3a\x1f\xf9\x14\x5f\x1f\x78\x8a\x22\x8b\xeb\x72\xeb\x18\x0d\x30\xbc\xa8\xdc\x8f\x71\xa3\x2d\x60\x15\xf2\x8d\xba\x98\x4d\xe7\x45\x50\x3d\x9b\x1a\x6b\xe7\x8b\x4d\x1c\x1e\xec\x5e\x4c\x30\xce\xd6\xf3\x69\x3e\x9b\x12\x62\x0d\xa2\x2f\xb7\xa3\xcd\xf8\x71\x30\x44\x90\xd1\x44\x8e\x6c\xf2\xf1\x96\xd0\x22\xc0\x83\x31\x0b\x14\x07\x4e\xd3\x68\x3f\x55\x68\x53\xd6\x5a\x56\xcc\xb0\x8c\xfa\x56\x20\x90\x43\x6e\xfd\x75\x52\x90\x51\xa8\xcc\xfb\x12\xce\x4a\xa8\xc5\xe1\x5d\x5d\x71\x85\x5c\xde\x8c\x0c\xda\xd9\x7f\x90\x8d\x51\x09\x55\x7a\xaf\x29\x8a\x46\x51\x1d\x32\x1c\x61\xa9\x5e\x42\x64\xe8\x8f\xda\x9d\x8a\x4e\x08\x6e\x98\x0a\x87\x03\x76\xd5\x77\xbd\xbb\x48\x98\xb2\xf1\x75\x27\x5e\x0f\x4a\x68\x1b\xf2\x53\xa4\x0e\xd2\xe9\xc4\xa0\x5b\x03\x76\x0e\x5e\x5c\x3f\xe8\x66\xa2\x2d\x82\x41\xbe\x37\x3f\x94\x44\x37\x8a\xba\x5b\x21\xf5\xf3\x43\x47\x49\x04\xce\x1a\x34\x27\x08\x36\x13\x1a\x10\xa3\x7a\x03\x18\x17\xb4\x36\x1a\xde\x05\xe3\xca\x18\x20\xb8\x75\x66\xd6\x8d\xb5\x3c\x22\xd6\x24\x21\x48\x60\x5e\x8c\xf6\x0e\x20\xa3\xea\x48\x06\x30\xde\x22\xdc\x51\x22\x58\x09\x81\x37\x6c\xb3\xf0\x1c\xc2\x40\x6b\x19\x8d\x15\xb9\x78\x74\x38\x64\xf5\xe1\x20\x85\xee\x18\x18\xfb\x1f\x09\xfd\x12\x3b\x3e\x9c\x12\x5a\xa7\xa9\x8e\x23\x94\xeb\x14\xfa\x39\x12\x54\xf0\xa5\x77\x03\xe9\x0f\x97\x1e\x75\x25\xfc\x70\x10\x5a\xf7\x22\x2c\x69\x0a\xf9\x74\x19\xaf\xe5\x6e\xc8\xd4\xe1\x60\x74\xdb\xa3\xee\x30\xd5\x51\x95\x7a\x53\xd4\xcd\xa4\xe1\xea\x95\x4d\x93\x29\xd2\xa7\x4f\x15\x16\x1e\xd1\x31\xdd\x14\x4c\x85\x23\xf0\x5d\xb0\x44\x82\x31\xe8\xb6\xc4\x15\x81\xa8\x54\xf7\xeb\x74\x11\x9a\xd5\x73\xe5\x5e\x41\xfe\x3c\xed\x9d\xc9\x6f\x81\xe9\x4f\x2e\x1e\x91\x34\x1d\x56\x48\xd9\x47\x91\x4c\xd1\xbd\x88\xad\x58\x7b\x8e\xe5\x8f\x74\xdd\x6e\xd5\xfb\x87\x58\xa7\xca\xa2\x11\xfa\xba\xea\xf7\x79\xda\xaf\xd9\x17\xb1\xf3\xdb\x17\x63\x48\x86\x1a\x02\x21\x5c\x39\xb9\x3a\xb1\xa2\xf4\xa3\xc3\x25\xe9\xa5\xa0\x82\xa9\x09\x4b\x09\x82\x69\x30\x3d\xdd\x8a\x30\x89\xae\xe7\x1e\xc5\x43\xfa\xa6\x40\x9d\xc5\x13\xd7\x5e\x3e\xa5\x6b\xb9\x32\x0d\xad\x68\xb8\x69\xf2\x6a\x04\xc0\x63\x23\xe5\x01\xc7\x68\x8c\x8e\x96\xab\x16\x5c\x5a\xa4\x18\x59\x23\x2b\xef\xdb\xaa\xdf\x81\xeb\xea\x9a\x59\x1f\xfe\xf0\xfb\x86\xd7\xca\xe3\x73\xf6\x60\xe8\x5f\x8b\x6a\x6c\x24\x1d\xb3\xdd\xfb\x84\xc4\x8a\xb2\x37\x6e\x69\x00\xda\x07\xba\x8c\x90\xb5\xf8\x70\x6f\x99\x56\xfa\x31\x9b\x4e\xff\xd7\xf9\x99\xae\xc1\x85\x74\xab\xd8\x06\x55\x0c\xaa\x89\x2a\xde\x20\xd2\xa4\xf0\x9f\xe3\x19\xe5\x59\x45\x28\x78\x30\xda\xf2\xac\xa2\x09\x66\x4a\x68\xf0\x30\xae\xa2\x95\x90\xa6\x2a\xab\x02\x9a\x2e\xd1\x23\x21\xc0\xee\xf5\x08\x85\x88\xde\x42\x44\x38\xcf\xba\x8c\xe8\x74\x4e\xa0\xef\xb2\x52\xa6\x18\x1c\xf2\x2d\x5f\xbd\xe5\xeb\x7f\xf2\x5a\xa2\xb6\xef\x70\xe6\x1d\x05\xf8\x11\xb3\x60\x98\xa2\x32\x3a\xd1\x6e\x7e\x7c\x0c\xe6\x4f\x66\x7f\xd3\xc3\x74\x1c\x7c\x5b\x05\xfe\x2c\x50\xef\x8b\x75\xd5\x24\x79\xb8\xba\x2f\x79\x04\x25\x39\x03\xe5\xd4\x70\x01\xba\x04\x46\xe8\x3a\x03\x3c\xb1\x78\xc1\xa1\x1b\xf4\xbb\x76\x03\x9d\xdc\xf4\x4d\x29\x57\x6f\x13\xda\x8e\xb7\x44\xf1\xbc\x02\x79\x57\x9e\x4c\x13\x47\x98\xfb\x9d\x3b\xce\xd4\xbc\xca\xa7\x64\xe0\xb3\x07\x6f\xee\x53\x22\x64\xde\xbe\x7a\xa2\x4e\x08\x23\x5d\x05\x9a\xf9\x64\xb3\xc3\x16\x9f\xaa\x52\xb7\x19\x3d\x5d\x76\x66\xae\xb7\xfb\x61\x82\xda\x38\x49\xf6\xdd\xef\xa6\x01\x41\x33\x9f\x98\x03\x04\x12\x0e\xac\x51\xb0\x3b\x75\xc6\x2e\xc1\x38\xab\x83\xc1\xc2\x82\x3a\x4d\x47\x84\xaf\x9e\xc1\xb2\x85\x85\x2b\x42\x76\x86\xaa\xb7\x8f\x51\xd3\x4f\xd4\xa8\xc7\xca\x18\xab\xf5\x6e\x04\xf0\x8f\x16\x4c\x13\xe0\x07\x4d\x51\x22\xa5\xd3\x7f\xb0\x09\x5f\x14\xab\xb7\xd9\xc9\xdd\x34\x25\xf4\xce\x18\x7c\xea\xb1\x70\xe0\x45\xfa\xc7\xf1\x48\xa3\x4d\x12\x5d\x5f\xd1\x5e\x09\xbb\x1a\xdc\x94\xbc\xb5\x47\x7d\x66\x6e\x1a\xb4\x16\x4d\xf1\xa6\xe4\x2f\x74\xbc\x69\x38\x07\x44\x5f\xd7\xc4\xcf\x8b\x3a\x28\xa3\x9b\xcb\x1c\x1b\x09\x39\xd5\x58\x4d\x8c\x74\xda\x8a\x2b\xd8\x93\x33\xae\xa5\x71\x44\xbb\x9d\x3f\xf3\x5a\x7d\xa4\x99\xba\x80\x4e\x1e\x3c\x20\x3b\x6d\x8c\xe6\x28\x74\xde\x7d\x03\xee\x69\xae\xd2\x74\xb8\x9e\x27\xb3\x47\xb0\xe0\xe1\xdc\x1a\x74\x16\xd5\xb6\xff\xbc\xc3\x45\xc4\xbb\x7b\x64\x27\x45\xa5\x38\x32\x62\x9b\x4e\xb6\x38\x36\xa9\x24\x98\xfe\xb4\xc7\x1c\x80\x10\x3f\x74\x7a\x89\xc1\xad\x3e\x76\xc7\xa9\x73\xb7\xf2\xfe\xca\x8b\xbd\x92\x09\xfa\xd6\xcd\x66\xfc\x31\xf5\xf6\x08\x99\xd7\x46\x3f\xc1\x46\x3c\xcf\x70\xc4\x19\xab\xe7\x4e\x69\x83\x23\x22\xc5\xf3\x5a\x5e\xff\xa0\xab\xca\x0c\xae\xd2\x78\x46\x33\x80\x96\x1a\x59\x34\x29\xf2\xf0\x11\xc9\x4f\xe7\xb3\x19\x47\x06\xf1\xe9\xe1\x23\xea\x70\xa8\x66\x84\x0c\x19\x9f\x9f\xe8\x13\x0c\x68\xee\xfb\x54\x81\xd3\xa2\x68\xc0\x80\x73\xdd\x5d\x0c\xc1\x44\x06\x0c\xb9\x96\x4f\x0b\x97\x86\xd0\x9e\x18\x3d\x22\xe4\x08\x27\xe2\xf3\x2a\xac\x21\xc0\x5b\xfa\x60\x1e\x43\x00\xd4\xc8\x80\x2a\x25\x1d\xec\x4f\x0b\x0e\x1b\xa1\x65\x3a\x8a\x6b\xf0\x02\xcb\x68\x41\xa6\xfe\xd9\x20\x10\xb7\x0b\x39\x1c\xaa\x61\x5f\x31\x80\xaa\xda\x9b\x43\x1f\x7d\xfd\xc0\x68\xc0\x88\xa7\x50\x3f\x36\x9d\x7e\x7a\xb3\x03\x5c\x98\x93\xac\xb2\x3a\xa4\xe6\x91\x66\x40\x90\x10\xd4\xde\x89\xe0\xc1\x01\xfc\x97\x65\xb5\xab\x96\x59\xa8\x5f\xd4\x70\xea\xcd\xf4\x39\xde\xf2\x98\xeb\x85\xe5\xb3\xda\x57\xad\xc9\x87\x5b\xfe\xb9\xac\x57\x2e\x3b\x7a\x13\x35\xb9\x6d\x06\x9d\xfe\xac\x91\xa5\x58\x9f\xa9\xba\xa8\x1a\x5c\x37\x09\x35\xed\x48\x53\x9b\x70\x9e\x05\x1d\x7b\x2e\x90\xa8\xef\xbd\x96\x4f\xa5\xdb\xc6\x4d\x75\x3d\xec\x4d\xfc\x2e\x1c\x0d\xd4\xde\xc9\x3f\xda\x80\xc4\x29\xba\x85\xd3\x1f\xa0\x89\x7f\xc7\xdf\xab\xd7\xf2\x95\x2d\x25\x4c\x15\xbe\x1f\x32\xcb\x37\xfb\x48\x3f\x7b\x12\x9d\xe8\x64\x4f\x4a\xec\xa1\x0a\x7d\x3f\xb8\x7e\xde\x57\x7b\x72\x7c\x7e\x1f\x55\x6a\x65\x76\x77\x16\x28\xcd\xe2\xa7\x1d\x8f\xf4\xf9\x27\xdc\xd4\xe4\xee\x54\xba\xe8\x92\xec\x24\xeb\x1c\x49\x78\x88\x7c\x5e\xb1\x3b\xa4\x6d\xf3\x6f\x2b\x78\x9d\xe4\xcf\xab\xe0\x2c\xf9\x47\x4b\x83\xd6\xef\x9d\x9e\x17\x34\x6c\x29\xa8\x28\x3b\xf1\x7a\x2e\xd6\x6b\xe3\x1a\xa2\x4f\x0e\x78\x6f\x16\xd2\x5f\x24\x5c\x58\x9f\x57\x8b\x40\xcf\xd3\xc6\x01\x08\xd2\x32\xb2\x2a\xee\xd4\xd9\x72\x84\xd3\x57\x05\x4e\x33\x3c\x89\x14\x4d\xae\xe5\xbe\xe1\x6b\xf9\xae\x8a\x5e\x45\x1d\x59\xe8\x7f\x24\xae\x35\xc2\xf8\x23\x9d\xc2\x9b\xa9\xeb\xed\x21\xb4\xc0\xb2\xbe\x1e\x8e\xbe\x7e\xb8\x81\xc3\xa7\x97\xbe\x32\x91\x5f\x43\x72\xc3\x1a\x3b\xd2\x1e\xae\x48\x6b\x4e\xfa\x44\xdb\xf7\xcf\x09\x3c\xb5\x7f\xa9\xd8\xd4\xaf\x98\x7f\xfb\x97\x97\xe5\xbe\xb2\xbb\xd5\x75\xce\x69\x60\xd9\x90\x0f\x67\x88\x2d\x67\x1e\xfd\x21\xff\x83\x06\xa8\xcf\x3a\x1d\xee\xa0\xaf\xf5\x48\xe5\x53\xaa\x6e\xf5\x35\xa1\xc3\x51\xf7\xfb\xfb\x37\x7f\x34\xa8\x0c\x83\x8c\xdb\xa7\x2b\x25\x6e\x84\xba\x7d\x01\x6e\x34\xea\xde\xb8\x2f\x8a\xb2\xe4\xeb\x7c\x4a\x9d\xb2\x75\xd0\x2c\xac\xee\x25\x8a\xe8\xa0\x9d\x9e\x29\x85\x9e\x94\x1d\x6f\x3a\xfa\x09\xa6\x9d\x80\xb7\xa0\x67\x53\x67\x14\xeb\x7c\x34\xfa\xa5\x3a\x52\xc7\xc1\xa5\xb2\x9e\xcb\x7a\x22\x77\x8d\x75\x74\x91\xab\x89\x7c\x57\x35\x5f\xd5\x72\xbf\x63\xb2\x66\x77\x72\xd7\xe4\x0b\xb5\xa4\x1d\xef\x8b\x8b\x65\x08\x44\xd4\xe5\x0e\x0f\x54\x9a\xf6\x21\x63\x73\x5f\x01\x3e\x5b\x55\x7d\x7b\xd7\x63\x4c\xc8\x3b\x0e\x1f\x69\xcd\xa6\x83\xb5\x44\x2c\xdf\xda\x6b\xe6\xd7\xa3\x11\x51\x8b\x7a\x89\xbe\x23\xdb\x6e\x6d\x10\xcf\x4f\x77\xb1\x2b\x15\x87\x70\x50\xe6\xdf\x64\x62\xd2\x3f\x61\x08\x6b\xd8\x8e\xc5\x29\xbb\x38\x95\xc9\xd6\x45\x4e\x25\x58\xf4\x17\x38\x1a\x05\xbd\xa0\x62\xb2\xba\x26\xc7\xe3\xbb\xad\x28\x79\xe6\x3b\x4c\x8e\x24\xab\xc9\x71\x23\xaa\xa2\x2c\x6f\xef\x8c\x3f\x4e\xaa\xc0\x70\x25\x53\x34\x1c\xcb\xb6\xa0\x36\x18\x07\x44\x03\xd4\x03\xa0\x96\x93\xd5\xb5\xd9\x1a\xba\xa8\xf3\xac\xbf\x08\x48\x4d\x11\x36\x2d\x1a\xfd\xdf\xaa\x4c\x4f\x40\x7b\xd8\x23\xdb\x89\x0c\xed\x26\x88\xb9\x81\xd6\x5f\x9a\x0b\x4a\x4c\xae\xf7\x8d\xc2\xed\x95\xa6\x95\xd0\x13\x71\x4d\xad\xd9\x9c\x91\x14\x06\x8e\x3c\xa7\xe7\xd2\x17\x2c\x47\x23\xf2\x95\xae\x5c\x2e\x43\xbc\x9c\xe9\x79\xe1\xd3\x14\xa3\x11\xf9\x46\xa7\x29\x82\x34\x88\x97\xed\xd2\x34\xa3\x11\x79\xa0\xd3\x34\x4b\x3d\xba\x3c\xb2\x58\xfd\x2d\x5e\xdc\xd7\xc0\x42\x35\xa7\xd0\x79\xff\xca\x35\xea\x61\x43\x15\x9c\x52\x5f\x94\x62\xb7\xd3\x67\x71\xc0\xc3\x0c\x18\xb0\xe8\x52\x2e\x62\xeb\xb0\xfe\x94\xe3\x13\x4c\x50\xd5\x47\xc5\x19\x02\x03\x79\x98\x40\x5d\xa8\x88\x48\x44\xd9\x8b\xa1\xf2\xc6\xed\x16\xf4\xe5\x40\xba\x10\x48\x51\x6c\x65\x5c\x76\xbb\xbf\xa0\x4e\x40\x90\xfb\x1f\x9d\x65\x69\xfa\xb3\xc2\x60\xbf\x00\x0c\x53\xc5\x1c\x7f\x87\x03\x0f\x21\xf7\x11\x76\x7a\xe8\xf8\x63\xaf\x51\xf3\x3e\x38\xf0\x50\x8b\xca\xff\xf6\xc2\xf6\x8b\x3a\x30\x24\x8b\xd3\x18\xd9\xfb\x25\xab\xad\x71\xd9\xe1\x50\xb7\x74\x22\xf4\xa4\xf5\x2a\xcd\x38\x82\x8a\xc7\xcb\x98\xbf\x3b\xab\x05\xdc\xdf\x61\x30\x88\x79\x82\xe6\x53\x14\xff\xe7\x51\x83\x8e\x34\xea\x75\xb0\x10\xbf\xba\x67\x21\x0e\x78\x6b\x63\xc1\xcb\x05\x86\xf7\x4d\x51\x5b\xf4\xce\xaf\x21\xa8\xdb\xbb\x61\x7f\xf7\x60\x3c\x8b\xf5\x1f\xfb\x06\xa7\xfa\xb5\x64\x2f\x6b\x7d\xbd\xdb\x02\xfc\x57\xa8\x27\x8a\x5a\xc6\xa3\xc7\x54\xf5\x28\xba\xb0\x56\x89\x51\x03\x43\x3e\x98\x67\x90\xd5\xfd\xeb\xbd\xee\x18\x38\x8c\x5a\x65\x8f\xbe\xaf\x33\x45\x02\xef\x3d\xf6\xdd\x04\xab\xae\x78\xff\xaa\x57\x04\xfd\xf1\x72\xc7\x4f\x75\xb9\x04\xc4\x65\xf1\xa8\xc3\xe2\x6a\xdd\xe2\x28\x30\x33\x76\x5c\x6b\x67\xc8\xc5\xea\x4f\xb1\xf0\xfa\xa6\x35\xe7\x03\xbb\x07\xa2\x06\xc1\xe1\x11\x63\x14\xb6\x78\xd4\xed\x91\x31\x3e\xaa\xa2\x41\xb8\x50\x2d\xf1\x55\x9a\x7e\xa7\xa9\xb9\x40\xa8\x7a\x8f\x88\xaa\x5d\x1a\x31\x9e\xd0\x4e\x69\x19\xcd\x3c\x13\x00\x48\x14\xfd\xba\x82\x0f\xc6\x7e\x00\x49\x79\x67\xc4\xf4\x2e\xbc\xdf\x74\xae\x93\x85\xd6\xa7\x26\xc9\x53\x7b\x43\xa6\x02\x72\x8f\xa4\xe9\x07\x14\x23\xfa\x65\xe9\xcf\x2e\xbf\xbb\x1a\xd1\x93\xa8\x3d\xf5\x69\xfa\x06\x76\x9c\x6a\xd3\xe3\xb6\x3c\x20\x23\xbb\xfd\x42\x85\x49\x3e\x41\xea\x12\x64\xc1\xbf\xeb\xfe\x69\x7a\xc0\x03\xdc\xdd\x73\x1c\xd0\x0a\x3b\x75\xde\xe9\x7c\x9a\x0a\x6c\xb9\xb9\x60\xad\x95\xfc\xe4\xdd\x96\xf3\x12\x20\x94\x7f\xb5\x00\xff\xc1\x51\x65\x15\x0b\x78\xb4\x3c\x86\xd1\xc9\x05\x0e\xd4\x82\x62\xa2\x42\x7f\x33\x56\xbd\x9d\x33\x3c\x4d\xbf\xc4\xf1\x0e\x8e\x45\x3c\x00\x8d\x93\xb6\x56\x96\x60\x61\x86\x41\x74\x38\xa5\x08\xd3\x1b\xb4\x88\xb4\x69\x50\xb1\xc9\x86\x37\xa0\x16\x8a\xa9\x50\x31\xe3\xeb\x4a\xc9\x9f\x05\x7f\x97\x90\x13\x1c\x9a\xfb\x60\x47\xa8\x60\x16\x0d\x01\xd5\x8b\x2a\x54\x77\x9a\x0b\x36\x9c\x3a\x2d\x1f\x0c\xbd\xcc\x0c\xd0\xad\xa8\x2a\x6e\x98\x31\x01\x9a\x6d\x0b\xe7\x36\x56\xcf\x02\xac\xf0\xe1\xcc\x41\x82\xa7\xe9\x70\x67\xad\xee\x9c\x9d\xdd\xff\xf3\x7f\xfc\x9f\x49\xc7\xd9\xb6\xb3\xae\xba\xc7\x08\xca\x98\x52\x61\x17\xc6\x75\x60\xa4\x3c\x8e\x80\x1d\x3f\x6a\x4d\x15\x58\x52\xc5\x9a\x58\x46\x8e\x1a\xb0\xa1\x3e\x5a\x96\x35\x06\x53\xce\xc4\x2f\xb0\xf2\x72\x27\xf6\x23\x1a\x2b\x27\x11\xe3\x90\x6d\xd0\x87\xba\x1a\xeb\xfc\x53\x69\x56\x8b\x5d\x01\x99\x68\x03\x3d\x63\xb6\x90\xf1\x29\xc9\xb1\x45\x67\x47\xaa\x2a\x03\x67\xc6\x03\xc0\x12\x27\x51\x36\xd5\x90\x21\x08\xa1\x47\xfa\xcc\x14\x40\x99\xce\xb9\x32\x9e\x45\x02\x14\x50\x0b\x6e\x3a\xd7\x29\xc6\xb3\x1c\x30\x4f\x9d\xad\x8b\x22\x36\xda\xe7\xd5\x29\x46\xb3\xc0\x9c\x46\x91\x16\x1d\xfd\x04\x08\x68\x63\x75\xa5\x9f\x96\xc6\x6c\x95\xd0\x3d\x43\xef\x6e\x6a\xfe\x1b\x3a\x4d\xca\x1b\x5a\xa2\x12\x8e\x60\x2d\x35\x1c\x83\x9b\xb2\xef\x53\xc3\x01\x00\x15\xba\x3f\xa1\x86\xd3\xca\xd9\x56\xc2\x69\xac\x12\xce\x3e\x54\xc2\xa1\x2b\xd6\x52\x3f\xa1\x9b\x8e\xbe\x86\x07\x02\x28\xc3\x93\x26\x03\xee\x43\x10\x64\xcc\xc5\xfa\x54\x74\x56\xe4\x72\x06\xe6\x39\xc3\xa9\xc3\xe1\x2f\xa3\x33\x28\xfb\x2e\x2c\x0d\xef\xbc\xd3\x7a\x22\x9b\xa8\xbc\x61\x41\x42\x80\xfb\x33\xa1\x57\x54\xa3\x00\xdf\xb6\x4d\xc1\x92\xbe\x08\x25\x5b\x67\x9d\x53\xa3\x72\x32\xdc\xeb\xe2\xf6\x0d\x7f\x01\x3a\xdc\xc6\x49\x32\x68\x7f\x43\xf0\x3f\xaa\x6d\x18\x01\x2f\xe0\x0e\xfe\x50\xe0\x40\x54\x2c\x8a\x25\x2c\x2b\xfb\x7e\x3c\x1c\xae\x79\xa6\x43\x69\xb2\x15\x6b\x8e\xde\x8d\xbd\xb7\x5d\x7c\x60\x49\x5f\x44\x43\xe4\xa2\x89\x8b\x48\xd3\x6b\x9e\xe9\x50\x9a\xec\x2b\x53\x48\xed\x38\x61\xa1\x26\x30\xc0\x44\x04\x8a\x40\xf7\x68\x09\x81\x76\x9f\x63\xc5\x40\x15\x8a\x26\xc6\x30\x3f\xa1\x2a\x8a\xf6\x17\xbb\xbf\x92\x27\x1b\x51\x89\x66\x9b\x05\x37\xed\x8f\xfe\xf6\x30\xdc\x0d\x87\x35\x9d\x91\xc1\xbf\x11\x15\xa9\xbe\xbd\xf3\x81\xee\x75\x0e\x9c\x91\x10\x8a\x34\xb6\x22\x0e\x35\x19\xba\x85\xeb\xd3\xaa\xbc\xcd\x38\x2d\xea\x2b\xb8\x18\x9a\xbe\xda\x7a\x52\xb5\xab\x0f\x80\x4b\x43\xe0\xad\xb8\x76\x14\xe7\x86\x0d\xe0\xa6\x68\x1d\xd3\x6a\x83\x0e\x8a\x9a\x71\x22\x6d\xd8\x12\xc8\x13\x36\xe6\xef\x27\x1a\x83\x34\x8d\xd1\x8f\x41\x4f\x5b\x87\x83\xfa\xf4\xb6\xfd\xc7\x0d\x8b\x5a\x05\xfa\x76\xc8\x9c\xd5\x54\xa1\xb8\xda\x96\xf0\xac\xae\x65\xa5\x04\xaf\x3b\x6e\xee\xf4\xd2\x41\xf2\xce\xa5\x05\x61\x9c\xa2\x5f\x67\x4a\xd0\xc8\x90\x45\x89\x16\xaa\x16\xc2\x1c\xa8\x6e\x35\x3d\xd8\x4b\x96\x38\x19\xe9\xe7\xe5\x97\x85\xe2\x23\x7f\xb7\xbc\x93\xf5\xdb\xd7\xe2\x9a\xd3\x8a\xad\x01\x2e\xb9\x5b\xa2\xa6\x54\x16\x4b\x0b\xdf\x55\x85\x00\x52\x40\xdb\x23\x86\x08\x3e\xf6\x69\xbb\xf2\xd1\x93\xe9\x94\xf8\x2b\x4f\x22\x14\x48\x2f\x2c\x83\x47\x02\x2a\x98\xb1\xb9\x6f\x68\xc3\x64\xf8\x44\xbc\xf4\x2d\xbf\x2e\xde\xbf\xb0\x4d\x45\xab\x85\xf9\x3f\x78\xa6\x26\xd7\x72\xcd\x69\x85\x23\x4b\x90\x95\xb9\x67\x1b\x05\x68\x5b\x95\x26\xf5\x06\x0d\x1e\x0b\x3a\x01\x6b\x88\xb5\xef\x6f\xd8\xde\x7c\x18\x80\x63\x13\x0e\x1c\x62\xde\xd0\x15\xdb\x23\x82\x1e\x6f\x06\xab\x79\x1c\xc9\x56\x79\x09\x90\xd2\x51\x60\xcc\x52\xdc\xb0\x61\x71\x38\x58\x5c\x92\xa1\xeb\xa2\x3b\x17\xcb\x21\x5b\xa5\x69\x36\x2c\x0f\x87\xe1\xea\x70\x28\xad\x33\xea\x21\x5b\xd9\x4f\x1d\xea\xbc\x4f\xeb\xf0\xc0\x15\xf5\x96\x4d\xcf\x87\x9b\x34\xdd\x3a\x77\x6e\xe7\xa3\xd1\x96\x6c\x58\xb1\xd8\x2e\x7d\x75\x8b\xed\x72\xb0\x49\x53\x81\x9c\xdb\xca\x58\xa5\x48\x1c\x8e\xa7\x9a\x2c\x60\xd5\xa4\x29\x6e\x78\x46\x28\xfa\xed\x46\xb3\x00\x54\x24\x89\x26\xe3\x82\xdd\x37\x1b\x69\xba\x83\x41\x47\xc0\xcd\xaa\x53\x87\xae\xf8\x7f\x3d\x61\x6c\x3a\xb7\xf5\xe1\x64\x85\x95\xea\x55\xee\x56\xad\x73\x63\x89\x3b\x2d\x5e\xc3\x5f\x72\xc0\x38\x18\x4e\x41\xf2\xd0\x59\xc3\xa6\x3e\x8a\xcb\xc3\x85\x06\x7a\xbb\x61\x38\xad\x9c\xb1\x8e\xbd\x71\xe0\x28\x0f\x8e\x9a\x98\x41\x2a\x42\xe6\x28\x60\x21\x09\x80\xa2\xd4\x5d\x4f\xc8\x91\xa0\x2e\x5f\x2d\x3a\xfa\x06\x2d\x7c\x07\xa3\x2b\x25\xf8\xbb\x9d\xac\x15\x33\xda\x1b\x60\x2b\x59\x72\xf6\xb4\xb2\x30\xf6\x9a\xd4\x42\xd5\x8f\xb5\x50\xb2\xfe\xba\xc1\xdb\x9a\x0d\xab\xd6\x35\x68\x38\x7c\x3a\xa9\x89\x70\x92\xdc\x5e\xb5\xca\x30\xa5\x95\x14\xf7\x29\x46\x42\x3a\x59\xda\xc7\x21\x26\x05\x1b\x01\x8c\x82\x77\x18\xab\xad\x5e\xc6\x75\xc3\x00\x08\xd3\x34\x1a\x35\x10\x16\xcb\x40\x40\x57\x89\x93\x36\x21\xf6\xb8\x53\xad\xde\xda\xd5\x00\x48\x4b\x14\x01\x70\x87\x0a\xab\xd6\x4f\x63\x33\x6c\x06\x0b\xba\x0e\x5d\x8e\xba\x38\x25\x2f\x1c\xff\xce\x21\xb5\xd5\x7d\x48\x6d\x3d\x81\x01\xeb\x2f\x4d\xeb\x49\xcd\xab\x35\xaf\xf9\x5a\xbf\x07\x98\x89\x02\x1b\x7d\x00\x0d\xb2\x8e\x8e\x67\x83\x52\x9f\xe5\x69\x9a\x61\xbb\x55\x30\x3c\xde\x5f\x78\x88\xfd\x4e\x65\xb8\x4e\xc3\x5e\x8d\xfd\x1e\xb0\x6b\x06\x55\xfd\x69\x65\xb1\xec\x0a\xaf\xe2\x2c\x68\xd8\xef\xd1\xa9\xbc\x9a\x96\xb2\x43\x75\x21\xd3\x54\x8e\x83\xdf\x8f\xd0\x42\x3d\xc0\x0f\x41\xdc\xaa\x3a\x80\xce\xa1\x76\x54\x2e\x0b\x3d\x2c\xf8\x3d\x2e\x30\x6f\xd4\x1e\x37\x7c\x84\x3e\x03\x38\x4a\xe6\x40\x9d\xa4\x6e\xba\x03\xa4\x2b\x9c\x2b\x07\x39\x64\x21\x4b\xb6\x18\xba\x39\xd0\x53\x54\x16\x8d\xd2\x2f\x25\xcf\xa0\x89\x56\x7d\x98\xe4\x17\xf4\xb1\xa9\xa2\xd5\x7e\x7e\xd2\xad\xa7\xdd\xa0\x53\x66\xb0\xc3\xdc\xb1\x1d\xc0\x8b\x1d\x0e\xf5\x05\xf3\xd0\x63\xf3\xac\x32\x60\x6f\xd6\xa5\x00\xf5\x91\x4c\x91\x3c\xf3\x3f\x2f\xd5\x3c\x4e\xec\xa3\x1c\xec\x1b\x06\x91\xdc\x47\x5d\x20\x85\x0b\xf9\xaa\x08\x14\x0e\xc9\x45\x12\xd7\x48\x6d\x43\x2f\xea\x79\x9c\x2b\x84\x9d\xb3\x89\x68\x4d\x6c\x5d\xaf\xe5\x65\x7d\xa2\xa6\x29\x85\xba\x6a\xe2\x2b\x7b\x2d\x59\x0d\x08\xdb\x92\x16\x76\x35\x18\xe0\x32\x34\x27\x33\xb8\x5d\xe1\x9a\x09\xac\x0a\xc1\x87\xb7\xc7\xe3\x09\xf3\x7b\x3d\xca\x12\x77\x15\xec\xf9\xc6\x7a\xc6\xf4\xbb\xff\xd4\x6e\xfc\xef\x77\xb8\xdf\xbf\x68\x9a\xd5\x72\x44\x09\x4e\x67\xad\x1d\x72\x1b\x5b\x54\x01\x67\xd2\xd0\xa3\xc3\x9f\x5a\x5e\xb0\xbe\x14\x37\x7a\xaa\xda\x99\x6a\x76\x57\xac\x94\xb8\xe1\xcf\x4a\x95\xab\xa3\xce\xee\xdd\x84\x3b\x46\xa5\x5d\xa1\x3d\x51\x19\x19\x54\x93\xa2\x5a\x6d\x65\xfd\x1d\x00\x8d\x21\x62\x5e\xb5\x4e\xd3\xbe\x26\x84\x69\x11\x7c\xdc\xff\x66\x61\x24\xb5\x31\x66\x4e\xab\xe8\x27\xad\x91\x5b\x69\xb2\xb9\x6f\x1b\xee\x32\x05\xbf\x88\xc7\x3c\xd3\x73\x6a\xc1\x45\x2f\xff\x0c\xcd\xb0\x46\xcb\x2d\x05\x15\xd0\x5f\x23\xf4\x23\x1b\xb6\xe3\xba\xd2\xcc\x2c\x80\x94\xd9\xae\x6b\x7a\xd3\xeb\xbe\xfa\x4b\xa9\xf1\x08\xee\x2a\x44\x5b\xb6\x2d\xdc\xa7\xe9\x95\xa6\xe2\x9d\xd3\x30\xf4\xd4\xfe\xcb\x96\xf3\xf2\x75\x51\x5f\x71\xc5\x98\x9a\x77\xf4\x93\xad\xe6\x5d\xe0\xb6\x32\x52\x90\x23\xd4\x7b\x9a\x2c\xcd\x6e\xa3\xab\xe0\x60\xa1\x1b\x36\x3d\xdf\x5c\x94\x96\xea\xd8\x58\x6e\xcc\x96\x95\x8b\xcd\x12\xb1\x3e\x8c\x11\xf6\xb9\xb5\x2f\xdc\x1a\xb8\xb9\x6d\xdb\x94\x96\x31\x69\x1c\xdd\x16\x43\x86\xb1\xe7\xa4\x60\x4d\x56\xe0\xa1\xbb\x66\xc2\xda\x10\xaa\x34\x55\x17\x9a\x4a\xdd\x06\x63\x39\xd8\x06\x2e\xb0\x5f\x64\xee\x17\x4d\x50\xbf\x28\x21\x97\xe3\x19\x78\x0a\x1d\xce\x08\x05\x1f\xd9\x5b\xba\xd2\x27\x06\x5d\xa7\x69\xf6\x36\x0b\x0b\x23\x34\xfc\xf5\x49\x10\xe6\x7f\xe7\xde\x2c\x91\xae\xe0\x1c\x2a\x4c\x3f\xc2\x49\x3b\x06\xd8\x26\x37\xbe\x11\x03\x19\xeb\xce\xec\x68\x41\x8e\xab\x11\xdb\xc2\xdd\x8b\x50\x83\x85\x1d\x8f\xa3\x3e\xe9\xba\xc7\x84\xb9\xc4\x09\xfd\xc8\x92\x4d\xf4\x69\x18\x1d\x4c\x78\xbc\xd0\xf6\x61\xa2\x17\x95\xdb\xfc\xd1\x8f\xa1\x3e\x4a\x50\xbe\x66\x83\x1c\x08\x06\x8f\x76\xfb\x4f\xb1\xdf\xb4\x28\x96\xf4\x45\xbb\xad\x4a\x88\x7d\x6a\xf6\x9e\x2a\xb4\x6e\x83\x8f\xfd\xa4\xe7\x3b\x03\xe5\x43\xae\x9e\x81\x1d\x50\x70\x5c\xf0\xe8\x7c\xd0\x43\x60\x1d\x30\x66\x7a\x41\x28\xb3\xf8\x9f\x96\x25\x94\xa3\x7b\xa2\x26\xc5\x7a\x8d\xa5\xd6\xfa\x17\x9e\x5b\x59\xd0\x46\xdb\x5e\x7b\x80\x1c\xb3\x15\xa1\x6f\xb3\xda\x03\x8d\xe0\x4f\x27\x59\x81\x10\x6f\xa8\x1a\x49\xb9\xeb\xb6\xec\xcb\x10\xc9\x53\xda\xe0\x74\x46\x64\x45\x9b\xaa\xa0\x2d\xa2\xa2\x45\x53\xa0\x1d\xde\x9f\xa7\x53\xa0\x8c\xba\xa8\xbe\x88\xef\x17\x20\x7a\x0a\x43\x0a\x7b\x24\x46\xe5\x48\x34\x5a\xb1\xe1\xf4\x3c\xab\x4e\xeb\x9d\xaa\x36\x59\x3e\x44\xba\xfc\x70\xc8\x62\xdb\x77\x80\x37\xbe\x8b\xb8\xae\xa7\xcd\xb7\xc6\x68\x28\x6d\x7c\x76\x13\x4f\x49\xea\x47\x89\x3f\x6c\x2d\x20\x27\x1d\x66\x6d\xfa\xbb\xfb\xd6\x6f\xd3\xe1\x5d\xbe\x05\x01\xc5\x0e\x3d\x18\xe7\x95\x3e\x3c\xee\x5e\x39\x03\x59\x81\x0a\xc1\x03\x80\xc6\xa4\xa0\x2a\x2c\x08\x6d\x04\xfe\x35\x74\x00\x1b\xce\x8e\x6a\xd2\x88\xab\xaa\x28\x33\x4e\x13\x1c\xfc\x24\x56\x21\x73\xe4\x51\xd0\x80\x9a\xeb\xc1\xc6\x3d\x8a\x4d\xed\xa0\xb6\x9e\x48\xad\x89\xc0\x2c\xac\xd3\xce\x1c\x4a\xf6\x12\xda\x66\x91\xc0\x79\xde\xe9\x3a\x3d\xdd\x96\x3e\x00\xd6\x53\x6d\xe9\x8e\x69\x80\x73\x1f\xbd\xb8\x8c\xe6\x01\x28\x4b\x8b\x4d\x06\xc3\x5e\x13\x33\xe2\x54\xe0\x4f\x63\x70\xd6\x19\xf9\xca\x8c\x7c\xa5\x57\x88\x63\x83\x06\x98\xf0\x11\xf7\xaa\xc7\x8a\x70\xc0\x7b\x94\x4b\xd0\x7e\x11\xad\x58\xfc\x95\xec\x99\x6c\xfd\x62\x6b\xb7\x47\x9d\x65\x9e\x95\x59\xdb\x0c\x3d\xda\x2e\x0a\x99\xc3\xa7\x72\xf4\x1e\x1a\x61\xfa\x1e\x1d\xee\x91\x57\x6f\x09\x40\xd2\xc5\x29\xd3\x4a\x0b\xcf\xab\x26\x45\x29\xae\xaa\x5f\x10\xfc\xe2\x70\xe8\x73\x01\x71\x42\x9f\x38\xf0\x4b\xcc\xc0\x39\xc3\xb8\x63\x18\x69\x94\x12\x62\x09\x43\xe4\x7f\x22\x64\x1b\x48\x86\x16\x4e\x0e\xa0\x35\x46\x65\x1d\xd6\xe0\x32\xc0\x60\xbd\xf4\x36\x49\x9f\x31\x3a\xd1\x55\xcf\xaf\xd0\x50\x4a\x12\x1a\xc4\x7c\x5e\xac\xde\x5e\x81\x41\x69\x9c\xc3\x87\xc7\x79\xed\xdb\x10\x92\xc2\xf0\x15\x6f\x4a\x04\x1f\x76\x72\x05\x84\x28\x76\x4a\x6c\x80\x54\x0c\x30\xc5\x41\x41\xc7\x53\x7d\x50\xad\x15\x80\x28\xa2\x23\x81\x8a\xd4\xc1\x42\x87\xa7\x3d\x42\x19\xf6\x11\x9d\xf1\x1b\xc2\xfb\x47\x88\x28\x98\x98\xa1\x3a\x9e\x91\xd0\x46\x00\x54\x1f\x1d\x0b\xb1\x8a\x5c\xca\x5a\xed\xc4\xca\xb9\xea\xed\x03\xd6\x74\x76\x9c\x35\xe9\xfa\x4a\xa9\xa0\x9d\x21\xbc\x2a\x76\x7c\xcc\x4b\xf0\x2a\x2d\x99\x08\x8d\xc4\xc2\xc5\x52\x30\x11\x29\x9b\x49\xe7\x7c\x10\x1a\xf9\x55\x38\xe7\xc6\xac\x2c\xa1\xae\x03\x5f\x57\x95\x65\x38\x39\xde\x82\xa4\x51\xd6\xb0\xf0\x82\x8c\x66\x3e\xb3\x65\x54\x75\xca\x1a\x15\xb4\x6a\x79\xdd\xed\x26\x9a\xdb\xf1\xcc\xc7\x33\x7a\xb2\xb1\x71\x65\x66\x5b\x88\x10\x5e\x75\x68\xbd\x0d\x0d\x03\x8f\x37\xab\xce\x5d\xbe\x58\xea\x3b\x7c\x46\xd1\x12\xc5\xc1\x58\x0a\x4b\xc2\x4b\x70\xfe\x4c\x0b\xa7\x1c\x90\x34\xaa\x16\xd5\x55\x32\x64\xea\x76\xc7\xe5\xe6\x4c\x02\x1b\xc5\xf0\x73\xa9\x04\x37\x2d\xc6\xb1\x0b\x39\x31\xa3\x4d\x02\x44\x3e\xbc\x40\xc9\x4a\x56\x4a\x54\x7b\x3e\xd0\xb4\xc4\xb1\x46\x46\xf0\x9d\x2b\x23\x97\x14\x4a\xce\x8b\xa3\x7b\x97\xa9\x34\x1d\x56\xfa\x55\xdd\x4e\x7b\xaa\x3a\x53\x04\x78\xbc\x20\xa1\x07\xd6\x4d\xdf\x55\x00\xa6\x31\x81\xb3\x9a\xc1\x5b\xd4\x40\xf3\x73\xc1\x22\x7f\x10\x2d\xf7\x0f\xa3\x91\x83\x7b\xa8\x11\xaa\x4a\xf8\x21\x81\x85\x89\x43\xd5\x30\xf5\x69\x58\xb3\xd8\x94\xb3\x64\xa4\xcf\x96\x22\x4d\x33\xbb\xf1\x57\x4d\xa3\x9f\x1d\xac\xb8\x77\xa0\x81\x3c\x0f\xda\xde\xd0\x26\x5a\x4b\x26\xd6\x2e\xa6\xc3\x61\x66\x80\x63\x8f\xed\xa7\x62\xed\x3c\x69\x25\xb9\xb1\x80\x83\xbb\x34\x80\x7f\x87\xf1\xdc\x44\x2b\xb1\x84\x9b\x79\x1f\x27\x5c\x0b\xe3\x8e\xcf\xb9\xc7\x54\x5b\xd1\x20\xc3\x19\x94\x87\x58\xe5\xb4\x1a\x9c\xb5\x00\x3b\x0d\xc7\x6b\x13\x8e\x37\x90\x32\x21\xdd\xdc\x9f\x66\x00\x40\x65\x64\x87\x72\xba\x4a\x73\x14\x05\xf5\xc5\xf6\x2b\x9f\x58\x99\x79\x9b\xb1\x2f\x4e\xd5\xb3\x92\x6b\x4c\x19\xbe\x1d\x58\x8f\xf9\xbb\xd7\x94\xa9\x79\x09\xfa\xaf\xe7\x67\x1f\xc6\x08\x1e\x7f\x36\x83\x22\xdc\x6b\xe4\x74\xb7\x0c\xae\x3a\x24\x37\x07\xf7\xe9\xc4\x26\x81\xeb\xc8\xcb\xff\x34\x03\xa8\xa5\xb8\xbe\x2f\x5c\x95\x71\x79\xad\xce\x87\x1d\xf1\x23\xb8\xbc\x67\x18\xe4\x5e\xe9\x54\xf9\x19\x72\x69\x0c\xcb\x2e\xa8\xd6\xb5\xa5\x7b\x09\x35\x89\x7e\x94\x03\x1b\xd0\xa3\x0f\x94\xa7\x6b\xc3\xb9\xd2\x54\xa0\x4f\x6e\xf2\xc7\x85\x43\x1a\x9f\xda\x5c\x1b\xba\x54\x19\x11\x85\xf7\xcf\xb5\xc7\x9c\xf6\x2a\x4b\x9f\x47\x3a\x46\x33\x50\x23\x72\xeb\xb3\xf9\xd8\x92\x6e\xdc\xec\x04\x87\x9d\xdb\x4e\x71\xb7\xa0\xe5\xad\xf6\xfa\x9a\x96\x3d\x7b\x34\xd8\x99\x9d\x5d\x62\x91\x17\x12\x9a\x8c\x71\xc1\x9a\x97\x6b\x54\x65\xbc\xab\x5b\xfb\x2e\x28\x3c\xaa\x3d\x21\x1e\x1c\x41\xb6\xe8\xa7\x0f\x0e\xee\x21\x6c\x59\xd7\x62\x71\x0a\xf8\xf9\x75\x9a\xde\x82\xff\x0d\x97\x74\x5d\x17\x57\x57\x9a\xc6\x43\x07\xfb\xc8\x0e\xf1\x07\xfb\xbc\xa5\xae\x65\x3b\x45\x72\x1e\xfc\xd0\xbd\x0d\x1c\xc8\x98\x67\x9d\xa1\xbe\xa8\xec\xbe\xbb\x64\xfb\x71\xe5\xd3\x5a\x67\x1d\x32\xe6\xee\x98\x79\xec\xf5\x53\x62\x72\x59\x87\x1e\x7a\x01\xc4\x5c\x06\xd9\xe2\x2a\xe8\x24\x27\xb8\x07\xb2\x6d\x00\x20\x03\x9b\x4d\xe9\xad\x3e\xa7\xe1\x19\xed\x15\xed\x67\x66\xf5\x39\x52\x4a\xf6\x90\x65\xb2\x45\x48\x61\xbd\xe1\x63\x05\x0b\x6a\xbb\xc4\x93\x5d\x27\x81\x36\xe8\x07\x9c\xeb\x17\xb6\x30\x0b\x34\x18\xff\x34\x88\x84\x53\x1f\xe2\x55\x81\xf5\x82\xdd\x72\x5e\x7e\xf9\x2b\xb3\x5f\xbf\xd9\x2f\xa3\x4b\x2a\x3b\xba\xa4\x7a\x10\x0c\x7e\xe6\x40\xf6\x40\x99\xda\xae\x01\x7f\xed\xb5\xdc\xaf\xdc\x21\x11\x90\x28\x6c\x25\x32\xe1\xe8\x17\x11\x51\xf9\x74\x23\x32\x49\x68\x35\x11\x95\x50\x99\x24\xc7\x5a\x84\x86\x8e\xc0\x1a\x60\xb1\x7e\xe9\x15\x3a\x3c\xb3\x06\xfd\x20\x20\x45\x62\x2b\xd0\x3c\xa1\x51\x39\xf8\xce\x66\x3d\x32\x69\xce\xa6\xe7\xfc\x22\x2c\xc9\x10\x4a\x7c\x34\x22\xd7\x56\xaf\x05\x8d\x7f\x7c\xa2\x05\x5f\x1a\x8b\xec\x9d\x60\x53\x7a\x6d\xd4\x53\xbd\xa7\x8a\x88\x72\xc3\xc1\xe6\xa5\x2a\x7e\x05\xea\xcd\xff\xfe\x2d\xf4\x3a\x0e\xd0\x62\x7c\xb2\xe6\xaa\x10\x25\x30\x32\xdf\x8b\x86\x31\x3e\x79\xf1\xfd\x4f\x5f\xff\xf3\xfb\xef\x5e\x3f\xfd\xf6\xf7\xa7\xbf\x7e\xfd\xca\x3a\xe1\x82\x74\x81\x07\xae\xbe\xac\x3f\x3f\xfb\xe9\xf5\xd7\x5f\x98\x8c\xf3\xda\x65\xcb\x63\xbf\x5d\xbe\x45\x84\xde\xbd\xcf\x15\xbd\x8d\x3c\xb9\xdc\x06\xdd\x81\xae\x0d\x9c\x5e\xd4\xfb\x3f\xb1\x6b\x41\xd5\xe4\x16\xff\x06\x7e\x19\x02\x96\x49\xa5\x73\x29\xd0\xe2\x9d\xbc\x07\x69\xc2\x6d\xe8\x6f\x07\xbc\x2d\xd8\x03\x0b\xbc\x1e\x87\xe0\x2d\x4d\x24\x4c\x5f\xb9\x58\x83\x9f\xd1\x44\x42\x79\xe3\x0e\xa9\x3c\x1c\x64\x9a\xae\xd0\xcf\x0d\x08\x1e\xf6\x84\xe7\x76\xce\xb7\x4c\x4d\x14\x88\x1c\xe8\x9a\x15\x70\xb4\x9c\x6f\x87\xac\x39\xdf\xb2\x6d\xc0\xeb\x77\xef\xe1\x1d\x9b\x9e\xef\x2e\xd6\x76\x65\xec\xf0\x49\xbf\x5e\xec\x96\xc0\x38\x67\x6c\x1b\xf2\x58\x7a\x04\x1b\xdb\x01\xe8\x21\x9e\xf1\x23\x36\x6f\x58\xa7\xe9\x70\x63\x39\x8c\xd7\xce\x11\xb8\x6e\x73\x9a\x82\xfe\x64\x60\x2b\xd1\x78\xc5\xbb\x91\xfc\xd3\xb5\x20\x84\x7e\x77\x22\x09\x7a\xa4\xc4\x34\x00\x9f\x0e\xa3\x90\xa6\xbf\x73\x3d\xfc\x37\x52\xac\xb3\x22\xda\xf1\xa8\x76\x83\xa3\xe4\x5a\x73\x87\x0e\x09\x74\x5d\xf4\xa6\xa3\x08\x7a\xcb\x6e\x46\x45\xaf\x46\xc4\xe0\xfa\x62\x3a\xbf\x09\xcd\x3c\x6e\x46\xd7\xe3\x27\x53\x92\xdf\xb2\x5e\xbe\x29\xbd\x1d\x5d\x8f\x9e\x4c\x09\xf5\x00\x6d\x37\x56\x43\xf5\xf6\x48\x8e\x3b\x81\x82\x70\x5c\xac\x51\xcb\xe7\xad\x8e\x84\x23\x40\x8b\xe8\x1c\x0b\xc6\xcf\xc6\x7c\xf9\x2b\x13\xee\xfb\x37\x26\x4f\xc0\x0a\x3b\x05\xd7\xa8\x2e\x0b\xed\x10\x56\x39\x8e\x52\x50\x15\x56\x1a\xc5\xfd\x46\x6b\xbd\xcd\x5d\xdd\x69\xaa\x1e\xba\x1f\x87\x03\xf7\x51\xbf\xa6\x29\x77\x51\xbf\x0e\xe2\xee\x16\xdd\x93\x5a\xef\xe5\x6b\xc1\xb2\x6b\xf1\xa7\x9d\x18\xd5\xe4\x61\xb6\x13\xa3\x19\xa1\xa3\xd1\x4e\x90\xe3\x91\x3e\x9a\x4e\x09\xc9\x33\x57\xe2\x28\x1c\x82\x11\x93\x84\x1c\x8f\xc5\xfc\x5a\xb0\xf1\xe4\xc9\xe3\xbc\xd6\x5f\xb3\x27\xf9\x0a\x43\xfe\x9a\x6f\xb1\xf8\xf1\xec\xe1\x63\x24\x51\xdf\x88\xd6\xb9\x0c\xe7\x23\xfa\x16\xb2\x08\x26\xce\x01\x11\x53\xc7\xc1\x9b\xf0\x44\xd6\x31\x45\x7d\xdb\x35\x92\x3f\x0b\x8a\x59\xc4\x85\x2c\x8f\x34\x2a\x83\xff\x7b\x5f\x94\x4d\x47\xba\xcc\xe0\xb5\x66\xf9\x47\x80\xb3\xcc\x7d\x21\x43\x16\x17\x7a\x38\xf0\xd8\x91\x92\x49\x10\x85\x79\x66\x54\xac\xcb\xd4\x4d\x09\x5a\x4d\x56\x0e\x1a\xf6\x64\x09\xac\x29\xf7\x0b\xfd\x70\x2a\x27\x39\x76\x22\x65\x72\x38\x60\x38\x78\x45\xaa\xe0\x8f\x17\xa8\x5b\xb6\xc9\xb4\x35\x14\x6b\xce\x77\x5f\xc8\xdd\x6d\xff\x15\xb7\x58\xd2\x7b\xdb\xcb\x17\x6a\x09\x5c\xed\xdf\x45\x56\xa9\x2c\x6e\xb7\x6d\x17\xed\xc6\x60\xdb\xdc\x1d\xc6\xdf\x9d\xbd\x81\x53\x3f\x1a\x60\xd2\x6a\x6a\x23\xaf\xb9\xda\x8a\xea\xea\x95\xf1\x52\xf3\x91\x6b\x39\x6e\x2e\x37\xfc\xd4\xb0\x25\x7c\x69\x3d\x4f\xf9\x49\x77\x03\x16\x57\xae\xdf\xb8\x85\xa8\x9a\xf6\xd2\x05\xd8\x14\x1e\x7a\xf4\x02\x03\xdc\x6e\xfd\xb5\x9d\xde\x2a\x9a\xde\x1a\x26\x54\xa9\x4c\xd1\xca\xb8\x93\x20\x97\x6c\x9a\xa6\x4a\x81\x96\x88\x92\x19\x21\x17\xcc\xb9\xd9\xb4\x9e\xcb\xc6\x33\x24\x23\x7e\xef\xdd\x4c\x38\xf2\x0e\x0e\x88\x17\x6b\xbd\x8f\x3c\x70\xbf\x68\x09\xf2\x43\x66\xb7\x7b\x93\x36\x2f\x8b\x5b\xa0\xcc\xa8\x60\x4a\x37\x54\x4d\x1a\x59\xab\x2c\xae\xcf\x6e\x3e\x95\x71\xeb\x0e\xc3\xfa\xc5\x20\x47\x42\x6b\xf6\x02\x91\x97\xbd\x71\xc3\xac\x6d\x24\x6c\xd4\x51\xd5\x42\x2e\x69\xa3\xff\x8c\x67\x4b\xba\x67\x4a\x65\xe8\x40\x8c\x16\xb6\x40\xe3\xf8\x73\x58\xd8\x79\x9b\xef\x2f\xa7\xf9\xfe\x92\x39\x1f\xf7\x52\x39\xb7\x64\x3e\x1b\x5d\x31\x11\x14\x06\x63\x4a\x37\xde\xef\xd8\xdc\xa6\xd4\x77\x85\x1e\xad\xbc\x71\x01\x38\x7c\x03\x79\xa1\x69\x9e\xf1\xb8\xa6\x6a\xd2\xec\x40\x29\x67\x3c\x96\xf4\x11\x35\xab\x7f\x33\x5f\xe5\x25\xdd\xcc\xcb\x7c\x45\x02\x1f\x64\xb8\xb2\xf5\x50\x07\xee\x0a\x44\x34\x72\x26\xcd\xc2\x14\xc4\xa9\x3a\x1c\x38\x59\xd2\xd0\xc3\xc1\x7b\x11\x79\x64\xd6\x54\xf4\x9c\xdb\x11\x07\xb2\x78\x14\x19\x79\x8e\x67\xf4\x41\xc6\x23\x7f\xb6\xa3\x6c\xa6\xe9\xba\xd0\x73\xbc\xc9\xbe\xda\xe6\xfa\x80\xe7\x13\x25\x03\x88\x7b\xe1\x3d\xcd\x2a\x8f\x0d\xeb\xfd\xbd\xf2\x81\x8f\x52\x32\x5c\xa2\xef\x35\xc9\xe6\xcc\x07\xa1\x71\x91\xc7\xfa\x31\xd8\x31\x41\xc4\x58\xf9\x1e\x90\x31\xa2\xe7\xad\x1c\x7c\x31\x37\xae\x54\x5c\x72\x7d\xa3\x8f\x18\x94\x3f\x59\x6d\xc1\x72\x69\xb2\xda\x12\x74\x5e\x1f\xba\x6b\xfa\xbe\x9f\x23\x8c\x70\x03\x5d\x0f\x78\x11\xea\x40\xe0\xe8\xae\x5a\x0e\x0c\x37\xd6\x4c\xce\x2b\xfd\x1e\x31\xe7\xae\x22\x14\x7e\xc2\x71\xab\x88\xf7\xd7\xab\x77\x17\x58\xfc\xa1\xcd\x61\x78\xa0\x79\xc4\x74\xb7\x03\x3b\x7d\xd5\x7f\xf5\xe4\xd6\x16\x09\x1e\x7a\xba\xda\x8e\x6a\xdd\xd7\xdc\xc5\x8c\x0c\x87\x73\xac\x8c\x1e\xad\x4e\x19\x54\xf1\x56\x18\x34\x16\xb9\x02\xbd\x5b\xf6\x21\x14\x80\xf8\xf0\xef\x21\x84\xd0\xd7\x31\x2b\xf3\x75\x90\xbd\xe3\x52\x9a\x07\x5a\xc6\xde\x3b\x86\x51\x3a\x06\x4b\x42\x83\x87\x65\xac\xbe\x51\xf5\x1b\x62\x8e\x24\xa8\xdb\xe9\x08\x9f\x50\xe7\x8f\xdd\x76\x5a\xa8\x5d\xe7\x2a\x42\x17\xf1\x15\xaf\x46\x23\xea\x60\xb8\x81\x2d\x1b\x40\x3e\xc7\x7b\x6d\xca\x8c\xd3\x9e\xc9\x6a\x0b\xfa\x6c\x66\x09\xa5\x69\x92\x30\xf6\x20\xc3\x75\x4a\xd2\x34\x1b\xea\x29\xd4\x57\xfc\xea\xda\xab\x40\x6f\x65\x09\x7c\x01\x34\xfe\x46\x5d\x96\xa0\xb2\x2f\x84\xb7\x36\xf3\x8a\x06\xc1\xce\xad\xe7\xf5\x82\x2f\x91\x61\xef\x45\xc4\xe0\xbe\x56\x90\xbb\xac\x6b\xb3\x86\xfb\x15\x10\x7c\xff\xeb\x01\x77\x16\x9a\x00\x0d\x00\xd1\xf0\x65\x62\x5f\xab\x8c\x13\xfa\x52\x79\xd9\xb3\x60\xd5\x1c\x7c\x11\xcf\x06\xa2\xe3\x2f\x5c\x00\x04\x83\x6e\x30\x08\xa4\xeb\x8c\x5b\xfb\x1d\x74\xe3\x11\xc8\xa3\x7b\xb6\xa0\x64\x5c\x1f\xfe\xe0\x4f\x2c\xd8\x59\xbf\xa9\xac\xd4\x87\x3f\xbe\xe8\x3d\x61\x50\x1f\x51\xe6\x88\x73\x66\xe0\xdf\x01\xfb\x1d\xd4\xdd\x57\xe0\xc1\xdb\x78\xf0\x25\xe8\xf5\x8d\x1b\x47\xbe\x84\x6e\xd9\x83\xac\x24\x74\xcd\x44\x56\x7a\x3f\xa5\x74\xc7\x30\xc1\x18\xb3\xa1\x38\x78\xa3\x87\x82\x1b\x1d\xa5\x6c\x4a\x8b\x6c\x4a\x6d\x26\xe2\xb1\xd5\x5c\x41\x14\x45\xe9\x63\x97\xc6\x01\xcc\x9b\x05\x67\x9f\x42\x61\x41\xe3\x19\x19\xc8\x6c\x43\xd1\xb1\x1b\x5d\x13\xba\xd3\xf7\xae\x29\x1a\x9b\x43\x77\x84\x5e\x3b\x7d\x78\xd7\x22\x13\x79\xed\x3d\x2d\xaf\x18\xdb\x68\x7a\x06\x3c\x9a\x9b\x46\xc8\x6c\x45\xd1\x5a\x21\x70\x79\xbc\xda\x92\xd1\x76\x14\x05\xef\xe1\xd0\x5c\x07\x8e\xa8\x6e\x58\x91\xcd\xa2\x86\xde\x44\xb3\xd3\x5f\x80\x9e\x2a\x7a\xb2\xd2\x72\x31\xd5\x33\x8a\x2e\x65\xa2\x7e\x8c\x66\xf4\xc6\xf7\xe4\x93\x7a\xa0\x0b\x1b\x6d\xba\x6d\xb0\xe5\x47\x83\x38\x9a\xd1\x9d\xe9\xdc\xa7\xb4\x4e\xcf\xc9\xb6\xaf\xf0\x35\xee\x87\xdb\xce\xe0\xec\x2e\x67\x9d\x99\xd3\x95\xea\xf5\xd5\xed\xeb\x2d\x39\xde\xb7\x4f\x7e\x72\x57\x41\xe6\xad\x9c\xb2\x8a\x0a\x1a\xd8\xf1\xbc\xe5\xeb\x96\x01\xa0\x0d\x0e\xed\x00\x8d\x3b\x0b\x1b\x65\x1c\xb5\x36\xfa\x0c\x1d\x32\x61\xdd\xad\xca\x34\x6d\x26\xcd\xb6\xa8\xf9\xfa\x85\x68\xd4\xa0\x4e\xd3\xe1\x5e\xd3\xb1\x98\x92\xee\x09\xe5\xe6\xb3\xa2\x7b\x4d\xcd\xc0\x96\x37\x2a\x54\x21\x10\x7c\x40\x23\x4c\x56\xd7\x44\x6d\x6b\xf9\x0e\xe8\x99\x67\x75\x2d\xeb\x2c\x79\xbd\x15\xcd\x99\x55\x63\x3b\x13\xcd\x59\x51\xd6\xbc\x58\xdf\x9e\x89\xea\x6c\xdf\xf0\x09\x9a\x01\xcb\x15\x53\x54\x17\xc0\x38\x2d\x40\xaa\x06\x57\x17\xfd\xc3\x80\x73\xf7\x5b\xe8\xfe\xac\xe2\x58\xb8\xe2\x54\x70\xa3\xd1\xd6\x55\x00\xc5\xdd\x65\xe0\x65\xd0\x62\x88\x3b\x9f\x89\xf3\x3f\xf2\xa7\xa4\x47\x5f\x37\xe4\xf4\xeb\x8c\x21\xca\xbb\x70\xe8\xa2\x6b\x59\xe1\x5b\x49\xff\xd8\x57\x9d\x9f\x5f\xf2\x9d\xda\xb2\xd9\xc3\x29\x06\x95\x45\xa3\x5e\xca\xf5\x6b\x71\x6d\x60\x1e\x75\xc0\x2b\x5e\x42\x40\x90\xe6\xfb\x5d\x14\x6d\x00\x80\x82\xf8\x5a\x5c\x89\x2a\x4e\x83\x41\x3e\xdd\x15\xaf\x78\x5d\x00\xa4\x05\xfc\xbe\x2e\xde\x7f\xe5\x83\xf8\xe1\x10\xc8\xd1\xbf\x8b\x94\x95\xd0\xf3\x81\x7e\xbb\x19\x3b\x57\x25\x73\x20\xbd\xa8\xde\x28\xf9\x57\xdc\x51\x85\x48\x01\x1e\xed\xa9\xfd\x02\xf4\x98\x68\x40\xda\x51\x47\xc1\x8d\x66\x84\xc2\x82\x0f\xa9\x89\x4f\xcb\x77\x44\xe0\xfd\x00\x42\x5d\x58\x04\xa4\x73\x27\xe1\x47\xf1\xfb\x83\x8c\x13\x43\xc3\xa1\x21\xef\x80\x4f\x76\x72\x17\xa9\x4b\x7d\x2b\xda\x5e\x0c\xf8\x64\x2b\x1a\x25\xeb\xdb\x81\x30\x93\x68\x4a\x65\xe8\x59\x5d\xd2\x82\x36\xde\xbe\x0f\x7c\x12\x09\x3b\x51\x0c\x7c\x4d\x07\xb3\xc2\xd4\x44\xc2\x17\x68\x0b\x9a\xaf\x2c\x19\x25\x3e\xc6\xfa\xf6\x9c\x92\x34\x15\xe1\xaa\xb8\x6c\xc6\x40\x42\xce\x23\xf2\xc3\xb4\x0e\xa0\x45\xc1\x12\x2b\x7f\x32\x9d\x92\xc3\x21\xf9\x53\x6f\x99\x04\x1d\x1f\xf6\xbf\xd6\xe6\xd9\xd7\x20\xcd\x96\xfa\xa6\x7c\x60\xbf\x48\x8e\x1f\xee\x02\x1a\xba\x28\x33\x9c\x73\x17\x10\x27\xd5\x07\xe2\x10\x43\x16\x51\xc4\xf8\xd1\xd2\x66\x35\x39\x71\x26\xc2\x4a\xd1\xb5\xd5\x31\x13\x34\x18\x4e\x42\x48\xc1\x1e\x78\x87\xf0\x84\x6a\x72\xcd\xae\x46\x5c\x72\x48\xc2\xb9\x30\xfd\xb2\xd3\x6f\x39\x25\xf1\x8d\x90\xbb\xcc\x78\x99\x99\xf5\x1d\xdc\x7b\x7b\xf6\x20\x13\xd8\x0c\x78\xa0\xee\xd3\x74\x6f\x9a\x7b\x38\x7c\xd0\x23\xd4\xf0\x92\x9a\x14\x54\xb2\x3b\x53\x5e\xbe\x30\x65\x2d\xa9\xdf\x60\xb9\x08\x76\xdb\xd1\xe4\xc2\x9a\x25\x39\x17\xd1\x70\x09\x7f\x2e\x9c\x13\x13\x05\xf2\x92\x8c\x98\x8c\x8b\xe9\xd2\xb5\x24\x4e\x70\x0c\x4b\xae\x75\xfa\x60\x93\x8f\x46\x22\xde\xe3\x34\x5a\x59\x4c\x44\x87\x4d\xe3\x47\x5c\x84\xc7\x0c\x8d\x96\xb2\x68\x9d\x2e\x76\xad\xd1\x02\xec\xcc\x39\x4d\xcc\xd2\x7c\xba\x5e\xf3\x75\x78\x46\x3e\x3f\xbd\xc9\xa8\x64\x55\x9a\x56\xa6\xa8\x41\xcd\xc2\x16\x00\xff\xb9\x5d\x2d\xe8\x7c\xc4\xbd\x89\xbb\x63\xb3\xb8\xf4\x87\xc3\x09\x18\x08\xa6\xfc\x3e\x31\xc7\x16\xec\x22\x71\x38\xc0\x0e\x15\x60\xdc\x12\xbe\x11\x19\xab\xe2\x00\x9d\xa2\xc3\x91\xca\x88\x4e\xd7\x13\x8c\xa8\x53\xfa\xd8\x18\xbb\x11\x08\x9b\x7e\xc1\x3e\x79\xc3\x1f\xc1\xe6\xc7\xad\x5b\xbd\xa0\xe7\x66\xc9\x44\x6b\x6c\x3c\x5b\x32\x95\x7f\x10\x99\x72\x0b\x38\x9e\x7c\x77\x92\xd1\xf6\x48\x4b\x1a\xae\x86\x9a\x56\x69\x3a\x9c\x0d\x75\xd7\x00\xb0\xf3\x27\xbe\x96\x69\xfa\xb5\x7e\xfc\xe2\x39\x19\xcc\xf8\x87\xe8\x0e\x79\x00\x68\xb9\x7e\x30\xc1\xf5\x16\x30\x5f\x41\x59\x5a\xe1\x1a\x0e\xf3\xbf\xe8\xac\x18\xb5\x48\x9a\x5d\x51\x35\xbf\x27\x23\x3e\x11\x6b\xfd\x88\x98\x0e\x38\xbe\x49\x9d\xc4\x80\x5b\x13\xb9\xc0\xc5\xb0\x09\x1b\x21\xad\xae\x9f\x2b\x6e\x35\xe8\x77\xf7\xe4\xba\xa8\xdf\xf2\xf5\x2b\x5d\x76\x9a\x66\x99\x38\x1c\xb2\x6e\x6d\xec\xee\x48\xc8\x42\x2e\x59\x94\x9e\xd0\xd1\x48\x86\x30\x74\x9f\x7b\x9d\xc4\xc8\xc6\xc8\x71\x7d\x0d\x32\x5f\xe0\x51\xb9\x26\x7c\x51\x2f\xb1\xd4\x7a\xc2\xdf\xef\x4a\xb1\x12\xaa\xbc\xfd\x42\x0f\x31\x5f\xcf\x0d\x6b\xd1\xd1\xad\x35\x21\x39\xa0\x11\xe1\x98\x01\xa4\x9f\x3b\xce\x1d\x4f\x07\x71\x27\x73\xee\x9b\xf6\x8f\x68\x46\xfa\x50\x1f\xdb\x7d\x46\x16\x73\x6f\x3f\x2a\x4d\xd7\xa0\x56\x5d\xc4\xd3\x39\x1f\x8d\x04\xa9\xb0\x69\x9f\x8b\xac\x5e\x88\x65\xc0\xdf\x3d\x22\x6e\x49\xc5\x9e\x2a\xa7\xfc\x1c\x54\x00\x3f\x9d\xa5\x69\xdd\xc2\x91\xae\xc3\x2a\xac\x23\x7b\xa3\xbd\xb7\x10\x4b\x23\x83\x2a\x02\x31\x1d\xc2\x5b\x14\x21\xbc\xc5\x9d\x57\x51\x2d\x16\xcd\x92\x96\x6c\x7a\x5e\x86\x08\x18\xa5\x7e\x4c\xc9\x45\x69\x27\x84\xb1\xbd\xf9\x72\xaa\x7c\x67\x7c\x20\xb1\x87\x7b\xf3\x7a\x29\x40\x75\x56\x2c\x59\x11\x18\x57\xb9\x81\xff\xc5\x11\xf6\x3d\xa3\xc7\x7b\x7a\xc5\x6d\x77\x2c\xed\x62\x06\xb4\x9e\xf7\xb2\xec\x11\x8c\x52\x92\x5c\x06\x37\x5a\xc1\xdc\xa5\x47\x1b\xb6\x58\x0e\x2a\xab\x4e\x68\x6e\xae\xe6\xe8\x79\xb1\xa8\xaf\x1b\x0c\xd4\xde\xb2\x51\x8b\xc5\x7e\x49\x57\xc6\xe9\x24\x3e\x22\xb0\x18\x20\x0a\x4b\x73\x07\xcb\xbc\xd4\x0f\x72\xa0\x07\xd1\x66\xfe\xa8\xcf\x23\x67\x8c\xaf\xe9\xfc\x92\x64\x2b\xb6\x99\x5c\x17\x6a\xb5\xcd\x1e\xfe\x0f\x2e\xb4\xec\x5f\xeb\x11\x79\xf0\x50\x93\x28\x2f\x32\x45\x51\xa6\x9f\xad\x16\xb3\x25\x31\x76\x4c\x0f\xb2\x86\x2c\x36\x4b\x30\xb5\xa2\x6b\x5e\x72\xc5\xcf\xf4\xb7\x7e\x8d\xb8\x65\xe5\x71\x64\x45\xe4\xe3\x3c\xb8\x6d\x90\x59\x67\x7c\x70\x18\x95\x3c\x05\x1c\xe9\x8b\xe9\x40\x0e\xf5\x8f\x1a\x7e\xcc\xf5\xe6\xa7\x8a\xd5\x24\xc7\x60\x3d\x73\xc6\xc1\x7e\x4d\x42\x86\xee\xef\x02\x7c\xcb\xb7\x82\xea\xc3\x41\x45\xef\xba\x9f\x5d\x9b\xa8\xb0\x2e\xc0\x04\xe0\x44\xe9\x43\x1e\x3d\x72\x5d\xc7\xce\x46\x0f\x07\x6e\xac\x70\x08\xa1\x3f\x82\xb2\xbf\x61\x0e\xff\xdb\xd0\x22\x56\xfc\x95\x11\x28\x5a\x00\x9f\x38\x62\x7d\xfe\x76\x6a\xd5\x7d\x4a\xad\xce\xef\x7b\x97\x47\x2a\x47\x23\x52\xe9\x83\xd0\x35\xc5\x30\x49\xe5\x92\x02\xe7\x1e\x51\x51\xc9\x00\xda\x6d\x79\xa0\x55\x87\x07\x1a\xb1\xc2\xbf\xea\xa1\x0f\x82\xaa\xcd\xd1\x47\x06\x62\xa1\x96\xac\xa6\x51\xd1\xa2\x5b\x74\x38\x0e\xdf\x04\x45\x43\xbe\x67\xc8\x87\x8f\x12\x3d\x68\x0b\x42\xdc\xdd\xac\xaf\x35\x2a\xd8\x83\xac\x22\x03\xa1\x09\x0b\x4b\xc4\x56\x8b\x2a\xbc\x60\xe9\xaf\xb6\x08\x92\xff\x68\x3f\x03\x70\x1a\x57\x81\x4b\x47\x9f\x23\xb0\x82\xa6\x2c\xfd\x9d\x8f\xce\xd9\xc4\x3a\xff\xae\xf8\x2e\x2a\xe1\x57\xcf\x1e\xb8\x42\x97\xb9\xc0\x76\x7c\x15\x83\xd9\x25\x04\x79\x95\x69\xaa\x13\xe9\xe1\x39\x95\x8e\xc0\x8a\xee\x37\xe8\xbc\xc3\x4e\xe6\xca\xf4\xd6\xe0\x1b\xe7\x21\x2a\x76\x28\xac\x5d\x2c\xdb\x72\xaf\x08\xf6\x37\x12\x73\x59\x31\x61\x03\x57\x80\xbe\xf9\xac\x78\xd0\x87\xa0\x58\xf0\x48\x91\x26\xcc\x81\x70\xc0\x6f\xf7\xb8\xbc\xbe\x67\x0c\x28\x5c\xf2\x38\x0c\xd7\xf7\x0f\x03\xc5\xd5\x49\xa8\xa5\xea\x86\xcc\x76\x7a\xee\xd6\xae\x1d\x85\x16\xe5\x37\x9e\x91\x5c\x1d\xed\xac\x1b\x73\x1d\x68\xeb\x1b\x51\x34\xfa\xd6\xd6\x2f\x12\xb7\x51\x51\x40\xd0\xda\xbd\xd8\xd5\x8b\xe9\x7c\x3c\xcb\x67\x64\xf0\x4f\x58\x12\xd2\x28\x0f\x03\x06\x55\xad\x69\x2e\xc6\x9c\x0b\x82\xc3\xc1\xb0\xa4\x5f\x76\xb0\x06\xff\x69\x6e\x78\xe5\x68\x2b\x5d\x19\x41\xb7\xcb\xbc\x04\xf6\xb1\xdf\xfb\xb8\xd2\x02\x84\x43\x36\xa3\x41\x44\x1b\x25\x91\x0d\xa7\xf4\x16\x07\x93\x38\x86\x6f\x84\x8e\x9c\xc4\x28\x3a\x7f\x07\x52\xc8\xf7\x08\x57\x3a\x72\x8f\x66\x61\x42\xd3\x5f\x64\x97\xdb\x2b\x9f\x5a\x10\xe1\xee\xe9\x63\xc5\x84\xc1\xc1\xd3\x30\xd5\x26\xd3\x7b\xce\x2e\xc0\x00\x8a\x0e\xac\x3d\xab\x75\xe5\x85\x95\xe5\x34\x69\x6a\x85\xa6\xd0\x1e\x5a\xda\x04\x30\x79\x10\x0d\x5f\x3a\xf2\x5c\x93\x8a\xfb\x21\xb3\xb9\x01\x54\x06\x53\x02\x0e\x20\xd2\x91\xad\x33\x8c\x4a\x42\xa8\xd0\xe7\xa7\xd9\x07\x7b\x5a\x7a\x91\x91\x98\xfb\x53\x4d\x05\x27\x5a\x1e\xe8\x45\x29\x19\xde\x27\x78\x95\xfd\x86\x4c\x18\x60\x78\x23\xe5\x10\x12\xa9\x31\xc3\x30\x8a\xeb\xe1\x1a\x46\xf1\x8b\x42\x0f\x52\x63\x48\x20\x5a\xb2\x04\xd7\xc5\xb7\x7c\xa3\x12\x51\x9d\xed\xe7\xc3\xfd\xc4\x07\xe5\xfb\x89\xa8\x56\xe5\xbe\x11\x37\x1c\x14\x69\x56\x36\x03\xe8\x98\xb6\x72\x40\x58\x98\xe5\x27\xab\x81\x65\x14\x76\x50\xfa\x7a\x38\x64\xe5\x1c\x3f\x2f\xe0\xc1\x66\xa4\xb2\x17\xfa\x1b\xce\x31\x9b\x5a\xc9\xc3\x21\x5b\xcd\xf5\xc7\xa5\x4d\xa9\xe4\x25\xa6\x03\x8a\x40\xa0\xc7\xf1\xbd\x3d\x0f\x10\x5a\xf2\x59\x05\x96\xd3\x74\xdf\x25\xbf\x31\x5b\x3c\x9e\x77\xe3\x71\x31\xb0\xd4\xe0\x11\x11\xe2\x34\xe9\xba\x9f\x14\x4a\x5e\x8b\x95\x37\xfa\xf0\xe4\xc6\x86\xed\x27\x1b\x51\xad\xb3\xea\x62\x3a\x9f\xe5\xe3\x19\xa1\xdb\x80\xac\x82\xe0\x55\x5e\x02\x54\x09\xab\xf4\x14\x6f\xe8\xb8\xa2\x9b\x34\xdd\xc4\x12\x41\x09\x84\x3d\x21\xdd\xa8\x34\xcd\xb6\x9a\x60\xd9\xe8\xe3\x48\x8f\xca\xc5\x74\xbe\xbd\x98\xe6\xdb\xcb\xa9\x03\x3c\x50\x58\x32\x9a\x26\x1c\xd1\xe0\x3c\x68\x18\x9e\x42\x98\x16\x02\xca\x7c\x45\xc0\x9a\x1c\x9a\xb4\xa6\x15\x5d\x9f\x68\xce\x7a\xae\x30\x09\x96\x8d\xc2\x2d\x67\xd2\xe2\x97\x6f\xdd\xb3\x7c\xab\xc3\x61\x46\x0b\xe6\x56\xb6\xa4\x82\x1c\x0e\x43\x91\xa6\x41\xd0\x70\xaa\x5f\x8a\xf6\xf7\xb8\x27\xcd\x18\x12\xd9\x1b\xa2\x80\x73\x6f\x55\x54\xea\xd9\x5a\x28\x7d\x7c\xa1\xa4\x1c\xde\x87\x91\x9f\xce\x2a\x38\x80\x2c\xf9\xae\x29\x3e\x90\x0b\xae\xb6\x73\xec\xea\xa5\xc9\x3b\x87\x7b\xca\x21\x38\x8e\x67\x04\x3b\x9b\xd7\x97\x53\xfd\x2c\x5b\x6d\x19\xcb\xaa\xc3\x21\xdc\x93\x24\x92\xb7\x63\xe0\x45\xfc\x2e\x1d\xcf\x3c\x2a\xe4\x68\x46\xa7\xa6\x50\x7d\x4a\xb4\xd0\x22\x43\xaa\x40\x48\x23\x86\x0d\x8d\xc6\x7d\x3f\x11\xd8\x49\x93\x86\x10\x16\xf8\x9d\xa6\xbf\x84\xd6\xa9\xb2\x75\xff\xaf\x8a\x6a\xc5\x4b\xf4\x6d\x80\x8e\x6f\x1d\xa5\xaf\x1c\xa5\x6f\xa4\x6f\xe6\x92\x76\xcc\x20\xcc\x9b\x77\xf5\xb2\xaa\x89\x2d\x96\x0d\xa7\x47\x77\x93\x23\xd6\x49\xdb\xe5\x09\x50\xb5\x54\x92\x3b\x04\x5d\xd1\xb5\x33\x24\x10\xf0\x4e\xcc\xaa\x89\x92\x18\x52\xeb\x13\x15\x43\xf8\x7b\xc5\x04\xea\x29\x9e\x4d\x87\xc8\x29\xb2\xac\x25\x26\xc9\x91\xd0\x90\x6e\xf8\x38\xb9\xd0\xa5\x12\x6c\x17\xe6\xd9\xfd\x77\xe9\x23\x94\xb7\x92\xdc\xb0\xcf\xdd\xf8\x55\x6e\xfc\xaa\x68\xfc\x6c\x33\x43\x4b\x5e\x37\x2d\x08\x3b\x78\x6d\xad\x1d\x6d\x8d\x76\x57\xff\x8a\xa4\x00\x2d\x24\x31\x39\x06\x26\x87\x11\x90\x37\xfb\xdd\xae\xe6\x4d\xa3\x77\x82\x55\x6c\x83\x23\x2b\xa2\x25\x3f\x42\x42\x3a\xca\x11\x18\x12\x66\xcd\x68\x1a\xc5\xc1\xa2\x28\xd4\x4c\xed\x27\x2a\xad\x89\x9d\x61\xd9\x98\x15\x5d\xdb\x05\xdf\x81\x78\xe9\xbb\xc1\xac\x87\x84\xde\x1b\x2c\x00\xb4\x0a\x6f\x30\x65\x9f\xf2\x83\x61\x3d\xa9\x79\xb1\xfe\xbe\x2a\x6f\x0f\x87\x2a\x4d\xc7\xb3\x21\x7b\x91\x55\xb4\xd6\x3d\xaa\xf4\xff\x6c\xb1\x24\xc4\x32\x54\x8f\x47\x42\x3d\x3b\x22\x62\x7f\x08\xb6\x08\x1c\x42\xd7\xc7\xa5\x21\x57\x2a\xdf\x1a\x19\x5c\xbb\x15\xd2\x28\x05\x1e\xb4\x53\x42\xf1\xc1\x2d\x7a\x1e\xdc\x62\xb1\x5f\x1a\xb8\x41\x95\xc1\xab\xba\xb1\x1a\x37\x87\x03\x04\xc1\x42\x02\x68\x51\x7d\xae\x1b\xdf\xe5\x8b\x3d\x9d\x2d\xe9\x86\x85\x29\x50\x5a\xb3\x65\xbe\x20\x25\xc9\x79\xb6\xd1\x25\x0d\x8b\xf8\xa2\x4e\xd3\xe1\x86\xa4\xe9\xaa\xff\x75\x8f\x65\x1d\x09\xcd\xb6\x97\xad\xcc\x3f\xa1\x4e\xc0\x70\xdb\xce\xdd\xc0\x3a\x47\xce\xc0\x91\x50\x61\xb4\xa5\x8c\x3e\xbc\xa0\x2b\x42\xf7\x23\xb6\xb2\xb4\xf4\xe3\x63\x00\xb2\x1a\x0b\x94\x40\xd9\x8b\xf8\xa1\xf7\xef\xae\x73\x71\xc9\xa6\xe7\xe3\xb1\x20\x8d\x5e\x8d\x66\xab\x2d\xc4\xd2\xef\x36\xfd\xc3\x6e\x38\x31\x5f\x24\xc9\xf2\xc4\xb9\x75\x34\xb2\x7b\x28\x49\x85\x12\x22\x13\xa2\x57\xe5\x6c\xc8\x22\x76\xd7\xe1\x90\x24\x36\x68\x31\x5d\x1e\x0e\xd3\x61\x5b\x36\x61\x17\xa5\x51\x45\x1a\x38\x79\x53\xff\x9b\x8f\xd0\x95\xbd\x8d\x0c\x93\xcc\xbe\x2c\x16\xcb\x41\x4b\x62\x06\x6a\x43\x87\x83\x5d\xc6\xee\xd1\xaa\x97\xf3\xb5\xcc\x3c\x8b\x5d\xe9\x93\x0b\xd9\x85\x2e\x8d\xab\x08\x28\x72\x5b\xd7\x31\xec\xf8\x5e\xb6\x5f\xc5\x2b\x00\x67\xe8\x3f\x56\x90\x7b\x77\x38\xd4\x31\x15\xef\x5b\x51\x20\x4d\x4e\x1b\x96\xec\xab\xb5\x4c\x18\x53\x73\x09\x0f\xec\x5c\x1a\x06\x32\xdd\x47\x71\x18\x98\x63\x22\xc3\xab\xf3\xc4\x7c\x26\x58\xb3\x28\x97\xb4\x9e\x0f\x45\x20\x22\x89\xde\x3e\xb9\x8d\x21\xe7\xe5\x68\x44\xce\xc5\x26\x2b\x87\xcc\x69\xe5\x42\x4b\x65\x28\x2c\x90\x3d\x12\xd4\x73\x23\x4e\xd4\x15\xa2\xd4\xca\x49\x15\x91\xcb\x64\x56\x2e\x5c\x3b\x86\x41\x26\xc8\xc0\x11\x86\x1f\x44\x26\xe8\x1e\x9f\x72\xad\xf6\x45\x59\x81\x49\x20\xe8\x9d\x63\xae\xe7\xc3\xd9\x91\x0c\x0a\x26\x8e\x66\x97\x2f\x07\x1f\x44\x56\xe8\xb2\xf6\x2d\x76\xde\x2a\x14\x40\xc9\x50\x00\x05\xb6\x71\x5e\x30\x14\x4a\x89\x0e\x87\xd1\x48\xc6\x62\xa2\x00\x41\xf3\xbf\xb8\x1a\x68\x60\x22\xe3\x96\x8d\xb0\x8c\x48\xa3\xe4\xea\x2e\x64\xa5\x69\xd8\x21\x5c\x24\x15\xbc\x09\xcd\x60\xb8\x47\xdc\x94\xde\x1d\x07\xab\x40\x68\x67\x81\x93\x25\xab\xe7\xdf\x63\x40\xfe\x20\x6b\xc8\x60\x85\x85\x48\xfa\x0f\x93\x8c\x0e\x6b\x5c\xaa\x76\xc1\xc6\x08\xe2\xed\x5b\xf9\xbd\xc8\x2a\x72\xc4\xc2\x8b\xbe\xad\x86\x3a\xbe\xb8\xd5\x8a\x7b\xb6\x5a\x45\x68\x71\x62\xab\xa1\xab\x34\xd7\xc2\x23\x39\xd2\xb5\x1f\x1c\x7f\xa8\xad\xf1\x50\x5b\x13\x83\x9f\xb4\xcd\xd6\x70\x06\xba\xeb\x7e\x37\xb9\x39\x86\x58\xb8\xa5\x3f\xa0\xa6\xd6\x4d\x39\x92\x96\xa8\x31\xc6\x4b\x66\xf8\x87\x3f\x46\x2c\xbb\x3e\xe1\xbb\xd5\x3e\x55\x0e\x56\xc8\x68\x6e\x3a\x64\x21\xab\x69\xc9\xe1\xa5\xeb\x63\xe1\x97\x7e\x68\x1d\x49\x97\x23\x87\x6c\x83\xbb\xd2\x10\x2a\x96\x0c\x37\x7f\xc7\x2a\x74\x1b\x59\xb3\x90\x37\x09\xd8\xfe\xd6\x74\x10\x0c\xd1\xd1\x78\x10\x94\x35\x57\x95\x65\x2f\x3a\xf8\xab\x60\x5c\x56\x32\xe2\x06\xe3\x6a\xb8\x87\x7c\x5a\x59\xf2\x89\x56\xc4\x7a\x0a\x88\x48\x75\x82\x23\x1d\x6b\xd8\x9e\x52\x63\xf5\xba\x60\xc3\x2c\x08\xbf\x8c\xc8\x70\xa3\x34\xe3\x5d\xe0\xd8\x9a\x9c\x7c\xb2\x55\x97\x1b\xb1\xa0\xa6\x01\x34\x4b\x10\xaa\x8c\xb2\x46\xf4\xd0\xd1\xcb\x1b\x5e\x10\x56\x85\x42\x50\xa7\x30\x0b\xd7\xe2\xc2\xe9\x3b\x2e\x3b\x97\xe2\xd1\x48\x24\x82\x36\x0f\x5c\x49\x97\xe0\xd2\xc4\xd4\xe9\x5f\x08\x5c\x65\x92\xc2\xeb\x47\x46\xef\x1e\x5b\x9d\xbb\x2e\xbb\xd5\x79\x80\xaa\x35\xeb\x28\x96\x50\x44\xe2\x37\x17\x29\xae\xa9\xf9\x49\x44\x3a\xb9\x02\x5e\xb7\x5d\x45\xd2\x2a\x0f\x16\xa8\x3c\x08\x06\x94\x7b\x63\x68\x39\x38\xa5\x5c\x94\xed\xd9\x8f\x3c\x7b\x0e\x38\x8a\x95\x31\xdc\x44\xe8\x45\xa0\x61\xf7\xb4\x38\x45\xbe\x32\x26\xac\x05\xa5\x3b\xd6\x18\x78\xbf\x38\x12\x32\xa8\x60\x7f\x58\x5b\x82\x88\x5e\x00\xb1\xc7\x2d\xcf\x38\x19\x7c\x21\xb2\x0a\x1f\xbf\xe8\xd3\xf4\x64\x2b\x5d\x73\x64\x8f\x9a\x35\xed\x3a\xbf\xfa\xb7\x02\x78\xf2\x4b\x11\x9b\x7d\x82\x58\xdd\xda\x85\x72\xda\x8a\x65\xca\x87\x04\x3c\x41\x3d\x90\x7a\xcb\xa3\xc2\x69\xf8\x10\x32\x2e\xa4\x00\x4a\xff\x3c\xeb\xb8\xf8\xe0\x7d\xe8\xc0\x20\xae\x8d\xd0\x81\x15\xa1\xc3\x8c\xf7\x20\x7c\xab\xf1\x4c\xd3\xbf\xe1\xa9\x81\x4b\xbe\x62\x6a\x3c\x3b\xaf\x2e\xeb\xf3\x6a\x3c\xb6\x1b\x09\xd6\x63\x45\x02\x7d\x59\x63\xe9\xa7\xaf\xf5\x33\x51\x35\x4a\x3f\xec\xe4\xe6\xac\x54\xe4\x70\xa8\x46\x62\x52\x4a\xf9\xf6\xa9\x3e\xd4\x2e\x14\x21\x77\x35\xab\x46\x33\x73\xa5\x1f\x7b\x9a\x13\xb6\xbf\x13\x49\xe1\x31\xe1\x57\x90\x47\x29\x33\xb6\xfa\x2d\xbd\x78\x5c\x55\x63\x69\xf5\xe1\x07\xa8\x99\x3a\x07\x4d\xb6\x1c\x83\x87\x0c\x53\x1d\x0e\x5d\xa2\xf4\xa5\xc8\x2c\x72\x31\xe4\x31\xf5\xfa\xd5\x5a\x92\x7c\x15\x84\x1b\xe8\x64\x03\xb6\x89\xf7\xbe\x05\xe3\x27\x74\x13\x85\xa0\x0f\x81\xcd\xe1\xb0\xb2\x28\x88\xb8\xff\x81\xd8\x2f\x22\xce\x80\xd9\xc9\xb9\xdb\xd3\x9d\xfd\x3e\xd8\xa4\x69\x5b\x27\x72\x4b\xe8\x2a\x58\x4b\xde\x0f\x00\xf2\x73\x5a\x81\xc1\x8b\x6d\x4b\x8e\x01\x50\x55\xaf\xa5\xf1\x11\x0f\x7a\xa5\xe9\x06\xa3\xa5\x5d\x11\x14\xdd\xd4\xf4\x17\x38\x52\x0c\xbf\x28\x4d\x81\x51\xd5\xc3\x4a\x41\x40\x40\xcf\x57\x9a\x85\x57\xce\xa6\xcb\xdd\x1a\xe0\xcb\xb2\x26\x54\x29\x78\x6c\x82\x30\xb1\x66\x99\x64\x8b\x8a\xd6\x4b\xb2\x98\x2e\x69\xc5\xe4\x62\xb6\x24\xd4\xe2\xcf\x30\x8b\x3f\xa3\x8c\xb1\xae\x7e\x3d\x41\x1b\x9a\x4c\x9f\x7d\x85\x7f\xef\xd4\xf0\xce\x31\x03\x6f\x47\x58\x84\x4a\x09\xdb\x90\xbf\x75\xc1\x8d\x65\x01\xae\x05\x56\xe5\xca\x04\x39\x24\x15\x14\x14\x6c\x59\xa8\xe3\xb9\xeb\x63\xd2\xdf\x2b\xc1\xa6\x05\x43\xdb\x39\x27\xc6\xbe\x93\x93\x95\xdc\x09\xbe\x3e\x1c\xb2\x0c\x13\x31\xe9\xc4\xd8\x9a\xaa\xc6\x68\x7d\x62\x0c\xda\x3e\x2a\x62\x39\x40\x33\x1a\x91\xad\x74\x45\x2f\x9a\xa5\x33\xc7\x40\xc6\x7d\x2b\x12\x8d\x33\x20\x0a\xa1\x29\x63\xd1\xb7\x6c\x51\x61\xe1\x8b\xdc\xc5\x99\x97\x79\x7d\x51\x06\x77\x2f\x7e\x33\x6e\xdf\xdd\x38\xaa\x15\x2d\xad\x79\x01\xa1\xfa\x05\x8c\x09\xec\x0d\x5c\x41\x98\x8e\x74\x34\x82\xba\x60\x2e\x9e\xdc\x15\x6c\xe8\x0e\x1b\xe4\x63\x1a\x5b\xa3\x29\x05\x93\x4c\xa1\xe7\x26\x58\x76\xd7\x32\xd2\xe3\x08\x34\x27\x2b\x6f\x35\x43\xdb\xe4\x44\x56\x8d\x6b\x7d\xba\xe8\xb9\xc5\x27\x16\xae\x5b\x0a\x01\xe6\x45\x86\x41\xbe\xaa\x1b\xd9\x51\xcc\xd1\x97\xab\xd5\x9e\x42\x64\x9e\x60\xfd\xce\x8d\x74\xa2\x30\x2f\xcc\x5c\xe8\x2b\x55\x59\xb3\x73\x31\x07\x36\x67\x56\x65\x92\x0a\x62\x49\x76\x4b\xd7\x09\x5a\x13\x1a\xe2\xe8\xdd\x4a\xa7\x6c\x0b\xe8\x25\xce\x4e\x14\x8c\xae\x63\xe0\x22\xc5\xa6\x27\xb5\x6d\x4c\x7a\x70\x37\xa1\x46\x8c\xa3\xd4\x11\xc4\x0f\xc6\x54\x0e\x61\xe7\x02\x73\x74\x5f\xf3\x6a\x2b\xca\x75\xcd\x2b\xc6\xdb\x75\x39\xdb\xa2\x2e\x58\x12\x5f\x54\xcb\x81\x1a\x01\xc1\xbf\xaf\xde\xbe\x12\x1f\xf4\x71\x52\xeb\x00\x63\xcb\x2c\xc2\x56\x1d\xa1\xa6\x46\x7c\xe0\x16\x98\xde\xc2\x67\x76\x3a\x7c\xfc\x3d\x42\x2a\xd0\xcb\xb1\xcb\x7c\x95\xc6\xf6\xd2\xee\x12\x6b\x0f\x48\x8e\x34\xca\xae\x64\x4f\x66\xf1\x89\x99\xc1\x8c\xee\x94\x45\xae\x7b\x2d\xa0\x79\x6d\xf8\xba\x30\x48\x0c\xe6\x05\x11\xc7\xaf\xb6\x47\x7a\x2b\x7d\x25\xec\xce\x8d\x5f\x0f\x8f\xd9\xaf\x0c\x33\x05\x47\x73\x0b\x01\xb8\x46\x1e\x13\x21\x01\xe9\x40\x2b\xc6\x47\xea\xbc\xbe\xa8\x60\x8d\xd8\x95\xed\x4a\x03\xb3\x47\x3f\x0b\x63\x3f\x6b\x5f\xa9\x4c\x80\x3c\x54\xd0\x04\xf5\x53\x12\x72\x0c\x9a\x61\x36\x2e\xba\x53\xb6\x58\xac\x79\x6c\x44\xa5\xaf\x2f\xe7\x20\xc6\xe7\x25\x47\x8a\x36\x04\xdd\xc6\x6b\x52\x37\x68\xcf\xc8\x2e\x0b\xdc\x14\x61\xf5\xe6\xd8\xe0\x0e\xd8\x5c\xf9\xaf\x76\x32\xfd\x68\x39\xe1\x1d\x56\xaf\x64\xb5\xa8\xa2\x9d\x73\xa4\x9a\xec\xfc\xae\xd3\x30\x5f\x84\x1e\x53\x0e\x63\xca\x89\x3e\x3a\x83\x2a\x17\x7c\xe9\xad\x6d\x8f\x47\x7a\xf5\x9f\xcd\x31\xe0\x05\xdf\x33\xb7\x2e\xd1\x98\xa9\x3e\xa3\x5c\xbb\x87\xc3\x93\x21\x34\xcb\xb5\xf1\x8b\x7a\x09\xa8\x13\xc1\xa6\x05\x26\xf6\x85\xbb\xeb\xbc\x73\x16\x2a\xc6\x9c\xd0\x82\x55\xf6\x28\x01\x66\x47\xd0\x46\x78\x12\xd1\x68\x1d\x15\xe3\xca\xed\x7f\x94\x57\xc4\xcd\x33\xcb\xa7\x1e\x8f\xe9\x0c\xb8\x78\x7e\xdf\x83\x26\x74\xa6\xc6\x4c\x12\xab\xdd\xce\xa6\xa8\x90\xc6\xc7\x4c\x1c\xad\xb7\x20\x18\x05\x75\xf1\xe8\x49\xa7\x70\xab\xb3\x7d\x38\x0c\xe3\x98\xc5\x74\x19\x90\xc4\xb7\xd2\xf2\xf8\x41\xd5\x03\x53\x5a\x54\xe1\xc6\x74\xc8\x1d\x8a\x60\xc0\x7a\x2b\xb3\x86\x2c\x69\xbb\xd0\x68\xf5\x9c\xd8\x0e\x3d\x06\xf2\xdd\xc9\x52\x24\x2e\x5a\x2d\x7d\x8b\xf8\xa7\xec\x1b\x3d\x28\x23\xe6\xde\x48\xf1\x5e\x6a\x6f\x82\xfe\x36\x54\xd1\x31\xe1\x9a\x62\x31\xf1\xda\x0b\xc6\x60\x02\x8a\x49\xd0\x36\xab\x0a\x84\x90\x36\x0d\x28\x2e\x07\x87\xd7\xe5\x93\xa9\x1f\x8f\x82\xc5\x91\xff\xeb\xd1\x93\xd1\xa3\x27\xb4\x61\xc5\x79\x73\x11\x47\x9d\x5b\x13\x1f\x33\x15\x22\xda\xe5\x0d\x6d\x46\xec\xd1\x13\x42\x06\xc2\x2d\xc3\xbd\x5d\x84\xbd\xab\x6f\x34\xaa\xe8\xd4\x70\x1d\x83\x09\x34\xc5\x32\xd1\x3a\x6b\x0a\xb3\x24\xc0\x87\xd9\xab\x9d\x28\xcb\x8c\x18\x31\x39\x1f\x33\x79\x3c\x52\x1f\x93\xc7\x68\x19\xc3\xde\x15\x7a\xc1\x66\x56\xd4\x81\x96\x32\x83\xb5\x34\x4f\x59\xdd\x43\x7d\x35\x77\xda\xcc\xdb\x85\x8c\x9f\xd0\x27\xc4\x08\xc6\xb0\x17\x20\x38\xc5\x23\xc2\xfa\x53\xb2\xe3\x61\xdd\x34\x1b\xf3\xe5\x17\x2e\x8f\x2b\x95\x72\x70\x7f\x1a\x07\xba\xed\x3a\x9a\xd1\xa9\x3e\xf1\x9d\x3e\x66\xd5\x6d\x29\x19\xb8\xed\x8c\xe6\xbd\x6e\x03\x51\xb5\xa4\x9c\x55\x47\xe5\xe2\xcd\x87\x71\x33\xde\xe9\xdb\xe5\x6c\x1a\xb4\x26\x1a\xf7\x8f\x1f\xd2\xff\xfb\x96\xb8\xb4\xba\x39\xc1\x99\x28\xc7\xa8\x92\x22\x80\x47\xf1\x9d\xa6\x04\x69\x4d\x22\x70\x0d\x73\x8c\x15\x7d\xc7\x98\x3c\x1e\x11\xe0\xe0\x8d\xec\x28\xab\x81\x76\x85\xeb\xc7\x99\xa8\xce\x6a\x52\x4f\xb6\x45\xf3\xfd\xbb\xea\x87\x5a\xee\x78\xad\x6e\xb3\x8a\x98\x63\x6f\x51\x2d\x01\xb1\x92\x0c\x8c\xad\xd6\xca\x12\x8f\x80\xc1\x13\xe2\x22\xfc\xee\x04\x1f\xbf\xe8\xfb\xf2\x22\x73\x66\xc5\xf6\x01\x1a\x39\xb7\x8e\xe0\x6d\x48\x9a\xbe\x46\xd9\xcc\xf1\x8d\x0c\x81\x23\x4a\x5e\xd4\xac\xe5\x3f\xcd\xd8\x7d\xe9\x02\xf4\xb3\xd4\x5f\xdc\x93\x77\x08\xf3\x45\x6b\x1f\x46\x2b\x4d\x39\xa3\x6c\x17\x6d\x79\xab\x34\x55\xed\xe7\x58\xa4\x89\xad\xf4\x13\x0b\x4a\x00\x8f\xe6\xb8\x38\x05\xdc\x25\x03\xcf\x2e\xc8\x6a\x5b\x9d\x81\xf3\xc1\x8b\xed\xf7\xda\x38\x90\x7b\xc0\xb3\x9a\x46\xbe\x97\xcd\x36\x91\x04\x01\xe1\xda\xfe\x9a\x7e\x47\x5b\xe6\xb1\x24\x14\xd8\x0c\x15\x4d\xb0\x82\x04\x38\x45\xf0\xe0\x07\x16\x16\x04\x1a\x4d\x1b\xb0\x87\xd4\xf4\x78\x45\xf4\xaa\x8d\x07\xcf\xf0\x9b\x7a\x87\xcf\x8e\x9b\x39\xc1\xea\x68\x4c\x2b\x3f\x7e\x11\x65\xef\x3c\x7f\x08\xd7\xcf\xb1\x1a\x88\x34\xcd\x3e\x37\x84\x11\xd8\x3d\x92\xc3\xe1\x01\xcf\x2a\x6a\x2f\xe9\x91\x00\x31\xce\x8f\x55\x56\x87\x1d\xae\xcd\xb2\x08\x5c\x82\xb3\xe1\x94\xfe\x2e\x33\xf3\xa2\x6a\xea\xac\x8e\xfa\x8c\x1d\x4a\x68\x4d\x39\xfd\x91\x67\x20\x0f\x20\x47\xfa\x86\x67\x6f\x24\x4e\xc0\x3b\xc9\xa6\xf4\x59\xdb\x70\x2b\xa0\xf2\xac\x65\x21\x50\x4c\xe6\xe4\x0e\x56\xb5\x58\xb3\xd1\xe8\x9d\x0c\x96\xf5\xfb\x88\x39\x81\x10\x1a\x95\xb1\x00\x25\x6d\x07\x7f\x41\xca\xac\x62\xdf\xea\x16\x9a\xa4\xcc\x40\x2a\x4b\xb6\x88\x4a\xd4\x2f\x7e\xb9\x98\x2e\x69\xc3\x2a\xb3\xa0\xbe\x93\x6b\x6e\xf5\x3c\x3a\xe6\x7e\xe8\x19\xce\x27\x64\xcd\x64\x55\xca\x8a\x83\x9f\x09\xd0\x7d\x34\x6a\xf6\x50\x8b\x51\xfe\xa0\x46\xe5\x03\x6a\x6c\x6b\xb0\xf3\x8e\x2d\xec\x9e\xc0\x79\x6f\xec\x60\xf7\xcb\x89\x68\x7e\xc0\xb3\x1f\x5b\x35\x00\xdb\x32\xbd\x2a\xf5\xf1\xfc\x4a\x66\x92\xa2\xe3\x09\xdb\xa9\xc1\xa7\x08\x0e\xde\x7b\xc1\x81\xce\x62\x94\x9a\xf8\xbb\xb3\x67\x86\x31\x5f\x58\x45\x72\x03\x5c\xf2\x6d\x56\x51\x49\x87\x33\x42\x8b\xcb\xe9\xe1\x30\x65\xac\x30\xa6\x35\x12\x0f\x8a\x5f\xb6\xbc\x7a\xa6\x5f\x53\x0e\xd9\xcb\x70\x52\xf8\xae\x2c\x56\x7c\xfd\x8b\x00\x76\xad\x74\x54\x0f\xf0\x62\x65\x38\x9a\x5f\x64\x60\xcd\x01\xa8\x92\x61\xb6\x18\xb6\xd2\xee\x4b\xbd\xc2\x8b\x6a\x5d\xf2\x97\x72\xdf\x70\x30\x35\x6a\x0e\x87\xb0\xc0\x2e\xe6\xab\xb8\xaa\x64\xcd\xc7\x88\x68\xe7\x51\x5f\x2b\x43\xe1\x18\xff\xab\x51\x19\x3e\x86\x99\x19\x76\x1d\x80\x15\xf9\xad\x72\x4a\x53\xc8\xf9\x06\xeb\x20\xe4\x77\xda\xb7\x22\xa4\xa9\xc3\x34\x5d\x8b\xe3\xaf\xa1\x1e\x51\x5d\x9d\xb9\xf2\xcf\x50\x0b\xe4\x6c\x57\xd4\x4a\x14\x65\x79\x7b\x26\x6f\x78\x5d\x22\x13\xfd\xac\xa8\xce\xf8\x7b\xd1\x40\x16\x44\x51\x7d\xa6\x9b\x78\x94\x93\x62\xbd\x7e\x2d\x5f\xa0\x28\x2f\x4d\x41\x7c\x1f\xea\x7e\x58\x8e\x5b\xa2\x8b\x7f\xcd\xdf\xab\xe4\x68\x54\x5d\xbf\x2b\xbe\x33\x60\xe9\x80\x58\x00\xed\x2d\xd1\x3f\xbc\x57\x83\xd9\xf7\x6b\xc0\x94\x69\x1a\x0c\x4d\x9a\x0e\xcb\x13\x1e\x28\x9e\xab\x8c\x13\xc6\xca\xb6\x07\xf7\x34\xcd\x1a\x00\xec\x8c\x8a\xd9\x0f\x9d\xae\x20\xa0\x38\x4c\x49\x4b\xc6\x19\xa9\xce\xc4\x8a\x34\xf3\x58\xed\xc6\xbc\x21\x17\x6a\x49\xf2\x85\x5a\x52\x65\x2d\x98\x0a\xa5\x8a\xd5\x16\xd8\xa5\x1c\xb6\x92\x9e\x96\xf7\x2a\x93\x74\xef\xb4\x06\x41\x37\xd3\x78\x8b\x34\xf3\x3a\xaf\x6d\x18\x21\x74\x34\xda\x1f\x5b\x4d\xff\x98\xda\x90\x22\x77\x9f\x2b\x83\xeb\xf8\x80\x67\x8a\x4e\x09\x16\xa1\xb7\xd3\xf7\x15\xa8\x78\xa6\xe9\x96\x67\xb2\x4f\xf7\x93\xf6\x70\x4c\x30\x6b\x86\xc5\x58\xc5\xa1\x34\xcd\xde\x81\x32\x61\x16\xdb\x08\xb8\xcb\xd4\x07\x47\xb6\xc3\xc8\xda\xd2\x05\x9a\xa5\x94\x91\x56\x07\x33\x69\x8f\x6c\x2a\x8d\x22\x29\x4c\x60\x09\x1b\x43\x1f\x96\xe5\x29\xf1\x4a\xb4\x8d\xca\x2a\x2b\x69\x6b\x98\x3c\x9f\x31\xc0\x2f\xd7\xdb\x1b\x3c\xec\xbf\x52\xb7\x25\xfc\xe2\xd5\xda\x7d\xaf\x1a\xd8\xff\x85\xdd\xf1\xf0\x4b\x09\x55\x7a\x58\xc3\x95\x99\xce\xf3\xd5\x85\x99\xc4\xf3\x15\x0a\x65\x4b\xba\x72\x42\x05\xdb\x99\x34\xfd\xbb\xc8\x4a\x7d\x43\xc1\x75\x58\xd2\x04\x17\x0c\x1a\x8b\xd2\x92\x4a\xa7\x06\x2d\x8f\xcf\xee\x25\x9d\x1c\x7e\x57\x57\x5d\xb7\x97\xac\xe2\x78\x7a\xeb\xc1\x03\xb9\x6e\x9a\x82\x83\x5e\x7a\xc5\xd1\xe1\x6c\x02\x35\x78\xc7\xf2\xe8\x55\x51\x54\xeb\x0c\xac\x16\x9b\x3a\x4a\x46\x6b\x14\xd7\xd5\x60\xed\x1e\xb8\x81\x00\xc3\x17\x03\x5f\x8a\xda\xeb\x6d\x6e\x14\xe8\x85\x59\xfd\x75\xcf\x0a\x01\xed\xb0\x57\x2a\x2b\xc2\x1d\x46\x91\xf8\xd2\x6d\x8f\x5e\xdc\xeb\x39\xd0\x54\x3f\xf2\xac\x20\x76\x90\x73\x6e\xb4\xa0\x87\xa0\x05\x0d\xba\x31\x90\xc0\xa2\xbe\xa0\x06\x17\x78\x3b\xc7\x70\x42\xa3\xca\xd8\xf7\xed\xda\x1b\xcb\xa1\xb5\x59\xe3\x46\xa4\xe9\x30\x24\x94\x0a\xbd\xbe\x61\xe3\x15\x94\x57\xa1\x2b\xfa\x23\xba\x58\xea\xe4\xee\x17\x66\xb6\x5c\x48\xf4\x0d\xa0\x63\xcc\x3f\x0f\x39\x58\x8b\xfd\x92\xd0\x15\xfb\xb7\xca\x4a\x32\x58\x5d\xf2\xf6\x79\xe8\x24\x9c\x9d\x18\x56\xd2\x13\xa9\xd9\xaa\x1b\xe3\x25\x9f\xe4\xe8\x88\xf0\x9e\xfe\x95\x48\xf7\x02\xb7\xbe\xd3\x0b\x0b\xee\xd0\x59\xbe\xfa\x60\x41\xe6\xa7\xd9\x32\x7e\x1d\x3b\xb9\x54\xd6\x09\x63\xc3\x99\x26\xc3\xff\x6e\xa4\x7e\x48\x94\x23\x95\x8d\x5b\xac\x43\x61\x83\xb2\x40\x9a\xfe\xec\xdd\x84\xe2\xd3\xd1\x54\x68\x5f\xb5\xe6\xfc\x3b\xd2\x68\x3b\xea\x8d\xd1\x67\x3f\x4a\x2b\xe3\x55\x9f\xa7\x69\xf2\x46\xca\xb7\xba\xf2\xc4\x70\x73\x75\x4e\x3d\xfa\x6c\x46\x5a\x76\x9d\x7d\x73\x1c\xc1\xe6\x9b\x09\x06\x89\xd2\x2b\x15\xeb\xe2\x9b\x4d\x12\xe0\x6c\x9a\x75\x5e\x33\xae\x32\x35\x97\xf9\x8f\x3c\x93\x16\x02\x8e\xd0\xf1\x8c\x31\xe7\x1e\xf4\xac\x0e\x33\xc2\xb6\xa9\xda\xd9\x94\x24\x34\xca\x53\x1d\xbd\xde\x72\x28\x80\x6b\x8f\xd2\x27\x3d\x59\xe0\x8c\x19\xcf\x10\xd1\x02\x63\xaa\xf0\xec\x1a\xa8\x34\xad\xe0\xb9\x51\xd1\x56\x41\xc2\x92\x14\x12\xe4\x29\x46\xb0\x5c\xb0\x2f\x6a\x4d\x5b\xc2\x90\x14\x69\x9a\x7d\x5b\xeb\x63\xa2\x3a\x65\xd4\x53\xf5\x3e\x5c\x7c\x86\xf6\x55\x43\xf5\xae\xaf\x51\xbb\x82\x78\x0f\x57\xf8\x38\xb2\x3c\x42\xfb\x7b\x50\x77\x5e\x5b\x7b\xfd\xda\xaa\xc9\xb8\x19\xec\xe1\xb4\x10\xd4\xf2\xa0\x46\x7b\x80\xc7\xa9\xdc\x9a\xb5\x2f\xa4\x8a\x72\xd0\x95\x8a\x46\xd7\x13\x19\x6d\xf4\xce\x61\x67\x3d\x85\xbb\xe8\x3a\xf2\x5b\x8e\x41\xe6\x62\x50\x3d\xae\xf8\xad\x8e\x70\x5f\x1c\x2e\x3d\x70\x40\xd5\xe7\xac\xff\x64\x44\x20\xb1\x86\x12\x42\x61\x81\x35\x83\x8f\x3b\xbb\xe6\xa7\x3a\xdb\x95\x33\xbc\x08\xc2\x28\x27\x74\x46\xe8\x7f\x3b\x22\xe7\xbd\xdd\xf6\xfd\x7a\x71\x6f\xaf\xe0\x2d\xfb\xcc\xbc\x65\x5f\xf5\x3e\x63\xaf\x4d\xd6\x00\xf0\xb3\xa8\x6f\x3b\xfc\xfa\x7b\xa5\x77\xc1\xf3\xf6\x7b\x19\x81\x23\xea\xbd\xa5\x1b\xd7\x64\xb1\x3a\x94\xa6\x27\xc4\xee\x07\x69\xc2\x43\x65\xac\x3e\x85\x38\xc7\x7a\x0b\x51\xfb\x64\xcc\xa8\x0e\x89\x50\x23\x50\x42\xbc\xd6\x45\x6d\x7b\xa5\x47\x16\xb4\x0a\xa3\x90\x5e\x0d\x3c\xb7\x0a\xda\x27\x65\x6d\x47\xac\xc7\x8f\x8d\x8b\x5b\x88\xe5\xb9\x3e\xe5\x5e\x80\xba\x89\xbe\x0e\x80\xb4\x0c\xe4\x06\xd4\x97\x13\x71\x84\xf4\x9c\xb5\x46\x1c\xcc\x37\xb3\x9a\x1c\x5f\xfd\xd7\xf4\xd8\xc9\x8b\x6e\xd0\x03\xd5\xda\xea\xdf\x68\xc4\x49\x18\xbe\xe0\x4b\x7b\x29\x0d\x5a\x44\x99\x6e\xfc\xab\x8f\xdc\x52\xa1\xfc\xc8\x4e\x02\x9c\xc0\x28\x9c\x7b\xc3\xb3\x57\x66\xbd\xbe\x95\x6c\x4a\x5f\xb7\x39\x8e\x8e\x6f\x82\x5c\xea\x50\x6b\xc8\xfb\xac\x85\x57\xe8\xeb\x90\x2f\x32\x08\xa1\xd2\xa7\x84\x5e\x49\xb4\xd8\x87\xe6\x5b\x69\xc9\xc2\x20\xac\x25\xe8\xb8\x82\x2c\xc9\xd2\x7a\xf7\xd6\x0b\xd7\xca\xf7\x1c\x9b\x91\x05\x3f\xe1\x39\x6d\x08\x87\x90\x26\xc0\x80\x92\x17\x55\x00\xf5\x64\x82\x23\xdd\x2b\x64\x8c\x75\x54\x9a\x6a\xc3\xc9\x00\x58\xcd\xa9\xe1\x9b\x36\xbc\x64\xcf\x00\xa0\xcf\xe4\x82\xd7\x0c\x70\x3b\xbe\x14\x19\xca\xa5\x3c\xff\xe9\xad\xf4\xd5\x21\x1c\x97\xe5\x54\xe9\xf3\xe8\x15\xdf\xb1\xca\xba\x2d\x37\x08\x5c\xcc\x00\x73\x89\x39\x7c\xe4\x49\xa9\xea\xc4\x92\x4b\x8a\x57\xe0\x89\xa0\xa3\x26\x83\xb4\x05\x36\xd0\x6b\xca\x70\x42\xe8\x17\x02\x07\x3a\xd0\x52\x32\xe6\x00\xfc\x08\xc6\xf5\x10\x8b\x3d\xfa\x85\x1c\x07\xaf\x43\x39\xe4\x3f\xb3\x50\x2c\x49\xef\x56\xb2\x6a\x54\xbd\x5f\x29\x59\xe7\xaf\x25\x70\xd6\x3b\x8c\xf5\x7a\x8e\xdd\x47\x6e\xf7\xd8\xcf\x21\x55\x63\x4e\x6b\x92\x07\xd1\x61\xa4\xfb\x1c\x39\x01\x15\xf5\xa2\xac\x93\xa2\x6b\xab\x73\x10\x49\x6a\xeb\x11\x03\x61\x6d\xa8\xd2\x10\x89\x9d\xa2\x66\xd1\x9a\x58\x51\x6a\x9f\x14\x35\x12\x60\x46\x19\xc9\x91\x5e\x71\xf5\x73\x51\xee\x63\x11\x1e\x9e\x8a\xdf\x98\xd7\xd5\x47\x3a\x49\x1c\xd4\x32\x63\x8c\xcf\x55\xae\x26\x7f\x48\x51\x65\xfc\x70\x08\x17\x4a\x51\x17\x4a\xd6\x19\x21\x47\xda\xd8\x3a\xff\x5e\x65\xdd\x6a\xb9\x0a\x87\xd5\x11\x56\xed\x6a\xc7\xb3\x41\x21\xc3\xa5\xa1\x8c\xee\x6a\x4d\x7f\x33\x0d\xaf\xfb\xd4\x57\xbb\x6b\xcc\x71\x80\x6c\xbb\x12\xba\xd9\x97\x65\x3e\x9c\x22\x54\x19\x6e\xc3\xeb\x34\xfd\xa2\x32\xd2\xad\x6b\x3a\xd5\x0d\x0b\x16\x9f\x82\xc5\x47\xa8\x61\xd4\x81\x37\xd6\xbc\x0b\x5a\xb4\x31\x2d\xe6\x54\xb1\x46\x99\xe1\xd5\x3d\xac\xe7\xf6\xa7\x5e\x60\xb4\xc2\x99\xe9\x2b\xc6\x4a\xb9\xbf\x32\x9d\xb4\xf9\x38\xa1\xbe\xc4\x68\x4e\xea\x79\x95\x57\x38\x27\xf5\xc9\x39\xb9\xe2\x30\x1e\x3d\xcb\x00\x32\x98\xe8\x17\xc0\x62\x0c\xfd\x3f\xa4\x29\xea\x24\xb9\x12\x30\x49\xde\x22\x74\xfe\xc9\x6d\x2b\xed\x31\xfb\x9b\x0b\x71\x59\x11\x3e\x24\xef\xb9\x53\x7f\x44\xa9\x70\x54\xc5\xcf\xa2\xd9\x17\x08\x80\xdf\x93\xa5\xa3\xc8\x84\x27\x8c\xaf\x95\x50\x60\xbd\x1d\xa9\x1e\x8b\x2f\xe4\xbe\x52\xf7\xab\x2a\x38\x25\xc2\x53\xc9\x20\xc1\x91\x5a\x7a\xe4\xde\x64\xe1\x32\x3e\x52\x43\xcf\xf4\x75\xdc\xcf\x2e\xf4\x1e\x59\x5e\xa7\x26\x29\x42\x26\x88\x1d\x8b\xf0\xc3\x21\xd9\xf2\x62\x9d\xc0\x16\x45\x6c\xec\x04\x35\x74\x4c\x10\xfe\xc8\x13\x5e\x41\xa2\xc3\x21\x51\x12\x3f\xec\xc6\x06\xbc\xed\xdc\x82\x82\xeb\x81\x6b\xbc\xd1\x6a\x73\x72\xf4\x9c\xb9\xc2\x91\x76\x00\xb5\xee\xcb\xd4\x83\xbe\x05\x47\x87\x19\x83\xe8\xec\xc0\x8d\xf1\x8d\x88\xb7\x44\x77\x0d\x00\xd8\x36\x55\x87\xc3\x94\xe4\x1c\x19\x24\xfa\xf0\x24\x34\xb4\xbf\xfd\x94\xa2\xc3\xdd\x76\x38\x70\x82\xa5\xe0\x05\x77\x6f\x41\x3f\x77\x0b\x52\x69\x1a\x9e\x05\x3d\x05\x35\xed\x92\xc8\xdd\x6f\xa6\x9c\x7d\x50\x4e\x5f\xce\xcf\x6f\x3f\x9e\xf7\xc7\xac\x35\x53\xb0\x3d\x54\x7b\x5c\x3a\xad\x70\x96\xad\xa1\x35\xd6\x29\x7c\x24\x01\xb8\x33\x22\xc4\x0f\xc1\x86\x2f\x44\x04\x21\xe2\x03\x8d\x73\x01\xe7\x19\x27\x53\xa1\x92\xb6\x03\x48\x8f\x96\x3e\x9a\xab\xf8\xa3\xf9\x9d\x70\x47\x76\x65\x46\xf7\x48\x68\xb1\xbe\x7f\x92\x02\x3d\xa2\x3e\x14\x9b\x2a\xc2\x12\x3f\xb5\x24\x4e\xb5\xa2\x0a\x40\x8c\x61\xb2\x43\x87\xe1\xfd\x9a\x34\xf6\x0a\x0c\x66\xa8\xe5\xd5\x31\x40\x3e\xb7\x17\x43\xad\x09\x08\x83\xa0\x0f\xdf\x00\x97\x3f\x50\xe0\x64\xdf\x70\xff\x05\xc9\xc5\xf1\x3f\xbd\xbe\xaf\x78\xef\xb6\x8f\x5e\x54\x8b\xe5\xff\xce\x36\x83\x64\x8d\x03\x57\x54\xdc\xdf\x3a\x42\x35\xdd\xc4\x84\x07\x2e\xb0\x57\x72\xdf\x10\x9f\x44\xf5\x6a\x4f\x7d\x7b\x0d\x1b\x59\x74\xbb\xe8\x06\xed\x3d\x0e\x87\x64\x04\x5e\x22\x13\xd2\xad\xbe\x77\x17\xb5\x9a\x60\xab\x37\x6c\x68\x71\x1a\x44\x45\x78\x30\x94\x01\xa0\x3a\x21\x2d\x54\x38\x17\x0e\x32\x47\x3f\x09\x27\x88\x9f\x85\x5c\x3a\xfa\xa7\x3e\x1e\xbd\xd2\xb6\x4a\x53\xb8\x0a\xc0\x1e\xed\x23\xcd\x8d\xdf\xe7\x92\x09\xe3\x03\x59\x85\x3e\x90\x0d\x6f\x49\x21\x22\xc9\x53\x61\xdc\x3b\x00\x48\x00\x2d\x75\xc0\x7b\x91\x35\x04\x7e\x83\xbe\x09\x70\xc2\xa9\x64\x25\x4d\x0a\xf0\x63\x9c\x30\x56\x5b\x7b\xe9\x08\x08\xa6\x30\x96\xd3\x2b\x54\x13\x5f\xd9\xe3\xe4\x62\x3a\xa8\x16\x85\x3b\x71\x36\xf3\x32\xdf\xd3\xcd\x7c\x9f\x97\x06\xf7\x2d\x8c\xdd\xd3\x3d\x69\xb9\x7b\xe8\x82\x5e\x1d\x33\xc3\x7f\x55\x84\xee\x43\x43\xe6\xfd\x25\x9b\x9e\xef\xc7\x63\x62\x69\xd2\x6a\xb1\x5f\x92\x41\x33\x7f\x60\xcf\x7b\xf3\x6e\xd0\x74\xe4\x4b\x47\x47\xea\xed\xbf\xaf\xd6\x32\x5a\x13\xe4\x6e\x6f\x0a\x41\x5b\x5a\xa4\x2b\x4f\x27\xd2\x71\x89\x2d\xa9\xff\x5c\x6b\x17\x09\xf8\xcf\x58\xea\x47\x33\x40\xf1\x26\x43\xc3\xd5\x33\xb8\x60\x44\x75\x15\xed\xfc\xf0\x7d\xc7\xe1\x88\xe8\x49\x17\xdf\xf1\x98\xfa\x48\xcd\x0b\xb4\xad\x2c\xea\xb9\x0b\xe1\x3b\x95\xb6\x15\xb5\x03\x11\x1d\x1c\x28\x06\xbb\xb6\xf2\xa0\xab\xa3\x91\x1a\xb4\x2d\x1e\x22\xd1\x1e\x6c\x6b\x1b\xa6\x2f\x1e\x9f\xb3\x36\x54\xd4\x1d\x4c\x92\xc2\x69\xa8\x8f\x9a\x64\xf3\x92\xc0\xb0\xd5\x7d\x6f\xea\x30\x2c\x36\xd6\x25\x47\x7a\x5d\xd4\x6f\xbf\xd0\x4f\xfc\x4e\x29\xed\x87\x3f\x06\x02\x57\xd5\x87\x66\x7a\x5e\x68\x3b\xb4\x8f\x92\xe4\x56\xf2\x10\xa2\x96\x5a\x64\xea\x16\x92\x69\x5f\x70\x60\x4f\x1d\xb3\x0e\x62\xb0\xdc\xa6\xd5\x19\xde\x52\x22\xef\xe4\x61\xcc\x1d\xe6\xad\x1e\xe3\x55\xd3\x33\xc8\x66\x4e\xc0\xb6\xfc\x97\xd6\xf8\x22\x40\xaa\x31\x3c\x6f\x47\x5a\x94\x53\xa0\x23\x3b\x05\xc7\xc4\xf4\xa7\x4f\xe2\x40\x21\x70\xf8\x2f\x16\x89\xd9\x51\x0a\x0e\x6b\x9d\x2a\x0b\x27\x0e\x89\xcc\xf2\xeb\x24\x83\x76\xa1\x5b\x53\x64\xcb\xf6\xdd\x15\xce\xe2\xdc\x3e\x25\xad\xe9\x6c\xc7\x50\xb0\x72\x8e\xa2\x3d\xef\xb7\x15\xc2\xee\x8e\xfe\xa5\x80\xe0\x7c\xc3\x3a\x4d\x6b\x8e\x7a\x77\xed\xd4\x38\xfb\xc3\xe9\x51\x1f\x06\xb0\x07\xb0\xb5\xfd\x2f\x79\xe5\x7d\x26\x47\x8e\x47\x00\xb5\x35\x2a\x38\x4d\x5b\x01\x0b\xbe\x4c\x53\xdd\x45\x5a\xf7\xf4\xcf\xc3\xfc\x74\x72\x19\x0e\x29\xcf\x5a\x51\xba\x37\xf5\x3d\xbd\x39\x12\x78\x08\x7e\x5d\x6d\x64\x77\x45\x80\x67\xf1\xce\x63\x02\x59\x89\xdd\x97\xad\x05\x4a\x51\x8c\xd3\x61\xfc\xe6\x0c\x93\x38\xc7\x09\x48\xe0\x66\x8a\xc1\x2b\x37\x2e\xc6\x2c\x75\xdd\xb4\x5c\x51\xd4\xf0\xc9\xb9\xe1\x7f\xa1\x95\x5e\xd4\xa7\xbc\x35\x63\x90\xf2\x8b\xb2\x68\x1a\x93\x1c\xbe\xe9\x9b\x2b\x1b\x66\xbe\xe8\xbb\xba\xd8\xd9\x30\xf7\x4d\x8d\x5a\x61\xee\xf4\x19\x8f\x47\x4d\x3c\x83\x20\x15\x12\xff\x27\xeb\x93\x31\x35\xb7\xdf\x79\x02\x6a\x0c\x7d\x6b\x16\x45\xe2\x90\xd8\x35\x38\xc9\x93\x37\xc5\xea\xed\x95\xa5\x03\xd4\x3c\x31\x0d\x4f\xf2\x9e\xe2\x6d\x8c\xeb\x48\x02\x1a\x3b\x8b\x6a\x09\x73\xf6\x2a\x03\xce\x50\xa3\x30\xc8\xfb\x76\xd3\x3f\x47\x2c\x39\x4b\x46\xb5\x51\x60\x05\xa5\xd3\x81\x33\x73\xc0\x4b\xf3\x5a\xde\xf0\xff\xef\x0d\x01\x35\x36\x4c\x7a\xd1\x0a\xdf\x67\xb7\x00\x6b\x02\xbd\x85\x65\xe7\xd4\x9e\x25\x98\x41\xab\xd5\x16\x06\x0d\x01\x7f\xa5\xcf\x7c\x63\x90\x6a\xc1\x8d\xf7\x48\x2e\xa6\x4b\x73\xa7\xc2\x50\x32\xe1\x51\xf3\x30\x09\x19\x65\xe6\x2b\x4d\x8b\x21\x13\xce\x63\xfb\x59\x92\x27\x09\x19\xd9\x0c\x05\x39\x1c\x60\x8f\x44\x23\x6f\x56\x1e\x6a\x60\xde\x33\xee\x5d\xbe\x9b\x01\x9e\xd1\x64\x1d\xaa\xb6\x56\x04\xa0\x4d\x56\xd7\x03\xef\x79\x53\x4c\x2a\xf9\xe2\x15\x70\xe4\x41\xe4\x62\x35\x07\x62\xb7\xbd\x53\x42\x8d\x09\x9d\xd5\x89\xa5\x5d\xf1\x91\xb2\xfb\x05\xa4\x6d\x56\x39\x77\xb1\x24\x7e\xb8\xad\x1d\xc1\x53\x35\xaf\x2d\xe4\x48\x5e\x5b\x89\x8e\x7b\xe8\xd6\xfe\xa1\x1b\x68\xf0\xfa\xcc\x84\xd0\x29\x15\xd6\x02\x81\x29\x2a\x51\xb3\xc3\x3b\xaf\xa9\x18\x2a\x41\x73\x2f\x7c\x18\x80\x82\x95\xd5\x91\x1f\xfd\x5e\x67\x82\x10\x5a\x81\xe6\xb3\x74\x12\x5d\xe3\x92\xbd\x23\x5d\x0e\x26\x45\xd7\xd6\xd4\x99\x0c\x55\x63\x8d\x3e\x90\xa4\xa2\xcb\x80\x51\x73\x95\x83\xf5\x20\xa1\xe2\xe8\x58\xa1\xf8\x0c\xf6\xfb\xca\x4c\x70\x6c\x63\x65\x95\x19\xa8\xd5\xd3\xeb\x32\xee\x8d\xdb\x32\x79\x0f\x63\x94\xd6\x14\x10\x3e\x75\x7b\x0e\x87\xa4\x46\x8b\x68\xb8\x77\x3f\x37\x1a\x0f\x79\x8f\x6a\x04\xbb\x0b\x35\x30\x73\xe5\x30\x0b\x15\x28\x9f\xbf\xbe\xdd\xf1\xb9\x9d\xe7\x5c\x11\xea\xd5\x24\x11\xea\xdb\xff\xa6\xb1\x7a\x68\x3e\x9c\x51\xd4\xca\xc5\x84\xf8\x4d\x3b\xaa\x9c\x18\xdb\x09\x76\x20\x6c\xb6\xd3\x9c\x05\xdd\xd6\x0b\xdd\x2b\x72\x90\x23\x75\x22\xd5\xa7\xaa\x87\xec\x81\x37\xbb\xbd\xac\xb2\xb0\x24\x82\xda\x09\xa1\xe2\xc6\x20\x56\xde\x8f\x5f\xf6\x81\xe1\x81\x7e\xc5\x9f\xbb\x25\x8f\x70\x90\xc2\x60\x41\x82\xa3\x33\x37\x94\x02\xe0\x1f\x05\x60\x3f\x9a\x18\x83\x91\x2e\xac\x6a\x22\x0a\x41\x75\x22\x03\xe9\x1d\x3c\xf3\x5d\xdf\x3a\xeb\x22\x1a\x93\x90\xef\x3e\x08\xdf\xb0\xa8\x62\x1e\xd2\xaa\x40\xb4\x70\x0b\xdc\xd7\xd6\x57\x74\x7a\x60\xb2\x3d\x2c\x05\x39\x01\x60\xde\xd8\x67\x30\x82\x97\x0f\x50\xfb\x62\x0f\x9a\x2b\x82\x31\x6b\xc5\xad\x3b\x7f\x09\xc1\x78\x08\x32\xb6\x37\x5a\x31\xe0\xc6\x0b\x41\x03\x6c\x5e\x13\xe1\x31\x24\x31\x08\xe1\x33\xc1\x1d\xfc\xb0\xce\x1c\x04\xfa\xe1\x60\x78\x57\xfb\xf6\x90\xba\x24\xc7\xd1\x48\x1c\x09\xad\x80\xf8\x7e\x5a\x96\xad\x31\xb5\x5a\x30\x8b\x65\x77\xac\xfa\xce\xc1\xff\x64\xc9\x18\x6d\x14\xcb\x03\xd2\x23\x81\x50\x6e\x3a\xc4\x36\x8f\x50\x7e\xa4\x3b\xd9\x3c\xaf\x25\x3e\xca\xbb\x2b\x39\x92\x18\x85\x16\x04\x01\xa7\xc8\xde\x53\xa7\x3b\xe1\x74\x98\x44\x28\x45\x1a\x01\xca\xbd\xbc\x74\xa8\x20\x40\xe5\x4d\x07\x7c\xcc\x24\x1d\x8d\xea\x63\xc0\xc4\x54\x59\x0d\x98\x5c\x14\x6e\x3c\xdd\xe0\x36\x97\x1f\x37\x5e\x6b\xaf\xad\xb6\x03\xab\xf4\x6e\xc4\xea\xd0\x11\x80\x6e\xda\x7a\xc7\x8d\xd3\x41\xa0\xec\xf8\xa9\xbd\x0b\xc6\xc5\xac\xec\xe8\x15\x3f\x8a\x3d\x4b\x42\x77\xd4\x91\xae\xe4\xae\xef\x9d\x64\x24\xe5\x9f\x2a\x27\x6c\x4b\x92\x3b\x19\x4c\x27\x5a\x02\xe5\xc0\xd7\x78\xaf\xf4\xfc\xb5\xdc\x51\x15\x4a\xd2\x55\x2c\x59\xd7\x91\xbc\xf4\x3c\x35\x15\xc8\xa1\xe1\x51\x1c\x3d\x0f\xd1\xc5\x53\xe7\xd5\x08\xc1\x50\x92\x7d\x37\x66\x56\x2e\xe6\xf5\x81\x61\xac\xd0\x54\xe1\x4b\xb9\x8a\xef\x2f\xfd\xf4\x82\xc7\x56\xf0\xc4\x34\xae\x2e\x7a\xc5\x9b\x03\xeb\xed\xcf\xee\x04\xd8\xd5\x16\x4d\x02\x95\xe1\x6c\x12\x7d\x7e\xe8\x7f\x2f\xac\x37\x77\x25\xed\xd9\xd6\x9e\x22\x5a\x13\x8a\x00\x2d\xe6\xcd\x1d\x4e\xc7\x27\xcd\x02\x0f\x5c\x8e\x81\x01\x88\x7d\x28\x87\x63\x46\xa8\x53\x63\x7a\x0b\x70\x11\xc1\xaf\x40\xd3\xe8\x6e\x2d\x57\x79\x45\x7d\x81\x79\x58\xba\x3e\x85\x5c\x1e\x48\x0a\x7d\xb0\x16\x20\xf9\x70\x7a\x32\xe7\x92\x9e\x14\xb7\xb7\xd1\xcd\x2d\xb3\xdf\x1a\x0a\xa3\xda\x30\x52\x87\x46\xcf\x48\x98\xf1\x2e\xa2\x30\x83\x6c\xa8\x14\xd8\x9c\x58\xfe\x26\xd8\xba\x48\x5a\xd0\xca\x8a\xe2\xfc\x17\x50\x1d\x64\x50\x39\x35\x19\x18\x84\x86\x50\x0f\x07\x70\x3c\x1e\xb3\x8a\x7e\x8f\xb7\x39\x81\x63\x78\x5f\xe9\x31\x68\x2f\x28\x7d\x42\x84\x0a\x2c\xaf\x0a\x90\x6f\xa2\x02\x29\x0d\x86\x9b\xf4\xd8\xe3\xb6\xad\x6c\x54\xa4\x8c\xf6\x96\xaf\x17\x6a\x09\xa6\x48\x2c\x00\x6b\xd0\x39\x0c\x75\xaa\x28\x38\xc8\x73\x2d\xc3\xd6\xd2\xa7\x32\x73\x2d\xb7\xe8\x17\x70\x92\xd9\x25\x12\xaf\x11\x73\x47\x2c\xd0\x57\xc9\x29\x6f\x62\xb5\x45\x63\x13\x6b\xe3\x3a\x8c\xf7\x2b\xad\xc4\xfa\xfc\xac\x8f\x31\x84\xab\x3f\xe6\x06\x75\x12\x5a\xdc\x0c\x6b\x7a\xf9\xad\xdd\xd0\xf1\xd1\xfd\x93\x88\x24\xb3\x2f\xe5\xfa\xa4\xc8\x57\xef\x31\xe4\x89\xae\x85\x0a\xc5\xb7\x71\xb2\xd5\xf5\x91\x7a\xde\xfc\x49\x16\x9a\xd9\x9f\x73\x83\x29\x93\x85\x81\x24\xff\x81\x3b\xa1\xb6\xbb\x0f\xee\xc3\x59\x78\xc5\x77\x87\x43\xf2\xaf\x2a\x01\x1a\xf8\x4b\xbb\xdd\x7b\x19\x3a\xe7\xe8\x74\x6f\xc8\x50\x96\x0e\x9a\x3d\x84\x72\xe3\x2f\xdd\x1f\x15\x4e\xc7\xd9\xe9\x04\x59\x93\xb6\xb6\xff\x59\x77\xa6\x78\x4f\xa6\xc7\x40\xe1\xe2\xc7\x2a\x33\x47\xe5\xea\x3a\xe4\xfe\xfc\x01\x0a\x17\xa5\x26\x34\x8e\x04\x99\x37\xa1\xda\xcf\x84\x5b\x75\xcb\x28\x54\xd7\x0e\xc7\xe2\x4b\xc9\xa6\x5e\xed\xf0\x0b\xd9\xe2\x58\x89\x4d\xf6\x93\xd4\x15\x0c\x6f\xf4\x52\xe7\x24\x4d\x87\xef\xea\x4c\x39\x2c\x32\x4e\xc8\xdd\xef\x7a\x9c\xa9\xde\x74\x2f\xa5\xf7\xc0\x64\xdd\x25\x37\x95\xce\x08\xab\x15\xc0\xcc\x0a\x55\xbc\xae\x8b\xaa\xd9\xf0\x7a\xb2\x11\x25\x47\x5a\x28\x4d\x87\x6a\x22\x9a\x9f\x8c\x69\x4a\x46\x88\xb5\xe9\xb3\x6a\x9e\xef\x44\xb5\x96\xef\x26\xcf\x45\xc9\x75\x2a\x5e\x47\x41\x3d\x98\xaa\x54\xb2\xa7\x75\x5d\xdc\x02\xa6\x05\x9b\xd2\x7d\xa8\x02\x57\x19\x4d\x3f\xa7\xb9\x5f\x94\xa5\x7c\xf7\x65\x2d\x77\xba\x34\xfd\x88\x69\x2c\x44\xe2\x7d\x69\x28\xc7\x83\xcc\x12\xc0\xba\xf3\xbe\x85\x83\x62\x22\xab\x52\x16\x6b\xf6\xab\x1e\x84\x0e\xe1\x58\x4c\x6a\xde\xec\x4b\xe0\xa9\x3d\x5c\xfc\xeb\xfd\x74\x3a\xfe\xd7\xfb\xe9\xdf\xfe\xf5\x7e\xca\xc7\xff\x7a\x3f\xdb\x2c\xef\x1e\x1d\x1f\x1a\xee\x0c\xc1\x75\x96\x10\x2a\x17\xd5\x92\x71\x3a\x1a\x35\xcc\x3b\xc0\x34\xea\xdb\x40\x3c\x81\x36\x66\x4d\xd0\xa4\xcb\x80\x58\x81\x5d\xaf\x17\x76\x49\x14\x1d\x62\x78\x57\x70\x68\xb5\x80\x76\x45\xa3\x78\x72\x04\xed\x22\xeb\x47\xf3\x81\x30\xdf\xcf\x44\x56\xd3\xf7\x22\xdb\x13\x82\x92\x64\x30\x2c\x7a\xda\xe8\x07\x69\x06\x9c\x65\x44\x39\x15\xe0\x8a\x68\x9f\x55\x8b\x72\x49\x4b\xe3\xd7\x07\xa0\x02\x11\x79\x75\x5d\x17\x57\x57\xa2\xba\xd2\xf9\xf4\x3b\x07\x9a\x1a\x42\xca\xd5\xe4\x72\x3c\x23\x9e\xf2\xe9\xe4\xd2\xcb\x0f\x01\x4b\xb9\x7a\x2d\xae\xb9\xdc\xab\xac\x67\x9f\x3b\x2e\x06\x08\x24\x27\x1b\xb9\xda\x37\xfa\x15\xfd\x68\x4a\x06\xaa\xbe\x75\xe2\xb4\x68\x89\x5e\x71\xf5\x65\xa1\x8a\x2c\x79\x8d\x26\x40\x62\x93\x19\xb4\xb0\xcd\xe0\x64\x27\x86\x7d\xc1\x13\x4d\x3a\x02\x26\xbe\x7e\x9f\x84\xfa\x22\x19\x01\xe0\xae\x60\x58\x6b\x42\xe8\xc6\xad\xe9\x2d\x9b\x9e\x6f\x2f\x36\xfe\x92\xda\x92\x8d\x9d\x91\x24\xa1\x9b\xc5\xd6\x41\x46\xc1\x37\x88\xfe\x12\x5d\x77\x42\x06\xaa\x23\x9a\xcd\x56\x4e\x8c\x48\xcd\x14\x13\x7a\x6a\x74\x8e\x2b\x60\x79\x71\x72\x17\xe1\x74\xfe\x64\xc0\xda\x6d\x26\x5d\x19\x6a\xa3\x44\x76\x29\xb0\xb4\x76\xc5\xca\x3a\x96\xfd\x62\x2b\xca\x75\xd6\x97\x8d\xd0\xbe\x50\xe3\x5f\xdb\x55\xfb\x83\x34\x17\xbe\xf5\xc0\xaa\xe7\xe7\x59\xc9\xf5\x67\xf3\xf9\xed\x17\xd6\x1e\x2c\x94\xbf\x7f\x24\x69\x16\x98\x90\x26\x84\x06\x6e\xd5\x55\x8f\x74\x1e\x54\x11\x7d\x86\x01\x78\xd5\x33\x2c\xab\x63\xed\xfd\xe8\x2d\xa6\xcb\x89\xdc\x59\xc9\x54\x8f\x2c\x0f\x49\x10\xf7\xe6\x53\xa3\x11\xe1\x59\xbd\x50\x4b\xc0\x2d\xd6\x29\xfe\x90\x6c\x38\xf3\x67\xf3\x97\xd2\x9e\x1b\x83\x3f\xe4\xe1\x90\x6d\x79\x86\xe7\x1f\x4d\x6a\xae\xc9\xe4\x48\x28\xe0\xac\x57\xf4\x83\xaa\x77\x57\x70\x14\x0f\xfc\x20\xb3\xef\x24\x39\x82\x13\x72\x7d\x79\x04\xc5\xbe\x29\xf7\xbd\x92\x86\x1f\x64\xf6\xbe\xd2\x69\x75\x0b\x43\x60\xb5\xef\x82\xeb\xc3\xcd\xe6\x40\x4d\x56\xc5\x6a\xcb\xd7\x5f\x6c\x8b\xfa\x17\xb1\xd6\x4f\x0a\x13\xa2\x77\xc5\x0b\x83\x4e\x65\x82\x7e\x28\xd6\x6b\x51\x5d\xbd\x30\xee\x5e\xcd\xdb\xe5\x4d\x51\x37\x5f\x94\x62\xb7\xe3\xf8\x54\x01\x1f\x01\x00\xd6\xe0\xc4\xf4\x5f\x4b\x76\xf7\x38\x4f\x7e\x28\xf6\x0d\x4f\xe8\xdf\xf2\xe4\xf3\x62\xf5\xb6\xd1\x4b\x2f\xa1\x9f\xe5\xc9\xeb\xe2\x4d\x42\x67\x8f\xf3\xc4\xd8\x48\xce\xfe\x92\x27\xaf\xb6\x62\xa3\x12\x3a\xfb\x6b\x9e\x7c\xa1\xea\x32\xa1\xb3\xbf\xe5\xc9\xd3\x52\x07\x7d\xe6\x4a\x7a\x34\xcd\x93\x2f\x8a\x5d\xf3\xad\x5c\xbd\x4d\xe8\xa3\xbf\xe6\xc9\xb3\x66\x95\xd0\xc7\x8f\xf2\xe4\x15\x96\xfe\x18\xaa\xbd\xe2\xff\xd8\x25\xf4\xf1\x9f\xf1\xfb\x4b\xf9\xae\x4a\xe8\xe3\x27\xba\xbe\x75\x42\x1f\xff\x25\x4f\x5e\xc8\x6b\x9d\xf8\xaf\x79\x02\x0e\x47\xe8\xe3\xbf\xe5\x09\x64\xf9\x2c\x4f\xd0\xa3\x08\xfd\xf3\x34\x4f\x30\xe7\x9f\x75\x39\xb5\xa8\xd4\xab\x55\xad\x7f\x3e\xc9\x8d\x19\x70\x42\xff\xfc\x97\x3c\xf9\x12\xc1\x99\xe8\x93\xcf\xf2\xe4\x3c\xa1\x7f\x99\xe5\x09\x4b\xe8\x67\xb3\x3c\x79\x29\xd7\x09\xfd\xec\x91\xfd\x78\x6c\x3e\x66\xd3\xbf\xe4\xc9\x9f\xf4\xdf\xbf\x42\xd2\xd9\xf4\xb3\x3c\x19\x27\x74\x36\x9b\xe6\xc9\x44\xff\x9d\xe5\xc9\xc3\x84\xce\x74\x4d\xc8\xf7\xc5\x0e\xcf\xfe\xfa\x18\x13\xfe\xed\x2f\x50\xd5\xec\x6f\xa6\x80\xbf\xfd\x2d\x4f\xa8\xfe\x6b\x0a\xfa\xcc\x14\xf4\x99\x29\x48\xb7\xe1\xff\x9f\xd0\x47\x7a\x28\x17\x09\x7d\xa4\xc7\xf1\x5f\xff\xd2\x1f\xb3\x3c\x59\xea\xbf\x8f\xf2\xe4\xff\x97\xd0\xbf\x3c\x7e\xa4\xc7\x52\x8f\x84\xfe\x7c\x6c\x47\x40\xff\xf8\xb3\x1d\x2b\xfd\xe3\x89\x1b\xa6\xbf\x3c\x7e\xf4\xd7\x47\x7e\x10\xf4\xcf\xc7\x76\x7c\xf5\x0f\x3b\xea\xfa\xfb\x2f\x7e\x6e\xf4\xcf\xbf\x86\xd3\xf3\x97\xc7\x8f\xa7\x8f\xdc\xc0\x1e\xe9\xb7\x92\x4d\xcf\xbf\x95\x17\x33\xfd\xef\x68\x44\xbe\x96\x8b\x6f\xe5\xe8\xcf\x7f\x5b\x32\xfc\xfa\xec\x2f\x4b\xf6\x0a\x94\xb5\xb3\x6f\xa5\x37\x68\x78\x2e\xd9\x5f\x9e\x9c\x3f\x97\x17\xec\xb3\xe9\xf9\x73\x93\xf1\xb9\xb4\x69\xe1\xc1\xa4\xd7\xbe\x3e\x35\xb2\xe7\x41\xc6\x0f\x92\xcd\xce\x3f\xc8\x0b\x36\x7b\x74\xfe\xc1\xe4\xfb\x20\x47\xb3\xd9\x0c\x6a\xfc\x20\x47\xd0\xef\x25\x4b\x9e\x27\xa3\x0f\x12\xe8\xa9\x17\x92\xdd\x05\x76\x22\x9f\xcb\x80\xd3\x43\xc1\xc1\xb6\x05\x58\xcc\x1e\x8e\xb3\xf9\xf0\x01\x79\x48\x06\x9c\xc9\x85\xf4\x1e\xbe\x06\x6d\x27\x3a\x4e\x75\x23\x50\x4e\x91\xc6\xd3\xf6\xc3\xff\xc9\x56\xd7\xeb\xc3\x35\x57\xc5\xe1\x9a\x3c\x78\x28\x90\x1e\x69\x08\x11\x6c\x38\x75\xb6\xb8\x0f\xff\xa7\xc8\x4a\x45\xe6\x61\x02\x15\x27\xc8\x56\x87\x95\xaa\xcb\x83\xbe\xd7\x6b\x59\x46\x65\xd5\x36\x29\x50\x65\x0f\xff\xa7\xc9\xf4\xde\x6c\x15\xd7\x36\x8c\xff\x47\x55\xf3\x95\xbc\xaa\xc4\x07\xbe\x3e\xbb\x96\x6b\xb1\x11\xbc\x3e\xab\x8a\x6b\x9e\x9f\x25\xa3\x86\x0c\x2a\x70\xce\xe1\xd5\x73\x35\x01\xf5\xb4\x54\xe3\x64\xc4\xd1\xf1\x06\x67\xb0\xf3\x31\x40\x98\x80\xeb\x35\xfe\xae\xf0\x37\x9c\x12\x18\x12\x7a\xa0\x0c\x8e\x3a\x3d\x21\xf6\x51\x7d\x26\xaa\x33\x8e\x40\x0d\x2d\xf0\x96\xda\xc9\x20\xb8\x01\x0f\x7f\xf8\x3f\x99\x6e\xec\x61\x53\x94\xa5\xee\xdc\xfe\x6a\x7b\xc8\xd6\xfc\x50\x28\xa2\x8a\xd5\x96\x3c\x30\xb4\x5f\x4d\x22\x2f\x3c\xc9\x64\x32\x49\x18\xab\xc8\x9d\xf1\x21\x08\xe5\x39\x1f\x3e\x9e\x10\xfe\x31\xab\xcd\x52\x48\xce\x12\x42\x3f\x97\xc4\x29\x51\x75\xb5\xa7\xd0\xcf\x08\x6d\xac\x23\x1f\xc9\x9c\x48\x6a\x3c\x9b\x67\x8d\xd5\x36\x83\xa2\x0a\x56\x91\x1c\xc2\x9c\x50\x6b\x34\x23\x51\x02\x68\x25\x31\x86\x72\x6a\xd1\x40\x8f\xf7\x70\x77\xef\x87\xac\xe8\x83\x39\x58\xc9\xaa\x11\x8d\xe2\x95\x3a\x7b\x23\x40\x5f\xa6\x39\xdb\xc8\x1a\xe6\x12\x65\x90\xba\x1c\x56\x1c\x83\x7e\xbb\xee\x96\x7a\xe4\x15\xe1\x8b\x72\xc9\xd4\xa2\x74\x2c\xd9\x60\xce\x7e\xe9\xc0\x3d\x66\x8a\x7d\xa5\x9f\x37\x04\xac\x58\xe6\x0a\x8d\x59\x00\x8a\x5d\x2d\x38\xca\x07\x67\x4c\x93\xd9\x56\x93\x5a\x82\x1a\x6e\x12\xcc\x83\x8f\xbc\xde\x97\x4a\x24\xde\x0e\x53\xd3\x06\x99\xb0\x32\xd5\x04\x25\x16\xeb\x04\xc9\xc6\x60\xd2\x61\x50\x92\x85\x7c\xf3\x07\x5f\xa9\x33\x78\xb3\x2c\x93\x21\xfb\x1e\x7e\x47\x78\x86\xe6\x44\x41\x93\x9b\xa8\x08\x4b\x1e\x63\x1f\xc3\x28\x84\x00\xb7\xc3\x64\x5d\x91\x05\x09\x7a\x16\x43\xb7\x94\x85\x5c\x3a\x2c\xf1\xc2\x56\x56\x84\x14\xe1\xbf\x83\x1d\xd1\xb5\x69\x99\xf3\xfc\x6b\xb9\xe0\x93\xb7\xfc\x56\x9f\x83\x76\x7a\xf0\xe2\x65\x4c\x1d\x0e\x70\xf3\xe2\x17\x5e\xcc\xf8\xad\xaf\x2f\x16\x82\x57\xfe\xdc\xf6\xe4\xe0\x79\xa2\x45\xa9\xbe\xe1\xb7\x69\x0a\x45\x81\x35\x73\xb4\xe3\xb3\x67\x73\x35\xd1\x07\xd9\x37\xfc\x36\x57\x13\x7d\x18\x7d\xc3\x6f\x49\x9a\x62\x2b\x5c\x06\x7f\x24\x40\x0e\x93\x2e\x77\x79\x21\xc7\xf5\x3a\xc8\x60\x8f\x8c\x61\x8d\x82\x2b\xb1\x31\x0d\xc1\x9e\xb8\x84\xfd\x67\xc9\x6f\x1e\xf3\x7e\x93\xa6\x8f\xff\xcc\x98\x1b\x27\x94\x80\x14\x75\x2c\x66\xae\x59\xdf\x58\x9e\x19\x99\x01\x18\xa4\x17\xa5\xfa\xaa\x2e\x76\x5b\x68\x46\xf6\xb8\x5d\x24\xfc\x05\xfe\xa8\xfe\x24\xf4\x67\x99\xd5\x14\xbd\x66\xb8\x66\x7d\x15\xd8\x20\xf6\x4c\xe8\x0b\xb9\xe0\xcb\xd0\x29\xef\x37\xb2\x03\x45\xe9\xde\x72\x4e\xeb\xd5\xa9\x95\xd6\x91\xe1\x9f\x5f\x9e\x0a\x1d\xed\x9e\xfb\x87\xbf\x52\x99\x44\xfd\xc8\x07\x59\x45\x26\x4a\x92\x0b\x36\x3d\x77\x2f\x6e\xf4\x62\x61\xd8\x8f\xa8\xec\x49\xa5\xf5\x33\x43\xee\xf0\xd3\x18\x53\x5b\x4e\x5c\x65\x5d\x98\x1f\xdb\x70\x4f\x9e\x3c\x0f\x34\x1a\xd5\xa5\x26\xd6\xc7\x63\xfd\xea\xe2\xf6\xd5\x05\x40\x7d\x50\x1b\x7c\x29\x49\x93\x91\x05\xcd\x1c\xbc\xac\xc0\xe8\x31\xf0\xca\xd9\x5a\xb5\x92\x67\x46\x67\x45\x8d\xf4\x73\xcf\xcd\xe1\xc5\xf4\x70\xa8\x2e\x23\xd1\x03\xc2\xca\x06\xae\x61\x7f\x6c\x15\x86\x85\x4f\x56\xdb\xb0\x20\x78\x00\x54\xf3\x1e\xcf\x5b\x15\xad\x2f\xa6\xf3\xa4\xd8\xa0\xea\x05\x22\x88\x84\x2e\xce\x7f\x6d\x83\x2b\x71\x2b\xff\x59\xf1\xac\xa6\xf8\x44\x0f\xd8\xe1\x62\xe3\x44\x80\xb4\x61\xe2\x62\x3a\x7f\x00\x3e\x7c\x17\xd3\x25\xdd\xeb\xdf\x8c\x65\x33\x06\xae\x4a\x6e\x78\x49\x3a\x55\xa3\x33\x5e\x88\xbc\x9c\x1e\x0e\xc6\x6a\xae\x5d\x8d\x81\x4a\xf8\xa9\x46\xf4\xa1\x02\x2a\xaa\x63\xa7\x02\xf9\xd4\x00\x7f\xff\xa0\x53\x95\xb4\xd0\xeb\x65\x37\x28\x58\xc1\xfb\x98\x6d\x26\x15\x87\x54\x8c\xad\x8e\xb4\xdb\x58\xd4\xcd\x05\x1f\x40\xe3\x19\x2d\x88\x85\x5c\x49\x18\xdb\xa7\x69\x56\xe8\xd1\xaf\x69\x01\x46\xa7\xe8\x41\x19\x1a\xa6\xd3\x1b\x67\x43\x83\x40\x95\x96\xab\xac\xa2\x05\xdd\x93\xe3\xb1\x1d\xda\xe9\x4e\x3e\x85\x30\x5b\x5f\x6e\x86\x8d\x1c\x5f\xc8\xc9\x9b\xa2\x11\x2b\x76\x07\x62\xf5\xe4\x4a\x6a\xfa\x12\x49\x65\x74\x44\x68\x82\x0c\xc1\xfc\x8f\x9d\x0e\xf8\x56\x54\x40\x07\x6b\xe2\xd7\xfe\x46\x42\xf8\x59\xb5\xb6\x01\x40\x38\x6b\x52\xda\x06\x80\x51\xd1\xab\xeb\x42\x3f\x3d\x90\x92\xd6\x31\x96\xa6\xb6\xc4\xb4\x0d\xc3\xf2\x90\x32\xcf\x93\x35\x2f\x75\x2b\x00\xa2\x3e\xa1\xee\x41\xe6\x22\x3e\xc7\x8e\x51\x73\x2e\xfa\x17\x5b\x27\xc5\xeb\xe2\x8d\x0e\xdb\x14\xfb\x52\xc1\x53\xce\x64\xd1\xdf\x79\x22\xaa\x35\xaf\xd4\xd3\xbd\x92\xba\x2f\x8a\xd7\x79\x52\xf1\x77\x7a\xad\x3f\xad\xd6\x5f\x43\x64\x42\x91\xcc\xcf\x13\x25\xaf\xae\x4a\xfe\xfd\x0d\xaf\xdf\xd5\x42\xbf\x1f\x9e\x35\xab\x3c\x69\x44\x75\x55\x7a\x16\x49\x72\xa4\x2f\xe4\x64\xb7\xfa\x12\xab\x64\x77\x78\x29\x3c\x4d\x72\xe3\x03\xf2\x69\x59\x26\x14\x03\xbf\xc4\xe6\x72\x05\x0a\x1b\x36\xf4\x9f\x49\x6e\xf4\x8b\x4d\x53\x5d\x28\x2a\x11\x63\xaa\xdf\x5a\xbf\xe1\x11\xa3\x07\xf3\x4b\xb9\x82\x91\xb7\x11\x7a\x5e\x4c\x38\x4c\x11\x86\xfe\x63\x97\x84\x33\x6b\xda\xa3\xe7\x20\x9e\x60\x8c\x80\x05\xa2\x23\xbe\xaa\xe5\x7e\x87\xcb\x05\x63\x70\x9d\xb8\x28\xb3\x6c\xe0\xe6\x74\x99\xdc\x62\x30\x11\x3e\x8f\x5b\x37\x58\x58\x6b\x1a\xa1\x44\x37\xd3\xd8\x42\x3c\x26\x7d\xb4\x59\x21\x18\xfb\x4a\x0f\x72\x71\xe3\x52\x3f\x4f\xf2\x64\x23\x7c\xf9\x5f\x99\xdf\xdf\xf1\xf7\x2a\x1e\x5d\x1b\xf3\x43\xcd\x6f\xe2\x98\xe7\x30\xce\xc0\x06\x8b\x23\x7e\xf2\x11\xc1\x94\x2e\xdc\xa2\xfa\x96\x37\x8d\x0d\x5d\xba\xd0\x97\x41\x67\xfe\x61\x26\xda\xaf\x9d\xa8\x82\x7f\x98\x19\x0e\xa3\xf5\xf0\xf5\x84\x07\xe4\x56\x9e\xc0\x06\xc7\x65\xc8\xaf\x8b\x55\x73\x6b\xd7\xe0\xf3\xa4\xb5\xbb\xcd\xa8\x27\xf1\x39\x80\xa1\x3f\xf4\xac\x8f\xef\xda\x8b\x43\x37\x07\x4b\xfd\x45\xd6\xeb\x70\xf2\x3f\x77\xa1\x61\xa1\x4f\x3b\xeb\x01\x97\x68\xdf\x62\xf8\x39\x89\x8f\x86\x70\x68\x7c\x5c\xb0\x78\x93\xf6\xb1\x61\x36\x46\xf7\x4c\x80\x16\x9a\xf4\xba\x89\x36\x3d\x34\x3c\x5e\x83\x3a\x3a\x5e\x82\xdf\x24\x79\xf2\x56\x94\x65\xb8\x65\x5f\x27\x79\xa2\xea\xa2\x6a\x76\xf2\xff\xe5\xee\xcd\xd6\xdc\x36\x92\x46\xc1\x7b\x3e\x45\x11\xe3\x46\x67\x8a\x49\x16\x28\xb7\xfb\xef\x06\x2b\x8b\x47\xd6\x62\xeb\xb4\xb5\xd8\x92\xb7\x66\xd1\x3e\x59\x44\xb2\x08\x0b\x04\x68\x00\xac\x52\xb9\xc0\xf9\xe6\x6e\x2e\xe6\x0d\xe6\xf1\xce\x93\xcc\x97\x11\xb9\x01\x44\x49\xea\xfe\xff\x33\x17\x47\x17\x2a\x30\xf7\x25\x32\x32\x22\x32\x96\x4a\xaa\x9e\xec\xce\xbf\x0a\xe2\xa0\xd8\xc9\x1c\x4a\xc3\x9e\x6c\x85\x8f\x1b\xb6\xc9\x31\x6a\xd8\x26\x3d\x98\x61\x9b\xf4\x20\x06\x9d\x68\xf0\xc0\x36\x69\xa1\x85\x6d\xd2\x8f\x15\xb6\x89\x39\xfe\x9d\xd4\x63\x54\xa1\x86\x62\x90\x82\x4d\x6d\x1d\x6e\x1f\x23\xb4\x0f\x77\x0b\x21\xa8\x96\x5a\x08\xc1\x80\xc5\x36\xe9\xe0\x83\x16\x14\x7d\x14\x21\xdc\x57\xca\xdf\xd2\xfb\x91\xc6\x36\x69\xe1\x8c\x6d\xd2\x42\x19\xdb\xe4\x1e\x8c\xe1\x65\x68\x84\x01\xfb\xa8\x0f\xc3\x11\xb6\x38\xce\x73\x1b\x7d\x8c\x2f\xb6\x49\x0f\xba\xd8\x26\x47\x80\x59\x8a\xdd\x4e\x26\x9d\xa5\xf4\xa7\xea\x95\xf0\x77\xe1\x03\x58\x47\xe7\x76\x91\x8e\x7f\x61\x74\x6f\x97\x23\xe8\xf0\x51\xd1\x42\xe3\x22\x16\x20\x22\x0a\x96\x70\x02\xf4\x6d\xcc\xaf\xe6\xad\xe3\x10\xfb\xf7\x26\x10\x63\xff\x2c\xf8\x9d\x3d\x19\x71\x5a\xb0\xce\x5d\xdb\x6b\xa1\xd1\x89\x02\x3b\xb1\x06\xbf\xc4\x98\xea\x52\xd6\x4a\x05\x8b\x5e\xb0\x3c\x67\xe6\x5c\xf7\x35\x0c\x4c\x8a\xaf\x9c\x05\xcc\x38\x38\xfb\x27\xd6\x67\xda\xcf\xd2\xc4\x9c\x71\x9e\xfe\x5b\xf6\xf3\x8e\xe5\xb4\x7e\xfe\x81\xf3\xb3\xa5\xcf\x7c\x67\x2c\x73\x13\x55\x0a\x23\x77\xe8\x10\x56\x2e\xe2\xd8\x94\x45\xf4\x10\x7f\xb8\x10\xbc\xc1\x6b\x0d\x78\x2f\x46\x15\x9a\xb5\xa1\x39\xf2\x01\xa2\xb0\x59\x74\xf3\x49\xb3\xf7\x5b\x94\x26\xd8\x23\x41\x1d\x47\x1d\x6f\xab\xaa\xf5\x62\xe8\xc0\x5b\x3a\x17\x46\x6d\xfb\x34\x00\xfc\xf1\x4e\xe5\x51\xa7\xb2\xa7\x53\x93\x66\xda\xef\x9c\x93\x4f\x9a\x9b\xe1\x41\x57\x20\x7b\x2d\xca\xa4\xd2\x0b\xca\x82\x24\xbd\x0e\x80\xe6\x1f\x7d\x31\x68\x8d\x66\xb2\x82\x82\x0a\xf9\x93\xbb\x4c\xf5\x14\xb1\xba\xd8\xc5\xe5\x41\x57\xc2\xe5\xbe\x77\x70\x48\x7d\xff\xd7\x8d\x0e\x9e\xcc\x8f\xc6\xd4\x7e\x5f\x7b\x92\x5e\x4f\x8a\xf5\xba\x92\x35\xbc\xae\x8c\xa6\x51\x67\xcc\x83\xfb\xe0\x26\x87\x19\x80\x3d\x57\xef\x19\x54\x39\x04\xec\x36\xef\x2b\xa1\x72\x88\x6e\xe3\x23\x07\xba\x55\xc4\xb4\xfa\x91\x3a\xad\x22\xaa\x8e\x43\x5d\xfd\x15\x3a\x26\xdf\x7d\xe1\xa3\x4d\x2b\x8a\xe9\xf9\xf4\x36\x7c\xd7\x4a\xaa\x01\x4b\xfd\x7c\x52\x1b\xd5\x97\xb7\xe4\xf8\xd8\x9d\xfc\x77\xe4\xdb\x1d\x8e\x39\xb0\x3b\xf3\xf4\x3e\xda\x16\xea\x3a\xbb\x4c\x45\x15\x4f\x0f\xed\x3e\x81\x1d\xfb\xcf\x74\x2c\x85\xed\xf8\x13\xfa\xfc\xd4\x95\xba\xa7\xb3\x3e\x1d\x72\x87\x61\x29\xcb\x79\xaf\xdd\xf4\xac\xe6\x2f\x6b\x22\xe9\x8c\x4a\x5e\xa3\x2a\x1a\x38\x97\x6b\x29\x27\xcb\x03\x29\xe9\x20\x07\xa9\x17\x5a\x0d\xe5\xd6\xe1\xc7\xc9\x4f\x05\x19\x46\xa0\xf9\x5d\xb3\xf1\x14\x5d\x21\x7f\x7c\xb1\xc7\xde\xcc\xef\x3d\xce\x1f\x9d\xbb\x3d\xde\x70\x3d\x7d\x14\xfd\x9c\xfc\xe7\x4f\xf9\x81\xfd\x60\xc7\x7d\x1f\x8e\xfc\xff\x63\xd8\x1f\x19\xd6\xbf\x0f\xbb\x9f\x3a\xb6\x7e\x9c\xd9\x8f\x13\x4f\xf2\xc9\x6a\x73\x26\x8d\x4f\x17\x92\xeb\xbb\xbe\x92\xa2\x5c\x6d\xc8\xe9\xc5\x9b\x53\x3a\xf7\x4f\x4b\x9c\xfb\x13\xfa\x7e\xd7\x3f\x13\x05\x4e\x3f\x90\xf1\x14\x6d\x41\x02\x5b\x1e\x44\x25\x1f\xa8\xd1\xaa\xa0\xa5\x2d\x1f\xe9\x60\x27\xae\xbc\xf2\x9f\xd0\x81\xab\x60\x98\xc5\xfb\x2b\x7c\x0d\x5d\xa8\x2b\xca\xd5\xf8\xc0\x99\xc0\x2a\xed\x1a\x45\xb6\xdf\xe6\x9f\xd4\x0b\x94\xf4\x6b\x7d\x52\x4f\x5e\x2d\xc3\xa7\x7e\xac\xa7\x9b\xa2\x4c\xb0\x86\x63\x6e\x3e\xd2\xcd\x95\x2a\xe8\xd5\xf9\x94\x6e\xbc\x3a\x96\xaf\xfe\x48\x37\x66\x64\x2d\x4e\xb7\xbf\x0e\x12\x7a\xed\x0d\xf2\x19\xe7\x0f\xd7\x6a\x57\x72\xec\xf1\xc7\xfb\xf2\x86\x68\x99\xee\x8f\xf6\xe5\x55\xf2\xb8\xbf\x8f\x77\x66\x97\xb0\xc5\xf3\x7d\xb4\x3b\x5b\xcd\x09\x06\xfb\xeb\x60\xbe\xbb\xea\x83\x0a\x04\x9d\xb6\xe6\x8b\x7b\x47\x79\x54\x53\x24\x89\xab\xa7\xb8\xc0\x4f\xed\x71\x7f\x59\x97\x62\xa5\x3b\xad\x64\x59\xbf\x15\x97\xf7\x51\x43\x1d\x3d\xae\xe0\xc2\xab\xf6\xa6\x58\x1f\x55\xed\x38\x21\x91\x47\x7a\x67\x80\x2b\x8d\x7a\x63\x2d\x2e\xdf\xa4\x7f\xc8\xde\x07\x1a\xed\x99\xd1\xc4\xa3\x27\x94\x09\xfe\x8c\x38\xc4\x69\xa2\x81\x16\x93\xd5\x86\x81\x1d\x38\xbc\xb0\xfc\x83\xe4\x63\xf1\xa7\x9c\xd2\xc3\xf1\xf0\x2b\x52\xc3\xce\x1a\xa1\x6e\xc7\xc8\xad\xc7\xe7\xd1\xfc\xbe\x75\x8f\xd5\xe5\x21\x57\x8f\x8b\xed\x56\xe4\x09\x09\xec\x42\xaa\xe5\x69\x8b\x74\x7a\x5d\x6a\xdd\xfb\x08\xd4\xb3\x62\xf7\x29\x88\x29\x46\x72\x91\x2f\xdb\xbc\x64\x6a\x7c\xd7\x89\x84\x15\x8e\xea\x49\x3d\x96\x12\x5f\x4f\x20\xaa\x8c\xe2\x23\x0b\x3f\x26\xbc\x7e\x1b\x48\x75\xcc\xc3\xc9\x6a\x33\x9e\x52\x0a\x1f\xe7\x11\xed\xcb\x1f\x81\x36\xba\xef\x7a\x8d\x40\xd0\xc7\xf2\x51\x4d\x74\xfd\x51\x3b\xe1\x21\x44\xc0\xf6\xbb\x78\x48\x59\xca\x82\x91\x5d\xb7\xc0\xb9\x5c\xc7\x62\xe7\xf8\xb0\xe7\x45\x77\x16\xdd\xb9\x8d\xa7\x7a\x76\xa2\x67\x22\x1f\x18\x63\x44\x47\xb2\x4f\x29\x75\x24\x4c\x09\xe1\xf9\x0c\xb2\x4d\x8e\xa7\xcc\x4f\xef\x0c\x9f\x1e\xca\x96\x9b\xa2\x94\xa5\x00\x91\x2d\x8f\x4e\xa4\x04\xd7\xbc\xdd\x87\x83\xff\x02\x78\x71\xcf\x53\xb3\xf2\x9c\x47\xb3\x72\x3c\xa6\x9d\xf9\xf7\xce\x99\xd5\x8b\xd2\xc5\x02\xc5\xb0\x8e\x8a\xd6\x31\x0e\x75\x06\x7d\xfd\xdd\x17\xf4\x0e\x1d\x82\x68\xf4\xa4\x4e\x6c\xed\xfc\x0b\xe9\x67\x41\xed\x79\xc1\x3e\x5e\x32\x23\xf2\xfc\x64\x74\x94\x07\x2c\x00\x37\xfc\x70\xee\xda\x0f\x2d\xfd\x8d\x74\x0a\x29\xa6\xda\x69\x37\xfd\xf7\xe2\x7e\x9e\xe1\x59\x4d\xbc\xc7\xce\x36\x03\xc0\x0c\xe5\x9f\xb3\x9a\x4d\xbd\x87\x4d\xa4\xe4\x4c\x83\x9a\xfd\x42\xc4\x95\xbb\xf6\x4b\x9d\x94\xf2\x95\x04\xc7\x37\xc7\xcf\x9d\xc3\x14\x22\x9d\xa4\x68\xe5\x7d\x2d\xb3\x76\x04\x3d\x30\x4c\xce\x51\x62\xe4\x93\x92\x10\x3d\x45\x07\x8e\xb4\xe1\x22\x15\x05\xca\x0b\xfc\xb0\x74\x75\x4d\x74\x54\x10\x31\x8f\xe2\x82\x95\x93\xaa\x4e\x57\xef\x6e\xad\x95\x67\xe9\x26\x55\x0b\xcf\x01\x59\x5f\xd0\xdd\x21\xa9\xf9\x3f\x8b\x45\xdd\x32\xef\xef\xa8\xfb\xca\xbc\xda\x97\xf2\x75\x91\x65\x0a\xd1\x0e\x8c\xcb\x0c\x1b\x82\x78\x93\xae\x6b\x96\xf2\xe1\x14\x34\xa5\x65\x4b\x55\x1f\x34\x7e\x51\xdf\xb9\xda\xef\x76\xa5\xac\xaa\xa7\x49\xaa\x0d\xc4\xdb\xfa\xc0\xd0\x0e\x1f\x42\xd8\x57\xc5\xdc\x0d\xf9\xf7\x87\x75\x9a\x8b\x2c\xbb\xbd\xeb\x96\x02\x97\x43\x7d\xad\x4e\xcd\x22\xa4\xa0\x27\x5b\xa2\xda\xfd\x1f\x0e\x6e\x72\xd1\x55\xf4\x31\x2d\xbd\x93\xb7\x6f\xe4\xef\xe0\x53\x09\x96\xeb\x77\xd0\xfe\xe9\x51\xd0\x39\xbd\xf8\xb3\x51\xbf\xaa\xd5\xbd\xe3\x57\x07\xdd\xd4\xb8\x14\x0a\x7f\x90\x2f\x22\x1f\x13\x74\x0a\xf2\xd4\x5b\x1b\xaf\x32\xeb\x2e\x7f\x29\x55\x5b\xa0\x80\x9b\xaa\xc1\xa7\xa3\xe0\x24\x18\xe1\x14\x5c\x64\x49\x33\x6d\x37\x3d\x07\x05\xe9\xd1\x9c\xbb\xb6\xbf\x6d\xc4\xe0\x8d\xea\x85\xd8\x55\x3d\xaa\xce\x3f\x16\xa4\x66\x9d\x62\x8b\x7c\xc9\x4a\xa6\xa3\xa0\x51\xbb\x0d\xce\x76\x45\x93\x12\xf2\x7d\x5d\x8a\x7f\xc8\xdb\x2a\x0c\x75\x33\x47\x39\xd0\x4e\xd3\x74\xb2\xb1\x1f\xc8\x3b\xe8\x98\xd6\x83\x96\x7a\x55\xef\x9a\xd6\x94\xd9\xdd\x83\x02\x18\x31\xe0\x9d\xbc\xfd\x5a\xa7\x6a\xdb\x7a\x57\x0c\xd4\xb3\x74\x9b\x43\x9e\x36\x0d\xf9\x55\x92\x92\xb2\x4b\x8c\x4f\x3f\x1c\xa6\x6e\x6d\x8b\x16\xda\xf8\x59\x8d\x58\xe1\x49\xbd\x2f\x43\x40\x3d\x9e\xd6\xcf\xb0\x3d\xba\x39\x80\xa3\xd5\xfd\x29\x59\xdd\x23\x82\x35\xa7\x18\x7c\x4b\x35\x0d\x54\xe9\x96\xec\x3d\xde\xf3\xd3\x5f\xae\x8a\xc5\xa3\xf1\x3f\x97\x16\x5c\xe3\x7a\xb2\x2d\x00\x55\xb5\xda\xa6\x07\x1a\xf7\xb6\xdb\x2d\x45\xe1\x58\x09\xa1\x43\x10\x9b\x55\xa8\xc4\xb1\x71\x50\x6d\xbd\x22\xac\xf6\x15\x7f\x4d\x9c\xa1\x10\xbd\x13\x61\x58\x9d\x4d\xa7\x61\xf8\xf0\x3f\x5a\xea\x47\x44\x5d\x1d\xaa\x47\x70\x30\xab\x90\xc1\xc0\xb0\xf6\xba\xcc\xa0\xee\xa0\x82\xe9\x5f\x39\x2f\x9b\x46\xda\x45\xd6\x08\xaa\x10\xd0\xd7\x60\x1d\x86\x44\x8d\x77\x5e\x62\x24\x9e\x61\x1e\x86\x7f\xfb\x1b\x08\xe5\x87\x4f\x54\x97\x57\x73\x69\x35\xbf\xa4\xa7\xf9\xd5\x63\x1c\xa1\xbd\x56\xb3\x60\xa5\xee\x58\xca\xa6\x7f\x1b\xaa\xbe\x4f\x2f\x2e\xbd\x50\x53\xab\xb2\xa8\xaa\x8d\x48\xcb\x8b\x4b\xb3\xec\x47\xd2\x1a\x1b\x9c\x86\x36\xcd\xb1\xc1\xf0\x91\x74\xc7\x2d\x74\xa9\x4a\xa9\x6e\x5b\x3a\x5b\xa8\xdc\xd6\x34\xe4\x11\xa9\x5b\x61\xaf\xec\x58\x02\xca\x76\xd2\x5a\x46\x00\xf8\xef\x77\x81\x82\xfa\x56\xf2\xb6\xd8\x57\xb2\xb8\x96\xa5\xca\xa2\x87\xdf\x3e\xd0\xdc\xa6\xbf\xb9\xcd\xbd\xcd\x1d\x14\x4d\xef\x0e\xce\x1e\x40\x46\xed\x9e\xbf\xff\x68\x10\xa7\x35\xc3\xdc\x8d\x70\xed\xbc\xe0\xda\x06\xb2\x1e\x98\x1b\x92\x8e\x05\x5a\xd3\x68\x98\x03\xb3\x70\xdc\x5b\xa3\x04\x07\x4b\x76\xa5\xd6\xcf\x28\xef\x39\x41\x92\x1e\x11\xca\x8b\xb4\x82\xf6\x00\x95\xf0\x4a\xce\x85\x53\x73\xc4\x93\x80\x26\x46\x60\xec\x06\xc3\x58\xab\xee\x6e\x36\xe9\x6a\xa3\xae\x58\xfd\x79\x36\x8d\x68\xd3\x0c\x35\x60\x1a\x54\xda\xa7\x09\x6e\x14\xb4\xca\x38\xa7\x83\xe0\xe2\x12\x31\xd2\x7d\x7e\x5c\x10\x87\xfc\x39\x18\x95\xa3\xe0\xcf\xc1\xc7\x51\xc8\x01\x8c\xee\x52\x08\x39\xd6\xbe\x6a\x8a\xfc\x1f\xf2\xf6\xb5\xba\x4e\x15\xa2\x3b\xa0\xad\xc9\x4a\xb0\xb5\x60\x1b\x71\x74\x69\xc0\x5e\xd5\xe9\x56\xda\xc8\x06\x45\x65\xdc\x9e\x5f\xee\xeb\xba\xc8\x79\xe9\x51\x6c\x49\x67\xbf\x80\xfa\x35\x86\x20\xb0\x77\x76\xab\xca\x89\x58\xd5\xe9\xb5\x7c\x5b\xec\xd5\x0a\x96\x7a\x78\xea\xae\x2f\xca\xba\x82\x64\x42\xc1\x0e\xb0\xec\x25\x52\x14\x51\x04\xc0\xe3\xd0\x02\xbb\x29\x89\xba\x3a\xe8\x1e\x22\x41\xa2\xf1\x88\x2c\xd1\x0c\x4b\x5c\x66\x0a\xdb\xb0\x0f\x1a\x89\xf5\x57\x8a\xb4\x7d\x8c\xe5\x83\x86\xd7\xfe\x06\xe7\xda\xc8\x51\x51\x35\xaf\xc0\x18\xb2\xe0\xf9\xbc\x4f\xee\x6d\xad\x23\x0d\xa1\xb7\x16\x61\xb8\x16\x93\x55\xb1\xdd\x89\x52\x6a\x25\xcc\x39\x59\x09\xbe\xd6\x50\x17\xd4\x65\xba\xcb\x64\x40\xe3\x95\x08\xc3\xd5\x71\xd9\x35\xd2\x3f\x1b\xa1\x53\xd8\xca\xd4\x4c\x8a\xfd\x25\xd4\x54\xed\xb5\xcb\xd8\xd6\xf1\x31\x36\xa0\x07\x92\xb3\x94\x1a\x45\xa8\x60\xa0\x6d\x2b\xb5\x19\x18\x9b\xc2\xb5\x6a\xcc\xda\x74\xec\x15\x67\xb3\xd7\x93\x4c\x50\x85\xbe\x0d\x50\xa8\x51\x88\xa4\x72\xf0\x38\x4b\x57\xef\x82\x81\x19\xa6\x3a\x0c\x05\x0f\x9e\xe0\xaf\x51\x11\x9b\x99\x73\x50\x9f\x2d\x78\xf0\x16\x7f\x8f\x0a\x47\xf8\x2b\x90\xff\xa1\x20\x05\xe8\xec\xd5\x73\xb4\x17\x89\x1f\xc2\xf7\x8b\x34\x49\x32\x19\x18\xbb\x11\x3a\x2a\xc0\x3b\xd0\xc7\xef\x54\x60\x25\x90\x62\x66\xc3\xba\xad\x7b\x9b\xff\x1b\x34\x70\xce\x31\xd0\x63\x9b\xda\xfd\x30\x6d\x9b\xe3\x19\x4e\x59\xce\x0a\x38\x2f\x6a\x82\xe9\xbc\x0d\x56\x48\xee\x89\xb9\x07\xd2\xcf\xc9\xaf\xb9\x82\xc4\x88\xc6\xb2\x7b\x39\x63\x90\x50\x76\x1c\x7d\xd6\x7a\xc8\x93\x35\x3a\x40\x20\xc1\xaa\xc8\xd7\xe9\xd5\xbe\x44\x17\x3b\x81\x02\xed\x7c\x6e\x2a\xc4\x77\x07\xdf\x7b\xd3\x3e\x4f\x6b\xb3\xab\x97\xf3\xd2\x23\x85\x4a\x7b\xeb\x96\x1a\x1b\x0f\xb0\x38\x2f\xe6\x81\x62\xa8\x04\x40\x9b\x05\x3b\xd8\x37\x90\x4c\xc6\x0e\x2c\xea\x39\x0a\x10\x63\x14\x8e\x1f\x6c\xbf\xf8\x60\x60\xc2\xd6\xe2\x2f\xb5\x13\xa9\x75\xbf\xe9\x65\x28\x8c\x63\x06\x66\x3c\x29\xa7\x13\x91\x24\x2f\xe5\x0d\xd4\xc1\x4f\x7e\x35\xf7\x07\x6d\x48\x05\x5b\x61\x5b\x5c\xcb\x57\xf9\x93\x52\x5c\x41\x25\xf7\x93\x0f\x89\xaa\x8a\xb3\xf4\x6a\x5a\x58\x4d\x0f\xc6\xdd\x56\xe6\x34\xa3\x07\x8e\xf4\x55\xf8\xe6\x49\x59\xec\xc2\xf0\x2d\x06\x79\x6b\xc3\x97\x5b\xa2\x12\x44\x2a\x9e\x81\x6c\x4d\xe9\xf9\x78\xaa\xa0\xb6\x26\x90\xa3\x9d\xc1\xa6\x4b\x6a\x5f\x7b\xe9\x59\xa4\xee\x82\xf7\xdf\xc9\xec\x3c\xa2\x58\x36\xd5\xee\x70\xe9\xb9\xcd\x3b\x8b\x68\x0f\x84\x19\x26\xca\xdc\xb9\x85\xc2\xa3\x19\xff\x29\xef\x3c\x6a\xef\x61\x4d\x7a\xd1\x2e\xb5\xac\x84\x6f\x13\xab\xda\xd9\x49\x92\x82\x9f\xbd\x9d\x2c\x27\xc5\x4d\x2e\xcb\x27\x6d\xe2\x42\x51\x1d\x19\xfd\x78\x39\x7c\xc4\x5b\xe9\x92\x66\x14\x68\x08\x8b\x52\x09\xb6\xee\xc9\x2c\xb0\xf9\x02\x59\x80\x9a\xb2\x5c\x83\x42\xd3\xfc\x90\x1a\x91\x00\xd2\x84\xf8\x9f\x81\x34\xb6\x6f\x1a\x11\x86\x7f\xe7\xbc\x9a\xf7\x5f\x2a\xf7\x8c\x77\x72\x59\x24\xb7\x16\xb5\xa6\x3d\xf6\xc8\x71\x27\x11\x7c\x4c\xb6\xde\x49\x0b\x5e\x34\x0d\x48\x1b\xc4\x65\xa5\xe8\xf0\x2c\x95\x79\xfd\xd3\x58\x9a\x2f\x3a\x3a\xca\xfd\xd9\xe6\xfe\x4c\xcf\xf9\x34\x3a\xb0\x35\x3f\xbe\x02\x0b\x75\xdf\x0d\xee\xdf\x4a\x08\xcf\xdd\xb3\x95\x19\xcb\xc0\xc4\x99\x0f\x73\xef\x58\xb0\x4e\x23\x08\xe1\x3d\x89\x84\x0e\x36\x9f\x08\x09\x1f\x2d\x67\x21\x61\xf3\x21\x48\x38\xca\xd4\x90\x70\x03\xa1\xe4\x3e\x48\x26\xf4\xed\x19\xc4\x07\x65\x35\x2b\x68\x4f\xb4\x8b\xe3\x13\x04\x80\x35\x00\x88\x1b\x68\xd5\x79\xb6\xe7\x05\xf8\xe5\xc9\xf8\x5e\x9f\xe1\x41\x6e\x51\xd4\xd0\x00\xde\x9c\x54\x58\xce\x37\x91\x67\x82\x57\xe7\xe3\xe9\x3c\x5b\x54\xcb\x58\xcb\x39\xc1\x8e\x3c\x26\x42\x97\xb6\xf1\x10\x58\xe5\xa5\xa0\x37\x67\x30\x68\x72\x08\x99\xf3\x1c\xb1\xba\x3b\x0b\x44\x70\xbf\x59\x06\x9e\x1d\x90\xde\x04\xe7\x0e\x15\x1f\x4f\x9d\xb3\xc4\x15\xdf\x21\xab\xa9\xdb\x19\x08\x6e\x87\xff\x7b\x4a\x84\xf5\x4c\xcd\xb4\xa7\x6a\x7b\xaa\xe2\xd5\xc1\x74\x3a\x1f\x4f\xd5\xd9\x22\x15\xcf\x8c\x4f\x87\x6f\x53\x52\xb0\x9b\x94\x48\x00\x36\x0c\xdb\x2a\x96\x94\x55\x94\xdd\xe1\x56\xc6\xc3\xa9\xf5\x5f\xf0\x00\xa0\x21\x38\x50\x1a\x67\x36\xbc\x7c\x18\xaa\x35\x32\x72\xfa\x30\xc4\xfb\xc6\xcc\xb8\xb5\xce\x7e\x6f\xc6\xd2\xad\xa2\xa6\x63\x93\x56\x8d\xa6\x54\x5d\xb8\x1f\x1c\x81\xd9\x5b\x1a\x7f\xa5\x1a\xad\x98\x60\xbf\x83\x0d\x5d\x84\x73\xd2\x7e\xb6\x17\x62\xa9\x5a\xfa\xdd\x95\x07\xe0\x58\xf3\xd2\x11\xd9\x1b\x4d\xb8\x44\x43\x5e\xd7\x64\xcd\x6a\x20\x92\xd7\xbc\x66\x7d\x3b\xe8\xc5\x54\x5f\x2c\xe1\xea\xe9\xbe\xf7\xac\xf8\x33\xf2\xb3\x24\x85\x11\x7c\xa2\x5d\x4a\x39\x59\x6d\xe0\xb0\x99\xdc\xda\xcf\xad\x75\x6e\xe2\xe2\x10\xac\xd8\x86\xb2\x9d\x93\x80\xc2\xef\x2d\xf7\xdd\x37\x3a\xf7\x71\x94\x5d\xb7\x22\x18\x58\xf5\x1a\xe7\xda\xb1\x5d\x9e\xce\xb6\x67\xfc\x7a\xb6\x35\xf2\xa9\x5b\x0e\x83\xda\xea\xf1\x5c\xf1\x9f\xc9\x2d\x4b\x58\x46\x07\x09\xe7\xbb\x79\xda\x12\xf8\xcb\x9a\x6c\xd9\x15\xbc\x17\xa8\xbf\x94\xc6\xb7\x06\x1c\xae\x14\x32\xba\xb7\xac\x6a\x74\xc7\x32\x4a\x29\x3d\xa4\x36\x2e\x6e\xbb\x02\x1e\x07\x07\x2a\xfb\x4e\x90\x04\x0f\x62\x52\x04\xd4\x0e\x70\x30\x0b\x36\x07\xb8\x25\xe1\xd7\xf3\xbc\x2e\x7e\x48\xe5\x8d\x62\xa8\xed\xa9\xba\x64\xbf\x72\xc1\x6e\xf0\x6c\xd5\xe6\x6c\xb1\xa7\xfc\x57\x7d\x9a\x06\x75\x4d\x6e\xcc\xc9\x7a\x4a\xcf\xa3\x39\xb9\xe4\x37\x78\xc2\x9e\xf2\xa2\x26\xbf\x1a\x82\xc0\x94\x52\x08\x42\x15\x31\x75\x78\xaa\x0a\x01\x5d\x70\x63\xc2\x4e\xa8\xae\xdf\xf3\xee\xbc\xe8\xe0\xfd\xa2\x5a\xf6\x45\xcf\xe4\x26\x84\x8a\xa2\x7c\xb1\xf3\xf4\x48\xbc\xae\x30\x4e\xc4\x15\x04\x2b\x04\xa9\x48\x45\x14\x71\x2b\xc0\xd5\xc2\x6e\xc3\xd7\x0e\xac\xf1\x51\xda\x76\xbb\xaa\xb3\x04\xdf\x23\xf8\xae\x36\x4e\x52\xce\x9c\x0d\x33\x9a\xe1\x0c\xb9\x2a\x10\x86\xd5\xa4\x2e\xf0\xbb\xdd\xca\x9e\x65\x5c\x8c\x74\x61\x0e\x05\x38\x27\xd3\xa1\x33\x05\x8a\xe2\xa9\x19\x76\xd6\x34\x99\x7b\xac\x73\x0d\x29\xaa\xb8\x15\xe3\x9b\xee\xb9\x4e\x19\xeb\x84\x07\x04\xbc\x05\x71\xde\x79\x58\x98\x4f\xe3\xf1\x94\x9e\x47\x3e\x12\x85\x79\xe5\xf0\xa6\x6a\xe7\xb5\xe6\xab\xb1\x68\x1a\xa2\x92\xc7\x30\x8d\x07\x9e\xc1\xd2\x7c\x3c\x55\xa3\xdc\xf3\x15\xe7\xd9\x78\xda\x34\xea\xef\x7c\x7d\x16\xc5\xeb\xf3\xe8\x80\xde\x44\x8a\x45\x36\x22\x7b\x55\x32\xa2\x4b\x96\xf0\x3d\x9a\x3c\x6d\xf4\x3c\xd9\x8e\x27\xf3\x0d\x9a\x3d\x6d\x26\x75\xc1\xb6\x3c\x39\xb6\xd9\xb2\x0c\xb3\x5a\xa6\x9d\xbf\x7f\xdb\x79\x6d\x6e\x20\xfd\xee\xa7\x8f\xf2\x8e\x6d\x29\xcb\x6d\x20\x6d\x0c\x18\x52\xb0\xa7\x94\x5d\xb6\x4e\xd0\x7b\x75\x4a\x7e\xd7\x6e\x30\x12\xee\xee\xfa\x2b\x59\x7f\x59\xec\xc1\x34\xf8\x31\xd0\x31\xdf\xc9\x55\x4d\xd4\x80\x3d\x27\x46\x5b\x52\x3b\x41\x7c\x8b\x25\x05\x6a\x93\x4f\x4f\x23\xa6\x58\x3c\x24\xf6\xba\x84\xd6\xa7\x92\x99\xd7\x9f\x50\x52\x91\x2b\xb7\x94\x15\x47\x3e\xe5\x9d\xff\x78\x98\xe2\xf5\x31\x25\x1d\x0d\x39\xaf\xb5\x84\xa5\x0a\xc3\x57\x6a\xac\x73\xf7\xe4\x43\x4a\xf3\xee\x3a\x1a\xed\x30\x30\x3b\x5e\xc7\xa5\xba\x8e\xfb\xae\x01\x38\x37\x95\x06\xd4\x81\xbd\x3d\x2a\xb6\xa6\xe0\x52\xb6\x23\xc6\xdd\x90\xca\x18\x6f\x3f\xca\x49\xca\x0a\x3a\x23\xe8\x25\xcb\xb8\xe3\xc4\x5f\x67\xe8\x63\x93\x86\xa1\x47\x2f\xfd\xd4\x79\x1f\xdd\x71\x2e\xc2\x10\x82\x2f\x52\x36\xfd\x22\xf2\x30\x5a\xa6\xce\x19\x92\xa4\x67\xc9\xa4\x2e\x76\xf3\xf1\xc3\x28\xb6\x69\xe7\xc9\xe4\xb2\xa8\xeb\x62\x3b\x7f\x18\xc5\xd1\x20\xfb\x84\x6e\x7c\xaa\xd5\x7a\x45\x1c\xf1\x8c\x81\x21\xfd\x81\x32\xd5\xff\x81\xd4\x34\xde\x82\xcf\x2c\x76\x8b\xab\xbf\x75\x64\x6d\x1b\x68\x6e\x3f\x95\xde\xbc\xfe\x04\xca\x14\x41\xc2\x91\x8a\x8a\xc7\x47\x0e\x3f\x7e\x23\x21\xfc\xbd\x93\x40\x85\x21\x08\x1b\xe3\x87\x8a\xf1\x27\x79\x18\xfe\x60\x7c\x04\xe5\x1f\x21\x4f\xcb\x1e\xf2\x94\xc6\x9f\xe3\xdb\xc9\xfb\xf9\xb1\x48\xf0\x71\x91\xab\x6b\xf4\x85\xcc\xf7\xaa\xc7\x1b\x05\x83\xd4\x97\xe4\xee\x5a\x8f\x8c\x9a\x62\x2a\xfd\x38\x91\xbf\xa6\xa4\x66\x08\x67\xc8\xae\x7b\xf9\x18\xc2\x12\xf4\x85\x6a\xa2\xcb\x00\x2f\x7f\xdc\x86\x33\x53\x8d\xc0\x7d\xa8\xa7\x7b\xee\xd4\xce\xcd\x03\x65\x09\x97\xce\xa0\xdd\x42\xae\xad\x72\x31\xa4\xb9\xc5\x0a\xdd\xf7\x31\x56\xe0\x03\x46\x5d\xec\x57\x1b\x59\xd1\x94\xdb\xef\x45\xb4\x34\x5c\x14\x2b\xfa\x92\x7f\x46\x41\x60\x5d\xde\xde\xa9\x6a\x7e\x59\x5d\x40\xbb\x4d\xb2\xc2\xd9\xe1\xf4\x90\xae\x49\x7a\x8e\x44\xcf\x3a\x2b\x8a\xd2\x7b\x16\x45\x3f\xe5\xd5\x7d\xf8\x6d\x52\x82\x0f\x6a\x27\x88\xca\x01\x34\x0c\xe3\xe0\xb1\x15\x15\x17\xf6\xfd\xe1\x9e\xc6\xd0\x67\x6b\xa5\xcf\x55\xd3\x0c\xaf\x24\x08\xa7\xcc\x3e\x3c\x85\x86\x8b\x31\xc4\x9c\xd9\x8d\xc5\xe4\x3a\x95\x37\xaf\x40\xf3\x74\xd0\x8e\x68\xde\x1d\xff\x9b\x9d\x5c\xf5\x05\x37\x17\x76\x7e\xab\x4d\x9a\x25\x2f\x8b\x04\x62\x9c\xab\x81\x64\x61\x98\x7d\x78\xd6\xe7\xd6\xbf\xc2\xc9\x16\x06\xca\x24\xfb\xc9\x90\x12\x85\xef\x35\xca\x1b\xc4\x62\xbf\x74\xcf\x2f\x4c\x51\x48\xb2\xfd\x30\x71\x2d\x5a\x61\x54\x35\x70\x58\x7f\xf1\xe9\xea\x1d\x86\x79\xb1\x15\x6e\x75\x85\x1b\x6f\xdb\x58\xdd\x7a\xd9\xd1\x26\xfc\xb8\x9e\xa6\x29\x77\xae\x02\x6f\xff\xfa\xbb\xf5\xca\xb2\xa1\xd6\x57\xc6\xc7\x0d\x28\xb5\xc2\xfc\x2d\xb4\xd5\x34\xef\x41\xee\xf5\x81\x73\x5c\x7b\xc3\xbf\x12\x6d\x77\x5d\x06\x45\xd9\x45\xe2\x1f\xc8\x33\x6f\x64\xe4\xf4\xa2\x7a\xb0\xda\x8e\xab\xf1\xc5\x9b\xd1\xe9\x15\x0b\x02\x3a\xf2\xb8\x89\x8d\xf4\x8b\x92\x5f\x9a\x8b\x8a\x5e\x54\x0f\x54\xc1\x13\xa8\x15\x50\xf6\x47\x49\x24\x3d\x6c\x84\x1f\x81\x17\xc5\xd9\x47\x32\x49\xdf\x3b\x63\x9d\x6e\xe5\xe8\x2f\x51\x74\x2e\xc3\x10\x69\xc6\xda\xbe\x46\x50\x78\xad\xf1\x1e\x24\x0e\x70\x2a\x2e\x05\xbf\x33\x0e\x33\x8e\x9d\x3e\x7a\x0f\x5e\x93\xe7\x79\x5a\x07\x87\x03\xfb\x55\xf0\xbb\x03\xbb\x11\x2d\x07\x3b\x4f\x7d\xbc\x37\xac\x87\x7c\x48\xca\x30\x2c\x87\xfc\x52\x38\x7f\x2e\x2d\xc7\x65\xcf\x74\xd5\x8a\xa5\xbc\x9e\x6f\x64\xbc\x93\x83\xd4\x57\x81\xe8\x93\x46\x28\xea\x4e\x94\x8a\x1c\xb9\xb7\xa4\x44\xc7\x55\xf9\x04\x3e\x3e\x54\x12\x1f\xe3\xf2\x89\xfa\xfb\xa1\x72\x99\x04\x8b\xb9\x7c\x02\x1f\xf7\x97\x2c\x76\xaa\x90\xfa\xeb\x1f\xa1\xf7\x1a\xa4\xcc\xfe\x83\xd7\x7b\x05\x3a\x69\x7e\x35\x27\xbf\x91\x23\x80\x6a\xbd\x32\xaa\xb4\xc0\x3f\xbd\x55\xfa\x87\xba\xb0\xeb\xdb\x4c\x2a\x9e\x10\x1d\x85\x05\x41\xb7\x04\xa6\x83\x57\xb8\x98\x3c\xfa\xb4\x4e\x7e\xa8\xe1\x49\x5f\x80\x58\x27\x83\xff\x01\x0e\x3f\x7c\x87\xfe\x01\x5a\x50\xf0\xee\xe3\x26\xfd\xa6\xa5\x09\xe0\x5e\x24\xeb\x4e\x0c\xe5\x37\xa2\x15\x43\x59\x57\xc3\x00\x30\x7a\xc1\x78\xcd\xeb\xf9\x37\x8a\x0e\xb9\x3b\xb0\x6f\xc8\xaf\x82\xd5\xcc\xbc\x85\x2b\xb6\xe9\x5a\x64\x7b\x39\x38\x7a\x9c\xc8\xe7\xd6\x93\x71\xce\x6a\xf0\xa7\xca\xb4\xaf\xb4\x96\xfa\x18\x38\xf4\x33\x2a\x4b\x31\x16\x04\x1f\xc5\x7e\xf8\x62\xf8\xa1\x9d\x8c\x26\xc5\x8a\xe7\x83\x6b\x1b\x1d\xe2\x8d\x40\xac\xf2\x46\x6d\x49\xb5\xa8\xbd\x5f\x4b\xed\xe4\xb6\x30\xde\x4e\x61\x0b\xa0\x56\x92\x02\x69\x93\xaa\xd9\xb6\x5c\xf3\x14\x16\xaf\xb8\x0d\xc2\x27\xc2\x2b\xa1\x9b\xab\x5b\x30\xe4\x3c\xa7\xde\x83\x96\x46\x3c\x38\x39\xde\xec\xef\x73\xd3\x1a\xb8\x8f\x56\xf4\x1c\xbf\xd3\xda\x2b\xf1\x62\xc9\xd4\xa1\xc8\xc4\x2d\x7c\xab\xd9\x7f\x25\xf3\x38\x82\x54\xd4\x52\x1b\x4e\x59\x22\x33\x71\x9b\xe6\x57\x5f\x66\xfb\x12\x62\x0b\xa8\x44\x20\xa5\x64\x02\x41\x0a\xfc\x27\x1b\x95\x00\x3e\x14\x9f\xe7\xab\x62\xab\x90\xcd\x78\xca\x56\xfb\xda\xff\xd9\xa2\x27\xa1\x07\x4f\x6e\xaa\x7e\xdb\x78\xd5\xc0\x37\xfd\xc1\x50\x71\x04\x75\x19\xaa\x9d\x5c\xa5\x22\x43\xe5\x55\x60\x19\x58\x3d\x11\xfb\xba\x80\x11\x85\xe1\xf0\x36\x0c\x8b\x36\xbd\xc7\xac\xea\xc5\x47\xa8\xc4\x3e\x25\x24\x88\xbd\xf4\x30\xa2\x47\xb1\x58\x7c\x9f\x7e\x1b\x49\x6a\x0f\x47\x00\x69\x9b\x80\x81\x37\xd0\xd2\x89\xa0\x40\x0b\xfb\x65\x92\xcb\x6c\x85\x17\xab\x1e\xdd\xfc\x88\xe9\x81\x87\x55\xe9\xc5\xeb\x30\x32\x46\x6a\x7c\xc4\xea\x7b\x1b\xbd\xd0\xfa\x17\x31\x78\xa1\xad\x9d\xe2\x9a\x47\x6f\x96\x74\x60\xe5\xf8\xb9\x15\x4c\x68\xe3\xa7\xc3\xc1\x93\xd6\x3a\x82\x40\x8f\xa2\x69\xa0\xd5\x03\xed\x4e\xd8\xbf\x8b\xfb\x9e\xe2\x6f\x8d\x2e\x0d\xaa\xb6\xb0\x9c\xdf\xc9\x3c\x89\x23\xef\x66\x49\x09\xbd\xab\xdb\x6f\xe0\xa4\xbc\xc7\x57\xa3\xf3\x70\xe4\x8a\x23\xfb\xc8\xa6\xf2\x73\xca\x88\x3a\xcb\x5e\x1e\x9d\xc8\x3c\xf1\x5c\xf1\x7a\xaa\x4c\x96\x4e\x31\x41\x3b\x32\xb9\xb6\x4f\x9c\xd6\x8f\x3e\xa4\x8e\x25\xfc\x01\x21\x8e\x22\x05\x25\xf8\x52\x31\xc0\xf3\xa0\x1c\xe5\x0f\xf2\xf3\xbf\x44\xd1\xa1\xb3\x38\x40\x2e\x1b\x31\xbb\x99\x44\xea\x6d\x6f\xaa\x36\xd0\x07\xaf\x74\x4d\xa6\xe8\xbd\x1d\x08\xed\xb6\x54\x45\x3f\xbc\xd6\x2e\x7f\x11\xb9\x88\x0b\x93\x52\x24\xe9\xbe\xfa\xe9\x8c\x4f\x41\x9d\x07\x7e\xfd\x7c\xc6\xa7\x07\x02\xdd\x00\xc4\xa4\x54\xad\x75\xaf\x12\x01\xc4\x20\x31\x4b\x5e\x52\x2d\x6a\x72\xef\xf4\xed\x35\xbf\x83\x69\xc5\x05\x53\x1c\x1f\x20\x83\x5d\x29\xaf\xe3\x62\xac\xae\xe5\xe4\x8c\x7f\x1e\x45\xf3\x5c\x9f\xd2\x29\xc6\xf1\xf0\x67\x04\x8a\x62\x5e\x7b\xb0\xbe\xae\x94\x62\x30\x76\xe2\x4a\xfe\xc4\xda\xa5\xea\x62\x77\x5c\xe8\x67\x70\xba\xdb\xb7\xf4\xc8\x8d\x7a\xe0\xd3\x05\xb3\x76\xeb\x30\x15\x8e\x41\x0d\xfb\x9a\x93\x60\x10\x6e\x5a\x73\x21\x61\xfd\x46\x06\xe8\xad\x19\x7c\x43\xb3\x92\x86\x21\xfa\xa2\xca\x61\x82\x20\x52\x87\x5e\xc2\xd0\xac\xeb\x58\x53\x3c\x67\x9f\x47\x91\x73\x1d\xd4\xb2\xdb\x6a\x75\x60\xec\x96\x06\x82\x0f\xf3\x89\x5a\xf4\xa6\x51\x37\x20\x7e\xd3\xb9\x91\x27\xb1\x8a\xc6\xba\xc0\x51\x29\x5d\xb4\x85\x1c\x2a\x1a\x3b\xc6\xb3\xea\x65\x3c\x2b\x9f\xf1\x64\x1d\xcb\x74\x61\x10\x8a\x40\x84\xc2\xa4\x45\xc2\xa0\x4f\x78\x48\xc9\x7d\xeb\xba\x52\xb4\x42\x16\xb0\xf4\x28\x1b\xbf\x3a\x5b\x68\x85\x1a\xc8\x61\xa2\xdf\xd4\x30\x24\xbf\x01\x86\xec\x91\x79\x50\xf6\xb2\x37\x0b\x02\x41\x0c\x23\xca\x80\x9f\xb2\x9d\x49\xda\x33\x50\x40\xec\x37\x1b\x29\xb3\x5e\x34\x77\x95\x6a\x34\xd7\xad\xf7\xe4\xd5\x0b\xd0\x1b\x78\xd3\x9d\xc9\xbd\x75\x2d\xfd\xd6\x33\x79\x7b\xd6\x0d\x0d\xe0\x05\xbf\xe8\xa4\x41\xd4\x8b\xe8\x00\xfe\x8c\x7d\x62\x5c\xe1\xdf\x96\xe9\x90\x22\xe2\x0c\x92\x7f\x0f\x48\x1e\x88\x80\xfe\x02\xa4\x4f\xc8\xed\x5f\x4d\xe6\x50\x58\x5f\xc3\xab\x52\x8a\x5a\x1a\xe1\xcf\xb3\x52\x5c\xa9\xbf\x84\x0e\xae\x73\xa3\x05\xd0\xe7\xef\x18\xa2\x12\xf6\xb8\x41\x7e\x41\xc0\x6c\x51\x6b\x26\xfa\xda\x7a\x90\x5f\xf9\x84\x90\xaa\xa6\x93\x5b\x14\xb6\xf3\xc5\x8c\xe6\x31\x68\x84\xd5\xdb\x9f\x57\x0b\x5b\x7a\x92\x5e\x53\xca\xde\xf6\x17\xce\xe9\x01\x79\x55\x06\x0b\x49\x0f\xac\x6a\x5b\x46\xdf\x67\x0b\x9c\xae\x89\x08\x43\x32\xec\x7b\x4e\x6e\x1a\x8b\x83\xc7\x2f\x8a\x33\x50\xbf\x82\xe6\x3d\x1d\x2c\x79\x0f\x31\x00\x28\xae\xe5\xc5\xbb\x6a\x79\xf1\x46\xcf\x11\x9e\x61\x39\x80\x8b\x5f\x5e\xae\xd7\xe8\xaf\xa2\xb8\x91\x09\x0f\x56\xc5\xee\xf6\x05\x60\xd5\x9e\x76\x4b\x71\xf5\x7c\x2b\xae\x64\x18\x0e\x37\x96\x6e\x79\x41\x82\x74\x7b\x15\x78\x6a\x03\xc1\xae\xa8\x52\xd5\x5d\x7c\xb2\x4e\xdf\xcb\x64\x76\x02\x76\xa9\x27\xd1\xec\xa4\x2e\x76\xea\x6f\x40\x07\xe5\xa4\x2a\x57\x3c\x50\x7d\xc4\xa9\x6a\xf4\xf4\x2a\x5d\xcf\x2e\x45\x25\xff\xfa\x17\xf6\x5d\x94\x7d\xf5\xea\x49\xb6\x79\xf4\xed\xa3\x2f\x1f\xa9\x7f\x8f\xbf\xfe\xe2\xcb\x47\x4f\xff\xf1\xe8\xd1\xd3\x47\xdf\x40\x82\x4a\x7f\xfa\xe8\xd1\xa3\xe7\x8f\xdf\x3e\x7a\xfa\xe8\xd5\x0d\xe7\x01\x5b\x43\xb4\xc7\x1b\xe0\x9b\x4a\x1d\xce\x8c\x4f\xd9\x31\xbf\xaf\xfe\xcf\x13\xf4\xd0\x5d\x52\x56\x4e\x7e\x55\xf7\x4e\xa9\xad\x8e\x01\xa1\x7c\x60\xf6\xa4\x64\x91\xc2\x9c\x6b\x70\x88\x0d\x21\x3c\x5e\x16\x49\xdb\xef\x77\x69\x00\xe5\xc0\x14\x37\x19\x03\x01\xf8\xb8\xa0\x0c\x18\xd0\xfe\xa3\x07\x8e\xc6\x0f\x07\xe3\x48\x54\x5f\xe2\x57\xb2\x7e\x96\xca\x2c\x41\xa5\x81\xbd\x55\x4e\xed\x01\xb9\xbd\x30\x5e\x3d\x0d\xb2\xc1\xe2\x1e\xb9\x5a\x69\x72\x15\x33\x80\xb6\xd7\x39\x99\xcb\x01\xb4\xde\xdb\xc3\xd3\xbc\xdd\x78\xc7\x6f\xb6\x2b\xf8\xde\x14\x3c\x68\x1e\xe5\x49\x41\x28\xfb\xbd\xc5\xb1\xf4\x45\x99\x63\xaf\x75\x80\x8d\x9c\x76\x69\x7f\x1d\xba\x66\x23\xaa\x67\x78\xed\xb4\x75\xc1\x9e\x62\x64\x21\x0a\x3a\x25\xef\x4d\x47\x37\x82\xde\x88\xae\x7f\xda\x8c\x86\xe1\x8d\x58\x64\x4b\x52\xb2\x7a\x91\x2d\xd9\xa5\xa0\x83\x2c\xb5\xbc\xd9\x3a\xcd\xd3\x6a\xf3\x1c\x9e\xc8\xfd\x5f\x58\xc0\x32\x7b\x2b\x1e\xcd\x56\x67\xaf\x84\x93\x03\xae\xe8\x2b\xb1\x58\x2d\x81\x0e\x37\x23\xd8\xab\x36\xda\xdc\x5e\xa0\xf8\xe2\x6d\xfa\x87\xcc\xe4\x55\x7a\x99\x66\x69\x7d\x1b\x70\x7e\x25\xeb\xc7\xc5\x76\xb7\xaf\x65\x02\xac\xa7\x36\x34\x54\xf8\x08\x1e\x7e\xbf\x93\x79\x22\x4b\x64\x17\x6d\x96\x16\x23\xb4\xf2\x79\xa0\xd6\x2d\xa0\x87\x37\xc2\xb8\xae\xa9\xf8\xaf\x82\xbd\x11\x9a\x21\x47\x4b\x81\xb2\xe2\x37\x02\x80\xed\x95\xe0\x8b\xa5\x23\xd7\x1f\x1d\xcb\x8f\xb5\x0a\x87\x0e\x19\x09\xe4\x3b\x9a\x23\x32\x6d\x47\x8a\xa9\x05\x70\xd9\xda\xf4\x6a\x9e\xf2\x04\x23\x12\x22\xce\x8b\x4b\x1e\x28\xb2\x24\x70\xb2\xdc\xee\xf3\x7c\x85\x2f\xdd\x10\x66\xfb\x19\xa9\xf0\xbd\x1b\x50\x8a\xa0\x03\xcd\xe2\x82\x5d\x6c\x18\x12\xff\x27\x4a\x49\xa0\xd9\x8c\xad\x38\x56\xd4\x11\x2c\x4f\x7f\xb9\xa8\x1e\x9c\x52\x45\x48\x2b\xca\xad\x69\x4e\x2f\xde\x68\x45\x76\x2c\x47\xb5\x6a\xa4\x37\x0f\x92\xf1\xd6\x54\x48\xca\x74\x9b\xf8\x20\xbc\x32\x64\x3b\x33\x4d\x70\xfe\x7d\xd3\x64\xe7\xd3\x2f\x22\x6c\x6e\x68\x2c\x12\x06\x66\xd6\x07\x74\x99\x98\x41\x24\xeb\x20\x2f\xea\x60\x80\x19\x9c\x97\xf3\x8c\xd7\xe7\x05\x5a\x19\xce\x8d\x0e\x82\xb1\x2b\x34\x0b\x10\x47\x31\xac\x39\x96\xdf\x7b\xf2\x48\x1c\xe4\xf7\x79\x5a\xc7\xce\xc8\x56\x17\x1b\xf7\x17\xeb\x86\x68\x54\xb3\x56\x8d\x96\x94\x65\xbe\x65\x97\x55\xca\x08\x02\xb6\xe1\x11\x86\x28\x6b\x37\xf8\x63\x5a\x6f\xde\x8a\xcb\xca\xc6\x70\x48\x7c\xc9\x7f\x76\x2a\xe8\x2c\x99\x8d\xc7\x09\xdd\x8c\xb8\x60\xeb\x11\x0f\x2e\x6a\x30\x3c\xda\x9c\x65\x61\x48\xd6\x23\xfe\x0f\x92\x8d\x37\x94\xb2\xf5\x90\xaf\x8c\x2c\x69\x5d\x90\x82\xad\xe1\x35\x44\xe1\x5a\xf8\xeb\x96\xdd\x1a\x06\xb2\x23\x30\x60\xc3\xc8\x9e\xd0\x1d\x8f\x66\xbb\xb3\xa2\x27\xa6\xff\xce\x28\x57\x6c\xb9\x9f\xbd\xd8\x01\x94\x6c\x9d\xef\x0c\xce\xeb\x30\xdc\x1a\xe7\x47\x67\x76\x08\x77\xf8\x9a\xd9\x1e\xd7\x00\x14\x5e\x76\xe6\xc9\xf7\x9a\x5d\xbb\x90\x48\xfa\x34\x42\xb4\xe1\xb4\xfe\xba\x28\xde\xf1\x1e\x33\xc1\x57\x42\x07\x3e\xa2\x78\x0f\xbc\xeb\x9a\xa6\xbc\x05\x59\xe4\x3b\xc1\x3d\x77\xb4\x2f\xc4\xb1\xca\x31\x1e\xd8\x63\x73\x34\x96\x37\x0d\xc9\x7d\x85\x1b\xe1\x58\xc0\xf1\xc3\x28\x62\x15\xd7\x91\x32\x38\x4f\xc1\x10\x05\x08\x96\x96\xe0\xe7\x5c\xb0\x3d\x7f\x0d\x8f\xca\x19\x37\x81\x8f\xab\x30\xcc\xdb\xab\x7c\x3e\xa5\xe9\x9a\xbc\x13\x61\xf8\x4e\xe0\xf1\x41\xb7\xd9\x17\x79\x40\x39\xd7\xbc\x79\xbb\xca\x9f\x4c\x49\xfc\xc9\x79\x44\xef\x32\xc0\x4e\x2d\xa4\xdb\x2e\x35\x5b\x8d\x46\x34\xd3\x8e\x6e\xfd\xd8\x2f\xba\xd8\x62\xb5\xa4\x54\x9f\xbf\xbd\x6d\xb9\xd3\x73\x18\x3a\xc0\x86\xc9\x42\x13\xaf\x65\x69\x89\x27\x38\x22\xdf\x92\x7d\x8f\x87\xa7\x85\x5c\x1e\xa8\xbb\x19\xd6\xdc\x3c\x33\xef\xe1\x62\x7b\xae\x80\x95\x6d\xba\x5d\x8e\xa7\xb3\xcd\x39\x8f\x66\x9b\xf1\x18\xb7\x2d\xb1\x25\x16\x9b\x25\xdb\xf1\xc4\xa8\xb0\x6c\x79\x02\x8a\x2a\x83\xc4\x29\x73\x81\x74\xfe\x3c\x9a\xef\x14\x10\xee\xb4\xda\x01\x28\x4a\xd0\xd8\xec\x9a\x15\xf6\x85\xe1\xb0\x9a\x6f\x55\xc9\x2d\x96\xb4\x1a\x49\xa8\x5b\x74\xec\xf8\x8b\x6d\x27\xab\xcd\xe8\x33\xb2\x37\x61\x05\x29\x8d\x2b\xb5\x93\xb0\x9b\x18\xf8\xb5\x92\xf7\x6c\x6d\x18\x92\x1d\xdf\x7a\x03\xb3\x2f\x99\xd7\x3a\x7e\xcf\x8e\xd5\x45\xbc\xc5\x98\x3d\xd9\x3c\x5b\x6c\xfe\x64\xd4\xd6\x96\xf1\xde\xe8\x94\xa5\x4d\x43\xaa\xb9\x06\x47\x3b\x29\x4f\xe4\x78\x2e\xe6\x60\xbc\x14\x5b\x84\x00\x11\x7c\x90\xa1\xbd\xa6\x0c\x8d\xe3\x20\xeb\x3b\x29\xc0\x36\xee\x9a\x1e\x14\x9b\x5e\x85\xe1\x77\x28\xb9\x62\x60\x04\xcc\x7a\x76\xec\xec\x21\xe8\xba\x1f\xa5\xf3\xb5\x2b\x5e\xdf\xaa\x3b\x5d\x51\x2e\xbd\x27\x85\xf7\x0c\x9a\x8f\xa7\xee\xec\x3e\x6e\x89\xd9\x31\xd2\xdc\x65\x21\xca\x44\x11\xf1\xe0\xc0\xda\x4f\xe8\x8b\xd1\xe3\x3d\x3d\xab\xfb\x44\xe6\xb5\x76\x49\x47\x14\x2d\xe3\x6b\x56\x37\x8d\x0b\xf0\x94\xa4\x95\xb8\xcc\x70\x3e\x4d\xf3\x6d\x27\x68\x93\x6e\xf1\x85\x80\x50\xec\x91\x21\xeb\x31\x80\xce\x01\xa2\xa7\xdb\x19\xe8\x65\xbc\x6b\x5d\x0d\x70\x66\xca\x74\x05\xb2\x5c\xff\x68\xc1\x35\x8b\xf6\xe6\xb4\xc7\x7d\x36\xcb\x79\x79\x74\x48\x72\x75\x48\x72\x73\x48\x52\x5b\xc2\xc4\xb5\x26\xa9\xc1\xcf\xe7\xd3\x28\x6a\x9a\x5c\x11\xe6\xa6\xc8\x78\xba\xf4\xb1\x79\xea\xb9\x45\x72\xb8\x52\x87\x72\x03\x47\x01\x28\xdc\x10\x1c\xa3\x64\x17\xed\xa9\x38\x1d\x43\x8c\xf2\xda\xc9\xf6\x63\xbe\xc2\x93\x3b\xc4\x00\x7d\x75\xd4\x8c\xb1\xf0\xaf\x40\x9d\x9d\xde\x09\x0e\x44\x97\x37\x38\x43\x58\xd9\xfb\x03\xb0\x97\x6b\x06\x36\x2e\x0c\x3b\x09\x48\xd7\x78\x0e\x0a\xba\x4e\xfd\x8c\xa2\x9e\x5d\x31\x4a\xc1\xb3\xf3\xbd\xdd\xd3\x81\x30\x36\xa6\xad\x9e\xd4\x51\xf2\x9b\xf7\xfd\xe3\xbf\x16\x3d\x1e\x39\xac\x2b\x89\xae\xab\xf4\x1e\x7b\xdc\x6e\x11\xe3\x58\x02\x87\x56\xf0\x3b\x94\x44\xc5\x52\x51\x66\x91\x62\x46\x44\x02\x3f\xd0\xc1\xe0\xa0\x34\x4e\xcf\x59\x6d\xe2\x08\x5e\xc9\xda\xf8\x5f\xd0\x62\xac\x42\xeb\xfc\x19\x5f\x83\x18\x3e\x8c\x61\x8f\x71\xe9\xcd\xe7\x37\x8f\x20\x06\xa1\xd8\xa3\xba\x2e\xd3\xcb\x7d\x2d\x09\x90\xda\xab\xa2\x2c\xe5\xaa\x0e\x58\x39\x0f\x82\x38\x28\xd6\xeb\x40\x4b\xcf\xba\x05\xc5\x2e\xad\x45\x06\x11\x8c\xf2\x0f\x94\xad\x76\x32\xcb\x56\x1b\x09\x6f\xf3\x43\xff\x75\xfb\x89\xb0\x21\xd5\x5e\x10\x08\x13\x2f\x4a\x29\xee\x61\xbe\xc5\x65\x55\x64\xfb\x5a\xce\x4e\x50\x03\x22\x3e\x19\x4f\xe5\x76\x76\xb2\xc3\xc8\x43\xc0\x90\x03\xb7\x1c\x9f\x4c\x77\xef\x67\x27\xc8\x31\xc7\x27\x50\xa8\xd8\xd7\x6a\xb5\xe3\x93\xbc\xc8\x21\x6a\x96\x95\xcc\x2c\xe4\x52\x77\xa5\xae\x97\x75\x56\xdc\xc4\x27\x9b\x34\x49\x64\x3e\x3b\x71\x9d\x97\x32\x13\x75\x7a\x2d\x6d\x17\x9f\xfb\x5d\x44\xbb\xf7\x33\xe7\x9a\x6a\x0f\x66\xe7\x8a\x91\x41\xe6\x3d\x98\x46\x51\xb4\x7b\x0f\x28\xbf\xb5\x30\xf0\xf2\xc5\xf4\xaa\x6d\xb5\x25\x92\xaa\x77\x89\xa1\x04\x83\xe9\xee\xfd\x49\x55\x64\x69\x72\x72\x99\x89\xd5\xbb\x80\x32\xb5\x79\x94\x79\x51\x15\x5e\xf6\x50\x4b\x35\x13\xbc\x44\xf6\xc3\xaa\xe1\x3a\x9a\x6b\x4f\x34\x27\x54\x30\xe1\x8c\x81\x48\xc1\xd3\x7b\x0d\x48\x20\x5c\x66\xbf\x3b\x05\x83\xae\xbf\x2d\x08\x56\x19\x94\x10\xfa\xb9\x6e\x39\xc2\x27\xa0\x6d\xd8\x4a\xb3\x0a\x9f\xdc\x3a\xb2\x8f\x4b\x70\xa9\x10\x81\xe0\x63\xb5\x51\xbc\x85\x2d\xa3\x5d\xa8\x6b\x31\xff\x5e\x92\xb4\xab\x36\x2a\x78\xba\x28\x96\xa8\xa2\xd4\xa7\xa6\x19\x86\x02\xf5\x24\xff\xf4\x90\x43\x1f\xf9\x79\x34\x17\x93\xba\x38\x57\x0d\xc5\x18\x68\xe0\x0c\xf4\x32\x8f\x27\x05\x38\xb2\x1d\x89\xd0\xa9\x3a\x7c\x06\xa6\xf0\xfe\x33\xb2\xac\xe7\x52\x35\x0a\xee\x3f\x59\xc6\x7d\x29\xfc\x91\xcd\x7d\xfb\x01\xbe\xe2\x55\xd3\x7c\x87\x0a\x52\xec\x27\xf8\xcb\x2a\xb0\x07\xb8\xbb\x94\x8a\x8c\x88\x98\xcc\x93\xb8\xb5\x96\x87\x03\x5b\xf1\x8c\x38\x07\xf7\x66\x55\xe6\x7b\x52\xb2\xf1\x14\x57\x56\xdb\x0a\x80\x8f\xfe\xce\xda\x34\xcd\x94\x73\xe1\x7b\xc4\x58\x73\x97\xc2\x79\x7e\x16\xb1\x0d\x57\x8d\xad\x51\xdb\xd5\x05\x4b\xd9\x28\xae\x67\xbe\x39\xe3\x02\x62\xf8\x6e\xce\xf8\x6a\xa2\x06\xb8\x39\xd7\xb1\x1b\xc2\x70\x73\xce\x57\x13\x18\x3c\x35\x94\xe1\xfa\xc8\x3b\x7e\xc7\xd9\xbe\xd6\x3c\xdd\xb0\x44\xab\x93\xee\xda\x8a\x26\xb9\x1f\x7b\xa2\x2d\x9d\x34\x52\xe7\x79\xbb\xa9\x3d\x01\x07\x36\x0e\xda\xda\xd9\x92\x59\x37\xfd\x33\x79\xae\x00\x44\xba\x78\x3b\x72\xc4\xad\xc3\x9c\x54\x61\x8c\x8a\xd7\xe7\x11\x6a\x19\x9b\x65\x63\x19\xaf\xe6\x39\xce\x33\xde\x13\x78\x58\x62\x7a\xa9\x34\x70\xf1\x2c\x0c\xb3\x33\xb5\x50\x06\xc2\x0a\x92\xb1\x0a\x8a\xa8\xda\x58\x2c\xde\x13\x55\x44\xd5\x65\xba\x3d\x5d\x13\xda\x6c\x57\x3d\x1c\xd8\x96\xef\x48\x31\xca\x59\xce\x56\xd0\xd2\xd6\xea\x5d\x69\x1a\x55\x01\x3a\x6e\xca\x9e\xe8\x8d\x80\x81\x99\x15\x07\x04\x70\xdd\x34\xf9\x79\x14\x86\xd7\xbc\x7d\x4e\x9b\x66\x48\x54\x0f\xaa\x91\x28\x76\xa1\x85\x58\xce\x32\x72\x4d\x29\xc5\x48\x15\xdb\x83\xa2\x2d\xb7\x0c\xe3\x33\xc7\xdf\x16\x04\xbf\x50\x80\x90\x83\x19\x8a\xd6\x04\x2c\xe9\x99\x34\xe1\xc0\xc5\x39\xd7\xdf\x23\x09\x8a\x22\x4d\x43\x6a\xe3\x75\x48\xa0\xb5\x42\x6d\x8f\xf8\x90\x68\xa4\x26\x28\xf5\xb4\xb2\x6a\xfe\x53\x41\x52\x66\xfa\xb7\x7e\x77\x51\xd7\x8f\x17\x03\xeb\x88\xc3\xd3\x81\xcc\xe9\x9e\x38\x99\xb4\xf1\x47\x87\xe9\x60\x2a\x65\x72\xb4\x4e\x64\xde\x34\xda\x3f\x99\x2a\x63\x55\x24\x90\x4b\x5f\x71\x97\xc7\x80\x5f\x82\x78\xd7\xab\x2d\x04\xd7\x96\xd9\x4e\x96\xa4\x46\x77\x6a\xe8\x9f\x9c\xb2\x0d\x1f\x46\xb3\x21\x29\xcf\x22\xda\x34\x7b\x32\xdc\xd0\xd9\x86\x0f\xa7\xe6\x80\x68\x09\x8d\xa6\xac\xd4\x07\xc5\x18\xb7\x6c\xc7\x6b\x49\x12\xb6\xa6\xf3\xe0\x26\x88\x57\x61\xa8\x52\x39\x4f\xe6\x41\x1e\xc4\xc3\x55\xd3\x9c\x5e\x54\x5a\x24\x94\xe8\xcd\x09\x76\x20\xa2\x50\x99\x9b\xa6\xd9\x35\x0d\xd9\xf1\x40\x0d\x42\x41\xd5\x90\xef\xe8\x5d\x79\x06\x58\x97\x4f\xd9\x1e\x08\xed\x2e\xda\x45\xb2\x2d\x5d\x93\x1d\xf0\x8d\x3b\xca\x4a\x05\x2c\x43\x18\x38\xc5\x5c\x14\x40\x94\x18\x83\xa4\x60\xc2\xf3\xb5\x71\x52\xd6\x60\xf3\x11\x86\x64\x3b\xd9\xa4\xf5\x9b\x34\x01\x83\x34\xb6\x75\x37\xd9\xf3\x63\x41\x1d\x44\xab\x56\xa4\x5f\xa5\x5f\xb6\x01\x83\xc1\x83\x22\xc4\xd1\x42\xd9\xb2\x67\x8e\x72\xac\x73\xe2\x9e\xdc\x98\xb6\x8c\x4e\xf3\x5c\x96\x98\xd4\x34\xf6\xdd\xc7\x7c\xe8\x40\x93\xad\x9a\x2d\x29\xd2\x7e\x3c\xf9\xe2\x81\xf4\x3a\xa3\xec\x73\x3a\x48\x39\x51\xdc\x6b\xad\xb5\x33\xc1\xb3\xf3\x8e\x8e\xca\x07\x19\x40\xa1\x51\x9a\xcd\xc1\x02\xd4\x2f\x39\xfa\x1c\xcb\x8e\x3f\x47\x86\x7b\x46\x0a\xfe\x99\xc2\xfa\x15\x4b\x29\x9d\x14\xfb\xba\x4a\x13\x39\x83\x53\x54\x9e\x45\xf3\xf4\x8c\x47\x71\xaa\x70\x2b\x12\x1f\xf4\xae\xf0\x16\xd4\xec\xd3\x88\x7f\xf1\xa0\x34\x16\xc9\x05\xec\xcc\x37\xa2\x25\xa1\xd1\x11\x89\x8d\x77\x80\x4c\x54\xf5\x23\xa0\x24\x5f\x16\x89\xe4\x9d\x34\xd4\x22\x75\xa9\x20\xb2\x6e\x17\x84\x24\x5d\x0e\xd5\x9a\x50\xcd\x2f\xcb\x14\x8f\x88\xda\x31\xd8\x67\xb1\x55\x64\x95\x4a\xb4\xc5\xae\x4a\xb1\x92\xaf\x65\x99\x16\x10\x26\x12\xd2\x4a\x29\x92\x27\xaf\x5e\x68\x91\x38\x2a\x4d\x38\x22\xe6\x59\x8b\xd1\x7c\x5c\x7a\x84\x8e\x02\xf4\xb2\x69\xca\x09\x52\x71\xd4\xc3\x72\x5a\xcb\xc4\x73\x13\x6e\x1c\x46\xbd\x2d\x89\x22\xa1\x4c\x42\xd1\xef\x41\x8a\x09\x1e\x28\x30\x0c\x06\x05\xf0\x19\x7b\x34\xaf\x5a\x6d\xe8\x9f\x1e\xce\x83\x52\x3b\xd2\x87\x12\x9a\x64\xe0\x2f\x4b\x92\x4e\xb6\x62\x87\xa8\x4c\xd8\x03\x51\xe9\xe7\x19\xae\xab\x71\xae\x96\x26\xcb\xc4\xae\x92\xf3\x0a\x90\x75\x85\x2f\xed\xac\x72\x67\xe4\x8f\xb6\xfa\x2b\x84\xc6\x9b\x5c\x0a\xd0\x02\xf0\x23\x53\x7d\x2d\x5a\x16\xe2\xa0\x30\xcd\x8f\x5d\x97\xa0\x70\x97\xe4\xc7\x39\xbe\xc6\x6f\x69\xfd\x4f\x41\xff\x36\x7c\x3c\xf8\x57\x36\xf5\xae\x53\x79\xf3\xb6\x00\x2f\x77\xea\xd8\x6b\x20\x28\x79\x84\x58\x58\x81\x76\xce\xeb\xd9\x2c\xe7\xb9\xf7\xca\xa4\xa5\xcb\x4d\x93\xf7\x8d\xce\xdf\x39\x10\xae\xb9\x8a\x61\xe8\xff\xea\xab\x8c\x27\xc1\xd9\xd0\x45\xb3\xf4\xac\x3d\xdc\x1e\x3f\x89\xed\x02\x8b\x74\x89\x4c\x73\x0e\x7d\x58\x50\xfa\x52\xa8\x6d\x07\xcf\xee\x76\xc5\xbf\x14\x5d\x9b\x7c\xc0\xdf\x70\xb5\xc1\x23\x1a\x3a\xe1\x02\x65\xd4\xa6\x19\x7e\x47\x72\x56\xb7\x96\xb5\x26\xdf\x2a\xb0\x44\xf8\x8b\x70\x15\x71\xdb\x10\x69\x0c\x23\x56\xf3\xbc\xbd\x2f\x6a\x7d\xd9\xb0\xf6\x58\xff\x52\x56\xf5\xfc\x33\x82\x1f\x34\x96\x2d\xa7\xcb\xb6\x9b\x82\xb2\xc2\xbf\xe3\x29\x4b\xb5\xef\x20\xfe\xb9\xba\xfe\xd5\x7c\xdf\xde\xee\xe4\xbc\xd6\xaa\x6c\x1c\x55\xc8\x45\xd3\x4c\x87\xbc\xf6\x06\x61\x89\x84\xcf\x87\xdc\x9f\xad\x6d\x42\x5f\xfc\xde\x3a\xe0\x83\x8b\x80\x12\xe0\x49\xc8\x4a\xe4\x66\x95\xb7\xa7\x43\x9e\xcf\x68\xc5\xfd\x24\xfd\x96\x28\x27\x5b\x29\xaa\x7d\x29\xc1\xdc\x76\x2b\x76\x95\xc3\x0b\x2b\x4d\xb0\x7b\xc6\x93\xe3\xe9\x2c\x3d\x23\xd9\x3c\xb3\xd1\x99\x28\x6c\xb9\x23\x1f\xd3\xb3\x68\x0e\x0d\xc5\xd9\x22\x5d\xb2\x76\x74\xcd\x99\x18\xf1\xcf\xbd\xe0\x9a\xa3\x87\x68\x9a\x06\x51\xee\x2a\xce\xf5\x8e\xaf\xf8\xb7\x92\xa8\x86\x70\xc9\x63\xdc\x81\x45\xba\xa4\x6c\x0d\xf6\x6c\xa3\x5c\x6f\x03\x81\x50\x61\xd5\x90\xc3\x7b\x37\x64\x8e\x48\x3e\x07\x9b\x2e\x78\x1a\x58\xb1\xb5\x71\xef\xb2\xe6\x2b\x22\x80\xfc\x07\xff\x36\x1e\xbc\xac\x59\xea\x24\xb4\x1b\x5e\x4d\x72\xf9\xbe\x7e\x93\x5e\x2a\x74\xcb\x12\x2e\xe6\xc7\x0b\x3c\x2e\xe3\x68\xb6\x99\x6d\xf8\xc6\x2f\x8c\xe1\xeb\xf8\x8a\x6c\xd8\xc6\xdf\xa6\xa8\x03\x9d\x6b\x24\xab\xd6\x93\xd5\x66\x9c\x28\x80\x19\x24\x23\xbe\x01\x28\x02\xe5\xf5\xdc\x32\x23\xee\xbd\xa2\x02\x19\x5e\x5a\xec\x2b\x33\xb2\x2d\x2f\x67\xbb\xd9\x8e\xef\xba\x39\x76\x18\x3b\xb6\xf3\x87\xa1\x30\xca\x7d\xe3\x18\x6d\x61\x1c\xdb\x11\xdf\xf5\x8d\xe3\xf0\x8d\xaf\xae\x9e\xe6\x69\xcd\x8f\x55\x23\x8d\xb3\x1b\x78\xa5\xe5\xa5\x22\x21\x53\x5e\x4e\x92\xf4\x9a\xcb\x63\x0f\x4f\x26\x8a\xf5\xf0\x1a\xae\x07\x4d\xdc\xf6\xb9\x3c\xa5\x6f\x05\xb9\x33\x72\xe5\x58\x5d\x6a\xf2\x7d\x1d\xe7\x2d\xfd\x85\x0a\x54\x8c\x40\xe4\xab\x30\x98\x1a\x26\xbc\x3a\x7c\xd8\xb3\x95\x0b\xb7\x9a\xb7\x59\xc8\xb4\x92\x8f\x8b\xdd\xed\xe3\xbd\x51\x0b\xd4\xea\x77\xaf\x05\xc9\xe9\xa0\x3d\x9e\xc8\xc4\x97\x57\x7f\xfa\x06\xd1\x1b\x03\x3b\xef\x78\xde\xac\x4d\x7c\xc0\x88\xfd\xa8\x78\x95\x8f\x8c\xfc\x40\x0f\x20\x56\x6d\x09\x81\xc1\x88\xad\x25\x15\x06\xcd\x3e\x90\x0b\x1b\x76\xff\x58\x2a\x3f\x38\x6e\xa8\xab\x2b\x02\x36\x26\x1f\x94\x37\x73\x6e\xf9\x30\x70\x11\x75\x2c\x72\xd6\x48\xf1\x89\x00\xdb\x7b\xe1\x01\xe6\x20\xff\x98\x7e\x8e\x60\x7d\x45\x5c\x0b\x94\x55\xa8\x2b\xde\x37\x3d\xc4\x74\x96\x3a\x45\x85\x3a\x4d\x9b\x0e\x5e\x92\xea\x3e\x1d\xf8\xbe\x2e\x7d\x4d\x0e\x41\xd9\xde\x2a\xba\xed\xc1\xae\xac\x9c\x54\x9b\xe2\xe6\x35\xfa\x18\x68\x05\x6d\x00\x83\xbb\xdf\x04\x49\x99\x83\x34\x27\xcc\xf3\x12\x3d\xb1\x61\x37\xd5\xca\x08\xd1\xc6\xce\x88\xdd\xdb\x4a\xca\x78\x98\x9a\x06\x9e\x0f\x72\xda\x34\xd5\x19\xef\x68\x41\xff\x94\x93\xbc\x57\xb5\x0c\x5f\x32\x9e\x95\xc5\xf6\xc9\xab\x17\x70\xa0\x1e\x1a\x8d\xc8\x94\x05\x9a\xda\x84\x01\x75\x14\x5b\x15\x11\xec\x51\xa3\x77\xa0\xbb\x23\x41\x51\x86\x25\x45\xae\x0e\xed\xa1\xaf\x1d\xec\xf0\xde\x86\x14\x03\xfb\xb1\x66\x7b\xc7\xd7\x56\xd7\x6c\x37\x8a\xbe\x38\x45\x2d\xe0\xf6\x35\xa9\x90\x82\xbe\xf0\x44\xa2\x57\xe0\x4d\xa1\x96\x87\xb5\x4a\x15\xb9\x74\x6a\xa2\xe9\x3d\x7a\xbe\x9e\x76\x39\x28\xb1\x3c\x76\x23\x7b\x9a\x27\xc4\xd5\xc6\xa7\xa9\xb6\x8e\xa3\x37\xfb\x9e\xd1\x78\xb3\xdd\xdd\xc2\xc1\xd4\x3f\xf7\x70\x4c\x0f\xac\x85\xa8\x77\xa5\x54\x57\xbe\x85\x44\xdf\xd3\x09\xca\x8a\xb7\xa8\x8d\xa2\x70\xf5\xd0\x89\x31\xb4\x02\x27\xd7\x59\xfa\xa5\x4a\xab\xff\x33\xd9\xe9\x45\xc1\x7c\x4f\x17\x40\x5d\xcb\x30\x34\x8d\xf4\xd0\x8b\x61\x48\x88\x6e\xb7\x69\xd4\x1d\x8e\x06\x0b\xbd\x67\x88\xd9\xbc\x17\xfb\xac\x4e\x77\x99\xef\x45\x5b\xd2\xee\xd4\xfd\xcb\xa1\xc7\xc1\x4b\x77\x50\xfd\x3e\x6a\xda\x1a\x72\x3d\xd3\xee\x0e\xf3\x78\x81\x91\x29\x6b\xb5\xc3\x6a\xb3\xb0\xa0\x56\x6e\x5e\x34\x9c\x6b\x92\x94\xe7\xe6\x7d\xb7\xe0\x39\xbe\xef\xc2\xa3\x51\x9b\x43\xe0\xbc\x9d\xa2\x00\xa5\x69\xb4\x7b\x6a\xde\x2d\xdd\x34\xa8\x1b\x74\x76\x5c\x89\x1a\xc4\xf6\x28\xcb\xe0\x2d\xa4\xd2\xe2\x1c\x2d\xa6\xfb\x1a\x1c\xbd\xe9\xe7\x11\x45\x3d\xda\x1f\xc8\xa5\x2a\x84\xae\xcb\xac\x0d\x3b\x6b\xbe\x75\x09\xa0\xd6\x45\xd3\x08\xc5\x62\x35\xcd\xb0\x6a\x9a\x0a\x3f\xd1\x06\xbb\xa8\x15\x71\x46\xc1\x5b\x1f\xa6\xa4\x3a\xa5\xa0\x46\x38\xd1\x1e\x38\xcb\x78\xff\x54\x9f\x81\xa0\xf4\x99\x1a\x8f\x6a\xed\x4e\xd1\x6e\xf1\x7e\x11\x2d\x0d\xad\xab\xc8\xd3\xc5\xc3\x25\x43\xae\x31\x8e\x0e\x6c\xc5\x7b\xd7\xe6\x6d\xa1\xdb\x29\x70\xfc\x2b\x23\xcf\xdd\x2f\xf6\x2e\x94\xbc\x25\xa1\x37\x7c\x0d\x24\xf4\x1c\xff\x2c\xf0\x8f\x2b\x18\x43\xc2\x60\xc5\x71\x48\x9b\xc5\xc6\xe5\x99\xc1\x78\x89\x0f\x97\x63\xef\xd7\xe7\xcb\xc3\x01\x8d\x45\xf5\x28\x12\xb6\x53\x4c\x8a\xda\xae\xc7\xc5\x3e\xaf\xc3\xd0\xbd\x65\x81\x13\x71\xf0\xd0\x96\xf0\x57\x24\x03\xf2\x95\x65\x9a\x4d\x66\x2b\xf7\xa1\x32\xa8\xb6\xd3\xfd\x4e\xd2\xbb\x43\x12\x86\x44\x47\x70\xf6\xcf\xfc\x5c\x51\x08\x9a\xa5\xee\xb6\x47\x59\x62\xf3\x12\x50\xde\x3d\x02\x26\x05\x2f\x49\x82\xcf\x6c\x09\xa5\x34\xfe\x84\x42\x6c\x87\x1a\xf4\x8a\x92\x72\x90\x37\xf7\x0a\xed\x68\x5c\x1a\x94\xa1\x30\xf0\x57\x4e\xf4\x01\xea\xac\x28\xfa\xd8\xca\xed\xa5\xa7\xab\x41\xb4\x2c\xb3\x67\x00\x87\x43\xf7\x84\x77\x5a\xed\x3f\xdd\x83\x96\xf9\x44\x57\x08\x43\x8f\xc5\x32\xfd\xe4\x86\xec\x8a\x6e\xac\x0d\x7e\x91\x3f\xde\xa8\x21\x26\x84\x6a\x49\x68\x2f\x45\x69\x71\xf7\x6a\xab\x55\x10\xba\xf5\xf9\x30\x3a\x68\x3f\x4d\xc7\xa8\xec\x18\xab\xb6\x48\xfc\xb7\xa4\x8b\x32\xad\x56\x34\x33\xf1\x68\x2a\xca\x8e\x8b\xd9\x41\x60\x49\xfb\xb3\x3b\x86\xa3\x9d\xfa\x24\x5c\x3a\xe8\x13\xb9\xb5\x50\x55\xbf\xfc\xad\x8d\xc0\x58\x8f\x38\xce\xc7\x65\xbd\xa2\xb9\x16\x82\xeb\x2e\xa8\x19\xe1\xf3\xfc\x69\x92\xd6\x45\xf9\x69\x93\x51\x48\xc6\x3f\xd3\xc7\xd6\x3f\xad\x13\xae\x68\x85\x6d\x91\x3f\xca\x57\xb2\xaa\x0b\x30\x9e\x16\x69\x2e\x4b\x73\x8d\x7f\x67\xac\x07\xaf\x41\xdf\xb8\x35\x42\xbc\xe0\xbd\x51\x05\x79\x81\xbb\x18\x0c\xed\xbd\x6f\xc8\xcf\x52\x6b\x8a\x18\x7b\xc4\xa3\xe9\x81\x0a\x89\xb9\x9f\xdd\x8c\x50\x70\xd9\x21\x42\x08\x08\x64\x98\x19\x9a\x73\xef\xd6\x1e\xe0\x65\xb6\x6f\xad\x9a\x2d\xaf\x32\x8e\x2e\x63\xa3\x0c\x7d\xdf\x55\x9f\xa4\xd7\xdd\x2d\xf2\x9d\xac\x1e\x57\x1b\x46\x47\xf0\xb9\x92\xe9\xb5\x4c\x9e\x75\x17\xce\xc3\x04\xf7\x2d\xce\xdc\x4a\x70\xbd\x55\x88\xbf\x75\xb4\xd7\xbf\x7e\x8c\x5b\x42\x61\xf0\xc2\xde\xdd\xb4\x1d\x7a\x50\x92\xe5\xb5\xc8\x98\xe7\x36\x05\xb8\xc4\x0e\x4d\x07\x44\x71\x67\x7c\x4c\xb6\x9a\x97\xf7\xb6\x5d\x53\x88\x94\xd0\x7f\x00\xcc\x98\x3f\x09\xfe\xed\xdc\xdd\xf9\x1d\x76\x05\xe8\x2a\xb1\x69\xda\xe7\xf7\xa8\x10\x26\xab\x62\xf6\x10\x0f\x7b\x64\xee\xb6\xc0\x51\x33\xcf\xee\x3d\xda\xad\x55\xf2\xa7\xe5\xec\x09\x8f\x65\xee\x61\x38\xec\x5e\x03\xe6\xe6\x3a\xc2\xf1\x9f\x44\x39\x2a\x54\x71\x1d\x86\xab\x63\xf2\xfa\xd8\x0f\x85\xef\x80\xb6\x15\xa8\x63\x56\xcf\x6a\x5e\xfb\x32\xe4\x74\x4d\x4e\x3d\x33\x1a\x6c\x6b\xac\x89\x63\xeb\xe5\xdb\x79\xf5\x76\x46\x93\xd6\xc5\x07\xf1\x77\xcf\x0a\x9c\xcc\x28\xeb\x32\xbd\xba\x92\xe5\xab\xfc\x1f\xf2\xf6\x49\x71\x93\x93\x3b\xb5\xa8\xb1\x33\x46\xd0\x0e\xa9\xe3\xbf\xb1\xb6\x00\x21\x36\x9e\x1c\x0d\xe8\x23\x1a\x40\x87\xd4\x90\xa0\xf1\x08\xca\x85\x5b\xcf\x23\x1a\x79\xf4\xd0\x02\xda\xd6\xf3\xe3\x04\x6e\xfe\x51\x02\xb7\x0c\xc3\x3c\x0c\xbb\xfa\x72\xdf\x1a\x77\x35\x4f\x53\xf0\xf1\xc5\x7e\xa4\x8c\x94\x48\xf9\xe6\xea\x0f\x1a\xea\xdc\x7b\xd0\xd5\xc9\xea\x92\x25\x0a\x02\xb5\x7c\xce\x87\x3f\xd4\x21\xe8\x05\x3e\x72\x4c\xa2\xb4\x8b\xd0\x7b\x1f\x8a\x70\x89\xf4\x6b\xa2\xe5\x5b\x14\x87\xe2\xdc\x38\xe6\x3d\x3c\x8c\xe0\x85\xe1\x61\x2a\x5e\x58\x1e\x26\xe2\x5c\x80\x07\x32\xd4\x14\x3d\xcf\xfd\xc8\x94\xf0\x10\x24\x21\xbc\x0d\xc6\xb3\xf9\x59\x12\x68\x9b\x09\x1b\x50\xc7\x08\xb8\x59\x05\x4e\xb7\x6c\x89\xea\x58\x51\x35\x0c\xb5\x7f\xa6\xdc\xf3\xad\x17\x86\xa4\xe2\x1d\x8b\x46\xdd\xfc\x59\xea\xb1\x51\xda\xd1\x53\xea\x5e\x63\xec\x5d\x2c\xac\xc6\xa0\x2b\x1e\x71\x4e\x24\xdf\xe7\x24\xd7\x8d\x51\x3a\xc7\x58\x2c\x58\x0a\x82\xa4\xc0\x7b\x44\xc9\x5d\x0a\x90\xdf\x71\xab\x9c\x3c\x2a\x27\x15\x8f\xa1\x4a\xb6\x44\xcd\xc6\x5d\x1b\x5b\x61\xaf\x95\x7b\xb2\x5b\x99\xa1\x59\xf6\x62\x4e\xf6\xdc\xcd\xc4\x72\x4e\x4f\xd2\x6b\x58\x19\x94\xa1\xc5\x64\xef\x8d\x63\x35\x9a\xea\x91\xe8\x0a\x2e\x15\xc6\xd2\x95\x39\xb3\x61\xe9\x56\xc8\xa9\x3b\x6b\xd0\x70\x9a\xd7\x1f\xf0\x85\x1d\x80\x6e\x25\x98\xc0\xf6\x45\x02\xda\x73\xd5\xb2\xf5\x8a\x4f\x20\xba\x02\x29\x46\xbc\x62\x7b\xfd\xa1\xc0\x4e\x15\xf3\xf4\xe2\x56\xe0\xa1\x23\x0c\x49\xa6\xb8\xe9\x11\xf7\x0d\xc1\xd7\xda\xe0\x7e\xea\x3f\xd4\x38\xff\x7d\x57\x2d\x0d\xb3\xd5\x76\x5c\x1f\xab\xd6\x02\xfa\x59\x59\xa3\x69\xb6\xe9\xab\xb7\x15\xe5\x3b\x78\xfa\x4f\xd7\x64\x63\xb4\x12\xd0\x04\xf7\x85\x28\xdf\xc1\xf3\x5f\xae\x8d\x19\x50\x53\x91\x91\x6b\x3e\xda\xf4\xe8\x93\x9f\xc8\x49\x9a\x70\x7e\x7d\x70\x3e\x95\xd5\x10\x48\xe2\x24\x2a\x05\x4f\x14\x6c\x41\xb4\xd0\x88\xd2\x30\x5c\x91\xaf\xac\xb3\x20\xf4\x0b\xa5\xce\x23\x45\x19\x69\x05\x6e\x1d\xd7\x24\x58\x8b\xac\x02\x4f\xd3\xdd\xf1\x23\xa6\x91\x49\x5a\x0b\xf0\xa4\xee\x4b\xc4\x77\xfc\xf4\x17\xb2\x2b\x65\x93\xa4\xd7\xcd\xae\xc9\xd2\x06\x0a\x35\x97\x25\xfd\xec\x34\x35\xf7\x85\x5a\x5a\xb8\x2e\x00\x37\x9f\xfe\x72\x59\xf6\x65\xa2\x5b\x9b\x9e\xd7\x07\xd3\xe1\x2e\x0c\x33\x2f\xb8\xd3\x96\x47\xb3\xed\x59\xcf\x0b\x1a\x38\xc8\x84\xb8\x1c\xee\x81\x6f\xbb\xa4\x33\x3d\xd4\x5d\xef\xd0\xc2\x90\xec\xe1\xe9\x77\x07\x58\x68\xa8\x1d\xb4\x9d\xb4\x1e\xf1\xd4\x5a\xd6\xde\x63\x90\x73\x0a\xb4\x7f\x18\x45\x97\xe8\x0f\xc8\x4f\x8d\x22\x11\x81\xf3\x9f\xc0\x68\xb9\xc3\x93\xce\x4c\x41\x1e\xab\x87\xbc\x9c\x51\x75\x03\xfb\x0f\x4e\x00\xe6\x56\xdd\x80\xe4\xac\x64\x19\xab\xd9\x9e\x52\xb6\xe1\x5f\x19\x74\xe7\x99\xbf\xec\x1d\x9a\xdc\xb7\xf0\x1f\xa5\xb3\xb5\xe7\xf1\x75\x63\xbf\x67\xea\x9e\xff\x8c\xac\x29\xe7\x9f\x91\x0d\xa5\xeb\xc9\xae\xd8\x11\xca\x36\xfa\xef\x7e\x3c\xb6\x2f\x23\xeb\x45\xb4\x1c\xf2\xcd\x22\x5a\xe2\x33\xf0\x60\x8d\x16\x23\x50\xdc\x7c\xd5\xa3\xd1\xc1\x19\xf9\x44\x6c\xc7\x23\xb6\xe5\xaa\x2a\xbb\x86\xba\xec\xd6\xa9\x96\x6c\x8d\xd6\xe2\xb5\x19\xe7\x2c\x39\xbb\x0d\xc3\xad\x0d\x40\xf1\xa8\x26\x09\xe5\xfc\xba\x9d\x30\xa3\xa3\x51\x62\x77\xff\x8a\xab\x09\xb0\x4b\x98\x01\xfb\xd5\x35\x7f\x65\xb0\x9e\x3a\xd6\x66\xfe\xf3\x24\x8e\x28\xbb\xf4\xb3\x36\x7e\x16\x9d\xed\xce\x7e\x0d\xc3\x2b\xbf\x47\xdb\xd0\x6e\x3c\xa5\x9c\x5f\xfa\x79\x97\x7e\x9e\x1a\xd8\x6e\x80\x78\x64\x6d\xcf\xa1\xd7\x45\x18\xd6\x5c\x3b\x25\x83\xa7\xd2\x59\x12\x86\xc9\x39\xde\x83\xff\x6e\x97\xc9\x78\xcc\x76\xa3\xd1\x60\xbd\x58\x3b\x29\x12\xbf\xb2\x7a\xdc\xae\x29\x0f\x20\x7f\x41\x38\x1d\x9d\x2a\x38\x65\x6a\x7f\x60\x93\x74\xa5\x84\x76\x01\x7a\xf4\x19\x94\x04\xc8\xbd\x41\x93\xa6\x84\xb2\xa7\x1c\xa0\xce\x2e\xa0\xda\x01\xdb\x5b\xec\x14\x95\x1c\xf0\x35\x8d\xea\xa6\x69\xea\x9a\xdc\xb0\xa7\x74\x4e\xd6\x85\x86\xd8\x35\xbb\x61\x4f\x3d\xab\xad\x61\x44\x63\xc0\xa9\x5d\xf6\xcb\x77\x59\x71\xc4\x16\xf6\x4b\xd9\xbb\xfc\x9b\x62\xda\xff\x9d\x9a\x3d\x65\x8e\xda\xf1\x9f\x17\x3e\x91\xd8\xea\xd3\xde\xe9\xbc\xc0\xb0\x0e\xd3\xfb\x51\xa6\xb9\xf3\x5e\x70\x0f\x9b\xfa\x01\x36\xa5\x6f\xbc\xf7\x08\xac\xe0\xd9\xb0\x87\x62\x64\xd2\xa7\xbc\x51\xa4\xd1\x7e\x41\x31\x08\x5d\x76\xd6\xe0\x20\x8f\x9e\xa0\xd8\xdf\xa2\xa3\x49\xb6\xca\xdc\x33\xc5\xa1\x61\x38\xda\x01\x04\x2c\xd3\xac\x6f\x18\x42\xd1\xc4\xe5\x5e\x36\x3c\xcb\x81\xf1\xed\x63\x70\xeb\xef\x73\x73\x29\xb6\x24\x65\x72\xa2\xaf\xcc\xa7\x26\x57\xdf\xad\x9d\x16\x5c\x10\x9a\x56\xf5\x88\x7b\xa1\x78\xb4\x54\xc5\x7f\x11\xeb\x33\xe6\xe9\x99\x6b\xd3\xfc\xe4\xe6\xf5\x42\x50\xfb\x7d\x7f\x1c\x1e\xd7\xed\xdc\x06\x06\x8a\x5d\xa2\x0e\x1c\x7f\x04\x6f\xaa\xbf\x23\x2e\x5f\x7a\x02\x9b\xee\x72\xe0\x08\x88\x2f\x70\x92\xdd\x86\x5b\x6e\xfc\xfc\x3d\xee\x3b\xd5\xaf\xf5\xc1\xfc\x40\xb9\x5c\xca\xa4\xd2\x9b\x6e\x89\x1b\xae\x9d\xfd\x7c\xff\x41\x7d\x3e\xb5\xdc\x68\xdd\x15\x04\x2d\xa9\xcb\x33\x51\xd5\x56\xc7\xae\x47\x3d\x6f\x23\x2a\x27\x28\x30\xe5\x3a\x10\x3f\xf8\xfe\x5f\x56\xac\x30\x12\x00\xfc\x0b\x3e\x36\xd0\x0f\x80\xd4\xc1\x4d\xb0\x84\x31\x01\xf9\x5f\xaa\x71\xf1\xbf\x5e\x81\x62\x7e\xaf\xa2\x04\xe0\x9a\x1f\x69\x4c\xca\xf6\x16\xa5\x5a\x15\xa0\xee\x6a\x02\xb0\x97\x24\xa5\xf4\xd0\xd1\xcf\x20\x79\x8f\x21\x9e\xe7\x36\xea\x20\xed\xe3\x60\x4b\x27\x01\x16\xd9\x78\x6c\x71\x65\x7c\xa5\x84\x2d\x7a\xe2\xf5\xed\x57\xa2\xdd\xfb\xe0\xfe\xd7\x5f\x11\x86\xd5\x39\xff\x7b\x18\xd6\x2d\xe0\x01\x11\x41\x0b\x9a\x80\x33\x67\x25\x40\x9d\xf7\x28\xfc\x49\x0a\x01\x76\xc2\x6d\x7b\x44\x3b\x65\x56\x4e\xd6\xa2\xaa\x5f\x43\xd3\xde\x83\x33\xbe\x30\xf7\x3c\x3f\x4b\xcf\xe9\x4d\x77\x04\xda\xa3\xd9\x4d\x69\xdc\x94\xc0\x78\xb4\x69\xfd\x30\x05\x21\x82\xa8\x57\x1b\xf0\x31\x67\xb5\x14\x3f\x32\x40\x20\x10\x4a\x2b\xf0\x41\xf6\x51\xe5\x42\x2b\xc4\x98\x23\x0e\x8a\xb6\xce\x0a\x7a\xa6\x75\xbf\x59\xa7\x7b\x52\x18\x77\x52\xd2\xa9\x7c\xb0\x00\xa5\x32\xdd\x37\x7e\xed\x07\xd5\x77\x90\xf6\x71\x3d\x09\x73\x45\xc1\x49\x42\xcf\x31\x24\x50\x98\x18\xdc\x9e\x78\x34\x84\xf7\x03\xc1\x1d\x35\x79\x20\xe0\x97\xa7\x10\x81\x3e\x66\x24\x9a\xa6\xc5\xf9\x44\x31\x9a\x18\x77\x8a\xb5\xba\xa8\x8b\x80\xb2\x3b\x2b\xb6\x8b\x5b\xde\x73\x4c\x73\xc1\x81\xf6\x2a\x69\xb4\x95\x29\xe8\x5d\x6b\xa0\xc4\xc0\x20\xfb\xb4\x21\x03\xe0\xaa\xcb\xb4\x85\xf7\x3c\x2c\x76\x8c\x89\xf5\xc9\x42\xcd\xa1\x16\x6a\xe3\x7e\xbe\x77\xf2\x3a\xad\x7f\x5c\x0b\xc2\xdc\x8d\x9e\x7b\x3f\xa6\x6d\x4f\x59\xce\xb7\xb9\x0e\x77\xe7\xec\x8c\xb6\xc5\x35\x5a\xc8\xfe\x98\xd6\x1b\x5c\x65\x63\xe0\xf5\xb3\x82\x8a\xb2\x2d\x0d\xd3\x41\x8b\x93\xf4\x3a\x00\x8f\x91\x1f\x75\xe6\x6e\x0c\x3c\x3e\xe4\xc3\x38\x9f\xd4\xf2\x6d\xb1\xf3\x9d\x32\x58\x26\xa8\xee\x55\xdb\x1f\x4f\x23\x96\x4e\xea\x62\x37\x12\xa0\x27\x5f\x80\x66\x3d\x85\x28\xbd\xe0\x34\xea\x53\x9a\x02\xef\xa3\xd8\x52\x26\xd7\xf5\x48\xa0\x9f\xbc\x02\x9d\xe8\x51\x17\xbb\xab\xbd\x09\xf7\x29\x89\xf8\x77\x9c\x27\xc6\x1e\xbc\x45\xa9\x68\xef\x0b\xe3\xfd\x6f\x8a\x0c\x85\xa0\x12\x97\xc6\x90\xb3\xd6\x3d\x16\xba\x44\x29\x76\xa6\xc0\x28\xd8\xbd\xd7\x77\x7a\xbb\x0c\xf8\xa4\x93\x7a\x59\xa0\x54\x17\x64\x3b\xec\x84\xbe\x59\xf5\x15\x6f\x29\x97\xd7\x12\xf6\xcd\x88\xff\x3d\xba\xb8\x35\x6b\xd4\xee\xe8\xbb\x88\xef\x8e\x48\x90\x81\x27\x9e\x3a\x7a\x08\x35\x27\x43\x5f\x81\x25\xab\xbb\xef\x3c\x2f\x49\xab\x20\xfa\xc9\x84\x3b\x87\x1c\x13\x2d\xc6\xf0\x07\x4c\x89\xda\x03\xe9\xeb\x2e\x08\x3e\xd8\x1a\x9c\x7d\x7a\xe8\x2c\xe4\xc7\x5e\xee\x4c\x1f\x5d\x78\xfa\xc8\xf3\xdd\xb4\x53\xfe\xe8\xbd\x33\x5d\x93\x4f\x7c\xf2\x1c\xde\x36\xcd\x6b\x42\x87\xed\x39\x53\x5a\x97\xb7\x77\xed\x65\x30\xbe\xe6\x3d\x85\x8a\xce\x30\x7a\x5f\x35\x6d\x7d\xf3\xb4\x79\x0c\x69\x7d\x24\xee\x3d\xb0\x7d\x1f\x38\x47\x47\xed\xde\xf3\xa0\x89\xef\x52\x59\x71\x83\x24\x40\x77\xe1\x75\xc6\x87\x9e\x40\x3d\x02\x59\x73\x30\xff\xf2\x43\x25\x3c\x53\xea\xab\xa5\xef\xbd\x52\xfa\x23\xec\x8e\xd1\xd0\x2f\xc7\x63\x54\xb4\xac\x1e\x68\x9b\x8c\x8f\x58\xdd\x1a\xe4\x43\x17\xd3\xfa\xa4\x04\xc5\x3c\x1c\x4c\xd3\xc8\x39\xa9\x8f\x58\x00\x6f\x34\x34\x26\xf2\xb8\xbd\xbf\x46\x10\x69\xb6\x3b\xd2\xdd\xbd\x2b\xe9\x69\x89\x95\x6d\xc8\x33\x3c\x80\x3d\x8c\x80\x3e\xfa\x31\x4f\xd3\x0c\x3b\x28\xa0\x69\x7e\x93\xa4\x54\xa4\x58\x7e\x84\x96\x9a\xe6\x53\xfd\x42\xd4\xad\xf0\xce\x6d\x3d\x85\x94\x97\xda\x73\x73\xba\x26\x29\x18\x5d\x0c\xfb\xb1\x9b\xad\x86\x5e\xf0\x34\xed\x7b\x84\x38\xc0\xdf\xcc\x55\x18\x9e\x2e\x2e\xf6\xeb\xff\x88\xa2\xb1\xfa\xb3\x5e\x9b\x68\xcf\xa9\x7b\x65\xec\x0f\x29\xce\xb0\x07\xab\x6a\xe7\x2b\xce\x55\x32\x7b\x56\xf8\x7e\xe7\xcd\x73\x44\xea\x0b\xdf\xd0\x80\xe4\x6f\x0f\xa3\xcf\x87\xbc\x68\x1a\x74\x95\x13\xfc\xcf\xff\xeb\xff\x09\x28\xfb\xdb\x5f\xff\xfa\x57\x4f\xfd\x59\x0b\x50\xb0\x63\x03\xea\xf2\xbd\x5c\x3d\x2e\xb6\x5b\x91\x27\x24\xd8\xe7\x49\x11\xd0\x83\x17\x48\xc0\x1a\xc5\xa5\x39\xc9\x8d\x78\x34\xb5\xe2\xd1\xfd\x59\x16\x86\xb9\x3f\x9e\x3d\xe5\xed\x01\xee\x41\x0a\xb9\x37\xa2\xb7\xee\x33\x24\xf8\xeb\x48\xb5\x9c\x6f\x4f\x99\xe9\x64\xbc\x67\x5d\x91\xcd\x3c\x78\x80\xdf\x32\x88\x91\xcd\x48\xad\x1c\x4f\x7e\xde\x34\xa9\x75\x5d\x01\x4c\xd5\xf9\x78\x3a\xd7\xdb\xcd\x65\xeb\xa2\x8a\xfd\x9f\xa9\xdf\x05\x3a\x4f\xb9\x87\x5a\x3c\xca\xe1\xb5\x47\xd7\x7a\x99\x68\xd1\x55\xff\x3b\x74\xae\xf6\x54\xd2\x3e\x8a\x1f\x94\x30\x7a\xe7\xdd\x93\x22\xc1\x73\x62\x8f\x48\xa0\x7b\xca\xfb\x44\x3d\x1e\xb7\x77\xdf\x5d\x89\xe0\xe3\x98\xb1\xa3\x56\x7b\x65\x24\xc7\xc1\x87\x41\xd1\xd4\x7a\xba\x66\xa9\x66\x8d\x41\x3a\x50\xf7\x92\x2b\x7d\xa9\x96\xd3\xaa\x72\x08\x30\xcc\x32\x9e\xf7\xb8\x5c\x05\x33\xaf\x30\x1c\xae\x15\xa7\xe0\x6e\x53\x9f\x89\x7f\xe5\x0f\x3c\x0c\xc7\x53\xae\x46\xa7\x9f\x90\x6d\x3c\xbf\x82\x86\xe1\x4f\xaa\xab\x6f\x53\x4a\x4a\xf3\x88\x5e\x50\xf6\x23\x0e\x64\xc5\x36\xdc\x70\xd7\xab\xaa\x52\xf0\xc1\x12\xdf\x19\x6a\x2b\xc7\x77\x93\x8a\x7a\x8b\xaf\x41\xed\xe1\x43\x21\x42\xee\x69\x8b\x7b\x9e\x34\x14\x16\x4c\x57\x01\x4b\xef\x2f\xe2\x9c\x6d\x18\x7f\x17\x91\xef\xf0\x02\x7e\x5d\xe4\x27\xf0\x0f\xbc\x60\x06\x23\x62\x63\x54\x8e\x77\x40\xa9\x7f\x41\x15\x11\x6a\xdc\x65\x7a\x05\x7e\x1a\xef\x90\xfe\xd6\x25\x4c\x43\x7f\x8c\xe1\x94\xc6\x27\xd3\x28\x8a\x66\x27\x97\x62\xf5\xee\xaa\x54\xd3\x84\xda\x62\x1e\x94\x57\x97\x82\x3c\xfc\xe2\x0b\x76\xe2\xfe\x9b\x44\x5f\xd0\x20\x0e\xea\x52\xe4\x15\x2a\x85\x04\x74\x14\xd8\x36\x5b\x8e\x3f\x66\x27\xe8\x59\x63\xac\x27\x15\xcd\xba\xf9\xc7\x3e\x40\x8a\x9d\x58\xa5\xf5\x6d\xac\x3a\x9a\x9d\xac\xd3\xac\x96\x65\x7c\x22\xb2\xdd\x46\x10\x9d\xc7\xbf\xa0\xb3\x00\xde\x73\x57\x5c\x1b\x19\x23\x64\xfd\xac\x90\x56\xdb\xc3\xfb\x3e\x0c\x5b\x45\xde\x16\x04\x2d\xc8\x5d\x51\x83\x87\xcb\xbe\xeb\xa7\x69\x88\x93\x15\x79\x98\xeb\x24\x40\xa5\xff\xee\x01\xe0\xb7\x2c\x3f\xbe\x2f\x1c\xe8\xb6\xfd\x68\xe7\x93\x44\xd6\xe8\xf2\x1e\xbb\x7c\xa4\x4e\xb4\x3d\xf3\xd7\x84\xb2\xf7\xf4\xee\xbd\x34\x62\xbb\xad\x8f\x1a\x76\x92\xe0\xd4\xbc\x90\x49\xdb\x96\xa1\xca\x2d\xa8\x71\x0e\x36\xbd\x05\x91\x6a\x6f\x95\xfe\xc2\x0f\xe1\x70\xed\xd4\x95\x86\xea\x0c\x99\x83\xf9\x06\x02\x70\x68\x22\xa4\x77\xcd\x58\x81\xd7\xde\x88\xc8\xb9\x5e\xbc\x38\x08\xe8\xc0\x2c\x64\xf0\x3f\xff\xef\xff\xd7\x89\xe0\x0a\xe6\x2f\xac\x04\xc7\x36\xaa\x36\xeb\xf6\xc9\xa7\x7e\xd2\xd3\x3c\xb1\x61\xe5\x3e\xbc\xe4\x9e\xd5\xe8\x2d\xce\xa9\x77\xe3\xf8\x2d\x6a\xd9\x1c\xe7\x00\xed\xd6\x7f\xca\x93\xa3\x43\xbd\x41\xb7\xfd\x7f\x57\x97\x31\x82\xdc\xa5\x28\x2b\x90\x4f\x1a\xec\x47\xfa\x50\x22\xcf\x0c\x63\x7a\xb4\xd6\xf4\x0e\xd5\xe2\xa1\x5d\x0a\x60\x81\x0a\x37\x3c\xf2\x63\x54\xa3\xbd\x58\x77\x19\xdc\x3a\xc0\xdb\x79\xb7\x71\x08\x31\xeb\xad\xe9\x79\x14\x86\xb0\xfc\xdc\x87\xf7\x39\xe0\xd8\xb4\xa0\xa4\xa4\xb1\x1c\x8d\xce\xa6\xd1\xbc\x0f\x76\xfd\x57\xa0\x82\x7d\x11\x45\x34\x26\x7d\x83\xd2\xf1\x81\x5b\xe7\x8f\x1e\x06\x1f\x6f\xf2\x61\x14\x81\xae\xd3\xf7\x9f\xfa\xc0\x60\x5e\x47\x5a\xc4\x96\xe5\xa5\x34\xbd\x9a\x70\xc7\xe5\x71\x2e\xbb\xcc\x4c\xff\x2b\x0e\xbd\xeb\x94\xbb\xe7\xf9\x60\xda\x1b\x20\xa2\xed\x4b\x75\xe0\xb1\x11\xa0\xef\xc2\x0a\x88\x42\xa4\xfd\xaf\x2e\xca\x25\xcf\x59\xaa\xe0\x53\x7d\x16\x1d\xc7\x41\xf4\x0e\xe2\xec\x84\x61\xaa\x7f\x1f\xe2\x94\x1e\xa4\x76\x18\xa9\x63\x98\x94\x4c\x42\x04\x1f\x7e\x29\x58\x49\x02\x38\x7b\x01\x0b\x7c\x41\xb0\x67\xe9\x0e\xb3\x06\xfd\x05\xf0\xf8\x3d\x8c\xa8\xaa\xb4\x2d\x12\xa9\x2d\x0c\x3b\x16\x3c\x00\x63\x7e\xc4\x14\xf6\x2e\x85\xb0\x30\xba\xa6\xf3\x1e\x1a\xb0\x87\xec\x5d\xda\x4e\x37\x4e\x40\x21\x9c\x93\x4a\xf6\xfc\xbc\x05\xa6\xa8\x76\xf3\x1a\xb0\xbf\xb4\x16\xf4\x6d\xea\xe2\xd4\x64\xb9\xdf\x67\x4b\x37\xa8\x77\xd8\x20\xae\xf3\xd4\x88\x78\xed\x7c\x1c\x80\xc7\x31\xcc\x05\xa1\xe1\x00\xbf\xd3\x5a\x96\xa4\x4f\x55\x32\xe5\xd1\x6c\xe6\x0c\xc3\xe1\x59\xc1\x10\xc1\x35\xc3\x78\x9c\x8a\x88\x29\xb4\x8a\x44\xca\x8b\x91\xe7\x9b\x09\x1d\x8d\xd5\x24\x67\x05\xa5\x87\x7c\x34\x3a\x38\x25\x16\xc5\x2b\x59\x77\x76\xe9\x39\x8f\x66\xe9\x78\x4c\xd7\xc6\x53\x61\xcd\xca\x45\xba\x64\xb2\x26\xea\xaf\xf6\xc6\xa2\xbe\x56\x9b\x91\x53\xf3\x38\x1c\x70\x65\xbd\x28\x29\x01\x53\xcc\x52\x14\x01\xb3\x14\x45\xd3\xb5\xfa\xff\x3f\xd6\xf0\xe3\xef\xf0\x43\x24\x17\xfb\xe8\xaf\xd3\x15\xbe\xf4\x8f\xe1\xcf\x5a\xfd\xff\xf0\x6f\xf0\xff\xdf\x2f\xf6\x6b\xb9\x5e\x5f\xec\xd7\xeb\xf5\xdf\xc7\xf0\x67\xb5\x3c\xbd\x62\x5d\xf8\xb4\x01\x03\xbd\xde\x41\x18\xff\x9d\xbc\x7a\xfa\x7e\x07\x72\xad\x7d\xb9\x92\x23\xa2\x9d\xd0\x05\x17\x75\x40\xe1\x2a\x68\xd4\x17\x0b\xae\x02\xca\x34\x94\xab\x03\xbf\x2e\x65\xb5\x81\x47\x8d\xf6\x9c\x5e\x67\x62\x25\x37\x45\x96\xc8\x32\x60\xff\xac\xfb\x95\xa3\x5c\x75\x03\x2a\x2d\xf7\x7a\x81\x03\x4e\x13\xc8\x27\x60\xb7\xf3\x23\x25\xa7\xd8\xf3\xa0\xd6\x62\x05\xca\xe2\x06\xdc\x2a\x3d\x55\x3c\x85\xdf\xcc\xc9\x4a\xe4\x27\x79\x51\x9f\x90\x5b\x59\xd3\x93\x4b\x79\xb2\x42\x94\x75\x92\xe6\x27\xe2\xa4\xdc\xe7\x79\x9a\x5f\x9d\x48\xd0\x08\x0f\xdc\xf0\x5a\x1e\xdd\xa6\xf7\x9d\xd8\x2b\x59\x03\xb2\xd6\x0e\xbf\x3d\xd3\x51\x5e\xdb\xa6\x5a\x1e\xe7\x3e\xbd\x2d\xaf\x5a\xb7\x31\xcf\x2b\xdd\xbf\xd8\x9e\xad\xe9\x35\x59\xd6\xd9\x8b\xe2\x5a\xfe\x90\x56\x7b\x91\x65\xb7\x01\x1b\xfe\x0a\xe9\x37\x9b\x22\x03\xa7\xaa\xe8\xec\x1b\xdf\xd7\x1c\x6e\xd8\xc8\xad\xc2\x66\x1a\x61\xb6\x5f\xb7\x20\xa6\x1b\xdb\xb4\xf0\x11\x06\x3a\xea\xaf\xe1\xbb\x95\xf8\xaa\x80\xd8\xa7\x5c\x83\xde\x57\x05\x29\xe9\x20\x55\x97\x66\x22\x6b\xb1\xda\xb8\x2f\x78\x38\x63\xf9\x44\xd4\x98\x6e\xbe\x88\x64\x69\xd3\xe8\x27\x0d\x80\xb5\xf7\x75\x29\xfe\x21\x6f\x2b\x44\x49\x90\xb6\x2a\xf2\x75\x7a\xb5\x2f\xe5\x0b\x0c\x74\x6c\x33\x7c\x5f\x65\xb0\xbe\xef\x85\x99\x82\x8e\x15\x18\xb0\xc5\xf2\x18\x1b\x1f\xeb\x79\xf3\x55\x0a\xba\xc9\xfe\x0b\xec\x4b\xf0\xe3\x5c\x75\x17\x07\xdc\xee\x7f\x05\x55\xd5\x0a\x7f\xa4\xf5\xca\x97\x1f\xd6\xf3\xdc\x77\xd5\x03\x52\xf1\x38\x88\x02\xd6\x77\xea\x56\x8a\xfa\xc7\x7e\x5e\xca\xf7\xf5\xdb\xe2\x8d\xa1\x97\x3a\xa0\xd4\x8d\x35\x66\x8e\x85\x29\xae\xcf\x68\x90\x83\xcf\xc0\xf6\xee\x7f\x8f\x71\xcc\xb4\x97\xd6\x76\xd8\xb6\x63\xca\x4c\xfb\x8e\x74\xa1\x41\x3e\x5c\xe5\x1b\xb9\xae\x5b\x75\x54\x42\xfb\x06\xd2\x6b\xdc\x73\x38\xee\xdd\x26\xb7\x49\x7a\x85\x59\x7d\xbc\x45\x5a\x21\x1a\x9b\x0f\xd8\x94\x6d\xd2\xe3\x6e\x9f\x15\xe5\x56\xe0\x3e\xf6\x61\xc2\x83\xae\x34\x50\x8b\xb9\x29\x6e\x50\x44\xf2\xe3\x46\xe6\x6f\x4c\x24\x2e\x18\xf7\x2e\xb7\xc7\xf3\x7e\x1e\x3d\xf0\xbb\xf7\xde\xf6\x6d\x7a\xbf\x5f\x64\x9b\x6d\xa9\xd0\xea\x85\xb8\x05\x89\xbd\x25\x07\x0c\x81\xd7\xb3\x88\x3e\xe1\x56\x87\x21\x79\xdf\xd9\x68\x24\x31\x51\x66\x7e\x9c\xde\xa1\x1c\xf1\x85\xb6\x24\x81\x2f\xc7\xec\xe9\xb4\x3e\x0e\x29\xa9\xe9\x4b\xbb\x41\x49\x29\xae\x9e\x40\x44\xc0\x61\xc4\x9e\x0a\x44\x97\x59\x56\xdc\xa8\xc4\x67\x69\x06\xaa\xa2\x2d\x14\x00\xb3\xf8\x32\x4b\xf3\x77\xdf\x81\xbd\xfb\x17\x9f\x47\x5e\x06\xc2\xdb\x0b\x51\x5e\xa5\x79\xc0\xfc\x1c\x7c\xb6\x53\x10\xe0\xb6\xa9\x4a\xf3\xab\x4c\x3e\xf6\xf2\x5f\xcb\x52\x2d\x3d\x0c\xc7\x95\xbb\x29\xca\x77\x8a\xb8\x0e\x20\x7c\x9f\x49\x79\x22\x33\x71\xeb\x92\xd6\x99\x02\xa1\xfc\xcd\x4e\xe4\x70\x37\xb2\xb7\x16\xd2\x44\x92\xbc\x28\x12\xf9\x38\x13\x15\x42\xb8\xcb\xf2\x05\xf6\xae\xad\x7d\x9e\x14\x4f\xe4\xae\xde\x04\x8a\x94\xbf\xef\xb6\x50\xe7\xc9\x84\x82\xb6\x35\x78\x8d\x7b\xa3\x33\x9e\xa2\x7a\x13\x8e\xf4\xe1\x17\xd8\xfc\x75\x2a\x6f\x76\x45\x59\x9b\x75\x9a\x46\x9f\x4a\x01\x6c\xc5\xfb\xaf\x4d\x70\xb9\x6f\x80\x64\x0a\xd8\x54\xfe\xc5\x9b\x50\xcf\x73\x6e\x0f\x76\xbc\x0f\x34\xcc\xdb\x8c\xa1\x59\x6a\x71\x09\xd4\x61\x2f\x5d\xea\x16\xa2\xd5\x90\x0b\xe6\x31\xa9\xc5\xa5\x22\x8f\xdf\xf3\xba\x69\x82\xe0\x60\x6f\x63\x1d\x7c\xc3\x42\x95\xf5\xa5\x15\x30\xf0\xd2\xf9\xa1\x15\xaf\x64\xfd\xc4\x14\xf7\xa9\xfe\xdd\xa6\x14\x95\x85\xd5\x03\x79\x23\xfa\x63\xde\xb5\x59\x1a\x78\x1b\xdf\x80\x2b\xbe\x8a\xdf\x1d\x06\xd2\x71\x4a\xfc\x6e\x55\xe4\x55\x5d\xee\x57\x75\x51\xc6\x12\x43\x06\xfa\xb1\x47\xb5\xc4\xc6\xc8\x70\xb4\x92\x98\xbf\x14\x36\x60\x73\x25\x6b\x64\x39\xe2\xb6\xab\x50\xbc\xbe\xa1\xa6\x46\xa6\x2c\xe5\xf9\x42\x2e\x07\xea\x3f\x08\xd4\x80\xec\xcc\x90\xcb\xa6\x21\x90\x58\xb2\xba\x1b\xec\x43\xa2\x7c\x11\xdf\x5a\x16\x72\x89\x2a\x72\xac\x64\x29\x84\x85\x82\x1f\x01\x76\x80\x38\x04\x5f\x8a\x21\x48\x14\xbb\xea\x19\x5b\xfb\xdd\x52\x0f\x6d\x21\x97\x50\xfa\x49\xb1\x3a\x0e\xc1\xaa\x6d\x13\x8b\xd5\x81\x89\x24\xf9\x07\x10\x2e\x71\x07\xe8\x36\x26\x84\xe3\x44\x47\x70\x5c\xd4\xf3\x40\xb1\x14\x41\x1c\xec\x73\xd0\xc0\x0e\x96\xe4\xab\x02\x7d\x20\xa0\x51\xf3\x51\x4b\xbe\xd9\xd7\x71\x8b\xac\xe4\xd1\xac\x3c\xab\x5d\xbc\x92\x12\x9c\x54\x2b\x86\x54\x2d\xa1\xfa\x98\xe4\x62\x2b\x39\x97\xee\xa9\xa5\xda\xc1\x6b\x42\xc9\xa6\x28\x4c\x17\x49\xf2\x0a\x03\x4b\xc6\xff\xf4\x0c\x93\x3d\x8a\xab\x9e\xd4\xc5\x3b\x99\xcf\xeb\xd8\x3a\xd6\x26\xad\x6d\x44\x3f\x01\x3a\x2c\xda\x1b\x35\x44\x7a\x44\x72\xeb\x3e\xaa\x93\xad\xb8\x05\x82\xfb\x52\x82\x14\x56\xae\xf7\xd9\x24\xa0\x33\xd2\xa5\xf6\xcc\xcc\x73\x1e\x29\x6a\x8f\xd4\x14\x7c\x4d\x1b\xd5\xec\x92\xc8\x45\xbe\xa4\x67\x3c\x9d\xd1\x7c\x34\x1a\x48\x33\xb1\x9c\x45\x10\xa8\x86\x78\x0b\x66\x22\x67\xb2\x3b\x05\x60\x71\x0e\xe1\x33\xd5\xe5\x1e\xd7\xac\xd8\x89\xdf\xf7\x32\x2e\xc3\xb0\x9c\xe0\x37\xdb\x95\x69\x51\xa6\xf5\x2d\x26\x9a\x5f\x4d\x13\x1d\xfa\x71\x97\x29\x71\xf0\x43\x77\x4e\x74\x88\xce\xd1\x48\x31\xc1\x2a\x1d\xf0\x0c\x6c\x74\xdf\x82\xdf\xb7\xd9\x76\xec\x3d\xbb\x6d\x36\x48\x6d\xb4\x99\x12\x6c\x05\xec\xff\x51\x00\x56\x70\x6b\xf4\x41\x80\xe8\x1d\x3e\xe8\x6d\xd9\x39\x1c\x28\x43\x11\x81\xba\xbc\xda\x33\xc0\x8d\x33\xdd\x0e\x4d\xb7\x75\x18\x9a\xf8\x24\x7e\x1a\x41\xbd\x63\xce\xeb\xb9\x0f\x4d\xbe\x47\xf9\xb9\xf6\x5a\x1e\x63\x64\x95\xb8\x9e\x43\xc4\x14\x2f\x2a\x0a\x65\xff\xd4\xc0\x08\xe6\x15\x34\x0c\x1f\x61\x4c\x56\xa6\xe5\x2e\x66\xb4\x96\xba\xf9\xc8\xa2\xb7\x1d\x95\xb3\x92\x8f\xa7\xda\xcf\x79\xdd\xe3\xd8\xbc\xd6\x2e\xeb\x53\x13\xc6\x81\x7a\x3e\xd4\xcf\xcb\x30\x24\x66\x38\xbe\x2f\x76\x89\x78\xdc\xf7\x5d\xcf\x72\xde\xee\x7f\x57\xa6\x5b\xb8\x4f\xc2\xf0\x85\x5e\x7a\xcf\xb9\x47\xc1\x53\x63\xa6\x27\x20\xbe\x22\xd8\xeb\x59\x3d\xa0\x92\x15\xda\xae\xac\x74\x2f\x94\xd6\x48\x16\x2d\xea\x8c\x71\x1e\x11\x93\xd5\x66\x1e\xc5\x53\x4a\x47\x53\x2f\x4c\x7a\x35\xdb\x9f\x95\x10\x0b\xdd\x4c\x61\xcf\xb4\xcc\x3b\xeb\x5b\xaa\x41\xc4\x79\x01\xb6\x11\x2e\xd8\x47\x66\x8f\x6b\xb6\xc8\x97\x7a\xc4\x93\xd5\xe6\x3c\x0a\xc3\xaf\x52\xb7\x6f\xb9\x89\xb0\x52\x30\x28\xa8\xe6\x43\xd9\x8f\x10\xe3\x54\x61\xe1\xb7\x0a\xff\x3c\xaa\xe3\xde\xab\xf2\xaa\xb6\x1b\x8e\x18\x5e\xcd\x0f\x6a\x54\x1f\xa9\x50\x83\x27\x71\x88\x96\x6e\x7b\x51\x44\x60\xab\x27\x7a\x27\x79\x55\xfb\x30\x86\x3a\xb1\xac\xe4\x1b\xdd\xd0\xcf\x3e\x08\x6a\x33\x42\x86\x78\x8b\x38\x39\x11\x3d\x7d\x08\x81\x97\x30\xe4\xa4\x5a\x2d\x5a\xf3\x72\xf1\x70\x39\xb0\xfe\x21\x8d\xb8\x4a\xf0\x7c\x94\x9e\x9f\xc3\xf3\x37\x11\xf3\x72\xf1\xf0\x81\x18\x4f\x97\x71\x44\xcf\x79\x41\x53\x2e\x9c\x02\x2f\x81\xcc\xd1\x74\x79\x56\x50\x7a\x07\x0d\x3e\x00\x0f\x7d\xe8\xfd\x31\xe7\x62\x34\x45\x4f\x7a\x95\x3a\x68\xee\x15\x58\xe3\x95\x93\x80\xc6\x63\x6b\xb9\x54\x9d\x45\xf3\x3a\x8e\x38\xaf\xd0\x6d\xae\x0b\x30\x50\x8d\xa7\xb8\x4a\x18\x57\xa1\x1d\xf1\xcc\x86\x94\xb6\x42\x47\xeb\xf5\x16\x9d\xcd\xbe\x40\xed\x74\xfb\x4d\x4a\x66\xec\xa4\xf5\xde\x12\x13\x56\x8a\x42\xfd\xb8\x84\xce\xd0\x71\x70\xff\x36\x9a\x06\xb0\x4c\x05\x79\x8b\x68\xe9\xd5\xeb\xee\x3f\x62\xcb\x05\x06\x99\x28\xbb\x84\x85\x73\x46\x69\x62\x49\x97\x8b\x7a\x69\x22\x45\xbb\x88\x12\xa8\x54\x78\x84\x5c\x8b\x45\xbd\xa4\xe9\x42\xfd\x59\x82\x6f\xce\x7d\xb5\x21\xfa\xb7\xf3\xa5\x0c\xa5\xcc\x21\xd3\x6e\x16\x17\xf5\xd2\x79\x5a\x1c\x19\x47\x8b\x58\x75\x21\x96\xcb\x41\x65\xdb\xab\xa8\x89\x1b\x81\x74\x1c\x5a\xb7\xa5\x0b\xff\xf7\x72\xee\x3a\xf7\x93\x69\xac\x12\x14\xfa\x6f\x8d\x0f\x53\xa8\x77\xf2\xa3\xd9\xfe\x2c\x9d\xfc\x7a\x95\x15\x97\xc2\x9c\xe0\xd9\xde\x8c\x2c\xe3\x36\x6f\xb1\x5f\x0e\x14\xa6\x92\x09\x29\x30\x58\x1b\xbe\x0a\x7f\x4d\x72\x96\x4d\xae\x45\x46\x6d\x47\xf8\xd3\xd3\x32\xbc\x92\x48\x29\x40\xa0\xa7\x9e\x7d\x72\xf0\x64\x40\x29\xd1\xa7\x8d\x48\x2e\x6a\x52\x32\x6d\xfd\x30\xd7\x2a\xa4\xa3\x12\xbc\x67\x8f\xa7\xb1\x54\x98\xcc\x86\x29\x3b\x30\x64\xca\x1e\x43\x78\xd6\x0f\xf6\xd4\xd6\xfe\x34\xfd\xfe\x5c\xea\x08\x76\xb6\x3f\x08\x4f\x11\x14\x97\xbf\x49\x88\xcb\x65\x6e\xd7\x79\x1b\x4d\xc4\x30\x34\x40\x79\x71\x89\x28\x5a\xb1\x06\x18\x0c\xf6\xc0\x50\x0b\xa4\x67\x4c\xba\xdb\x1f\x74\xb7\xed\x46\xdb\x4d\xd8\x88\xb3\xfd\x4d\x7c\x56\xda\x15\xfb\xbd\xb4\x48\xd2\x36\x40\x31\x46\x32\xa8\x9f\xd1\x03\x53\x78\xeb\x91\x56\x39\xed\x6f\xcf\x35\x73\x57\x17\xbb\x58\x32\x78\xd7\x8e\x0e\x5e\x9b\xaa\x2d\xf6\x93\x8f\x0f\x47\x2d\x5e\x41\xb1\x83\xda\xf4\xfe\xc0\xf0\x2d\xfd\x11\x52\x12\xbd\xd2\x3e\xeb\x32\xf6\x28\xc0\x99\xb4\xa1\x1e\xcc\xe6\x21\x14\xb8\xbd\x04\x60\x18\xc8\xb3\x76\x81\xb9\xec\xd4\x88\xe5\x79\x11\x86\x44\xf2\x42\x75\x16\x29\xc4\xdd\xc2\xe7\xfa\xc4\xe5\xdc\xe2\xb4\x1f\x0d\x40\xe0\x32\x44\xc7\xcb\xc0\xca\xa6\x49\x61\x2d\x46\x24\x9d\xdb\xfe\x70\xbe\xe3\x1f\x6b\x92\xd3\x58\x5d\x3a\x5a\xd4\xf9\x56\xbe\x3f\x5a\x77\xb7\xe8\x79\x2b\x98\xbc\xab\xa5\xf6\x1d\xb4\x7a\xfb\x18\x94\xa3\x4a\x57\xb2\xfe\x41\xb3\xe2\xc7\xe5\x31\x84\xd3\xd1\x46\x3d\x2b\x8b\x2d\xab\x8b\xe3\x8c\xb7\xc5\x01\x18\x87\x1f\xd3\xe4\x4a\xd6\xf1\xbd\xc6\xe1\x4c\xb0\x8a\xed\x5b\xa1\xf6\x59\xc6\x89\xe4\x3f\xf7\x02\x37\xa5\xda\x25\x38\x5b\x71\x69\xbd\x9d\xd7\x5a\x9a\x69\x54\x33\x78\x60\x54\x33\x02\x56\x77\xe2\x89\xac\xb6\xe3\xf4\x2a\x2f\x4a\x39\x06\x5b\xab\x2a\x60\x41\x5d\xee\x21\xdc\xc9\x31\xc7\xda\x7a\x45\x24\x35\x65\x7b\x00\x9a\x76\x38\xd1\x9a\x62\x58\x14\x70\xb7\x9e\x71\x0c\x24\x6e\x3d\xe3\x8b\xcb\xe2\x5a\x6a\xd7\xf8\xb9\xd4\x5e\xf5\xb5\xb7\x31\xe7\x2f\xbd\xdf\x19\x7b\x07\x2c\x28\xdb\xf8\x55\x70\x24\x9e\xee\x36\xdb\x7b\x0e\x2d\xbd\x74\x3a\x6b\x0d\x43\x1a\xaf\xea\xb5\xd6\x97\xc1\xde\xce\xd7\xe0\x84\xaa\x2e\x76\xe7\xed\x8c\xb9\x9e\xd3\xb8\x9d\x1c\xdf\xd3\xce\x19\x5f\x83\xfb\x7b\x93\x4d\xd9\xca\x96\x80\xe1\x9c\x6f\x40\x09\x64\x33\x6e\xa5\xd2\x43\xed\xa9\xba\x66\x5a\x81\xbb\x25\xa6\xd6\x3f\xc0\x17\x38\x0f\x02\x66\xbd\x82\xa7\x73\xb2\xe2\x3d\x0b\xd2\xee\x81\x75\x1a\x00\x8b\x9d\x98\xa0\x2b\x72\xd5\xc8\x8a\x47\x71\xb0\x4d\x93\x24\x83\x48\x78\x30\xca\xbe\x75\xee\x0c\xfc\xf4\x21\x6d\x0f\x74\x85\x7a\xe5\xe0\xc4\x19\xb1\x0f\x13\xfc\x0e\x50\xc0\x8a\x29\x7c\x90\x31\x18\x42\xdc\x59\x18\xa6\xfd\xe2\x67\x9d\x15\x3d\x68\x1d\x03\x52\xf1\x77\x39\x29\x98\xa0\xd4\x49\xbb\xc3\xf0\x37\x95\x56\xf9\xf2\x6f\x2c\x5e\x79\xe2\xed\x30\x7c\xe9\x97\xfa\x06\x35\xfa\x59\xd7\x69\x8b\xe2\x7c\x2a\x41\x5b\xe9\xa0\xdd\xa6\x32\xb2\x4e\xc6\xf7\xbb\x78\x2f\x5c\x0a\xbc\x82\x98\x46\x12\x41\x99\xa7\x1a\x19\x77\xd4\xe9\xff\x59\x1c\xcb\x6c\x0c\x69\xf5\xcf\x62\x21\x97\x18\xd5\xd6\x9a\xcf\xba\xa1\x3e\xd5\x8f\x7e\x5d\x1e\xed\x3b\xc3\xd3\x29\x7e\x6e\x9d\xe6\xc9\xeb\xa2\xfa\xfa\x08\xed\x18\xa6\x6c\x3a\xa8\x21\x96\x43\xaa\x78\xb7\x9a\x8f\x6b\x47\xdc\x14\x1d\x52\x5e\x7b\xba\xae\xc3\x70\x48\x0a\xfe\x52\xb8\xbc\x82\xa5\xd0\x26\x35\xb1\x05\x66\xa3\x91\xa0\x33\x6b\xe1\x0f\x61\xf4\xbf\xee\xf2\xbf\x3e\x45\x81\x3a\xd5\xf2\x7d\x2d\xf3\xc4\x19\xc2\x7d\x79\xeb\x2a\xe4\x9e\xc7\xd1\x56\x5c\xc7\xa6\x41\x15\x11\xac\xdc\x34\xb9\x61\x2f\xe7\x2f\x85\xd6\xa9\xcb\xd1\x38\x05\xa6\xee\xf4\xf5\xda\x4f\x75\x34\x96\x67\xd1\xdc\x38\xa5\x8c\xd1\x25\xe5\x81\xfd\xa0\x56\x31\x91\x99\xac\x3f\x3c\x01\x2f\x86\x9b\xa3\xc5\xfa\xb4\x8b\xe6\x1f\xf2\x7b\x3c\xc2\x9e\x02\x1a\xff\xa3\xc0\x5d\xb4\xfd\x59\xe3\x9b\x97\x82\xe4\xac\x74\x33\xf2\x7d\x9a\x9e\x45\x73\xbc\x9e\x52\x75\x15\x61\xa1\x43\x8c\x49\xba\x4a\x5d\xc4\xe9\xe1\xe0\xc1\xc6\x0f\xf7\xc3\x06\x2b\x78\x7e\x3f\x7c\x88\x2e\x7c\x60\x54\xb8\x7a\x36\x1a\x55\xc6\x9f\xa5\xb9\xbb\x84\xb6\x0c\x72\x11\xa4\x8a\x79\xc1\xf7\x80\x25\x62\xfc\xc3\x0b\x46\x04\x7f\x6e\xf9\xe7\x94\x95\x0e\xa0\xb4\x7f\x7e\x3d\x4f\x81\x10\xf5\xc3\x87\x36\xc4\xdb\x08\x96\xf2\x85\xe2\x4d\x86\xad\x7b\x0d\x80\x27\x0c\x87\xb9\x86\x1c\xd0\x78\x92\x59\xdf\x9e\xa1\xc4\xee\x43\xd0\x29\xe0\x30\x5b\x05\x69\xb5\x11\xc2\x80\x92\x40\xcf\x40\xc8\xa9\xfc\x5c\x92\x92\x09\xdf\x58\x6a\x80\x38\x4a\x4c\xae\x0a\x91\x3d\x86\xb8\x32\x10\xe1\x17\xd6\xc4\x4f\xa5\x2c\xd5\x8c\x0d\xda\x21\x69\xaf\xcf\xcf\x05\x29\x19\x72\xf4\x1a\x0e\x4c\xc8\x93\x3a\x0c\x05\xe7\x79\x9b\x52\x0f\xc3\xb7\x39\x29\xd9\x0f\x6a\x1c\x7b\x3d\x04\xb8\xd3\x2a\x20\x6d\xd9\x5e\xc1\xbc\x53\xcc\x6e\xb3\x5f\x79\x4f\xe8\x3a\xc5\x86\xf9\xe9\x0b\xb1\xf4\x06\xcd\xd3\x85\x58\x6a\x60\xfb\xb1\x28\x93\x8e\xb8\x00\x85\x49\x3d\x32\x01\x8c\xfe\x0b\x41\x21\x37\xa0\xc9\x82\x92\x80\xda\x0a\x93\x5a\x0c\x2d\x91\xad\x68\x39\x03\x13\xb5\x69\x08\x21\x28\xd3\xd5\xbb\xdb\x30\xcc\x87\xdc\x0b\x52\x54\xce\x47\xa3\x3c\x1e\x8f\x4b\x0f\xdd\xd9\xf8\x39\x25\x58\xa7\x49\x52\xb0\x94\xce\xfb\x84\xdf\x92\x48\x96\xd2\x43\xec\x62\xe7\x14\x7d\x05\x5d\xb6\xa4\x87\x1e\x29\xfa\xd0\x2f\x10\x86\x43\xd5\x2e\x3d\xcc\x20\x56\x8e\x20\x6e\x38\xe3\x29\xa5\x33\x6a\x06\xeb\x89\xd7\x5a\xc5\x72\x0a\x0a\xf2\xf9\xc1\x0b\x8d\xf5\x6b\x8a\x71\x37\x74\x8c\x23\xe6\x7e\xe4\x70\xeb\x15\x57\x57\x19\x48\x58\x21\x50\x6a\x6b\x88\xda\xcc\x2c\x0c\x25\xef\x8a\x58\xa1\x70\xd3\x90\xae\xd8\x18\xd2\xf5\x31\xeb\xa4\xd2\xf9\x6f\x2d\x2a\xdb\x33\x7c\xf3\x35\xd8\x6d\xf9\x80\xc6\x8f\xfe\xc5\x0a\xde\x8b\x86\x49\x7c\x0b\xf3\xd3\x8f\x1a\xbd\xc3\x52\x9c\x95\x0e\xaa\x7e\xef\xdb\xc5\x3d\xaf\x58\x9c\xbf\x56\x37\x84\x33\x26\x39\x6e\x60\xa8\xcd\xe5\x8e\x2d\xae\x86\xf6\xd2\x58\x09\xf4\x1b\x40\x0f\xcc\x10\x2e\xc7\x78\xed\x71\xee\xc9\xed\x40\xcc\x87\x2f\xaa\xcf\xf3\x75\x11\xf7\xdb\x7a\xb6\x1f\xfe\xad\xc7\x4c\xa4\xbe\xa4\x47\xfe\x00\x21\x26\x1d\xd5\xa4\x59\x4d\x9b\xa4\x0d\x2b\x5f\x21\x2a\xa7\xe3\x56\xeb\x97\xa2\xb4\xf1\x92\x14\x7b\x65\x2a\x21\x79\x78\x6f\x1d\xa4\xf2\x7c\x12\x3f\x7e\xa7\xcb\x32\x8f\xbe\x8c\x1f\x95\x46\x92\xae\x17\xe7\x79\x5e\x17\x8a\x37\x3b\x5e\x22\x23\x72\x20\x92\xfb\x2c\x5a\x57\x52\x61\x6f\x41\xf0\x4d\xa0\x05\x15\x28\x61\x6f\x6d\xd5\xf1\xbb\x35\xa5\xc7\xa1\xc3\xe5\xdc\xf4\xa6\x4e\x16\x8b\xa8\x6d\x39\x36\x0e\x27\x30\xa8\x9d\x1d\x95\xb4\x25\x28\x48\x13\xc0\xdd\x45\x5d\xe8\x82\x2a\x6d\x0b\xbd\xf1\xba\x69\x22\x6b\xeb\xa9\xf2\xe0\xdc\xce\xdb\x93\xfe\xae\x15\xbe\xd7\x6c\xe1\xeb\xa2\xe2\xf5\xc1\x90\x81\xf1\x6b\x03\x3c\xe8\x19\x4b\x75\x67\xbb\x51\xd0\x54\xc9\xfa\x4d\xfa\xc7\xd1\xfb\x44\xe7\x36\x3d\x46\x5f\xc7\xab\xd1\x34\xa7\xbf\x5c\x24\xa3\xcf\x34\x52\xd3\x5e\x30\x24\xa5\x73\x89\xba\x34\xf2\x30\xb0\x78\xa5\x7d\xbc\xdb\x0a\xca\xe8\x4a\x40\xf5\x65\x68\xf8\xfa\xc3\x15\x10\x66\x79\x4e\x6a\xe3\x16\xb9\x2f\x5e\x62\x18\x3e\xd3\x00\xe5\xbb\x91\xe8\xb2\xf1\x03\x0b\x39\xa0\x2e\x99\xb2\x1e\x9e\x9e\x75\xe8\x78\x18\xf2\x95\xac\x5d\x24\xf8\x9a\x47\xb3\xfa\xcc\xa6\x9b\xeb\xb2\xc6\xe8\xb8\x36\x7d\x51\x2f\x27\x79\xf1\x35\x02\x1a\xbd\x5b\x81\xa6\x32\x0b\x30\xd7\x86\x52\x1b\x8d\x52\xf3\x60\x86\x5b\x0d\x0e\x7b\x50\x99\x8c\x0f\x23\x87\xfa\xb4\x6a\x40\xc0\xcc\x23\x9a\xf5\xa3\xdc\xf7\x8a\xfb\x6d\x6e\x79\x05\x06\x0f\x92\xaf\x8e\x4b\xdb\xc2\xbf\x9b\x57\x2d\x26\xf3\xe4\x43\x05\x7f\xb0\x05\xf5\x68\x5a\x90\xd5\x8b\xa4\x56\x62\xb5\x91\x89\x93\xed\x0c\xcc\x13\xda\x07\xe6\xfc\x87\x41\x18\x06\x39\xba\x03\xef\xe1\xb6\x76\x1a\x30\x85\x22\x6d\x0b\x7c\x98\x71\x0e\xd3\x34\xc6\x03\x27\x91\xe3\xae\x2c\x89\x9e\x4f\xbe\xa0\x61\x28\xcc\xc0\xee\x5f\xf2\xea\x46\xec\x9e\x14\x47\x8c\x59\xfb\xe1\x6c\x60\xdf\x14\x57\x5b\xcf\x3b\x92\x56\x34\x35\xfa\x4b\x6a\x45\x9c\xff\xef\x6e\x0e\xa1\xec\x75\x6a\x76\xd0\xad\x47\xcf\xad\x65\xf4\xc7\xed\x3d\xe2\xaf\x91\xf4\x17\xa7\xbb\xde\x08\x98\x6a\xbd\x2b\x4d\xcb\x07\x7a\x7e\xe6\x5a\xa5\xac\x3e\x50\x86\x6a\x16\x3d\xc4\x5d\xeb\x30\x6a\x65\x8c\x81\x8b\x48\xf6\x0a\x24\xc3\x9e\x1e\x7a\x9b\x1d\x46\xf6\xb7\x66\x92\xce\xeb\x85\x5c\xc6\x12\xa4\x73\x4e\x19\xf3\x5f\xbd\xb4\xa1\xfa\x8f\x88\x3a\x74\x80\x94\x8f\x35\xa1\x11\xcd\xc1\xdd\xba\x9f\x5c\xd5\xdc\xbd\x50\x17\x55\x05\x3f\xb1\xa6\x56\x9d\x3b\x1c\xd8\xa5\x44\x14\x5f\xca\xab\xb4\xaa\x65\x89\x14\x2f\xf7\x94\x0f\x40\x86\xd8\xf3\x44\xd3\x34\xa4\x5c\xd4\x4b\x2e\xd5\x7f\x77\xfa\x1d\x22\x5e\x28\x72\x5c\xa5\x2f\xf2\x25\x4f\x0f\x5e\xcb\x5f\x41\x81\xde\xf6\x51\xa1\xbf\x3d\x04\xc8\x29\xb0\x2d\xfb\x02\x02\x0c\xca\xdd\xae\x94\x49\x9c\xb2\x6b\x91\xc5\xc5\x81\x1e\x40\xe9\x06\x30\xee\x8f\x82\x07\x0a\xa9\x9e\xa0\x9f\x99\x13\x7c\xe2\x3f\x59\x15\xbb\xdb\x93\x2b\x59\xa3\x33\xe9\x13\x4f\xbf\x26\x40\xc7\x9a\x24\x38\x09\x1c\xe7\xf9\xbb\x38\x49\xf3\x93\xb7\x85\x83\x1a\xea\xff\xe8\xae\xc4\xef\x82\x86\xe1\xd7\xe4\x47\xc1\x7e\x17\x14\xb8\xd9\x37\x9e\xe1\xc3\xe2\x77\xb1\xec\xb9\xdc\x4e\x7a\xa4\xcb\x13\xb1\xdb\x65\xb7\x8e\x57\x11\xe5\x15\x04\xd1\x50\xf4\x09\xf1\x47\xa0\xda\x74\xde\x2b\x2f\x25\x79\x5b\x50\xf6\x46\x4c\x9c\x2e\x75\xc5\xef\x8c\xfa\x75\xfc\xbd\x60\x1d\xe5\xec\xf8\x1b\x71\x50\xe5\xd1\x04\xe2\x45\x91\xb4\xdd\x6f\x61\x0e\xd8\x56\xc0\x03\x60\xd3\x04\x0a\x83\x04\x80\xc2\x48\x37\x97\x4b\xda\xd1\x9b\xb2\xe3\x36\x56\xaf\x0f\xc1\x76\x28\x91\x3b\x99\x27\x32\x5f\xa5\xb2\xe2\x8f\xca\x52\xdc\xb6\x6c\xe2\xd3\x95\xc4\xd3\x68\xab\xb3\x87\x94\xb2\xe7\x72\x21\x97\xbc\x3e\x78\x8b\xe3\x2f\x8c\x37\x8d\xe7\x2f\x9e\x76\x42\xa7\x7c\xa3\xeb\xb6\xe7\x4a\x70\x36\xc7\xae\xca\xee\x40\xb7\xa6\xef\x22\x93\x93\xea\x5d\xba\x7b\x5b\xa0\x6f\xbb\xc3\x81\xb6\xbb\xc5\x68\xe1\xa7\xbb\x4c\xa4\x79\xc0\xb0\x79\xaf\xc8\x53\xc5\xd9\x57\xc7\x91\x5d\x5a\x60\xd2\x19\xe8\x93\x62\x75\x5f\xb5\x16\x24\xd8\x6a\x8a\xf6\x52\x48\xfb\x51\x29\x05\x3f\x32\xe4\x50\xe4\xe7\xfc\x1b\x52\xd3\xf8\xee\x40\xad\xad\x31\xfc\x65\xc3\x7a\x62\xf4\xed\x40\x2e\xad\x95\xe7\x60\xcf\x4c\x06\x77\xe9\x54\x55\xd8\x39\x4b\x02\x55\xa7\xf5\x93\xb4\xb2\x79\x2b\x97\x1a\x8a\x78\x62\xf5\xf1\x0c\x1d\xf8\x9a\xd0\x81\x97\xcc\x4b\x00\x37\x43\xa1\x5e\x1d\x05\x7c\x47\x65\x3e\x1a\x86\x25\x77\xa1\xa9\x2e\x8b\xe4\xd6\x19\xb4\xa1\x0b\x04\x9c\x2d\xb0\xf3\x68\xb3\x83\x81\xb4\x52\xf4\x47\xb3\x2e\x4a\x45\x3f\x83\xcb\x22\xf5\xcd\x82\x6a\x7f\xb9\x4d\xeb\x80\xe5\x30\xd3\x4c\x8a\x6b\xf9\x06\x92\x5e\xc8\x7a\x53\x24\x8f\xb2\x22\x97\x5e\x90\x43\x55\x69\x90\xf2\x62\x82\xf5\x20\x66\x08\x8a\x34\x4c\x52\xcb\x08\x8d\x50\x66\xd3\x53\xfb\xe9\xa7\x8a\x43\xcb\xfb\x45\x3d\x59\xa7\x79\x5a\x6d\x9e\xb7\x3c\x9b\x95\x0a\x25\x57\xe2\x5a\xf2\x9c\x81\x13\x9c\xe3\xbd\xf7\x35\x99\xcb\x49\x5d\xf4\x96\xf0\xd3\xd3\xea\xa5\x78\xc9\xb4\xdf\x7a\xeb\xd1\xbc\x15\xb1\x0b\xba\x6a\xdf\x6f\xa8\x39\x8c\x64\xb2\xbe\x5e\x78\x10\x30\xbb\xb2\xbb\xde\x95\xbd\x6f\x61\x9b\x26\x30\xc3\x73\x1a\x4a\x58\x5f\xaf\x0f\x70\x34\xde\x6f\x9e\x82\x47\x94\xa3\x21\x40\x6c\x7d\x2d\x16\x7b\x23\x88\xaf\x24\xe1\xb4\xc5\xdc\x2c\xdb\x9e\xc9\x58\xdb\x55\xf4\xc1\x49\xbf\x4e\xaa\xb6\xe6\x99\x9c\x14\xeb\x35\xdf\x49\x26\x27\x45\xce\x37\xea\xef\xcd\x46\xca\x0c\x34\x70\x5f\xa7\xef\x65\x56\xf1\xdb\x94\xc9\xc9\x93\x62\xc5\xdf\x2a\xce\xc8\xb9\x72\xe6\xaf\x25\x18\xeb\xef\xf3\x5a\x8b\xb3\x9e\x31\x74\x6a\xac\x7f\xfe\xcc\xe4\x24\xad\x7e\xd4\xa2\x27\x2e\x55\xf1\xd7\xa2\xaa\xf8\xf7\xaa\x9d\xf4\x2a\x17\x19\xdf\xaa\x44\xd5\x1c\xff\x59\x0d\x1b\x6d\x66\x9e\xe6\x09\x7f\x9f\x5a\xd2\xeb\x52\x80\xaa\x47\xc6\xbf\xcc\x55\x0b\x45\xc5\x25\x94\xdd\xee\x80\x97\x53\xdf\x0a\x95\x57\xfc\xb9\x6a\x6c\x9b\x6e\x01\x51\x56\xfc\x1b\x09\xf7\x77\x55\x64\xd7\x78\x4d\x3c\x53\x09\x5a\xff\x82\xff\x21\x75\x3d\x8b\xa9\x2a\xfe\xb5\x4a\x43\x51\x26\x94\xf9\x12\x67\xb8\xbb\x05\x0d\x03\xfe\xbd\x64\xd2\xd3\x4d\xe4\xbf\xab\xdf\x56\x15\x85\xff\x88\xa5\xe1\x29\xa3\xe2\xff\x54\xab\x85\x0a\x96\xfc\x6b\xfd\xfd\x52\x6c\x25\xff\xb9\x80\x75\x79\x51\x24\xe9\x3a\x95\xe5\x3f\xe4\x2d\xff\x5d\x25\x65\x45\xf1\x6e\xbf\x53\x3f\x7f\x54\x3f\xf3\xa2\xdc\x82\x05\x0d\x2a\x73\xf2\xef\x8b\x81\x9c\x20\xd3\xf8\xa6\x2e\xa5\xd8\xf2\x1f\x54\x7f\x6f\x36\xa2\x44\xe6\xe0\x05\x78\x99\xe6\x6f\x54\x65\xef\xf7\xd3\x42\xaf\x30\xbe\xb1\xf2\x4b\xf5\x5b\xfe\xda\x76\x22\xc9\x7f\x85\x99\xff\x5a\xd5\xc5\x4e\x91\x06\xe2\x0a\xf8\x17\x7e\xe3\x92\xf9\x7b\x89\x11\x7a\x40\x23\x9c\xff\xc6\xa4\x35\xd5\xe7\xdf\xa9\x85\xde\x62\xc6\x23\x37\xd5\x8a\x3f\x2f\x50\xa7\xf8\x8d\x98\x5c\xcb\x12\xae\x83\xe0\x8b\xc9\x5f\xfe\x3e\x79\x18\xb0\x37\xe2\xd0\x56\x36\x3e\x56\x84\x78\x0f\x2e\x7e\xc2\xf0\x28\x67\x5b\x24\xfb\x4c\xce\x25\x29\xe5\xef\xfb\xb4\x94\x24\x98\x4c\x4e\x27\x93\xd3\x2c\xbd\x3c\x5d\x15\x89\xdc\x82\x00\x2c\xa0\x34\x76\x07\xd2\x56\xc6\x3b\x2a\x0c\xf1\xef\x44\x6c\x93\x39\x7e\x92\x45\x7f\x33\x4b\x50\xc2\x20\x4e\xb2\x46\x0f\x2d\xe6\x25\xd8\x57\xf2\xa4\xaa\xcb\x74\x55\x07\xce\xdc\xb3\xb6\xf7\xd7\xf0\x88\xea\xaa\xe9\xb1\x62\xeb\xf7\x39\x8e\x22\x41\x75\xd6\x93\x60\x54\x8f\x02\x45\xcb\x55\xe9\x76\x97\xc9\x13\x50\x69\xf6\x8c\xb8\x4b\xaf\x7d\x2d\x5b\x3f\x25\xf3\x98\x9e\x6a\x0f\x51\x41\x60\x9f\x3e\x14\x45\x59\x8b\x7c\xa5\x66\x8f\x66\x79\x73\x22\x27\xf8\xc0\xfd\x58\x54\x12\xc2\xc8\x06\x69\x40\x99\xba\x58\xd1\x5e\x8f\xc6\xd6\x53\xa7\xa4\xcc\x33\xe8\x23\xc3\x29\xe7\xbc\x06\x0b\xbe\x5f\x02\x3a\x0a\xc8\x3c\x0e\x46\x72\x14\xd0\x80\x95\xd4\xbf\xbf\x24\xcb\xe9\x1d\x41\x64\xd4\x34\x12\xe8\x5f\x1a\x86\x35\x84\x83\x6e\x25\x9a\xf0\x03\x57\xf2\x3d\x2f\xc1\xad\xec\x95\xba\xab\x21\x15\xe8\x9a\x23\x4f\x5b\xb2\x1b\xd2\x58\x13\xa0\xf6\x95\xa1\x57\xb7\xca\xd6\xf2\x7d\x77\x4f\xb4\x87\xee\x81\x93\x4e\x2c\x96\x5a\x4b\xd6\xe8\x09\xcf\xca\xd1\x88\xd6\xda\x94\x73\x51\x2e\xc3\x50\xfd\xdf\xd3\x88\xc5\xb4\xf5\x01\x64\x57\xef\x64\x6e\x98\x4e\x51\x0b\xee\x05\x96\x4e\x5b\x2a\x31\xee\x6e\x54\x8b\x86\x21\x9a\xd1\x46\xdd\x48\xf5\x6d\x82\x71\xbb\x6d\x7a\x8a\xb8\x97\x67\xdd\xc0\xdb\x24\xcf\x59\x64\x35\xe2\xa9\xef\x21\x1c\xbc\xc1\xbd\x93\xf9\x01\xfa\xcb\x8a\x95\xc8\x74\xdf\xf0\x3d\x81\x97\x9f\x72\xb2\x85\x0b\xdd\x4b\xb4\x04\x84\x97\x06\xea\x77\x48\xf2\x0c\xac\x1f\x47\xc8\x35\xa5\x10\x69\x02\x3b\x8f\x71\xd4\xab\x81\x6b\x41\x41\x37\x0e\x46\xad\x80\x57\x81\x76\x5a\x53\x7d\xbd\x59\x09\x78\x07\xe2\x9d\x34\xf0\xb3\x43\x4a\xc5\xa2\x97\x78\xb9\x53\xed\xa2\xb0\xe2\x25\x62\xee\x51\x85\x9a\x8b\x94\x15\x9e\x07\x1e\xb9\xd0\x3e\x27\x97\x2c\xe3\xd1\x2c\x3b\x33\xf1\xdd\x66\x99\x51\x57\x5b\xf1\xfd\x22\x5b\xb2\x35\x27\xc3\x15\xec\xe5\xa4\x2a\xb2\xa6\x29\xd5\x1f\xa2\xfa\x31\xeb\xb4\xd2\xd0\x8b\x61\x86\xef\x74\x61\x05\xee\x73\xdd\x09\xf7\xd2\x62\xfd\xad\x20\x6b\x4e\x50\xf7\x7d\xf5\xce\x78\xe9\x5c\xbd\xe3\x8b\x25\xa5\x08\x77\xba\x36\x65\x9d\x66\xe0\x04\xd9\x76\x8a\x1d\x3c\xd6\xa9\xba\xf6\xc3\x87\x0a\xac\x6a\x32\xc0\xe1\x3b\x65\xba\xf2\x16\xc2\x81\x0b\x60\x5e\xbd\x24\xb6\x32\x80\xac\x13\x51\x13\x5a\x35\x8f\x5f\x38\xbe\x52\xff\xc2\xc8\x64\x74\x54\x4f\x9c\x69\xb8\xad\x9a\xc8\x6e\x55\x35\x02\x40\x59\x1b\xae\xfb\x81\x38\x09\x61\xb8\xc1\x13\xad\xe8\x5b\xbe\x21\x6b\x4a\xd9\xda\xe3\xc9\x74\xd9\x30\x3c\x52\x13\x37\xa3\xbd\x73\x47\x60\xb1\x1c\x38\xff\xf4\x0f\x67\xc9\x99\x69\x69\x96\x8c\x46\x74\xbd\x48\x50\x93\x51\x9f\x21\xe4\xd3\xc1\x29\xad\xca\x62\xc8\x59\xe9\x66\x17\xc9\x78\xba\x3c\x50\xa7\x97\x7a\x29\x56\xef\xbe\xdf\x81\xa3\x7c\xeb\x5f\x7e\xbd\x98\x2e\xe7\xea\x3f\x17\x28\x9b\xb2\xcd\x22\x5a\x9a\xf7\x27\x98\xde\x6f\x45\x9a\xcf\x55\x6a\xbc\x39\x1c\x6c\x7b\x39\x0a\xaf\x40\x0c\xee\xb0\x45\xe1\xcc\xda\x15\xf6\x75\x81\x77\x00\x19\x36\x8d\xb9\x22\x87\x9e\xbc\x79\x58\xf7\xa4\x77\x82\x8a\x95\x3c\xb2\x4b\x93\xab\xdb\x46\xa2\x04\xb6\x73\x61\xe5\xda\x63\xeb\x91\x15\x4d\x4e\x9b\x66\x58\x80\x0d\x05\xab\x17\xf9\xd2\x73\xea\x55\x7a\x51\x01\xa0\xe9\x9a\xf6\x54\x0f\xc3\x72\x3c\xf6\x50\x59\xe9\xe6\x2c\xb4\x7c\x45\x68\x55\x56\x54\x90\xdf\x29\x42\xa2\xaa\x65\x5e\x53\x77\x80\x73\x2f\x19\xd0\x46\x35\xdb\x87\xe1\xb0\x9a\xed\xf9\x1e\x56\x94\x92\x14\x4c\xd4\xe7\x85\xfe\x60\x7b\xf8\x43\xe3\x14\x05\x01\x7c\x0f\x7f\x31\x40\xcc\xde\xe8\xa7\x57\x73\x94\x13\xe8\x52\xea\xc2\xb2\x96\x2b\x0c\x1b\xa2\x6c\x05\xc5\xe0\x60\xc5\x3e\x81\x48\x32\x3a\xf0\xc7\xab\x06\xa4\x31\x73\x7b\xac\x1c\xcd\x49\x32\xa6\xda\x8b\xf5\xf8\xb0\xbd\x15\xcb\xd1\xf7\x72\xb7\xce\x81\xb6\xd0\x24\x5f\x99\x9f\xb6\x31\x99\x27\x71\xaa\x71\x38\x81\x0f\xca\x34\xa2\x34\xe9\xc3\xe9\x90\xf3\x14\x85\x99\x4f\xbd\x82\x60\x9d\x69\x90\x7a\x2c\xc2\x50\x20\xb0\x8a\x85\xf0\xe2\x59\x0a\x0f\x3e\x2b\x34\xf4\xe9\xde\x66\x5a\x3c\xe6\xee\x14\x75\xce\x3c\x8c\x8f\x48\x80\x76\x50\xbc\x97\x45\xfc\x49\x42\x63\x4e\x4d\xc2\xe0\x90\xa6\xd1\x85\x50\xdd\x25\xd7\x46\x1f\xb8\x4e\x7e\xf4\x2b\x75\x82\x0c\xcc\x74\xac\x60\x4a\x7c\x7a\x40\x9b\x27\x6b\xd5\x32\x8c\x0e\x06\x65\xb2\xe3\xa6\xe9\xb9\x0d\x0b\x74\x82\xac\xcd\x40\x2b\xdd\x1b\xe4\x66\xd6\x8a\x55\xbc\xb6\x57\xcc\x40\xc6\x46\x47\xbf\xad\x2b\x5d\xf5\xe8\x48\x57\x8b\x3d\xa8\x99\x67\x6d\xf4\x09\x1b\xd7\x4a\x7b\xbe\x56\x44\xbe\xe7\xc1\x67\xc5\x33\xbc\x89\xf0\x56\x44\x37\x15\xab\x30\x5c\x2d\xa2\x25\xbd\x13\xe3\x31\x23\x99\xa6\xc2\x32\x43\x9a\x11\x35\xce\x76\xea\x92\xb2\x94\x1b\xd7\x71\x2b\x87\xe4\xe8\x40\x91\xff\x69\xbe\x97\x27\xf2\x70\x38\xb4\x75\x50\xce\xa2\x79\x14\x9b\x55\x58\x88\xe5\xc1\xba\x2c\x79\x03\xc4\x6c\x5b\x6a\xa7\xfd\x48\x78\x42\xae\x9a\xf5\x72\xbc\x95\xad\x4c\xd0\x26\x07\x38\xe7\x9e\x16\x4b\x05\x74\x35\x29\x58\x80\x2e\x98\xa9\xde\x98\xbb\x03\xdb\xf3\x62\xb2\x95\xb5\x68\x9a\xbb\x03\xcb\xb8\x17\xad\x68\xa5\x70\x54\xa1\xa0\x60\x35\xe4\xfb\x30\x3c\xd2\x3e\x5b\x51\xea\x22\x1b\x89\xc5\x6a\xa9\xe8\xc4\x0d\x2f\x16\xab\x25\x4b\x78\x34\x4b\xce\x36\xfe\xb5\x72\x87\x11\x72\x36\x8b\x64\x39\x58\xeb\x2b\x5c\xde\x9c\xe4\x64\xc7\x0a\x4a\x19\xd9\x59\xf0\xdd\xe9\x3d\xa4\xa0\x12\x39\x8c\x50\xc6\xb3\xd5\x0e\x9e\x01\xd8\x7a\x74\x6d\x11\x41\xe8\x19\x32\x7d\x79\xc1\xf3\x29\x83\xd3\xe0\x7d\x62\x13\xf0\x1b\xfb\x8c\xb3\xf9\x62\x89\x4f\xad\x07\x66\x39\xdc\x1e\x63\x0c\xdd\x8b\xf6\xf7\x68\x7b\xa9\xcd\x65\xa9\xbb\xaa\xf1\x00\xde\xd7\x5b\x6d\x49\x06\xf3\x65\xec\x41\xe8\x61\x50\x7b\x27\x1c\xc8\x35\x0f\xab\x79\xec\x37\xa9\x3d\xec\xc0\xfc\x4a\x14\x35\x2b\x81\xe2\x21\xa5\xa6\x9b\x74\x8a\xed\xc7\x91\xf7\x39\xaf\x8f\x6f\x8b\x7c\x96\xf3\x1c\x6f\x8a\xf2\x3e\xfc\x9c\x63\xd7\x80\xa4\x73\x1f\x49\x1b\xaa\x8a\xfb\xa3\x9a\xfb\x13\x89\xfd\x89\xe8\x76\x1c\x3d\xa7\x30\xfc\x71\xaf\x07\x4b\x63\x1c\x34\x09\x92\x12\xc1\x4a\xca\xac\xc8\xa1\x5f\xda\xab\xf1\x2c\x8e\x59\xfa\x8b\x66\xae\x28\x37\xae\xc3\xc1\x6c\x51\x45\x04\xdb\xd3\x83\x42\x12\x7b\x0b\xe6\xd7\xea\x48\xec\xe9\xbe\x7b\x12\xae\x15\xa4\x6e\x17\xd7\x4b\xbe\x5f\x5c\x2f\x2d\x31\xb4\x3d\xfc\x6f\xc9\xd2\xcb\xc9\x56\x07\xc7\x7d\x9f\xe6\x57\x1d\xdc\x65\x0e\xca\x27\xbd\x09\x4c\xe9\xa0\xc5\x1f\x6b\x95\xc2\x3e\x56\xd5\x6a\x73\x49\xcf\xd7\x50\xe9\xb8\xa1\x30\x4c\xcf\xc7\xd3\x79\x6a\xfd\x00\xc5\xe9\xc1\xa8\x6a\x21\x1b\x34\xd7\x83\x00\xc7\x5e\xb6\x62\x31\x2f\xb0\xc1\x51\x39\x22\xf9\xbc\x70\x18\x3d\x8e\x68\x3c\x9e\x1e\x1c\x76\xb9\x1f\xf5\x14\xfb\x5a\x96\x6d\x5a\xa7\xd6\x70\xf9\x68\x55\xa7\xd7\xf6\xf4\xe7\xb2\xfc\x00\x96\x29\x8f\x1a\xf4\x4e\x3b\x2b\x27\x90\xda\x6e\x57\xdb\x81\xe1\x2f\xdd\x41\x2b\x0d\x42\x24\xdb\x56\x5a\x59\x78\x08\x74\x12\x3d\x98\x53\x65\x87\x63\x48\x95\xc2\xaf\x44\xad\x3c\xdc\x4b\x1c\x64\xe0\x7a\x52\xed\x18\x46\x36\x9f\xac\xb2\xa2\x92\xe0\x71\x0d\xd8\x41\xb3\xd8\x7e\x25\xd3\x84\xf7\xa2\x8d\x0c\xaf\xa1\x6a\xc8\x9a\xeb\x86\xe6\x39\xc9\x98\xfe\x66\xa9\xe2\x5f\x99\x98\xec\x44\x59\xc9\x27\x32\x4b\xb7\x69\x2d\xcb\x4a\x6d\x16\xb8\x81\xdd\x15\x55\x18\x0e\x8f\xf3\xf5\x18\x52\xcd\x97\xea\xe6\x28\xfb\xc0\xa0\x14\x31\x91\xa5\x5b\x78\x85\x53\x44\x9f\xfb\x35\x0a\x4e\x82\x51\x3b\x61\x0c\xed\x05\x83\xf5\xf9\x78\xaa\x23\x5d\xa8\x05\xe1\x99\xb5\xf5\x5b\x53\xa3\xda\x29\x7c\x06\x3f\x35\x43\x70\xa1\xa2\xba\x4d\x50\xb6\xb6\x53\x3b\x9a\x59\x18\x92\xfb\xe7\x40\x99\xc0\x5f\x7a\x12\xa4\x52\xd4\xb9\x1e\xbe\xcb\x88\xfd\x1f\x94\x55\x9e\x30\x60\x7a\x1a\x31\xb7\xbf\x6c\xc5\xa3\xd9\xea\xac\x74\xe6\xd2\x26\x0c\x3c\xdb\xf0\x72\xb1\x5a\xea\x9d\x53\x3b\xb6\x99\x14\x3b\x99\xe3\x86\x51\xb3\x37\xf4\x6e\xd3\x9d\x40\xd3\x98\x4d\xc1\x1a\xdd\x3d\xd9\x0c\x74\x24\x35\x34\x5b\xd1\x44\xb2\xa6\x27\xcc\x6f\x52\xe0\xf9\x60\x41\x00\x41\xba\x76\x43\xce\x91\x0a\x0d\x43\x92\xf0\x9d\x35\x92\x33\xab\xd3\x3a\xae\x1b\x3c\x0c\x09\x65\x9b\xd6\x9e\x6f\xba\x7b\xde\x4e\x18\xab\xe1\x06\x87\xf1\x74\xc8\xd7\x61\xb8\x3e\xdb\x43\xdc\xbc\x35\x3d\xec\x87\x6a\xdd\xfa\xc1\x60\x4f\x8d\x8b\xcb\xda\x83\x00\x3c\xdc\x06\x02\x7a\xea\x53\xb6\xb5\xb7\x93\x2f\x1e\x73\x21\x23\x5b\xa7\x7b\x7e\x7c\xd6\xe3\x7a\xe0\xad\x01\x18\x82\x9b\x0f\xd2\x5b\x37\xd6\x38\x07\x3a\x89\x71\x35\x0f\xec\x32\x13\xf9\xbb\xb6\x6d\x59\xee\xa4\x72\x7e\x33\x79\xdf\x10\x80\x6b\xb5\x6d\x28\x1c\x61\x7f\x90\xde\xea\x71\x6e\x30\x5f\x2b\x9b\x06\x17\xea\xca\x6b\x77\x69\x10\x4f\xbb\x25\x53\x46\x87\x70\xb5\x76\xc1\xb8\x6c\xd1\xac\xf0\xe1\xb9\x30\x28\xae\x5c\x14\xcb\x81\xee\x44\x00\x60\x1e\xb5\x2b\xcc\x90\xda\xd0\xa4\xe5\x44\xa9\x59\xe5\xd4\x71\x6f\x3e\x8c\xc6\x11\xbe\x76\xf9\x2e\xd9\xe2\x7a\xd2\xfa\xfd\x31\xea\x06\xb2\xe7\x77\x86\x94\x81\x9f\x4c\x93\x3a\xdd\xc5\x3f\xc4\xb6\x1c\x0e\x03\x77\xe4\x70\x38\xfc\x97\x12\x2a\x97\xc5\x8d\x2c\x7f\x05\x07\xd3\xb9\xba\xe6\x3d\x42\xe3\x88\x7c\x61\x9f\x54\x4b\x24\x49\x91\x9f\xaa\xd1\x9e\x22\x7b\xf3\x6f\xd0\x3d\xff\xc2\xa8\xd8\xbf\x38\x98\x7f\x91\x7a\xf2\xb5\x17\x36\xf5\x36\xdb\x80\x1f\x99\x4b\xf0\xc7\xd7\xcb\xe7\x75\xc9\x2d\xe2\x4b\x5d\x50\x5d\x41\xb5\x13\x50\x76\xa7\xa0\x34\x0e\xee\xee\x02\x06\x07\x21\x0e\x0e\x87\xc0\x80\x83\x57\xc7\xeb\x92\xb2\x0e\x36\x8e\x87\x11\xd8\x7c\xc8\x63\xa5\x88\xf7\x63\x57\x71\x5c\xcb\xed\x2e\x03\xff\x4d\xdd\x59\xd0\xff\x4d\xc9\x5e\x7f\xe3\x7e\x13\xd7\xa2\x5a\x95\xe9\xae\x15\x05\xc9\x33\xb0\x85\xc0\x36\x4e\xe2\xcb\x04\x8a\xdc\x6b\x78\x67\x47\xb1\x09\xab\x78\x39\xf9\xad\x2a\xf2\x2c\x61\x7b\xfd\xd9\x34\x15\xcb\x78\x09\xd1\xb8\xb0\x7d\xb6\xe2\xe5\xc4\x58\x2c\x88\x15\x5e\x98\xa7\x8b\x8b\x9b\xcf\x2e\xde\x8b\x29\xba\xa2\x5c\x2f\x4f\xd9\xda\xd7\x05\xb0\x64\xb5\x74\xd8\x02\x63\x8b\x2b\xb6\x47\x5d\xf8\xc1\x3b\x79\xab\x5a\x0d\xd0\x8b\x41\xcd\x25\x31\x49\x27\x42\x1d\x4c\x3f\xe1\x32\xa0\x2c\xf7\x13\x56\x01\x65\xa9\x9f\x90\x40\x28\x1f\x49\x02\x54\x22\x85\xb3\x2d\xb8\x0e\x67\x2e\xea\x62\x1b\x98\x7e\xe1\x87\x61\xe6\xee\xd2\x75\x2c\x49\x90\xae\x03\xca\x6e\x36\x69\x26\xe3\x9a\xdd\xa4\xf5\x26\xae\x99\xc2\xd2\x71\xc9\x92\x22\x2e\x59\x5d\xde\xc6\x25\x5b\xa7\xb9\xc8\x32\xf5\x85\x95\xe3\x94\x81\x9c\x25\x4e\x99\x11\xbe\xc4\x29\xcb\xe5\x8d\x6a\x32\x97\x37\x81\x31\xc7\x8a\x73\x70\xb6\x12\xe7\x0c\x9e\x19\xe3\x9c\x25\xf2\x72\x7f\x75\xa5\x68\x6c\x12\x98\xef\x80\xb2\x6b\x01\x29\xd7\x42\xfd\x00\xd5\x32\xf7\x33\x93\xde\x0f\xb3\xbe\x2a\xc5\x02\x22\x65\xa0\xeb\xa1\xd2\xe0\x43\x95\x2b\xa0\xc1\x35\xac\x47\x75\x93\xea\x6c\xfc\x82\x0a\x95\xc4\xf2\x95\x84\xe1\x62\x74\x77\x18\x15\xba\x6b\x54\xf4\x7e\x5c\x30\x04\xf1\xb8\x60\xee\xed\x52\xa5\x96\x7b\x19\x0b\x06\x01\x15\x63\x01\x42\xf2\x58\xb0\xbd\x79\x3a\x8d\x05\x7b\x29\x5e\xc6\x82\x3d\xcf\xd7\x69\x9e\xd6\xb7\xb1\x00\x42\x5b\xb5\xaf\xfe\xaa\x01\x64\xa2\x82\xdf\xf0\xa1\x06\xb9\xdf\xe1\xb2\xc0\x3e\x51\x76\x0b\xaa\x93\x39\xc3\x33\xab\x32\xf0\x4b\x0d\x6c\x6b\x92\xf0\x2b\xa0\x0c\xb5\x05\xaa\x38\x67\xe2\x46\xa4\x75\x9c\x1f\x0e\x84\xb2\x0d\x3f\x5d\x8c\x2e\xc6\x0f\xc2\x3f\xf1\xb3\xf3\xe1\xbc\xf9\x3f\x7f\xf9\x6f\xcb\x53\x96\xf0\xd3\x5f\xfe\x1b\xd1\x5e\xa8\x9b\x34\x69\x40\xb9\xa7\xc9\x44\x7e\xb5\x17\x57\xb2\x51\x53\x6e\xf4\xa3\xba\x2c\x9b\x2c\xad\xea\xa6\x92\x75\x53\xca\x6b\x59\x56\xb2\x01\xb6\xad\xb9\x14\x95\x6c\xae\x8b\x95\xb8\x6c\xae\x4a\xb1\xdb\xd0\xe0\xd4\x31\x95\x3b\xeb\x36\x58\xb3\x89\x5c\xb2\x94\x97\xac\x76\x92\xda\xad\xa7\xbf\x0e\xd6\x43\xf8\xe0\xa0\xc8\x94\x3f\x07\x7f\x46\x13\xe4\x3f\x83\xfd\xb1\xd5\xc2\x05\xa2\x2d\xfd\x43\x72\x52\xf2\x9c\xf5\xf8\xc2\xb0\xe6\xf5\x0a\xc5\xfd\x37\x88\xae\xb7\x93\xf2\x1d\x01\x5b\x61\xa4\x74\x13\xda\xd3\xde\x96\xed\x48\x80\x08\x61\x6c\x8e\x27\x0b\xb6\xb2\x16\xfa\x39\x76\xa6\x6d\x5a\xdd\x38\xa9\xa2\x49\x86\x1c\x0c\xe3\x67\x34\xe5\xc3\x34\x0c\x83\x8b\x0b\x35\x60\x43\xec\xa5\x4d\x43\xfc\x4e\xa8\xea\x45\xf3\xd7\xcc\x7c\x28\x9c\xed\x0a\xc1\x5c\xe0\xc9\x78\x12\x40\xc4\x12\x33\xec\xd3\x5f\x2e\x92\xc5\x45\xf2\xeb\xf2\x01\x99\xc7\x0b\xf9\x74\xa9\xf6\x75\x39\x87\xa4\x11\x9d\x9f\xda\x59\xed\xac\x6b\x01\x66\x3e\x7a\x1b\x0c\x26\x93\xc0\xaf\x54\xed\x4a\x29\xbc\x59\xa7\x6b\x72\xba\xb8\x58\x5c\x2c\xef\x0e\x17\xe4\x82\xb2\xd9\x45\x7c\x31\x31\xa1\x4e\x72\xaf\x66\x8e\xcd\x73\xd3\xbc\x14\x35\x09\xce\x5b\x6d\xf3\xf3\x80\x79\xf8\x09\xca\x47\xdd\xf9\x91\x79\xfc\x7e\x71\x91\x3c\x1a\x3f\x13\xe3\xf5\xaf\xcb\x51\x53\x2c\xa2\xf1\x7f\xa8\x8f\xcb\x45\x34\x55\xb3\xcc\x3f\x61\x9a\xa7\x17\xc9\xd1\x18\x5d\x1f\x76\x05\xf3\x86\xcc\xe3\x8b\x09\xfe\xa6\xf3\xde\x35\x55\xab\xca\xee\x5d\xce\x53\x1f\x34\xf5\xac\x1f\x04\x74\xee\xef\xf8\x35\xbb\x86\x0d\x55\x24\x3c\x14\x38\x55\x05\x5a\x7a\x90\xaa\x83\x55\xb1\xdd\x82\x1b\x6a\xfb\x45\x69\xfc\x0f\x80\x05\x36\xa5\xf3\x7e\xef\x4e\xac\xe4\xc3\x29\xcb\xf9\x70\x6a\x60\xb3\x76\xb0\x39\xc3\x57\xb2\x12\x45\x3a\xa7\x68\x67\x38\x34\xc3\x1d\x04\x0b\x95\x32\xcf\xf9\x30\x8a\xf3\x30\x0c\x96\xda\xb3\x65\x0e\x31\x43\x4a\x3e\x2c\x0d\x2c\xd7\x87\x03\x6a\x36\x5b\x28\xbc\x24\x64\x71\x95\x6e\x6f\xf7\xd5\x92\x92\xf9\xd0\x7c\x3f\xb8\x78\x48\xe9\xe8\xe2\x12\x97\x0c\xe4\xfd\x3b\x0b\xe4\xe3\x87\x01\x84\x23\xc2\x45\xe0\x01\x94\xb1\xf0\xe0\x81\x06\x5a\xc9\x98\x37\x73\x58\xe7\xff\x71\x0f\x0a\xb8\x65\xb7\xee\xb0\xfc\x1f\xed\xcd\xe8\xac\xaf\xd4\xc4\x25\xfe\xc5\x1a\x67\x9d\xd3\x30\x1c\x8f\x03\xda\x34\xc1\xb8\x93\x3e\xf6\x20\xf9\x53\x36\x0e\xde\x8c\x3b\x00\x18\x9c\x63\xa3\xf5\x44\x91\x92\x20\x14\x85\x24\xfb\x1b\x88\x0e\x50\xc9\x33\x0b\x34\x0f\x86\xc1\x50\xd5\x09\xb8\xfa\xdb\x34\x2e\x2b\x3e\x5d\x9c\x9d\x3f\x50\x90\x6a\x01\x1d\x02\xd9\xa8\xfc\x9c\x32\xd3\x99\x49\xa0\x9f\xb6\xd8\xf0\x28\x63\xc7\x7d\x07\xb5\x7f\x54\x74\x01\x59\x19\x3b\x1c\xaf\xb8\x46\x28\x60\xad\x29\xaa\xfa\xed\xed\x0e\xd5\x61\xd6\x93\x9d\x16\xcd\x3e\xaf\x9e\xe6\xfb\xad\x2c\xc1\x15\x45\x6a\x15\x35\xd6\x8b\x74\x39\xb0\x47\xb8\x80\x89\xb3\x02\xb5\x0e\x59\x4a\x0f\xe0\x83\xa2\xba\xcd\x57\xe8\xd2\xc0\xc3\x0e\x17\x55\x73\x71\x7a\xf1\x60\xf2\x60\x7e\xf1\xe0\xe2\x94\x3e\x50\xb8\x89\x5c\xdc\x2c\x4f\xd9\x70\xea\x63\x05\xac\xcd\x2c\x95\xa5\x5a\x75\xb9\xd7\xa2\x4c\xc1\xb3\x36\xf3\x3e\x53\x7a\xf0\x63\x52\xb4\x9f\xe7\xf0\x88\x95\xf6\x6c\xcd\xdc\x99\x2a\xc3\x30\xa7\x77\x3e\x86\xb7\x4e\xaa\x82\x07\x2a\xdf\xeb\xb8\x07\x54\xfc\x98\x11\x7d\x7d\xea\x63\x5d\x1e\x1d\x6b\xc5\x0e\xc3\xb9\x28\x9b\x26\xf8\x0c\x07\xa2\xe1\xe3\x2e\xa0\xf4\x9e\x21\xa9\x6a\x78\xa8\xfd\x71\xfd\xbe\x17\x55\xea\x1f\xd4\x16\x54\x00\x85\x7a\xc5\x03\xb2\xb8\x3b\x2c\xa9\xa7\x54\x76\xa9\xbd\x42\x4e\xd6\xa2\x7e\x54\x96\xc5\xcd\x23\xb0\xfd\xf2\x7e\x6a\x96\x1f\x85\xd2\x52\x0b\x53\x9c\xb7\x2e\x75\x25\x68\xd6\x1d\xa0\x69\x48\xca\xb3\x08\x1f\xf7\x33\xe3\xd8\xea\x34\xbe\xa8\x14\xb2\xbe\xb8\x19\x91\x79\x7c\xb6\xf8\xe5\x7c\xf9\xe0\xbc\x51\x77\x12\x9d\x37\x17\x77\x8b\x5f\x0e\xcb\x07\x17\x07\x7a\x51\x3d\xf8\xec\x14\x65\xcd\xb6\x1f\x14\xf9\xe8\x0e\x58\x49\xe9\x20\x07\xe5\xb2\x5c\x6b\xdd\x1c\x3c\x9f\xfa\xac\x50\x98\x54\xf0\x72\x3c\x9d\x89\x73\x1e\xcd\xc6\x63\xf3\xd2\xef\x06\xae\xed\x77\x05\x65\x7b\xee\xa6\x51\xc1\xd8\xf7\xe7\x3c\x0a\xc3\xfd\xd9\xe7\x3a\x9a\x2c\xbd\x1b\x8d\x84\x5e\x77\xf4\x8c\x36\x1e\xa7\xf4\x2e\x20\x01\xe7\x20\x34\xe4\xc3\xc8\x18\x8d\x1d\x8c\xeb\x95\xfd\x39\xff\x5c\x35\xf2\x57\x3a\x1a\xa5\xd6\x21\x8b\x3e\x92\x15\xa5\xaa\x92\x4d\x3e\x5d\x04\x7f\xbe\x38\xfd\x1f\x06\x03\x54\xf8\x20\x38\xc3\x91\x63\x97\xc2\x20\x7b\x50\xa3\xe8\xcc\x02\x24\xb6\x15\xc2\xc3\xf0\x78\x92\xe3\x87\x14\x5e\x66\xbb\x63\x2c\xc2\xb0\x3d\xbb\x03\xa4\x74\x77\x5e\x50\x64\x6d\x7e\xe5\x77\x8a\x96\x8d\x87\x11\xc3\xab\x53\x7d\x99\x63\xa7\xbe\xb1\x5b\xf5\x85\x17\x06\xc4\x60\x56\x64\xf2\x30\x62\x5d\x72\x4c\x71\xc7\x0e\xfe\x6e\x9c\x6b\x1e\x78\x62\xdd\xa4\x95\xe6\xf9\x64\x62\x02\x66\xaf\x50\xfd\x57\xdb\x97\x81\x57\xd8\xd2\x85\xd2\xe6\xda\x64\x30\xcd\xd7\x05\x2f\xb4\x01\x63\x6e\x0c\x18\x45\x96\x5e\xe5\x3c\xf7\xce\xe8\xd3\xee\xb3\xbd\x7e\xbe\xfa\x41\x94\xd5\xac\x9c\x95\x1c\x35\x66\x68\xba\x26\xa5\xf6\x49\xe9\x69\xc7\xb8\x37\x3f\x69\xc2\xbf\xe8\xa7\x3e\x35\x16\xd8\x3d\x05\x9c\xd7\x9f\xd2\x18\xac\xed\x7b\xf3\x22\x8a\xa1\x86\x60\xaa\xf8\xbd\x15\xe5\x3b\x99\xe8\xf4\x15\xbe\x7a\xb8\x85\x7b\x43\xdc\x1c\x24\xef\x1a\x99\x8c\xa7\x33\xa9\x4e\x80\x1c\x8f\xe9\xfb\xc9\x6a\x85\xaf\xc5\xb6\xd4\x42\x2e\xbd\x15\x79\xe5\x94\xe3\xdf\x68\xc3\x12\x14\xde\x5b\xc3\x12\x36\x8c\x5c\xf1\x47\xdd\x05\xac\xef\x99\xa9\x53\x7a\x18\x18\x1d\x1e\xd7\xca\x3b\x67\xb4\xf6\x1e\xd9\x7a\x05\xe0\xef\x27\x38\x6b\xae\xb8\xb7\xc0\x45\x4d\x52\xcd\x02\xe3\xe8\x5f\xb6\x6a\xc7\xbd\xd0\x62\xde\xe7\xe4\x32\x2b\x56\xef\x0c\xfa\xf1\x58\x79\x60\x65\xd4\x10\xf1\xff\x76\x39\x7c\x23\x82\x7d\xb4\xaf\x62\xf3\x9c\x73\x4c\x9b\x97\x71\x2e\x6f\x4e\x5e\x80\x43\x10\xb5\xbf\x6c\x18\x51\xdc\x15\x5d\xf8\x11\xd4\x57\x59\xd4\x16\xc6\xba\xa0\xee\xfa\xd8\x65\x33\x20\xcf\x9c\xbe\xe9\x41\x2d\xa9\x9d\xeb\xc0\x86\x52\xb2\xa4\x90\x62\xbe\x5d\xc0\x21\x05\xcf\xe6\x28\x0f\x61\x3b\x1c\x08\xd3\x4e\x15\x9b\xc1\x71\x0c\x9d\xc2\x83\x72\x82\xc6\x64\xea\x67\x18\xea\xd6\x5c\x12\x04\xa4\xf3\x7e\x7b\xad\x78\x85\x3c\x60\x7a\xeb\x99\x2c\xef\xf6\x97\x59\xba\x42\x4b\xa9\x60\x57\xa6\xd7\xa2\x96\xf6\x57\x51\x83\xc3\x0f\xfd\x5b\x5c\x56\xe8\x37\x15\x7f\x2a\x16\xa6\xc8\xb3\x5b\x08\xb1\x63\xdb\x7e\x61\x98\x51\x77\xf8\x35\x8a\x50\xab\x6a\x10\x04\xec\xa9\xaf\xf6\xf5\xd8\xf3\x7c\x0c\x90\xa9\x2b\x29\x78\xe5\x35\x9c\xc2\xef\xf4\xbc\x90\xa9\xd7\xdb\x15\xd8\x03\xa0\xfd\x59\x7b\x8f\xad\xaf\x09\xbd\x7b\x6f\x02\xbd\x9b\x5d\x81\x1d\xef\xa4\x32\xf3\xdb\x2e\x3a\xe8\x42\x1d\xa5\xf2\xef\xdc\x80\x7f\xfb\xcf\x34\x1e\xf5\x35\x0e\x40\x66\xdb\x7f\xe2\xb5\xef\xca\x74\xda\x46\x18\xef\x0e\xa3\x5b\x48\x6d\x82\x6b\xf8\xa5\x6f\xca\xde\x31\x42\x2e\x4d\x5d\x88\x1d\x68\x70\xbc\xd6\xaa\x16\x6a\xe3\xcb\x16\x19\x4d\x73\x2f\xc1\x16\x6f\xbd\x3c\xa4\xae\xc4\x4c\x71\xed\x54\x11\x9b\x3a\x0c\x7f\x8a\xa8\x7f\x96\xf2\x14\x8f\x74\xce\x53\xd7\x8c\xad\x07\xeb\x7a\x43\x72\x98\x68\x29\xc5\x56\xdf\x36\x84\x32\x89\x7e\x82\x6c\x51\x56\x53\xa7\x41\xa1\x12\xb9\xba\xef\xdc\xe4\x9f\x5b\x6b\x6b\x83\xd0\xa4\x1d\xbf\x1a\x81\x22\xf6\x28\x88\x32\xfc\x69\x02\xc9\xef\x6e\xbc\xa3\x19\x2b\x9e\xcd\x8c\xb5\xdd\x9e\x77\xe8\xbe\xe9\x31\xa5\x3c\xa9\xdd\x73\xf8\x49\xc9\xb9\x9c\xbf\x22\x34\x0e\x66\xfa\x84\x1d\x34\xd9\x49\xf5\x5f\xc5\x3a\x96\xf3\x37\x84\xc6\xaf\x48\xed\xd3\xd1\xcf\x7c\xb5\x72\x8d\x83\x55\x5b\x2f\x01\x21\x23\x9a\xa6\xec\x52\xb2\x6f\x48\x30\x0b\x28\x7b\x4e\x63\x4f\x0c\x6a\xcb\xae\x8b\x72\x1b\x50\xf6\x3d\x7b\xd6\x2a\x71\x79\x54\xa2\x9d\x0f\xf8\x61\x6e\x37\xc7\x72\xaf\x8a\x54\x54\x07\x09\x26\x05\xd5\x01\x88\x28\xfb\xdd\x1f\x87\x15\x4c\x62\x27\x98\x43\xe3\xe0\xce\xf5\x7a\x08\x28\xfb\x8d\x09\xc9\x9e\xb3\x27\x66\x79\x70\xa5\xd2\x35\x7c\x93\x40\xc1\x5c\xc0\x2d\xe8\xb7\xaf\x1f\x7b\x20\x56\x0b\xf7\xe9\x74\x1a\x39\x7f\xee\x97\x41\xed\x64\x42\xd9\xd1\x9a\xb0\x57\xb2\x23\x93\x57\xc3\x78\x21\x55\x5a\x51\x1e\xad\xd2\x23\xa9\x17\x0a\xa5\x8e\xb0\xa7\x8a\x1d\x4d\xf3\x5a\x96\x6b\xb1\x02\x97\x44\x73\xef\x3e\xb5\x6c\x94\x6b\x85\xb9\xca\x73\x19\xd7\x94\x3d\x91\xec\xb9\x1a\x84\xe5\xa8\x54\x8e\x6a\x35\x91\xab\x4c\x94\x1f\x6a\xf3\x19\xa5\x71\xa6\x20\x1c\xdf\x1f\x54\xc9\xa6\x09\x64\xbe\xdf\xea\x4f\x05\xeb\xea\x93\xe2\x72\x74\x77\xf3\xe2\x06\xb7\xb3\xaf\x75\xdb\xcc\xfc\x15\xf9\x59\x2d\x88\x69\x6b\xfe\x8a\x7c\x07\x70\xe7\x89\xcc\xd7\x06\x10\x35\x58\xe8\xf5\xfa\x15\x92\xef\x02\xca\xf4\x9e\xc3\x8e\x3f\xc7\x51\x07\xea\x56\xa8\x76\x9f\xb6\x6a\x94\x7d\x0d\x4b\x8f\x35\xbd\x7b\xeb\x43\x4b\xe3\x43\xe8\x7f\xa7\xb1\x11\x5f\x1f\x9f\x0e\x7f\x90\xcc\x49\xb9\x35\x84\x22\x8c\x82\xa8\x1b\xab\x7e\xad\x2a\xc4\x00\xd3\x46\xdc\x6d\x41\x1d\x93\x51\x8e\xde\xed\xe8\x35\xfb\x03\x80\x4e\x35\xa7\xa5\xd1\xb6\x88\x1e\xe6\x33\x09\xf0\xa5\x05\xd3\xdd\xdc\xaf\x31\xd7\xb0\xf8\x2a\xf3\x19\x8d\x41\x54\x5b\xc3\xb8\x9e\xd1\xf8\x8d\x5f\xde\x1d\x4b\x87\x5a\xfe\xd0\xc6\x37\xc0\x50\x59\x53\x9a\x57\xe4\x35\x6c\x16\x0d\x7c\xba\xe2\xeb\x96\x75\xcb\x8f\x44\x7b\x63\x73\x05\xbe\xec\x2b\xe0\x07\xa9\xfc\xde\xa3\x4c\x88\xe2\x96\x34\xb6\x7b\x09\x5d\xe1\x08\x69\x67\x84\x3f\x1a\x8a\x03\x68\x53\x1d\xf7\xda\x31\x48\xdc\x82\x72\xe5\xf4\x64\x73\x5e\xce\xbf\x8d\x3f\x1b\xf4\x4d\xec\xff\xe3\xee\x5f\xdb\xdc\xc6\x8d\x44\x71\xfc\xbd\x3e\x85\xc4\x93\xa3\x25\x22\x58\x6e\xcf\x26\xcf\x73\xfe\xb4\x31\x3a\xbe\x8e\x9d\x8c\x2f\xeb\xee\x99\x6c\x56\xd6\x76\x68\x11\x6a\x61\xac\x26\x3b\x20\xe4\x76\x6f\x8b\xdf\xfd\xff\xa0\x70\x27\x41\x49\xed\xf1\x24\x39\xbf\x37\x76\x8b\x04\x40\xa0\x50\x28\xd4\xbd\xb0\xfe\x18\xa3\x72\x91\xea\x73\xf2\xbb\xe4\xfb\x04\xe1\x12\x3f\x53\x0a\x19\xff\xfc\x99\xce\xa7\xe9\x3b\x8d\xc4\xb6\x6d\xa3\xef\xc0\xd9\x5f\xb3\x9f\xcd\xc5\x74\xde\xcd\x70\x38\x7b\x9b\xb2\x18\x65\xc1\xec\xd7\x91\x0f\x84\x7f\xd1\xf4\xc2\xd9\xb4\x34\x33\xe7\x61\x05\x9f\x3d\xc9\x5e\xa2\x4c\x41\x62\x66\xa1\xfd\x77\x0b\x6d\x98\x86\x3d\xc0\xba\x3e\x80\xd2\x61\x87\x23\xcc\xdd\x08\x8b\x04\xe1\x9f\xa9\xee\xab\x88\x79\x45\x53\x41\xb1\x3c\x35\xca\x53\x0c\x65\x5a\x25\x42\x60\xa3\x7f\x80\x27\x25\xbd\xd6\x83\xec\xcb\x41\xe0\x6e\xbb\xa9\x46\x67\x3a\xfb\xaf\xec\x3f\x43\xc2\x28\xc6\xe3\xcd\xec\x6d\xfa\x99\x62\x2a\xe1\x2f\xb1\x9d\xc2\x44\x9b\x26\xe5\xa8\x7d\x70\x5e\x4a\x44\xf3\xf0\xea\xef\x81\x0b\x82\xa6\x83\xf3\x87\x1f\x9a\x0f\xe8\xc3\x02\x2f\xee\x23\xc0\xcd\xd3\xf4\xa5\xd7\xe7\xe7\xe0\x22\xc6\x6e\xe4\xbf\x76\x0f\xc3\x5f\xc3\xd2\x64\x27\xf2\x6e\xff\x39\xfb\x2b\x66\xea\xcf\x97\xd9\x13\x93\xbe\x8e\x7c\xaf\x07\x7a\x87\x01\x6d\x81\x24\xf8\xdb\x31\xbb\xff\x61\xf2\x61\xb2\xbb\x77\x4f\xeb\x28\x04\x52\xa8\x32\xd2\xb0\x29\x15\x21\x7c\xa4\x60\xd2\xa1\xed\xe9\xfc\xbf\xbf\x5f\xec\x1e\x4d\x7f\x3f\xfb\x1e\xfd\xfe\x7b\x49\xe9\x53\x73\x71\xbf\x01\xf3\x82\x3c\x0b\x2b\x8a\xe1\xcf\x57\xb8\x44\x59\x32\xb3\x44\x44\x51\x31\xb9\x75\x0a\x87\xc3\x1d\x2d\xe1\xbe\x96\x07\x59\x63\x57\x45\xd3\x27\xf2\x50\xe1\x64\x99\x6f\x36\x09\x34\x98\xea\xe5\x51\x0a\x3f\x5b\x48\x04\x68\xb8\x30\x5f\x06\x82\x5e\xef\x41\xfd\x15\xa4\x72\xcb\x8c\x5a\x1c\xd8\x03\xcb\x16\x68\xfd\x29\x71\x3d\x9d\x86\xd6\x82\x45\x07\xf7\xd8\xdf\x57\x55\x7d\x2f\x24\x22\xf7\x1e\x48\xee\x80\x21\x94\x41\x79\x8b\x13\xfd\x9f\xdb\xdb\x1f\x02\x3c\x50\x20\x31\xd4\x2c\xf9\xdd\x2d\x28\x73\x95\xda\xcc\xc6\x0b\x7c\x27\xc1\xfd\x83\x84\xe2\x4b\xfc\x67\x0f\x4d\xfe\x6c\x08\x70\xe3\x93\x1a\xb7\x00\xa7\x4c\x34\xab\xf4\xd4\xf6\x72\x44\x37\xd4\xef\x3c\x8c\xfe\x68\xd7\x67\xfa\x21\x7c\x9a\xea\x83\xfa\x22\xf3\x91\xfa\x3f\x8e\xef\xf6\xc4\xeb\xf6\x9f\x36\x7a\x29\x11\x39\xbf\xa0\x70\xff\x76\xe7\xef\x6d\xdd\xcf\x5e\xef\xff\xba\x73\xef\xbf\x7a\xbd\xff\xe4\xdd\x23\x99\x46\xa7\x57\xea\xbe\xfb\x39\x76\xcb\x51\x6a\xa0\x1c\xa3\xeb\xee\x73\x46\xe3\x2e\xbf\xe7\x75\x17\x34\xd8\x6f\x47\x5b\xd3\x78\x57\x41\xdb\x2c\xdc\x6e\x67\x97\xa2\x6e\xac\x9b\x4d\x4f\xef\x44\xc3\x42\x92\x60\xf5\x97\xa4\xbf\x14\x65\xe9\xc6\x71\xb1\xfd\xf7\x1f\x68\x66\x63\xdc\x5d\xf6\xa1\xfe\xbd\xd2\xef\x8f\xc7\xb1\x7b\xd4\x3f\x0e\x13\xee\xc5\x84\xe0\xb7\x69\x49\x51\x90\x0c\x2e\xa8\x1f\xe3\xaf\xa3\x9e\xb9\x95\x64\x7a\x99\x93\x64\xe8\xc3\xa6\x04\xd8\xb4\x14\x92\x6a\x07\x4b\x0a\xe7\xff\x2c\x15\x71\x26\xd4\x00\x76\x6e\x39\xaf\x9a\x1a\xe2\x21\xfb\x86\x77\xd6\x13\xf5\xec\xf7\x7b\x68\x89\x1a\x2e\xd3\xd4\x4c\x36\x57\x07\x5d\x69\xda\xbd\xb0\x6c\xcf\x01\xc5\x6d\xeb\xc8\xf6\xea\x41\x83\xd7\xd4\xe7\x9e\x4a\x1a\x41\xda\x27\xf6\x5a\x3e\x05\x41\xa3\x4d\x68\x18\xb5\x25\x8f\x9c\x8f\xb9\xf1\x69\xe6\x33\x6e\xb5\xe7\x0c\x7d\x7f\xef\x41\x06\x57\x12\x33\xbe\x7f\x2d\x69\xc9\x5c\x37\x40\x98\x09\xc9\xb5\xf4\x94\xe6\x10\x4b\xab\xfe\xdb\xed\x4e\xd0\x04\xa8\x5f\x18\xbc\xec\x64\x58\xb1\xdb\x95\x12\xa2\xea\x72\xa4\xa8\xc1\xa5\xd5\xa3\x31\x78\x5d\x29\x9c\x45\xaa\x42\x92\xb5\x52\x3c\x4c\xe4\x14\x67\xb2\x4f\x26\x99\x63\x81\x6c\x3f\xef\x5b\xac\xf5\x2d\x66\x06\x3b\x85\xd0\x73\x3f\x7a\x92\x76\xab\x41\xfd\xfb\xc3\xf2\x51\x5b\x0f\x0b\x25\x79\x62\x0a\xd8\xd2\x05\x39\xc8\xcb\x48\x40\x18\x86\x3a\xe9\x01\xf1\xc8\xfd\x8d\x6b\xac\x70\x7a\x9a\xbe\xc0\x39\xf5\xda\xd5\xd4\xd2\x34\x15\x72\xad\x76\xd9\xb1\x9e\x2b\x5d\x1d\x64\xe6\xd3\xba\xb7\x69\x4d\xfd\x65\x6d\xbd\x51\xa4\x30\x97\xe9\xf3\xc6\xc0\x47\x0c\x05\xa3\xb9\x5e\x1b\x43\xe0\xe4\xfd\x99\x85\xc4\x2d\x26\xe9\x4d\x3e\xd4\x13\x56\x7f\xf8\x68\xf8\x80\x97\x78\x49\xf1\x0a\x76\x26\x18\x77\xe9\x66\x93\xb0\xfa\x20\x8d\xf6\x7a\xae\x42\x9a\xf9\x89\xde\x54\x2b\x4f\x0e\xb5\x3f\x58\xb9\x52\x29\x15\x7b\xce\xa8\xd7\x7a\xf6\x24\x5b\xc5\x28\xab\x3c\x34\xed\x11\x40\x3e\xc5\x6f\xd3\x4b\xe8\xb0\xd3\x1f\x1b\x6b\x7a\xba\x02\x6a\x61\x29\x18\xe4\x93\xf2\x68\x1b\x78\x0d\xa9\x7d\xbe\xa4\x5d\x8e\x45\x73\x4b\x8b\x04\x27\x18\xf8\x16\x68\xd4\x52\x68\x30\x9a\x16\x8a\x19\x4e\xf0\x43\xd7\xca\xf0\xe0\x8c\xa6\x57\x5a\xfa\x58\x53\xf5\xea\x91\x7b\x65\x98\xb1\x55\x84\x24\xac\xed\x5d\xa6\xf8\xc6\x1e\x8c\x28\x68\x5b\x69\xf4\x15\x97\xd1\xdb\xb4\x00\xf8\xcd\x34\xfc\xfa\x6e\x00\x68\x97\x59\xaa\xb6\xf2\x81\xf6\xa3\x77\xe9\x22\xbc\xb5\x14\xbb\xa0\x1e\xed\x7b\x4a\xe1\x77\x7b\xad\x57\xfd\x8b\x88\xeb\x30\xe6\xb3\x4c\x59\xb1\x77\x3b\xcb\xc3\x5e\x75\xa6\x16\xdc\x13\xf2\xf5\x69\x08\xbb\xcb\xf0\xb3\x8f\xf4\x40\x31\x66\x19\x76\xce\xa0\xd7\x54\x43\x26\x40\xb3\xb9\xfd\xb2\x59\x39\xf4\xd1\x4e\x66\xe6\x14\x5c\x5e\xa9\xe4\x45\xfb\x59\x5f\xe4\xb1\xe6\x6a\xbc\xac\x07\x4b\x3e\x7b\x07\xf7\x51\x48\x6f\x7a\x96\xe1\x99\xd0\xa9\x67\x8d\x92\x8d\x2e\xfc\xb7\x17\xde\xc8\x24\x1c\x39\x00\xe2\xc7\x10\x88\x56\x81\x14\x5f\xdb\x5f\xe5\xda\x4e\xd3\x73\x2a\xef\xf4\x2f\x14\x9f\xfa\x43\x9d\x07\x43\x0d\xf7\xf3\x08\xe7\x1d\x12\x31\x4b\x3f\xa5\x42\xde\x69\xa8\xbd\xf7\xe7\x6e\x83\x2a\x9a\x3e\x87\x43\xed\x8b\xb3\xd7\x70\x82\xbb\xd0\xbd\xee\xc1\x4b\xa8\x4e\x19\xe5\xbe\xb4\x6a\xad\x85\xc2\xb1\x43\x87\x70\x64\x8e\x8d\x3e\x27\x01\xf7\xa3\xd1\x49\x63\xc1\xb5\xbe\x57\xe1\xc7\xb9\x04\x22\x42\x99\x59\xf9\x97\x80\x15\x79\x1e\x6c\xb0\x6a\xeb\xde\x7e\xe9\xdf\x60\x9f\xff\x3f\xb5\x74\x08\x87\x64\xe8\xa3\x3f\xd8\x5b\x6f\xb0\x40\xe1\x3c\x1e\x1b\xa5\x6e\x88\x9a\x5a\x2d\x0a\xef\x94\x26\xda\x33\x7b\xb6\xf8\xf0\xeb\x9c\x19\x0e\xf9\x31\xed\x2a\x38\x3e\x81\x82\xac\xbd\x77\x9f\x5a\xcc\x9c\xee\xf3\x91\xe2\x33\xda\x46\x9c\xb7\xe9\x19\x50\x87\x33\x7f\x49\x67\xe1\x2c\x50\x12\x2a\xf6\x75\x27\x7d\x61\xef\x76\x89\xbe\xbc\xe2\xd8\xfa\x52\x7e\x15\xd4\x0c\x38\xf8\xc8\xeb\xf0\x23\xfb\xb8\xd8\xd7\xfd\x08\xaf\x5e\xa5\x56\xbd\x10\x53\x7d\x6d\x28\x7e\x81\x9f\x79\x1a\x84\x80\xd2\xdd\x58\x12\x11\x63\x4f\x9f\x1e\x3f\xcb\xa7\xfd\xb3\x7c\x7a\xdc\x2c\x8f\x98\xe3\xd3\xc8\x1c\xdf\x77\x18\x11\x23\x72\x48\xd6\x21\x98\x4f\x97\x7d\x78\x0f\x53\xdb\xf3\xc9\xee\xf7\xde\x85\xdf\xfb\xbf\x4a\x29\x23\x77\xfa\x1d\x6d\x9f\xed\x77\x07\x25\x9e\x77\x54\x6b\xb9\xc1\x2a\xaa\x7a\x01\x85\xf4\xa9\xa5\x87\x37\xbf\xf4\xdf\x98\xb3\x67\xea\x5d\xf6\x46\xfd\xef\x19\x23\xbd\x43\x1a\x13\x90\xf5\x3e\xbd\xf1\x3f\xf4\xe6\xd0\x1d\xe9\x76\xe5\xcd\xa1\xfb\x4e\x69\xb3\xb0\xb6\xf5\x84\xef\x02\x22\x69\x00\x23\x67\xb3\x99\xad\x68\xf6\x52\x0e\xde\x65\xbe\x5e\x45\x4f\xfe\xab\x1e\x31\xbe\x85\x07\x92\xeb\x96\x82\x13\x98\xcd\xe5\x64\x3b\x12\x39\xcc\x57\x6e\x5a\xdc\x92\x32\xe9\xc6\x35\xf4\xd9\x55\xde\xa6\xaf\x7e\x85\xae\x40\x02\xe1\x47\x9a\xbd\xa6\x58\x8d\xd2\xcf\x9e\x79\xed\xe2\xf2\x73\xd0\x60\xdf\x39\x7e\x65\x10\xd2\x63\xdd\xa0\x93\xb1\x6a\x1a\xad\xe8\x2b\x77\x6f\x01\x71\x74\x76\x89\x57\x91\x53\xfa\xa3\x87\x82\x2d\xf9\xe8\x47\x2d\x36\x75\xa4\x29\x89\xf9\x83\xe8\x2d\x35\x08\xac\xdd\x81\xc9\x76\x60\xef\x3d\xde\x52\xb6\x73\x10\x88\x67\x4f\x25\x1c\x3c\x44\x7f\x71\x3c\x8d\xfb\xbb\x35\x7c\x05\xc6\xa0\x7e\xda\xef\x5a\xdf\x3a\xe6\xff\x7f\x14\xd3\x81\xdd\x68\x52\xd6\xf4\x6d\x36\x6d\x3c\xde\xf3\x8d\x80\xfb\xee\x50\xe0\xd3\xf4\x09\xfe\x9f\xc8\x6e\xbc\xf4\xef\xc8\x00\x91\x3c\x9e\xfd\xa5\x9c\xd7\x13\x8a\x7f\xa2\xf8\xef\x3e\xc0\x9e\x84\xd3\xb3\xcc\xd4\x13\xcd\x4c\xb5\x99\x20\xa0\x2e\x0a\xae\xbd\x87\xfd\x2f\x01\xff\xf2\x53\x1f\xeb\x01\xb3\xf1\x6d\x47\x1e\x56\xe5\x87\xc5\xd7\x27\x7e\xdf\xbf\x7b\x7d\x57\x1c\x04\xc2\xfd\xbd\x03\x43\x81\x0f\xc0\x85\xa7\x33\x60\xa0\x1f\x5f\x04\x76\xb5\xbf\x06\xec\xd8\x1e\x83\x29\xa3\xe9\x0f\x1a\x39\x5e\x05\x8c\xd1\x0f\x7b\x19\xba\x3f\xd3\x56\x04\x89\xe7\xd3\x4a\x2e\xc7\x63\x88\x17\x30\x8a\xf2\x5d\x5d\xad\x76\x86\x53\x9b\x7f\x5c\x16\x8b\xdd\x32\xaf\xe9\xae\xa4\xd7\x3b\x65\xa6\xdc\x69\xcc\xde\xa9\xab\x6c\x37\xff\x30\xbf\x6d\x3e\xa4\xf8\x61\xb6\xd8\x91\xef\x91\x29\x86\xe0\xb9\x33\xef\x76\xd6\x6c\xe0\x9e\x8e\xc7\xf7\x3f\xdc\x2a\x7f\x53\x55\x11\x26\xf4\x37\x3d\xc1\x50\xd5\xef\x5e\xca\x77\xbb\x13\xe4\x74\x45\xcf\x8c\xdb\xc7\x2b\xf3\x47\x34\xad\x81\xf5\x6c\xbb\x35\x4b\xcd\x2e\xb1\xf9\x74\x96\xd4\xd5\x2a\xc1\xcb\x65\x36\x5f\x60\x4d\x1c\x32\xe5\x85\x92\x52\xf9\xb9\x7b\x15\x3e\xc1\x09\x78\x31\x25\xe0\x2b\x64\x5d\x74\x32\xee\x39\xfa\x68\x0f\x1c\xff\xd9\x78\xac\x3d\xd4\xb6\x9b\x8d\x32\x83\xc9\xee\xc6\x93\x24\x93\xa3\x7b\x1e\x2c\xbe\xdf\x57\x27\x8c\x30\x7c\x1d\xba\x80\xf9\xef\x10\x16\x9d\xb4\x07\x36\xb1\x98\xca\x5d\x00\xdd\x0d\x15\x6c\x59\x27\x13\x70\xd2\x49\x10\x04\xd8\x98\x36\xca\x67\x53\x4e\x5d\xf8\x9e\x31\x41\x32\x38\xac\x1c\x97\xfd\x90\x9b\x11\xf9\xac\xdd\xa7\xa1\x14\xa1\x4b\x9a\x00\x29\x04\xb5\xab\x62\x2b\x40\xc7\x68\x25\xb5\x2b\x37\x21\xe5\x8c\x67\x1e\xf6\x78\x36\x1c\xf0\xde\x4f\x26\x93\x64\x44\xd8\x78\x9c\xdc\xbb\x27\xff\x98\x95\x92\xd7\x5e\x16\x74\x99\x04\x61\x4c\x41\xb1\x49\x42\xa7\xcb\x25\x78\x8e\xea\x3b\x81\x50\x6b\x10\x22\x0c\xdb\xf3\x0c\x3b\xf6\x65\xba\x5c\x92\x0a\xeb\xab\x97\x08\xe7\xfe\xb3\x07\x76\xb4\x0d\xbb\x13\xf4\xf0\x21\x62\xab\x34\xad\xb4\x22\x72\x56\x29\xd7\x93\x6c\x3b\x7b\x99\xbd\x40\xa0\x58\x55\xca\xcb\x87\x95\xcd\xe6\x57\xcd\x2b\xe7\xb9\x22\x87\x7c\x88\x2a\xe3\xb1\x32\x68\x51\x9f\x99\xf9\x23\xa0\xea\x7c\x3c\x7e\x0e\xba\xd2\x99\x7d\x7a\xef\xbb\x24\x13\x4d\x93\x1a\x2f\x5f\x28\x03\xd4\x8e\xc2\x17\x3a\x6b\x89\x4f\x1c\x3e\xb7\x52\x61\x05\xaf\x47\xe4\xd2\xbc\x56\x1a\x73\x86\x6b\x52\x8e\xc7\xa5\xf1\x7d\x3e\x41\x78\xeb\x7c\x45\xc1\x33\x1d\x84\x61\x29\xdb\x7d\xf8\xe8\x42\x8b\x8c\xfe\x76\x43\x84\xef\xb8\xf3\x70\xa3\x1c\xc8\x37\x26\xf7\x95\x7c\x3b\xdf\x40\x72\x86\x25\x21\xaf\xd0\x96\x6c\xd5\x95\x6e\x3d\xbc\x47\xe4\xad\x29\x9d\x06\x70\xb5\x7e\x6d\x5b\x1d\x16\xa2\x48\xab\xf9\x2d\xcf\x05\xb0\x28\xf5\x6e\x97\x32\x35\x7e\x30\x85\x05\x82\x52\x70\xe4\x67\x50\x44\xff\x15\x8d\xc7\xa3\xfb\xff\x3d\xc7\x1f\xa6\x64\xf2\xe1\xde\xef\xb3\xd9\xfc\x43\xea\x85\x71\x3d\x74\x33\xca\xb5\x2b\xdc\x56\x3b\x98\xb9\x79\xc8\xd7\xc6\xeb\xcc\x34\x57\xfc\xca\x4a\xb7\xc6\x05\xa9\x09\x59\x0d\x1c\x0b\x5f\x50\x29\x42\xae\x66\x5b\x7b\x16\x27\xa9\x6f\x20\x76\x87\x45\xf3\x5f\xee\x01\xf4\x59\x19\x9c\x9a\x3c\xc8\x4e\x94\x37\x93\x04\xc2\x6a\x3c\x86\xdb\xb9\xf6\x06\x76\x2f\xfd\xaf\x55\x99\x59\x40\x38\x89\x90\xde\xe8\x09\xfb\x96\xeb\xf6\xc4\xfc\x07\x6b\x73\x4f\x58\x74\x41\xbb\xdd\xfd\x39\xb6\x91\x71\xfe\x9b\x06\xf0\x73\x96\xef\x76\x15\x2c\x41\xbb\xe5\x8c\x88\x5a\xdf\x6e\x57\xec\x76\x27\x92\x87\x2b\xaa\xed\xc7\x0d\xd5\x29\xdd\xa0\xd1\x6c\xab\x8e\xe4\x6c\xab\x1d\x0b\x27\x69\x01\x35\xed\x33\x7f\x29\xf2\x51\x15\x3e\x82\x7b\x11\x2e\x3f\x7d\xe3\x21\x0f\x6b\x67\x55\xf6\xdd\xef\x2b\xe4\x32\x1f\x40\x8d\x8e\x0c\x10\x5c\x77\x1b\x4e\x7f\x3f\xcb\x4c\xdf\x6c\xf7\xe1\x76\xf7\xa1\x41\xbf\xbb\x8f\xe1\x5e\x79\xaa\xe8\x1d\x24\x77\xcb\xb6\xaa\xa2\x7a\x72\xff\xf7\x49\xf0\xf6\x79\x59\xd8\x77\xbf\xbf\x1f\xbe\x7b\x6a\xa2\x85\x4d\x83\xe1\xef\x87\x09\x14\x6a\xd6\x0d\xdc\xa8\xf7\x13\xbc\xaa\x36\x45\x96\x7c\xe4\x92\xd5\x55\x61\xf5\x4f\x78\xbe\xfc\x44\x45\x9d\x25\x29\x9a\x2f\x6e\x9b\x7f\xfb\xb7\x0f\xc9\x87\xe4\x6f\x7f\x4b\xb0\xab\x0b\x9e\x6d\x67\x60\xaa\x4b\xb2\x20\x56\x5c\x59\xef\x20\x9f\x43\x0d\x3f\xe0\xcf\x2d\xa6\x5f\xae\x38\xad\x6b\x56\x95\x8f\x37\x9b\xea\x9a\x16\xd9\x9f\x29\xae\x3f\xb1\xab\xe7\xf6\x45\xe4\x86\x06\xc7\xbd\xd0\x65\x6f\x20\x46\xe4\xe5\x78\x2c\x46\xe4\xc9\x6e\xe7\x9c\xf6\x20\xc5\x43\xa7\x2c\x87\x57\x09\x0f\x07\xd3\x84\xf8\xf2\xc5\xfd\x68\x16\x00\xbf\x9d\xdf\x29\xda\x98\x2e\x2f\x8f\x6a\x9c\x5f\x5d\x6d\xd8\x12\xae\xc7\xa3\x3f\xe0\xf7\xf9\x72\xef\x6b\x7a\x7d\xd5\xec\xe4\xa6\xe2\xdb\x32\xbf\xa4\xdd\xad\x85\xe4\x09\xfb\xa7\xf9\x6b\xba\x6f\x8a\xc9\xde\xfe\x9b\x22\x36\x02\x6c\x84\x4b\x28\x10\xed\xed\x5e\x1f\x9a\xc3\xdd\x06\x82\x92\xa8\x90\x83\x21\xf1\x33\x6c\xcc\x17\x7e\xc9\x8e\x20\xcf\x82\x4e\x0c\x60\xce\xbe\x4b\xce\xd0\x78\x63\xfd\x5f\x2a\xc5\xf5\x7b\x45\x2e\xf2\xfb\x79\x91\x5f\x09\xca\xef\xdf\x33\x3e\xfa\x78\xae\xbd\x02\x25\x56\xeb\x44\x12\x09\x4e\x54\x17\x56\xae\x24\xd5\x81\xec\x0f\x21\xcf\xd3\x9a\x87\x32\x8b\x5a\x59\x94\x95\x43\x31\x13\xa6\x5c\x4a\x26\x30\x23\xf7\x3f\xf0\xd9\x87\x52\x25\x18\xaf\xc8\xfd\x0f\xf3\x0f\x8b\xdf\x79\xc1\xe7\xb9\xf5\x62\x02\x11\x71\x04\xfc\x85\xce\xd5\x09\x7f\x72\x92\x40\xa2\x85\x48\x2a\x0b\x3e\xe3\x29\xca\x38\xa6\x73\x93\x72\x7b\x41\x68\x29\x21\xf8\xd3\xfb\x57\x4f\x4d\x5e\x92\x54\xa0\x49\x42\x92\x49\xe4\x0d\xd7\x51\x73\xca\x79\x5e\xd7\xff\x7c\x2e\x21\x30\x7d\xcd\xbe\xb0\x72\xba\xe4\x34\x17\x34\xbd\xfd\xb8\x65\x9b\xe2\xa7\xf7\x3f\x46\xab\x8d\xab\xab\x22\x2d\xd1\x2d\x78\x6d\xae\x58\x59\xbc\xa7\x4b\x88\x83\x32\xf2\xd0\x9a\xd5\xd3\x2d\xdf\xbc\xa8\xf8\x0b\xfb\x36\x15\x98\x62\x8e\x06\xb6\xd3\xe3\xcd\xa6\xaf\xc7\xe3\xcd\x26\x75\x8d\xff\xbe\xa5\xfc\x26\xd6\xf4\x3f\xe4\x8b\x54\xf2\x5f\x5e\xc3\xfe\xb9\xfc\x87\x7b\xed\x75\x92\x53\x79\x9d\x97\xd1\x0f\xbc\xd0\xef\x3a\x73\x7f\x99\xd7\xfb\xfa\xe8\xd7\x9d\x6e\x4f\xe8\xa6\x2a\x2f\xea\xb3\xaa\xaf\xa3\x6d\x10\x74\x55\xdb\xd2\xbf\xb0\xa7\xde\x7b\x0f\x6e\x5b\x28\x75\xd6\xdf\xed\x27\xef\x7d\xf0\x3d\x95\x20\xa3\xbf\xe3\x33\xef\xbd\xe9\x68\xce\x80\xdf\xfa\xdc\xe0\x91\xd2\x8f\x36\xf8\x3c\x8a\x58\x2e\xd1\xc2\x7c\x81\x99\x46\xc8\x0b\x2a\x74\xb9\xb0\x75\x55\x0b\x48\x24\x62\x66\xf0\x8e\xd3\x15\xfb\xe2\xf8\x77\x95\x9b\x5f\x05\xd0\xe4\x62\xfd\xa2\x82\xbb\x36\xa5\x08\x41\xc6\x6a\xc8\xbb\x8d\xb0\xb0\x3f\xa2\x67\x06\xe1\x4a\x36\xd8\x96\x2a\x73\x7c\x85\x70\x49\x4a\xc8\xe8\x0b\xa1\xf1\x78\xc4\xc6\xe3\x72\x3c\x4e\xee\x27\x23\x42\x3c\x96\x1c\x42\xd3\x93\xfb\xc9\xa4\x44\xb8\x6c\x70\x1b\xeb\xb3\x36\x39\x89\xc3\x47\x40\x09\xbd\xe0\x00\x64\x31\x66\xb0\x03\x57\xdb\x0b\x90\xfb\xa8\x3e\x22\xec\x13\x99\xe7\xe1\x9e\xe6\x60\x1c\xbb\xbc\xa0\xa3\x3e\x1d\x5f\x09\x1a\x7b\x44\xbe\xa2\xbf\x7f\x50\xee\x08\x5f\xff\xb0\x7c\xc5\x97\xfd\x23\x73\xd7\xee\x0a\xdf\x63\x47\xa6\xef\xac\x94\x9d\x17\x2e\x1c\x00\x54\xbc\xdc\x60\x32\xdf\xed\xf4\x95\x63\x0b\x64\xfc\xf7\x87\xfb\x1f\xee\xdb\xb2\xc2\xbb\xdd\xfd\xb5\x10\x57\x69\x8d\x66\x59\xf0\x62\x46\x33\x88\x34\x87\xda\xca\xfa\x30\xcc\x92\x64\xc2\x27\x34\x13\x13\x79\x22\xa8\x0e\xce\x9f\xdb\xb0\x7a\x3e\x1e\x33\x7b\x20\x4b\xfb\x03\x4a\x53\xdb\xa3\xd6\x60\xef\x14\x47\xf8\x5b\xb5\xb4\x53\x1d\x16\x9c\x5f\xd2\x0d\xe8\x3e\xbc\x74\xf3\x57\x9b\x2d\xcf\xe1\xa9\xa4\x3a\x68\x40\xa7\x4f\x34\x50\xe1\x9a\x23\x5b\xe0\x64\x04\xe5\x97\xac\xa4\x4f\xaa\xe2\xe6\x1d\xaf\x2e\x59\x4d\x49\x14\x25\x28\x94\x83\x48\xd1\x54\xac\xa9\x57\x91\xd1\x7a\x22\x73\xa8\x08\x55\x92\x3f\x9d\xbe\x7d\xa3\xb2\x18\xa6\x1c\xe9\x0a\x4f\xca\xb1\x6c\x94\x56\x7e\x79\x91\xd3\x9b\x52\xe4\x5f\xa0\xa4\x89\xa9\x71\x52\xd9\x3c\x06\x52\x2e\xdc\xd6\x83\x11\x9d\x56\x9f\x76\xbb\xef\x4e\xfe\x30\x82\x6c\x03\xdf\x9d\xfc\x51\xfd\x91\xbc\x7c\xfe\xf8\x99\xdc\x39\x31\xbd\x84\xaa\x4a\xb3\x65\x55\xd6\xd5\x86\x4e\xaf\x73\x5e\xa6\xc9\xd9\x9a\xd5\x43\x4e\xeb\xab\xaa\xac\xe9\xf0\x3a\xaf\x87\xdb\x32\xff\xb8\xa1\x43\x51\x0d\x3f\xd2\x21\xcc\xaf\x18\xe6\xf5\x50\xb2\x86\xd3\x04\x73\x94\x95\x44\xeb\xab\x8d\x72\x49\x25\x8d\x5e\x51\xb1\x5c\xfb\x21\x6f\x36\x86\x93\xd8\xc4\x99\xb5\xca\xb7\x00\x39\xeb\xd3\x04\x7a\x24\xc8\xc4\x8c\x95\xf6\x89\xe1\x90\x06\x75\xb4\x7a\x15\x44\x7e\x2a\xc5\xb0\x61\x7a\x6c\x2e\x7e\x18\xa1\x5b\x09\x66\x99\x97\x65\x25\x86\xf2\x52\x1d\x8a\x35\x1d\xfe\x0d\xda\xfd\x4d\xe7\x0a\x1b\x56\x3c\x78\xaa\x8b\x0b\x0e\x9f\xb1\x62\x78\x53\x6d\x87\x97\x34\x2f\x25\x40\x60\x53\x36\x1b\xd5\x56\xb1\x82\xba\x07\x24\x74\x9b\x25\x28\x3a\x63\x68\x63\xcb\x11\xd4\x29\x80\x0b\x20\xfb\x5e\x03\xfe\x25\xcd\x0b\xca\x6b\xd2\xc5\x5e\x5d\xaf\x52\x73\x5a\x2a\x11\x41\x50\xac\x45\x0c\xfc\x38\x6e\x55\xbd\x90\xc9\x23\x7d\xf2\xb0\x74\x29\x09\xcb\xc9\xc4\x39\xea\x55\x84\xcf\xcb\x05\xce\xc9\x09\xae\xc9\xe8\xc1\xc3\xfc\x51\xe5\x57\x57\x67\xab\xf4\x8f\xff\x87\x10\x52\xc1\x41\x95\xbc\x33\x64\x0b\x40\xb7\x35\x19\x9d\xb8\x5c\x00\x90\x2f\xdd\x56\xde\x87\x6a\x65\x4a\x83\x9c\x9e\xe0\x1c\x4d\x05\x67\x97\x29\xc2\x9b\xe0\x4d\x3e\x79\x80\xcd\xb7\x4c\x93\xc1\x66\x3c\x4e\xc5\x7c\x3b\x15\xd5\x8f\xd5\x35\xe5\x4f\xf3\x9a\xa6\x68\x41\x36\x58\xcc\xb7\x0b\xb2\x41\x16\x72\x02\x72\x93\x53\xce\xe0\xb0\xbe\x2a\x45\xf5\x32\xaf\xd7\xa4\xcd\x74\x1a\x66\x99\x40\xf2\x90\xb4\x24\xb7\xac\x5c\x6e\xb6\x05\x7d\xa5\x24\x1b\x77\x76\xcc\x50\xfc\x45\xc5\x53\x01\xf9\x0d\x37\x6f\xf2\x4b\x6d\xd6\xea\x72\xd4\xac\xfb\x75\xa3\xe0\xbc\xb5\x6a\xe5\x48\xa3\xb4\xd2\x33\xc3\x55\xd3\x6d\x05\x9a\xc8\x60\x69\x70\xd1\xbe\xcb\x79\x7e\x19\x43\x09\x47\x1f\xbd\xb0\x6e\xb5\x6e\xa5\x05\xc4\x5b\xa0\xd9\x72\x23\x55\x0a\x65\x56\xc3\xff\x46\xd9\xc7\x60\xe3\x4b\xb3\xe7\xec\x51\xfd\x90\x4d\x26\xa8\x52\xa4\x9a\xa3\x59\xae\x54\x95\x73\xb6\x40\x19\x4d\xf9\x24\x99\x27\x93\xb4\xa3\x20\x97\xef\x67\x2c\x4b\x12\x34\x49\x16\x89\x6a\x6e\x75\x81\xdd\xe8\x92\x64\xae\x06\x18\x2a\x94\x5e\xc8\xbb\xa0\x53\x8d\x55\x54\x96\x50\x4b\x9e\x1e\x35\x66\xce\xdb\x21\x2b\x87\x25\x32\xb3\xd9\xea\x4f\x6e\xcd\x27\xf5\x94\xdd\x04\xee\xb2\x72\xa8\x8a\x31\x67\x0b\x88\x8d\x56\x7f\x41\x1e\x31\x2f\xcd\xa7\xfd\xfe\x56\x7f\xd5\xe2\x64\x9a\x24\x98\x22\x7d\x1f\x8d\x13\xe4\x2a\x18\xfd\xef\xef\x4e\xee\x5f\xe0\x64\x22\xef\x28\xbd\x52\x25\x7b\xba\xd0\x24\x9c\x9c\x9f\xd3\xfa\xb5\x8a\x18\xc4\xb7\xf0\xd5\xb6\xcc\x1b\x93\x53\xf5\xff\xbe\x98\xba\x08\xf3\x25\xfa\x62\xe8\x5d\x3f\xae\x24\x77\xa8\x62\xe6\x79\x64\x9b\xab\x54\x8f\xa6\x3c\x0a\x52\x23\x64\x9f\xda\xc3\x94\x25\xf7\x8c\xc0\x8b\x9d\xb4\xa7\xb2\x38\x68\x41\x4e\xfd\x00\xf9\xcb\xfb\xd3\x6f\x78\x41\x4b\xca\x73\x41\x5f\x15\x2f\x2a\xee\xbf\xb0\x87\x24\xce\x90\x79\xa7\x08\xd8\x48\x5f\x16\x52\x03\xf8\x62\x8e\x7a\xe2\xcb\x2f\x26\x09\x45\xbe\xa1\xf5\x92\x2a\xc6\xfc\xef\x5b\x5a\x0b\xc8\xe4\x61\x84\x3f\x3d\x47\x5e\x6d\xaf\x54\xb7\xba\x8f\xc9\x35\x13\x9b\x8b\x45\x83\xeb\x75\xb5\xdd\x14\xef\xe9\xa6\xca\x63\xfc\xbe\x2d\xe3\xff\x20\x6c\xda\xc7\xdd\x8f\x4c\x74\x8b\x69\xfe\x24\x5f\x7e\x92\x93\x2a\x8f\xf8\xc6\x49\x5f\xa7\xde\xaf\x9d\x28\xde\xc8\x60\x86\x38\x80\xa2\x3a\x55\x95\xaf\x47\xf1\x9b\xd5\xa2\xe2\xd4\xe9\x5b\x16\xad\x1c\x78\xf1\x02\x70\xba\x40\x9b\xa5\xef\xaa\x90\x7e\xf2\x58\x7d\x72\x68\x8b\x8f\x0f\x57\x39\xdb\xd0\x22\xd1\x75\xc2\x58\xad\x5b\x00\x37\x20\x6f\x31\x9f\x1d\x86\x87\xba\xf0\xb3\xaa\x30\x3d\xe0\x26\x79\x8a\x2a\x7c\xa0\x0b\x20\xe8\xa2\x63\x5a\x35\xc5\xaa\x92\x70\xff\x97\x7a\xbd\x62\x1b\x0a\x45\x09\xb9\xfd\x53\xbd\xd8\xb0\x92\xbe\x01\x0f\x11\xc2\xbd\x1f\xea\xe5\x25\xad\xeb\xfc\x42\x76\xd2\x7f\x61\x97\xab\x41\x25\x13\xd1\x0f\xcc\x00\xa5\xd7\x59\x8a\xa7\x84\xc3\x7f\x7a\xc1\x00\xfb\x9a\xd0\xdd\x6e\x7e\x2b\x98\xd8\xd0\xcc\xc2\xe8\xb9\xda\x96\x82\x8a\x9c\x6d\x32\xd1\x2c\x9a\x3b\x53\x87\xde\x0e\xea\xb3\xf2\xc6\x3b\xab\x80\xee\x26\xf8\x96\xda\xdc\x59\xf2\x00\x5d\xd0\x68\x29\xea\x69\xa7\x67\x73\xf8\x3b\xd0\xee\x0c\x2e\xd8\x3b\x7e\xc7\xeb\xa9\x54\xda\xa7\x94\x7f\x36\xd8\x41\xa7\x4f\xab\x72\xb5\x61\x4b\x61\x7e\xbf\xa9\xc4\x0b\x79\x3e\xcc\xef\x17\x15\xff\xc8\x8a\x82\x96\xe6\xc1\x4f\x65\xbe\x15\xeb\x8a\xb3\xff\xa1\xb6\xd1\xe3\x8f\x15\xb7\x23\x9c\xb1\x4b\x5a\x6d\xed\xcf\x57\xe5\xe7\x7c\xc3\x6c\xd3\x08\xad\x95\x62\x82\x8b\x42\xe9\x09\xd1\x54\x48\x9c\xba\xd3\x30\xbb\x6d\x32\x81\x0c\x0a\xd9\x44\xdd\xa0\xe3\xe9\x16\xbe\x6a\xe5\xa8\x00\x0e\x82\x7a\xe7\x80\xe3\x72\xb7\x0b\x32\x3e\xd8\x7b\xba\xc5\x96\x52\xaf\x32\x36\xe6\xfa\x66\x20\x4c\x4a\x6d\xbc\x71\xeb\x2b\x71\xff\x10\xfe\x51\xec\x1b\x4c\x57\x9c\xa9\x52\x8e\x93\xb3\x35\x1d\x6a\x4a\x33\xe4\xf4\x17\x48\xa4\x02\x7c\xf9\xb2\xba\xbc\x64\x62\xf8\x91\x2e\x73\x49\x42\x98\x00\xa1\x86\x29\x88\x27\x92\x80\x05\xd0\xcf\x75\x36\xfd\xce\xa0\x8e\x96\x08\x76\x49\x8b\x61\xb5\x15\xd0\x3b\xd8\xca\x5a\x2b\x45\xf7\xf4\x96\x5f\xcf\x25\x2e\x50\xf5\x75\x0f\x2f\xb6\xba\x22\xd6\x9e\xde\x0c\xe4\x31\x8b\x5c\x30\x42\x17\xdb\x94\x6e\x76\x79\x60\xa0\x95\x41\x5b\x18\xa5\x85\xc4\x4b\x6d\x03\xed\x0c\xb1\x94\x77\xc4\x30\x10\x9e\x38\x55\xf5\x2c\x61\x9c\xf0\x70\xac\x74\xd9\xb9\x3d\x33\x51\xa4\x79\x58\x6c\x41\xc6\xcc\x87\x4b\x7d\xda\x60\xb4\xf0\xe8\x99\xa4\xfd\x77\x18\xad\x86\x93\x3c\x34\xf9\x11\xc3\xa3\x5d\x1c\xb8\xb2\x20\x58\xaa\xff\xca\xea\x1a\x09\xf6\xf2\x66\x07\x6c\x03\xdf\x8e\xec\x06\xda\x8a\xa3\x49\x61\xd0\x6b\x2f\xb9\xb5\xdc\xdc\x51\x23\x73\x73\xde\x9b\x83\x5c\xec\x2f\x75\x55\xde\xcb\xaf\xd8\x61\x90\x73\x5a\x8b\x88\xf9\xe5\xc0\xfe\xb4\x77\x40\x52\xb8\xdf\x80\x31\x66\xc4\xda\x74\xf6\x72\xc5\x6e\xb9\xf9\x2f\xf9\x97\xb7\xc0\x34\xd4\x1d\xed\x9e\x25\xe7\xca\xbc\x73\xdb\x48\x2a\xa8\x0b\xf6\x83\x43\x4e\xf0\x6b\xb7\x0b\x0c\x6b\x9f\xcb\x62\x9a\x5f\x31\x65\xe1\xd3\x37\x89\xd2\x13\x42\x4e\x66\xfd\x0d\x57\xff\x73\xad\x14\x0f\xd3\xc7\xcb\x25\xbd\x12\xa4\xfd\x60\xdf\xe8\xb8\x6c\x7a\xf8\xe4\x07\x8e\x4f\x8e\xc8\xe6\x0a\x60\x90\xa6\xca\xaa\x2e\x9d\xe8\x0d\x56\x23\x67\x64\x71\x72\x16\xa4\xb2\xfb\x25\xff\x92\x32\x9c\xfc\xf0\xfc\x2c\xc1\xb7\x72\xcf\xb3\xdb\x15\xdb\x08\xca\xb3\x5b\x56\x64\x5c\x0b\x61\x38\x01\x53\xf5\x9d\x14\x83\x45\x5e\xaf\x29\x0f\x34\x83\xe9\x09\xf6\x74\x83\x48\x69\xa5\xf7\xa9\x75\xd5\xd2\xd2\x13\x5c\x46\xf4\x04\xba\x91\xb1\x4b\xc4\xd7\x3e\x65\x05\xe6\x38\xb4\xc4\x44\x40\x50\xe1\xe4\xdd\xe3\xb3\xa7\x2f\x0d\x10\x58\x83\x42\xde\x9c\x1d\x38\x78\xea\x38\x1d\x38\x74\x5f\x47\xfd\xa8\xce\x8a\xff\xed\x4f\x1e\xa8\xd1\xf4\xa9\x21\xeb\xbe\xa3\xa8\x76\xf5\xfd\xe9\xcf\xef\xa6\x5a\x4d\x8b\x2b\x92\xd8\x74\xe6\x4e\x53\xf8\x0b\x68\x59\x70\x1e\x7d\x59\x4a\x38\x3b\x0e\xac\x0e\xf1\xb7\x02\x15\x6e\x45\xe8\x54\x55\x2c\x30\x6a\x3c\x5d\xd8\x70\x5b\x63\x7b\x90\x60\xd3\xb5\x76\x37\xb7\x34\x92\x4d\x15\xcf\x92\xe6\xae\xa4\xcc\x78\x5c\xb5\x04\x95\x99\x6d\x56\xa1\xac\xf2\x62\x54\xf5\x6c\x8c\x77\x9d\x2a\x87\x02\x80\x3f\x5b\xf3\xea\xba\xf4\xb5\xc7\x4a\x6f\x5c\x91\xa0\x81\xd5\x92\x24\x42\xb1\x33\x09\x21\xba\x8e\xf1\x29\x2c\x00\x55\x90\x16\xac\x0c\xd8\x1d\xd7\x0b\x18\x9a\x76\x1f\xf0\x00\x82\x22\x3f\x7a\x84\x98\x05\x82\x6a\x35\x34\x66\x84\x4e\xb7\x7c\x83\x25\x14\xbd\x99\xe1\x5c\x95\x99\x93\x40\xac\xc9\x01\xe9\x25\x4d\x34\xd1\xd1\x6c\x40\x36\x4c\x26\x1c\x4a\xec\x30\xf8\x37\xad\x76\xbb\x24\x41\x56\x19\xa9\xc6\xcd\xf2\xc6\x6a\xd0\xd4\x22\x1d\x4f\x96\xd6\xa8\x81\x30\x68\xb5\xd6\x9e\x6d\x36\x6b\xc4\xcc\x6d\xf3\x6e\x17\x40\x38\xd8\xf5\x8a\xe4\x76\x9b\xbd\xa0\x61\xaf\xac\x82\x9e\x99\xd1\xe7\x63\x07\xd5\x8c\x7a\x20\xc6\xfa\x73\x19\xd4\x93\x55\x7f\xfb\x9c\xfd\xf2\xd8\x21\xd5\xb3\x33\xfa\x45\xd8\x21\x15\xb9\x8b\x68\xa5\x91\xaa\x15\xf2\x78\xb3\x69\xbd\x48\x91\xff\xed\x95\xe7\xf4\xdb\x78\xb6\x56\x3a\x5d\x55\xfc\x79\xbe\x5c\xfb\xee\x6a\x9e\x15\x6b\xce\x17\x84\x36\xc8\xcf\xa7\xbf\xf6\x1c\x68\x97\x1c\xea\x38\xb2\x7c\x53\x93\xa4\xce\x2f\xe9\xbd\x8a\xb3\x0b\xc9\xe7\x50\xa8\xd5\x09\x79\x31\xe5\x85\x00\xa6\x25\x85\x5c\xbb\x9d\x32\x7b\x78\x8f\x60\x34\x4d\x74\x3e\xd1\x9b\x3a\xd5\xbd\x8d\x32\xda\x24\xc0\x94\x38\xe9\x82\xe6\x67\x2a\x68\x3e\x19\x27\x59\x32\x4b\x06\xf0\x76\x42\x92\x64\x52\x4e\x00\x5c\x31\x8d\x2d\x32\x43\xeb\x64\xb3\x74\xfa\xb1\x2a\x6e\x94\xb9\x47\xa9\xc1\xd9\xea\xc6\xb4\xb1\x70\x6a\x14\xa7\xdb\x61\x24\x5a\x7c\x1a\x8e\x32\x16\x8a\x9c\xaf\xf2\x5a\x7c\xac\x2a\x91\x29\x12\xb8\xac\x2e\xaf\xb6\x82\x16\x69\x97\x45\xb3\xd6\xbe\xb7\xd7\x25\xe5\x20\xed\xa1\xe9\xa6\xaa\x3e\x6d\xaf\xd2\x44\x72\xd0\x6c\x49\x33\x33\x1c\xa4\xf5\xdf\xd6\xf4\x85\x24\xbf\x7b\xc6\x56\x46\x9c\xe8\xd0\x52\x60\xd8\x7c\xa6\xef\xc1\x71\x4c\x31\xee\x69\x22\xf9\x7e\x76\x91\xd1\xf2\x33\xe3\x55\xa9\x53\x8e\x6b\x55\xd3\x28\x05\xc4\x81\xc1\x9e\xbf\xf9\x79\x3c\x86\x02\xf9\xee\xc1\xf4\xfc\x4f\xff\xf1\xd3\xf3\xf7\x7f\x3d\x7f\xf5\xe6\xec\xf9\x0f\xef\x1f\x9f\xbd\x7a\xfb\x06\xed\x76\xa3\x7c\x3c\x1e\x55\x0d\xc2\x75\xc5\x85\xb7\x25\x91\xcb\x3f\x40\x05\x84\x39\x31\xba\x34\x50\x9d\x3f\xfa\xce\x15\xbd\x77\xe9\x0d\x6e\x1b\x2c\x59\x3d\x39\x78\x2a\x2f\x72\x28\xfa\xf4\xb0\x9a\x4c\x50\x39\x67\xf3\x6a\xb1\x20\x54\xfd\x6f\xa9\xcb\x7e\x0e\x29\xca\x46\xdc\x89\x47\x32\x2c\x42\xc0\x55\x28\x37\x97\xf2\x20\xeb\x54\x49\x16\x69\x15\xf1\x1e\x88\x4f\xc2\x0c\xbb\x97\x83\x51\x7e\xf7\xd8\x3a\xec\x20\xcf\x94\x2b\xc9\x26\x2b\x97\x94\x70\xad\xa5\x32\xbc\x8c\x37\x27\xc9\xc9\x68\xbd\x70\x8c\xbb\x2a\x0f\x7e\x5a\xfe\xa3\x3d\x80\x3c\x46\x57\xe9\xf2\x42\xa4\x70\x5e\x20\xad\x17\x29\x47\xfe\x04\xcb\x60\x82\xdc\x4e\x70\x0f\x13\x78\x97\x69\xea\x2d\xfc\xed\x26\xfb\x0f\xe4\xc5\x59\x51\x67\xbc\x31\x1f\x8d\xfb\x6d\x78\xdf\x95\xdc\x6e\x45\xbc\x0f\x5a\x64\x69\xfb\xee\x68\x45\xa7\x9d\x64\x85\x19\x16\x38\x70\xad\x0a\xc0\xc0\xd5\xbc\xf4\x44\xfa\x5c\x40\xbe\xf5\x54\x9c\xbb\x56\xcf\x64\x96\x7d\xfe\x24\xc7\x6c\x86\x39\x5a\x81\x77\x97\x3c\x8d\xe1\x4d\x14\x0a\x1c\x3d\x54\xe0\xdd\xdb\xd3\x90\x0c\xf4\xcb\x35\xa5\x27\xd7\xf4\x7f\x06\x4b\x31\xb5\x22\xa5\x84\x63\xbe\x67\x11\x95\x5c\xc1\x21\xf1\x26\xc7\xc9\xbb\x9f\x42\x92\x50\xec\xf3\x87\xd1\x0a\xd3\x29\x2b\xba\x63\xed\x81\xa7\x94\xb4\x02\xd7\x35\x84\x93\x67\xcf\x7f\x7c\x7e\xf6\x5c\xee\xd5\xb9\xbc\xab\xaf\x5e\x3d\x7b\xc1\xab\xcb\x5e\x0f\x34\xbc\x6f\xc3\x00\xa9\x04\xd2\x36\x79\xf0\x0a\xab\x08\x9b\x33\xe7\x67\x0d\xcc\xae\x9b\x75\x41\x3b\x8e\x66\x15\x22\x84\xe4\xb3\xa0\x17\x49\x92\x2c\xe5\xa4\xc2\x25\x49\x66\xac\x20\xc9\x24\xc7\x31\x57\x08\x2d\xd9\x3a\xe3\x2a\x2d\x8b\xfa\x2f\x4c\xac\x67\xf7\x1e\x8c\x08\x71\xb9\x81\x4a\x6c\xfc\x04\xee\x19\xd3\x28\xca\xb8\x6d\x9e\x96\x90\xb4\x2a\x9c\x43\x68\xef\xb7\x41\x33\xae\x96\x3d\x42\x2d\x2f\x9d\xcb\xfc\xcb\x4f\xef\x7f\xfc\x51\xd5\xc5\xfd\xee\xe4\x0f\xff\xe7\x48\xfb\x99\x92\x1b\x20\xac\x2b\xbf\xc2\x8a\xb4\x1a\xb8\xfb\x63\x0e\x44\x97\xd1\x14\xae\xa6\x64\x6b\x3f\x75\xf0\x13\x38\xa2\x30\xb4\xdb\x49\xd4\x16\x29\xc3\xf3\x05\xc2\xca\x11\x8a\x21\xe5\x6d\x24\x90\x76\x19\xa8\x7c\xcf\xa4\xc8\xb7\x24\x2a\x06\x3f\x5d\xf8\xd3\x09\xce\xe3\x53\x98\x9f\x2c\x90\x94\x73\xe6\x8e\x69\x88\x2c\xc3\xf9\xea\x77\x5d\x11\xe9\x94\x15\x86\x8b\x9d\xb0\x81\xd9\x80\x49\x35\x11\xdf\x83\x0a\x49\x7e\xbd\x56\x4b\x99\x2f\x10\xc2\xd5\x84\x08\xad\x19\x72\xb9\xf2\x07\xf5\xbc\x5c\x68\x77\x47\xc9\xef\xd5\x0d\x4a\x05\x66\x38\x19\xb3\xa2\xfe\xdf\x7f\x7c\xf2\xbf\xff\xf8\x8c\x24\xd6\x71\x23\x36\x41\x23\xdf\xb8\x41\x24\x45\x68\x70\x28\x3a\xb5\x29\x30\x53\x31\x4f\xca\x48\x77\xba\x5d\x2e\x69\xad\x65\x6d\x1b\xbb\xc6\x07\xae\x85\x56\xdd\xb7\x5a\x28\x21\xce\x57\xeb\xa7\x5c\x5b\x7a\xcc\xce\x29\xe3\x59\xc5\x2f\x81\x78\x41\x1b\x2b\xcd\x69\xc5\x8c\x26\x5b\xc6\xf0\x5c\x3c\x03\x19\x93\x16\xaf\x95\x35\xc5\x4e\x78\xa0\x1d\x9a\xa9\x72\x68\x1e\xfe\xe1\xe4\x41\x16\x4c\xa4\xa3\x9f\x4f\x2b\x9c\x2b\x57\xd9\xe1\x1f\x4e\xfe\x3d\x6c\x1c\xaa\xe1\x83\x96\x7f\x08\x5b\x06\x8a\xf6\xa0\xe1\xff\x2f\x6c\x18\xe8\xd0\x55\x43\xe3\x6d\x2b\x25\xaa\xef\xc9\x1f\x4f\x4e\x42\xd0\x79\x3a\x72\x68\xdf\x04\x6f\x75\x67\xf5\x06\xdb\x6d\xea\x73\x4b\xa4\xdf\x93\xef\x4e\x4e\xc6\x63\xfa\xe8\xdf\x4f\x4e\x76\xbb\x7f\x3f\xf9\x83\x64\xdd\x65\x47\xbd\x43\x7d\x1d\xff\xf0\xdd\x77\xaa\xa5\x24\xdc\xd1\x4b\x48\xed\x23\xce\x3b\xee\x8a\x46\x3c\x49\x10\x5e\x91\xdb\x2d\xdf\x64\x14\x2b\xb9\x2f\x13\x0d\x5e\x93\x6a\xea\x69\x5c\x5b\x17\x63\x3e\x53\x0a\x52\x50\x2f\x69\x16\x3d\x5d\xb7\xdd\xf7\x68\x4b\x78\x02\x05\xd3\x3a\xaf\xd7\xe9\xad\xf1\x9e\xcb\x28\xbe\xca\x6f\x36\x55\x5e\x28\x59\x3a\xe6\x32\x28\xaf\xcb\x15\x9c\x8d\xee\xf8\x26\x1c\xc7\x8c\x87\x39\xa1\x53\x3d\xa2\xf2\x9a\xab\x3e\xa1\xb6\x19\xb0\xc5\xc8\x6c\x52\xc7\x47\xea\x85\x62\x86\x9a\xb4\xc2\x1c\x0b\xbc\x42\x03\xe5\x19\xd7\x1f\xa8\xe9\x0f\x50\xf9\x0a\x0d\x52\x62\xa5\x77\x62\xb8\xb2\x03\x2a\x9f\x0e\xd4\x20\x08\xdf\x65\xad\x80\xb4\xf5\xb4\x56\xa8\x42\x02\xaa\x68\x27\xdb\xb7\x88\x65\xef\x22\xe4\x5f\x2b\x34\x50\x5b\xc0\xb7\xda\xe1\x1a\x66\x01\x35\x97\xf0\x5a\x4d\xd9\x1f\xfa\xa8\x0f\x0a\x34\x08\xd4\x37\x84\x0f\x4c\xe0\x2a\xa8\x44\x42\x8a\x21\xec\x1e\x9d\x41\xb5\x0a\x3d\x57\x09\x9f\xca\xce\x95\xf6\xcf\x55\xc0\x5c\xab\xe9\x39\xb0\x28\x6b\xd4\xe0\xe4\xd9\x69\x36\x7c\xff\xfc\xf4\x4c\x2b\xba\xfe\x97\x7c\x33\x4c\x26\x62\x92\x0c\x45\x35\x4c\x26\x54\xb2\x24\xf2\xa1\xc6\xd0\x40\xa4\x55\xaa\x4c\xc5\xf0\x40\xc3\xb2\xaf\x25\x54\x56\xef\xba\x47\x42\xfb\x61\x51\xd1\x1a\x2c\x7d\x35\xa5\x97\xda\x01\x54\x6b\x46\x87\xac\x1c\xde\x54\x5b\x3e\xcc\xaf\xae\x9c\x5f\x64\xf5\x99\x72\xce\x0a\xb0\xb2\x7e\x66\xf9\xf0\x6f\x79\x51\xbc\xe5\x6f\xf5\xd3\xd3\xbc\x2c\x3e\x56\x5f\x7e\x00\x67\xca\xfa\x6f\x72\x08\xb1\xa6\x43\xa3\x57\xd0\xa6\xba\x59\x82\x06\xa5\x9b\xb9\x7f\x0a\x23\x62\x3b\x1c\x2c\xe5\xe3\xa9\x5d\x49\xad\x1f\x64\xaa\xf4\x89\xd4\xe0\xf8\x3f\xc1\xfb\x53\x6f\x51\x30\xef\x7e\x52\x15\xa3\x3b\x14\x65\xed\x0e\x06\x5e\x53\x56\xbf\xc8\x6b\xf1\x04\x54\x32\xba\xaf\xbf\xcf\xb2\xaf\x7a\x1a\x3e\x6c\xf6\x5a\x9b\x8c\x13\x4c\x5e\xd7\xec\xa2\x4c\x5b\xb4\x13\x22\xb1\x24\x09\xd5\xc6\xf7\xae\xa3\xb8\xd6\x1e\x2a\x37\x71\x1b\xa4\x54\xce\xb8\x51\x4f\xb6\xc6\x6f\xb0\x7d\x83\x4b\xc9\x65\xea\x1f\xbb\x5d\xea\xba\x28\x9b\x97\xe4\xfe\xc7\x63\x90\x9d\x80\x5d\x05\x8f\x80\x5b\x53\xf5\xa2\xdf\x06\xf6\x4b\x5d\x95\x0f\x87\xcb\xb5\x3c\xb7\x82\x6c\xc5\xea\xde\xff\x49\x06\x76\xf0\x79\xa2\x7b\xde\x83\x24\x43\x0b\xc2\xf4\x6d\x97\x76\xdd\xe3\xbd\xbd\x5a\x6b\xc1\x0f\xb5\xb8\x53\xa5\xc7\x53\x81\xf2\xca\x2c\xe6\x2a\x85\x08\xad\xa2\x74\x8b\xa0\xae\xe0\x85\x7c\xd1\xa3\x14\x34\x43\x68\x7b\xdf\xc1\xc5\x39\x2d\xe2\xf4\x23\x5d\x55\x9c\x9e\xd2\xb2\x20\x3e\x13\x1c\x2a\x3e\x8d\xe2\xb8\xcb\xc7\xf9\x39\x2a\x6a\x2a\x34\x12\x29\x75\x6f\xca\xb1\xed\x3a\xe7\x0b\x04\x5e\xdf\x8d\x01\x0b\x92\x87\x8f\x38\xfc\x93\xfc\x2d\x97\xcf\x10\xe6\xfa\x58\x84\x52\x14\xd0\xa2\xa3\x70\x3d\xb4\xd7\x45\x1a\x73\x35\x4d\x25\xe9\x2c\xab\x0d\x04\xc4\x1d\x6c\xad\x62\x1f\xa0\xd0\x66\x18\xc2\x60\x4a\x1d\x4a\xea\x4b\x75\xd8\xfc\x5a\x88\xab\xba\x15\xd1\x80\x04\xbf\xb1\xe0\x9a\x24\xf7\xef\x43\x30\x83\xd6\xfa\x97\xe8\xb6\x43\x86\xfe\x5a\x6d\x87\x39\xa7\xc3\x6d\xcd\xca\x0b\xc5\x47\x0c\x9f\xe5\x22\x1f\x5e\x33\xb1\x1e\x96\xd5\x50\x4e\xa9\x4b\x71\xd5\x8d\x30\x1d\x82\xab\xfe\x35\xdb\x6c\x86\xb9\x10\xf4\xf2\x4a\x48\xa2\xb4\xad\x29\x10\x24\xe8\x5a\xad\xe0\x6f\x03\xba\xa1\x5e\x2a\x1e\x5e\xaf\xd9\x72\x3d\x64\x8a\xba\x2b\xc5\xeb\x96\xd3\x62\xb8\xd2\xa4\x4f\x97\xc9\xf3\x46\x81\xa8\x00\x05\xa8\xe1\xbb\x0d\x95\x8c\x66\x4d\x85\xfd\xd4\x5f\xd6\x4c\xd0\x0d\xab\x85\x4d\x2e\x0c\x63\x99\x39\x7b\x4a\xdd\xe9\x2f\xf5\xd4\xcd\x08\x20\x91\x0d\x93\x49\x69\xbc\x94\x9c\x7b\x37\x6d\x70\xf7\xae\x8d\x05\x2c\x83\xf5\x4d\xf8\x01\x14\xd4\x18\x5b\x38\xba\xf5\xbc\xc5\xe3\x0c\x7f\x1f\xff\xc9\x63\x49\x40\xc6\x63\x23\x4a\xcc\xcc\x1f\xd9\xdc\xd8\x56\x92\x64\x42\xb1\xb6\x50\x9d\xad\xe9\xf0\x63\xbe\xfc\x44\xcb\x42\xc7\x53\x14\xb4\x50\x3b\x9b\x97\xda\x1f\xc5\xd8\xad\x92\x64\xc2\x9b\x45\x83\xfb\x64\x8d\x3e\x3d\x15\xae\x88\x68\xd3\xaf\xdd\x2e\x79\x7e\x79\x25\x6e\x86\x4f\xf5\x63\x49\x33\x12\xeb\x8c\x4e\xbc\xda\xee\x84\x90\x4a\xae\x47\x89\x71\xdf\x7f\xf7\xc7\x93\x59\x32\x7f\x7b\xc9\x84\xa0\xc5\x50\x09\xd1\x37\xc3\x97\x67\xaf\x7f\x5c\x24\x19\xc7\xf3\xc4\xc3\x50\x63\x67\x4b\x26\x69\xa9\x2d\x2a\x60\x61\x2b\xe1\x88\x4f\x92\xa1\xfa\x1e\x2d\x86\xb9\x64\x56\x70\xf2\x4e\xf1\xad\xc3\x34\x99\x54\x93\x04\x25\x98\x2d\xb4\x32\xe0\x43\x29\x2f\x4a\xa7\x52\x8e\x25\x8d\x69\xa0\xd4\x9f\xb3\x19\x6a\x07\x7e\xe5\x97\x69\x7e\x11\x8e\xdc\x5e\x07\xe6\xef\x43\x7e\x3e\x9f\x29\xaf\x99\xa4\xd5\xff\x20\xef\x69\xf7\x20\xf9\xf7\xe9\x83\xef\xa6\x7f\x48\x7a\x26\xb8\xcc\xcb\x9c\xdf\xdc\x5b\xd1\x5c\x6c\x39\xad\xef\xeb\x6e\xf6\xc1\x3f\x61\xc6\xb7\xa7\x8f\x5f\xbf\xfb\xf1\xf9\xf9\x8b\xe7\x8f\xcf\x7e\x7a\xff\xfc\xfc\xc5\x8f\x8f\x7f\x50\xee\xcf\xef\x9f\x3f\x7d\xfb\xfe\xd9\xf9\xb3\xc7\x67\x8f\xcf\x9f\xbf\x7f\xff\xf6\xfd\x69\xf7\xf9\xe9\xd9\xe3\xb3\xe7\xaa\x44\xdc\x91\x4b\x3e\xe0\x83\x75\x10\x42\x47\x3b\x12\x9b\x73\x9f\x46\x83\xa7\x4f\x6f\x2e\x3f\x56\x9b\xf1\x38\xa9\xe1\x8f\xf6\x8b\x29\x13\x2a\xcb\xc6\x2c\x22\x21\xea\x96\xb4\xc9\x22\x2f\xe9\x78\xbc\xe7\x73\x70\xf3\xd7\x82\x6f\x97\xa2\xe2\x84\x10\xfb\x7c\x64\xfe\x76\xfa\xbc\x99\x99\x5b\x66\x3f\x88\x24\x25\xfc\x8a\xdd\xef\x6c\x19\x09\x9f\xa9\xed\x25\x74\x1a\x41\x06\x42\xa7\xfa\xe7\x69\xe8\xc1\xea\x88\x29\x49\x3d\x1f\x0b\xbb\x66\x20\x2f\x92\xba\x3c\x7f\xf3\xf3\xcc\x6b\x90\xf1\xd4\x7f\x05\x61\xb9\x2a\x8e\x2c\xe8\xe1\xff\xc8\x6e\x9b\xa8\xbb\xec\x28\x1d\x95\xd3\xe7\x6f\x1e\x3f\xf9\xf1\xf9\xf9\xdb\x77\x67\xaf\xde\xbe\x79\xfc\xa3\x99\xfc\xe9\x6e\xa7\x87\xa5\x68\xb7\x53\x06\xd8\xaa\xc3\xad\x5a\x83\x2c\x2e\xed\x32\xc1\x7d\xd2\x2c\xb9\xd2\x5e\xa9\x2c\xad\x62\xd0\x01\x17\xc4\x08\xd0\x8c\xdf\xa9\xec\xd6\x85\xb4\xec\x15\x81\xbf\x71\x37\x6d\x77\x82\x2d\x6b\xf7\x51\xfb\xb8\xed\x39\x76\xa0\xa6\xee\x49\x77\xb0\xc7\x4d\x7f\xef\x61\x8c\x75\x3d\xec\x09\x44\xa7\xb9\x10\x81\xc4\x2e\x5b\xb4\x2f\x62\x3a\x4b\x4b\x42\x31\xd5\x28\x86\xb2\x92\x94\xbb\xdd\x6d\xa3\xbd\x7e\x6e\x41\x50\xa1\x98\xd5\x8f\x85\xe0\xec\xe3\x56\x80\x87\xe2\x27\x56\x16\x59\x92\x9b\x47\x09\xae\xb4\x18\x54\x5a\x0f\x85\x96\x41\xfb\x36\x70\x6a\xb4\x57\x90\x62\x6c\x21\x5d\x61\x99\x6f\x5e\x4b\xe0\xb5\x83\xb0\x42\xaf\x86\x29\x07\xbd\xb6\xc4\xcf\x17\x95\xa4\x36\xd3\x75\x0e\x73\x4b\x39\x78\x98\x50\x34\x03\xee\xd4\x4e\xf7\x67\x79\x1e\xa5\x0c\x17\xe7\x4e\x22\x34\xc3\xa2\x26\x74\x9d\x85\x3f\xe3\x55\x4c\xb3\xb0\x51\xa3\x78\xe3\x12\x22\x87\xeb\x60\xe1\xda\xff\x82\x47\xd0\x70\x3c\x8e\x40\x63\x7a\xee\x16\x6c\xd6\x95\x52\x34\x22\x44\x04\x36\x51\xc9\x90\x6b\xff\x7d\x29\xf8\xc3\x6f\x0a\x81\xf7\x9c\x5e\x56\x9f\x25\x04\x94\xe9\xec\xfc\x32\xe7\x9f\xb4\xc6\x50\x73\x1f\x8f\xeb\xa7\x1b\x9a\x97\xa9\xbb\xf6\x23\xf3\xa8\xa9\x78\xc6\xb8\xb8\xb1\x80\xd5\xc9\x04\x90\x64\x5b\xf2\x94\x41\xa4\xdd\x47\x63\xa9\x8b\xf9\x28\x61\x36\x88\xa1\x1f\x27\x14\x33\x8b\x7e\x29\x27\x02\x33\x02\x29\x65\x4d\x82\x46\x13\x25\x08\x49\xab\x4a\xa7\x6e\x7e\x6d\x4c\x42\x29\x43\x46\x21\xad\x10\x96\x61\x56\xbf\xa7\x1b\x10\xed\xea\x35\x83\xaa\xc1\x06\x45\x39\xe1\x12\xc1\x35\x0e\xdb\x19\x27\x58\xe5\x4b\xd1\xc6\xc6\xa1\x7c\xf2\x89\xde\xe8\xe2\xb8\x47\x22\xf5\x1e\xf8\x5d\x50\xe1\xb2\x4a\xc4\xf1\xe2\x08\xe8\x7b\x43\x60\x61\x76\x74\xff\x87\xcc\x0e\x41\x52\x27\x79\x5a\x5e\xe7\xe5\x4d\x6b\x7f\xba\xfb\x02\x01\x40\x1e\x5d\xc0\x82\x08\x00\x5b\x67\x5b\x40\xec\x8e\x6f\x0b\x45\x26\x65\xa9\xa1\x23\x66\x13\x44\x64\x83\xd4\x86\xe8\x09\x9a\xed\x78\x99\xd7\x43\xf5\xfb\x1b\x6f\x86\xc9\x0d\x12\xdf\x8a\x83\xd4\x89\xdb\x2d\xb1\x03\xc9\x0d\xe1\xad\xa1\x0d\xf0\xf9\xb7\x0b\x55\x54\x37\xcc\x01\x76\xae\x7d\x0d\x1d\x1f\x22\xf6\x1b\xfa\xd3\xcb\xfb\xe2\x68\x37\x7a\xd9\x78\xaf\xf7\xbc\x77\x72\x8f\x1c\xd2\xf6\xd8\x3b\xae\x45\xc0\x23\x47\xd5\xed\xbf\xa9\xa7\x3f\xa0\x5a\xbf\x9f\xbf\xda\xdd\x7f\x59\x69\xcb\xc5\x7f\x47\x19\xa1\x3d\x93\xf4\x15\x52\x61\x2a\x24\x4b\x5d\xf6\x39\x06\x45\x9d\xf1\xd5\x1b\xfa\x05\x8a\x69\xca\xa1\x8b\x82\x6a\x07\xaf\x5a\x07\x26\xaa\x88\xc4\x8a\x53\x0c\xc5\x78\x24\xa9\x81\xe8\x58\x8f\x3e\xf5\x70\x0f\x76\xa9\x89\x0a\x2c\x80\xa1\xd6\x79\x6d\xdd\x08\xf5\x87\x94\x9a\x18\xf2\x78\x24\x05\xed\xeb\xf5\xcc\xbd\x69\xf7\x53\x8a\x69\x35\x31\xff\x0a\xe6\x46\x39\xed\x2f\x5d\xb2\xdd\x2e\xa0\xb7\x3f\x53\x8b\x71\xf0\xf8\x44\x6f\xac\x31\xb8\xac\xec\xdc\xd5\xc7\x4f\xaf\xe8\x92\xad\x18\x2d\xd2\x12\xa1\x08\x98\x21\x69\x84\xe7\x64\xe3\xaf\xfe\x95\x5d\x81\xf3\x6f\xeb\x87\x4e\x89\x70\x4e\x3c\x26\x22\x2d\x41\x8d\xa8\x6d\x68\xb5\xde\xe3\x0b\x2a\x5e\xe7\x57\x57\xb4\xf8\x33\xbd\x49\x61\xee\x58\xa9\x7f\xd1\xa0\x96\xe0\x94\x4f\x34\x48\xbb\xfb\x38\x1e\xa7\x7a\x9c\xee\x3b\x3d\x18\x9f\xca\x8b\x08\x7b\x5b\x8b\x10\xce\x67\xa9\x98\xd7\x0b\x92\x43\x24\xc1\x54\x5f\x63\xd3\xab\x6a\x73\x73\x59\xf1\xab\x35\x5b\xea\x4f\xda\x5e\xef\xdc\x2b\x95\x06\x49\x99\xd6\x33\x18\x06\xee\x31\xf0\x62\xad\x0c\xd7\x67\x3b\x1a\x14\x0d\xae\x7a\x08\x34\xc4\x7b\x1a\xf5\xec\xad\x0f\x4d\x58\x1e\x32\x2e\x1e\xfb\xe0\xc8\x8e\x81\x23\xfb\x1a\x38\x96\x12\x8e\x6c\x41\xbc\x48\x8e\xb4\x95\x46\x42\x1d\x47\xc5\xb5\x9a\x65\xbe\xa8\x38\x65\x17\xa5\x9c\xa9\x72\x30\x92\x83\xa0\x5f\xbb\x11\x4c\x6f\x84\x3b\x2a\x7d\x29\x91\xbe\xd9\x41\x19\x9a\xde\x7d\xa7\x24\xf0\x57\xfb\xe7\xec\x11\x00\xc6\x72\x8a\x69\x89\xc1\xff\x10\x38\x12\xe5\xbc\x7f\xe8\x14\xcf\x7a\x30\xda\xe3\x94\x2c\xdd\x6a\xc1\xe1\x71\x59\xc8\x4d\x72\x63\x75\x8e\x87\x1e\xe4\x71\xed\xb5\x36\x27\x04\xef\x6f\xb6\xef\xea\x68\x53\x56\x05\x1f\x1f\x30\x10\x59\x61\x80\xa2\xce\xd2\x40\xcc\xcb\x85\xbe\xae\x1e\xa7\x0c\x4d\x2f\xf3\xab\x88\x6b\xc3\x2d\x2b\x32\x0a\x4e\x6b\xc0\x04\x3b\x57\x36\x70\xe9\xec\x85\xd3\xde\x9b\x6e\x0f\x66\x94\xc7\x60\x46\xf9\x75\x98\x51\x2e\xec\xf7\x95\x8a\xdd\x6e\x9e\xb7\xbb\xb0\x13\xbd\x0d\x5a\x9c\xb6\x9f\x65\xc7\x40\x57\x28\x4a\x55\x5a\xd0\x72\x09\xfd\x92\x5e\x0f\x75\xd6\x11\x5b\xc4\x51\x39\x8b\xdb\xc4\x23\xd5\x64\x62\xaa\x04\x96\xf3\x6a\x81\x6b\x92\xf7\x13\x9a\xc1\x21\x42\x93\x63\x81\x6b\x84\xd9\xbc\x5a\x90\xda\x26\x98\x69\x70\x5f\x97\x88\x79\x81\xad\x52\x8f\x51\x55\x1b\xc3\xca\xc2\x9c\x72\xb5\x65\x53\x56\x4a\x5e\x8e\xbe\x00\x07\x2b\x09\x7d\xc7\x91\xf8\x37\x60\x45\x98\x4a\x59\xa0\x5d\xaa\xa0\xc1\x9e\x6c\x3b\xb1\xdd\xad\x30\xd3\x3b\xeb\xb3\x21\x68\x90\x8f\xc7\xca\x67\x73\x58\xce\xf3\x45\xd3\x34\x78\x9d\xd7\x66\x89\x8f\x37\xd7\xf9\x8d\x3e\x93\x11\xb3\x82\xf2\x0a\x15\x82\x3b\x76\xc5\x32\x5f\xe3\x71\x92\x43\x6f\xb9\x78\x31\xa5\x7a\x44\x18\x3e\x4e\x40\xfa\x3e\xd0\x33\x1f\x1d\x65\xb0\x67\x0a\xbb\x1d\x1f\x8f\x13\xa5\x46\xa9\xd5\x1e\xd8\x95\x87\xf3\x78\x75\x68\x0e\xbd\x8b\x4c\x13\x56\xe8\x25\xda\xb1\x77\xbb\x04\x0a\xf8\xf9\xcf\x50\xe7\x83\x21\xc5\xfb\xba\x0f\xdf\xcb\xcb\x02\xcc\x56\xd1\x29\xd8\xb7\xdd\xb9\xf4\xdf\x61\x77\x9a\xc8\x28\x85\x84\x21\xfe\x77\xdd\x56\x23\xb5\xe6\x3e\xde\xf6\x1f\xb1\xdd\x1e\xaa\x37\xd8\xeb\xd6\xf7\x6d\x50\xa6\x41\xbb\x24\x80\xb5\x98\xf7\x25\xbd\x5b\xec\x76\x62\x4e\x17\x92\xf0\xc5\x25\x8d\xbd\x51\x02\x4e\xa9\x40\xf3\xe5\x3a\x38\xaf\x5e\x1a\x89\x0a\xdd\xd2\xbd\x52\x02\x87\xc4\xef\x46\x7e\x85\x4c\x63\xf2\xa8\x8f\xc7\xac\x23\xff\xb8\xcc\xa8\x1c\x97\xb8\x42\x38\xa4\x52\xfd\x1d\xfd\xcc\xa8\xaa\xab\x14\x52\xcb\xee\xba\x0f\x45\x29\x38\x3f\x02\x8e\x13\x29\x36\x4e\xb9\xb7\xee\x7a\x0a\x3e\x5a\xe0\xb7\x91\x18\x1a\xe8\xf2\xac\xb9\xab\x80\xd9\xab\x20\x27\x27\x0f\xf3\x47\xcc\xcf\xb8\xa6\xe4\x06\xbc\x25\x6c\x9e\x2f\xb0\x71\xa3\x70\xd6\x6b\xbb\x45\x1e\xc0\x25\x7f\xb9\x45\x78\x49\x36\xf0\x71\xbc\x22\x1b\x63\x18\x05\x6f\x41\x6e\x7f\x11\xf7\xe7\x6e\x37\x5f\x60\xf7\x53\xf9\xea\x2e\x11\x5e\xa1\xb4\xf6\x9a\x29\xcf\x67\xad\x42\xae\xf1\x0a\x0d\xaa\x79\xbe\x20\x92\x3f\x58\x5a\xfe\x60\x09\x77\x42\xd3\xa8\x84\x0f\x26\x96\x40\xfb\xbb\xd5\xfb\xe0\x85\xd7\x20\x24\xf4\xed\xd8\xb7\xdc\x0a\xd8\x06\x73\x0f\x1d\x01\x51\x86\xe0\x2e\x06\x88\x6e\xa1\x46\xef\xd7\x40\xb4\x46\x78\x8b\xd2\xaa\x0f\xa2\x15\xde\x22\x9d\xfa\xc3\x06\xce\x64\xb5\x05\x6c\xad\x01\x7b\x14\x28\x37\x00\xca\xbd\x0b\xeb\xe3\xcf\xe0\x33\x03\x11\x97\x4d\xd2\xd2\x78\x5c\xd9\x74\x79\x70\x61\xcb\xbb\xbb\xf4\x1c\x8e\xc2\x5b\xbd\x44\x4e\xbd\x9a\x32\xb9\x77\xdb\xcd\x06\x9c\x86\x5b\x64\x06\x94\x26\x2e\x1b\x1f\x8f\xa7\x16\x73\xb9\xbe\x74\x9e\xae\xf0\x81\x3c\xd0\x84\x7b\x29\x17\xfa\x72\x83\x59\x4f\x23\x56\xbf\xa9\xa0\x10\xf4\x78\x3c\x82\x8c\x39\xd3\x7c\xb3\xa9\xae\xdf\xc8\x59\x1a\x9f\x67\xaf\x54\x8a\x56\x1c\x9b\x52\x10\x1f\xab\x6a\x43\xf3\x12\x68\xf5\x8c\x7a\x15\x6c\x09\x9f\xdd\xff\xef\x54\xf0\x2d\xdd\x89\xdd\x03\xf4\xbb\xfb\xcc\xf8\x08\x79\x45\xc1\x08\x1f\x8f\x1f\x28\x07\xe7\x03\x39\xcc\x0e\xce\x55\x15\x16\x78\xa2\xa6\xa3\xd4\xb7\x98\x1d\x84\x84\xbd\x3a\xcc\xb2\x24\xd3\xe7\xd6\x20\x7c\x77\x0b\x1d\xff\x3a\xb1\xf7\x8a\x0a\x19\x19\x8f\x4d\x2a\xf1\x7b\x7f\x84\x65\xa7\x7c\x42\xfe\x1d\x4b\x32\xf7\x4c\x25\x02\x32\xd5\x83\x38\x9a\x24\x59\x32\x31\x0f\x38\x42\xca\x47\x58\x35\x33\x16\x1c\x0f\x3a\x62\xe6\xbd\xce\x54\x86\x73\x3a\xd3\x1b\x1d\x85\x98\x33\xa9\xfb\xf1\xee\x72\x84\xf1\x78\xc4\xea\x37\xf9\x1b\x48\x3b\x3b\x15\xd5\xab\xd3\xb7\xea\x2a\x4c\x91\xf1\x45\x18\xf8\xd9\x90\xdc\x48\x50\x11\x8b\x8e\x08\x79\x70\xff\x44\xfd\x71\xef\xc1\xfd\x93\x46\xb1\xea\x47\x02\xd8\xa0\x0b\x84\x1f\x2b\x23\xb3\x5c\x0a\xec\x59\x95\x0a\xa2\xf2\x7e\xa5\x14\xa1\x99\xd8\xbb\xbc\xaf\x1c\xad\x91\x34\xec\xf0\x5c\xe3\xc8\xa6\x06\xd6\xd0\x52\x36\x87\xaf\xef\xac\x72\xe9\x2a\x34\x3d\xe3\x79\x59\xaf\x2a\x7e\x49\x4a\x4c\xa7\x72\x97\xdc\x13\x86\x55\x68\x6f\x9b\x40\x80\x07\xa5\x5a\xa0\x6b\x9c\x63\xaa\x19\x1b\xf7\xac\xc6\x74\xea\x7e\x71\xac\x89\xd5\xcb\xdc\x99\x83\xdf\x06\xf2\x85\x94\x3b\x80\x9f\x25\xbd\xab\x02\xcb\x24\x76\xc6\xe3\x3a\x41\x2a\x6d\x2d\xb0\xa8\x68\xb7\x0b\x9a\x05\x94\xf9\xc9\x8d\x1c\x3f\x6c\xff\xcd\xec\x2a\x9e\xd6\xfa\x80\x71\xc5\x6b\xe9\xfe\xdc\xef\x20\xf3\xed\x8c\x28\x77\x33\x25\x88\xc3\x49\x83\xbc\xd5\xc4\xf3\x06\xed\x4f\x0e\xd4\xea\xfe\x75\xbe\x0a\xdf\x2a\x5f\x10\xef\xe4\x0b\x72\x57\xf8\xb3\x6a\x09\xd6\x7a\x55\x5e\xa5\xed\x31\xeb\x39\xd5\x28\xfc\x93\xd8\xf5\x76\x65\x5c\x87\x91\x76\x2c\x6e\xf1\x3b\xef\x75\xc6\x2e\x5d\xb2\xc5\x24\x1f\x88\xe7\x4a\x35\x43\x59\x3e\x56\x78\x7c\xac\x7a\x69\x99\x59\x4e\x4e\x1e\xf2\x47\xc1\xc3\x87\xdc\x70\xb4\x25\x51\x2f\xe6\x7c\x31\x80\x34\x0f\xfb\x67\x55\xa2\xc6\xcc\xbe\x89\x4c\xca\xb2\x52\x6e\x62\x9e\xae\x45\x6b\x58\x5c\xb3\x88\xaa\xc5\xbd\x54\x3a\x97\xfd\xd3\xc9\xd1\xc0\xa4\xaf\xb6\x99\xc7\x6b\x39\x45\xcb\x05\x32\xcf\x73\xd5\x1f\xc6\x51\x82\x67\xb9\xc8\x23\xfb\x68\xb9\x27\x48\x84\xa7\x22\x19\x8d\x36\xe4\x05\xaf\x2e\xb5\xf3\x24\x68\x77\x14\x13\x86\x5b\x9f\xf0\x67\x1a\xb9\x33\xd8\x2a\x15\xc7\x8d\x9b\xf4\x34\x48\xf0\xc8\xd3\xdd\x9c\x4b\x61\xcd\xb0\x7f\x22\x5a\x56\xce\x35\xbe\x74\x0d\xc3\x90\xf6\x98\x1a\xc8\x67\x18\x39\xa6\x08\x10\xa0\xc1\x12\xda\x7a\x32\x7b\x2c\xde\x3d\x67\x46\x7e\x98\x9a\xbc\xf1\x2d\xb8\x45\xa3\x10\x4b\x08\x6a\x0a\x0d\xf1\x7d\x63\x73\xe4\xf9\x15\x7b\x15\x11\xba\x63\x9b\x94\x18\x9e\x8a\x5d\x0b\x00\x2a\x8a\xcd\x7a\xe5\xb8\x24\x20\x58\xcb\x44\xf6\xd6\xaa\x7b\x57\x8f\x4b\x2f\xcd\x8a\x32\x43\xab\x1e\xaa\x02\xe0\x72\xed\x74\xc4\x6d\xfc\x60\x4a\xed\xda\xb2\xd0\xb5\x14\x6d\x36\x96\xc3\x1f\x7b\xce\x16\x52\x34\x98\xd3\x45\xfb\xb1\x96\xae\xf5\xfc\x7b\xc4\x8f\x63\x28\x98\x0b\x8e\xe8\x1c\xcf\xd8\xb9\xb2\xd4\x0a\xff\xd3\x88\x58\x74\x5a\x3e\x31\xeb\x6c\xaf\xdf\xe7\xe8\x1d\x0e\x38\x0c\xb3\xc9\x71\x1d\x0c\x75\xf1\x7c\x3c\xa6\x5c\xa5\x3d\xca\x55\x3f\x84\xa7\xf5\xc1\x79\xb5\x30\x64\xb4\xfb\x66\x00\x18\x01\x2c\x67\x7b\x79\x69\x0e\xd2\x89\xa7\x78\x69\x65\x63\x6b\x3b\x14\xf5\x11\x2c\x25\xae\xa2\x06\xf7\x34\x88\x10\xd8\xf4\x04\x8b\x69\xcd\xca\x8b\xed\x26\xe7\x90\xc2\x0d\x72\xb3\x75\x1d\x80\x50\x0a\x25\x19\xaf\xec\x60\x72\x68\xfb\xb6\x6f\x64\x2f\x35\x1c\xf5\x89\x42\x6b\x71\xe1\xd9\x0c\x03\x91\x7f\x92\xb3\x7b\x46\x97\x9b\x9c\xd3\xe2\x75\x7e\x75\x05\x8c\x33\xf6\xbb\x20\xdc\xd9\xfa\x23\xc7\x08\x7a\x59\x07\x27\x56\x28\x83\x96\xde\x8d\x57\x85\xf6\xd0\x82\x40\x2f\xdf\x05\xc1\x18\x21\x11\x76\x93\x09\xba\x3a\x22\xa5\x7d\x8a\x02\xac\xf6\x5b\x06\xf8\xae\xfc\xf1\xc2\x4c\x0d\x92\x2a\x5a\xfe\x5d\xb6\xe0\x01\x04\x4c\x36\x13\xe3\xf1\xe0\x7c\x3c\xf7\xc8\xcf\x91\xc4\x7e\x77\xf0\x98\xd8\x37\x48\x9f\xf8\xee\x5f\x4d\x47\x90\x7b\xee\x5d\xff\x3d\xa8\x97\x7a\x46\x38\x1f\x0c\x76\x06\x71\x48\xf8\x4a\xb3\x52\xa9\x79\x8c\x3d\xf7\x7c\x99\x97\xa7\xae\xf2\x00\x0a\xf1\x33\xa0\xea\xd6\xbd\xb6\x22\xca\x47\x37\xe5\x5a\xad\xa6\x3d\x24\x84\xd9\x31\x79\x93\x33\xe4\x59\xb0\x2a\x5c\x1a\xb5\x92\xc9\xda\x1b\x33\x07\x5a\x53\x60\xae\xd3\x5d\xe6\x3d\x46\xce\xb6\x7d\xcf\xbf\x7b\xf2\x05\xa9\x9a\xaf\x76\x23\x09\xe1\xe1\xec\xda\xa1\x7b\x07\xae\x08\x93\x4c\xa0\xd2\xd6\x8f\xc7\x23\xf3\xa7\x52\xc1\xb3\xfa\x0d\xbd\x56\xf4\x53\x97\x66\x63\xbb\x5d\x25\x41\x1b\x9c\x89\x36\xe5\xb4\x00\x8e\x42\xa7\x0c\xa0\x53\xb6\xa1\x13\x10\xd9\x32\x70\x33\x0b\x80\xa5\xfd\xcc\x81\x55\x83\xcd\xab\xb5\x93\xe3\x5e\xbc\x63\x3e\xde\xb1\x22\x63\x53\x56\x34\x83\x36\xe5\xcf\x17\x5a\x81\x59\x37\x4d\xf3\x95\xee\x09\x2a\x09\xfd\x69\xab\xab\x72\x9f\xf0\x76\xc3\x5a\xf9\xc3\x5b\x8a\x1d\x0f\xe4\x6a\x3f\x90\x2b\x05\xe4\x7e\x4b\x74\xb5\x0f\xfa\xd6\x19\x2f\x84\xbd\x61\x3e\x72\xc2\xa6\x2a\x51\x69\x2c\xa3\x00\x75\x78\x45\x63\x78\x05\x0a\x1d\xc7\xbd\x38\xc6\x65\x4b\x4e\x1e\x6e\x1f\x59\x9e\x65\x6b\x78\x96\x0d\x61\xf3\xed\x02\x2f\xf7\xd3\x96\x8d\x5f\xf0\xa4\x9e\x6f\x17\x1a\x31\x96\x72\xc3\x37\x72\xc3\x9b\xee\x55\xef\x6f\xb8\xcd\x8b\xc2\x3c\x9f\xbb\xea\x38\xf1\xfd\x18\xad\xc5\xde\x0c\xa3\xbd\xd2\xfd\x3e\x67\xd2\xbb\x39\x98\x1a\xb9\xe0\x37\x50\x01\xe4\x41\xa0\x89\xd1\x25\x5d\x52\x7e\x41\xa5\x60\xda\x51\x0f\x5c\x71\x76\x99\xf3\x1b\xc9\xe7\x24\xac\x48\x30\xb4\x2c\xf4\xe7\x19\xad\xb3\xb9\xb6\x03\x2e\x70\xeb\x32\xdd\xc7\x5e\xf6\x2a\xba\x9c\x7e\x5f\x32\x99\x76\x30\x5a\xc4\x84\x0a\x9d\xc4\xc5\x71\x8e\x73\xba\x70\xec\x67\xeb\x92\x80\x44\x38\xca\xe9\x7f\x20\x1b\x92\xca\xb7\x7a\xa6\xf2\x11\xce\xed\xdd\xd1\x40\x5e\x48\x7c\x8c\x00\x67\x0b\x4d\xb2\x03\x85\x26\xed\x60\xae\xea\x9e\x19\xb6\xe7\xbe\xde\x5f\x2c\x72\x9f\x30\xb8\x6f\xc0\x68\x4d\xcb\x60\x72\x5e\xc6\xcd\x43\x03\xf5\x54\x8a\x0c\x86\xb3\x6d\x8e\x1d\x34\x5a\xb5\x32\x18\x52\xb7\x38\x76\xc0\x03\xa3\x1d\x3b\x54\xa4\xc0\x67\x7b\x13\x0e\x0f\xd2\x5f\x24\xd3\x8e\xe5\x97\xff\x3b\x66\xc8\xfe\x3a\x98\x4e\x99\xe0\x35\x39\x66\xc8\xfe\x9a\x9c\x8e\xff\xf7\x9a\xec\x1f\xb2\xf1\x4e\x52\x17\xf9\xa3\x67\x2a\xfa\xc5\x53\x56\x5e\xb8\x94\x4e\x3d\xdf\x3a\x52\x49\xf2\x8d\xbf\xd5\x3a\x36\xc7\x7f\x07\xae\xd6\x3b\x7d\xa6\x73\x9c\x7e\xd3\x45\xb5\x4e\xda\x6f\xb9\xb0\x7f\xc4\x77\x82\x63\xfa\x5b\x7d\x24\x76\x7e\xef\xb0\x49\xf9\xe7\xe3\xb7\x28\x76\xae\x7f\xa3\x4f\xc5\xce\xfb\x6f\xf4\x29\xbf\xf1\x6f\x86\xdd\x61\xf3\x83\x9f\xe9\x6a\x73\x3d\x66\x6d\x74\xe2\x8f\x1c\x60\xcb\xaf\x1c\xf8\xc1\x5d\x14\xc9\x8a\xc3\x53\x9c\x32\x78\x2e\x18\x93\x41\x36\x5f\x34\xc6\xf0\xa0\x75\x23\xaf\xa9\x30\x45\xbe\xa5\x64\x53\x4b\x39\x0f\x62\xb1\x48\x8d\xcc\x58\xdb\x56\xfe\x3a\xc8\x35\x88\x37\x64\xab\x1c\x55\x96\x64\xeb\x1c\x55\x94\xf3\x0a\xd9\xe0\x25\x8c\x64\x8d\x15\x4b\xe5\x15\x6d\xf5\xa1\x2b\x4f\xa2\xe0\x56\xa2\x58\x93\x13\x5c\x10\x5b\x36\x72\xfd\xa8\x78\xb8\x36\x52\xc5\x15\xbe\x24\x7c\xbe\x5e\xe0\xcf\xdd\xe9\x5c\x22\x7c\x43\x3e\xab\xe9\x5c\x90\xcf\x81\xdf\xcc\x05\x4a\xaf\x3c\x57\x9a\xc0\x15\xe6\x0a\x5f\xa0\xc1\x6a\xbe\x5e\x90\x9b\x46\xcf\x7c\x65\xf4\xa5\x79\xbf\x4e\x4d\xe7\x84\x94\x32\xad\xef\xf6\x76\x94\x5e\x0c\xe1\x3e\x0d\xb4\x98\x6e\x58\xf9\xa9\x46\x47\x6b\xd8\x54\x73\x7c\x40\xab\xe6\xe9\x70\x7e\x13\x55\x1a\x3e\x46\x87\xe6\x6b\x8f\xec\x24\xe3\xb2\xc1\xbc\x9d\x3a\xc7\x09\x1f\x09\x5a\xb8\xe2\x18\xd5\x74\x59\x51\xbe\xa4\xaf\x0a\x04\x56\x91\xa3\x6c\x17\x2e\x81\xa7\x97\x24\x7e\x8f\xbd\x82\x93\xf2\xa0\xad\x02\x7b\xa2\x07\x5f\x40\xaa\x52\xba\x80\xbf\xa5\xe8\xcc\x0e\x59\x25\x62\x1e\x42\x2d\x1b\xd7\x1e\xb3\x85\x00\x15\x1a\x2b\x54\x66\x92\x82\xb4\x00\x23\x9f\xd9\xe8\xd2\x98\x91\xcc\xf3\x08\xd5\xc9\xa1\x46\xa0\xa5\x3e\xd6\x81\x01\x29\x77\x4a\x71\x84\x2d\x51\xab\xd0\xa5\x48\xe5\x1c\xfe\xdb\xf3\x35\x48\xeb\xf0\xc4\x0b\x4c\x39\x46\x71\xda\x87\xad\x1a\x59\xbf\xde\x04\x72\xa4\xc5\x43\x85\xbc\xff\x0a\xc3\xc7\x3c\x5f\x98\x48\x2e\x55\x30\x12\x1e\x0d\x3a\x2e\xf2\x6a\x28\x54\x13\x16\x73\xa1\x9b\x59\x73\x48\x0f\xfc\x52\x06\xdb\x81\xb7\xf8\xf6\x13\xbd\xc9\x28\x36\x65\xb5\x5e\xe6\xf5\x3a\x13\x01\x0d\x90\x97\x44\xc6\x1a\xc8\xca\x1b\x81\xac\x19\xc9\x59\xf4\x7d\xef\x5a\xa6\x9d\x64\x47\x01\x86\x6f\x11\x92\xd7\x8d\x77\x0b\x6c\xed\x2d\x10\x5d\x10\x32\x37\xc7\x86\x9c\xc0\x95\xa3\xef\x88\xcd\xa3\xe5\xc3\x8d\xb9\x23\x56\x64\x3b\xdf\x2c\x06\xf5\x7c\xe3\xd9\x83\x0e\x00\x60\x75\x07\x00\x34\xb6\x20\xab\x72\x3b\x95\xb7\xd5\x36\x7e\x5b\x91\xed\x7c\x2d\x67\xb2\xee\xb3\x4c\xe9\xcf\x5f\xa1\xa6\x72\x5a\x2d\xd9\xf5\xd2\x22\xcf\x8f\xac\xfc\x64\x91\x46\x97\xae\x06\xa2\x3f\x1e\x7b\x86\x32\x78\x32\xbf\xd4\x58\xf3\xd9\x7b\xf2\x30\xad\x48\xb5\xdb\xdd\x36\x48\x3d\x22\xb7\xb0\x28\x5a\x64\x9f\x9b\xa6\x32\xa6\xd4\x4a\x1b\x4f\xef\x64\xd9\x62\x3d\x76\xac\x40\x5b\x72\xe0\x8c\x69\x62\x3c\xe8\x55\x7a\x1e\x3c\x72\x74\x44\x48\xea\x68\xf4\x31\x87\x0d\xf9\xb0\x53\xf4\x5a\x18\x7a\xad\xf3\x7c\x0f\x85\x49\x30\xb7\xf7\x0e\xee\xcd\xc9\xdd\xbe\xc0\x8c\x8b\x3c\xe8\xbf\xad\x77\xf6\x90\x95\x43\x86\x38\x89\x86\x2a\x55\x98\x06\xf7\x4a\x29\xe7\xb9\xdf\x31\xac\x42\x2e\x4b\x7f\xfb\xca\xaa\x10\xc2\x47\xfa\x8b\x75\x87\x09\x03\x63\x10\xc2\xa5\xf2\xc5\x4c\x95\x3d\x7a\x5e\x7a\x70\x2b\x17\x48\x45\x35\xb9\xb5\xf4\xec\x7c\x1f\x90\xcc\xbd\x37\x1e\x4b\xe4\x1c\x8f\x53\xb9\xbf\x73\xba\x40\x2a\x54\x2b\xe5\x44\x07\x68\x76\x32\x2c\x70\xc8\xb0\xc0\x91\xf2\x56\xf1\x0d\x2b\xbd\xd5\xb7\xfa\x3e\x3f\x12\xbb\xdd\x48\xa2\xc5\x6e\x07\x75\xc6\xe5\x9f\x7e\x34\xcc\xf9\xe5\xb6\x16\x5f\x3f\xbc\x64\x17\x05\xac\x4e\xb9\xd6\xb6\x46\x8f\xdb\x24\x7a\x43\x57\x21\x36\xca\x66\xfb\xf5\x77\x0b\x6c\xa8\x3c\x08\x93\xd2\xeb\x53\xde\x35\xe1\x32\x52\x81\x76\xbb\x88\x55\x4a\x40\xbc\xc4\x65\x5e\xde\x9c\x55\x92\x76\x4b\xa2\x5e\xee\x76\xfa\x89\x21\xf3\xe5\x51\x96\x49\x75\xa3\x4a\x42\x36\x1e\xdb\x4c\x6a\xaf\xbc\x40\x2f\x56\x0c\x18\x10\xa6\xbd\x5c\x20\x61\x36\x09\x4b\x2f\xf7\x26\x40\xc2\x9a\x76\x6d\x95\x60\xdc\x81\x1c\xb8\x08\xef\xa3\x30\x30\x40\xec\xce\x9d\x79\xa3\xfa\xe1\xc7\x52\xa6\xcb\x62\x57\x9f\xd7\xde\x37\x30\x31\x4d\x78\x3b\x55\x0d\x22\xd6\x54\x10\xd2\x82\x80\x5d\xa8\x98\x8a\x8e\x34\xc6\xf6\xdb\x5f\x7d\x33\x2d\xfe\x87\x99\x5a\x63\x54\xea\x0e\x06\xd8\x7f\x84\xd5\x15\x4b\xf6\x14\x4c\x28\xbf\xa9\xe9\xae\xcf\x70\x8a\x03\x76\x89\xa1\x99\x98\x57\x2a\x10\x3b\x83\xbf\xd8\xaf\x09\xeb\xfe\x47\x59\x4b\x5d\x4c\x74\xdb\x6c\xfa\x4f\x32\x89\x62\x05\xbb\xc0\x5c\xdc\x02\x91\xef\x41\x67\xe5\x05\x60\x00\xdb\x10\x62\xab\x94\x7b\xdc\x04\x07\xbd\x89\x03\x9c\xfc\xe5\x6a\x6b\xc0\x05\xa9\x1e\xe2\xd2\x49\x37\xcf\x55\x4e\xcf\x60\x68\x2f\x1f\xba\xf0\xc2\xde\xca\x48\x82\x50\x79\x4d\xea\xbc\xa0\x10\x34\x03\x09\xaa\x3b\x55\xa6\x51\x6a\x1a\xe9\xb4\x01\xfb\x75\x0b\x02\x97\x08\x8b\x03\x5e\x7c\x82\x54\x87\xbd\xf8\xc4\x08\x22\x1a\x5c\x62\xe6\xb9\xb0\x1e\x7c\xf2\x6f\x6c\x83\x69\x05\x08\xcb\x62\x1f\xc3\xd7\xfe\x6e\x8b\xdb\xfb\x75\x9f\x06\x42\x7c\x94\x7b\x0f\xbd\x8b\x1b\x8f\x6d\x2c\x59\xf9\xde\xf1\x7c\xf2\x1a\xbd\x3a\xf7\x56\x4c\xb3\xbd\xb3\x64\xe2\xc4\x79\x1e\xe6\x24\xad\x0f\xdb\xc5\xbb\x55\x39\x7f\xb5\x4b\x7b\xaf\x35\xfc\x48\x7b\xf9\x6f\x63\x12\xef\xed\x10\x0b\x02\x39\x32\x82\x80\x45\x23\x48\x9a\x7e\x03\x7c\xd7\x07\x5f\x21\x4a\x2f\x35\x8a\xa8\x39\x62\xe7\x00\x4d\x12\x48\xc1\xeb\xeb\x8b\x81\x14\xec\x0d\xad\xc5\x46\x06\x9d\x2f\x42\x6d\x71\x4e\x02\x8f\x6a\x5c\x93\xae\x0f\x75\x98\x69\xec\x32\xff\x44\xb5\x5e\x37\x92\xe2\xdb\x4a\x00\x5b\xc2\x3c\x9d\x77\x20\xa3\x4b\xf8\x69\x42\x98\xe3\xba\x47\xd3\xfc\x30\xad\x94\xc7\x2c\x38\x5a\x6f\x10\x5e\x2a\xc1\xa5\x8a\x6b\x7a\x39\x5e\xea\x8a\x30\x7b\x3e\xda\xd5\xa7\x5b\x6d\x7a\x85\x6b\x52\x42\x36\x6e\x10\x7e\x8f\x57\x8f\x41\x6e\x0e\x2f\x79\xfc\xf6\x28\x25\xd9\xa0\xe5\xf4\xbe\x45\xc0\x1d\xb5\x61\xbf\x55\x1b\x72\xe9\x9a\x59\xbe\x38\xf7\x14\xe4\xb5\xc9\xfb\x71\xd0\x82\xc0\x70\x85\x73\xa3\x7e\xea\xb3\x20\x6c\x7b\x2d\x08\xdb\xf1\x38\xad\x95\xf9\x60\xeb\xdc\x8f\x36\x41\xb9\x43\x8e\xf0\x92\x9c\x40\xc0\xb0\x56\x9c\x2c\x1f\xad\x1e\x2e\x8d\xe2\x64\x4d\x36\xf3\xe5\x02\x17\x64\x8d\xaf\xc8\xe8\xc1\x20\x39\x97\x9c\xf4\x7a\xba\x5c\xe7\xfc\xb1\x48\x4f\x24\x20\xae\xc8\xe8\x44\xb6\xd0\x45\xa0\xd2\x07\x5a\xc5\x79\xb9\x1f\xb6\x4a\x85\xd2\x82\xec\x25\x32\x7a\x93\xd1\x95\x66\x36\x58\xfd\x4e\x09\x1b\x9a\x63\xba\xc4\x02\xe1\x1b\x30\x3e\x18\x1f\xbb\x11\x21\x37\x48\x62\xc3\xe7\xdd\x2e\xf4\xfc\xbe\xd1\xe3\x5d\xe0\x8f\xf8\xbc\xed\xad\xad\xfd\xbf\xf1\x25\xbe\xc1\x6b\x84\xaf\xc9\xb9\x42\xec\xe7\xe4\x3c\xb0\x59\x3c\x47\xe9\x05\xa9\xe3\x98\x7c\x81\x9f\xc3\x3a\x72\x74\xbd\xa7\x54\xd3\xe7\xf1\x18\xf4\xb8\x4e\xb5\x0a\x95\x9a\xa4\x50\x32\xf8\x3c\x1e\x8f\xd8\x78\x3c\xaa\xe1\xe3\xbb\x9d\x98\xa9\xbf\x08\xcd\xea\x56\x28\x31\x45\x8d\xd3\xea\x7d\x46\xba\xdd\xb5\x7d\x74\x8d\xd2\x8f\x7d\x13\xfd\x88\xaf\xb5\xd1\x47\x4e\xe9\x0b\x3e\x6d\x43\x23\x76\xe8\x6f\xf0\x1a\x0b\x95\xd3\x1f\xbf\x25\xa7\x0a\x3c\x8f\xc9\xa9\x03\x8f\x9e\xc3\x5b\xfc\x78\x3c\x4e\xbf\xf4\x7d\xfc\x0b\x7e\x8c\x1a\x9b\xdb\xbd\x6e\x70\xb0\xa9\xbd\xd7\xb5\x4f\xeb\xa4\xa4\x72\x38\x14\x24\x4a\x36\x5d\xd5\x4e\x28\x3b\x12\x64\x2b\xea\xc3\xce\x32\x86\x9d\x0c\x19\x4e\xd0\x9b\x1a\x53\x09\xc0\x42\x52\x50\xf9\xee\x74\x6d\x4a\x0c\x8a\x99\x7e\x6c\xc1\x8c\xf8\xe4\x02\x8a\xc7\x48\xca\xc2\x4c\x24\x3a\xf3\xc8\x2e\xf7\xc8\x2e\x44\x9a\x43\x0e\xcc\x9e\x58\x73\x81\xb7\xa8\x41\x4d\xe3\xc5\xc3\xfc\x4a\x07\xfa\xaa\xdf\x81\xfe\x40\x5c\xf3\x41\xcf\xe8\xe3\x24\x71\x3a\xdf\xeb\xd6\xe8\x67\x96\xd1\xd1\x1a\xa1\xc8\x7e\x17\x47\xff\x61\x5f\x22\x8d\x63\xc4\x97\xae\x1c\x87\x83\x44\x57\x6d\xd1\xb0\xc4\xca\xaa\x14\xa6\x73\xaa\xda\xa9\xe6\x02\xb9\xb4\x92\x72\x29\xb3\x72\x29\x5b\x90\xf8\x8c\x7d\xec\xbc\xb3\x65\x27\x5c\x01\x9f\xfa\x8a\x7a\x5c\xc1\x83\x50\x55\x1f\x13\x8c\x71\xbe\x7f\xed\x1d\x01\x42\xef\x40\xe5\xc9\x10\x6c\x9e\x2f\x9c\x10\x66\x2b\x1d\x8a\x19\x18\x60\xbd\x20\x86\xbe\x33\x2e\x07\x40\x4d\x76\x18\x13\x1b\xe3\x38\x9d\xdf\x8d\x87\xf7\xbd\x57\xff\x41\xf9\x2e\x7d\x85\x67\x2b\x81\x42\x97\xdd\x00\x66\xa2\x95\x57\xa1\xcf\xca\x1e\x2f\xae\x20\x0e\x03\xc1\x0a\x44\x47\xc5\x26\xf7\xf8\xdf\xfe\x26\x70\xe2\x44\xb8\x40\x71\x6f\x51\xfc\xf0\xa2\xfe\x75\xd3\x98\xb6\x04\xbd\x63\x04\xc8\xfb\x15\x2f\x28\xa7\xc5\xbd\x9a\x8a\x3b\x25\x75\x0f\x9d\xb0\x63\xe2\x61\x0b\x10\x9c\x40\x0d\x95\x75\x5e\xbf\xbd\x2e\x2d\x20\x6c\x78\x38\x9a\x59\x39\x2c\x33\x35\xd7\x14\x2a\x3f\xff\x4c\x4b\x41\x0b\x5b\xed\x0f\x2e\xd2\x77\xbc\xfa\x72\x63\xd0\x5b\x3d\xd7\x95\xf5\xe0\x8d\xae\x91\x2e\xf9\xdf\x56\xa5\xf2\x29\xa7\x79\x51\xa7\xa6\x78\x0a\xb0\xc8\xda\xb3\xde\x3f\x39\xc7\x8c\xef\xe5\x8e\xd8\x06\x07\xa5\xb6\x59\x60\xaf\x54\x9f\xcc\xab\x15\xa8\x87\x31\xb5\xd0\x95\x35\x1c\xb9\x9a\xf7\x9b\x60\xa8\xfc\x2b\x86\x92\xc0\x5b\x92\xda\x1e\xfe\x08\x14\xfc\x7a\xed\x0d\xb8\x99\x84\x5c\x95\x9f\x5d\xca\xa4\xaf\x3a\xb7\x97\xcf\xa9\xc8\x05\xc5\xfe\x45\xa0\x92\xd1\xca\x1b\x40\x15\xe5\xcf\x05\x2b\x2f\x5e\xc5\xf2\x50\xb3\xa9\xfa\x98\x97\x97\x09\xa4\x5e\x48\x3e\xdf\xaa\x85\xe8\x51\x1e\x14\xa4\xea\x58\x79\x17\x73\x2b\xcc\xd6\xe4\xc9\x48\xbb\xa6\x1f\xbd\xe5\x09\x42\x73\xba\xb0\x6c\x91\x4f\xeb\x95\xd8\x93\x5b\xc8\x45\xe0\x12\x04\x32\x53\x91\x26\x7a\x5f\x12\xa5\xcf\x83\x70\x0d\xfb\x21\xbd\xd6\x94\xea\x3a\xd0\xed\xca\xcf\x69\xa7\x88\x73\x29\x1f\x56\x25\xfc\x49\xd5\xdf\xf2\xee\x17\x9c\x5d\x5c\x50\x2e\x1f\xe8\x3f\x65\x8b\xd5\x0a\x5a\xac\x56\x09\xc2\xeb\xbc\xce\x94\xb9\x1f\xb0\xb9\x20\xf7\xff\xfb\xc3\xfd\x99\x3c\xaa\x1f\xee\xa7\x5e\x2c\x57\x18\x0c\xf8\xe1\x7e\x3a\xfd\x3d\xba\x8f\xaf\x5c\xf3\xfb\xf8\x92\x24\x1f\xf3\x9a\x7a\x55\x52\x3e\x3b\x8c\x70\xa5\x6f\x0d\xfb\xf1\x8e\xd3\x1a\x0a\xd0\xa2\xf1\x38\xac\xa6\x1f\xad\x2b\xe6\xca\xe8\xb7\x79\x63\x3a\xe7\x0b\x84\x19\x39\x79\xc8\x5c\x86\x44\x66\xc4\xd1\x8a\x24\xba\x0a\xc0\xf0\xb1\xab\xe3\x90\x93\xe4\xbe\xa2\x47\x76\x89\xf7\x93\x09\x1f\x70\x42\xc8\x25\x68\xa6\x6d\x2f\x13\xbf\xed\x3a\x49\xc0\x2a\x76\xf8\x56\x15\x6f\xaa\x4c\x61\xa6\x72\xce\x16\x58\xf1\x36\xd9\xed\x55\x05\x19\xd5\xb3\xbc\x69\x74\x20\x82\x05\xcc\x4d\x50\xab\x68\x0f\x60\x68\x94\xe7\x07\x31\x43\x7d\x46\x36\x51\x7f\x4d\xf5\xf7\x5c\x1a\x9e\xf0\xf9\xf4\x12\x2a\x5c\x15\x68\xc0\x67\x9c\xf0\xf9\x77\x8b\x0c\x92\xf2\x74\xda\xd5\x34\xe7\xcb\x75\x7a\xa5\xd4\x31\x97\x08\x7b\xa6\x62\xbe\x80\x84\x55\xf2\x0f\x2d\x5f\x4e\xd5\xd2\x77\x3b\x3a\x05\x60\x20\xbd\x56\x10\xa1\x7b\x49\x6f\x85\x6f\xcf\x39\xbd\x60\xb5\xa0\xfc\x25\x54\xf8\xe5\x6d\x0f\x03\x45\x3c\x4c\x23\x5a\x98\x66\xe4\xf6\x23\x95\x6c\xa9\xa9\x06\x4b\xb1\xfa\xfd\x33\xfc\x12\x4d\x83\x95\xa6\xfc\x89\x2b\xe1\x00\xcc\x79\x3f\x25\x33\xea\x79\x55\x22\x5a\xde\xa5\x30\x40\xa8\xcb\xed\x33\x0c\x47\x3f\xe6\x19\x8a\xc1\x26\x4f\xd1\x6e\x07\x15\xf1\x52\x8a\x4d\xae\x4f\x88\x43\x54\x91\x2c\x0d\xd6\xc5\xcc\xea\xf6\xad\x73\x99\x5f\x3d\xb9\x71\x94\x01\x27\xba\x61\x82\xb0\x7e\x76\x78\x5d\xf6\x83\x0d\xc2\xdb\xf2\x53\x59\xb9\x7b\xb4\x2f\x31\xa0\x05\x40\xaa\x12\x73\x6a\x3f\x15\xe5\xde\x63\x89\x2b\xa4\xe5\xba\x12\x37\xed\x49\x97\x95\x48\x13\xd5\x18\x68\x59\x5e\xbc\x2d\x37\x37\x29\xc2\x79\x11\x17\xc1\xdb\x30\xd5\xe3\x26\x3a\x75\xe9\x79\x5e\x68\x7f\x48\x6e\xbd\x90\x22\x8d\x4d\x0a\xdd\x2e\xca\xf4\xbf\x99\x06\xb8\x94\x42\x05\xce\xce\x24\x35\x50\xce\x57\xac\x2c\xde\x72\xe5\x15\xae\x2b\xad\xd5\x5e\x7d\x8a\xbc\x28\x14\x1d\xab\x53\xf3\xc8\x87\x63\xec\x7d\x59\x09\xb6\xba\x31\xbb\xf1\x74\x9d\x97\x17\x54\xd7\x31\x8d\x7c\xab\x37\xa3\x6c\xe7\x5b\xb8\x4b\x25\xc5\x57\xa7\x96\xe5\x53\x88\x10\xba\x49\x2d\xf2\xe1\x1c\x0d\x54\xb6\xd8\xdd\xee\xd6\x52\x50\xa8\xfb\xa9\xea\xcf\xe5\x4d\x27\x8d\x6c\x80\x6a\xbd\x7b\xb8\xdb\xa5\x66\xab\x4c\x35\x97\xdf\x62\xbf\x7f\x56\xbb\x2d\x01\x1d\x99\x1d\x5b\xa5\xfd\x58\x16\x9c\x13\x4e\xe5\x7e\x4a\xd0\x78\x35\x82\xac\xfa\x26\xc2\x42\x48\x1a\xe0\x21\xc1\x91\xc4\x64\xaa\x4c\x5d\xb6\xb6\x4d\x0f\xda\xec\x79\x69\x8f\x63\xd3\xe0\xe5\x86\xe6\xdc\xb7\x80\x1c\xde\x0d\xe8\x92\x9a\x3a\x2c\xbf\x0e\xe0\x9d\xcf\xbb\x2c\x27\x83\xa3\x20\x7f\x24\xd0\x30\x97\x4c\x47\xac\x1a\x3e\xf0\xc9\xae\x38\x3f\x16\x53\xb3\xbe\x58\x59\x7e\x74\x4b\xe3\x30\x85\xbe\x9d\x0b\xce\x96\x57\x53\x83\x4e\x97\xf9\x66\xa3\xec\x7d\x2a\xd7\x70\x2f\x57\x18\xd0\x0a\x5d\x62\xf1\x24\x60\x5f\x3f\xf6\xe9\x95\x82\xf4\x02\x12\x48\xe7\x41\xc5\xb4\x51\x58\x25\x6e\xa6\xfe\x8b\x4c\x24\x39\x3f\x4f\x26\x74\xf2\x3a\x17\xeb\xe9\x6a\x53\x55\x3c\x85\x3f\x79\x5e\x16\xd5\x65\x8a\x7e\xff\x2c\x17\x12\x16\xd7\x29\x42\x13\xd9\xb6\x41\x69\xf2\xec\xf9\x93\x9f\x7e\xb8\x27\xea\x7b\x1f\x65\xb3\xc4\x9b\xee\x75\x9b\x4c\x9d\x3c\xe4\x8f\x44\x24\x41\x8a\xe4\x26\x06\xe5\xd4\x59\xe9\x88\xff\x63\xb7\x1b\x3d\x00\x3d\xb8\xaa\x3a\x0a\xef\x47\x27\x38\x01\xd9\x37\x61\x60\x56\x4f\xcb\xe9\x35\x67\x42\xbf\xeb\x37\x10\x82\x9f\x21\x2e\x51\xe3\x58\xb1\xe7\xb6\x48\x97\x35\xbc\x92\x8f\x29\xd7\x6e\x59\x92\xad\x51\xce\x6a\x9e\x57\x10\xd5\x5e\x41\x29\x27\x81\x7a\x33\xe5\x08\x61\x0e\x1b\xf0\x85\x78\x08\x6e\xbf\x25\xf7\x47\xf1\x35\x60\x61\x51\x0e\x41\xf3\xf3\x85\x16\xd9\xf5\xf1\x02\x47\xec\x44\x0b\x06\xe7\xe7\x3a\x69\xf6\x9f\xe9\x4d\xf7\xe1\xab\xfa\x71\x7d\x53\x2e\x25\x3c\xf4\x8b\x75\x5e\x3f\xcd\x37\xcb\x2d\x78\x89\xbe\x52\xad\xc8\xe8\x01\xd6\x2a\x4f\x4e\x4b\x61\xf5\x95\xc1\x67\xdb\xef\x68\xfb\x49\xa3\x34\xcd\xca\x43\x92\x3a\x3c\x77\x12\x9a\x3f\xd5\x98\x26\x68\xf4\x80\x10\xb2\x67\x9e\x86\x8a\x2c\xcd\x0b\xfd\xdc\xaf\x01\xe5\x7d\xa3\xc1\xee\x93\x06\x10\xbf\xf5\x67\xf5\x77\xe0\xd3\xed\xf6\xd1\x5a\x60\xe5\x60\xef\xc6\xe8\x84\x6e\xb8\xc2\x39\xae\xf1\x56\xa7\x59\x20\x16\x47\x70\x5a\x39\xf7\x70\x5d\xc8\x10\xf2\x16\xeb\xf9\xec\x76\xe9\x96\x08\x3f\xb1\xba\xd1\x91\x62\x29\x3c\x6e\x67\x29\x27\x5b\x95\x4c\xbd\xd4\xdb\x4d\x08\x49\x6b\x92\xe6\x64\x8b\xcc\xc0\xe3\xb1\xd3\xb8\xe6\x72\x7d\x68\xb7\xab\xa1\x46\x99\xd2\xef\x91\xd1\x83\x08\xfc\x09\xef\xc1\xc6\xb2\xc1\x82\x50\x9c\x72\x32\x07\xcf\xec\xe4\x13\xbd\x49\xfa\x12\xf7\x99\x95\xca\x39\x37\x0d\xd6\x1d\x58\x59\x1c\xd1\x83\x95\x85\xed\x02\x59\x12\xf7\x75\x81\x73\x35\x73\x7f\x66\xa9\x77\xdc\x9e\xa7\x76\x58\xe4\x1d\x43\x64\x87\xd7\xe0\x39\x3c\x29\xdd\xd0\x76\x94\xb0\x3f\xdc\xab\x84\x2a\x09\x0b\x34\x1e\x5f\xa7\xc2\x9d\x2d\xcc\x11\x2e\xe1\x19\x2e\x11\xa6\x4d\xaa\xb4\xca\xa7\xa4\x9f\xe9\x57\xb7\xa9\x96\x65\x06\x9d\x8c\x94\xea\xca\x8c\x7b\x0f\xf7\xda\xfa\x4d\xae\x5f\x70\x0c\x4b\xa1\xee\x8e\x4e\x2b\x3c\x5f\x20\x4c\x55\x4a\x65\xe4\xdd\xa8\xb4\x09\xf8\xfe\xb7\x7b\xe6\x1b\xaa\xdb\x07\x6a\xfa\x56\x64\x09\xd2\xfc\xd0\x7c\xb9\x7e\xaa\x87\xb0\x44\xdd\xf3\xf6\xd4\x1e\x5d\xd3\xb0\xe4\x9a\xbc\xeb\x3f\xd1\x1b\x22\x4c\x05\xfa\x94\xa3\x81\xcd\xc2\x57\xa7\x25\x2c\x07\xe6\x5e\x82\xec\xda\x9a\xfc\xe3\x83\xc0\xd6\xb7\x8d\xd6\xb8\x41\xca\x62\xdc\x4e\x9f\x77\x87\x85\x80\x91\xaa\x6c\xad\x02\xee\xb8\x4f\x70\xe8\x4a\xc0\x16\xf8\xa3\x4d\xb4\x05\xa6\x52\x4e\x8f\xb0\x18\x12\x21\xbe\x48\xf6\x20\x2d\x91\xde\x21\xfc\x69\xcf\xca\xcc\xad\x6d\x51\x09\x77\x19\xaf\x00\x8b\x14\x10\x80\xed\xf2\xb5\x39\x42\xca\x22\x27\x0f\xcb\x47\x36\x26\xb0\x34\x17\x3f\x93\x17\xff\xbc\x5c\x2c\x06\x0a\x9b\x98\x52\x0b\x3a\xc7\xe0\x60\x1f\x1c\x5f\x71\xe6\x19\x18\x69\xab\x6c\x9d\xdc\xca\xf6\x03\xe4\xd7\x96\x54\x19\x70\xdd\xf5\xff\xda\x1b\xec\x0c\xe4\x74\xd5\xde\x5b\x99\x6b\xfc\x34\xd0\xb1\xca\xae\x0a\x1a\x9e\x1a\xf6\xbd\x49\xda\xc5\x6a\xa8\x9a\x37\x93\x6b\x2b\x8b\x34\xf9\x48\x97\xd5\x25\x85\x67\x09\xca\xcc\x53\x53\xfd\xfc\x2f\x79\xfd\x9e\xd6\x54\xc2\x8f\x4e\xfd\xa0\x7d\xe0\x2c\xeb\x54\xb1\x75\xef\xc8\x2d\x2b\x99\x60\xf9\x06\x54\xa9\x59\xb2\x2d\x97\xd5\xa5\x2a\xc0\x9d\x60\xfd\xc5\x6c\x74\x82\xbd\xe7\xd9\x6d\xc1\x8a\x53\x2a\xac\xc8\xff\x1e\x6f\xaa\xbc\x60\xe5\x85\x04\x47\xe8\x2b\xd9\x9e\x4d\x4b\xe0\x84\xe3\xaf\x98\xdf\xc2\x8b\x38\xd4\xe4\x40\x2e\x87\x57\x9b\x0d\x2d\x9e\xe4\xcb\x4f\x09\x52\x96\x77\x5a\x84\x9f\xa1\xfb\x87\x01\xcb\x0f\x93\x2d\xcf\xaa\x34\x91\x13\xa5\xc5\xb4\xce\x3f\xd3\x02\x8a\x7e\x3b\x18\x86\x13\xbf\x66\x9b\xcd\x53\x58\x71\xeb\x4b\xe1\x78\xac\x7c\xb1\x61\x17\x6b\x21\xc7\x52\x2a\xd6\x88\xdb\x90\xa3\x79\x5a\x3f\x8e\x4b\x62\x93\x9c\x0f\x78\x4a\x4d\x4e\x4b\x7f\x04\xa8\x3a\x2b\x47\xb5\x00\xd8\x3b\x91\x70\x61\x58\xbe\x06\xed\xec\x8f\xb9\xa0\xbc\x0d\xc6\x50\xdd\xb5\x7f\x7d\xd0\x26\xd1\x13\xf9\xd8\x9d\x86\x79\xec\xc3\xbd\xfb\x79\x9a\x17\x37\x20\x2a\x1a\x80\x65\xb7\xac\x3e\xcd\x3f\xb3\xf2\x42\x62\x57\x07\xa1\x7a\xf7\x25\x86\x01\xf2\xf9\xb6\xf4\x80\xff\x22\xba\x7d\xb2\x59\xc1\x8a\x23\x76\xd5\x41\x51\x21\x21\x2b\x3f\x57\x9f\xe8\x8f\x6c\x45\x97\x37\xcb\x0d\x7d\x9a\xab\x25\xd7\x9a\x79\x2e\xe4\x34\xcf\x54\x2e\xc0\x3d\xdb\xf5\x4d\xf7\xe3\xf0\xdc\xec\xb8\xe0\x4f\xbc\x77\x54\xff\xd0\x77\x37\xcf\x1b\x25\xc1\x54\x6d\xa2\x9a\xe9\x2d\xab\x95\x8e\x74\xf4\x00\xfb\xa9\x46\xf6\x7e\x4c\x35\x2c\xa6\xc1\x47\x9b\x36\x0a\xb4\xe9\x84\xae\x1c\x24\x27\xa1\x95\x57\x2f\x78\x75\xe9\xfc\x8c\x05\x5c\x61\x08\x2b\x6a\xa9\xca\xb5\x2a\x47\xea\xd4\x84\xb0\xf8\x7a\x03\xda\x0f\x75\x89\x26\x77\x46\xbf\x5e\x72\x01\x22\xbb\x3f\x6d\x73\x3c\x7a\xa9\x48\x1f\x02\x1d\x35\xd2\x21\x32\xa0\xcf\x61\xa0\xe0\x3e\x1a\x33\x60\xe3\xa3\xc8\xb6\x17\xd7\x03\x38\x2b\x0c\xf2\x6a\xa3\xff\xd2\x92\xe9\x95\x77\x14\x35\xc6\x01\x97\x89\xd6\xf6\x78\xe6\x31\x21\xbf\xa4\x9e\x28\xec\x85\x92\xdd\x3a\x7f\x2b\xa6\x46\xe4\x44\xcc\xd9\x02\x97\x73\xb6\x20\x3c\xe2\x36\xcf\x67\x52\xda\xce\xac\xcc\x5e\x36\xe9\x3b\x84\xb5\xf6\xe3\x0d\x79\x96\xde\xda\x63\x9e\x69\x63\x19\xdc\x90\x6f\xe8\xb5\x8a\x66\x78\x33\xd5\xc7\x62\xea\xb6\x90\x1c\x73\x10\x8e\xa3\xd9\x6f\xfc\x03\xf3\x9b\x7c\x02\xb8\xd9\x57\xad\x95\x2a\xce\xa1\x48\x7c\xad\xd1\x8f\xc7\x7d\xea\x20\x7d\xb2\x03\xbe\x90\x03\x36\xe1\x0a\x7d\x7a\x42\x7e\xc4\x0e\xba\x9d\x17\x6d\xb8\x7c\x6c\x43\xe5\x5d\xb4\x49\xdc\xcd\xa6\x73\xa2\x5a\xeb\x6a\x6f\x84\x23\x08\x7b\x37\x42\x9f\x4b\x0d\xcd\xe9\x7e\x82\x5b\xb0\xe2\xc7\x2a\x8f\x7d\xac\xc5\x4d\x91\x80\x06\xbd\xb2\x20\xf2\x4e\xf7\x31\xb3\xb2\x4b\x93\x23\x28\x4a\x34\xf5\xef\x53\xf2\x02\xbf\xea\xdf\x9b\xaf\xa0\xf5\xaf\x0e\x1f\x95\x6f\x42\xed\x3a\xd8\xfd\x3f\xc4\x27\x17\xca\x79\xcf\xa7\x13\xa9\x20\xbf\xa4\x7c\x16\x8a\x5f\x1c\x65\xb7\x0d\x16\x08\x69\xe1\x08\x38\x65\xc2\xb1\x98\xd6\xf2\x2f\x10\x93\x4a\x2c\x90\x68\xbb\x94\x30\x34\x1e\x27\x5e\x9f\x64\x44\x08\x1b\x8f\x13\xdb\xcd\x3c\x68\xd3\x22\xa1\xb2\x5a\xab\x72\x92\xf0\x1f\x16\xb8\x9c\x24\xd3\x64\xc2\x90\x93\x60\x9b\xf4\xd6\xd8\xcb\x46\x0f\x30\xab\x7f\x54\x5c\xb8\xfb\x41\x0b\xf5\xb7\xe6\xe2\xe5\x9f\x86\xe7\x82\xc7\x6a\x77\xd4\x0f\xa0\x63\xf2\x0f\x7d\xa3\x9f\x44\x6f\xa2\x0e\xab\xe5\xef\xda\x3e\x76\x1f\x02\xa7\x60\xaa\x6e\xce\x27\x71\xb9\x41\xdf\xf8\xe7\x57\x9e\x9b\x0b\xd4\xdd\xe8\x6e\x3e\x2b\x2f\x24\x3e\x29\x3c\x88\x88\x05\x51\x74\xd1\xc4\xfb\xc0\x21\xb4\x57\x65\xaf\xcc\x71\x27\x5c\xb4\x67\x7a\x0f\x6f\xac\x57\x24\x21\x64\xb7\xf2\x04\xd3\x2f\x1d\xa6\x22\x04\x8d\x2a\xd8\xf2\x0f\x9a\x26\xa6\x53\xc9\x43\x6f\x68\x5e\xc2\xe9\x4c\x0f\xb0\x99\xfb\x18\x49\x5c\x56\xe2\x45\xb5\x2d\xf7\xb3\x20\x54\xd9\x6a\x1a\xb3\xcd\x59\x4b\x62\x55\x4b\xf1\x30\xbe\x07\xad\x24\x06\x42\xdb\xec\xb6\xa6\x62\x7b\x75\x94\x04\x39\x1e\xd3\xa9\x76\x30\x7b\xc6\x0a\x38\x47\x69\x97\x59\x7d\xdf\xcb\x17\x46\x19\xc9\x18\x9f\x15\xbb\x18\x8e\x96\x42\x4d\xef\xdf\x5e\x1a\xfd\xb5\x5c\xfe\x1e\xda\x11\x11\xcd\xe4\xe3\x2e\x8e\xa0\xdb\xc6\xb8\x2f\x15\xd9\x1b\xac\x17\x9f\xbd\x32\xb3\xeb\x60\x48\xa0\xd3\xf0\x78\x1b\xdd\x3c\xf1\x49\xe1\x49\x80\x48\x9e\x02\x24\x86\x33\x51\xb5\x4a\xa8\x2a\xf9\x1a\x3d\xc2\x37\x10\xb4\xef\x86\x90\x00\xfe\xe8\xce\xca\x37\xdf\x48\x03\x61\xe9\xc7\x9e\x4b\xba\x4f\x3f\xf0\xcf\x91\xee\x7f\x33\x09\xfa\x2b\x05\xfe\x83\x62\x95\xa1\x6f\xde\x8d\x1f\x43\x5b\x25\x4b\x4b\xf9\x59\x5b\x8d\xc2\x14\x5e\x5f\x2b\xe7\x15\xac\x50\xc7\x48\x4e\x26\x76\xb3\xa8\xbd\x51\x10\xb8\xc3\x16\xee\x91\xbb\x7b\x54\x11\xff\x4f\xa8\x12\xfa\x0f\x5c\x1f\x6c\xfe\x95\x55\x03\xcd\x51\x48\x03\x3e\xf4\x46\x78\x86\x12\x7b\x31\x34\x81\xf7\x12\x4d\xb2\xc8\x5b\x95\x6c\xf2\x08\x14\x6b\xa0\xd4\x23\x4e\x78\x55\x09\xdf\x89\xe0\xe5\xbf\xb2\x13\x81\xfc\xf2\x93\x3e\x4b\x3f\xdc\xdd\xc6\xe2\x0a\xe9\x05\xc9\x6d\x63\xcd\xa8\x5e\xcd\x04\x58\x78\xcb\x55\x3a\x38\xe3\x71\x03\x53\xd8\xe1\x55\xb1\xaf\xd9\xda\x64\x7f\x3d\x6e\x54\xdd\x7c\xff\x98\x81\x99\x85\x50\x75\xf2\xde\xeb\x44\xf4\xda\x6f\xcf\x2e\x52\xf5\x61\x05\x51\xf5\xe1\x95\xbb\x1c\x30\x6a\xaa\xa6\x2f\x54\x8e\x08\x1e\xe8\x1e\xca\x4a\x47\x6c\xaa\x19\x1c\x9a\xd5\x88\x9f\x1c\x51\x9b\xf1\xdb\x7c\x21\xa1\xd3\xce\x33\x6d\x50\xd9\xeb\xce\x20\x67\x4f\xda\x6e\xb7\xa0\x9e\x6a\x2d\x0e\x05\x66\x66\xaf\xb4\x04\x5d\x0c\xc4\x9a\x57\xd7\x60\x7d\xd3\x51\x09\xc0\x86\x27\x00\xb4\xe1\xbf\x25\x13\xed\xf4\x5b\xd6\x57\x74\xa9\xec\x6a\x3a\x83\x3f\x9a\x24\xff\x36\x5c\xe7\xf5\xb0\xac\x86\x76\xc8\xa1\xa4\x75\x85\xec\x47\xe5\x6b\xed\xe0\x33\x05\x65\x9f\x5f\x86\xa3\xcf\x09\x54\xa5\x8b\x4f\x6f\x75\xce\x47\x7f\x0d\x72\x84\x2e\xe8\xa2\x16\xc1\xb8\xbd\x33\xb0\xfa\xc5\x77\x02\x4a\x25\x01\x03\x6b\xce\xef\xa3\xd2\x9d\x61\xa6\xce\x30\x95\x72\x74\xcf\x00\x73\xb6\xd0\x05\x41\x3d\x2b\x21\x66\x2e\xbe\x2d\xee\x83\x81\x19\x51\xe9\x8a\x0a\x9b\x0a\x26\xc0\x5e\xc5\x43\x43\xc2\x9c\xf1\xd8\xdb\x62\xff\x74\x85\x9b\xec\xbf\x91\xdb\xcc\x56\xe9\xa8\xa7\x6f\x70\xe8\x7a\x46\x09\xda\xc8\xf1\x74\xcc\x7a\x68\x89\x7c\x4d\x45\x6e\x5d\x3c\x1c\xda\x03\xfd\x50\x7e\xba\xa3\x7c\xb7\xf3\x12\xd2\x8c\x08\x51\x5e\x12\xe8\x9b\xa0\xa1\x1d\x78\xe8\xcf\xaa\x17\x27\x75\x00\xdc\x53\xa5\xb4\x53\xb6\x52\xc9\x13\xa4\x08\x6f\x49\x3d\x1e\xab\x38\x60\xe7\x75\xb5\x1d\x8f\xab\xd6\xc6\x40\x72\x04\xe5\x9e\x0e\xa1\xf2\x5e\x28\x9f\xea\xad\x0a\x0d\x8f\xc7\x23\x3e\xb5\x62\x41\x8a\x66\x6c\x16\xd4\x7a\x96\x1c\x59\xc6\x35\xc2\x9e\x96\xf9\x55\xbd\xae\x84\xae\xe5\x8a\x30\x9b\x45\xf7\x94\x94\xd9\x81\x5d\x22\x25\x2e\x25\xf6\x69\x72\x19\xc7\x3d\x83\x79\xe0\xdc\x58\x06\x28\xe2\xc8\x6c\x88\x16\xee\xb9\x41\xad\x68\xbf\x3d\x88\x15\x6b\x61\xd0\x8a\xf5\x9f\x00\x5c\x11\x76\x67\x94\xab\x76\x3b\xeb\x1c\x37\x32\x25\xd5\xbf\x0d\xc2\xe9\x61\xef\x80\x6e\x79\x0c\xdd\x06\x36\x28\x4a\xa3\x0c\x27\xf3\x05\x56\xbf\xf6\x44\xe0\xb3\x3d\xc8\x48\xd1\x40\xf8\x18\xb7\xdb\xa5\xe5\x8c\x9b\x90\x08\x56\x48\x74\x53\xee\x30\x1d\xac\x43\x2a\x59\xcd\x2c\xb2\xd7\x84\x67\x7b\xf7\x8f\x70\xcc\x25\xc2\x05\x89\x7d\x5a\x68\xe7\x81\xb2\x95\x00\x48\xe5\x4f\x65\x9d\x0c\x3d\x07\x06\x88\xe4\x60\x65\x2e\x22\x3a\xe6\x6b\xe2\x8f\x10\x2d\xda\x18\x20\x93\x9f\x8c\x4c\x6f\x5d\xdb\x7f\x4c\x8d\xb5\xdf\xbb\x2b\x44\xe7\x0b\x2a\xb4\x2a\xc4\xb9\x70\x79\xb7\x5d\x67\xa8\xcf\x5e\xa5\x45\xaf\x9d\x57\x91\x89\xb6\x1c\xbf\xe5\xe0\x83\x48\x97\xf8\xed\xd8\x97\x8b\xc9\xcb\x5c\x30\xe7\x0b\xdf\xc3\x06\x73\xd4\x78\x97\xdc\xf1\x6e\x6e\x21\x20\x00\xcc\x4f\x37\x79\x5d\x2b\xf7\xb2\x97\x11\xf7\xb2\x97\x2d\xf7\xb2\x9f\x48\xe7\x30\x60\xee\x58\x72\xef\x8b\x3d\xd9\xd9\x95\xdc\xd5\x58\xca\x4e\x71\x2a\x48\x89\xdc\x87\x5b\x40\xe2\xee\x0d\x84\x56\x39\x17\xea\xaa\xac\x05\xdf\x2e\x45\xc5\x89\xc0\x62\x7a\x7e\x0e\xef\xce\xcf\xc1\xfb\x49\xf5\x8e\x30\x3b\x92\xec\xa8\xb8\xb9\xd2\x1b\x2c\x2f\x8a\xbf\x30\xb1\x7e\x55\x16\xf4\x4b\x8c\x56\x1b\xe8\x6f\x59\x61\xa3\x28\x94\x6b\x2c\x04\x64\x2d\xe9\x29\x15\x26\x00\x7f\xc3\x6a\xa8\x92\x3a\x52\x99\xa9\xf8\xc2\xa6\x7b\x96\xdb\x38\x3a\xc1\x0a\x6b\xc4\x8c\x99\x34\x1c\x19\x9b\xd6\x57\xc0\xba\x08\x7c\x82\x8d\xb3\x7e\xcd\xfe\x87\x4e\xc8\x03\x1d\xe5\x57\x36\x29\xf7\x64\x9f\xbf\x48\xf0\xbb\xfa\x93\x16\xbe\x9a\x7b\xc2\xdc\x8b\xe7\x10\xdf\x3f\x98\x89\x7b\x0f\xb2\x13\x39\xeb\x07\x0f\xcb\x47\x02\x1c\xad\xf8\xbc\xbc\xf7\x60\xe1\xba\xce\x4b\x6b\xa3\xed\x82\xcd\xec\xa6\x76\x0b\xe6\xbe\x9b\xf4\xdf\x7d\x40\xd1\xe9\x8a\x95\xf9\x66\x73\x13\x38\xf2\x01\x15\xe4\xd3\xf3\x7a\xfb\xb1\x5e\x72\xf6\x91\x72\x33\x53\x72\x82\x1a\x2f\xaf\x95\x1d\xf4\x67\x47\x34\x46\x61\x72\x54\x49\x5a\x6b\xc1\xab\x1b\x29\xae\xb6\x4a\x65\xdb\x77\x60\x4f\xf0\x0c\x93\x7f\x6d\x25\x03\xf9\x7b\xea\x05\xbd\xba\x60\x57\xde\x8e\x17\xf5\x53\x79\x21\xdc\x85\xcb\xcf\x69\x18\x6a\xfb\x43\x5b\x26\x35\x45\xed\x3d\xd6\x16\x33\x02\xbe\xf3\x97\x4c\x39\xf4\x61\x9b\x58\xfa\xe4\x61\xfe\x88\x3d\xcc\x27\x13\x24\xe5\x89\x79\xbe\xb0\x39\xa3\x2b\x92\x0f\x3e\x72\x9a\x7f\x6a\x8c\x9b\xef\x78\x6c\x52\xb5\x56\x84\x19\x86\xea\x04\x6f\xc9\x89\x97\xc7\xa6\x72\x53\xd9\x10\x76\xaf\xc2\x4b\xf2\xe0\xe1\xf2\x11\x61\x90\x93\x07\x3e\xc2\xef\x2d\xd5\x67\xca\x7b\xcb\x05\xba\xdd\x90\xe5\xbd\x07\xfa\x53\x35\x29\xef\x6d\xee\x55\x78\x4b\xb8\xfc\xdf\x64\xf6\x5e\x31\x5e\x0b\xa5\x62\x87\x03\x93\x55\x38\x2f\x0a\x5a\x3c\xad\xb6\xa5\xc8\x6a\x1d\xd4\xa3\x7f\x6e\x95\x28\xfc\xe7\x68\x12\x01\xf5\xec\xf5\x16\x04\x6b\x5d\x6b\x19\xdf\xb6\x7c\x86\x3b\x56\xb0\x32\x54\xa7\x88\x43\x09\x17\xb4\xb8\xa8\x87\x20\xc1\x2f\x10\xfe\xd5\xb1\xd5\xe8\xa8\x5d\xde\x95\x5d\xc6\x13\xc0\xc1\x2d\xdf\xfe\xa5\x7c\x05\xcd\xc8\x5e\xc6\x09\xd2\x7d\xe4\xbe\xb1\xdc\x72\x67\x77\x9c\x2f\xd4\xc3\xd5\x66\x5b\xaf\x9f\xe6\x65\x55\xb2\x65\xae\xe2\x41\xa6\xbe\xda\x5b\x15\x88\xc8\xcb\x9b\x9f\x4a\x6d\x37\xe9\xa0\xa1\x4e\xf9\xea\x0f\xbf\xb7\x26\xdc\xb9\x3c\x27\x97\xb9\xd0\x97\x2b\x2b\x2f\x76\xbb\x11\xb5\x40\x49\x51\x83\xe6\x27\x0b\x13\x9e\x65\xbe\x1b\x04\x5f\x67\x51\xf1\xef\xe4\x21\x7d\xd4\x9d\x8a\x96\xe8\x26\x93\xf0\xa2\xf4\xdb\x68\x6e\x56\xc4\xa7\x26\xbc\xa9\x05\xdc\x6c\x2e\x71\xe6\xa9\x8a\xa0\xfa\x0b\xdb\x6c\x4c\xbc\x13\x7e\x80\x4f\x50\x17\xe6\x86\xcc\x52\x6c\x9c\xd6\x21\xde\x5a\x07\x40\x45\xda\x9b\x40\xb8\xce\xc7\x9e\xb1\x22\xfc\xd6\xe8\xa4\x31\x21\x05\x0d\x56\x66\xe0\xc7\xa2\x2f\x86\x32\xb2\x72\x97\x0f\xda\x2e\x30\xe0\x54\x70\x88\x26\x2d\x55\x9c\x1d\xc0\xea\x93\x46\x27\x08\xff\xac\x82\x8b\x0c\x69\xfe\x21\xed\x7c\x5c\x32\xea\x9a\x54\xf0\x69\xfb\x5c\x9b\xb2\x17\x3d\x40\xee\x76\xc0\x7c\xea\x9f\x7d\xcc\xa7\x8e\x2e\xc4\xe0\xdd\x82\x6f\x70\x3a\xa8\x11\xe6\xf7\xc1\xfe\xce\x53\x18\x8f\xfd\x07\xdf\x9f\x98\xa4\x60\x21\x5f\x94\x97\x37\xba\xbe\x0b\xd8\x83\x64\x7b\x05\x09\x08\xc5\xff\x44\x6f\x12\xc9\xa9\xcb\xe3\x71\xb5\xc9\x97\x3d\x59\x79\x06\x30\x7c\x5a\x76\x77\x5c\xaf\x8c\x62\x3a\x31\x60\x81\x81\x9d\x27\x32\x84\xc6\x1a\xd5\xbe\x49\xc4\xda\x9a\x01\x2e\xa7\x97\xf9\x55\xec\x7c\x9f\x41\x66\x2f\x04\x21\xb1\x3d\xa3\xe7\x45\x01\xd9\x43\xa3\x03\xf3\xfd\x03\x5b\x06\x85\x53\xc1\x19\xfd\x4c\x7f\xcc\x05\xad\x45\x0a\xa6\x4a\xff\x49\x0f\x13\xdd\x9d\xcd\x05\x15\x3d\x73\xb1\xce\xf2\xda\x92\xe9\x5a\x3e\xb9\xf9\x53\x5d\x95\x8f\xaf\x98\x2f\x77\x51\xa0\xcd\x36\x4d\xae\x48\x13\xc8\xc5\x81\xa9\x1f\xbd\xd1\xa6\xb7\xaa\xb2\xcf\x81\xbc\x0c\x30\x25\x95\xb7\xd2\xa4\x60\x78\x6d\xd0\x44\xdd\x37\xae\x59\x80\x4d\x89\xbf\xc3\x0a\xbe\x90\xe1\x29\xff\xdc\x53\xce\x1d\x0b\x92\x3c\x3b\xcd\x86\x76\xf8\xff\x25\xdb\x0e\x8d\x58\xec\x5c\xec\x81\xdd\x47\xd8\xf0\xa6\xc0\xc9\x98\x80\xc2\xa9\x52\xe1\x2b\x13\x99\x9c\x42\x6f\x1e\x0c\x6a\xb4\xeb\x91\x6f\x1a\x67\x76\xf3\x34\xf1\xc4\xe5\x76\x0e\x11\xde\xa0\x76\x2a\x8a\x0e\xed\x6b\xaf\x40\xc3\x13\x77\xa3\xbc\xf5\xda\x24\xcf\xe4\x8f\x99\x72\x4f\xd1\x40\xc3\x08\x10\xc9\x4b\x2b\xee\x22\x2d\x11\x2e\x83\xe8\xc8\xdf\xf9\xb7\xdf\x78\x4c\x4d\xa1\x05\xfd\xc7\x54\x57\x4e\x00\x4e\xe5\x3f\xf6\x29\xed\x1d\x2e\xea\x08\xbd\x90\x74\x10\x81\x3d\x11\x10\x7c\xc9\xfc\x38\x3a\xef\xf1\x99\x8e\xfb\x54\x80\x89\xe8\x98\xc5\xf4\xdc\xa4\xc2\x0a\x9d\xc3\x04\x90\x06\x41\xcf\xa4\xac\xd4\xdd\xcf\xdf\xd9\x20\x69\x7d\x2c\x10\x9a\x25\x72\x95\x09\x54\xf7\x6c\x74\x69\x21\xd2\xc1\x3d\xc5\xcf\x90\x76\xef\x81\x1b\x17\x92\x5d\x6a\xc8\xa5\xd4\x94\xa2\x30\xc0\x83\xcc\xfc\x2a\xf9\xcd\x9d\x07\x07\x3d\x98\x3a\xba\x5d\x17\x2a\xfd\x02\xbe\xa8\x8e\x31\x6d\x94\x40\x6a\x77\xe7\x3f\xff\xd5\x2d\x41\xff\x75\x58\x6c\xb6\xc2\x1c\xe6\x5d\x71\xae\xf4\x2b\x6a\x99\x84\x26\x1c\x32\x99\x80\x1f\xac\x13\xe2\xd8\xc2\x65\xab\xa1\x10\x61\xac\x99\x62\x8a\x21\xb7\xdd\x42\x2e\x6f\x99\xcb\x43\xa2\x65\x71\xa4\xcb\xfb\xb4\x6f\x41\x67\x3b\x69\x7e\x1b\x31\xdd\x8f\x6f\x24\x65\xf7\x08\x80\x51\xa8\x57\x95\x51\x34\xb8\xde\x7b\x14\x12\x56\xd0\x52\x30\x71\x93\xc8\x96\x92\x3c\x74\x37\x21\xc8\xc1\x1d\x93\x08\xdb\x74\xd3\xbb\x16\xf4\x9d\x64\x53\x69\xca\xaf\x00\xa6\xf4\xcd\x39\x84\xaf\xb5\x88\xcd\x22\x2f\x3d\xce\x2f\x53\x5e\x61\xf5\x54\xde\x39\xfe\xd0\x4e\xca\x33\x10\x09\x58\x63\x35\x3b\x57\xa9\x56\xd1\x05\x50\xed\xd8\xf6\xbe\x09\x4a\x29\x61\x7f\x2a\x25\x66\x0f\x45\x35\x5c\x51\xb1\x5c\x0f\x15\xc9\x1a\xca\x73\x78\x73\x25\x6f\x21\x3b\xca\x24\x19\x5e\x33\xb1\xae\xb6\x62\x98\x97\x43\x15\x59\x52\xeb\xab\xb1\x4b\x00\xa0\x1b\x40\xc7\x9d\x7a\x3a\xa3\x26\x9b\x11\x52\xca\x4d\xf5\x77\x83\x19\x29\x71\x5a\x19\x15\xdf\x39\xdb\xaf\xdf\x0b\x41\xc7\x0a\xa5\xcd\xfa\xcf\x94\x79\xda\xac\x0a\xe1\x1c\x9e\xe1\x5c\x5e\x0e\xe9\x7f\x28\x89\xf9\x4f\x87\xce\xa5\x4d\x3c\x06\xf9\x82\xcc\xd1\xaa\xf4\xd1\xd2\x37\x3f\xe6\xf6\x28\x7d\xa2\x37\x84\xe1\x6a\x1a\x35\x0c\x90\x12\x57\xea\xb0\x95\xdd\xb4\x86\x6a\x9a\xda\x33\x15\xf2\x1e\xaa\x2a\x8c\x2b\xca\x69\xb9\x74\xaf\x02\x29\x8c\x70\x5c\xfd\xa6\xa7\x33\x76\x2e\x59\xeb\x5c\x1e\x4f\xe2\x95\x8e\x5d\xfd\xaf\xea\x9a\x49\xba\xa3\x7f\x01\x5d\x67\xf1\x6b\xaf\xab\x3d\x96\xb7\xa8\x3c\x26\x61\xd2\x2f\x08\xc8\x97\xa3\x7c\xbb\xe3\xde\x8a\xff\xa7\x43\x56\xd6\x22\x2f\x97\xf2\x6e\x7a\x4b\x67\x34\x6b\x11\x02\x2c\xe2\x9b\x2f\xf9\x51\xcb\x75\xbe\xb7\x6b\x48\xcf\x74\x6a\x00\x98\x76\x87\x7e\x78\xa7\x27\xb2\xfd\xda\x34\x13\x81\xba\xa9\xc2\x22\x61\xeb\x54\x73\xfd\x46\x0b\xdd\x72\xa0\xca\x1e\xf0\x88\xbc\xcd\x03\x71\xd4\xab\x60\x27\xe7\x1d\x1e\xfa\x16\xef\x1c\x9b\x78\x74\xe7\x80\x33\x66\x1d\x1a\x12\xdd\xbd\xde\x91\x63\xb9\xe0\xf4\xe0\x7b\x68\xb9\x26\x4d\x50\x17\xca\x52\x07\x4a\x7f\x2b\xf2\x10\x31\xe2\xfc\x7f\x86\x38\xdc\xf1\x00\x07\x92\x9f\x39\xbe\xf1\x7b\xdd\xb7\xc4\x74\x29\xcc\x1e\xc6\xde\xe3\x80\xeb\x44\x8e\xcf\x8a\xfa\xf0\xc0\xd8\x4f\x4d\x47\x8d\x81\x50\xb2\x55\x40\xb1\x7a\x84\x64\x2a\x6f\x20\x28\x84\xf8\xed\xc9\x10\xa1\x83\x0e\x7f\x0c\xcb\xb6\xc6\x4b\xaa\xcf\xb1\x49\xab\xdb\x2b\xc9\xb7\xa8\x96\xa7\x84\x17\x31\xec\x34\x81\xe0\x4a\xd5\x52\xa7\x50\x44\xa4\xc3\xb3\xd8\xbd\x8c\x0e\x01\x9b\x8b\x54\x6a\x0e\xa3\x8c\x8d\x6e\x82\x2d\x64\x15\x8a\x85\xb1\x41\x21\xf9\xca\xe3\xf0\x99\xd2\x2a\x68\x2d\x40\x6c\x22\x97\x90\x74\xb4\x9e\x8a\x4a\x71\xd4\x68\x4a\x3f\x53\x7e\x13\xd1\xfa\x43\x09\x2f\xda\x4f\x7a\xf7\x52\x54\xa0\x97\xea\xd7\x2b\x60\x45\x57\x8c\xf2\x14\xa1\x40\xcf\x1a\xa5\xfa\x21\xa7\x6b\x5b\xf7\x70\x8a\xa1\x22\x02\xc0\x9c\x1d\x45\x98\xfb\xf7\xef\x20\x41\xee\x1f\x46\x35\x8e\x8e\xa4\x28\xab\x25\x9f\x90\xb5\xea\xd6\xbb\x49\x08\xa1\xbb\x5d\x02\x69\x74\x66\x90\x74\xba\x53\x06\x4e\xde\xb7\x49\x0d\x39\x8a\x82\x87\x53\x51\xa9\x7c\x47\x29\xca\x92\x64\xe2\xc5\x18\x72\xfa\xaf\x2e\x1b\x96\xf4\x50\x42\x20\xe7\xd1\x66\x59\xf7\xb3\x4a\x91\xf8\x7e\x1f\x3c\xe8\x55\x5b\x2b\xc3\xb9\x14\x9d\x21\xb9\x3e\xa0\xc6\x41\x0f\xb7\x0b\x3f\x28\x8d\x76\x84\x2f\xfd\x7d\xa8\xa2\x67\x70\x6d\x9d\xd7\x91\x2e\xa6\x1c\x9d\xdf\x47\xb9\x09\x88\x98\x77\x41\xd0\x8e\x00\x11\xcd\x8b\xa2\xdd\xd2\xa8\xa6\xbd\xd6\x62\x41\x68\xb8\x76\x2b\x9a\xe9\x0b\xe5\x73\xdb\x1f\xc2\x54\x36\xec\x8c\xe4\xd7\xd4\x35\x83\xb1\xb2\xa0\x5f\xde\xae\x52\x8a\x1e\x42\x6e\x4c\xa3\x5c\x35\xef\xb5\x69\x81\xe3\x07\xca\x5f\xae\x2a\x45\xce\xca\x18\x44\xa0\x7b\xcf\xd8\xd0\x75\x43\x73\xde\x77\x3d\xa9\x1e\x83\xd6\x1e\x0f\x9c\x29\xf8\xe4\xa1\x78\x64\x4d\x2e\x42\xa2\x37\x9d\x8b\x45\x10\x06\x98\xa2\x26\x86\x13\x2d\xcf\x0a\xa3\xa5\xdf\xe7\x50\xa0\xe7\xaf\x9a\x5a\x47\x04\xf5\xf4\x98\x9e\xae\x8b\x9e\xc9\x81\x4e\xba\x95\x4d\x3e\x67\x17\x10\x39\x07\x48\xc9\x81\x9c\x46\xdc\x1a\xe4\x43\xe3\xd7\x80\x59\xdf\x01\x34\x28\x79\x99\x5f\xc5\x3e\xb0\x4f\x79\x67\x34\xe1\x3d\x97\x3f\x8c\x39\xa7\x96\xbb\x68\x19\x6f\xfc\x26\xa0\xf9\x29\xa9\x4a\xf8\xdb\x98\x84\x74\x71\xef\x4b\xdb\xaf\xe5\x73\x49\xc1\xbb\xb2\x43\xf7\xe8\x5c\xd2\xbc\x85\x49\x71\xd7\x28\xb5\x1a\xae\x54\x62\x97\xbf\xd0\xfc\xd3\xeb\xfc\x0a\xe7\x94\x3c\x70\x44\xbb\xa6\x5e\xb1\x2e\xaa\x93\x94\xf6\x2c\x43\x8e\xb2\x85\xec\x83\x15\xd5\x19\x4e\x05\x32\x09\x60\xb7\x87\xc8\x5e\xa0\x66\x3d\x37\xca\x9c\xd7\xf9\x55\x98\x12\xad\xa4\xd7\x9b\x1b\xe5\x69\x5e\x84\x6f\xfc\x2e\x72\x2a\x8c\xc6\xba\xa8\x37\xfb\xf6\x52\xd5\xe2\x22\x51\x2b\x0f\xd1\xe6\x78\xa1\x2e\x2c\x41\x55\x32\x4d\x25\x9d\x50\xfa\x09\xaa\xb5\x97\x98\x5b\x10\xb1\x59\x0a\x94\xf2\x74\xb9\xa6\xc5\x76\x43\x0b\xed\xb0\x90\xa2\xf1\x98\x4d\x97\x52\xb0\xdc\xd8\x47\x98\x69\xc5\xc8\xc7\x2d\xdb\xa8\x91\x40\xcc\xe6\x48\x22\x82\x1a\x7f\xcf\xbc\xac\xd4\xea\xec\x50\xc1\xda\x81\xdc\x99\xb4\x82\x2a\x51\x13\xc2\xa3\x72\x3c\x16\xae\x03\x9c\xd3\xd7\xf9\x95\xd7\x4a\xa8\x82\x6a\xc0\xe0\x3c\xb9\x79\xdf\xe1\xf6\x2d\x7e\xf8\x73\xa0\xd3\xe5\x86\x49\x26\xaa\xf0\x30\xbc\x67\x32\xaa\x4c\x92\xc2\x2d\xdb\x4d\x7e\x54\xc3\xda\x8d\xa0\xcb\xa4\xa9\x1e\x18\x1c\xc8\x83\x1e\x70\x60\x6a\x23\xb7\xf6\x02\x2b\xdc\x2e\xa8\x76\xe4\xbc\xbb\x4a\xd4\xd1\x92\x3d\xcd\xcb\xb2\x12\xc3\x9a\x8a\xa1\x58\xd3\x21\x2b\x86\xc9\x44\x4c\x92\xa1\x64\x6a\xd6\xd4\x28\xcd\xc0\x0d\x31\x4b\x26\x7c\x92\x0c\xf3\x5a\xbe\xe1\x74\xc8\xc0\x7b\xb1\xde\x3a\xdd\x1a\x53\x9d\x96\xf9\x72\x4d\x8d\xaf\xa2\x14\xad\xc0\x23\xb9\xf4\xd2\x44\xb9\x29\x31\x75\xe9\x82\xb5\xf8\xd6\x9b\x3c\xa4\x43\xaa\xb0\xd0\xc9\x71\xfd\xbd\x2b\x43\xaf\x3a\xa1\x0b\x01\xee\xd9\x86\xa0\x87\xce\xb9\x5a\x02\xfd\x94\xfd\x5f\x15\xa9\x90\x14\x43\x78\x9f\x8e\x7a\x4e\xf5\x63\x91\x87\x9e\xbc\xef\x48\xa4\x7c\x5a\xa8\x5f\xa7\x37\xe5\x32\x95\x74\x4c\x31\x39\x5c\x7e\x1a\x8e\x45\x6b\x4f\x4d\x45\x54\xd4\x86\x8b\x9c\x93\x31\x76\x8b\xdd\xae\xdc\xed\xd2\x92\x24\x0a\x59\xee\xb1\x22\xd3\xba\xcd\x92\x5e\x3f\xd5\x08\x94\x22\xbb\x1b\xf4\x7a\x78\xa9\x0a\x6c\x3a\xda\x84\x4b\xbf\xa2\xf1\x81\xe3\x95\x17\x45\xca\x2c\xc8\x5b\xf0\x50\x2f\x25\xe5\x90\xab\xf2\x66\x10\x11\x0a\x72\x3a\x99\x18\x2b\x50\xff\xfd\x12\x7c\xc0\xdb\x48\xcc\x55\x98\x45\x49\xdc\x39\x19\x48\x56\xc6\xec\xb0\xb9\x21\xf7\x1f\xd0\x2e\x66\x50\xa8\x7e\x23\xfc\x0f\xef\xe3\x1f\x2d\x65\xb6\x37\x25\x30\x3f\xa2\xe7\x93\xfd\x43\xf9\xcd\xdb\x63\xb5\x6e\x4a\xea\x05\xdd\x98\x6c\x7f\xfe\x4c\xf4\x35\x98\xc5\x76\xc8\x5c\x91\x2d\xc3\xd3\xe6\x5f\x5e\xba\x58\xc6\x63\x32\x56\xf1\xc7\xeb\xe8\x63\xb7\xde\xc2\x17\xd9\xd6\x14\xd8\xff\x14\xfe\x27\xca\xb9\x46\xa4\xc9\x34\x41\x8a\x35\xba\xa2\xe4\x01\xbe\xec\xbd\xe6\xcd\x61\x8d\xcb\x38\xac\x20\xfe\x59\x33\x09\x25\x0d\xce\x92\xd2\x44\x4b\xf5\xd8\x5a\xcf\x3d\x37\xc1\xe0\x05\x53\x21\x80\x61\xe3\x2b\x5a\x16\xac\xbc\xf0\x02\x80\x5f\xe7\x65\x7e\x41\xf9\x8b\xcd\xb6\x5e\x77\x07\x0e\x1c\x94\x5a\xc3\xbf\xa7\x3a\x6a\x3d\xec\x56\x54\x6f\x2a\xa1\xa7\xd4\xea\xe1\x7c\x16\x5b\xb3\xf2\x93\x03\x04\x6f\xd4\xa2\xc3\x67\x75\x8b\x7c\x86\x6f\x9d\xb3\x6f\xf8\xfc\xbc\xa0\x2b\xca\x39\x2d\xce\x54\x04\x5e\xfb\x35\xf7\x62\xa2\xdb\x73\xd0\xda\xc7\xce\xf3\x40\x37\xd9\x9a\x86\xd1\x55\x3c\x95\xd7\xdd\x1e\xf1\x95\x53\x29\x3e\x51\xe7\x65\x71\xb8\x83\xd3\xf0\xe8\x2a\x26\xf5\x1d\xfb\x7c\x39\xf4\x91\xc0\x43\xc9\x5f\x17\xed\xa2\x94\x8f\x98\xd6\x57\x50\x57\x3e\xff\xe1\xa7\x57\xcf\xce\xff\xfc\xfc\xaf\x0b\x72\x45\x27\x93\x89\xf5\x18\xb9\x07\xbb\x94\xc4\xb6\xdf\x8b\x04\xd4\x9b\x0f\xdc\x55\x17\xd7\x8d\xaf\xa1\xc1\x73\xf3\xfb\x10\x8e\xdb\x76\x5d\xfc\xb6\xaf\x3a\x28\xe6\x66\xc5\x69\xed\xcc\x03\x5d\x9c\xf3\xa6\xdf\xc5\x38\xff\x65\x80\x6f\xc1\xa2\x2d\xb6\x75\x40\xe1\x70\x2d\xd0\x6d\x30\xa8\x6f\xd6\x61\xe8\xab\x29\xab\x5f\xb2\xa2\xa0\xe5\x0b\x5e\x5d\xfa\x31\xff\xdd\xdb\x56\x2b\x2f\x74\xa2\x13\xf0\x62\x1e\x95\xd3\xf7\xcf\x9f\xbe\x7d\xff\xec\xfc\xd9\xe3\xb3\xc7\xe7\xa7\x67\x8f\xcf\x9e\xef\x76\xa6\x9d\x4e\xf7\x91\x22\x04\xc6\xad\x48\x5b\x73\xf1\x68\xeb\xef\x8b\xed\x66\x73\x63\x63\x45\x32\x08\x72\x9d\x86\xa9\x8a\x4c\x8a\xe2\xd0\x87\xcc\xa4\x9e\xe9\xdb\x35\x1d\xe0\x1c\xe5\xab\xf4\x3b\x0f\x6d\x76\x3b\xaa\x6d\x1e\x0d\xae\xe2\xb3\x8b\x41\x27\xb2\xbe\xf1\x38\x1d\xa5\x23\x7f\x7b\x40\xd3\xaf\x03\x62\x58\x55\x3e\x35\xc1\xc6\x06\x6a\x07\x9a\xa5\x08\xc0\x3e\x4a\x23\x8d\xdf\xd0\x6b\x97\x5f\xbe\x3d\x08\x2d\xa2\xef\xde\xd0\xeb\x14\xed\xeb\x05\x1f\xbc\xfb\x46\x20\x24\x41\x67\x20\xf7\xaa\xfc\xa9\xde\x63\xbc\x80\x10\x11\x67\xb8\x18\xa5\x54\xfb\x8e\x85\xce\xed\xed\xa7\xda\xad\x1d\xbe\x03\x28\xd9\xa7\x35\x0e\xa6\xa8\xdb\xaa\x6e\x1a\x43\x8f\xec\xa8\x5b\xbb\xae\x31\x3c\xe8\xed\x49\x8b\x46\x19\xbb\x20\x6a\x3e\x1e\x3b\xda\x3b\x44\xb7\x9b\x9a\x85\x4a\x26\x71\xe4\x2c\x54\x63\xd5\xb1\x17\x8f\x87\x51\x34\xee\x47\x90\xd9\x3e\xdc\xc9\x62\xd3\xd0\x6f\xd5\x3c\xde\xd0\xeb\x5f\x31\x87\x37\xf4\x3a\xf6\x7d\xc0\xea\xe8\xb7\xdf\xd0\x6b\xf5\xdd\x56\x1a\x31\x55\xcc\x22\xfc\xec\xf3\xf7\xef\xdf\xbe\x3f\x45\x7b\x00\x0a\x83\xc8\xf1\x6c\xfa\x95\xa3\x76\xc2\xb6\x96\x5d\xad\x21\xb9\x1d\x42\x1d\xd0\x83\xf1\x78\xd4\x43\xda\x02\x49\x47\x89\x62\x9c\xdc\xc2\x1f\x99\xc0\xa1\x49\x06\x40\x82\xfd\xb9\x74\x81\x84\xf5\x5d\x99\xf9\x17\x27\xd6\x31\xe7\xde\x1b\xb8\xe5\x9b\xc0\x5b\x5b\xcd\x3b\x61\x85\x64\xd2\xa9\x65\xf6\xa9\x8a\xf4\x33\xe2\x66\xe9\x5c\x52\x5f\x15\x69\xa9\xd8\x63\x46\x44\x2b\x9b\xf0\x33\xc9\xca\x43\x5a\x86\x48\x28\x9c\x17\xd5\xc1\x90\x91\x37\x2a\x9c\xb7\x15\x7d\x35\x39\x79\x58\x3f\xca\x8d\x08\x52\x1b\x11\x64\x4b\xf2\x79\xbd\xc0\x1b\xc2\xe6\xdb\xc5\xc0\x2e\x60\xa3\x2a\x5a\x79\x25\x0c\x36\x10\xa5\x39\xbb\xa1\x29\x9d\x6f\x17\x28\xbb\xd0\x7f\x60\xf9\x2f\xa9\x8c\x5c\x41\x3a\x48\x78\x2e\x27\xaf\x36\x56\x09\x64\x3a\x5c\x3f\xb5\x55\x4f\x74\x8c\x39\xc7\x4b\x53\x1d\xa3\x36\x65\xef\x39\x6e\xd7\xc1\x47\x28\xe4\x77\x84\x66\x28\x5e\xe4\x4b\x51\xf1\x9b\x58\xb4\xa0\xcd\xf3\x66\xf2\xb4\x2b\x0e\xe3\x59\x8b\xe1\x70\xfe\x0b\xfe\x07\x24\x66\x7a\x5c\x0c\xe9\x84\x98\x78\x7c\x57\x97\xd7\x37\x3c\x92\xe2\x04\x5d\x9b\x80\x65\xfc\x9f\x29\x35\x84\xb8\xf0\x50\xba\x93\x80\x2f\x30\x86\xf6\x72\x65\x51\xc9\xc2\xf2\x6a\xe6\x10\x05\xd7\xa6\x51\xa6\xa4\x56\x7c\xf4\x62\xf2\xe3\xdc\x70\x3c\xf7\x3b\xed\x6b\x3e\x17\x0b\xf3\x91\xf1\xf8\x98\x56\x29\xd2\x09\x54\x86\xfb\x5a\x37\xb1\x09\x87\xc2\xc4\xbe\x24\xf5\xb4\x4f\xa0\x00\xb3\x51\x7b\xa4\xb9\x58\x0c\xdc\x9c\x3a\xef\xb0\x0a\x2a\x6f\x85\x29\x8d\xc7\xdc\x6a\x09\x5a\xa8\x0b\xa7\x23\x34\xc0\xf4\x32\xcd\xf1\x4c\x54\x55\x4f\xa6\x46\x74\x7b\xdc\xb5\x21\x09\xcf\x1e\xa6\xc8\x7f\x9d\x8e\x4e\x6c\xac\x46\x59\x98\xfc\x5f\xa6\x9c\xa0\x9c\x8a\x64\x86\x22\x7a\x27\xe5\x41\x2e\x0f\xa3\xf1\x58\x17\xaa\xd4\xa3\xe7\xe1\x00\xac\xbf\xa7\xfa\x73\x14\x7c\x6a\x64\x8b\xd3\xfc\xb3\x0e\xf6\xe5\x98\x22\xcc\x4d\x28\x16\x7c\x59\xe4\x5c\xd0\xc2\x9d\xba\xf6\x19\x0d\x4e\xa4\x3e\x1f\x5e\xea\x11\x4b\x73\x82\x43\x81\x13\xaf\x5b\xa2\xc2\x01\x2a\x70\x20\xf9\x4b\xae\xd9\x18\x30\xec\xf7\x86\x45\x2b\x1c\xbb\x6d\x06\x1c\x6c\x96\xdd\xbd\xbf\xda\xd6\x6b\x70\xf6\x82\x5a\xc2\x4a\xbd\x11\xab\x28\x8c\x83\xeb\x40\xf9\xd4\x57\x53\x79\x29\xd4\xeb\xa3\x97\xfd\xe0\x2b\x97\xfd\x00\x29\x0a\xd8\xb1\xf5\xeb\x4d\x0a\x41\xaf\xe3\x81\x6d\x3d\x4f\x6f\xf7\xd5\x10\xc3\x6a\xa5\x51\x60\xe0\x85\xde\x76\x4b\x8d\x06\x01\xcf\xc2\x24\x8b\xf7\x32\xd6\x25\xf8\x56\x3b\xc6\x64\x1c\xeb\xec\x76\x19\x95\xa0\xe9\x44\x6b\x7a\x0e\x5d\xad\xdc\x86\x58\x34\x38\x5c\x13\xaf\xae\x55\x33\xd5\x82\x82\xfb\x61\x77\x15\xcb\xea\xf2\x4a\x1e\x00\x3c\x54\x27\x73\xb8\xda\xe4\x17\x75\x82\xa2\x61\xae\xdd\xad\x92\x5f\x8e\x9f\x69\x80\x76\x90\x9c\xb5\xbb\xab\x9e\x78\x96\x7a\x47\xd2\xef\x65\xe2\x4b\x22\xf7\x49\xea\x2c\x26\x51\xe9\xdd\xde\x0d\x1d\xb1\x5e\xed\x12\xdf\x96\xd3\x8f\xf9\xf2\xd3\xc7\x2d\x2f\x25\xfe\xe8\x56\x92\x24\x40\x33\xa5\xa7\xc0\xc9\xf9\x72\x4d\x97\x9f\x5e\x54\xfc\x2d\xbf\x5a\xe7\x65\x2b\x50\xb0\x86\x60\x29\x25\x06\xb4\x25\xd1\x5e\x81\xbb\x33\x25\x39\x40\x60\x1c\xeb\x5e\xcf\xe1\x35\xd8\xaf\xad\x1b\x3d\xc0\x6e\x7d\x6a\xcc\x1e\x38\xa0\x7d\x6a\x0f\x45\x94\xad\x69\xa2\x3b\x9f\xce\x97\x35\xe1\x6d\xdb\xf8\x54\xeb\xfd\x30\x4c\x11\xee\xa2\x44\x47\x7b\xa8\x1f\xd9\x8b\x15\x44\xf9\xfd\x03\x1f\x31\xed\xa3\xd4\x3f\xde\xc4\xe4\x57\x0f\xe4\x91\xf0\xa9\xbf\x53\x12\xf5\xa5\x94\xa8\x54\x79\xc5\x27\xd1\x44\x3e\x4a\x87\xec\x92\x97\x44\x6e\x96\xb0\x77\x37\x70\x4c\x11\x6c\x18\xa8\x45\x4f\x5c\xbc\xf8\x67\x9a\x32\x4c\x71\x8b\x63\x97\x7d\xc0\x13\x00\x1f\xdf\xc5\x18\x70\x91\x96\x84\xe2\xcb\x0a\xac\x67\xe7\x7d\x2e\xcf\x2e\x0f\x81\xcb\xf4\x79\x64\x7e\x16\x63\xa4\x36\xc9\x5d\xca\xb0\xca\x13\xce\x5d\x49\xa8\x6a\xb7\xab\x70\x4d\xc0\x51\x83\x62\x25\x66\x31\xdc\x57\x95\x59\x09\x5c\xf6\x7b\x59\x09\xb6\x59\x90\x9a\x72\x23\x89\x80\xc5\xaf\xc8\x45\x3e\xdb\x97\x48\x45\x35\x51\xbe\x6c\xe0\x98\x1c\xae\x4f\x12\x94\x17\x39\xdb\x50\x48\x74\xfb\x58\x08\xc9\x5b\xa3\x16\x63\x1f\x65\x27\x75\xb6\x9b\x8d\x57\xbb\xd3\x83\x29\x78\x45\xb5\x58\x94\x73\x45\xc2\xfd\x7a\xdd\x12\xb4\x5e\x3e\x25\x4c\xb1\x8d\x85\xdb\xd8\x02\xac\xdb\xd9\xb6\x13\xcb\x81\x5b\x55\xaf\xb3\xda\x25\xf3\xb8\x13\x60\x22\x51\x22\x55\xe0\x0f\xd8\xc6\xa8\x56\x84\xf0\x03\xe4\xfb\x39\xdd\x1d\x83\xca\x28\x76\x1a\xcf\x3f\x87\x62\x6d\x0e\xda\xe4\xc4\x32\x45\x98\xfd\xcf\xef\x0b\xf0\x2c\x11\xce\xc9\x68\x54\x86\x93\x1c\x8f\x5b\x0f\xda\x8c\x79\x8a\x06\x8c\xfc\xd9\x06\x2c\x6a\x35\x81\xc3\x7d\xc7\x87\xa9\x39\x5c\x6a\x70\xa7\x5c\xf9\x21\x60\xb7\xbe\xac\xbd\x60\x0c\x85\xd0\x4b\x55\x8f\x4d\x9d\x8f\x20\xf4\x3f\xe3\xf6\x58\x5d\xb9\xa7\x38\xc8\x6a\x5b\xd9\x48\xe7\x76\xe2\x83\x1c\x47\x54\x19\x2e\x15\x82\xb0\x29\x03\x3b\x00\x26\xac\x2d\xe1\x46\x85\x1f\xba\xf0\xe4\xc3\x9e\x16\x5d\x39\xed\x40\x07\xb0\x62\x57\x53\x88\x1f\x82\x75\xbc\x8c\xe4\xc0\x0a\xfc\xe6\x15\x0f\x99\x93\xe8\xa1\x75\x86\x1c\xcf\x5f\x2a\xdf\xed\xd2\x9c\xb4\x69\x7c\x2f\xe6\x28\xe3\x21\x16\x98\xf5\xc7\x00\x94\x9d\x78\x66\xe5\xe8\x90\x26\x06\xe2\x20\x1a\xe0\xb2\xe9\xcf\x11\xf2\x99\xa6\x15\xa6\xb8\x45\xa8\xb0\xe8\xdc\x12\x07\xbb\xa8\x9b\x15\x35\x07\xad\x5b\x72\xb3\x73\x9c\x9b\xdb\x24\x06\xeb\x7d\x77\x89\x77\x5a\x7f\xc5\x4d\xd2\xbe\x3c\x2a\x77\x79\xb0\xdd\x8e\x99\xad\x0d\x7c\x95\x29\xae\x40\xa7\x55\xe9\xca\x6c\xdf\x96\xb6\xd7\xea\x8b\x1d\x24\x54\xde\x58\x38\x3f\x96\xc0\x1b\xbd\x98\x4f\xde\x6b\x4b\xde\x73\x47\xb9\x73\xe0\x53\xa2\xa3\xec\x73\x3a\xea\xd7\x78\x80\xbe\x0f\x59\x3d\x1d\x9f\xea\x8f\x4a\x7a\x07\x68\x69\x0b\x7f\xdb\x57\x16\x63\xf5\x4c\x13\x27\x3d\xa3\x01\xdd\xd4\x54\xf3\x49\x41\xc1\xd2\xd9\x3a\x5b\x0e\x0e\xcc\x85\x30\xa7\x5a\x6b\x13\x96\x3e\x85\x8d\x95\x25\x8f\x41\xc9\x3d\x27\x5e\x22\x87\x8d\x41\x1a\x84\xa0\x8b\x63\xf2\xa0\x73\x43\xa4\xed\x2b\xa2\x86\xf6\x1d\x0c\x4b\x47\x0f\x24\x0c\x3b\x6d\x4f\xd7\xd5\x76\x53\xbc\xa8\xf8\x92\x2a\xc9\x2e\x1d\x9d\x58\xdf\xa0\xaf\x3c\x35\x55\xec\x4c\x20\x73\x54\x62\x88\xcb\x70\x89\xab\x0e\xe2\xf6\x9e\x83\xd9\x9d\x11\x3b\x6f\x50\x96\xbb\x8d\x3b\x8e\x33\xfd\x06\x5b\xe7\x33\xb4\xff\x4f\x6d\x5e\x87\x75\x2c\x31\xfb\x56\x1b\x14\x67\x2d\xab\x06\x65\x95\x27\x7a\x3a\x13\x76\x58\xb9\x26\x26\x14\xcf\xa2\xea\xe2\xac\x2b\x33\x16\x5d\x11\xbb\xad\x8f\x0e\x9c\x56\x46\x27\x51\x6d\x72\x8c\x3f\xd8\xa3\x4d\xee\x51\xcf\xf6\xe8\x89\x7b\x5a\x37\x08\xd7\x34\x75\xbb\x6a\xfd\xd3\xe4\x23\x14\x71\x0d\x1a\x9d\x18\x79\xb5\x2f\x6b\xe2\x1e\x61\xb5\x9d\x40\xb1\xf2\xaa\xed\xf6\xba\xac\x79\x63\x78\xb5\x79\xa9\x52\xad\x52\xb1\xbd\xea\xd4\x20\xf2\xfd\xc6\x63\x5a\x45\xda\xd2\xf8\x69\xf7\xcf\x4e\xce\x65\x6d\x03\x38\x0f\x4a\x96\x33\x0a\x95\x38\xa1\x85\x4b\xce\x9e\x1a\x86\xc2\x2e\xf1\xe7\x30\x48\xa9\xed\x87\x17\x9e\x68\xd9\xcb\x2d\x09\xcc\xb8\xf1\x6b\xa0\x6f\x8c\x56\xaf\x94\xe2\x1b\x9a\x0a\x14\x8c\xd8\x47\x9f\x0e\x8d\xe9\x1f\xd8\x8b\xce\xa8\x7d\x68\xc0\x56\xa9\xc5\x7c\xe3\x26\xd0\x93\xc9\x54\x13\x24\x5a\x0c\x45\x05\x4e\xc2\x26\x23\xa9\xa8\xe4\x9f\x42\xfe\xa9\x5d\x85\xb5\x83\x81\x73\x19\x06\x3c\x1d\x98\x8f\x75\x36\x20\xa5\xc8\xf3\xfa\x8d\xad\x2e\xc4\xc9\x41\x0f\xeb\xc7\x6a\xd9\x4e\x95\x41\xa1\x1a\x5f\xb4\xbe\x3f\xc8\xb9\x9f\xe0\xdb\x52\x4a\xf1\xd4\x56\xd0\xe0\x8e\xe7\x11\xa0\x95\x0b\x72\x98\xf6\xd5\x97\x7d\xe2\xf2\x77\x56\x53\xaf\xaa\x4b\x44\xd1\x0c\xb3\xf0\x9a\x24\x5e\xaf\x76\x81\xae\x4e\x1f\xaa\x73\x0a\xc9\x0e\xa6\xe0\x48\x4f\x73\xf3\x5a\x35\x8e\x95\xff\x0a\x9a\xbb\x06\x89\x51\x67\x76\xca\xcc\x44\xf4\x99\x06\x69\xac\x63\x90\x31\x6b\x7b\xca\xf7\x98\x37\x4a\xbc\x8a\x0d\x00\xfc\xf0\x57\x87\x47\x7c\x74\x76\xdb\x74\xc4\xd9\x68\x32\x74\x5c\x99\xf4\xeb\x7f\xb1\xe5\x0c\xfa\x8c\xa3\x30\x88\xab\x7a\x90\x06\x96\x24\xf7\x3c\xf1\x47\x35\xe5\x78\x7a\xe0\x1e\x14\xc7\xdd\x6f\x23\x93\x1d\xfa\x79\x15\xdf\x12\x6b\x5d\xcf\xc1\x83\x55\xdf\xc3\xe5\x3a\x2f\x8b\x0d\x2d\x9e\x7f\xa6\xa5\x48\x39\x86\xa2\x11\xb2\x85\x8e\xe3\x86\x6f\xc4\x92\x83\x75\x91\xb8\x8f\xf4\x2a\xca\xab\x89\x9a\x4a\x2c\x46\x0d\xae\xba\x17\x6a\xe3\xdb\xce\x11\x2d\x1a\xdf\x8a\x26\x6a\x6b\x58\x84\xf2\xe9\x6e\x49\xb4\xfd\xe0\x73\x93\xb0\xe4\x31\x32\x8d\xf6\xe2\xd2\xc8\xea\x5a\xfd\xcd\xed\xa4\x1b\xed\x99\x83\x07\x08\x43\x7e\xbe\x72\x0a\x61\xf7\x94\xee\xfb\xe8\x60\x2f\x1c\x0d\x72\xf4\x6a\x3b\x80\x54\xfb\x95\x98\x7a\x33\x26\xa6\x68\xd0\xf3\x91\xf1\x98\x1f\xd6\xc3\xf4\xcd\x30\xd4\xca\x74\x5e\xfb\x3b\x0b\xa8\x7f\x0c\x48\xe9\x78\x9c\x80\xe3\x50\x32\x82\x98\x5c\x73\x17\x19\x6d\x63\x1c\xcc\xba\x0b\xc2\xaa\xbb\xbe\x26\xef\x3a\x84\xe9\x86\x82\x71\x7c\x87\x40\x7f\xc4\x5e\x73\xb9\xa9\x3e\xb2\xdf\x99\x43\x11\x3d\xf0\x29\x7f\x66\x7a\xa8\x01\xba\x45\x9a\xf6\x3b\xf3\xc1\x48\xb1\xca\x4e\x83\x76\x6e\x33\xed\x5f\x64\x23\xd4\x3b\x96\x4a\x47\xfb\xfc\x92\x4a\x2d\xb7\x0e\x95\xed\x00\x7c\x7c\x6c\x1a\xc3\x7e\x06\x4f\x11\x19\xbf\xec\x4b\x2c\xb3\x05\x88\x2f\x55\xec\x0a\x5f\x69\x57\x7f\xf8\x9f\x40\x14\xc0\xfc\x64\x81\x1a\x4f\x62\x0d\x1c\xaa\x6a\x92\x3b\xc7\xc8\x49\x72\xef\xfb\x64\x42\x07\x45\x75\x9b\x4f\xe9\x17\x26\xc6\x63\xf5\xbf\x66\xca\x73\x92\xfb\x05\x19\x9b\xeb\x35\xdb\xd0\x74\x94\xcf\xab\x85\x3a\x9d\x5b\xb2\xa4\xf3\x1a\x8e\xda\x16\x09\xb2\x55\x6c\x72\x8d\x39\xd9\x4e\xa9\x3c\x62\x35\xce\xe5\x53\xa0\xec\xa0\xe7\x10\x64\xbe\xc0\x9c\xcc\x8d\xa2\x1f\x66\x0c\x41\xb2\x25\x39\xc1\x8c\x6c\x6c\xc5\xf9\x47\x0c\x92\x21\xa7\x39\xc9\xe7\x9b\x79\xb9\x58\x20\x35\xe4\x78\xac\xb3\xb4\xe7\x08\xe7\xea\x83\x92\xa2\xea\x47\x03\x98\x10\x51\xf5\xe7\xea\x4c\x60\x35\x8d\x8c\x63\x98\x44\x96\x37\x8d\xfb\x18\x6f\x7f\x8c\xcf\xcb\x85\xfa\x8a\x82\x00\x4c\xac\x03\x44\x92\x1f\x6d\xc8\xf7\xbb\x25\x90\xe1\x08\x3e\x2c\xda\x1f\x16\xf2\xc3\x30\x67\xfd\xe1\xbd\x67\xa8\x75\x23\xf6\xa8\xb1\x42\x6e\x57\x75\x18\x52\xd9\x61\xf8\x37\xe0\x75\xff\x36\x4c\x4c\x9e\xa9\x09\x49\xaa\x72\x98\x4c\x74\xac\x3e\xcc\x61\x92\x0c\x61\xc3\x87\xac\x1c\x02\xf0\x86\x09\x2e\x27\x84\xfa\xf8\x33\x1d\x26\xd8\x69\xc2\xc6\xe3\x54\x8e\xf4\x34\x97\x87\x03\x92\x50\x0d\xdb\x45\x03\x38\x9a\x24\xd3\x04\xe1\x36\x6b\x5e\xea\x73\xe0\x8a\x0d\xc5\x03\x69\x3b\x09\xd8\x84\x97\x80\xcd\x46\xd3\x52\x08\xf0\x11\x73\xee\x27\x60\xe3\x8b\xc1\x03\x6b\x72\x6f\xbb\xba\xeb\xc4\xff\xe6\xe8\x6b\xc5\x83\xda\x80\xf0\xb2\x00\xd8\xc0\x2e\xf4\x38\xb1\xb5\x1c\x39\xdb\xdc\x41\x3b\x28\xb8\x3d\x13\x1c\x0a\x94\x58\x5e\x5e\xfa\x4b\x1a\x7b\x68\x1b\x7b\xb4\xb2\x9e\x42\xa2\x70\x93\x6a\x19\x57\xa8\xa1\x36\x79\x72\xa3\xb4\x47\xfb\xaa\x92\xf5\xc4\x63\x81\xbb\xfc\xe8\x41\xc4\x71\xea\x40\x91\x33\x45\xda\xae\x94\xca\x6a\x8f\xe8\x8c\xc1\x43\x27\x74\x96\xec\x2a\x23\xac\x2d\xd9\x4f\x2b\x5e\xa2\x81\xf0\xc5\xf6\x4b\xa5\x1c\xb2\x31\x57\x25\x52\x8c\xb5\x9d\xd5\x2c\xe5\x41\x0e\x9f\x1a\xb2\x9f\x07\x4f\xa0\xe0\x53\xeb\xd9\xbc\x5c\x10\x31\x3d\xbf\x32\xde\x2f\x9e\x25\xbc\xc4\x0c\xa1\x2c\xe5\x5e\x25\x1f\x18\xd3\x2b\x2e\xa0\x06\xf4\x4a\x0c\x95\x0b\xc2\x7c\x0b\x42\x57\x71\xc0\x15\x86\x45\x3e\xd8\xcb\x46\x63\x3f\x2e\x38\x0e\x0e\x6d\x12\xf0\x62\x2e\x6e\x8b\x5c\xe4\x99\xaf\x76\x2e\x95\x93\xa9\xe8\x4b\x50\xc3\xa7\xe7\xcb\x4a\x6e\xb7\x78\xd7\x9d\xdc\x59\xf5\xa7\xd3\xb7\x6f\x52\x8a\xe5\xf2\xb4\x10\x73\xb0\xb5\x90\xad\x95\x47\xc4\x81\xa6\x51\x75\x42\x37\x15\xc9\x6e\x97\x94\x5b\x89\x25\x7e\x26\x92\x5b\x65\x4d\xc4\xac\xc8\x68\x93\xa9\x5f\x69\x37\xf5\xd6\xac\xfd\x20\xa3\xc8\x53\x33\xb2\x22\xe3\x53\x56\xa8\x52\xc7\x1c\x1c\x85\x3a\x34\xba\x2b\x2e\x01\x31\xe1\x9d\xf0\x1e\x93\x6f\xc9\x66\x4d\xb6\xa4\x05\xdc\x91\x23\xc7\x85\x9a\xfc\x14\xac\xd0\xda\xbe\x82\x50\x2c\xc6\x63\xed\x7f\x4c\x03\xf2\xe5\x85\x57\xb7\xd5\xa5\x34\x0c\xda\x83\x04\xcc\x47\xc8\x47\x1d\xa6\x50\xcb\xe8\xc6\x59\xab\xcb\xbc\x2a\xaf\x5b\xda\x8a\x7c\xea\x3a\x00\x06\x1f\xab\xad\x9a\x43\xb2\x48\xb7\xc6\x09\x7c\x74\x12\xba\x7e\xd3\xc6\x72\x94\x96\x4d\xeb\x00\xbf\xed\xf6\xdb\x8e\xbe\xba\xeb\x1c\x1e\x84\x73\x00\xeb\x7e\x4b\x68\x6e\x4b\xe2\x06\x16\x2d\x7e\x72\xd0\xa3\x3d\xb4\x35\xf6\xba\xfa\x1f\x23\xa4\xf7\x4b\x4d\x98\x1e\xa1\x53\x54\xd3\x2d\xfc\x72\x86\x67\x55\x9f\x7a\xad\x95\xea\xc9\x93\x14\x70\x02\xc0\xad\x13\x34\x3d\xcf\x8b\xc2\xaa\x5a\x0f\x54\x7f\x0c\x00\x73\xdc\xe8\x26\x94\x59\xa9\x59\x3a\xa5\x18\xfd\x4d\x3f\x6e\x40\x1b\x35\x5c\xb9\xd2\x93\x07\x43\x3f\x54\x0c\x46\x44\x25\x74\x41\x85\x1a\xa2\x1b\xff\x61\x5f\xa5\xb7\x0d\xb2\x62\x41\x76\xd4\x2c\x2f\xbc\x94\xec\xe8\xfb\x93\x10\xc9\x74\x25\xcc\x3c\xa6\x0e\x8d\x86\x8e\xe8\x7c\x89\x2a\xff\x60\x24\xaa\x23\x9c\x2e\x04\x32\xf0\x21\xc4\x4e\xd0\x76\xd5\x75\x6e\xd8\xa4\x7e\x24\x4a\x39\xa6\x73\xbe\x30\xd6\x9c\xcf\x2d\x5c\x0e\x2b\xab\x22\x0c\x06\x69\x0d\x9e\xf1\x38\x65\x64\x7e\x2b\x98\xd8\xd0\x2c\xd1\x6d\x86\xba\xb4\x6b\x21\xa5\xf0\x4d\x96\x24\x58\x79\x10\x64\xb7\x57\x15\xd0\xeb\x2c\xb9\x0f\x69\x6a\x9a\x66\x11\xb9\x58\x55\x1d\x4d\xa8\x99\x2e\xd9\x0c\x5a\xa4\xb7\x8d\xbc\x76\xa4\x4c\x32\xec\xcc\x4b\x8b\x81\xc7\x0d\xa3\x06\xd1\x79\x06\x25\xd4\xaa\x1e\xa8\x55\x47\x40\xad\xc2\x14\x84\xab\x3d\xa0\x3a\x62\x52\xbe\x6a\x41\x6d\x67\x5b\xb7\xa0\x05\xe5\x41\x3f\x02\xa8\x14\xa0\x7b\xd1\x79\xb7\x33\x39\xac\xd4\xa7\xf4\x1c\xfd\x2f\xa6\xd4\x57\x1e\x45\x1a\x74\xa9\xa4\xaf\x8a\x60\xdd\x0e\x46\x2f\xe7\x4e\x42\xcf\xcd\xd3\xbb\xa1\xbe\x67\xf1\x51\xc0\x94\x82\x89\xce\x62\x16\x49\x66\xfc\x48\xa7\xa7\xb0\x97\x2b\xa4\x16\xd1\xb7\xf3\x24\xf9\x3e\x51\x24\x51\x07\xc2\xb6\xbd\x0e\x02\x45\xa8\x0b\xa5\xd5\x6e\x06\x23\x2b\xcc\x3d\x35\xaa\xce\x81\x67\x7f\x04\x2f\x01\x55\x50\xe8\x4f\x9e\x69\x4d\xf9\xd4\x94\x58\xa0\x80\xb3\xa3\x90\x87\x50\x36\xa6\x34\xda\xda\xc6\x3e\x78\xb3\x20\xdc\x7a\xc0\xb5\xd3\x50\x39\x46\xf3\x88\x84\x52\xd0\xce\x65\x87\x72\xf1\xc7\x1e\xbf\x62\xfd\xbb\x42\x78\x22\x74\x7c\x21\x2d\xbf\x72\x16\xf6\xeb\x90\xd9\x48\xe4\xbe\xee\x81\x43\x76\xab\x4f\x4b\x97\xe9\x45\x35\xd3\xeb\xe1\x7f\xb5\x61\xd9\x8a\x31\xb1\xad\x5d\x4d\x33\xaf\xc6\x42\x7b\x36\x2e\x95\x8c\x1a\xc3\x6b\x1b\x28\xb7\xb4\x80\xea\xe7\xe0\x07\xc1\xa1\xc5\xe7\x69\x34\x6c\x71\x7b\x6d\x33\xb8\xb5\x52\x53\x4c\x43\x2f\x12\xef\x65\x83\x6b\x1a\xd6\x4d\xe9\x34\x21\x9d\x35\x2a\xb6\xe4\x28\x98\x07\x3d\x2c\xc4\x5b\x61\xe7\xf4\x7a\xf8\x13\x8a\x45\xa4\x7b\xdb\x6d\xb0\xf7\xc8\x9d\x36\xcd\xbd\x4d\xb6\x01\xed\xb1\xe4\x65\x9d\xb0\x77\xb7\xe6\xb6\x28\x7f\xdc\xba\xdb\xbd\xdc\xda\x3b\xf1\xf8\x73\x7b\xb7\x75\xde\xd9\x59\xf8\x81\xca\xfb\x6b\xce\x79\x9e\xe1\xa6\xb3\xe5\x86\x7b\xba\x8e\x02\x96\x41\xe5\x71\xdb\x74\xf2\xb8\x31\xf5\x10\x33\xd4\xca\xca\xf2\x99\xfa\x2e\x86\x6c\x95\xf6\x06\x98\x79\xfe\x2a\x62\x81\x79\x8f\xbb\xc8\x03\x24\xc7\xe1\xfd\x8e\x27\x27\x8a\x01\xa9\xc8\xbe\x10\x36\xad\x04\xab\xc6\xe3\x90\xb6\x72\x10\x85\xc7\xe3\xb4\x32\x7e\x5c\x81\x77\xc5\x78\x5c\xb5\xfc\xbd\x54\x42\x8a\xaa\xe5\xea\x15\xc9\x23\xab\x30\x09\x61\xeb\x0c\xba\x67\x09\x0f\x90\x5a\xbe\x2f\x0e\xbf\xaa\x4f\x45\xbe\xa1\xca\xb1\xc6\xa5\xd4\xbc\xa1\x41\xba\x5b\x29\xc1\x5f\x50\xaf\x06\x1a\xdc\xc7\xc0\xf8\x51\xe4\xa1\xa2\xbc\x69\x28\xb8\x4e\x5a\x39\x53\xde\xc2\xe3\xb1\x0e\x72\x37\xeb\x73\x74\x63\x76\x96\x0a\xed\xd9\x6c\xf3\xd6\x52\x15\x3c\xfb\x91\x6a\x0d\x8d\xb2\x58\x3a\xb9\x03\x36\xe2\x9c\xe2\x6b\x8a\x9f\xdb\x36\x2a\x77\x6d\x91\xb6\x14\xa5\x11\xbd\x43\x8b\x63\x6e\x55\x4c\x6c\x95\x4e\x6a\xd0\x94\xd3\x5c\x65\x97\x42\xf8\x4b\xf7\x73\x8a\xc7\x9e\x9a\x4c\x8a\xdd\xef\x8d\xbc\x82\x37\x61\x63\xf4\xfd\x49\x6b\xfc\xd3\x76\x3a\x09\xc5\x71\xcf\xbe\xd0\xec\x39\x1d\x9c\xc7\x93\x4d\x1c\x09\x00\x43\xf4\x75\x59\x12\x97\xb4\xcd\xc5\xbc\xd3\x20\xc8\xfd\x0e\x70\xf2\x6d\x3a\xc1\x8a\xb2\xe7\x72\x9b\x7e\xa3\x69\xbf\xa1\xd7\x33\x6a\xe3\xe2\xef\x36\x5d\xb0\x62\xb5\xa7\x0a\x88\xf5\x96\x46\xeb\xd8\x55\xf8\xf6\xee\x55\xe9\xe2\x52\x9f\x9d\x20\xb0\xa4\xef\xe9\xdf\xb7\xb4\x16\x40\x92\x1b\xac\x85\xec\x37\x54\x5c\x57\xfc\x93\x4e\xc5\xdc\xf9\x68\x9f\x61\xed\x67\xc5\xd9\x37\x58\xa7\x83\x90\xe0\xb7\x2e\x02\xee\x07\x2d\xe4\xdf\xdd\xe4\x0b\xd9\xbe\x3d\x99\x6a\xef\x90\x24\x52\x22\xd1\x61\x78\xb4\x07\x6a\x10\x36\x79\x1a\xd4\x2c\x34\xb6\x64\xe7\xf2\xc7\x1b\x7a\x9d\x5d\xcb\x3f\x60\xfa\xd9\x29\xc5\xe7\x97\x39\xff\xf4\x2a\x80\xcf\xe3\x1a\x34\x1e\x59\x6f\x5c\xec\x41\xe8\x9a\x4c\x78\x11\x00\x83\x61\xda\xe6\x2f\x50\x53\xb4\x5a\x1a\xcf\xa1\x42\xfe\x0c\xf2\x0c\xe8\x68\xef\x76\x42\x02\x50\x12\xa9\x28\x04\xe5\x4e\x08\xe7\xbe\x0d\xde\xa8\xb1\x11\x0b\x72\x61\xd8\x04\xa4\xeb\xe5\x71\x7a\xc1\x6a\x41\xf9\x4b\xb0\xbc\xf0\xda\xef\x49\xe3\xc2\x5d\x83\x7b\xdb\x18\x24\x89\xa3\xa7\xa9\x5c\xcd\xec\x89\x63\xab\x94\x05\xd2\x1c\x27\xde\xef\x14\x21\x97\xaa\x80\x40\xe9\x9a\x30\x5f\x41\x15\xcd\x57\x20\x94\xa2\x07\xf2\x15\x54\x73\xf9\xdf\xc2\xf3\x39\x0a\x88\x62\x4c\x74\xcb\x5a\x8e\x13\xf1\x95\x68\xb5\x71\x47\xcb\x93\x22\x2f\x99\xae\x36\xf6\x04\xde\x8d\xb6\xfc\x8e\x99\x32\x93\x53\x86\xd1\xf6\x29\x2a\xe6\x6c\x81\xc5\x5c\xfe\x07\x36\xf9\x3d\x6d\x5b\xb5\xfd\xda\x37\x44\xa8\x07\x8b\xac\xa0\x43\x11\x5a\x9d\xad\x56\xaa\xa3\x62\xc4\xb6\xdc\x72\x6f\x21\xb4\x36\xe9\x6c\x55\xb0\xf6\x0a\x36\x43\x0e\x3e\x50\xa8\xf7\x95\x41\x8c\xd5\x19\x6f\xd5\x83\x4e\xee\x15\x74\x95\x6f\x37\x02\xca\x84\x1d\x33\x03\x97\xb7\xd5\x4d\x85\x83\x0b\x99\x44\x9b\x1b\xb5\xce\x82\x01\xf7\x63\x7f\xfc\x04\x3a\x4e\xfb\x53\x39\x02\xd8\x9f\x8a\x20\xa9\x9f\xc1\x51\xf2\x1f\x79\x50\x74\x66\x7b\x03\xd5\xb2\xc8\xf6\xf8\x28\xb6\xc0\x20\x8f\xa3\xda\x5c\xdf\x60\x7f\xec\x8e\xf8\x7d\x60\x0f\xfc\x00\xfe\xee\x0d\x15\x76\xf6\xdb\xa6\xd0\x17\xd8\xd0\x48\x45\x37\x7f\x06\x61\x2f\xed\xc0\x90\x6b\x4d\xaa\x1f\xac\xdc\xf9\x7c\x37\x9e\xb5\x35\xa1\x56\xda\x6a\xdc\xd1\x33\xf7\xe0\xd6\xe0\x23\x4d\x23\x96\xdd\x5e\xdb\x26\x07\xb3\x26\x16\xf1\xdb\x53\x85\x6b\x76\x9c\xe3\x8e\xac\xb3\x1d\x75\xaa\xeb\xba\x8a\x1c\xda\x9b\x98\x73\x49\x0f\x13\xa1\xd5\x1f\x7d\xf7\x24\x00\x32\x3c\x37\xc7\x2e\xa5\x75\xd8\xe4\x09\x57\x2a\xab\xe7\x92\x13\xaa\x59\x55\x1e\x37\x92\x99\x63\xa7\x76\x53\xab\x32\x62\xb4\x64\x46\xdd\xa9\x3e\x18\x3d\x47\x79\xac\x94\x86\x9b\x54\x03\x9b\x1a\xa9\xfb\x68\xaa\xb0\x79\x9f\x8c\x55\xdd\x70\xc6\x30\x6a\xd4\x84\x3a\xe1\x0d\x84\x57\xde\x86\xcf\xb2\x76\xa3\x06\xe1\xe3\xd6\xa1\x4b\x64\xf5\x97\x70\xe4\x6a\x25\xda\x7a\xdf\x03\x3b\xed\xaa\x96\x98\xb7\x5e\x81\x3d\x3f\x7d\xe9\xfe\xca\x73\xf7\xa4\x24\x4c\x1e\xf8\xb5\xe7\xc2\x12\xe2\x6c\x31\x10\x3e\xbb\x5b\xea\x4c\xf3\xeb\xbc\x4e\xa9\x75\x73\xdd\xc3\x15\x37\x38\x17\x82\xfb\x38\xd4\x60\x2b\x2d\x1f\x4b\x02\x7d\x35\x68\x18\x48\x81\x1a\xac\x55\x95\x5f\x37\x96\x8b\x9a\x91\x47\xa8\xa0\x1f\xb7\x17\xaf\xca\x55\xd5\xad\xe4\x39\x4f\x58\x91\x2c\xb0\x20\xb7\x8d\xf2\x43\x52\x56\xc2\x78\xa5\x7f\xbf\x30\x39\x35\x2e\x22\x8d\x29\xe2\x32\x57\x1e\xd8\x89\x3b\xf7\x09\xbe\x72\xf4\x8f\x62\xfa\xe5\x2a\x2f\x8b\x6c\x74\xd2\x2c\x02\x95\x5b\x27\x9c\xde\xbb\x82\x5c\xe8\xe5\x9c\x81\xfe\xc1\xa4\x84\x52\xa5\xc5\x53\xef\x85\xe4\x8e\x4b\x35\x2b\x35\x13\x36\x95\xff\xf9\x73\xa8\xbc\x39\x20\xa4\xbd\xa9\x53\x95\xbd\xc5\x94\xc7\x0b\xc7\x48\x5e\x40\x1a\x0d\x7f\x90\xb9\x17\x68\x99\x74\xe5\x8f\x44\x4a\x66\x4a\x4c\x48\x7c\x99\xd2\x39\xd4\x19\xd1\x0d\x5b\x61\x67\xd1\x20\x08\x9d\x01\x5a\x0e\x1b\x75\xcb\xca\xe5\x66\x5b\xd0\xb7\x62\x4d\xb9\x77\x8b\x8c\x4e\xf0\x05\xaf\xb6\x57\x75\x56\xca\xb5\x48\x52\xf6\xd9\xd3\x2a\x64\xbc\x69\x1a\x1c\xf5\x6f\xed\xea\x2a\x7b\x7c\x50\x1b\xdc\xde\x90\x18\xa3\xe7\x15\x5d\xea\xcb\x87\xe0\x6b\x98\x5e\x54\x3c\x86\xc9\x2d\x79\xd7\x1b\x14\x27\x81\xcb\xc9\x93\x9b\x37\xf9\x25\xd5\x56\x40\x28\x3f\x61\x43\x52\x7a\x4f\x88\x3f\x45\x3f\x82\x05\xf7\x32\x75\xc8\xc0\xce\xf7\x7c\xbe\x23\xe0\xf6\xb2\xc7\x6d\xa8\xb5\x02\x73\x1a\x34\x88\x67\x4b\x7e\xeb\xe5\x07\xc5\x89\x2a\x40\x71\xeb\x67\x61\x96\x42\x5d\x5c\xbb\xa9\x25\xa0\xe9\xb9\xec\xd5\xe8\xd3\xfa\x98\x92\x4e\xf7\xb6\x3e\x5b\xd3\x64\xf0\x48\x34\xe9\xc8\xe3\xd7\xa1\x4d\xb3\xbe\x5f\xc1\x7a\xd4\xbd\xda\x38\xf5\xe8\xa7\x40\x7f\xd7\x1c\x03\x19\x56\x24\xf8\x31\x45\xf8\x2d\x9d\x72\x5a\x5d\xd1\x12\x8c\x1f\xe9\x2d\xab\x95\x4c\x3b\x3a\xf1\x33\x3e\x80\x17\xc4\xcd\x15\x6d\x65\x4d\xca\x62\x16\xa9\xb6\x77\xec\x3e\xec\xf4\x12\xc6\x8b\x4e\x98\xbe\x45\xdd\xd7\xf9\xd5\x1e\x61\x5a\x0f\x11\x2b\xe7\x81\xe2\xc8\xdf\x3f\x57\xf7\xc1\x44\x55\xce\x9b\xd3\x05\xf2\x22\x0b\x82\x90\xc7\x15\x2b\x8b\x57\xc1\x69\x41\x7e\x14\x02\x29\x71\xd9\xe0\x56\xab\xe8\x2c\x60\xb8\x08\x78\xd5\x90\xca\x9c\xe7\xab\x5d\x61\x12\xd8\xd4\x59\x55\x96\x9b\xae\xc7\xd6\x96\xd4\x26\x88\xdb\x2b\x34\xb0\x35\x07\xbc\xad\xc8\x75\x2f\x4a\xd7\x08\x33\x92\x56\x1e\x94\xf6\x12\x9b\x12\x21\xb8\x5f\x70\x4e\x2a\xfb\x65\xb0\x71\xeb\x2a\xa5\xa6\xbc\xdf\x6b\x5b\x00\x41\xf9\xf2\x5a\x3c\xa6\xad\xf2\x7b\x84\x81\xa9\x38\xdf\x33\x03\xb5\x4f\xa3\xdc\x2c\xa7\xd2\xc1\xe2\xb9\xda\x55\x3f\x51\xfe\x96\x00\xd3\x33\x65\xb5\x62\x7e\x6a\x34\xab\xa7\x2b\xb6\x11\x94\x77\x0a\xb3\x09\xc2\xbb\x30\x85\x5b\x12\xd9\xa5\x69\x85\xaf\x30\xc0\xb2\x0c\xa4\x7d\xb2\xdb\x95\xc4\xfb\xd9\xe8\xcc\x27\x7a\xaa\xdb\xf1\x58\xdd\xab\x9a\x71\xaa\xf0\x16\x61\x31\x05\x5e\x6a\x29\x4f\xe3\x78\x4c\x53\xff\x37\xc0\xa6\x42\xb8\x6a\x5c\x3a\x35\xb9\xfa\x13\xc8\xf1\xa8\x2b\xef\xb7\x11\x65\x49\x36\x9d\x45\x0a\x63\x1d\xee\x2e\x52\x44\x17\x39\xa4\xe0\xe1\x67\xd7\x01\x0e\xb1\x4b\xe7\x77\xb1\x21\x4b\x84\x4b\xb2\x99\x9f\x2c\x14\x2b\xc1\xd4\xdf\x1a\x1d\xe0\x6f\x3d\xa2\x56\xfb\x28\x47\x3a\x8e\x81\x77\x28\xb1\x6c\x98\x31\x9b\x0c\x2c\x6f\x9a\x56\xe6\xb4\xd3\xe0\xb7\xdc\xd0\xc3\x0a\xb6\x5b\xc3\x19\xce\x17\x1e\xcb\x39\x5f\x34\x1d\xa6\xea\xa9\x1e\xc3\x82\xa1\xc5\xc9\xb5\xbc\x41\xc7\x63\x3a\x57\x46\x9e\x85\x63\xee\x30\x6d\x10\xd6\xe5\x09\xcf\x6e\xae\x68\x9d\xbd\xc5\x91\xc3\x92\x7d\x0a\x9f\x2a\xba\x95\x3d\xc6\x2b\x46\x37\xc5\xe1\x45\x49\xe6\xfd\x75\x7e\xf5\x6b\x97\x30\xa3\xba\x66\x88\x5a\x07\xca\xb8\x8e\x20\x84\x4b\x56\x4a\x40\xea\x75\x62\xdd\x4f\x13\xbd\x46\x5f\x59\x77\x80\xff\x39\xee\x2a\xe8\xb8\xec\x42\x02\x28\x53\x70\x13\x6a\xed\x34\x3e\xaf\xa5\xc0\xdb\xfa\x94\x13\x78\xa2\x1f\xd5\x5b\x02\x15\xe8\x4f\x1e\x96\x4e\xd5\x67\xdd\xa0\x19\xe1\xf3\x72\x31\xb0\x9f\x05\xdf\xd2\x82\x0a\xca\x2f\x59\x19\x78\x28\x47\xbe\x6e\x72\x52\x42\x9d\x06\xf9\xbf\xc4\x7b\x1d\x8b\xee\x31\x54\xdc\xbb\x22\xd8\x2c\x34\x1a\x2a\xde\xbc\xf5\xb0\x9c\x25\x55\x49\xcf\xaa\xb7\x25\x4d\xb2\xe4\x32\x2f\x6f\xcc\xdf\xd1\x66\x20\xc9\x98\x76\xfa\x47\xb4\xe1\x9b\xca\x1b\x10\x7e\x28\x31\x2d\x6e\x18\xf8\x96\x38\xe8\xa1\x58\xca\x81\x56\x10\x81\x2d\x2e\xa2\x08\x8e\x81\xfa\x6b\x55\xf1\xcb\x40\x51\xf3\xb5\x53\xec\x15\xd6\xe0\x8a\x72\x78\x6f\x78\x90\x28\xca\xf7\x71\xae\x6d\xd4\x73\x20\xbd\x1b\x9a\x9f\x45\x96\x7c\xe0\x53\x51\x28\x1d\xff\x55\xa3\xf4\xe9\xf2\xa4\xca\x5d\x27\x33\xf1\x18\xee\x8b\xf6\x66\x4d\x90\x61\x96\xcf\x28\x49\x9e\x33\x29\x88\xa9\x0a\xe2\xc3\x8a\x0f\xf3\xa1\x71\x1f\x19\xb2\x7a\xc8\xff\xff\xec\xbd\x6b\x7b\xdb\x36\xb6\x28\xfc\x5d\xbf\x42\xe2\xbb\x8f\x4a\x1c\xc3\xaa\xdd\x76\x5f\x46\x29\xeb\x71\x93\x74\x9a\x99\x66\xd2\x93\xa4\xd3\xe9\xd1\xe8\x78\xd3\x12\x6c\xa1\xa1\x41\x95\x84\xec\xb8\x16\xff\xfb\xfb\x60\xe1\x0e\x82\x94\x9c\x38\x6d\x67\x76\xf7\xb3\xa7\xb1\x88\x3b\xb0\xb0\x6e\x58\x17\xf2\xd3\x86\x56\x64\x39\xcc\x6b\x51\x45\xab\x09\x26\x09\x7e\xbe\x23\x7b\xd8\xec\x6c\x1e\x64\xc7\x80\x2c\x22\xde\xa7\x1b\x5a\x14\x52\xf1\x6b\x9c\xed\xea\x68\x5a\x10\x53\x2c\x6b\xd7\xb1\x9e\x49\x5f\xa7\x61\x0e\x86\x56\x87\xb3\x79\x5f\x02\xb2\x33\x41\x99\x14\xbb\xdb\xed\x81\xaf\x6c\x75\x9c\xba\x3a\xa5\x8e\x8e\xdb\x17\x0c\xdb\x1f\x47\x8f\x5e\xa4\x69\xff\xa4\x7b\x4b\x05\x2b\x86\x94\xf4\xaf\x7a\xc7\xa3\x23\x93\xf8\x30\xb6\x4d\x5a\xed\x19\xdf\xc2\xa3\x81\x13\x2d\x4c\x2f\xd6\x86\xa7\x1c\x94\x93\x1f\x4b\xea\xa9\xc7\x4a\x27\x64\x65\x7d\xcb\x16\x9e\xdf\x48\x82\x29\xa6\x93\xb3\x8b\x62\x53\xaf\xbe\x8d\x2f\x41\x80\x7a\x63\x54\xc2\x1d\xe6\x84\xae\x2b\x94\x8e\x3c\x71\xa6\x42\x4f\xf8\x19\xc5\xd8\x78\xcc\x22\x7d\xa5\xf2\x8c\xfa\x26\x12\xc6\x6c\x3f\xde\xb1\x8d\xae\xdf\x4f\xc7\xf1\x0c\x76\xc1\x63\x3f\x38\x3b\x4f\x64\xc1\xa2\xb5\x6b\x94\x4d\x81\x94\x7d\xa6\xf7\x87\xcc\xaa\x39\xa6\xe2\x9f\x83\x63\x95\x37\x14\x97\xf0\xf3\x13\xc1\xb6\x8b\x3f\x3e\x9d\x0b\x19\x45\xef\x1c\x88\x2d\x68\x50\x8f\xc7\x75\xcc\x43\x3a\xcd\x51\x03\x27\x64\x31\xa7\x17\x42\x7d\xe7\x5d\xe9\x68\xa7\xee\x4d\x77\x6c\xf6\x9d\x1d\xf7\x84\x75\x97\x7d\x5b\x32\xbf\x97\xd7\x8d\xee\xf8\xca\xde\x6c\x8d\x1e\xde\xa8\xfd\xef\x1d\x72\xc6\xe7\xc8\xc4\xc5\xfb\x0b\xb9\x75\x8f\x4c\x65\x13\xf4\x63\xcf\xfd\x2a\x13\xd3\x01\xfb\xda\x93\xdb\xe1\x15\xee\xe4\x7d\x1b\x3d\x26\x92\x35\x08\x93\xf6\xbd\x26\xda\x4a\xbc\xff\x9a\xd2\xf1\x98\xc6\x35\x51\xcc\x99\x4a\x97\xa7\xfe\xbe\x33\x51\x13\x88\x23\x66\xd3\x8d\x1d\xaf\xdb\x29\xff\x03\xad\x3d\xf4\xe2\x77\x27\x13\xf7\x23\xf7\x69\xc8\xde\x03\x39\x9d\xa9\x41\xac\xa5\x67\x2c\x78\xda\xae\x75\x46\xae\xa3\xd7\xa1\xea\x67\x57\x62\x48\xb7\xbd\xeb\xe1\x64\x5b\x77\x64\x7a\xd9\x73\x9a\xfb\x50\x0c\x93\x65\x47\x50\x0e\x6f\x38\x49\x34\x96\xb4\x5e\x94\x8c\x91\x45\x3b\x9d\xc6\xc3\x4d\x02\x06\x8f\x46\x9b\x6a\xa7\xc3\x7b\x4c\xdc\xd7\xed\x51\x3a\x22\xe3\xf1\x88\x3b\xa6\x81\x2f\x1d\xcb\x4c\x5c\x3a\x8f\x1e\xac\xac\xae\x72\x19\xba\xba\x5e\x97\xac\x36\xba\x1d\x5c\x3a\xcd\xbf\x25\x41\x08\x3d\xc7\x5a\xa0\x95\x83\x16\x52\xe6\x65\xa1\x41\x41\x65\xf2\x88\xca\xf2\x3b\xf2\x96\x57\xf9\x82\x4f\xc3\xbd\x33\x8f\x6b\x8d\x67\xfc\xf8\x63\xb0\x02\x31\x11\xad\x71\x3a\x4d\x69\x97\x3f\x23\x09\x9f\x4e\x4b\xa5\xd3\x84\x64\x01\x82\xe4\x59\x7d\x26\xc2\x9b\x8c\x4c\x2e\x28\x5b\xca\x14\xea\xb8\xc6\x0c\xe7\x08\x17\x32\xc8\xba\x34\xf4\x19\x9e\xca\xd7\xc4\xff\x4f\xd7\x1b\x96\x17\xc3\x8f\x20\xd9\xe8\x47\x89\x4d\x51\x92\x65\xd9\xa6\x9d\xbf\x54\xbd\x44\x9a\x31\x86\x72\x96\x64\x39\xdc\x30\xa9\x07\x5e\x62\xb8\x41\xc3\x9b\xbc\x1e\x5e\x93\xea\x76\x58\xd0\x37\xa4\xb8\x1d\xe6\xc3\x2b\x5a\xf3\xfc\x0d\x31\x66\x9a\xe9\x26\xfb\x21\xdd\x60\x8e\x0b\x14\xbe\x50\x1a\x64\xf0\x92\xa4\xdf\x8a\x13\x05\xb3\x5d\xb9\x1e\x20\xfe\x89\x9e\x80\x63\xf4\x39\x39\x03\xa6\x91\xa2\x46\xd5\x11\x6b\x7e\x2a\x0f\x69\xb8\xce\x6f\x6d\x6c\xf9\xca\x81\x8c\x27\x24\x40\x40\x4a\xdd\x99\x96\x19\x87\x68\xb9\xd8\xf1\x0b\xe6\xce\xf3\xd7\x84\x2e\x71\x9e\x71\xd7\x5b\x75\x18\xe2\x34\x51\x9d\x4c\xe8\xd2\x18\xf9\x42\x65\xd2\x72\xf1\x25\x6d\x17\xdf\x81\x84\x8f\xa0\x04\xd7\x11\xbc\xd9\x31\xb8\xde\x43\x22\x9f\x52\xbe\xaf\xf2\xf5\x9a\x54\xb8\xcc\xa4\x3c\x0c\x93\xb7\x96\xf8\x75\x46\x3b\x78\x8b\x34\x57\x01\x37\x6b\x1d\x85\x99\xf6\x91\x66\x86\x66\xf5\x1c\xf4\x7d\xa0\x69\xd0\x8e\xbc\x96\x85\x98\xd6\x52\x0d\xb7\x69\x9a\xc6\x12\xac\xb4\xc2\x1c\xd4\x8e\xde\x48\x46\xad\xf1\x17\x72\x8b\x8b\xac\x96\x1a\x8f\x45\x96\xcf\x36\xf3\xf1\x58\xfc\x17\xce\x68\xe0\xa5\xa1\x19\x8f\x0d\x08\x2f\xb6\xdb\x54\xd4\x82\x06\xdb\xed\x5d\x83\x4d\x9b\x38\x2b\x0e\x51\x17\x20\x81\x6e\xe5\x6c\x4e\x9e\xdd\xd1\xe5\x94\xca\x88\xbf\x65\xe3\x0d\xc7\x4f\x04\xb2\x70\xa4\x96\x1c\x4d\xe5\x97\xbb\x06\x7b\xd9\x6b\xc4\x5d\xb4\x89\x5f\x9b\x74\x81\x0b\xcc\x11\x6a\x1a\x40\x59\x44\x08\x3a\x62\x98\x52\x0e\x93\x37\x0d\xf6\x15\xc9\x25\x3a\x29\x01\x4d\xe4\x68\x9a\xa7\x25\x42\x03\xf5\xe6\x2b\xbd\xa4\xef\x94\xf3\xaf\x6c\x5e\x75\x26\x87\x48\x69\x76\xd7\x60\x3a\x83\x74\x9f\xf3\x4c\x36\xae\xc1\xdd\xac\x71\x2e\xc6\x5f\xc3\x8b\x11\xa0\x9a\x52\x71\xdb\xa7\x45\x21\xcd\xf3\xca\x49\x60\x1a\x92\x32\x81\xa0\xda\x89\x1b\x8c\x99\x79\xa7\x61\x82\x44\x62\xa7\x52\x41\x26\x6f\x73\x8e\x1a\x83\x38\xea\xec\x87\xb4\xc6\x1c\x77\x61\xb5\xd3\xa2\x90\x17\x9d\x76\x61\x96\x3c\xc4\x2c\xd4\xc3\x2c\xa7\x45\xd1\x46\x2c\x39\x12\xe2\x96\xb1\xf9\x52\xeb\x2e\x77\x60\x1b\x3d\x9f\x7f\xbb\x33\xe7\xd1\x24\xce\x36\x3f\x73\xd2\xa2\x47\x33\xa8\x6a\x85\xa3\xf4\xda\x83\x98\x11\x42\x1c\x32\xb3\xb3\x5d\x7d\xf3\x9b\xcf\x29\xfb\x55\x6f\x4e\x57\x27\xaa\x43\x05\x06\xa1\x77\x26\x06\x41\xad\x40\x2a\x92\xc3\x51\x06\x2c\x57\x5a\x14\x15\x4e\x82\xf8\xbe\xa9\x3a\xa9\xd3\xed\x9a\x38\xed\x05\x8a\xd2\x39\x57\x7c\x0b\x9b\xac\x0a\x3e\x28\x3f\x25\x69\x01\x20\x10\x84\xfc\xcb\x24\x8c\x64\xd6\x80\xdc\x68\x61\x26\x76\xce\x71\x0f\x1b\x23\x8b\x9b\x8a\x27\xc1\xef\x69\x1a\xae\xbe\xb5\xf0\xc9\x99\xa0\xa9\xd6\xae\x2a\xdc\x2f\x14\x7a\xc5\xed\x74\x51\x83\x6d\x32\x9e\x70\xb0\x67\xed\x51\x61\x7b\xa1\x2b\x81\xbf\xe6\x68\x3c\xfe\xa6\xe5\x65\xc3\xe4\x47\x81\xd6\x04\xb3\x87\x7f\xd6\x26\xf0\xd0\x05\x78\xb8\xbc\x97\x19\xbc\xb4\x16\xf4\x1c\x5c\xf4\x93\xbe\xf8\x25\xd5\x04\x26\xfd\x85\x4a\x41\xe8\xfd\x02\x40\x57\x5f\xe0\x52\xbb\x49\x2b\xa4\x76\xce\xfe\xa9\xd4\x0e\x72\x5e\x1b\x55\x5b\x61\x34\x95\xd7\xa3\x22\xeb\x22\x5f\x10\x7f\x19\x01\x07\xf5\x1a\xd2\xbc\xd7\x9b\x82\x0b\xec\x90\x0f\x6b\x52\x5d\x93\x6a\xf8\xd3\x46\xf0\x4a\xe9\x45\x59\x0d\xf3\xa2\x18\xb6\x7d\x36\x87\x62\x5b\x6b\x34\xa4\xf5\x90\x5e\x5d\x6d\xe0\xe6\x4d\x86\xaf\xcb\xe1\x55\xb9\xa4\x17\xb7\x43\xb5\xea\x1a\x0f\x37\x35\x19\xf2\x52\x92\x0c\x94\x08\x00\x00\xeb\xf3\xc0\x08\xdf\xaa\x55\xbb\x2c\xef\x4d\x8d\x13\xbb\x09\x9d\x3e\x90\x2a\xd0\x80\xab\xc1\x96\x96\x6f\xa7\xfc\xb1\x8a\x79\xdd\x7e\xfb\x0c\x55\xbd\xc6\x91\x67\xa2\xdb\x3a\x5a\x01\x88\x4b\xe7\x38\xdf\x36\x58\xc6\x17\x68\x9b\x50\x69\x2d\x64\x3b\x7e\x96\x3e\xe4\x04\xa1\x76\x0c\x6f\x7b\x9c\x03\x0b\x5a\x4e\x1b\xac\xbd\xb5\xb4\x11\xb2\x1c\x3f\x8d\x66\xf4\x21\x71\x18\xc1\xd1\xbc\x9c\xed\x74\x9d\x3a\x89\x67\x7b\x0e\xc7\x96\x0e\xc6\x27\x2f\x50\x5a\x83\xcf\xda\x9b\xd3\xce\x6f\x62\x88\xac\x77\x96\xf8\x4e\x99\x36\x8e\x8e\x1a\xd4\x60\x20\x7e\x7e\xee\x17\xef\x28\xbb\x0f\x51\x34\x94\x74\x41\x06\xdb\x51\x61\x12\xde\xa9\x2f\xd9\xd4\xed\xcd\x37\xf7\x0c\x9c\x1d\x80\x1a\x3b\x91\x27\xdc\xc4\x62\x2e\x63\x14\xe3\x4e\x72\xbd\x23\x94\x5d\x97\x6f\x48\x9a\x88\xb6\x82\x88\x74\xb3\x2b\x2e\x0f\xd0\x1a\x55\x55\x72\xbe\x5b\xde\x22\x6f\x19\x72\x42\xea\xae\xb3\x25\xad\xeb\x72\x41\x73\x0e\xa1\x29\x5e\xdc\x30\xd9\xba\xee\x00\x76\x6e\x3d\x65\xcc\x8e\x75\xe7\xb4\xe3\x81\x6f\xea\x40\x26\x0f\x01\xb3\x38\xb0\xb8\x13\xe0\xc3\xb4\x7b\x88\x98\x80\x0a\x08\xd3\xc2\xcf\x57\x2a\x50\x8c\xad\xed\xac\x52\x87\x8b\xb9\xa1\x85\x4e\x5a\xd4\x46\xf0\xd1\x71\x0c\x19\xeb\xda\x86\xd4\xc9\x02\x19\x80\x8a\x72\x72\x0c\x8b\xb5\x27\xdd\x91\xa1\x90\x7d\xa6\xa4\x9d\x36\xce\x7e\x6c\xda\xaf\x54\xbe\x39\xbb\xfd\x82\xa7\x48\x90\x34\xf2\x74\x09\x73\xe4\x1e\x76\xc3\xfa\xbe\x9a\x00\x78\x66\x40\xf8\x6b\x92\xfd\x4c\x34\x25\x8d\xd3\xd1\x08\x95\xf4\xa1\x65\xbb\xd5\x8a\x08\xb4\xc7\x06\xc9\x1a\x40\xb2\x32\xfb\xa7\x4b\x20\x0b\xca\xde\x28\x6e\x05\xfe\x94\x65\x0f\x41\x21\x21\x0c\x5c\x48\x1c\x03\xb2\x98\xa0\x28\x02\x94\x17\x26\xdc\x77\x40\x85\xe2\x7a\xb7\x4a\x60\xc4\xc4\x71\x0e\x3c\x83\x2f\x2d\x1f\x76\xac\x00\xfd\xac\x26\xbc\x13\xb9\xf9\x0e\x39\xf6\xb0\x6b\xc2\x2d\x56\x33\x3c\x8d\x1f\xda\x47\xe7\x6d\x39\xc2\x96\x14\x4c\x47\xc7\x32\x87\xcc\x33\xc1\x78\x89\xbf\x10\x86\xad\x96\x1f\xe0\x4f\x13\xc3\x4b\xdf\xd3\xb3\x5c\xdf\xa7\xef\x29\x5f\xb9\x77\x55\x85\x06\x30\x31\x87\x20\x9c\x8f\x18\x37\x41\x3a\x7a\x60\xb5\x61\x93\x92\x2d\x88\x79\x09\x06\xab\xf1\x04\xdb\x9a\x02\x1a\xbf\x24\xd1\x24\x70\xf8\xbb\x1d\xef\xae\x8a\xdf\x22\x4e\xa0\x82\x20\x56\xfc\x71\x2b\x61\x98\x7d\x1e\x2d\xe8\xb5\x1f\xe3\xaa\x3b\x75\xbf\x7a\xb9\xea\xa9\xa1\x78\xff\x6f\xcb\xf5\x06\x4c\x3a\xbc\x8e\xfb\x1f\x5c\x83\x88\x59\xed\xa8\x1f\x9e\x79\xa5\x8d\xac\x45\x1c\xfd\xb5\xc9\x1d\x79\xcf\xd6\xf1\xc2\x58\x94\x2e\x0b\xbc\x60\xd4\x46\x76\xa5\xf8\x07\x76\xa6\xbf\x8a\x7e\x66\xad\xfc\xd7\x43\x30\xe0\x4a\x2b\x08\xd4\x31\xe3\x73\xf7\x6d\x17\x8d\xc7\x5f\x12\xe7\xa1\x35\x87\x59\xd6\x2a\x37\xa0\xec\x05\xde\x36\xe5\x5b\xaa\xf7\xce\xe9\xdf\xb2\xaf\xca\xca\x98\xfa\x65\x5d\xe6\x3a\xb3\xb9\x32\xc9\xe1\x11\x93\x1c\x3e\x63\xf3\x01\xdd\xbd\xc6\x63\x4c\x27\xb4\xfe\x9a\x2e\x97\x84\x59\x95\xb6\x8e\x6d\x65\x22\x7f\x52\xe9\x6a\xae\x9f\x9c\x43\xe0\x9c\x91\xf9\xa0\x54\xf6\xb6\x12\x4b\x7d\xe3\xd7\x48\x4b\x08\x20\xed\x44\x69\x75\x0f\xd1\xbe\xa0\x1e\x3d\xe2\xf6\xbd\x94\x8b\xe5\xd8\xf5\x42\x5c\x02\x96\x55\x9e\xdc\x26\xb0\x71\xcd\x95\x1b\x22\x73\xdd\x10\xd9\x8c\xce\x27\x51\x06\x2d\x85\x30\x49\x61\x3f\xda\x15\xb0\x49\x2b\xe7\x19\xba\x2b\xd2\xad\x86\x06\x33\xf5\x21\xd5\xdc\x6b\xdf\x75\x24\xc8\x01\x83\x9d\x47\x9f\x72\x2c\x16\x0d\xd3\x89\x6e\x6b\x3c\xda\x7f\x2f\xc0\xcc\xe6\x6a\xb3\xb8\xbb\x59\xd6\x03\x62\x0e\x7a\xaf\x6e\x90\xc0\x75\x56\xfa\x3b\x37\xc8\xb7\x5b\x93\x84\x3f\x45\xdb\xad\xf6\x71\x81\xa8\x8c\x00\x3e\x25\xc2\x10\x84\x29\x25\x08\xe1\x1c\x74\x2d\xf6\xbb\x61\xd3\x50\xe3\x02\x08\x99\x44\xf8\xf4\xb4\x42\x03\xe6\x57\x8a\x9e\x30\x33\x9a\x35\xdd\xe5\x76\xab\xdb\xa1\x2f\x8e\x1a\xed\x54\x38\x39\xab\x6f\xd9\xa2\x7f\x57\x23\x48\x40\x42\xa2\xaf\xcb\xac\x10\xa6\xd9\x88\x6d\xb7\xa0\xed\xd1\x3e\x43\x65\x16\xe4\xe0\x00\x44\xf5\x3c\x5f\x83\xc4\x89\x3c\x0b\xdd\xd2\x30\x75\x28\xcb\xbc\xa8\x9b\xe6\xbb\xcc\x16\xb7\xdd\x8e\x72\x74\xc7\x8c\x0f\xf7\xde\xd0\x54\x05\x89\xcb\xec\x72\xac\x5a\x4e\xab\x64\xae\x69\x4d\xcf\x8b\x60\x63\xbf\x04\xc7\x6f\x31\xf1\x8d\x80\xa4\x22\x3b\x7a\x54\x7c\xae\x95\x54\x8f\x0a\x0d\x49\x8b\xac\x9e\x15\x73\x7c\x91\x2d\x02\x50\x19\x09\xec\x79\x61\x7c\xa0\xd2\x0b\x05\x15\x78\x23\x01\x62\x81\x50\xb3\x31\xd6\xb1\x71\x10\xd8\x28\xf4\xe9\xea\x2d\x3b\x73\x84\xc4\x30\x15\xf7\xa2\x07\xe3\x96\x34\x8a\x05\xb3\xe1\x35\x0b\xed\x1c\x76\x8d\x00\x81\xd0\x15\xd3\xd9\x86\x2f\x71\xad\x9d\x24\x54\xd5\x1e\x1b\x4e\xd0\x40\x8d\xe7\xc6\x1f\xd2\x8c\x8e\x49\xf2\x1e\x99\x4b\xc6\x9d\x14\x15\xbc\x77\x94\x2c\x8e\x93\x7b\x00\x98\x20\x15\x59\xaa\xc6\xfb\xd0\x23\x38\xfd\x7d\xe9\x8d\x13\x04\xab\xbd\xe8\xe8\x15\xfd\x99\x18\xd9\xd3\x7a\x60\x10\x93\xa1\x4c\xcb\x03\x1c\x68\x36\x6e\x25\x3f\x74\xb9\x52\xc5\x5e\x42\xb1\xd5\x4e\xf8\x17\x9e\xa3\xf1\xf8\x27\x75\xab\x9c\x59\x9e\x76\xf3\x5a\x5d\x16\x02\xf1\xfe\x2b\x74\xf2\x13\x49\x2b\x4c\xb3\xaf\xe3\x0b\x03\xde\x7d\xca\x5b\x0b\xac\x22\x8b\x73\x17\x84\x77\xf3\xdf\x2c\xe4\xbf\x99\xe1\xbf\xd1\xf4\xde\x13\xda\x31\x9f\x66\x1f\x36\x55\xc3\x05\xa6\x40\x0d\x63\xe2\xf9\x1e\x8c\x61\xdc\xf8\x98\xb2\x25\x79\xfb\x42\xdc\x59\x51\xe9\xf0\x78\x94\x65\xc6\x6f\x84\x4c\xea\x35\xe4\xa4\xac\xf0\x31\xc2\xa3\x23\x6d\x89\x70\xdc\xa4\xbb\x27\x8d\x09\xf2\xe9\x47\xeb\x82\xf2\xf9\xa0\x1a\x8f\x89\x7c\x20\xf0\x70\x73\xa4\xaa\xc4\x7b\x5d\x12\x4f\x70\x27\x7e\x22\x86\xc8\x39\xfa\x8a\x8e\x44\x56\xed\x9c\x55\xe1\xf0\x71\xf5\x8b\x15\x24\x23\xd3\x75\x32\x69\xed\x75\xc2\x7a\x80\xef\x49\x3b\xc5\x33\x24\xa7\xe2\xb1\x74\x5c\x11\xb9\xea\x08\xef\xe2\xc3\x9d\x1d\x69\x59\x6e\x7c\x0f\x12\x1c\x71\x66\x6f\x8a\x7e\x6a\xbf\x47\x81\xd5\xba\x7e\x8f\xfa\x9c\xc9\x37\x29\x32\xab\xe6\x01\x7b\x29\xe8\x1c\x47\x8d\xed\xeb\x6f\xbf\xf9\xb7\xad\x1f\x7a\xdf\xb6\xa4\x2d\x80\x56\x2b\x3a\x36\x6b\x9e\x49\xf0\x1b\xca\x96\xde\x07\x27\x76\x9d\xfb\xf9\x8a\x08\x5c\xe1\x9b\x13\x2f\x72\x56\x32\xba\xc8\x8b\xe7\x91\xc2\xb6\x11\xf3\x1b\x72\xeb\xfd\xb6\xef\xec\xfe\xe7\xc8\x2c\xbd\x44\xb5\xc1\x74\xfd\x44\x78\x1d\x23\x7c\x55\x56\xcf\xae\x04\x9e\xa0\x3c\x58\x56\xd0\xe4\x4c\x1b\xf8\xb5\x3a\x3b\xe3\xe4\x6a\x6d\xa5\x3e\x6f\xad\x61\x1c\x36\xa3\x26\xa8\xda\x21\xca\xbc\x96\xab\xdc\x4b\x61\x4e\xb4\x43\x5d\x58\xe9\x94\xdd\xba\x06\x12\xad\xe3\xf1\xc7\x01\x4e\x3f\xec\xa2\x15\x48\xcd\x4c\x52\x50\x0e\xaf\xb6\xb8\x7d\xaf\x5a\x67\xe0\x03\x11\x75\xe0\x47\x7a\xda\x28\x93\x93\xaa\x95\x9d\x3b\x9a\x58\x78\x10\x42\x1b\xf3\x01\x0d\x02\x1b\x76\xc0\x99\x53\xe6\x59\xb4\x0b\x08\xab\xc4\x7f\x5d\xc5\xa0\x03\x66\x3c\x06\x61\x3a\x6b\x78\x27\xa0\x8d\xb2\x2c\x1f\x8f\xf3\x0e\x78\xab\xfa\x40\x2d\x02\x38\x07\x7a\xa6\x0e\x00\x3a\xcf\x7c\x9d\xe0\x17\x83\x24\x27\x62\x77\x1c\x8a\x9c\x0a\x31\x08\x8a\x43\xa9\x84\x9e\xd1\x91\x7d\x6b\x86\x28\x24\x2d\xdd\x13\x0d\x8d\x61\x23\x29\xc5\x46\x11\xd0\x69\xb0\xdb\xf2\x55\xbc\x61\x3a\x0a\xb6\x55\xc5\x5c\xf1\xbb\x42\xd0\xd7\x2a\xaf\x5f\x6d\xd6\xeb\xb2\xe2\xce\xde\x77\x27\x72\xf0\x8c\xef\x46\x19\x04\xbc\x8f\x35\xb2\x61\x33\x3a\x2a\xb4\x07\xbf\xd7\xa0\x55\xd7\x60\x55\x38\x88\xbd\x25\x4f\xe8\xd2\x3b\xe9\x38\xbb\xa0\x13\x66\xd8\xdd\x1b\x68\xb7\xed\x8b\xb2\x3a\x2d\xf4\x45\x72\x7c\x67\xc0\x00\x93\xf4\x2d\x27\xad\x90\x0d\xbd\x5b\x61\x88\x2d\x55\xf9\x29\x51\x39\xf2\x27\x2f\x6d\x67\xa9\x4e\x85\xa1\x17\x21\x04\x47\xbb\xa4\x51\x96\x45\xea\x6c\xb7\xc6\x29\x33\x5c\x73\xea\xb6\x06\x0b\x22\x4c\xfd\x75\x75\x08\x4a\x31\x85\x8f\xa2\xea\x0e\xe6\x01\x85\x55\x8c\xca\x87\x75\xa4\x87\x80\x52\x03\x6c\xe8\x52\x9a\xa2\x0d\xf8\x8c\xce\xb7\xdb\x54\xfc\x23\xe8\x3c\x49\x19\x42\x8d\x8d\x2c\x76\xf4\xa8\xfc\x3c\x8a\xd5\xbc\x71\x4b\x3d\xae\xce\x58\x14\xab\x3c\x2b\xe7\xc6\xda\x49\x4f\x20\x17\x13\xa8\xe5\x04\x6a\x35\x81\x1c\xe2\x05\xd3\xae\xfd\xf4\x76\x6b\xe4\x62\xc8\xed\x16\xfc\xc6\x54\x64\xc2\x13\x6d\x23\x7f\x55\x5e\x3b\x27\xa5\xde\xc9\xcc\x5b\x82\x2c\x7f\xac\x27\xdc\x5d\xb1\x15\xc1\x53\x2a\xa8\x46\x47\x48\x25\xca\x90\x01\x40\xa3\x98\x4d\xd4\x12\x4b\x92\x5a\x37\x40\x96\x2d\xd5\x35\xa0\x56\x22\x6a\x81\xea\x30\x9e\x3d\xa7\x75\xaa\x8f\x6c\xaa\xaa\x47\x46\x4a\x99\x1d\xcd\x07\xd1\xc5\x0b\x96\xd1\x32\x88\xdd\x47\xf5\xa8\x0a\x7b\x65\x59\x15\xf4\x1a\xd9\xb2\x94\xc9\x93\x93\x15\x4e\x0b\xa7\xa8\x56\xdb\x19\x49\x45\x18\x0f\x8c\xaa\xdf\x21\xf5\x62\x4d\x68\x35\xa7\xfb\xc8\x14\x3a\xc7\x69\xad\x53\x75\x28\x47\x01\x95\x97\xe9\x0e\xd2\x17\xb9\x63\x39\xfd\x77\x28\x6e\x06\xa4\x2d\xd0\x38\x1e\x2c\xed\x93\x90\xcf\xc8\x54\x30\xf2\xf1\xde\x7d\x5d\x61\x57\xff\x7e\x7b\x68\x65\xf3\x39\x09\x2c\x7a\x70\x60\xc6\x89\x6d\x57\xe7\x73\x40\xe0\x6a\x74\x60\xf3\xa5\x73\x69\xee\x12\xef\x30\x05\x4f\xa4\xea\x80\xab\x4b\xd1\x53\xab\x67\x5a\x59\xe4\x59\xb0\x75\x80\x46\x2b\x1c\x2f\x56\x9a\x40\x0d\x64\x9b\x75\x24\xc7\x11\x28\x90\xbb\x01\x00\x3b\xf7\x3a\xc2\x90\xe8\x5b\xdd\xd5\x7b\xe6\x8a\xb6\x26\xc9\xad\x21\x72\x6e\x06\x87\x1e\x3a\xc6\xb5\x29\xce\xe0\x71\xca\x43\xee\x0d\x75\x6d\x70\xc0\xae\xaa\x1c\x07\x1d\x03\x46\x99\x10\x67\x60\x63\x15\x11\xe5\x2b\xb0\xc0\x0d\xdd\x5c\xe5\x7c\xc0\xb6\xdb\x74\x47\x1d\x19\xd5\x3e\x0c\xc4\x0e\x7c\xe7\x9d\x8e\x45\x70\x07\x0c\xfa\xd4\xc5\xf8\x4d\x03\x51\xef\xd9\xde\xbb\x60\xaf\xf4\xc3\x5e\x86\x6e\x94\x18\xdc\x87\xfe\x8a\xa8\x77\x7e\xf7\xb8\x15\x5a\x97\xbf\x37\x75\xb3\xc7\xb2\x63\x41\x4e\xb6\xb0\x94\xe8\x14\x51\x7b\x40\x93\x98\x53\x17\x67\xda\x07\x19\xef\xd6\xaa\x67\x9f\x43\x98\xd8\x45\x01\x3c\x04\x9b\xf9\xce\xea\x1e\x85\x12\x3b\xcf\x0d\x3e\xba\xb2\x68\xe8\x7b\xca\x57\xcf\xd8\x92\xbc\x95\xca\x5d\x28\x96\x1e\x5a\x2f\x55\x82\x01\xbb\x2a\x99\xb9\xd6\xd6\xeb\xc7\x0c\x8a\x4b\x76\x0e\xaf\x0b\x47\xf4\x6c\xc0\xfe\x67\xc8\x01\xae\xde\xe1\x38\xc4\xa6\xbc\x43\xb3\xf7\xc0\x0a\x9e\xe8\x8c\xc0\x30\xfd\xfe\x40\xd4\xbf\x6f\x68\x5f\xfa\x10\xd2\xfe\x18\xef\xd7\x7d\x79\xef\x7b\x67\xff\x49\xaf\x6a\xdf\x46\xc7\x36\xd1\x59\x5c\x34\x9d\x73\xdf\xc5\xd1\x6a\x74\x9e\x3d\xd6\xb1\xd5\x9c\xeb\xa2\x13\x3c\xc7\x37\xbf\x87\xa4\xb4\x2a\xc7\x10\xb6\x3e\x6a\x6b\x4d\xd8\x87\xf2\x7f\x99\x55\xf6\xd0\x87\xfb\x51\xd0\x9e\x75\xb7\x08\x95\xd9\x80\xbd\x38\xf0\xc7\xe5\xd5\x5a\xd4\x2f\x6e\xa3\x5b\x12\x5a\x36\xb7\x58\xad\x3e\x91\x3a\x58\x23\x76\xe6\x1f\x26\xad\xb4\x72\x73\xbf\xf2\x81\x21\xc7\xc7\x4a\xc8\xd6\xe3\x71\xfa\x38\x65\x98\x78\x78\x39\xb6\x34\xb1\xe9\x02\xf9\x4b\x79\x1c\x35\x03\x0f\x6a\xb4\x0c\xc0\x50\x5c\xd7\xd8\xaa\x60\x44\x63\x59\x5d\x1b\xa5\x74\xec\xab\x7f\x76\x7b\x9e\x5c\x14\xa2\xfd\xe3\xec\x30\x7b\x71\x05\xd9\x81\xaf\xca\xf5\x02\x21\x40\xc6\xe1\x16\x0f\x06\xaf\x22\x4a\xd8\x37\x09\x84\x65\xce\x32\x4f\x35\xdb\x21\xfe\x95\xeb\x5b\x27\x20\x79\xe4\xa9\x39\x24\xe3\x29\x9f\xb1\x79\x64\x71\xad\x64\xb7\xde\x4a\x34\x3f\x60\x57\xe6\xbe\x38\x68\x1b\x79\x17\x7a\xc0\x6d\x5b\xda\x06\x3b\x4a\x83\x6f\x28\x7b\xd3\x3e\x1b\xd0\x85\x13\x5b\x2b\x10\x84\xd5\xe3\x71\x2c\xb7\x56\x0f\xcd\xd2\x5e\x22\xe0\x09\xa1\x43\xf5\xcb\x63\xf5\x3f\x7a\xfd\x8a\xe2\x5e\xae\x26\xc0\x0a\x4a\x72\x8a\x4f\x23\x9a\x44\x3d\x56\x8f\xd8\x6e\xe2\x3a\xe5\x58\x47\xf1\x9a\xba\xab\x88\x3a\xa2\xdd\x4b\x4c\xbf\x1d\xef\x40\xea\xa7\x77\x74\x20\x2b\xe9\x0e\x5a\x89\x72\x22\x07\xd8\xaa\xe2\xec\x44\xfb\xed\x24\xb6\x0b\xed\x5a\xd0\xc5\xda\x33\x53\x73\xd4\x10\xa3\x63\xcc\xc4\xbd\x04\xcd\xeb\x15\xe1\xb9\x67\xa1\xf7\x9c\x08\x19\x46\xbd\xf3\x3b\x7a\xe3\xa5\xa0\x1a\x36\x63\xa8\xac\x2c\x05\x1e\xe9\x3d\xcc\xa5\xed\xca\x10\xc2\xaf\xe8\xa4\x4a\x0a\x6d\x8d\xc7\xa3\x9e\xc3\x47\x77\x95\xb6\xaa\xa4\x99\xe7\x71\xba\x52\x4f\x3d\x27\xb3\xb9\x8c\xf4\x17\x8e\x4d\x31\x47\x0d\x2c\x04\xec\x10\x20\xe3\xbb\xf8\x63\xa2\x82\x94\x69\x0b\x36\x77\xdf\xea\x1b\xca\x17\xab\x54\x87\xa9\x46\x77\x8b\xbc\x26\x3a\x7c\xf5\x54\x3f\x5d\x0f\xe0\xab\x4a\x69\xab\xbe\xde\xad\x2a\x72\x31\x25\x4d\xe3\x38\xb7\x35\x69\x38\xe4\xa0\x1c\x8f\xcb\x89\xa8\xaa\xff\xd5\x0e\x70\xa2\x1e\xb8\xd4\xfb\xbb\x28\x50\x42\x2a\x6b\x22\x58\x8d\x73\xb5\x3b\xf2\x10\x69\x2d\xad\x0a\x42\x29\x8f\x60\xbb\xf5\x2d\x45\xd4\xa1\x8d\xc7\x47\xa6\x8a\xc2\x8b\x83\x7d\x91\x47\x4f\xba\xa3\xdd\xba\xd2\xe3\x7e\x8d\xab\x52\x66\x08\x80\x31\x36\x6b\x3d\x5a\xc4\x11\x57\x7c\x50\x1d\x12\xfa\xf0\x4d\xcf\x73\x03\x8f\x07\x2a\x71\xcd\xda\x21\x2f\x9b\x4d\xca\x66\x64\x13\x49\x5e\x8b\x72\x91\x17\x80\xca\x5b\x28\x40\xe2\x3e\x0b\x8d\x11\xc4\x18\x31\x4c\x08\xfd\x14\x55\x44\xe6\x1e\x47\x45\x67\x65\x8a\x4c\xda\x4c\x67\xce\xbb\x5d\x2c\x85\x9d\xe5\x5d\x56\xe1\x33\x9f\x09\xec\xa6\xe2\x95\x76\xb0\x5a\x2d\x24\x27\xda\xca\xf0\xa3\x55\x3c\x67\x20\x1a\x90\x7d\x23\x9c\x86\x63\x36\xed\x69\x66\x61\x22\x3c\xa7\x4c\x3a\x64\xfe\x2d\xe6\x90\xf9\x37\xc7\x21\xd3\xda\x70\xfc\xe9\x37\x6f\x5c\xf1\x97\x88\x1d\x3b\xae\xec\x0a\x58\x1a\x46\xd6\xd0\x16\xad\x79\xa6\x83\xd0\xc1\x53\x9c\xa9\x25\x59\x46\x64\x39\x27\x00\x66\xfd\xc8\x9b\x7b\xa9\x9d\xec\xd7\x58\x58\x2b\xa7\x74\x47\xd8\xb7\xdc\xb5\xba\xc8\xc3\xa1\x67\xf3\x70\x58\xf8\x12\x1d\x72\x74\xdc\x37\x9c\x74\x98\x87\xc1\xe4\x36\xe6\x4d\x25\x2e\x17\xcf\x18\xb2\x20\x11\x88\x0b\x95\x2d\x41\xd8\x81\x1c\x37\x44\x76\xc6\x31\x9f\x9c\x9d\x41\xd9\xd9\x59\x56\x0d\xdc\x88\x19\xac\xfd\x28\xdd\xa5\x20\x8f\xe9\x99\xa2\xaa\x3e\x50\x38\x19\x72\x5b\x9d\xf8\x35\x65\x3e\x28\x63\x71\x76\x84\xb5\x1a\x32\xa8\xa1\x62\xa7\x62\xd7\x3b\x3b\x3e\x31\x1f\x54\x04\x83\x5a\xef\x7e\xa8\xe3\xe8\xce\xed\xb9\xa3\xbe\xdb\xb5\x2f\xbd\x28\x46\x43\x62\x64\x73\x98\x1a\xc9\xc3\x1c\xee\xaf\xa5\x0b\xd6\xda\xb9\x44\x1c\xf8\xdc\xcb\xfd\x73\xf3\x6d\x29\x3b\x70\xdc\x2e\xf1\x76\xde\x55\xfc\xf9\xc1\xd6\xe4\x36\xee\x2f\x55\x3b\x71\x7a\xaa\x41\x1f\x6c\x8c\xc7\x69\x10\xb4\x27\x76\xfa\xd6\x5e\x11\x61\xf6\xc5\xe1\xb1\xda\xee\x38\x14\x31\x7c\xec\xc3\xc9\xae\x69\xc7\x20\xe6\xbe\x2f\x78\xed\xf1\xfa\xdb\xda\x31\xbb\xe4\x64\xef\xf5\x2f\xbe\xd2\xd0\x6c\xcc\x3f\xec\xf7\x98\x92\x73\xd8\xdd\xd2\x37\x8f\xad\xba\x55\xdf\xbb\x33\x83\xd8\xb3\x6e\x78\xc4\x8f\xa4\x3d\x6a\xef\x19\x83\x6d\x6a\xaf\x0a\x92\xc3\x22\xfa\x85\x7c\x1e\x9b\x09\x8e\x5d\xa0\x48\xec\x6f\x3f\xdf\xa0\x10\xf0\x0f\x8f\x55\x08\x6f\xb9\x12\x82\x1a\x30\x62\x17\xd8\x77\x91\xf3\xb4\x8a\xdc\x3f\x88\x68\x6b\xf7\xd0\x9f\x6e\x0b\x46\xa2\x37\xd3\x9e\xd5\xae\xfb\xd8\x3e\xad\x5d\x57\x41\x05\x09\xab\xb4\x72\xc6\xcb\xe1\x17\x1c\x98\xe1\x74\x63\xf8\x85\x99\xf3\xea\xc6\x2e\x7b\x8a\xe6\x5e\xbe\x88\xc8\x5e\xf4\x28\x00\x0c\xa6\x21\x90\x7a\x7c\x36\xf7\x82\x01\x84\x37\x50\x5b\xf8\xb7\x9f\xd3\xc1\x5c\x0e\xa4\x4c\xb4\xc3\x30\x96\xcb\x47\x5e\xe9\x7f\xa5\xbd\x12\xc0\xb9\x21\xfa\x58\xce\xcc\x93\xb1\x9b\x3c\x85\xf7\x3e\x77\x81\x8b\x90\x9e\x06\xcd\x8e\x70\x69\xa7\x41\x3f\x2f\xad\xb7\x53\x9e\x11\xc8\xd1\xd3\xff\xc8\x97\x23\x1d\x4e\x25\xfa\x5e\x99\xcb\x68\xd7\x20\xcf\x3c\x63\x94\xd3\xae\xe7\x49\x1b\xad\x34\x10\xdd\xd0\x78\x4c\xc6\x63\x29\x7a\x2b\x54\xd5\xeb\x0f\x67\x7d\xe1\x7a\x08\x49\xd5\xff\xca\x5e\x05\x8a\x40\xf7\x5b\xe7\xcb\xbb\xa0\x04\x11\xfc\xd0\xa1\xad\x33\xe1\x3a\x1a\x0b\xcb\x21\x23\xd0\xa1\x64\x74\xe4\x3d\xb2\x87\x84\xe7\x98\xf8\x63\x22\x24\x3c\x12\x93\xf0\x70\xf4\x8a\xbc\xe3\x0c\xfc\x6b\xb6\xf7\x04\x2e\x09\xf7\x99\x1d\x13\x6e\xdf\x8f\xab\x1f\x57\x9e\x88\x3b\x2a\xc3\x7c\xb5\xd1\x4a\xa7\x7f\x3d\x44\x17\xa9\xcb\x4d\xb5\x20\xcf\x96\x84\x71\x7a\x41\x41\x4d\xaf\x9f\xc2\x94\xa2\x42\x69\x36\xb2\x3b\xa5\xda\x98\x9a\x42\xe3\x6f\x4d\xd4\x0c\x64\x8c\x21\xfd\x49\x90\x55\xcf\x24\x4f\xda\x07\x12\xb1\xdc\x4e\x79\x19\x40\xd8\x86\x33\xa1\xf5\x5f\x4b\x06\xfe\x7f\x95\x92\x24\xa4\x6f\x54\xe5\xa4\xdb\x32\x77\x23\xd0\xff\x12\x57\xff\x5b\xcd\xd8\x3c\x3c\x40\xff\xf8\x82\xe8\x97\x33\x36\x97\x02\x2e\xfc\x45\x97\xa8\x51\xd6\x01\xd1\xdb\x9c\x56\x8a\x17\xef\xd3\xdc\x82\xf3\x28\xcd\x18\x4e\x4b\x2d\xf7\xe7\x45\xf1\xcc\x35\x3f\xac\x4f\x2b\xa2\x93\x3b\x05\x82\xbc\x03\x83\xde\xf9\x56\x64\xb9\x59\x90\x34\xea\xed\x49\xb6\x5b\x6e\xbd\x2f\x1b\x3c\x3a\x36\xd1\x32\x89\x62\x1a\xb4\x2a\x1b\xd0\x7c\x8c\x8d\xd8\xd1\xff\x28\x1c\x00\xe1\x11\x91\x32\xf9\x9f\x48\x4a\x1d\x99\xbc\x04\xf7\x4e\xf1\x11\xe7\x08\xb3\x26\xfd\x81\x38\x52\xf9\xbf\xfd\xe6\xa5\xf2\xff\xf3\xc1\xa4\xf2\x96\x05\x6a\xa7\xd4\x1c\x17\xad\x1d\xd1\x37\xd2\x97\x92\x8f\x83\x9e\x7e\x43\x52\xb3\x89\x1b\xdb\x7a\x2c\x20\xc6\x3a\xcd\x33\xb6\x9b\xba\x2a\x23\xd7\xb6\x37\xca\xe6\xa6\xf1\xda\xfb\x3c\xf8\xef\xad\xff\x8c\x1a\x93\x1e\x23\x45\xfd\xfb\xcd\x7f\xdc\x65\x46\x6d\x89\xa2\x62\xbe\xb7\xd8\x4e\xd3\x18\xbf\x4d\xff\xeb\xac\x8b\xda\x76\xce\xd8\x70\xb0\x7d\x96\x7a\x57\x91\x6f\x6d\xf8\x8c\x31\x0e\x64\xb7\xa9\x9f\x52\x14\xf4\xeb\x5b\x76\x6a\x5b\x1e\x76\x67\x43\xf6\xe7\x9e\x3a\x98\xf7\x00\x49\x03\x72\xfb\x29\x71\xee\xad\xc3\xe9\xbb\x42\xf1\x48\xd8\x1f\x4c\x32\x8e\x6e\x35\xd8\xc7\xc6\x4e\x26\x73\xe3\xe2\xb5\x60\xcf\x69\xd6\x81\x38\xfb\x56\xd8\xb9\xc4\x88\x49\xc3\xae\x55\xaa\x26\x2d\x41\x36\x3e\xad\x7e\x81\xbd\x17\x3d\xb6\xbe\x5b\xa9\x7c\x14\xd9\xbf\x13\x1e\x3c\xe5\x4f\x3b\xb6\x4b\xbf\x6f\x85\x97\xa9\x6b\x77\x63\xfa\x84\xde\xcd\xde\x4f\xfc\xef\x55\x20\xf6\x1a\xf9\x3d\x0c\x3d\x89\x2c\x34\xc4\x02\xbd\x97\x7f\x37\xa8\xf5\xe9\x2e\xa2\x0b\xdc\x01\xe1\xf7\xd4\x75\xec\x3d\xcf\x9d\x2e\x03\x51\xad\xdb\x1e\xfa\xbf\x77\xb8\xa9\x56\xc6\xeb\xcc\x10\xd0\x25\xe5\xf5\x0a\x0d\xf1\xe1\xf6\x96\xfa\xee\xa1\x25\xee\xa7\x64\x3d\xb8\xef\xbd\x69\xca\xd1\xbb\xab\x88\x7f\x6d\x05\xb1\xdd\x85\x3e\x19\x1b\xd2\x0f\x7b\x52\x76\x04\x15\x68\xe9\xa8\x8d\x3e\x3b\xe4\x68\x1d\x3f\xbf\xa3\x99\x42\x2e\xdd\xf2\xbc\x4b\xb8\x94\x28\xce\xfb\x44\x71\x6b\xa6\x01\x35\x41\x1b\x40\x7c\x09\x9d\xb7\x24\x74\x1e\x93\xd0\xf9\x1e\x12\x7a\x20\x9e\xc3\x63\x8a\x9c\xb0\xf2\x25\x74\xde\x57\xf6\x94\xb8\x95\xb8\x2d\x64\x6d\x84\x5b\xc2\x76\x8c\x11\xab\xac\xb3\x56\xbc\xf8\x61\xc4\xed\xd6\xd9\x69\x19\x3a\x75\x73\x9b\x1b\x29\x58\x85\x08\xfe\xb7\x98\xf4\xfb\x6f\xbe\xf4\x2b\x06\xf9\xfb\xae\x50\x71\x8e\x9f\xb2\xce\x9e\x15\xc9\xd2\xe5\xee\x6c\xe0\x3b\x0d\xfb\x47\x7f\x26\x4b\xdf\x45\x74\xaf\x4a\xdd\x71\xe3\xbc\x01\xdf\x08\xa4\xe7\x7e\xf1\x6a\x65\xed\x16\xea\x57\x5f\x74\xb9\x55\x1e\x73\x63\x35\x6e\xbd\xf1\x09\xcf\xc8\xbc\xc1\x46\x63\xdc\x15\x98\xa7\xab\xb5\x1f\xeb\x22\x96\xe7\x0d\xdd\x91\xb4\xc2\x1c\xdc\x3b\x20\x7e\xc6\x25\xe1\xf7\x1d\x05\x57\x19\x57\x91\x80\x46\x95\xe7\xe2\xe9\xd8\xad\xd2\x5d\x77\xa7\x33\x25\x41\xd8\xce\x86\x2d\x86\x41\xe5\xbd\x9c\x91\x79\x67\x4e\x9a\xca\x1f\xaa\x23\x4f\x82\x1b\x72\x9f\x21\x48\x21\x10\x6b\x16\x4f\x94\x14\xb4\x56\x87\xee\x9a\x7d\xc9\x74\x8f\x27\x8c\xdc\x0c\xff\x42\x20\x30\x3e\xc1\x15\x2e\xd1\x54\x7c\xf9\x3f\xee\x97\x26\xa5\x2e\xb0\x61\x86\x21\x5c\x98\x09\x11\xe4\x5b\x7f\xfc\xdf\xdf\xbc\x9e\xe9\xcf\x24\x3b\xc6\x2e\x54\xc5\xe2\x6b\x68\x46\xcf\xc4\x84\xd0\x46\xe1\x4b\x1d\x69\x40\x73\x1c\x3a\x4a\x80\x77\x5f\x55\xc0\x83\x33\x02\x19\xd6\x82\x28\x14\x55\x27\x9a\x38\x8b\x7b\x04\x04\xf1\x32\x6c\x60\x16\xaf\x2d\x88\x19\xfe\xa7\xf3\x8b\xfa\x59\x50\xcb\x49\x36\xd6\x0a\x8e\xf1\x55\x41\x2f\x57\xfc\xb4\xab\xc2\x32\x8c\x4c\x61\x12\x47\x2d\x75\x84\x9b\x60\x42\x2a\x39\x7e\xf4\x33\x2d\xd9\xe3\xf2\xea\x8a\xb6\xca\x83\xfd\xf1\x02\x28\x44\x77\xc7\xe1\xc2\x22\x67\x10\x8d\xf0\x29\xf7\xca\xfc\x94\xfb\x64\xa2\x31\xd4\x84\xa7\xc8\x84\x48\xa0\xf0\x8c\xd5\x42\xa0\x65\x9c\x31\x69\xc7\x3b\xb8\xa3\x8a\x91\xd0\xc9\x34\x7c\xc8\xc2\x1a\x90\xa6\x1e\x58\x35\x0d\x96\x79\x96\x3b\x59\x04\x3f\xfb\xba\x58\x90\x09\x4a\xe7\x2f\xaf\x9d\xe0\x4a\x30\x00\x96\x7f\x38\x5b\xc0\xd7\xe5\x5f\x04\x56\x26\x4e\x16\x3b\x84\xfc\x94\x23\xb2\x36\x18\xa2\x7a\xd5\xda\xa0\xa5\xf3\xbf\x4b\x2e\x47\x8e\xea\xa4\xf8\x4c\x05\xcb\x1b\xc4\x48\x50\x10\x45\xf8\x66\x1d\xba\x66\x00\xd3\x62\xa4\xac\x25\x24\xad\x97\x6c\x4c\x25\x76\x49\x08\xcf\x12\x94\x5a\x42\x7a\x0c\xa8\x65\x81\x9d\x2b\x0e\x3f\x28\x86\xb6\x14\x14\xb2\x35\xf5\x5d\xe9\x17\xbc\x4d\x68\x87\x76\x72\x8a\x91\x71\x1b\x17\x63\x9d\x81\x91\x85\xcc\xc8\xe8\x8e\xc1\x26\x2f\x9f\x3e\x7e\xf1\xf2\xc9\xd9\x93\xd3\xd7\xa7\x67\x4f\x5f\xbe\x7c\xf1\xf2\x95\xde\x2c\x89\x5d\xcc\xa9\x47\x90\x4d\x44\x98\xf2\x92\x3e\x06\xa0\x68\xc0\xd4\x85\x44\x21\x64\x00\xb0\xb7\x27\xa7\x37\x60\xe7\x1c\xb7\xdb\xd9\x5c\xf4\x42\xdb\xe6\x9d\xce\x26\x66\xd1\x4d\xf4\x4b\xda\x07\x1a\xd6\x10\xf0\x29\xc6\x92\x2e\x16\x92\xab\x8c\x00\x86\x41\x4e\xda\x4e\x38\x72\x4d\xe4\x94\x75\xc5\x0e\xcb\x51\xdb\x95\xa8\x2e\x38\xea\x76\x0b\xd2\x1e\x96\x60\xef\xe6\xaa\xbb\x65\x30\x23\xbb\xa0\xd5\x15\x59\xa6\x68\x9f\xc9\x19\x5c\xba\xc7\x34\x1d\xbc\x2b\x7a\x00\x6c\xd7\xde\x9e\xf0\x3a\xf4\x10\x09\xb7\x78\xe9\x6b\x0b\x7c\x90\x04\x30\x6f\x5f\xf0\x8e\x88\x1e\x6d\xf8\xdd\xc5\x93\x39\x59\xf3\xab\xcc\xe7\x34\x77\x25\xd0\x06\xeb\x76\xaf\xff\x19\x9d\x6b\xbb\xf6\x76\x89\xca\x9b\xe8\x7d\x06\x5b\x5b\x8a\x74\x70\xd5\x06\x10\x78\x17\x02\xec\x09\x58\xb1\x88\x20\x4b\xee\x2d\x87\x18\x3f\x2c\x17\x8b\xb1\xec\x48\x30\xb5\x66\x85\x9f\x53\xbb\xca\x12\x62\x40\x42\x6e\xd3\x72\x3e\xc8\x67\x47\xf3\x2c\xcb\xf2\xd9\xf1\xdc\xc4\xbd\xab\x66\xe5\x1c\x66\xdc\x1a\xbe\x67\xaa\x92\x14\xf0\xf6\x5c\xf4\xf4\xda\xd0\x82\x59\xe6\x91\x94\xbb\x06\xab\x78\x33\x31\x49\xa8\xf4\xd6\xcd\x10\xce\xb3\x23\x08\x82\xab\x16\x99\x7f\x5e\x3f\xca\xf5\x22\x37\x59\x39\xcb\xe7\x03\x3a\xdb\xcc\xb3\x19\x99\x6d\xe6\x98\xcd\x36\xf3\xb9\xe6\x54\xa9\xbc\x2f\x82\x30\x76\xdf\x90\xbf\x92\x1b\xb8\x14\x65\x51\x9c\xe7\x8b\x37\xf1\x5d\x80\x1d\x08\xc9\xaf\xc1\x26\x36\x2c\x53\x84\xec\x81\xe2\xa1\x4d\x15\xda\xb4\x34\xb8\x7e\xc6\xc4\x53\x69\x92\x5d\x9f\x57\x47\xbb\xed\x13\x4e\xa3\x79\x8a\x20\x3b\xc3\x22\x98\x2a\xbd\x17\xdb\x21\x4e\x3d\x18\x09\x13\x80\xf9\x16\x12\x6b\xa1\x97\x1d\x13\x07\xd4\xb6\xa4\xcb\x90\xa8\xb7\xb1\xa8\xa1\x7d\x9d\x88\x33\xc6\x6e\xba\x1b\x23\x77\x41\x19\x5f\x81\x99\x3e\x58\x64\xbd\x2b\x77\xe2\x21\x2c\x37\x61\x67\x40\x69\x49\x9b\xcc\xe2\x36\x7b\x23\x24\x77\x0b\x09\x2a\x07\x91\x17\x19\xdd\x65\xdd\x6c\x9a\xfe\x2e\xae\xad\x13\x89\x1b\xb5\xf3\x0e\x38\xe8\xe6\xe7\xee\x05\x27\xc0\xb6\xf5\x24\x71\x0d\xd9\x9e\x57\xaf\x4f\x5f\x3f\x55\x87\x10\x61\x69\xdc\xce\xf7\xe2\x68\x14\x43\xa3\x6c\x89\x62\xc1\xbc\xba\x10\x3c\x41\x5a\xcd\x29\xa1\xb4\x26\xfc\x09\xad\xf8\x6d\xbb\xab\x30\x7c\x75\xac\xaf\x41\x65\x6c\x6b\x83\xe0\x34\x35\x58\x8d\x96\xe2\xe3\xeb\x32\xd6\xb9\x4d\x0e\x1b\x9d\x64\xd8\x19\x24\x8b\x2d\x9d\x8b\x17\x9f\x70\x4f\x8f\xad\xe0\x3e\x6a\x86\x0b\xb8\x55\xdf\xe7\xf5\x4b\x22\xd0\x5a\xcb\x75\x51\xee\x41\x1b\xe7\xb5\x01\x0d\x22\xc0\xda\x60\x4a\xc8\x5a\x12\xb6\x08\x8c\x8c\xb5\x55\xb9\x21\xb5\x8c\x45\x25\x9d\x09\x62\x36\x1f\x8f\x53\xf5\x57\x27\x31\x92\xc5\x3a\x0b\x72\x17\xe4\xc7\xb9\xdb\x94\x87\x7c\xb7\x79\x5e\x7e\x48\x9e\xdb\x3c\x7d\x3c\x04\x90\xc6\x3a\xdb\x71\xea\x9e\xed\x88\x3a\x71\xdd\x9d\xd9\xa8\x68\x77\xf6\xb4\x20\x12\x36\xe6\x59\x96\xa5\xc4\x86\xea\x6f\x6f\xf7\x49\xe7\x39\x91\xf9\xd4\x62\xb1\x19\x99\xa3\x20\x5e\xaf\x37\x96\xda\x39\xd1\x3c\xb6\x69\xce\x14\xf2\x70\x68\xaf\x9f\xe9\x03\x4d\x56\x49\x92\xf7\x9a\xcf\x76\xdb\x3b\xb8\x57\xac\xe5\x9d\x0d\x2b\xca\x7c\xd9\x21\xef\x38\x5a\x10\x93\x8d\x4f\xf9\xcd\x05\xb4\xd7\x53\x82\x74\xe8\x79\x4c\x17\x2d\x05\x50\x2c\x5b\x8b\x13\x0e\x58\x0d\xa9\xc2\x01\x27\x40\x2f\xd8\x66\xfd\xa2\x5a\xaf\x72\x46\x5c\x94\x95\x20\x79\x07\x7a\xaa\x74\xe5\x87\xc8\x8b\xe2\x25\x71\x42\x1c\x4b\x6c\x05\xd8\x25\x2e\x6a\x78\x96\xbe\x07\x07\x1c\x09\x71\x60\xc6\xe7\x61\xb2\x6b\xa4\xe3\x4f\xeb\x07\x8a\xa3\x26\x25\x08\xf5\x74\xe4\x9a\x0c\x57\xfe\x21\x54\x4e\x90\xe3\x8e\xcd\xd4\x7a\x88\xae\xc8\xcb\xc1\x95\x6d\x9b\x71\x3b\xa6\x84\xbc\x1d\x11\xda\x0f\xf1\x1c\x41\x5e\x61\x62\xef\xfd\x89\x6b\x47\x52\xf2\x48\xda\x38\xa3\xce\xf6\xb6\x7a\xef\x81\xce\x96\xb4\x22\x0b\x5e\xdc\xb6\x4f\xbc\x0d\x1e\xb3\xf9\xa0\x07\x73\xb6\x63\x6c\x3b\x9e\x43\x5e\xf8\x05\x88\x8e\x19\x8d\x05\x38\x20\x19\xd1\x4e\x16\x0c\x53\xb1\xd5\x92\x27\x8e\xc2\x64\xdb\x09\x04\x82\x37\x80\xa9\xff\x9f\xc9\xc1\x01\x18\xdc\x2a\xf3\x7b\x6e\x9f\x5f\x95\xba\x92\xb5\x03\x0f\xc2\xdb\xc2\x8a\x5e\xf0\x14\x0d\xb8\x8e\xda\x3e\xb0\x01\x2a\x69\xdf\x7e\xa5\x20\x5e\x3d\xca\x3f\x2f\x2d\x04\xe7\xda\x1b\x18\x44\xab\x7a\x48\x59\xcd\x73\xb6\x00\x9f\xee\xf1\x58\x4f\xe5\x73\x36\x1e\xeb\x79\xd6\x08\xdb\x19\xa2\xc6\x49\x80\x20\xa0\x42\xa0\x30\xa0\x1d\xbd\x01\x54\x23\xc8\xd8\x38\x67\x99\xe2\x28\xe6\xbd\x07\x09\x89\x8f\x03\x87\x45\x19\x55\x10\xff\x18\xa4\x51\x9d\xc8\xb5\xfd\x0e\x75\xd7\xd8\x1c\xe7\xa3\x2c\x73\x9d\x30\x02\x10\x66\x6d\x85\x06\xa6\x19\x73\xd8\x7b\x5f\xa3\x01\x39\x91\x59\x9f\xce\x03\xd2\x24\x47\x00\x19\xd7\xa1\xb6\x60\x93\x1d\x3d\xda\xd8\x54\x21\x1b\x2d\x31\x17\x59\x2d\xc4\xe4\x45\x46\x66\x05\xe8\x40\x12\xba\x4c\x46\x59\x56\xc8\xe2\x8b\xac\x9c\x15\xf3\xed\x96\xce\x8a\x39\x5e\x69\xfb\x70\xe5\xd9\x6f\xd6\x7c\x71\x72\x01\x4f\x49\x10\x3b\x40\xf9\xf9\x9b\x45\x25\xe6\x01\xd9\xe7\x18\xd2\x02\x2f\xd0\xe0\xbc\x22\xf9\x1b\x19\x03\xe0\x5c\xb3\x26\x41\x0b\x1b\x80\x56\xb4\xc0\xe9\x2a\x03\x83\x80\xb4\x40\x68\x87\xcd\xc5\xaa\xc7\x88\xcf\x1d\x59\xbf\x89\xf9\xe3\x2a\xf6\xf8\x43\x8c\xba\x24\x17\xf9\xa6\xe0\x53\x3e\x2b\xe6\xd9\xa2\x91\xfe\xf9\x5a\xf6\x5b\x78\x17\xa6\x5f\x4e\xee\x73\x28\xb2\x82\xfd\x3e\x48\xae\xea\x33\x99\x4b\x11\x1e\xa9\x8e\x8d\xb8\xd2\xf8\xb9\x4b\xa3\xef\x32\x03\x2d\x6d\x76\x3f\xda\xec\xf1\x1c\xec\xbd\x15\xee\x37\x4b\x66\x67\xa9\xf4\x11\x6d\x3e\xe7\xfd\x68\x29\x17\x9c\xb0\xdc\x02\xf2\x80\x5b\x40\xe2\x89\x1e\x38\x4f\x65\x2a\x2a\x29\x6f\x01\xf9\x7b\x42\x15\x6e\x8a\x69\xb6\x41\xa7\xa1\x5e\x15\xac\x7e\x20\x82\xbe\x66\x52\xf3\xa9\xd8\x14\x69\x35\x0f\x76\xe4\x2d\x04\xa2\x91\x07\x2e\xb2\x1e\xf5\x16\x90\x9a\x62\x3c\x4e\xf3\x16\x6e\x45\x26\x3d\xaa\x52\x4b\x74\x5b\x3e\xf4\xab\x2a\xb4\x2e\x77\x03\xea\x4d\x9a\x91\x59\x99\xd5\x33\x36\x9f\xcb\xf3\x37\xf9\xfa\x47\x59\x96\xcf\xca\xb9\xce\x45\x49\xeb\xa7\x3f\x6d\xf2\x22\x15\x22\x1f\xa6\x68\xbb\xe5\x46\x53\xeb\xde\x38\x5e\xbe\x82\x68\x24\x6d\x9e\x25\xf9\xbc\x9d\x29\x72\xaa\x3e\xd1\xe5\x41\xf2\x45\x12\x06\x9d\x70\x56\xdf\x15\x7a\xa2\xfb\xd5\xa3\xfd\x5e\x14\xd3\x90\x46\x9e\xde\x1a\x5c\x13\x3f\xc7\x68\xbb\x27\x62\x63\x5b\x78\x60\xbf\xdf\x34\x03\xd5\x58\x1a\xfb\x0c\xfe\x43\x7f\xd7\x91\x99\xa2\x2f\xbb\x76\x0e\xe2\xc0\xf7\x1b\x7a\x29\x8d\xb7\xdc\xd7\x86\xbe\x5d\x91\xa2\x51\xc7\x7e\x48\x0b\x2e\x27\xca\x47\xec\x92\xc6\xe2\x7d\x04\x0f\x52\xb1\x66\x9a\xe3\x8c\xe5\xe0\x0f\x22\x6d\x44\x51\x03\xc1\xad\x88\x1c\xd1\x28\xf5\x4e\x88\x92\xf0\x9e\xec\xb7\xa1\xb1\xe7\xb4\xb4\xb3\xac\x77\xb3\xdb\xd5\x3b\xb7\x3e\xd2\xb3\xf2\x69\xfa\xbf\xad\x38\x23\x54\x7e\xc4\x34\x8c\x33\x22\xd0\x22\xba\x23\x3d\x11\xf4\xe1\x99\xd9\x4f\x47\x20\x55\xf0\x7d\xe6\xb0\xea\x6d\x7a\xb7\x59\x64\x8a\xa4\x8d\x40\x25\xbd\x70\x25\x9a\x39\xfb\xd2\x88\xbd\xe9\x2c\x61\x65\x75\x05\x33\x09\x60\x2a\xa9\x6f\xd9\x22\xfc\x26\x78\xbb\x7a\x45\x96\xc9\xdc\x59\x24\xe3\x1e\xe5\xd9\xa4\x24\x48\x1b\xdd\xf2\x38\x5c\xc8\x7c\xe6\x08\x73\x39\x3d\xca\xe3\x29\x54\x4b\x9e\x29\x27\xc0\xa7\x7f\xfd\x1b\x3e\x46\x38\xd7\x15\x5f\x91\xea\x9a\x2e\x76\x24\x01\xde\x9d\xd1\xf7\xcc\x0e\x96\x55\x5c\xab\x15\x16\x41\x2e\x4c\xe9\xc1\x4c\xd2\x3b\x9b\xa6\xaa\x09\x92\xab\xbe\xca\xaf\x21\x7a\x89\xfc\x28\x63\xe0\xe4\x0b\x5e\x56\xb7\x8f\xf3\xc5\x2a\x7a\xc9\x62\xbc\xcf\x13\x72\xb1\xab\xbe\xc7\x8c\xef\xaa\x1c\x9d\x9d\x54\x90\x07\x46\x7e\xa6\x54\x50\x1c\xb2\xf4\xf3\xbf\xb5\xda\x76\x15\xab\xf1\xbe\x22\x7c\xb1\x82\x5d\x7b\x9e\xaf\xf5\xbc\xa5\x03\xe4\xae\x19\xd7\xfa\x62\xec\xaa\xe9\xdb\xd1\x88\xa1\x88\x8e\xc6\xe0\x9c\xea\x54\xfa\xb8\xc9\xb1\xa7\xc9\xe1\x8f\x75\xc9\x0e\xf3\x35\x4d\xb0\x62\x71\x95\x5f\xa6\xca\x45\xa6\xbc\xe1\x97\x69\xa2\x9a\x24\xb8\x25\xa1\x87\x49\x93\x75\x4d\x1f\x6b\xaa\xaf\x32\x0b\x5e\x83\xb0\x9b\xa2\x6e\xda\xa5\x81\x37\xa9\x4d\xf8\xe4\xc7\x92\xc6\x12\xaf\x57\x2e\xc8\xb6\x2a\x49\x46\xf4\x5c\xb0\x43\xb4\xf5\x86\xc9\x91\x6f\xb1\x4b\x27\x74\x29\x30\x8d\xf8\x37\xab\x26\x67\x97\x84\x91\x2a\xe7\xe4\xd9\x12\xd4\x02\x08\x53\xf5\xd0\x03\x15\x55\x76\x9d\x9a\xa4\x15\x9a\x9c\x6f\x68\x01\xb5\xa0\xc4\x18\x1b\x15\x60\x46\x2b\x75\xba\xea\x75\xcc\x59\x35\x7c\xb3\xd7\x9f\x0a\x5e\x51\x1c\x96\x1d\xb7\x73\x5f\xfc\xdd\xd4\x03\x42\x12\x77\xdb\x1a\xcc\x0b\x45\xd7\x27\xd1\xaf\xf2\xb4\x44\xc7\x53\xa9\xb3\x72\x6d\x2f\x3c\x02\x40\x3c\xb3\x8c\x14\x35\xd8\x55\x5b\x06\x55\xdd\x22\x51\xf5\x42\x88\x99\xe1\x23\x88\x0b\x18\xa2\x82\xaa\x2e\xf3\xaf\xd9\x0f\xad\x76\xde\x79\x72\xc8\xab\x69\x12\x86\xa2\x49\x51\x96\x6f\x36\x6b\x71\x0c\xd8\xa3\xda\x55\x56\x6d\xb7\xe2\xc0\x15\x13\x2c\x3b\xff\xaa\xac\xd4\xc9\x9e\x30\xae\x13\x83\xda\xb9\x94\x82\x8e\x41\x3a\xff\x57\xe2\x62\xfd\x7f\xb6\x68\x98\x1c\xb0\x83\x64\x78\x43\xf9\x6a\x48\x97\xd3\x61\x62\x62\x9f\x43\xfb\x2f\x6f\x3d\x64\x00\x1d\x35\xf8\xac\x63\x55\x32\xd2\xed\xa4\x82\x10\x87\xc8\x63\x1f\xb4\x6a\x11\x90\x07\xd4\x1d\xe8\x04\x7c\x41\x1a\x78\xb0\x95\x68\xc1\x85\x63\x5b\x31\x30\x46\x3f\x32\xac\xa2\x8c\xa8\xe8\xc2\x41\x85\x4e\xba\x46\x9d\xca\xa8\x85\x40\x87\x2e\xab\x72\xc3\x54\xf3\x13\x79\x7b\x5e\xbe\xfa\xdb\xb7\x93\x6f\xab\xf2\x8a\xd6\x82\x06\xd7\x65\x71\x0d\xd1\x98\xd3\xb4\xdd\x64\xbb\xd5\x33\xf8\x32\x28\xf1\xe7\x82\xcc\xe3\x6d\x6b\x36\xb8\x77\x54\xbd\xd3\xc1\x21\x4c\xa3\x22\xa1\x8d\x01\x27\xf8\xa7\xec\xae\x91\xfe\xbb\x30\x9f\xf1\x98\xe8\x3f\xe5\x2b\x8a\xfe\x85\xb0\x07\x2d\xa0\x28\xf0\x0f\x1c\x66\xd9\x05\x39\xc4\x15\x45\x5c\x18\x82\xd7\x63\x35\xfb\x76\xa7\xf1\x05\x38\x06\xf6\xdd\xa7\x27\x2a\x7d\x53\xe6\x82\x0c\xa5\xe8\x84\x4c\xce\xd6\x72\xd7\xbe\xad\xca\xb7\xb7\xd3\xde\xdd\x94\x77\xf1\xcb\xdb\x67\xcb\x30\x8f\xbd\x55\x99\xd9\x98\x03\xdc\x84\x0e\x32\x57\xb4\x95\x37\xb9\x9a\x51\xf5\xb4\xe7\x5c\x35\x06\xc1\x80\x0d\x90\x16\xa9\x33\xa9\xbc\x28\x04\x82\x05\xfe\x49\xa5\xc7\x84\xcb\x1d\x6e\x30\x4c\x72\x58\x5e\xa8\xcb\xb9\x50\xea\x86\x44\x42\x84\xd8\x8d\x1e\x52\xe3\x66\xbd\x8c\xe4\x84\x0e\x3c\xd8\x33\x1a\xde\xbf\x12\xe1\x3a\xa3\x8e\xe2\x70\x93\xf5\xec\x2b\x0a\xb8\x41\xe7\x38\x9d\x4d\x91\xa3\xe6\xc8\x64\x53\x4d\x37\xd9\x0f\xe9\x06\x73\xb9\xf2\xaf\x73\xb6\x2c\xc8\x50\x51\x6b\x17\xc6\xca\x8b\xe1\x47\xc9\x41\x7d\x90\x7c\x64\xc1\xeb\x23\xd8\x95\x8f\x12\x14\x8e\x4d\xb5\xad\xd1\x4b\x92\x7e\x0b\xf9\xb3\xb1\x60\x05\xc1\x82\x96\x01\x7b\xab\xba\x75\xa8\xb9\x64\x89\x84\x10\x8e\x7d\x31\xa1\x2a\x6f\x86\x10\x22\xf7\x2b\x71\xaf\x53\x20\x98\x1a\x3e\xc7\x63\x1a\x90\x06\x4c\x1a\xb9\x94\xa7\x6f\x79\x95\x2f\xf8\x70\x9d\xdf\x8a\x72\x67\x01\x09\x52\x49\x43\x1d\xb4\xa6\xbc\x28\xb0\xe3\x1a\x83\x25\xdd\xf0\x81\xff\x79\xce\x6e\xf7\x00\x5a\xe2\x00\x6d\x4f\x80\x8c\xf0\x62\xcd\xd8\x1c\x87\xa6\x1b\xde\x61\x4b\xb8\x0d\x27\xd5\x46\xfd\xc1\x7d\xb4\x59\x54\xbd\xcf\x06\xf1\xd3\x25\x84\x09\xb2\x90\x46\x5d\x48\x5b\x92\x0b\x52\xa5\x09\x0c\x45\xd9\xa5\xbc\x0b\x1f\xb9\x58\x06\x34\xd4\x77\xd4\x43\x2d\x04\x2b\xc8\xac\xa6\x14\xeb\xac\x03\xbc\xc1\x02\xd0\xd5\x24\x06\x04\x78\x19\xca\x2e\x75\x90\x1f\x1b\x3a\xd3\x65\x71\x27\x35\xfd\x99\x8c\xc7\x94\xf7\x67\x13\x05\x47\xd5\xd3\xa2\xf8\xd6\x69\x4a\x6a\x49\xde\xea\x48\xb7\x36\x2c\xc2\x2a\xaf\x53\x06\x29\xd3\x6b\xc2\x53\x86\x21\x31\x31\xf0\x9e\xcc\x58\xf1\xe1\xbc\xc1\xf1\x11\x5a\x02\x91\xf7\xb8\xe7\x7f\xa1\xec\xd2\xbc\x98\x7a\x4b\xd4\xda\x3e\x45\x03\x9c\x54\xe2\x50\xfe\x55\x59\xbd\x16\x80\xe9\xbe\xfd\x78\xed\x95\x9e\x13\xf0\x52\x47\xe3\x4e\xb8\x85\x2d\x64\x59\xe5\x5e\x08\x30\xc4\x1b\x8d\x18\x20\x0f\x01\xf5\xa0\x4c\x2d\xf3\x82\xd4\x0b\xf2\x15\x5c\xe0\x9f\x36\xa4\xe6\xb5\x13\xd9\x09\xe7\xce\x15\x00\xec\x15\x13\x2b\x36\x50\xe9\x7b\x92\xbf\x11\x52\x8b\xcc\x5d\x5e\xba\x49\xcb\x89\x4e\x5a\xee\x01\xd4\x20\x9f\x15\xf3\xec\x02\x6f\xe0\x8c\x2e\xf0\x42\xa7\x9b\x44\xb8\x9e\x5d\x4c\xe8\x72\x9e\x2d\x6c\x5a\xd7\x95\xd5\x6c\x56\x13\x17\x53\xa7\xc4\xef\x16\x13\xd3\xcf\xc0\x20\xd3\xca\x60\x55\xee\xa4\x9d\x5d\x86\xfb\x16\x5b\x9d\xb4\xbd\x24\x1d\xb6\x97\x44\xda\x5e\xd6\xb3\x52\x4c\x18\x8c\x5c\xe4\x9f\x59\x89\x73\x94\xb7\xc7\x2f\x6d\xe2\x31\x9d\xea\x1d\x2f\xac\x69\x67\xf1\xf9\xc2\xee\xdc\x45\xc6\x67\xc5\x7c\x50\xc9\xdd\xd8\x6e\x55\x32\xf7\x0b\x37\x97\xfb\x3a\xdd\x38\x2b\x5a\xef\x97\x47\x57\xbe\x27\x42\x46\x9e\x32\xab\x67\x14\xe6\x0e\x51\x97\x9d\xf9\x8a\xad\x48\xf9\x76\x0b\x0a\x90\xaa\x2a\xab\x34\x79\xfa\x76\x0d\x66\x40\x40\x29\xa8\xc0\x19\xbc\x1c\x9e\x93\xe1\xba\x22\x35\x61\x5c\xda\x2d\x90\xa1\x82\xba\xe1\xba\x2a\xaf\xe9\x92\x2c\x35\xca\xc6\xc3\xf3\x0d\x1f\x52\x3e\xbc\xc9\xeb\x21\x2b\xf9\xf0\x42\x10\x80\x89\x20\xbe\x0d\xbd\x10\x44\x46\x4f\xfc\xca\x87\xbb\xeb\xec\xe8\xd1\xf5\xe7\xe5\xa3\xeb\x83\x03\x74\x35\xbb\x9e\x67\xf9\xec\x7a\x1e\x52\xd7\x0d\xdc\xef\x17\xc8\x3e\x8a\xde\x66\x6c\x22\x98\xc7\xb5\xf2\x58\xfc\xaa\xac\xbe\x52\xc0\x2f\x39\xc8\x2b\x84\x2f\xb3\x23\x7c\x9e\xdd\xea\x2d\xba\xfc\xfc\xfc\xd1\xa5\xd8\x22\xdd\xc7\x59\x76\x3b\xbb\x9c\xe3\x1b\xf8\x47\x5f\x8b\xa7\xce\xf4\x6e\x10\x7e\xeb\xff\x7c\x95\x1d\x3d\x7a\xf5\xf9\xcd\xa3\x57\x7a\xab\x5f\x64\x67\xb3\x57\xf3\xc9\x99\x0f\xfe\x6f\x67\xaf\xe6\xd9\x0b\xfc\x14\xfe\x99\xd0\xa5\xd8\x82\x9b\x2f\x8e\x91\xa7\xff\xf9\x91\xa4\x0c\x57\x98\xe3\xa7\x98\xe0\x4d\x48\x96\x39\xba\x5b\x42\xd6\xfb\x06\x4d\x16\x39\x0f\xde\x16\x24\x30\x08\x69\x31\x7d\x6b\x63\x8b\x0b\x26\xfd\xa9\x09\x89\xb6\x4a\xeb\xd9\xdb\xd9\xd1\x5c\x40\x00\x6a\xd4\x83\x95\x5e\xfb\x69\x76\xf4\xe8\xf4\xf3\xf2\xd1\xe9\xc1\x01\x12\xc4\xec\x74\x8e\x1a\x0c\x92\xe8\x05\xa9\x08\x5b\x84\x08\x48\x82\x1c\xf0\x74\x4c\x8a\x5d\x06\x23\x07\xb2\x97\xe0\x59\xe0\x7a\x29\xad\x91\xe9\xb1\xc1\x6b\x42\xde\xf4\xf0\x60\xb1\xde\x63\x02\x5b\x85\x19\x3a\xe9\x1e\xd6\x51\xa7\x29\xb1\xf6\xac\x22\x51\x61\x15\x43\x98\x0d\xba\x1c\xb4\x79\xc0\x36\xcf\x31\xd8\x21\x99\x35\xd8\x9f\xe6\xce\x25\x62\x6a\xe5\x56\xb1\x33\x72\x65\x9e\xdc\x3a\x1a\xc9\x74\x9d\x2a\xf9\xbc\x10\xa6\xab\xce\x11\x3a\xce\x83\x60\x39\x5a\x6b\x73\x24\x6b\xff\xc0\x4c\x52\x97\x40\xb4\x37\xb7\x24\x3a\x50\xaf\xb8\xd3\xb6\x27\xe6\x1e\xac\x79\x15\x65\xcd\xb9\x0d\xc2\x4d\x27\x32\x50\xd3\x26\x93\xdc\xb6\x7e\x33\xe6\x38\x87\x04\xdd\xb8\xc8\xba\xf8\x6b\x55\x55\xf1\xa7\x95\x2b\xc8\x7d\x34\x94\x98\x13\x3a\x17\x8c\xab\xe5\xd9\x7f\x32\x7c\x7b\x81\xf0\xf7\xe9\xdf\x84\x74\x1b\x5e\x77\xd6\xe6\xc2\xf5\x3c\x39\xae\x15\x58\x48\x6e\x5c\x4d\x22\x41\x83\x27\xa2\x62\x29\x38\x75\xc9\x38\xe5\x99\xe5\xcc\xf5\x56\xe7\xd2\xb9\xbd\x84\x7f\x04\x5f\x64\x45\xa7\x38\xd7\xdd\x5a\x95\x7a\x69\xf7\x57\x17\x61\xcb\x5d\x6d\x03\xd6\x9a\x25\x38\x36\x25\xd3\xaa\x89\x7f\x79\xfb\xe7\xba\x64\xa7\x6b\xaa\xbd\xf0\x22\xe7\x6c\xed\x47\xc1\x1d\x98\xa0\x36\xe0\x68\xaa\xab\x63\x70\x96\x61\x9e\x5e\x2c\x56\x1d\xc9\x61\x01\x9e\x08\xdd\x2e\xef\x78\x93\x95\x9d\x09\x34\x70\x21\x0b\x23\x76\x04\x78\xd1\x1a\x0e\x2e\x02\xbe\xc8\xca\x76\x2a\x8b\x41\x4f\x62\x86\xf1\x38\xbd\xd8\x6e\x37\xdb\x6d\xbe\xdd\x8e\xea\xf1\x78\xb4\x40\x28\x54\x97\x59\xa0\x0d\x1a\xc3\xfe\xb5\x1f\x1b\xa4\xda\xec\x6e\x99\xf3\x7c\xda\x19\xfc\xf0\xb5\x32\x41\x8d\xc7\x3f\x34\xb1\x20\x9c\xcc\x17\x2a\x82\x02\x53\x99\x5d\x4d\xf8\x04\x31\xa5\xef\x73\x85\xb6\xda\x4e\xce\xd2\xaf\x17\x13\xf5\x18\xbf\xca\x0a\xb1\x4a\xbc\xcc\x36\xdb\xed\x62\x3c\xee\x48\xd5\xe0\xa5\x69\xf8\xe2\x08\x20\xe3\x62\x3c\x1e\x89\x19\xac\xb6\xdb\xa5\xca\x81\xb0\xd6\xf9\x1c\x3a\x56\x49\x03\x6a\x0d\xd3\x93\x0b\x96\x11\x77\xc3\xbd\x86\x8d\x5e\x0b\x38\xa6\x17\x29\xcc\x54\x0c\x76\x27\x99\x99\x07\x1c\xab\x2d\xbd\xa6\x57\x62\xd4\x5e\xd8\x07\x6d\x31\xdf\xe3\x6a\xb9\x3e\xf8\x60\xad\xa6\xc7\x26\x7a\x67\xc1\xb5\xb4\x7f\x3d\x7c\xc7\x7a\xc0\x47\x00\x94\x31\xda\x00\xe8\x17\x42\xe2\x4e\xc6\xeb\xdd\x68\xdc\x54\x96\xda\x22\x0f\xe3\x0d\x85\x8c\x2c\x7b\xff\x60\x18\xdc\x8c\x9f\x38\x2f\x05\x62\xdb\x4f\x52\x07\xa5\x63\x8b\xcc\x35\x23\xd3\x8b\xbb\xbb\x17\x72\x6f\x64\x2d\xe0\xcf\x4c\xf2\x1b\xca\xde\x7c\x55\x95\x57\x3d\xe8\xda\x85\xa4\x38\x4e\x3b\x31\xb7\xc9\x3d\xa9\xfb\xe0\x2e\x32\x1e\xf7\xe1\x27\xab\x9b\xda\x03\xf7\x48\x3c\xc8\x1a\x13\x8c\x86\x9c\x88\x3f\xa6\xc1\x5b\xec\x34\x72\xe5\x80\x8d\xd2\x2a\x66\xbd\x94\x7d\x48\xda\x2e\x3a\x66\x9d\x84\xa8\xba\x84\xc6\x2a\xb2\xeb\xc2\x49\xc4\x28\xdf\xf3\xfe\xb9\xc8\x1f\x5e\x65\xf7\xa0\x7e\x02\xd3\x3b\x8c\x30\xa8\xb1\x91\xc5\xb0\xae\x9a\xac\x4b\xb1\x4a\xfd\x93\x15\x3d\xae\xfc\xb7\x96\x7e\xa0\x37\xe7\x08\x27\xb4\x14\x04\x0b\xe6\x86\xd7\x8a\x66\xa9\x4c\x4f\x57\x99\xb5\xe8\x53\x89\x87\xbc\x3c\x44\x46\xb9\x2c\xd7\xb7\x1c\x8f\x47\xeb\x93\xd1\x95\x71\x86\x56\xe8\x97\x7a\x4f\x2b\x1a\x44\xbc\x45\xa0\xe9\x55\xac\x0e\x80\xd1\x34\x26\xa4\xd0\xf6\xe5\xea\xda\x9e\xdd\x5d\xc7\x9e\xb9\x28\x60\x8f\x9f\x36\xa4\x0a\x59\x77\xc3\x7f\x34\x03\x78\xa1\x54\x88\x48\x19\xe8\x02\x03\xe1\x7f\xca\xc2\x3a\xfa\x66\x9c\x3b\x8f\x9d\x72\x26\x30\x5e\x4a\x31\x97\xd8\x11\x10\x58\x6c\x0e\x0e\x9e\x2a\xd2\x3e\xda\xe3\x50\x99\x0a\x0d\x68\x46\xb7\x5b\x1e\xb1\x80\x50\x14\x4a\xd1\x95\x6f\xcb\xf5\xc6\xb1\xcc\x96\x9c\x8b\x81\x97\xfa\x1d\x1f\x03\xe4\xda\x14\x45\xc3\xa5\xf3\x12\x50\x67\x3f\xa4\x75\xc7\x4b\x00\xb4\x52\x14\xa1\x45\xa6\x4a\x6d\x1a\x6e\xc9\x54\x25\x28\x54\x8e\x4b\x45\x5e\xa0\x79\x22\x48\xab\x26\x40\xb5\xd9\x72\x7a\x42\xc1\x9d\xd2\x37\x76\x48\x37\xb8\x46\x53\x9a\xbd\xfb\x36\x61\xd1\x03\xa6\x3b\x28\x9c\x5c\x98\x58\x55\x84\xa0\x05\x64\x4c\x43\xe2\x5e\xcf\xc8\x41\x5f\x10\xb7\xc7\xc6\x3e\x8b\x83\x6c\xb9\x13\x64\xf1\x26\x02\x67\xc6\xb3\xdb\x85\x32\x9c\xbf\x0f\x80\x98\xe7\xa2\x12\x4b\xe7\x05\x1b\x60\xf9\x87\x34\xef\x03\x12\xfb\x5e\x14\x03\x15\x23\x87\x05\xa0\x52\x1a\x66\xc6\xe9\xa4\xfd\x3a\x44\xd1\x3e\xc7\x69\x9e\x45\x2b\x13\xb1\x08\x33\x31\x48\x84\x11\xd0\xcb\x3e\x21\x6d\x25\x0f\x52\xba\x83\xd3\x22\x7c\x29\xb5\x9a\x97\x41\x1b\xe1\x9f\x16\x45\xaa\x22\x01\xad\x09\x79\x03\x3f\x91\x7c\x4b\xd2\xe5\x6d\xd8\xf1\x93\xe5\xdc\x35\x3a\xcb\x45\xc4\x2e\x03\x5c\x23\xfd\xa7\x7d\x79\xd2\x35\xe1\x29\xc7\x09\xad\x21\x5f\x13\x65\x97\x09\x1e\x1d\x21\x5c\xa4\x7f\x25\x29\xd3\xa0\x5c\x21\x8d\xf7\xf8\xe4\x2c\xe0\x88\xab\x8e\x27\xfd\x53\x1d\x66\x90\xa2\x93\xf4\x7e\x63\xa9\x77\xfe\xaa\xfd\xce\xef\x3d\xc8\x86\xf0\xc9\x11\x9a\xa6\x69\xbb\x55\xf7\x53\xbf\x33\x47\x34\x1e\xf7\xcf\x32\x98\x23\xde\x35\x15\x71\x74\x4b\xba\x94\x69\xb0\xfc\xe3\xf3\x22\xc7\x79\x48\xca\x6b\x01\xcf\xde\x0a\x1a\x22\x02\x54\x0b\x92\x22\xfd\x15\x54\xfb\xdc\xc2\x67\xf9\x48\xa3\x8d\x66\xe2\xdd\x6a\xbd\xdd\xc0\x4d\x4d\x47\x10\xd7\xaf\x45\x32\xc2\xbf\x03\xcc\xba\xa4\x42\x8d\x00\xfd\x82\x93\xca\x7d\xdd\x6a\xb0\x26\xff\xaf\xf2\xeb\x90\x21\x35\x4c\x75\x28\x67\x55\x48\x6a\x26\xce\xb4\x63\xd7\x57\x9b\xa2\xb8\x55\x6e\xfb\x96\xeb\xe2\x16\x39\xc9\x80\xe7\xea\x89\x50\x01\xff\xf7\x26\xb4\x4f\x1a\x31\xbb\x93\x4f\x1d\x77\xb5\x1a\x73\xca\xec\xeb\x23\x6f\x10\x76\x9e\x0e\x5f\xb0\x45\xcf\xf3\xe1\xb7\xb6\x4b\xa4\xde\xfb\x9c\x4f\x1d\x51\x0b\xbd\x89\xd4\x90\x5a\x46\x7b\x12\xfb\x96\x81\x4e\x6e\xde\x23\x5c\xd9\x97\x16\xfe\x79\x65\xd3\x8a\x50\xf0\x11\xc4\x65\x46\x27\x7a\x39\xf0\x68\xaa\x17\x04\xcc\xb6\xcf\xc1\x0b\xba\x1a\xe0\x09\x2f\x06\x4a\xa1\x3d\x76\xe8\x45\x1a\x71\xa7\x47\x45\x66\x02\x4a\x9c\x24\xae\x09\x5d\x32\xad\x6d\xd4\x1b\x51\xe8\x9a\x6c\x25\xd3\xc4\xcd\xc1\x90\x48\x68\xa2\x17\x69\x52\x95\x25\x57\xd6\x5d\xcb\x49\x9d\x5f\x93\x65\x92\x65\x59\x98\x84\x47\xfc\x17\xe6\x77\x97\xdb\xa3\x1f\x2c\x4a\xc6\x29\xdb\x90\xe6\x61\x26\xd5\xd8\xbe\x6b\x2e\xc4\x6d\x71\xde\x05\x2e\x91\x80\xf0\x25\x5d\x8a\x93\xe9\x7e\x3f\x18\xa8\xd8\x58\x52\x2a\xc2\x06\x18\x9f\xe8\x88\x14\xa0\x5f\x96\x97\xf5\xfb\xbc\x7e\xc6\xae\xf3\x82\xb6\x39\x83\x98\xdf\xf8\x89\xdb\x99\x6a\x08\x09\x8c\x71\x85\xa6\x5d\x65\xee\x60\xf0\xc8\xd6\x7a\x79\xb0\xed\xe4\x23\x1c\x64\x9c\xb2\xc1\x27\x5a\x53\x33\xaa\x7d\x37\x42\x85\x2c\x6b\xf0\x99\x40\x2d\x71\x74\xa5\xd4\x10\x95\x09\x51\x81\x59\xcb\x64\x0e\xd2\xc0\xd1\x0c\x08\x00\x0b\xf2\x34\x49\x49\xce\x21\x37\x84\x6f\xd6\x2a\x08\x3f\xa6\x27\x5d\x48\x50\x59\x78\xd3\xa5\xf2\xa0\x67\x4a\x78\xe8\xac\x6a\xa4\x76\xc1\x81\xb1\x06\x6b\x0e\xa9\x43\x8b\xe5\x1b\x15\xfb\x86\x90\x02\x39\xe6\x75\x7d\xa2\xfe\x9d\xf2\x06\x87\xb5\x3b\x50\x3b\xae\xb2\x0d\x77\xc2\xbb\xb7\x2d\x97\x31\x07\x24\xa9\x24\xb6\x0a\x49\xb3\x17\x6b\x4c\xae\x5e\x54\xff\x5a\x0e\xa1\x29\x3c\x89\xc2\x73\xe8\xf0\xa2\xac\x86\x1f\x25\x07\x1c\x34\xe8\x03\x1b\x8b\xf1\x6c\x95\xd7\xcf\xbb\x17\xeb\x52\x1c\x15\xb5\x6c\xf7\x14\x1b\x2c\xd0\x6c\xe7\xd6\xa9\xe4\x50\xba\x5b\x5f\xe5\xca\xd1\x09\xdf\x91\x21\xc7\x88\x8a\xda\x31\x41\x6a\x50\xb8\xff\xc2\x74\xd6\x33\x07\x9f\x1b\xdb\x61\xc2\x0b\xbc\x73\x46\x26\x94\x2d\x8a\xcd\x92\x80\xfe\x9c\x82\xdb\xa6\x7c\x08\xa7\xed\xbc\x59\x30\x76\x20\xa1\x42\x1a\x2d\x7a\x91\x46\x35\xcc\xe8\x8e\x05\xa9\x80\x25\xab\x6e\x5f\xc1\x98\x7c\x80\x96\xc1\x31\xe5\x38\xe5\xac\x9a\x67\xd1\xc1\x64\x57\x6e\xe2\xae\xb2\xf1\x9d\x39\x94\x9a\x47\x6d\x5c\x67\x17\xd2\x26\xb8\x55\x1a\x58\xdd\x7a\x51\x62\x61\x4b\x05\x42\x90\xbc\x8c\xa0\x8c\x92\xef\x8e\x21\x4e\xcc\x20\xc7\xad\x58\x3e\xf7\xc4\x6c\xe5\xfb\x6a\xcc\xcf\x41\xf1\xaa\x32\x13\xb3\xcc\x26\xb9\xf5\x2a\x24\xf9\x7a\x5d\xd0\x05\xe8\x81\x04\x90\x4f\x9c\xd1\x25\xcc\x32\xc0\x8c\xe2\xb7\x49\x6f\xd5\x2d\xab\x6b\xc3\x58\xfd\xe0\x51\x39\xcd\xf7\x50\x32\xeb\xe6\x56\xeb\xa8\x74\x9c\x61\xda\xde\xaf\x02\xfc\x8c\xfd\x10\xb4\x46\x58\x23\xc1\x23\x26\x18\x1e\xf5\xe5\xf1\x05\xdc\xdc\xe1\x2e\xdc\x79\x3b\xdb\x1e\x0d\x2a\x32\xae\x35\x58\xf5\x8c\xc1\x9d\xe9\x99\x50\x5d\x2a\xc3\xb0\xe3\xcd\x86\x06\x3c\x6e\x07\x13\xf3\x9b\x74\x6c\xb4\x05\x88\x93\xa6\xdb\xdb\x02\x22\x85\x38\xfe\x78\x2d\x07\x8e\x3d\x56\x1c\xf5\xf9\xd8\x7b\xd1\x03\xde\x93\x56\x59\x2e\x39\x41\x52\x15\xd7\xe7\x63\xd2\x5a\x48\x97\xee\x75\x1a\x41\x8c\x86\xa2\x5e\x12\xfe\xe5\xad\xfb\x2c\xd2\xee\x27\x42\xdc\xbb\x9f\xef\x25\x79\x77\xb9\x2a\x41\x7b\x7b\x2d\xea\xc3\xca\xb0\x4b\x70\x35\x5a\x8e\x22\xa8\xc1\x91\xda\xdd\x37\x4a\x60\x43\xc2\x53\xfb\x5c\x50\xf5\xb4\x73\x9e\x16\xe3\x0b\x43\x0d\x36\xde\x56\xbd\x16\x13\x6d\x44\x53\x19\xd5\x8d\xab\xaf\x33\x4c\x8a\xe9\x56\x26\xc2\xc7\x8c\xdc\x3c\xd6\x21\x5b\xdb\xaa\x94\x92\x1f\x1c\x38\xfc\x9a\x64\x43\xf6\x12\x1d\x43\xd6\xa5\x7d\xde\x75\x08\xf7\xe1\x51\xc3\xfc\x9f\xe7\x6b\xe5\x19\x83\xad\x68\xd0\xcd\xa3\xb4\x3d\x88\x30\xcb\xaa\x19\x87\x0b\xc3\xb4\x9c\xc6\x14\x3e\x37\x97\xe3\xc5\x0d\x23\x55\x28\x68\x8e\xb2\x2c\x05\x12\x2a\x4f\x26\x31\xbe\x41\x07\x42\x9e\x6e\xa9\x2d\x18\x4e\x00\x80\x12\x65\xe1\x28\x46\xcd\x98\xa4\x22\x6e\x87\xd2\xcd\x4c\x91\x82\xed\xb6\xdd\xbf\x47\x29\xf6\x1f\xc8\xeb\x17\x06\x56\x2a\x35\xb1\x25\x02\x01\xb4\xfd\x8f\xdc\x69\x95\x27\x15\x38\x18\xc7\xd6\x5b\xa2\xa9\xac\xea\xe9\x4e\xba\xe6\x31\x2b\x61\xdd\x68\x2a\x16\x3b\x73\x3c\xa9\xa2\xbd\xdb\x62\xed\xc1\xd0\xdb\xb7\xdb\x1d\x8c\x22\x64\x03\x07\xfe\x77\x81\x46\xe0\x35\xf6\x70\xd0\x61\x3b\xfe\x60\x00\xe2\x0c\xf1\x21\x60\xc4\x57\x1b\xe7\x0e\xe9\x28\x71\xa2\x9c\xe0\x5e\x99\x29\xc4\xa1\x28\x3f\xa9\x66\xf9\xbc\x63\xd2\xc9\x41\x7e\x3f\x40\xca\x7d\x40\x52\x73\x48\xba\xfa\x37\x15\xf6\x84\x24\xd3\x9f\x02\xa4\x1b\x5a\x14\xca\xc8\xf9\x5d\x3c\x44\xa3\xfe\x90\x96\xb6\x46\x90\xa4\x09\x62\x14\xf3\x7c\x74\xa8\x72\xe8\xea\x68\x8b\x8c\xea\x0c\xc4\x0a\xad\x36\xb0\x34\x1c\x44\xd5\x2e\x49\xe3\xd8\x98\xaa\xc7\x1c\x3d\x75\xa2\x5c\xed\x71\xd4\x23\x8a\x70\xaf\xd4\x5a\xb8\x47\x1c\x83\x21\xdf\x1f\x28\xa5\xbe\x8b\x8c\x29\x79\xfa\xce\x62\xf7\x54\xc2\xe8\xad\xb1\x25\xe0\x0e\x25\x15\x84\xc3\xf2\x93\x42\xa5\x68\xa0\xab\x65\x47\x66\x2b\xbb\x25\x8b\xd6\xde\xf9\xe7\x6e\x37\x6f\x97\xc9\xbf\xb7\x5a\xbf\x93\x70\x2f\xfc\xd2\x3d\x36\xc3\x6f\xd0\xbb\x1b\x67\xbc\xa2\x97\x97\xa4\x7a\x42\x2e\x48\x55\x91\xe5\x6b\xf9\xb3\xf6\xf7\xa5\x71\x9c\xb9\x6b\xee\x1b\xa6\x95\x19\x0b\x75\x7a\x79\xc6\x1c\x8f\x0c\xcf\x52\x25\x47\xef\xea\x0b\x34\xab\xe6\x29\x98\x8e\xa0\x06\xe1\x22\x53\x4f\x30\x39\xc2\x8b\xcc\x7b\x52\xc9\xd9\x72\x28\x03\x16\x0e\xf3\xf3\x72\xc3\x87\xc9\x41\x65\x1d\xa0\xc4\x0a\xe0\x81\xa7\x8c\xd9\xb3\x2c\xa4\x3d\x4b\xd9\xb6\x67\xf1\x8c\x7e\x76\x48\xe7\x14\xe7\x78\x03\x11\x58\x53\x78\x2d\x2a\xc0\xe4\x85\x60\x36\xa1\x4b\xc1\xe4\x19\xb1\x7d\x3c\x4e\x37\x19\x35\x3f\x11\x28\x4b\xa5\xbe\x8e\x4f\x3c\x0d\x5f\x5a\x2a\x2b\x8d\xbc\x41\x78\x33\x1e\xeb\x57\x25\x65\xba\x21\xf0\x82\xee\x65\xba\x69\xc4\x0e\x95\xbe\x33\x92\xd4\x09\x12\x37\xf6\x15\x9d\x28\xfd\x1c\x68\x68\x4e\xd2\x2a\x4b\x74\x8b\x24\xcb\x84\x00\x5d\x5e\x0c\x8b\x09\x91\xfb\x2a\xa3\x3f\x9e\x04\xbf\x53\xbb\x32\x34\x95\x21\x24\x01\xd3\x41\xb8\xcf\x55\x4a\x26\xf2\x9b\x58\x4f\xa8\x6a\x4c\x4b\x5c\x61\x82\xd0\xd4\x29\x92\xba\xa2\x12\x0b\x11\x06\xd4\x48\xa4\xc1\x0b\xc7\xea\x7f\xc3\x03\x61\x74\x56\xc9\x0c\x29\xd2\xa2\x24\x65\x59\xc1\x41\x58\x43\xdb\x6d\xca\xa2\x31\x3c\x03\xea\x0e\xec\x74\x35\xb9\xb0\x5a\xb3\xe4\x8a\xbe\xa5\x0c\x88\x39\xa6\x19\x93\x91\x78\xf2\xba\x96\x3a\x16\x05\xf2\x2f\x4c\x60\x01\x8a\x06\xe5\xa4\x22\xe5\x9a\xb0\xc7\xa2\x5a\x7a\x77\x76\x46\xeb\xe7\xd0\xc7\xe8\x08\x9f\x9d\xc9\xee\x68\x83\xb0\xe0\x8e\x2f\x69\xcd\x89\x18\x04\x30\x4b\x72\xc0\xb1\x8d\xdd\x52\xc8\x30\x09\x8d\x5c\x01\x1e\x59\xce\x64\x53\x14\x8a\x39\x31\x93\xb1\x17\x6c\x3c\xa6\x93\x55\x5e\xbf\xb8\x61\x26\x5b\x48\x62\x0a\x85\x9c\x97\x3a\x95\xb3\x0a\x41\x62\x9a\x8c\x19\xed\x8b\xdd\xde\xc2\x8f\xd3\xd0\xda\x2a\x7f\x9b\xf4\x0a\x50\x43\x26\x3d\x0f\xda\xd9\xd7\x04\x93\x89\x0a\xbb\x7f\x89\xc9\xc4\xc3\x4e\x19\x84\x11\x36\x9a\x8f\xec\x2f\xe2\x17\x14\xbc\x10\x05\x2f\xaa\x25\xa9\xc8\xf2\x15\xe1\xd9\x77\x98\x68\x6c\x21\xab\xe6\xf6\x83\x6d\xbf\xb2\x1f\xa5\xa0\x9b\xd5\x98\x4c\xdc\xe9\xfc\x4c\xfc\x0f\x3a\x84\xc3\x77\xf6\xbb\x4c\xa3\xc4\xe1\xb7\x93\xf7\xea\x07\xa8\x51\x96\x52\x11\x9c\xfd\x8c\xc9\x44\xbf\x14\x65\x5f\x3a\x3f\xdc\xd1\xbe\x12\x6d\xc0\x2b\x33\xcb\x45\x87\x67\xe7\x94\x2d\xb3\xef\xc5\x5f\x97\x9b\xbc\x5a\x66\x3f\x89\x3f\x4b\x98\xea\xb3\xfa\xb4\xa0\xd7\x24\xfb\x1b\x26\x93\x45\x49\xc0\xa4\x2b\xe3\xa2\x83\x25\xbd\xb8\x90\xfd\xfd\x09\xeb\x3b\xe5\xdc\xb3\xec\xd6\x7c\x15\x3f\x5f\xcb\xd4\xe9\xd9\x35\x26\x13\x18\xc4\xf8\x74\xc9\x89\xfc\x80\x89\x95\x07\x9f\x1b\xc8\x38\xc7\xc4\xcf\xb6\x95\xbd\x0e\x12\x5c\xc0\xba\x45\xc1\xe3\x30\xf3\x85\xf8\xf8\xbc\x33\x75\x4d\x72\x76\x46\xea\xe7\xa5\xa0\x85\x09\xbe\x83\xe4\x37\xd3\xd1\x11\xa0\x29\x59\x37\x4d\xfe\x08\xf1\x07\x0f\x05\x3a\xfb\x18\xf8\xb6\x8f\x29\x5b\x92\xb7\x09\x9e\x25\xe4\xed\xba\xac\x78\x9d\xe0\x48\xa5\xc3\x75\x45\xaf\x73\x4e\x92\x39\xf6\x2f\x7b\xb2\xa9\xc9\xb0\xe6\x15\x5d\xf0\x64\x70\xdf\x79\x75\x2f\x44\xb3\x8e\xf8\xce\x26\xf9\x11\xd7\x3c\x1e\xa5\x86\xcb\x93\x6f\xfa\x7a\x6c\x1f\xc4\xde\x9d\xb7\x9b\x36\x3b\xf6\xf4\x9a\x54\xb5\x40\xef\xce\xae\xce\x3d\x32\xf1\x7e\xdb\x46\x26\x6a\x7f\x4c\x1a\x76\xf3\x21\xf9\x74\x72\xfc\xc9\xe4\xb3\xa4\x41\x83\x70\x7a\x02\xe4\x72\x5e\x56\xf5\xc7\x82\x46\x97\x8c\x30\xde\x77\xf8\xb6\xfa\x86\xd3\x42\x34\x2a\x8a\x7c\x5d\x93\x43\x08\xb8\xd3\x53\xd1\x7c\x08\x80\x45\x90\x13\x6f\xdd\x36\x6e\x8d\x87\x0e\xdd\x7d\x6a\x2b\xcd\x8d\x30\x46\x9a\x94\xa0\xed\xb6\xe5\xd8\x3a\x4a\x5f\xdd\x5e\x9d\x97\xc5\x84\x72\x02\xd3\x18\x52\x36\x94\x5b\x0c\x0d\x92\x99\xc4\x02\xc3\x53\x2d\x60\xcc\x93\x2c\xd3\x1a\x4a\x9b\xec\x50\x07\xf7\x92\x09\x0d\x89\x91\x02\x95\xdb\x0e\xc4\xdd\x1c\x1d\xc1\xe3\x15\x2e\xf5\x41\xf0\xea\xd6\x30\x8b\x39\xae\x33\x32\x0b\x26\x33\x4f\xd1\xa3\x51\xca\xb2\x34\xcf\xea\x09\x23\x6f\x79\x8a\xd0\x64\x59\x32\x99\xb5\x4f\xb2\xb5\xf9\x04\xce\x1a\xe1\x11\xdf\x6e\x75\xd8\xce\x51\x96\x71\xf4\x48\x0c\x89\x1e\x35\xd2\x35\x6b\x83\xee\xa8\x98\x42\x99\x6d\x9a\x0b\xca\xf2\xa2\xb8\xbd\x13\x13\x60\xda\xfa\x4f\x08\x45\x62\xca\xdb\xad\xfe\x2b\x45\xa6\x26\x90\x59\x49\xfd\xcb\xc6\x66\xe8\x82\x7d\x74\xb6\x55\xfb\x57\x33\x72\x33\x7c\x7d\xbb\x26\xea\x99\x49\x31\x17\xc3\x9c\x73\x72\xb5\xe6\x43\x5e\x0e\x41\xda\xda\x2c\xf8\xa6\x22\x43\x56\xb2\x43\x58\xf2\x79\x61\x79\xa1\x04\x35\xa9\xc3\x64\x50\x87\xd9\xdb\x75\xe6\x77\xfe\xb3\x78\xc4\x43\xc8\x0d\xa6\xcb\xc1\x3b\x88\xcf\x55\x28\x5d\xbd\xb4\x10\x60\x60\xa8\x0f\x04\x2c\xde\x03\xd7\x45\x55\x5e\xa5\x04\x05\xe3\xef\xbf\xb3\xf5\xba\x22\xf9\xb2\x6f\x53\xdf\x01\x85\x14\xf9\x6d\xb9\xe1\x19\x99\xf0\xfc\x52\x26\x2d\xb3\xe1\x45\xbf\xa4\x60\x93\x50\x67\x44\xb2\x41\xa2\x3c\xf6\xcd\xfb\xe1\x76\xa0\xef\x83\xe4\xe2\xd2\x23\x2c\x84\x71\x85\x16\xbe\xa7\x7c\xf5\x6d\x5e\xe5\x57\x35\xf2\x34\xff\xd6\x03\xc7\x88\xfe\xda\xeb\xe2\x53\x37\x4e\x9f\x2e\x9c\x7d\x3a\x3f\x71\x7f\x4c\x65\x80\xc2\xf4\x08\x73\x8d\x0e\x91\xe0\x3b\x47\xa4\xc5\xb6\xb5\x16\x9a\x20\x9b\xbf\xa5\x55\x38\x88\xed\x8c\x0f\xa2\x25\x3a\x29\xb5\x5d\xc7\x74\x36\x6f\x54\xbc\x86\xd9\xd1\xfc\x24\x49\x74\x8c\xdf\x0a\x27\xd3\x04\xe9\x5f\xa2\x10\x4d\x4d\x66\xae\xc8\x18\x0a\x1b\x20\x2c\xb3\xd7\x05\xd9\xed\x10\x66\x0d\x72\xa7\x96\x95\xca\x1d\xeb\x37\xb7\xdd\x2d\x18\x72\xb7\xbb\x55\x38\x88\x01\xdd\x5e\xdb\x6d\x9c\x74\xba\x37\x5d\x0a\x92\xe2\x93\xb7\xf7\xad\x01\xf7\xd9\x7b\x2b\xaa\x5b\x4c\xd6\xde\xfb\x97\xe4\xa7\x0d\xad\xc8\xb2\x75\x06\xda\x3e\xdf\xdf\xc1\xca\x62\x15\x84\x21\x70\xbb\xfb\x45\xed\x9a\xf3\x69\x46\xe6\x03\x36\xd9\x30\x88\xe4\xac\xf4\x67\x0c\xd3\xb4\x74\xd2\x2e\x7a\xb5\x33\x86\xab\x06\x13\x21\x4d\xd8\xab\x9b\x0f\xa4\xff\x78\xed\x1c\x56\x9d\xa0\x81\x77\xd7\x37\x03\x15\x07\x38\x7a\xa2\xd1\x63\x93\xe2\xd4\x42\x34\x89\xdc\xb9\xe8\xc5\x5a\x0c\xa4\xa7\xfa\x3d\x76\xd2\x11\x3b\x59\xca\xf1\x31\x9a\x1d\x59\x3f\x23\x17\x4b\x2b\x4c\x57\x41\x08\x10\xf5\x0b\xa6\xa1\x4b\x2e\x06\x06\x31\x46\xd5\x3f\xe1\x55\xc1\xdc\xa5\x45\x08\xcb\x37\x7a\x22\x6d\x01\x84\xf8\x67\x6f\x4c\x35\x6f\x87\x78\x31\x0f\x8b\x1d\x13\x56\x53\x11\xf3\x6d\x22\x0c\x67\xc8\x79\x69\x2e\xfd\x63\x38\x88\xc3\x0b\x4a\x8a\xe5\xe1\x92\xd4\x8b\x8a\xae\x05\x3f\xb6\x1f\x3b\x6a\xc0\x9a\x3b\x60\xcd\x63\x4a\x0b\x49\x3b\xc7\xe3\xa4\x86\x3f\xc2\x02\x43\x54\x4f\x62\xea\x1d\x59\x93\x34\xb1\x37\x2a\x32\x1e\xf7\x0c\x07\x41\xd3\x25\xaf\x51\x56\x59\x96\x99\xef\x23\xfd\xb7\xdd\xc2\x13\x3d\xb7\xa9\x19\x50\x60\x29\xcb\x85\x54\xbf\xf3\x9e\xff\x03\x79\x4f\xc7\xc3\x4b\x00\xc0\xa7\xa0\x82\x9a\x1d\xcd\x71\x99\xb1\xd9\xf1\x1c\xe7\x19\x9b\x7d\x62\xae\xe4\xa7\x60\x35\xa3\x03\x64\x24\xf2\x0c\xc5\xc1\xf1\x94\x22\xe9\x44\x33\xca\x32\x2a\x2e\x02\x1c\x9b\x05\xd9\x72\x3c\x4e\xbd\xfa\xb9\xad\x9f\x8f\xc7\x89\x15\x40\x13\xca\x86\xe2\x8b\x4b\x69\xe0\xdb\x76\x6b\x0c\x11\xf2\x77\x62\xf4\x68\xfd\x95\x40\x04\x4f\x0c\x1e\xc8\x18\x7c\x75\x3e\x44\xae\x20\x6b\x31\xcb\x2a\x56\x4a\x4a\x7c\x04\x7b\xec\x6f\x4e\xfb\xda\xf2\xf1\x38\x31\xa0\x2d\x96\xc4\xc7\xe3\x11\x9f\x9c\x9d\xd1\xfa\xb1\x8a\xf2\xf8\x44\x63\x32\x71\xaf\xf6\xc1\x74\xa1\x30\xfa\xa1\xe5\x6c\xaf\xcf\xf6\x12\x3d\x8c\x24\xef\x71\x80\xa6\xe4\xc7\x74\xaf\xc5\x59\x01\x7a\x2f\xc1\x7c\x17\xd6\x7f\x58\x95\x0d\x89\x71\x96\x31\x00\x8a\xd0\xcf\xaa\x4d\x3f\x99\x43\x3f\x2b\x1d\xb9\xad\x82\x90\x6d\x6c\x46\x5d\xfa\x49\x35\xc4\x01\xbf\xe4\x82\x2f\x4a\x19\x3a\x21\x8a\xf7\x51\x09\x4d\x19\x8a\xbd\xdf\xf0\xf6\x04\xbc\x40\x72\x26\x74\x9c\x8d\x19\x17\x99\xc0\x30\x18\xab\xd2\xdc\xe5\x8c\xcd\x11\xe4\x72\x24\x7d\x8c\x4b\x16\x0d\xa0\xf1\x4e\xb3\x95\x51\x31\xb8\x0d\x87\x61\x67\xcb\xda\xec\x46\x6f\xcf\xac\x7b\x1f\xba\x0e\x22\xdc\x07\x66\xf6\xa1\x92\xfb\xd0\x82\xf5\x8f\x4b\xa9\x67\x3e\xac\x49\x44\xf7\xf4\x80\x57\x57\x25\x1c\xd0\x94\xb1\x23\x7d\x37\xba\x4b\x23\x24\xdc\x7b\xbc\xe1\x08\x45\x69\xd0\xe3\x9c\xb1\x92\x0f\x05\x7d\x1e\xe6\x43\xb8\x79\xc3\xbc\x1e\xe6\x66\xb7\x13\xd4\x20\x15\xe9\x14\xe9\x54\x34\x32\xcf\x80\x15\x3a\x5a\x31\xf9\x1d\x63\x27\xd1\x44\x00\x92\x65\x0a\xa0\x7d\x2b\x82\xbf\x8c\x94\xb4\x20\xaf\x48\xdc\xca\x0e\x2a\x15\xb4\xe6\x26\x36\x70\x4d\x7f\x26\xd9\x91\xdf\x77\xbe\x8c\x67\x62\xe3\x3a\x22\xfe\xe5\x86\x2e\x8d\xa5\x5f\x38\xb0\xb6\x88\x82\xa4\x36\x2a\x86\x8c\x90\x1d\xd9\xac\x9a\x0b\xf1\x49\x30\xc2\x26\x67\x90\x18\x9d\xea\xf7\x5b\x39\x3f\x7f\x2e\xd2\x56\xff\xa1\xa6\x23\x8e\x54\xd0\x4e\x31\x09\x74\xa7\x12\x81\x89\x1f\x4a\x37\x41\x27\x00\x87\x2f\x2e\x1c\x1b\xcb\xf2\x8b\xc3\xe3\xf1\x98\x4e\xea\x35\x88\x98\x25\xd6\xf9\x31\xd4\xe4\xd5\x95\x19\x1d\xa9\xb3\x1c\x1d\xfb\x2b\xe8\x4e\x5c\x6c\xa2\xd7\x89\x9e\xfc\x46\xab\xdc\x47\xa3\xf4\x22\xf5\x6a\xdb\x7c\x52\x12\xb6\xc3\x8d\x30\x1b\xaf\x1b\x39\x3b\x32\xe3\x73\x7f\x30\x65\x79\xd9\x1a\x70\xe4\x0e\xe8\x5a\x4a\xea\xbd\xfc\x24\xcb\x5a\xb8\x03\xf5\xa4\xef\x27\x92\x85\xb5\xd8\xe3\x78\x0e\xef\x62\x2a\x7c\x94\x6e\xa9\x10\x99\x1b\xde\x87\xa4\x5c\xe0\xd3\xc6\x9f\x38\x57\x6f\x2e\x11\x3d\xbd\x9e\xa6\x56\x0c\x04\xb7\xa7\x5c\xdf\xb6\x93\x3c\x31\x72\x93\x2a\xc0\x74\x88\xb5\x0d\xf8\x05\x11\xc8\xc8\x7e\x97\xcc\xa9\x84\x48\xb0\xfb\xb1\x13\xb1\x58\x14\xae\x27\xd4\x50\xcb\x83\xb0\xf2\x00\x6c\xe6\x34\x84\xc8\x4a\x9a\xd4\x65\x4a\x78\x1b\xbf\x56\x84\x2d\x49\x75\x78\x55\x2e\x21\x40\x41\xfd\xb1\xfd\x6b\x49\x97\x87\x94\xd5\xa4\xe2\xef\x21\x07\xbe\xb3\x80\xf4\x4f\xa3\x6b\xdd\x53\x92\x78\xff\x37\x1b\xf7\x99\xfc\xac\x26\xfc\xb9\x3a\x29\xf5\x4e\xda\x36\xcd\xb8\x5b\xe4\xeb\xfc\x9c\x16\x94\x53\x52\xab\x20\x11\x67\x57\x7e\xab\xc7\x4e\x95\x34\xf9\x74\x72\xfc\x69\xa2\x23\x9e\xeb\xfe\x7d\x6f\x3d\x58\x55\x51\xb4\x0b\x3d\x0d\x21\x4f\xd9\x64\x5d\xd6\x60\x4e\x9d\x17\xe8\x51\x7a\x84\x41\x7d\x99\x56\x98\xaa\xeb\x76\x8c\x30\x9b\xb0\xfc\x8a\x2c\x51\x83\xa5\x7d\x4c\x7c\x44\x65\x94\x15\x2d\x6c\xac\x31\xc5\x2f\x48\x9e\x41\x8d\xaa\x4f\xa7\xba\xf7\xa5\x92\x8b\xfd\xfd\x52\xfd\x7e\xa9\xbc\x8e\x49\x41\xc4\x7e\x4b\x3f\xf1\xde\x8b\x06\x5e\x79\xaa\x7a\xc6\xbb\x6f\x0f\x71\x3d\x68\x55\x7d\xc1\xeb\xa4\x55\xfc\x72\x32\xf7\x72\x56\xe6\x72\xfe\x4b\x5d\xc0\x1b\x5a\x14\x87\x26\x51\xe8\xef\x57\xf0\xf7\x2b\xf8\x41\xaf\x60\x2f\x01\x7b\x98\xfb\xf9\x1b\xbb\x82\x52\xe9\x94\xff\x98\xbf\xb5\x8a\x26\xe5\x79\xff\xfb\x7b\x42\xf7\x7b\x42\x8f\x48\xe4\x67\x29\xb4\x1a\xe0\xcc\xfd\xb1\xdd\x8e\x8e\x71\xeb\xdd\x11\x27\x70\xf3\x12\xca\x86\xf2\x5d\xf2\xa6\xa2\xdc\xbc\x49\x76\xdd\x5d\xa6\x22\x1f\x36\x9e\xfe\xdb\xba\x49\x8d\xaa\xed\x56\x2b\xa9\x85\x00\x98\x56\xc8\xdd\xaf\x91\xde\x2f\x7f\xdf\x83\x80\x11\x06\x02\x4d\xe4\x5d\x05\x86\x02\xc0\x86\xab\xbc\x66\x1f\xf1\xe1\x39\x21\x6c\x08\x6e\x79\x79\x41\x6b\xb2\x1c\x1e\x0e\xc1\xee\x3f\x45\x5e\x0d\x01\xb2\xc4\x89\xed\x02\x58\x77\x5a\x79\xa6\x23\xae\x9f\x57\x4a\xb3\x64\xc3\xe4\xba\x97\x76\xbe\x2f\xc9\x45\x41\x16\x7c\x3c\x56\x7f\x4c\x2e\x09\x3f\x71\xfe\xee\xf0\xbc\xf4\xef\x9b\x38\xc8\x47\xa3\x16\xb2\xf6\x9f\xb8\x15\xca\xc6\xdc\x6a\xf7\x53\x92\x95\x02\x89\x3f\x42\x8f\x9c\x55\x68\x27\x6e\xcd\x58\xab\x7e\xa5\xed\xa7\xee\xcd\x6a\x36\x53\xe6\x84\xaf\x85\x68\x59\x27\xf0\x5f\x39\x5e\x85\xa6\x54\x3e\xd7\x34\x02\x08\xc5\x1a\xb6\x5b\x17\x16\x4b\xe7\xc2\x95\x7a\xac\x9a\xf0\x6f\xf5\x32\x5e\x5c\x9c\xd8\x19\x38\x5f\xa3\x77\x68\x72\x76\x06\xeb\x3f\x3b\xdb\x6e\xa3\xad\x20\x16\xa3\x77\x19\x72\x57\xc5\x99\xe6\xf1\x29\x84\xef\x68\xed\xf1\x32\x8e\x89\x5c\xe1\x43\x11\x28\x5f\xd5\xe2\x62\x28\xc7\x7b\xf0\x43\x22\x5e\xe5\x47\x8f\x30\x93\x7f\x95\x29\x47\xf2\x54\x6d\xd0\x19\x30\x6b\xa8\xf1\x06\x17\xb1\xe4\x20\x30\xa3\xc8\x2d\xe5\x06\x04\x79\x7c\x7a\xaf\xc4\x8d\x1b\x92\xb7\xeb\x8a\xd4\xb5\x58\xf5\xd5\xa6\xe6\x43\x42\xf9\x8a\x54\xc3\x73\x02\x56\xd0\xc3\xb2\xf2\xe6\x3b\x70\x54\x29\x81\x06\x84\x8f\xc7\x6e\x12\xbe\x3b\x07\x97\x4e\xd5\x39\x10\xac\xf1\xd4\x74\x74\x84\x5d\x9c\x26\x8e\xa8\x41\x98\x8f\xc7\xb9\xb2\xc9\xe6\x91\x3c\x3b\x10\x85\x13\xa7\x1b\x9d\x2b\x93\xaf\x08\x4b\xb0\xec\x3b\x26\xb0\xe6\x19\x4d\x4b\x37\x35\x20\xc2\xaa\x8d\xf4\x7c\xf4\xf6\x19\x33\x27\x6a\xf1\xdb\x95\x72\x64\x7b\xbb\xaa\x70\x2e\xb3\x0c\x56\x69\xed\xac\x6f\x83\x70\x01\xdf\x70\x81\x30\x6f\x52\x97\x6e\xd6\x3b\xe8\xa6\xe8\xa0\x4e\xf0\x6c\xee\xe6\x32\xdb\xd1\x46\xbe\xf1\x5c\x12\x7e\xb8\x22\xf9\x92\xec\xfb\x88\xff\x20\x6f\x5d\x0a\xc8\xbc\x64\x65\x82\xfd\xf4\x3e\xf0\xe0\x71\x5a\x25\xcb\x49\xfd\xac\xb0\x08\xa2\x70\xc6\x23\x3b\xf0\xf2\x9b\xf2\x46\xf0\x78\x35\x49\x11\x64\x7c\xf2\xbe\xd8\x78\xb5\xd5\x09\x99\x55\x73\xe5\xe2\xd6\xec\xb5\x71\xb4\x3e\x54\x6f\xb2\xbf\xe8\x1b\xa1\x9c\x70\xeb\x39\x98\xec\x37\xe9\x75\x5e\xd5\xe4\xb0\x22\xf5\xba\x64\x35\x51\x07\x5f\xff\xb2\x2b\x90\x87\x29\x53\x96\xdb\x08\xa2\x8e\xc9\x54\xbd\x2e\x28\x17\x58\xab\x22\xcb\xcd\x82\xc4\xac\x71\x30\xcb\xb8\xaa\x97\x4c\x13\x84\x69\xa8\x6f\xee\x11\xb3\xaa\x8c\xfd\xca\x82\x56\xf5\x21\x05\x2d\x5c\x82\x75\x20\x78\x22\x69\x19\x60\x50\x66\xe5\x84\x57\xf4\x2a\xd5\xf1\x1b\x73\x6b\xae\xa6\x0b\xb4\x17\xf7\x78\x9c\x92\x59\x39\xcf\x6a\xc8\x67\x54\x81\xb6\xfb\xf1\xcb\x6f\xbe\x72\xa9\x1c\xcf\x92\x7f\x54\xff\x60\xc9\x40\x15\xf1\xbd\xa0\x6f\x53\x15\x87\x2b\x52\xac\x3f\x28\xc8\x01\x88\x7f\xf7\xf2\x9b\xac\x92\x16\x0a\x9b\xa2\x10\xbf\xda\x77\x68\x34\x22\x93\x2b\x30\x39\xe1\xb0\xc6\x55\x7e\x4d\x5e\xe5\x57\xe4\xeb\xb2\x0e\x51\x95\xb1\xe7\x10\x90\x56\x39\xe9\x1c\x98\x3c\xfc\x45\x59\x64\x99\xcc\x2d\x04\x3f\xc6\x63\x36\x59\x95\x35\x17\x82\x17\x14\xe8\x1f\xa2\x40\x2c\x5a\xd6\x2e\x2b\xde\xa8\xed\xfc\xf8\xff\xa5\x2b\xce\xd7\x5b\xf1\x9f\x1a\x7d\x3c\x70\xb9\x7e\xf5\x5c\x02\x99\xf1\x2d\x33\x6a\xae\xfe\x57\x79\xcd\xbf\x2c\x4b\xf3\x94\xb5\x2c\x17\x00\xa3\x8a\x8c\x3e\x95\xe2\x62\x9a\xe4\x10\xbd\x64\x55\x91\x8b\x8c\x60\x21\x8a\xc9\x8c\xef\x99\x6e\x3f\xa9\xe4\x63\x72\x9a\x6c\xaa\x22\x41\x72\x23\xed\xf3\xcf\x9d\x68\x39\xe5\xd0\x01\xd6\x0b\x9d\x72\xb3\x66\xac\xd7\x28\xea\xa8\x3f\xb1\x58\xa2\xa8\x53\x56\x1c\xaf\x73\xbe\x52\xe5\xfa\x4f\x5c\x93\xbc\x5a\xac\xa6\x82\x71\x13\x7f\xe0\x55\x5e\x8b\x5f\xe2\x9f\xa6\x03\xa3\x89\xff\x1c\x56\x32\x01\x90\x6f\xc6\xe0\x54\x02\x97\xad\xda\xaf\xfb\xf0\xd6\x0a\x9d\xda\x09\xd5\x9b\x72\x30\xb3\x36\x98\xbb\x25\x61\xe9\x03\xf4\xbb\xfc\xdb\x2d\xff\x3e\x2c\xb7\xfc\x2f\x25\xb7\xfe\x8b\x31\xee\xb5\x64\xdc\x7d\xa1\x53\x51\x9f\x36\xcc\x3d\xcf\xd7\x27\x2a\x1d\xb1\xe2\xe3\x06\x46\x40\x0d\x4e\x49\x87\xab\xda\x6e\xd3\x2a\x23\xf8\xf0\x38\xcb\xb2\xaf\x54\x95\x80\x86\x57\xc8\xbc\xe2\x27\x33\x96\x73\x7a\x4d\x86\x8b\x72\x49\xe6\x4e\xf0\x06\x22\xef\xfe\x20\xbe\xf9\xe4\x01\xb7\xdc\x8d\x37\xa1\xf3\xac\xae\xf2\xda\xe1\x34\x40\x72\x96\xd1\x34\x6b\x88\x6a\xc3\x3c\x18\x37\xf7\x56\x08\x45\xe6\xe9\x1c\x6f\x54\xe0\x16\xf7\xa5\xba\xf1\x49\x5c\xe4\x98\xc9\x8e\x33\x66\xd8\xf5\x82\x3b\xde\x75\xe2\x75\xca\x70\x5c\xce\x77\xf4\x31\xb9\xfb\xd2\xde\x41\x10\x95\x22\x66\xbb\x1d\x69\x95\x8c\x99\x9c\x35\x75\xa0\x17\x69\xab\x74\x52\xaf\xf2\x2b\xaf\x4a\x04\xce\xdc\xa4\x86\x23\x69\x1b\xab\x76\xea\x49\xce\x49\x27\x33\xd8\x1a\x2c\x15\xd5\x5b\x12\x1b\xc2\xa3\x23\x65\x08\x6b\x19\x95\xe3\xa6\x49\xd1\x49\xab\x87\x0e\x2d\xd3\x4c\x80\xce\x7c\xc0\xc0\x12\xc6\xd8\xed\x73\x1d\x79\x97\x91\x9b\xd4\x00\xfb\x39\x65\x4b\x55\x45\x80\x8a\x9b\x77\xb9\x4e\x29\xf6\x5c\x06\x68\x83\x74\x6f\x90\x70\xdb\x44\xd1\xb0\xa7\x55\x7b\x5a\x99\xfa\x21\xb4\x32\xa6\xef\x8d\x43\xe3\x36\xbf\xa0\xca\xe9\x9d\xec\x62\x4f\x7f\xcc\xdf\xc2\x45\xcf\xce\xe0\xf7\x77\x2c\xdf\xf0\x55\x59\xd1\x9f\x89\x74\xd6\x8f\xd9\x35\x9e\xa5\x04\x9d\x78\x94\xed\x62\xfa\xd9\x11\x58\xc1\x36\x92\x97\x2d\xab\x73\xba\x5c\x12\x76\x8f\x2e\x56\xd3\xcf\x8e\x3e\xb5\x5d\xb8\x01\x03\xf6\xeb\x60\x31\xfd\xec\x93\x4f\x6c\x07\x5f\xe6\x3a\xfb\xe2\x3d\xfa\x58\x4e\x3f\x3b\x3a\xb2\x7d\xfc\x55\xe5\x53\xbd\x47\x0f\xeb\xe9\x67\x47\x9f\xd9\x1e\xfe\x54\x32\x72\x8f\xd6\x57\xd3\xcf\x8e\x9d\xf1\x5f\xd3\x2b\x52\x6e\xba\x17\xe0\xb5\xbd\x96\x6d\x4e\xcf\xcb\xea\x3e\x4b\xbe\x9d\x3a\x03\x3e\x2e\xd9\x45\x41\x17\xf7\x69\x7f\x39\xfd\xec\xe8\x0f\xb6\x87\x57\xa4\xba\x26\xd5\x3d\xda\x9f\x4f\xc9\x17\xd9\xbf\x1f\x1d\x8d\xc7\xe4\xf3\xff\x38\x3a\x52\xbd\x6c\x16\x0b\x52\xd7\x2d\x71\x9c\x67\x64\xd0\x56\x29\x40\x0a\x69\x90\x02\x9e\x31\x41\x4a\x8e\x8f\x2c\x82\xe0\x5f\x64\x9f\x88\xce\xf9\xe7\x9f\x1e\x1d\x6d\xb7\x9f\xc2\xe1\x70\x31\x8a\x3b\x53\x32\xf1\x57\x4e\x26\xce\x36\x92\x89\x77\x0e\x64\x62\x0f\x95\x4c\x7c\x10\x21\x93\x10\xec\xc8\x24\xb8\x0c\x64\xd2\xbe\x63\xc4\x8b\x8f\x21\x46\x37\xd7\xd2\x61\xda\x8b\x4e\x8d\xad\x0e\x06\x52\xb6\x1d\xd9\x8e\xa3\x8e\x6c\xc7\xae\x23\xdb\xf1\x7c\x9a\x88\x01\x87\x02\x65\x80\xa3\xfd\xf0\x22\xa7\x82\x8d\xc3\x79\xbb\xc3\x4f\x9c\x96\x9f\xcc\x7d\x0e\x66\x58\x19\xa5\x6e\x4a\x33\xa5\xd7\xdd\xf8\x7a\x5d\x88\x78\xa2\x82\xd1\x67\x04\x53\x08\x71\xbc\xa9\xb3\x1c\x53\x4d\xc9\x69\xca\x71\x99\xc2\xfa\x91\xd1\x30\xda\x2d\xd1\x1e\x55\xdd\xbb\xd1\x9a\x4d\x7c\x2a\x04\x27\xea\xac\x20\x54\xac\x4c\xcf\x49\x96\xc3\x73\xb2\xc8\x85\xf8\xa2\xb2\x6a\x52\x79\x36\x09\xfe\xec\x93\x4f\xac\x4b\x99\x98\xa4\xd5\x7f\x7a\xe7\xa7\xfd\xb7\x1e\x62\x82\x70\x30\x1a\x5e\xfc\xc3\xf9\xec\xe8\xb8\x6b\x3a\x11\x34\xae\x12\x7e\x7d\xf0\x4d\xdb\xd4\xa4\x1a\x52\x99\x8b\x74\x4d\xaa\x2b\xca\x45\x29\x2f\xc5\x8f\x8b\xb2\xba\x02\x2b\x45\x0b\x6a\x13\xb1\x8e\x4f\xbb\xd6\x11\xdc\x9d\x95\x4a\x02\xf3\xd0\x8b\x10\xf3\xca\x61\x9e\x94\x2d\xca\xaa\x22\x0b\x5e\xdc\xc2\xcc\x8e\xba\x66\x16\xde\x73\x99\xcb\x72\xfd\x40\x53\x93\x21\x2c\xc3\x9c\xae\xf8\xb3\xa3\xcf\xba\xe6\xe3\xe3\xa1\x35\xcc\xe6\xea\x61\x67\x03\x87\x3a\x2c\x4a\x76\x49\xaa\x61\x7e\x9d\xd3\x42\x30\xc5\x62\x5a\xc7\x9d\xdb\x64\x51\xe5\x15\x4c\xe9\xba\x6b\x4a\x7b\xcf\x48\x66\xb6\x78\xbd\x22\xc3\xdc\xc7\x59\x9c\x5e\x91\xe5\xb0\xdc\xf0\x04\x1f\x76\x5e\x0c\x0f\x93\x5f\xc3\x94\x6e\x3f\xdc\x94\xc4\xf9\xe5\x82\x90\x88\xeb\xda\xb9\x47\x0e\xa9\x91\xd9\xc6\x2f\x1f\xe4\xdc\x22\xf3\x91\x98\x63\xb8\xdc\x10\x71\x21\xf3\xe1\x42\x11\x3d\x01\x59\x7f\xe8\x9a\x9e\x4f\x19\x2f\x61\x86\xe7\xdd\x8f\x87\xf4\xbd\x31\x89\x9a\x5e\x0d\xf4\x79\x08\x8a\xa6\x04\xd3\xf8\xf4\xcc\xd0\x67\x5d\x6c\x51\xd1\xf8\xa4\xfe\x3c\xae\xcf\x8a\x84\x01\x71\x4a\x3f\x8c\x6a\xee\xc1\x62\xbf\xa8\xfa\x7e\x4c\x96\x1d\x5a\xc6\xae\xa5\x6a\xc5\x9e\xfb\x4d\x6a\xc5\xc5\x9f\xfe\xf7\x3d\x1f\x6d\xf6\x7c\xd5\xdb\x57\x21\xbf\xdf\x5b\x57\xaf\xd9\x4e\x18\x96\x45\xa6\x79\xc2\x39\xae\xbb\x34\x97\xbe\x54\xf7\xaf\xa5\xb9\x7c\x18\x9d\x72\xa1\x74\xca\xaf\x49\xcd\xf1\x22\xfb\xf8\xff\x39\x81\x40\xff\xf1\x71\x7a\x32\xbd\x66\xcb\x7f\x4c\xf2\x35\xfd\xc7\x01\x3a\xf9\xb1\x2e\xd9\xc7\xd4\x6e\xef\x85\xfb\xdc\x91\x1e\xe1\xdc\x0d\xa8\x30\x1e\xdb\x27\x10\x37\x46\x9b\xa3\x7a\x48\x3e\x4e\xc0\x09\x73\xb1\xca\xab\x53\x9e\x1e\xf9\x19\xe9\x3b\x6a\x69\x9f\xcd\xc3\x63\x3f\xdd\xbb\x23\x7d\xd7\x9b\x73\x09\x50\xa9\x5b\xe7\xca\xaf\x03\x8f\x57\x47\xd8\xeb\xe6\xda\xa9\x22\xc3\x34\xa6\x24\x5b\x83\xbf\xcf\x52\xff\xbc\x82\x9f\xa4\x91\x54\xe8\x68\x20\xf7\x8f\x93\x9a\x53\x76\x39\x1e\x17\x26\x88\xdb\xf7\xb9\x80\x9e\x48\xa8\x42\x21\xba\xdd\x2a\x5f\xaf\x4b\xb5\xff\x10\x10\x4e\xab\xbe\xee\x16\x25\xe3\x84\xf1\xd7\xb7\x6b\x32\x75\x23\xc4\x7f\xfc\xf6\xf0\xe6\xe6\xe6\x50\x70\x3e\x87\x9b\xaa\x20\x6c\x51\x2e\xc9\xf2\xd1\x50\x6c\x4d\x4d\x78\xf6\xdd\xeb\xaf\x0e\xff\x2b\xc1\xea\x0e\x2b\x36\x1f\x9e\x4e\xf4\xdf\x2c\xbf\x22\xf5\x3a\x5f\x10\xfd\x81\x57\x9b\x9a\x93\xe5\xd7\x65\xcd\x4d\x03\x85\x6d\xa2\x11\xa6\xc1\xca\xa0\x94\x39\xbb\xe0\xbb\x76\x64\x3a\xbb\xca\xdf\x10\x45\x1a\xa4\x4b\x24\x23\x37\xc3\x5a\x83\x44\xf0\xce\xca\xda\x09\xdc\x55\xff\x13\x8d\x8a\x06\x24\xad\x22\xf9\xdc\xcd\x1b\x2f\xb1\x35\x21\x6e\x3c\x6a\x5c\xf4\x31\x1d\xda\x50\x1a\x10\xed\x1f\x27\x43\x1b\x4f\xa3\x9a\x6c\xaa\x02\x27\x43\xdd\x43\x82\x1c\x73\xa5\xb7\xab\x2a\x63\x60\x49\x41\x1b\x5c\xe5\x37\xfb\xed\x83\x9f\x4d\xc0\xdf\x8c\x06\xbb\x1f\x5a\x71\x57\x65\xa0\x5d\xac\x52\x02\xaf\xca\xe5\x76\x2b\x33\x14\x6c\xb7\xc9\x9f\x9e\xbe\x4e\x70\x91\xdd\xc9\x82\x69\x8e\xc5\xf7\x69\x8e\x37\x55\x31\x25\x62\x15\xcd\xa3\x68\x40\x09\xd0\xe4\x69\x20\x82\x07\x6d\xc8\xb8\x58\x66\x7c\xa2\xc0\x43\x4d\x18\x46\x18\x65\x19\x19\x8f\x47\xe9\xe8\x02\x1e\x23\x46\x10\xdd\x83\xda\xeb\x5c\xe2\xe4\xb1\xec\xee\x50\xf4\x97\x20\x84\x3c\x87\xf2\x4d\xca\x50\x83\xd2\x1c\xcb\x4b\x02\x63\x65\x7f\x7e\xf5\xe2\xaf\x13\x79\x11\xe9\x85\xcd\x1b\x81\x6f\x0f\xb2\x63\x25\x0d\xaa\x60\x19\x1a\x69\xc0\xa9\x10\x84\x57\xdd\xb0\x53\xa1\xbb\x05\x38\xff\xdb\x8f\x54\x92\x00\x19\x09\xa4\x9c\xac\x20\x75\xdb\x4b\x75\xb2\x69\xad\x64\x55\x9c\x1e\x61\x66\xc7\x82\xd8\xd7\xa7\x45\xa1\xeb\x7d\x2d\x37\x25\x45\x08\x53\x5c\x20\x13\x22\xc6\xd1\xb6\xa1\x74\xa3\xe2\xbf\x2c\xb2\x3b\x25\x0c\x4f\x29\xe6\xe4\x2d\x44\xfc\xdb\xd4\xd3\x1c\xff\xf8\xd3\xdf\xbf\x7e\x39\xad\xb1\x06\xac\xe9\xa6\x51\x18\xa2\xda\x30\xf9\x2a\x0e\x8c\x67\x85\x17\x32\x35\xc4\x9d\x94\x3a\xdf\xb7\x3f\x82\x2f\x50\xd3\xa0\x89\x60\x16\xdd\xed\xa2\x38\x47\x77\xa6\xc1\x33\xf6\x84\x9c\x6f\x2e\x5d\x9c\x04\x1c\xa7\xe2\xda\x24\x40\x90\xe5\x30\x67\x43\x72\xb5\xe6\xb7\x43\x79\x7a\x90\x89\xc5\x5c\xa7\xa2\x7d\x9d\x0a\x79\x9d\xf0\xf0\x66\x45\x17\xab\xe1\x42\x3e\x8d\x9d\x93\x21\x30\x17\x42\x40\x03\xce\x55\xda\x1c\x00\x58\x0c\x5f\x2a\x44\x2c\x9f\x24\xf4\x7b\xc4\x5d\x33\x49\x10\x4e\xa0\x59\x25\x99\xc8\x0c\x22\x14\xd8\xcb\xfe\x9a\xbc\xe5\x0a\x79\xd6\x90\x7e\x15\x2a\xc3\x01\x99\x33\xf7\x6b\xa3\xed\x36\x1f\xd4\x59\xc2\xa5\x18\x01\x3d\xc2\x63\x0e\xf7\x24\x8b\x69\x02\x5c\xbf\x5b\x6c\x99\xfc\x69\x0b\xae\x48\x1c\xae\x48\x37\x5c\x6d\xb0\x4a\x59\xeb\x80\xcf\xc6\x3d\x6e\xaa\x8e\x9b\x60\x58\xfa\xeb\x55\x55\xde\xb0\x69\x6e\x0f\xbf\xee\x01\x26\x34\xc9\x8b\x9b\xfc\xb6\x76\x0f\xf7\xf6\x30\x3b\xee\xc6\x8b\xa4\x7d\x90\x70\x03\x2d\x2e\x5c\x01\x2e\x5c\xe0\x55\x83\xd7\x65\x8b\x20\xb8\x08\x4f\x91\x0c\x51\xa0\x42\x56\x2f\x05\xa2\x78\x5d\xaa\xf4\x8e\x90\xd3\x0d\x27\xdf\xbe\x78\xf5\x3a\x41\x90\x64\xe5\x21\x7a\xfb\x4e\x75\x26\x28\xc4\x03\x74\x77\xfa\xfa\xf1\xd7\xd0\xa1\x1f\xd5\xf9\x1d\xbb\x7b\xf2\xf4\x9b\xa7\xaf\x9f\xea\xfe\x08\x0f\x33\x36\xb8\x5d\x42\xfa\x1a\x48\xbc\xe0\xdb\xf7\xc2\x2b\x54\x5b\x3d\xb8\xdd\x1e\x1e\x43\x46\x79\xf3\x7a\xf8\x71\x82\xba\x32\x2b\x3d\xe3\xc3\x9a\x90\xab\x7a\x78\x5b\x6e\x86\xbc\xa2\x52\xb1\x23\xf8\xe5\xff\x16\xb0\xfa\xdf\xe2\x97\xa0\x4e\xc3\x7c\xa8\x56\x36\x1a\x7e\x57\x93\x21\x5f\x89\x1a\xea\xd3\x7f\x0f\x25\x01\x02\x21\x8d\xe4\xcb\x49\x12\x66\x63\xef\x8e\x83\xde\xe0\xd8\x16\x45\x77\x23\x25\x19\xd9\x6e\xef\x1a\x04\xa0\x09\x2f\x35\x90\xb1\xfd\xab\x4d\x51\xa8\x9b\xf4\x75\x1e\xcd\x91\x64\xa3\xd2\xc3\xe8\x89\x96\x63\x82\x04\x34\x79\x5d\xd3\x4b\x96\xde\x35\x98\x63\x82\x1a\xac\x28\x78\xa4\xc3\x77\x54\xca\x9a\x44\xa8\xa9\x9e\x93\x33\x24\x42\xe2\x7e\x29\x7e\xe9\x7c\x43\x8b\xe5\x77\x2f\xbf\x91\x5c\x14\x57\x2b\xf6\xe8\xbe\x24\xda\xaf\x65\x81\xfe\x73\xbb\x4d\x04\x23\x2e\x4a\x1d\x12\x9f\x69\xe3\x46\x70\xe1\x4e\xbd\x32\x74\x12\xee\x8e\x53\x98\xa0\xa9\xcf\x2b\xa8\xf3\x84\x54\x94\xaf\x08\x5b\x6a\x0c\x06\x69\xae\xd4\xb6\xaa\x25\xb4\x4f\x26\x35\x55\x44\xb7\xa6\xb6\xfe\x4b\x9c\x2d\xe6\x0d\x36\x8b\x7f\xd0\x8d\x97\x34\xbb\xb4\x76\x59\xc8\xb5\xcd\x73\x83\x10\x49\x23\x22\xe3\x95\x6f\xa1\xa6\xac\x79\x82\x06\xe0\xa4\x90\x2d\x53\x86\x4e\xae\x52\x86\xa6\x0c\xab\x30\x43\xcc\x49\x31\x6a\x58\xe9\x76\x37\xa6\x28\x41\x03\x2a\xfa\x3a\xa1\xd9\x75\x4a\xd1\x74\x09\x81\x77\x52\x9a\x5d\xa5\x14\x21\x2c\xed\x37\x2e\x9f\xbe\x5d\xa7\xc9\xff\x4b\x3f\x46\x27\x06\x37\x8b\xda\x18\x6e\x35\x88\x16\x60\x27\xa8\xe6\x40\x1d\xfc\x0c\x42\x89\xd8\x97\xca\x44\xb2\x31\x12\x4b\xa5\x83\x15\x60\x15\x86\x5c\x74\xd7\x60\x9f\x8c\xf5\xe4\x82\x12\x27\x6c\x1e\x75\xd4\x23\xf0\x49\x35\x4d\x15\xef\x6b\xa2\xcb\x06\xa4\x17\xea\x29\x20\x92\xf2\xcc\x63\xa9\x9c\x95\xe8\xc8\xc9\x38\x1c\x29\x0e\xcc\xa2\x4d\x02\x60\x48\xb9\x25\x27\xd4\xd2\x92\x2b\x0b\x6a\x24\x53\x8f\xf1\xb6\x1a\x3d\x65\xca\x6b\xdf\x76\xe2\xab\xa8\xc3\x1e\x82\xd2\x76\x73\xf7\xe1\x20\x6c\xec\x95\xb5\x9b\x06\x2a\xe8\xb0\x75\x58\xdc\xee\xc0\xd3\x19\x87\xcd\xfd\xc2\x76\x63\xa3\xd9\x0d\x1b\xda\x82\x76\x23\xcb\x05\x85\xad\x6c\x49\xd8\xc6\xd3\x3f\x86\xcd\xfc\xc2\xf6\x80\x8e\xe6\x2f\x6c\xea\x16\x31\x4c\x9c\x3c\xaf\xb9\xce\x68\xc3\x48\x95\x73\xf2\x84\x70\xd0\x9b\x3e\x27\x75\x9d\x5f\x12\x03\x4f\x03\x33\x77\xcd\xd6\xa7\x0c\x0b\xb9\x45\x2b\x2a\x4b\x10\xd6\xf8\x62\x25\x45\xe2\x18\x95\x8a\x29\x3b\x52\xee\xea\x2f\xe5\xa5\x3e\xe1\xfa\xf2\x4e\x5b\xef\x9f\xfc\x84\x67\x59\x46\xa6\xe9\xa2\x64\x75\x59\x90\xc9\x4d\x5e\xb1\x34\x71\xc5\xf1\x61\xc9\x8a\xdb\xa1\xbc\xaf\xb5\x62\xc5\x6b\xc1\x25\x57\xe4\x92\xbc\x25\xf5\x64\x98\x60\x8e\x13\x50\xf1\x4b\x3e\x5a\x30\xcf\xa3\x63\xb8\x5b\x2d\xfc\xdd\x91\xed\x03\x32\x3f\x08\xee\x9d\x65\x04\x90\xe2\xa0\xca\xaa\xed\x36\x49\x30\xcb\x58\x17\x82\x14\xe5\x61\x36\x1c\x55\xc1\x5d\x40\x62\x6c\xee\x4f\x53\x84\x21\xc0\x67\x69\x2c\x68\x51\x5a\x21\x63\xca\xa9\x83\x80\x84\xe8\xbb\x42\xdb\x6d\x3a\x1a\xd1\x4e\x2b\x7c\x3e\x71\x0e\x0b\xe4\xcf\x46\x34\x11\xdd\xb8\x16\xb7\x28\x55\x38\xa7\x03\x3c\x22\x68\x10\xf0\x8e\x9c\xb4\x23\x08\xf3\x50\x10\xde\x6e\x13\xa0\xb8\x43\xef\xf3\xa0\xcc\x12\xc1\xd8\x7f\xbc\xe2\x57\x85\x90\x28\x72\xdf\x37\x60\x3c\xae\xcc\xd3\xec\xbf\x1f\x9d\x24\xb3\x17\xea\xc9\xed\x1b\xf8\x78\x3b\xfc\xfa\xf5\xf3\x6f\xe6\xc9\x34\x10\xa1\x2b\x6d\x60\x6d\xe3\x84\xb2\x36\x13\xcf\x80\x89\xc7\x9b\x2c\x51\x89\x04\x87\xa9\xa9\x9e\xe3\x04\x19\x9e\x68\x96\xc0\xe9\x0c\x4f\xff\x7c\xfa\xf7\xa1\xd6\xea\x9b\xaa\x35\xe8\x47\xb4\x44\xe8\x0a\x09\x42\x94\x29\xe7\x8a\xa8\xfc\x83\x09\xaa\x12\xc1\xcb\x2d\x17\x17\xc5\x17\x49\xa9\xba\x55\x1d\x94\x9a\x38\x44\xcd\xfd\x9d\xf8\x75\x75\x0f\x2e\x06\xee\x6f\xef\xd6\xd4\xad\x03\x0c\xdc\xdf\x41\x50\x59\xf7\xe1\xa1\xe1\xfe\x1e\xbc\xaa\xba\xbd\xc1\xc6\xfd\x6d\x4d\x35\xdd\xce\x91\x57\x7b\x1b\xda\x7a\xba\xa5\x87\x92\xfb\x1b\x7b\x55\x75\x7b\x07\x2f\xf7\xb7\x76\x2a\x9a\xb6\x92\xc5\xd8\xd1\x4e\x56\x92\x6d\xda\x22\xbf\x9f\x7c\xce\x5a\xcd\xc1\x05\xd2\xb6\xe6\xca\xf4\xcd\xb1\x0a\x6b\x9c\x84\x7a\x5d\xfd\x79\x99\xf9\xaa\xc6\xf3\x38\xbe\xdc\xfd\x74\x53\x6f\xd6\xeb\x72\xef\xe0\x35\x0f\xa3\xd5\xe7\x51\xad\xb2\x98\x8e\xd8\x7e\xba\x20\xca\x5d\x9d\x32\x65\xe7\x06\x1f\xd3\x04\x1e\x8b\x90\x54\x18\xcb\x1a\x0b\x15\xe9\x70\x92\x17\x34\xaf\x65\x0d\xd5\xc7\x44\xd2\x02\x47\xa5\xbc\xbb\x89\xc3\x18\x1b\x2d\xf5\x1e\x03\x69\x59\x0e\x83\x06\x23\x6e\x98\x28\x73\x95\xfd\x98\xbf\x55\x22\x66\x5c\x16\x6d\xa7\x23\x95\x64\xcb\x19\x2e\x41\x8e\x84\xcf\x90\x7f\xe0\x1d\xae\x28\xea\xc0\x0b\x72\x99\x2f\x6e\x3f\x36\x20\x75\x08\x7a\x1c\xf3\xb8\xd6\xf9\x7c\xd7\xf9\x20\xd6\xfb\x74\xe9\x7b\x71\xa8\xdb\x12\xcd\xd2\xf3\x4f\xfc\xcc\xe5\x9a\xd0\x9b\x17\x21\xab\x78\xae\x1e\xee\x29\x8c\x46\x2f\xcd\x6e\xf4\x50\x39\xaf\xe7\x81\xe6\x66\xc4\xac\x00\x6a\x02\xa0\x19\x66\x67\xc4\x55\x52\x96\xf1\x58\x0b\xef\x2a\x8e\xa1\x4e\x8b\xd4\xa4\x34\xf3\x9c\x16\x29\x3a\xb9\x6b\xa6\x14\x9d\x50\x55\xc5\xcf\x3b\x2d\xad\xb6\xc5\xbf\x7e\x3a\x23\x57\x05\x61\xac\xbe\xb4\x0d\x97\xe5\x25\xb8\xfa\x84\x70\xa5\xb8\xe1\x3b\xf9\x61\x6a\xeb\x10\x84\x39\xe5\x05\x99\xf2\xa6\x41\xd3\xb4\xcc\x28\xf6\x27\x5f\x8a\xc9\x85\xb3\xd2\xd6\xde\x29\x47\x27\x7d\x7d\x4e\xe0\xdf\xed\x16\xb4\xd2\xe7\xf9\xe2\x0d\x61\x4b\xf5\x48\xb3\x24\xcb\xe1\x0d\xe5\x2b\x50\x4e\x4b\xf3\x82\x25\x30\x71\x53\xde\x4c\x7b\xfa\x74\x96\x87\x60\xca\x5e\xd8\x72\x8a\x4e\x66\x3d\x8d\x69\x33\x9f\xf6\x96\xbf\xd3\x84\x69\x33\x97\x8c\x5c\xe9\x23\x17\x1a\x47\x2e\x55\x7e\xd3\x89\x39\x7e\x11\x1f\x24\xff\xf9\x25\x34\x60\xd0\x57\x05\x4d\xaa\xfc\x06\xaa\x74\xf8\x56\xed\x32\x62\xf8\x6d\xad\xc5\x90\x80\xce\xf5\x28\xb2\xa9\x6d\x2c\x1e\xca\x59\xec\x7f\x1c\x5a\x77\x04\x6b\xee\x79\x46\x55\x29\x8f\x7b\x46\xf1\x5f\xd7\x33\x8a\x47\x93\xc1\xa4\xf4\xd7\x08\x55\x51\x7a\xea\xf3\x8e\x68\x19\x1f\x3c\x54\xc5\xa9\x65\x9f\x20\xcb\x5d\x16\xa5\xb0\x3a\x77\xac\xe6\xeb\x5a\x1e\x8c\xb8\xce\x72\x37\x2e\x81\xca\xee\xb0\xcb\xd4\xcf\x5f\xdc\x87\x0d\x78\x41\x53\x8e\xe2\xac\xa5\xd1\x20\xb5\xa6\xf3\xaf\xe3\x34\x57\x9a\x68\x17\xb9\x67\xe3\xed\x9d\xfd\x26\x8e\x2e\x5d\x7b\x34\x17\x57\xfe\xf8\xd3\x86\x54\xb7\xbf\x8c\x03\x6d\x9f\x87\xf3\x89\xa5\x02\x20\x66\xb4\x3d\x97\x99\x94\x8f\x7a\xfd\x6c\xcf\xf3\x9a\x2e\x0e\x97\x55\xb9\x5e\x96\x37\xcc\xa6\x2c\xab\x3f\xf6\x4b\x0e\xd5\x93\xcb\xae\x58\xe9\xa6\x03\x43\x55\x82\x11\x38\xb9\x5a\x17\x39\x27\xf5\x3e\x63\xc5\xbb\x50\xb1\xe9\xf3\x62\x01\xd9\x19\x0f\x75\xd4\xaf\xfe\xfa\xf5\xa2\x2a\x0b\x6b\xe1\x17\xb3\xce\x0b\x4e\x51\xa9\xd4\x30\xc4\x86\xc1\x8b\xa8\x21\x59\x7a\xf1\xaf\x4a\xe9\x56\xbf\xe7\x0d\x7b\xb0\xbc\x61\xae\x9d\xe0\x3f\x41\xd8\xb2\x75\x0f\x93\x73\xf1\xdb\x67\x72\xae\x02\x37\xd9\xab\xdf\x64\xd8\xb2\xeb\x5f\x3b\x6c\x99\x63\x3d\x9a\x5e\xff\x1a\xbc\xe0\xad\xc7\x0b\xde\x3e\xa8\x83\xec\xa5\x8b\xd5\xa5\xd1\xa2\x31\x75\x18\xba\x31\x93\x18\xd2\x51\xda\xbd\xf7\x9a\x12\x52\x78\xcd\xc8\xbc\x41\xb8\x74\xaf\xe1\x68\xe4\xfe\xc4\x65\x70\x09\x47\xfe\x07\x9c\xda\x3b\x59\x6e\xb7\xe5\x44\x83\xf7\xcf\xa4\x42\xe3\x71\x5a\xfa\x77\xb4\xcc\x2a\x1d\x56\x7d\x52\x91\x6b\x52\xd5\xf2\x2f\x3f\xf2\x8f\xfb\xec\xad\xa1\x73\xbb\xad\x1a\x5c\x22\x4c\x1d\xe3\x03\x6f\x34\x18\x0c\xe6\xe2\x7f\x3f\xf1\x7e\x49\xd0\xa1\x48\x9b\xd6\x7a\x85\x8a\x37\x41\xd8\xdc\xec\x70\x84\x2e\x1c\xc3\xc5\xd4\xca\x4c\x46\x71\x2f\xed\x29\x9d\x03\x8b\x2c\xee\x10\x19\x8f\xd3\x91\x4a\x6d\xf6\x0d\xad\xf9\x76\xeb\xfe\x02\x83\x8f\x9c\xb2\x3a\xce\xb6\x18\x86\x41\x5c\x28\x92\x41\xd8\x1b\xc2\xb8\x0a\xf6\x62\xf1\x84\xeb\xc8\x21\x60\xe9\x86\xb2\x65\x79\xa3\x65\xe7\x53\x46\xaf\xc0\x6c\xf9\xab\x2a\xbf\x22\x61\x16\xf4\x2a\x53\xb5\x2f\x09\xd7\xf9\x74\x5e\xf1\xdb\x02\x82\xc2\x08\xa6\x99\x95\x8c\x80\x14\x38\xc9\x75\x47\x32\x9d\x75\x52\x6d\x18\x93\x8f\xa9\x6e\xe1\xb7\x45\x7e\x0b\x19\x88\xd1\x1d\x24\x86\x78\x7a\x4d\x18\x17\x8b\x25\x8c\x54\x69\x62\xea\x11\xb6\x4c\xb0\x23\x64\x8b\xea\x15\xb9\x2a\xaf\x49\x6f\x8b\x0a\x61\x9e\xa2\x06\xa9\xc0\x36\xf0\xe7\xc3\xb0\xa5\x37\x59\x0a\xb9\x26\xb9\xca\x9b\x86\x52\x6b\x13\x2b\x1f\x20\xb9\x4e\xf4\x86\xd2\x24\x11\x52\x92\xaf\x33\x4f\x93\x25\x98\x9f\xe7\x52\x0c\x30\x19\xf4\x6d\x39\x2f\xd7\x09\x4e\x0a\x72\x21\x78\xc0\x8a\x5e\xae\xc4\xbf\x37\x74\xc9\x57\x09\x4e\x56\x44\x7d\x28\x85\x70\x01\x67\x50\x27\x08\x97\x69\x91\xe5\x69\x7a\x99\xa6\x9d\x5e\x9b\x2a\x1d\x01\xae\x42\x1b\xe4\x0f\x12\xed\x95\xdb\xfc\x06\xac\x9d\x08\x86\x3a\x5c\x12\x13\x97\xe3\xe8\x51\xf9\x39\x7b\x54\x1e\x1c\x20\x3a\x2b\xdd\x44\x30\xa5\xc9\xc8\x53\x65\x6b\xd9\x35\x90\x0f\x8e\xa4\xa3\x93\x09\x59\x30\x13\x65\x73\x93\x83\x11\x21\x84\x26\xb4\x7e\x5d\x6e\x16\xab\x27\x44\xc8\x3b\xd9\x97\x65\x59\x90\x9c\xa5\xa3\x91\x04\xe6\xf1\x38\x29\x19\x17\x15\x6a\x9e\x57\x5c\x60\x29\x59\x80\x70\x25\x88\xd8\xf3\xf2\x9a\x2c\xb3\xd1\x31\x76\xe0\x56\x0a\x4d\x49\x82\xab\x09\xaf\x72\x26\x59\x6f\xca\x2e\x9f\xe9\x92\xe8\x0d\x3d\xf4\xea\x1e\x52\xe6\xb7\x27\xcb\xbd\x9b\x93\x65\xab\x35\x65\x97\x2f\x36\xfc\x1e\xc3\x83\x03\x5f\x35\x91\x22\x81\xc0\xbe\xa7\x6c\x41\x6a\x21\xc0\x64\xb3\x39\xae\x1a\x19\x56\xad\xc4\xf9\xff\x80\x88\x90\xb7\x41\x44\xc8\xc7\x5a\x2c\x43\xb8\xca\x38\x4e\x4b\x1d\x0e\x52\xa0\xfa\x56\x38\x48\x74\x77\x95\x5e\x07\x31\x20\x65\x45\x19\x44\x25\xaa\x7a\x90\xe6\x56\xfa\x70\x9e\x2d\x3b\x0e\x4d\x61\xf5\x43\xab\x11\x77\x9b\x4d\x36\x8c\xfe\xb4\x21\xcf\x96\xaa\x3b\x03\xa0\x4f\x99\x58\xe0\x72\x3c\x96\x49\x3d\x08\x77\x50\x23\xc0\x88\x9c\x5b\x14\x7a\x51\xd3\x60\xb9\xda\x9a\xf0\xcd\xba\x1d\xfd\x32\xb0\x45\x31\xe1\xc5\x40\x29\xf0\x8a\x08\xe6\x51\x1c\xf5\x6c\x99\xf3\xfc\x90\x9c\x2f\x0f\xe9\x32\xdb\x31\x7f\x9c\x1c\xf2\x8a\x5e\x5e\x92\x6a\x9e\x20\x34\x80\x4a\xca\xea\xad\x2c\xf9\xf3\x72\x53\x93\x27\xe5\x8d\xc3\x79\x32\x74\xc7\xcd\xed\xdc\x6e\x89\xa5\x8e\x6c\xc2\xf3\xea\x92\x70\xc1\x0e\x8c\xc7\x55\xa4\xe0\x44\x86\xc2\x49\x74\xf3\x04\x8f\x8e\xd1\x74\x64\x90\x24\x49\x1d\x5e\xf7\x3c\x0d\x18\xd2\xf3\xb4\x73\xc1\x79\x45\xf3\xc3\xf2\x86\xd5\x99\x63\xeb\x61\xd2\x8e\xd6\x13\xba\x94\xdc\x07\x4e\x20\x5a\x90\x61\x5b\xc7\x63\x1a\xab\x26\x68\xe5\x76\x4b\x52\x8a\x4d\xf0\x9d\xd1\x71\x63\xd6\x81\xb9\x03\x3e\x62\x51\x66\x57\xf3\x85\x7c\x4e\x5d\x14\x65\x4d\x52\x86\x47\x47\x68\x1a\x5b\x73\x83\xcd\x52\x5a\xc4\x57\x9a\x4d\x97\x25\x87\xcf\xd6\xca\x34\x72\x2a\xa2\x7f\xac\x38\x83\x36\x11\xaf\x48\x4d\x7f\x26\x0a\xde\xaa\x0d\x2b\xca\x72\x7d\x7a\x93\x57\xe4\x25\xd1\x4a\x8b\x9e\xd6\x65\x45\x09\xe3\x00\xb7\x8b\x55\xce\x2e\x77\x75\xa4\xcc\xd1\x1c\x84\x3f\x1e\xa7\xdd\xab\x4c\x1c\xc4\xaf\x6e\x84\xf8\xf0\x4a\x7c\xf8\x1a\x56\x5a\xc1\xea\x76\xf5\x00\xec\x46\xdf\xfe\xe8\xac\x4e\xe2\x0c\x22\x28\x57\x35\xbe\x24\xfc\x55\xbb\x30\xad\x74\xf3\x7c\xb9\x94\xe5\x30\x37\xca\x2e\x21\x87\xa1\xba\xad\x9c\xe4\x95\x38\xfe\x08\x7e\x52\x36\xf0\x82\x61\xfa\x53\x51\x9e\xe7\x05\xac\xa1\x4e\x55\xb7\xb2\x24\xe8\x59\xcf\x38\x4e\x1f\xcc\x86\xc4\xd8\xb0\xfb\xc2\x4e\xff\xa1\x45\x19\xbd\xfb\x9e\x5b\x77\x27\xbb\x8f\xce\xec\xb0\x44\xa1\xe4\x59\x24\x22\xb0\x8b\x13\x07\x1d\xb8\x58\x70\xdc\xee\xa1\x74\xe0\xe5\x18\x4b\x20\x38\xd7\x60\x16\x2f\x36\x6d\x4a\xa4\xa7\x81\x2b\x63\x7d\x1b\x4e\xc3\xb3\xbd\x90\xd9\x2e\x9e\x09\x3e\x7c\x41\x4e\x02\x99\xc1\xff\x35\x0d\x4a\x31\x85\x84\xda\x25\x23\x7f\x2d\x97\x24\x1d\x1d\xa1\x01\x9d\x08\x44\x9f\xd8\x04\xd8\x54\xe0\xf5\x43\xa8\x94\x20\x9c\xf2\x8c\x5a\x71\x06\xa9\x23\xd1\xd4\x11\xaf\xd2\x4e\x8a\xa4\x03\xbb\x0e\x05\xd6\xc4\x69\xe5\xf7\x93\x2f\x75\xc4\xaa\x2a\xda\x89\x66\x8b\xfc\x5e\x98\x68\x43\xd8\xf2\xf1\x8a\x16\xcb\x94\xba\xf7\x73\x7f\x4a\x89\xcf\x52\xea\x1e\x29\x53\x8b\xd2\x9d\x36\x90\x63\xc1\x21\xa6\xcf\x37\x12\x97\xbd\x38\x97\xfe\x5b\xfb\x00\xd2\x55\xd0\x06\x98\xe6\xb0\x23\x4f\x70\x4f\xc9\xec\x68\x2e\xf6\x85\x2c\xc5\xe1\x68\x7e\x7b\xbb\x85\xef\x72\x8a\x5e\x09\x12\x6c\x54\x1c\xa5\x0a\xa1\x09\x47\xe7\x31\x29\xe5\x1f\xa9\xe0\xbb\xc4\x82\xc5\x71\x08\x1e\xab\xde\x9c\xf3\x8a\x48\xf1\xa9\x85\x9d\x76\xee\x80\xc2\x56\xad\xd1\x96\xb4\x5e\x94\x8c\x91\x05\x4f\x3b\x26\x94\xa9\xe4\x1b\x6a\xc0\x10\x21\x44\x46\xda\x85\xd6\xc5\x46\xb9\xf8\x45\x90\x4e\x07\xbd\xf8\x63\x39\x85\x5d\x8b\xb2\xe2\xc4\xd1\x3e\xa8\x69\xdf\xe1\xe3\x27\x17\x99\x44\xe0\x89\xe6\xf3\x62\x9a\x6b\xa8\x2c\x39\xb5\x23\xb4\x68\x47\xa4\x77\xa3\x4a\x88\xac\xe7\x3e\x5c\x40\xb4\x83\x7b\x32\x02\x66\xe6\x71\x92\xda\x7d\xef\x66\x73\x81\x3a\x89\x93\x68\x10\x9c\x05\x4d\x37\xdf\x02\x12\x44\xa9\x46\x87\xe2\x1a\xa1\x47\xd5\x78\x9c\x7c\xf9\xe2\xc9\x0f\x52\xf9\xa1\x24\xff\x09\x2f\xbf\x5b\xaf\xad\xfd\x70\xf2\xf5\xeb\xe7\xdf\xf4\xd4\x78\x84\xb8\xf4\xff\xa8\x84\xd8\x11\x1f\xb6\x72\x87\x35\xee\x5c\x96\x36\x84\x0c\x42\x6c\xa1\x3a\x4f\x25\x57\x89\x02\xc5\x46\xcb\x56\x7a\x13\x02\xeb\x24\x87\xbb\xe6\x96\xbb\x26\x32\x7e\xba\xfc\x79\x67\xf6\x0a\xd4\xaf\xa7\x3a\x6a\x8d\xea\xd7\xb4\xc3\x90\x46\x53\x57\x93\xa5\x4f\x48\xc1\xf3\x1a\xa5\x1c\xf4\x63\x93\xa5\xf8\xf9\x77\x9c\xeb\x3f\x7f\x18\x94\x9f\x57\xea\xeb\x5f\xc9\x25\x84\xdc\x3c\x49\xcb\x2c\xfc\x86\xb9\x5e\xcc\x13\xe5\x83\x8c\xd0\xb4\xfc\x42\x57\xfb\x16\x40\xc3\x6f\xaa\xbf\x45\x9b\xe6\x7a\xd4\x1f\xec\xa8\x79\x16\x7e\x8b\x37\xd5\xa3\xfe\xa0\x47\x18\x8f\x9d\xb6\x7d\xc3\x5a\x4b\xa7\x6f\x65\x91\xe0\x1c\xd2\x72\xbb\xcd\xd1\x78\x2c\x0d\xdb\x69\xad\x44\x05\xbd\xb9\x25\xce\xb1\xb3\xc1\x4a\xdd\xd5\xea\xbb\x19\xf4\xe0\xbb\x9b\x15\x21\x45\x82\x39\xbe\x5b\xe4\x6b\xbe\xa9\x40\x5a\x5e\xe7\x75\x4d\xaf\xc9\x74\x74\xdc\xf4\xb0\x8a\x59\x0c\xa3\x46\x2f\xf1\xce\x41\x1a\x35\x77\x8f\xd9\xdd\xcd\xac\x66\xad\x12\xd9\x26\xc0\x5f\x3b\xae\x06\xba\x6b\xdf\xa3\x4e\x64\x27\x93\x7a\x02\x95\xee\x14\x5e\x24\xef\xbc\x8f\xc4\x12\xe1\xb2\xdb\x2a\x79\x2e\x78\xc6\xee\x51\x48\x27\x2e\x0c\xf1\xf8\xbd\x97\x16\x3d\xcc\x0f\xb1\xba\xde\x81\xf6\x59\x60\xc8\xee\x26\xf1\x58\x3e\x09\x27\x35\x3c\xe5\x19\xa3\xe2\x17\x37\x5a\x72\x11\x9c\x69\x5d\x16\xd7\xe4\x25\x44\x05\x91\x21\x9d\x52\x95\x2d\x7f\x4a\xd8\x35\xad\x4a\x76\x05\xaa\xf6\x89\xf3\xcb\x4c\xc1\x51\xec\x2a\x5e\xb9\x63\x12\x43\x73\x59\x2e\x89\x66\xab\xbf\xbc\x7d\xb6\x54\x74\xd9\x76\xe3\x68\x64\xf8\x6d\x41\x5a\xdd\xc9\x03\x4b\x12\x6c\x52\xbb\xae\xb1\x72\xf9\x2b\xc8\x05\xd7\xe1\x3e\x40\x89\xac\x33\x16\x83\x26\x19\xcb\x30\x16\x13\xa9\x4e\xc6\xca\x1f\xcb\xd1\x29\x9b\x74\x25\xe3\xb1\xfb\x60\x94\x47\x1e\x8c\x38\xba\x23\x07\xae\x65\x2a\x4e\xa6\x8e\x07\x4a\x3e\xe3\x73\x9c\x3c\x4a\x90\xd4\xb8\xa5\xa2\x2e\x2f\xd7\x8e\x6f\x3b\x87\x62\x84\x2b\x55\x2a\xa6\xee\x86\x04\x51\xc5\x4c\x15\xc3\x6a\x9c\x72\xa6\xca\xa9\x2a\x87\x05\x3a\xe5\x54\x95\x97\xaa\x5c\xae\xd9\xa9\x50\x22\xa4\xd4\x7f\xea\xa1\x7c\xc5\xaf\x8a\x57\xf9\x05\xb8\x21\x40\x7a\x96\x65\xea\xc4\xbf\xc5\x25\xc2\x39\x7c\xd3\x86\x35\xc8\x29\x8c\x00\xe2\xcc\xd7\xf0\xcf\xf1\xae\xa7\xcd\x45\x6f\x7f\x08\x2f\x5c\x8d\xe3\xa5\x5f\x3d\x06\x84\xb3\xfa\x9e\x63\x46\x3a\xe9\x1f\x55\x81\xe7\x6c\x73\xcf\x81\x64\xbb\x1d\x7d\x4b\x65\xa4\xda\xc5\x33\xc9\xad\xde\x77\x1c\xe8\xa3\x7f\x1c\xab\x46\x79\xaf\xa1\x4c\x37\xfd\xa3\x39\x2a\x85\xf7\x1a\xce\xf6\xb3\xd7\x78\xa0\x3c\x78\x88\x01\x45\x47\x7b\x9c\x5b\x5b\xea\x7b\xff\x73\x6c\xf5\xb9\xdf\xb9\x3e\xf0\x54\x3a\xbb\xdd\x31\x9b\xb6\x74\xfa\x7e\xd3\x68\xf5\xb7\xc7\xf8\x9e\xc4\xfa\xfe\xc3\xbb\xdd\xf5\x8f\xde\x25\xb0\xbe\xd7\x1c\x3a\x3a\x0d\x66\x52\x64\x0b\x84\xb6\xdb\x02\xfe\xe7\x98\x05\xde\xbc\xbb\x59\xa0\x7a\xb9\xf8\x45\xcc\x02\xf5\x58\xa1\xe9\x5e\xc4\x6c\x8f\x61\x27\xee\x9b\x9f\x9f\xef\x5f\xd4\x5c\x2f\xff\xa7\xb0\x2c\xab\x7b\x2c\xcb\xca\xdf\xbe\x65\xd9\xaf\x15\x76\xdf\x4c\xa0\xf0\x4c\xa6\x8a\x07\x35\x99\x5a\xfc\x6e\x32\xf5\xdb\x35\x99\x7a\x18\xd3\x9d\x8b\x2e\xbb\x9d\x94\xb5\xed\x76\xd2\x74\x91\xa6\xf4\x5f\xd7\x96\xa6\x36\xb6\x34\x9b\xfd\x6c\x69\x88\x7e\xd1\xcb\x92\x45\x41\x17\x6f\xc0\x84\x84\x97\x6b\x71\x1c\xf9\x25\x70\x40\x60\x2b\xa3\xcc\x47\x04\x0d\xfa\xd7\x37\x1f\x29\x76\x98\x8f\x30\x6d\x3e\x22\x5f\x18\xcd\xeb\x62\x4c\x39\xeb\xeb\xe4\x97\xb4\x06\x69\x6f\xbb\x4d\xae\x44\x2b\x90\x28\xb4\xea\xd6\x9c\xc5\x78\x0c\x84\x60\x72\xbe\xe1\xbc\x14\xc4\x49\x6a\x5d\xfc\x63\x11\xb4\x36\xf8\xa4\x55\x6a\x67\xe2\xfb\x6b\xf2\x96\x4b\x5b\x06\x5a\xb2\xef\x18\xa7\x05\xcc\x73\xb3\xd6\xb5\x78\x79\x79\x59\x90\x67\xf5\x97\x84\xb2\x4b\xc9\xe7\x2d\xbf\xbc\x85\x47\x5b\xa9\x4a\x3a\xd9\xaf\x5a\x36\x3a\x9e\xc6\x5f\x1e\x64\xd3\x94\x38\x4f\xae\x72\xc7\x1e\x4b\x50\x6b\xef\x56\xcc\xa8\x59\x6b\x55\xf4\x3e\xd0\xfa\x89\x4c\xa3\x2e\xb6\x71\xe4\x8d\xbc\xdd\x76\x6e\xb7\x84\xee\x07\xdf\xea\x5f\x72\x13\xc3\x5d\xfc\x0b\xb9\xbd\x2f\xd4\xa5\xc7\x90\x2a\x46\xd0\xbc\xc7\xe5\x92\x9c\xec\x18\x72\xfa\xe9\x27\x5e\x75\xc8\x08\xe5\x2b\xa1\xf1\xae\x59\x4f\x3f\xf9\x4f\xb7\x0f\x65\xc2\xd4\x61\xdb\xd2\x06\x95\xd7\x46\x10\x7a\xbf\xf7\xbe\xb3\x50\xa4\x89\x0e\xf4\x94\x2d\x3b\xb7\x73\x8f\x33\x3c\xc2\x44\xc0\x4a\xa8\xf0\xef\x06\xcb\xd4\x7b\x46\x0c\xeb\xb5\x36\x13\x07\xaf\x8e\xc7\xf7\x7c\x75\x6c\x6f\x02\x26\xea\x9d\x61\x72\x51\x2e\x36\x75\x8a\x70\x4d\xb8\x0a\xc9\x19\x9a\x0b\x43\x82\x4a\x5d\x1f\xf1\xea\xf6\x2e\xe5\xad\x64\x94\xd7\x90\x8a\x12\x50\x8d\x52\x48\x23\x04\xec\x81\xfd\x94\x6a\x52\x33\x3a\x12\xff\xaf\xac\x33\x6d\x52\x2c\x0e\xa4\xcf\xab\x8a\x9a\x0b\xca\xf2\xa2\xb8\xbd\x33\xf3\x5d\xd2\x1a\x82\x4e\xca\x7a\x5c\x1c\xe7\x11\xa4\x07\x0d\x5f\x60\xa2\x8f\x9e\x6a\xfd\x31\x75\xf9\x0e\x1c\xf4\xde\x3b\xde\xdf\xc1\x95\x44\xd2\xba\xb9\xfa\xe9\xbc\x12\xdb\xf5\x04\x85\x7d\xf7\xe3\xdd\x86\xb2\x53\x3d\x2f\x97\xb7\x8e\xe9\xba\xec\xae\xc3\x70\x9d\x93\xb7\xfc\xb0\x06\xca\x73\xa8\x21\x3d\x71\x66\xfd\xe1\x1f\xd7\x7b\xee\x7a\x3f\x69\xbc\x1f\x8a\x79\xf7\xfd\xcb\x97\xcb\x7b\x6e\xde\x1c\x8d\xc7\xb9\xa7\xae\x66\xc0\xe5\xe7\x69\x85\x69\x44\x5d\xdd\xe2\x4c\xee\xab\x8a\xa1\x7d\xbd\x21\x4c\x5d\x1d\xcc\x22\x56\x5b\xd1\xf8\x07\x18\x57\xf6\xb4\xcf\x98\x86\x22\x3e\xc0\xa8\xba\xaf\x7d\xc6\x75\x89\xd4\x03\x0c\xed\x74\xb7\xf7\xe8\x40\xb9\x1e\x6a\x6c\xd1\x59\xff\xc8\x71\x5c\xfa\x5e\xe3\x47\xbb\xec\x9f\x45\x0b\x03\xbe\xd7\x04\xc2\xde\x76\x8c\xfd\xfe\x2a\xd7\x1d\xfd\x05\xe3\xb3\x8c\x22\xb4\xdd\x32\xf1\x3f\x47\xd1\x79\xf1\xce\x8a\xce\x5f\x42\xc1\xf9\x0e\xfe\xce\xca\xd7\xfb\x1e\xde\xcc\x03\x57\x17\xe7\x64\xa7\xfc\x17\x55\x8b\x6e\xfe\x29\xd4\xa2\x45\x8f\x5a\xb4\xfe\xed\xab\x45\x17\x81\xc3\xed\xe2\x37\xe9\x70\x7b\xf1\x6b\x3b\xdc\xfa\x61\x03\x7e\x05\xed\xf1\xca\xd3\x1e\xaf\x7e\xa5\xe0\x2b\x11\xbd\xe4\x12\xaf\xf1\x15\xbe\xc6\xb7\xf8\x12\x9f\x67\xb3\xbd\xfc\xff\xe6\xf8\xac\x53\x9b\x59\xc6\xb4\x99\xcb\xcc\x4d\x98\xfc\xaf\xa6\xcd\x2c\x8c\x36\xf3\x62\x3f\x6d\x26\x2f\xd7\x99\x4c\xc7\x00\x86\x32\xfa\x6f\xd8\x6d\xfd\x03\xb6\x5c\xff\x90\xfb\xae\x7f\x39\x86\x32\xd9\x5d\x03\xd1\xbb\xcf\x0b\xba\x38\xfd\xf6\x99\xfc\xe9\x99\xd7\x4b\x17\xc2\x6b\x52\x71\xba\xc8\x8b\x6f\x15\xfd\xca\x92\x7c\xc3\xcb\x44\x74\x5d\x56\xf4\xe7\x92\xf1\x58\x19\xc4\xcb\x7d\x2d\x9f\xfe\xbe\x87\xf9\x38\x3a\x56\x8a\xcb\xff\x01\x3a\xd6\xd5\x0e\x1d\x2b\xdd\xe1\xa2\xb7\x48\x2f\xee\xeb\xa2\x37\xb0\x86\x70\x93\xcd\x7a\x99\x73\x02\xbe\xca\xe9\x9d\xf6\x5a\x53\x71\x30\x2f\x37\x74\x09\x09\x24\x44\x57\x98\xd6\x2f\xd6\x84\x49\xe5\x9c\xa2\x2b\xc5\xad\xf8\x04\xea\xc7\x63\xac\xa5\x34\xa5\xbe\x33\xaa\x9d\xd1\x31\x56\xfa\x9b\xe9\x5d\x69\x7a\x10\x7f\x41\x52\x6e\xd5\x3b\xa8\xbd\x64\x11\xfc\xe9\x96\x49\xb5\xcf\xd4\x51\x3e\xb9\xa5\xd6\xac\x7b\xaa\xac\x25\xf5\x6f\xa7\x56\xd3\x28\xe7\x3b\xc7\x31\x31\xf8\xbd\xdd\xee\xe9\xa9\x48\x42\xef\xc4\x92\x3d\x63\x94\x2b\x85\x9e\xfc\xe1\xfa\x2f\x2d\xe9\xf2\x25\x59\x10\x7a\x4d\x4e\x39\x8f\x6a\x5a\xda\x67\xd8\x6a\xb3\xfb\x38\x47\x52\x05\x7c\x56\x16\xcb\x27\x6a\xf3\x71\xa5\xbf\xea\xe3\x18\xb4\xea\x64\x15\xae\xc6\xe3\x11\x39\x89\xd8\xd0\x63\xb7\x2d\x9a\x8e\xaa\xf1\x98\xe8\x00\x91\x91\x8a\x04\x2c\xb8\xec\xc2\x6f\x68\x51\x28\x15\xf5\x5e\x8b\xf6\xea\xf7\x2c\x58\xdb\xcb\xca\xdc\x66\xa7\xdf\x3e\x53\x5b\xef\x7c\x81\x64\x34\x76\x26\x02\xda\x3a\xf5\x99\x9e\x1e\x5d\xda\x8e\x6b\x74\xe7\x80\x71\x50\x20\x6f\x83\xfa\x5c\x32\xf1\x63\x3c\x1e\x1d\x6b\xbd\xba\xfc\x92\xfa\x8d\x30\x41\xaa\x81\x77\xeb\xd4\xc5\xf2\xbc\x4a\xe0\x0e\xb4\x67\xac\xa9\x56\x38\xef\xf1\x78\xd4\x31\x71\xb5\x35\xe1\xc4\xc7\xe3\x51\xaa\x26\xfa\x58\x0c\xe5\xcf\x1d\x3e\x75\x4e\xde\xdb\xaf\x54\xbb\x17\x29\xfe\x80\x92\x3a\xbd\x5b\x69\x4c\x3f\x05\x82\x72\xed\xff\xe4\xe5\x5a\xfe\x01\x86\x90\x92\xe4\x80\xc9\x22\xfc\x29\xcd\x1b\xe1\x4f\x65\xc9\x08\xde\x2f\xea\xd0\xd7\x15\xb9\xa6\xe5\xa6\xfe\x5b\x48\x6e\xbc\xd2\xaf\xdb\x24\x47\x8e\xdc\xb9\xf7\x60\x07\x8e\x4c\xa8\xd2\x77\x70\xfd\xb5\x3b\xdc\xe1\xfb\x0b\x4e\xbb\x3c\x3f\x7f\xc6\x96\xe4\xed\x17\x87\xc7\xe2\xa7\xd2\x35\x37\x8e\xc3\x8d\x40\x6f\x9d\xa0\x1a\x1e\xe3\x89\x45\x98\xc0\xb6\x6b\xcc\xea\xa2\x9f\xaa\xcf\x71\x46\x7b\xd3\x85\x1d\x6b\xdb\xdb\x7e\x4b\x5e\xeb\xa5\x8b\xf9\x07\xd9\x33\x7a\x91\x92\xf1\x98\xeb\x77\x9c\x96\xd9\x66\xd6\xf1\x7d\xbb\xdd\xdb\x04\x79\xe0\xe4\xd0\xbb\xf4\xc0\x38\x69\x73\x2e\x09\x4e\x42\x46\x27\xc1\x49\x8b\x8b\x49\x70\xd2\x0d\x8a\x4e\x61\x08\xc5\x20\xf4\x3b\xac\x95\x10\xcb\xcc\x2e\x4b\xc3\x75\x29\xcb\xc8\x65\x18\xad\x81\x6e\xbf\xdd\x32\x37\x3d\x80\xf2\x4e\x6d\x6f\x0f\xae\xfc\x8c\x49\x80\x65\x1d\xd7\x38\xd1\x94\x0a\xa8\x34\xd6\xe7\x7e\x85\x18\x62\xb2\x42\x9d\x73\xfd\x63\xdc\x9f\x83\x0e\xda\x6c\x23\x76\x58\xcf\x69\x68\xb4\x0d\x59\x75\xaa\x09\x18\xd5\x8e\xc7\xa9\x31\xec\x50\x9f\x04\xd7\x0b\x92\xba\xe0\x7e\x13\x27\xe5\xa2\x29\xc5\xc9\xfa\x6d\x82\xb4\xc1\x86\xd3\x52\x60\xa2\x93\x94\x49\x66\xb9\xdd\x14\x8c\xcd\xa1\x2d\x66\x2e\x13\xdd\xea\x07\xca\xc6\xe3\xd4\xfb\xad\xed\x44\xb4\x15\x49\xa4\xbe\xee\xb5\x3d\xb4\xb4\x6d\xd7\x63\x1b\x66\x3e\xb2\x06\x40\x9c\x52\x53\x01\x9c\x74\xbb\x2f\x69\x1a\xdf\xb5\x07\x12\xdb\x42\x07\x4a\x1a\x68\xf7\xa0\xec\xe9\x55\x17\xae\xdd\x90\xaa\x11\xb7\x1e\x3a\x14\xb4\xe5\xdc\x64\x08\x23\x42\x74\x9f\x91\xb9\x1d\x7c\x46\xe6\x30\xb0\x73\xd8\x33\x32\x77\x4a\x51\x83\x20\x4b\xb6\xa6\x51\xbc\x5c\x23\x2d\xd8\xcf\xe6\x46\xe2\x2a\x87\x54\x46\x93\x16\x53\x09\x57\x38\x2b\xc5\x20\x09\xdb\x08\xfe\xc5\xaa\xa6\x6c\xe9\x09\x95\x6e\x6a\x76\xdd\xa5\x6f\xeb\x6f\xab\xaa\x2d\x98\xee\xdf\x02\x21\x34\x00\x71\xfc\x54\x07\x44\x48\xb5\x59\x39\x55\xe9\x2b\x1e\x25\x36\x70\x67\x84\xac\xb2\x80\x06\x46\xa8\x5c\xf4\xbe\xf5\x13\xce\xc8\x1d\x64\x0e\xeb\x0a\x5c\x44\xd7\xcb\x54\x9b\xab\x08\x3e\xfb\x8f\xda\x28\x42\x80\x8d\xd4\xe0\xb1\x3f\x92\x93\xec\x1a\xb6\xa3\x83\x63\xa7\x03\xa7\x4a\xb7\x4b\xa4\x64\x64\x6b\x13\x78\xdf\xcc\x3b\xc1\xad\x58\xe5\x21\x2f\xe4\x23\xd0\x7e\x5e\x94\x23\x6c\xbd\x68\xce\x2e\x09\x7f\x62\x31\xf2\xb3\xf6\x3b\xbb\xa6\xbd\xef\xe7\xc2\x03\x71\xab\xc0\x1b\x08\xac\x0e\x9c\xb2\xf1\xb8\x2f\xf4\xa8\xd5\xa1\xcd\xa2\xf2\x50\x32\x1f\x8f\x3b\x8b\x5c\x5a\xd3\x25\x4f\xdd\x94\xd5\xd5\xaa\x2c\x48\x12\x73\x2c\xea\xf2\x28\x92\x62\x4b\xb8\x75\x29\x6a\x70\x1d\x24\x29\x54\x0d\xac\xbe\xf4\xa4\xab\xed\x94\xc8\xe7\xc4\x8d\xf7\x9c\x48\xc1\x93\x66\x93\x56\xb8\x6c\x3f\x27\xae\x33\x7f\xb2\x57\x59\xcb\xf9\xe5\x7a\xa7\xa2\x31\xef\x70\x45\x49\x10\xbe\xcd\xdc\xc2\xcb\xec\xae\xf1\x90\xec\x75\x1c\xbd\x5e\x0a\x5c\x79\x2d\x8d\x33\x2f\x7d\xe3\x4c\xf7\x27\xbe\x0c\x8d\x33\x2f\x3b\x8d\x33\x2f\xb7\xdb\xcb\xd0\x38\xf3\xd2\x57\x81\x5f\x66\x57\x7b\x18\x67\x7a\xe9\x25\xd3\x25\x5e\x83\x1c\x41\x1a\x7c\x89\xf0\xad\x63\x9c\x79\x19\x98\x4e\x5e\x2a\xe3\x4c\xef\xfb\xc9\x65\xdb\x38\xf3\xd6\x18\x67\x5e\xf6\x1b\x67\x86\x23\xc4\xb5\x9b\x62\x86\x97\x62\x71\xca\x38\x33\xcb\x11\xda\x6e\x4b\xf1\x3f\xe7\xad\xe9\x6c\xd7\x5b\xd3\xbd\x22\xe1\xfe\x0a\xd9\x58\xbe\x7e\xfd\xfc\x9b\x2f\xf3\xaa\x9e\xe8\x89\xa6\x77\x74\x39\x4d\x56\x7f\xa8\x8f\xf3\x3f\xff\x48\x13\x7c\x5e\x94\x8b\x37\xd3\x8f\xee\xd4\x1b\x4c\x9d\x4c\x67\x89\x71\xb8\x72\xfe\xfa\xa3\x1a\x44\x85\x94\x48\xfe\xe8\x33\xb0\x38\xf9\xe3\xb5\xc3\xdd\xfe\x71\xe5\xfe\x58\xd2\x2a\xc1\xc9\x38\x97\x1a\x8e\xe4\x8f\xce\x5b\xd9\x58\x75\x0b\x6d\xf8\x55\xf1\x3a\xbf\x4c\xe6\x38\xa9\x05\x42\x07\x25\x40\x32\x9d\xcd\x3e\xc3\x09\xbd\x48\xf0\x6c\xf6\xc9\xa7\xf8\x0f\x78\x96\x48\x22\x94\xcc\xe7\x73\xe0\x15\xf0\x5d\x50\xff\x08\x27\xc3\x61\x32\xc7\xb3\xff\xc4\xc9\x92\x5e\x27\x98\x57\x1b\x32\xc7\xb3\xe3\x23\x9c\x2c\xd4\xfc\x7b\x55\x40\x1a\x75\x1d\x96\x15\xbd\xa4\x4c\x74\xf5\x5f\x73\x2c\xfa\xfd\xc7\x3f\xe0\x97\x3b\xa3\xcf\xf0\xac\x73\x26\xb6\xde\x67\x78\x96\x94\xd7\xa4\x2a\xf2\xdb\x1d\x13\x97\xff\xf7\x2e\xd3\x37\xfd\xcb\xe9\xfe\xc1\x99\xf2\x1c\x12\x1c\xe7\x57\x84\x93\x4a\x0c\x35\x6f\x60\x06\x72\x29\x05\xe1\x30\xc7\xff\xc2\x89\xf3\x04\x2a\x3f\x1c\x12\xe3\x7d\x07\xbf\xcb\x4a\x2d\xfb\xf8\x58\xac\x5b\xce\x50\x2e\x67\x6e\xfe\x99\xcd\x12\xa5\xb6\x17\x73\xd9\xdd\x6e\xdf\x0d\xf9\x0f\x2c\x7a\xf8\x04\x3a\x98\xcd\x8e\x3f\xc1\x09\x5d\x26\xf0\xed\x08\xcf\x12\x2b\xa6\xc2\x0e\x43\xb9\xda\xaf\xd9\x27\x02\x6e\xfa\xce\x7c\xd8\x0b\x10\x87\x72\x94\xff\x90\x53\xdf\xab\xee\xbf\xab\xba\x76\x7e\x41\x58\x16\x31\x45\xb1\x33\x3e\x20\xed\xec\x9d\xb2\xc3\x35\x5c\x39\xb5\x79\x66\x88\x4f\x01\x0e\xf5\xc2\xb5\x27\xa3\x1a\x5b\xfe\x34\xa5\x70\x23\x45\xd9\x7f\x4a\xe0\x9d\x1d\x7f\x8a\x05\xc8\x7c\x0a\x1a\xc9\x43\xca\x6a\x52\x71\x35\x2d\x68\x0e\x7e\x87\xb2\xf7\x58\x1d\xb1\xbb\x8a\x07\x04\xd9\xd6\x08\x90\xdd\x4d\x4c\xb7\x2d\xc7\xb3\xfe\x36\xd6\x51\xd0\xd4\xbb\xa1\x45\x71\xb8\xd4\x0a\x45\x53\xb3\xd3\xb3\x6d\x57\x43\xc7\x35\x70\xdf\x31\x12\xb5\xf5\xb3\x39\x1c\x62\x04\x8e\xff\xf1\x0f\x36\x1c\xba\xc0\x7c\xfc\x19\x3e\x3e\x32\x57\xd4\x96\xb4\xaf\x6a\xcf\x3d\xfe\x44\x5f\xe4\xc8\x05\x8f\x21\x23\xe6\xdd\x67\x75\x6f\xda\x5e\xb2\x72\x2d\xc9\xe5\x46\xdc\xaf\x84\x91\xb7\xfc\x15\x3d\x2f\x64\x76\xa8\x59\xf2\xbf\x16\x9b\xaa\x2e\xab\xe9\xd1\xff\x4a\xf4\xe0\xbf\x23\xbe\x5f\x00\xf1\x1d\xff\x8e\xf8\x7e\x47\x7c\xbf\x23\x3e\x28\x3c\xee\x41\x7c\x1d\xdf\x65\x6f\x72\x0e\x3b\x50\xc4\xde\x1c\xe5\xb1\xbe\x89\x02\xb6\xdc\x6b\x78\x0f\x6e\x13\xa0\x7a\x55\x16\x4b\x70\x8b\x85\x76\x0a\x88\x93\x25\xad\xd7\x45\x7e\x3b\x1d\xb2\x92\x91\x47\xfb\xe1\x37\xf1\x69\x95\xd7\x4f\xaf\xf3\x22\x99\x5e\xe4\x45\x4d\x9a\x8f\xf0\x15\xe1\xf9\xf4\xee\x0a\xc4\x07\x81\x9e\xa6\xef\x2d\xce\x4c\x56\xe7\x75\xb2\x2b\x51\xe1\x7b\x38\x08\xff\x86\xa4\xa5\x9b\x57\x2f\xfe\x50\xfc\xb0\x66\xbb\xa4\xa5\x96\x8c\xd4\x2d\x12\xb5\xa4\x27\x57\x26\xd2\x82\xd2\xbe\xc2\xd1\x3b\x91\xb1\x3f\xbc\x1b\x15\x8b\x34\xdb\x2d\x87\xb5\xc9\xd7\x6e\xf2\x64\xe1\xc0\xa3\x15\xff\xde\x47\x2b\x54\x9b\x08\xad\x88\x11\x1c\xb5\x61\x6c\x91\x83\x6c\xbe\xa3\x4b\x49\x36\x1c\x61\x6f\x1e\xef\xfb\xd3\x77\xee\xfb\xd3\x48\xdf\x9a\xc6\x7d\xe2\xd1\xb8\xaa\x04\xec\x20\x7d\xb8\x12\xf5\x91\xe7\xe7\xa0\x78\x57\x3b\xb6\x61\x05\x81\x2d\x56\xf4\x3b\x31\xd6\xf5\x62\xff\x8e\xec\xa1\x4b\xba\x68\xdf\xee\xd4\xa9\xe8\x66\xfa\xc5\x0e\x9a\x59\xf7\x7d\xdd\xd0\x84\x0c\xde\x87\xd7\xb0\xdc\x84\xdb\xad\xdf\x17\x79\xbb\xce\xd9\x12\xe2\xcd\x78\xfb\xfa\x1f\xae\xe0\x0f\x39\xbf\x49\xb0\x06\x68\x6e\x56\x19\x69\xee\xed\x40\xd8\xc1\xa7\xf8\x3f\x7b\x09\x5e\xd4\x5a\xdb\x50\x49\x08\xfe\xe0\xb8\x38\x1a\xfe\x23\xf4\x24\x08\x5a\x28\xc7\x20\xbf\xb6\xb4\xff\x0f\x6a\xbe\x21\xb7\xb1\x9e\xb5\xd5\x7e\x50\xdb\x0d\x2f\xeb\x37\x70\x6c\xed\x63\x6d\x20\x9a\x6c\xa4\xc5\x53\xb6\xdc\x9b\xd4\x2b\x22\xff\x5f\x0e\x8d\x7f\x0f\xea\xfe\x21\x69\x99\x02\xe7\x0f\x44\xcb\x7e\x4b\x34\xec\xff\x3e\xf9\xcb\x62\xf9\xf1\x55\x07\x0d\xcb\xd7\xd4\xa7\x37\x56\x59\xe7\x85\x41\x16\x1f\xbc\x80\x8b\xe2\x83\xba\xdc\x8f\x1d\xeb\xf9\x3f\xaa\x8d\xb5\xdf\x62\x74\xeb\x86\xf2\x95\xa6\x4b\xab\xbc\x5e\x49\x69\x52\x90\x1f\x83\x1d\xb0\xbe\xf3\xd8\xde\x5e\xec\x70\xdc\xaf\x35\x95\xd0\x29\xf2\x25\xc5\x92\xe0\xeb\xbc\xf3\x78\x68\x2c\x56\x6e\x51\x4b\xac\xd4\xc5\x1c\xb1\x72\x3d\x21\x8b\xf9\x03\x32\x6c\xe8\xe7\x7f\x4a\xfa\xd5\x19\x15\xc5\x92\x60\x87\x23\x58\x75\x1a\x0e\xe0\xc4\xf2\x18\x9a\x56\x57\x24\x5f\x96\xac\x70\x91\x97\x9d\xeb\xdc\x27\x5b\x91\xba\x76\xb0\xdd\x75\xfd\xc9\xec\xae\x7f\xdd\xee\x7b\xbe\x7b\xcf\xfe\x23\xba\x67\x0b\x73\xe0\xf7\xde\xb3\x10\x84\x43\x18\x77\xf9\x36\xef\x1d\xe8\x1d\x92\x9a\xfc\xc6\x4f\xe5\xdf\x1d\xa6\x03\xfb\xdb\xae\xc4\x72\x49\xa2\xde\xe1\x64\x3b\xeb\xba\x5b\xba\xbb\xb6\xd8\xf2\xdd\xb5\xe0\x48\xf6\xd8\x1a\x69\x76\xbe\xb3\x9e\x3c\xd2\x3d\x8e\x85\xec\xd9\xa1\x07\x12\x0e\xec\x77\x73\xcf\xee\x1b\x43\xf7\xa9\x76\x69\x8e\x5c\x61\x15\x08\xa7\xaf\x17\xea\x78\xd7\x05\x3e\xe8\x53\x25\x66\x1e\x7f\x26\xd8\x4e\xc3\xb9\xcf\xdf\x51\x6c\x36\xfc\x40\xd8\x59\xbf\x08\xfb\x6b\xf0\x03\x71\x3e\x60\xd0\xcb\x07\x74\x3b\x76\xed\x45\xfc\x1d\xff\x05\xe5\xf4\x65\x1d\x9d\x68\xc6\x62\x76\x1e\x65\xc6\xda\xb6\x1c\x79\xc6\xda\x56\xf6\xb8\xce\x58\x8f\x19\x09\xde\x38\xc5\xa1\xc1\x08\x2e\x74\xb2\xac\x75\x7e\x49\xfe\xfe\xe2\xe2\xa2\x26\x1c\x2f\xdc\x8f\x3f\xa8\x8f\x17\x19\x99\x5c\x12\xfe\x65\xb9\x61\x4b\xca\x2e\x1f\x17\x94\x30\xfe\x52\x06\x3a\x5f\x65\x17\xd2\xac\x6a\x99\x5d\x80\x69\xd6\x3a\xbb\x50\x06\x4a\x57\xd9\x85\x36\x34\xba\xce\x78\x67\x0f\xb7\xd9\xb5\xae\x76\x99\x5d\xab\xb6\xe7\x59\xe8\x6a\x2c\x5a\xc0\xa2\xb7\x5b\x35\x45\xca\x98\xde\x87\xb3\xec\xae\xc1\x37\x99\x1b\x7c\x1a\x3f\xed\x4c\x06\x76\x83\x26\xfa\x14\x1f\x25\x15\x29\x20\x4e\x32\x04\x5b\x1d\x8f\x93\xfc\xbc\x2e\x8b\x0d\x37\xbf\x75\xd4\xec\x9b\xae\x98\xd8\x37\xd9\xcd\xbd\x87\x05\xa3\x0e\x33\x72\x96\x65\x4f\xb7\x5b\x3b\xb2\xf8\x2d\x8d\x47\xde\x66\x37\x5d\xfb\x36\x58\x1d\x66\x6f\xd5\xd6\x8b\xbf\xc4\xde\xdf\x4c\x4a\x38\x31\x19\x8c\x7b\x3c\x4e\x57\x87\x99\xff\x4d\x85\xba\xfd\x46\x35\x8b\x16\xbe\x2e\xd7\xa8\xb9\xcc\xf2\x93\xf5\xf4\x12\xe7\xe3\x71\x7a\xa6\x2c\xd1\x2e\xa5\x91\xe5\xab\x6c\x75\x50\xc0\x0a\xc0\xfd\x23\xcb\x32\x2a\x66\xbf\xe1\xe5\x21\x60\x69\xf1\x41\x4e\xff\x45\xf6\x3c\xe7\xab\xc9\x15\x65\xe9\x39\x5e\x1d\x5c\xa2\x43\xf9\x3b\x7f\x9b\x1e\xe1\x15\xc2\xa7\x7e\xf9\xda\x2f\x3f\x58\x1f\x5e\xa2\x01\xcd\x2e\xbf\x78\x31\x1e\x9f\x7e\xf1\xe2\x44\x61\xf7\xe9\xe5\x17\xa7\xe3\xf1\x8b\x2f\x4e\x4f\x24\x55\x98\xd6\xdb\xad\xfc\x4b\x06\x67\xd6\x33\x3b\x94\xd5\xed\x74\xde\xec\x98\xce\xeb\x3d\xa7\xf3\x7a\x3c\x7e\xf3\xc5\x6b\x3d\xfa\xe5\x17\x6f\xc6\xe3\xd7\x5f\xbc\x31\xd3\x13\xd3\x91\x7f\x36\x89\x9d\xc2\xc9\x99\xb2\x0d\x3c\x3f\x4c\x5f\x1d\xac\xd1\xf4\x4c\x59\x29\x2e\x08\xe3\x60\xc7\x96\xd1\x93\x57\x07\xa9\x18\xe5\xe3\x4f\xa6\xaf\x60\xab\x9f\x67\xcb\x16\xa8\x74\x81\x97\x77\x61\x90\x63\x03\x7b\xfb\x37\x21\x5a\xa4\x89\x8d\x38\xb8\xdd\xa6\xcf\x0f\xb2\x05\xc2\x49\x7e\x5e\xca\x5e\x4b\x74\x06\xf6\x96\xcf\x0f\x6f\x07\x66\x17\xcf\x49\x51\xde\x78\xa5\x07\x57\x50\x0a\xdb\xf9\x58\xfc\x3c\xb8\xfd\x7c\x71\xe0\x5e\xc8\xaf\xe5\x55\x7e\x99\x2d\xbf\xb8\x1d\x94\x99\xed\x63\x33\x1e\x8f\x1e\x8f\xc7\x2f\x4f\xd4\xa0\x53\x3b\xb8\x28\x7a\x39\x1e\x3f\x3e\x51\xb5\xa7\x9b\xed\x36\xb5\xbf\x54\x45\x84\xf5\x24\xdc\x99\x9d\x5c\x4d\x0f\x6f\xb5\xb9\xdd\x5d\x1b\x9d\x4e\x29\x0e\x91\xe9\xb4\xc4\xa0\x80\x9d\x9e\x39\xee\x9d\x95\xc5\xcf\x80\x9b\x01\x0d\x47\xb0\x73\x1e\xc3\xce\x75\x76\xd7\x78\x37\xa2\x94\xbd\x6c\xba\x31\xe7\x80\x76\xe3\x44\x38\xfb\x18\x7e\x3e\x68\xa1\xbe\x41\x1d\x73\xcc\xda\x00\x6c\x1d\x50\x79\x71\xbf\x28\x0c\x6c\x86\xf7\xc4\x02\x9f\x9a\xf1\xa2\x7b\xc6\x0a\x35\x5f\x74\xcf\x5b\xd6\x18\xd4\xd2\x58\x32\xbb\x03\xc7\x80\x74\x71\x78\x81\x3e\xfe\xa4\xe9\xba\x9c\x6a\xe0\x55\x0f\x91\x59\xf6\x6c\x55\x74\xfd\x2b\x79\xd7\xbe\x58\xca\x19\xc5\x96\x6f\xaf\x66\x39\x1e\xa7\xd1\x5e\x54\x15\x6d\x22\x68\xe1\x35\x3f\x49\xeb\xb6\xa7\x5c\x8e\xa9\xc0\x84\xdd\x94\xce\xec\x0b\x2f\xd7\xd3\x43\xaa\xa8\x5e\x83\xa6\x91\xce\x14\x84\xe3\xfa\x7d\xbc\x37\x1d\xeb\x2d\x86\x29\x2e\x8d\x05\x57\x19\x64\xd6\xa9\x94\x83\x8e\xb2\xc0\xb2\x2e\x3a\x53\xde\x55\xd2\x60\x62\x0d\xd7\xbf\x57\x06\x35\x4b\xeb\xc7\xe1\x16\xab\x61\xac\xad\x2a\x26\x61\xe6\x88\xac\x6d\xd6\xd9\x9d\xcb\x13\x57\x99\x47\x2d\xb9\x21\xac\x98\x65\x1f\xa7\x02\xbe\xb6\x92\x96\xa1\x8f\xe1\x5a\x5e\xd0\xb7\x60\x23\xe9\xd4\x44\x61\x8c\x73\x81\x36\x07\x96\x35\x23\x8f\x68\x46\xfd\x94\x42\x8f\x10\xbd\x48\xbb\xe7\x45\x11\x4e\x47\xd5\x76\x0b\x4c\x32\x5d\x08\xa6\xc1\x19\x6e\x3c\x66\x13\x4e\x6a\x9e\xf2\x49\x79\x4d\xaa\x8b\xa2\xbc\x39\xb0\x7f\xfe\xe0\xfc\xfd\x77\x93\xfa\xda\xc4\xa6\xf3\x26\xd9\xec\x52\x5d\x45\x73\xa9\x7f\x30\x5d\x55\x90\x26\xa3\x75\x90\x34\x23\x36\x65\x86\xb1\xe2\xa3\x27\x47\x53\x8a\x6b\x5d\xf6\x03\xde\xd8\xb2\xfa\xe4\x68\x5a\xe3\x42\x97\x3d\x17\x6c\xd5\xc2\x16\x17\x27\x7c\x0a\xfc\xc7\x02\x7c\x44\xef\x16\x59\x96\x55\xe3\x71\x9a\xff\xef\x8c\xe1\xcd\xff\xce\x94\x2f\xc8\x45\x56\xa6\x68\x90\xff\xef\xec\x42\x7c\xbc\xd0\x14\x42\x4e\x65\x9a\x63\x39\xee\x74\xd3\x34\xee\x22\xbe\xa1\x8c\x48\x12\x96\x95\xf2\x7b\x90\x2a\x24\xf0\x75\x37\x61\x04\xb3\x3b\x3f\xdb\xc7\xf4\x08\xfb\x39\x3c\xf4\x87\x1f\xc2\x1a\x3f\xd8\x1a\x0d\x00\xe0\x23\x27\x97\x2e\x78\x6b\x65\x59\x46\x1e\xa1\x2a\x23\x8a\x43\x03\xcc\x7f\x48\x5c\xae\x18\x33\x53\x2a\xa7\x6f\x8a\x15\x41\xa6\x41\x36\x92\x83\xec\x90\xb8\xdc\x20\x0d\x52\x8e\x1c\x64\x55\xb4\xc2\x0f\x91\x0e\x5e\x97\x6b\x53\x6c\xdb\x33\xaf\xdc\xa6\xfc\x15\x6c\xb2\x71\xd0\x17\x9b\x1f\x26\x0c\xc9\xc2\x38\x19\x8e\xc8\x84\xcb\xcc\xcf\x83\xe8\x86\x42\x0d\xdd\xb4\xbf\xf8\xcc\xb1\x4c\xb5\x2e\xd9\x9f\xcd\x4f\xdc\x1f\xd3\xd9\x1c\x00\x26\xcf\xee\xd4\x63\xda\x94\x61\xbb\xf0\xe9\x11\x36\xab\x10\x27\x24\xaa\x0a\xb9\xcb\x3d\x0a\xe6\x1e\xc5\x40\x52\x7e\xe6\x1f\x07\xf3\x8e\x43\x51\xf8\x10\x66\x0e\x99\xc7\xa0\xfb\xf0\x53\x47\x4a\x7f\x68\x37\x15\x9b\x1d\xc0\xd5\xc6\x2d\x94\x2b\x58\x74\xa2\x31\x86\x06\xc9\x8a\x2e\x97\x84\x09\x0c\xb6\xb0\x68\x49\x5c\x31\x67\x02\x99\x3b\x9b\x03\x8e\xf9\x17\x45\x98\xc9\x86\x1f\x66\xe1\xb7\x29\xff\xbc\x08\x73\xe5\x38\xd5\xcc\x72\x78\x76\xd4\x31\x8f\x1f\x9c\x79\xbc\x2e\xd7\x99\xb3\xb4\x83\x0a\x57\x7a\x16\x66\xf5\x27\x95\xe9\xde\xee\x48\xa5\x67\x61\x73\xe7\x38\xd5\xcc\x2c\x2a\x31\x0b\x7a\x91\xfe\xff\xec\xbd\xfb\x7b\xdb\xb8\xb5\x28\xfa\xbb\xfe\x0a\x99\xa7\x57\x43\x1c\xc1\xb2\x9c\xe9\xb9\xdf\x3d\x72\x38\xda\x99\x3c\xda\xec\xce\x24\x39\x49\xa6\xfb\xf4\x53\x55\x97\x96\x20\x1b\x0d\x05\xa8\x20\x98\xc4\x63\xf1\x7f\xbf\x1f\x9e\x04\x48\x50\xa2\x1c\x3b\xcd\x74\xfb\x87\x99\x58\xc4\x1b\x58\x58\x58\xef\x45\x8e\x92\x04\x0f\x06\x31\xdf\x6e\x99\xc5\xce\x1a\xfc\x5c\xe6\x0f\xab\xc0\xb9\x8b\x94\xc7\xb3\x74\x5e\x39\x17\x78\x5f\x4b\x0b\xd6\x30\x4d\xc6\x67\xe9\x63\x6a\x42\x9d\xa4\xc3\x21\x88\x71\x42\x45\xad\x91\x86\x45\x77\xc7\xb1\x7f\x1f\xfd\x1a\x62\x2f\xb0\x73\xcc\x10\x8d\x7e\x7a\xf9\xea\xf9\xbb\xf3\x37\xcf\xdf\x9e\xbf\x79\xf2\x87\xe7\x09\x1a\x3d\x7b\xfd\xf3\xf9\xb3\xe7\x3f\xbd\x7f\xd2\xfc\x20\xea\xfa\x35\x5e\xfe\xdf\xe7\x3f\xf9\x1a\x88\x71\xaf\x59\x81\xf7\x1a\xbd\x9c\x6a\x5f\xbc\x47\xbd\xc6\x88\x4c\x45\xfe\x4e\xbe\xef\x35\x66\x47\xb4\x4f\x1c\x29\xb2\xcc\x8d\x0b\xae\x3c\x65\x71\xc3\x93\x51\xc7\xe7\x53\x7b\x10\x47\x78\xc5\xd2\x35\x92\x9e\xfe\x39\x5b\x24\xd1\xff\x88\x20\xd2\xde\x4e\x9b\x2a\x5e\x81\x21\x1a\x6c\xd9\x47\x9c\xe3\x0b\x9c\x61\x7e\x9d\x18\x68\xb3\x65\xda\xff\x6a\xbc\xf9\x5c\x7d\x33\x2e\x55\xde\xc7\x0b\xca\x96\x88\x25\x2a\xbd\x78\x2d\x48\x9a\x9b\xc5\x0f\x01\xbd\x91\x2a\x61\x95\x44\x18\xf2\x12\x9a\x26\x3d\xae\xdc\x3e\x01\xe4\xd2\x48\x1f\xc5\xd1\xe3\xa3\x25\x5d\xf0\xeb\x0d\xea\x5f\xf1\x75\xf6\xc3\x63\xfd\x7f\x94\x2e\x7f\x78\x7c\xa2\xfe\x11\xe3\xfc\xf0\x38\xdf\xa4\xe4\x87\xff\xfb\xf8\x44\xfe\xfb\xf8\x44\x7d\x3c\x91\xd5\x23\xd1\x9f\xf1\xdd\x11\x7c\x87\x9c\xd9\x0a\xb3\xdc\x90\x36\x72\x7e\x5a\x18\xa0\x1f\x0c\x7f\x19\x6e\xde\x40\x64\xbd\x9b\x70\x93\x16\x59\xa4\xe4\x24\x55\x3b\xfa\x2f\xd1\x8f\xe9\xde\xd0\x67\x8e\xc8\x32\xbe\x59\xd3\x25\xca\x94\x1b\xf2\x26\x65\xb9\xed\x3f\xe4\x6b\xe2\x25\x57\x59\xa4\x6b\x94\xe1\x5f\x51\x1c\x2d\x52\xe2\x04\x0d\x00\xa0\x84\x82\x2a\x50\x4b\x0c\x75\x63\x5c\x50\xb5\x6f\xac\x3b\xaa\x8a\x07\xba\x5b\x0f\x29\x36\xd0\xb8\xa1\xdc\xdf\x0e\xea\x23\x4a\xc2\x0e\x1e\x09\xdf\x6e\x11\xac\x65\x7c\xe7\xb0\xe9\xcf\x13\xf4\x6d\xca\x28\xfd\x50\x6c\xe2\x28\x47\xec\x23\x5e\xa0\xc9\x22\x25\x11\x30\x23\xbe\xa0\x92\xd3\xb6\x7b\x04\x40\x09\x46\x0c\xa5\xcb\xd7\x24\xbb\x8e\x41\x18\xa0\x34\x11\x7b\x22\x7a\xba\x8d\xdc\xd5\xce\xb7\x16\x8d\x49\x06\x70\x19\xe1\x5c\x05\x72\x41\x15\x6a\x2f\x25\xe1\x15\x08\x33\x53\x0b\xab\xd5\xc7\x26\xec\xba\x6c\x10\xcd\x54\x4c\xa8\xfe\x13\x43\x5f\xcc\x05\xd7\xd1\x08\x85\xc4\xa9\x85\xb2\x2c\x93\xa1\x70\xd5\xc0\x1a\x71\xce\xe6\x90\x24\x47\x63\x88\x93\xa3\x53\x48\x0d\x94\x73\x76\x6d\xe9\xa0\x54\x90\xce\xb3\xda\x64\xe6\x31\x38\x3b\x8a\x49\x12\xa7\x49\x3e\x22\xe8\x33\x8f\x01\x18\x2d\x29\x41\x40\xba\xb2\x4a\x0f\xc7\x54\xf9\xe3\x00\x78\x24\xde\x32\xfd\xf0\x48\x3a\xfa\x4c\x0c\x09\xce\x74\xd8\xd2\x02\xdc\x60\x31\x05\x9a\x14\x36\x54\xa9\x98\x00\xd9\x6e\x95\xff\x66\x3e\x52\x53\xde\x6e\xcd\x5f\x71\x15\xd4\x14\xaf\x62\xac\x83\xb7\xd0\xd2\x20\x0b\xa6\x82\x39\x39\xdb\x0a\x6e\x82\x01\x5e\x5e\x92\x8f\x69\x86\x97\xfd\x94\x73\xb4\xde\xf0\x3e\xa7\x7d\x69\xaf\x51\x2c\x78\xc1\x50\x9f\x50\x72\x2c\x97\x7c\x91\x55\x41\x7f\x22\x50\xc6\x77\x15\xe9\x88\x19\x55\xbb\x84\x3a\x8b\x4a\x16\x29\xd1\x01\x55\x30\xd1\x31\x99\x24\x7c\xc7\x00\x6a\xd8\xd6\x78\x46\x8f\x2b\x75\x15\xf2\x8b\xbe\x42\xae\x9f\xb5\xf5\xb2\x16\xf0\xf9\x48\x60\x65\x32\x1b\xcf\x21\x4d\xc8\xec\x74\x6e\x12\x5d\x2d\x52\xa2\xf0\x87\xe0\x2d\xf3\x24\x35\x77\x48\xf4\x0c\x0b\xe5\x63\x66\x87\x82\x59\xd5\xc8\xb9\x6b\x39\xa4\x8e\x9b\x78\x91\x64\x35\x8c\x54\x98\x18\xdb\x0a\xc3\x6b\xbc\x66\xd3\xb6\x9a\xd2\x74\xb9\xac\x17\x65\xb0\x00\x30\x9b\x15\xf3\x12\x6a\x73\x9a\x56\x87\xbf\xdd\x7d\xcb\x78\x66\xe1\x10\x21\x25\x0c\x8c\x5c\x0b\xa4\x61\xdd\x3f\x1d\x1f\x5b\xd9\xcd\x8d\x39\x16\xe4\x9f\x89\xc0\xb9\xda\x31\x74\xb9\xb4\xb3\x51\xbe\xa3\xba\xc9\xa8\x0a\x70\xa0\x66\x09\x23\x86\xf4\x31\x46\x62\x56\xc1\x15\x05\x52\x99\xca\x6a\x7b\xc7\x50\x9e\xbd\xd5\x14\x03\x63\xea\x04\xdb\xaa\xa9\x76\x4e\x35\x1d\xe9\xed\x8f\x6b\x6f\x0b\xdb\x87\x4b\x09\xe5\x7e\xcc\xc4\x30\xc6\xf5\x03\x17\xde\xcb\xeb\xcd\x12\x9b\x56\xb2\xba\x6f\xf5\x5b\x53\x05\xdf\xdb\x0b\x36\x1d\xf6\xc1\x18\xd3\x05\x97\x6f\x28\x98\xbb\x5d\x7a\x6b\x83\x27\x86\x60\xba\xa9\xdc\x3c\x27\x47\xe3\x36\x27\x5a\xb3\xb2\xb2\x04\x2d\x4b\xb3\x0e\x92\xf9\x89\xb4\x45\x3f\xb6\x85\xa1\x15\x6b\x67\xe4\x7a\xd6\x9e\xb6\x27\x95\xc5\xe0\xe6\x36\xa8\xb6\x9a\x96\x94\x00\xfa\x60\x50\xe5\x15\x1d\x31\x24\x89\xe0\x1b\x51\xbf\xe1\x34\xbe\xeb\xd8\x9d\x1c\xd9\x9b\xac\x60\x72\xa8\xa5\x78\x58\xec\x55\x89\xcc\xed\xc3\x28\x8f\x24\x98\xe8\x58\x17\xd5\xdc\x26\xac\x74\x60\x87\x04\x37\x58\x63\xfe\x06\x41\x12\x02\x21\xf7\x9b\x92\xcc\x11\xca\xd6\x72\xa8\x7d\x59\x92\xee\xe6\x6e\x11\xfd\x9c\xbd\x53\x93\xb6\xf7\x4b\xbe\x03\x01\x02\x36\x1e\x43\x27\x4c\x1f\x02\x25\xac\x9e\x93\x49\x40\xfa\xd5\x14\xbb\x3c\x0a\x8a\x5d\x1e\xb9\x62\x97\x47\xf3\xc9\x4d\x09\x49\xd8\x39\x7e\x95\x2e\x38\x65\xf2\xf9\x32\xc8\x72\xe2\x52\xe0\x3d\xdb\xbb\x0c\xd2\x91\xd4\xbd\xfc\x35\xd5\xcf\x4b\xc8\x00\x30\x6c\xa5\x89\xf7\x56\x3d\x86\xb8\x54\x2e\xfb\xf5\x75\x39\x5a\xa0\xc4\xc5\xb3\x32\x86\x9a\x62\xdc\x69\xa2\xd2\x08\xab\x82\xb8\x4a\x75\x6c\x83\x6a\xc5\xcd\x7b\x8b\x1d\x44\x0d\x20\x2d\xa1\xa0\x28\xc2\xb1\x57\x2a\xd6\x21\x46\x92\x38\xf0\x9f\x7a\x9a\x10\x97\x16\xd0\x83\xeb\x18\x61\x66\x4d\x31\x86\x54\xf6\x29\x07\x22\xb4\x19\xbc\xd3\x45\xa7\x8b\xd4\x7c\xf6\x91\x67\xf8\x02\xd4\x01\x39\x70\x07\x30\x59\xa9\xd0\x41\xf7\xf6\x7e\xd4\x25\xcd\x52\x04\x6a\x73\xe8\x43\xac\x02\x4c\xe6\x98\x5c\x16\x59\xca\xf0\xaf\x08\xc4\x64\xb4\xa1\x9b\x18\xc8\xac\x3d\x33\xa2\xe1\xf5\xf8\x74\xde\x13\x44\xdd\x22\x2b\x96\x28\x8f\xa9\x94\xd5\xcb\x7a\x7a\x63\x6f\x3c\xf2\x21\xcc\x26\xea\x28\x6a\x32\x7b\x3f\x74\xce\x66\x82\xcb\xd2\x90\xf5\x11\x5d\x45\x30\xc2\x24\x82\xd1\x8a\x32\x69\x6e\x26\xfe\x64\x74\x1d\x49\x23\xdd\x79\x73\xaf\x33\x2c\xfe\xdb\x5c\xd0\x94\x2d\x5d\xc3\x96\x05\xdd\x5c\x1f\x6b\x03\xf1\x10\x02\xf2\xda\x05\x4d\x63\xdc\x1e\xba\xe2\x7d\xd4\x99\x91\xb2\x9c\x0a\x4f\xc6\x90\x39\xd1\x32\x91\x49\xe9\x7f\xc6\x1f\x9b\xbf\xcf\xf8\x70\x08\xd8\x8c\xcf\x13\x34\xe3\x26\x5e\x66\x9f\x95\x75\x2e\x4c\x0e\x75\x4f\x1c\x98\x1e\x54\x2d\x44\x1c\x89\xc0\x7c\xfe\xf8\xdd\xd9\x95\x7c\x23\x38\xda\xfb\xe7\x54\x48\x32\x8b\xf2\x62\xb1\x40\xca\xe6\x4b\xcc\x27\x9a\x43\x9c\xd4\x42\x50\x5a\x94\xaf\xc2\xb0\x4e\xec\x53\x0b\xb5\x4d\xcb\xc4\xf8\x1a\x40\x69\x3f\x26\x3e\xe5\x93\x59\xa4\x40\x84\x0b\xf8\x48\x4d\xb4\x9b\x1f\xb1\x54\x6c\xca\x62\x03\x60\xef\xd1\x67\x3e\x91\x2e\x06\xf6\x93\x0c\xfc\x1f\x41\xa7\x8e\xcc\x72\xd1\xa8\x25\xbf\xba\xf5\x9e\xc8\xbd\xae\xd7\x53\x06\xb8\xd6\x27\x42\xec\xbe\x8c\x26\x5d\xb3\x1b\x66\x38\x3d\xce\xd2\x0b\x94\x89\xbb\x85\x79\x26\x5e\x58\xa7\x85\x5d\xa5\x13\x6c\x06\x2e\x51\x86\x2e\x53\xae\xac\xf2\xa5\x95\xa8\xa0\xbc\xce\xd5\x6b\xf1\xd4\xcc\x20\x9c\x7f\x7a\xe4\x6d\x01\xb4\x71\xcc\xea\x3d\x4e\xa3\xff\xe1\x13\xfb\x5a\x74\xfb\x72\xa9\x83\xbd\xe9\xdf\x06\xf4\x05\x84\x69\xf9\xbc\x9d\xc1\x7f\xbe\x8b\x39\xbc\x11\xdb\x3a\x09\x04\xe6\x46\x53\xa4\xe3\x67\x94\x8a\x3d\xd1\x61\x6b\x74\xc4\xce\xa6\x76\x55\x92\x4e\xb8\x7a\x9e\x7b\xa4\x19\x93\x84\x80\x1b\x34\x12\xff\x42\x3f\xd4\xdc\x11\xb7\x71\x09\xed\x6e\xcc\xc8\xdc\xbb\x2a\x65\x2f\xca\xe5\x0d\x73\xe7\x28\x78\x66\xa2\x8f\xd8\x90\x70\x70\x86\x6c\xd4\x5b\x26\xe3\xde\x4e\x90\xaf\x74\x96\x5f\x25\xad\xeb\xac\x2c\x78\x32\xfe\x99\x68\x2e\xc9\xfe\xae\x9e\x5f\x37\x72\x6a\xfd\xa4\x63\x1d\x61\xb4\xbe\x87\xe2\x21\xae\x47\x1a\xb2\x5d\x47\x50\xd0\x49\x4b\xbc\x7c\x29\xdd\x3a\xb5\x54\xf5\x16\xc4\x6b\x73\x7d\xb1\xea\xf8\x17\x19\x09\x49\x46\x11\xbd\xb3\x6e\x9d\x40\x9d\x6d\x33\xee\xb0\x99\x3e\xbd\x80\xf7\xbc\x61\x86\xb1\xc4\xb9\x73\xbd\xf3\x62\x23\xde\xaf\xfb\x14\x78\x9a\xf9\xa1\x11\xce\xed\x26\xbc\x33\xe3\xfa\x92\x64\x75\xf5\x06\x83\xe6\x15\x9c\x36\x3f\x8d\x70\x6e\xbb\x09\xf0\xaa\xa7\x82\x9b\x08\x0e\xc9\x43\xc2\x26\xb5\x3d\x31\xdf\xc3\xbf\x1e\xf6\xbc\x7f\x43\x7e\x2a\x4f\x7e\xb9\x3e\xfd\xf8\xfa\x2f\x4f\xc2\x7e\x2a\xd6\x43\xa5\xe1\x4e\x72\xfa\x7b\x78\xea\xdb\x14\x77\xb6\x13\x3e\x6c\xb3\x3a\xf9\x0a\x89\x2e\xaf\x50\xea\x51\x64\xe2\xf7\xb1\x7a\x60\xdb\x28\x32\xd9\x24\x38\x01\xb7\xf1\x7d\x91\xcb\x6d\x44\x81\xa5\x01\x22\xd8\xa0\x0f\xf2\x2b\x5a\x64\xcb\xf7\x28\x65\xcf\xe8\x27\xf2\x5a\xc6\x44\x16\xcf\xa3\x98\xaf\x41\x19\x35\x35\xc1\x2d\x95\x04\xc7\x46\xdf\x14\x81\x91\xe8\xbd\x04\xf0\x70\xfe\xdf\x8e\xa4\xf1\x73\x68\xfa\x11\xd0\xa8\xec\x9c\xeb\xef\x7f\x44\xa9\x44\x87\xde\x87\x49\xfd\xc9\x93\x4d\x70\xfe\x22\xcd\xf9\x05\xa5\x3c\x06\x0d\x8d\xa4\x1f\x30\xf5\x3b\x01\x8f\x33\x92\xae\x51\x52\x03\x81\x63\xe5\xb8\x37\xff\x6e\x47\xb8\xd5\x1d\xad\x11\x59\x8a\xb6\x55\x50\xd5\x2a\x71\x06\x1a\x39\xb1\x3c\xce\xd8\x60\xc0\x04\x8f\x7c\x06\xec\x20\xa2\x03\x4f\x97\xc7\x00\xac\x35\xeb\xb5\x57\x46\x4e\x06\xa8\x46\x21\x97\xe1\x6f\x9d\x1d\x6a\x22\xc3\x50\xc6\x09\x13\xaf\x2e\x28\xcb\x32\x77\xc6\xca\x5b\xe4\x06\x08\xda\xf0\xfe\x71\x5a\x58\x68\xb2\x6b\x96\x7b\x6f\xf6\x37\x84\x87\x87\x74\x48\x3f\xbd\x5f\xaf\x82\x78\x38\x18\xa1\xcb\x0f\x2d\xf3\x7b\xe9\x1c\x63\x91\xc0\x97\x47\x94\x71\x43\x30\x08\xd8\xf7\xa2\xc3\x88\x7b\xd0\xc0\xa4\xe6\x1a\xe9\x50\x0c\x26\x0a\x5b\xe4\x86\x51\x38\x55\xa1\x1b\x64\xf5\xca\xa1\xcc\x38\xcc\x74\x1f\x4a\xde\xb9\x5d\x03\xed\x8b\x47\x73\xe8\x83\xd5\x09\xa0\x3a\xbf\x55\x8a\x12\x37\xb6\x80\x27\xc7\x1b\x86\x3f\xa6\x1c\x9d\x28\xd2\xd7\x2f\xbe\x7f\x28\x0d\xe8\xcc\xed\x27\x47\x2f\xc6\xe0\x29\x98\x8d\xe7\xbd\x90\x76\x1e\xe7\x02\xae\xdf\xa5\x2b\x14\x13\x30\x18\xc4\x24\x21\x23\xb5\x0a\x00\x91\xf8\xb5\xdd\x46\x11\xd0\x92\x17\x67\xc4\x80\xfc\x42\xab\x76\x5b\x55\xc1\xbd\x3d\x32\x07\x10\xec\xf1\x9b\x57\xe4\x1e\x91\xc1\xc0\x68\x6e\xab\xbf\x3a\xea\x70\x7b\x77\xa9\xb7\x2d\xe3\x30\x4e\xad\x01\x6d\xa5\x91\x52\x12\xb7\x36\x22\xeb\x20\x58\xbf\x6b\x5a\xcb\x4c\xce\xd7\x6d\x39\xdf\x63\x47\xd1\x01\xe2\xa0\x28\xd1\xbd\xce\x21\xde\x80\x1d\xb8\x5d\x1b\xcc\x5b\x85\xb4\xdf\xc0\x86\x99\xe9\x35\xb7\xcc\x96\xec\xdc\x34\x53\xeb\x8e\xb7\x2d\x4b\xf3\x1c\xaf\xae\xbf\xcd\x4d\xd3\x93\x6b\x6c\x99\xf9\xbe\x6b\xc3\x74\x9d\xbb\xdd\xae\x65\x9a\x5f\x21\xf6\xad\x02\x99\x9d\x5d\x7d\xc3\xaa\x82\x1d\x3b\x66\x2b\xdd\xed\x96\x5d\xf1\x75\x76\x9c\xa7\xab\x6f\x73\xcb\xc4\xec\xc4\xf3\x5a\xdf\x31\xfb\x7d\xc7\x86\x99\x3a\x77\xbc\x5f\xc5\x3a\x25\x35\x08\xbb\x5b\xfa\xc4\x8c\x90\xe0\x07\xb2\xe1\x37\x41\x36\x40\x96\x9c\x9c\x0f\xb7\xc7\xc3\x93\x4b\x48\x92\xa8\xef\xe8\xaa\x70\xe5\x7e\xc2\x63\xa4\x29\x49\xbc\x8a\xdb\xa8\x48\x2c\xf6\x08\x27\xd8\x52\x91\xca\xca\x0d\xeb\x63\x8a\x74\x6e\xce\x04\x8f\x38\xfd\x89\x7e\x32\xee\xbf\x23\x86\x64\x20\xaa\x98\x41\xe2\x5a\x7b\x5f\xa5\xec\x09\x8f\xc7\xc0\x77\x16\x1e\x52\x1d\x69\xfb\x14\x94\xbb\xaf\x06\x3e\xe8\x6a\x64\x62\x42\x8b\x34\xef\x8a\x4a\x94\xf6\xd6\x69\x75\x37\x58\xe7\x2e\xec\x17\xec\xa4\x7c\x35\x97\x5b\xe0\xdb\x27\x54\x48\x68\x0f\xb6\x21\x07\x6d\xa9\xd4\x1e\x75\x7f\xcf\xd4\x8e\x56\x8d\xbe\x9d\x0d\x35\x73\xaa\xef\xa7\xfd\xfe\x75\xb6\x93\xe1\xf5\x61\x5b\x29\x1b\x7c\x43\xdb\xc8\xf0\xba\xb1\x85\xe2\xdb\x57\xda\xbe\x82\x2c\x64\x0e\x8c\xfb\x7a\xfb\xcc\x08\xda\x43\xe3\xe1\xed\xfb\xd6\xdf\xbe\x9a\x59\x86\x36\xa2\x8c\x11\xfc\x1e\x40\x92\xb0\xd9\x78\x0e\x71\xc2\x66\xa7\x73\xbb\x89\xd2\xeb\xf2\xf4\xf7\xe3\x09\x86\x69\xc2\x66\x8f\xe6\x30\xaf\x4a\xd2\xed\x36\x85\x45\x92\x4f\xe9\xf1\xf7\x13\x7a\xb0\xcc\x85\x0c\x06\xc6\x9a\xe6\x87\x62\x9a\x4f\xc9\x28\x2f\x2e\x54\x61\x3c\x86\x05\x18\x46\xa3\xd1\x28\x9a\xd4\x3f\x4f\xc8\x9e\x77\xf0\x30\x12\xb1\x20\x4b\xc4\xf2\x05\x65\xdf\x26\x4d\x5d\x4d\xaf\x4e\x55\x3b\x25\x3b\xe8\xea\xaa\xd6\xdd\x52\xd6\x85\xa0\x50\x0e\x26\x1f\x9c\x56\xdf\x0e\x9a\xb6\x93\xaa\xe3\xea\xaa\xe0\xab\x20\xec\x4f\xb7\x70\x53\xd1\x96\x19\x26\x5d\x30\x4f\x10\xf4\x31\x2c\x07\x53\x3e\x71\x0c\x94\x38\x00\x9a\x9e\x1c\x83\xd1\x3a\xdd\xf8\xd0\xf2\x69\x77\x12\x17\x54\x19\xb8\x97\x70\x36\xbf\x95\x45\xd2\x27\xe9\xe6\xbf\x6b\xd7\x38\x68\xc4\x57\xea\x42\x8f\x7e\x35\x09\xb4\xd1\xe1\x35\x4c\x58\xc7\x41\x13\xd6\xb1\x6b\xc2\x3a\x9e\x4f\xa2\x48\x86\x17\xd0\x86\x2e\x56\xa7\x85\xc2\x89\x8b\x9f\x7f\xde\xa0\x05\x47\xcb\x7e\xda\x57\x2d\x60\xff\x92\xf2\x7e\xda\x8f\x86\x4e\x5e\xf8\xa9\xa3\x25\x9b\xc8\xd7\xb2\x4a\xea\xee\x33\x1f\x46\xba\xbd\x23\x4f\xbf\x49\xbd\x5f\x2b\xb0\xcf\xe6\x34\xe4\xbf\x66\xb2\xf4\x07\x53\x9a\xbb\x69\xee\x1b\xc3\x49\xa0\x32\xd9\x93\x93\x24\xb1\xdf\x8f\xcc\xdf\x95\x09\xde\xd4\xcc\x6d\x62\x07\xec\x72\xc3\xea\x94\xf6\x03\xa8\x74\x01\x15\xcb\xa7\x9e\xc4\xd3\xc9\xdf\xb6\x7f\xcd\xb7\xc7\xdb\xbf\x9e\x80\xbf\xbe\x3b\xb9\x84\xa1\x53\xf6\xf9\xd6\xf2\xbf\x35\xa8\xd5\x58\x97\x07\x30\xf3\xc1\x8c\xe1\xf5\x7f\x6b\x54\x14\xa4\x9e\x1e\x80\xa4\x86\x8b\x5c\x6c\xf2\xef\x0f\x2b\x74\xbd\xa1\xd2\x3e\x36\x40\x08\x67\x34\x2f\x18\xb2\x16\xcd\xff\x02\x93\x90\xf3\xf3\x8c\xa6\x4b\xc4\x20\x4b\x6e\x9e\x3c\x7d\xff\xf2\xf5\x2b\x95\x9b\xbb\xa7\xa7\x7f\xc5\xd7\xd9\x45\xca\xf2\x93\x0f\xe8\xfa\x13\x65\xcb\xbc\x3e\x69\x4c\xfa\x5c\x67\xc6\x64\xd7\x53\x96\x88\x1f\xff\x2c\x30\xb3\x1b\xb0\xb7\x07\x60\x6c\x1d\x18\x2d\xb8\xbc\x53\x07\x8d\x29\xbd\x7e\x1a\xa3\x76\xee\x0b\x18\xb7\x2f\x36\x52\xeb\xdf\xed\xef\xb2\xeb\x34\x15\x5b\xb3\x2e\x32\x8e\x8f\x53\x41\x9a\x1f\x66\x45\xe1\xd3\xff\x5f\xd9\xbb\xe1\x6e\x4d\x38\xc2\x3e\xd3\x0d\xcf\x67\x1b\x32\x29\xe9\xee\x8b\xcf\x12\x19\x06\x29\x66\xf7\xe9\x3c\x2e\xbd\xac\x0c\x3b\xe5\x0b\x40\x2a\x83\x6f\x79\xc4\x79\x04\xb1\xe4\xb7\x5a\x77\xa1\x5a\xc5\x54\x7d\x78\x12\x23\x30\x41\x25\x68\x9a\x28\x1a\x73\x22\xa0\x9d\xd1\xf2\x67\x78\xf9\xf4\x2a\x25\x97\xc6\xd1\x88\x1a\xe7\x61\x3d\xf8\x68\x36\x8f\x60\xc3\x2a\xd2\x7a\x0a\xcb\x81\xff\x84\xae\x73\x6d\xe5\xce\x5c\x27\x3b\x7f\x15\xc0\x7a\x8a\xd4\x8a\x44\xf3\x08\xf4\xcc\x5a\x9e\xaf\x37\xfc\x3a\x26\x66\x2d\x35\x78\xf1\x97\x21\x58\xc9\x49\x97\x7a\x35\x1b\xff\xaf\xe4\x4f\xc4\x12\xfc\x25\x90\xb4\xd7\xaf\x07\x80\x12\x40\xbd\xc6\xf6\x83\x34\x29\x76\x42\x27\x69\x0f\x52\x5a\xc5\x04\xce\x35\xec\x89\x02\x79\xfb\x29\xb7\x00\x80\x3a\xe5\xed\x76\x36\x97\x31\x61\x04\x40\x33\xe9\x18\x37\x5a\xe1\x8c\x23\x16\x00\x6f\x99\x00\x1c\x3b\x09\xc0\x4b\xd0\xa3\x4d\xbf\x11\x5e\xbb\x0e\xe2\xfe\x20\xc8\xa5\x4e\x4d\xac\x8a\x77\x6d\xc2\xa4\xfb\x3d\x28\x9b\x9e\x17\xd5\x0a\x64\x86\x7b\x60\x7c\xec\x9a\x73\x8e\xce\xcf\x15\x62\xb6\x1e\x38\x7a\x37\x0a\xbc\x94\xc1\x48\x40\x28\xe8\xc8\x7e\x9c\x4f\x10\x5a\x8a\xe2\xf4\x3a\xe7\xe9\xe2\xc3\xd7\xb7\x9e\xfb\x42\x22\x90\xf7\x76\x23\x6e\x09\xa2\x75\xe3\xee\x48\xad\x5a\x42\x6e\x64\x96\xae\x7e\xd1\x8d\x22\x68\x6a\xf3\x6b\xc2\xa5\xea\x22\x02\x90\x35\x8a\x4c\x8f\x41\xa0\xd5\x03\x54\x64\xa5\x76\xc6\xf5\xe2\xc7\x04\x62\x6d\xe8\x79\x88\xba\x49\xcc\x92\xef\xf7\xe2\x9a\xea\xe1\xe1\x49\x30\x0c\xcc\x3d\x3d\xd2\xdf\xbe\x06\xe4\x8b\xa2\xbf\x94\xe2\xbc\xee\xf3\x05\x6f\x46\x51\x21\xb3\x47\x35\xfb\x51\xf3\x9a\xa5\x62\x57\xd2\x84\x8a\xba\x32\x43\x74\x1d\xc1\x68\x28\x85\xb8\x59\x64\xa1\x14\xa6\xcd\x42\x73\x0d\xe8\xce\xa7\xbe\xeb\x13\xb1\xe7\x7d\xa8\x04\x33\xae\xe7\x5d\x17\x6c\x66\xfe\x55\xe1\xc9\x82\x82\xff\x5b\x91\xbd\x0f\x9e\xc4\x5f\xdb\x93\xd8\x6e\xaa\xe8\xd6\xec\x55\xf3\x55\x80\xdc\xdd\x3a\x81\x5f\xc7\x67\xe4\x31\x3a\x23\xc3\x21\xe0\x33\x32\x77\x5e\x0a\x32\xd7\x31\x13\x62\x19\x08\x6c\x36\x07\x2d\xd4\x6e\x54\x05\x65\x80\x91\x78\x05\x04\x3d\xe0\x5d\x37\xf3\x70\x34\x1d\x3a\x6d\x44\xc4\xfa\x7b\x06\x89\xf1\x4d\xe5\x8d\x61\xeb\x0f\x0a\x81\xf5\xc8\x0b\xae\xae\x64\xc4\xa9\xfa\x01\x26\x33\x3e\xb7\x53\x8b\x51\x22\x96\xa4\xc6\xd7\x13\x43\xda\xc9\x74\x0e\x6e\xc5\x16\xa9\x5b\x94\x90\x30\xdf\x8d\x6b\x4a\x3d\xb2\xc7\x5f\x72\xc7\x6d\x15\xcb\x39\x9c\xb5\xfc\x42\x4a\x61\x56\xc3\xa1\x4f\x62\xa4\x19\xa5\x5b\xee\x96\x58\x85\xa7\x3a\x6a\x0f\xbe\xd5\xd1\x1f\xb2\x7d\xcb\x16\x57\x05\xf9\xf0\x10\x34\xee\xb7\x4b\x36\x7c\x8b\x41\xe3\x24\x50\x25\xb8\x0d\x82\x4d\xda\x08\x48\xd4\x9f\x0b\x84\x33\xcf\x34\xd1\x98\xbb\xe0\x44\xc6\x78\x79\x49\xa4\x8d\xe2\x58\x70\x5f\x2c\xc6\x70\x2c\x23\xc3\x56\xe6\x8a\x15\x52\x93\x44\x8b\x43\x57\xc0\x48\x1d\x46\x04\x00\x3c\x4a\xb7\x5b\xfa\xf8\x54\x43\xc5\x6c\x6e\x83\x99\xe7\xc9\x18\x16\xc9\xf1\x29\xcc\x9c\x27\x80\xc4\xe9\x09\x05\xe0\x2c\x7f\x9c\x9e\x81\x6c\x36\x1c\x16\xf3\x84\xeb\x6b\x9d\xc3\x7c\x98\x50\x8b\x59\xb3\x52\xd9\x3e\x1e\xc6\x28\x14\xeb\x48\xb3\x69\x75\x3e\x57\x21\xa3\x20\x4f\x5a\x51\xf7\x38\x6e\xf0\x0d\xc5\x3a\x02\x10\x29\x0e\xbb\x45\xac\x64\xc2\xe9\x79\x16\x30\x3b\x85\x39\x41\x0a\x4f\x4e\x9e\x7c\x1d\x0a\xce\x41\x6c\xf4\x20\xc4\x46\xd7\x9b\x74\xd1\xd5\xa9\xf0\x01\xb5\x3d\xa0\xb6\xbb\x8e\x87\xb9\xf3\x12\x06\x7c\xf7\x0c\x5c\x31\x30\x8d\x5b\xee\x22\xdb\x71\xe7\x8c\x5c\xf1\x49\x3c\x63\xf3\xea\x06\xd6\x30\x8f\x11\x5e\x99\x1e\xcd\xd0\x6f\x18\xca\x11\xe1\xdd\xa5\x73\x87\x5c\xdc\xc3\x28\x12\x1d\xd2\xf1\x36\x1a\x82\xaf\xcf\x33\x91\xaf\xc0\xb9\x1c\xc2\x0e\xfa\x18\xe9\xd6\xb3\xeb\x78\x81\x1c\xe6\xea\xeb\xf3\x8c\x4d\x67\x06\x92\x30\x1d\x0f\x4e\x8b\x39\xac\x3f\x81\x7d\x36\x7d\x4e\x8b\xc7\xf4\x76\x34\xba\x06\xd2\x36\x1a\x87\xb6\x78\x2d\xdc\xfe\x31\x53\xf9\x2e\x6e\x29\x88\x68\x93\xc5\xb6\xf7\xa0\x74\xf7\x26\xe6\xdb\x3e\x4b\x44\x17\x0c\xaa\xd7\xd3\xb7\x24\x34\xc8\x89\x4b\x1a\xa5\x4e\xed\x99\x08\x7d\x01\x82\xae\xae\x32\x1a\x0c\x2a\x14\x88\x2a\x02\x6f\x8a\x02\xf6\x7c\xcc\xd5\x70\x93\x98\x41\x0e\x4a\x78\x34\x06\x13\x35\xd1\x5b\x1e\xbd\x3a\x8b\xf6\xb3\xf7\xd9\xd9\xdb\x9f\xfa\x12\x2d\x1e\xc8\x97\x07\xf2\xa5\xe3\x03\xb1\x83\xc0\x77\x38\x25\x25\xde\xd5\xee\x5c\x04\x12\xbd\xdd\x02\x69\xbe\x2a\x44\x9d\x18\x03\x78\x84\xf3\x57\xe9\xab\x18\x5b\x08\xb1\x76\x2c\x44\x1a\xb6\x9f\x02\x88\x8f\xc9\xed\xc8\xa7\x45\x20\xb8\xad\x17\x87\xb5\x6e\xaa\x7d\xa8\xf1\x81\xbd\x3d\x8c\x6e\x1e\xae\xcf\xc3\xf5\xf9\x16\xa9\xff\xc3\x59\x70\xac\x49\x19\x02\x4a\x28\xbf\x3e\xdd\x47\xa7\x07\x65\x0b\x77\x49\xa8\x2b\x4e\xe2\xf8\x22\x1c\x04\xa0\x95\xa6\xc8\x8f\xd1\x3f\x8b\x34\xeb\xae\x0a\x79\xb8\x91\x0f\x37\xf2\x36\x01\xbd\x3b\xde\x48\x2e\x98\x06\xe5\x16\xc6\xd5\x8d\xe4\xca\x2d\x8c\x57\xda\xd1\x1a\x5d\x4a\x2d\x11\x6a\xbe\xc8\x07\x95\x26\x18\x62\xfb\xa0\xb6\xdc\x65\xda\x2c\xb9\xb8\x7e\x93\xf2\x2b\x47\xa2\x56\x15\xc9\xb5\x3a\x32\xb8\xa0\xac\x4d\xb5\x6f\xc7\x04\xa6\x7f\xd3\xdb\x5e\x59\xa3\x6e\x10\x32\x41\x50\x5d\x80\x26\x49\x81\x00\xe8\x68\xff\x54\xa5\xc8\x25\x3d\x73\x56\x56\x00\x11\x33\x30\x0d\x98\xa2\x3a\x26\xad\x15\x36\x60\xae\x0c\x14\x22\x00\x1c\xdb\x56\xe2\x70\x21\x0d\x87\x31\xa3\x1b\x83\xcc\x6d\xd2\x60\x43\x4c\xbf\xa5\x56\x53\xed\x92\xa4\x8c\xfe\x03\xa5\x8b\xab\x91\x13\x86\x1d\x12\x63\x22\xb6\x7b\x47\xa4\x7d\xce\xbd\x88\x5d\x0e\x22\x97\xd4\x6a\x1e\x08\xa6\x07\xf4\xfc\xef\x41\x30\x35\x62\x11\xa7\x59\x76\x21\xad\x52\xf6\x28\x2e\x74\xbd\x1d\x37\xd1\xf6\xb4\x17\x91\xda\xaa\x77\x84\x30\xf9\x4e\x1c\x14\x41\xd4\x0d\xe5\xf0\x7b\x43\x39\x07\x12\x90\x64\x59\x23\x1f\x1f\x70\xce\x03\xce\xf9\x56\x70\x4e\x20\x52\x00\x6b\x18\xcc\x7d\x4b\xf4\x5d\x67\xba\xae\x57\xc7\x44\x77\x6a\xba\x5e\x57\x75\xb7\xd1\x47\x2d\xe4\x68\x8b\xa5\xf6\x4e\x6a\xb4\x66\x7f\xc3\xc1\x48\xe0\x96\x1f\xa5\xe1\x12\x28\x0f\xb2\x3a\xbf\x3f\x6c\x97\x09\xe8\x7f\x48\xd0\xf8\x80\xed\x0e\x54\xf9\x35\x7c\x66\x42\x9a\x8e\x40\xe4\x02\x26\xb3\x87\xca\x6b\x8b\x6e\x83\x47\x35\xc0\x76\x94\xd7\xee\xc3\xa9\xa4\x4d\xed\xdd\xc0\xa0\x04\x40\x76\xcf\x72\xae\x83\x38\xa3\x4b\x46\x8b\xcd\x03\x9d\xf2\x70\x73\xbf\x06\x9d\xd2\xd5\x0e\x2c\xe0\xd0\xd4\x90\xda\xe8\x39\xe9\xc4\x6e\x8e\xbf\x71\xc3\xbd\xc8\xde\x51\x57\xb5\xca\x7d\x07\x38\x56\x09\x34\x2a\xa9\xd7\x76\x1b\x9b\x3a\x4f\x62\x00\xd9\xac\xb2\x79\x26\x60\x9e\x48\xc1\xb5\x3c\x7d\x69\x97\xc6\xaa\x94\x76\x5f\x99\xfb\x6b\x90\x60\x5f\x89\xd0\x42\x9d\x28\xab\xae\x14\x13\x03\xdd\x28\x30\xe3\x48\xf6\x2f\x17\x2a\x5d\xa5\xf9\x31\x91\x99\xae\x3a\x69\x08\xcc\xbf\xaa\xc9\x57\xb0\x6f\x08\xeb\x22\x54\x82\xc3\x30\x52\xc7\x55\x72\x62\xdc\x3d\xb3\xe3\x60\xe0\xfe\x82\xda\x44\x40\x2c\x13\x88\xfe\x20\x36\x97\xf3\x28\x1e\x43\x52\x89\x2b\x29\x44\x10\x3b\xc2\x66\x23\x24\xa5\xb7\x42\x38\x57\x69\xfe\x0a\x7d\xe6\x3b\x0d\x17\xd8\x5d\x18\x2e\x88\x63\xdf\x30\xf4\x11\xd3\xa2\xab\xc9\x8a\xf9\xb7\x6a\xf6\x6f\x7f\xfc\x66\xa9\x5f\x19\x04\xde\xe8\x61\xef\x1f\x0c\x30\x79\xb0\x5f\x79\xa0\x99\xbe\x51\xfb\x95\xe1\xad\xec\x57\x30\xf9\x6a\xf6\x2b\x98\x70\xc4\x72\xb4\xe8\xfa\x78\x7e\xa9\xf7\xe1\x5d\x51\xb0\x21\x85\x9b\x95\x57\xdb\x45\xdd\x5a\x8c\x82\xc9\x47\xfa\xe1\x5e\xad\x83\xdb\xb0\xca\x6f\xc6\x29\xf2\xfe\x58\x16\xb5\xf9\x6d\x8e\x7c\x86\xef\x78\xfb\xee\xcf\x6f\x46\x69\x96\xf5\x7c\xf3\x60\x2b\x05\x08\x5a\xe8\xc2\x34\xa1\x5e\x56\xe1\x9a\xdc\x23\x05\xd3\xa6\x6b\xff\xee\x30\x23\x9c\x5d\xbf\x94\x13\x8e\x11\xc4\x90\x3a\xde\x97\x02\xe1\x94\x81\xd4\xf1\xf5\x76\xa9\x6a\x57\xba\xfa\xdf\x7a\xdc\xcb\xdb\x3a\x2b\xfe\x83\xe2\x07\x61\xe0\xc3\xf3\xf8\x4d\xaa\x3e\x76\x33\xdc\x06\xc4\x48\xf5\x0a\x47\x30\x6a\xb5\x78\x91\x42\x00\x99\xfd\xfb\x1b\x32\x5e\x5b\xa7\x0f\x22\xbd\x87\xfb\xf7\xdb\xbc\x7f\xdf\xb2\xc0\xeb\x2b\x6a\x16\xc5\xe3\xff\xe3\xb5\x63\xfb\xf0\x4d\xa8\xf9\xd6\xe9\x83\xd5\xf9\x03\x56\xf9\x37\xc5\x2a\x5d\x8d\xa8\xf6\xe1\x95\xdb\x99\x50\x7d\x65\xdc\xf2\xad\x61\x96\x03\x04\xe9\x4a\xbe\x79\x89\xf8\xb1\x8c\x45\x77\x07\xc2\xd4\x43\x3c\x00\x6d\x92\xd2\xdb\x0a\x48\xeb\x11\x61\x18\x44\x02\xe0\xa8\xa7\x8d\xb2\x9e\x7f\xc7\xa7\x3d\x81\xf7\xea\x12\x22\x83\x28\x71\x92\x24\x74\x8a\xac\x77\x34\x03\x23\x85\x01\x9f\xf0\x18\x0f\x4f\x6f\x75\x23\xc5\x51\xec\x0c\x67\xc3\xee\x22\x9c\x8d\x9a\xe6\x71\xfa\x10\xc4\xe0\xe1\x41\xe9\x26\x45\xd5\x47\x56\xf7\xa2\xb5\x47\x5c\x8f\xa7\xe2\x18\x4c\xd9\x3b\x71\xbb\xc8\xb7\xa6\xf9\xc1\xd6\x22\xe1\xf0\x28\x06\x6d\x05\xf9\xc0\x90\xf9\xbf\x44\xe6\xaa\x55\xf3\x65\xd2\x3a\xf3\xbb\x0b\x8d\xa2\xa7\x17\x30\xe8\xab\xbf\x9d\x5f\x2d\x38\x0a\x69\x66\x12\xd9\x81\x59\x64\x14\xbe\x34\x7b\x40\x2c\x0f\x88\xe5\x60\xf5\x8c\x6b\xc3\x15\x74\xd5\x61\xc1\x10\xf3\xe5\xad\xd0\x8a\x06\xd4\xaf\xa5\x74\xd9\xe0\x4d\x28\xf6\x7c\x17\xc5\x35\xde\xa0\x6e\x74\x96\x1f\x6c\xfd\xee\x93\x3c\x05\xb7\x89\x8f\xc4\x04\x7b\x96\x2e\x19\x0c\x62\x32\xb3\xbf\xe6\x02\x5a\x7b\xf7\x21\xe5\x56\xdb\x72\x98\x7f\xe8\x86\xd1\x35\xce\xd1\x01\x1e\xa2\x2c\xec\xed\x25\x6d\x25\xf9\x15\x22\x31\x03\x13\xe6\xc5\x0c\xf9\xe2\xf8\xc0\x55\xd4\x3f\xe7\x06\x56\x71\x65\x1a\xf1\x25\x89\x13\x66\x46\x5a\x56\x8d\xcf\xf0\x63\x7e\x86\x87\x43\x40\x66\xd8\x8d\x2f\x89\xe7\x95\xa5\x56\xc0\xd0\x13\x62\x7b\xa7\x54\xce\x3a\xee\xc7\x34\x21\x72\xa9\x32\xd2\x85\xd6\x8d\xde\xea\xe6\x29\x55\xcf\x0b\x3d\xb0\xbc\x7f\xe2\x2c\xdb\xa9\xde\x3b\x86\x9b\xc3\xcc\x47\xfe\x2d\x19\x9e\x9d\x6c\x8d\x3a\xfb\x16\xb6\xe6\xf8\x76\x6c\x8d\xd9\xf4\xfb\x67\x6d\xfe\x59\xa0\xe2\xde\xf1\xc2\x7d\xde\x70\xb6\xfb\x86\x33\x73\xc3\xd9\xe1\x37\x9c\x35\x6e\x38\x6b\xdc\x70\xb7\xfa\x3e\xdc\x17\xa0\x9c\xeb\xfd\x95\x60\xd2\xfc\xa6\x9c\x27\xbe\x08\x89\xc8\x63\xfe\x5a\x6f\x37\x13\xa4\xf4\x41\x30\x25\x63\x04\x32\x9c\x37\x9e\xe1\x87\x68\x04\x0f\xf4\x6f\x19\xb2\x5e\xd0\xa1\x02\x82\x81\xd4\xd3\x24\xba\xa0\x34\x43\xa9\x20\x86\x35\x6c\x8b\x03\x7a\xbd\x92\xe1\xd4\xd3\x9e\x0a\x36\x3a\x93\xf6\x4c\xf8\x31\x05\x66\xff\x8b\x24\x9d\xf2\x51\xc6\xd1\x44\xfc\x1f\x66\x09\x3e\x2b\xe2\x0c\x52\x70\x96\x0d\x87\x20\x57\x7b\x9d\xc9\xe7\x00\xff\x50\x35\x5b\xc8\x66\x97\xb2\xd9\x25\x87\xab\x04\x9f\x2d\xe2\x95\x68\xb6\x3a\x3e\x36\xcd\x56\x55\xe8\xb3\x24\x49\xe8\x60\x90\x0e\x06\xba\x88\x02\x98\xdf\xe6\x52\xcb\x7b\xf6\xb5\xe8\x00\x85\x1e\x1f\xf8\xd4\x87\x7b\xfa\x2d\x6a\x54\x0e\x74\x11\x0d\xa8\x4f\xba\xf8\x8f\x62\x82\x39\x4e\xb3\x3f\x77\xf1\x15\x3d\xc4\x7d\xbd\xd6\x71\x43\x15\xd3\x92\x38\xa7\xd2\xc8\x04\x3c\x32\xbd\x2e\x03\x5e\xef\xfc\x36\x61\x42\x92\xb0\x83\x44\x58\x2c\xe8\xba\xb0\x18\xc9\x9f\xa1\xb2\xb8\x74\x07\xed\xe4\x23\x4f\xbe\x0d\x1f\x79\x86\xa4\x0e\xe0\x21\xc8\xd2\x03\xba\xfc\xa6\xd0\xe5\x43\x90\xa5\x16\x53\x99\x7f\xb3\x20\x4b\x47\x9d\x82\x2c\x1d\xdd\x26\xca\x92\xdf\xef\x7f\x8b\x20\x4b\x0c\x6d\xd0\x83\x3a\xf7\x01\x3d\xdf\x85\x53\x8c\x56\xc0\x10\xe9\xf5\x12\x1d\xd5\x38\x4e\x02\xa6\x33\x3c\x9f\x28\xe8\x50\x92\x1d\xb1\x68\x78\xa3\xb6\x6b\x42\xca\x5a\xd6\x22\x0b\x5f\xb8\xbc\xd5\x1b\xa1\x40\xfb\xab\xc9\x7a\xd0\x47\xc4\x3a\xe7\x94\x7e\xb8\x49\xff\x1d\x6f\xd2\x6f\x37\xbb\x83\x94\xe6\x9b\x5c\xbb\x23\x0d\xeb\x31\x00\x93\x19\x9b\x7f\x33\x16\xf4\xf9\x55\xb1\x5a\x65\x0f\x57\xf0\xe1\x0a\x76\xb7\x4d\x42\x09\xaa\x72\x48\x7f\x54\xe9\x97\xbd\x20\x13\x4e\x40\x7f\x99\x9f\xc9\x4f\x83\xef\x3f\x71\x1c\x0c\x06\x7c\xbb\x95\x29\xa4\x58\x4a\x96\x74\x7d\x86\x7f\x38\x3d\x03\x3a\xc1\xd4\x2a\xa3\xa2\x83\x18\xfc\x4f\x7c\x7c\x2c\x1e\x4f\x34\xc3\x73\x28\xfe\x97\xa0\x19\x13\x7f\xb1\x79\x42\xac\x22\xe6\x36\xe8\x42\x5f\x81\x3b\x8d\x90\xf3\xa8\x26\x5d\xee\xd5\x5d\x58\x69\x0b\x13\x54\xf1\x4d\xad\x08\x86\x02\xc8\x62\x0a\xb1\x9b\x2b\x86\xce\xbf\x9d\x48\x3b\x12\x34\x1e\x10\xca\x03\x42\xf9\x16\xdf\xf4\x5b\x87\x03\xa4\x26\x74\xbb\xe0\x42\xbf\x99\xd7\x9b\xb2\xba\x54\xf1\xe1\xb2\x3d\x5c\xb6\x6f\xe1\xb2\xd9\xec\xa9\xe2\xbe\x29\x97\x70\x88\x13\x1e\x33\x8f\xac\x8e\xdb\x09\x03\x0c\xb6\xdb\xba\xe4\x50\x1e\x5a\x12\x70\x69\xa9\x82\xce\xd5\x4b\xc4\x15\x11\xab\xce\x77\xe7\x5d\x2b\xa1\xad\xd8\x7e\x9f\x9d\xbe\xf6\x0a\x06\xab\xba\x4d\x97\x17\x23\x12\xdd\x2b\xff\x83\x01\xf9\xde\x6d\x82\x51\x8d\xc4\x6c\x5c\x4f\x98\xdb\x38\xd3\x78\x7d\xb8\xeb\xfb\x26\xfc\x6a\x78\x7a\xab\x78\x12\x0f\x78\xf0\x01\x0f\x7e\x83\x2e\x7b\x26\x51\x8c\x34\xe1\xfa\x56\xa8\x0d\x4e\x2f\x2f\xb3\x5b\x1a\x56\xab\xb6\xdf\xb4\x69\xb5\x9a\xe2\xd7\x37\xae\x36\x5b\xf3\x10\x0b\xe7\x9e\xa4\xee\x01\x92\x5f\x5f\xaf\x47\x20\x60\x1c\x5a\x7f\xcf\xb1\x36\xe2\x6d\xc6\x6e\x33\x5a\x51\x3a\x92\xf6\xca\xaf\x57\x32\xbc\x63\xe2\x3f\x0d\x6a\x80\xe3\xd3\x24\x49\xf8\x76\xcb\x87\xe2\x0f\x34\x1d\x4f\xf8\xf0\xb4\x74\x74\x6c\xb4\x92\x99\x40\x0e\x9a\x18\x02\x43\x02\xa9\xcc\x09\x1b\x2c\x3a\x42\xb7\xb3\xed\x54\xc0\xf7\xb5\x04\xfe\x05\xe9\x8e\x39\x7e\x13\x91\xb0\xe4\x82\x6e\x8d\x50\x3f\x61\x7e\x45\x8b\xdb\x86\x06\xfb\xd7\xe4\x03\xfd\xa2\xec\x9e\xbc\x61\x28\xcd\x21\x09\xa0\xb1\x6e\xe9\x47\xa5\x5e\x7a\xca\x27\xbc\x0a\x56\x5b\x3a\x9e\xe2\xd2\x21\x52\x6f\xb1\xc0\x48\xb7\xb9\x1e\xba\xf9\x4e\x53\x7a\xfe\x25\xa6\xf4\xda\xd1\xe1\xa0\xb7\x34\xdd\x6c\x10\x59\x76\xaa\xa9\x89\xf5\xfd\xa9\x69\xaf\x0a\xf2\xa1\x53\x45\x93\x90\xfd\x80\x14\xd0\x87\x64\xc6\xed\x98\x4f\xb5\x6b\xe2\xc8\x83\xf2\xdf\x75\x4f\xaf\x74\x40\x56\x94\x03\x52\x0a\x1c\x12\xc4\xfc\x90\xa8\xbd\x87\x86\x7a\xed\x18\x13\xf4\xa0\xe0\x87\xdd\x43\x02\x76\x8d\xb9\xd6\x3d\x3a\x54\xc7\x70\x2f\x5f\x1e\xd1\x38\xe0\xf2\x7f\x88\x17\xef\x81\x8e\x8d\x5f\xee\xcd\xd8\x74\xd3\xea\xec\xf3\xd3\xd9\x91\xa3\xbb\x71\xf8\x41\x66\x94\xdd\xad\x74\x0e\x30\x43\x38\x40\x5d\xda\x59\x0d\x72\x80\x10\xb7\xab\x90\xe3\x60\x4e\xed\x2e\xd8\xb3\x1a\x09\xd7\x9d\xb8\x69\x86\x65\x86\x18\x52\x98\xc2\x1c\x16\x30\x83\x0b\xb8\x82\x57\x70\x09\x37\x70\x0d\x3f\xc2\x6b\x78\x09\x2f\xe0\x39\xfc\x04\x9f\xc3\xcf\xf0\x1d\x7c\x0d\x9f\xc0\x0f\xf0\x3d\xfc\x19\x3e\x85\x6f\xe1\x1b\xf8\x0f\xf8\x0c\xbe\x82\x2f\xe1\x4f\xf0\x05\xfc\x15\xfe\x11\xfe\xf8\xa5\x44\x5f\x6b\x83\x27\xf2\x91\xfd\xa3\xa6\xa9\x6e\x10\x29\xd6\x8a\xe7\x98\x1c\x8d\xe1\x25\xe2\x81\xb8\x93\x96\x10\x28\x77\x76\x2c\xde\xe4\x83\xfa\x65\x9d\xfa\x7d\x2a\x9e\xf0\x83\xfa\x25\xdd\xfa\x55\x2f\xfe\x41\x3d\xe3\xce\x3d\x17\x1c\x1d\xd4\x33\xed\xd8\xb3\xa2\x27\x0e\xea\x3a\xed\xd4\xf5\x33\xb4\x38\xa8\xd7\xbc\x5b\xaf\x8c\x6e\x0e\xea\xb6\xe8\xd4\xed\x0b\x49\xaf\xfc\x78\x18\xb8\x65\x07\x74\x7d\x50\xc7\x8b\x8e\x1d\x93\xe5\x81\x33\x5e\x75\xeb\x58\xd1\x59\x07\xf5\x7c\xd5\xa9\xe7\x3f\x08\xb2\xec\xc0\x39\x2f\x3b\xf5\xfc\x47\x15\xec\xff\xa0\x9e\x37\x5d\x7b\x36\x31\xe4\x0f\xea\x7d\xdd\xa9\xf7\x97\xe4\xb0\x5b\xf2\xb1\x63\xaf\x9a\x9e\x3c\xa8\xef\xeb\x8e\x7d\x0b\xf2\xf3\xa0\x8e\x2f\x3b\x75\xfc\x9f\x14\x1f\x06\x73\x17\x9d\xba\xfd\x39\x3d\x14\xe2\xce\xbb\xf6\x7b\x50\xaf\x9f\x3a\xf5\x7a\x30\x10\x3f\xef\xd4\xed\x6b\xed\x2b\x7f\x50\xd7\x9f\xbb\x75\xad\xc9\xf2\x83\xba\x7e\xd7\xa9\xeb\x37\x78\x83\x9e\xc8\x96\x07\x75\xfe\xba\x73\xe7\x07\x75\xfb\xa4\x5b\xb7\xb7\xc1\x15\x1f\x3a\x75\xfd\x7f\x04\x47\x71\x50\xbf\xef\x3b\xf5\xfb\x56\x30\x20\x07\xf5\xfb\xb3\xd3\x6f\x3b\x29\xf9\x56\xf2\x2b\x07\x75\xfc\xb4\xdb\x84\x25\x7b\x73\xe0\xad\x7e\xdb\xb1\x6b\xc1\x0c\x1d\xd4\xf1\x9b\x8e\x1d\x4b\xde\xe9\xa0\x9e\xff\xd1\xa9\xe7\x77\x8a\xd5\x3a\xa8\xe7\x67\xdd\x7a\x16\x9c\xd9\x41\xfd\xbe\xea\xd6\x2f\x65\x87\x9e\xde\xcb\x4e\x1d\xbf\x4f\x0f\x7c\x99\x7e\xea\xd6\xad\x64\xfa\x6e\x81\x89\x5e\x1c\xd0\xfd\x41\x1d\xff\xda\xa9\xe3\x5f\xc8\xa1\x13\xfe\x63\xa7\x7e\xff\x4b\x71\xac\x07\xf5\xfc\xa3\xd3\x73\x17\x79\x6f\x23\x64\x45\x37\xb5\xdf\x2d\x44\xd7\x19\x47\x41\x4d\x54\x1f\x3d\x4e\x78\x29\x2b\xb4\x95\xcb\xe2\xcb\xd6\xf6\x3f\x24\xba\x42\x5b\xb9\xdc\xe6\x8e\x5b\xe1\x44\xfb\xb9\x73\xd7\xd8\x2f\x50\x01\x39\xbd\xca\x44\x52\x4a\xda\xcf\x7a\x44\x06\xcb\x37\x0a\x06\xa4\x52\xd4\x06\x92\x57\xd4\xc2\xb8\xc8\x4e\x4a\x00\x74\x6e\x26\xa7\xbd\xd1\x1c\xda\xcc\x51\x7d\xfa\x43\x32\x9e\xd2\x09\x29\xb2\xec\x80\x7d\xb4\x5a\x9d\x7b\x03\xa8\xe6\xd6\xb8\xa1\xb2\x64\x56\x1d\x39\x83\xed\x56\x26\x2f\x95\x0c\x38\xdc\x17\x61\xe7\x87\xd3\x29\x3b\x3e\x9d\xc8\xd4\x3f\xa7\x6e\xa4\x9d\xe3\xd3\x70\xac\x1d\x13\x27\x0b\x69\xdf\xee\xae\xdb\x63\x00\xe6\x2b\x6e\x8f\x73\x27\x6e\x19\x52\x6a\xfa\x9f\xef\x5e\xbf\x1a\xe5\x52\xb3\x8e\x57\xd7\x31\x02\x49\x92\xd4\xbe\x71\xa3\xef\xc2\xf9\x73\xb1\x42\x6d\x48\xe3\x7f\x93\xbe\x99\x07\xed\x96\x92\x61\x7f\x5d\x68\xd2\xce\x70\x7a\xe8\xba\x41\xa0\x34\x47\xb0\x0a\xff\x66\xe9\x61\xeb\x33\x61\xa8\x0e\xc4\x3a\x7a\x6e\xf7\x8f\x76\xda\xe2\x41\x0d\x06\x0d\x53\x85\x5b\x46\xc6\xba\x29\x03\xe1\x1f\x6b\x9b\x2a\x63\x4f\x81\xc1\x60\x57\x15\x69\x14\x26\x6d\x3b\x42\x27\x40\x16\x05\x63\x88\x2c\xae\x4f\x8e\x2f\x8a\xd5\x0a\xb1\xe3\x0d\xcd\xf0\xa2\xab\xcd\xf2\xa1\x7b\xd9\x53\xd8\xa8\x8e\xa3\xce\xd0\x28\x5d\x70\xfc\x11\xbd\x4f\xf3\x0f\x2f\x35\x0c\x99\xfd\x7a\x8c\x46\xeb\xf4\xf3\xd3\x6a\xaa\x67\xc6\xb0\x43\xc7\xbe\x5a\xfa\xad\xf2\x2b\xbc\xe2\xb1\x0a\xec\xc6\xc1\x05\x43\xe9\x87\x5e\xb8\x7f\x69\x56\xc7\x41\x59\xf6\x7c\xd3\x14\xf3\x52\xd6\xc6\x3d\x0e\x8f\xa7\x66\x79\xbc\x6b\x09\x25\x1a\x21\x22\xdb\x8a\xd2\xfc\x8d\xdc\xe2\xe4\x86\xa1\x7f\x16\x98\xa1\xfc\x17\x72\x41\x0b\xb2\x44\x4b\x67\x30\x41\xd3\xe4\x8b\x2b\x24\xb6\xd0\xb3\x5b\x93\xc1\x83\x05\xb9\x23\x98\xf6\x37\x88\xad\x28\x5b\xbf\xe3\x29\x2f\xf2\x50\x44\x50\xb1\x9e\x1f\xc6\xd3\x28\x2f\x16\x0b\x84\x96\xd1\x24\xd2\x13\x89\x4a\x41\x24\x2c\x19\xdd\xfc\x1f\xbb\x26\x3b\xb1\x85\x98\x7c\xf6\x16\xa5\x39\x25\x93\x08\xf3\xfe\x05\xca\x28\xb9\xcc\xfb\x9c\xf6\xd3\xfe\x77\xa2\xd5\x77\x7d\xd1\xa2\xcf\xaf\x52\xde\xff\x94\xe6\xfd\x34\x63\x28\x5d\x5e\xf7\x59\x41\x08\x26\x97\x51\xfb\xe4\x21\x1a\xe5\x1b\x41\xe3\x7b\x3b\x25\x6d\xec\x46\xee\xc0\x30\xb8\xdd\x70\x1c\xfe\xae\x77\xfa\x8b\xb6\x46\x2a\xa5\xe5\xbe\xa8\x79\xbc\x26\x97\x14\x93\xcb\x43\xb6\x86\xa1\x9c\xa7\x8c\x0b\xec\x54\xdf\xa1\xd1\x46\xcd\x28\x06\x68\xd9\x4f\x2f\x53\x4c\x5a\x36\xc9\x00\x77\x00\x9e\x20\x0b\x03\x7d\x8f\x4b\x60\xd6\x8f\x2f\x87\xfb\x4c\xce\x1c\xca\x60\x0c\x59\xa2\xbf\x9b\x3d\x3c\xe3\x8f\xcd\xdf\x67\x7c\x38\x04\x6c\xc6\xe7\x09\x9a\x71\xfb\xca\xb3\x32\x6c\x3f\xc6\x00\x80\xc6\x32\x35\x31\x36\x4a\xd2\x51\x6c\x9d\x7e\x96\xa8\xd2\x5e\x16\xff\x6a\x81\x5e\x57\xa0\xe0\x50\x19\x5d\xde\xfe\x94\x55\x77\xe7\x56\xab\x6a\x2f\xc2\x8f\x05\xff\x13\x42\x9b\x9f\x52\x8e\x72\xde\xf1\xbc\x3f\xd8\x06\xdf\xe8\x85\x38\x3e\x05\xe5\x1e\xc4\xaf\xc6\x90\x0f\xaa\x7e\x76\xcd\xc3\x1a\x7e\x7e\x9d\xa6\x3c\xcd\x3f\x1c\xdb\x47\x3f\x54\x45\x3e\xcd\xf7\x60\x25\x7a\x95\xe6\x57\x09\x1a\xb1\x74\x81\xc4\x55\xc9\xb2\x77\x88\xf3\x0c\x2d\xd5\x0f\xdf\x4a\x8e\xa1\x4b\x44\x94\xfd\xe4\xdb\x82\x70\xbc\x16\xe0\xc7\x3e\xc4\x54\x90\xb5\xb9\x36\x5b\x92\x09\xf5\xde\xa8\xf5\xc3\x28\xcd\xb2\x08\xa6\xa0\x7a\x18\xa8\x0b\x53\xcd\xfe\x3e\x31\xd7\xcf\x9f\xeb\x67\xed\x0c\xe4\x9f\x30\x5f\x5c\xc5\x2a\x11\x6d\xa2\xd3\x11\xdf\x2c\xd2\x1c\xf5\xc7\x93\x8a\x66\xbe\x60\xc5\x86\xc7\x91\x7e\xf0\x21\x02\x3d\x59\xe5\x74\x22\xfe\x89\x10\x59\x46\x55\xe5\x9c\xd3\x4d\x0c\xca\x12\x12\x28\x40\x04\x94\x6a\xc5\xb5\x2b\x3f\x4e\x92\xc4\x5e\x68\xf3\xa0\xf5\xcc\xb5\x27\xc9\xf8\x8c\x54\x97\x7c\x38\xd4\x3c\x54\x9a\xa0\x19\x91\xb1\xf3\x8e\xd2\xed\xf6\x28\x9d\xb1\xd1\x35\x46\xd9\x52\x00\x87\xb2\x44\x9d\xdb\x94\x0f\xe2\xc6\xab\x68\x7b\x47\xa7\xb0\x48\x50\x23\x4f\xa0\xb6\xf0\x34\xe4\x91\xc9\x91\x7e\xb3\x22\x13\x0a\x53\x76\x99\x4f\x66\x68\x5e\x82\xd1\xb9\x44\x99\x55\x4e\xc2\xd3\xa3\x24\x61\xa3\x73\x41\xe7\x65\x48\x74\x26\x6e\x37\x1a\x0c\xe2\x3c\x39\x1a\x03\xc8\xaa\x14\x83\xf9\x14\xc7\x05\x98\x14\x6d\x29\x0a\x91\x32\x99\x2f\x81\xb8\xe2\x0e\x8c\xb8\x67\x2e\xcf\x5a\x17\x88\x23\x87\x1a\xa8\xc2\x70\x21\x8a\x74\x2d\x09\x81\x7e\x4f\xe2\x53\x04\x03\x13\xd1\x00\xfe\x01\x5d\xe7\x82\xab\x5c\xd7\x80\xc5\x4c\x77\xc6\xe7\xd2\x02\xdc\x42\x5d\xea\x05\xf7\xb6\x9f\x73\xc3\xf7\xd6\x4d\xf3\xb0\xda\x75\x9a\x88\x3f\x61\xea\xe6\x8a\x5c\xa2\x15\x62\x31\xe8\xa1\x19\x9b\xc7\x18\xa8\xb0\xa5\xe9\x88\xa1\x9c\x66\x1f\x11\x14\x7f\xfd\x43\xe6\x0c\x75\xce\xd4\xa1\x65\xf3\xed\x56\xee\x3f\xa4\xc1\xcc\xf6\xe2\x78\x2a\x7b\x5f\xba\xaa\xb4\xed\x53\xf3\x9a\xc6\x60\x12\xf2\x97\x19\x9d\x9f\xa3\xc5\xb9\x46\xca\xe7\x83\x41\xed\x43\x0c\x04\x63\x5e\xc2\x2c\x49\x47\x1a\x3b\x8d\xb4\xaf\x42\x5c\x58\x40\xc8\xfc\x46\x49\x01\xb3\x7d\x58\x0f\x91\x45\xba\xc9\x8b\x2c\xe5\x68\x29\xf1\xd8\x81\xc8\xee\xbe\x78\x8c\xea\xbe\x18\xef\x85\xf3\x75\xfa\x01\xbd\xd4\x06\xe0\x93\x06\x7f\x21\xdf\x89\x4b\xc4\xe3\x48\x13\x18\x11\xa8\x22\xdf\x6a\x82\x40\x06\x99\x13\xf5\xc4\xb5\x03\x25\xd4\x35\x95\x14\x23\x24\x19\x73\x96\x1d\x78\x0b\xee\x96\xd7\x14\xfb\xaa\xa4\x7a\x4f\x95\x6f\x41\x52\x37\x49\xb1\x02\x1e\xe5\xb2\xcd\x6c\x42\x53\xdf\x10\x9b\x15\x64\x74\x81\xc9\x52\x45\x61\x71\x36\x0a\xaf\x62\xec\x73\x49\x1a\xfa\xf0\x8c\xcf\x2b\x62\xa8\xc9\xab\x55\xb4\x91\xb8\x4d\xe3\xb3\xf4\x31\x3a\x4b\x25\x45\x94\xba\xf2\x8f\x54\xa2\x4c\x32\x18\x10\xed\xa3\x73\xa3\x2e\x11\x33\xc9\x56\x15\xab\x51\x59\xdd\xe6\xd0\xd4\xb4\x06\xe3\x62\x2a\xfa\xb8\xf0\xbf\x8a\x7e\xa3\xc0\xd8\xea\x32\x20\xd8\xc5\x3d\x57\x68\xa3\x8f\xf7\x78\x4d\x97\x78\x85\x11\xcb\x8f\xd7\xf8\x33\x6e\x31\x21\x77\x1a\x1a\x52\x88\x85\x8b\x7d\x4e\xf4\xee\x69\x07\x33\xef\x9f\xcd\xb4\x35\xb9\x20\x23\xec\x48\x74\xf8\xce\x4c\xb0\x21\x69\xc4\x82\xa7\x3e\x17\x20\x2b\xcd\x0a\xde\xa4\xfc\xca\x42\xa7\x32\xa8\xae\x97\xda\xd8\xb0\xa3\x73\xbb\xee\xb2\x6e\x93\x64\x1f\x47\xb5\x76\x45\x7d\x4e\xd0\xe8\xdc\xfd\x0d\x7d\xa2\x59\x14\xfb\x5f\x4a\x50\xf6\x42\xcb\xbb\xf1\xba\x99\xb0\x00\x37\x0a\x6b\x5d\x4d\x4e\x4f\xc6\xd0\x5f\x89\xc4\x16\xf0\xfc\x2a\xcd\x7f\xc9\xd1\xd2\xf4\x3e\x39\x3a\x95\xdf\xde\x21\xfe\xa3\x3b\x88\xfe\xfc\x9c\x08\xda\x61\xf9\xfc\xa3\xb8\x28\xe2\xa3\xc3\x21\x85\x8c\x9e\x14\xae\x62\xad\x1c\x98\x78\xca\xd5\xe4\x77\xb5\x6e\xae\x0f\x94\x50\xd0\xf8\xbb\x1a\x05\x99\x61\x50\xc2\x8a\xc6\xdf\xd7\x3a\xc0\x41\x80\xb2\x7e\x6a\x01\xf2\x40\xa2\xe6\xfa\xc6\x8a\xc7\x56\x15\xf8\x1d\x24\x08\x62\x39\x28\x90\xc5\x25\x94\x66\xc7\xed\xdd\x7a\x67\xd8\x68\x8c\xc4\xc1\xa0\x65\xc8\x5e\xce\x4c\xca\x3b\x42\x33\xab\x12\x2e\xd1\x45\x71\xd9\xda\x4e\x96\xda\xca\x65\x8b\xbb\x82\x78\xfe\x9b\xb0\x23\x9a\xa1\xe0\x7e\xd4\x2e\x44\xc2\x21\x56\x0c\x54\x7d\x8f\x92\xe4\xf4\x64\x2c\x68\x92\x46\xc9\x29\x80\x0e\x25\x25\x9a\xdf\x94\x81\xb4\x3e\x61\x6c\x75\x9f\x42\xb1\xb1\x0d\x52\xa8\x3b\x30\xef\x7f\x96\xe6\x86\xcf\x45\x4b\x75\x09\xc5\xa7\x77\xe2\x1a\xb9\x1f\xde\x2a\x4e\xd3\xa9\x21\x78\xde\x3c\x5f\x15\x59\xf5\xed\xa9\xa2\xaa\x51\xf5\x45\xfa\x75\xb9\xfd\x3c\x95\x57\xcf\xfd\xf2\x92\x2c\xbc\x66\x9a\x7c\x78\x4a\x0b\xc2\x27\x63\x28\xa5\x57\x7f\x4c\xc9\x32\x43\x2f\x8a\x6c\x85\x33\x3d\x9e\xf3\x5d\x29\xcf\xd5\x67\x4c\xb0\x77\x93\x14\xc0\xe4\xc5\x06\x31\x97\x5e\xb1\xcf\x2b\xd0\xa4\x4b\x53\x1c\x92\xcc\xe6\xaa\x2c\xc0\xff\x26\xb3\x79\x09\x15\x16\x79\x92\x65\x01\x01\xcb\x6c\xde\x93\x6d\x43\xbc\x37\x6a\x1d\x12\x8e\x5b\x8b\x0c\xcd\xc0\xf5\x84\x77\x74\x1c\xe6\xe3\xdb\x8a\x9c\x8e\x05\xbb\x50\xc2\x40\xcf\x93\xa6\x19\x6f\x45\x25\xd0\x84\x9d\xd1\xc7\x6c\x48\xce\x86\x43\x6a\x38\x3d\x3e\xa3\xf3\x5e\x2a\xd8\x18\x0d\x49\xdb\x6d\x2a\x69\xb1\xd1\x12\x2d\x18\x12\x5b\x6f\x81\x37\x22\xc5\x5a\xa1\xc6\x08\xc0\xd4\x10\xf4\x08\x40\x3c\x18\x60\xe3\x9e\x2c\xda\x82\x92\xeb\x75\xc7\x52\xa7\x16\x96\x7a\xd4\x3d\x6b\x3d\x08\x17\xec\xaf\xda\x0a\x4c\x1a\xf3\x70\x21\x2f\x32\xc4\x63\xa8\xa2\x3b\xe1\xd6\x7d\x95\x13\x37\xa3\x9d\xaf\xb2\x22\xbf\x92\x8d\xf2\x18\x94\xd0\xfd\xed\x82\x6b\x45\x2d\x0a\xe8\x4b\xc6\x67\xfc\xf1\x1e\x88\x38\x1b\x0e\x39\x40\x5a\xdc\xdc\x52\x55\x50\x7f\x72\x03\x7b\xad\xc0\x1e\xd6\xec\xcd\xe6\x90\x25\x63\x48\x2c\xb7\x7f\xc6\x1e\x8b\x73\x66\x86\x2c\x11\x0c\x5f\xef\xe8\xd4\x6a\x06\x94\xd3\x64\x84\xf3\x17\x98\xe0\xfc\x4a\xec\xd0\x60\xa0\xe4\x87\x31\xb6\xe4\x28\x2f\x5b\xa7\xaa\xf7\xcb\x45\xc4\x23\x73\xcc\xea\x6d\xe9\x55\x19\x3c\xd4\x8d\x57\x89\x78\xf6\xee\x92\x65\x5f\x5b\x77\x09\xcf\x7b\xd4\x03\xd9\x58\x63\x0f\xf1\xdb\xad\x1a\x53\x00\x59\x42\x25\xb9\x27\x03\xf1\x6b\xf0\x64\xc6\xf9\xcd\x87\x3e\xdd\x9f\x13\x85\xc2\x2f\x7f\x6b\xa4\x78\xac\x5a\x9c\x62\x08\xf6\x5c\xda\xb3\xe1\x30\xf5\xce\x3e\x50\x75\x96\x9a\xb3\x17\x67\xdb\x4c\x08\x5b\x3d\x46\xd1\x3e\xe4\x23\xe0\xb6\xb1\x17\x01\xe4\xa7\x88\x96\x44\xdd\x1f\xe9\x54\xbd\xf3\x06\xb1\x96\x2b\x66\xb6\x45\x3e\xc1\x5a\x8c\x33\x3a\xa7\xe4\x85\xe0\xd0\xf1\xaf\xc8\x0b\x7d\xd9\x32\x88\xed\x43\x4b\xeb\x50\x43\xf4\xd3\x73\x76\x44\x1d\x87\x79\xc5\x24\xae\x10\xa0\x4d\xa6\x8d\x3a\xd5\xeb\x27\x6a\x4d\xe2\x47\xe1\x6a\xfa\xf9\x93\x75\xbe\x17\x55\x3c\x00\xd1\xc3\xe9\x17\x51\x0e\xd7\x28\xad\x5e\x47\x19\xbc\x03\x56\xcc\x28\x25\x32\x1e\x3a\xf7\x70\x0b\x90\x7c\x95\x47\x10\x81\x1b\x3e\x1c\x3a\x97\xa6\xfd\x3a\x53\x75\x9d\xe9\xe8\x3c\x47\x88\xbc\x24\x4b\xf4\xf9\x31\x1f\x0c\x62\xf7\x83\xa4\x8a\xa8\x60\xe0\x7c\x32\xc7\xb5\x06\xa8\xf6\x5d\x42\x81\x3d\x6b\x39\xb0\x14\x26\x48\xaa\x32\x02\x67\xe4\x0c\x54\x2b\x26\xd0\x3d\x31\xf1\x20\xd5\xcb\x34\xc8\x88\x7b\x44\x12\xe2\x75\x55\xee\xf6\xc3\xad\x4b\x5a\x54\xab\x3d\xac\xa4\x12\x2f\xb7\x8b\x6b\x72\x2e\x9d\x93\x15\x57\x7a\x10\x0f\xdb\x74\x8c\x69\x73\xc0\xc5\x4e\x90\x11\x5f\x06\x06\x40\xd0\x85\xfe\x69\x4a\x08\xe5\xfd\x45\x9a\x65\xfd\xb4\xbf\xc8\xd2\x3c\xef\xa7\x79\x3f\xb5\x72\xbc\xe8\x56\xde\xb0\xef\x2d\xa1\xaf\xab\x27\xce\x37\x23\x11\x77\x3f\x85\xa8\x4d\xeb\xcd\x02\x6f\x70\x6e\xab\x4e\x04\x21\xaf\x63\x08\x34\x49\xfe\xe8\x71\x55\x31\x1a\x2a\x84\x6c\xf6\xf5\x55\xba\x46\xc3\xe8\x87\xa8\x84\xe7\x15\xe4\xbc\x66\xaf\x0c\xa4\xd4\xb2\x92\x8e\xc4\xfe\xb8\x20\xe6\xa1\x21\x9c\x1b\x1a\xb7\xd6\xea\x82\xd2\x2c\x8e\xc2\x23\xc8\x76\x7a\xb0\xa3\xd3\xd2\x18\xf9\x84\xf6\xab\xb9\x47\xb6\x88\xda\xe7\xb7\x8f\x62\x70\xa3\x98\x28\x88\x40\x09\xa5\x5e\x4b\xa7\x05\xcb\x73\x7c\x49\x40\x4c\xab\xd0\x0b\x90\x34\xf9\xf1\x3d\x02\xb7\x9a\x52\xa5\xcb\x05\xb8\x6b\x61\xe4\x9b\xe7\x6f\x5f\xbc\x7e\xfb\xf3\xf9\xfb\xbf\xbc\x79\x7e\xfe\xd3\xcb\x57\x7f\x7a\xfe\x2c\xa9\x7d\xfd\xe5\x55\xf8\xfb\xb3\xe7\x2f\x9e\xfc\xf2\xd3\xfb\x4a\xa4\x72\x89\xcc\xeb\x69\xde\xa3\x24\xe0\xdd\x33\x4b\xad\xc2\x6a\x2e\x15\x72\x78\xa9\xb0\x6e\x92\x8b\x3e\x68\xb2\x82\x4a\xcb\x92\x34\x1f\xb3\x86\x85\xc5\x69\xd0\xc2\xe2\xd4\xb5\xb0\x38\x75\x2c\x2c\x3a\xe7\x1e\x3b\x2c\xef\xd8\x4a\x45\xdb\x90\x80\x42\xa0\xcc\x16\x58\xea\xa8\x05\x91\x00\x30\xb5\xbe\x54\x5e\x78\x89\x77\x83\xfb\x18\x85\xbe\x46\x10\xb7\x9e\x47\x14\xfc\x1c\x41\x5a\x6f\x11\xac\x6f\x6a\xa7\x82\x3f\x72\x15\x0e\x15\xcb\x3e\x18\xa0\x11\x49\xd7\x28\x49\x12\x56\x3d\x31\x45\x28\xe2\x89\x3e\xa1\x5e\x5d\xa4\xf0\xae\xb8\xc8\x17\x0c\x5f\xa0\xa5\xe0\xea\x63\xee\x08\xb1\xcf\x8d\xe9\x0f\x00\x33\x34\xb7\x1a\xed\x8a\x1b\x2c\xa5\xd6\x29\x4b\x6e\x4c\x4c\x14\x2d\x97\x5a\xe2\x7c\x43\x73\x64\x7e\xd6\x68\x88\xc9\x18\x8a\x7b\xa5\x0a\x95\xf2\x69\x0e\xfd\xa9\x48\x91\x15\x2b\xc8\x4f\x94\x4a\x84\xa7\x64\x18\xad\x82\x2c\x4f\x33\xac\xc6\xd4\xdc\x89\x40\xf5\x13\x02\xcf\xd1\xe7\x0d\x5a\xf0\xfc\x27\x4c\x3e\xa0\xe5\x5f\x30\xca\xe4\x10\xea\xa2\xc9\x06\x48\xbc\x07\x9a\x29\xce\x1d\x6e\xfd\xe8\x14\xe2\x5c\x3e\x16\xea\x4f\xcb\x91\xd7\xd0\x5e\x4a\x96\x71\x64\x8a\x15\xba\x74\xc9\x7a\xe8\x14\x89\x8e\x2a\xba\x59\x75\x6b\x6a\xaa\x5f\x2d\xa8\x95\x50\x1e\xfb\xbd\xca\x37\xb5\x99\x4d\x3a\x7f\xc6\xe8\x66\x23\xde\xfe\xda\x94\xaa\x61\xfd\xf9\xed\xcc\x2b\xa3\x33\xdd\xd8\x4e\xc1\x54\x9a\x67\x88\x3f\x27\xcd\x5a\xd5\x70\x60\xaa\x15\xfc\xe1\x8a\xd5\x32\xa6\xd1\xca\xfc\xdd\xa8\xe7\xcc\x18\x4c\x23\xa3\xc1\x9f\x44\x9f\x52\xcc\xc5\x5f\xa5\xd8\x5a\x3d\xb3\xc0\x46\xb4\x2d\xbe\xcb\x7a\x9d\x95\x0c\x06\x47\xbb\x26\x56\x02\x78\x2e\xcd\x53\x27\xa7\x9a\xe6\x6f\x13\xc6\xb9\xfc\x92\x62\xac\xab\x61\xa6\xe2\xc3\xa4\x11\xcc\xd6\x9d\xf6\xd1\xd8\x70\xc8\x86\xcb\x7b\xc3\xe8\x02\xa1\x65\xcc\x47\x7f\x79\xf9\xfc\xa7\x67\x4f\x7e\xfc\xe9\xf9\xf9\xd3\xd7\xaf\xde\xbf\x7c\xf5\xcb\x73\x93\xcb\x50\x37\xe1\x0c\x5f\x5e\x22\x26\xaf\x4d\x1c\xe5\xa6\xcf\x4a\x04\x09\xca\x20\x65\x21\x39\x6c\x23\xc9\x48\x22\x4d\x56\x28\x6e\x45\x2b\x31\x24\x99\x1c\x55\x66\x35\x11\x8c\x51\x82\x6d\x50\x6f\xc8\x93\xe3\x53\x30\x8c\xc9\x76\x1b\x45\x60\x68\x22\x1e\xf2\x21\x03\x46\x30\xd4\x54\xa6\xdd\xd2\x58\x2f\xb2\x3a\x4e\x69\xfb\x81\x3e\x6f\x32\xbc\xc0\x3c\xbb\x96\x44\x1e\x5a\x46\xca\x1a\xad\xb6\xf7\x81\x03\x76\x21\xb4\x29\x27\xf1\x40\xcb\x04\xbc\x6a\xa6\x36\x91\x32\x11\x8f\x02\x8b\xc0\x76\x1b\x3d\x2e\xc8\x07\x42\x3f\x91\x1f\xa2\x5e\x33\x69\x56\x85\xcb\x22\x18\xb9\xcc\x63\xff\xbb\x68\xc8\x86\xd1\x77\x72\x61\xe6\x6a\xf5\x2f\xd0\x22\x15\x34\x46\x34\x44\xc3\x68\xd4\x7f\x41\x59\x7f\x4d\x99\xa0\x7e\xc5\x59\xc8\x37\x0d\xf6\x73\x84\x26\xfd\x2b\xce\x37\x93\x93\x93\x06\xe5\x22\x6e\xcc\xc9\x92\x2e\xf2\x13\x49\xef\x2c\xaa\xc7\x50\x6a\x1c\x8d\xd8\xa6\x02\xc4\xa9\x25\x2c\x05\xec\xbd\xa3\x94\xf8\xf0\xf7\xe4\xd5\xd3\xe7\x3f\x41\x81\x4c\xc1\x44\x0b\x74\x0c\x17\x2a\x31\xec\xf7\xa0\x2c\x05\x4e\x5f\xd9\x27\x42\xbf\x34\xf5\x1b\xdc\x2e\xd2\x5e\x21\x16\x50\xa9\x5b\x29\xfd\xf5\x05\x7a\xab\xf4\x47\xcf\xbc\x12\x59\xcf\x68\xaf\xc5\xb5\x6d\x54\x6d\x8a\x43\x65\x9b\xc1\x40\xfd\x68\x9a\x42\xc8\x78\x55\xa1\xb2\xa9\x3b\xa4\xd6\x66\x29\xc1\x83\xd2\x37\x4e\xfc\x72\x19\x49\x4c\x7e\x92\x6f\x11\x10\xb7\xf1\x0a\x91\x49\x11\x47\xe2\xdf\x08\x40\x69\x3f\x2a\x7e\xcb\x3f\x22\x00\xb5\xf6\x5d\x7c\xd2\x7f\x46\x00\xda\xbd\x9e\xf8\x84\xa8\x8e\xde\x26\xc8\x15\x25\xd8\x52\x28\x6b\x38\x84\xcd\xcb\x10\x93\xe4\x7b\x88\xa5\xf9\xb9\x62\x94\x1a\x16\x50\x00\xc6\x8e\x76\xc1\x58\x51\x3f\x7f\xf5\xe7\xd1\xb3\xe7\x3f\xfe\xf2\x87\xf3\xf7\x4f\xde\xfd\xe9\x1d\x18\x0c\x16\x94\xe4\x34\x43\xa3\x8c\x5e\x86\x3a\xc1\x8a\x7c\x61\x10\x4b\x84\x62\xc9\x52\x85\x94\xea\x77\xa3\xbe\xc3\xc1\x38\xa6\xe7\x0c\xe5\x45\x26\x93\xe0\x68\x79\x44\x03\xa5\xba\x2f\xbc\x42\xaa\xad\x39\x92\xc0\xe4\x51\x5b\x1f\x72\x67\xc2\xcd\x91\x2a\x12\xcd\x9b\x82\x0c\xbf\x46\x33\xfd\x9d\xf3\x2c\x57\xf8\x5e\x93\x54\x16\x90\x59\x61\x25\x3b\x4f\x75\x82\xba\x3c\x76\x2b\x0b\x10\x31\x35\x14\xa5\xa4\x24\xa9\xf5\x46\xfa\x02\x56\x82\x22\xdf\x28\xce\xbb\xbd\xb6\x91\x15\xf6\x35\x4a\x92\xd9\xdc\x0a\x71\xeb\x65\x35\x21\x6f\xe3\x2a\xed\x5a\x59\x09\x83\x05\x13\xdf\xb4\x60\xdf\xf5\x6f\x4c\xc9\x95\x21\x8b\x67\xaa\x6d\xe6\x5a\x00\x84\x1e\xf3\xb3\xe1\x10\x81\x96\x6a\x33\x34\x8f\xb5\xd4\x38\xb0\x33\xd2\xc2\xc3\x99\xe1\xfb\x2b\x46\x3f\xfd\x42\xae\xa4\x56\x46\x8a\x21\x25\x44\xfd\x94\x72\x31\xe3\x12\xee\xaf\x15\xb6\x40\xe9\x05\x68\xfb\xed\xf6\xd1\x51\x0b\x9a\x32\x77\x97\x15\xa4\x92\x1d\x3b\x56\x1c\xe9\xe2\xc3\x45\xc1\x08\x62\x4a\x5e\x2a\xde\xb0\x7c\xb6\xa7\xbc\x62\x20\x5d\x4a\x0b\x35\x26\x95\xc7\x48\x63\x3b\x33\x0b\x89\xcd\x35\x32\x34\x65\xa5\xd8\x8c\x30\x4c\xbb\x3b\x60\x0c\xfc\x42\x8b\xd4\x86\x7e\xa7\x93\x20\x29\xa4\x0c\x52\x2d\x31\xd4\x53\x96\xea\xb2\xc5\xa3\x60\x0b\x64\x24\x95\xf2\xca\xd6\x1f\x7d\x75\xb7\x81\xd7\xcf\xf7\xc1\x7e\x2c\x7d\x1c\xee\xc8\xa3\x05\x80\x7a\x34\x15\x1e\x08\xc2\xbd\x61\xbb\x3c\x73\x24\xfb\xb5\xe7\xff\x54\xea\x00\x24\xcd\x17\xcf\x71\xfe\x07\x63\x46\xf9\x8c\x12\xd4\x62\xd9\x74\x6e\x6d\x2d\x95\x2c\x58\x8b\x9c\x9e\xbd\x7e\xf5\x3c\x4a\x92\x04\x6d\xb7\xd1\xf3\xb7\x6f\x5f\xbf\x7d\xfe\x4c\xfe\x14\x57\x16\xe5\xc5\x1a\xd9\xbe\x6b\x2f\x12\x67\xd7\x37\x69\x25\x8f\x37\x34\x94\x19\x8b\x1b\x43\xab\x18\xcc\xf8\x3c\x46\xe6\x66\xd9\x59\xc8\xac\x9b\x09\x53\xcf\x29\x64\x32\x4a\xef\x34\x34\xd3\x44\xcd\x71\x12\x2e\xfb\xe3\x93\x77\xe7\x3f\xbf\x7e\xfb\xfc\xfc\xcf\x4f\x7e\xfa\xe5\xf9\xbb\x48\x07\xef\x25\x06\xfb\xd5\xc6\x23\x30\xdc\x8d\x59\x7a\x15\xe9\x57\x56\x6b\x72\x9e\x83\x41\x1c\xea\xd8\xe0\x3f\xff\xeb\xc8\xe5\x64\x93\x24\xa1\xdb\xad\x79\x52\x3f\xa5\x8c\xc4\xd1\x5f\x68\xd1\xdf\x18\x85\x5d\x3f\xed\x8f\x32\x39\x52\x0c\xfa\xe2\x41\xed\xeb\xe0\x42\x7d\xbc\x5e\xa3\x25\x4e\x39\xca\xae\xfb\xd2\x8e\x14\x93\xcb\x13\x75\x80\x98\x5c\xf6\x31\x1f\xf5\xdf\x5f\xe1\xbc\x8f\xf3\xbe\x22\x0b\x05\xc5\x5c\x90\xbc\xd8\x6c\xa8\x20\xf9\xfa\xf1\x45\xc1\xfb\x6b\x7c\x79\xc5\xfb\x17\xa8\x5f\x7d\xc7\xa4\xbf\x2a\x64\xbc\xd1\x8f\x88\xe5\xd2\x3e\x77\xd5\x6f\x90\x98\x60\x64\xa8\xc8\xc0\x86\x24\x47\xa7\x00\xa6\xca\x40\x4b\x40\xa3\x73\xf4\x6d\x7c\x94\x11\x38\x98\x87\xc8\xfc\x4e\x0c\x7e\xad\xcc\xf4\x62\x60\x74\x98\xfa\x83\xc4\xac\x61\x33\x3e\x77\x88\x15\x71\x54\xe0\xd2\x4f\x0f\x7d\xe6\x9e\xe9\xde\x79\xba\xfc\x28\x6e\xa8\x14\xf5\x4f\x6a\x86\x62\x0e\x89\x25\x2e\x83\xb6\xd5\x1d\x0e\x9d\xef\x25\x74\x49\xe8\x00\xb9\xc6\x5c\x7c\xee\x0e\xe6\xf6\xee\x50\x04\x3f\x51\xba\x99\x56\xa8\xf9\x1f\x14\x7b\xe9\xf0\x03\x78\x3e\x52\x91\xaf\xf2\x08\x32\xc8\x2c\x45\xaf\x24\x64\x60\x92\x23\xfe\x1e\xaf\x11\x2d\x78\x30\xab\xbe\xa9\x2e\x27\x5c\xc2\x53\x50\x42\xfd\x65\x52\xb7\x13\x6b\x79\x79\x02\x2b\x43\xc0\x5c\x04\x8f\xbd\x90\xb9\xf9\xeb\x5c\xef\xbe\x2d\x6b\x8c\xa7\x19\x3f\xb3\x57\xee\xd3\xa7\xa1\xfe\xad\xde\xc5\x5a\xbd\xa3\x3d\x15\xdd\x9d\x38\x78\xdb\x26\xb6\x73\xc7\x3c\xd4\x3b\x0b\x50\x81\x4a\x1d\x87\xb6\x2c\xd4\x62\xe5\x10\xb2\x9a\x1a\x0a\x41\xd9\x83\x48\x42\x69\xf9\x56\xce\x0f\x2d\x25\xda\x51\x0b\x09\x55\x7b\x4a\x09\xc7\xa4\x40\x55\x35\x31\xb9\x1d\x5d\xb9\x13\x66\xf6\x95\x36\x2f\x72\x48\x6e\x31\x69\x94\xbc\x7d\xfe\xfe\x97\xb7\xaf\xea\xbc\x24\x83\xa7\xde\x1b\xeb\xb6\x78\xff\xc7\xb7\xaf\xff\xab\xd9\xe0\x51\x6b\x03\xc5\xb4\x4e\xf6\xf1\xf9\xb0\x9d\x9f\xf5\xf7\x78\x12\xfd\xf8\xfc\x85\x78\x55\x9e\xbe\x7d\xfe\xe4\xfd\xf3\x08\xd6\x10\xbb\x35\xe1\x6b\xdd\xdc\xda\xc6\x69\x95\x6c\x8f\x88\x43\x6d\x4c\xdc\xc6\x96\xdd\x31\x75\x92\x34\xf7\xb4\xc1\x5f\xe8\x70\xad\x0e\x82\xd1\x97\xa9\xf6\x96\x4b\xa3\x12\x18\xb8\xc0\x32\x6d\xad\x7d\x0d\x8f\x3a\x40\xa0\x7c\x04\x0c\xe0\x35\x24\x06\xa1\x57\x11\x3e\x72\xa0\xce\x6d\xde\x94\x5b\x29\xa9\x55\xa8\x93\x1e\x9e\x62\xdf\x4e\xfe\x6d\xfa\x49\x96\xf8\x97\xfa\xbf\x30\xbf\x7a\x87\xc5\x05\x53\x33\xc4\x86\x7f\x8f\xcd\xea\x97\xcf\x34\x51\x15\x63\xdf\xfa\x1d\x40\x3c\xe3\x0d\xbf\x8d\xa9\xd9\xdc\x8f\xf4\x83\x9a\xbd\x28\x8c\x71\xd0\x2a\x1f\x4b\xf7\x80\x69\x8c\x12\x0c\x15\x72\x13\xe7\x58\x9d\x0e\x54\xae\xa7\xbe\xcf\xc5\xc8\xa0\x18\x02\x83\x82\x41\x04\x4a\xd8\xa5\x81\xbc\x45\xa2\x36\x30\xc7\xd2\xb6\x27\xfb\x2b\x54\x28\xac\x56\xd6\x64\x38\xcd\x64\xdc\x65\xb6\xae\xc3\xdd\xff\xfa\x23\x1c\xf2\x72\x70\xed\x2e\xda\xa9\x63\x3e\x75\xe5\x40\x31\x90\x94\xf2\x04\x49\x62\xd9\x3f\x37\x7f\xfa\xec\xda\xa4\x75\x09\x1c\xbc\x8b\xde\xd5\xdb\xdd\x6b\x82\x10\x03\x15\x01\x2a\x86\x73\x39\x86\x30\x91\x51\x57\x89\x98\x15\x06\x85\x91\x9a\x90\x09\x26\x62\x0e\x49\x2b\x7b\x62\x98\xc1\x80\x8f\xf4\x3c\x06\x03\x56\x31\xcd\xa4\xa9\x9a\xc3\x5a\x35\x47\x7e\x38\x9d\x12\x15\xb0\x80\x26\xa7\x67\xf4\x31\x39\xa3\xc3\x21\xc0\x33\xea\x07\x2c\xa0\xf3\x9e\xed\xdb\xaa\x98\x66\x6c\x18\x4d\xa2\x21\x9a\x1b\x23\xf8\x7f\x91\x15\x3e\x06\x82\xeb\x2a\xcb\x5e\x16\x38\xcd\xa4\x89\x9f\x95\xb9\x94\x8d\x4f\x11\x50\xb0\xd1\x36\x9b\x1c\xb5\x9d\xb4\x69\x71\xa3\x64\x58\xc8\x5e\x0a\x16\xbe\x0a\xd4\x60\xa5\x47\x3b\xeb\xab\x1b\x4d\x35\x67\x6d\xa4\x53\xad\xbd\x3b\x92\xdc\x12\xd4\xfc\x38\xa8\xc7\x9b\x1c\x25\x09\x0e\x7c\x16\xfd\x37\xe1\x11\xed\x04\x46\x5a\x2f\xd5\x30\xc8\x06\x03\x7e\x94\x24\xe2\x9f\x11\xce\x9f\xa1\x9c\x33\x7a\x2d\xe5\x95\x5e\x5b\xab\x3f\x8b\x80\x31\xb0\x8c\xfe\x1e\x0d\xb5\x81\x62\xcd\x1c\xe2\xef\x11\xcc\x65\x31\x6d\x29\xee\x79\xec\xd6\x77\x0d\xce\xa6\xbf\x44\x1c\x2d\xb8\xe4\xbd\x36\x94\x23\xc2\xb1\xe0\xfe\xfa\x57\xe9\xaf\x29\x5b\xd2\x22\xef\x47\x39\xca\x56\x5a\xaa\xde\xcf\x28\xdd\x44\xfd\x0b\xc4\x3f\x21\x44\xfa\x9b\x54\x90\x92\x8a\x53\xfb\x6e\x98\x0e\xa3\x7e\x4a\x96\xfd\xc5\x15\xce\x96\xea\x63\x34\xcc\x87\xd1\xa8\xff\x72\xd5\xbf\xa6\x45\xff\x53\x4a\x78\xa3\xb4\xcf\xa9\xe0\xc8\xac\x3e\xe0\xd3\x55\xad\xe3\x48\x76\x8c\x2b\x95\x01\xec\x6f\x32\x24\xe8\x9f\x85\xcc\x8f\xd2\xff\x7b\xa5\xb8\xf9\xbb\xe8\xed\xef\x96\x87\x74\x0a\xf6\x4f\xe2\x03\x42\x1b\xe3\x63\xdb\x4f\x57\x1c\xb1\x7d\xd3\xd0\xe3\x63\xae\x46\x2d\x48\x60\xdc\x08\x94\x25\xb5\x3a\x9d\x52\xeb\xed\x17\x41\x8b\x99\xcc\xb1\xe5\x5a\xb9\x3c\x41\xe7\xa8\x22\x53\xf7\x87\x63\x96\xb0\x30\x5e\x21\x7a\xc0\x54\x9a\x97\xc4\x37\x52\x7d\x8d\xe0\x8a\x4c\x38\xd4\xe0\x2a\xdf\xc1\x12\x32\x50\xb9\x53\x3a\xe6\x56\x8b\x0e\x06\x27\x06\x04\xef\xc0\xe7\xf7\x4b\x4d\xaf\x0e\x34\xf4\x6a\x7a\xf2\x85\x83\x1a\x7f\xb9\x59\xcc\xfb\x34\xff\x50\x33\xae\xd2\x76\x2e\x67\x2e\x56\x75\x2c\x85\x24\x38\x38\x86\x7d\x67\xec\x31\xb7\x86\x7d\xc3\xa1\x55\x90\xcc\xd8\xbc\x47\x46\x55\x48\xab\xc4\xfd\xb1\xdd\x1e\x9d\x42\x22\x30\xd3\x0a\x5f\x16\xaa\xfc\x68\x6c\xf4\x05\x98\xf4\xc9\x60\x10\x93\xd1\x27\x86\xb9\x2e\x6b\x0f\xa3\x45\x46\x1f\xd0\xb5\x0c\xce\x53\x82\xd8\xf7\x34\xbd\x7b\x23\x36\xdf\x7e\xe4\xeb\x3d\xa1\xa2\x43\x1d\xbd\x3a\x09\x50\x63\xea\x29\x1d\x0c\xa2\x5c\xfe\x51\x2f\xb0\x32\x9b\x69\xc8\xa7\x46\x13\x74\x65\xc8\xe1\x06\x05\x9d\x0c\xcd\x70\x32\xee\x92\xca\x94\x43\x59\x92\x24\xf6\xfb\x91\xf9\xbb\x32\x1b\x9b\x9a\xb9\x4d\xec\x80\xf0\x2a\xec\x1e\x72\x5e\xd9\xb5\xf8\x06\x28\xf2\x8b\x42\x6e\xaa\x89\xe7\xbc\x11\x36\x69\x6f\x50\x56\xbc\x72\x80\x54\xe0\x8b\x24\xdc\x0a\x80\x75\x70\x18\x9b\xf7\x1a\x3e\x47\xf6\x45\x7e\x77\x95\x32\x41\x57\x1b\x11\x43\x35\x47\xfd\xc5\x9d\xa3\xf2\x39\x34\x97\x6b\xb7\x85\x62\x5c\x24\x37\x2b\x6d\x7b\x63\xf0\xa0\x56\x2c\xa9\xb4\x5b\x46\xcf\x24\x70\xc5\xf5\x13\x81\x35\x9b\x9b\x92\x87\x9d\x52\x2c\x9d\xbb\xcb\x2f\xc5\x89\x85\xa4\xab\xaf\x08\x68\xa4\x28\x7a\xfd\x89\x20\xe6\x09\xf4\x00\xe4\x09\x9a\xa2\x11\x15\x25\x2f\x89\xe8\x43\x8e\x2a\x70\x7f\xb5\x81\x46\x2f\xf9\x22\x15\x00\x73\x9d\xd0\xba\x67\xb0\xde\xd1\x15\x01\x65\x3c\x86\x78\x74\xbe\xc8\x50\x4a\x8a\xcd\x6b\xa2\xc9\x14\xd0\x14\x23\x1a\xf9\xfe\x93\x2c\x8b\xe0\x0d\xd3\x71\x2d\xf8\x15\xea\xeb\x4c\x52\x98\xf7\x33\xfc\x11\xe5\x7d\x4a\xa4\xca\x7f\xa9\xba\x42\xcb\x3e\x65\xfd\x82\x30\x44\x96\x88\xa1\x65\x24\xf5\x23\x72\x63\xc3\x90\xa4\x65\x44\x19\x25\x52\x7f\xd8\xee\x5a\xcb\x01\x54\xe1\x08\xf8\x19\x91\x77\x9c\xb8\x90\x45\xe6\x95\x33\x73\x75\x8e\xc9\xcc\x12\xe9\xb9\xd1\xbd\x98\xb2\xed\x76\x36\x07\x30\x97\xc1\x48\x50\x09\xd5\x59\x37\x95\x0b\xd2\x6c\xb3\x69\x9b\x08\x74\xe4\x20\xe4\x60\x3d\x8d\xf1\xfe\x42\x0b\x41\x46\xf4\x29\xd1\x76\x1d\x8e\xd8\x5b\x60\x1e\x29\xf6\xc6\xa4\x9f\x4a\xd2\x63\x54\xb9\x61\x5f\x59\xef\x4e\x75\x57\xe5\x39\x78\x77\x95\x87\x2c\xf3\x6a\x97\x57\x86\x31\x30\xd4\x4a\x30\x18\xf6\x81\xa3\x18\xd3\x40\x75\x92\x59\x4d\x05\x63\x03\x61\x3b\x61\x1b\x34\xb8\x79\x44\x87\x85\xae\x73\xca\xf0\x25\xd6\x95\xf4\x8f\xba\x07\x69\x05\xdc\xf6\x5b\x25\x5f\x65\xba\xd8\xfe\x86\x1e\x5d\x5c\xb1\xfa\xf6\x53\xd9\x62\x3c\xe4\x9a\x25\xef\xb2\x48\x0e\xdc\xb2\x89\x75\xc9\x3d\x10\x51\x3a\x9e\xe2\x3a\xba\xc6\x6e\x70\xf6\x90\xa1\x46\x91\x82\x0f\x0a\x99\x7b\x6a\x5e\x08\xfa\xd5\x27\x75\xdf\x64\x57\x88\x66\xaf\xc3\x74\xc7\x55\x11\xd7\x04\x01\x30\x41\x50\xbb\xdc\x84\x76\x24\x04\x00\x92\x02\xc5\x61\x38\x90\x48\xcd\xff\xe4\xc0\xa3\xb2\xa9\xe4\x95\x15\x47\xc0\xb8\x32\x2c\x60\xf0\x00\xcc\x07\x6c\x27\x24\x08\x93\x82\xca\xc0\x6d\x92\x24\x52\x50\x0f\x64\xe4\xab\x7a\xb6\x35\x2e\xaf\x62\x03\x6a\x46\x70\xac\x52\x68\x50\x00\x69\x59\xc2\x2c\xc1\xa3\x97\xaf\xfe\xfc\xfa\x4f\xcf\xe1\x22\x60\xe3\xac\xa4\x4c\x6a\xda\xe1\x07\xa5\x84\x59\x1f\x93\x7e\x31\x0d\x53\x6f\x82\xa4\xd1\x04\xe9\x02\xfa\xe1\x4f\x5d\xda\x50\xfc\x36\xb4\xa0\xa4\x5c\x27\xc5\x2c\x9b\x27\x0b\x58\x00\x00\x37\x49\x8d\x8c\xd5\x36\xef\x96\x54\x5b\xfb\x24\x33\x5e\xc5\x0c\xf8\x1e\x4f\xcc\x75\x6d\x32\x91\x0e\x66\xe9\x1c\x16\x89\xa0\x9d\xc5\xb3\x77\xee\x10\xe8\x5a\x60\xca\xce\xa3\xe1\xf5\x70\xd8\xe3\xb3\x62\x9e\x7c\x8c\x55\xf7\x10\xc5\x1c\xe6\x12\xbc\x61\xe1\x3a\xac\x7c\x34\x3a\x9c\xb0\x45\x31\xa9\x0c\x86\x11\xe8\xb1\x69\x53\xc9\xf4\x9a\x2c\x4c\xf4\x0b\x6d\x89\x3e\xab\xd4\x4e\x04\x72\x7b\x29\x14\xe5\x58\xa5\x4a\x94\x56\x82\xca\x72\xbb\x3a\x18\x00\x26\xa4\x8a\xcf\x40\x3c\x6b\xe4\xda\x7e\x6e\x7c\x47\x81\xd4\x73\x14\xc0\x35\x47\x81\x8d\xe3\x28\x70\x93\x23\xee\xf9\x71\x5b\x4d\x8b\x98\xcc\x3b\x41\x86\xbc\x13\x35\xb4\xa6\xca\xff\xb8\xcb\x71\x36\xe8\x1b\x6d\xd4\x60\x4d\xef\xeb\xba\xae\xf7\xfd\x15\xea\x0b\xbe\x89\xae\xfa\x7e\x47\x31\xb0\x8a\xde\xb4\x9f\x6f\xd0\x42\x30\x71\x9a\x3f\x37\x2c\x9d\x60\xbd\x97\x68\xc3\xd0\x22\x95\xd2\x0a\xb2\xec\x7f\xa2\xe4\xbb\x7d\xea\xdc\x3c\xa8\xcf\x1d\xf5\xdf\x28\x11\x82\x1a\xec\x5a\xbf\xb4\xce\x60\x24\xe7\x28\x5d\xc2\x3e\x1a\x5d\x8e\xfa\x7f\x8f\x86\x7c\x18\x4d\x64\x9d\x78\x34\x1a\x01\x13\x16\x20\x06\xb5\xf0\x63\xb1\x79\x23\xfc\xcf\xc3\x08\xfc\x3d\x02\x70\xad\x95\x1c\xe9\x72\xf9\x13\xce\x39\x22\x88\x41\x4d\xba\x4a\xef\x79\x69\x7c\x02\x39\xb4\xf1\x57\xe0\xd1\xe9\xce\x56\x0a\xa1\x3c\xf7\xda\x3a\x54\x59\xad\xf5\x6b\x9d\x42\xd6\xb4\xb6\xc4\xad\x3f\xe4\x18\x94\xd0\xd5\xe7\xfa\x68\xa7\x9a\x68\x52\xfb\x2d\xc8\xa5\xfa\x62\xbc\x60\x72\xb5\x75\xd6\xa0\xcb\x98\xd2\xbe\x6e\x1d\xba\xbe\xda\x24\xf8\xb5\x9a\x46\xbd\xa4\x31\x99\xc6\xf6\x35\xa6\x64\xc9\xff\xfb\xe4\x71\xcc\x20\x09\xd7\xa3\x06\xe8\x85\x06\x0d\xf9\x84\x34\xc1\x5a\x01\xb1\x21\x4f\x24\xd1\x2d\x38\xeb\x1c\x71\x41\x83\x63\x9e\x1b\xd2\xfc\x23\x4e\xfb\xdf\xf9\x6f\xc2\x77\xa3\xfe\x3b\x84\xec\x15\xc3\x92\x68\x57\xd6\x15\x2b\xca\xfa\x4b\xc4\x53\x9c\xe5\xa3\x48\xb2\x55\x7b\x10\x50\xc8\x53\x49\xca\xbd\xae\x93\x71\x07\x01\x92\x27\xef\xb9\xcf\x40\x09\x75\x27\x88\x0c\xa7\xb9\x93\xd8\x51\x15\xff\x2c\xe6\x61\x49\x97\x56\xef\x86\x4b\xee\xbb\x9b\x8d\x1d\x67\xb1\x70\x55\xe3\xe0\x28\x6b\xbe\x5c\x66\x21\x4f\x88\xca\x7b\xcd\x74\x16\x30\xfe\x3f\xb2\x4f\x98\x2b\x3c\x1e\x0c\xbc\xef\xc6\x85\xad\x6c\x77\xbb\xe8\x34\x58\x3f\x38\x98\xe3\xdb\x10\x1a\x74\x1a\x29\x67\xe5\x68\x12\xe1\x65\x86\xa2\x12\xd4\x28\x72\xcd\x6c\x2b\xb2\x4c\xfe\x20\x92\x50\x57\x5e\x3c\x8e\x3e\x07\x3a\xe0\x32\xe1\x35\xd7\xe1\x2c\xcd\xb9\x6c\x53\x51\x56\xae\x4b\x36\xf0\x82\x5b\x34\xeb\xf9\x1d\x55\x81\x32\x9a\x35\xab\x10\x03\xa0\x1e\x1f\x23\x30\x7c\x65\xac\x0b\xfc\xc8\x19\xcd\xba\xd6\x1d\x19\x78\x11\x35\x9a\x15\x8d\xb3\x31\xf0\x03\x6d\x04\x7a\x34\x36\x7a\xa0\x1e\x80\xa3\x59\xd7\xf1\x3f\x06\x7e\x68\x0e\xbf\x6e\x2d\x76\x42\x75\x06\x93\x31\xb4\x80\x3d\x19\xc3\xca\x93\x78\x32\xde\x19\x41\x03\x6d\xb7\x37\x25\x64\x09\x1f\x29\x39\x82\xd4\xf5\x33\x94\x23\xae\x4d\xf5\x12\xb6\xdd\x1a\xd7\x88\x27\x59\xab\x77\x84\x40\x73\xfc\x0a\xc9\x00\x9a\x51\x83\xca\xae\x9a\x33\x00\x89\x35\xd8\xb5\xc3\xc4\xc0\x84\xc0\xe9\x68\xc7\xef\xb1\x9f\x86\x9a\xd2\xb4\xbf\x51\x4b\xd6\x83\x38\x09\xd0\xaf\xf8\x54\x05\xf7\xd5\x14\x1a\xe6\xfb\x39\x32\x3e\xee\x18\xe5\x2a\x82\xcb\xae\x38\x2d\xf5\x48\x2e\xa1\x68\x2f\x5f\x27\x96\x8b\xf4\x4d\xdf\x8d\xec\x3f\xa5\x98\x1f\xaf\x28\xbb\x03\xcf\x54\x4b\x29\xb3\x4a\xfa\xec\x0a\x5e\xde\xa2\x15\x12\x9d\x19\x99\xb3\xd8\xdb\xfe\x55\x9a\x2b\x02\x12\x91\x3e\x26\x98\xe3\x34\xc3\x39\x5a\xf6\x8f\xfb\x52\x54\x17\x03\xaf\x86\xf6\xbf\x31\xfc\xe1\x11\xdf\x6e\x8d\xd4\xee\xc8\x08\x68\xb9\x2b\xb6\xad\xbe\x4e\xd1\x84\x97\xf5\xb8\x45\x9e\x7e\xdf\xed\x41\x6c\xe6\x51\x92\xf0\xb0\xb4\x5c\x52\xea\x02\xf2\x19\xca\xa5\xbd\xe2\xba\xc8\x79\x1f\x61\x7e\x85\x98\xa0\x85\x45\xeb\x3e\x65\x8e\xf8\x1c\x4a\x22\x20\x1a\x9a\x11\x80\x8a\xec\xa5\xde\x6a\x93\xe1\x5d\xbf\x6f\x52\x55\xee\x70\x12\x8e\x9c\x79\xa2\xdf\x4f\xe4\x31\x8c\xa7\x2e\x83\x58\x67\x1e\x05\xa9\xc0\x07\x03\xa3\x75\x52\xb0\xac\xba\x7e\xbd\x9a\x06\xbf\x2a\xcb\x2d\x34\x3a\x3f\x97\xb3\x38\x3f\x4f\x38\x28\xbf\x39\x07\x79\x01\xb9\x2f\x28\x93\x88\x2e\x10\xcb\x5d\xce\x22\x97\xe1\xb5\x6d\x5d\x49\x65\x86\x93\x06\x88\xda\x85\x36\xa7\xb3\xf5\x2d\x1b\x58\xb7\x45\x74\x1a\x65\xfa\x5b\xa9\x3d\xd1\x7f\x73\x9a\xa3\x3a\x4f\xce\xbd\x60\xa4\x6c\x30\x40\xb1\x0b\x8e\x0a\x6d\x23\x99\x4c\x1c\xf2\xb2\x8c\x01\x4c\x5b\x16\xed\x3a\xd6\x1b\x7b\x86\x18\xc1\xd9\xcd\x07\x74\x3d\x51\x1e\x49\xda\x7f\xb6\x2e\xcf\xd5\xf7\x3b\xd6\x82\x5d\x6b\x36\xf1\x9e\xea\xd8\xad\x4a\x16\x0e\x54\xe0\x53\x9b\xa5\xc2\x65\xe4\xe7\x00\x22\x31\xb9\x5a\xa4\x1d\x5f\x87\xa5\xa6\x97\x1b\x5a\x54\xc9\xf5\x61\x9c\x57\xa0\xbf\xdd\xea\x1d\xbc\xf4\xaf\x88\x18\xdb\x3a\x84\x03\x50\x65\xcc\xb0\x1e\x0c\x09\x82\xbc\xb4\x71\xe5\x72\x98\x02\x48\xe3\x5c\xaf\xbe\x61\x0a\x52\xdf\x08\x69\x0f\x12\xb0\xb6\x95\x0f\x92\x1d\xc3\x77\x8d\xd8\x63\xde\xa1\x4d\x30\xe4\xd6\xe4\x62\x6b\x8a\xd6\xad\x91\x17\xdc\xdb\x1c\x72\x07\x9b\x43\x34\xbb\x92\x08\xf0\xb3\x4c\x68\xc2\x21\xf9\xc2\x7d\xaa\x84\x48\x10\xbb\xb0\x58\x42\x9a\x1c\x9d\xba\xf0\x49\xc0\x0d\x15\x77\x06\xc7\x3a\x74\xe4\xce\x0d\x03\xa1\xac\x0d\x06\x85\x8b\x83\xa0\x5a\x95\xbf\x54\x52\x4d\x23\x1a\x98\xc6\xbb\x4a\x6b\x4c\xb8\x58\xb0\x37\x6b\xb3\x4d\x23\x86\xd6\xf4\x23\xf2\xdb\x12\xaf\x61\x69\x2c\x08\x75\x0b\x4a\x50\xa0\x77\xa7\x6f\xba\xdd\xda\xee\xe9\x6a\xd5\xe8\xae\x02\x8e\x6c\x27\x70\x84\x2d\xb7\x3a\xda\x44\xfc\x48\x69\x86\x52\xd2\xf3\x21\x8c\xde\x01\x84\xd1\x0a\xc2\xa8\x40\x70\x09\x87\x74\xb4\x61\x68\x89\x17\x29\xb7\x7e\x54\x21\x2d\x32\x99\x92\xa0\x0e\x38\x49\x12\x52\x42\x7a\x4f\x00\xaa\x64\xfc\x95\xe9\x91\x39\x1b\x85\x9e\xa5\xee\x8a\x34\xe7\x1f\x63\x60\x83\x80\xef\x83\x61\x0c\xe0\xd1\xb8\x94\x4a\x30\x1c\xdb\x66\x35\xf0\x34\x42\x29\x05\x3b\xf2\x61\x90\x5a\x54\x0f\x74\x6a\x60\x69\xdb\x10\xb7\x41\x69\x01\x68\x27\xd9\x69\x52\xbd\x28\x6e\xe0\x58\xc6\x67\xdf\x63\xa8\x62\x02\x17\xdf\x75\x70\x14\x35\x05\x15\xb1\x38\x21\x26\xa2\x87\x60\x60\xbe\xab\x66\xf7\x5d\x9f\xa3\xf5\x26\x4b\x39\xea\xab\x79\x48\xd6\x47\x59\x71\x2e\xa3\x5a\xf4\x27\x6d\x65\x3d\x1b\x1b\x11\xd3\x11\x11\xb7\xce\x72\x3e\x2a\xc6\x4c\x23\x4e\x32\x30\xbe\x5c\x6a\x3b\x5c\x19\xe2\x8c\x58\xe5\x2e\x2b\xe7\xae\x2d\x90\x02\x1d\xd5\xcf\x48\x4d\x2d\x26\xdd\xf6\xde\x0a\x1b\xef\x62\xe3\x3d\xda\x9f\x79\xf9\x74\x42\x0b\xb5\x63\x57\x7f\x89\x66\xb7\x21\x03\x75\x07\xfa\x00\x19\xdc\xbd\x37\xac\xdb\xde\xd4\x23\x88\xdf\x4f\x3a\xa6\xd0\x04\x1b\x7c\x39\x64\x49\x2c\xf0\x99\x6f\x6c\xc3\xc1\x94\x4f\x1c\x33\x19\x0e\x00\x24\x2a\xa2\x36\x0e\x44\xd4\x26\x5a\x4d\x68\x55\x1e\xff\x3a\x63\xd8\x3d\x0c\xe9\x8e\xf4\x74\xdd\xe3\x84\x55\xd6\x6f\x5f\x62\xf2\xa6\x43\x96\x1d\x9a\x64\x63\x37\x97\xfd\x85\x51\xcb\x4c\x3a\xff\x2f\x07\xc2\x15\x65\xe8\x23\x62\x49\x93\xd9\xa9\xb1\x4b\x35\x4e\x0b\x8d\xb8\x72\x4c\xaa\xf2\x75\xe8\xec\x1d\x55\x90\xa7\xd6\x14\x1e\x3a\xc4\x67\x20\xea\x53\x16\xca\xf8\xa0\x90\xc7\x0b\x32\x5a\xe2\x7c\x93\xa5\xd7\x8a\xac\x1e\x46\xfd\x58\x06\x58\x8c\x20\x93\xda\x3a\x4f\xa7\xad\x9b\x78\xda\xec\x9a\xb2\xb9\x66\xc5\xb0\xc3\x84\x21\x1e\xc3\xbc\x11\x45\x1c\x68\x53\x1d\x88\xab\xc8\x62\x75\x59\x2a\xb2\xba\xf1\x1d\x8a\xf1\xa6\x56\x5c\xe6\x8b\xa8\x2d\x3e\x41\x30\xcc\xa5\x73\xbd\x7c\x73\x70\x15\x93\x26\x18\x33\xbd\xd5\x2a\x36\x5c\xc7\xfd\x76\x16\xf4\x2d\xee\xe9\x81\xbb\x83\x9b\x81\xdf\xfc\x2d\x92\x8f\x7d\xa1\xd1\xf0\x79\x8e\xf8\xd3\x2c\xcd\x73\xbc\x78\x86\x16\x54\xbb\x86\x3a\x65\x5a\x10\x69\x0b\xab\x37\x2f\xab\xb6\xd5\x7e\xe3\xb1\xcb\x45\x5b\xa2\x58\x4e\x53\x6a\x7d\xd5\x1f\xca\x05\xaa\x26\xea\x44\xc0\xd7\x75\x3b\x6c\xad\x59\x7e\x11\x73\xb1\x02\x75\xb7\xa8\xf8\xbf\x9f\x13\x85\x3a\x3f\xbc\xf8\x6b\xa4\xfa\xdb\x64\x3d\x91\x21\x58\xaf\x4c\xa6\x14\x2a\xff\x81\xd5\x35\xe7\xe6\xaf\xba\xcc\x25\xf5\x7e\xd6\xa5\x2c\xa9\xf7\x33\x20\x53\x49\xeb\x5f\x1c\xa4\xc4\xcd\x5f\x7b\xde\x0a\x25\x2f\xfc\x55\x3c\xd9\x8d\xe2\x3d\x8f\xc8\x3d\xbd\xe9\x37\x52\x67\x12\x18\x0e\x56\xb3\x75\xc5\x1d\x7b\x12\x9b\xe8\x97\xae\x13\x25\xe2\xc0\x9e\x2f\xa6\xe2\x7d\x4c\xfa\xa8\xc5\x0c\x45\x54\xd5\x4b\x61\x07\x99\xa1\x88\xf7\x5e\xd0\x5b\x65\x5d\xee\xcb\x8d\x7f\x73\xa2\x75\xdc\x2a\xd4\x0e\xbf\x0d\x75\x87\xf3\xe7\x2a\xa4\xbd\x6a\x1b\x92\xf3\xa1\xc1\x20\xe8\xa4\x25\x98\xe1\xa0\x05\x2f\x12\x9c\xef\x76\x1b\x2c\xa9\xf3\xea\x2d\x1d\x04\x38\x73\x29\x37\x7c\x62\x6e\xaa\x24\x44\x1b\x16\x9c\x0d\x39\x62\x27\x27\xa8\xef\xa7\xe4\xf8\x7b\xe5\x04\xf5\xbd\xe7\x04\xf5\x7d\xcd\x09\x4a\x0a\xdc\x47\x9f\x70\x96\x19\x8b\x51\xb5\x45\xcd\x82\x91\xb1\xec\x91\xdc\x63\x9e\xa3\xfc\xdc\x58\x86\xb2\xfc\xfc\xdc\xa6\x8f\x72\xdb\xc0\x3c\x99\xcd\x7b\xde\xa7\x24\xa0\x91\x57\x04\xa3\x0d\x77\xc2\x1f\x33\x49\x22\xe6\x33\x3e\x8f\x41\x2f\x0d\xc9\xea\xe0\x21\x73\x4b\xf2\xf2\x90\xea\x2a\x36\x84\xab\xd1\x99\xb1\x2a\x0e\x21\x06\x2a\x9b\x94\xc1\x75\xcd\x77\x52\xa3\x60\xa6\x02\x19\xad\xeb\x39\xa4\xaa\x9e\x19\xb8\x31\x14\x3d\x2b\xc8\x28\x93\x21\x58\x98\x74\x7c\xec\x55\x7e\xdb\x5e\x5e\xa3\xa0\x5f\xbd\xb6\x4f\xe3\xa0\x84\x4c\x4c\xcd\x38\x94\x26\x85\xc4\xd0\x9f\xda\x44\xdd\x85\x16\x75\xb3\xf4\xd3\xfb\xc0\x6a\x0c\x2a\x88\x6f\x4a\x48\xa1\x2b\xec\xad\x49\x27\xc2\x9e\xe7\xdc\x91\x33\xa4\x90\x8c\x74\x84\x24\x31\x22\x08\xc4\xdd\xfc\x84\xc9\x92\x7e\x1a\x09\xf8\x67\x2f\x09\x47\xec\x63\x9a\xc5\x58\x6a\xa3\x20\x0a\x88\x73\x03\x1b\x1f\x48\x76\x65\x9f\x7e\x93\x3a\xca\xdf\x4e\x34\xa3\xf3\xf8\x26\xe0\xe3\xae\x5e\xe2\x24\x49\xb7\x5b\x96\x24\xf9\x94\xdb\x50\x5a\x04\x4c\xb8\x09\x15\x43\x40\x59\xc2\x31\x80\xb6\xfb\x12\x32\xc7\x92\x4c\x37\x49\x1a\x9e\xa6\x6e\x6c\x2f\x3f\x50\x17\x92\x09\x5c\x5c\x13\x8d\xc4\xf3\xfd\xd9\x6e\x6b\x6c\x18\x29\xb2\x2c\x49\xd0\x6e\x35\x0a\x25\x1f\x11\xe3\xfd\x82\x28\x3c\x2a\x2d\xb9\xa5\xc2\x89\x53\x6d\x5a\x12\x81\x9e\xd1\x29\xc5\xa8\x8a\x70\xce\x93\xd3\x33\xfe\xb8\x8e\x68\xe4\xed\xac\xfb\x38\x09\x56\x4e\xcf\xe7\x28\xa9\x2c\x06\x89\x78\x48\x18\xd0\x8b\xa8\xf6\xe6\x2a\xcd\x5f\x7f\x22\x96\xc8\x92\x82\x39\xb1\xe9\x83\x41\x8c\x66\x64\x9e\xb0\x19\x99\x5b\x15\x00\x12\x9b\xa2\x0c\x2b\x93\xe8\x5c\xbb\xc2\x9e\x2b\x07\x89\xf3\xf3\xc8\xc9\x6a\x37\xd3\x0f\xe2\x65\x86\xd7\x6b\xc4\x2c\x77\xae\x2c\xff\xec\xa3\xce\x68\xc1\x31\xb9\x3c\xbe\xe2\xeb\xec\x22\x65\xf9\xc9\x07\x74\xfd\x89\xb2\x65\x7e\xb2\x50\x02\x87\xe3\x70\x83\xd6\x7a\x73\x1d\x11\x96\x98\x2d\xc2\x02\xe1\xae\x62\x32\xc3\x73\x6c\xc2\x3c\x9e\x9f\x67\x34\x5d\xca\xd3\xbe\xc4\x39\x67\xd7\xe0\xc6\x2e\xab\x51\x43\x66\x86\x95\xed\x81\xae\xa3\x62\x08\x94\x26\x7a\x71\x4d\x88\x28\x4d\x2f\x17\xe7\xf6\xeb\xf9\x79\x04\x05\x3a\x6e\x0a\xf8\x92\x88\xa0\xcf\x3c\x82\x79\x12\xa3\xba\x8f\x66\x12\x49\x40\x8a\x20\x6a\xf8\xec\x27\x26\x3b\x21\xe8\xa1\x86\xb3\x66\xa2\x65\x4f\xa2\xe1\xb9\xa1\x7b\x2d\xdd\xa6\x16\x57\xff\xdc\x73\x88\xb7\x1a\x8e\x01\x37\x6e\x80\xf4\xc2\x5e\x1c\xf9\xd0\x27\x28\x44\x00\x6d\xae\x4f\xc4\xff\xc2\x24\x9c\x2e\x14\xfb\xf2\x35\x52\xd2\xab\x34\x51\x95\x9a\x39\xd1\x64\x79\x92\x24\x68\x1a\xd9\x6b\x18\x4d\x58\x8c\x00\xd8\x6e\xd5\x25\xb6\xe1\x5a\xfa\x48\x3e\xbf\x75\x09\x8b\xe0\x00\x8c\x03\x88\x72\xff\x14\xad\xad\x54\x57\x2c\x30\x26\x0d\xd4\xda\x47\xb1\x16\x01\xb4\x4f\x8a\xd4\x26\x45\x9c\x49\x11\x33\x02\xd1\x89\x01\xf5\xf3\x56\x18\xc3\x61\x95\x5b\x2d\x2e\x12\x6a\x93\xe5\x13\x00\x7e\x48\xc6\xc0\x86\x76\x2e\x24\x6a\xf0\xd7\x43\x80\x9c\x4f\x9e\x10\x2d\x7a\x02\x10\x4b\xac\x51\x54\x94\xc0\xf1\x71\xf1\x43\x32\x3e\x03\xf9\xac\x98\x27\x28\x16\xff\xe8\xa5\x94\x28\xcb\x51\x1f\xaf\xe2\xc6\x96\x10\x00\x44\x9f\x72\x37\x54\xdd\x9e\xa9\x4b\x5c\xd5\xf3\xb3\x94\x23\x51\x13\x7d\x92\x7f\xc6\x32\x54\xbd\x78\xc6\x62\xa0\x5a\xdc\xe4\xc9\x8d\xe2\xf7\x6c\x36\x51\x31\x3d\x69\xa0\x4d\xba\x21\x34\x02\x33\x30\x18\x44\xe7\xe7\x62\xbb\xb3\x51\x5e\x5c\xa8\xbc\xf0\xf1\x18\x3e\x12\x98\x2e\x9f\x65\xf3\x04\x4f\xc5\x35\xcf\xcc\xca\x26\xe2\x6f\x50\x62\x19\xd3\x5f\x52\x22\x44\x86\x29\x12\x7f\x39\x6a\x8b\xbc\x14\x70\x06\xc9\x74\x36\xd7\x86\x57\xe6\x2f\x60\x63\x4c\xff\xbb\x38\xbe\xb5\xdf\x76\x79\xa1\xbf\x92\xd0\xd5\x37\x28\x14\xa3\xb7\x67\x4f\xdc\xec\x94\x4a\x5a\x54\xd5\x01\x3f\x7d\x79\xba\xbb\xd6\x06\x6a\x0e\x37\x3e\x03\x77\x89\x82\x51\x84\xcd\x5e\x94\xbb\x3a\x7c\x6a\x4f\xa4\x53\xa7\xcc\xe9\xb4\xb1\x87\xcb\x94\xa7\xc7\x6b\xba\x44\xd9\xf1\x8a\xa5\x97\x92\xc4\x38\x49\x05\xe6\x38\x31\xbf\x43\x9b\xbb\xa3\x99\x34\x9f\x94\xa1\x37\x77\xd5\xad\x3a\xdf\x55\x4b\xf0\xd8\x27\x06\x99\x1c\xd3\xd5\xb1\x80\xd5\x43\x33\x46\xa8\x14\x4d\xea\x39\xf7\x82\x14\x48\x07\x9a\xa8\x4a\xdf\xaa\x23\x0c\xe4\x9c\x32\x14\x01\x98\xd7\x42\x1a\x88\xa1\x01\x2c\x6a\x7d\x6c\x94\xab\x03\x80\x99\x5f\x40\xb4\x3d\xa6\xc1\x69\x56\xdc\xef\xe5\xa4\x25\x70\x65\x38\x0c\x6f\x18\x81\xc7\xe3\x31\x64\x23\x9c\xbf\xd0\xbb\x01\x24\x2a\x5f\x68\x45\xd8\x55\xa2\x8a\x05\x05\x4f\xd2\xec\x67\xb1\x71\x2f\x28\x03\xf1\x02\x08\x0e\x60\x41\xd9\xf2\x59\xca\xd3\xca\x2d\x12\xf4\xae\xb6\x5b\xd9\x26\x47\xdc\xf4\x29\x8b\x40\xbc\x80\x14\x66\x0a\xd7\xc7\x8b\x84\xcf\x56\x73\x30\xc5\xd3\x7a\x65\xd1\x9f\xa8\x4b\x40\x15\x47\xc9\x31\xbe\x93\x05\x0b\x35\x2d\x75\x7b\xab\x99\xa7\x30\x17\x43\xc0\x02\x56\x0f\xe7\xa2\x3c\x5c\xa9\xa4\xb5\xd1\xcd\xd4\xad\xdc\x3a\xe2\xea\x03\xd1\xa6\x83\x84\xb2\xb5\x14\xec\x88\xc9\x87\x10\xaa\x56\x74\x37\x62\x33\x52\xc2\x91\xca\x7c\xa5\x2c\xfe\xcf\xd5\x92\xde\x91\x74\x93\x5f\xd1\xd6\x08\xe0\xad\xf9\x91\x6b\xed\x63\x15\xf6\x52\x66\xab\x79\x2a\xe3\x24\x2c\x9f\x70\xce\xf0\x45\xc1\x7d\x6b\xfa\x60\xaf\x68\xd4\xd2\x52\x77\x9b\x2e\xd3\x0d\x47\xec\x19\x5e\x3e\xa5\xeb\x35\xe6\x81\xa0\xaf\x7b\xb3\xc0\x35\x92\x0f\xab\x48\x6f\xa3\x46\xe7\x31\x1a\x0c\xd0\x8c\xcd\xeb\x43\xab\xb0\xfa\x77\x32\x72\x6d\x5c\xc5\x75\x21\x39\xe0\x55\x9a\x3f\xc3\x8c\x5f\x3b\xbb\x57\xb7\xdc\xfe\x0f\x94\x2e\xae\x46\xcd\x8a\x11\x8c\xb4\xa0\x3c\xcd\x74\xc0\xe1\x36\x4b\xd6\x1d\x73\xb6\x91\xde\x9f\x90\xeb\x38\x0a\x8c\x22\x70\x2e\xa3\xca\x3c\x60\xc7\x19\xef\xdf\x17\xc5\x8e\xc5\x51\xb3\xb3\x08\x94\x30\x47\xac\x29\xc2\xf4\x82\x2a\xea\xe6\xb6\xa2\x68\xc5\xd0\x26\x4b\x17\xe8\xa9\x02\xf7\x46\x60\x3f\xc5\xec\xb5\x5f\x0e\x9a\xe8\xfb\x63\x88\x4b\x04\xd1\x90\x03\xc8\x1c\xf5\xa6\x1e\x42\x76\x49\x41\x09\xd3\xe5\xd2\x20\x86\xd6\x5c\x9a\xd2\xf0\x41\x33\xc9\x62\x92\x6b\xfa\x11\xed\x6d\x64\x8c\x1f\x6c\x3b\x1f\x0b\x05\xec\xaa\xeb\x0b\x33\x0f\x82\x17\x3b\xa9\x7a\x10\x9a\x3b\xa1\xdf\x04\x9c\xd4\x51\x5e\x4c\x1c\xe9\x8b\xf2\x47\x2c\xf2\x2b\x3d\x37\x0c\x4a\xe8\x88\xc9\x6e\x01\x0a\xc1\xcc\xe0\x23\x2d\x5c\x93\x06\x1e\xae\x73\xb0\x06\xef\xfd\xad\xca\x12\x38\xfe\x1d\xf4\x10\x62\xa1\x7a\xf5\xc3\x94\xd8\xee\x77\x5e\xb6\xae\xdb\x31\x7c\x31\x49\xd6\x73\xc1\x57\x72\x43\x6f\x18\xfd\x7c\x6d\xbd\xfa\x47\x86\x90\x82\x37\xca\x97\xb6\xf2\xac\xf8\x92\xfc\x99\xe7\x1b\x44\x96\x98\x5c\x8a\x27\xc7\x70\x71\x8d\x30\xe6\x35\xc4\x33\x9b\x0b\x78\xd5\xb7\x70\xaf\x79\xbd\x5e\x91\x3c\x68\x49\x20\xef\x78\x8d\xb8\x64\xd1\x24\x82\xe0\xc5\xa6\xf1\x0c\xda\xf0\x0b\xce\xa4\x8f\x04\x8b\x7c\xd3\x5c\x0b\xea\xb9\xb1\xd5\xbc\xa7\x55\x7b\xd1\xad\xd3\x0f\xc8\x1a\x2a\x04\x42\x90\x59\xcc\xd1\x48\x8c\x50\xdf\x10\x81\x44\x2c\xea\x18\x3b\xef\x33\x83\x91\xe2\x5a\x23\x60\x13\x80\x06\x76\xbc\x2c\x3b\x3c\xfe\xa8\xf3\xbb\xce\xa9\x5a\x56\xb7\x47\x7b\xdf\x13\xac\x43\x10\xda\x13\x89\x11\x68\x84\xa6\x6c\x6c\x88\x37\x8d\x9d\x4f\xad\x98\x40\x87\x77\x71\x36\xef\xf4\x02\x8e\x8f\x12\xc7\x13\x2c\x65\xda\x8c\xd1\x4e\xa5\x41\x3b\xd5\xba\x04\x1d\x1f\xc0\x1c\x71\x1d\x28\x24\xde\xdf\xe3\xfe\xe7\xce\x39\x31\x89\xa1\xf4\x13\x27\x0e\x44\x1e\xdd\x41\x17\xbb\x57\x8b\x34\x52\x7b\x2f\x9a\x2f\x89\xa2\xfe\x7b\x81\xb4\x32\x0d\xf2\x40\xd1\xd9\x06\x17\x3e\xc3\x4b\x59\x03\x48\x0c\x28\x4d\x28\x27\xf5\x0a\x6f\x51\x8e\x38\xd0\x16\xf1\x26\x2c\xc3\x73\x81\xd4\x72\x1c\xf2\x4c\x55\xf3\x8c\xa3\x61\x70\xfe\x23\xbc\x8c\xc0\x30\x02\x91\x8f\xfd\x49\x47\xec\xef\x90\x53\xb7\xc1\xfc\x87\xf0\x8c\x75\xb6\xb4\xc3\x8b\xf2\x15\x79\x50\x23\xfc\xfb\x62\xeb\x1f\x97\x37\x4b\xd0\x48\xae\x3a\xa9\xbe\x3f\xa9\xfd\x36\x0c\xa6\x92\x1a\xfe\xdb\x08\xa3\x3c\xb1\xb4\x4b\x8d\x46\xc7\xeb\xd5\x71\x34\x44\x67\x31\x1f\x0c\x62\x32\x4c\xa2\xdf\x45\x92\xe6\x1c\x0c\xd8\x68\x43\xb3\xeb\x35\x65\x9b\x2b\xbc\x00\x55\x69\xcc\x46\xa2\xdf\x3f\xa1\xeb\xed\x56\xd3\x6c\x15\x81\x5a\xba\xc6\x22\x46\x9c\xa0\xac\x7f\x15\x5b\x89\x20\xce\xed\x85\x9d\x1c\x8d\x61\xc5\x93\x8b\x5f\x86\xe1\xe4\x09\xdf\x6e\x6f\x4a\x6b\x07\x52\x43\xb7\x37\x9e\x70\xc6\x92\xa0\xf1\x18\xd2\x00\x17\x2f\x2f\x3e\x34\x96\xfd\x23\x49\x81\x42\xed\xb0\x51\x29\xdb\x5c\x46\xdf\x61\xd4\xa5\x64\x5c\x3e\xf8\x81\x10\xda\x78\xf7\x90\xe9\xce\x21\xd3\x44\x07\xb1\x46\x30\x15\xaf\x2f\xde\x31\x85\x54\x90\x93\xa3\x35\xe2\xa9\x20\x78\xed\x26\x2f\x94\x48\xc6\x02\x91\xda\x74\x67\x9e\x18\xda\x60\x17\x2d\x33\xc5\xd2\x3f\x22\xce\xc5\x1c\x60\x24\xef\x87\x94\xbf\xe4\x75\xc9\x87\x9d\x4d\xaa\xe5\xec\xd6\x46\xc7\x95\x50\x5b\xf9\xd8\x60\x70\x94\x4d\xb3\xa4\x98\x14\x83\x41\x71\x94\x24\xd9\x34\xce\xb6\xdb\x38\x4b\x48\x2c\x26\x05\xa0\x3f\xc0\xb9\x40\x17\xb3\x74\x9e\x64\x30\x73\xde\xf2\x02\x80\x49\x96\x14\x30\x2b\xeb\x28\x62\xdf\xba\xaa\x7d\x56\xb0\x63\x44\xf8\x29\x98\xc6\x6c\xbb\x8d\x59\xa2\xce\x11\x28\xb9\x8c\x79\x2d\x53\x00\x26\x5a\x89\x90\x0e\x06\xb1\xca\xfd\x10\x9e\x2c\x9f\x1f\x25\x09\xdb\x6e\x99\x1b\x54\x93\xb5\xbf\x4b\xb8\xe5\x5d\x62\xf2\x51\xc2\x2d\x8f\x12\x64\xa5\x73\xe0\xab\x18\x99\x34\xe9\x46\x20\x29\x8d\x5e\x9a\xd3\x9b\x06\xbe\xcd\xd8\xbc\x25\xfc\x4e\xa5\x16\x09\x20\x21\x7b\xa6\x52\x41\x0f\x04\x83\xe6\x7e\x88\x2b\x65\x45\xe4\x7e\x8f\xa4\x12\xb5\x5e\x5b\xa9\x29\x44\x5d\x05\x6b\x47\xae\xb6\x46\x40\x15\x4e\x66\xf3\xb2\xd5\x1d\xc5\xef\x6c\x8a\x27\xd2\xf6\x5a\x52\xe5\x31\x96\xd2\xa5\x78\x2c\xf7\xa7\x74\x90\xba\x7f\x71\xed\x5d\x29\xe2\xa8\x7a\xb5\x10\xd4\x38\x07\xb8\x37\x88\x55\xf2\xce\xb4\x0d\xd2\x88\x74\xbe\x8a\x53\x88\xc5\x0d\x32\xaa\x69\x58\x24\x69\xeb\x15\xc2\xd6\xb3\xb3\x18\x0c\x54\xb7\x8e\x68\x32\x07\xd3\x22\xc9\x27\xf9\x60\x90\x1f\x25\x49\x31\x2d\xa6\x71\x1a\x38\x4c\x3c\x4f\x0a\x28\x1b\x37\xe4\x8a\x05\xcc\x01\x98\xc4\x85\x9a\x72\x5d\x80\xc8\x20\x92\x2f\x2c\x87\x02\x47\xb5\xf4\x0c\x26\x45\x92\xc3\xa2\xf4\xf7\x42\x9a\xe4\x2a\x73\x42\xa6\xb1\x5a\xd6\xb6\x2f\x4c\x0a\x5e\x73\xa0\xa4\xaf\xf5\x25\x02\xbd\x9f\x4d\x01\x6a\x2e\x01\xd3\xc2\x49\x0a\xbc\x7b\xec\xcb\x49\x53\xb9\x84\x5e\x1a\x5e\x68\x01\xd5\x6d\x11\x0b\x55\xca\xb7\x34\x71\x31\x57\x16\x58\x3b\x11\xb7\x3a\x6d\xbb\xaf\x72\x0f\x5a\xef\xab\x34\x72\x4c\x95\xf1\x87\x4f\x61\x04\x21\x90\x6f\xb7\x31\x4f\x04\xc4\x2d\x5c\x58\x3c\x56\x17\x43\x66\x33\xf0\x61\xb1\xba\xf5\xc4\x0a\x6d\x8d\x6e\x47\xbf\xae\xf6\x01\x55\xac\x37\xd6\x81\xad\x04\x12\x91\xd3\x4a\x5b\xa7\xe3\x84\x05\x6c\xd3\xfc\xca\xb8\x5b\x53\x69\xa6\x8f\x34\xca\x00\x93\xda\x2a\xcc\xe4\x81\xff\x10\x91\xa6\x06\xc5\x4e\xbd\x36\x67\xa2\xe7\x8c\xcc\x9c\x7d\x22\xae\x8d\x83\x6f\x67\xf1\x77\xbd\xd1\x2d\xf2\x7d\xf3\xd8\xde\x54\x40\x2b\x4b\x24\x5d\x39\x62\x28\x5d\xbe\x26\x99\xe0\x87\xba\x11\xf6\xd2\x74\x21\xac\xf8\x39\x51\x02\x31\xef\x93\x6c\xee\x7f\x3a\xde\x30\xfc\x51\x32\x95\x5e\x5b\xc3\xb8\xb1\xfc\xe4\x1f\xb9\x63\xfa\x71\xcf\x64\x7c\x8d\x79\xb8\x4f\xfb\xfd\xff\x7c\xf7\xfa\xd5\x3b\xbb\xcc\x04\x8d\xe4\x01\x26\x68\xf4\x4e\xec\x9b\x4b\xaf\x17\x09\x19\xbd\x74\x4f\xd9\xf1\xe6\xcd\x12\x32\x7a\x5b\x1d\xb4\x2d\xe8\xd5\x48\xa9\x2a\x79\xc4\x8c\xcf\x7b\xd2\xf4\xb3\xe6\xc6\x86\x12\xd2\xc2\xd6\x5a\xf8\xae\x12\x28\xfb\xae\xba\xde\x2b\xbe\x6f\x2c\xdb\x5b\x58\x38\xd6\x32\x89\xb2\xf4\xa3\x2e\x67\xf0\x06\xa5\x8b\x2b\x03\xc3\x7f\x42\xd7\xa1\x9c\x75\xe6\x5c\x93\xda\x6f\xeb\x95\x68\x6e\x6a\xa5\x48\xfd\x80\xae\x4d\x60\x3e\x5b\x1d\x58\xa1\xa8\x34\xd1\xf3\xc7\x6d\xe6\x2f\xa8\xe4\x5f\x2a\x7c\x68\xad\x81\x67\x72\xa8\x4d\xf7\xbc\x47\x94\x81\x9e\xf4\xd0\x16\x58\x57\x20\x0a\x73\x7b\xdb\x84\x18\xe7\x12\xad\x48\x52\xbe\x56\xcf\xee\x04\x55\x6c\xa2\xac\x23\x6d\xf1\x9b\x55\x64\x12\x46\x24\x47\xf3\x6b\xd4\x06\x13\xf5\x64\xad\xbd\xa2\xf6\xc3\xf6\xbf\x56\x65\x86\xe6\x72\xb6\x81\x51\xdc\x97\xe6\x2e\xc6\x49\x78\x70\xf0\xe5\x0e\xc5\x18\xce\x5f\xa1\x4f\xc9\xd1\x29\x44\xd3\x18\x8d\x98\x4e\x95\x9a\x5f\xe1\x4d\x6e\x42\xa2\x48\x5a\xff\xad\x5b\x12\x23\x69\x11\x6d\x93\x7f\x49\x04\xf9\x5f\x2c\xdd\x6c\xd4\xf3\xaf\xee\xf1\x4b\x9d\xf3\x42\xa2\x26\xe9\xd7\x2b\xda\xe8\x60\x5c\x19\x46\x84\xbf\x5c\x1a\x5d\xcf\x52\x90\x07\x64\xb4\xa0\x88\x2d\xd0\xcb\x25\x88\x45\x55\x00\x20\x4a\xd0\xa8\x92\xb9\xc0\x10\x14\x2a\x0a\xd7\xd7\xdb\x55\x66\xae\x4d\xf5\xdd\x8c\xcf\xab\x14\x20\xbb\xfb\xf2\x0e\x28\xd0\x17\xb0\xb1\xa3\xd4\x4e\xa9\x10\xf0\xcb\x3f\x89\x9b\x57\x71\x37\xfe\x7d\x57\x35\x05\xce\xd6\x67\x75\x8e\xc9\x8b\x0c\x5f\x5e\xf1\x27\xb5\x75\x9e\x3b\x0b\xb7\x79\x26\xab\x6f\x2a\xe7\x9d\x3e\xc5\x46\x17\x6e\x69\xb1\x59\xa6\x1c\x05\xb4\xa7\x50\x1a\x5e\x54\xea\x65\x86\xe8\x06\x91\xf8\xa6\x55\x93\x54\x05\xa1\x27\xe8\x53\xbf\x86\xcc\x05\x0d\x61\x06\x85\x81\x28\xc5\x40\x46\xc3\x49\xb1\x20\x21\x7b\xcc\xa4\x9e\x52\x09\xe7\x9c\x18\xc4\xeb\x0d\xbf\x86\xcc\xa7\xfb\xe4\x95\x96\x9d\xb3\x3a\x0b\xae\xfa\x57\x3c\x20\x1b\x49\x3b\x47\x59\x66\x93\xff\xc8\x59\x28\x88\x74\x2c\x77\x07\x03\x5c\x23\x54\x25\x7f\xaf\x73\x77\xc4\x91\x20\x20\x04\x9b\x8d\xc5\x15\x31\x3b\x21\xfd\xf5\x4b\x57\x20\x52\xd3\x2d\x44\x02\xe5\x63\x15\x30\xcd\x64\x11\x3c\xd6\x2b\x8b\x1c\x53\xbc\xa3\x53\x17\x6e\xd6\x9a\xe0\x71\x60\x26\xad\xdb\x9f\x71\x57\x08\xcc\x5e\xd4\x54\xcd\x35\xfd\x9e\xb3\xe7\x90\xa9\x9b\x65\x95\x03\x3f\x9b\xdb\xe8\x32\xe0\x5a\xa7\xeb\x20\xee\x69\xe8\xd0\xd1\x28\xa3\xf4\x43\xb1\x71\xb4\xaa\x6c\x12\x0d\xb9\xed\xc7\x7a\x17\xb1\x29\x9b\xd8\x1f\x71\x4b\x4b\x4b\xae\x44\x00\x4c\xd9\xa4\xad\x96\xd9\x3f\x50\xca\xcb\x3d\xd9\x2b\xbe\x16\x40\xcd\x1a\x40\x7d\x5b\x15\x64\xcf\xc6\x75\x4e\x5b\xc5\x48\x8e\x75\xbe\x63\xd3\xc7\x03\x8c\x7f\xf5\x14\xcb\x5d\x09\x97\x09\x14\x35\x18\xc8\x88\xe4\x5a\x59\x09\x97\x28\x43\x1c\xb5\xf6\x26\x5a\xb4\x8e\xb9\x94\x1c\x67\x73\x3c\x2d\x23\x01\x8e\x70\xc8\xc2\xdd\x76\xcb\x5c\xa1\x51\x6e\xbe\x77\x9b\x97\xe9\x39\x74\x12\xd2\xb5\x2d\xbe\x59\x61\x94\x2d\x1b\x5a\x9a\x26\x29\x87\x3e\xf5\x7f\x4e\x37\x1e\xa0\x0a\xa4\x5d\xb7\xfa\xad\x3f\x00\x0e\x34\x4f\x91\xd2\x33\xc1\x4a\x96\x00\x26\xa2\x82\xfb\xa6\xd9\x4a\x6c\xf4\x01\x93\xa5\xaa\x60\x71\xe5\x60\x60\xfb\xb0\x08\x58\x5a\x3a\x20\x9f\xd7\x90\x1c\x16\x8c\x7c\x25\x5b\x04\x9b\x57\x15\xb9\x98\xbc\xf6\x50\x28\xc2\x0d\x04\xf5\xd7\x3a\x2b\xe0\x0c\xcd\x7b\x61\x8f\x20\x56\x37\xbd\x11\x6f\xb4\x20\x0d\x1a\x05\x31\xd0\x0b\x50\x73\xae\xa9\xd7\x22\x18\x42\x00\x7c\x36\x9e\xd7\x49\x11\x89\x7a\x6d\x5a\x35\x0b\x03\x1d\x5e\xd6\x80\x95\x0b\x53\x5e\xd9\x72\x46\x01\xc3\x0f\xd8\xb8\xb8\x87\x8e\xd8\xec\x34\x36\x43\x66\x30\x5a\xd4\xdf\xc8\xd0\xd9\x71\x27\x2b\xd2\x5e\xb2\x58\x0a\xff\xb8\x7b\xda\xd2\x15\x81\xcd\x93\x99\xf8\xff\x6c\x3c\x87\xf2\xdf\xd3\xf9\x54\xff\x6b\xd6\x34\xd1\xbf\xe7\xe6\x98\x56\x62\x86\x02\x8b\x29\xea\xa3\xb9\x19\x07\x11\x33\x3b\x2c\xaa\xf4\x50\x0b\x39\xcc\x7f\xa5\xf9\x5b\xe9\x96\x52\x8b\xff\xf8\x25\xe4\x93\x3a\x6b\x35\x14\x6e\x20\x6a\xce\x52\x92\xaf\x28\x5b\xd7\x5f\x39\xbc\x8a\xc5\x73\x82\xac\x41\xb8\xd2\x8d\xf8\xb1\x44\xf6\xa2\xf2\xd6\x77\x32\xb2\x03\x4f\xa2\xa1\xb2\x95\xe7\xa3\x2b\xb1\x7c\xe9\x56\x91\xea\x23\xb5\x3c\xe1\x68\x2d\x33\x9b\x9d\xfc\x4d\xcc\x22\x36\xb8\x65\xeb\x0b\x89\xb6\xf2\xff\x20\x9e\x4e\xfe\xfa\xbb\x78\xf6\xb7\xdf\xcd\x87\x00\x4c\xd5\xaf\x91\xf8\xf3\x77\x27\x00\xe2\x84\xcc\x4e\xe7\x90\x26\x64\xf6\x68\x0e\xd3\x84\xcc\xbe\x9f\xc3\x3c\xe1\xa3\x95\x8a\x94\xfe\x42\xc6\xa8\x73\x26\x87\x41\x2f\x4f\xe2\x3c\xc9\x07\x03\x41\x4a\xa7\x79\x0e\x7c\xd3\x40\x0a\x1d\xcd\xd0\xfb\xeb\x8d\xe4\xe4\x27\x29\x94\x84\xfa\xa4\xa2\xd9\x25\xf5\xa7\xdc\x46\xa4\x8f\x58\x6e\x7d\x63\xb8\x79\x8a\x99\x44\xe2\x86\x99\xaf\xa2\xd8\x1b\x36\x9f\x39\x5f\x6a\x92\x00\x7b\xb4\xdd\x44\x30\xbb\x0c\x70\xf7\x6b\x56\xd1\xe7\xa6\x94\xe3\xcb\x65\x1b\x97\x88\x3f\x59\xf0\x22\xcd\x0c\x94\xcb\x34\x60\x58\x70\x32\x35\x52\x20\xa1\x10\x35\x44\xa5\x49\xea\x7f\x94\x16\x1b\x39\x44\x35\x39\x68\xd2\x10\xce\x50\x58\x28\x38\xcb\x12\x1c\x73\xf9\x13\x2e\x92\x7a\xbb\x38\xab\x08\xc6\x78\x21\x85\xb2\x30\x8f\x17\xb2\x72\x29\x7d\x56\x03\x23\xb8\xfa\x4c\xe4\x52\xb7\xa5\x09\xaf\xa5\x4e\xd6\x40\x54\xe5\x65\x93\x4a\xcb\x6b\xe8\x1a\x12\x69\x1b\x89\x30\x4f\x8b\x92\x24\xe1\xd3\xf1\xe4\xb4\x6c\x98\xed\x54\xb9\x3c\x74\x1e\x48\x57\x7b\x0a\x49\x12\x7a\x62\x98\x44\x37\x16\x57\x79\x68\x96\x08\x8c\xea\x28\x1a\x5c\x1b\x63\x06\x0c\x9f\x26\x98\x01\xcb\x8d\x9a\x48\xe5\xde\x41\x56\xc5\x1e\x86\x97\x97\xa5\xbe\xf9\x58\xaa\x1d\x3b\xd8\xc7\xd0\x80\x20\xb3\xc2\xe3\xf1\x5e\x13\x56\xd3\xbe\xc1\x7f\xde\x54\xaf\xca\x04\x05\xdf\xe5\xdd\x46\xaa\xe1\xa9\x35\xf0\x7e\xbc\xcf\xee\x42\x9d\x26\xb5\xc4\xb0\x82\xac\xb0\x59\xb6\xd9\xd6\x69\xc8\x4c\x03\x46\xc6\x3a\x63\x12\x45\xa5\xa4\xad\x5c\x92\xd1\xbd\x5a\x15\xe7\xb6\x97\x86\x9c\xcd\xbf\x84\x7c\x94\xa3\xc9\xac\x82\x32\xb7\x7b\x88\xea\xab\x5b\xe0\x3b\x0e\xef\xae\x8a\x5e\x26\xfd\x63\x33\x5e\xd7\xce\xcf\xb7\x5b\xc7\x77\x9d\xfa\x86\xd4\x1e\x78\x56\xb5\x52\x5f\x40\x49\x1d\x66\x8e\x84\x59\x64\x0e\x60\xa3\x44\x00\x7a\xcc\x5c\x9b\x26\xcf\x8c\xa1\xa2\x98\x6b\x5b\x1e\x05\xa8\x53\x0e\x6e\xd0\x88\x50\x8e\x57\xd7\x66\x57\xd5\xad\x30\x7b\x66\xe7\xae\x23\xb7\x89\x39\x3b\x8a\x64\x17\x98\x79\xe9\x86\x96\xea\x68\x9b\xd3\xea\x1a\x13\xac\xad\x33\x02\xdc\x83\xac\x7d\x67\x5d\xfb\x8c\x77\xed\x3c\xd0\xc0\xa8\x9f\x3a\x36\xeb\x50\xdb\x31\x6b\xba\x37\x4d\x81\x17\xe3\x44\x06\xd8\xdf\xa4\x0b\x64\x05\x9a\x7f\x7e\xfe\xf6\xdd\xcb\xd7\xaf\x9c\x3c\x39\x56\xc8\xc2\x1a\x9f\xa4\xca\x6e\x42\x1a\xdf\xdf\x5b\x22\x09\x87\xdb\x54\x15\xac\xc4\x09\xd6\x0a\x2c\x0b\x0c\xcd\xfe\x4c\x72\xab\xe0\x82\x9e\xd2\xd0\x29\x90\xbf\x95\xe9\xdd\x24\x57\x3a\x3c\xe8\x5d\x1e\xa7\xae\xfc\x5d\x1a\x73\xb9\x0c\x5f\xb0\x94\x61\xc1\x18\xd4\x3e\x54\x94\x59\x24\x6f\x7f\xdf\x2c\x25\x8f\x60\x31\xd2\x1b\xe6\x7a\x94\x15\xdd\x2e\x8a\xd1\x32\xb5\xa8\xbb\xac\x22\xeb\xae\x5d\x5a\xeb\xca\x5a\x49\x32\xd5\x75\xb4\x49\xfa\xef\xe6\x67\x18\x08\xca\xc7\x93\xb6\xf7\x11\xd6\xa5\x34\x5a\x8b\x11\x83\x1e\x1f\x0c\xa8\x8c\x89\xab\x33\x11\xe2\xe4\x06\xe7\xcf\xd7\x1b\x7e\x3d\x39\x3a\x85\x38\xff\x89\xa6\x4b\x4c\x2e\xab\x1f\x68\xa9\xfe\x96\x9b\xad\xfe\x7c\x97\x7e\xb4\x55\x9e\x49\xd1\x8d\xae\xf3\x0a\x7d\x52\x7f\xfc\x39\xcd\xf0\x72\x72\x34\x86\x4b\xbc\x7c\x67\x05\xa4\xd7\x13\x3e\x7a\x4b\xa9\x92\xd6\x6a\x29\xeb\x28\x4f\x3f\xa2\xe5\xc8\xaf\x07\x4d\xa0\x24\x49\x3f\xe4\xbe\x87\x5e\x09\x2f\xd0\x82\xae\x91\x9a\x90\x57\x20\xf8\x72\xb4\xfc\x31\x5d\x7c\xf0\xbf\x4b\x71\xf0\xa4\x5a\xe8\x18\x56\x22\x5e\xdf\xc8\x78\x24\x51\x1e\x16\xbf\xdf\xd3\x38\xd2\x73\x54\xe8\x65\x19\x81\x12\x8a\xf7\xbb\x7b\x43\xb9\xb8\x08\x94\xa5\x1e\x70\x72\xd3\xb1\xbd\x69\x08\xe5\x1f\x93\x46\xfa\x9d\x2f\x81\x80\x3a\xb5\xda\x66\xbd\xc2\x80\x4d\xa1\xaf\xe8\x2a\x36\x8c\x42\x2e\x41\x60\xbb\x4d\x25\xc5\xd3\xb2\x3d\xe2\x04\x02\xda\xa3\xd6\x93\x0c\x6c\x87\x52\x3e\xa8\x9d\xd4\x87\x21\x8e\x53\xc3\xe4\xd8\x80\xde\x58\x19\xec\x4f\x48\x8b\xb6\xaa\x6d\x97\x4b\xa8\x07\xf0\x3a\x35\x7d\x35\x80\x31\x00\xc5\xba\xfd\xa8\x20\x8a\xf0\x15\x7f\xd7\xdb\x1d\x38\xa9\x20\x34\xef\x5a\x44\xe9\x20\x09\x6a\x28\x3b\xe4\xa9\x48\x46\xf6\xc2\x6e\xb7\x71\x9d\x2e\xac\xd3\x75\xfe\x39\xcb\x13\x96\x8c\x28\x59\xc6\x91\x73\x70\x11\x00\x35\x8a\x12\xdc\x54\x02\xdd\xf6\x11\x1c\x69\xd6\x8c\xcf\x61\x63\xa2\xaf\xd0\xa7\xed\xd6\x8c\x57\xdf\xcb\x08\x72\x50\x62\x37\x9b\x95\x76\x59\x35\xe1\x36\x68\x1f\x93\xb8\x6e\x12\x66\x23\x96\x4b\x79\x1a\x90\x12\x34\xee\xe4\xce\x41\x65\x4c\xa6\x35\x06\x08\x4c\x6e\x4a\xc8\x01\x18\xa9\xcc\xcd\x4a\xd3\x44\x20\x1f\xc9\x07\x50\x86\xf0\xc3\x90\x03\x5e\x73\xb2\x8f\x29\x18\x0c\x22\xa7\x4d\x74\x94\x24\x54\xbc\x3a\xa6\x99\xf9\x50\xd9\xe3\xb0\x98\xcf\xa8\x14\xda\x8b\x7f\x13\x24\xff\x81\x1c\xe2\x61\x34\x8a\x86\xd4\x09\xcb\x5d\x0a\xbe\xb1\xc8\x32\x18\x31\x4a\xa5\xc7\xa5\x7d\xbe\x71\xb7\xe7\xbb\x49\xda\xb5\x3c\xe4\xb6\xe2\xdd\xbe\xe4\xfa\x7d\x6e\x7a\xa5\x2a\xe9\x92\xd2\x01\x5a\x07\xd5\x25\x0a\xf8\x2e\xf8\x41\x66\x5c\xdb\xc2\x96\x64\xff\x76\x25\x76\x23\x8d\x7b\x82\xeb\x83\x03\xf9\x14\x69\x2f\x20\x67\x58\x99\x42\x20\xe8\x42\x71\x27\xd3\x40\xc6\xf7\x62\x8a\x2a\x2f\x8c\x09\x72\xe6\x52\x9f\x49\x25\xca\xab\xfb\xa8\x48\x76\x10\x06\xe5\x24\x2a\x89\x4e\xe5\x2e\x7d\xb4\x73\xc2\xae\xd6\xd5\xe8\xd4\x3c\xf1\xa6\x03\x90\xc0\x73\x84\x68\x06\xba\x3b\x94\x2d\xe9\xc8\x80\x85\x38\xa1\xaf\x03\xa7\x6d\x20\xd9\x14\xef\x6b\xd0\x98\x8a\x7f\x27\xa8\xcd\xdd\xd9\x83\xb6\x77\x98\x5c\x66\x32\xe2\x92\x72\x67\xd9\x01\x78\xc1\x23\xac\xe4\x4d\x55\x82\xda\xd6\x71\x3d\x8d\x70\x8c\x2a\xe9\x15\xa8\x8a\x94\xe7\xf0\x1d\x9d\x71\x07\x5c\xb3\xd3\xfc\xed\x38\xdd\xe0\x7b\xf2\x7b\xec\x88\x8f\x42\x82\xf1\x9d\x88\x2a\x04\x0a\x5c\x85\xd8\x0a\x1d\xfa\xce\x4e\x8c\x27\x9c\x14\x27\x76\x3c\x3c\x15\x0e\x04\xda\xd2\x3d\xba\x7f\xdf\x55\xb7\xe9\x93\x18\x58\xbf\x83\xcd\xa4\x88\x4a\x3c\xae\xe2\x25\x4b\xa4\x9f\x3b\xe4\x25\x6c\x2c\xb5\xe5\xde\x68\x83\x63\x96\xf8\x86\x3f\xca\xb6\x41\xa6\x71\xf2\x17\xcd\x00\xc4\x09\xaf\x0c\x20\x18\x80\x34\x71\x8c\x15\x62\x0c\xeb\x5e\x02\x3a\x6a\x85\x80\x2e\xc7\x32\x28\x02\xb7\x72\xe7\x0a\x3b\x3b\xdd\x7b\xe4\x97\xb0\x86\xcc\xd5\xb7\x07\xa2\xd3\xec\x96\x62\xdd\xf7\x94\xa3\xdf\x8f\xc6\xa3\x71\x14\x9c\x95\x63\xfa\xea\x62\x87\xff\xa8\x9b\xd0\xba\x26\xb2\x8d\x42\x1f\x6f\x54\xd2\xb9\xff\x68\x58\xdd\x86\x24\x54\xb5\x85\xb2\x44\xba\x47\xd5\xe8\xba\xc8\x5a\x92\x4c\xad\x48\x69\xc2\x20\x49\xc8\x60\x40\x76\x54\xb6\x72\xa6\x09\x81\x38\xc1\x83\x01\xde\x51\xd9\x0a\x9e\x26\xb8\xe7\x06\x61\x69\x97\x78\x11\x65\x54\x1d\x3d\x7b\x17\x1d\x22\x14\x7a\x4a\x19\xfa\x49\x7e\xbd\x8e\x23\x59\xa9\x2f\x88\xf3\x08\x52\x2b\x1a\xea\x29\xaf\x08\xd5\x83\x28\x7c\xa2\x34\x01\x16\x43\x0a\x9e\x11\x67\x1c\xb1\xbc\x69\x25\x39\xd3\x01\x64\x25\x39\x1f\x09\x14\xb0\x98\x44\xe2\xcf\x12\xda\x12\x9d\xd0\x71\x69\x8a\xed\x6f\xa7\xce\xd3\x0c\xa5\xc4\x54\x50\x3f\xca\xb9\x40\x29\x1c\x2d\x82\x26\x97\xe8\x28\x51\x9b\x6c\xa3\x91\x95\x70\x41\xb3\x62\x4d\xc4\x1e\xbe\xa7\xcf\x44\x4f\x81\x76\x6a\x99\x4a\x4d\x31\x5a\xa4\x1b\xcc\x15\x0e\xf1\xbe\x17\x64\x89\x58\xbe\xa0\x4c\xa0\x56\xeb\x71\x7d\x72\x7e\x72\x09\xa3\x7e\x04\x46\x9c\xe1\xb5\xf4\x37\x56\x23\xe6\x2f\x28\x93\xa9\xa0\xc3\xf8\x0e\xb2\xc4\x6e\x93\xdd\x84\x97\xcb\xa8\x9c\x43\x92\x8c\x21\xf6\x88\x09\x2f\xee\x8d\x8b\xba\x02\x96\x1e\x3a\x45\x32\x19\x0e\x7f\xc0\x15\x9a\xfb\x09\xaf\x31\xf7\x4d\xc8\xd2\x84\x8f\xea\x9b\x13\x53\xd0\x63\x4a\x5d\xa1\x26\x47\xd5\xcc\x52\xa9\x70\x67\xd2\xe6\x55\x19\xc4\xe5\x35\xc5\x1d\x5e\xc5\xf5\xa8\x8c\x8f\x1f\x55\xd6\x5f\x2a\x80\xf8\x53\x63\xc5\xf7\x27\x74\xdd\x93\x79\x9c\x6f\x8c\xe2\x50\x6b\xc4\xe5\x3d\x9d\xc4\xa3\xff\x09\x4e\x40\x4f\x27\x30\x23\xf2\x45\x21\xb3\xd3\x79\x95\xe9\xa9\xa2\x6b\x75\xcc\x89\xd1\x06\xa1\x0f\x4f\x32\x15\x74\xd4\xce\xf2\xa9\x5c\x9f\x34\x2e\xc8\xdb\x0f\x62\x0c\x49\x72\x83\x4d\x7a\x4d\xbd\xcd\x58\xb0\xd7\x15\x21\xd5\xa2\x40\xc4\x2a\x1f\xf5\x70\xf8\x03\x6f\xdd\x6c\x32\xc3\x73\x2f\xe4\x11\x16\x9b\x49\x9c\x69\xfe\x49\x07\x71\x0c\x4c\x71\x36\xb7\x2f\xf1\x93\x78\x26\x66\x35\x07\x7b\x67\x85\x1c\x3b\x56\x79\x98\x48\x1e\x5f\x13\x5a\x3c\x75\x93\xa8\xd8\xd0\x7e\x8a\x37\xdc\xce\x53\xdd\xf8\xc0\x76\xaa\x4e\x6e\x94\x44\x06\x99\xac\x9d\xe2\xca\x03\x58\xdd\x75\x53\x12\x12\x27\x0d\x06\x47\x8d\x76\xf2\xca\x4f\x8e\x76\xb4\x2a\xfd\xb3\x0e\xd2\x37\xd1\x45\x96\x2e\x3e\x44\xd5\xa6\xb9\xa3\x4c\x79\x12\x5d\x32\x84\x48\xb4\x7b\x72\xb1\xec\xa7\x10\x84\x11\xb7\xd9\x7c\xd5\xb8\x41\x23\x57\x1b\x78\xc2\xc6\x42\xd1\xa7\x07\x0d\x56\x0c\x0d\x34\x17\x84\xc8\xde\x33\x25\xd5\x99\xf6\xaa\x04\xfb\x3d\xd2\x3c\x5e\x62\xa2\x79\xb9\xd6\x37\x31\x1e\x7d\x62\xe9\x46\xdb\xb5\x22\x00\xca\x5e\x23\xb3\xb3\x0c\xe5\x47\x05\xc8\xd4\x43\x0f\xeb\x20\xbf\x7e\xfa\x1c\x55\xdb\x0d\x6d\xef\xbe\x09\x41\x73\x34\x73\x1a\x2a\x9a\x4a\x09\xda\x29\x0c\xfd\xf2\xbc\xa1\x9b\x22\x4b\x39\x5a\xaa\x89\x3f\x51\x1c\x63\xc7\x60\x71\x3b\xfa\xd8\x19\x40\x4e\x6a\xbd\xf3\xce\xc3\xa8\xea\x3b\x7b\xf4\xec\x9e\x3b\x77\xec\xb5\xda\xd9\xff\xcf\x29\xb9\x3e\x6c\x6f\x6c\x8b\x9d\xfd\xea\x20\xc7\x87\x75\xed\x36\xea\xd2\xfb\xe1\x93\xaf\x37\xec\x32\x8a\x2a\x3f\x74\x08\xd5\x6a\x67\xff\xb7\x81\xcc\xae\x90\xe8\xd4\xfb\x39\x25\xe9\x25\x62\xb7\x19\x42\x37\xed\x30\x92\x22\x08\x0f\x1a\x41\x34\xd9\xd3\x73\x65\x35\x7b\x40\xdf\x55\xa3\xdd\xbd\x1b\xf1\x7c\xf7\xae\x4d\x8b\x9d\xfd\x56\xc6\xb8\x1d\xbb\x35\x0d\x3a\xf5\x7a\x1b\x98\x09\xb4\xdd\x39\x96\xf1\x8d\xe9\x3c\x80\x69\xb0\xb3\xd7\xa6\x5f\x40\xe7\xfe\x9b\x4d\x77\x8e\x54\xe9\x0f\x5e\xd0\xee\x60\xef\xb5\xda\xd3\x7f\x05\x62\x12\x1e\x0e\x1b\xa6\xd9\xb8\xf3\x68\xf9\x6d\x47\xca\xf5\x28\xc6\xba\x92\x41\x34\x7a\xf6\x4e\xaa\xc5\x9f\x09\x4a\x5b\x3f\x78\xd2\x8a\x10\x9b\xfc\x3c\xad\xee\xb5\x2f\x9e\x3f\x79\xff\xcb\xdb\xe7\xef\xaa\xaa\xad\xc9\x5b\xda\xd7\xd5\x22\x09\x08\xf3\xfd\xda\xb0\xac\x9d\xed\x37\x15\xee\xd6\x92\xa0\xb5\x81\xe1\xc2\x0f\x8f\x3e\xbb\x73\x7d\xf9\x09\xd2\x14\xc4\x9e\x75\xaa\x7a\x5f\x6b\xb5\x4f\x2e\x28\xe3\xda\x58\xbf\x2b\x05\x65\x9b\xec\x04\x6e\x0d\x77\x07\xf6\xed\x34\xda\x13\xcf\x97\xac\x32\xbc\x38\x70\xea\x5e\xab\x9d\xfd\xbf\xa0\xec\x02\x2f\x97\x88\x1c\x36\x80\xdf\x6c\x0f\xf9\xf7\x31\xcd\xac\xa3\x44\x67\xea\xaf\x6a\xb4\xb3\xf7\x57\x94\xbf\xa0\x05\x39\xb0\x7b\xaf\xd5\xee\x47\x4b\x92\xfb\x87\xf5\xee\xb4\xd9\xd9\xb7\x4e\xd8\x71\x58\xe7\x6e\xa3\x9d\xbd\xff\x42\xd2\x82\x5f\x51\x86\x7f\x45\x07\xee\x4e\xa3\xe5\xce\x71\xd4\x75\x57\x76\x61\xf4\x8f\x69\x7e\xd5\x79\x9c\x46\xcb\x0e\xe3\x88\x6a\xef\xe9\x61\xc4\x43\xa3\xa5\xc4\x61\xbd\x5d\x38\xcc\xaa\x5f\xf6\x62\xb1\x16\x45\xcd\x6f\x0f\x6d\x33\x94\xf3\xfd\xcb\x95\xb5\x7e\xab\x4b\xe5\x7c\xc7\xf3\x1b\x92\x97\x7f\x33\x4b\x13\x53\x6f\x5d\x57\xc0\x96\x77\x8f\xc6\xa0\x11\x7e\x03\x93\x55\x86\x16\xdc\x49\x75\xa9\x35\x92\xbc\xd8\x1c\x5b\x4f\x64\xbf\xb0\xca\x8c\x76\x2c\x87\x38\xce\x11\xfb\x88\x17\x0d\x85\x85\x55\x62\x79\x7a\xcf\x96\x2a\x2d\x5a\x0f\x4b\x3c\xed\xbe\x83\x3b\x60\x76\x17\x0d\xd2\x36\x9b\xf6\x69\xb6\x8c\x58\xab\xd1\x5e\x1a\x98\x52\xbb\xbe\x46\x59\x14\xc3\x02\x66\x70\x01\x57\xf0\x0a\x2e\xe1\x06\xae\xe1\xc7\x1a\x74\xe2\x55\xfc\x05\x3a\x2b\x2f\x18\xad\xd6\x89\x58\xa7\xad\xd3\xbf\x8e\xe2\xd9\xf8\xf8\x7f\xcf\xb7\xa7\xb3\xf1\xf1\xa3\x39\xf8\xeb\xe8\x04\x38\xf9\x8e\x54\x2b\x9d\xf1\xa8\x52\xaf\xf4\x75\x0a\x9d\xbc\x9f\xf2\x7e\x86\xd2\x9c\xab\x9a\xfd\xd3\xd1\xe9\xf7\xa3\x31\xec\x5f\x14\xbc\x7f\x4d\x8b\xfe\x55\xfa\x11\xf5\x8d\x73\x83\x1e\x7c\x18\x8d\xfa\x6f\x44\x23\xd4\x2f\x36\x97\x2c\x5d\x22\x51\x95\xf5\xb5\xb6\xab\x4f\x57\xaa\x33\xd8\xe7\x57\x88\xd8\x3a\xd5\xe8\xa3\x08\xf4\xd8\xe8\xd9\xbb\x86\x37\x96\xfc\xe8\x0a\x6a\x12\xe6\xfd\xf4\x2a\xe8\x0c\x76\xcc\xff\xed\x55\xb1\xa2\x98\xaa\x96\xfd\xa4\x2a\x2a\xef\xaf\x8f\xfe\x0c\x2c\x2f\x9e\xb0\xea\x6f\x55\x24\xae\x7b\xf2\x51\xfe\xa3\x3e\x28\x31\x5b\xa2\xf7\x38\x57\x1f\x3d\x11\x59\xc2\xfc\xdf\xaa\x8a\xe1\x9b\x13\x66\xff\x54\x05\x86\x5b\x2a\xfc\x39\xb9\x74\x69\xb2\xf2\xcb\x5c\x9a\x2c\x59\x79\x3f\x55\x05\x97\x34\x49\x56\xde\x4f\xdd\xbb\xa5\xa8\x93\x95\xf3\x43\x15\x36\xa8\x8e\x64\xd5\xfc\xa6\xaa\xfa\xd4\x67\xb2\xaa\x7d\x50\x95\x3c\x1a\x2f\x59\xf9\xbf\x55\x15\x8f\x4c\x4e\x56\xfe\x6f\xbd\x81\x15\x2d\x97\xac\xdc\x5f\xaa\xb8\x41\x5a\x24\xab\xe6\x37\xb7\xaa\x43\xed\xd8\xaa\xce\x37\x3b\xa8\x71\x0b\xbc\xf2\xcf\xc0\xe3\x74\x99\xf7\x53\x03\x55\x25\x20\x11\x60\x55\xfd\xf2\xce\x37\x24\x15\x4e\xd8\xae\x52\x0d\xc7\x0e\xa4\xd7\x40\xbc\x29\x72\xf3\xc7\xd7\x1f\x75\xe5\xe7\xef\xde\x9b\x55\x2c\xfc\x15\xfe\x58\xe0\x6c\xf9\xcb\xdb\x9f\x64\xaa\x97\xa4\xf0\x7f\xf7\x6c\x6b\x67\x8b\xd6\x7e\x07\x35\xbf\xca\x4d\xb3\xf4\xc9\x9b\x97\x66\xf0\x2c\x58\xea\x34\x5f\xfa\x15\xac\xe7\x43\x92\xd6\x0e\x26\xe5\xa8\x2a\xcc\xfd\xdf\xfa\x54\xa5\x52\xd5\xad\x54\xfb\xa2\xe1\xb6\x10\x18\xcc\xad\x56\xfb\xa2\xf7\x89\xd2\x0c\xa5\xc4\xad\x57\xff\xa4\x51\xc7\xfa\x02\x2d\x97\xe6\x30\x73\xb5\xaf\xeb\xe0\x67\xd5\xe0\x02\x65\x94\x5c\xe6\xef\x69\xf2\xb1\xfa\x5b\x15\x5d\xa5\xb9\x38\xf6\xe4\xa3\xf9\xcb\x9c\x7d\x25\xa6\x91\xa7\x5e\xfd\x54\x15\x54\x58\x1c\xab\x0b\xad\x9c\x5d\x75\x71\x45\x4a\x48\x5c\xfd\x4e\x11\x12\x55\xa0\x93\x16\x42\x4a\x34\xee\x24\x95\xab\x52\xa0\x9e\xd6\xd2\xa3\x9e\x42\xf5\x1a\x06\x25\x74\x4a\xd9\x24\x80\xfd\xd9\x3b\xc7\x5e\xe6\xba\x8d\x0c\x6b\xa3\x87\xbe\x9e\x89\x0c\xb8\x89\x4d\x5c\x90\x29\x9a\x20\x27\x88\x8c\x1b\x2d\x44\xcc\x6a\xa2\xb5\xc8\x61\xdb\x19\x13\xb3\xed\x37\x49\x2c\xef\xe3\x03\x3c\xa9\xe2\x37\xb2\x46\x7b\xd1\x3a\xaf\xd2\xb6\xd8\xc9\x35\xeb\x7b\xda\xb9\x57\x5d\xbf\x75\xef\x5c\xe2\xb8\x95\xe1\xa8\xea\xfc\x46\x21\xc4\xb5\xc4\x44\x1a\x51\x1e\x2b\xe9\xba\x49\xf2\xdf\x61\xf5\xdf\x34\xb3\x1c\xc2\xff\x9d\xf6\x63\xbf\x68\x24\xc4\x27\x7d\xa3\xbb\x70\x08\x20\x28\x8e\xae\xe3\xa2\xff\x1d\x16\xbc\x5b\x22\xf4\x1b\x81\xf3\xfd\x0b\xae\x89\x38\xf6\x39\x7a\x86\x85\x2b\x5f\x4f\x4e\x70\x7b\xa1\x47\x48\xcc\xb2\x4b\xde\x70\x3f\x04\x4a\x96\x20\x98\x39\xde\xba\xd2\x54\x57\xcf\x7a\xb2\x4e\x05\x6a\xe5\x1e\x63\x03\xa0\xef\x16\x56\x35\xad\x9c\x34\x2e\x14\xe9\x1b\xc1\xa2\x41\x05\x8b\x79\x84\x9a\x2c\xe5\x61\x16\x3e\xa5\xde\x56\x99\x48\x12\x5c\x54\xaf\x11\xe3\x6d\x0d\x54\x92\x51\xd1\xa0\x46\xe4\x83\x32\x46\x20\x18\xe4\x0a\x13\xb1\xbf\xdb\xad\xf9\x0b\x53\xd2\xe3\x2a\xfa\x2a\x52\xe9\x71\xa4\xa7\x1c\x8b\x4c\xd6\x29\x58\xa7\xe5\x60\x55\x9d\xd1\x42\xc2\xea\xfe\x9a\xee\xfe\xb7\x37\x68\x9d\xb5\x59\xfc\x6b\x15\xf5\x58\x9b\x80\x8a\x55\x50\xef\x8b\xb3\x14\x97\x86\xb8\xc9\xa5\x89\x3c\xa7\x64\x72\x74\x5a\xba\xf3\xb2\x53\xaa\x57\x71\x37\x3c\x14\xfa\xae\x8a\x92\xd4\x5e\x57\xdd\x0e\x1a\xae\x68\x80\x51\xd7\xca\xf7\xd4\xaa\x2e\x62\xba\x7f\xe0\xaa\x32\xa9\x2a\x17\xe2\x4a\x24\xb5\x2d\x87\x71\x21\xa8\xb1\xa9\xfc\x7f\x9c\x81\x49\xd1\x88\xaf\x94\x01\x20\x36\xda\x1b\xc9\xed\xc1\x1a\x6e\xeb\x78\x02\x30\x13\xc7\xa8\xf2\xe9\xb6\xd0\xfd\xba\xe5\x6e\x59\xf2\x6f\x14\xd5\x3b\xe2\xe7\x0e\x8f\xda\x3d\x39\x04\x7e\xbd\xe5\x7e\x35\x77\x07\x1d\xc5\xd1\xf1\x7f\xf8\x7e\x74\xfa\x68\xf4\xfb\xa6\x03\x04\xca\x90\x74\x7e\x53\x29\xe1\x6d\x66\x78\xf3\xfd\x9e\xa6\xaa\x9d\xc5\x9a\x7b\xd8\xb0\xe7\xae\xa7\xfb\xf6\x92\x81\xd7\xe2\x26\xf4\xb1\x09\x42\xe8\x54\x0c\x19\xc6\xce\xe6\x90\xc8\x60\xa8\xc9\xd1\x29\xa4\x66\xb7\x38\xbb\xb6\x7e\xba\x29\xcc\x13\x34\xab\xf5\x3f\x8f\xc1\xd9\x51\x4c\x92\x38\x4d\xf2\x11\x41\x9f\x79\x0c\xc0\x68\x49\x09\x52\x51\x25\xa5\x95\x6a\xaa\xb2\xb1\x03\x78\xc4\xb7\x5b\xa6\x8d\xd0\x8f\x92\x84\x83\x33\x31\x24\x38\x2b\x17\x52\x82\x5f\x80\x1b\x2c\xa6\x40\x93\xa2\x5c\x61\x92\x66\xd9\xf5\x8d\x98\xc0\x11\x19\x0c\xf2\x91\x9a\x7b\xf5\x57\x0c\x6c\x25\xbc\x8a\xb1\x96\xf3\x53\x6b\x89\xce\x4a\xb9\xbc\x5e\x25\xff\x17\x08\x5e\x4b\xff\xb5\x58\xb8\x9f\x72\x8e\xd6\x1b\xde\xe7\xb4\x2f\x03\x60\x16\x0b\x5e\x30\xd4\x27\x94\x1c\xcb\x15\x5e\x64\xc8\xfa\xf0\x44\xa0\x2c\x63\x27\x30\x10\x8b\xc1\x4d\x59\xcf\xfd\xfc\x47\x09\x2c\xd6\x1b\xe3\x96\x09\xf8\x78\x7a\x29\x7d\x99\x99\x0e\xad\x4c\xd7\x1b\x4a\x10\xe1\xea\x63\x09\xb5\x7b\x69\xc3\xa8\x9a\x25\x3c\x46\xf0\x14\xcc\xc6\x32\x8f\x3a\x4b\x92\xc4\xed\xcf\x8b\xaa\xe7\x75\x2a\x93\x90\x68\x6a\xe0\xc8\x06\x9e\xb4\x09\x8b\xf8\x15\xea\x9b\x39\xf6\x37\x69\x9e\xa3\xa5\xd8\x32\xf1\xf9\xef\xfa\x56\xfc\xbd\xaf\xee\x49\x7f\x5d\xe4\xbc\x7f\x81\xfa\x69\x5f\xf7\x27\x81\x88\x0c\x93\xa8\x1f\x5f\xd3\xc2\x34\xff\x7b\x34\x64\xc3\xe8\xef\x20\xd2\x87\x8f\xc1\x4d\xe9\xa8\x6a\xe4\x31\x11\xe0\xb9\x15\x54\xbb\x12\x1d\x2f\xaf\x49\xba\xc6\x0b\x7b\x27\xcd\x4a\xbd\x55\x4d\x03\xbb\xd7\x68\x7a\x9c\x66\x3c\x9a\x74\xa9\x19\x85\x90\xd8\x0a\xf1\xc5\xd5\x49\xfa\x8f\xb4\xa6\xdb\x94\xdf\xef\x3c\xde\x4a\xc0\xdd\x8c\x39\x19\x17\x2c\xba\x05\xb2\x60\xc4\xaf\x10\x89\x6b\x2e\xaa\x68\x44\x3f\x58\x8c\x31\x12\x2f\x7d\x6c\x2e\x09\x2a\x03\x82\x36\xb5\xc0\xa6\xb9\xd4\xdd\x62\x69\x9c\xbb\x5a\x94\xb7\x28\xdf\x50\x92\xa3\x50\x8c\xbb\xdf\x8f\x4f\x93\x24\x41\xd2\xe3\xbf\xc8\x75\x4c\x3c\xa3\x59\xd9\xdd\xf0\xfb\x46\x43\x8d\x07\x76\x36\x7b\xf4\xa8\xd1\xec\xc7\x74\xf9\x16\xfd\xb3\x40\x39\xdf\x3d\xe0\xb8\xd1\xd2\xe8\x77\x76\xb7\xfb\x7d\xa3\xdd\x1f\x28\x41\x3b\xdb\x9c\x36\xc7\x72\x15\x59\x8d\x16\xae\xad\x99\x68\xa8\x42\xe7\x8b\x66\x46\xbf\xb4\x7b\x8a\xff\xbb\x31\x9c\xa3\x76\xda\xd5\xd4\x34\xfa\x21\xf9\x5f\xe3\xb1\x8c\xc2\x2b\x7f\x3e\xfe\x7f\xc7\xe3\x36\xe0\x93\xb2\xac\xdc\x30\x8d\xea\x63\xe8\xb6\x41\xaf\x55\xc1\x71\x96\x9f\xac\x0b\x72\x79\xac\x89\xfc\xe3\x15\xb5\xad\x03\x55\x97\x88\x23\xb6\xc6\x04\x1d\x5f\xd0\xe5\xf5\xf1\x46\x29\x49\x0f\x4b\xd6\x6e\x58\x8e\x9b\xb2\xe7\xc6\x64\x0c\xb8\x83\x39\x2e\x3e\x33\x36\x4f\x64\xe0\xce\x83\xd3\x89\x43\x34\xba\x42\xe9\x12\xb1\xfc\x3d\xd5\x3a\x60\x0c\xeb\x6f\x92\x94\x9a\x59\x1f\x45\x5d\x5f\xc7\xf2\x3e\x3c\x45\x6c\x09\x05\xb2\xd3\x8c\x94\x9f\x6f\xd9\x66\xb6\x22\xdb\xed\x4d\xd9\xc3\xa3\x82\x09\x3e\x1a\xcb\xe8\x78\x09\xef\xd5\x33\xd8\xeb\x94\x92\x6a\x42\x11\xe8\xd1\xc1\x20\xc6\x66\x41\xba\x9e\x8e\xb1\x6f\x3f\x8b\x9e\x21\x05\xc6\x11\x52\x66\x96\xb4\x48\xcf\xa6\x78\x8a\xfe\xf0\xfc\xbd\x78\x13\xd2\xd1\x1a\xf1\x2b\xba\xdc\x6e\x8f\xd2\x91\x38\xd5\xed\xd6\xc6\x30\x4f\x4d\x97\x83\x41\x6c\xff\x9e\x45\x3a\xcd\xe6\xf1\x7b\x1d\xc7\xcf\x29\xd2\xc9\x5f\x75\xfe\x44\xb0\xdd\x56\xed\xaa\xde\xe4\x04\x5b\xfb\x4b\xdc\x78\xf2\x52\x3a\x72\xd6\x5f\x5c\xa5\x2c\x47\x3c\x29\xf8\xea\xf8\xff\x8b\x00\x4c\xd5\x16\x07\x73\x59\x2b\x9f\x22\x48\x93\x9b\x82\x65\x13\x04\xd5\xf2\x26\xbc\x84\xa9\x7a\x00\x9d\xc3\xd1\xed\xbc\x48\x89\xe7\xa2\x5c\xe3\xae\x38\x05\x23\xf5\xf8\xd6\x47\x52\xcf\x01\x96\x9d\xa9\xa7\x18\x8b\xe3\x95\xd1\xfa\x21\x02\x65\xe0\x65\xf1\xec\x96\xdf\xbe\xfb\xf3\x1b\xc1\x07\x5e\xc5\x37\x4c\xa3\x82\x09\x82\x9b\xf4\x3a\xa3\xe9\x72\x22\xa3\xd7\x3b\x0f\x95\xf2\x50\x6a\x76\x59\x31\xef\xaa\x0b\x19\x46\x49\x77\x22\x08\x16\xee\xbc\x64\x6a\xae\xef\x8a\xc5\x02\xe5\xb9\x9c\x2d\x83\xd4\xbc\x6b\xf5\x85\x30\x35\x24\x74\x37\x63\x47\xa6\x10\x81\x22\xcc\x96\x21\x01\xd3\x62\x0b\xa0\xf7\x7d\xd2\xed\x41\x56\x07\xab\x67\x39\x69\xa2\x15\x75\x41\xd0\xe8\x2a\x25\xcb\xcc\xe2\xfb\x98\x6b\x1c\x09\x71\xcc\x0d\x60\x01\x95\xb0\x4b\xcf\x94\x0e\x06\x54\x60\x7c\xc7\x30\x62\xea\x1c\x05\x93\x61\x3f\x63\x0a\x26\xb4\x84\x1b\x01\x6d\x2f\xd4\xe4\xd5\x00\x2f\x28\xab\xe7\xba\xf7\x33\x66\x19\x24\xfd\x1e\x7d\xe6\x6a\x0d\xcd\xfa\x2a\xc8\xad\x24\x31\xa8\x39\x15\xaa\x6f\xa9\x38\xb6\xb6\x41\x63\x17\x46\x3b\x2e\x5d\xf7\xe7\xbd\x35\x32\x45\xa2\x4c\x4b\xd3\x4a\xa5\x89\x7b\x7b\xaf\x34\xcc\x9b\x2c\xc5\x44\xe3\xe1\xc0\x93\x3b\x53\xd1\x85\x34\x43\x36\x17\x08\x4a\x0f\x63\x83\xcd\x8d\x4c\x54\x56\x2d\x61\x6a\x25\xc8\x76\x3e\x59\xff\x9a\x70\x07\x68\xc4\x25\x03\x58\xbb\xc9\x95\x33\xb1\xe2\x04\x92\xff\x7c\xf7\xfa\x95\x3a\xc0\x98\x01\x4d\xfe\x2b\xc0\x39\x8a\xa9\x1b\x32\xe1\xdd\x35\xe1\x1a\xd4\x8c\x1d\x17\xd5\x9e\x95\x06\x22\x7b\x47\x82\x9e\xdd\x6e\x1f\x8d\x7f\xaf\x7c\xcc\x1f\x8d\xff\x97\xfa\x23\xfa\xe3\xf3\x27\xcf\x22\xc1\x66\xea\x37\x60\xba\xa0\x24\xa7\x19\x1a\x7d\x4a\x19\x89\xa3\xf7\x57\x38\xef\x1b\xd4\xd2\xff\x94\xe6\xfd\x42\xba\x58\x08\xc6\xe6\x02\xf5\xe5\xfc\x96\xfd\x34\xef\x0b\x24\x3d\x8a\x20\x03\x13\x62\x52\x73\x1b\x87\xcf\x76\x7a\x79\x37\xf1\xd1\x94\xde\xbb\xad\xac\x78\xe7\xf8\x9f\x05\x62\xd7\xc7\x9b\x94\xa5\xeb\x7a\x55\x05\xcb\x77\x1f\x1e\x3b\x24\x0c\x77\xb3\xd0\xeb\xf7\xf8\x66\xc1\xd0\x12\x11\x8e\xd3\x2c\x9f\x44\x79\xba\x46\xc7\x2a\xc5\x75\x54\x42\x24\xa3\x19\x11\xbd\xed\x89\xfd\x6b\xbb\x25\x92\x12\xd8\x6e\xe5\xf3\x0c\x46\x9c\xfe\xb2\xd9\x20\xf6\x34\xcd\x51\x0c\xc4\x9b\x90\xf2\x14\x08\x4e\x54\xbf\xde\x55\x43\x75\x98\xce\x27\x09\x2e\x6e\x76\x05\xdd\x5a\x4b\x17\x2c\x21\x22\xd0\x75\x15\x5c\x7e\x1a\x81\x1f\x8e\x4f\xa7\xd1\x20\x9a\x44\xd3\xa8\x27\x4b\x87\x49\x14\x0d\xf1\x50\x22\x6b\xbb\xf3\xff\x47\x6c\xfc\x1b\xb9\xef\xc0\x74\x5d\xca\x6c\x86\x92\xe0\xf0\x6e\xba\xad\x30\x25\x92\xc4\x50\xf0\xad\x98\x5f\xbc\xba\x36\xa5\x13\x5d\xaa\x7e\x56\xc9\x7b\x77\x02\x50\x1b\x28\xb4\x01\x50\x08\x2a\xbe\x1c\x26\x42\xdb\x92\xe0\x7f\xb7\xa0\x9e\x90\x24\x27\x7f\x9d\xfd\x75\xfe\xbb\x93\x00\x45\x8f\x9d\x90\xd3\xb6\x14\xc5\x55\x6a\x4e\x98\xc1\x45\x4f\x66\xce\x6c\x48\xe8\x72\x00\x56\x94\xc5\x45\x32\x96\x29\x7e\x15\x84\x9e\x15\x8f\xb3\xb3\x62\x38\x04\x64\xc4\x15\x2d\x36\xa5\x31\x86\x29\xcc\x67\xc5\x1c\x4c\x50\x9c\x0e\xa3\x59\x34\x8c\xbd\x88\x74\xb2\x6c\x5a\x4c\xa2\x08\x0c\xa3\x79\xa4\xea\xda\x44\xb0\x12\x84\x6b\xa0\xa9\xc7\x5e\xf4\x31\xe9\xe7\xc0\xf4\xba\xd0\xad\x17\xa6\xb5\x1e\xba\xea\xeb\x90\x15\x88\xc6\x62\x26\x92\x87\x54\x7f\x29\x81\x9f\xea\xcd\x1b\x7f\xa1\x47\x35\x64\x5b\x19\x47\x11\x44\x60\xf4\x0f\x8a\x49\x1c\x0d\x22\x27\x80\xc7\xff\xf3\x68\x7c\x72\x09\xa3\x61\x04\xbc\x48\xda\x9a\x16\xb6\x69\x89\x06\x03\x1d\xee\x4d\xfe\xc9\x92\x48\xc6\x48\x0a\xe5\x51\x99\xb2\x18\x4c\x18\x44\x33\xa4\x57\x30\x4f\x10\x59\xd0\x25\xfa\xe5\xed\xcb\xa7\x46\xf4\x13\x73\x30\x8c\x92\x68\x18\x28\x61\xc0\x0d\x61\xdd\x0c\xed\x67\xcd\xd3\xdb\xe3\x56\x57\x55\x32\x7c\x71\x92\x5f\xe7\x1c\xad\x5b\x0a\xd1\x67\x7e\xa2\x25\x68\xf7\x24\x45\x7a\x5b\x64\x28\x17\x2f\x29\x26\x97\x45\x96\x32\xfc\x2b\x12\x94\x5a\x56\x30\x79\xd9\x8d\xb1\x35\x1f\xbd\x34\x13\xf3\x5b\x72\xef\x67\x8b\xca\x40\x59\x3f\x47\x2f\x2b\xd3\xfd\x9b\xb0\xaa\x40\x3d\x2f\x4b\xb4\x61\x68\x21\x18\x55\x65\xa1\x5d\x8d\xdd\xc7\x79\xdf\x96\x2e\xad\xd5\x35\xfa\x2c\xd8\x29\xcc\xb3\xeb\x49\x1f\xaf\xc5\x6e\xf7\xab\x26\x2b\x46\xd7\xfd\xef\x6a\xbb\xfb\xdd\x59\x04\x8f\x4e\xe1\x0d\x5e\x4e\xea\x1b\x3f\xba\xcc\xe8\x45\x9a\xe5\x11\x2c\x08\xc7\xd9\x24\xfa\xde\x84\x48\x72\x36\xa1\xdd\x92\xc9\x0d\x4b\x03\x23\x67\x5b\x0f\x5d\xb4\x26\x01\x9d\x1e\x62\xd0\x7d\xfd\x37\x7d\xa7\x61\xbf\xbc\xd3\x5d\x70\x7a\xee\xba\x0f\x16\xa0\x6e\xb9\x0b\xb6\xfd\x61\x7b\x60\x9b\xdd\xf1\x0e\xd8\x7e\x4b\x8f\x5e\x72\x00\x04\xba\x97\xc8\x69\x00\xfd\xab\xe6\x6d\x66\xfd\x56\xfa\x77\x6b\x07\xaa\xa9\xa1\x0a\x81\x73\x5a\x31\x4d\x08\x9f\xf8\xd8\xe4\x2c\x3e\x1a\x27\x89\x26\xf5\x9e\xbf\xfa\xf3\xe8\xf9\xff\x7d\xff\xfc\xd5\xb3\xf3\x37\x6f\x5f\xbf\x7f\xfd\xfe\x2f\x6f\x9e\xbf\xdb\x6e\x77\x14\xea\x23\x03\x83\x41\x8b\x93\x87\x39\x52\x9b\x23\xf6\x36\xd0\x51\xef\xe4\xdb\x82\x90\xc6\x02\xe2\xb1\x0b\x10\x3a\xbf\x5c\xd9\x7e\x7b\x9a\x7b\x74\x2b\x4c\xd2\xd8\xa5\x6f\x0e\x9b\x84\x77\xca\x19\xcd\xd9\xab\x26\x4b\xef\x03\xb8\x51\xd2\x3a\xe0\xb4\xe3\xf5\x6d\x79\x72\x35\xd3\x96\x7e\x40\x5a\xf7\xbb\x8f\xbf\xb2\x74\x89\x51\xae\x34\x54\xb3\x56\x7b\xca\x93\x31\x64\x89\xfe\x6e\xb8\x94\x33\xfe\xd8\xfc\x7d\xc6\x87\x43\xc0\x66\x7c\xae\x32\x13\x5b\x25\xa6\xfe\x43\x75\x2c\xf6\x3e\x46\xe0\x36\x62\x62\x83\xa7\x7c\x81\xa9\x2f\xb6\xd2\x3c\x13\xfa\x14\xbf\xd0\xdf\x1d\xf0\xb9\xc0\xc4\x44\x1f\x50\x0e\x15\x33\x41\x76\xcd\x05\xcd\xbd\x48\x79\x2c\x76\x00\x54\x41\x91\x1f\x25\x49\x82\xf5\xd2\x06\x03\xac\x43\x97\x7d\xc2\xfc\x8a\x16\xfc\x29\x2d\x08\x9f\xb0\x59\xa4\x7f\x1f\x2f\xc4\x87\x68\xee\xe3\x57\x3f\xd4\x01\x89\x31\x00\x01\xc9\x4e\x18\x0c\xbc\x1b\xf3\x15\x00\xe1\x1e\x0e\xc4\x93\x22\x7a\x97\x02\xcd\xc6\xf3\xfd\x5b\x61\x88\xcb\x6e\x44\xe8\xc9\xbe\x2d\xf1\x5f\x90\x2e\x5d\x61\x4a\x42\xb9\x47\xee\x9c\x7c\xad\xde\xda\x3a\x29\x6b\x5f\xe4\x8a\x94\x35\x01\x65\xed\xc4\x65\x3a\x4a\xfb\x3d\x26\xae\x71\x54\xd5\xde\x4d\x92\xe6\x8e\xc1\x6a\x6f\x78\x35\x17\xe6\xbd\xfb\xde\x94\xed\x18\x9d\x4e\xd0\xdb\xce\x7b\x17\xec\xdd\xa8\x59\xe7\x93\xd9\xec\xe4\x77\x27\x30\x12\xe3\xcc\x4e\xf2\xdf\x9d\x60\xf3\xf7\xdf\xe2\xf4\xf3\x56\xb0\xac\x00\xab\xcf\xbf\x3b\x45\xaa\x24\xa6\x0b\x4e\x37\xdb\x8f\x98\x81\xc2\x14\xe1\x7a\x09\xf6\x0b\xd2\x0c\xa7\xf9\x56\xc9\xf2\xb6\x17\x94\x14\x39\xa8\x75\x7a\x51\x00\xd3\x59\x5e\x7d\x5b\xad\xd2\x6c\xcb\xe9\x3a\xe5\x80\xea\x52\x6a\x4a\x67\x1c\xcf\x41\xb1\xd6\x9f\x53\xe7\x63\xea\x7d\xcb\xf5\x02\x6c\xb7\xd3\x49\x3c\xfb\xdb\x6a\x0e\x56\x68\x1b\xcf\x32\x36\x07\x2b\x33\x99\xdf\x3d\xfa\x68\x2a\x5d\xe1\x8f\xc8\x7c\x36\x03\xfe\x2d\x45\x98\x16\xd7\xf3\xed\x3f\x0b\x70\x6d\x16\x68\x1a\x7c\xde\x2e\xae\xb6\x79\xbe\xcd\xaf\xea\x4b\x5b\xa7\x9c\x6d\x3f\x22\xc6\xb7\x98\x2c\x41\x3c\x9d\xe0\xcf\x5b\xf4\xd9\xd4\xc2\x0b\x64\x76\x7c\xbd\xcd\x00\x2d\x72\x54\x95\x38\x05\x78\xd1\xfc\x4e\x6d\x2f\x88\xd8\x4f\x88\x98\x8f\x6a\xf8\x7f\x16\xf8\x57\xf3\xe5\x57\x31\xd6\x1c\x1a\x68\x16\xc7\xaf\x36\x47\x55\xcd\x73\xbf\x29\x01\xe8\x93\x3d\xfd\x4f\x79\x60\x8b\x8b\xb5\xfa\x18\xa7\x80\xa4\xd9\xf5\x36\xbe\x00\xe9\x36\x5e\x02\x9c\x5e\x12\xba\x8d\x37\x40\x06\xe3\xbf\x42\xe2\x4f\x46\xe5\xb7\x1c\x5c\x13\xba\xd9\xc6\x1c\x5c\x21\x10\xe7\x38\xdf\xe6\xc8\x8e\x9b\x63\x3d\xca\xdf\x52\xd1\x5f\x7b\xb9\x3c\xc1\x8f\xc8\xcc\x6e\x85\x9c\x63\xcb\xbd\x45\xf0\xe6\x27\x79\xea\x4e\xe3\xc0\xf9\x62\x5b\x7a\xad\xf7\x06\x20\x56\x7d\x94\x7f\xeb\xe3\x05\xf4\x63\x55\x20\xfe\x6e\x00\x04\xf2\x86\xaf\x9f\xa7\x38\x72\x03\xf0\x39\x88\x51\x0e\xa6\xde\x6c\x69\xad\x7d\x9c\x5f\xd1\xfa\x8a\x16\x0c\xe7\xea\xba\xc6\x38\xdf\x56\xfb\x85\xed\x6d\x06\x9f\x67\x18\xcd\x4d\xab\xcf\xb8\x71\x99\xe3\x22\xdf\x62\xd3\xae\xc8\x5b\x2f\x6e\x63\x82\x12\x0e\x11\x71\xa7\x63\xa1\x5d\x40\xb7\xd9\xb2\xcf\xd5\x75\x70\xbf\xe3\xcf\x0e\x9c\xfe\x5a\x5b\xea\x32\xe5\xe9\x45\x9a\xbb\xcb\x9d\x43\xcc\x18\x92\xf0\xfb\x26\xc5\x4c\xe0\xb0\x48\x50\x03\xd2\x74\x7d\x83\xe8\x26\x93\xbb\x19\xad\x53\xf1\x61\xad\x6e\x46\xb4\xb8\xc2\xd9\x32\x82\xea\x5f\xa6\x3f\xe6\xe8\xb3\xb4\x2e\xfe\xac\xce\x32\x5a\xd3\x8f\x48\xb4\xa1\x1a\x0d\x44\x0b\xfa\x29\x82\xd1\x07\x4c\x54\x97\xbf\xfe\xff\xec\xbd\x59\x77\x1b\xc7\xd1\x30\x7c\xcf\x5f\x01\xce\x97\x0f\x9e\x79\xd9\x00\x01\x4a\xde\x20\x8d\x69\x59\x96\x63\x3d\xb1\x2c\x47\x92\xe3\x24\x30\x1e\x9e\x21\xd0\x20\x3a\x1a\xcc\x20\x33\x3d\x94\x68\x02\xe7\x64\xb1\x9d\xc5\x49\x9e\xc4\x4a\xe2\x2c\x96\x92\x38\x4e\x62\x67\x57\x12\x27\x5a\x12\xfb\x42\xfb\x7b\xe1\xe7\x37\x90\x97\xba\xf9\xfe\xc2\x77\x7a\x9d\xee\x99\x1e\x00\x14\x45\xcb\x0b\x7d\x8e\xc5\x42\x4f\xef\x5d\x5d\x5d\x55\x5d\x55\x1d\xf6\x97\x11\xc9\xc1\x00\xba\x97\x92\x80\xb2\x35\xd4\x40\xb2\x69\xc1\x2f\x27\x68\xc0\xdf\x06\x43\x41\x37\x8c\xfa\xec\x49\x71\x60\x45\x2c\x1a\x41\x3f\x0c\xe0\x1a\x69\x74\x00\xdb\xa4\x06\x66\x81\x4c\x81\x2e\x8a\x7b\xe4\x77\x0f\xc2\x81\x05\xac\x2f\x41\x8f\x1c\x05\xd6\x20\xf4\xe9\x8e\x1f\xe5\xc2\x84\x4c\x3a\xe1\x77\xd2\x80\x71\xfe\xbf\x9f\x8f\xff\xcf\xa7\xe6\x41\xe4\xce\xdb\xcd\xe7\x4f\x3d\x3f\x5f\x69\xcd\x35\x97\x9e\x9f\x7f\x3e\xae\xb4\x1c\xbb\xe9\x55\x5e\x78\xbe\xd3\x9a\xfb\x94\x33\x0f\x02\x91\x83\x7c\x9a\x73\xec\xe6\x81\xca\x17\x5b\x3c\xc3\xff\x21\x19\x90\x3b\xaf\xa7\xcd\x67\xde\x54\x51\x1e\x11\xa1\xc1\x62\xb1\x60\xa6\xa3\xfd\xc1\xbe\x68\x6e\xce\x81\x55\x65\x15\x9a\xb8\x19\xb5\xaa\x38\x7c\x2a\x3c\x25\x2e\x1d\x5a\xee\x6c\x2d\xf7\x5e\x4a\x5a\xa7\xe0\x3d\x59\xe0\x5f\x51\x79\xb0\x1f\xed\x0b\x08\xb7\xee\xe2\x66\xd0\x02\xb0\x2a\xd1\xae\x19\x35\x6b\xb9\x16\xa2\x66\x3d\x9b\xa9\x3e\x31\xd3\xe1\x60\x15\x46\x31\x2c\xc8\x5b\x2b\xc8\x6b\x6a\xbc\xd6\xd2\x9e\xe9\x73\xd6\x6d\xe8\xc2\xe1\x70\x7d\xe4\xa8\x73\xe3\x6a\x33\x35\x1c\x26\xb6\xa3\x36\x41\xf7\x93\x9b\x4d\xa0\xd9\xd4\x47\x0e\x22\xca\xdf\x48\x1e\x42\xf0\x43\xf1\x70\xd8\x54\xce\x96\x94\x85\xa2\xe9\xb2\xce\x06\x69\x34\x3b\x2a\x9a\xa8\x6e\xa5\xc4\x76\x46\x33\xa1\x4d\x38\x31\x25\xd9\x01\x1e\x4d\xd2\x3b\xc8\xcd\x29\x21\xbd\xd8\x3b\xe8\xb5\x7b\xd0\x76\x46\xa8\x6b\xcf\x6a\xcf\xca\x94\xcb\xb3\x47\xf3\xef\x6c\x66\x02\x82\x3b\x59\xe3\x44\x76\x81\xb8\x1c\x85\xa7\x62\x18\x95\x3a\x21\x8c\x4b\x41\x88\x4b\x71\x32\xa0\x62\xb3\xa1\x46\x50\x1a\x30\x29\x7b\x10\xfa\x6b\x5d\xe4\x97\x88\xf8\x53\x82\xf1\xfd\x95\xb8\xe7\xf5\x1b\xa5\x1e\xc6\x83\xc6\xfc\xfc\x0a\xc2\x55\x14\xce\xaf\x3d\xf6\xec\x42\xb4\x62\x29\x06\xa7\x89\x7c\x3d\xc4\x50\x79\x7a\x83\xbe\xd4\x41\x6d\xec\xf2\x07\x10\xc4\xcb\x3f\x24\x0d\xc0\x51\x9c\x0a\x74\xee\xba\x32\x2d\x39\x0b\xa0\x41\x12\xad\x88\x19\x63\x93\xa8\xb2\xbd\x85\xb6\x12\x6d\x52\xe2\xd9\x18\x76\xdc\xd9\x1a\xe0\xa6\x44\xb4\x96\x26\x6c\x0d\x87\x76\x26\xc5\xe5\xbf\x15\xc5\x04\x74\xf8\x2b\x1b\x0a\x2b\x6d\x32\x57\xce\xc6\xb4\x7e\x64\xa1\x5c\x4e\x2d\x7b\xc4\xc7\xe6\x42\x6b\x51\xfd\xd1\x58\x1f\xcd\xe4\x3b\xca\x5f\x9b\x68\x52\x01\xa5\xaa\xca\xa8\xfa\x2b\xa3\x4b\x03\xd6\xf1\x20\x1d\x8a\x4c\xe1\x43\x49\x35\x51\x4c\x4a\x74\x46\x23\x90\x4e\x65\xde\xce\x4a\xe9\x46\x5d\x9b\x2f\x37\x11\xf3\xce\xdb\x20\x09\x23\xd0\x41\x71\xf1\x9a\x89\xa2\xec\x79\x0c\xb5\x6c\x9a\x32\xd5\x2a\xea\x0b\x52\xbc\x1e\x99\x62\x59\xc9\x3d\x6b\x38\x36\x02\x2c\x47\xc6\xcc\x24\x33\x13\xe5\x72\x01\x02\x52\xe2\x22\x28\x0a\x53\x28\x90\x25\xcb\x50\x3c\x67\x94\x12\x9a\xed\xb4\x23\x2a\x19\xd7\x90\x4a\x96\xd4\xc9\x9c\xa2\x25\xf6\xb2\x2e\x6b\x0b\x34\x61\xbe\xee\x94\x2a\x6e\x79\x14\x9e\x56\x37\xe9\x7a\x8b\xd4\x28\x97\xc7\xe4\xa7\x31\xd5\x02\x82\x25\x43\x1d\x77\x65\x53\xf2\x6e\xb0\xcc\xf4\x8d\x69\xda\x23\xce\xb2\x90\x36\x72\x18\xa0\x26\xc9\xc9\x72\x1a\x76\x7d\xd6\x75\x99\xb5\x91\x1f\x7a\xd8\x86\x2c\x48\xb8\x56\x1d\x9e\xba\x3a\x27\x43\x10\x16\x71\x03\xce\x59\x25\x6b\x0e\x2b\x78\x56\xf0\x32\x8c\x79\x2f\x2d\x4d\x53\xca\x38\x6e\x51\xd0\xd8\x53\x7e\x5a\x12\xc4\x61\x65\xd5\x05\x0a\x81\xc7\x96\x88\x86\x67\x12\x5c\x4d\x5b\x00\x5d\x01\xf4\x04\xd0\x11\xc0\x40\x38\x82\xa0\xae\x1d\xbb\xb3\x70\x38\xc4\xec\xba\x1a\x3a\x20\x71\x91\x84\x63\xcd\x07\xa5\xeb\x66\x10\x1a\xd8\x3d\x37\xaa\xc2\xd3\xb0\x6d\x43\x67\x38\x0c\x04\x48\xd6\xa6\xe3\xf6\x9a\x0b\x19\xbe\x45\xdb\x89\x2a\x07\xd7\x6d\xf1\x37\xbe\xf3\x9f\x3a\xad\xb4\x0f\x84\x83\x1b\x94\x50\x50\xa2\xb7\xf1\x5d\x1e\x21\x6a\x30\x67\x7d\xca\x92\x4e\x30\x6d\xd7\x6b\x0e\x5a\x20\x29\x97\xbd\x66\xa7\x55\x2e\xdb\x6d\xb7\xe8\xb9\x89\xb6\x03\x06\x85\x1f\x07\x0e\xf3\xa3\x63\xb7\xd6\x84\x3f\x38\x06\x57\x0e\x9d\x1e\xd8\x03\x60\x21\xcb\x01\x6d\x67\x46\x30\x94\x7d\x37\x14\x3c\x64\xff\x91\x5a\xb9\x3c\x6b\x0f\x5c\xdb\x77\xc3\x66\xbf\x52\x6f\x39\xcd\x5a\xcb\x11\x13\xba\xaf\x5f\xa9\x38\xfb\x78\x4f\x69\x26\x9f\xf0\x4a\x24\x0f\x68\xbb\x3e\x63\x16\x45\x9b\x03\xd0\x26\xc4\x35\x55\xe2\x4c\xba\x2f\xca\xe8\xf2\xb6\xac\x21\xbc\xeb\xf6\x25\xe3\x2f\xa0\xa1\xf9\xec\xa1\xac\x10\xa7\x1c\xb6\x12\x39\x2b\xd5\xed\x39\x39\x65\x32\xd4\xc8\x19\x9c\x78\x1c\xe6\xeb\xac\x66\x36\xf4\x84\xa9\xce\x6b\x92\x3f\xd0\x38\x2b\xa8\x6b\xab\x7e\x49\x8e\x76\x59\xc4\x7d\x95\x58\xbf\x6c\x66\xb5\xc5\xbf\x9c\x38\xf2\xd4\x63\x5e\x14\x67\xf2\xf3\x54\xfa\x40\xdf\x63\x61\x12\x74\x9e\x94\x45\xf5\x8c\xd4\x86\x73\xd9\x9c\xd5\x34\x63\x3e\x0a\x60\x25\x5e\x5d\x91\xfa\xfb\x34\xc9\x8c\x9e\xb2\x00\x9b\xdf\x15\x18\xc0\xc8\xbb\xdb\x61\x50\x60\x95\x35\x74\x7c\x75\x45\x73\xb8\x49\xed\xdc\x99\x85\x6f\x88\x31\xea\xae\x39\xec\xa9\x2b\xfd\x3d\x91\x19\x79\xa2\x85\xe5\xf2\xfc\xf3\xd5\x78\x75\xe5\x53\xf3\x6c\x93\xd3\x07\x5d\x33\xf9\xab\x31\x91\xe8\xed\x1a\xa8\xec\x55\xee\x52\x42\xd6\x0e\xc5\x60\xfa\x6e\xbe\x63\x87\x20\xa8\xb6\x29\x08\xd4\xaf\x27\x10\xf6\x21\xfb\x8a\x29\x08\x34\xaa\xd5\xc3\x7d\xff\xb8\xd7\x85\x76\x38\x7e\x15\xf4\x49\xdd\x39\x84\x65\x13\x67\xd8\x78\x36\x1c\x0e\x2d\xd5\x16\xe8\xbf\x9f\x9f\x9f\x5f\x01\x5a\x12\x4b\xa9\x5a\x74\x1f\xa7\x73\xe3\xe6\xdc\x25\x67\x71\x7a\x30\x48\x21\x49\x54\x63\xed\xa7\x38\x76\x1f\xf9\x53\xa2\x33\xea\x5a\xf7\xcd\xe1\xb9\xfb\xac\xfb\xd2\x8a\xe9\xb4\x4e\x53\x71\x85\x30\x1f\x30\xb5\x37\xdc\x4f\x57\xe1\x11\xcb\x59\x4c\x5b\x9c\xe7\x89\x76\xf5\xff\x2c\x3a\xfb\x9f\x9f\x67\xbf\xe6\x57\xfa\x40\x66\x9f\xc3\x73\xd6\xfe\x79\x51\xb6\xa1\xf6\x76\x3e\x5e\x5d\x79\xc4\x32\x67\xe5\x1f\x0d\x6b\xeb\x87\x5e\xa7\x92\x46\x7e\x8a\x8c\x2f\xeb\xf3\x30\x88\xe3\x37\x91\xe2\xfd\x28\x7d\x0e\xb3\x76\xee\x54\xda\xa0\xff\xcc\xd6\xd8\xc3\x96\x51\x4e\x7a\x26\x5c\x14\xf5\x14\x64\xed\x97\xbc\xa0\xa4\xf4\xaf\x6a\x89\x27\x00\xe5\xd5\x98\x34\x98\xa4\x56\x66\xc3\xa1\xcd\x00\x17\xf2\x3d\x03\xab\xbe\x17\xe3\xc3\x62\xe6\xe7\x2d\x67\xae\xee\x38\x20\x18\xa9\x77\xb4\xa9\xb1\x72\x66\xa5\x30\x10\xf7\xb0\x15\xa1\xe6\xd9\xd6\x2d\xab\x3e\x83\xe2\xfc\x47\x2e\x9e\xb3\xe6\xb5\x75\xb0\x40\xc8\x13\xf9\x8b\x75\x99\xaf\x9e\xdb\x6c\x81\x98\xfc\x93\xb8\xaa\xb9\x6b\x0c\xfd\x6e\x95\xaf\xd8\x97\xe2\xea\x12\xf4\x4e\x2e\xc5\x10\x06\x0e\xf0\xdd\xda\x3e\x7f\x7f\x22\x18\x0d\x7f\x6e\x8e\xad\x53\xdb\x4d\x9a\x7e\x6b\x86\xd0\xa2\xb6\x36\x57\x08\xd4\x9c\xc5\xc0\x6e\x03\xab\x42\x08\x13\x7d\x41\x9a\x49\x3d\x6d\xa7\x91\xcf\x1e\x82\x1a\xa1\x5c\x7a\x81\x58\x14\x70\x46\xb6\x79\xec\x81\x5b\xdb\x17\xec\x4f\x75\x68\x54\x39\xa7\x0c\xd6\x8e\x6c\xdc\x0c\x5a\x8e\x33\x22\x28\xe4\x39\x60\x4b\xd5\xb0\xc9\x3b\x6c\xaa\xce\x86\x20\x36\x6c\x89\xbe\xd7\x8e\xc2\x8a\xf4\xed\x5e\x4e\x90\xdf\xa9\x88\x67\x5b\xa7\xa4\x79\x12\xb5\xf0\x47\xe6\xfa\x3f\xef\x31\x0c\xab\xed\xd0\xf7\xbd\x41\x0c\x3f\x03\xd7\x62\x10\xb8\xf4\xbd\x25\xfa\x96\x14\x40\x2e\xac\x76\x7d\x0f\x63\x18\xd0\x8f\x21\xd9\x32\xf1\x53\xde\x0b\x6b\x86\xf7\x84\xc4\x50\x61\x4e\x0e\x04\x9e\x2b\xdf\xf3\x8d\xdd\xda\xbe\x78\x3f\xdc\x17\xcf\xcd\x39\x5e\x33\x6e\x29\x72\x61\xdc\x62\x01\x20\x0c\x07\xc2\x3a\x41\xfa\x06\x4c\xcf\xc7\xba\x03\xda\x9e\xef\x2f\x7b\xed\x93\x8d\xd4\xa0\xb3\x52\x6f\x8d\x46\xb6\x47\x36\x41\x42\xf7\x09\x68\xbb\x49\x55\x64\x04\x5d\x37\xb2\x7d\x46\x59\x7a\xc6\x99\x40\x41\x3b\xec\xa3\x60\xe5\xa0\x28\x41\x66\x83\x69\xd9\x0e\x44\x2b\x31\x40\x42\x1c\x32\x9a\x97\x22\x13\x0b\xa9\x79\xd1\x05\xec\x0f\x74\x9c\x51\xc3\x46\xee\xfa\x08\xd0\xa3\x9f\xba\xbd\xad\x40\x93\xcf\x48\x89\x66\x28\xa8\x83\x48\xa7\x31\x2f\x1e\x6b\xc5\x01\xe2\xce\x44\x82\x3f\x0e\x5d\x9a\xd5\xa1\x93\xc1\xab\x0b\x41\x93\x56\x85\xa4\x11\x07\xb6\xd3\xda\x49\xfd\xaa\x9d\xee\x7a\x76\x72\x1a\x6d\x90\x4e\x8d\x51\x1f\xd0\xd5\x9f\xb9\x95\x8e\x51\xeb\xd4\x91\xee\x34\x6e\x40\x40\xb7\x61\x23\x02\x27\xe1\x5a\x83\x3e\xcc\x22\xa7\x58\x30\x3f\x8b\x36\x22\x7d\xa7\x0b\xef\x38\xd5\x78\xc0\x51\xa0\x06\x02\xa7\x81\xe8\x0b\x75\x03\x3b\x70\x00\x1a\x8d\x32\x6c\xa8\xd8\xcd\xba\x21\x09\xb6\x91\xed\x3b\x8e\x18\x72\xb3\xd7\x72\x98\xf4\x44\x49\xc0\xc1\x24\x8a\x10\xec\x1c\xe4\x45\x4d\x2b\x22\x93\x70\x3e\x49\xf1\x85\xd1\x1a\x65\xfb\x57\xb1\xc5\x22\x83\x60\x2e\x3e\xa9\x40\x22\xbb\x84\x69\x97\x26\xd2\x2c\x6a\xed\xee\x05\x78\xa7\xcc\x02\x66\x60\xf5\xc0\xb1\x63\x07\xbe\xb0\x74\xe8\xc0\xc1\x27\x5d\xeb\x51\xe8\xb5\x7b\x55\x0b\x88\xd4\xa7\x0e\x3d\xfd\xe9\x13\x4f\xba\x56\xb3\x95\x0f\xa1\xa1\xf7\x54\x10\x98\xca\x49\x68\x7c\x4c\x5a\xcf\x0d\x4f\x0f\xbc\xa0\x53\x11\x8f\xcc\x17\xe4\x52\x46\xbf\x55\x23\xad\x5c\xa0\x03\x11\x18\xa1\x09\x5b\x33\x2a\x63\x2f\x59\x1a\xca\xc5\x08\x73\xa6\x47\xea\xf9\x38\x1a\xca\xba\x33\x74\xac\x46\xb0\x93\xb4\xa1\x6d\xda\x16\xb8\xda\xa5\xef\xf5\xd9\x79\x4c\xaa\x30\xdf\x76\xc9\x96\x28\x2f\xb7\x41\x81\x1e\x91\x33\x02\xcd\x96\x33\xb2\x91\x33\x23\x1c\x06\x45\x81\x48\x59\x31\x67\x46\xa9\x33\xa4\xc2\x46\x3e\x23\x5b\x44\xc7\x01\x54\x46\x59\x6c\x5a\x56\xab\x11\x3e\x52\x5b\x6c\xa6\xb4\x36\xac\xd4\x9d\x56\x23\x3b\x23\xdb\x39\x84\xf2\x4f\xf9\x16\xe3\x8b\xd1\xd9\x65\x0c\x7a\x6d\x99\x7b\xa5\x81\x4f\x52\xe7\x0e\x93\xaf\xb6\x2e\xee\x29\x58\x11\xb9\x91\x58\x15\xb9\x18\x9c\x7c\x85\x6e\xc0\xf1\x65\x31\x68\x06\xe9\xf9\x34\x57\x6f\xd4\x40\xe0\x06\xb2\x9c\x4e\x23\x25\x22\x85\xcc\xe6\x71\x5d\x0c\xae\x43\x0e\x60\x46\x28\x8f\x78\x83\x46\x30\xba\x93\x05\x50\x4f\xfa\xe7\x10\xee\x1d\xf1\x06\xf4\x85\x22\x13\x77\x20\xce\x1f\x1b\x3a\x55\xad\x13\x93\xe8\x92\x20\xbb\x95\x24\x88\xbd\xae\xd1\xfe\x6e\x02\xf3\x65\xcc\xb5\x02\x71\x85\x0e\x46\xd6\x6b\xcc\xc6\xd9\x15\x8a\x3a\x22\xe7\x5d\x37\x42\x9b\xd1\xcc\xf7\x14\x9c\x58\x57\x67\xd8\xe8\xc1\x44\x1f\xc6\xa4\xdc\x55\x43\xca\x36\x40\xe1\xb1\x1a\x8a\x75\xd8\x94\x13\x7d\xb7\x66\x38\xb3\xed\xc6\xaf\xc2\x14\xd3\x3f\xcd\xb3\xce\xdb\x33\x9c\x2c\x9c\xf9\x74\x6a\xe5\x6c\x07\xc6\xd9\x46\xd3\xcf\x36\xe5\x75\x2a\x54\x47\x60\x14\x14\xee\x6c\xc2\xa6\x99\x74\x6d\x52\xb7\x7c\x1c\xde\xdd\x59\x57\xea\x4e\x4c\xfc\x8f\x90\x02\xfc\xbc\x14\xd0\xe6\x52\x80\xef\x80\xae\x5b\xdb\xd7\xdd\xef\xef\xeb\xce\xcd\x39\xed\x66\x57\x95\x02\xba\x2d\xce\xa0\x53\xc3\x58\x03\xc5\x72\xec\xb6\x03\x3a\x6e\x4f\xa7\x4a\x60\xe0\xf6\xaa\x8c\x38\xce\x30\x5d\x7b\xb3\x95\xd2\xfb\x55\x5b\xd1\xda\xf1\x08\x0a\xfd\x0c\x77\x0a\xc2\x74\x97\x36\xc3\x16\x75\x26\xcb\xe1\x18\xe3\x5b\x91\xc6\xb7\x06\x23\xc7\x01\xd1\xc8\x01\x9e\x9b\xa8\x9c\x7a\x28\x9e\xfe\xce\xcc\x33\x0b\x7b\x91\xa2\x90\xe7\x8c\x58\x04\xef\xf5\xd1\x4c\x27\x7f\xfc\xc8\xd8\x0f\x01\x7d\xbd\x7f\x26\x18\x0e\xed\xac\x86\x41\xe1\x6a\xdc\x94\xab\xe1\x27\x5c\xbb\x39\x68\xe2\x16\x8d\x08\x45\xd5\x1e\x91\xe4\x02\x90\xca\x2e\x0c\x87\x05\x5f\x05\x8f\x90\x15\x4a\xe1\x88\xf6\x4d\x1c\x7c\x26\x9f\xf0\x7c\xa7\x16\x2d\x3e\x89\x55\x6b\x0e\x36\xac\x20\x0c\x98\x72\x32\xae\x5a\x73\x98\x55\x38\xd3\x67\xda\x84\xd0\x01\x41\xb9\x6c\xaf\x35\x2d\x72\xb0\xcf\x45\x73\xd6\xe3\xa8\x73\xb0\xe7\x05\x2b\xd0\x12\x0f\x37\x87\xe2\xa9\xdb\x10\xac\x3a\xe2\xe1\xdd\x15\x37\x16\x11\xb8\xd6\xc0\x7a\x18\x1c\x0e\x10\xe6\x8f\x48\x87\x81\x6d\xa1\x00\x61\x4b\xf5\x3e\x58\x65\x9c\x38\x73\x36\x20\x74\x60\xd9\x1d\x27\x41\x64\x14\xec\x1f\x90\xd0\x6f\xeb\x61\x33\xda\x8a\x08\x93\x17\x65\x99\xa4\xe8\x9a\x23\x4c\x20\xd7\x63\x0a\x67\x67\x06\x0d\x87\x36\xb5\xf8\x2f\x85\xc0\x23\x02\x22\x15\x1d\xd9\x2c\xc6\x2e\x15\x4a\xed\x80\x72\xbf\xf2\x2e\x20\x9e\x89\x5d\x69\x7a\x42\xe4\xf2\x46\x04\x52\x79\x2e\x5d\x4f\x3e\xe1\xba\xa9\x0a\x99\x5c\x2a\xab\xda\x01\x88\x1d\x00\x55\x6f\x7f\x96\x5f\xba\x5b\x96\xcb\xb0\x1a\x12\x62\x7c\x0a\xf9\xfe\xe3\x30\xc6\x51\xb8\x76\x48\x44\xe0\x53\x16\x2f\xae\x76\xd8\x47\x5b\x61\x96\xe3\x11\xdb\x65\x2b\x00\x82\x65\x22\x54\x76\x72\x0c\x39\x0d\x21\x9b\xc5\x53\x29\x12\xa0\x72\xd9\x0e\x9a\xa1\x0c\xc7\x60\x3b\xad\x22\x62\x10\x71\x62\x80\x28\x31\x80\x23\xaa\x75\x04\xeb\x59\x69\x94\x0d\xda\x1a\x44\x70\x15\x06\xf8\xf1\x30\x59\xf6\xe1\x31\x18\x74\x60\x64\x81\xd9\x9a\xd0\xd4\xc7\x10\x73\x3a\x81\x60\x6c\x07\xd5\x74\x3e\x01\x52\xf2\x14\xd7\x54\x17\xb9\x56\x58\x2e\x49\x66\x9c\x51\xcb\x21\x62\x89\xd7\x39\x1a\xf8\x6b\xb6\xec\xdd\xf2\x68\xa4\x05\xe6\x79\x0e\x7a\x27\x8f\x78\x03\xe0\x31\xb4\xe0\xa8\xa0\x2d\xa6\x88\x6e\x27\xea\x96\xdb\xb2\x91\xd9\x94\x0a\x91\xcb\x5e\xdc\x89\x70\x6d\x74\x0e\x01\xbf\xa0\x3f\x09\xd7\x00\x43\xde\xaa\x61\x74\x33\xb0\x8a\x62\x8e\x09\x28\x58\x61\x26\x02\x72\xf1\x1b\xd1\x70\x08\xab\x41\x88\x51\x77\x4d\x90\x5a\xd6\x2b\x2a\x46\x4d\x3e\xdf\x99\xe4\xbf\x85\xa3\x7d\x5a\xae\x8a\x7f\xde\x51\x17\x12\x6c\x54\x5f\x38\x76\xea\x5a\x32\x61\xf8\x19\xa9\xbb\xe2\xa3\x6c\x58\xed\x69\x64\xf5\x9d\x8f\x77\xa7\x48\xda\x79\x11\x3b\x52\xbe\x72\xe2\xa8\x6f\xda\xc8\xe1\xc2\xf3\xd6\x66\xe3\x83\xbd\xb4\x65\x47\x47\x2a\x92\xb2\x4d\xc5\xba\xa4\x10\x07\xa8\x75\x04\x13\xa2\xcc\x86\x0c\x1d\x1a\x4b\x6c\xc2\x10\x4d\x82\xd2\xc4\xf5\x1e\xc3\xde\xef\xe4\x62\x67\x05\x6f\xb3\x76\x45\xb9\xd9\xc1\xe9\x1d\x5c\xc9\xa2\xe1\x87\x29\x47\x81\x1d\x00\xa7\x5a\x7f\x9d\xe3\x9e\x34\x2b\x48\x11\x08\xa6\xd6\x3f\x10\x64\x15\x41\x1b\x94\xa1\x89\x23\x1a\x56\x97\x3a\x70\x40\xe8\x5e\x80\x09\x7f\x4b\xce\x60\x79\x99\x8c\xf8\x61\x2c\x2f\xc5\x6c\x04\x22\x6a\xd9\x5a\xa8\xdb\x2a\xc1\x19\x6e\xcb\x06\x9d\xdc\x9d\x98\x59\xe9\x11\xd1\x8f\xa3\xbb\x7a\xdf\x40\xf1\x3a\xb0\x75\x4d\x3e\x8f\xfc\x8c\x5c\x4d\x93\x4f\x75\x6e\x22\x26\x16\x0d\xdc\xc5\x22\xc4\x85\x4c\x65\x1e\x31\x00\x60\x07\x84\x4c\x0b\x4e\x52\x62\x9a\x92\xc6\x0d\x9d\xb4\xd0\x79\xad\xc2\xf4\x02\xdd\x8e\xe3\xbf\x38\x2a\x73\x76\x75\x35\xa3\x5d\x5d\x4d\xb5\xab\xab\xb5\x1a\xeb\x23\x90\xbb\x9c\x75\x74\x53\x3b\xc2\xef\x2f\x46\x0d\x58\xa5\x63\x9c\x7a\xb2\xee\xe2\x96\xf8\xb0\xcc\x13\x94\xbc\x48\xe0\xf2\xe9\xa0\xd7\x5f\x27\xa1\xb8\xeb\xd2\x67\x32\x70\x16\x83\xea\xd2\x0a\xc4\x98\xc8\x09\x44\x7c\x88\x00\x72\x1a\xb9\xfd\x17\x2c\x06\x9c\x2b\x42\xf1\x63\xbe\x17\x9c\x24\x25\xa3\x46\xca\xa3\xf1\x90\x65\x63\x27\xbe\x30\x9e\x48\x91\x42\x68\x2b\x1a\x8c\x29\xb9\x21\x63\x36\xdf\x7b\x61\x6d\xba\x3c\x53\xd6\x47\x43\x03\xf9\x05\x5f\x23\xef\x54\xd1\x17\xe8\x75\x8a\x66\x45\x3c\xab\x35\xe1\xd5\xca\x1d\x8b\x98\x9e\x0e\x79\xcb\x21\xd3\xc7\x54\x4a\xd7\x92\x5a\xbc\x1c\xdc\x5a\xfd\xd1\x74\xf5\xeb\x8c\xe4\x94\x75\x07\x53\xd5\x4d\x10\x62\x8b\x15\xa3\xe9\x2b\xbe\xa3\x8e\x87\xd3\xd5\x2f\xb0\x73\xaa\x3a\xbd\xa9\xea\xa4\x38\x3d\x55\x7d\xf1\x74\xf5\xb1\x9d\x30\x55\x8d\xc9\x54\x35\xca\xfd\x33\x5d\xa5\xfe\xb8\x90\xff\xc5\x87\xc4\x07\xca\x61\x0b\x96\xc8\xac\x7e\x20\xfd\x11\x75\x4f\xa2\xcc\x19\x02\xb8\xab\x88\xdf\xb6\x22\x1e\x30\x03\x13\xda\xc8\x54\x93\xbf\x43\x72\xbb\xbe\xb2\x1f\x6e\xe1\x5d\x12\xa6\x49\x43\x27\xd4\xe6\xa3\xf7\x50\x88\x3e\x06\xf9\x04\x66\xc5\x8b\x22\x6f\x6d\x3a\xa3\x82\xc2\xfb\x91\x9d\x13\xe1\x0d\xfe\x30\x75\x23\x3f\x5a\x57\xf9\xd1\x7a\xab\xd1\x6c\x19\x9f\x63\x50\x24\x39\x76\x1b\x20\x22\x78\xab\x06\x03\xda\xfd\xbf\x50\xf8\xa3\x34\xb2\x70\x3c\xf0\x11\xb6\xad\xaa\xe5\x00\xcf\x0d\x9b\xa1\x22\x6e\x05\x6e\x8d\x46\xcc\x96\x92\xf3\xba\xe5\x2c\x7a\xd5\x38\x59\x66\x3d\xb1\xeb\xc0\x93\xd9\x1d\x51\x13\xb0\x9c\x46\xd3\x6b\x8d\x58\xe0\x40\x43\x57\xf8\xed\x01\xbb\x64\xa7\xc2\xeb\x22\x74\x2d\xab\x81\x08\x77\x6e\xa7\x06\x9c\x35\x80\x2a\x75\xea\x70\x63\xbc\x80\x17\xd3\x06\xcb\x65\x6a\xd0\x10\xc8\x86\xa0\x53\x2e\x07\x52\xb4\x15\xba\x6b\xdd\x8a\xa8\x46\x4b\xf0\xfb\xf8\xd8\xd5\xfb\xd6\xb0\xd3\x14\x32\x71\xa0\xae\xe5\x9e\x73\x03\x22\x25\xc4\x73\xae\xb5\x6e\xcd\x05\x3c\x54\x21\xb0\x9c\x39\x6b\x64\x09\x6d\xab\x60\xee\xa1\xb3\x18\x37\xe0\x9c\x55\xb5\xe6\x26\x5e\x94\xd3\xa3\xff\x1e\x1c\x7b\xfa\xdd\x86\xc1\xf6\x00\x8e\x54\x45\xf1\xc4\x61\x30\x8e\x63\xd2\x0e\x2c\x60\xc3\x3f\x7a\xf4\x27\xe5\x87\xa6\x96\xc7\x3e\x80\x67\x40\xe4\xdd\x8e\x1e\x1f\x4c\xb5\x3c\x90\x6e\x76\x41\xb9\xac\xc6\x15\x4d\xf5\x4a\xc1\xa2\x95\x04\xac\x23\x1d\xab\x11\xd9\x81\x43\xf7\x56\x0c\xf1\x22\xb3\x30\xa4\x70\x23\x63\x6d\xa8\xb0\xff\x66\xbf\x41\x07\x64\x4d\xc4\x91\x33\xfa\xb8\x85\x8f\xcd\x63\x4d\x48\x86\x2f\x91\x80\xf0\x1d\x5e\xbc\x05\xac\x31\x5b\xaf\xec\x28\x65\x30\xdc\xe3\xe7\x4f\x31\x10\xf0\x2b\xcd\xc8\x01\xc8\xad\xed\x43\xfb\xa3\x7d\x68\x6e\xce\x09\x9a\x48\xbd\xc7\x47\xa9\xf3\xb4\xf4\xa2\xd2\x23\x7a\xe5\xef\x2f\xd5\xab\xd3\x5c\xb3\xe2\x26\x15\x93\xb3\x84\x5a\x81\xb3\x28\x0c\xcd\x40\x6d\x36\x50\x2c\xb9\xe4\xad\x2e\x88\xe8\xed\xd7\x28\x1f\x29\x23\xb7\x48\x6d\xcf\x87\x41\xc7\xcb\x3c\xb1\xc9\xb2\xa5\x0b\x66\x5e\xda\xbb\xcc\x24\xf2\x63\x3e\xbf\xcf\x72\x77\xff\xbb\x2f\x82\xe1\x7b\xf8\x22\xd8\x34\xb1\xdc\xb6\xc5\x10\xae\x8f\xa8\x17\x0d\x1c\x0e\xe9\x63\x32\xbc\xec\x1e\xc7\x38\x10\x15\x43\x1b\x25\x31\x2c\xf6\x20\x68\x29\xec\xca\x77\xbc\x62\x50\xf2\x70\xa9\x1f\xc6\xb8\xb4\xc7\x12\x0a\x78\x82\x00\x7b\x1c\x10\xba\xa8\x59\x6b\x01\xcf\x45\xcd\x7a\x0b\xc4\x2e\x6a\x2e\x28\x0e\x28\xfc\x2e\x3f\x72\x80\xcf\xef\x85\xfb\x30\x5a\x81\x76\x02\x62\xc7\xa8\x2b\x0d\xa9\xd9\x39\xdd\x56\xb6\x07\x7c\xe3\x5d\x6c\x76\x47\x75\x92\x88\x07\xc8\xb9\xe7\xfb\x70\x0b\xc1\xfa\x14\x5a\x27\x06\x20\xce\xc4\x54\xea\xbd\x37\xe6\x23\xd0\x18\x3e\x31\x37\x83\x2c\x32\xd1\x87\x60\xd6\x77\xa9\xdf\xc7\x8d\xfa\x91\xf9\x5d\x20\x3c\x03\x0d\x60\x14\xd2\x98\x47\x94\xb0\x85\x2c\x87\x97\x3a\xc3\x1e\x3d\x15\xc0\x88\x19\x64\xd1\xa0\xfa\xe5\xb2\x97\x7d\x57\xd6\x90\x64\x5b\xed\x30\xe8\xa2\x95\x06\x0c\x56\x51\x14\x06\x14\x6b\xf9\x8d\x6a\xec\x7a\xd5\x08\xc6\xa1\xbf\x0a\x27\x17\x99\x89\x33\xbe\xb9\xb1\xd8\x04\xd5\x30\xc1\x83\x04\x3f\xc1\x76\x09\x61\x29\x4c\x04\x0f\x39\x55\xb6\x8f\xec\x70\xba\x4d\x17\x85\xfd\x4a\x10\x9e\xfa\x10\x6c\xbb\xa9\x88\x9d\x1a\x1d\x2b\x65\xb7\xd2\x33\xcd\xa6\x2f\x35\x85\x03\x1a\xc9\xc1\xcc\xfd\xdd\x3b\x2a\x48\x7f\x3c\x1d\x9e\xb2\xa3\xa9\xd6\xa6\x97\xf4\xbd\x20\x17\x47\x76\x97\x24\xee\x92\xc4\x9d\x22\x89\xf9\xe0\x13\xf1\xe3\x9c\x99\xb0\x91\x43\x2d\x36\xf3\x6c\x86\x8d\x1c\x07\xa0\xaa\xc0\xd6\x29\x09\x8f\x1f\x12\xc6\x6c\x17\xb5\x77\x51\xfb\x43\x83\xda\xd9\x93\x94\x60\x35\x43\xd3\x29\x71\x5a\xe0\xef\x3d\xc7\xe9\x3b\x93\x1b\x3e\x24\xa7\xe4\x34\x33\x8d\xc3\x5d\xa6\xe5\x83\x62\x5a\x70\x38\x3d\xcb\x82\x5f\xf8\x10\xac\xc9\x2e\x45\xff\x04\x51\xf4\x9c\xf8\x83\x5f\x98\x92\x5a\x27\xb8\xfd\x21\x40\xd6\x3b\x23\xd5\x09\x6e\x7f\x24\xb4\x3b\xa9\xe1\x83\xf7\x41\x3c\x0e\xaa\x45\x17\x13\xbe\x22\x5c\x21\xc9\x6f\x4b\x03\x5a\x79\x0c\xa3\x55\x1a\xd6\x41\xc4\x35\x3d\x1c\x60\x18\xad\x7a\x7e\x63\xb6\x0e\xd8\xb3\x31\x07\x7c\x3f\x3c\x75\xa8\x3f\xc0\x6b\x8d\x8c\x4b\xd6\x72\x18\xfa\xb6\x90\xca\x97\x96\x98\x18\xbf\xb4\x54\xf5\x64\x09\xcb\x01\x3c\x1a\x6f\xfc\xe9\x6c\x65\xb3\x35\xc0\x98\x8a\xa3\xd1\x09\xd4\x87\x5f\x0c\x03\xc8\x9c\x45\x3a\x39\x1f\x16\xde\x84\x60\x95\xc5\x6f\xcc\x8b\x69\xae\x2d\x2c\x36\x21\xe4\x9d\xa4\xee\x4e\x1c\x36\x06\xc8\xe0\x6e\x5a\xb8\x8a\xf8\xc0\x67\xb2\x8f\x63\x67\x26\xc6\x72\x44\xe8\xd9\xb6\x0f\x3d\xda\xf5\xc8\x66\x6e\x72\x3c\x70\x24\xcb\x47\x3f\xb8\x31\xc4\x04\x08\x13\xac\x5e\xf2\xb2\x26\xa2\x24\x30\xdc\xfc\x46\x7a\xe7\xf9\x63\xc1\x87\x03\x6c\x07\xa0\x5e\xa3\x41\x41\x40\x3f\x8c\x06\xbd\x23\x6c\x39\xcd\xe1\x0d\xd8\x54\xd1\x81\x89\x59\x02\x28\xf7\xee\x37\xdf\xe8\xd2\x22\x39\x72\x23\xf1\xb8\x14\xc9\x84\x80\xc5\xa7\xdc\x01\x81\x1b\x64\x3e\xc9\xd9\x77\x40\x44\x75\xe2\x34\x2b\x37\x28\xe0\xec\x62\xe4\xd0\x99\x81\x55\xfc\x02\xff\x80\x5f\xb0\x03\x87\xfa\x00\xa4\xd3\xa7\x5e\x06\xcb\x54\x32\x65\xf9\x09\x75\x46\x80\xbb\x1b\xe5\x62\xef\x6a\xcb\x31\xf9\x0d\xf5\xc9\x7b\x15\xc5\x15\xaf\x8b\x61\x64\xbc\x2f\x34\x6e\x6b\xfd\x23\x8b\xe1\xc6\xb2\x08\x33\xa6\x1d\xa4\x9a\x29\x51\xcc\x38\x87\x35\x0a\x1f\x1c\x12\x08\x43\xf1\x64\x10\xc1\x36\x8a\x51\x18\xb0\x40\xeb\x0c\x81\x42\x05\x81\x66\x26\x4e\xea\x4c\x46\x87\x98\x41\x33\x72\xda\x8b\xab\xc4\x84\xb0\x07\xbe\xe2\x62\x53\x77\x5d\x37\x5e\xf4\xb9\x15\x49\xb3\xd6\x72\x1a\x0b\x24\xa9\x5c\xb6\x13\x25\x11\xc8\x1c\xf5\x96\xe3\x00\x9b\xfb\xaa\x29\x3b\xc2\xf6\xaa\x9c\x3e\xb0\x3e\x7a\x20\x71\xc0\x3a\x1b\x4f\x03\x01\x31\x9a\x46\x38\x72\x1c\x72\x2c\x90\x25\xe6\x59\x23\xe0\xcb\x1b\x51\x16\x08\x6b\x2a\x2c\x59\x86\xdd\x30\x32\x5f\x2b\x8f\xc1\x84\xb1\xa8\xb4\x73\x68\x12\x8d\x43\x13\xbc\x8b\x26\x05\x68\xf2\x18\x5d\xe3\xed\xe2\x09\x3e\x05\x61\xf0\x89\x44\x14\x14\xb4\xfd\x24\x46\xab\x08\xaf\x51\x6c\xe1\x88\xe3\x6d\x1d\x71\xe2\x62\xc4\x21\xd8\x92\xba\xe0\x01\x5f\xe2\x11\x11\x63\xfc\xfd\x0b\xc3\xa1\x7f\x17\xee\x6c\xe1\xe9\x01\x6c\x63\xd8\x29\x2d\x94\xc2\x48\xde\xdc\xb6\x15\x24\xf5\x1f\x59\x28\x97\xdb\x0c\x03\x93\x6a\xdc\x43\x5d\x22\xc4\x18\xb1\x30\xd6\xb1\x30\x06\xed\x14\x0b\xc3\x14\x0b\x3d\x81\x85\x14\x83\x24\x1a\xde\x23\x56\x37\x49\x1d\xdf\x03\x80\xa6\xdf\x00\xfc\x91\xf2\x89\xc7\xea\xc7\x77\x1b\x7c\x62\xe8\xe5\x71\xaf\x0f\x8f\x46\x77\xe1\x70\x15\x38\xb3\x7b\xc8\x7e\x52\x90\xe6\x6e\x1c\xb5\x04\x6b\x76\x71\xe5\xe3\x8e\x2b\xdb\xc0\x11\xf6\xb3\xe2\x75\xcc\xde\x2a\x3b\x84\x26\xaa\xd7\xf7\x47\x24\x5c\xed\x76\xd0\x13\x69\xe8\xb9\x83\x6c\x9f\x44\x4f\x82\x99\xa0\x9d\x41\xcf\x64\xb1\x9d\x45\xcf\xa4\x5c\xb6\x02\xca\xdc\x59\xf2\xb1\x6d\xbc\x36\x80\x47\xbb\x2c\x53\xb9\x9c\xc6\x4d\xca\x7e\xae\xb7\x1c\x5e\x21\xef\x6e\x1b\xd0\xa7\x77\x1b\xb6\xba\x0b\x40\x3e\x0b\x77\xb3\xa8\x3b\xce\xb4\xcc\xa0\x5f\xcc\x0c\x7a\x9d\x8e\x44\xff\xb6\x44\xff\x69\x99\x31\x8e\xfe\x66\x53\xdb\x0f\x17\xa9\xdc\xbd\xc5\xf8\xa8\xdd\x62\x6c\x9d\x64\x88\xc8\x14\xdb\xb2\xce\x9d\x48\x47\xc0\xce\xdb\xef\x46\xc5\x54\xaa\xe0\x74\x06\x9e\x30\xf9\x8d\x5d\xaf\x59\x6b\x81\xc4\xf5\x9a\x75\x72\xc6\x7a\xcd\x05\x42\xcb\x74\x93\x5f\xec\xcc\xf0\x27\xe5\xda\xa2\x36\xf9\x5b\x52\x54\xd2\x93\x2e\xef\x89\x17\xc7\x68\x25\xb0\xdb\x20\x7d\xa0\x2e\x47\x77\x22\x4e\x77\xec\xb8\xe8\xc4\x4d\xad\x87\x13\xd0\xdd\x0a\x85\xe9\xa0\x6e\x77\x97\xba\xec\x52\x97\x7b\x49\x5d\xd4\x8b\x11\x9d\x5b\xee\xfa\xa1\x87\x0b\x19\x93\xad\xd0\x94\x05\xfa\x98\x05\x67\xd3\xb6\x4b\x55\xe8\xb3\x1c\xcb\xb0\xb4\x60\x4d\xc1\xfb\xf0\x3b\x61\xdf\x4d\xd8\xd3\x54\x89\x6a\xe5\x53\xc4\x61\xd8\x85\x6a\xa6\x2a\xd9\xb1\xb6\x0f\x22\x80\xb6\xb4\xcf\xb7\xe0\x2c\x70\xef\x25\x2b\x3d\x60\x99\x78\xe7\x84\xe3\x00\x72\xa3\xad\x32\xa7\x61\xf1\xd5\x9a\xc1\x6d\x64\xe1\xae\x1d\x3b\x02\x41\x3c\x37\x14\x0b\xfb\xa1\x76\x7f\x28\x3e\x82\xbc\xea\x12\x92\x18\x19\xa4\x18\x89\x46\x4e\x6a\x51\x39\xcd\xad\x1d\xc7\x47\x93\x13\xc5\x87\xeb\xe4\x19\x8b\xa8\xfc\x37\x33\x72\x2f\x0e\xee\xc8\xc5\x05\x2d\xf7\xb4\xb7\xe1\xd3\x69\x17\xe4\x9e\xd8\xb2\xc0\x56\xbc\x27\x80\xa7\x29\xe6\xbd\xad\xf1\x61\xc1\x58\x9d\x7c\x96\x21\xe3\x0f\xf7\x50\xa5\x85\xb9\x3f\x99\xd9\x4b\x03\x98\xaa\xc2\x5c\x9d\xf0\x9f\xe2\x02\x1c\xc5\xd4\x82\xc1\xf6\x9d\x45\x22\x4b\x7a\x8b\x89\xa2\xdb\x68\x78\x8f\x2c\x94\xcb\xb6\x2c\xbd\xd0\x72\x80\xfa\xdd\x69\xf0\x5f\xbe\x59\x06\x0c\x75\x19\x30\x04\x0a\x4f\xa6\xef\x0b\xe1\xe1\x20\xc5\xc0\x64\x2b\x04\xdb\xec\xf0\xf0\x11\xda\x22\x5b\x39\xf5\x7b\xa8\x03\x8f\x27\xdd\x2e\x3a\x4d\x91\x9a\xfc\x3c\x40\x7f\x15\xa9\xcc\x44\xd4\x68\xc2\x2e\x10\xb6\xdb\x4a\x6b\x28\xa1\xb8\x24\x3f\x74\x08\xa7\xd7\xf5\x56\xc3\x84\x62\xa4\xac\xd8\x02\xd2\xa3\x3b\x02\xeb\xa8\xd3\xd0\x66\x8d\x08\xef\x61\xc0\x9f\xfd\x13\x47\xb2\xb2\x22\x49\x80\x91\xdf\xb0\x1e\xaa\xd6\xaa\x35\x6b\x34\x85\x35\xc3\x64\x05\x5e\x34\x1c\x06\x63\x88\x6f\x46\xf3\x76\xef\x4e\x88\x22\xf9\x43\x78\x8c\xc4\x5b\xc5\xf1\x8f\x3f\x7e\x03\xc2\xcb\xda\x81\x0b\x81\xbe\x4e\x81\xb3\x18\x34\x94\x19\x0e\x1c\xd5\xad\x54\x2a\xa3\x40\xac\xed\x88\x24\xdd\x11\xfe\xd6\x89\x7e\x7b\x92\x8d\x91\x89\xe4\xb5\x05\xef\x12\xa6\xcb\x9f\xa4\xcb\xef\x8f\xb8\xc7\xd0\xbd\xbe\xf6\xf4\xd2\x6b\xcf\x78\x6b\x7a\xb6\x38\x59\xc6\x91\xd7\xfe\x40\xf9\x91\x5d\x5d\xf3\xae\xae\xf9\x2e\xe9\x9a\x05\xfa\x6e\x5f\xe1\x8c\xc3\x4a\xc7\xc3\x9f\x94\xab\x39\x42\x55\x9f\x89\xe0\x38\x46\x63\xbb\x47\xfb\x18\xb2\x2a\x4e\x75\xbb\xf8\x1a\x0d\x87\xf7\x9a\xa6\x42\xe7\x4e\xaf\xee\x4c\xae\x2f\x1f\x47\x4c\xd2\xf1\x68\x1b\xec\x2b\xab\x61\xc7\xd8\x57\xb1\x1e\xbb\xcc\x6b\x8e\x79\x65\x9e\x43\x5b\x62\x5d\x71\xf8\xf1\xc7\xec\x4f\x04\xe3\x7a\xef\x49\xec\x1d\xb3\xad\x53\x1b\xbe\xef\x54\x7c\xac\x62\x93\xf6\xa9\xbd\x1e\xa6\x5c\xfe\xc9\xbe\x11\xb9\xc5\x47\x3a\xdd\x41\x1f\x06\xba\x13\xa5\xc8\x17\x8c\xa6\xd1\x96\x4e\xe9\x3c\x7a\xef\x89\x89\x21\x5e\xe0\xc4\xab\x99\xa2\x25\xcd\xab\xca\x83\xf0\x94\xed\xb0\xf9\x32\x47\x27\x13\x13\x90\x04\xe8\xf4\x3d\x9f\xb0\xdd\x3b\xcb\x8f\xcf\x9d\xa5\xd9\xc7\xb3\xee\x34\x6b\xfa\x25\xde\x5d\x42\x74\x82\xbf\xf4\x09\x9e\xc9\xa4\x61\x4a\xb7\xd0\x5d\x4c\xdf\xc5\xf4\x6d\x60\x7a\x61\x7c\x8a\x3b\x47\xfa\x04\xb7\x6d\xcd\x43\xd8\x46\x20\x1c\x8b\xf2\xdc\x0b\x76\x6c\xe0\x8a\x9d\xe2\x71\xd8\x30\x8e\xb3\x1e\x88\x49\x63\x89\x87\x56\x61\x80\x61\x07\xac\x2f\xa5\xa7\x7a\xe2\xfb\x40\xdc\x06\xa5\xf0\xd1\x01\xe9\x58\xcc\x92\xb4\xfb\x2c\x96\x94\x3a\xe7\x36\x8a\x43\x0f\xb3\x17\x5c\x4c\x01\xc0\xaa\x5d\xaf\x8d\xc3\x68\xed\x89\x30\x32\x47\xeb\xaa\xd2\x17\x4d\x86\xc3\xf5\x91\xfe\x62\x16\x7d\xe3\x30\x5d\x1a\x92\x41\x0b\x6c\x9c\xb2\x2b\x99\x6e\x59\x4b\xa9\x73\xef\xba\x39\x5e\x70\x76\xfd\xd3\x12\xce\x08\xc4\x5a\x04\x5e\xfe\xd0\x53\x8a\x14\xf8\x05\x47\xab\x25\x36\xd4\x02\x22\x07\x44\x33\xed\x30\x88\x43\x1f\x56\x4f\x79\x51\x60\x5b\x4d\x15\x6d\x5a\x62\xa7\xc0\x0e\xd9\x2b\x31\xc4\x25\x52\xf8\x85\x30\x80\xa0\xb4\x9c\xe0\x92\x10\xe5\x78\x22\x91\xbc\x83\x10\x93\x8c\xc9\xa0\x6a\xd1\xa8\xce\x31\xc4\x4f\xb1\xd5\x54\xb7\x07\xf3\x67\xa5\x57\xbe\xec\x2b\x61\xf4\x40\x32\xe8\x78\x18\x1a\xb2\x6f\xd7\x76\xce\xd0\x1c\xc0\xce\x08\xa8\x49\x86\xed\x7b\xe7\x0d\x9a\x1e\x5a\xa4\xd3\x2f\xf8\x58\x98\xc1\xeb\x68\xa4\x06\x04\x51\x27\x82\x2e\x2e\xd3\x31\xe0\x08\xad\xac\xc0\xc8\xe6\x4e\xcb\xdc\x99\xdc\x02\x90\xe1\x83\x70\x32\x2f\x9a\x69\xf1\x9d\xce\xb5\x9e\xa4\x15\xc9\x62\x4c\x8a\x30\x30\xdb\x11\xac\xfb\xb5\xb3\xae\xa0\x38\xe7\xb9\x6d\x08\x6c\x20\x72\xd1\xde\xf4\x33\x05\xe4\x03\x8e\xe6\x18\x29\x0a\x91\x54\xec\x11\xb3\x73\x6d\x49\x77\x7a\xc5\x93\xbb\xc8\x0c\x26\x0d\x5b\x6d\x76\xf4\x26\x22\x3a\xca\x3a\x7a\x23\xe6\xe8\x9d\xe0\xf6\xb8\xae\x9b\x42\x38\x6c\x6d\x04\x0e\xef\x85\x94\x94\xc6\xb9\xa3\xc3\x31\xe7\x80\x59\xaf\x72\x0f\xe2\xc3\xcb\x24\xcc\x49\x17\xe1\x12\x70\xb9\x5c\x73\x5d\x22\xe6\xde\x1d\x2b\x33\xd5\x66\xc2\x87\x5e\x8c\x4b\x75\x4b\x70\x5c\x98\x9c\xc8\x04\x03\xd2\x58\x0e\xc3\x61\xd4\xb4\xe8\xcf\x0a\xa4\xb1\x1d\x68\xe4\x48\x72\xbc\xb8\x2e\x2a\x97\xed\xbc\x08\x9d\x8d\x1f\x61\x39\xd9\x58\xfd\x81\xe3\x30\x46\x85\x8d\x5b\xa7\xb6\xf7\xe9\x63\xf1\x82\x12\x6d\xb7\x44\x27\xb1\x44\x5b\x06\x25\x19\x2c\x1d\x94\xc2\xa8\x64\x59\x4e\xe9\x94\x17\x97\x06\x5e\x1c\x33\xaa\xac\xd6\x51\x62\x2b\x7b\x9f\x7c\x9b\x0e\x16\xc5\x06\xc8\x21\x48\xb8\x0a\xa3\x08\x75\x08\xef\x23\x5f\x24\xc9\xbf\x09\x76\x77\xf1\x43\xb4\xa3\xb2\xbf\x82\xef\x84\xf4\x69\x58\xf1\x50\xac\x31\x54\x37\xc9\x30\x65\xb8\x6e\xa6\x01\x49\x7d\x67\x23\xaa\x6f\x63\x91\x98\xf4\x03\xdd\xfc\x1c\xb3\xed\xb9\x5b\x56\x7f\xa4\xdd\xdb\x8a\x0a\x64\x64\x7b\xce\x70\x98\x69\x6a\x1c\x7b\x3f\x1c\x5a\x4d\x16\x67\xbf\x74\x40\x0c\xb9\x65\xb9\xae\x30\xab\x96\xf1\xe4\xe5\x3b\xc3\x2c\x66\x79\x2a\x18\xe4\xb4\x69\x4a\xfb\xe4\x00\x99\x8e\x93\x8e\x07\x84\xeb\x29\x64\xa2\x6d\xe5\x2d\xe9\x2c\xbf\x83\xba\x36\xac\xf6\x3c\x46\xf4\x52\xc1\x46\x6e\x34\x67\x66\x6c\xc8\xf6\x2d\xe0\x01\xaf\x3a\x54\xb7\x45\x94\xe5\xa6\xb0\xf6\xc6\xab\x3c\x07\x09\xb7\x34\x1a\xb5\xf8\xcb\xd5\x5e\x7e\x0b\x0d\xbc\x15\x58\xc1\x08\xfb\x50\xca\x8c\x69\xd2\x94\xbb\x48\xde\x69\x63\xf3\x49\x4c\x6b\x82\xca\x93\xd1\xdb\xba\x8e\xe6\xf2\x9e\x6a\xd7\x9f\x09\xa9\x43\x06\x70\x82\xb4\xfa\x14\x8a\x0b\x23\xeb\xf4\xa0\xd7\x79\xdc\xc3\x5e\xd1\x77\x14\x20\x9c\x8b\x66\xc2\x44\x1f\x3b\x2f\xe6\x68\x4d\x5a\x0e\x93\x26\xd7\x91\x08\x9a\xb3\x92\xa0\x0e\x61\xd3\xc5\x4b\xea\xa6\xe0\x37\xd2\xe4\x75\x42\xdd\x32\x62\x0c\xf7\x21\x58\x1f\x81\x48\xd2\x03\x54\x45\x1d\xd7\xd0\x26\x40\x55\xba\x0e\x2e\xe4\xcf\xb4\x10\xae\x82\xf5\x52\x3e\x9f\x1d\x25\x41\x35\x6e\xf7\x20\x99\xfc\xa3\x41\x1b\xda\x16\xf5\x08\x17\x2f\x68\x67\xbb\x25\x26\xd0\x72\x00\x06\x81\x03\x2c\xcb\x18\x05\x26\x23\xbf\x14\x8c\x29\x32\x75\x7a\x06\x56\x23\xd8\x0f\x57\x09\x8b\x30\x93\x99\x1b\x55\x0e\xf2\xc3\xf0\x64\x32\xb0\xad\x28\x4c\x30\x8c\x1a\x7d\x0f\x05\x74\x9a\xec\xa0\xba\xc4\xd2\x8e\xa0\x76\x14\xfa\x68\x79\x38\x0c\xaa\x2c\x85\x08\x3d\x4e\xd5\x6b\x63\xb4\x0a\x4f\x44\x5e\x10\x23\xcc\x2c\x14\x8a\x87\x39\x83\x16\x11\xa1\x4c\x7d\x14\xc3\x2a\x17\xe8\x55\x49\x2d\x4c\x5f\xe1\x86\x1d\x61\x95\x38\x61\x52\x43\x80\x09\xfb\xe9\x34\xb6\x92\x7b\xa4\x89\xf6\xe3\xb6\xb4\x14\xa1\xd3\xb4\xc2\x07\xac\xdb\xe1\x60\xe7\xde\xa9\x36\x6c\xda\x8c\x70\xbd\x3e\xcd\x86\x53\xa8\x4a\x78\x12\x06\xb1\xc0\xca\x03\xb6\x93\xcf\xc2\x68\xad\x05\x6a\xe2\xb6\x93\x21\xd3\xa1\xd3\x28\xc6\x28\x58\xa1\xe8\x77\xc2\x5b\xb1\x69\xf4\x22\xda\xcd\xe3\x70\xe0\xd1\xc3\xaa\x61\x95\x86\x25\x4b\x24\x3f\x13\xd1\x07\x87\x1b\xb3\x35\x91\x72\x0c\x0e\x7c\xaf\xcd\x85\x7d\xd6\x15\x06\x53\x12\x7d\x82\x24\x3c\xce\x72\xc6\x06\x99\x30\x17\xcb\x2a\xd3\xba\xa5\xf1\xd7\x7a\x26\xde\x17\x2a\x14\x14\x64\xe1\x9d\xb3\x9c\x19\xc6\x06\x92\xe3\x80\xd7\x4c\x18\xef\xf4\x97\x4b\x8e\x1e\x9e\x65\xc0\xea\x2d\x97\x49\xc2\xac\xcb\x72\xf2\x44\x37\x4a\xf3\x45\xac\x72\x91\x2f\xa0\xf9\x78\xa2\x1b\x10\x41\x2a\xe8\xc1\x08\xe1\x27\xa2\xb0\xff\x4c\x04\x57\x51\x98\x98\xa6\x80\xd6\x4d\x3f\xce\xe0\x72\xd9\x9e\xd8\xd1\x14\x36\x74\x59\xe9\x29\x16\x90\xe3\x8c\x00\x21\x6f\x06\x09\x99\x49\x83\x74\xd1\xc8\x36\xee\x3c\xb6\x66\x5b\x88\x88\x81\x55\xd4\xa1\x9e\x01\x92\x12\xab\x39\xc5\xab\x5a\xf4\x71\x17\x7a\x89\x4a\x36\x8c\x63\x2b\x79\x08\x7f\x16\xa5\x03\x93\xa7\xb1\x48\x71\x43\x00\xa9\xe6\xd1\x8d\xe8\x1f\xc0\x23\x69\xe5\x26\xcc\x16\x32\x6b\x1e\x9d\xc8\x27\x44\xdf\x18\x6b\x43\x3b\x00\x75\x22\xde\xd2\xcd\x35\x69\x83\x20\xc7\x19\xb1\x2b\x7d\x75\x54\xec\xd6\xb6\xc2\x34\xdb\x9e\x98\x4a\xd6\x5b\x0f\x78\xac\xb7\x70\x5c\x47\xc7\xf5\x94\x9b\x6d\x15\xcc\xd6\x8c\xb0\xc6\x9e\xbc\xbb\xe3\x31\xdb\x3b\xbb\x0b\x78\xba\x33\x57\x77\x46\x80\x6d\xf9\xad\x20\x01\x93\xb6\xe9\xf2\x20\x75\x35\x09\xa6\x07\xe9\xe4\x20\x2a\x59\xdb\x88\xcd\x50\xe0\x80\x34\x2b\x2f\xee\x12\x3c\xd5\x6c\xee\x0f\xd8\x05\x33\xe1\xcc\x84\xfc\xa4\xe3\x1c\x72\x34\x79\x4a\xc2\x3b\x98\x92\x0a\x99\x92\x55\x14\xa3\x65\x1f\x9e\x60\x54\x2b\xab\xe1\x13\xcd\x64\xd9\xdd\x54\xc4\xc9\x56\xce\x4b\x38\x00\xbb\x70\x51\x48\x0a\x0d\x22\x4c\x34\x5b\xfb\x70\xa5\xb2\x4f\xec\x26\x2a\x33\x10\xe1\x54\xd0\x0b\x67\x3d\xaa\x26\x01\x0b\xc4\x13\x38\x33\xcb\x11\xf4\x4e\x8e\xd4\xa4\x54\x41\x3e\x72\x40\x1c\x46\x18\x76\x0a\xba\xad\x0d\x2a\xdf\x7b\x73\xcf\xf5\x42\x84\xe8\xce\xd6\xe8\x73\x7c\x92\xc5\x3a\x40\xed\x9f\xd2\x9d\x6c\x7a\x81\x8f\x0a\x02\x82\xea\xac\x47\x34\x5e\xee\x6c\x9d\xd7\xc3\x30\x3c\x70\x84\xf3\x45\x40\xf6\x59\x58\x2e\xdb\x36\x54\xb7\x05\x74\x1c\x85\xda\x85\x1a\xb5\x93\xf3\x01\x1d\xf6\x98\x60\x34\x1c\xda\x4a\x57\x65\x13\x40\x79\xec\x0f\xa0\x6a\x04\x3b\x49\x1b\x66\x2c\x3c\xe4\x48\xb8\x58\x83\x1d\xf9\xec\xbf\x60\xcf\xa7\x5b\x75\x75\x35\xe8\xda\x37\x5b\x20\x72\x6b\xf4\x91\x70\x2e\x2c\x46\xfb\x83\x7d\xd1\xdc\x9c\x7c\xb8\xbf\x19\xb5\x66\x38\x1b\x5a\x2e\xdb\x98\x73\x9f\x2c\xc1\x01\xd1\x5c\x7d\x7f\x50\x2e\xcb\xe4\x74\x0a\xd2\x47\xeb\x25\xef\x3a\x02\x05\x87\x79\x46\x42\x9b\x65\x07\x7f\xcf\x8b\x9f\xf0\x62\xbc\x1c\x86\xd8\x76\x9c\x74\x50\x9d\xb0\x4d\xc5\x2c\x32\xae\x43\x3e\xa4\x12\xd7\x63\x6b\x27\xbc\x95\xa7\xbd\x3e\xb4\xb9\xe4\x42\x06\x57\xcb\x0a\xc1\x9c\x8a\x30\x31\xb8\x3a\xf0\x22\x18\xe0\xa7\xc3\x8e\x60\x58\x0f\xf6\x90\xdf\xb1\x23\x67\x34\x02\x6a\xe3\x79\x7d\xf9\xec\xec\x58\x8e\x96\xf3\x6f\x8d\x2e\xaf\xc0\x9a\xcc\xfc\x85\xa7\x60\x54\x89\xa1\x0f\xdb\x2c\x38\x6c\x18\x90\x51\xcd\xab\xe9\x95\x7e\xe2\x63\x34\xc8\xc6\xb7\x7f\x94\xd5\xd0\x81\xed\x90\x4e\x7c\x9c\x96\x97\x4c\xa2\x56\x3d\x11\xa3\x7d\x0f\xc3\x78\x8a\x86\x4c\xe5\x99\x62\x4f\x3e\xeb\xd6\xf5\x7c\x7f\xd9\x6b\x9f\xac\xa0\x6e\x25\x7d\x6d\x2f\xff\x44\x6f\x86\x2b\xa5\xd8\x95\x3e\x57\x0e\xda\xa0\x0b\x7a\xa0\x03\x06\xa0\x9f\x4a\xa6\xab\xa9\x1a\xcf\x5e\xfd\xf8\xbc\xad\x47\x28\xc7\x48\x0e\x72\x2d\x9d\xa1\xa8\x5c\x2e\xe2\xd6\xb1\xf6\xf0\x63\x54\x4d\x7f\x00\x76\x89\x94\x88\x2f\xea\x4f\x20\x5e\x77\x6c\x44\x55\x01\x02\xc6\xea\x13\xe1\x19\x61\xe4\xf9\xe8\x05\x18\x2d\x6a\xbf\x98\xd6\x26\x70\x1a\x8c\xff\x1f\x29\x9d\x5d\x61\x04\x29\x7d\x4e\xaf\xb6\x2f\xda\x8f\x25\xed\x10\x7b\x2c\x70\x31\xa1\x1b\x81\xd2\x4d\x57\xfd\x31\x1c\x12\x5a\xab\x75\x95\x90\x46\x8b\x3d\x01\x8d\xd8\x9b\x8e\x81\xec\xb2\x3b\x5b\x2b\x7e\x1a\x33\xa8\x9e\x84\x6b\x20\x70\x46\x69\x2f\x97\x15\xbc\x59\x16\xda\x29\x76\x45\xc2\x16\xe5\x68\x77\x91\xa7\xae\x68\xa9\x46\x54\xa8\x2e\x2d\xd1\xd5\x5c\x5a\x1a\x0e\x8d\xa5\x28\xed\xd6\xd6\x74\x89\x1f\x31\xd2\xf2\x13\x2a\x1a\xe6\x63\xb0\x0b\x23\x18\xb4\x85\x86\x8b\x10\x8f\x52\xcf\x8b\x83\xfb\x70\x69\x19\xc2\xa0\x24\x96\x22\x86\x9d\x52\xa5\xc4\x65\x29\x2d\x07\x59\x20\xd8\x49\x0d\xaa\x60\xda\xf4\x29\xf5\xc8\xb0\x4f\x99\x47\xaf\xaa\xfd\xb4\x03\x46\x0e\xd5\xc5\x80\x22\x2a\xc0\xca\xb0\x0e\xa9\xef\x6d\xb3\xa3\x31\xbd\xa5\xe4\x0d\x9d\x84\x6b\xb1\x1d\x38\xc6\x43\x37\x6c\xc2\x96\x1b\x34\x61\x6b\xe4\x80\x50\xc5\x8d\xd9\x59\xf5\x27\x08\x33\x98\x31\xab\x27\x00\x3b\x45\x94\x70\x38\x0c\x55\xdc\x75\xca\x65\x3b\xd4\x11\x87\xb0\xf7\x8c\x63\x76\xaa\x11\x5c\x85\x51\xcc\x20\xfd\xa0\x65\x1b\x90\x5f\xcd\x70\x83\x8b\xe1\x30\x1a\x81\x90\xf2\x8c\xf2\x32\x4e\x6b\x8d\x36\x46\xfb\xa2\xa7\x2f\x86\xf9\xfd\x84\xc4\x7e\x02\xda\x47\x2e\x64\x3b\xa9\x95\x70\xb6\x85\x62\x92\x10\x92\xc1\x11\x86\xd5\x01\xe1\x5d\x52\xce\x9d\x76\xc5\xa3\x15\x98\x1d\xa8\x0e\xd5\x3a\x85\x2c\xcd\xf7\xd6\xc2\x04\xab\x4f\x79\x03\x8f\x7c\x09\x52\xdb\x54\xcb\x78\x94\xcc\xf3\x7b\x3c\x6a\x82\xac\x17\x60\xfd\x4f\xdc\x1c\x4f\xcb\x4a\x1c\xf4\xbd\x98\xf0\x2a\x7e\x3e\x83\xb7\xcc\x6f\x0d\xac\x18\x7a\x51\xbb\x77\x28\x20\x6b\xde\xb1\x80\x2c\x2b\x4f\x42\x07\xb4\x33\xcd\xea\x1b\x20\x25\x68\x36\xd9\x2b\x3e\xbd\xcc\x19\x0e\x9b\x2d\x47\xbc\xe7\x4c\x24\x8c\x4a\x5d\x3c\x11\x2a\x28\x1e\x9a\x9b\x73\x50\xd7\x96\xbe\xac\x5f\x4e\x3c\xdf\x8e\x9a\xa8\x05\xa0\xe3\xac\x07\x2e\x12\xfc\x31\x47\xac\x47\x2a\xf5\xc5\x48\x11\x04\x9d\x46\x24\xc5\x29\xc2\x16\x20\xbb\xeb\x86\xb6\xdd\x71\x0f\xd9\x76\x4f\xbb\xcd\x52\xd4\xb5\x9c\x33\x66\x1b\x71\x9f\x9d\xb3\xdf\x99\xb5\x53\x7d\x78\xd8\x2d\x61\xc7\x7c\xbd\x75\xd0\x0b\x82\x10\x53\x5a\x52\xf2\x4a\xd4\xea\xa0\xe4\xc5\x25\x4f\xde\x98\x59\x84\xac\x51\xc6\x11\xa7\x7a\xf1\x30\xaf\x17\xf7\x14\xbd\x78\x48\x16\xb8\xb6\x2f\xde\x1f\xee\x8b\xe7\xe6\x1c\xaf\x19\xab\x7a\xf1\x58\xea\xc5\x99\x98\x0e\xd6\x08\x4f\x4c\x30\x0e\xba\xcb\x36\x76\x68\x6c\x14\x9f\xab\xcc\x21\x68\x92\x3c\xf2\x26\xc5\x73\x1c\x67\x38\x14\x2f\xfd\xce\xba\xee\xaa\x8d\x1c\xf5\x9c\x96\x6f\x8b\xa3\xc5\x25\x72\x7c\x21\x03\x22\x80\x0e\x58\xa2\x77\x97\x6b\x76\x04\x2c\x16\x08\x91\xdf\x8c\x2b\x99\x06\x5a\xa6\x04\xf9\x9d\xe3\x14\x27\x68\x50\x86\x3e\xff\x18\x8d\xa4\xe5\xf5\x4c\x91\x29\x95\xa1\x73\x58\x68\x61\x5c\x6c\x5e\x97\xe3\x84\xe0\x97\xe0\xe9\x41\x04\xe3\x98\xac\x38\x0d\x61\x01\x11\xee\xc1\xa8\xb4\x0c\x4b\xa4\x74\x29\x8c\xb4\x85\x9a\x81\x29\xc7\x91\x8d\x72\x43\xd9\x73\xf1\x11\xac\x2b\xac\x4b\x83\x93\x03\x85\x4f\x98\xad\xe9\xfc\xc4\x6c\x8d\x4a\x19\xe5\x32\x3b\x57\x46\x36\xe6\x72\xaa\x9c\x2d\x22\x81\x61\x60\x07\x6e\x73\xfd\x24\x5c\x6b\x58\x3d\x2f\xe8\xf8\xf0\xe8\x00\x06\x16\x67\x35\x72\xb3\x42\xf9\xfb\x30\x20\x79\xca\xe5\xd9\xba\xeb\xba\x4a\x0a\xcd\xc5\x6f\x66\x66\xeb\xcc\xa0\xa2\x1b\xb6\x93\xf8\x70\x30\x48\xa8\x3c\x35\x02\x6a\x4b\x4f\x90\x6f\xe6\xa6\x78\xad\x34\x47\xb9\xac\xfe\xa2\xdf\xc1\xc4\xba\x3f\x03\xd7\x3a\xe1\xa9\x82\x81\xa8\xd6\x55\x61\xc0\xb3\xea\xe3\xe1\x89\x34\xff\x22\xa1\x2c\x38\x1c\x10\xd2\xec\xad\xb0\x47\x82\x1c\x30\x5b\x77\x1a\xf5\x3d\xf4\x2a\xfa\x24\x5c\x3b\x18\x76\x68\x70\x0b\x14\x93\x99\x30\x97\x48\xdf\x8e\xaf\xf6\xd0\x4a\xcf\x47\x2b\x3d\x0c\x3b\x8b\x50\x92\xad\x72\x99\x3e\x93\x9f\x26\xa4\x6f\xcb\xab\x25\x9c\x45\x1b\x52\x55\x7a\x18\xc4\xd5\xb6\x1f\xc6\xd0\xc6\xac\x3f\x6a\x7a\x2f\x24\x1f\xb4\x82\xc0\x90\x4d\x29\x2e\xd9\x46\x31\x95\xe9\x04\xe7\xe7\x91\x09\xe2\x42\xbf\x28\x25\xbb\x2f\x27\x30\x5a\x63\x5b\x8e\xec\x88\xff\x27\x2f\x86\x54\xf8\xce\x96\x27\x4c\x05\x91\x16\x2a\x96\x8c\x59\x5c\x4d\x02\xf4\xe5\x04\x1e\xee\x38\xce\x0c\xdd\x03\xb4\x1f\xb6\x33\x92\x1d\x63\x39\x61\xe0\x11\x99\x58\x3d\x6d\xb2\xaf\xaa\x33\xb9\xb3\x69\x90\x86\xd2\xe6\xc5\x01\xa7\x5b\xdd\xa9\x87\x18\x59\x58\x4a\xeb\x73\x5f\xc8\x59\xcc\x84\xe4\x92\x95\xa2\xa0\x58\xbe\x5c\x77\x58\x03\xcd\x56\xd6\x34\x2b\xe5\x5f\x98\xae\x75\xb1\xd9\x6a\x40\x65\xb4\xec\xe0\x3c\xe1\x2d\x1f\x66\xc7\xa6\xb1\xda\x09\xe7\xb7\xc0\xed\x2c\x61\xe5\xdb\x4b\x3b\x88\x17\xad\x4a\xdd\x6a\xb0\xec\xfc\xac\x1e\x0e\xad\x9a\x35\x1a\xb5\x9c\x72\x79\xc5\x8e\x14\xb2\x14\x50\x2e\x6b\xc5\x8e\x00\x72\x00\xa6\x77\xb8\xe9\x47\x03\x19\x6f\x7a\x2d\x4a\xca\x54\x4a\x05\xf4\xa7\xf1\x55\x9a\xa6\x70\x54\x54\xe5\x3f\x72\xc0\xc0\x3d\x64\xf7\xd4\x46\x8a\x0e\x83\x66\xbc\xdd\xa6\x32\x0d\x15\xe3\x5d\x33\x69\x81\x54\xc4\x38\x7a\x2a\x10\x7c\xdc\xe3\x30\x6e\x47\x68\x40\x76\xc3\x74\x55\x39\x40\xc9\x97\xeb\x41\x8a\x5a\x4d\x9d\xab\xda\x62\xf3\xb2\x9e\xf1\xcd\xe5\x51\xaf\xe9\x6f\x79\xa0\x99\x2a\xc6\xb7\xa8\x1e\x42\x7c\x88\x4b\x8c\x58\x6d\xb1\x5d\xa5\xa2\x69\x5a\xe4\x87\xd1\x5d\x68\x92\xd5\x34\x4d\x9b\xf2\x90\xba\x0b\xad\x8a\xba\x32\xed\xf6\x73\x7b\x25\xc3\x13\x35\xdb\xdb\xdd\x23\x5d\xb7\x47\xd8\xbb\x2e\xfd\x5f\x51\x96\x9d\xde\x9e\xb2\x4c\x12\xae\x0f\x4a\x69\x26\x1b\x9c\x60\xbe\x4f\xd5\x24\x40\x51\x81\xa5\x6a\xaf\xb6\xa2\xbe\x68\x7f\x5c\xd5\x5e\xdd\x8f\x84\x26\xa9\xa7\x2c\x45\xef\x5e\x68\x92\x3a\xf7\x4e\x93\x34\xd0\x34\x49\x83\xbb\xaa\x49\xea\xef\x6a\x92\x3e\xee\x9a\xa4\x55\xf7\x14\x0a\x3a\xe1\xa9\x72\x99\xfd\xad\x06\xde\x2a\x5a\xa1\x64\x29\x9b\x50\x4d\x62\x18\x1d\x58\x81\x01\x6e\x58\x16\x58\x73\x57\xa5\xc4\x62\x1d\x39\x7e\xf8\x50\xc9\x72\x1e\xa9\xd4\x87\x43\x25\xf9\x44\x84\x3a\x30\xc0\xf3\xf4\x0b\x58\x71\xed\xc0\xa0\xb4\x42\x85\x4a\xab\x30\xa7\x4c\x62\x54\xbc\xba\xce\x18\xd8\x13\xf0\xb4\x20\x45\x40\x4a\x51\xec\xf7\x88\xc6\x5c\xcb\x16\xa7\x37\xa3\xbd\xd0\xa7\x06\x3f\xa2\xb2\x4c\x49\xcb\x01\x81\x1d\xbb\xc8\xb6\x7d\xb7\x6f\xdb\xc9\x54\xea\x1d\x71\x3e\x7c\xd0\x6a\x9e\x6e\x5e\xcd\x33\x50\xd4\x3c\x5d\xc2\x13\xd4\xf6\xf5\xf7\x77\xf7\xf5\xe7\xe6\x9c\x41\xb3\xaf\xaa\x79\xfa\x59\x35\x8f\x54\xf2\xf4\x26\x29\x79\x06\x59\x25\x4f\xbb\x58\xc9\xd3\x61\x4a\x9e\xd0\x8d\x80\xe7\x5a\x18\x9e\xc6\x47\xa0\x17\x27\x11\x59\x83\xd8\xf5\x41\xe2\x76\xec\xc8\x01\x71\xd1\xad\x0a\x99\x5a\xf5\x56\x25\x2e\xbc\x55\x89\x0b\x6e\x55\xe2\xec\xad\x4a\xac\xed\xdd\x38\xbf\x77\x93\xf4\x56\x05\x44\xd5\x25\xdf\x8b\xf1\x61\x2a\xec\xbb\xb3\xf5\x4f\x98\x46\x69\x30\xad\x46\xa9\x83\x3a\xc7\x60\x1b\xa2\x55\x78\x00\xe3\x28\xaf\xeb\x91\x7e\x10\x54\xe9\x22\xf8\x52\xea\x41\xc5\x85\x52\x6c\x5b\x32\xdd\x02\x3c\x91\xfc\x20\xb4\x8b\x29\x5b\xca\xe5\x59\x25\x5d\x26\x16\x5a\xf8\x31\xcd\x87\x05\x98\x31\x99\x52\x52\xe8\x44\x18\x25\x01\x96\x2a\xd1\xe3\x30\x82\x54\x13\x72\x1c\xaf\xf9\xd0\xa0\xb5\x12\x9a\x10\x4e\x21\x57\x20\x3e\xc8\x69\x0c\x2d\x41\xd5\xc4\x2e\xae\x76\xc3\x80\x55\x41\xfd\xf3\xc9\xaf\xcf\x79\x11\xf2\x02\xcc\x22\xf1\x86\x01\x7e\x0e\xa2\x95\x1e\x0b\xc7\x4b\x33\xa3\x17\x58\xf4\x26\x1f\x05\xf0\x49\xf6\x2d\xe6\xdf\x9e\xf0\xfa\xc8\x5f\x9b\xe1\xd6\x42\x83\x04\x3f\x11\x06\xd8\xb5\xa4\x26\x25\x02\x56\xc9\x92\x26\xd5\x81\xf6\x0b\x69\xbf\x42\x60\xcd\xa7\xbf\x3c\xed\x5b\x9c\x4e\x03\x53\x2a\x31\x41\xbb\x78\x0a\x60\x15\x7b\xd1\x0a\xa4\x2c\x12\x59\x77\xb4\x9c\x60\x68\x5b\x1d\x0f\x7b\x15\x41\x59\x2b\xec\x02\x80\xda\x7f\x61\x67\x1d\x1a\xd4\x65\xcc\x34\x0a\x06\x98\x5b\x38\xd9\x22\xb8\xb8\xb2\x66\xb0\xc3\x2d\x78\xd4\x75\x14\x9f\x98\x8f\x67\x7e\x7d\xb9\x6a\x2c\x52\x14\x4a\x4c\x86\x2a\x54\x75\x71\xa5\x20\xfd\xae\xeb\x09\x85\xfa\x71\x38\x34\xb5\x14\x52\xad\xe8\xd4\xba\x49\x55\xc5\x3a\x5e\x2b\xa9\x18\xc0\x9b\x34\x93\x64\x56\x1f\x22\x2c\xa7\x50\x4d\x72\xb3\x99\x7c\x5e\xdd\x13\x45\xae\x1c\x73\xcb\x15\x0b\x6a\x9a\xdc\xa6\x29\x91\x1f\x38\x95\x7a\x8b\x9a\x19\x9a\x37\x97\x2f\xd7\x4b\x97\x45\x6d\x9c\xd9\xdf\x0e\x48\x43\x82\x09\x82\xb9\x58\xbc\x61\x6d\xec\x34\xc6\x7c\x55\x2c\x6a\x80\xa2\xf1\x7a\x02\x41\xbf\x23\xac\xea\xcc\xcb\xe7\x8c\xa8\x21\x90\x2d\x67\xf3\x11\x77\xef\x43\x44\xa8\xe2\x3f\xf7\xbb\x0f\xd7\x86\xc3\x3d\x0b\xda\x84\x93\xef\xb9\xe9\xce\x69\x08\x19\xf6\x8e\xd5\x52\xc3\x2a\x3b\x52\x0f\xe0\xc5\x14\x24\x63\x55\x9d\x4b\x71\x5a\x35\x97\x62\x8f\x70\xa9\x36\x25\x5a\x39\xb5\xa1\xbc\xfe\x1a\x43\x24\x4d\xd3\x12\xc1\x41\xc8\xec\xb7\xf5\x69\x4b\xd5\xd8\x84\x49\xd6\x2d\x98\x72\x7b\x53\x1a\xc9\x89\x33\xa0\xa6\xa9\x5f\x25\x39\xa3\xbe\x6b\x4c\x13\xa9\xb0\x09\xd5\x53\xa8\x83\x7b\x99\x9a\x05\xff\x07\xf4\x1a\xa4\xe1\x1e\xf7\x6c\xe9\xe1\xbe\x7f\xdc\xeb\x42\xdb\xa2\x95\x34\x4a\xa9\xe6\x79\x6e\xe1\x7e\x60\x0d\x4e\x5b\xa9\x0d\xd4\xf8\x92\xf5\x5a\xed\xff\xdd\xa7\x1c\x13\x7d\x6f\x6d\x19\x3e\xa3\x72\x94\xf9\x29\x9f\x5d\x73\xd4\x81\x6e\x6b\xee\x16\x2d\xae\xa5\x55\xb8\xd8\xe1\xd0\xe2\x7a\xda\xae\x41\x4f\xdb\x2d\xd2\xd3\x6a\x3c\x58\xd3\xe4\xa4\xb1\x5d\x3d\x51\xdf\x4e\x0c\x9a\x61\x13\x9e\x36\xc3\xc9\x2a\xb0\x29\xeb\xa2\x61\x87\x15\x75\x98\x5e\x2e\xbf\x5e\x4d\x6f\x8b\x4d\xe7\xaa\x18\xdf\x62\x9e\x91\xd8\xaa\xee\x6f\x7c\x75\xe3\x5b\xd7\xcf\xef\x6d\xb5\xac\x55\x35\xbe\x55\xed\x70\xdd\x56\xa3\x6a\x4d\xd3\xb4\x79\xc7\x0a\xd6\x31\x75\x65\xda\x8d\xdd\x84\xc8\x3d\x31\xfd\x5f\xd1\x7e\xae\xdc\x91\xf6\x73\xa7\x95\x9d\xdb\x30\x0c\x9c\xa6\x64\xc8\xae\x60\x2a\x7d\x0f\xb7\x7b\x54\xa0\x2e\x2c\xb3\x12\x85\xc9\xa0\x42\x61\xc5\x25\x26\x68\x27\x51\x04\x83\x76\xd6\x33\x26\x15\xa9\x0d\xca\xd8\x9c\x1d\x22\x58\x05\x6b\x60\x05\x2c\x83\x25\x70\x0a\x1c\x02\xa7\xc1\x71\x70\x14\x1c\x00\x27\xc1\x09\x70\x04\x1c\x04\xc7\xc0\x33\xe0\x4b\xe0\x71\xf0\x34\x38\x0c\x9e\x02\x4f\x80\x17\xc0\x93\xe0\x31\xf0\x2c\x78\x0e\x7c\x19\x7c\x0e\x7c\x01\x7c\x1a\x7c\x06\x7c\x0a\x7c\x16\x7c\x1e\x7c\x11\xfc\x17\x80\x10\x60\x08\x22\x08\x02\x08\x10\x04\x21\x04\x1e\x04\x31\x04\x09\x04\x44\xd8\x84\xa9\xf6\xb7\x0b\x15\x9d\x63\x17\x7e\x5c\xf5\xbf\x3d\xf8\x51\xb2\x7b\xec\xc0\x8f\x84\xba\x7a\x00\xef\x9d\xba\xb8\x0f\xc5\x3d\x07\xc7\xdd\x3e\x74\xad\x74\xe3\x4b\x6d\xc5\x31\xd8\x25\x1b\xb8\x5c\xe6\x00\x21\x9f\x8b\x0a\xdc\xc8\x5e\x9b\x64\xe2\x16\xc9\x75\xd8\x37\x9b\xf3\x3b\xee\x79\xb1\x42\x89\xb9\xf7\x31\xc0\x8e\x54\x90\xd8\xd0\x5d\x25\x73\xe4\xec\x73\xf6\xc9\x21\xb0\x38\x3e\xa8\x6b\x07\xc2\xea\x7d\x12\x61\x0f\x48\x01\xe9\xbc\x49\x06\x40\xff\x65\x0d\x46\x4e\x03\x31\xd1\x67\xc4\xf4\xde\x20\x1a\x0e\x55\xd4\x5f\x55\x77\xf8\x2a\xbc\x17\xd7\x0a\x6b\x50\x53\xee\xaf\x15\x74\xe2\x0e\xb5\xfb\x2b\x70\x57\xbd\xff\xe1\x55\xef\xa7\x66\xd2\x50\x37\x64\x4a\x0d\x54\x74\x83\x94\xd4\xac\x19\x6a\x68\x87\x43\xaa\x0c\x5e\x94\x90\xed\x34\xe0\x5d\xba\x3d\x38\x05\xdd\x75\xce\x07\x34\x9a\x2d\x10\xc1\x98\xba\x65\xa6\xe0\xc1\x30\x09\x70\xa3\x26\xd5\xf3\x62\xce\x14\x43\x25\x91\x94\xca\x74\x0d\xcb\x02\xbe\x17\xe3\xe3\x34\x05\x76\x64\x5a\xe8\x75\x50\xb0\xd2\x98\xad\x03\x14\x1f\xa0\xee\xc5\x04\x5e\x82\xa7\x07\x88\x62\xd2\x71\xad\x8a\xa5\x08\x0e\xa0\x87\x51\xb0\x72\xb0\xe7\x45\x0d\xcb\x1a\x81\x43\xd0\xb5\x63\xc3\x1d\x44\x52\x78\x07\xe1\x67\x0c\x52\x09\x06\x66\x8d\x54\x67\xeb\x0e\xe8\x66\xd2\x42\x01\x1e\x61\xec\x91\x03\x7a\x59\x13\xdc\xa7\xd8\x70\x4a\x7c\x02\xab\xd5\xaa\xe5\x80\x4e\x36\xd7\xd3\x61\x89\xcf\x65\xa9\x1b\x26\xd4\x3b\x75\x90\xcd\x73\x62\x6d\x00\x59\x40\x26\x32\x7e\xcb\x01\x7d\x43\xaf\x57\x8b\x7a\xf8\xa4\x62\x6d\x06\xd6\x8a\x72\x91\x36\x0e\xf4\xa0\xd7\x91\x03\x5a\x31\x34\xb2\x6c\x34\x1b\x5e\x1a\x67\x7d\x3c\xcf\x2c\x7a\x04\x3f\x69\x39\xe0\xd4\xd8\xec\x69\xbe\x43\x63\xf3\x69\xf7\xfe\x94\x03\xb5\x1c\x70\x7a\x6c\x91\xd4\xfc\xf9\xf8\xd8\x7c\x6c\x9e\x2b\x7d\x18\xc7\xde\x0a\x91\x3b\x8f\x8e\xef\x89\x26\x31\x1e\x28\x34\x71\x4e\x37\xed\xc8\x01\x27\xb3\x55\x2e\x27\x18\x53\xf1\xeb\x04\xf9\x82\x94\x2f\x92\x03\xcf\x23\xdd\x91\x6c\x5e\x9c\x59\x46\xa5\x50\x7e\x85\x0f\x8e\x37\xf7\x06\xd6\x20\x59\xf6\x51\xfb\xc0\x33\x87\xab\x62\x43\x5a\x0e\x38\x96\x2b\xd5\x89\xc2\x01\x91\xa7\xc6\x16\x7b\x26\x7f\x5d\x27\xb3\xad\xf3\xad\xaf\x10\x09\x8d\xc2\x8c\xa4\x75\xb9\x04\x8e\xc8\xc5\xf9\x92\xe1\x1a\x91\x67\x55\x5b\xc8\x10\x1c\xad\x7e\x41\x7a\x46\x96\x03\x1e\x27\x53\xea\x55\xb1\x17\x9f\x74\xec\x08\xae\xc0\x80\xb1\xf1\xc7\x92\x00\xa3\x3e\xac\xf6\xbd\xe8\xa4\x5c\xd4\x12\xb4\xd5\xd8\xcf\xdc\x86\x44\xb8\x5e\xe6\x0b\x9f\x8a\xbc\x81\x86\x11\x94\x85\xda\xe7\xc4\xa7\x10\x6e\xf7\xb8\x07\xb1\xcb\x3c\x9d\x9d\xf5\xb6\x17\xc3\x52\xad\x21\xaa\x73\xeb\x80\xfb\x55\xa7\xe3\xd2\x89\x20\xbd\x78\xe0\x5a\x4b\xee\xb8\x8f\xe2\xa7\x93\xfe\xc0\xeb\x7c\x06\xae\xd1\xe8\x7b\x36\xe1\xc3\x6c\x54\x71\xf7\x3e\x44\xe8\x22\xd7\x86\x75\xa3\xb0\x4f\x2a\x20\x05\x6d\xe4\x00\x3b\x76\x13\xa1\xaa\x2e\x6a\x6c\x31\x69\x64\xbf\x1b\x28\xf5\x5c\xe2\xc8\x68\x6a\x8b\x36\x73\x73\xb4\x2c\xa7\x11\xb8\x09\xc8\x14\x17\xb7\x3d\x99\x64\xd5\xbe\x36\x9a\x23\xab\x13\x8a\x2b\x68\xa6\xb2\xe0\x0e\xc1\x69\x09\x4e\x42\xb2\xf5\xab\x66\xb7\x8d\xd9\xe9\x1a\x17\x07\xdb\xf6\x5a\x16\xb5\x38\x0d\x32\x01\xf4\x23\x0b\xf9\x76\x1c\x7b\x18\xda\xeb\xc6\x23\x6e\xaa\xc9\xcd\x9e\x82\xc1\x48\xb1\x4d\xb6\x7d\xb6\x82\x5d\x14\x74\x9e\x43\xb8\x77\xb4\xdb\x15\x0e\xcf\x86\x3e\xc7\x20\x02\xb3\x35\xc7\x11\xca\xfe\xec\xdc\x2c\x66\x93\x85\x0e\x59\xce\xab\xed\x4b\x7b\xee\x7c\xae\xb8\x1d\x85\xbe\x7f\x22\xa4\x99\x9c\xec\xe8\x32\x57\x0a\x34\x8f\xf0\xf8\xaf\xef\x01\x6c\x4b\xa2\x3e\xa4\xe7\x77\x1d\xee\x71\x66\xe8\xe6\xa8\xef\x69\x4c\x39\x9b\x46\x86\x41\xd4\xb2\xb7\x41\xfe\x5a\x30\xe8\x58\x0d\xed\x32\x86\xaa\xf9\xd9\x56\x72\x46\x0e\x61\x43\x63\xec\x45\x94\x59\xb5\x1d\xf0\xf4\x1d\x92\x8a\x1d\x22\x10\x7c\xba\x16\x00\x66\xc3\x5a\x68\x44\xd4\xfe\x3c\xc0\x1a\xca\xc9\x3b\x9a\x88\x0f\xff\x0e\x47\x7f\xf8\xc3\x35\x7a\xac\x9a\x61\x70\x17\x74\xc2\x0e\x3f\x13\x85\xa7\xd7\xf8\xbe\x66\x33\xc0\x8d\x8b\x6d\x2a\xa0\xd1\xf0\x9f\x98\x7a\x27\x39\x86\x9d\x29\x79\x52\xc6\x23\xd3\xf6\x17\x04\x62\xde\x2f\x66\xfa\x7e\xe3\x4c\x8b\x76\xc4\x3c\x3f\xd8\xd0\xc2\x5a\xb8\x0f\x8e\x6b\xaf\x4e\xdb\xeb\xa2\x00\xc5\x3d\xfb\x41\x81\xa8\xb5\x29\x96\x0a\x34\x9b\x0b\x00\x3c\x08\xea\xb5\x56\xcb\xb0\x6c\x4f\x6d\x75\xd9\xa4\xf4\x9f\xda\x43\xdc\x75\xc4\xa5\x1f\x4d\x94\x31\x33\xff\x74\xda\xf7\x82\x48\x20\x6e\x20\xa6\x1d\xb9\x4b\xd0\x0e\x4c\x2b\x28\x84\x16\x04\x96\x22\xef\x14\xa3\x08\xc7\x78\x5a\x90\x97\x43\x74\xc6\xa0\x41\x69\x7e\x9b\x80\x7c\x35\x1d\xd2\x8a\xb6\x4a\x22\x40\x4e\x0c\x55\x56\xdb\x56\xc8\x17\x73\x3f\x93\x4b\xc8\x87\x5b\xaf\x01\x58\xc5\x35\x17\x56\x59\x60\xe4\x9a\x11\xff\xf2\xfd\x53\x1b\x97\x54\x50\x9f\xc9\xfa\x1e\x60\xd0\x20\x12\xc9\x36\x68\x43\xbf\x5c\x16\x90\xad\xe0\x58\x5d\xd2\xd4\x07\xa6\x43\xb2\x1a\xa8\xd7\x40\x7d\x0f\xa8\x3f\x60\xc4\xb3\xd8\x7e\xc2\x4d\x6c\xfb\x49\x77\x05\xda\xf6\x0b\x9f\x00\x2f\xba\x1e\x4c\xdd\xe8\x56\xe1\x96\xfd\xe8\xba\xb0\xd8\xc6\x6a\x00\xb9\x27\x1d\x15\x05\xb8\x8b\xc1\x73\xa8\x83\x7b\x16\x78\x12\x0c\x58\x1c\x50\xd2\x3e\xb0\xb8\x9d\xc5\x71\x7a\xda\x5a\xe0\x31\xfd\xab\x14\x25\x9e\xd5\xd3\x39\x4e\x09\xa6\x1a\x3c\xa7\x7f\x0e\x42\x26\x33\xc4\x32\xc3\x97\xf5\x0c\x3a\x4f\x0e\x3e\xa7\x7f\xa5\x8e\x49\x47\x03\x61\xf9\xf3\x05\xfd\x6b\x5e\x4c\xb5\xc0\xa7\xf5\x2c\x79\xa9\xe6\x33\x7a\x06\xc9\x82\x1c\x0d\x9e\x0c\x57\x49\x86\x4f\xe9\x19\x68\x2c\xb0\xbc\x57\xc9\x67\xf5\x5c\x45\xce\x27\x9f\xd7\xb3\x85\xb9\x0c\x5f\xd4\x33\x50\x71\x54\xf9\xfc\x5f\x99\xe1\xe4\x1c\x69\x20\x1c\x33\x9f\x4a\x3e\x9c\xc9\xa7\x88\x9e\x4a\xae\x28\x93\x2b\xeb\x27\x10\x40\x63\x7f\x8e\x85\x3e\xb4\x00\x92\x1f\xa3\x94\x3f\x73\x4f\x41\x6d\xec\xa9\x74\x99\xad\x4a\xac\xd4\x51\x3d\x9f\x67\x6e\xf2\xc4\xda\x00\x05\x2b\x27\xbc\xf8\xa4\x05\xe2\x4c\x96\x25\x95\x5f\x81\x1d\x96\x29\x31\x67\xe2\x4b\xc6\xf2\xf8\x99\x3c\xec\xce\xef\x40\xbc\x16\xb4\x39\x43\x48\xb3\xb5\xd3\x81\x7e\xa2\x2c\xfe\xb8\xd6\x79\x0a\x93\x3f\x14\xa0\xbc\x3d\x8b\xb3\xde\x87\x36\xa1\x6f\xea\xcd\x29\xcf\xca\x22\xb0\x98\xa3\xdb\xb3\x63\x52\x62\xd4\x01\xc6\xf0\xbb\xdc\xd6\xb7\xc1\x43\xd6\x31\x73\x3d\xb9\x9d\x79\xb2\xfc\xcd\x15\x8d\x32\x37\xf9\x01\xd8\xf5\x35\x4f\x63\x3f\x80\x90\x36\x44\x4e\xfe\x33\xb5\x12\x3b\x85\x7c\x9f\x47\x1c\x9c\x72\x88\x5a\x89\xc9\x23\x15\x41\xa9\xd8\xcb\xd6\xf1\xe1\x40\xb0\x83\x85\x19\x04\xa6\x8b\x1c\x11\x5c\x41\x31\x86\xd1\x81\x67\x0e\x73\xfe\x55\x49\x61\xaa\x37\x39\x9c\x25\xe5\xd3\x24\x07\xcf\x6c\x08\x4c\x5d\x14\x03\xd0\x99\x91\xf6\x41\xb9\xbc\xd2\xdb\xb4\x60\x3d\xa5\x15\x91\x1a\xdb\x7a\x5d\xe6\x6a\x60\xc0\x89\xe7\x61\xf9\x04\x9b\xa6\xc8\x13\xb7\xce\xd2\x8e\x07\xa7\x1e\xa4\xa3\xa9\xe6\x05\xe7\x4c\x01\xb7\xe1\x05\x9d\x99\x1a\xcd\x25\x3a\x35\x8a\xc3\xb6\x15\x0e\x60\x80\x82\x15\xaa\x62\xb1\x88\x14\x6c\x9d\xe4\x36\x06\x84\x3c\xd0\xe7\x2f\x87\xc3\x3d\x0f\xcd\x6a\x2e\xc6\x7b\x6b\xea\xef\xe1\x10\xe7\xac\x24\x8b\xb9\xcb\xcc\x18\x0f\x92\x23\x76\xd2\x20\x69\x26\x7d\x94\x07\x99\xcf\xf0\xd8\x61\x16\x8d\x92\x29\x7f\xf3\x3c\x6b\x5e\xf9\x3f\xca\x76\xb7\xd0\x3a\x93\x62\x28\x88\x5c\xdd\x7a\x71\xc6\x60\xb4\x69\x63\xdd\x6e\x33\xca\xe3\xb1\xb0\xe4\x34\xa9\x19\xa8\x1d\xa1\xc9\x26\xb1\x11\x29\xbb\x4a\x0e\xc5\xd4\x57\x28\x0c\x93\xf9\xa3\x10\x1d\x14\xb3\xd0\x17\xa2\xdd\xc2\x59\x81\xca\x84\x2c\x09\x6b\x0e\xd3\xda\xe9\x21\x2d\x0a\xb4\x4a\x40\x9a\xac\x86\x01\x0b\xcc\x6f\xc3\xec\x64\x60\xad\x41\xa6\x1e\x2d\xb0\x8d\x95\x91\x58\x51\xb0\x32\x1c\xda\x19\xab\x52\x67\x51\xc1\x48\x76\x9c\xda\xd2\x56\x93\xfc\xe2\xdf\x07\x30\xea\x86\x51\x9f\xe7\x80\x3c\x8b\x48\x7e\x02\xf9\x18\x46\xcc\x1e\x53\x74\x8b\x51\xee\x42\x1c\x9e\xe5\x11\xc9\x50\x70\x02\xd2\xb8\x65\xe5\x32\x3d\x10\xdb\x3e\x82\x01\xfe\x82\x88\x2c\xa0\x60\xa8\x21\x29\xcd\x7d\xc4\xc3\xbd\xaa\xb7\x1c\xdb\x85\x79\x2a\x12\x72\xf6\x2f\x38\x9a\xa1\x5f\xa1\xde\xca\x64\x0a\x9b\x5d\x0b\x47\x2a\xc9\x34\xbe\xb8\x50\xbd\xa6\x45\x05\xc8\x78\xf5\xb3\xdd\xc4\x05\x82\xed\xdb\x22\xe7\x77\x10\x13\xfc\x0e\xf7\xfb\xb0\x83\x3c\x0c\x35\x0b\xd8\x19\x1a\x52\x8f\x1a\x23\xb7\x71\xe4\x7f\x06\xae\x0d\x87\xb0\xda\x87\xd8\xfb\x0c\x5c\x9b\xb6\xe4\x38\x33\xdc\x02\x0d\x36\x24\x42\x60\xea\xfd\x9e\xf2\x90\x55\x8e\x5d\x36\x64\x2d\x90\x61\xef\x59\x98\x55\x4d\x79\xb5\xc7\x78\x68\x38\xe3\xd4\x0e\x9b\xbf\xac\x27\x4d\xc4\x8e\x0f\xbc\x36\x7d\x3c\x63\x7a\x9b\x6f\x7e\x93\x3f\xab\xcf\xeb\x70\x38\x5b\x9f\x9d\x62\xb2\x39\xc2\x66\xfb\xa5\xec\x5c\xce\xc6\x14\x2c\xb1\x88\xdc\x50\x2e\x2b\x4b\x2e\xca\xa8\xe1\xea\xc7\x07\x55\x7f\xa4\xbe\x88\x2b\xf5\x06\x0d\xb6\x53\x57\x83\xab\x57\xea\xe6\xf0\xea\x5a\x3b\x2a\x53\xd4\xcc\xe2\xbe\x12\x90\x9f\x85\x54\x45\xa6\x40\x82\x8f\xad\x1d\xee\x98\x2c\xed\x0c\xdc\x81\xbe\x65\x94\x60\x13\xf4\x11\x86\x75\x16\xb5\x75\x0a\xc5\x3d\x57\xfa\x10\xe6\x07\x75\x6d\x1a\xba\xc3\x63\xc5\x63\x17\xe9\x91\x30\x0e\xf8\xbe\x6d\x35\xa9\x07\x04\xeb\x0f\xf3\x7f\x68\x59\x4e\x15\x61\xd8\xb7\x3d\x5a\x45\xcc\x4a\x27\x6e\x5c\x0d\xa9\xda\xfd\x44\x38\xa8\xa0\x14\x06\xbe\x9b\xcc\x89\x6f\xcc\x17\x64\xc6\x7f\x04\x69\x09\x73\x48\xce\xea\x60\x51\x81\x5d\xbf\xa2\x67\x6c\x24\xfb\x95\xcf\x34\xb6\x6a\x9a\x39\x21\x08\x9c\xc5\x61\x4e\x32\x0a\xc2\xb6\x18\x4f\x02\x86\x9b\x34\xec\x37\x39\xd0\x38\x0d\x33\x07\x76\xc9\xe1\xb6\xb9\xf9\xc7\xfc\x24\xda\x52\xeb\x1d\x98\x6f\x9f\x54\x22\x9b\x27\x3f\x26\xb6\x3e\x7e\xd4\x77\x69\x88\x1f\xf8\xd8\x64\xbf\x0d\xf2\xcc\x54\xbe\x01\xc0\x8a\x21\x3e\x2c\x6e\x6c\xc1\x6c\x4d\xa9\x3b\xed\xdc\xdd\xaa\xbd\xae\x7a\x50\x28\x1f\x0a\x66\x4c\xe3\xa5\xa4\x79\x88\xca\x48\x75\x29\x4f\x61\xe6\x1f\x0a\xde\x77\x5a\x30\xbe\xef\xb4\xd0\x2a\x97\xd5\x5f\xe2\xbd\x5c\x42\x45\x58\x23\x52\x17\x0c\x87\xc3\x66\x0b\x70\xad\xbf\xa6\x1a\x01\x91\xda\x33\xf5\xfe\xcd\xd4\xc3\xd4\xc2\x2e\xd7\xc7\x3d\xc6\x3e\xee\xd1\xfa\xb8\x27\xd3\xc7\x80\xab\x5f\xd2\x46\x33\x5d\x35\xab\x69\xa8\x1d\xa8\xec\xb5\xa6\x59\x29\xde\x2d\x63\xe4\x5c\xfa\x58\x11\x39\xd5\xbd\x4e\x47\x64\xa0\x71\xb2\x95\xdf\xb6\xd5\x6c\x71\x04\x61\xf5\x69\xcd\x1e\x08\x3a\x5c\x57\x2f\x24\xa1\x90\x95\xe3\x1d\x8f\x5d\x11\xee\xbb\xa8\x9c\xc6\x63\x66\x6e\xc0\xb6\x30\x28\x45\x36\x17\x0c\xb1\x78\x07\x66\xf1\x4e\xc7\x28\xea\xa4\x15\x65\xc7\x27\x3e\x66\x07\xa8\x15\x22\x83\x6b\xc0\xd9\xdc\x45\x7d\xea\x81\x92\xdf\x3b\xd2\x54\x0b\x82\x42\x91\x24\x2b\x6e\x16\x39\x7b\xce\x18\x0d\xa3\x69\x9b\x79\xad\xee\x62\x41\x7a\x86\xa4\x71\x49\x21\x9f\x6f\x82\xa4\xa9\x0d\xa0\x00\x19\x0a\xf8\xa6\xd9\x6c\x84\x66\x95\x3c\x0b\xaf\x26\x22\x95\x52\xd3\xbb\x19\xc9\x59\x51\xd9\xc6\xe1\x72\xa8\xd6\x31\x61\x34\x17\x49\x9b\xb9\x68\xe2\xbd\x52\xa4\xdf\x2b\x31\x0e\x16\x67\x96\x56\x7b\xcb\x43\x08\x65\xaa\xc3\x94\xb3\x18\xb1\x09\x64\x94\x8a\x88\xc5\xea\xd7\x19\x53\x6f\x23\x79\x1d\x96\xeb\xf7\xb4\xb7\x60\x23\xac\x5b\x50\x18\x35\x16\x99\xe5\xd1\x50\xd9\xb4\x34\x85\xcb\x52\x24\x63\x4b\xdc\xa6\x0b\x95\xc3\xe8\xe3\x66\xc1\x57\xf3\x5c\xce\xd9\x45\x30\xa9\xc0\xa8\x43\xe6\xb7\x68\x84\x21\x1c\x77\xf3\x08\xa7\xb0\x7d\x9c\x34\xdd\x30\x33\xdd\x72\x60\x9a\x40\x5d\xec\xc7\xab\xa2\x84\x79\x9c\x40\x08\x40\xc6\x31\x60\x75\x0c\x30\x3f\x04\x38\x71\x04\xd8\x19\x73\x57\x9a\x1b\x4f\xc1\x52\xc1\x8c\x1b\x2b\xd5\x16\x47\x06\x94\x56\x7b\x3b\x22\x82\x0c\xa6\xcf\x04\x31\xfb\x72\xe9\x2c\x49\x50\x2b\x00\x16\xee\xc1\xc0\xe2\x42\xa5\x79\xa1\xa5\x60\x09\x02\xbe\x31\x99\xf0\x42\x2f\x9d\xc7\x4c\x1b\xba\x93\x99\x42\x63\x67\x8a\xc5\xb1\x37\x0c\x39\xdf\x92\xb6\x01\x14\x99\xb2\x58\x72\x2d\xed\xd1\x5c\x8d\x87\xc3\xbd\x35\xf5\xf7\x62\x46\x42\x7e\x76\xf0\x38\x13\x51\x59\xf4\xc4\xc2\x7c\x87\x02\xa6\xed\x69\x3c\x3c\x2e\xd7\x09\x6f\x99\xe4\x59\x78\x70\x6c\x55\xc7\x0f\x92\x4c\x19\x3d\x48\xb6\x4b\xe3\x74\x20\x59\xbb\x26\x67\x3d\xef\x9d\x0e\x0c\x0e\xbf\x33\x0c\xf3\x32\x33\x52\x6f\x54\xea\x20\x62\x22\xa6\xd7\x59\x25\x04\x81\xd1\x35\x6f\x59\xbc\xf6\x59\x28\x6c\x66\x92\xf5\xe8\x8e\x33\x05\xea\xa0\xd4\xda\x2a\x92\xef\x73\x8e\xb1\xb6\x8a\x38\xc6\x14\xe4\xcb\x7a\xb5\x67\xd6\x6c\x2b\xf3\xa8\xf0\xa9\xc5\x03\x9b\xa0\x46\xe3\xee\xfc\x63\x26\x06\x8a\xb5\x31\x6b\x96\xc0\x6c\xdd\x30\x16\xaa\xc9\x31\x8d\xa5\x69\x9d\x38\xf4\xf9\x13\x07\x8e\x1d\x3a\x60\x01\xeb\xf0\xd3\xcf\x3c\x7b\xc2\x6a\x55\x51\xd0\xf6\x93\x0e\x8c\x53\x17\xfa\x20\xec\x40\x6a\x4d\xbe\x38\xae\xed\xac\x4d\xdb\x16\xa6\x85\xbd\xd9\x53\x3c\x2a\x03\x86\x6e\x63\x06\x4d\xcb\x7d\xc2\x5b\x2e\x64\x87\x8b\x74\x92\x66\xbc\x39\x7e\x70\x5b\x15\x15\xc9\x13\x86\x63\xdb\x28\x11\x88\x6b\x99\x6c\x7a\x55\xaf\x78\xbb\x72\x07\xf7\x03\x19\xd3\xef\xe3\x32\xbc\xe3\x84\x8e\x1f\x97\xdc\xba\x6d\xfe\x30\x5d\xd7\xa7\x13\x27\x72\xfd\xce\xaa\x57\xc7\x1c\x0e\x8a\xb6\xf6\xe1\x07\x34\x6d\x6d\xbd\x76\x7f\x56\xc8\xc2\x26\x5d\x41\xe6\x0e\x32\x7d\x7e\x47\x62\x86\x78\x81\x67\xcc\xf5\xa4\xa3\xe9\x1d\x27\xdd\x06\x02\x2c\x7b\x26\xaf\x0e\x8a\xa2\xae\x62\x18\x63\xcb\x75\xcd\x4f\xe5\x45\x30\x0e\xfd\x55\x78\x8c\xd6\x1e\xb1\x9d\x69\x7e\x3b\x5c\xf9\x35\x6d\x1c\x59\x6a\x0b\x50\x14\x4a\x76\x16\x0e\x87\x30\x6f\xde\xc8\xac\x03\xa8\x7d\xe3\x70\x38\xab\x5d\x45\x31\x8e\x66\x71\x3a\xc5\x8c\xca\x4a\x08\xd1\x18\xc8\x1b\x9b\xbc\x15\x86\xa2\x66\x07\x69\x64\x5b\xe1\xb7\x31\x7d\x9c\x5c\x85\x93\x0b\x7d\xb1\xb1\xb4\xb5\x4d\x93\x5d\x08\xa0\xeb\xba\x78\x11\x36\xec\xec\xbd\x1b\x1f\xac\x61\x1b\x67\x7a\x5b\xfc\x52\x60\xd1\x7c\x1c\x95\xbc\xb1\xaa\x69\x2b\x8a\xf7\x0a\xb7\x14\xb4\xd8\x1c\xab\x38\xef\x3b\x21\x1d\xc2\xc6\x54\x52\xa9\x78\xc2\xcf\x62\x59\xde\xfe\x69\xc1\x8d\x8d\x9d\x7f\x5c\x75\xdc\xd8\x5a\xef\x85\xcf\xc7\xf6\xba\x2f\x6a\x31\xf6\x5f\x73\x2b\x51\x02\x73\x24\x31\x3e\xde\x0b\xb9\x29\xa7\xb4\x39\x33\xa2\x5d\xd6\xca\x9f\xcb\x50\xfc\xdd\xe9\xac\xd2\x24\x13\x74\xae\x5c\x9e\x9d\x55\xe4\x8c\xcc\x4f\xde\xb0\xb1\x2a\xcd\x77\x25\xdb\xef\xa7\x43\x5e\xb4\x68\xaf\x6c\xa5\xd3\x6a\x4b\xe5\xb2\xad\x76\x30\x77\xf9\x9d\x15\x10\x84\x86\x91\x9c\x06\x2d\xa7\x5c\xee\x40\x43\x90\x11\x92\x68\x8c\x32\x62\x30\x45\x6c\xfa\xdb\x8d\x2b\xf2\x98\xbb\x02\xed\x17\xd4\x66\x32\xf6\x8c\xdb\x0f\x71\xfb\x6c\xae\x09\x69\x14\xd9\xec\x6e\xb7\xf2\xe7\x72\x95\x67\x2d\x2b\x9b\xbd\xed\xb6\xf1\xe5\x5c\x1b\x79\xf3\xcc\x66\x67\xbb\xad\x7c\x2e\xd7\x4a\xc6\xc6\xb3\x39\xd8\x6e\x13\x5f\xc8\x35\x91\x31\x14\x6d\xf6\xb7\xdb\xc4\xa7\x73\x4d\x98\xac\x4d\x9b\xab\xdb\x6d\xe7\x33\xb9\x76\xf2\x26\xab\xcd\xb5\xed\xb6\xf2\xa9\x5c\x2b\x79\xbb\xd7\xe6\xca\x76\x5b\xf9\x6c\xae\x95\x02\xe3\xd9\xe6\xf2\x76\x9b\xfa\x7c\xae\xa9\xc2\xf0\xef\x4b\xdb\x6d\xeb\x8b\xb9\xb6\xf2\x66\xbc\xcd\x53\xdb\x6d\xe5\xbf\x72\xad\x64\x6d\x81\x9b\x87\xb6\xdb\x06\x84\x79\x6c\xcb\x87\xe6\x3f\xbd\xdd\x66\x70\xbe\x99\x22\xb3\xe4\xe6\xf1\xed\x36\x16\xe5\x1b\x33\xdb\x36\x37\x8f\x6e\xb7\xa9\x20\xdf\x54\x2e\x90\xfa\x81\xed\x36\x82\x0a\xd7\x88\x59\x59\x37\x4f\x6e\xb7\x85\x6c\xf5\x8a\x70\xb3\xe5\xe7\x04\x0a\x2a\x72\xc0\x0b\xaa\x05\x6c\x1e\x1b\xee\xf8\xfd\x02\x73\x3d\x13\xda\x93\x12\xc6\xf6\x9a\x4b\x1d\xcc\xb5\xd6\xc2\xfc\x8a\x65\x6c\xdd\x9b\x27\xb6\xbb\x66\x9e\x01\x2b\x0a\x0c\xe6\x9b\x47\xee\x36\x82\x8c\x93\x5a\x9a\x07\xb7\x38\x89\x63\x2a\x9b\xb0\x8a\x63\xe5\x8f\xe6\xb1\x6d\xf4\x23\x5b\xdb\x84\x8e\x14\xc8\x11\xcd\x67\xb6\xd8\x05\x73\x3d\x53\x36\xae\x0a\x03\xcd\x2f\xdd\x61\xcb\x4a\x25\x13\x9a\xd5\xcd\xc4\xb7\x1a\x49\xad\xb8\xaa\x09\xcd\x6e\xe7\x21\x90\xa2\x8a\xa6\x6a\x92\x9b\x45\xdf\x85\x36\x59\x4d\x53\x35\x7a\x87\xd1\xf1\x0a\x6b\x9a\xb4\xa6\x8a\x91\xf2\xf6\x56\x34\xad\x68\x52\x93\x32\xc2\xdd\xb6\xda\xe3\xb5\x4c\x6e\x8c\xdd\x05\x6e\xb7\x31\x1e\x3c\x65\x7c\x63\xc2\x0a\x79\x7b\x8d\xf1\x5a\xa6\x42\x97\xac\xf5\xee\x5d\xc0\x9b\x4c\x95\x53\x75\xe3\x6e\xb6\x3f\x65\xc3\x8a\x3d\xeb\x36\xd7\x56\xd4\xb3\x95\x09\xbf\xc3\x57\x82\x26\x55\xb8\x95\x2e\x30\x1b\xc1\xbb\xd7\x03\x5a\xdf\x54\x1d\xb8\x7b\x83\xdf\xc2\xa8\xef\xda\x70\x4d\xe3\x8c\x0b\x39\x6e\xd5\xc9\xb0\xf9\xf8\x76\xd9\xaa\x24\xdf\x8e\xd1\x53\xb1\xf9\xf4\x76\x5b\xf2\x0b\x5b\xd2\xdc\x1d\x9b\x87\xb7\xdb\x50\x3b\xdf\x50\x81\xcf\x64\xf3\xa9\xed\xb6\xf5\x84\xfb\x82\xe3\x0c\x87\x4f\xd0\xff\x95\x18\xab\x87\xe0\x1d\x05\x59\xcd\x46\x97\xda\xe1\x98\xab\xd9\xe6\xa6\x7b\x5e\x2a\x0d\x2b\x1a\x2a\x4e\x02\xe1\xc7\x35\xa8\xa8\xf7\x91\x88\xd2\x19\xab\x61\xf7\x66\xb1\xe6\x8b\x1f\xd2\x28\x49\x26\x97\xdf\xc5\x8c\x25\xc4\x07\x17\xe2\x93\xfa\x50\xa5\xdd\x4f\x14\x4c\x4a\xee\x45\xf0\x4a\x5f\x8b\x5d\xe9\xdf\xd5\xd0\x95\xed\xdd\xc8\x95\x1f\xde\xc8\x95\x77\x27\xb4\x64\x37\x1f\xa6\x51\x3c\x1f\x95\x0f\xd3\x68\xdb\x6d\xdb\x46\x13\x63\x88\x7c\xd0\xf1\x43\xf2\xd6\xfa\x00\x29\x8e\x54\x01\x99\xb5\xda\xbe\x70\x7f\xb0\x2f\x9c\x9b\x73\x50\x33\x54\xdd\xa7\x42\x69\xb3\x1f\xb9\xcc\x9b\x04\xd8\xd0\x4d\x26\xc5\x0d\x41\x8e\xe3\x38\x55\x2f\xc1\x21\x7d\x49\x97\x50\xc4\x4f\x56\xf8\x02\x7f\xda\xe8\x05\x8a\xbf\x3e\xf7\x2b\x2b\xb4\xc4\xa1\x14\x78\x9c\x37\xbf\xf6\xa2\xee\x14\xef\x11\xa5\x76\x04\x93\xdf\x23\x9a\xe6\x21\x99\xb1\x0f\xc7\xcc\xd6\x67\x74\xf3\x4b\xe9\xb2\xad\x3f\x95\x93\x35\xb5\x1a\xff\x24\x74\x6a\x9d\x31\x93\x0e\x97\x30\x47\x91\xad\xce\x5f\x8a\x8a\x84\x8b\x10\xaf\x3b\x03\x71\xa7\xec\x19\xae\x94\xbd\x82\x1b\xe5\x6d\xca\xa1\x68\x9c\x1c\x8a\x54\x51\xa1\xad\xe7\x55\xe7\x61\x5b\x8d\x2a\x15\x65\x5a\x0c\x5c\x44\xb8\xde\x80\xfc\xaf\x30\xbd\xdd\x3b\xe3\x79\x3f\x28\x66\x77\x97\xcb\xdd\xe5\x72\x77\xb9\xdc\xbb\xcd\xe5\xde\x1d\xfe\xa9\x0d\xba\xee\xec\xac\x78\xdc\xd3\x0a\x03\x1c\x26\xed\x1e\x0d\xc0\x46\xb0\x86\x7d\x98\x51\x42\xff\xcb\xdd\xf0\x84\x17\xe3\xc7\xc2\x10\x97\xcb\x06\xae\xc0\x6e\x8b\x57\xef\xf8\x99\xa9\x50\xb1\x2a\x33\x94\x89\xcb\x65\xbb\x2d\x60\xb7\x5d\xed\xc7\xdc\xfa\x44\x38\x48\x0f\x87\xed\x6a\x3f\x7c\xc1\x90\x7a\x0a\x2e\x9f\x44\x38\xf3\xc1\x01\x06\x14\x6c\xb3\xe3\x2a\xc6\xb4\x31\x0e\xbb\xd9\xf8\x82\xe9\x19\xb5\x0f\x97\xcb\xf4\x8c\xa4\xb6\xda\x84\x89\xd9\xc7\x2c\xd5\x45\x47\x95\x77\xd6\xf0\x0c\x76\x71\x75\xe0\x45\x30\xc0\x4f\x87\x1d\x38\x52\x4d\x30\x1d\x66\xe7\xaf\xbd\x3e\xb2\x35\x56\xb5\xe7\xee\xb2\xaa\x0a\xab\x8a\xe2\x13\x04\x33\x1f\x87\xab\xa8\x0d\xdd\xee\x2e\xb7\x6a\xe6\x56\xbd\x4e\xe7\x49\xca\xb3\x18\x9e\xd6\xd4\xb8\x31\x1a\x1c\x47\x7f\x8d\x31\x0a\x7d\xc8\x9e\x5f\x64\xd6\x26\x84\xb8\x9b\x9e\xec\x90\x69\x91\x70\x6c\xe0\x1b\xab\x20\x9e\x01\xf5\x96\x2a\x97\x67\x03\x25\x9f\x17\x21\xaf\x22\x22\xdd\xb8\x38\x4a\x60\x4b\x78\x48\x22\x37\x30\x3d\x13\xa9\x56\x4a\xa6\xdc\xc6\xd5\x25\x96\xf6\x44\x14\xf6\x0f\x93\x64\x1b\x39\xd4\x5f\x7a\x86\x86\x04\xf1\x3a\x1d\x6a\x89\xfe\x14\x8a\x31\x0c\x60\x64\x5b\xfd\x30\x89\x61\x32\xb0\x80\x81\xaa\x07\x36\x36\x3f\x0a\x09\xa0\xf4\xa3\xca\x9a\x49\x71\x7f\x5d\x53\x2b\xcc\x8a\x6a\xba\x76\xd2\xb0\x64\x69\x53\x1a\xba\x8b\x79\x91\x14\x20\xa2\x2c\x73\xcf\x8b\x8f\x84\xab\xb0\x43\x0e\x7a\x6a\x1f\xcb\xec\xfb\x33\xdd\xa1\x04\x9d\xa4\x5b\x64\x6e\x66\x4c\x3d\x56\x68\x3e\x50\x98\xf2\xc2\xac\xac\x36\xea\x5f\x56\x98\x07\x06\x1d\x7d\xfc\x8c\xbb\x81\xd3\xa3\x4c\xe4\xd0\x65\xcc\x7b\xac\xc8\x81\x3b\xea\x1c\xd4\x65\x34\x98\xd9\x68\x3a\x44\x23\x08\x3c\x19\xd1\x0a\xd0\xc2\x84\x7e\x01\x33\xef\x76\x46\xca\xfe\x31\x0b\x51\xd2\xaf\x4a\xfd\xa8\xfa\x37\x29\x5e\xae\x99\x56\x4c\xdb\x3a\x3d\xc4\x60\x35\x1e\xf8\x08\xdb\x56\xd5\x72\x84\x47\x23\xe7\xbf\x9b\x03\x2f\x8a\xe1\xe1\x00\xdb\xb8\x59\x6b\x81\x7a\xcd\x69\x89\xc8\x2c\x82\xdd\xa4\x01\x5a\xdc\xc8\x54\x22\x60\x25\x64\xe8\xde\x2d\xcb\x65\x1d\x57\x27\x4e\x03\x37\x2b\x24\xf5\x27\x3e\xd5\xa3\x89\x49\x6a\x6d\x0e\x58\x75\xd5\x8f\x6b\xee\xfa\x08\xa8\x1a\xbe\xbe\x59\xc3\xb7\xd6\x84\x2d\xb7\xcf\x34\x7c\x6b\xba\x86\x4f\xfd\x09\xd6\xb2\x1a\xbe\xb5\x42\x0d\xdf\xda\x70\xb8\x96\xd5\xf0\xad\xe9\x8c\xf7\x9a\x3b\x98\x42\xc3\xa7\x3d\xe7\x62\x13\x4e\x02\x3a\xc3\x21\x1c\x81\x35\x07\xac\x2a\x1a\xbe\xb5\x8c\xfe\x6d\x8d\x6b\xf8\xb4\xf4\xc5\xb5\xbc\x86\x6f\x55\x6a\xf8\xd6\xc6\x6b\xf8\xb2\x2d\x98\x59\x4f\xd2\xc3\x35\x32\x38\xa6\xe1\x2b\x90\x55\xef\xec\x11\x3c\xed\x71\x8c\x9d\x96\x57\xd5\xb6\xa6\x91\x59\x53\x89\x15\x29\x72\x06\xfa\xb8\x4a\xac\xe1\x18\x59\x10\x7d\xf8\x65\x41\x4f\x59\x23\xef\x5e\xc8\x82\x9a\x2c\x6d\xc7\x1f\x1e\x59\x30\xd9\x92\x80\x12\x14\x0b\x27\x45\xfc\xf8\x5d\x14\x4d\x84\x64\x02\x42\xae\x69\xb5\x71\x41\x1c\x55\xf9\x6e\xef\xc7\x58\x3c\x88\x8b\xc5\x03\x7a\x0c\xe7\xc9\x70\x72\x87\x64\x38\xff\x5a\xd2\x8e\x53\xe3\x7c\x93\xbb\x44\x79\x97\x28\xef\x12\xe5\x5d\xa2\xbc\x4b\x94\x4d\xef\xcc\xed\x34\x41\xce\x34\xb7\x4b\x8c\x77\x89\xf1\x2e\x31\xde\x25\xc6\xbb\xc4\x58\x7b\x1c\x74\xa7\xa9\xb0\x0c\xfb\xb0\x7b\xa9\xbe\x7b\xa9\xbe\x7b\xa9\xfe\x61\xbb\x54\x07\xf2\xe6\x77\x8b\x06\x8a\x63\x6f\x7d\x3f\xc8\x63\x83\xdf\xd0\x26\x63\x8e\x8d\xdd\x1b\x58\xc3\x0d\x6c\xdb\x87\x5e\x51\xc0\x3b\x43\x38\xc0\x02\xf3\x3e\xfa\x0c\x04\x53\xa4\xab\xd7\x73\xd4\x3c\x8f\x5a\x51\x08\x9b\xbd\x2d\xdf\xc3\x74\x5d\xd1\xc5\x5e\xee\x06\xa6\xb3\xb5\x1b\x18\x56\x8f\x03\x06\xda\xdd\x4b\x3f\x7b\xf7\xd2\x31\xdf\xbd\xf4\x9b\xb0\xe5\x76\xd8\xdd\x4b\x5f\xbf\x7b\x51\x7f\x82\x7e\xf6\xee\xa5\x5f\x78\xf7\xd2\x1f\x0e\xfb\xd9\xbb\x97\xbe\x4e\x9f\xfb\x6e\x6f\xcb\x77\x2f\x64\x3f\xf3\xbb\x97\xbe\x03\x06\xca\xdd\x4b\x3f\x73\x33\xd2\xe7\x77\x2f\x5a\xfa\x62\x3f\x7f\xf7\x32\x90\x77\x2f\xfd\xf1\x77\x2f\xd9\x16\xcc\x14\x8a\xf4\xb0\x4f\x06\x37\xf6\xee\x65\x75\x3c\x4b\xd3\x83\xfe\x00\x46\xf1\xbc\x21\xc0\x12\x8a\x4d\xda\x3e\x43\x1d\x09\x46\x7e\x3c\x4f\xf3\x56\x28\x9c\x61\x50\x32\xec\x89\x72\xa3\xad\x4e\x79\x66\xdb\x50\xe3\x12\x25\x54\xb6\xa3\x1e\x49\x59\x02\x4f\xc9\x61\x86\x57\x29\x21\x61\xef\x4f\x0b\x58\x4d\x76\xd0\x96\x0e\x08\x62\xd6\x22\x3b\x8b\x4f\xad\xc4\xe4\x2a\x0e\xf9\xbb\xd6\x74\xc9\xa0\x23\x1a\x9e\x61\x4c\x45\xb3\x05\x02\xc2\x0f\x20\x77\xb6\x0e\x42\x71\x00\xe0\x68\x4d\x32\x1e\x1e\x88\x5d\xd8\xcc\x74\xa6\x65\x3b\xfb\x66\xc9\x19\xe0\xb9\x31\x7d\xda\x93\xec\xcf\x4e\x18\x40\x82\xad\x11\x0b\x72\xe5\x31\x3c\x72\x00\x61\x0b\x22\xce\xb8\x50\x92\xb9\x8f\x34\xe9\xec\x1b\xb1\xc7\x3e\x13\x67\x1d\x91\x2e\x84\x6e\x32\xea\xa2\xc0\xf3\xfd\xb5\x75\xd2\x81\x60\x38\x24\x98\xe0\xba\x71\x95\x75\x79\x38\x14\x90\xed\xc8\x9c\xf4\x71\x0b\x46\x83\xc3\xd1\x48\xde\xec\xd2\x79\x54\xa6\xd5\x59\x37\xd2\xe9\xc3\xc1\xaa\xe7\xa3\x4e\xc9\xc3\x84\x5b\xc5\x25\x1c\x96\x3a\x90\x91\xd6\x24\x82\xa5\x20\x0c\x2a\x74\xc8\xcb\x7e\x7a\x38\x91\x03\x46\x39\xc1\xa5\x61\x40\xe0\x12\x04\xa8\x3b\xcd\x9a\x12\x82\x1e\x57\x51\xfc\x69\x82\x49\x8e\x1d\xdc\xd1\xd1\x4c\xf1\xf3\x19\x82\x9e\xcc\x48\xec\x30\xab\xce\x0d\xcc\xc7\x36\xe2\x01\xfb\x9e\xa4\xfb\xa0\xca\xb6\x83\x1d\xa8\xee\x65\x68\x3b\x3b\x48\x09\x74\x21\x37\x51\x4b\xb3\x91\x30\xef\x0d\xbc\xbb\x37\x3e\x81\x7b\x23\x4a\x8d\x66\x08\x02\x2c\x10\xaa\x1e\x35\x6b\x2d\x80\xdc\xa8\x59\x6f\x51\xa3\x2a\x3a\x0c\x94\xda\xef\xcb\x88\xd4\x02\x1f\x90\x93\x4a\x41\xcc\x32\x0f\x09\x29\x88\x1a\xe8\xa5\xf9\xd9\xd3\x60\xa8\x19\xb6\x40\x20\x3d\x02\x6a\x33\x92\xcd\xe0\x33\xa0\x67\x0f\x00\xba\x4b\x1b\x53\x06\x16\x8d\xcc\x7b\x33\x30\xee\xcd\x48\xdd\x9b\xc1\xf8\xbd\x39\x51\xa4\xae\xf4\x13\x1f\xa3\x81\x0f\xa7\xdc\x9f\x77\x47\x56\x10\x31\x4c\x9f\x3c\x71\xe4\xa9\xc7\xbc\x28\xae\x8a\x7e\xda\xeb\xa8\xd3\xb0\x56\x3f\xfb\x2c\x7e\x62\x2f\xee\x5b\x60\xd9\x0f\xdb\x27\x1b\xf7\xad\x73\xd9\x37\xb6\x1a\x4d\x1e\x59\xc6\x12\xb1\x6f\x2c\x60\x3d\xaa\x85\x07\xb2\x1e\xf5\x22\xe4\x31\xf6\x6d\x19\x76\x1e\x5b\x13\x49\x1c\x3f\xc5\xcf\xa7\xbc\x65\xe8\x6b\x3f\x7c\x99\xdb\x1c\xb4\xcb\x7a\xd4\xf3\xfd\xf0\xd4\x41\xc6\x49\x5a\x8f\xb6\x3d\xbf\x9d\x90\x6e\x3f\x13\xc6\x88\x77\xea\xd1\x4c\x1c\x36\xeb\x51\x53\xd4\x34\xeb\x51\xf9\xe0\x1d\x81\xd5\xe0\x2b\x54\x73\x72\x1a\x47\x1e\x01\xb2\x01\xb0\xac\x47\x7b\x61\x84\x5e\x08\x03\xec\xf9\x6a\xa3\x9c\x5d\xf2\xd7\x8e\x0e\x60\xc0\x2a\xcd\x06\xcf\xb3\x1e\x95\xb1\xfa\x38\xa8\x07\x20\xb4\x1e\xcd\x87\xc2\xb3\x1e\x65\x2f\xe7\x30\x88\xbd\x8f\xc7\x61\x16\x1c\x84\x80\xdc\xfb\xc3\x7a\x54\xba\x56\x48\x50\xeb\xb9\x66\xcd\xa2\xfd\xd4\xb3\xe9\x41\x0b\xad\x47\xb5\xb0\x2b\xe4\x67\xd0\x81\xd1\xe1\xe0\x19\x9f\xc6\xa5\xb6\x1e\x4d\x03\x21\x58\x8f\x8a\x70\x17\x02\xe2\x5e\x47\x69\xc2\x13\x08\xfa\xca\x4f\x65\xa4\x2c\xe1\x19\xbd\x93\xe9\xe9\x95\xc2\x87\x31\xec\x6b\x3d\xa6\xfd\x25\x74\x90\xa2\x22\xc2\x0c\x09\xb1\xb7\xcc\xac\xe9\x52\xfc\x3c\x4c\xeb\x59\x85\x11\x46\x6d\x6d\xfd\xca\x1e\xc6\x11\x99\xb8\x32\x47\x16\xab\x05\xac\x18\x7b\x98\x9a\x91\x13\xac\x6f\xde\x0f\x2c\x75\xdf\x5a\xa0\xd9\xac\xef\x01\x7b\x1f\x6c\xb5\x40\xb3\x79\xcf\x76\x40\x51\xc8\x39\xeb\xd1\x6c\x58\xb0\x6d\xee\x16\x1a\x55\xcb\x13\xa5\x3e\x3e\x9b\x87\xc7\x92\xd0\xf7\x51\x20\xfd\xb8\xc8\x0f\x16\xfa\xe7\x9e\x6d\xaf\x08\x7e\x39\x41\x11\xdf\x02\x1f\xd2\xad\xa6\x04\xd1\x52\x7f\xab\x25\x27\x6d\xc1\x74\xbf\x92\x0d\xb5\xb0\x07\xec\x01\x4d\xb2\xb7\x16\xf6\x80\xbd\x12\xba\x5f\x42\x0f\x48\xe8\x41\x09\x3d\x24\xa1\x87\x25\x54\x03\xcd\xa2\xb8\x8c\x6a\x0e\x7d\xb3\xf0\x2f\xf5\x9a\xac\xa6\x5e\x4f\xc1\x05\x0e\x2e\x00\x4b\xdd\x16\xfc\x6b\xda\xed\x7a\xda\xef\x7a\xda\xf1\x7a\xda\xf3\x7a\xda\xf5\x7a\xda\xf7\x7a\xda\xf9\x85\xb4\x03\x0b\x69\x07\x16\x16\x52\x30\x6d\x6d\x21\x6d\x6d\xe1\x7e\x6d\xf8\x6a\xa8\x13\x91\xe3\x01\x43\x0e\x81\xf4\xb9\x0f\x74\x03\x88\x92\x69\x9f\x17\xd2\x3e\x2f\xa4\x7d\xde\x93\xf6\x79\x4f\xda\xe7\x3d\x69\x9f\xf7\xec\x49\xe7\x4f\xe2\x36\xff\x94\x8e\x61\x4f\x3a\x86\x3d\x69\x67\xf7\xa4\xad\xef\x49\x5b\xdf\x93\xb6\xbe\x37\x6d\x7d\x6f\xda\xfa\xde\xb4\xf5\xbd\x7b\xb4\x91\x17\x85\x82\x63\xc3\x7d\x08\x58\xca\x95\x49\x53\x14\xca\xa1\x77\x8b\x1d\x02\x59\x0c\xde\x4b\x87\xd3\x12\x2d\xa7\x23\xda\xfb\x40\xa6\x13\x2c\x16\xe0\x09\x6f\x99\x19\x5b\xd3\x32\xeb\x99\x03\xa8\x06\xac\xe7\x9f\x0f\x4a\x25\x52\x7b\x7d\x2f\xd8\xfb\x10\x6b\x44\xc1\x0b\xd6\x1a\xe0\x39\xc9\x10\xac\x81\x17\x79\x7d\x88\x61\x44\xaa\xa8\x83\x85\xd6\x48\xff\xde\xf3\xe2\x43\xab\x9e\x6f\x35\xba\x9e\x1f\xc3\xd1\x7d\xa0\x0f\xb1\xd7\x58\xef\x53\x46\xf2\x69\xaf\x0f\x4d\x0f\x5d\x6f\x81\xab\xad\xf6\x96\x63\x6b\x34\x52\x39\x66\x7c\xb7\x38\x66\xd3\xad\xd7\xbd\xe6\x9c\xdb\x7b\x82\xe4\xc9\xc3\x2b\x7b\x0a\x39\x67\x0b\x58\xa8\x73\x3a\xa5\xb1\xf4\xb0\x43\x31\x5e\x0e\x4f\x33\xd2\xa8\xb2\x2d\xda\xf1\xc4\x8f\x32\xc9\xa1\x28\x5c\x4b\xe6\x04\xc8\xf1\x2e\x0f\x02\x2b\xf1\x2d\x40\xd7\x98\x60\xcf\x02\xe9\x84\x05\x9a\x64\xdb\x9a\x22\x9b\x8b\x19\x4e\xdf\x2c\x05\x9c\x22\x5b\xe2\x95\x52\x8b\x23\x36\xa9\xab\xcd\xe9\xfe\x14\x35\x51\xe4\xdd\x03\x1e\x6e\x81\xe6\x1e\x60\xd1\x70\xa5\x9a\x23\x88\xdc\x12\xd4\xdd\x81\x91\x6c\xb6\x1d\xd2\xfc\xd4\xd5\x85\xbb\x59\x17\x67\x7f\x48\x41\x74\xd0\xdc\x0b\x2c\xe8\xd1\x38\x6c\x62\x20\xf2\xb8\x23\xb9\x89\x4c\x6b\xda\x70\xa5\x12\xdb\x6f\x0f\x02\xcb\x47\x16\xa0\x8e\x1c\xa0\x59\xaf\xcb\x31\x4f\x3b\x85\x25\x8b\x91\x13\xd4\xb5\xe4\xb6\x4d\xdf\xdc\x26\x3b\x71\x72\x1d\x95\x4a\x5a\x80\xf6\xb8\x60\xa0\x49\xe0\x43\xda\x37\x31\x54\xa5\x9d\xf1\x43\x55\x86\x1b\x0f\xbc\x20\x1d\x70\x0d\x30\x3f\x2d\x60\x2d\x27\x18\xb3\xc3\x8e\x24\x52\x3f\x17\x9f\x73\xb1\xcc\x11\xa8\x04\x79\xbc\x02\x9e\x65\x1a\xe4\x60\x25\x2b\xcb\x98\x55\x5c\x07\xcc\x27\x46\x2c\x11\xf7\x8a\x51\x88\x9c\x3a\xea\x92\xfc\xef\xca\x6b\xca\x4f\x52\xd3\xc3\x63\x88\x61\x6b\xc4\xe6\x90\x4e\x19\x5f\x96\xbd\x0a\x5e\xe8\xac\xcf\xb4\x33\x57\x37\x9d\x1a\xe3\xab\x6d\x12\xea\xc5\x38\xe6\xac\x64\x4d\xcf\x91\x87\xc8\xcc\x7a\x9d\x30\xf0\xd7\x64\x6d\xac\x80\xe8\x14\x3f\xaa\xb4\x5c\xfc\x60\x28\xce\x90\x76\x2a\xad\x87\x00\x82\x48\x8c\x99\xb7\x49\x73\xb0\x17\x64\xce\x26\xbd\xad\xb1\x95\xb3\x8f\xd3\x2c\x20\x3d\xcd\x72\x7d\x49\x17\xf3\x21\x60\x79\x41\x47\x8e\x55\xf3\xaf\xe0\x13\x12\x84\xea\x02\x69\x24\x54\x4e\x89\xfa\xa7\x78\xe4\x45\xbb\x66\x0c\xf6\xeb\x0e\x1f\x14\xa1\xeb\x8c\x2b\xca\xb8\x82\xf0\x05\x99\x06\x99\x8d\xf3\xb9\x57\x25\x3b\xb5\x14\x2b\x26\x10\x3c\xc4\xc4\x21\xf5\xd0\x18\x33\x1a\xf1\x96\x87\xdc\xd3\xac\x38\x2f\xe8\x25\x38\x24\x7b\xc2\x87\x98\x10\x91\xb0\xdb\xd5\xbf\x44\x11\x3b\x0a\xb3\x1f\xbc\x01\xc2\xf4\x12\x4a\xff\x16\x0f\xa0\xef\xb7\x7b\xb0\x7d\xd2\x02\x16\xed\xa0\x35\xcd\xb1\x66\xee\xe3\x84\xc3\x8d\x5d\xf3\x81\xf4\xd8\x10\x0f\x6d\x58\x32\x0b\xa5\x82\xed\x30\xc0\x11\x39\xe7\x53\x91\x45\xf4\x16\xaf\xf9\x30\x3d\xab\x78\x2f\x8e\xf0\x4e\x50\xa9\xf3\x38\xcd\x22\x4b\xe8\x7e\x47\xbc\x5c\xdf\x5b\x5b\x86\xcf\x68\x58\xcc\xb3\xa7\xd2\xb8\x91\xe2\xd3\x3c\x29\x5b\x21\xe5\x28\xf1\x85\x49\x73\x5c\x9c\x54\x0f\xda\x2e\x8f\xb3\x28\xc4\x2d\xed\x14\x5e\x66\xf1\x10\x85\x00\xa6\x7d\xe3\xa8\xa3\x4b\x11\x4c\xbc\xce\xe4\x3c\x29\x03\xa6\x14\x88\x22\x3c\x77\x07\x91\x53\x20\x86\x91\xca\x87\xc7\x38\x8c\x94\xf9\x8b\x95\x93\x7f\x3a\xca\xff\xb0\x76\x74\x6e\x71\xff\x92\xbd\x93\xc4\x15\xd4\x66\xc7\xa1\xa1\xd5\x9d\x66\xae\x05\x03\xbc\x03\x4c\xf6\x87\x89\xa7\x7e\xe8\x81\x2f\xf6\x9e\xfe\x02\x3c\x66\xe6\xa9\xe5\x5b\x3e\xc0\x3a\xa0\xe8\xcc\x2c\x60\xa5\x90\x3c\x57\x31\x8c\xfa\x16\xb0\x32\x51\xb3\xad\xc7\x54\x05\x81\x05\xac\x13\x42\xb0\xe0\x1c\x3b\x2f\x26\x35\x5b\x2a\x0f\x8e\x02\x7a\x9d\x4f\x55\x73\x01\xea\x53\x5d\x40\x4e\x15\x93\x4b\x28\xd0\xbd\xe4\xf4\x2d\x19\x6d\x5f\x4e\xa7\x37\xc8\xd6\xa3\x29\x7e\xcc\xea\xb6\x8c\x2e\xcf\xa0\x7d\xcb\xe9\xa0\x4c\xfa\x1a\x45\x07\x98\x0a\x22\xba\x7e\x48\x55\xf9\x6c\x5b\x23\xaa\xea\xc1\xf2\x4a\x5e\x93\xbe\x76\xd9\x8b\x51\x3b\x7d\xec\x89\x69\x6c\x17\x1e\xe2\x1a\xdb\x3b\x9d\x1c\xa3\xf6\x31\xa7\xd5\xd3\x94\x8c\x42\x83\x38\x49\xd5\x37\x61\x9a\x0d\x1a\x5c\xae\x69\x98\xa8\x12\x62\x07\x48\xb6\xe3\xca\x47\x7d\x00\x39\x15\x10\x1b\xcc\x58\xcd\x10\x49\xd5\xe2\xaa\xe7\xb5\x51\x8a\xda\x49\xd1\x23\x51\x01\x2e\x3f\xb2\x49\x3a\x90\x07\x80\x90\xa3\xc4\x76\xa5\x0b\xab\xf0\x29\x93\x94\x3c\xec\xc4\x50\x19\x07\xa1\xbe\xe2\x89\x4c\xe6\xc9\x1c\xdc\x54\xc5\xaf\x9f\xfd\x1d\x81\xd7\xcb\x6b\x96\xa2\xf9\x52\xb3\x20\x81\xe7\xa9\x36\x4c\xfd\xcc\x65\xa8\x54\x3f\x96\xfb\xe8\x2b\xb5\xef\xcd\xe6\x48\xf7\x46\xaa\x3b\x13\xc7\x3b\xdb\x2a\xa9\x22\xcd\xc0\x10\x28\xac\xb2\xc2\x15\x8b\x45\xd2\x64\x88\x30\x12\x82\x25\x5b\x40\xab\x66\x65\x39\xe5\x89\xa7\x7b\x26\xc2\x77\x86\x25\x50\xb8\x8e\x5c\x11\xa1\xc4\x2c\xe0\x44\x72\xf9\xa9\xce\x84\x33\x73\x4d\x95\x3a\x09\xc9\x4a\x0e\x87\x6b\x30\x15\xe5\x82\x94\x89\x0a\xb0\x90\x4b\xdb\x3e\xc4\x62\xe2\xa6\xd6\x15\x4e\x2d\x52\x3c\xa0\xea\xb5\x39\xd9\xc2\x7d\xff\x84\xb7\x32\xcd\xe1\x20\x2f\x62\x34\x05\x53\xfe\x6a\xc5\xa4\x66\x52\xef\x43\xa6\xbc\xd9\xd0\xae\x4d\x26\xdf\x49\x08\xed\x57\x81\x64\x9c\x4e\xe1\x92\x08\x85\xcd\xac\x59\xad\xb1\x2a\x73\x45\x51\x4f\xca\x72\xb5\x13\x65\xe9\x65\x62\x66\x06\xc6\xab\xca\xd3\x64\x8e\x4c\x05\x6c\x6d\x56\x61\x5f\xd3\x65\x4e\xe3\xb5\x83\x51\xef\xae\xdc\x15\x2c\xe8\x83\x49\xdf\x19\xd5\x2e\x10\xc6\xd0\x49\x4d\x28\xaf\x2f\xb0\x39\x55\x26\xab\xa6\xab\x8c\x45\xf6\x2c\xc7\xfc\x30\xa8\xd7\xb2\x9a\x63\x2d\xc3\x43\x29\x4f\x4d\xf1\xb7\x58\xb2\x37\x90\xef\x83\x61\x80\xc5\xc4\x4c\x22\xdf\xd9\x67\x52\xe4\xd6\x16\xdb\x42\xc5\x9b\x36\xab\x38\xc5\x9b\x6d\xee\xe5\xc2\x7b\xa4\x2d\xef\xe8\x07\xd5\x1d\x6d\x66\x1b\xd3\xed\x31\x0d\x03\xa9\xed\xf0\xe2\xab\x4c\xc3\x3e\x97\x44\x62\xca\x5d\x3e\x76\xbb\xd6\xf7\x4e\x40\x58\xe3\x3d\x58\xe1\x46\x35\xec\xb0\x29\xae\xab\xa6\xd8\xbe\x92\x4a\xe4\xb4\x2d\xd3\x6c\x5d\xb1\xed\xc6\x6c\x88\x07\x4d\xea\x45\xce\x86\x19\x9f\xdc\x29\x54\xca\x4c\x46\xcb\x82\x87\xcd\xa6\x46\x4b\x15\x31\x1f\x50\x11\xd3\x70\x6f\x9c\xaa\x25\x0d\x6d\x5b\x05\x4b\x3f\x76\xa6\x1e\x28\xd6\x5d\x8d\x51\xee\xed\x55\x26\x52\x79\x41\x68\xdc\x2c\xf2\x92\xf7\x83\xfa\x9e\x69\x95\xb9\x7b\x49\xde\x2d\xa9\x42\xf5\x1e\xe6\x6c\x12\xb6\xa0\x80\x4f\xfc\x69\x15\x11\xea\xd5\x4a\xaa\xa8\xe7\x14\xc1\x2a\xd0\x95\x1b\x6e\x35\xa6\x69\xa5\x54\xf8\xa5\x52\x09\xc2\x0a\x8f\x57\xa8\xb8\xe9\xaa\x5d\xe2\x62\x78\x41\x8f\x52\x05\x3a\xc3\x20\xc3\xe4\x65\x94\xd3\x7a\xc9\x87\x73\xe9\xa6\xd4\x2d\xe9\x4e\xa7\x5b\xf0\x09\xdb\x33\x67\x2b\x72\x47\x1b\x93\x4b\x75\x9a\xac\x92\xa5\x9b\x93\xb5\xb4\x12\x55\xd8\x06\xcf\xb3\x82\xd4\x64\xe7\xb0\xb8\x7f\x94\x67\x43\x7a\x1c\x4d\x30\x82\xc9\xbf\xe9\x99\x33\x03\x52\xa8\x47\x9e\x11\xb3\x2c\x13\x17\x97\x3b\x47\xf4\x44\x60\xf1\x97\x84\xc5\x67\xfd\x8e\x3f\xd7\x27\xe5\x5b\xb6\x6f\x93\x99\xa9\x1c\x3b\x95\xb1\x4e\xc9\x72\x53\x26\x94\xdb\x0b\xee\x1f\xcb\x4e\xed\xc9\xb0\x53\x05\x0c\x55\x91\xb6\x7f\x02\x42\x9a\x4d\xcb\xee\x80\x8b\x59\xd0\x0f\x0b\x81\x22\xfc\x72\x2a\x6d\x30\xcf\x06\xd4\x27\x1e\xa0\x0b\x5b\xe1\x28\x0d\x97\x43\x6c\x7a\x76\x48\x03\xbb\x03\x0a\xd7\x31\x6f\xc1\xdc\x6b\xfd\xeb\xe3\xcf\x9c\xfc\xf4\x49\x84\x9f\x34\xeb\x5f\x8b\xec\x18\x8c\x6c\xaa\xc6\x99\x1a\x98\xd1\x09\x76\x0c\x2a\x2b\xf5\xe0\xa4\x8b\x2c\x7e\xc2\x75\xd0\xea\xd4\x1a\x7d\x79\x05\xa2\x9f\x4f\xc5\x17\x62\x1f\xd8\xbd\x16\x3f\x41\xdb\x61\x7f\x39\xe4\xa7\xfa\x04\x52\xcf\x03\x66\x68\xd7\x70\xca\x5d\x56\x7d\xfa\xbb\x2c\x55\x59\x95\xbb\x99\xda\x33\xd5\x4d\x92\x72\x21\xb4\x37\x77\x5b\xa4\x28\x7c\xee\x1f\x73\xcd\x94\xbf\x82\xda\xd6\xe5\x91\x12\xef\xde\x74\x6d\x34\xbd\x01\xc1\xce\x91\x99\x0c\x4d\xd8\x09\xaa\xf3\x21\x24\x37\xcf\x9e\xf8\xec\x17\x4e\xf5\x9e\x7b\xdc\x4c\x6e\x3e\xcd\x1c\x02\xf5\xcb\x1d\x8b\x6c\x4e\xc6\xb3\xc8\xab\x1e\x85\x2e\x69\x4c\x8d\x72\x77\x93\xf2\x37\x26\x56\x26\x6f\xbd\xac\xf0\x3e\x39\xce\x89\x5f\x81\x4c\x63\x7a\x95\x67\xd0\x8d\x1b\x6f\xc2\x25\xb6\xdc\x14\xf9\x5b\x6b\x22\x87\x8f\xc1\x7c\x35\x84\x69\x81\x09\x91\xa4\xb2\x0f\xa4\x5c\xda\x34\xc2\x95\xb0\x7f\x9d\xd2\x5c\xe2\x6e\x4a\x1f\xbc\x97\x53\x89\x1e\x4c\xc8\xe0\xa6\xba\xdb\xb3\xaf\x50\xa4\xfc\x31\x6c\x57\x3d\x6f\x8c\x93\xcb\xa2\x58\x66\x8c\x99\x68\xc5\x8a\xad\xbe\x30\x66\xaa\x35\x3b\x98\xf1\xbe\xb5\x0a\x19\xdf\xb2\x58\x52\x57\x59\x40\x5e\x61\x21\x2f\xb8\xc7\x60\xbd\xfd\xf0\x54\x1a\x4c\x03\xd7\xa9\x6e\x25\x11\xa0\x6f\x8b\xe2\x8f\xb2\x9f\x0b\x88\xc5\x94\x84\x21\x3b\x4a\x4b\x6d\x48\x19\xee\xc3\x0a\xeb\x92\x1e\x86\xc0\xaa\x8e\xb7\x38\x9f\x76\x8e\xb2\xe6\x57\x19\x6b\xf9\xbc\x64\x62\x62\xab\xef\xd7\x34\xb5\xc5\x42\xf3\xb6\x4c\xc4\xee\x60\xef\x0b\xcb\x40\x4a\x27\x15\xa7\x56\x36\xa9\x85\x48\xae\xe4\xcc\xa1\x60\xde\x06\x94\x13\x50\xd1\x8c\x6a\x58\xa3\x1a\x6f\xee\xc9\x1a\x6f\x92\x81\xa4\xf7\x60\x69\x05\xed\x24\x8a\xd8\x16\x4f\xbb\xf9\x65\x63\x57\x94\x30\xdc\x86\xde\xe4\x43\x84\x17\x62\x13\x2b\x33\xad\xd2\x45\x47\x98\x3d\x93\x10\x66\x32\x4f\x94\x97\x65\xc1\xde\x22\xea\xc9\x2c\xf8\xa4\x2d\xce\x0e\x32\x52\x3b\xc8\x41\x15\xc4\x88\xbe\xd7\x5c\xd4\xea\xb1\xa3\x9f\xff\xfc\xa7\xc3\x87\xcd\x5c\x54\x6a\xb0\xa1\x6b\xbf\xc7\x1c\xec\xe3\x0e\x1b\x55\xde\x62\x26\x54\x53\x5a\x0d\x66\x74\xef\x84\x73\xd1\x8e\xe8\x85\x3b\x39\xa1\x77\x0a\x89\x94\xce\xee\x08\x22\x8d\x8d\x72\x7b\xaf\xf1\x29\x38\xd0\x3d\x71\xff\xa1\x85\x27\x0a\x94\x00\xe2\xe8\x2f\xf6\x9f\xdc\x12\xc9\x4f\x0f\xf4\x49\xa4\x38\x67\x47\x9f\x25\xc5\x93\x28\xe1\x1d\x58\xfe\xb1\x40\x23\x01\xbd\x53\xd4\x18\x4a\xa1\x50\x14\xd7\xd4\x79\xc4\x95\x14\x77\x41\x63\xb9\x77\x94\xf8\xe5\xfb\xbe\x13\xe8\x5b\x1c\x0f\xf4\x5e\xa3\xee\xa9\x27\x8e\x3c\x78\x60\xf5\xf0\x17\x0a\xf5\x57\xda\x15\x56\x81\x00\xb7\x03\x57\x31\x3b\x20\x04\xe5\xa2\xa4\x4e\xc3\x09\x58\x2a\x02\x1b\x2e\x59\xb2\x87\xfe\x0e\xa3\xab\x3e\x86\x9d\x40\xd5\x0f\xa1\xdf\xd8\xc1\x07\xbd\x87\xdb\x8f\xf7\x92\x02\x1c\xdd\xd2\xdd\x7c\x91\x92\x63\x1a\x23\xd3\xb1\x2c\xc0\x74\x6e\x53\x19\xf5\xc1\x34\xde\x06\x46\xaf\x19\x59\x7a\xab\x0e\x32\xd2\xbc\xbd\xd8\x37\xc6\x38\x92\xc2\xac\x77\xc9\x3f\xe6\x4e\x6c\xcc\xa5\x07\x14\x86\x7d\x79\xd8\xec\x25\x9c\xbe\x61\x18\x26\x4f\x9b\x09\xdc\x3a\x30\x3b\xcc\xa4\x52\x85\x66\x0f\x68\x74\x26\x9b\x4e\x6d\x70\x27\xdc\x21\x8d\xf4\x26\xbc\xc2\xc6\xba\xff\x31\xdc\xd5\xb5\xc3\x46\xb7\x42\x25\x23\x27\x82\x57\x5e\xdb\x82\xa2\x77\xaa\x95\x1e\x83\xd1\x0b\x12\xa3\x33\x9c\xaf\xa4\xbe\xd3\xa1\xd8\x47\xc8\x5b\xe1\xce\x9d\x14\x58\x54\x37\xe1\x1c\x5d\xe9\x7a\xbe\xbf\xec\xb5\x4f\x56\x50\xb7\x92\xbe\x0c\xb9\xe3\x34\xdc\x10\x36\x94\x51\x72\xd1\x31\x7b\x7d\x05\x62\xf5\x59\x66\x19\x0b\x0b\xc4\xea\x07\x1a\x26\x97\x7f\x93\x81\xf6\xa2\x45\xd8\x88\x46\x23\x67\xb4\xa5\xa9\x10\x6e\xb9\x32\x26\xc6\x07\x37\x09\x4a\x4c\xb0\xcc\x34\x58\x9a\x85\x27\x54\xdf\x74\xe3\x01\xa5\x7a\x28\xe6\xe1\x55\x49\xd3\x08\xc6\xa4\x71\xb5\x14\x8b\x36\x05\x69\xb4\xa9\xaa\xf2\x41\x44\xfa\x44\xe5\x72\xe0\xba\xae\x1a\x8d\x56\xe9\x4f\xc0\xc3\x4a\xad\x40\x6c\x43\x1a\x84\xd2\x51\x43\x02\x6b\x39\x69\x58\xcd\x29\xa7\x5d\x8d\x2b\xb8\xf5\x20\x6a\x32\xd4\xee\x2c\x2c\x97\x67\x67\xd5\x2e\x2a\xc2\x82\x93\xfb\x26\x58\x49\x73\x70\xae\x5a\x36\xf8\x69\x09\xda\x01\x0b\xb5\x16\x38\xca\x93\xa0\xf2\x0d\x4d\xe4\xd6\xf6\xa1\xfd\x69\x0b\x01\xb0\x58\x48\x2e\xcb\xd9\x87\x44\x68\xe2\xd0\x0d\xaa\x2c\x10\xdb\x01\xbc\x98\x82\x36\x72\x1a\x41\x13\xb5\x66\xb0\x1d\x3a\x8b\x50\x99\xe6\x50\xe9\xa7\xd3\x88\xe6\xe6\x46\x23\x1b\x3a\x20\xd2\x82\xed\xa5\x4f\x37\x9a\x7a\x8d\x58\xaf\x91\xb1\xd7\x2c\x7a\x58\xda\x1e\x52\x7a\x1d\x8a\x5e\x7b\x2e\x4a\x7b\x9d\x82\x76\xe8\x34\x50\x33\xa4\x31\xcb\xb0\xed\xf1\xe7\xf7\x62\x57\xed\xbf\xa7\xf6\x9f\x64\x8c\x1f\xa9\xd4\x45\x4f\xe2\x11\xf4\x63\x48\x7a\xe7\x91\x9d\x2a\x3b\x38\x13\x90\x71\xb2\x5f\x95\xfa\x48\x8b\x0e\x8c\x26\x0e\x17\x84\x7c\xc0\xc3\x61\xb4\xbf\xc6\x2b\x5d\x17\xa7\x6a\x63\xb6\x0e\x58\x8f\x78\xa4\xce\x91\x9c\x0b\xcf\xad\x81\xd8\x35\xcf\x45\xb0\xdf\x8d\xca\x65\x6f\x7f\xbc\x8f\xb5\x9d\x14\x4c\x89\x47\xa6\xc4\xe3\x53\x92\xf0\x29\xf1\xb5\x29\x49\x94\x29\x01\xe1\x70\xa8\xa2\x65\xa2\xf8\x1a\xb2\xf9\xf2\xc5\xac\xf8\x72\xb2\x02\x65\xb2\xd2\x71\x8d\xab\x49\x8c\x38\x19\xd1\xa9\xf5\x18\x1a\x81\xd9\xba\x33\x1c\x8e\x99\x99\xdc\xd3\x07\x6c\x6b\xac\xcb\x5d\xd5\x80\x55\x09\xf3\xb2\x71\x03\x8f\x64\x6c\xe9\x6a\xcf\x8b\x95\x80\xb3\xb6\xd2\x25\x1a\xf8\x4f\x3e\xe0\x08\x25\xa8\xe1\x36\x0d\xf8\x4d\xd6\x33\x5d\x22\xb2\x45\x41\xec\x1e\xf1\x70\xaf\xda\x47\x81\xcd\x00\xef\xb4\xcd\x48\xce\x5c\x08\x6a\x0e\xf0\x2a\x75\x07\x24\x2e\xc1\x95\xd8\x01\xbe\x9b\xc8\xea\x41\xdb\x4d\xf8\x3b\x88\xfb\xda\xe5\xb2\xcf\x97\xb3\xcb\xf2\xce\xb9\xa1\x33\xe3\xbb\x5d\x35\x7b\x97\x67\x17\xa1\xf2\xda\x77\x12\x19\x8f\x47\xbc\x74\x31\x80\xd5\x76\x98\x04\x98\xdf\xae\xd2\xb8\x78\x54\xdf\x7c\xb4\xcb\x92\x68\x14\x4b\xd6\xe2\x01\x4c\x6f\x49\x5c\x04\x60\xb5\x8b\x82\x0e\xcb\xf0\x1c\xc2\xbd\xa3\xdd\x6e\x0c\xb5\x43\x83\xc6\x6b\xe6\x34\x06\x78\x20\xce\x3d\xe8\xfb\xc8\x5e\x25\xbe\x6d\xfa\x78\xef\xde\x56\xb9\xac\xfe\x02\x89\x5b\x03\xbe\x9b\x3b\x6c\x67\x67\xbd\x91\x61\xb3\xb5\x41\x37\x5d\x9c\x9e\xb2\x77\xda\xe9\xde\x01\x1d\xb7\xb6\xaf\xb3\xbf\xb7\xaf\x23\xe8\xc9\xc0\x6d\xa7\x9b\x27\x05\xed\x8e\xd3\x68\x37\x3b\x2d\xd0\x77\x55\x4c\x1e\xa8\x98\x4c\xb6\xc4\x6c\x3c\x1c\xce\xf6\xd9\x03\xce\xf6\xc0\x61\x21\x98\x6d\xad\x40\xba\xc1\xba\xc3\x61\xdf\x01\xbe\x2d\x82\x1f\xd2\x5d\x54\x0a\xec\x01\x88\x9c\x47\xdc\xda\xa2\x9d\xec\x47\x8b\xe1\x70\x68\x87\xee\xc0\x69\x78\xee\x00\x24\x73\x73\x4e\x23\x99\x9b\xa3\xbb\x2f\x2d\x27\x76\x0c\xf0\x86\xc3\x70\x44\x97\xc4\x4f\xcd\xbc\x5c\x65\x52\x94\xb5\xf0\xf2\xeb\xb0\xc7\xb8\x0e\x7b\xb4\x75\xd8\xd3\x9a\x61\xa4\x94\x0d\xea\x80\xed\xf0\x77\x2a\xd2\x41\x46\xe9\x04\x4b\x02\xe6\xbb\xb5\x7d\xfe\xfe\x64\x9f\x2f\x26\xba\xed\x46\xe9\x44\xa7\xa0\xed\x3b\x8d\xa8\xe9\x53\x2a\x35\xeb\x0d\x87\xb3\xda\xba\x29\x04\x88\xce\x70\xdb\x11\x7b\x44\x9d\xe4\xb6\x3a\xc9\x01\x40\xc0\x73\x66\xd2\xaf\xdd\xb4\x77\x8f\xd4\xca\xe5\x98\x85\xf8\x0c\x29\xbe\x38\x6c\x09\x90\xdd\x06\x01\x59\x02\xf9\xb9\x2d\x5f\xac\x88\x47\x29\x6b\xa4\xc4\x49\xd3\x58\x45\xf1\x30\x2a\xb7\x4c\xa4\x0f\x1f\x2b\x77\x3c\x00\xb9\xb0\x2a\x44\x37\x10\xba\xd1\x70\x88\x66\xd4\xb8\xfa\xe1\x70\x58\xa9\xbb\xae\x4b\xf8\xc6\x50\xc6\x57\xf5\xc8\x2f\x50\x97\xe1\xf1\xe9\x4a\x7b\x9d\x55\x2f\x68\x43\xe6\xfa\x43\xe6\x86\x6f\x55\x0f\xc0\x2a\xe1\x48\x06\x8f\x23\xaf\x1d\x21\x8c\xda\xb1\x9b\xa4\x3d\x67\xd6\xb5\x91\x99\xb7\x4b\x6c\xe8\x54\x71\xf8\xec\x60\x00\xa3\x83\x1e\x8d\x56\xcd\xe9\x80\x4d\x63\xb3\x6b\x9f\x1c\x65\x3e\x4e\xac\x0d\xe0\x81\x1e\xf4\x3a\x5b\xad\x9e\x4a\x6a\x31\x21\x1f\xa6\x16\x16\xeb\x8d\x4a\x7d\xc4\xd1\x6e\xdd\xda\x7c\xf5\x9f\x56\xc3\x3a\x60\x01\xeb\xff\xfb\xf7\xaf\x38\x74\xe5\x2b\x02\xf8\xaa\x00\xbe\xc6\x81\x8d\x4b\xbf\x95\xd0\x9b\x12\xfa\xbd\x84\xde\x12\x05\xbe\xce\x81\xab\xa2\xae\xab\x69\x15\x7f\x95\xd0\x9f\x25\xf4\x0f\x09\xfd\x8d\x43\x37\x45\x4b\x37\x7e\x29\x2a\x7d\x51\xa4\x9c\x93\xb9\xdf\x10\xdf\x5e\x12\xdf\x2e\x09\xe0\xbb\xa2\x22\xd1\x85\x9b\x69\x17\x7e\x29\xa1\x3f\x4a\x48\x4c\xc4\xc6\x05\xd9\x67\xd1\xe0\x4d\x51\xe9\xe6\xf9\xbf\x70\xe8\xf6\xeb\xb4\xa3\xb4\xed\x97\x09\x74\x88\xb4\xf9\x6f\x09\xbd\x21\xa0\xdb\xaf\xd3\xb1\x1d\xa5\x20\x6d\xe3\x59\x0a\x5e\x20\xe0\xe7\x28\x78\x29\x05\x69\x05\x5f\x20\x2d\xbd\xfa\x2f\xab\x61\x3d\x46\x17\xe6\x0d\x0e\x6d\x5c\xf8\x9a\x84\x5e\x94\xd0\xcb\x1c\xba\xf5\x75\x0e\x5c\x17\xb9\xae\x7f\x95\x03\x9b\xaf\x92\xd6\x0e\xd2\xca\x7e\xcd\xa1\xab\x2f\x0b\xe0\x9b\x02\xf8\xb6\x00\xbe\xc3\x81\x2b\xdf\xe0\xc0\xc6\x05\x91\xe9\xba\x48\xba\x79\x99\x03\xb7\x5f\x7f\x97\x43\x9b\xaf\x5e\xb4\x1a\xd6\xe3\xb4\x99\x37\x39\xb4\x71\xe1\xdb\x1c\xba\xfa\x3d\x99\xf4\x1d\x09\x7d\x5f\x42\xaf\x4a\x48\xe4\xbb\x2a\x3e\x5e\x7f\x45\x00\xa2\xae\xeb\xdf\xe2\xc0\xed\xb3\xa2\xc9\x1b\xe7\x09\xf0\x45\x02\xbd\x28\x21\xb2\x46\x8f\xbf\x40\xa0\x97\x04\xb4\xf9\x2a\x99\xee\x43\xb4\x93\xbf\xe1\xd0\x95\x6f\x0a\xe0\x5b\x02\xf8\x36\x07\x36\x2e\x7f\x45\x40\x97\xde\x95\x69\x2f\x4a\xe8\x6b\xf2\xeb\xbf\x39\x74\xf5\x55\x91\x74\xe1\x87\x12\xfa\xb1\xf8\x28\x92\xae\x8a\x94\x2b\xaf\xc8\x1a\x44\xc7\xae\xfe\x8c\x03\x37\x45\x3b\x37\x5f\x96\x99\x2e\xc8\xa6\x45\xda\xcd\xb7\x64\x33\xaf\x8b\x1a\x7e\x22\x93\x52\x48\xd4\x7a\xfd\xfb\x02\xf8\x1e\x07\x36\x5f\x25\x8b\xf9\x04\x9d\x93\xdf\x72\x68\xe3\xc2\x39\x0e\x5d\xff\x01\x07\x6e\x9f\x15\xd9\x36\x5f\x25\xa3\xfd\x34\x2d\xf0\x3b\x0e\xdd\xf8\x07\x07\xae\xbe\xce\x81\x8d\x0b\xbf\x14\x49\xe7\x04\x20\x52\x6e\xfc\x56\xa4\xbc\x21\x52\xde\xe4\xc0\xf5\x33\x1c\xb8\x7d\x4e\xe4\xbe\x7d\xf6\x3f\x12\x7a\x97\x43\x9b\xaf\x92\xb4\x27\x69\x1f\xde\xe2\xd0\xd5\x37\x39\xb0\x71\xe1\x0d\x09\xfd\x96\x43\x37\xcf\xc9\xa4\x34\xdb\x5b\x12\xfa\xbd\xa8\x43\xe4\xdf\x3c\xff\x3b\x09\xbd\xc3\xa1\xdb\xe7\xbe\x2b\xd2\x5e\x25\x1d\x39\x4c\x9b\x7f\x9b\x43\x57\xbe\x23\x80\xef\x0a\xe0\x7b\x1c\xb8\xfa\x96\x00\x7e\x2f\x80\x3f\x0a\xe0\xaf\x22\xf3\xff\x70\x60\xe3\xc2\x9f\x05\x74\xf9\x9b\x1c\xba\x21\x3e\xde\x14\x29\x37\xbf\x2d\x33\x09\xe8\xaa\x2c\x77\x41\xd4\x7e\xfd\x35\x0e\x6c\xbe\xfa\x9e\xd5\xb0\xfe\x8b\x76\xf8\xf7\x1c\xba\xfa\x0f\x0e\xdc\xfa\x26\x07\x36\xcf\x10\x7c\xff\x0c\xcd\xf5\x07\x0e\x6d\x5c\xf8\x2b\x87\x6e\xbc\x25\x93\xfe\xc6\xa1\xab\xff\x94\x49\xff\xe0\xd0\xf5\x9f\x70\x60\xf3\xfc\xdb\x1c\xba\x7d\xf6\x2b\x12\xfa\x9a\x84\x5e\x14\xd0\xb9\x37\x44\x89\x33\x84\x66\x3d\x45\x9b\xff\x23\x87\xae\xbe\x27\x80\x8b\x02\xf8\x0f\x07\x36\x2e\xfc\x53\x42\x17\xc4\xc7\xcb\x32\xe9\xdf\x12\xba\xc4\xa1\x6b\xa2\xfa\x9b\xa2\x8a\xcd\xf3\x6f\x48\xe8\x97\x1c\xba\x7d\xf6\x9b\x12\x7a\x59\x40\xe7\xbe\xc2\xa1\x1b\x84\x04\x3e\x45\x26\xeb\x06\xcd\xf6\x25\xda\x6f\x32\xaa\x23\xb4\xdf\x7f\xe2\xd0\xc6\x85\x77\x05\x74\xf1\x2b\x12\x12\xf9\x36\xcf\xff\x99\x43\xd7\x5f\x17\x49\x67\x08\x09\x7f\x9a\x56\xf2\x67\x0e\xdd\xb8\xc0\x81\x6b\xe2\xdb\x95\x1f\x70\x60\xe3\xe2\x8b\xe2\xdb\x37\x64\xd2\xcb\x22\xe9\x25\x99\xf4\x6d\x09\x7d\x93\x43\x37\x7f\xc9\x81\xeb\x67\x39\x70\xfb\xdc\xf7\x25\xf4\xa6\x68\x9a\x16\xa4\xe3\x24\x34\xea\x69\x36\x4e\xd2\xe6\x51\xda\xc5\xbf\x70\xe8\xca\xab\x02\x38\x23\x80\x1f\x72\x60\xe3\xf2\xab\x12\xfa\xbe\x84\x7e\x2c\x21\x91\xef\xca\x8f\x44\xd2\xc5\xef\x70\xe8\xe6\x1f\x65\xd2\xf7\x38\x74\xed\x3b\x32\x49\x56\x76\x51\x34\x70\x4d\xe4\xba\xf9\x67\x01\xfc\x55\xd4\x2e\x1a\xbc\xf9\x7b\xd9\xb2\xac\x53\xd4\x74\xe3\x07\x22\x93\xec\x81\xc8\x73\xfd\x97\xb2\xd8\xeb\x12\xfa\x99\x84\xd2\xaf\xe7\x24\xf4\x86\x84\x64\x9f\x2f\xff\x44\xb4\x24\x7a\x71\x43\x0c\xf1\x8a\xfc\xf4\xae\x68\xf2\x65\x01\xfc\x82\x03\xb7\xcf\x7e\x5b\x42\xa2\xce\xeb\xb4\x99\xc3\x34\x8d\x76\x96\x76\x9b\x26\x3e\x4b\x17\x8b\x20\xc1\x33\x74\xb1\xfe\xca\xa1\x8d\x8b\x3f\x94\xd0\x8f\x39\x74\xfd\x4d\x0e\x6c\x9e\xff\x35\x87\x6e\x9f\xfd\xbe\x84\x5e\x95\x90\x28\xba\x79\x86\x74\xef\xb3\xb4\xe2\xf3\x1c\xba\x7d\xf6\xc7\x12\xfa\x09\x87\x6e\x7d\x9b\x03\x9b\x67\x08\x86\x1e\xa3\x05\xfe\xc6\xa1\x6b\x3f\xe4\xc0\xc6\xc5\x9f\x88\x24\x01\xdc\xfc\xbe\x00\x5e\x95\x99\x7e\x26\xa1\xd7\x45\xf6\x1f\xcb\xa4\x73\x1c\xba\xf5\x1d\x0e\x6c\x9e\x7f\x93\x43\xb7\xcf\x8a\x92\xb7\xcf\xfd\x56\x42\x5f\x13\xf9\xce\x90\x4d\x71\x9c\xf6\xec\xef\x1c\xda\xb8\x74\x8e\x43\xd7\x7e\x26\x92\x2e\xbe\x29\x92\x5e\x97\x49\xbf\x14\x49\xbf\x94\x49\xbf\x95\xd0\x1b\x12\x7a\x8b\x43\x37\x7f\x22\xf2\x8b\xea\x37\xcf\xbf\xcb\xa1\xdb\xe7\xde\x92\xd0\x8b\xe2\xeb\x19\xc2\x8d\x9c\xa0\x5d\xfb\x07\x87\x36\x2e\xfe\x9e\x43\xd7\xde\x94\x49\x7f\xe4\xd0\xcd\x9f\x89\x6f\x6f\xc8\x6f\x7f\x95\xd0\x9f\xc5\xc7\xdf\x72\xe0\xba\x28\x77\x5d\x7c\xba\xf9\x2e\x07\x6e\x9f\x7b\x59\x40\xaf\x93\x8e\x9d\xf8\x22\xed\x0f\x59\xce\x67\x69\x7f\xde\xe1\xd0\x95\x9f\x0a\xe0\x67\x02\xf8\x39\x07\xae\xbd\xc5\x81\x8d\x8b\x17\x44\xd2\xef\x65\xd2\x25\x91\xf4\x47\x51\xee\x75\x0e\xdc\x10\x15\xdc\x78\x4d\x00\x3f\x12\x80\x68\x6d\xe3\xf2\x6f\x45\xf9\x3f\x0b\xe0\xaf\x22\xd3\x19\x0e\xdc\xfc\xa1\x00\x7e\xcc\x81\xeb\x7f\x91\xe5\x65\x4f\x2e\xcb\x6e\x5e\xfe\xb3\x84\xfe\x28\xa1\xbf\x4a\xe8\x4d\xd9\xf7\xbf\x89\x26\xff\x26\x93\xfe\x29\xa1\x7f\x70\xe8\xd6\x8b\x1c\xd8\x3c\x43\xa8\xe7\xe7\xe8\xb4\xfd\x93\x43\x1b\x17\xff\x2d\xa1\x77\x39\x74\xfd\x6f\x1c\xb8\x7d\xf6\x1c\x87\x6e\xbd\x24\x93\x08\x8a\x7d\x8e\x0a\x06\x67\x08\x8a\x3f\x47\xab\xfb\x17\x87\x36\x2e\x7d\x45\x42\x5f\xe3\xd0\xb5\x7f\xc8\xa4\x97\x25\xf4\xa2\x84\xbe\xc9\xa1\xcd\xf3\x7f\x13\xd0\x19\xc2\xb4\x7c\x9e\x56\x7c\x81\x43\x1b\x97\xbe\x2d\xa1\xef\x70\x68\xf3\x0c\x21\x35\x5f\xa0\xf9\x2e\x72\x68\xe3\xf2\xdf\x38\x74\xe5\x2c\x07\xae\xfd\x53\x7e\xbb\xc0\xa1\x9b\x22\xd3\xc6\x25\x51\xc5\xb5\x0b\x32\x57\x9a\xff\x1f\x1c\xba\xfe\x77\x0e\xdc\xfa\x9e\xfc\xf6\x2e\x87\x36\xcf\x10\x7e\xe8\x8b\xb4\x17\x97\x38\x74\xed\x22\x07\x36\x2e\x7d\x5f\x24\x5d\x16\xc0\x7f\xe4\xb7\x57\x25\xf4\x43\x0e\x5d\x7f\x87\x03\x37\xdf\xe4\xc0\xe6\xf9\xf7\x24\xf4\x07\x0e\xdd\x3e\xfb\x86\x48\x3b\x43\xea\xf7\x48\xe3\xff\xf9\x2a\x87\x36\x2e\xfd\x8c\x43\x57\x7e\x29\x80\x5f\x09\xe0\x0d\x99\xe9\x77\x12\xfa\x8d\x84\xfe\x20\xa1\xb7\x45\x81\x5f\x73\xe0\xaa\xa8\xfe\xea\xd7\x65\xa6\xf3\x12\xfa\x8b\x84\xde\x91\xd0\xdf\x39\x74\x53\xb4\x74\x43\xf6\xe2\x4d\x91\xf2\x0b\x99\x5b\xb4\x73\x45\xf4\xe6\xc6\x65\x01\x7c\x4f\x54\x24\xba\x70\x33\xed\xc2\xaf\x24\xf4\x27\x09\xfd\x4b\x40\x17\x64\x9f\x5f\xe2\xc0\xe6\x79\x51\xfd\x2d\x31\x71\xb7\x5f\xa7\x1d\xa5\x6d\x93\xbd\xec\x41\xd2\xe6\x7f\x24\xf4\x6b\x01\xdd\x7e\x9d\x8e\x2d\xa4\x20\x6d\x23\xa1\x20\x59\x6b\x6f\x95\x82\x97\x53\x90\x56\xb0\x46\x97\x88\x9c\xe7\xcb\x74\x89\xbe\xc6\xa1\x8d\x0b\x5f\x97\xd0\x4b\x12\xfa\x06\x87\xae\x7f\x45\x00\x22\xd7\xad\x33\x1c\xd8\x3c\x43\x70\xa6\x4d\x2b\xfb\x3a\x87\xae\x7e\x43\x00\xdf\x12\xc0\x2b\x02\xf8\x2e\x07\xae\xfc\x8e\x03\x1b\x17\x44\xa6\xeb\xdf\xe4\xc0\xcd\x7f\x73\xe0\xf6\xeb\xef\x71\x68\xf3\xe5\x17\x05\x74\x86\x34\xdd\xa1\x0d\xbe\xc8\xa1\x8d\x0b\xaf\x70\xe8\xea\xff\xc8\xa4\xef\x4a\xe8\x07\x12\x3a\x23\x21\x91\xef\xaa\xf8\x78\xfd\x3b\x1c\xb8\xf5\x63\x01\xbc\xc6\x81\xdb\x67\x2f\x71\xe8\x06\x59\x99\x0e\x95\x9a\x5f\x16\xd0\xe6\x19\xb2\x57\x20\xed\xd0\x4b\x1c\xba\xf2\x96\x00\xde\x16\xc0\xef\x39\xb0\x71\xf9\xab\x02\xba\xf4\x9e\x4c\x7b\x49\x42\x5f\x97\x5f\xff\xc3\xa1\xab\x67\x44\xd2\x85\x1f\x49\xe8\x35\xf1\x51\x24\x5d\x15\x29\x57\xfe\x20\x6b\xb8\x2c\xbe\xfd\x9c\x03\x37\x45\x3b\x37\xbf\x21\x33\x5d\x94\x4d\x8b\xb4\x9b\x6f\xcb\x66\xce\x8a\x1a\x7e\x2a\x93\x52\x48\xd4\x7a\x4b\x14\xbc\x25\x52\x6e\x88\x72\x9b\x67\x48\xff\xba\x74\x72\x5e\xe6\xd0\xc6\x85\x5f\x70\xe8\xfa\xab\x1c\xb8\x7d\xf6\xdf\x1c\xda\x3c\x43\xa6\x7f\x85\x16\xf8\x06\x87\x6e\xbc\xc3\x81\xab\x67\x39\xb0\x71\xe1\x57\x22\xe9\x17\x02\x10\x29\x37\x7e\x27\x52\x7e\x2d\x52\x7e\xc3\x81\x5b\xbf\xe4\xc0\xed\x73\x22\xf7\xc6\x3b\x17\x45\xda\xd9\xf7\x38\xb4\x79\x86\xcc\x65\x8f\xf6\xe1\x9b\x1c\xba\xfa\x1b\x0e\x6c\x5c\xf8\xb5\x84\x7e\xc7\xa1\x9b\xbf\x90\x49\x69\xb6\xb7\x25\xf4\x07\x01\x5d\xfa\xb1\xa8\x4d\x94\xdc\x3c\xff\x96\x84\xfe\xc9\xa1\x5b\xa2\x8e\xeb\x64\xee\x7a\xab\xb4\x47\x84\x41\x42\xb4\x47\xdf\xe2\xd0\x95\x3f\x0a\xe0\x4f\x02\xf8\x33\x07\xae\xbe\x2d\x80\x3f\x08\x40\xe6\xf9\x0b\x07\x36\x2e\x48\xe8\xb2\xa8\xf2\xc6\xf7\x39\x70\x53\xa4\xdc\x7c\x45\x66\x12\xd0\xd5\xb4\x06\x51\xe9\xad\xb7\xc4\xb7\xf3\x1c\xd8\x3c\x43\xd0\xe4\x4b\xb4\xc3\xdf\xe6\xd0\xd5\x77\x38\x70\xe3\xaf\x1c\xb8\xf5\x2d\x0e\x6c\x9e\x21\x27\xc4\x49\x9a\xfd\x15\x0e\x6d\x5c\x38\xcf\xa1\x1b\x6f\xcb\xa4\xbf\x73\xe8\xea\xbf\x64\xd2\x3b\x1c\xba\xfe\x53\x0e\x6c\x9e\xff\x3d\x87\x6e\x9f\xfd\xaa\x84\xbe\x2e\xa1\x97\x04\x74\xee\xd7\xa2\xc4\x19\x82\xb8\x3e\x6d\xfe\x3b\x1c\xba\xf6\x15\x0e\x5c\xbd\x24\x80\x77\x39\xb0\x71\xe1\x5f\x12\xba\x28\x3e\xfe\x5b\x26\xfd\x47\x42\x97\x45\x5d\xef\x09\xe0\x6b\x1c\xb8\xfe\x33\x0e\xdc\xfa\x03\x07\x36\xcf\xff\x8a\x43\xb7\xcf\x7e\x4b\x40\xe7\xbe\x2a\xd3\xbe\xc1\xa1\x1b\xf4\x23\x9b\x34\xc2\x17\xf6\x69\xaf\xbf\xcb\xa1\x8d\x0b\xef\x09\xe8\xe2\x57\x25\xf4\x75\x0e\xdd\x3a\x2f\x80\xbf\x70\x60\xf3\x0c\xd9\x52\x01\xad\xe3\x7b\x1c\xba\x71\x91\x03\xd7\x5e\xe4\xc0\x95\xf3\x1c\xd8\xb8\xf8\x92\xf8\xf6\x4d\x99\xf4\x0d\x91\xf4\xb2\x4c\x7a\x45\x42\xdf\xe2\xd0\xf5\x73\x1c\xb8\xf5\x37\x91\x5d\x7c\xba\x7d\xee\x07\x12\xfa\x8d\xe8\x03\x59\x86\x80\x8d\x92\x94\x0c\x69\x0f\xff\x87\x43\x57\xfe\x26\x80\xbf\x0b\xe0\x1f\x1c\xd8\xb8\x7c\x46\x42\x3f\x90\xd0\x6b\x12\xfa\x91\x28\xf0\x8e\x48\xba\xf8\x5d\x0e\xdd\xfc\x93\x4c\x12\x0d\x5d\xfb\xae\x4c\x92\x95\x5d\x14\x0d\x5c\x13\xb9\x6e\xfe\x45\x00\xe7\x45\xed\xff\x14\x29\x7f\x90\x2d\xcb\x3a\x45\x4d\x37\x5e\x15\x99\x64\x0f\x44\x9e\xeb\xbf\x92\xc5\xce\x4a\xe8\xe7\x12\x4a\xbf\xfe\x42\x42\xbf\x96\x90\xec\xf3\xe5\x9f\x8a\x96\x44\x2f\x6e\x88\x21\x5e\xb9\x20\x52\xde\xe3\xc0\xad\x1f\x72\xe0\xf6\xd9\x57\x24\x24\xaa\xba\x25\x66\xeb\x3a\x6d\x86\x52\x06\x0a\x51\x86\xe3\x2c\xed\x76\x48\x17\x8b\x74\x68\x40\x17\xeb\xfb\x1c\xda\xb8\xf8\x23\x09\xbd\xc6\xa1\xeb\xbf\x11\x49\xef\xfc\x87\x43\xb7\xcf\xfe\x40\x42\x67\x24\x24\x8a\x6e\x9e\x21\xa4\xfb\xcb\xb4\xe2\x1f\x70\xe8\xd6\x2b\x1c\xb8\x7d\xf6\x35\x09\xfd\x94\x43\x9b\x67\xc8\x24\x45\xb4\xc0\xab\x1c\xba\xf6\x23\x0e\x6c\x5c\xfc\xa9\x48\x12\xc0\xcd\x1f\x08\xe0\x8c\xcc\xf4\x73\x09\x9d\x15\xd9\x5f\x93\x49\xbf\xe0\xd0\xad\xef\x0a\xe0\x3f\x1c\xb8\x7d\x56\x14\xbc\x7d\xee\x77\x12\xfa\x3a\x87\x36\xcf\x10\x8e\x37\xa6\x1d\x3b\xc3\xa1\x2b\xbf\xe0\xc0\xb5\x9f\x73\x60\xe3\xe2\x6f\x44\xd2\x59\x99\xf4\x2b\x91\xf4\x2b\x99\xf4\x3b\x09\xfd\x5a\x42\x6f\x73\xe8\xe6\x4f\x45\x7e\x51\xfd\xcd\xf7\x38\x70\xfb\xdc\xdb\x12\x7a\x49\x14\xbc\x24\x1a\xdf\x3c\x43\x2a\xc3\xb4\x8b\x3f\xe4\xd0\xc6\xc5\x3f\x08\xe8\xd2\x6b\x1c\xba\xf6\x1b\xf9\xf1\x4f\x1c\xba\xf9\x73\xf1\xed\xd7\xf2\xdb\x79\x09\xfd\x45\x7c\xfc\x1d\x07\xae\x8b\x72\xff\xf7\x9b\x1c\xd8\x3c\xff\x5b\x0e\xdd\x3e\xf7\x0d\x01\xbd\x4e\x7a\x8b\x19\xb3\x45\x38\xf5\x84\x76\xed\x47\x1c\xba\x72\x51\x00\x97\x04\x70\x99\x03\xd7\xde\xe6\xc0\xc6\x45\x91\xe9\xda\x1f\x64\x92\xcc\xf5\x27\x51\xee\xdf\x1c\xb8\xf1\xba\x00\x7e\x22\x80\x1f\x0b\xe0\x67\xa2\xfc\xe5\xdf\x89\xf2\x7f\x11\xc0\x79\x91\xe9\x87\x1c\xb8\x29\x3a\x79\xf3\x35\x0e\x5c\xff\xab\x2c\x2f\x7b\x72\x59\x76\xf3\xf2\x5f\x24\xf4\x27\x09\x9d\x97\xd0\x6f\x64\xdf\xff\x2e\x9a\xfc\xbb\x4c\xfa\x97\x84\xde\xe1\xd0\xff\xfd\x16\x07\x36\xcf\x90\x92\xab\x74\xda\x7e\xcc\xa1\x8d\x8b\xff\x91\xd0\x7b\x1c\xfa\xbf\xaf\x70\xe0\xf6\xd9\x5f\x88\xa4\xef\xc8\x24\x82\x76\xab\x4c\x82\x20\x8b\x74\x8a\x56\xf7\x1a\x87\x36\x2e\x7d\x55\x42\x5f\xe7\xd0\xb5\x77\x64\xd2\x37\x24\xf4\x92\x84\x7e\x22\xa1\x6f\x71\x68\xf3\xfc\xdf\x05\x74\x86\xcc\xee\x69\xda\xc4\x4f\x38\xb4\x71\xe9\x15\x09\x7d\x97\x43\x9b\x67\x08\xef\xb1\x46\xf3\xfd\x94\x43\x1b\x97\xff\xce\xa1\x2b\xff\xe1\xc0\xb5\x7f\xc9\x6f\x17\x39\x74\x53\x64\xda\xb8\xf4\x3f\x22\xfb\x7b\x32\x97\xcc\x7f\x29\xad\xf5\x1d\x0e\x5d\xff\x07\x07\x6e\xfd\x8f\xfc\x26\x4a\x6e\x9e\x21\x6b\xf9\x02\xed\xcf\xcf\x38\x74\xed\x12\x07\x36\x2e\xfd\x40\x24\xfd\x5b\x00\xef\xca\x6f\x67\x24\xf4\x23\x0e\x5d\xff\x27\x07\x6e\xfe\x86\x03\xb7\xbe\xc2\x81\xcd\xf3\x7f\xe4\xd0\xed\xb3\xbf\xe6\xd0\xfb\xe4\x00\x7e\xff\x07\x04\x22\xdb\xe9\xfd\x1f\x11\x88\x4c\xed\xfb\xaf\x11\x88\xf0\x61\xef\xff\x94\x40\xbf\x97\x10\x59\xdc\xf7\x7f\x41\x20\x72\xfa\xbf\xff\x1b\x02\xfd\x41\x42\x64\x78\xef\xbf\x4d\x20\xd2\xd8\xfb\xe7\x09\x44\xd0\xf2\xfd\x77\x08\x44\xb8\xcd\xf7\xff\x45\x20\x82\xb4\xef\x5f\xb4\x80\xf5\xbf\xdf\x16\xd0\xfb\xdf\x97\x69\xb4\x8d\xf7\x08\x44\x16\xed\x7f\x5f\x22\xd0\x2b\x02\x7a\xff\xaf\x32\x8d\xf4\xf4\x7f\xbf\x45\x20\xc2\x25\xfd\xef\xd7\xad\xd1\x8c\xe9\x49\x7e\xcb\xaa\xb2\x68\x8d\x36\x74\xaa\x11\xa4\x46\xce\xf6\x7c\xf3\xbf\x9f\x4f\x6a\xb5\x5a\xad\x42\xfe\x3c\x78\xa8\x35\xbf\x02\x0c\x56\xb5\x71\x13\xb6\x86\x43\x48\x8d\x32\x67\x74\xa3\xcc\x08\xc6\xa1\xbf\x0a\xa3\xf9\x2e\xf4\x70\x12\xc1\xd8\x02\xcd\x96\x6a\x60\x9a\x33\xe3\x94\x25\x84\xb7\x6c\xee\x01\x69\x99\x43\x00\xf1\x3c\x35\x9f\x46\xed\xf1\x8f\x47\x6f\xd9\xbc\xaa\xb0\x80\xf4\xd1\x58\x4f\xdf\x1d\x6f\xcc\xd6\x80\xd9\x9c\x18\x0b\x0b\x8b\xd1\xc8\x29\x1e\xae\x00\x3e\x79\x23\x96\x83\x99\x6f\x87\x01\xf6\x50\x00\xa3\x4a\x07\x2e\x27\x2b\x15\xaf\xe3\x0d\xf0\x56\xa7\x64\x5e\x84\x15\x9f\xfa\x1d\xf1\xd4\xee\x13\x57\xa9\x61\xb6\x1d\xc0\x53\xa5\x63\x70\xe5\xd0\xe9\x81\x6d\xfd\xf7\xfc\xa2\x35\x17\xcd\x59\xf3\x76\x75\xce\x99\xb7\xe6\xe0\x9c\xf5\x29\x6e\x43\x19\x24\xbe\x3f\xeb\xba\xa9\xdd\x6e\xb3\xde\xba\x13\x2b\x3e\x61\xac\xcd\xec\x9c\x0e\x8a\x59\x78\x9c\x4c\xc2\x01\x36\x07\x55\x78\x1a\xc3\xa0\x63\xaf\x2f\x31\xb3\xfe\x63\x34\x5c\x77\xb4\xd6\xa0\xae\x1b\x28\x40\xda\x3a\x50\x83\xed\xa5\x38\x19\xc0\xa8\xea\x0d\x06\xfe\x9a\x4d\x52\x80\x34\x04\x73\x00\xcb\xa1\xd7\x35\x1c\xda\xa6\x64\x97\xcc\x06\xae\x1e\xd1\x12\x9d\x11\x68\x7b\xc1\x41\x0f\x7b\x7e\xb8\x72\x28\xc0\x11\x82\xf1\x63\x6b\x27\xd6\x06\xb0\x91\xa7\x10\x56\x3f\xec\x40\xdf\x72\x5d\x17\x0e\x87\x13\xfb\x46\x6a\x9e\x50\xad\x30\x4c\xc3\xae\xa9\xc3\xd5\xd4\xf3\x21\xb6\x1d\x10\xa4\xd6\x6e\x00\xb1\x02\x01\xf9\x34\xf0\xda\x90\x67\x7d\x26\x82\x5d\x74\x1a\x84\x6e\x0d\x78\x2e\x96\x4f\x1e\xef\xf7\x52\x5b\xe5\xd8\xc5\xdc\x24\xb9\x52\x9f\x75\xdd\x58\x5a\x55\x41\x47\x58\xee\x12\x64\x8a\x41\xa6\x81\x41\xd8\x39\xa2\xb4\x31\x1c\x22\x67\x26\x19\x0e\xed\xc4\x8d\xab\xf1\xc0\x47\xd8\x86\x73\x56\x3c\x6f\x39\xd5\x41\x38\xb0\x1d\x07\x04\x55\xaf\xd3\xe1\x2f\x6c\x27\x8e\x7c\x4b\x3a\xd8\xe2\x5e\x9a\x4c\x3e\xb9\x6b\x02\xc9\x5f\xe9\x7a\x6d\x1c\x46\x6b\x45\x99\xfa\xde\x49\x58\xe9\x20\x3a\xff\x5e\xb4\x96\xd9\x5c\x64\xff\x6c\xd7\x5f\x41\xc7\x2e\xee\x7f\x07\x52\x6f\x0b\x16\x26\xfd\x4b\x71\x15\x32\xa4\x28\x97\xed\x5c\x9a\x92\x6b\x09\x7a\x27\x97\x62\x08\x03\x87\x3f\x07\x9d\x6b\x41\xd9\x2d\x8a\x89\x25\x76\xd6\x6d\xc3\x1b\xe8\xe9\xab\xdb\x61\xb7\x84\x1d\xc7\xf8\x88\xf7\x41\x2f\x08\x42\x5c\x6a\x7b\xbe\x5f\xf2\x4a\x74\x5e\x4b\x5e\x5c\xf2\xa4\x5d\xab\xe5\x8c\x1c\x86\xec\x50\x6c\x40\xd1\x73\x3c\x1c\xe6\x86\x33\x92\xd6\xce\xe9\x33\xea\x0a\x66\xe7\x6d\x69\xf9\xbb\xec\xd5\x93\x70\x2d\xb6\xb5\xfa\xa9\x9d\x5f\x5a\x4b\xcf\x8b\x4d\xde\x31\x64\x94\x25\xad\x9c\x5e\x6c\x05\x1a\x9d\x6a\x78\xc7\x6d\x48\x5a\x19\x71\x93\x52\xf1\x38\x3e\xef\x92\xa0\x5e\x1c\xaf\x8e\xe2\x1e\x8c\x1a\x59\xab\x4b\xee\x68\xd2\x45\x01\xdf\x32\x64\x9c\x36\xa4\xa4\x36\x25\xd1\xac\x7f\xa7\x71\xe4\xb5\xf1\xe3\x8c\x70\x1e\xa2\x28\x6e\x47\x80\xe5\x95\x58\x13\x28\x0b\xc5\x17\xa9\x74\xe8\xf4\x80\x9a\x6e\x96\x70\x58\x22\x2d\x35\x4a\xf7\x59\x73\xb0\xda\x4d\x7c\x9f\x34\x37\x67\xdd\x57\x3a\x85\x70\x0f\x05\x24\x3d\x22\x3f\x97\x13\x5c\x5a\x09\x71\xe9\x3e\xe9\xbb\x74\x5f\xb5\xf4\x38\xea\x94\xd6\xc2\xa4\xd4\x0d\xa3\x15\x48\x1f\x6c\xbf\x8f\x6d\xb4\x12\x27\xe6\xd9\x6a\x16\x2d\x69\xfb\x49\x87\x10\xf7\xc2\xc4\xef\x3c\x17\x79\x83\xc3\x2c\x26\xf6\x13\x6c\x0b\xda\x01\xa0\xaf\xd7\x07\xae\x5d\x03\xf2\x20\x75\xec\x80\x90\x86\xd1\x08\x0c\xbc\x28\x66\x4e\x5d\x99\x97\xfd\x67\xc9\x88\x61\x95\x7e\xef\x90\x0c\xf2\x69\x7f\xee\xc6\xca\xf7\x54\x24\x80\x40\x00\xd4\xa2\x95\x92\x22\xeb\x51\x66\x09\xbd\xe0\xba\xae\x78\xf9\x5d\x38\x98\xa0\x66\xad\x25\xb2\x35\xd2\x6c\xa1\xc8\x46\x6d\x5f\x9b\xf5\x16\xff\xbd\x68\x47\x6e\xd8\xac\xb5\x40\xe0\x5a\x8f\x5a\x73\xa8\x59\x6f\x39\x0d\x1b\xd3\x2c\x40\x7e\xa2\xc9\x33\xd4\x01\x81\x3b\x84\x90\x1a\x94\x56\x30\x6d\x17\x44\xae\xc7\x0a\x78\xe4\x88\xb5\x84\xef\x1a\x39\x52\xa2\x72\x99\x34\x8d\xab\xbe\x17\x33\xc3\xf6\xa3\x5d\xdb\x52\x7c\xda\x2c\x50\x63\x13\xaa\x25\xce\x05\x00\xbb\xb8\x1a\xfb\xa8\x0d\xed\x7a\x5d\x58\x0f\x47\xae\xad\x4c\x47\xc3\x72\x9c\xb4\xa3\xdc\x88\x35\x00\xaa\xbd\x34\xdd\xcf\x96\xa4\xf7\x72\x95\xd7\xd3\x85\x20\x8c\x92\xc0\xaf\x06\x04\x03\x7a\x10\x34\x30\x3f\x0a\xd9\x4f\x7b\x9d\x6c\xb1\x46\x34\x72\x00\x03\x64\x89\xe7\x10\xee\x85\x09\x35\xcf\x6d\xc4\x80\x34\xd4\x08\x40\x14\x86\xb8\x91\x00\xbe\x9d\x8e\x40\xdc\x0b\x59\x53\x16\x4f\xb2\xe6\x58\x17\x8f\xe3\x08\x05\x2b\x55\x76\x2a\x74\xd7\xec\xc8\x21\x38\xe4\x27\x11\x0d\x62\xd8\x21\xb5\xc6\x8c\x87\x30\xf1\x15\x84\xee\x9f\x08\x59\x1d\x66\x87\xac\x31\xc7\xe9\x1c\x59\x77\x3c\x67\x35\xac\x11\x28\xc2\xf6\x3c\xf3\x38\x5b\x1f\x8d\x63\x67\x6c\x4e\x39\x59\x43\x8f\x79\x31\xec\x1c\xe3\x67\x95\x3b\x5b\xdb\x32\x5b\x13\x08\x42\x1c\x84\x51\x9f\x4e\xc9\x41\xaf\xdd\x83\x64\xef\x45\xe9\xde\xe3\x99\x32\xd3\xe6\x9a\x12\x87\xc3\x69\x8a\x12\x59\xab\x8b\x56\x44\xcf\xcc\x5f\x09\xbe\x92\xbf\x96\xe8\x63\x07\x0e\x22\xd8\xf6\x30\xec\x3c\xa3\x33\x15\x2e\x99\x34\x39\x02\x03\x03\x56\x32\x0d\x92\x4a\x6d\x76\xc1\x17\x37\x93\x4e\xd8\x9c\x91\xc0\xb7\x1c\xe5\xe6\x7c\x98\xa4\x4d\xd4\x95\xcc\xc5\xd5\x1c\x7e\x4a\xa2\xc3\x77\x89\x25\xcf\x46\xd7\x25\x78\x4f\x8e\xd7\x1e\x8a\x9b\x51\x8b\xee\x58\x0e\xdb\x98\x10\xbf\xc4\xf7\x5d\x37\x90\xe9\x55\xf5\x2c\x61\x39\x46\x60\xc9\x3c\x0b\xc2\xa6\x5f\x21\x2c\x52\x54\xe1\xee\x13\xf5\x45\xab\x07\xfd\x01\x8c\x08\x4d\xc1\xcd\x5a\x6b\x91\xfc\x43\xb0\x77\x0e\x13\x9a\x24\x65\xe2\xa5\xf9\x15\x60\x55\x2c\xa7\x21\xbf\x6b\x3b\xad\xe3\xc5\x3d\x18\x91\x19\xd3\x8b\x3d\x5f\x25\xe5\xe6\x2d\xc7\x69\x40\x65\x07\x16\x2e\x56\x06\x27\x94\xc5\xca\x7f\x71\x09\x0b\x69\x39\x23\x30\x08\x3b\x74\x4b\x3c\x15\x86\x27\x93\x01\xa1\x1c\x0c\x41\x32\x7b\x97\x1f\xb6\x55\x03\x89\x11\xeb\xa2\x52\x58\x5c\x25\x4b\x43\x38\x2e\x37\x4a\x07\xf4\xdf\x29\x35\x7d\x7e\x7e\x1e\x58\x96\xe3\x00\x38\x67\xcd\x33\x61\xc9\x9a\x63\xa5\xd2\x3e\xa5\x47\x7a\x11\xfa\x8c\x61\x9a\xc7\x90\x19\xed\x54\x2d\x9a\x00\x1b\x03\xa8\xcc\x8f\x0c\xa2\x10\x1f\x0e\x8e\x27\xcb\x1d\x94\x67\x46\xb6\xd7\x27\xd4\xb5\xf1\x9c\x6b\x29\xae\xd5\x96\xea\x53\x4e\x4f\x6a\x32\x3d\xc3\xa1\x3a\x8f\xf3\x55\x0c\x63\x6c\x43\xd3\xc2\x48\x4f\x92\x69\xc6\xc9\xb7\xc6\xa1\x60\x05\x05\xe6\x9d\x60\x68\x61\xce\x9a\x87\xb4\x80\x45\xbb\x6f\x12\xac\x7a\x5e\x4c\x76\x9a\x46\x54\x8c\xac\x18\x4e\x3b\x71\x2c\x4c\x30\x3c\xe2\x0d\xa6\xed\x06\x21\x1c\x73\xd6\x7c\x44\x8a\xc5\xe3\xbb\x12\x39\xd3\x70\x85\x72\xaf\x13\xf6\x89\x77\xea\x04\x47\xef\xa2\x65\xd7\x68\x0b\x4c\x6b\xa0\x34\x08\x97\xcb\xb6\x10\xd6\x4f\x1c\x3a\xf2\xcc\x53\x07\x4e\x1c\x3a\xde\x34\x0e\xa6\xe5\x00\x3c\x02\x7d\x0f\x05\x05\xe8\x8f\xba\xb6\x45\x3e\x33\x94\x30\xad\xbb\x22\x05\xb0\x53\x75\x9e\xf0\xab\xff\x3f\x7b\x7f\xba\xdd\xb8\xad\x34\x8c\xc2\xff\x7d\x15\x6d\x3e\x89\x16\x20\x42\x14\xa9\xd9\xb4\x61\x7d\x9d\x1e\x76\xf7\xde\x3d\xa5\xa7\xa4\xa3\x56\xfc\xd2\x12\x24\x21\xa6\x48\x05\x04\x3d\xc4\xe2\x7b\x13\xdf\xdf\x73\x1b\xe7\x06\xce\xa5\x9c\x2b\x39\x0b\x00\x07\x50\xa2\x64\x3b\xe9\x3c\xc3\xbb\xf6\xea\xd5\x16\x09\x80\x85\x42\xa1\x50\x28\x14\x0a\x05\x35\xb6\xb2\x03\x41\xd5\xb0\xab\xbe\x2c\x4b\x10\xa0\x00\xc1\x14\x68\x45\xf5\x49\xa6\xae\xdc\x39\x3e\x76\x8e\xc9\xbc\xc8\x48\xd5\x66\x1a\xaa\x90\x31\x96\x74\xbc\xa3\x8c\x22\x60\xde\x40\xc5\xf0\xef\x3c\xce\x09\x0b\x22\x77\xe3\x24\xfb\x96\x36\x31\x2a\x8d\x96\x82\x4e\xa8\x94\xbe\x2d\x0e\x52\x25\xa3\xd4\x6f\x2a\x6d\x8b\xe4\xe3\x04\x5a\x8c\x78\xd3\xb7\x81\x7f\x03\x20\x2a\xaf\x5e\x36\x04\x6f\x66\xb7\x28\x8e\xd4\x03\x63\x57\xdb\xe4\x99\xfa\x5c\x43\xb7\x51\x88\x59\x66\x98\xa0\x27\x61\x71\xf4\xdb\xc3\x6c\x44\xc7\x96\x58\x76\x66\x8b\x4b\x31\x68\xbc\x5a\x0d\x78\xaa\x1a\x75\xc7\xb6\xb6\xa4\xf2\x10\x81\x10\x79\xb5\xda\xce\x91\xe5\x29\x8d\xd9\x83\x28\x53\x53\xcf\xfc\x70\xae\x10\x14\x2b\x14\xe4\x41\x54\x98\xbd\x92\x04\x6d\xd6\x51\x39\xe3\x94\x26\x4a\xb1\x9a\x62\xd1\x24\x64\xd9\x12\x8f\x1c\x4a\x65\x7e\x27\x4e\x62\x59\xb4\x4f\x14\x54\x2e\xca\x1f\x2f\xcf\xe9\x3c\x0e\xe3\xe8\x91\xfa\xe8\x91\xe4\x34\xb5\xe8\x13\x8b\x3b\x2f\x98\x66\x2b\x34\xb5\xa6\xd9\x53\x7d\xb1\xa0\xba\x43\x28\x65\x0b\xe3\xdc\xf6\x50\x68\x01\xcd\x06\x18\xfd\xfa\xb5\x39\xae\xc3\xef\x9a\xc8\x68\x9e\x7d\xe7\x6c\xac\x0b\xab\x40\x06\x70\x98\x9f\x9d\x46\xbe\xec\x04\x75\x21\xa3\x3a\x55\x7d\x0f\x6d\xac\x54\xc5\xc6\x02\x9b\xa3\x43\x1b\x26\xa8\xe8\x60\x77\xd3\xb8\x43\x67\xe9\x01\xcd\x67\x6f\x3e\x5b\xaf\xde\xfe\xe3\xec\xf5\xdb\xa7\x9f\x5e\x3d\x3b\x7b\xff\xec\xc3\xdb\x57\x9f\x9f\xbd\x5f\xaf\xb9\x25\x56\x24\x32\x2f\x4b\xcc\x44\x73\xb1\xc8\x1c\x1a\xa3\xff\xf7\xff\xfa\xff\x8f\x0d\xd7\x18\x3d\x1a\x1b\x07\x81\xa6\x81\x64\x5a\x58\xcf\x1e\x1a\x96\xe1\x8a\x4e\x7c\xcc\x98\x77\x03\x7a\x76\x63\xab\x14\xb4\x7e\x0b\x69\x00\x0c\xcb\x80\x88\xad\xd7\x20\x1d\x4d\x5b\x84\x91\x4a\xe1\x24\x0c\xa2\xd0\x27\xb5\x5a\xfa\x60\xd1\x60\x16\x96\xdf\x00\x45\x45\x1d\x28\x40\x72\x8d\x74\x11\x84\x57\xc1\xf3\x90\xfd\x55\xdb\xe3\xe6\x72\x40\x0d\x65\xbe\x63\x28\xf3\x11\x1d\xa3\x74\x65\xc1\x99\x17\x44\x62\x92\xfa\x18\xe6\x26\xe1\xe7\xb1\xef\x07\xb2\x4b\x91\x07\x0f\x22\x31\x48\x47\xd1\x18\x8b\x0e\xcc\x07\x23\xda\xf7\x61\xb5\x26\xb8\xb5\x0e\x25\x89\x8c\xe8\x21\xe6\x05\x44\xb1\x9c\x1d\x24\xd6\x99\xd1\x33\x80\xd2\x50\x9a\xbd\x52\x39\x74\xa4\x05\xa0\x56\xf3\xd4\x6a\x5c\xb6\xaf\x91\x59\x11\x6a\xb5\x5c\xd3\x0e\xd2\x07\x33\xb7\x30\x64\xe3\x4a\x69\xdb\xe9\x9a\x3c\x34\xb3\x82\xa2\xa9\x6a\xe9\xcd\x2a\xe7\x30\x39\x7d\x65\x1c\xae\x6c\x01\x19\x62\x11\xd4\x2a\xce\x8e\x4a\x0f\xcb\x15\x65\xc9\x30\x1f\x62\x95\x8a\x44\xc5\x30\xcb\x2d\x5f\x2a\x80\x92\xfc\x73\x68\x17\x83\x4d\xd4\x9d\x76\xbd\x9a\xea\x72\x46\x40\x3c\x49\xe0\x01\xb5\x18\x09\x57\x44\xad\x88\xc1\x6d\xc5\x9a\x76\x73\x87\x80\xee\x36\x01\x57\x9a\x73\xff\xf3\x63\xec\xdc\x4e\x18\x29\x29\x56\xb9\xad\xa0\x62\xad\x47\x52\xc3\xe0\x30\x7b\x00\x5c\x2c\x8f\x92\xed\xe8\x2e\x77\x18\xa4\xff\xf3\x1a\xaa\xfa\x9e\xe0\x14\x96\x6a\xad\xdc\x09\x82\x45\x78\x8a\x33\x81\x1a\x96\xfc\x30\x25\x3e\xe1\x24\x4b\x43\xa4\xb2\x69\xab\x30\x88\xe8\x25\x69\xaa\x15\x68\xd4\x5c\x92\x29\xf5\xfe\xa6\x46\xa5\xd6\xc0\x6d\xeb\xf1\x96\xdd\x5b\x4a\x60\x8b\x46\x4a\x12\x6f\xcc\x7f\x1f\x64\x90\x3b\x8b\x72\xc2\x3c\x1e\xb2\x47\x34\x33\x3f\x6b\x05\xab\x64\xcd\x68\x8c\x02\x7c\x28\xe6\x83\x43\x07\x85\x99\x35\x80\xb3\x9b\x22\x16\x07\x8a\x30\x19\x6d\xc0\x1f\x03\x78\x7c\x08\x02\x0c\x3c\x1c\x59\x01\xb9\xe6\x00\x42\x6b\x1a\x06\x44\x05\xfc\x90\xe7\xfc\x3d\x4b\xb6\x12\xa2\x43\xbe\x5e\x67\xca\xd2\x21\xc6\x1c\x1e\x8b\x2a\xe1\x71\x32\x91\xbb\x7b\x31\xbc\xa5\x02\x85\x10\xc7\xc9\x8c\x06\x9e\xef\xdf\xdc\x0a\x04\x0e\x83\x5a\x4d\xa8\xfe\x02\xf7\xe2\x09\xc0\xbc\x10\x15\x92\x4e\xa9\x19\x61\xbe\x31\xc3\x12\xd9\xbc\x83\x4a\xf5\x23\xbd\x24\xf9\x91\xd0\xe9\x96\x2b\x69\x27\x9e\x92\x88\xb3\x78\xc2\x63\x46\x1e\x05\x61\xd0\x90\x2d\x3c\xf7\x8b\x2d\x06\x03\x26\x09\xd0\xa3\x6d\xa5\xf1\x07\x25\x6f\xe4\x96\xf4\x4d\x1b\x99\xe2\x4a\x21\x1a\x0f\xee\xb9\xfb\xa7\xb4\x4f\xc9\x69\xd0\x0a\x83\xf4\xf9\xc9\xc2\x0b\xe6\x64\x6a\xe8\x9b\xf4\x42\x81\x49\x75\x6c\x00\x13\x98\x20\x59\x32\x55\xbe\x69\x20\xf9\x2f\x22\xec\x52\x48\x53\x31\xe3\xca\x92\x55\xe6\x7d\x40\x90\x03\x47\xf6\xf8\xa0\x14\x88\xaa\x30\xa3\x4a\xb8\x96\x61\x32\xb8\x63\xb7\x2b\x1b\x28\xe9\xed\xce\xf4\x0f\x31\x5a\x8a\xf4\x3f\x15\xe5\x49\xb4\x4e\xdd\x7d\x9c\xc6\xdc\x48\x67\x7d\x60\x9c\x33\xe2\x5d\xac\x42\x2a\x97\xef\xb7\xaa\x7f\x38\x15\xd2\xed\xd0\x49\xe0\x9f\x8a\xd7\x92\xe3\x2d\x43\xb6\x64\x3d\x7c\x1b\x68\x51\xda\x8a\xe6\x34\x4a\x08\x14\xdf\xba\x7c\xaf\x14\x11\x72\x47\x45\x18\x6b\xfc\x9d\x82\xa4\x5a\x3a\xa6\xb3\x40\x7a\x9f\x9c\x20\xd4\x5e\x5c\x53\xb6\xa9\x10\x79\xe8\x1e\x0d\xfb\xa6\xde\x0f\x07\x8a\x49\x2b\xa6\x29\x25\x8b\x6a\xb5\x34\xb2\xe7\x66\x46\x2e\xa4\x86\x55\xc6\xbc\x74\xa6\x4b\x2a\x97\xe6\xb5\xda\x9e\xea\x88\x25\xb4\x54\x29\x2c\x42\x86\x31\xce\xd3\x0f\xb3\xe7\x62\x73\x6e\x98\xe1\xe6\xe6\x15\x6e\x49\x90\x0f\x8a\xd6\x99\x08\x49\x55\xfa\x4b\x12\x70\x32\x45\xb7\x67\xcb\x70\x72\x41\xa6\xe9\xa8\xe6\xf2\x36\xf5\x39\x4a\x53\x7f\xc8\x19\xd1\x35\xa6\x24\xba\xe0\xe1\xca\x40\x59\x1f\xdf\xb5\x08\x7f\x94\xed\xbf\x17\x62\x27\x05\x6b\xc0\xe1\x68\x2b\xb1\xa8\xcb\x80\x63\x77\x34\x16\x82\xc0\x17\xe3\x33\x20\x2c\x72\x6f\x93\xb4\xde\xf4\xf9\x77\x5f\x97\x82\x74\x06\x0c\x15\x8d\xc6\xc0\x18\x03\xa3\x08\x37\x98\x53\xf7\x8a\x06\xd3\xf0\x6a\xa8\x65\xb9\x0c\xa8\x44\x08\x6b\x35\xf5\xa4\xfc\x40\x5e\x0b\x26\xcb\x26\xb3\xad\x8c\x83\x2d\x6f\x17\xa1\xde\xff\x05\xb1\x5c\xc4\xb9\x79\x7b\x15\x10\x26\xb3\x61\x29\x06\x6d\x39\x2b\x5d\xf1\x94\xe4\x94\x2b\x8d\x49\xf0\x80\xd7\x6a\xa5\xdd\x60\x68\xcd\x42\xf6\xcc\x9b\x2c\x8a\xee\xc9\xb7\x54\x0d\x1a\xed\xde\x2e\x4a\x91\xda\x1a\x45\x01\xda\x8c\x22\x98\xb2\x83\x35\x1a\x97\x26\x0f\x7d\xe5\xa9\xa6\x1c\x55\xce\x28\x02\xd3\x30\x78\xda\x70\x12\x08\xd1\x8e\xba\xd8\x66\x5d\xc1\xbe\x0a\x02\x28\x40\x91\xd4\x95\x87\x21\x3e\x62\x63\x39\x6b\xc9\x56\xc9\x95\xd9\x26\xcb\xfe\x09\xdc\x97\xde\x0a\x54\x79\xba\x08\xce\x68\xec\xdc\x13\x20\x30\xc9\x56\xaf\x8f\x0c\xc1\xd8\xd9\x15\xd9\xaf\xb5\xb9\x77\x6b\xeb\x2b\x2d\xb3\x39\x43\xdf\x8a\x46\x65\x00\xe4\x38\xd6\xbf\x54\x18\xb0\x38\xb0\xc2\x60\x42\x14\xaf\x29\x16\xac\xa8\x12\xa6\xa3\x6a\xe7\xf2\x50\x86\x74\xaa\x18\xbf\x25\x03\xac\x22\xd1\xef\xbe\x01\x01\x17\x2b\xdd\xd2\x1a\x40\xe5\xd2\xe8\xa9\xd0\x7f\xc2\x1b\xf1\xb1\x58\xbb\x5b\x51\x41\x57\x16\x59\x62\xa1\x29\x96\x47\x56\x4a\xe9\x21\xdb\x24\x7c\xe1\x1d\x43\xa0\xbb\x95\xcb\xc8\x32\xbc\x24\x79\x01\xc4\xac\x12\x81\x00\x84\xc9\x41\x81\x6b\x2e\x56\x0c\x38\x22\x63\x4c\x95\xf3\xcd\xab\x34\xb5\x56\x2b\xbd\x96\xba\x3b\xa7\x2e\x50\x0e\x58\x48\xf4\x2c\xa2\x82\xf9\xaa\x54\x17\x21\x4e\x1b\x57\x9e\x98\x28\xa2\xa6\xbc\xef\x3d\x7d\xab\x9a\xf1\xf4\xc2\x95\x89\xcd\x20\x0c\x57\x7a\xca\xdf\xe0\x90\x53\xb5\xc2\xcb\xc3\x22\x0a\x2d\x37\xb7\x6a\x08\xa6\xde\xdf\xe0\x9d\xbe\x48\xa5\x52\xea\xb7\xb1\xf4\x02\x4f\xc6\xf8\xae\x2a\xa3\xb7\xb9\xb2\x40\x99\xb6\xbb\xaa\x69\xcc\x42\xd6\x58\xb1\x70\x49\xe5\x45\x7d\x65\xda\xa9\x28\x6b\x7f\x93\x23\x65\xa6\x6a\xde\xdb\x93\x32\xfb\x20\xd9\x07\x35\x0e\x1e\x0c\xb7\xf8\x64\x2f\xe4\x39\xe1\x3f\x65\x9c\x78\x4f\xc8\xc5\x27\x7b\x21\x9f\x31\x12\x91\xfb\x7b\x94\xaa\xe2\x77\xe1\xfa\x8e\x04\x53\x1a\xcc\x55\xfd\x1f\xb8\xc7\xc9\x43\xd0\xde\xfe\x7a\x6f\x7d\x0b\x2f\x2a\x7d\x71\x7f\x12\x6d\x7d\xb9\xb7\x9e\x8f\x24\x4a\x29\x7a\xcf\x0a\x98\xe6\x7f\xbb\x1b\xac\x1c\x2a\x0f\x82\x1b\xdc\x0b\xae\x18\x60\xcf\x43\xf6\x2e\x1d\x5e\xf7\x03\x4d\xf7\xb9\x0c\xef\x97\x7d\x0f\x5f\xf3\x95\xb7\x62\xec\x63\x76\x92\xdb\x63\x59\x66\x8b\x0d\xb0\xd0\x1b\x0e\x02\xab\xc0\x1e\xeb\x2f\xeb\xf5\xa1\x83\x82\xd4\x55\x23\x56\xf9\x87\x76\x76\x53\x27\x0d\x1e\x49\x4f\x05\xeb\x8a\x51\x9e\xe6\xed\x26\x59\x20\x94\x34\x24\xa6\x8e\x6f\x73\x65\x01\xfb\xef\xe1\xdd\x28\x16\xb5\x98\x27\x12\x23\x21\x54\xb3\xd9\x83\x61\x82\x40\x80\x47\xb7\x17\xe4\xc6\x35\xce\xc9\x9c\x06\x8f\xa3\x9b\x60\x62\x20\xd5\xb0\x6a\x05\x2c\x49\x90\xfa\x80\x04\xd3\x5d\xc5\xf3\x32\x82\x35\x3e\x05\x9c\xfa\x3b\x61\x1e\xda\x79\x61\xe9\x6c\xfe\x32\x98\x85\x3b\x0b\x8f\xc6\x49\x32\x86\xb5\x1a\x07\xac\x58\x72\xa1\x00\x22\x2a\xd3\x10\x85\xca\xf3\xb1\xe8\x0d\xb6\x9f\x89\x77\xf0\xef\x7d\xe6\xc5\x7b\x3b\xb6\x57\x18\xf6\xaa\xcd\x7a\xda\x96\x86\x8d\x18\x2e\x36\x5f\xf2\x0d\x97\x63\x7e\x92\x3d\x1f\x73\xd3\x84\x6c\xc4\xc7\x98\x8c\x78\x6e\xc8\x61\x32\x7c\xf4\x7a\xbd\x51\xd5\x3e\x23\xe1\x7a\x6d\x8c\xd4\x52\xed\xd1\xe3\x6c\x09\x34\x16\xab\xb6\x74\x0c\x14\x7e\xa7\x3c\xcc\x96\x25\x9e\xef\x6b\xe6\x45\xd5\x90\x19\x0b\x97\x42\x05\x29\xd7\x2f\x34\xe7\xfb\xd9\xe3\xa2\x15\x23\xde\x74\xa7\x29\x0e\xc0\x72\x48\xec\xff\xc3\x45\x07\xc5\xf6\x81\x16\x9d\xb9\x90\xcf\xa6\x99\xa8\x2d\xaa\x1d\xa2\x45\xe8\x9c\xff\x99\xc2\x85\x46\xef\x53\xfd\x85\x4c\xf1\xa1\x93\x26\x72\xb2\x8c\x24\x03\xbf\xf6\x56\xba\x10\x4a\x9f\xc9\x35\xff\x18\x5e\x90\x00\xb3\xf5\x3a\x94\xed\xa1\xc8\x43\x51\x1e\xa5\x5e\x08\x26\x2f\x13\x4c\x85\x4a\xb5\x25\x15\xb6\x30\x58\xaf\x81\x74\xd7\xcd\xbe\x51\xc8\x56\xa2\x6a\xc3\x5c\xf0\xec\x15\x7d\xca\x72\xb0\x15\xe6\xd7\xae\x0c\xf3\x6b\x8f\x87\xfa\x8b\x5b\x6e\x2e\x80\x88\x6f\x43\x72\xb4\x4f\x9c\x71\xba\xf9\x95\x6f\x6d\x67\x2d\xc9\x3c\x18\x25\x69\xb3\x8d\xf0\x2d\xb7\xea\xa2\x25\xb2\x13\xc9\xf4\xd1\x2c\x64\x8f\x8a\x33\x65\xc8\x90\x6e\xd4\x94\x3f\xa2\xd1\x23\xcf\x17\x23\xee\xe6\xd1\x4a\xa9\x40\x96\x01\x33\xdb\x5b\x0e\xb1\xb4\x5f\xad\xaa\x8e\x64\x74\xfd\xdb\x39\xe1\x8f\x22\xee\x4d\x2e\x74\x75\x47\x26\x24\xc8\xf7\xce\x89\xef\x72\xc1\xdb\x77\xcf\x16\xa9\xd7\xf4\x3d\x1a\x97\x81\xb8\x47\xd3\x24\x17\xab\xab\x23\xfd\x72\x03\xb5\x7a\xd4\x96\x90\x5c\x36\xdd\x7b\xba\x52\xfb\x9a\x1a\x35\xe8\x1f\xe4\x01\x13\xd8\x23\x65\x32\x4a\x3f\x96\x85\x22\xb1\x16\x96\xb3\x5a\x00\xa8\x36\xab\x79\x10\x45\x32\x0d\x45\x5b\xb3\x9a\x77\xc7\xac\x76\xb3\x22\xc5\x6a\x6f\xff\x39\xbf\xfd\x6b\xb2\xbb\xe6\xc4\xdd\x6b\xdf\xbf\xeb\xea\x0c\xc5\xa0\xe4\xc0\x2e\xa6\xbc\x03\x75\x30\x2a\x5b\x06\x1b\x29\xf2\x19\x5e\x77\xe8\xb1\x9b\xcb\xdd\xbf\xcb\x46\x9f\x0d\xe4\xd2\x4a\x9e\xab\xe1\x24\xa5\xa3\xf4\x18\x24\xda\x82\x70\xa3\x64\xc6\xae\xb2\xb0\x2c\x5a\xac\xf0\x2a\xb6\x11\x09\xe6\x39\x83\xa1\x7f\xab\x1e\x7f\x49\xf5\x90\x62\x91\x08\x92\xab\xe5\xaf\x4e\x6e\x6e\xc9\x3b\x91\x40\xd6\x23\xdb\x8b\x57\x79\x09\xc0\xd6\x52\x13\x07\xa9\x49\x39\x9d\x26\x75\x9d\x31\x9b\x75\x6e\x53\xc9\xe5\xda\x28\x65\x57\xf7\x36\x49\x0a\x83\xf7\x96\x2d\x39\x9d\xed\xb9\x95\x4b\x32\x00\xe1\x2d\xb1\x52\x38\xa6\x79\x90\xf9\x1c\xe7\xb2\x4a\x0a\x96\x14\xfa\x88\x4b\xe6\x1a\x8b\x79\x59\x28\xe6\x42\xf0\x68\x5a\x97\x26\xc5\x60\x06\xf2\xd4\x4e\x52\x0f\x4c\x12\xf1\x5a\xad\x78\xce\x19\x5e\xb5\x77\x7b\x3b\xe2\x30\x90\x9b\x98\xdb\x83\xf3\x9a\x37\x96\xc4\x8b\x62\x46\x58\xb1\x2f\x55\x4a\xfe\x2f\xb9\x78\x6e\x63\xdb\x66\x6b\xe7\xf7\x9e\xdb\xbd\x13\x2f\xb8\xf4\x22\x3c\x0d\x27\x32\x39\xf5\x5c\x78\xe6\xcb\x3b\xb0\x80\xa1\xb2\xb3\xb3\x06\x13\x7e\x8d\xb5\xaf\x04\x7f\x3d\x09\x03\x41\x0b\x60\xb4\xa6\x06\x4c\xd0\x15\x9d\xf2\x45\x85\x4f\xcc\xb6\x9a\x51\xa9\xb0\x38\xe3\xb2\xf6\x21\x2f\x8f\x29\xfc\x66\x40\x86\x85\x35\x0b\x03\x8e\x79\x81\x96\x95\xf6\xc5\x47\x81\x0b\x81\x96\xc4\x23\x41\x3e\x0d\x48\x54\x69\xbd\xde\x42\xa8\x55\x89\x50\x4b\x47\xa8\x95\x21\xb4\x85\x09\x2b\x6e\x45\x08\xf2\x03\x05\xcd\xaf\x41\x13\x22\x8a\x73\x87\x25\x75\xfb\x4d\x90\x1f\x24\x2d\x1c\xbc\x82\xf4\x10\xa9\x61\x88\xda\x0b\xf9\x17\x61\x2f\x3b\x9d\xf0\xc8\x80\xe9\x6d\x19\xf6\xb1\x7f\x92\xa1\xdd\x70\xf4\xeb\x17\x2a\xa9\x11\x8d\xfc\xb1\x29\x3e\x57\x44\x39\x06\xb1\x89\x27\xf0\x54\x90\x93\x9a\x26\x8a\xf1\x04\x26\xea\xc2\x85\x9d\x9f\xeb\x9f\xce\xf4\x4f\x67\xc5\x49\x54\x9a\xa0\x19\xe5\xe2\x93\x0f\xe5\x03\x0c\xdf\x84\xe6\x28\xdd\x4b\x90\x78\xc8\x3b\x79\xb2\x43\xbb\x59\x1f\xa4\x1b\x3b\xcd\xaf\x53\xb3\xa9\x3b\x13\xc8\x1b\x5b\x66\x7e\x18\x32\x20\x5d\x1f\x9f\xfb\xa1\xc7\x01\x85\x75\xde\x0c\xe0\x5d\xf7\x97\x71\x16\xf3\x45\x23\xf3\xbf\xc9\x7e\xd5\xad\x7a\xdb\xaa\x48\xa9\xb0\xf2\x48\x52\x69\x93\x30\xb8\x24\x8c\x3f\x64\x91\xae\xad\x26\x91\x60\xa9\x6c\x35\x79\x12\xc8\x15\xa5\x10\xab\x0e\xc6\x1b\xa7\x01\xc9\x88\x8d\x0b\x7f\x1c\xb1\xda\xcc\x9f\x49\xce\x30\x7f\xea\x2c\xba\x17\x4c\xe5\xbc\x51\xe9\x7c\xa2\x9a\x0c\x58\x85\xf4\xac\xa4\x1f\xf9\x3d\xf6\xfc\xbf\x70\xf5\xd6\x23\x32\xb2\xc7\x18\x63\xf2\x27\x0f\xd6\xcb\xfa\x4b\x9e\x16\x55\xcd\xe1\xf7\x6d\xce\x9c\xff\x7d\x13\xc0\x9c\x63\xf6\x6f\xd7\xac\xff\x19\xae\x59\xfa\x00\xd6\x82\x47\x00\x82\x5a\x72\x1a\x18\xd9\x63\x14\xe2\x60\xe4\x14\x4a\xaa\x50\x99\x26\xe4\x4d\x2c\xb8\xab\x56\x03\x46\x20\x9f\x8c\xc3\xcc\x2b\x81\x0a\x49\x8b\x55\x3e\xa0\x10\xa2\xad\x12\x61\xad\x06\xc2\xac\x44\x08\x21\x44\xf4\x34\x4c\xbe\xd1\x40\x9d\xf3\xbf\xf1\xe2\xe7\xb9\x50\x45\xff\xcd\xdb\xff\xe6\xed\x07\xf1\x36\xfe\x66\xcc\x4d\xa3\x86\x27\x78\xe9\x4f\x4d\x44\xe5\x05\x6a\xb1\x14\x3d\x61\x72\x39\x9a\x4d\xcf\xa9\x2f\x64\xc6\xb4\x23\x9e\x4f\xcf\x87\xce\x41\xbe\xe3\xf0\xa7\x6e\x78\x93\x20\xbf\xdd\x24\x46\xa3\x86\xe0\x89\xbf\xcb\x67\xfa\xdf\xe3\xfc\x7f\xc6\x38\xdf\xcf\x4d\xf7\xf6\xdd\xa5\xd1\x33\xc1\x4c\x72\x30\x3e\x80\x01\x1f\xa0\x17\xfe\xa9\x31\xf3\x4c\x2a\x7e\xff\x9e\x74\xfe\x87\x30\x63\x79\x45\x54\x30\x5c\x4b\xdd\x2b\x6c\xcb\x7b\x85\xb5\x29\x27\xe7\x3d\xd1\xcd\x20\x40\x14\x7e\xab\xb9\xc2\xff\x1b\x55\x7c\xff\xdf\x2a\xfe\xff\x48\x8e\xfc\xaf\x54\x83\x4e\xbe\x99\x16\xe4\xff\x9d\x2a\xbe\xff\x6f\x15\xff\xdf\xbc\xfd\x60\xde\xfe\x76\x2a\x7e\x10\xf2\x07\x29\x15\x3b\x8d\x4d\x87\x7f\xde\xd8\x14\x84\x5c\xce\x47\xaa\x09\xdf\x4e\x61\x0f\x42\xfe\xdf\xc1\x08\x69\xef\x35\x42\xfe\xc5\x55\x4e\x10\xf2\x7b\x59\x1d\x0f\xee\x43\xb0\xb0\xda\xa7\xea\xbf\x15\xbd\xbe\xad\xd1\x36\x64\xdf\xce\x66\x7b\xfd\x9f\x40\xbe\x54\xfe\x6d\x50\xc7\x1e\xc3\xc3\x6d\x9a\x39\xe3\x3f\x75\xd2\xee\xfa\x5b\xd0\xa4\xaa\x99\xff\xa9\x67\xaa\xd3\x38\x39\xd9\xfe\xe6\x5c\xfa\xc0\x18\x34\xfa\x28\x50\xba\x51\x11\x2b\x8c\xf3\x30\xf4\x89\xa7\x87\xd0\xca\x23\xf4\x6c\x2a\xcc\xd9\x84\x3b\xb4\x0f\x31\x2e\xc1\xcc\xae\xd5\x76\x0f\x0f\x4b\x67\x94\xe9\xe5\x4d\x63\x12\x4e\xc9\x92\x8a\x79\x47\x0b\x68\xd4\x2c\xe7\xfc\x97\x6c\x8d\xe6\x81\x5b\xf2\xcd\x51\xee\xcd\x55\x1c\x3c\x4e\xae\xb9\xc7\x88\x67\x20\x81\xe3\x6b\x89\xe3\xae\x13\xab\x53\x3a\x7d\x19\x44\x84\xf1\x74\x37\xf4\xcf\x84\xd2\x2d\x6a\xd1\xce\xc2\x14\x89\x06\x94\xde\x02\x1f\xc9\x35\x7f\xcc\x88\xa7\x1d\x85\x23\xaa\xce\x97\x53\x43\x3f\x97\x9b\xa6\x1a\x30\x4d\x8c\x08\x8f\x57\x4f\x72\x70\xf2\x30\xcb\x0b\x2f\x98\xfa\x84\x01\x63\x22\x0f\xf1\x18\xa8\x38\xe3\x13\x4d\x16\x44\xd0\xf2\xb3\x20\xe4\xa7\xd5\xd4\xe3\x64\xfa\x58\x36\x09\x26\xa2\xb9\xef\x49\x30\xd5\x23\x70\xde\xbb\x9d\xb1\x84\x55\x20\x92\x1e\x99\x05\x3b\xb2\x65\xfd\x00\x26\x88\x46\x9f\x69\x44\xcf\x7d\xf2\x94\x4e\xd5\x99\xa3\xb4\x33\xc2\x73\xd1\x0f\xa2\x15\x79\x91\xd2\x11\x2c\x85\xd7\x95\x97\x65\x1e\x62\x8d\xbe\xc5\x27\x30\x1b\x22\x2c\x0e\xf2\xd6\xbf\x0d\x26\x04\x18\x4c\xb6\x55\xa7\x0e\x0f\xe7\x73\x9f\xc8\x4f\xa9\x4f\xf9\x8d\x10\x03\xbb\x29\xb6\xb1\xc3\xb9\xf3\x5c\x55\x44\x82\xe9\xf6\xd7\xca\x39\x23\xa5\x03\x12\x10\x12\xb4\xa7\x33\xb7\x62\xaf\x28\xe5\xac\xa8\xf4\x9c\x06\x53\xe9\x6d\x79\xb0\xc9\x77\x96\xfc\x28\x8b\x68\x18\x8a\xc1\x7b\x45\x7d\x3f\x3d\x6f\x95\xb2\x76\x4a\x86\x2d\x02\xeb\x60\x66\x33\x09\x27\x91\x98\x56\xb5\x49\xe7\x9b\x6c\x26\x24\x5a\xb7\x5c\x6a\x5f\x18\x55\xbe\x87\x25\x57\x1f\x2e\x16\xf9\xf6\x71\x70\xc2\x8f\x03\xe9\xe0\x13\x8c\xb5\x3d\xe2\x60\x7c\x50\x15\x38\x62\x48\x52\x2e\xcd\xa2\x9a\x42\x97\xa4\xe1\x81\x04\xce\x0a\x4f\x9d\x91\x47\x65\xac\xc6\x99\xff\x1e\x83\x30\x41\x9b\x0c\x51\x7d\x82\x73\x8b\xe7\x0e\x2a\x98\x93\x64\x2e\x03\x5a\x32\x26\x28\x43\x4e\x27\x34\x23\x33\x46\xa2\x85\xbc\x86\xbf\x7a\x5c\x6d\xb0\xde\x16\x84\x39\xe1\xaa\x20\x20\x62\xea\xe4\x15\x95\x44\x45\x11\xc9\x7b\x3b\x06\xf0\xbe\x16\x87\xaa\x88\x01\x0f\x48\xf9\x54\x29\xa9\x38\x55\x9a\xa1\x59\x5d\x0f\xe0\x48\xda\xc6\x13\xc9\x86\x15\xe8\x7c\xae\x76\x83\xdd\xe0\x2d\x81\x4a\x26\x08\x36\xe8\x91\x8e\xb4\x6a\x4a\xa8\x4c\xb2\x5e\x1b\xca\x85\x65\x73\x74\xfc\x35\xc1\x6f\xf1\x30\x97\xef\xba\x2c\x2f\xcd\x02\x85\x9b\xdd\xcb\x74\x55\x56\x3d\x17\xc0\x2c\x72\xc8\x66\x2d\xbb\x3d\x19\x36\xa6\xea\xdc\x85\x49\xa4\x35\xb6\x67\x69\x64\x68\xb3\xf7\xdf\xe5\x44\x59\x3a\x95\xf2\x4d\xfd\x99\xce\xb2\x55\x6d\x54\x15\x8b\x25\x41\xfa\x74\xab\x8f\x23\x56\x3e\xd6\xbb\xd5\x1b\xa4\x50\x3f\xcb\x53\xb6\x94\x14\x59\xa5\xcf\x43\xb6\x3b\xce\x6a\x8e\xd9\x88\x8c\x13\xb4\x59\xc3\x9e\x40\xba\xa5\x2f\x31\x47\x3c\x41\x11\x9d\x07\x9e\xbf\xd1\x80\xc2\x05\x69\x4b\xb2\x52\x4d\xb2\x06\xa7\xad\x61\xd0\x68\xb9\x36\x44\x21\x6e\x1d\x87\x27\x81\x74\x45\xa2\xa3\xb0\xd1\xd2\x65\x6c\x38\x3e\x28\xda\xac\x2a\xcc\x28\x9f\x25\xa3\x11\x41\x2c\x17\x9a\x54\x8a\xac\x2d\x4e\x2e\x51\xa4\xc4\xbe\x25\x8a\x24\xbb\x0e\xca\x2c\x43\x81\x4f\xd5\x71\xd1\x34\xc7\xa7\xe7\x0f\xb8\xd8\x41\x45\x2e\x2b\x5a\x46\xa3\xd7\x12\x8c\x8a\x24\xb7\x9d\x5c\x44\x6e\x23\x16\x8d\x7e\x20\xb3\x90\x11\xc0\xe0\xb0\xe1\xb8\x22\xe1\x83\xb7\x94\xaf\xb6\xeb\x1c\x6c\xf9\x88\xe7\x7e\xa4\x8f\x56\x2c\xbc\xa4\x53\x15\x60\xfc\x7f\x09\x75\xd9\x63\xe4\x7f\x3d\xf2\xa4\x4d\x86\x3f\x52\x0d\x79\xa4\xbc\x4f\x23\xe3\x4f\x2c\x6d\x0a\xc4\x0b\x37\xd5\xb4\x1a\xcc\xb4\xdc\xaa\x34\xed\x0b\x3f\x0c\xc8\xb6\xa9\xae\xbc\xf8\x4a\x65\xb4\x26\x6d\xf2\x53\x7a\x5b\x9d\x26\xba\xe6\x6f\x5f\x02\x44\xc4\x9f\x59\xaa\xc2\x04\xa2\x34\x6a\x83\x75\x45\xce\x57\xde\xe4\xe2\x9f\x51\x18\xac\xce\xe4\x32\xee\xcc\x8b\x79\x78\x46\x97\x02\x97\x33\x7c\xbf\x62\xeb\xf5\x68\x0c\x95\xb9\x6f\x34\x6a\x8d\xd1\x68\x53\x13\x2b\x35\x42\x8d\x3e\xc1\x00\x4f\x3d\x4e\xd2\x51\x27\x1e\xf5\xd3\x33\xea\x38\xb1\xa7\x1d\x94\x89\x8a\x70\x58\x8f\x08\xe0\xf9\x57\xc0\xe4\x42\xd3\xcf\x2c\x7f\x91\xf2\x63\xc3\x11\x8a\xac\x09\xa1\x7e\xd1\x51\x4c\xfb\x9c\x15\x9f\xb3\x86\x23\xbe\x07\x0c\x39\x10\x09\x2e\x45\x2c\x41\x91\xc5\xc2\x38\x98\x56\x2c\x28\x23\x15\xa0\x59\x01\xd7\xc2\x03\x92\x06\x3f\x61\x0d\x32\xe4\xae\xfc\x3c\x9c\xcd\x4a\x4e\xc7\x25\xe1\x09\x88\x86\x3d\xc9\xe2\x33\xb3\xa1\xe3\x6a\x8e\x78\x0c\x42\x44\x24\x26\x42\xe5\xd7\x9a\xa1\x0e\x59\xcb\xc8\xf2\xc8\xc3\x23\xe9\x13\x99\x23\x24\x7d\xfe\x14\x3c\x5a\x86\x47\x21\x3a\x04\xec\x24\xa8\xd5\xe8\xa9\x9d\x0f\x57\xef\x60\x1a\xde\x7a\xaa\xef\x42\x0d\x2b\x96\xd2\x84\x2a\x9a\x24\x57\x0b\xea\x13\x10\x9e\xb0\x5a\x8d\x9d\x04\x79\xab\x3d\x81\xe0\x8c\xfa\x25\xd7\xf7\xa2\xa5\xe1\xa6\x9b\x33\x3f\xc5\x1c\x0a\x11\x7c\x4c\x84\xf2\x7a\xc8\x00\x87\xc7\x50\xba\xd4\x7f\xa4\x4b\x02\x78\xc3\x11\xf3\x4f\x41\xb5\x40\x7e\x46\x4e\x31\x81\x74\x06\x82\x13\x5b\x7d\x6d\x9a\xc1\x09\xb6\x8f\xd5\x8b\x58\x84\x37\x1c\x09\x8d\xc0\x63\x78\x2c\xa3\xd1\xcb\x9c\x46\x23\x38\x2d\x15\xd3\x4a\x09\x1d\x9d\xd5\x6a\x20\xb2\x26\x61\x1c\x68\x5d\xc5\x51\xa8\x1d\xdb\xcd\x30\x33\x39\x44\xb4\x78\x0b\x05\x5d\x02\xf1\x87\x42\xa4\xf7\x9a\xdc\x52\x13\xea\xbf\x45\x2e\x89\x7e\x59\x86\x66\x2c\xc5\xda\x07\x04\x22\x1a\x3d\x17\x13\x39\x91\xc2\x95\x9c\xda\x43\x72\xea\x0c\x33\xb2\x02\x6f\xa8\xd3\x30\xa3\x3b\xe0\xf0\x7b\x82\xb1\x9d\x54\x44\x8b\x7b\x94\x36\x49\x48\xa4\xb4\x14\x74\x55\xa8\x7a\xb1\x5a\x4b\x0f\xa3\x85\xba\x7b\x77\xb2\x31\x33\x90\xa2\xa5\xc4\xe4\x70\x33\x3b\x63\xe4\x06\x49\xe0\x81\xf7\x17\x5b\x5a\x66\x92\x82\x17\xb4\x4f\x79\x93\xc0\x3a\xd1\xd1\x90\x62\x85\x6b\xbd\x63\xb2\x8a\x02\xa9\x64\x66\x0d\x0e\x9b\x24\x81\xae\xa7\x88\x90\x86\x44\xf4\x50\x8c\x81\xa7\xc6\x17\xea\x91\x0e\x44\x3e\xee\xd9\x9d\x01\xe9\xa2\x89\x4e\x1e\xa2\xd3\x83\x34\xe4\xaa\xf4\x35\xf5\x7d\x1a\x91\x49\x18\x4c\xe5\x69\xa0\x7d\xf4\x73\x48\xbb\xbe\x8b\x86\x80\x37\x08\x6c\x3a\xa4\x9d\x54\x5d\x0f\x26\xab\xfa\xf4\xf1\xc9\x87\xac\xa2\x04\xa2\x19\x9e\xa0\x05\x06\x93\x14\xef\x07\xe1\xd9\x10\xa8\xc8\xf4\x0f\xf7\x43\x9d\xd7\xe3\xbd\x88\xc7\xbb\xd1\x7e\x4d\x83\x98\x13\x89\x33\x44\x53\xbc\x40\x2b\x0c\x16\xdf\x08\xe9\x46\xb9\x86\x0a\x24\x4b\xad\x68\xf7\x48\xf7\x8e\x1e\x10\x45\x76\xb7\xe5\x45\x18\xb3\xb4\x25\x4b\xbc\x42\x97\x18\xac\x76\xb7\x44\x15\xb6\x91\xfc\x57\x8d\x98\x94\xb1\x12\xb2\x7c\x82\x3b\x87\x98\x40\xae\x01\x64\x84\x05\xd1\x98\x3f\xc2\x80\xbc\x95\x33\x4b\x46\x83\xcd\x54\x41\x8b\xe6\xa0\xd7\xd9\xd7\x1a\x55\xa7\x0a\x1b\x74\x83\x2f\x8b\x69\x77\xae\x95\xac\x18\x95\xf2\x3b\xae\x41\xc8\x5e\x6e\x00\x34\xfb\x0d\x02\xbf\xef\x0b\x1d\xeb\x4f\x92\xa0\xbf\xb7\x87\x1e\x4e\x04\x3f\x81\xc9\xa5\xea\x25\x39\xde\xcf\xf1\x1c\xd8\x10\x9d\xe1\x39\x70\x20\xba\xc2\x73\xd0\x82\xe8\x19\x9e\x83\x36\x44\xd7\x78\x0e\x3a\x10\x7d\xc0\x73\xd0\x85\xe8\x2d\x9e\x83\x1e\x44\x8f\x31\x38\x4f\x7b\xf9\x2c\xfd\xbd\x4a\x7f\x9f\xa5\xbf\xd7\xe9\xef\x87\xf4\xf7\xed\x6e\xae\x90\xad\x14\x1a\xc6\x3d\xe9\xf3\x3a\x0c\xf8\x42\x11\x48\x3d\xee\x66\x12\x15\x81\x23\x2d\xd5\x28\x7d\xe2\xb4\xea\x8a\x70\xcf\x63\xdf\xff\x22\xcf\x3c\xa9\x02\xc5\x3b\xdc\x33\x84\x15\x14\xc1\x27\x17\xf8\x31\xfa\x88\xc1\xe3\xdd\x0d\x54\x85\x6d\xf4\x80\x36\xe6\x48\x6c\xa0\x74\x47\x4b\x77\xb7\x65\x77\x53\xb4\x32\x10\x1e\x7c\xdc\x3d\x65\x15\x53\x54\x79\xee\x4a\x27\xac\x8a\x61\x91\x83\xd6\x27\xac\x72\x9d\x6a\xfa\x52\x63\x43\xa3\xd3\xfe\xb1\x52\x4c\x71\x39\xa0\x0d\xb0\x6a\xce\x83\xda\xa4\xf6\x1a\x7f\x44\x4f\x30\xf8\xb8\xbb\x9b\xb4\xd9\x64\x67\xbf\x7c\x03\xe9\xff\xe9\xe3\x93\xd2\x04\xf0\x1e\x3f\x41\xef\x30\x78\xb2\x17\xb1\xec\x8b\x3d\x2c\xf3\xcd\x44\xfa\xa7\x8f\x4f\x34\xa9\xfe\x1b\x7e\x87\x9e\x62\xf0\x6e\x2f\x7a\xf7\xe0\xe8\x4f\x1f\x9f\x14\x82\x2d\x7b\xd9\x2f\xde\xef\x14\xd7\x39\x18\x25\xb1\xdf\xe0\xa7\x85\xc4\x7e\xb9\x5f\x62\x67\x9f\xf2\x32\x1c\xed\x7d\x4b\x74\xff\xa5\x76\xee\x97\xe1\x4a\x26\x3f\xd5\x64\xf2\x2b\xfc\x52\xc8\xe4\xe7\xf8\xa5\x10\x8d\x7f\xe0\x97\x42\x26\xbf\xc0\x2f\x85\x4c\xfe\x01\xbf\x14\x32\xf9\x13\x7e\x29\x64\xf2\x4f\xf8\xa5\x90\xc9\xbf\x63\xf0\x2a\xed\xa3\xe7\xe9\xef\x1f\xe9\xef\x8b\xf4\xf7\x87\xf4\xf7\x53\xfa\xfb\xd3\xde\x3e\x2d\x89\xe5\x7b\xb7\x5d\x13\xce\xf9\xdb\x5d\x52\xab\x28\xd8\xd8\xfc\x30\x97\xd2\x9f\x3e\x3e\xd9\x14\x6e\xa5\xa4\x3d\x02\xae\x00\x27\x98\xe4\x33\xfe\x1d\x7d\xc1\xe0\xf7\xfd\xc3\x6d\x43\x62\xdf\xbb\xf9\x65\xb9\x5d\xc2\xf0\x6e\x22\xec\x6d\xe0\xde\xf6\x95\x65\xf8\x97\x6f\x29\xc3\x75\xe8\x9b\x62\xbc\x54\xb3\x2e\xc9\xcb\x24\xbc\x73\xf4\x14\xf2\x5c\x87\xb8\x5d\xc5\xb6\x54\xff\x07\xfe\x72\xf0\x25\xed\x4a\x66\x4d\x01\x47\xc6\xa4\x2a\xd8\x62\x94\xc0\x2c\x3f\xb8\x23\x7f\x5e\x95\x3f\x2b\xf2\xd9\x1d\xf9\xd3\xaa\xfc\x69\x91\x7f\x5e\x95\xbf\x2c\xf2\xbd\xaa\xfc\x9b\x22\xff\xb7\xaa\xfc\xf3\x22\x7f\x71\x47\x3e\xa9\xca\x3f\x2b\xf2\x69\x55\xfe\x75\x91\x3f\xab\xca\xbf\x28\xf2\x2f\xaa\xf2\x5f\x17\xf9\x61\x55\xfe\xfb\x22\x7f\x59\x95\xff\x5b\x91\xef\x57\xe5\xbf\x29\xf2\xe3\xaa\xfc\x57\x45\x7e\x74\x47\xfe\xaa\x2a\xff\x79\x91\xcf\xab\xf2\x7f\x28\xf2\x7f\xaf\xca\xff\x5c\xe4\x5f\x56\xe5\xff\x23\xd9\x10\x0e\x3b\x6c\x83\x9b\x45\xb4\x9b\x34\xb1\x66\x89\xc5\x0c\xb1\x52\x9c\x5f\xa2\x5d\xd0\x4d\x75\xff\xc6\xf2\x2e\x87\x06\x4e\x3b\x92\x2c\x6f\xf0\x54\x5b\xa8\x7c\x14\x68\x31\x12\x34\xab\x24\xbc\x4d\x8d\x27\xc6\xd7\xaf\x51\x1d\x8c\xcc\xc6\x78\xf8\xf5\xeb\xd4\x84\xe2\xd5\x40\xd1\x46\x7a\xfd\xeb\x57\x4b\xe6\x83\xa1\x3b\x22\xcf\xc6\x45\xf9\x61\xfa\x45\xfc\x80\x2f\xbe\x57\x9f\xf8\xb8\xf9\xeb\x7f\x80\x91\xdd\x38\xf2\x1a\xb3\xf1\x6d\x3b\x81\xdf\x35\xd1\xa4\x9c\xd8\x93\x89\x33\x5c\xba\x8c\x99\xcd\xcf\xbf\x7e\x05\x86\x39\xf2\x90\x87\xbc\xb1\x69\x7c\xfd\x0a\xbf\x33\x20\x5a\xec\x28\x16\xa3\x18\xc5\x45\xb1\xe9\x56\x31\x4f\x03\x87\xa2\xa2\xe4\x6a\x57\x49\x09\x51\x2f\xb9\x2c\x97\x5c\x44\xbe\x2a\x18\x95\xab\xbe\xdc\x2a\xe6\x69\xe5\x74\x80\x37\xf8\xd6\xf3\xe9\x84\x9c\xfb\x31\x71\x9d\x6e\xff\xa8\xd5\x1e\xb4\x91\x17\x70\xfa\x7b\x4c\xae\x16\x94\x13\xd7\xe9\x75\x3a\x9d\x76\xbf\x8b\xbc\xdf\x63\xcf\xed\x75\xbb\x6d\xf5\xb8\xf4\x18\x0d\x88\x3b\x68\x0f\x06\xdd\x5e\x07\x79\x7f\xc4\x4c\x81\xe8\x38\xfd\x2e\x3a\x27\x74\x2e\xbe\x75\x9c\xa3\x56\xcf\x46\xe7\x34\xfa\x5d\xd4\xd0\xeb\xf7\xed\x56\xa7\x83\xce\x7d\x6f\x72\xe1\xda\xe2\x37\x98\x2c\xc8\xd4\xf3\x97\x61\x30\x95\xf9\x2d\xbb\xd3\x45\x12\x9f\x56\x57\x3d\x5c\xd2\xd0\x27\xdc\x3d\xb2\xbb\xdd\x96\xdd\x42\xe7\x2c\xbc\x0a\x5c\xc7\x1e\xb4\x3a\xad\x76\x07\x9d\xc7\xcc\xbf\xb9\x0a\xc3\xa9\xeb\x74\xba\x47\xbd\x56\xdb\x41\x13\x6f\x4a\xb8\x04\xd1\x6b\xf5\x7a\xdd\xd6\x00\x4d\x16\x1e\xe3\x8c\xc4\x91\x42\xb8\xdd\x6d\xa1\xc9\x22\x9c\x84\xf2\x62\x2e\xa7\xdd\x1f\x1c\x75\xfa\x36\x9a\x84\xcc\xf3\x05\x12\x9d\x4e\xab\xdf\x12\xaf\xc1\xcc\x0f\xaf\x08\x53\xb0\xba\x47\xce\xd1\xc0\x91\xc9\x11\xf5\x2f\x24\xb6\xdd\xf6\x60\x80\x26\x8c\x2e\xa3\x30\x70\x9d\x4e\xa7\xd5\x76\x6c\x1b\x4d\x6e\xbc\x20\x25\xd5\xd4\x63\x17\x8a\xba\xed\x23\xf9\x22\xf3\xda\xdd\x7e\xab\x2d\x5f\xe7\xa1\x3f\x25\x01\x13\xe8\xb7\xec\xa3\xd6\x51\x5a\x6a\xce\xbc\x1b\xd7\x71\x1c\xe7\xc8\x76\xfa\x69\x0a\x21\x81\xdb\xea\xf6\x6c\x3b\x7b\xdf\x28\x71\xb1\xf0\x2e\xa8\xeb\xb4\x3a\xed\x76\xab\xab\xc0\x2c\xbd\x39\x09\xb8\xe7\x1e\x39\xf6\x51\xaf\xa3\x6a\x0c\x7d\x7a\x49\x14\xb4\x6e\xf7\xa8\x7f\x74\xa4\x8a\x86\x72\xbe\x94\xad\xef\x77\x5b\x76\x9a\x36\x59\xd0\xa9\xeb\xd8\x76\xc7\xb6\x9d\x96\x4c\x63\x64\x2a\xc1\x75\xed\x8e\x7c\x8f\x64\xdf\xb9\x4e\xb7\x6d\x0f\x3a\x8e\xfa\x2e\x22\x9e\xaa\xe0\xa8\xe3\x1c\x1d\x39\xaa\x02\x79\x4f\x8c\x24\x45\xa7\xdf\xee\xb4\x3b\xfd\x22\x55\xb6\x56\x50\xae\x73\xd4\xd5\x53\x49\x39\x95\xc7\xec\xf7\x38\xa4\x11\x71\xbb\xad\xa3\x8e\x4a\xcb\x98\xa3\x77\x74\xd4\x15\xb4\x23\x64\xb5\xa2\x81\xec\x1c\xa7\x77\x24\x2a\x21\x64\x15\x5d\xdc\xa8\x8a\x8f\x9c\xae\x83\xa6\x74\x29\x2b\xec\x1d\xd9\x83\x56\xaf\xab\xde\x89\xf6\x1e\x4e\xe7\x69\x9f\xb7\x6c\xbb\xed\x1c\x1d\xa1\x19\x65\xe4\x9c\xd1\xc9\x85\xeb\x08\x02\x39\x9d\x1e\x9a\xf9\x82\x5b\xb2\x31\xd2\xef\x77\x8f\x5a\x36\x9a\x85\x8c\x44\x3c\xed\xaa\x56\xaf\x3d\xe8\xb4\xd0\x2c\x9e\x2c\x22\xea\x49\x8c\x9c\xa3\x76\x17\xcd\x3d\x1a\x44\xe7\x21\x0b\x05\xc3\xf4\x3b\x9d\x9e\x8d\xe6\x8b\x30\xe2\x19\xac\xb6\xd3\xeb\xf5\x1d\x24\x38\x43\x7c\xd4\xeb\xf5\x5b\x36\xd2\xf8\xa4\xd3\x6e\x1d\x39\x22\x49\x34\x62\xd0\x69\x39\xa2\x2b\x54\x9d\xed\x56\xbf\x37\x50\xcf\x37\xc4\xf7\xc3\x2b\xd7\x71\x3a\x76\xdb\xee\x76\x91\x6c\x62\x56\x7a\x11\x06\xe4\x66\x4a\xae\xd2\x01\xdb\xb3\xd1\x22\xe4\x19\xdd\xda\x83\x7e\xc7\x46\x34\x98\x52\x2f\x10\xbd\xed\xb4\x3b\xdd\x41\xb7\xd5\x91\x49\xf3\x50\x52\xb1\xdd\xb6\x11\xbd\x0c\xd9\x8d\x6c\x7b\xbf\x65\xdb\x28\x65\xbf\x6e\x7f\xd0\xef\xf5\x6c\xe4\x7b\x97\xca\xf3\xcb\xe9\x3a\xed\x96\xe0\x8c\x2c\xe5\xdc\x8f\xa3\x85\xfc\xae\xdd\xee\x75\x91\xef\x5d\x05\x0a\xfb\x81\x73\x64\x1f\xf5\x7b\xc8\x27\xcb\x30\x98\x2c\xe8\x6c\x26\x18\x4b\xd0\x76\x30\xe8\x22\x9f\xce\x17\x6a\x54\x3b\x4e\xfb\xa8\xdd\xea\x76\x54\x52\x3a\x6a\xbb\xfd\x9e\xd3\x6d\xf7\xd2\x34\x31\xc8\x9c\x4e\xbf\xd3\xed\x1e\x1d\xa9\xa4\x9c\x80\x19\x61\x7a\x9d\xce\xa0\x25\xd0\x92\xb9\x72\xbc\xb5\x07\x83\x56\xbb\xd5\xce\x92\x14\x07\x1f\x0d\x5a\xdd\x5e\x9e\xb4\x59\x2a\x23\x5a\x77\xd0\xe9\xa5\x38\x66\x23\xa2\xd7\xef\xb6\xfa\xbd\x56\x9a\x98\x0d\x89\x96\xd3\x69\x0d\x8e\xd2\x6a\x33\xc6\x1c\x1c\xd9\x76\xbb\x93\xd6\x52\x0c\x89\xfe\xa0\xdd\xee\x77\xdb\xa5\x64\xb2\x99\xcc\x09\xf1\x53\xb2\x74\x07\x62\x68\xa9\xf4\xbc\x99\xfd\x7e\xdf\x19\x88\xc4\xa5\x90\x61\xad\x81\x2d\x1f\x53\x7e\x69\xb7\x8e\x44\x57\xfa\x34\x20\x81\x24\x49\xb7\xd7\xb7\x51\x26\x36\x72\x96\x5d\x7a\x2c\x0c\x03\x29\x3b\x7b\xf6\x40\x5e\xca\x11\x2f\xb5\x59\xa0\xd7\x6f\xf7\xdb\xad\x56\x9a\x91\x0e\x9d\x6e\xfa\x9a\x49\x91\x56\xcb\x11\x9c\x9d\xa6\xae\x62\xb6\xf2\x89\x7b\xd4\xeb\xb5\x7a\x83\x76\x9a\x98\x53\xa9\x7d\xd4\x1f\xd8\x47\x59\xd9\x42\x74\x0c\xec\x41\xbf\x7f\x64\x67\xe9\x2b\x46\x83\xb9\xfa\xa2\xd7\x71\xba\x9d\x34\xbd\x10\x14\x9d\x7e\xbf\xd5\xb6\xb3\xf2\x4a\x58\x28\x9e\xb6\x3b\x7d\xa7\xdf\x46\x4b\x3a\x0d\x0a\xc6\xea\x75\x3a\x47\x4e\x0b\x2d\x69\xc0\x85\xf2\xb3\x14\x33\x58\xcb\x19\x74\x6d\xb4\xa4\x11\xbf\x61\x61\x94\x4d\x62\xe2\xd3\x70\x32\xf1\x22\x1a\xa4\x29\xad\x23\x14\x78\x97\xde\x6f\x61\x2e\x13\x7a\x83\xde\xa0\x2b\x12\x6f\x5c\xa7\x35\x40\xa1\x3f\xf5\xbd\x89\xc8\xe9\x75\xda\xdd\xae\x48\xa0\x97\x44\x8e\xc9\x76\xbf\xa7\xde\xa6\xcc\x3b\x77\xfb\x76\x67\xd0\x6f\x1f\xa1\x42\x24\x77\xdb\x42\xba\xa8\x77\x89\x7e\xaf\xdf\x3a\x6a\x77\x3a\x28\xa3\x6d\xa7\xed\x74\x45\xd7\xaf\x3c\x9f\x68\xa2\xa2\xdb\xeb\xf6\x9d\xb6\xad\x92\x25\x99\x1c\xdb\x6e\x75\x07\x03\x95\x54\xd0\xc9\x71\xba\xad\xa3\xa3\x5e\x4f\x26\x6b\x64\xea\xb4\x07\x4e\xcb\x6e\xa3\x95\xb7\xf2\x6e\xbc\xab\x05\x5d\xa9\x81\x6b\xf7\xfb\x68\x45\xbc\xc9\x62\x15\xcf\x66\xb2\xad\xfd\x5e\xbf\x8d\x56\x84\xc5\x42\x5e\xf4\x06\x47\x47\x0e\xca\xc6\x46\xcf\xb1\xdb\x5d\xb4\xf2\xe3\xa5\x98\xa3\x5b\x9d\x5e\xbb\x8f\x56\xe1\xd5\x34\x15\xb2\x8e\x23\x66\x56\xc7\x46\x29\x4b\x08\x2e\xeb\xb7\x7b\x88\x91\x73\x32\x99\x78\x69\x6a\xaf\x77\xd4\x1f\x0c\x1c\x94\x36\xdf\x71\x7a\x03\x1b\xb1\x30\xba\x49\xf5\x81\x56\xbb\xdb\xef\x3a\x47\x88\x85\x37\x9e\x1a\x0f\x9d\xd6\xa0\x27\xa6\x89\xc8\x9b\x4e\x7d\xa2\x8a\x1d\x39\xad\xbe\x33\xe8\xa3\x7c\x8c\x76\x9c\xde\x60\xd0\x42\x91\x17\x4c\x33\x48\x3d\xbb\xdd\x1a\xf4\x3a\xa8\x60\x46\xbb\x6b\xb7\x5b\x7d\x91\x10\x2d\x88\x2f\x55\x84\x7e\xa7\xd7\x1e\xa0\x88\x92\x20\xf0\x5c\xc7\xee\xda\xbd\xfe\x51\x1f\x45\x54\x5e\xa5\xe5\xb4\x7a\xed\x96\x90\x1a\xa5\xf1\xdd\x76\x50\xc1\xc8\xbd\xa3\xbe\x6d\xf7\xd2\x14\x35\xd8\xdb\xfd\xd6\x51\xa7\x83\xb4\x71\x9e\xa5\x04\xe9\x40\xee\x1e\xb5\x6d\x54\x62\xfa\x6e\xc7\xee\xa3\x42\x04\x74\x7a\x2d\xfb\x68\x60\x23\x2e\xc4\x5f\x5b\x0c\x16\xf1\x42\x3c\xdf\x6d\xb7\x06\x47\x3d\xe9\xce\xc4\x7d\xe2\x3a\x9d\x96\xdd\x19\x0c\x06\x88\x87\x4b\x8f\x87\x52\xea\xf7\xed\xa3\x2e\xd2\x46\x4e\xab\xeb\x0c\xba\x3d\x94\x4e\xb0\x4e\xb7\xd7\x76\xec\x41\x0f\x5d\x2d\x88\xc7\xa5\x66\xd7\x16\x2d\x2a\x26\xc0\x7e\xcb\xe9\xaa\xd7\x68\x19\x5e\x64\xca\xdf\xa0\x8b\x34\x49\xd4\x3b\xea\xd9\xe9\x7b\xc6\x8e\x4e\xa7\x6b\xf7\x3b\xc9\xc6\xae\x8a\x74\x1e\xc8\x7d\x05\x30\x20\xa6\x61\x40\x8b\x33\xba\x04\xd0\xe2\xe1\x2b\xa1\x95\x3d\xf1\x22\x02\x20\x02\x1c\xfb\x16\xb9\x26\x13\x40\x20\x1c\x0a\xcd\xf7\x1a\x00\x8e\x65\x60\x9e\x97\x01\x97\x97\x23\x23\xa7\x07\xe1\xe9\xe9\xa0\xe6\x74\xd7\xfc\xf4\xb4\x53\x6b\x75\x6c\x24\x1f\x9c\xee\xba\xd5\xb1\x6b\x1c\x01\xa7\x5b\xe3\xf0\xe4\xa4\xb3\x16\x0f\xc8\x91\x57\xc8\x4f\x0a\xc0\xe7\x60\x1b\xa2\x28\x32\xdb\xac\x5b\xe6\xf2\x51\x4b\xfc\x69\x8f\x53\x40\x8b\xcd\x52\xad\x6e\xb7\x2e\x4a\x36\x85\xbe\xa8\x5e\x5a\xfa\x4b\x5b\xbd\xa8\xaf\xa7\xc5\xd7\x67\x9b\xf0\xf9\xa8\xa3\xae\xbb\x5f\xe9\x85\xee\x09\x3e\xff\x78\x59\x7c\xfc\xb6\xa8\x21\x2d\x53\xc2\xe5\xf2\x1e\x25\x15\x58\x79\xa3\xe4\xdb\xab\xa0\x70\xbc\x11\x54\xbc\x19\x91\x31\x74\x0d\x79\x73\xe0\xca\x63\xd9\x1d\xc5\x29\x59\xde\x78\x6f\x50\xf6\xdf\x4e\x6d\x3a\x39\x67\x9c\x6b\x36\x2b\x55\x9c\x9c\x9e\x3a\xbd\x9a\x58\x28\x10\xd1\xbb\xe2\xa1\xd5\xed\xd6\x08\x72\xb4\x58\xba\x67\x59\xb0\xfd\xe2\xe3\x13\x6c\xd7\x6a\x80\x60\x8e\x19\x7e\xe3\xbd\x81\x28\x05\x97\x96\x2b\xbe\xbd\xd2\xed\x6a\x7a\x7c\xd9\x70\xbd\x06\x04\x0b\x5e\x85\x28\x43\x1e\x10\x4c\x2c\x36\x3f\x07\x10\x5a\x0c\x11\x6b\x8e\x88\x75\x8e\x88\x15\xae\xbc\x09\xe5\x37\x50\x5e\x36\x79\x5d\x00\x7f\xb6\x85\x98\x83\xf1\x96\x9f\xdd\x50\xe0\xe0\x96\x10\x54\xf7\x93\x0f\x1d\x57\x47\xb5\x40\x5f\xf9\x35\x32\x6c\xa6\x17\xc9\xce\xb1\x99\x86\xa5\x3d\xc7\x66\x7a\xe1\x6c\x8a\x13\x36\x83\x02\xc2\x07\xed\xc0\x4c\x66\x0b\x5c\x7a\xd7\xc0\x56\x1e\x1b\x4b\x1a\x08\xbe\x52\x2f\xd2\xdf\x47\x46\x23\xb4\x21\x84\x27\x4e\x6f\x68\xd8\x86\x6b\x18\xd0\x2c\x42\x19\x02\xa7\xa7\xe1\xf7\xb6\xb2\x1b\x86\x79\x27\xb8\xec\x04\xdb\xeb\x35\x3b\xc5\x8e\x4c\x14\x49\x3c\xeb\xa8\xbc\x93\x2e\x2a\x3a\xe9\xf1\xfd\xe8\xa8\x5b\x3e\xe9\xac\x1c\x2e\xf8\x02\x6a\x7c\x75\x01\x88\xb5\x40\xc4\x8a\x10\xb1\x7c\xad\xff\x0e\x36\xbf\xd2\x99\xe0\x90\x94\x40\x6c\x95\xbd\x28\x4e\x9e\x2a\xcf\xa8\x12\xb7\x34\x05\x61\x19\x26\xd6\x5c\x3e\x05\x98\x58\xe7\xf2\x89\xe2\x9c\xf6\xaa\x89\xc8\x2b\x3a\x26\x4d\x89\x04\x79\x50\x8c\xbd\x06\x45\x3e\x06\x9e\x49\x61\xb3\x95\x09\xcf\x78\x08\x22\xcc\x05\x3d\x86\x80\x35\x02\xd8\x8c\xcd\x5e\x1d\xb0\x93\x00\xba\x4c\xa5\x06\x0d\x2e\x52\x5b\x2e\xe0\x0d\x26\x9e\x3a\x28\x6e\x62\xff\xc4\xea\x0e\x3d\x93\xba\xad\x86\x80\x1b\xd5\x71\xcf\x86\x6e\x8c\xfd\x53\xbb\x56\xf3\x4f\x9c\xa1\xed\x46\x69\x8f\x44\x28\x46\x3a\x9d\x92\x8c\x61\x2f\xf6\x32\xec\xc5\x06\xc3\x2e\x72\x86\x8d\x72\x86\xf5\xf7\x32\xec\xc7\xcc\xe2\x95\xb6\x55\xc8\x36\x40\x4e\x7a\xf6\x90\x9b\xd2\x8b\xa5\x4e\x9a\x3d\xdb\x25\x27\xce\xc0\x1e\x32\x97\x9c\xb4\x3a\x45\x16\x68\x75\xec\x06\x81\xa2\x00\x87\x49\x00\x42\x34\x47\xb7\x53\x1a\xad\x7c\xef\x46\xde\x20\xb0\x6d\x90\x53\xe3\x4a\x74\x99\xa5\x15\x04\x30\x41\x0b\x72\xbd\xbf\xfc\x82\x5c\x03\xe9\xfe\xaf\x86\xc6\xde\xc2\xa6\x61\x24\x09\x44\x01\xb8\x46\xcf\x10\x05\x21\xba\x3d\x67\x42\x47\x25\x95\x8e\xc0\x24\xf5\x5f\x23\x43\xa7\x69\xf5\x95\x0b\xdb\x2a\xbc\x02\xe2\x0d\x91\x4c\xb4\x29\xe8\xf5\x4c\x22\x64\x0f\xe7\xd9\x43\xde\x77\x72\x55\x7d\x57\x4d\x7a\x3d\x7f\xae\x16\x36\x3f\xdf\x15\x7d\x1f\xed\xef\x04\xfb\x24\xbd\x38\x3d\x75\xbc\x67\x27\x58\xc8\xfc\x5a\x96\x3e\x4f\xd3\xe7\x1b\xe9\xe7\x69\xfa\xf9\x46\x7a\x8a\x53\x9a\x9b\xbe\x9d\x60\x67\x47\xa7\x1a\xff\x61\x98\x1f\xd2\x86\xc2\xec\x69\x9e\x3f\x9d\xef\xe8\x64\xed\x70\x41\x5a\x45\x3a\x40\x81\x0c\xb9\x47\x30\x8d\xde\x78\x6f\xc4\x14\x99\x7a\x21\x6e\x08\x5e\x07\x11\x08\xe1\xd0\x10\x0c\x62\xb8\xe2\xc7\x03\x06\x34\xef\x21\xa3\x53\x54\xa5\xa0\x36\x0d\xf4\xc8\xb8\xf7\x47\xf3\x3f\xf3\xd1\x79\xfa\x91\x6c\x17\x19\x1a\xd0\x70\xe5\xf7\xc4\x34\xa0\x01\x93\x04\x0a\xc6\xbe\x40\x8f\xbf\x0d\x63\x5f\xa8\x4a\x17\xa9\xdc\x48\x85\xc6\xb7\x64\xea\xfb\xd6\xb0\xc1\xd0\x5a\x7f\x2f\xbe\x6f\xf7\x6c\xb3\xdd\xb3\xeb\x29\xa8\x13\x1b\x22\x9e\x77\xf8\x7a\xad\x9e\x14\x7c\x38\xb4\xdd\xb4\xa6\xec\xb2\x69\x79\x3d\x32\x60\x42\x1e\x33\xd7\x69\x30\x58\xe7\x88\xe2\x56\x9d\x35\x82\x83\x92\x36\xf4\x11\x90\x53\x2c\x44\x1c\x69\xb4\x3a\xb6\x4b\x4c\xa7\x65\x23\x2a\x66\x08\x21\x28\xb3\x87\x13\xa7\x65\x0f\x89\x29\x4b\x34\xf2\x12\x9b\xf4\xda\x37\x04\x41\x36\x74\xa2\xec\x1c\xd4\x09\x76\x36\x9a\x01\x8b\x01\xe6\xa7\xa5\xfc\x13\xec\xdc\x63\xd8\x25\x69\x8c\xf6\xd7\x6a\x9e\x7b\xf7\xb2\xe9\x0c\x6c\xf4\x04\x3b\x03\xbb\x99\xa6\xa0\xf7\xd8\x3a\xea\x75\x5a\x2d\xf4\x0e\x3b\xe8\x37\x6c\x0d\x5a\xdd\x96\x83\x9e\xe2\x4e\xb3\x75\x84\xde\xe0\x9e\xf8\x79\x89\xdb\xf5\x37\xf5\x37\xe8\x15\x7e\x23\x7e\x8b\x05\xc6\xf3\x2a\x05\xe0\x85\x3e\x7b\xbf\x00\x6a\xe2\xf7\x36\x14\xb8\xad\x49\xfd\x8b\x04\x94\xf6\xa4\xb5\x80\xdb\x40\x6c\x64\xeb\x00\xd2\x53\xb6\xd6\xa2\xfe\xfa\x60\xab\xac\x6c\xdd\x24\x8c\x80\x98\xb8\xac\x89\x7a\x8f\xc4\xcc\xaf\xde\xb5\x19\xb6\x84\xc5\xb5\x54\x43\x84\x9a\x98\x46\xb7\x47\x01\xa2\xf8\x77\x40\x2c\x06\x51\x28\x1f\xe6\x42\x6f\x10\x0f\xe7\x42\x5d\xf8\x01\x00\xab\xd5\x6a\x75\xed\x4e\xb7\x4e\x4d\xab\xef\xf4\x06\xfd\x41\xaf\x1e\x9a\x96\xdd\xb3\x7b\x4e\xef\xa8\xee\xc1\xe6\x3b\x58\x5c\x56\x20\x6f\xdb\x0e\xa5\xba\xc0\x70\x80\x23\x17\x30\x09\xa4\xd3\xee\xd9\xfd\x4e\x5f\x00\x69\x0f\xba\x76\xaf\x73\x24\x80\x38\x9d\xb6\x3d\xb0\x3b\x02\xc8\x7b\x88\x02\x59\xd2\x96\x36\xbb\x96\x28\x69\x1f\xf5\x1d\x51\x73\x28\x6a\xee\x38\xfd\x76\x5b\x94\xfc\x0d\xaa\xf1\xf6\x02\x38\x4e\xaf\x1e\x35\x9c\x1e\xea\xda\x76\x1d\xb0\x46\x04\x51\x4b\x3c\x45\x8d\x00\xea\x34\xc8\x3b\xf4\x8f\xfb\xe9\x7f\xcf\x33\xb5\xe4\xc5\x5e\xb5\xe4\xc5\x86\x5a\xe2\xe7\x6a\x89\x77\x4f\x3d\xfa\x07\x5d\xbc\x9c\xbe\x1a\xe6\x52\x85\x20\xa7\xd9\x86\x2e\x69\xbe\x34\x9f\x16\xc5\x3f\x95\x8a\xbf\x19\x92\x3a\xa9\x13\xf7\x65\x1d\x90\xc6\x53\x0d\xaf\x9f\xb4\x62\xa9\xa2\x83\x2d\xdb\x6e\x3b\x6d\x7b\x30\x74\x5a\xd6\x51\xab\x4e\x5c\xc7\xb2\xbb\xdd\x7a\xa9\xc2\x96\xd5\x81\x0d\x91\xac\xc1\xfa\x5d\xd3\xf4\x49\x53\xcc\x87\x50\x00\xeb\xd8\x9d\xee\x90\x34\x25\xb0\x42\x16\x02\x62\xca\xcf\x9b\x12\x38\x12\xf0\x0a\x48\x9f\xff\xba\xee\xfd\x45\x1f\x35\x5f\x52\xdd\x7b\x72\x97\xee\xfd\x42\x32\xfd\x73\xa9\x7b\xdb\x62\xaa\xb1\xbc\x5a\x4d\x3d\x9c\x97\x01\xca\xb5\xe4\x26\x38\x35\x10\x65\x1b\x3d\xee\x05\x2d\xa0\x46\xba\x07\xeb\x4f\x0e\x4a\x5f\xf3\x13\xa1\x32\xb6\x85\x96\x98\x0e\xc8\xdf\x19\x07\xc4\xf2\xea\xc4\xf2\x4c\x22\x74\x1b\x31\xa8\xca\xe0\x73\x0d\xf8\xcb\x5e\x56\xfb\xb2\x53\x03\x9e\xec\xd7\x80\x03\xf0\x02\xfd\x71\xf7\x0c\xaa\x98\x5d\x81\x31\x9d\x41\x1d\xe4\x13\xaa\x9b\x5d\x6e\xe2\xa5\x0c\x7d\xff\x09\x53\x07\xda\x78\x18\xd0\xca\x39\x32\xc7\xaf\x07\x9b\x8e\xd3\xcb\x67\x46\x05\x09\x0e\x89\x4b\xd4\x3d\xfc\x5e\xb3\x6b\xdb\x88\xe9\xd9\xe7\x32\xbb\xa1\x9e\x9b\x2d\xdb\x2e\x4f\x88\x3f\x81\xb6\xe5\xb4\xdb\x83\x6e\xcf\xa9\x03\x8e\xdf\xd7\x3f\x01\x0e\x61\xc3\xb1\x7a\x4e\x6f\xd0\xeb\xf5\xeb\x80\xe0\x77\x75\x31\xfe\x60\xc3\xea\x1c\xd9\x3d\xa7\x23\xd6\x46\xf8\xb7\xfa\x27\xc0\x20\x84\xe8\x27\xd0\xb0\x8e\xfa\x83\x7e\x6f\xd0\xa9\x73\xd3\xb1\x8e\x9c\x9e\xd3\x71\xba\x75\x31\x22\xda\xed\x4e\xb7\x53\x67\xa2\x90\x65\xf7\x9d\xa3\x4e\xb7\x5d\xe7\x0d\xab\xd5\x1a\x1c\x1d\x39\x9d\x3a\x31\x1d\xab\x63\x77\x5b\x9d\x56\x5f\x14\x2a\x53\x42\x69\x41\x5f\xd0\xe7\xfb\xf5\xe1\x97\x92\x0e\x32\x41\x7b\x7b\xf4\xbe\x7d\x58\x0d\x74\x47\x8f\xde\xa5\xb8\x3f\x4f\xef\x89\x95\xeb\x97\x7c\x0a\xff\x07\x6e\x58\x4e\x67\xd0\x73\xd0\xbf\xb0\x63\xf5\x07\xad\x7e\x1f\x7d\x87\x1b\x56\xeb\xa8\xd5\xea\xa3\x1f\x71\xc3\x3a\x12\x73\x06\xfa\x19\x3b\xd6\x51\xbf\x75\xd4\x41\xbf\xe0\x9f\xeb\x3f\xa2\x7f\xe2\x9f\xeb\xff\x42\x84\xe0\x7f\xd5\xbf\x6b\xfc\x58\xff\x87\x16\x44\x87\xfc\x75\x79\xc3\x4a\x2b\x75\x46\x76\xad\xf6\xf7\xce\xb1\x62\x12\xdf\xb7\x6a\x07\x84\xd4\x03\xf3\x97\x3a\x6f\xfc\xb3\xce\x60\x13\x10\x62\xfe\xd2\xf8\xa7\x98\x8e\x83\x06\x45\x1e\x06\x3f\x8b\xa9\x8d\xc2\xc6\x77\xf5\x10\x36\x7f\x44\x11\x2e\x84\x8b\x57\xf7\xcc\x50\x24\x83\x9f\xeb\xb4\x0e\x9c\x06\x85\x10\xc5\x38\x1a\x6a\xe2\xca\x43\x21\xac\x3f\x11\xfa\x9b\xfb\xc6\x7b\x73\x50\x6e\x50\x7c\x62\x0f\x63\x29\xb3\x62\x14\x21\x5a\x25\x98\x18\xd9\x2b\x99\x18\xf9\xb3\x8b\xf3\x00\x30\x82\x38\xf9\x36\xea\x3d\x23\x7f\xbb\x7e\x7f\xef\x2a\x2a\x85\x97\x26\x8b\x16\x42\x75\x4f\x1f\x85\xe6\x0d\xeb\xaf\x11\xc7\x66\xaa\xc3\x97\xc4\x96\xa6\xe5\xd7\xb9\xe8\x60\x19\x98\x20\x57\xff\x08\xcc\xcc\x3e\x42\xf9\x2b\xce\xcc\x15\x96\x63\xc0\x4d\x56\x07\xff\xa8\x07\xe6\xbf\xea\x82\x39\x8a\xb4\xef\xea\x81\xf9\xe3\x46\xda\xcf\xf5\x00\x56\x49\xa0\x7d\xbe\x65\xf3\x3b\x7c\xbb\x9e\xdd\xe1\xdb\xf6\xf8\x0e\xdf\xb2\x3f\x8a\xfc\x4a\xdf\xbc\xcf\x77\xf8\xc6\x71\x72\xa7\x73\x14\xb3\x18\xe0\xb0\xc2\x47\xaa\xe0\x8d\x13\x2e\x8f\xdc\x9e\x72\x21\xea\x4e\x31\x1f\xca\xd1\x94\xe8\x17\x0a\x6f\x6e\x46\xc8\x65\x6d\x2a\x66\x6a\x35\xc0\x31\x41\xa4\xfa\xdc\x62\x00\xd4\xbd\xc0\x30\x81\xe8\xd6\x27\x33\xed\xe8\x79\x7e\xf7\xeb\x2c\x64\xa9\xb4\x95\x37\xb1\x61\x3b\x3b\xdd\xa8\xc2\x9c\xf1\xfc\x6e\x9a\xe0\x84\x1e\xa7\xa7\x18\x71\x60\xd2\xd3\xd3\x53\xe7\x80\x00\x3e\x0a\xc7\x88\xc1\x13\x7b\x18\xe0\xd0\x74\x5c\x8a\xc3\xec\x60\x67\x90\x20\x39\xf8\xfe\xb6\x4a\x4f\xed\x21\xc5\xa1\x2b\x2b\x2e\x2a\x4d\x12\x14\x62\x0a\xa4\x9d\x32\xb4\x24\x06\x28\xc2\xa1\x25\xda\x8f\x62\xec\x21\x7f\xa3\x2b\x54\xcd\xf2\x22\x0e\x3c\x29\xfc\xcb\xca\xe1\xae\x1a\x0e\xa2\x98\xa4\xd1\xe2\x8a\x43\xe7\x27\xf6\xd0\x76\x03\x28\x83\x61\xc1\x70\xc4\xc6\x98\x03\x2a\x4b\x9a\x26\x1b\xe7\xe3\x26\xd4\x76\x97\x26\x3a\x03\x8c\x08\xe2\xe3\xf4\xa2\x8a\x4d\x56\x92\x6c\x83\x28\x0a\x91\x8c\xe5\x97\x1d\x7a\x8f\x73\xf2\x20\x5f\x43\x25\xaa\xc7\x0a\xf7\xf4\x6c\x6a\xad\x06\x18\x9e\x88\x51\x1d\xca\x80\x23\xd1\xb1\x69\x06\xf2\x5c\xa5\x87\xc9\x28\x18\x23\x8a\xed\x63\x7a\x12\x1f\x9b\x26\x45\xa6\x19\x42\x7f\x14\x8e\x31\x03\x1e\xe2\x23\x5a\x60\xee\x27\x68\x51\xcd\xba\xfc\x84\x08\xd6\xe5\xa7\x62\x96\xe6\xa7\x98\x64\xac\x3b\xad\xf2\xf0\x55\x58\x61\x32\x7c\xe3\xbd\x71\x4d\x92\xa0\x55\xd5\x9d\x53\x72\xd9\x48\xb4\x9b\x45\x90\x87\x1b\x0e\x8a\xb0\x8d\x62\x2c\xef\x6b\x4b\x3b\x2b\x3b\x54\xea\x09\xfe\x50\x72\x8d\xe1\x29\x20\x23\x6f\x0c\xe1\x7a\x0d\x62\x13\x83\x00\x8b\x95\x9b\x98\xe4\x40\x64\xe2\xa0\x29\x1a\x09\xe1\x41\x71\xd8\x74\xeb\x73\x2e\x01\x20\x4f\x5a\xba\xf6\x43\xa1\x33\x10\x9e\x3a\xd9\x34\x1e\x37\x41\x28\x0f\xc2\x2e\x2b\x6f\xd2\x5a\xa9\xd8\x86\x99\x83\xe2\xb0\x98\x68\x19\x74\x59\x82\x2e\x77\xd1\x02\x85\x05\x35\x04\x25\x74\x0a\xdc\xe6\x6d\x08\x8f\x61\x9a\x7e\x88\x01\xc3\x92\x08\xb5\x1a\x3b\xc5\x4c\x92\x29\xc0\x14\xb3\xac\xe0\x66\x29\x10\x9c\x32\x39\x04\x19\x44\xf4\x84\xc9\xe1\xc7\x20\x4c\xca\x54\xda\xa8\x41\xa7\xd3\x9d\x15\x95\x0b\xef\xa8\x2f\xa5\xcd\x28\x40\x74\x9c\xa0\x1b\xac\x82\x66\x16\x17\xb5\xcd\xf1\x8d\x15\xf9\x74\x42\xd0\x39\xbe\xb1\x96\xde\x0a\x9d\x55\x71\xd9\xb6\x94\x26\x49\x82\xae\x2a\x4f\xba\x26\xe8\xd9\xb6\xdf\xaa\xd4\x31\x84\x7a\xc1\x30\xa0\x5b\x4a\x1d\x3c\x69\x0d\x53\x79\x2b\x37\x23\xe9\x49\x7b\xe8\xb8\x26\xd3\xae\xc9\x91\x72\xc2\x5e\x6f\xda\x2a\xe5\x51\x6f\x75\xa4\x82\x41\x58\x92\x21\x14\xca\xc3\xd1\x54\xc8\x8f\x60\x8c\x89\x19\xd4\x59\x21\x37\xd0\xb5\xa6\x96\x75\x6d\x88\x3e\x68\xef\x8e\x0d\xd1\x5b\xed\xbd\x05\xd1\xe3\x3b\xc4\x88\xe2\x21\x26\xf4\x26\x20\x5a\x0b\x31\x06\xa2\xc1\xb2\x1f\x6d\x98\x49\x25\x79\x46\x1d\x04\x98\x9f\xc8\xd0\xa0\x54\xb6\x99\x8b\x95\x91\x5a\xeb\x02\x0f\xa7\x9b\x27\x62\xa0\x1c\xe6\xfe\xfb\x5e\x66\x80\x52\xa7\xdc\xbd\x53\x75\xfc\x3b\xdd\xca\x53\x27\xf0\x9b\x1e\x44\x1c\x97\x0e\x0b\x7b\x1b\x24\xd1\x8a\xf3\x06\x31\x1d\x28\x68\x14\x29\x1a\x45\x63\x0c\x88\x19\xc1\xba\x57\x0c\xe5\xf2\xb1\x81\x7a\x51\x81\x02\x51\xdf\x03\x9f\x34\x78\x05\xfc\x46\x04\x9b\x5e\xae\xf5\xd4\x6a\xa1\xc5\xc8\x25\x61\x72\xbb\x5f\x17\xe6\x17\xe5\xd0\x55\xaa\x87\xb5\xce\x67\xb9\x22\xa5\x70\x93\x8f\x7e\x38\x07\x41\x5a\xec\xd5\x1b\x47\x46\x2c\x09\x9a\x85\xfa\x69\x23\x5a\x58\xbe\x4e\xb1\x3d\x04\xe1\x29\xbe\x1e\x3a\xb6\x1b\x9e\xe2\x0f\xc3\xae\xf8\x79\x3b\x6c\xb9\x0e\xac\x97\x3f\x72\x1b\xfa\x7b\x83\xc2\xe6\xce\x2f\x2b\xb6\xb0\x54\x13\x94\x86\x7f\x1e\xed\x69\x4a\x0a\xff\xce\x66\xa9\x76\xe5\x57\x21\x4b\x54\x68\x1d\x67\xd8\xd0\x3a\x56\x08\x09\x06\xab\xe3\x16\x44\x72\x4a\xa1\x2e\x4d\x94\xf5\xb5\x62\xd4\x16\xfd\x96\x57\x99\xdf\x9e\x97\xd5\xdc\x82\xa6\x93\xa0\x27\x78\x4b\x55\xbe\x42\x1c\x5f\x22\x86\x5f\x17\xfd\x17\x80\x40\xe5\xca\xf1\x51\x5c\x6a\x15\x69\xdc\xe2\xa9\x79\x55\xcd\x97\x9e\x98\x2f\x61\x34\xa2\x63\x4c\x40\x30\xa2\x63\x69\xbc\x96\x2a\x9e\x8f\x39\x88\x20\x9a\x60\x5f\xa8\x09\x33\xec\x8f\x9c\x31\x5a\x60\x06\x22\x34\x41\x33\x78\x50\x0e\x04\xbc\x10\x13\xcc\x02\x7f\x04\x13\x34\x43\x0b\x88\x16\xf8\x19\x28\x5a\x37\x69\x2e\x60\x7d\x21\x73\x0a\x8d\x64\x8a\x17\x59\xf0\xcd\xc5\xc8\x1e\x9f\xe0\xc9\x31\x5c\x58\xd1\x82\xce\x38\x80\xa8\xd1\x98\xca\x92\xc7\x8b\xd1\xb4\xe1\x8c\x4f\x67\x22\x73\x15\xae\xd2\x2c\x01\x60\x95\xfa\x6f\x2b\x0c\xa6\xa6\xa3\xb7\x0c\x4f\x65\xd3\xc0\x0a\x2f\x45\xeb\x46\x63\x68\x5d\xdb\x98\x9e\xda\xc3\xc5\x88\x36\x9c\xb1\x3b\x41\x2b\xeb\xda\xc1\xf4\x64\x2a\x52\xc6\xee\x6c\x8b\x2c\x93\x13\x0c\x42\x2c\x88\x03\x6b\xb5\xf0\x04\xcf\x6a\xb5\xe5\x28\x06\x0b\x14\x22\x1b\x4d\xe1\x58\x45\xad\x08\x74\xfd\x62\x99\x2b\x6e\x2a\xec\x30\xd6\x4f\xfa\xa4\x59\x5b\x6b\x6b\x40\x70\x45\x9c\x34\x3e\xe4\xee\x99\x8c\xb0\x06\x5d\x92\xa0\xc0\x9a\x86\x4b\x8f\x06\x55\x6c\xb4\x0d\x91\x57\x41\x24\x43\xe2\x9e\x81\x91\x54\xfb\xc8\xc8\x19\x8f\x25\x6c\x2e\x60\xf3\x05\x23\xd1\x22\xf4\xa7\xd1\xfd\xe0\xb3\x5d\xf0\x37\xc3\x43\x0f\xcf\x40\x71\x03\xa3\x7b\x26\xf4\xf7\x40\x2a\x09\x41\x82\xde\x6f\x09\xf7\x5c\x1f\x50\xfa\xde\x14\x6a\x2a\xab\xcc\x55\xc2\x5d\xfa\x35\x04\x27\xad\x54\x38\x9b\x4c\x46\x20\x45\x36\x22\x52\x93\xe1\xa7\xd8\xd1\xb3\x82\x86\x33\x46\x41\xc3\x11\xd9\xe9\xf4\x81\x41\xd0\x70\x60\x9d\xa3\x10\x97\x43\x94\x78\x58\x7e\x12\x8e\x51\x88\x8a\x85\xa2\x67\x02\x95\x6c\x3a\x63\x14\x9a\x02\x52\xc3\x83\x75\x40\x1b\x21\x4c\x12\xf4\x6e\xab\x21\xf9\x5a\xf9\x3c\x6d\x3c\x9a\x42\x2b\x0a\x19\x17\x8a\xbc\x36\x85\xca\xc8\x10\xa0\x55\x07\xef\x01\x41\x56\xbf\x0b\x1b\xf2\xa1\xd5\x85\x9a\x30\xcc\x75\xa6\x86\xd3\x6c\x43\x08\x13\xf4\xdb\xae\x0a\xb7\x40\xb7\xad\x6e\x7d\x09\xc8\x5e\x68\x4f\xef\xa3\xbb\x56\x6b\x6b\xa1\xd4\x38\x4b\xda\x5a\xb8\xa1\xad\xb1\xac\xd8\x76\x99\x20\x55\x9d\x4a\xea\xd9\x16\x48\x5e\xf4\xc7\x5d\x90\x37\x8b\x66\x15\x1c\x14\x6b\xb8\x37\xd5\x8d\x2d\x9a\x4a\x71\x20\x9b\x8b\xbc\x4a\x15\x3d\x14\x4b\x23\x5d\x45\x0f\xc7\x10\x0e\x1b\x0d\xea\x7a\x26\x66\x07\xe5\x96\x04\x9b\xea\x78\x86\x9c\xf6\x85\x8c\x1f\x9e\xf1\x59\x93\x26\xe8\x65\x25\x86\x1b\x9d\x91\x47\xde\xd9\x42\x8f\x6e\xa3\xb7\x5e\xa7\x11\x76\x18\x3c\xd8\x26\x75\x35\x82\xfa\x37\xd9\xf1\x31\xe0\xe5\x3c\x6c\x75\x61\x82\x5e\x95\x84\x45\x7e\xdd\x0e\xaa\x60\x1e\x41\xcd\xac\x46\xcf\x94\x2c\x90\x66\x4b\xb1\xcb\x4a\x13\xd4\x71\xa3\x41\xf3\xb8\x39\x5c\x2c\x5a\x88\x10\xb2\xd9\x6c\xd1\x68\x70\x99\xcb\x46\x8d\x86\x37\xc6\x41\xe9\x46\x59\xf4\xfc\xbf\x86\x9b\x8b\x85\xc0\xdf\xc4\xcd\x45\x05\x1a\x37\xff\xb1\xd1\xd8\x62\xb5\x9f\xaf\xaa\x03\x8d\xb4\x0c\x1e\xb3\x46\xe3\x18\x06\x62\x69\x4f\x46\x7c\xc4\xc6\x63\x0d\xda\x8b\x0d\x68\x52\xb5\x2e\xe4\x6f\xca\x88\xe9\x42\xd6\x96\x11\xf9\xbd\xb1\xb6\x4a\x57\x46\x87\x00\xca\x96\xb0\x63\x08\xb8\x50\xb5\x45\x1b\x22\x78\x62\xaf\xd7\xf6\x21\x16\x4a\x05\x92\xbb\xd9\x20\xc2\x14\x79\x38\xcc\x9b\x23\xaf\xc9\x96\xb9\x43\x2f\xbd\xd2\x3c\x49\xd0\x0f\x5b\xa2\x2e\x5f\x9d\x48\x54\xb2\x09\x63\x98\xe1\xe9\x32\xd8\x10\x58\x28\x8c\x86\xb6\x6b\x72\x78\x2c\x56\x7c\x4a\xd2\x33\x2f\x98\x86\x4b\x00\xeb\x61\xa3\xb1\x96\x26\x91\x51\x68\x72\x31\x21\x8a\x1f\xc1\x68\xea\x4d\xfc\xe0\xdc\x1f\x80\x24\xe8\xd3\xdd\x82\xa3\xe1\x08\xda\x54\x8c\x4a\x2a\x24\x81\x58\xa6\x10\xa5\x4c\x80\xd0\xc4\x1b\x63\x31\x2f\x22\x7a\x5d\xea\x61\x6a\x81\xa9\x4a\x16\x0b\xa8\x9f\xf0\x86\x29\xfe\x10\x14\x9c\xad\x2d\x57\x8a\xcb\xaf\x1a\x0e\x62\xf8\x39\x20\xe8\x77\xb8\xc9\x0c\xa6\xc9\x45\x3f\x65\x65\x69\x36\x54\xc5\x90\xda\x5c\xd3\xa9\xa1\x3b\x0a\xc7\xb2\x47\xb5\x31\x17\x68\x0b\x88\xdf\x4b\xc7\xa6\x15\x52\x52\xfd\xfd\x5c\x71\xb7\xc4\x4f\xa0\x08\x0c\x99\x1c\x64\xc6\x49\x1a\x91\x49\xe5\xe9\xcf\x58\xb3\x60\xca\x42\xef\xe9\x7c\x51\x59\xd2\xdb\x2c\xf9\x8a\xcc\x2a\x0b\x6a\x07\x92\xbd\x68\xa2\x6e\x27\xae\x2a\x17\x6c\x02\x0c\x2b\xcf\x27\x53\xcd\x06\xcb\xc2\xa8\xf2\x0c\xac\x7e\x86\x99\xec\xab\x73\xa1\x17\xbc\xa4\x9e\xd4\xb5\xf6\x1f\x6a\x96\x61\x39\x2b\x1b\x7a\xa9\x9d\x5c\xa6\x11\x0f\xe7\xcc\xab\x3c\x01\xfc\x44\x3b\x81\x9b\xa9\x84\xcf\x19\x21\xd3\xa5\x17\x3c\xa5\xde\x24\x0c\x68\x65\xab\xde\x55\x7c\xf7\x61\x12\xf2\x4a\x64\x7e\xab\x2a\xcc\x63\x36\x27\x95\xb0\xb5\x53\xcd\x4b\xef\xba\xaa\xc4\x53\xad\x04\xf1\x2a\xa9\xf4\x46\x2f\x32\xa5\xd5\x85\x5e\xea\x85\xd8\xbc\xd2\xce\xae\x9d\x61\x5e\xd2\x4a\x28\xda\x29\xe6\x95\x47\x59\x65\x9b\x7c\xad\x0c\x61\xcb\x98\xdf\x65\xd3\xff\x3d\xf6\x02\x4e\xfd\xca\x62\xda\xb1\x6e\xa6\xa2\x89\xef\xdd\x5e\x88\x26\xd5\xad\x7f\xa1\x15\x59\xc4\xb3\x59\x75\x65\xda\x19\xec\x28\xae\xe4\xa1\x4f\x5a\xf7\xd2\xc9\x45\x65\xfb\x1f\x97\xcb\xbc\x0c\x26\x2c\x8d\x71\xbd\x5d\xf6\xa2\x5c\xf6\x03\x27\x95\x87\xc7\x3f\x6a\xc5\xa4\x2f\x7c\x18\x55\x36\xe0\x27\xed\x90\xb8\xc7\xa8\xbc\x5c\xa5\xa2\xd8\xaa\x28\xf6\x07\xad\xac\xf0\xf3\xc3\x36\x4c\x8c\x05\xe7\x2b\xb7\xd9\xbc\xba\xba\xb2\xae\xda\x56\xc8\xe6\x4d\xe7\xe8\xe8\xa8\x79\xbd\xe0\x4b\xdf\x40\x14\xdf\x46\x97\x73\xb7\xa2\x54\xcb\xb6\xed\x66\x74\x39\x37\x90\x2c\xea\x06\xe8\xda\xa7\xc1\x45\x55\x51\x05\x50\xe4\x1a\xe8\x7a\xe9\x57\x15\xf9\xf9\xf5\x2b\x51\x6c\xd0\x0c\xbc\x25\x89\x56\x9e\x68\xfd\xf5\xd2\x0f\xa2\x9d\x55\xcb\xdc\xa6\x91\xa0\xb0\xea\x7e\x03\x13\x1b\x06\x12\xea\x86\x0c\xfd\xfa\x76\x06\x0c\xd7\x28\x6c\xc3\xa7\xd8\xae\xd5\x0c\x09\xc1\x38\x94\xb6\x39\xa2\x0c\x9f\xd2\x02\x03\xa5\x2b\x7a\x96\xc2\x4c\x07\x42\x44\x37\x0f\x39\x70\x38\xbc\x95\x78\xba\x74\xc4\xc7\xc8\x0f\x27\x9e\xef\x92\x44\xac\x89\xbd\x0a\x84\xc2\x62\x7f\x0f\x70\x4b\x96\x1e\xde\xcb\xb4\xaa\xb6\xf3\xae\x02\xc2\x9e\x56\xde\xb3\xfe\xe6\x03\x20\x96\x44\x04\x11\x05\x17\x26\x49\xd5\x06\xe9\x86\xa1\x86\xe3\x6d\xc8\x99\x2b\x62\xde\x07\x9f\xde\xbf\xcc\x69\x86\xe5\x36\x12\xb7\xb2\xeb\xde\xd3\xfa\x4b\x85\x45\x99\xe1\xe6\x45\xf0\x04\xba\xdb\x38\x33\x44\x60\x92\x40\xc0\xa1\x36\x4d\x47\x59\x24\x81\x78\xf7\xe6\x06\x19\x46\xbb\x9c\xaa\x7f\x8f\x09\xbb\xf9\x40\x7c\x39\x11\x02\x01\xbf\x00\xed\xe7\x65\x47\x6a\x27\x68\xb2\xaf\x0a\xff\x5e\x55\x3c\x96\xe6\x83\x24\x41\xb3\xfb\x59\xc9\x25\x04\x79\xd5\x38\x89\xd4\x87\x8b\x4a\x24\x72\x05\x27\xd7\x9f\xb4\x86\x4c\xb5\xc0\xed\xa5\xce\xc3\x64\xa3\x33\xb7\xba\x12\x93\xd2\x6b\x1a\xf4\x3a\x20\xd7\x4a\x2d\x4d\xdf\xd5\x61\x1d\x9c\xee\x8b\x9f\x9d\x4d\x3d\xee\x9d\x9d\x61\x9e\x4c\xb5\x10\x13\xb7\x5a\x7c\x09\x77\x8a\xbc\xd5\x8a\x04\xd3\x27\x0b\xea\x4f\x77\xc7\xb0\x56\x80\x2d\x2a\xef\xc5\x48\x63\x21\x13\x0d\x09\x15\x0b\x3b\xcf\xdb\x17\xd4\x7a\x07\x28\x98\xa0\x52\x07\xdd\x89\xcb\x16\xc7\xa0\xcd\x0e\x7e\x18\x88\x8c\x23\x94\x1d\x10\x1b\xdf\x69\xf1\xa3\x97\x99\xa7\x85\x58\x1f\xc0\xd2\x0d\x62\x76\x79\xbb\x31\xcc\x56\x94\xd1\x89\x7f\x6c\x9a\x11\x04\x1e\xe6\xa3\x68\x0c\x87\xc0\x2b\x3a\x24\x1c\x45\x63\x14\x8c\xa2\x31\xf6\xa0\xcb\xc4\xaf\x60\x1c\xc1\x1e\x22\x47\xd9\x1c\x8f\x23\xb9\xf5\x58\x40\xa8\xd5\x00\x55\x9f\x14\xa6\xe9\x4b\x1d\x31\xe4\x29\xf1\xa0\xce\x7a\x4c\xf0\xad\xe0\xee\x1c\xb7\x45\x8e\x5b\xc9\xc6\x39\x53\xb5\x45\xd8\x3e\x8e\x4e\x66\xaa\xc2\x38\xaf\x70\x29\x2a\xf4\xf1\xca\xf4\x94\xd1\x29\x46\x71\xde\x0a\x14\x21\x0e\x91\xff\x88\x06\x8f\x26\x43\x89\x59\xec\x4e\x46\xfe\x18\xc7\x3a\xc8\x45\x06\x72\x32\xd2\xe0\xa8\x86\xa2\x08\x85\x50\x90\x46\x92\x42\x87\xad\x28\x24\xa1\xc9\x00\xee\xbb\x88\x54\x8d\xf6\x64\x24\xf0\x1e\x63\x8c\xe3\x8c\x68\xb1\x46\xb4\x9b\x7b\x39\x18\x08\x4a\xce\x2b\xf7\xc5\xca\x63\xb5\x56\xdb\x48\xc8\xe2\x53\x7f\xa6\xe4\x6a\xbd\x26\xb9\xd0\xad\xd5\x88\x7c\x2d\x72\x35\xd1\x70\x5e\xc6\xc9\x8a\xf8\x8d\x2f\x83\x44\x65\x93\x96\xba\xac\x80\xc3\xf5\x7a\x0e\x08\x14\x39\x4f\xc2\xe5\x2a\xe6\x64\xfa\x41\x14\x05\x44\xfa\x07\xc0\xaa\x4f\x4a\xc7\xec\xb4\x3a\xd2\xa3\x9a\xd1\xca\xa7\x1c\x34\x7f\x5d\x7f\x8d\xcc\xe6\xae\x73\x75\xd6\xc4\xf7\xa2\xe8\x15\x8d\xf8\x7a\x2d\x03\x9d\x8b\xb1\x92\x17\x15\x6f\x69\xa4\xfe\x20\x9c\x92\x5c\x00\x49\x91\x85\xcf\x54\x50\xad\xc7\x9c\x33\x7a\x1e\x73\x02\x0c\x09\xcc\x80\xea\xe6\x85\x1c\xca\xf5\xa6\xc1\xe1\x4a\xda\x76\xd5\x8e\x61\xc6\xc7\xd9\x56\x20\xb3\xbc\xe9\x14\xf0\x51\x30\x86\xa5\xd3\x71\x0f\x81\xc0\xc8\x32\xbc\x24\x9b\x40\xde\x66\xb7\x0e\x70\x72\xcd\x9f\x84\x81\x58\x00\x61\xc3\xd0\xcf\xb2\xa5\x05\x68\x10\x10\xf6\xe2\xe3\xeb\x57\xa5\xec\x8b\x2c\x5b\x08\xc6\x0f\xf4\xdc\xa7\x41\x76\xde\x45\xc9\x9d\x37\xe1\x54\xde\x57\x92\x89\xdd\x34\xb2\xba\xb6\xdf\x94\x02\x58\x31\x72\x49\xc3\x38\xda\x09\xa4\x24\x44\x79\x7e\xf7\x8c\x56\x62\x46\x59\xc4\x65\x2d\x5a\x05\xaf\x41\x69\xd6\x2c\x32\x9e\x94\x4f\x45\x14\x70\x0e\x88\x60\x73\x45\xaf\x4a\x9c\xdf\x6f\x4c\x95\xfb\x90\x54\xe1\xe6\x45\x1e\x38\x74\x52\xa7\x27\x8d\x56\x1a\xd4\x77\x7f\x12\xaa\x5d\x05\xf5\x99\x3e\x07\x7a\xd3\xf2\x6c\xa7\xf1\x6b\xae\x76\x12\x78\x62\xe7\xf7\xb7\xa8\x2c\x69\xbe\xcc\x1c\x2e\x25\xaf\x5b\x51\x05\x67\xeb\xec\x6f\xfd\x16\xd2\x00\x18\x8f\x0c\x69\x18\x57\x24\x74\xb7\x95\xcc\x6a\x04\x0e\xb8\x54\x77\x4b\x38\x88\xf1\x3a\x21\x80\x23\xe7\x2f\xe0\x31\x09\x03\xee\x51\xfd\xa6\x97\xcd\x39\x72\x13\x95\x53\x6c\xa7\x93\xe3\x6f\x62\x66\x79\x2a\x05\x73\x21\xc0\xde\x6c\xed\x53\xbc\x4c\x53\x90\xbe\x61\x95\x59\x12\x19\xf1\x3d\x4e\xa6\x1f\x3d\x36\x27\xfc\x40\xed\xcd\xa8\x2b\x5c\xd6\xeb\x41\x8d\x65\xf7\x15\x64\x32\xf5\x5d\x18\x51\x05\x42\xb0\x1d\x14\x72\x54\xce\x23\x8a\xe7\x61\x52\xb0\xcc\xcb\x0d\x3c\xf2\xca\xb3\x6d\x4c\xfc\xf4\xe0\x29\x0e\xe4\x4d\xa0\x25\x20\xba\xc6\x24\x21\xe4\xd7\x71\x3e\xc5\x34\xd1\x6a\x78\x75\xa7\x62\x7e\x76\x16\x06\x72\xd7\x48\x13\x45\x28\xc0\x76\x66\xcf\xcb\x25\x51\x70\x12\x4a\xa7\x23\x26\xe3\x73\x21\x62\x09\xe6\xac\xd5\x98\xfc\x3d\xc4\x58\x25\xac\xd7\x4c\x2a\x7f\x32\x41\x3c\x0c\xf9\xc8\x34\xe9\x18\x33\xe5\xa0\xa8\x78\x4a\xde\x1b\x25\x04\x34\x09\x08\x03\x0a\x04\x62\x96\x9f\xa6\x20\x66\x4d\xbc\x15\x8f\x19\x81\xc7\xa6\x49\x87\x19\x0e\x98\xba\xa5\xbb\x39\xce\xc2\x40\x6f\xec\xf3\xf2\xde\xf7\x6f\x5b\xe7\xc5\x65\x3d\x70\xf8\xc6\xcd\x57\x1b\x39\x4d\xca\x2a\x49\x41\x1a\xe4\x63\x19\x92\x1e\x79\x72\x6f\x2d\xce\x8d\x85\x13\x6c\xa3\x19\x8e\x33\xea\x4c\xe4\xc4\x3e\x81\x74\x06\x40\x84\xe3\xd1\x64\x0c\x65\x6d\x38\x23\x4c\xad\xa6\x94\x64\x9c\x11\x06\xea\x1c\x5c\x45\x96\x48\x91\x25\x2a\xc8\x12\xe5\x64\x49\xfd\xe2\xa7\xd3\x3b\x3e\xc1\x7e\xf1\x11\x66\x10\x5d\x86\x74\x0a\xa2\x74\x73\x96\xa7\xd7\x40\x6d\x81\x51\x18\x23\x5f\x0c\x88\x08\xdf\x8a\x17\x37\x4d\x13\x98\xbb\xaa\x01\x48\x5d\x74\xc1\x51\x56\x99\xeb\xa3\xb4\x2a\x97\x25\x28\x1e\xc6\x4a\x04\x45\xd0\xcd\xc9\x89\x47\xd1\x38\xa9\x3c\x69\x93\xf1\x3b\xb1\xa2\x30\x66\x13\x45\x0b\xfc\x14\x3d\xc5\x44\xf2\x7f\x46\xad\xf4\x7a\x17\x75\x62\x5b\x67\xfa\x1c\xe8\x8b\x32\x1b\xcc\x95\xff\x6b\x60\x3d\x89\x23\x1e\x2e\x25\xdc\xaa\x8b\xb9\xe8\x50\x5d\x85\x41\x65\xa4\x48\x17\x88\x4f\xa6\x1b\x4b\x61\xf1\x2d\x30\xe4\x8f\x01\x11\x1b\x02\x6a\xd1\x80\x72\x95\xce\x11\xb3\xce\xe3\xf3\x73\x9f\x44\x92\x81\x83\x09\xf1\xbd\x73\x5f\xd4\x6e\x4d\x09\xf7\xa8\x8f\x59\xfa\x00\xdd\xf2\x87\x87\x0e\x3a\x14\xab\x7f\x22\xcf\x01\x8b\x95\x9b\xca\xa1\x30\x31\xe2\x40\xdd\x37\x32\x2d\x6e\xa4\x2d\xb4\x34\x60\x84\xc1\x32\x8c\x23\x42\x02\x4e\x98\x41\x83\x3c\x6f\x73\xfd\xbc\x5e\x83\xdf\xf0\x6d\x51\xd6\x35\xe4\x73\x78\x49\x98\x81\xe4\xa3\x4f\xbc\x4b\x92\x25\xc7\xdc\xc8\xbc\xee\x7f\xc0\x23\x21\x3e\xc7\x85\xfc\xfc\xa4\x5f\xea\x35\x67\x61\xbc\x8a\x72\x35\x4a\x4d\x7b\x11\xe6\xfa\x49\xa3\xd2\x9a\xf3\x13\x18\x8d\x76\x61\x39\x1e\xa3\x1f\x60\xf2\x49\x9b\xfd\x7e\xda\xb5\x1a\xfc\x84\x22\xb9\x1a\x2a\xcd\x0a\x45\xbf\xe6\xc4\x22\xd2\xca\x12\x4b\x4f\xfb\x62\x57\x40\xc7\x1d\xed\xdc\x2e\x4a\xdd\x2a\x99\xf4\x87\xc8\x3e\x56\xae\x57\x7c\x44\xc7\xc8\xc7\xf9\xed\x45\x13\x1c\x8c\xa8\xbe\x6b\xe0\x43\x34\xc3\xf6\xf1\x4c\xae\xad\x66\x50\xba\x52\xcc\xe4\x42\xc5\xc3\xa9\x30\x0f\x51\x58\x88\xf1\x59\xba\x2f\x64\x64\x29\xa2\x37\x43\x51\x5c\x5b\x69\xe4\x8f\x10\x4d\x46\x33\xb1\xbe\x3a\x28\x51\x36\x28\xf7\x82\xbc\x07\x4f\x10\x69\x73\x85\xb9\x93\x4e\x93\x7b\xd3\x69\x34\x46\x54\xfc\x09\xb1\x7d\x1c\x4a\x12\x85\x50\x5f\x6c\x4a\xb7\xde\xb8\x20\x90\x8f\xed\x63\x5f\x2e\x13\x7d\xb1\x4c\x8c\x46\xbe\xf2\x58\x4c\xf5\x14\x45\x11\x0f\x15\xad\x45\xbe\xa0\x08\xa2\xe9\x45\xd6\x70\xab\xa9\x14\x26\x48\xdd\xd2\x71\xbf\xb6\xcd\xbe\x29\x0f\x28\x0e\x88\xb0\x57\xb8\xf2\x06\xca\xd5\x26\x6d\x6a\xa4\x9a\x1a\x62\x4f\x35\xb5\xaa\xd3\x7d\xe4\xc1\x5a\x2d\x15\x94\xe1\x9d\x9d\x29\xbe\x72\xb7\x36\x29\x8b\x50\x11\x2b\xfd\x72\x42\x79\x1e\x80\xfe\x41\x00\x84\x68\x22\x26\x73\x99\x42\x4a\x77\xde\x11\x78\xbb\x1a\x99\xe6\x64\x8c\x49\x02\xd1\x2a\x3b\xee\x89\xf9\xf0\xd2\x5d\x8a\x75\x88\x8e\x80\xd0\x06\x34\x92\x1d\xec\x20\x34\x2b\xbb\xb0\xe7\x63\x9f\x25\x05\xf1\xbd\x62\x81\x5f\x76\xce\x12\x54\xd4\x5f\xfd\xf2\xeb\x04\xdb\xc7\x13\xe9\x9f\x34\x51\xf2\x7d\x86\xe9\x68\x32\x46\x0b\x1c\x8a\x9f\xc2\xa7\x0a\xad\xb2\x41\x36\x43\xb3\x5a\x6d\x56\x90\x7c\x82\x28\x44\x37\x78\x95\x15\x9c\xcb\xd9\x5a\xab\xe6\x06\xa2\x73\x1c\x6d\xa6\x1d\x04\x60\x86\x16\x68\x8e\xce\x91\x5f\xce\x9b\x42\xb4\x42\xbc\x68\xdb\x19\xba\x42\xcf\xb0\x8d\xae\xb1\x7d\xfc\xec\xe4\xe6\xd8\x34\x9f\x09\xb5\xe0\x0c\xcf\x47\xcf\xc6\x4a\xcb\x7a\x76\x8a\xaf\x6b\x35\x70\x8d\x9f\x99\x0e\x3c\x3e\x04\x57\xf8\x7c\x74\x2d\x78\xc4\x34\xaf\x4f\x6e\x8e\xe1\xf1\x59\x6a\x2f\xbb\x5a\xaf\xe5\xaa\x27\xf5\xab\x02\x8a\x58\x9f\x40\x84\x28\x84\xd6\x99\x94\xe4\x38\x46\x91\x75\x46\xae\x29\x17\xb3\x7d\x82\x94\x78\xaf\xd8\xc5\x93\x5f\xaa\x1e\x94\x65\xd6\x6b\xbd\x3b\xad\xa5\xb7\x02\x0b\xb8\xc5\x73\x02\xf0\x5d\xd0\xae\x29\xbf\x1f\x30\xa1\xd7\xef\xb8\x28\x54\x71\xa7\xc0\x0b\xc0\x94\xf3\x32\x86\x13\xf0\x41\x31\x38\x76\x38\x5f\x81\x00\xba\x41\xba\x56\x55\x01\x9e\x90\xf2\x25\xe0\xea\x18\x82\xbc\xdd\x3d\xdb\x2e\x0f\xb3\x05\x35\x74\x19\x08\x21\x0a\x6a\x35\x3a\x0c\x2c\xb9\xef\x05\x28\xb4\x42\x36\x15\x88\xb8\x34\x41\x32\xcd\xad\x74\xf5\xd8\x14\x21\x24\x7f\x0e\x0a\x71\x42\x31\x2b\x3c\x2f\xf2\x58\x07\x42\x7c\x21\x4f\x3f\x7d\x20\x74\x2d\xfb\x38\x92\x6a\x76\x94\x4b\x9a\x18\xf9\xd2\x54\x84\x26\x98\x89\x9f\x19\xf6\x0b\x2b\x99\x97\x59\x9a\x32\xfb\x18\x9a\x62\xfb\x78\x2a\x75\xd1\x29\x04\x31\xf6\x47\xd3\xf1\x7a\x3d\x19\x4d\xa5\xac\x5d\x8c\xa6\xb9\xc5\xeb\x38\x3a\x09\x64\x45\x12\x86\xa8\xa1\x2c\x7c\xbc\xad\xbe\x93\x24\xd9\x73\x81\x6a\xd6\xf4\x74\xcb\x9d\x14\x26\x8c\xd2\x2e\xbb\x74\x45\x19\x71\x31\x71\xd0\xe2\x38\x86\x87\xe9\x28\x1c\x1f\x37\x1a\xa1\xf4\x6d\x01\x81\x7c\x97\xb3\x65\xad\xd6\xf9\x35\xd8\xb9\xc8\x12\xf2\xd3\xdb\xb9\xd8\x0e\x90\x27\xa9\x9c\x33\x0f\x97\x11\x41\xa2\x90\x95\xf5\x86\x5c\x57\xe1\xfa\xcd\x45\x8f\x78\xad\xc6\x86\x04\xf0\x42\x7a\xb0\x62\x06\x76\x0f\x79\xe3\x90\x25\x44\x9e\xe4\xbb\xd1\x8f\x9a\x94\xc8\x11\x14\xdd\x4f\xcb\xdd\xad\x66\xce\x40\xce\x9c\x25\x3b\x2d\xdb\x9a\x3a\x05\x31\xb4\x8f\xe3\x4c\x12\xc6\x52\x12\xca\xe9\x74\x22\xa9\x25\x65\x93\x07\x0f\x7c\xe5\xaa\xc4\x61\x52\xea\x55\xba\xd1\xab\x19\x9f\x27\x48\xc8\xca\xed\xf3\x68\xc5\x4d\x8b\x76\xce\x1f\x7a\x9a\x1a\xa6\xd9\x8d\xb6\xd2\xba\xbf\x71\xdb\x65\x82\xc4\x8a\xbf\xe2\x96\xd6\x1d\x33\x95\xe0\x1e\xbd\xb3\x36\x26\x2c\x78\x4b\x46\xa6\xc9\x55\xc5\x89\xbc\xa2\x4d\xc0\xbf\x17\x5b\xda\x3a\x57\x72\x39\xa3\xf3\x82\x2d\x15\x53\x52\x6c\xa3\x30\xf7\x1c\x3e\xa6\x72\x34\xa6\xf7\xbd\x79\x72\x82\x97\x9e\xf0\xb9\xc7\x5a\xa2\xdb\xa6\x90\x68\xc4\x76\x4b\xed\xbd\xed\x31\x4d\xa2\xda\x41\x96\xab\xf2\xfd\xbd\xea\xab\x43\x65\x1d\x0a\xa7\x32\x30\x90\xf8\xfa\x7e\xb2\xc8\xd6\x64\x90\x3c\xd1\x64\x9a\xac\xe4\xea\xc2\x47\x6c\x9c\x3a\x32\xe5\x3b\x01\x9e\xd4\x5a\x3c\x08\x28\x0e\xd5\x91\x92\x74\x16\xa5\x88\x16\x83\xc0\x43\xe1\xc6\x80\xf2\x38\x67\x6e\x85\x83\x90\xda\x8f\x14\x14\xdb\xf0\xa1\x3d\x69\x95\xe4\xbe\x6a\x5e\xbe\x07\x98\x6e\x5c\x06\x25\x53\xec\x9b\x0f\x80\xa5\x3b\x90\x69\x01\x21\xef\x4b\xc6\x5a\x96\xb3\x7b\x41\xea\xcc\x19\x69\xc8\xee\xb5\x1d\xaa\x2d\xc7\xf5\x9a\x1f\xbc\xf7\x59\x05\x47\xee\xd9\xb8\x95\xce\xce\xdb\xc8\x69\x26\xf6\x0d\x8e\x12\xaa\x6a\xe5\xf5\xb2\x07\xd9\xec\x76\xcf\x46\xa4\x67\x46\xcb\x34\xde\x28\x84\x58\xb9\xad\xdf\x1a\x2d\xb9\x6d\xbb\x89\x86\x3c\xf7\x98\x24\xee\x7d\xa9\x72\x9f\x76\xf0\xfb\xb4\xa3\x0a\x13\x2e\x37\x90\x19\xe2\xf2\x5e\x41\x7e\xe3\x93\x2d\x0d\x66\x87\xa3\xf8\xa9\x33\xac\xe0\xc3\x7b\xf0\x8d\xda\x51\x51\x94\xd2\xc2\x1d\xee\x62\x9e\x1d\xe8\x6c\xf4\x4f\x70\x47\xff\x04\xc3\x7d\x75\xbb\x5a\x66\x54\xec\xdb\x00\x82\x82\x6d\x16\xa9\x46\x62\x27\x04\x69\xc1\x4c\xa0\x7c\xca\x78\xc5\x30\x5c\x06\xa1\x7b\x0e\x34\xf9\x80\x08\x4c\xd0\x2a\xfd\xae\xba\x2f\xbf\x45\x17\x68\x36\x46\x79\xe9\xef\xdd\x44\xff\xf3\x43\xa2\x5c\x97\x9b\xfe\x62\x76\x4f\x5e\x95\x97\x2d\xa7\xa4\x83\x69\x1f\x29\x5a\xc9\x0b\x9c\xa5\x65\x9d\x4c\x2b\x25\xf3\x99\xd2\x91\x77\x09\xe7\x62\x5e\xbc\xd2\xbb\x00\x66\x76\x61\x56\xa8\x77\x34\x3d\x51\x78\x28\xb4\x34\x65\xaa\x07\x6c\x44\xc7\x99\x3b\xe6\x61\x36\xa1\x1f\xda\x15\xe2\xf9\x4f\x11\x17\xec\xa0\xeb\xf0\xda\xfd\xa0\x6e\xff\x95\x7e\x1f\xee\x5d\x5d\x7d\xad\x95\xdd\x5f\xf2\x43\x51\x32\x17\x06\x9c\x5c\xf3\xaa\xcf\xb6\x0e\x8c\x14\xcd\xcd\x3c\x3f\xde\xba\x55\x0d\x27\x77\xa0\x9b\x45\x8a\xa8\xe6\xa9\xad\x8d\xc0\x8c\xdd\x0d\xc3\xe5\xf7\x9b\xb0\xf4\xaf\x89\xe4\xab\x32\x57\xe9\x05\x12\x24\xfd\xb1\xfe\x5c\xfb\x1f\xff\x5d\xed\x2f\xf6\x39\x1f\xde\xfa\xe2\xdb\xca\xb6\xe7\xd9\x09\x62\x1e\x8d\x76\x46\x74\x94\x0d\xbd\x80\x09\x92\x97\x3d\xec\x2d\xf5\x11\x26\xa9\x53\x4b\xc5\x36\xdb\x8e\x33\x46\x9e\x16\xc2\x21\x9d\xaf\x7c\x32\xe1\x60\x47\x3d\xa5\xcd\xdb\x6a\xca\xc1\x24\xf7\x89\xa9\x14\x15\x7b\x10\x41\x41\x4e\xe7\xd7\xd5\x72\x92\xbb\x31\xe0\x0f\x41\xb8\xb4\x80\xdb\x75\x91\x7e\x50\x9d\xae\xcc\x25\xb2\x3d\x9b\xbb\x97\x15\xd4\x7f\x22\xd6\x3d\x7e\x18\x90\x9d\x3b\x8b\x29\xa6\x64\xf8\xce\x7d\xaf\xec\x6f\xf1\xf2\xfe\x1c\x9f\x4d\x55\x9a\x4d\x17\x91\x32\x4f\x65\x19\x09\x0a\x77\x18\x46\xa4\x9b\x7f\xa5\x6b\x47\xa5\x4f\x84\xb4\xbc\x54\xf0\x92\x21\x17\x3f\xb9\x97\xa2\xb5\xe9\xa5\xa8\xf9\x26\x32\xd3\x81\x88\x94\x5d\x15\x51\xba\x0b\xa4\x36\x80\xc4\x94\x93\xa4\x36\x96\xc2\x94\x77\x20\xdd\xf1\x2b\x26\x13\x35\x9b\x44\x98\x0f\x9f\xbb\xaf\x90\x7e\xc4\xed\xd0\x11\x1c\x64\x1f\x07\xd2\xa6\x17\xc0\xa2\x6f\x22\x10\x8e\x82\xb1\x3a\x93\x5c\x5a\x6b\xa8\xcb\x83\xcb\x34\x54\x5b\x98\x65\xa3\x89\x8d\x26\xf9\x0a\xfa\xd8\x3f\x99\x48\x6b\xac\x3a\x6b\x62\x8b\xc5\xf5\xc8\x1f\xe7\xd5\xd2\x19\x90\x2b\x9e\xa0\xd8\xb5\x8b\xd3\x5d\x3b\x9a\xed\xda\xc5\xa5\x5d\xbb\x58\xed\xa1\xa9\xc8\x86\x1e\x2f\x2d\xca\x36\xdd\xc8\xfe\xc2\x3c\x97\xf9\x26\xa7\x93\x0f\xda\x39\x80\xef\x56\x17\xb6\x40\xc1\x5c\x6f\x48\xf7\xca\x7f\xc7\x3f\xa1\xcf\x15\xac\x66\x44\x32\xfc\xa8\x3e\xf8\xb7\xf6\x71\x36\x3d\xdc\xc6\x63\xb4\x7b\x93\x47\x85\x0c\x12\xdf\x13\xb5\xe1\x83\xbe\x54\x71\xf8\x67\x20\x24\x8c\x5a\x7f\xee\x82\x25\xa6\xe1\x7f\x60\xbb\xd8\x9b\xfa\x57\xd9\x44\xf9\x5d\xb1\x0d\xf5\x5d\x26\xe6\xcf\xb0\xf1\xff\x33\x4c\x60\x9a\xff\x80\x45\x6c\xe9\x76\x0f\x26\xdf\x69\x7b\x4d\xff\xda\xb5\xef\xf4\x1d\x9a\x13\xbe\x77\x09\x7e\x7c\x08\xf8\x23\x1a\x3c\x22\x50\xa9\x45\xd2\xc9\xb7\xb0\x50\x65\x6a\x51\x7e\xb8\x66\xc4\xc7\x09\x8a\xc8\xa6\xec\x2d\xb2\x25\x54\xa1\xe8\x55\xb9\x64\x94\x1c\x21\x64\xb5\xb5\x5a\xaa\x55\xe6\x9f\xde\x1d\x28\xf8\x2c\xe5\x81\x1f\x71\x95\x25\x05\x71\xfc\xf4\x98\x60\xae\xef\xcd\x1e\x43\x8e\x49\x3e\x32\x13\xf4\x73\x65\xb0\x8c\xd4\xdf\xec\xc3\xe7\x7f\xe4\xfb\x90\x44\xc6\x2c\x48\xb7\x54\x3f\x7c\xfe\xc7\xbb\x90\x06\x3c\x5b\xa2\x6c\xa6\x6b\x66\x5f\xeb\x1a\x73\x6b\xe2\x53\x12\xf0\x9f\x51\x60\xdd\xe4\x6f\x5f\xd0\x08\x04\x38\xb0\x96\x1e\x67\xf4\xfa\x23\xf3\x82\x68\x16\xb2\xa5\xf2\xe4\xfa\x30\x61\x84\x04\x4f\x3e\xbe\x96\x13\x78\x7a\xea\x1f\x42\xeb\x5a\x80\x50\x2e\xba\x14\xcb\x92\x3f\x84\xb1\x3c\x8d\xf2\x44\x02\x7d\x2f\xe4\x7e\x1e\xc9\x22\xaf\xb8\x41\x65\xe8\x99\x06\x49\x13\x5e\x91\x19\x47\x39\x22\x0d\x6a\xf1\x70\x95\x67\x7e\x0c\x57\xe3\x04\xfd\x52\xe1\xa6\xfd\x63\xd1\x2e\x6e\x4d\x16\x5e\x30\x27\xd3\x8f\x61\x3c\x59\x90\x48\x8a\xe2\xcd\xc4\x91\x3d\x86\xe8\xe7\xd4\xf7\xf4\x9f\x0f\x1a\xa3\xd5\x43\x54\x79\x90\xde\x6b\x90\x66\x2a\xdb\x68\xec\x12\x35\x5a\x09\xd9\x3a\x95\xb6\x25\xf5\xdb\x52\xbe\x73\x24\xdb\xba\xd1\x1a\xed\xda\xb7\xd4\xe0\xc6\x73\x1f\x0f\xd7\xce\x8d\x6e\x69\xd0\x0a\x79\xf6\x91\x4e\x49\xc0\xe9\x8c\x12\x86\x31\x66\x99\x14\x16\x14\x29\x6c\xbb\xca\x06\xc7\xc9\x9e\x88\x40\x3f\xca\xeb\x1e\x36\x90\x48\x6d\x65\x1a\x0a\x1b\x96\xda\xdc\x7c\x46\x47\x6c\x8c\x65\x37\x8c\xb4\x78\x40\x34\x3f\xbd\xa5\x78\xb7\xea\xb4\xc4\x17\xfd\x6c\x14\xf1\x76\x9c\xa0\xd2\x4e\x6e\x49\xa3\x45\x55\x99\x7f\xe9\xe7\x81\xf8\x64\x41\xee\xba\x2b\x52\x6e\xe8\x57\x95\xf9\x45\xbb\xaf\xb2\x38\x0d\xb1\x5d\x2e\xac\x28\x57\x79\xac\x45\x3f\x00\x26\x07\x80\x1c\xc2\x55\x25\x7f\xd6\x8e\xd1\x48\x8e\xbc\x23\x66\x57\xbe\x8b\x5d\x55\xee\x9f\x9b\xe5\x76\x1c\x15\xfb\x7d\xb3\x5c\x75\x27\xc4\xdb\xc5\x76\x54\x3c\xd1\x4a\xf2\x9b\xea\x03\x43\xda\xa5\x98\x92\xf1\xaa\xca\x10\xb2\x51\xa8\x9a\xbc\x5c\x2b\x76\x45\x83\x69\x78\x75\x47\xa4\x35\x72\xb9\xe3\x4c\x91\x76\x62\x6c\x52\x78\xc5\xec\x38\x83\x75\xaf\x3b\x23\x19\x70\xe0\xc6\xed\x8f\x59\x78\x30\x15\xef\x8b\xd4\x89\x50\x15\xeb\xd9\x94\x01\x80\xd3\x68\xd7\x89\xd9\xae\x87\x0d\x0f\xd6\xb9\x09\x3a\x8d\x5e\x3d\x34\xdb\x75\x0f\xd6\x99\x09\x1c\x33\xcb\x95\x29\x81\xe9\xd5\x29\x6c\xf6\x12\x05\x6d\xff\x62\x2e\x23\xab\x7e\x30\xc3\xab\xd6\x8b\x34\x27\x40\x93\xd5\xb9\xe6\x46\x14\xe9\xd3\x18\x6f\x90\x22\xe0\x93\x00\xc5\x4e\x9d\x81\xbd\x5e\xb3\x93\x86\xbc\x0b\xa0\xd1\xee\xd9\x75\x2d\x74\x39\x6b\xb6\x7b\x36\x74\x19\x74\x43\x90\x47\x62\xe7\xae\xee\x87\x1c\xef\x87\xbf\xfd\xa5\x8a\x4a\x92\x7f\x4f\x0a\x17\xc5\x0a\x6a\x38\x32\x08\xbc\x49\xe0\x30\x2e\x45\x6c\x2b\x76\xe3\x1b\x3b\xed\x86\x04\x6b\x01\x7f\x59\x1e\x7d\x47\xbc\x8b\x62\x0d\x82\x18\x76\x9a\xac\x60\x8b\x22\x78\x66\xf1\xa1\x19\xd4\x95\x59\x4f\xc6\x89\x23\x45\x73\x38\x1c\x32\x97\xcb\x8c\x4d\x8e\xc9\xbc\xc0\x18\x00\x24\xbd\x34\x14\x04\xd6\x4c\xae\xc4\x2d\x86\x00\x2f\x25\x72\x91\x08\x51\x88\xe5\x45\xc8\x88\xab\xa0\xd4\x4c\x46\xde\xe5\x2a\x30\x75\x0c\xf2\x50\x95\x88\x17\x91\x38\x37\x99\x40\x77\x66\x67\x98\x02\x0e\x11\xb1\xe6\x38\x54\x0f\xe7\xd8\x53\x0f\x59\x54\xca\x48\xbe\xca\x5b\x15\x32\xc1\x67\xcd\xbd\xe5\xd2\xc3\x04\xd1\xa4\x34\x10\x26\x55\x0c\xca\xf5\xb3\xe4\xbc\x88\x08\x56\x4c\x39\x21\x2c\xb9\x45\x84\x65\xb7\x88\x10\xa6\x41\x03\xec\x63\x26\xa7\x4a\x06\x69\x99\x32\x62\x76\x42\x9e\x98\xac\xa8\xc5\xd6\x6b\x1b\x45\xea\x79\x2e\x9e\x63\xf5\x7c\xbe\x5e\xe7\x1b\x53\x1e\x26\xc0\x13\x75\x12\x10\x89\xba\x08\x88\x21\xa2\x79\x83\x9d\xaa\x6b\xa1\xa9\xc5\xb0\xb4\x00\x50\x6b\x8e\x55\x90\x49\xeb\x5c\xfa\x59\x21\x2a\x69\x93\x4c\x2a\xd6\xa1\x45\x04\xbe\xad\x5e\xc8\x3d\x01\xd8\x09\xb6\x87\x0c\xdb\xae\xbc\xbb\x05\x30\xec\x20\xde\x70\xa0\xab\x85\x2a\x61\x75\x2e\x7a\x5e\x86\xbe\x93\x11\xf0\x4c\x67\x2c\x48\x76\x6a\x0f\x55\xc0\x13\xb7\x25\xe4\x8a\x20\xdb\x09\x6f\x38\x22\xd1\x6c\x89\x44\xaf\x11\xe6\xd3\x36\x00\xac\x11\x34\x39\xac\x73\x14\xc9\x80\x5a\xb1\x58\x12\xa1\x7d\x68\xef\x46\x5a\x43\x0e\x00\xf6\x3d\x76\xe0\x89\x3d\x34\x4d\xe6\x32\x98\xe1\x0a\x02\x53\xb4\xe3\x7b\x9e\xe2\x2c\x1e\x22\x95\xae\x52\x63\xf5\xd2\x12\x2f\x55\x58\x4a\xcf\x33\x85\xe5\xc1\x76\x94\xc1\x62\x9e\x68\x60\x19\xfa\xac\x52\xc8\xf1\x3a\xd3\xc5\xe2\x42\x8b\xdc\xbd\xa8\x32\xf4\x7c\xb8\x59\x9e\x87\x7e\xad\x66\x44\xf2\x61\x33\xc3\xa2\x9c\x30\xa1\xce\x54\x59\xee\x32\x55\xb4\xd2\xf8\x46\x6a\xb5\x3d\xd5\x91\xd2\xcd\xc2\x18\xe7\xe9\x87\xd9\x73\xb1\x3e\x1b\x66\xb8\xb9\x79\x85\x42\x64\x24\x2a\xca\x52\x73\xd4\x30\xc7\x43\x30\x74\xbf\x4e\xcd\xaf\xd6\xf0\xeb\xb4\xbe\x96\x3f\x26\xcc\x2e\xf9\x15\xf9\xf2\x8e\xdf\xe6\xbc\x7c\x79\xee\x34\x5d\xef\x20\x63\x2e\x6f\xcb\xad\x58\xe0\xa4\x71\xfd\xa6\x96\xef\x45\xfc\x65\x30\x25\xd7\x78\xa5\x3d\xe7\x21\x0f\x47\xa2\x77\xd3\xb8\x04\xea\xd0\x28\x17\x7f\x8f\x01\xd3\x6e\xe3\x92\x01\x2e\xd2\x7b\xb7\x38\x84\xc7\x50\x3a\xa1\x4a\x9b\x0d\x3c\x0d\xd3\x60\x9a\xca\x28\x13\x22\x0a\x51\x34\xf2\xc6\x43\xf1\xc7\xc4\xd4\x8d\x46\xa6\xe9\x8d\x31\x85\x08\x30\xcc\xc4\x82\x01\x63\x2c\xd6\x45\xe2\x71\xa8\x15\x0d\xb2\xa2\x81\x0b\xb2\xa7\xd8\xf7\x51\xea\x85\x76\x4b\x5d\x0f\x5d\xbb\x33\xe5\x62\x2b\xc3\x7e\x69\x2d\xca\x43\x31\x9c\xf0\x22\x68\xa9\x86\xd6\x4e\xa4\x0a\x73\xd0\x30\x1e\xd9\xe3\xbd\x86\x5e\x4d\x1e\x03\xae\xae\xaf\x01\xe2\x23\xeb\x1a\xde\x61\xc6\x2d\x66\x7e\xc0\xe5\xf5\x62\x99\x83\x36\xaa\x5a\xb0\xb3\xd4\xf6\xc4\xa5\x11\x28\x1a\x01\x86\x63\x69\x03\xa2\x63\xcc\xac\x6b\xcd\xce\x9a\x9d\x48\x30\x60\xa2\x1f\x92\xbc\xd4\x46\xcf\xe5\xff\x81\xa3\xe7\x46\xfa\xbb\x9d\x95\x62\x2e\xea\x31\x79\x2e\x35\xcb\x6e\xba\xcc\x5a\xaf\x8d\xf3\x30\xf4\x89\x27\xd0\xc2\x74\x18\xca\x8e\x30\x82\x78\x79\x4e\x98\x4a\x9a\xb9\xc5\x6a\x15\x53\x21\xe0\xf3\xc9\xcb\x93\xd3\xfa\x10\x70\xcc\x90\x0f\xdd\xa5\xcb\xf5\xa0\xd9\x81\xe5\x0d\xfd\x72\xd2\x53\x8f\x93\x61\x95\xe1\x41\x0c\x63\x91\x79\xb0\x4b\x28\x16\x4a\x0b\xb3\x22\xc2\x3f\xd2\x25\x01\x42\x3c\x06\x10\xb1\x24\xd9\x88\xe4\xc5\x61\x55\x25\xdb\xab\x46\x32\xd4\x1c\xbc\xf2\x63\xb5\xae\xbd\x11\x23\x72\xc3\xf1\x4b\x9b\xce\xa9\x9c\xce\x65\xec\xd9\x2b\x40\x46\x6c\x9c\x2e\x35\xa5\xcb\x56\xb6\x0c\x95\x33\xbb\x48\xdf\x9a\x8e\x52\xe6\xd6\x61\xc9\xc2\x02\xa0\xc6\xce\x5e\x69\x53\x33\xf7\xde\xe4\xca\xa8\xf9\x76\xa6\x33\x97\x96\x9b\x19\x91\xf2\xbb\x59\x76\x51\xe5\x36\x41\x14\xdf\x26\xaa\x5d\x8f\xa8\x62\x8e\x43\x8c\x05\xd7\x86\xb2\xaf\x45\xd7\x2f\xe4\x6d\x35\x80\xe0\xdb\x24\x73\xd5\x13\xcb\xf4\x52\x09\x2e\x4a\x70\x59\x82\x43\x09\x8a\x0c\x83\x4d\xea\xb8\xf4\x4e\x82\x48\x24\xd4\xfa\x3d\x28\xd3\x82\x26\x89\x3b\x83\xa9\x69\xe5\xd9\x83\x67\x54\xfd\xf6\x3a\x31\xb9\xc2\x24\x41\xd7\xa5\xcb\x65\x3e\xe0\x5b\x19\x91\xc1\xf7\x38\xf9\xd9\xb5\x51\xfe\xf2\xc5\xb5\x11\x0b\xb9\xc7\x89\x6b\xa3\xe8\x82\x5c\x89\xdc\x68\xe2\xf9\xe4\x67\xd7\x51\x0f\x5f\x5c\x27\x41\x6f\x37\xac\x2d\xd9\xd1\xde\xd4\x5d\x0c\xc5\xd9\x92\xca\xd3\xa2\x87\x92\xba\x40\x87\xab\x20\x03\x4d\xec\x21\xde\xc4\x1e\x44\x20\xc6\xa4\xce\x24\x9b\xd7\x6a\x80\x35\x30\xa9\xc7\x28\x68\x60\x5e\x8f\x21\x02\x7a\xd4\x78\x56\x67\x66\x50\x0f\x24\x00\xd6\xc4\x11\x0a\xc4\x9f\xb8\x89\x23\x88\x48\x3d\x38\xe1\x75\x26\xbd\xaa\x1b\x04\x71\xdc\xe0\x28\xc6\x8d\x58\xcc\x76\x1e\x44\x7a\x7b\xa9\xde\xde\x30\x6b\xaf\x16\x79\x9e\x23\x02\xeb\xd7\x69\xfb\xf3\x74\x10\xcb\x44\x45\x0c\x2f\x23\x46\xa4\xab\x2e\xda\x35\x7d\xfa\x32\x42\xd3\xe5\xd3\xbd\x18\xa2\x02\x27\x9a\xc6\x23\xc3\x35\x8c\x64\x93\x45\x8a\x83\x3f\xf9\x2c\x9d\x4d\x72\x58\xce\x68\xa9\x76\xac\x75\x42\x1e\x81\x55\xdd\x06\x70\x88\x31\x5d\xaf\x83\x43\x8c\xd3\x5e\x89\x71\x1a\x3d\xcc\xc8\x1b\x0f\x0c\xa4\x0e\xbf\xab\x1f\x06\x0f\xa2\x7c\xbe\x8d\x1b\x1d\x39\xe3\x12\xe9\xd2\x2e\x13\x5a\x32\x21\x40\xa1\x98\x70\x88\x1f\x11\x40\xd7\xeb\x50\xf9\x3a\x6e\x02\x36\xa9\xc9\xcd\xd0\x64\x30\x01\xa1\x55\x90\x1e\x69\x2f\x5f\x90\xa7\xe7\x78\x7a\x8e\xd0\x28\x37\x96\xf8\x82\xbb\x44\xab\xf8\x10\x90\x06\x17\x4b\xdd\x21\x37\xb1\xbc\xb4\xa4\x41\xc4\xab\xe8\x79\x99\x00\x35\xb5\x81\xa9\x27\x0a\x18\x34\x0d\xd5\xd1\x59\xab\x03\x98\xb6\x48\x0e\x33\x08\x5d\x5e\xab\x55\x16\x37\xb9\x19\xc8\x76\xa8\x04\xe4\x65\x0f\xd1\x6e\x1c\x77\x60\x20\x39\x6a\x07\x02\x5b\xf5\xa7\x85\xf3\xea\xe5\x3b\xf2\xd2\xdf\xed\xca\x03\x75\x5e\x2c\xed\x7d\xb6\x5e\xf3\x43\x8c\x83\x8c\x8f\xc2\x0c\x74\x28\x40\x0b\xde\xcd\xf0\x30\x50\xf6\x00\x0d\x78\xe0\xe5\x98\x47\x39\x0b\x30\xc5\x02\x51\x8a\x2f\x97\x5a\x98\x0a\xaa\xe6\x60\xb9\x6f\x26\x7e\x82\xf5\xba\xaa\x12\x93\x99\x06\x32\xcc\x40\x5d\x8e\x26\xda\x21\x47\x10\x4a\x1f\x04\x1b\xa4\x29\x5e\x96\x22\xbb\x3f\xc4\x9e\x52\x02\x2b\xf7\x35\x10\x13\x4a\x6c\x50\x9c\x76\x33\x4d\x19\x22\x3d\x1a\x09\x0d\x4b\x48\x60\xa1\x31\xf1\x5d\x1a\x53\x22\x75\x89\x0b\xfc\x18\x54\xd8\xad\x83\x30\x20\xea\xc6\xd6\x0f\x2e\xb8\x59\xaf\xc1\x0d\xde\x3c\x75\x95\xc6\xf7\x30\x9e\xbe\xfc\x6c\x40\x34\xc7\xbb\x4c\xd6\xe8\x5c\xcb\x2a\x4e\xae\x43\x74\x93\x7a\x1d\xf1\x6c\x6b\x40\x9e\x50\x38\xdf\x3e\x98\x3e\x2f\xed\x96\xdf\xc0\x5d\xe7\xd4\x8d\x1c\x92\x40\xa8\x74\xd6\xf8\x46\xdf\x3a\xed\xa3\x86\x93\x6d\xd0\x1a\xc8\x80\xe8\x2d\x30\x65\xac\x4e\x93\x8c\x1c\xf9\xb7\x25\xff\xb6\xe5\xdf\x8e\xfc\xdb\x1d\x43\x98\x20\x63\x75\x8d\x1e\x19\xe2\x07\x1a\xc8\x98\x92\x39\x34\x20\xfa\x58\x49\xc2\x3c\x9a\xc8\x07\x17\x9c\xad\xd7\xe0\x6c\x07\x01\xdf\x7c\x00\x7b\xc3\xeb\x88\x45\x0e\x44\x67\x1b\x87\x73\x8b\x96\x22\x02\x11\x20\xf8\xac\x20\xa3\x75\xee\x45\xe4\xb3\xe7\x4b\x6d\x33\xf4\xe9\x54\x0c\x61\xa1\xbe\x09\x0a\xa8\xdd\x18\xf4\x16\x14\xf7\x9e\x4d\x10\xb1\xa6\x88\x58\x04\x11\x6b\x06\xa1\xfb\x41\x34\x54\x36\x13\x1a\x6a\x40\xe4\x82\xfc\x75\xe5\xba\x20\xdb\x14\xa7\x98\x00\xdd\x1a\x34\x55\xd6\xa0\x05\xd2\x75\xc9\x29\x04\x4c\x24\x0a\xee\x8e\x01\xb7\x22\xc4\xac\x48\x48\x73\xf1\xe2\x23\x66\xf9\xca\x44\x94\x1b\x86\x10\xdb\x6d\x22\xd2\xd4\x72\x6b\x81\xa9\x3c\x57\x6d\x45\xd2\xbd\x15\x71\xcb\x57\x96\x10\xae\x99\x88\xc4\xab\x32\x83\xe4\x6d\x7a\xf2\xa0\x36\x4d\xaa\xda\x34\xd9\x68\xd3\x04\x31\x6b\xf2\x4d\xdb\x34\x79\x58\x9b\xde\x57\xb4\xe9\x11\x17\xfa\x91\x36\x27\x73\xcd\x0c\x5c\x6a\xe3\x79\xde\x46\x5a\x4a\xa4\xaa\x8d\x5e\xda\x6f\x54\xf4\x5b\x94\xb6\x91\x8a\x36\xfa\xa5\x36\xd2\xfb\xb6\x31\xcc\xfa\xcd\xcb\xda\x18\x81\x92\xad\x53\x6f\xaf\x5f\xb4\x37\x5b\x28\x60\x93\xa1\xcc\xd6\xc7\x95\xad\x2f\x91\xdf\x7f\xf8\xf1\xfd\xc7\x16\x7a\x0d\x22\x88\x5e\x83\x18\xa2\x27\xe2\xe9\x89\x78\x7a\x0f\x22\x65\xac\x79\x87\xdf\x83\x18\x1e\xec\xbb\x24\xe5\xea\x8e\x4b\x4c\x66\x77\x5c\x82\xf2\xec\x8e\x4b\x56\xb4\x58\x79\x95\x31\xf7\xb4\x50\x63\x95\xfb\x14\x1f\xef\xb8\xa4\xc5\xbf\xe3\x92\x95\x77\x7f\xe5\x8e\x15\x3a\x03\x80\x61\x40\x30\x1f\x12\x8b\x87\xcf\xae\x57\x61\x40\x02\x4e\x3d\x1f\x48\xeb\xe0\x66\x22\x84\x85\xb7\x0b\x31\x20\x3c\xb1\xa1\x26\x2f\x0f\x8a\xf8\x95\x85\x97\x4b\x7e\x6f\x41\xe1\x3c\x1a\x8c\xec\xb1\x19\xa4\x65\x5a\xd0\x0d\x90\xa9\xbb\xc9\x8c\x37\xef\x76\x49\x35\x71\x82\x03\x90\xc7\x5e\x97\x01\x6f\x85\xc0\x57\x37\x6a\x84\xb8\xf9\x2b\x18\xba\xc0\x82\x43\x30\x3a\x39\xc5\xbf\x8e\x85\xc8\x1c\x99\x5f\x1b\xe0\xd1\x58\x3c\x7d\xf7\x1f\xe2\xc7\x86\x43\x20\xad\x52\x00\x89\x27\x4b\x3d\xff\x6f\x51\xc0\x6b\xfc\xf1\xfd\x18\x0e\xbf\x6b\xd2\xd2\xfe\x46\xc9\xf1\x21\x2a\x05\x3d\x89\xf2\x68\x99\x1c\x87\xb9\xbd\x09\xf2\x05\x0b\xaf\x64\xf1\x67\x8c\x85\x0c\x18\x34\xb8\xf4\x7c\x3a\x7d\x24\xa4\xbb\xc7\xdd\x47\x86\x99\x06\x8d\xe6\xca\xbb\x6e\x46\x7d\x1f\xf3\x91\x33\x5e\xaf\x8d\x47\x69\xc8\x06\xcf\xa7\xf3\x00\xf3\x51\x4b\x24\x9e\xa6\x89\x91\x4a\x6b\x8b\xb4\x46\x96\x26\xed\x0c\x98\x8f\x3a\x22\x35\x4d\xfc\x83\xb0\x10\x1f\x1e\xf2\x51\x77\xac\x12\xae\xe8\x94\x2f\x30\x1f\xf5\xc6\xb5\x9a\x29\x7e\xd2\x0b\xc5\x42\x31\xe8\x44\xc1\x7e\x9a\xb2\x62\x64\x42\x23\x1a\x8a\x7a\x06\xaa\xf0\x60\x9c\xf6\x4d\x16\x6e\x82\x33\xba\x94\x1f\x1d\xa5\x1f\x49\x7f\x0e\x3e\x72\x6c\x89\x42\xe2\x69\x5e\x1e\x91\x76\x43\x85\xf6\x9c\xaf\x7a\x2b\x8e\x34\xe6\x34\x31\x0b\x4a\x98\x79\xfb\x4d\xad\xd5\x26\xc8\x5b\x9b\xdf\x6c\x9e\xb9\x23\xe7\xad\x1e\x1a\x46\x71\x59\xaf\x83\xec\x75\x91\x05\x61\x0a\x41\xd2\x61\x68\xa0\x6d\x10\x39\x3d\x04\x18\xc3\x2a\x5d\xb1\x9b\x82\xca\x8b\xe4\xe0\x04\x81\x86\xc6\xff\x56\xd0\x72\x0a\x29\x5f\x10\x19\x99\x09\xcd\x36\xa2\x87\x11\x57\xd7\x0b\x49\x71\x68\xd6\x91\xae\xc1\xc7\x81\x3c\x58\x13\xc0\xe8\x8a\xf2\xc9\x02\x90\x51\x30\x86\xb7\x13\x2f\x22\x86\x65\xb8\x14\x73\x1c\x1c\x9c\x33\xe2\x5d\x1c\xc8\x34\xdb\x70\x6d\x9c\xdd\x14\x14\x40\x54\x64\xa7\x1a\x9c\x4b\x67\x80\x9e\xda\x8a\x7b\x4d\x09\x4d\xe6\x3f\x22\x07\x14\xdb\xc5\x0e\xcc\xa9\x3d\x2c\x86\x32\x85\xf9\x28\xe5\xa6\x23\x03\xc8\x4f\x2b\xdd\x53\xd4\x8b\x74\x5c\xcb\x9d\x0a\x88\x69\xa8\x5d\x4d\x2a\xcd\xa8\x28\xc4\x6c\xe4\x14\x6b\xc2\x13\x7b\x68\xd8\x96\x61\x16\x06\x9c\x46\x08\x53\x65\xd7\x36\xa0\x49\xdd\xec\x58\xdb\x69\x68\x3a\x43\x9a\x23\x15\x9a\x0e\x34\x45\xbf\x64\x49\x22\xc1\xa5\x1a\xa0\xb0\x91\x7d\x6a\xb6\x34\x90\x09\x5a\xe1\x5b\xe3\x7b\xa3\xd2\x3f\x08\x38\xb6\x5d\x27\xd0\xe2\xe1\x73\x7a\x4d\xa6\x80\xc3\x04\x9d\x57\x59\x0c\x4b\xd7\xec\x17\x7e\x4f\x2d\x98\xa0\x49\xa5\x85\x51\xcc\x7c\xa8\x32\xce\xda\x0e\x50\x8e\x0d\x13\xb4\x23\x9e\xda\x96\xc8\x16\x33\xc1\xee\xa2\x45\x5b\xe6\xbb\x0b\xbd\xcb\xb8\x59\x16\x0c\x1f\x80\xe9\x40\xd0\xb4\x1a\xf0\x54\x11\x54\x5a\x83\x98\x3b\x45\x51\xa5\x47\xec\xfd\xf9\x06\x79\x38\x6c\x80\x18\xb7\xeb\xf9\x70\x6c\x0c\x8a\x2b\xaf\x07\xfa\xc5\x1b\xa1\x8c\x48\x0f\x4d\x07\x45\xf9\xd9\xc8\x62\x8b\x0e\xe3\x68\x48\x5d\xef\x34\x1a\xea\x3c\xe3\x35\x22\xd3\xd1\x98\xc5\xf5\x4e\x6d\x8d\xe9\xbc\x32\xcb\x79\xd0\xdd\x60\x5e\xa7\xe1\xe9\xdc\x2b\x1a\xa6\xc9\x0d\x6e\x7a\x0d\x07\xc2\x91\x3d\x4e\xd0\xcf\x0f\x61\x85\x9e\x78\xf9\xb4\x5a\x11\xf6\xc4\x8b\xe4\xc9\xb5\xeb\x87\x7d\x9e\x94\xaf\x5f\xd2\x4c\xfb\xe8\x12\x8f\x8c\x1b\x03\x19\x7f\x18\x52\x8f\x12\xba\x8e\xb1\x32\x90\x11\x18\xc8\xf8\x7f\xfe\x6f\x03\x19\x4b\x03\x19\x06\x32\x2e\x0c\x64\xbc\x36\x90\xf1\x0f\x03\x19\x1f\x0d\x64\xbc\x33\x90\xf1\xcc\x40\xc6\x2f\x06\x32\xbe\x18\x63\x74\xb3\xed\x98\x85\x94\x4a\x20\x0f\xd1\xc9\x28\x56\xc4\xe2\x8b\x30\x8e\xbc\x60\x1a\xc9\xcb\x82\xf2\x2c\x29\xfb\xf2\xbc\x92\x71\xa8\x58\x39\x97\x82\xae\x8f\xb2\xd3\x76\x5c\x70\x47\x8c\xed\x63\x7a\x6a\xd7\x6a\x91\xf8\x03\x62\x33\x32\x1d\x19\xb0\x3f\xb5\xc1\xa9\x29\x20\x68\xc4\x10\xa2\x30\x8b\x91\x10\xc5\xe7\xca\x72\x0e\x68\x03\x47\x88\x9a\x11\x84\xe8\x10\x80\xd8\xc4\x82\x0b\x4e\x03\x08\x8f\xa1\xa8\xc0\xc3\xc0\x93\x9b\x8a\x69\xf5\x85\xf8\x2a\xae\xbe\x51\xbd\xce\x60\x02\xdd\xa5\xbc\x9a\x6a\x12\x33\x46\x82\xc9\x8d\xbc\x9f\x6c\x4a\x26\x74\xe9\xf9\xc8\xc7\xc4\x0a\xe2\x25\x61\x9e\x1f\xdd\x73\xd3\x86\x5b\x8c\xac\x7c\x6f\x42\x40\x73\x64\x37\x8e\xc6\xcd\x39\xaa\xda\xda\x19\x99\x7c\x9c\xc0\x24\x01\x45\x05\x02\x93\x09\x26\xd6\x8a\xb0\x89\xf4\x15\x34\xbe\xd7\x22\x1b\xce\x8a\xfd\x58\x40\xa4\x0a\x0f\xe5\xe4\x2b\xbb\x42\xce\xbd\x32\xca\xbd\x98\x7a\xd1\x4c\x3c\xc8\x99\x17\x4d\x31\x91\xf3\x2e\x5a\x62\xa2\x26\x53\x74\x23\x5a\x2b\x26\x52\x34\x17\xb5\x65\x72\x04\x9d\x63\xe5\x55\x8d\xce\xd2\xa8\x3d\x07\x86\xdc\xc6\x38\x1b\x82\x1b\x7c\x68\xa3\x33\x2c\x16\xc9\xee\x6a\x74\x36\x5e\xaf\xd3\xb9\x77\x5e\xab\x81\x39\x76\x5a\x10\x9d\x17\x45\x10\x98\xae\xd7\x86\x2d\xbe\xe5\xb5\x9a\x81\x0d\xe9\xb5\x56\xab\x81\xa9\x28\xc3\xb1\x61\x1b\x88\x61\x03\x1b\x4a\xbb\xba\xc2\xc6\x77\xa2\xc8\x6c\x18\x8e\xec\xb1\x6b\xfc\x87\x7c\xa9\xd5\x9a\xa3\xf3\xf0\xfa\xe7\x71\xd3\xe2\x24\xe2\xe0\x0c\x0a\xd5\xc1\x3c\xb3\x78\xf8\x2a\xbc\xca\x46\x96\x6b\x18\xe8\x99\xf6\xbd\x33\x76\x9b\xa3\xef\x57\xda\x47\x13\x51\xe4\x1a\x0b\xac\xd1\x07\xdc\x1c\x4d\xc9\x6c\xbe\x62\xd1\xf7\x45\x91\x82\xc6\x6f\x33\x1a\x87\xc8\x13\x93\x3f\xbe\x42\x2b\xfc\x4c\x08\x3a\x63\x22\x29\x01\x57\xf8\x1a\x10\x68\xae\x10\xc1\x86\x21\x63\xb8\xcb\xf2\x6f\x53\x7f\x93\x13\x19\x00\x9e\xe0\x6b\x5d\xff\x45\x73\x88\xce\xa5\xb5\x78\x21\x2f\x58\x7e\x2b\xaf\x56\x36\x49\xad\x06\xde\x4a\x1f\xf0\x19\x06\x6f\x87\x06\x50\x1b\x42\xd4\x35\x1a\x86\xf8\x8f\xa5\x5d\x35\x4b\x36\x0c\x97\x42\x73\x86\x56\x18\x18\x91\xea\x95\xcb\xd1\xc0\x8c\x9b\xed\xb1\xd4\x5e\x56\x26\x78\x5b\xab\xe5\xa5\xa1\xd4\x69\xd0\x07\xe9\xf3\x9d\x06\x76\xd7\xce\xa4\x87\x27\x9e\xf4\xce\xed\x0c\x4e\x81\x60\xb9\xc9\xc2\x63\x4f\xc2\x29\x79\xcc\x41\x08\xe1\x7a\x3d\x39\xed\xf6\xe1\xed\x0a\x83\x4e\x0f\x63\x3c\x19\x46\xb9\x46\x21\xa7\xed\xfc\x05\x2a\x52\x14\xba\x47\x08\x95\x02\x93\x24\x37\xb5\xda\xe1\x54\xb6\x3a\x90\x37\x67\xdb\x69\x40\x9d\xc7\x78\x96\x4d\xf3\x19\x42\x66\x1e\x8e\xe2\x02\x3f\x3e\x59\x0e\x0b\xf9\xbc\x6c\x3c\xce\xe5\x3b\x17\x9d\x7d\x90\x2a\x56\x37\xb5\x5a\x06\xfc\xc2\x24\xe8\x22\xb3\x76\x2f\x1b\x19\x2c\x57\x54\x89\x2e\xb0\x20\x03\x4b\x75\xb0\x13\xc3\x25\x78\x66\x12\x73\x65\x5e\xe8\x7a\x18\x56\xe9\x17\x22\x47\x4f\xff\x55\xa4\x5f\xe4\x8d\x7b\x8c\xb3\x7a\x4e\x4f\x1d\x68\xa6\x80\xd2\xec\xc7\x70\x43\x75\x23\xf8\x42\x15\xc9\xb4\x34\x19\xb5\x34\xf3\x53\x4b\x0f\x8e\xcc\x87\x3d\xb7\x39\x12\x0c\xa9\xb1\xac\x26\x02\xf3\xa9\xb2\xe5\xa0\x39\x84\xee\xe6\x65\x6c\x32\xcb\x16\x59\xe8\xed\x3e\x5d\x5d\xe9\x33\x6f\xd3\xea\x6f\xd3\x15\xce\x0c\xa9\x87\x77\x8c\xcc\xe8\x75\xe5\x5c\x3f\x03\x20\x17\x37\x72\xa1\x20\x26\x1c\xc1\xc5\xc1\xbd\x26\x75\x0a\x38\x94\xf3\x7a\x16\xfd\x21\xbb\xd0\x4b\x06\x7c\x10\x1c\x1c\x34\xdb\x95\x1b\x57\x99\xd5\x01\x84\x75\x02\xcd\x28\x49\xf4\xdd\x8f\xb9\x56\xc2\xc7\x37\x62\x90\x4d\xb0\x6f\xa9\xd6\xc8\x28\x11\x7a\xc3\x90\x9f\xcc\xc1\x6d\x2a\xd3\xc5\xe2\x00\xe5\x53\x97\x6b\x20\x03\x65\xb3\x9a\x3b\x6a\x8f\x51\x36\x0f\xb8\x23\xe3\x3b\x31\x93\x8e\x53\x77\x93\xf3\x9d\x77\x78\xa9\xee\x68\xd0\xf2\x9a\x37\x29\x5d\xeb\xa7\xe9\x58\xda\x37\x0f\xa2\xe0\x76\x05\x9b\x1b\xd3\x65\x0f\xb6\x54\xf8\x70\xed\x1a\x34\xd8\x28\xe9\x37\x02\x74\x83\x0a\x60\xa6\x93\x7b\xf1\x2a\xc2\x3d\x55\x4c\xfc\x2a\x9c\x78\xd5\x9e\x9d\xfa\x95\xb6\xf2\x8b\x3b\x5c\x44\xf5\xfe\xb8\xc3\xba\xa3\x8a\xee\xae\xfa\x66\xb3\xe8\x87\x15\x99\x48\xef\xe8\x3b\xbc\x8a\xf3\xa9\x4e\x2a\xd8\x77\xf8\xab\xe6\x85\x77\xe3\x7c\x56\x51\xfa\xbd\x50\xe7\x76\x98\xb7\x1e\x62\xfe\x61\xc0\x2e\x3b\x08\xca\x35\xa0\x7d\x82\x89\x75\x23\x14\xb3\x9b\x13\xc7\xb6\x33\x85\x20\xdb\xee\x07\x0d\x07\x11\x6b\x99\x1a\x9a\x5f\x20\x62\xbd\x46\xc4\xfa\x80\x88\xf5\x4a\xf3\xb8\x8f\x08\x7f\x1e\xfb\xfe\x17\xe2\x31\x40\xac\x1b\x88\xb8\x1e\x26\x43\xc2\x21\xd6\xcd\x4e\x40\x85\x5d\x25\xbc\x27\x56\xe2\x8f\xf5\xe9\xe3\x93\x7d\xe8\x95\xf1\xfb\xf4\xf1\xc9\x5d\x28\xe6\x40\xf7\xe1\xaa\x21\xab\x99\x88\x6e\x6f\x5c\x82\x96\xae\x8d\xa6\xae\x83\x5e\xb8\x36\x7a\xed\xda\xe8\x83\x6b\xa3\x57\xae\x9d\x6c\x98\x8d\x32\x0f\xb8\xa9\xc7\xc9\x47\xba\x24\x52\xdd\x9a\xca\x3d\x39\xa1\x25\x89\x94\x58\xe9\x6c\x34\x9c\x46\x52\x61\x9c\x7a\x37\x91\x54\xe4\xa2\x45\xc8\xf8\x53\xf1\x26\x14\xb2\x65\x18\xf0\x45\x84\x16\x59\xc6\x6b\xf5\xbe\xc2\xe7\x20\x86\x68\x89\xcf\xc4\xcf\x25\x3e\x07\x3e\x44\x37\xf8\x4c\xfc\xcc\xf1\x39\x98\x40\x74\x4d\xf0\x99\xf8\xfd\x40\xf0\x39\x98\x41\xf4\x56\xbc\xcf\x20\x7a\x2c\xde\x17\x10\x5d\x88\xf7\x05\x44\x1f\x09\xbe\xf5\xaa\x16\x1a\x93\x91\x3c\xe3\xf1\xd4\xbb\x01\x70\x9c\xa0\xc7\x55\x65\xfc\x72\x99\xca\x55\xf4\x42\x95\x91\x98\xcb\x52\x3f\x54\x7a\x24\x6d\x96\x9a\xb8\x72\x77\x6d\xea\xbe\x40\xc4\x7d\x81\x66\xee\x67\xf4\xc2\xfd\x01\xbd\x74\x3f\xa1\xdf\xdc\x9f\xd0\x2b\xf7\x77\xb4\x74\xbf\xa0\xd7\xee\x3f\x4a\xeb\xd2\xc2\x27\x7d\x64\xaa\xe3\x2c\x2f\xc2\x98\x45\x00\x9e\x0a\x85\x73\x9c\xa0\x1f\xdd\x2b\x82\x22\xf7\x19\x41\x1f\xdc\x7f\xa1\xd8\xfd\x0e\x7d\x72\x7f\x44\x9f\xdd\x9f\xd1\x95\xfb\x0b\xfa\xc9\xfd\x27\xba\x56\x35\xff\xac\x7e\x6e\x5c\x42\xd0\x17\x97\x13\xf4\x8b\xcb\x08\x32\xbe\x37\xdc\x33\x92\xa0\xd7\x77\x90\xed\xd3\xc7\x27\xf7\xa1\x9c\x56\x6c\x1f\xf1\x3e\x7d\x7c\x72\x3f\xfa\x95\x0a\xe6\x24\x0c\x08\x22\xe2\xcf\xcc\x8d\x09\x7a\xe1\x52\x82\x5e\xba\x21\x41\xbf\xb9\x1e\x41\xaf\xdc\x48\xf0\xb5\x4f\xd0\x6b\x77\x42\xee\xa0\xe5\xa7\x8f\x4f\xf6\x90\x73\x46\x50\xec\x2e\x08\xfa\xe4\x4e\x09\xfa\xec\xae\x08\xba\x72\x97\x04\xfd\xe4\x5e\x92\x2d\xa2\xde\x08\xa2\xce\x05\x51\xcf\x0b\xa2\x3e\xd9\x20\x6a\x29\x28\x65\xea\xe4\x97\x99\x92\xb5\xe0\x76\x43\x40\xac\x2b\x7c\x4d\x46\xc1\xc8\x1e\x97\x55\xfd\x31\x62\xa6\x4c\xcd\xfc\x8a\x1a\x4e\xb9\x43\xf4\x2a\x2e\xef\xaa\xe2\xe6\xbe\x35\x9c\xef\xa8\xe1\x31\xd9\x5f\xc5\x12\x5f\xdc\xbb\x15\x3f\xec\xa8\xe3\xc3\x9d\x75\xbc\xbd\x77\x1d\xba\x99\x4b\xf9\x8d\xa4\x90\x7e\x23\xb9\x2b\x49\x82\xa6\xee\x13\x44\xdc\x27\x68\xe6\xbe\x44\x2f\xdc\x77\xe8\xa5\xfb\x0e\xfd\xe6\xbe\x47\xaf\xdc\x37\x68\xe9\xbe\x46\xaf\xdd\xdf\x36\x6c\x47\x05\xb6\xab\xfd\xc8\xae\xf0\xf2\xbe\xb8\xfe\xe8\x3e\x47\x91\xfb\x07\xfa\xe0\x3e\x45\xb1\xfb\x0c\x7d\x72\xaf\xd1\x67\xf7\x03\xba\x72\xaf\xd0\x4f\xee\x5b\x54\x56\x55\x37\xdb\xc2\x64\x52\xd9\x64\x53\x72\xf1\x97\xa5\x22\x15\x78\x03\xdd\xb8\x17\xe8\x8b\xfb\x18\xfd\xe2\x7e\x94\xcc\xfb\x4a\x53\x33\xdf\x93\x9d\xe7\x26\x2e\x8b\xab\x88\xf1\x68\x2c\x6f\x23\x46\x31\xb6\xe5\x04\xa0\xdf\x6d\xb7\xe9\xae\xb7\x5e\x83\xc2\x3d\x0f\x98\x2c\xbd\xae\xd7\x3f\x86\xed\xbe\x8c\x8e\xab\x2d\xc5\x22\x19\x01\x2c\x37\x7f\x48\xaa\xc6\x32\x2c\x64\x7a\x4d\x1c\xc5\xd3\x51\x90\x7e\xf3\x98\x03\xd3\x8c\xe0\x18\x0e\x37\x52\x5c\x8a\x0d\xe9\x64\x10\x0c\xa5\x0f\x90\x6d\x20\x10\xca\x30\xc6\xca\xe5\x36\x04\x0c\x51\x08\x51\x5a\x51\x00\x51\x2c\xed\x29\xb9\xed\xad\x0a\x01\x4f\x73\x70\xc8\xc9\xf5\x6e\x3f\xb9\x28\x8a\x50\x8c\x3d\xe0\x1c\xd9\xb6\xb4\x1e\xfe\x26\xa0\x11\xc4\xa4\x47\xb0\x0d\x0f\xf3\xb0\x1a\xa5\xbd\x2a\xb1\xfa\xfe\xd1\xa0\xc1\xa3\x18\x6e\xea\x00\xb1\xf5\xa3\x04\x64\xac\x64\x7e\xad\x06\x62\xeb\x05\x8e\xad\x17\xdf\x3b\x2d\xd3\x69\xd5\x63\x6b\x05\x91\xf1\x59\x7d\x2c\x34\x95\xd8\xfa\x7c\xe2\xac\xd7\xb1\xf5\xf9\xb4\xdb\x2e\xd5\x62\x5c\xc9\x52\xeb\x35\x88\xad\x2b\xec\x40\x64\xfc\x22\x13\x86\x20\x12\x74\x0e\x81\x07\x62\xeb\x06\x42\xa8\x8b\x7a\x44\x71\x74\xda\x59\xaf\x6d\x69\x9e\x0c\xac\x95\xba\x7e\x93\x42\x37\xdf\xcf\x5d\x41\x40\x55\x04\x5e\xdf\x0a\x67\xb3\x88\x70\x40\x51\xbf\x2e\x30\x69\x38\x10\xa2\xd8\xba\xc1\x34\x85\x99\xab\x3c\x22\x79\x99\x27\xa7\xb3\x00\x8a\xad\x69\x9e\x26\x9b\x0f\x4d\x81\xac\xd9\x83\xdf\xf7\xa1\xab\xf0\xe4\x25\x3c\x2b\x91\x24\xdb\x48\x92\x1c\x49\x6f\x3f\x92\x55\x18\x6e\xa1\xb7\x85\x9b\x72\xe1\x32\x7e\x4a\x29\x6c\x7c\x52\x1d\x52\xab\x81\x32\xd5\x8d\x58\x91\x3c\xb6\xe2\xef\xfb\x6e\x5a\x7e\xe8\xb8\xb6\x58\x2b\x66\xfd\x91\xf7\x84\xde\x11\x2e\xd7\x53\x55\xb3\x05\x82\xb6\xc4\x2a\x83\x94\x63\x64\xf6\xeb\xb1\xf5\x53\x03\x44\x66\x17\x7e\xdf\x77\x45\xb2\x48\xf9\x24\x52\x24\xc6\x29\xef\xe7\x3c\x10\x5b\x2f\x4c\x1c\x5b\xbf\x34\x1d\xdb\x5e\x0b\xa0\xaf\xe5\xeb\xf7\x8e\x6d\xa3\x10\xc4\x50\x20\x10\xeb\x43\x41\x13\xaa\xb7\x5a\xd8\xb1\xcc\x06\x5a\x44\x4d\x65\x7a\xf0\x31\x75\x09\xee\x29\xce\x38\x5d\xdd\x54\x29\x05\x83\x74\x33\xd7\x64\x83\x67\x9a\x10\xca\xf2\x59\x46\x9a\x88\x0e\x41\x88\x9f\x90\x11\x7d\x44\x83\x47\xd3\x61\x29\xcf\xa5\x63\xb8\x5e\xcb\x31\xaf\xe6\x80\x62\x5f\xb8\xe1\x28\x2f\x2b\x01\x50\x0c\x44\xad\xaa\x40\x54\x95\x97\xca\x06\x4d\xf6\xf0\x91\x58\xd7\xf8\x3d\x01\x0c\x7d\x24\x42\x05\xb5\x7e\x16\x6f\x51\xf6\x36\x11\x6f\x5c\xbe\xbd\xce\x4b\xbe\x56\x6f\x69\xc9\xf4\x2d\x2d\x29\xde\x72\xfb\xc4\xa6\x85\x5a\x14\x51\x07\x08\x3e\x6a\x61\x40\xf6\x1a\x3e\x12\xc4\x13\xb4\xf2\x58\x54\x15\xcb\xff\x5d\x06\x8e\x3e\x04\x5a\xcc\x27\xcf\xef\x44\xf0\xf5\x83\x10\x8c\xf9\xe4\xdd\x1e\x1c\xf5\x90\x73\x77\x02\x53\x1e\x67\xf9\xfe\x25\x9a\xe2\x5b\x69\x52\x34\xd0\x99\x6b\x3c\x32\x90\x2d\xe6\x80\x04\xad\x70\xf3\xd7\xaf\x51\xfd\xeb\xd4\x6c\xa2\x25\x6e\xfe\xfa\x7d\x13\x5d\xe2\xe6\xe8\xeb\xd7\x5f\xbf\xab\x9b\xc3\xf5\xe8\xeb\x18\x40\xeb\x36\x19\x37\xe7\xc5\x84\x78\x53\x9e\xf1\xc9\x89\x3d\x4c\x41\x53\x0c\x82\x61\x83\xb8\x04\x9a\x86\xa1\x45\xb7\xcc\x55\x00\x13\x84\x27\x4c\x33\xed\xb1\x46\xa8\x99\xf6\x4c\xea\x52\x6d\xb1\x36\x2f\x79\xb2\x66\x06\xf5\x4b\x64\x7c\xfd\xfa\x5d\x4d\xbf\x89\xe4\x7c\x63\xe3\x3f\x3d\xbb\x62\xfc\x0a\x86\xae\x61\x12\x19\x0f\x64\x9e\x6d\xf1\xac\x0d\x68\x4a\x67\x2b\x6a\x6c\x5e\xb5\x52\x44\x31\xb8\x4d\x32\x87\x3f\xb2\xe1\xf0\xc7\x47\x64\xc4\x36\xd5\x17\xcc\x8a\x28\x00\x39\xc8\xab\xfd\x8a\x11\x92\xb7\x9d\x6d\x28\xa4\x52\x0b\xaa\x50\x86\x72\xa0\xcf\x1e\x0c\x34\xbe\x1b\xe8\xf5\x9d\x40\x5b\x1b\x40\x3f\xdd\x0d\xf4\xc3\x83\x81\x7e\xbe\x1b\xe8\xdb\x07\x03\xfd\xe9\x6e\xa0\x8f\xef\x04\xda\xd9\x00\x7a\x73\x37\xd0\x8b\x07\x63\x9a\x02\x35\x81\xfc\x39\xed\x0d\x86\x42\x47\x72\x5b\xa4\x0d\xf7\x55\xf4\xb1\x5c\x51\xf3\x57\xf0\x0b\x5c\x83\x91\xd9\x18\x7f\x9d\x7e\x9d\x42\x30\x74\xdd\x21\x90\x8f\x70\xd8\xdc\xc6\xa2\xb7\x81\xc5\x2f\x38\x18\x39\xe3\xa1\xed\x36\x40\x30\x6a\x8d\x4d\x10\x28\x0f\x16\xdb\x36\xe0\x5e\x3c\x5e\x3f\xb8\xc1\x4b\x79\x30\xab\xe1\xec\x83\xfa\xe4\xc1\x50\xa7\x77\xf7\xcd\xfb\x3b\x81\xb6\xb7\x50\xb5\xd1\xbd\x40\xbf\x7b\x30\xbe\x2f\xee\x06\xfa\xdb\x83\x81\xbe\xbe\x1b\xe8\xd3\x07\x03\xfd\x70\x37\xd0\x37\x0f\xa6\xec\xab\xbb\x81\xbe\xbc\x13\xe8\x26\x13\xbf\xd2\xcf\xa2\x0a\xb8\x4d\xe7\x8e\x51\xf4\xaa\x5c\xc7\xf2\x0e\xb9\x5a\x82\x54\x02\xf4\xfc\x41\xcb\xe1\x1f\xef\x6e\xfd\x1f\x0f\x04\xe8\x90\x76\xfd\x4e\xa0\x2f\x4a\x6b\xb4\x1b\x40\x0a\x95\x1d\x71\xd4\xd2\x26\xc6\x1f\xaa\x4a\xa6\x36\xa3\x8d\xa2\x9f\xf6\x14\xfd\xde\x69\xad\xd7\x4e\x6b\xe3\x8b\x9f\x36\xbe\x70\x4c\xb1\xf8\x98\x84\x71\xc0\x41\xbe\x2e\xb9\x80\x80\x40\x44\x44\x6d\x6d\xed\xdb\xdf\xab\x6a\x7b\x4d\x7d\x9f\x46\xe4\xff\x63\xef\xed\xb7\xdb\xc6\x91\x05\xf1\xff\xfd\x14\x36\x7f\x1d\x35\x20\x16\x65\x52\x4e\xd2\xdd\x94\x61\x1d\xb7\x93\x4c\x67\x26\x4e\x32\x71\xfa\x93\xe6\xf8\xd2\x12\x24\x31\xa6\x48\x35\x49\xd9\x56\x2c\x3e\xd6\xfe\xb7\x7b\xf6\x9c\x7d\x80\x7d\x95\x7d\x85\xdf\xc1\x17\x09\x52\x94\xe3\x74\xf7\xcc\x9d\x99\x7b\xfb\xcc\xc4\x22\x50\x28\x14\x80\x42\xa1\x0a\x1f\x55\xa3\x24\x1e\x0b\xfa\xf4\x12\x3f\xd4\x4a\x88\xf2\xa6\x61\xdb\xb6\x16\x0d\xec\xe7\x56\xac\xc2\xb8\x31\x9d\x06\xf9\x7f\x6a\x27\x21\x5e\xe6\x74\xb3\x77\xfe\xd2\x06\x7c\xa6\x91\xaa\x03\x7f\xa1\xef\x3a\x2b\x63\xa6\x16\x26\x7d\xf8\x95\xab\xe9\x1a\x7f\x6d\x20\x8f\x7b\xb3\x7b\xba\x51\xaf\xe9\xa7\xba\xab\xa2\x66\x5d\x94\xa4\x47\x44\xda\x8d\xe9\xb0\x44\x16\x32\x64\x6e\xdc\x0b\x85\x19\x49\x31\xb0\x3a\xc3\x6d\x75\x9a\xe8\x31\x21\xa4\x9e\x5c\x56\xd5\xa4\xe8\x97\x9a\xda\xa7\xa0\xaa\xfc\x3f\x6f\xb4\x95\x3e\xb0\xad\x94\xb6\x8d\x41\x65\xce\x72\x4b\xae\x5e\x24\xff\x64\x11\xfa\x18\x72\x78\xac\x15\x49\x69\x63\xf0\xde\x87\x73\xfa\x31\x89\xe9\x1b\x61\x54\x57\xc1\x69\x8f\x84\xe2\x8c\xf2\x2e\xd3\x35\x0d\xd3\xc0\xd8\x5c\xa1\x7c\xff\x29\x33\x2f\x0d\xdb\x80\x3e\xff\x7e\xf4\x54\x7d\x55\x95\xc4\xad\x74\x95\x7b\x02\x8d\x56\x84\xdb\xa0\xdb\x27\x72\xf2\x09\xf0\xf6\xc9\x1c\x34\x4b\xb1\xd9\x1c\x35\x87\xe6\xba\x7d\x36\x67\xdb\xaa\xbc\x77\x46\x2f\xeb\xa5\x24\x92\xe6\x9c\x8e\xb6\xe2\xde\x32\xaf\x47\xdb\x89\x69\x9f\xdb\x93\x6d\x05\xb6\xcd\xef\x59\x93\x47\xd4\x1e\xc6\x3d\x73\x7c\xdc\xac\x24\xee\x65\xf7\xf4\xae\x5e\xdd\x82\x6e\xcc\xf2\x66\x85\x5b\x26\x7a\x2e\x27\x7a\x5e\x9b\xe8\xf9\xb6\x7a\x1b\x13\xfd\x5a\x4d\x74\x55\x5b\x93\xb0\x39\x6d\x4e\x76\x05\xa9\x05\x4d\xdd\x6c\xf7\xe2\x81\xed\x5e\x6d\x1b\x97\x7b\xe7\xfc\xf4\x21\xa5\x36\xa6\xfd\x25\x2d\x2d\x70\xc3\xb4\xeb\x1c\x78\xa1\xe5\x3d\xd2\xd2\x6f\xb4\xe6\x9b\x54\xb3\xf2\x68\xf3\x7a\x81\x50\x65\x4c\xca\x15\x19\xcd\x72\xd3\x01\x97\xe2\x7d\x4a\x44\x96\xea\x0e\xc4\x88\x2c\x7b\x7c\xd7\x83\xc7\x69\x2b\x77\x2c\x60\x26\xbe\xf8\x66\x03\x2c\x8b\x5b\x8a\xee\xd4\xd1\xa6\x6b\x3c\xba\x85\xdd\x47\x3f\x19\xc0\x52\x5c\xe3\x91\x35\xdf\x7f\x64\x8d\xf7\x1f\xfd\x6c\x40\x2e\xf2\xad\x97\xee\xa3\x53\xf7\xd1\xd9\xee\xa3\x85\x01\xf2\xcc\xd3\xf5\x8c\xe3\x53\x03\x8c\xb7\xa7\x86\x0f\xe3\x60\xc5\x12\xce\x96\xf1\x38\x58\x19\x60\x9c\x26\xf2\xc7\xfb\x25\xcd\xc4\xaf\x1f\xe9\x38\x56\xbf\xdf\xcf\x96\xa9\xfc\xf9\x22\x0d\xc5\x8f\xb3\x20\x5f\xa6\xec\xa7\x0f\xe5\x01\xaa\x40\x29\xf0\x09\x64\x02\x91\x40\x21\x4a\x8b\xa2\x86\x0f\xe2\xa0\xd5\xf5\x8c\x3f\x07\xf1\x32\x48\x39\x72\x7a\x99\xca\x9f\xa7\x41\x3a\x9a\x19\x60\x1c\x2f\xd2\x30\xe2\xdf\x2c\xf5\xcf\xcb\x98\xf2\x3f\x11\xfb\x3a\x5e\x4e\x97\x59\xce\x10\xd2\x45\x4e\xf9\xdb\x7d\x30\xde\x8c\xf2\x44\xfc\x7a\x9d\x5c\xab\xc4\x67\x74\x24\x7e\x4a\x62\x4f\xb5\xba\x45\xbd\xa2\x4a\x51\xa1\x5e\x9d\xa8\x4d\x54\x26\x6a\x12\x75\x08\xfc\x02\x75\x79\xf9\xe4\x8c\x12\x7e\xde\xad\xdf\xcb\x7f\x79\xf6\x46\xec\x03\xb5\x5d\x4c\xac\x01\x20\x5c\xb8\x13\x64\x3c\xfa\xd9\x7a\x34\xb7\x1e\x8d\xdf\x3f\xfa\x4e\x8c\x62\xef\xd1\xab\x5f\x0c\x7e\x9c\x6c\x96\x5b\xea\x46\xdf\xb6\x6d\xcb\x76\x2c\xdb\x79\x6f\xdb\x2e\xff\x5f\xcf\xb6\xed\x5f\x0c\x3c\xdc\xdc\x9b\xaa\x2e\x0c\x54\x2f\xca\xd5\xe3\xf8\x78\x19\x45\x6e\x5e\xb8\xb3\xad\x35\xef\x94\x91\xfd\xe7\xf4\xc5\xc3\xae\x9d\xdc\xea\xce\xc2\xca\x62\x9f\x78\x8e\xc3\x00\x39\xc3\x7f\xe2\x8e\x4a\x39\x4b\x3e\x71\x41\x45\xcd\x9f\x36\xb0\x59\x1b\x7d\xdb\xdb\x93\x55\xe0\x61\x96\x6c\xaf\xfd\x8c\xd6\x00\xb7\x56\xff\x86\x16\xb8\x00\x80\x87\x78\x2d\xd3\x4a\x57\x7a\x12\x6a\xc4\xe5\xb5\x07\xe9\x61\x15\x48\xc3\x34\x4b\x6f\xfa\x5e\xea\xef\xc4\x3d\x2a\x2e\xaf\x5e\x46\x94\xe8\x1f\xeb\xf5\x9e\x03\xdc\x21\xfa\x24\x9c\x2e\x45\xfe\x9e\x0d\x06\xf7\xb0\x60\x84\xf1\x6e\xcc\x83\x9f\xdd\xa4\x61\x2e\xf3\x30\x08\x89\xde\x13\xf1\xfe\x74\x0f\xfb\xbd\x2b\xba\x82\x18\x17\x1b\x6f\xd7\xf3\xda\x39\x66\xda\xe9\x50\x94\x6b\xcf\x58\x52\x1e\xd8\x88\xf2\x47\xc4\x90\x17\x05\x3f\x0a\xf1\xbc\xbb\x51\x12\x25\xa9\x6b\xd8\xb0\xcb\xfe\x67\x08\x3f\xf1\xae\x11\xc4\x59\x68\x5d\x46\xc1\xe8\xca\x28\x40\x01\x39\x5f\x7f\xd5\x06\x96\xd2\xb1\x06\x64\xc3\xae\x80\xab\x03\x4d\x53\x4a\xe3\x26\xae\x36\xc0\x15\x8d\xa2\xe4\xa6\x8e\x50\xe0\x6c\x12\xb7\xa4\x2d\xb4\x6d\xc0\xcd\x83\x29\x8d\xf3\xa0\x85\xc2\x0d\xd0\xd1\x2a\xd0\x49\xec\x3f\x79\x02\xf2\xff\x75\xb8\x9b\x59\x98\x53\xa3\xf0\xa1\xec\xbe\xaf\x9f\xc0\xae\xf8\x7f\x83\xc8\x34\x9c\xce\xf2\x8d\x8e\x64\x58\xef\x83\xdf\xe8\x51\x5e\xa0\x39\x3a\x02\xb6\xd9\xb1\x1c\x54\x56\xd0\x5a\x60\xa3\x83\x15\xf1\x1b\xed\x2c\xa9\xaf\xf5\x74\x49\xfc\x36\xf8\xcd\x1e\xff\x5a\x91\xb4\xad\x48\x4b\xcf\xdf\x5f\x40\x0d\x81\xaf\x7b\xc4\xae\x4d\x5d\x7c\xb7\x57\xbf\x10\x28\xfc\xef\xea\x47\xd0\xb9\xfe\xec\xed\xfd\x6a\x41\xe5\xd3\xb7\x93\x20\x8e\x93\x7c\x77\x14\x44\xd1\x6e\xb0\xcb\x6b\xdf\x0d\xb2\xdd\xa0\x9c\x6c\x06\x2e\x54\x0c\x00\xf1\x96\x6c\x32\x15\x0f\xaf\x2e\xe5\xdf\xc9\xf4\x22\x4f\x97\x94\x37\x47\xe5\x68\x29\xc2\xfd\x03\x4f\xe6\xcd\x21\x65\x34\x84\x58\x46\x44\x07\xef\xee\x8a\xae\x5c\x83\x66\xa3\x60\xc1\x04\xe7\x77\xf9\x3c\x32\x64\x9c\xd5\x6a\xce\x97\x4f\x7f\x58\x0b\x28\xee\xd5\xc0\x51\x8e\x8b\x02\x04\x9e\x28\x8c\xaf\xc2\xc9\xea\xd3\x18\x24\xa0\x5e\x96\xf5\xfb\xfb\xa4\x9d\x80\xea\x22\x81\x42\x50\x41\x23\xe1\xf5\xaf\x86\xe5\xcf\x19\xd3\x59\x1e\x8a\x85\x41\xb7\x61\x79\x4f\x6f\xf3\x4f\x37\xa5\x82\xe5\xad\xf1\x31\xb0\xde\x95\x1d\x9b\xd1\x7c\xb9\x78\x1b\x44\x34\xcf\xe9\x06\x2a\xe9\x1d\xfa\xed\xf1\xab\xe7\xef\xdf\x3f\xbf\x38\x79\xf3\xea\xcd\xbb\x33\xe5\xb3\x4b\x46\x72\x1a\xd0\xc3\xfe\xc0\x34\x29\xae\x4e\x4b\xec\x41\x7e\xf8\x35\x0f\x25\xd5\x52\x5c\xba\x68\xf0\xa8\xef\xe5\x7e\x8f\xf3\x81\xee\x77\xd6\xb3\xe1\x9b\x27\xe0\x1c\x3c\x01\xe7\xab\x27\xd0\x77\xb8\xd8\xf1\xa1\xfe\xf4\x55\x17\xf0\x1e\xf5\x4d\x03\x76\x0d\x33\xf5\xf2\xf2\x57\xec\x17\x32\x96\xd8\xd3\x7a\x14\x4e\x62\x0f\x02\x9e\x16\x94\x69\x22\xc4\xdc\x53\x1e\xf9\x6d\x2b\xbd\xdc\x27\x0a\x64\x5a\xb0\xcc\x25\xf9\x5a\x46\xb5\xec\x3f\x1e\x98\x66\x04\x4b\x93\x38\xf6\x7d\x18\x96\xb0\x84\x25\xae\xc6\xf0\x7e\x9e\x6e\x3b\xeb\xda\xf7\x3a\x87\x47\xfe\xfe\x74\xde\xe2\x7d\xd0\xe8\x18\x84\xd0\xa1\xd1\x09\xe6\x8b\x81\xe1\x1a\x87\xf2\x33\xca\xd9\xd7\x91\xfc\x9a\xf2\x2f\xa3\xf8\xf4\x8c\x68\xad\x1f\xcd\xf2\x7c\x91\x0d\xdd\xf3\xfd\xf3\x7d\xef\x6f\xe7\x99\x6f\xe2\x76\x6a\xbe\x3c\x0c\x76\x67\x29\x9d\x10\xe3\x4b\x93\x9a\x5f\x1a\x47\xec\x8f\x71\xb8\x1f\x1c\xe9\x75\xdf\x33\xa3\x36\x5c\xc6\x2f\xd2\x64\x44\x33\xee\x82\x14\xf6\xec\x07\xcd\x27\xfd\x4d\x60\x4e\xf2\xf5\xfa\xae\xc0\xbd\x0f\x59\x12\xf3\x17\x27\xbd\x51\x44\x83\xf4\x55\x18\x53\xb2\xe7\xc0\x03\xea\x68\x9d\x6d\x74\x1b\x95\x77\x05\xec\x39\x15\x0a\x99\xd1\x46\x63\x3d\xe0\xa3\x78\xb0\x23\x02\x18\x9c\xdb\x07\x07\xe7\xde\x3e\xe6\x47\xa7\xd9\x2c\x9c\xe4\x48\xc5\xc9\x11\xce\x9b\xb9\x13\x28\xad\x21\xfb\xe7\xa9\x7c\x31\x20\x1f\x29\x07\x24\xdc\x08\x7f\xa0\x44\xac\x22\xf6\x64\xb6\x8c\xd5\xf1\x54\xc1\xaf\xce\xe4\x9d\x4e\xce\x3b\x4a\x79\x6f\xd1\xdb\xc6\xc1\xb9\x44\x32\x0c\xcd\xb7\xc9\x48\xc6\x48\x49\x20\xd3\x08\xd2\x88\x83\xa0\xb7\x8c\x45\x23\x32\x46\xb5\x70\x11\x72\xc1\x63\xbc\xf1\x10\xc0\x41\x4f\x84\xae\x6d\x21\x76\x8f\xf6\xc2\xec\x39\x83\x44\xdc\x01\x5f\x19\x64\xae\xc2\x99\xd4\xef\x1f\xd5\xbb\xbd\xa4\xf9\xfe\xfe\x47\x39\xb9\x4e\xc2\xb1\xdc\x6d\xb9\x2b\xdc\x1c\xf7\x96\x19\xbd\x10\x41\x83\x32\x99\xb9\x47\x48\xae\x27\xb3\xce\xd2\x3e\xb9\x07\xd3\x2b\xba\x22\xf1\x50\xc6\xf1\x77\x0d\x2e\xe6\x0c\x08\xb8\xdf\x7c\xd6\x4d\x2e\x85\xc9\x54\xdc\x95\xbc\x94\x7f\xf5\xb5\x52\xe5\x34\x53\xca\xce\x74\xf5\x8e\x1d\xd3\x51\x92\x06\xac\x39\x02\xea\x26\xc8\x2e\x64\xc3\xe9\xd8\xdd\x73\x40\xf6\x5d\x4b\x24\xbd\x40\x8d\x5b\x51\xf0\xbb\xcb\xdc\x7f\x36\xda\xff\x1b\xf2\xf6\xce\x6f\x0f\x46\xd6\xf9\xed\xc1\xc4\xef\x62\xe4\x9d\x8f\x07\xe2\xef\x6d\xdf\xb6\xce\x6f\xfb\x23\xbf\xeb\x9d\xdf\x3e\x66\xbf\xbf\xa2\x3e\xcb\xc8\xce\xcf\xfc\x2e\xde\x9f\x8b\x37\xa0\x59\x19\x0f\x70\xa7\xac\x83\x64\xde\x63\x5f\xbc\xa3\x26\x99\xd7\xf7\x95\x1b\x98\x81\x88\xb9\x64\x18\x7b\x84\x64\xe2\x25\xfd\x5c\xfc\x3e\xf0\x2b\x34\xb5\x97\xa5\x01\x97\xc3\x9c\x2d\xab\xd6\x73\x7d\x62\xa0\x5c\xf2\x1c\xd9\x03\x31\xae\x11\x59\xaa\xc9\x03\x23\xc2\xf7\x3f\x5e\xc6\x39\x8a\x78\xa5\xc2\x32\x1d\x61\xb1\xd3\x35\xc2\xad\x6a\x4c\xa3\x8a\x1d\x75\x29\xc6\xa9\x8a\x68\x20\xc6\x65\x12\x8d\x8d\x12\xa8\xdf\x0e\x34\x0e\xe7\x15\xcc\x41\x2b\x48\x98\x07\x51\x38\xaa\xa0\x1e\xb7\x42\x2d\xe3\x31\x4d\xa3\x30\xa6\x15\xe0\x93\x76\xb2\x98\xa8\xaf\x80\xbe\x6a\xa7\x4b\x3e\x86\xac\xe0\xbe\x6e\x87\x9b\x85\xe3\x31\x8d\x2b\xb0\x6f\xda\xc1\x98\x75\x79\x45\x99\x7a\xb9\x9c\xce\xb4\x06\x7f\xa3\x77\x76\xad\x53\x1f\x57\x59\x97\x8d\xac\xd1\x11\x39\xb0\x3b\x9d\xd1\xe1\xc1\xd7\x65\xd9\xd0\xb3\x7d\x6f\xf4\xc8\xb1\x7d\x2f\xf1\x75\xc8\x6f\x38\xe4\x37\x3a\xa4\xd3\x0e\xf9\x98\x43\x3e\xfe\xba\xac\x74\x2b\x4e\xc7\xe6\xa0\x8e\xad\xc3\xb6\x61\x3d\xe0\xbd\xb6\x5e\x3f\x16\xbd\x27\x03\x33\x8b\xd4\x1d\x7e\xe7\x50\x32\x29\x71\x44\xe6\xac\x62\x52\x3e\x17\x9e\x70\x67\x7f\x9d\xce\x06\xe0\xb8\xe2\xe0\xb2\x04\x2f\x32\xe6\x41\x6b\xc6\x87\xa4\xff\xe4\x09\x0e\x27\x48\x0a\xef\x05\x19\x1f\x11\xe7\xe9\x50\x98\x0d\x0b\xa1\xe9\x59\x86\x39\x76\x43\x6f\x7c\xf4\xd5\xd0\x71\x6d\xdf\x1b\x3f\xfa\xda\xef\x71\x61\xb5\x33\x19\xaa\xfe\x5a\xb8\xaa\x8d\x0b\x71\x0d\xac\x45\xb7\x91\x31\x8e\x75\x2d\x12\x61\xa8\x70\xb4\x14\xf1\xc6\xbe\x5b\x9b\x5d\x1b\xd9\xe5\xa5\x33\xa3\xbf\xd1\x0b\x07\xa2\x55\xf3\xb6\x5e\x80\xeb\xd6\xd4\xd5\xb6\x1e\x9b\xf3\x1e\x9b\xf3\x1e\xeb\x74\xae\xf9\xd7\xb5\xfc\x5a\xf1\xaf\x95\xe8\x4d\x5e\xe5\x94\xcc\x85\x7a\x79\x2d\xfe\xac\x76\xe2\xe1\x64\x88\x54\x4b\x45\xff\x96\xf2\xda\x80\x4d\x03\x68\x8a\x5d\xa4\x5a\xde\x0e\x7e\xd9\x00\xaf\x3a\x72\x5a\xf6\xd9\xb4\x60\xff\x69\xd7\x54\x09\x51\xc6\x56\xa7\xa3\x7f\x5f\x36\xbe\xab\x69\x39\x0c\x5c\x14\x94\xc3\x33\x99\x42\x50\x0e\xc6\x25\xfb\xd8\x34\xdb\xf4\x14\x0e\x7d\x9f\x5d\x07\x81\x2e\x02\x1a\x75\x43\xd0\xab\xad\x4f\x4c\x17\x0b\xda\x17\xec\x4f\x2b\x4b\x3b\x52\xad\x93\x4e\x06\xda\xd5\x14\x51\x8a\xeb\x35\x42\xa9\x51\x9b\x92\x5c\xfe\x57\x8a\x85\x4c\x37\x0c\xbe\xd4\x84\x75\x32\xcb\x42\x6a\x31\xdb\x11\xde\x9b\xea\x4b\xbf\xbc\xf6\xcd\x9d\x26\xde\x15\x10\xb5\xc4\x39\xf1\x7c\x48\xa5\x22\x51\x39\x03\xa5\x98\xf6\x66\x41\xf6\xe6\x26\x2e\xf7\xb8\x52\xcc\xf4\x0a\xe1\xd9\x70\x1c\xe4\x81\x65\x98\xa9\xf9\x25\xd3\xa7\xe3\x86\x79\x4b\xbd\xd4\xc7\xe6\x97\xc6\x97\xda\x75\x40\xb5\x04\x0e\x8d\x5d\xc3\xcc\xa5\x5e\xb4\x6b\x60\xa6\xfb\x97\x9b\xb2\x9c\x63\x50\x32\x44\xd2\xef\x22\x4b\x30\x0d\x6b\x32\x2d\xe3\x84\x93\xb0\x36\xf2\x9d\x0e\x5a\x7a\x0d\xce\x65\xe0\x7e\x03\x0e\xea\x9f\x5c\x88\x63\xec\x2a\x47\x8d\x42\xa1\x49\xa7\x97\xc8\x30\x45\x9d\xd8\xc0\xdc\x59\x7a\x93\x9e\x4b\x46\xcf\x65\x8d\x9e\xcb\x4f\xd1\x73\x29\xe8\xb9\xac\xd3\xb3\xb1\xef\xa0\xd1\x73\x19\x8c\xae\xa6\xdc\xe5\x82\x55\x27\xed\xb2\x22\xad\x62\x60\x4e\xa2\xa4\x50\xd4\xcd\x40\xab\x7c\xec\x0a\x05\x80\x30\x6a\xf5\x39\x27\x8b\x4c\x92\x38\xb7\x6e\x68\x38\x9d\xe5\x2e\x07\xc4\x2e\x57\x06\xb6\xc1\x4b\xe7\x5b\xae\xdd\x7b\xc2\x40\xa5\x52\x70\x2f\x76\x11\x92\x55\x42\x62\xb7\x5c\xd3\xb7\x16\xe2\x7a\xb7\xcb\x83\x01\xe5\xc8\xb1\xed\x47\x98\x15\x93\x4b\xfc\xb6\x52\xd7\x61\x16\x5e\x86\x11\xa3\x4d\x42\x62\xb7\xb1\xde\x6f\x2b\x9a\xd3\xdb\xdc\xd2\xd4\x56\xa6\xbe\x58\xaa\x50\x35\x30\x4d\xb0\x46\x47\x63\x48\x86\x5f\x1e\x66\x8b\x20\x16\x9b\x53\x6c\x72\x64\x15\xaf\xb3\x29\x61\x46\x68\x89\x4d\xe3\x88\x95\x94\x13\x97\x99\xa1\xac\xcc\x91\xe1\xca\xc2\xbc\xbb\x58\x61\x65\x40\x0c\x1e\x50\x98\x6f\xa4\xd0\x02\xe1\x1d\xda\xa3\xb7\x8b\x24\xcd\x33\x92\x6c\x3e\xe6\xe4\xb2\xaa\xf1\x66\x53\x9a\xa4\xe1\xbf\xa1\x7b\xec\xda\x2e\xa4\xd8\x21\xba\x8b\x33\xd7\xa1\xd6\x53\x58\x66\x6e\xcf\xb6\x1d\x30\xfe\xcf\xff\xc8\x0c\xf9\xf3\xff\xfe\x4f\xf5\x73\x9e\xb9\x0e\x30\xc8\x03\x98\xbb\x4f\xe9\x63\x98\xb9\x07\x4f\xe9\x13\x18\xbb\x5f\x3f\x7d\x4c\x9f\xc0\x8d\xfb\xd4\x7e\xfc\x35\x7d\x52\x40\xde\x88\xf8\xc1\x04\xbb\xbe\x9d\x59\x46\xa4\xcb\x95\x63\x80\x10\xe5\x58\xbe\xf6\x97\x5e\xb7\x5d\x2e\xe2\xb3\x17\x61\x1c\xe6\x0c\xc9\x76\xbf\x5f\xe3\xa5\x64\x3e\x26\x48\x65\x44\xcd\x8b\xb9\x76\x0b\x81\xe4\xba\x77\x00\xe9\xc6\xdb\x6d\x81\xa3\xe2\xec\x15\xe5\x58\x39\x95\x46\x58\x2f\xca\x14\xf9\x49\x18\xd3\x71\x6b\x69\xbb\xe1\x49\xe0\x81\x04\x17\x45\xb5\x28\x68\xf8\xf8\x21\x5d\xce\x9d\x82\xf5\xea\x29\xf4\x80\xa5\xcd\xf9\xcd\x06\x99\xf6\x94\x3e\x66\x69\xb3\x64\x99\xca\x14\x36\x32\x2c\x69\x1c\xac\x64\x0a\x1f\x24\x96\x74\x43\xe9\x95\x2a\xc7\x07\x8c\x25\x56\x47\x94\x71\x10\x27\xaa\x49\x9b\x27\x55\xda\xd9\xf6\x66\x17\xec\x33\x2e\xc2\x45\x0d\xdd\x3c\x1c\xa5\xbf\x19\x1f\xe3\xbb\x0d\x7c\x5a\x97\x6f\xe2\xdb\x44\x52\x2f\xfe\xdb\x5b\x76\xb0\x41\x08\xbf\x5a\xf2\xd9\x98\xd8\x58\xd5\x31\xb1\x61\xfb\x7c\x3c\x7c\x84\xeb\x88\xc6\xc1\xea\xf3\xf1\x08\xbe\xa8\x23\x62\x2c\xf2\x1b\x5a\x26\xb8\xa9\x8e\xaa\xed\xd9\x83\x10\x3b\x86\x51\xf3\x72\xb0\x81\x0f\x83\xd4\x5c\x6b\xa9\xe5\xdb\x05\xa6\x03\xf2\x6d\x20\xa5\x15\xda\xea\x84\x54\xa7\x52\x74\xd3\x8e\xbd\x47\x08\xd3\x0b\x72\x8b\xb0\x84\x6e\x0c\xd4\x24\x71\xe5\xbc\x09\x9b\xc6\x4c\xfa\xb5\x09\xeb\xe5\xd9\x70\xf1\xe2\xa1\x28\xfe\x94\x3e\xee\x86\xac\x74\x58\x2b\x3d\x97\xa5\x93\x7a\x69\xc6\x36\xe5\x0d\xa1\x3d\x42\x12\x81\xc4\xa1\x07\xdd\x84\x21\x49\x6a\x48\x32\x03\x83\x2d\x1c\xca\x23\x6a\x92\xbc\x5e\x03\xcb\x4d\x4d\x5a\xef\x5e\x29\xa7\x1e\x3e\x13\x98\x80\x23\xfa\x1b\x3f\x66\xc5\x71\xa7\x3f\xe9\x7a\x6d\x98\xe5\x2f\x4b\xfc\xd2\x1f\xef\xe5\xdc\xb9\x41\x15\x05\x8f\x3f\x8c\xda\x47\xde\xb9\x75\x6e\x9e\x8f\xcf\x7b\xbe\x89\xb9\x9f\xc7\xff\xf3\x3f\xfe\xef\xff\xe4\xfb\xce\x90\xf1\xb0\xa5\x36\x44\x44\x78\xc6\x49\x3d\xdb\x1f\x5a\x8e\xeb\x0c\x12\x12\x88\x7b\xb1\x29\x96\xef\xa7\x48\xe2\xf5\x7d\x08\x2b\x8e\xe0\xa4\xbe\x88\x92\x20\x47\x89\xe7\xf8\x18\xc3\xd2\x34\x41\x6c\x07\x85\x0f\x58\x0f\xc4\x9e\x55\xb9\x5d\xc8\xdd\xf0\x6d\x2d\xb4\x8c\x43\xee\x3a\x32\xc6\x3b\x99\x49\xc2\x2e\x83\x2e\x24\x87\x2d\x1f\x54\x57\xad\xa3\x34\x26\xc8\x70\x37\x6a\xcc\x09\xae\xc9\xbe\x4f\x36\x6c\x0f\x25\xbc\xa9\xbe\xfe\xb4\xac\x34\xa9\x1e\xb6\xab\x65\x22\xa6\x8d\xfa\xc2\xec\x4f\xdc\xa9\x72\xfa\x7e\x16\xc4\x6d\x0e\x51\x38\x8e\xb2\xca\xa3\x4d\x2a\x9a\xf8\x5e\xd1\x2c\x7b\x18\xb2\xc3\x4f\x23\x7b\xfe\xeb\x32\x88\xde\xb7\x06\x48\xab\xe3\x22\xa4\xa5\x83\xea\xd8\x82\x49\x4e\x5b\x83\x8b\x69\x4e\x32\xca\xa2\x66\x8b\xd0\x61\xe8\xb2\x30\x1e\xd1\x6d\x48\x72\x84\x14\x2e\x8d\x0a\x4b\x43\xcb\x71\x2c\xe3\x3c\x8c\xb6\xe3\xd0\xc0\xad\x36\x7c\x1c\xc7\x24\x4d\xe6\xa7\xad\xeb\x67\xc9\x30\x1a\xa3\xd1\x9a\xb4\x11\xd5\xa4\x25\x9e\xd7\x6d\xcb\xfa\x36\x34\x4f\x5b\xd1\x5c\xd2\xfc\x86\xd2\xda\x41\x5f\xda\x68\x56\x7a\x4f\x8f\x04\xe3\xf1\x7d\x45\xa9\x29\x6a\xc9\x96\x97\x79\x1a\x8c\xf2\x7b\x61\x2d\x01\x3b\x5f\x46\x79\xb8\x88\x56\xf7\xc2\x76\x05\xec\x38\xbc\x0e\xc7\xcd\x38\x9b\x4a\xf5\xde\xcf\x0b\xc8\x0b\x11\xb6\x97\x31\x05\xde\x29\xe5\x06\x8a\x5b\x84\x6b\x52\xa8\xa0\xc6\xe0\xf9\x98\x47\x04\x29\x6d\x8c\xb8\xc5\x63\x8c\xf2\x0e\xe3\x1c\xb4\xc7\x8f\x4b\x49\x75\xfe\x35\xa6\x51\x38\x67\x56\xc4\x7a\x6d\xf4\x0c\x08\x49\xde\x9b\x07\xb7\xcf\xe8\x82\x7b\xe4\xbb\x2b\x9a\x6e\x97\x76\x29\x12\x21\xb6\xee\x96\x64\xb9\x5e\x3b\xea\x4a\xce\x15\x5d\x65\x28\xc0\xbd\x49\x92\x3e\x0f\x46\xb3\xea\xd0\x26\x12\x75\x8e\x48\xe0\x45\x3e\x4c\x48\xde\xcb\x82\x09\xed\x74\xea\xe1\x63\x46\x18\x66\xf2\x62\x68\xcb\x72\x2e\xba\x6a\x84\x61\x4c\x62\xf6\x67\x41\xb2\x61\x66\xa6\x66\xe4\xf2\xa7\xdf\x7b\x13\xe9\x47\xcc\xf0\x44\x64\x94\x5d\x81\xc9\xe7\xdb\x85\xeb\x75\x99\xcc\xeb\x12\xa9\xb8\xd3\xd1\x29\x1f\xe1\x2a\x58\xd3\x5e\xd5\x05\xeb\xf5\xf2\x30\xc4\xa5\xff\x4a\x34\x82\x05\x2c\x4d\x07\xef\x24\xde\xc2\x27\x23\x1e\xe3\x1b\x43\x52\x54\xe3\x11\x42\xd8\x9b\x44\x41\x9e\xd3\x98\xff\x5e\xc6\xea\x4b\xb7\x52\x2a\x97\xe6\x28\x65\x0b\x60\xcb\x48\x24\x24\xed\x25\xd7\x34\xbd\x49\xc3\x5c\xdc\x95\x0a\xd8\x70\xb0\xc5\x8b\xc7\x7c\xd9\x68\xeb\x1e\xf9\x54\x07\xe6\xb8\x32\x85\xaa\xab\xd5\xd5\x5e\xd4\x6b\x6e\x0c\xb5\xdc\xd3\x5b\xaf\x2d\x67\x8f\x34\xa2\xa3\xaf\xd7\x69\x4f\x90\x30\xa4\x6e\xe9\x7b\x47\xef\xd4\x1c\xf7\xb2\x24\xd5\xc2\xd8\xd7\xfd\x93\xca\x38\x77\x6a\x77\xaa\x68\x61\x1e\xed\x65\xf4\x92\xc4\xf2\x80\x28\xc4\x10\x91\x4c\xdf\xd2\x1d\xb1\x4f\x1e\x01\x78\x42\x82\x41\x79\x2c\x37\x1a\xa8\xcd\xf4\x4f\x74\xcc\xc4\x8b\x7c\xc6\x5c\x9f\xc1\x3f\x9c\xef\x12\xc1\x77\x65\x85\x1c\x8f\x68\xdf\x00\xf1\xcc\xf5\x9a\x01\x89\x6d\x57\x9e\xdb\xe9\xf0\xda\x88\xb2\x3c\xcb\xe0\x41\x23\xad\x3f\xef\x0a\xd7\xe3\x8d\x61\xa0\x50\x9d\x60\x75\x3a\x68\x5b\xcb\x71\xc1\xd1\x52\x94\x7b\xb1\xcf\x4f\x6e\x21\x28\xea\xa2\x01\xdf\x55\x6c\xda\xb6\x54\xf0\x2d\x35\x2a\xa8\xdd\x23\xb5\x2d\x80\xd6\xcd\x82\x1a\x44\x2f\xcc\xbe\x5d\x4e\x26\x34\x6d\x6c\x1e\x94\xe9\x88\xe2\x62\x53\x54\x6d\x44\x12\x94\xb1\x7b\x5a\xdd\x76\xa3\xe0\xdf\x6c\x8b\x24\x69\x11\xf6\x9b\x5b\xc4\x77\x9a\xb7\x91\x94\x4d\x89\x70\xc2\x47\xb9\x9c\xcc\x5e\xec\xab\x81\x55\x3b\xdf\x5e\xec\x93\xbb\xd0\x8d\x21\x72\xf7\x1c\x90\x99\xee\x5d\x65\xfe\x33\x95\x53\x30\x7f\xa8\xca\x02\x93\x57\xea\x77\x8a\x21\xec\x45\x64\xcf\xae\xd2\x4a\x27\xff\xbd\x39\xa1\x90\xf6\x46\x24\x87\xb4\x37\xde\xbc\x8a\xd3\x4b\x38\xbb\xad\xd7\xdb\xae\x6b\xe6\x70\x57\xdd\x03\x75\xf7\x6c\x1e\x30\x3e\x2e\x70\x01\x69\xaf\xae\x4f\x69\xbb\x20\x7b\xcd\x11\x90\xbd\xac\xa6\xf2\xfb\x60\x5a\xca\xf4\x8d\x1a\x37\x61\xe1\x4e\x9c\x26\x18\xa7\xc9\x78\x19\x51\xa3\xd8\x7e\xbb\xd4\xb8\xb8\xa0\x99\x04\x53\xc5\xf6\x6c\x41\x6e\xbe\xe9\x84\xdf\xe9\x70\x93\x8a\xa4\xdc\x93\xe7\xd7\x9d\xbc\x5c\x3f\x98\xd0\x78\xdc\xa9\x45\xf0\x62\xec\xdd\xe9\x50\xc6\x4f\x55\x2d\x55\x01\xb1\x94\x4b\xc2\x44\xb0\x12\xee\x55\x15\x8b\x10\xf1\x8c\x1d\xb6\x90\x1d\x83\x21\xf7\x86\x8c\x66\x6f\x8b\x16\xd0\x02\x43\x9f\x13\x23\x37\xa9\xca\x0e\xae\x2e\x6f\x85\xe2\x34\x22\xed\x8d\x11\x9b\x96\x9b\x97\xca\x44\x6c\xfe\xde\x65\x18\x8f\x39\x5d\x10\x6a\x2f\x0e\x59\xff\xc4\x2d\x67\x1e\x8d\xd6\x0e\x37\x27\x01\x55\xe1\x69\x8a\x96\x70\xfc\xb4\x64\xe2\x2a\x54\x44\x8e\x21\x67\xd5\x25\xed\x2a\xd7\x86\xfc\xaf\x9f\xae\x88\x89\x20\x5d\x5a\xf7\x16\xc4\x30\x20\x45\x69\x2f\x23\x0e\x2e\x90\xf7\x19\x32\xb4\xa6\xd4\x0c\xeb\x2a\x0e\xc5\x6e\xcb\x42\xf2\x89\x95\xa9\x55\x68\x56\xcf\xbc\x34\xd9\x18\x3f\x4c\x36\x06\xa8\x21\x16\x71\x9b\x5c\x64\x5c\xf9\x0f\x93\x89\xbc\xb2\x72\xcb\x38\x24\x29\xea\x8b\xa0\xc5\x5f\x63\xc8\xb8\x93\x43\x58\x6e\xb9\xcd\xaa\xab\xbb\xbd\x28\x19\x89\x23\xc5\xb0\xba\xb6\x13\x0f\x6d\x37\x86\x80\xa4\xbd\x71\x28\x76\x84\x21\xab\x72\x83\xa1\x63\xdb\x6e\xc0\x5d\xac\xe4\xb3\x94\x66\xb3\x24\x1a\x43\x54\x01\x2c\x87\xbd\xa7\xee\x12\x46\x24\x65\x2a\xe1\x5b\xa6\xc8\xa5\xf1\x2b\x19\x2f\xb3\x02\x1b\x0d\x0f\xfa\xee\x08\x66\x24\xed\x8d\x82\x8c\x9e\xd1\x38\x0b\xf3\xf0\x9a\xc2\xb8\xba\x23\x34\xeb\x74\x66\xb0\x60\x15\x25\x57\x34\x3e\xa3\x8b\x80\x77\x3f\xcc\x2b\x34\x8b\xe1\xfe\xae\xb9\x3f\x75\x17\x70\x4d\xd2\xde\x24\x8c\xc7\xc7\x51\x74\xca\x43\xd8\x67\xb0\xaa\x50\x5d\x77\x3a\xd7\x30\x65\x34\x85\x31\xcf\x3e\x99\x05\xa9\xa4\xea\xb2\x42\x37\x1d\x3a\xee\x14\x2e\x48\xda\x0b\xc7\x70\x53\xa5\x5f\x88\x67\x17\x17\xf0\x9c\xa4\x5c\x51\x83\xdb\x2a\xf3\xf9\xd0\xf3\xdd\xe7\x70\x46\xd2\x5e\x36\x4b\x96\xd1\xf8\x2c\x49\x73\x78\x53\x01\x9c\xad\xd7\x67\x70\x4c\x52\xfe\xd0\x31\x86\xab\x2a\xe7\x78\x98\xb8\xc7\xf0\x9e\x95\x4c\x52\x96\x77\x5a\xe5\xbd\x1f\x6e\x51\x02\xb3\x51\x92\x52\x2b\x17\x7f\x0b\xf7\x3d\x9c\xa8\x2e\x0a\x3f\x52\x78\x57\x35\xfa\xa4\xd3\x39\x81\xb7\x7c\x20\xf2\xd1\xec\x38\x8a\xde\x33\xa0\x0c\x3e\x54\x20\x6f\x3b\x9d\xb7\xf0\x8c\xb5\x37\x1e\x45\xcb\x31\x55\x5d\xf7\xba\x02\x79\xd6\xe9\x3c\x83\x97\x15\xc8\x19\xab\x16\x5e\x55\x00\x2f\x3b\x9d\x97\xf0\x82\xa4\xbd\x6b\x9a\x5e\x26\x19\x85\x8f\x55\xde\x8b\x4e\xe7\xc5\xce\x3f\xf0\xfa\x74\xb2\x60\xc9\x19\xb9\x53\x9c\xed\x86\xa0\xd8\xd8\xcd\xa0\xe4\x58\x37\x82\x26\x77\xba\x13\x08\xb3\x13\x9d\x17\xdd\x31\xd4\x39\xcf\x9d\x43\x9d\xc5\xdc\x15\x6c\x32\x94\x7b\x09\xe1\xd8\xbd\x01\xc6\x27\xee\x2d\xd4\x7b\xd6\x7d\x0d\x7a\x3f\xba\xaf\xa0\xe2\x19\xf7\x0d\x70\x0e\x71\xaf\x40\xb0\x83\x7b\x0a\xb2\x4f\xdd\x8f\xa0\x46\xd8\x7d\x07\xf5\xf1\x74\x3f\x14\xa0\xee\x90\x9c\x24\x51\x44\xd5\x82\x53\x88\x20\x2b\xe5\xfd\xcd\xea\xc2\x72\x05\xf6\xa9\xeb\x98\x51\x98\xe5\x84\x02\x2d\xaf\x17\x64\x54\xbc\xf4\xda\x2c\x26\x56\xaa\x20\x9d\xf2\x38\x61\x59\x19\xef\x46\xd3\xf6\xcb\x4c\xcf\xf1\x87\xfa\x87\x7b\xc7\x2d\x39\x77\xcf\x29\xe4\x86\x5a\x94\x4c\xd1\x97\x96\xfa\xef\x3c\x3e\xe3\xf5\xee\x2e\xc4\x90\xb9\xbb\xc6\x97\x4c\x72\x8e\x82\x1c\x51\xf8\xd2\xf8\x52\xba\xc1\x56\x3b\xd2\x8b\x94\x8d\x19\x15\x85\x68\xca\x9f\xf1\xc5\x95\x24\x91\xa9\x10\x32\xa1\xb1\x8c\x22\x95\x02\x89\x2c\x2f\x5a\xc9\x56\x70\x0c\x01\x49\x7a\xe2\xb4\x39\x83\x8c\x24\xbd\x94\x66\xcb\x28\xcf\x76\x6a\xfb\xb8\x23\x11\xf3\x8d\x0f\x2a\x33\xf7\xeb\xfc\xa8\x09\x86\x4e\x47\xd6\xc0\xcc\x3c\x7e\x8d\x93\xb7\xbc\xd3\xa9\xc2\xd9\x96\xb1\x51\x65\x0e\xca\x48\x56\x7a\xcb\x96\xa9\x58\x56\x70\x21\x1e\x26\xa2\xac\xba\x00\xb2\xd1\xf8\x96\x5b\xe9\x62\x87\x7f\x63\xac\xec\xd6\xb1\xb2\xf5\xb1\xb2\x7d\x97\x1f\x0c\x78\x3e\xbf\x0f\xa2\x37\x52\x71\x28\xae\x2e\xa3\xab\x8b\xb8\x9b\x70\xe5\xa4\x62\x03\x63\x73\xdb\x5d\x3e\x87\x8a\x0f\x93\x41\x6c\x12\x07\xcb\xcb\x1b\x4c\x28\x84\x28\x65\x46\x9a\x8e\xa6\xd4\x9a\xee\xea\x83\xea\xe6\xa0\x0f\xa9\x2b\x8a\xd3\x7a\xd9\xa2\xea\xad\x2d\x0c\xfd\x3b\xfb\xc8\xf3\xa1\x6d\x2e\xd4\x99\x5e\xe0\x51\xc7\x28\x6c\xaa\xa9\x38\xb7\xa2\x77\xab\x90\xc6\x92\x25\x78\x08\xee\xd2\xbe\x4f\x78\x28\xf0\xb2\xdf\x92\xc3\x60\x90\xf0\x7e\xe3\x8c\x11\xc4\x41\xb4\xfa\x48\x91\x68\xa6\x6a\x5f\xea\x25\x3e\xa4\x74\x94\xa4\x63\x37\x01\xbe\x39\xe1\x26\x05\xdc\x09\xa6\x3e\x0d\x16\x6e\x0c\x92\xc1\xdd\x10\x1a\x3d\x4b\xeb\x3d\x9b\x17\xe5\x10\xc8\xf9\x21\x6e\xcf\x96\xe5\x8b\xa2\x7a\x22\x70\x57\xc8\x93\x86\x92\xde\xe5\x61\x34\x58\x32\x7a\x15\xd0\x88\xa4\xde\xd2\x87\x09\xb1\x61\x46\x6a\x1c\xc3\x44\xa9\x2a\x36\x39\x9c\x0d\x26\x66\x75\x99\x6f\x03\xd0\x9b\xd4\x3a\xaf\xd4\xd1\xc7\x7c\xe9\xc9\xbc\x71\x2f\x0e\xe6\xd4\x27\x92\x68\xd7\xb1\xc6\x72\x7e\xaf\xd7\x4e\x01\xea\xe3\x90\xd8\xeb\xb5\xfa\x38\x72\x36\xcf\x18\xfe\x42\x57\xbb\x22\x77\x77\x16\x64\xbb\x79\xb2\x7b\x49\x77\x8f\x76\xed\xdd\x20\x1e\xef\x1e\x92\x5d\xc7\xc0\x3b\x63\x22\x6a\x13\x17\xf2\x32\x6f\xac\x55\xab\x24\x5d\x6d\xa0\xc6\x72\x9c\x6a\xad\xe2\xab\x02\x1a\xc1\x18\xab\xa1\x1b\xc9\xa1\x5b\xfe\xf6\xa1\x2b\x1a\x43\x97\xe9\xe3\x56\xce\x0e\x49\x5c\xfb\xcb\x00\x35\xc7\xf9\x4b\x42\x42\x7b\x01\xd3\xd1\x79\x48\xf7\xba\x42\x69\x39\x6e\xcc\xa3\x81\x70\x24\x3c\x66\x82\x68\x07\x77\xf2\xcc\x5b\x02\x11\x3f\x4e\xab\x49\xe7\x51\x85\x23\x62\x3a\x56\xc4\xf7\x42\x6b\xf2\x7a\x56\x81\x4c\x18\xc8\x04\xc6\x24\xef\x95\x3d\x02\x8b\x2a\x7f\x3c\xbc\x2b\xdc\x31\xcc\xcb\xfc\x0c\xae\xab\xdc\x39\x2b\x3d\xe7\x7b\x85\x7c\x2f\x47\x06\xdd\x5d\x91\x3d\x07\xa6\xc4\x72\xe0\x92\xd8\xad\x53\x32\x91\x4f\x7c\xf8\x82\x65\x9c\xc7\x7f\xa1\x2b\x77\xd7\x50\x6b\x93\xc1\x4f\xd5\xf8\x89\x68\x2a\x97\xa8\x0b\x32\xeb\xc9\xe5\x25\xc1\xa5\x0c\x15\xeb\xdd\x8b\x65\x14\xed\xe6\xf4\x36\xd7\xd7\xb7\x04\xbe\x34\x60\x97\x6b\x7b\xee\xee\x97\x58\x25\x5f\x08\x05\x10\x37\x56\x9a\x52\x08\x97\x62\xe2\x86\x24\x0f\x91\xc2\xcf\x89\xe7\xc3\x2d\xb1\x07\xb7\x87\x23\x35\xd7\x6e\xcb\x79\x76\x46\x46\xde\xad\xaf\xaf\xcd\xe7\xf1\xdb\xcd\xb5\xf8\xac\x27\x17\x68\xb9\x26\x2b\x1a\xde\xb0\x7e\x3c\x26\xf6\xe0\xf8\xf0\x46\x21\x3f\x2e\x91\x5f\x91\x1b\xef\xd8\x87\xf7\xe4\x4c\xf5\xcc\x15\x86\x53\x72\x57\xec\xbc\xef\x85\x19\xd7\x9c\x86\xe8\xd4\xbb\xf2\xc9\x7b\xd1\x68\xe0\x91\x53\xde\xb0\x7f\x9e\x8b\x45\xe2\xbd\xea\x0d\x57\x00\x3a\xf5\x5e\xa9\x6b\x4c\xeb\xb5\x2c\xe5\x94\xcb\x28\x6f\x12\xcf\xd5\x9b\x73\xd5\xde\xf5\xac\x06\x8c\x8b\x37\x9d\x0e\xba\x64\x8d\x28\xa6\xe4\xb9\x67\x57\x8f\xba\x4e\xc8\x73\xe5\x8a\xf2\x1d\x71\x06\xef\x0e\x4f\x06\xef\x18\xdc\xd4\x24\xcf\xbd\x77\xfe\xce\x74\x9f\x9c\x68\xf5\x1a\xbc\x5e\x51\xcd\x6e\x70\x4d\xd3\x60\x4a\x5d\x03\xa6\x42\x81\x7b\x4b\xe4\x48\xef\x4c\x8f\x2c\xa7\xd3\x41\x6f\x09\x7a\x6b\x4e\xf1\x7e\x5f\xa7\xdd\x38\x6b\x94\x7e\x2b\xb8\xed\x03\xd9\x6b\x65\x8f\xf5\x7a\xef\xde\x0e\xba\x3c\x22\x8a\x0b\xea\x3c\x6a\x9c\xc7\x27\x33\x3a\xba\xda\x55\x0a\x6d\xc5\xec\x1f\x30\x06\xb4\x5a\xaf\x2f\xd4\xa0\xe1\x4e\xe7\x83\x18\xe1\x67\x64\xe1\x2d\xfd\x9d\x67\xc3\x67\xbd\x64\x99\x2f\x96\x72\x69\xe7\x42\x26\x85\x4a\x6e\xb8\xa1\x14\x34\x09\x88\x5e\x7f\x2b\x94\x5d\x3a\x7e\x19\x8f\xc3\x11\xcd\xdc\x8b\x5e\x3d\xa1\xc0\x2e\x62\xb8\xc9\x5d\x98\xd3\xb9\x1b\x80\xc0\xef\x7a\x7f\x04\x6e\xbf\x80\x6b\x41\x29\xab\x02\xe3\xa2\xbc\x58\x9d\xa1\x04\x97\x0b\xd7\x6b\x62\xc3\x4b\x92\x28\xc6\x7e\x7d\xf8\x72\xf0\x7a\xcb\x42\x5c\x23\xe8\xb5\x22\xc8\x7b\x5d\x2e\xca\x41\xab\x64\x5f\x94\xc2\xf9\xba\x29\xd9\x47\x75\xc9\x3e\x2b\x74\xe5\x46\x57\x4b\xdb\x65\x78\x6d\x64\xcf\x63\x11\xbb\x38\x8c\xa7\x92\xeb\xcf\x63\x43\x7f\x5c\x68\x43\x4c\xaa\x77\xeb\x87\xf1\x20\xe5\x93\xb8\x8a\x4d\x95\x7b\xa9\x2f\x87\x58\x73\x57\x09\x01\x71\x20\x23\xdc\x97\xf3\x60\x79\x98\x88\x75\x5f\xbe\x2d\xa1\x43\xea\x85\xde\xd2\x67\xcb\x88\xdf\x53\xab\x23\x8c\x08\x7f\x1d\x12\x0d\x79\x9e\xa0\xa6\xfa\xb9\x5e\xf3\xbb\x47\xdd\x68\xc7\xd9\x63\x40\x2a\xc2\x55\x18\xa3\x0c\x46\xd8\x45\x1c\x34\xe6\x0d\x27\x23\x08\xba\x64\x84\x0b\x4e\x1c\x2f\x4e\x1c\xee\xb6\x37\xe0\x36\xa1\xea\x00\x1e\xf7\x5f\xd7\x0c\x93\xb4\xf5\xb9\x5a\xa3\xcb\x98\x56\x1f\xc6\xd3\x5e\xaf\xd7\x33\x30\x50\x71\x80\x53\xd7\xfe\xb9\x35\xa7\x69\xe8\x2a\xb6\xc7\x36\x23\xaa\x45\xb9\x96\x86\xa0\x5a\x74\x3d\x5d\x16\x73\x32\xde\x08\xbe\x67\x3f\x0d\xf8\xf3\xd9\x9b\xd7\x3d\xb1\x54\x85\x93\x15\xa2\xb0\x61\x82\x57\xfb\xa9\x84\xd9\x8a\xea\x0c\x83\x88\x5c\x7e\x78\x95\x96\x87\x57\xe5\x31\xd8\x8e\x0c\x70\x9e\x97\x21\x77\xf2\x02\x63\x10\x17\x82\xe5\x66\x94\x22\x4d\x51\x5e\x37\x80\x3b\x9d\x50\xa0\x68\x57\x25\x04\xeb\xec\xe4\x72\x26\x66\xfa\x5b\x59\x66\x27\x84\xba\x9d\x10\x0a\x3b\x41\x86\x01\x66\x16\x02\xbf\x74\xb4\x47\x48\xd2\x98\xc9\xca\x67\xdb\x9d\x78\xd2\x77\x17\xca\x19\xdf\x84\x53\x13\x52\x68\x2a\xc5\x4e\xc2\x98\x92\xbb\x0b\xbf\xa2\x2b\xc2\xbf\x30\x24\xcd\x9b\xe6\x46\x35\xa7\x0d\xdc\xe9\x24\x9a\x22\x24\x44\x76\xa0\xa5\x10\x3d\x9b\xdf\x14\x14\x2d\x15\xbd\x12\x30\x06\x6c\x2c\xe9\xfa\x86\xc1\x96\xee\x93\xbb\x41\x44\xee\x0e\x15\xd5\x9c\x15\x46\x02\xdd\x30\x12\xe4\xbb\x44\xea\x25\x9b\xbc\x16\x8e\x99\xd1\xd9\x63\x02\x95\xb4\x28\xa2\x22\xa7\x41\xe3\x18\xf3\xd3\xc4\xb0\xec\xe9\xea\x14\x52\x48\x66\x51\xaa\x80\x88\xd8\x30\x2a\x25\xc3\x20\x3a\x1c\x0d\x22\x46\x50\xe8\x45\x3e\xca\x60\x89\x77\xe4\xe2\xb0\x94\x11\xea\xe5\xa7\x28\xaf\xf1\x5d\x39\x9b\xa2\x64\xba\xcd\x7c\xdb\x69\x9b\x43\xfc\xa8\x41\x84\x17\xa7\xb8\x17\x25\x53\x79\x57\x80\x42\x69\x9d\xf1\x57\xde\x9d\x4e\xbd\x93\xff\x39\xdd\x77\x20\xcd\x7f\x0d\xe4\x1b\x37\xaa\x97\xdb\x2f\x3b\x1c\x60\x36\x9d\xd0\x63\xb1\x75\xfc\x15\x86\xe0\x5f\x66\xcf\xb8\xb1\x53\xf7\x4f\xb0\x6b\xfc\x5f\x6f\x97\x53\xee\x3a\x4a\x85\xbf\x2e\x28\x1a\x75\x0c\x73\x37\xaf\x7b\x78\xae\x95\x95\x33\xe9\x90\x4c\x3a\x1d\xa4\x67\x1c\x47\x8b\x59\x70\x49\x73\x92\xd4\x92\xf1\xf6\xad\xcd\x6d\x9b\x93\x1b\x22\xae\x4e\xe0\x7a\x8d\x98\xf0\xac\x91\x58\xa7\x91\x10\xa2\x0e\x19\xef\xa4\x7a\xeb\xee\xd9\x52\x93\xb4\x9b\x9a\xa4\xe7\xd9\x50\x5e\xd7\x70\x7c\x5f\xbc\xaf\xca\x6b\x9d\x04\xa9\xb8\x39\x54\xe7\xf7\xa4\xb2\x83\xe5\x78\x94\xe2\xb9\xde\x5b\x47\xd5\xdd\x4f\xb5\xbb\xa5\x6c\xaf\x44\x3d\x5d\xaf\x55\x97\x91\xa0\x9a\xbc\x4b\x12\x54\x73\x35\x22\x81\x36\x31\x47\xfc\x1d\x79\x6d\x4e\x4c\x48\xd0\x32\x07\xca\x3b\x2f\xcd\xfa\xdb\x86\x10\x2a\x66\xcd\x2a\x66\x5d\xd6\x98\xb5\xc1\x76\xa3\x36\xb6\x9b\x14\xff\x3e\xb2\x39\x68\xde\x36\x11\x2d\xd8\xf7\xce\xad\x73\xef\xdc\x3f\xdf\x3f\xbf\x3b\x2f\xce\xd1\x39\x3e\xef\x9e\x9b\xe7\xc3\xf3\xde\xf9\xf9\xf9\xdf\xce\xbf\x38\x5f\xfb\xfb\xd3\x9d\xb6\x53\x55\x85\x23\xde\xdc\x7a\xec\xb7\x6e\x5b\xf6\xf5\x6d\xcb\xbe\xef\x72\xb9\x08\x21\xd1\x9c\xbe\x57\x91\x57\x53\xe5\x28\xbe\x4c\x89\xc1\x58\x1b\x3c\x0a\xa1\x7a\xf8\xce\xf7\xcb\xf7\xf6\x12\xfe\x86\x8f\x71\x6e\xe5\x26\x44\x6c\xff\x25\x1b\xdb\x7f\xf2\xb2\x5b\xc2\x0c\x44\xa9\x05\x79\xd5\xbd\xa9\x11\x86\x51\x35\x91\xca\x5d\x2b\x31\xef\x82\x61\xef\x89\xeb\x80\x9a\x8f\x41\x73\x1a\x66\x45\xcb\x59\xb0\x5a\xfe\x9e\x88\xe5\xef\x29\xde\xd2\x95\x90\x42\x52\x31\x56\xc0\x28\x57\xb3\xa7\xb6\xb8\x89\xa5\x2d\xd1\xa7\x93\xb6\xb2\xb1\xa5\x8f\x2d\x6d\x89\x36\xc3\x6a\x6b\x5a\xef\x29\x5f\xd3\x92\xe6\x9c\xdb\x5c\xd2\x92\xb6\x75\xa8\xb6\xac\x39\x7c\x49\xcb\x78\x2c\x5a\x69\x79\x4d\xc9\x84\x87\xa0\x2d\x55\x79\xb8\xc6\x70\x51\xc5\xca\xb8\x21\x9e\x0f\xcf\x89\x3d\x78\x7e\xb8\x1a\x3c\x67\xe3\x71\xe3\x3d\xf7\xc5\x66\x17\xb7\x02\x2e\x45\x8f\xdd\x32\x33\x01\xee\x28\x5b\xb3\x32\xd7\x96\x01\x1d\xb9\x0f\x36\x3e\xa9\x2f\x81\xde\x2e\xe8\x28\xa7\xe3\x32\xe9\xba\x9a\xe7\x91\x70\x8b\x31\xad\xac\xb4\x5b\x98\x62\xe0\x15\x20\x46\x5e\x14\x64\xf9\xcb\x8a\x44\xf3\x02\x63\xb5\xf1\xf4\x7b\xeb\xd5\x2a\x3d\x83\x29\x2e\x8a\x4b\x62\x39\xda\xce\x94\xe7\xc3\x31\x71\xe0\x8a\x5c\x98\x2b\x78\x4f\x9c\xc3\xc3\x0b\xcb\x81\x53\x62\x0f\x4e\x0f\x2f\x06\xa7\x35\x03\xf7\x84\xd8\xf0\x8e\x5c\x0d\x4e\x0e\xdf\x0d\xb0\x4e\xd8\xe9\x06\x61\xd7\xe6\xbb\x4f\x91\x76\x48\xa6\xc3\x13\xf2\xce\xbd\x22\xef\xe0\x9d\x7e\xc7\x17\x5d\x59\x27\x78\xbf\x6f\x9e\xe0\x9d\x2b\xf2\x6e\x47\x6c\x03\x69\xf1\x4b\xaf\xad\x77\xa6\x83\xe1\x03\x19\x0f\x57\x6e\xd9\x3a\x56\xe3\x0a\x9b\x17\xf0\x8c\x88\xfb\x13\x1f\xcc\x3e\xde\x79\xe6\x7d\x30\x1d\x9f\x20\xe7\xf0\xf0\x14\x6b\x0d\x7f\x4d\x3e\x0c\x5e\x1f\x91\xb7\x83\xd7\x96\x9a\x84\x2f\xc9\x6b\xcb\x81\x57\x24\xf5\xca\x50\x47\x2f\x31\x9f\xc5\xaf\x3a\x1d\x74\xe3\xbd\xf4\x89\x83\xe1\x99\xf7\xda\x27\xe8\x99\xf7\xda\x74\xfc\xc3\x43\x67\xed\xe0\xce\x2b\xfe\x2c\xe2\xb4\xd3\x61\xc9\xfe\x9a\xa0\x37\x3c\x77\xfd\xc6\x7b\xed\x63\x0e\xb3\x16\x29\xa2\x74\xe7\x7d\xa7\x83\x8e\xc9\xfd\xfd\xf7\xf2\x53\xbd\xc7\xba\x8f\x2f\xec\x53\x72\x0c\xe8\x92\xbc\xc4\x87\xe4\x5a\x04\xf2\xdf\xa9\xf5\x56\xbf\x7b\x6d\x5d\xe2\xa2\x10\x17\x41\xab\x2a\x4d\x67\x73\xd0\x3e\x55\xe9\xd1\x54\xd6\xf0\x86\x3c\x2b\x1a\xea\xc0\xe5\x11\x29\x15\x02\x7e\xb8\xdf\xb3\x6d\xc7\x3d\x6e\x0a\xa5\x10\xdd\xc0\x1c\x37\x25\x53\xfb\x35\x99\x6a\x51\xc8\x7b\x82\x6c\x88\xab\x09\x9f\x0e\x6d\x37\xe5\x17\x90\x1b\xed\x80\xa4\x02\x0a\x87\xb6\x1b\x42\xc0\x10\x34\x9a\xd6\x26\xc6\xf2\x4f\x88\xb1\x78\xbf\x94\x2c\x93\xea\x29\x48\x66\x55\x91\x54\xa2\xe1\xc8\x9c\xec\x47\xee\x64\xe8\xb8\xa3\x87\x34\xb2\x9a\x5d\x7f\xf4\x69\xdb\x83\x4e\x9e\x1d\x48\x99\x08\x88\x89\xe5\x40\xc8\xfe\x79\x88\xc5\x9c\x75\x3a\x96\xc3\x0d\x9f\x98\x24\x6e\xb6\x5e\x8b\xaf\xf5\x1a\xa1\x90\x24\x96\x83\xad\xd8\x74\x8e\x48\xde\xe9\xc8\x0d\x13\x2f\x86\xd0\xc7\xbc\x96\xd2\x84\xa5\x5e\x62\x39\x7e\xa7\x93\x58\x71\x03\x94\xa5\x63\x48\x1f\x78\x1b\xb5\x11\x65\xa5\x1c\xa0\x98\xd8\x83\xf8\x30\x95\x87\xa9\xd5\x9c\x8e\x31\x93\xef\xd5\x9e\x9d\x3d\x08\x0f\xd3\x41\xd8\x80\x0a\xb1\xbf\x66\xc2\x30\xb5\x42\xcb\xd9\xd1\xac\xee\x6d\xeb\xa9\xbd\x6d\x21\xdd\xb8\xa8\x29\x4c\x4a\x08\xf9\xec\x4d\xcb\xfd\x9b\xda\x5d\x69\x66\x4d\x42\x26\x1c\xd2\xf0\x65\x22\xe1\x2e\x8e\x52\x2d\x26\x36\x64\xe5\x67\xc2\xa3\x09\x08\x2d\x23\xf7\x02\xbf\x3a\xc8\x59\xe2\x70\x82\xb2\xf5\x7a\xe3\x38\x70\x59\x1d\xb9\x57\x69\xdc\xed\x07\x5a\x56\x5b\xbb\x62\xb7\x62\xb9\xb1\x5b\x41\xd1\xd2\x8b\x7c\xc8\x20\xc4\xc2\x65\x49\xd6\xe9\xf0\x28\x6e\x65\x82\xdc\xa7\x59\x6a\x8f\xc4\xe4\x86\x46\xa8\xf6\xd0\x4a\x05\xba\xe0\x7d\xe9\xf9\x5c\xb5\x2d\x40\xbf\xeb\x98\xe3\xe6\xdd\xc7\xa1\xf6\x5c\x1a\x61\x17\xc5\x8c\x7d\xab\xe7\x10\x6d\x8f\xa2\x51\x4a\x12\x3c\x4c\xcb\x37\x11\x31\x76\xd3\xfa\xa3\x88\x10\xe3\x02\x57\xef\x2b\x20\x45\xce\x13\x8c\x28\xc6\x9f\x75\x21\x9a\xf6\x6e\xe8\xe5\x22\x18\x5d\xbd\x4d\xa2\xd5\x24\x8c\x22\x5e\xc7\x98\x2e\x52\x3a\x0a\x72\xaa\xcf\xf9\x02\x28\x33\x11\x66\xdc\xd7\x03\x63\xba\x30\x1a\xa7\x34\xe6\x05\xd4\x07\xf1\xfc\x7b\xae\x98\x46\x49\x30\xa6\xe3\x8d\xab\x9a\x53\x9a\xb7\xdd\x80\xec\x45\xc5\x7d\xf7\x55\xc3\x87\x23\x0a\x19\xa2\x8d\x96\xb2\x95\x91\xb6\xcc\x8e\x16\x0f\xb1\x29\x72\xbe\x62\xba\x67\xdb\x8d\x72\x74\x47\x6f\x83\x51\xce\x2f\xcb\x2a\x3f\x64\xc5\x4e\xd8\xbb\x7e\xdc\x0a\xde\xbb\x7e\xdc\x5a\x02\xc2\xde\xf5\xd3\x2d\x25\x9e\x6e\x2d\x41\xd3\x2c\x4c\x5a\xdf\x8c\x85\x8c\xef\x18\x15\xec\xef\x63\xf7\xa9\xbc\xba\xc0\x06\xb1\xe4\xa0\x07\xb5\xbd\xfd\x82\x24\x55\x7b\x9c\xdf\x26\xcb\x78\x1c\xa4\x21\xcd\x86\x06\x1a\xba\x68\x78\x48\xce\xcf\xb3\xf5\xdf\x30\x1a\x92\xea\x50\xd5\x0b\xac\xc9\xb1\xf5\xe2\xfc\x7c\xec\xfa\x06\x18\x78\xcd\xe0\x0c\xbc\x35\x1f\x0d\x39\x96\x2f\x30\x16\xfe\x3b\x20\x24\x0c\x7b\xff\x89\x67\x5b\x4f\xfc\x75\xdf\xb3\xad\xc7\xfe\xf9\xf9\x78\xed\x9c\x9f\x8f\xd9\x5f\xcf\xb1\xbe\xe1\x09\xe7\x22\xe0\xcf\xf9\x79\xef\xe1\xf0\xf8\xee\xa0\x30\x20\x21\x1a\x19\xfe\x9d\x03\x8f\x0b\x03\x02\x62\x9c\xc7\xe8\x3c\x46\x43\xd7\xa8\x8e\x77\x0d\x17\xdf\x7d\x55\xb0\x34\xac\x25\xae\x5d\xbc\xde\xfd\xc4\x7f\xfb\xfb\xbb\x8e\xdb\x77\x0f\xdc\xc7\xee\x13\xf7\xa9\xfb\x95\xeb\xee\x36\x12\xbe\x16\x95\xe1\x7a\x6d\x4f\xeb\xb5\x85\xac\xb6\x87\x57\xde\xa8\xd5\x65\x69\xb5\x84\xaf\x5b\x12\x6a\xdf\x4e\xaf\xdf\x3b\xe8\x3d\x6e\xa5\xed\x09\xa3\xad\x41\x1c\xaa\x43\xe1\x3b\x07\xfa\x45\x2b\x8d\x35\xda\x5c\x91\xa6\x25\x7c\xd5\xa0\x8d\x7f\xd6\x01\xee\xa3\xed\x31\xa3\x6d\x83\x18\x1b\x9c\xe2\xd3\x04\x1f\x08\x82\x35\x02\x5d\x45\x74\x99\xf0\xb4\x41\xa0\x20\xaf\x01\x70\x1f\x81\x07\x5b\x08\xec\x3f\x80\xc0\xc7\x0d\x02\xdd\xaa\x57\x65\xc2\x93\x06\x81\x8a\xbc\x06\xc0\x7d\x04\xf6\xb7\x10\x78\xf0\x00\x02\x9f\xd4\x08\x74\xf5\x61\xe7\x09\x8f\x1b\x04\x56\xe4\x35\x00\xee\x23\xd0\xd9\x42\xe0\xe3\x07\x10\xf8\x54\x23\xd0\xad\xf3\xa5\xe3\xea\x93\x52\x24\x7c\xbd\x15\x40\x27\xd0\x45\xf5\xf9\x20\xe9\x79\xb2\x41\xcf\x26\x94\x03\x5f\x31\x8a\x70\x7d\x7e\xb8\x75\x01\xb1\xdb\x96\x50\x23\x6d\x57\x9b\xb0\x18\x3d\xf2\x6c\xeb\x9b\xc0\xfa\x78\x6c\xfd\xc2\xc4\x5a\x81\x87\x5b\x05\xc5\xe6\x7f\xfb\xfb\xbb\x8f\x68\x3e\xb3\xf5\xb4\x47\xce\x79\xac\xed\x29\xed\x9f\x67\xdd\xf3\xfd\xf3\xfd\x5e\xf7\x8b\xfd\xe9\x1c\x8c\x5a\x56\xbc\x3f\xe5\x29\x79\x1a\xce\x11\x53\x00\xb7\xad\x27\x7c\x85\x1b\xea\xb1\x0b\xd1\xd0\xfd\x9b\xa1\x75\xd8\x17\x6c\xd9\x70\xff\x56\x75\x59\xc0\xd2\x0c\x8c\xdd\x46\xa9\xb2\x10\xab\xa4\xea\x72\xac\x27\x8b\x45\x48\xeb\xff\x1a\x6c\xd0\x84\x35\x30\x18\x53\x03\x17\x3b\xd9\x96\x85\x7d\x4b\x1b\xea\x0d\x68\xd2\xfa\x10\x42\x65\xc5\x90\x6d\xd1\x0f\x3e\x59\x71\xf0\xe0\x8a\x83\xd6\x8a\x2b\x85\x21\x6b\xaa\x96\xda\x93\xad\xea\x91\x46\xfa\x6f\xf6\x80\x4d\xa8\x41\xc6\xc5\x45\x94\x8c\x83\x6c\x76\x31\x63\xff\x94\x4f\xb6\x2e\x2e\x0c\x08\xc9\x37\xb6\xfd\x95\xf3\xcd\x37\xfd\x27\x8f\xbf\x7a\x6c\x7f\xf3\x8d\xc3\x95\x09\xf9\x0e\xe6\x85\xa4\xce\xe7\xda\x84\x4a\xfd\x13\x8d\x45\x8b\xb5\xec\x8c\xec\xff\xed\x5c\x01\xf4\xcc\xe1\x49\x45\xfb\xb9\xff\xc5\x3e\x2c\x49\x65\x57\x20\xed\xd5\x58\xd9\xec\x69\x94\x5c\x06\xd1\x50\x77\xab\x93\x22\x91\x88\x71\xa7\x23\x7e\xa9\xbf\x3d\xa1\x5a\x97\xef\x73\x54\x3a\x44\x9f\xaa\x26\xa3\xd1\xa4\x51\x09\x4b\x62\x55\xb0\xbf\xe2\xdf\x4d\xf4\x2c\x95\x99\x66\xeb\x75\xb4\x5e\xab\x66\x23\x43\xbb\x95\x6d\x60\xa4\xbd\xe6\x9e\xe8\xa6\xe8\x1e\xda\xa3\xeb\xf5\x9e\x32\x95\x1b\xc7\x09\x20\xdc\x6e\xe4\x7b\xa5\xf3\x92\xdd\xc6\xc6\xb0\x1e\x7f\xb8\x32\xb8\x13\x62\x39\x03\xd3\x4c\x0e\xc3\x01\x33\x24\x73\x44\xbd\xc4\x87\x04\x68\xf9\x8a\x38\x91\x26\x9f\xe5\x30\x93\x6f\xac\xb9\xeb\x10\xdb\x0f\x5a\x70\xd4\x58\x62\xa1\x5e\xec\x6b\x6e\x54\x76\xe3\x1a\x8a\x1c\x1f\xe9\x61\xe8\x66\xcd\xd3\x10\x11\x72\x75\xa8\xf0\xba\x36\x84\x72\x73\x30\xc6\x2a\x02\x6b\xe8\xa5\x3e\xc9\xb9\x17\x3c\x48\x41\x7b\xcb\xac\x85\x4a\xd2\xe7\xc8\x1e\xd1\x22\xeb\x2c\x1a\xaf\x53\x66\x41\xa6\x9e\x1e\xcc\xe1\x5a\xd4\xa5\x1d\x82\xac\x88\x1a\x2a\x2d\x71\xba\xf1\xa6\x0b\x2e\xc9\xc8\x33\x2e\x2e\xf8\x53\x97\x0f\xd9\x45\x36\x0b\x52\x3e\x3b\x7c\xb8\x20\x68\x4e\xf6\xbd\xbf\xf5\x7c\xf3\x0b\x19\x7e\xf3\xb2\xd3\xb9\xe4\x57\x7f\xd5\xdf\xde\xcb\xe7\x17\x6f\xdf\xbd\x79\xff\x66\xbd\x36\x0c\x8c\x87\x86\x98\x9d\x28\x4b\x47\xf8\xc2\xe9\x19\xe6\xdc\x35\x0c\xb8\x21\xab\xd2\x38\x87\xe7\x64\xda\xb8\xd6\x01\xb7\x64\x5a\xe5\x9f\x91\x4a\x16\x9a\x37\xc2\x52\x7e\xae\x2d\x4d\x3c\xc2\x6f\xaf\x6b\x0e\x11\xf6\xce\xfd\xbb\x62\xed\xb3\xa5\xaa\x71\x5e\xb2\x5f\xaf\x61\x5d\xde\xe2\xc0\xbd\xee\x90\x5b\x29\xe7\x08\xaf\x77\x27\x49\xca\x26\xac\x48\xf0\x31\x43\xf4\x85\xd3\xeb\x0e\x0d\x6c\x32\xe1\x0b\x6f\xc8\x35\xbf\xd1\x39\xa2\x70\x5c\x6e\x74\xc2\x55\xb9\xcf\x0d\xef\xc9\x2b\x34\x02\xe3\x34\x58\x18\x18\x4e\xc9\x2b\x19\xd7\x09\x0c\xf1\x1e\xd2\xd0\xa6\xc5\x49\x75\xeb\xc8\x72\x20\xad\xf1\x4a\xe5\x22\x98\xbb\x4a\x46\x8c\x63\xf2\xc3\x74\x50\x06\x2a\xf6\x72\x79\xd7\x27\xa3\x39\x0f\x0b\x09\xb1\xe7\xf8\x7a\xc4\xee\x77\x7f\x5f\xf4\x6f\xff\xbe\xe8\x3f\x3c\x08\xfd\xc5\xc5\x38\xc8\x83\x8b\x0b\x7e\x6a\xf6\x56\xd5\xc2\xb3\x82\xf1\x18\xb1\x7a\x70\x23\x4c\xa8\x36\x45\x21\xd6\xe7\x7d\x68\x59\x7c\xd6\xa3\x94\x50\x2f\xf4\x3d\xdb\xc7\xc2\xc7\x45\x8e\xd7\xeb\x74\x8f\xa4\x9d\x4e\xbc\x47\x34\x0f\x9c\xa5\x30\x28\x2b\x78\xad\xcd\xd5\x96\x25\x6e\x33\x69\x6f\x8f\xea\x7b\x4c\xfc\xdd\x39\x7f\x63\x7b\xdf\x93\xf7\xcd\xbc\x8d\x07\x2c\x4c\x97\xe0\xf7\x9f\xe8\x23\x87\x10\xbb\xd3\xa1\x87\x24\x2c\x90\x26\x74\xf7\xbe\x95\x75\x15\x7c\x5f\xcb\xf5\xfc\x46\x90\x52\x39\x56\x10\xf2\x23\x46\xd5\xd1\xea\xdc\xbf\xba\x8c\x8d\x42\x92\xf2\x4e\xc2\xeb\x75\x45\x47\xb8\x5e\x57\x1a\x02\xfb\xb8\x4c\x92\x88\x06\x6c\x65\x0f\x87\xc6\xc5\x05\x17\x37\x17\x17\xc6\x1e\x21\xc2\xf1\x37\x21\x24\xc6\xc3\xc4\xdb\xb8\xe5\x9d\x0f\x4b\xbf\x74\x06\x5b\xb1\x0d\x9f\x5f\x1d\x5b\x34\xe2\x9d\xaa\xcd\xfa\xd6\xdd\x4f\x51\x01\x1d\x8a\xad\x13\x97\x3f\x03\xe6\x00\x4d\x87\x21\xda\xc8\xa0\xbd\xef\x11\xc5\xeb\x35\xca\x09\x85\x8b\x4e\xe7\x62\x37\x8c\x77\x73\xb6\x34\xa2\x6f\x79\xc6\xe6\xdd\xc1\x3d\xa7\xda\xfc\xac\xa9\x33\xd5\x63\xe5\x52\xaa\xe1\x3c\x5d\xdd\xe5\x64\x6f\x0f\x51\xd3\x30\x70\x31\xe2\x67\xb8\x14\xdf\x55\xb7\xac\xd8\xc0\x9c\xb9\x99\xdc\x28\x6a\x5c\xa9\x90\xb5\xe0\x3b\x86\x47\x16\xb9\x29\x9f\xe1\x56\xd8\xb4\x6c\x56\x91\x96\x53\x28\x97\xb1\xac\x22\xb1\x83\x9b\x17\x28\xc5\xc3\x54\x6d\x31\x9d\x68\x2f\x7d\xf9\x44\xd6\x77\x11\xeb\xf3\xef\x74\x78\x2a\x9e\x7a\xbb\x77\x45\x01\x7a\xc1\x31\x8d\x68\xde\xea\x32\x88\x63\x60\x8b\x16\x63\x78\x01\xb6\x5b\xc3\xea\x51\xbf\x8e\x6b\x4a\xf3\x96\x17\xda\xb5\x32\x6c\x04\x4e\xcb\x93\x1b\x8f\xfa\xe5\xf3\x6b\x7e\x66\x20\x39\x20\x55\xbd\xfc\x5c\x6e\xbc\x02\xc5\x43\x06\x5d\xee\xae\x9d\xd4\xdf\x5f\x7f\xb2\x5a\xe5\x06\x6e\x58\xf9\xd9\x67\xe8\x34\xfc\x75\x9c\x19\x6d\x3e\xc6\xaf\x3d\x6a\xab\x7a\x80\x9c\xaa\xb3\x14\xee\xd8\x3f\x76\x73\x7e\xc9\xa3\x80\x77\x0f\x1f\x1d\xcf\xaf\x83\xb7\x8c\x49\x4b\x9b\x20\x25\xcf\x38\xe5\x3b\x6a\x4a\xa4\x87\xf6\x7a\x8d\x52\x52\x9e\x61\x5b\xce\x30\xef\x2d\x92\x05\xc2\xee\x1b\xd5\xd2\x14\x1c\x0c\x36\xc6\xf5\x2a\x1f\x30\x74\xcd\xfa\x76\xd3\x43\x5b\x0d\x58\xee\xa5\xbe\xe7\x34\x9a\xd1\x1c\x17\x59\xec\x59\x7d\x6d\x00\xca\x15\xb5\x5a\xc9\xcd\xde\xd7\x9f\x30\xaa\x82\x31\x79\x86\x74\xad\x2c\x3e\xb4\x87\xea\xa4\x88\x42\xee\x63\x37\xf5\x62\x46\x16\x51\x63\xf2\xf6\xe1\x63\x72\xc7\x84\x19\xb7\xe5\x4e\x60\x1e\x2c\xd8\x2f\xf4\x7e\xbd\x7e\x87\x41\x88\x3b\x91\x55\xd4\x71\x6e\x9f\x4c\x2f\xd5\x3d\x35\x09\xc3\x37\x96\xdf\xde\x33\x00\x1b\xe5\xa6\x34\xdf\x28\xb4\xa5\x87\xab\x42\x62\xfa\xd6\x0b\x6d\x65\xed\xaa\x18\x5b\xf6\xf9\xb5\x1c\xd1\x6d\x1f\x74\x37\x65\xe3\x31\xd1\xbf\x59\x77\x6f\x95\x1e\xaa\x37\x25\xc2\xb8\x0d\xe1\x96\x36\xd4\xcb\xcb\x76\x70\x29\xf8\x02\x3e\xc2\x77\x04\xbd\x68\xe1\x57\xa6\xe4\xbf\xde\x70\x55\xdd\xe9\xe4\x9e\xed\x73\x47\x7a\xb6\x3f\xdc\x70\x80\x50\xda\x19\x13\xa6\x6e\x54\x61\xac\xf9\xc2\x5a\xde\xd2\x4f\x20\x93\xe6\x41\x82\x61\x49\x9c\x7d\x1b\x22\xe2\xf9\x83\x80\xa9\x25\xf2\xa2\x0e\xf5\x02\x7f\x67\x49\xae\x90\xba\x97\x03\x4b\x0c\x99\x17\xf8\x24\x3c\x22\x4e\xdf\xee\x74\x46\x95\xcb\xfd\xbe\xcd\xf7\x11\x3e\xa0\xa0\xd3\x19\x61\x25\xd8\x46\x9c\x82\x1d\xe1\x69\xc8\x72\x60\x4c\x32\xf6\x4d\x5d\x46\xe6\xc0\x34\x67\x87\x61\xa7\x13\xa9\x6b\x81\xcb\x81\x72\x59\x3f\xf2\x66\x3e\x5c\x13\xfe\x4e\x6b\x4e\x98\x7c\x9b\x0f\xe7\xae\x0d\x7b\x68\x3c\x5c\xa0\x31\x5c\x63\x37\x46\x11\x5c\x43\x8a\xb1\x68\x73\x40\x92\x81\x65\x05\x03\xf5\x9c\x2b\x93\x87\x83\x7b\x68\x35\x5c\xa0\x95\x28\xc1\x5a\x24\x0b\x8d\x92\x38\x0f\xe3\x25\xdd\xa5\xc5\xb8\xd3\x19\x8b\x79\x76\x8d\x21\x12\xbf\xe6\x55\xbc\xbc\xa8\x40\x39\x66\x1a\x0b\x7c\x24\xc7\x95\x1b\xc3\x8f\xc3\x17\xa5\x58\x72\x3f\x82\x8d\xe1\xfe\x83\x6e\x90\xaa\xe5\x71\xa9\x17\x59\xbc\x54\x2c\xc7\x21\x2d\xd5\xd6\xd8\xcb\x7d\x42\xbd\x8f\x26\x53\x5b\xf5\x2b\x2c\xca\xa2\xfb\x68\x3a\x02\xf8\x23\xb3\xe9\x38\x70\x5e\xae\x3c\xa1\xf7\xd1\x27\xf1\xc6\x11\x8d\xf4\xef\x9b\x96\xd7\xb6\x47\x41\x46\xd9\xda\xa4\xec\x39\xe9\x06\x8b\x3b\xd8\xdd\x75\x9a\xe9\xc0\x5f\xa4\x8a\xcc\x7e\x6b\x26\xa4\x4c\xa7\x16\x10\x07\xdb\x21\x20\xf5\xfa\x7e\x75\x32\x5e\x9e\x54\xa6\xb8\x40\x2f\xf8\x7c\x82\x10\x17\x9a\xdd\xf2\x6d\x35\x1f\x98\x8a\x34\xbc\x55\x6a\x87\x6b\x18\xe5\xd4\x20\x24\x59\xaf\x73\x42\x82\x5a\x4c\x75\x55\x4e\xf3\xdb\xc5\x55\x60\xed\x4d\x44\xbe\x5e\xd7\xf6\x81\xb0\xe6\xaf\xec\xbb\x2d\x47\xe0\xff\x75\x9c\x30\x6d\xb8\xa0\xca\x65\x51\x64\xc4\xf4\x86\xa6\x06\x86\xb4\x4c\x49\xa2\x31\x4b\xd9\xd1\x5d\xb0\x30\x71\xbc\x71\xf8\x4e\x79\x40\x26\x0a\x94\xd8\xf2\xea\x6d\x16\x7e\xa4\xc4\x06\xf9\x3a\x7a\x1e\xb2\x5c\x71\xa5\x35\x1a\xd3\x4c\x2e\xdc\xac\xc6\x4c\x85\x1d\x92\xaf\x79\xae\xe8\x6a\x1e\x2c\xb8\x3d\x76\x1a\x2c\x20\x57\xd7\x8a\x83\x2c\x0b\xa7\x31\xca\x31\xd0\x43\x47\x25\x0a\xcc\x65\x85\x58\x0f\xf3\xcd\xc5\xb9\x58\x33\xaf\xe8\x4a\x55\xcf\x2f\x85\x12\x71\xcf\x95\xcd\x33\xad\x6e\x2f\x55\x9f\x5a\xf4\xef\xf2\xd1\x10\x8d\xf3\x74\xa5\xef\x9e\x64\xdb\xb3\x96\x1b\x59\xb4\xf7\xea\xdd\xf7\xa7\xac\x5d\xa0\xed\x9e\xf4\x2e\xe6\x41\x7a\xf5\x9c\xc1\x1c\x67\xdf\x67\x74\x5c\x5b\x31\xd8\xb0\x6a\xdd\xd4\xe9\x70\x73\x94\xbf\x80\x90\x19\xa2\x2f\x55\x67\xc8\x9e\xe5\x36\x2b\xb0\x7f\x59\x83\x78\x7c\x04\x60\xff\xf2\xf2\xa9\xaf\x84\x8b\x00\x51\xed\xa7\x7c\x1f\xa9\xaa\x0c\xea\x15\x6b\x5f\xbc\x3c\xd6\xf3\x09\x5b\xbf\xf5\x56\x89\xa1\xda\x58\xfd\x62\xe5\xa2\x81\x8f\xda\x7a\x2d\x1c\xf0\xf5\x4e\x8f\x7f\xba\xf8\xe1\xf8\xd5\xf7\xcf\x77\x74\x06\x50\x86\xff\x4e\x75\x89\x93\x7a\x8d\xe9\xe5\xf3\x63\x84\xa0\x17\xd3\xdb\x1c\xe1\xc1\x5e\xd6\x1b\x27\x31\x1d\x54\x49\xa2\xde\x25\x11\x7e\x04\xe4\xe0\x33\xb1\xa5\x7e\x32\xf1\x56\x3e\x91\x94\x15\x33\x4d\x60\xc9\xaf\x01\x2f\x31\xc4\x43\xc4\x65\xf7\x12\x96\xac\x87\x62\xec\xea\x5d\xbd\x84\x98\x2c\xc1\x26\x24\xb1\xac\xcd\x47\xe6\xc9\x35\x4d\x27\x51\x72\x63\xe0\x42\xef\xad\x58\x9b\x20\xf5\x8a\xc3\x8f\xb4\xde\x91\xf7\xe9\xbc\xb2\x90\x50\xba\x78\x23\x70\x4d\x31\x69\x70\x16\x9b\x38\xb9\x7c\x1a\x55\xab\xa3\xa1\x6c\xc5\xea\x4a\x4f\x5b\x2d\x6a\x27\x74\x88\x92\xda\x44\xda\xac\x2d\x11\x1c\xa2\x62\xbe\xe8\x7d\x4b\x21\x21\xca\xb1\x43\x8c\x6b\x9c\x34\x6c\x32\x5a\x02\x49\x83\x31\xeb\x03\x90\xd4\xf8\x30\x01\xd3\x2c\xfb\xb6\xea\xe5\xa3\x8a\xe9\xa4\x07\x0f\x15\x10\x8b\x93\xd8\xe8\x0e\x96\xb5\xe9\x50\x5b\xab\x94\xf5\x35\xad\xf5\xb5\x48\xf7\x72\x7f\x88\x36\x44\x5c\x99\xa7\x4b\xbf\x4a\xd2\xa8\x0e\x92\x45\x74\x49\x58\x13\x8e\x72\xb6\xd2\xaa\x64\x4d\x5c\x96\x3a\xbb\x78\xe5\x66\x59\x55\x37\x78\xe2\x8d\xbf\x7c\xc0\xef\xd7\x5b\x3b\x09\xe3\xf1\x03\x39\x4c\x35\x78\x28\xb9\xa8\x34\x74\xe3\x87\xaa\xca\x12\x9f\xd2\xf8\xe3\x4f\xdb\x93\xf1\x36\x5e\x8f\x71\x1b\x66\xd9\x09\xb1\xe8\x84\x98\x0b\xcb\xd8\x4b\x7d\x36\x87\x85\xe0\x63\x69\x3c\x83\x4f\x66\x26\x1a\xdd\x98\x8f\x9b\x4a\xd3\xfb\x56\x8e\x09\xcb\x62\x60\x3a\x9e\x96\x71\x12\xd8\x1e\xb2\xc4\xb1\x61\xb1\x2c\x88\xdb\x66\x63\xbb\xcd\xf7\x00\x84\xa4\xc1\x10\x52\x7c\x16\x90\x54\xd8\x37\xe4\xe7\x16\xd7\xe6\xb5\x42\x5c\x94\x6e\x99\x10\x7c\x75\x2b\x7d\x2c\x4a\xee\x97\x4b\x1e\xeb\xe9\x3b\x26\x8f\xdd\x3d\x47\x3e\xea\x69\xb2\x22\x76\x25\x80\x72\xd2\x27\x59\xaa\x80\xec\xb7\x10\x9d\xfd\x5d\x88\xe6\x34\xdf\x43\xea\xf2\xb7\x90\xba\xfc\x3b\x91\x2a\x38\x6a\x3b\xb1\x3a\xab\x5d\xd1\xd6\x88\x06\x4c\x34\x67\xba\x50\x6a\x4c\x55\x8e\x71\x5b\xc1\xe5\x3d\x05\x19\xdd\x61\x6b\x49\xd1\x27\xf1\xe7\x75\x24\xab\x2e\xb9\xa7\x3a\xe9\x5d\xb7\xe1\xbe\x5a\x99\x09\x7b\x84\x04\x3c\xca\x14\x12\x7b\x36\xfa\x69\x9e\x86\x73\x10\x0f\xb0\x34\x78\x52\x35\x61\xe5\x1b\x21\x5e\x0a\x62\x2e\x1e\xea\x35\xe7\xc9\x9f\xcf\xde\xbc\x6e\xbf\x24\xcd\xa8\x16\x16\x5f\xa5\xb4\x82\x7c\x9b\xdf\xa8\xd6\x4b\x4d\xd3\x27\xfc\x71\x9c\xa8\x51\x8c\x65\x25\x36\x78\xd5\x25\x77\x34\x69\xd8\x0c\x0d\x51\x51\x61\x18\xca\x71\x91\xac\x2f\x1d\x60\x6a\x12\x79\xd7\x95\xbb\xc9\xc3\xa6\xe1\x1a\xa6\xf4\x39\x0e\x28\x25\x29\x13\x83\x22\x78\x82\xb1\x7b\xb8\x5b\x79\xe5\xa7\x45\x81\x51\x42\xea\x17\x5f\x87\xb9\x5b\x4b\x60\x9d\xc5\xc3\xb9\xb9\x77\x05\xfe\xd4\x8d\xd7\x98\x24\x78\x18\x57\xdb\x81\x39\x50\xec\xc6\xcd\x4b\xaf\x9f\xb8\xb3\xa8\xdb\x2c\x9f\xeb\x36\xf2\x5f\xc6\x9a\x2b\x5d\x48\x3a\xe2\x21\x70\xbf\xcf\x2f\x5f\xa3\xbe\xee\x0b\x3d\xab\x6f\x0f\xf7\x68\x3c\x4a\xc6\x74\x98\xf7\x44\x57\x0d\x43\x66\x79\x8b\xc4\xef\xdf\xbd\x3c\x49\xe6\x8b\x24\xa6\x71\xce\x53\x1b\x36\x8d\xf4\x68\x5a\xdd\xf6\x1e\x96\x7c\xc0\x6f\xd1\xe7\x43\xc3\x70\xa9\xbc\xd8\x9d\x9b\x8e\x66\x8f\x45\xed\x87\x2c\x12\xa7\x0a\x56\x24\x1d\x11\xbd\xe0\x4e\x16\x64\xd4\x22\x5e\x99\xe1\x6e\x9e\xe6\xf3\xb3\xfc\x9c\xec\x9f\x7b\xe8\x7c\xdc\xc5\xe7\xbe\x3a\x54\xa6\x18\x28\xd1\x22\x37\x9f\x7b\xe7\xe3\x2e\xbf\x38\x61\x18\x18\xf2\x61\xb5\xe5\x13\x7b\x94\x19\x46\xec\x0f\x8f\x27\x1c\xf3\xd0\xdc\x9e\xe3\xfb\x24\x65\x8b\x3e\xf5\x49\x5a\x88\x08\x45\x97\x69\x30\xba\xa2\xf9\x7d\x84\xa0\x73\xef\xdc\xc7\xf7\x50\x51\x91\x50\xee\xf2\xb3\x3a\x86\xbc\x22\xcf\x2f\x2f\xdd\x78\xd4\x07\x55\xbf\x97\xfa\x25\x21\x2a\xfe\x51\xeb\xcd\x06\x7c\x57\x22\x4d\x19\xd2\xb4\x8e\x94\x7d\x42\x8e\x5d\x9e\x9c\x17\x45\x81\x72\x92\xa0\x3b\xad\xbf\x5d\x23\x4e\x62\x6a\x14\x90\x63\x0c\x61\xab\x1f\x5e\x79\xe4\xb3\xe1\x43\x77\x18\xba\xe2\x15\x2e\xbf\xdc\x55\xb5\xf9\x6f\xde\xf0\xff\xeb\xf8\xbc\xd1\x78\x88\x94\x4b\x39\xa3\x63\xb4\xb8\x3f\xd7\xf8\xab\xea\x33\x73\x7f\x0a\xc6\xae\x81\x55\x49\x62\x60\xee\xc7\x44\xa9\xf0\x09\xd1\xe2\xfd\xa9\x58\x7f\xc4\x50\xdb\x95\x3b\xda\x6b\x9a\x44\x78\x02\x0d\x98\x71\x92\xa2\x00\xc5\x18\x12\xbe\x33\x55\xf3\xea\x1f\x4a\x37\xee\xac\x11\xe3\xe5\x88\xb6\x3a\xbb\x08\x35\xc9\xfb\xad\x38\x98\xe4\xab\x49\xcd\x33\x07\x4b\xd8\xab\x7b\xc5\x4d\xf1\x90\xeb\xf1\xfa\x6b\x8a\x76\x77\xba\x5c\x86\x4a\x4a\xdc\x86\xc3\x8f\x21\x45\x75\xc7\xf3\xf7\x79\x9e\x2f\xdd\xdc\x5b\xf2\x57\x8e\x0b\xbc\x2d\x2c\x76\xee\x71\xb5\x8c\x1f\xe3\xf1\x53\x4e\x92\x02\x2d\xa0\x85\x13\x30\x76\xc3\x22\xef\xd1\x5b\x11\x50\x62\x59\xc6\xbf\x89\x20\xaf\xbc\x97\x34\xb6\xf1\xf7\x98\x8c\x10\x6c\x27\xe4\x0d\x7f\x86\xcd\xa5\x10\xfb\xb5\x85\x15\x79\xe3\x3a\x1d\x24\xba\xa3\xf6\x10\x41\x79\x8e\xd4\x9b\xf2\xf9\x92\x44\xde\x0a\xaa\x9d\xf5\x92\x74\xe8\x65\xfc\x30\x09\x0c\xcf\x80\x18\x0c\xdf\xf0\xcb\x10\xdb\xae\x9e\x97\xa1\x98\xff\xf4\x09\xfb\x9d\x02\xc5\x15\xe0\xa7\x64\x47\xae\xc7\xd4\x50\x15\x0b\xdc\x5a\x1d\xed\x98\xb7\x09\x83\x07\xe1\x6c\xc3\xc8\x44\x42\xb5\xac\x0f\x75\x1e\xa3\x92\xc5\xc4\x18\x34\xf8\x27\x56\xe1\x1d\xa8\x74\xe3\x52\x3d\x60\xab\x85\x15\x95\xc4\xa8\xc4\x5d\xd6\x71\x39\xb7\xe7\xea\xac\x1f\x62\xb5\x09\xe1\x55\x7b\xe0\x72\x51\xd9\x22\x37\x94\xe0\xa3\x9d\x4e\x22\xb6\xfb\x53\x36\x2a\xa0\x9e\x2c\x63\x36\xcd\x13\xd9\xd4\x8e\x51\xee\x56\x0b\x12\x4c\x83\x18\x66\x86\x42\xe0\x73\x63\x6b\x20\xf6\x32\x8a\xc3\x91\x5d\xe0\x0a\x17\x7f\x96\x20\xd9\xff\xfb\x34\x6a\x3d\xba\xba\x5b\xa6\x91\x5b\x8a\xbf\xa1\x81\x3d\xdb\x5f\xaf\x0d\x03\x7e\x5d\xd2\x74\xe5\x46\x88\x2d\xaf\xac\xfa\x4f\x3d\x43\xb9\xff\x0d\x4f\xdb\x22\xae\xdd\x73\xda\xfb\x12\xe1\xae\xbf\x3f\x85\x96\x1b\x20\x8f\x0c\x53\xbc\x1f\x3b\x49\xc6\xf4\x38\x47\x36\xae\x5e\x3f\x39\x4f\xd9\xc7\xf7\x8b\x85\xf2\xaf\x50\xb4\x39\xea\x6e\x79\x32\x22\x59\x68\x4a\x73\xed\xea\x94\x50\x6e\xb2\x6a\x85\xd9\xe6\xa8\x1c\x92\x4d\x88\x85\xcc\x7b\x99\x3d\x2f\x5f\xfc\xb4\x75\x8a\xb8\xd7\x10\x4e\xd0\x9e\x44\x21\x36\x25\x25\xeb\xed\x39\x3b\x95\x3e\x2e\x1b\x69\x04\x97\x23\x11\xd7\x8a\x7a\x4f\x7c\x62\x8c\xa9\x01\x22\x12\x75\x6b\x2b\x5e\x07\x73\xca\xe6\x85\x67\xfb\x15\xd2\xc6\x73\x3e\x7b\x90\x1e\x3a\x36\xf7\x64\x90\x7b\xc6\x85\x61\x4a\x67\xe7\x93\x34\x99\x9f\xc8\xae\x46\x29\xf6\x09\x77\x14\x61\xd8\x4e\xff\xe0\xf1\x93\xa7\x5f\x7d\xfd\x8d\x16\xde\xa4\xad\xd6\xe6\x04\x6c\x0a\xf0\x72\x4a\xd7\x9b\x1b\x57\x11\x6e\x58\x63\xc7\x74\x32\x9d\x85\x1f\xae\xa2\x79\x9c\x2c\x7e\x4d\xb3\xdc\x50\xfc\xb9\x65\x75\xe6\x5a\x08\x2d\x30\xb4\x97\xae\x7a\x8a\x8b\x8c\x5a\xbf\xa3\xbb\x02\x62\x5c\x11\x56\x5d\x23\x51\x14\x16\x05\xc2\xc3\x5a\x99\x86\xb7\xb3\xea\xd6\x55\xd0\xb8\x3c\x5e\x8a\x16\xda\xee\xa5\xa5\x86\x75\x77\x24\x7c\xb6\x5c\x52\xee\xb6\x85\x8e\x77\x6f\xc2\x7c\xc6\x05\xe5\x6e\x92\xee\x56\x77\x59\x4b\x49\x28\x8a\xcb\x9b\x4e\xb0\x24\xce\x60\x79\xd8\x7c\xb0\x3a\x58\x9a\x66\x45\x62\xb4\x1b\xc6\xbb\xa9\xec\x0d\x54\x3d\x59\x5d\xfa\x18\x87\xca\x9c\x8c\x98\x35\x95\x79\x91\x4f\x52\x2f\xf2\xe5\xb6\xd6\x5d\xc0\x15\x87\x9d\xca\xaf\xaa\x3d\x18\x1d\x06\xaa\x96\x91\x69\xe2\x44\x21\x08\xbc\x91\x2f\x70\xb0\x5f\x0c\x0d\xff\x5b\x1d\x73\x66\x9f\x9a\xa4\xff\x85\x6c\x24\xfd\xce\xfb\x23\x2f\xb0\x26\xb6\xf5\x8d\x7f\xd7\x2f\x0c\x30\xa6\xa1\x81\xe5\x9e\x74\xf9\x74\x40\x07\xc1\xa6\x04\xaa\x9d\x10\x72\xd7\x5d\xd5\xdd\xa8\x31\xdd\x14\xbd\xd5\x34\xd4\x6e\x4d\x85\x13\xee\x1b\xaf\xbc\x49\xa7\xfa\x41\x44\xf3\x76\x76\x94\x37\xb5\xd2\x69\x34\xe6\xfe\x59\xa5\x49\x55\x32\x65\xe3\x72\xae\x54\xf2\x05\x6b\x78\x3e\x04\x28\xc5\xc0\x54\x5c\xdc\x3c\xb0\xba\x9f\x64\x45\x69\xac\x3f\x4d\xd6\x1c\x84\xa4\xc4\x69\xfa\x68\xc9\x09\xa2\xcc\xc4\x87\x54\x93\x3b\x65\x09\x6d\x97\xa0\x7d\xe9\x6a\x73\xf7\xbb\x65\x1e\x3f\x97\x8f\xe0\x77\xff\x43\x2c\x74\xe3\xef\xdf\xbd\xfc\x0f\xe9\xbc\x37\x99\x70\x3e\xdb\xfd\x0f\x81\xeb\x3f\x60\x77\x9a\xe4\xbb\xff\x61\x98\xac\x12\xd3\xf8\x0f\x03\xef\xe8\x37\xd9\x5a\x6d\x0c\xb8\xaf\x47\x36\x9f\x42\x37\xde\x6f\x1b\x8f\x5e\x3c\x7f\xf4\xe2\x85\xe1\x1a\xff\xef\x7f\xff\xaf\xff\xf7\xbf\xff\x97\x01\xc6\xa3\x17\x2f\x1e\xbd\x78\x5e\xa5\xb0\x35\x21\x51\xc6\xe1\x20\x1d\x88\xe1\xc8\xbd\xd4\xb3\x7d\x9f\xb4\xd4\xce\x8f\xe8\x2b\xe6\x11\x42\x3c\x13\xc9\x3b\xf1\x9e\x88\xfa\xc8\x54\x63\x89\x22\xc6\x85\x56\x43\x91\x7b\xc6\xa3\x93\x3e\x53\x4c\x59\xed\xda\xa5\x83\xba\xf9\x00\x01\xb1\x07\xc1\x61\xe9\xd7\x2d\x50\x9e\x77\x96\x24\xf4\x02\x7f\x47\xef\x2d\x6d\x96\x2c\xf9\xb3\x10\xc8\x99\x58\x2b\x4f\xff\xf9\x8d\xd0\xa2\x00\xb8\x5f\xf2\xa4\x3d\x66\x88\xe8\x41\x45\xdf\xbe\x84\x90\xf4\xbb\x31\x24\x24\xb4\x1c\x6a\x3d\xd5\x67\x9b\xba\xfb\x74\x6b\xcb\x13\x81\x95\xfa\x71\xeb\xa8\x14\x87\x3f\x38\x97\xbb\xe0\xc4\x30\x74\xc6\xaf\xed\x1a\x06\x45\x50\x4d\x1c\xa2\xed\x1a\x93\x3b\x4d\xda\xb8\x01\xcc\x93\x6b\xfa\x3e\x69\x75\xba\x69\x12\xe3\xd4\x30\x51\x83\xaa\x5b\x87\x98\x94\x8b\x0b\x95\x55\xd2\xb9\x72\x88\x99\xe3\x02\x46\x51\x92\xd1\xb7\x41\x3e\xd3\xdf\x27\x2b\xff\x8d\x12\x89\x3a\x70\xad\x1a\x77\xab\x76\xf7\x57\x65\x73\x55\x8a\x49\x8c\x5f\x0c\x5c\x40\x14\xc6\xf7\x10\xfb\xaa\x22\x76\x93\x46\x49\xda\xaf\xcb\x60\x9c\x06\x79\x38\x3a\x59\xa6\x1b\x0d\x97\x7b\x1c\x0a\xdf\x5f\x0d\x73\xd7\xa4\x1c\xcb\xae\x99\xeb\xd8\x18\xfe\x74\x03\x7f\x8c\x0b\xb8\xa4\x1f\x43\x9a\x6e\x43\x0e\x21\x24\x5a\x05\x27\x9b\x15\xec\x9a\xa9\xfc\x1b\x37\x2b\x0c\x37\x2a\x4c\x70\x01\x41\x3a\xda\xac\x88\x57\x43\x89\x49\x21\x27\x66\x0e\x29\x31\x53\x08\x89\x19\x42\x42\xcc\x44\xf7\xbd\x75\x71\xeb\x40\x56\x8e\x1e\x2c\x49\x6a\x51\x88\x48\x68\xe5\x30\x22\x81\x45\x61\x42\x32\x2b\x87\x19\x19\x75\x47\xe6\xa4\x3b\x61\x0b\x78\x72\x68\x6f\x9e\x03\xc7\x74\x1a\xe4\xe1\x35\xdd\x4d\x83\x71\xb8\xcc\xdc\x5d\xc3\x14\xde\xa3\xa5\x3d\xa4\x6a\xc3\x6d\xac\xe5\x90\x8d\xc1\xca\x95\x97\x82\x09\x9a\x1d\xf1\xb0\xd0\xe1\x04\x95\xfe\x3c\x26\xdd\xa5\x15\x75\x47\x98\xe7\x74\x3a\x89\xf2\xb5\x9e\x5a\x01\x2c\x48\x68\x65\x30\x27\xcb\xee\xd2\x8c\xba\x11\x5c\x93\x71\x77\x6c\x2e\xba\x0b\x58\x89\x49\x98\xfd\x9a\xe6\x68\x8e\x61\xaa\x7d\xce\x30\x5c\x92\x44\x84\x45\xcd\x83\x18\xa1\xd8\x12\x95\x8d\x92\x0c\xa1\xb9\x39\xb3\xae\xf1\x3e\xea\x77\x57\xdd\x29\xc6\xdc\xb5\xf1\x05\xb9\xdc\x9f\xc2\x0d\xb9\xdc\x5f\xed\x94\x74\x5d\x58\x8e\xa2\x09\xd5\xd8\x92\x9a\x17\xdd\x91\x6a\xa3\x79\xd1\x9d\x94\x8e\x9d\x4d\x62\x1c\x1b\x66\xc2\xb3\xd8\xbf\x36\xd8\x7c\xf8\xd1\xa4\x3b\x3e\x1a\x75\x17\xb8\xc1\x06\xd4\xbc\xe9\x2e\x37\x7a\xcb\xbc\xe9\x46\xca\x1d\x65\xeb\x74\x68\xe9\x60\xce\x3b\x4d\xce\x91\x91\x20\x4b\xde\xd9\x11\x4e\x26\x10\x63\x21\x2c\xfa\x87\x75\x49\x80\x61\xa4\xc2\xc8\x66\x61\xcc\xbe\x27\x84\x9a\x11\xcc\x48\x6e\x8e\x60\x4c\x9c\xbf\x2d\x61\x41\x96\xc3\xc0\xca\xdc\xcc\x0a\x78\x6c\xab\x07\xf2\x4d\x8a\x77\x1a\x4c\x33\xd4\x99\x66\xc2\x1b\x32\x73\x51\x23\xf4\xf3\xad\x63\x4d\x44\xe7\xaf\xd7\x8d\xac\x95\x63\xcd\x44\x16\x6e\x0c\x8c\x44\x86\x21\xed\x74\xd0\xe2\xd0\x66\xff\x92\xc5\xa3\xd0\x0c\x31\x2c\x8e\x92\xa1\x3e\x46\x62\x62\xa6\x7c\x8c\x1c\x30\xcc\xb1\xe8\x51\x6a\x45\xaa\x6f\x2d\x36\xc4\xdb\x21\xcb\xc1\x98\x34\x07\x63\x86\xdd\xc5\x06\xdf\x34\x10\x71\xa6\x58\x1c\x91\x58\x14\x6e\xe2\xa4\x66\x5a\x0d\x4f\x86\x37\x39\x44\x1b\xad\x0c\x63\x8c\x0b\x48\xe9\x28\xbf\x4f\xfe\xfd\x16\xe1\x6f\x1a\x33\x29\xc4\xae\xa5\x10\x9b\x19\xa6\x95\x9a\xc6\x2f\x46\x01\xca\xd6\x6e\x71\x5b\x21\x70\x14\x85\xf4\x91\x92\x41\x6b\xec\xdb\xcd\x72\xb4\x28\x60\x54\x3a\xfa\x29\x7d\xfe\xe4\x41\xdc\x87\x19\x51\x1d\x02\xe3\xea\x19\xd2\xa2\x7a\x86\x34\x27\xaa\x4b\xe0\xba\x12\x06\xb0\x22\x0e\xb5\x9c\xbe\x12\x10\x6f\x5f\xc2\x25\x99\xee\xf7\xe1\x82\xf4\xbb\xd3\x6a\xc5\xbe\xd1\x35\xfc\x23\xe2\x0c\x2f\x5d\x7a\x48\x2c\x67\x68\x5d\x0a\x9f\x57\x01\xeb\x6b\xaa\x29\xa7\xcf\x6b\xdb\x2c\x61\x1c\xd3\xf4\x1d\x67\xfb\x0a\xe4\xb6\x06\x92\x2c\xf3\x4d\x90\xb3\x1a\x48\x96\x07\x69\x7e\x1c\x4f\x23\xed\x18\xe3\x4d\x0d\x82\xc6\xe3\x46\xfe\x71\xf3\x41\xed\x22\x68\x82\x5c\xe9\x4b\x16\x04\xa5\x73\x21\x2b\x85\x25\xc9\xad\x18\x22\x82\x82\x61\xe2\x5a\x09\xde\xbf\x46\x59\x37\x33\x97\xdd\x25\x13\x0a\x51\x77\x09\x13\x62\x45\xdd\x0c\x66\x84\x9a\x23\x58\x90\xdc\x9c\xc0\x9c\xa4\xe6\x08\x56\x24\x36\x27\x30\x25\x68\x66\xce\xf1\x7e\x1f\x2e\x09\x5a\x98\x2b\xcc\xfb\x76\x6e\xcd\xe0\x86\xac\xac\x05\x3c\x27\x17\xdd\x0b\xf3\xa6\x7b\x03\xb7\x24\xb4\x12\x38\x23\xb3\xee\xca\x9a\x77\x17\xf0\x86\xa0\x9b\x43\x9b\x47\x00\xc7\xdd\x6b\x34\x46\x36\xdc\x76\x6f\xbb\xcf\xad\xb3\xee\x19\xc6\x70\x4c\xd0\x59\xf7\xc6\xba\xe8\xbe\xc1\xfb\xcf\xe1\x8a\x20\xeb\xac\x7b\x61\xdd\x88\xcf\xf7\x3c\xd3\x94\x99\xa7\x22\xd3\x94\x99\x27\xe4\xd8\x9a\xc2\x3b\x72\x65\x5d\xc2\x5b\xf2\xde\x9a\xc2\x07\x72\x6a\x5d\x2a\xc5\xfe\xa4\x7b\x62\xbe\xeb\xbe\x3b\x7a\xdb\x7d\x6b\x7e\xe8\x7e\xe0\xde\xc1\xde\xc3\x15\x39\xc5\x70\x37\xba\x75\x8f\x61\xb4\x72\xaf\xe0\xd6\x76\x5c\x6b\x04\x2b\xf6\x67\x02\xb7\x8e\xe3\x1e\x77\x51\xb8\x7f\x6b\x39\x18\x56\x8e\xe3\x5e\xa9\xaf\x82\xdb\x6b\xef\x37\x0f\xc4\x9f\x43\x4e\x6e\x21\x25\x11\xe2\x37\x6c\x45\xf8\x3d\x72\x06\x09\x79\x03\x01\x39\x96\xfe\x86\x2a\x16\x1c\xcb\x92\x11\x8c\xe1\x39\xdc\x12\xb3\xbc\x98\x3a\x0b\x33\xcd\x5b\x30\x9c\x11\x33\xdf\x92\xf5\x86\x84\xed\x39\xd6\x25\x1c\x93\x64\x6b\xde\x7b\x32\x42\xc7\xd6\x1b\x0c\xa7\xe4\xf8\xe8\xcd\x8e\xf0\x62\x84\x32\x12\x91\x25\xc2\x18\xce\x0e\x6f\x3b\x1d\x34\x26\x67\x70\x46\x6e\xe1\x96\x8c\x31\x9c\x1d\xad\xd8\x2a\xfe\xfe\xe8\xc2\x5a\xe1\xac\x27\x34\x4f\x74\xd6\x9d\xa1\x37\x18\xce\xba\x73\xf4\x06\x63\xc8\x7a\x41\x3a\x42\x6c\x15\x3c\x83\x37\x70\x0c\x7b\xa7\x18\x6e\x8f\x56\xdc\xe1\xb3\x2c\x71\xdb\x9d\xa1\x63\x0c\xb7\xdd\x39\x3a\xae\x95\xb8\x85\x63\x78\x03\xa7\x58\xe8\x0e\xbc\x67\x4e\xe0\x1d\xbc\x25\x6f\xe0\x03\x39\x86\x67\xe4\x0d\xbc\x26\xc7\xf0\x92\xbc\x87\x57\xe4\x3d\xbc\x20\x41\x7b\xeb\xf6\xfb\xf0\x91\xbc\xe0\x95\xc6\x43\x33\x6e\x07\x72\xaf\xd1\x6d\xf7\xd6\x14\x9c\xf7\x1d\x59\xa0\x11\x3a\xb3\x6e\x59\x59\x33\x6d\x2f\x81\xe1\x5b\xf2\x1d\x7c\x4f\xbe\x63\x9d\xf5\xf1\x68\x25\xc6\xee\x47\x72\x83\x3e\xee\xb3\xc6\xbc\xc0\x18\x7e\xe5\x5f\x67\xe2\x6b\x80\x5e\x5a\xa4\xdf\xfd\x11\x1f\xad\x86\xe8\x99\x49\x7e\xec\x92\xd3\xa1\xe3\x5a\x0e\xbc\xb6\xc8\x8f\xd8\x45\x2f\x89\x0d\xcf\xc8\x6b\x82\xde\x98\xc7\x5c\x2b\x41\xaf\x58\x81\x5f\x79\x81\xb7\x26\xf9\xb5\x2c\xf0\xc1\x22\xbf\x62\x17\xbd\x22\x36\xbc\x25\x1f\xca\x02\x9c\x11\x7f\x20\x6c\x0c\xde\x62\xf8\x99\xb0\x8a\xdf\x62\xf8\x13\x61\x7d\xfc\x1a\xc3\x5f\x08\x23\xec\x35\xd7\xe4\xbe\x53\x14\x7f\x01\x7f\xe5\x25\x3e\x60\xf8\x89\x97\xf8\x80\xe1\x17\x5e\xe2\x19\x86\x3f\xf3\x12\xcf\x78\x89\xf7\x87\xd3\x4e\x07\x7d\xd1\xf4\x5a\x29\x65\x0a\x64\xca\x00\xfb\xc5\xfa\x01\x22\xf2\x67\xeb\x67\x18\x91\x3f\x59\x7f\x85\x09\xf9\x8b\xf5\x13\xcc\x08\x53\xf3\x46\x5d\x11\x10\x1a\xcd\xba\xb3\xc3\x95\xda\xec\xf3\x7e\x30\xd1\x8c\xa0\x51\x17\xfd\x6c\xfd\x84\xad\x49\x17\xfd\x60\xfd\x15\xe3\xfd\x19\xee\x2e\xe1\x67\x73\xd6\x8d\xfc\x02\x29\x17\x8d\x94\x92\x1f\xac\x2f\x3c\xdb\x87\x9c\x92\x9f\xad\x2f\xf8\x75\x6e\x4a\xfe\x2a\xd2\x62\x4a\x7e\x12\x69\x21\x25\xce\xfe\x1c\x21\xf4\x9c\x20\x4a\xbb\x29\x35\x73\xda\x8d\x29\xde\x47\xd7\xec\x9b\xf2\xef\x9c\x32\xc9\x93\xf2\xec\x98\x67\x63\x7c\xe4\x0c\x6d\xf7\xf9\xa1\xe5\x0c\xa7\x6e\xa5\x36\x3e\x17\x8a\x62\x42\xc9\x35\x62\x35\x75\xd9\x3f\x26\xab\xa9\xfb\x05\xbf\x94\xf9\x2d\x59\xa0\xef\x00\xdd\x5a\x09\xab\x23\xa4\x96\x83\x31\x7c\x2f\x12\xcf\x54\xa2\xe9\x60\x5c\x14\xaf\x8e\x56\xc3\xef\xd9\xa0\x9e\x90\x2b\xf4\x0b\xfc\x19\x7e\x80\x9f\xe1\x0c\xbe\x87\x53\xcc\xa4\x16\xfa\x2b\xfc\x04\x7f\x82\xbf\xa8\xa4\x72\xaa\x9c\xf4\x46\xb7\xe6\x49\xef\xd6\x76\xe0\xa4\x37\x5a\x99\x27\xbd\x95\xed\x60\xf8\xfe\xf0\xbb\xa1\x98\x36\x0c\x80\x67\xc1\xf7\x30\x41\x3c\x1b\x38\x3c\x86\x09\x7a\xc7\x3f\xdf\x89\xcf\xbd\x53\xec\xa2\x07\x14\x3a\xe9\xad\x1c\xfe\xe9\x88\x42\xb5\x19\xcd\xb2\x05\x19\x1c\x46\x10\xe7\xc8\xca\x46\x2b\xf3\x1d\xcf\x78\xc7\x32\xde\x35\x31\xb0\x54\x96\x25\x6a\x55\x90\x65\xe9\x3a\xa9\x98\x13\x2b\x7b\xe1\x07\xf8\xb9\x4e\xc6\x5b\xf8\xc0\x81\xdc\x3a\x08\x97\x33\x2f\x8f\x56\xc3\x6f\x55\x57\xb3\x3e\x65\x7d\x7b\x0b\xd6\xb7\xaa\xaf\x59\xd7\xb3\x21\x50\x69\x59\x4f\x98\xa5\xdb\x3a\xfb\xdb\x96\xce\xfe\xf6\xb7\x74\x76\x4b\xa1\x7b\x3a\xfb\xf6\x37\x74\x76\x4b\x5f\x7f\xfb\xa0\xbe\xd6\xab\x7d\x0d\xcf\xe0\x94\x25\xc9\x6e\xf9\x13\xfc\x45\x9a\x26\x65\x6f\xdb\x60\x73\x01\x91\xf5\xca\xad\x02\x84\x21\x2a\xcf\xcc\xc4\xca\x17\x99\x86\xb1\x5e\xf3\xc8\x0d\x6a\x37\xaf\x37\xa2\x71\x9e\x26\xe1\xb8\xb9\x76\xa6\x04\x6d\x5b\xfc\x98\x6d\xbd\x45\x20\xef\xf7\x21\x26\xc8\xdc\xb2\x00\x9a\xbb\xe6\x96\xe5\x0f\xef\xf7\xad\xe9\x7e\x5f\xaa\x07\xde\x0c\xc5\xb8\x9b\xc2\x9c\xff\xf1\x0b\x18\xeb\xba\x5d\x45\x69\xb5\xbb\xd6\xdc\x59\x1f\x22\xda\xb6\x21\x9d\x0f\x73\x37\x42\x66\x8e\x61\x8c\x5d\xca\xf0\x6a\x0a\x61\x9b\x7e\xbc\x89\x37\x6f\xc3\x4b\x87\x94\xe1\xa5\x1c\x6f\xce\xf0\x8e\x92\xb4\x85\xe0\xfb\x10\xb7\xfa\x3d\xa9\x21\x4e\x19\xe2\x45\x30\xfe\x1c\xac\x42\xe7\x21\x84\x8a\x6b\x0c\x9f\xaa\x22\x66\x55\x54\x1a\xf0\xc3\xea\x68\xbb\x8e\x55\x47\x1b\x32\xb4\x4a\x6d\x7e\x18\xd2\xe4\x93\x48\x13\xd9\x1d\x9f\x81\xb4\xf5\x5d\x4e\x0d\x69\x20\x06\x2f\xce\x6b\xf7\x2b\xef\xc3\x99\xd5\x7b\x98\x32\x2c\x59\x01\x63\x2d\x22\xf9\x69\x15\x44\x46\xa1\xa6\xc5\xa9\xbe\x85\x18\xa4\x34\x38\x63\xdd\xee\x36\x6f\xf1\x5e\xb0\x49\x4f\xec\x02\x18\xc8\xf3\x78\xbc\x05\xe0\x75\xf0\x5a\xec\xe6\x6d\xc1\xb2\x48\xc2\x38\x67\x68\x18\x4c\x03\x0d\xaa\xf0\xac\xd7\x76\xb9\xa5\xc8\xbe\x3b\x1d\xa7\xdc\x36\xe0\x28\xb0\x0a\x67\x29\x1b\x52\x93\x37\x1a\x3d\x8e\x55\x7d\x14\xc0\x8b\x36\x76\x19\xd5\x8d\x8b\x72\x53\x4d\xaf\x45\xbd\x4a\xd3\x89\x77\x34\xfc\xc3\x3a\x11\x52\x30\x32\xbc\x6e\x3d\x47\xca\x47\xfe\xea\x5e\xf8\xf1\x95\xef\xda\x74\xcc\xfd\xf2\x56\xc4\x56\xb4\x85\xb4\xa4\x4f\x5a\x7d\x2c\xd2\x1b\x3e\xc6\xda\x90\xbf\xd3\x2d\x42\xcf\xf6\x1b\x1e\x2c\xca\x1c\xc7\xe7\x1a\xe3\x87\x4d\xd3\xe5\x1d\xe4\xe4\x2d\x37\x5d\xf6\x74\xdb\xe5\x04\x92\x86\xcd\x12\x20\x65\x4d\x42\x04\x23\xee\xba\x5f\x3e\xd3\x9c\x11\x79\xba\x2c\x38\x34\xee\x74\x50\x42\x42\x34\xe2\x06\x05\x86\x8c\xd8\x83\xec\x90\x4c\x06\xa6\x99\xe1\x3d\x94\x1d\x4e\x3a\x9d\x14\x45\x24\xf0\x32\x1f\x32\x08\x30\x26\xdc\x15\x39\x42\x33\xb2\x37\xc3\xc3\xa4\x57\x32\x18\xc2\xae\xf8\x7a\x1e\x8f\x99\x71\x32\xe3\x37\x28\x58\x67\x22\x93\xa2\x88\x97\x06\x33\x97\xbf\xf8\xd2\x34\x2a\x5d\xe2\x88\xa6\x8c\x36\x16\xa3\xa0\x77\xfb\x87\xc8\xf6\x80\xcb\xf6\xa0\xb7\xfa\x43\x24\x7a\xc0\x25\x7a\x20\x5d\x88\x8e\x7f\xb7\x30\xdf\xdb\x13\x48\x53\x86\x74\xb4\x4c\xaf\x1f\x2c\x65\x29\x88\x2d\x7f\x35\x8e\x31\xe6\x88\x42\x8e\xe8\x73\x44\x56\x29\xb0\x88\x18\x0b\x97\x63\x23\x82\xae\xb8\x80\xa0\x80\x67\xed\x0c\x29\xc2\x7d\x2a\x73\xfa\x2d\x84\x92\x3d\xe5\x98\x06\xe4\x64\xc3\xa4\x1e\xa1\x48\x3e\x24\x86\x09\xcc\x60\x0c\x0b\x98\x13\xf5\xd4\x17\xae\xc9\x9e\x03\x2b\xed\x86\x33\xdf\x47\xd6\x3f\x35\x06\x4e\x78\x68\xdc\x00\x2d\x24\x03\x8b\x73\x6e\x32\x1f\x98\xe6\x48\x06\x60\x19\x1d\xce\x3b\x9d\x10\x8d\x49\xe4\x8d\x7c\x18\x41\xc4\x99\xf8\x9a\x99\xc9\xd7\x64\xef\x1a\x4f\xc8\x88\x6b\x64\x52\xdc\x22\xa5\x6d\xca\x2f\x61\xe7\xb2\x1a\xb3\x8a\xbd\xeb\x20\x30\x23\x23\xcb\x19\xcc\x8e\xc8\x64\x60\x59\x33\x9c\x49\xbe\x5f\x79\x33\x1f\xa6\xde\xcc\xc7\x3b\xf5\xb2\x52\x70\x23\x5c\x5c\x77\x3a\x68\xe5\x8d\x7c\x62\x52\x34\xe6\xc4\xc1\x94\x7f\xa6\xea\x53\x21\xcb\x87\x66\x2e\xd3\x5c\x56\x02\x98\xd9\xac\x12\x58\x19\x8c\x8b\x70\x82\x16\x0d\x05\x6f\x51\xcd\xa9\xb2\xff\x27\xd5\xde\xde\x07\x84\x15\x1b\x73\x2f\x71\x8c\xf9\xa4\xd7\x36\xc6\x3c\x28\x29\x4f\xe4\x46\xfa\x54\x4c\x3f\x77\x2a\xa6\xc3\x94\x4d\x9e\x14\x2b\x8e\x19\xf1\x19\x39\xea\xdd\xda\x7f\xc8\x04\x2f\xd1\x39\x0f\x9d\xe1\x0f\x57\x82\x46\x7c\xba\x8f\x1e\x2a\x3c\x3e\xa1\xb5\xc5\x65\xfb\x53\x8e\xd4\xfe\x43\xb0\x96\xe8\x1e\xd8\xfe\xcf\x51\x02\x47\x5c\x02\x8c\x38\x07\xff\x64\x13\xf1\xe3\x67\xbb\xe5\x2d\xc5\x04\xe1\xde\x2d\xa2\xb8\xb7\x42\x29\x56\x45\x7e\x76\xee\x87\x8c\x4b\xc8\x9f\xb6\x43\xe6\x15\xce\xcf\x92\xba\xf7\x28\xa2\x5c\xea\x8e\xb8\xb0\x1c\x7d\x8e\xd4\x0d\x4a\xa9\xab\x84\x4f\x82\x39\xa2\x80\x23\xfa\x2d\x52\x37\x21\x62\xb6\xba\x1c\x1b\x11\x74\x25\x05\x8c\x0a\x78\xbd\xc5\x39\xcb\x21\x1d\x5a\x8e\x9b\x1f\xd1\x21\xfb\x97\xd0\xa1\xed\x72\x85\xef\x65\xeb\x7d\xbe\x02\x5e\x6d\x4a\xef\x97\x90\x93\xd7\x32\x6e\x1f\xc4\x42\x82\x33\xe9\x7d\xc1\x84\x37\xfb\x6a\x55\x28\x96\x42\xa5\x80\x59\xa5\x54\x8c\x89\x0d\x0b\x4d\x42\xcf\x30\xcc\xeb\x9f\xd7\x64\xdb\x16\x9f\x3a\x31\x9c\x87\x31\xba\x80\x32\x62\x83\x75\x01\xdb\xb6\x4c\xaf\x71\x79\xae\xc8\x0a\x95\xe7\x50\x2b\xbc\x3f\x83\x6d\xc6\x24\x5c\x92\x69\x17\xad\xd4\xc6\x36\x5f\x41\x84\xb2\x33\xe3\xba\x0e\x9a\x90\xb9\xb7\xf0\x32\x9f\x64\x5c\x16\x57\x0a\xcf\x91\xdd\xe9\xa0\xb1\x49\x26\xd5\xb2\xb3\x47\xf2\xe1\x62\xe3\xaa\x74\x25\x13\x73\x34\xf7\xa8\x0f\x73\x1e\x4b\x12\xbb\xa2\x48\xda\xe9\x6c\x96\xa9\x06\x34\x45\x01\x2b\x13\x70\x47\x61\x5c\x11\x83\x88\x8c\x87\x68\x65\xcd\xba\x97\x78\x7f\xec\x96\xb4\xc2\x35\x19\xe1\x25\x61\xc4\xc2\x88\x5c\x9b\x88\xd3\xbe\xf4\xf1\x91\x3d\x9c\x74\x23\xd7\xc6\xe6\x25\xcc\x79\x38\xd4\x71\x90\x07\x6e\xe0\x2d\x7d\x19\x50\x54\xc5\x36\x9c\x40\x65\xd0\xb9\xd7\xa0\xcc\x30\x77\x04\xca\x78\x72\xa7\xea\x86\xdf\xee\xbc\x52\xc6\xc4\x5b\xdd\x3f\x52\x21\x63\x1d\xf2\x43\xe3\x25\xd8\xfd\x72\x9b\x2a\x8e\x55\x5a\x58\xfd\x32\xf7\xfd\x32\x94\xaa\xe5\x47\x69\x5b\x9f\x6b\xd8\xb6\x5e\x6a\xab\x69\x86\x4c\x59\xfa\x4c\xc3\xf6\x13\xd6\xb2\x52\xe8\x3e\xcf\xb0\xfd\x84\xb5\x1c\x70\x01\x13\x14\xf0\x82\x7c\x87\x4e\xb4\xa9\xfe\x51\xb3\x4c\xb9\x50\xd4\x4e\xac\xbe\xe3\x57\x95\xd4\x57\xae\x31\x00\x9b\xed\x1f\x11\x45\x39\xae\xa2\x33\x96\x08\x20\xaf\x50\x7c\xab\x3f\xcf\xe0\xf9\xe5\xcd\xae\x5e\xc0\x5b\x47\x7b\xb7\x20\x9d\x70\xb1\x9f\xb4\x27\x8e\xad\x09\xed\xad\xaa\xf4\x15\xd0\xcf\x90\xd9\x39\x62\x94\x63\x37\x47\x58\x12\x55\x00\x2d\x3e\x3e\xd0\xdc\xe6\x05\x74\x05\xf1\x1e\xcb\xbb\x82\x15\xfa\xdd\x7d\x06\xb8\x80\xd5\xf4\xc8\x56\x53\xbc\x09\x2b\xf1\xb6\xd9\xcf\x3a\xa8\x54\x1a\xab\x03\x69\x8a\x21\xef\x5a\xe5\xf1\x35\xc5\x58\xda\xaf\xdf\xb7\x2c\xba\xdf\x22\xa6\x18\x0a\x6d\xf0\x05\xc6\x05\xfc\xb8\xb9\x7c\x3c\xd3\x20\xa0\x1c\x4d\x11\x7c\x84\x6b\x0a\xfc\xbe\xa1\x58\xd7\x85\x7b\x43\xae\x36\x08\x67\x43\x5c\x2f\xf8\xe4\xc8\x6b\xb3\x93\xf6\x6e\x6d\x2d\xd3\x86\xea\xd0\x95\xe5\x39\x5a\x9e\x73\x0f\xcf\xe8\x9b\x86\xb4\xb7\xd2\x50\xae\x18\x4a\x7d\xef\x8f\xf6\x56\x1a\xd6\x15\xc3\x5a\x8e\x55\x63\x1e\x6a\xfd\x96\x22\xd6\x5d\x65\x31\xd9\x13\xe5\xd0\x6d\x2f\x18\xb7\x14\x54\x75\xbe\x6c\xdb\xea\xd4\xca\x86\x9b\x65\x7f\x56\x95\xbe\x69\xdb\xce\xd4\xca\x26\x2d\x65\x9d\x3f\x60\x76\xc1\xaf\xad\x9a\x8b\x87\x72\x62\xe6\xda\x35\x17\x6a\xa9\x2b\x00\x3c\x9a\xb9\xce\xb0\x7e\x01\x3f\x34\xbd\xc7\x8a\x0b\xac\x95\xb8\xfa\xb9\x7e\x52\x9f\x2c\xd3\x91\x26\xb0\xfe\x54\xcb\xcd\x83\x74\x4a\x35\x59\xf4\x97\x4a\x16\xfd\x0c\x29\xf9\x13\xc4\xe4\x1d\x84\xe4\x6d\xcb\x7e\x8a\x8c\x1a\x0c\x19\xf9\x41\xdc\x8d\xd5\x34\x98\x88\xd4\xf6\xbe\x33\x7e\x6f\xa7\x9e\xc2\xef\x74\xad\xd7\x28\x21\x81\x38\xba\xa5\x28\x81\xba\x4a\x84\x32\xcf\xf6\x49\x04\x4c\x59\xa9\xef\x96\x67\xb8\x15\x74\xd4\x0a\xca\x24\x7b\x7d\x57\x25\x68\xd9\x55\x11\xfd\xf4\xf0\x25\x57\xad\xb5\xa2\x07\x1f\xbe\xda\xaa\x65\xf6\xf6\x0f\x5d\x5d\x1f\x68\x88\x3d\x70\x59\xfd\x2c\x8d\x3d\x69\x6e\xed\xaa\x75\xb4\xe4\x95\x2f\xaa\x13\x58\x7c\x47\xd5\x6e\x63\x0e\x29\x06\xda\xab\x5d\x5d\x44\x39\x41\xb9\x19\xe3\xfd\x3e\x7f\x9b\x1c\xf2\x22\x15\xa2\xbf\x7e\x06\x22\x48\x09\x4a\xcd\x90\x1f\xb6\xc8\x22\x15\xa2\x9f\x74\x44\xe2\x3d\xd4\xaf\x02\x4f\x20\x7e\xa8\xb2\x4c\xed\xfc\x15\xc5\x2c\x67\xc9\x7f\x84\x78\xa7\xac\x38\xf1\x6c\x1f\x12\xcf\xf1\x37\xab\x0f\x58\x56\xe0\x39\x3e\x64\xdc\x29\x0e\xfb\xb5\x64\xbf\x96\xdc\x97\x6e\x49\xc8\x2f\x95\xdc\xf9\x0b\xfa\x42\xcb\xf8\xb3\x9e\xf1\x57\x2d\x83\xd2\x72\xb9\xf9\x0b\xfa\x09\xff\x56\x55\x41\x84\x8a\xa5\xe4\x6e\x9c\x06\x37\x8d\x45\x53\x9c\x6c\x55\xd7\x14\xf3\xfd\xa9\xd6\xea\x14\x6c\xd6\x5e\x75\xf2\x96\x82\x0d\x17\xb8\x28\x20\x7d\x28\xb2\x27\x78\xbf\x5f\xa1\xb3\x0e\xba\x29\x58\x7c\x04\xe5\x4e\xb2\xd5\xf2\x7d\xd0\xd5\x53\xda\x12\xf4\xcf\x0d\x94\x2c\xa1\x0e\x5f\xff\xaa\x63\xb3\x5a\x12\x6a\x9f\x25\x3a\x6d\x5f\xbf\x28\x20\xa6\x5a\x3b\x9d\xfd\x03\x0c\x21\x25\xfd\x6e\x4c\x21\x79\x68\xdf\x84\x7c\x3b\x24\xed\xc6\xb4\xea\x21\xbb\xde\x96\x58\xf4\xbf\xfc\xb2\xeb\x94\xc9\xcc\x3a\x5d\x01\x2d\x6f\x9c\xa1\xe9\xbe\x63\xe3\xfd\xf2\xf3\xab\x2e\x4f\x80\x4c\x03\xb9\x60\x29\xdd\x80\xc2\x92\x92\x4a\x3b\x2a\x53\xa3\x87\xb5\xa5\xf7\xf5\x37\xf6\xd7\xce\x81\xfd\x8d\xf3\xa4\xff\x4d\xff\xeb\x27\xfd\x2e\x7f\x6e\x91\xd1\x6e\x0a\x21\x59\xd2\x6e\x7a\x4f\x0b\x43\x3d\x52\xbb\x33\x48\x0e\x9f\x0c\x4c\x33\x51\x71\xea\x2f\xba\xc9\xfe\x13\xc8\x88\x7e\x2f\x74\x49\xb4\x5b\xa1\x3b\x25\xaa\x25\xe3\x84\xac\x36\x98\x59\x37\xb6\x96\xdd\x10\x96\xdd\xd8\xcc\xba\x21\x2e\x9a\xdd\x35\x7a\xe0\x60\xf1\xb8\x75\x29\xe7\xe5\x94\x8e\x72\x14\x73\x41\x93\xf2\xf7\x7b\x3a\x27\x1c\x60\x98\xdd\x87\xd2\xd2\x19\x00\x1d\x74\x27\x14\x63\xbd\x6f\xfa\x75\x5e\x9c\xd0\x26\x77\x6b\x29\xf5\x96\x8c\xeb\x64\xec\xf7\x61\x41\x89\xb3\xaf\x31\x69\x1f\xc3\x9c\x92\x83\x2e\x5a\xd0\xfd\xbe\xe9\x60\xb8\x7e\x28\xa7\xce\x05\xa7\xee\xf7\x21\x24\x69\x77\xc1\x5d\x4f\x41\xc0\x7f\x9a\x29\x64\xc4\x4a\x60\x49\x82\xaa\x1d\x6c\x50\x2b\x92\x13\x08\xf4\x21\x81\xa5\xde\xc2\xde\x93\x6e\x6c\x8d\x69\x37\x84\x31\xed\xc6\x26\xfb\x0e\x1b\xf9\x09\xcb\x0f\x58\x7e\xc2\xf3\x83\x46\x7e\xc6\xf2\x97\x2c\x3f\xe3\xf9\x1b\xf8\x4d\x8e\x9f\xa3\x66\xa0\x71\x13\xbf\xc9\xf1\x73\xd4\x2c\x3f\x69\xe2\x37\x39\x7e\x8e\x9a\xe5\x67\x9b\x9d\xbf\xa2\xc4\xcb\x29\xa4\x6c\xf6\xc3\x88\xcd\x1b\x98\x51\xb8\xa6\x3e\x4c\xe9\xa6\xe9\x10\xa1\x9c\x99\x23\x24\x42\x4f\x1f\x63\x69\xcf\xeb\x8f\xc8\xe4\x0b\x15\x7e\xa3\x99\xfb\xf9\x8d\xa5\xd6\xd4\xbe\xbb\xd3\x63\x63\x88\x52\xd8\x7a\x07\x01\x4a\x3f\x4f\x6a\xb7\x6b\x43\x27\x8a\x7b\xdc\x0e\xfc\xbd\x7b\x1b\x6c\x9e\xf0\xad\x8d\x58\x78\x53\xfa\x23\x8e\x9b\x62\xae\x7c\xc5\x9f\xa7\xa8\xa4\x4d\x45\x25\xe6\xaa\x58\x5c\xc0\x65\x3d\x06\x5f\xd5\xef\x17\x54\x3d\xb1\xa1\xd5\x81\x67\x7d\xa5\x47\xfd\x2e\xed\x5d\xdc\xda\x26\xe5\x0f\x0d\xf6\x0f\x40\xa4\xac\x78\xca\x4a\xa4\x08\x08\x01\x59\xa6\xac\x64\x4a\x0d\xe6\xb1\x80\x31\x73\xbc\xff\x54\x41\x3d\x16\x50\x66\x8a\xf7\x9f\x6a\x9a\xc0\x0d\x6d\x3b\x31\xbf\xa1\xff\xd0\x23\xf3\xdb\xcd\xd7\x42\xda\xd5\xec\xd7\xc1\x6b\xf8\xf4\xd1\xba\x3c\xe4\xde\x3c\xda\x3e\x70\x2f\xa8\xe0\xdc\xf2\xd9\x88\x42\x5d\x7a\x57\x6d\x3d\x8c\xde\x04\x2f\xfe\xfb\xfc\x5e\xcf\xea\xd7\xb2\x0e\xa0\xb5\x26\xf4\xa4\xab\x06\xd9\x2c\x5f\xd2\x30\xb6\x54\xe9\x2b\x95\xce\x58\xf8\x29\x2e\x2f\x08\xa8\x51\xe3\x77\x02\x36\xf8\x04\xaa\xd7\x03\xb0\xc1\x32\xda\x63\x2c\xb9\x19\xf3\xbc\x55\x64\xc4\xf4\x46\x4c\x00\x6d\xb6\xde\xb6\x4e\x88\xdb\x2d\x13\xe2\x92\x96\xac\x7f\x49\x3f\x8f\xc5\x6f\xfb\xea\xc7\x81\xfa\xf1\xb8\x85\xfb\xe5\x0f\x05\xbc\x52\xc0\xab\xc7\xbf\x77\x62\x38\xed\x0c\xa0\xa8\x53\x9d\xd8\xc7\xb0\x95\x8f\xdb\xb8\xa1\x81\xae\xc4\x67\xf6\x15\x23\x1c\x70\x51\xa5\xd0\x97\xe9\x2b\x96\xde\xac\x4c\x71\x91\x2a\x5a\x61\xe9\xeb\x58\xaa\xf4\x55\xbf\x05\xcb\x16\x92\x0f\x04\xc9\x72\x4f\x6f\x4b\xbb\x6b\xb9\x8a\xc9\x57\x07\x6d\xb9\x8f\x55\xee\x63\xb6\x76\xff\xa1\x53\xf9\xb6\x5f\x31\x7a\x9f\xe4\xf7\xcc\x50\x28\xb9\xaa\x2c\x70\x50\x2f\xd0\x3e\x6f\x6f\x1f\x57\x05\x1e\x93\x1c\xee\x1d\x4d\xb6\x9e\x28\x7e\x36\x29\x9f\xcf\xe5\x6c\x56\x39\x2b\xb1\x00\xa9\x1e\xff\xbb\xcc\xeb\xb3\xad\xf3\xfa\xb6\x31\xaf\xdf\xb4\xce\xeb\x37\xff\x7a\x0b\xdd\xbd\x6b\xd0\xc1\x3f\xcf\x1a\xf4\xdb\x16\x11\xf9\xbe\x7e\x3b\x9f\xc5\x64\x2b\xa7\xed\x7c\x6a\xd5\x4b\x21\xde\xb2\xea\xb1\x9c\x16\xc9\x20\xa9\x7a\xfc\xf7\x61\xde\xe3\xad\xcc\xfb\xa6\xc1\xbc\x57\x54\x3f\x89\xb8\x0c\xb2\x30\x23\xe5\xe2\x25\x11\x5f\xd2\x3c\x20\x79\x71\x55\xe3\xe8\xfb\x78\x91\x78\xbe\xa2\xa9\xfa\xc9\x71\x7f\xf2\xf0\x44\xf3\x81\x79\x71\x0b\xca\x21\xed\x4a\x8b\x90\x6e\xf1\x50\x39\xe9\x91\x5d\x86\xfb\x8e\x65\x70\x04\x48\x48\xce\x37\xb6\xb8\xb7\x5c\x2b\x84\x8c\xe4\xec\x07\x33\xf5\x78\x8c\xb7\xe5\x21\x49\x07\x38\x26\xcb\xfd\xb4\x46\x94\x2e\x6a\x59\x63\xbb\xd4\x5b\xfa\x26\x52\xbc\xcb\x92\x70\x17\x85\x66\xcc\x0c\x39\x0d\x2c\x6f\x03\x4b\xcc\xb8\x9b\x61\xbc\xa3\xfa\x42\x75\x84\xf6\x46\xbd\xea\x8a\x4f\x9e\x0d\xdd\x0a\x9f\x46\x66\x39\x18\x2b\x99\x90\xab\xd3\xa0\xf7\xb4\xe1\x54\xac\xfc\xd2\x22\x32\xee\x0a\x1f\x7d\xe5\xc8\xf2\x10\x21\x72\xec\x95\x41\x95\xf6\xf8\x40\xb7\x18\x54\x94\x57\x07\x69\x81\x7a\x5f\x3f\xd1\x4e\x1e\x4f\x3f\x6d\x7f\x08\x73\x81\xf6\x2e\xae\xba\xfc\x77\xdf\xe2\x86\x04\xb3\x0c\xd9\xe4\x2a\x33\x56\x3c\x63\x25\x32\x6e\xfb\x5a\x09\xc7\xca\x05\xb4\x96\xb8\x72\xc4\x7e\x02\x5b\x54\x79\x96\x66\x77\x9c\xd4\x38\xba\x14\xc8\xca\x49\x2e\x61\xe3\x85\xf7\x9f\x16\x27\xff\xd9\x02\xba\x54\xd3\x5a\x95\xb2\xdf\xa9\x82\xdd\x6f\x79\x68\xaa\x48\x5d\x36\x9d\x6e\x35\x68\xfe\xdb\x42\xe9\xb7\x08\x61\xe7\x5e\xfd\xa7\x14\xee\xa7\x0f\x14\xee\x8d\xe1\xd1\x55\xb3\x56\x71\x2f\x07\x51\x53\xdf\xa4\x50\x78\xf7\x20\xa1\xc0\xe3\x04\x35\x85\x40\x4e\xe3\x7a\x40\xf9\x36\x39\xa0\x5f\x35\x7a\xfb\xc0\x09\xf7\xf6\x1f\x6a\xe9\xdc\x3e\xf9\x3c\x93\x47\xfe\x78\xf2\xf7\xb5\x7d\x36\xb4\xfc\xcf\xb5\x7d\xea\xf3\xf8\xb3\xd1\xb5\xd9\x25\x0f\xb6\x3c\x5a\x72\x9f\xa8\xdc\x27\x7f\xbc\x5d\xb2\xdd\xcc\x68\x9f\x97\xed\x3d\x5e\xb7\x3d\x5a\xfb\xb6\x61\xad\x3c\xa9\x4a\x3c\x29\xeb\xfd\x4f\x9b\xc9\x1f\x1e\x3c\x93\xdf\xfe\xee\x99\xfc\xec\x81\x33\xf9\xd9\xbf\xc3\xd2\xf9\xef\x6d\xed\x7c\x72\x15\xdc\xd4\x04\x1e\xba\x69\xf3\x10\x6b\xe6\x1f\x3e\x4d\x5e\x3f\x78\x9a\x3c\xfb\xdd\xd3\xe4\x25\xad\x85\x90\x22\x5c\x4b\xe5\x17\xa6\x18\xb1\x3c\xe6\xe9\x6d\x9f\x59\x21\x8c\x42\xee\x56\xb2\x77\x11\xd9\xce\x45\xa0\xde\x8a\x67\x84\xef\xac\xb3\xb4\x7e\x60\x1e\xa8\xdf\x01\xff\xe1\xf4\x2f\x02\x53\xfe\xe8\x07\xb0\x24\x5a\x7e\x89\x49\x01\x04\x78\x27\x26\x28\xee\x66\x42\xad\xee\x96\xe5\xf8\x7e\xbf\x56\x0b\xde\x5f\x42\x48\x50\x28\x20\x57\x0d\xc8\x55\x1d\xb2\x90\x34\xf7\x0f\x2a\x9a\x23\x49\x73\xff\xa0\xa2\x99\xe5\xb7\xd1\x3c\x22\x5a\x7e\x89\x49\xa3\x39\x21\x28\xe9\x46\xe2\x4c\xa2\xc2\x6a\xe5\x15\x55\x78\x7f\x04\x01\x41\x81\x80\x5a\xe9\x50\x69\x0d\xaa\xd8\x6a\x7a\xa8\x17\xf5\xed\x66\xc2\xab\x7b\x65\x5d\x10\x2d\x66\xcc\xe6\x7d\xf5\xaf\x22\xe9\x38\x57\x28\x11\xc6\x3a\x59\xfd\x66\x3d\x4f\x2a\x98\xbe\x0e\xd4\xd7\xa1\xca\x8f\x7f\xa4\xbd\xb1\xa9\x51\x68\xa0\xff\x49\x26\x07\x63\xfe\x76\xf1\xac\x47\xfa\x64\x96\xac\x8a\xdd\xc0\xac\xd7\x7c\x47\xef\x70\xed\x28\x5a\xef\x60\x9e\xbc\x48\x6e\x50\xda\x4d\xcd\xb8\x1b\xeb\xdc\x86\x71\xb1\xb5\x77\xff\x19\x0e\x61\x4a\xd9\xfe\x72\x53\xb6\x6f\x70\x1f\x6c\xe1\x44\xd8\xca\x89\xb0\x95\x2d\xe1\x1f\xb1\x7e\xbc\x78\xd0\xfa\x21\x76\x50\xa4\xe8\x70\x4b\xf3\xc9\xd6\x56\x13\x21\x39\xee\xdf\x44\xd1\xf7\x50\x3e\x3e\x48\x0e\x7d\xfc\x57\xb3\x9d\xfe\xb3\xe5\xd1\x7f\x9b\x61\xff\xa2\x42\xed\x9f\xd3\xec\xfb\xb7\x94\x79\xdf\x7d\x86\xcc\xfb\xa8\xc9\xbc\xb7\xbf\x57\xe6\x7d\xfb\x20\x99\xf7\xed\x7f\xeb\x5e\xff\x04\x06\xeb\x3f\xbf\xe0\xf8\x97\x34\x90\xff\x2d\x05\xca\xf7\x9f\x21\x50\xbe\xd5\x04\xca\xb3\xdf\x2b\x50\x7e\x6c\x3d\x82\xff\xf1\xf7\x2a\x4d\xf7\xcd\x46\x0d\xe2\x9e\xb9\xd6\x3e\xa7\x5a\x27\xd4\x3d\x9a\x3c\x6a\x5b\x28\x5b\x14\x7b\x75\x24\xf8\xeb\xd6\xe3\xdf\x1f\x1b\xc7\xbf\x3f\x50\xfd\xbd\x8d\x7c\x6c\x5b\x19\xc9\x3f\xb7\xed\x74\x88\xad\x06\x08\x49\x6e\x89\x9d\x8f\x84\xc8\x33\x39\x71\x82\xb7\x8f\xe2\xf5\x3a\x3c\xb4\x3b\x1d\xcb\xc6\xcc\x88\x4f\x2d\x79\x8d\x10\x85\xeb\x75\xac\x32\x32\x82\x92\x6e\x68\x06\xdd\x98\x95\x30\x4b\x87\xf1\xe8\x07\x8a\x12\x6c\xfe\x40\x51\x80\xe5\xab\xa3\xda\xab\xe1\x04\x43\xf9\x3b\xc0\xd0\x7b\xd2\x2d\x3f\x33\x8c\xd7\x6b\x2d\x86\xf3\x9f\xa8\x7e\x3d\x58\x23\x5e\x3d\x4b\x48\x87\xe8\xa0\x5b\x27\x3e\xb5\x72\xbc\xdf\x77\xf5\x47\x47\x2d\x9d\x60\xcb\xed\x1e\x5b\x6e\xf7\x38\x72\xbb\xc7\xe1\xcd\xb2\x62\xbc\x7f\xb0\xb3\x7d\x63\xc2\xcc\x20\x34\xb3\x6e\x0e\x89\x95\x41\x60\x65\xdd\x94\xbb\x13\xd5\x9e\xa4\xb4\xf2\x73\xf5\xd0\xa4\x25\x9b\x8d\xee\x4f\xb4\xe6\x59\xf5\xa7\xfb\xb1\xfc\x42\x1b\xcc\xf1\x45\xbd\xf8\x9f\x9b\xf9\x7f\xad\xe7\xf3\x98\xac\xdb\xd1\xe7\x79\xf9\x58\x0b\x52\xf1\xb2\x50\x9e\xdf\x43\xa8\xbd\x35\x8f\x55\x04\x86\xf2\x33\xa8\x7d\xf2\x9b\xf6\xa1\x67\xfb\xc4\x86\x84\xfd\xe9\x43\xc0\xfe\x50\xcf\xf6\xcd\x7e\x97\x7a\x8e\x0f\x39\x71\x06\xf9\x61\xcc\xcf\xf8\x73\x11\x45\xdf\x81\x84\xfd\x79\xcc\xdf\x67\x93\xc7\x5d\xea\xe5\x02\x3c\x37\x1d\x5f\xe2\x8c\x2d\x87\xa1\x4b\xc4\x8f\xaf\x20\x10\x3f\xbe\xee\x52\xfe\xc3\xa4\x5e\x5c\xe2\xe6\x98\x45\xf8\xaf\xfd\xc4\xcb\x2d\xc7\xe7\x15\x58\x24\xe5\x35\x58\x24\xed\x06\x3c\x59\xc7\x2d\x10\xee\x8b\x0a\x20\x27\xb1\xd5\x1f\xe4\x47\xc4\x1e\x58\x96\x24\x13\xf1\xc2\x21\xa7\x0a\x33\xc4\xa2\xbc\x24\x09\x31\x0a\x4c\x81\x0c\xef\xf7\x21\x27\xb6\xd6\x4e\xde\x40\xd5\x24\x89\x43\x39\x5f\x0b\x21\xf1\x8b\x2f\xfe\xb3\x15\xa8\x4d\xbd\x29\xb7\xff\xbe\x07\xdb\xfa\x0d\xdc\xda\x2a\xfc\x97\xda\xc1\x76\x6e\xc3\x9f\x1a\x09\xf8\x3f\x6b\xbb\x49\x08\xa7\xd7\xc1\x6b\x1e\xca\x9b\x2d\x0a\x5c\xe1\xc2\x5a\x58\x80\xf5\x3a\x2f\xbf\x56\xce\x3d\x9d\xf3\xcf\xb0\x4f\x04\xaa\xab\x55\x0f\xa7\xe4\x67\x4d\xd9\xc1\x90\x36\xef\xed\x6d\x8c\x4d\xa3\xc4\x6f\xbf\x0e\x55\xa2\x24\x69\x51\x14\x80\xfe\xaa\xcf\x88\x7a\x6c\x3b\x7d\xb2\x60\x2c\xcc\xeb\xc6\x7b\x58\x1d\x44\x00\xc8\x48\xa5\x9c\x78\xa0\xb8\x80\x9f\x6a\x53\xee\x9e\x30\x12\x4d\x25\x92\x97\x6e\x0d\x11\x71\x8f\x6e\x11\x6d\x8f\xfc\xd0\x9c\x1e\x1c\xff\xc3\xe3\x30\xb4\x2f\x5c\x39\x50\xfe\x88\x88\x07\x4f\x2c\x80\xe6\xff\x58\xf9\x52\xbf\x56\xf6\x1b\xaf\x8f\xf1\xcb\x63\xb8\x0c\xfd\x7f\xcf\xdc\xe0\xbe\x71\x3d\xdb\xdf\x36\x43\xca\x7c\xe8\x13\x42\x52\xbc\x05\x0b\x93\xfc\xdc\xb3\x2d\xf7\xf6\xa9\x05\x1b\x66\xeb\x23\xd3\xa2\xf8\x5b\xad\x84\xd8\x10\x10\x67\x10\x1c\xa6\x03\xd3\x4c\xc0\x34\x03\x7c\xdf\x50\xc4\x9e\xed\x7b\x89\x0f\xa1\xfc\x1b\x7b\x8e\xfc\x16\x7f\xa9\x17\xb0\x7a\x03\x1f\x0f\x3e\x29\xd6\xd2\xdf\x22\xcc\xd4\x14\xac\xdd\x6f\xfb\x7d\x37\xd9\xda\xbd\x82\x30\x65\x80\xab\x1a\x9a\xda\x1a\xe7\xf7\x6d\x20\xe4\x24\x2f\xe2\x7f\x34\x6f\xaa\x6e\x78\xd8\xf2\x66\x1f\x4a\x52\x55\xcf\xe7\x87\x4e\xa7\xd3\xaf\xaf\x31\xcd\x51\xa9\x2f\x75\xaa\x17\x31\xfc\x1d\xd6\xad\x23\x62\x97\x51\x17\xf2\x72\xdc\xf3\x6d\xcc\xb0\xc5\xce\xf9\x67\xba\xbc\x55\xae\x36\xe5\xd4\xcf\x0f\x89\xdd\x3e\x69\xcb\x1e\xde\xf2\x66\x80\x57\x55\x7a\x53\x2f\xf7\x40\xba\xe5\x55\xd0\x1c\x9b\x54\xde\x20\x56\x3b\x21\x1b\x17\x86\xcb\xe1\xdb\x96\x8f\x0b\xb5\xf0\x55\xab\x5c\x69\x6a\x87\x5b\xe7\x0a\x9f\x1b\xbd\x27\xfa\x74\x49\xf2\x36\x18\x5b\xd3\xe5\x83\x56\x08\x47\xb8\x42\xcf\x9a\x0b\x61\x38\x41\x28\xac\x02\x99\x1d\x39\xb8\x0a\xd1\xc7\x97\x11\xc2\xed\x21\x8f\x49\x47\x1f\xb2\xd2\xef\xd4\x20\x39\x0c\xf9\x4b\x59\xee\x97\x89\x04\x12\x28\xf1\x7d\x19\x32\x31\x1b\x98\x66\x8a\x03\x2f\xf5\x3d\xc7\x37\x09\xff\x61\xfb\x24\xcc\x5e\x07\xaf\x51\x2c\x92\xf1\x30\x16\xc9\xae\x4c\x28\x60\x59\xef\x0c\x3d\x7e\x99\x74\x78\x95\xea\xf1\xd7\x31\xd3\xbf\x99\x1a\x8e\x53\xa6\x42\xe7\xa5\x35\xa8\x75\x59\x94\xd7\x9c\x3d\x31\xf3\x81\xf7\xc5\xa8\x25\x62\x7f\x84\x3c\x1f\x43\x4e\x96\x39\xa4\x24\xcb\x21\x26\x51\x5e\x61\x0a\x91\x7a\xc4\xcf\xc3\x17\x6e\x0b\x46\xb0\x24\x2a\x0a\x17\x44\x44\xbd\x0a\x84\x91\x46\x77\x24\x6c\xa1\x84\xd8\x83\xe4\x30\x12\x2f\x8e\x55\x53\x27\x30\x23\x19\x93\xfb\x63\x32\xf2\x12\x5f\x2b\xb5\xc4\xb0\x20\xf6\x60\x71\xb8\x1c\x98\xe6\x02\x8f\xbd\x85\x4f\x26\xc4\xb3\xc1\x8c\x51\xe8\x2d\x7c\x98\xc1\x02\x42\xec\xc3\xa4\x37\x0e\xf2\x80\xb0\xb4\x9d\x71\xef\x8a\xae\xc8\xac\x90\xf5\x41\x40\x72\x34\xc2\x65\xb5\x23\x2f\x60\x83\x26\x82\x81\x93\xa4\xec\x3f\x34\x82\x00\xc3\x48\xed\xe3\x84\x3c\xcc\xd8\xef\x7e\xa1\x29\xfd\x77\xf0\xd0\xd4\xfc\xa5\x66\xd8\x74\x6b\xf5\x3b\x3c\x54\x84\xdc\x43\x45\xd8\x4b\xd2\x31\x4d\x3f\xd7\x13\xe1\x32\xdf\xee\x87\x4f\x52\x4d\x05\xd5\x39\xaf\x63\x32\xc9\x1e\xee\x8b\x43\x55\x92\xe5\x2e\x65\x28\xd2\x02\xc2\x02\x26\x6d\x73\x31\xd6\xe6\xa2\xad\xc7\xcb\x14\x93\xd1\xe6\xf3\xcc\xf6\xab\x59\x18\x54\xdc\x13\x12\x31\xf5\x62\x3e\xf5\x42\x93\xdf\x9d\xf7\x12\x36\xb1\xd6\x6b\x9b\x69\x4b\x21\x9f\xae\x3a\x54\x05\xb2\x4f\xc2\x22\xcb\xa5\x77\x5d\x98\xb5\x11\x97\xd5\x88\x6b\xd0\x26\x42\x2b\x71\xd7\x69\x52\x5c\x94\x61\x35\x39\xaf\x2d\xb1\x60\xc1\x80\xd8\x35\x11\x81\x42\xc2\x5a\xed\xe5\x5e\xea\xfb\xde\xd2\xc7\x9e\xe3\x5b\x4c\x27\xc2\x47\xc4\x1e\x72\xed\x88\x24\x5c\x29\x22\x89\x49\x42\xec\x86\x87\x3c\x99\x19\xe5\xc0\x73\x03\x9e\x2c\x00\x0b\x18\xb7\x51\x9e\x6e\xed\x56\xc2\xf7\x7f\xa4\x7c\x4b\xca\x99\x3b\x88\x0f\x93\x81\x69\x6a\x21\x14\x19\xdd\x19\x8f\xb1\xc7\xd4\xba\x00\x67\xac\x7f\x03\xdf\x8b\xcb\xfe\x15\x3f\x4d\xc2\x7f\xd8\x3e\xb1\xb2\xfd\xbe\xd6\xa5\x8b\x4f\xc9\x5e\xb6\x4e\xc7\x84\xd1\x2a\xc8\xc1\x9f\xe2\x04\xa6\x63\xc6\x9c\x98\x32\x3b\x23\xb6\x1c\x04\x7b\x90\x71\x11\x9d\x55\x99\x23\x8e\x39\xf3\x7d\x98\x90\x11\xa3\x9d\x13\x0e\x33\x82\x26\x16\x1a\x79\x81\xe5\xc8\x24\xee\x39\x7e\x4c\xec\xc1\x98\x0f\xd2\x58\x48\xbd\x05\x2f\x3e\xf6\xfd\x9d\x99\x49\xd0\xa2\x44\x80\x2d\xf6\x51\x15\x2e\x96\x26\x99\x40\x64\x92\x59\x77\x52\xa4\x2a\xc7\x24\xf2\x27\x1f\xcf\x65\xa7\x83\x12\x8b\x44\xfb\x4b\xbc\x0d\xa4\xea\xb9\x79\x7d\xa6\x55\x01\x2d\x17\xe8\xba\x8a\xa6\xb9\xcc\xcb\x08\xd7\x5a\x3f\xa7\xb5\xb0\xba\x16\xe3\xb2\x42\x5f\x50\xaf\xf3\xda\x3a\x03\x29\xb1\x1c\xc5\x15\x4a\x74\x27\xc4\x72\xf6\x6d\xc6\xad\x87\xe1\x00\x33\xcb\x9e\xca\x05\xec\x28\xe1\xce\x7f\xd9\x42\x91\x96\x84\xc4\x7c\x79\x59\x6d\x27\x7a\xfa\x7b\x89\x9e\x6e\x10\x6d\x43\x4c\x2c\x47\x23\x9a\x31\x6f\x45\x2d\xe7\x4c\xdc\xe9\xa0\xd4\x24\x55\xe5\x29\x27\xf4\xb2\x55\x8e\xad\x64\xd8\xe9\x6b\x9a\xf2\x60\xd1\x70\xd1\xd2\x9e\xda\x6e\x20\xaf\x5c\x36\x0f\x12\x32\xe7\x46\x91\x9c\x35\xb0\x64\x16\x5f\x44\x3c\xb1\x29\x26\x77\xbf\xe4\x4e\x5c\xe2\xe5\x3e\x04\x87\xd9\x10\xb1\x99\xec\xa5\x3e\x2c\x65\xf8\x6f\x1e\xe5\x42\xa6\x45\x65\x9a\x22\x3f\xaa\xc8\x93\xa1\x53\xd1\x12\x17\x70\xd3\xda\x9e\x65\xa3\x3d\x3b\x69\x6f\x8c\x72\x30\x82\x74\x64\x80\xa6\x07\x48\xf0\xf7\x05\x86\x12\x82\x06\x6d\x20\xcf\x2a\x10\xa6\xe9\xb5\x81\x7c\xa8\x40\x16\x61\x2b\xc4\xab\x7a\x3d\xef\x82\x71\x18\x44\x6d\x80\x3f\x56\x80\x29\x07\x3a\xde\x42\xd6\x8f\x75\xb2\xb6\x63\xfc\xbe\x89\xf1\xd5\x96\x56\x68\x80\x5c\x03\xdf\x8e\xf2\xd7\x5a\xdd\x57\xdf\x25\x69\xf8\x31\x89\xf3\x76\xe0\x5f\xea\xc0\x3f\xd0\x34\x0f\x47\xed\xa0\x7f\xae\x83\x6e\x27\x80\xd2\x0a\x52\x46\x12\x6e\x81\x9a\x6e\x40\x65\x6d\x60\xab\x0d\xb0\x93\x30\x1d\x45\xad\x7d\x94\x6f\xc2\xa6\x49\xd6\x8a\x36\xdd\x00\x7d\x16\x06\xf3\x24\x1e\xb7\x01\x27\x1b\xc0\x67\xbf\x2e\x83\xb4\x95\x86\xd1\x26\x6c\x1e\xa4\x6d\x90\xd1\x06\xe4\xfb\x34\xe4\x6e\x9d\xda\xa0\x67\x1b\xd0\x3f\xae\x5a\x01\xaf\x35\x40\xee\x8b\xee\xdb\x20\x0b\xb3\x13\x66\x96\xb6\x36\xee\xac\x15\xfe\xcd\x82\xc6\x6d\xd0\xc7\xad\xd0\x6d\x90\xcf\x37\x20\x97\xf1\xb8\xbd\x6d\xef\x9b\xa0\x27\x41\x3a\x0e\xe3\x20\xda\x4e\xf5\x87\x6d\x45\xb6\x11\xfe\x7a\x5b\x81\x36\xe0\x77\x9b\xc0\xf9\x7c\x19\x45\xef\x92\xf9\x76\x92\xbe\xdb\x5e\x68\x1b\x51\xdf\x6f\x2f\xd2\x06\xfe\xa2\x09\xce\x84\x45\x90\x6e\x27\xe9\xd7\xf6\x02\x6d\xa0\x27\x0d\xc8\xd3\x24\x4e\xf2\x24\xa6\x3f\xb5\x4a\x8d\x26\x5e\x05\xfd\x73\xab\xe0\x68\x42\xbf\x0e\xf2\x65\xda\xde\xf3\x69\xde\x80\x3d\xcb\xe9\xa2\x0d\x30\x6c\x03\x3c\x9e\xe4\xb4\xb5\x75\x41\x1b\xf4\xb7\x74\x92\xb4\x4f\xe2\x44\x03\xcf\xf2\x60\x74\xd5\x3a\xd3\x9b\x40\x6f\xb8\x3d\xf2\xfc\x76\x11\xb4\x8b\x91\x49\x7b\x81\x67\xe1\x35\x4d\xa7\x61\x3c\x6d\x9d\xf6\xed\x65\x5e\x27\xed\xab\x44\xd6\x0e\x7e\x16\x46\xb3\x64\x49\xf3\xbc\xb5\xd0\xb8\xbd\xd0\x8f\xe1\x74\x8b\x2c\x5a\x6c\x14\x60\xd6\xde\xf1\x62\x41\x83\x34\x88\x47\xad\x65\xe6\xed\x65\xb2\x11\x8d\xc7\x5b\xda\xbe\x6a\x2d\xf2\x8c\xde\x57\xe6\xb2\xb5\xcc\xcb\x38\x0b\xc7\xf4\xcd\x32\x6f\x2b\x72\xd1\x5a\x64\x5b\x0f\x2f\x5b\xa1\xdf\x09\x95\xa6\xad\xc0\x4d\x5e\xe0\xe2\x33\x62\x78\xa7\xe8\x00\x43\x48\xee\xa4\xa3\xea\x0a\x5f\xa1\xef\x40\xa1\x4a\xf3\xa4\x90\x73\x6b\xae\x69\xf4\x42\x4c\xee\x8a\x41\xce\x2d\xa5\x5c\x86\x82\xa0\x15\x94\x97\xfb\xa6\x61\xe0\xf5\x9a\xee\x86\xf1\x6e\xbc\x19\x35\x37\x8c\x22\x3a\x0d\x22\x1e\x0d\xde\xdd\x35\x4c\x8a\x77\x62\x8f\xfa\xc4\xf3\x0b\x6d\x63\x2b\x40\xb1\xbe\xef\x55\x1d\x61\xeb\x67\xd7\x99\xb0\xb5\x36\x2c\xbe\xca\xce\x0b\xb9\x9d\x27\xad\x44\x2f\xf6\x71\x2f\x0e\xe6\x94\x10\x92\x97\x8e\xab\xc4\x2e\x45\x85\x74\xa9\xfa\xb2\x3a\x03\x90\xbe\x75\xeb\xc6\x63\x38\xe1\xe7\xbe\x15\xc2\x3b\xf6\x49\x42\xa0\x44\x3a\x53\x45\x36\xc4\xa5\xf6\xaa\xd2\x62\xd3\xc1\x72\x03\xb4\x6c\xaf\xf2\x63\x4e\x85\x1a\x7c\xc7\x50\xba\xb9\xf4\x29\x9e\x16\x18\x68\x2d\x22\x7a\xb2\x3d\x22\x7a\x12\xb7\x1d\x5b\x96\x57\xbe\x20\x6c\xf7\x7a\x4f\x7b\x79\x1a\xce\x11\xee\x65\x8b\x28\xcc\xd1\xfe\xdf\xd6\xe7\x99\xb9\x8f\xb9\xc6\xdf\x34\x0c\x52\x62\x18\xdc\x32\xe0\xdb\x4a\x6f\x26\xc8\xe8\x19\x22\x5a\xb6\xd8\x8d\x4e\x89\xde\xd4\x46\x6f\x60\xa0\x9d\xce\x5e\xde\x9b\x05\xd9\x9b\x9b\xf8\x6d\x9a\x2c\x68\x9a\xaf\x10\xc5\x9b\x7c\xb2\x8c\xaf\xe2\xe4\x26\xd6\xf9\x44\x50\x7b\xc7\x53\x28\xf0\x5e\x4a\x8b\x02\x17\x88\x9a\x8c\x26\xcc\x8d\x39\x08\x4a\x43\x5f\x04\x5f\x6c\x32\xf0\x61\x1f\x73\xb6\x95\x1e\xe7\x3b\x9d\x6a\x73\x68\xaf\xdc\xd2\x6a\xe1\xdb\xf8\x3a\x88\xc2\xf1\xee\x28\x88\xa2\xcb\x60\x74\xc5\x68\xca\xc5\x5e\xdf\xc0\x34\x93\xc3\x60\xc0\x58\x22\x25\x88\x92\xd0\x4b\x7c\xcc\xfd\x9e\xe1\xd8\x4b\x7d\xb2\xe4\x9b\xa2\x40\x39\xaf\x80\x16\x1e\x5c\x6c\x1e\xe5\x62\xe7\x46\xcc\x97\x96\x02\x0c\xaa\x34\x8c\xd8\x40\x16\x8d\x4a\x37\x6a\xe5\xc3\x90\xe9\x48\x30\x2e\x19\xbe\x80\x51\xb2\x58\x6d\x1e\xc7\xdd\x15\xe5\x49\x5c\xe9\x37\x91\x13\x95\xf3\x9d\x24\xee\xa4\x41\x0e\x65\x65\x0e\xf3\xa9\xca\x0f\x45\x83\x28\xda\xbc\x93\x88\x36\xe5\x87\xd5\xdf\xd8\x60\xd2\xf6\x41\x53\x7e\xc6\x36\x48\xc4\xf9\x1a\x66\x6d\xd2\x64\x4b\x62\xf6\x7d\x3e\xa8\x82\xcc\xdf\xc8\x46\x6a\xbb\x34\x25\x48\x4d\x0c\x8f\x96\x3b\x32\x65\xdd\xb1\x97\xf8\x42\x38\xa8\xbd\x60\x08\x71\x01\xfc\xb7\xdb\x14\xbc\x7f\x08\x51\xf2\xc4\x51\x51\x04\x21\x97\x3c\xb1\x22\x2c\xe4\x92\x27\xc4\xb1\x17\x36\x09\x4b\xd5\xe1\x5c\x44\x12\x3d\x1e\x50\x69\x23\xa3\x51\xdb\x06\xeb\x19\xd7\xf8\x3b\x1d\x65\x4f\x35\x32\x7a\x61\x4e\xd3\x20\x4f\xd2\x61\x8b\xd1\xad\xb6\x51\x0b\xb7\x25\x93\xea\xb3\x6a\xa3\x3a\xda\xd3\xa4\x16\x21\xa4\x4c\xdf\x53\xbf\x2b\x09\x37\x54\xb4\xb9\x65\x85\x98\x31\x9c\xdc\x4e\x97\x31\x32\x6c\x98\x13\x1b\xae\x89\x43\x0f\x60\x45\x6c\x98\x12\x1b\x2e\x89\x0d\x17\xc4\x48\xf8\xfd\x01\x83\x10\xc2\xfa\x5d\x06\x39\xa9\x68\x5a\xd0\x74\x92\xa4\x73\xa6\x5f\x0c\xb5\x7c\x77\x84\xb4\x1c\x8c\x3b\x1d\xed\xb3\x17\x27\x37\x43\xed\xdb\x7d\x16\xe4\x14\x6e\x3e\x59\xd7\x4d\x18\x8f\x93\x9b\x46\x35\x22\x91\xd5\x20\x7e\xf5\x52\xfa\xeb\x92\x66\xf9\x71\x1c\xce\x03\xd6\x7f\x2f\xd2\x60\x4e\x87\xf7\x65\xf6\x2e\xc3\x78\xac\x10\xd5\x86\x23\xa3\xf9\xfb\x70\x4e\x93\x25\x3f\x27\xfa\x4a\xdf\x67\x7a\xae\xd9\xcc\xeb\x35\xba\x41\xb7\x18\xa6\xe4\x82\xb5\x0d\x61\xf3\x12\xeb\x71\xbd\xf1\xdd\x94\xd8\x7a\x14\xef\xf2\x4c\x37\x88\x22\x75\x67\x28\x9c\xab\x23\xfd\x98\xdf\x74\xab\x85\x46\x7a\x53\xbf\x9c\xc7\xe6\xc2\x59\x29\x44\x7a\x29\xe5\x1e\xe9\x25\x0c\xc4\x7a\xb8\x6f\x56\x37\x5a\x29\xc2\xb0\x79\x09\x63\xb2\x20\xf6\x4e\x9e\xae\xee\xf6\x34\x21\xf6\x1c\x61\x30\xcd\xf1\x8e\xae\xbf\x4c\x06\xf9\x00\x23\x4a\xa6\x56\x2e\x08\xc4\x7c\x8d\xca\x05\xe1\x62\xeb\x9f\x3b\x7c\xe1\x5e\x33\x73\x41\xf9\xc0\xb2\xc6\x05\xc2\xc5\x84\x99\x71\xd1\xea\x8e\x71\x98\x56\x8f\x86\x1f\x52\x32\x81\x98\x38\xfb\xf6\x20\x1d\xe0\x54\x60\x1d\xa2\xf8\x28\x15\xb5\xf1\x3d\x5f\xf9\x9b\xad\x84\x29\xa4\xec\x93\x55\x82\x5d\x94\xab\xdf\x90\x6a\x5d\x06\x29\xa1\x43\x2a\x13\x72\x77\x42\x72\xbc\x33\x23\x14\xde\x33\x85\x08\xb1\x21\xb2\x0b\x3d\xd4\xb9\x92\xde\xb2\x7f\x20\x27\xd4\x5a\xed\xe4\x47\xd7\x9d\x0e\xba\xb4\x48\x0e\x2b\xa2\xdf\x06\x7c\xcf\xb8\x62\xbc\x5e\xa3\x45\xa7\x83\x16\x64\x14\xd1\x20\x55\x1c\xb2\x60\xcb\xb3\x35\x3d\xea\x3f\x1e\x22\x7a\xe8\xec\xdb\x1c\x44\x63\xa1\x63\xa0\x96\xac\xc7\xba\xc4\x18\xe6\x9d\x0e\x9a\x0b\x1c\x2f\xe3\x9c\xa6\xd7\x41\x84\xe6\x3c\x7c\xed\x7c\xbd\xae\xc6\x0c\xe6\x0c\x49\x09\x71\x05\xd7\x18\xc3\x98\x38\x70\x83\x8e\x31\xc6\xc5\x99\x7e\xdb\x67\x9b\x6e\x73\x06\x92\x49\xda\x44\x6f\xcb\x0a\x4e\x35\xa9\xfb\x7e\xb5\xa0\x52\xf2\xaa\xd5\x7b\x37\xcc\x76\xe3\x24\xdf\x0d\xca\xb8\xfc\x06\xde\x61\x0b\x02\x5f\x91\xd3\xe1\x73\x84\x5d\x33\xc5\xa6\x5a\xa2\x87\xb6\x6b\x96\xe7\xcc\x6c\x6c\xd6\xeb\x99\x3c\xb2\x5f\xaf\xd1\x6c\x38\x53\x23\x36\x0b\x33\x36\x68\xb3\x30\x83\x19\xff\x53\x9e\x1c\xb3\xa9\x52\xde\x7d\x60\x93\x25\x85\xf7\x08\x17\x90\xe5\xc9\xa2\xe5\x26\x51\x10\x45\xe5\xd9\x3e\x2f\xab\x79\x26\xe2\xc5\x9d\x7d\x9b\x21\x50\x92\xff\x94\x34\x3b\xa6\x65\xaa\xa9\x43\x31\xd1\x1e\xa8\x66\x5e\x59\x36\xc5\x77\x71\x8f\x91\x84\x30\x50\x94\xf2\x7b\xdc\x72\x52\xc2\x09\x89\x90\xc1\xe1\x0d\x30\x28\xb3\x46\x8d\x11\x93\x7f\x91\x01\x46\xc8\x86\x37\x5d\x2e\x72\x03\xc3\x3b\xe2\xf9\xf0\x96\xd8\xf0\x81\x38\xf0\x8c\xf4\xe1\x35\x39\x80\x97\xe4\x31\xbc\x22\x4f\xe0\x05\x79\x0a\x1f\x5b\xc3\x6a\x2b\xcf\xcc\xb4\x77\x71\x91\xa7\x41\x9c\x85\x0c\x82\xad\xf7\x01\x1f\x65\xae\x8c\x28\x2f\xfc\x22\x2a\x6f\x1d\x94\xdc\x15\x3b\x7b\xad\xbd\x20\xee\x01\xeb\x58\x35\x9b\x67\xa9\x02\xd1\xf3\xf0\x4b\xfc\xe6\x51\x2f\xcb\x83\x9c\x2d\x47\x1f\xca\xb0\x6f\x48\xac\xd1\x11\x23\x22\xe4\x5a\xd7\x8c\x84\x5e\x54\x99\x14\xa9\x50\xb4\x18\xa5\x33\x51\x9e\x10\xf2\x5a\x95\x3f\x45\x09\xde\xa9\xd2\x5f\x0e\x4b\xa0\x17\x30\xeb\xb1\x01\x4d\x55\xb7\xcf\x7a\x49\x2c\x64\x93\xd6\xab\x40\x81\xb5\x60\x1c\xe4\xc1\xc5\x05\xcc\x84\xf6\x0d\xb3\xde\x34\x4d\x96\x0b\xac\xbc\xb2\x73\x82\x5c\x33\x3a\xcc\x3b\x9d\x07\x55\xa0\xc6\xef\xe1\xd8\x8b\x70\x82\x4e\x91\x6e\x90\x56\x8d\x65\x7a\xa7\xfc\x7a\x09\xa9\xac\x54\xb1\x58\xc0\xec\x5b\x1a\x05\x2b\x99\x83\x21\x40\x4b\x8c\xb9\xdd\x2b\xca\x3c\x83\xb4\xa2\x4c\xf2\x59\x8d\xb0\x54\x12\x96\x2a\xc2\xaa\xba\x9f\x09\xc9\xac\x12\x5e\x43\xac\x69\x95\x13\x92\xf6\xf2\x1b\x4a\x95\x2a\x85\x21\x22\x36\x8c\x88\xe5\xfc\xff\xd4\xbd\xf9\x93\x1b\xb7\xf1\x38\xfa\xbb\xfe\x0a\x8b\xcf\xde\x9a\x59\x82\x14\xee\x83\xd2\x64\x4b\x76\x9c\xc4\x89\xaf\xf8\xca\xc1\x2f\x9f\x0a\x83\x43\x3b\x31\x97\xb3\x1a\x0e\x75\xd8\xe2\xff\xfe\x0a\x98\x93\xc7\xae\x56\xf5\xc9\xa7\xbe\xf5\xb4\xaa\xe6\x70\x88\xb3\x01\x34\xba\x1b\xdd\x8d\xa7\xeb\x67\xfe\xe9\x74\xba\x4e\x93\xeb\x2e\xcd\x72\xdd\x71\x57\xcd\xd1\xf0\x7d\x0d\x08\x9c\xf6\x66\x39\x9d\x9a\x55\x76\x9d\x3e\xea\x8a\xcf\xcc\x14\xed\xc7\xd2\xeb\x48\x48\x2d\xb2\xfa\x59\x35\xb7\xbb\x2a\x6e\xdf\x57\xd5\xdc\xe9\xad\x1b\xed\x44\xf5\x93\xe1\xd7\x74\x91\x1c\x23\x71\x3b\xf4\xf9\x6b\x80\x7a\x89\x67\x33\x9c\x0c\x45\xa1\x20\xf2\xae\x6d\xf3\x8b\xf4\xd1\x80\xa6\xaf\xe3\x10\xf5\x48\x8e\x8b\xf8\x7e\x14\x6f\x03\x89\x19\x89\xdc\x23\xc1\x38\x2c\x85\xaa\x9f\x64\xd5\xe1\x24\xeb\xe7\x4c\xbd\x02\x45\xbb\x0a\x1e\xf5\x97\x07\x8c\xd7\xe2\x3e\xda\x58\x57\x5d\x01\xd9\x77\x07\x32\x67\x57\xc1\x7f\x4e\x26\x54\x79\x32\xa1\xda\xef\xcf\x32\x77\x71\x51\x26\x6e\xd6\x7e\x4f\xf7\x00\x76\x69\xf6\x89\x03\x15\xe8\x44\xec\xe6\xfa\xae\x0d\x88\x7d\x5d\x14\x41\x7e\xfe\x02\xc4\x59\xb0\xf8\x01\x84\xf4\x8b\x32\x66\x03\xb1\x9c\x45\xd9\xd6\xd7\x0d\x50\x78\xd1\x3e\x82\x30\x8e\x8b\x32\x0e\x67\xcc\x59\xc5\xfb\xc9\x40\x6c\xfc\xe2\xfb\x83\x23\xbe\xbf\x8c\x4d\x8a\x7f\x6e\xec\x94\x06\xaa\xf3\x87\xef\x4f\x05\x86\xba\x2c\x3f\x59\xeb\xda\x3d\xfd\x44\xaf\x2b\xa7\xed\xbb\x4f\xb6\xe6\xda\xd9\xdd\xda\xd9\xc9\xe8\xc8\xaf\xaf\xe1\xf3\xfb\x6b\xf8\xf6\x21\x35\x54\xbb\xcd\xa6\xd8\xbc\x3c\x5b\xfe\xcf\x47\x1e\x1b\x47\xf4\xfa\x71\xf5\xfe\xfd\xe3\xa4\xca\xaa\x65\xbd\x3a\x23\xfe\x0c\x89\xe3\x1e\xec\xcb\xdd\xe6\xa0\x1b\xa1\xd8\x7f\x64\x67\x15\x19\xf1\x7c\xfc\xb0\x42\xa0\xb3\xc7\xd1\x02\xa2\x33\x95\x88\x32\x6b\xbf\xd1\xc5\x30\xdd\xf5\x74\x32\x01\x65\x9a\x54\x59\xb9\x2c\x46\x5a\xa0\xab\xc8\xa0\x35\x48\xf9\xe3\xc5\x45\xfb\xf8\xec\x6b\x70\xe7\xb4\x1e\x16\xcf\xe6\x6a\x44\x9e\x17\xe7\x29\xe9\xc9\x6a\x6a\x17\x40\x6c\xc5\x42\x67\x8f\xd1\x23\x7d\x71\x71\x7e\x55\xec\xc1\xab\xac\x4a\xe8\xc8\x7f\xea\x97\x13\x0f\x97\xc2\x0e\x57\x77\x38\x6d\xae\x93\x13\xa9\xfe\xf3\xc6\x84\x69\x93\x3e\x4d\x5c\x43\xd6\xde\xbf\xef\x9e\xb2\xdf\xf7\x69\x1a\xd7\xde\x79\x6b\xa7\x7d\x0a\xce\xc8\x76\x61\xec\x37\x69\x53\xc2\xb2\x5e\xed\xe3\x70\xfd\x2b\xab\x12\x94\x82\x3f\x9f\x1b\xb5\xce\x63\x68\xb2\xd9\xdd\xe4\xae\x1a\x1b\x0e\xbd\x9a\x9b\x45\xfd\x49\xb1\xd9\xd6\x01\x7b\xa5\xff\xe4\x5f\x73\x7d\xf5\x6a\x6e\x17\x49\xd5\x1a\x7e\x27\xff\x9a\xeb\x34\xa9\xd3\xf4\x2a\x30\xcc\xe0\xd5\xdc\xa6\x8b\x57\x73\x9f\x36\xf6\x03\x91\xf3\xf9\x5b\xb6\x99\x6f\xdd\xda\xc5\x7a\x47\xb6\xdf\x23\xf6\x71\xc0\xe1\xa7\xa3\x9e\x1c\x33\x5d\xdb\xfa\xdd\xda\xcd\x2b\x77\x53\xbe\x76\x23\xf9\xbd\xe9\xe1\xdf\x33\x38\x94\xd2\x5f\xfd\xd2\xb1\x6b\x71\x78\xb7\x3d\x7f\x77\xab\xab\x80\xc1\xde\xb4\x3d\xce\xb7\xce\x98\xb0\xb0\xd9\x66\x7c\x79\xcb\xd0\xa0\xb6\xcb\xa3\xee\xa4\x49\x3a\x1f\xe6\xc4\xa1\xe3\x4f\x2f\xc0\x4d\xa7\x7f\x8f\x4d\x74\xee\x3c\x26\x1e\xfd\x73\xc4\x55\xff\xfb\x2e\x0e\xfb\x9f\xa0\xc9\xba\x38\x35\x6d\x18\x3a\x01\x3a\x33\xca\xc2\x3e\x3a\xc7\x75\x5f\x5c\x24\x9d\xc9\x7e\xdf\x8d\xb2\x0a\x12\xfb\xa0\xe2\x28\xb2\x31\xce\x46\x86\x39\x07\x3e\x45\x65\x77\x6b\x76\x19\x0d\x5d\xba\xcc\xf1\x9a\xcc\xac\x58\x6e\xa3\xa1\xcb\x70\xfd\xb6\x5e\x6e\xc7\xf6\x74\x3e\x6d\x6d\x5c\x7c\xb4\x71\x49\x76\x99\x59\xda\x68\x25\xb1\xce\xda\xed\x76\x07\x76\xc3\x42\xb5\xc0\xc4\xcd\x7c\xd2\xbd\x99\x14\x9b\x4f\x76\x21\x79\x9f\x26\x1b\x92\xa7\xe0\x7a\x69\x57\xd9\x1a\xfc\x96\x84\x87\x38\x15\x2c\xb8\x06\x3f\x27\x3b\x50\xa5\xe9\x81\x7a\xec\x9f\x89\x3e\x9c\x14\x71\x09\xef\x5b\x64\x3f\x3f\xd0\x9a\xfd\xb7\xf0\xfd\x7c\xbd\x7e\x38\xca\x97\x2b\xb0\x0d\x60\x97\xc1\xa7\xbb\x88\xed\x5d\x8f\xed\x06\xd7\xbb\x23\x5c\xc3\xa7\xd7\x11\xaf\xd7\x81\x0d\x5e\x67\x66\x79\xbd\x1a\xb8\x02\x0b\x6e\x3b\x0c\xaf\xc1\x7a\xc4\x54\x02\x13\x24\xc1\x9f\x93\x75\x90\x26\x5e\x67\x10\xbc\xcb\x6e\x3b\xb6\xe5\xf5\xb3\x77\x4f\xa7\xd3\xd7\x69\x62\xb3\xdb\xe5\xeb\x30\x4e\xbf\x25\x36\xa2\xf5\x35\xb8\x05\x37\xe9\x23\xdd\xa8\xc6\x6f\xe3\xbd\xcd\xe1\x69\x9d\xee\x8f\x90\xdc\x21\xd6\x17\xeb\xda\x55\x07\x58\xfd\x30\xe6\x6e\x74\x6d\xae\xdd\xd1\x44\xad\x0f\xb1\x56\x65\xf5\x60\x0e\x73\xa7\xca\xb2\xb7\x29\x8b\x71\x6d\xcb\x80\xd7\xed\x60\x32\x1a\x15\x9a\xcb\x55\x7b\x9f\xf6\x2e\x5e\xa7\x9d\xe8\x6c\xbb\x34\xa1\xd3\x2d\xde\x34\xd0\x03\xde\x0c\xd8\xa6\x17\x17\xad\x85\x8c\x3e\x9a\x5a\xc5\xf1\xd4\x1a\x26\x4e\x37\x6d\xd2\x3d\xb8\x71\xd5\x4b\x77\x80\x90\x26\x72\x54\x61\x7b\x2b\xf4\xc2\x1e\x6f\xd3\x77\x63\xc1\xf5\xcf\x9b\x31\x46\xaa\xc1\xa4\xaa\x77\x07\x8d\xf7\xb5\x1c\x7a\x0a\xde\xb5\xaa\xb3\xba\xb9\x78\xb5\x6a\x96\xf6\xfa\x23\x96\xf6\x7a\x69\x57\xef\xdf\x77\x0b\x3c\x2e\xcd\x5d\xab\x99\xdf\x46\x4b\xa4\x6d\x1a\xcb\x08\x35\x7c\x60\x69\x9e\xc5\x5f\x4f\x52\x17\xa7\xe7\x70\xa1\x9c\xbf\x25\x07\x18\x3a\x28\x32\x88\xcf\x3d\xfd\x5e\x9c\xd3\x23\x8d\x57\x7b\xdd\x0f\x07\xa8\xb2\xbf\x26\x69\x7f\x72\xd3\x16\x5d\xf4\x9c\x7e\x3b\xe7\x8a\x93\x39\xb7\x39\x99\x73\xf0\xe9\x3a\xce\xb4\x75\x58\xae\x61\xae\xad\x57\xed\x35\xf1\xd9\xcf\x01\x03\xe9\xa3\xdf\x12\x0d\x02\x5b\xbc\x06\x5b\xf0\x7b\x64\x7b\x4d\xe4\x7a\xa6\xa6\x61\x78\xc3\x67\xc7\xe7\x36\x9c\x30\x1c\x78\x60\x73\xc4\x03\x9b\xc8\x03\xef\x8f\xd6\xe7\xe6\x08\xd3\x2e\xae\xd5\x78\x6a\xe0\x9a\x69\x0f\x36\xa5\x75\xdb\xf0\x2d\x3e\xc4\xaf\xdd\x37\xb0\x2d\x7e\x8b\x5f\xc2\x27\x70\x37\xb7\xf5\xbb\xf0\x2d\x3e\x80\xc0\xf8\xc4\x6f\xda\x5c\xdf\x71\x02\x36\x10\xd1\x3b\x4c\x79\x9f\xe1\xab\x9f\x9b\x51\x0c\xd5\x05\x3e\x2f\x0d\x8c\x5e\x5c\x2d\x8d\x87\xc2\x21\x7b\x75\xa8\x5c\x00\x65\x96\x04\x16\x33\xbd\xe3\x1c\xcd\xbd\x76\xd5\xbb\x93\x93\xb4\xfa\xf8\x10\xad\x53\xd2\x34\x07\x69\xe3\x93\xb3\x3a\x4d\xc1\x63\xf7\xfe\x7d\x2b\x15\x67\x59\xe6\xf6\xe9\xd5\x5f\x16\x9f\x3f\x3a\x65\x65\x1a\x25\x4a\xd9\x7a\xe6\xa5\xd1\xb0\xbf\xdc\x3c\xda\x3e\xce\xb2\xcd\xc5\x45\x63\x92\xbb\x4d\xe7\xa6\xbc\x7d\x97\xa4\xa1\x97\xed\x9d\x75\xf3\x72\x93\x15\xfb\x7d\x52\xb5\xee\x7c\x40\xd7\x75\x75\x16\x99\x3d\xd5\x0c\x73\x76\x7b\xab\x8d\x4b\x1b\x27\xa9\x86\xb3\xf7\x65\x75\x13\x9a\x58\x5d\xbd\x9a\x5f\x2f\xfe\x3c\x3e\xb9\x9a\x87\x32\x7f\x0a\xf2\x55\xe2\xc0\x59\x53\xf2\xa4\x9a\xaf\x4b\xa3\xd7\x57\x77\xa2\xfa\xae\x2e\x47\x13\xe5\x2a\x76\xbb\x39\x8f\x8c\xe7\x7b\xbb\x56\xf4\x4c\xda\x40\x0b\x2f\x5d\xfd\xbc\xae\xab\x22\xdf\xd5\xee\xdb\x1f\x13\x37\x8f\xed\x07\xae\xa9\x35\x4d\xb3\x2c\x4b\xb6\xd9\x2e\x0c\x66\x23\x3a\xe8\x2c\xe2\x6d\x9b\x65\x59\x71\x55\x2e\x92\x22\x0b\xfb\x67\x1d\x1d\x23\x76\x5d\x00\xf1\x86\x67\xbc\xaf\xe0\xfd\xfe\x44\x71\xf9\xbf\xd0\xa3\xb0\x7d\xfd\x57\x7a\x10\xd9\xde\x34\xa9\x40\x01\x7e\x69\x66\xd2\x24\x0c\xdd\x7c\x32\x8d\x93\x63\xd1\x49\x57\x67\x86\xeb\x4e\xf6\xfa\x23\x91\xf4\xd0\x72\xba\xa6\x46\x6d\xc9\x07\xe6\x4e\x56\x4d\x27\x93\x3b\xd7\xcc\x43\x26\x48\x4f\x40\xb2\x2c\x2b\x47\xf8\xbd\x2a\x16\x45\x8b\xd3\xea\xde\xc1\xfe\xc8\x26\x24\xee\xa1\x55\x36\xa3\xd5\xaf\xdc\xb8\xca\xce\x2e\xdf\x7e\x24\xa3\x6a\xf5\xf4\x74\xbc\x9d\x5e\x2d\xd1\x8c\xda\x90\xa4\x0a\xdc\x71\x35\x7f\x11\xa5\xbe\x47\xa3\xa3\xeb\xf1\xe2\x6e\x93\xb6\x07\xd6\xe7\xf5\xf2\x27\x27\xeb\x8d\x9f\xd4\x1d\x34\xe5\xd1\xb9\xe2\x93\xe2\xcc\x30\xf7\x1a\x82\xb1\x4b\x4f\xf3\xb2\xc8\xee\xb8\xbf\xac\x2b\xbd\x68\x49\x63\x3c\x10\x2e\xd2\x8b\x8b\xb3\x46\x12\x63\x15\x79\x23\x2e\xde\x3b\x53\x40\x1d\x90\xb6\xdf\x47\x0d\x5c\x0a\xaa\xc1\xdd\xa6\x41\x62\x56\x83\x62\x7f\xde\x5a\xe3\xff\x4e\x17\x42\xca\x07\x34\x39\x4d\xda\x49\x16\xa5\xe5\xb3\xf3\xfc\x68\x23\x48\xdc\x34\x0b\xc4\xe8\xd5\xfc\xe5\xb0\x1b\x74\x04\x64\x10\xbc\xbb\x6d\xe1\x1c\x4a\xee\x21\x92\x23\xe9\x27\x94\x92\x8e\xf6\xbd\xe4\x3e\xa9\x1e\xdc\x91\xef\x60\xb9\x6d\x87\xe5\x56\x0d\x14\x34\x10\xcf\x2a\xd3\xa0\xc8\xb6\x3d\xb6\xc2\x3e\x3a\x71\x1b\xdb\x56\x17\xe8\xe4\xa7\xf1\xf6\xe6\xf3\x0e\x53\xf7\xf6\xba\xc7\x23\x28\x81\xbe\xa3\xdf\xdb\x3b\xfb\xdd\x6f\x19\x60\x1d\x77\x81\x43\x8c\xef\xba\x43\xa5\xbb\xd0\xb2\xce\x76\x77\x15\x1d\x70\x9a\x65\xeb\x06\x27\x11\x19\x17\x17\xeb\x48\x94\xf4\x22\x29\xb3\x75\x74\x40\x0b\xbb\xcb\xae\x9b\x45\xfd\xe6\x31\x60\xa5\x4e\xd3\xf4\x94\x99\x3a\x50\xf0\x01\x9d\xf5\x19\x6a\xb0\xcd\x22\x5e\x27\xd3\xbb\x50\xb1\xeb\x94\x5c\x4d\xeb\xe7\xe5\x06\x98\x56\xfd\xb7\x6b\xd5\x54\x7a\x75\xd5\x5c\x13\xfd\x69\x12\x76\xaf\xd7\x65\x61\x3f\x81\x8f\xd6\xcd\xb0\x16\x59\x96\x99\xf7\xef\x1b\xff\x9c\xf5\x01\x67\x14\x38\x6e\x93\x82\x50\x66\xb6\xd9\x77\xa1\x27\x0a\x0b\xe2\xbd\xdc\x0f\x1f\xc4\xfb\x88\xfe\x9d\x23\xd9\xa5\x0f\x98\xd6\x23\xa4\xb7\x33\x30\x20\xba\xea\xf0\x5c\xb7\x1c\xeb\xf1\x1c\x8c\xa4\xb8\x5d\xab\xa7\x3b\xc2\xa0\x4b\xec\xf1\xdd\x2e\xd6\xfb\xb7\x86\xcd\x78\x6b\xd8\x84\xad\x61\xf3\xa0\xad\x61\xf3\x91\x5b\xc3\xb9\x12\xee\xd8\x58\x0f\x8d\x18\xa3\x23\xe7\x87\x68\x66\xf9\x38\xce\xe0\x30\xee\x45\x56\x1e\xd1\xcc\x91\x9f\x4e\xff\x7a\x73\xa0\x27\xdc\xba\x7a\x58\x37\xa0\x0e\xa2\x6d\x3b\x1c\x25\xa8\xd2\x14\x6c\x3a\xf2\x59\x0e\xe4\xb3\xdc\xc7\xb2\xbb\x53\xe6\xc9\x64\x11\x08\x2e\xa8\xdd\xdb\xfa\x1c\xe7\x33\xea\xf8\x24\xa4\x99\x9c\xe3\x99\xdd\x07\x78\xaf\x56\xd4\x68\xd9\xc8\xa6\x48\xf7\xb6\xfe\xa2\xdc\xd4\x6e\x33\xe8\xc9\x27\x93\x45\xbd\xdf\x27\xdd\x82\x6d\xaa\x0b\xd3\xfc\x01\x1c\xd9\xb8\x3c\xb7\xdf\x27\x9d\x53\xe4\x64\xb2\x70\x81\x0f\x4d\xf7\xa0\x21\x34\x67\x04\xe8\x58\x40\x37\x71\x9b\x54\x13\x90\xb8\x41\x10\x3e\xe9\x4a\xfc\xa5\x91\x23\xbf\x2d\xad\x3b\x32\x56\x8b\xd9\x46\x7a\xf4\x20\xf4\x4e\xab\xc7\x59\xe6\xba\x43\xa8\xfa\xe2\xa2\x6e\x6b\xfa\xe2\xba\x58\xdb\x06\x33\xfb\xb4\x31\x95\x75\xfb\xf6\x00\xe8\x5e\x31\xb2\xf0\xcd\x42\x01\x67\x16\xc9\xef\xe3\x1b\x8f\x4e\xa4\xca\x58\x78\xeb\xe4\x57\x1c\xfb\x7a\x36\x6e\xa2\x8d\x25\x5f\x7b\x46\xd1\x35\xfb\x93\x4d\x43\xcb\xc6\xe4\x7c\x3f\xc6\x61\xa4\xa9\xbd\xbd\xc2\x79\xc6\xe2\xfc\xec\x28\x46\x04\xb4\xcc\x8a\xa6\x89\xf1\x44\xe5\x71\x96\x55\xe9\xa1\x97\x64\xb2\xc9\xaa\xac\xec\xad\xe5\x74\xf4\x22\xd4\xa1\xe5\x9b\xa5\x1e\x9b\xc3\x26\x9b\x6c\xd3\xd9\x0b\x36\x12\xb1\x71\x89\x06\x5d\xc8\x9f\x7d\x5b\x4f\xa0\xab\x77\x71\xcb\x77\x10\x8a\xea\x2e\x42\x71\xd4\xaf\x72\xd4\x2f\x9d\x95\x43\xbf\x74\xe0\x96\xd2\xdf\xa3\x28\xac\xd3\xde\xa8\x71\x70\xb4\x3c\x36\xc1\x6d\xfd\x2e\x8b\x63\xb7\xd7\xc2\x27\xc5\x72\x37\xee\x75\xf8\x9a\x6d\xdb\x2e\xee\xc2\x76\x79\x71\x51\x34\xca\xbb\x6d\xba\x6f\xdb\x10\xe4\xec\x74\x10\xb4\x1b\x95\xca\x5d\x6a\xe0\xbb\x95\x16\x57\xa3\x71\xff\x00\x61\x38\xc7\x04\xa6\xbf\xff\xa5\x43\x4f\xa3\xe6\xc9\xee\xba\xe8\x77\x7f\xcc\xa8\xf6\xe6\x24\xd3\x1a\xdc\x53\x5e\x1d\xba\x59\x47\x2a\x72\xb8\x0e\xea\x36\xc5\x7e\x50\x23\xfd\x5f\xe8\xfe\xe7\x43\x73\xdb\x56\xfc\x8f\x31\x70\xa6\xc8\x7b\x91\xd0\x26\xda\x37\xaa\xb3\xff\x11\x0e\x4e\x8c\x6f\x3f\x66\x8b\x3d\xdb\x85\xd0\xa6\xd0\xfc\xbb\x5a\x1f\xf5\x7c\xc0\x9d\x89\xed\x13\x6d\xe3\x9a\x83\xc7\xac\x8a\x54\xbc\xc8\xaa\xa8\xbc\x3b\xb4\x1d\xfe\xbe\x2a\x6f\x8a\xad\x1b\xda\x5e\x02\xdd\x71\x45\xad\xab\x82\x0e\x8b\xef\xd4\x6d\x01\x66\xd9\x6c\x56\x5c\x5c\x94\x49\xba\xdf\x3f\xaa\xce\x9e\x7e\x56\xc3\xe9\x67\xac\xbf\xdc\x3c\x0a\x72\x92\xbb\xb8\x48\x92\x3a\x9a\x4c\x0f\xcc\xde\x8b\x79\x73\x80\xdb\x2d\x55\x50\xcf\x5f\xcc\xfb\xf3\xdd\x83\xb7\x61\xa3\x8a\xdf\x77\x69\x73\x1e\x9c\xd5\xfb\x74\x1f\x6f\x6c\xef\x78\x90\xbb\xc3\x6a\xf6\xd1\x54\xc7\xb7\x5b\xc4\x59\x54\xcd\xdd\xdb\xdb\x72\x13\xf7\x50\x50\xed\x13\x92\x3e\xa4\x3c\x34\xeb\x4b\x44\xb3\xff\x4e\x99\x49\xe2\x2e\x33\x9c\x3e\xcb\xd0\xd5\x41\x6b\x17\x78\xa8\x0b\xc7\xba\xd2\x27\xf8\x43\xd5\xc5\x1c\xdf\x7f\xf5\x90\xae\xb8\x4b\x77\x99\x24\xf5\x14\xa5\x97\x6e\x76\xd2\x91\xf2\xb5\xab\xb6\xd7\x65\xd9\x16\x8d\xe6\x02\x22\x26\x1f\xd2\x9f\xd9\x6c\x5c\xf2\xb4\x4e\xa7\xe8\xbf\x56\x76\x87\x2b\x74\x75\xd4\xfa\x45\xe2\x66\x19\x4e\x8f\x2a\xc6\xa7\x18\xbb\xa3\xee\xc8\x8b\xd4\x2e\xc3\x97\x1d\x06\x2b\x97\x25\xe3\x06\x0d\xcc\x7b\x13\x59\x73\x5b\x6c\x12\xf4\x24\xa9\xdb\xd3\x17\xfd\x36\x41\x51\xd8\xba\x4c\xaa\x27\x59\xed\xd2\xb1\x56\x61\xc4\x62\x5e\x0e\x63\x0a\x10\xbc\x9c\xcd\x5c\x1b\xce\x33\x94\x97\x6c\x66\x2e\x7d\x52\xa5\x83\x26\x40\xdf\xdc\xae\x8b\x7a\x67\xcf\x5e\xe9\x1e\x5b\x75\x59\xbb\x74\x0f\x8a\xf9\xad\xab\x8a\xd2\x66\x63\x9d\xc3\x38\x59\x48\xb3\x4f\x10\x98\x1f\xcd\xc9\xff\x4e\xb7\xd0\xec\xa0\x63\x33\x04\x2f\x9b\x78\x7d\xe3\xce\xb9\xe9\xe6\xff\x8f\x9d\x4b\x92\x30\x2d\xdc\x0c\xa5\xcf\xe0\xd5\xf1\xf8\x9d\x1b\xbd\x05\x3e\xc5\xc6\x61\xba\x69\x4c\x37\x9a\x9c\xff\x4b\xb8\x68\x0e\x97\xa2\x61\xd4\xc9\x39\x12\x66\xf0\x74\x17\x3c\xa1\x48\x61\x99\xb9\x61\x71\xb9\x66\x49\xed\x47\x98\xda\xb8\x23\xb7\xb0\xa7\x8f\x93\x63\x23\xa5\x74\x64\x9f\x14\x5d\x68\x1e\xc7\xe3\x96\x41\xa8\x18\xdc\x65\x5c\x3c\x09\xcb\xbe\x0c\xdc\xbb\x1b\x6c\x94\xce\x9b\x9c\xf4\x1b\xc6\xb9\x30\x05\x67\xb6\xea\xf4\xf7\x7f\x74\xbb\xed\x3e\xdd\x83\xf3\x85\x8e\x0c\x5c\x4f\x18\x04\x50\x3d\x72\x63\xfb\x99\x7f\x5e\x25\x75\x63\x18\x14\x3d\xaf\xe2\xa9\x62\xb4\x35\xff\x6b\x92\x82\xd0\x63\x97\x0e\xfd\x71\x7d\xf4\x9a\xa8\x5c\x88\xa2\xda\x89\x23\xca\x7f\xe7\xe4\xb1\x3b\x77\xbc\xb8\x68\xce\x1a\xeb\x78\xd6\x58\xbd\x7f\xbf\x71\xf1\x08\xf2\xe8\x5c\xfb\xf4\xb4\xb0\x33\xf6\x29\x5c\xb6\x0c\xad\x5d\x81\xd2\xdd\x65\x22\x76\xc6\x22\xad\x89\x8e\xb3\xb9\xcb\x34\xac\x68\xdd\xa8\x8a\xe8\x23\xd8\xd8\x83\xfd\xe7\xe2\xa2\x3a\x71\x17\x6c\x9a\xb7\x5c\xba\xd5\x0a\x14\xa1\x1b\xd3\x4d\x7a\x20\x91\x75\xb1\x27\x86\xea\x3f\x10\x1f\x41\x9b\xba\x78\x7d\xde\x5d\x78\xe4\xe0\x3c\x32\x04\x3e\x4d\xf8\x8f\x8f\x75\x05\xc5\xe9\xa1\x8a\x79\x3f\x52\x9e\x8c\xa4\xdd\xd0\xd9\x28\x83\x1d\x4c\xb1\x22\x3d\xb6\x35\x6b\x18\xe2\xf9\xd6\xd5\x4d\x04\xcb\xc1\xc1\x2d\x9e\xd8\xcf\x8b\x6d\x73\x72\xef\xd2\x4e\xb2\x6b\xcd\x56\xc7\xd1\x1e\xc7\xbe\x70\x9d\x19\x6b\x53\x66\x09\x5c\x10\x88\x87\xc8\x8c\x87\x3f\xd7\x31\xc4\x50\xb9\x02\x65\x90\xf3\x36\xe9\xbe\xab\xdc\xf5\xb3\x73\x1b\xc6\xdd\xb5\xe9\xb7\xc0\x2d\xb7\xab\x91\xb9\x61\xf1\x10\xdf\xca\x02\x5c\xeb\xed\x19\xd2\x34\xf9\x74\x32\x75\x9d\xe2\x61\x0f\x5e\xba\x3b\x15\x39\xcb\x98\x74\xb5\x07\x5b\x77\x1c\x81\xef\x34\x55\x6b\x39\x76\xaa\x37\xe9\x25\x83\x98\xae\xd7\x90\x75\x2d\xe8\x8d\x09\x63\x59\xf5\x6a\x0f\xa2\x7b\xc6\x59\xc3\x83\x2e\x4f\x3a\xf9\x34\x9e\x28\x2f\xe1\xea\x30\x7b\x68\xec\xaf\xee\xdd\xf6\xd4\x57\xb0\x8d\xf5\x12\x5b\x72\x54\x4c\x1d\x8b\x69\x5d\x59\xeb\x56\xb6\x46\xc3\x02\x77\xfb\x46\xaa\xfe\x9f\x94\xda\xf4\x6d\x5c\xa4\xdb\xd4\x55\xf1\x3f\x29\xf3\xf7\x5f\xdd\xbb\xc5\xd0\xdc\x56\xf2\xef\xb0\x38\xae\x2a\x9a\x22\x9c\xd4\x03\x3f\x50\xcd\x74\x18\xac\xd0\xdc\x68\xc1\x70\xef\xa0\x04\x01\xae\x1f\x97\x96\xfc\x3c\x46\x6d\x19\x8f\xe1\xbe\x31\x7b\x18\xcf\x8b\x0f\xf4\xb3\x43\x1b\x18\xf5\xb2\xd1\x7c\x35\x94\x55\x8f\x5d\x07\xb7\x81\x2a\x34\xca\xf5\x91\xeb\xf1\xa3\xed\x68\x79\x9c\xd3\x8f\x05\x8a\xb1\x3d\xa1\x18\xdb\x53\x8a\x11\xe8\x85\xb6\x36\x39\xa0\x16\xae\x63\x8e\x0e\xa2\x1d\x9d\x21\x0e\x31\xfa\x51\x5b\x40\xa0\xd8\x07\xa4\x61\xf4\x63\x1d\x7f\x06\x9b\x20\xbe\xf6\xd7\x16\xec\xef\x5a\xe2\xdb\xb8\xc4\x77\xf3\x6b\xbd\x05\xda\xda\x7b\xd7\x71\xab\x26\x5f\xb5\x16\x9f\xfd\x3a\xdd\xb5\x8a\xc5\x76\xd9\xed\xe6\xf1\xb3\x9b\xf1\xbb\x18\x6a\xaf\x99\x41\xbb\xb1\x2d\xcb\x6e\x6c\xca\xb2\x8b\xc8\xea\xfc\x39\x1b\x12\xda\x37\x19\x98\x6c\x3d\xbf\xd1\xb7\xd1\x44\x2a\x8e\x23\xb8\x6e\xd5\x55\x93\x22\xb0\x6c\xa6\xa8\x27\x23\x5b\x73\x3b\x50\x0c\x1d\x58\x98\x6c\xb9\x02\x9b\xec\xfa\x5c\xe0\xc3\xac\x08\x5b\xa1\xce\xea\xf9\xcb\x40\x75\xa3\x9a\xfe\x71\xe3\x7a\xb3\x79\x9c\x65\xd7\xfd\x1e\xf8\xa8\x6e\xe9\xb2\xce\xaa\x66\xf5\x14\x03\x7e\xdd\x32\xd1\x33\x94\x7e\xd6\x0d\x5f\xef\xd6\x3f\x70\x1b\xcb\xd5\xc2\x77\x71\xf7\x40\x31\xb7\xe5\x8d\x2e\x0e\x79\x9b\x58\xf3\x91\xaa\x63\xf0\xd8\xef\x9d\x90\x63\xa8\xe1\xd0\xaf\x81\x6b\x01\x25\xd8\x86\xf9\xb3\x1b\x47\xcb\xda\x3e\xdb\x3d\x4d\xa3\xd7\x79\x52\x36\x11\xe9\xb6\xab\xb4\x09\x53\xd0\x75\xa5\xed\xc8\x66\x20\x54\x45\xe0\x6d\x2b\xbd\x79\x79\x96\x03\x3e\x17\x1b\xd1\x77\x21\x10\x63\x04\xc4\xae\x99\xa1\x98\xd6\xe1\xf7\xa1\xb1\x10\x5d\x1f\xf0\xd0\x94\xb7\xef\xb2\xd3\x1d\xdf\x26\x69\x8b\xb6\xa4\x4a\x9b\x46\x26\x2e\xed\xaa\x49\x36\x91\xe7\xee\x87\xf8\xf6\x40\x2d\x13\xf2\x76\x09\x9b\x83\xb0\x46\x3b\xd2\x94\x07\xca\xac\x6a\x0a\x04\x3a\x5b\x42\x80\x56\x60\x9b\x3d\x46\x5d\xe0\x39\x60\xb2\x39\x1b\x26\x8f\xef\x35\x2d\x45\xd2\xa9\x84\x81\xcf\xf4\x12\xad\x9e\xe9\x25\x5c\x45\xeb\x3d\x3f\x83\x2b\x60\xc3\xcb\x99\x5f\x3d\x72\x59\x62\x67\xd7\xe9\x93\x91\xc4\x53\xcd\x76\x53\x7c\xb9\x4e\xc1\x36\x9a\x3d\xc5\x5f\xfc\xba\x2c\xab\x18\x97\xf1\x7a\x1a\x73\xcc\xdc\x65\x52\xcd\x76\x69\x7a\x69\x40\x9d\xb9\xcb\x04\xcd\x76\x4d\x8e\xeb\x26\x47\x55\xee\x36\x36\xb9\x4e\x41\x3d\xfe\x5e\xb7\x6a\xfd\xdb\xe1\x94\x2d\xf6\x2e\x0d\x88\x3b\x88\x6f\x30\x8c\xed\xf5\xd4\x5d\xd6\x03\xcd\x2f\x13\x7f\x75\x3b\x84\x17\x5b\xdc\xf6\x73\xbd\xdd\x2c\xab\x0e\x9f\xa0\x3a\x37\x99\xef\x1c\xe8\x20\xd3\x01\x9f\xa4\xe9\xa2\x08\xd3\xa4\x3a\x9e\x6d\xf7\xe5\xd5\xd9\x72\x1a\x63\x5b\x4f\xdd\x12\xad\x56\x4d\x31\x7a\x98\x73\x6d\x61\x3f\x04\x24\x9c\x2d\xf1\x28\xff\x36\x7b\x0c\x43\x21\x21\x67\xae\x37\xf6\x4d\x61\xeb\xeb\x33\x33\xaf\xde\x47\xdf\x08\x77\x7b\xe6\x37\x17\xab\xbd\xb3\xc6\x93\x3e\x6c\xb3\xc7\x8f\x5d\xd3\xf2\x40\x41\xe7\xb7\xda\xda\x62\xf3\xf2\x61\x99\x77\xd9\x7a\x90\x9a\x21\xe8\x4d\x4e\x51\x3c\xa8\x8e\x85\xee\x46\x85\x7e\xb5\xd9\x3c\x34\x72\xe8\xee\x63\xca\xfd\x6e\x57\x3f\xb4\xdc\x0f\xb6\x77\x1d\xca\xd5\xeb\xe2\xe5\x03\xe7\x8f\xf9\x50\x81\x26\x14\x78\x07\x09\xb9\x1d\x48\x48\x91\xa4\x1d\x11\xd1\x69\xbb\x6e\xb6\xe9\x01\xe6\x92\x5d\x7a\xd0\xe3\x64\x9d\x36\x2d\x4d\x4c\x90\x3d\x92\x91\x5f\xc2\x4d\x72\xa2\x6b\x6f\xf4\x67\xed\x11\x5a\x6c\x50\xcf\xb8\xf6\x83\x5e\x1f\x94\xdf\x39\xca\xd4\x07\xad\x38\x79\xdb\xa4\xad\xef\xea\xa3\x4b\xaa\x24\x9e\xaf\xee\x93\xd0\xdd\x83\x0e\xa1\xb4\x09\x22\xf0\x3a\x3a\xd9\x80\x77\xe7\x50\x7e\x6e\x8a\xef\xc1\xb9\x09\x3a\x75\x7b\x90\x37\xf4\x72\xa0\x8e\x2f\xc6\xdc\x7d\x52\xcf\xb2\xa8\x81\xba\x3a\x55\x94\x24\xd5\xcc\xa5\x4f\xea\xfd\xe2\x5d\x52\x8f\x30\xf9\x66\xf0\x32\x69\x8e\xe9\xe2\x82\x2d\xb3\x18\xad\x5e\x47\xbe\x2e\x1a\x99\xf7\x17\x8a\x7c\x52\x3e\x2b\xae\x92\x22\xab\x92\xb2\x35\xbc\x4e\xb6\x40\xa7\xe9\x22\xbe\x2b\x40\xd9\xbc\xd3\x60\x9b\x9e\x75\xed\xd1\x91\x24\xa5\x23\xdf\xc5\x2f\xdb\x26\xf4\x3c\x42\x3f\xcd\xfa\xd0\x90\x9d\x09\x78\xda\x78\x22\x1e\x3a\x70\x1c\x7c\xdd\x65\x33\x14\x77\xea\x20\xae\x3d\x6b\xe4\x8d\x91\x99\xeb\x28\x84\x63\xf4\xc6\x3f\x79\x9b\x3e\x9d\x4e\x77\xcf\xca\xa7\xa9\x5e\xee\x56\x59\x28\x66\xb7\x02\x6e\xb9\x9b\xa2\x55\x0a\xb6\xe1\x5d\x91\xd4\xe1\x5d\xdd\xbc\x3b\x39\xdc\x38\xb5\x60\xcd\x8b\xad\x33\x75\xf4\x26\x02\x08\x94\xe9\x0c\xf5\x56\x17\xcb\x6a\x95\xe8\x00\xea\x03\x8c\xbc\x3d\x14\xd9\xba\x35\xe4\xba\x87\x7e\x29\xb9\xf6\x33\x4d\x1b\xb5\xd0\x6d\xb9\xd6\x75\x78\x3d\xfe\x96\xa6\x73\xb3\xd6\x37\xb7\x89\x6b\x3f\xc7\xce\x96\x3f\x9e\xba\xbe\xe5\x40\x67\x39\xd8\x66\xaf\xe7\x1a\xec\xb2\xc7\x68\x14\x0a\x7b\x14\xed\x6c\x18\xa5\xb2\xf7\xf3\xe8\x03\xce\xe2\xab\x2f\x17\x6f\xc0\x26\x2b\x1a\x8f\xf2\xeb\xa1\xbe\xeb\x61\x0f\x4c\x36\xd1\x20\x26\x4c\x24\x0d\x76\xf7\x5a\x18\x8c\x3d\xd2\x9a\x9b\x51\xaa\x6c\x5a\x9d\x22\x7f\x7c\x83\x55\x74\x40\x77\x7f\xc8\xaa\x2b\xb4\x88\x5e\x4d\xfb\x7d\xe2\xd2\x85\x0b\x13\x33\x8d\x77\x0d\x74\x5b\xf1\xbc\xd8\xbc\x76\x67\xaf\x1c\x48\x8a\xf7\xef\xe3\xbc\xd6\xa0\x04\x2f\xfe\x37\x1a\x09\xaf\xea\xd0\x48\x74\x55\xf5\x8d\xac\xd3\x45\x1d\x9b\xe8\xd2\x3d\xb8\xfe\xa8\xdd\xbe\xcc\x4c\xe7\x92\xfb\x32\x05\xeb\x40\x9f\xcb\x61\xbf\xbe\xfe\xb8\xcd\x7f\xe0\x9f\xd7\x47\x1b\xff\xf5\x07\x37\xfe\x21\x6f\x98\x47\x2e\x94\x10\xb2\xc5\xf9\xf7\xd0\x1d\x32\x6c\xdc\xeb\x76\x2f\xbc\x1e\xcf\xe8\x87\xee\xfc\x6d\xf6\xed\x3e\x56\x1f\x46\xe6\xbb\xac\x4a\x58\x0a\x9e\x9f\x8d\x63\x10\xdd\x3e\x03\xbd\xd3\x99\x5b\x0e\x77\x54\x05\xfa\xd7\xaf\xe5\xba\x30\xbf\xfe\x58\xbb\xdb\x34\x4e\xda\x4e\xc9\x87\xe0\xa2\x4e\x1f\xb5\x77\x1c\x0c\x6e\x85\xdf\xcd\x63\xf4\x96\xfa\xc7\x5b\x67\x0a\x5f\xb8\x2a\xed\x63\x3f\x4c\x80\x8f\x76\x39\x4d\x2c\xa5\x78\x01\xc2\x64\x3b\x59\x34\xd2\x70\xbf\xe3\xde\x71\xd3\xd9\x81\x36\xf0\x71\x90\x8f\x2a\x67\x8a\x6d\x51\x6e\xde\xbf\x6f\x02\xe4\x17\x43\x13\xfa\xdf\xbe\xaf\x9c\x2f\xde\xa6\x49\x34\x9d\x7b\xff\x3e\x19\x65\xcb\x8a\xde\x54\xb1\x6b\x73\x97\xba\x02\xbb\x34\xde\xa2\x30\x99\x2c\xe2\x87\x6b\x3f\x5f\xb6\x9f\xb7\xed\x67\x35\x59\x7c\x54\x73\xe2\xe4\x09\xad\xf9\x60\x6f\x4f\x5b\x3b\x4b\x26\x2e\x5a\xff\x37\xe8\x1b\x5f\xf6\x30\xf1\x6d\x7b\x3e\xfb\xc8\xf6\xfc\xa9\x78\xeb\x42\x7b\xce\xd4\x86\x2f\x93\xc9\x67\xe3\xfa\x3a\xca\x71\x84\xb3\xc0\xef\x8f\xc4\xe2\x5f\xc7\x4e\x18\xcd\x2a\x1e\x3c\x69\xc3\x44\xda\x9e\xe8\xda\xab\xac\x1e\x0e\xaf\x0f\x26\xdd\x36\x4d\xaa\x30\x37\xab\x65\x35\x9a\x99\x9d\xb4\x8b\xe0\x22\x10\x8b\xa6\xd8\x3f\xc5\xc6\x8c\xa7\xf8\x70\x5a\xf2\x3c\xa9\x93\xb4\x75\x8c\x71\xf3\x4d\x61\xdc\xc1\x99\x4a\x3b\x3d\xa3\x91\x2f\x82\x8d\x54\x53\x44\x43\xfe\x2e\x14\x73\x39\xdc\xdd\xb6\xcb\xca\xa5\x5e\x81\x75\x56\x8e\x7c\x9e\xd6\xcf\x76\xd1\x01\x64\x07\x76\xd9\x1a\xac\xb3\x02\x14\xf1\x76\x87\x2d\xd8\x86\x59\x96\x14\x87\x6b\xe9\xab\x8d\xa9\x5c\x58\xb7\x69\xb2\x03\x6b\x50\xa5\xe9\x1f\x60\xcf\x1d\x37\xf2\xd9\xee\x49\x91\x5e\x16\xa0\xe5\x6c\x8d\x2b\xd6\xc9\xba\x79\xf5\xc1\xb2\x16\xf1\xee\xc1\xae\xb8\x98\x75\x77\x59\xa4\x4f\xfa\xd2\x9a\x1a\xd6\xcd\xbb\x0f\x16\x07\x8a\xd0\xb8\xd0\xe9\x33\xed\x0b\x48\x38\x6d\x62\x9d\x94\x7d\x33\x86\x8c\xe3\x96\x0c\xf9\x0e\x1a\x13\x33\x02\xb7\x07\x6e\x1c\x58\xa7\xd3\x04\xfe\x98\xbc\x00\xaf\xe7\x66\x50\x19\xde\xc5\x9d\x06\x4e\x22\x06\x70\x01\xbf\x1e\x38\xf6\x7e\x33\x28\x2f\x0f\xf9\xc9\xfa\x80\xdf\xec\x39\x90\x76\x87\xac\x41\xc7\x8c\x64\xf5\xf1\x66\x52\xdd\xab\xb7\x68\xf7\xa5\x2a\xec\x4b\xf5\x81\xe6\xe2\x4e\xce\xfa\x9b\x41\x7a\x70\xb1\x03\x75\x43\xc4\xbf\x38\x7f\x26\x13\xe3\x32\x8e\x59\xbd\x74\x98\xaa\x65\x8c\xcc\x18\x09\x7b\xd1\x4f\x55\xfd\xac\x8c\x13\x7d\x13\x18\x15\x50\xc4\xd0\x49\x25\x28\xe3\x74\xad\x52\x10\x43\x2d\xd6\xed\xa8\x94\xe1\x7b\x11\xbe\xc7\xb1\xd3\x61\x68\x06\xa4\xfd\x70\xc8\x84\x37\xc3\xb9\x2e\x5f\x26\xf5\x13\x97\x9e\x63\xc6\x3f\xe9\x53\x54\x4f\xce\x71\xe5\xdf\x1f\x86\x4e\x7c\x06\xcf\x94\x31\x18\x4a\xcc\xc2\x16\x36\x1c\xbe\xce\x1c\x40\xb3\x2a\x1d\x59\x13\x55\xa7\xa6\x21\x87\x59\xda\x1c\x43\x03\xfe\x33\xda\x5a\x8b\xed\x9f\x8a\x4d\x11\xdd\x44\xae\xa6\xc9\x04\xb9\xc9\x34\xf0\x51\xcf\x60\xe0\xaf\x86\x2c\x7f\x1c\x1f\x8d\xc3\x2c\x90\xa5\xff\x2c\x5c\x96\x35\xd8\xf8\xb2\xb1\xf3\x70\x6f\x47\x71\x88\xea\x3b\x2c\x56\x86\x32\xbf\x1d\x33\x4b\x47\x45\xad\xcb\x97\x8b\xa6\x9e\x8b\x8b\xee\x05\x82\xef\xdf\xe3\xc3\x57\xf8\xfd\xfb\x4e\xdf\x13\xf0\xed\x46\x42\x49\x7d\x3a\x1c\x75\xfa\xc4\xed\x47\x03\xf1\xd5\x59\x46\xaf\x1f\x02\x97\xcc\x0e\xda\xfb\xf5\x68\x85\xfe\x00\xbe\xef\xe7\xef\x12\x01\x04\xe3\xcd\x30\xdd\x4e\x00\x02\x81\x05\x45\xf6\x6d\x82\x60\x0a\xca\xec\x8f\xe1\x73\x98\x51\x7a\x14\x2e\x38\xfb\xb6\xf1\xff\xfd\x63\xf8\xa8\x93\x74\x09\x57\x91\x9e\x14\xd9\x57\x49\x11\x7e\xf8\xaa\xa5\x15\x3d\x31\xc8\xf5\xf6\x81\x4c\x52\x95\x4d\x1d\xd0\x81\x4b\xaa\xc2\x86\xf0\x31\xbc\x66\x13\x9f\x3f\x64\xad\x93\x7e\xef\x39\xdd\xd2\xa2\x8f\x72\x12\x04\xb3\x6d\xd8\xbf\xd6\xd9\x76\xb9\x1d\x76\xb0\xa7\x89\xce\xd6\xcf\x76\xe9\xc5\x45\x62\xfb\x3d\xc3\x36\x1b\x4f\x0c\x95\x04\x6c\x56\x34\x37\xd7\x14\xc9\x3a\x05\x37\xd9\x68\xcb\x9b\x3a\xf0\x3a\x5b\x36\xd1\x1a\x93\xea\x33\x94\x5e\x5c\xdc\xce\xec\xb3\x9b\xa8\xdb\xb5\x63\x0d\x9d\x0d\x82\xe3\xed\xf8\xcd\x6d\x3a\x45\x60\xd7\xdd\x8c\xf1\xd4\x3e\xbb\x8d\x9e\xbe\xe1\x8b\xcf\x10\x30\x59\x99\xd8\xf4\xa9\x8f\x0e\xd7\xbe\x39\xbd\x4f\xae\x33\x73\xe9\xd3\x67\xbb\x26\xb6\xe7\xf5\x1f\xd6\x69\xc3\x77\xbc\x6e\xf4\xba\xd7\xe9\x7e\x3f\x1c\x12\x1c\x96\x58\xcd\x86\x32\xff\x90\xa1\xa7\xb3\xd9\xc7\x16\xfa\x3a\x3b\xe6\x07\x2c\xb8\x1d\x34\x32\xb7\x33\x0b\x6e\xd2\x46\xdd\x58\x0e\xfe\x25\x57\xaf\x47\x4a\xc5\xd7\x77\x71\x08\x75\x10\xff\xfb\x23\x90\x4d\xb4\x57\x8f\x4b\xab\xba\x9a\xcc\xa1\x9b\x2c\x26\x60\x92\x82\x33\xb6\x7e\x4d\xd2\x13\x36\x68\x93\x86\xa9\x9e\x65\xe8\x09\x1c\x14\xfa\x2d\xb3\x7c\x71\x91\xd4\x3d\x6f\xa1\xc7\x46\x29\xd5\x65\xfd\xa4\x9d\x45\xbd\xa2\xf7\xac\xf4\xd4\xf2\x54\x4f\xca\x64\x34\xa0\x51\xab\x30\x38\x73\x5d\x56\xcf\xaa\xd9\x9c\x85\xda\x2e\x03\x35\xaf\x9f\x65\xfa\x2a\x7a\xda\x4e\x26\xfb\x53\xde\x67\x10\xb6\x93\x2f\x22\x8b\xf4\x7b\xa4\xfb\xe7\xce\x67\xda\x5a\x9b\x7d\xa1\xa9\x75\x0f\xc2\xae\x70\x4f\xe2\xb8\x69\xb4\x69\xf7\x69\x5c\x2d\xf7\x6c\xd8\x5f\x27\x69\x5c\xc2\xd1\x53\x6a\xcc\x00\xfc\xe9\x64\x5b\x98\x8d\xa9\x7e\x9d\x2e\x0e\x09\x69\x9f\xf1\xb7\x9e\x2e\x21\x50\x67\x3f\x26\x87\x32\x6b\xa7\x20\xca\xfe\x94\x54\xc0\xa5\xb3\xa4\xce\xfe\xd4\xd8\x63\x8e\xf6\xae\x4d\x9f\xee\x4f\xc9\x26\xa4\xaa\xd3\x27\x55\xd8\xb7\xaa\xb1\x61\xc0\xd8\xa7\xe1\x4c\x79\xe0\xb4\xb8\x4f\xfe\x94\xd4\xd3\xea\x72\x03\xd0\x93\xe8\x64\x19\x43\x20\x1c\x72\xcb\xf5\x60\xf2\xf7\xc0\x53\x92\x20\x7b\x47\xbd\x5c\xbc\x25\xea\x4e\x0e\xe3\x6d\x52\x83\xdf\x92\xb4\x2f\x3e\x2a\xa6\x1a\x46\xa3\x47\xdd\x5f\x86\xe4\x07\x49\xe7\x2c\x1d\xc7\x42\x1a\xce\x82\x41\x1d\x40\x15\x4f\x85\xc7\x06\x10\x8d\x7a\x0d\x82\x83\x39\xdf\x2b\xb6\x1e\x35\x37\x2b\x0d\xba\x2c\x3d\x43\xe9\xd3\xe9\xb4\x88\x46\x08\xcb\x62\x86\x56\x03\x01\x78\xb5\xd3\x9b\xba\x58\xbb\x34\x71\xa0\x78\x32\x04\x6c\x28\x0f\x8c\x2c\x9a\x23\xae\x46\xe2\x69\xec\xd2\x3a\x7c\x2e\x4f\x74\x53\x61\x9c\x56\x83\x33\x49\xc3\xee\x7d\xf9\xb6\x3e\xc0\xf9\x66\x70\x14\xec\x7c\xca\x07\xcb\x94\xe2\x19\xbc\x5a\x7e\xab\xbf\x05\xdf\xea\x6f\x57\x8b\x65\x60\x95\x9b\x66\x2f\xa2\x4c\x5d\x3c\xeb\xe4\x96\xf0\x3a\xbc\x1c\x49\xd8\xab\x3d\x28\x4f\xf6\x9e\xfa\xfe\x23\xba\x9e\xcd\x7b\x74\x70\x00\x5f\xb5\x6e\x0f\xf5\xb1\xdb\x43\x43\x7e\x92\x2a\x06\xcc\x48\x3b\x49\x30\x6a\x68\xde\xbf\x77\xdd\xe5\x30\x03\x43\x1d\xef\xd4\xd9\xcc\x75\x17\xb2\x3d\x05\xf1\x00\xa5\xfc\x18\x1d\x4a\x3d\xd2\x83\x14\x71\xa7\x1c\xd8\xde\xb2\x1f\xc5\xed\x99\x99\x59\x8d\x13\xde\x31\x7b\x3f\x1f\xf3\xc7\xad\x22\xb0\x0e\x19\xc6\x31\xb4\x7a\xdb\x01\x50\x67\x28\x30\x1d\xa0\xc8\x96\x73\xb6\x02\xe5\x31\xe7\xaf\xbb\xa0\x1d\xcf\x06\x7f\x90\xf2\x74\xa6\x14\xc0\x01\x08\xaa\x74\x75\x18\xb0\xad\x3b\x54\x6f\x2e\xbd\x3e\x08\x5d\x12\xcf\xcb\xab\xa7\x69\x11\x18\xea\x24\x86\xec\xbe\xac\x67\xc9\x66\x56\xa5\x97\x2e\x7d\x92\x54\x53\x34\x6c\x58\xdd\x1c\xd4\x27\xf3\xe1\x7e\xf9\x62\x1a\xa5\xe3\x3a\x7c\xa2\x55\x0c\x28\xb7\x58\x3a\x50\xaf\xf6\x40\x7f\xcc\x88\x55\x59\x52\x0e\x83\x36\x92\x20\xb6\x47\xba\x34\x7d\xff\x1a\xd1\x59\x79\x66\x8d\xe8\x83\x35\xa2\x9f\xa1\xab\xa5\x8b\xf7\xb6\xae\x16\xfa\x0f\x59\x75\xb5\x2c\x96\x55\xbc\x1f\x3c\x2c\xa0\x78\x95\x15\x28\x96\x7a\x15\x3b\x71\xc7\x24\xf8\x79\x98\x04\xb1\xbf\xdd\x44\x28\x23\x21\x1b\xdf\x24\xff\x8f\x81\x46\x85\xf1\xaf\xdb\x93\xd7\x2a\x43\x47\x07\xf5\x85\x4f\x8a\x67\x59\x71\x0f\xb5\x70\xa0\x68\xe7\x40\xb7\xf8\x4f\x46\x6b\xf3\x90\x53\xec\x4d\xa0\xf6\x77\x6b\xfb\x67\xe8\xf4\x94\xfb\x68\x2c\xef\xab\xa6\xfe\xb8\x6a\xea\x71\x35\xe7\x07\xb7\xd7\xef\x0e\x04\xb0\x27\x19\xcb\xe6\xaa\xf8\x28\x36\xae\xee\x39\x56\xff\xc7\x1d\xab\xb6\x88\xb2\xed\xab\xac\x4a\x60\x0a\x7e\xc9\xaa\x84\xa7\xe0\x5f\x31\xd8\xf4\x9f\x33\x0e\x2f\xff\x05\xfe\x16\x3e\xfe\x0c\x3e\xcd\x30\xbd\xfc\x1b\xf8\x7b\x26\x2e\x3f\x05\xff\xcc\x08\xbc\xfc\x14\xfc\x3b\x23\x9c\x5d\x7e\x3a\x8c\xe3\x5f\x8f\xee\xf0\xfc\xa3\xae\x8f\x6e\xec\x1f\xdf\xe8\x7f\x60\x48\x13\x92\x5e\x4d\xdd\x62\xda\xe7\x9b\x8e\x33\x36\x3e\xdc\xa0\x1a\xae\xec\x03\xeb\x06\x2b\xbe\xd7\x4a\x80\xeb\xcc\xb7\x18\x04\x36\xf3\x9d\xc4\x73\x9b\xad\x93\xc9\xfc\xb3\xaf\x27\x81\x8d\x5f\x27\x93\xc5\x67\x3f\x4e\x52\xf0\x2e\x3c\x7e\xf6\xd5\xe2\xb3\x6f\x26\x29\x78\xd9\x7c\xf9\xe4\xb3\xdb\x49\x0a\xf2\xf8\x45\x7f\xf2\x99\x9d\xa4\xe0\x4d\xfc\x92\x37\x5f\xbe\x8c\x5f\x3e\x9f\xa4\xe0\xbb\xf8\xf4\xaf\x49\x0a\x9e\x67\xcb\xe5\x16\x20\xf0\xaf\x15\x58\x6e\x01\x03\xec\xb2\x79\x42\x0c\xa0\xee\x99\x40\x40\x60\x7c\xd6\x00\x81\x3f\xc7\xcf\x90\xb2\x79\x6a\x52\x36\xcf\x4d\xca\xf0\x5c\x02\x04\xfe\x16\x3f\x09\x20\x97\xcd\x13\x07\xbc\x7d\x42\x18\x20\x1c\x9f\x0b\x80\xc0\xa7\xf1\x13\x03\x7c\x19\x9e\x2a\x80\xc0\xdf\x57\x60\x59\x03\x04\xfe\x19\x3f\x43\x09\xe1\xc9\x01\x04\xfe\xbd\x5a\x8d\x55\x85\x03\x7b\xb5\x4d\x36\xe9\xb3\xcd\xd5\xed\x42\x37\x0f\x37\x8b\xb2\x79\x78\xb7\x28\x9a\x87\x97\x8b\xba\x79\xa8\x9a\x8f\x7c\xf1\x66\xe1\x9a\xc7\x2f\x17\xdf\xa5\x07\xd7\x5a\xfc\x94\xb4\x83\x35\x62\xf0\x7b\x1e\x1c\x9c\x86\xcb\xeb\xc8\x57\xaf\x80\x2d\x66\x55\xfa\xa4\x1e\xeb\xc0\x1b\x2a\x50\x56\x69\x72\xee\x48\x63\x89\x57\xfb\x74\x5e\x15\x2f\xaf\xeb\xe4\x39\xd0\xe9\xa3\x6d\x96\x65\xcf\x47\x27\x14\x67\x74\xe9\xd5\x93\x7f\x83\xe2\xc9\xbf\xe3\x2d\xbb\x99\x4b\x17\xdb\x90\x2e\xd9\x66\xcf\x97\xfa\xc9\xf3\xe5\x76\x86\x56\x4b\xbc\x7a\xf6\x7c\xb9\x0d\x9f\x4f\xf4\xd5\x76\x86\x16\xdb\x78\xd3\x23\xa8\xa3\x58\x99\x2e\x92\x72\x60\xab\xce\xd5\xd0\xf8\x2f\xa3\x78\x39\x6b\x3a\xbe\x15\x23\xcb\xca\xab\x7a\x51\xb7\xf1\x73\xca\xfe\x37\x7f\xf7\xa9\xd0\xb0\xa4\xae\x1b\x8e\xd1\x7f\x8c\xe0\x6c\x93\xfe\x8c\xc6\xb9\x34\x5d\xd8\xa4\x91\xda\xfe\x1a\x0b\x3a\x16\xa2\xc7\x0a\x2e\x9b\xa4\xa0\xc8\x36\xcd\x01\xed\x66\xb9\x19\x29\x82\x75\x56\x3e\x2b\xfa\x6d\x26\xaa\xb5\x0a\x50\x44\x75\x56\x15\xa8\x5f\x52\x65\x3f\x45\xb2\x5d\x82\x3a\x4d\xaf\x5a\xcb\x8d\xa4\x00\xe5\x14\xa5\x8b\xe5\x0a\xe8\xf0\xae\x97\x14\xab\xae\x29\xa7\xba\xe4\x81\xf1\xee\x4e\x3f\x7e\x5d\xac\x23\x05\xf3\x47\x32\xd5\xc8\x66\xcf\xf6\x5a\xed\xc4\xc5\x86\x9c\xd1\x65\x87\x76\xd9\xe4\x8b\xc8\x8a\xa6\x0b\x1f\xca\xbb\x93\x6d\xf7\xe0\x2c\x1d\x0a\x8d\x88\x64\xb4\x3a\x2b\xda\xb9\xe4\xd5\xfc\x57\xf0\x6a\xee\xc1\xab\xf9\x7f\xc0\xab\xb9\x06\xaf\xe6\x39\x78\x35\xb7\xe0\xd5\xfc\x25\x78\x35\x37\xe0\x97\x68\xb8\xde\x74\x7a\xd8\x57\xfb\xe1\xc6\x8e\x00\x18\x26\xd1\xd1\x1b\x9c\xae\xd2\x3d\xd8\xdc\x59\xe9\x6b\xf0\x6a\xfe\x0a\xbc\x9a\xef\xc0\xab\xf9\x1a\xbc\x9a\xdf\x80\x57\xf3\x12\xbc\x9a\x57\xe0\xd5\x7c\x03\x7e\x99\xef\x6a\x73\x5c\x67\x28\x7d\xfe\xf3\x4f\x5f\x0c\x75\x1e\xbd\x69\xea\x2c\xce\xf2\x35\xae\x89\x35\x97\x3c\x99\xff\xce\xf7\x4f\x5e\x9e\x5e\xb2\xd2\xa4\x9b\xfc\x3f\x93\xa9\xdb\x07\x8e\xd1\x65\x85\x4b\x26\xc8\x0b\x91\x53\xef\x85\x87\x0e\x1b\x0d\xb1\xb1\x1c\x0b\x2c\x15\xe5\x22\xb7\xd2\x30\x4e\x73\x47\x84\x30\x58\xf8\xf0\x97\x9b\xdc\x62\x8c\x44\xee\x8c\x9f\xa4\x40\x37\xa5\x10\x45\x72\xa1\x18\x66\x54\x13\x9e\x73\x67\xbc\x32\xca\x59\xc7\x89\x50\x44\x49\xa3\x31\xc3\x39\x33\x9e\xe7\xc6\xd9\x5c\x19\x69\xb8\x25\x28\xb7\xca\x11\xe5\x44\xae\x19\x76\xc2\xe4\x8a\x4a\x4a\x0c\x51\xda\x52\x45\xb5\xe5\x1c\xf1\xdc\x09\xc5\x95\x11\x39\x45\x82\x68\xc6\x90\xa2\xc6\x71\x9b\x5b\xeb\x94\xb3\x7c\x92\x82\x6d\xdb\x02\x24\x71\x6e\x79\xae\x9d\xe5\xca\x19\xed\x90\xe1\x36\x77\xde\x71\xc6\xa0\xf5\x56\x5a\x62\xbc\xd5\x8e\xe7\xde\x5a\xa8\x31\x41\x9a\x30\x2a\xa8\xa1\x82\x6b\x64\x95\xca\x8d\x70\xca\x40\xc1\x78\x9e\x23\xe5\x94\x36\x32\xf4\xd5\x1a\xab\xad\x76\x39\x27\xe1\x4f\xf1\xf0\x97\xdb\xf0\x67\x55\xf8\x9b\xa4\x60\x37\xc6\xa4\x76\x46\x38\xd9\xe0\xd3\xfb\x3c\x17\xb2\xc1\xaa\x92\xd6\x4b\xdd\xe0\xd6\x7b\x25\x15\x6f\x30\x6c\x58\x0e\x2d\x6b\xf0\x6c\xa8\x32\x8a\x36\xd8\xf6\x22\xe7\xb6\xc5\xb9\x11\xe1\xaf\xc1\x7c\xa8\x5a\xda\x06\xff\xca\x59\xed\xd8\x24\x05\x6b\xd7\x84\x49\x35\x7d\xe4\xc1\xd7\xf3\x3c\xed\x68\xe2\xda\x85\x2f\x04\x42\x30\x67\x00\xf6\xa7\x7e\xcd\xeb\x19\xa6\xf1\x3d\x0a\x82\xfa\x3d\xd9\x67\x28\xe4\x17\x0c\xcc\x09\x3b\x2a\x42\x42\x80\xe6\x0c\xcc\x65\x9a\x82\xeb\x7b\x8a\xc0\xfc\x21\x25\xd8\xbe\x84\xe6\xb7\x14\xdc\x1e\xce\xf7\xc4\x3d\x83\xef\xdf\xbb\x3f\xa0\xf4\xe2\x22\x71\xb3\x23\xb3\xbe\xc6\xbf\x6d\xd8\xca\xdc\x6c\xce\x7a\x5e\xdc\xba\xf9\x75\x46\x38\xbc\x74\xb1\x3b\xd6\xcd\xb7\x19\x9a\xb3\x19\x9a\xb3\xcb\x3a\x7c\x5d\x67\x73\x39\x9b\xab\xf8\x65\x3a\x19\xdb\xbb\xde\xb8\xf1\xc9\x5e\x6b\x41\x7c\xac\xa7\x1a\x79\x28\x2d\xcf\x99\x50\xd5\x33\x04\x46\xcd\xad\x2e\xeb\x34\x4d\xdb\x48\xb7\xaf\x5d\x76\xe3\x92\x30\x91\x28\x85\x88\x51\x4a\x21\x66\x9c\x32\x48\x99\xa0\x0c\x32\xa6\x28\x87\x82\x69\xca\xa1\x64\x86\x72\xa8\x99\xa5\x1c\xe6\xcc\x51\x01\x2d\x87\x54\x40\xc7\x11\x15\x08\x72\x42\x05\x42\x9c\x52\x81\x08\x67\x54\x22\xca\x05\x95\x88\x73\x49\x25\x12\x5c\x51\x89\x24\xd7\x54\x22\xcd\x0d\x95\x28\xe7\x96\x4a\x64\xb8\xa3\x12\x59\xee\xa9\x44\x5e\x40\x2a\x31\x14\x88\x4a\x8c\x04\xa1\x12\x13\x41\xa9\xc4\x54\x30\x2a\x31\x13\x9c\x4a\xcc\x85\xa0\x12\x4b\x21\xa9\xc4\x4a\x28\x2a\xb0\x16\x9a\x0a\x6c\x22\xb4\x22\xa7\x22\xac\x69\x2a\xb0\x17\x96\x72\x02\x85\xa3\x9c\xe0\x08\x89\xf0\x94\x13\x2a\x21\x65\x84\x49\x44\x19\x11\x11\x4a\x89\x29\x25\x4a\x12\x4a\x89\x8e\x30\x97\x94\x12\x62\x23\x74\x92\x51\x4c\x7c\x80\x14\x4a\x4e\x31\x45\x92\x53\x44\xb1\x14\x14\x51\x2a\x05\x85\x94\x49\x49\x21\xe5\x52\x12\x4f\x45\x84\x52\x2a\xe2\xa8\x8a\x50\x47\x68\xa4\x26\x96\xda\x08\x9d\xd4\xc4\x50\x1f\x20\x83\x32\x27\x39\x43\x11\x62\x99\x13\xcd\x48\x84\x54\x1a\xa2\x18\x8b\x90\x4b\x43\x24\x93\x11\x2a\x69\x88\x60\x3a\xc2\x5c\x5a\xc2\x99\x89\x30\x90\x1a\xc6\x5c\x84\x5e\x5a\x12\x06\x2c\x40\x24\x2d\x21\x1c\x47\x48\xa4\x25\x98\x53\xe9\x08\xe6\x4c\x3a\x12\x06\x27\x40\x11\xa1\x94\x8e\x40\xae\x22\xd4\xd2\x61\xcf\xf3\x08\x8d\x74\xd8\x71\x1b\xa1\x8b\xd0\x4b\x87\xad\x80\x11\x22\xe9\xb0\x69\x21\x8e\x90\x48\x87\x73\x41\x23\x64\xd2\x61\x2d\x78\x84\x22\x42\x29\x5d\x18\xb9\x08\x75\x84\xa1\x16\x29\x4c\x84\xa1\x16\x21\x5c\x84\xa1\x16\x21\x43\x2d\x5c\xa2\x08\x71\x0f\x99\x24\x11\xd2\x08\x43\x2d\x54\xf2\x08\x43\x2d\x44\xca\x08\x55\x84\x5a\x5a\x8c\x65\x1e\xa1\x89\xd0\x4a\x8b\x91\x74\x11\xfa\x00\x15\x8c\x10\x49\x83\xa1\xc2\x23\x48\xa4\x41\x5e\xd1\x08\x99\xcc\x91\x57\x3c\x42\x11\xa1\x8c\x50\x49\x8d\xbc\xd2\x52\x23\xa7\xf2\x08\x8d\x54\xc8\x29\x2b\x15\xf2\xca\x45\xe8\xa5\x44\x5e\xc3\x08\x51\x0b\x05\xf2\x1a\x4b\x81\xa1\x26\x92\x63\xa8\xa9\xe4\x18\x69\x26\x19\x46\x9a\x4b\x86\x03\xb2\x02\x94\x92\x62\xa2\x95\x24\x98\x6a\x2d\x09\x66\x3a\x97\x18\x33\x6d\x24\xc6\x5c\x5b\x89\xb0\x88\x50\x6a\x27\x21\x56\xda\x0b\x8f\x75\x0e\x85\xc7\x26\x47\xc2\x61\x9b\x63\x61\xb1\xcb\x49\xa0\xef\x39\x15\x86\xa0\x9c\x89\x9c\xe0\x9c\x0b\x4d\x68\xce\x85\x22\x2c\x17\x42\x11\x91\x4b\x21\x89\xcc\x95\x10\x44\xe7\x5a\x70\x92\xe7\xb9\x60\xc4\xe6\x46\x50\xe2\x73\x23\x08\x85\xb9\x15\x98\xe2\xdc\x09\x44\x69\x1e\xd6\x2c\x37\x30\xac\x5f\x83\xb8\xa3\xda\x20\x6e\xa9\x31\x98\x1b\xea\x0c\xe1\x39\x83\x86\x72\xcd\xb0\x61\x5c\x31\x6a\x18\x97\x8c\x1b\xce\x05\x93\x46\x70\x16\x3a\xc1\x29\x33\x46\x72\xc2\x9c\x51\x1c\x73\x68\x34\x87\x9c\x98\x9c\x79\xce\x4c\xce\x1c\x17\xc6\x30\xc3\x95\xb1\x2c\xe7\xc6\x58\xa6\xb9\x33\x8e\x49\x01\x8d\x67\x42\x10\x0b\x19\x17\xcc\x42\x46\x85\xb0\x88\x11\xa1\x2d\x62\x48\x18\x8b\x19\x14\xde\x12\xea\x24\xb2\x84\x5a\x49\x2d\xa5\xb9\xe4\x96\x85\x75\x69\x19\x95\x32\xb7\x9c\x72\xe9\x2c\xa7\x4c\x41\x2b\x28\x51\xc4\x0a\x8a\x14\xb3\x92\x42\x25\xad\x24\x4e\xe5\x56\x11\xa3\xac\x55\x24\xd7\xd0\x6a\xa2\x34\xb6\x9a\x08\xcd\x6c\x4e\xb8\x96\x36\x27\x54\x6b\x6b\x08\xd6\xd6\x1a\x02\x73\x68\x2d\xf6\x39\xb6\x16\xdb\x9c\x59\x87\xf3\x5c\x5a\x87\x55\xae\xad\xc3\x32\xb7\xd6\x63\x6e\xa0\xf5\x98\x19\x6c\x3d\x26\x86\x39\x88\x91\x91\x0e\x62\x18\xd8\x07\xe4\x8d\x75\x08\x59\x0b\x1d\x42\xc6\x62\x87\x51\x6e\x99\xc3\x48\x87\xa5\x81\x94\xd5\x8e\x20\x65\xad\x23\x48\x5a\x1f\xa0\xc3\x8e\x22\xe9\x98\xa3\x48\x39\x11\xa1\x76\x0c\xe9\x80\x24\x14\x58\x11\x86\x8c\x47\x8e\x21\xeb\xa9\xe3\xc8\x79\xee\x38\x86\x5e\x3a\x8e\x91\xcf\x9d\xc0\xc4\x5b\x27\x30\x9b\xa4\x29\x78\xd7\xef\x06\x30\xfc\xa3\x10\x41\x08\x19\x44\x10\x41\x1e\xa1\x84\x18\x22\xa8\x20\x86\x18\xe6\x11\x5a\x48\x20\x81\x3e\x40\x84\x21\x85\x14\x51\xc8\x20\x45\x1c\x72\xc8\x90\x8c\x50\x43\x01\x39\x32\x50\x42\x81\x1c\x54\x50\x60\x08\x35\x94\x38\x94\xa1\x30\x85\x06\x2a\xcc\x61\xe0\x8f\x14\x74\x30\xc7\x39\x82\x30\xc7\x16\x21\x68\xb0\x47\x18\x5a\x82\x10\x81\x96\x84\xb2\x1d\xe1\x88\x41\x47\x24\xe2\xd0\x93\x1c\x49\xe8\x89\x45\x0a\x41\xe2\x91\x46\x90\x62\x64\x10\xa4\x14\x59\x14\x76\x25\x87\x10\x55\x18\x22\x44\x73\x8c\x10\xa2\x0e\x63\x84\x18\xc4\x14\x61\x46\x30\x43\x98\x31\x2c\x10\x66\x12\x2b\x84\x98\xc6\x1a\x21\x66\xb0\x41\x88\xf9\x50\x3f\x47\xd8\x23\xc4\x09\x41\x08\x71\x46\x08\x82\x5c\x10\x8a\x20\x57\x84\x23\xc8\x73\x22\x11\xe4\x86\x28\xe8\xb9\x23\x39\xf4\x02\x12\x0b\xbd\x40\xc4\x43\x2f\x30\x85\xd0\x0b\x4a\x31\xf4\x82\x51\x0a\xbd\xe0\x94\x21\x28\x44\xd8\x2d\x85\xa4\x2a\x42\x8d\xa0\x50\xd4\x20\x24\x34\x75\x08\x05\xae\x18\x61\x91\x33\x84\xb0\x30\x0c\x23\x22\x0c\xa3\x88\x08\xcb\xc2\x36\x6b\x99\x40\x4c\x38\xa6\x22\xd4\x88\x0b\xc7\x0c\xe2\xc2\x33\x8b\x84\xf0\xcc\x23\x29\x3c\x87\x48\x4a\xc8\x31\x52\x12\x72\x8a\xb4\x84\x9c\x45\x28\x50\x2e\x21\x97\xc8\x48\xc4\x75\x84\x39\xb2\x12\x71\x1b\xa1\x43\x4e\x22\x01\x91\x97\x48\xe0\x08\x09\x86\x12\x09\x86\x51\xd8\xc0\x23\x94\x18\x4b\x24\x14\xc6\x12\x8b\x1c\x13\x89\x85\x89\x30\x50\x5e\x2c\x61\x40\xa4\x0c\xe8\x44\x92\x44\xaa\x4d\x23\xe4\x58\x48\x24\x65\x84\x0a\x4b\x89\x64\x8e\x95\x0c\xd4\x56\x45\xca\xae\x25\x52\x30\x42\x84\x73\x89\x14\xc1\xb9\x84\x8a\x62\x23\xa1\xe2\x11\x4a\x6c\x25\x54\x2a\xc2\x1c\x3b\xe1\x95\x89\xd0\x61\x2f\xbc\x86\x11\xa2\xb0\xdb\x6b\x12\x21\x23\x48\x38\xcd\x09\x12\x36\x90\x4c\x61\xb5\x26\x44\x58\x9d\x13\x22\x8c\xb6\x84\x0a\xa3\x1d\xa1\x22\xcf\x21\x61\x22\xcf\x71\x84\x84\x70\xa1\x73\x16\xa1\x20\x42\xa8\x5c\x46\xa8\x89\x14\x32\x37\x24\x90\x7d\x4b\x94\x10\xb9\x27\x5a\x08\x03\x89\x16\xdc\x60\x92\x0b\x66\x28\x31\x82\x19\x46\x8c\xa0\x46\x10\x2b\x88\x91\xc4\x09\x62\x34\x71\x02\x1b\x43\xbc\x40\xc6\x52\x28\x90\xf1\x14\x0a\x68\xc3\x12\xf1\x16\x53\xcc\x03\x8d\x22\xdc\x59\x46\x29\xb7\x81\x16\x71\x63\x65\x84\x8a\xf2\xc0\xf5\x07\x59\xc1\x1a\x2a\xb9\xb2\x8e\x2a\x2e\xad\xa7\x9a\x4b\x07\xa9\xe1\x01\xf1\x96\x73\x47\xa8\xe3\xcc\x51\xea\x39\x75\x8c\x41\x4e\x9d\x60\x98\x07\xe6\x85\x70\xec\x14\xa3\x1c\x3b\xcd\x38\x47\x2e\x67\x82\x43\x67\x98\xe4\xd0\x59\xa6\x99\x77\x8e\xe5\xcc\x39\xcf\x2c\x73\x1e\x32\xcf\x9c\x47\x1c\xb2\x40\xa8\x70\x84\x94\x19\x4f\x38\x63\xc6\x53\x2e\x22\x54\xcc\x78\xc6\xa3\x64\xc5\x4d\x84\x8e\x19\x2f\x04\x8c\x10\x33\xe3\xa5\xa0\x11\x72\x66\xc2\x66\xc9\xac\x57\x42\x45\x98\x33\xeb\xb5\x08\x75\x69\x11\xea\xd2\x12\x31\xef\x73\x49\x22\x64\x1c\xfa\x5c\x0a\x8e\xbc\x91\x2a\x42\xcd\xb1\x0f\x82\x1b\xf1\x46\x3a\x4e\xbd\x51\x90\x33\x6f\x15\xe6\xdc\x07\x04\x09\x6f\x15\xe7\xd2\x5b\x25\xb9\xf2\x56\x69\xae\xbd\x55\x39\xcf\xbd\x53\x96\x1b\xef\x94\xe7\xd6\x3b\x8d\xb8\xf3\x4e\x13\xee\xbd\xd3\x4c\x20\xef\xb4\x10\xd8\x3b\xad\x04\xf1\x4e\x6b\x41\xbd\xd3\x46\x70\xef\xb4\x13\xc2\xbb\x1c\x0a\xe9\x5d\x8e\x85\xf6\x2e\xa7\x22\xf7\x2e\xe7\xc2\x78\x97\x0b\xe1\xbc\xcb\x95\xf0\xde\xe5\xb9\x44\xde\xe5\x56\x62\xef\x72\x2f\xa9\x77\x06\x49\xe6\x9d\xc1\x52\x78\x67\xa8\x94\xde\x19\x2e\xb5\x77\x46\x4a\xe3\x9d\xd1\x81\x64\x1b\x23\xbd\x77\xc6\x2a\xe8\x83\x30\x85\xbd\xb3\x48\x51\xef\x2c\x51\xcc\x3b\xcb\x94\xf0\xce\x0a\xa5\xbc\xb3\x52\x69\x6f\xad\x56\xc6\x5b\x6b\x94\xf3\xd6\x3a\x0d\xbd\x75\x50\x23\x6f\x1d\xd6\x81\x72\x13\xcd\xbc\x75\x4c\x8b\x40\xc5\xb5\xf2\xd6\x29\xad\xbd\x75\xb9\x36\xde\x04\x89\xd4\x1b\xe7\x72\xe8\x8d\x87\x39\xf6\xc6\xe3\x9c\x7a\xe3\x69\xce\x7d\x90\x8b\xa5\x37\x5e\xe4\xca\x1b\xaf\xf2\xdc\x1b\x9f\xe7\xd6\x1b\x6f\x73\x1f\x76\x83\x97\x0f\xdb\x0d\x74\xdc\x07\x4c\x84\x0e\x12\x88\x51\x48\xdb\xec\x06\xa4\xdd\x0d\x04\xe4\x90\x22\x05\x05\x64\x28\x87\x12\x32\x64\xa1\x82\x1c\x79\xa8\xa1\x88\xfb\x80\x88\xfb\x80\x8c\xfb\x80\x8c\xfb\x80\x8a\xfb\x80\x8a\xfb\x80\x26\x10\x05\x46\x09\x23\x0a\x73\x42\x11\x83\x39\x11\x88\xc3\x9c\x28\x24\xa1\x21\x06\x29\x68\x88\x43\x39\x34\x14\x21\x03\x0d\x25\xc8\x41\x43\x19\xf2\xd0\x04\x79\x02\x1a\xaa\x31\x81\x86\x9a\x50\x0f\xf5\x81\xd1\x60\x08\x4b\x98\x33\x82\x15\xcc\x19\xc3\x39\xcc\x99\xc0\x16\xe6\x4c\x61\x0f\x35\xcb\x09\x82\x9a\x19\x82\xa1\x66\x8e\x50\xa8\x99\x27\x1c\x2a\x8e\x48\x24\x4b\x44\x41\xc5\x09\xc9\xa1\xe2\x94\x58\xa8\x38\x23\x0e\x2a\xce\x29\x84\x9a\x0b\x8a\xa1\xe6\x92\xd2\x08\x19\xd4\x5c\x51\x01\x73\xae\xa9\x8a\x50\x43\xc3\x73\x6a\x22\xb4\xd0\x72\x43\x7d\x80\x0c\x41\xc7\x0d\xc3\xd0\x05\x36\x05\x7a\x6e\x19\x8b\x30\xc8\x57\x81\xea\x07\xa8\x11\x0a\xeb\x0d\x61\xee\x98\x8d\xd0\x23\xc2\x1d\x47\x11\x62\x44\xb9\xe3\x14\x31\xee\x38\x8b\x50\x20\xce\x1d\x57\x11\x6a\x24\xb8\xe3\x06\x49\xee\xb8\x8d\xd0\x23\xc5\x9d\x40\x11\x06\xc6\xd3\x09\x1a\x21\x43\x39\x77\x42\x20\xc3\xad\x90\x11\x6a\x64\xb9\x15\x26\x42\x8b\x1c\xb7\xc2\x23\xc7\x8d\x84\x28\xc8\x08\x18\x43\x6e\x24\xc5\x90\xe7\x81\x83\xe5\xb9\x14\x11\x46\x26\x55\xea\x08\x0d\x26\x5c\x49\x1b\xa1\xc7\x94\x2b\x15\x84\x4d\xa9\x70\x84\x04\x73\x2e\x14\x8b\x50\x60\xc1\xb9\x92\x11\x6a\x2c\x39\x53\x39\x56\x9c\x2a\x1b\xa1\xc7\x9a\x13\x0d\x23\xc4\x38\xe7\x58\x13\x6c\x38\x0a\x6c\x26\x87\x9a\x63\xcb\xa1\x96\xd8\x31\xaf\x15\x76\xcc\xe9\x1c\x7b\xe6\xb4\x25\x90\x05\xf6\x09\x32\x93\x43\x82\x58\x9e\xa3\xc8\x4c\x93\x08\x29\x21\x4c\xe5\x9c\x50\x26\x73\x41\x18\x13\xb9\x22\x8c\xf1\x5c\x07\xd2\x97\x07\x69\x8b\xe6\x96\x48\x46\x72\x4f\x14\xc3\x81\xf6\x33\x64\x10\xd1\x0c\x1a\x42\xc2\xa2\xa2\x24\xf0\xbc\x3c\x48\x79\x46\x04\x89\xcf\x04\x49\x30\x37\x9a\x42\xaa\x4d\x4e\x11\x55\xc6\x50\x4c\xa5\x71\x34\x6c\x40\x9e\x06\x82\x0f\x29\xa3\xcc\x62\xca\x29\x0d\xdb\x12\x25\x96\x52\x49\xb1\x65\x54\x53\x64\x05\xcd\x89\xb7\x92\x1a\xe2\xac\xa2\x96\x58\xab\xa9\x23\xc6\xe6\x0c\x92\xdc\x5a\x86\x88\xb6\x8e\x61\x22\xad\x67\x84\x08\x07\x19\x23\xdc\x21\x16\xd8\x69\xcc\x04\xa1\x8e\x30\x45\x88\xa3\x4c\x13\xe4\x18\x33\x04\x3a\xce\x2c\xf6\x4e\x30\x87\x9d\x93\x1c\x62\xeb\x14\x47\x38\x0f\xdb\x25\xd6\x2e\xe7\x14\x2b\x97\x73\x8e\xa5\x33\x5c\x60\xee\x2c\x57\x98\x39\xc7\x35\xa6\xce\x87\xed\x2e\xb0\x90\x18\x79\xc8\x3d\x86\x1e\x09\x84\xbc\x47\x82\x20\xeb\xb1\xa0\xc8\x78\x22\x38\xca\x7d\x10\xae\x95\xa7\x42\x21\xe9\x99\xc8\x91\xf0\x2c\xb0\xe7\x9e\x0b\x87\xa8\xe7\x12\x22\xe2\x85\xc4\x08\x7b\x21\x29\x82\x5e\x4a\x06\xbd\x97\x52\x40\xe7\xa5\x54\xd0\x78\x25\x73\x98\x7b\x25\x0d\xd4\x5e\x49\x07\x95\xd7\x0a\x42\x19\x06\x15\x0a\xaf\x15\x85\xc2\xe7\x8a\x43\xee\x73\x25\x22\x54\x11\xe6\x11\x5a\x28\xbc\x51\x3e\x40\x8d\xa0\xf4\x46\x13\xa8\xbc\xd1\x0c\x6a\x1f\x44\x0c\xe3\x8d\x96\xd0\x7a\xa3\x35\xf4\xde\x68\x13\x58\x6f\xed\x10\xf6\x26\x87\x88\x7a\x93\x63\xc4\x7d\x18\x36\xe9\xf3\x9c\x23\xed\x03\xb9\xb7\x3e\xcf\x35\xf2\x3e\xcf\x4d\xe0\x9e\x73\x87\x89\xd7\x06\x62\xee\xb5\xc1\x58\x7a\x6d\x28\xd6\x5e\x1b\x8e\xad\x57\x46\x60\xef\x95\x51\x04\x7b\x65\x72\xc2\xbc\x34\x96\x08\x2f\x8d\x27\xda\x0b\x8b\x88\xf5\xc2\x92\x66\x99\x53\xe2\xb9\x15\x94\x7b\x66\x15\x55\x9e\xd9\x9c\x1a\x4f\xad\xa5\xde\xd3\x30\xb6\x9e\x86\x51\xf5\xc4\x11\xa6\x3d\x71\x2c\xec\xcc\x8e\x73\xe4\xb1\x93\x9c\x79\xec\x34\x57\x1e\x39\xc3\xad\x47\xce\x0a\xe4\x91\xf3\x82\x79\xe4\x91\x50\x1e\x7b\x2c\xac\xc7\x9e\x4a\xec\x89\x67\x92\x7b\xe2\xc3\xbe\x44\xbd\x94\xce\x33\xaf\x14\xf6\xdc\x6b\xc5\xbd\xf4\xb9\xd2\x5e\x79\xa3\xac\xd7\xde\x6a\xe4\x8d\xf7\x9a\x86\xdd\x20\x1f\x76\x03\x0b\xa5\x14\x08\x42\x21\x65\x60\xba\xa4\x42\x1c\x0a\xa9\x91\x82\x5c\x1a\x94\x43\x2e\x2d\xb2\x30\xc8\xe3\x10\x72\xe9\x03\x69\x50\x10\x53\xc8\x15\xc2\x1c\x32\x15\xe8\x2e\x53\x18\x6b\xc8\x14\xc1\x06\x32\x45\xb1\x83\x4c\x31\xec\x21\x53\x9c\x20\xc8\x94\x20\x24\x42\x06\xa9\x92\x44\x40\xaa\x14\x91\x90\x2a\x4d\x74\x84\x06\x52\x95\x13\x07\xa9\x32\xc4\x07\x48\x11\xa4\xca\x52\x02\x89\x72\x94\x46\xc8\x21\x51\x9e\xca\x08\x15\x0c\x19\x73\x48\x34\xa2\x06\x62\x8d\xa8\x83\x58\x63\x06\x23\x44\x10\x6b\xc2\x48\x84\x0c\x62\x4d\x19\x87\x48\x53\x26\x23\x54\x10\x69\xc6\xf2\x08\x0d\x44\x9a\x33\x17\x20\x87\x11\x22\x08\x83\xa8\x1c\x21\x8d\x90\x47\x28\x20\xd4\x92\xab\x08\x75\x84\x26\x42\x17\xa1\x0f\x30\x20\x51\x4b\x81\x21\xd2\x52\xd0\x08\x59\x84\x22\x42\x19\x61\x20\x74\x52\xe4\x11\x5a\x48\xb4\x14\x2e\x40\x09\x21\xd5\x52\x22\x48\xb5\x90\x04\x32\x2d\x24\x8d\x90\x43\xae\xb9\x14\x50\x68\x2e\x25\x94\x9a\x4b\x0d\x95\x66\x32\x87\x5a\x33\x69\x61\xae\x99\x74\xd0\x68\x2a\x3d\xb4\x3a\x88\x21\x4e\x13\x85\xa1\xd7\x44\x51\x14\x84\x30\x86\x90\x46\x61\xa3\xd3\x48\x49\x44\x35\x54\x0a\x31\xe5\x95\x46\x5c\x79\x65\x90\x50\x4e\x59\x24\x95\x55\x0e\x29\x65\x35\x44\x5a\x19\x8d\x50\xae\x72\x8d\x91\x55\x3a\x10\x1b\xa5\x35\x43\x5e\x29\xcd\x31\x54\x52\x0b\x8c\x94\xd0\x12\x63\xc5\xb5\xc6\x44\x31\x9d\x63\xaa\xa8\x36\x98\x2b\xaa\x2d\x16\x8a\x68\x87\xa5\xc2\x39\xc4\x4a\xa1\x1c\x61\xad\x60\x8e\x71\x2e\x7d\x4e\xb0\x91\x2e\xa7\xd8\x49\x9b\x33\xec\xa5\xc9\x39\x81\x32\xcf\x05\x41\x52\xe7\x92\x60\x19\x78\x74\x22\x65\x9e\x93\x20\xd6\x1b\xc2\xa4\xc8\x2d\x11\x92\xe7\x8e\x48\xc9\x02\xcd\x96\x34\xd0\x6c\x49\x0c\x22\xb9\xc4\x06\x13\x23\x91\x21\xc4\xca\xc0\x2c\x38\xe1\x0d\xa3\x50\x38\xc3\x29\x12\xd6\x08\x8a\x85\x31\x92\x12\x91\x1b\x45\xa9\xd0\x46\x53\x26\x02\x15\xe7\x22\x50\x71\x21\xa4\x31\x54\x09\x61\x2c\x0d\x32\x80\xa3\x79\x64\x8d\x8d\xa0\x16\x52\x2b\x88\x45\xd4\x09\x6c\x31\xf5\x02\x59\xc2\x90\x40\x96\x32\x2c\xa0\x0d\x04\xda\x5b\xc6\x68\x20\xac\x8c\x71\x6b\x05\xe3\x81\xe3\x67\x82\xe7\x56\x31\xc9\xb5\xd5\x4c\x47\x98\x73\x65\x73\x66\xb8\xb4\x86\x59\x2e\xac\x65\x8e\x73\xeb\x98\xe7\xcc\x3a\x8e\x38\xb5\x9e\x07\x2e\x1f\x72\xc2\x89\x43\x3c\x70\xf9\x98\x33\x8e\x1c\xe6\x9c\x07\x51\x39\xb0\xa3\x81\x5f\x77\x8e\x71\xcd\xac\x0b\x5c\xbb\x75\x91\x6b\x77\x82\x3b\x96\x3b\xc1\x3d\xd3\x4e\x0a\xc8\x94\x53\x02\x31\xe9\x94\xc0\x4c\x38\x2d\x28\x13\x2e\x17\x8c\x71\x97\x0b\xce\x98\x33\x42\x30\x1a\x58\x53\x46\x9c\x15\x9a\x61\xe7\x82\x9c\xea\xbc\x30\x11\x3a\x06\x03\xb9\xa5\xde\x43\x09\xa9\xf3\x48\x22\x6a\x3d\x92\x84\x1a\x8f\x25\xa5\xb9\x27\x92\x45\x28\xa8\xf6\x54\x4a\x1a\x16\xa7\xa2\xd2\x33\x99\x53\xe1\x99\x34\x94\x7b\x2e\x2d\x65\x9e\x4b\x4f\xa9\x17\x0a\x46\x88\x28\xf1\x42\x11\x8a\xbd\x54\x94\x22\x2f\x55\x60\x8e\x54\x60\xdd\xbd\x52\x92\xb8\x30\xcd\x88\xf3\x5a\xe5\xc4\x7a\xad\x0c\x31\x5e\x2b\x47\x72\x9f\xab\x40\x6b\x73\x8d\x88\xf2\xb9\xc6\x24\xee\x03\x11\x32\x12\x76\x06\x4e\x78\xd8\x07\x08\xf3\x46\x2b\x42\x7d\x94\x10\xbd\xd5\x26\x42\x47\xb0\xb7\xda\x13\xe4\x6d\x8e\x08\xf4\x36\xc7\xd8\x7b\x9b\xd3\x08\x19\x0e\x92\x80\xc0\xd6\xbb\x30\xa1\xbc\xcb\x75\x84\x39\x0e\xd2\x82\xc5\x41\x72\x70\x01\x1a\x88\x95\xb7\x06\x47\x48\xb0\xf4\xd6\x30\x2c\xbc\x35\x3c\x42\x19\xa1\x0e\x82\xa0\xc9\x31\xf7\xc6\x58\xcc\xbc\x31\x2e\x40\x0b\x23\xc4\x98\xf9\xdc\x12\x4c\x7d\x6e\x59\x84\x02\x53\xaf\xad\x8c\x50\x63\xea\x95\x35\x11\x86\xbc\xd2\xfa\x00\x1d\xc2\xcc\x0b\x87\x23\xa4\x98\x45\xcd\x0f\xf7\xdc\x49\xcc\x3d\x73\x2a\xc2\x1c\x0b\x4f\x9d\xc5\xc2\x13\xe7\x02\xf4\x10\x8b\xb0\x63\x60\xe1\x91\x0f\xe2\x29\xf2\x0c\xb3\x46\xa1\xe1\xa1\x57\x18\x4d\xd2\x91\xf9\xf8\x8b\xd1\x09\x05\x8c\x56\x5f\x9b\x03\x47\xce\x51\x40\x8e\xa4\x98\xd5\xe9\x93\xa4\x9a\xd5\x83\xf1\x5b\xb2\xb9\x3a\xef\xf5\x5d\xa6\xe9\xa2\x4c\xef\xb6\xfa\xb9\xdf\x18\xae\x09\x06\x50\x65\x31\x1c\x00\x28\xd2\xc5\xb2\x06\x55\x63\x2b\xf3\x70\xbf\xc0\x4d\xf4\x0b\xec\x62\x57\x0c\x5e\x81\x65\xf5\x50\xe3\xd0\x3a\x1a\x15\xdd\x63\xa2\x13\xb1\xd7\x9f\xc4\x86\x36\x76\x1e\xb4\x9b\x68\x55\x55\xa4\xfb\x36\x64\xd6\xd6\xe8\xb5\xfb\x5c\x6f\xec\xb9\x90\x59\xb7\x43\x68\xad\x98\xee\xfb\xb2\xd8\x9c\x8d\xad\x75\x73\x94\xf0\x2b\xeb\x36\x75\x51\xbf\x3b\x97\xf6\x9b\xa3\xb4\x5f\x17\x1b\xa7\xab\x73\x29\x7f\x3a\x4e\x59\xbe\x3c\x97\xec\xeb\xa3\x64\xdf\x55\xb6\xd8\xe8\xf5\xb9\xa4\xf6\xb8\x9d\x5d\x2c\x98\x33\x69\xaf\x4f\x3a\xff\xe6\x5c\xb2\xdf\x8e\x92\xfd\xf8\xaa\x3a\x5b\xdc\x5f\x8e\xd2\xfd\xbd\xb5\x9d\x3c\x97\xf6\xf3\xb3\x69\x7f\x3b\x9b\xf6\xe7\xa3\xb4\x3f\x5d\x57\x6e\x7b\x5d\xae\xcf\x0e\xe8\x3f\x8e\x13\x17\x37\x67\x0b\xad\xdc\x51\xc2\x9f\x6b\x73\x2e\xdd\xe6\x20\xdd\xb5\xbb\x71\x5f\xe8\xda\xbd\x2c\xab\x77\x08\x7e\x28\x58\xdb\x61\x7a\x0c\xf3\x73\x19\xf4\x3d\x19\xce\xb6\x68\x7b\x4f\x86\x73\xe9\x77\xc7\xe1\xe3\x1a\x07\xdd\x2f\x76\xb9\xbb\x76\xeb\xe2\xed\x1f\x9d\xd7\xbb\xf5\xd9\x11\x35\xe7\xb3\xfe\xa0\x8b\x4d\x7e\x7e\xae\xdc\x9e\xcf\xf1\x0f\x5d\xdd\x9c\x4b\xee\xef\x68\x5b\x59\x9e\x9d\xdc\xd7\xe7\x93\xff\x52\x54\x85\x2d\xb6\xe7\x72\xbc\x3e\x9f\xe3\x1b\xfd\xf2\x46\x9f\x4b\xff\xee\x7c\xfa\xaf\x36\xde\x55\x9b\xf2\x5c\x8e\x97\xe7\x73\x7c\xbf\xd6\xdb\xf3\x55\xe4\xc7\x33\xef\x47\xf7\x6a\x17\x88\xc9\xf9\x05\xfd\xc2\x7d\x5c\x54\xbf\xa3\x38\x51\x6d\x6c\xa8\xe2\xac\x09\xca\x1e\x94\x19\x02\x3a\xc3\x60\x9b\x11\xb0\xcb\x28\x58\x67\xc8\xcd\xf8\xb0\x09\x99\x91\x25\x4a\x0c\x65\x18\xa3\x15\xc4\xb8\x57\x73\x96\x4e\x27\x00\xa6\x93\xc1\x90\xcd\x9f\x4d\x0d\xc1\x90\x7e\x9c\xfa\xba\xef\xe4\xe3\x36\x5a\xbf\x7e\x5b\x6c\x87\xdf\xed\xd8\x3a\x69\xb9\x02\xb6\x09\x54\x70\xdb\x7c\xdc\x64\x1c\xbc\xce\x38\x78\x97\x11\xf0\x32\x73\x59\x96\x95\xef\xdf\x87\x8f\xdd\xd5\x0c\x2d\x10\xc8\xe3\xbb\x5d\xf3\x4e\x5f\x4d\xde\x4e\x16\x93\x77\x13\xf0\x62\x9c\x74\x7b\x65\x16\x7e\xe8\xec\x9b\xce\x32\xb8\xbb\x36\xc4\x5e\xd5\x8d\xb1\x57\xf7\xd9\x05\x05\x07\x55\xba\xe8\x43\x3e\xa4\x0b\x0b\x7c\x9b\xe3\xb6\x4d\xd9\x98\x0a\x1d\x7c\x19\xe7\x2d\x16\xb7\xe0\xcd\x60\x0c\x77\x03\x60\x3a\x7d\x07\xbe\xec\x1c\x36\x93\x14\xbc\xcd\xa6\x5f\x2e\xe1\x6a\x3a\x67\xe0\xc7\xf0\xf8\xe5\x60\x85\x15\xde\x7d\x97\x25\xf5\x10\x9f\xe7\xea\xd4\xf3\x66\xc4\x1b\xb8\x21\x61\x92\xce\x50\xfa\x04\x0f\x16\xf4\x8d\x5f\x4e\x1a\x8d\x0d\x0f\xa3\x25\x81\x53\x2b\x89\xa9\x4b\xaa\x74\x5a\x7f\xe0\x76\xae\x7a\x94\xbc\x8e\xf7\x51\xd5\x5d\x74\x6d\xf0\x7c\x7c\x31\xed\xd5\xe8\x39\x49\x17\x1b\xf0\x6b\xf6\x7c\xde\x5f\x87\x9a\x4c\x5a\xfc\x4e\xd2\xb9\xd5\xb5\x4e\x9a\x70\x9f\x29\xf8\xe9\x28\x55\xc0\x70\x97\xc6\x80\x3a\x9d\x97\x95\x75\x55\x92\x82\x6f\xb2\x9f\xe6\xee\x6d\x51\x27\x29\xf8\x22\x3c\x86\xc5\x99\xa4\x61\x18\xdc\xc6\x26\x93\x97\x93\x34\x5e\x43\x97\x4c\xcc\x5a\x6f\xb7\x13\x30\x69\x4a\x02\x3f\x64\x3f\xb5\x15\x24\x93\x75\xb1\x71\x93\x14\x7c\x3f\x7a\x15\x6f\xc4\x48\x1f\xfd\x9a\xfd\x3a\x8f\x17\x6a\x26\xbf\xf6\x45\x17\x9b\xad\xab\xea\x64\x72\xab\xeb\xeb\x09\xe8\x9b\x76\x58\x4b\xdf\xab\xe6\xf5\xb6\xae\xca\x5f\xdd\x04\x4c\xcc\xae\xaa\xdc\xa6\xfe\xa2\x5c\x97\xd5\x24\x0d\xfd\xfc\xa9\xad\xe0\x8b\xd0\xa6\x1f\xba\x2f\x7d\x07\x9a\xb6\xdd\x5f\x4c\xf3\x6b\x3e\x9d\xe0\x09\x78\x79\x79\x93\x86\xae\x7c\x7f\x52\x52\xd3\xa5\xb6\x24\x5f\xac\xd7\x77\x95\x03\x5e\x5e\xbe\xe9\xd2\xd9\x77\x13\x10\xd7\xd2\xd5\x04\xba\x9b\xc9\xa2\x59\x50\x13\x38\x17\x28\x7c\x9d\xc0\x39\xc1\xee\x26\xf4\x64\xf3\x38\xcb\x9e\x5f\x5c\x24\x01\x65\xa3\x4b\x8c\x37\x4d\x1f\x0f\xdf\x84\x8e\x1e\xbe\x09\x0d\x3e\x7c\xf3\x4d\xf6\xcd\xe1\x9b\xb6\x45\xe5\xad\x36\x91\x25\x5b\x77\x6f\x86\xeb\xa7\xce\x85\xb9\x19\x9c\x66\xb3\xef\x12\x97\xa6\x57\x2f\xfa\x5b\x1e\x0f\xae\x5e\x1b\x15\x93\xee\x53\xf0\xc5\xc7\x56\x77\xf6\xba\x92\x96\xdc\x75\x4b\xf1\x45\x52\x5f\x5c\xf4\x0d\xaa\xb3\xe8\xe7\x74\x55\x2f\x62\xc3\xf6\x69\x0a\xbe\x69\x23\x0a\x26\x29\xf8\xb5\x1b\x81\x66\x00\x1a\x1a\xa7\xaf\x5e\x5f\x4d\xbe\x99\x4c\x5f\x5e\xbe\x9e\x4e\xc0\x64\xfa\x76\x3a\xf9\x0b\x9c\xb3\x5f\x26\xd3\x1f\xa7\x93\xbf\xc4\xf7\x8b\xc9\x37\x70\xce\x9a\xdf\xc2\xfb\x45\x93\xe3\x6d\x4c\x1f\xf3\xfd\x02\xe7\xec\x2f\x31\xc7\x2f\x5d\x8e\xe6\xf7\xf6\x7d\x0a\x7e\x3a\xee\x3c\x7a\x18\xae\x5f\x24\x6d\x4f\xc0\x0f\xc7\x73\x12\x7c\x7f\x30\xbb\xc2\x64\x4c\x7c\x0a\x9e\xcf\x9b\x1b\x7c\x93\xeb\xa3\x99\xb9\x29\x47\xf3\xde\x97\x9b\x7a\xb6\x8d\x9c\x23\x82\x07\x2f\xbd\xbe\x29\xd6\xef\x26\x60\xb2\xd5\x9b\xed\x6c\xeb\xaa\xc2\xf7\xb9\x42\x1d\x33\xbd\x31\xd7\x65\xd5\xe0\x50\x5f\xb5\x57\x6a\x2e\x9a\x2d\x64\xe2\x36\x76\xb2\x98\xdc\x14\xd6\xae\x03\x01\x78\x7e\x12\xb0\x79\xb4\x65\x65\xdf\x0d\xb7\x9c\xbe\x99\xc7\x3d\xfd\xa1\xe2\x96\x03\x6f\xd2\x45\xbd\x07\x6f\x8e\x8d\x8a\x47\x1e\x7a\xed\x3d\xf3\xc3\x25\x14\xe0\x4d\x97\xe1\x79\xf7\xee\xa1\x9e\x33\xa3\xd0\x8b\x9b\xde\xed\xe9\x4d\xba\x18\xf9\x32\x35\x25\xff\x12\x23\x55\x3e\xac\x58\x7b\x18\x3f\xfa\xa0\x60\x7b\x71\x61\x8f\xcb\x3e\x31\x58\xbe\xa7\xec\xdb\x06\x45\xb7\x5d\xde\x1f\x8b\xdf\x1e\x88\xdc\x9b\xec\x75\x36\x8d\x99\x6f\xc6\x99\x3f\x22\x00\xdc\xcd\xb9\xfc\x1f\x11\xe8\xad\xab\xff\x75\x97\xff\xfb\x8f\x09\x6c\xf7\xae\xcd\xfd\x6e\x0f\xde\x8c\x63\x38\x0e\x79\x6c\x52\x02\x77\x10\x71\x6d\xfc\x9b\x3e\xf8\xed\xf5\xc1\x6f\xdb\x83\xdf\xde\x1d\xfc\xb6\x0b\xbf\x75\x41\xa9\xdf\x16\xdb\x9f\xca\xdb\x0f\x48\xce\x21\xd5\x0f\xc5\xcb\xeb\x0f\x09\xce\x21\xdd\xe7\x65\x5d\x97\x67\x65\x81\xd7\x87\x09\xbf\x76\xfe\x6c\x79\xef\xf6\xe9\x7e\xb5\x6a\xb8\xdd\x17\x2f\xdc\x4d\xee\xaa\x17\x7a\x57\x97\x2f\x8a\x9b\xdb\xb2\xaa\x5f\xbc\x38\xc0\xee\xe0\x13\x93\xd4\xe3\x0b\x99\x9a\x5b\xb9\xe1\x0a\xec\x62\xdc\xb4\x78\xed\x34\x5e\x01\x9f\x41\x70\x9d\x2d\x57\x4f\xfd\xb3\x6e\x20\x9e\xfa\xe9\x34\xd5\xd9\x76\xe9\x1b\x47\xaf\x8b\x8b\xeb\x36\xd6\xe9\x52\xaf\x96\x70\x95\xc6\xb7\x6d\xdc\xdf\x18\x58\x7c\x97\x36\x06\xb1\x23\x26\xfc\x5a\x6f\xbf\x7b\xb3\xe9\xae\x09\xeb\xee\x9d\xdf\x44\x8b\xd8\xe5\x66\x95\xed\x62\xf4\xda\x50\x82\xb9\xb8\x30\x49\x9d\x3e\xbd\xee\xaa\x4f\xaf\xe7\xdb\xeb\xc2\xd7\x49\x3a\x44\x9d\x29\x63\x0b\x5a\x86\xb2\x04\xeb\xf7\xef\x97\xab\x14\x54\xe3\xe8\x7b\xd5\x38\x98\x30\xa8\x33\xf8\xb4\x7e\xd6\xc5\x85\x79\x5a\x4f\xa7\xa3\xb8\xf8\x59\xb9\xac\x57\x60\x93\x3d\x86\x60\x9b\xa1\xa7\xdb\xde\x0b\xf4\xe9\x36\xa4\x6b\xe2\x1d\x55\xcb\xed\xea\x11\x7c\x9c\xc5\x6b\xe0\xa3\x47\xf9\x63\x94\xee\x37\x17\x17\x49\xd9\xdd\xe9\x54\xcf\x66\x00\xa5\xc0\x65\x3a\xd1\xf3\x6d\x56\x05\xe4\x0c\xe1\x60\xf7\x8d\x78\xf2\xfb\x1e\x14\xd9\xef\x70\x01\x83\xec\xb1\x3c\x70\x6d\x6c\x9c\x49\x37\xcb\x7a\xd5\x3b\xa4\x2f\xeb\x55\xf4\xe6\xad\xea\xed\xa3\x36\xb2\xf0\xb2\x5e\x65\xbf\x17\x8b\x1a\xac\x17\x8f\x11\x68\x7f\x5c\xfc\xbe\xdf\xf7\x4c\x6d\xc8\xd4\x04\x32\xe9\xf2\x82\x0a\x0c\xcf\x3a\x4c\xb3\x75\xe8\x6d\xff\x6e\xaf\xe7\x37\x99\x03\x7a\x6e\xb2\x0d\xd0\x73\x7b\x12\x7a\x4a\xcf\x9b\x80\xe8\xef\xdf\xb7\x43\x6b\x9d\x2f\x36\x6e\x7c\xef\x1b\xf8\xdd\x6d\x76\x37\xae\xd2\xf9\xda\x2d\x1e\xc3\x18\x01\xbc\xda\x47\x2f\xc4\x43\x72\x31\xd9\x6d\x9a\xdc\x76\xf0\xd1\xff\xf1\xdd\x4d\x5e\xae\x2f\x2e\x9a\xcf\x79\x5d\xfe\x58\x57\xc5\xe6\xe5\x4f\xfa\xe5\xc5\xc5\x5d\x35\x9e\xa6\x05\xed\xf5\x38\x93\x6f\x4a\xbb\x5b\xbb\xc9\xbe\x33\xdb\x3e\xcd\x3c\x79\xf1\xc2\x6d\xdb\x64\x5d\xb6\xc7\xb0\x69\xee\xb1\x2b\x49\xe1\x13\x74\x51\xc7\x10\x7d\x3a\x46\x62\x95\x17\x7d\x1c\xfc\x78\xd1\x1f\x0d\xbf\x4e\xca\x58\xd5\xe8\xde\xa5\x8b\x8b\xf0\x7f\x3e\xd4\x34\x64\x1a\x47\xdf\x9b\x9b\xca\x05\x31\xb1\xbf\x12\x50\xcf\xab\xa4\xba\xab\xe9\x15\x98\xd8\x4e\x61\x71\x84\xf1\xa6\x17\x41\xba\xc6\xb1\x41\xdb\x88\x97\xd1\x55\xff\x7d\x1c\xf8\x4d\x13\x07\x5e\xcf\x6d\x52\x81\xcd\xb9\x60\x23\x61\x12\xed\xe7\x79\xb1\xb1\xb1\x5d\x60\x14\x0f\xb8\x0a\x38\x3a\x73\x05\x43\x76\xd4\xdb\xab\x53\xda\xe5\xe6\x6d\xdb\xf7\x67\x2e\xc0\x73\xfd\x0c\xd6\x2d\x15\x9c\x44\x67\xab\x50\x5d\x79\xde\xbb\xe7\x41\x74\x26\x46\x19\x00\x7a\x7e\x9b\x4d\x26\x8f\x9a\x2b\x95\xde\x14\x1b\x5b\xbe\x99\xbf\x71\xf9\xad\x36\xbf\xfe\x75\x5b\x6e\x6e\xcf\x50\xd2\x07\x26\x0b\xc4\x27\x5e\xf7\x10\x69\x52\x44\xd9\x36\x7d\xd4\x7c\xcd\x6a\xb0\xcd\xb6\x27\x17\xab\x35\x37\x42\xf4\x14\x76\x3d\x9d\xa6\x75\x12\xef\x85\x68\x82\x8a\x64\xbb\x43\x4a\x97\x2c\x25\xc0\x2d\x85\x4b\x7e\x17\x47\x51\xf3\xdb\x66\xbe\x70\xba\x78\x51\x65\x95\x7b\xb5\x2b\x2a\x07\xc6\x6f\x6d\xd6\xcc\xa2\x3d\x90\x27\x57\xcc\x55\x89\x48\x81\xeb\x28\x41\x56\x25\x2a\xdd\x03\x75\xcf\x25\xdd\xe7\xd6\xaf\x2d\x4d\xdc\xbd\x2f\x2e\x92\x6a\x7e\x9b\x25\x9b\xac\x7b\x33\x7f\xb5\x73\xd5\xbb\x1f\xa3\xec\x58\x56\x51\x62\xdd\x9a\xaa\xb8\xad\x27\x69\x3a\xf6\x0e\x9b\x6f\x2b\x33\xaf\xdc\xed\x5a\x1b\x97\x3c\xf9\x3f\x4f\x96\xff\xef\xff\x79\xb2\xba\xfc\xf4\x09\x98\x3c\x09\x22\xd4\xd0\xc0\xa4\xc8\x9a\x3e\x81\xb2\x79\xa8\xba\xae\xc6\xa1\x79\xbe\xab\xcb\xaf\xe2\xc0\xfc\xf1\xdd\x46\xdf\x14\xe6\x1c\xb3\x51\x26\x93\xa6\x8c\x77\x9b\x17\x93\x18\xc2\xb0\x48\x26\x3a\x08\xaf\x13\xb0\x5c\x9d\xd3\x96\x26\x08\x06\xde\xbd\x48\x26\x96\xcc\x74\x55\xe9\x77\x77\xa6\xc4\xa3\x84\x6f\x8b\xed\xdd\xe9\xd4\x90\xb0\x09\x4a\x72\x67\x52\x36\xa4\x8c\xdc\xf5\xdd\x65\xca\x51\xca\x4e\xb7\x70\x67\x6a\x32\x4a\x7c\xad\x6f\xef\x29\x96\x0f\x29\xeb\xe2\xc6\x7d\xa8\xbd\xe3\xe4\xa3\xfb\x3f\xee\x2a\x5d\x74\xc9\xdb\x2b\x70\x66\xff\xb9\x1b\x6b\x08\xb5\x89\xfd\xfa\x9e\x06\xa0\x6e\x10\xfc\x6e\xeb\xe6\xf7\x15\x47\xdb\x84\xc5\x76\x56\xdc\xde\x9d\xac\xeb\xd1\xba\xb4\x7a\xdb\x06\x7a\xdc\x7e\x00\xbd\xa8\x1b\x8c\x75\xb5\x7b\x71\xa3\xef\x29\x3d\xce\x84\x18\x83\xbc\x48\x26\x71\xc1\xcc\x5a\xe2\x7d\x27\xce\xc2\x74\x4c\xf7\xfb\xf4\xd1\xff\x17\x00\x00\xff\xff\xb8\x87\x25\x96\xc7\x33\x18\x00") -func distAssetsVendor1192528ac070501feaf347024c2cae41JsBytes() ([]byte, error) { +func distAssetsVendorD62e8ec23cd05cedaa719acf0f8b5554JsBytes() ([]byte, error) { return bindataRead( - _distAssetsVendor1192528ac070501feaf347024c2cae41Js, - "dist/assets/vendor-1192528ac070501feaf347024c2cae41.js", + _distAssetsVendorD62e8ec23cd05cedaa719acf0f8b5554Js, + "dist/assets/vendor-d62e8ec23cd05cedaa719acf0f8b5554.js", ) } -func distAssetsVendor1192528ac070501feaf347024c2cae41Js() (*asset, error) { - bytes, err := distAssetsVendor1192528ac070501feaf347024c2cae41JsBytes() +func distAssetsVendorD62e8ec23cd05cedaa719acf0f8b5554Js() (*asset, error) { + bytes, err := distAssetsVendorD62e8ec23cd05cedaa719acf0f8b5554JsBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "dist/assets/vendor-1192528ac070501feaf347024c2cae41.js", size: 1486778, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} + info := bindataFileInfo{name: "dist/assets/vendor-d62e8ec23cd05cedaa719acf0f8b5554.js", size: 1586119, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _distAssetsVendor74b43ac401038fb6d346e85abd3bb536Css = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x58\xef\x8e\xa3\x30\x0e\x7f\x15\x4e\xa3\xd5\xee\x4a\x65\x94\x76\xda\xed\x0e\x48\xa7\x95\xee\xf3\x3d\x44\x20\x06\xa2\x86\x84\x4b\x42\xdb\x59\xd4\x77\x3f\xe5\x0f\x94\x40\xda\x99\x3b\x8d\xe6\x03\x8e\xed\xd8\xbf\x38\xf6\x2f\x7d\xfd\x97\x20\xf0\x6f\x2a\xa5\x90\x43\x25\xb8\x4e\x2b\xdc\x52\xf6\x91\xb5\x82\x0b\xd5\xe1\x12\xf2\x06\x68\xdd\xe8\xec\x0d\xa1\xee\x9a\x97\x82\x09\x99\xbd\x20\x84\x6e\x33\xcb\x94\x51\x0e\x6a\xe8\x30\x21\x94\xd7\xd9\xbe\xbb\x26\xc1\x7a\xd2\x49\x98\x56\x51\xb2\xef\xae\x81\x75\xdd\x6b\x0d\x32\xad\x28\x63\x20\x37\xf3\x15\x55\x4a\xc1\x58\x81\xc7\xc5\xa1\xc0\xe5\xa9\x96\xa2\xe7\x24\xf5\xa1\x54\x55\x15\x71\xa6\x86\x42\x48\x02\x32\x95\x36\xf8\x6d\x77\x4d\x94\x60\x94\x24\x2f\x84\x90\x3c\xe2\xe5\x68\xfe\xf2\x4b\x43\x35\xa4\x36\xef\x8c\x8b\x8b\xc4\xdd\x2a\x4d\xde\xb7\x05\xc8\x59\x36\x6f\x26\xdb\xe4\xd0\x5d\xf3\x96\xf2\xf4\x42\x89\x6e\xb2\x9d\xc1\x4a\xc3\x55\xa7\x98\xd1\x9a\x67\x36\x8a\x11\xbc\xf7\xf7\xf7\xcf\x36\x72\x49\xb4\x58\x9e\x40\x0e\x0f\x30\x9f\xeb\xa4\xaa\x2f\x34\x83\xe1\xbe\x43\xa0\x5a\xf6\x52\x09\x39\x42\xc2\xa0\x0a\x10\x41\x08\xe5\x01\x5a\x5c\x70\xc8\x5d\x22\xe1\x31\x12\x7a\x0e\x4e\x07\x4a\xc1\x09\x96\x1f\x4f\xfd\x2b\xca\xce\x20\x6f\xaf\x65\x9b\x56\x58\xfb\x58\x92\x48\x78\x6e\x47\xdc\x6b\xe1\xc3\xc9\xd0\x3f\x68\xdb\x09\xa9\x31\xd7\xb3\x33\xcb\x5e\x8e\x70\x5c\xfa\x5b\x84\xe6\xa4\x6a\xf8\x9b\x52\x4e\xe0\x9a\x6d\xad\x3e\xe6\xb4\xc5\x1a\x66\x76\xb1\x4d\xf3\xf4\x02\xc5\x89\x6a\xaf\x4e\x05\xcf\x0a\x46\xf9\x29\xd9\xbe\xa2\x5f\x2a\x51\x1a\x3a\xf5\x63\xfb\x33\xa1\xbc\xa2\x9c\x6a\xc8\xd3\x56\xfc\xfd\xb2\xf2\x57\xf5\xd6\x35\x6a\xb2\xfe\x63\xf7\x3a\xc1\x47\x25\x71\x0b\x2a\xb1\x3e\x86\x03\xfa\xb6\xbe\x19\x5a\x62\xae\x3a\x2c\x81\xeb\xdb\xed\xcf\x98\xd3\xff\x61\xfa\xbf\x9b\x18\xac\x35\x2e\x06\x42\x55\xc7\xf0\x47\x46\xb9\xb9\x39\x69\xc1\x44\x79\x72\xd7\x82\x40\x29\xa4\x83\x81\xf2\x06\x24\xd5\x41\xc1\xca\xde\x5e\xf6\x78\xbd\x96\x65\x99\x77\x42\x51\x6b\x8d\x0b\x25\x58\xaf\xc1\xee\xa9\x52\x02\x15\xee\x99\x4e\xcc\x57\x03\x98\xcc\xaf\x4f\x15\xd1\xf9\x4f\x2f\xf4\x74\x6d\xd0\x3b\xb2\x2a\x1c\x6a\xac\xe9\x79\x92\x93\xfd\xde\xca\xdd\xa6\x77\xf9\xee\x7d\x77\xbb\x6f\xb4\xb1\xde\xb5\x14\xbc\x76\x9d\xf4\xe2\x1a\xe7\x11\x39\xaf\xd0\x3a\xb1\xd2\x1f\x0c\x32\xaa\x31\xa3\xa5\x5d\xb0\xa0\x2e\x51\xe9\x39\x01\x69\x50\xbb\x79\xb7\xf4\x04\xba\x91\xa2\xaf\x9b\x95\xae\x05\xd7\x2f\x46\x72\x3c\xc1\xc7\x45\x48\x32\x46\x7d\x44\xbf\x23\x4a\x58\x8b\x76\xca\x6b\xfb\x1e\xd1\xf0\x8d\xcf\xeb\x6c\x7f\xed\x23\x3a\x04\xaa\xe7\x78\x9f\xb1\xa4\xb8\x60\x90\xee\x26\xbd\x03\x7e\xa6\xf7\x36\xe9\xfd\x3e\x44\xf4\x4a\xd1\xb6\xc0\xf5\xa8\x84\x0f\x28\xa2\x64\xd0\xe3\xf5\xa4\xb3\xdd\x3e\xd4\xb9\x87\x55\x45\x3d\xb5\xa0\xf1\x26\x56\x45\x98\xd1\x8a\xde\xd1\x39\x1c\x62\xc1\x16\x3d\x65\x9a\xf2\x51\xe9\x0d\xc5\x32\x2f\x24\x2e\x4f\xa0\xef\xad\xfc\x18\x51\xd2\x78\x4a\x67\x7b\x8c\x05\x8a\xb5\x96\xb4\xe8\x67\xb5\x8d\xca\xd8\x15\x91\xc1\xc8\x58\xad\xdb\xd2\x5c\x78\xa0\xfc\x8c\x19\x25\x65\x83\x65\x04\x0a\xb0\x4c\xc2\x99\x48\x20\xe1\x18\x12\xad\xb9\x42\xbc\x1e\x6f\x76\x21\xb4\x16\x6d\xb6\x1b\xef\xf6\x2d\xec\xe2\x89\xea\x30\x9f\x3b\x68\xb1\x2e\x1b\xca\xeb\x05\x46\xa8\x42\x9f\x59\x72\xc1\x1f\x18\x57\xbb\xdd\x2d\xb6\x87\x81\x78\x36\x73\x64\x5d\xe0\x1f\xbb\xc3\x61\xb3\x3d\xa0\x0d\xda\xbc\xbe\xfd\x0c\xac\x70\x69\x1a\x83\xeb\x72\x93\xd1\xdc\xfe\x05\x7e\x57\xbb\x90\xaa\x0c\x53\x13\x93\xc0\x6c\xc3\xc9\xc5\x19\x64\xc5\xc4\x25\x6b\x28\x21\xc0\x83\xa1\xb7\x24\x3a\x8e\x1b\x0d\x93\x89\xfb\x9e\x4d\xcc\x16\xcb\x9a\xf2\x11\xe4\xf4\xcd\x70\x12\x2f\x73\x73\xde\x89\x3c\x93\x19\xf5\xac\xcc\x73\xbe\x2d\x42\xdf\x72\xd1\x6b\x93\x57\x86\xf2\x55\xbc\x61\x3c\xf4\x2f\xc4\x72\x0a\xa8\x85\xf1\xee\xfb\xf8\x7c\x62\x7c\x8d\x0d\x36\x13\x1d\x7c\x4a\x12\x83\xc5\xf3\xb4\x3a\xac\x66\x46\x3e\xb2\x83\x5f\xf9\x38\xa9\x0c\xf5\xb9\x3d\xb0\x77\x19\xa0\x5c\x8b\x2e\x43\xd3\x51\xa5\xd7\xf1\xb0\x26\xc9\x87\x3f\x8b\x5b\x3c\xf8\xc1\x23\x8d\x72\x3b\xd9\xd0\xdc\x70\xe9\xea\x1a\x73\xb5\x62\xc5\x63\x64\xa3\xe3\xc7\x78\x0e\x7e\xcb\x27\x9a\x2a\x02\x94\xb7\x72\x99\x1b\x9a\x3b\x2f\x90\x11\xc5\xb7\x88\xb3\x21\x24\xba\xb2\xc5\x2c\x28\xae\x28\x43\x38\x83\xd4\xb4\xc4\xcc\x93\x67\x2d\xba\x58\x2d\xc7\x92\x34\x44\xba\x83\x67\x47\xbd\x9f\xdf\x29\x94\x04\x0c\xd3\xf1\x3f\x53\x02\x33\xe9\x48\x9c\x7a\x65\x68\x36\x30\x28\x3d\x41\xb6\x4c\x6c\x25\x5d\x0a\x62\x51\xce\x3a\xc4\x3a\x50\x87\xf1\x54\x22\x53\xdc\x31\x47\xc0\x74\xc4\x83\x63\xb6\x99\xef\xca\x0f\x3c\xb8\x17\x9b\x57\x35\x84\x22\x38\xd6\x10\x5d\xfb\x7c\xb3\xe9\x8e\x77\x19\x13\xda\xab\x19\x53\x5e\xca\x1f\x7c\xfb\x37\xc5\xe2\x08\xf2\xf9\xbb\xd3\xb3\x41\x27\x33\x2d\x65\x92\xb8\x12\xc8\x50\xf0\x76\xea\x24\xe4\x86\xdc\xd8\x93\x1f\x0b\xcc\x96\x92\x4f\x65\xb4\x76\xdd\x7e\xfc\x1a\x31\xd9\xad\x7b\xda\xbd\x07\x9f\xa9\xa2\x05\x83\x29\x49\x8d\xbb\xb4\xa1\x75\xc3\x8c\xe3\x35\xed\x9d\xf4\x6c\xe8\x96\xc0\x70\x9d\x32\x5a\x63\xdd\x4b\x50\xae\x3c\x9e\xac\x05\xc7\x63\xd2\xb1\xb0\xdf\x93\x2b\x24\xe0\x53\x6a\xbe\x97\x08\xd8\x75\x07\x83\x55\xf2\x38\xac\xce\xfb\x69\xdd\xf9\x2b\x1e\x36\xb9\x55\x19\xae\x9f\xfd\x17\x4a\x6a\xd0\x91\xbe\x7f\xc7\x78\x42\xd4\x3c\xb3\x16\x8c\x80\xc0\x30\x0d\x98\x48\x89\x6f\x22\xfd\x69\x13\x7f\x92\x47\x66\xc2\x66\x3d\x9f\x7c\x19\x5f\xcd\xa7\x79\xbf\x97\x82\x6b\xe0\xa6\x82\xaf\x79\x5c\x1c\xb2\x03\xc0\xaa\x97\x10\xc1\xcf\xd5\xb6\x6d\x6a\xbe\xf4\xd0\x6a\x9c\xdb\x8a\xa2\x8c\xea\xb1\xd1\xc7\x5e\xe9\x91\xa7\xcd\x3a\x00\xf7\x8b\xca\xa8\xa9\x34\xd6\xb4\xbc\x3d\x78\x03\xaf\x76\x8d\x14\x7d\xbc\x87\x57\xa2\xec\x15\x90\x07\x8f\xeb\xcd\x42\x4c\x24\xae\x23\x7b\xfa\x6b\x14\x4e\x30\xdb\x20\x21\x64\x48\xe4\xdd\xfc\x45\x03\xf8\xdc\xf6\x48\xf6\x55\x58\x40\xa5\x14\x4a\x35\x98\xca\xb1\xcb\x4d\x82\x55\x0d\x67\x99\x73\x4a\x05\x5f\x15\xd7\x3f\x0d\x95\xfc\x54\x61\xa9\xf5\x59\x70\x6e\x57\x5b\x8c\x9f\x6e\xfd\x15\xad\xa8\x6a\x34\x08\xc3\xd8\x01\x4b\xcb\x71\x87\x90\x5f\xe2\x3c\x46\x78\xcd\x3f\xda\xbc\xee\x7f\xba\x9f\x5c\x84\x2c\xc1\xf7\xfb\xf1\x47\x30\xcf\xed\x5e\xcd\xd8\xf8\xd3\x02\xa1\x38\xe9\x24\xe5\x7a\x78\xf2\xdb\xd1\xc3\xe2\x9c\x7e\x3d\xb0\x5d\x2d\x6d\x70\x79\xca\x70\xa5\xed\xdb\xca\xde\xc9\xec\xfb\xf7\xdb\x92\xde\x8f\x35\x61\x06\xd9\x10\x4e\x97\xdb\x7f\x03\x00\x00\xff\xff\x23\x83\x25\xb7\xe2\x14\x00\x00") +var _distAssetsVendorD8602bc1ee5a13b26e7066b76b62d063Css = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\xdb\x8e\xa3\x38\x13\x7e\x15\x7e\xb5\x46\x33\x2d\x85\x96\x93\x4e\x26\xd3\x20\xfd\x1a\x69\xaf\xf7\x21\x0c\x2e\xc0\x8a\xb1\x19\xdb\xe4\x30\x28\xef\xbe\xf2\x01\xc2\xc1\x49\x7a\xe7\x6a\x15\xe5\x02\xbb\x5c\xae\x73\x7d\xe5\xb7\xbf\x04\x81\xbf\xa9\x94\x42\x76\x85\xe0\x3a\x2e\x70\x4d\xd9\x25\xa9\x05\x17\xaa\xc1\x39\xa4\x15\xd0\xb2\xd2\xc9\x3b\x42\xcd\x39\xcd\x05\x13\x32\x79\x41\x08\xa5\x84\x4a\xc8\x35\x15\x3c\x61\x5a\x5e\x47\x7c\x62\x46\x39\xa8\xae\xc1\x84\x50\x5e\x26\xdb\xe6\x1c\xa1\xf1\x7e\xd4\x48\x98\x93\xaf\x9e\xec\xc7\x8c\x1e\x60\x60\x89\xa2\x6d\x73\x9e\x5c\x59\xb6\x5a\x83\x8c\x0b\xca\x18\xc8\x31\xb3\x58\xe5\x52\x30\x96\xe1\x7e\xb3\xcb\x70\x7e\x28\xa5\x68\x39\x89\xbd\x36\x45\x51\x04\x98\xa9\x2e\x13\x92\x80\x8c\xa5\xd5\x7f\xdd\x9c\x23\x25\x18\x25\xd1\x0b\x21\x24\x0d\x70\xd9\x9b\x5f\x7a\xaa\xa8\x86\xd8\x9a\x2e\xe1\xe2\x24\x71\xb3\xb0\x0d\x6f\xeb\x0c\xe4\x48\x9b\x77\x63\xa2\x68\xd7\x9c\xd3\x9a\xf2\xf8\x44\x89\xae\x92\x8d\x31\xb7\x86\xb3\x8e\x31\xa3\x25\x4f\xac\x14\xbd\xfd\x3f\x3e\x3e\x9e\x5d\xe4\x94\xa8\xb1\x3c\x80\xec\x6e\x6e\xbb\x4b\x13\xab\x36\xd3\x0c\xba\xdb\x0d\x13\xd2\xbc\x95\x4a\xc8\xde\x24\x0c\x8a\x89\x45\x4c\x3c\x4c\xac\xc5\x05\x87\xd4\x29\x32\xf5\x3d\xa1\xc7\x89\x77\x20\x17\x9c\x60\x79\x79\xc8\x5f\x51\x76\x04\x79\x7d\xcb\xeb\xb8\xc0\xda\xcb\x12\x05\xc4\x73\x37\xe2\x56\x0b\x2f\x4e\x82\xfe\x47\xeb\x46\x48\x8d\xb9\x1e\xf9\x2c\x79\xd9\xc3\x7e\xce\x6f\x26\x9a\x5b\x55\xdd\xef\x98\x72\x02\xe7\x64\x3d\xa3\x8f\x8d\xdd\x96\xd1\x24\xcb\x0c\x7f\xdb\xa0\xd5\x66\xb7\x5b\x6d\xd0\xea\x6d\xf7\x9a\xc6\x27\xc8\x0e\x54\xc7\x98\xd3\x1a\xdb\x8c\xc9\x18\xe5\x87\x68\xfd\x86\xbe\xab\x48\x69\x68\xd4\xb7\xf5\x6b\x44\x79\x41\x39\xd5\x90\xc6\xb5\xf8\xfd\x69\xe2\x4f\xd2\x59\xe1\x1d\x2d\x8c\x94\x08\x59\xec\x3f\x21\x6f\x20\xc1\x8c\xcb\x7e\xda\xbb\x0e\x70\x29\x24\xae\x41\x45\x96\x47\xb7\x43\x5f\x96\x8e\xd0\x12\x73\xd5\x60\x09\x5c\x5f\xaf\x3f\x7b\x9d\xfe\xe0\xe8\xbf\x3f\x62\x6c\xad\x71\xd6\x11\xaa\x1a\x86\x2f\x09\xe5\xb6\x86\x65\x4c\xe4\x07\x97\xd3\x04\x72\x21\x9d\x19\x28\xaf\x40\x52\x3d\xc9\x36\xd9\x32\x53\x80\x1a\xa1\xa8\xa5\xc1\x99\x12\xac\xd5\x90\xda\xc4\x40\xa9\x4b\x32\x94\x6a\xd1\x24\xf1\xce\x54\x8a\x4c\x68\x2d\xea\x04\xa5\xe2\x08\xb2\x60\xe2\x94\x54\x94\x10\xe0\x4b\xb6\xf7\x72\x38\xcf\x73\xcb\x0f\xdd\x78\x2d\xee\xb7\x9a\xa9\x98\x40\x81\x5b\xa6\x23\xf3\x55\x01\x26\xe3\x0a\x53\x04\x68\x7e\xb5\x42\x0f\x95\x05\x7d\x20\x4b\xc2\xa1\xc4\x9a\x1e\x87\x75\xb2\xdd\xda\x75\x77\xe9\x6d\x7d\xf3\xb1\xb9\xde\x2e\x5a\x59\xee\x5a\x0a\x5e\xba\x7e\x75\x72\xed\x69\x8f\x1c\x57\xa8\xdd\xb2\xd2\x17\x06\x09\xd5\x98\xd1\xdc\x6e\x58\xd7\xcd\x6d\xdf\x72\x02\xd2\xf8\xe6\xea\xd9\xd2\x03\xe8\x4a\x8a\xb6\xac\x16\xb4\xd6\x85\x7e\x33\xa0\xe3\x01\x2e\x27\x21\x49\x2f\xf5\x1e\xfd\x08\x10\x61\x2d\xea\x41\xaf\xf5\x47\x80\xc2\xf7\x06\x4f\xb3\xfe\xbe\x0d\xd0\x10\x28\x1e\xdb\xfb\x88\x25\xc5\x19\x83\x78\x33\xd0\xed\x70\x80\x4e\x5f\x1a\x58\x3d\x38\xfe\x3e\x1c\xff\xb1\x0b\x1c\xcf\x45\x5d\x03\xd7\x3d\x11\xde\xa1\x00\x91\x31\x2a\x2f\x07\x9a\xf5\xfa\x2e\xcd\x4d\xda\x22\xc8\xa9\x06\x8d\x03\xd2\xfe\x6a\x31\xa3\x05\xbd\x19\x6d\xb7\x0b\x09\x9b\xb5\x94\x69\xca\x7b\xa2\x77\x14\x32\x48\x26\x71\x7e\x00\x7d\x6b\x82\xfb\x90\xd5\xf0\xa0\xce\x7a\x1f\x12\x14\x6b\x2d\x69\xd6\x8e\x42\x1e\xe5\xa1\xcc\x91\x93\x66\xbb\xd8\xb7\x11\x3b\xe3\x40\xf9\x11\x33\x4a\xf2\x0a\xcb\x80\x29\xc0\xc2\x38\xdf\x87\x80\x4c\x1b\xb8\xa8\x4d\x66\xf1\xb2\xcf\x7f\x9f\xe5\x9b\xbe\x02\x5c\xa7\xfd\x2f\x52\x0d\xe6\x63\x06\x35\xd6\x79\x45\x79\x39\xb3\x11\xca\xd0\xb3\x93\x5c\xf0\x3b\x87\xf1\x66\x73\x0d\xdd\x61\x4c\x3c\xea\xd6\xae\xa7\xee\x76\xab\xf5\x0e\xad\xd0\xea\xed\xfd\x75\x72\x0a\xe7\xa6\x5e\xb8\x12\x3b\x1c\x1a\x9f\x7f\x81\x1f\xc5\x66\x0a\xf2\x6e\xb5\x55\x02\xb3\x75\x68\x5e\x39\x27\x70\x61\x0e\x11\x1d\xaa\xec\x86\x23\xee\x7b\x84\x35\x6a\x2c\x4b\xca\x7b\x23\xc7\xef\xa6\x46\xfb\x35\x57\xbc\xdd\x92\xc7\x80\x3d\x9d\x5d\xf3\x80\x7b\x8d\xd0\x97\x54\xb4\xda\xe8\x35\xae\xc5\xbd\xbc\x53\x79\xe8\x6f\x08\xe9\x34\x01\x65\x86\xbb\xaf\xf6\xe3\x76\xf5\x39\x1c\x5d\x0d\x40\xfa\x21\xbc\x9e\x6c\x1e\x87\xdd\x40\x2b\xeb\x71\xd5\xf7\xb4\x6f\x93\x06\x34\x5e\xef\x9c\x1f\x77\xbc\x5b\x93\x8b\xcf\xbd\xb3\x86\x95\x8b\xf7\xc5\x35\x2c\x7c\x37\x34\x37\xdf\x4a\x47\x07\xe7\xac\xce\x21\x56\x8b\x79\xa2\x97\xac\x67\x7c\xdf\x9e\x9d\xbf\xf2\x01\xe5\x83\x9e\xef\x34\x37\x03\xc2\x38\x40\x7a\x2b\xbe\x07\x98\x75\xd3\x11\x41\xd6\x98\x4d\x82\x2b\x08\x4f\x8e\x20\x35\xcd\x31\xf3\x63\x87\x16\x4d\x28\x96\x43\x4a\x9a\x11\xa4\x81\x47\xae\xde\x8e\x73\x0a\x45\x13\x6c\xee\xc0\xa7\x09\x81\xdb\x6a\xe8\x96\x51\x86\x2f\x2f\x9a\xe1\x97\xe1\xde\x10\x23\x60\x3a\xc0\xc1\xc1\xe2\xc4\x57\xd5\xc7\x1c\xbc\xc2\x51\x92\x28\x60\x6e\x16\x7e\x0c\x0c\x1f\xf2\xb0\xc8\xf6\x0f\x18\xb9\x69\xdb\xcb\x6d\x40\xcb\x24\x46\xa6\xae\xfa\xf3\xd1\xdb\x4a\xd7\x57\x13\x4c\x68\xab\x46\x83\xc2\x7c\xfd\xce\xb7\x9f\x07\x67\x41\x90\x8e\x9f\x1d\x3c\x18\x76\x6b\xa6\xa8\x0d\x2b\x2e\x08\x13\x34\x99\x7b\x1b\x09\xa9\x41\x5d\xd6\x8c\x7d\x88\x5b\xa1\xbd\xfe\xfd\x69\x67\xc2\xfe\xab\xf7\xea\x66\x59\x55\x6f\x5d\xe0\x48\x15\xcd\x18\x0c\x4a\x6a\xdc\xc4\x15\x2d\x2b\x66\x18\x2f\x7d\x32\xd0\x59\xd1\x2d\x84\xe2\x3a\x66\xb4\xc4\xba\x95\xa0\x92\x5c\x70\xe3\x9c\x16\xb3\xf4\x29\xc5\xc4\xbf\x46\xb5\x67\x7e\xbb\x4b\xe4\x9c\x77\x33\x51\x26\x01\x1f\x62\xf3\x3d\xb7\xa3\xdd\x77\xc6\xb4\x44\xde\x9a\x8b\x50\x7b\x98\x7f\x81\xf1\x24\x90\x8e\x68\xc1\xf4\x44\x49\x09\x3a\xd0\xbf\x46\x9e\xf2\xaf\x25\x6f\xb3\x90\x8e\xa5\x66\x46\xf3\xee\xf6\x1e\x25\x35\x9b\x41\x1f\x02\xdd\xd0\x49\x03\x59\xb8\x0a\x14\xe2\x55\xf8\xd5\x26\xd0\xfc\x56\xcb\x46\xec\xb3\xe5\x6c\x3e\x8d\xd0\xd6\xb5\xdc\x24\x8a\x99\xd4\x42\xcb\x53\x18\x04\x58\xb5\x12\x02\x06\x76\x29\x64\xab\xb7\x8f\xf0\xc5\xc4\x97\xda\xc0\xa5\x8c\xea\x4b\x68\x06\xf4\x73\xff\x92\x75\x23\x28\xb7\x75\xf1\x08\x5c\xab\x65\x33\xf6\x42\x59\x5b\x0f\xa7\x95\xc6\x9a\xe6\xd7\x3b\x4f\x27\x0b\x49\x02\xf9\x16\x6e\x60\x85\xc8\x5b\x05\xe4\xce\x9b\xcc\x6a\xb6\x4c\x24\x2e\x03\x77\xfa\x0c\x9e\xb6\x6f\x5b\x60\x61\x0a\x0f\xc9\x87\xf9\x05\x05\x78\x7e\x76\x4f\xb6\xc5\x34\xa8\x72\x29\x94\xaa\x30\x95\x7d\x55\x1e\x16\x16\x81\x3f\x6a\x1d\x8b\x80\xfb\xbf\xc1\xd1\x4f\x09\xe6\x54\xcf\x84\x73\xb7\x4e\x9b\xcd\xbd\xab\x3f\x43\x15\x24\x0d\x0a\x61\xc6\x15\xc0\xd2\x02\xfc\xe0\x2b\x2c\x5e\x3e\xfa\x0c\xc8\xdf\xfc\xd1\xea\x6d\xfb\xea\x5e\xe1\x84\xcc\xc1\xb7\x9d\xfe\x1d\xd5\x83\x5c\x5b\x1f\x7e\xd6\x40\x28\x8e\x1a\x49\xb9\xee\x1e\x3c\x3f\xde\x0d\xd4\xe1\x0d\xc7\x96\xc5\xb8\xc2\xf9\x21\xc1\x85\xb6\x43\xa6\xcd\xd9\xe4\xeb\xd7\xeb\x7c\xce\xe9\xe3\xc3\x54\xf1\x6e\xda\xe4\xae\xff\x04\x00\x00\xff\xff\xcd\xde\x14\x35\x68\x17\x00\x00") -func distAssetsVendor74b43ac401038fb6d346e85abd3bb536CssBytes() ([]byte, error) { +func distAssetsVendorD8602bc1ee5a13b26e7066b76b62d063CssBytes() ([]byte, error) { return bindataRead( - _distAssetsVendor74b43ac401038fb6d346e85abd3bb536Css, - "dist/assets/vendor-74b43ac401038fb6d346e85abd3bb536.css", + _distAssetsVendorD8602bc1ee5a13b26e7066b76b62d063Css, + "dist/assets/vendor-d8602bc1ee5a13b26e7066b76b62d063.css", ) } -func distAssetsVendor74b43ac401038fb6d346e85abd3bb536Css() (*asset, error) { - bytes, err := distAssetsVendor74b43ac401038fb6d346e85abd3bb536CssBytes() +func distAssetsVendorD8602bc1ee5a13b26e7066b76b62d063Css() (*asset, error) { + bytes, err := distAssetsVendorD8602bc1ee5a13b26e7066b76b62d063CssBytes() if err != nil { return nil, err } - info := bindataFileInfo{name: "dist/assets/vendor-74b43ac401038fb6d346e85abd3bb536.css", size: 5346, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} + info := bindataFileInfo{name: "dist/assets/vendor-d8602bc1ee5a13b26e7066b76b62d063.css", size: 5992, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -368,6 +369,26 @@ func distImagesIconsMediaPlaySvg() (*asset, error) { return a, nil } +var _distImagesIconsNodeInitCircleFillSvg = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x90\x31\x4f\xc3\x30\x10\x85\xf7\xfe\x8a\xa7\x63\x81\xa1\x8d\xed\x06\x5a\xa1\xb8\x03\x48\x15\x4b\x57\xf6\xe0\xb8\x8e\x85\x6b\x57\x8e\x1b\xa7\xfd\xf5\xa8\x49\x16\x24\xc4\x70\x7a\xdf\x70\xf7\x3d\xe9\xaa\xae\x37\x18\x4e\xce\x77\x92\xda\x94\xce\xaf\x45\x91\x73\x5e\xe5\xf5\x2a\x44\x53\x08\xc6\x58\xd1\xf5\x86\x90\x6d\x93\x5a\x49\xa2\x24\xb4\xda\x9a\x36\x4d\xdc\x5b\x9d\xdf\xc2\x20\x89\x81\x41\x94\x10\x25\xed\x16\x40\x65\x70\xb4\xce\x49\xf2\xc1\x6b\x1a\x79\x19\x2f\x4e\x4b\xd2\xbd\xf6\xa1\x69\xc6\x2d\xa0\x52\x36\x2a\xa7\xa1\x06\x49\x9c\x11\xd4\x75\xca\x38\xc5\xe4\x50\x97\x18\xb5\x4f\xef\xc1\x85\x48\x48\xb1\xf6\xdd\x31\xc4\x93\xa4\x11\x5d\x9d\xf4\xa3\x80\x78\xa2\x62\x76\x9e\xeb\xd4\xce\xa7\x0f\xfb\xfd\x9e\xd0\x48\x3a\xf0\x2d\xf8\xba\x2f\x3f\x5e\xfa\x65\xd9\x72\x71\x3b\x6c\xc1\xcb\x9a\x83\x83\x8d\xc3\x20\xc0\x67\x62\x60\x4b\x71\xfb\xed\x53\xae\xee\x3a\x49\x5f\xce\xfa\x6f\xeb\x0d\xfd\x55\xb0\xb9\xfb\x3f\x37\xb3\x7e\xfb\xbf\x1d\xe1\x5c\x2b\x9b\xae\x92\x56\xcf\x4c\x4c\x65\x55\x61\x76\x8b\xea\xfe\xf0\xdd\xe2\x27\x00\x00\xff\xff\xdb\xbf\xd1\xad\x99\x01\x00\x00") + +func distImagesIconsNodeInitCircleFillSvgBytes() ([]byte, error) { + return bindataRead( + _distImagesIconsNodeInitCircleFillSvg, + "dist/images/icons/node-init-circle-fill.svg", + ) +} + +func distImagesIconsNodeInitCircleFillSvg() (*asset, error) { + bytes, err := distImagesIconsNodeInitCircleFillSvgBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "dist/images/icons/node-init-circle-fill.svg", size: 409, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + var _distImagesIconsSearchSvg = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xcd\x6e\xab\x30\x10\x85\xf7\x79\x8a\x23\xef\x3d\xf6\x18\x8c\x99\x28\x20\xdd\xdb\x6d\xbb\xea\x13\x44\x25\xc2\xa8\xe4\x47\x05\x61\x94\xa7\xaf\x4c\xd2\xae\x2a\xcb\xd6\x37\xe7\x7c\x9a\x85\x0f\xd3\xd2\x23\x0d\xdd\x1c\x1b\xc5\xb5\x42\x3c\x0d\x7d\x9c\x1f\xbc\x0c\xa7\xf4\xff\xba\x36\xca\xc2\x82\x6b\xe4\x6c\x3d\x8f\x97\xa9\x51\x71\x9e\x6f\x7b\x63\x52\x4a\x94\x0a\xba\x7e\xf5\xc6\x59\x6b\xcd\xb4\xf4\x4f\x65\xbf\x8e\xc3\xe5\xf3\x2f\x91\x45\xc4\x6c\xad\x6a\x77\xc0\xe1\x76\x9c\x23\xba\x46\xbd\xb1\x23\x0f\xe6\xa8\x29\xc8\xa8\xc9\xd5\x9a\x5c\xf8\x57\x51\x19\x18\x8f\xd7\x6e\x87\x0b\x54\xe4\x7f\xaf\x45\x2e\x32\x71\xf1\xc1\x54\xe5\xa9\x20\x2b\x9a\xbc\xa0\x24\x57\x68\x26\x1f\x46\x72\x81\x5c\xbd\xe4\xdd\x1e\x25\x89\xbc\x72\xa0\x52\xc0\xd5\xa8\xf3\xa8\xfd\xfd\xac\x2b\xd8\x97\x92\x2c\x83\x19\x0e\x35\x89\xc0\xe5\xd5\xef\x5b\xb8\x21\x5c\x2e\x7f\xa4\x1c\x6c\xda\x93\x99\xef\x0a\x43\xd7\xa8\xa3\x32\xed\xee\x90\x3f\xa4\xfd\x0e\x00\x00\xff\xff\x33\xfd\x80\x4a\x63\x01\x00\x00") func distImagesIconsSearchSvgBytes() ([]byte, error) { @@ -408,7 +429,7 @@ func distImagesIconsWarningSvg() (*asset, error) { return a, nil } -var _distIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xdf\x72\xa3\x36\x14\x87\xef\xf3\x14\x94\x19\xdf\x95\x00\xc2\x18\x7b\xc6\x78\xc6\x8d\xe9\x4e\x3a\x1d\xc7\xeb\x75\xda\xdd\xab\x8c\xfe\x1c\x81\x1a\x21\x51\x49\x38\xf1\xdb\x77\x30\x36\x25\xdb\x34\xb3\x57\x18\xf4\x9d\x0f\xce\xcf\x47\x5a\xfe\xb4\x79\xb8\x3b\x7c\xdb\x15\x5e\xe5\x6a\xb9\xba\x59\xf6\x17\xcf\x5b\x56\x80\x59\xf7\xc3\xf3\x96\x35\x38\xec\xd1\x0a\x1b\x0b\x2e\xf7\x5b\xc7\x83\xb9\x3f\x5e\xaa\x9c\x6b\x02\xf8\xbb\x15\xc7\xdc\xff\x1a\x3c\xae\x83\x3b\x5d\x37\xd8\x09\x22\xc1\xf7\xa8\x56\x0e\x94\xcb\xfd\xfb\x22\x07\x56\xc2\xb5\xd2\x09\x27\x61\xb5\xd5\x35\x66\xcb\xb0\xbf\x19\x29\x15\xae\x21\xf7\x19\x58\x6a\x44\xe3\x84\x56\x23\x91\xff\x5f\xf0\x28\xe0\xa5\xd1\xc6\x8d\xa8\x17\xc1\x5c\x95\x33\x38\x0a\x0a\xc1\xf9\xe6\x67\x4f\x28\xe1\x04\x96\x81\xa5\x58\x42\x1e\xfb\xab\x9b\xb3\xe9\x66\xac\x52\xdd\x17\x05\xad\x08\xa9\x56\x5c\x94\x21\xa8\xa3\x30\x5a\xd5\xa0\xc6\xf6\x49\xf6\xcb\x04\xa1\x5a\xb3\x56\xc2\xce\x00\x17\xaf\x13\x84\x26\xc9\x7a\x82\xd0\x55\xd0\x3d\x40\x77\x13\x84\x46\x86\x01\x6a\x8c\x66\x2d\xed\x1a\x1b\x30\xa3\xb5\x7b\xdc\xff\x3e\x20\x61\x2b\xc2\x61\x51\x6a\x8a\x3b\xfa\x70\x6a\x60\x20\x70\xeb\xf4\x40\x14\x35\x01\x53\x6c\xff\xb8\xac\x9e\xbf\xef\xd7\x62\x7d\x78\xdc\x17\x5f\xc6\xcf\xa0\xe3\x02\xa3\x5b\x27\x54\x79\xbe\x82\x09\x2c\x98\x2e\xa7\x9e\x73\xa6\x85\x49\xb6\xb9\x68\xbf\x1e\x8a\xed\xe6\x69\xb7\x7f\x38\x3c\x74\x73\xf2\xc6\xb5\xc1\xee\x52\xc3\xb1\xb4\xff\x16\x3d\xfd\xf6\xf9\xb1\xd8\x7f\x7b\xba\xdf\x1e\x8a\x4f\xfb\xf5\xe1\xfe\x61\xfb\x8e\x7a\xbd\xdb\x8d\x65\x44\x6a\xfa\x2c\x54\xf9\xb9\x05\x23\xc0\x8e\x0a\xce\x74\x2d\x0c\x2e\xe1\x0b\x05\x85\x8d\xd0\x43\x06\xb6\xc6\x52\xde\xc9\xd6\x3a\x30\x43\x16\x3d\xfb\xa7\x70\xd5\x16\xd7\x60\x1b\x4c\xff\xcf\xd7\x31\x07\xfd\x0c\xea\x83\xf5\x3d\x94\x42\xbf\x01\xae\x1d\xf4\x59\x52\x29\x82\x9e\x1e\xb7\xd3\x5a\xa1\xca\x9d\xd1\xaf\xa7\xef\xcd\xad\x85\x0d\x70\xdc\x4a\xb7\xc3\xd6\xba\xca\xe8\xb6\xac\xde\xd5\xbf\x76\x33\xbd\x6e\x1a\x29\xfa\x7f\xff\x93\xd4\x04\xcb\xb7\x89\xfb\x5e\x78\x19\xe3\xa5\x14\xea\xd9\x33\x20\x73\xdf\xba\x93\x04\x5b\x01\x38\xdf\xab\x0c\xf0\xdc\xef\xa6\x09\x5b\x0b\xce\x86\x47\x50\x4c\x9b\x20\x9b\x92\x69\x82\xe9\x34\x8a\xa3\x64\xce\xc9\x8c\x25\xd3\x19\xcc\x53\x4c\x58\x42\x48\x9a\xcc\x6e\xa9\xb5\xd7\xad\xf6\x83\xe6\xeb\xe8\x07\xf3\x88\x30\xb4\x88\x78\x12\x43\x16\x67\x1c\x38\xe1\xf3\x18\xcd\x52\x58\x70\x96\xa6\x8b\xf8\x7d\xb7\xa0\xdd\x3e\x77\xa7\x06\x72\x5f\xd4\xb8\x84\xb0\x51\xe5\xf8\x35\x21\xc7\xc7\x0e\x0a\x62\x8a\x52\x94\xe1\x0c\x47\x19\x8b\x93\x08\x28\xc1\x9c\x42\x96\xc2\x74\x16\xa7\x78\xb6\xb8\x3d\x17\x5e\x83\xe9\x8e\xb3\xf0\x7a\x9e\x2d\x89\x66\xa7\xfe\xd5\x97\xd8\xfa\x33\xc6\xb3\x86\xbe\x17\x53\x1c\x2f\x50\x8a\xe6\x98\x46\x59\x94\x46\x31\x07\xcc\x93\x69\x16\xa1\x29\x45\x14\xc3\x34\xbe\xfd\xcb\xfa\xab\x65\xd8\x4b\x56\x1f\x1a\x87\x78\x48\xcc\x16\x38\x9a\xa5\xd1\x34\xc2\x0b\x9e\xa1\x8c\x2f\xa2\x88\x46\x88\x70\x92\x44\x64\x3e\xff\xce\xd9\x4b\x99\x38\x7a\x82\xe5\x7e\x3f\x74\x04\x5b\x41\x03\x66\x74\xc3\xf4\x8b\x0a\x5e\xb4\xa9\x2b\x2d\xa1\x2b\x63\xe2\x78\x6e\x34\xec\x3b\x5d\x86\xfd\x99\xfe\x4f\x00\x00\x00\xff\xff\x92\xbc\xde\xdf\xeb\x05\x00\x00") +var _distIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x94\xdf\x6f\xa3\xb8\x13\xc0\xdf\xfb\x57\xf0\x45\xca\xdb\x97\x02\x4e\xf8\x11\x29\x44\xca\x35\xe9\xaa\xa7\x53\x9a\x4d\xd3\xbb\xdd\xa7\x6a\xb0\x07\xf0\xd5\xd8\x9c\x6d\xd2\xe6\xbf\x3f\x11\x12\x96\xdd\xeb\xad\xee\x29\x01\x7f\xe6\x63\xcf\x30\x9e\xc5\xff\xd6\x8f\x77\x87\xaf\xbb\x8d\x53\xd9\x5a\x2c\x6f\x16\xfd\x8f\xe3\x2c\x2a\x04\xd6\xfd\x71\x9c\x45\x8d\x16\x1c\x5a\x81\x36\x68\x33\xb7\xb5\x85\x97\xba\xe3\xa5\xca\xda\xc6\xc3\xbf\x5a\x7e\xcc\xdc\x2f\xde\xf3\xca\xbb\x53\x75\x03\x96\xe7\x02\x5d\x87\x2a\x69\x51\xda\xcc\x7d\xd8\x64\xc8\x4a\xbc\x46\x5a\x6e\x05\x2e\xb7\xaa\x06\xb6\xf0\xfb\x87\x91\x52\x42\x8d\x99\xcb\xd0\x50\xcd\x1b\xcb\x95\x1c\x89\xdc\x7f\x82\x47\x8e\x6f\x8d\xd2\x76\x44\xbd\x71\x66\xab\x8c\xe1\x91\x53\xf4\xce\x0f\xff\x77\xb8\xe4\x96\x83\xf0\x0c\x05\x81\x59\xe8\x2e\x6f\xce\xa6\x9b\xb1\x4a\x76\x27\xf2\x5a\xee\x53\x25\x0b\x5e\xfa\x28\x8f\x5c\x2b\x59\xa3\x1c\xdb\x27\xc9\x2f\x13\x42\x6a\xc5\x5a\x81\x3b\x8d\x05\x7f\x9f\x10\x32\x99\xae\x26\x84\x5c\x05\xdd\x0b\x72\x37\x21\x64\x64\x18\xa0\x46\x2b\xd6\xd2\x2e\xb1\x01\xd3\x4a\xd9\xe7\xfd\x6f\x03\x32\x21\xf7\x9d\xe4\x7e\x00\x84\xa2\xd0\x45\x1c\x4e\x0d\x0e\x14\xb4\x56\x0d\xc4\xa6\xce\x51\x6f\xb6\xbf\x5f\x56\xcf\x67\xbc\xdf\xac\x0e\xcf\xfb\xcd\xd3\xb7\x77\xc9\xfa\x42\x7f\x39\x6c\xb6\xeb\x97\xdd\xfe\xf1\xf0\xd8\xb5\xc0\xd3\x38\x6c\x0d\xf6\xb2\x49\x01\xc2\xe0\x10\xf4\xf2\xeb\xe7\xe7\xcd\xfe\xeb\xcb\xc3\xf6\xb0\xf9\xb4\x5f\x1d\x1e\x1e\xb7\x3d\x66\x75\xfb\x8d\x5a\xed\x76\x63\x59\x2e\x14\x7d\xe5\xb2\xfc\xdc\xa2\xe6\x68\x46\x01\x67\xba\xe6\x1a\x4a\x7c\xa2\x28\x41\x73\x35\xa4\x66\x6a\x10\xe2\x4e\xb4\xc6\xa2\x1e\x52\xec\xd9\x3f\xb8\xad\xb6\x50\xa3\x69\x80\xfe\x9b\xaf\x63\x0e\xea\x15\xe5\x4f\xd6\xf7\x58\x72\xf5\x1d\x70\xcd\x00\xbb\x52\x7a\x54\x70\xaf\xa7\xc7\xe9\xb4\x86\xcb\x72\xa7\xd5\xfb\xe9\x47\x73\x6b\x70\x8d\x05\xb4\xc2\xee\xc0\x18\x5b\x69\xd5\x96\xd5\x87\xfa\xf7\xae\x5d\x57\x4d\x23\x78\xff\x51\x3f\x09\x95\x83\xf8\xbe\xe2\xae\xe3\x5f\x3a\x74\x21\xb8\x7c\x75\x34\x8a\xcc\x35\xf6\x24\xd0\x54\x88\xd6\x75\x2a\x8d\x45\xe6\xfa\x2d\xf7\xc1\x18\xb4\xc6\x3f\xa2\x64\x4a\x7b\x2c\x8d\x03\x92\xd3\x10\x31\x82\x70\x9a\x93\x18\x93\x20\x8e\xf3\x24\xce\x63\xc2\x82\x78\x7a\x4b\x8d\xb9\xde\xa2\xff\x68\xbe\x76\xb5\x57\xc4\x34\x0e\xd2\x3c\x82\x64\x16\x44\xc9\x3c\x9c\x92\x79\x90\xcf\x67\x51\x1a\x16\x30\x8d\x67\xe9\xc7\x6e\x4e\xbb\x2b\x6c\x4f\x0d\x66\x2e\xaf\xa1\x44\xbf\x91\xe5\x78\x1b\xbf\x80\x63\x07\x79\x21\x25\x11\x49\x20\x81\x20\x61\xe1\x34\x40\x9a\x43\x41\x31\x89\x70\x16\x87\x11\xc4\xf3\xdb\x73\xe0\xb5\x30\xdd\xa4\xf2\xaf\xa3\x6a\x91\x2b\x76\xea\xb7\xbe\x94\xad\x1f\x1f\x8e\xd1\xf4\xc3\x32\xc5\x04\x53\xa4\x64\x4a\x59\x10\x51\x64\x00\x49\x38\x07\x5a\x04\x45\x9a\x47\x51\x34\xbb\xfd\xd3\xb8\xcb\x85\xdf\x4b\x96\x3f\x35\x0e\xe5\xc1\x59\x1a\x21\xe4\x34\x67\x51\x00\x61\x92\xa4\x61\x8c\x74\x3e\x4d\x68\x42\xc2\x59\x5e\xa4\x3f\x38\x7b\x29\xe3\x47\x87\xb3\xcc\xed\x9b\x2e\x07\xc3\xa9\xc7\xb4\x6a\x98\x7a\x93\xde\x9b\xd2\x75\xa5\x04\x76\x61\x8c\x1f\xcf\x89\xfa\x7d\xa6\x0b\xbf\x1f\xd7\x7f\x07\x00\x00\xff\xff\xcd\x38\xeb\x99\xc6\x05\x00\x00") func distIndexHtmlBytes() ([]byte, error) { return bindataRead( @@ -423,7 +444,7 @@ func distIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "dist/index.html", size: 1515, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} + info := bindataFileInfo{name: "dist/index.html", size: 1478, mode: os.FileMode(420), modTime: time.Unix(1480000000, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -501,10 +522,10 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ "dist/assets/auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js": distAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, - "dist/assets/nomad-ui-80bd290f31e717fefbf81265e9fd5591.css": distAssetsNomadUi80bd290f31e717fefbf81265e9fd5591Css, - "dist/assets/nomad-ui-b1d9a065040a9f727f900c02bfb30b88.js": distAssetsNomadUiB1d9a065040a9f727f900c02bfb30b88Js, - "dist/assets/vendor-1192528ac070501feaf347024c2cae41.js": distAssetsVendor1192528ac070501feaf347024c2cae41Js, - "dist/assets/vendor-74b43ac401038fb6d346e85abd3bb536.css": distAssetsVendor74b43ac401038fb6d346e85abd3bb536Css, + "dist/assets/nomad-ui-e485eabcbd50a177816ec937c7214bf8.js": distAssetsNomadUiE485eabcbd50a177816ec937c7214bf8Js, + "dist/assets/nomad-ui-f6c608b5a74057913290b94581fa3648.css": distAssetsNomadUiF6c608b5a74057913290b94581fa3648Css, + "dist/assets/vendor-d62e8ec23cd05cedaa719acf0f8b5554.js": distAssetsVendorD62e8ec23cd05cedaa719acf0f8b5554Js, + "dist/assets/vendor-d8602bc1ee5a13b26e7066b76b62d063.css": distAssetsVendorD8602bc1ee5a13b26e7066b76b62d063Css, "dist/crossdomain.xml": distCrossdomainXml, "dist/ember-fetch/fetch-fastboot-5e5d008c8b65b0ac116f7635d0c6c6b9.js": distEmberFetchFetchFastboot5e5d008c8b65b0ac116f7635d0c6c6b9Js, "dist/favicon-1c2527a7a07d130ecbafce75e4615a69.png": distFavicon1c2527a7a07d130ecbafce75e4615a69Png, @@ -514,6 +535,7 @@ var _bindata = map[string]func() (*asset, error){ "dist/images/icons/history.svg": distImagesIconsHistorySvg, "dist/images/icons/media-pause.svg": distImagesIconsMediaPauseSvg, "dist/images/icons/media-play.svg": distImagesIconsMediaPlaySvg, + "dist/images/icons/node-init-circle-fill.svg": distImagesIconsNodeInitCircleFillSvg, "dist/images/icons/search.svg": distImagesIconsSearchSvg, "dist/images/icons/warning.svg": distImagesIconsWarningSvg, "dist/index.html": distIndexHtml, @@ -563,10 +585,10 @@ var _bintree = &bintree{nil, map[string]*bintree{ "dist": &bintree{nil, map[string]*bintree{ "assets": &bintree{nil, map[string]*bintree{ "auto-import-fastboot-d41d8cd98f00b204e9800998ecf8427e.js": &bintree{distAssetsAutoImportFastbootD41d8cd98f00b204e9800998ecf8427eJs, map[string]*bintree{}}, - "nomad-ui-80bd290f31e717fefbf81265e9fd5591.css": &bintree{distAssetsNomadUi80bd290f31e717fefbf81265e9fd5591Css, map[string]*bintree{}}, - "nomad-ui-b1d9a065040a9f727f900c02bfb30b88.js": &bintree{distAssetsNomadUiB1d9a065040a9f727f900c02bfb30b88Js, map[string]*bintree{}}, - "vendor-1192528ac070501feaf347024c2cae41.js": &bintree{distAssetsVendor1192528ac070501feaf347024c2cae41Js, map[string]*bintree{}}, - "vendor-74b43ac401038fb6d346e85abd3bb536.css": &bintree{distAssetsVendor74b43ac401038fb6d346e85abd3bb536Css, map[string]*bintree{}}, + "nomad-ui-e485eabcbd50a177816ec937c7214bf8.js": &bintree{distAssetsNomadUiE485eabcbd50a177816ec937c7214bf8Js, map[string]*bintree{}}, + "nomad-ui-f6c608b5a74057913290b94581fa3648.css": &bintree{distAssetsNomadUiF6c608b5a74057913290b94581fa3648Css, map[string]*bintree{}}, + "vendor-d62e8ec23cd05cedaa719acf0f8b5554.js": &bintree{distAssetsVendorD62e8ec23cd05cedaa719acf0f8b5554Js, map[string]*bintree{}}, + "vendor-d8602bc1ee5a13b26e7066b76b62d063.css": &bintree{distAssetsVendorD8602bc1ee5a13b26e7066b76b62d063Css, map[string]*bintree{}}, }}, "crossdomain.xml": &bintree{distCrossdomainXml, map[string]*bintree{}}, "ember-fetch": &bintree{nil, map[string]*bintree{ @@ -581,6 +603,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ "history.svg": &bintree{distImagesIconsHistorySvg, map[string]*bintree{}}, "media-pause.svg": &bintree{distImagesIconsMediaPauseSvg, map[string]*bintree{}}, "media-play.svg": &bintree{distImagesIconsMediaPlaySvg, map[string]*bintree{}}, + "node-init-circle-fill.svg": &bintree{distImagesIconsNodeInitCircleFillSvg, map[string]*bintree{}}, "search.svg": &bintree{distImagesIconsSearchSvg, map[string]*bintree{}}, "warning.svg": &bintree{distImagesIconsWarningSvg, map[string]*bintree{}}, }}, diff --git a/command/agent/command.go b/command/agent/command.go index e8528a5ea08..84f74e55a5d 100644 --- a/command/agent/command.go +++ b/command/agent/command.go @@ -29,6 +29,7 @@ import ( flaghelper "github.com/hashicorp/nomad/helper/flag-helpers" gatedwriter "github.com/hashicorp/nomad/helper/gated-writer" "github.com/hashicorp/nomad/helper/logging" + "github.com/hashicorp/nomad/helper/winsvc" "github.com/hashicorp/nomad/nomad/structs/config" "github.com/hashicorp/nomad/version" "github.com/mitchellh/cli" @@ -155,6 +156,10 @@ func (c *Command) readConfig() *Config { return nil }), "consul-verify-ssl", "") flags.StringVar(&cmdConfig.Consul.Addr, "consul-address", "", "") + flags.Var((flaghelper.FuncBoolVar)(func(b bool) error { + cmdConfig.Consul.AllowUnauthenticated = &b + return nil + }), "consul-allow-unauthenticated", "") // Vault options flags.Var((flaghelper.FuncBoolVar)(func(b bool) error { @@ -247,6 +252,7 @@ func (c *Command) readConfig() *Config { if config.Client == nil { config.Client = &ClientConfig{} } + if config.Server == nil { config.Server = &ServerConfig{} } @@ -279,14 +285,14 @@ func (c *Command) readConfig() *Config { config.PluginDir = filepath.Join(config.DataDir, "plugins") } - if !c.isValidConfig(config) { + if !c.isValidConfig(config, cmdConfig) { return nil } return config } -func (c *Command) isValidConfig(config *Config) bool { +func (c *Command) isValidConfig(config, cmdConfig *Config) bool { // Check that the server is running in at least one mode. if !(config.Server.Enabled || config.Client.Enabled) { @@ -362,19 +368,20 @@ func (c *Command) isValidConfig(config *Config) bool { } // Check the bootstrap flags - if config.Server.BootstrapExpect > 0 && !config.Server.Enabled { + if !config.Server.Enabled && cmdConfig.Server.BootstrapExpect > 0 { + // report an error if BootstrapExpect is set in CLI but server is disabled c.Ui.Error("Bootstrap requires server mode to be enabled") return false } - if config.Server.BootstrapExpect == 1 { + if config.Server.Enabled && config.Server.BootstrapExpect == 1 { c.Ui.Error("WARNING: Bootstrap mode enabled! Potentially unsafe operation.") } return true } -// setupLoggers is used to setup the logGate, logWriter, and our logOutput -func (c *Command) setupLoggers(config *Config) (*gatedwriter.Writer, *logWriter, io.Writer) { +// setupLoggers is used to setup the logGate, and our logOutput +func (c *Command) setupLoggers(config *Config) (*gatedwriter.Writer, io.Writer) { // Setup logging. First create the gated log writer, which will // store logs until we're ready to show them. Then create the level // filter, filtering logs of the specified level. @@ -389,35 +396,64 @@ func (c *Command) setupLoggers(config *Config) (*gatedwriter.Writer, *logWriter, c.Ui.Error(fmt.Sprintf( "Invalid log level: %s. Valid log levels are: %v", c.logFilter.MinLevel, c.logFilter.Levels)) - return nil, nil, nil + return nil, nil } + // Create a log writer, and wrap a logOutput around it + writers := []io.Writer{c.logFilter} + // Check if syslog is enabled - var syslog io.Writer if config.EnableSyslog { l, err := gsyslog.NewLogger(gsyslog.LOG_NOTICE, config.SyslogFacility, "nomad") if err != nil { c.Ui.Error(fmt.Sprintf("Syslog setup failed: %v", err)) - return nil, nil, nil + return nil, nil } - syslog = &SyslogWrapper{l, c.logFilter} + writers = append(writers, &SyslogWrapper{l, c.logFilter}) } - // Create a log writer, and wrap a logOutput around it - logWriter := NewLogWriter(512) - var logOutput io.Writer - if syslog != nil { - logOutput = io.MultiWriter(c.logFilter, logWriter, syslog) - } else { - logOutput = io.MultiWriter(c.logFilter, logWriter) + // Check if file logging is enabled + if config.LogFile != "" { + dir, fileName := filepath.Split(config.LogFile) + + // if a path is provided, but has no filename, then a default is used. + if fileName == "" { + fileName = "nomad.log" + } + + // Try to enter the user specified log rotation duration first + var logRotateDuration time.Duration + if config.LogRotateDuration != "" { + duration, err := time.ParseDuration(config.LogRotateDuration) + if err != nil { + c.Ui.Error(fmt.Sprintf("Failed to parse log rotation duration: %v", err)) + return nil, nil + } + logRotateDuration = duration + } else { + // Default to 24 hrs if no rotation period is specified + logRotateDuration = 24 * time.Hour + } + + logFile := &logFile{ + logFilter: c.logFilter, + fileName: fileName, + logPath: dir, + duration: logRotateDuration, + MaxBytes: config.LogRotateBytes, + MaxFiles: config.LogRotateMaxFiles, + } + + writers = append(writers, logFile) } - c.logOutput = logOutput - log.SetOutput(logOutput) - return logGate, logWriter, logOutput + + c.logOutput = io.MultiWriter(writers...) + log.SetOutput(c.logOutput) + return logGate, c.logOutput } // setupAgent is used to start the agent and various interfaces -func (c *Command) setupAgent(config *Config, logger hclog.Logger, logOutput io.Writer, inmem *metrics.InmemSink) error { +func (c *Command) setupAgent(config *Config, logger hclog.InterceptLogger, logOutput io.Writer, inmem *metrics.InmemSink) error { c.Ui.Output("Starting Nomad agent...") agent, err := NewAgent(config, logger, logOutput, inmem) if err != nil { @@ -530,6 +566,7 @@ func (c *Command) AutocompleteFlags() complete.Flags { "-consul-ssl": complete.PredictNothing, "-consul-verify-ssl": complete.PredictNothing, "-consul-address": complete.PredictAnything, + "-consul-token": complete.PredictAnything, "-vault-enabled": complete.PredictNothing, "-vault-allow-unauthenticated": complete.PredictNothing, "-vault-token": complete.PredictAnything, @@ -566,13 +603,13 @@ func (c *Command) Run(args []string) int { } // Setup the log outputs - logGate, _, logOutput := c.setupLoggers(config) + logGate, logOutput := c.setupLoggers(config) if logGate == nil { return 1 } // Create logger - logger := hclog.New(&hclog.LoggerOptions{ + logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ Name: "agent", Level: hclog.LevelFromString(config.LogLevel), Output: logOutput, @@ -748,6 +785,8 @@ WAIT: select { case s := <-signalCh: sig = s + case <-winsvc.ShutdownChannel(): + sig = os.Interrupt case <-c.ShutdownCh: sig = os.Interrupt case <-c.retryJoinErrCh: @@ -1218,7 +1257,7 @@ Server Options: -raft-protocol= The Raft protocol version to use. Used for enabling certain Autopilot - features. Defaults to 3. + features. Defaults to 2. -retry-join=

Address of an agent to join at start time with retries enabled. diff --git a/command/agent/config.go b/command/agent/config.go index b4594aa743f..12b5dfe7aae 100644 --- a/command/agent/config.go +++ b/command/agent/config.go @@ -7,6 +7,7 @@ import ( "io" "net" "os" + "os/exec" "os/user" "path/filepath" "runtime" @@ -56,6 +57,18 @@ type Config struct { // LogJson enables log output in a JSON format LogJson bool `hcl:"log_json"` + // LogFile enables logging to a file + LogFile string `hcl:"log_file"` + + // LogRotateDuration is the time period that logs should be rotated in + LogRotateDuration string `hcl:"log_rotate_duration"` + + // LogRotateBytes is the max number of bytes that should be written to a file + LogRotateBytes int `hcl:"log_rotate_bytes"` + + // LogRotateMaxFiles is the max number of log files to keep + LogRotateMaxFiles int `hcl:"log_rotate_max_files"` + // BindAddr is the address on which all of nomad's services will // be bound. If not specified, this defaults to 127.0.0.1. BindAddr string `hcl:"bind_addr"` @@ -153,6 +166,9 @@ type Config struct { // Plugins is the set of configured plugins Plugins []*config.PluginConfig `hcl:"plugin"` + // Limits contains the configuration for timeouts. + Limits config.Limits `hcl:"limits"` + // ExtraKeysHCL is used by hcl to surface unexpected keys ExtraKeysHCL []string `hcl:",unusedKeys" json:"-"` } @@ -440,6 +456,11 @@ type ServerConfig struct { // ServerJoin contains information that is used to attempt to join servers ServerJoin *ServerJoin `hcl:"server_join"` + // DefaultSchedulerConfig configures the initial scheduler config to be persisted in Raft. + // Once the cluster is bootstrapped, and Raft persists the config (from here or through API), + // This value is ignored. + DefaultSchedulerConfig *structs.SchedulerConfiguration `hcl:"default_scheduler_config"` + // ExtraKeysHCL is used by hcl to surface unexpected keys ExtraKeysHCL []string `hcl:",unusedKeys" json:"-"` } @@ -717,6 +738,10 @@ func newDevModeConfig(devMode, connectMode bool) (*devModeConfig, error) { return nil, fmt.Errorf( "-dev-connect uses network namespaces and is only supported for root.") } + // Ensure Consul is on PATH + if _, err := exec.LookPath("consul"); err != nil { + return nil, fmt.Errorf("-dev-connect requires a 'consul' binary in Nomad's $PATH") + } mode.connectMode = true } err := mode.networkConfig() @@ -857,6 +882,7 @@ func DefaultConfig() *Config { Version: version.GetVersion(), Autopilot: config.DefaultAutopilotConfig(), DisableUpdateCheck: helper.BoolToPtr(false), + Limits: config.DefaultLimits(), } } @@ -910,6 +936,18 @@ func (c *Config) Merge(b *Config) *Config { if b.LogJson { result.LogJson = true } + if b.LogFile != "" { + result.LogFile = b.LogFile + } + if b.LogRotateDuration != "" { + result.LogRotateDuration = b.LogRotateDuration + } + if b.LogRotateBytes != 0 { + result.LogRotateBytes = b.LogRotateBytes + } + if b.LogRotateMaxFiles != 0 { + result.LogRotateMaxFiles = b.LogRotateMaxFiles + } if b.BindAddr != "" { result.BindAddr = b.BindAddr } @@ -1049,6 +1087,8 @@ func (c *Config) Merge(b *Config) *Config { result.HTTPAPIResponseHeaders[k] = v } + result.Limits = c.Limits.Merge(b.Limits) + return &result } @@ -1328,6 +1368,11 @@ func (a *ServerConfig) Merge(b *ServerConfig) *ServerConfig { result.ServerJoin = result.ServerJoin.Merge(b.ServerJoin) } + if b.DefaultSchedulerConfig != nil { + c := *b.DefaultSchedulerConfig + result.DefaultSchedulerConfig = &c + } + // Add the schedulers result.EnabledSchedulers = append(result.EnabledSchedulers, b.EnabledSchedulers...) diff --git a/command/agent/config_parse_test.go b/command/agent/config_parse_test.go index ad8e131d75b..961860fdc04 100644 --- a/command/agent/config_parse_test.go +++ b/command/agent/config_parse_test.go @@ -19,6 +19,7 @@ var basicConfig = &Config{ NodeName: "my-web", DataDir: "/tmp/nomad", PluginDir: "/tmp/nomad-plugins", + LogFile: "/var/log/nomad.log", LogLevel: "ERR", LogJson: true, BindAddr: "192.168.0.1", @@ -152,25 +153,26 @@ var basicConfig = &Config{ DisableUpdateCheck: helper.BoolToPtr(true), DisableAnonymousSignature: true, Consul: &config.ConsulConfig{ - ServerServiceName: "nomad", - ServerHTTPCheckName: "nomad-server-http-health-check", - ServerSerfCheckName: "nomad-server-serf-health-check", - ServerRPCCheckName: "nomad-server-rpc-health-check", - ClientServiceName: "nomad-client", - ClientHTTPCheckName: "nomad-client-http-health-check", - Addr: "127.0.0.1:9500", - Token: "token1", - Auth: "username:pass", - EnableSSL: &trueValue, - VerifySSL: &trueValue, - CAFile: "/path/to/ca/file", - CertFile: "/path/to/cert/file", - KeyFile: "/path/to/key/file", - ServerAutoJoin: &trueValue, - ClientAutoJoin: &trueValue, - AutoAdvertise: &trueValue, - ChecksUseAdvertise: &trueValue, - Timeout: 5 * time.Second, + ServerServiceName: "nomad", + ServerHTTPCheckName: "nomad-server-http-health-check", + ServerSerfCheckName: "nomad-server-serf-health-check", + ServerRPCCheckName: "nomad-server-rpc-health-check", + ClientServiceName: "nomad-client", + ClientHTTPCheckName: "nomad-client-http-health-check", + Addr: "127.0.0.1:9500", + AllowUnauthenticated: &trueValue, + Token: "token1", + Auth: "username:pass", + EnableSSL: &trueValue, + VerifySSL: &trueValue, + CAFile: "/path/to/ca/file", + CertFile: "/path/to/cert/file", + KeyFile: "/path/to/key/file", + ServerAutoJoin: &trueValue, + ClientAutoJoin: &trueValue, + AutoAdvertise: &trueValue, + ChecksUseAdvertise: &trueValue, + Timeout: 5 * time.Second, }, Vault: &config.VaultConfig{ Addr: "127.0.0.1:9500", @@ -411,14 +413,10 @@ func TestConfig_Parse(t *testing.T) { t.Run(tc.File, func(t *testing.T) { require := require.New(t) path, err := filepath.Abs(filepath.Join("./testdata", tc.File)) - if err != nil { - t.Fatalf("file: %s\n\n%s", tc.File, err) - } + require.NoError(err) actual, err := ParseConfigFile(path) - if (err != nil) != tc.Err { - t.Fatalf("file: %s\n\n%s", tc.File, err) - } + require.NoError(err) // ParseConfig used to re-merge defaults for these three objects, // despite them already being merged in LoadConfig. The test structs diff --git a/command/agent/config_test.go b/command/agent/config_test.go index f989670e9fd..f43d4edf4fc 100644 --- a/command/agent/config_test.go +++ b/command/agent/config_test.go @@ -12,9 +12,9 @@ import ( "testing" "time" - "github.com/hashicorp/consul/sdk/freeport" "github.com/hashicorp/nomad/client/testutil" "github.com/hashicorp/nomad/helper" + "github.com/hashicorp/nomad/helper/freeport" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/nomad/structs/config" "github.com/stretchr/testify/require" @@ -160,21 +160,22 @@ func TestConfig_Merge(t *testing.T) { TLSServerName: "1", }, Consul: &config.ConsulConfig{ - ServerServiceName: "1", - ClientServiceName: "1", - AutoAdvertise: &falseValue, - Addr: "1", - Timeout: 1 * time.Second, - Token: "1", - Auth: "1", - EnableSSL: &falseValue, - VerifySSL: &falseValue, - CAFile: "1", - CertFile: "1", - KeyFile: "1", - ServerAutoJoin: &falseValue, - ClientAutoJoin: &falseValue, - ChecksUseAdvertise: &falseValue, + ServerServiceName: "1", + ClientServiceName: "1", + AutoAdvertise: &falseValue, + Addr: "1", + AllowUnauthenticated: &falseValue, + Timeout: 1 * time.Second, + Token: "1", + Auth: "1", + EnableSSL: &falseValue, + VerifySSL: &falseValue, + CAFile: "1", + CertFile: "1", + KeyFile: "1", + ServerAutoJoin: &falseValue, + ClientAutoJoin: &falseValue, + ChecksUseAdvertise: &falseValue, }, Autopilot: &config.AutopilotConfig{ CleanupDeadServers: &falseValue, @@ -335,21 +336,22 @@ func TestConfig_Merge(t *testing.T) { TLSServerName: "2", }, Consul: &config.ConsulConfig{ - ServerServiceName: "2", - ClientServiceName: "2", - AutoAdvertise: &trueValue, - Addr: "2", - Timeout: 2 * time.Second, - Token: "2", - Auth: "2", - EnableSSL: &trueValue, - VerifySSL: &trueValue, - CAFile: "2", - CertFile: "2", - KeyFile: "2", - ServerAutoJoin: &trueValue, - ClientAutoJoin: &trueValue, - ChecksUseAdvertise: &trueValue, + ServerServiceName: "2", + ClientServiceName: "2", + AutoAdvertise: &trueValue, + Addr: "2", + AllowUnauthenticated: &trueValue, + Timeout: 2 * time.Second, + Token: "2", + Auth: "2", + EnableSSL: &trueValue, + VerifySSL: &trueValue, + CAFile: "2", + CertFile: "2", + KeyFile: "2", + ServerAutoJoin: &trueValue, + ClientAutoJoin: &trueValue, + ChecksUseAdvertise: &trueValue, }, Sentinel: &config.SentinelConfig{ Imports: []*config.SentinelImport{ @@ -596,7 +598,9 @@ func TestConfig_Listener(t *testing.T) { } // Works with valid inputs - ports := freeport.GetT(t, 2) + ports := freeport.MustTake(2) + defer freeport.Return(ports) + ln, err := config.Listener("tcp", "127.0.0.1", ports[0]) if err != nil { t.Fatalf("err: %s", err) diff --git a/command/agent/consul/acl_testing.go b/command/agent/consul/acl_testing.go new file mode 100644 index 00000000000..0d4c2af074a --- /dev/null +++ b/command/agent/consul/acl_testing.go @@ -0,0 +1,305 @@ +package consul + +import ( + "errors" + "sync" + "time" + + "github.com/hashicorp/consul/api" + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/nomad/helper/uuid" +) + +var _ ACLsAPI = (*MockACLsAPI)(nil) + +// MockACLsAPI is a mock of consul.ACLsAPI +type MockACLsAPI struct { + logger hclog.Logger + + lock sync.Mutex + state struct { + index uint64 + error error + tokens map[string]*api.ACLToken + } +} + +func NewMockACLsAPI(l hclog.Logger) *MockACLsAPI { + return &MockACLsAPI{ + logger: l.Named("mock_consul"), + state: struct { + index uint64 + error error + tokens map[string]*api.ACLToken + }{tokens: make(map[string]*api.ACLToken)}, + } +} + +// Example Consul policies for use in tests. +const ( + ExamplePolicyID1 = "a7c86856-0af5-4ab5-8834-03f4517e5564" + ExamplePolicyID2 = "ffa1b66c-967d-4468-8775-c687b5cfc16e" + ExamplePolicyID3 = "f68f0c36-51f8-4343-97dd-f0d4816c915f" +) + +func (m *MockACLsAPI) PolicyRead(policyID string, _ *api.QueryOptions) (*api.ACLPolicy, *api.QueryMeta, error) { + switch policyID { + + case ExamplePolicyID1: + return &api.ACLPolicy{ + ID: ExamplePolicyID1, + Name: "example-policy-1", + Rules: `service "service1" { policy = "write" }`, + }, nil, nil + + case ExamplePolicyID2: + return &api.ACLPolicy{ + ID: ExamplePolicyID2, + Rules: `service_prefix "foo-" { policy = "write" }`, + }, nil, nil + + case ExamplePolicyID3: + return &api.ACLPolicy{ + ID: ExamplePolicyID3, + Rules: ` +service "service1" { policy = "read" } +service "service2" { policy = "write" }`, + }, nil, nil + + default: + return nil, nil, errors.New("no such policy") + } +} + +// Example Consul roles for use in tests. +const ( + ExampleRoleID1 = "e569a3a8-7dfb-b024-e492-e790fe3c4183" + ExampleRoleID2 = "88c825f4-d0da-1c2b-0c1c-cc9fe84c4468" + ExampleRoleID3 = "b19b2058-6205-6dff-d2b0-470f29b8e627" +) + +func (m *MockACLsAPI) RoleRead(roleID string, _ *api.QueryOptions) (*api.ACLRole, *api.QueryMeta, error) { + switch roleID { + case ExampleRoleID1: + return &api.ACLRole{ + ID: ExampleRoleID1, + Name: "example-role-1", + Policies: []*api.ACLRolePolicyLink{{ + ID: ExamplePolicyID1, + Name: "example-policy-1", + }}, + ServiceIdentities: nil, + }, nil, nil + case ExampleRoleID2: + return &api.ACLRole{ + ID: ExampleRoleID2, + Name: "example-role-2", + Policies: []*api.ACLRolePolicyLink{{ + ID: ExamplePolicyID2, + Name: "example-policy-2", + }}, + ServiceIdentities: nil, + }, nil, nil + case ExampleRoleID3: + return &api.ACLRole{ + ID: ExampleRoleID3, + Name: "example-role-3", + Policies: nil, // todo add more if needed + ServiceIdentities: nil, // todo add more if needed + }, nil, nil + default: + return nil, nil, nil + } +} + +// Example Consul "operator" tokens for use in tests. + +const ( + ExampleOperatorTokenID0 = "de591604-86eb-1e6f-8b44-d4db752921ae" + ExampleOperatorTokenID1 = "59c219c2-47e4-43f3-bb45-258fd13f59d5" + ExampleOperatorTokenID2 = "868cc216-e123-4c2b-b362-f4d4c087de8e" + ExampleOperatorTokenID3 = "6177d1b9-c0f6-4118-b891-d818a3cb80b1" + ExampleOperatorTokenID4 = "754ae26c-f3cc-e088-d486-9c0d20f5eaea" +) + +var ( + ExampleOperatorToken0 = &api.ACLToken{ + SecretID: ExampleOperatorTokenID0, + AccessorID: "228865c6-3bf6-6683-df03-06dea2779088 ", + Description: "Operator Token 0", + } + + ExampleOperatorToken1 = &api.ACLToken{ + SecretID: ExampleOperatorTokenID1, + AccessorID: "e341bacd-535e-417c-8f45-f88d7faffcaf", + Description: "Operator Token 1", + Policies: []*api.ACLTokenPolicyLink{{ + ID: ExamplePolicyID1, + }}, + } + + ExampleOperatorToken2 = &api.ACLToken{ + SecretID: ExampleOperatorTokenID2, + AccessorID: "615b4d77-5164-4ec6-b616-24c0b24ac9cb", + Description: "Operator Token 2", + Policies: []*api.ACLTokenPolicyLink{{ + ID: ExamplePolicyID2, + }}, + } + + ExampleOperatorToken3 = &api.ACLToken{ + SecretID: ExampleOperatorTokenID3, + AccessorID: "6b7de0d7-15f7-45b4-95eb-fb775bfe3fdc", + Description: "Operator Token 3", + Policies: []*api.ACLTokenPolicyLink{{ + ID: ExamplePolicyID3, + }}, + } + + ExampleOperatorToken4 = &api.ACLToken{ + SecretID: ExampleOperatorTokenID4, + AccessorID: "7b5fdb1a-71e5-f3d8-2cfe-448d973f327d", + Description: "Operator Token 4", + Policies: nil, // no direct policy, only roles + Roles: []*api.ACLTokenRoleLink{{ + ID: ExampleRoleID1, + Name: "example-role-1", + }}, + } +) + +func (m *MockACLsAPI) TokenReadSelf(q *api.QueryOptions) (*api.ACLToken, *api.QueryMeta, error) { + switch q.Token { + + case ExampleOperatorTokenID1: + return ExampleOperatorToken1, nil, nil + + case ExampleOperatorTokenID2: + return ExampleOperatorToken2, nil, nil + + case ExampleOperatorTokenID3: + return ExampleOperatorToken3, nil, nil + + case ExampleOperatorTokenID4: + return ExampleOperatorToken4, nil, nil + + default: + return nil, nil, errors.New("no such token") + } +} + +// SetError is a helper method for configuring an error that will be returned +// on future calls to mocked methods. +func (m *MockACLsAPI) SetError(err error) { + m.lock.Lock() + defer m.lock.Unlock() + m.state.error = err +} + +// TokenCreate is a mock of ACLsAPI.TokenCreate +func (m *MockACLsAPI) TokenCreate(token *api.ACLToken, opts *api.WriteOptions) (*api.ACLToken, *api.WriteMeta, error) { + index, created, meta, err := m.tokenCreate(token, opts) + + services := func(token *api.ACLToken) []string { + if token == nil { + return nil + } + var names []string + for _, id := range token.ServiceIdentities { + names = append(names, id.ServiceName) + } + return names + }(created) + + description := func(token *api.ACLToken) string { + if token == nil { + return "" + } + return token.Description + }(created) + + accessor := func(token *api.ACLToken) string { + if token == nil { + return "" + } + return token.AccessorID + }(created) + + secret := func(token *api.ACLToken) string { + if token == nil { + return "" + } + return token.SecretID + }(created) + + m.logger.Trace("TokenCreate()", "description", description, "service_identities", services, "accessor", accessor, "secret", secret, "index", index, "error", err) + return created, meta, err +} + +func (m *MockACLsAPI) tokenCreate(token *api.ACLToken, _ *api.WriteOptions) (uint64, *api.ACLToken, *api.WriteMeta, error) { + m.lock.Lock() + defer m.lock.Unlock() + + m.state.index++ + + if m.state.error != nil { + return m.state.index, nil, nil, m.state.error + } + + secret := &api.ACLToken{ + CreateIndex: m.state.index, + ModifyIndex: m.state.index, + AccessorID: uuid.Generate(), + SecretID: uuid.Generate(), + Description: token.Description, + ServiceIdentities: token.ServiceIdentities, + CreateTime: time.Now(), + } + + m.state.tokens[secret.AccessorID] = secret + + w := &api.WriteMeta{ + RequestTime: 1 * time.Millisecond, + } + + return m.state.index, secret, w, nil +} + +// TokenDelete is a mock of ACLsAPI.TokenDelete +func (m *MockACLsAPI) TokenDelete(accessorID string, opts *api.WriteOptions) (*api.WriteMeta, error) { + meta, err := m.tokenDelete(accessorID, opts) + m.logger.Trace("TokenDelete()", "accessor", accessorID, "error", err) + return meta, err +} + +func (m *MockACLsAPI) tokenDelete(tokenID string, _ *api.WriteOptions) (*api.WriteMeta, error) { + m.lock.Lock() + defer m.lock.Unlock() + + m.state.index++ + + if m.state.error != nil { + return nil, m.state.error + } + + if _, exists := m.state.tokens[tokenID]; !exists { + return nil, nil // consul no-ops delete of non-existent token + } + + delete(m.state.tokens, tokenID) + + m.logger.Trace("TokenDelete()") + + return nil, nil +} + +// TokenList is a mock of ACLsAPI.TokenList +func (m *MockACLsAPI) TokenList(_ *api.QueryOptions) ([]*api.ACLTokenListEntry, *api.QueryMeta, error) { + m.lock.Lock() + defer m.lock.Unlock() + + //todo(shoenig): will need this for background token reconciliation + // coming in another issue + + return nil, nil, nil +} diff --git a/command/agent/consul/catalog_testing.go b/command/agent/consul/catalog_testing.go index 621d4143992..5eb777376f2 100644 --- a/command/agent/consul/catalog_testing.go +++ b/command/agent/consul/catalog_testing.go @@ -4,19 +4,18 @@ import ( "fmt" "sync" - log "github.com/hashicorp/go-hclog" - "github.com/hashicorp/consul/api" + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/nomad/helper" ) // MockCatalog can be used for testing where the CatalogAPI is needed. type MockCatalog struct { - logger log.Logger + logger hclog.Logger } -func NewMockCatalog(l log.Logger) *MockCatalog { - l = l.Named("mock_consul") - return &MockCatalog{logger: l} +func NewMockCatalog(l hclog.Logger) *MockCatalog { + return &MockCatalog{logger: l.Named("mock_consul")} } func (m *MockCatalog) Datacenters() ([]string, error) { @@ -111,6 +110,7 @@ func (c *MockAgent) Services() (map[string]*api.AgentService, error) { ID: v.ID, Service: v.Name, Tags: make([]string, len(v.Tags)), + Meta: helper.CopyMapStringString(v.Meta), Port: v.Port, Address: v.Address, EnableTagOverride: v.EnableTagOverride, diff --git a/command/agent/consul/check_watcher.go b/command/agent/consul/check_watcher.go index 99c4a5be4c3..058c298f512 100644 --- a/command/agent/consul/check_watcher.go +++ b/command/agent/consul/check_watcher.go @@ -22,8 +22,8 @@ type ChecksAPI interface { Checks() (map[string]*api.AgentCheck, error) } -// TaskRestarter allows the checkWatcher to restart tasks. -type TaskRestarter interface { +// WorkloadRestarter allows the checkWatcher to restart tasks or entire task groups. +type WorkloadRestarter interface { Restart(ctx context.Context, event *structs.TaskEvent, failure bool) error } @@ -35,7 +35,7 @@ type checkRestart struct { checkName string taskKey string // composite of allocID + taskName for uniqueness - task TaskRestarter + task WorkloadRestarter grace time.Duration interval time.Duration timeLimit time.Duration @@ -114,7 +114,7 @@ func (c *checkRestart) apply(ctx context.Context, now time.Time, status string) // asyncRestart mimics the pre-0.9 TaskRunner.Restart behavior and is intended // to be called in a goroutine. -func asyncRestart(ctx context.Context, logger log.Logger, task TaskRestarter, event *structs.TaskEvent) { +func asyncRestart(ctx context.Context, logger log.Logger, task WorkloadRestarter, event *structs.TaskEvent) { // Check watcher restarts are always failures const failure = true @@ -292,7 +292,7 @@ func (w *checkWatcher) Run(ctx context.Context) { } // Watch a check and restart its task if unhealthy. -func (w *checkWatcher) Watch(allocID, taskName, checkID string, check *structs.ServiceCheck, restarter TaskRestarter) { +func (w *checkWatcher) Watch(allocID, taskName, checkID string, check *structs.ServiceCheck, restarter WorkloadRestarter) { if !check.TriggersRestarts() { // Not watched, noop return diff --git a/command/agent/consul/client.go b/command/agent/consul/client.go index fc34eacee26..333f510b525 100644 --- a/command/agent/consul/client.go +++ b/command/agent/consul/client.go @@ -93,13 +93,27 @@ type AgentAPI interface { UpdateTTL(id, output, status string) error } +// ACLsAPI is the consul/api.ACL API subset used by Nomad Server. +type ACLsAPI interface { + // We are looking up by [operator token] SecretID, which implies we need + // to use this method instead of the normal TokenRead, which can only be + // used to lookup tokens by their AccessorID. + TokenReadSelf(q *api.QueryOptions) (*api.ACLToken, *api.QueryMeta, error) + PolicyRead(policyID string, q *api.QueryOptions) (*api.ACLPolicy, *api.QueryMeta, error) + RoleRead(roleID string, q *api.QueryOptions) (*api.ACLRole, *api.QueryMeta, error) + TokenCreate(partial *api.ACLToken, q *api.WriteOptions) (*api.ACLToken, *api.WriteMeta, error) + TokenDelete(accessorID string, q *api.WriteOptions) (*api.WriteMeta, error) + TokenList(q *api.QueryOptions) ([]*api.ACLTokenListEntry, *api.QueryMeta, error) +} + func agentServiceUpdateRequired(reg *api.AgentServiceRegistration, svc *api.AgentService) bool { return !(reg.Kind == svc.Kind && reg.ID == svc.ID && reg.Port == svc.Port && reg.Address == svc.Address && reg.Name == svc.Service && - reflect.DeepEqual(reg.Tags, svc.Tags)) + reflect.DeepEqual(reg.Tags, svc.Tags) && + reflect.DeepEqual(reg.Meta, svc.Meta)) } // operations are submitted to the main loop via commit() for synchronizing @@ -115,12 +129,12 @@ type operations struct { // allocations by task. type AllocRegistration struct { // Tasks maps the name of a task to its registered services and checks - Tasks map[string]*TaskRegistration + Tasks map[string]*ServiceRegistrations } func (a *AllocRegistration) copy() *AllocRegistration { c := &AllocRegistration{ - Tasks: make(map[string]*TaskRegistration, len(a.Tasks)), + Tasks: make(map[string]*ServiceRegistrations, len(a.Tasks)), } for k, v := range a.Tasks { @@ -164,14 +178,14 @@ func (a *AllocRegistration) NumChecks() int { return total } -// TaskRegistration holds the status of services registered for a particular -// task. -type TaskRegistration struct { +// ServiceRegistrations holds the status of services registered for a particular +// task or task group. +type ServiceRegistrations struct { Services map[string]*ServiceRegistration } -func (t *TaskRegistration) copy() *TaskRegistration { - c := &TaskRegistration{ +func (t *ServiceRegistrations) copy() *ServiceRegistrations { + c := &ServiceRegistrations{ Services: make(map[string]*ServiceRegistration, len(t.Services)), } @@ -675,11 +689,11 @@ func (c *ServiceClient) RegisterAgent(role string, services []*structs.Service) // serviceRegs creates service registrations, check registrations, and script // checks from a service. It returns a service registration object with the // service and check IDs populated. -func (c *ServiceClient) serviceRegs(ops *operations, service *structs.Service, task *TaskServices) ( +func (c *ServiceClient) serviceRegs(ops *operations, service *structs.Service, workload *WorkloadServices) ( *ServiceRegistration, error) { // Get the services ID - id := MakeTaskServiceID(task.AllocID, task.Name, service) + id := MakeAllocServiceID(workload.AllocID, workload.Name(), service) sreg := &ServiceRegistration{ serviceID: id, checkIDs: make(map[string]struct{}, len(service.Checks)), @@ -692,14 +706,14 @@ func (c *ServiceClient) serviceRegs(ops *operations, service *structs.Service, t } // Determine the address to advertise based on the mode - ip, port, err := getAddress(addrMode, service.PortLabel, task.Networks, task.DriverNetwork) + ip, port, err := getAddress(addrMode, service.PortLabel, workload.Networks, workload.DriverNetwork) if err != nil { return nil, fmt.Errorf("unable to get address for service %q: %v", service.Name, err) } // Determine whether to use tags or canary_tags var tags []string - if task.Canary && len(service.CanaryTags) > 0 { + if workload.Canary && len(service.CanaryTags) > 0 { tags = make([]string, len(service.CanaryTags)) copy(tags, service.CanaryTags) } else { @@ -708,14 +722,23 @@ func (c *ServiceClient) serviceRegs(ops *operations, service *structs.Service, t } // newConnect returns (nil, nil) if there's no Connect-enabled service. - connect, err := newConnect(service.Name, service.Connect, task.Networks) + connect, err := newConnect(service.Name, service.Connect, workload.Networks) if err != nil { return nil, fmt.Errorf("invalid Consul Connect configuration for service %q: %v", service.Name, err) } - meta := make(map[string]string, len(service.Meta)) - for k, v := range service.Meta { - meta[k] = v + // Determine whether to use meta or canary_meta + var meta map[string]string + if workload.Canary && len(service.CanaryMeta) > 0 { + meta = make(map[string]string, len(service.CanaryMeta)+1) + for k, v := range service.CanaryMeta { + meta[k] = v + } + } else { + meta = make(map[string]string, len(service.Meta)+1) + for k, v := range service.Meta { + meta[k] = v + } } // This enables the consul UI to show that Nomad registered this service @@ -734,7 +757,7 @@ func (c *ServiceClient) serviceRegs(ops *operations, service *structs.Service, t ops.regServices = append(ops.regServices, serviceReg) // Build the check registrations - checkIDs, err := c.checkRegs(ops, id, service, task) + checkIDs, err := c.checkRegs(ops, id, service, workload) if err != nil { return nil, err } @@ -747,7 +770,7 @@ func (c *ServiceClient) serviceRegs(ops *operations, service *structs.Service, t // checkRegs registers the checks for the given service and returns the // registered check ids. func (c *ServiceClient) checkRegs(ops *operations, serviceID string, service *structs.Service, - task *TaskServices) ([]string, error) { + workload *WorkloadServices) ([]string, error) { // Fast path numChecks := len(service.Checks) @@ -782,7 +805,7 @@ func (c *ServiceClient) checkRegs(ops *operations, serviceID string, service *st addrMode = structs.AddressModeHost } - ip, port, err := getAddress(addrMode, portLabel, task.Networks, task.DriverNetwork) + ip, port, err := getAddress(addrMode, portLabel, workload.Networks, workload.DriverNetwork) if err != nil { return nil, fmt.Errorf("error getting address for check %q: %v", check.Name, err) } @@ -796,179 +819,67 @@ func (c *ServiceClient) checkRegs(ops *operations, serviceID string, service *st return checkIDs, nil } -//TODO(schmichael) remove -type noopRestarter struct{} - -func (noopRestarter) Restart(context.Context, *structs.TaskEvent, bool) error { return nil } - -// makeAllocTaskServices creates a TaskServices struct for a group service. -// -//TODO(schmichael) rename TaskServices and refactor this into a New method -func makeAllocTaskServices(alloc *structs.Allocation, tg *structs.TaskGroup) (*TaskServices, error) { - if n := len(alloc.AllocatedResources.Shared.Networks); n == 0 { - return nil, fmt.Errorf("unable to register a group service without a group network") - } - - //TODO(schmichael) only support one network for now - net := alloc.AllocatedResources.Shared.Networks[0] - - ts := &TaskServices{ - AllocID: alloc.ID, - Name: "group-" + alloc.TaskGroup, - Services: tg.Services, - Networks: alloc.AllocatedResources.Shared.Networks, - - //TODO(schmichael) there's probably a better way than hacking driver network - DriverNetwork: &drivers.DriverNetwork{ - AutoAdvertise: true, - IP: net.IP, - // Copy PortLabels from group network - PortMap: net.PortLabels(), - }, - - // unsupported for group services - Restarter: noopRestarter{}, - DriverExec: nil, - } - - if alloc.DeploymentStatus != nil { - ts.Canary = alloc.DeploymentStatus.Canary - } - - return ts, nil -} - -// RegisterGroup services with Consul. Adds all task group-level service -// entries and checks to Consul. -func (c *ServiceClient) RegisterGroup(alloc *structs.Allocation) error { - tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) - if tg == nil { - return fmt.Errorf("task group %q not in allocation", alloc.TaskGroup) - } - - if len(tg.Services) == 0 { - // noop - return nil - } - - ts, err := makeAllocTaskServices(alloc, tg) - if err != nil { - return err - } - - return c.RegisterTask(ts) -} - -// UpdateGroup services with Consul. Updates all task group-level service -// entries and checks to Consul. -func (c *ServiceClient) UpdateGroup(oldAlloc, newAlloc *structs.Allocation) error { - oldTG := oldAlloc.Job.LookupTaskGroup(oldAlloc.TaskGroup) - if oldTG == nil { - return fmt.Errorf("task group %q not in old allocation", oldAlloc.TaskGroup) - } - - oldServices, err := makeAllocTaskServices(oldAlloc, oldTG) - if err != nil { - return err - } - - newTG := newAlloc.Job.LookupTaskGroup(newAlloc.TaskGroup) - if newTG == nil { - return fmt.Errorf("task group %q not in new allocation", newAlloc.TaskGroup) - } - - newServices, err := makeAllocTaskServices(newAlloc, newTG) - if err != nil { - return err - } - - return c.UpdateTask(oldServices, newServices) -} - -// RemoveGroup services with Consul. Removes all task group-level service -// entries and checks from Consul. -func (c *ServiceClient) RemoveGroup(alloc *structs.Allocation) error { - tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) - if tg == nil { - return fmt.Errorf("task group %q not in allocation", alloc.TaskGroup) - } - - if len(tg.Services) == 0 { - // noop - return nil - } - ts, err := makeAllocTaskServices(alloc, tg) - if err != nil { - return err - } - - c.RemoveTask(ts) - - return nil -} - -// RegisterTask with Consul. Adds all service entries and checks to Consul. If -// exec is nil and a script check exists an error is returned. +// RegisterWorkload with Consul. Adds all service entries and checks to Consul. // // If the service IP is set it used as the address in the service registration. // Checks will always use the IP from the Task struct (host's IP). // // Actual communication with Consul is done asynchronously (see Run). -func (c *ServiceClient) RegisterTask(task *TaskServices) error { +func (c *ServiceClient) RegisterWorkload(workload *WorkloadServices) error { // Fast path - numServices := len(task.Services) + numServices := len(workload.Services) if numServices == 0 { return nil } - t := new(TaskRegistration) + t := new(ServiceRegistrations) t.Services = make(map[string]*ServiceRegistration, numServices) ops := &operations{} - for _, service := range task.Services { - sreg, err := c.serviceRegs(ops, service, task) + for _, service := range workload.Services { + sreg, err := c.serviceRegs(ops, service, workload) if err != nil { return err } t.Services[sreg.serviceID] = sreg } - // Add the task to the allocation's registration - c.addTaskRegistration(task.AllocID, task.Name, t) + // Add the workload to the allocation's registration + c.addRegistrations(workload.AllocID, workload.Name(), t) c.commit(ops) // Start watching checks. Done after service registrations are built // since an error building them could leak watches. - for _, service := range task.Services { - serviceID := MakeTaskServiceID(task.AllocID, task.Name, service) + for _, service := range workload.Services { + serviceID := MakeAllocServiceID(workload.AllocID, workload.Name(), service) for _, check := range service.Checks { if check.TriggersRestarts() { checkID := MakeCheckID(serviceID, check) - c.checkWatcher.Watch(task.AllocID, task.Name, checkID, check, task.Restarter) + c.checkWatcher.Watch(workload.AllocID, workload.Name(), checkID, check, workload.Restarter) } } } return nil } -// UpdateTask in Consul. Does not alter the service if only checks have +// UpdateWorkload in Consul. Does not alter the service if only checks have // changed. // // DriverNetwork must not change between invocations for the same allocation. -func (c *ServiceClient) UpdateTask(old, newTask *TaskServices) error { +func (c *ServiceClient) UpdateWorkload(old, newWorkload *WorkloadServices) error { ops := &operations{} - taskReg := new(TaskRegistration) - taskReg.Services = make(map[string]*ServiceRegistration, len(newTask.Services)) + regs := new(ServiceRegistrations) + regs.Services = make(map[string]*ServiceRegistration, len(newWorkload.Services)) existingIDs := make(map[string]*structs.Service, len(old.Services)) for _, s := range old.Services { - existingIDs[MakeTaskServiceID(old.AllocID, old.Name, s)] = s + existingIDs[MakeAllocServiceID(old.AllocID, old.Name(), s)] = s } - newIDs := make(map[string]*structs.Service, len(newTask.Services)) - for _, s := range newTask.Services { - newIDs[MakeTaskServiceID(newTask.AllocID, newTask.Name, s)] = s + newIDs := make(map[string]*structs.Service, len(newWorkload.Services)) + for _, s := range newWorkload.Services { + newIDs[MakeAllocServiceID(newWorkload.AllocID, newWorkload.Name(), s)] = s } // Loop over existing Service IDs to see if they have been removed @@ -990,8 +901,8 @@ func (c *ServiceClient) UpdateTask(old, newTask *TaskServices) error { continue } - oldHash := existingSvc.Hash(old.AllocID, old.Name, old.Canary) - newHash := newSvc.Hash(newTask.AllocID, newTask.Name, newTask.Canary) + oldHash := existingSvc.Hash(old.AllocID, old.Name(), old.Canary) + newHash := newSvc.Hash(newWorkload.AllocID, newWorkload.Name(), newWorkload.Canary) if oldHash == newHash { // Service exists and hasn't changed, don't re-add it later delete(newIDs, existingID) @@ -1002,7 +913,7 @@ func (c *ServiceClient) UpdateTask(old, newTask *TaskServices) error { serviceID: existingID, checkIDs: make(map[string]struct{}, len(newSvc.Checks)), } - taskReg.Services[existingID] = sreg + regs.Services[existingID] = sreg // See if any checks were updated existingChecks := make(map[string]*structs.ServiceCheck, len(existingSvc.Checks)) @@ -1021,7 +932,7 @@ func (c *ServiceClient) UpdateTask(old, newTask *TaskServices) error { } // New check on an unchanged service; add them now - newCheckIDs, err := c.checkRegs(ops, existingID, newSvc, newTask) + newCheckIDs, err := c.checkRegs(ops, existingID, newSvc, newWorkload) if err != nil { return err } @@ -1032,7 +943,7 @@ func (c *ServiceClient) UpdateTask(old, newTask *TaskServices) error { // Update all watched checks as CheckRestart fields aren't part of ID if check.TriggersRestarts() { - c.checkWatcher.Watch(newTask.AllocID, newTask.Name, checkID, check, newTask.Restarter) + c.checkWatcher.Watch(newWorkload.AllocID, newWorkload.Name(), checkID, check, newWorkload.Restarter) } } @@ -1049,41 +960,41 @@ func (c *ServiceClient) UpdateTask(old, newTask *TaskServices) error { // Any remaining services should just be enqueued directly for _, newSvc := range newIDs { - sreg, err := c.serviceRegs(ops, newSvc, newTask) + sreg, err := c.serviceRegs(ops, newSvc, newWorkload) if err != nil { return err } - taskReg.Services[sreg.serviceID] = sreg + regs.Services[sreg.serviceID] = sreg } // Add the task to the allocation's registration - c.addTaskRegistration(newTask.AllocID, newTask.Name, taskReg) + c.addRegistrations(newWorkload.AllocID, newWorkload.Name(), regs) c.commit(ops) // Start watching checks. Done after service registrations are built // since an error building them could leak watches. for _, service := range newIDs { - serviceID := MakeTaskServiceID(newTask.AllocID, newTask.Name, service) + serviceID := MakeAllocServiceID(newWorkload.AllocID, newWorkload.Name(), service) for _, check := range service.Checks { if check.TriggersRestarts() { checkID := MakeCheckID(serviceID, check) - c.checkWatcher.Watch(newTask.AllocID, newTask.Name, checkID, check, newTask.Restarter) + c.checkWatcher.Watch(newWorkload.AllocID, newWorkload.Name(), checkID, check, newWorkload.Restarter) } } } return nil } -// RemoveTask from Consul. Removes all service entries and checks. +// RemoveWorkload from Consul. Removes all service entries and checks. // // Actual communication with Consul is done asynchronously (see Run). -func (c *ServiceClient) RemoveTask(task *TaskServices) { +func (c *ServiceClient) RemoveWorkload(workload *WorkloadServices) { ops := operations{} - for _, service := range task.Services { - id := MakeTaskServiceID(task.AllocID, task.Name, service) + for _, service := range workload.Services { + id := MakeAllocServiceID(workload.AllocID, workload.Name(), service) ops.deregServices = append(ops.deregServices, id) for _, check := range service.Checks { @@ -1096,8 +1007,8 @@ func (c *ServiceClient) RemoveTask(task *TaskServices) { } } - // Remove the task from the alloc's registrations - c.removeTaskRegistration(task.AllocID, task.Name) + // Remove the workload from the alloc's registrations + c.removeRegistration(workload.AllocID, workload.Name()) // Now add them to the deregistration fields; main Run loop will update c.commit(&ops) @@ -1144,7 +1055,8 @@ func (c *ServiceClient) AllocRegistrations(allocID string) (*AllocRegistration, return reg, nil } -// TODO(tgross): make sure this is properly nil-checked, etc. +// UpdateTTL is used to update the TTL of a check. Typically this will only be +// called to heartbeat script checks. func (c *ServiceClient) UpdateTTL(id, output, status string) error { return c.client.UpdateTTL(id, output, status) } @@ -1195,23 +1107,23 @@ func (c *ServiceClient) Shutdown() error { return nil } -// addTaskRegistration adds the task registration for the given allocation. -func (c *ServiceClient) addTaskRegistration(allocID, taskName string, reg *TaskRegistration) { +// addRegistration adds the service registrations for the given allocation. +func (c *ServiceClient) addRegistrations(allocID, taskName string, reg *ServiceRegistrations) { c.allocRegistrationsLock.Lock() defer c.allocRegistrationsLock.Unlock() alloc, ok := c.allocRegistrations[allocID] if !ok { alloc = &AllocRegistration{ - Tasks: make(map[string]*TaskRegistration), + Tasks: make(map[string]*ServiceRegistrations), } c.allocRegistrations[allocID] = alloc } alloc.Tasks[taskName] = reg } -// removeTaskRegistration removes the task registration for the given allocation. -func (c *ServiceClient) removeTaskRegistration(allocID, taskName string) { +// removeRegistrations removes the registration for the given allocation. +func (c *ServiceClient) removeRegistration(allocID, taskName string) { c.allocRegistrationsLock.Lock() defer c.allocRegistrationsLock.Unlock() @@ -1241,11 +1153,11 @@ func makeAgentServiceID(role string, service *structs.Service) string { return fmt.Sprintf("%s-%s-%s", nomadServicePrefix, role, service.Hash(role, "", false)) } -// MakeTaskServiceID creates a unique ID for identifying a task service in +// MakeAllocServiceID creates a unique ID for identifying an alloc service in // Consul. // // Example Service ID: _nomad-task-b4e61df9-b095-d64e-f241-23860da1375f-redis-http-http -func MakeTaskServiceID(allocID, taskName string, service *structs.Service) string { +func MakeAllocServiceID(allocID, taskName string, service *structs.Service) string { return fmt.Sprintf("%s%s-%s-%s-%s", nomadTaskPrefix, allocID, taskName, service.Name, service.PortLabel) } @@ -1458,21 +1370,30 @@ func newConnect(serviceName string, nc *structs.ConsulConnect, networks structs. // Bind to netns IP(s):port proxyConfig := map[string]interface{}{} - if nc.SidecarService.Proxy != nil && nc.SidecarService.Proxy.Config != nil { - proxyConfig = nc.SidecarService.Proxy.Config + localServiceAddress := "" + localServicePort := 0 + if nc.SidecarService.Proxy != nil { + localServiceAddress = nc.SidecarService.Proxy.LocalServiceAddress + localServicePort = nc.SidecarService.Proxy.LocalServicePort + if nc.SidecarService.Proxy.Config != nil { + proxyConfig = nc.SidecarService.Proxy.Config + } } proxyConfig["bind_address"] = "0.0.0.0" proxyConfig["bind_port"] = port.To // Advertise host IP:port cc.SidecarService = &api.AgentServiceRegistration{ + Tags: helper.CopySliceString(nc.SidecarService.Tags), Address: net.IP, Port: port.Value, // Automatically configure the proxy to bind to all addresses // within the netns. Proxy: &api.AgentServiceConnectProxyConfig{ - Config: proxyConfig, + LocalServiceAddress: localServiceAddress, + LocalServicePort: localServicePort, + Config: proxyConfig, }, } diff --git a/command/agent/consul/group_test.go b/command/agent/consul/group_test.go index a6f8e3c6aa2..8adcda07684 100644 --- a/command/agent/consul/group_test.go +++ b/command/agent/consul/group_test.go @@ -64,18 +64,25 @@ func TestConsul_Connect(t *testing.T) { { Name: "testconnect", PortLabel: "9999", + Meta: map[string]string{ + "alloc_id": "${NOMAD_ALLOC_ID}", + }, Connect: &structs.ConsulConnect{ - SidecarService: &structs.ConsulSidecarService{}, + SidecarService: &structs.ConsulSidecarService{ + Proxy: &structs.ConsulProxy{ + LocalServicePort: 9000, + }, + }, }, }, } // required by isNomadSidecar assertion below serviceRegMap := map[string]*api.AgentServiceRegistration{ - MakeTaskServiceID(alloc.ID, "group-"+alloc.TaskGroup, tg.Services[0]): nil, + MakeAllocServiceID(alloc.ID, "group-"+alloc.TaskGroup, tg.Services[0]): nil, } - require.NoError(t, serviceClient.RegisterGroup(alloc)) + require.NoError(t, serviceClient.RegisterWorkload(BuildAllocServices(mock.Node(), alloc, NoopRestarter()))) require.Eventually(t, func() bool { services, err := consulClient.Agent().Services() @@ -90,7 +97,7 @@ func TestConsul_Connect(t *testing.T) { require.NoError(t, err) require.Len(t, services, 2) - serviceID := MakeTaskServiceID(alloc.ID, "group-"+alloc.TaskGroup, tg.Services[0]) + serviceID := MakeAllocServiceID(alloc.ID, "group-"+alloc.TaskGroup, tg.Services[0]) connectID := serviceID + "-sidecar-proxy" require.Contains(t, services, serviceID) @@ -114,11 +121,12 @@ func TestConsul_Connect(t *testing.T) { require.Equal(t, connectService.Proxy.DestinationServiceName, "testconnect") require.Equal(t, connectService.Proxy.DestinationServiceID, serviceID) require.Equal(t, connectService.Proxy.LocalServiceAddress, "127.0.0.1") - require.Equal(t, connectService.Proxy.LocalServicePort, 9999) + require.Equal(t, connectService.Proxy.LocalServicePort, 9000) require.Equal(t, connectService.Proxy.Config, map[string]interface{}{ "bind_address": "0.0.0.0", "bind_port": float64(9998), }) + require.Equal(t, alloc.ID, agentService.Meta["alloc_id"]) time.Sleep(interval >> 2) } diff --git a/command/agent/consul/structs.go b/command/agent/consul/structs.go index f58fa2efc83..0aa21f3cc03 100644 --- a/command/agent/consul/structs.go +++ b/command/agent/consul/structs.go @@ -2,22 +2,28 @@ package consul import ( "github.com/hashicorp/nomad/client/allocrunner/taskrunner/interfaces" + "github.com/hashicorp/nomad/client/taskenv" + "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/plugins/drivers" ) -type TaskServices struct { +// WorkloadServices describes services defined in either a Task or TaskGroup +// that need to be syncronized with Consul +type WorkloadServices struct { AllocID string - // Name of the task - Name string + // Name of the task and task group the services are defined for. For + // group based services, Task will be empty + Task string + Group string // Canary indicates whether or not the allocation is a canary Canary bool - // Restarter allows restarting the task depending on the task's + // Restarter allows restarting the task or task group depending on the // check_restart stanzas. - Restarter TaskRestarter + Restarter WorkloadRestarter // Services and checks to register for the task. Services []*structs.Service @@ -26,41 +32,49 @@ type TaskServices struct { Networks structs.Networks // DriverExec is the script executor for the task's driver. + // For group services this is nil and script execution is managed by + // a tasklet in the taskrunner script_check_hook DriverExec interfaces.ScriptExecutor // DriverNetwork is the network specified by the driver and may be nil. DriverNetwork *drivers.DriverNetwork } -func NewTaskServices(alloc *structs.Allocation, task *structs.Task, restarter TaskRestarter, exec interfaces.ScriptExecutor, net *drivers.DriverNetwork) *TaskServices { - ts := TaskServices{ - AllocID: alloc.ID, - Name: task.Name, - Restarter: restarter, - Services: task.Services, - DriverExec: exec, - DriverNetwork: net, - } +func BuildAllocServices(node *structs.Node, alloc *structs.Allocation, restarter WorkloadRestarter) *WorkloadServices { + + //TODO(schmichael) only support one network for now + net := alloc.AllocatedResources.Shared.Networks[0] + + tg := alloc.Job.LookupTaskGroup(alloc.TaskGroup) + + ws := &WorkloadServices{ + AllocID: alloc.ID, + Group: alloc.TaskGroup, + Services: taskenv.InterpolateServices(taskenv.NewBuilder(mock.Node(), alloc, nil, alloc.Job.Region).Build(), tg.Services), + Networks: alloc.AllocatedResources.Shared.Networks, + + //TODO(schmichael) there's probably a better way than hacking driver network + DriverNetwork: &drivers.DriverNetwork{ + AutoAdvertise: true, + IP: net.IP, + // Copy PortLabels from group network + PortMap: net.PortLabels(), + }, - if alloc.AllocatedResources != nil { - if tr, ok := alloc.AllocatedResources.Tasks[task.Name]; ok { - ts.Networks = tr.Networks - } - } else if task.Resources != nil { - // COMPAT(0.11): Remove in 0.11 - ts.Networks = task.Resources.Networks + Restarter: restarter, + DriverExec: nil, } - if alloc.DeploymentStatus != nil && alloc.DeploymentStatus.Canary { - ts.Canary = true + if alloc.DeploymentStatus != nil { + ws.Canary = alloc.DeploymentStatus.Canary } - return &ts + return ws } // Copy method for easing tests -func (t *TaskServices) Copy() *TaskServices { - newTS := new(TaskServices) +func (t *WorkloadServices) Copy() *WorkloadServices { + newTS := new(WorkloadServices) *newTS = *t // Deep copy Services @@ -70,3 +84,11 @@ func (t *TaskServices) Copy() *TaskServices { } return newTS } + +func (w *WorkloadServices) Name() string { + if w.Task != "" { + return w.Task + } + + return "group-" + w.Group +} diff --git a/command/agent/consul/testing.go b/command/agent/consul/testing.go new file mode 100644 index 00000000000..e034f12bb8a --- /dev/null +++ b/command/agent/consul/testing.go @@ -0,0 +1,17 @@ +package consul + +import ( + "context" + + "github.com/hashicorp/nomad/nomad/structs" +) + +func NoopRestarter() WorkloadRestarter { + return noopRestarter{} +} + +type noopRestarter struct{} + +func (noopRestarter) Restart(ctx context.Context, event *structs.TaskEvent, failure bool) error { + return nil +} diff --git a/command/agent/consul/unit_test.go b/command/agent/consul/unit_test.go index 5c3effeb3d1..a7c8f5d8162 100644 --- a/command/agent/consul/unit_test.go +++ b/command/agent/consul/unit_test.go @@ -20,21 +20,22 @@ import ( ) const ( - // Ports used in testTask + // Ports used in testWorkload xPort = 1234 yPort = 1235 ) -func testTask() *TaskServices { - return &TaskServices{ +func testWorkload() *WorkloadServices { + return &WorkloadServices{ AllocID: uuid.Generate(), - Name: "taskname", + Task: "taskname", Restarter: &restartRecorder{}, Services: []*structs.Service{ { Name: "taskname-service", PortLabel: "x", Tags: []string{"tag1", "tag2"}, + Meta: map[string]string{"meta1": "foo"}, }, }, Networks: []*structs.NetworkResource{ @@ -48,7 +49,7 @@ func testTask() *TaskServices { } } -// restartRecorder is a minimal TaskRestarter implementation that simply +// restartRecorder is a minimal WorkloadRestarter implementation that simply // counts how many restarts were triggered. type restartRecorder struct { restarts int64 @@ -63,7 +64,7 @@ func (r *restartRecorder) Restart(ctx context.Context, event *structs.TaskEvent, type testFakeCtx struct { ServiceClient *ServiceClient FakeConsul *MockAgent - Task *TaskServices + Workload *WorkloadServices } var errNoOps = fmt.Errorf("testing error: no pending operations") @@ -85,10 +86,10 @@ func (t *testFakeCtx) syncOnce() error { } // setupFake creates a testFakeCtx with a ServiceClient backed by a fakeConsul. -// A test Task is also provided. +// A test Workload is also provided. func setupFake(t *testing.T) *testFakeCtx { fc := NewMockAgent() - tt := testTask() + tw := testWorkload() // by default start fake client being out of probation sc := NewServiceClient(fc, testlog.HCLogger(t), true) @@ -97,7 +98,7 @@ func setupFake(t *testing.T) *testFakeCtx { return &testFakeCtx{ ServiceClient: sc, FakeConsul: fc, - Task: tt, + Workload: tw, } } @@ -105,35 +106,35 @@ func TestConsul_ChangeTags(t *testing.T) { ctx := setupFake(t) require := require.New(t) - require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task)) + require.NoError(ctx.ServiceClient.RegisterWorkload(ctx.Workload)) require.NoError(ctx.syncOnce()) require.Equal(1, len(ctx.FakeConsul.services), "Expected 1 service to be registered with Consul") // Validate the alloc registration - reg1, err := ctx.ServiceClient.AllocRegistrations(ctx.Task.AllocID) + reg1, err := ctx.ServiceClient.AllocRegistrations(ctx.Workload.AllocID) require.NoError(err) require.NotNil(reg1, "Unexpected nil alloc registration") require.Equal(1, reg1.NumServices()) require.Equal(0, reg1.NumChecks()) for _, v := range ctx.FakeConsul.services { - require.Equal(v.Name, ctx.Task.Services[0].Name) - require.Equal(v.Tags, ctx.Task.Services[0].Tags) + require.Equal(v.Name, ctx.Workload.Services[0].Name) + require.Equal(v.Tags, ctx.Workload.Services[0].Tags) } // Update the task definition - origTask := ctx.Task.Copy() - ctx.Task.Services[0].Tags[0] = "newtag" + origWorkload := ctx.Workload.Copy() + ctx.Workload.Services[0].Tags[0] = "newtag" // Register and sync the update - require.NoError(ctx.ServiceClient.UpdateTask(origTask, ctx.Task)) + require.NoError(ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload)) require.NoError(ctx.syncOnce()) require.Equal(1, len(ctx.FakeConsul.services), "Expected 1 service to be registered with Consul") // Validate the metadata changed for _, v := range ctx.FakeConsul.services { - require.Equal(v.Name, ctx.Task.Services[0].Name) - require.Equal(v.Tags, ctx.Task.Services[0].Tags) + require.Equal(v.Name, ctx.Workload.Services[0].Name) + require.Equal(v.Tags, ctx.Workload.Services[0].Tags) require.Equal("newtag", v.Tags[0]) } } @@ -145,7 +146,7 @@ func TestConsul_ChangePorts(t *testing.T) { ctx := setupFake(t) require := require.New(t) - ctx.Task.Services[0].Checks = []*structs.ServiceCheck{ + ctx.Workload.Services[0].Checks = []*structs.ServiceCheck{ { Name: "c1", Type: "tcp", @@ -170,13 +171,13 @@ func TestConsul_ChangePorts(t *testing.T) { }, } - require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task)) + require.NoError(ctx.ServiceClient.RegisterWorkload(ctx.Workload)) require.NoError(ctx.syncOnce()) require.Equal(1, len(ctx.FakeConsul.services), "Expected 1 service to be registered with Consul") for _, v := range ctx.FakeConsul.services { - require.Equal(ctx.Task.Services[0].Name, v.Name) - require.Equal(ctx.Task.Services[0].Tags, v.Tags) + require.Equal(ctx.Workload.Services[0].Name, v.Name) + require.Equal(ctx.Workload.Services[0].Tags, v.Tags) require.Equal(xPort, v.Port) } @@ -205,9 +206,9 @@ func TestConsul_ChangePorts(t *testing.T) { require.NotEmpty(origHTTPKey) // Now update the PortLabel on the Service and Check c3 - origTask := ctx.Task.Copy() - ctx.Task.Services[0].PortLabel = "y" - ctx.Task.Services[0].Checks = []*structs.ServiceCheck{ + origWorkload := ctx.Workload.Copy() + ctx.Workload.Services[0].PortLabel = "y" + ctx.Workload.Services[0].Checks = []*structs.ServiceCheck{ { Name: "c1", Type: "tcp", @@ -232,13 +233,13 @@ func TestConsul_ChangePorts(t *testing.T) { }, } - require.NoError(ctx.ServiceClient.UpdateTask(origTask, ctx.Task)) + require.NoError(ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload)) require.NoError(ctx.syncOnce()) require.Equal(1, len(ctx.FakeConsul.services), "Expected 1 service to be registered with Consul") for _, v := range ctx.FakeConsul.services { - require.Equal(ctx.Task.Services[0].Name, v.Name) - require.Equal(ctx.Task.Services[0].Tags, v.Tags) + require.Equal(ctx.Workload.Services[0].Name, v.Name) + require.Equal(ctx.Workload.Services[0].Tags, v.Tags) require.Equal(yPort, v.Port) } @@ -266,7 +267,7 @@ func TestConsul_ChangePorts(t *testing.T) { // properly syncs with Consul. func TestConsul_ChangeChecks(t *testing.T) { ctx := setupFake(t) - ctx.Task.Services[0].Checks = []*structs.ServiceCheck{ + ctx.Workload.Services[0].Checks = []*structs.ServiceCheck{ { Name: "c1", Type: "tcp", @@ -279,7 +280,7 @@ func TestConsul_ChangeChecks(t *testing.T) { }, } - if err := ctx.ServiceClient.RegisterTask(ctx.Task); err != nil { + if err := ctx.ServiceClient.RegisterWorkload(ctx.Workload); err != nil { t.Fatalf("unexpected error registering task: %v", err) } @@ -300,7 +301,7 @@ func TestConsul_ChangeChecks(t *testing.T) { // Query the allocs registrations and then again when we update. The IDs // should change - reg1, err := ctx.ServiceClient.AllocRegistrations(ctx.Task.AllocID) + reg1, err := ctx.ServiceClient.AllocRegistrations(ctx.Workload.AllocID) if err != nil { t.Fatalf("Looking up alloc registration failed: %v", err) } @@ -317,8 +318,8 @@ func TestConsul_ChangeChecks(t *testing.T) { origServiceKey := "" for k, v := range ctx.FakeConsul.services { origServiceKey = k - if v.Name != ctx.Task.Services[0].Name { - t.Errorf("expected Name=%q != %q", ctx.Task.Services[0].Name, v.Name) + if v.Name != ctx.Workload.Services[0].Name { + t.Errorf("expected Name=%q != %q", ctx.Workload.Services[0].Name, v.Name) } if v.Port != xPort { t.Errorf("expected Port x=%v but found: %v", xPort, v.Port) @@ -335,8 +336,8 @@ func TestConsul_ChangeChecks(t *testing.T) { } // Now add a check and modify the original - origTask := ctx.Task.Copy() - ctx.Task.Services[0].Checks = []*structs.ServiceCheck{ + origWorkload := ctx.Workload.Copy() + ctx.Workload.Services[0].Checks = []*structs.ServiceCheck{ { Name: "c1", Type: "tcp", @@ -356,7 +357,7 @@ func TestConsul_ChangeChecks(t *testing.T) { PortLabel: "x", }, } - if err := ctx.ServiceClient.UpdateTask(origTask, ctx.Task); err != nil { + if err := ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload); err != nil { t.Fatalf("unexpected error registering task: %v", err) } @@ -414,7 +415,7 @@ func TestConsul_ChangeChecks(t *testing.T) { } // Check again and ensure the IDs changed - reg2, err := ctx.ServiceClient.AllocRegistrations(ctx.Task.AllocID) + reg2, err := ctx.ServiceClient.AllocRegistrations(ctx.Workload.AllocID) if err != nil { t.Fatalf("Looking up alloc registration failed: %v", err) } @@ -449,8 +450,8 @@ func TestConsul_ChangeChecks(t *testing.T) { } // Alter a CheckRestart and make sure the watcher is updated but nothing else - origTask = ctx.Task.Copy() - ctx.Task.Services[0].Checks = []*structs.ServiceCheck{ + origWorkload = ctx.Workload.Copy() + ctx.Workload.Services[0].Checks = []*structs.ServiceCheck{ { Name: "c1", Type: "tcp", @@ -470,7 +471,7 @@ func TestConsul_ChangeChecks(t *testing.T) { PortLabel: "x", }, } - if err := ctx.ServiceClient.UpdateTask(origTask, ctx.Task); err != nil { + if err := ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload); err != nil { t.Fatalf("unexpected error registering task: %v", err) } if err := ctx.syncOnce(); err != nil { @@ -502,7 +503,7 @@ func TestConsul_RegServices(t *testing.T) { ctx := setupFake(t) // Add a check w/restarting - ctx.Task.Services[0].Checks = []*structs.ServiceCheck{ + ctx.Workload.Services[0].Checks = []*structs.ServiceCheck{ { Name: "testcheck", Type: "tcp", @@ -513,7 +514,7 @@ func TestConsul_RegServices(t *testing.T) { }, } - if err := ctx.ServiceClient.RegisterTask(ctx.Task); err != nil { + if err := ctx.ServiceClient.RegisterWorkload(ctx.Workload); err != nil { t.Fatalf("unexpected error registering task: %v", err) } @@ -526,11 +527,11 @@ func TestConsul_RegServices(t *testing.T) { } for _, v := range ctx.FakeConsul.services { - if v.Name != ctx.Task.Services[0].Name { - t.Errorf("expected Name=%q != %q", ctx.Task.Services[0].Name, v.Name) + if v.Name != ctx.Workload.Services[0].Name { + t.Errorf("expected Name=%q != %q", ctx.Workload.Services[0].Name, v.Name) } - if !reflect.DeepEqual(v.Tags, ctx.Task.Services[0].Tags) { - t.Errorf("expected Tags=%v != %v", ctx.Task.Services[0].Tags, v.Tags) + if !reflect.DeepEqual(v.Tags, ctx.Workload.Services[0].Tags) { + t.Errorf("expected Tags=%v != %v", ctx.Workload.Services[0].Tags, v.Tags) } if v.Port != xPort { t.Errorf("expected Port=%d != %d", xPort, v.Port) @@ -544,7 +545,7 @@ func TestConsul_RegServices(t *testing.T) { // Assert the check update is properly formed checkUpd := <-ctx.ServiceClient.checkWatcher.checkUpdateCh - if checkUpd.checkRestart.allocID != ctx.Task.AllocID { + if checkUpd.checkRestart.allocID != ctx.Workload.AllocID { t.Fatalf("expected check's allocid to be %q but found %q", "allocid", checkUpd.checkRestart.allocID) } if expected := 200 * time.Millisecond; checkUpd.checkRestart.timeLimit != expected { @@ -552,9 +553,9 @@ func TestConsul_RegServices(t *testing.T) { } // Make a change which will register a new service - ctx.Task.Services[0].Name = "taskname-service2" - ctx.Task.Services[0].Tags[0] = "tag3" - if err := ctx.ServiceClient.RegisterTask(ctx.Task); err != nil { + ctx.Workload.Services[0].Name = "taskname-service2" + ctx.Workload.Services[0].Tags[0] = "tag3" + if err := ctx.ServiceClient.RegisterWorkload(ctx.Workload); err != nil { t.Fatalf("unexpected error registering task: %v", err) } @@ -575,7 +576,7 @@ func TestConsul_RegServices(t *testing.T) { t.Fatalf("expected 1 service but found %d:\n%#v", n, ctx.FakeConsul.services) } for _, v := range ctx.FakeConsul.services { - if reflect.DeepEqual(v.Tags, ctx.Task.Services[0].Tags) { + if reflect.DeepEqual(v.Tags, ctx.Workload.Services[0].Tags) { t.Errorf("expected Tags to differ, changes applied before sync()") } } @@ -589,22 +590,22 @@ func TestConsul_RegServices(t *testing.T) { } found := false for _, v := range ctx.FakeConsul.services { - if v.Name == ctx.Task.Services[0].Name { + if v.Name == ctx.Workload.Services[0].Name { if found { t.Fatalf("found new service name %q twice", v.Name) } found = true - if !reflect.DeepEqual(v.Tags, ctx.Task.Services[0].Tags) { - t.Errorf("expected Tags=%v != %v", ctx.Task.Services[0].Tags, v.Tags) + if !reflect.DeepEqual(v.Tags, ctx.Workload.Services[0].Tags) { + t.Errorf("expected Tags=%v != %v", ctx.Workload.Services[0].Tags, v.Tags) } } } if !found { - t.Fatalf("did not find new service %q", ctx.Task.Services[0].Name) + t.Fatalf("did not find new service %q", ctx.Workload.Services[0].Name) } // Remove the new task - ctx.ServiceClient.RemoveTask(ctx.Task) + ctx.ServiceClient.RemoveWorkload(ctx.Workload) if err := ctx.syncOnce(); err != nil { t.Fatalf("unexpected error syncing task: %v", err) } @@ -744,7 +745,7 @@ func TestConsul_DriverNetwork_AutoUse(t *testing.T) { t.Parallel() ctx := setupFake(t) - ctx.Task.Services = []*structs.Service{ + ctx.Workload.Services = []*structs.Service{ { Name: "auto-advertise-x", PortLabel: "x", @@ -785,7 +786,7 @@ func TestConsul_DriverNetwork_AutoUse(t *testing.T) { }, } - ctx.Task.DriverNetwork = &drivers.DriverNetwork{ + ctx.Workload.DriverNetwork = &drivers.DriverNetwork{ PortMap: map[string]int{ "x": 8888, "y": 9999, @@ -794,7 +795,7 @@ func TestConsul_DriverNetwork_AutoUse(t *testing.T) { AutoAdvertise: true, } - if err := ctx.ServiceClient.RegisterTask(ctx.Task); err != nil { + if err := ctx.ServiceClient.RegisterWorkload(ctx.Workload); err != nil { t.Fatalf("unexpected error registering task: %v", err) } @@ -808,14 +809,14 @@ func TestConsul_DriverNetwork_AutoUse(t *testing.T) { for _, v := range ctx.FakeConsul.services { switch v.Name { - case ctx.Task.Services[0].Name: // x + case ctx.Workload.Services[0].Name: // x // Since DriverNetwork.AutoAdvertise=true, driver ports should be used - if v.Port != ctx.Task.DriverNetwork.PortMap["x"] { + if v.Port != ctx.Workload.DriverNetwork.PortMap["x"] { t.Errorf("expected service %s's port to be %d but found %d", - v.Name, ctx.Task.DriverNetwork.PortMap["x"], v.Port) + v.Name, ctx.Workload.DriverNetwork.PortMap["x"], v.Port) } // The order of checks in Consul is not guaranteed to - // be the same as their order in the Task definition, + // be the same as their order in the Workload definition, // so check in a loop if expected := 2; len(v.Checks) != expected { t.Errorf("expected %d checks but found %d", expected, len(v.Checks)) @@ -838,22 +839,22 @@ func TestConsul_DriverNetwork_AutoUse(t *testing.T) { t.Errorf("unexpected check %#v on service %q", c, v.Name) } } - case ctx.Task.Services[1].Name: // y + case ctx.Workload.Services[1].Name: // y // Service should be container ip:port - if v.Address != ctx.Task.DriverNetwork.IP { + if v.Address != ctx.Workload.DriverNetwork.IP { t.Errorf("expected service %s's address to be %s but found %s", - v.Name, ctx.Task.DriverNetwork.IP, v.Address) + v.Name, ctx.Workload.DriverNetwork.IP, v.Address) } - if v.Port != ctx.Task.DriverNetwork.PortMap["y"] { + if v.Port != ctx.Workload.DriverNetwork.PortMap["y"] { t.Errorf("expected service %s's port to be %d but found %d", - v.Name, ctx.Task.DriverNetwork.PortMap["x"], v.Port) + v.Name, ctx.Workload.DriverNetwork.PortMap["x"], v.Port) } // Check should be host ip:port if v.Checks[0].TCP != ":1235" { // yPort t.Errorf("expected service %s check's port to be %d but found %s", v.Name, yPort, v.Checks[0].TCP) } - case ctx.Task.Services[2].Name: // y + host mode + case ctx.Workload.Services[2].Name: // y + host mode if v.Port != yPort { t.Errorf("expected service %s's port to be %d but found %d", v.Name, yPort, v.Port) @@ -871,7 +872,7 @@ func TestConsul_DriverNetwork_NoAutoUse(t *testing.T) { t.Parallel() ctx := setupFake(t) - ctx.Task.Services = []*structs.Service{ + ctx.Workload.Services = []*structs.Service{ { Name: "auto-advertise-x", PortLabel: "x", @@ -889,7 +890,7 @@ func TestConsul_DriverNetwork_NoAutoUse(t *testing.T) { }, } - ctx.Task.DriverNetwork = &drivers.DriverNetwork{ + ctx.Workload.DriverNetwork = &drivers.DriverNetwork{ PortMap: map[string]int{ "x": 8888, "y": 9999, @@ -898,7 +899,7 @@ func TestConsul_DriverNetwork_NoAutoUse(t *testing.T) { AutoAdvertise: false, } - if err := ctx.ServiceClient.RegisterTask(ctx.Task); err != nil { + if err := ctx.ServiceClient.RegisterWorkload(ctx.Workload); err != nil { t.Fatalf("unexpected error registering task: %v", err) } @@ -912,23 +913,23 @@ func TestConsul_DriverNetwork_NoAutoUse(t *testing.T) { for _, v := range ctx.FakeConsul.services { switch v.Name { - case ctx.Task.Services[0].Name: // x + auto + case ctx.Workload.Services[0].Name: // x + auto // Since DriverNetwork.AutoAdvertise=false, host ports should be used if v.Port != xPort { t.Errorf("expected service %s's port to be %d but found %d", v.Name, xPort, v.Port) } - case ctx.Task.Services[1].Name: // y + driver mode + case ctx.Workload.Services[1].Name: // y + driver mode // Service should be container ip:port - if v.Address != ctx.Task.DriverNetwork.IP { + if v.Address != ctx.Workload.DriverNetwork.IP { t.Errorf("expected service %s's address to be %s but found %s", - v.Name, ctx.Task.DriverNetwork.IP, v.Address) + v.Name, ctx.Workload.DriverNetwork.IP, v.Address) } - if v.Port != ctx.Task.DriverNetwork.PortMap["y"] { + if v.Port != ctx.Workload.DriverNetwork.PortMap["y"] { t.Errorf("expected service %s's port to be %d but found %d", - v.Name, ctx.Task.DriverNetwork.PortMap["x"], v.Port) + v.Name, ctx.Workload.DriverNetwork.PortMap["x"], v.Port) } - case ctx.Task.Services[2].Name: // y + host mode + case ctx.Workload.Services[2].Name: // y + host mode if v.Port != yPort { t.Errorf("expected service %s's port to be %d but found %d", v.Name, yPort, v.Port) @@ -945,7 +946,7 @@ func TestConsul_DriverNetwork_Change(t *testing.T) { t.Parallel() ctx := setupFake(t) - ctx.Task.Services = []*structs.Service{ + ctx.Workload.Services = []*structs.Service{ { Name: "service-foo", PortLabel: "x", @@ -953,7 +954,7 @@ func TestConsul_DriverNetwork_Change(t *testing.T) { }, } - ctx.Task.DriverNetwork = &drivers.DriverNetwork{ + ctx.Workload.DriverNetwork = &drivers.DriverNetwork{ PortMap: map[string]int{ "x": 8888, "y": 9999, @@ -973,7 +974,7 @@ func TestConsul_DriverNetwork_Change(t *testing.T) { for _, v := range ctx.FakeConsul.services { switch v.Name { - case ctx.Task.Services[0].Name: + case ctx.Workload.Services[0].Name: if v.Port != port { t.Errorf("expected service %s's port to be %d but found %d", v.Name, port, v.Port) @@ -985,31 +986,31 @@ func TestConsul_DriverNetwork_Change(t *testing.T) { } // Initial service should advertise host port x - if err := ctx.ServiceClient.RegisterTask(ctx.Task); err != nil { + if err := ctx.ServiceClient.RegisterWorkload(ctx.Workload); err != nil { t.Fatalf("unexpected error registering task: %v", err) } syncAndAssertPort(xPort) - // UpdateTask to use Host (shouldn't change anything) - origTask := ctx.Task.Copy() - ctx.Task.Services[0].AddressMode = structs.AddressModeHost + // UpdateWorkload to use Host (shouldn't change anything) + origWorkload := ctx.Workload.Copy() + ctx.Workload.Services[0].AddressMode = structs.AddressModeHost - if err := ctx.ServiceClient.UpdateTask(origTask, ctx.Task); err != nil { + if err := ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload); err != nil { t.Fatalf("unexpected error updating task: %v", err) } syncAndAssertPort(xPort) - // UpdateTask to use Driver (*should* change IP and port) - origTask = ctx.Task.Copy() - ctx.Task.Services[0].AddressMode = structs.AddressModeDriver + // UpdateWorkload to use Driver (*should* change IP and port) + origWorkload = ctx.Workload.Copy() + ctx.Workload.Services[0].AddressMode = structs.AddressModeDriver - if err := ctx.ServiceClient.UpdateTask(origTask, ctx.Task); err != nil { + if err := ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload); err != nil { t.Fatalf("unexpected error updating task: %v", err) } - syncAndAssertPort(ctx.Task.DriverNetwork.PortMap["x"]) + syncAndAssertPort(ctx.Workload.DriverNetwork.PortMap["x"]) } // TestConsul_CanaryTags asserts CanaryTags are used when Canary=true @@ -1019,10 +1020,10 @@ func TestConsul_CanaryTags(t *testing.T) { ctx := setupFake(t) canaryTags := []string{"tag1", "canary"} - ctx.Task.Canary = true - ctx.Task.Services[0].CanaryTags = canaryTags + ctx.Workload.Canary = true + ctx.Workload.Services[0].CanaryTags = canaryTags - require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task)) + require.NoError(ctx.ServiceClient.RegisterWorkload(ctx.Workload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 1) for _, service := range ctx.FakeConsul.services { @@ -1030,16 +1031,16 @@ func TestConsul_CanaryTags(t *testing.T) { } // Disable canary and assert tags are not the canary tags - origTask := ctx.Task.Copy() - ctx.Task.Canary = false - require.NoError(ctx.ServiceClient.UpdateTask(origTask, ctx.Task)) + origWorkload := ctx.Workload.Copy() + ctx.Workload.Canary = false + require.NoError(ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 1) for _, service := range ctx.FakeConsul.services { require.NotEqual(canaryTags, service.Tags) } - ctx.ServiceClient.RemoveTask(ctx.Task) + ctx.ServiceClient.RemoveWorkload(ctx.Workload) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 0) } @@ -1052,10 +1053,10 @@ func TestConsul_CanaryTags_NoTags(t *testing.T) { ctx := setupFake(t) tags := []string{"tag1", "foo"} - ctx.Task.Canary = true - ctx.Task.Services[0].Tags = tags + ctx.Workload.Canary = true + ctx.Workload.Services[0].Tags = tags - require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task)) + require.NoError(ctx.ServiceClient.RegisterWorkload(ctx.Workload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 1) for _, service := range ctx.FakeConsul.services { @@ -1063,16 +1064,83 @@ func TestConsul_CanaryTags_NoTags(t *testing.T) { } // Disable canary and assert tags dont change - origTask := ctx.Task.Copy() - ctx.Task.Canary = false - require.NoError(ctx.ServiceClient.UpdateTask(origTask, ctx.Task)) + origWorkload := ctx.Workload.Copy() + ctx.Workload.Canary = false + require.NoError(ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 1) for _, service := range ctx.FakeConsul.services { require.Equal(tags, service.Tags) } - ctx.ServiceClient.RemoveTask(ctx.Task) + ctx.ServiceClient.RemoveWorkload(ctx.Workload) + require.NoError(ctx.syncOnce()) + require.Len(ctx.FakeConsul.services, 0) +} + +// TestConsul_CanaryMeta asserts CanaryMeta are used when Canary=true +func TestConsul_CanaryMeta(t *testing.T) { + t.Parallel() + require := require.New(t) + ctx := setupFake(t) + + canaryMeta := map[string]string{"meta1": "canary"} + canaryMeta["external-source"] = "nomad" + ctx.Workload.Canary = true + ctx.Workload.Services[0].CanaryMeta = canaryMeta + + require.NoError(ctx.ServiceClient.RegisterWorkload(ctx.Workload)) + require.NoError(ctx.syncOnce()) + require.Len(ctx.FakeConsul.services, 1) + for _, service := range ctx.FakeConsul.services { + require.Equal(canaryMeta, service.Meta) + } + + // Disable canary and assert meta are not the canary meta + origWorkload := ctx.Workload.Copy() + ctx.Workload.Canary = false + require.NoError(ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload)) + require.NoError(ctx.syncOnce()) + require.Len(ctx.FakeConsul.services, 1) + for _, service := range ctx.FakeConsul.services { + require.NotEqual(canaryMeta, service.Meta) + } + + ctx.ServiceClient.RemoveWorkload(ctx.Workload) + require.NoError(ctx.syncOnce()) + require.Len(ctx.FakeConsul.services, 0) +} + +// TestConsul_CanaryMeta_NoMeta asserts Meta are used when Canary=true and there +// are no specified canary meta +func TestConsul_CanaryMeta_NoMeta(t *testing.T) { + t.Parallel() + require := require.New(t) + ctx := setupFake(t) + + meta := map[string]string{"meta1": "foo"} + meta["external-source"] = "nomad" + ctx.Workload.Canary = true + ctx.Workload.Services[0].Meta = meta + + require.NoError(ctx.ServiceClient.RegisterWorkload(ctx.Workload)) + require.NoError(ctx.syncOnce()) + require.Len(ctx.FakeConsul.services, 1) + for _, service := range ctx.FakeConsul.services { + require.Equal(meta, service.Meta) + } + + // Disable canary and assert meta dont change + origWorkload := ctx.Workload.Copy() + ctx.Workload.Canary = false + require.NoError(ctx.ServiceClient.UpdateWorkload(origWorkload, ctx.Workload)) + require.NoError(ctx.syncOnce()) + require.Len(ctx.FakeConsul.services, 1) + for _, service := range ctx.FakeConsul.services { + require.Equal(meta, service.Meta) + } + + ctx.ServiceClient.RemoveWorkload(ctx.Workload) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 0) } @@ -1402,7 +1470,7 @@ func TestConsul_ServiceName_Duplicates(t *testing.T) { ctx := setupFake(t) require := require.New(t) - ctx.Task.Services = []*structs.Service{ + ctx.Workload.Services = []*structs.Service{ { Name: "best-service", PortLabel: "x", @@ -1439,20 +1507,20 @@ func TestConsul_ServiceName_Duplicates(t *testing.T) { }, } - require.NoError(ctx.ServiceClient.RegisterTask(ctx.Task)) + require.NoError(ctx.ServiceClient.RegisterWorkload(ctx.Workload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 3) for _, v := range ctx.FakeConsul.services { - if v.Name == ctx.Task.Services[0].Name && v.Port == xPort { - require.ElementsMatch(v.Tags, ctx.Task.Services[0].Tags) + if v.Name == ctx.Workload.Services[0].Name && v.Port == xPort { + require.ElementsMatch(v.Tags, ctx.Workload.Services[0].Tags) require.Len(v.Checks, 1) - } else if v.Name == ctx.Task.Services[1].Name && v.Port == yPort { - require.ElementsMatch(v.Tags, ctx.Task.Services[1].Tags) + } else if v.Name == ctx.Workload.Services[1].Name && v.Port == yPort { + require.ElementsMatch(v.Tags, ctx.Workload.Services[1].Tags) require.Len(v.Checks, 1) - } else if v.Name == ctx.Task.Services[2].Name { + } else if v.Name == ctx.Workload.Services[2].Name { require.Len(v.Checks, 0) } } @@ -1467,8 +1535,8 @@ func TestConsul_ServiceDeregistration_OutProbation(t *testing.T) { ctx.ServiceClient.deregisterProbationExpiry = time.Now().Add(-1 * time.Hour) - remainingTask := testTask() - remainingTask.Services = []*structs.Service{ + remainingWorkload := testWorkload() + remainingWorkload.Services = []*structs.Service{ { Name: "remaining-service", PortLabel: "x", @@ -1482,16 +1550,16 @@ func TestConsul_ServiceDeregistration_OutProbation(t *testing.T) { }, }, } - remainingTaskServiceID := MakeTaskServiceID(remainingTask.AllocID, - remainingTask.Name, remainingTask.Services[0]) + remainingWorkloadServiceID := MakeAllocServiceID(remainingWorkload.AllocID, + remainingWorkload.Name(), remainingWorkload.Services[0]) - require.NoError(ctx.ServiceClient.RegisterTask(remainingTask)) + require.NoError(ctx.ServiceClient.RegisterWorkload(remainingWorkload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 1) require.Len(ctx.FakeConsul.checks, 1) - explicitlyRemovedTask := testTask() - explicitlyRemovedTask.Services = []*structs.Service{ + explicitlyRemovedWorkload := testWorkload() + explicitlyRemovedWorkload.Services = []*structs.Service{ { Name: "explicitly-removed-service", PortLabel: "y", @@ -1505,18 +1573,18 @@ func TestConsul_ServiceDeregistration_OutProbation(t *testing.T) { }, }, } - explicitlyRemovedTaskServiceID := MakeTaskServiceID(explicitlyRemovedTask.AllocID, - explicitlyRemovedTask.Name, explicitlyRemovedTask.Services[0]) + explicitlyRemovedWorkloadServiceID := MakeAllocServiceID(explicitlyRemovedWorkload.AllocID, + explicitlyRemovedWorkload.Name(), explicitlyRemovedWorkload.Services[0]) - require.NoError(ctx.ServiceClient.RegisterTask(explicitlyRemovedTask)) + require.NoError(ctx.ServiceClient.RegisterWorkload(explicitlyRemovedWorkload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 2) require.Len(ctx.FakeConsul.checks, 2) // we register a task through nomad API then remove it out of band - outofbandTask := testTask() - outofbandTask.Services = []*structs.Service{ + outofbandWorkload := testWorkload() + outofbandWorkload.Services = []*structs.Service{ { Name: "unknown-service", PortLabel: "x", @@ -1530,39 +1598,39 @@ func TestConsul_ServiceDeregistration_OutProbation(t *testing.T) { }, }, } - outofbandTaskServiceID := MakeTaskServiceID(outofbandTask.AllocID, - outofbandTask.Name, outofbandTask.Services[0]) + outofbandWorkloadServiceID := MakeAllocServiceID(outofbandWorkload.AllocID, + outofbandWorkload.Name(), outofbandWorkload.Services[0]) - require.NoError(ctx.ServiceClient.RegisterTask(outofbandTask)) + require.NoError(ctx.ServiceClient.RegisterWorkload(outofbandWorkload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 3) - // remove outofbandTask from local services so it appears unknown to client + // remove outofbandWorkload from local services so it appears unknown to client require.Len(ctx.ServiceClient.services, 3) require.Len(ctx.ServiceClient.checks, 3) - delete(ctx.ServiceClient.services, outofbandTaskServiceID) - delete(ctx.ServiceClient.checks, MakeCheckID(outofbandTaskServiceID, outofbandTask.Services[0].Checks[0])) + delete(ctx.ServiceClient.services, outofbandWorkloadServiceID) + delete(ctx.ServiceClient.checks, MakeCheckID(outofbandWorkloadServiceID, outofbandWorkload.Services[0].Checks[0])) require.Len(ctx.ServiceClient.services, 2) require.Len(ctx.ServiceClient.checks, 2) - // Sync and ensure that explicitly removed service as well as outofbandTask were removed + // Sync and ensure that explicitly removed service as well as outofbandWorkload were removed - ctx.ServiceClient.RemoveTask(explicitlyRemovedTask) + ctx.ServiceClient.RemoveWorkload(explicitlyRemovedWorkload) require.NoError(ctx.syncOnce()) require.NoError(ctx.ServiceClient.sync()) require.Len(ctx.FakeConsul.services, 1) require.Len(ctx.FakeConsul.checks, 1) - require.Contains(ctx.FakeConsul.services, remainingTaskServiceID) - require.NotContains(ctx.FakeConsul.services, outofbandTaskServiceID) - require.NotContains(ctx.FakeConsul.services, explicitlyRemovedTaskServiceID) + require.Contains(ctx.FakeConsul.services, remainingWorkloadServiceID) + require.NotContains(ctx.FakeConsul.services, outofbandWorkloadServiceID) + require.NotContains(ctx.FakeConsul.services, explicitlyRemovedWorkloadServiceID) - require.Contains(ctx.FakeConsul.checks, MakeCheckID(remainingTaskServiceID, remainingTask.Services[0].Checks[0])) - require.NotContains(ctx.FakeConsul.checks, MakeCheckID(outofbandTaskServiceID, outofbandTask.Services[0].Checks[0])) - require.NotContains(ctx.FakeConsul.checks, MakeCheckID(explicitlyRemovedTaskServiceID, explicitlyRemovedTask.Services[0].Checks[0])) + require.Contains(ctx.FakeConsul.checks, MakeCheckID(remainingWorkloadServiceID, remainingWorkload.Services[0].Checks[0])) + require.NotContains(ctx.FakeConsul.checks, MakeCheckID(outofbandWorkloadServiceID, outofbandWorkload.Services[0].Checks[0])) + require.NotContains(ctx.FakeConsul.checks, MakeCheckID(explicitlyRemovedWorkloadServiceID, explicitlyRemovedWorkload.Services[0].Checks[0])) } // TestConsul_ServiceDeregistration_InProbation asserts that during initialization @@ -1576,8 +1644,8 @@ func TestConsul_ServiceDeregistration_InProbation(t *testing.T) { ctx.ServiceClient.deregisterProbationExpiry = time.Now().Add(1 * time.Hour) - remainingTask := testTask() - remainingTask.Services = []*structs.Service{ + remainingWorkload := testWorkload() + remainingWorkload.Services = []*structs.Service{ { Name: "remaining-service", PortLabel: "x", @@ -1591,16 +1659,16 @@ func TestConsul_ServiceDeregistration_InProbation(t *testing.T) { }, }, } - remainingTaskServiceID := MakeTaskServiceID(remainingTask.AllocID, - remainingTask.Name, remainingTask.Services[0]) + remainingWorkloadServiceID := MakeAllocServiceID(remainingWorkload.AllocID, + remainingWorkload.Name(), remainingWorkload.Services[0]) - require.NoError(ctx.ServiceClient.RegisterTask(remainingTask)) + require.NoError(ctx.ServiceClient.RegisterWorkload(remainingWorkload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 1) require.Len(ctx.FakeConsul.checks, 1) - explicitlyRemovedTask := testTask() - explicitlyRemovedTask.Services = []*structs.Service{ + explicitlyRemovedWorkload := testWorkload() + explicitlyRemovedWorkload.Services = []*structs.Service{ { Name: "explicitly-removed-service", PortLabel: "y", @@ -1614,18 +1682,18 @@ func TestConsul_ServiceDeregistration_InProbation(t *testing.T) { }, }, } - explicitlyRemovedTaskServiceID := MakeTaskServiceID(explicitlyRemovedTask.AllocID, - explicitlyRemovedTask.Name, explicitlyRemovedTask.Services[0]) + explicitlyRemovedWorkloadServiceID := MakeAllocServiceID(explicitlyRemovedWorkload.AllocID, + explicitlyRemovedWorkload.Name(), explicitlyRemovedWorkload.Services[0]) - require.NoError(ctx.ServiceClient.RegisterTask(explicitlyRemovedTask)) + require.NoError(ctx.ServiceClient.RegisterWorkload(explicitlyRemovedWorkload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 2) require.Len(ctx.FakeConsul.checks, 2) // we register a task through nomad API then remove it out of band - outofbandTask := testTask() - outofbandTask.Services = []*structs.Service{ + outofbandWorkload := testWorkload() + outofbandWorkload.Services = []*structs.Service{ { Name: "unknown-service", PortLabel: "x", @@ -1639,39 +1707,39 @@ func TestConsul_ServiceDeregistration_InProbation(t *testing.T) { }, }, } - outofbandTaskServiceID := MakeTaskServiceID(outofbandTask.AllocID, - outofbandTask.Name, outofbandTask.Services[0]) + outofbandWorkloadServiceID := MakeAllocServiceID(outofbandWorkload.AllocID, + outofbandWorkload.Name(), outofbandWorkload.Services[0]) - require.NoError(ctx.ServiceClient.RegisterTask(outofbandTask)) + require.NoError(ctx.ServiceClient.RegisterWorkload(outofbandWorkload)) require.NoError(ctx.syncOnce()) require.Len(ctx.FakeConsul.services, 3) - // remove outofbandTask from local services so it appears unknown to client + // remove outofbandWorkload from local services so it appears unknown to client require.Len(ctx.ServiceClient.services, 3) require.Len(ctx.ServiceClient.checks, 3) - delete(ctx.ServiceClient.services, outofbandTaskServiceID) - delete(ctx.ServiceClient.checks, MakeCheckID(outofbandTaskServiceID, outofbandTask.Services[0].Checks[0])) + delete(ctx.ServiceClient.services, outofbandWorkloadServiceID) + delete(ctx.ServiceClient.checks, MakeCheckID(outofbandWorkloadServiceID, outofbandWorkload.Services[0].Checks[0])) require.Len(ctx.ServiceClient.services, 2) require.Len(ctx.ServiceClient.checks, 2) - // Sync and ensure that explicitly removed service was removed, but outofbandTask remains + // Sync and ensure that explicitly removed service was removed, but outofbandWorkload remains - ctx.ServiceClient.RemoveTask(explicitlyRemovedTask) + ctx.ServiceClient.RemoveWorkload(explicitlyRemovedWorkload) require.NoError(ctx.syncOnce()) require.NoError(ctx.ServiceClient.sync()) require.Len(ctx.FakeConsul.services, 2) require.Len(ctx.FakeConsul.checks, 2) - require.Contains(ctx.FakeConsul.services, remainingTaskServiceID) - require.Contains(ctx.FakeConsul.services, outofbandTaskServiceID) - require.NotContains(ctx.FakeConsul.services, explicitlyRemovedTaskServiceID) + require.Contains(ctx.FakeConsul.services, remainingWorkloadServiceID) + require.Contains(ctx.FakeConsul.services, outofbandWorkloadServiceID) + require.NotContains(ctx.FakeConsul.services, explicitlyRemovedWorkloadServiceID) - require.Contains(ctx.FakeConsul.checks, MakeCheckID(remainingTaskServiceID, remainingTask.Services[0].Checks[0])) - require.Contains(ctx.FakeConsul.checks, MakeCheckID(outofbandTaskServiceID, outofbandTask.Services[0].Checks[0])) - require.NotContains(ctx.FakeConsul.checks, MakeCheckID(explicitlyRemovedTaskServiceID, explicitlyRemovedTask.Services[0].Checks[0])) + require.Contains(ctx.FakeConsul.checks, MakeCheckID(remainingWorkloadServiceID, remainingWorkload.Services[0].Checks[0])) + require.Contains(ctx.FakeConsul.checks, MakeCheckID(outofbandWorkloadServiceID, outofbandWorkload.Services[0].Checks[0])) + require.NotContains(ctx.FakeConsul.checks, MakeCheckID(explicitlyRemovedWorkloadServiceID, explicitlyRemovedWorkload.Services[0].Checks[0])) // after probation, outofband services and checks are removed ctx.ServiceClient.deregisterProbationExpiry = time.Now().Add(-1 * time.Hour) @@ -1680,12 +1748,12 @@ func TestConsul_ServiceDeregistration_InProbation(t *testing.T) { require.Len(ctx.FakeConsul.services, 1) require.Len(ctx.FakeConsul.checks, 1) - require.Contains(ctx.FakeConsul.services, remainingTaskServiceID) - require.NotContains(ctx.FakeConsul.services, outofbandTaskServiceID) - require.NotContains(ctx.FakeConsul.services, explicitlyRemovedTaskServiceID) + require.Contains(ctx.FakeConsul.services, remainingWorkloadServiceID) + require.NotContains(ctx.FakeConsul.services, outofbandWorkloadServiceID) + require.NotContains(ctx.FakeConsul.services, explicitlyRemovedWorkloadServiceID) - require.Contains(ctx.FakeConsul.checks, MakeCheckID(remainingTaskServiceID, remainingTask.Services[0].Checks[0])) - require.NotContains(ctx.FakeConsul.checks, MakeCheckID(outofbandTaskServiceID, outofbandTask.Services[0].Checks[0])) - require.NotContains(ctx.FakeConsul.checks, MakeCheckID(explicitlyRemovedTaskServiceID, explicitlyRemovedTask.Services[0].Checks[0])) + require.Contains(ctx.FakeConsul.checks, MakeCheckID(remainingWorkloadServiceID, remainingWorkload.Services[0].Checks[0])) + require.NotContains(ctx.FakeConsul.checks, MakeCheckID(outofbandWorkloadServiceID, outofbandWorkload.Services[0].Checks[0])) + require.NotContains(ctx.FakeConsul.checks, MakeCheckID(explicitlyRemovedWorkloadServiceID, explicitlyRemovedWorkload.Services[0].Checks[0])) } diff --git a/command/agent/fs_endpoint.go b/command/agent/fs_endpoint.go index f36f3be8edb..4a99a2531df 100644 --- a/command/agent/fs_endpoint.go +++ b/command/agent/fs_endpoint.go @@ -17,12 +17,12 @@ import ( ) var ( - allocIDNotPresentErr = fmt.Errorf("must provide a valid alloc id") - fileNameNotPresentErr = fmt.Errorf("must provide a file name") - taskNotPresentErr = fmt.Errorf("must provide task name") - logTypeNotPresentErr = fmt.Errorf("must provide log type (stdout/stderr)") - clientNotRunning = fmt.Errorf("node is not running a Nomad Client") - invalidOrigin = fmt.Errorf("origin must be start or end") + allocIDNotPresentErr = CodedError(400, "must provide a valid alloc id") + fileNameNotPresentErr = CodedError(400, "must provide a file name") + taskNotPresentErr = CodedError(400, "must provide task name") + logTypeNotPresentErr = CodedError(400, "must provide log type (stdout/stderr)") + clientNotRunning = CodedError(400, "node is not running a Nomad Client") + invalidOrigin = CodedError(400, "origin must be start or end") ) func (s *HTTPServer) FsRequest(resp http.ResponseWriter, req *http.Request) (interface{}, error) { @@ -273,13 +273,13 @@ func (s *HTTPServer) Logs(resp http.ResponseWriter, req *http.Request) (interfac if followStr := q.Get("follow"); followStr != "" { if follow, err = strconv.ParseBool(followStr); err != nil { - return nil, fmt.Errorf("failed to parse follow field to boolean: %v", err) + return nil, CodedError(400, fmt.Sprintf("failed to parse follow field to boolean: %v", err)) } } if plainStr := q.Get("plain"); plainStr != "" { if plain, err = strconv.ParseBool(plainStr); err != nil { - return nil, fmt.Errorf("failed to parse plain field to boolean: %v", err) + return nil, CodedError(400, fmt.Sprintf("failed to parse plain field to boolean: %v", err)) } } @@ -295,7 +295,7 @@ func (s *HTTPServer) Logs(resp http.ResponseWriter, req *http.Request) (interfac if offsetString != "" { var err error if offset, err = strconv.ParseInt(offsetString, 10, 64); err != nil { - return nil, fmt.Errorf("error parsing offset: %v", err) + return nil, CodedError(400, fmt.Sprintf("error parsing offset: %v", err)) } } @@ -388,10 +388,13 @@ func (s *HTTPServer) fsStreamImpl(resp http.ResponseWriter, decoder.Reset(httpPipe) if err := res.Error; err != nil { + code := 500 if err.Code != nil { - errCh <- CodedError(int(*err.Code), err.Error()) - return + code = int(*err.Code) } + + errCh <- CodedError(code, err.Error()) + return } if _, err := io.Copy(output, bytes.NewReader(res.Payload)); err != nil { diff --git a/command/agent/fs_endpoint_test.go b/command/agent/fs_endpoint_test.go index e131c990a77..67cda129fd1 100644 --- a/command/agent/fs_endpoint_test.go +++ b/command/agent/fs_endpoint_test.go @@ -3,7 +3,6 @@ package agent import ( "encoding/base64" "fmt" - "io" "io/ioutil" "net/http" "net/http/httptest" @@ -12,6 +11,7 @@ import ( "time" cstructs "github.com/hashicorp/nomad/client/structs" + "github.com/hashicorp/nomad/helper/uuid" "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/testutil" @@ -189,25 +189,26 @@ func TestHTTP_FS_Stream_MissingParams(t *testing.T) { require := require.New(t) httpTest(t, nil, func(s *TestAgent) { req, err := http.NewRequest("GET", "/v1/client/fs/stream/", nil) - require.Nil(err) + require.NoError(err) respW := httptest.NewRecorder() _, err = s.Server.Stream(respW, req) require.EqualError(err, allocIDNotPresentErr.Error()) req, err = http.NewRequest("GET", "/v1/client/fs/stream/foo", nil) - require.Nil(err) + require.NoError(err) respW = httptest.NewRecorder() _, err = s.Server.Stream(respW, req) require.EqualError(err, fileNameNotPresentErr.Error()) req, err = http.NewRequest("GET", "/v1/client/fs/stream/foo?path=/path/to/file", nil) - require.Nil(err) + require.NoError(err) respW = httptest.NewRecorder() _, err = s.Server.Stream(respW, req) - require.Nil(err) + require.Error(err) + require.Contains(err.Error(), "alloc lookup failed") }) } @@ -219,38 +220,39 @@ func TestHTTP_FS_Logs_MissingParams(t *testing.T) { httpTest(t, nil, func(s *TestAgent) { // AllocID Not Present req, err := http.NewRequest("GET", "/v1/client/fs/logs/", nil) - require.Nil(err) + require.NoError(err) respW := httptest.NewRecorder() s.Server.mux.ServeHTTP(respW, req) require.Equal(respW.Body.String(), allocIDNotPresentErr.Error()) - require.Equal(500, respW.Code) // 500 for backward compat + require.Equal(400, respW.Code) // Task Not Present req, err = http.NewRequest("GET", "/v1/client/fs/logs/foo", nil) - require.Nil(err) + require.NoError(err) respW = httptest.NewRecorder() s.Server.mux.ServeHTTP(respW, req) require.Equal(respW.Body.String(), taskNotPresentErr.Error()) - require.Equal(500, respW.Code) // 500 for backward compat + require.Equal(400, respW.Code) // Log Type Not Present req, err = http.NewRequest("GET", "/v1/client/fs/logs/foo?task=foo", nil) - require.Nil(err) + require.NoError(err) respW = httptest.NewRecorder() s.Server.mux.ServeHTTP(respW, req) require.Equal(respW.Body.String(), logTypeNotPresentErr.Error()) - require.Equal(500, respW.Code) // 500 for backward compat + require.Equal(400, respW.Code) - // Ok + // case where all parameters are set but alloc isn't found req, err = http.NewRequest("GET", "/v1/client/fs/logs/foo?task=foo&type=stdout", nil) - require.Nil(err) + require.NoError(err) respW = httptest.NewRecorder() s.Server.mux.ServeHTTP(respW, req) - require.Equal(200, respW.Code) + require.Equal(500, respW.Code) + require.Contains(respW.Body.String(), "alloc lookup failed") }) } @@ -354,8 +356,7 @@ func TestHTTP_FS_Stream_NoFollow(t *testing.T) { path := fmt.Sprintf("/v1/client/fs/stream/%s?path=alloc/logs/web.stdout.0&offset=%d&origin=end&follow=false", a.ID, offset) - p, _ := io.Pipe() - req, err := http.NewRequest("GET", path, p) + req, err := http.NewRequest("GET", path, nil) require.Nil(err) respW := testutil.NewResponseRecorder() doneCh := make(chan struct{}) @@ -383,8 +384,6 @@ func TestHTTP_FS_Stream_NoFollow(t *testing.T) { case <-time.After(1 * time.Second): t.Fatal("should close but did not") } - - p.Close() }) } @@ -401,9 +400,7 @@ func TestHTTP_FS_Stream_Follow(t *testing.T) { path := fmt.Sprintf("/v1/client/fs/stream/%s?path=alloc/logs/web.stdout.0&offset=%d&origin=end", a.ID, offset) - p, _ := io.Pipe() - - req, err := http.NewRequest("GET", path, p) + req, err := http.NewRequest("GET", path, nil) require.Nil(err) respW := httptest.NewRecorder() doneCh := make(chan struct{}) @@ -431,8 +428,6 @@ func TestHTTP_FS_Stream_Follow(t *testing.T) { t.Fatal("shouldn't close") case <-time.After(1 * time.Second): } - - p.Close() }) } @@ -448,8 +443,7 @@ func TestHTTP_FS_Logs(t *testing.T) { path := fmt.Sprintf("/v1/client/fs/logs/%s?type=stdout&task=web&offset=%d&origin=end&plain=true", a.ID, offset) - p, _ := io.Pipe() - req, err := http.NewRequest("GET", path, p) + req, err := http.NewRequest("GET", path, nil) require.Nil(err) respW := testutil.NewResponseRecorder() go func() { @@ -469,8 +463,6 @@ func TestHTTP_FS_Logs(t *testing.T) { }, func(err error) { t.Fatal(err) }) - - p.Close() }) } @@ -486,8 +478,7 @@ func TestHTTP_FS_Logs_Follow(t *testing.T) { path := fmt.Sprintf("/v1/client/fs/logs/%s?type=stdout&task=web&offset=%d&origin=end&plain=true&follow=true", a.ID, offset) - p, _ := io.Pipe() - req, err := http.NewRequest("GET", path, p) + req, err := http.NewRequest("GET", path, nil) require.Nil(err) respW := testutil.NewResponseRecorder() errCh := make(chan error) @@ -514,7 +505,23 @@ func TestHTTP_FS_Logs_Follow(t *testing.T) { t.Fatalf("shouldn't exit: %v", err) case <-time.After(1 * time.Second): } + }) +} + +func TestHTTP_FS_Logs_PropagatesErrors(t *testing.T) { + t.Parallel() + httpTest(t, nil, func(s *TestAgent) { + path := fmt.Sprintf("/v1/client/fs/logs/%s?type=stdout&task=web&offset=0&origin=end&plain=true", + uuid.Generate()) + + req, err := http.NewRequest("GET", path, nil) + require.NoError(t, err) + respW := testutil.NewResponseRecorder() + + _, err = s.Server.Logs(respW, req) + require.Error(t, err) - p.Close() + _, ok := err.(HTTPCodedError) + require.Truef(t, ok, "expected a coded error but found: %#+v", err) }) } diff --git a/command/agent/http.go b/command/agent/http.go index 1bb673a2aab..910bb74effa 100644 --- a/command/agent/http.go +++ b/command/agent/http.go @@ -16,6 +16,7 @@ import ( "github.com/NYTimes/gziphandler" assetfs "github.com/elazarl/go-bindata-assetfs" "github.com/gorilla/websocket" + "github.com/hashicorp/go-connlimit" log "github.com/hashicorp/go-hclog" "github.com/hashicorp/nomad/helper/tlsutil" "github.com/hashicorp/nomad/nomad/structs" @@ -41,9 +42,10 @@ var ( // allowCORS sets permissive CORS headers for a handler allowCORS = cors.New(cors.Options{ - AllowedOrigins: []string{"*"}, - AllowedMethods: []string{"HEAD", "GET"}, - AllowedHeaders: []string{"*"}, + AllowedOrigins: []string{"*"}, + AllowedMethods: []string{"HEAD", "GET"}, + AllowedHeaders: []string{"*"}, + AllowCredentials: true, }) ) @@ -111,14 +113,102 @@ func NewHTTPServer(agent *Agent, config *Config) (*HTTPServer, error) { return nil, err } + // Get connection handshake timeout limit + handshakeTimeout, err := time.ParseDuration(config.Limits.HTTPSHandshakeTimeout) + if err != nil { + return nil, fmt.Errorf("error parsing https_handshake_timeout: %v", err) + } else if handshakeTimeout < 0 { + return nil, fmt.Errorf("https_handshake_timeout must be >= 0") + } + + // Get max connection limit + maxConns := 0 + if mc := config.Limits.HTTPMaxConnsPerClient; mc != nil { + maxConns = *mc + } + if maxConns < 0 { + return nil, fmt.Errorf("http_max_conns_per_client must be >= 0") + } + + // Create HTTP server with timeouts + httpServer := http.Server{ + Addr: srv.Addr, + Handler: gzip(mux), + ConnState: makeConnState(config.TLSConfig.EnableHTTP, handshakeTimeout, maxConns), + } + go func() { defer close(srv.listenerCh) - http.Serve(ln, gzip(mux)) + httpServer.Serve(ln) }() return srv, nil } +// makeConnState returns a ConnState func for use in an http.Server. If +// isTLS=true and handshakeTimeout>0 then the handshakeTimeout will be applied +// as a connection deadline to new connections and removed when the connection +// is active (meaning it has successfully completed the TLS handshake). +// +// If limit > 0, a per-address connection limit will be enabled regardless of +// TLS. If connLimit == 0 there is no connection limit. +func makeConnState(isTLS bool, handshakeTimeout time.Duration, connLimit int) func(conn net.Conn, state http.ConnState) { + if !isTLS || handshakeTimeout == 0 { + if connLimit > 0 { + // Still return the connection limiter + return connlimit.NewLimiter(connlimit.Config{ + MaxConnsPerClientIP: connLimit, + }).HTTPConnStateFunc() + } + + return nil + } + + if connLimit > 0 { + // Return conn state callback with connection limiting and a + // handshake timeout. + + connLimiter := connlimit.NewLimiter(connlimit.Config{ + MaxConnsPerClientIP: connLimit, + }).HTTPConnStateFunc() + + return func(conn net.Conn, state http.ConnState) { + switch state { + case http.StateNew: + // Set deadline to prevent slow send before TLS handshake or first + // byte of request. + conn.SetDeadline(time.Now().Add(handshakeTimeout)) + case http.StateActive: + // Clear read deadline. We should maybe set read timeouts more + // generally but that's a bigger task as some HTTP endpoints may + // stream large requests and responses (e.g. snapshot) so we can't + // set sensible blanket timeouts here. + conn.SetDeadline(time.Time{}) + } + + // Call connection limiter + connLimiter(conn, state) + } + } + + // Return conn state callback with just a handshake timeout + // (connection limiting disabled). + return func(conn net.Conn, state http.ConnState) { + switch state { + case http.StateNew: + // Set deadline to prevent slow send before TLS handshake or first + // byte of request. + conn.SetDeadline(time.Now().Add(handshakeTimeout)) + case http.StateActive: + // Clear read deadline. We should maybe set read timeouts more + // generally but that's a bigger task as some HTTP endpoints may + // stream large requests and responses (e.g. snapshot) so we can't + // set sensible blanket timeouts here. + conn.SetDeadline(time.Time{}) + } + } +} + // tcpKeepAliveListener sets TCP keep-alive timeouts on accepted // connections. It's used by NewHttpServer so // dead TCP connections eventually go away. @@ -183,6 +273,9 @@ func (s *HTTPServer) registerHandlers(enableDebug bool) { s.mux.HandleFunc("/v1/agent/servers", s.wrap(s.AgentServersRequest)) s.mux.HandleFunc("/v1/agent/keyring/", s.wrap(s.KeyringOperationRequest)) s.mux.HandleFunc("/v1/agent/health", s.wrap(s.HealthRequest)) + s.mux.HandleFunc("/v1/agent/monitor", s.wrap(s.AgentMonitor)) + + s.mux.HandleFunc("/v1/agent/pprof/", s.wrapNonJSON(s.AgentPprofRequest)) s.mux.HandleFunc("/v1/metrics", s.wrap(s.MetricsRequest)) @@ -212,9 +305,12 @@ func (s *HTTPServer) registerHandlers(enableDebug bool) { w.Write([]byte(stubHTML)) }) } - s.mux.Handle("/", handleRootRedirect()) + s.mux.Handle("/", handleRootFallthrough()) if enableDebug { + if !s.agent.config.DevMode { + s.logger.Warn("enable_debug is set to true. This is insecure and should not be enabled in production") + } s.mux.HandleFunc("/debug/pprof/", pprof.Index) s.mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) s.mux.HandleFunc("/debug/pprof/profile", pprof.Profile) @@ -274,10 +370,13 @@ func handleUI(h http.Handler) http.Handler { }) } -func handleRootRedirect() http.Handler { +func handleRootFallthrough() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - http.Redirect(w, req, "/ui/", 307) - return + if req.URL.Path == "/" { + http.Redirect(w, req, "/ui/", 307) + } else { + w.WriteHeader(http.StatusNotFound) + } }) } @@ -300,6 +399,9 @@ func (s *HTTPServer) wrap(handler func(resp http.ResponseWriter, req *http.Reque errMsg := err.Error() if http, ok := err.(HTTPCodedError); ok { code = http.Code() + } else if ecode, emsg, ok := structs.CodeFromRPCCodedErr(err); ok { + code = ecode + errMsg = emsg } else { // RPC errors get wrapped, so manually unwrap by only looking at their suffix if strings.HasSuffix(errMsg, structs.ErrPermissionDenied.Error()) { @@ -347,6 +449,55 @@ func (s *HTTPServer) wrap(handler func(resp http.ResponseWriter, req *http.Reque return f } +// wrapNonJSON is used to wrap functions returning non JSON +// serializeable data to make them more convenient. It is primarily +// responsible for setting nomad headers and logging. +// Handler functions are responsible for setting Content-Type Header +func (s *HTTPServer) wrapNonJSON(handler func(resp http.ResponseWriter, req *http.Request) ([]byte, error)) func(resp http.ResponseWriter, req *http.Request) { + f := func(resp http.ResponseWriter, req *http.Request) { + setHeaders(resp, s.agent.config.HTTPAPIResponseHeaders) + // Invoke the handler + reqURL := req.URL.String() + start := time.Now() + defer func() { + s.logger.Debug("request complete", "method", req.Method, "path", reqURL, "duration", time.Now().Sub(start)) + }() + obj, err := handler(resp, req) + + // Check for an error + if err != nil { + code := 500 + errMsg := err.Error() + if http, ok := err.(HTTPCodedError); ok { + code = http.Code() + } else if ecode, emsg, ok := structs.CodeFromRPCCodedErr(err); ok { + code = ecode + errMsg = emsg + } else { + // RPC errors get wrapped, so manually unwrap by only looking at their suffix + if strings.HasSuffix(errMsg, structs.ErrPermissionDenied.Error()) { + errMsg = structs.ErrPermissionDenied.Error() + code = 403 + } else if strings.HasSuffix(errMsg, structs.ErrTokenNotFound.Error()) { + errMsg = structs.ErrTokenNotFound.Error() + code = 403 + } + } + + resp.WriteHeader(code) + resp.Write([]byte(errMsg)) + s.logger.Error("request failed", "method", req.Method, "path", reqURL, "error", err, "code", code) + return + } + + // write response + if obj != nil { + resp.Write(obj) + } + } + return f +} + // decodeBody is used to decode a JSON request body func decodeBody(req *http.Request, out interface{}) error { dec := json.NewDecoder(req.Body) diff --git a/command/agent/http_test.go b/command/agent/http_test.go index 6c4e637eb6e..e0cdc46aeca 100644 --- a/command/agent/http_test.go +++ b/command/agent/http_test.go @@ -12,15 +12,18 @@ import ( "net/http" "net/http/httptest" "net/url" - "strconv" "testing" "time" + "github.com/hashicorp/nomad/api" + "github.com/hashicorp/nomad/helper" + "github.com/hashicorp/nomad/helper/testlog" "github.com/hashicorp/nomad/nomad/mock" "github.com/hashicorp/nomad/nomad/structs" "github.com/hashicorp/nomad/nomad/structs/config" "github.com/hashicorp/nomad/testutil" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/ugorji/go/codec" ) @@ -61,6 +64,58 @@ func BenchmarkHTTPRequests(b *testing.B) { }) } +// TestRootFallthrough tests rootFallthrough handler to +// verify redirect and 404 behavior +func TestRootFallthrough(t *testing.T) { + t.Parallel() + + cases := []struct { + desc string + path string + expectedPath string + expectedCode int + }{ + { + desc: "unknown endpoint 404s", + path: "/v1/unknown/endpoint", + expectedCode: 404, + }, + { + desc: "root path redirects to ui", + path: "/", + expectedPath: "/ui/", + expectedCode: 307, + }, + } + + s := makeHTTPServer(t, nil) + defer s.Shutdown() + + // setup a client that doesn't follow redirects + client := &http.Client{ + CheckRedirect: func(_ *http.Request, _ []*http.Request) error { + return http.ErrUseLastResponse + }, + } + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + + reqURL := fmt.Sprintf("http://%s%s", s.Agent.config.AdvertiseAddrs.HTTP, tc.path) + + resp, err := client.Get(reqURL) + require.NoError(t, err) + require.Equal(t, tc.expectedCode, resp.StatusCode) + + if tc.expectedPath != "" { + loc, err := resp.Location() + require.NoError(t, err) + require.Equal(t, tc.expectedPath, loc.Path) + } + }) + } +} + func TestSetIndex(t *testing.T) { t.Parallel() resp := httptest.NewRecorder() @@ -166,6 +221,60 @@ func TestContentTypeIsJSON(t *testing.T) { } } +func TestWrapNonJSON(t *testing.T) { + t.Parallel() + s := makeHTTPServer(t, nil) + defer s.Shutdown() + + resp := httptest.NewRecorder() + + handler := func(resp http.ResponseWriter, req *http.Request) ([]byte, error) { + return []byte("test response"), nil + } + + req, _ := http.NewRequest("GET", "/v1/kv/key", nil) + s.Server.wrapNonJSON(handler)(resp, req) + + respBody, _ := ioutil.ReadAll(resp.Body) + require.Equal(t, respBody, []byte("test response")) + +} + +func TestWrapNonJSON_Error(t *testing.T) { + t.Parallel() + s := makeHTTPServer(t, nil) + defer s.Shutdown() + + handlerRPCErr := func(resp http.ResponseWriter, req *http.Request) ([]byte, error) { + return nil, structs.NewErrRPCCoded(404, "not found") + } + + handlerCodedErr := func(resp http.ResponseWriter, req *http.Request) ([]byte, error) { + return nil, CodedError(422, "unprocessable") + } + + // RPC coded error + { + resp := httptest.NewRecorder() + req, _ := http.NewRequest("GET", "/v1/kv/key", nil) + s.Server.wrapNonJSON(handlerRPCErr)(resp, req) + respBody, _ := ioutil.ReadAll(resp.Body) + require.Equal(t, []byte("not found"), respBody) + require.Equal(t, 404, resp.Code) + } + + // CodedError + { + resp := httptest.NewRecorder() + req, _ := http.NewRequest("GET", "/v1/kv/key", nil) + s.Server.wrapNonJSON(handlerCodedErr)(resp, req) + respBody, _ := ioutil.ReadAll(resp.Body) + require.Equal(t, []byte("unprocessable"), respBody) + require.Equal(t, 422, resp.Code) + } + +} + func TestPrettyPrint(t *testing.T) { t.Parallel() testPrettyPrint("pretty=1", true, t) @@ -525,23 +634,6 @@ func TestHTTP_VerifyHTTPSClient(t *testing.T) { } } -// assertIndex tests that X-Nomad-Index is set and non-zero -func assertIndex(t *testing.T, resp *httptest.ResponseRecorder) { - header := resp.Header().Get("X-Nomad-Index") - if header == "" || header == "0" { - t.Fatalf("Bad: %v", header) - } -} - -// checkIndex is like assertIndex but returns an error -func checkIndex(resp *httptest.ResponseRecorder) error { - header := resp.Header().Get("X-Nomad-Index") - if header == "" || header == "0" { - return fmt.Errorf("Bad: %v", header) - } - return nil -} - func TestHTTP_VerifyHTTPSClient_AfterConfigReload(t *testing.T) { t.Parallel() assert := assert.New(t) @@ -644,17 +736,333 @@ func TestHTTP_VerifyHTTPSClient_AfterConfigReload(t *testing.T) { } } -// getIndex parses X-Nomad-Index -func getIndex(t *testing.T, resp *httptest.ResponseRecorder) uint64 { - header := resp.Header().Get("X-Nomad-Index") - if header == "" { - t.Fatalf("Bad: %v", header) +// TestHTTPServer_Limits_Error asserts invalid Limits cause errors. This is the +// HTTP counterpart to TestAgent_ServerConfig_Limits_Error. +func TestHTTPServer_Limits_Error(t *testing.T) { + t.Parallel() + + cases := []struct { + tls bool + timeout string + limit *int + expectedErr string + }{ + { + tls: true, + timeout: "", + limit: nil, + expectedErr: "error parsing https_handshake_timeout: ", + }, + { + tls: false, + timeout: "", + limit: nil, + expectedErr: "error parsing https_handshake_timeout: ", + }, + { + tls: true, + timeout: "-1s", + limit: nil, + expectedErr: "https_handshake_timeout must be >= 0", + }, + { + tls: false, + timeout: "-1s", + limit: nil, + expectedErr: "https_handshake_timeout must be >= 0", + }, + { + tls: true, + timeout: "5s", + limit: helper.IntToPtr(-1), + expectedErr: "http_max_conns_per_client must be >= 0", + }, + { + tls: false, + timeout: "5s", + limit: helper.IntToPtr(-1), + expectedErr: "http_max_conns_per_client must be >= 0", + }, } - val, err := strconv.Atoi(header) - if err != nil { - t.Fatalf("Bad: %v", header) + + for i := range cases { + tc := cases[i] + name := fmt.Sprintf("%d-tls-%t-timeout-%s-limit-%v", i, tc.tls, tc.timeout, tc.limit) + t.Run(name, func(t *testing.T) { + t.Parallel() + + // Use a fake agent since the HTTP server should never start + agent := &Agent{ + logger: testlog.HCLogger(t), + } + + conf := &Config{ + normalizedAddrs: &Addresses{ + HTTP: "localhost:0", // port is never used + }, + TLSConfig: &config.TLSConfig{ + EnableHTTP: tc.tls, + }, + Limits: config.Limits{ + HTTPSHandshakeTimeout: tc.timeout, + HTTPMaxConnsPerClient: tc.limit, + }, + } + + srv, err := NewHTTPServer(agent, conf) + require.Error(t, err) + require.Nil(t, srv) + require.Contains(t, err.Error(), tc.expectedErr) + }) + } +} + +// TestHTTPServer_Limits_OK asserts that all valid limits combinations +// (tls/timeout/conns) work. +func TestHTTPServer_Limits_OK(t *testing.T) { + t.Parallel() + const ( + cafile = "../../helper/tlsutil/testdata/ca.pem" + foocert = "../../helper/tlsutil/testdata/nomad-foo.pem" + fookey = "../../helper/tlsutil/testdata/nomad-foo-key.pem" + maxConns = 10 // limit must be < this for testing + ) + + cases := []struct { + tls bool + timeout string + limit *int + assertTimeout bool + assertLimit bool + }{ + { + tls: false, + timeout: "5s", + limit: nil, + assertTimeout: false, + assertLimit: false, + }, + { + tls: true, + timeout: "5s", + limit: nil, + assertTimeout: true, + assertLimit: false, + }, + { + tls: false, + timeout: "0", + limit: nil, + assertTimeout: false, + assertLimit: false, + }, + { + tls: true, + timeout: "0", + limit: nil, + assertTimeout: false, + assertLimit: false, + }, + { + tls: false, + timeout: "0", + limit: helper.IntToPtr(2), + assertTimeout: false, + assertLimit: true, + }, + { + tls: true, + timeout: "0", + limit: helper.IntToPtr(2), + assertTimeout: false, + assertLimit: true, + }, + { + tls: false, + timeout: "5s", + limit: helper.IntToPtr(2), + assertTimeout: false, + assertLimit: true, + }, + { + tls: true, + timeout: "5s", + limit: helper.IntToPtr(2), + assertTimeout: true, + assertLimit: true, + }, + } + + assertTimeout := func(t *testing.T, a *TestAgent, assertTimeout bool, timeout string) { + timeoutDeadline, err := time.ParseDuration(timeout) + require.NoError(t, err) + + // Increase deadline to detect timeouts + deadline := timeoutDeadline + time.Second + + conn, err := net.DialTimeout("tcp", a.Server.Addr, deadline) + require.NoError(t, err) + defer conn.Close() + + buf := []byte{0} + readDeadline := time.Now().Add(deadline) + conn.SetReadDeadline(readDeadline) + n, err := conn.Read(buf) + require.Zero(t, n) + if assertTimeout { + // Server timeouts == EOF + require.Equal(t, io.EOF, err) + + // Perform blocking query to assert timeout is not + // enabled post-TLS-handshake. + q := &api.QueryOptions{ + WaitIndex: 10000, // wait a looong time + WaitTime: deadline, + } + + // Assertions don't require certificate validation + conf := api.DefaultConfig() + conf.Address = a.HTTPAddr() + conf.TLSConfig.Insecure = true + client, err := api.NewClient(conf) + require.NoError(t, err) + + // Assert a blocking query isn't timed out by the + // handshake timeout + jobs, meta, err := client.Jobs().List(q) + require.NoError(t, err) + require.Len(t, jobs, 0) + require.Truef(t, meta.RequestTime >= deadline, + "expected RequestTime (%s) >= Deadline (%s)", + meta.RequestTime, deadline) + + return + } + + // HTTP Server should *not* have timed out. + // Now() should always be after the read deadline, but + // isn't a sufficient assertion for correctness as slow + // tests may cause this to be true even if the server + // timed out. + require.True(t, time.Now().After(readDeadline)) + + testutil.RequireDeadlineErr(t, err) + } + + assertNoLimit := func(t *testing.T, addr string) { + var err error + + // Create max connections + conns := make([]net.Conn, maxConns) + errCh := make(chan error, maxConns) + for i := 0; i < maxConns; i++ { + conns[i], err = net.DialTimeout("tcp", addr, 1*time.Second) + require.NoError(t, err) + defer conns[i].Close() + + go func(i int) { + buf := []byte{0} + readDeadline := time.Now().Add(1 * time.Second) + conns[i].SetReadDeadline(readDeadline) + n, err := conns[i].Read(buf) + if n > 0 { + errCh <- fmt.Errorf("n > 0: %d", n) + return + } + errCh <- err + }(i) + } + + // Now assert each error is a clientside read deadline error + for i := 0; i < maxConns; i++ { + select { + case <-time.After(1 * time.Second): + t.Fatalf("timed out waiting for conn error %d", i) + case err := <-errCh: + testutil.RequireDeadlineErr(t, err) + } + } + } + + assertLimit := func(t *testing.T, addr string, limit int) { + var err error + + // Create limit connections + conns := make([]net.Conn, limit) + errCh := make(chan error, limit) + for i := range conns { + conns[i], err = net.DialTimeout("tcp", addr, 1*time.Second) + require.NoError(t, err) + defer conns[i].Close() + + go func(i int) { + buf := []byte{0} + n, err := conns[i].Read(buf) + if n > 0 { + errCh <- fmt.Errorf("n > 0: %d", n) + return + } + errCh <- err + }(i) + } + + // Assert a new connection is dropped + conn, err := net.DialTimeout("tcp", addr, 1*time.Second) + require.NoError(t, err) + defer conn.Close() + + buf := []byte{0} + deadline := time.Now().Add(10 * time.Second) + conn.SetReadDeadline(deadline) + n, err := conn.Read(buf) + require.Zero(t, n) + require.Equal(t, io.EOF, err) + + // Assert existing connections are ok + require.Len(t, errCh, 0) + + // Cleanup + for _, conn := range conns { + conn.Close() + } + for range conns { + err := <-errCh + require.Contains(t, err.Error(), "use of closed network connection") + } + } + + for i := range cases { + tc := cases[i] + name := fmt.Sprintf("%d-tls-%t-timeout-%s-limit-%v", i, tc.tls, tc.timeout, tc.limit) + t.Run(name, func(t *testing.T) { + t.Parallel() + + if tc.limit != nil && *tc.limit >= maxConns { + t.Fatalf("test fixture failure: cannot assert limit (%d) >= max (%d)", *tc.limit, maxConns) + } + + s := makeHTTPServer(t, func(c *Config) { + if tc.tls { + c.TLSConfig = &config.TLSConfig{ + EnableHTTP: true, + CAFile: cafile, + CertFile: foocert, + KeyFile: fookey, + } + } + c.Limits.HTTPSHandshakeTimeout = tc.timeout + c.Limits.HTTPMaxConnsPerClient = tc.limit + }) + defer s.Shutdown() + + assertTimeout(t, s, tc.assertTimeout, tc.timeout) + if tc.assertLimit { + assertLimit(t, s.Server.Addr, *tc.limit) + } else { + assertNoLimit(t, s.Server.Addr) + } + }) } - return uint64(val) } func httpTest(t testing.TB, cb func(c *Config), f func(srv *TestAgent)) { diff --git a/command/agent/job_endpoint.go b/command/agent/job_endpoint.go index 3e9f3f6df8a..e6e83968c2f 100644 --- a/command/agent/job_endpoint.go +++ b/command/agent/job_endpoint.go @@ -633,6 +633,7 @@ func ApiJobToStructJob(job *api.Job) *structs.Job { Datacenters: job.Datacenters, Payload: job.Payload, Meta: job.Meta, + ConsulToken: *job.ConsulToken, VaultToken: *job.VaultToken, Constraints: ApiConstraintsToStructs(job.Constraints), Affinities: ApiAffinitiesToStructs(job.Affinities), @@ -708,6 +709,10 @@ func ApiTgToStructsTG(taskGroup *api.TaskGroup, tg *structs.TaskGroup) { Mode: *taskGroup.RestartPolicy.Mode, } + if taskGroup.ShutdownDelay != nil { + tg.ShutdownDelay = taskGroup.ShutdownDelay + } + if taskGroup.ReschedulePolicy != nil { tg.ReschedulePolicy = &structs.ReschedulePolicy{ Attempts: *taskGroup.ReschedulePolicy.Attempts, @@ -753,7 +758,7 @@ func ApiTgToStructsTG(taskGroup *api.TaskGroup, tg *structs.TaskGroup) { Name: v.Name, Type: v.Type, ReadOnly: v.ReadOnly, - Config: v.Config, + Source: v.Source, } tg.Volumes[k] = vol @@ -813,9 +818,10 @@ func ApiTaskToStructsTask(apiTask *api.Task, structsTask *structs.Task) { structsTask.VolumeMounts = make([]*structs.VolumeMount, l) for i, mount := range apiTask.VolumeMounts { structsTask.VolumeMounts[i] = &structs.VolumeMount{ - Volume: mount.Volume, - Destination: mount.Destination, - ReadOnly: mount.ReadOnly, + Volume: *mount.Volume, + Destination: *mount.Destination, + ReadOnly: *mount.ReadOnly, + PropagationMode: *mount.PropagationMode, } } } @@ -830,6 +836,7 @@ func ApiTaskToStructsTask(apiTask *api.Task, structsTask *structs.Task) { CanaryTags: service.CanaryTags, AddressMode: service.AddressMode, Meta: helper.CopyMapStringString(service.Meta), + CanaryMeta: helper.CopyMapStringString(service.CanaryMeta), } if l := len(service.Checks); l != 0 { @@ -1009,6 +1016,7 @@ func ApiServicesToStructs(in []*api.Service) []*structs.Service { CanaryTags: s.CanaryTags, AddressMode: s.AddressMode, Meta: helper.CopyMapStringString(s.Meta), + CanaryMeta: helper.CopyMapStringString(s.CanaryMeta), } if l := len(s.Checks); l != 0 { @@ -1064,13 +1072,16 @@ func ApiConsulConnectToStructs(in *api.ConsulConnect) *structs.ConsulConnect { if in.SidecarService != nil { out.SidecarService = &structs.ConsulSidecarService{ + Tags: helper.CopySliceString(in.SidecarService.Tags), Port: in.SidecarService.Port, } if in.SidecarService.Proxy != nil { out.SidecarService.Proxy = &structs.ConsulProxy{ - Config: in.SidecarService.Proxy.Config, + LocalServiceAddress: in.SidecarService.Proxy.LocalServiceAddress, + LocalServicePort: in.SidecarService.Proxy.LocalServicePort, + Config: in.SidecarService.Proxy.Config, } upstreams := make([]structs.ConsulUpstream, len(in.SidecarService.Proxy.Upstreams)) diff --git a/command/agent/job_endpoint_test.go b/command/agent/job_endpoint_test.go index e1934e29e2b..41d08ca0ae4 100644 --- a/command/agent/job_endpoint_test.go +++ b/command/agent/job_endpoint_test.go @@ -1537,6 +1537,13 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) { TaskName: "task1", }, }, + Connect: &api.ConsulConnect{ + Native: false, + SidecarService: &api.ConsulSidecarService{ + Tags: []string{"f", "g"}, + Port: "9000", + }, + }, }, }, Tasks: []*api.Task{ @@ -1707,7 +1714,8 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) { }, }, }, - VaultToken: helper.StringToPtr("token"), + ConsulToken: helper.StringToPtr("abc123"), + VaultToken: helper.StringToPtr("def456"), Status: helper.StringToPtr("status"), StatusDescription: helper.StringToPtr("status_desc"), Version: helper.Uint64ToPtr(10), @@ -1877,6 +1885,13 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) { TaskName: "task1", }, }, + Connect: &structs.ConsulConnect{ + Native: false, + SidecarService: &structs.ConsulSidecarService{ + Tags: []string{"f", "g"}, + Port: "9000", + }, + }, }, }, Tasks: []*structs.Task{ @@ -2046,7 +2061,8 @@ func TestJobs_ApiJobToStructsJob(t *testing.T) { }, }, - VaultToken: "token", + ConsulToken: "abc123", + VaultToken: "def456", } structsJob := ApiJobToStructJob(apiJob) diff --git a/command/agent/log_file.go b/command/agent/log_file.go new file mode 100644 index 00000000000..bad3c6c179c --- /dev/null +++ b/command/agent/log_file.go @@ -0,0 +1,146 @@ +package agent + +import ( + "fmt" + "os" + "path/filepath" + "sort" + "strconv" + "strings" + "sync" + "time" + + "github.com/hashicorp/logutils" +) + +var ( + now = time.Now +) + +// logFile is used to setup a file based logger that also performs log rotation +type logFile struct { + // Log level Filter to filter out logs that do not matcch LogLevel criteria + logFilter *logutils.LevelFilter + + //Name of the log file + fileName string + + //Path to the log file + logPath string + + //Duration between each file rotation operation + duration time.Duration + + //LastCreated represents the creation time of the latest log + LastCreated time.Time + + //FileInfo is the pointer to the current file being written to + FileInfo *os.File + + //MaxBytes is the maximum number of desired bytes for a log file + MaxBytes int + + //BytesWritten is the number of bytes written in the current log file + BytesWritten int64 + + // Max rotated files to keep before removing them. + MaxFiles int + + //acquire is the mutex utilized to ensure we have no concurrency issues + acquire sync.Mutex +} + +func (l *logFile) fileNamePattern() string { + // Extract the file extension + fileExt := filepath.Ext(l.fileName) + // If we have no file extension we append .log + if fileExt == "" { + fileExt = ".log" + } + // Remove the file extension from the filename + return strings.TrimSuffix(l.fileName, fileExt) + "-%s" + fileExt +} + +func (l *logFile) openNew() error { + fileNamePattern := l.fileNamePattern() + // New file name has the format : filename-timestamp.extension + createTime := now() + newfileName := fmt.Sprintf(fileNamePattern, strconv.FormatInt(createTime.UnixNano(), 10)) + newfilePath := filepath.Join(l.logPath, newfileName) + // Try creating a file. We truncate the file because we are the only authority to write the logs + filePointer, err := os.OpenFile(newfilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0640) + if err != nil { + return err + } + + l.FileInfo = filePointer + // New file, new bytes tracker, new creation time :) + l.LastCreated = createTime + l.BytesWritten = 0 + return nil +} + +func (l *logFile) rotate() error { + // Get the time from the last point of contact + timeElapsed := time.Since(l.LastCreated) + // Rotate if we hit the byte file limit or the time limit + if (l.BytesWritten >= int64(l.MaxBytes) && (l.MaxBytes > 0)) || timeElapsed >= l.duration { + l.FileInfo.Close() + if err := l.pruneFiles(); err != nil { + return err + } + return l.openNew() + } + return nil +} + +func (l *logFile) pruneFiles() error { + if l.MaxFiles == 0 { + return nil + } + pattern := l.fileNamePattern() + //get all the files that match the log file pattern + globExpression := filepath.Join(l.logPath, fmt.Sprintf(pattern, "*")) + matches, err := filepath.Glob(globExpression) + if err != nil { + return err + } + + // Stort the strings as filepath.Glob does not publicly guarantee that files + // are sorted, so here we add an extra defensive sort. + sort.Strings(matches) + + // Prune if there are more files stored than the configured max + stale := len(matches) - l.MaxFiles + for i := 0; i < stale; i++ { + if err := os.Remove(matches[i]); err != nil { + return err + } + } + return nil +} + +// Write is used to implement io.Writer +func (l *logFile) Write(b []byte) (int, error) { + // Filter out log entries that do not match log level criteria + if !l.logFilter.Check(b) { + return 0, nil + } + + l.acquire.Lock() + defer l.acquire.Unlock() + //Create a new file if we have no file to write to + if l.FileInfo == nil { + if err := l.openNew(); err != nil { + return 0, err + } + } + // Check for the last contact and rotate if necessary + if err := l.rotate(); err != nil { + return 0, err + } + + n, err := l.FileInfo.Write(b) + l.BytesWritten += int64(n) + return n, err +} diff --git a/command/agent/log_file_test.go b/command/agent/log_file_test.go new file mode 100644 index 00000000000..12777784d8b --- /dev/null +++ b/command/agent/log_file_test.go @@ -0,0 +1,171 @@ +package agent + +import ( + "io/ioutil" + "os" + "path/filepath" + "testing" + "time" + + "github.com/hashicorp/logutils" + "github.com/stretchr/testify/require" +) + +const ( + testFileName = "Nomad.log" + testDuration = 2 * time.Second + testBytes = 10 +) + +func TestLogFile_timeRotation(t *testing.T) { + t.Parallel() + require := require.New(t) + + tempDir, err := ioutil.TempDir("", "LogWriterTimeTest") + require.NoError(err) + + defer os.Remove(tempDir) + + filt := LevelFilter() + logFile := logFile{ + logFilter: filt, + fileName: testFileName, + logPath: tempDir, + duration: testDuration, + } + logFile.Write([]byte("Hello World")) + time.Sleep(2 * time.Second) + logFile.Write([]byte("Second File")) + want := 2 + if got, _ := ioutil.ReadDir(tempDir); len(got) != want { + t.Errorf("Expected %d files, got %v file(s)", want, len(got)) + } +} + +func TestLogFile_openNew(t *testing.T) { + t.Parallel() + require := require.New(t) + + tempDir, err := ioutil.TempDir("", "LogWriterOpenTest") + require.NoError(err) + defer os.Remove(tempDir) + + logFile := logFile{fileName: testFileName, logPath: tempDir, duration: testDuration} + require.NoError(logFile.openNew()) + + _, err = ioutil.ReadFile(logFile.FileInfo.Name()) + require.NoError(err) +} + +func TestLogFile_byteRotation(t *testing.T) { + t.Parallel() + require := require.New(t) + + tempDir, err := ioutil.TempDir("", "LogWriterByteTest") + require.NoError(err) + defer os.Remove(tempDir) + + filt := LevelFilter() + filt.MinLevel = logutils.LogLevel("INFO") + logFile := logFile{ + logFilter: filt, + fileName: testFileName, + logPath: tempDir, + MaxBytes: testBytes, + duration: 24 * time.Hour, + } + logFile.Write([]byte("Hello World")) + logFile.Write([]byte("Second File")) + want := 2 + tempFiles, _ := ioutil.ReadDir(tempDir) + require.Equal(want, len(tempFiles)) +} + +func TestLogFile_logLevelFiltering(t *testing.T) { + t.Parallel() + require := require.New(t) + + tempDir, err := ioutil.TempDir("", "LogWriterFilterTest") + require.NoError(err) + defer os.Remove(tempDir) + filt := LevelFilter() + logFile := logFile{ + logFilter: filt, + fileName: testFileName, + logPath: tempDir, + MaxBytes: testBytes, + duration: testDuration, + } + logFile.Write([]byte("[INFO] This is an info message")) + logFile.Write([]byte("[DEBUG] This is a debug message")) + logFile.Write([]byte("[ERR] This is an error message")) + want := 2 + tempFiles, _ := ioutil.ReadDir(tempDir) + require.Equal(want, len(tempFiles)) +} + +func TestLogFile_deleteArchives(t *testing.T) { + t.Parallel() + require := require.New(t) + + tempDir, err := ioutil.TempDir("", "LogWriterDeleteArchivesTest") + require.NoError(err) + defer os.Remove(tempDir) + + filt := LevelFilter() + filt.MinLevel = logutils.LogLevel("INFO") + logFile := logFile{ + logFilter: filt, + fileName: testFileName, + logPath: tempDir, + MaxBytes: testBytes, + duration: 24 * time.Hour, + MaxFiles: 1, + } + logFile.Write([]byte("[INFO] Hello World")) + logFile.Write([]byte("[INFO] Second File")) + logFile.Write([]byte("[INFO] Third File")) + want := 2 + tempFiles, _ := ioutil.ReadDir(tempDir) + + require.Equal(want, len(tempFiles)) + + for _, tempFile := range tempFiles { + var bytes []byte + var err error + path := filepath.Join(tempDir, tempFile.Name()) + if bytes, err = ioutil.ReadFile(path); err != nil { + t.Errorf(err.Error()) + return + } + contents := string(bytes) + + require.NotEqual("[INFO] Hello World", contents, "oldest log should have been deleted") + } +} + +func TestLogFile_deleteArchivesDisabled(t *testing.T) { + t.Parallel() + + require := require.New(t) + tempDir, err := ioutil.TempDir("", "LogWriterDeleteArchivesDisabledTest") + require.NoError(err) + defer os.Remove(tempDir) + + filt := LevelFilter() + filt.MinLevel = logutils.LogLevel("INFO") + logFile := logFile{ + logFilter: filt, + fileName: testFileName, + logPath: tempDir, + MaxBytes: testBytes, + duration: 24 * time.Hour, + MaxFiles: 0, + } + logFile.Write([]byte("[INFO] Hello World")) + logFile.Write([]byte("[INFO] Second File")) + logFile.Write([]byte("[INFO] Third File")) + want := 3 + tempFiles, _ := ioutil.ReadDir(tempDir) + require.Equal(want, len(tempFiles)) +} diff --git a/command/agent/log_writer.go b/command/agent/log_writer.go deleted file mode 100644 index ebb96878bbc..00000000000 --- a/command/agent/log_writer.go +++ /dev/null @@ -1,83 +0,0 @@ -package agent - -import ( - "sync" -) - -// LogHandler interface is used for clients that want to subscribe -// to logs, for example to stream them over an IPC mechanism -type LogHandler interface { - HandleLog(string) -} - -// logWriter implements io.Writer so it can be used as a log sink. -// It maintains a circular buffer of logs, and a set of handlers to -// which it can stream the logs to. -type logWriter struct { - sync.Mutex - logs []string - index int - handlers map[LogHandler]struct{} -} - -// NewLogWriter creates a logWriter with the given buffer capacity -func NewLogWriter(buf int) *logWriter { - return &logWriter{ - logs: make([]string, buf), - index: 0, - handlers: make(map[LogHandler]struct{}), - } -} - -// RegisterHandler adds a log handler to receive logs, and sends -// the last buffered logs to the handler -func (l *logWriter) RegisterHandler(lh LogHandler) { - l.Lock() - defer l.Unlock() - - // Do nothing if already registered - if _, ok := l.handlers[lh]; ok { - return - } - - // Register - l.handlers[lh] = struct{}{} - - // Send the old logs - if l.logs[l.index] != "" { - for i := l.index; i < len(l.logs); i++ { - lh.HandleLog(l.logs[i]) - } - } - for i := 0; i < l.index; i++ { - lh.HandleLog(l.logs[i]) - } -} - -// DeregisterHandler removes a LogHandler and prevents more invocations -func (l *logWriter) DeregisterHandler(lh LogHandler) { - l.Lock() - defer l.Unlock() - delete(l.handlers, lh) -} - -// Write is used to accumulate new logs -func (l *logWriter) Write(p []byte) (n int, err error) { - l.Lock() - defer l.Unlock() - - // Strip off newlines at the end if there are any since we store - // individual log lines in the agent. - n = len(p) - if p[n-1] == '\n' { - p = p[:n-1] - } - - l.logs[l.index] = string(p) - l.index = (l.index + 1) % len(l.logs) - - for lh := range l.handlers { - lh.HandleLog(string(p)) - } - return -} diff --git a/command/agent/log_writer_test.go b/command/agent/log_writer_test.go deleted file mode 100644 index 19c23c573d7..00000000000 --- a/command/agent/log_writer_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package agent - -import ( - "testing" -) - -type MockLogHandler struct { - logs []string -} - -func (m *MockLogHandler) HandleLog(l string) { - m.logs = append(m.logs, l) -} - -func TestLogWriter(t *testing.T) { - t.Parallel() - h := &MockLogHandler{} - w := NewLogWriter(4) - - // Write some logs - w.Write([]byte("one")) // Gets dropped! - w.Write([]byte("two")) - w.Write([]byte("three")) - w.Write([]byte("four")) - w.Write([]byte("five")) - - // Register a handler, sends old! - w.RegisterHandler(h) - - w.Write([]byte("six")) - w.Write([]byte("seven")) - - // Deregister - w.DeregisterHandler(h) - - w.Write([]byte("eight")) - w.Write([]byte("nine")) - - out := []string{ - "two", - "three", - "four", - "five", - "six", - "seven", - } - for idx := range out { - if out[idx] != h.logs[idx] { - t.Fatalf("mismatch %v", h.logs) - } - } -} diff --git a/command/agent/metrics_endpoint_test.go b/command/agent/metrics_endpoint_test.go index d1c65d0cd8b..b10e4170865 100644 --- a/command/agent/metrics_endpoint_test.go +++ b/command/agent/metrics_endpoint_test.go @@ -91,6 +91,8 @@ func TestHTTP_FreshClientAllocMetrics(t *testing.T) { require.Fail("timed-out waiting for job to complete") }) + nodeID := s.client.NodeID() + // wait for metrics to converge var pending, running, terminal float32 = -1.0, -1.0, -1.0 testutil.WaitForResultRetries(100, func() (bool, error) { @@ -106,6 +108,13 @@ func TestHTTP_FreshClientAllocMetrics(t *testing.T) { metrics := obj.(metrics.MetricsSummary) for _, g := range metrics.Gauges { + + // ignore client metrics belonging to other test nodes + // from other tests that contaminate go-metrics reporting + if g.DisplayLabels["node_id"] != nodeID { + continue + } + if strings.HasSuffix(g.Name, "client.allocations.pending") { pending = g.Value } @@ -121,7 +130,7 @@ func TestHTTP_FreshClientAllocMetrics(t *testing.T) { terminal == float32(numTasks), nil }, func(err error) { require.Fail("timed out waiting for metrics to converge", - "pending: %v, running: %v, terminal: %v", pending, running, terminal) + "expected: (pending: 0, running: 0, terminal: %v), got: (pending: %v, running: %v, terminal: %v)", numTasks, pending, running, terminal) }) }) } diff --git a/command/agent/monitor/monitor.go b/command/agent/monitor/monitor.go new file mode 100644 index 00000000000..d788110c196 --- /dev/null +++ b/command/agent/monitor/monitor.go @@ -0,0 +1,172 @@ +package monitor + +import ( + "fmt" + "sync" + "time" + + log "github.com/hashicorp/go-hclog" +) + +// Monitor provides a mechanism to stream logs using go-hclog +// InterceptLogger and SinkAdapter. It allows streaming of logs +// at a different log level than what is set on the logger. +type Monitor interface { + // Start returns a channel of log messages which are sent + // ever time a log message occurs + Start() <-chan []byte + + // Stop de-registers the sink from the InterceptLogger + // and closes the log channels + Stop() +} + +// monitor implements the Monitor interface +type monitor struct { + // protects droppedCount and logCh + sync.Mutex + + sink log.SinkAdapter + + // logger is the logger we will be monitoring + logger log.InterceptLogger + + // logCh is a buffered chan where we send logs when streaming + logCh chan []byte + + // doneCh coordinates the shutdown of logCh + doneCh chan struct{} + + // droppedCount is the current count of messages + // that were dropped from the logCh buffer. + // only access under lock + droppedCount int + bufSize int + // droppedDuration is the amount of time we should + // wait to check for dropped messages. Defaults + // to 3 seconds + droppedDuration time.Duration +} + +// New creates a new Monitor. Start must be called in order to actually start +// streaming logs +func New(buf int, logger log.InterceptLogger, opts *log.LoggerOptions) Monitor { + return new(buf, logger, opts) +} + +func new(buf int, logger log.InterceptLogger, opts *log.LoggerOptions) *monitor { + sw := &monitor{ + logger: logger, + logCh: make(chan []byte, buf), + doneCh: make(chan struct{}, 1), + bufSize: buf, + droppedDuration: 3 * time.Second, + } + + opts.Output = sw + sink := log.NewSinkAdapter(opts) + sw.sink = sink + + return sw +} + +// Stop deregisters the sink and stops the monitoring process +func (d *monitor) Stop() { + d.logger.DeregisterSink(d.sink) + close(d.doneCh) +} + +// Start registers a sink on the monitor's logger and starts sending +// received log messages over the returned channel. +func (d *monitor) Start() <-chan []byte { + // register our sink with the logger + d.logger.RegisterSink(d.sink) + + streamCh := make(chan []byte, d.bufSize) + + // run a go routine that listens for streamed + // log messages and sends them to streamCh + go func() { + defer close(streamCh) + + for { + select { + case log := <-d.logCh: + select { + case <-d.doneCh: + return + case streamCh <- log: + } + case <-d.doneCh: + return + } + } + }() + + // run a go routine that periodically checks for + // dropped messages and makes room on the logCh + // to add a dropped message count warning + go func() { + // loop and check for dropped messages + for { + select { + case <-d.doneCh: + return + case <-time.After(d.droppedDuration): + d.Lock() + + // Check if there have been any dropped messages. + if d.droppedCount > 0 { + dropped := fmt.Sprintf("[WARN] Monitor dropped %d logs during monitor request\n", d.droppedCount) + select { + case <-d.doneCh: + d.Unlock() + return + // Try sending dropped message count to logCh in case + // there is room in the buffer now. + case d.logCh <- []byte(dropped): + default: + // Drop a log message to make room for "Monitor dropped.." message + select { + case <-d.logCh: + d.droppedCount++ + dropped = fmt.Sprintf("[WARN] Monitor dropped %d logs during monitor request\n", d.droppedCount) + default: + } + d.logCh <- []byte(dropped) + } + d.droppedCount = 0 + } + // unlock after handling dropped message + d.Unlock() + } + } + }() + + return streamCh +} + +// Write attempts to send latest log to logCh +// it drops the log if channel is unavailable to receive +func (d *monitor) Write(p []byte) (n int, err error) { + d.Lock() + defer d.Unlock() + + // ensure logCh is still open + select { + case <-d.doneCh: + return + default: + } + + bytes := make([]byte, len(p)) + copy(bytes, p) + + select { + case d.logCh <- bytes: + default: + d.droppedCount++ + } + + return len(p), nil +} diff --git a/command/agent/monitor/monitor_test.go b/command/agent/monitor/monitor_test.go new file mode 100644 index 00000000000..697b5bdc58c --- /dev/null +++ b/command/agent/monitor/monitor_test.go @@ -0,0 +1,88 @@ +package monitor + +import ( + "fmt" + "strings" + "testing" + "time" + + log "github.com/hashicorp/go-hclog" + "github.com/stretchr/testify/require" +) + +func TestMonitor_Start(t *testing.T) { + t.Parallel() + + logger := log.NewInterceptLogger(&log.LoggerOptions{ + Level: log.Error, + }) + + m := New(512, logger, &log.LoggerOptions{ + Level: log.Debug, + }) + + logCh := m.Start() + defer m.Stop() + + go func() { + logger.Debug("test log") + time.Sleep(10 * time.Millisecond) + }() + + for { + select { + case log := <-logCh: + require.Contains(t, string(log), "[DEBUG] test log") + return + case <-time.After(3 * time.Second): + t.Fatal("Expected to receive from log channel") + } + } +} + +// Ensure number of dropped messages are logged +func TestMonitor_DroppedMessages(t *testing.T) { + t.Parallel() + + logger := log.NewInterceptLogger(&log.LoggerOptions{ + Level: log.Warn, + }) + + m := new(5, logger, &log.LoggerOptions{ + Level: log.Debug, + }) + m.droppedDuration = 5 * time.Millisecond + + doneCh := make(chan struct{}) + defer close(doneCh) + + logCh := m.Start() + + for i := 0; i <= 100; i++ { + logger.Debug(fmt.Sprintf("test message %d", i)) + } + + received := "" + passed := make(chan struct{}) + go func() { + for { + select { + case recv := <-logCh: + received += string(recv) + if strings.Contains(received, "[WARN] Monitor dropped") { + close(passed) + } + } + } + }() + +TEST: + for { + select { + case <-passed: + break TEST + case <-time.After(2 * time.Second): + require.Fail(t, "expected to see warn dropped messages") + } + } +} diff --git a/command/agent/pprof/pprof.go b/command/agent/pprof/pprof.go new file mode 100644 index 00000000000..868e85e8b00 --- /dev/null +++ b/command/agent/pprof/pprof.go @@ -0,0 +1,137 @@ +// Package profile is meant to be a near identical implemenation of +// https://golang.org/src/net/http/pprof/pprof.go +// It's purpose is to provide a way to accommodate the RPC endpoint style +// we use instead of traditional http handlers. + +package pprof + +import ( + "bytes" + "context" + "fmt" + "os" + "runtime" + "runtime/pprof" + "runtime/trace" + "strings" + "time" +) + +type ReqType string + +const ( + CmdReq ReqType = "cmdline" + CPUReq ReqType = "cpu" + TraceReq ReqType = "trace" + LookupReq ReqType = "lookup" + + ErrProfileNotFoundPrefix = "Pprof profile not found profile:" +) + +// NewErrProfileNotFound returns a new error caused by a pprof.Lookup +// profile not being found +func NewErrProfileNotFound(profile string) error { + return fmt.Errorf("%s %s", ErrProfileNotFoundPrefix, profile) +} + +// IsErrProfileNotFound returns whether the error is due to a pprof profile +// being invalid +func IsErrProfileNotFound(err error) bool { + return err != nil && strings.Contains(err.Error(), ErrProfileNotFoundPrefix) +} + +// Cmdline responds with the running program's +// command line, with arguments separated by NUL bytes. +func Cmdline() ([]byte, map[string]string, error) { + var buf bytes.Buffer + fmt.Fprintf(&buf, strings.Join(os.Args, "\x00")) + + return buf.Bytes(), + map[string]string{ + "X-Content-Type-Options": "nosniff", + "Content-Type": "text/plain; charset=utf-8", + }, nil +} + +// Profile generates a pprof.Profile report for the given profile name +// see runtime/pprof/pprof.go for available profiles. +func Profile(profile string, debug, gc int) ([]byte, map[string]string, error) { + p := pprof.Lookup(profile) + if p == nil { + return nil, nil, NewErrProfileNotFound(profile) + } + + if profile == "heap" && gc > 0 { + runtime.GC() + } + + var buf bytes.Buffer + if err := p.WriteTo(&buf, debug); err != nil { + return nil, nil, err + } + + headers := map[string]string{ + "X-Content-Type-Options": "nosniff", + } + if debug != 0 { + headers["Content-Type"] = "text/plain; charset=utf-8" + } else { + headers["Content-Type"] = "application/octet-stream" + headers["Content-Disposition"] = fmt.Sprintf(`attachment; filename="%s"`, profile) + } + return buf.Bytes(), headers, nil +} + +// CPUProfile generates a CPU Profile for a given duration +func CPUProfile(ctx context.Context, sec int) ([]byte, map[string]string, error) { + if sec <= 0 { + sec = 1 + } + + var buf bytes.Buffer + if err := pprof.StartCPUProfile(&buf); err != nil { + return nil, nil, err + } + + sleep(ctx, time.Duration(sec)*time.Second) + + pprof.StopCPUProfile() + + return buf.Bytes(), + map[string]string{ + "X-Content-Type-Options": "nosniff", + "Content-Type": "application/octet-stream", + "Content-Disposition": `attachment; filename="profile"`, + }, nil +} + +// Trace runs a trace profile for a given duration +func Trace(ctx context.Context, sec int) ([]byte, map[string]string, error) { + if sec <= 0 { + sec = 1 + } + + var buf bytes.Buffer + if err := trace.Start(&buf); err != nil { + return nil, nil, err + } + + sleep(ctx, time.Duration(sec)*time.Second) + + trace.Stop() + + return buf.Bytes(), + map[string]string{ + "X-Content-Type-Options": "nosniff", + "Content-Type": "application/octet-stream", + "Content-Disposition": `attachment; filename="trace"`, + }, nil +} + +func sleep(ctx context.Context, d time.Duration) { + // Sleep until duration is met or ctx is cancelled + select { + case <-time.After(d): + case <-ctx.Done(): + } +} diff --git a/command/agent/pprof/pprof_test.go b/command/agent/pprof/pprof_test.go new file mode 100644 index 00000000000..cf68fc7a7f4 --- /dev/null +++ b/command/agent/pprof/pprof_test.go @@ -0,0 +1,135 @@ +package pprof + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestProfile(t *testing.T) { + cases := []struct { + desc string + profile string + debug int + gc int + expectedHeaders map[string]string + expectedErr error + }{ + { + desc: "profile that exists", + profile: "goroutine", + expectedHeaders: map[string]string{ + "X-Content-Type-Options": "nosniff", + "Content-Type": "application/octet-stream", + "Content-Disposition": `attachment; filename="goroutine"`, + }, + }, + { + desc: "profile that does not exist", + profile: "nonexistent", + expectedErr: NewErrProfileNotFound("nonexistent"), + expectedHeaders: nil, + }, + { + desc: "profile with debug enabled", + profile: "allocs", + debug: 1, + expectedHeaders: map[string]string{ + "X-Content-Type-Options": "nosniff", + "Content-Type": "text/plain; charset=utf-8", + }, + }, + } + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + resp, headers, err := Profile(tc.profile, tc.debug, tc.gc) + require.Equal(t, tc.expectedHeaders, headers) + + if tc.expectedErr != nil { + require.Nil(t, resp) + require.Equal(t, err, tc.expectedErr) + } else { + require.NotNil(t, resp) + } + }) + } +} + +func TestCPUProfile(t *testing.T) { + cases := []struct { + desc string + expectedHeaders map[string]string + }{ + { + desc: "successful cpu profile", + expectedHeaders: map[string]string{ + "X-Content-Type-Options": "nosniff", + "Content-Type": "application/octet-stream", + "Content-Disposition": `attachment; filename="profile"`, + }, + }, + } + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + resp, headers, err := CPUProfile(context.Background(), 0) + require.NoError(t, err) + require.Equal(t, tc.expectedHeaders, headers) + + require.NotNil(t, resp) + }) + } +} + +func TestTrace(t *testing.T) { + cases := []struct { + desc string + expectedHeaders map[string]string + }{ + { + desc: "successful trace profile", + expectedHeaders: map[string]string{ + "X-Content-Type-Options": "nosniff", + "Content-Type": "application/octet-stream", + "Content-Disposition": `attachment; filename="trace"`, + }, + }, + } + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + resp, headers, err := Trace(context.Background(), 0) + require.NoError(t, err) + require.Equal(t, tc.expectedHeaders, headers) + + require.NotNil(t, resp) + }) + } +} + +func TestCmdline(t *testing.T) { + cases := []struct { + desc string + expectedHeaders map[string]string + }{ + { + desc: "successful cmdline request", + expectedHeaders: map[string]string{ + "X-Content-Type-Options": "nosniff", + "Content-Type": "text/plain; charset=utf-8", + }, + }, + } + + for _, tc := range cases { + t.Run(tc.desc, func(t *testing.T) { + resp, headers, err := Cmdline() + require.NoError(t, err) + require.Equal(t, tc.expectedHeaders, headers) + + require.NotNil(t, resp) + }) + } +} diff --git a/command/agent/testagent.go b/command/agent/testagent.go index 29f5ab17514..71d40e9e22a 100644 --- a/command/agent/testagent.go +++ b/command/agent/testagent.go @@ -9,17 +9,16 @@ import ( "net/http/httptest" "os" "path/filepath" - "runtime" "strings" "time" testing "github.com/mitchellh/go-testing-interface" metrics "github.com/armon/go-metrics" - "github.com/hashicorp/consul/sdk/freeport" "github.com/hashicorp/go-hclog" "github.com/hashicorp/nomad/api" "github.com/hashicorp/nomad/client/fingerprint" + "github.com/hashicorp/nomad/helper/freeport" "github.com/hashicorp/nomad/helper/testlog" "github.com/hashicorp/nomad/nomad" "github.com/hashicorp/nomad/nomad/mock" @@ -78,6 +77,10 @@ type TestAgent struct { // RootToken is auto-bootstrapped if ACLs are enabled RootToken *structs.ACLToken + + // ports that are reserved through freeport that must be returned at + // the end of a test, done when Shutdown() is called. + ports []int } // NewTestAgent returns a started agent with the given name and @@ -138,28 +141,27 @@ RETRY: } // we need the err var in the next exit condition - if agent, err := a.start(); err == nil { + agent, err := a.start() + if err == nil { a.Agent = agent break } else if i == 0 { - a.T.Logf("%s: Error starting agent: %v", a.Name, err) - runtime.Goexit() - } else { - if agent != nil { - agent.Shutdown() - } - wait := time.Duration(rand.Int31n(2000)) * time.Millisecond - a.T.Logf("%s: retrying in %v", a.Name, wait) - time.Sleep(wait) + a.T.Fatalf("%s: Error starting agent: %v", a.Name, err) + } + + if agent != nil { + agent.Shutdown() } + wait := time.Duration(rand.Int31n(2000)) * time.Millisecond + a.T.Logf("%s: retrying in %v", a.Name, wait) + time.Sleep(wait) // Clean out the data dir if we are responsible for it before we // try again, since the old ports may have gotten written to // the data dir, such as in the Raft configuration. if a.DataDir != "" { if err := os.RemoveAll(a.DataDir); err != nil { - a.T.Logf("%s: Error resetting data dir: %v", a.Name, err) - runtime.Goexit() + a.T.Fatalf("%s: Error resetting data dir: %v", a.Name, err) } } } @@ -216,7 +218,7 @@ func (a *TestAgent) start() (*Agent, error) { return nil, fmt.Errorf("unable to set up in memory metrics needed for agent initialization") } - logger := hclog.New(&hclog.LoggerOptions{ + logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ Name: "agent", Level: hclog.LevelFromString(a.Config.LogLevel), Output: a.LogOutput, @@ -241,6 +243,8 @@ func (a *TestAgent) start() (*Agent, error) { // Shutdown stops the agent and removes the data directory if it is // managed by the test agent. func (a *TestAgent) Shutdown() error { + defer freeport.Return(a.ports) + defer func() { if a.DataDir != "" { os.RemoveAll(a.DataDir) @@ -267,7 +271,11 @@ func (a *TestAgent) HTTPAddr() string { if a.Server == nil { return "" } - return "http://" + a.Server.Addr + proto := "http://" + if a.Config.TLSConfig != nil && a.Config.TLSConfig.EnableHTTP { + proto = "https://" + } + return proto + a.Server.Addr } func (a *TestAgent) Client() *api.Client { @@ -289,7 +297,9 @@ func (a *TestAgent) Client() *api.Client { // Instead of relying on one set of ports to be sufficient we retry // starting the agent with different ports on port conflict. func (a *TestAgent) pickRandomPorts(c *Config) { - ports := freeport.GetT(a.T, 3) + ports := freeport.MustTake(3) + a.ports = append(a.ports, ports...) + c.Ports.HTTP = ports[0] c.Ports.RPC = ports[1] c.Ports.Serf = ports[2] diff --git a/command/agent/testdata/basic.hcl b/command/agent/testdata/basic.hcl index 1a85a224b7d..61c4354dcfd 100644 --- a/command/agent/testdata/basic.hcl +++ b/command/agent/testdata/basic.hcl @@ -13,6 +13,8 @@ log_level = "ERR" log_json = true +log_file = "/var/log/nomad.log" + bind_addr = "192.168.0.1" enable_debug = true @@ -174,6 +176,7 @@ consul { client_service_name = "nomad-client" client_http_check_name = "nomad-client-http-health-check" address = "127.0.0.1:9500" + allow_unauthenticated = true token = "token1" auth = "username:pass" ssl = true diff --git a/command/agent/testdata/basic.json b/command/agent/testdata/basic.json index 875c764619e..563c07bfbaa 100644 --- a/command/agent/testdata/basic.json +++ b/command/agent/testdata/basic.json @@ -113,6 +113,7 @@ "consul": [ { "address": "127.0.0.1:9500", + "allow_unauthenticated": true, "auth": "username:pass", "auto_advertise": true, "ca_file": "/path/to/ca/file", @@ -145,6 +146,7 @@ ], "leave_on_interrupt": true, "leave_on_terminate": true, + "log_file": "/var/log/nomad.log", "log_json": true, "log_level": "ERR", "name": "my-web", diff --git a/command/agent/testingutils_test.go b/command/agent/testingutils_test.go index 3d821cd597a..8a78f1e3675 100644 --- a/command/agent/testingutils_test.go +++ b/command/agent/testingutils_test.go @@ -99,17 +99,6 @@ func MockJob() *api.Job { return job } -func MockPeriodicJob() *api.Job { - j := MockJob() - j.Type = helper.StringToPtr("batch") - j.Periodic = &api.PeriodicConfig{ - Enabled: helper.BoolToPtr(true), - SpecType: helper.StringToPtr("cron"), - Spec: helper.StringToPtr("*/30 * * * *"), - } - return j -} - func MockRegionalJob() *api.Job { j := MockJob() j.Region = helper.StringToPtr("north-america") diff --git a/command/agent_monitor.go b/command/agent_monitor.go new file mode 100644 index 00000000000..860deb4747c --- /dev/null +++ b/command/agent_monitor.go @@ -0,0 +1,167 @@ +package command + +import ( + "fmt" + "io" + "os" + "os/signal" + "strconv" + "strings" + "syscall" + "time" + + "github.com/hashicorp/nomad/api" + "github.com/mitchellh/cli" +) + +type MonitorCommand struct { + Meta +} + +func (c *MonitorCommand) Help() string { + helpText := ` +Usage: nomad monitor [options] + + Stream log messages of a nomad agent. The monitor command lets you + listen for log levels that may be filtered out of the Nomad agent. For + example your agent may only be logging at INFO level, but with the monitor + command you can set -log-level DEBUG + +General Options: + + ` + generalOptionsUsage() + ` + +Monitor Specific Options: + + -log-level + Sets the log level to monitor (default: INFO) + + -node-id + Sets the specific node to monitor + + -server-id + Sets the specific server to monitor + + -json + Sets log output to JSON format + ` + return strings.TrimSpace(helpText) +} + +func (c *MonitorCommand) Synopsis() string { + return "Stream logs from a Nomad agent" +} + +func (c *MonitorCommand) Name() string { return "monitor" } + +func (c *MonitorCommand) Run(args []string) int { + c.Ui = &cli.PrefixedUi{ + OutputPrefix: " ", + InfoPrefix: " ", + ErrorPrefix: "==> ", + Ui: c.Ui, + } + + var logLevel string + var nodeID string + var serverID string + var logJSON bool + + flags := c.Meta.FlagSet(c.Name(), FlagSetClient) + flags.Usage = func() { c.Ui.Output(c.Help()) } + flags.StringVar(&logLevel, "log-level", "", "") + flags.StringVar(&nodeID, "node-id", "", "") + flags.StringVar(&serverID, "server-id", "", "") + flags.BoolVar(&logJSON, "json", false, "") + + if err := flags.Parse(args); err != nil { + return 1 + } + + args = flags.Args() + if l := len(args); l != 0 { + c.Ui.Error("This command takes no arguments") + c.Ui.Error(commandErrorText(c)) + return 1 + } + + client, err := c.Meta.Client() + if err != nil { + c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err)) + c.Ui.Error(commandErrorText(c)) + return 1 + } + + // Query the node info and lookup prefix + if len(nodeID) == 1 { + c.Ui.Error(fmt.Sprintf("Node identifier must contain at least two characters.")) + return 1 + } + + if nodeID != "" { + nodeID = sanitizeUUIDPrefix(nodeID) + nodes, _, err := client.Nodes().PrefixList(nodeID) + if err != nil { + c.Ui.Error(fmt.Sprintf("Error querying node: %v", err)) + return 1 + } + + if len(nodes) == 0 { + c.Ui.Error(fmt.Sprintf("No node(s) with prefix or id %q found", nodeID)) + return 1 + } + + if len(nodes) > 1 { + out := formatNodeStubList(nodes, false) + c.Ui.Output(fmt.Sprintf("Prefix matched multiple nodes\n\n%s", out)) + return 1 + } + nodeID = nodes[0].ID + } + + params := map[string]string{ + "log_level": logLevel, + "node_id": nodeID, + "server_id": serverID, + "log_json": strconv.FormatBool(logJSON), + } + + query := &api.QueryOptions{ + Params: params, + } + + eventDoneCh := make(chan struct{}) + frames, errCh := client.Agent().Monitor(eventDoneCh, query) + select { + case err := <-errCh: + c.Ui.Error(fmt.Sprintf("Error starting monitor: %s", err)) + c.Ui.Error(commandErrorText(c)) + return 1 + default: + } + + // Create a reader + var r io.ReadCloser + frameReader := api.NewFrameReader(frames, errCh, eventDoneCh) + frameReader.SetUnblockTime(500 * time.Millisecond) + r = frameReader + + defer r.Close() + + signalCh := make(chan os.Signal, 1) + signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM) + + go func() { + <-signalCh + // End the streaming + r.Close() + }() + + _, err = io.Copy(os.Stdout, r) + if err != nil { + c.Ui.Error(fmt.Sprintf("error monitoring logs: %s", err)) + return 1 + } + + return 0 +} diff --git a/command/agent_monitor_test.go b/command/agent_monitor_test.go new file mode 100644 index 00000000000..3a31fc6c652 --- /dev/null +++ b/command/agent_monitor_test.go @@ -0,0 +1,45 @@ +package command + +import ( + "strings" + "testing" + + "github.com/mitchellh/cli" +) + +func TestMonitorCommand_Implements(t *testing.T) { + t.Parallel() + var _ cli.Command = &MonitorCommand{} +} + +func TestMonitorCommand_Fails(t *testing.T) { + t.Parallel() + srv, _, url := testServer(t, false, nil) + defer srv.Shutdown() + + ui := new(cli.MockUi) + cmd := &MonitorCommand{Meta: Meta{Ui: ui}} + + // Fails on misuse + if code := cmd.Run([]string{"some", "bad", "args"}); code != 1 { + t.Fatalf("exepected exit code 1, got: %d", code) + } + if out := ui.ErrorWriter.String(); !strings.Contains(out, commandErrorText(cmd)) { + t.Fatalf("expected help output, got: %s", out) + } + + ui.ErrorWriter.Reset() + + if code := cmd.Run([]string{"-address=nope"}); code != 1 { + t.Fatalf("exepected exit code 1, got: %d", code) + } + + // Fails on nonexistent node + if code := cmd.Run([]string{"-address=" + url, "-node-id=12345678-abcd-efab-cdef-123456789abc"}); code != 1 { + t.Fatalf("expected exit 1, got: %d", code) + } + if out := ui.ErrorWriter.String(); !strings.Contains(out, "No node(s) with prefix") { + t.Fatalf("expected not found error, got: %s", out) + } + ui.ErrorWriter.Reset() +} diff --git a/command/alloc_exec.go b/command/alloc_exec.go index 6dd845edbc7..c19bca29a91 100644 --- a/command/alloc_exec.go +++ b/command/alloc_exec.go @@ -105,8 +105,8 @@ func (l *AllocExecCommand) Run(args []string) int { flags.BoolVar(&stdinOpt, "i", true, "") - stdinTty := isStdinTty() - flags.BoolVar(&ttyOpt, "t", stdinTty, "") + inferredTty := isTty() + flags.BoolVar(&ttyOpt, "t", inferredTty, "") if err := flags.Parse(args); err != nil { return 1 @@ -194,7 +194,6 @@ func (l *AllocExecCommand) Run(args []string) int { if err != nil { l.Ui.Error(err.Error()) - l.Ui.Error("\nPlease specify the task.") return 1 } } @@ -292,9 +291,11 @@ func (l *AllocExecCommand) execImpl(client *api.Client, alloc *api.Allocation, t alloc, task, tty, command, stdin, stdout, stderr, sizeCh, nil) } -func isStdinTty() bool { - _, isTerminal := term.GetFdInfo(os.Stdin) - return isTerminal +// isTty returns true if both stdin and stdout are a TTY +func isTty() bool { + _, isStdinTerminal := term.GetFdInfo(os.Stdin) + _, isStdoutTerminal := term.GetFdInfo(os.Stdout) + return isStdinTerminal && isStdoutTerminal } // setRawTerminal sets the stream terminal in raw mode, so process captures diff --git a/command/alloc_logs.go b/command/alloc_logs.go index 2717a01abbd..5865f955bc5 100644 --- a/command/alloc_logs.go +++ b/command/alloc_logs.go @@ -190,7 +190,6 @@ func (l *AllocLogsCommand) Run(args []string) int { if err != nil { l.Ui.Error(err.Error()) - l.Ui.Error("\nPlease specify the task.") return 1 } } diff --git a/command/alloc_status.go b/command/alloc_status.go index 350894ea7e8..3ea543d9052 100644 --- a/command/alloc_status.go +++ b/command/alloc_status.go @@ -191,7 +191,7 @@ func (c *AllocStatusCommand) Run(args []string) int { } c.Ui.Output(output) - if len(alloc.AllocatedResources.Shared.Networks) > 0 && alloc.AllocatedResources.Shared.Networks[0].HasPorts() { + if alloc.AllocatedResources != nil && len(alloc.AllocatedResources.Shared.Networks) > 0 && alloc.AllocatedResources.Shared.Networks[0].HasPorts() { c.Ui.Output("") c.Ui.Output(formatAllocNetworkInfo(alloc)) } @@ -234,13 +234,13 @@ func formatAllocBasicInfo(alloc *api.Allocation, client *api.Client, uuidLength } basic := []string{ - fmt.Sprintf("ID|%s", limit(alloc.ID, uuidLength)), + fmt.Sprintf("ID|%s", alloc.ID), fmt.Sprintf("Eval ID|%s", limit(alloc.EvalID, uuidLength)), fmt.Sprintf("Name|%s", alloc.Name), fmt.Sprintf("Node ID|%s", limit(alloc.NodeID, uuidLength)), fmt.Sprintf("Node Name|%s", alloc.NodeName), fmt.Sprintf("Job ID|%s", alloc.JobID), - fmt.Sprintf("Job Version|%d", alloc.Job.Version), + fmt.Sprintf("Job Version|%d", *alloc.Job.Version), fmt.Sprintf("Client Status|%s", alloc.ClientStatus), fmt.Sprintf("Client Description|%s", alloc.ClientDescription), fmt.Sprintf("Desired Status|%s", alloc.DesiredStatus), diff --git a/command/alloc_status_test.go b/command/alloc_status_test.go index b3c7fef2070..0c0bf38e9c9 100644 --- a/command/alloc_status_test.go +++ b/command/alloc_status_test.go @@ -286,6 +286,9 @@ func TestAllocStatusCommand_ScoreMetrics(t *testing.T) { require.Contains(out, "Placement Metrics") require.Contains(out, mockNode1.ID) require.Contains(out, mockNode2.ID) + + // assert we sort headers alphabetically + require.Contains(out, "binpack node-affinity") require.Contains(out, "final score") } diff --git a/command/commands.go b/command/commands.go index 0eeade107cc..ff2100a9deb 100644 --- a/command/commands.go +++ b/command/commands.go @@ -366,6 +366,11 @@ func Commands(metaPtr *Meta, agentUi cli.Ui) map[string]cli.CommandFactory { Meta: meta, }, nil }, + "monitor": func() (cli.Command, error) { + return &MonitorCommand{ + Meta: meta, + }, nil + }, "namespace": func() (cli.Command, error) { return &NamespaceCommand{ Meta: meta, @@ -605,6 +610,26 @@ func Commands(metaPtr *Meta, agentUi cli.Ui) map[string]cli.CommandFactory { Meta: meta, }, nil }, + "system": func() (cli.Command, error) { + return &SystemCommand{ + Meta: meta, + }, nil + }, + "system gc": func() (cli.Command, error) { + return &SystemGCCommand{ + Meta: meta, + }, nil + }, + "system reconcile": func() (cli.Command, error) { + return &SystemReconcileCommand{ + Meta: meta, + }, nil + }, + "system reconcile summaries": func() (cli.Command, error) { + return &SystemReconcileSummariesCommand{ + Meta: meta, + }, nil + }, "ui": func() (cli.Command, error) { return &UiCommand{ Meta: meta, diff --git a/command/helpers.go b/command/helpers.go index 364c7392930..5c068398e69 100644 --- a/command/helpers.go +++ b/command/helpers.go @@ -1,6 +1,7 @@ package command import ( + "bufio" "bytes" "fmt" "io" @@ -14,6 +15,7 @@ import ( "github.com/hashicorp/nomad/api" "github.com/hashicorp/nomad/jobspec" "github.com/kr/text" + "github.com/mitchellh/cli" "github.com/posener/complete" "github.com/ryanuber/columnize" @@ -421,10 +423,10 @@ func (j *JobGetter) ApiJob(jpath string) (*api.Job, error) { return nil, fmt.Errorf("Error getting jobfile from %q: %v", jpath, err) } else { file, err := os.Open(job.Name()) - defer file.Close() if err != nil { return nil, fmt.Errorf("Error opening file %q: %v", jpath, err) } + defer file.Close() jobfile = file } } @@ -464,3 +466,44 @@ func sanitizeUUIDPrefix(prefix string) string { func commandErrorText(cmd NamedCommand) string { return fmt.Sprintf("For additional help try 'nomad %s -help'", cmd.Name()) } + +// uiErrorWriter is a io.Writer that wraps underlying ui.ErrorWriter(). +// ui.ErrorWriter expects full lines as inputs and it emits its own line breaks. +// +// uiErrorWriter scans input for individual lines to pass to ui.ErrorWriter. If data +// doesn't contain a new line, it buffers result until next new line or writer is closed. +type uiErrorWriter struct { + ui cli.Ui + buf bytes.Buffer +} + +func (w *uiErrorWriter) Write(data []byte) (int, error) { + read := 0 + for len(data) != 0 { + a, token, err := bufio.ScanLines(data, false) + if err != nil { + return read, err + } + + if a == 0 { + r, err := w.buf.Write(data) + return read + r, err + } + + w.ui.Error(w.buf.String() + string(token)) + data = data[a:] + w.buf.Reset() + read += a + } + + return read, nil +} + +func (w *uiErrorWriter) Close() error { + // emit what's remaining + if w.buf.Len() != 0 { + w.ui.Error(w.buf.String()) + w.buf.Reset() + } + return nil +} diff --git a/command/helpers_test.go b/command/helpers_test.go index 64975aad20c..139acd30755 100644 --- a/command/helpers_test.go +++ b/command/helpers_test.go @@ -1,6 +1,7 @@ package command import ( + "bytes" "fmt" "io" "io/ioutil" @@ -16,6 +17,7 @@ import ( "github.com/hashicorp/nomad/helper/flatmap" "github.com/kr/pretty" "github.com/mitchellh/cli" + "github.com/stretchr/testify/require" ) func TestHelpers_FormatKV(t *testing.T) { @@ -174,17 +176,17 @@ func TestHelpers_LineLimitReader_TimeLimit(t *testing.T) { expected := []byte("hello world") - resultCh := make(chan struct{}) + errCh := make(chan error) + resultCh := make(chan []byte) go func() { + defer close(resultCh) + defer close(errCh) outBytes, err := ioutil.ReadAll(limit) if err != nil { - t.Fatalf("ReadAll failed: %v", err) - } - - if reflect.DeepEqual(outBytes, expected) { - close(resultCh) + errCh <- fmt.Errorf("ReadAll failed: %v", err) return } + resultCh <- outBytes }() // Send the data @@ -192,7 +194,14 @@ func TestHelpers_LineLimitReader_TimeLimit(t *testing.T) { in.Close() select { - case <-resultCh: + case err := <-errCh: + if err != nil { + t.Fatalf("ReadAll: %v", err) + } + case outBytes := <-resultCh: + if !reflect.DeepEqual(outBytes, expected) { + t.Fatalf("got:%s, expected,%s", string(outBytes), string(expected)) + } case <-time.After(1 * time.Second): t.Fatalf("did not exit by time limit") } @@ -335,3 +344,51 @@ func TestPrettyTimeDiff(t *testing.T) { } } + +// TestUiErrorWriter asserts that writer buffers and +func TestUiErrorWriter(t *testing.T) { + t.Parallel() + + var outBuf, errBuf bytes.Buffer + ui := &cli.BasicUi{ + Writer: &outBuf, + ErrorWriter: &errBuf, + } + + w := &uiErrorWriter{ui: ui} + + inputs := []string{ + "some line\n", + "multiple\nlines\r\nhere", + " with followup\nand", + " more lines ", + " without new line ", + "until here\nand then", + "some more", + } + + partialAcc := "" + for _, in := range inputs { + n, err := w.Write([]byte(in)) + require.NoError(t, err) + require.Equal(t, len(in), n) + + // assert that writer emits partial result until last new line + partialAcc += strings.ReplaceAll(in, "\r\n", "\n") + lastNL := strings.LastIndex(partialAcc, "\n") + require.Equal(t, partialAcc[:lastNL+1], errBuf.String()) + } + + require.Empty(t, outBuf.String()) + + // note that the \r\n got replaced by \n + expectedErr := "some line\nmultiple\nlines\nhere with followup\nand more lines without new line until here\n" + require.Equal(t, expectedErr, errBuf.String()) + + // close emits the final line + err := w.Close() + require.NoError(t, err) + + expectedErr += "and thensome more\n" + require.Equal(t, expectedErr, errBuf.String()) +} diff --git a/command/job_deployments.go b/command/job_deployments.go index 291bab23aa3..66ca76ca802 100644 --- a/command/job_deployments.go +++ b/command/job_deployments.go @@ -36,7 +36,7 @@ Deployments Options: -verbose Display full information. - -all-allocs + -all Display all deployments matching the job ID, including those from an older instance of the job. ` diff --git a/command/job_init.go b/command/job_init.go index e492fa8048e..94522ae7e07 100644 --- a/command/job_init.go +++ b/command/job_init.go @@ -23,11 +23,11 @@ type JobInitCommand struct { func (c *JobInitCommand) Help() string { helpText := ` -Usage: nomad job init -Alias: nomad init +Usage: nomad job init +Alias: nomad init - Creates an example job file that can be used as a starting - point to customize further. + Creates an example job file that can be used as a starting point to customize + further. If no filename is given, the default of "example.nomad" will be used. Init Options: @@ -71,20 +71,27 @@ func (c *JobInitCommand) Run(args []string) int { } // Check for misuse - if len(flags.Args()) != 0 { - c.Ui.Error("This command takes no arguments") + // Check that we either got no filename or exactly one. + args = flags.Args() + if len(args) > 1 { + c.Ui.Error("This command takes either no arguments or one: ") c.Ui.Error(commandErrorText(c)) return 1 } + filename := DefaultInitName + if len(args) == 1 { + filename = args[0] + } + // Check if the file already exists - _, err := os.Stat(DefaultInitName) + _, err := os.Stat(filename) if err != nil && !os.IsNotExist(err) { - c.Ui.Error(fmt.Sprintf("Failed to stat '%s': %v", DefaultInitName, err)) + c.Ui.Error(fmt.Sprintf("Failed to stat '%s': %v", filename, err)) return 1 } if !os.IsNotExist(err) { - c.Ui.Error(fmt.Sprintf("Job '%s' already exists", DefaultInitName)) + c.Ui.Error(fmt.Sprintf("Job '%s' already exists", filename)) return 1 } @@ -107,13 +114,13 @@ func (c *JobInitCommand) Run(args []string) int { } // Write out the example - err = ioutil.WriteFile(DefaultInitName, jobSpec, 0660) + err = ioutil.WriteFile(filename, jobSpec, 0660) if err != nil { - c.Ui.Error(fmt.Sprintf("Failed to write '%s': %v", DefaultInitName, err)) + c.Ui.Error(fmt.Sprintf("Failed to write '%s': %v", filename, err)) return 1 } // Success - c.Ui.Output(fmt.Sprintf("Example job file written to %s", DefaultInitName)) + c.Ui.Output(fmt.Sprintf("Example job file written to %s", filename)) return 0 } diff --git a/command/job_init_test.go b/command/job_init_test.go index b015feb4526..023d4e2e2c5 100644 --- a/command/job_init_test.go +++ b/command/job_init_test.go @@ -88,3 +88,58 @@ func TestInitCommand_defaultJob(t *testing.T) { t.Error("default job contains tab character - please convert to spaces") } } + +func TestInitCommand_customFilename(t *testing.T) { + t.Parallel() + ui := new(cli.MockUi) + cmd := &JobInitCommand{Meta: Meta{Ui: ui}} + filename := "custom.nomad" + + // Ensure we change the cwd back + origDir, err := os.Getwd() + if err != nil { + t.Fatalf("err: %s", err) + } + defer os.Chdir(origDir) + + // Create a temp dir and change into it + dir, err := ioutil.TempDir("", "nomad") + if err != nil { + t.Fatalf("err: %s", err) + } + defer os.RemoveAll(dir) + if err := os.Chdir(dir); err != nil { + t.Fatalf("err: %s", err) + } + + // Works if the file doesn't exist + if code := cmd.Run([]string{filename}); code != 0 { + t.Fatalf("expect exit code 0, got: %d", code) + } + content, err := ioutil.ReadFile(filename) + if err != nil { + t.Fatalf("err: %s", err) + } + defaultJob, _ := Asset("command/assets/example.nomad") + if string(content) != string(defaultJob) { + t.Fatalf("unexpected file content\n\n%s", string(content)) + } + + // Works with -short flag + os.Remove(filename) + if code := cmd.Run([]string{"-short", filename}); code != 0 { + require.Zero(t, code, "unexpected exit code: %d", code) + } + content, err = ioutil.ReadFile(filename) + require.NoError(t, err) + shortJob, _ := Asset("command/assets/example-short.nomad") + require.Equal(t, string(content), string(shortJob)) + + // Fails if the file exists + if code := cmd.Run([]string{filename}); code != 1 { + t.Fatalf("expect exit code 1, got: %d", code) + } + if out := ui.ErrorWriter.String(); !strings.Contains(out, "exists") { + t.Fatalf("expect file exists error, got: %s", out) + } +} diff --git a/command/job_revert.go b/command/job_revert.go index 99d22f0365f..ca3b0a3295b 100644 --- a/command/job_revert.go +++ b/command/job_revert.go @@ -31,9 +31,13 @@ Revert Options: the evaluation ID will be printed to the screen, which can be used to examine the evaluation using the eval-status command. + -consul-token + The Consul token used to verify that the caller has access to the Service + Identity policies associated in the targeted version of the job. + -vault-token The Vault token used to verify that the caller has access to the Vault - policies i the targeted version of the job. + policies in the targeted version of the job. -verbose Display full information. @@ -72,12 +76,13 @@ func (c *JobRevertCommand) Name() string { return "job revert" } func (c *JobRevertCommand) Run(args []string) int { var detach, verbose bool - var vaultToken string + var consulToken, vaultToken string flags := c.Meta.FlagSet(c.Name(), FlagSetClient) flags.Usage = func() { c.Ui.Output(c.Help()) } flags.BoolVar(&detach, "detach", false, "") flags.BoolVar(&verbose, "verbose", false, "") + flags.StringVar(&consulToken, "consul-token", "", "") flags.StringVar(&vaultToken, "vault-token", "", "") if err := flags.Parse(args); err != nil { @@ -105,6 +110,12 @@ func (c *JobRevertCommand) Run(args []string) int { return 1 } + // Parse the Consul token + if consulToken == "" { + // Check the environment variable + consulToken = os.Getenv("CONSUL_HTTP_TOKEN") + } + // Parse the Vault token if vaultToken == "" { // Check the environment variable @@ -138,7 +149,7 @@ func (c *JobRevertCommand) Run(args []string) int { } // Prefix lookup matched a single job - resp, _, err := client.Jobs().Revert(jobs[0].ID, revertVersion, nil, nil, vaultToken) + resp, _, err := client.Jobs().Revert(jobs[0].ID, revertVersion, nil, nil, consulToken, vaultToken) if err != nil { c.Ui.Error(fmt.Sprintf("Error retrieving job versions: %s", err)) return 1 diff --git a/command/job_run.go b/command/job_run.go index cc6c5b92474..3f0bcebfa57 100644 --- a/command/job_run.go +++ b/command/job_run.go @@ -52,6 +52,10 @@ Alias: nomad run If the job has specified the region, the -region flag and NOMAD_REGION environment variable are overridden and the job's region is used. + The run command will set the consul_token of the job based on the following + precedence, going from highest to lowest: the -consul-token flag, the + $CONSUL_HTTP_TOKEN environment variable and finally the value in the job file. + The run command will set the vault_token of the job based on the following precedence, going from highest to lowest: the -vault-token flag, the $VAULT_TOKEN environment variable and finally the value in the job file. @@ -82,6 +86,12 @@ Run Options: -policy-override Sets the flag to force override any soft mandatory Sentinel policies. + -consul-token + If set, the passed Consul token is stored in the job before sending to the + Nomad servers. This allows passing the Consul token without storing it in + the job file. This overrides the token found in $CONSUL_HTTP_TOKEN environment + variable and that found in the job. + -vault-token If set, the passed Vault token is stored in the job before sending to the Nomad servers. This allows passing the Vault token without storing it in @@ -104,6 +114,7 @@ func (c *JobRunCommand) AutocompleteFlags() complete.Flags { "-check-index": complete.PredictNothing, "-detach": complete.PredictNothing, "-verbose": complete.PredictNothing, + "-consul-token": complete.PredictNothing, "-vault-token": complete.PredictAnything, "-output": complete.PredictNothing, "-policy-override": complete.PredictNothing, @@ -118,7 +129,7 @@ func (c *JobRunCommand) Name() string { return "job run" } func (c *JobRunCommand) Run(args []string) int { var detach, verbose, output, override bool - var checkIndexStr, vaultToken string + var checkIndexStr, consulToken, vaultToken string flags := c.Meta.FlagSet(c.Name(), FlagSetClient) flags.Usage = func() { c.Ui.Output(c.Help()) } @@ -127,6 +138,7 @@ func (c *JobRunCommand) Run(args []string) int { flags.BoolVar(&output, "output", false, "") flags.BoolVar(&override, "policy-override", false, "") flags.StringVar(&checkIndexStr, "check-index", "", "") + flags.StringVar(&consulToken, "consul-token", "", "") flags.StringVar(&vaultToken, "vault-token", "", "") if err := flags.Parse(args); err != nil { @@ -175,6 +187,16 @@ func (c *JobRunCommand) Run(args []string) int { periodic := job.IsPeriodic() paramjob := job.IsParameterized() + // Parse the Consul token + if consulToken == "" { + // Check the environment variable + consulToken = os.Getenv("CONSUL_HTTP_TOKEN") + } + + if consulToken != "" { + job.ConsulToken = helper.StringToPtr(consulToken) + } + // Parse the Vault token if vaultToken == "" { // Check the environment variable diff --git a/command/job_status.go b/command/job_status.go index 858355d11bb..7448cd0bfe0 100644 --- a/command/job_status.go +++ b/command/job_status.go @@ -173,6 +173,7 @@ func (c *JobStatusCommand) Run(args []string) int { fmt.Sprintf("Type|%s", *job.Type), fmt.Sprintf("Priority|%d", *job.Priority), fmt.Sprintf("Datacenters|%s", strings.Join(job.Datacenters, ",")), + fmt.Sprintf("Namespace|%s", *job.Namespace), fmt.Sprintf("Status|%s", getStatusString(*job.Status, job.Stop)), fmt.Sprintf("Periodic|%v", periodic), fmt.Sprintf("Parameterized|%v", parameterized), @@ -462,7 +463,7 @@ func formatAllocList(allocations []*api.Allocation, verbose bool, uuidLength int limit(alloc.EvalID, uuidLength), limit(alloc.NodeID, uuidLength), alloc.TaskGroup, - alloc.Job.Version, + *alloc.Job.Version, alloc.DesiredStatus, alloc.ClientStatus, formatUnixNanoTime(alloc.CreateTime), @@ -478,7 +479,7 @@ func formatAllocList(allocations []*api.Allocation, verbose bool, uuidLength int limit(alloc.ID, uuidLength), limit(alloc.NodeID, uuidLength), alloc.TaskGroup, - alloc.Job.Version, + *alloc.Job.Version, alloc.DesiredStatus, alloc.ClientStatus, createTimePretty, diff --git a/command/meta.go b/command/meta.go index 8dc96e933fe..363e666ceb9 100644 --- a/command/meta.go +++ b/command/meta.go @@ -1,9 +1,7 @@ package command import ( - "bufio" "flag" - "io" "os" "strings" @@ -50,11 +48,12 @@ type Meta struct { // token is used for ACLs to access privileged information token string - caCert string - caPath string - clientCert string - clientKey string - insecure bool + caCert string + caPath string + clientCert string + clientKey string + tlsServerName string + insecure bool } // FlagSet returns a FlagSet with the common flags that every @@ -76,23 +75,13 @@ func (m *Meta) FlagSet(n string, fs FlagSetFlags) *flag.FlagSet { f.StringVar(&m.clientCert, "client-cert", "", "") f.StringVar(&m.clientKey, "client-key", "", "") f.BoolVar(&m.insecure, "insecure", false, "") + f.StringVar(&m.tlsServerName, "tls-server-name", "", "") f.BoolVar(&m.insecure, "tls-skip-verify", false, "") f.StringVar(&m.token, "token", "", "") } - // Create an io.Writer that writes to our UI properly for errors. - // This is kind of a hack, but it does the job. Basically: create - // a pipe, use a scanner to break it into lines, and output each line - // to the UI. Do this forever. - errR, errW := io.Pipe() - errScanner := bufio.NewScanner(errR) - go func() { - for errScanner.Scan() { - m.Ui.Error(errScanner.Text()) - } - }() - f.SetOutput(errW) + f.SetOutput(&uiErrorWriter{ui: m.Ui}) return f } @@ -113,6 +102,7 @@ func (m *Meta) AutocompleteFlags(fs FlagSetFlags) complete.Flags { "-client-cert": complete.PredictFiles("*"), "-client-key": complete.PredictFiles("*"), "-insecure": complete.PredictNothing, + "-tls-server-name": complete.PredictNothing, "-tls-skip-verify": complete.PredictNothing, "-token": complete.PredictAnything, } @@ -136,13 +126,14 @@ func (m *Meta) Client() (*api.Client, error) { } // If we need custom TLS configuration, then set it - if m.caCert != "" || m.caPath != "" || m.clientCert != "" || m.clientKey != "" || m.insecure { + if m.caCert != "" || m.caPath != "" || m.clientCert != "" || m.clientKey != "" || m.tlsServerName != "" || m.insecure { t := &api.TLSConfig{ - CACert: m.caCert, - CAPath: m.caPath, - ClientCert: m.clientCert, - ClientKey: m.clientKey, - Insecure: m.insecure, + CACert: m.caCert, + CAPath: m.caPath, + ClientCert: m.clientCert, + ClientKey: m.clientKey, + TLSServerName: m.tlsServerName, + Insecure: m.insecure, } config.TLSConfig = t } @@ -204,6 +195,10 @@ func generalOptionsUsage() string { Path to an unencrypted PEM encoded private key matching the client certificate from -client-cert. Overrides the NOMAD_CLIENT_KEY environment variable if set. + + -tls-server-name= + The server name to use as the SNI host when connecting via + TLS. Overrides the NOMAD_TLS_SERVER_NAME environment variable if set. -tls-skip-verify Do not verify TLS certificate. This is highly not recommended. Verification diff --git a/command/meta_test.go b/command/meta_test.go index da20d37aa9b..c44a21be5d1 100644 --- a/command/meta_test.go +++ b/command/meta_test.go @@ -29,6 +29,7 @@ func TestMeta_FlagSet(t *testing.T) { "client-cert", "client-key", "insecure", + "tls-server-name", "tls-skip-verify", "token", }, diff --git a/command/monitor.go b/command/monitor.go index 52cee4b80b8..c7f0f9d5556 100644 --- a/command/monitor.go +++ b/command/monitor.go @@ -2,6 +2,7 @@ package command import ( "fmt" + "sort" "strings" "sync" "time" @@ -380,7 +381,16 @@ func formatAllocMetrics(metrics *api.AllocationMetric, scores bool, prefix strin // Add header as first row if i == 0 { scoreOutput[0] = "Node|" - for scorerName := range scoreMeta.Scores { + + // sort scores alphabetically + scores := make([]string, 0, len(scoreMeta.Scores)) + for score := range scoreMeta.Scores { + scores = append(scores, score) + } + sort.Strings(scores) + + // build score header output + for _, scorerName := range scores { scoreOutput[0] += fmt.Sprintf("%v|", scorerName) scorerNames = append(scorerNames, scorerName) } diff --git a/command/namespace.go b/command/namespace.go index 813829d7c2f..8557e76ea7d 100644 --- a/command/namespace.go +++ b/command/namespace.go @@ -23,7 +23,7 @@ Usage: nomad namespace [options] [args] Create or update a namespace: - $ nomad namespace apply -description "My new namespace" + $ nomad namespace apply -description "My new namespace" List namespaces: diff --git a/command/node_drain.go b/command/node_drain.go index d86fc9f1ccd..58c54410344 100644 --- a/command/node_drain.go +++ b/command/node_drain.go @@ -147,7 +147,7 @@ func (c *NodeDrainCommand) Run(args []string) int { // Check that we got either enable or disable, but not both. if (enable && disable) || (!monitor && !enable && !disable) { - c.Ui.Error("Ethier the '-enable' or '-disable' flag must be set, unless using '-monitor'") + c.Ui.Error("Either the '-enable' or '-disable' flag must be set, unless using '-monitor'") c.Ui.Error(commandErrorText(c)) return 1 } diff --git a/command/node_drain_test.go b/command/node_drain_test.go index acdf9775d86..09c2d04a8f2 100644 --- a/command/node_drain_test.go +++ b/command/node_drain_test.go @@ -238,7 +238,7 @@ func TestNodeDrainCommand_Monitor(t *testing.T) { require.Contains(out, fmt.Sprintf("Alloc %q draining", a.ID)) } - expected := fmt.Sprintf("All allocations on node %q have stopped.\n", nodeID) + expected := fmt.Sprintf("All allocations on node %q have stopped\n", nodeID) if !strings.HasSuffix(out, expected) { t.Fatalf("expected output to end with:\n%s", expected) } diff --git a/command/node_eligibility.go b/command/node_eligibility.go index 27bf2404f13..568a9d9aad6 100644 --- a/command/node_eligibility.go +++ b/command/node_eligibility.go @@ -86,7 +86,7 @@ func (c *NodeEligibilityCommand) Run(args []string) int { // Check that we got either enable or disable, but not both. if (enable && disable) || (!enable && !disable) { - c.Ui.Error("Ethier the '-enable' or '-disable' flag must be set") + c.Ui.Error("Either the '-enable' or '-disable' flag must be set") c.Ui.Error(commandErrorText(c)) return 1 } diff --git a/command/node_status.go b/command/node_status.go index 2084af2a65d..4bbf443b9da 100644 --- a/command/node_status.go +++ b/command/node_status.go @@ -333,7 +333,7 @@ func formatDrain(n *api.Node) string { func (c *NodeStatusCommand) formatNode(client *api.Client, node *api.Node) int { // Format the header output basic := []string{ - fmt.Sprintf("ID|%s", limit(node.ID, c.length)), + fmt.Sprintf("ID|%s", node.ID), fmt.Sprintf("Name|%s", node.Name), fmt.Sprintf("Class|%s", node.NodeClass), fmt.Sprintf("DC|%s", node.Datacenter), diff --git a/command/node_status_test.go b/command/node_status_test.go index 500c18a3a9d..4aa7f550c9e 100644 --- a/command/node_status_test.go +++ b/command/node_status_test.go @@ -137,11 +137,8 @@ func TestNodeStatusCommand_Run(t *testing.T) { if !strings.Contains(out, "mynode") { t.Fatalf("expect to find mynode, got: %s", out) } - if strings.Contains(out, nodeID) { - t.Fatalf("expected truncated node id, got: %s", out) - } - if !strings.Contains(out, nodeID[:8]) { - t.Fatalf("expected node id %q, got: %s", nodeID[:8], out) + if !strings.Contains(out, nodeID) { + t.Fatalf("expected node id %q, got: %s", nodeID, out) } ui.OutputWriter.Reset() diff --git a/command/quota_apply.go b/command/quota_apply.go index 0dee1519dd6..80b05c6a4f8 100644 --- a/command/quota_apply.go +++ b/command/quota_apply.go @@ -13,6 +13,7 @@ import ( "github.com/hashicorp/hcl/hcl/ast" "github.com/hashicorp/nomad/api" "github.com/hashicorp/nomad/helper" + "github.com/hashicorp/nomad/jobspec" "github.com/mitchellh/mapstructure" "github.com/posener/complete" ) @@ -261,6 +262,7 @@ func parseQuotaResource(result *api.Resources, list *ast.ObjectList) error { valid := []string{ "cpu", "memory", + "network", } if err := helper.CheckHCLKeys(listVal, valid); err != nil { return multierror.Prefix(err, "resources ->") @@ -275,5 +277,20 @@ func parseQuotaResource(result *api.Resources, list *ast.ObjectList) error { return err } + // Find the network ObjectList, parse it + nw := listVal.Filter("network") + if len(nw.Items) > 0 { + rl, err := jobspec.ParseNetwork(nw) + if err != nil { + return multierror.Prefix(err, "resources ->") + } + if rl != nil { + if rl.Mode != "" || rl.HasPorts() { + return fmt.Errorf("resources -> network only allows mbits") + } + result.Networks = []*api.NetworkResource{rl} + } + } + return nil } diff --git a/command/quota_apply_test.go b/command/quota_apply_test.go index d2211f0bf57..31d70f2d7d6 100644 --- a/command/quota_apply_test.go +++ b/command/quota_apply_test.go @@ -1,15 +1,12 @@ -// +build ent - package command import ( - "io/ioutil" - "os" "strings" "testing" + "github.com/hashicorp/nomad/api" "github.com/mitchellh/cli" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestQuotaApplyCommand_Implements(t *testing.T) { @@ -40,60 +37,41 @@ func TestQuotaApplyCommand_Fails(t *testing.T) { ui.ErrorWriter.Reset() } -func TestQuotaApplyCommand_Good_HCL(t *testing.T) { - t.Parallel() - - // Create a server - srv, client, url := testServer(t, true, nil) - defer srv.Shutdown() - - ui := new(cli.MockUi) - cmd := &QuotaApplyCommand{Meta: Meta{Ui: ui}} - - fh1, err := ioutil.TempFile("", "nomad") - if err != nil { - t.Fatalf("err: %s", err) - } - defer os.Remove(fh1.Name()) - if _, err := fh1.WriteString(defaultHclQuotaSpec); err != nil { - t.Fatalf("err: %s", err) - } - - // Create a quota spec - if code := cmd.Run([]string{"-address=" + url, fh1.Name()}); code != 0 { - t.Fatalf("expected exit 0, got: %d; %v", code, ui.ErrorWriter.String()) - } - - quotas, _, err := client.Quotas().List(nil) - assert.Nil(t, err) - assert.Len(t, quotas, 1) -} - -func TestQuotaApplyCommand_Good_JSON(t *testing.T) { +func TestQuotaApplyNetwork(t *testing.T) { t.Parallel() - // Create a server - srv, client, url := testServer(t, true, nil) - defer srv.Shutdown() - - ui := new(cli.MockUi) - cmd := &QuotaApplyCommand{Meta: Meta{Ui: ui}} - - fh1, err := ioutil.TempFile("", "nomad") - if err != nil { - t.Fatalf("err: %s", err) - } - defer os.Remove(fh1.Name()) - if _, err := fh1.WriteString(defaultJsonQuotaSpec); err != nil { - t.Fatalf("err: %s", err) + mbits := 20 + + cases := []struct { + hcl string + q *api.QuotaSpec + err string + }{{ + hcl: `limit {region = "global", region_limit {network {mbits = 20}}}`, + q: &api.QuotaSpec{ + Limits: []*api.QuotaLimit{{ + Region: "global", + RegionLimit: &api.Resources{ + Networks: []*api.NetworkResource{{ + MBits: &mbits, + }}, + }, + }}, + }, + err: "", + }, { + hcl: `limit {region = "global", region_limit {network { mbits = 20, device = "eth0"}}}`, + q: nil, + err: "network -> invalid key: device", + }} + + for _, c := range cases { + t.Run(c.hcl, func(t *testing.T) { + q, err := parseQuotaSpec([]byte(c.hcl)) + require.Equal(t, c.q, q) + if c.err != "" { + require.Contains(t, err.Error(), c.err) + } + }) } - - // Create a quota spec - if code := cmd.Run([]string{"-address=" + url, "-json", fh1.Name()}); code != 0 { - t.Fatalf("expected exit 0, got: %d; %v", code, ui.ErrorWriter.String()) - } - - quotas, _, err := client.Quotas().List(nil) - assert.Nil(t, err) - assert.Len(t, quotas, 1) } diff --git a/command/quota_init.go b/command/quota_init.go index a78a356c773..45d7125913f 100644 --- a/command/quota_init.go +++ b/command/quota_init.go @@ -115,6 +115,9 @@ limit { region_limit { cpu = 2500 memory = 1000 + network { + mbits = 50 + } } } `) @@ -128,7 +131,10 @@ var defaultJsonQuotaSpec = strings.TrimSpace(` "Region": "global", "RegionLimit": { "CPU": 2500, - "MemoryMB": 1000 + "MemoryMB": 1000, + "Networks": [ + { "MBits": 50 } + ] } } ] diff --git a/command/quota_status.go b/command/quota_status.go index 6c7805e3fdb..f5a0a3690ea 100644 --- a/command/quota_status.go +++ b/command/quota_status.go @@ -155,7 +155,7 @@ func formatQuotaLimits(spec *api.QuotaSpec, usages map[string]*api.QuotaUsage) s sort.Sort(api.QuotaLimitSort(spec.Limits)) limits := make([]string, len(spec.Limits)+1) - limits[0] = "Region|CPU Usage|Memory Usage" + limits[0] = "Region|CPU Usage|Memory Usage|Network Usage" i := 0 for _, specLimit := range spec.Limits { i++ @@ -171,17 +171,27 @@ func formatQuotaLimits(spec *api.QuotaSpec, usages map[string]*api.QuotaUsage) s return used, ok } + specBits := 0 + if len(specLimit.RegionLimit.Networks) == 1 { + specBits = *specLimit.RegionLimit.Networks[0].MBits + } + used, ok := lookupUsage() if !ok { cpu := fmt.Sprintf("- / %s", formatQuotaLimitInt(specLimit.RegionLimit.CPU)) memory := fmt.Sprintf("- / %s", formatQuotaLimitInt(specLimit.RegionLimit.MemoryMB)) - limits[i] = fmt.Sprintf("%s|%s|%s", specLimit.Region, cpu, memory) + net := fmt.Sprintf("- / %s", formatQuotaLimitInt(&specBits)) + limits[i] = fmt.Sprintf("%s|%s|%s|%s", specLimit.Region, cpu, memory, net) continue } cpu := fmt.Sprintf("%d / %s", *used.RegionLimit.CPU, formatQuotaLimitInt(specLimit.RegionLimit.CPU)) memory := fmt.Sprintf("%d / %s", *used.RegionLimit.MemoryMB, formatQuotaLimitInt(specLimit.RegionLimit.MemoryMB)) - limits[i] = fmt.Sprintf("%s|%s|%s", specLimit.Region, cpu, memory) + net := fmt.Sprintf("- / %s", formatQuotaLimitInt(&specBits)) + if len(used.RegionLimit.Networks) == 1 { + net = fmt.Sprintf("%d / %s", *used.RegionLimit.Networks[0].MBits, formatQuotaLimitInt(&specBits)) + } + limits[i] = fmt.Sprintf("%s|%s|%s|%s", specLimit.Region, cpu, memory, net) } return formatList(limits) diff --git a/command/system.go b/command/system.go new file mode 100644 index 00000000000..fe61fa4f5a2 --- /dev/null +++ b/command/system.go @@ -0,0 +1,35 @@ +package command + +import ( + "strings" + + "github.com/mitchellh/cli" +) + +type SystemCommand struct { + Meta +} + +func (sc *SystemCommand) Help() string { + helpText := ` +Usage: nomad system [options] + + This command groups subcommands for interacting with the system API. Users + can perform system maintenance tasks such as trigger the garbage collector or + perform job summary reconciliation. + + Please see the individual subcommand help for detailed usage information. +` + + return strings.TrimSpace(helpText) +} + +func (sc *SystemCommand) Synopsis() string { + return "Interact with the system API" +} + +func (sc *SystemCommand) Name() string { return "system" } + +func (sc *SystemCommand) Run(args []string) int { + return cli.RunResultHelp +} diff --git a/command/system_gc.go b/command/system_gc.go new file mode 100644 index 00000000000..9897f5c95fa --- /dev/null +++ b/command/system_gc.go @@ -0,0 +1,54 @@ +package command + +import ( + "fmt" + "strings" + + "github.com/posener/complete" +) + +type SystemGCCommand struct { + Meta +} + +func (c *SystemGCCommand) Help() string { + helpText := ` +Usage: nomad system gc [options] + + Initializes a garbage collection of jobs, evaluations, allocations, and nodes. + +General Options: + + ` + generalOptionsUsage() + return strings.TrimSpace(helpText) +} + +func (c *SystemGCCommand) Synopsis() string { + return "Run the system garbage collection process" +} + +func (c *SystemGCCommand) AutocompleteFlags() complete.Flags { + return c.Meta.AutocompleteFlags(FlagSetClient) +} + +func (c *SystemGCCommand) AutocompleteArgs() complete.Predictor { + return complete.PredictNothing +} + +func (c *SystemGCCommand) Name() string { return "system gc" } + +func (c *SystemGCCommand) Run(args []string) int { + + // Get the HTTP client + client, err := c.Meta.Client() + if err != nil { + c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err)) + return 1 + } + + if err := client.System().GarbageCollect(); err != nil { + c.Ui.Error(fmt.Sprintf("Error running system garbage-collection: %s", err)) + return 1 + } + return 0 +} diff --git a/command/system_gc_test.go b/command/system_gc_test.go new file mode 100644 index 00000000000..89b11cfd223 --- /dev/null +++ b/command/system_gc_test.go @@ -0,0 +1,27 @@ +package command + +import ( + "testing" + + "github.com/mitchellh/cli" +) + +func TestSystemGCCommand_Implements(t *testing.T) { + t.Parallel() + var _ cli.Command = &SystemGCCommand{} +} + +func TestSystemGCCommand_Good(t *testing.T) { + t.Parallel() + + // Create a server + srv, _, url := testServer(t, true, nil) + defer srv.Shutdown() + + ui := new(cli.MockUi) + cmd := &SystemGCCommand{Meta: Meta{Ui: ui, flagAddress: url}} + + if code := cmd.Run([]string{"-address=" + url}); code != 0 { + t.Fatalf("expected exit 0, got: %d; %v", code, ui.ErrorWriter.String()) + } +} diff --git a/command/system_reconcile.go b/command/system_reconcile.go new file mode 100644 index 00000000000..298ea71e745 --- /dev/null +++ b/command/system_reconcile.go @@ -0,0 +1,37 @@ +package command + +import ( + "strings" + + "github.com/mitchellh/cli" +) + +type SystemReconcileCommand struct { + Meta +} + +func (s *SystemReconcileCommand) Help() string { + helpText := ` +Usage: nomad system reconcile [options] + + This command groups subcommands for interacting with the system reconcile API. + + Reconcile the summaries of all registered jobs: + + $ nomad system reconcile summaries + + Please see the individual subcommand help for detailed usage information. +` + + return strings.TrimSpace(helpText) +} + +func (s *SystemReconcileCommand) Synopsis() string { + return "Perform system reconciliation tasks" +} + +func (s *SystemReconcileCommand) Name() string { return "system reconcile" } + +func (s *SystemReconcileCommand) Run(args []string) int { + return cli.RunResultHelp +} diff --git a/command/system_reconcile_summaries.go b/command/system_reconcile_summaries.go new file mode 100644 index 00000000000..62fafb667f9 --- /dev/null +++ b/command/system_reconcile_summaries.go @@ -0,0 +1,54 @@ +package command + +import ( + "fmt" + "strings" + + "github.com/posener/complete" +) + +type SystemReconcileSummariesCommand struct { + Meta +} + +func (c *SystemReconcileSummariesCommand) Help() string { + helpText := ` +Usage: nomad system reconcile summaries [options] + + Reconciles the summaries of all registered jobs. + +General Options: + + ` + generalOptionsUsage() + return strings.TrimSpace(helpText) +} + +func (c *SystemReconcileSummariesCommand) Synopsis() string { + return "Reconciles the summaries of all registered jobs" +} + +func (c *SystemReconcileSummariesCommand) AutocompleteFlags() complete.Flags { + return c.Meta.AutocompleteFlags(FlagSetClient) +} + +func (c *SystemReconcileSummariesCommand) AutocompleteArgs() complete.Predictor { + return complete.PredictNothing +} + +func (c *SystemReconcileSummariesCommand) Name() string { return "system reconcile summaries" } + +func (c *SystemReconcileSummariesCommand) Run(args []string) int { + + // Get the HTTP client + client, err := c.Meta.Client() + if err != nil { + c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err)) + return 1 + } + + if err := client.System().ReconcileSummaries(); err != nil { + c.Ui.Error(fmt.Sprintf("Error running system summary reconciliation: %s", err)) + return 1 + } + return 0 +} diff --git a/command/system_reconcile_summaries_test.go b/command/system_reconcile_summaries_test.go new file mode 100644 index 00000000000..3423f4eb60b --- /dev/null +++ b/command/system_reconcile_summaries_test.go @@ -0,0 +1,27 @@ +package command + +import ( + "testing" + + "github.com/mitchellh/cli" +) + +func TestSystemReconcileSummariesCommand_Implements(t *testing.T) { + t.Parallel() + var _ cli.Command = &SystemReconcileSummariesCommand{} +} + +func TestSystemReconcileSummariesCommand_Good(t *testing.T) { + t.Parallel() + + // Create a server + srv, _, url := testServer(t, true, nil) + defer srv.Shutdown() + + ui := new(cli.MockUi) + cmd := &SystemReconcileSummariesCommand{Meta: Meta{Ui: ui, flagAddress: url}} + + if code := cmd.Run([]string{"-address=" + url}); code != 0 { + t.Fatalf("expected exit 0, got: %d; %v", code, ui.ErrorWriter.String()) + } +} diff --git a/command/system_reconcile_test.go b/command/system_reconcile_test.go new file mode 100644 index 00000000000..defb5cdc8ce --- /dev/null +++ b/command/system_reconcile_test.go @@ -0,0 +1,12 @@ +package command + +import ( + "testing" + + "github.com/mitchellh/cli" +) + +func TestSystemReconcileCommand_Implements(t *testing.T) { + t.Parallel() + var _ cli.Command = &SystemCommand{} +} diff --git a/command/system_test.go b/command/system_test.go new file mode 100644 index 00000000000..fa4ca3ceb57 --- /dev/null +++ b/command/system_test.go @@ -0,0 +1,12 @@ +package command + +import ( + "testing" + + "github.com/mitchellh/cli" +) + +func TestSystemCommand_Implements(t *testing.T) { + t.Parallel() + var _ cli.Command = &SystemCommand{} +} diff --git a/contributing/README.md b/contributing/README.md index 555861b85a2..9893663ea87 100644 --- a/contributing/README.md +++ b/contributing/README.md @@ -3,8 +3,8 @@ This directory contains some documentation about the Nomad codebase, aimed at readers who are interested in making code contributions. -If you're looking for information on _using_ using, please instead refer -to [the main Nomad website](https://nomadproject.io). +If you're looking for information on _using_ Nomad, please instead refer +to the [Nomad website](https://nomadproject.io). ## Architecture @@ -38,3 +38,8 @@ developers and reviewers confidence that the proper changes have been made: * [New `jobspec` entry](checklist-jobspec.md) * [New CLI command](checklist-command.md) +* [New RPC endpoint](checklist-rpc-endpoint.md) + +## Tooling + +* [Go tool versions](golang.md) diff --git a/contributing/checklist-jobspec.md b/contributing/checklist-jobspec.md index 195cb0cb666..19e33521c87 100644 --- a/contributing/checklist-jobspec.md +++ b/contributing/checklist-jobspec.md @@ -20,6 +20,7 @@ * [ ] Changelog * [ ] Jobspec entry https://www.nomadproject.io/docs/job-specification/index.html +* [ ] Jobspec sidebar entry https://github.com/hashicorp/nomad/blob/master/website/source/layouts/docs.erb * [ ] Job JSON API entry https://www.nomadproject.io/api/json-jobs.html * [ ] Sample Response output in API https://www.nomadproject.io/api/jobs.html * [ ] Consider if it needs a guide https://www.nomadproject.io/guides/index.html diff --git a/contributing/golang.md b/contributing/golang.md new file mode 100644 index 00000000000..82ad09e0feb --- /dev/null +++ b/contributing/golang.md @@ -0,0 +1,30 @@ +# Nomad Go Version + +Nomad is intended to be built with a specific version of the Go toolchain for +each release. Generally, each Y release of Nomad (where 0.9.5 means X=0, Y=9, +Z=5) will update to the latest version of the Go toolchain available at the +time. + +Nomad Z releases update to the latest Go Z release but do *not* change Go's Y +version. + +## Version Table + +| Nomad Version | Go Version | +|:-------------:|:----------:| +| 0.11 | 1.13 | +| 0.10 | 1.12 | +| 0.9 | 1.11 | + +## Code + +The +[`update_golang_version.sh`](https://github.com/hashicorp/nomad/blob/master/scripts/update_golang_version.sh) +script is used to update the Go version for all build tools. + +The [Changelog](https://github.com/hashicorp/nomad/blob/v0.10.2/CHANGELOG.md) +will note when the Go version has changed in the Improvements section: + +``` +* build: Updated to Go 1.12.13 [GH-6606] +``` diff --git a/demo/tls/GNUmakefile b/demo/tls/GNUmakefile index a33ae4a6eb8..d865bd5eb3f 100644 --- a/demo/tls/GNUmakefile +++ b/demo/tls/GNUmakefile @@ -24,7 +24,7 @@ clean: ## Remove generated files # Generate Nomad certificate authority ca.pem ca-key.pem ca.csr: - @echo "==> Removing generated files..." + @echo "==> Generating Nomad certificate authority..." cfssl gencert -initca ca-csr.json | cfssljson -bare ca # Generate Nomad server certificate diff --git a/demo/vagrant/Vagrantfile b/demo/vagrant/Vagrantfile index 3953a4e594f..d41812b179b 100644 --- a/demo/vagrant/Vagrantfile +++ b/demo/vagrant/Vagrantfile @@ -5,6 +5,7 @@ $script = < + \ No newline at end of file diff --git a/ui/.storybook/theme.js b/ui/.storybook/theme.js new file mode 100644 index 00000000000..ff67962d091 --- /dev/null +++ b/ui/.storybook/theme.js @@ -0,0 +1,35 @@ +import { create } from '@storybook/theming'; + +// From Bulma +let blackBis = 'hsl(0, 0%, 7%)'; +let greyLight = 'hsl(0, 0%, 71%)'; + +// From product-colors.scss +let vagrantBlue = '#1563ff'; + +export default create({ + base: 'light', + + colorPrimary: blackBis, + colorSecondary: vagrantBlue, + + // UI + appBorderColor: greyLight, + + // Typography + // From variables.scss + fontBase: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif", + // From Bulma + fontCode: 'monospace', + + // Text colors + textColor: blackBis, + + // Toolbar default and active colors + barTextColor: greyLight, + barSelectedColor: 'white', + barBg: blackBis, + + brandTitle: 'Nomad Storybook', + brandUrl: 'https://www.nomadproject.io/', +}); diff --git a/ui/.storybook/webpack.config.js b/ui/.storybook/webpack.config.js new file mode 100644 index 00000000000..98e79973fa3 --- /dev/null +++ b/ui/.storybook/webpack.config.js @@ -0,0 +1,10 @@ +/* eslint-env node */ +module.exports = function({ config }) { + config.module.rules.push({ + test: /\.stories\.jsx?$/, + loaders: [require.resolve('@storybook/source-loader')], + enforce: 'pre', + }); + + return config; +}; diff --git a/ui/README.md b/ui/README.md index f3a3c885acc..19647672897 100644 --- a/ui/README.md +++ b/ui/README.md @@ -6,10 +6,9 @@ The official Nomad UI. This is an [ember.js](https://emberjs.com/) project, and you will need the following tools installed on your computer. -* [Node.js](https://nodejs.org/) +* [Node.js v10](https://nodejs.org/) * [Yarn](https://yarnpkg.com) * [Ember CLI](https://ember-cli.com/) -* [PhantomJS](http://phantomjs.org/) (for running tests) ## Installation @@ -22,11 +21,15 @@ $ yarn ## Running / Development -First, make sure nomad is running. The UI, in development mode, runs independently from Nomad, so this could be an official release or a dev branch. Likewise, Nomad can be running in server mode or dev mode. As long as the API is accessible, the UI will work as expected. +UI in development mode defaults to using fake generated data, but you can configure it to proxy a live running nomad process by setting `USE_MIRAGE` environment variable to `false`. First, make sure nomad is running. The UI, in development mode, runs independently from Nomad, so this could be an official release or a dev branch. Likewise, Nomad can be running in server mode or dev mode. As long as the API is accessible, the UI will work as expected. -* `ember serve` +* `USE_MIRAGE=false ember serve` * Visit your app at [http://localhost:4200](http://localhost:4200). +You may need to reference the direct path to `ember`, typically in `./node_modules/.bin/ember`. + +The fake data in development is generated from a stable seed of 1. To generate different data, you can include a query parameter of `?faker-seed=2` or any other number in the URL. To turn off the seed and get different data with every load, use `?faker=seed=0`. + ## Running / Development with Vagrant All necessary tools for UI development are installed as part of the Vagrantfile. This is primarily to make it easy to build the UI from source while working on Nomad. Due to the filesystem requirements of [Broccoli](http://broccolijs.com/) (which powers Ember CLI), it is strongly discouraged to use Vagrant for developing changes to the UI. @@ -49,7 +52,9 @@ Nomad UI tests can be run independently of Nomad golang tests. * `ember test` (single run, headless browser) * `ember test --server` (watches for changes, runs in a full browser) +You can use `--filter ` to run a targetted set of tests, e.g. `ember test --filter 'allocation detail'`. +In the test environment, the fake data is generated with a random seed. If you want stable data, you can set a seed while running the test server by appending `&faker-seed=1` (or any other non-zero number) to the URL. ### Linting @@ -70,11 +75,23 @@ Typically `make release` or `make dev-ui` will be the desired build workflow, bu Nomad UI releases are in lockstep with Nomad releases and are integrated into the `make release` toolchain. +### Conventions + +* UI branches should be prefix with `f-ui-` for feature work and `b-ui-` for bug fixes. This instructs CI to skip running nomad backend tests. + +### Storybook UI Library + +The Storybook project provides a browser to see what components and patterns are present in the application and how to use them. You can run it locally with `yarn storybook`. The latest version from the `master` branch is at [`nomad-storybook.netlify.com`](https://nomad-storybook.netlify.com/). + +To generate a new story for a component, run `ember generate story component-name`. You can use the existing stories as a guide. + ### Troubleshooting #### The UI is running, but none of the API requests are working -By default (according to the `.embercli` file) a proxy address of `http://localhost:4646` is used. If you are running Nomad at a different address, you will need to override this setting when running ember serve: `ember serve --proxy http://newlocation:1111`. +By default (according to the `.ember-cli` file), a proxy address of `http://localhost:4646` is used. If you are running Nomad at a different address, you will need to override this setting when running ember serve: `ember serve --proxy http://newlocation:1111`. + +Also, ensure that `USE_MIRAGE` environment variable is set to false, so the UI proxy requests to Nomad process instead of using autogenerated test data. #### Nomad is running in Vagrant, but I can't access the API from my host machine diff --git a/ui/app/abilities/client.js b/ui/app/abilities/client.js new file mode 100644 index 00000000000..5278502b901 --- /dev/null +++ b/ui/app/abilities/client.js @@ -0,0 +1,26 @@ +import { Ability } from 'ember-can'; +import { inject as service } from '@ember/service'; +import { computed, get } from '@ember/object'; +import { equal, or, not } from '@ember/object/computed'; + +export default Ability.extend({ + token: service(), + + // Map abilities to policy options (which are coarse for nodes) + // instead of specific behaviors. + canWrite: or('bypassAuthorization', 'selfTokenIsManagement', 'policiesIncludeNodeWrite'), + + bypassAuthorization: not('token.aclEnabled'), + selfTokenIsManagement: equal('token.selfToken.type', 'management'), + + policiesIncludeNodeWrite: computed('token.selfTokenPolicies.[]', function() { + // For each policy record, extract the Node policy + const policies = (this.get('token.selfTokenPolicies') || []) + .toArray() + .map(policy => get(policy, 'rulesJSON.Node.Policy')) + .compact(); + + // Node write is allowed if any policy allows it + return policies.some(policy => policy === 'write'); + }), +}); diff --git a/ui/app/abilities/job.js b/ui/app/abilities/job.js new file mode 100644 index 00000000000..ac73c05f2fa --- /dev/null +++ b/ui/app/abilities/job.js @@ -0,0 +1,80 @@ +import { Ability } from 'ember-can'; +import { inject as service } from '@ember/service'; +import { computed, get } from '@ember/object'; +import { equal, or, not } from '@ember/object/computed'; + +export default Ability.extend({ + system: service(), + token: service(), + + canRun: or('bypassAuthorization', 'selfTokenIsManagement', 'policiesSupportRunning'), + + bypassAuthorization: not('token.aclEnabled'), + selfTokenIsManagement: equal('token.selfToken.type', 'management'), + + activeNamespace: computed('system.activeNamespace.name', function() { + return this.get('system.activeNamespace.name') || 'default'; + }), + + rulesForActiveNamespace: computed('activeNamespace', 'token.selfTokenPolicies.[]', function() { + let activeNamespace = this.activeNamespace; + + return (this.get('token.selfTokenPolicies') || []).toArray().reduce((rules, policy) => { + let policyNamespaces = get(policy, 'rulesJSON.Namespaces') || []; + + let matchingNamespace = this._findMatchingNamespace(policyNamespaces, activeNamespace); + + if (matchingNamespace) { + rules.push(policyNamespaces.find(namespace => namespace.Name === matchingNamespace)); + } + + return rules; + }, []); + }), + + policiesSupportRunning: computed('rulesForActiveNamespace.@each.capabilities', function() { + return this.rulesForActiveNamespace.some(rules => { + let capabilities = get(rules, 'Capabilities') || []; + return capabilities.includes('submit-job'); + }); + }), + + // Chooses the closest namespace as described at the bottom here: + // https://www.nomadproject.io/guides/security/acl.html#namespace-rules + _findMatchingNamespace(policyNamespaces, activeNamespace) { + let namespaceNames = policyNamespaces.mapBy('Name'); + + if (namespaceNames.includes(activeNamespace)) { + return activeNamespace; + } + + let globNamespaceNames = namespaceNames.filter(namespaceName => namespaceName.includes('*')); + + let matchingNamespaceName = globNamespaceNames.reduce( + (mostMatching, namespaceName) => { + // Convert * wildcards to .* for regex matching + let namespaceNameRegExp = new RegExp(namespaceName.replace(/\*/g, '.*')); + let characterDifference = activeNamespace.length - namespaceName.length; + + if ( + characterDifference < mostMatching.mostMatchingCharacterDifference && + activeNamespace.match(namespaceNameRegExp) + ) { + return { + mostMatchingNamespaceName: namespaceName, + mostMatchingCharacterDifference: characterDifference, + }; + } else { + return mostMatching; + } + }, + { mostMatchingNamespaceName: null, mostMatchingCharacterDifference: Number.MAX_SAFE_INTEGER } + ).mostMatchingNamespaceName; + + if (matchingNamespaceName) { + return matchingNamespaceName; + } else if (namespaceNames.includes('default')) { + return 'default'; + } + }, +}); diff --git a/ui/app/adapters/job.js b/ui/app/adapters/job.js index 9bb5a248582..0f4d64845ea 100644 --- a/ui/app/adapters/job.js +++ b/ui/app/adapters/job.js @@ -78,7 +78,7 @@ export default Watchable.extend({ }, plan(job) { - const jobId = job.get('id'); + const jobId = job.get('id') || job.get('_idBeforeSaving'); const store = this.store; const url = addToPath(this.urlForFindRecord(jobId, 'job'), '/plan'); @@ -105,7 +105,8 @@ export default Watchable.extend({ }, update(job) { - return this.ajax(this.urlForUpdateRecord(job.get('id'), 'job'), 'POST', { + const jobId = job.get('id') || job.get('_idBeforeSaving'); + return this.ajax(this.urlForUpdateRecord(jobId, 'job'), 'POST', { data: { Job: job.get('_newDefinitionJSON'), }, diff --git a/ui/app/adapters/node.js b/ui/app/adapters/node.js index 8aa4b662fd5..d541d70ad45 100644 --- a/ui/app/adapters/node.js +++ b/ui/app/adapters/node.js @@ -1,3 +1,59 @@ import Watchable from './watchable'; +import addToPath from 'nomad-ui/utils/add-to-path'; -export default Watchable.extend(); +export default Watchable.extend({ + setEligible(node) { + return this.setEligibility(node, true); + }, + + setIneligible(node) { + return this.setEligibility(node, false); + }, + + setEligibility(node, isEligible) { + const url = addToPath(this.urlForFindRecord(node.id, 'node'), '/eligibility'); + return this.ajax(url, 'POST', { + data: { + NodeID: node.id, + Eligibility: isEligible ? 'eligible' : 'ineligible', + }, + }); + }, + + // Force: -1s deadline + // No Deadline: 0 deadline + drain(node, drainSpec) { + const url = addToPath(this.urlForFindRecord(node.id, 'node'), '/drain'); + return this.ajax(url, 'POST', { + data: { + NodeID: node.id, + DrainSpec: Object.assign( + { + Deadline: 0, + IgnoreSystemJobs: true, + }, + drainSpec + ), + }, + }); + }, + + forceDrain(node, drainSpec) { + return this.drain( + node, + Object.assign({}, drainSpec, { + Deadline: -1, + }) + ); + }, + + cancelDrain(node) { + const url = addToPath(this.urlForFindRecord(node.id, 'node'), '/drain'); + return this.ajax(url, 'POST', { + data: { + NodeID: node.id, + DrainSpec: null, + }, + }); + }, +}); diff --git a/ui/app/adapters/watchable.js b/ui/app/adapters/watchable.js index bb2903ab447..b6a37b02535 100644 --- a/ui/app/adapters/watchable.js +++ b/ui/app/adapters/watchable.js @@ -3,7 +3,7 @@ import { assign } from '@ember/polyfills'; import { inject as service } from '@ember/service'; import queryString from 'query-string'; import ApplicationAdapter from './application'; -import { AbortError } from 'ember-data/adapters/errors'; +import { AbortError } from '@ember-data/adapter/error'; export default ApplicationAdapter.extend({ watchList: service(), diff --git a/ui/app/components/allocation-row.js b/ui/app/components/allocation-row.js index 52fb12f6bd3..ef310d7edfa 100644 --- a/ui/app/components/allocation-row.js +++ b/ui/app/components/allocation-row.js @@ -2,6 +2,7 @@ import Ember from 'ember'; import { inject as service } from '@ember/service'; import Component from '@ember/component'; import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import { alias } from '@ember/object/computed'; import { run } from '@ember/runloop'; import { task, timeout } from 'ember-concurrency'; @@ -24,7 +25,7 @@ export default Component.extend({ // Internal state statsError: false, - enablePolling: computed(() => !Ember.testing), + enablePolling: overridable(() => !Ember.testing), stats: computed('allocation', 'allocation.isRunning', function() { if (!this.get('allocation.isRunning')) return; diff --git a/ui/app/components/client-node-row.js b/ui/app/components/client-node-row.js index 947ae6e9a82..4eaec00f8e8 100644 --- a/ui/app/components/client-node-row.js +++ b/ui/app/components/client-node-row.js @@ -3,6 +3,7 @@ import Component from '@ember/component'; import { lazyClick } from '../helpers/lazy-click'; import { watchRelationship } from 'nomad-ui/utils/properties/watch'; import WithVisibilityDetection from 'nomad-ui/mixins/with-component-visibility-detection'; +import { computed } from '@ember/object'; export default Component.extend(WithVisibilityDetection, { store: service(), @@ -45,4 +46,18 @@ export default Component.extend(WithVisibilityDetection, { }, watch: watchRelationship('allocations'), + + compositeStatusClass: computed('node.compositeStatus', function() { + let compositeStatus = this.get('node.compositeStatus'); + + if (compositeStatus === 'draining') { + return 'status-text is-info'; + } else if (compositeStatus === 'ineligible') { + return 'status-text is-warning'; + } else if (compositeStatus === 'down') { + return 'status-text is-danger'; + } else { + return ''; + } + }), }); diff --git a/ui/app/components/drain-popover.js b/ui/app/components/drain-popover.js new file mode 100644 index 00000000000..c5f2187e40f --- /dev/null +++ b/ui/app/components/drain-popover.js @@ -0,0 +1,85 @@ +import Component from '@ember/component'; +import { computed } from '@ember/object'; +import { equal } from '@ember/object/computed'; +import { computed as overridable } from 'ember-overridable-computed'; +import { task } from 'ember-concurrency'; +import Duration from 'duration-js'; + +export default Component.extend({ + tagName: '', + + client: null, + isDisabled: false, + + onError() {}, + onDrain() {}, + + parseError: '', + + deadlineEnabled: false, + forceDrain: false, + drainSystemJobs: true, + + selectedDurationQuickOption: overridable(function() { + return this.durationQuickOptions[0]; + }), + + durationIsCustom: equal('selectedDurationQuickOption.value', 'custom'), + customDuration: '', + + durationQuickOptions: computed(() => [ + { label: '1 Hour', value: '1h' }, + { label: '4 Hours', value: '4h' }, + { label: '8 Hours', value: '8h' }, + { label: '12 Hours', value: '12h' }, + { label: '1 Day', value: '1d' }, + { label: 'Custom', value: 'custom' }, + ]), + + deadline: computed( + 'deadlineEnabled', + 'durationIsCustom', + 'customDuration', + 'selectedDurationQuickOption.value', + function() { + if (!this.deadlineEnabled) return 0; + if (this.durationIsCustom) return this.customDuration; + return this.selectedDurationQuickOption.value; + } + ), + + drain: task(function*(close) { + if (!this.client) return; + const isUpdating = this.client.isDraining; + + let deadline; + try { + deadline = new Duration(this.deadline).nanoseconds(); + } catch (err) { + this.set('parseError', err.message); + return; + } + + const spec = { + Deadline: deadline, + IgnoreSystemJobs: !this.drainSystemJobs, + }; + + close(); + + try { + if (this.forceDrain) { + yield this.client.forceDrain(spec); + } else { + yield this.client.drain(spec); + } + this.onDrain(isUpdating); + } catch (err) { + this.onError(err); + } + }), + + preventDefault(e) { + e.preventDefault(); + }, +}); diff --git a/ui/app/components/freestyle/sg-accordion.js b/ui/app/components/freestyle/sg-accordion.js deleted file mode 100644 index 84f7a7360a8..00000000000 --- a/ui/app/components/freestyle/sg-accordion.js +++ /dev/null @@ -1,6 +0,0 @@ -import Component from '@ember/component'; -import productMetadata from 'nomad-ui/utils/styleguide/product-metadata'; - -export default Component.extend({ - products: productMetadata, -}); diff --git a/ui/app/components/freestyle/sg-boxed-section.js b/ui/app/components/freestyle/sg-boxed-section.js deleted file mode 100644 index 4e4f4fa7dc1..00000000000 --- a/ui/app/components/freestyle/sg-boxed-section.js +++ /dev/null @@ -1,27 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; - -export default Component.extend({ - variants: computed(() => [ - { - key: 'Normal', - title: 'Normal', - slug: '', - }, - { - key: 'Info', - title: 'Info', - slug: 'is-info', - }, - { - key: 'Warning', - title: 'Warning', - slug: 'is-warning', - }, - { - key: 'Danger', - title: 'Danger', - slug: 'is-danger', - }, - ]), -}); diff --git a/ui/app/components/freestyle/sg-colors.js b/ui/app/components/freestyle/sg-colors.js deleted file mode 100644 index 40d77fcd2e4..00000000000 --- a/ui/app/components/freestyle/sg-colors.js +++ /dev/null @@ -1,97 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; - -export default Component.extend({ - nomadTheme: computed(() => [ - { - name: 'Primary', - base: '#25ba81', - }, - { - name: 'Primary Dark', - base: '#1d9467', - }, - { - name: 'Text', - base: '#0a0a0a', - }, - { - name: 'Link', - base: '#1563ff', - }, - { - name: 'Gray', - base: '#bbc4d1', - }, - { - name: 'Off-white', - base: '#f5f5f5', - }, - ]), - - productColors: computed(() => [ - { - name: 'Consul Pink', - base: '#ff0087', - }, - { - name: 'Consul Pink Dark', - base: '#c62a71', - }, - { - name: 'Packer Blue', - base: '#1daeff', - }, - { - name: 'Packer Blue Dark', - base: '#1d94dd', - }, - { - name: 'Terraform Purple', - base: '#5c4ee5', - }, - { - name: 'Terraform Purple Dark', - base: '#4040b2', - }, - { - name: 'Vagrant Blue', - base: '#1563ff', - }, - { - name: 'Vagrant Blue Dark', - base: '#104eb2', - }, - { - name: 'Nomad Green', - base: '#25ba81', - }, - { - name: 'Nomad Green Dark', - base: '#1d9467', - }, - { - name: 'Nomad Green Darker', - base: '#16704d', - }, - ]), - - emotiveColors: computed(() => [ - { - name: 'Success', - base: '#23d160', - }, - { - name: 'Warning', - base: '#fa8e23', - }, - { - name: 'Danger', - base: '#c84034', - }, - { - name: 'Info', - base: '#1563ff', - }, - ]), -}); diff --git a/ui/app/components/freestyle/sg-diff-viewer.js b/ui/app/components/freestyle/sg-diff-viewer.js deleted file mode 100644 index e81e64cf5f6..00000000000 --- a/ui/app/components/freestyle/sg-diff-viewer.js +++ /dev/null @@ -1,355 +0,0 @@ -import Component from '@ember/component'; - -const generateDiff = changeset => ({ - Fields: null, - ID: 'insertions-only', - Objects: null, - TaskGroups: [ - { - Fields: [{ Annotations: null, Name: 'Count', New: '2', Old: '2', Type: 'None' }], - Name: 'cache', - Objects: [ - { - Fields: changeset, - Name: 'RestartPolicy', - Objects: null, - Type: 'Edited', - }, - ], - Type: 'Edited', - Updates: null, - }, - ], - Type: 'Edited', -}); - -export default Component.extend({ - insertionsOnly: generateDiff([ - { Annotations: null, Name: 'Attempts', New: '15', Old: '15', Type: 'None' }, - { Annotations: null, Name: 'Delay', New: '25000000000', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Interval', New: '900000000000', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Mode', New: 'delay', Old: 'delay', Type: 'None' }, - ]), - - deletionsOnly: generateDiff([ - { Annotations: null, Name: 'Attempts', New: '15', Old: '15', Type: 'None' }, - { - Annotations: null, - Name: 'Delay', - New: '25000000000', - Old: '25000000000', - Type: 'None', - }, - { - Annotations: null, - Name: 'Interval', - New: '900000000000', - Old: '900000000000', - Type: 'None', - }, - { Annotations: null, Name: 'Mode', New: '', Old: 'delay', Type: 'Deleted' }, - ]), - - editsOnly: generateDiff([ - { Annotations: null, Name: 'Attempts', New: '15', Old: '15', Type: 'None' }, - { - Annotations: null, - Name: 'Delay', - New: '25000000000', - Old: '25000000000', - Type: 'None', - }, - { - Annotations: null, - Name: 'Interval', - New: '900000000000', - Old: '250000000000', - Type: 'Edited', - }, - { Annotations: null, Name: 'Mode', New: 'delay', Old: 'delay', Type: 'None' }, - ]), - - largeDiff: { - Fields: null, - ID: 'example', - Objects: null, - TaskGroups: [ - { - Fields: null, - Name: 'cache', - Objects: null, - Tasks: [ - { - Annotations: null, - Fields: [ - { - Annotations: null, - Name: 'Meta[one]', - New: "flew over the cuckoo's nest", - Old: '', - Type: 'Added', - }, - { - Annotations: null, - Name: 'Meta[two]', - New: 'birds on a wire', - Old: '', - Type: 'Added', - }, - ], - Name: 'redis', - Objects: [ - { - Fields: [ - { - Annotations: null, - Name: 'image', - New: 'redis:3.4', - Old: 'redis:3.2', - Type: 'Edited', - }, - { - Annotations: null, - Name: 'port_map[0][db]', - New: '6380', - Old: '6379', - Type: 'Edited', - }, - ], - Name: 'Config', - Objects: null, - Type: 'Edited', - }, - { - Fields: [ - { Annotations: null, Name: 'CPU', New: '1000', Old: '500', Type: 'Edited' }, - { Annotations: null, Name: 'DiskMB', New: '0', Old: '0', Type: 'None' }, - { Annotations: null, Name: 'IOPS', New: '0', Old: '0', Type: 'None' }, - { Annotations: null, Name: 'MemoryMB', New: '512', Old: '256', Type: 'Edited' }, - ], - Name: 'Resources', - Objects: [ - { - Fields: [ - { Annotations: null, Name: 'MBits', New: '100', Old: '', Type: 'Added' }, - ], - Name: 'Network', - Objects: [ - { - Fields: [ - { Annotations: null, Name: 'Label', New: 'db', Old: '', Type: 'Added' }, - ], - Name: 'Dynamic Port', - Objects: null, - Type: 'Added', - }, - ], - Type: 'Added', - }, - { - Fields: [ - { Annotations: null, Name: 'MBits', New: '', Old: '10', Type: 'Deleted' }, - ], - Name: 'Network', - Objects: [ - { - Fields: [ - { Annotations: null, Name: 'Label', New: '', Old: 'db', Type: 'Deleted' }, - ], - Name: 'Dynamic Port', - Objects: null, - Type: 'Deleted', - }, - ], - Type: 'Deleted', - }, - ], - Type: 'Edited', - }, - { - Fields: [ - { - Annotations: null, - Name: 'AddressMode', - New: 'auto', - Old: 'auto', - Type: 'None', - }, - { - Annotations: null, - Name: 'Name', - New: 'redis-cache', - Old: 'redis-cache', - Type: 'None', - }, - { Annotations: null, Name: 'PortLabel', New: 'db', Old: 'db', Type: 'None' }, - ], - Name: 'Service', - Objects: [ - { - Fields: [ - { Annotations: null, Name: 'Tags', New: 'redis', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Tags', New: 'cache', Old: 'cache', Type: 'None' }, - { - Annotations: null, - Name: 'Tags', - New: 'global', - Old: 'global', - Type: 'None', - }, - ], - Name: 'Tags', - Objects: null, - Type: 'Added', - }, - { - Fields: [ - { Annotations: null, Name: 'AddressMode', New: '', Old: '', Type: 'None' }, - { Annotations: null, Name: 'Command', New: '', Old: '', Type: 'None' }, - { Annotations: null, Name: 'GRPCService', New: '', Old: '', Type: 'None' }, - { - Annotations: null, - Name: 'GRPCUseTLS', - New: 'false', - Old: 'false', - Type: 'None', - }, - { Annotations: null, Name: 'InitialStatus', New: '', Old: '', Type: 'None' }, - { - Annotations: null, - Name: 'Interval', - New: '15000000000', - Old: '10000000000', - Type: 'Edited', - }, - { Annotations: null, Name: 'Method', New: '', Old: '', Type: 'None' }, - { Annotations: null, Name: 'Name', New: 'alive', Old: 'alive', Type: 'None' }, - { Annotations: null, Name: 'Path', New: '', Old: '', Type: 'None' }, - { Annotations: null, Name: 'PortLabel', New: '', Old: '', Type: 'None' }, - { Annotations: null, Name: 'Protocol', New: '', Old: '', Type: 'None' }, - { - Annotations: null, - Name: 'TLSSkipVerify', - New: 'false', - Old: 'false', - Type: 'None', - }, - { - Annotations: null, - Name: 'Timeout', - New: '7000000000', - Old: '2000000000', - Type: 'Edited', - }, - { Annotations: null, Name: 'Type', New: 'tcp', Old: 'tcp', Type: 'None' }, - ], - Name: 'Check', - Objects: null, - Type: 'Edited', - }, - ], - Type: 'Edited', - }, - ], - Type: 'Edited', - }, - ], - Type: 'Edited', - Updates: null, - }, - { - Fields: [ - { Annotations: null, Name: 'Count', New: '1', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Meta[key]', New: 'value', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Meta[red]', New: 'fish', Old: '', Type: 'Added' }, - ], - Name: 'cache2', - Objects: [ - { - Fields: [ - { Annotations: null, Name: 'Attempts', New: '2', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Delay', New: '15000000000', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Interval', New: '1800000000000', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Mode', New: 'fail', Old: '', Type: 'Added' }, - ], - Name: 'RestartPolicy', - Objects: null, - Type: 'Added', - }, - { - Fields: [ - { Annotations: null, Name: 'Migrate', New: 'false', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'SizeMB', New: '300', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Sticky', New: 'false', Old: '', Type: 'Added' }, - ], - Name: 'EphemeralDisk', - Objects: null, - Type: 'Added', - }, - ], - Tasks: [ - { - Annotations: null, - Fields: [ - { Annotations: null, Name: 'Driver', New: 'docker', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'KillTimeout', New: '5000000000', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'Leader', New: 'false', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'ShutdownDelay', New: '0', Old: '', Type: 'Added' }, - ], - Name: 'redis', - Objects: [ - { - Fields: [ - { Annotations: null, Name: 'image', New: 'redis:3.2', Old: '', Type: 'Added' }, - { - Annotations: null, - Name: 'port_map[0][db]', - New: '6379', - Old: '', - Type: 'Added', - }, - ], - Name: 'Config', - Objects: null, - Type: 'Added', - }, - { - Fields: [ - { Annotations: null, Name: 'CPU', New: '500', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'DiskMB', New: '0', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'IOPS', New: '0', Old: '', Type: 'Added' }, - { Annotations: null, Name: 'MemoryMB', New: '256', Old: '', Type: 'Added' }, - ], - Name: 'Resources', - Objects: [ - { - Fields: [ - { Annotations: null, Name: 'MBits', New: '10', Old: '', Type: 'Added' }, - ], - Name: 'Network', - Objects: [ - { - Fields: [ - { Annotations: null, Name: 'Label', New: 'db', Old: '', Type: 'Added' }, - ], - Name: 'Dynamic Port', - Objects: null, - Type: 'Added', - }, - ], - Type: 'Added', - }, - ], - Type: 'Added', - }, - ], - Type: 'Added', - }, - ], - Type: 'Added', - Updates: null, - }, - ], - Type: 'Edited', - }, -}); diff --git a/ui/app/components/freestyle/sg-distribution-bar-jumbo.js b/ui/app/components/freestyle/sg-distribution-bar-jumbo.js deleted file mode 100644 index 9176d6b7ca2..00000000000 --- a/ui/app/components/freestyle/sg-distribution-bar-jumbo.js +++ /dev/null @@ -1,13 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; - -export default Component.extend({ - distributionBarData: computed(() => { - return [ - { label: 'one', value: 10 }, - { label: 'two', value: 20 }, - { label: 'three', value: 0 }, - { label: 'four', value: 35 }, - ]; - }), -}); diff --git a/ui/app/components/freestyle/sg-distribution-bar.js b/ui/app/components/freestyle/sg-distribution-bar.js deleted file mode 100644 index f4e2f80431e..00000000000 --- a/ui/app/components/freestyle/sg-distribution-bar.js +++ /dev/null @@ -1,47 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; - -export default Component.extend({ - timerTicks: 0, - - startTimer: function() { - this.set( - 'timer', - setInterval(() => { - this.incrementProperty('timerTicks'); - }, 500) - ); - }.on('init'), - - willDestroy() { - clearInterval(this.timer); - }, - - distributionBarDatum: computed(() => { - return [{ label: 'one', value: 10 }]; - }), - - distributionBarData: computed(() => { - return [ - { label: 'one', value: 10 }, - { label: 'two', value: 20 }, - { label: 'three', value: 30 }, - ]; - }), - - distributionBarDataWithClasses: computed(() => { - return [ - { label: 'Queued', value: 10, className: 'queued' }, - { label: 'Complete', value: 20, className: 'complete' }, - { label: 'Failed', value: 30, className: 'failed' }, - ]; - }), - - distributionBarDataRotating: computed('timerTicks', () => { - return [ - { label: 'one', value: Math.round(Math.random() * 50) }, - { label: 'two', value: Math.round(Math.random() * 50) }, - { label: 'three', value: Math.round(Math.random() * 50) }, - ]; - }), -}); diff --git a/ui/app/components/freestyle/sg-dropdown.js b/ui/app/components/freestyle/sg-dropdown.js deleted file mode 100644 index bc9980efc47..00000000000 --- a/ui/app/components/freestyle/sg-dropdown.js +++ /dev/null @@ -1,30 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({ - options: [ - { name: 'Consul' }, - { name: 'Nomad' }, - { name: 'Packer' }, - { name: 'Terraform' }, - { name: 'Vagrant' }, - { name: 'Vault' }, - ], - - manyOptions: [ - 'One', - 'Two', - 'Three', - 'Four', - 'Five', - 'Six', - 'Seven', - 'Eight', - 'Nine', - 'Ten', - 'Eleven', - 'Twelve', - 'Thirteen', - 'Fourteen', - 'Fifteen', - ].map(name => ({ name })), -}); diff --git a/ui/app/components/freestyle/sg-json-viewer.js b/ui/app/components/freestyle/sg-json-viewer.js deleted file mode 100644 index 5eea5837cf1..00000000000 --- a/ui/app/components/freestyle/sg-json-viewer.js +++ /dev/null @@ -1,148 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({ - jsonSmall: { - foo: 'bar', - number: 123456789, - products: ['Consul', 'Nomad', 'Packer', 'Terraform', 'Vagrant', 'Vault'], - currentTime: new Date().toISOString(), - nested: { - obj: 'ject', - }, - nonexistent: null, - huh: undefined, - isTrue: false, - }, - - jsonLarge: { - Stop: false, - Region: 'global', - Namespace: 'default', - ID: 'syslog', - ParentID: '', - Name: 'syslog', - Type: 'system', - Priority: 50, - AllAtOnce: false, - Datacenters: ['dc1', 'dc2'], - Constraints: null, - TaskGroups: [ - { - Name: 'syslog', - Count: 1, - Update: { - Stagger: 10000000000, - MaxParallel: 1, - HealthCheck: 'checks', - MinHealthyTime: 10000000000, - HealthyDeadline: 300000000000, - ProgressDeadline: 600000000000, - AutoRevert: false, - Canary: 0, - }, - Migrate: null, - Constraints: [ - { - LTarget: '', - RTarget: '', - Operand: 'distinct_hosts', - }, - ], - RestartPolicy: { - Attempts: 10, - Interval: 300000000000, - Delay: 25000000000, - Mode: 'delay', - }, - Tasks: [ - { - Name: 'syslog', - Driver: 'docker', - User: '', - Config: { - port_map: [ - { - tcp: 601.0, - udp: 514.0, - }, - ], - image: 'balabit/syslog-ng:latest', - }, - Env: null, - Services: null, - Vault: null, - Templates: null, - Constraints: null, - Resources: { - CPU: 500, - MemoryMB: 256, - DiskMB: 0, - IOPS: 0, - Networks: [ - { - Device: '', - CIDR: '', - IP: '', - MBits: 10, - ReservedPorts: [ - { - Label: 'udp', - Value: 514, - }, - { - Label: 'tcp', - Value: 601, - }, - ], - DynamicPorts: null, - }, - ], - }, - DispatchPayload: null, - Meta: null, - KillTimeout: 5000000000, - LogConfig: { - MaxFiles: 10, - MaxFileSizeMB: 10, - }, - Artifacts: null, - Leader: false, - ShutdownDelay: 0, - KillSignal: '', - }, - ], - EphemeralDisk: { - Sticky: false, - SizeMB: 300, - Migrate: false, - }, - Meta: null, - ReschedulePolicy: null, - }, - ], - Update: { - Stagger: 10000000000, - MaxParallel: 1, - HealthCheck: '', - MinHealthyTime: 0, - HealthyDeadline: 0, - ProgressDeadline: 0, - AutoRevert: false, - Canary: 0, - }, - Periodic: null, - ParameterizedJob: null, - Dispatched: false, - Payload: null, - Meta: null, - VaultToken: '', - Status: 'running', - StatusDescription: '', - Stable: false, - Version: 0, - SubmitTime: 1530052201331477665, - CreateIndex: 27, - ModifyIndex: 27, - JobModifyIndex: 27, - }, -}); diff --git a/ui/app/components/freestyle/sg-line-chart.js b/ui/app/components/freestyle/sg-line-chart.js deleted file mode 100644 index a5c2466586c..00000000000 --- a/ui/app/components/freestyle/sg-line-chart.js +++ /dev/null @@ -1,76 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; -import d3TimeFormat from 'd3-time-format'; - -export default Component.extend({ - timerTicks: 0, - - startTimer: function() { - this.set( - 'timer', - setInterval(() => { - this.incrementProperty('timerTicks'); - - const ref = this.lineChartLive; - ref.addObject({ ts: Date.now(), val: Math.random() * 30 + 20 }); - if (ref.length > 60) { - ref.splice(0, ref.length - 60); - } - }, 500) - ); - }.on('init'), - - willDestroy() { - clearInterval(this.timer); - }, - - lineChartData: computed(() => { - return [ - { year: 2010, value: 10 }, - { year: 2011, value: 10 }, - { year: 2012, value: 20 }, - { year: 2013, value: 30 }, - { year: 2014, value: 50 }, - { year: 2015, value: 80 }, - { year: 2016, value: 130 }, - { year: 2017, value: 210 }, - { year: 2018, value: 340 }, - ]; - }), - - lineChartMild: computed(() => { - return [ - { year: 2010, value: 100 }, - { year: 2011, value: 90 }, - { year: 2012, value: 120 }, - { year: 2013, value: 130 }, - { year: 2014, value: 115 }, - { year: 2015, value: 105 }, - { year: 2016, value: 90 }, - { year: 2017, value: 85 }, - { year: 2018, value: 90 }, - ]; - }), - - lineChartGapData: computed(() => { - return [ - { year: 2010, value: 10 }, - { year: 2011, value: 10 }, - { year: 2012, value: null }, - { year: 2013, value: 30 }, - { year: 2014, value: 50 }, - { year: 2015, value: 80 }, - { year: 2016, value: null }, - { year: 2017, value: 210 }, - { year: 2018, value: 340 }, - ]; - }), - - lineChartLive: computed(() => { - return []; - }), - - secondsFormat() { - return d3TimeFormat.timeFormat('%H:%M:%S'); - }, -}); diff --git a/ui/app/components/freestyle/sg-log-stream.js b/ui/app/components/freestyle/sg-log-stream.js deleted file mode 100644 index a2d736975da..00000000000 --- a/ui/app/components/freestyle/sg-log-stream.js +++ /dev/null @@ -1,33 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({ - mode1: 'stdout', - isPlaying1: true, - - sampleOutput: `Sample output -> 1 -> 2 -> 3 -[00:12:58] Log output here -[00:15:29] [ERR] Uh oh -Loading. -Loading.. -Loading... - - >> Done! << - -`, - - sampleError: `Sample error - -[====|--------------------] 20% - -!!! Unrecoverable error: - - Cannot continue beyond this point. Exception should be caught. - This is not a mistake. You did something wrong. Check the code. - No, you will not receive any more details or guidance from this - error message. - -`, -}); diff --git a/ui/app/components/freestyle/sg-multi-select-dropdown.js b/ui/app/components/freestyle/sg-multi-select-dropdown.js deleted file mode 100644 index cbc51b73009..00000000000 --- a/ui/app/components/freestyle/sg-multi-select-dropdown.js +++ /dev/null @@ -1,45 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; - -export default Component.extend({ - options1: computed(() => [ - { key: 'option-1', label: 'Option One' }, - { key: 'option-2', label: 'Option Two' }, - { key: 'option-3', label: 'Option Three' }, - { key: 'option-4', label: 'Option Four' }, - { key: 'option-5', label: 'Option Five' }, - ]), - - selection1: computed(() => ['option-2', 'option-4', 'option-5']), - - optionsMany: computed(() => - Array(100) - .fill(null) - .map((_, i) => ({ label: `Option ${i}`, key: `option-${i}` })) - ), - selectionMany: computed(() => []), - - optionsDatacenter: computed(() => [ - { key: 'pdx-1', label: 'pdx-1' }, - { key: 'jfk-1', label: 'jfk-1' }, - { key: 'jfk-2', label: 'jfk-2' }, - { key: 'muc-1', label: 'muc-1' }, - ]), - selectionDatacenter: computed(() => ['jfk-1', 'jfk-2']), - - optionsType: computed(() => [ - { key: 'batch', label: 'Batch' }, - { key: 'service', label: 'Service' }, - { key: 'system', label: 'System' }, - { key: 'periodic', label: 'Periodic' }, - { key: 'parameterized', label: 'Parameterized' }, - ]), - selectionType: computed(() => ['system', 'service']), - - optionsStatus: computed(() => [ - { key: 'pending', label: 'Pending' }, - { key: 'running', label: 'Running' }, - { key: 'dead', label: 'Dead' }, - ]), - selectionStatus: computed(() => []), -}); diff --git a/ui/app/components/freestyle/sg-progress-bar.js b/ui/app/components/freestyle/sg-progress-bar.js deleted file mode 100644 index 9748dd60332..00000000000 --- a/ui/app/components/freestyle/sg-progress-bar.js +++ /dev/null @@ -1,35 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; - -export default Component.extend({ - timerTicks: 0, - - startTimer: function() { - this.set( - 'timer', - setInterval(() => { - this.incrementProperty('timerTicks'); - }, 1000) - ); - }.on('init'), - - willDestroy() { - clearInterval(this.timer); - }, - - denominator: computed('timerTicks', function() { - return Math.round(Math.random() * 1000); - }), - - percentage: computed('timerTicks', function() { - return Math.round(Math.random() * 100) / 100; - }), - - numerator: computed('denominator', 'percentage', function() { - return Math.round(this.denominator * this.percentage * 100) / 100; - }), - - liveDetails: computed('denominator', 'numerator', 'percentage', function() { - return this.getProperties('denominator', 'numerator', 'percentage'); - }), -}); diff --git a/ui/app/components/freestyle/sg-stats-time-series.js b/ui/app/components/freestyle/sg-stats-time-series.js deleted file mode 100644 index e84fa0fd92a..00000000000 --- a/ui/app/components/freestyle/sg-stats-time-series.js +++ /dev/null @@ -1,76 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; -import d3TimeFormat from 'd3-time-format'; -import moment from 'moment'; - -export default Component.extend({ - timerTicks: 0, - - startTimer: function() { - this.set( - 'timer', - setInterval(() => { - const metricsHigh = this.metricsHigh; - const prev = metricsHigh.length ? metricsHigh[metricsHigh.length - 1].value : 0.9; - this.appendTSValue( - metricsHigh, - Math.min(Math.max(prev + Math.random() * 0.05 - 0.025, 0.5), 1) - ); - - const metricsLow = this.metricsLow; - const prev2 = metricsLow.length ? metricsLow[metricsLow.length - 1].value : 0.1; - this.appendTSValue( - metricsLow, - Math.min(Math.max(prev2 + Math.random() * 0.05 - 0.025, 0), 0.5) - ); - }, 1000) - ); - }.on('init'), - - appendTSValue(array, value, maxLength = 300) { - array.addObject({ - timestamp: Date.now(), - value, - }); - - if (array.length > maxLength) { - array.splice(0, array.length - maxLength); - } - }, - - willDestroy() { - clearInterval(this.timer); - }, - - metricsHigh: computed(() => { - return []; - }), - - metricsLow: computed(() => { - return []; - }), - - staticMetrics: computed(() => { - const ts = offset => - moment() - .subtract(offset, 'm') - .toDate(); - return [ - { timestamp: ts(20), value: 0.5 }, - { timestamp: ts(18), value: 0.5 }, - { timestamp: ts(16), value: 0.4 }, - { timestamp: ts(14), value: 0.3 }, - { timestamp: ts(12), value: 0.9 }, - { timestamp: ts(10), value: 0.3 }, - { timestamp: ts(8), value: 0.3 }, - { timestamp: ts(6), value: 0.4 }, - { timestamp: ts(4), value: 0.5 }, - { timestamp: ts(2), value: 0.6 }, - { timestamp: ts(0), value: 0.6 }, - ]; - }), - - secondsFormat() { - return d3TimeFormat.timeFormat('%H:%M:%S'); - }, -}); diff --git a/ui/app/components/freestyle/sg-table-configuration.js b/ui/app/components/freestyle/sg-table-configuration.js deleted file mode 100644 index 2e5a8e3ca1d..00000000000 --- a/ui/app/components/freestyle/sg-table-configuration.js +++ /dev/null @@ -1,24 +0,0 @@ -import Component from '@ember/component'; - -export default Component.extend({ - attributes: { - key: 'val', - deep: { - key: 'val', - more: 'stuff', - }, - array: ['one', 'two', 'three', 'four'], - very: { - deep: { - key: { - incoming: { - one: 1, - two: 2, - three: 3, - four: 'surprisingly long value that is unlike the other properties in this object', - }, - }, - }, - }, - }, -}); diff --git a/ui/app/components/freestyle/sg-table.js b/ui/app/components/freestyle/sg-table.js deleted file mode 100644 index 759abc8724c..00000000000 --- a/ui/app/components/freestyle/sg-table.js +++ /dev/null @@ -1,118 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; -import productMetadata from 'nomad-ui/utils/styleguide/product-metadata'; - -export default Component.extend({ - searchTerm: '', - - currentPage: 1, - sortProperty: 'name', - sortDescending: false, - - shortList: productMetadata, - - longList: [ - { city: 'New York', growth: 0.048, population: '8405837', rank: '1', state: 'New York' }, - { city: 'Los Angeles', growth: 0.048, population: '3884307', rank: '2', state: 'California' }, - { city: 'Chicago', growth: -0.061, population: '2718782', rank: '3', state: 'Illinois' }, - { city: 'Houston', growth: 0.11, population: '2195914', rank: '4', state: 'Texas' }, - { - city: 'Philadelphia', - growth: 0.026, - population: '1553165', - rank: '5', - state: 'Pennsylvania', - }, - { city: 'Phoenix', growth: 0.14, population: '1513367', rank: '6', state: 'Arizona' }, - { city: 'San Antonio', growth: 0.21, population: '1409019', rank: '7', state: 'Texas' }, - { city: 'San Diego', growth: 0.105, population: '1355896', rank: '8', state: 'California' }, - { city: 'Dallas', growth: 0.056, population: '1257676', rank: '9', state: 'Texas' }, - { city: 'San Jose', growth: 0.105, population: '998537', rank: '10', state: 'California' }, - { city: 'Austin', growth: 0.317, population: '885400', rank: '11', state: 'Texas' }, - { city: 'Indianapolis', growth: 0.078, population: '843393', rank: '12', state: 'Indiana' }, - { city: 'Jacksonville', growth: 0.143, population: '842583', rank: '13', state: 'Florida' }, - { - city: 'San Francisco', - growth: 0.077, - population: '837442', - rank: '14', - state: 'California', - }, - { city: 'Columbus', growth: 0.148, population: '822553', rank: '15', state: 'Ohio' }, - { - city: 'Charlotte', - growth: 0.391, - population: '792862', - rank: '16', - state: 'North Carolina', - }, - { city: 'Fort Worth', growth: 0.451, population: '792727', rank: '17', state: 'Texas' }, - { city: 'Detroit', growth: -0.271, population: '688701', rank: '18', state: 'Michigan' }, - { city: 'El Paso', growth: 0.194, population: '674433', rank: '19', state: 'Texas' }, - { city: 'Memphis', growth: -0.053, population: '653450', rank: '20', state: 'Tennessee' }, - { city: 'Seattle', growth: 0.156, population: '652405', rank: '21', state: 'Washington' }, - { city: 'Denver', growth: 0.167, population: '649495', rank: '22', state: 'Colorado' }, - { - city: 'Washington', - growth: 0.13, - population: '646449', - rank: '23', - state: 'District of Columbia', - }, - { city: 'Boston', growth: 0.094, population: '645966', rank: '24', state: 'Massachusetts' }, - { - city: 'Nashville-Davidson', - growth: 0.162, - population: '634464', - rank: '25', - state: 'Tennessee', - }, - { city: 'Baltimore', growth: -0.04, population: '622104', rank: '26', state: 'Maryland' }, - { city: 'Oklahoma City', growth: 0.202, population: '610613', rank: '27', state: 'Oklahoma' }, - { - city: 'Louisville/Jefferson County', - growth: 0.1, - population: '609893', - rank: '28', - state: 'Kentucky', - }, - { city: 'Portland', growth: 0.15, population: '609456', rank: '29', state: 'Oregon' }, - { city: 'Las Vegas', growth: 0.245, population: '603488', rank: '30', state: 'Nevada' }, - { city: 'Milwaukee', growth: 0.003, population: '599164', rank: '31', state: 'Wisconsin' }, - { city: 'Albuquerque', growth: 0.235, population: '556495', rank: '32', state: 'New Mexico' }, - { city: 'Tucson', growth: 0.075, population: '526116', rank: '33', state: 'Arizona' }, - { city: 'Fresno', growth: 0.183, population: '509924', rank: '34', state: 'California' }, - { city: 'Sacramento', growth: 0.172, population: '479686', rank: '35', state: 'California' }, - { city: 'Long Beach', growth: 0.015, population: '469428', rank: '36', state: 'California' }, - { city: 'Kansas City', growth: 0.055, population: '467007', rank: '37', state: 'Missouri' }, - { city: 'Mesa', growth: 0.135, population: '457587', rank: '38', state: 'Arizona' }, - { city: 'Virginia Beach', growth: 0.051, population: '448479', rank: '39', state: 'Virginia' }, - { city: 'Atlanta', growth: 0.062, population: '447841', rank: '40', state: 'Georgia' }, - { - city: 'Colorado Springs', - growth: 0.214, - population: '439886', - rank: '41', - state: 'Colorado', - }, - { city: 'Omaha', growth: 0.059, population: '434353', rank: '42', state: 'Nebraska' }, - { city: 'Raleigh', growth: 0.487, population: '431746', rank: '43', state: 'North Carolina' }, - { city: 'Miami', growth: 0.149, population: '417650', rank: '44', state: 'Florida' }, - { city: 'Oakland', growth: 0.013, population: '406253', rank: '45', state: 'California' }, - { city: 'Minneapolis', growth: 0.045, population: '400070', rank: '46', state: 'Minnesota' }, - { city: 'Tulsa', growth: 0.013, population: '398121', rank: '47', state: 'Oklahoma' }, - { city: 'Cleveland', growth: -0.181, population: '390113', rank: '48', state: 'Ohio' }, - { city: 'Wichita', growth: 0.097, population: '386552', rank: '49', state: 'Kansas' }, - { city: 'Arlington', growth: 0.133, population: '379577', rank: '50', state: 'Texas' }, - ], - - filteredShortList: computed('searchTerm', 'shortList.[]', function() { - const term = this.searchTerm.toLowerCase(); - return this.shortList.filter(product => product.name.toLowerCase().includes(term)); - }), - - sortedShortList: computed('shortList.[]', 'sortProperty', 'sortDescending', function() { - const sorted = this.shortList.sortBy(this.sortProperty); - return this.sortDescending ? sorted.reverse() : sorted; - }), -}); diff --git a/ui/app/components/freestyle/sg-timeline.js b/ui/app/components/freestyle/sg-timeline.js deleted file mode 100644 index c84ac3ab3c3..00000000000 --- a/ui/app/components/freestyle/sg-timeline.js +++ /dev/null @@ -1,8 +0,0 @@ -import Component from '@ember/component'; -import { computed } from '@ember/object'; -import moment from 'moment'; - -export default Component.extend({ - yesterday: computed(() => moment().subtract(1, 'd')), - today: computed(() => moment()), -}); diff --git a/ui/app/components/job-deployments-stream.js b/ui/app/components/job-deployments-stream.js index 4679117b9e5..7a5e3d5d5e5 100644 --- a/ui/app/components/job-deployments-stream.js +++ b/ui/app/components/job-deployments-stream.js @@ -1,12 +1,13 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import moment from 'moment'; export default Component.extend({ tagName: 'ol', classNames: ['timeline'], - deployments: computed(() => []), + deployments: overridable(() => []), sortedDeployments: computed('deployments.@each.versionSubmitTime', function() { return this.deployments diff --git a/ui/app/components/job-page/parts/recent-allocations.js b/ui/app/components/job-page/parts/recent-allocations.js index 9729eb47c98..005c5a4ba6e 100644 --- a/ui/app/components/job-page/parts/recent-allocations.js +++ b/ui/app/components/job-page/parts/recent-allocations.js @@ -11,7 +11,7 @@ export default Component.extend({ sortProperty: 'modifyIndex', sortDescending: true, sortedAllocations: computed('job.allocations.@each.modifyIndex', function() { - return new PromiseArray({ + return PromiseArray.create({ promise: this.get('job.allocations').then(allocations => allocations .sortBy('modifyIndex') diff --git a/ui/app/components/job-versions-stream.js b/ui/app/components/job-versions-stream.js index 5d2f0d43e67..3fc938ea0d6 100644 --- a/ui/app/components/job-versions-stream.js +++ b/ui/app/components/job-versions-stream.js @@ -1,12 +1,13 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import moment from 'moment'; export default Component.extend({ tagName: 'ol', classNames: ['timeline'], - versions: computed(() => []), + versions: overridable(() => []), // Passes through to the job-diff component verbose: true, diff --git a/ui/app/components/line-chart.js b/ui/app/components/line-chart.js index d09d2d1a517..138d8d60d8d 100644 --- a/ui/app/components/line-chart.js +++ b/ui/app/components/line-chart.js @@ -1,5 +1,6 @@ import Component from '@ember/component'; import { computed, observer } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import { guidFor } from '@ember/object/internals'; import { run } from '@ember/runloop'; import d3 from 'd3-selection'; @@ -184,7 +185,7 @@ export default Component.extend(WindowResizable, { return axis && axis.getBBox().width; }), - xAxisOffset: computed('height', 'xAxisHeight', function() { + xAxisOffset: overridable('height', 'xAxisHeight', function() { return this.height - this.xAxisHeight; }), diff --git a/ui/app/components/list-accordion.js b/ui/app/components/list-accordion.js index 852c112b9c5..5f83b5ee035 100644 --- a/ui/app/components/list-accordion.js +++ b/ui/app/components/list-accordion.js @@ -1,11 +1,12 @@ import Component from '@ember/component'; import { computed, get } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; export default Component.extend({ classNames: ['accordion'], key: 'id', - source: computed(() => []), + source: overridable(() => []), onToggle(/* item, isOpen */) {}, startExpanded: false, @@ -30,5 +31,5 @@ export default Component.extend({ // When source updates come in, the state cache is used to preserve // open/close state. - stateCache: computed(() => []), + stateCache: overridable(() => []), }); diff --git a/ui/app/components/list-pagination.js b/ui/app/components/list-pagination.js index 36f372041cc..322a7db27a0 100644 --- a/ui/app/components/list-pagination.js +++ b/ui/app/components/list-pagination.js @@ -1,8 +1,9 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; export default Component.extend({ - source: computed(() => []), + source: overridable(() => []), size: 25, page: 1, spread: 2, diff --git a/ui/app/components/list-table.js b/ui/app/components/list-table.js index 1bf0999b958..439f1d6a4f0 100644 --- a/ui/app/components/list-table.js +++ b/ui/app/components/list-table.js @@ -1,11 +1,12 @@ import Component from '@ember/component'; import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; export default Component.extend({ tagName: 'table', classNames: ['table'], - source: computed(() => []), + source: overridable(() => []), // Plan for a future with metadata (e.g., isSelected) decoratedSource: computed('source.[]', function() { diff --git a/ui/app/components/multi-select-dropdown.js b/ui/app/components/multi-select-dropdown.js index d837b0ef8ef..3bd9febccf7 100644 --- a/ui/app/components/multi-select-dropdown.js +++ b/ui/app/components/multi-select-dropdown.js @@ -1,5 +1,5 @@ import Component from '@ember/component'; -import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import { run } from '@ember/runloop'; const TAB = 9; @@ -11,8 +11,8 @@ const ARROW_DOWN = 40; export default Component.extend({ classNames: ['dropdown'], - options: computed(() => []), - selection: computed(() => []), + options: overridable(() => []), + selection: overridable(() => []), onSelect() {}, diff --git a/ui/app/components/popover-menu.js b/ui/app/components/popover-menu.js new file mode 100644 index 00000000000..92824e5efd4 --- /dev/null +++ b/ui/app/components/popover-menu.js @@ -0,0 +1,57 @@ +import Component from '@ember/component'; +import { run } from '@ember/runloop'; + +const TAB = 9; +const ARROW_DOWN = 40; +const FOCUSABLE = [ + 'a:not([disabled])', + 'button:not([disabled])', + 'input:not([disabled]):not([type="hidden"])', + 'textarea:not([disabled])', + '[tabindex]:not([disabled]):not([tabindex="-1"])', +].join(', '); + +export default Component.extend({ + classnames: ['popover'], + + triggerClass: '', + isOpen: false, + isDisabled: false, + label: '', + + dropdown: null, + + capture(dropdown) { + // It's not a good idea to grab a dropdown reference like this, but it's necessary + // in order to invoke dropdown.actions.close in traverseList as well as + // dropdown.actions.reposition when the label or selection length changes. + this.set('dropdown', dropdown); + }, + + didReceiveAttrs() { + const dropdown = this.dropdown; + if (this.isOpen && dropdown) { + run.scheduleOnce('afterRender', () => { + dropdown.actions.reposition(); + }); + } + }, + + actions: { + openOnArrowDown(dropdown, e) { + if (!this.isOpen && e.keyCode === ARROW_DOWN) { + dropdown.actions.open(e); + e.preventDefault(); + } else if (this.isOpen && (e.keyCode === TAB || e.keyCode === ARROW_DOWN)) { + const optionsId = this.element.querySelector('.popover-trigger').getAttribute('aria-owns'); + const popoverContentEl = document.querySelector(`#${optionsId}`); + const firstFocusableElement = popoverContentEl.querySelector(FOCUSABLE); + + if (firstFocusableElement) { + firstFocusableElement.focus(); + e.preventDefault(); + } + } + }, + }, +}); diff --git a/ui/app/components/reschedule-event-row.js b/ui/app/components/reschedule-event-row.js index 8072ea29a4e..6fc56605181 100644 --- a/ui/app/components/reschedule-event-row.js +++ b/ui/app/components/reschedule-event-row.js @@ -1,5 +1,5 @@ import Component from '@ember/component'; -import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import { inject as service } from '@ember/service'; export default Component.extend({ @@ -10,7 +10,7 @@ export default Component.extend({ allocationId: null, // An allocation can also be provided directly - allocation: computed('allocationId', function() { + allocation: overridable('allocationId', function() { return this.store.findRecord('allocation', this.allocationId); }), diff --git a/ui/app/components/streaming-file.js b/ui/app/components/streaming-file.js index 9a85d41a19f..5885c2bc8bf 100644 --- a/ui/app/components/streaming-file.js +++ b/ui/app/components/streaming-file.js @@ -82,14 +82,16 @@ export default Component.extend(WindowResizable, { }); // Follow the log if the scroll position is near the bottom of the cli window - this.logger.on('tick', () => { - run.scheduleOnce('afterRender', () => this.synchronizeScrollPosition()); - }); + this.logger.on('tick', this, 'scheduleScrollSynchronization'); yield this.logger.startStreaming(); - this.logger.off('tick'); + this.logger.off('tick', this, 'scheduleScrollSynchronization'); }), + scheduleScrollSynchronization() { + run.scheduleOnce('afterRender', () => this.synchronizeScrollPosition()); + }, + willDestroy() { this.logger.stop(); }, diff --git a/ui/app/components/toggle.js b/ui/app/components/toggle.js new file mode 100644 index 00000000000..e4becf15398 --- /dev/null +++ b/ui/app/components/toggle.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; + +export default Component.extend({ + tagName: 'label', + classNames: ['toggle'], + classNameBindings: ['isDisabled:is-disabled', 'isActive:is-active'], + + 'data-test-label': true, + + isActive: false, + isDisabled: false, + onToggle() {}, +}); diff --git a/ui/app/components/two-step-button.js b/ui/app/components/two-step-button.js index 1499edbf090..15fe6aad607 100644 --- a/ui/app/components/two-step-button.js +++ b/ui/app/components/two-step-button.js @@ -13,6 +13,8 @@ export default Component.extend({ confirmationMessage: '', awaitingConfirmation: false, disabled: false, + alignRight: false, + isInfoAction: false, onConfirm() {}, onCancel() {}, diff --git a/ui/app/controllers/allocations/allocation/index.js b/ui/app/controllers/allocations/allocation/index.js index ec733278138..caec2d8ae59 100644 --- a/ui/app/controllers/allocations/allocation/index.js +++ b/ui/app/controllers/allocations/allocation/index.js @@ -1,6 +1,7 @@ import Controller from '@ember/controller'; import { inject as service } from '@ember/service'; import { computed, observer } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import { alias } from '@ember/object/computed'; import { task } from 'ember-concurrency'; import Sortable from 'nomad-ui/mixins/sortable'; @@ -24,7 +25,7 @@ export default Controller.extend(Sortable, { // Set in the route preempter: null, - error: computed(() => { + error: overridable(() => { // { title, description } return null; }), diff --git a/ui/app/controllers/allocations/allocation/task/index.js b/ui/app/controllers/allocations/allocation/task/index.js index ce1d3f847f1..9a8733d925b 100644 --- a/ui/app/controllers/allocations/allocation/task/index.js +++ b/ui/app/controllers/allocations/allocation/task/index.js @@ -1,5 +1,6 @@ import Controller from '@ember/controller'; import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import { alias } from '@ember/object/computed'; import { task } from 'ember-concurrency'; @@ -22,7 +23,7 @@ export default Controller.extend({ .sortBy('name'); }), - error: computed(() => { + error: overridable(() => { // { title, description } return null; }), diff --git a/ui/app/controllers/clients/client.js b/ui/app/controllers/clients/client.js index 9044fd1f7e9..faa3886faa8 100644 --- a/ui/app/controllers/clients/client.js +++ b/ui/app/controllers/clients/client.js @@ -1,8 +1,10 @@ import { alias } from '@ember/object/computed'; import Controller from '@ember/controller'; -import { computed } from '@ember/object'; +import { computed, observer } from '@ember/object'; +import { task } from 'ember-concurrency'; import Sortable from 'nomad-ui/mixins/sortable'; import Searchable from 'nomad-ui/mixins/searchable'; +import messageFromAdapterError from 'nomad-ui/utils/message-from-adapter-error'; export default Controller.extend(Sortable, Searchable, { queryParams: { @@ -13,6 +15,9 @@ export default Controller.extend(Sortable, Searchable, { onlyPreemptions: 'preemptions', }, + // Set in the route + flagAsDraining: false, + currentPage: 1, pageSize: 8, @@ -36,6 +41,13 @@ export default Controller.extend(Sortable, Searchable, { listToSearch: alias('listSorted'), sortedAllocations: alias('listSearched'), + eligibilityError: null, + stopDrainError: null, + drainError: null, + showDrainNotification: false, + showDrainUpdateNotification: false, + showDrainStoppedNotification: false, + preemptions: computed('model.allocations.@each.wasPreempted', function() { return this.model.allocations.filterBy('wasPreempted'); }), @@ -50,6 +62,46 @@ export default Controller.extend(Sortable, Searchable, { return this.get('model.drivers').sortBy('name'); }), + setEligibility: task(function*(value) { + try { + yield value ? this.model.setEligible() : this.model.setIneligible(); + } catch (err) { + const error = messageFromAdapterError(err) || 'Could not set eligibility'; + this.set('eligibilityError', error); + } + }).drop(), + + stopDrain: task(function*() { + try { + this.set('flagAsDraining', false); + yield this.model.cancelDrain(); + this.set('showDrainStoppedNotification', true); + } catch (err) { + this.set('flagAsDraining', true); + const error = messageFromAdapterError(err) || 'Could not stop drain'; + this.set('stopDrainError', error); + } + }).drop(), + + forceDrain: task(function*() { + try { + yield this.model.forceDrain({ + IgnoreSystemJobs: this.model.drainStrategy.ignoreSystemJobs, + }); + } catch (err) { + const error = messageFromAdapterError(err) || 'Could not force drain'; + this.set('drainError', error); + } + }).drop(), + + triggerDrainNotification: observer('model.isDraining', function() { + if (!this.model.isDraining && this.flagAsDraining) { + this.set('showDrainNotification', true); + } + + this.set('flagAsDraining', this.model.isDraining); + }), + actions: { gotoAllocation(allocation) { this.transitionToRoute('allocations.allocation', allocation); @@ -58,5 +110,14 @@ export default Controller.extend(Sortable, Searchable, { setPreemptionFilter(value) { this.set('onlyPreemptions', value); }, + + drainNotify(isUpdating) { + this.set('showDrainUpdateNotification', isUpdating); + }, + + drainError(err) { + const error = messageFromAdapterError(err) || 'Could not run drain'; + this.set('drainError', error); + }, }, }); diff --git a/ui/app/controllers/clients/index.js b/ui/app/controllers/clients/index.js index ea4bd6d2cc7..d37c23e5f2c 100644 --- a/ui/app/controllers/clients/index.js +++ b/ui/app/controllers/clients/index.js @@ -3,116 +3,120 @@ import Controller, { inject as controller } from '@ember/controller'; import { computed } from '@ember/object'; import { scheduleOnce } from '@ember/runloop'; import intersection from 'lodash.intersection'; -import Sortable from 'nomad-ui/mixins/sortable'; +import SortableFactory from 'nomad-ui/mixins/sortable-factory'; import Searchable from 'nomad-ui/mixins/searchable'; import { serialize, deserializedQueryParam as selection } from 'nomad-ui/utils/qp-serialize'; -export default Controller.extend(Sortable, Searchable, { - clientsController: controller('clients'), - - nodes: alias('model.nodes'), - agents: alias('model.agents'), - - queryParams: { - currentPage: 'page', - searchTerm: 'search', - sortProperty: 'sort', - sortDescending: 'desc', - qpClass: 'class', - qpState: 'state', - qpDatacenter: 'dc', - }, - - currentPage: 1, - pageSize: 8, - - sortProperty: 'modifyIndex', - sortDescending: true, - - searchProps: computed(() => ['id', 'name', 'datacenter']), - - qpClass: '', - qpState: '', - qpDatacenter: '', - - selectionClass: selection('qpClass'), - selectionState: selection('qpState'), - selectionDatacenter: selection('qpDatacenter'), - - optionsClass: computed('nodes.[]', function() { - const classes = Array.from(new Set(this.nodes.mapBy('nodeClass'))).compact(); - - // Remove any invalid node classes from the query param/selection - scheduleOnce('actions', () => { - this.set('qpClass', serialize(intersection(classes, this.selectionClass))); - }); - - return classes.sort().map(dc => ({ key: dc, label: dc })); - }), - - optionsState: computed(() => [ - { key: 'initializing', label: 'Initializing' }, - { key: 'ready', label: 'Ready' }, - { key: 'down', label: 'Down' }, - { key: 'ineligible', label: 'Ineligible' }, - { key: 'draining', label: 'Draining' }, - ]), - - optionsDatacenter: computed('nodes.[]', function() { - const datacenters = Array.from(new Set(this.nodes.mapBy('datacenter'))).compact(); - - // Remove any invalid datacenters from the query param/selection - scheduleOnce('actions', () => { - this.set('qpDatacenter', serialize(intersection(datacenters, this.selectionDatacenter))); - }); - - return datacenters.sort().map(dc => ({ key: dc, label: dc })); - }), - - filteredNodes: computed( - 'nodes.[]', - 'selectionClass', - 'selectionState', - 'selectionDatacenter', - function() { - const { - selectionClass: classes, - selectionState: states, - selectionDatacenter: datacenters, - } = this; - - const onlyIneligible = states.includes('ineligible'); - const onlyDraining = states.includes('draining'); - - // states is a composite of node status and other node states - const statuses = states.without('ineligible').without('draining'); - - return this.nodes.filter(node => { - if (classes.length && !classes.includes(node.get('nodeClass'))) return false; - if (statuses.length && !statuses.includes(node.get('status'))) return false; - if (datacenters.length && !datacenters.includes(node.get('datacenter'))) return false; - - if (onlyIneligible && node.get('isEligible')) return false; - if (onlyDraining && !node.get('isDraining')) return false; - - return true; +export default Controller.extend( + SortableFactory(['id', 'name', 'compositeStatus', 'datacenter']), + Searchable, + { + clientsController: controller('clients'), + + nodes: alias('model.nodes'), + agents: alias('model.agents'), + + queryParams: { + currentPage: 'page', + searchTerm: 'search', + sortProperty: 'sort', + sortDescending: 'desc', + qpClass: 'class', + qpState: 'state', + qpDatacenter: 'dc', + }, + + currentPage: 1, + pageSize: 8, + + sortProperty: 'modifyIndex', + sortDescending: true, + + searchProps: computed(() => ['id', 'name', 'datacenter']), + + qpClass: '', + qpState: '', + qpDatacenter: '', + + selectionClass: selection('qpClass'), + selectionState: selection('qpState'), + selectionDatacenter: selection('qpDatacenter'), + + optionsClass: computed('nodes.[]', function() { + const classes = Array.from(new Set(this.nodes.mapBy('nodeClass'))).compact(); + + // Remove any invalid node classes from the query param/selection + scheduleOnce('actions', () => { + this.set('qpClass', serialize(intersection(classes, this.selectionClass))); }); - } - ), - listToSort: alias('filteredNodes'), - listToSearch: alias('listSorted'), - sortedNodes: alias('listSearched'), + return classes.sort().map(dc => ({ key: dc, label: dc })); + }), + + optionsState: computed(() => [ + { key: 'initializing', label: 'Initializing' }, + { key: 'ready', label: 'Ready' }, + { key: 'down', label: 'Down' }, + { key: 'ineligible', label: 'Ineligible' }, + { key: 'draining', label: 'Draining' }, + ]), - isForbidden: alias('clientsController.isForbidden'), + optionsDatacenter: computed('nodes.[]', function() { + const datacenters = Array.from(new Set(this.nodes.mapBy('datacenter'))).compact(); + + // Remove any invalid datacenters from the query param/selection + scheduleOnce('actions', () => { + this.set('qpDatacenter', serialize(intersection(datacenters, this.selectionDatacenter))); + }); - setFacetQueryParam(queryParam, selection) { - this.set(queryParam, serialize(selection)); - }, + return datacenters.sort().map(dc => ({ key: dc, label: dc })); + }), + + filteredNodes: computed( + 'nodes.[]', + 'selectionClass', + 'selectionState', + 'selectionDatacenter', + function() { + const { + selectionClass: classes, + selectionState: states, + selectionDatacenter: datacenters, + } = this; + + const onlyIneligible = states.includes('ineligible'); + const onlyDraining = states.includes('draining'); + + // states is a composite of node status and other node states + const statuses = states.without('ineligible').without('draining'); + + return this.nodes.filter(node => { + if (classes.length && !classes.includes(node.get('nodeClass'))) return false; + if (statuses.length && !statuses.includes(node.get('status'))) return false; + if (datacenters.length && !datacenters.includes(node.get('datacenter'))) return false; + + if (onlyIneligible && node.get('isEligible')) return false; + if (onlyDraining && !node.get('isDraining')) return false; + + return true; + }); + } + ), + + listToSort: alias('filteredNodes'), + listToSearch: alias('listSorted'), + sortedNodes: alias('listSearched'), + + isForbidden: alias('clientsController.isForbidden'), + + setFacetQueryParam(queryParam, selection) { + this.set(queryParam, serialize(selection)); + }, - actions: { - gotoNode(node) { - this.transitionToRoute('clients.client', node); + actions: { + gotoNode(node) { + this.transitionToRoute('clients.client', node); + }, }, - }, -}); + } +); diff --git a/ui/app/controllers/settings/tokens.js b/ui/app/controllers/settings/tokens.js index 03a7a793247..8caab695f82 100644 --- a/ui/app/controllers/settings/tokens.js +++ b/ui/app/controllers/settings/tokens.js @@ -2,6 +2,7 @@ import { inject as service } from '@ember/service'; import { reads } from '@ember/object/computed'; import Controller from '@ember/controller'; import { getOwner } from '@ember/application'; +import { alias } from '@ember/object/computed'; export default Controller.extend({ token: service(), @@ -12,7 +13,7 @@ export default Controller.extend({ tokenIsValid: false, tokenIsInvalid: false, - tokenRecord: null, + tokenRecord: alias('token.selfToken'), resetStore() { this.store.unloadAll(); @@ -26,9 +27,9 @@ export default Controller.extend({ this.setProperties({ tokenIsValid: false, tokenIsInvalid: false, - tokenRecord: null, }); this.resetStore(); + this.token.reset(); }, verifyToken() { @@ -38,22 +39,20 @@ export default Controller.extend({ this.set('token.secret', secret); TokenAdapter.findSelf().then( - token => { - // Capture the token ID before clearing the store - const tokenId = token.get('id'); - + () => { // Clear out all data to ensure only data the new token is privileged to // see is shown this.system.reset(); this.resetStore(); - // Immediately refetch the token now that the store is empty - const newToken = this.store.findRecord('token', tokenId); + // Refetch the token and associated policies + this.get('token.fetchSelfTokenAndPolicies') + .perform() + .catch(); this.setProperties({ tokenIsValid: true, tokenIsInvalid: false, - tokenRecord: newToken, }); }, () => { @@ -61,7 +60,6 @@ export default Controller.extend({ this.setProperties({ tokenIsValid: false, tokenIsInvalid: true, - tokenRecord: null, }); } ); diff --git a/ui/app/mixins/sortable-factory.js b/ui/app/mixins/sortable-factory.js new file mode 100644 index 00000000000..e65d18f9bc1 --- /dev/null +++ b/ui/app/mixins/sortable-factory.js @@ -0,0 +1,58 @@ +import Mixin from '@ember/object/mixin'; +import Ember from 'ember'; +import { computed } from '@ember/object'; +import { warn } from '@ember/debug'; + +/** + Sortable mixin factory + + Simple sorting behavior for a list of objects. Pass the list of properties + you want the list to be live-sorted based on, or use the generic sortable.js + if you don’t need that. + + Properties to override: + - sortProperty: the property to sort by + - sortDescending: when true, the list is reversed + - listToSort: the list of objects to sort + + Properties provided: + - listSorted: a copy of listToSort that has been sorted +*/ +export default function sortableFactory(properties, fromSortableMixin) { + const eachProperties = properties.map(property => `listToSort.@each.${property}`); + + return Mixin.create({ + // Override in mixin consumer + sortProperty: null, + sortDescending: true, + listToSort: computed(() => []), + + _sortableFactoryWarningPrinted: false, + + listSorted: computed( + ...eachProperties, + 'listToSort.[]', + 'sortProperty', + 'sortDescending', + function() { + if (!this._sortableFactoryWarningPrinted && !Ember.testing) { + let message = + 'Using SortableFactory without property keys means the list will only sort when the members change, not when any of their properties change.'; + + if (fromSortableMixin) { + message += ' The Sortable mixin is deprecated in favor of SortableFactory.'; + } + + warn(message, properties.length > 0, { id: 'nomad.no-sortable-properties' }); + this.set('_sortableFactoryWarningPrinted', true); + } + + const sorted = this.listToSort.compact().sortBy(this.sortProperty); + if (this.sortDescending) { + return sorted.reverse(); + } + return sorted; + } + ), + }); +} diff --git a/ui/app/mixins/sortable.js b/ui/app/mixins/sortable.js index 7a86d3c80d5..95ebe0cb25a 100644 --- a/ui/app/mixins/sortable.js +++ b/ui/app/mixins/sortable.js @@ -1,32 +1,5 @@ -import Mixin from '@ember/object/mixin'; -import { computed } from '@ember/object'; +import SortableFactory from 'nomad-ui/mixins/sortable-factory'; -/** - Sortable mixin +// A generic version of SortableFactory with no sort property dependent keys. - Simple sorting behavior for a list of objects. - - Properties to override: - - sortProperty: the property to sort by - - sortDescending: when true, the list is reversed - - listToSort: the list of objects to sort - - Properties provided: - - listSorted: a copy of listToSort that has been sorted -*/ -export default Mixin.create({ - // Override in mixin consumer - sortProperty: null, - sortDescending: true, - listToSort: computed(() => []), - - listSorted: computed('listToSort.[]', 'sortProperty', 'sortDescending', function() { - const sorted = this.listToSort - .compact() - .sortBy(this.sortProperty); - if (this.sortDescending) { - return sorted.reverse(); - } - return sorted; - }), -}); +export default SortableFactory([], true); diff --git a/ui/app/mixins/window-resizable.js b/ui/app/mixins/window-resizable.js index 5a473f3c1ae..808143538fe 100644 --- a/ui/app/mixins/window-resizable.js +++ b/ui/app/mixins/window-resizable.js @@ -1,6 +1,7 @@ import Mixin from '@ember/object/mixin'; import { run } from '@ember/runloop'; import { assert } from '@ember/debug'; +import { on } from '@ember/object/evented'; import $ from 'jquery'; export default Mixin.create({ @@ -8,14 +9,14 @@ export default Mixin.create({ assert('windowResizeHandler needs to be overridden in the Component', false); }, - setupWindowResize: function() { + setupWindowResize: on('didInsertElement', function() { run.scheduleOnce('afterRender', this, () => { this.set('_windowResizeHandler', this.windowResizeHandler.bind(this)); $(window).on('resize', this._windowResizeHandler); }); - }.on('didInsertElement'), + }), - removeWindowResize: function() { + removeWindowResize: on('willDestroyElement', function() { $(window).off('resize', this._windowResizeHandler); - }.on('willDestroyElement'), + }), }); diff --git a/ui/app/mixins/with-component-visibility-detection.js b/ui/app/mixins/with-component-visibility-detection.js index 3022d4d36c6..2645ed2c8c7 100644 --- a/ui/app/mixins/with-component-visibility-detection.js +++ b/ui/app/mixins/with-component-visibility-detection.js @@ -1,22 +1,23 @@ import Ember from 'ember'; import Mixin from '@ember/object/mixin'; import { assert } from '@ember/debug'; +import { on } from '@ember/object/evented'; export default Mixin.create({ visibilityHandler() { assert('visibilityHandler needs to be overridden in the Component', false); }, - setupDocumentVisibility: function() { + setupDocumentVisibility: on('init', function() { if (!Ember.testing) { this.set('_visibilityHandler', this.visibilityHandler.bind(this)); document.addEventListener('visibilitychange', this._visibilityHandler); } - }.on('init'), + }), - removeDocumentVisibility: function() { + removeDocumentVisibility: on('init', function() { if (!Ember.testing) { document.removeEventListener('visibilitychange', this._visibilityHandler); } - }.on('willDestroy'), + }), }); diff --git a/ui/app/mixins/with-route-visibility-detection.js b/ui/app/mixins/with-route-visibility-detection.js index 4b7b05c244a..8f58102c67d 100644 --- a/ui/app/mixins/with-route-visibility-detection.js +++ b/ui/app/mixins/with-route-visibility-detection.js @@ -1,22 +1,23 @@ import Ember from 'ember'; import Mixin from '@ember/object/mixin'; import { assert } from '@ember/debug'; +import { on } from '@ember/object/evented'; export default Mixin.create({ visibilityHandler() { assert('visibilityHandler needs to be overridden in the Route', false); }, - setupDocumentVisibility: function() { + setupDocumentVisibility: on('activate', function() { if (!Ember.testing) { this.set('_visibilityHandler', this.visibilityHandler.bind(this)); document.addEventListener('visibilitychange', this._visibilityHandler); } - }.on('activate'), + }), - removeDocumentVisibility: function() { + removeDocumentVisibility: on('deactivate', function() { if (!Ember.testing) { document.removeEventListener('visibilitychange', this._visibilityHandler); } - }.on('deactivate'), + }), }); diff --git a/ui/app/models/allocation.js b/ui/app/models/allocation.js index 1b4f197570b..6452a2bcb21 100644 --- a/ui/app/models/allocation.js +++ b/ui/app/models/allocation.js @@ -41,6 +41,7 @@ export default Model.extend({ }), isRunning: equal('clientStatus', 'running'), + isMigrating: attr('boolean'), // When allocations are server-side rescheduled, a paper trail // is left linking all reschedule attempts. diff --git a/ui/app/models/job.js b/ui/app/models/job.js index c410462767e..f3afec1dc46 100644 --- a/ui/app/models/job.js +++ b/ui/app/models/job.js @@ -144,9 +144,7 @@ export default Model.extend({ }), hasBlockedEvaluation: computed('evaluations.@each.isBlocked', function() { - return this.evaluations - .toArray() - .some(evaluation => evaluation.get('isBlocked')); + return this.evaluations.toArray().some(evaluation => evaluation.get('isBlocked')); }), hasPlacementFailures: and('latestFailureEvaluation', 'hasBlockedEvaluation'), @@ -246,7 +244,7 @@ export default Model.extend({ const id = payload.Name; this.set('plainId', id); - this.set('id', JSON.stringify([id, namespace])); + this.set('_idBeforeSaving', JSON.stringify([id, namespace])); const namespaceRecord = this.store.peekRecord('namespace', namespace); if (namespaceRecord) { diff --git a/ui/app/models/node-attributes.js b/ui/app/models/node-attributes.js index 6a699827263..11c199c6520 100644 --- a/ui/app/models/node-attributes.js +++ b/ui/app/models/node-attributes.js @@ -6,10 +6,10 @@ import flat from 'flat'; const { unflatten } = flat; export default Fragment.extend({ - attributes: attr(), + nodeAttributes: attr(), - attributesStructured: computed('attributes', function() { - const original = this.attributes; + attributesStructured: computed('nodeAttributes', function() { + const original = this.nodeAttributes; if (!original) { return; @@ -30,6 +30,8 @@ export default Fragment.extend({ // // ex: nodeAttrs.get('driver.docker') // [ "1", { version: "17.05.0-ce", volumes: { enabled: "1" } } ] - return get(this.attributesStructured, key); + if (this.attributesStructured) { + return get(this.attributesStructured, key); + } }, }); diff --git a/ui/app/models/node.js b/ui/app/models/node.js index 412548d3624..e8e30a8c490 100644 --- a/ui/app/models/node.js +++ b/ui/app/models/node.js @@ -4,6 +4,7 @@ import Model from 'ember-data/model'; import attr from 'ember-data/attr'; import { hasMany } from 'ember-data/relationships'; import { fragment, fragmentArray } from 'ember-data-model-fragments/attributes'; +import RSVP from 'rsvp'; import shortUUIDProperty from '../utils/properties/short-uuid'; import ipParts from '../utils/ip-parts'; @@ -43,6 +44,25 @@ export default Model.extend({ }), allocations: hasMany('allocations', { inverse: 'node' }), + completeAllocations: computed('allocations.@each.clientStatus', function() { + return this.allocations.filterBy('clientStatus', 'complete'); + }), + runningAllocations: computed('allocations.@each.isRunning', function() { + return this.allocations.filterBy('isRunning'); + }), + migratingAllocations: computed('allocations.@each.{isMigrating,isRunning}', function() { + return this.allocations.filter(alloc => alloc.isRunning && alloc.isMigrating); + }), + lastMigrateTime: computed('allocations.@each.{isMigrating,isRunning,modifyTime}', function() { + const allocation = this.allocations + .filterBy('isRunning', false) + .filterBy('isMigrating') + .sortBy('modifyTime') + .reverse()[0]; + if (allocation) { + return allocation.modifyTime; + } + }), drivers: fragmentArray('node-driver'), events: fragmentArray('node-event'), @@ -61,7 +81,50 @@ export default Model.extend({ // A status attribute that includes states not included in node status. // Useful for coloring and sorting nodes - compositeStatus: computed('status', 'isEligible', function() { - return this.isEligible ? this.status : 'ineligible'; + compositeStatus: computed('isDraining', 'isEligible', 'status', function() { + if (this.isDraining) { + return 'draining'; + } else if (!this.isEligible) { + return 'ineligible'; + } else { + return this.status; + } + }), + + compositeStatusIcon: computed('isDraining', 'isEligible', 'status', function() { + if (this.isDraining || !this.isEligible) { + return 'alert-circle-fill'; + } else if (this.status === 'down') { + return 'cancel-circle-fill'; + } else if (this.status === 'initializing') { + return 'node-init-circle-fill'; + } + return 'check-circle-fill'; }), + + setEligible() { + if (this.isEligible) return RSVP.resolve(); + // Optimistically update schedulingEligibility for immediate feedback + this.set('schedulingEligibility', 'eligible'); + return this.store.adapterFor('node').setEligible(this); + }, + + setIneligible() { + if (!this.isEligible) return RSVP.resolve(); + // Optimistically update schedulingEligibility for immediate feedback + this.set('schedulingEligibility', 'ineligible'); + return this.store.adapterFor('node').setIneligible(this); + }, + + drain(drainSpec) { + return this.store.adapterFor('node').drain(this, drainSpec); + }, + + forceDrain(drainSpec) { + return this.store.adapterFor('node').forceDrain(this, drainSpec); + }, + + cancelDrain() { + return this.store.adapterFor('node').cancelDrain(this); + }, }); diff --git a/ui/app/models/policy.js b/ui/app/models/policy.js index 47193a6b78d..8b333617bd2 100644 --- a/ui/app/models/policy.js +++ b/ui/app/models/policy.js @@ -5,4 +5,5 @@ export default Model.extend({ name: attr('string'), description: attr('string'), rules: attr('string'), + rulesJSON: attr(), }); diff --git a/ui/app/models/task-state.js b/ui/app/models/task-state.js index 53ddccead73..e6afba7e862 100644 --- a/ui/app/models/task-state.js +++ b/ui/app/models/task-state.js @@ -9,7 +9,6 @@ export default Fragment.extend({ name: attr('string'), state: attr('string'), - kind: attr('string'), startedAt: attr('date'), finishedAt: attr('date'), failed: attr('boolean'), @@ -17,11 +16,11 @@ export default Fragment.extend({ isActive: none('finishedAt'), isRunning: and('isActive', 'allocation.isRunning'), - isConnectProxy: computed('kind', function() { - return (this.kind || '').startsWith('connect-proxy:'); + isConnectProxy: computed('task.kind', function() { + return (this.get('task.kind') || '').startsWith('connect-proxy:'); }), - task: computed('allocation.taskGroup.tasks.[]', function() { + task: computed('name', 'allocation.taskGroup.tasks.[]', function() { const tasks = this.get('allocation.taskGroup.tasks'); return tasks && tasks.findBy('name', this.name); }), diff --git a/ui/app/models/task.js b/ui/app/models/task.js index 90025400d6c..40348fa2545 100644 --- a/ui/app/models/task.js +++ b/ui/app/models/task.js @@ -4,6 +4,7 @@ import Fragment from 'ember-data-model-fragments/fragment'; export default Fragment.extend({ name: attr('string'), driver: attr('string'), + kind: attr('string'), reservedMemory: attr('number'), reservedCPU: attr('number'), diff --git a/ui/app/router.js b/ui/app/router.js index d5ade3e838d..d435bdf5ef7 100644 --- a/ui/app/router.js +++ b/ui/app/router.js @@ -41,10 +41,6 @@ Router.map(function() { this.route('tokens'); }); - if (config.environment === 'development') { - this.route('freestyle'); - } - this.route('not-found', { path: '/*' }); }); diff --git a/ui/app/routes/application.js b/ui/app/routes/application.js index dbc9baa35e5..d97eb853cd2 100644 --- a/ui/app/routes/application.js +++ b/ui/app/routes/application.js @@ -1,13 +1,14 @@ import { inject as service } from '@ember/service'; import { next } from '@ember/runloop'; import Route from '@ember/routing/route'; -import { AbortError } from 'ember-data/adapters/errors'; +import { AbortError } from '@ember-data/adapter/error'; import RSVP from 'rsvp'; export default Route.extend({ config: service(), system: service(), store: service(), + token: service(), queryParams: { region: { @@ -22,28 +23,34 @@ export default Route.extend({ }, beforeModel(transition) { - return RSVP.all([this.get('system.regions'), this.get('system.defaultRegion')]).then( - promises => { - if (!this.get('system.shouldShowRegions')) return promises; - - const queryParam = transition.queryParams.region; - const defaultRegion = this.get('system.defaultRegion.region'); - const currentRegion = this.get('system.activeRegion') || defaultRegion; - - // Only reset the store if the region actually changed - if ( - (queryParam && queryParam !== currentRegion) || - (!queryParam && currentRegion !== defaultRegion) - ) { - this.system.reset(); - this.store.unloadAll(); - } - - this.set('system.activeRegion', queryParam || defaultRegion); - - return promises; + const fetchSelfTokenAndPolicies = this.get('token.fetchSelfTokenAndPolicies') + .perform() + .catch(); + + return RSVP.all([ + this.get('system.regions'), + this.get('system.defaultRegion'), + fetchSelfTokenAndPolicies, + ]).then(promises => { + if (!this.get('system.shouldShowRegions')) return promises; + + const queryParam = transition.to.queryParams.region; + const defaultRegion = this.get('system.defaultRegion.region'); + const currentRegion = this.get('system.activeRegion') || defaultRegion; + + // Only reset the store if the region actually changed + if ( + (queryParam && queryParam !== currentRegion) || + (!queryParam && currentRegion !== defaultRegion) + ) { + this.system.reset(); + this.store.unloadAll(); } - ); + + this.set('system.activeRegion', queryParam || defaultRegion); + + return promises; + }); }, // Model is being used as a way to transfer the provided region diff --git a/ui/app/routes/clients/client.js b/ui/app/routes/clients/client.js index 499d585991d..c248c944da2 100644 --- a/ui/app/routes/clients/client.js +++ b/ui/app/routes/clients/client.js @@ -29,6 +29,24 @@ export default Route.extend(WithWatchers, { return model && model.get('allocations'); }, + setupController(controller, model) { + controller.set('flagAsDraining', model && model.isDraining); + + return this._super(...arguments); + }, + + resetController(controller) { + controller.setProperties({ + eligibilityError: null, + stopDrainError: null, + drainError: null, + flagAsDraining: false, + showDrainNotification: false, + showDrainUpdateNotification: false, + showDrainStoppedNotification: false, + }); + }, + startWatchers(controller, model) { if (model) { controller.set('watchModel', this.watch.perform(model)); diff --git a/ui/app/routes/jobs.js b/ui/app/routes/jobs.js index 9748013b7b9..08bbb26f91a 100644 --- a/ui/app/routes/jobs.js +++ b/ui/app/routes/jobs.js @@ -22,7 +22,7 @@ export default Route.extend(WithForbiddenState, { beforeModel(transition) { return this.get('system.namespaces').then(namespaces => { - const queryParam = transition.queryParams.namespace; + const queryParam = transition.to.queryParams.namespace; this.set('system.activeNamespace', queryParam || 'default'); return namespaces; @@ -30,9 +30,7 @@ export default Route.extend(WithForbiddenState, { }, model() { - return this.store - .findAll('job', { reload: true }) - .catch(notifyForbidden(this)); + return this.store.findAll('job', { reload: true }).catch(notifyForbidden(this)); }, actions: { diff --git a/ui/app/routes/jobs/job.js b/ui/app/routes/jobs/job.js index 8685c9ac060..70f32304994 100644 --- a/ui/app/routes/jobs/job.js +++ b/ui/app/routes/jobs/job.js @@ -15,7 +15,7 @@ export default Route.extend({ }, model(params, transition) { - const namespace = transition.queryParams.namespace || this.get('system.activeNamespace.id'); + const namespace = transition.to.queryParams.namespace || this.get('system.activeNamespace.id'); const name = params.job_name; const fullId = JSON.stringify([name, namespace || 'default']); return this.store diff --git a/ui/app/routes/jobs/run.js b/ui/app/routes/jobs/run.js index 1cdf52cdfe6..7bda3b103f8 100644 --- a/ui/app/routes/jobs/run.js +++ b/ui/app/routes/jobs/run.js @@ -2,6 +2,7 @@ import Route from '@ember/routing/route'; import { inject as service } from '@ember/service'; export default Route.extend({ + can: service(), store: service(), system: service(), @@ -12,6 +13,12 @@ export default Route.extend({ }, ], + beforeModel() { + if (this.can.cannot('run job')) { + this.transitionTo('jobs'); + } + }, + model() { return this.store.createRecord('job', { namespace: this.get('system.activeNamespace'), diff --git a/ui/app/serializers/agent.js b/ui/app/serializers/agent.js index f99134f15ef..5cbe4c3ad33 100644 --- a/ui/app/serializers/agent.js +++ b/ui/app/serializers/agent.js @@ -1,5 +1,5 @@ import ApplicationSerializer from './application'; -import { AdapterError } from 'ember-data/adapters/errors'; +import AdapterError from '@ember-data/adapter/error'; export default ApplicationSerializer.extend({ attrs: { diff --git a/ui/app/serializers/allocation.js b/ui/app/serializers/allocation.js index 64bb540d0a5..89e321a62e4 100644 --- a/ui/app/serializers/allocation.js +++ b/ui/app/serializers/allocation.js @@ -40,6 +40,8 @@ export default ApplicationSerializer.extend({ hash.RescheduleEvents = (hash.RescheduleTracker || {}).Events; + hash.IsMigrating = (hash.DesiredTransition || {}).Migrate; + // API returns empty strings instead of null hash.PreviousAllocationID = hash.PreviousAllocation ? hash.PreviousAllocation : null; hash.NextAllocationID = hash.NextAllocation ? hash.NextAllocation : null; diff --git a/ui/app/serializers/node-attributes.js b/ui/app/serializers/node-attributes.js index 6e4be279fde..458c81f156b 100644 --- a/ui/app/serializers/node-attributes.js +++ b/ui/app/serializers/node-attributes.js @@ -2,6 +2,6 @@ import ApplicationSerializer from './application'; export default ApplicationSerializer.extend({ normalize(typeHash, hash) { - return this._super(typeHash, { Attributes: hash }); + return this._super(typeHash, { NodeAttributes: hash }); }, }); diff --git a/ui/app/serializers/task-group.js b/ui/app/serializers/task-group.js index 1e52947c303..59ed48cd5f6 100644 --- a/ui/app/serializers/task-group.js +++ b/ui/app/serializers/task-group.js @@ -9,6 +9,7 @@ export default ApplicationSerializer.extend({ }); hash.ReservedEphemeralDisk = hash.EphemeralDisk.SizeMB; + hash.Services = hash.Services || []; return this._super(typeHash, hash); }, diff --git a/ui/app/services/stats-trackers-registry.js b/ui/app/services/stats-trackers-registry.js index 37cbb228ae0..5a603d016ba 100644 --- a/ui/app/services/stats-trackers-registry.js +++ b/ui/app/services/stats-trackers-registry.js @@ -18,6 +18,8 @@ export default Service.extend({ token: service(), init() { + this._super(...arguments); + // The LRUMap limits the number of trackers tracked by making room for // new entries beyond the limit by removing the least recently used entry. registry = new LRUMap(MAX_STAT_TRACKERS); diff --git a/ui/app/services/system.js b/ui/app/services/system.js index f14e9012951..24aea829108 100644 --- a/ui/app/services/system.js +++ b/ui/app/services/system.js @@ -78,16 +78,13 @@ export default Service.extend({ 'defaultRegion.region', 'shouldShowRegions', function() { - return this.shouldShowRegions && - this.activeRegion !== this.get('defaultRegion.region'); + return this.shouldShowRegions && this.activeRegion !== this.get('defaultRegion.region'); } ), namespaces: computed('activeRegion', function() { return PromiseArray.create({ - promise: this.store - .findAll('namespace') - .then(namespaces => namespaces.compact()), + promise: this.store.findAll('namespace').then(namespaces => namespaces.compact()), }); }), diff --git a/ui/app/services/token.js b/ui/app/services/token.js index f4aece59691..5c251bd6847 100644 --- a/ui/app/services/token.js +++ b/ui/app/services/token.js @@ -1,12 +1,18 @@ import Service, { inject as service } from '@ember/service'; import { computed } from '@ember/object'; +import { alias } from '@ember/object/computed'; +import { getOwner } from '@ember/application'; import { assign } from '@ember/polyfills'; +import { task } from 'ember-concurrency'; import queryString from 'query-string'; import fetch from 'nomad-ui/utils/fetch'; export default Service.extend({ + store: service(), system: service(), + aclEnabled: true, + secret: computed({ get() { return window.localStorage.nomadTokenSecret; @@ -22,6 +28,45 @@ export default Service.extend({ }, }), + fetchSelfToken: task(function*() { + const TokenAdapter = getOwner(this).lookup('adapter:token'); + try { + return yield TokenAdapter.findSelf(); + } catch (e) { + const errors = e.errors ? e.errors.mapBy('detail') : []; + if (errors.find(error => error === 'ACL support disabled')) { + this.set('aclEnabled', false); + } + return null; + } + }), + + selfToken: computed('secret', 'fetchSelfToken.lastSuccessful.value', function() { + if (this.secret) return this.get('fetchSelfToken.lastSuccessful.value'); + }), + + fetchSelfTokenPolicies: task(function*() { + try { + if (this.selfToken) { + return yield this.selfToken.get('policies'); + } else { + let policy = yield this.store.findRecord('policy', 'anonymous'); + return [policy]; + } + } catch (e) { + return []; + } + }), + + selfTokenPolicies: alias('fetchSelfTokenPolicies.lastSuccessful.value'), + + fetchSelfTokenAndPolicies: task(function*() { + yield this.fetchSelfToken.perform(); + if (this.aclEnabled) { + yield this.fetchSelfTokenPolicies.perform(); + } + }), + // All non Ember Data requests should go through authorizedRequest. // However, the request that gets regions falls into that category. // This authorizedRawRequest is necessary in order to fetch data @@ -48,6 +93,12 @@ export default Service.extend({ return this.authorizedRawRequest(url, options); }, + + reset() { + this.fetchSelfToken.cancelAll({ resetState: true }); + this.fetchSelfTokenPolicies.cancelAll({ resetState: true }); + this.fetchSelfTokenAndPolicies.cancelAll({ resetState: true }); + }, }); function addParams(url, params) { diff --git a/ui/app/services/watch-list.js b/ui/app/services/watch-list.js index 1b669dd0c8a..f75a8bdb8d2 100644 --- a/ui/app/services/watch-list.js +++ b/ui/app/services/watch-list.js @@ -10,6 +10,7 @@ export default Service.extend({ }), init() { + this._super(...arguments); list = {}; }, diff --git a/ui/app/styles/app.scss b/ui/app/styles/app.scss index 73ece329ef7..8c910432b07 100644 --- a/ui/app/styles/app.scss +++ b/ui/app/styles/app.scss @@ -6,4 +6,4 @@ @import './charts'; // Only necessary in dev -@import './styleguide.scss'; +@import './storybook.scss'; diff --git a/ui/app/styles/components.scss b/ui/app/styles/components.scss index 6941c244323..7f8e0478401 100644 --- a/ui/app/styles/components.scss +++ b/ui/app/styles/components.scss @@ -19,11 +19,13 @@ @import './components/node-status-light'; @import './components/nomad-logo'; @import './components/page-layout'; +@import './components/popover-menu'; @import './components/primary-metric'; @import './components/search-box'; @import './components/simple-list'; @import './components/status-text'; @import './components/timeline'; +@import './components/toggle'; @import './components/toolbar'; @import './components/tooltip'; @import './components/two-step-button'; diff --git a/ui/app/styles/components/dropdown.scss b/ui/app/styles/components/dropdown.scss index c77675d9ed0..3c9de0a700b 100644 --- a/ui/app/styles/components/dropdown.scss +++ b/ui/app/styles/components/dropdown.scss @@ -1,11 +1,16 @@ .ember-power-select-trigger, .dropdown-trigger { position: relative; - padding: 0.3em 16px 0.3em 0.3em; + display: flex; + align-items: center; + padding: 0.375em 16px 0.375em 0.3em; + line-height: 1; border-radius: $radius; box-shadow: $button-box-shadow-standard; background: $white-bis; border: 1px solid $grey-light; + height: 2.25em; + font-size: 1rem; outline: none; cursor: pointer; diff --git a/ui/app/styles/components/inline-definitions.scss b/ui/app/styles/components/inline-definitions.scss index cc064c48e4b..ec28240cd10 100644 --- a/ui/app/styles/components/inline-definitions.scss +++ b/ui/app/styles/components/inline-definitions.scss @@ -25,4 +25,8 @@ font-weight: $weight-semibold; } } + + &.is-small { + font-size: $size-7; + } } diff --git a/ui/app/styles/components/node-status-light.scss b/ui/app/styles/components/node-status-light.scss index 9077e333a8f..2608b771a9b 100644 --- a/ui/app/styles/components/node-status-light.scss +++ b/ui/app/styles/components/node-status-light.scss @@ -1,33 +1,52 @@ -$size: 0.75em; +$size: 1.6rem; .node-status-light { - display: inline-block; + display: inline-flex; height: $size; width: $size; border-radius: $size / 2; vertical-align: middle; + align-items: center; + justify-content: center; - background: $black; + // Compensate for the padding within the SVG + // (between the circle paths and the viewBox) + margin-left: -1px; + margin-right: -1px; &.ready { - background: $primary; + color: $primary; } &.down { - background: $danger; + color: $danger; } &.initializing { - background: repeating-linear-gradient( - -45deg, - $grey-lighter, - $grey-lighter 3px, - darken($grey-lighter, 25%) 3px, - darken($grey-lighter, 25%) 6px - ); + color: $grey-light; + + .blinking { + animation: node-status-light-initializing 0.7s infinite alternate ease-in-out; + } + } + + &.ineligible, + &.draining { + color: $warning; + } + + .icon { + width: $size; + height: $size; + } +} + +@keyframes node-status-light-initializing { + 0% { + opacity: 0.2; } - &.ineligible { - background: $warning; + 100% { + opacity: 0.7; } } diff --git a/ui/app/styles/components/page-layout.scss b/ui/app/styles/components/page-layout.scss index fa69c11f1da..51ea1f9bcd4 100644 --- a/ui/app/styles/components/page-layout.scss +++ b/ui/app/styles/components/page-layout.scss @@ -37,6 +37,7 @@ &.is-right { margin-left: $gutter-width; width: calc(100% - #{$gutter-width}); + max-width: calc(100% - #{$gutter-width}); } @media #{$mq-hidden-gutter} { @@ -53,6 +54,7 @@ &.is-right { margin-left: 0; width: 100%; + max-width: 100%; } } } diff --git a/ui/app/styles/components/popover-menu.scss b/ui/app/styles/components/popover-menu.scss new file mode 100644 index 00000000000..76875731215 --- /dev/null +++ b/ui/app/styles/components/popover-menu.scss @@ -0,0 +1,52 @@ +.popover-content { + border: 1px solid $grey-blue; + box-shadow: 0 6px 8px -2px rgba($black, 0.05), 0 8px 4px -4px rgba($black, 0.1); + margin-right: -$radius; + margin-top: -1px; + border-radius: $radius; + padding: 0.5em 1em; + width: 200px; + z-index: $z-popover; +} + +.popover-actions { + margin: 1rem -1rem -0.5rem -1rem; + border-top: 1px solid $grey-lighter; + display: flex; + + .popover-action { + border: none; + background: transparent; + height: 2.75em; + width: 100%; + margin: 4px; + border-radius: $radius; + font-size: 1rem; + font-weight: $weight-bold; + align-items: center; + cursor: pointer; + + &:hover { + background: $white-ter; + } + + &:focus { + background: $white-ter; + box-shadow: inset 0 0 0 2px rgba($blue, 0.5); + outline: none; + } + + @each $name, $pair in $colors { + $color: nth($pair, 1); + + &.is-#{$name} { + color: $color; + } + } + + // Override is-primary, which is normally green, to be blue + &.is-primary { + color: $blue; + } + } +} diff --git a/ui/app/styles/components/toggle.scss b/ui/app/styles/components/toggle.scss new file mode 100644 index 00000000000..43908407388 --- /dev/null +++ b/ui/app/styles/components/toggle.scss @@ -0,0 +1,76 @@ +$size: 12px; + +.toggle { + cursor: pointer; + font-weight: $weight-semibold; + position: relative; + + &.is-disabled { + color: $grey-blue; + cursor: not-allowed; + } + + .input { + opacity: 0; + width: 0; + height: 0; + position: absolute; + z-index: -1; + } + + .toggler { + display: inline-block; + position: relative; + vertical-align: middle; + width: $size * 2; + height: $size; + border-radius: $size; + background: $grey-blue; + transition: background 0.3s ease-in-out; + + &::after { + content: ' '; + display: block; + position: absolute; + width: calc(#{$size} - 4px); + height: calc(#{$size} - 4px); + border-radius: 100%; + background: $white; + left: 2px; + top: 2px; + transform: translateX(0); + transition: transform 0.3s ease-in-out; + } + } + + // Always style the toggler based off the input state to + // ensure that the native input is driving behavior. + .input:focus + .toggler { + box-shadow: 0 0 0 1px $grey-light; + outline: none; + } + + .input:checked + .toggler { + background: $blue; + + &::after { + transform: translateX($size); + } + } + + .input:checked:focus + .toggler { + box-shadow: 0 0 0 1px rgba($blue, 0.5); + } + + .input:disabled + .toggler { + background: rgba($grey-blue, 0.6); + + &::after { + opacity: 0.5; + } + } + + .input:checked:disabled + .toggler { + background: rgba($blue, 0.5); + } +} diff --git a/ui/app/styles/components/toolbar.scss b/ui/app/styles/components/toolbar.scss index 3b22b334114..5e0acbe5da8 100644 --- a/ui/app/styles/components/toolbar.scss +++ b/ui/app/styles/components/toolbar.scss @@ -15,11 +15,19 @@ $spacing: 1.5em; align-self: center; flex-grow: 1; + &.is-minimum { + flex-grow: 0; + } + &.is-right-aligned { flex-grow: 0; margin-left: auto; } + &.is-top-aligned { + align-self: auto; + } + &.is-mobile-full-width { @include mobile { flex-grow: 1; diff --git a/ui/app/styles/components/tooltip.scss b/ui/app/styles/components/tooltip.scss index 38bddb5e6ae..0546b535598 100644 --- a/ui/app/styles/components/tooltip.scss +++ b/ui/app/styles/components/tooltip.scss @@ -46,6 +46,10 @@ transition: top 0.1s ease-in-out; } +.tooltip.is-right-aligned::after { + transform: translateX(-75%); +} + .tooltip:hover::after, .tooltip.always-active::after { opacity: 1; @@ -57,3 +61,8 @@ opacity: 1; top: -20%; } + +.tooltip.multiline::after { + width: 200px; + white-space: normal; +} diff --git a/ui/app/styles/components/two-step-button.scss b/ui/app/styles/components/two-step-button.scss index b46b1a4395f..4c787f0264c 100644 --- a/ui/app/styles/components/two-step-button.scss +++ b/ui/app/styles/components/two-step-button.scss @@ -14,5 +14,14 @@ font-weight: $weight-normal; color: darken($grey-blue, 20%); white-space: nowrap; + + &.is-right-aligned { + left: auto; + right: 0; + } + + &.inherit-color { + color: currentColor; + } } } diff --git a/ui/app/styles/core/buttons.scss b/ui/app/styles/core/buttons.scss index 41a90d585e1..1fc5c7a530d 100644 --- a/ui/app/styles/core/buttons.scss +++ b/ui/app/styles/core/buttons.scss @@ -5,6 +5,7 @@ $button-box-shadow-standard: 0 2px 0 0 rgba($grey, 0.2); box-shadow: $button-box-shadow-standard; border: 1px solid transparent; text-decoration: none; + line-height: 1; &:hover, &.is-hovered { @@ -42,6 +43,17 @@ $button-box-shadow-standard: 0 2px 0 0 rgba($grey, 0.2); box-shadow: none; } + &.is-disabled { + opacity: 0.7; + box-shadow: none; + cursor: not-allowed; + border-color: transparent; + + &:hover { + border-color: transparent; + } + } + @each $name, $pair in $colors { $color: nth($pair, 1); $color-invert: nth($pair, 2); @@ -70,6 +82,7 @@ $button-box-shadow-standard: 0 2px 0 0 rgba($grey, 0.2); &.is-outlined { border-color: $grey-lighter; + background-color: $white; &.is-important { border-color: $color; @@ -79,14 +92,14 @@ $button-box-shadow-standard: 0 2px 0 0 rgba($grey, 0.2); &.is-hovered, &:focus, &.is-focused { - background-color: transparent; + background-color: $white; border-color: darken($color, 10%); color: $color; } &:active, &.is-active { - background-color: transparent; + background-color: $white; border-color: darken($color, 10%); color: darken($color, 10%); } @@ -95,6 +108,7 @@ $button-box-shadow-standard: 0 2px 0 0 rgba($grey, 0.2); &.is-inverted.is-outlined { border-color: rgba($color-invert, 0.5); color: rgba($color-invert, 0.9); + background-color: transparent; &:hover, &.is-hovered, @@ -113,6 +127,24 @@ $button-box-shadow-standard: 0 2px 0 0 rgba($grey, 0.2); box-shadow: none; } } + + // The is-disabled styles MUST trump other modifier specificites + &.is-disabled { + background-color: $color; + border-color: darken($color, 5%); + box-shadow: none; + + &:hover, + &:active, + &:focus, + &.is-hovered, + &.is-active, + &.is-focused { + background-color: $color; + border-color: darken($color, 5%); + box-shadow: none; + } + } } } diff --git a/ui/app/styles/core/forms.scss b/ui/app/styles/core/forms.scss index 2dbed30e795..5381921eaad 100644 --- a/ui/app/styles/core/forms.scss +++ b/ui/app/styles/core/forms.scss @@ -40,4 +40,34 @@ &.is-inline { display: inline-block; } + + &.is-sub-field { + margin-left: 2em; + } + + &:not(:last-child) { + margin-bottom: 1rem; + } +} + +.form { + &.is-small { + font-size: 0.85rem; + + .label { + font-size: 0.85rem; + } + } + + .label { + font-weight: $weight-medium; + } + + .group-heading { + text-transform: uppercase; + letter-spacing: 0.05ch; + margin-bottom: 1.5em; + color: $grey; + font-weight: $weight-medium; + } } diff --git a/ui/app/styles/core/icon.scss b/ui/app/styles/core/icon.scss index c9618655837..3a49731257c 100644 --- a/ui/app/styles/core/icon.scss +++ b/ui/app/styles/core/icon.scss @@ -12,8 +12,12 @@ $icon-dimensions-large: 2rem; width: $icon-dimensions; fill: $text; - &.is-small, &.is-text { + width: 1.2em; + height: 1.2em; + } + + &.is-small { height: $icon-dimensions-small; width: $icon-dimensions-small; } @@ -30,6 +34,7 @@ $icon-dimensions-large: 2rem; &.is-faded { fill: $grey-light; + color: $grey-light; } @each $name, $pair in $colors { diff --git a/ui/app/styles/core/section.scss b/ui/app/styles/core/section.scss index 14f1d27a708..09bafee30b7 100644 --- a/ui/app/styles/core/section.scss +++ b/ui/app/styles/core/section.scss @@ -1,6 +1,10 @@ .section { padding: 1.5rem; max-width: 1200px; + + &.with-headspace { + margin-top: 1.5rem; + } } .full-width-section { diff --git a/ui/app/styles/core/title.scss b/ui/app/styles/core/title.scss index 40de40ed8bc..c37d1359c5e 100644 --- a/ui/app/styles/core/title.scss +++ b/ui/app/styles/core/title.scss @@ -8,4 +8,8 @@ &.with-headroom { margin-top: 1rem; } + + &.with-subheading { + margin-bottom: 0.85rem; + } } diff --git a/ui/app/styles/storybook.scss b/ui/app/styles/storybook.scss new file mode 100644 index 00000000000..6db7a571147 --- /dev/null +++ b/ui/app/styles/storybook.scss @@ -0,0 +1,59 @@ +#storybook { + .mock-content { + display: flex; + min-height: 250px; + height: 100%; + + .mock-image, + .mock-copy { + min-height: 100%; + width: 100%; + margin: 1em; + } + + .mock-image { + background: linear-gradient( + to top right, + transparent 0%, + transparent 49%, + $grey-blue 49%, + $grey-blue 51%, + transparent 51%, + transparent 100% + ), + linear-gradient( + to bottom right, + transparent 0%, + transparent 49%, + $grey-blue 49%, + $grey-blue 51%, + transparent 51%, + transparent 100% + ); + } + + .mock-copy { + background: repeating-linear-gradient( + to bottom, + $grey-blue, + $grey-blue 5px, + transparent 5px, + transparent 14px + ); + } + + .mock-vague { + background: lighten($grey-blue, 15%); + width: 100%; + height: 100%; + } + } + + .mock-spacing { + padding: 2em; + } + + .annotation { + font-size: 0.9rem; + } +} diff --git a/ui/app/styles/styleguide.scss b/ui/app/styles/styleguide.scss deleted file mode 100644 index 36093f53cb6..00000000000 --- a/ui/app/styles/styleguide.scss +++ /dev/null @@ -1,55 +0,0 @@ -#styleguide { - .mock-content { - display: flex; - min-height: 250px; - height: 100%; - - .mock-image, - .mock-copy { - min-height: 100%; - width: 100%; - margin: 1em; - } - - .mock-image { - background: linear-gradient( - to top right, - transparent 0%, - transparent 49%, - $grey-blue 49%, - $grey-blue 51%, - transparent 51%, - transparent 100% - ), - linear-gradient( - to bottom right, - transparent 0%, - transparent 49%, - $grey-blue 49%, - $grey-blue 51%, - transparent 51%, - transparent 100% - ); - } - - .mock-copy { - background: repeating-linear-gradient( - to bottom, - $grey-blue, - $grey-blue 5px, - transparent 5px, - transparent 14px - ); - } - - .mock-vague { - background: lighten($grey-blue, 15%); - width: 100%; - height: 100%; - } - } - - .mock-spacing { - padding: 2em; - } -} diff --git a/ui/app/styles/utils/z-indices.scss b/ui/app/styles/utils/z-indices.scss index c85a6043918..18b8250136b 100644 --- a/ui/app/styles/utils/z-indices.scss +++ b/ui/app/styles/utils/z-indices.scss @@ -1,7 +1,8 @@ $z-tooltip: 250; -$z-header: 210; $z-gutter: 220; $z-gutter-backdrop: 219; +$z-header: 210; $z-subnav: 200; +$z-popover: 150; $z-base: 100; $z-icon-decorators: 50; diff --git a/ui/app/templates/clients/client.hbs b/ui/app/templates/clients/client.hbs index a71becadfa8..e6a0d0f9673 100644 --- a/ui/app/templates/clients/client.hbs +++ b/ui/app/templates/clients/client.hbs @@ -1,13 +1,134 @@ {{title "Client " (or model.name model.shortId)}} -
-

- - {{or model.name model.shortId}} - - {{model.id}} - {{copy-button clipboardText=model.id}} - -

+
+ {{#if eligibilityError}} +
+
+
+

Eligibility Error

+

{{eligibilityError}}

+
+
+
+ +
+
+ {{/if}} + {{#if stopDrainError}} +
+
+
+

Stop Drain Error

+

{{stopDrainError}}

+
+
+
+ +
+
+ {{/if}} + {{#if drainError}} +
+
+
+

Drain Error

+

{{drainError}}

+
+
+
+ +
+
+ {{/if}} + {{#if showDrainStoppedNotification}} +
+
+
+

Drain Stopped

+

The drain has been stopped and the node has been set to ineligible.

+
+
+ +
+
+
+ {{/if}} + {{#if showDrainUpdateNotification}} +
+
+
+

Drain Updated

+

The new drain specification has been applied.

+
+
+ +
+
+
+ {{/if}} + {{#if showDrainNotification}} +
+
+
+

Drain Complete

+

Allocations have been drained and the node has been set to ineligible.

+
+
+ +
+
+
+ {{/if}} +
+
+ + + {{x-icon model.compositeStatusIcon}} + + +
+
+

+ {{or model.name model.shortId}} +

+

+ + + {{model.id}} + {{copy-button clipboardText=model.id}} + +

+
+
+ {{#if model.isDraining}} + {{two-step-button + data-test-drain-stop + idleText="Stop Drain" + cancelText="Cancel" + confirmText="Yes, Stop" + confirmationMessage="Are you sure you want to stop this drain?" + awaitingConfirmation=stopDrain.isRunning + onConfirm=(perform stopDrain)}} + {{/if}} +
+
+ {{drain-popover + client=model + isDisabled=(cannot "write client") + onDrain=(action "drainNotify") + onError=(action "drainError")}} +
+
@@ -20,22 +141,6 @@ Address {{model.httpAddr}} - - Draining - {{#if model.isDraining}} - true - {{else}} - false - {{/if}} - - - Eligibility - {{#if model.isEligible}} - {{model.schedulingEligibility}} - {{else}} - {{model.schedulingEligibility}} - {{/if}} - Datacenter {{model.datacenter}} @@ -53,30 +158,95 @@
{{#if model.drainStrategy}} -
-
- Drain Strategy - - Deadline - {{#if model.drainStrategy.isForced}} - Forced Drain - {{else if model.drainStrategy.hasNoDeadline}} - No deadline - {{else}} - {{format-duration model.drainStrategy.deadline}} +
+
+
Drain Strategy
+
+
+ {{#if (not model.drainStrategy.hasNoDeadline)}} + + Duration + {{#if model.drainStrategy.isForced}} + -- + {{else}} + + {{format-duration model.drainStrategy.deadline}} + + {{/if}} + + {{/if}} + + {{if model.drainStrategy.hasNoDeadline "Deadline" "Remaining"}} + {{#if model.drainStrategy.hasNoDeadline}} + No deadline + {{else if model.drainStrategy.isForced}} + -- + {{else}} + + {{moment-from-now model.drainStrategy.forceDeadline interval=1000 hideAffix=true}} + + {{/if}} + + + Force Drain + {{#if model.drainStrategy.isForced}} + {{x-icon "warning" class="is-text is-warning"}} Yes + {{else}} + No + {{/if}} + + + Drain System Jobs + {{if model.drainStrategy.ignoreSystemJobs "No" "Yes"}} + +
+ {{#if (not model.drainStrategy.isForced)}} +
+ {{two-step-button + data-test-force + alignRight=true + isInfoAction=true + idleText="Force Drain" + cancelText="Cancel" + confirmText="Yes, Force Drain" + confirmationMessage="Are you sure you want to force drain?" + awaitingConfirmation=forceDrain.isRunning + onConfirm=(perform forceDrain)}} +
{{/if}} - - {{#if model.drainStrategy.forceDeadline}} - - Forced Deadline - {{format-ts model.drainStrategy.forceDeadline}} - ({{moment-from-now model.drainStrategy.forceDeadline interval=1000}}) - - {{/if}} - - Ignore System Jobs? - {{if model.drainStrategy.ignoreSystemJobs "Yes" "No"}} - +
+
+
+
+
+
+
+

Complete

+

{{model.completeAllocations.length}}

+
+
+
+
+

Migrating

+

{{model.migratingAllocations.length}}

+
+
+
+
+

Remaining

+

{{model.runningAllocations.length}}

+
+
+
+
+

Status

+ {{#if model.lastMigrateTime}} +

{{moment-to-now model.lastMigrateTime interval=1000 hideAffix=true}} since an allocation was successfully migrated.

+ {{else}} +

No allocations migrated.

+ {{/if}} +
+
{{/if}} diff --git a/ui/app/templates/clients/index.hbs b/ui/app/templates/clients/index.hbs index 6d842a884e5..f29105490dd 100644 --- a/ui/app/templates/clients/index.hbs +++ b/ui/app/templates/clients/index.hbs @@ -35,38 +35,40 @@
- {{#list-pagination - source=sortedNodes - size=pageSize - page=currentPage as |p|}} - {{#list-table - source=p.list - sortProperty=sortProperty - sortDescending=sortDescending - class="with-foot" as |t|}} - {{#t.head}} - - {{#t.sort-by prop="id"}}ID{{/t.sort-by}} - {{#t.sort-by class="is-200px is-truncatable" prop="name"}}Name{{/t.sort-by}} - {{#t.sort-by prop="status"}}State{{/t.sort-by}} - Address - {{#t.sort-by prop="datacenter"}}Datacenter{{/t.sort-by}} - # Allocs - {{/t.head}} - {{#t.body as |row|}} - {{client-node-row data-test-client-node-row node=row.model onClick=(action "gotoNode" row.model)}} - {{/t.body}} - {{/list-table}} -
- -
+ {{#if sortedNodes}} + {{#list-pagination + source=sortedNodes + size=pageSize + page=currentPage as |p|}} + {{#list-table + source=p.list + sortProperty=sortProperty + sortDescending=sortDescending + class="with-foot" as |t|}} + {{#t.head}} + + {{#t.sort-by prop="id"}}ID{{/t.sort-by}} + {{#t.sort-by class="is-200px is-truncatable" prop="name"}}Name{{/t.sort-by}} + {{#t.sort-by prop="compositeStatus"}}State{{/t.sort-by}} + Address + {{#t.sort-by prop="datacenter"}}Datacenter{{/t.sort-by}} + # Allocs + {{/t.head}} + {{#t.body as |row|}} + {{client-node-row data-test-client-node-row node=row.model onClick=(action "gotoNode" row.model)}} + {{/t.body}} + {{/list-table}} +
+ +
+ {{/list-pagination}} {{else}}
{{#if (eq nodes.length 0)}} @@ -84,6 +86,6 @@

No clients match the term {{searchTerm}}

{{/if}}
- {{/list-pagination}} + {{/if}} {{/if}}
diff --git a/ui/app/templates/components/client-node-row.hbs b/ui/app/templates/components/client-node-row.hbs index 35619aa19b7..bf7f5b84823 100644 --- a/ui/app/templates/components/client-node-row.hbs +++ b/ui/app/templates/components/client-node-row.hbs @@ -7,15 +7,9 @@ {{#link-to "clients.client" node.id class="is-primary"}}{{node.shortId}}{{/link-to}} {{node.name}} - + - {{#if node.isDraining}} - draining - {{else if (not node.isEligible)}} - ineligible - {{else}} - {{node.status}} - {{/if}} + {{node.compositeStatus}} {{node.httpAddr}} diff --git a/ui/app/templates/components/drain-popover.hbs b/ui/app/templates/components/drain-popover.hbs new file mode 100644 index 00000000000..a714cc5ac3b --- /dev/null +++ b/ui/app/templates/components/drain-popover.hbs @@ -0,0 +1,91 @@ +{{#popover-menu + data-test-drain-popover + isDisabled=isDisabled + label=(if client.isDraining "Update Drain" "Drain") + tooltip=(if isDisabled "Not allowed to drain clients") + triggerClass=(concat + "is-small " + (if drain.isRunning "is-loading ") + (if isDisabled "tooltip is-right-aligned") + ) as |m|}} +
+

Drain Options

+
+ +
+ {{#if deadlineEnabled}} +
+ {{#power-select + data-test-drain-deadline-option-select + tagName="div" + options=durationQuickOptions + selected=selectedDurationQuickOption + onChange=(action (mut selectedDurationQuickOption)) as |opt|}} + {{opt.label}} + {{/power-select}} +
+ {{#if durationIsCustom}} +
+ + + {{#if parseError}} + {{parseError}} + {{/if}} +
+ {{/if}} + {{/if}} +
+ +
+
+ +
+
+ + +
+
+{{/popover-menu}} diff --git a/ui/app/templates/components/freestyle/sg-accordion.hbs b/ui/app/templates/components/freestyle/sg-accordion.hbs deleted file mode 100644 index 1288be761e7..00000000000 --- a/ui/app/templates/components/freestyle/sg-accordion.hbs +++ /dev/null @@ -1,53 +0,0 @@ -{{#freestyle-usage "accordion" title="Accordion"}} - {{#list-accordion source=products key="name" as |ac|}} - {{#ac.head buttonLabel="details"}} -
-
{{ac.item.name}}
-
- {{ac.item.lang}} -
-
- {{/ac.head}} - {{#ac.body}} -

{{ac.item.name}}

-

{{ac.item.desc}}

-

Learn more...

- {{/ac.body}} - {{/list-accordion}} -{{/freestyle-usage}} - -{{#freestyle-usage "accordion-single" title="Accordion, One Item"}} - {{#list-accordion source=(take 1 products) key="name" as |a|}} - {{#a.head buttonLabel="details"}} -
-
{{a.item.name}}
-
- {{a.item.lang}} -
-
- {{/a.head}} - {{#a.body}} -

{{a.item.name}}

-

{{a.item.desc}}

-

Learn more...

- {{/a.body}} - {{/list-accordion}} -{{/freestyle-usage}} - -{{#freestyle-usage "accordion-not-expandable" title="Accordion, Not Expandable"}} - {{#list-accordion source=products key="name" as |a|}} - {{#a.head buttonLabel="details" isExpandable=(eq a.item.lang "golang")}} -
-
{{a.item.name}}
-
- {{a.item.lang}} -
-
- {{/a.head}} - {{#a.body}} -

{{a.item.name}}

-

{{a.item.desc}}

-

Learn more...

- {{/a.body}} - {{/list-accordion}} -{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-alerts.hbs b/ui/app/templates/components/freestyle/sg-alerts.hbs deleted file mode 100644 index f1d7c8c30c0..00000000000 --- a/ui/app/templates/components/freestyle/sg-alerts.hbs +++ /dev/null @@ -1,84 +0,0 @@ -{{#freestyle-usage "alert-standard" title="Alert"}} -
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

Alerts use Bulma's notification component.

-{{/freestyle-annotation}} - -{{#freestyle-usage "alert-colors" title="Alert colors"}} -
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
- -
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
- -
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
- -
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

Alerts are always paired with an emotive color. If there is no emotive association with the content of the alert, then an alert is the wrong component to use.

-{{/freestyle-annotation}} - -{{#freestyle-usage "alert-dismissal" title="Alert dismissal"}} -
-
-
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
-
- -
-
-
- -
-
-
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
-
- -
-
-
- -
-
-
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
-
- -
-
-
- -
-
-
-

This is an alert

-

Alerts are used for both situational and reactionary information.

-
-
- -
-
-
-{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-boxed-section.hbs b/ui/app/templates/components/freestyle/sg-boxed-section.hbs deleted file mode 100644 index 52b39c82344..00000000000 --- a/ui/app/templates/components/freestyle/sg-boxed-section.hbs +++ /dev/null @@ -1,183 +0,0 @@ -{{#freestyle-collection defaultKey="Normal" as |collection|}} - {{#collection.variant key="Normal"}} - {{#freestyle-usage "boxed-section-normal-normal" title="Normal Boxed Section"}} -
-
- Normal Boxed Section -
-
-
-
-
-
-
-
-
- {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Info"}} - {{#freestyle-usage "boxed-section-normal-info" title="Info Boxed Section"}} -
-
- Normal Boxed Section -
-
-
-
-
-
-
-
-
- {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Warning"}} - {{#freestyle-usage "boxed-section-normal-warning" title="Warning Boxed Section"}} -
-
- Normal Boxed Section -
-
-
-
-
-
-
-
-
- {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Danger"}} - {{#freestyle-usage "boxed-section-normal-danger" title="Danger Boxed Section"}} -
-
- Normal Boxed Section -
-
-
-
-
-
-
-
-
- {{/freestyle-usage}} - {{/collection.variant}} -{{/freestyle-collection}} - -{{#freestyle-collection defaultKey="Normal" as |collection|}} - {{#each variants as |variant|}} - {{#collection.variant key=variant.key}} - {{#freestyle-usage "boxed-section-right-hand-normal" title=(concat variant.title "Normal Boxed Section With Right Hand Details")}} -
-
- Boxed Section With Right Hand Details - {{now interval=1000}} -
-
-
-
-
-
-
-
-
- {{/freestyle-usage}} - {{/collection.variant}} - {{/each}} -{{/freestyle-collection}} - -{{#freestyle-collection defaultKey="Normal" as |collection|}} - {{#each variants as |variant|}} - {{#collection.variant key=variant.key}} - {{#freestyle-usage "boxed-section-left-badge-normal" title=(concat variant.title " Normal Boxed Section With Title Decoration")}} -
-
- Boxed Section With Title Decoration - 7 -
-
-
-
-
-
-
-
-
- {{/freestyle-usage}} - {{/collection.variant}} - {{/each}} -{{/freestyle-collection}} - -{{#freestyle-collection defaultKey="Normal" as |collection|}} - {{#each variants as |variant|}} - {{#collection.variant key=variant.key}} - {{#freestyle-usage "boxed-section-with-foot-normal" title=(concat variant.title " Boxed Section With Foot")}} -
-
- Boxed Section With Large Header -
-
-
-
-
-
-
-
-
- Left-aligned message - Toggle or other action -
-
- {{/freestyle-usage}} - {{/collection.variant}} - {{/each}} -{{/freestyle-collection}} - -{{#freestyle-collection defaultKey="Normal" as |collection|}} - {{#each variants as |variant|}} - {{#collection.variant key=variant.key}} - {{#freestyle-usage "boxed-section-with-large-header" title=(concat variant.title " Boxed Section With Large Header")}} -
-
-
- Boxed Section With Large Header - Status -
-
- A tag that goes on a second line because it's rather long -
-
-
-
-
-
-
-
-
-
- {{/freestyle-usage}} - {{/collection.variant}} - {{/each}} -{{/freestyle-collection}} - -{{#freestyle-collection defaultKey="Normal" as |collection|}} - {{#each variants as |variant|}} - {{#collection.variant key=variant.key}} - {{#freestyle-usage "boxed-section-with-dark-body" title=(concat variant.title " Boxed Section With Dark Body")}} -
-
- Boxed Section With Dark Body -
-
-
-
-
-
-
-
-
- {{/freestyle-usage}} - {{/collection.variant}} - {{/each}} -{{/freestyle-collection}} diff --git a/ui/app/templates/components/freestyle/sg-breadcrumbs.hbs b/ui/app/templates/components/freestyle/sg-breadcrumbs.hbs deleted file mode 100644 index 8ad173adf92..00000000000 --- a/ui/app/templates/components/freestyle/sg-breadcrumbs.hbs +++ /dev/null @@ -1,33 +0,0 @@ -{{#freestyle-usage 'breadcrumbs-standard' title='Standard Breadcrumbs'}} - -{{/freestyle-usage}} -{{#freestyle-annotation}} - Breadcrumbs are only ever used in the secondary nav of the primary header. -{{/freestyle-annotation}} - -{{#freestyle-usage 'breadcrumbs-single' title='Single Breadcrumb'}} - -{{/freestyle-usage}} -{{#freestyle-annotation}} - Breadcrumbs are given a lot of emphasis and often double as a page title. Since they are also global state, they are important for helping a user keep their bearings. -{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-buttons.hbs b/ui/app/templates/components/freestyle/sg-buttons.hbs deleted file mode 100644 index 069427c59a4..00000000000 --- a/ui/app/templates/components/freestyle/sg-buttons.hbs +++ /dev/null @@ -1,54 +0,0 @@ -{{#freestyle-collection defaultKey="standard" as |collection|}} - {{#collection.variant key="standard"}} - {{#freestyle-usage 'buttons-standard' title='Standard Buttons'}} -
- Button - White - Light - Dark - Black - Link -
- - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="outlines"}} - {{#freestyle-usage 'buttons-outlines' title='Outline Buttons'}} - - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="hollow"}} - {{#freestyle-usage 'buttons-hollow' title='Hollow Buttons'}} - - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="sizing"}} - {{#freestyle-usage 'buttons-sizing' title='Button Sizes'}} -
- Small - Normal - Medium - Large -
- {{/freestyle-usage}} - {{/collection.variant}} -{{/freestyle-collection}} diff --git a/ui/app/templates/components/freestyle/sg-colors.hbs b/ui/app/templates/components/freestyle/sg-colors.hbs deleted file mode 100644 index b0f69844f2d..00000000000 --- a/ui/app/templates/components/freestyle/sg-colors.hbs +++ /dev/null @@ -1,16 +0,0 @@ -{{#freestyle-usage "colors"}} - {{freestyle-palette - colorPalette=nomadTheme - title="Nomad Theme" - description="Accent and neutrals."}} - - {{freestyle-palette - colorPalette=productColors - title="Product Colors" - description="Colors from other HashiCorp products. Often borrowed for alternative accents and color schemes."}} - - {{freestyle-palette - colorPalette=emotiveColors - title="Emotive Colors" - description="Colors used in conjunction with an emotional response."}} -{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-copy-button.hbs b/ui/app/templates/components/freestyle/sg-copy-button.hbs deleted file mode 100644 index f3af7cf96c8..00000000000 --- a/ui/app/templates/components/freestyle/sg-copy-button.hbs +++ /dev/null @@ -1,6 +0,0 @@ -{{#freestyle-usage "copy-button" title="Copy Button"}} - - e8c898a0-794b-9063-7a7f-bf0c4a405f83 - {{copy-button clipboardText="e8c898a0-794b-9063-7a7f-bf0c4a405f83"}} - -{{/freestyle-usage}} \ No newline at end of file diff --git a/ui/app/templates/components/freestyle/sg-diff-viewer.hbs b/ui/app/templates/components/freestyle/sg-diff-viewer.hbs deleted file mode 100644 index a7f217bece6..00000000000 --- a/ui/app/templates/components/freestyle/sg-diff-viewer.hbs +++ /dev/null @@ -1,33 +0,0 @@ -{{#freestyle-usage "diff-viewer-insertions" title="Diff Viewer with Insertions"}} -
-
- {{job-diff diff=insertionsOnly}} -
-
-{{/freestyle-usage}} -{{#freestyle-usage "diff-viewer-deletion" title="Diff Viewer with Deletions"}} -
-
- {{job-diff diff=deletionsOnly}} -
-
-{{/freestyle-usage}} -{{#freestyle-usage "diff-viewer-insertions-verbose" title="Diff Viewer with Edits"}} -
-
- {{job-diff diff=editsOnly}} -
-
-{{/freestyle-usage}} - -{{#freestyle-annotation}} - Often times a diff will only have a couple lines. Minor tweaks to a job spec result in small diffs. -{{/freestyle-annotation}} - -{{#freestyle-usage "diff-viewer-large" title="Diff Viewer with Many Changes"}} -
-
- {{job-diff diff=largeDiff}} -
-
-{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-distribution-bar-jumbo.hbs b/ui/app/templates/components/freestyle/sg-distribution-bar-jumbo.hbs deleted file mode 100644 index 924f3ed7d3f..00000000000 --- a/ui/app/templates/components/freestyle/sg-distribution-bar-jumbo.hbs +++ /dev/null @@ -1,25 +0,0 @@ -{{#freestyle-usage "jumbo-distribution-bar"}} - {{#distribution-bar data=distributionBarData class="split-view" as |chart|}} -
    - {{#each chart.data as |datum index|}} -
  1. - - {{datum.value}} - - {{datum.label}} - -
  2. - {{/each}} -
- {{/distribution-bar}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -
- A variation of the Distribution Bar component for when the distribution bar is the central component of the page. It's a larger format that requires no interaction to see the data labels and values. -
-
-
- {{json-viewer json=distributionBarData}} -
-
-{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-distribution-bar.hbs b/ui/app/templates/components/freestyle/sg-distribution-bar.hbs deleted file mode 100644 index 76f4ca2eec8..00000000000 --- a/ui/app/templates/components/freestyle/sg-distribution-bar.hbs +++ /dev/null @@ -1,77 +0,0 @@ -{{#freestyle-collection as |collection|}} - {{#collection.variant key="standard"}} - {{#freestyle-usage 'distribution-bar-standard'}} -
- {{distribution-bar data=distributionBarData}} -
- {{/freestyle-usage}} - {{#freestyle-annotation}} -
- The distribution bar chart proportionally show data in a single bar. It includes a tooltip out of the box, assumes the size of the container element, and is designed to be styled with CSS. -
-
-
- {{json-viewer json=distributionBarData}} -
-
- {{/freestyle-annotation}} - {{/collection.variant}} - {{#collection.variant key="with classes"}} - {{#freestyle-usage 'distribution-bar-with-classes'}} -
- {{distribution-bar data=distributionBarDataWithClasses}} -
- {{/freestyle-usage}} - {{#freestyle-annotation}} -
- If a datum provides a className property, it will be assigned to the corresponding rect element, allowing for custom colorization. -
-
-
- {{json-viewer json=distributionBarDataWithClasses}} -
-
- {{/freestyle-annotation}} - {{/collection.variant}} - {{#collection.variant key="flexibility"}} - {{#freestyle-usage 'distribution-bar-sizing-1'}} -
- {{distribution-bar data=distributionBarData}} -
- {{/freestyle-usage}} - {{#freestyle-usage 'distribution-bar-sizing-2'}} -
- {{distribution-bar data=distributionBarData}} -
- {{/freestyle-usage}} - {{#freestyle-annotation}} -
- Distribution bar assumes the dimensions of the container. -
- {{/freestyle-annotation}} - {{/collection.variant}} - {{#collection.variant key="live updating"}} - {{#freestyle-usage 'distribution-bar-updating'}} -
- {{distribution-bar data=distributionBarDataRotating}} -
- {{/freestyle-usage}} - {{#freestyle-annotation}} -
- Distribution bar animates with data changes. -
-
-
- {{json-viewer json=distributionBarDataRotating}} -
-
- {{/freestyle-annotation}} - {{/collection.variant}} - {{#collection.variant key="single bar"}} - {{#freestyle-usage 'distribution-bar-single'}} -
- {{distribution-bar data=distributionBarDatum}} -
- {{/freestyle-usage}} - {{/collection.variant}} -{{/freestyle-collection}} diff --git a/ui/app/templates/components/freestyle/sg-dropdown.hbs b/ui/app/templates/components/freestyle/sg-dropdown.hbs deleted file mode 100644 index c15239eb75d..00000000000 --- a/ui/app/templates/components/freestyle/sg-dropdown.hbs +++ /dev/null @@ -1,55 +0,0 @@ -{{#freestyle-usage "dropdown" title="Simple Dropdown"}} - {{#power-select - options=options - selected=selectedOption - searchField="name" - searchEnabled=(gt options.length 10) - onchange=(action (mut selectedOption)) - as |option|}} - {{option.name}} - {{/power-select}} -{{/freestyle-usage}} - -{{#freestyle-annotation}} - Power Select currently fulfills all of Nomad's dropdown needs out of the box. -{{/freestyle-annotation}} - -{{#freestyle-usage "dropdown-sized" title="Dropdown Resized"}} -
-
- {{#power-select - options=options - selected=selectedOption2 - searchField="name" - searchEnabled=(gt options.length 10) - onchange=(action (mut selectedOption2)) - as |option|}} - {{option.name}} - {{/power-select}} -
-
-{{/freestyle-usage}} - -{{#freestyle-annotation}} - Dropdowns are always 100% wide. To control the width of a dropdown, adjust the dimensions of its container. One way to achieve this is using columns. -{{/freestyle-annotation}} - -{{#freestyle-usage "dropdown-search" title="Dropdown with Search"}} -
-
- {{#power-select - options=manyOptions - selected=selectedOption3 - searchField="name" - searchEnabled=(gt manyOptions.length 10) - onchange=(action (mut selectedOption3)) - as |option|}} - {{option.name}} - {{/power-select}} -
-
-{{/freestyle-usage}} - -{{#freestyle-annotation}} - Whether or not the dropdown has a search box is configurable. Typically the default is to show a search once a dropdown has more than 10 options. -{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-font-sizing.hbs b/ui/app/templates/components/freestyle/sg-font-sizing.hbs deleted file mode 100644 index 02b3b38c0ff..00000000000 --- a/ui/app/templates/components/freestyle/sg-font-sizing.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{{#freestyle-usage "font-sizing"}} -
-

Large Title

-

Some prose to follow the large title. Not necessarily meant for reading.

-
-
-

Medium Title

-

Some prose to follow the large title. Not necessarily meant for reading.

-
-
-

Small Title

-

Some prose to follow the large title. Not necessarily meant for reading.

-
-{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-font-stacks.hbs b/ui/app/templates/components/freestyle/sg-font-stacks.hbs deleted file mode 100644 index 9b8dfb2e6e4..00000000000 --- a/ui/app/templates/components/freestyle/sg-font-stacks.hbs +++ /dev/null @@ -1,52 +0,0 @@ -{{#freestyle-collection inline=true as |collection|}} - {{#collection.variant key="-apple-system"}} - {{#freestyle-usage "font-apple-system" title="-apple-system"}} - {{freestyle-typeface fontFamily="-apple-system"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="BlinkMacSystemFont"}} - {{#freestyle-usage "font-blink-mac-system" title="BlinkMacSystemFont"}} - {{freestyle-typeface fontFamily="BlinkMacSystemFont"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Segoe UI"}} - {{#freestyle-usage "font-segoe-ui" title="Segoe UI"}} - {{freestyle-typeface fontFamily="Segoe UI"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Roboto"}} - {{#freestyle-usage "font-roboto" title="Roboto"}} - {{freestyle-typeface fontFamily="Roboto"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Oxygen Sans"}} - {{#freestyle-usage "font-oxygen-sans" title="Oxygen Sans"}} - {{freestyle-typeface fontFamily="Oxygen-Sans"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Ubuntu"}} - {{#freestyle-usage "font-ubuntu" title="Ubuntu"}} - {{freestyle-typeface fontFamily="Ubuntu"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Cantarell"}} - {{#freestyle-usage "font-cantarell" title="Cantarell"}} - {{freestyle-typeface fontFamily="Cantarell"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="Helvetica Neue"}} - {{#freestyle-usage "font-helvetica-neue" title="Helvetica Neue"}} - {{freestyle-typeface fontFamily="Helvetica Neue"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="sans-serif"}} - {{#freestyle-usage "font-sans-serif" title="sans-serif"}} - {{freestyle-typeface fontFamily="sans-serif"}} - {{/freestyle-usage}} - {{/collection.variant}} - {{#collection.variant key="monospace"}} - {{#freestyle-usage "font-monospace" title="monospace"}} - {{freestyle-typeface fontFamily="monospace"}} - {{/freestyle-usage}} - {{/collection.variant}} -{{/freestyle-collection}} diff --git a/ui/app/templates/components/freestyle/sg-gutter-menu.hbs b/ui/app/templates/components/freestyle/sg-gutter-menu.hbs deleted file mode 100644 index 8ccc3e7593a..00000000000 --- a/ui/app/templates/components/freestyle/sg-gutter-menu.hbs +++ /dev/null @@ -1,156 +0,0 @@ -{{#freestyle-usage "gutter-nav" title="Gutter Menu"}} -
-
-
- -
-
-
-
-
-
-
-
-{{/freestyle-usage}} - -{{#freestyle-usage "gutter-nav-rich-components" title="Gutter Navigation with Rich Components"}} -
-
-
- -
-
-
-
-
-
-
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} - In order to keep the gutter navigation streamlined and easy to navigation, rich components should be avoided when possible. When not possible, they should be kept near the top. -{{/freestyle-annotation}} - -{{#freestyle-usage "gutter-nav-many-items" title="Hypothetical Gutter Navigation with Many Items"}} -
-
-
- -
-
-
-
-
-
-
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} - There will only ever be one gutter menu in the Nomad UI, but it helps to imagine a situation where there are many navigation items in the gutter. -{{/freestyle-annotation}} - -{{#freestyle-usage "gutter-nav-icon-items" title="Hypothetical Gutter Navigation with Icon Items"}} - -{{/freestyle-usage}} -{{#freestyle-annotation}} - In the future, the gutter menu may have icons. -{{/freestyle-annotation}} - -{{#freestyle-usage "gutter-nav-global" title="Global Gutter Navigation"}} -
-
- {{#gutter-menu}} - {{!-- Page content here --}} - {{/gutter-menu}} -
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

Since there will only ever be one gutter menu in the UI, it makes sense to express the menu as a singleton component. This is what that singleton component looks like.

- -

Note: Normally the gutter menu is rendered within a page layout and is fixed position. The columns shown in this example are only to imitate the actual width without applying fixed positioning.

-{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-header.hbs b/ui/app/templates/components/freestyle/sg-header.hbs deleted file mode 100644 index 54aacf62e5c..00000000000 --- a/ui/app/templates/components/freestyle/sg-header.hbs +++ /dev/null @@ -1,17 +0,0 @@ -{{#freestyle-usage "header" title="Global Header"}} - -{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-inline-definitions.hbs b/ui/app/templates/components/freestyle/sg-inline-definitions.hbs deleted file mode 100644 index ca51f9c0127..00000000000 --- a/ui/app/templates/components/freestyle/sg-inline-definitions.hbs +++ /dev/null @@ -1,80 +0,0 @@ -{{#freestyle-usage "inline-definitions" title="Inline Definitions"}} -
-
- Some Label - - Term Name - Term Value - - - Running? - Yes - - - Last Updated - {{format-ts (now)}} - -
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} - A way to tightly display key/value information. Typically seen at the top of pages. -{{/freestyle-annotation}} - -{{#freestyle-usage "inline-definitions-variants" title="Inline Definitions Variants"}} -
-
- Success Label - - Term Name - Term Value - - - Last Updated - {{format-ts (now)}} - -
-
-
-
- Warning Label - - Term Name - Term Value - - - Last Updated - {{format-ts (now)}} - -
-
-
-
- Danger Label - - Term Name - Term Value - - - Last Updated - {{format-ts (now)}} - -
-
-
-
- Info Label - - Term Name - Term Value - - - Last Updated - {{format-ts (now)}} - -
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} - Inline definitions are meant to pair well with emotive color variations. -{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-json-viewer.hbs b/ui/app/templates/components/freestyle/sg-json-viewer.hbs deleted file mode 100644 index ee6b3d3d56f..00000000000 --- a/ui/app/templates/components/freestyle/sg-json-viewer.hbs +++ /dev/null @@ -1,15 +0,0 @@ -{{#freestyle-usage "json-viewer" title="JSON Viewer"}} -
-
- {{json-viewer json=jsonSmall}} -
-
-{{/freestyle-usage}} - -{{#freestyle-usage "json-viewer-full" title="JSON Viewer for Full Document"}} -
-
- {{json-viewer json=jsonLarge}} -
-
-{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-line-chart.hbs b/ui/app/templates/components/freestyle/sg-line-chart.hbs deleted file mode 100644 index 014b061bd2a..00000000000 --- a/ui/app/templates/components/freestyle/sg-line-chart.hbs +++ /dev/null @@ -1,42 +0,0 @@ -{{#freestyle-usage "line-chart-standard" title="Standard"}} -
- {{line-chart data=lineChartData xProp="year" yProp="value" chartClass="is-primary"}} -
-
- {{line-chart data=lineChartMild xProp="year" yProp="value" chartClass="is-info"}} -
-{{/freestyle-usage}} - -{{#freestyle-usage "line-chart-fill-width" title="Fluid width"}} -
- {{line-chart data=lineChartData xProp="year" yProp="value" chartClass="is-danger"}} -
-
- {{line-chart data=lineChartMild xProp="year" yProp="value" chartClass="is-warning"}} -
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

A line chart will assume the width of its container. This includes the dimensions of the axes, which are calculated based on real DOM measurements. This requires a two-pass render: first the axes are placed with their real domains (in order to capture width and height of tick labels), second the axes are adjusted to make sure both the x and y axes are within the height and width bounds of the container.

-{{/freestyle-annotation}} - -{{#freestyle-usage "line-chart-live-data" title="Live data"}} -
- {{line-chart - data=lineChartLive - xProp="ts" - yProp="val" - timeseries=true - chartClass="is-primary" - xFormat=secondsFormat}} -
-{{/freestyle-usage}} - -{{#freestyle-usage "line-chart-with-gaps" title="Data with gaps"}} -
- {{line-chart - data=lineChartGapData - xProp="year" - yProp="value" - chartClass="is-primary"}} -
-{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-log-stream.hbs b/ui/app/templates/components/freestyle/sg-log-stream.hbs deleted file mode 100644 index c3d656dcbd6..00000000000 --- a/ui/app/templates/components/freestyle/sg-log-stream.hbs +++ /dev/null @@ -1,24 +0,0 @@ -{{#freestyle-usage "log-stream" title="Log Stream"}} -
-
- - - - - - - - - -
-
-
{{if (eq mode1 "stdout") sampleOutput sampleError}}
-
-
-{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-metrics.hbs b/ui/app/templates/components/freestyle/sg-metrics.hbs deleted file mode 100644 index cbd2172fa00..00000000000 --- a/ui/app/templates/components/freestyle/sg-metrics.hbs +++ /dev/null @@ -1,125 +0,0 @@ -{{#freestyle-usage "metrics" title="Metrics"}} -
-
-

Label

-

12

-
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

Metrics are a way to show simple values (generally numbers). Labels are smaller than numbers to put emphasis on the data.

-{{/freestyle-annotation}} - -{{#freestyle-usage "metric-groups" title="Metric Groups"}} -
-
-

Label

-

1 / 2

-
-
-

Number

-

1,300

-
-
-

Datacenter

-

dc1

-
-
- -
-
-

Today

-

81º

-
-
-

Tomorrow

-

73º

-
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

Related metrics should be lumped together in metric groups. All metrics have to be in a metric group. By putting multiple metrics in a single group, they will be visually lumped together.

-{{/freestyle-annotation}} - -{{#freestyle-usage "metric-colors" title="Metric Colors"}} -
-
-

Info

-

1

-
-
-

Success

-

2

-
-
-

Warning

-

3

-
-
-

Danger

-

4

-
-
- -
-
-

White

-

5

-
-
-

Light

-

6

-
-
-

Primary

-

7

-
-
-

Dark

-

8

-
-
-

Black

-

9

-
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

All color-modifiers work for metrics, but some work better than others.

-

Emotive colors work well and are put to use when applicable. Other colors have worse support and less utility.

-{{/freestyle-annotation}} - -{{#freestyle-usage "metric-states" title="Metric States"}} -
-
-

One

-

A

-
-
-

Two

-

B

-
-
-

Three

-

C

-
-
- -
-
-

One

-

A

-
-
-

Two

-

B

-
-
-

Three

-

C

-
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

Metrics have a disabled state. This is used when a metric is non-existent or irrelevant. It's just as important to show the lack of value as it is to show a value, so simply not rendering non-existent or irrelevant metrics would be worse.

-{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-multi-select-dropdown.hbs b/ui/app/templates/components/freestyle/sg-multi-select-dropdown.hbs deleted file mode 100644 index 99012cce891..00000000000 --- a/ui/app/templates/components/freestyle/sg-multi-select-dropdown.hbs +++ /dev/null @@ -1,58 +0,0 @@ -{{#freestyle-usage "multi-select-dropdown" title="Multi-select dropdown"}} - {{multi-select-dropdown - label="Example Dropdown" - options=options1 - selection=selection1 - onSelect=(action (mut selection1))}} -{{/freestyle-usage}} -{{#freestyle-annotation}} - A wrapper around basic-dropdown for creating a list of checkboxes and tracking the state thereof. -{{/freestyle-annotation}} - -{{#freestyle-usage "multi-select-right-aligned" title="Multi-select dropdown right-aligned"}} -
- {{multi-select-dropdown - label="Example right-aligned Dropdown" - options=options1 - selection=selection1 - onSelect=(action (mut selection1))}} -
-{{/freestyle-usage}} - -{{#freestyle-usage "multi-select-dropdown-may" title="Multi-select dropdown with many options"}} - {{multi-select-dropdown - label="Lots of options in here" - options=optionsMany - selection=selectionMany - onSelect=(action (mut selectionMany))}} -{{/freestyle-usage}} -{{#freestyle-annotation}} - A strength of the multi-select-dropdown is its simple presentation. It is quick to select options and it is quick to remove options. - However, this strength becomes a weakness when there are too many options. Since the selection isn't pinned in any way, removing a selection - can become an adventure of scrolling up and down. Also since the selection isn't pinned, this component can't support search, since search would - entirely mask the selection. -{{/freestyle-annotation}} - -{{#freestyle-usage "multi-select-dropdown-bar" title="Multi-select dropdown bar"}} -
- {{multi-select-dropdown - label="Datacenter" - options=optionsDatacenter - selection=selectionDatacenter - onSelect=(action (mut selectionDatacenter))}} - {{multi-select-dropdown - label="Type" - options=optionsType - selection=selectionType - onSelect=(action (mut selectionType))}} - {{multi-select-dropdown - label="Status" - options=optionsStatus - selection=selectionStatus - onSelect=(action (mut selectionStatus))}} -
-{{/freestyle-usage}} -{{#freestyle-annotation}} - Since this is a core component for faceted search, it makes sense to construct an arrangement of multi-select dropdowns. - Do this by wrapping all the options in a .button-bar container. -{{/freestyle-annotation}} \ No newline at end of file diff --git a/ui/app/templates/components/freestyle/sg-page-tabs.hbs b/ui/app/templates/components/freestyle/sg-page-tabs.hbs deleted file mode 100644 index 56fd755f40f..00000000000 --- a/ui/app/templates/components/freestyle/sg-page-tabs.hbs +++ /dev/null @@ -1,18 +0,0 @@ -{{#freestyle-usage "page-tabs" title="Page Tabs"}} - -{{/freestyle-usage}} - -{{#freestyle-usage "page-tabs-single" title="Single Page Tab"}} -
- -
-{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-page-title.hbs b/ui/app/templates/components/freestyle/sg-page-title.hbs deleted file mode 100644 index abb419d899e..00000000000 --- a/ui/app/templates/components/freestyle/sg-page-title.hbs +++ /dev/null @@ -1,51 +0,0 @@ -{{#freestyle-usage "page-title" title="Page Title"}} -
-

This is the Page Title

-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

In its simplest form, a page title is just an H1.

-{{/freestyle-annotation}} - -{{#freestyle-usage "page-title-after-elements" title="Page Title with After Elements"}} -
-

- This is the Page Title - Running - 237aedcb8982fe09bcee0877acedd -

-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

It is common to put high-impact tags and badges to the right of titles. These tags should only ever appear on the right-hand side of the title, and they should be listed in descending weights. Tags with a background are heavier than tags that are hollow. Longer values are heavier than shorter values.

-{{/freestyle-annotation}} - -{{#freestyle-usage "page-title-with-status-light" title="Page Title with Status Light"}} -
-

- - This is the Page Title - Running - 237aedcb8982fe09bcee0877acedd -

-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

A simple color or pattern is faster to scan than a title and can often say more than words can. For pages that have an important status component to them (e.g., client detail page), a status light can be shown to the left of the title where typically eyes will begin to scan a page.

-{{/freestyle-annotation}} - -{{#freestyle-usage "page-title-with-actions" title="Page Title with Actions"}} -
-

- - This is the Page Title - Running - 237aedcb8982fe09bcee0877acedd - - -

-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

When actions apply to the entire context of a page, (e.g., job actions on the job detail page), buttons for these actions go in the page title. Buttons are always placed on the far right end of a page title. No elements can go to the right of these buttons.

-{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-progress-bar.hbs b/ui/app/templates/components/freestyle/sg-progress-bar.hbs deleted file mode 100644 index edf0d096cda..00000000000 --- a/ui/app/templates/components/freestyle/sg-progress-bar.hbs +++ /dev/null @@ -1,77 +0,0 @@ -{{#freestyle-usage "progress-bar" title="Progress Bar"}} - -{{/freestyle-usage}} - -{{#freestyle-usage "progress-bar-colors" title="Progress Bar Colors"}} -
-
- -
-
- -
-
- -
-
- -
-
-{{/freestyle-usage}} - -{{#freestyle-usage "progress-bar-live" title="Progress Bar Live Updates"}} -
-
- -
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -
-
- {{json-viewer json=liveDetails}} -
-
-{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-proxy-tag.hbs b/ui/app/templates/components/freestyle/sg-proxy-tag.hbs deleted file mode 100644 index f392706b55d..00000000000 --- a/ui/app/templates/components/freestyle/sg-proxy-tag.hbs +++ /dev/null @@ -1,3 +0,0 @@ -{{#freestyle-usage "proxy-tag" title="Proxy Tag"}} - {{proxy-tag}} -{{/freestyle-usage}} \ No newline at end of file diff --git a/ui/app/templates/components/freestyle/sg-search-box.hbs b/ui/app/templates/components/freestyle/sg-search-box.hbs deleted file mode 100644 index 4a0323b81cd..00000000000 --- a/ui/app/templates/components/freestyle/sg-search-box.hbs +++ /dev/null @@ -1,19 +0,0 @@ -{{#freestyle-usage "search-box" title="Search Box"}} - {{search-box - searchTerm=(mut searchTerm1) - placeholder="Search things..."}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

The search box component is a thin wrapper around a simple input. Although the searchTerm passed to it is a mutable reference, internally search term is debounced. This is to prevent potentially expensive code that depends on searchTerm from recomputing many times as a user types.

-

There is no form of the search box component that defers updating the searchTerm reference until the user manually clicks a "Search" button. This can be achieved by placing a button next to the search bar component and using it to perform search, but search should be automatic whenever possible.

-{{/freestyle-annotation}} - -{{#freestyle-usage "search-box-compact" title="Search Box Compact"}} - {{search-box - searchTerm=(mut searchTerm2) - placeholder="Search things..." - inputClass="is-compact"}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

Search box provides an inputClass property to control the inner input. This is nice for fitting the search box into smaller spaces, such as boxed-section heads.

-{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-stats-time-series.hbs b/ui/app/templates/components/freestyle/sg-stats-time-series.hbs deleted file mode 100644 index 3b077e1d552..00000000000 --- a/ui/app/templates/components/freestyle/sg-stats-time-series.hbs +++ /dev/null @@ -1,20 +0,0 @@ -{{#freestyle-usage "stats-time-series-standard" title="Stats Time Series"}} -
- {{stats-time-series data=staticMetrics chartClass="is-primary"}} -
-{{/freestyle-usage}} - -{{#freestyle-usage "stats-time-series-comparison" title="Stats Time Series High/Low Comparison"}} -
-
- {{stats-time-series data=metricsHigh chartClass="is-info"}} -
-
- {{stats-time-series data=metricsLow chartClass="is-info"}} -
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

Line charts, and therefore stats time series charts, use a constant linear gradient with a height equal to the canvas. This makes the color intensity of the gradient at values consistent across charts as long as those charts have the same y-axis domain.

-

This is used to great effect with stats charts since they all have a y-axis domain of 0-100%.

-{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-table-configuration.hbs b/ui/app/templates/components/freestyle/sg-table-configuration.hbs deleted file mode 100644 index 5c7ff65b5e9..00000000000 --- a/ui/app/templates/components/freestyle/sg-table-configuration.hbs +++ /dev/null @@ -1,3 +0,0 @@ -{{#freestyle-usage "table-configuration" title="Table, Configuration"}} - {{attributes-table attributes=attributes class="attributes-table"}} -{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-table.hbs b/ui/app/templates/components/freestyle/sg-table.hbs deleted file mode 100644 index fffa79ef033..00000000000 --- a/ui/app/templates/components/freestyle/sg-table.hbs +++ /dev/null @@ -1,257 +0,0 @@ -{{#freestyle-usage "table-simple" title="Table"}} - {{#list-table source=shortList as |t|}} - {{#t.head}} - Name - Language - Description - {{/t.head}} - {{#t.body key="model.name" as |row|}} - - {{row.model.name}} - {{row.model.lang}} - {{row.model.desc}} - - {{/t.body}} - {{/list-table}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

Tables have airy designs with a minimal amount of borders. This maximizes their utility.

-{{/freestyle-annotation}} - -{{#freestyle-usage "table-search" title="Table Search"}} -
-
- Table Name - {{search-box - searchTerm=(mut searchTerm) - placeholder="Search..." - class="is-inline pull-right" - inputClass="is-compact"}} -
-
- {{#if filteredShortList.length}} - {{#list-table source=filteredShortList as |t|}} - {{#t.head}} - Name - Language - Description - {{/t.head}} - {{#t.body key="model.name" as |row|}} - - {{row.model.name}} - {{row.model.lang}} - {{row.model.desc}} - - {{/t.body}} - {{/list-table}} - {{else}} -
-

No Matches

-

No products match your query.

-
- {{/if}} -
-
-{{/freestyle-usage}} -{{#freestyle-annotation}} -

Tables compose with boxed-section and boxed-section composes with search box.

-{{/freestyle-annotation}} - -{{#freestyle-usage "table-sortable-columns" title="Table Sortable Columns"}} - {{#list-table - source=sortedShortList - sortProperty=sortProperty - sortDescending=sortDescending as |t|}} - {{#t.head}} - {{#t.sort-by prop="name"}}Name{{/t.sort-by}} - {{#t.sort-by prop="lang" class="is-2"}}Language{{/t.sort-by}} - Description - {{/t.head}} - {{#t.body key="model.name" as |row|}} - - {{row.model.name}} - {{row.model.lang}} - {{row.model.desc}} - - {{/t.body}} - {{/list-table}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

The list-table component provides a sort-by contextual component for building link-to components with the appropriate query params.

-

This leaves the component stateless, relying on data to be passed down and sending actions back up via the router (via link-to).

-{{/freestyle-annotation}} - -{{#freestyle-usage "table-multi-row" title="Table Multi-row"}} - {{#list-table - source=sortedShortList - sortProperty=sortProperty - sortDescending=sortDescending - class="is-striped" as |t|}} - {{#t.head}} - {{#t.sort-by prop="name"}}Name{{/t.sort-by}} - {{#t.sort-by prop="lang"}}Language{{/t.sort-by}} - {{/t.head}} - {{#t.body key="model.name" as |row|}} - - {{row.model.name}} - {{row.model.lang}} - - - {{row.model.desc}} - - {{/t.body}} - {{/list-table}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

THe list-table component attempts to be as flexible as possible. For this reason, t.body does not provide the typical tr element. It's sometimes desired to have multiple elements per record.

-{{/freestyle-annotation}} - -{{#freestyle-usage "table-pagination" title="Table Pagination"}} - {{#list-pagination source=longList size=5 page=currentPage as |p|}} - {{#list-table source=p.list class="with-foot" as |t|}} - {{#t.head}} - Rank - City - State - Population - Growth - {{/t.head}} - {{#t.body key="model.rank" as |row|}} - - {{row.model.rank}} - {{row.model.city}} - {{row.model.state}} - {{row.model.population}} - {{format-percentage row.model.growth total=1}} - - {{/t.body}} - {{/list-table}} -
- -
- {{/list-pagination}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

Pagination works like sorting: using link-tos to set a query param.

-

Pagination, like Table, is a minimal design. Only a next and previous button are available. The current place in the set of pages is tracked by showing which slice of items is currently shown.

-

The pagination component exposes first and last components (for jumping to the beginning and end of a list) as well as pageLinks for generating links around the current page.

-{{/freestyle-annotation}} - -{{#freestyle-usage "table-row-links" title="Table Row Links"}} - {{#list-table source=shortList as |t|}} - {{#t.head}} - Name - Language - Description - {{/t.head}} - {{#t.body key="model.name" as |row|}} - - {{row.model.name}} - {{row.model.lang}} - {{row.model.desc}} - - {{/t.body}} - {{/list-table}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

It is common for tables to act as lists of links, (e.g., clients list all allocations, each row links to the allocation detail). The helper class is-interactive on the tr makes table rows have a pointer cursor. The helper class is-primary on the a element in a table row makes the link bold and black instead of blue. This makes the link stand out less, since the entire row is a link.

-

A few rules for using table row links:

-
    -
  1. The is-primary cell should always be the first cell
  2. -
  3. The is-primary cell should always contain a link to the destination in the form of an a element. This is to support opening a link in a new tab.
  4. -
  5. The full row should transition to the destination on click. This is to improve the usability of a table by creating a larger click area.
  6. -
-{{/freestyle-annotation}} - -{{#freestyle-usage "table-cell-links" title="Table Cell Links"}} - {{#list-table source=shortList as |t|}} - {{#t.head}} - Name - Language - Description - {{/t.head}} - {{#t.body key="model.name" as |row|}} - - {{row.model.name}} - {{row.model.lang}} - {{row.model.desc}} - - {{/t.body}} - {{/list-table}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

Links in table cells are just links.

-{{/freestyle-annotation}} - -{{#freestyle-usage "table-cell-decorations" title="Table Cell Decorations"}} - {{#list-table source=shortList as |t|}} - {{#t.head}} - Name - Language - Description - {{/t.head}} - {{#t.body key="model.name" as |row|}} - - {{row.model.name}} - - - {{row.model.lang}} - - {{row.model.desc}} - - {{/t.body}} - {{/list-table}} -{{/freestyle-usage}} -{{#freestyle-annotation}} -

Small icons and accents of color make tables easier to scan.

-{{/freestyle-annotation}} - -{{#freestyle-usage "table-cell-icons" title="Table Cell Icons"}} - {{#list-pagination source=longList size=5 page=currentPage as |p|}} - {{#list-table source=p.list class="with-foot" as |t|}} - {{#t.head}} - - Rank - City - State - Population - Growth - {{/t.head}} - {{#t.body key="model.rank" as |row|}} - - - {{#if (lt row.model.growth 0)}} - {{x-icon "warning" class="is-warning"}} - {{/if}} - - {{row.model.rank}} - {{row.model.city}} - {{row.model.state}} - {{row.model.population}} - {{format-percentage row.model.growth total=1}} - - {{/t.body}} - {{/list-table}} -
- -
- {{/list-pagination}} -{{/freestyle-usage}} diff --git a/ui/app/templates/components/freestyle/sg-timeline.hbs b/ui/app/templates/components/freestyle/sg-timeline.hbs deleted file mode 100644 index aa340515c19..00000000000 --- a/ui/app/templates/components/freestyle/sg-timeline.hbs +++ /dev/null @@ -1,204 +0,0 @@ -{{#freestyle-usage 'timeline' title="Simple Timeline"}} -
    -
  1. - {{format-date yesterday}} -
  2. -
  3. -
    -
    - Object number one -
    -
    -
  4. -
  5. -
    -
    - Object number two -
    -
    -
  6. -
  7. - {{format-date today}} -
  8. -
  9. -
    -
    - Object number three -
    -
    -
  10. -
-{{/freestyle-usage}} - -{{#freestyle-annotation}} -

Timelines are a combination of objects and notes. Objects compose with boxed sections to create structure.

-

Timeline notes should be used sparingly when possible. In this example there is a note per day rather than a note per object.

-{{/freestyle-annotation}} - -{{#freestyle-usage 'timeline-intricate' title="Detailed Timeline"}} -
    -
  1. - {{format-date today}} -
  2. -
  3. -
    -
    - Running - - Stable - a387e243 - - - Submitted - {{moment-from-now (now)}} - -
    -
    -
  4. -
  5. -
    -
    - Complete - - Expired - b3220efb - - - Submitted - {{format-month-ts yesterday}} - -
    -
    -
  6. -
  7. - {{format-date yesterday}} -
  8. -
  9. -
    -
    - Failed - - Reverted - fec9218e - - - Submitted - {{format-month-ts yesterday}} - -
    -
    -
  10. -
-{{/freestyle-usage}} - -{{#freestyle-usage 'timeline-toggles' title='Toggling Timeline Objects'}} -
    -
  1. - {{format-date today}} -
  2. -
  3. -
    -
    - Running - - Stable - a387e243 - - -
    - {{#if toggle1}} -
    -

    Some details for the timeline object.

    -
    - {{/if}} -
    -
  4. -
  5. - {{format-date yesterday}} -
  6. -
  7. -
    -
    - Complete - - Expired - b3220efb - - -
    - {{#if toggle2}} -
    -

    Some details for the timeline object.

    -
    - {{/if}} -
    -
  8. -
-{{/freestyle-usage}} - -{{#freestyle-usage 'timeline-emphasis' title='Emphasizing a Timeline Object'}} -
    -
  1. - {{format-date today}} -
  2. -
  3. -
    -
    - - Stable - a387e243 - - - Submitted - {{moment-from-now (now)}} - -
    -
    -
  4. -
  5. -
    -
    - Pay attention here -
    -
    - - Expired - b3220efb - - - Submitted - {{format-ts yesterday}} - -
    -
    -
  6. -
  7. - {{format-date yesterday}} -
  8. -
  9. -
    -
    - - Reverted - fec9218e - - - Submitted - {{format-ts yesterday}} - -
    -
    -
  10. -
-{{/freestyle-usage}} -{{#freestyle-annotation}} - By using a full boxed-section for an emphasized timeline object, the object takes up more space and gets more visual weight. It also adheres to existing patterns. -{{/freestyle-annotation}} diff --git a/ui/app/templates/components/freestyle/sg-two-step-button.hbs b/ui/app/templates/components/freestyle/sg-two-step-button.hbs deleted file mode 100644 index 74f43919fbd..00000000000 --- a/ui/app/templates/components/freestyle/sg-two-step-button.hbs +++ /dev/null @@ -1,40 +0,0 @@ -{{#freestyle-usage "two-step-button" title="Two Step Button"}} -
- {{two-step-button - idleText="Scary Action" - cancelText="Nvm" - confirmText="Yep" - confirmationMessage="Wait, really? Like...seriously?"}} -
-{{/freestyle-usage}} - -{{#freestyle-usage "two-step-button-title" title="Two Step Button in Title"}} -
-

- This is a page title - {{two-step-button - idleText="Scary Action" - cancelText="Nvm" - confirmText="Yep" - confirmationMessage="Wait, really? Like...seriously?"}} -

-
-{{/freestyle-usage}} - -{{#freestyle-usage "two-step-button-loading" title="Two Step Button Loading State"}} -
-

- This is a page title - {{two-step-button - idleText="Scary Action" - cancelText="Nvm" - confirmText="Yep" - confirmationMessage="Wait, really? Like...seriously?" - awaitingConfirmation=true - state="prompt"}} -

-
-{{/freestyle-usage}} -{{#freestyle-annotation}} - Note: the state property is internal state and only used here to bypass the idle state for demonstration purposes. -{{/freestyle-annotation}} diff --git a/ui/app/templates/components/global-header.hbs b/ui/app/templates/components/global-header.hbs index 37b1018c746..088e9ba641c 100644 --- a/ui/app/templates/components/global-header.hbs +++ b/ui/app/templates/components/global-header.hbs @@ -8,9 +8,6 @@ {{/link-to}} diff --git a/ui/app/templates/components/gutter-menu.hbs b/ui/app/templates/components/gutter-menu.hbs index 4c182af6f74..a4ba2aa235e 100644 --- a/ui/app/templates/components/gutter-menu.hbs +++ b/ui/app/templates/components/gutter-menu.hbs @@ -36,7 +36,7 @@ selected=system.activeNamespace searchField="name" searchEnabled=(gt sortedNamespaces.length 10) - onchange=(action gotoJobsForNamespace) + onChange=(action gotoJobsForNamespace) tagName="div" class="namespace-switcher" as |namespace|}} diff --git a/ui/app/templates/components/job-page/parts/children.hbs b/ui/app/templates/components/job-page/parts/children.hbs index 944168f1bce..906eb30b391 100644 --- a/ui/app/templates/components/job-page/parts/children.hbs +++ b/ui/app/templates/components/job-page/parts/children.hbs @@ -2,41 +2,43 @@ Job Launches
- {{#list-pagination - source=sortedChildren - size=pageSize - page=currentPage as |p|}} - {{#list-table - source=p.list - sortProperty=sortProperty - sortDescending=sortDescending - class="with-foot" as |t|}} - {{#t.head}} - {{#t.sort-by prop="name"}}Name{{/t.sort-by}} - {{#t.sort-by prop="status"}}Status{{/t.sort-by}} - {{#t.sort-by prop="type"}}Type{{/t.sort-by}} - {{#t.sort-by prop="priority"}}Priority{{/t.sort-by}} - Groups - Summary - {{/t.head}} - {{#t.body key="model.id" as |row|}} - {{job-row data-test-job-row job=row.model onClick=(action gotoJob row.model)}} - {{/t.body}} - {{/list-table}} -
- -
+ {{#if sortedChildren}} + {{#list-pagination + source=sortedChildren + size=pageSize + page=currentPage as |p|}} + {{#list-table + source=p.list + sortProperty=sortProperty + sortDescending=sortDescending + class="with-foot" as |t|}} + {{#t.head}} + {{#t.sort-by prop="name"}}Name{{/t.sort-by}} + {{#t.sort-by prop="status"}}Status{{/t.sort-by}} + {{#t.sort-by prop="type"}}Type{{/t.sort-by}} + {{#t.sort-by prop="priority"}}Priority{{/t.sort-by}} + Groups + Summary + {{/t.head}} + {{#t.body key="model.id" as |row|}} + {{job-row data-test-job-row job=row.model onClick=(action gotoJob row.model)}} + {{/t.body}} + {{/list-table}} +
+ +
+ {{/list-pagination}} {{else}}

No Job Launches

No remaining living job launches.

- {{/list-pagination}} + {{/if}}
diff --git a/ui/app/templates/components/list-pagination.hbs b/ui/app/templates/components/list-pagination.hbs index e42c7fc6291..ce74865a0cf 100644 --- a/ui/app/templates/components/list-pagination.hbs +++ b/ui/app/templates/components/list-pagination.hbs @@ -10,7 +10,5 @@ startsAt=startsAt endsAt=endsAt list=list -)}} -{{else}} - {{yield to="inverse"}} + )}} {{/if}} diff --git a/ui/app/templates/components/multi-select-dropdown.hbs b/ui/app/templates/components/multi-select-dropdown.hbs index f7b48e14988..b2e4c89fb85 100644 --- a/ui/app/templates/components/multi-select-dropdown.hbs +++ b/ui/app/templates/components/multi-select-dropdown.hbs @@ -1,36 +1,43 @@ -{{#basic-dropdown - horizontalPosition="left" - onOpen=(action (queue - (action (mut isOpen) true) - (action capture) - )) - onClose=(action (mut isOpen) false) - as |dd|}} - {{#dd.trigger data-test-dropdown-trigger class="dropdown-trigger" onKeyDown=(action "openOnArrowDown")}} - + + + - {{/dd.trigger}} - {{#dd.content class="dropdown-options"}} + +
    {{#each options key="key" as |option|}} - {{else}} - No options + + No options + {{/each}}
- {{/dd.content}} -{{/basic-dropdown}} \ No newline at end of file +
+
\ No newline at end of file diff --git a/ui/app/templates/components/popover-menu.hbs b/ui/app/templates/components/popover-menu.hbs new file mode 100644 index 00000000000..98753c996d4 --- /dev/null +++ b/ui/app/templates/components/popover-menu.hbs @@ -0,0 +1,18 @@ + + + {{label}} {{x-icon "chevron-down" class="is-text"}} + + + {{yield dd}} + + diff --git a/ui/app/templates/components/region-switcher.hbs b/ui/app/templates/components/region-switcher.hbs index df2da187093..7cd46037a83 100644 --- a/ui/app/templates/components/region-switcher.hbs +++ b/ui/app/templates/components/region-switcher.hbs @@ -6,7 +6,7 @@ options=sortedRegions selected=system.activeRegion searchEnabled=false - onchange=(action gotoRegion) as |region|}} + onChange=(action gotoRegion) as |region|}} Region: {{region}} {{/power-select}} {{/if}} diff --git a/ui/app/templates/components/toggle.hbs b/ui/app/templates/components/toggle.hbs new file mode 100644 index 00000000000..dbcf208dfbb --- /dev/null +++ b/ui/app/templates/components/toggle.hbs @@ -0,0 +1,9 @@ + + +{{yield}} diff --git a/ui/app/templates/components/two-step-button.hbs b/ui/app/templates/components/two-step-button.hbs index e29194e9f35..18e7d26fbf7 100644 --- a/ui/app/templates/components/two-step-button.hbs +++ b/ui/app/templates/components/two-step-button.hbs @@ -2,17 +2,21 @@ {{else if isPendingConfirmation}} - {{confirmationMessage}} + + {{confirmationMessage}} + + {{/if}} {{/if}}
@@ -48,44 +57,55 @@
{{#if (not (media "isMobile"))}}
- {{#link-to "jobs.run" data-test-run-job class="button is-primary"}}Run Job{{/link-to}} + {{#if (can "run job")}} + {{#link-to "jobs.run" data-test-run-job class="button is-primary"}}Run Job{{/link-to}} + {{else}} + + {{/if}}
{{/if}} - {{#list-pagination - source=sortedJobs - size=pageSize - page=currentPage as |p|}} - {{#list-table - source=p.list - sortProperty=sortProperty - sortDescending=sortDescending - class="with-foot" as |t|}} - {{#t.head}} - {{#t.sort-by prop="name"}}Name{{/t.sort-by}} - {{#t.sort-by prop="status"}}Status{{/t.sort-by}} - {{#t.sort-by prop="type"}}Type{{/t.sort-by}} - {{#t.sort-by prop="priority"}}Priority{{/t.sort-by}} - Groups - Summary - {{/t.head}} - {{#t.body key="model.id" as |row|}} - {{job-row data-test-job-row=row.model.plainId job=row.model onClick=(action "gotoJob" row.model)}} - {{/t.body}} - {{/list-table}} -
- -
+ {{#if sortedJobs}} + {{#list-pagination + source=sortedJobs + size=pageSize + page=currentPage as |p|}} + {{#list-table + source=p.list + sortProperty=sortProperty + sortDescending=sortDescending + class="with-foot" as |t|}} + {{#t.head}} + {{#t.sort-by prop="name"}}Name{{/t.sort-by}} + {{#t.sort-by prop="status"}}Status{{/t.sort-by}} + {{#t.sort-by prop="type"}}Type{{/t.sort-by}} + {{#t.sort-by prop="priority"}}Priority{{/t.sort-by}} + Groups + Summary + {{/t.head}} + {{#t.body key="model.id" as |row|}} + {{job-row data-test-job-row=row.model.plainId job=row.model onClick=(action "gotoJob" row.model)}} + {{/t.body}} + {{/list-table}} +
+ +
+ {{/list-pagination}} {{else}}
{{#if (eq visibleJobs.length 0)}} @@ -103,6 +123,6 @@

No jobs match the term {{searchTerm}}

{{/if}}
- {{/list-pagination}} + {{/if}} {{/if}}
diff --git a/ui/app/templates/jobs/job/allocations.hbs b/ui/app/templates/jobs/job/allocations.hbs index 062a43b301b..893117490e9 100644 --- a/ui/app/templates/jobs/job/allocations.hbs +++ b/ui/app/templates/jobs/job/allocations.hbs @@ -11,46 +11,48 @@ placeholder="Search allocations..."}} - {{#list-pagination - source=sortedAllocations - size=pageSize - page=currentPage - class="allocations" as |p|}} - {{#list-table - source=p.list - sortProperty=sortProperty - sortDescending=sortDescending - class="with-foot" as |t|}} - {{#t.head}} - - {{#t.sort-by prop="shortId"}}ID{{/t.sort-by}} - {{#t.sort-by prop="taskGroupName"}}Task Group{{/t.sort-by}} - {{#t.sort-by prop="createIndex" title="Create Index"}}Created{{/t.sort-by}} - {{#t.sort-by prop="modifyIndex" title="Modify Index"}}Modified{{/t.sort-by}} - {{#t.sort-by prop="statusIndex"}}Status{{/t.sort-by}} - {{#t.sort-by prop="jobVersion"}}Version{{/t.sort-by}} - {{#t.sort-by prop="node.shortId"}}Client{{/t.sort-by}} - CPU - Memory - {{/t.head}} - {{#t.body as |row|}} - {{allocation-row - data-test-allocation=row.model.id - allocation=row.model - context="job" - onClick=(action "gotoAllocation" row.model)}} - {{/t.body}} - {{/list-table}} -
- -
+ {{#if sortedAllocations}} + {{#list-pagination + source=sortedAllocations + size=pageSize + page=currentPage + class="allocations" as |p|}} + {{#list-table + source=p.list + sortProperty=sortProperty + sortDescending=sortDescending + class="with-foot" as |t|}} + {{#t.head}} + + {{#t.sort-by prop="shortId"}}ID{{/t.sort-by}} + {{#t.sort-by prop="taskGroupName"}}Task Group{{/t.sort-by}} + {{#t.sort-by prop="createIndex" title="Create Index"}}Created{{/t.sort-by}} + {{#t.sort-by prop="modifyIndex" title="Modify Index"}}Modified{{/t.sort-by}} + {{#t.sort-by prop="statusIndex"}}Status{{/t.sort-by}} + {{#t.sort-by prop="jobVersion"}}Version{{/t.sort-by}} + {{#t.sort-by prop="node.shortId"}}Client{{/t.sort-by}} + CPU + Memory + {{/t.head}} + {{#t.body as |row|}} + {{allocation-row + data-test-allocation=row.model.id + allocation=row.model + context="job" + onClick=(action "gotoAllocation" row.model)}} + {{/t.body}} + {{/list-table}} +
+ +
+ {{/list-pagination}} {{else}}
@@ -58,7 +60,7 @@

No allocations match the term {{searchTerm}}

- {{/list-pagination}} + {{/if}} {{else}}
diff --git a/ui/app/templates/jobs/job/task-group.hbs b/ui/app/templates/jobs/job/task-group.hbs index c74461a8e0e..d3d104ec23f 100644 --- a/ui/app/templates/jobs/job/task-group.hbs +++ b/ui/app/templates/jobs/job/task-group.hbs @@ -52,41 +52,43 @@ inputClass="is-compact"}}
- {{#list-pagination - source=sortedAllocations - size=pageSize - page=currentPage - class="allocations" as |p|}} - {{#list-table - source=p.list - sortProperty=sortProperty - sortDescending=sortDescending - class="with-foot" as |t|}} - {{#t.head}} - - {{#t.sort-by prop="shortId"}}ID{{/t.sort-by}} - {{#t.sort-by prop="createIndex" title="Create Index"}}Created{{/t.sort-by}} - {{#t.sort-by prop="modifyIndex" title="Modify Index"}}Modified{{/t.sort-by}} - {{#t.sort-by prop="statusIndex"}}Status{{/t.sort-by}} - {{#t.sort-by prop="jobVersion"}}Version{{/t.sort-by}} - {{#t.sort-by prop="node.shortId"}}Client{{/t.sort-by}} - CPU - Memory - {{/t.head}} - {{#t.body as |row|}} - {{allocation-row data-test-allocation=row.model.id allocation=row.model context="taskGroup" onClick=(action "gotoAllocation" row.model)}} - {{/t.body}} - {{/list-table}} -
- -
+ {{#if sortedAllocations}} + {{#list-pagination + source=sortedAllocations + size=pageSize + page=currentPage + class="allocations" as |p|}} + {{#list-table + source=p.list + sortProperty=sortProperty + sortDescending=sortDescending + class="with-foot" as |t|}} + {{#t.head}} + + {{#t.sort-by prop="shortId"}}ID{{/t.sort-by}} + {{#t.sort-by prop="createIndex" title="Create Index"}}Created{{/t.sort-by}} + {{#t.sort-by prop="modifyIndex" title="Modify Index"}}Modified{{/t.sort-by}} + {{#t.sort-by prop="statusIndex"}}Status{{/t.sort-by}} + {{#t.sort-by prop="jobVersion"}}Version{{/t.sort-by}} + {{#t.sort-by prop="node.shortId"}}Client{{/t.sort-by}} + CPU + Memory + {{/t.head}} + {{#t.body as |row|}} + {{allocation-row data-test-allocation=row.model.id allocation=row.model context="taskGroup" onClick=(action "gotoAllocation" row.model)}} + {{/t.body}} + {{/list-table}} +
+ +
+ {{/list-pagination}} {{else}} {{#if allocations.length}}
@@ -103,7 +105,7 @@
{{/if}} - {{/list-pagination}} + {{/if}}
diff --git a/ui/app/utils/classes/abstract-logger.js b/ui/app/utils/classes/abstract-logger.js index 574669ea111..d90b785c1e5 100644 --- a/ui/app/utils/classes/abstract-logger.js +++ b/ui/app/utils/classes/abstract-logger.js @@ -1,6 +1,7 @@ import { assert } from '@ember/debug'; import Mixin from '@ember/object/mixin'; import { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import { assign } from '@ember/polyfills'; import queryString from 'query-string'; @@ -8,7 +9,7 @@ const MAX_OUTPUT_LENGTH = 50000; export default Mixin.create({ url: '', - params: computed(() => ({})), + params: overridable(() => ({})), logFetch() { assert('Loggers need a logFetch method, which should have an interface like window.fetch'); }, @@ -22,7 +23,7 @@ export default Mixin.create({ : { origin: 'end', offset: MAX_OUTPUT_LENGTH }; }), - additionalParams: computed(() => ({})), + additionalParams: overridable(() => ({})), fullUrl: computed('url', 'params', 'offsetParams', 'additionalParams', function() { const queryParams = queryString.stringify( diff --git a/ui/app/utils/classes/log.js b/ui/app/utils/classes/log.js index 597dfdc880a..c1ebb6763fc 100644 --- a/ui/app/utils/classes/log.js +++ b/ui/app/utils/classes/log.js @@ -3,6 +3,7 @@ import { assert } from '@ember/debug'; import { htmlSafe } from '@ember/template'; import Evented from '@ember/object/evented'; import EmberObject, { computed } from '@ember/object'; +import { computed as overridable } from 'ember-overridable-computed'; import { assign } from '@ember/polyfills'; import queryString from 'query-string'; import { task } from 'ember-concurrency'; @@ -20,7 +21,7 @@ const Log = EmberObject.extend(Evented, { // Parameters url: '', - params: computed(() => ({})), + params: overridable(() => ({})), plainText: false, logFetch() { assert('Log objects need a logFetch method, which should have an interface like window.fetch'); diff --git a/ui/app/utils/classes/stream-logger.js b/ui/app/utils/classes/stream-logger.js index 986d230a219..557f696fa40 100644 --- a/ui/app/utils/classes/stream-logger.js +++ b/ui/app/utils/classes/stream-logger.js @@ -28,11 +28,17 @@ export default EmberObject.extend(AbstractLogger, { const url = this.fullUrl; const logFetch = this.logFetch; - let streamClosed = false; - let buffer = ''; - - const decoder = new TextDecoder(); - const reader = yield logFetch(url).then(res => res.body.getReader(), fetchFailure(url)); + const reader = yield logFetch(url).then(res => { + const reader = res.body.getReader(); + // It's possible that the logger was stopped between the time + // polling was started and the log request responded. + // If the logger was stopped, the reader needs to be immediately + // canceled to prevent an endless request running in the background. + if (this.poll.isRunning) { + return reader; + } + reader.cancel(); + }, fetchFailure(url)); if (!reader) { return; @@ -40,6 +46,10 @@ export default EmberObject.extend(AbstractLogger, { this.set('reader', reader); + let streamClosed = false; + let buffer = ''; + const decoder = new TextDecoder(); + while (!streamClosed) { yield reader.read().then(({ value, done }) => { streamClosed = done; diff --git a/ui/app/utils/no-leader-error.js b/ui/app/utils/no-leader-error.js index cf29a8119d1..7b70918db6b 100644 --- a/ui/app/utils/no-leader-error.js +++ b/ui/app/utils/no-leader-error.js @@ -1,4 +1,4 @@ -import { AdapterError } from 'ember-data/adapters/errors'; +import AdapterError from '@ember-data/adapter/error'; export const NO_LEADER = 'No cluster leader'; diff --git a/ui/blueprints/story/files/__path__/stories/components/__name__.stories.js b/ui/blueprints/story/files/__path__/stories/components/__name__.stories.js new file mode 100644 index 00000000000..92a9656ef65 --- /dev/null +++ b/ui/blueprints/story/files/__path__/stories/components/__name__.stories.js @@ -0,0 +1,15 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|<%= classifiedModuleName %>', +}; + +export let <%= classifiedModuleName %> = () => { + return { + template: hbs` +
<%= header %>
+ <<%= classifiedModuleName %>/> + `, + context: {}, + } +}; diff --git a/ui/blueprints/story/index.js b/ui/blueprints/story/index.js new file mode 100644 index 00000000000..8cb37d653c8 --- /dev/null +++ b/ui/blueprints/story/index.js @@ -0,0 +1,36 @@ +const getPathOption = require('ember-cli-get-component-path-option'); +const stringUtil = require('ember-cli-string-utils'); +const path = require('path'); + +module.exports = { + description: 'generates a story for storybook', + + fileMapTokens: function() { + let { project } = this; + return { + __path__: function() { + return path.relative(project.root, project.root); + }, + __markdownname__: function(options) { + return options.dasherizedModuleName; + }, + __name__: function(options) { + return options.dasherizedModuleName; + }, + }; + }, + + locals: function(options) { + let contents = ''; + + return { + contents: contents, + path: getPathOption(options), + header: stringUtil + .dasherize(options.entity.name) + .split('-') + .map(word => stringUtil.capitalize(word)) + .join(' '), + }; + }, +}; diff --git a/ui/config/deprecation-workflow.js b/ui/config/deprecation-workflow.js index 7082caeb400..70de2b34612 100644 --- a/ui/config/deprecation-workflow.js +++ b/ui/config/deprecation-workflow.js @@ -5,8 +5,6 @@ self.deprecationWorkflow.config = { { handler: 'throw', matchId: 'ember-inflector.globals' }, { handler: 'throw', matchId: 'ember-runtime.deprecate-copy-copyable' }, { handler: 'throw', matchId: 'ember-console.deprecate-logger' }, - // Only used in ivy-codemirror. - // PR open: https://github.com/IvyApp/ivy-codemirror/pull/40/files - { handler: 'log', matchId: 'ember-component.send-action' }, + { handler: 'log', matchId: 'ember-test-helpers.rendering-context.jquery-element' }, ], }; diff --git a/ui/config/environment.js b/ui/config/environment.js index 56f9179f0ed..9d758e0a62c 100644 --- a/ui/config/environment.js +++ b/ui/config/environment.js @@ -15,8 +15,7 @@ module.exports = function(environment) { EmberENV: { FEATURES: { // Here you can enable experimental features on an ember canary build - // e.g. 'with-controller': true - 'ember-routing-router-service': true, + // e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true }, EXTEND_PROTOTYPES: { // Prevent Ember Data from overriding Date.parse. @@ -44,6 +43,11 @@ module.exports = function(environment) { enabled: USE_MIRAGE, excludeFilesFromBuild: !USE_MIRAGE, }; + + if (process.env.STORYBOOK === 'true') { + ENV.APP.autoboot = false; + ENV.rootURL = '/'; + } } if (environment === 'test') { diff --git a/ui/lib/bulma/package.json b/ui/lib/bulma/package.json index 5dc02af6c93..77b1ab90efb 100644 --- a/ui/lib/bulma/package.json +++ b/ui/lib/bulma/package.json @@ -2,5 +2,9 @@ "name": "bulma", "keywords": [ "ember-addon" - ] + ], + "devDependencies": { + "broccoli-funnel": "^2.0.1", + "bulma": "0.6.1" + } } diff --git a/ui/mirage/common.js b/ui/mirage/common.js index a15daca74cd..48d8fc977a6 100644 --- a/ui/mirage/common.js +++ b/ui/mirage/common.js @@ -1,4 +1,4 @@ -import { faker } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide } from './utils'; // Realistically, resource reservations have a low cardinality @@ -19,16 +19,16 @@ export const DATACENTERS = provide( ); export const HOSTS = provide(100, () => { - const ip = Math.random() > 0.5 ? faker.internet.ip() : `[${ipv6()}]`; + const ip = faker.random.boolean() ? faker.internet.ip() : `[${faker.internet.ipv6()}]`; return `${ip}:${faker.random.number({ min: 4000, max: 4999 })}`; }); export function generateResources(options = {}) { return { - CPU: faker.random.arrayElement(CPU_RESERVATIONS), - MemoryMB: faker.random.arrayElement(MEMORY_RESERVATIONS), - DiskMB: faker.random.arrayElement(DISK_RESERVATIONS), - IOPS: faker.random.arrayElement(IOPS_RESERVATIONS), + CPU: faker.helpers.randomize(CPU_RESERVATIONS), + MemoryMB: faker.helpers.randomize(MEMORY_RESERVATIONS), + DiskMB: faker.helpers.randomize(DISK_RESERVATIONS), + IOPS: faker.helpers.randomize(IOPS_RESERVATIONS), Networks: generateNetworks(options.networks), }; } @@ -41,7 +41,7 @@ export function generateNetworks(options = {}) { CIDR: '', IP: faker.internet.ip(), MBits: 10, - Mode: faker.random.arrayElement(NETWORK_MODES), + Mode: faker.helpers.randomize(NETWORK_MODES), ReservedPorts: Array( faker.random.number({ min: options.minPorts != null ? options.minPorts : 0, @@ -68,17 +68,3 @@ export function generateNetworks(options = {}) { })), })); } - -// Faker v4.0 has a built-in ipv6 function. Once Mirage upgrades, -// this code can be removed. -function ipv6() { - const subnets = []; - for (var i = 0; i < 8; i++) { - var subnet = []; - for (var char = 0; char < 4; char++) { - subnet.push(faker.random.number(15).toString(16)); - } - subnets.push(subnet.join('')); - } - return subnets.join(':'); -} diff --git a/ui/mirage/config.js b/ui/mirage/config.js index 35a73f961f9..07ff38b403b 100644 --- a/ui/mirage/config.js +++ b/ui/mirage/config.js @@ -207,6 +207,18 @@ export default function() { return this.serialize(allocations.where({ nodeId: params.id })); }); + this.post('/node/:id/eligibility', function({ nodes }, { params, requestBody }) { + const body = JSON.parse(requestBody); + const node = nodes.find(params.id); + + node.update({ schedulingEligibility: body.Elibility === 'eligible' }); + return this.serialize(node); + }); + + this.post('/node/:id/drain', function({ nodes }, { params }) { + return this.serialize(nodes.find(params.id)); + }); + this.get('/allocations'); this.get('/allocation/:id'); @@ -278,6 +290,14 @@ export default function() { const secret = req.requestHeaders['X-Nomad-Token']; const tokenForSecret = tokens.findBy({ secretId: secret }); + if (req.params.id === 'anonymous') { + if (policy) { + return this.serialize(policy); + } else { + return new Response(404, {}, null); + } + } + // Return the policy only if the token that matches the request header // includes the policy or if the token that matches the request header // is of type management @@ -394,12 +414,12 @@ export default function() { this.get('/client/fs/readat/:allocation_id', clientAllocationReadAtHandler); this.get('/client/stats', function({ clientStats }, { queryParams }) { - const seed = Math.random(); - if (seed > 0.8) { + const seed = faker.random.number(10); + if (seed >= 8) { const stats = clientStats.find(queryParams.node_id); stats.update({ timestamp: Date.now() * 1000000, - CPUTicksConsumed: stats.CPUTicksConsumed + (Math.random() * 20 - 10), + CPUTicksConsumed: stats.CPUTicksConsumed + faker.random.number({ min: -10, max: 10 }), }); return this.serialize(stats); } else { diff --git a/ui/mirage/factories/agent.js b/ui/mirage/factories/agent.js index f523d58344a..e3b52834d97 100644 --- a/ui/mirage/factories/agent.js +++ b/ui/mirage/factories/agent.js @@ -1,4 +1,5 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide } from '../utils'; import { DATACENTERS } from '../common'; @@ -9,8 +10,8 @@ export default Factory.extend({ id: i => (i / 100 >= 1 ? `${UUIDS[i]}-${i}` : UUIDS[i]), name: () => `nomad@${faker.internet.ip()}`, - status: faker.list.random(...AGENT_STATUSES), - serf_port: faker.random.number({ min: 4000, max: 4999 }), + status: () => faker.helpers.randomize(AGENT_STATUSES), + serf_port: () => faker.random.number({ min: 4000, max: 4999 }), address() { return this.name.split('@')[1]; @@ -20,7 +21,7 @@ export default Factory.extend({ const rpcPortCandidate = faker.random.number({ min: 4000, max: 4999 }); return { port: rpcPortCandidate === this.serf_port ? rpcPortCandidate + 1 : rpcPortCandidate, - dc: faker.list.random(...DATACENTERS)(), + dc: faker.helpers.randomize(DATACENTERS), }; }, }); diff --git a/ui/mirage/factories/alloc-file.js b/ui/mirage/factories/alloc-file.js index db9f4a9261f..f31628a7463 100644 --- a/ui/mirage/factories/alloc-file.js +++ b/ui/mirage/factories/alloc-file.js @@ -1,9 +1,10 @@ -import { Factory, faker, trait } from 'ember-cli-mirage'; +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { pickOne } from '../utils'; const REF_TIME = new Date(); const TROUBLESOME_CHARACTERS = '🏆 💃 🤩 🙌🏿 🖨 ? ; %'.split(' '); -const makeWord = () => Math.round(Math.random() * 10000000 + 50000).toString(36); +const makeWord = () => (faker.random.number(10000000) + 50000).toString(36); const makeSentence = (count = 10) => new Array(count) .fill(null) @@ -35,7 +36,7 @@ const fileBodyMapping = { .map((_, i) => { const date = new Date(2019, 6, 23); date.setSeconds(i * 5); - return `${date.toISOString()} ${makeSentence(Math.round(Math.random() * 5 + 7))}`; + return `${date.toISOString()} ${makeSentence(faker.random.number({ max: 5 }) + 7)}`; }) .join('\n'), json: () => diff --git a/ui/mirage/factories/allocation.js b/ui/mirage/factories/allocation.js index 1bb1403e48f..b6e52917ba5 100644 --- a/ui/mirage/factories/allocation.js +++ b/ui/mirage/factories/allocation.js @@ -1,6 +1,7 @@ import Ember from 'ember'; import moment from 'moment'; -import { Factory, faker, trait } from 'ember-cli-mirage'; +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide, pickOne } from '../utils'; import { generateResources } from '../common'; @@ -24,8 +25,8 @@ export default Factory.extend({ namespace: null, - clientStatus: faker.list.random(...CLIENT_STATUSES), - desiredStatus: faker.list.random(...DESIRED_STATUSES), + clientStatus: () => faker.helpers.randomize(CLIENT_STATUSES), + desiredStatus: () => faker.helpers.randomize(DESIRED_STATUSES), // When true, doesn't create any resources, state, or events shallow: false, diff --git a/ui/mirage/factories/client-stat.js b/ui/mirage/factories/client-stat.js index 8d7b27edd1b..3020791e220 100644 --- a/ui/mirage/factories/client-stat.js +++ b/ui/mirage/factories/client-stat.js @@ -1,4 +1,6 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; + +import faker from 'nomad-ui/mirage/faker'; export default Factory.extend({ allDirStats: () => ({ @@ -12,7 +14,7 @@ export default Factory.extend({ }), CPU: () => [ - Array(faker.list.random(1, 2, 4, 6, 8, 12, 16, 24, 32)) + Array(faker.helpers.randomize(1, 2, 4, 6, 8, 12, 16, 24, 32)) .fill(0) .map((cpu, index) => ({ CPU: `cpu${index}`, @@ -23,7 +25,7 @@ export default Factory.extend({ })), ], - CPUTicksConsumed: faker.random.number({ min: 100, max: 1000 }), + CPUTicksConsumed: () => faker.random.number({ min: 100, max: 1000 }), diskStats: () => [ Array(faker.random.number({ min: 1, max: 5 })) diff --git a/ui/mirage/factories/deployment-task-group-summary.js b/ui/mirage/factories/deployment-task-group-summary.js index b08f02fa87a..291f8285ed5 100644 --- a/ui/mirage/factories/deployment-task-group-summary.js +++ b/ui/mirage/factories/deployment-task-group-summary.js @@ -1,18 +1,20 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; + +import faker from 'nomad-ui/mirage/faker'; const REF_TIME = new Date(); export default Factory.extend({ name: '', - autoRevert: () => Math.random() > 0.5, - promoted: () => Math.random() > 0.5, + autoRevert: () => faker.random.boolean(), + promoted: () => faker.random.boolean(), requiresPromotion: false, requireProgressBy: () => faker.date.past(0.5 / 365, REF_TIME), - desiredTotal: faker.random.number({ min: 1, max: 10 }), + desiredTotal: () => faker.random.number({ min: 1, max: 10 }), desiredCanaries() { return faker.random.number(Math.floor(this.desiredTotal / 2)); diff --git a/ui/mirage/factories/deployment.js b/ui/mirage/factories/deployment.js index e6800b0a4ee..49179357c3e 100644 --- a/ui/mirage/factories/deployment.js +++ b/ui/mirage/factories/deployment.js @@ -1,4 +1,5 @@ -import { Factory, faker, trait } from 'ember-cli-mirage'; +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide } from '../utils'; const UUIDS = provide(100, faker.random.uuid.bind(faker.random)); @@ -10,11 +11,11 @@ export default Factory.extend({ jobId: null, versionNumber: null, - status: faker.list.random(...DEPLOYMENT_STATUSES), + status: () => faker.helpers.randomize(DEPLOYMENT_STATUSES), statusDescription: () => faker.lorem.sentence(), notActive: trait({ - status: faker.list.random(...DEPLOYMENT_STATUSES.without('running')), + status: faker.helpers.randomize(DEPLOYMENT_STATUSES.without('running')), }), active: trait({ diff --git a/ui/mirage/factories/evaluation.js b/ui/mirage/factories/evaluation.js index 941f85e5574..d906190e3f5 100644 --- a/ui/mirage/factories/evaluation.js +++ b/ui/mirage/factories/evaluation.js @@ -1,5 +1,6 @@ import Ember from 'ember'; -import { Factory, faker, trait } from 'ember-cli-mirage'; +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide, pickOne } from '../utils'; import { DATACENTERS } from '../common'; @@ -46,9 +47,9 @@ export default Factory.extend({ priority: () => faker.random.number(100), - type: faker.list.random(...EVAL_TYPES), - triggeredBy: faker.list.random(...EVAL_TRIGGERED_BY), - status: faker.list.random(...EVAL_STATUSES), + type: () => faker.helpers.randomize(EVAL_TYPES), + triggeredBy: () => faker.helpers.randomize(EVAL_TRIGGERED_BY), + status: () => faker.helpers.randomize(EVAL_STATUSES), statusDescription: () => faker.lorem.sentence(), failedTGAllocs: null, @@ -113,12 +114,12 @@ export function generateTaskGroupFailures() { NodesEvaluated: faker.random.number({ min: 1, max: 100 }), NodesExhausted: faker.random.number({ min: 1, max: 100 }), - NodesAvailable: Math.random() > 0.7 ? generateNodesAvailable() : null, - ClassFiltered: Math.random() > 0.7 ? generateClassFiltered() : null, - ConstraintFiltered: Math.random() > 0.7 ? generateConstraintFiltered() : null, - ClassExhausted: Math.random() > 0.7 ? generateClassExhausted() : null, - DimensionExhausted: Math.random() > 0.7 ? generateDimensionExhausted() : null, - QuotaExhausted: Math.random() > 0.7 ? generateQuotaExhausted() : null, - Scores: Math.random() > 0.7 ? generateScores() : null, + NodesAvailable: faker.random.number(10) >= 7 ? generateNodesAvailable() : null, + ClassFiltered: faker.random.number(10) >= 7 ? generateClassFiltered() : null, + ConstraintFiltered: faker.random.number(10) >= 7 ? generateConstraintFiltered() : null, + ClassExhausted: faker.random.number(10) >= 7 ? generateClassExhausted() : null, + DimensionExhausted: faker.random.number(10) >= 7 ? generateDimensionExhausted() : null, + QuotaExhausted: faker.random.number(10) >= 7 ? generateQuotaExhausted() : null, + Scores: faker.random.number(10) >= 7 ? generateScores() : null, }; } diff --git a/ui/mirage/factories/job-summary.js b/ui/mirage/factories/job-summary.js index 76bef8a0204..7a76f89868f 100644 --- a/ui/mirage/factories/job-summary.js +++ b/ui/mirage/factories/job-summary.js @@ -1,4 +1,6 @@ -import { Factory, faker, trait } from 'ember-cli-mirage'; +import { Factory, trait } from 'ember-cli-mirage'; + +import faker from 'nomad-ui/mirage/faker'; export default Factory.extend({ // Hidden property used to compute the Summary hash diff --git a/ui/mirage/factories/job-version.js b/ui/mirage/factories/job-version.js index fe3404450e0..7dd6bb7ad1d 100644 --- a/ui/mirage/factories/job-version.js +++ b/ui/mirage/factories/job-version.js @@ -1,4 +1,6 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; + +import faker from 'nomad-ui/mirage/faker'; const REF_TIME = new Date(); diff --git a/ui/mirage/factories/job.js b/ui/mirage/factories/job.js index 113910e74c6..d8c08ea83e5 100644 --- a/ui/mirage/factories/job.js +++ b/ui/mirage/factories/job.js @@ -1,5 +1,6 @@ import { assign } from '@ember/polyfills'; -import { Factory, faker, trait } from 'ember-cli-mirage'; +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide, provider, pickOne } from '../utils'; import { DATACENTERS } from '../common'; @@ -9,7 +10,9 @@ const JOB_STATUSES = ['pending', 'running', 'dead']; export default Factory.extend({ id: i => - `${faker.list.random(...JOB_PREFIXES)()}-${faker.hacker.noun().dasherize()}-${i}`.toLowerCase(), + `${faker.helpers.randomize( + JOB_PREFIXES + )}-${faker.hacker.noun().dasherize()}-${i}`.toLowerCase(), name() { return this.id; @@ -18,14 +21,12 @@ export default Factory.extend({ groupsCount: () => faker.random.number({ min: 1, max: 2 }), region: () => 'global', - type: faker.list.random(...JOB_TYPES), + type: () => faker.helpers.randomize(JOB_TYPES), priority: () => faker.random.number(100), all_at_once: faker.random.boolean, - status: faker.list.random(...JOB_STATUSES), - datacenters: provider( - () => faker.random.number({ min: 1, max: 4 }), - faker.list.random(...DATACENTERS) - ), + status: () => faker.helpers.randomize(JOB_STATUSES), + datacenters: () => + faker.helpers.shuffle(DATACENTERS).slice(0, faker.random.number({ min: 1, max: 4 })), childrenCount: () => faker.random.number({ min: 1, max: 2 }), @@ -51,7 +52,7 @@ export default Factory.extend({ parameterizedDetails: () => ({ MetaOptional: null, MetaRequired: null, - Payload: Math.random() > 0.5 ? 'required' : null, + Payload: faker.random.boolean() ? 'required' : null, }), }), diff --git a/ui/mirage/factories/namespace.js b/ui/mirage/factories/namespace.js index 8fb0ff70feb..00e63885c81 100644 --- a/ui/mirage/factories/namespace.js +++ b/ui/mirage/factories/namespace.js @@ -1,4 +1,6 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; + +import faker from 'nomad-ui/mirage/faker'; export default Factory.extend({ id: i => (i === 0 ? 'default' : `namespace-${i}`), diff --git a/ui/mirage/factories/node-event.js b/ui/mirage/factories/node-event.js index a00435d56b9..4caaa5f9e67 100644 --- a/ui/mirage/factories/node-event.js +++ b/ui/mirage/factories/node-event.js @@ -1,11 +1,12 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide } from '../utils'; const REF_TIME = new Date(); const STATES = provide(10, faker.system.fileExt.bind(faker.system)); export default Factory.extend({ - subsystem: faker.list.random(...STATES), + subsystem: () => faker.helpers.randomize(STATES), message: () => faker.lorem.sentence(), time: () => faker.date.past(2 / 365, REF_TIME), details: null, diff --git a/ui/mirage/factories/node.js b/ui/mirage/factories/node.js index 8dc72a7e2c8..d5a54936845 100644 --- a/ui/mirage/factories/node.js +++ b/ui/mirage/factories/node.js @@ -1,4 +1,5 @@ -import { Factory, faker, trait } from 'ember-cli-mirage'; +import { Factory, trait } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide } from '../utils'; import { DATACENTERS, HOSTS, generateResources } from '../common'; import moment from 'moment'; @@ -12,10 +13,10 @@ export default Factory.extend({ id: i => (i / 100 >= 1 ? `${UUIDS[i]}-${i}` : UUIDS[i]), name: i => `nomad@${HOSTS[i % HOSTS.length]}`, - datacenter: faker.list.random(...DATACENTERS), - nodeClass: faker.list.random(...NODE_CLASSES), + datacenter: () => faker.helpers.randomize(DATACENTERS), + nodeClass: () => faker.helpers.randomize(NODE_CLASSES), drain: faker.random.boolean, - status: faker.list.random(...NODE_STATUSES), + status: () => faker.helpers.randomize(NODE_STATUSES), tls_enabled: faker.random.boolean, schedulingEligibility: () => (faker.random.boolean() ? 'eligible' : 'ineligible'), @@ -130,8 +131,8 @@ export default Factory.extend({ function makeDrivers() { const generate = name => { - const detected = Math.random() > 0.3; - const healthy = detected && Math.random() > 0.3; + const detected = faker.random.number(10) >= 3; + const healthy = detected && faker.random.number(10) >= 3; const attributes = { [`driver.${name}.version`]: '1.0.0', [`driver.${name}.status`]: 'awesome', @@ -143,7 +144,7 @@ function makeDrivers() { Healthy: healthy, HealthDescription: healthy ? 'Driver is healthy' : 'Uh oh', UpdateTime: faker.date.past(5 / 365, REF_DATE), - Attributes: Math.random() > 0.3 && detected ? attributes : null, + Attributes: faker.random.number(10) >= 3 && detected ? attributes : null, }; }; diff --git a/ui/mirage/factories/policy.js b/ui/mirage/factories/policy.js index bc26d1954f1..ea50378b13b 100644 --- a/ui/mirage/factories/policy.js +++ b/ui/mirage/factories/policy.js @@ -1,11 +1,12 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; export default Factory.extend({ id: () => faker.hacker.verb(), name() { return this.id; }, - description: () => (Math.random() > 0.2 ? faker.lorem.sentence() : null), + description: () => (faker.random.number(10) >= 2 ? faker.lorem.sentence() : null), rules: ` # Allow read only access to the default namespace namespace "default" { diff --git a/ui/mirage/factories/service.js b/ui/mirage/factories/service.js index 6f326ccf3d9..b6ac0961fb7 100644 --- a/ui/mirage/factories/service.js +++ b/ui/mirage/factories/service.js @@ -1,4 +1,5 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide } from '../utils'; export default Factory.extend({ diff --git a/ui/mirage/factories/task-event.js b/ui/mirage/factories/task-event.js index 72397110c89..0bbd8ae8a7a 100644 --- a/ui/mirage/factories/task-event.js +++ b/ui/mirage/factories/task-event.js @@ -1,11 +1,12 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { provide } from '../utils'; const REF_TIME = new Date(); const STATES = provide(10, faker.system.fileExt.bind(faker.system)); export default Factory.extend({ - type: faker.list.random(...STATES), + type: () => faker.helpers.randomize(STATES), signal: () => '', exitCode: () => null, diff --git a/ui/mirage/factories/task-group.js b/ui/mirage/factories/task-group.js index bff6bdba04a..5f1c6f44e2f 100644 --- a/ui/mirage/factories/task-group.js +++ b/ui/mirage/factories/task-group.js @@ -1,4 +1,5 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; const DISK_RESERVATIONS = [200, 500, 1000, 2000, 5000, 10000, 100000]; @@ -8,7 +9,7 @@ export default Factory.extend({ ephemeralDisk: () => ({ Sticky: faker.random.boolean(), - SizeMB: faker.random.arrayElement(DISK_RESERVATIONS), + SizeMB: faker.helpers.randomize(DISK_RESERVATIONS), Migrate: faker.random.boolean(), }), diff --git a/ui/mirage/factories/task-state.js b/ui/mirage/factories/task-state.js index 7486e6e59e9..8afa68d0bae 100644 --- a/ui/mirage/factories/task-state.js +++ b/ui/mirage/factories/task-state.js @@ -1,13 +1,14 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; const TASK_STATUSES = ['pending', 'running', 'finished', 'failed']; const REF_TIME = new Date(); export default Factory.extend({ name: () => '!!!this should be set by the allocation that owns this task state!!!', - state: faker.list.random(...TASK_STATUSES), + state: () => faker.helpers.randomize(TASK_STATUSES), kind: null, - startedAt: faker.date.past(2 / 365, REF_TIME), + startedAt: () => faker.date.past(2 / 365, REF_TIME), finishedAt() { if (['pending', 'running'].includes(this.state)) { return '0001-01-01T00:00:00Z'; diff --git a/ui/mirage/factories/task.js b/ui/mirage/factories/task.js index c11ebeb1c34..bdcdeaeb391 100644 --- a/ui/mirage/factories/task.js +++ b/ui/mirage/factories/task.js @@ -1,4 +1,5 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import { generateResources } from '../common'; const DRIVERS = ['docker', 'java', 'rkt', 'qemu', 'exec', 'raw_exec']; @@ -10,7 +11,7 @@ export default Factory.extend({ JobID: '', name: id => `task-${faker.hacker.noun().dasherize()}-${id}`, - driver: faker.list.random(...DRIVERS), + driver: () => faker.helpers.randomize(DRIVERS), Resources: generateResources, }); diff --git a/ui/mirage/factories/token.js b/ui/mirage/factories/token.js index ae819a8f3a4..2320c1b205d 100644 --- a/ui/mirage/factories/token.js +++ b/ui/mirage/factories/token.js @@ -1,4 +1,5 @@ -import { Factory, faker } from 'ember-cli-mirage'; +import { Factory } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; export default Factory.extend({ id: () => faker.random.uuid(), diff --git a/ui/mirage/faker.js b/ui/mirage/faker.js new file mode 100644 index 00000000000..2baad57fb4c --- /dev/null +++ b/ui/mirage/faker.js @@ -0,0 +1,16 @@ +import faker from 'faker'; +import config from 'nomad-ui/config/environment'; + +const searchIncludesSeed = window.location.search.includes('faker-seed'); + +if (config.environment !== 'test' || searchIncludesSeed) { + if (searchIncludesSeed) { + const params = new URLSearchParams(window.location.search); + const seed = parseInt(params.get('faker-seed')); + faker.seed(seed); + } else { + faker.seed(1); + } +} + +export default faker; diff --git a/ui/mirage/serializers/job.js b/ui/mirage/serializers/job.js index bfa8caedb30..a9df11f0af3 100644 --- a/ui/mirage/serializers/job.js +++ b/ui/mirage/serializers/job.js @@ -3,4 +3,22 @@ import ApplicationSerializer from './application'; export default ApplicationSerializer.extend({ embed: true, include: ['task_groups', 'job_summary'], + + serialize() { + var json = ApplicationSerializer.prototype.serialize.apply(this, arguments); + if (json instanceof Array) { + json.forEach(serializeJob); + } else { + serializeJob(json); + } + return json; + }, }); + +function serializeJob(job) { + job.TaskGroups.forEach(group => { + if (group.Services.length === 0) { + group.Services = null; + } + }); +} diff --git a/ui/mirage/utils.js b/ui/mirage/utils.js index 5a48ad3d774..8c175eec064 100644 --- a/ui/mirage/utils.js +++ b/ui/mirage/utils.js @@ -1,4 +1,4 @@ -import { faker } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; export function provide(count, provider) { if (typeof count === 'function') { diff --git a/ui/package.json b/ui/package.json index 4a712fba5f0..9e6cc886ec1 100644 --- a/ui/package.json +++ b/ui/package.json @@ -13,6 +13,8 @@ "lint:hbs": "ember-template-lint .", "lint:js": "eslint .", "start": "./node_modules/ember-cli/bin/ember server", + "build-storybook": "STORYBOOK=true ember build && build-storybook -s dist", + "storybook": "STORYBOOK=true ember serve & start-storybook -p 6006 -s dist", "test": "./node_modules/ember-cli/bin/ember test" }, "husky": { @@ -21,15 +23,22 @@ } }, "lint-staged": { - "{app,tests,config,lib,mirage}/**/*.js": ["prettier --write", "git add"], - "app/styles/**/*.*": ["prettier --write", "git add"] + "{app,tests,config,lib,mirage,stories}/**/*.js": [ + "prettier --write", + "git add" + ], + "app/styles/**/*.*": [ + "prettier --write", + "git add" + ] }, "devDependencies": { - "anser": "^1.4.8", "@babel/plugin-proposal-object-rest-spread": "^7.4.3", "@ember/jquery": "^0.6.0", "@ember/optional-features": "^0.7.0", "@hashicorp/structure-icons": "^1.3.0", + "@storybook/ember-cli-storybook": "^0.2.0", + "anser": "^1.4.8", "broccoli-asset-rev": "^3.0.0", "bulma": "0.6.1", "core-js": "^2.4.1", @@ -41,69 +50,88 @@ "d3-shape": "^1.2.0", "d3-time-format": "^2.1.0", "d3-transition": "^1.1.0", + "duration-js": "^4.0.0", "ember-ajax": "^5.0.0", "ember-auto-import": "^1.2.21", - "ember-cli": "~3.4.4", - "ember-cli-babel": "^7.1.2", + "ember-can": "^2.0.0", + "ember-cli": "~3.12.0", + "ember-cli-babel": "^7.7.3", "ember-cli-clipboard": "^0.13.0", - "ember-cli-dependency-checker": "^3.0.0", + "ember-cli-dependency-checker": "^3.1.0", "ember-cli-deprecation-workflow": "^1.0.1", "ember-cli-eslint": "^5.1.0", "ember-cli-funnel": "^0.6.1", - "ember-cli-htmlbars": "^3.0.0", - "ember-cli-htmlbars-inline-precompile": "^1.0.3", + "ember-cli-htmlbars": "^3.0.1", + "ember-cli-htmlbars-inline-precompile": "^2.1.0", "ember-cli-inject-live-reload": "^2.0.1", - "ember-cli-mirage": "^0.4.3", + "ember-cli-mirage": "^1.1.2", "ember-cli-moment-shim": "^3.5.0", "ember-cli-page-object": "^1.15.1", - "ember-cli-qunit": "^4.3.2", "ember-cli-sass": "^10.0.0", "ember-cli-sri": "^2.1.1", "ember-cli-string-helpers": "^1.5.0", "ember-cli-template-lint": "^1.0.0-beta.1", "ember-cli-uglify": "^2.1.0", "ember-composable-helpers": "^2.0.3", - "ember-concurrency": "^0.9.0", + "ember-concurrency": "^1.0.0", "ember-copy": "^1.0.0", - "ember-data": "~3.4.0", - "ember-data-model-fragments": "3.3.0", + "ember-data": "~3.12.0", + "ember-data-model-fragments": "4.0.0", "ember-export-application-global": "^2.0.0", "ember-fetch": "^6.5.0", "ember-freestyle": "~0.10.0", "ember-inflector": "^3.0.0", - "ember-inline-svg": "^0.2.1", - "ember-load-initializers": "^1.1.0", + "ember-inline-svg": "^0.3.0", + "ember-load-initializers": "^2.0.0", "ember-maybe-import-regenerator": "^0.1.6", "ember-moment": "^7.8.1", + "ember-overridable-computed": "^1.0.0", "ember-page-title": "^5.0.2", - "ember-power-select": "^2.2.3", + "ember-power-select": "^3.0.4", + "ember-qunit": "^4.4.1", "ember-qunit-nice-errors": "^1.2.0", "ember-resolver": "^5.0.1", - "ember-responsive": "^3.0.0", - "ember-sinon": "^2.2.0", - "ember-source": "~3.4.0", + "ember-responsive": "^3.0.4", + "ember-sinon": "^4.0.0", + "ember-source": "~3.12.0", "ember-test-selectors": "^2.1.0", "ember-truth-helpers": "^2.0.0", "eslint": "^5.16.0", + "eslint-plugin-node": "^9.0.1", + "faker": "^4.1.0", "flat": "^4.0.0", "fuse.js": "^3.4.4", "husky": "^1.3.1", "is-ip": "^3.1.0", - "ivy-codemirror": "^2.1.0", + "ivy-codemirror": "IvyApp/ivy-codemirror#c3b7f49f8e6492878619f8055695581240cce21a", "lint-staged": "^8.1.5", "loader.js": "^4.7.0", "lodash.intersection": "^4.4.0", + "pretender": "^3.0.1", "prettier": "^1.4.4", "query-string": "^5.0.0", "qunit-dom": "^0.9.0", "sass": "^1.17.3" }, + "optionalDependencies": { + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@storybook/addon-knobs": "^5.2.5", + "@storybook/addon-storysource": "^5.2.5", + "@storybook/addon-viewport": "^5.2.5", + "@storybook/addons": "^5.2.5", + "@storybook/ember": "^5.2.5", + "babel-loader": "^8.0.6", + "ember-cli-get-component-path-option": "^1.0.0", + "ember-cli-string-utils": "^1.1.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": "8.* || >= 10.*" }, "private": true, "ember-addon": { - "paths": ["lib/bulma"] + "paths": [ + "lib/bulma" + ] }, "dependencies": { "lru_map": "^0.3.3" diff --git a/ui/public/images/icons/node-init-circle-fill.svg b/ui/public/images/icons/node-init-circle-fill.svg new file mode 100644 index 00000000000..775a63f20c7 --- /dev/null +++ b/ui/public/images/icons/node-init-circle-fill.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ui/stories/charts/distribution-bar.stories.js b/ui/stories/charts/distribution-bar.stories.js new file mode 100644 index 00000000000..5695d5c874e --- /dev/null +++ b/ui/stories/charts/distribution-bar.stories.js @@ -0,0 +1,174 @@ +import hbs from 'htmlbars-inline-precompile'; + +import EmberObject, { computed } from '@ember/object'; +import { on } from '@ember/object/evented'; + +import DelayedTruth from '../utils/delayed-truth'; + +export default { + title: 'Charts|Distribution Bar', +}; + +export let Standard = () => { + return { + template: hbs` +
Distribution Bar
+
+ {{#if delayedTruth.complete}} + + {{/if}} +
+

The distribution bar chart proportionally show data in a single bar. It includes a tooltip out of the box, assumes the size of the container element, and is designed to be styled with CSS.

+ `, + context: { + delayedTruth: DelayedTruth.create(), + distributionBarData: [ + { label: 'one', value: 10 }, + { label: 'two', value: 20 }, + { label: 'three', value: 30 }, + ], + }, + }; +}; + +export let WithClasses = () => { + return { + template: hbs` +
Distribution Bar with classes
+
+ {{#if delayedTruth.complete}} + + {{/if}} +
+

If a datum provides a className property, it will be assigned to the corresponding rect element, allowing for custom colorization.

+ `, + context: { + delayedTruth: DelayedTruth.create(), + distributionBarDataWithClasses: [ + { label: 'Queued', value: 10, className: 'queued' }, + { label: 'Complete', value: 20, className: 'complete' }, + { label: 'Failed', value: 30, className: 'failed' }, + ], + }, + }; +}; + +export let Flexibility = () => { + return { + template: hbs` +
Distribution Bar flexibility
+
+ {{#if delayedTruth.complete}} + + {{/if}} +
+
+ {{#if delayedTruth.complete}} + + {{/if}} +
+

Distribution bar assumes the dimensions of the container.

+ `, + context: { + delayedTruth: DelayedTruth.create(), + distributionBarData: [ + { label: 'one', value: 10 }, + { label: 'two', value: 20 }, + { label: 'three', value: 30 }, + ], + }, + }; +}; + +export let LiveUpdating = () => { + return { + template: hbs` +
Live-updating Distribution Bar
+
+ +
+

Distribution bar animates with data changes.

+
+
+ +
+
+ `, + context: { + controller: EmberObject.extend({ + timerTicks: 0, + + startTimer: on('init', function() { + this.set( + 'timer', + setInterval(() => { + this.incrementProperty('timerTicks'); + }, 500) + ); + }), + + willDestroy() { + clearInterval(this.timer); + }, + + distributionBarDataRotating: computed('timerTicks', () => { + return [ + { label: 'one', value: Math.round(Math.random() * 50) }, + { label: 'two', value: Math.round(Math.random() * 50) }, + { label: 'three', value: Math.round(Math.random() * 50) }, + ]; + }), + }).create(), + }, + }; +}; + +export let SingleBar = () => { + return { + template: hbs` +
Distribution Bar with single bar
+
+ {{#if delayedTruth.complete}} + + {{/if}} +
+ `, + context: { + delayedTruth: DelayedTruth.create(), + distributionBarDatum: [{ label: 'one', value: 10 }], + }, + }; +}; + +export let Jumbo = () => { + return { + template: hbs` +
Jumbo Distribution Bar
+ {{#if delayedTruth.complete}} + +
    + {{#each chart.data as |datum index|}} +
  1. + + {{datum.value}} + + {{datum.label}} + +
  2. + {{/each}} +
+
+ {{/if}} +

A variation of the Distribution Bar component for when the distribution bar is the central component of the page. It's a larger format that requires no interaction to see the data labels and values.

+ `, + context: { + delayedTruth: DelayedTruth.create(), + distributionBarData: [ + { label: 'one', value: 10 }, + { label: 'two', value: 20 }, + { label: 'three', value: 0 }, + { label: 'four', value: 35 }, + ], + }, + }; +}; diff --git a/ui/stories/charts/line-chart.stories.js b/ui/stories/charts/line-chart.stories.js new file mode 100644 index 00000000000..7fa793a3a28 --- /dev/null +++ b/ui/stories/charts/line-chart.stories.js @@ -0,0 +1,147 @@ +import hbs from 'htmlbars-inline-precompile'; + +import EmberObject from '@ember/object'; +import { on } from '@ember/object/evented'; +import moment from 'moment'; + +import DelayedArray from '../utils/delayed-array'; + +export default { + title: 'Charts|Line Chart', +}; + +let data1 = [ + { year: 2010, value: 10 }, + { year: 2011, value: 10 }, + { year: 2012, value: 20 }, + { year: 2013, value: 30 }, + { year: 2014, value: 50 }, + { year: 2015, value: 80 }, + { year: 2016, value: 130 }, + { year: 2017, value: 210 }, + { year: 2018, value: 340 }, +]; + +let data2 = [ + { year: 2010, value: 100 }, + { year: 2011, value: 90 }, + { year: 2012, value: 120 }, + { year: 2013, value: 130 }, + { year: 2014, value: 115 }, + { year: 2015, value: 105 }, + { year: 2016, value: 90 }, + { year: 2017, value: 85 }, + { year: 2018, value: 90 }, +]; + +export let Standard = () => { + return { + template: hbs` +
Line Chart
+
+ {{#if lineChartData}} + + {{/if}} +
+
+ {{#if lineChartMild}} + + {{/if}} +
+ `, + context: { + lineChartData: DelayedArray.create(data1), + lineChartMild: DelayedArray.create(data2), + }, + }; +}; + +export let FluidWidth = () => { + return { + template: hbs` +
Fluid-width Line Chart
+
+ {{#if lineChartData}} + + {{/if}} +
+
+ {{#if lineChartMild}} + + {{/if}} +
+

A line chart will assume the width of its container. This includes the dimensions of the axes, which are calculated based on real DOM measurements. This requires a two-pass render: first the axes are placed with their real domains (in order to capture width and height of tick labels), second the axes are adjusted to make sure both the x and y axes are within the height and width bounds of the container.

+ `, + context: { + lineChartData: DelayedArray.create(data1), + lineChartMild: DelayedArray.create(data2), + }, + }; +}; + +export let LiveData = () => { + return { + template: hbs` +
Live data Line Chart
+
+ {{#if controller.lineChartLive}} + + {{/if}} +
+ `, + context: { + controller: EmberObject.extend({ + startTimer: on('init', function() { + this.set( + 'timer', + setInterval(() => { + this.incrementProperty('timerTicks'); + + let ref = this.lineChartLive; + ref.addObject({ ts: Date.now(), val: Math.random() * 30 + 20 }); + if (ref.length > 60) { + ref.splice(0, ref.length - 60); + } + }, 500) + ); + }), + + willDestroy() { + clearInterval(this.timer); + }, + + lineChartLive: [], + + secondsFormat() { + return date => moment(date).format('HH:mm:ss'); + }, + }).create(), + }, + }; +}; + +export let Gaps = () => { + return { + template: hbs` +
Line Chart data with gaps
+
+ {{#if lineChartGapData}} + + {{/if}} +
+ `, + context: { + lineChartGapData: DelayedArray.create([ + { year: 2010, value: 10 }, + { year: 2011, value: 10 }, + { year: 2012, value: null }, + { year: 2013, value: 30 }, + { year: 2014, value: 50 }, + { year: 2015, value: 80 }, + { year: 2016, value: null }, + { year: 2017, value: 210 }, + { year: 2018, value: 340 }, + ]), + }, + }; +}; diff --git a/ui/stories/charts/progress-bar.stories.js b/ui/stories/charts/progress-bar.stories.js new file mode 100644 index 00000000000..1821e005fa5 --- /dev/null +++ b/ui/stories/charts/progress-bar.stories.js @@ -0,0 +1,135 @@ +import hbs from 'htmlbars-inline-precompile'; + +import EmberObject, { computed } from '@ember/object'; +import { on } from '@ember/object/evented'; + +export default { + title: 'Charts|Progress Bar', +}; + +export let Standard = () => { + return { + template: hbs` +
Progress Bar
+ + `, + }; +}; + +export let Colors = () => { + return { + template: hbs` +
Progress Bar colors
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ `, + }; +}; + +export let LiveUpdates = () => { + return { + template: hbs` +
Progress Bar with live updates
+
+
+ +
+
+

+

+
+ +
+
+

+ `, + context: { + data: EmberObject.extend({ + timerTicks: 0, + + startTimer: on('init', function() { + this.set( + 'timer', + setInterval(() => { + this.incrementProperty('timerTicks'); + }, 1000) + ); + }), + + willDestroy() { + clearInterval(this.timer); + }, + + denominator: computed('timerTicks', function() { + return Math.round(Math.random() * 1000); + }), + + percentage: computed('timerTicks', function() { + return Math.round(Math.random() * 100) / 100; + }), + + numerator: computed('denominator', 'percentage', function() { + return Math.round(this.denominator * this.percentage * 100) / 100; + }), + + liveDetails: computed('denominator', 'numerator', 'percentage', function() { + return this.getProperties('denominator', 'numerator', 'percentage'); + }), + }).create(), + }, + }; +}; diff --git a/ui/stories/charts/stats-time-series.stories.js b/ui/stories/charts/stats-time-series.stories.js new file mode 100644 index 00000000000..4976b9ce52d --- /dev/null +++ b/ui/stories/charts/stats-time-series.stories.js @@ -0,0 +1,119 @@ +import hbs from 'htmlbars-inline-precompile'; + +import EmberObject, { computed } from '@ember/object'; +import { on } from '@ember/object/evented'; +import moment from 'moment'; + +import DelayedArray from '../utils/delayed-array'; + +export default { + title: 'Charts|Stats Time Series', +}; + +let ts = offset => + moment() + .subtract(offset, 'm') + .toDate(); + +export let Standard = () => { + return { + template: hbs` +
Stats Time Series
+
+ {{#if staticMetrics}} + + {{/if}} +
+ `, + context: { + staticMetrics: DelayedArray.create([ + { timestamp: ts(20), percent: 0.5 }, + { timestamp: ts(18), percent: 0.5 }, + { timestamp: ts(16), percent: 0.4 }, + { timestamp: ts(14), percent: 0.3 }, + { timestamp: ts(12), percent: 0.9 }, + { timestamp: ts(10), percent: 0.3 }, + { timestamp: ts(8), percent: 0.3 }, + { timestamp: ts(6), percent: 0.4 }, + { timestamp: ts(4), percent: 0.5 }, + { timestamp: ts(2), percent: 0.6 }, + { timestamp: ts(0), percent: 0.6 }, + ]), + }, + }; +}; + +export let HighLowComparison = () => { + return { + template: hbs` +
Stats Time Series high/low comparison
+
+
+ {{#if data.metricsHigh}} + + {{/if}} +
+
+ {{#if data.metricsLow}} + + {{/if}} +
+
+

Line charts, and therefore stats time series charts, use a letant linear gradient with a height equal to the canvas. This makes the color intensity of the gradient at values consistent across charts as long as those charts have the same y-axis domain.

+

This is used to great effect with stats charts since they all have a y-axis domain of 0-100%.

+ `, + context: { + data: EmberObject.extend({ + timerTicks: 0, + + startTimer: on('init', function() { + this.set( + 'timer', + setInterval(() => { + let metricsHigh = this.metricsHigh; + let prev = metricsHigh.length ? metricsHigh[metricsHigh.length - 1].percent : 0.9; + this.appendTSValue( + metricsHigh, + Math.min(Math.max(prev + Math.random() * 0.05 - 0.025, 0.5), 1) + ); + + let metricsLow = this.metricsLow; + let prev2 = metricsLow.length ? metricsLow[metricsLow.length - 1].percent : 0.1; + this.appendTSValue( + metricsLow, + Math.min(Math.max(prev2 + Math.random() * 0.05 - 0.025, 0), 0.5) + ); + }, 1000) + ); + }), + + appendTSValue(array, percent, maxLength = 300) { + array.addObject({ + timestamp: Date.now(), + percent, + }); + + if (array.length > maxLength) { + array.splice(0, array.length - maxLength); + } + }, + + willDestroy() { + clearInterval(this.timer); + }, + + metricsHigh: computed(() => { + return []; + }), + + metricsLow: computed(() => { + return []; + }), + + secondsFormat() { + return date => moment(date).format('HH:mm:ss'); + }, + }).create(), + }, + }; +}; diff --git a/ui/stories/components/accordion.stories.js b/ui/stories/components/accordion.stories.js new file mode 100644 index 00000000000..82137c9bc9d --- /dev/null +++ b/ui/stories/components/accordion.stories.js @@ -0,0 +1,84 @@ +import hbs from 'htmlbars-inline-precompile'; +import productMetadata from '../../app/utils/styleguide/product-metadata'; + +export default { + title: 'Components|Accordion', +}; + +export let Standard = () => { + return { + template: hbs` +
Accordion
+ + +
+
{{ac.item.name}}
+
+ {{ac.item.lang}} +
+
+
+ +

{{ac.item.name}}

+

{{ac.item.desc}}

+

Learn more...

+
+
+ `, + context: { + products: productMetadata, + }, + }; +}; + +export let OneItem = () => { + return { + template: hbs` +
Accordion, one item
+ + +
+
{{a.item.name}}
+
+ {{a.item.lang}} +
+
+
+ +

{{a.item.name}}

+

{{a.item.desc}}

+

Learn more...

+
+
+ `, + context: { + products: productMetadata, + }, + }; +}; + +export let NotExpandable = () => { + return { + template: hbs` +
Accordion, not expandable
+ + +
+
{{a.item.name}}
+
+ {{a.item.lang}} +
+
+
+ +

{{a.item.name}}

+

{{a.item.desc}}

+

Learn more...

+
+
+ `, + context: { + products: productMetadata, + }, + }; +}; diff --git a/ui/stories/components/alerts.stories.js b/ui/stories/components/alerts.stories.js new file mode 100644 index 00000000000..052bf2e4fac --- /dev/null +++ b/ui/stories/components/alerts.stories.js @@ -0,0 +1,102 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Alerts', +}; + +export let Standard = () => { + return { + template: hbs` +
Alert
+
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+

Alerts use Bulma's notification component.

+ `, + }; +}; + +export let Colors = () => { + return { + template: hbs` +
Alert colors
+
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+ +
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+ +
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+ +
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+ +

Alerts are always paired with an emotive color. If there is no emotive association with the content of the alert, then an alert is the wrong component to use.

+ `, + }; +}; + +export let Dismissal = () => { + return { + template: hbs` +
Alert dismissal
+
+
+
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+
+ +
+
+
+ +
+
+
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+
+ +
+
+
+ +
+
+
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+
+ +
+
+
+ +
+
+
+

This is an alert

+

Alerts are used for both situational and reactionary information.

+
+
+ +
+
+
+ `, + }; +}; diff --git a/ui/stories/components/boxed-section.stories.js b/ui/stories/components/boxed-section.stories.js new file mode 100644 index 00000000000..8b73b16a894 --- /dev/null +++ b/ui/stories/components/boxed-section.stories.js @@ -0,0 +1,164 @@ +import hbs from 'htmlbars-inline-precompile'; +import { withKnobs, optionsKnob } from '@storybook/addon-knobs'; + +export default { + title: 'Components|Boxed Section', + decorators: [withKnobs], +}; + +export let Standard = () => { + return { + template: hbs` +
Boxed section
+
+
+ Boxed Section +
+
+
+
+
+
+
+
+
+ `, + context: contextFactory(), + }; +}; + +export let RightHandDetails = () => { + return { + template: hbs` +
Boxed section with right hand details
+
+
+ Boxed Section With Right Hand Details + {{now interval=1000}} +
+
+
+
+
+
+
+
+
+ `, + context: contextFactory(), + }; +}; + +export let TitleDecoration = () => { + return { + template: hbs` +
Boxed section with title decoration
+
+
+ Boxed Section With Title Decoration + 7 +
+
+
+
+
+
+
+
+
+ `, + context: contextFactory(), + }; +}; + +export let Foot = () => { + return { + template: hbs` +
Boxed section with foot
+
+
+ Boxed Section With Large Header +
+
+
+
+
+
+
+
+
+ Left-aligned message + Toggle or other action +
+
+ `, + context: contextFactory(), + }; +}; + +export let LargeHeader = () => { + return { + template: hbs` +
Boxed section with large header
+
+
+
+ Boxed Section With Large Header + Status +
+
+ A tag that goes on a second line because it's rather long +
+
+
+
+
+
+
+
+
+
+ `, + context: contextFactory(), + }; +}; + +export let DarkBody = () => { + return { + template: hbs` +
Boxed section with dark body
+
+
+ Boxed Section With Dark Body +
+
+
+
+
+
+
+
+
+ `, + context: contextFactory(), + }; +}; + +function contextFactory() { + return { + variant: optionsKnob( + 'Variant', + { + Normal: '', + Info: 'is-info', + Warning: 'is-warning', + Danger: 'is-danger', + }, + '', + { + display: 'inline-radio', + }, + 'variant-id' + ), + }; +} diff --git a/ui/stories/components/breadcrumbs.stories.js b/ui/stories/components/breadcrumbs.stories.js new file mode 100644 index 00000000000..fd23f26d64e --- /dev/null +++ b/ui/stories/components/breadcrumbs.stories.js @@ -0,0 +1,45 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Breadcrumbs', +}; + +export let Standard = () => { + return { + template: hbs` +
Breadcrumbs
+ +

Breadcrumbs are only ever used in the secondary nav of the primary header.

+ `, + }; +}; + +export let Single = () => { + return { + template: hbs` +
Single breadcrumb
+ +

Breadcrumbs are given a lot of emphasis and often double as a page title. Since they are also global state, they are important for helping a user keep their bearings.

+ `, + }; +}; diff --git a/ui/stories/components/buttons.stories.js b/ui/stories/components/buttons.stories.js new file mode 100644 index 00000000000..9c139e5b8ad --- /dev/null +++ b/ui/stories/components/buttons.stories.js @@ -0,0 +1,130 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Buttons', +}; + +export let Standard = () => { + return { + template: hbs` +
Buttons
+
+ Button + White + Light + Dark + Black + Link +
+ + `, + }; +}; + +export let Outline = () => { + return { + template: hbs` +
Outline buttons
+ + `, + }; +}; + +export let Hollow = () => { + return { + template: hbs` +
Hollow buttons
+ + `, + }; +}; + +export let Sizes = () => { + return { + template: hbs` +
Button sizes
+
+ Small + Normal + Medium + Large +
+ `, + }; +}; + +export let Disabled = () => { + return { + template: hbs` +
Anchor elements as buttons
+
+ Button + White + Light + Dark + Black + Link +
+ + +
Button elements with disabled attribute
+
+ + + + + + +
+
+ + + + + +
+ +
Button elements with aria-disabled="true"
+
+ + + + + + +
+
+ + + + + +
+ `, + }; +}; diff --git a/ui/stories/components/copy-button.stories.js b/ui/stories/components/copy-button.stories.js new file mode 100644 index 00000000000..99ba6a0176c --- /dev/null +++ b/ui/stories/components/copy-button.stories.js @@ -0,0 +1,22 @@ +import hbs from 'htmlbars-inline-precompile'; +import { withKnobs, text } from '@storybook/addon-knobs'; + +export default { + title: 'Components|Copy Button', + decorators: [withKnobs], +}; + +export let CopyButton = () => { + return { + template: hbs` +
Copy Button
+ + {{clipboardText}} + + + `, + context: { + clipboardText: text('Clipboard Text', 'e8c898a0-794b-9063-7a7f-bf0c4a405f83'), + }, + }; +}; diff --git a/ui/stories/components/diff-viewer.stories.js b/ui/stories/components/diff-viewer.stories.js new file mode 100644 index 00000000000..ea2d7fc03f4 --- /dev/null +++ b/ui/stories/components/diff-viewer.stories.js @@ -0,0 +1,488 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Diff Viewer', +}; + +export let DiffViewerWithInsertions = () => { + return { + template: hbs` +
Diff Viewer with insertions
+
+
+ {{job-diff diff=insertionsOnly}} +
+
+ `, + context: { + insertionsOnly: generateDiff([ + { Annotations: null, Name: 'Attempts', New: '15', Old: '15', Type: 'None' }, + { Annotations: null, Name: 'Delay', New: '25000000000', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'Interval', New: '900000000000', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'Mode', New: 'delay', Old: 'delay', Type: 'None' }, + ]), + }, + }; +}; + +export let DiffViewerWithDeletions = () => { + return { + template: hbs` +
Diff Viewer with deletions
+
+
+ {{job-diff diff=deletionsOnly}} +
+
+ `, + context: { + deletionsOnly: generateDiff([ + { Annotations: null, Name: 'Attempts', New: '15', Old: '15', Type: 'None' }, + { + Annotations: null, + Name: 'Delay', + New: '25000000000', + Old: '25000000000', + Type: 'None', + }, + { + Annotations: null, + Name: 'Interval', + New: '900000000000', + Old: '900000000000', + Type: 'None', + }, + { Annotations: null, Name: 'Mode', New: '', Old: 'delay', Type: 'Deleted' }, + ]), + }, + }; +}; + +export let DiffViewerWithEdits = () => { + return { + template: hbs` +
Diff Viewer with edits
+
+
+ {{job-diff diff=editsOnly}} +
+

Often times a diff will only have a couple lines. Minor tweaks to a job spec result in small diffs.

+
+ `, + context: { + editsOnly: generateDiff([ + { Annotations: null, Name: 'Attempts', New: '15', Old: '15', Type: 'None' }, + { + Annotations: null, + Name: 'Delay', + New: '25000000000', + Old: '25000000000', + Type: 'None', + }, + { + Annotations: null, + Name: 'Interval', + New: '900000000000', + Old: '250000000000', + Type: 'Edited', + }, + { Annotations: null, Name: 'Mode', New: 'delay', Old: 'delay', Type: 'None' }, + ]), + }, + }; +}; + +export let DiffViewerWithManyChanges = () => { + return { + template: hbs` +
Diff Viewer with many changes
+
+
+ {{job-diff diff=largeDiff}} +
+
+ `, + context: { + largeDiff: { + Fields: null, + ID: 'example', + Objects: null, + TaskGroups: [ + { + Fields: null, + Name: 'cache', + Objects: null, + Tasks: [ + { + Annotations: null, + Fields: [ + { + Annotations: null, + Name: 'Meta[one]', + New: "flew over the cuckoo's nest", + Old: '', + Type: 'Added', + }, + { + Annotations: null, + Name: 'Meta[two]', + New: 'birds on a wire', + Old: '', + Type: 'Added', + }, + ], + Name: 'redis', + Objects: [ + { + Fields: [ + { + Annotations: null, + Name: 'image', + New: 'redis:3.4', + Old: 'redis:3.2', + Type: 'Edited', + }, + { + Annotations: null, + Name: 'port_map[0][db]', + New: '6380', + Old: '6379', + Type: 'Edited', + }, + ], + Name: 'Config', + Objects: null, + Type: 'Edited', + }, + { + Fields: [ + { Annotations: null, Name: 'CPU', New: '1000', Old: '500', Type: 'Edited' }, + { Annotations: null, Name: 'DiskMB', New: '0', Old: '0', Type: 'None' }, + { Annotations: null, Name: 'IOPS', New: '0', Old: '0', Type: 'None' }, + { + Annotations: null, + Name: 'MemoryMB', + New: '512', + Old: '256', + Type: 'Edited', + }, + ], + Name: 'Resources', + Objects: [ + { + Fields: [ + { Annotations: null, Name: 'MBits', New: '100', Old: '', Type: 'Added' }, + ], + Name: 'Network', + Objects: [ + { + Fields: [ + { + Annotations: null, + Name: 'Label', + New: 'db', + Old: '', + Type: 'Added', + }, + ], + Name: 'Dynamic Port', + Objects: null, + Type: 'Added', + }, + ], + Type: 'Added', + }, + { + Fields: [ + { Annotations: null, Name: 'MBits', New: '', Old: '10', Type: 'Deleted' }, + ], + Name: 'Network', + Objects: [ + { + Fields: [ + { + Annotations: null, + Name: 'Label', + New: '', + Old: 'db', + Type: 'Deleted', + }, + ], + Name: 'Dynamic Port', + Objects: null, + Type: 'Deleted', + }, + ], + Type: 'Deleted', + }, + ], + Type: 'Edited', + }, + { + Fields: [ + { + Annotations: null, + Name: 'AddressMode', + New: 'auto', + Old: 'auto', + Type: 'None', + }, + { + Annotations: null, + Name: 'Name', + New: 'redis-cache', + Old: 'redis-cache', + Type: 'None', + }, + { Annotations: null, Name: 'PortLabel', New: 'db', Old: 'db', Type: 'None' }, + ], + Name: 'Service', + Objects: [ + { + Fields: [ + { Annotations: null, Name: 'Tags', New: 'redis', Old: '', Type: 'Added' }, + { + Annotations: null, + Name: 'Tags', + New: 'cache', + Old: 'cache', + Type: 'None', + }, + { + Annotations: null, + Name: 'Tags', + New: 'global', + Old: 'global', + Type: 'None', + }, + ], + Name: 'Tags', + Objects: null, + Type: 'Added', + }, + { + Fields: [ + { + Annotations: null, + Name: 'AddressMode', + New: '', + Old: '', + Type: 'None', + }, + { Annotations: null, Name: 'Command', New: '', Old: '', Type: 'None' }, + { + Annotations: null, + Name: 'GRPCService', + New: '', + Old: '', + Type: 'None', + }, + { + Annotations: null, + Name: 'GRPCUseTLS', + New: 'false', + Old: 'false', + Type: 'None', + }, + { + Annotations: null, + Name: 'InitialStatus', + New: '', + Old: '', + Type: 'None', + }, + { + Annotations: null, + Name: 'Interval', + New: '15000000000', + Old: '10000000000', + Type: 'Edited', + }, + { Annotations: null, Name: 'Method', New: '', Old: '', Type: 'None' }, + { + Annotations: null, + Name: 'Name', + New: 'alive', + Old: 'alive', + Type: 'None', + }, + { Annotations: null, Name: 'Path', New: '', Old: '', Type: 'None' }, + { Annotations: null, Name: 'PortLabel', New: '', Old: '', Type: 'None' }, + { Annotations: null, Name: 'Protocol', New: '', Old: '', Type: 'None' }, + { + Annotations: null, + Name: 'TLSSkipVerify', + New: 'false', + Old: 'false', + Type: 'None', + }, + { + Annotations: null, + Name: 'Timeout', + New: '7000000000', + Old: '2000000000', + Type: 'Edited', + }, + { Annotations: null, Name: 'Type', New: 'tcp', Old: 'tcp', Type: 'None' }, + ], + Name: 'Check', + Objects: null, + Type: 'Edited', + }, + ], + Type: 'Edited', + }, + ], + Type: 'Edited', + }, + ], + Type: 'Edited', + Updates: null, + }, + { + Fields: [ + { Annotations: null, Name: 'Count', New: '1', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'Meta[key]', New: 'value', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'Meta[red]', New: 'fish', Old: '', Type: 'Added' }, + ], + Name: 'cache2', + Objects: [ + { + Fields: [ + { Annotations: null, Name: 'Attempts', New: '2', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'Delay', New: '15000000000', Old: '', Type: 'Added' }, + { + Annotations: null, + Name: 'Interval', + New: '1800000000000', + Old: '', + Type: 'Added', + }, + { Annotations: null, Name: 'Mode', New: 'fail', Old: '', Type: 'Added' }, + ], + Name: 'RestartPolicy', + Objects: null, + Type: 'Added', + }, + { + Fields: [ + { Annotations: null, Name: 'Migrate', New: 'false', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'SizeMB', New: '300', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'Sticky', New: 'false', Old: '', Type: 'Added' }, + ], + Name: 'EphemeralDisk', + Objects: null, + Type: 'Added', + }, + ], + Tasks: [ + { + Annotations: null, + Fields: [ + { Annotations: null, Name: 'Driver', New: 'docker', Old: '', Type: 'Added' }, + { + Annotations: null, + Name: 'KillTimeout', + New: '5000000000', + Old: '', + Type: 'Added', + }, + { Annotations: null, Name: 'Leader', New: 'false', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'ShutdownDelay', New: '0', Old: '', Type: 'Added' }, + ], + Name: 'redis', + Objects: [ + { + Fields: [ + { + Annotations: null, + Name: 'image', + New: 'redis:3.2', + Old: '', + Type: 'Added', + }, + { + Annotations: null, + Name: 'port_map[0][db]', + New: '6379', + Old: '', + Type: 'Added', + }, + ], + Name: 'Config', + Objects: null, + Type: 'Added', + }, + { + Fields: [ + { Annotations: null, Name: 'CPU', New: '500', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'DiskMB', New: '0', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'IOPS', New: '0', Old: '', Type: 'Added' }, + { Annotations: null, Name: 'MemoryMB', New: '256', Old: '', Type: 'Added' }, + ], + Name: 'Resources', + Objects: [ + { + Fields: [ + { Annotations: null, Name: 'MBits', New: '10', Old: '', Type: 'Added' }, + ], + Name: 'Network', + Objects: [ + { + Fields: [ + { + Annotations: null, + Name: 'Label', + New: 'db', + Old: '', + Type: 'Added', + }, + ], + Name: 'Dynamic Port', + Objects: null, + Type: 'Added', + }, + ], + Type: 'Added', + }, + ], + Type: 'Added', + }, + ], + Type: 'Added', + }, + ], + Type: 'Added', + Updates: null, + }, + ], + Type: 'Edited', + }, + }, + }; +}; + +function generateDiff(changeset) { + return { + Fields: null, + ID: 'insertions-only', + Objects: null, + TaskGroups: [ + { + Fields: [{ Annotations: null, Name: 'Count', New: '2', Old: '2', Type: 'None' }], + Name: 'cache', + Objects: [ + { + Fields: changeset, + Name: 'RestartPolicy', + Objects: null, + Type: 'Edited', + }, + ], + Type: 'Edited', + Updates: null, + }, + ], + Type: 'Edited', + }; +} diff --git a/ui/stories/components/dropdown.stories.js b/ui/stories/components/dropdown.stories.js new file mode 100644 index 00000000000..4cf7cee95bb --- /dev/null +++ b/ui/stories/components/dropdown.stories.js @@ -0,0 +1,83 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Dropdown', +}; + +let options = [ + { name: 'Consul' }, + { name: 'Nomad' }, + { name: 'Packer' }, + { name: 'Terraform' }, + { name: 'Vagrant' }, + { name: 'Vault' }, +]; + +export let Standard = () => { + return { + template: hbs` +
Dropdown
+ + {{option.name}} + +

Power Select currently fulfills all of Nomad's dropdown needs out of the box.

+ `, + context: { + options, + }, + }; +}; + +export let Resized = () => { + return { + template: hbs` +
Dropdown resized
+
+
+ + {{option.name}} + +
+
+

Dropdowns are always 100% wide. To control the width of a dropdown, adjust the dimensions of its container. One way to achieve this is using columns.

+ `, + context: { + options, + }, + }; +}; + +export let Search = () => { + return { + template: hbs` +
Dropdown with search
+
+
+ + {{option.name}} + +
+
+

Whether or not the dropdown has a search box is configurable. Typically the default is to show a search once a dropdown has more than 10 options.

+ `, + context: { + manyOptions: [ + 'One', + 'Two', + 'Three', + 'Four', + 'Five', + 'Six', + 'Seven', + 'Eight', + 'Nine', + 'Ten', + 'Eleven', + 'Twelve', + 'Thirteen', + 'Fourteen', + 'Fifteen', + ].map(name => ({ name })), + }, + }; +}; diff --git a/ui/stories/components/gutter-menu.stories.js b/ui/stories/components/gutter-menu.stories.js new file mode 100644 index 00000000000..b47785bc89e --- /dev/null +++ b/ui/stories/components/gutter-menu.stories.js @@ -0,0 +1,174 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Gutter Menu', +}; + +export let Standard = () => { + return { + template: hbs` +
Gutter menu
+
+
+
+ +
+
+
+
+
+
+
+
+ `, + }; +}; + +export let RichComponents = () => { + return { + template: hbs` +
Gutter navigation with rich components
+
+
+
+ +
+
+
+
+
+
+
+
+

In order to keep the gutter navigation streamlined and easy to navigation, rich components should be avoided when possible. When not possible, they should be kept near the top.

+ `, + }; +}; + +export let ManyItems = () => { + return { + template: hbs` +
Hypothetical gutter navigation with many items
+
+
+
+ +
+
+
+
+
+
+
+
+

There will only ever be one gutter menu in the Nomad UI, but it helps to imagine a situation where there are many navigation items in the gutter.

+ `, + }; +}; + +export let IconItems = () => { + return { + template: hbs` +
Hypothetical gutter navigation with icon items
+ +

In the future, the gutter menu may have icons.

+ `, + }; +}; + +export let Global = () => { + return { + template: hbs` +
Global gutter navigation
+
+
+ + {{!-- Page content here --}} + +
+
+

Since there will only ever be one gutter menu in the UI, it makes sense to express the menu as a singleton component. This is what that singleton component looks like.

+

Note: Normally the gutter menu is rendered within a page layout and is fixed position. The columns shown in this example are only to imitate the actual width without applying fixed positioning.

+ `, + }; +}; diff --git a/ui/stories/components/header.stories.js b/ui/stories/components/header.stories.js new file mode 100644 index 00000000000..22b8a0a9683 --- /dev/null +++ b/ui/stories/components/header.stories.js @@ -0,0 +1,28 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Header', +}; + +export let Header = () => { + return { + template: hbs` +
Global header
+ + `, + }; +}; diff --git a/ui/stories/components/inline-definitions.stories.js b/ui/stories/components/inline-definitions.stories.js new file mode 100644 index 00000000000..e719b59fecf --- /dev/null +++ b/ui/stories/components/inline-definitions.stories.js @@ -0,0 +1,92 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Inline Definitions', +}; + +export let Standard = () => { + return { + template: hbs` +
Inline definitions
+
+
+ Some Label + + Term Name + Term Value + + + Running? + Yes + + + Last Updated + {{format-ts (now)}} + +
+
+

A way to tightly display key/value information. Typically seen at the top of pages.

+ `, + }; +}; + +export let Variants = () => { + return { + template: hbs` +
Inline definitions variants
+
+
+ Success Label + + Term Name + Term Value + + + Last Updated + {{format-ts (now)}} + +
+
+
+
+ Warning Label + + Term Name + Term Value + + + Last Updated + {{format-ts (now)}} + +
+
+
+
+ Danger Label + + Term Name + Term Value + + + Last Updated + {{format-ts (now)}} + +
+
+
+
+ Info Label + + Term Name + Term Value + + + Last Updated + {{format-ts (now)}} + +
+
+

Inline definitions are meant to pair well with emotive color variations.

+ `, + }; +}; diff --git a/ui/stories/components/json-viewer.stories.js b/ui/stories/components/json-viewer.stories.js new file mode 100644 index 00000000000..17843cc80ce --- /dev/null +++ b/ui/stories/components/json-viewer.stories.js @@ -0,0 +1,183 @@ +import hbs from 'htmlbars-inline-precompile'; + +import DelayedTruth from '../utils/delayed-truth'; + +export default { + title: 'Components|JSON Viewer', +}; + +export let Standard = () => { + return { + template: hbs` +
JSON Viewer
+ {{#if delayedTruth.complete}} + + {{/if}} + `, + context: { + delayedTruth: DelayedTruth.create(), + jsonSmall: { + delayedData: {}, + data: { + foo: 'bar', + number: 123456789, + products: ['Consul', 'Nomad', 'Packer', 'Terraform', 'Vagrant', 'Vault'], + currentTime: '2019-10-16T14:24:12.378Z', + nested: { + obj: 'ject', + }, + nonexistent: null, + isTrue: false, + }, + }, + }, + }; +}; + +export let FullDocument = () => { + return { + template: hbs` +
JSON Viewer for full document
+ {{#if delayedTruth.complete}} + + {{/if}} + `, + context: { + delayedTruth: DelayedTruth.create(), + jsonLarge: { + delayedData: {}, + data: { + Stop: false, + Region: 'global', + Namespace: 'default', + ID: 'syslog', + ParentID: '', + Name: 'syslog', + Type: 'system', + Priority: 50, + AllAtOnce: false, + Datacenters: ['dc1', 'dc2'], + letraints: null, + TaskGroups: [ + { + Name: 'syslog', + Count: 1, + Update: { + Stagger: 10000000000, + MaxParallel: 1, + HealthCheck: 'checks', + MinHealthyTime: 10000000000, + HealthyDeadline: 300000000000, + ProgressDeadline: 600000000000, + AutoRevert: false, + Canary: 0, + }, + Migrate: null, + letraints: [ + { + LTarget: '', + RTarget: '', + Operand: 'distinct_hosts', + }, + ], + RestartPolicy: { + Attempts: 10, + Interval: 300000000000, + Delay: 25000000000, + Mode: 'delay', + }, + Tasks: [ + { + Name: 'syslog', + Driver: 'docker', + User: '', + Config: { + port_map: [ + { + tcp: 601, + udp: 514, + }, + ], + image: 'balabit/syslog-ng:latest', + }, + Env: null, + Services: null, + Vault: null, + Templates: null, + letraints: null, + Resources: { + CPU: 500, + MemoryMB: 256, + DiskMB: 0, + IOPS: 0, + Networks: [ + { + Device: '', + CIDR: '', + IP: '', + MBits: 10, + ReservedPorts: [ + { + Label: 'udp', + Value: 514, + }, + { + Label: 'tcp', + Value: 601, + }, + ], + DynamicPorts: null, + }, + ], + }, + DispatchPayload: null, + Meta: null, + KillTimeout: 5000000000, + LogConfig: { + MaxFiles: 10, + MaxFileSizeMB: 10, + }, + Artifacts: null, + Leader: false, + ShutdownDelay: 0, + KillSignal: '', + }, + ], + EphemeralDisk: { + Sticky: false, + SizeMB: 300, + Migrate: false, + }, + Meta: null, + ReschedulePolicy: null, + }, + ], + Update: { + Stagger: 10000000000, + MaxParallel: 1, + HealthCheck: '', + MinHealthyTime: 0, + HealthyDeadline: 0, + ProgressDeadline: 0, + AutoRevert: false, + Canary: 0, + }, + Periodic: null, + ParameterizedJob: null, + Dispatched: false, + Payload: null, + Meta: null, + VaultToken: '', + Status: 'running', + StatusDescription: '', + Stable: false, + Version: 0, + SubmitTime: 1530052201331477800, + CreateIndex: 27, + ModifyIndex: 27, + JobModifyIndex: 27, + }, + }, + }, + }; +}; diff --git a/ui/stories/components/log-stream.stories.js b/ui/stories/components/log-stream.stories.js new file mode 100644 index 00000000000..bb95f664e14 --- /dev/null +++ b/ui/stories/components/log-stream.stories.js @@ -0,0 +1,66 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Log Stream', +}; + +export let LogStream = () => { + return { + template: hbs` +
Log stream
+
+
+ + + + + + + + + +
+
+
{{if (eq mode1 "stdout") sampleOutput sampleError}}
+
+
+ `, + context: { + mode1: 'stdout', + isPlaying1: true, + + sampleOutput: `Sample output +> 1 +> 2 +> 3 +[00:12:58] Log output here +[00:15:29] [ERR] Uh oh +Loading. +Loading.. +Loading... + + >> Done! << + + `, + + sampleError: `Sample error + +[====|--------------------] 20% + +!!! Unrecoverable error: + + Cannot continue beyond this point. Exception should be caught. + This is not a mistake. You did something wrong. Check the code. + No, you will not receive any more details or guidance from this + error message. + + `, + }, + }; +}; diff --git a/ui/stories/components/metrics.stories.js b/ui/stories/components/metrics.stories.js new file mode 100644 index 00000000000..d0fca72f3f8 --- /dev/null +++ b/ui/stories/components/metrics.stories.js @@ -0,0 +1,143 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Metrics', +}; + +export let Standard = () => { + return { + template: hbs` +
Metrics
+
+
+

Label

+

12

+
+
+

Metrics are a way to show simple values (generally numbers). Labels are smaller than numbers to put emphasis on the data.

+ `, + }; +}; + +export let Groups = () => { + return { + template: hbs` +
Metric groups
+
+
+

Label

+

1 / 2

+
+
+

Number

+

1,300

+
+
+

Datacenter

+

dc1

+
+
+ +
+
+

Today

+

81º

+
+
+

Tomorrow

+

73º

+
+
+

Related metrics should be lumped together in metric groups. All metrics have to be in a metric group. By putting multiple metrics in a single group, they will be visually lumped together.

+ `, + }; +}; + +export let Colors = () => { + return { + template: hbs` +
Metric colors
+
+
+

Info

+

1

+
+
+

Success

+

2

+
+
+

Warning

+

3

+
+
+

Danger

+

4

+
+
+ +
+
+

White

+

5

+
+
+

Light

+

6

+
+
+

Primary

+

7

+
+
+

Dark

+

8

+
+
+

Black

+

9

+
+
+

All color-modifiers work for metrics, but some work better than others.

+

Emotive colors work well and are put to use when applicable. Other colors have worse support and less utility.

+ `, + }; +}; + +export let States = () => { + return { + template: hbs` +
Metric states
+
+
+

One

+

A

+
+
+

Two

+

B

+
+
+

Three

+

C

+
+
+ +
+
+

One

+

A

+
+
+

Two

+

B

+
+
+

Three

+

C

+
+
+

Metrics have a disabled state. This is used when a metric is non-existent or irrelevant. It's just as important to show the lack of value as it is to show a value, so simply not rendering non-existent or irrelevant metrics would be worse.

+ `, + }; +}; diff --git a/ui/stories/components/multi-select-dropdown.stories.js b/ui/stories/components/multi-select-dropdown.stories.js new file mode 100644 index 00000000000..e20d0e84ec0 --- /dev/null +++ b/ui/stories/components/multi-select-dropdown.stories.js @@ -0,0 +1,131 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Multi-Select Dropdown', +}; + +let options1 = [ + { key: 'option-1', label: 'Option One' }, + { key: 'option-2', label: 'Option Two' }, + { key: 'option-3', label: 'Option Three' }, + { key: 'option-4', label: 'Option Four' }, + { key: 'option-5', label: 'Option Five' }, +]; + +let selection1 = ['option-2', 'option-4', 'option-5']; + +export let Standard = () => { + return { + template: hbs` +
Multi-Select Dropdown
+ +

A wrapper around basic-dropdown for creating a list of checkboxes and tracking the state thereof.

+ `, + context: { + options1, + selection1, + }, + }; +}; + +export let RightAligned = () => { + return { + template: hbs` +
Multi-Select Dropdown right-aligned
+
+ +
+ `, + context: { + options1, + selection1, + }, + }; +}; + +export let ManyOptions = () => { + return { + template: hbs` +
Multi-Select Dropdown with many options
+ +

+ A strength of the multi-select-dropdown is its simple presentation. It is quick to select options and it is quick to remove options. + However, this strength becomes a weakness when there are too many options. Since the selection isn't pinned in any way, removing a selection + can become an adventure of scrolling up and down. Also since the selection isn't pinned, this component can't support search, since search would + entirely mask the selection. +

+ `, + context: { + optionsMany: Array(100) + .fill(null) + .map((_, i) => ({ label: `Option ${i}`, key: `option-${i}` })), + selectionMany: [], + }, + }; +}; + +export let Bar = () => { + return { + template: hbs` +
Multi-Select Dropdown bar
+
+ + + +
+

+ Since this is a core component for faceted search, it makes sense to letruct an arrangement of multi-select dropdowns. + Do this by wrapping all the options in a .button-bar container. +

+ `, + context: { + optionsDatacenter: [ + { key: 'pdx-1', label: 'pdx-1' }, + { key: 'jfk-1', label: 'jfk-1' }, + { key: 'jfk-2', label: 'jfk-2' }, + { key: 'muc-1', label: 'muc-1' }, + ], + selectionDatacenter: ['jfk-1', 'jfk-2'], + + optionsType: [ + { key: 'batch', label: 'Batch' }, + { key: 'service', label: 'Service' }, + { key: 'system', label: 'System' }, + { key: 'periodic', label: 'Periodic' }, + { key: 'parameterized', label: 'Parameterized' }, + ], + selectionType: ['system', 'service'], + + optionsStatus: [ + { key: 'pending', label: 'Pending' }, + { key: 'running', label: 'Running' }, + { key: 'dead', label: 'Dead' }, + ], + selectionStatus: [], + }, + }; +}; diff --git a/ui/stories/components/page-tabs.stories.js b/ui/stories/components/page-tabs.stories.js new file mode 100644 index 00000000000..bab4e9db551 --- /dev/null +++ b/ui/stories/components/page-tabs.stories.js @@ -0,0 +1,34 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Page Tabs', +}; + +export let Standard = () => { + return { + template: hbs` +
Page tabs
+ + `, + }; +}; + +export let Single = () => { + return { + template: hbs` +
Single page tab
+
+ +
+ `, + }; +}; diff --git a/ui/stories/components/page-title.stories.js b/ui/stories/components/page-title.stories.js new file mode 100644 index 00000000000..ded5f1acdeb --- /dev/null +++ b/ui/stories/components/page-title.stories.js @@ -0,0 +1,69 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Page Title', +}; + +export let Standard = () => { + return { + template: hbs` +
Page title
+
+

This is the Page Title

+
+

In its simplest form, a page title is just an H1.

+ `, + }; +}; + +export let AfterElements = () => { + return { + template: hbs` +
Page title with after elements
+
+

+ This is the Page Title + Running + 237aedcb8982fe09bcee0877acedd +

+
+

It is common to put high-impact tags and badges to the right of titles. These tags should only ever appear on the right-hand side of the title, and they should be listed in descending weights. Tags with a background are heavier than tags that are hollow. Longer values are heavier than shorter values.

+ `, + }; +}; + +export let StatusLight = () => { + return { + template: hbs` +
Page title with status light
+
+

+ + This is the Page Title + Running + 237aedcb8982fe09bcee0877acedd +

+
+

A simple color or pattern is faster to scan than a title and can often say more than words can. For pages that have an important status component to them (e.g., client detail page), a status light can be shown to the left of the title where typically eyes will begin to scan a page.

+ `, + }; +}; + +export let Actions = () => { + return { + template: hbs` +
Page title with actions
+
+

+ + This is the Page Title + Running + 237aedcb8982fe09bcee0877acedd + + +

+
+

When actions apply to the entire context of a page, (e.g., job actions on the job detail page), buttons for these actions go in the page title. Buttons are always placed on the far right end of a page title. No elements can go to the right of these buttons.

+ `, + }; +}; diff --git a/ui/stories/components/proxy-tag.stories.js b/ui/stories/components/proxy-tag.stories.js new file mode 100644 index 00000000000..0ee6efed1e2 --- /dev/null +++ b/ui/stories/components/proxy-tag.stories.js @@ -0,0 +1,14 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Proxy Tag', +}; + +export let ProxyTag = () => { + return { + template: hbs` +
Proxy Tag
+
Some kind of title
+ `, + }; +}; diff --git a/ui/stories/components/search-box.stories.js b/ui/stories/components/search-box.stories.js new file mode 100644 index 00000000000..063bb0b7056 --- /dev/null +++ b/ui/stories/components/search-box.stories.js @@ -0,0 +1,31 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Search Box', +}; + +export let Standard = () => { + return { + template: hbs` +
Search Box
+ +

The search box component is a thin wrapper around a simple input. Although the searchTerm passed to it is a mutable reference, internally search term is debounced. This is to prevent potentially expensive code that depends on searchTerm from recomputing many times as a user types.

+

There is no form of the search box component that defers updating the searchTerm reference until the user manually clicks a "Search" button. This can be achieved by placing a button next to the search bar component and using it to perform search, but search should be automatic whenever possible.

+ `, + }; +}; + +export let Compact = () => { + return { + template: hbs` +
Compact Search Box
+ +

Search box provides an inputClass property to control the inner input. This is nice for fitting the search box into smaller spaces, such as boxed-section heads.

+ `, + }; +}; diff --git a/ui/stories/components/table-configuration.stories.js b/ui/stories/components/table-configuration.stories.js new file mode 100644 index 00000000000..005f4ec138c --- /dev/null +++ b/ui/stories/components/table-configuration.stories.js @@ -0,0 +1,40 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Table, Configuration', +}; + +export let TableConfiguration = () => { + return { + template: hbs` +
Table, configuration
+ + `, + context: { + attributes: { + key: 'val', + deep: { + key: 'val', + more: 'stuff', + }, + array: ['one', 'two', 'three', 'four'], + very: { + deep: { + key: { + incoming: { + one: 1, + two: 2, + three: 3, + four: 'surprisingly long value that is unlike the other properties in this object', + }, + }, + }, + }, + }, + }, + }; +}; + +TableConfiguration.story = { + title: 'Table, Configuration', +}; diff --git a/ui/stories/components/table.stories.js b/ui/stories/components/table.stories.js new file mode 100644 index 00000000000..662bfaebaa0 --- /dev/null +++ b/ui/stories/components/table.stories.js @@ -0,0 +1,483 @@ +import hbs from 'htmlbars-inline-precompile'; +import productMetadata from '../../app/utils/styleguide/product-metadata'; + +import EmberObject, { computed } from '@ember/object'; + +import { getOwner } from '@ember/application'; +import { on } from '@ember/object/evented'; +import Controller from '@ember/controller'; + +export default { + title: 'Components|Table', +}; + +/** + * The Ember integration for Storybook renders a container component with no routing, + * which means things that need query parameters, like sorting and pagination, won’t work. + + * This initialiser turns on routing and accepts a controller definition that gets wired up + * to a generated `storybook` route. The controller is attached to the Storybook component + * as the `controller` property so its query parameters are accessible from the template. + */ +function injectRoutedController(controllerClass) { + return on('init', function() { + let container = getOwner(this); + container.register('controller:storybook', controllerClass); + + let routerFactory = container.factoryFor('router:main'); + routerFactory.class.map(function() { + this.route('storybook'); + }); + + let router = container.lookup('router:main'); + router.initialURL = 'storybook'; + router.startRouting(true); + + this.set('controller', container.lookup('controller:storybook')); + }); +} + +let longList = [ + { city: 'New York', growth: 0.048, population: '8405837', rank: '1', state: 'New York' }, + { city: 'Los Angeles', growth: 0.048, population: '3884307', rank: '2', state: 'California' }, + { city: 'Chicago', growth: -0.061, population: '2718782', rank: '3', state: 'Illinois' }, + { city: 'Houston', growth: 0.11, population: '2195914', rank: '4', state: 'Texas' }, + { + city: 'Philadelphia', + growth: 0.026, + population: '1553165', + rank: '5', + state: 'Pennsylvania', + }, + { city: 'Phoenix', growth: 0.14, population: '1513367', rank: '6', state: 'Arizona' }, + { city: 'San Antonio', growth: 0.21, population: '1409019', rank: '7', state: 'Texas' }, + { city: 'San Diego', growth: 0.105, population: '1355896', rank: '8', state: 'California' }, + { city: 'Dallas', growth: 0.056, population: '1257676', rank: '9', state: 'Texas' }, + { city: 'San Jose', growth: 0.105, population: '998537', rank: '10', state: 'California' }, + { city: 'Austin', growth: 0.317, population: '885400', rank: '11', state: 'Texas' }, + { city: 'Indianapolis', growth: 0.078, population: '843393', rank: '12', state: 'Indiana' }, + { city: 'Jacksonville', growth: 0.143, population: '842583', rank: '13', state: 'Florida' }, + { + city: 'San Francisco', + growth: 0.077, + population: '837442', + rank: '14', + state: 'California', + }, + { city: 'Columbus', growth: 0.148, population: '822553', rank: '15', state: 'Ohio' }, + { + city: 'Charlotte', + growth: 0.391, + population: '792862', + rank: '16', + state: 'North Carolina', + }, + { city: 'Fort Worth', growth: 0.451, population: '792727', rank: '17', state: 'Texas' }, + { city: 'Detroit', growth: -0.271, population: '688701', rank: '18', state: 'Michigan' }, + { city: 'El Paso', growth: 0.194, population: '674433', rank: '19', state: 'Texas' }, + { city: 'Memphis', growth: -0.053, population: '653450', rank: '20', state: 'Tennessee' }, + { city: 'Seattle', growth: 0.156, population: '652405', rank: '21', state: 'Washington' }, + { city: 'Denver', growth: 0.167, population: '649495', rank: '22', state: 'Colorado' }, + { + city: 'Washington', + growth: 0.13, + population: '646449', + rank: '23', + state: 'District of Columbia', + }, + { city: 'Boston', growth: 0.094, population: '645966', rank: '24', state: 'Massachusetts' }, + { + city: 'Nashville-Davidson', + growth: 0.162, + population: '634464', + rank: '25', + state: 'Tennessee', + }, + { city: 'Baltimore', growth: -0.04, population: '622104', rank: '26', state: 'Maryland' }, + { city: 'Oklahoma City', growth: 0.202, population: '610613', rank: '27', state: 'Oklahoma' }, + { + city: 'Louisville/Jefferson County', + growth: 0.1, + population: '609893', + rank: '28', + state: 'Kentucky', + }, + { city: 'Portland', growth: 0.15, population: '609456', rank: '29', state: 'Oregon' }, + { city: 'Las Vegas', growth: 0.245, population: '603488', rank: '30', state: 'Nevada' }, + { city: 'Milwaukee', growth: 0.003, population: '599164', rank: '31', state: 'Wisconsin' }, + { city: 'Albuquerque', growth: 0.235, population: '556495', rank: '32', state: 'New Mexico' }, + { city: 'Tucson', growth: 0.075, population: '526116', rank: '33', state: 'Arizona' }, + { city: 'Fresno', growth: 0.183, population: '509924', rank: '34', state: 'California' }, + { city: 'Sacramento', growth: 0.172, population: '479686', rank: '35', state: 'California' }, + { city: 'Long Beach', growth: 0.015, population: '469428', rank: '36', state: 'California' }, + { city: 'Kansas City', growth: 0.055, population: '467007', rank: '37', state: 'Missouri' }, + { city: 'Mesa', growth: 0.135, population: '457587', rank: '38', state: 'Arizona' }, + { city: 'Virginia Beach', growth: 0.051, population: '448479', rank: '39', state: 'Virginia' }, + { city: 'Atlanta', growth: 0.062, population: '447841', rank: '40', state: 'Georgia' }, + { + city: 'Colorado Springs', + growth: 0.214, + population: '439886', + rank: '41', + state: 'Colorado', + }, + { city: 'Omaha', growth: 0.059, population: '434353', rank: '42', state: 'Nebraska' }, + { city: 'Raleigh', growth: 0.487, population: '431746', rank: '43', state: 'North Carolina' }, + { city: 'Miami', growth: 0.149, population: '417650', rank: '44', state: 'Florida' }, + { city: 'Oakland', growth: 0.013, population: '406253', rank: '45', state: 'California' }, + { city: 'Minneapolis', growth: 0.045, population: '400070', rank: '46', state: 'Minnesota' }, + { city: 'Tulsa', growth: 0.013, population: '398121', rank: '47', state: 'Oklahoma' }, + { city: 'Cleveland', growth: -0.181, population: '390113', rank: '48', state: 'Ohio' }, + { city: 'Wichita', growth: 0.097, population: '386552', rank: '49', state: 'Kansas' }, + { city: 'Arlington', growth: 0.133, population: '379577', rank: '50', state: 'Texas' }, +]; + +export let Standard = () => { + return { + template: hbs` +
Table
+ + + Name + Language + Description + + + + {{row.model.name}} + {{row.model.lang}} + {{row.model.desc}} + + + +

Tables have airy designs with a minimal amount of borders. This maximizes their utility.

+ `, + context: { + shortList: productMetadata, + }, + }; +}; + +export let Search = () => { + return { + template: hbs` +
Table search
+
+
+ Table Name + +
+
+ {{#if controller.filteredShortList.length}} + + + Name + Language + Description + + + + {{row.model.name}} + {{row.model.lang}} + {{row.model.desc}} + + + + {{else}} +
+

No Matches

+

No products match your query.

+
+ {{/if}} +
+
+

Tables compose with boxed-section and boxed-section composes with search box.

+ `, + context: { + controller: EmberObject.extend({ + searchTerm: '', + + filteredShortList: computed('searchTerm', function() { + let term = this.searchTerm.toLowerCase(); + return productMetadata.filter(product => product.name.toLowerCase().includes(term)); + }), + }).create(), + }, + }; +}; + +export let SortableColumns = () => { + return { + template: hbs` +
Table with sortable columns
+ + + Name + Language + Description + + + + {{row.model.name}} + {{row.model.lang}} + {{row.model.desc}} + + + +

The list-table component provides a sort-by contextual component for building link-to components with the appropriate query params.

+

This leaves the component stateless, relying on data to be passed down and sending actions back up via the router (via link-to).

+ `, + context: { + injectRoutedController: injectRoutedController( + Controller.extend({ + queryParams: ['sortProperty', 'sortDescending'], + sortProperty: 'name', + sortDescending: false, + }) + ), + + sortedShortList: computed('controller.sortProperty', 'controller.sortDescending', function() { + let sorted = productMetadata.sortBy(this.get('controller.sortProperty') || 'name'); + return this.get('controller.sortDescending') ? sorted.reverse() : sorted; + }), + }, + }; +}; + +export let MultiRow = () => { + return { + template: hbs` +
Multi-row Table
+ + + Name + Language + + + + {{row.model.name}} + {{row.model.lang}} + + + {{row.model.desc}} + + + +

The list-table component attempts to be as flexible as possible. For this reason, t.body does not provide the typical tr element. It's sometimes desired to have multiple elements per record.

+ `, + context: { + injectRoutedController: injectRoutedController( + Controller.extend({ + queryParams: ['sortProperty', 'sortDescending'], + sortProperty: 'name', + sortDescending: false, + }) + ), + + sortedShortList: computed('controller.sortProperty', 'controller.sortDescending', function() { + let sorted = productMetadata.sortBy(this.get('controller.sortProperty') || 'name'); + return this.get('controller.sortDescending') ? sorted.reverse() : sorted; + }), + }, + }; +}; + +export let Pagination = () => { + return { + template: hbs` +
Table pagination
+ + + + Rank + City + State + Population + Growth + + + + {{row.model.rank}} + {{row.model.city}} + {{row.model.state}} + {{row.model.population}} + {{format-percentage row.model.growth total=1}} + + + +
+ +
+
+

Pagination works like sorting: using link-tos to set a query param.

+

Pagination, like Table, is a minimal design. Only a next and previous button are available. The current place in the set of pages is tracked by showing which slice of items is currently shown.

+

The pagination component exposes first and last components (for jumping to the beginning and end of a list) as well as pageLinks for generating links around the current page.

+ `, + context: { + injectRoutedController: injectRoutedController( + Controller.extend({ + queryParams: ['currentPage'], + currentPage: 1, + }) + ), + longList, + }, + }; +}; + +export let RowLinks = () => { + return { + template: hbs` +
Table row links
+ + + Name + Language + Description + + + + {{row.model.name}} + {{row.model.lang}} + {{row.model.desc}} + + + +

It is common for tables to act as lists of links, (e.g., clients list all allocations, each row links to the allocation detail). The helper class is-interactive on the tr makes table rows have a pointer cursor. The helper class is-primary on the a element in a table row makes the link bold and black instead of blue. This makes the link stand out less, since the entire row is a link.

+

+ A few rules for using table row links: +

    +
  1. The is-primary cell should always be the first cell
  2. +
  3. The is-primary cell should always contain a link to the destination in the form of an a element. This is to support opening a link in a new tab.
  4. +
  5. The full row should transition to the destination on click. This is to improve the usability of a table by creating a larger click area.
  6. +
+

+ `, + context: { + shortList: productMetadata, + }, + }; +}; + +export let CellLinks = () => { + return { + template: hbs` +
Table cell links
+ + + Name + Language + Description + + + + {{row.model.name}} + {{row.model.lang}} + {{row.model.desc}} + + + +

Links in table cells are just links.

+ `, + context: { + shortList: productMetadata, + }, + }; +}; + +export let CellDecorations = () => { + return { + template: hbs` +
Table cell decorations
+ + + Name + Language + Description + + + + {{row.model.name}} + + + {{row.model.lang}} + + {{row.model.desc}} + + + +

Small icons and accents of color make tables easier to scan.

+ `, + context: { + shortList: productMetadata, + }, + }; +}; + +export let CellIcons = () => { + return { + template: hbs` +
Table cell icons
+ + + + + Rank + City + State + Population + Growth + + + + + {{#if (lt row.model.growth 0)}} + {{x-icon "warning" class="is-warning"}} + {{/if}} + + {{row.model.rank}} + {{row.model.city}} + {{row.model.state}} + {{row.model.population}} + {{format-percentage row.model.growth total=1}} + + + +
+ +
+
+ `, + context: { + injectRoutedController: injectRoutedController( + Controller.extend({ + queryParams: ['currentPage'], + currentPage: 1, + }) + ), + longList, + }, + }; +}; diff --git a/ui/stories/components/timeline.stories.js b/ui/stories/components/timeline.stories.js new file mode 100644 index 00000000000..194e6af5d6d --- /dev/null +++ b/ui/stories/components/timeline.stories.js @@ -0,0 +1,243 @@ +import hbs from 'htmlbars-inline-precompile'; +import moment from 'moment'; + +export default { + title: 'Components|Timeline', +}; + +export let Standard = () => { + return { + template: hbs` +
Timeline
+
    +
  1. + {{format-date yesterday}} +
  2. +
  3. +
    +
    + Object number one +
    +
    +
  4. +
  5. +
    +
    + Object number two +
    +
    +
  6. +
  7. + {{format-date today}} +
  8. +
  9. +
    +
    + Object number three +
    +
    +
  10. +
+

Timelines are a combination of objects and notes. Objects compose with boxed sections to create structure.

+

Timeline notes should be used sparingly when possible. In this example there is a note per day rather than a note per object.

+ `, + context: { + yesterday: moment().subtract(1, 'd'), + today: moment(), + }, + }; +}; + +export let Detailed = () => { + return { + template: hbs` +
Detailed timeline
+
    +
  1. + {{format-date today}} +
  2. +
  3. +
    +
    + Running + + Stable + a387e243 + + + Submitted + {{moment-from-now (now)}} + +
    +
    +
  4. +
  5. +
    +
    + Complete + + Expired + b3220efb + + + Submitted + {{format-month-ts yesterday}} + +
    +
    +
  6. +
  7. + {{format-date yesterday}} +
  8. +
  9. +
    +
    + Failed + + Reverted + fec9218e + + + Submitted + {{format-month-ts yesterday}} + +
    +
    +
  10. +
+ `, + context: { + yesterday: moment().subtract(1, 'd'), + today: moment(), + }, + }; +}; + +export let Toggling = () => { + return { + template: hbs` +
Toggling timeline objects
+
    +
  1. + {{format-date today}} +
  2. +
  3. +
    +
    + Running + + Stable + a387e243 + + +
    + {{#if toggle1}} +
    +

    Some details for the timeline object.

    +
    + {{/if}} +
    +
  4. +
  5. + {{format-date yesterday}} +
  6. +
  7. +
    +
    + Complete + + Expired + b3220efb + + +
    + {{#if toggle2}} +
    +

    Some details for the timeline object.

    +
    + {{/if}} +
    +
  8. +
+

+ `, + context: { + yesterday: moment().subtract(1, 'd'), + today: moment(), + }, + }; +}; + +export let Emphasizing = () => { + return { + template: hbs` +
Emphasizing timeline objects
+
    +
  1. + {{format-date today}} +
  2. +
  3. +
    +
    + + Stable + a387e243 + + + Submitted + {{moment-from-now (now)}} + +
    +
    +
  4. +
  5. +
    +
    + Pay attention here +
    +
    + + Expired + b3220efb + + + Submitted + {{format-ts yesterday}} + +
    +
    +
  6. +
  7. + {{format-date yesterday}} +
  8. +
  9. +
    +
    + + Reverted + fec9218e + + + Submitted + {{format-ts yesterday}} + +
    +
    +
  10. +
+

By using a full boxed-section for an emphasized timeline object, the object takes up more space and gets more visual weight. It also adheres to existing patterns.

+ `, + context: { + yesterday: moment().subtract(1, 'd'), + today: moment(), + }, + }; +}; diff --git a/ui/stories/components/two-step-button.stories.js b/ui/stories/components/two-step-button.stories.js new file mode 100644 index 00000000000..cdf4b7577cc --- /dev/null +++ b/ui/stories/components/two-step-button.stories.js @@ -0,0 +1,59 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Components|Two-Step Button', +}; + +export let Standard = () => { + return { + template: hbs` +
Two-Step Button
+

+ + `, + }; +}; + +export let InTitle = () => { + return { + template: hbs` +
Two-Step Button in title
+

+

+ This is a page title + +

+ `, + }; +}; + +export let LoadingState = () => { + return { + template: hbs` +
Two-Step Button loading state
+

+

+ This is a page title + +

+

Note: the state property is internal state and only used here to bypass the idle state for demonstration purposes.

+ `, + }; +}; diff --git a/ui/stories/theme/colors.stories.js b/ui/stories/theme/colors.stories.js new file mode 100644 index 00000000000..0810427de85 --- /dev/null +++ b/ui/stories/theme/colors.stories.js @@ -0,0 +1,111 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Theme|Colors', +}; + +export let Colors = () => { + return { + template: hbs` + + + + + + `, + context: { + nomadTheme: [ + { + name: 'Primary', + base: '#25ba81', + }, + { + name: 'Primary Dark', + base: '#1d9467', + }, + { + name: 'Text', + base: '#0a0a0a', + }, + { + name: 'Link', + base: '#1563ff', + }, + { + name: 'Gray', + base: '#bbc4d1', + }, + { + name: 'Off-white', + base: '#f5f5f5', + }, + ], + + productColors: [ + { + name: 'Consul Pink', + base: '#ff0087', + }, + { + name: 'Consul Pink Dark', + base: '#c62a71', + }, + { + name: 'Packer Blue', + base: '#1daeff', + }, + { + name: 'Packer Blue Dark', + base: '#1d94dd', + }, + { + name: 'Terraform Purple', + base: '#5c4ee5', + }, + { + name: 'Terraform Purple Dark', + base: '#4040b2', + }, + { + name: 'Vagrant Blue', + base: '#1563ff', + }, + { + name: 'Vagrant Blue Dark', + base: '#104eb2', + }, + { + name: 'Nomad Green', + base: '#25ba81', + }, + { + name: 'Nomad Green Dark', + base: '#1d9467', + }, + { + name: 'Nomad Green Darker', + base: '#16704d', + }, + ], + + emotiveColors: [ + { + name: 'Success', + base: '#23d160', + }, + { + name: 'Warning', + base: '#fa8e23', + }, + { + name: 'Danger', + base: '#c84034', + }, + { + name: 'Info', + base: '#1563ff', + }, + ], + }, + }; +}; diff --git a/ui/stories/theme/font-stacks.stories.js b/ui/stories/theme/font-stacks.stories.js new file mode 100644 index 00000000000..ad5081ca719 --- /dev/null +++ b/ui/stories/theme/font-stacks.stories.js @@ -0,0 +1,33 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Theme|Font Stacks', +}; + +export let FontStacks = () => { + return { + template: hbs` +
Font Stacks
+ + {{#each fontFamilies as |fontFamily|}} +
{{fontFamily}}
+ +
+ {{/each}} + `, + context: { + fontFamilies: [ + '-apple-system', + 'BlinkMacSystemFont', + 'Segoe UI', + 'Roboto', + 'Oxygen-Sans', + 'Ubuntu', + 'Cantarell', + 'Helvetica Neue', + 'sans-serif', + 'monospace', + ], + }, + }; +}; diff --git a/ui/stories/theme/text-sizes.stories.js b/ui/stories/theme/text-sizes.stories.js new file mode 100644 index 00000000000..0049526d48d --- /dev/null +++ b/ui/stories/theme/text-sizes.stories.js @@ -0,0 +1,25 @@ +import hbs from 'htmlbars-inline-precompile'; + +export default { + title: 'Theme|Text Sizing', +}; + +export let TextSizing = () => { + return { + template: hbs` +
Text sizing
+
+

Large Title

+

Some prose to follow the large title. Not necessarily meant for reading.

+
+
+

Medium Title

+

Some prose to follow the large title. Not necessarily meant for reading.

+
+
+

Small Title

+

Some prose to follow the large title. Not necessarily meant for reading.

+
+ `, + }; +}; diff --git a/ui/stories/utils/delayed-array.js b/ui/stories/utils/delayed-array.js new file mode 100644 index 00000000000..f096185386d --- /dev/null +++ b/ui/stories/utils/delayed-array.js @@ -0,0 +1,20 @@ +import { A } from '@ember/array'; +import ArrayProxy from '@ember/array/proxy'; +import { next } from '@ember/runloop'; + +/** + * This is an array whose content is empty until the next + * tick, which fixes Storybook race condition rendering + * problems. + */ + +export default ArrayProxy.extend({ + init(array) { + this.set('content', A([])); + this._super(...arguments); + + next(this, () => { + this.set('content', A(array)); + }); + }, +}); diff --git a/ui/stories/utils/delayed-truth.js b/ui/stories/utils/delayed-truth.js new file mode 100644 index 00000000000..13ade50a12f --- /dev/null +++ b/ui/stories/utils/delayed-truth.js @@ -0,0 +1,19 @@ +import EmberObject from '@ember/object'; +import { next } from '@ember/runloop'; + +/** + * This has a `complete` property that turns from false + * to true in the next tick, which helps with some + * Storybook race condition rendering problems. + */ + +export default EmberObject.extend({ + init() { + this._super(...arguments); + this.set('complete', false); + + next(this, () => { + this.set('complete', true); + }); + }, +}); diff --git a/ui/testem.js b/ui/testem.js index 3015d63d24d..b182a9336d7 100644 --- a/ui/testem.js +++ b/ui/testem.js @@ -14,7 +14,6 @@ module.exports = { // --no-sandbox is needed when running Chrome inside a container process.env.CI ? '--no-sandbox' : null, '--headless', - '--disable-gpu', '--disable-dev-shm-usage', '--disable-software-rasterizer', '--mute-audio', diff --git a/ui/tests/acceptance/allocation-detail-test.js b/ui/tests/acceptance/allocation-detail-test.js index f675563bcf2..e0f700e2c54 100644 --- a/ui/tests/acceptance/allocation-detail-test.js +++ b/ui/tests/acceptance/allocation-detail-test.js @@ -3,7 +3,7 @@ import { currentURL } from '@ember/test-helpers'; import { assign } from '@ember/polyfills'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import Allocation from 'nomad-ui/tests/pages/allocations/detail'; import moment from 'moment'; @@ -141,14 +141,22 @@ module('Acceptance | allocation detail', function(hooks) { }); test('proxy task has a proxy tag', async function(assert) { + // Must create a new job as existing one has loaded and it contains the tasks + job = server.create('job', { + groupsCount: 1, + withGroupServices: true, + createAllocations: false, + }); + allocation = server.create('allocation', 'withTaskWithPorts', 'withAllocatedResources', { clientStatus: 'running', + jobId: job.id, }); - allocation.task_states.models.forEach(task => { - task.kind = 'connect-proxy:task'; - task.save(); - }); + const taskState = allocation.task_states.models.sortBy('name')[0]; + const task = server.schema.tasks.findBy({ name: taskState.name }); + task.update('kind', 'connect-proxy:task'); + task.save(); await Allocation.visit({ id: allocation.id }); @@ -211,7 +219,9 @@ module('Acceptance | allocation detail', function(hooks) { await Allocation.visit({ id: 'not-a-real-allocation' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/allocation/not-a-real-allocation', 'A request to the nonexistent allocation is made' ); diff --git a/ui/tests/acceptance/application-errors-test.js b/ui/tests/acceptance/application-errors-test.js index 773c2d8b203..ceec14f5040 100644 --- a/ui/tests/acceptance/application-errors-test.js +++ b/ui/tests/acceptance/application-errors-test.js @@ -1,7 +1,7 @@ import { currentURL, visit } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import ClientsList from 'nomad-ui/tests/pages/clients/list'; import JobsList from 'nomad-ui/tests/pages/jobs/list'; import Job from 'nomad-ui/tests/pages/jobs/detail'; diff --git a/ui/tests/acceptance/client-detail-test.js b/ui/tests/acceptance/client-detail-test.js index 42f11dd470b..511f55591d9 100644 --- a/ui/tests/acceptance/client-detail-test.js +++ b/ui/tests/acceptance/client-detail-test.js @@ -1,16 +1,17 @@ -import { currentURL } from '@ember/test-helpers'; +import { currentURL, waitUntil } from '@ember/test-helpers'; import { assign } from '@ember/polyfills'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import { formatBytes } from 'nomad-ui/helpers/format-bytes'; -import formatDuration from 'nomad-ui/utils/format-duration'; import moment from 'moment'; import ClientDetail from 'nomad-ui/tests/pages/clients/detail'; import Clients from 'nomad-ui/tests/pages/clients/list'; import Jobs from 'nomad-ui/tests/pages/jobs/list'; let node; +let managementToken; +let clientToken; const wasPreemptedFilter = allocation => !!allocation.preemptedByAllocation; @@ -22,6 +23,11 @@ module('Acceptance | client detail', function(hooks) { server.create('node', 'forceIPv4', { schedulingEligibility: 'eligible' }); node = server.db.nodes[0]; + managementToken = server.create('token'); + clientToken = server.create('token'); + + window.localStorage.nomadTokenSecret = managementToken.secretId; + // Related models server.create('agent'); server.create('job', { createAllocations: false }); @@ -55,10 +61,12 @@ module('Acceptance | client detail', function(hooks) { }); test('/clients/:id should list immediate details for the node in the title', async function(assert) { + node = server.create('node', 'forceIPv4', { schedulingEligibility: 'eligible', drain: false }); + await ClientDetail.visit({ id: node.id }); assert.ok(ClientDetail.title.includes(node.name), 'Title includes name'); - assert.ok(ClientDetail.title.includes(node.id), 'Title includes id'); + assert.ok(ClientDetail.clientId.includes(node.id), 'Title includes id'); assert.equal( ClientDetail.statusLight.objectAt(0).id, node.status, @@ -81,14 +89,6 @@ module('Acceptance | client detail', function(hooks) { ClientDetail.addressDefinition.includes(node.httpAddr), 'Address is in additional details' ); - assert.ok( - ClientDetail.drainingDefinition.includes(node.drain + ''), - 'Drain status is in additional details' - ); - assert.ok( - ClientDetail.eligibilityDefinition.includes(node.schedulingEligibility), - 'Scheduling eligibility is in additional details' - ); assert.ok( ClientDetail.datacenterDefinition.includes(node.datacenter), 'Datacenter is in additional details' @@ -328,7 +328,9 @@ module('Acceptance | client detail', function(hooks) { await ClientDetail.visit({ id: 'not-a-real-node' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/node/not-a-real-node', 'A request to the nonexistent node is made' ); @@ -445,6 +447,7 @@ module('Acceptance | client detail', function(hooks) { test('the status light indicates when the node is ineligible for scheduling', async function(assert) { node = server.create('node', { + drain: false, schedulingEligibility: 'ineligible', }); @@ -474,23 +477,19 @@ module('Acceptance | client detail', function(hooks) { await ClientDetail.visit({ id: node.id }); assert.ok( - ClientDetail.drain.deadline.includes(formatDuration(deadline)), + ClientDetail.drainDetails.deadline.includes(forceDeadline.fromNow(true)), 'Deadline is shown in a human formatted way' ); - assert.ok( - ClientDetail.drain.forcedDeadline.includes(forceDeadline.format("MMM DD, 'YY HH:mm:ss ZZ")), - 'Force deadline is shown as an absolute date' - ); - - assert.ok( - ClientDetail.drain.forcedDeadline.includes(forceDeadline.fromNow()), - 'Force deadline is shown as a relative date' + assert.equal( + ClientDetail.drainDetails.deadlineTooltip, + forceDeadline.format("MMM DD, 'YY HH:mm:ss ZZ"), + 'The tooltip for deadline shows the force deadline as an absolute date' ); assert.ok( - ClientDetail.drain.ignoreSystemJobs.endsWith('No'), - 'Ignore System Jobs state is shown' + ClientDetail.drainDetails.drainSystemJobsText.endsWith('Yes'), + 'Drain System Jobs state is shown' ); }); @@ -509,19 +508,16 @@ module('Acceptance | client detail', function(hooks) { await ClientDetail.visit({ id: node.id }); + assert.notOk(ClientDetail.drainDetails.durationIsShown, 'Duration is omitted'); + assert.ok( - ClientDetail.drain.deadline.includes('No deadline'), + ClientDetail.drainDetails.deadline.includes('No deadline'), 'The value for Deadline is "no deadline"' ); - assert.notOk( - ClientDetail.drain.hasForcedDeadline, - 'Forced deadline is not shown since there is no forced deadline' - ); - assert.ok( - ClientDetail.drain.ignoreSystemJobs.endsWith('Yes'), - 'Ignore System Jobs state is shown' + ClientDetail.drainDetails.drainSystemJobsText.endsWith('No'), + 'Drain System Jobs state is shown' ); }); @@ -540,19 +536,370 @@ module('Acceptance | client detail', function(hooks) { await ClientDetail.visit({ id: node.id }); - assert.equal(ClientDetail.drain.badgeLabel, 'Forced Drain', 'Forced Drain badge is described'); - assert.ok(ClientDetail.drain.badgeIsDangerous, 'Forced Drain is shown in a red badge'); - - assert.notOk( - ClientDetail.drain.hasForcedDeadline, - 'Forced deadline is not shown since there is no forced deadline' + assert.ok( + ClientDetail.drainDetails.forceDrainText.endsWith('Yes'), + 'Forced Drain is described' ); + assert.ok(ClientDetail.drainDetails.duration.includes('--'), 'Duration is shown but unset'); + + assert.ok(ClientDetail.drainDetails.deadline.includes('--'), 'Deadline is shown but unset'); + assert.ok( - ClientDetail.drain.ignoreSystemJobs.endsWith('No'), - 'Ignore System Jobs state is shown' + ClientDetail.drainDetails.drainSystemJobsText.endsWith('Yes'), + 'Drain System Jobs state is shown' ); }); + + test('toggling node eligibility disables the toggle and sends the correct POST request', async function(assert) { + node = server.create('node', { + drain: false, + schedulingEligibility: 'eligible', + }); + + server.pretender.post('/v1/node/:id/eligibility', () => [200, {}, ''], true); + + await ClientDetail.visit({ id: node.id }); + assert.ok(ClientDetail.eligibilityToggle.isActive); + + ClientDetail.eligibilityToggle.toggle(); + await waitUntil(() => server.pretender.handledRequests.findBy('method', 'POST')); + + assert.ok(ClientDetail.eligibilityToggle.isDisabled); + server.pretender.resolve(server.pretender.requestReferences[0].request); + + assert.notOk(ClientDetail.eligibilityToggle.isActive); + assert.notOk(ClientDetail.eligibilityToggle.isDisabled); + + const request = server.pretender.handledRequests.findBy('method', 'POST'); + assert.equal(request.url, `/v1/node/${node.id}/eligibility`); + assert.deepEqual(JSON.parse(request.requestBody), { + NodeID: node.id, + Eligibility: 'ineligible', + }); + + ClientDetail.eligibilityToggle.toggle(); + await waitUntil(() => server.pretender.handledRequests.filterBy('method', 'POST').length === 2); + server.pretender.resolve(server.pretender.requestReferences[0].request); + + assert.ok(ClientDetail.eligibilityToggle.isActive); + const request2 = server.pretender.handledRequests.filterBy('method', 'POST')[1]; + + assert.equal(request2.url, `/v1/node/${node.id}/eligibility`); + assert.deepEqual(JSON.parse(request2.requestBody), { + NodeID: node.id, + Eligibility: 'eligible', + }); + }); + + test('starting a drain sends the correct POST request', async function(assert) { + let request; + + node = server.create('node', { + drain: false, + schedulingEligibility: 'eligible', + }); + + await ClientDetail.visit({ id: node.id }); + await ClientDetail.drainPopover.toggle(); + await ClientDetail.drainPopover.submit(); + + request = server.pretender.handledRequests.filterBy('method', 'POST').pop(); + + assert.equal(request.url, `/v1/node/${node.id}/drain`); + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: 0, + IgnoreSystemJobs: false, + }, + }, + 'Drain with default settings' + ); + + await ClientDetail.drainPopover.toggle(); + await ClientDetail.drainPopover.deadlineToggle.toggle(); + await ClientDetail.drainPopover.submit(); + + request = server.pretender.handledRequests.filterBy('method', 'POST').pop(); + + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: 60 * 60 * 1000 * 1000000, + IgnoreSystemJobs: false, + }, + }, + 'Drain with deadline toggled' + ); + + await ClientDetail.drainPopover.toggle(); + await ClientDetail.drainPopover.deadlineOptions.open(); + await ClientDetail.drainPopover.deadlineOptions.options[1].choose(); + await ClientDetail.drainPopover.submit(); + + request = server.pretender.handledRequests.filterBy('method', 'POST').pop(); + + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: 4 * 60 * 60 * 1000 * 1000000, + IgnoreSystemJobs: false, + }, + }, + 'Drain with non-default preset deadline set' + ); + + await ClientDetail.drainPopover.toggle(); + await ClientDetail.drainPopover.deadlineOptions.open(); + const optionsCount = ClientDetail.drainPopover.deadlineOptions.options.length; + await ClientDetail.drainPopover.deadlineOptions.options.objectAt(optionsCount - 1).choose(); + await ClientDetail.drainPopover.setCustomDeadline('1h40m20s'); + await ClientDetail.drainPopover.submit(); + + request = server.pretender.handledRequests.filterBy('method', 'POST').pop(); + + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: ((1 * 60 + 40) * 60 + 20) * 1000 * 1000000, + IgnoreSystemJobs: false, + }, + }, + 'Drain with custom deadline set' + ); + + await ClientDetail.drainPopover.toggle(); + await ClientDetail.drainPopover.deadlineToggle.toggle(); + await ClientDetail.drainPopover.forceDrainToggle.toggle(); + await ClientDetail.drainPopover.submit(); + + request = server.pretender.handledRequests.filterBy('method', 'POST').pop(); + + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: -1, + IgnoreSystemJobs: false, + }, + }, + 'Drain with force set' + ); + + await ClientDetail.drainPopover.toggle(); + await ClientDetail.drainPopover.systemJobsToggle.toggle(); + await ClientDetail.drainPopover.submit(); + + request = server.pretender.handledRequests.filterBy('method', 'POST').pop(); + + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: -1, + IgnoreSystemJobs: true, + }, + }, + 'Drain system jobs unset' + ); + }); + + test('the drain popover cancel button closes the popover', async function(assert) { + node = server.create('node', { + drain: false, + schedulingEligibility: 'eligible', + }); + + await ClientDetail.visit({ id: node.id }); + assert.notOk(ClientDetail.drainPopover.isOpen); + + await ClientDetail.drainPopover.toggle(); + assert.ok(ClientDetail.drainPopover.isOpen); + + await ClientDetail.drainPopover.cancel(); + assert.notOk(ClientDetail.drainPopover.isOpen); + assert.equal(server.pretender.handledRequests.filterBy('method', 'POST'), 0); + }); + + test('toggling eligibility is disabled while a drain is active', async function(assert) { + node = server.create('node', { + drain: true, + schedulingEligibility: 'ineligible', + }); + + await ClientDetail.visit({ id: node.id }); + assert.ok(ClientDetail.eligibilityToggle.isDisabled); + }); + + test('stopping a drain sends the correct POST request', async function(assert) { + node = server.create('node', { + drain: true, + schedulingEligibility: 'ineligible', + }); + + await ClientDetail.visit({ id: node.id }); + assert.ok(ClientDetail.stopDrainIsPresent); + + await ClientDetail.stopDrain.idle(); + await ClientDetail.stopDrain.confirm(); + + const request = server.pretender.handledRequests.findBy('method', 'POST'); + assert.equal(request.url, `/v1/node/${node.id}/drain`); + assert.deepEqual(JSON.parse(request.requestBody), { + NodeID: node.id, + DrainSpec: null, + }); + }); + + test('when a drain is active, the "drain" popover is labeled as the "update" popover', async function(assert) { + node = server.create('node', { + drain: true, + schedulingEligibility: 'ineligible', + }); + + await ClientDetail.visit({ id: node.id }); + assert.equal(ClientDetail.drainPopover.label, 'Update Drain'); + }); + + test('forcing a drain sends the correct POST request', async function(assert) { + node = server.create('node', { + drain: true, + schedulingEligibility: 'ineligible', + drainStrategy: { + Deadline: 0, + IgnoreSystemJobs: true, + }, + }); + + await ClientDetail.visit({ id: node.id }); + await ClientDetail.drainDetails.force.idle(); + await ClientDetail.drainDetails.force.confirm(); + + const request = server.pretender.handledRequests.findBy('method', 'POST'); + assert.equal(request.url, `/v1/node/${node.id}/drain`); + assert.deepEqual(JSON.parse(request.requestBody), { + NodeID: node.id, + DrainSpec: { + Deadline: -1, + IgnoreSystemJobs: true, + }, + }); + }); + + test('when stopping a drain fails, an error is shown', async function(assert) { + node = server.create('node', { + drain: true, + schedulingEligibility: 'ineligible', + }); + + server.pretender.post('/v1/node/:id/drain', () => [500, {}, '']); + + await ClientDetail.visit({ id: node.id }); + await ClientDetail.stopDrain.idle(); + await ClientDetail.stopDrain.confirm(); + + assert.ok(ClientDetail.stopDrainError.isPresent); + assert.ok(ClientDetail.stopDrainError.title.includes('Stop Drain Error')); + + await ClientDetail.stopDrainError.dismiss(); + assert.notOk(ClientDetail.stopDrainError.isPresent); + }); + + test('when starting a drain fails, an error message is shown', async function(assert) { + node = server.create('node', { + drain: false, + schedulingEligibility: 'eligible', + }); + + server.pretender.post('/v1/node/:id/drain', () => [500, {}, '']); + + await ClientDetail.visit({ id: node.id }); + await ClientDetail.drainPopover.toggle(); + await ClientDetail.drainPopover.submit(); + + assert.ok(ClientDetail.drainError.isPresent); + assert.ok(ClientDetail.drainError.title.includes('Drain Error')); + + await ClientDetail.drainError.dismiss(); + assert.notOk(ClientDetail.drainError.isPresent); + }); + + test('when updating a drain fails, an error message is shown', async function(assert) { + node = server.create('node', { + drain: true, + schedulingEligibility: 'ineligible', + }); + + server.pretender.post('/v1/node/:id/drain', () => [500, {}, '']); + + await ClientDetail.visit({ id: node.id }); + await ClientDetail.drainPopover.toggle(); + await ClientDetail.drainPopover.submit(); + + assert.ok(ClientDetail.drainError.isPresent); + assert.ok(ClientDetail.drainError.title.includes('Drain Error')); + + await ClientDetail.drainError.dismiss(); + assert.notOk(ClientDetail.drainError.isPresent); + }); + + test('when toggling eligibility fails, an error message is shown', async function(assert) { + node = server.create('node', { + drain: false, + schedulingEligibility: 'eligible', + }); + + server.pretender.post('/v1/node/:id/eligibility', () => [500, {}, '']); + + await ClientDetail.visit({ id: node.id }); + await ClientDetail.eligibilityToggle.toggle(); + + assert.ok(ClientDetail.eligibilityError.isPresent); + assert.ok(ClientDetail.eligibilityError.title.includes('Eligibility Error')); + + await ClientDetail.eligibilityError.dismiss(); + assert.notOk(ClientDetail.eligibilityError.isPresent); + }); + + test('when navigating away from a client that has an error message to another client, the error is not shown', async function(assert) { + node = server.create('node', { + drain: false, + schedulingEligibility: 'eligible', + }); + + const node2 = server.create('node'); + + server.pretender.post('/v1/node/:id/eligibility', () => [500, {}, '']); + + await ClientDetail.visit({ id: node.id }); + await ClientDetail.eligibilityToggle.toggle(); + + assert.ok(ClientDetail.eligibilityError.isPresent); + assert.ok(ClientDetail.eligibilityError.title.includes('Eligibility Error')); + + await ClientDetail.visit({ id: node2.id }); + + assert.notOk(ClientDetail.eligibilityError.isPresent); + }); + + test('toggling eligibility and node drain are disabled when the active ACL token does not permit node write', async function(assert) { + window.localStorage.nomadTokenSecret = clientToken.secretId; + + await ClientDetail.visit({ id: node.id }); + assert.ok(ClientDetail.eligibilityToggle.isDisabled); + assert.ok(ClientDetail.drainPopover.isDisabled); + }); }); module('Acceptance | client detail (multi-namespace)', function(hooks) { diff --git a/ui/tests/acceptance/clients-list-test.js b/ui/tests/acceptance/clients-list-test.js index 6b3a1e69c62..4a1fe551478 100644 --- a/ui/tests/acceptance/clients-list-test.js +++ b/ui/tests/acceptance/clients-list-test.js @@ -1,7 +1,7 @@ -import { currentURL } from '@ember/test-helpers'; +import { currentURL, settled } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import ClientsList from 'nomad-ui/tests/pages/clients/list'; module('Acceptance | clients list', function(hooks) { @@ -41,13 +41,17 @@ module('Acceptance | clients list', function(hooks) { assert.equal(nodeRow.id, node.id.split('-')[0], 'ID'); assert.equal(nodeRow.name, node.name, 'Name'); - assert.equal(nodeRow.state.text, 'draining', 'Combined status, draining, and eligbility'); + assert.equal( + nodeRow.compositeStatus.text, + 'draining', + 'Combined status, draining, and eligbility' + ); assert.equal(nodeRow.address, node.httpAddr); assert.equal(nodeRow.datacenter, node.datacenter, 'Datacenter'); assert.equal(nodeRow.allocations, allocations.length, '# Allocations'); }); - test('client status, draining, and eligibility are collapsed into one column', async function(assert) { + test('client status, draining, and eligibility are collapsed into one column that stays sorted', async function(assert) { server.createList('agent', 1); server.create('node', { @@ -81,20 +85,47 @@ module('Acceptance | clients list', function(hooks) { await ClientsList.visit(); - ClientsList.nodes[0].state.as(readyClient => { + ClientsList.nodes[0].compositeStatus.as(readyClient => { assert.equal(readyClient.text, 'ready'); assert.ok(readyClient.isUnformatted, 'expected no status class'); assert.equal(readyClient.tooltip, 'ready / not draining / eligible'); }); - assert.equal(ClientsList.nodes[1].state.text, 'initializing'); - assert.equal(ClientsList.nodes[2].state.text, 'down'); - - assert.equal(ClientsList.nodes[3].state.text, 'ineligible'); - assert.ok(ClientsList.nodes[3].state.isWarning, 'expected warning class'); - - assert.equal(ClientsList.nodes[4].state.text, 'draining'); - assert.ok(ClientsList.nodes[4].state.isInfo, 'expected info class'); + assert.equal(ClientsList.nodes[1].compositeStatus.text, 'initializing'); + assert.equal(ClientsList.nodes[2].compositeStatus.text, 'down'); + + assert.equal(ClientsList.nodes[3].compositeStatus.text, 'ineligible'); + assert.ok(ClientsList.nodes[3].compositeStatus.isWarning, 'expected warning class'); + + assert.equal(ClientsList.nodes[4].compositeStatus.text, 'draining'); + assert.ok(ClientsList.nodes[4].compositeStatus.isInfo, 'expected info class'); + + await ClientsList.sortBy('compositeStatus'); + + assert.deepEqual(ClientsList.nodes.mapBy('compositeStatus.text'), [ + 'ready', + 'initializing', + 'ineligible', + 'draining', + 'down', + ]); + + // Simulate a client state change arriving through polling + let readyClient = this.owner + .lookup('service:store') + .peekAll('node') + .findBy('modifyIndex', 4); + readyClient.set('schedulingEligibility', 'ineligible'); + + await settled(); + + assert.deepEqual(ClientsList.nodes.mapBy('compositeStatus.text'), [ + 'initializing', + 'ineligible', + 'ineligible', + 'draining', + 'down', + ]); }); test('each client should link to the client detail page', async function(assert) { diff --git a/ui/tests/acceptance/job-allocations-test.js b/ui/tests/acceptance/job-allocations-test.js index d9b846b2577..011cbf8b875 100644 --- a/ui/tests/acceptance/job-allocations-test.js +++ b/ui/tests/acceptance/job-allocations-test.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import Allocations from 'nomad-ui/tests/pages/jobs/job/allocations'; let job; @@ -105,7 +105,9 @@ module('Acceptance | job allocations', function(hooks) { await Allocations.visit({ id: 'not-a-real-job' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/job/not-a-real-job', 'A request to the nonexistent job is made' ); diff --git a/ui/tests/acceptance/job-definition-test.js b/ui/tests/acceptance/job-definition-test.js index 280fe753932..973fb5a5f75 100644 --- a/ui/tests/acceptance/job-definition-test.js +++ b/ui/tests/acceptance/job-definition-test.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import setupCodeMirror from 'nomad-ui/tests/helpers/codemirror'; import Definition from 'nomad-ui/tests/pages/jobs/job/definition'; @@ -79,7 +79,9 @@ module('Acceptance | job definition', function(hooks) { await Definition.visit({ id: 'not-a-real-job' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/job/not-a-real-job', 'A request to the nonexistent job is made' ); diff --git a/ui/tests/acceptance/job-deployments-test.js b/ui/tests/acceptance/job-deployments-test.js index 5a9107d23d8..e683c1c2c76 100644 --- a/ui/tests/acceptance/job-deployments-test.js +++ b/ui/tests/acceptance/job-deployments-test.js @@ -2,7 +2,7 @@ import { currentURL } from '@ember/test-helpers'; import { get } from '@ember/object'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import moment from 'moment'; import Deployments from 'nomad-ui/tests/pages/jobs/job/deployments'; @@ -220,7 +220,9 @@ module('Acceptance | job deployments', function(hooks) { await Deployments.visit({ id: 'not-a-real-job' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/job/not-a-real-job', 'A request to the nonexistent job is made' ); diff --git a/ui/tests/acceptance/job-detail-test.js b/ui/tests/acceptance/job-detail-test.js index 9ed22aaa040..68e820f32c9 100644 --- a/ui/tests/acceptance/job-detail-test.js +++ b/ui/tests/acceptance/job-detail-test.js @@ -2,7 +2,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; import { selectChoose } from 'ember-power-select/test-support'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import moduleForJob from 'nomad-ui/tests/helpers/module-for-job'; import JobDetail from 'nomad-ui/tests/pages/jobs/detail'; import JobsList from 'nomad-ui/tests/pages/jobs/list'; @@ -47,7 +47,9 @@ moduleForJob( await JobDetail.visit({ id: 'not-a-real-job' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/job/not-a-real-job', 'A request to the nonexistent job is made' ); diff --git a/ui/tests/acceptance/job-evaluations-test.js b/ui/tests/acceptance/job-evaluations-test.js index 71ba22a4551..1bc3a67e670 100644 --- a/ui/tests/acceptance/job-evaluations-test.js +++ b/ui/tests/acceptance/job-evaluations-test.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import Evaluations from 'nomad-ui/tests/pages/jobs/job/evaluations'; let job; @@ -54,7 +54,9 @@ module('Acceptance | job evaluations', function(hooks) { await Evaluations.visit({ id: 'not-a-real-job' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/job/not-a-real-job', 'A request to the nonexistent job is made' ); diff --git a/ui/tests/acceptance/job-run-test.js b/ui/tests/acceptance/job-run-test.js index f5c5e9d189a..fcdb0a2d8e5 100644 --- a/ui/tests/acceptance/job-run-test.js +++ b/ui/tests/acceptance/job-run-test.js @@ -2,13 +2,15 @@ import { currentURL } from '@ember/test-helpers'; import { assign } from '@ember/polyfills'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import setupCodeMirror from 'nomad-ui/tests/helpers/codemirror'; import JobRun from 'nomad-ui/tests/pages/jobs/run'; const newJobName = 'new-job'; const newJobTaskGroupName = 'redis'; +let managementToken, clientToken; + const jsonJob = overrides => { return JSON.stringify( assign( @@ -45,6 +47,11 @@ module('Acceptance | job run', function(hooks) { hooks.beforeEach(function() { // Required for placing allocations (a result of creating jobs) server.create('node'); + + managementToken = server.create('token'); + clientToken = server.create('token'); + + window.localStorage.nomadTokenSecret = managementToken.secretId; }); test('visiting /jobs/run', async function(assert) { @@ -86,4 +93,11 @@ module('Acceptance | job run', function(hooks) { `Redirected to the job overview page for ${newJobName} and switched the namespace to ${newNamespace}` ); }); + + test('when the user doesn’t have permission to run a job, redirects to the job overview page', async function(assert) { + window.localStorage.nomadTokenSecret = clientToken.secretId; + + await JobRun.visit(); + assert.equal(currentURL(), '/jobs'); + }); }); diff --git a/ui/tests/acceptance/job-versions-test.js b/ui/tests/acceptance/job-versions-test.js index 6eba598b188..7990437be45 100644 --- a/ui/tests/acceptance/job-versions-test.js +++ b/ui/tests/acceptance/job-versions-test.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import Versions from 'nomad-ui/tests/pages/jobs/job/versions'; import moment from 'moment'; @@ -40,7 +40,9 @@ module('Acceptance | job versions', function(hooks) { await Versions.visit({ id: 'not-a-real-job' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/job/not-a-real-job', 'A request to the nonexistent job is made' ); diff --git a/ui/tests/acceptance/jobs-list-test.js b/ui/tests/acceptance/jobs-list-test.js index 1b1a57287f6..31b3042dee1 100644 --- a/ui/tests/acceptance/jobs-list-test.js +++ b/ui/tests/acceptance/jobs-list-test.js @@ -1,9 +1,11 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import JobsList from 'nomad-ui/tests/pages/jobs/list'; +let managementToken, clientToken; + module('Acceptance | jobs list', function(hooks) { setupApplicationTest(hooks); setupMirage(hooks); @@ -11,6 +13,11 @@ module('Acceptance | jobs list', function(hooks) { hooks.beforeEach(function() { // Required for placing allocations (a result of creating jobs) server.create('node'); + + managementToken = server.create('token'); + clientToken = server.create('token'); + + window.localStorage.nomadTokenSecret = managementToken.secretId; }); test('visiting /jobs', async function(assert) { @@ -62,11 +69,76 @@ module('Acceptance | jobs list', function(hooks) { test('the new job button transitions to the new job page', async function(assert) { await JobsList.visit(); - await JobsList.runJob(); + await JobsList.runJobButton.click(); assert.equal(currentURL(), '/jobs/run'); }); + test('the job run button is disabled when the token lacks permission', async function(assert) { + window.localStorage.nomadTokenSecret = clientToken.secretId; + await JobsList.visit(); + + assert.ok(JobsList.runJobButton.isDisabled); + + await JobsList.runJobButton.click(); + assert.equal(currentURL(), '/jobs'); + }); + + test('the job run button state can change between namespaces', async function(assert) { + server.createList('namespace', 2); + const job1 = server.create('job', { namespaceId: server.db.namespaces[0].id }); + const job2 = server.create('job', { namespaceId: server.db.namespaces[1].id }); + + window.localStorage.nomadTokenSecret = clientToken.secretId; + + const policy = server.create('policy', { + id: 'something', + name: 'something', + rulesJSON: { + Namespaces: [ + { + Name: job1.namespaceId, + Capabilities: ['list-jobs', 'submit-job'], + }, + { + Name: job2.namespaceId, + Capabilities: ['list-jobs'], + }, + ], + }, + }); + + clientToken.policyIds = [policy.id]; + clientToken.save(); + + await JobsList.visit(); + assert.notOk(JobsList.runJobButton.isDisabled); + + const secondNamespace = server.db.namespaces[1]; + await JobsList.visit({ namespace: secondNamespace.id }); + assert.ok(JobsList.runJobButton.isDisabled); + }); + + test('the anonymous policy is fetched to check whether to show the job run button', async function(assert) { + window.localStorage.removeItem('nomadTokenSecret'); + + server.create('policy', { + id: 'anonymous', + name: 'anonymous', + rulesJSON: { + Namespaces: [ + { + Name: 'default', + Capabilities: ['list-jobs', 'submit-job'], + }, + ], + }, + }); + + await JobsList.visit(); + assert.notOk(JobsList.runJobButton.isDisabled); + }); + test('when there are no jobs, there is an empty message', async function(assert) { await JobsList.visit(); diff --git a/ui/tests/acceptance/namespaces-test.js b/ui/tests/acceptance/namespaces-test.js index ef132e922ff..812b136078e 100644 --- a/ui/tests/acceptance/namespaces-test.js +++ b/ui/tests/acceptance/namespaces-test.js @@ -1,6 +1,6 @@ import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import { selectChoose } from 'ember-power-select/test-support'; import JobsList from 'nomad-ui/tests/pages/jobs/list'; diff --git a/ui/tests/acceptance/regions-test.js b/ui/tests/acceptance/regions-test.js index 994199b512f..2bfeb53f2df 100644 --- a/ui/tests/acceptance/regions-test.js +++ b/ui/tests/acceptance/regions-test.js @@ -2,7 +2,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; import { selectChoose } from 'ember-power-select/test-support'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import JobsList from 'nomad-ui/tests/pages/jobs/list'; import ClientsList from 'nomad-ui/tests/pages/clients/list'; import PageLayout from 'nomad-ui/tests/pages/layout'; @@ -147,6 +147,7 @@ module('Acceptance | regions (many)', function(hooks) { }); test('when the region is not the default region, all api requests include the region query param', async function(assert) { + window.localStorage.removeItem('nomadTokenSecret'); const region = server.db.regions[1].id; await JobsList.visit({ region }); @@ -154,7 +155,12 @@ module('Acceptance | regions (many)', function(hooks) { await JobsList.jobs.objectAt(0).clickRow(); await PageLayout.gutter.visitClients(); await PageLayout.gutter.visitServers(); - const [regionsRequest, defaultRegionRequest, ...appRequests] = server.pretender.handledRequests; + const [ + , + regionsRequest, + defaultRegionRequest, + ...appRequests + ] = server.pretender.handledRequests; assert.notOk( regionsRequest.url.includes('region='), diff --git a/ui/tests/acceptance/server-detail-test.js b/ui/tests/acceptance/server-detail-test.js index e38c38df818..c31f7cb1b6e 100644 --- a/ui/tests/acceptance/server-detail-test.js +++ b/ui/tests/acceptance/server-detail-test.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import ServerDetail from 'nomad-ui/tests/pages/servers/detail'; let agent; diff --git a/ui/tests/acceptance/servers-list-test.js b/ui/tests/acceptance/servers-list-test.js index 85ed0ffd607..8e588b87378 100644 --- a/ui/tests/acceptance/servers-list-test.js +++ b/ui/tests/acceptance/servers-list-test.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import { findLeader } from '../../mirage/config'; import ServersList from 'nomad-ui/tests/pages/servers/list'; diff --git a/ui/tests/acceptance/task-detail-test.js b/ui/tests/acceptance/task-detail-test.js index 980373e7b78..febfcc317f7 100644 --- a/ui/tests/acceptance/task-detail-test.js +++ b/ui/tests/acceptance/task-detail-test.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import Task from 'nomad-ui/tests/pages/allocations/task/detail'; import moment from 'moment'; @@ -145,7 +145,9 @@ module('Acceptance | task detail', function(hooks) { await Task.visit({ id: 'not-a-real-allocation', name: task.name }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/allocation/not-a-real-allocation', 'A request to the nonexistent allocation is made' ); @@ -317,12 +319,13 @@ module('Acceptance | proxy task detail', function(hooks) { server.create('node'); server.create('job', { createAllocations: false }); allocation = server.create('allocation', 'withTaskWithPorts', { clientStatus: 'running' }); - task = allocation.task_states.models[0]; - task.kind = 'connect-proxy:task'; + const taskState = allocation.task_states.models[0]; + const task = server.schema.tasks.findBy({ name: taskState.name }); + task.update('kind', 'connect-proxy:task'); task.save(); - await Task.visit({ id: allocation.id, name: task.name }); + await Task.visit({ id: allocation.id, name: taskState.name }); }); test('a proxy tag is shown', async function(assert) { diff --git a/ui/tests/acceptance/task-group-detail-test.js b/ui/tests/acceptance/task-group-detail-test.js index 0ec64dd5410..44512450655 100644 --- a/ui/tests/acceptance/task-group-detail-test.js +++ b/ui/tests/acceptance/task-group-detail-test.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import { formatBytes } from 'nomad-ui/helpers/format-bytes'; import TaskGroup from 'nomad-ui/tests/pages/jobs/job/task-group'; import JobsList from 'nomad-ui/tests/pages/jobs/list'; @@ -225,7 +225,9 @@ module('Acceptance | task group detail', function(hooks) { await TaskGroup.visit({ id: 'not-a-real-job', name: 'not-a-real-task-group' }); assert.equal( - server.pretender.handledRequests.findBy('status', 404).url, + server.pretender.handledRequests + .filter(request => !request.url.includes('policy')) + .findBy('status', 404).url, '/v1/job/not-a-real-job', 'A request to the nonexistent job is made' ); diff --git a/ui/tests/acceptance/task-logs-test.js b/ui/tests/acceptance/task-logs-test.js index 4bacd989854..12a38ae2a03 100644 --- a/ui/tests/acceptance/task-logs-test.js +++ b/ui/tests/acceptance/task-logs-test.js @@ -2,7 +2,7 @@ import { currentURL } from '@ember/test-helpers'; import { run } from '@ember/runloop'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import TaskLogs from 'nomad-ui/tests/pages/allocations/task/logs'; let allocation; diff --git a/ui/tests/acceptance/token-test.js b/ui/tests/acceptance/token-test.js index 7d78de9985a..19e4d3870b1 100644 --- a/ui/tests/acceptance/token-test.js +++ b/ui/tests/acceptance/token-test.js @@ -1,7 +1,7 @@ import { find } from '@ember/test-helpers'; import { module, skip, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import Tokens from 'nomad-ui/tests/pages/settings/tokens'; import Jobs from 'nomad-ui/tests/pages/jobs/list'; import JobDetail from 'nomad-ui/tests/pages/jobs/detail'; diff --git a/ui/tests/helpers/module-for-job.js b/ui/tests/helpers/module-for-job.js index a8ad066900b..f5e069cf745 100644 --- a/ui/tests/helpers/module-for-job.js +++ b/ui/tests/helpers/module-for-job.js @@ -1,7 +1,7 @@ import { currentURL } from '@ember/test-helpers'; import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; -import setupMirage from 'ember-cli-mirage/test-support/setup-mirage'; +import { setupMirage } from 'ember-cli-mirage/test-support'; import JobDetail from 'nomad-ui/tests/pages/jobs/detail'; export default function moduleForJob(title, context, jobFactory, additionalTests) { diff --git a/ui/tests/helpers/setup-ability.js b/ui/tests/helpers/setup-ability.js new file mode 100644 index 00000000000..41f56f3a71f --- /dev/null +++ b/ui/tests/helpers/setup-ability.js @@ -0,0 +1,9 @@ +export default ability => hooks => { + hooks.beforeEach(function() { + this.ability = this.owner.lookup(`ability:${ability}`); + }); + + hooks.afterEach(function() { + delete this.ability; + }); +}; diff --git a/ui/tests/integration/attributes-table-test.js b/ui/tests/integration/attributes-table-test.js index cc95f80a032..34044dd512f 100644 --- a/ui/tests/integration/attributes-table-test.js +++ b/ui/tests/integration/attributes-table-test.js @@ -32,7 +32,7 @@ module('Integration | Component | attributes table', function(hooks) { const rowsCount = Object.keys(flatten(commonAttributes)).length; assert.equal( - this.$('[data-test-attributes-section]').has('[data-test-value]').length, + this.element.querySelectorAll('[data-test-attributes-section] [data-test-value]').length, rowsCount, `Table has ${rowsCount} rows with values` ); diff --git a/ui/tests/integration/list-pagination-test.js b/ui/tests/integration/list-pagination-test.js index 94c12788da4..d6a48d0e47c 100644 --- a/ui/tests/integration/list-pagination-test.js +++ b/ui/tests/integration/list-pagination-test.js @@ -160,35 +160,6 @@ module('Integration | Component | list pagination', function(hooks) { ); }); - // when there are no items in source - test('when there are no items in source', async function(assert) { - this.set('source', []); - await render(hbs` - {{#list-pagination source=source as |p|}} - {{p.currentPage}} of {{p.totalPages}} - {{#p.first}}first{{/p.first}} - {{#p.prev}}prev{{/p.prev}} - {{#each p.pageLinks as |link|}} - {{link.pageNumber}} - {{/each}} - {{#p.next}}next{{/p.next}} - {{#p.last}}last{{/p.last}} - - {{#each p.list as |item|}} -
{{item}}
- {{/each}} - {{else}} -
Empty State
- {{/list-pagination}} - `); - - assert.ok( - !findAll('.page-info, .first, .prev, .link, .next, .last, .item').length, - 'Nothing in the yield renders' - ); - assert.ok(findAll('.empty-state').length, 'Empty state is rendered'); - }); - // when there is less pages than the total spread amount test('when there is less pages than the total spread amount', async function(assert) { this.setProperties({ diff --git a/ui/tests/integration/list-table-test.js b/ui/tests/integration/list-table-test.js index d039555a036..be1b835b484 100644 --- a/ui/tests/integration/list-table-test.js +++ b/ui/tests/integration/list-table-test.js @@ -1,7 +1,7 @@ import { findAll, find, render } from '@ember/test-helpers'; import { module, skip, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; -import { faker } from 'ember-cli-mirage'; +import faker from 'nomad-ui/mirage/faker'; import hbs from 'htmlbars-inline-precompile'; module('Integration | Component | list table', function(hooks) { @@ -59,31 +59,10 @@ module('Integration | Component | list table', function(hooks) { // list-table is not responsible for sorting, only dispatching sort events. The table is still // rendered in index-order. this.get('source').forEach((item, index) => { - const $item = this.$(`.item:eq(${index})`); - assert.equal( - $item - .find('td:eq(0)') - .text() - .trim(), - item.firstName, - 'First name' - ); - assert.equal( - $item - .find('td:eq(1)') - .text() - .trim(), - item.lastName, - 'Last name' - ); - assert.equal( - $item - .find('td:eq(2)') - .text() - .trim(), - item.age, - 'Age' - ); + const $item = this.element.querySelectorAll('.item')[index]; + assert.equal($item.querySelectorAll('td')[0].innerHTML.trim(), item.firstName, 'First name'); + assert.equal($item.querySelectorAll('td')[1].innerHTML.trim(), item.lastName, 'Last name'); + assert.equal($item.querySelectorAll('td')[2].innerHTML.trim(), item.age, 'Age'); }); }); diff --git a/ui/tests/integration/popover-menu-test.js b/ui/tests/integration/popover-menu-test.js new file mode 100644 index 00000000000..8a12b5e5f95 --- /dev/null +++ b/ui/tests/integration/popover-menu-test.js @@ -0,0 +1,115 @@ +import { click } from '@ember/test-helpers'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; +import { create } from 'ember-cli-page-object'; +import popoverMenuPageObject from 'nomad-ui/tests/pages/components/popover-menu'; + +const PopoverMenu = create(popoverMenuPageObject()); + +module('Integration | Component | popover-menu', function(hooks) { + setupRenderingTest(hooks); + + const commonProperties = overrides => + Object.assign( + { + triggerClass: '', + label: 'Trigger Label', + }, + overrides + ); + + const commonTemplate = hbs` + {{#popover-menu + isOpen=isOpen + label=label + triggerClass=triggerClass as |m|}} +

This is a heading

+ + + {{/popover-menu}} + `; + + test('presents as a button with a chevron-down icon', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + + assert.ok(PopoverMenu.isPresent); + assert.ok(PopoverMenu.labelHasIcon); + assert.notOk(PopoverMenu.menu.isOpen); + assert.equal(PopoverMenu.label, props.label); + }); + + test('clicking the trigger button toggles the popover menu', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + assert.notOk(PopoverMenu.menu.isOpen); + + await PopoverMenu.toggle(); + + assert.ok(PopoverMenu.menu.isOpen); + }); + + test('the trigger gets the triggerClass prop assigned as a class', async function(assert) { + const specialClass = 'is-special'; + const props = commonProperties({ triggerClass: specialClass }); + this.setProperties(props); + await this.render(commonTemplate); + + assert.dom('[data-test-popover-trigger]').hasClass('is-special'); + }); + + test('pressing DOWN ARROW when the trigger is focused opens the popover menu', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + assert.notOk(PopoverMenu.menu.isOpen); + + await PopoverMenu.focus(); + await PopoverMenu.downArrow(); + + assert.ok(PopoverMenu.menu.isOpen); + }); + + test('pressing TAB when the trigger button is focused and the menu is open focuses the first focusable element in the popover menu', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + + await PopoverMenu.focus(); + await PopoverMenu.downArrow(); + + assert.dom('[data-test-popover-trigger]').isFocused(); + + await PopoverMenu.focusNext(); + + assert.dom('#mock-input-for-test').isFocused(); + }); + + test('pressing ESC when the popover menu is open closes the menu and returns focus to the trigger button', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + + await PopoverMenu.toggle(); + assert.ok(PopoverMenu.menu.isOpen); + + await PopoverMenu.esc(); + + assert.notOk(PopoverMenu.menu.isOpen); + }); + + test('the ember-basic-dropdown object is yielded as context, including the close action', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + + await PopoverMenu.toggle(); + assert.ok(PopoverMenu.menu.isOpen); + + await click('#mock-button-for-test'); + assert.notOk(PopoverMenu.menu.isOpen); + }); +}); diff --git a/ui/tests/integration/toggle-test.js b/ui/tests/integration/toggle-test.js new file mode 100644 index 00000000000..e4ff27f3f2d --- /dev/null +++ b/ui/tests/integration/toggle-test.js @@ -0,0 +1,89 @@ +import { find, settled } from '@ember/test-helpers'; +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; +import sinon from 'sinon'; +import { create } from 'ember-cli-page-object'; +import togglePageObject from 'nomad-ui/tests/pages/components/toggle'; + +const Toggle = create(togglePageObject()); + +module('Integration | Component | toggle', function(hooks) { + setupRenderingTest(hooks); + + const commonProperties = () => ({ + isActive: false, + isDisabled: false, + label: 'Label', + onToggle: sinon.spy(), + }); + + const commonTemplate = hbs` + {{#toggle + isActive=isActive + isDisabled=isDisabled + onToggle=onToggle}} + {{label}} + {{/toggle}} + `; + + test('presents as a label with an inner checkbox and display span, and text', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + + assert.equal(Toggle.label, props.label, `Label should be ${props.label}`); + assert.ok(Toggle.isPresent); + assert.notOk(Toggle.isActive); + assert.ok(find('[data-test-toggler]')); + assert.equal( + find('[data-test-input]').tagName.toLowerCase(), + 'input', + 'The input is a real HTML input' + ); + assert.equal( + find('[data-test-input]').getAttribute('type'), + 'checkbox', + 'The input type is checkbox' + ); + }); + + test('the isActive property dictates the active state and class', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + + assert.notOk(Toggle.isActive); + assert.notOk(Toggle.hasActiveClass); + + this.set('isActive', true); + await settled(); + + assert.ok(Toggle.isActive); + assert.ok(Toggle.hasActiveClass); + }); + + test('the isDisabled property dictates the disabled state and class', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + + assert.notOk(Toggle.isDisabled); + assert.notOk(Toggle.hasDisabledClass); + + this.set('isDisabled', true); + await settled(); + + assert.ok(Toggle.isDisabled); + assert.ok(Toggle.hasDisabledClass); + }); + + test('toggling the input calls the onToggle action', async function(assert) { + const props = commonProperties(); + this.setProperties(props); + await this.render(commonTemplate); + + await Toggle.toggle(); + assert.equal(props.onToggle.callCount, 1); + }); +}); diff --git a/ui/tests/pages/clients/detail.js b/ui/tests/pages/clients/detail.js index c0db54b74b2..df48505c091 100644 --- a/ui/tests/pages/clients/detail.js +++ b/ui/tests/pages/clients/detail.js @@ -3,13 +3,16 @@ import { create, collection, clickable, - hasClass, + fillable, text, isPresent, visitable, } from 'ember-cli-page-object'; import allocations from 'nomad-ui/tests/pages/components/allocations'; +import twoStepButton from 'nomad-ui/tests/pages/components/two-step-button'; +import notification from 'nomad-ui/tests/pages/components/notification'; +import toggle from 'nomad-ui/tests/pages/components/toggle'; export default create({ visit: visitable('/clients/:id'), @@ -25,6 +28,7 @@ export default create({ }, title: text('[data-test-title]'), + clientId: text('[data-test-node-id]'), statusLight: collection('[data-test-node-status]', { id: attribute('data-test-node-status'), @@ -34,8 +38,6 @@ export default create({ statusDefinition: text('[data-test-status-definition]'), statusDecorationClass: attribute('class', '[data-test-status-definition] .status-text'), addressDefinition: text('[data-test-address-definition]'), - drainingDefinition: text('[data-test-draining]'), - eligibilityDefinition: text('[data-test-eligibility]'), datacenterDefinition: text('[data-test-datacenter-definition]'), resourceCharts: collection('[data-test-primary-metric]', { @@ -92,12 +94,66 @@ export default create({ attributesAreShown: isPresent('[data-test-driver-attributes]'), }), - drain: { - deadline: text('[data-test-drain-deadline]'), - forcedDeadline: text('[data-test-drain-forced-deadline]'), - hasForcedDeadline: isPresent('[data-test-drain-forced-deadline]'), - ignoreSystemJobs: text('[data-test-drain-ignore-system-jobs]'), - badgeIsDangerous: hasClass('is-danger', '[data-test-drain-deadline] .badge'), - badgeLabel: text('[data-test-drain-deadline] .badge'), + drainDetails: { + scope: '[data-test-drain-details]', + durationIsPresent: isPresent('[data-test-duration]'), + duration: text('[data-test-duration]'), + durationTooltip: attribute('aria-label', '[data-test-duration]'), + durationIsShown: isPresent('[data-test-duration]'), + deadline: text('[data-test-deadline]'), + deadlineTooltip: attribute('aria-label', '[data-test-deadline]'), + deadlineIsShown: isPresent('[data-test-deadline]'), + forceDrainText: text('[data-test-force-drain-text]'), + drainSystemJobsText: text('[data-test-drain-system-jobs-text]'), + + completeCount: text('[data-test-complete-count]'), + migratingCount: text('[data-test-migrating-count]'), + remainingCount: text('[data-test-remaining-count]'), + status: text('[data-test-status]'), + force: twoStepButton('[data-test-force]'), }, + + drainPopover: { + label: text('[data-test-drain-popover] [data-test-popover-trigger]'), + isOpen: isPresent('[data-test-drain-popover-form]'), + toggle: clickable('[data-test-drain-popover] [data-test-popover-trigger]'), + isDisabled: attribute('aria-disabled', '[data-test-popover-trigger]'), + + deadlineToggle: toggle('[data-test-drain-deadline-toggle]'), + deadlineOptions: { + open: clickable('[data-test-drain-deadline-option-select] .ember-power-select-trigger'), + options: collection('.ember-power-select-option', { + label: text(), + choose: clickable(), + }), + }, + + setCustomDeadline: fillable('[data-test-drain-custom-deadline]'), + customDeadline: attribute('value', '[data-test-drain-custom-deadline]'), + forceDrainToggle: toggle('[data-test-force-drain-toggle]'), + systemJobsToggle: toggle('[data-test-system-jobs-toggle]'), + + submit: clickable('[data-test-drain-submit]'), + cancel: clickable('[data-test-drain-cancel]'), + + setDeadline(label) { + this.deadlineOptions.open(); + this.deadlineOptions.options + .toArray() + .findBy('label', label) + .choose(); + }, + }, + + stopDrain: twoStepButton('[data-test-drain-stop]'), + stopDrainIsPresent: isPresent('[data-test-drain-stop]'), + + eligibilityToggle: toggle('[data-test-eligibility-toggle]'), + + eligibilityError: notification('[data-test-eligibility-error]'), + stopDrainError: notification('[data-test-stop-drain-error]'), + drainError: notification('[data-test-drain-error]'), + drainStoppedNotification: notification('[data-test-drain-stopped-notification]'), + drainUpdatedNotification: notification('[data-test-drain-updated-notification]'), + drainCompleteNotification: notification('[data-test-drain-complete-notification]'), }); diff --git a/ui/tests/pages/clients/list.js b/ui/tests/pages/clients/list.js index 7eb3c6c54b8..7a9c9b5421b 100644 --- a/ui/tests/pages/clients/list.js +++ b/ui/tests/pages/clients/list.js @@ -18,12 +18,24 @@ export default create({ search: fillable('.search-box input'), + sortOptions: collection('[data-test-sort-by]', { + id: attribute('data-test-sort-by'), + sort: clickable(), + }), + + sortBy(id) { + return this.sortOptions + .toArray() + .findBy('id', id) + .sort(); + }, + nodes: collection('[data-test-client-node-row]', { id: text('[data-test-client-id]'), name: text('[data-test-client-name]'), - state: { - scope: '[data-test-client-state]', + compositeStatus: { + scope: '[data-test-client-composite-status]', tooltip: attribute('aria-label', '.tooltip'), diff --git a/ui/tests/pages/components/notification.js b/ui/tests/pages/components/notification.js new file mode 100644 index 00000000000..95e4a20a8d1 --- /dev/null +++ b/ui/tests/pages/components/notification.js @@ -0,0 +1,10 @@ +import { isPresent, clickable, text } from 'ember-cli-page-object'; + +export default scope => ({ + scope, + + isPresent: isPresent(), + dismiss: clickable('[data-test-dismiss]'), + title: text('[data-test-title]'), + message: text('[data-test-message]'), +}); diff --git a/ui/tests/pages/components/popover-menu.js b/ui/tests/pages/components/popover-menu.js new file mode 100644 index 00000000000..e156198aaab --- /dev/null +++ b/ui/tests/pages/components/popover-menu.js @@ -0,0 +1,32 @@ +import { clickable, focusable, isPresent, text, triggerable } from 'ember-cli-page-object'; + +const ARROW_DOWN = 40; +const ESC = 27; +const TAB = 9; + +export default scope => ({ + scope, + + isPresent: isPresent(), + label: text('[data-test-popover-trigger]'), + labelHasIcon: isPresent('[data-test-popover-trigger] svg.icon'), + + toggle: clickable('[data-test-popover-trigger]'), + focus: focusable('[data-test-popover-trigger]'), + downArrow: triggerable('keydown', '[data-test-popover-trigger]', { + eventProperties: { keyCode: ARROW_DOWN }, + }), + focusNext: triggerable('keydown', '[data-test-popover-trigger]', { + eventProperties: { keyCode: TAB }, + }), + esc: triggerable('keydown', '[data-test-popover-trigger]', { + eventProperties: { keyCode: ESC }, + }), + + menu: { + scope: '[data-test-popover-menu]', + testContainer: '#ember-testing', + resetScope: true, + isOpen: isPresent(), + }, +}); diff --git a/ui/tests/pages/components/toggle.js b/ui/tests/pages/components/toggle.js new file mode 100644 index 00000000000..a4f1f6e3f9d --- /dev/null +++ b/ui/tests/pages/components/toggle.js @@ -0,0 +1,16 @@ +import { attribute, property, clickable, hasClass, isPresent, text } from 'ember-cli-page-object'; + +export default scope => ({ + scope, + + isPresent: isPresent(), + isDisabled: attribute('disabled', '[data-test-input]'), + isActive: property('checked', '[data-test-input]'), + + hasDisabledClass: hasClass('is-disabled', '[data-test-label]'), + hasActiveClass: hasClass('is-active', '[data-test-label]'), + + label: text('[data-test-label]'), + + toggle: clickable('[data-test-input]'), +}); diff --git a/ui/tests/pages/jobs/list.js b/ui/tests/pages/jobs/list.js index 2de345e8d21..5d8017cba74 100644 --- a/ui/tests/pages/jobs/list.js +++ b/ui/tests/pages/jobs/list.js @@ -4,6 +4,7 @@ import { collection, clickable, fillable, + is, isPresent, text, visitable, @@ -18,7 +19,10 @@ export default create({ search: fillable('[data-test-jobs-search] input'), - runJob: clickable('[data-test-run-job]'), + runJobButton: { + scope: '[data-test-run-job]', + isDisabled: is('[disabled]'), + }, jobs: collection('[data-test-job-row]', { id: attribute('data-test-job-row'), diff --git a/ui/tests/unit/abilities/client-test.js b/ui/tests/unit/abilities/client-test.js new file mode 100644 index 00000000000..d037fb281ab --- /dev/null +++ b/ui/tests/unit/abilities/client-test.js @@ -0,0 +1,92 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; +import Service from '@ember/service'; +import setupAbility from 'nomad-ui/tests/helpers/setup-ability'; + +module('Unit | Ability | client', function(hooks) { + setupTest(hooks); + setupAbility('client')(hooks); + + test('it permits client write when ACLs are disabled', function(assert) { + const mockToken = Service.extend({ + aclEnabled: false, + }); + this.owner.register('service:token', mockToken); + + assert.ok(this.ability.canWrite); + }); + + test('it permits client write for management tokens', function(assert) { + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'management' }, + }); + this.owner.register('service:token', mockToken); + + assert.ok(this.ability.canWrite); + }); + + test('it permits client write for tokens with a policy that has node-write', function(assert) { + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'client' }, + selfTokenPolicies: [ + { + rulesJSON: { + Node: { + Policy: 'write', + }, + }, + }, + ], + }); + this.owner.register('service:token', mockToken); + + assert.ok(this.ability.canWrite); + }); + + test('it permits client write for tokens with a policy that allows write and another policy that disallows it', function(assert) { + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'client' }, + selfTokenPolicies: [ + { + rulesJSON: { + Node: { + Policy: 'write', + }, + }, + }, + { + rulesJSON: { + Node: { + Policy: 'read', + }, + }, + }, + ], + }); + this.owner.register('service:token', mockToken); + + assert.ok(this.ability.canWrite); + }); + + test('it blocks client write for tokens with a policy that does not allow node-write', function(assert) { + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'client' }, + selfTokenPolicies: [ + { + rulesJSON: { + Node: { + Policy: 'read', + }, + }, + }, + ], + }); + this.owner.register('service:token', mockToken); + + assert.notOk(this.ability.canWrite); + }); +}); diff --git a/ui/tests/unit/abilities/job-test.js b/ui/tests/unit/abilities/job-test.js new file mode 100644 index 00000000000..e1e661d0c7b --- /dev/null +++ b/ui/tests/unit/abilities/job-test.js @@ -0,0 +1,199 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; +import Service from '@ember/service'; +import setupAbility from 'nomad-ui/tests/helpers/setup-ability'; + +module('Unit | Ability | job', function(hooks) { + setupTest(hooks); + setupAbility('job')(hooks); + + test('it permits job run when ACLs are disabled', function(assert) { + const mockToken = Service.extend({ + aclEnabled: false, + }); + + this.owner.register('service:token', mockToken); + + assert.ok(this.ability.canRun); + }); + + test('it permits job run for management tokens', function(assert) { + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'management' }, + }); + + this.owner.register('service:token', mockToken); + + assert.ok(this.ability.canRun); + }); + + test('it permits job run for client tokens with a policy that has namespace submit-job', function(assert) { + const mockSystem = Service.extend({ + aclEnabled: true, + activeNamespace: { + name: 'aNamespace', + }, + }); + + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'client' }, + selfTokenPolicies: [ + { + rulesJSON: { + Namespaces: [ + { + Name: 'aNamespace', + Capabilities: ['submit-job'], + }, + ], + }, + }, + ], + }); + + this.owner.register('service:system', mockSystem); + this.owner.register('service:token', mockToken); + + assert.ok(this.ability.canRun); + }); + + test('it permits job run for client tokens with a policy that has default namespace submit-job and no capabilities for active namespace', function(assert) { + const mockSystem = Service.extend({ + aclEnabled: true, + activeNamespace: { + name: 'anotherNamespace', + }, + }); + + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'client' }, + selfTokenPolicies: [ + { + rulesJSON: { + Namespaces: [ + { + Name: 'aNamespace', + Capabilities: [], + }, + { + Name: 'default', + Capabilities: ['submit-job'], + }, + ], + }, + }, + ], + }); + + this.owner.register('service:system', mockSystem); + this.owner.register('service:token', mockToken); + + assert.ok(this.ability.canRun); + }); + + test('it blocks job run for client tokens with a policy that has no submit-job capability', function(assert) { + const mockSystem = Service.extend({ + aclEnabled: true, + activeNamespace: { + name: 'aNamespace', + }, + }); + + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'client' }, + selfTokenPolicies: [ + { + rulesJSON: { + Namespaces: [ + { + Name: 'aNamespace', + Capabilities: ['list-jobs'], + }, + ], + }, + }, + ], + }); + + this.owner.register('service:system', mockSystem); + this.owner.register('service:token', mockToken); + + assert.notOk(this.ability.canRun); + }); + + test('it handles globs in namespace names', function(assert) { + const mockSystem = Service.extend({ + aclEnabled: true, + activeNamespace: { + name: 'aNamespace', + }, + }); + + const mockToken = Service.extend({ + aclEnabled: true, + selfToken: { type: 'client' }, + selfTokenPolicies: [ + { + rulesJSON: { + Namespaces: [ + { + Name: 'production-*', + Capabilities: ['submit-job'], + }, + { + Name: 'production-api', + Capabilities: ['submit-job'], + }, + { + Name: 'production-web', + Capabilities: [], + }, + { + Name: '*-suffixed', + Capabilities: ['submit-job'], + }, + { + Name: '*-more-suffixed', + Capabilities: [], + }, + { + Name: '*-abc-*', + Capabilities: ['submit-job'], + }, + ], + }, + }, + ], + }); + + this.owner.register('service:system', mockSystem); + this.owner.register('service:token', mockToken); + + const systemService = this.owner.lookup('service:system'); + + systemService.set('activeNamespace.name', 'production-web'); + assert.notOk(this.ability.canRun); + + systemService.set('activeNamespace.name', 'production-api'); + assert.ok(this.ability.canRun); + + systemService.set('activeNamespace.name', 'production-other'); + assert.ok(this.ability.canRun); + + systemService.set('activeNamespace.name', 'something-suffixed'); + assert.ok(this.ability.canRun); + + systemService.set('activeNamespace.name', 'something-more-suffixed'); + assert.notOk( + this.ability.canRun, + 'expected the namespace with the greatest number of matched characters to be chosen' + ); + + systemService.set('activeNamespace.name', '000-abc-999'); + assert.ok(this.ability.canRun, 'expected to be able to match against more than one wildcard'); + }); +}); diff --git a/ui/tests/unit/adapters/job-test.js b/ui/tests/unit/adapters/job-test.js index 6c7c9450350..d2710f9bec6 100644 --- a/ui/tests/unit/adapters/job-test.js +++ b/ui/tests/unit/adapters/job-test.js @@ -57,6 +57,7 @@ module('Unit | Adapter | Job', function(hooks) { this.subject().findRecord(null, { modelName: 'job' }, jobId); + await settled(); assert.deepEqual( pretender.handledRequests.mapBy('url'), [`/v1/job/${jobName}`], @@ -75,6 +76,7 @@ module('Unit | Adapter | Job', function(hooks) { const jobId = JSON.stringify([jobName, jobNamespace]); this.subject().findRecord(null, { modelName: 'job' }, jobId); + await settled(); assert.deepEqual( pretender.handledRequests.mapBy('url'), @@ -94,6 +96,7 @@ module('Unit | Adapter | Job', function(hooks) { const jobId = JSON.stringify([jobName, jobNamespace]); this.subject().findRecord(null, { modelName: 'job' }, jobId); + await settled(); assert.deepEqual( pretender.handledRequests.mapBy('url'), @@ -111,6 +114,7 @@ module('Unit | Adapter | Job', function(hooks) { const jobId = JSON.stringify([jobName, jobNamespace]); this.subject().findRecord(null, { modelName: 'job' }, jobId); + await settled(); assert.deepEqual( pretender.handledRequests.mapBy('url'), @@ -126,6 +130,7 @@ module('Unit | Adapter | Job', function(hooks) { const jobId = JSON.stringify(['job-1', 'default']); this.subject().findRecord(null, { modelName: 'job' }, jobId); + await settled(); assert.notOk( pretender.handledRequests.mapBy('requestHeaders').some(headers => headers['X-Nomad-Token']), @@ -142,6 +147,7 @@ module('Unit | Adapter | Job', function(hooks) { this.subject().set('token.secret', secret); this.subject().findRecord(null, { modelName: 'job' }, jobId); + await settled(); assert.ok( pretender.handledRequests @@ -242,6 +248,8 @@ module('Unit | Adapter | Job', function(hooks) { await settled(); this.subject().reloadRelationship(mockModel, 'summary', { watch: true }); + await settled(); + assert.equal( pretender.handledRequests[1].url, '/v1/job/job-1/summary?index=2', @@ -377,6 +385,7 @@ module('Unit | Adapter | Job', function(hooks) { await settled(); this.subject().findRecord(null, { modelName: 'job' }, jobId); this.subject().findAll(null, { modelName: 'job' }, null); + await settled(); assert.deepEqual( pretender.handledRequests.mapBy('url'), @@ -399,6 +408,7 @@ module('Unit | Adapter | Job', function(hooks) { await settled(); this.subject().findRecord(null, { modelName: 'job' }, jobId); this.subject().findAll(null, { modelName: 'job' }, null); + await settled(); assert.deepEqual( pretender.handledRequests.mapBy('url'), @@ -420,6 +430,7 @@ module('Unit | Adapter | Job', function(hooks) { await settled(); this.subject().findRecord(null, { modelName: 'job' }, jobId); this.subject().findAll(null, { modelName: 'job' }, null); + await settled(); assert.deepEqual( pretender.handledRequests.mapBy('url'), diff --git a/ui/tests/unit/adapters/node-test.js b/ui/tests/unit/adapters/node-test.js index 9faa709b05c..143e2f65cd3 100644 --- a/ui/tests/unit/adapters/node-test.js +++ b/ui/tests/unit/adapters/node-test.js @@ -85,6 +85,159 @@ module('Unit | Adapter | Node', function(hooks) { 'The deleted allocation is removed from the store and the allocations associated with the other node are untouched' ); }); + + test('setEligible makes the correct POST request to /:node_id/eligibility', async function(assert) { + const { pretender } = this.server; + const node = await run(() => this.store.findRecord('node', 'node-1')); + + await this.subject().setEligible(node); + + const request = pretender.handledRequests.lastObject; + assert.equal( + request.url, + `/v1/node/${node.id}/eligibility`, + 'Request was made to /:node_id/eligibility' + ); + assert.equal(request.method, 'POST', 'Request was made with the POST method'); + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + Eligibility: 'eligible', + }, + 'POST request is made with the correct body arguments' + ); + }); + + test('setIneligible makes the correct POST request to /:node_id/eligibility', async function(assert) { + const { pretender } = this.server; + const node = await run(() => this.store.findRecord('node', 'node-1')); + + await this.subject().setIneligible(node); + + const request = pretender.handledRequests.lastObject; + assert.equal( + request.url, + `/v1/node/${node.id}/eligibility`, + 'Request was made to /:node_id/eligibility' + ); + assert.equal(request.method, 'POST', 'Request was made with the POST method'); + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + Eligibility: 'ineligible', + }, + 'POST request is made with the correct body arguments' + ); + }); + + test('drain makes the correct POST request to /:node_id/drain with appropriate defaults', async function(assert) { + const { pretender } = this.server; + const node = await run(() => this.store.findRecord('node', 'node-1')); + + await this.subject().drain(node); + + const request = pretender.handledRequests.lastObject; + assert.equal(request.url, `/v1/node/${node.id}/drain`, 'Request was made to /:node_id/drain'); + assert.equal(request.method, 'POST', 'Request was made with the POST method'); + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: 0, + IgnoreSystemJobs: true, + }, + }, + 'POST request is made with the default body arguments' + ); + }); + + test('drain makes the correct POST request to /:node_id/drain with the provided drain spec', async function(assert) { + const { pretender } = this.server; + const node = await run(() => this.store.findRecord('node', 'node-1')); + + const spec = { Deadline: 123456789, IgnoreSystemJobs: false }; + await this.subject().drain(node, spec); + + const request = pretender.handledRequests.lastObject; + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: spec.Deadline, + IgnoreSystemJobs: spec.IgnoreSystemJobs, + }, + }, + 'POST request is made with the drain spec as body arguments' + ); + }); + + test('forceDrain makes the correct POST request to /:node_id/drain with appropriate defaults', async function(assert) { + const { pretender } = this.server; + const node = await run(() => this.store.findRecord('node', 'node-1')); + + await this.subject().forceDrain(node); + + const request = pretender.handledRequests.lastObject; + assert.equal(request.url, `/v1/node/${node.id}/drain`, 'Request was made to /:node_id/drain'); + assert.equal(request.method, 'POST', 'Request was made with the POST method'); + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: -1, + IgnoreSystemJobs: true, + }, + }, + 'POST request is made with the default body arguments' + ); + }); + + test('forceDrain makes the correct POST request to /:node_id/drain with the provided drain spec', async function(assert) { + const { pretender } = this.server; + const node = await run(() => this.store.findRecord('node', 'node-1')); + + const spec = { Deadline: 123456789, IgnoreSystemJobs: false }; + await this.subject().forceDrain(node, spec); + + const request = pretender.handledRequests.lastObject; + assert.equal(request.url, `/v1/node/${node.id}/drain`, 'Request was made to /:node_id/drain'); + assert.equal(request.method, 'POST', 'Request was made with the POST method'); + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: { + Deadline: -1, + IgnoreSystemJobs: spec.IgnoreSystemJobs, + }, + }, + 'POST request is made with the drain spec, except deadline is not overridden' + ); + }); + + test('cancelDrain makes the correct POST request to /:node_id/drain', async function(assert) { + const { pretender } = this.server; + const node = await run(() => this.store.findRecord('node', 'node-1')); + + await this.subject().cancelDrain(node); + + const request = pretender.handledRequests.lastObject; + assert.equal(request.url, `/v1/node/${node.id}/drain`, 'Request was made to /:node_id/drain'); + assert.equal(request.method, 'POST', 'Request was made with the POST method'); + assert.deepEqual( + JSON.parse(request.requestBody), + { + NodeID: node.id, + DrainSpec: null, + }, + 'POST request is made with a null drain spec' + ); + }); }); // Using fetchLink on a model's hasMany relationship exercises the adapter's diff --git a/ui/tests/unit/utils/stream-logger-test.js b/ui/tests/unit/utils/stream-logger-test.js new file mode 100644 index 00000000000..106dac4f6cc --- /dev/null +++ b/ui/tests/unit/utils/stream-logger-test.js @@ -0,0 +1,96 @@ +import { module, test } from 'qunit'; +import { Promise } from 'rsvp'; +import sinon from 'sinon'; +import StreamLogger from 'nomad-ui/utils/classes/stream-logger'; + +module('Unit | Util | StreamLogger', function() { + test('when a StreamLogger is stopped before the poll request responds, the request is immediately canceled upon completion', async function(assert) { + const fetchMock = new FetchMock(); + const fetch = fetchMock.request(); + + const logger = StreamLogger.create({ + logFetch: () => fetch, + }); + + logger.start(); + logger.stop(); + + assert.notOk(logger.poll.isRunning); + assert.equal(fetchMock.reader.cancel.callCount, 0); + + fetchMock.closeRequest(); + await fetch; + + assert.equal(fetchMock.reader.cancel.callCount, 1); + }); + + test('when the streaming request sends the done flag, the poll task completes', async function(assert) { + const fetchMock = new FetchMock(); + const fetch = fetchMock.request(); + + const logger = StreamLogger.create({ + logFetch: () => fetch, + }); + + logger.start(); + + assert.ok(logger.poll.isRunning); + assert.equal(fetchMock.reader.readSpy.callCount, 0); + + fetchMock.closeRequest(); + await fetch; + + assert.notOk(logger.poll.isRunning); + assert.equal(fetchMock.reader.readSpy.callCount, 1); + }); +}); + +class FetchMock { + constructor() { + this._closeRequest = null; + this.reader = new ReadableStreamMock(); + this.response = new FetchResponseMock(this.reader); + } + + request() { + if (this._closeRequest) { + throw new Error('Can only call FetchMock.request once'); + } + return new Promise(resolve => { + this._closeRequest = resolve; + }); + } + + closeRequest() { + if (this._closeRequest) { + this._closeRequest(this.response); + } else { + throw new Error('Must call FetchMock.request() before FetchMock.closeRequest'); + } + } +} + +class FetchResponseMock { + constructor(reader) { + this.reader = reader; + this.body = { + getReader() { + return reader; + }, + }; + } +} + +class ReadableStreamMock { + constructor() { + this.cancel = sinon.spy(); + this.readSpy = sinon.spy(); + } + + read() { + this.readSpy(); + return new Promise(resolve => { + resolve({ value: new ArrayBuffer(0), done: true }); + }); + } +} diff --git a/ui/yarn.lock b/ui/yarn.lock index 8f68c8e4b31..0032c5119e4 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@babel/code-frame@7.5.5", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -29,14 +36,64 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" - integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ== +"@babel/core@^7.2.2": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" + integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.5.5" + "@babel/helpers" "^7.5.5" + "@babel/parser" "^7.5.5" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.4.3": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91" + integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.2" + "@babel/helpers" "^7.6.2" + "@babel/parser" "^7.6.2" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.4.0", "@babel/generator@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03" + integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ== dependencies: - "@babel/types" "^7.4.0" + "@babel/types" "^7.6.0" jsesc "^2.5.1" - lodash "^4.17.11" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/generator@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" + integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== + dependencies: + "@babel/types" "^7.5.5" + jsesc "^2.5.1" + lodash "^4.17.13" source-map "^0.5.0" trim-right "^1.0.1" @@ -55,36 +112,57 @@ "@babel/helper-explode-assignable-expression" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-call-delegate@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.0.tgz#f308eabe0d44f451217853aedf4dea5f6fe3294f" - integrity sha512-SdqDfbVdNQCBp3WhK2mNdDvHd3BD6qbmIc43CAyjnsfCmgHMeqgDcM3BzY2lchi7HBJGJ2CVdynLWbezaE4mmQ== +"@babel/helper-call-delegate@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" + integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== dependencies: - "@babel/helper-hoist-variables" "^7.4.0" - "@babel/traverse" "^7.4.0" - "@babel/types" "^7.4.0" + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" -"@babel/helper-create-class-features-plugin@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.0.tgz#30fd090e059d021995c1762a5b76798fa0b51d82" - integrity sha512-2K8NohdOT7P6Vyp23QH4w2IleP8yG3UJsbRKwA4YP6H8fErcLkFuuEEqbF2/BYBKSNci/FWJiqm6R3VhM/QHgw== +"@babel/helper-create-class-features-plugin@^7.4.0", "@babel/helper-create-class-features-plugin@^7.5.5": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f" + integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.5.5" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-split-export-declaration" "^7.4.4" + +"@babel/helper-create-class-features-plugin@^7.4.4", "@babel/helper-create-class-features-plugin@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.0.tgz#02edb97f512d44ba23b3227f1bf2ed43454edac5" + integrity sha512-EAoMc3hE5vE5LNhMqDOwB1usHvmRjCDAnH8CD4PVkX9/Yr3W/tcz8xE8QvdZxfsFBDICwZnF2UTHIqslRpvxmA== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.0" - "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" -"@babel/helper-define-map@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.0.tgz#cbfd8c1b2f12708e262c26f600cd16ed6a3bc6c9" - integrity sha512-wAhQ9HdnLIywERVcSvX40CEJwKdAa1ID4neI9NXQPDOHwwA+57DqwLiPEVy2AIyWzAk0CQ8qx4awO0VUURwLtA== +"@babel/helper-define-map@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" + integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== dependencies: "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.4.0" + "@babel/types" "^7.4.4" lodash "^4.17.11" +"@babel/helper-define-map@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" + integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.5.5" + lodash "^4.17.13" + "@babel/helper-explode-assignable-expression@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" @@ -109,12 +187,12 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-hoist-variables@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.0.tgz#25b621399ae229869329730a62015bbeb0a6fbd6" - integrity sha512-/NErCuoe/et17IlAQFKWM24qtyYYie7sFIrW/tIQXpck6vAu2hhtYYsKLBWQV+BQZMbcIYPU/QMYuTufrY4aQw== +"@babel/helper-hoist-variables@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" + integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== dependencies: - "@babel/types" "^7.4.0" + "@babel/types" "^7.4.4" "@babel/helper-member-expression-to-functions@^7.0.0": version "7.0.0" @@ -123,6 +201,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-member-expression-to-functions@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" + integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== + dependencies: + "@babel/types" "^7.5.5" + "@babel/helper-module-imports@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" @@ -131,16 +216,28 @@ "@babel/types" "^7.0.0" "@babel/helper-module-transforms@^7.1.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963" - integrity sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" + integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.2.2" - "@babel/types" "^7.2.2" - lodash "^4.17.10" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.4.4" + lodash "^4.17.11" + +"@babel/helper-module-transforms@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" + integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.5.5" + lodash "^4.17.13" "@babel/helper-optimise-call-expression@^7.0.0": version "7.0.0" @@ -155,11 +252,18 @@ integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== "@babel/helper-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" - integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" + integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== dependencies: - lodash "^4.17.10" + lodash "^4.17.11" + +"@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== + dependencies: + lodash "^4.17.13" "@babel/helper-remap-async-to-generator@^7.1.0": version "7.1.0" @@ -172,15 +276,25 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz#4f56adb6aedcd449d2da9399c2dcf0545463b64c" - integrity sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg== +"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" + integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== dependencies: "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.4.0" - "@babel/types" "^7.4.0" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/helper-replace-supers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" + integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.5.5" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" "@babel/helper-simple-access@^7.1.0": version "7.1.0" @@ -190,12 +304,12 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" - integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw== +"@babel/helper-split-export-declaration@^7.4.0", "@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== dependencies: - "@babel/types" "^7.4.0" + "@babel/types" "^7.4.4" "@babel/helper-wrap-function@^7.1.0": version "7.2.0" @@ -207,28 +321,42 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.4.0": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.2.tgz#3bdfa46a552ca77ef5a0f8551be5f0845ae989be" - integrity sha512-gQR1eQeroDzFBikhrCccm5Gs2xBjZ57DNjGbqTaHo911IpmSxflOQWMAHPw/TXk8L3isv7s9lYzUkexOeTQUYg== +"@babel/helpers@^7.4.0", "@babel/helpers@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" + integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== dependencies: - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.0" - "@babel/types" "^7.4.0" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + +"@babel/helpers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" + integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== + dependencies: + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" "@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.4.0": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" - integrity sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g== +"@babel/parser@^7.3.4", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" + integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== + +"@babel/parser@^7.4.0", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1" + integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg== "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -239,6 +367,22 @@ "@babel/helper-remap-async-to-generator" "^7.1.0" "@babel/plugin-syntax-async-generators" "^7.2.0" +"@babel/plugin-proposal-class-properties@^7.1.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.0.tgz#5bc6a0537d286fcb4fd4e89975adbca334987007" + integrity sha512-9L/JfPCT+kShiiTTzcnBJ8cOwdKVmlC1RcCf9F0F9tERVrM4iWtWnXtjWCRqNm2la2BxO1MPArWNsU9zsSJWSQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.5.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-proposal-class-properties@^7.3.3": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" + integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.5.5" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-class-properties@^7.3.4": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.0.tgz#d70db61a2f1fd79de927eea91f6411c964e084b8" @@ -248,14 +392,22 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-decorators@^7.3.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.0.tgz#8e1bfd83efa54a5f662033afcc2b8e701f4bb3a9" - integrity sha512-d08TLmXeK/XbgCo7ZeZ+JaeZDtDai/2ctapTRsWWkkmy7G/cqz8DQN/HlWG7RR4YmfXxmExsbU3SuCjlM7AtUg== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0" + integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.4.0" + "@babel/helper-create-class-features-plugin" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-decorators" "^7.2.0" +"@babel/plugin-proposal-dynamic-import@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" + integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-proposal-json-strings@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" @@ -264,10 +416,10 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.0.tgz#e4960575205eadf2a1ab4e0c79f9504d5b82a97f" - integrity sha512-uTNi8pPYyUH2eWHyYWWSYJKwKg34hhgl4/dbejEjL+64OhbHjTX7wEVWMQl82tEmdDsGeu77+s8HHLS627h6OQ== +"@babel/plugin-proposal-object-rest-spread@^7.3.2", "@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" + integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" @@ -280,6 +432,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" +"@babel/plugin-proposal-object-rest-spread@^7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.4.tgz#250de35d867ce8260a31b1fdac6c4fc1baa99331" + integrity sha512-KCx0z3y7y8ipZUMAEEJOyNi11lMb/FOPUjjB113tfowgw0c16EGYos7worCKBcUAh2oG+OBnoUhsnTSoLpV9uA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-proposal-optional-catch-binding@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" @@ -288,15 +448,24 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.0.tgz#202d91ee977d760ef83f4f416b280d568be84623" - integrity sha512-h/KjEZ3nK9wv1P1FSNb9G079jXrNYR0Ko+7XkOx85+gM24iZbPn0rh4vCftk+5QKY7y1uByFataBTmX7irEF1w== +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" + integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@babel/helper-regex" "^7.4.4" regexpu-core "^4.5.4" +"@babel/plugin-proposal-unicode-property-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" + integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + "@babel/plugin-syntax-async-generators@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" @@ -311,6 +480,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-dynamic-import@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" + integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" @@ -332,6 +508,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-typescript@^7.2.0": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" + integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-arrow-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" @@ -339,10 +522,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.0.tgz#234fe3e458dce95865c0d152d256119b237834b0" - integrity sha512-EeaFdCeUULM+GPFEsf7pFcNSxM7hYjoj5fiYbyuiXobW4JhFnjAv9OWzNwHyHcKoPNpAfeRDuW6VyaXEDUBa7g== +"@babel/plugin-transform-async-to-generator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" + integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -355,26 +538,48 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.0.tgz#164df3bb41e3deb954c4ca32ffa9fcaa56d30bcb" - integrity sha512-AWyt3k+fBXQqt2qb9r97tn3iBwFpiv9xdAiG+Gr2HpAZpuayvbL55yWrsV3MyHvXk/4vmSiedhDRl1YI2Iy5nQ== +"@babel/plugin-transform-block-scoping@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" + integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.11" -"@babel/plugin-transform-classes@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.0.tgz#e3428d3c8a3d01f33b10c529b998ba1707043d4d" - integrity sha512-XGg1Mhbw4LDmrO9rSTNe+uI79tQPdGs0YASlxgweYRLZqo/EQktjaOV4tchL/UZbM0F+/94uOipmdNGoaGOEYg== +"@babel/plugin-transform-block-scoping@^7.5.5", "@babel/plugin-transform-block-scoping@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79" + integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" + integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.4.0" + "@babel/helper-define-map" "^7.4.4" "@babel/helper-function-name" "^7.1.0" "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.0" - "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" + globals "^11.1.0" + +"@babel/plugin-transform-classes@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" + integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.5.5" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-split-export-declaration" "^7.4.4" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.2.0": @@ -384,26 +589,42 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.0.tgz#acbb9b2418d290107db333f4d6cd8aa6aea00343" - integrity sha512-HySkoatyYTY3ZwLI8GGvkRWCFrjAGXUHur5sMecmCIdIharnlcWWivOqDJI76vvmVZfzwb6G08NREsrY96RhGQ== +"@babel/plugin-transform-destructuring@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a" + integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" - integrity sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ== +"@babel/plugin-transform-destructuring@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" + integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== +"@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" + integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + +"@babel/plugin-transform-dotall-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" + integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/plugin-transform-duplicate-keys@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" + integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -415,17 +636,17 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.0.tgz#56c8c36677f5d4a16b80b12f7b768de064aaeb5f" - integrity sha512-vWdfCEYLlYSxbsKj5lGtzA49K3KANtb8qCPQ1em07txJzsBwY+cKJzBHizj5fl3CCx7vt+WPdgDLTHmydkbQSQ== +"@babel/plugin-transform-for-of@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" - integrity sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ== +"@babel/plugin-transform-function-name@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" + integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -437,30 +658,51 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.0.0", "@babel/plugin-transform-modules-amd@^7.2.0": +"@babel/plugin-transform-member-expression-literals@^7.2.0", "@babel/plugin-transform-modules-amd@^7.0.0", "@babel/plugin-transform-modules-amd@^7.2.0": + name "@babel/plugin-transform-member-expression-literals" version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" + integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== dependencies: - "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-commonjs@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.0.tgz#3b8ec61714d3b75d20c5ccfa157f2c2e087fd4ca" - integrity sha512-iWKAooAkipG7g1IY0eah7SumzfnIT3WNhT4uYB2kIsvHnNSB6MDYVa5qyICSwaTBDBY2c4SnJ3JtEa6ltJd6Jw== +"@babel/plugin-transform-modules-amd@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" + integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== dependencies: "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" + integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== + dependencies: + "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" + babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.0.tgz#c2495e55528135797bc816f5d50f851698c586a1" - integrity sha512-gjPdHmqiNhVoBqus5qK60mWPp1CmYWp/tkh11mvb0rrys01HycEGD7NvvSoKXlWEfSM9TcL36CpsK8ElsADptQ== +"@babel/plugin-transform-modules-commonjs@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" + integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== dependencies: - "@babel/helper-hoist-variables" "^7.4.0" + "@babel/helper-module-transforms" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" + integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" "@babel/plugin-transform-modules-umd@^7.2.0": version "7.2.0" @@ -470,17 +712,24 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.2": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.2.tgz#800391136d6cbcc80728dbdba3c1c6e46f86c12e" - integrity sha512-NsAuliSwkL3WO2dzWTOL1oZJHm0TM8ZY8ZSxk2ANyKkt5SQlToGA4pzctmq1BEjoacurdwZ3xp2dCQWJkME0gQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" + integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== dependencies: - regexp-tree "^0.1.0" + regexp-tree "^0.1.6" -"@babel/plugin-transform-new-target@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.0.tgz#67658a1d944edb53c8d4fa3004473a0dd7838150" - integrity sha512-6ZKNgMQmQmrEX/ncuCwnnw1yVGoaOW5KpxNhoWI7pCQdA0uZ0HqHGqenCUIENAnxRjy2WwNQ30gfGdIgqJXXqw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b" + integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g== + dependencies: + regexpu-core "^4.6.0" + +"@babel/plugin-transform-new-target@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -492,26 +741,56 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.1.0" -"@babel/plugin-transform-parameters@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.0.tgz#a1309426fac4eecd2a9439a4c8c35124a11a48a9" - integrity sha512-Xqv6d1X+doyiuCGDoVJFtlZx0onAX0tnc3dY8w71pv/O0dODAbusVv2Ale3cGOwfiyi895ivOBhYa9DhAM8dUA== +"@babel/plugin-transform-object-super@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" + integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== dependencies: - "@babel/helper-call-delegate" "^7.4.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + +"@babel/plugin-transform-parameters@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== + dependencies: + "@babel/helper-call-delegate" "^7.4.4" "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.0.tgz#0780e27ee458cc3fdbad18294d703e972ae1f6d1" - integrity sha512-SZ+CgL4F0wm4npojPU6swo/cK4FcbLgxLd4cWpHaNXY/NJ2dpahODCqBbAwb2rDmVszVb3SSjnk9/vik3AYdBw== +"@babel/plugin-transform-property-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" + integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-constant-elements@^7.2.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.6.0.tgz#13b8434fb817d30feebd811256eb402c9a245c9e" + integrity sha512-np/nPuII8DHOZWB3u8u+NSeKlEz0eBrOlnVksIQog4C9NGVzXO+NLxMcXn4Eu4GMFzOw2W6Tyo6L3+Wv8z9Y5w== dependencies: - regenerator-transform "^0.13.4" + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" + integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-runtime@^7.2.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.0.tgz#b4d8c925ed957471bc57e0b9da53408ebb1ed457" - integrity sha512-1uv2h9wnRj98XX3g0l4q+O3jFM6HfayKup7aIu4pnnlzGz0H+cYckGBC74FZIWJXJSXAmeJ9Yu5Gg2RQpS4hWg== + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.0.tgz#45242c2c9281158c5f06d25beebac63e498a284e" + integrity sha512-LmPIZOAgTLl+86gR9KjLXex6P/lRz1fWEjTz6V6QZMmKie51ja3tvzdwORqhHc4RWR8TcZ5pClpRWs0mlaA2ng== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -532,6 +811,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" + integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-sticky-regex@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" @@ -540,10 +826,10 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" - integrity sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg== +"@babel/plugin-transform-template-literals@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -555,73 +841,151 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-unicode-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" - integrity sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA== +"@babel/plugin-transform-typescript@~7.4.0": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz#ab3351ba35307b79981993536c93ff8be050ba28" + integrity sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" + "@babel/plugin-syntax-typescript" "^7.2.0" + +"@babel/plugin-transform-unicode-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" + integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + +"@babel/plugin-transform-unicode-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" + integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" "@babel/polyfill@^7.0.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.0.tgz#90f9d68ae34ac42ab4b4aa03151848f536960218" - integrity sha512-bVsjsrtsDflIHp5I6caaAa2V25Kzn50HKPL6g3X0P0ni1ks+58cPB8Mz6AOKVuRPgaVdq/OwEUc/1vKqX+Mo4A== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.4.tgz#78801cf3dbe657844eeabf31c1cae3828051e893" + integrity sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.2" "@babel/preset-env@^7.0.0": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.2.tgz#2f5ba1de2daefa9dcca653848f96c7ce2e406676" - integrity sha512-OEz6VOZaI9LW08CWVS3d9g/0jZA6YCn1gsKIy/fut7yZCJti5Lm1/Hi+uo/U+ODm7g4I6gULrCP+/+laT8xAsA== + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.4.tgz#64bc15041a3cbb0798930319917e70fcca57713d" + integrity sha512-hFnFnouyRNiH1rL8YkX1ANCNAUVC8Djwdqfev8i1415tnAG+7hlA5zhZ0Q/3Q5gkop4HioIPbCEWAalqcbxRoQ== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-dynamic-import" "^7.5.0" "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.4.0" + "@babel/plugin-proposal-object-rest-spread" "^7.5.4" "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" "@babel/plugin-syntax-json-strings" "^7.2.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.4.0" + "@babel/plugin-transform-async-to-generator" "^7.5.0" "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.4.0" - "@babel/plugin-transform-classes" "^7.4.0" + "@babel/plugin-transform-block-scoping" "^7.4.4" + "@babel/plugin-transform-classes" "^7.4.4" "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.4.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.5.0" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/plugin-transform-duplicate-keys" "^7.5.0" "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.0" - "@babel/plugin-transform-function-name" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.4.0" - "@babel/plugin-transform-modules-systemjs" "^7.4.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.5.0" + "@babel/plugin-transform-modules-systemjs" "^7.5.0" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.2" - "@babel/plugin-transform-new-target" "^7.4.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" + "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.4.0" - "@babel/plugin-transform-regenerator" "^7.4.0" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" "@babel/plugin-transform-shorthand-properties" "^7.2.0" "@babel/plugin-transform-spread" "^7.2.0" "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - "@babel/types" "^7.4.0" - browserslist "^4.4.2" - core-js-compat "^3.0.0" + "@babel/plugin-transform-unicode-regex" "^7.4.4" + "@babel/types" "^7.5.0" + browserslist "^4.6.0" + core-js-compat "^3.1.1" invariant "^2.2.2" js-levenshtein "^1.1.3" - semver "^5.3.0" + semver "^5.5.0" + +"@babel/preset-env@^7.4.5": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3" + integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-dynamic-import" "^7.5.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.5.0" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.6.2" + "@babel/plugin-transform-classes" "^7.5.5" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.6.0" + "@babel/plugin-transform-dotall-regex" "^7.6.2" + "@babel/plugin-transform-duplicate-keys" "^7.5.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.6.0" + "@babel/plugin-transform-modules-systemjs" "^7.5.0" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.2" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.5.5" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.6.2" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.6.2" + "@babel/types" "^7.6.0" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" "@babel/runtime@7.0.0": version "7.0.0" @@ -630,23 +994,53 @@ dependencies: regenerator-runtime "^0.12.0" +"@babel/runtime@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83" + integrity sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g== + dependencies: + regenerator-runtime "^0.12.0" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.2.tgz#c3d6e41b304ef10dcf13777a33e7694ec4a9a6dd" + integrity sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/runtime@^7.2.0": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.2.tgz#f5ab6897320f16decd855eed70b705908a313fe8" - integrity sha512-7Bl2rALb7HpvXFL7TETNzKSAeBVCPHELzc0C//9FCxN8nsiueWSJBqaF+2oIJScyILStASR/Cx5WMkXGYTiJFA== + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.4.tgz#cb7d1ad7c6d65676e66b47186577930465b5271b" + integrity sha512-Na84uwyImZZc3FKf4aUF1tysApzwf3p2yuFBIyBfbzT5glzKTdvYI4KVW4kcgjrzoGUjC7w3YyCHcJKaRxsr2Q== dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" - integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw== +"@babel/runtime@^7.4.4": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" + integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/template@^7.1.0", "@babel/template@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" + integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.0" - "@babel/types" "^7.4.0" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/template@^7.4.0", "@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.4.0": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada" integrity sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA== @@ -661,7 +1055,37 @@ globals "^11.1.0" lodash "^4.17.11" -"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.4.0": +"@babel/traverse@^7.2.4", "@babel/traverse@^7.3.4", "@babel/traverse@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" + integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.5.5" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.5.5" + "@babel/types" "^7.5.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/traverse@^7.4.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c" + integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.2" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.2" + "@babel/types" "^7.6.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.2.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA== @@ -670,17 +1094,149 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@babel/types@^7.3.2", "@babel/types@^7.3.4", "@babel/types@^7.4.4", "@babel/types@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" + integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.4.0", "@babel/types@^7.6.0": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" + integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.0.tgz#e47d43840c2e7f9105bc4d3a2c371b4d0c7832ab" + integrity sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" + +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@ember-data/-build-infra@3.12.4": + version "3.12.4" + resolved "https://registry.yarnpkg.com/@ember-data/-build-infra/-/-build-infra-3.12.4.tgz#891304b39a39768c81c1beef55f6b39c862a5868" + integrity sha512-+2ICbMg7QxVMb+asXInG0VIGV08CsSHVdDL1Sw6zkSMtAChGFij1anV160J97vRN/iUyHktkNgmaKUeooVCTPw== + dependencies: + "@babel/plugin-transform-block-scoping" "^7.5.5" + babel-plugin-debug-macros "^0.3.2" + babel-plugin-feature-flags "^0.3.1" + babel-plugin-filter-imports "^3.0.0" + babel6-plugin-strip-class-callcheck "^6.0.0" + broccoli-debug "^0.6.5" + broccoli-file-creator "^2.1.1" + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^3.0.2" + broccoli-rollup "^4.1.1" + calculate-cache-key-for-tree "^2.0.0" + chalk "^2.4.1" + ember-cli-path-utils "^1.0.0" + ember-cli-string-utils "^1.1.0" + ember-cli-version-checker "^3.1.2" + esm "^3.2.25" + git-repo-info "^2.0.0" + glob "^7.1.4" + npm-git-info "^1.0.3" + rimraf "^2.6.2" + rsvp "^4.8.5" + silent-error "^1.1.1" + +"@ember-data/adapter@3.12.4": + version "3.12.4" + resolved "https://registry.yarnpkg.com/@ember-data/adapter/-/adapter-3.12.4.tgz#7bcab0f3775d088b978c27e085e0d6906ee944cf" + integrity sha512-uPLEs9ms8dgF3OLaqntH0fh4DfLKT5BcLNqni//xBt2zcDiWnnkTjk6MC1JmfdAgcKlO8T33keKWVFWF+202sg== + dependencies: + "@ember-data/-build-infra" "3.12.4" + ember-cli-babel "^7.8.0" + ember-cli-test-info "^1.0.0" + ember-cli-typescript "^2.0.2" + +"@ember-data/canary-features@3.12.4": + version "3.12.4" + resolved "https://registry.yarnpkg.com/@ember-data/canary-features/-/canary-features-3.12.4.tgz#056075faf9bf6cc81a5e46a4f5936903fb5de196" + integrity sha512-BcmytO4nWHnXQWNA/VPVADTqSo7P+/WA+RUFXQ1FYO/DW++69Ukwm18tZconQvtq/vWeZ4jogSRNWrtpFxbsrw== + dependencies: + ember-cli-babel "^7.8.0" + +"@ember-data/model@3.12.4": + version "3.12.4" + resolved "https://registry.yarnpkg.com/@ember-data/model/-/model-3.12.4.tgz#055270e5eabdc483eabde3459fa272f74093dff6" + integrity sha512-pX42qM+Nw9wx0QOpENczj7lcoCFuAfam6iP/us4WfuD9OeakjZQ1xIhe0igGneYBZRejPwJFliG4AzDli+swpA== + dependencies: + "@ember-data/-build-infra" "3.12.4" + "@ember-data/store" "3.12.4" + ember-cli-babel "^7.8.0" + ember-cli-string-utils "^1.1.0" + ember-cli-test-info "^1.0.0" + ember-cli-typescript "^2.0.2" + inflection "1.12.0" + +"@ember-data/serializer@3.12.4": + version "3.12.4" + resolved "https://registry.yarnpkg.com/@ember-data/serializer/-/serializer-3.12.4.tgz#e3ae7143f0cd736722daa3a640e11dc07c8aef5a" + integrity sha512-63QuQp01AELhsjl558Un/5C3IzgMDGnqPoh9S4FkftNoiZL8mmMOaCvCOJwGlmg2msEmn55ziBLHMwu4jdvByw== + dependencies: + "@ember-data/-build-infra" "3.12.4" + "@ember-data/store" "3.12.4" + ember-cli-babel "^7.8.0" + ember-cli-test-info "^1.0.0" + ember-cli-typescript "^2.0.2" + +"@ember-data/store@3.12.4": + version "3.12.4" + resolved "https://registry.yarnpkg.com/@ember-data/store/-/store-3.12.4.tgz#031930a761bfa5a6d70a6f10525a675f6d6b04a4" + integrity sha512-5mpgiO+uNjZqJDDpCqx3S+f0E6lNi3c8Ec08/GRBZFItEaxU+esjKPmbNlM2bvcD2IGnBGeIJ6qze8ldri/jTw== + dependencies: + "@ember-data/-build-infra" "3.12.4" + "@ember-data/adapter" "3.12.4" + "@ember-data/canary-features" "3.12.4" + ember-cli-babel "^7.8.0" + ember-cli-path-utils "^1.0.0" + ember-cli-typescript "^2.0.2" + heimdalljs "^0.3.0" + +"@ember-decorators/component@^6.1.0": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/component/-/component-6.1.1.tgz#b360dc4fa8e576ee1c840879399ef1745fd96e06" + integrity sha512-Cj8tY/c0MC/rsipqsiWLh3YVN72DK92edPYamD/HzvftwzC6oDwawWk8RmStiBnG9PG/vntAt41l3S7HSSA+1Q== + dependencies: + "@ember-decorators/utils" "^6.1.1" + ember-cli-babel "^7.1.3" + +"@ember-decorators/utils@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@ember-decorators/utils/-/utils-6.1.1.tgz#6b619814942b4fb3747cfa9f540c9f05283d7c5e" + integrity sha512-0KqnoeoLKb6AyoSU65TRF5T85wmS4uDn06oARddwNPxxf/lt5jQlh41uX3W7V/fWL9tPu8x1L1Vvpc80MN1+YA== + dependencies: + ember-cli-babel "^7.1.3" + "@ember/jquery@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@ember/jquery/-/jquery-0.6.0.tgz#5fe9d39b15c9d47fe495302b2a6176059a6267cd" - integrity sha512-O81+JslKE7bsV+5wrhXEmBU1Bpte2u9bm6MLIoRYePvWDo50l7llDW1RM38l1KkeSj/s7iXTsviZ4uunhIcKow== + version "0.6.1" + resolved "https://registry.yarnpkg.com/@ember/jquery/-/jquery-0.6.1.tgz#eef89ebc8d7b49bddc176f2a646746c8f5d93978" + integrity sha512-XMgfUYag97YOYLsC0Ys4/H6mHO2U2wra/92eVIug+5eYBloYSDhv2MY/iq/ocwXVSB2dQaphJx5pFXqdrjEzWQ== dependencies: - broccoli-funnel "^2.0.1" + broccoli-funnel "^2.0.2" broccoli-merge-trees "^3.0.2" - ember-cli-babel "^7.4.0" - ember-cli-version-checker "^3.0.0" - jquery "^3.3.1" - resolve "^1.10.0" + ember-cli-babel "^7.7.3" + ember-cli-version-checker "^3.1.3" + jquery "^3.4.1" + resolve "^1.11.1" "@ember/optional-features@^0.7.0": version "0.7.0" @@ -696,7 +1252,7 @@ silent-error "^1.1.0" util.promisify "^1.0.0" -"@ember/ordered-set@^2.0.0": +"@ember/ordered-set@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@ember/ordered-set/-/ordered-set-2.0.3.tgz#2ac1ca73b3bd116063cae814898832ef434a57f9" integrity sha512-F4yfVk6WMc4AUHxeZsC3CaKyTvO0qSZJy7WWHCFTlVDQw6vubn+FvnGdhzpN1F00EiXMI4Tv1tJdSquHcCnYrA== @@ -704,15 +1260,173 @@ ember-cli-babel "^6.16.0" ember-compatibility-helpers "^1.1.1" -"@ember/test-helpers@^0.7.26": - version "0.7.27" - resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-0.7.27.tgz#c622cabd0cbb95b34efc1e1b6274ab5a14edc138" - integrity sha512-AQESk0FTFxRY6GyZ8PharR4SC7Fju0rXqNkfNYIntAjzefZ8xEqEM4iXDj5h7gAvfx/8dA69AQ9+p7ubc+KvJg== +"@ember/render-modifiers@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@ember/render-modifiers/-/render-modifiers-1.0.1.tgz#a85e746e4bb9fd51302cc43e726e2c641261a7c2" + integrity sha512-HHZwL84jCVAaIDFtPZHAnM41aB8XgvDiutD1tKnll43fw7/rhejGj/LDWdB1jrPF+vryFSSQwSJ85gk4J7W86g== dependencies: - broccoli-funnel "^2.0.1" - ember-assign-polyfill "~2.4.0" - ember-cli-babel "^6.12.0" - ember-cli-htmlbars-inline-precompile "^1.0.0" + ember-cli-babel "^7.10.0" + ember-modifier-manager-polyfill "^1.1.0" + +"@ember/test-helpers@^1.5.0", "@ember/test-helpers@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-1.6.1.tgz#5eb0b58486524c54f1b617a83e4ab327b7c62f07" + integrity sha512-gXLXR0XdZKfyXHFP+QLpG55TlrDtvrZI6TMQVQxdZwsz589kN8idmc01rDjyy53jx430tZTEsdhJvC2LrHXPwg== + dependencies: + broccoli-debug "^0.6.5" + broccoli-funnel "^2.0.2" + ember-assign-polyfill "^2.6.0" + ember-cli-babel "^7.7.3" + ember-cli-htmlbars-inline-precompile "^2.1.0" + ember-test-waiters "^1.0.0" + +"@embroider/core@0.4.3", "@embroider/core@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@embroider/core/-/core-0.4.3.tgz#117973b9761d68aee14d820bbaefeb05d5984ba8" + integrity sha512-n24WU/dGuGDqZrljWoX8raK2wFX3R8iJG0rfCWx+1kW87IvB+ZgS3j4KiZ/S788BA07udrYsrgecYnciG2bBMg== + dependencies: + "@babel/core" "^7.2.2" + "@babel/parser" "^7.3.4" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + "@embroider/macros" "0.4.3" + assert-never "^1.1.0" + babel-plugin-syntax-dynamic-import "^6.18.0" + broccoli-persistent-filter "^2.2.2" + broccoli-plugin "^1.3.0" + broccoli-source "^1.1.0" + debug "^3.1.0" + fast-sourcemap-concat "^1.4.0" + filesize "^4.1.2" + fs-extra "^7.0.1" + fs-tree-diff "^2.0.0" + handlebars "^4.0.11" + js-string-escape "^1.0.1" + jsdom "^12.0.0" + json-stable-stringify "^1.0.1" + lodash "^4.17.10" + pkg-up "^2.0.0" + resolve "^1.8.1" + resolve-package-path "^1.2.2" + semver "^5.5.0" + strip-bom "^3.0.0" + typescript-memoize "^1.0.0-alpha.3" + walk-sync "^1.1.3" + +"@embroider/macros@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-0.4.3.tgz#ea5604b8bd578520f15886a428a6c4fa9481abc0" + integrity sha512-vq/Ny2ULpKxq60Sv5usSrz651dXFM5phP/O5G5MWDY8YOodIkRLGqtub34sB0OmwxpCuTntUzl9P/I4wkyQ3Kw== + dependencies: + "@babel/core" "^7.2.2" + "@babel/traverse" "^7.2.4" + "@babel/types" "^7.3.2" + "@embroider/core" "0.4.3" + resolve "^1.8.1" + semver "^5.6.0" + +"@emotion/cache@^10.0.17", "@emotion/cache@^10.0.9": + version "10.0.19" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.19.tgz#d258d94d9c707dcadaf1558def968b86bb87ad71" + integrity sha512-BoiLlk4vEsGBg2dAqGSJu0vJl/PgVtCYLBFJaEO8RmQzPugXewQCXZJNXTDFaRlfCs0W+quesayav4fvaif5WQ== + dependencies: + "@emotion/sheet" "0.9.3" + "@emotion/stylis" "0.8.4" + "@emotion/utils" "0.11.2" + "@emotion/weak-memoize" "0.2.4" + +"@emotion/core@^10.0.14", "@emotion/core@^10.0.9": + version "10.0.21" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.21.tgz#2e8398d2b92fd90d4ed6ac4d0b66214971de3458" + integrity sha512-U9zbc7ovZ2ceIwbLXYZPJy6wPgnOdTNT4jENZ31ee6v2lojetV5bTbCVk6ciT8G3wQRyVaTTfUCH9WCrMzpRIw== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/cache" "^10.0.17" + "@emotion/css" "^10.0.14" + "@emotion/serialize" "^0.11.10" + "@emotion/sheet" "0.9.3" + "@emotion/utils" "0.11.2" + +"@emotion/css@^10.0.14", "@emotion/css@^10.0.9": + version "10.0.14" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.14.tgz#95dacabdd0e22845d1a1b0b5968d9afa34011139" + integrity sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg== + dependencies: + "@emotion/serialize" "^0.11.8" + "@emotion/utils" "0.11.2" + babel-plugin-emotion "^10.0.14" + +"@emotion/hash@0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" + integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== + +"@emotion/is-prop-valid@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.3.tgz#cbe62ddbea08aa022cdf72da3971570a33190d29" + integrity sha512-We7VBiltAJ70KQA0dWkdPMXnYoizlxOXpvtjmu5/MBnExd+u0PGgV27WCYanmLAbCwAU30Le/xA0CQs/F/Otig== + dependencies: + "@emotion/memoize" "0.7.3" + +"@emotion/memoize@0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.3.tgz#5b6b1c11d6a6dddf1f2fc996f74cf3b219644d78" + integrity sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow== + +"@emotion/serialize@^0.11.10", "@emotion/serialize@^0.11.11", "@emotion/serialize@^0.11.8": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.11.tgz#c92a5e5b358070a7242d10508143306524e842a4" + integrity sha512-YG8wdCqoWtuoMxhHZCTA+egL0RSGdHEc+YCsmiSBPBEDNuVeMWtjEWtGrhUterSChxzwnWBXvzSxIFQI/3sHLw== + dependencies: + "@emotion/hash" "0.7.3" + "@emotion/memoize" "0.7.3" + "@emotion/unitless" "0.7.4" + "@emotion/utils" "0.11.2" + csstype "^2.5.7" + +"@emotion/sheet@0.9.3": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.3.tgz#689f135ecf87d3c650ed0c4f5ddcbe579883564a" + integrity sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A== + +"@emotion/styled-base@^10.0.17": + version "10.0.19" + resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.19.tgz#53655274797194d86453354fdb2c947b46032db6" + integrity sha512-Sz6GBHTbOZoeZQKvkE9gQPzaJ6/qtoQ/OPvyG2Z/6NILlYk60Es1cEcTgTkm26H8y7A0GSgp4UmXl+srvsnFPg== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/is-prop-valid" "0.8.3" + "@emotion/serialize" "^0.11.11" + "@emotion/utils" "0.11.2" + +"@emotion/styled@^10.0.14": + version "10.0.17" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.17.tgz#0cd38b8b36259541f2c6717fc22607a120623654" + integrity sha512-zHMgWjHDMNjD+ux64POtDnjLAObniu3znxFBLSdV/RiEhSLjHIowfvSbbd/C33/3uwtI6Uzs2KXnRZtka/PpAQ== + dependencies: + "@emotion/styled-base" "^10.0.17" + babel-plugin-emotion "^10.0.17" + +"@emotion/stylis@0.8.4": + version "0.8.4" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.4.tgz#6c51afdf1dd0d73666ba09d2eb6c25c220d6fe4c" + integrity sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ== + +"@emotion/unitless@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.4.tgz#a87b4b04e5ae14a88d48ebef15015f6b7d1f5677" + integrity sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ== + +"@emotion/utils@0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.2.tgz#713056bfdffb396b0a14f1c8f18e7b4d0d200183" + integrity sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA== + +"@emotion/weak-memoize@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" + integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== "@glimmer/compiler@^0.38.0": version "0.38.1" @@ -729,6 +1443,11 @@ resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.2.1.tgz#5286b6b32040232b751138f6d006130c728d4b3d" integrity sha512-0D53YVuEgGdHfTl9LGWDZqVzGhn4cT0CXqyAuOYkKFLvqboJXz6SnkRhQNPhhA2hLVrPnvUz3+choQmPhHLGGQ== +"@glimmer/env@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07" + integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc= + "@glimmer/interfaces@^0.38.1": version "0.38.1" resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.38.1.tgz#5b1c174363396b99d6a6bddb35538151e4c4c989" @@ -771,6 +1490,48 @@ resolved "https://registry.yarnpkg.com/@hashicorp/structure-icons/-/structure-icons-1.3.0.tgz#1c7c1cb43a1c1aa92b073a7aa7956495ae14c3e0" integrity sha512-wTKpdaAPphEY2kg5QbQTSUlhqLTpBBR1+1dXp4LYTN0PtMSpetyDDDhcSyvKE8i4h2nwPJBRRfeFlE1snaHd7w== +"@icons/material@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" + integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== + +"@miragejs/pretender-node-polyfill@^0.1.0": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@miragejs/pretender-node-polyfill/-/pretender-node-polyfill-0.1.2.tgz#d26b6b7483fb70cd62189d05c95d2f67153e43f2" + integrity sha512-M/BexG/p05C5lFfMunxo/QcgIJnMT2vDVCd00wNqK2ImZONIlEETZwWJu1QtLxtmYlSHlCFl3JNzp0tLe7OJ5g== + +"@miragejs/server@0.1.27": + version "0.1.27" + resolved "https://registry.yarnpkg.com/@miragejs/server/-/server-0.1.27.tgz#a4e850b28e384a7d92715a538b54074e38e9a931" + integrity sha512-UuhoUFwlZ8Y1lnmQfoNU2EmMmHq5cgbI15GN61nopfUN2KbPX4ZpuCzINcQa1WOlsFBoQzBgzqbacXxjmmT8kg== + dependencies: + "@miragejs/pretender-node-polyfill" "^0.1.0" + inflected "^2.0.4" + lodash.assign "^4.2.0" + lodash.camelcase "^4.3.0" + lodash.clonedeep "^4.5.0" + lodash.compact "^3.0.1" + lodash.find "^4.6.0" + lodash.flatten "^4.4.0" + lodash.forin "^4.4.0" + lodash.get "^4.4.2" + lodash.has "^4.5.2" + lodash.invokemap "^4.6.0" + lodash.isempty "^4.4.0" + lodash.isequal "^4.5.0" + lodash.isfunction "^3.0.9" + lodash.isinteger "^4.0.4" + lodash.isplainobject "^4.0.6" + lodash.lowerfirst "^4.3.1" + lodash.map "^4.6.0" + lodash.mapvalues "^4.6.0" + lodash.pick "^4.4.0" + lodash.snakecase "^4.1.1" + lodash.uniq "^4.5.0" + lodash.uniqby "^4.7.0" + lodash.values "^4.3.0" + pretender "3.0.2" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -784,6 +1545,17 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== +"@reach/router@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.2.1.tgz#34ae3541a5ac44fa7796e5506a5d7274a162be4e" + integrity sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ== + dependencies: + create-react-context "^0.2.1" + invariant "^2.2.3" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + warning "^3.0.0" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" @@ -796,14 +1568,19 @@ resolved "https://registry.yarnpkg.com/@simple-dom/interface/-/interface-1.4.0.tgz#e8feea579232017f89b0138e2726facda6fbb71f" integrity sha512-l5qumKFWU0S+4ZzMaLXFU8tQZsicHEMEyAxI5kDFGhJsRqDwe0a7/iPA/GdxlGyDKseQQAgIz5kzU7eXTrlSpA== -"@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2": +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== + +"@sinonjs/commons@^1", "@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.4.0.tgz#7b3ec2d96af481d7a0321252e7b1c94724ec5a78" integrity sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw== dependencies: type-detect "4.0.8" -"@sinonjs/formatio@^3.0.0", "@sinonjs/formatio@^3.1.0": +"@sinonjs/formatio@^3.1.0", "@sinonjs/formatio@^3.2.1": version "3.2.1" resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e" integrity sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ== @@ -811,15 +1588,10 @@ "@sinonjs/commons" "^1" "@sinonjs/samsam" "^3.1.0" -"@sinonjs/samsam@^2.1.2": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.3.tgz#62cf2a9b624edc795134135fe37fc2ae8ea36be3" - integrity sha512-8zNeBkSKhU9a5cRNbpCKau2WWPfan+Q2zDlcXvXyhn9EsMqgYs4qzo0XHNVlXC6ABQL8fT6nV+zzo5RTHJzyXw== - -"@sinonjs/samsam@^3.1.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.1.tgz#e88c53fbd9d91ad9f0f2b0140c16c7c107fe0d07" - integrity sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw== +"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.1": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.2.tgz#63942e3d5eb0b79f6de3bef9abfad15fb4b6401b" + integrity sha512-ILO/rR8LfAb60Y1Yfp9vxfYAASK43NFC2mLzpvLUbCQY/Qu8YwReboseu8aheCEkyElZF2L2T9mHcR2bgdvZyA== dependencies: "@sinonjs/commons" "^1.0.2" array-from "^2.1.1" @@ -830,6 +1602,372 @@ resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== +"@storybook/addon-knobs@^5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.2.5.tgz#cb3c617d2f017fc98c22b6db4384c90556cc074c" + integrity sha512-jr8HvtGciYaJqWgsl8CVYemcvC0Apw9YaLCV/ez8wmB4im94lmotE4llE+ZgpyIn6U6ikUYjQEeNzUMvEn25Xg== + dependencies: + "@storybook/addons" "5.2.5" + "@storybook/api" "5.2.5" + "@storybook/client-api" "5.2.5" + "@storybook/components" "5.2.5" + "@storybook/core-events" "5.2.5" + "@storybook/theming" "5.2.5" + "@types/react-color" "^3.0.1" + copy-to-clipboard "^3.0.8" + core-js "^3.0.1" + escape-html "^1.0.3" + fast-deep-equal "^2.0.1" + global "^4.3.2" + lodash "^4.17.15" + prop-types "^15.7.2" + qs "^6.6.0" + react-color "^2.17.0" + react-lifecycles-compat "^3.0.4" + react-select "^3.0.0" + +"@storybook/addon-storysource@^5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/addon-storysource/-/addon-storysource-5.2.5.tgz#8a1182e112d011b04f3c00b64700b5cb7b0031ee" + integrity sha512-kZwZdMNYW3LOxSYBkXxWKkaksatdZ0drJ3NWrHI6EbssxjggFyjBzx59aBUULLSIDnmhssugFjq/cpnPMqu/4Q== + dependencies: + "@storybook/addons" "5.2.5" + "@storybook/components" "5.2.5" + "@storybook/router" "5.2.5" + "@storybook/source-loader" "5.2.5" + "@storybook/theming" "5.2.5" + core-js "^3.0.1" + estraverse "^4.2.0" + loader-utils "^1.2.3" + prettier "^1.16.4" + prop-types "^15.7.2" + react-syntax-highlighter "^8.0.1" + regenerator-runtime "^0.12.1" + util-deprecate "^1.0.2" + +"@storybook/addon-viewport@^5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-5.2.5.tgz#5207e2931eb4ddcf0ff69a8ac9b01d8a3fadf89e" + integrity sha512-BmRyJuvSeYMCkfFe8SN5qW5btEa/H/PTCJYSNZ4Iud5ii9x+qeGGlBuOmiv8xa/efygZ88qfNEpZ+vlbrKCZfA== + dependencies: + "@storybook/addons" "5.2.5" + "@storybook/api" "5.2.5" + "@storybook/client-logger" "5.2.5" + "@storybook/components" "5.2.5" + "@storybook/core-events" "5.2.5" + "@storybook/theming" "5.2.5" + core-js "^3.0.1" + global "^4.3.2" + memoizerific "^1.11.3" + prop-types "^15.7.2" + util-deprecate "^1.0.2" + +"@storybook/addons@5.2.5", "@storybook/addons@^5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.2.5.tgz#e3e23d5ea6eb221df31e1a5d125be47454e9a0e8" + integrity sha512-CvMj7Bs3go9tv5rZuAvFwuwe8p/16LDCHS7+5nVFosvcL8nuN339V3rzakw8nLy/S6XKeZ1ACu4t3vYkreRE3w== + dependencies: + "@storybook/api" "5.2.5" + "@storybook/channels" "5.2.5" + "@storybook/client-logger" "5.2.5" + "@storybook/core-events" "5.2.5" + core-js "^3.0.1" + global "^4.3.2" + util-deprecate "^1.0.2" + +"@storybook/api@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.2.5.tgz#dcc68c873820485372a47c095a8fc5e4fb53a34c" + integrity sha512-JvLafqFVgA3dIWpLMoGNk4sRuogE5imhD6/g0d8DOwnCID9xowj5xIptSrCTKvGGGxuN3wWRGn6I2lEbY6969g== + dependencies: + "@storybook/channels" "5.2.5" + "@storybook/client-logger" "5.2.5" + "@storybook/core-events" "5.2.5" + "@storybook/router" "5.2.5" + "@storybook/theming" "5.2.5" + core-js "^3.0.1" + fast-deep-equal "^2.0.1" + global "^4.3.2" + lodash "^4.17.15" + memoizerific "^1.11.3" + prop-types "^15.6.2" + react "^16.8.3" + semver "^6.0.0" + shallow-equal "^1.1.0" + store2 "^2.7.1" + telejson "^3.0.2" + util-deprecate "^1.0.2" + +"@storybook/channel-postmessage@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.2.5.tgz#47397e543a87ea525cbe93f7d85bd8533edc9127" + integrity sha512-GoiC6dUM3YfNKpvj3syxQIQJLHBnH61CfLJzz4xygmn+3keHtjtz6yPHaU4+00MSSP2uDzqePkjgXx4DcLedHA== + dependencies: + "@storybook/channels" "5.2.5" + "@storybook/client-logger" "5.2.5" + core-js "^3.0.1" + global "^4.3.2" + telejson "^3.0.2" + +"@storybook/channels@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.2.5.tgz#d6ca2b490281dacb272096563fe760ccb353c4bb" + integrity sha512-I+zB3ym5ozBcNBqyzZbvB6gRIG/ZKKkqy5k6LwKd5NMx7NU7zU74+LQUBBOcSIrigj8kCArZz7rlgb0tlSKXxQ== + dependencies: + core-js "^3.0.1" + +"@storybook/client-api@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.2.5.tgz#53151a236b6ffc2088acc4535a08e010013e3278" + integrity sha512-n7CAZ3+DZ7EUdmXbq8mXRb+stOavC8GMw3CzjGSo8O6t4rFcMpZQAzjS0YRX1RG/CGFSv9d3R3TNvEBcBGTwRg== + dependencies: + "@storybook/addons" "5.2.5" + "@storybook/channel-postmessage" "5.2.5" + "@storybook/channels" "5.2.5" + "@storybook/client-logger" "5.2.5" + "@storybook/core-events" "5.2.5" + "@storybook/router" "5.2.5" + common-tags "^1.8.0" + core-js "^3.0.1" + eventemitter3 "^4.0.0" + global "^4.3.2" + is-plain-object "^3.0.0" + lodash "^4.17.15" + memoizerific "^1.11.3" + qs "^6.6.0" + util-deprecate "^1.0.2" + +"@storybook/client-logger@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.2.5.tgz#6f386ac6f81b4a783c57d54bb328281abbea1bab" + integrity sha512-6DyYUrMgAvF+th0foH7UNz+2JJpRdvNbpvYKtvi/+hlvRIaI6AqANgLkPUgMibaif5TLzjCr0bLdAYcjeJz03w== + dependencies: + core-js "^3.0.1" + +"@storybook/components@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.2.5.tgz#40190dafbee34f083182255d26c19a0ea50789c8" + integrity sha512-6NVaBJm5wY53e9k+2ZiL2ABsHghE1ssQciLTG3jJPahnM6rfkM8ue66rhxhP88jE9isT48JgOZOJepEyxDz/fg== + dependencies: + "@storybook/client-logger" "5.2.5" + "@storybook/theming" "5.2.5" + "@types/react-syntax-highlighter" "10.1.0" + "@types/react-textarea-autosize" "^4.3.3" + core-js "^3.0.1" + global "^4.3.2" + markdown-to-jsx "^6.9.1" + memoizerific "^1.11.3" + polished "^3.3.1" + popper.js "^1.14.7" + prop-types "^15.7.2" + react "^16.8.3" + react-dom "^16.8.3" + react-focus-lock "^1.18.3" + react-helmet-async "^1.0.2" + react-popper-tooltip "^2.8.3" + react-syntax-highlighter "^8.0.1" + react-textarea-autosize "^7.1.0" + simplebar-react "^1.0.0-alpha.6" + +"@storybook/core-events@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.2.5.tgz#62881164a4a01aa99ff0691e70eaed2dd58e229e" + integrity sha512-O5GM8XEBbYNbM6Z7a4H1bbnbO2cxQrXMhEwansC7a7YinQdkTPiuGxke3NiyK+7pLDh778kpQyjoCjXq6UfAoQ== + dependencies: + core-js "^3.0.1" + +"@storybook/core@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.2.5.tgz#cc04313480a1847aa6881420c675517cc400dc2e" + integrity sha512-R6A6VzSh++pB1a+9DsywW5Mlp0/eauQz1A8m2DrllWcTHTjbn0ZovlG5HBrKjpknFXpCWxkUKE4eTAE2tWsryA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.3.3" + "@babel/plugin-proposal-object-rest-spread" "^7.3.2" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-transform-react-constant-elements" "^7.2.0" + "@babel/preset-env" "^7.4.5" + "@storybook/addons" "5.2.5" + "@storybook/channel-postmessage" "5.2.5" + "@storybook/client-api" "5.2.5" + "@storybook/client-logger" "5.2.5" + "@storybook/core-events" "5.2.5" + "@storybook/node-logger" "5.2.5" + "@storybook/router" "5.2.5" + "@storybook/theming" "5.2.5" + "@storybook/ui" "5.2.5" + airbnb-js-shims "^1 || ^2" + ansi-to-html "^0.6.11" + autoprefixer "^9.4.9" + babel-plugin-add-react-displayname "^0.0.5" + babel-plugin-emotion "^10.0.14" + babel-plugin-macros "^2.4.5" + babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" + boxen "^3.0.0" + case-sensitive-paths-webpack-plugin "^2.2.0" + chalk "^2.4.2" + cli-table3 "0.5.1" + commander "^2.19.0" + common-tags "^1.8.0" + core-js "^3.0.1" + corejs-upgrade-webpack-plugin "^2.2.0" + css-loader "^3.0.0" + detect-port "^1.3.0" + dotenv-webpack "^1.7.0" + ejs "^2.6.1" + express "^4.17.0" + file-loader "^3.0.1" + file-system-cache "^1.0.5" + find-cache-dir "^3.0.0" + fs-extra "^8.0.1" + global "^4.3.2" + html-webpack-plugin "^4.0.0-beta.2" + inquirer "^6.2.0" + interpret "^1.2.0" + ip "^1.1.5" + json5 "^2.1.0" + lazy-universal-dotenv "^3.0.1" + node-fetch "^2.6.0" + open "^6.1.0" + pnp-webpack-plugin "1.4.3" + postcss-flexbugs-fixes "^4.1.0" + postcss-loader "^3.0.0" + pretty-hrtime "^1.0.3" + qs "^6.6.0" + raw-loader "^2.0.0" + react-dev-utils "^9.0.0" + regenerator-runtime "^0.12.1" + resolve "^1.11.0" + resolve-from "^5.0.0" + semver "^6.0.0" + serve-favicon "^2.5.0" + shelljs "^0.8.3" + style-loader "^0.23.1" + terser-webpack-plugin "^1.2.4" + unfetch "^4.1.0" + url-loader "^2.0.1" + util-deprecate "^1.0.2" + webpack "^4.33.0" + webpack-dev-middleware "^3.7.0" + webpack-hot-middleware "^2.25.0" + +"@storybook/ember-cli-storybook@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@storybook/ember-cli-storybook/-/ember-cli-storybook-0.2.0.tgz#c9b0a2512266e9c1a9cb443048c8defa2f00c035" + integrity sha512-367fsOCf9bw7tQHDVU1RBL7qc+f5d3dfj8l0hkAbelFSzcRkH3D2aFXXdBmNHd3NBb2b++mCK5EcWIqvYLOq0w== + dependencies: + broccoli-funnel "^2.0.2" + cheerio "^1.0.0-rc.2" + ember-cli-addon-docs-yuidoc "^0.2.3" + ember-cli-babel "^7.1.2" + +"@storybook/ember@^5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/ember/-/ember-5.2.5.tgz#657270942dc5814c7d92ab0a87ddd51d04aea93b" + integrity sha512-x/6yZasjKEiWr3+I1HVUzUGG7IaxMUVF7S+9q1AymoPptDvBnoRbOi4i7XYSvAkTzlvZevSAcKb32+J3W2+fdw== + dependencies: + "@ember/test-helpers" "^1.5.0" + "@storybook/core" "5.2.5" + common-tags "^1.8.0" + core-js "^3.0.1" + global "^4.3.2" + regenerator-runtime "^0.12.1" + +"@storybook/node-logger@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.2.5.tgz#87f53de795db6eed912b54d3cca82fd7b7857771" + integrity sha512-UNyXGOhOr4Bn9wKwBTZABTBXQzrgvGxPLSmvAFZuMx9ZhqoT/EXAuLUl0/wiJtkyuYpoOOskNwIdKxLBdTKS2w== + dependencies: + chalk "^2.4.2" + core-js "^3.0.1" + npmlog "^4.1.2" + pretty-hrtime "^1.0.3" + regenerator-runtime "^0.12.1" + +"@storybook/router@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.2.5.tgz#a005332bc6aa1e7849503187ad50c41b3f3bef92" + integrity sha512-e6ElDAWSoEW1KSnsTbVwbpzaZ8CNWYw0Ok3b5AHfY2fuSH5L4l6s6k/bP7QSYqvWUeTvkFQYux7A2rOFCriAgA== + dependencies: + "@reach/router" "^1.2.1" + "@types/reach__router" "^1.2.3" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.15" + memoizerific "^1.11.3" + qs "^6.6.0" + +"@storybook/source-loader@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-5.2.5.tgz#8cb856aaaa47116f428bf7330a457e171d96c3fc" + integrity sha512-XPhV4UhJq2h5anQn7ETuHQd/c/qQ/7qKxffVlAMQim4aXGqTKdMe0jHoziG4nyj0hMxWGjqbwHw69fCYI4pCog== + dependencies: + "@storybook/addons" "5.2.5" + "@storybook/router" "5.2.5" + core-js "^3.0.1" + estraverse "^4.2.0" + global "^4.3.2" + loader-utils "^1.2.3" + prettier "^1.16.4" + prop-types "^15.7.2" + regenerator-runtime "^0.12.1" + +"@storybook/theming@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.2.5.tgz#9579e7944f61ded637d1d79be5fb859a617620f5" + integrity sha512-PGZNYrRgAhXFJKnktFpyyKlaDXEhtTi5XPq5ASVJrsPW6l963Mk2EMKSm4TCTxIJhs0Kx4cv2MnNZFDqHf47eg== + dependencies: + "@emotion/core" "^10.0.14" + "@emotion/styled" "^10.0.14" + "@storybook/client-logger" "5.2.5" + common-tags "^1.8.0" + core-js "^3.0.1" + deep-object-diff "^1.1.0" + emotion-theming "^10.0.14" + global "^4.3.2" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + resolve-from "^5.0.0" + +"@storybook/ui@5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.2.5.tgz#0c2c67216e4c808e39cdb48301cafde81b77d074" + integrity sha512-C+5KmeTtdG6xkGXPmFDHPxTcSvVohuFD1399fnzjYhfLlRJ04ix3g16rcyDTxRtrFgFidOyGHdzCypgkdaN8dQ== + dependencies: + "@storybook/addons" "5.2.5" + "@storybook/api" "5.2.5" + "@storybook/channels" "5.2.5" + "@storybook/client-logger" "5.2.5" + "@storybook/components" "5.2.5" + "@storybook/core-events" "5.2.5" + "@storybook/router" "5.2.5" + "@storybook/theming" "5.2.5" + copy-to-clipboard "^3.0.8" + core-js "^3.0.1" + core-js-pure "^3.0.1" + emotion-theming "^10.0.14" + fast-deep-equal "^2.0.1" + fuse.js "^3.4.4" + global "^4.3.2" + lodash "^4.17.15" + markdown-to-jsx "^6.9.3" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + qs "^6.6.0" + react "^16.8.3" + react-dom "^16.8.3" + react-draggable "^4.0.3" + react-helmet-async "^1.0.2" + react-hotkeys "2.0.0-pre4" + react-sizeme "^2.6.7" + regenerator-runtime "^0.13.2" + resolve-from "^5.0.0" + semver "^6.0.0" + store2 "^2.7.1" + telejson "^3.0.2" + util-deprecate "^1.0.2" + "@types/acorn@^4.0.3": version "4.0.5" resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.5.tgz#e29fdf884695e77be4e99e67d748f5147255752d" @@ -837,6 +1975,11 @@ dependencies: "@types/estree" "*" +"@types/broccoli-plugin@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@types/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz#38f8462fecaebc4e09a32e4d4ed1b9808f75bbca" + integrity sha512-SLk4/hFc2kGvgwNFrpn2O1juxFOllcHAywvlo7VwxfExLzoz1GGJ0oIZCwj5fwSpvHw4AWpZjJ1fUvb62PDayQ== + "@types/estree@*", "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" @@ -847,14 +1990,7 @@ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== -"@types/fs-extra@^5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.5.tgz#080d90a792f3fa2c5559eb44bd8ef840aae9104b" - integrity sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A== - dependencies: - "@types/node" "*" - -"@types/glob@*", "@types/glob@^7.1.1": +"@types/glob@^7.1.1": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== @@ -863,6 +1999,16 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/history@*": + version "4.7.3" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.3.tgz#856c99cdc1551d22c22b18b5402719affec9839a" + integrity sha512-cS5owqtwzLN5kY+l+KgKdRJ/Cee8tlmQoGQuIE9tWnSmS3JMKzmxo2HIAk2wODMifGwO20d62xZQLYz+RLfXmw== + +"@types/is-function@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" + integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== + "@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -874,22 +2020,61 @@ integrity sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng== "@types/node@^9.6.0": - version "9.6.47" - resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.47.tgz#655b4a1cc52c8ab08f48cc055061990d6846bc97" - integrity sha512-56wEJWXZs+3XXoTe/OCpdZ6czrONhy+6hT0GdPOb7HvudLTMJ1T5tuZPs37K5cPR5t+J9+vLPFDQgUQ8NWJE1w== + version "9.6.49" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.49.tgz#ab4df6e505db088882c8ce5417ae0bc8cbb7a8a6" + integrity sha512-YY0Okyn4QXC4ugJI+Kng5iWjK8A6eIHiQVaGIhJkyn0YL6Iqo0E0tBC8BuhvYcBK87vykBijM5FtMnCqaa5anA== + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== "@types/q@^1.5.1": version "1.5.2" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== -"@types/rimraf@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.2.tgz#7f0fc3cf0ff0ad2a99bb723ae1764f30acaf8b6e" - integrity sha512-Hm/bnWq0TCy7jmjeN5bKYij9vw5GrDFWME4IuxV08278NtU/VdGbzsBohcCUJ7+QMqmUq5hpRKB39HeQWJjztQ== +"@types/reach__router@^1.2.3": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.2.5.tgz#add874f43b9733175be2b19de59602b91cc90860" + integrity sha512-Lna9cD38dN3deqJ6ThZgMKoAzW1LE3u+uUbPGdHUqquoM/fnZitSV1xfJxHjovu4SsNkpN9udkte3wEyrBPawQ== dependencies: - "@types/glob" "*" - "@types/node" "*" + "@types/history" "*" + "@types/react" "*" + +"@types/react-color@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/react-color/-/react-color-3.0.1.tgz#5433e2f503ea0e0831cbc6fd0c20f8157d93add0" + integrity sha512-J6mYm43Sid9y+OjZ7NDfJ2VVkeeuTPNVImNFITgQNXodHteKfl/t/5pAR5Z9buodZ2tCctsZjgiMlQOpfntakw== + dependencies: + "@types/react" "*" + +"@types/react-syntax-highlighter@10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-10.1.0.tgz#9c534e29bbe05dba9beae1234f3ae944836685d4" + integrity sha512-dF49hC4FZp1dIKyzacOrHvqMUe8U2IXyQCQXOcT1e6n64gLBp+xM6qGtPsThIT9XjiIHSg2W5Jc2V5IqekBfnA== + dependencies: + "@types/react" "*" + +"@types/react-textarea-autosize@^4.3.3": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.4.tgz#9a93f751c91ad5e86387bce75e3b7e11ed195813" + integrity sha512-LLqG27BJGt8ja9x4umQXbnK9pRd0dI23X/GXBcuf476feOZ+e5QiKJYmWOHwAJC3YLl3YixDSigzfF4gzVQZ5w== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "16.9.5" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.5.tgz#079dabd918b19b32118c25fd00a786bb6d0d5e51" + integrity sha512-jQ12VMiFOWYlp+j66dghOWcmDDwhca0bnlcTxS4Qz/fh5gi6wpaZDthPEu/Gc/YlAuO87vbiUXL8qKstFvuOaA== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + +"@types/symlink-or-copy@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#4151a81b4052c80bc2becbae09f3a9ec010a9c7a" + integrity sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg== "@webassemblyjs/ast@1.7.11": version "1.7.11" @@ -900,21 +2085,45 @@ "@webassemblyjs/helper-wasm-bytecode" "1.7.11" "@webassemblyjs/wast-parser" "1.7.11" +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@webassemblyjs/floating-point-hex-parser@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313" integrity sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg== +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + "@webassemblyjs/helper-api-error@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a" integrity sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg== +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + "@webassemblyjs/helper-buffer@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b" integrity sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w== +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + "@webassemblyjs/helper-code-frame@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b" @@ -922,21 +2131,46 @@ dependencies: "@webassemblyjs/wast-printer" "1.7.11" +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/helper-fsm@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181" integrity sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A== +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + "@webassemblyjs/helper-module-context@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209" integrity sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg== +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + "@webassemblyjs/helper-wasm-bytecode@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06" integrity sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ== +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + "@webassemblyjs/helper-wasm-section@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a" @@ -947,6 +2181,16 @@ "@webassemblyjs/helper-wasm-bytecode" "1.7.11" "@webassemblyjs/wasm-gen" "1.7.11" +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/ieee754@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b" @@ -954,6 +2198,13 @@ dependencies: "@xtuc/ieee754" "^1.2.0" +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + "@webassemblyjs/leb128@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63" @@ -961,11 +2212,23 @@ dependencies: "@xtuc/long" "4.2.1" +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + "@webassemblyjs/utf8@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82" integrity sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA== +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + "@webassemblyjs/wasm-edit@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005" @@ -980,6 +2243,20 @@ "@webassemblyjs/wasm-parser" "1.7.11" "@webassemblyjs/wast-printer" "1.7.11" +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/wasm-gen@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8" @@ -991,6 +2268,17 @@ "@webassemblyjs/leb128" "1.7.11" "@webassemblyjs/utf8" "1.7.11" +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/wasm-opt@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7" @@ -1001,6 +2289,16 @@ "@webassemblyjs/wasm-gen" "1.7.11" "@webassemblyjs/wasm-parser" "1.7.11" +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wasm-parser@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a" @@ -1013,6 +2311,18 @@ "@webassemblyjs/leb128" "1.7.11" "@webassemblyjs/utf8" "1.7.11" +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + "@webassemblyjs/wast-parser@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c" @@ -1025,6 +2335,18 @@ "@webassemblyjs/helper-fsm" "1.7.11" "@xtuc/long" "4.2.1" +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + "@webassemblyjs/wast-printer@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813" @@ -1034,10 +2356,14 @@ "@webassemblyjs/wast-parser" "1.7.11" "@xtuc/long" "4.2.1" -"@xg-wang/whatwg-fetch@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@xg-wang/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#f7b222c012a238e7d6e89ed3d72a1e0edb58453d" - integrity sha512-ULtqA6L75RLzTNW68IiOja0XYv4Ebc3OGMzfia1xxSEMpD0mk/pMvkQX0vbCFyQmKc5xGp80Ms2WiSlXLh8hbA== +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -1049,12 +2375,22 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" integrity sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g== +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abortcontroller-polyfill@^1.2.5: +abortcontroller-polyfill@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.3.0.tgz#de69af32ae926c210b7efbcc29bf644ee4838b00" integrity sha512-lbWQgf+eRvku3va8poBlDBO12FigTQr9Zb7NIjXrePrhxWVKdCP2wbDl1tLDaYa18PWTom3UEWwdH13S46I+yA== @@ -1067,6 +2403,14 @@ accepts@~1.3.4, accepts@~1.3.5: mime-types "~2.1.18" negotiator "0.6.1" +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + acorn-dynamic-import@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" @@ -1074,35 +2418,86 @@ acorn-dynamic-import@^3.0.0: dependencies: acorn "^5.0.0" +acorn-globals@^4.3.0: + version "4.3.3" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.3.tgz#a86f75b69680b8780d30edd21eee4e0ea170c05e" + integrity sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + acorn-jsx@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== +acorn@^6.0.1, acorn@^6.0.2, acorn@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + acorn@^6.0.7: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +"airbnb-js-shims@^1 || ^2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.0.tgz#46e1d9d9516f704ef736de76a3b6d484df9a96d8" + integrity sha512-pcSQf1+Kx7/0ibRmxj6rmMYc5V8SHlKu+rkQ80h0bjSLDaIxHg/3PiiFJi4A9mDc01CoBHoc8Fls2G/W0/+s5g== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + array.prototype.flatmap "^1.2.1" + es5-shim "^4.5.13" + es6-shim "^0.35.5" + function.prototype.name "^1.1.0" + globalthis "^1.0.0" + object.entries "^1.1.0" + object.fromentries "^2.0.0 || ^1.0.0" + object.getownpropertydescriptors "^2.0.3" + object.values "^1.1.0" + promise.allsettled "^1.0.0" + promise.prototype.finally "^3.1.0" + string.prototype.matchall "^3.0.1" + string.prototype.padend "^3.0.0" + string.prototype.padstart "^3.0.0" + symbol.prototype.description "^1.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" - integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== ajv@^6.1.0, ajv@^6.5.5, ajv@^6.9.1: version "6.10.0" @@ -1114,6 +2509,16 @@ ajv@^6.1.0, ajv@^6.5.5, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.10.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + amd-name-resolver@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/amd-name-resolver/-/amd-name-resolver-1.2.0.tgz#fc41b3848824b557313897d71f8d5a0184fbe679" @@ -1121,7 +2526,7 @@ amd-name-resolver@1.2.0: dependencies: ensure-posix-path "^1.0.1" -amd-name-resolver@^1.2.0, amd-name-resolver@^1.2.1: +amd-name-resolver@^1.2.0, amd-name-resolver@^1.2.1, amd-name-resolver@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/amd-name-resolver/-/amd-name-resolver-1.3.1.tgz#ffe71c683c6e7191fc4ae1bb3aaed15abea135d9" integrity sha512-26qTEWqZQ+cxSYygZ4Cf8tsjDBLceJahhtewxtKZA3SRa4PluuqYCuheemDQD+7Mf5B7sr+zhTDWAHDh02a1Dw== @@ -1139,16 +2544,28 @@ anser@^1.4.8: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.8.tgz#19a3bfc5f0e31c49efaea38f58fd0d136597f2a3" integrity sha512-tVHucTCKIt9VRrpQKzPtOlwm/3AmyQ7J+QE29ixFnvuE2hm83utEVrN7jJapYkHV6hI0HOHkEX9TOMCzHtwvuA== -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-html@0.0.7, ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1176,6 +2593,13 @@ ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-to-html@^0.6.11, ansi-to-html@^0.6.6: + version "0.6.11" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.11.tgz#5093fc4962186c0e9343dec572a4f71abdc93439" + integrity sha512-88XZtrcwrfkyn6fGstHnkaF1kl7hGtNCYh4vSmItgEV+6JnQHryDBf7udF4f2RhTRQmYvJvPcTtqgaqrxzc9oA== + dependencies: + entities "^1.1.1" + ansicolors@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" @@ -1186,6 +2610,11 @@ any-observable@^0.3.0: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== +any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1201,6 +2630,11 @@ aot-test-generators@^0.1.0: dependencies: jsesc "^2.5.0" +app-root-dir@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" + integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1214,7 +2648,7 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^1.0.7: +argparse@^1.0.7, argparse@~1.0.2: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -1256,6 +2690,14 @@ array-from@^2.1.1: resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-to-error@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/array-to-error/-/array-to-error-1.1.1.tgz#d68812926d14097a205579a667eeaf1856a44c07" @@ -1285,6 +2727,24 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" + integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + +array.prototype.flatmap@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz#3103cd4826ef90019c9b0a4839b2535fa6faf4e9" + integrity sha512-i18e2APdsiezkcqDyZor78Pbfjfds3S94dG6dgIV2ZASJaUf1N0dz2tGdrmwrmlZuNUgxH+wz6Z0zYVH2c5xzQ== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" @@ -1295,6 +2755,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1304,6 +2769,11 @@ asn1.js@^4.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +asn1@0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + integrity sha1-VZvhg3bQik7E2+gId9J4GGObLfc= + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1311,16 +2781,27 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" +assert-never@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.0.tgz#e6597ed9e357f7e62c074dfa7c71e30ed7b67a8b" + integrity sha512-61QPxh2lfV5j2dBsEtwhz8/sUj+baAIuCpQxeWorGeMxlTkbeyGyq7igxJB8yij1JdzUhyoiekNHMXrMYnkjvA== + assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert-plus@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + integrity sha1-7nQAlBMALYTOxyGcasgRgS5yMWA= + assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: + object-assign "^4.1.1" util "0.10.3" assign-symbols@^1.0.0: @@ -1357,9 +2838,9 @@ async-disk-cache@^1.2.1: username-sync "^1.0.2" async-each@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" - integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async-foreach@^0.1.3: version "0.1.3" @@ -1371,7 +2852,15 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== -async-promise-queue@^1.0.3, async-promise-queue@^1.0.4: +async-promise-queue@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/async-promise-queue/-/async-promise-queue-1.0.5.tgz#cb23bce9fce903a133946a700cc85f27f09ea49d" + integrity sha512-xi0aQ1rrjPWYmqbwr18rrSKbSaXIeIwSd1J4KAgVfkq8utNbdZoht7GfvfY6swFUAMJ9obkc4WPJmtGwl+B8dw== + dependencies: + async "^2.4.1" + debug "^2.6.8" + +async-promise-queue@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/async-promise-queue/-/async-promise-queue-1.0.4.tgz#308baafbc74aff66a0bb6e7f4a18d4fe8434440c" integrity sha512-GQ5X3DT+TefYuFPHdvIPXFTlKnh39U7dwtl+aUBGeKjMea9nBpv3c91DXgeyBQmY07vQ97f3Sr9XHqkamEameQ== @@ -1384,7 +2873,7 @@ async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.4.1, async@^2.5.0: +async@^2.4.1: version "2.6.2" resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== @@ -1396,6 +2885,11 @@ async@~0.2.9: resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= +async@~0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1406,6 +2900,24 @@ atob@^2.1.1: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^9.4.9: + version "9.6.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.4.tgz#e6453be47af316b2923eaeaed87860f52ad4b7eb" + integrity sha512-Koz2cJU9dKOxG8P1f8uVaBntOv9lP4yz9ffWvWaicv9gHBPhpQB22nGijwd8gqW9CNT+UdkbQOQNLVI8jN1ZfQ== + dependencies: + browserslist "^4.7.0" + caniuse-lite "^1.0.30000998" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.18" + postcss-value-parser "^4.0.2" + +aws-sign2@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + integrity sha1-xXED96F/wDfwLXwuZLYC6iI/fWM= + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1416,7 +2928,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= @@ -1493,6 +3005,11 @@ babel-helper-define-map@^6.24.1: babel-types "^6.26.0" lodash "^4.17.4" +babel-helper-evaluate-path@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" + integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA== + babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" @@ -1502,6 +3019,11 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-flip-expressions@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd" + integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0= + babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -1529,6 +3051,21 @@ babel-helper-hoist-variables@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-helper-is-nodes-equiv@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" + integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= + +babel-helper-is-void-0@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e" + integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4= + +babel-helper-mark-eval-scopes@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" + integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI= + babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" @@ -1557,6 +3094,11 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-remove-or-void@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" + integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA= + babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" @@ -1569,6 +3111,11 @@ babel-helper-replace-supers@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-to-multiple-sequence-expressions@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" + integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== + babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -1577,6 +3124,16 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-loader@^8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" @@ -1584,6 +3141,11 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-add-react-displayname@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" + integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= + babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" @@ -1606,42 +3168,160 @@ babel-plugin-debug-macros@^0.2.0, babel-plugin-debug-macros@^0.2.0-beta.6: semver "^5.3.0" babel-plugin-debug-macros@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.3.0.tgz#7a025944faef0777804ef3518c54e8b040197397" - integrity sha512-D6qYBI/3+FvcKVnRnH6FBUwXPp/5o/jnJNVFKqVaZpYAWx88+R8jNNyaEX7iQFs7UfCib6rcY/9+ICR4jhjFCQ== + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.3.2.tgz#b536a29386fac76f525bf1b73c4f74cd5281c5fa" + integrity sha512-CslqMZ3RGUvlEERuKr+wrXcHqQGvQ9ALLrbcOt8aSEp4ySfNCHAQbuGQYKZYw3P30/VGkPaR0Begch+dbqgEpg== + dependencies: + semver "^5.3.0" + +babel-plugin-debug-macros@^0.3.2: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-debug-macros/-/babel-plugin-debug-macros-0.3.3.tgz#29c3449d663f61c7385f5b8c72d8015b069a5cb7" + integrity sha512-E+NI8TKpxJDBbVkdWkwHrKgJi696mnRL8XYrOPYw82veNHPDORM9WIQifl6TpIo8PNy2tU2skPqbfkmHXrHKQA== dependencies: semver "^5.3.0" -babel-plugin-ember-modules-api-polyfill@^2.6.0, babel-plugin-ember-modules-api-polyfill@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.8.0.tgz#70244800f750bf1c9f380910c1b2eed1db80ab4a" - integrity sha512-3dlBH92qx8so2pRoks73+gwnuX97d0ajirOr96GwTZMnZxFzVR02c/PQbKWBcxpPqoL8CJSE2onuWM8PWezhOQ== +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-ember-modules-api-polyfill@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.12.0.tgz#a5e703205ba4e625a7fab9bb1aea64ef3222cf75" + integrity sha512-ZQU4quX0TJ1yYyosPy5PFigKdCFEVHJ6H0b3hwjxekIP9CDwzk0OhQuKhCOPti+d52VWjjCjxu2BrXEih29mFw== dependencies: - ember-rfc176-data "^0.3.8" + ember-rfc176-data "^0.3.12" -babel-plugin-ember-modules-api-polyfill@^2.9.0: +babel-plugin-ember-modules-api-polyfill@^2.6.0, babel-plugin-ember-modules-api-polyfill@^2.8.0, babel-plugin-ember-modules-api-polyfill@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-2.9.0.tgz#8503e7b4192aeb336b00265e6235258ff6b754aa" integrity sha512-c03h50291phJ2gQxo/aIOvFQE2c6glql1A7uagE3XbPXpKVAJOUxtVDjvWG6UAB6BC5ynsJfMWvY0w4TPRKIHQ== dependencies: ember-rfc176-data "^0.3.9" +babel-plugin-emotion@^10.0.14, babel-plugin-emotion@^10.0.17: + version "10.0.21" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.21.tgz#9ebeb12edeea3e60a5476b0e07c9868605e65968" + integrity sha512-03o+T6sfVAJhNDcSdLapgv4IeewcFPzxlvBUVdSf7o5PI57ZSxoDvmy+ZulVWSu+rOWAWkEejNcsb29TuzJHbg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@emotion/hash" "0.7.3" + "@emotion/memoize" "0.7.3" + "@emotion/serialize" "^0.11.11" + babel-plugin-macros "^2.0.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + escape-string-regexp "^1.0.5" + find-root "^1.1.0" + source-map "^0.5.7" + babel-plugin-feature-flags@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-feature-flags/-/babel-plugin-feature-flags-0.3.1.tgz#9c827cf9a4eb9a19f725ccb239e85cab02036fc1" integrity sha1-nIJ8+aTrmhn3JcyyOehcqwIDb8E= -babel-plugin-filter-imports@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-0.3.1.tgz#e7859b56886b175dd2616425d277b219e209ea8b" - integrity sha1-54WbVohrF13SYWQl0neyGeIJ6os= +babel-plugin-filter-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-filter-imports/-/babel-plugin-filter-imports-3.0.0.tgz#a849683837ad29960da17492fb32789ab6b09a11" + integrity sha512-p/chjzVTgCxUqyLM0q/pfWVZS7IJTwGQMwNg0LOvuQpKiTftQgZDtkGB8XvETnUw19rRcL7bJCTopSwibTN2tA== + dependencies: + "@babel/types" "^7.4.0" + lodash "^4.17.11" -babel-plugin-htmlbars-inline-precompile@^0.2.5: - version "0.2.6" - resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-0.2.6.tgz#c00b8a3f4b32ca04bf0f0d5169fcef3b5a66d69d" - integrity sha512-H4H75TKGUFij8ukwEYWEERAgrUf16R8NSK1uDPe3QwxT8mnE1K8+/s6DVjUqbM5Pv6lSIcE4XufXdlSX+DTB6g== +babel-plugin-htmlbars-inline-precompile@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-1.0.0.tgz#a9d2f6eaad8a3f3d361602de593a8cbef8179c22" + integrity sha512-4jvKEHR1bAX03hBDZ94IXsYCj3bwk9vYsn6ux6JZNL2U5pvzCWjqyrGahfsGNrhERyxw8IqcirOi9Q6WCo3dkQ== + +babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.4.5: + version "2.6.1" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz#41f7ead616fc36f6a93180e89697f69f51671181" + integrity sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ== + dependencies: + "@babel/runtime" "^7.4.2" + cosmiconfig "^5.2.0" + resolve "^1.10.0" + +babel-plugin-minify-builtins@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b" + integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag== + +babel-plugin-minify-constant-folding@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e" + integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-minify-dead-code-elimination@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz#1a0c68e44be30de4976ca69ffc535e08be13683f" + integrity sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-mark-eval-scopes "^0.4.3" + babel-helper-remove-or-void "^0.4.3" + lodash "^4.17.11" + +babel-plugin-minify-flip-comparisons@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a" + integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo= + dependencies: + babel-helper-is-void-0 "^0.4.3" -babel-plugin-module-resolver@^3.1.1: +babel-plugin-minify-guarded-expressions@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz#818960f64cc08aee9d6c75bec6da974c4d621135" + integrity sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-flip-expressions "^0.4.3" + +babel-plugin-minify-infinity@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca" + integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco= + +babel-plugin-minify-mangle-names@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3" + integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw== + dependencies: + babel-helper-mark-eval-scopes "^0.4.3" + +babel-plugin-minify-numeric-literals@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc" + integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw= + +babel-plugin-minify-replace@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c" + integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q== + +babel-plugin-minify-simplify@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz#f21613c8b95af3450a2ca71502fdbd91793c8d6a" + integrity sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-flip-expressions "^0.4.3" + babel-helper-is-nodes-equiv "^0.0.1" + babel-helper-to-multiple-sequence-expressions "^0.5.0" + +babel-plugin-minify-type-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500" + integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA= + dependencies: + babel-helper-is-void-0 "^0.4.3" + +babel-plugin-module-resolver@^3.1.1, babel-plugin-module-resolver@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== @@ -1667,6 +3347,11 @@ babel-plugin-syntax-exponentiation-operator@^6.8.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" @@ -1695,7 +3380,7 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.26.0: +babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= @@ -1880,6 +3565,33 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-inline-consecutive-adds@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" + integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE= + +babel-plugin-transform-member-expression-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" + integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= + +babel-plugin-transform-merge-sibling-variables@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" + integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= + +babel-plugin-transform-minify-booleans@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" + integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= + +babel-plugin-transform-property-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" + integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= + dependencies: + esutils "^2.0.2" + babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" @@ -1887,6 +3599,33 @@ babel-plugin-transform-regenerator@^6.22.0: dependencies: regenerator-transform "^0.10.0" +babel-plugin-transform-regexp-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965" + integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU= + +babel-plugin-transform-remove-console@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" + integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= + +babel-plugin-transform-remove-debugger@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" + integrity sha1-QrcnYxyXl44estGZp67IShgznvI= + +babel-plugin-transform-remove-undefined@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd" + integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-transform-simplify-comparison-operators@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" + integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= + babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" @@ -1895,6 +3634,11 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-plugin-transform-undefined-to-void@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" + integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= + babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" @@ -1940,6 +3684,35 @@ babel-preset-env@^1.7.0: invariant "^2.2.2" semver "^5.3.0" +"babel-preset-minify@^0.5.0 || 0.6.0-alpha.5": + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz#25f5d0bce36ec818be80338d0e594106e21eaa9f" + integrity sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg== + dependencies: + babel-plugin-minify-builtins "^0.5.0" + babel-plugin-minify-constant-folding "^0.5.0" + babel-plugin-minify-dead-code-elimination "^0.5.1" + babel-plugin-minify-flip-comparisons "^0.4.3" + babel-plugin-minify-guarded-expressions "^0.4.4" + babel-plugin-minify-infinity "^0.4.3" + babel-plugin-minify-mangle-names "^0.5.0" + babel-plugin-minify-numeric-literals "^0.4.3" + babel-plugin-minify-replace "^0.5.0" + babel-plugin-minify-simplify "^0.5.1" + babel-plugin-minify-type-constructors "^0.4.3" + babel-plugin-transform-inline-consecutive-adds "^0.4.3" + babel-plugin-transform-member-expression-literals "^6.9.4" + babel-plugin-transform-merge-sibling-variables "^6.9.4" + babel-plugin-transform-minify-booleans "^6.9.4" + babel-plugin-transform-property-literals "^6.9.4" + babel-plugin-transform-regexp-constructors "^0.4.3" + babel-plugin-transform-remove-console "^6.9.4" + babel-plugin-transform-remove-debugger "^6.9.4" + babel-plugin-transform-remove-undefined "^0.5.0" + babel-plugin-transform-simplify-comparison-operators "^6.9.4" + babel-plugin-transform-undefined-to-void "^6.9.4" + lodash "^4.17.11" + babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" @@ -2002,11 +3775,6 @@ babel6-plugin-strip-class-callcheck@^6.0.0: resolved "https://registry.yarnpkg.com/babel6-plugin-strip-class-callcheck/-/babel6-plugin-strip-class-callcheck-6.0.0.tgz#de841c1abebbd39f78de0affb2c9a52ee228fddf" integrity sha1-3oQcGr6705943gr/ssmlLuIo/d8= -babel6-plugin-strip-heimdall@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/babel6-plugin-strip-heimdall/-/babel6-plugin-strip-heimdall-6.0.1.tgz#35f80eddec1f7fffdc009811dfbd46d9965072b6" - integrity sha1-NfgO3ewff//cAJgR371G2ZZQcrY= - babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -2064,6 +3832,11 @@ basic-auth@~2.0.0: dependencies: safe-buffer "5.1.2" +batch-processor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" + integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -2110,11 +3883,16 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.1.1, bluebird@^3.4.6, bluebird@^3.5.3: +bluebird@^3.1.1, bluebird@^3.4.6: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== +bluebird@^3.3.5, bluebird@^3.5.5: + version "3.7.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.0.tgz#56a6a886e03f6ae577cffedeb524f8f2450293cf" + integrity sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -2136,6 +3914,22 @@ body-parser@1.18.3: raw-body "2.3.3" type-is "~1.6.16" +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + body@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" @@ -2151,7 +3945,14 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bower-config@^1.3.0: +boom@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" + integrity sha1-emNune1O/O+xnO9JR6PGffrukRs= + dependencies: + hoek "0.9.x" + +bower-config@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/bower-config/-/bower-config-1.4.1.tgz#85fd9df367c2b8dbbd0caa4c5f2bad40cd84c2cc" integrity sha1-hf2d82fCuNu9DKpMXyutQM2Ewsw= @@ -2167,6 +3968,20 @@ bower-endpoint-parser@0.2.2: resolved "https://registry.yarnpkg.com/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz#00b565adbfab6f2d35addde977e97962acbcb3f6" integrity sha1-ALVlrb+rby01rd3pd+l5Yqy8s/Y= +boxen@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb" + integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^2.4.2" + cli-boxes "^2.2.0" + string-width "^3.0.0" + term-size "^1.2.0" + type-fest "^0.3.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2191,10 +4006,10 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -broccoli-amd-funnel@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/broccoli-amd-funnel/-/broccoli-amd-funnel-1.3.0.tgz#c4426b4fce976e44295bd74f34725f53bdeb08e3" - integrity sha512-QLjCWblDW//a/5/ivDikVPRHiA+d/1K45meHZA6lAlpHC1c216rcZQYpdlo9PiOJiI4T3tKqDaaM1CDeFDCoVQ== +broccoli-amd-funnel@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/broccoli-amd-funnel/-/broccoli-amd-funnel-2.0.1.tgz#dbdbfd28841731342d538126567c25bea3f15310" + integrity sha512-VRE+0PYAN4jQfkIq3GKRj4U/4UV9rVpLan5ll6fVYV4ziVg4OEfR5GUnILEg++QtR4xSaugRxCPU5XJLDy3bNQ== dependencies: broccoli-plugin "^1.3.0" symlink-or-copy "^1.2.0" @@ -2251,6 +4066,23 @@ broccoli-babel-transpiler@^7.1.2: rsvp "^4.8.4" workerpool "^3.1.1" +broccoli-babel-transpiler@^7.2.0, broccoli-babel-transpiler@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-7.3.0.tgz#a0ad3a37dbf74469664bbca403d652070c2c1317" + integrity sha512-tsXNvDf3gp6g8rGkz234AhbaIRUsCdd6CM3ikfkJVB0EpC8ZAczGsFKTjENLy1etx4s7FkruW/QjI7Wfdhx6Ng== + dependencies: + "@babel/core" "^7.3.3" + "@babel/polyfill" "^7.0.0" + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^3.0.2" + broccoli-persistent-filter "^2.2.1" + clone "^2.1.2" + hash-for-dep "^1.4.7" + heimdalljs-logger "^0.1.9" + json-stable-stringify "^1.0.1" + rsvp "^4.8.4" + workerpool "^3.1.1" + broccoli-builder@^0.18.14: version "0.18.14" resolved "https://registry.yarnpkg.com/broccoli-builder/-/broccoli-builder-0.18.14.tgz#4b79e2f844de11a4e1b816c3f49c6df4776c312d" @@ -2298,7 +4130,7 @@ broccoli-clean-css@^1.1.0: inline-source-map-comment "^1.0.5" json-stable-stringify "^1.0.0" -broccoli-concat@^3.2.2, broccoli-concat@^3.5.1, broccoli-concat@^3.7.1: +broccoli-concat@^3.2.2, broccoli-concat@^3.7.1, broccoli-concat@^3.7.3: version "3.7.3" resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-3.7.3.tgz#0dca01311567ffb13180e6b4eb111824628e4885" integrity sha512-2Ma9h81EJ0PRb9n4sW0i8KZlcnpTQfKxcj87zvi5DFe1fd8CTDEdseHDotK2beuA2l+LbgVPfd8EHaBJKm/Y8g== @@ -2389,6 +4221,25 @@ broccoli-funnel-reducer@^1.0.0: resolved "https://registry.yarnpkg.com/broccoli-funnel-reducer/-/broccoli-funnel-reducer-1.0.0.tgz#11365b2a785aec9b17972a36df87eef24c5cc0ea" integrity sha1-ETZbKnha7JsXlyo234fu8kxcwOo= +broccoli-funnel@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-2.0.1.tgz#6823c73b675ef78fffa7ab800f083e768b51d449" + integrity sha512-C8Lnp9TVsSSiZMGEF16C0dCiNg2oJqUKwuZ1K4kVC6qRPG/2Cj/rtB5kRCC9qEbwqhX71bDbfHROx0L3J7zXQg== + dependencies: + array-equal "^1.0.0" + blank-object "^1.0.1" + broccoli-plugin "^1.3.0" + debug "^2.2.0" + fast-ordered-set "^1.0.0" + fs-tree-diff "^0.5.3" + heimdalljs "^0.2.0" + minimatch "^3.0.0" + mkdirp "^0.5.0" + path-posix "^1.0.0" + rimraf "^2.4.3" + symlink-or-copy "^1.0.0" + walk-sync "^0.3.1" + broccoli-funnel@^1.0.0, broccoli-funnel@^1.0.1, broccoli-funnel@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-1.2.0.tgz#cddc3afc5ff1685a8023488fff74ce6fb5a51296" @@ -2519,6 +4370,11 @@ broccoli-node-info@^1.1.0: resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-1.1.0.tgz#3aa2e31e07e5bdb516dd25214f7c45ba1c459412" integrity sha1-OqLjHgflvbUW3SUhT3xFuhxFlBI= +broccoli-node-info@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/broccoli-node-info/-/broccoli-node-info-2.1.0.tgz#ca84560e8570ff78565bea1699866ddbf58ad644" + integrity sha512-l6qDuboJThHfRVVWQVaTs++bFdrFTP0gJXgsWenczc1PavRVUmL1Eyb2swTAXXMpDOnr2zhNOBLx4w9AxkqbPQ== + broccoli-persistent-filter@^1.1.5, broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.4.3: version "1.4.6" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-1.4.6.tgz#80762d19000880a77da33c34373299c0f6a3e615" @@ -2538,7 +4394,7 @@ broccoli-persistent-filter@^1.1.5, broccoli-persistent-filter@^1.1.6, broccoli-p symlink-or-copy "^1.0.1" walk-sync "^0.3.1" -broccoli-persistent-filter@^2.1.0, broccoli-persistent-filter@^2.1.1, broccoli-persistent-filter@^2.2.1: +broccoli-persistent-filter@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.2.2.tgz#e0180e75ede5dd05d4c702f24f6c049e93fba915" integrity sha512-PW12RD1yY+x5SASUADuUMJce+dVSmjBO3pV1rLNHmT1C31rp1P++TvX7AgUObFmGhL7qlwviSdhMbBkY1v3G2w== @@ -2557,6 +4413,26 @@ broccoli-persistent-filter@^2.1.0, broccoli-persistent-filter@^2.1.1, broccoli-p symlink-or-copy "^1.0.1" walk-sync "^1.0.0" +broccoli-persistent-filter@^2.1.1, broccoli-persistent-filter@^2.2.1, broccoli-persistent-filter@^2.2.2, broccoli-persistent-filter@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-2.3.1.tgz#4a052e0e0868b344c3a2977e35a3d497aa9eca72" + integrity sha512-hVsmIgCDrl2NFM+3Gs4Cr2TA6UPaIZip99hN8mtkaUPgM8UeVnCbxelCvBjUBHo0oaaqP5jzqqnRVvb568Yu5g== + dependencies: + async-disk-cache "^1.2.1" + async-promise-queue "^1.0.3" + broccoli-plugin "^1.0.0" + fs-tree-diff "^2.0.0" + hash-for-dep "^1.5.0" + heimdalljs "^0.2.1" + heimdalljs-logger "^0.1.7" + mkdirp "^0.5.1" + promise-map-series "^0.2.1" + rimraf "^2.6.1" + rsvp "^4.7.0" + symlink-or-copy "^1.0.1" + sync-disk-cache "^1.3.3" + walk-sync "^1.0.0" + broccoli-plugin@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.1.0.tgz#73e2cfa05f8ea1e3fc1420c40c3d9e7dc724bf02" @@ -2577,6 +4453,16 @@ broccoli-plugin@^1.0.0, broccoli-plugin@^1.1.0, broccoli-plugin@^1.2.0, broccoli rimraf "^2.3.4" symlink-or-copy "^1.1.8" +broccoli-plugin@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-2.1.0.tgz#2fab6c578219cfcc64f773e9616073313fc8b334" + integrity sha512-ElE4caljW4slapyEhSD9jU9Uayc8SoSABWdmY9SqbV8DHNxU6xg1jJsPcMm+cXOvggR3+G+OXAYQeFjWVnznaw== + dependencies: + promise-map-series "^0.2.1" + quick-temp "^0.1.3" + rimraf "^2.3.4" + symlink-or-copy "^1.1.8" + broccoli-rollup@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/broccoli-rollup/-/broccoli-rollup-2.1.1.tgz#0b77dc4b7560a53e998ea85f3b56772612d4988d" @@ -2594,6 +4480,21 @@ broccoli-rollup@^2.1.1: symlink-or-copy "^1.1.8" walk-sync "^0.3.1" +broccoli-rollup@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/broccoli-rollup/-/broccoli-rollup-4.1.1.tgz#7531a24d88ddab9f1bace1c6ee6e6ca74a38d36f" + integrity sha512-hkp0dB5chiemi32t6hLe5bJvxuTOm1TU+SryFlZIs95KT9+94uj0C8w6k6CsZ2HuIdIZg6D252t4gwOlcTXrpA== + dependencies: + "@types/broccoli-plugin" "^1.3.0" + broccoli-plugin "^2.0.0" + fs-tree-diff "^2.0.1" + heimdalljs "^0.2.6" + node-modules-path "^1.0.1" + rollup "^1.12.0" + rollup-pluginutils "^2.8.1" + symlink-or-copy "^1.2.0" + walk-sync "^1.1.3" + broccoli-sass-source-maps@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/broccoli-sass-source-maps/-/broccoli-sass-source-maps-2.2.0.tgz#1f1a0794136152b096188638b59b42b17a4bdc68" @@ -2660,7 +4561,7 @@ broccoli-stew@^1.5.0: symlink-or-copy "^1.2.0" walk-sync "^0.3.0" -broccoli-stew@^2.0.0, broccoli-stew@^2.0.1: +broccoli-stew@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-2.1.0.tgz#ba73add17fda3b9b01d8cfb343a8b613b7136a0a" integrity sha512-tgCkuTWYl4uf7k7ib2D79KFEj2hCgnTUNPMnrCoAha0/4bywcNccmaZVWtL9Ex37yX5h5eAbnM/ak2ULoMwSSw== @@ -2716,11 +4617,44 @@ broccoli-uglify-sourcemap@^2.1.1: walk-sync "^0.3.2" workerpool "^2.3.0" +broccoli@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/broccoli/-/broccoli-3.2.0.tgz#6b5a89b8d6d0c733d39aa23ac5b43d85f56fafab" + integrity sha512-n58yqAbV2Zbg+HXmBGBOUoDOgbCM0hMJtqvnPDF89Jwk3ZBVhD5/UKW0diY6l3DbB5+j92NCDQVd9HqO+WYFYA== + dependencies: + ansi-html "^0.0.7" + broccoli-node-info "^2.1.0" + broccoli-slow-trees "^3.0.1" + broccoli-source "^1.1.0" + commander "^2.15.1" + connect "^3.6.6" + console-ui "^3.0.4" + esm "^3.2.4" + findup-sync "^2.0.0" + handlebars "^4.0.11" + heimdalljs "^0.2.6" + heimdalljs-logger "^0.1.9" + https "^1.0.0" + mime-types "^2.1.19" + promise.prototype.finally "^3.1.0" + resolve-path "^1.4.0" + rimraf "^2.6.2" + sane "^4.0.0" + tmp "0.0.33" + tree-sync "^1.2.2" + underscore.string "^3.2.2" + watch-detector "^0.1.0" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -2780,6 +4714,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" +browserslist@4.7.0, browserslist@^4.6.6, browserslist@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" + integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== + dependencies: + caniuse-lite "^1.0.30000989" + electron-to-chromium "^1.3.247" + node-releases "^1.1.29" + browserslist@^3.1.1, browserslist@^3.2.6: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" @@ -2788,14 +4731,14 @@ browserslist@^3.1.1, browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -browserslist@^4.0.0, browserslist@^4.4.2, browserslist@^4.5.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.3.tgz#969495c410314bc89f14e748505e58be968080f1" - integrity sha512-Tx/Jtrmh6vFg24AelzLwCaCq1IUJiMDM1x/LPzqbmbktF8Zo7F9ONUpOWsFK6TtdON95mSMaQUWqi0ilc8xM6g== +browserslist@^4.0.0, browserslist@^4.6.0: + version "4.6.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.4.tgz#fd0638b3f8867fec2c604ed0ed9300379f8ec7c2" + integrity sha512-ErJT8qGfRt/VWHSr1HeqZzz50DvxHtr1fVL1m5wf20aGrG8e1ce8fpZ2EjZEfs09DDZYSvtRaDlMpWslBf8Low== dependencies: - caniuse-lite "^1.0.30000955" - electron-to-chromium "^1.3.122" - node-releases "^1.1.12" + caniuse-lite "^1.0.30000981" + electron-to-chromium "^1.3.188" + node-releases "^1.1.25" bser@^2.0.0: version "2.0.0" @@ -2866,22 +4809,48 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -cacache@^11.0.2: - version "11.3.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" - integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^11.3.2: + version "11.3.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" + integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== dependencies: - bluebird "^3.5.3" + bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" - glob "^7.1.3" + glob "^7.1.4" graceful-fs "^4.1.15" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" move-concurrently "^1.0.1" promise-inflight "^1.0.1" - rimraf "^2.6.2" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" ssri "^6.0.1" unique-filename "^1.1.1" y18n "^4.0.0" @@ -2901,6 +4870,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + calculate-cache-key-for-tree@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-1.2.3.tgz#5a5e4fcfa2d374a63e47fe967593f179e8282825" @@ -2908,6 +4890,13 @@ calculate-cache-key-for-tree@^1.1.0: dependencies: json-stable-stringify "^1.0.1" +calculate-cache-key-for-tree@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-2.0.0.tgz#7ac57f149a4188eacb0a45b210689215d3fef8d6" + integrity sha512-Quw8a6y8CPmRd6eU+mwypktYCwUcf8yVFIRbNZ6tPQEckX9yd+EBVEPC/GSZZrMWH9e7Vz4pT7XhpmyApRByLQ== + dependencies: + json-stable-stringify "^1.0.1" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -2942,6 +4931,14 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -2965,6 +4962,11 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + can-symlink@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/can-symlink/-/can-symlink-1.0.0.tgz#97b607d8a84bb6c6e228b902d864ecb594b9d219" @@ -2972,6 +4974,11 @@ can-symlink@^1.0.0: dependencies: tmp "0.0.28" +can-use-dom@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" + integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -2982,17 +4989,22 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000955: - version "1.0.30000955" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000955.tgz#360fdb9a1e41d6dd996130411334e44a39e4446d" - integrity sha512-6AwmIKgqCYfDWWadRkAuZSHMQP4Mmy96xAXEdRBlN/luQhlRYOKgwOlZ9plpCOsVbBuqbTmGqDK3JUM/nlr8CA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000981: + version "1.0.30000983" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000983.tgz#ab3c70061ca2a3467182a10ac75109b199b647f8" + integrity sha512-/llD1bZ6qwNkt41AsvjsmwNOoA4ZB+8iqmf5LVyeSXuBODT/hAMFNVOh84NdUzoiYiSKqo5vQ3ZzeYHSi/olDQ== -capture-exit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= +caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30000998: + version "1.0.30000999" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000999.tgz#427253a69ad7bea4aa8d8345687b8eec51ca0e43" + integrity sha512-1CUyKyecPeksKwXZvYw0tEoaMCo/RwBlXmEtN5vVnabvO0KPd9RQLcaAuR9/1F+KDMv6esmOFWlsXuzDk+8rxg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: - rsvp "^3.3.3" + rsvp "^4.8.4" cardinal@^1.0.0: version "1.0.0" @@ -3002,6 +5014,11 @@ cardinal@^1.0.0: ansicolors "~0.2.1" redeyed "~1.0.0" +case-sensitive-paths-webpack-plugin@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e" + integrity sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -3012,6 +5029,15 @@ ceibo@~2.0.0: resolved "https://registry.yarnpkg.com/ceibo/-/ceibo-2.0.0.tgz#9a61eb054a91c09934588d4e45d9dd2c3bf04eee" integrity sha1-mmHrBUqRwJk0WI1ORdndLDvwTu4= +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -3023,14 +5049,20 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" +character-entities-legacy@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" + integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== + +character-entities@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" + integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== + +character-reference-invalid@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" + integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== chardet@^0.4.0: version "0.4.2" @@ -3049,6 +5081,18 @@ charm@^1.0.0: dependencies: inherits "^2.0.1" +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" + integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.1" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + chokidar@^2.0.0, chokidar@^2.0.2: version "2.1.5" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d" @@ -3068,23 +5112,37 @@ chokidar@^2.0.0, chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.7" +chokidar@^2.0.4: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== -chrome-trace-event@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" - integrity sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A== +chrome-trace-event@^1.0.0, chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== dependencies: tslib "^1.9.0" -ci-info@^1.1.3: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -3108,6 +5166,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classnames@^2.2.5: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + clean-base-url@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clean-base-url/-/clean-base-url-1.0.0.tgz#c901cf0a20b972435b0eccd52d056824a4351b7b" @@ -3130,17 +5193,22 @@ clean-css@^3.4.5: commander "2.8.x" source-map "0.4.x" +clean-css@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + dependencies: + source-map "~0.6.0" + clean-up-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clean-up-path/-/clean-up-path-1.0.0.tgz#de9e8196519912e749c9eaf67c13d64fac72a3e5" integrity sha512-PHGlEF0Z6976qQyN6gM7kKH6EH0RdfZcc8V+QhFe36eRxV0SMH5OUBZG7Bxa9YcreNzyNbK63cGiZxdSZgosRw== -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= - dependencies: - restore-cursor "^1.0.1" +cli-boxes@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" + integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" @@ -3149,10 +5217,20 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-spinners@^1.1.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" - integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== +cli-spinners@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" + integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== + +cli-table3@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" cli-table@^0.3.1: version "0.3.1" @@ -3201,6 +5279,13 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -3216,7 +5301,7 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -coa@~2.0.1: +coa@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== @@ -3230,10 +5315,10 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -codemirror@~5.15.0: - version "5.15.2" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.15.2.tgz#58b3dc732c6d10d7aae806f4c7cdd56a9b87fe8f" - integrity sha1-WLPccyxtENeq6Ab0x83VapuH/o8= +codemirror@^5.47.0: + version "5.49.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.49.2.tgz#c84fdaf11b19803f828b0c67060c7bc6d154ccad" + integrity sha512-dwJ2HRPHm8w51WB5YTF9J7m6Z5dtkqbU9ntMZ1dqXyFB9IpjoUFDj80ahRVEoVanfIp6pfASJbOlbWdEf8FOzQ== collection-visit@^1.0.0: version "1.0.0" @@ -3260,10 +5345,10 @@ colors@1.0.3: resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.7" @@ -3272,6 +5357,18 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +combined-stream@~0.0.4: + version "0.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" + integrity sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8= + dependencies: + delayed-stream "0.0.5" + +comma-separated-tokens@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59" + integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ== + commander@2.12.2: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" @@ -3284,12 +5381,22 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.14.1, commander@^2.19.0, commander@^2.6.0, commander@^2.9.0, commander@~2.19.0: +commander@^2.14.1, commander@^2.6.0, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== -common-tags@^1.4.0: +commander@^2.15.1, commander@^2.19.0, commander@^2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +commander@~2.20.0, commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +common-tags@^1.4.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -3304,11 +5411,16 @@ component-bind@1.0.0: resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= -component-emitter@1.2.1, component-emitter@^1.2.1: +component-emitter@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" @@ -3321,7 +5433,7 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.38.0 < 2" -compression@^1.7.3: +compression@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== @@ -3339,7 +5451,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.4.7, concat-stream@^1.5.0: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -3361,6 +5473,16 @@ configstore@^4.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +connect@^3.6.6: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -3373,17 +5495,16 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -console-ui@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/console-ui/-/console-ui-2.2.3.tgz#134b92e632f2c0088f78e52b20f1ca22a95b9a91" - integrity sha512-aZm49rntsv264Fw/DM56Z2ehLg1DDxrqof2jFcZOgC03S0nRGSYFIVPx5TbGssrgBhgCvGBY+9mmk0+t/nWXEA== +console-ui@^3.0.2, console-ui@^3.0.4: + version "3.1.1" + resolved "https://registry.yarnpkg.com/console-ui/-/console-ui-3.1.1.tgz#681a0414e8b0a23ed679d0a2802e39d920801171" + integrity sha512-22y+uk4AGq9quz6kofKQjkeCIAm86+MTxT/RZMFm8fMArP2lAkzxjUjNyrw7S6wXnnB+qRnC+/2ANMTke68RTQ== dependencies: chalk "^2.1.0" - inquirer "^2" + inquirer "^6" json-stable-stringify "^1.0.1" - ora "^2.0.0" - through "^2.3.8" - user-info "^1.0.0" + ora "^3.4.0" + through2 "^3.0.1" consolidate@^0.15.1: version "0.15.1" @@ -3402,6 +5523,13 @@ content-disposition@0.5.2: resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -3412,7 +5540,7 @@ continuable-cache@^0.3.1: resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -convert-source-map@^1.1.0, convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== @@ -3429,6 +5557,11 @@ cookie@0.3.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -3451,31 +5584,46 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.0.tgz#cd9810b8000742535a4a43773866185e310bd4f7" - integrity sha512-W/Ppz34uUme3LmXWjMgFlYyGnbo1hd9JvA0LNQ4EmieqVjg2GPYbj3H6tcdP2QGPGWdRKUqZVbVKLNIFVs/HiA== +copy-to-clipboard@^3.0.8: + version "3.2.0" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.2.0.tgz#d2724a3ccbfed89706fac8a894872c979ac74467" + integrity sha512-eOZERzvCmxS8HWzugj4Uxl8OJxa7T2k1Gi0X5qavwydHIfuSHq2dTD09LOg/XyGq4Zpb5IsR/2OJ5lbOegz78w== dependencies: - browserslist "^4.5.1" - core-js "3.0.0" - core-js-pure "3.0.0" - semver "^5.6.0" + toggle-selection "^1.0.6" -core-js-pure@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.0.0.tgz#a5679adb4875427c8c0488afc93e6f5b7125859b" - integrity sha512-yPiS3fQd842RZDgo/TAKGgS0f3p2nxssF1H65DIZvZv0Od5CygP8puHXn3IQiM/39VAvgCbdaMQpresrbGgt9g== +core-js-compat@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150" + integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A== + dependencies: + browserslist "^4.6.6" + semver "^6.3.0" -core-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" - integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ== +core-js-pure@^3.0.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.2.1.tgz#879a23699cff46175bfd2d09158b5c50645a3c45" + integrity sha512-+qpvnYrsi/JDeQTArB7NnNc2VoMYLE1YSkziCDHgjexC2KH7OFiGhLUd3urxfyWmNjSwSW7NYXPWHMhuIJx9Ow== + +core-js@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4= + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.6.5: version "2.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== +core-js@^3.0.1, core-js@^3.0.4: + version "3.2.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09" + integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw== + core-object@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/core-object/-/core-object-3.1.5.tgz#fa627b87502adc98045e44678e9a8ec3b9c0d2a9" @@ -3488,6 +5636,24 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +corejs-upgrade-webpack-plugin@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" + integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== + dependencies: + resolve-from "^5.0.0" + webpack "^4.38.0" + +cosmiconfig@^5.0.0, cosmiconfig@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + cosmiconfig@^5.0.2, cosmiconfig@^5.0.7: version "5.2.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" @@ -3529,6 +5695,33 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-react-context@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3" + integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag== + dependencies: + fbjs "^0.8.0" + gud "^1.0.0" + +create-react-context@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" + integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + +cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -3546,16 +5739,12 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== +cryptiles@0.2.x: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" + integrity sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw= dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" + boom "0.4.x" crypto-browserify@^3.11.0: version "3.12.0" @@ -3579,20 +5768,56 @@ crypto-random-string@^1.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= -css-select-base-adapter@~0.1.0: +css-loader@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.0.tgz#bb570d89c194f763627fcf1f80059c6832d009b2" + integrity sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.17" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.1.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.0" + schema-utils "^2.0.0" + +css-select-base-adapter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== -css-select@~1.3.0-rc0: - version "1.3.0-rc0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.3.0-rc0.tgz#6f93196aaae737666ea1036a8cb14a8fcb7a9231" - integrity sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE= +css-select@^1.1.0, css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= dependencies: - boolbase "^1.0.0" + boolbase "~1.0.0" css-what "2.1" domutils "1.5.1" - nth-check "^1.0.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" + integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ== + dependencies: + boolbase "^1.0.0" + css-what "^2.1.2" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.28: + version "1.0.0-alpha.28" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" + integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w== + dependencies: + mdn-data "~1.1.0" + source-map "^0.5.3" css-tree@1.0.0-alpha.29: version "1.0.0-alpha.29" @@ -3602,31 +5827,50 @@ css-tree@1.0.0-alpha.29: mdn-data "~1.1.0" source-map "^0.5.3" -css-tree@1.0.0-alpha25: - version "1.0.0-alpha25" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha25.tgz#1bbfabfbf6eeef4f01d9108ff2edd0be2fe35597" - integrity sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A== - dependencies: - mdn-data "^1.0.0" - source-map "^0.5.3" - css-url-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= -css-what@2.1: +css-what@2.1, css-what@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== -csso@^3.5.0: +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csso@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== dependencies: css-tree "1.0.0-alpha.29" +cssom@0.3.x, cssom@^0.3.4: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== + dependencies: + cssom "0.3.x" + +csstype@^2.2.0, csstype@^2.5.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" + integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== + +ctype@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + integrity sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8= + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -3752,6 +5996,15 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + date-fns@^1.27.2: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" @@ -3769,21 +6022,21 @@ date-time@^2.1.0: dependencies: time-zone "^1.0.0" -debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.0.1, debug@^3.1.0, debug@^3.2.6: +debug@^3.0.1, debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@~4.1.0: +debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -3807,6 +6060,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -3822,6 +6082,11 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-object-diff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" + integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -3870,6 +6135,11 @@ del@^3.0.0: pify "^3.0.0" rimraf "^2.2.8" +delayed-stream@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" + integrity sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8= + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -3925,11 +6195,32 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3939,6 +6230,14 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -3953,7 +6252,21 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@0: +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== + dependencies: + "@babel/runtime" "^7.1.2" + +dom-serializer@0, dom-serializer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== @@ -3961,16 +6274,35 @@ dom-serializer@0: domelementtype "^1.3.0" entities "^1.1.1" +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0: +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -3979,12 +6311,59 @@ domutils@1.5.1: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +dotenv-defaults@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.0.2.tgz#441cf5f067653fca4bbdce9dd3b803f6f84c585d" + integrity sha512-iXFvHtXl/hZPiFj++1hBg4lbKwGM+t/GlvELDnRtOFdjXyWP7mubkVr+eZGWG62kdsbulXAef6v/j6kiWc/xGA== + dependencies: + dotenv "^6.2.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv-webpack@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.7.0.tgz#4384d8c57ee6f405c296278c14a9f9167856d3a1" + integrity sha512-wwNtOBW/6gLQSkb8p43y0Wts970A3xtNiG/mpwj9MLUhtPCQG6i+/DSXXoNN7fbPCU/vQ7JjwGmgOeGZSSZnsw== dependencies: - is-obj "^1.0.0" + dotenv-defaults "^1.0.2" + +dotenv@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" + integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== + +dotenv@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.1.0.tgz#d811e178652bfb8a1e593c6dd704ec7e90d85ea2" + integrity sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" @@ -3996,6 +6375,11 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +duration-js@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/duration-js/-/duration-js-4.0.0.tgz#ab91575a4f1a6b096034685cfc6ea9aca99cd63f" + integrity sha1-q5FXWk8aawlgNGhc/G6prKmc1j8= + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -4014,7 +6398,22 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.122, electron-to-chromium@^1.3.47: +ejs@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228" + integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== + +electron-to-chromium@^1.3.188: + version "1.3.189" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.189.tgz#aa84055eb36d364a68852ad2d25e1315a1d06196" + integrity sha512-C26Kv6/rLNmGDaPR5HORMtTQat9aWBBKjQk9aFtN1Bk6cQBSw8cYdsel/mcrQlNlMMjt1sAKsTYqf77+sK2uTw== + +electron-to-chromium@^1.3.247: + version "1.3.277" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.277.tgz#38b7b297f9b3f67ea900a965c1b11a555de526ec" + integrity sha512-Czmsrgng89DOgJlIknnw9bn5431QdtnUwGp5YYiPwU1DbZQUxCLF+rc1ZC09VNAdalOPcvH6AE8BaA0H5HjI/w== + +electron-to-chromium@^1.3.47: version "1.3.122" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.122.tgz#b32a0805f48557bd3c3b8104eadc7fa511b14a9a" integrity sha512-3RKoIyCN4DhP2dsmleuFvpJAIDOseWH88wFYBzb22CSwoFDSWRc4UAMfrtc9h8nBdJjTNIN3rogChgOy6eFInw== @@ -4024,10 +6423,17 @@ elegant-spinner@^1.0.1: resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +element-resize-detector@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.1.15.tgz#48eba1a2eaa26969a4c998d972171128c971d8d2" + integrity sha512-16/5avDegXlUxytGgaumhjyQoM6hpp5j3+L79sYq5hlXfTNRy5WMMuTVWkZU3egp/CokCmTmvf18P3KeB57Iog== + dependencies: + batch-processor "^1.0.0" + elliptic@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" - integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== + version "6.5.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" + integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -4045,23 +6451,26 @@ ember-ajax@^5.0.0: ember-cli-babel "^7.5.0" najax "^1.0.3" -ember-assign-polyfill@~2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/ember-assign-polyfill/-/ember-assign-polyfill-2.4.0.tgz#acb00466f7d674b3e6b030acfe255b3b1f6472e1" - integrity sha512-0SnGQb9CenRqbZdIa1KFsEjT+1ijGWfAbCSaDbg5uVa5l6HPdppuTzOXK6sfEQMsd2nbrp27QWFy7W5VX6l4Ag== +ember-assign-polyfill@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ember-assign-polyfill/-/ember-assign-polyfill-2.6.0.tgz#07847e3357ee35b33f886a0b5fbec6873f6860eb" + integrity sha512-Y8NzOmHI/g4PuJ+xC14eTYiQbigNYddyHB8FY2kuQMxThTEIDE7SJtgttJrYYcPciOu0Tnb5ff36iO46LeiXkw== dependencies: - ember-cli-babel "^6.6.0" + ember-cli-babel "^6.16.0" ember-cli-version-checker "^2.0.0" ember-auto-import@^1.2.19, ember-auto-import@^1.2.21: - version "1.2.21" - resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.2.21.tgz#e02ded183844faba66c3f2af97028ef35175b837" - integrity sha512-coHnqO3mRnlj/JAQSQBEqzX2wL8rH5YrfEJMzk1102X9MdSX1CWeaUYBcyjvI/pG8fHUhv+4VsD6rQuhTUyZUQ== + version "1.5.2" + resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.5.2.tgz#e97ed96b600caa6090ffed83e4611c3e7ec9bad7" + integrity sha512-skVQpfdc6G5OVRsyemDn3vI1nj/iBBgnoqRLRka0ZbDT2GqelmyJ86bp+Bd/ztJe45Le3we+LXbR7T54RU5A9w== dependencies: "@babel/core" "^7.1.6" + "@babel/preset-env" "^7.0.0" "@babel/traverse" "^7.1.6" "@babel/types" "^7.1.6" + "@embroider/core" "^0.4.3" babel-core "^6.26.3" + babel-loader "^8.0.6" babel-plugin-syntax-dynamic-import "^6.18.0" babel-template "^6.26.0" babylon "^6.18.0" @@ -4072,7 +6481,7 @@ ember-auto-import@^1.2.19, ember-auto-import@^1.2.21: enhanced-resolve "^4.0.0" fs-extra "^6.0.1" fs-tree-diff "^1.0.0" - handlebars "~4.0.13" + handlebars "~4.1.2" js-string-escape "^1.0.1" lodash "^4.17.10" mkdirp "^0.5.1" @@ -4080,24 +6489,76 @@ ember-auto-import@^1.2.19, ember-auto-import@^1.2.21: resolve "^1.7.1" rimraf "^2.6.2" symlink-or-copy "^1.2.0" + typescript-memoize "^1.0.0-alpha.3" walk-sync "^0.3.3" webpack "~4.28" -ember-basic-dropdown@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-1.1.2.tgz#6558eb2aa34d2feeb66e9de1feea560d46edc697" - integrity sha512-l38MNIUOI1nAKxSUlDI1wrP52a55HxN2dikDUwJOqx7NytK0/woPyy3uVUe7gfT2gJ4HCbRlL/7y0csvP0iMPg== +ember-basic-dropdown@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/ember-basic-dropdown/-/ember-basic-dropdown-2.0.5.tgz#72a8a9c1196d5f84f6b849aa21c3cf8ea7830668" + integrity sha512-wG7v9uk5uIozLFx919Wa40xmLXE5jL1d+HKkUxWQJ1vqZCh8S7MjmYIAuluxNFfegEnCtLd+9iDSdZzEEwTtPg== + dependencies: + "@ember-decorators/component" "^6.1.0" + "@ember/render-modifiers" "^1.0.0" + ember-cli-babel "^7.11.0" + ember-cli-htmlbars "^3.1.0" + ember-element-helper "^0.1.1" + ember-maybe-in-element "^0.4.0" + ember-truth-helpers "2.1.0" + +ember-can@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ember-can/-/ember-can-2.0.0.tgz#b01400380b42aedd9570b89521997a34677feab6" + integrity sha512-4c0HcXUC1HiNwGmW7Gp72Ojhlr/uULQTdJp85up4G3MjonCdV0ZdvPLsMIQITBgWqWY/H5HezMjrdaIDFuEDBA== dependencies: - ember-cli-babel "^7.2.0" - ember-cli-htmlbars "^3.0.1" - ember-maybe-in-element "^0.2.0" + ember-cli-babel "7.8.0" + ember-inflector "3.0.1" + +ember-cli-addon-docs-yuidoc@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ember-cli-addon-docs-yuidoc/-/ember-cli-addon-docs-yuidoc-0.2.3.tgz#13f7943c7ef1909d74ef9d33a719236117c17262" + integrity sha512-W1ASMlYnWS18qkyN4ducCAH/APQ5AljNH4rGXV81Ly6I6XHgh7WnQZdXD5eQqjc9XoruC/92hqBIIl27ykShKQ== + dependencies: + broccoli-caching-writer "^3.0.3" + ember-cli-babel "^7.7.3" + fs-extra "^5.0.0" + json-api-serializer "^1.11.0" + lodash "^4.17.5" + yuidocjs "^0.10.2" -ember-cli-babel-plugin-helpers@^1.1.0: +ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.0.tgz#de3baedd093163b6c2461f95964888c1676325ac" integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA== -ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.11.0, ember-cli-babel@^6.12.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.18.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.7.2, ember-cli-babel@^6.8.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.0: +ember-cli-babel@7.8.0, ember-cli-babel@^7.1.0, ember-cli-babel@^7.7.3: + version "7.8.0" + resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.8.0.tgz#e596500eca0f5a7c9aaee755f803d1542f578acf" + integrity sha512-xUBgJQ81fqd7k/KIiGU+pjpoXhrmmRf9pUrqLenNSU5N+yeNFT5a1+w0b+p1F7oBphfXVwuxApdZxrmAHOdA3Q== + dependencies: + "@babel/core" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.3.4" + "@babel/plugin-proposal-decorators" "^7.3.0" + "@babel/plugin-transform-modules-amd" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.2.0" + "@babel/polyfill" "^7.0.0" + "@babel/preset-env" "^7.0.0" + "@babel/runtime" "^7.2.0" + amd-name-resolver "^1.2.1" + babel-plugin-debug-macros "^0.3.0" + babel-plugin-ember-modules-api-polyfill "^2.9.0" + babel-plugin-module-resolver "^3.1.1" + broccoli-babel-transpiler "^7.1.2" + broccoli-debug "^0.6.4" + broccoli-funnel "^2.0.1" + broccoli-source "^1.1.0" + clone "^2.1.2" + ember-cli-babel-plugin-helpers "^1.1.0" + ember-cli-version-checker "^2.1.2" + ensure-posix-path "^1.0.2" + semver "^5.5.0" + +ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-beta.7, ember-cli-babel@^6.11.0, ember-cli-babel@^6.16.0, ember-cli-babel@^6.18.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.7.2, ember-cli-babel@^6.8.0, ember-cli-babel@^6.8.1, ember-cli-babel@^6.8.2, ember-cli-babel@^6.9.0: version "6.18.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA== @@ -4116,7 +6577,7 @@ ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.0.0-be ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.2.0, ember-cli-babel@^7.4.0, ember-cli-babel@^7.5.0: +ember-cli-babel@^7.1.2, ember-cli-babel@^7.5.0: version "7.7.3" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.7.3.tgz#f94709f6727583d18685ca6773a995877b87b8a0" integrity sha512-/LWwyKIoSlZQ7k52P+6agC7AhcOBqPJ5C2u27qXHVVxKvCtg6ahNuRk/KmfZmV4zkuw4EjTZxfJE1PzpFyHkXg== @@ -4143,10 +6604,10 @@ ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.2.0, ember-cl ensure-posix-path "^1.0.2" semver "^5.5.0" -ember-cli-babel@^7.7.3: - version "7.8.0" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.8.0.tgz#e596500eca0f5a7c9aaee755f803d1542f578acf" - integrity sha512-xUBgJQ81fqd7k/KIiGU+pjpoXhrmmRf9pUrqLenNSU5N+yeNFT5a1+w0b+p1F7oBphfXVwuxApdZxrmAHOdA3Q== +ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.7.0, ember-cli-babel@^7.8.0: + version "7.12.0" + resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.12.0.tgz#064997d199384be8c88d251f30ef67953d3bddc5" + integrity sha512-+EGQsbPvh19nNXHCm6rVBx2CdlxQlzxMyhey5hsGViDPriDI4PFYXYaFWdGizDrmZoDcG/Ywpeph3hl0NxGQTg== dependencies: "@babel/core" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.3.4" @@ -4158,9 +6619,9 @@ ember-cli-babel@^7.7.3: "@babel/runtime" "^7.2.0" amd-name-resolver "^1.2.1" babel-plugin-debug-macros "^0.3.0" - babel-plugin-ember-modules-api-polyfill "^2.9.0" + babel-plugin-ember-modules-api-polyfill "^2.12.0" babel-plugin-module-resolver "^3.1.1" - broccoli-babel-transpiler "^7.1.2" + broccoli-babel-transpiler "^7.3.0" broccoli-debug "^0.6.4" broccoli-funnel "^2.0.1" broccoli-source "^1.1.0" @@ -4170,16 +6631,16 @@ ember-cli-babel@^7.7.3: ensure-posix-path "^1.0.2" semver "^5.5.0" -ember-cli-broccoli-sane-watcher@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-2.2.2.tgz#9bb1b04ddeb2c086aecd8693cbaeca1d88dc160c" - integrity sha512-9OLy8x3pdNKC/6xR00IjTL8XyiQU3rb2HLyQSAqHuaZpZcSTKkbAse2ERTsELSINoo/zi/W7qPP5vd5SsHsraw== +ember-cli-broccoli-sane-watcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-3.0.0.tgz#dc1812c047e1ceec4413d3c41b51a9ffc61b4cfe" + integrity sha512-sLn+wy6FJpGMHtSwAGUjQK3nJFvw2b6H8bR2EgMIXxkUI3DYFLi6Xnyxm02XlMTcfTxF10yHFhHJe0O+PcJM7A== dependencies: broccoli-slow-trees "^3.0.1" heimdalljs "^0.2.1" heimdalljs-logger "^0.1.7" rsvp "^3.0.18" - sane "^2.4.1" + sane "^4.0.0" ember-cli-clipboard@^0.13.0: version "0.13.0" @@ -4192,10 +6653,10 @@ ember-cli-clipboard@^0.13.0: ember-cli-htmlbars "^3.0.1" fastboot-transform "^0.1.3" -ember-cli-dependency-checker@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-3.1.0.tgz#b39c6b537a1457d77892edf5ddcfa025cd1401e2" - integrity sha512-Y/V2senOyIjQnZohYeZeXs59rWHI2m8KRF9IesMv1ypLRSc/h/QS6UX51wAyaZnxcgU6ljFXpqL5x38UxM3XzA== +ember-cli-dependency-checker@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-3.2.0.tgz#9202ad9e14d6fda33cffc22a11c343c2a8885330" + integrity sha512-dkSmcJ/jY/2ms/S6ph2jXSfOW5VfOpLfg5DFEbra0SaMNgYkNDFF1o0U4OdTsG37L5h/AXWNuVtnOa4TMabz9Q== dependencies: chalk "^2.3.0" find-yarn-workspace-root "^1.1.0" @@ -4243,12 +6704,12 @@ ember-cli-head@^0.4.0: ember-cli-babel "^6.11.0" ember-cli-htmlbars "^2.0.3" -ember-cli-htmlbars-inline-precompile@^1.0.0, ember-cli-htmlbars-inline-precompile@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-1.0.5.tgz#312e050c9e3dd301c55fb399fd706296cd0b1d6a" - integrity sha512-/CNEqPxroIcbY6qejrt704ZaghHLCntZKYLizFfJ2esirXoJx6fuYKBY1YyJ8GOgjfbHHKjBZuK4vFFJpkGqkQ== +ember-cli-htmlbars-inline-precompile@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-2.1.0.tgz#61b91ff1879d44ae504cadb46fb1f2604995ae08" + integrity sha512-BylIHduwQkncPhnj0ZyorBuljXbTzLgRo6kuHf1W+IHFxThFl2xG+r87BVwsqx4Mn9MTgW9SE0XWjwBJcSWd6Q== dependencies: - babel-plugin-htmlbars-inline-precompile "^0.2.5" + babel-plugin-htmlbars-inline-precompile "^1.0.0" ember-cli-version-checker "^2.1.2" hash-for-dep "^1.2.3" heimdalljs-logger "^0.1.9" @@ -4264,14 +6725,14 @@ ember-cli-htmlbars@^2.0.3: json-stable-stringify "^1.0.0" strip-bom "^3.0.0" -ember-cli-htmlbars@^3.0.0, ember-cli-htmlbars@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-3.0.1.tgz#01e21f0fd05e0a6489154f26614b1041769e3e58" - integrity sha512-pyyB2s52vKTXDC5svU3IjU7GRLg2+5O81o9Ui0ZSiBS14US/bZl46H2dwcdSJAK+T+Za36ZkQM9eh1rNwOxfoA== +ember-cli-htmlbars@^3.0.1, ember-cli-htmlbars@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-3.1.0.tgz#87806c2a0bca2ab52d4fb8af8e2215c1ca718a99" + integrity sha512-cgvRJM73IT0aePUG7oQ/afB7vSRBV3N0wu9BrWhHX2zkR7A7cUBI7KC9VPk6tbctCXoM7BRGsCC4aIjF7yrfXA== dependencies: - broccoli-persistent-filter "^1.4.3" - hash-for-dep "^1.2.3" - json-stable-stringify "^1.0.0" + broccoli-persistent-filter "^2.3.1" + hash-for-dep "^1.5.1" + json-stable-stringify "^1.0.1" strip-bom "^3.0.0" ember-cli-import-polyfill@^0.2.0: @@ -4297,28 +6758,22 @@ ember-cli-lodash-subset@^2.0.1: resolved "https://registry.yarnpkg.com/ember-cli-lodash-subset/-/ember-cli-lodash-subset-2.0.1.tgz#20cb68a790fe0fde2488ddfd8efbb7df6fe766f2" integrity sha1-IMtop5D+D94kiN39jvu332/nZvI= -ember-cli-mirage@^0.4.3: - version "0.4.15" - resolved "https://registry.yarnpkg.com/ember-cli-mirage/-/ember-cli-mirage-0.4.15.tgz#dcf878e785853232d8ac725bb425aa545da63e79" - integrity sha512-5wCycS40pkohNPaLcyCn5BUjJ/4PGK9lz6j1tftJms5tBQhSjkZ37+pfhVKh3iYSId/+z0RTxVknykQH4P0sQA== +ember-cli-mirage@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ember-cli-mirage/-/ember-cli-mirage-1.1.2.tgz#582598aa599649601401b79a021b4ded5155907f" + integrity sha512-0qgP5sBheXkrpea+R8dGA0LLsj9SEg6adafNdZ1RzA+nIPC8hE+UEzDQNFqRiZv/fPfdWSDnwQboaHDLiu9hqw== dependencies: - "@xg-wang/whatwg-fetch" "^3.0.0" + "@miragejs/server" "0.1.27" broccoli-file-creator "^2.1.1" broccoli-funnel "^2.0.1" broccoli-merge-trees "^3.0.2" - broccoli-stew "^2.0.1" broccoli-string-replace "^0.1.2" - chalk "^1.1.1" + chalk "^2.4.2" ember-auto-import "^1.2.19" - ember-cli-babel "^6.16.0" - ember-cli-node-assets "^0.2.2" + ember-cli-babel "^7.5.0" ember-get-config "^0.2.2" ember-inflector "^2.0.0 || ^3.0.0" - fake-xml-http-request "^2.0.0" - faker "^3.0.0" - lodash "^4.17.11" - pretender "2.1.1" - route-recognizer "^0.3.4" + lodash-es "^4.17.11" ember-cli-moment-shim@^3.5.0: version "3.7.1" @@ -4356,9 +6811,9 @@ ember-cli-normalize-entity-name@^1.0.0: silent-error "^1.0.0" ember-cli-page-object@^1.15.1: - version "1.15.2" - resolved "https://registry.yarnpkg.com/ember-cli-page-object/-/ember-cli-page-object-1.15.2.tgz#24d0ee60f64d9ae34fb8fa5bec9df46b62654c72" - integrity sha512-uUlUWeIkBCmqO2/PWInQgNu9I7YXj/Vfd566ddTRE5VHErM4B9XaNE2dRBM9J0ub1JKeWZaBByqP/hDNADRxxQ== + version "1.15.3" + resolved "https://registry.yarnpkg.com/ember-cli-page-object/-/ember-cli-page-object-1.15.3.tgz#4b1814e270367a455353aeb81019fb8d8c641886" + integrity sha512-wGZqQnsyFHcJilf0xcWa53my/bprtZWHXg7m6wZPbWbnJCXNf1aAouj9uwH77r3PnE+/uYt0MIKMfX3Cnd607g== dependencies: broccoli-file-creator "^2.1.1" broccoli-merge-trees "^2.0.0" @@ -4374,7 +6829,7 @@ ember-cli-path-utils@^1.0.0: resolved "https://registry.yarnpkg.com/ember-cli-path-utils/-/ember-cli-path-utils-1.0.0.tgz#4e39af8b55301cddc5017739b77a804fba2071ed" integrity sha1-Tjmvi1UwHN3FAXc5t3qAT7ogce0= -ember-cli-preprocess-registry@^3.1.2: +ember-cli-preprocess-registry@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/ember-cli-preprocess-registry/-/ember-cli-preprocess-registry-3.3.0.tgz#685837a314fbe57224bd54b189f4b9c23907a2de" integrity sha512-60GYpw7VPeB7TvzTLZTuLTlHdOXvayxjAQ+IxM2T04Xkfyu75O2ItbWlftQW7NZVGkaCsXSRAmn22PG03VpLMA== @@ -4384,14 +6839,6 @@ ember-cli-preprocess-registry@^3.1.2: debug "^3.0.1" process-relative-require "^1.0.0" -ember-cli-qunit@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/ember-cli-qunit/-/ember-cli-qunit-4.4.0.tgz#0edd7d651001d0d7ea200b9236a4733a5b7420f1" - integrity sha512-+gkx380AV4WXYjQeIuQi675STL9K12fHFtxs8B9u3EFbw45vJKrnYR4Vph3FujxhE/1pr/Je8kZEPAuezZAVLw== - dependencies: - ember-cli-babel "^6.11.0" - ember-qunit "^3.5.0" - ember-cli-sass@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/ember-cli-sass/-/ember-cli-sass-10.0.0.tgz#700094ebaf348896111756c2644f1e444b05323c" @@ -4481,6 +6928,24 @@ ember-cli-test-loader@^2.2.0: dependencies: ember-cli-babel "^6.8.1" +ember-cli-typescript@^2.0.0, ember-cli-typescript@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ember-cli-typescript/-/ember-cli-typescript-2.0.2.tgz#464984131fbdc05655eb61d1c3cdd911d3137f0d" + integrity sha512-7I5azCTxOgRDN8aSSnJZIKSqr+MGnT+jLTUbBYqF8wu6ojs2DUnTePxUcQMcvNh3Q3B1ySv7Q/uZFSjdU9gSjA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.1.0" + "@babel/plugin-transform-typescript" "~7.4.0" + ansi-to-html "^0.6.6" + debug "^4.0.0" + ember-cli-babel-plugin-helpers "^1.0.0" + execa "^1.0.0" + fs-extra "^7.0.0" + resolve "^1.5.0" + rsvp "^4.8.1" + semver "^6.0.0" + stagehand "^1.0.0" + walk-sync "^1.0.0" + ember-cli-uglify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-2.1.0.tgz#4a0641fe4768d7ab7d4807aca9924cc77c544184" @@ -4489,13 +6954,6 @@ ember-cli-uglify@^2.1.0: broccoli-uglify-sourcemap "^2.1.1" lodash.defaultsdeep "^4.6.0" -ember-cli-valid-component-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-valid-component-name/-/ember-cli-valid-component-name-1.0.0.tgz#71550ce387e0233065f30b30b1510aa2dfbe87ef" - integrity sha1-cVUM44fgIzBl8wswsVEKot++h+8= - dependencies: - silent-error "^1.0.0" - ember-cli-version-checker@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-1.3.1.tgz#0bc2d134c830142da64bf9627a0eded10b61ae72" @@ -4511,7 +6969,7 @@ ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.0, ember-cli-ve resolve "^1.3.3" semver "^5.3.0" -ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.1.2: +ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.1.2, ember-cli-version-checker@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-3.1.3.tgz#7c9b4f5ff30fdebcd480b1c06c4de43bb51c522c" integrity sha512-PZNSvpzwWgv68hcXxyjREpj3WWb81A7rtYNQq1lLEgrWIchF8ApKJjWP3NBpHjaatwILkZAV8klair5WFlXAKg== @@ -4519,98 +6977,103 @@ ember-cli-version-checker@^3.0.0, ember-cli-version-checker@^3.1.2: resolve-package-path "^1.2.6" semver "^5.6.0" -ember-cli@~3.4.4: - version "3.4.4" - resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.4.4.tgz#8d25b223b2ef3b863310099192da92ab1feeef6b" - integrity sha512-opbdqt9AbNRPr/amemwqi9ENbx/HcqcprxJAW/y8nZAV1gAku+xPY4WNBF6KuClVEKkddbNi4jITLU59rlJcDA== +ember-cli@~3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-3.12.0.tgz#e6d27e4c57fc44eb7963fe4611b3b0cfb9d9558d" + integrity sha512-hON3/thKAIcwzHX9SWIvf+UR2sQTWyXzyECYw20NDvUSydZMVtggK4GQncu7LSiUs+5zIxT8ZPzanpUZMINuCg== dependencies: - amd-name-resolver "^1.2.0" - babel-plugin-transform-es2015-modules-amd "^6.24.1" - bower-config "^1.3.0" + "@babel/core" "^7.4.3" + "@babel/plugin-transform-modules-amd" "^7.2.0" + amd-name-resolver "^1.3.1" + babel-plugin-module-resolver "^3.2.0" + bower-config "^1.4.1" bower-endpoint-parser "0.2.2" - broccoli-amd-funnel "^1.3.0" - broccoli-babel-transpiler "^6.5.0" + broccoli "^3.1.1" + broccoli-amd-funnel "^2.0.1" + broccoli-babel-transpiler "^7.2.0" broccoli-builder "^0.18.14" - broccoli-concat "^3.5.1" + broccoli-concat "^3.7.3" broccoli-config-loader "^1.0.1" broccoli-config-replace "^1.1.2" - broccoli-debug "^0.6.4" - broccoli-funnel "^2.0.1" + broccoli-debug "^0.6.5" + broccoli-funnel "^2.0.2" broccoli-funnel-reducer "^1.0.0" - broccoli-merge-trees "^3.0.0" + broccoli-merge-trees "^3.0.2" broccoli-middleware "^2.0.1" broccoli-module-normalizer "^1.3.0" broccoli-module-unification-reexporter "^1.0.0" + broccoli-slow-trees "^3.0.1" broccoli-source "^1.1.0" - broccoli-stew "^2.0.0" - calculate-cache-key-for-tree "^1.1.0" - capture-exit "^1.2.0" - chalk "^2.4.1" - ci-info "^1.1.3" + broccoli-stew "^2.1.0" + calculate-cache-key-for-tree "^2.0.0" + capture-exit "^2.0.0" + chalk "^2.4.2" + ci-info "^2.0.0" clean-base-url "^1.0.0" - compression "^1.7.3" + compression "^1.7.4" configstore "^4.0.0" - console-ui "^2.2.2" + console-ui "^3.0.2" core-object "^3.1.5" dag-map "^2.0.2" - diff "^3.5.0" - ember-cli-broccoli-sane-watcher "^2.1.1" + diff "^4.0.1" + ember-cli-broccoli-sane-watcher "^3.0.0" ember-cli-is-package-missing "^1.0.0" ember-cli-lodash-subset "^2.0.1" ember-cli-normalize-entity-name "^1.0.0" - ember-cli-preprocess-registry "^3.1.2" + ember-cli-preprocess-registry "^3.3.0" ember-cli-string-utils "^1.1.0" + ember-source-channel-url "^1.1.0" ensure-posix-path "^1.0.2" - execa "^0.10.0" + execa "^1.0.0" exit "^0.1.2" - express "^4.16.3" - filesize "^3.6.1" + express "^4.16.4" + filesize "^4.1.2" find-up "^3.0.0" - find-yarn-workspace-root "^1.1.0" - fixturify-project "^1.5.3" - fs-extra "^7.0.0" - fs-tree-diff "^0.5.7" - get-caller-file "^1.0.0" - git-repo-info "^2.0.0" - glob "^7.1.2" - heimdalljs "^0.2.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + fs-tree-diff "^2.0.1" + get-caller-file "^2.0.5" + git-repo-info "^2.1.0" + glob "^7.1.4" + heimdalljs "^0.2.6" heimdalljs-fs-monitor "^0.2.2" - heimdalljs-graph "^0.3.4" - heimdalljs-logger "^0.1.9" + heimdalljs-graph "^0.3.5" + heimdalljs-logger "^0.1.10" http-proxy "^1.17.0" inflection "^1.12.0" is-git-url "^1.0.0" isbinaryfile "^3.0.3" - js-yaml "^3.12.0" + js-yaml "^3.13.1" json-stable-stringify "^1.0.1" leek "0.0.24" lodash.template "^4.4.0" markdown-it "^8.4.2" markdown-it-terminal "0.1.0" minimatch "^3.0.4" - morgan "^1.9.0" - node-modules-path "^1.0.1" + morgan "^1.9.1" nopt "^3.0.6" npm-package-arg "^6.1.0" - portfinder "^1.0.15" + p-defer "^2.1.0" + portfinder "^1.0.20" promise-map-series "^0.2.3" + promise.prototype.finally "^3.1.0" quick-temp "^0.1.8" - resolve "^1.8.1" - rsvp "^4.8.3" - sane "^3.0.0" - semver "^5.5.0" - silent-error "^1.1.0" - sort-package-json "^1.15.0" + resolve "^1.10.1" + resolve-package-path "^1.2.7" + rsvp "^4.8.4" + sane "^4.1.0" + semver "^6.0.0" + silent-error "^1.1.1" + sort-package-json "^1.22.1" symlink-or-copy "^1.2.0" - temp "0.8.3" - testem "^2.9.2" + temp "0.9.0" + testem "^2.14.0" tiny-lr "^1.1.1" - tree-sync "^1.2.2" + tree-sync "^1.4.0" uuid "^3.3.2" - validate-npm-package-name "^3.0.0" - walk-sync "^0.3.2" + walk-sync "^1.1.3" watch-detector "^0.1.0" - yam "^0.0.24" + yam "^1.0.0" ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.2.0: version "1.2.0" @@ -4622,17 +7085,19 @@ ember-compatibility-helpers@^1.1.1, ember-compatibility-helpers@^1.2.0: semver "^5.4.1" ember-composable-helpers@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ember-composable-helpers/-/ember-composable-helpers-2.2.0.tgz#a03984eaddf65ee08cb9ff554a24b0d671651af3" - integrity sha512-VWFYfxPLkgmEoL5aplh8dEwzAhmERfPzIGZeb+O7PhT0of5SYtJeOJFbIIXV2NkVHcDothwUu3IEALsWBsES8A== + version "2.3.1" + resolved "https://registry.yarnpkg.com/ember-composable-helpers/-/ember-composable-helpers-2.3.1.tgz#db98ad8b55d053e2ac216b9da091c9e7a3b9f453" + integrity sha512-Eltj5yt2CtHhBMrdsjKQTP1zFyfEXQ5/v85ObV2zh0eIJZa1t/gImHN+GIHHuJ+9xOrCUAy60/2TJZjadpoPBQ== dependencies: - broccoli-funnel "^1.0.1" + "@babel/core" "^7.0.0" + broccoli-funnel "2.0.1" ember-cli-babel "^7.1.0" + resolve "^1.10.0" -ember-concurrency@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-0.9.0.tgz#0016652ff780fb665842e7f47815ee0601122ea1" - integrity sha512-JDjvwSlZBUQwv1+qUj6YUqXXe0Y0/to4ppUTNXQ1EEiEAopkHJXQUn0ZcFOiQpEinrYp34Vg6+lUNskoJFL2Vg== +ember-concurrency@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ember-concurrency/-/ember-concurrency-1.0.0.tgz#3b650672fdd5dc1d45007626119135829076c2b6" + integrity sha512-76aKC0lo2LAPoQYz7vMRlpolWTIQerszr8PPf3JMM5cTOzPwXUtzDcjfso3JAEDdhyUF9fkv2V1DmHagFbC2YQ== dependencies: babel-core "^6.24.1" ember-cli-babel "^6.8.2" @@ -4646,10 +7111,10 @@ ember-copy@1.0.0, ember-copy@^1.0.0: dependencies: ember-cli-babel "^6.6.0" -ember-data-model-fragments@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ember-data-model-fragments/-/ember-data-model-fragments-3.3.0.tgz#93e3ddba6fab2150435f995e07d25a4d88694886" - integrity sha512-fzBGYCSooaF7sqhxrv08TqG7okye7btYjefGq0ATucaAqSVMkjDkmM9/304nQYHWbKpzWeAzX/qJKSMYaWpN6g== +ember-data-model-fragments@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ember-data-model-fragments/-/ember-data-model-fragments-4.0.0.tgz#8570d8b6bef12e8a3518279af01478ef8818a44f" + integrity sha512-DcRRQAWrrfRQBW8+v6takQdS2hNJ9rKWU/uHjnPY6+Vg/y6TxyPU8mo0PF2z0DYAeXwoIQ05iYTJT0sqFPEo+w== dependencies: broccoli-file-creator "^2.1.1" broccoli-merge-trees "^3.0.0" @@ -4659,43 +7124,34 @@ ember-data-model-fragments@3.3.0: git-repo-info "^2.0.0" npm-git-info "^1.0.3" -ember-data@~3.4.0: - version "3.4.4" - resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.4.4.tgz#a201c2db1d7ca2cbe59a23ddf3cb96281fce216f" - integrity sha512-5DE1CxR1Eobue0y2WCkGSRUaOuE8ebktNElhcyPUcrksbnILxniPsKPVRq15X+5wLjaEb+XiscH68NLBGbjUvQ== - dependencies: - "@ember/ordered-set" "^2.0.0" - babel-plugin-feature-flags "^0.3.1" - babel-plugin-filter-imports "^0.3.1" - babel-plugin-transform-es2015-block-scoping "^6.26.0" - babel6-plugin-strip-class-callcheck "^6.0.0" - babel6-plugin-strip-heimdall "^6.0.1" - broccoli-debug "^0.6.4" - broccoli-file-creator "^2.1.1" - broccoli-funnel "^2.0.1" - broccoli-merge-trees "^3.0.0" - broccoli-rollup "^2.1.1" - calculate-cache-key-for-tree "^1.1.0" - chalk "^2.4.1" - ember-cli-babel "^6.16.0" - ember-cli-path-utils "^1.0.0" - ember-cli-string-utils "^1.1.0" - ember-cli-test-info "^1.0.0" - ember-cli-version-checker "^2.1.2" - ember-inflector "^3.0.0" - git-repo-info "^2.0.0" - heimdalljs "^0.3.0" - inflection "^1.12.0" - npm-git-info "^1.0.3" - resolve "^1.8.1" - semver "^5.5.0" - silent-error "^1.1.0" +ember-data@~3.12.0: + version "3.12.4" + resolved "https://registry.yarnpkg.com/ember-data/-/ember-data-3.12.4.tgz#09433e9c270eb4aad023e1e0ed5a8db31b356fd1" + integrity sha512-PWHCKYZKht2h6nqG4Vr6sjsQndRbx23eFS7VtzEfTD3qJf5Aa2fG5Ur9T8ZX9U75KxrDLoV/LfnUe1FU5fXI8w== + dependencies: + "@ember-data/-build-infra" "3.12.4" + "@ember-data/adapter" "3.12.4" + "@ember-data/model" "3.12.4" + "@ember-data/serializer" "3.12.4" + "@ember-data/store" "3.12.4" + "@ember/ordered-set" "^2.0.3" + "@glimmer/env" "^0.1.7" + ember-cli-babel "^7.8.0" + ember-cli-typescript "^2.0.2" + ember-inflector "^3.0.1" ember-debug-handlers-polyfill@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ember-debug-handlers-polyfill/-/ember-debug-handlers-polyfill-1.1.1.tgz#e9ae0a720271a834221179202367421b580002ef" integrity sha512-lO7FBAqJjzbL+IjnWhVfQITypPOJmXdZngZR/Vdn513W4g/Q6Sjicao/mDzeDCb48Y70C4Facwk0LjdIpSZkRg== +ember-element-helper@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ember-element-helper/-/ember-element-helper-0.1.1.tgz#ffd2a0566b22a13c0e7780ae96443f4ffda2e63d" + integrity sha512-MfES7MbZ5UcHTo1lutJCcz6hI+/CadurWcOR3kOQl0jKcBKdAWyYIJXK4u0FDXzlgKczX9vL3R2eJUtnGe144w== + dependencies: + ember-cli-babel "^6.16.0" + ember-export-application-global@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-2.0.0.tgz#8d6d7619ac8a1a3f8c43003549eb21ebed685bd2" @@ -4711,21 +7167,21 @@ ember-factory-for-polyfill@^1.3.1: ember-cli-version-checker "^2.1.0" ember-fetch@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/ember-fetch/-/ember-fetch-6.5.0.tgz#efed80b3dd2259b52efce7498659e9125235bfb7" - integrity sha512-B9KSeeO3xDNMQ22JqNwbmgnOprBzc8kNVfQMtzkAmugMb2aCmBZohAlQlwUUX5ODz8fHq2xfuZXDHD81Dzb0vg== + version "6.7.0" + resolved "https://registry.yarnpkg.com/ember-fetch/-/ember-fetch-6.7.0.tgz#c219f820e40f7918147391617a5940c67d293319" + integrity sha512-lB9G+XDKOc84Dr3THJs+l/KmtzUus7nv12Z0xOP54J917HmjnAsSZ9OHTp+X8ClxlAm35/v9l+sFd7IlB9Baqw== dependencies: - abortcontroller-polyfill "^1.2.5" + abortcontroller-polyfill "^1.3.0" broccoli-concat "^3.2.2" broccoli-debug "^0.6.5" broccoli-merge-trees "^3.0.0" broccoli-rollup "^2.1.1" - broccoli-stew "^2.0.0" + broccoli-stew "^2.1.0" broccoli-templater "^2.0.1" - calculate-cache-key-for-tree "^1.1.0" + calculate-cache-key-for-tree "^2.0.0" caniuse-api "^3.0.0" ember-cli-babel "^6.8.2" - node-fetch "^2.3.0" + node-fetch "^2.6.0" whatwg-fetch "^3.0.0" ember-freestyle@~0.10.0: @@ -4758,35 +7214,43 @@ ember-getowner-polyfill@^2.0.1, ember-getowner-polyfill@^2.2.0: ember-cli-version-checker "^2.1.0" ember-factory-for-polyfill "^1.3.1" -"ember-inflector@^2.0.0 || ^3.0.0", ember-inflector@^3.0.0: +ember-inflector@3.0.1, "ember-inflector@^2.0.0 || ^3.0.0", ember-inflector@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-3.0.1.tgz#04be6df4d7e4000f6d6bd70787cdc995f77be4ab" + integrity sha512-fngrwMsnhkBt51KZgwNwQYxgURwV4lxtoHdjxf7RueGZ5zM7frJLevhHw7pbQNGqXZ3N+MRkhfNOLkdDK9kFdA== + dependencies: + ember-cli-babel "^6.6.0" + +ember-inflector@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-3.0.0.tgz#7e1ee8aaa0fa773ba0905d8b7c0786354d890ee1" integrity sha512-tLWfYolZAkLnkTvvBkjizy4Wmj8yI8wqHZFK+leh0iScHiC3r1Yh5C4qO+OMGiBTMLwfTy+YqVoE/Nu3hGNkcA== dependencies: ember-cli-babel "^6.6.0" -ember-inline-svg@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ember-inline-svg/-/ember-inline-svg-0.2.1.tgz#091f3fc27836e5ee0df1482c9e4a1a8adc9113f3" - integrity sha512-R7LsMZo1CrXbDgCX6sMnzUg+ggeosOwq8HTilWnNUpH11mb9pbMoG5s/Qm9iRMVW2iMesiCMnCaLsEkTiY8Yhw== +ember-inline-svg@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/ember-inline-svg/-/ember-inline-svg-0.3.0.tgz#14e305446e832c116210d5f0cb2aae8343879980" + integrity sha512-CH7+bOUCDfDo27mJO2NQqcDpnOz258iXzdiWmG6hftIBZ97Q64Qo0/Hm38ShWY40r2cw3jwior19miH6/e7amg== dependencies: broccoli-caching-writer "^3.0.3" broccoli-flatiron "~0.1.3" broccoli-funnel "^2.0.1" broccoli-merge-trees "^3.0.0" ember-cli-babel "^6.16.0" - merge "^1.2.0" + merge "^1.2.1" mkdirp "^0.5.1" promise-map-series "^0.2.1" - svgo "~1.0.5" + svgo "~1.2.2" walk-sync "^0.3.1" -ember-load-initializers@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-1.1.0.tgz#4edacc0f3a14d9f53d241ac3e5561804c8377978" - integrity sha512-WiciFi8IXOqjyJ65M4iBNIthqcy4uXXQq5n3WxeMMhvJVk5JNSd9hynNECNz3nqfEYuZQ9c04UWkmFIQXRfl4Q== +ember-load-initializers@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-2.1.0.tgz#b402815ab9c823ff48a1369b52633721987e72d4" + integrity sha512-zvcq35U2EPyjonCPdDBISZbeuxP3OXf+asmj2bNucFwo1ej7gYJCJacy6N8oABEG2EmrU/8jMDoZndWIAGn0cQ== dependencies: - ember-cli-babel "^6.6.0" + ember-cli-babel "^7.10.0" + ember-cli-typescript "^2.0.0" ember-macro-helpers@^2.1.0: version "2.2.0" @@ -4808,13 +7272,22 @@ ember-maybe-import-regenerator@^0.1.5, ember-maybe-import-regenerator@^0.1.6: ember-cli-babel "^6.0.0-beta.4" regenerator-runtime "^0.9.5" -ember-maybe-in-element@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ember-maybe-in-element/-/ember-maybe-in-element-0.2.0.tgz#9ac51cbbd9d83d6230ad996c11e33f0eca3032e0" - integrity sha512-R5e6N8yDbfNbA/3lMZsFs2KEzv/jt80TsATiKMCqdqKuSG82KrD25cRdU5VkaE8dTQbziyBeuJs90bBiqOnakQ== +ember-maybe-in-element@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/ember-maybe-in-element/-/ember-maybe-in-element-0.4.0.tgz#fe1994c60ee64527d2b2f3b4479ebf8806928bd8" + integrity sha512-ADQ9jewz46Y2MWiTAKrheIukHiU6p0QHn3xqz1BBDDOmubW1WdAjSrvtkEWsJQ08DyxIn3RdMuNDzAUo6HN6qw== dependencies: ember-cli-babel "^7.1.0" +ember-modifier-manager-polyfill@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ember-modifier-manager-polyfill/-/ember-modifier-manager-polyfill-1.2.0.tgz#cf4444e11a42ac84f5c8badd85e635df57565dda" + integrity sha512-bnaKF1LLKMkBNeDoetvIJ4vhwRPKIIumWr6dbVuW6W6p4QV8ZiO+GdF8J7mxDNlog9CeL9Z/7wam4YS86G8BYA== + dependencies: + ember-cli-babel "^7.10.0" + ember-cli-version-checker "^2.1.2" + ember-compatibility-helpers "^1.2.0" + ember-moment@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/ember-moment/-/ember-moment-7.8.1.tgz#6f77cf941d1a92e231b2f4b810e113b2fae50c5f" @@ -4832,6 +7305,13 @@ ember-native-dom-helpers@^0.5.3: broccoli-funnel "^1.1.0" ember-cli-babel "^6.6.0" +ember-overridable-computed@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ember-overridable-computed/-/ember-overridable-computed-1.0.0.tgz#4fb4a5acc9ec9ed7421586a5a8b4014f5bdb04f7" + integrity sha512-0uuJZDEpq0LzNGQAtAf1PhcFVbkaHKd5ilT81k1aU4ZgCo5cwkxU65R5evokweq2dQwIaGTSs0MndCG+qI8BXA== + dependencies: + ember-cli-babel "^7.7.3" + ember-page-title@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/ember-page-title/-/ember-page-title-5.0.2.tgz#ab5a60c16318ba7f5e66cd41f580c9831ce3b612" @@ -4842,15 +7322,16 @@ ember-page-title@^5.0.2: ember-cli-htmlbars "^3.0.1" ember-copy "^1.0.0" -ember-power-select@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/ember-power-select/-/ember-power-select-2.3.0.tgz#f9f2d242381f715f860c76f168d63c6ff2688ae7" - integrity sha512-LSLAt3WiljlbXelWLgna6cnnvhapltzK/yYoRbQ2iyawIQA1yU/HD4Sc2s3flrGI5IpAIbG+MFYKq0CpfJWQMQ== - dependencies: - ember-basic-dropdown "^1.1.0" - ember-cli-babel "^7.2.0" - ember-cli-htmlbars "^3.0.1" - ember-concurrency "^0.9.0" +ember-power-select@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ember-power-select/-/ember-power-select-3.0.4.tgz#52700ecaa2053b0a20b4e5d0a6e63802346e52ad" + integrity sha512-+KS8GnKUuqsC725Ncv3NDz/fbVSYBFkRHPXYTtGSWUtpTkaY2ncSwBr6mIFPDNOr7isBvtUArXHvHCnz5O9xaQ== + dependencies: + "@ember-decorators/component" "^6.1.0" + ember-basic-dropdown "^2.0.5" + ember-cli-babel "^7.11.0" + ember-cli-htmlbars "^3.1.0" + ember-concurrency "^1.0.0" ember-text-measurer "^0.5.0" ember-truth-helpers "^2.1.0" @@ -4864,18 +7345,18 @@ ember-qunit-nice-errors@^1.2.0: ember-cli-babel "^6.6.0" recast "^0.13.0" -ember-qunit@^3.5.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-3.5.3.tgz#bfd0bff8298c78c77e870cca43fe0826e78a0d09" - integrity sha512-FmXsI1bGsZ5th25x4KEle2fLCVURTptsQODfBt+Pg8tk9rX7y79cqny91PrhtkhE+giZ8p029tnq94SdpJ4ojg== +ember-qunit@^4.4.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-4.5.1.tgz#dc4b0a794fbeb6702a02f28bf19091de0f90fd5a" + integrity sha512-fOxXQLFdellP0yiMd9f3n7pIGggiDo8kBuswdGvsCrqTKq5aB1Cb49eeoNyBDQYGlhcxY0pOGUe+xElppChDBA== dependencies: - "@ember/test-helpers" "^0.7.26" - broccoli-funnel "^2.0.1" - broccoli-merge-trees "^2.0.0" + "@ember/test-helpers" "^1.6.0" + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^3.0.2" common-tags "^1.4.0" - ember-cli-babel "^6.8.2" + ember-cli-babel "^7.8.0" ember-cli-test-loader "^2.2.0" - qunit "~2.6.0" + qunit "^2.9.2" ember-resolver@^5.0.1: version "5.1.3" @@ -4890,17 +7371,17 @@ ember-resolver@^5.0.1: ember-cli-version-checker "^3.0.0" resolve "^1.10.0" -ember-responsive@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ember-responsive/-/ember-responsive-3.0.0.tgz#03791da324299a8c8cb461e541a5e1aeca887881" - integrity sha512-5JQ+REBu37M7NNDJOnTjzp5eQzg4cX7VtPcD19V3nBcntRuDwf7N6TndLxmw4Kt3JXuzQL4PkDE2SgVKuNTdWQ== +ember-responsive@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ember-responsive/-/ember-responsive-3.0.4.tgz#1980ae6393b3b6ebedf1c7cda1cd70eeb64ea85b" + integrity sha512-jnybZXFwJqz61Tgj4o8uGwKEMBm3N6o9VQJpLlg0MpMVcm1OAemftQpkfs+687Q1SgKFSuN1rwumx+xx7H5Umw== dependencies: ember-cli-babel "^6.6.0" -ember-rfc176-data@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.8.tgz#d46bbef9a0d57c803217b258cfd2e90d8e191848" - integrity sha512-SQup3iG7SDLZNuf7nMMx5BC5truO8AYKRi80gApeQ07NsbuXV4LH75i5eOaxF0i8l9+H1tzv34kGe6rEh0C1NQ== +ember-rfc176-data@^0.3.12: + version "0.3.12" + resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.12.tgz#90d82878e69e2ac9a5438e8ce14d12c6031c5bd2" + integrity sha512-g9HeZj/gU5bfIIrGXkP7MhS2b3Vu5DfNUrYr14hy99TgIvtZETO+96QF4WOEUXGjIJdfTRjerVnQlqngPQSv1g== ember-rfc176-data@^0.3.9: version "0.3.9" @@ -4922,35 +7403,42 @@ ember-runtime-enumerable-includes-polyfill@^2.0.0: ember-cli-babel "^6.9.0" ember-cli-version-checker "^2.1.0" -ember-sinon@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ember-sinon/-/ember-sinon-2.2.0.tgz#acb628dec695d6817bd17fd6c25a4d70821851e9" - integrity sha512-BgjHsgy8rli8FaJ1MWkscIKRpoFmzYhNkDtwBWQrUCzQx1bp3+irVpseAPqBnuEB4FPFGGQV5ahDpFcckmIsAw== +ember-sinon@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ember-sinon/-/ember-sinon-4.0.0.tgz#bb9bc43b68cc4500457261606a47c7b6ef8c30a3" + integrity sha512-SF6+ak/8yTyD2R8ylz9HYzoziiJCCB6bh/QG/ly4aqAf9eXL+ldQE91IljzEDh6B8feMUpUCGGajbrs9svwhQA== dependencies: broccoli-funnel "^2.0.0" broccoli-merge-trees "^3.0.0" - ember-cli-babel "^6.6.0" - sinon "^6.0.1" + ember-cli-babel "^7.7.3" + sinon "^7.3.2" -ember-source@~3.4.0: - version "3.4.8" - resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.4.8.tgz#68677bf9bd222aff865100b241004649c3d3dda7" - integrity sha512-uiRqAzzFKvZ0P5zf5eOv2BrhBUNFJOnsUrri6dN8Ci7pxBkj/fyKVxwIu/+juQh4E/QRgrfze/+Cueq0FNf6rQ== +ember-source-channel-url@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ember-source-channel-url/-/ember-source-channel-url-1.2.0.tgz#77eb9d0889e5f5370e6c70fcb2696c63ff4a34a1" + integrity sha512-CLClcHzVf+8GoFk4176R16nwXoel70bd7DKVAY6D8M0m5fJJhbTrAPYpDA0lY8A60HZo9j/s8A8LWiGh1YmdZg== dependencies: - broccoli-funnel "^2.0.1" - broccoli-merge-trees "^2.0.0" - chalk "^2.3.0" + got "^8.0.1" + +ember-source@~3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-3.12.0.tgz#92f72894836d4497e704901c1d061c61b066bddf" + integrity sha512-4iA2BgYmNLWysifLyt2LCQgU9ux/NiTR/MT7KTt9HUyTDJyivcdyKNtfrUQst/1InUvn+MxuQ0ZsbQICJkX6yA== + dependencies: + broccoli-funnel "^2.0.2" + broccoli-merge-trees "^3.0.2" + chalk "^2.4.2" + ember-cli-babel "^7.7.0" ember-cli-get-component-path-option "^1.0.0" ember-cli-is-package-missing "^1.0.0" ember-cli-normalize-entity-name "^1.0.0" ember-cli-path-utils "^1.0.0" ember-cli-string-utils "^1.1.0" - ember-cli-valid-component-name "^1.0.0" - ember-cli-version-checker "^2.1.0" + ember-cli-version-checker "^3.1.3" ember-router-generator "^1.2.3" inflection "^1.12.0" - jquery "^3.3.1" - resolve "^1.6.0" + jquery "^3.4.1" + resolve "^1.11.1" ember-template-lint@^1.0.0-beta.5: version "1.1.0" @@ -4972,6 +7460,13 @@ ember-test-selectors@^2.1.0: ember-cli-babel "^6.8.2" ember-cli-version-checker "^3.1.2" +ember-test-waiters@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ember-test-waiters/-/ember-test-waiters-1.1.1.tgz#7df6e7a47e0fdca814aa351f7f7f9a006e15fdcd" + integrity sha512-ra71ZWTGBGLeDPa308aeAg9+/nYxv2fk4OEzmXdhvbSa5Dtbei94sr5pbLXx2IiK3Re2gDAvDzxg9PVhLy9fig== + dependencies: + ember-cli-babel "^7.1.2" + ember-text-measurer@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/ember-text-measurer/-/ember-text-measurer-0.5.0.tgz#b907aeb8cbc04560e5070dc0347cdd35d0040d0d" @@ -4979,7 +7474,7 @@ ember-text-measurer@^0.5.0: dependencies: ember-cli-babel "^7.1.0" -ember-truth-helpers@^2.0.0, ember-truth-helpers@^2.1.0: +ember-truth-helpers@2.1.0, ember-truth-helpers@^2.0.0, ember-truth-helpers@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ember-truth-helpers/-/ember-truth-helpers-2.1.0.tgz#d4dab4eee7945aa2388126485977baeb33ca0798" integrity sha512-BQlU8aTNl1XHKTYZ243r66yqtR9JU7XKWQcmMA+vkqfkE/c9WWQ9hQZM8YABihCmbyxzzZsngvldokmeX5GhAw== @@ -5005,11 +7500,27 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emotion-theming@^10.0.14: + version "10.0.19" + resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.19.tgz#66d13db74fccaefad71ba57c915b306cf2250295" + integrity sha512-dQRBPLAAQ6eA8JKhkLCIWC8fdjPbiNC1zNTdFF292h9amhZXofcNGUP7axHoHX4XesqQESYwZrXp53OPInMrKw== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/weak-memoize" "0.2.4" + hoist-non-react-statics "^3.3.0" + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -5098,6 +7609,22 @@ error@^7.0.0: string-template "~0.2.1" xtend "~4.0.0" +es-abstract@^1.10.0, es-abstract@^1.13.0, es-abstract@^1.14.2, es-abstract@^1.15.0, es-abstract@^1.4.3, es-abstract@^1.7.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.15.0.tgz#8884928ec7e40a79e3c9bc812d37d10c8b24cc57" + integrity sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" + es-abstract@^1.12.0, es-abstract@^1.5.1: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" @@ -5119,15 +7646,57 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -escape-html@~1.0.3: +es5-shim@^4.5.13: + version "4.5.13" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.13.tgz#5d88062de049f8969f83783f4a4884395f21d28b" + integrity sha512-xi6hh6gsvDE0MaW4Vp1lgNEBpVcCXRWfPXj5egDvtgLz4L9MEvNwYEMdJH+JJinWkwa8c3c3o5HduV7dB/e1Hw== + +es6-shim@^0.35.5: + version "0.35.5" + resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab" + integrity sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg== + +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.11.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" + integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-plugin-es@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998" + integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA== + dependencies: + eslint-utils "^1.4.2" + regexpp "^2.0.1" + +eslint-plugin-node@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.2.0.tgz#b1911f111002d366c5954a6d96d3cd5bf2a3036a" + integrity sha512-2abNmzAH/JpxI4gEOwd6K8wZIodK3BmHbTxz4s79OIYwwIt2gkpEXlAouJXu4H1c9ySTnRso0tsuthSOZbUMlA== + dependencies: + eslint-plugin-es "^1.4.1" + eslint-utils "^1.4.2" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" eslint-scope@^4.0.0, eslint-scope@^4.0.3: version "4.0.3" @@ -5142,6 +7711,13 @@ eslint-utils@^1.3.1: resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== +eslint-utils@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" + integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== + dependencies: + eslint-visitor-keys "^1.0.0" + eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" @@ -5189,6 +7765,11 @@ eslint@^5.16.0, eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" +esm@^3.2.25, esm@^3.2.4: + version "3.2.25" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" + integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + espree@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" @@ -5198,6 +7779,11 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" +esprima@^3.1.3, esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -5208,11 +7794,6 @@ esprima@~3.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" integrity sha1-U88kes2ncxPlUcOqLnM0LT+099k= -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" @@ -5232,10 +7813,15 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= -estree-walker@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.0.tgz#5d865327c44a618dde5699f763891ae31f257dae" - integrity sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw== +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== esutils@^2.0.2: version "2.0.2" @@ -5252,6 +7838,11 @@ eventemitter3@^3.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + events-to-array@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" @@ -5262,6 +7853,13 @@ events@^3.0.0: resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -5270,34 +7868,10 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-file-sync@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/exec-file-sync/-/exec-file-sync-2.0.2.tgz#58d441db46e40de6d1f30de5be022785bd89e328" - integrity sha1-WNRB20bkDebR8w3lvgInhb2J4yg= - dependencies: - is-obj "^1.0.0" - object-assign "^4.0.1" - spawn-sync "^1.0.11" - -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== - dependencies: - merge "^1.2.0" - -execa@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" - integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== - dependencies: - cross-spawn "^6.0.0" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== execa@^0.7.0: version "0.7.0" @@ -5325,21 +7899,11 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exists-stat@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/exists-stat/-/exists-stat-1.0.0.tgz#0660e3525a2e89d9e446129440c272edfa24b529" - integrity sha1-BmDjUlouidnkRhKUQMJy7foktSk= - exists-sync@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879" integrity sha1-l0TCxCjMA7AQYNtFTUsS8O88iHk= -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -5365,7 +7929,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -express@^4.10.7, express@^4.16.3: +express@^4.10.7: version "4.16.4" resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== @@ -5401,6 +7965,42 @@ express@^4.10.7, express@^4.16.3: utils-merge "1.0.1" vary "~1.1.2" +express@^4.13.1, express@^4.16.4, express@^4.17.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -5416,20 +8016,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b" - integrity sha1-Etew24UPf/fnCBuvQAVwAGDEYAs= - dependencies: - extend "^3.0.0" - spawn-sync "^1.0.15" - tmp "^0.0.29" - external-editor@^2.0.4: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" @@ -5477,16 +8068,28 @@ fake-xml-http-request@^2.0.0: resolved "https://registry.yarnpkg.com/fake-xml-http-request/-/fake-xml-http-request-2.0.0.tgz#41a92f0ca539477700cb1dafd2df251d55dac8ff" integrity sha512-UjNnynb6eLAB0lyh2PlTEkjRJORnNsVF1hbzU+PQv89/cyBV9GDRCy7JAcLQgeCLYT+3kaumWWZKEJvbaK74eQ== -faker@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/faker/-/faker-3.1.0.tgz#0f908faf4e6ec02524e54a57e432c5c013e08c9f" - integrity sha1-D5CPr05uwCUk5UpX5DLFwBPgjJ8= +faker@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f" + integrity sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8= fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-glob@^2.0.2: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + fast-glob@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295" @@ -5538,6 +8141,13 @@ fastboot-transform@^0.1.3: broccoli-stew "^1.5.0" convert-source-map "^1.5.1" +fault@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.3.tgz#4da88cf979b6b792b4e13c7ec836767725170b7e" + integrity sha512-sfFuP4X0hzrbGKjAUNXYvNqsZ5F6ohx/dZ9I0KQud/aiZNwg263r5L9yGB0clvXHCkzXh5W3t7RSHchggYIFmA== + dependencies: + format "^0.2.2" + faye-websocket@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -5545,6 +8155,13 @@ faye-websocket@~0.10.0: dependencies: websocket-driver ">=0.5.1" +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -5552,6 +8169,19 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fbjs@^0.8.0: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -5579,11 +8209,33 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -filesize@^3.6.1: +file-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" + integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== + dependencies: + loader-utils "^1.0.2" + schema-utils "^1.0.0" + +file-system-cache@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" + integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08= + dependencies: + bluebird "^3.3.5" + fs-extra "^0.30.0" + ramda "^0.21.0" + +filesize@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== +filesize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.1.2.tgz#fcd570af1353cea97897be64f56183adb995994b" + integrity sha512-iSWteWtfNcrWQTkQw8ble2bnonSl7YJImsn9OZKpE2E4IHhXI78eASpDYUljXZZdYj36QsEKjOs/CsiDqmKMJw== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -5607,6 +8259,19 @@ finalhandler@1.1.1: statuses "~1.4.0" unpipe "~1.0.0" +finalhandler@1.1.2, finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + find-babel-config@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" @@ -5615,7 +8280,7 @@ find-babel-config@^1.1.0: json5 "^0.5.1" path-exists "^3.0.0" -find-cache-dir@^2.0.0: +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -5624,6 +8289,15 @@ find-cache-dir@^2.0.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" + integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.0" + pkg-dir "^4.1.0" + find-index@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-1.1.1.tgz#4b221f8d46b7f8bea33d8faed953f3ca7a081cbc" @@ -5634,6 +8308,18 @@ find-parent-dir@^0.3.0: resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -5649,14 +8335,15 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - locate-path "^3.0.0" + locate-path "^5.0.0" + path-exists "^4.0.0" -find-yarn-workspace-root@^1.1.0: +find-yarn-workspace-root@^1.1.0, find-yarn-workspace-root@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== @@ -5664,7 +8351,7 @@ find-yarn-workspace-root@^1.1.0: fs-extra "^4.0.3" micromatch "^3.1.4" -findup-sync@2.0.0: +findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= @@ -5685,25 +8372,6 @@ fireworm@^0.7.0: lodash.flatten "^3.0.2" minimatch "^3.0.2" -fixturify-project@^1.5.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/fixturify-project/-/fixturify-project-1.8.1.tgz#c0a95a801538bcdd502cbe6a1950f663c1e077a4" - integrity sha512-kq1rX8SlHzfR5Okhj4gatm/XJDv2ELzHiW9S5zFoZygHMrCRhoWcW/Ktl8zzpmJn/dsz8Rrm7addq62G3wmCNw== - dependencies: - fixturify "^1.2.0" - tmp "^0.0.33" - -fixturify@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fixturify/-/fixturify-1.2.0.tgz#abe8c52dd27dbbfdb874a02893781c93425663ea" - integrity sha512-b5CMQmBZKsGR6HGqdSrLOGYGHIqrR0CUrcGU/lDL0mYy+DtGm5cnb61Z0UiIUqMVZIoV0CbN+u9/Gwjj+ICg0A== - dependencies: - "@types/fs-extra" "^5.0.5" - "@types/minimatch" "^3.0.3" - "@types/rimraf" "^2.0.2" - fs-extra "^7.0.1" - matcher-collection "^2.0.0" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -5738,6 +8406,11 @@ fn-name@~2.0.1: resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= +focus-lock@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.5.tgz#f6eb37832a9b1b205406175f5277396a28c0fce1" + integrity sha512-i/mVBOoa9o+tl+u9owOJUF8k8L85odZNIsctB+JAK2HFT8jckiBwmk+3uydlm6FN8czgnkIwQtBv6yyAbrzXjw== + follow-redirects@^1.0.0: version "1.7.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" @@ -5750,11 +8423,39 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +forever-agent@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + integrity sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +fork-ts-checker-webpack-plugin@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" + integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== + dependencies: + babel-code-frame "^6.22.0" + chalk "^2.4.1" + chokidar "^2.0.4" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +form-data@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" + integrity sha1-kavXiKupcCsaq/qLwBAxoqyeOxI= + dependencies: + async "~0.9.0" + combined-stream "~0.0.4" + mime "~1.2.11" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -5764,6 +8465,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +format@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -5781,7 +8487,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: +from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -5799,6 +8505,17 @@ fs-extra@^0.24.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -5835,10 +8552,19 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== dependencies: minipass "^2.2.1" @@ -5862,6 +8588,17 @@ fs-tree-diff@^1.0.0, fs-tree-diff@^1.0.2: path-posix "^1.0.0" symlink-or-copy "^1.1.8" +fs-tree-diff@^2.0.0, fs-tree-diff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-2.0.1.tgz#343e4745ab435ec39ebac5f9059ad919cd034afa" + integrity sha512-x+CfAZ/lJHQqwlD64pYM5QxWjzWhSjroaVsr8PW831zOApL55qPibed0c+xebaLWVr2BnHFoHdrwOv8pzt8R5A== + dependencies: + "@types/symlink-or-copy" "^1.2.0" + heimdalljs-logger "^0.1.7" + object-assign "^4.1.0" + path-posix "^1.0.0" + symlink-or-copy "^1.1.8" + fs-updater@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/fs-updater/-/fs-updater-1.0.4.tgz#2329980f99ae9176e9a0e84f7637538a182ce63b" @@ -5888,38 +8625,53 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.3, fsevents@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" - integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" + nan "^2.12.1" + node-pre-gyp "^0.12.0" fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.1.1: +function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.1.tgz#6d252350803085abc2ad423d4fe3be2f9cbda392" + integrity sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + functions-have-names "^1.1.1" + is-callable "^1.1.4" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.1.1.tgz#79d35927f07b8e7103d819fed475b64ccf7225ea" + integrity sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw== + fuse.js@^3.4.4: - version "3.4.4" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.4.4.tgz#f98f55fcb3b595cf6a3e629c5ffaf10982103e95" - integrity sha512-pyLQo/1oR5Ywf+a/tY8z4JygnIglmRxVUOiyFAbd11o9keUDpUJSMGRWJngcnkURj30kDHPmhoKY8ChJiz3EpQ== + version "3.4.5" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.4.5.tgz#8954fb43f9729bd5dbcb8c08f251db552595a7a6" + integrity sha512-s9PGTaQIkT69HaeoTVjwGsLfb8V8ScJLx5XGFcKHg0MqLUH/UZ4EKOtqtXX9k7AFqCGxD1aJmYb8Q5VYDibVRQ== g-status@^2.0.2: version "2.0.2" @@ -5951,11 +8703,16 @@ gaze@^1.0.0: dependencies: globule "^1.0.0" -get-caller-file@^1.0.0, get-caller-file@^1.0.1: +get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-own-enumerable-property-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" @@ -5971,7 +8728,7 @@ get-stdin@^6.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== -get-stream@^3.0.0: +get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= @@ -5995,7 +8752,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -git-repo-info@^2.0.0: +git-repo-info@^2.0.0, git-repo-info@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-2.1.0.tgz#13d1f753c75bc2994432e65a71e35377ff563813" integrity sha512-+kigfDB7j3W80f74BoOUX+lKOmf4pR3/i2Ww6baKTCPe2hD4FRdjhV3s4P5Dy0Tak1uY1891QhKoYNtnyX2VvA== @@ -6024,7 +8781,7 @@ glob@^5.0.10: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@~7.1.1: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -6036,6 +8793,37 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.2, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -6056,6 +8844,23 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@^4.3.2, global@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0, globals@^11.7.0: version "11.11.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" @@ -6066,6 +8871,28 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globalthis@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.0.tgz#c5fb98213a9b4595f59cf3e7074f141b4169daae" + integrity sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + object-keys "^1.0.12" + +globby@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -6107,10 +8934,38 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" +got@^8.0.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -6122,23 +8977,25 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.4, handlebars@^4.0.6: - version "4.1.1" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.1.tgz#6e4e41c18ebe7719ae4d38e5aca3d32fa3dd23d3" - integrity sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA== +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" + duplexer "^0.1.1" + pify "^4.0.1" -handlebars@~4.0.13: - version "4.0.13" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.13.tgz#89fc17bf26f46fd7f6f99d341d92efaae64f997d" - integrity sha512-uydY0jy4Z3wy/iGXsi64UtLD4t1fFJe16c/NFxsYE4WdQis8ZCzOXUZaPQNG0e5bgtLQV41QTfqBindhEjnpyQ== +handlebars@^4.0.11, handlebars@^4.0.4, handlebars@^4.0.6, handlebars@~4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== dependencies: - async "^2.5.0" + neo-async "^2.6.0" optimist "^0.6.1" source-map "^0.6.1" optionalDependencies: @@ -6181,11 +9038,23 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -6237,7 +9106,7 @@ hash-base@^3.0.0: inherits "^2.0.1" safe-buffer "^5.0.1" -hash-for-dep@^1.0.2, hash-for-dep@^1.2.3, hash-for-dep@^1.4.7, hash-for-dep@^1.5.0: +hash-for-dep@^1.0.2, hash-for-dep@^1.2.3, hash-for-dep@^1.4.7, hash-for-dep@^1.5.0, hash-for-dep@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.5.1.tgz#497754b39bee2f1c4ade4521bfd2af0a7c1196e3" integrity sha512-/dQ/A2cl7FBPI2pO0CANkvuuVi/IFS5oTyJ0PsOb6jW6WbVW1js5qJXMJTNbWHXBIPdFTWFbabjB+mE0d+gelw== @@ -6254,8 +9123,38 @@ hash.js@^1.0.0, hash.js@^1.0.3: resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hast-util-parse-selector@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz#66aabccb252c47d94975f50a281446955160380b" + integrity sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw== + +hastscript@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.0.tgz#a19b3cca6a26a2bcd0f1b1eac574af9427c1c7df" + integrity sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.2.0" + property-information "^5.0.1" + space-separated-tokens "^1.0.0" + +hawk@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" + integrity sha1-h81JH5tG5OKurKM1QWdmiF0tHtk= + dependencies: + boom "0.4.x" + cryptiles "0.2.x" + hoek "0.9.x" + sntp "0.2.x" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== heimdalljs-fs-monitor@^0.2.2: version "0.2.2" @@ -6265,12 +9164,12 @@ heimdalljs-fs-monitor@^0.2.2: heimdalljs "^0.2.3" heimdalljs-logger "^0.1.7" -heimdalljs-graph@^0.3.4: +heimdalljs-graph@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/heimdalljs-graph/-/heimdalljs-graph-0.3.5.tgz#420fbbc8fc3aec5963ddbbf1a5fb47921c4a5927" integrity sha512-szOy9WZUc7eUInEBQEsoa1G2d+oYHrn6ndZPf76eh8A9ID1zWUCEEsxP3F+CvQx9+EDrg1srdyLUmfVAr8EB4g== -heimdalljs-logger@^0.1.7, heimdalljs-logger@^0.1.9: +heimdalljs-logger@^0.1.10, heimdalljs-logger@^0.1.7, heimdalljs-logger@^0.1.9: version "0.1.10" resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.10.tgz#90cad58aabb1590a3c7e640ddc6a4cd3a43faaf7" integrity sha512-pO++cJbhIufVI/fmB/u2Yty3KJD0TqNPecehFae0/eps0hkZ3b4Zc/PezUMOpYuHFQbA7FxHZxa305EhmjLj4g== @@ -6292,6 +9191,11 @@ heimdalljs@^0.3.0: dependencies: rsvp "~3.2.1" +highlight.js@~9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + integrity sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4= + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -6301,6 +9205,23 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoek@0.9.x: + version "0.9.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" + integrity sha1-PTIkYrrfB3Fup+uFuviAec3c5QU= + +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== + +hoist-non-react-statics@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" + integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== + dependencies: + react-is "^16.7.0" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -6321,6 +9242,60 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + +html-minifier@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-4.0.0.tgz#cca9aad8bce1175e02e17a8c33e46d8988889f56" + integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== + dependencies: + camel-case "^3.0.0" + clean-css "^4.2.1" + commander "^2.19.0" + he "^1.2.0" + param-case "^2.1.1" + relateurl "^0.2.7" + uglify-js "^3.5.1" + +html-webpack-plugin@^4.0.0-beta.2: + version "4.0.0-beta.8" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.8.tgz#d9a8d4322d8cf310f1568f6f4f585a80df0ad378" + integrity sha512-n5S2hJi3/vioRvEDswZP2WFgZU8TUqFoYIrkg5dt+xDC4TigQEhIcl4Y81Qs2La/EqKWuJZP8+ikbHGVmzQ4Mg== + dependencies: + html-minifier "^4.0.0" + loader-utils "^1.2.3" + lodash "^4.17.11" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.3.0, htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" @@ -6331,6 +9306,28 @@ http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-parser-js@>=0.4.0: version "0.5.0" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" @@ -6345,6 +9342,15 @@ http-proxy@^1.13.1, http-proxy@^1.17.0: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-signature@~0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" + integrity sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY= + dependencies: + asn1 "0.1.11" + assert-plus "^0.1.5" + ctype "0.5.3" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -6359,6 +9365,11 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= +https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" + integrity sha1-PDfHrhqO65ZpBKKtHpdaGUt+06Q= + husky@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" @@ -6382,13 +9393,20 @@ iconv-lite@0.4.23: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -6406,11 +9424,33 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + +immer@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" + integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -6427,6 +9467,13 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -6454,12 +9501,27 @@ indent-string@^3.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= -inflection@^1.12.0: +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflected@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inflected/-/inflected-2.0.4.tgz#323770961ccbe992a98ea930512e9a82d3d3ef77" + integrity sha512-HQPzFLTTUvwfeUH6RAGjD8cHS069mBqXG5n4qaxX7sJXBhVQrsGgF+0ZJGkSuN6a8pcUWB/GXStta11kKi/WvA== + +inflection@1.12.0, inflection@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= @@ -6472,17 +9534,22 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -ini@^1.3.4, ini@~1.3.0: +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -6498,24 +9565,23 @@ inline-source-map-comment@^1.0.5: sum-up "^1.0.1" xtend "^4.0.0" -inquirer@^2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-2.0.0.tgz#e1351687b90d150ca403ceaa3cefb1e3065bef4b" - integrity sha1-4TUWh7kNFQykA86qPO+x4wZb70s= +inquirer@6.5.0, inquirer@^6: + version "6.5.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== dependencies: - ansi-escapes "^1.1.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^1.1.0" + external-editor "^3.0.3" figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.6" - pinkie-promise "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" run-async "^2.2.0" - rx "^4.1.0" - string-width "^2.0.0" - strip-ansi "^3.0.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" through "^2.3.6" inquirer@^3.3.0: @@ -6538,6 +9604,25 @@ inquirer@^3.3.0: strip-ansi "^4.0.0" through "^2.3.6" +inquirer@^6.2.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + inquirer@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" @@ -6557,7 +9642,20 @@ inquirer@^6.2.2: strip-ansi "^5.0.0" through "^2.3.6" -invariant@^2.2.2: +interpret@^1.0.0, interpret@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +invariant@2.2.4, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -6569,16 +9667,31 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + ip-regex@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.1.0.tgz#5ad62f685a14edb421abebc2fff8db94df67b455" integrity sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA== +ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + ipaddr.js@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4= +ipaddr.js@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" + integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -6593,6 +9706,19 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-alphabetical@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" + integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== + +is-alphanumerical@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" + integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -6646,6 +9772,11 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= +is-decimal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" + integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -6705,6 +9836,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-function@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= + is-git-url@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-git-url/-/is-git-url-1.0.0.tgz#53f684cd143285b52c3244b4e6f28253527af66b" @@ -6724,6 +9860,11 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" + integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== + is-ip@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" @@ -6743,6 +9884,11 @@ is-obj@^1.0.0, is-obj@^1.0.1: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + is-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" @@ -6769,22 +9915,34 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" +is-plain-object@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" + integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== + dependencies: + isobject "^4.0.0" + is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-reference@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.2.tgz#01cf91517d21db66a34642287ed6e70d53dcbe5c" - integrity sha512-Kn5g8c7XHKejFOpTf2QN9YjiHHKl5xRj+2uAZf9iM2//nkBNi/NNeB5JMoun28nEaUVHyPUzqzhfRlfAirEjXg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.3.tgz#e99059204b66fdbe09305cfca715a29caa5c8a51" + integrity sha512-W1iHHv/oyBb2pPxkBxtaewxa1BC58Pn5J0hogyCdefwUIvb6R+TGbAcIa4qPNYLqLhb3EnOgUf2MQkkF76BcKw== dependencies: "@types/estree" "0.0.39" @@ -6800,7 +9958,17 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-stream@^1.1.0: +is-retry-allowed@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= + +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -6861,6 +10029,13 @@ isbinaryfile@^3.0.3: dependencies: buffer-alloc "^1.2.0" +isemail@3.x.x: + version "3.2.0" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" + integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== + dependencies: + punycode "2.x.x" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -6878,6 +10053,19 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isobject@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -6892,24 +10080,40 @@ istextorbinary@2.1.0: editions "^1.1.1" textextensions "1 || 2" -ivy-codemirror@^2.1.0: +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +ivy-codemirror@IvyApp/ivy-codemirror#c3b7f49f8e6492878619f8055695581240cce21a: version "2.1.0" - resolved "https://registry.yarnpkg.com/ivy-codemirror/-/ivy-codemirror-2.1.0.tgz#c06f1606c375610bf62b007a21a9e63f5854175e" - integrity sha1-wG8WBsN1YQv2KwB6IanmP1hUF14= + resolved "https://codeload.github.com/IvyApp/ivy-codemirror/tar.gz/c3b7f49f8e6492878619f8055695581240cce21a" dependencies: - codemirror "~5.15.0" - ember-cli-babel "^6.0.0" + codemirror "^5.47.0" + ember-cli-babel "^7.7.3" ember-cli-node-assets "^0.2.2" +joi@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-12.0.0.tgz#46f55e68f4d9628f01bbb695902c8b307ad8d33a" + integrity sha512-z0FNlV4NGgjQN1fdtHYXf5kmgludM65fG/JlXzU6+rwkt9U5UWuXVYnXa2FpK0u6+qBuCmrm5byPNuiiddAHvQ== + dependencies: + hoek "4.x.x" + isemail "3.x.x" + topo "2.x.x" + jquery-deferred@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/jquery-deferred/-/jquery-deferred-0.3.1.tgz#596eca1caaff54f61b110962b23cafea74c35355" integrity sha1-WW7KHKr/VPYbEQlisjyv6nTDU1U= -jquery@^3.2.1, jquery@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" - integrity sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg== +jquery@^3.2.1, jquery@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" + integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== js-base64@^2.1.8: version "2.5.1" @@ -6941,7 +10145,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.2.5, js-yaml@^3.2.7: +js-yaml@^3.13.0, js-yaml@^3.2.5, js-yaml@^3.2.7: version "3.13.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e" integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ== @@ -6949,10 +10153,10 @@ js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.2.5, js-yaml@^3.2.7: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -6962,6 +10166,37 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^12.0.0: + version "12.2.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-12.2.0.tgz#7cf3f5b5eafd47f8f09ca52315d367ff6e95de23" + integrity sha512-QPOggIJ8fquWPLaYYMoh+zqUmdphDtu1ju0QGTitZT1Yd8I5qenPpXM1etzUegu3MjVp8XPzgZxdn8Yj7e40ig== + dependencies: + abab "^2.0.0" + acorn "^6.0.2" + acorn-globals "^4.3.0" + array-equal "^1.0.0" + cssom "^0.3.4" + cssstyle "^1.1.1" + data-urls "^1.0.1" + domexception "^1.0.1" + escodegen "^1.11.0" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.0.9" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.5" + saxes "^3.1.3" + symbol-tree "^3.2.2" + tough-cookie "^2.4.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + ws "^6.1.0" + xml-name-validator "^3.0.0" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -6982,6 +10217,23 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-api-serializer@^1.11.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/json-api-serializer/-/json-api-serializer-1.15.1.tgz#241ea66dfc5c629ae46d8315c6ee4232b81bb6b7" + integrity sha512-dp7d/TLWudViXADFnmdiq80krYZ+zA0WeB1771O1Is8HWdeySZofhp/TPWHCzgFPmGkgwI7oTEgjgZ6Dcxr/2w== + dependencies: + into-stream "^3.1.0" + joi "^12.0.0" + lodash "^4.5.1" + stream-to-array "^2.3.0" + through2 "^2.0.3" + unique-stream "^2.2.1" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -7009,11 +10261,16 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -7067,6 +10324,13 @@ just-extend@^4.0.2: resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -7091,6 +10355,24 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + +lazy-universal-dotenv@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" + integrity sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ== + dependencies: + "@babel/runtime" "^7.5.0" + app-root-dir "^1.0.2" + core-js "^3.0.4" + dotenv "^8.0.0" + dotenv-expand "^5.1.0" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -7122,6 +10404,13 @@ linkify-it@^2.0.0: dependencies: uc.micro "^1.0.1" +linkify-it@~1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-1.2.4.tgz#0773526c317c8fd13bd534ee1d180ff88abf881a" + integrity sha1-B3NSbDF8j9E71TTuHRgP+Iq/iBo= + dependencies: + uc.micro "^1.0.1" + lint-staged@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79" @@ -7213,12 +10502,12 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -loader-runner@^2.3.0: +loader-runner@^2.3.0, loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.1.0: +loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -7253,6 +10542,18 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash-es@^4.17.11: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" @@ -7367,16 +10668,16 @@ lodash._objecttypes@~2.3.0: resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.3.0.tgz#6a3ea3987dd6eeb8021b2d5c9c303549cc2bae1e" integrity sha1-aj6jmH3W7rgCGy1cnDA1Scwrrh4= +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + lodash._reinterpolate@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.3.0.tgz#03ee9d85c0e55cbd590d71608a295bdda51128ec" integrity sha1-A+6dhcDlXL1ZDXFgiilb3aURKOw= -lodash._reinterpolate@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash._renative@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash._renative/-/lodash._renative-2.3.0.tgz#77d8edd4ced26dd5971f9e15a5f772e4e317fbd3" @@ -7438,16 +10739,26 @@ lodash.bind@~2.3.0: lodash._renative "~2.3.0" lodash._slice "~2.3.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + lodash.castarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" integrity sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU= -lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.4.1: +lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.4.1, lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +lodash.compact@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.compact/-/lodash.compact-3.0.1.tgz#540ce3837745975807471e16b4a2ba21e7256ca5" + integrity sha1-VAzjg3dFl1gHRx4WtKK6IeclbKU= + lodash.debounce@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-3.1.1.tgz#812211c378a94cc29d5aa4e3346cf0bfce3a7df5" @@ -7455,6 +10766,11 @@ lodash.debounce@^3.1.1: dependencies: lodash._getnative "^3.0.0" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -7469,9 +10785,9 @@ lodash.defaults@~2.3.0: lodash.keys "~2.3.0" lodash.defaultsdeep@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz#bec1024f85b1bd96cbea405b23c14ad6443a6f81" - integrity sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E= + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" + integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== lodash.escape@~2.3.0: version "2.3.0" @@ -7482,7 +10798,7 @@ lodash.escape@~2.3.0: lodash._reunescapedhtml "~2.3.0" lodash.keys "~2.3.0" -lodash.find@^4.5.1: +lodash.find@^4.5.1, lodash.find@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E= @@ -7495,6 +10811,11 @@ lodash.flatten@^3.0.2: lodash._baseflatten "^3.0.0" lodash._isiterateecall "^3.0.0" +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + lodash.foreach@~2.3.x: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-2.3.0.tgz#083404c91e846ee77245fdf9d76519c68b2af168" @@ -7503,6 +10824,11 @@ lodash.foreach@~2.3.x: lodash._basecreatecallback "~2.3.0" lodash.forown "~2.3.0" +lodash.forin@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.forin/-/lodash.forin-4.4.0.tgz#5d3f20ae564011fbe88381f7d98949c9c9519731" + integrity sha1-XT8grlZAEfvog4H32YlJyclRlzE= + lodash.forown@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.forown/-/lodash.forown-2.3.0.tgz#24fb4aaf800d45fc2dc60bfec3ce04c836a3ad7f" @@ -7517,6 +10843,11 @@ lodash.get@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= +lodash.has@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= + lodash.identity@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.identity/-/lodash.identity-2.3.0.tgz#6b01a210c9485355c2a913b48b6711219a173ded" @@ -7527,6 +10858,11 @@ lodash.intersection@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-4.4.0.tgz#0a11ba631d0e95c23c7f2f4cbb9a692ed178e705" integrity sha1-ChG6Yx0OlcI8fy9Mu5ppLtF45wU= +lodash.invokemap@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz#1748cda5d8b0ef8369c4eb3ec54c21feba1f2d62" + integrity sha1-F0jNpdiw74NpxOs+xUwh/rofLWI= + lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -7537,11 +10873,31 @@ lodash.isarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= +lodash.isempty@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" + integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4= + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + lodash.isfunction@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-2.3.0.tgz#6b2973e47a647cf12e70d676aea13643706e5267" integrity sha1-aylz5HpkfPEucNZ2rqE2Q3BuUmc= +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + lodash.isobject@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.3.0.tgz#2e16d3fc583da9831968953f2d8e6d73434f6799" @@ -7549,6 +10905,11 @@ lodash.isobject@~2.3.0: dependencies: lodash._objecttypes "~2.3.0" +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -7567,20 +10928,35 @@ lodash.keys@~2.3.0: lodash._shimkeys "~2.3.0" lodash.isobject "~2.3.0" +lodash.lowerfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" + integrity sha1-3jx7EuAsZSSgBZwvbLfFxSZVoT0= + +lodash.map@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +lodash.mapvalues@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= lodash.merge@^4.3.1, lodash.merge@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" - integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== lodash.noop@~2.3.0: version "2.3.0" @@ -7592,11 +10968,26 @@ lodash.omit@^4.1.0: resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= +lodash.pick@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.support@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.support/-/lodash.support-2.3.0.tgz#7eaf038af4f0d6aab776b44aa6dcfc80334c9bfd" @@ -7605,11 +10996,11 @@ lodash.support@~2.3.0: lodash._renative "~2.3.0" lodash.template@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" - integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A= + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== dependencies: - lodash._reinterpolate "~3.0.0" + lodash._reinterpolate "^3.0.0" lodash.templatesettings "^4.0.0" lodash.template@~2.3.x: @@ -7626,11 +11017,11 @@ lodash.template@~2.3.x: lodash.values "~2.3.0" lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" - integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY= + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== dependencies: - lodash._reinterpolate "~3.0.0" + lodash._reinterpolate "^3.0.0" lodash.templatesettings@~2.3.0: version "2.3.0" @@ -7640,6 +11031,11 @@ lodash.templatesettings@~2.3.0: lodash._reinterpolate "~2.3.0" lodash.escape "~2.3.0" +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + lodash.uniq@^4.2.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -7650,6 +11046,11 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= +lodash.values@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" + integrity sha1-o6bCsOvsxcLLocF+bmIP6BtT00c= + lodash.values@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.3.0.tgz#ca96fbe60a20b0b0ec2ba2ba5fc6a765bd14a3ba" @@ -7657,11 +11058,21 @@ lodash.values@~2.3.0: dependencies: lodash.keys "~2.3.0" -lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.5.1, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.3.0, lodash@~4.17.10: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.5: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.5.1: + version "4.17.14" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" + integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -7685,12 +11096,12 @@ log-update@^2.3.0: cli-cursor "^2.0.0" wrap-ansi "^3.0.1" -lolex@^2.3.2, lolex@^2.7.5: - version "2.7.5" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.5.tgz#113001d56bfc7e02d56e36291cc5c413d1aa0733" - integrity sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q== +lolex@^4.0.1, lolex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.1.0.tgz#ecdd7b86539391d8237947a3419aa8ac975f0fe1" + integrity sha512-BYxIEXiVq5lGIXeVHnsFzqa1TxN5acnKnPCdlZSpzm8viNEOhiigupA4vTQ9HEFQ6nLTQ9wQOgBknJgzUYQ9Aw== -loose-envify@^1.0.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -7705,6 +11116,29 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowlight@~1.9.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.2.tgz#0b9127e3cec2c3021b7795dd81005c709a42fdd1" + integrity sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q== + dependencies: + fault "^1.0.2" + highlight.js "~9.12.0" + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -7747,6 +11181,13 @@ make-dir@^2.0.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== + dependencies: + semver "^6.0.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -7754,6 +11195,11 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -7764,6 +11210,11 @@ map-obj@^1.0.0, map-obj@^1.0.1: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= +map-or-similar@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" + integrity sha1-beJlMXSt+12e3DPGnT6Sobdvrwg= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -7782,6 +11233,17 @@ markdown-it-terminal@0.1.0: lodash.merge "^4.6.0" markdown-it "^8.3.1" +markdown-it@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-4.4.0.tgz#3df373dbea587a9a7fef3e56311b68908f75c414" + integrity sha1-PfNz2+pYepp/7z5WMRtokI91xBQ= + dependencies: + argparse "~1.0.2" + entities "~1.1.1" + linkify-it "~1.2.0" + mdurl "~1.0.0" + uc.micro "^1.0.0" + markdown-it@^8.3.1, markdown-it@^8.4.2: version "8.4.2" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" @@ -7793,19 +11255,19 @@ markdown-it@^8.3.1, markdown-it@^8.4.2: mdurl "^1.0.1" uc.micro "^1.0.5" -matcher-collection@^1.0.0, matcher-collection@^1.0.5, matcher-collection@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838" - integrity sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g== +markdown-to-jsx@^6.9.1, markdown-to-jsx@^6.9.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.10.3.tgz#7f0946684acd321125ff2de7fd258a9b9c7c40b7" + integrity sha512-PSoUyLnW/xoW6RsxZrquSSz5eGEOTwa15H5eqp3enmrp8esmgDJmhzd6zmQ9tgAA9TxJzx1Hmf3incYU/IamoQ== dependencies: - minimatch "^3.0.2" + prop-types "^15.6.2" + unquote "^1.1.0" -matcher-collection@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-2.0.0.tgz#470ae263c793e897b3f1e72c695016b7aea355c4" - integrity sha512-wSi4BgQGTFfBN5J+pIaS78rEKk4qIkjrw+NfJYdHsd2cRVIQsbDi3BZtNAXTFA2WHvlbS9kLGtTjv3cPJKuRSw== +matcher-collection@^1.0.0, matcher-collection@^1.0.5, matcher-collection@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838" + integrity sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g== dependencies: - "@types/minimatch" "^3.0.3" minimatch "^3.0.2" matcher@^1.0.0: @@ -7815,6 +11277,11 @@ matcher@^1.0.0: dependencies: escape-string-regexp "^1.0.4" +material-colors@^1.2.1: + version "1.2.6" + resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" + integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== + md5-hex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" @@ -7836,17 +11303,17 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -mdn-data@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.2.0.tgz#eadd28b0f2d307cf27e71524609bfb749ebfc0b6" - integrity sha512-esDqNvsJB2q5V28+u7NdtdMg6Rmg4khQmAVSjUiX7BY/7haIv0K2yWM43hYp0or+3nvG7+UaTF1JHz31hgU1TA== - mdn-data@~1.1.0: version "1.1.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== -mdurl@^1.0.1: +mdn-links@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/mdn-links/-/mdn-links-0.1.0.tgz#e24c83b97cb4c5886cc39f2f780705fbfe273aa5" + integrity sha1-4kyDuXy0xYhsw58veAcF+/4nOqU= + +mdurl@^1.0.1, mdurl@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= @@ -7863,7 +11330,19 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" -memory-fs@^0.4.0, memory-fs@~0.4.1: +memoize-one@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + +memoizerific@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" + integrity sha1-fIekZGREwy11Q4VwkF8tvRsagFo= + dependencies: + map-or-similar "^1.5.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -7878,7 +11357,7 @@ memory-streams@^0.1.3: dependencies: readable-stream "~1.0.2" -meow@^3.4.0, meow@^3.7.0: +meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= @@ -7924,7 +11403,7 @@ merge2@^1.2.3: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== -merge@^1.2.0: +merge@^1.2.0, merge@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== @@ -7934,6 +11413,11 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -7961,6 +11445,11 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + "mime-db@>= 1.38.0 < 2", mime-db@~1.38.0: version "1.38.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" @@ -7973,16 +11462,55 @@ mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.18, mime-types@~2.1.19: dependencies: mime-db "~1.38.0" +mime-types@^2.1.19, mime-types@~2.1.24: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + +mime-types@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" + integrity sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4= + mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +mime@~1.2.11: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + integrity sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA= + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -7993,7 +11521,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: +"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -8015,7 +11543,7 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.0, minipass@^2.2.1, minipass@^2.3.4: +minipass@^2.2.0, minipass@^2.2.1, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== @@ -8023,7 +11551,7 @@ minipass@^2.2.0, minipass@^2.2.1, minipass@^2.3.4: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.1: +minizlib@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== @@ -8047,9 +11575,9 @@ mississippi@^3.0.0: through2 "^2.0.0" mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" @@ -8083,7 +11611,7 @@ moment-timezone@^0.5.13: resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== -morgan@^1.9.0: +morgan@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== @@ -8116,21 +11644,21 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + mustache@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/mustache/-/mustache-3.0.1.tgz#873855f23aa8a95b150fb96d9836edbc5a1d248a" integrity sha512-jFI/4UVRsRYdUbuDTKT7KzfOp7FiD5WzYmmwNwXyUVypC0xjoTL78Fqc0jHUPIvvGD+6DQSPHIt1NE7D1ArsqA== -mute-stream@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" - integrity sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s= - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -8145,11 +11673,16 @@ najax@^1.0.3: lodash.defaultsdeep "^4.6.0" qs "^6.2.0" -nan@^2.10.0, nan@^2.9.2: +nan@^2.10.0: version "2.13.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -8173,11 +11706,11 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= needle@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== dependencies: - debug "^2.1.2" + debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" @@ -8186,31 +11719,51 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= -neo-async@^2.5.0, neo-async@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nise@^1.4.5: - version "1.4.10" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.10.tgz#ae46a09a26436fae91a38a60919356ae6db143b6" - integrity sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA== +nise@^1.4.10: + version "1.5.0" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.0.tgz#d03ea0e6c1b75c638015aa3585eddc132949a50d" + integrity sha512-Z3sfYEkLFzFmL8KY6xnSJLRxwQwYBjOXi/24lb62ZnZiGA0JUzGGTI6TBIgfCSMIDl9Jlu8SRmHNACLTemDHww== dependencies: "@sinonjs/formatio" "^3.1.0" "@sinonjs/text-encoding" "^0.7.1" just-extend "^4.0.2" - lolex "^2.3.2" + lolex "^4.1.0" path-to-regexp "^1.7.0" -node-fetch@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" - integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA== +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-fetch@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== node-gyp@^3.8.0: version "3.8.0" @@ -8235,10 +11788,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" - integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== +node-libs-browser@^2.0.0, node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -8250,7 +11803,7 @@ node-libs-browser@^2.0.0: events "^3.0.0" https-browserify "^1.0.0" os-browserify "^0.3.0" - path-browserify "0.0.0" + path-browserify "0.0.1" process "^0.11.10" punycode "^1.2.4" querystring-es3 "^0.2.0" @@ -8262,7 +11815,7 @@ node-libs-browser@^2.0.0: tty-browserify "0.0.0" url "^0.11.0" util "^0.11.0" - vm-browserify "0.0.4" + vm-browserify "^1.0.1" node-modules-path@^1.0.0, node-modules-path@^1.0.1: version "1.0.2" @@ -8280,10 +11833,10 @@ node-notifier@^5.0.1: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -8296,13 +11849,20 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.12.tgz#1d6baf544316b5422fcd35efe18708370a4e7637" - integrity sha512-Y+AQ1xdjcgaEzpL65PBEF3fnl1FNKnDh9Zm+AUQLIlyyqtSc4u93jyMN4zrjMzdwKQ10RTr3tgY1x7qpsfF/xg== +node-releases@^1.1.25: + version "1.1.25" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.25.tgz#0c2d7dbc7fed30fbe02a9ee3007b8c90bf0133d3" + integrity sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ== dependencies: semver "^5.3.0" +node-releases@^1.1.29: + version "1.1.34" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.34.tgz#ced4655ee1ba9c3a2c5dcbac385e19434155fd40" + integrity sha512-fNn12JTEfniTuCqo0r9jXgl44+KxRH/huV7zM/KAGOKxDKrHr6EbT7SSs4B+DNxyBE2mks28AD+Jw6PkfY5uwA== + dependencies: + semver "^6.3.0" + node-sass@^4.7.2: version "4.11.0" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" @@ -8328,6 +11888,16 @@ node-sass@^4.7.2: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" +node-uuid@~1.4.0: + version "1.4.8" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" + integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= + +node-watch@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.6.0.tgz#ab0703b60cd270783698e57a428faa0010ed8fd0" + integrity sha512-XAgTL05z75ptd7JSVejH1a2Dm1zmXYhuDr9l230Qk6Z7/7GPcnAs/UyJJ4ggsXSvWil8iOzwQLW0zuGUvHpG8g== + "nopt@2 || 3", nopt@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -8365,6 +11935,20 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" @@ -8386,9 +11970,9 @@ npm-package-arg@^6.1.0: validate-npm-package-name "^3.0.0" npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -8416,7 +12000,7 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -8426,24 +12010,39 @@ npm-which@^3.0.1: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^1.0.1: +nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== dependencies: boolbase "~1.0.0" +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +nwsapi@^2.0.9: + version "2.1.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" + integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== + +oauth-sign@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" + integrity sha1-y1QPk7srIqfVlBaRoojWDo6pOG4= + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@4.1.1, object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@4.1.1, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -8472,6 +12071,16 @@ object-hash@^1.3.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + +object-keys@^1.0.11, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-keys@^1.0.12: version "1.1.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" @@ -8484,6 +12093,36 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" + integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +"object.fromentries@^2.0.0 || ^1.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" + integrity sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.15.0" + function-bind "^1.1.1" + has "^1.0.3" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -8499,7 +12138,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.0.4: +object.values@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== @@ -8528,11 +12167,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -8540,6 +12174,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +open@^6.1.0, open@^6.3.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -8548,7 +12189,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.2: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= @@ -8560,24 +12201,31 @@ optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -ora@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-2.1.0.tgz#6caf2830eb924941861ec53a173799e008b51e5b" - integrity sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA== +ora@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== dependencies: - chalk "^2.3.1" + chalk "^2.4.2" cli-cursor "^2.1.0" - cli-spinners "^1.1.0" + cli-spinners "^2.0.0" log-symbols "^2.2.0" - strip-ansi "^4.0.0" + strip-ansi "^5.2.0" wcwidth "^1.0.1" +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0, os-homedir@^1.0.1: +os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= @@ -8598,11 +12246,6 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-shim@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" - integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= - os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -8616,11 +12259,26 @@ osenv@0, osenv@^0.1.3, osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + +p-defer@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-2.1.0.tgz#d9c97b40f8fb5c256a70b4aabec3c1c8c42f1fae" + integrity sha512-xMwL9id1bHn/UfNGFEMFwlULOprQUEOg6vhqSfr6oKxPFB0oSh0zhGq/9/tPSE+cyij2+RW6H8+0Ke4xsPdZ7Q== + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -8635,6 +12293,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-limit@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -8649,6 +12314,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -8659,6 +12331,13 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.0.0.tgz#be18c5a5adeb8e156460651421aceca56c213a50" integrity sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w== +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -8683,6 +12362,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" +param-case@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -8702,6 +12388,18 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-entities@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -8727,6 +12425,18 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== + dependencies: + "@types/node" "*" + parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -8746,22 +12456,20 @@ parseurl@~1.3.2: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -passwd-user@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/passwd-user/-/passwd-user-1.2.1.tgz#a01a5dc639ef007dc56364b8178569080ad3a7b8" - integrity sha1-oBpdxjnvAH3FY2S4F4VpCArTp7g= - dependencies: - exec-file-sync "^2.0.0" - -path-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" - integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-dirname@^1.0.0: version "1.0.2" @@ -8780,7 +12488,12 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@1.0.1, path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -8795,7 +12508,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5, path-parse@^1.0.6: +path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -8895,7 +12608,14 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-up@^2.0.0: +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@2.0.0, pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= @@ -8909,10 +12629,34 @@ please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: dependencies: semver-compare "^1.0.0" -portfinder@^1.0.15: - version "1.0.20" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" - integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw== +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +pnp-webpack-plugin@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.4.3.tgz#0a100b63f4a1d09cee6ee55a87393b69f03ab5c7" + integrity sha512-ExrNwuFH3DudHwWY2uRMqyiCOBEDdhQYHIAsqW/CM6hIZlSgXC/ma/p08FoNOUhVyh9hl1NGnMpR94T5i3SHaQ== + dependencies: + ts-pnp "^1.1.2" + +polished@^3.3.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/polished/-/polished-3.4.1.tgz#1eb5597ec1792206365635811d465751f5cbf71c" + integrity sha512-GflTnlP5rrpDoigjczEkS6Ye7NDA4sFvAnlr5hSDrEvjiVj97Xzev3hZlLi3UB27fpxyTS9rWU64VzVLWkG+mg== + dependencies: + "@babel/runtime" "^7.4.5" + +popper.js@^1.14.4, popper.js@^1.14.7: + version "1.15.0" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" + integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== + +portfinder@^1.0.20: + version "1.0.21" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.21.tgz#60e1397b95ac170749db70034ece306b9a27e324" + integrity sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA== dependencies: async "^1.5.2" debug "^2.2.0" @@ -8923,24 +12667,123 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-flexbugs-fixes@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20" + integrity sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA== + dependencies: + postcss "^7.0.0" + +postcss-load-config@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.16" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.0" + +postcss-modules-scope@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" + integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== + +postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233" + integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -pretender@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretender/-/pretender-2.1.1.tgz#5085f0a1272c31d5b57c488386f69e6ca207cb35" - integrity sha512-IkidsJzaroAanw3I43tKCFm2xCpurkQr9aPXv5/jpN+LfCwDaeI8rngVWtQZTx4qqbhc5zJspnLHJ4N/25KvDQ== +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +pretender@3.0.2, pretender@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pretender/-/pretender-3.0.2.tgz#1e9123914c4e4bd1b553ca78a401120d300d265f" + integrity sha512-6gIDHUaJKRZv7ZgP3CsKicvxtBB3brBr2LWKvJYvEyZRicG9JV2SKokK2TIK0b4Zz9+4C79y57MZHpqUjvJqDg== dependencies: - "@xg-wang/whatwg-fetch" "^3.0.0" fake-xml-http-request "^2.0.0" route-recognizer "^0.3.3" + whatwg-fetch "^3.0.0" + +prettier@^1.16.4, prettier@^1.4.4: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + +pretty-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" -prettier@^1.4.4: - version "1.16.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" - integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g== +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= pretty-ms@^3.1.0: version "3.2.0" @@ -8954,15 +12797,22 @@ printf@^0.5.1: resolved "https://registry.yarnpkg.com/printf/-/printf-0.5.1.tgz#e0466788260859ed153006dc6867f09ddf240cf3" integrity sha512-UaE/jO0hNsrvPGQEb4LyNzcrJv9Z00tsreBduOSxMtrebvoUhxiEJ4YCHX8YHf6akwfKsC2Gyv5zv47UXhMiLg== +prismjs@^1.8.4, prismjs@~1.17.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" + integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== + optionalDependencies: + clipboard "^2.0.0" + private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process-relative-require@^1.0.0: version "1.0.0" @@ -8993,11 +12843,52 @@ promise-map-series@^0.2.1, promise-map-series@^0.2.3: dependencies: rsvp "^3.0.14" +promise.allsettled@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.1.tgz#afe4bfcc13b26e2263a97a7fbbb19b8ca6eb619c" + integrity sha512-3ST7RS7TY3TYLOIe+OACZFvcWVe1osbgz2x07nTb446pa3t4GUZWidMDzQ4zf9jC2l6mRa1/3X81icFYbi+D/g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.13.0" + function-bind "^1.1.1" + +promise.prototype.finally@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.1.tgz#cb279d3a5020ca6403b3d92357f8e22d50ed92aa" + integrity sha512-gnt8tThx0heJoI3Ms8a/JdkYBVhYP/wv+T7yQimR+kdOEJL21xTFbiJhMRqnSPcr54UVvMbsscDk2w+ivyaLPw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.13.0" + function-bind "^1.1.1" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + property-expr@^1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== +property-information@^5.0.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.3.0.tgz#bc87ac82dc4e72a31bb62040544b1bf9653da039" + integrity sha512-IslotQn1hBCZDY7SaJ3zmCjVea219VTwmOk6Pu3z9haU9m4+T8GwaDubur+6NMHEU+Fjs/6/p66z6QULPkcL1w== + dependencies: + xtend "^4.0.1" + proxy-addr@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" @@ -9006,6 +12897,14 @@ proxy-addr@~2.0.4: forwarded "~0.1.2" ipaddr.js "1.8.0" +proxy-addr@~2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" + integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.0" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -9021,6 +12920,11 @@ psl@^1.1.24: resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== +psl@^1.1.28: + version "1.3.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd" + integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag== + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -9063,16 +12967,16 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= +punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -9083,12 +12987,22 @@ qs@6.5.2, qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -qs@^6.2.0, qs@^6.4.0: +qs@6.7.0, qs@^6.2.0, qs@^6.4.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -query-string@^5.0.0: +qs@^6.6.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.0.tgz#d1297e2a049c53119cb49cca366adbbacc80b409" + integrity sha512-27RP4UotQORTpmNQDX8BHPukOnBP3p1uUJY5UnDhaJB+rMt9iMsok724XL+UHU23bEFOHRMQ2ZhI99qOWUMGFA== + +qs@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-1.0.2.tgz#50a93e2b5af6691c31bcea5dae78ee6ea1903768" + integrity sha1-UKk+K1r2aRwxvOpdrnjubqGQN2g= + +query-string@^5.0.0, query-string@^5.0.1: version "5.1.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== @@ -9102,11 +13016,16 @@ querystring-es3@^0.2.0: resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -querystring@0.2.0: +querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + quick-temp@^0.1.2, quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.8.tgz#bab02a242ab8fb0dd758a3c9776b32f9a5d94408" @@ -9124,18 +13043,21 @@ qunit-dom@^0.9.0: broccoli-funnel "^2.0.2" broccoli-merge-trees "^3.0.1" -qunit@~2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.6.2.tgz#551210c5cf857258a4fe39a7fe15d9e14dfef22c" - integrity sha512-PHbKulmd4rrDhFto7iHicIstDTX7oMRvAcI7loHstvU8J7AOGwzcchONmy+EG4KU8HDk0K90o7vO0GhlYyKlOg== +qunit@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.9.2.tgz#97919440c9c0ae838bcd3c33a2ee42f35c5ef4a0" + integrity sha512-wTOYHnioWHcx5wa85Wl15IE7D6zTZe2CQlsodS14yj7s2FZ3MviRnQluspBZsueIDEO7doiuzKlv05yfky1R7w== dependencies: commander "2.12.2" - exists-stat "1.0.0" - findup-sync "2.0.0" js-reporters "1.2.1" - resolve "1.5.0" - sane "^2.5.2" - walk-sync "0.3.2" + minimatch "3.0.4" + node-watch "0.6.0" + resolve "1.9.0" + +ramda@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" + integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" @@ -9152,6 +13074,11 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" @@ -9167,6 +13094,16 @@ raw-body@2.3.3: iconv-lite "0.4.23" unpipe "1.0.0" +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + raw-body@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" @@ -9175,6 +13112,14 @@ raw-body@~1.1.0: bytes "1" string_decoder "0.10" +raw-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-2.0.0.tgz#e2813d9e1e3f80d1bbade5ad082e809679e20c26" + integrity sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -9185,6 +13130,218 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-clientside-effect@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837" + integrity sha512-nRmoyxeok5PBO6ytPvSjKp9xwXg9xagoTK1mMjwnQxqM9Hd7MNPl+LS1bOSOe+CV2+4fnEquc7H/S8QD3q697A== + dependencies: + "@babel/runtime" "^7.0.0" + +react-color@^2.17.0: + version "2.17.3" + resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.17.3.tgz#b8556d744f95193468c7061d2aa19180118d4a48" + integrity sha512-1dtO8LqAVotPIChlmo6kLtFS1FP89ll8/OiA8EcFRDR+ntcK+0ukJgByuIQHRtzvigf26dV5HklnxDIvhON9VQ== + dependencies: + "@icons/material" "^0.2.4" + lodash "^4.17.11" + material-colors "^1.2.1" + prop-types "^15.5.10" + reactcss "^1.2.0" + tinycolor2 "^1.4.1" + +react-dev-utils@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.1.0.tgz#3ad2bb8848a32319d760d0a84c56c14bdaae5e81" + integrity sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg== + dependencies: + "@babel/code-frame" "7.5.5" + address "1.1.2" + browserslist "4.7.0" + chalk "2.4.2" + cross-spawn "6.0.5" + detect-port-alt "1.1.6" + escape-string-regexp "1.0.5" + filesize "3.6.1" + find-up "3.0.0" + fork-ts-checker-webpack-plugin "1.5.0" + global-modules "2.0.0" + globby "8.0.2" + gzip-size "5.1.1" + immer "1.10.0" + inquirer "6.5.0" + is-root "2.1.0" + loader-utils "1.2.3" + open "^6.3.0" + pkg-up "2.0.0" + react-error-overlay "^6.0.3" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + sockjs-client "1.4.0" + strip-ansi "5.2.0" + text-table "0.2.0" + +react-dom@^16.8.3: + version "16.10.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.2.tgz#4840bce5409176bc3a1f2bd8cb10b92db452fda6" + integrity sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.16.2" + +react-draggable@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.0.3.tgz#6b9f76f66431c47b9070e9b805bbc520df8ca481" + integrity sha512-4vD6zms+9QGeZ2RQXzlUBw8PBYUXy+dzYX5r22idjp9YwQKIIvD/EojL0rbjS1GK4C3P0rAJnmKa8gDQYWUDyA== + dependencies: + classnames "^2.2.5" + prop-types "^15.6.0" + +react-error-overlay@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.3.tgz#c378c4b0a21e88b2e159a3e62b2f531fd63bf60d" + integrity sha512-bOUvMWFQVk5oz8Ded9Xb7WVdEi3QGLC8tH7HmYP0Fdp4Bn3qw0tRFmr5TW6mvahzvmrK4a6bqWGfCevBflP+Xw== + +react-fast-compare@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-focus-lock@^1.18.3: + version "1.19.1" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-1.19.1.tgz#2f3429793edaefe2d077121f973ce5a3c7a0651a" + integrity sha512-TPpfiack1/nF4uttySfpxPk4rGZTLXlaZl7ncZg/ELAk24Iq2B1UUaUioID8H8dneUXqznT83JTNDHDj+kwryw== + dependencies: + "@babel/runtime" "^7.0.0" + focus-lock "^0.6.3" + prop-types "^15.6.2" + react-clientside-effect "^1.2.0" + +react-helmet-async@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.3.tgz#68a176dd266c2caf63762879c573a866b89a2098" + integrity sha512-hthnzAPasSX0ZU0adR1YW51xtMhwQuMwxtyjb/OeS2Gu2bzqFnCtt2h93nENE0+97NPeUS0+YHOriEMX8j/W0w== + dependencies: + "@babel/runtime" "7.3.4" + invariant "2.2.4" + prop-types "15.7.2" + react-fast-compare "2.0.4" + shallowequal "1.1.0" + +react-hotkeys@2.0.0-pre4: + version "2.0.0-pre4" + resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-2.0.0-pre4.tgz#a1c248a51bdba4282c36bf3204f80d58abc73333" + integrity sha512-oa+UncSWyOwMK3GExt+oELXaR7T3ItgcMolsupQFdKvwkEhVAluJd5rYczsRSQpQlVkdNoHG46De2NUeuS+88Q== + dependencies: + prop-types "^15.6.1" + +react-input-autosize@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.2.tgz#fcaa7020568ec206bc04be36f4eb68e647c4d8c2" + integrity sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw== + dependencies: + prop-types "^15.5.8" + +react-is@^16.7.0, react-is@^16.8.1: + version "16.10.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab" + integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-popper-tooltip@^2.8.3: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.9.0.tgz#44b338c5d3316c7d2781de791d8a256ec7f5f377" + integrity sha512-kBsY5PHbBoRjgo8ZlWt6CHgjtTEfd3B0hr6R0UjZABpqVBlCvwkkLb1h30KeNETL9JT0NySDjxTQGeeJrhMMdg== + dependencies: + "@babel/runtime" "^7.6.2" + react-popper "^1.3.4" + +react-popper@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.4.tgz#f0cd3b0d30378e1f663b0d79bcc8614221652ced" + integrity sha512-9AcQB29V+WrBKk6X7p0eojd1f25/oJajVdMZkywIoAV6Ag7hzE1Mhyeup2Q1QnvFRtGQFQvtqfhlEoDAPfKAVA== + dependencies: + "@babel/runtime" "^7.1.2" + create-react-context "^0.3.0" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + +react-select@^3.0.0: + version "3.0.8" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.0.8.tgz#06ff764e29db843bcec439ef13e196865242e0c1" + integrity sha512-v9LpOhckLlRmXN5A6/mGGEft4FMrfaBFTGAnuPHcUgVId7Je42kTq9y0Z+Ye5z8/j0XDT3zUqza8gaRaI1PZIg== + dependencies: + "@babel/runtime" "^7.4.4" + "@emotion/cache" "^10.0.9" + "@emotion/core" "^10.0.9" + "@emotion/css" "^10.0.9" + memoize-one "^5.0.0" + prop-types "^15.6.0" + react-input-autosize "^2.2.2" + react-transition-group "^2.2.1" + +react-sizeme@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.7.tgz#231339ce8821ac2c26424c791e0027f89dae3e90" + integrity sha512-xCjPoBP5jmeW58TxIkcviMZqabZis7tTvDFWf0/Wa5XCgVWQTIe74NQBes2N1Kmp64GRLkpm60BaP0kk+v8aCQ== + dependencies: + element-resize-detector "^1.1.15" + invariant "^2.2.4" + shallowequal "^1.1.0" + throttle-debounce "^2.1.0" + +react-syntax-highlighter@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-8.1.0.tgz#59103ff17a828a27ed7c8f035ae2558f09b6b78c" + integrity sha512-G2bkZxmF3VOa4atEdXIDSfwwCqjw6ZQX5znfTaHcErA1WqHIS0o6DaSCDKFPVaOMXQEB9Hf1UySYQvuJmV8CXg== + dependencies: + babel-runtime "^6.18.0" + highlight.js "~9.12.0" + lowlight "~1.9.1" + prismjs "^1.8.4" + refractor "^2.4.1" + +react-textarea-autosize@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.0.tgz#3132cb77e65d94417558d37c0bfe415a5afd3445" + integrity sha512-c2FlR/fP0qbxmlrW96SdrbgP/v0XZMTupqB90zybvmDVDutytUgPl7beU35klwcTeMepUIQEpQUn3P3bdshGPg== + dependencies: + "@babel/runtime" "^7.1.2" + prop-types "^15.6.0" + +react-transition-group@^2.2.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" + integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== + dependencies: + dom-helpers "^3.4.0" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" + +react@^16.8.3: + version "16.10.2" + resolved "https://registry.yarnpkg.com/react/-/react-16.10.2.tgz#a5ede5cdd5c536f745173c8da47bda64797a4cf0" + integrity sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +reactcss@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" + integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== + dependencies: + lodash "^4.0.1" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -9224,6 +13381,15 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" +"readable-stream@2 || 3", readable-stream@^3.1.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~1.0.2: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -9263,6 +13429,20 @@ recast@^0.13.0: private "~0.1.5" source-map "~0.6.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -9278,10 +13458,19 @@ redeyed@~1.0.0: dependencies: esprima "~3.0.0" -regenerate-unicode-properties@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" - integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ== +refractor@^2.4.1: + version "2.10.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.0.tgz#4cc7efc0028a87924a9b31d82d129dec831a287b" + integrity sha512-maW2ClIkm9IYruuFYGTqKzj+m31heq92wlheW4h7bOstP+gf8bocmMec+j7ljLcaB1CAID85LMB3moye31jH1g== + dependencies: + hastscript "^5.0.0" + parse-entities "^1.1.2" + prismjs "~1.17.0" + +regenerate-unicode-properties@^8.0.2, regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== dependencies: regenerate "^1.4.0" @@ -9300,7 +13489,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.12.0: +regenerator-runtime@^0.12.0, regenerator-runtime@^0.12.1: version "0.12.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== @@ -9324,10 +13513,10 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" -regenerator-transform@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" - integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A== +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== dependencies: private "^0.1.6" @@ -9339,10 +13528,17 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.0: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.5.tgz#7cd71fca17198d04b4176efd79713f2998009397" - integrity sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ== +regexp-tree@^0.1.6: + version "0.1.11" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.11.tgz#c9c7f00fcf722e0a56c7390983a7a63dd6c272f3" + integrity sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg== + +regexp.prototype.flags@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" + integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== + dependencies: + define-properties "^1.1.2" regexpp@^2.0.1: version "2.0.1" @@ -9358,7 +13554,7 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.1.3, regexpu-core@^4.5.4: +regexpu-core@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== @@ -9370,6 +13566,18 @@ regexpu-core@^4.1.3, regexpu-core@^4.5.4: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -9394,11 +13602,27 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" @@ -9416,6 +13640,22 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== + dependencies: + lodash "^4.17.11" + +request-promise-native@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" + integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + dependencies: + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" @@ -9442,6 +13682,26 @@ request@^2.87.0, request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" +request@~2.40.0: + version "2.40.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.40.0.tgz#4dd670f696f1e6e842e66b4b5e839301ab9beb67" + integrity sha1-TdZw9pbx5uhC5mtLXoOTAaub62c= + dependencies: + forever-agent "~0.5.0" + json-stringify-safe "~5.0.0" + mime-types "~1.0.1" + node-uuid "~1.4.0" + qs "~1.0.0" + optionalDependencies: + aws-sign2 "~0.5.0" + form-data "~0.1.0" + hawk "1.1.1" + http-signature "~0.10.0" + oauth-sign "~0.3.0" + stringstream "~0.0.4" + tough-cookie ">=0.12.0" + tunnel-agent "~0.4.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -9467,6 +13727,11 @@ reselect@^3.0.1: resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -9485,40 +13750,66 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-package-path@^1.0.11, resolve-package-path@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.6.tgz#48f5d69a5b3a0ea68f7b9c7398459dd4125807c7" - integrity sha512-He6cGWU74tJ6wLYSKrbvWOfIXf2tUu5RcBWqX/2K9Ju00CncF5WRdCOJQisqCtaULcqIqpLvMtz8ZjfpwlBwqg== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-package-path@^1.0.11, resolve-package-path@^1.2.2, resolve-package-path@^1.2.6, resolve-package-path@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/resolve-package-path/-/resolve-package-path-1.2.7.tgz#2a7bc37ad96865e239330e3102c31322847e652e" + integrity sha512-fVEKHGeK85bGbVFuwO9o1aU0n3vqQGrezPc51JGu9UTXpFQfWq5qCeKxyaRUSvephs+06c5j5rPq/dzHGEo8+Q== dependencies: path-root "^0.1.1" resolve "^1.10.0" +resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" + integrity sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" - integrity sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw== +resolve@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" + integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ== dependencies: - path-parse "^1.0.5" + path-parse "^1.0.6" -resolve@^1.1.3, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.7.1, resolve@^1.8.1: +resolve@^1.1.3, resolve@^1.5.0: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== dependencies: path-parse "^1.0.6" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= +resolve@^1.1.6, resolve@^1.10.1, resolve@^1.11.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.1, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.7.1, resolve@^1.8.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + dependencies: + path-parse "^1.0.6" + +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" + lowercase-keys "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" @@ -9533,18 +13824,20 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.1, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -9554,12 +13847,18 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: inherits "^2.0.1" rollup-pluginutils@^2.0.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.5.0.tgz#23be0f05ac3972ea7b08fc7870cb91fde5b23a09" - integrity sha512-9Muh1H+XB5f5ONmKMayUoTYR1EZwHbwJJ9oZLrKT5yuTf/RLIQ5mYIGsrERquVucJmjmaAW0Y7+6Qo1Ep+5w3Q== + version "2.8.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" + integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== dependencies: - estree-walker "^0.6.0" - micromatch "^3.1.10" + estree-walker "^0.6.1" + +rollup-pluginutils@^2.8.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" rollup@^0.57.1: version "0.57.1" @@ -9578,21 +13877,35 @@ rollup@^0.57.1: signal-exit "^3.0.2" sourcemap-codec "^1.4.1" -route-recognizer@^0.3.3, route-recognizer@^0.3.4: +rollup@^1.12.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.22.0.tgz#a5b2672c0eebe9f2b6454220f785dbc09b64b4bc" + integrity sha512-x4l4ZrV/Mr/x/jvFTmwROdEAhbZjx16yDRTVSKWh/i4oJDuW2dVEbECT853mybYCz7BAitU8ElGlhx7dNjw3qQ== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + +route-recognizer@^0.3.3: version "0.3.4" resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.4.tgz#39ab1ffbce1c59e6d2bdca416f0932611e4f3ca3" integrity sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g== -rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0, rsvp@^3.3.3: +rsvp@^3.0.14, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== -rsvp@^4.6.1, rsvp@^4.7.0, rsvp@^4.8.2, rsvp@^4.8.3, rsvp@^4.8.4: +rsvp@^4.6.1, rsvp@^4.8.3: version "4.8.4" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== +rsvp@^4.7.0, rsvp@^4.8.1, rsvp@^4.8.2, rsvp@^4.8.4, rsvp@^4.8.5: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + rsvp@~3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" @@ -9629,11 +13942,6 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= -rx@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" - integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= - rxjs@^6.3.3, rxjs@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" @@ -9641,11 +13949,21 @@ rxjs@^6.3.3, rxjs@^6.4.0: dependencies: tslib "^1.9.0" +safe-buffer@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== + safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + safe-json-parse@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" @@ -9663,38 +13981,20 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^2.4.1, sane@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - -sane@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" - integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q== +sane@^4.0.0, sane@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== dependencies: + "@cnakazawa/watch" "^1.0.3" anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" execa "^1.0.0" fb-watchman "^2.0.0" micromatch "^3.1.4" minimist "^1.1.1" walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" sass-graph@^2.2.4: version "2.2.4" @@ -9718,6 +14018,21 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^3.1.3: + version "3.1.11" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + +scheduler@^0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.16.2.tgz#f74cd9d33eff6fc554edfb79864868e4819132c1" + integrity sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + schema-utils@^0.4.4: version "0.4.7" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" @@ -9735,6 +14050,14 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +schema-utils@^2.0.0, schema-utils@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.4.1.tgz#e89ade5d056dc8bcaca377574bb4a9c4e1b8be56" + integrity sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w== + dependencies: + ajv "^6.10.2" + ajv-keywords "^3.4.1" + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -9758,6 +14081,11 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +semver@^6.0.0, semver@^6.1.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -9782,10 +14110,40 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" -serialize-javascript@^1.4.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" - integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^1.7.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== + +serve-favicon@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" + integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA= + dependencies: + etag "~1.8.1" + fresh "0.5.2" + ms "2.1.1" + parseurl "~1.3.2" + safe-buffer "5.1.1" serve-static@1.13.2: version "1.13.2" @@ -9797,32 +14155,32 @@ serve-static@1.13.2: parseurl "~1.3.2" send "0.16.2" +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -9832,6 +14190,11 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -9840,6 +14203,16 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-equal@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.0.tgz#fd828d2029ff4e19569db7e19e535e94e2d1f5cc" + integrity sha512-Z21pVxR4cXsfwpMKMhCEIO1PCi5sp7KEp+CmOpBQ+E8GpHwKOw2sEzk7sgblM3d/j4z4gakoWEoPcjK0VJQogA== + +shallowequal@1.1.0, shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -9852,6 +14225,20 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shelljs@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" + integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -9869,7 +14256,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.0: +silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.0, silent-error@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.1.tgz#f72af5b0d73682a2ba1778b7e32cd8aa7c2d8662" integrity sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw== @@ -9888,20 +14275,38 @@ simple-html-tokenizer@^0.5.6: resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.7.tgz#8eca336ecfbe2b3c6166cbb31b2682088de79f40" integrity sha512-APW9iYbkJ5cijjX4Ljhf3VG8SwYPUJT5gZrwci/wieMabQxWFiV5VwsrP5c6GMRvXKEQMGkAB1d9dvW66dTqpg== -sinon@^6.0.1: - version "6.3.5" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-6.3.5.tgz#0f6d6a5b4ebaad1f6e8e019395542d1d02c144a0" - integrity sha512-xgoZ2gKjyVRcF08RrIQc+srnSyY1JDJtxu3Nsz07j1ffjgXoY6uPLf/qja6nDBZgzYYEovVkFryw2+KiZz11xQ== +simplebar-react@^1.0.0-alpha.6: + version "1.2.3" + resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-1.2.3.tgz#bd81fa9827628470e9470d06caef6ece15e1c882" + integrity sha512-1EOWJzFC7eqHUp1igD1/tb8GBv5aPQA5ZMvpeDnVkpNJ3jAuvmrL2kir3HuijlxhG7njvw9ssxjjBa89E5DrJg== dependencies: - "@sinonjs/commons" "^1.0.2" - "@sinonjs/formatio" "^3.0.0" - "@sinonjs/samsam" "^2.1.2" + prop-types "^15.6.1" + simplebar "^4.2.3" + +simplebar@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-4.2.3.tgz#dac40aced299c17928329eab3d5e6e795fafc10c" + integrity sha512-9no0pK7/1y+8/oTF3sy/+kx0PjQ3uk4cYwld5F1CJGk2gx+prRyUq8GRfvcVLq5niYWSozZdX73a2wIr1o9l/g== + dependencies: + can-use-dom "^0.1.0" + core-js "^3.0.1" + lodash.debounce "^4.0.8" + lodash.memoize "^4.1.2" + lodash.throttle "^4.1.1" + resize-observer-polyfill "^1.5.1" + +sinon@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.3.2.tgz#82dba3a6d85f6d2181e1eca2c10d8657c2161f28" + integrity sha512-thErC1z64BeyGiPvF8aoSg0LEnptSaWE7YhdWWbWXgelOyThent7uKOnnEh9zBxDbKixtr5dEko+ws1sZMuFMA== + dependencies: + "@sinonjs/commons" "^1.4.0" + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/samsam" "^3.3.1" diff "^3.5.0" - lodash.get "^4.4.2" - lolex "^2.7.5" - nise "^1.4.5" + lolex "^4.0.1" + nise "^1.4.10" supports-color "^5.5.0" - type-detect "^4.0.8" slash@^1.0.0: version "1.0.0" @@ -9957,6 +14362,13 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sntp@0.2.x: + version "0.2.4" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" + integrity sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA= + dependencies: + hoek "0.9.x" + socket.io-adapter@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" @@ -10003,12 +14415,31 @@ socket.io@^2.1.0: socket.io-client "2.2.0" socket.io-parser "~3.3.0" +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + sort-object-keys@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.2.tgz#d3a6c48dc2ac97e6bc94367696e03f6d09d37952" integrity sha1-06bEjcKsl+a8lDZ2luA/bQnTeVI= -sort-package-json@^1.15.0: +sort-package-json@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.22.1.tgz#384ce7a098cd13be4109800d5ce2f0cf7826052e" integrity sha512-uVINQraFQvnlzNHFnQOT4MYy0qonIEzKwhrI2yrTiQjNo5QF4h3ffrnCk7a95QAwoK/RdkO/w8W9tJIcaOWC7g== @@ -10040,9 +14471,17 @@ source-map-support@^0.4.15: source-map "^0.5.6" source-map-support@~0.5.10: - version "0.5.11" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2" - integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ== + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.12: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -10069,7 +14508,7 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, sour resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -10082,9 +14521,9 @@ source-map@~0.1.x: amdefine ">=0.0.4" sourcemap-codec@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" - integrity sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg== + version "1.4.6" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" + integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== sourcemap-validator@^1.1.0: version "1.1.0" @@ -10096,19 +14535,16 @@ sourcemap-validator@^1.1.0: lodash.template "~2.3.x" source-map "~0.1.x" +space-separated-tokens@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz#27910835ae00d0adfcdbd0ad7e611fb9544351fa" + integrity sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA== + spawn-args@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/spawn-args/-/spawn-args-0.2.0.tgz#fb7d0bd1d70fd4316bd9e3dec389e65f9d6361bb" integrity sha1-+30L0dcP1DFr2ePew4nmX51jYbs= -spawn-sync@^1.0.11, spawn-sync@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" - integrity sha1-sAeZVX63+wyDdsKdROih6mfldHY= - dependencies: - concat-stream "^1.4.7" - os-shim "^0.1.2" - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -10179,7 +14615,7 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -stable@~0.1.6: +stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== @@ -10189,6 +14625,13 @@ staged-git-files@1.1.2: resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== +stagehand@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stagehand/-/stagehand-1.0.0.tgz#79515e2ad3a02c63f8720c7df9b6077ae14276d9" + integrity sha512-zrXl0QixAtSHFyN1iv04xOBgplbT4HgC8T7g+q8ESZbDNi5uZbMtxLukFVXPJ5Nl7zCYvYcrT3Mj24WYCH93hw== + dependencies: + debug "^4.1.0" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -10197,7 +14640,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= @@ -10214,6 +14657,16 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +store2@^2.7.1: + version "2.10.0" + resolved "https://registry.yarnpkg.com/store2/-/store2-2.10.0.tgz#46b82bb91878daf1b0d56dec2f1d41e54d5103cf" + integrity sha512-tWEpK0snS2RPUq1i3R6OahfJNjWCQYNxq0+by1amCSuw0mXtymJpzmZIeYpA1UAa+7B0grCpNYIbDcd7AgTbFg== + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -10246,6 +14699,13 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= +stream-to-array@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353" + integrity sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M= + dependencies: + any-promise "^1.1.0" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -10275,17 +14735,62 @@ string-width@^1.0.1, string-width@^1.0.2: resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.matchall@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-3.0.2.tgz#c1fdb23f90058e929a69cfa2e8b12300daefe030" + integrity sha512-hsRe42jQ8+OJej2GVjhnSVodQ3NQgHV0FDD6dW7ZTM22J4uIbuYiAADCCc1tfyN7ocEl/KUUbudM36E2tZcF8w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.14.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + regexp.prototype.flags "^1.2.0" + +string.prototype.padend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string.prototype.padstart@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242" + integrity sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + define-properties "^1.1.3" + function-bind "^1.1.1" string_decoder@0.10, string_decoder@~0.10.x: version "0.10.31" @@ -10299,6 +14804,13 @@ string_decoder@^1.0.0: dependencies: safe-buffer "~5.1.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -10315,6 +14827,18 @@ stringify-object@^3.2.2: is-obj "^1.0.1" is-regexp "^1.0.0" +stringstream@~0.0.4: + version "0.0.6" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" + integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== + +strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -10329,13 +14853,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -10365,6 +14882,14 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +style-loader@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + styled_string@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a" @@ -10389,23 +14914,30 @@ supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -svgo@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.0.5.tgz#7040364c062a0538abacff4401cea6a26a7a389a" - integrity sha512-nYrifviB77aNKDNKKyuay3M9aYiK6Hv5gJVDdjj2ZXTQmI8WZc8+UPLR5IpVlktJfSu3co/4XcWgrgI6seGBPg== - dependencies: - coa "~2.0.1" - colors "~1.1.2" - css-select "~1.3.0-rc0" - css-select-base-adapter "~0.1.0" - css-tree "1.0.0-alpha25" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +svgo@~1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.2.2.tgz#0253d34eccf2aed4ad4f283e11ee75198f9d7316" + integrity sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.28" css-url-regex "^1.1.0" - csso "^3.5.0" - js-yaml "~3.10.0" + csso "^3.5.1" + js-yaml "^3.13.1" mkdirp "~0.5.1" - object.values "^1.0.4" + object.values "^1.1.0" sax "~1.2.4" - stable "~0.1.6" + stable "^0.1.8" unquote "~1.1.1" util.promisify "~1.0.0" @@ -10414,11 +14946,34 @@ symbol-observable@^1.1.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +symbol.prototype.description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.0.tgz#6e355660eb1e44ca8ad53a68fdb72ef131ca4b12" + integrity sha512-I9mrbZ5M96s7QeJDv95toF1svkUjeBybe8ydhY7foPaBmr0SPJMFupArmMkDrOKTTj0sJVr+nvQNxWLziQ7nDQ== + dependencies: + has-symbols "^1.0.0" + symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#5d49108e2ab824a34069b68974486c290020b393" integrity sha512-W31+GLiBmU/ZR02Ii0mVZICuNEN9daZ63xZMPDsYgPgNjMtg+atqLEGI7PPI936jYSQZxoLb/63xos8Adrx4Eg== +sync-disk-cache@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/sync-disk-cache/-/sync-disk-cache-1.3.3.tgz#481933461623fdc2bdf46cfc87872ba215a7e246" + integrity sha512-Kp7DFemXDPRUbFW856CKamtX7bJuThZPa2dwnK2RfNqMew7Ah8xDc52SdooNlfN8oydDdDHlBPLsXTrtmA7HKw== + dependencies: + debug "^2.1.3" + heimdalljs "^0.2.3" + mkdirp "^0.5.0" + rimraf "^2.2.8" + username-sync "^1.0.2" + synchronous-promise@^2.0.5: version "2.0.7" resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.7.tgz#3574b3d2fae86b145356a4b89103e1577f646fe3" @@ -10443,10 +14998,10 @@ tap-parser@^7.0.0: js-yaml "^3.2.7" minipass "^2.2.0" -tapable@^1.0.0, tapable@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" - integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== +tapable@^1.0.0, tapable@^1.1.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar@^2.0.0: version "2.2.1" @@ -10458,41 +15013,78 @@ tar@^2.0.0: inherits "2" tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" + minipass "^2.3.5" + minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" - yallist "^3.0.2" + yallist "^3.0.3" -temp@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= +telejson@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/telejson/-/telejson-3.0.3.tgz#442af55f78d791d3744c9e7a696be6cdf789a4b5" + integrity sha512-gUOh6wox1zJjbGMg+e26NquZcp/F18EbIaqVvjiGqikRqVB4fYEAM8Nyin8smgwX30XhaRBOg+kCj4vInmvwAg== dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" + "@types/is-function" "^1.0.0" + global "^4.4.0" + is-function "^1.0.1" + is-regex "^1.0.4" + is-symbol "^1.0.2" + isobject "^4.0.0" + lodash "^4.17.15" + memoizerific "^1.11.3" + +temp@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.0.tgz#61391795a11bd9738d4c4d7f55f012cb8f55edaa" + integrity sha512-YfUhPQCJoNQE5N+FJQcdPz63O3x3sdT4Xju69Gj4iZe0lBKOtnAMi0SLj9xKhGkcGhsxThvTJ/usxtFPo438zQ== + dependencies: + rimraf "~2.6.2" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" terser-webpack-plugin@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz#3f98bc902fac3e5d0de730869f50668561262ec8" - integrity sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" + integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== dependencies: - cacache "^11.0.2" + cacache "^11.3.2" find-cache-dir "^2.0.0" + is-wsl "^1.1.0" + loader-utils "^1.2.3" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + source-map "^0.6.1" + terser "^4.0.0" + webpack-sources "^1.3.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^1.2.4, terser-webpack-plugin@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" + integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^1.4.0" + serialize-javascript "^1.7.0" source-map "^0.6.1" - terser "^3.16.1" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" -terser@^3.16.1, terser@^3.7.5: +terser@^3.7.5: version "3.17.0" resolved "https://registry.yarnpkg.com/terser/-/terser-3.17.0.tgz#f88ffbeda0deb5637f9d24b0da66f4e15ab10cb2" integrity sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ== @@ -10501,15 +15093,34 @@ terser@^3.16.1, terser@^3.7.5: source-map "~0.6.1" source-map-support "~0.5.10" -testem@^2.9.2: - version "2.14.0" - resolved "https://registry.yarnpkg.com/testem/-/testem-2.14.0.tgz#418a9a15843f68381659c6a486abb4ea48d06c29" - integrity sha512-tldpNPCzXfibmxOoTMGOfr8ztUiHf9292zSXCu7SitBx9dCK83k7vEoa77qJBS9t3RGCQCRF+GNMUuiFw//Mbw== +terser@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391" + integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^4.1.2: + version "4.3.8" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.8.tgz#707f05f3f4c1c70c840e626addfdb1c158a17136" + integrity sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +testem@^2.14.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/testem/-/testem-2.17.0.tgz#1cb4a2a90524a088803dfe52fbf197a6fd73c883" + integrity sha512-PLkIlT523w5rTJPWwR4TL1EiAEa941ECV7d4pMqsB0YdnH+sCTz0loWMKCUSdhR+VijveAZ6anE/JHehE7KqMQ== dependencies: backbone "^1.1.2" bluebird "^3.4.6" charm "^1.0.0" commander "^2.6.0" + compression "^1.7.4" consolidate "^0.15.1" execa "^1.0.0" express "^4.10.7" @@ -10535,7 +15146,7 @@ testem@^2.9.2: tmp "0.0.33" xmldom "^0.1.19" -text-table@^0.2.0: +text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -10545,7 +15156,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.4.0.tgz#6a143a985464384cc2cff11aea448cd5b018e72b" integrity sha512-qftQXnX1DzpSV8EddtHIT0eDDEiBF8ywhFYR2lI9xrGtxqKN+CvLXhACeCIGbCpQfxxERbrkZEFb8cZcDKbVZA== -through2@^2.0.0: +throttle-debounce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" + integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -10553,7 +15177,14 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6, through@^2.3.8: +through2@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" + integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww== + dependencies: + readable-stream "2 || 3" + +through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -10563,6 +15194,11 @@ time-zone@^1.0.0: resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + timers-browserify@^2.0.4: version "2.0.10" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" @@ -10587,6 +15223,11 @@ tiny-lr@^1.1.1: object-assign "^4.1.0" qs "^6.4.0" +tinycolor2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= + tmp@0.0.28: version "0.0.28" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" @@ -10601,13 +15242,6 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmp@^0.0.29: - version "0.0.29" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" - integrity sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA= - dependencies: - os-tmpdir "~1.0.1" - tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -10658,11 +15292,45 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +topo@2.x.x: + version "2.0.2" + resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" + integrity sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI= + dependencies: + hoek "4.x.x" + toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= +tough-cookie@>=0.12.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@^2.3.3, tough-cookie@^2.4.3: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -10671,7 +15339,14 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" -tree-sync@^1.2.2: +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +tree-sync@^1.2.2, tree-sync@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6" integrity sha512-YvYllqh3qrR5TAYZZTXdspnIhlKAYezPYw11ntmweoceu4VK+keN356phHRIIo1d+RDmLpHZrUlmxga2gc9kSQ== @@ -10699,10 +15374,15 @@ trim-right@^1.0.1: dependencies: glob "^7.1.2" +ts-pnp@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.4.tgz#ae27126960ebaefb874c6d7fa4729729ab200d90" + integrity sha512-1J/vefLC+BWSo+qe8OnJQfWTYRS6ingxjwqmHMqaMxXMj7kFtKLgAaYW3JeX3mktjgUL+etlU8/B4VUAUI9QGw== + tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tty-browserify@0.0.0: version "0.0.0" @@ -10716,6 +15396,11 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tunnel-agent@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -10728,11 +15413,16 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8, type-detect@^4.0.8: +type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -10741,25 +15431,58 @@ type-is@~1.6.16: media-typer "0.3.0" mime-types "~2.1.18" +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-styles@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -uc.micro@^1.0.1, uc.micro@^1.0.5: +typescript-memoize@^1.0.0-alpha.3: + version "1.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.0.0-alpha.3.tgz#699a5415f886694a8d6e2e5451bc28a39a6bc2f9" + integrity sha1-aZpUFfiGaUqNbi5UUbwoo5prwvk= + dependencies: + core-js "2.4.1" + +ua-parser-js@^0.7.18: + version "0.7.20" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" + integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== + +uc.micro@^1.0.0, uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.5.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.3.tgz#d490bb5347f23025f0c1bc0dee901d98e4d6b063" - integrity sha512-rIQPT2UMDnk4jRX+w4WO84/pebU2jiLsjgIyrCktYgSvx28enOE3iYQMr+BD1rHiitWnDmpu0cY/LfIEpKcjcw== + version "3.7.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.1.tgz#35c7de17971a4aa7689cd2eae0a5b39bb838c0c5" + integrity sha512-pnOF7jY82wdIhATVn87uUY/FHU+MDUdPLkmGFvGoclQmeu229eTkbG5gjGGBi3R7UuYYSEeYXY/TTY5j2aym2g== + dependencies: + commander "~2.20.3" + source-map "~0.6.1" + +uglify-js@^3.5.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== dependencies: - commander "~2.19.0" + commander "~2.20.0" source-map "~0.6.1" -underscore.string@~3.3.4: +underscore.string@^3.2.2, underscore.string@~3.3.4: version "3.3.5" resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== @@ -10772,6 +15495,11 @@ underscore@>=1.8.3: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== +unfetch@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" + integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -10796,14 +15524,19 @@ unicode-property-aliases-ecmascript@^1.0.4: integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" is-extendable "^0.1.1" - set-value "^0.4.3" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= unique-filename@^1.1.1: version "1.1.1" @@ -10813,12 +15546,20 @@ unique-filename@^1.1.1: unique-slug "^2.0.0" unique-slug@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" - integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" +unique-stream@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -10836,7 +15577,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@~1.1.1: +unquote@^1.1.0, unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= @@ -10861,6 +15602,11 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -10873,6 +15619,35 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-loader@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.2.0.tgz#af321aece1fd0d683adc8aaeb27829f29c75b46e" + integrity sha512-G8nk3np8ZAnwhHXas1JxJEwJyQdqFXAKJehfgZ/XrC48volFBRtO+FIKtF2u0Ma3bw+4vnDVjHPAQYlF9p2vsw== + dependencies: + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.4.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -10886,33 +15661,17 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -user-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/user-info/-/user-info-1.0.0.tgz#81c82b7ed63e674c2475667653413b3c76fde239" - integrity sha1-gcgrftY+Z0wkdWZ2U0E7PHb94jk= - dependencies: - os-homedir "^1.0.1" - passwd-user "^1.2.1" - username "^1.0.1" - username-sync@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/username-sync/-/username-sync-1.0.2.tgz#0a3697909fb7b5768d29e2921f573acfdd427592" integrity sha512-ayNkOJdoNSGNDBE46Nkc+l6IXmeugbzahZLSMkwvgRWv5y5ZqNY2IrzcgmkR4z32sj1W3tM3TuTUMqkqBzO+RA== -username@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/username/-/username-1.0.1.tgz#e1f72295e3e58e06f002c6327ce06897a99cd67f" - integrity sha1-4fcilePljgbwAsYyfOBol6mc1n8= - dependencies: - meow "^3.4.0" - -util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@^1.0.0, util.promisify@~1.0.0: +util.promisify@1.0.0, util.promisify@^1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -10934,6 +15693,11 @@ util@^0.11.0: dependencies: inherits "2.0.3" +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -10973,20 +15737,17 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vm-browserify@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" - integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= - dependencies: - indexof "0.0.1" +vm-browserify@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== -walk-sync@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.2.tgz#4827280afc42d0e035367c4a4e31eeac0d136f75" - integrity sha512-FMB5VqpLqOCcqrzA9okZFc0wq0Qbmdm396qJxvQZhDpyu0W95G9JCmp74tx7iyYnyOcBtUuKJsgIKAqjozvmmQ== +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= dependencies: - ensure-posix-path "^1.0.0" - matcher-collection "^1.0.0" + browser-process-hrtime "^0.1.2" walk-sync@^0.2.5: version "0.2.7" @@ -11004,10 +15765,10 @@ walk-sync@^0.3.0, walk-sync@^0.3.1, walk-sync@^0.3.2, walk-sync@^0.3.3: ensure-posix-path "^1.0.0" matcher-collection "^1.0.0" -walk-sync@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-1.1.3.tgz#3b7b6468f068b5eba2278c931c57db3d39092969" - integrity sha512-23ivbET0Q/389y3EHpiIgxx881AS2mwdXA7iBqUDNSymoTPYb2jWlF3gkuuAP1iLgdNXmiHw/kZ/wZwrELU6Ag== +walk-sync@^1.0.0, walk-sync@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-1.1.4.tgz#81049f3d8095479b49574cfa5f558d7a252b127d" + integrity sha512-nowc9thB/Jg0KW4TgxoRjLLYRPvl3DB/98S89r4ZcJqq2B0alNcKDh6pzLkBSkPMzRSMsJghJHQi79qw0YWEkA== dependencies: "@types/minimatch" "^3.0.3" ensure-posix-path "^1.1.0" @@ -11020,6 +15781,20 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= + dependencies: + loose-envify "^1.0.0" + +warning@^4.0.2, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + watch-detector@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/watch-detector/-/watch-detector-0.1.0.tgz#e37b410d149e2a8bf263a4f8b71e2f667633dbf8" @@ -11031,15 +15806,7 @@ watch-detector@^0.1.0: semver "^5.4.1" silent-error "^1.1.0" -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -watchpack@^1.5.0: +watchpack@^1.5.0, watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== @@ -11055,7 +15822,41 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -webpack-sources@^1.1.0, webpack-sources@^1.3.0: +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-dev-middleware@^3.7.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-hot-middleware@^2.25.0: + version "2.25.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" + integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== + dependencies: + ansi-html "0.0.7" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== @@ -11063,6 +15864,43 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0: source-list-map "^2.0.0" source-map "~0.6.1" +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.33.0, webpack@^4.38.0: + version "4.41.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.0.tgz#db6a254bde671769f7c14e90a1a55e73602fc70b" + integrity sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.1" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + webpack@~4.28: version "4.28.4" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.28.4.tgz#1ddae6c89887d7efb752adf0c3cd32b9b07eacd0" @@ -11106,11 +15944,32 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== -whatwg-fetch@^3.0.0: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== +whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -11121,7 +15980,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0: +which@1, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -11135,6 +15994,13 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -11145,13 +16011,20 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -worker-farm@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== dependencies: errno "~0.1.7" +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + workerpool@^2.3.0: version "2.3.3" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-2.3.3.tgz#49a70089bd55e890d68cc836a19419451d7c81d7" @@ -11205,6 +16078,13 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +ws@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@~6.1.0: version "6.1.4" resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" @@ -11217,6 +16097,16 @@ xdg-basedir@^3.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.1.1.tgz#ef1a81c05bff629c2280007f12daca21bd6f6c93" + integrity sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w== + xmldom@^0.1.19: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" @@ -11227,7 +16117,12 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= -xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +xtend@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= @@ -11247,15 +16142,15 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yam@^0.0.24: - version "0.0.24" - resolved "https://registry.yarnpkg.com/yam/-/yam-0.0.24.tgz#11e9630444735f66a561d29221407de6d037cd95" - integrity sha512-llPF60oFLV8EQimNPR6+KorSaj59L32C4c1db4cr72GaWVWapnhTS2VZeK2K2xLyEOveWtRcNa+dLJBW7EfhYQ== +yam@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yam/-/yam-1.0.0.tgz#7f6c91dc0f5de75a031e6da6b3907c3d25ab0de5" + integrity sha512-Hv9xxHtsJ9228wNhk03xnlDReUuWVvHwM4rIbjdAXYvHLs17xjuyF50N6XXFMN6N0omBaqgOok/MCK3At9fTAg== dependencies: fs-extra "^4.0.2" lodash.merge "^4.6.0" @@ -11316,6 +16211,26 @@ yeast@0.1.2: resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= +yui@^3.18.1: + version "3.18.1" + resolved "https://registry.yarnpkg.com/yui/-/yui-3.18.1.tgz#e000269ec0a7b6fbc741cbb8fcbd0e65117b014c" + integrity sha1-4AAmnsCntvvHQcu4/L0OZRF7AUw= + dependencies: + request "~2.40.0" + +yuidocjs@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/yuidocjs/-/yuidocjs-0.10.2.tgz#33924967ce619024cd70ef694e267d2f988f73f6" + integrity sha1-M5JJZ85hkCTNcO9pTiZ9L5iPc/Y= + dependencies: + express "^4.13.1" + graceful-fs "^4.1.2" + markdown-it "^4.3.0" + mdn-links "^0.1.0" + minimatch "^3.0.2" + rimraf "^2.4.1" + yui "^3.18.1" + yup@^0.26.10: version "0.26.10" resolved "https://registry.yarnpkg.com/yup/-/yup-0.26.10.tgz#3545839663289038faf25facfc07e11fd67c0cb1" diff --git a/vendor/github.com/Azure/go-autorest/LICENSE b/vendor/github.com/Azure/go-autorest/LICENSE new file mode 100644 index 00000000000..b9d6a27ea92 --- /dev/null +++ b/vendor/github.com/Azure/go-autorest/LICENSE @@ -0,0 +1,191 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 Microsoft Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/aws/aws-sdk-go/NOTICE.txt b/vendor/github.com/aws/aws-sdk-go/NOTICE.txt index 5f14d1162ed..899129ecc46 100644 --- a/vendor/github.com/aws/aws-sdk-go/NOTICE.txt +++ b/vendor/github.com/aws/aws-sdk-go/NOTICE.txt @@ -1,3 +1,3 @@ AWS SDK for Go -Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. Copyright 2014-2015 Stripe, Inc. diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go b/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go index a52743bef1c..99849c0e19c 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go @@ -14,13 +14,13 @@ package awserr // if err != nil { // if awsErr, ok := err.(awserr.Error); ok { // // Get error details -// log.Println("Error:", err.Code(), err.Message()) +// log.Println("Error:", awsErr.Code(), awsErr.Message()) // // // Prints out full error message, including original error if there was one. -// log.Println("Error:", err.Error()) +// log.Println("Error:", awsErr.Error()) // // // Get original error -// if origErr := err.Err(); origErr != nil { +// if origErr := awsErr.OrigErr(); origErr != nil { // // operate on original error. // } // } else { @@ -42,15 +42,55 @@ type Error interface { OrigErr() error } +// BatchError is a batch of errors which also wraps lower level errors with +// code, message, and original errors. Calling Error() will include all errors +// that occurred in the batch. +// +// Deprecated: Replaced with BatchedErrors. Only defined for backwards +// compatibility. +type BatchError interface { + // Satisfy the generic error interface. + error + + // Returns the short phrase depicting the classification of the error. + Code() string + + // Returns the error details message. + Message() string + + // Returns the original error if one was set. Nil is returned if not set. + OrigErrs() []error +} + +// BatchedErrors is a batch of errors which also wraps lower level errors with +// code, message, and original errors. Calling Error() will include all errors +// that occurred in the batch. +// +// Replaces BatchError +type BatchedErrors interface { + // Satisfy the base Error interface. + Error + + // Returns the original error if one was set. Nil is returned if not set. + OrigErrs() []error +} + // New returns an Error object described by the code, message, and origErr. // // If origErr satisfies the Error interface it will not be wrapped within a new // Error object and will instead be returned. func New(code, message string, origErr error) Error { - if e, ok := origErr.(Error); ok && e != nil { - return e + var errs []error + if origErr != nil { + errs = append(errs, origErr) } - return newBaseError(code, message, origErr) + return newBaseError(code, message, errs) +} + +// NewBatchError returns an BatchedErrors with a collection of errors as an +// array of errors. +func NewBatchError(code, message string, errs []error) BatchedErrors { + return newBaseError(code, message, errs) } // A RequestFailure is an interface to extract request failure information from @@ -63,9 +103,9 @@ func New(code, message string, origErr error) Error { // output, err := s3manage.Upload(svc, input, opts) // if err != nil { // if reqerr, ok := err.(RequestFailure); ok { -// log.Printf("Request failed", reqerr.Code(), reqerr.Message(), reqerr.RequestID()) +// log.Println("Request failed", reqerr.Code(), reqerr.Message(), reqerr.RequestID()) // } else { -// log.Printf("Error:", err.Error() +// log.Println("Error:", err.Error()) // } // } // @@ -98,8 +138,27 @@ type RequestFailure interface { RequestID() string } -// NewRequestFailure returns a new request error wrapper for the given Error -// provided. +// NewRequestFailure returns a wrapped error with additional information for +// request status code, and service requestID. +// +// Should be used to wrap all request which involve service requests. Even if +// the request failed without a service response, but had an HTTP status code +// that may be meaningful. func NewRequestFailure(err Error, statusCode int, reqID string) RequestFailure { return newRequestError(err, statusCode, reqID) } + +// UnmarshalError provides the interface for the SDK failing to unmarshal data. +type UnmarshalError interface { + awsError + Bytes() []byte +} + +// NewUnmarshalError returns an initialized UnmarshalError error wrapper adding +// the bytes that fail to unmarshal to the error. +func NewUnmarshalError(err error, msg string, bytes []byte) UnmarshalError { + return &unmarshalError{ + awsError: New("UnmarshalError", msg, err), + bytes: bytes, + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go b/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go index 003a6e8067e..9cf7eaf4007 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go @@ -1,6 +1,9 @@ package awserr -import "fmt" +import ( + "encoding/hex" + "fmt" +) // SprintError returns a string of the formatted error code. // @@ -31,23 +34,27 @@ type baseError struct { // Optional original error this error is based off of. Allows building // chained errors. - origErr error + errs []error } -// newBaseError returns an error object for the code, message, and err. +// newBaseError returns an error object for the code, message, and errors. // // code is a short no whitespace phrase depicting the classification of // the error that is being created. // -// message is the free flow string containing detailed information about the error. +// message is the free flow string containing detailed information about the +// error. // -// origErr is the error object which will be nested under the new error to be returned. -func newBaseError(code, message string, origErr error) *baseError { - return &baseError{ +// origErrs is the error objects which will be nested under the new errors to +// be returned. +func newBaseError(code, message string, origErrs []error) *baseError { + b := &baseError{ code: code, message: message, - origErr: origErr, + errs: origErrs, } + + return b } // Error returns the string representation of the error. @@ -56,7 +63,12 @@ func newBaseError(code, message string, origErr error) *baseError { // // Satisfies the error interface. func (b baseError) Error() string { - return SprintError(b.code, b.message, "", b.origErr) + size := len(b.errs) + if size > 0 { + return SprintError(b.code, b.message, "", errorList(b.errs)) + } + + return SprintError(b.code, b.message, "", nil) } // String returns the string representation of the error. @@ -75,10 +87,28 @@ func (b baseError) Message() string { return b.message } -// OrigErr returns the original error if one was set. Nil is returned if no error -// was set. +// OrigErr returns the original error if one was set. Nil is returned if no +// error was set. This only returns the first element in the list. If the full +// list is needed, use BatchedErrors. func (b baseError) OrigErr() error { - return b.origErr + switch len(b.errs) { + case 0: + return nil + case 1: + return b.errs[0] + default: + if err, ok := b.errs[0].(Error); ok { + return NewBatchError(err.Code(), err.Message(), b.errs[1:]) + } + return NewBatchError("BatchedErrors", + "multiple errors occurred", b.errs) + } +} + +// OrigErrs returns the original errors if one was set. An empty slice is +// returned if no error was set. +func (b baseError) OrigErrs() []error { + return b.errs } // So that the Error interface type can be included as an anonymous field @@ -92,10 +122,11 @@ type requestError struct { awsError statusCode int requestID string + bytes []byte } -// newRequestError returns a wrapped error with additional information for request -// status code, and service requestID. +// newRequestError returns a wrapped error with additional information for +// request status code, and service requestID. // // Should be used to wrap all request which involve service requests. Even if // the request failed without a service response, but had an HTTP status code @@ -133,3 +164,58 @@ func (r requestError) StatusCode() int { func (r requestError) RequestID() string { return r.requestID } + +// OrigErrs returns the original errors if one was set. An empty slice is +// returned if no error was set. +func (r requestError) OrigErrs() []error { + if b, ok := r.awsError.(BatchedErrors); ok { + return b.OrigErrs() + } + return []error{r.OrigErr()} +} + +type unmarshalError struct { + awsError + bytes []byte +} + +// Error returns the string representation of the error. +// Satisfies the error interface. +func (e unmarshalError) Error() string { + extra := hex.Dump(e.bytes) + return SprintError(e.Code(), e.Message(), extra, e.OrigErr()) +} + +// String returns the string representation of the error. +// Alias for Error to satisfy the stringer interface. +func (e unmarshalError) String() string { + return e.Error() +} + +// Bytes returns the bytes that failed to unmarshal. +func (e unmarshalError) Bytes() []byte { + return e.bytes +} + +// An error list that satisfies the golang interface +type errorList []error + +// Error returns the string representation of the error. +// +// Satisfies the error interface. +func (e errorList) Error() string { + msg := "" + // How do we want to handle the array size being zero + if size := len(e); size > 0 { + for i := 0; i < size; i++ { + msg += e[i].Error() + // We check the next index to see if it is within the slice. + // If it is, then we append a newline. We do this, because unit tests + // could be broken with the additional '\n' + if i+1 < size { + msg += "\n" + } + } + } + return msg +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go index 8429470b9d7..1a3d106d5c1 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go @@ -3,6 +3,7 @@ package awsutil import ( "io" "reflect" + "time" ) // Copy deeply copies a src structure to dst. Useful for copying request and @@ -49,7 +50,14 @@ func rcopy(dst, src reflect.Value, root bool) { } else { e := src.Type().Elem() if dst.CanSet() && !src.IsNil() { - dst.Set(reflect.New(e)) + if _, ok := src.Interface().(*time.Time); !ok { + dst.Set(reflect.New(e)) + } else { + tempValue := reflect.New(e) + tempValue.Elem().Set(src.Elem()) + // Sets time.Time's unexported values + dst.Set(tempValue) + } } if src.Elem().IsValid() { // Keep the current root state since the depth hasn't changed diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go index 59fa4a558a9..142a7a01c52 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go @@ -15,7 +15,7 @@ func DeepEqual(a, b interface{}) bool { rb := reflect.Indirect(reflect.ValueOf(b)) if raValid, rbValid := ra.IsValid(), rb.IsValid(); !raValid && !rbValid { - // If the elements are both nil, and of the same type the are equal + // If the elements are both nil, and of the same type they are equal // If they are of different types they are not equal return reflect.TypeOf(a) == reflect.TypeOf(b) } else if raValid != rbValid { diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go index 4d2a01e8c41..a4eb6a7f43a 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go @@ -70,7 +70,7 @@ func rValuesAtPath(v interface{}, path string, createPath, caseSensitive, nilTer value = value.FieldByNameFunc(func(name string) bool { if c == name { return true - } else if !caseSensitive && strings.ToLower(name) == strings.ToLower(c) { + } else if !caseSensitive && strings.EqualFold(name, c) { return true } return false @@ -106,8 +106,8 @@ func rValuesAtPath(v interface{}, path string, createPath, caseSensitive, nilTer if indexStar || index != nil { nextvals = []reflect.Value{} - for _, value := range values { - value := reflect.Indirect(value) + for _, valItem := range values { + value := reflect.Indirect(valItem) if value.Kind() != reflect.Slice { continue } @@ -185,13 +185,12 @@ func ValuesAtPath(i interface{}, path string) ([]interface{}, error) { // SetValueAtPath sets a value at the case insensitive lexical path inside // of a structure. func SetValueAtPath(i interface{}, path string, v interface{}) { - if rvals := rValuesAtPath(i, path, true, false, v == nil); rvals != nil { - for _, rval := range rvals { - if rval.Kind() == reflect.Ptr && rval.IsNil() { - continue - } - setValue(rval, v) + rvals := rValuesAtPath(i, path, true, false, v == nil) + for _, rval := range rvals { + if rval.Kind() == reflect.Ptr && rval.IsNil() { + continue } + setValue(rval, v) } } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go index 0de3eaa0f63..710eb432f85 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go @@ -61,6 +61,12 @@ func prettify(v reflect.Value, indent int, buf *bytes.Buffer) { buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") case reflect.Slice: + strtype := v.Type().String() + if strtype == "[]uint8" { + fmt.Fprintf(buf, " len %d", v.Len()) + break + } + nl, id, id2 := "", "", "" if v.Len() > 3 { nl, id, id2 = "\n", strings.Repeat(" ", indent), strings.Repeat(" ", indent+2) @@ -91,6 +97,10 @@ func prettify(v reflect.Value, indent int, buf *bytes.Buffer) { buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") default: + if !v.IsValid() { + fmt.Fprint(buf, "") + return + } format := "%v" switch v.Interface().(type) { case string: diff --git a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go index b6432f1a118..645df2450fc 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go @@ -23,28 +23,27 @@ func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) { case reflect.Struct: buf.WriteString("{\n") - names := []string{} for i := 0; i < v.Type().NumField(); i++ { - name := v.Type().Field(i).Name - f := v.Field(i) - if name[0:1] == strings.ToLower(name[0:1]) { + ft := v.Type().Field(i) + fv := v.Field(i) + + if ft.Name[0:1] == strings.ToLower(ft.Name[0:1]) { continue // ignore unexported fields } - if (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice) && f.IsNil() { + if (fv.Kind() == reflect.Ptr || fv.Kind() == reflect.Slice) && fv.IsNil() { continue // ignore unset fields } - names = append(names, name) - } - for i, n := range names { - val := v.FieldByName(n) buf.WriteString(strings.Repeat(" ", indent+2)) - buf.WriteString(n + ": ") - stringValue(val, indent+2, buf) + buf.WriteString(ft.Name + ": ") - if i < len(names)-1 { - buf.WriteString(",\n") + if tag := ft.Tag.Get("sensitive"); tag == "true" { + buf.WriteString("") + } else { + stringValue(fv, indent+2, buf) } + + buf.WriteString(",\n") } buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") diff --git a/vendor/github.com/aws/aws-sdk-go/aws/client/client.go b/vendor/github.com/aws/aws-sdk-go/aws/client/client.go index e639ce040d7..03334d69207 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/client/client.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/client/client.go @@ -2,8 +2,6 @@ package client import ( "fmt" - "io/ioutil" - "net/http/httputil" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/client/metadata" @@ -12,9 +10,18 @@ import ( // A Config provides configuration to a service client instance. type Config struct { - Config *aws.Config - Handlers request.Handlers - Endpoint, SigningRegion string + Config *aws.Config + Handlers request.Handlers + PartitionID string + Endpoint string + SigningRegion string + SigningName string + + // States that the signing name did not come from a modeled source but + // was derived based on other data. Used by service client constructors + // to determine if the signin name can be overridden based on metadata the + // service has. + SigningNameDerived bool } // ConfigProvider provides a generic way for a service client to receive @@ -23,6 +30,13 @@ type ConfigProvider interface { ClientConfig(serviceName string, cfgs ...*aws.Config) Config } +// ConfigNoResolveEndpointProvider same as ConfigProvider except it will not +// resolve the endpoint automatically. The service client's endpoint must be +// provided via the aws.Config.Endpoint field. +type ConfigNoResolveEndpointProvider interface { + ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) Config +} + // A Client implements the base client request and response handling // used by all service clients. type Client struct { @@ -38,7 +52,7 @@ func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Handlers, op svc := &Client{ Config: cfg, ClientInfo: info, - Handlers: handlers, + Handlers: handlers.Copy(), } switch retryer, ok := cfg.Retryer.(request.Retryer); { @@ -51,7 +65,7 @@ func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Handlers, op default: maxRetries := aws.IntValue(cfg.MaxRetries) if cfg.MaxRetries == nil || maxRetries == aws.UseServiceDefaultRetries { - maxRetries = 3 + maxRetries = DefaultRetryerMaxNumRetries } svc.Retryer = DefaultRetryer{NumMaxRetries: maxRetries} } @@ -78,43 +92,6 @@ func (c *Client) AddDebugHandlers() { return } - c.Handlers.Send.PushFront(logRequest) - c.Handlers.Send.PushBack(logResponse) -} - -const logReqMsg = `DEBUG: Request %s/%s Details: ----[ REQUEST POST-SIGN ]----------------------------- -%s ------------------------------------------------------` - -func logRequest(r *request.Request) { - logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) - dumpedBody, _ := httputil.DumpRequestOut(r.HTTPRequest, logBody) - - if logBody { - // Reset the request body because dumpRequest will re-wrap the r.HTTPRequest's - // Body as a NoOpCloser and will not be reset after read by the HTTP - // client reader. - r.Body.Seek(r.BodyStart, 0) - r.HTTPRequest.Body = ioutil.NopCloser(r.Body) - } - - r.Config.Logger.Log(fmt.Sprintf(logReqMsg, r.ClientInfo.ServiceName, r.Operation.Name, string(dumpedBody))) -} - -const logRespMsg = `DEBUG: Response %s/%s Details: ----[ RESPONSE ]-------------------------------------- -%s ------------------------------------------------------` - -func logResponse(r *request.Request) { - var msg = "no reponse data" - if r.HTTPResponse != nil { - logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) - dumpedBody, _ := httputil.DumpResponse(r.HTTPResponse, logBody) - msg = string(dumpedBody) - } else if r.Error != nil { - msg = r.Error.Error() - } - r.Config.Logger.Log(fmt.Sprintf(logRespMsg, r.ClientInfo.ServiceName, r.Operation.Name, msg)) + c.Handlers.Send.PushFrontNamed(LogHTTPRequestHandler) + c.Handlers.Send.PushBackNamed(LogHTTPResponseHandler) } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go b/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go index 24d39ce5641..9f6af19dd45 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go @@ -2,44 +2,176 @@ package client import ( "math" - "math/rand" + "strconv" "time" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkrand" ) // DefaultRetryer implements basic retry logic using exponential backoff for -// most services. If you want to implement custom retry logic, implement the -// request.Retryer interface or create a structure type that composes this -// struct and override the specific methods. For example, to override only -// the MaxRetries method: +// most services. If you want to implement custom retry logic, you can implement the +// request.Retryer interface. // -// type retryer struct { -// service.DefaultRetryer -// } -// -// // This implementation always has 100 max retries -// func (d retryer) MaxRetries() uint { return 100 } type DefaultRetryer struct { + // Num max Retries is the number of max retries that will be performed. + // By default, this is zero. NumMaxRetries int + + // MinRetryDelay is the minimum retry delay after which retry will be performed. + // If not set, the value is 0ns. + MinRetryDelay time.Duration + + // MinThrottleRetryDelay is the minimum retry delay when throttled. + // If not set, the value is 0ns. + MinThrottleDelay time.Duration + + // MaxRetryDelay is the maximum retry delay before which retry must be performed. + // If not set, the value is 0ns. + MaxRetryDelay time.Duration + + // MaxThrottleDelay is the maximum retry delay when throttled. + // If not set, the value is 0ns. + MaxThrottleDelay time.Duration } +const ( + // DefaultRetryerMaxNumRetries sets maximum number of retries + DefaultRetryerMaxNumRetries = 3 + + // DefaultRetryerMinRetryDelay sets minimum retry delay + DefaultRetryerMinRetryDelay = 30 * time.Millisecond + + // DefaultRetryerMinThrottleDelay sets minimum delay when throttled + DefaultRetryerMinThrottleDelay = 500 * time.Millisecond + + // DefaultRetryerMaxRetryDelay sets maximum retry delay + DefaultRetryerMaxRetryDelay = 300 * time.Second + + // DefaultRetryerMaxThrottleDelay sets maximum delay when throttled + DefaultRetryerMaxThrottleDelay = 300 * time.Second +) + // MaxRetries returns the number of maximum returns the service will use to make // an individual API request. func (d DefaultRetryer) MaxRetries() int { return d.NumMaxRetries } +// setRetryerDefaults sets the default values of the retryer if not set +func (d *DefaultRetryer) setRetryerDefaults() { + if d.MinRetryDelay == 0 { + d.MinRetryDelay = DefaultRetryerMinRetryDelay + } + if d.MaxRetryDelay == 0 { + d.MaxRetryDelay = DefaultRetryerMaxRetryDelay + } + if d.MinThrottleDelay == 0 { + d.MinThrottleDelay = DefaultRetryerMinThrottleDelay + } + if d.MaxThrottleDelay == 0 { + d.MaxThrottleDelay = DefaultRetryerMaxThrottleDelay + } +} + // RetryRules returns the delay duration before retrying this request again func (d DefaultRetryer) RetryRules(r *request.Request) time.Duration { - delay := int(math.Pow(2, float64(r.RetryCount))) * (rand.Intn(30) + 30) - return time.Duration(delay) * time.Millisecond + + // if number of max retries is zero, no retries will be performed. + if d.NumMaxRetries == 0 { + return 0 + } + + // Sets default value for retryer members + d.setRetryerDefaults() + + // minDelay is the minimum retryer delay + minDelay := d.MinRetryDelay + + var initialDelay time.Duration + + isThrottle := r.IsErrorThrottle() + if isThrottle { + if delay, ok := getRetryAfterDelay(r); ok { + initialDelay = delay + } + minDelay = d.MinThrottleDelay + } + + retryCount := r.RetryCount + + // maxDelay the maximum retryer delay + maxDelay := d.MaxRetryDelay + + if isThrottle { + maxDelay = d.MaxThrottleDelay + } + + var delay time.Duration + + // Logic to cap the retry count based on the minDelay provided + actualRetryCount := int(math.Log2(float64(minDelay))) + 1 + if actualRetryCount < 63-retryCount { + delay = time.Duration(1< maxDelay { + delay = getJitterDelay(maxDelay / 2) + } + } else { + delay = getJitterDelay(maxDelay / 2) + } + return delay + initialDelay +} + +// getJitterDelay returns a jittered delay for retry +func getJitterDelay(duration time.Duration) time.Duration { + return time.Duration(sdkrand.SeededRand.Int63n(int64(duration)) + int64(duration)) } -// ShouldRetry returns if the request should be retried. +// ShouldRetry returns true if the request should be retried. func (d DefaultRetryer) ShouldRetry(r *request.Request) bool { - if r.HTTPResponse.StatusCode >= 500 { - return true + + // ShouldRetry returns false if number of max retries is 0. + if d.NumMaxRetries == 0 { + return false + } + + // If one of the other handlers already set the retry state + // we don't want to override it based on the service's state + if r.Retryable != nil { + return *r.Retryable } - return r.IsErrorRetryable() + return r.IsErrorRetryable() || r.IsErrorThrottle() +} + +// This will look in the Retry-After header, RFC 7231, for how long +// it will wait before attempting another request +func getRetryAfterDelay(r *request.Request) (time.Duration, bool) { + if !canUseRetryAfterHeader(r) { + return 0, false + } + + delayStr := r.HTTPResponse.Header.Get("Retry-After") + if len(delayStr) == 0 { + return 0, false + } + + delay, err := strconv.Atoi(delayStr) + if err != nil { + return 0, false + } + + return time.Duration(delay) * time.Second, true +} + +// Will look at the status code to see if the retry header pertains to +// the status code. +func canUseRetryAfterHeader(r *request.Request) bool { + switch r.HTTPResponse.StatusCode { + case 429: + case 503: + default: + return false + } + + return true } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go b/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go new file mode 100644 index 00000000000..8958c32d4e9 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go @@ -0,0 +1,194 @@ +package client + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "net/http/httputil" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" +) + +const logReqMsg = `DEBUG: Request %s/%s Details: +---[ REQUEST POST-SIGN ]----------------------------- +%s +-----------------------------------------------------` + +const logReqErrMsg = `DEBUG ERROR: Request %s/%s: +---[ REQUEST DUMP ERROR ]----------------------------- +%s +------------------------------------------------------` + +type logWriter struct { + // Logger is what we will use to log the payload of a response. + Logger aws.Logger + // buf stores the contents of what has been read + buf *bytes.Buffer +} + +func (logger *logWriter) Write(b []byte) (int, error) { + return logger.buf.Write(b) +} + +type teeReaderCloser struct { + // io.Reader will be a tee reader that is used during logging. + // This structure will read from a body and write the contents to a logger. + io.Reader + // Source is used just to close when we are done reading. + Source io.ReadCloser +} + +func (reader *teeReaderCloser) Close() error { + return reader.Source.Close() +} + +// LogHTTPRequestHandler is a SDK request handler to log the HTTP request sent +// to a service. Will include the HTTP request body if the LogLevel of the +// request matches LogDebugWithHTTPBody. +var LogHTTPRequestHandler = request.NamedHandler{ + Name: "awssdk.client.LogRequest", + Fn: logRequest, +} + +func logRequest(r *request.Request) { + logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) + bodySeekable := aws.IsReaderSeekable(r.Body) + + b, err := httputil.DumpRequestOut(r.HTTPRequest, logBody) + if err != nil { + r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, err)) + return + } + + if logBody { + if !bodySeekable { + r.SetReaderBody(aws.ReadSeekCloser(r.HTTPRequest.Body)) + } + // Reset the request body because dumpRequest will re-wrap the + // r.HTTPRequest's Body as a NoOpCloser and will not be reset after + // read by the HTTP client reader. + if err := r.Error; err != nil { + r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, err)) + return + } + } + + r.Config.Logger.Log(fmt.Sprintf(logReqMsg, + r.ClientInfo.ServiceName, r.Operation.Name, string(b))) +} + +// LogHTTPRequestHeaderHandler is a SDK request handler to log the HTTP request sent +// to a service. Will only log the HTTP request's headers. The request payload +// will not be read. +var LogHTTPRequestHeaderHandler = request.NamedHandler{ + Name: "awssdk.client.LogRequestHeader", + Fn: logRequestHeader, +} + +func logRequestHeader(r *request.Request) { + b, err := httputil.DumpRequestOut(r.HTTPRequest, false) + if err != nil { + r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, err)) + return + } + + r.Config.Logger.Log(fmt.Sprintf(logReqMsg, + r.ClientInfo.ServiceName, r.Operation.Name, string(b))) +} + +const logRespMsg = `DEBUG: Response %s/%s Details: +---[ RESPONSE ]-------------------------------------- +%s +-----------------------------------------------------` + +const logRespErrMsg = `DEBUG ERROR: Response %s/%s: +---[ RESPONSE DUMP ERROR ]----------------------------- +%s +-----------------------------------------------------` + +// LogHTTPResponseHandler is a SDK request handler to log the HTTP response +// received from a service. Will include the HTTP response body if the LogLevel +// of the request matches LogDebugWithHTTPBody. +var LogHTTPResponseHandler = request.NamedHandler{ + Name: "awssdk.client.LogResponse", + Fn: logResponse, +} + +func logResponse(r *request.Request) { + lw := &logWriter{r.Config.Logger, bytes.NewBuffer(nil)} + + if r.HTTPResponse == nil { + lw.Logger.Log(fmt.Sprintf(logRespErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, "request's HTTPResponse is nil")) + return + } + + logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) + if logBody { + r.HTTPResponse.Body = &teeReaderCloser{ + Reader: io.TeeReader(r.HTTPResponse.Body, lw), + Source: r.HTTPResponse.Body, + } + } + + handlerFn := func(req *request.Request) { + b, err := httputil.DumpResponse(req.HTTPResponse, false) + if err != nil { + lw.Logger.Log(fmt.Sprintf(logRespErrMsg, + req.ClientInfo.ServiceName, req.Operation.Name, err)) + return + } + + lw.Logger.Log(fmt.Sprintf(logRespMsg, + req.ClientInfo.ServiceName, req.Operation.Name, string(b))) + + if logBody { + b, err := ioutil.ReadAll(lw.buf) + if err != nil { + lw.Logger.Log(fmt.Sprintf(logRespErrMsg, + req.ClientInfo.ServiceName, req.Operation.Name, err)) + return + } + + lw.Logger.Log(string(b)) + } + } + + const handlerName = "awsdk.client.LogResponse.ResponseBody" + + r.Handlers.Unmarshal.SetBackNamed(request.NamedHandler{ + Name: handlerName, Fn: handlerFn, + }) + r.Handlers.UnmarshalError.SetBackNamed(request.NamedHandler{ + Name: handlerName, Fn: handlerFn, + }) +} + +// LogHTTPResponseHeaderHandler is a SDK request handler to log the HTTP +// response received from a service. Will only log the HTTP response's headers. +// The response payload will not be read. +var LogHTTPResponseHeaderHandler = request.NamedHandler{ + Name: "awssdk.client.LogResponseHeader", + Fn: logResponseHeader, +} + +func logResponseHeader(r *request.Request) { + if r.Config.Logger == nil { + return + } + + b, err := httputil.DumpResponse(r.HTTPResponse, false) + if err != nil { + r.Config.Logger.Log(fmt.Sprintf(logRespErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, err)) + return + } + + r.Config.Logger.Log(fmt.Sprintf(logRespMsg, + r.ClientInfo.ServiceName, r.Operation.Name, string(b))) +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go b/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go index 4778056ddfd..0c48f72e08e 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go @@ -3,7 +3,9 @@ package metadata // ClientInfo wraps immutable data from the client.Client structure. type ClientInfo struct { ServiceName string + ServiceID string APIVersion string + PartitionID string Endpoint string SigningName string SigningRegion string diff --git a/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go b/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go new file mode 100644 index 00000000000..881d575f010 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go @@ -0,0 +1,28 @@ +package client + +import ( + "time" + + "github.com/aws/aws-sdk-go/aws/request" +) + +// NoOpRetryer provides a retryer that performs no retries. +// It should be used when we do not want retries to be performed. +type NoOpRetryer struct{} + +// MaxRetries returns the number of maximum returns the service will use to make +// an individual API; For NoOpRetryer the MaxRetries will always be zero. +func (d NoOpRetryer) MaxRetries() int { + return 0 +} + +// ShouldRetry will always return false for NoOpRetryer, as it should never retry. +func (d NoOpRetryer) ShouldRetry(_ *request.Request) bool { + return false +} + +// RetryRules returns the delay duration before retrying this request again; +// since NoOpRetryer does not retry, RetryRules always returns 0. +func (d NoOpRetryer) RetryRules(_ *request.Request) time.Duration { + return 0 +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/config.go b/vendor/github.com/aws/aws-sdk-go/aws/config.go index 75fcc8284b9..93ebbcc13f8 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/config.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/config.go @@ -5,21 +5,39 @@ import ( "time" "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/endpoints" ) -// UseServiceDefaultRetries instructs the config to use the service's own default -// number of retries. This will be the default action if Config.MaxRetries -// is nil also. +// UseServiceDefaultRetries instructs the config to use the service's own +// default number of retries. This will be the default action if +// Config.MaxRetries is nil also. const UseServiceDefaultRetries = -1 -// RequestRetryer is an alias for a type that implements the request.Retryer interface. +// RequestRetryer is an alias for a type that implements the request.Retryer +// interface. type RequestRetryer interface{} // A Config provides service configuration for service clients. By default, -// all clients will use the {defaults.DefaultConfig} structure. +// all clients will use the defaults.DefaultConfig structure. +// +// // Create Session with MaxRetries configuration to be shared by multiple +// // service clients. +// sess := session.Must(session.NewSession(&aws.Config{ +// MaxRetries: aws.Int(3), +// })) +// +// // Create S3 service client with a specific Region. +// svc := s3.New(sess, &aws.Config{ +// Region: aws.String("us-west-2"), +// }) type Config struct { - // The credentials object to use when signing requests. Defaults to - // a chain of credential providers to search for credentials in environment + // Enables verbose error printing of all credential chain errors. + // Should be used when wanting to see all errors while attempting to + // retrieve credentials. + CredentialsChainVerboseErrors *bool + + // The credentials object to use when signing requests. Defaults to a + // chain of credential providers to search for credentials in environment // variables, shared credential file, and EC2 Instance Roles. Credentials *credentials.Credentials @@ -27,17 +45,28 @@ type Config struct { // that overrides the default generated endpoint for a client. Set this // to `""` to use the default generated endpoint. // - // @note You must still provide a `Region` value when specifying an - // endpoint for a client. + // Note: You must still provide a `Region` value when specifying an + // endpoint for a client. Endpoint *string + // The resolver to use for looking up endpoints for AWS service clients + // to use based on region. + EndpointResolver endpoints.Resolver + + // EnforceShouldRetryCheck is used in the AfterRetryHandler to always call + // ShouldRetry regardless of whether or not if request.Retryable is set. + // This will utilize ShouldRetry method of custom retryers. If EnforceShouldRetryCheck + // is not set, then ShouldRetry will only be called if request.Retryable is nil. + // Proper handling of the request.Retryable field is important when setting this field. + EnforceShouldRetryCheck *bool + // The region to send requests to. This parameter is required and must // be configured globally or on a per-client basis unless otherwise // noted. A full list of regions is found in the "Regions and Endpoints" // document. // - // @see http://docs.aws.amazon.com/general/latest/gr/rande.html - // AWS Regions and Endpoints + // See http://docs.aws.amazon.com/general/latest/gr/rande.html for AWS + // Regions and Endpoints. Region *string // Set this to `true` to disable SSL when sending requests. Defaults @@ -58,14 +87,15 @@ type Config struct { Logger Logger // The maximum number of times that a request will be retried for failures. - // Defaults to -1, which defers the max retry setting to the service specific - // configuration. + // Defaults to -1, which defers the max retry setting to the service + // specific configuration. MaxRetries *int - // Retryer guides how HTTP requests should be retried in case of recoverable failures. + // Retryer guides how HTTP requests should be retried in case of + // recoverable failures. // // When nil or the value does not implement the request.Retryer interface, - // the request.DefaultRetryer will be used. + // the client.DefaultRetryer will be used. // // When both Retryer and MaxRetries are non-nil, the former is used and // the latter ignored. @@ -77,8 +107,8 @@ type Config struct { // Retryer RequestRetryer - // Disables semantic parameter validation, which validates input for missing - // required fields and/or other semantic request input errors. + // Disables semantic parameter validation, which validates input for + // missing required fields and/or other semantic request input errors. DisableParamValidation *bool // Disables the computation of request and response checksums, e.g., @@ -86,27 +116,168 @@ type Config struct { DisableComputeChecksums *bool // Set this to `true` to force the request to use path-style addressing, - // i.e., `http://s3.amazonaws.com/BUCKET/KEY`. By default, the S3 client will - // use virtual hosted bucket addressing when possible + // i.e., `http://s3.amazonaws.com/BUCKET/KEY`. By default, the S3 client + // will use virtual hosted bucket addressing when possible // (`http://BUCKET.s3.amazonaws.com/KEY`). // - // @note This configuration option is specific to the Amazon S3 service. - // @see http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html - // Amazon S3: Virtual Hosting of Buckets + // Note: This configuration option is specific to the Amazon S3 service. + // + // See http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html + // for Amazon S3: Virtual Hosting of Buckets S3ForcePathStyle *bool + // Set this to `true` to disable the SDK adding the `Expect: 100-Continue` + // header to PUT requests over 2MB of content. 100-Continue instructs the + // HTTP client not to send the body until the service responds with a + // `continue` status. This is useful to prevent sending the request body + // until after the request is authenticated, and validated. + // + // http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html + // + // 100-Continue is only enabled for Go 1.6 and above. See `http.Transport`'s + // `ExpectContinueTimeout` for information on adjusting the continue wait + // timeout. https://golang.org/pkg/net/http/#Transport + // + // You should use this flag to disble 100-Continue if you experience issues + // with proxies or third party S3 compatible services. + S3Disable100Continue *bool + + // Set this to `true` to enable S3 Accelerate feature. For all operations + // compatible with S3 Accelerate will use the accelerate endpoint for + // requests. Requests not compatible will fall back to normal S3 requests. + // + // The bucket must be enable for accelerate to be used with S3 client with + // accelerate enabled. If the bucket is not enabled for accelerate an error + // will be returned. The bucket name must be DNS compatible to also work + // with accelerate. + S3UseAccelerate *bool + + // S3DisableContentMD5Validation config option is temporarily disabled, + // For S3 GetObject API calls, #1837. + // + // Set this to `true` to disable the S3 service client from automatically + // adding the ContentMD5 to S3 Object Put and Upload API calls. This option + // will also disable the SDK from performing object ContentMD5 validation + // on GetObject API calls. + S3DisableContentMD5Validation *bool + + // Set this to `true` to disable the EC2Metadata client from overriding the + // default http.Client's Timeout. This is helpful if you do not want the + // EC2Metadata client to create a new http.Client. This options is only + // meaningful if you're not already using a custom HTTP client with the + // SDK. Enabled by default. + // + // Must be set and provided to the session.NewSession() in order to disable + // the EC2Metadata overriding the timeout for default credentials chain. + // + // Example: + // sess := session.Must(session.NewSession(aws.NewConfig() + // .WithEC2MetadataDiableTimeoutOverride(true))) + // + // svc := s3.New(sess) + // + EC2MetadataDisableTimeoutOverride *bool + + // Instructs the endpoint to be generated for a service client to + // be the dual stack endpoint. The dual stack endpoint will support + // both IPv4 and IPv6 addressing. + // + // Setting this for a service which does not support dual stack will fail + // to make requets. It is not recommended to set this value on the session + // as it will apply to all service clients created with the session. Even + // services which don't support dual stack endpoints. + // + // If the Endpoint config value is also provided the UseDualStack flag + // will be ignored. + // + // Only supported with. + // + // sess := session.Must(session.NewSession()) + // + // svc := s3.New(sess, &aws.Config{ + // UseDualStack: aws.Bool(true), + // }) + UseDualStack *bool + + // SleepDelay is an override for the func the SDK will call when sleeping + // during the lifecycle of a request. Specifically this will be used for + // request delays. This value should only be used for testing. To adjust + // the delay of a request see the aws/client.DefaultRetryer and + // aws/request.Retryer. + // + // SleepDelay will prevent any Context from being used for canceling retry + // delay of an API operation. It is recommended to not use SleepDelay at all + // and specify a Retryer instead. SleepDelay func(time.Duration) + + // DisableRestProtocolURICleaning will not clean the URL path when making rest protocol requests. + // Will default to false. This would only be used for empty directory names in s3 requests. + // + // Example: + // sess := session.Must(session.NewSession(&aws.Config{ + // DisableRestProtocolURICleaning: aws.Bool(true), + // })) + // + // svc := s3.New(sess) + // out, err := svc.GetObject(&s3.GetObjectInput { + // Bucket: aws.String("bucketname"), + // Key: aws.String("//foo//bar//moo"), + // }) + DisableRestProtocolURICleaning *bool + + // EnableEndpointDiscovery will allow for endpoint discovery on operations that + // have the definition in its model. By default, endpoint discovery is off. + // + // Example: + // sess := session.Must(session.NewSession(&aws.Config{ + // EnableEndpointDiscovery: aws.Bool(true), + // })) + // + // svc := s3.New(sess) + // out, err := svc.GetObject(&s3.GetObjectInput { + // Bucket: aws.String("bucketname"), + // Key: aws.String("/foo/bar/moo"), + // }) + EnableEndpointDiscovery *bool + + // DisableEndpointHostPrefix will disable the SDK's behavior of prefixing + // request endpoint hosts with modeled information. + // + // Disabling this feature is useful when you want to use local endpoints + // for testing that do not support the modeled host prefix pattern. + DisableEndpointHostPrefix *bool + + // STSRegionalEndpoint will enable regional or legacy endpoint resolving + STSRegionalEndpoint endpoints.STSRegionalEndpoint + + // S3UsEast1RegionalEndpoint will enable regional or legacy endpoint resolving + S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint } -// NewConfig returns a new Config pointer that can be chained with builder methods to -// set multiple configuration values inline without using pointers. +// NewConfig returns a new Config pointer that can be chained with builder +// methods to set multiple configuration values inline without using pointers. // -// svc := s3.New(aws.NewConfig().WithRegion("us-west-2").WithMaxRetries(10)) +// // Create Session with MaxRetries configuration to be shared by multiple +// // service clients. +// sess := session.Must(session.NewSession(aws.NewConfig(). +// WithMaxRetries(3), +// )) // +// // Create S3 service client with a specific Region. +// svc := s3.New(sess, aws.NewConfig(). +// WithRegion("us-west-2"), +// ) func NewConfig() *Config { return &Config{} } +// WithCredentialsChainVerboseErrors sets a config verbose errors boolean and returning +// a Config pointer. +func (c *Config) WithCredentialsChainVerboseErrors(verboseErrs bool) *Config { + c.CredentialsChainVerboseErrors = &verboseErrs + return c +} + // WithCredentials sets a config Credentials value returning a Config pointer // for chaining. func (c *Config) WithCredentials(creds *credentials.Credentials) *Config { @@ -121,6 +292,13 @@ func (c *Config) WithEndpoint(endpoint string) *Config { return c } +// WithEndpointResolver sets a config EndpointResolver value returning a +// Config pointer for chaining. +func (c *Config) WithEndpointResolver(resolver endpoints.Resolver) *Config { + c.EndpointResolver = resolver + return c +} + // WithRegion sets a config Region value returning a Config pointer for // chaining. func (c *Config) WithRegion(region string) *Config { @@ -184,6 +362,43 @@ func (c *Config) WithS3ForcePathStyle(force bool) *Config { return c } +// WithS3Disable100Continue sets a config S3Disable100Continue value returning +// a Config pointer for chaining. +func (c *Config) WithS3Disable100Continue(disable bool) *Config { + c.S3Disable100Continue = &disable + return c +} + +// WithS3UseAccelerate sets a config S3UseAccelerate value returning a Config +// pointer for chaining. +func (c *Config) WithS3UseAccelerate(enable bool) *Config { + c.S3UseAccelerate = &enable + return c + +} + +// WithS3DisableContentMD5Validation sets a config +// S3DisableContentMD5Validation value returning a Config pointer for chaining. +func (c *Config) WithS3DisableContentMD5Validation(enable bool) *Config { + c.S3DisableContentMD5Validation = &enable + return c + +} + +// WithUseDualStack sets a config UseDualStack value returning a Config +// pointer for chaining. +func (c *Config) WithUseDualStack(enable bool) *Config { + c.UseDualStack = &enable + return c +} + +// WithEC2MetadataDisableTimeoutOverride sets a config EC2MetadataDisableTimeoutOverride value +// returning a Config pointer for chaining. +func (c *Config) WithEC2MetadataDisableTimeoutOverride(enable bool) *Config { + c.EC2MetadataDisableTimeoutOverride = &enable + return c +} + // WithSleepDelay overrides the function used to sleep while waiting for the // next retry. Defaults to time.Sleep. func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config { @@ -191,6 +406,19 @@ func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config { return c } +// WithEndpointDiscovery will set whether or not to use endpoint discovery. +func (c *Config) WithEndpointDiscovery(t bool) *Config { + c.EnableEndpointDiscovery = &t + return c +} + +// WithDisableEndpointHostPrefix will set whether or not to use modeled host prefix +// when making requests. +func (c *Config) WithDisableEndpointHostPrefix(t bool) *Config { + c.DisableEndpointHostPrefix = &t + return c +} + // MergeIn merges the passed in configs into the existing config object. func (c *Config) MergeIn(cfgs ...*Config) { for _, other := range cfgs { @@ -198,11 +426,29 @@ func (c *Config) MergeIn(cfgs ...*Config) { } } +// WithSTSRegionalEndpoint will set whether or not to use regional endpoint flag +// when resolving the endpoint for a service +func (c *Config) WithSTSRegionalEndpoint(sre endpoints.STSRegionalEndpoint) *Config { + c.STSRegionalEndpoint = sre + return c +} + +// WithS3UsEast1RegionalEndpoint will set whether or not to use regional endpoint flag +// when resolving the endpoint for a service +func (c *Config) WithS3UsEast1RegionalEndpoint(sre endpoints.S3UsEast1RegionalEndpoint) *Config { + c.S3UsEast1RegionalEndpoint = sre + return c +} + func mergeInConfig(dst *Config, other *Config) { if other == nil { return } + if other.CredentialsChainVerboseErrors != nil { + dst.CredentialsChainVerboseErrors = other.CredentialsChainVerboseErrors + } + if other.Credentials != nil { dst.Credentials = other.Credentials } @@ -211,6 +457,10 @@ func mergeInConfig(dst *Config, other *Config) { dst.Endpoint = other.Endpoint } + if other.EndpointResolver != nil { + dst.EndpointResolver = other.EndpointResolver + } + if other.Region != nil { dst.Region = other.Region } @@ -251,9 +501,53 @@ func mergeInConfig(dst *Config, other *Config) { dst.S3ForcePathStyle = other.S3ForcePathStyle } + if other.S3Disable100Continue != nil { + dst.S3Disable100Continue = other.S3Disable100Continue + } + + if other.S3UseAccelerate != nil { + dst.S3UseAccelerate = other.S3UseAccelerate + } + + if other.S3DisableContentMD5Validation != nil { + dst.S3DisableContentMD5Validation = other.S3DisableContentMD5Validation + } + + if other.UseDualStack != nil { + dst.UseDualStack = other.UseDualStack + } + + if other.EC2MetadataDisableTimeoutOverride != nil { + dst.EC2MetadataDisableTimeoutOverride = other.EC2MetadataDisableTimeoutOverride + } + if other.SleepDelay != nil { dst.SleepDelay = other.SleepDelay } + + if other.DisableRestProtocolURICleaning != nil { + dst.DisableRestProtocolURICleaning = other.DisableRestProtocolURICleaning + } + + if other.EnforceShouldRetryCheck != nil { + dst.EnforceShouldRetryCheck = other.EnforceShouldRetryCheck + } + + if other.EnableEndpointDiscovery != nil { + dst.EnableEndpointDiscovery = other.EnableEndpointDiscovery + } + + if other.DisableEndpointHostPrefix != nil { + dst.DisableEndpointHostPrefix = other.DisableEndpointHostPrefix + } + + if other.STSRegionalEndpoint != endpoints.UnsetSTSEndpoint { + dst.STSRegionalEndpoint = other.STSRegionalEndpoint + } + + if other.S3UsEast1RegionalEndpoint != endpoints.UnsetS3UsEast1Endpoint { + dst.S3UsEast1RegionalEndpoint = other.S3UsEast1RegionalEndpoint + } } // Copy will return a shallow copy of the Config object. If any additional diff --git a/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go b/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go new file mode 100644 index 00000000000..2866f9a7fb9 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go @@ -0,0 +1,37 @@ +// +build !go1.9 + +package aws + +import "time" + +// Context is an copy of the Go v1.7 stdlib's context.Context interface. +// It is represented as a SDK interface to enable you to use the "WithContext" +// API methods with Go v1.6 and a Context type such as golang.org/x/net/context. +// +// See https://golang.org/pkg/context on how to use contexts. +type Context interface { + // Deadline returns the time when work done on behalf of this context + // should be canceled. Deadline returns ok==false when no deadline is + // set. Successive calls to Deadline return the same results. + Deadline() (deadline time.Time, ok bool) + + // Done returns a channel that's closed when work done on behalf of this + // context should be canceled. Done may return nil if this context can + // never be canceled. Successive calls to Done return the same value. + Done() <-chan struct{} + + // Err returns a non-nil error value after Done is closed. Err returns + // Canceled if the context was canceled or DeadlineExceeded if the + // context's deadline passed. No other values for Err are defined. + // After Done is closed, successive calls to Err return the same value. + Err() error + + // Value returns the value associated with this context for key, or nil + // if no value is associated with key. Successive calls to Value with + // the same key returns the same result. + // + // Use context values only for request-scoped data that transits + // processes and API boundaries, not for passing optional parameters to + // functions. + Value(key interface{}) interface{} +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go b/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go new file mode 100644 index 00000000000..3718b26e101 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go @@ -0,0 +1,11 @@ +// +build go1.9 + +package aws + +import "context" + +// Context is an alias of the Go stdlib's context.Context interface. +// It can be used within the SDK's API operation "WithContext" methods. +// +// See https://golang.org/pkg/context on how to use contexts. +type Context = context.Context diff --git a/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go b/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go new file mode 100644 index 00000000000..66c5945db15 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go @@ -0,0 +1,56 @@ +// +build !go1.7 + +package aws + +import "time" + +// An emptyCtx is a copy of the Go 1.7 context.emptyCtx type. This is copied to +// provide a 1.6 and 1.5 safe version of context that is compatible with Go +// 1.7's Context. +// +// An emptyCtx is never canceled, has no values, and has no deadline. It is not +// struct{}, since vars of this type must have distinct addresses. +type emptyCtx int + +func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { + return +} + +func (*emptyCtx) Done() <-chan struct{} { + return nil +} + +func (*emptyCtx) Err() error { + return nil +} + +func (*emptyCtx) Value(key interface{}) interface{} { + return nil +} + +func (e *emptyCtx) String() string { + switch e { + case backgroundCtx: + return "aws.BackgroundContext" + } + return "unknown empty Context" +} + +var ( + backgroundCtx = new(emptyCtx) +) + +// BackgroundContext returns a context that will never be canceled, has no +// values, and no deadline. This context is used by the SDK to provide +// backwards compatibility with non-context API operations and functionality. +// +// Go 1.6 and before: +// This context function is equivalent to context.Background in the Go stdlib. +// +// Go 1.7 and later: +// The context returned will be the value returned by context.Background() +// +// See https://golang.org/pkg/context for more information on Contexts. +func BackgroundContext() Context { + return backgroundCtx +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go b/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go new file mode 100644 index 00000000000..9c29f29af17 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go @@ -0,0 +1,20 @@ +// +build go1.7 + +package aws + +import "context" + +// BackgroundContext returns a context that will never be canceled, has no +// values, and no deadline. This context is used by the SDK to provide +// backwards compatibility with non-context API operations and functionality. +// +// Go 1.6 and before: +// This context function is equivalent to context.Background in the Go stdlib. +// +// Go 1.7 and later: +// The context returned will be the value returned by context.Background() +// +// See https://golang.org/pkg/context for more information on Contexts. +func BackgroundContext() Context { + return context.Background() +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go b/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go new file mode 100644 index 00000000000..304fd156120 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go @@ -0,0 +1,24 @@ +package aws + +import ( + "time" +) + +// SleepWithContext will wait for the timer duration to expire, or the context +// is canceled. Which ever happens first. If the context is canceled the Context's +// error will be returned. +// +// Expects Context to always return a non-nil error if the Done channel is closed. +func SleepWithContext(ctx Context, dur time.Duration) error { + t := time.NewTimer(dur) + defer t.Stop() + + select { + case <-t.C: + break + case <-ctx.Done(): + return ctx.Err() + } + + return nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go b/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go index d6a7b08dffe..4e076c1837a 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go @@ -2,7 +2,7 @@ package aws import "time" -// String returns a pointer to of the string value passed in. +// String returns a pointer to the string value passed in. func String(v string) *string { return &v } @@ -61,7 +61,7 @@ func StringValueMap(src map[string]*string) map[string]string { return dst } -// Bool returns a pointer to of the bool value passed in. +// Bool returns a pointer to the bool value passed in. func Bool(v bool) *bool { return &v } @@ -120,7 +120,7 @@ func BoolValueMap(src map[string]*bool) map[string]bool { return dst } -// Int returns a pointer to of the int value passed in. +// Int returns a pointer to the int value passed in. func Int(v int) *int { return &v } @@ -179,7 +179,243 @@ func IntValueMap(src map[string]*int) map[string]int { return dst } -// Int64 returns a pointer to of the int64 value passed in. +// Uint returns a pointer to the uint value passed in. +func Uint(v uint) *uint { + return &v +} + +// UintValue returns the value of the uint pointer passed in or +// 0 if the pointer is nil. +func UintValue(v *uint) uint { + if v != nil { + return *v + } + return 0 +} + +// UintSlice converts a slice of uint values uinto a slice of +// uint pointers +func UintSlice(src []uint) []*uint { + dst := make([]*uint, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// UintValueSlice converts a slice of uint pointers uinto a slice of +// uint values +func UintValueSlice(src []*uint) []uint { + dst := make([]uint, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// UintMap converts a string map of uint values uinto a string +// map of uint pointers +func UintMap(src map[string]uint) map[string]*uint { + dst := make(map[string]*uint) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// UintValueMap converts a string map of uint pointers uinto a string +// map of uint values +func UintValueMap(src map[string]*uint) map[string]uint { + dst := make(map[string]uint) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int8 returns a pointer to the int8 value passed in. +func Int8(v int8) *int8 { + return &v +} + +// Int8Value returns the value of the int8 pointer passed in or +// 0 if the pointer is nil. +func Int8Value(v *int8) int8 { + if v != nil { + return *v + } + return 0 +} + +// Int8Slice converts a slice of int8 values into a slice of +// int8 pointers +func Int8Slice(src []int8) []*int8 { + dst := make([]*int8, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Int8ValueSlice converts a slice of int8 pointers into a slice of +// int8 values +func Int8ValueSlice(src []*int8) []int8 { + dst := make([]int8, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Int8Map converts a string map of int8 values into a string +// map of int8 pointers +func Int8Map(src map[string]int8) map[string]*int8 { + dst := make(map[string]*int8) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Int8ValueMap converts a string map of int8 pointers into a string +// map of int8 values +func Int8ValueMap(src map[string]*int8) map[string]int8 { + dst := make(map[string]int8) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int16 returns a pointer to the int16 value passed in. +func Int16(v int16) *int16 { + return &v +} + +// Int16Value returns the value of the int16 pointer passed in or +// 0 if the pointer is nil. +func Int16Value(v *int16) int16 { + if v != nil { + return *v + } + return 0 +} + +// Int16Slice converts a slice of int16 values into a slice of +// int16 pointers +func Int16Slice(src []int16) []*int16 { + dst := make([]*int16, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Int16ValueSlice converts a slice of int16 pointers into a slice of +// int16 values +func Int16ValueSlice(src []*int16) []int16 { + dst := make([]int16, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Int16Map converts a string map of int16 values into a string +// map of int16 pointers +func Int16Map(src map[string]int16) map[string]*int16 { + dst := make(map[string]*int16) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Int16ValueMap converts a string map of int16 pointers into a string +// map of int16 values +func Int16ValueMap(src map[string]*int16) map[string]int16 { + dst := make(map[string]int16) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int32 returns a pointer to the int32 value passed in. +func Int32(v int32) *int32 { + return &v +} + +// Int32Value returns the value of the int32 pointer passed in or +// 0 if the pointer is nil. +func Int32Value(v *int32) int32 { + if v != nil { + return *v + } + return 0 +} + +// Int32Slice converts a slice of int32 values into a slice of +// int32 pointers +func Int32Slice(src []int32) []*int32 { + dst := make([]*int32, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Int32ValueSlice converts a slice of int32 pointers into a slice of +// int32 values +func Int32ValueSlice(src []*int32) []int32 { + dst := make([]int32, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Int32Map converts a string map of int32 values into a string +// map of int32 pointers +func Int32Map(src map[string]int32) map[string]*int32 { + dst := make(map[string]*int32) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Int32ValueMap converts a string map of int32 pointers into a string +// map of int32 values +func Int32ValueMap(src map[string]*int32) map[string]int32 { + dst := make(map[string]int32) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int64 returns a pointer to the int64 value passed in. func Int64(v int64) *int64 { return &v } @@ -238,7 +474,302 @@ func Int64ValueMap(src map[string]*int64) map[string]int64 { return dst } -// Float64 returns a pointer to of the float64 value passed in. +// Uint8 returns a pointer to the uint8 value passed in. +func Uint8(v uint8) *uint8 { + return &v +} + +// Uint8Value returns the value of the uint8 pointer passed in or +// 0 if the pointer is nil. +func Uint8Value(v *uint8) uint8 { + if v != nil { + return *v + } + return 0 +} + +// Uint8Slice converts a slice of uint8 values into a slice of +// uint8 pointers +func Uint8Slice(src []uint8) []*uint8 { + dst := make([]*uint8, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint8ValueSlice converts a slice of uint8 pointers into a slice of +// uint8 values +func Uint8ValueSlice(src []*uint8) []uint8 { + dst := make([]uint8, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint8Map converts a string map of uint8 values into a string +// map of uint8 pointers +func Uint8Map(src map[string]uint8) map[string]*uint8 { + dst := make(map[string]*uint8) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint8ValueMap converts a string map of uint8 pointers into a string +// map of uint8 values +func Uint8ValueMap(src map[string]*uint8) map[string]uint8 { + dst := make(map[string]uint8) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint16 returns a pointer to the uint16 value passed in. +func Uint16(v uint16) *uint16 { + return &v +} + +// Uint16Value returns the value of the uint16 pointer passed in or +// 0 if the pointer is nil. +func Uint16Value(v *uint16) uint16 { + if v != nil { + return *v + } + return 0 +} + +// Uint16Slice converts a slice of uint16 values into a slice of +// uint16 pointers +func Uint16Slice(src []uint16) []*uint16 { + dst := make([]*uint16, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint16ValueSlice converts a slice of uint16 pointers into a slice of +// uint16 values +func Uint16ValueSlice(src []*uint16) []uint16 { + dst := make([]uint16, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint16Map converts a string map of uint16 values into a string +// map of uint16 pointers +func Uint16Map(src map[string]uint16) map[string]*uint16 { + dst := make(map[string]*uint16) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint16ValueMap converts a string map of uint16 pointers into a string +// map of uint16 values +func Uint16ValueMap(src map[string]*uint16) map[string]uint16 { + dst := make(map[string]uint16) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint32 returns a pointer to the uint32 value passed in. +func Uint32(v uint32) *uint32 { + return &v +} + +// Uint32Value returns the value of the uint32 pointer passed in or +// 0 if the pointer is nil. +func Uint32Value(v *uint32) uint32 { + if v != nil { + return *v + } + return 0 +} + +// Uint32Slice converts a slice of uint32 values into a slice of +// uint32 pointers +func Uint32Slice(src []uint32) []*uint32 { + dst := make([]*uint32, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint32ValueSlice converts a slice of uint32 pointers into a slice of +// uint32 values +func Uint32ValueSlice(src []*uint32) []uint32 { + dst := make([]uint32, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint32Map converts a string map of uint32 values into a string +// map of uint32 pointers +func Uint32Map(src map[string]uint32) map[string]*uint32 { + dst := make(map[string]*uint32) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint32ValueMap converts a string map of uint32 pointers into a string +// map of uint32 values +func Uint32ValueMap(src map[string]*uint32) map[string]uint32 { + dst := make(map[string]uint32) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint64 returns a pointer to the uint64 value passed in. +func Uint64(v uint64) *uint64 { + return &v +} + +// Uint64Value returns the value of the uint64 pointer passed in or +// 0 if the pointer is nil. +func Uint64Value(v *uint64) uint64 { + if v != nil { + return *v + } + return 0 +} + +// Uint64Slice converts a slice of uint64 values into a slice of +// uint64 pointers +func Uint64Slice(src []uint64) []*uint64 { + dst := make([]*uint64, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint64ValueSlice converts a slice of uint64 pointers into a slice of +// uint64 values +func Uint64ValueSlice(src []*uint64) []uint64 { + dst := make([]uint64, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint64Map converts a string map of uint64 values into a string +// map of uint64 pointers +func Uint64Map(src map[string]uint64) map[string]*uint64 { + dst := make(map[string]*uint64) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint64ValueMap converts a string map of uint64 pointers into a string +// map of uint64 values +func Uint64ValueMap(src map[string]*uint64) map[string]uint64 { + dst := make(map[string]uint64) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Float32 returns a pointer to the float32 value passed in. +func Float32(v float32) *float32 { + return &v +} + +// Float32Value returns the value of the float32 pointer passed in or +// 0 if the pointer is nil. +func Float32Value(v *float32) float32 { + if v != nil { + return *v + } + return 0 +} + +// Float32Slice converts a slice of float32 values into a slice of +// float32 pointers +func Float32Slice(src []float32) []*float32 { + dst := make([]*float32, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Float32ValueSlice converts a slice of float32 pointers into a slice of +// float32 values +func Float32ValueSlice(src []*float32) []float32 { + dst := make([]float32, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Float32Map converts a string map of float32 values into a string +// map of float32 pointers +func Float32Map(src map[string]float32) map[string]*float32 { + dst := make(map[string]*float32) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Float32ValueMap converts a string map of float32 pointers into a string +// map of float32 values +func Float32ValueMap(src map[string]*float32) map[string]float32 { + dst := make(map[string]float32) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Float64 returns a pointer to the float64 value passed in. func Float64(v float64) *float64 { return &v } @@ -297,7 +828,7 @@ func Float64ValueMap(src map[string]*float64) map[string]float64 { return dst } -// Time returns a pointer to of the time.Time value passed in. +// Time returns a pointer to the time.Time value passed in. func Time(v time.Time) *time.Time { return &v } @@ -311,6 +842,36 @@ func TimeValue(v *time.Time) time.Time { return time.Time{} } +// SecondsTimeValue converts an int64 pointer to a time.Time value +// representing seconds since Epoch or time.Time{} if the pointer is nil. +func SecondsTimeValue(v *int64) time.Time { + if v != nil { + return time.Unix((*v / 1000), 0) + } + return time.Time{} +} + +// MillisecondsTimeValue converts an int64 pointer to a time.Time value +// representing milliseconds sinch Epoch or time.Time{} if the pointer is nil. +func MillisecondsTimeValue(v *int64) time.Time { + if v != nil { + return time.Unix(0, (*v * 1000000)) + } + return time.Time{} +} + +// TimeUnixMilli returns a Unix timestamp in milliseconds from "January 1, 1970 UTC". +// The result is undefined if the Unix time cannot be represented by an int64. +// Which includes calling TimeUnixMilli on a zero Time is undefined. +// +// This utility is useful for service API's such as CloudWatch Logs which require +// their unix time values to be in milliseconds. +// +// See Go stdlib https://golang.org/pkg/time/#Time.UnixNano for more information. +func TimeUnixMilli(t time.Time) int64 { + return t.UnixNano() / int64(time.Millisecond/time.Nanosecond) +} + // TimeSlice converts a slice of time.Time values into a slice of // time.Time pointers func TimeSlice(src []time.Time) []*time.Time { diff --git a/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go b/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go index 1d3e656fd68..0c60e612ea5 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go @@ -3,16 +3,16 @@ package corehandlers import ( "bytes" "fmt" - "io" "io/ioutil" "net/http" "net/url" "regexp" - "runtime" "strconv" + "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/request" ) @@ -24,75 +24,155 @@ type lener interface { // BuildContentLengthHandler builds the content length of a request based on the body, // or will use the HTTPRequest.Header's "Content-Length" if defined. If unable // to determine request body length and no "Content-Length" was specified it will panic. +// +// The Content-Length will only be added to the request if the length of the body +// is greater than 0. If the body is empty or the current `Content-Length` +// header is <= 0, the header will also be stripped. var BuildContentLengthHandler = request.NamedHandler{Name: "core.BuildContentLengthHandler", Fn: func(r *request.Request) { + var length int64 + if slength := r.HTTPRequest.Header.Get("Content-Length"); slength != "" { - length, _ := strconv.ParseInt(slength, 10, 64) - r.HTTPRequest.ContentLength = length - return + length, _ = strconv.ParseInt(slength, 10, 64) + } else { + if r.Body != nil { + var err error + length, err = aws.SeekerLen(r.Body) + if err != nil { + r.Error = awserr.New(request.ErrCodeSerialization, "failed to get request body's length", err) + return + } + } } - var length int64 - switch body := r.Body.(type) { - case nil: - length = 0 - case lener: - length = int64(body.Len()) - case io.Seeker: - r.BodyStart, _ = body.Seek(0, 1) - end, _ := body.Seek(0, 2) - body.Seek(r.BodyStart, 0) // make sure to seek back to original location - length = end - r.BodyStart - default: - panic("Cannot get length of body, must provide `ContentLength`") + if length > 0 { + r.HTTPRequest.ContentLength = length + r.HTTPRequest.Header.Set("Content-Length", fmt.Sprintf("%d", length)) + } else { + r.HTTPRequest.ContentLength = 0 + r.HTTPRequest.Header.Del("Content-Length") } - - r.HTTPRequest.ContentLength = length - r.HTTPRequest.Header.Set("Content-Length", fmt.Sprintf("%d", length)) }} -// SDKVersionUserAgentHandler is a request handler for adding the SDK Version to the user agent. -var SDKVersionUserAgentHandler = request.NamedHandler{ - Name: "core.SDKVersionUserAgentHandler", - Fn: request.MakeAddToUserAgentHandler(aws.SDKName, aws.SDKVersion, - runtime.Version(), runtime.GOOS, runtime.GOARCH), -} - var reStatusCode = regexp.MustCompile(`^(\d{3})`) +// ValidateReqSigHandler is a request handler to ensure that the request's +// signature doesn't expire before it is sent. This can happen when a request +// is built and signed significantly before it is sent. Or significant delays +// occur when retrying requests that would cause the signature to expire. +var ValidateReqSigHandler = request.NamedHandler{ + Name: "core.ValidateReqSigHandler", + Fn: func(r *request.Request) { + // Unsigned requests are not signed + if r.Config.Credentials == credentials.AnonymousCredentials { + return + } + + signedTime := r.Time + if !r.LastSignedAt.IsZero() { + signedTime = r.LastSignedAt + } + + // 5 minutes to allow for some clock skew/delays in transmission. + // Would be improved with aws/aws-sdk-go#423 + if signedTime.Add(5 * time.Minute).After(time.Now()) { + return + } + + fmt.Println("request expired, resigning") + r.Sign() + }, +} + // SendHandler is a request handler to send service request using HTTP client. -var SendHandler = request.NamedHandler{Name: "core.SendHandler", Fn: func(r *request.Request) { - var err error - r.HTTPResponse, err = r.Config.HTTPClient.Do(r.HTTPRequest) - if err != nil { - // Capture the case where url.Error is returned for error processing - // response. e.g. 301 without location header comes back as string - // error and r.HTTPResponse is nil. Other url redirect errors will - // comeback in a similar method. - if e, ok := err.(*url.Error); ok && e.Err != nil { - if s := reStatusCode.FindStringSubmatch(e.Err.Error()); s != nil { - code, _ := strconv.ParseInt(s[1], 10, 64) - r.HTTPResponse = &http.Response{ - StatusCode: int(code), - Status: http.StatusText(int(code)), - Body: ioutil.NopCloser(bytes.NewReader([]byte{})), - } - return - } +var SendHandler = request.NamedHandler{ + Name: "core.SendHandler", + Fn: func(r *request.Request) { + sender := sendFollowRedirects + if r.DisableFollowRedirects { + sender = sendWithoutFollowRedirects + } + + if request.NoBody == r.HTTPRequest.Body { + // Strip off the request body if the NoBody reader was used as a + // place holder for a request body. This prevents the SDK from + // making requests with a request body when it would be invalid + // to do so. + // + // Use a shallow copy of the http.Request to ensure the race condition + // of transport on Body will not trigger + reqOrig, reqCopy := r.HTTPRequest, *r.HTTPRequest + reqCopy.Body = nil + r.HTTPRequest = &reqCopy + defer func() { + r.HTTPRequest = reqOrig + }() + } + + var err error + r.HTTPResponse, err = sender(r) + if err != nil { + handleSendError(r, err) } - if r.HTTPResponse == nil { - // Add a dummy request response object to ensure the HTTPResponse - // value is consistent. + }, +} + +func sendFollowRedirects(r *request.Request) (*http.Response, error) { + return r.Config.HTTPClient.Do(r.HTTPRequest) +} + +func sendWithoutFollowRedirects(r *request.Request) (*http.Response, error) { + transport := r.Config.HTTPClient.Transport + if transport == nil { + transport = http.DefaultTransport + } + + return transport.RoundTrip(r.HTTPRequest) +} + +func handleSendError(r *request.Request, err error) { + // Prevent leaking if an HTTPResponse was returned. Clean up + // the body. + if r.HTTPResponse != nil { + r.HTTPResponse.Body.Close() + } + // Capture the case where url.Error is returned for error processing + // response. e.g. 301 without location header comes back as string + // error and r.HTTPResponse is nil. Other URL redirect errors will + // comeback in a similar method. + if e, ok := err.(*url.Error); ok && e.Err != nil { + if s := reStatusCode.FindStringSubmatch(e.Err.Error()); s != nil { + code, _ := strconv.ParseInt(s[1], 10, 64) r.HTTPResponse = &http.Response{ - StatusCode: int(0), - Status: http.StatusText(int(0)), + StatusCode: int(code), + Status: http.StatusText(int(code)), Body: ioutil.NopCloser(bytes.NewReader([]byte{})), } + return } - // Catch all other request errors. - r.Error = awserr.New("RequestError", "send request failed", err) - r.Retryable = aws.Bool(true) // network errors are retryable } -}} + if r.HTTPResponse == nil { + // Add a dummy request response object to ensure the HTTPResponse + // value is consistent. + r.HTTPResponse = &http.Response{ + StatusCode: int(0), + Status: http.StatusText(int(0)), + Body: ioutil.NopCloser(bytes.NewReader([]byte{})), + } + } + // Catch all request errors, and let the default retrier determine + // if the error is retryable. + r.Error = awserr.New("RequestError", "send request failed", err) + + // Override the error with a context canceled error, if that was canceled. + ctx := r.Context() + select { + case <-ctx.Done(): + r.Error = awserr.New(request.CanceledErrorCode, + "request context canceled", ctx.Err()) + r.Retryable = aws.Bool(false) + default: + } +} // ValidateResponseHandler is a request handler to validate service response. var ValidateResponseHandler = request.NamedHandler{Name: "core.ValidateResponseHandler", Fn: func(r *request.Request) { @@ -104,28 +184,39 @@ var ValidateResponseHandler = request.NamedHandler{Name: "core.ValidateResponseH // AfterRetryHandler performs final checks to determine if the request should // be retried and how long to delay. -var AfterRetryHandler = request.NamedHandler{Name: "core.AfterRetryHandler", Fn: func(r *request.Request) { - // If one of the other handlers already set the retry state - // we don't want to override it based on the service's state - if r.Retryable == nil { - r.Retryable = aws.Bool(r.ShouldRetry(r)) - } +var AfterRetryHandler = request.NamedHandler{ + Name: "core.AfterRetryHandler", + Fn: func(r *request.Request) { + // If one of the other handlers already set the retry state + // we don't want to override it based on the service's state + if r.Retryable == nil || aws.BoolValue(r.Config.EnforceShouldRetryCheck) { + r.Retryable = aws.Bool(r.ShouldRetry(r)) + } - if r.WillRetry() { - r.RetryDelay = r.RetryRules(r) - r.Config.SleepDelay(r.RetryDelay) + if r.WillRetry() { + r.RetryDelay = r.RetryRules(r) - // when the expired token exception occurs the credentials - // need to be expired locally so that the next request to - // get credentials will trigger a credentials refresh. - if r.IsErrorExpired() { - r.Config.Credentials.Expire() - } + if sleepFn := r.Config.SleepDelay; sleepFn != nil { + // Support SleepDelay for backwards compatibility and testing + sleepFn(r.RetryDelay) + } else if err := aws.SleepWithContext(r.Context(), r.RetryDelay); err != nil { + r.Error = awserr.New(request.CanceledErrorCode, + "request context canceled", err) + r.Retryable = aws.Bool(false) + return + } - r.RetryCount++ - r.Error = nil - } -}} + // when the expired token exception occurs the credentials + // need to be expired locally so that the next request to + // get credentials will trigger a credentials refresh. + if r.IsErrorExpired() { + r.Config.Credentials.Expire() + } + + r.RetryCount++ + r.Error = nil + } + }} // ValidateEndpointHandler is a request handler to validate a request had the // appropriate Region and Endpoint set. Will set r.Error if the endpoint or diff --git a/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go b/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go index 3b53f5e026a..7d50b1557cc 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go @@ -1,144 +1,17 @@ package corehandlers -import ( - "fmt" - "reflect" - "strconv" - "strings" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" -) +import "github.com/aws/aws-sdk-go/aws/request" // ValidateParametersHandler is a request handler to validate the input parameters. // Validating parameters only has meaning if done prior to the request being sent. var ValidateParametersHandler = request.NamedHandler{Name: "core.ValidateParametersHandler", Fn: func(r *request.Request) { - if r.ParamsFilled() { - v := validator{errors: []string{}} - v.validateAny(reflect.ValueOf(r.Params), "") - - if count := len(v.errors); count > 0 { - format := "%d validation errors:\n- %s" - msg := fmt.Sprintf(format, count, strings.Join(v.errors, "\n- ")) - r.Error = awserr.New("InvalidParameter", msg, nil) - } - } -}} - -// A validator validates values. Collects validations errors which occurs. -type validator struct { - errors []string -} - -// validateAny will validate any struct, slice or map type. All validations -// are also performed recursively for nested types. -func (v *validator) validateAny(value reflect.Value, path string) { - value = reflect.Indirect(value) - if !value.IsValid() { + if !r.ParamsFilled() { return } - switch value.Kind() { - case reflect.Struct: - v.validateStruct(value, path) - case reflect.Slice: - for i := 0; i < value.Len(); i++ { - v.validateAny(value.Index(i), path+fmt.Sprintf("[%d]", i)) - } - case reflect.Map: - for _, n := range value.MapKeys() { - v.validateAny(value.MapIndex(n), path+fmt.Sprintf("[%q]", n.String())) - } - } -} - -// validateStruct will validate the struct value's fields. If the structure has -// nested types those types will be validated also. -func (v *validator) validateStruct(value reflect.Value, path string) { - prefix := "." - if path == "" { - prefix = "" - } - - for i := 0; i < value.Type().NumField(); i++ { - f := value.Type().Field(i) - if strings.ToLower(f.Name[0:1]) == f.Name[0:1] { - continue - } - fvalue := value.FieldByName(f.Name) - - err := validateField(f, fvalue, validateFieldRequired, validateFieldMin) - if err != nil { - v.errors = append(v.errors, fmt.Sprintf("%s: %s", err.Error(), path+prefix+f.Name)) - continue - } - - v.validateAny(fvalue, path+prefix+f.Name) - } -} - -type validatorFunc func(f reflect.StructField, fvalue reflect.Value) error - -func validateField(f reflect.StructField, fvalue reflect.Value, funcs ...validatorFunc) error { - for _, fn := range funcs { - if err := fn(f, fvalue); err != nil { - return err + if v, ok := r.Params.(request.Validator); ok { + if err := v.Validate(); err != nil { + r.Error = err } } - return nil -} - -// Validates that a field has a valid value provided for required fields. -func validateFieldRequired(f reflect.StructField, fvalue reflect.Value) error { - if f.Tag.Get("required") == "" { - return nil - } - - switch fvalue.Kind() { - case reflect.Ptr, reflect.Slice, reflect.Map: - if fvalue.IsNil() { - return fmt.Errorf("missing required parameter") - } - default: - if !fvalue.IsValid() { - return fmt.Errorf("missing required parameter") - } - } - return nil -} - -// Validates that if a value is provided for a field, that value must be at -// least a minimum length. -func validateFieldMin(f reflect.StructField, fvalue reflect.Value) error { - minStr := f.Tag.Get("min") - if minStr == "" { - return nil - } - min, _ := strconv.ParseInt(minStr, 10, 64) - - kind := fvalue.Kind() - if kind == reflect.Ptr { - if fvalue.IsNil() { - return nil - } - fvalue = fvalue.Elem() - } - - switch fvalue.Kind() { - case reflect.String: - if int64(fvalue.Len()) < min { - return fmt.Errorf("field too short, minimum length %d", min) - } - case reflect.Slice, reflect.Map: - if fvalue.IsNil() { - return nil - } - if int64(fvalue.Len()) < min { - return fmt.Errorf("field too short, minimum length %d", min) - } - - // TODO min can also apply to number minimum value. - - } - return nil -} +}} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go b/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go new file mode 100644 index 00000000000..ab69c7a6f38 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go @@ -0,0 +1,37 @@ +package corehandlers + +import ( + "os" + "runtime" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" +) + +// SDKVersionUserAgentHandler is a request handler for adding the SDK Version +// to the user agent. +var SDKVersionUserAgentHandler = request.NamedHandler{ + Name: "core.SDKVersionUserAgentHandler", + Fn: request.MakeAddToUserAgentHandler(aws.SDKName, aws.SDKVersion, + runtime.Version(), runtime.GOOS, runtime.GOARCH), +} + +const execEnvVar = `AWS_EXECUTION_ENV` +const execEnvUAKey = `exec-env` + +// AddHostExecEnvUserAgentHander is a request handler appending the SDK's +// execution environment to the user agent. +// +// If the environment variable AWS_EXECUTION_ENV is set, its value will be +// appended to the user agent string. +var AddHostExecEnvUserAgentHander = request.NamedHandler{ + Name: "core.AddHostExecEnvUserAgentHander", + Fn: func(r *request.Request) { + v := os.Getenv(execEnvVar) + if len(v) == 0 { + return + } + + request.AddToUserAgent(r, execEnvUAKey+"/"+v) + }, +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go index 115b40739a8..3ad1e798df8 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go @@ -8,8 +8,12 @@ var ( // ErrNoValidProvidersFoundInChain Is returned when there are no valid // providers in the ChainProvider. // - // @readonly - ErrNoValidProvidersFoundInChain = awserr.New("NoCredentialProviders", "no valid providers in chain", nil) + // This has been deprecated. For verbose error messaging set + // aws.Config.CredentialsChainVerboseErrors to true. + ErrNoValidProvidersFoundInChain = awserr.New("NoCredentialProviders", + `no valid providers in chain. Deprecated. + For verbose messaging see aws.Config.CredentialsChainVerboseErrors`, + nil) ) // A ChainProvider will search for a provider which returns credentials @@ -28,25 +32,28 @@ var ( // // Example of ChainProvider to be used with an EnvProvider and EC2RoleProvider. // In this example EnvProvider will first check if any credentials are available -// vai the environment variables. If there are none ChainProvider will check +// via the environment variables. If there are none ChainProvider will check // the next Provider in the list, EC2RoleProvider in this case. If EC2RoleProvider // does not return any credentials ChainProvider will return the error // ErrNoValidProvidersFoundInChain // -// creds := NewChainCredentials( -// []Provider{ -// &EnvProvider{}, -// &EC2RoleProvider{ +// creds := credentials.NewChainCredentials( +// []credentials.Provider{ +// &credentials.EnvProvider{}, +// &ec2rolecreds.EC2RoleProvider{ // Client: ec2metadata.New(sess), // }, // }) // // // Usage of ChainCredentials with aws.Config -// svc := ec2.New(&aws.Config{Credentials: creds}) +// svc := ec2.New(session.Must(session.NewSession(&aws.Config{ +// Credentials: creds, +// }))) // type ChainProvider struct { - Providers []Provider - curr Provider + Providers []Provider + curr Provider + VerboseErrors bool } // NewChainCredentials returns a pointer to a new Credentials object @@ -63,17 +70,23 @@ func NewChainCredentials(providers []Provider) *Credentials { // If a provider is found it will be cached and any calls to IsExpired() // will return the expired state of the cached provider. func (c *ChainProvider) Retrieve() (Value, error) { + var errs []error for _, p := range c.Providers { - if creds, err := p.Retrieve(); err == nil { + creds, err := p.Retrieve() + if err == nil { c.curr = p return creds, nil } + errs = append(errs, err) } c.curr = nil - // TODO better error reporting. maybe report error for each failed retrieve? - - return Value{}, ErrNoValidProvidersFoundInChain + var err error + err = ErrNoValidProvidersFoundInChain + if c.VerboseErrors { + err = awserr.NewBatchError("NoCredentialProviders", "no valid providers in chain", errs) + } + return Value{}, err } // IsExpired will returned the expired state of the currently cached provider diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go index 5dd71f02e80..4af59215814 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go @@ -14,7 +14,7 @@ // // Example of using the environment variable credentials. // -// creds := NewEnvCredentials() +// creds := credentials.NewEnvCredentials() // // // Retrieve the credentials value // credValue, err := creds.Get() @@ -26,7 +26,7 @@ // This may be helpful to proactively expire credentials and refresh them sooner // than they would naturally expire on their own. // -// creds := NewCredentials(&EC2RoleProvider{}) +// creds := credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{}) // creds.Expire() // credsValue, err := creds.Get() // // New credentials will be retrieved instead of from cache. @@ -43,14 +43,17 @@ // func (m *MyProvider) Retrieve() (Value, error) {...} // func (m *MyProvider) IsExpired() bool {...} // -// creds := NewCredentials(&MyProvider{}) +// creds := credentials.NewCredentials(&MyProvider{}) // credValue, err := creds.Get() // package credentials import ( + "fmt" "sync" "time" + + "github.com/aws/aws-sdk-go/aws/awserr" ) // AnonymousCredentials is an empty Credential object that can be used as @@ -60,10 +63,10 @@ import ( // when making service API calls. For example, when accessing public // s3 buckets. // -// svc := s3.New(&aws.Config{Credentials: AnonymousCredentials}) +// svc := s3.New(session.Must(session.NewSession(&aws.Config{ +// Credentials: credentials.AnonymousCredentials, +// }))) // // Access public S3 buckets. -// -// @readonly var AnonymousCredentials = NewStaticCredentials("", "", "") // A Value is the AWS credentials value for individual credential fields. @@ -76,6 +79,15 @@ type Value struct { // AWS Session Token SessionToken string + + // Provider used to get credentials + ProviderName string +} + +// HasKeys returns if the credentials Value has both AccessKeyID and +// SecretAccessKey value set. +func (v Value) HasKeys() bool { + return len(v.AccessKeyID) != 0 && len(v.SecretAccessKey) != 0 } // A Provider is the interface for any component which will provide credentials @@ -85,7 +97,7 @@ type Value struct { // The Provider should not need to implement its own mutexes, because // that will be managed by Credentials. type Provider interface { - // Refresh returns nil if it successfully retrieved the value. + // Retrieve returns nil if it successfully retrieved the value. // Error is returned if the value were not obtainable, or empty. Retrieve() (Value, error) @@ -94,6 +106,35 @@ type Provider interface { IsExpired() bool } +// An Expirer is an interface that Providers can implement to expose the expiration +// time, if known. If the Provider cannot accurately provide this info, +// it should not implement this interface. +type Expirer interface { + // The time at which the credentials are no longer valid + ExpiresAt() time.Time +} + +// An ErrorProvider is a stub credentials provider that always returns an error +// this is used by the SDK when construction a known provider is not possible +// due to an error. +type ErrorProvider struct { + // The error to be returned from Retrieve + Err error + + // The provider name to set on the Retrieved returned Value + ProviderName string +} + +// Retrieve will always return the error that the ErrorProvider was created with. +func (p ErrorProvider) Retrieve() (Value, error) { + return Value{ProviderName: p.ProviderName}, p.Err +} + +// IsExpired will always return not expired. +func (p ErrorProvider) IsExpired() bool { + return false +} + // A Expiry provides shared expiration logic to be used by credentials // providers to implement expiry functionality. // @@ -132,13 +173,19 @@ func (e *Expiry) SetExpiration(expiration time.Time, window time.Duration) { // IsExpired returns if the credentials are expired. func (e *Expiry) IsExpired() bool { - if e.CurrentTime == nil { - e.CurrentTime = time.Now + curTime := e.CurrentTime + if curTime == nil { + curTime = time.Now } - return e.expiration.Before(e.CurrentTime()) + return e.expiration.Before(curTime()) +} + +// ExpiresAt returns the expiration time of the credential +func (e *Expiry) ExpiresAt() time.Time { + return e.expiration } -// A Credentials provides synchronous safe retrieval of AWS credentials Value. +// A Credentials provides concurrency safe retrieval of AWS credentials Value. // Credentials will cache the credentials value until they expire. Once the value // expires the next Get will attempt to retrieve valid credentials. // @@ -152,7 +199,8 @@ func (e *Expiry) IsExpired() bool { type Credentials struct { creds Value forceRefresh bool - m sync.Mutex + + m sync.RWMutex provider Provider } @@ -175,6 +223,17 @@ func NewCredentials(provider Provider) *Credentials { // If Credentials.Expire() was called the credentials Value will be force // expired, and the next call to Get() will cause them to be refreshed. func (c *Credentials) Get() (Value, error) { + // Check the cached credentials first with just the read lock. + c.m.RLock() + if !c.isExpired() { + creds := c.creds + c.m.RUnlock() + return creds, nil + } + c.m.RUnlock() + + // Credentials are expired need to retrieve the credentials taking the full + // lock. c.m.Lock() defer c.m.Unlock() @@ -208,8 +267,8 @@ func (c *Credentials) Expire() { // If the Credentials were forced to be expired with Expire() this will // reflect that override. func (c *Credentials) IsExpired() bool { - c.m.Lock() - defer c.m.Unlock() + c.m.RLock() + defer c.m.RUnlock() return c.isExpired() } @@ -218,3 +277,23 @@ func (c *Credentials) IsExpired() bool { func (c *Credentials) isExpired() bool { return c.forceRefresh || c.provider.IsExpired() } + +// ExpiresAt provides access to the functionality of the Expirer interface of +// the underlying Provider, if it supports that interface. Otherwise, it returns +// an error. +func (c *Credentials) ExpiresAt() (time.Time, error) { + c.m.RLock() + defer c.m.RUnlock() + + expirer, ok := c.provider.(Expirer) + if !ok { + return time.Time{}, awserr.New("ProviderNotExpirer", + fmt.Sprintf("provider %s does not support ExpiresAt()", c.creds.ProviderName), + nil) + } + if c.forceRefresh { + // set expiration time to the distant past + return time.Time{}, nil + } + return expirer.ExpiresAt(), nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go index 04c8921a0eb..43d4ed386ab 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go @@ -4,7 +4,6 @@ import ( "bufio" "encoding/json" "fmt" - "path" "strings" "time" @@ -12,8 +11,13 @@ import ( "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkuri" ) +// ProviderName provides a name of EC2Role provider +const ProviderName = "EC2RoleProvider" + // A EC2RoleProvider retrieves credentials from the EC2 service, and keeps track if // those credentials are expired. // @@ -85,17 +89,17 @@ func NewCredentialsWithClient(client *ec2metadata.EC2Metadata, options ...func(* func (m *EC2RoleProvider) Retrieve() (credentials.Value, error) { credsList, err := requestCredList(m.Client) if err != nil { - return credentials.Value{}, err + return credentials.Value{ProviderName: ProviderName}, err } if len(credsList) == 0 { - return credentials.Value{}, awserr.New("EmptyEC2RoleList", "empty EC2 Role list", nil) + return credentials.Value{ProviderName: ProviderName}, awserr.New("EmptyEC2RoleList", "empty EC2 Role list", nil) } credsName := credsList[0] roleCreds, err := requestCred(m.Client, credsName) if err != nil { - return credentials.Value{}, err + return credentials.Value{ProviderName: ProviderName}, err } m.SetExpiration(roleCreds.Expiration, m.ExpiryWindow) @@ -104,10 +108,11 @@ func (m *EC2RoleProvider) Retrieve() (credentials.Value, error) { AccessKeyID: roleCreds.AccessKeyID, SecretAccessKey: roleCreds.SecretAccessKey, SessionToken: roleCreds.Token, + ProviderName: ProviderName, }, nil } -// A ec2RoleCredRespBody provides the shape for unmarshalling credential +// A ec2RoleCredRespBody provides the shape for unmarshaling credential // request responses. type ec2RoleCredRespBody struct { // Success State @@ -121,14 +126,14 @@ type ec2RoleCredRespBody struct { Message string } -const iamSecurityCredsPath = "/iam/security-credentials" +const iamSecurityCredsPath = "iam/security-credentials/" // requestCredList requests a list of credentials from the EC2 service. // If there are no credentials, or there is an error making or receiving the request func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) { resp, err := client.GetMetadata(iamSecurityCredsPath) if err != nil { - return nil, awserr.New("EC2RoleRequestError", "failed to list EC2 Roles", err) + return nil, awserr.New("EC2RoleRequestError", "no EC2 instance role found", err) } credsList := []string{} @@ -138,7 +143,8 @@ func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) { } if err := s.Err(); err != nil { - return nil, awserr.New("SerializationError", "failed to read list of EC2 Roles", err) + return nil, awserr.New(request.ErrCodeSerialization, + "failed to read EC2 instance role from metadata service", err) } return credsList, nil @@ -149,19 +155,19 @@ func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) { // If the credentials cannot be found, or there is an error reading the response // and error will be returned. func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCredRespBody, error) { - resp, err := client.GetMetadata(path.Join(iamSecurityCredsPath, credsName)) + resp, err := client.GetMetadata(sdkuri.PathJoin(iamSecurityCredsPath, credsName)) if err != nil { return ec2RoleCredRespBody{}, awserr.New("EC2RoleRequestError", - fmt.Sprintf("failed to get %s EC2 Role credentials", credsName), + fmt.Sprintf("failed to get %s EC2 instance role credentials", credsName), err) } respCreds := ec2RoleCredRespBody{} if err := json.NewDecoder(strings.NewReader(resp)).Decode(&respCreds); err != nil { return ec2RoleCredRespBody{}, - awserr.New("SerializationError", - fmt.Sprintf("failed to decode %s EC2 Role credentials", credsName), + awserr.New(request.ErrCodeSerialization, + fmt.Sprintf("failed to decode %s EC2 instance role credentials", credsName), err) } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go new file mode 100644 index 00000000000..1a7af53a4da --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go @@ -0,0 +1,203 @@ +// Package endpointcreds provides support for retrieving credentials from an +// arbitrary HTTP endpoint. +// +// The credentials endpoint Provider can receive both static and refreshable +// credentials that will expire. Credentials are static when an "Expiration" +// value is not provided in the endpoint's response. +// +// Static credentials will never expire once they have been retrieved. The format +// of the static credentials response: +// { +// "AccessKeyId" : "MUA...", +// "SecretAccessKey" : "/7PC5om....", +// } +// +// Refreshable credentials will expire within the "ExpiryWindow" of the Expiration +// value in the response. The format of the refreshable credentials response: +// { +// "AccessKeyId" : "MUA...", +// "SecretAccessKey" : "/7PC5om....", +// "Token" : "AQoDY....=", +// "Expiration" : "2016-02-25T06:03:31Z" +// } +// +// Errors should be returned in the following format and only returned with 400 +// or 500 HTTP status codes. +// { +// "code": "ErrorCode", +// "message": "Helpful error message." +// } +package endpointcreds + +import ( + "encoding/json" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil" +) + +// ProviderName is the name of the credentials provider. +const ProviderName = `CredentialsEndpointProvider` + +// Provider satisfies the credentials.Provider interface, and is a client to +// retrieve credentials from an arbitrary endpoint. +type Provider struct { + staticCreds bool + credentials.Expiry + + // Requires a AWS Client to make HTTP requests to the endpoint with. + // the Endpoint the request will be made to is provided by the aws.Config's + // Endpoint value. + Client *client.Client + + // ExpiryWindow will allow the credentials to trigger refreshing prior to + // the credentials actually expiring. This is beneficial so race conditions + // with expiring credentials do not cause request to fail unexpectedly + // due to ExpiredTokenException exceptions. + // + // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true + // 10 seconds before the credentials are actually expired. + // + // If ExpiryWindow is 0 or less it will be ignored. + ExpiryWindow time.Duration + + // Optional authorization token value if set will be used as the value of + // the Authorization header of the endpoint credential request. + AuthorizationToken string +} + +// NewProviderClient returns a credentials Provider for retrieving AWS credentials +// from arbitrary endpoint. +func NewProviderClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) credentials.Provider { + p := &Provider{ + Client: client.New( + cfg, + metadata.ClientInfo{ + ServiceName: "CredentialsEndpoint", + Endpoint: endpoint, + }, + handlers, + ), + } + + p.Client.Handlers.Unmarshal.PushBack(unmarshalHandler) + p.Client.Handlers.UnmarshalError.PushBack(unmarshalError) + p.Client.Handlers.Validate.Clear() + p.Client.Handlers.Validate.PushBack(validateEndpointHandler) + + for _, option := range options { + option(p) + } + + return p +} + +// NewCredentialsClient returns a pointer to a new Credentials object +// wrapping the endpoint credentials Provider. +func NewCredentialsClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) *credentials.Credentials { + return credentials.NewCredentials(NewProviderClient(cfg, handlers, endpoint, options...)) +} + +// IsExpired returns true if the credentials retrieved are expired, or not yet +// retrieved. +func (p *Provider) IsExpired() bool { + if p.staticCreds { + return false + } + return p.Expiry.IsExpired() +} + +// Retrieve will attempt to request the credentials from the endpoint the Provider +// was configured for. And error will be returned if the retrieval fails. +func (p *Provider) Retrieve() (credentials.Value, error) { + resp, err := p.getCredentials() + if err != nil { + return credentials.Value{ProviderName: ProviderName}, + awserr.New("CredentialsEndpointError", "failed to load credentials", err) + } + + if resp.Expiration != nil { + p.SetExpiration(*resp.Expiration, p.ExpiryWindow) + } else { + p.staticCreds = true + } + + return credentials.Value{ + AccessKeyID: resp.AccessKeyID, + SecretAccessKey: resp.SecretAccessKey, + SessionToken: resp.Token, + ProviderName: ProviderName, + }, nil +} + +type getCredentialsOutput struct { + Expiration *time.Time + AccessKeyID string + SecretAccessKey string + Token string +} + +type errorOutput struct { + Code string `json:"code"` + Message string `json:"message"` +} + +func (p *Provider) getCredentials() (*getCredentialsOutput, error) { + op := &request.Operation{ + Name: "GetCredentials", + HTTPMethod: "GET", + } + + out := &getCredentialsOutput{} + req := p.Client.NewRequest(op, nil, out) + req.HTTPRequest.Header.Set("Accept", "application/json") + if authToken := p.AuthorizationToken; len(authToken) != 0 { + req.HTTPRequest.Header.Set("Authorization", authToken) + } + + return out, req.Send() +} + +func validateEndpointHandler(r *request.Request) { + if len(r.ClientInfo.Endpoint) == 0 { + r.Error = aws.ErrMissingEndpoint + } +} + +func unmarshalHandler(r *request.Request) { + defer r.HTTPResponse.Body.Close() + + out := r.Data.(*getCredentialsOutput) + if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&out); err != nil { + r.Error = awserr.New(request.ErrCodeSerialization, + "failed to decode endpoint credentials", + err, + ) + } +} + +func unmarshalError(r *request.Request) { + defer r.HTTPResponse.Body.Close() + + var errOut errorOutput + err := jsonutil.UnmarshalJSONError(&errOut, r.HTTPResponse.Body) + if err != nil { + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, + "failed to decode error message", err), + r.HTTPResponse.StatusCode, + r.RequestID, + ) + return + } + + // Response body format is not consistent between metadata endpoints. + // Grab the error message as a string and include that as the source error + r.Error = awserr.New(errOut.Code, errOut.Message, nil) +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go index 043e861d6f2..54c5cf7333f 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go @@ -6,17 +6,16 @@ import ( "github.com/aws/aws-sdk-go/aws/awserr" ) +// EnvProviderName provides a name of Env provider +const EnvProviderName = "EnvProvider" + var ( // ErrAccessKeyIDNotFound is returned when the AWS Access Key ID can't be // found in the process's environment. - // - // @readonly ErrAccessKeyIDNotFound = awserr.New("EnvAccessKeyNotFound", "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment", nil) // ErrSecretAccessKeyNotFound is returned when the AWS Secret Access Key // can't be found in the process's environment. - // - // @readonly ErrSecretAccessKeyNotFound = awserr.New("EnvSecretNotFound", "AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment", nil) ) @@ -26,6 +25,7 @@ var ( // Environment variables used: // // * Access Key ID: AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY +// // * Secret Access Key: AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY type EnvProvider struct { retrieved bool @@ -52,11 +52,11 @@ func (e *EnvProvider) Retrieve() (Value, error) { } if id == "" { - return Value{}, ErrAccessKeyIDNotFound + return Value{ProviderName: EnvProviderName}, ErrAccessKeyIDNotFound } if secret == "" { - return Value{}, ErrSecretAccessKeyNotFound + return Value{ProviderName: EnvProviderName}, ErrSecretAccessKeyNotFound } e.retrieved = true @@ -64,6 +64,7 @@ func (e *EnvProvider) Retrieve() (Value, error) { AccessKeyID: id, SecretAccessKey: secret, SessionToken: os.Getenv("AWS_SESSION_TOKEN"), + ProviderName: EnvProviderName, }, nil } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go new file mode 100644 index 00000000000..e6248360029 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go @@ -0,0 +1,426 @@ +/* +Package processcreds is a credential Provider to retrieve `credential_process` +credentials. + +WARNING: The following describes a method of sourcing credentials from an external +process. This can potentially be dangerous, so proceed with caution. Other +credential providers should be preferred if at all possible. If using this +option, you should make sure that the config file is as locked down as possible +using security best practices for your operating system. + +You can use credentials from a `credential_process` in a variety of ways. + +One way is to setup your shared config file, located in the default +location, with the `credential_process` key and the command you want to be +called. You also need to set the AWS_SDK_LOAD_CONFIG environment variable +(e.g., `export AWS_SDK_LOAD_CONFIG=1`) to use the shared config file. + + [default] + credential_process = /command/to/call + +Creating a new session will use the credential process to retrieve credentials. +NOTE: If there are credentials in the profile you are using, the credential +process will not be used. + + // Initialize a session to load credentials. + sess, _ := session.NewSession(&aws.Config{ + Region: aws.String("us-east-1")}, + ) + + // Create S3 service client to use the credentials. + svc := s3.New(sess) + +Another way to use the `credential_process` method is by using +`credentials.NewCredentials()` and providing a command to be executed to +retrieve credentials: + + // Create credentials using the ProcessProvider. + creds := processcreds.NewCredentials("/path/to/command") + + // Create service client value configured for credentials. + svc := s3.New(sess, &aws.Config{Credentials: creds}) + +You can set a non-default timeout for the `credential_process` with another +constructor, `credentials.NewCredentialsTimeout()`, providing the timeout. To +set a one minute timeout: + + // Create credentials using the ProcessProvider. + creds := processcreds.NewCredentialsTimeout( + "/path/to/command", + time.Duration(500) * time.Millisecond) + +If you need more control, you can set any configurable options in the +credentials using one or more option functions. For example, you can set a two +minute timeout, a credential duration of 60 minutes, and a maximum stdout +buffer size of 2k. + + creds := processcreds.NewCredentials( + "/path/to/command", + func(opt *ProcessProvider) { + opt.Timeout = time.Duration(2) * time.Minute + opt.Duration = time.Duration(60) * time.Minute + opt.MaxBufSize = 2048 + }) + +You can also use your own `exec.Cmd`: + + // Create an exec.Cmd + myCommand := exec.Command("/path/to/command") + + // Create credentials using your exec.Cmd and custom timeout + creds := processcreds.NewCredentialsCommand( + myCommand, + func(opt *processcreds.ProcessProvider) { + opt.Timeout = time.Duration(1) * time.Second + }) +*/ +package processcreds + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "runtime" + "strings" + "time" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/internal/sdkio" +) + +const ( + // ProviderName is the name this credentials provider will label any + // returned credentials Value with. + ProviderName = `ProcessProvider` + + // ErrCodeProcessProviderParse error parsing process output + ErrCodeProcessProviderParse = "ProcessProviderParseError" + + // ErrCodeProcessProviderVersion version error in output + ErrCodeProcessProviderVersion = "ProcessProviderVersionError" + + // ErrCodeProcessProviderRequired required attribute missing in output + ErrCodeProcessProviderRequired = "ProcessProviderRequiredError" + + // ErrCodeProcessProviderExecution execution of command failed + ErrCodeProcessProviderExecution = "ProcessProviderExecutionError" + + // errMsgProcessProviderTimeout process took longer than allowed + errMsgProcessProviderTimeout = "credential process timed out" + + // errMsgProcessProviderProcess process error + errMsgProcessProviderProcess = "error in credential_process" + + // errMsgProcessProviderParse problem parsing output + errMsgProcessProviderParse = "parse failed of credential_process output" + + // errMsgProcessProviderVersion version error in output + errMsgProcessProviderVersion = "wrong version in process output (not 1)" + + // errMsgProcessProviderMissKey missing access key id in output + errMsgProcessProviderMissKey = "missing AccessKeyId in process output" + + // errMsgProcessProviderMissSecret missing secret acess key in output + errMsgProcessProviderMissSecret = "missing SecretAccessKey in process output" + + // errMsgProcessProviderPrepareCmd prepare of command failed + errMsgProcessProviderPrepareCmd = "failed to prepare command" + + // errMsgProcessProviderEmptyCmd command must not be empty + errMsgProcessProviderEmptyCmd = "command must not be empty" + + // errMsgProcessProviderPipe failed to initialize pipe + errMsgProcessProviderPipe = "failed to initialize pipe" + + // DefaultDuration is the default amount of time in minutes that the + // credentials will be valid for. + DefaultDuration = time.Duration(15) * time.Minute + + // DefaultBufSize limits buffer size from growing to an enormous + // amount due to a faulty process. + DefaultBufSize = int(8 * sdkio.KibiByte) + + // DefaultTimeout default limit on time a process can run. + DefaultTimeout = time.Duration(1) * time.Minute +) + +// ProcessProvider satisfies the credentials.Provider interface, and is a +// client to retrieve credentials from a process. +type ProcessProvider struct { + staticCreds bool + credentials.Expiry + originalCommand []string + + // Expiry duration of the credentials. Defaults to 15 minutes if not set. + Duration time.Duration + + // ExpiryWindow will allow the credentials to trigger refreshing prior to + // the credentials actually expiring. This is beneficial so race conditions + // with expiring credentials do not cause request to fail unexpectedly + // due to ExpiredTokenException exceptions. + // + // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true + // 10 seconds before the credentials are actually expired. + // + // If ExpiryWindow is 0 or less it will be ignored. + ExpiryWindow time.Duration + + // A string representing an os command that should return a JSON with + // credential information. + command *exec.Cmd + + // MaxBufSize limits memory usage from growing to an enormous + // amount due to a faulty process. + MaxBufSize int + + // Timeout limits the time a process can run. + Timeout time.Duration +} + +// NewCredentials returns a pointer to a new Credentials object wrapping the +// ProcessProvider. The credentials will expire every 15 minutes by default. +func NewCredentials(command string, options ...func(*ProcessProvider)) *credentials.Credentials { + p := &ProcessProvider{ + command: exec.Command(command), + Duration: DefaultDuration, + Timeout: DefaultTimeout, + MaxBufSize: DefaultBufSize, + } + + for _, option := range options { + option(p) + } + + return credentials.NewCredentials(p) +} + +// NewCredentialsTimeout returns a pointer to a new Credentials object with +// the specified command and timeout, and default duration and max buffer size. +func NewCredentialsTimeout(command string, timeout time.Duration) *credentials.Credentials { + p := NewCredentials(command, func(opt *ProcessProvider) { + opt.Timeout = timeout + }) + + return p +} + +// NewCredentialsCommand returns a pointer to a new Credentials object with +// the specified command, and default timeout, duration and max buffer size. +func NewCredentialsCommand(command *exec.Cmd, options ...func(*ProcessProvider)) *credentials.Credentials { + p := &ProcessProvider{ + command: command, + Duration: DefaultDuration, + Timeout: DefaultTimeout, + MaxBufSize: DefaultBufSize, + } + + for _, option := range options { + option(p) + } + + return credentials.NewCredentials(p) +} + +type credentialProcessResponse struct { + Version int + AccessKeyID string `json:"AccessKeyId"` + SecretAccessKey string + SessionToken string + Expiration *time.Time +} + +// Retrieve executes the 'credential_process' and returns the credentials. +func (p *ProcessProvider) Retrieve() (credentials.Value, error) { + out, err := p.executeCredentialProcess() + if err != nil { + return credentials.Value{ProviderName: ProviderName}, err + } + + // Serialize and validate response + resp := &credentialProcessResponse{} + if err = json.Unmarshal(out, resp); err != nil { + return credentials.Value{ProviderName: ProviderName}, awserr.New( + ErrCodeProcessProviderParse, + fmt.Sprintf("%s: %s", errMsgProcessProviderParse, string(out)), + err) + } + + if resp.Version != 1 { + return credentials.Value{ProviderName: ProviderName}, awserr.New( + ErrCodeProcessProviderVersion, + errMsgProcessProviderVersion, + nil) + } + + if len(resp.AccessKeyID) == 0 { + return credentials.Value{ProviderName: ProviderName}, awserr.New( + ErrCodeProcessProviderRequired, + errMsgProcessProviderMissKey, + nil) + } + + if len(resp.SecretAccessKey) == 0 { + return credentials.Value{ProviderName: ProviderName}, awserr.New( + ErrCodeProcessProviderRequired, + errMsgProcessProviderMissSecret, + nil) + } + + // Handle expiration + p.staticCreds = resp.Expiration == nil + if resp.Expiration != nil { + p.SetExpiration(*resp.Expiration, p.ExpiryWindow) + } + + return credentials.Value{ + ProviderName: ProviderName, + AccessKeyID: resp.AccessKeyID, + SecretAccessKey: resp.SecretAccessKey, + SessionToken: resp.SessionToken, + }, nil +} + +// IsExpired returns true if the credentials retrieved are expired, or not yet +// retrieved. +func (p *ProcessProvider) IsExpired() bool { + if p.staticCreds { + return false + } + return p.Expiry.IsExpired() +} + +// prepareCommand prepares the command to be executed. +func (p *ProcessProvider) prepareCommand() error { + + var cmdArgs []string + if runtime.GOOS == "windows" { + cmdArgs = []string{"cmd.exe", "/C"} + } else { + cmdArgs = []string{"sh", "-c"} + } + + if len(p.originalCommand) == 0 { + p.originalCommand = make([]string, len(p.command.Args)) + copy(p.originalCommand, p.command.Args) + + // check for empty command because it succeeds + if len(strings.TrimSpace(p.originalCommand[0])) < 1 { + return awserr.New( + ErrCodeProcessProviderExecution, + fmt.Sprintf( + "%s: %s", + errMsgProcessProviderPrepareCmd, + errMsgProcessProviderEmptyCmd), + nil) + } + } + + cmdArgs = append(cmdArgs, p.originalCommand...) + p.command = exec.Command(cmdArgs[0], cmdArgs[1:]...) + p.command.Env = os.Environ() + + return nil +} + +// executeCredentialProcess starts the credential process on the OS and +// returns the results or an error. +func (p *ProcessProvider) executeCredentialProcess() ([]byte, error) { + + if err := p.prepareCommand(); err != nil { + return nil, err + } + + // Setup the pipes + outReadPipe, outWritePipe, err := os.Pipe() + if err != nil { + return nil, awserr.New( + ErrCodeProcessProviderExecution, + errMsgProcessProviderPipe, + err) + } + + p.command.Stderr = os.Stderr // display stderr on console for MFA + p.command.Stdout = outWritePipe // get creds json on process's stdout + p.command.Stdin = os.Stdin // enable stdin for MFA + + output := bytes.NewBuffer(make([]byte, 0, p.MaxBufSize)) + + stdoutCh := make(chan error, 1) + go readInput( + io.LimitReader(outReadPipe, int64(p.MaxBufSize)), + output, + stdoutCh) + + execCh := make(chan error, 1) + go executeCommand(*p.command, execCh) + + finished := false + var errors []error + for !finished { + select { + case readError := <-stdoutCh: + errors = appendError(errors, readError) + finished = true + case execError := <-execCh: + err := outWritePipe.Close() + errors = appendError(errors, err) + errors = appendError(errors, execError) + if errors != nil { + return output.Bytes(), awserr.NewBatchError( + ErrCodeProcessProviderExecution, + errMsgProcessProviderProcess, + errors) + } + case <-time.After(p.Timeout): + finished = true + return output.Bytes(), awserr.NewBatchError( + ErrCodeProcessProviderExecution, + errMsgProcessProviderTimeout, + errors) // errors can be nil + } + } + + out := output.Bytes() + + if runtime.GOOS == "windows" { + // windows adds slashes to quotes + out = []byte(strings.Replace(string(out), `\"`, `"`, -1)) + } + + return out, nil +} + +// appendError conveniently checks for nil before appending slice +func appendError(errors []error, err error) []error { + if err != nil { + return append(errors, err) + } + return errors +} + +func executeCommand(cmd exec.Cmd, exec chan error) { + // Start the command + err := cmd.Start() + if err == nil { + err = cmd.Wait() + } + + exec <- err +} + +func readInput(r io.Reader, w io.Writer, read chan error) { + tee := io.TeeReader(r, w) + + _, err := ioutil.ReadAll(tee) + + if err == io.EOF { + err = nil + } + + read <- err // will only arrive here when write end of pipe is closed +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go index 09bd00a9506..e1551495812 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go @@ -3,17 +3,17 @@ package credentials import ( "fmt" "os" - "path/filepath" - - "github.com/go-ini/ini" "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/internal/ini" + "github.com/aws/aws-sdk-go/internal/shareddefaults" ) +// SharedCredsProviderName provides a name of SharedCreds provider +const SharedCredsProviderName = "SharedCredentialsProvider" + var ( // ErrSharedCredentialsHomeNotFound is emitted when the user directory cannot be found. - // - // @readonly ErrSharedCredentialsHomeNotFound = awserr.New("UserHomeNotFound", "user home directory not found.", nil) ) @@ -55,12 +55,12 @@ func (p *SharedCredentialsProvider) Retrieve() (Value, error) { filename, err := p.filename() if err != nil { - return Value{}, err + return Value{ProviderName: SharedCredsProviderName}, err } creds, err := loadProfile(filename, p.profile()) if err != nil { - return Value{}, err + return Value{ProviderName: SharedCredsProviderName}, err } p.retrieved = true @@ -76,36 +76,38 @@ func (p *SharedCredentialsProvider) IsExpired() bool { // The credentials retrieved from the profile will be returned or error. Error will be // returned if it fails to read from the file, or the data is invalid. func loadProfile(filename, profile string) (Value, error) { - config, err := ini.Load(filename) + config, err := ini.OpenFile(filename) if err != nil { - return Value{}, awserr.New("SharedCredsLoad", "failed to load shared credentials file", err) + return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to load shared credentials file", err) } - iniProfile, err := config.GetSection(profile) - if err != nil { - return Value{}, awserr.New("SharedCredsLoad", "failed to get profile", err) + + iniProfile, ok := config.GetSection(profile) + if !ok { + return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", nil) } - id, err := iniProfile.GetKey("aws_access_key_id") - if err != nil { - return Value{}, awserr.New("SharedCredsAccessKey", + id := iniProfile.String("aws_access_key_id") + if len(id) == 0 { + return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsAccessKey", fmt.Sprintf("shared credentials %s in %s did not contain aws_access_key_id", profile, filename), - err) + nil) } - secret, err := iniProfile.GetKey("aws_secret_access_key") - if err != nil { - return Value{}, awserr.New("SharedCredsSecret", + secret := iniProfile.String("aws_secret_access_key") + if len(secret) == 0 { + return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsSecret", fmt.Sprintf("shared credentials %s in %s did not contain aws_secret_access_key", profile, filename), nil) } // Default to empty string if not found - token := iniProfile.Key("aws_session_token") + token := iniProfile.String("aws_session_token") return Value{ - AccessKeyID: id.String(), - SecretAccessKey: secret.String(), - SessionToken: token.String(), + AccessKeyID: id, + SecretAccessKey: secret, + SessionToken: token, + ProviderName: SharedCredsProviderName, }, nil } @@ -113,22 +115,23 @@ func loadProfile(filename, profile string) (Value, error) { // // Will return an error if the user's home directory path cannot be found. func (p *SharedCredentialsProvider) filename() (string, error) { - if p.Filename == "" { - if p.Filename = os.Getenv("AWS_SHARED_CREDENTIALS_FILE"); p.Filename != "" { - return p.Filename, nil - } - - homeDir := os.Getenv("HOME") // *nix - if homeDir == "" { // Windows - homeDir = os.Getenv("USERPROFILE") - } - if homeDir == "" { - return "", ErrSharedCredentialsHomeNotFound - } - - p.Filename = filepath.Join(homeDir, ".aws", "credentials") + if len(p.Filename) != 0 { + return p.Filename, nil + } + + if p.Filename = os.Getenv("AWS_SHARED_CREDENTIALS_FILE"); len(p.Filename) != 0 { + return p.Filename, nil } + if home := shareddefaults.UserHomeDir(); len(home) == 0 { + // Backwards compatibility of home directly not found error being returned. + // This error is too verbose, failure when opening the file would of been + // a better error to return. + return "", ErrSharedCredentialsHomeNotFound + } + + p.Filename = shareddefaults.SharedCredentialsFilename() + return p.Filename, nil } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go index 530a9ac2f36..531139e3971 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go @@ -4,14 +4,15 @@ import ( "github.com/aws/aws-sdk-go/aws/awserr" ) +// StaticProviderName provides a name of Static provider +const StaticProviderName = "StaticProvider" + var ( // ErrStaticCredentialsEmpty is emitted when static credentials are empty. - // - // @readonly ErrStaticCredentialsEmpty = awserr.New("EmptyStaticCreds", "static credentials are empty", nil) ) -// A StaticProvider is a set of credentials which are set pragmatically, +// A StaticProvider is a set of credentials which are set programmatically, // and will never expire. type StaticProvider struct { Value @@ -27,12 +28,22 @@ func NewStaticCredentials(id, secret, token string) *Credentials { }}) } +// NewStaticCredentialsFromCreds returns a pointer to a new Credentials object +// wrapping the static credentials value provide. Same as NewStaticCredentials +// but takes the creds Value instead of individual fields +func NewStaticCredentialsFromCreds(creds Value) *Credentials { + return NewCredentials(&StaticProvider{Value: creds}) +} + // Retrieve returns the credentials or error if the credentials are invalid. func (s *StaticProvider) Retrieve() (Value, error) { if s.AccessKeyID == "" || s.SecretAccessKey == "" { - return Value{}, ErrStaticCredentialsEmpty + return Value{ProviderName: StaticProviderName}, ErrStaticCredentialsEmpty } + if len(s.Value.ProviderName) == 0 { + s.Value.ProviderName = StaticProviderName + } return s.Value, nil } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go new file mode 100644 index 00000000000..2e528d130d4 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go @@ -0,0 +1,312 @@ +/* +Package stscreds are credential Providers to retrieve STS AWS credentials. + +STS provides multiple ways to retrieve credentials which can be used when making +future AWS service API operation calls. + +The SDK will ensure that per instance of credentials.Credentials all requests +to refresh the credentials will be synchronized. But, the SDK is unable to +ensure synchronous usage of the AssumeRoleProvider if the value is shared +between multiple Credentials, Sessions or service clients. + +Assume Role + +To assume an IAM role using STS with the SDK you can create a new Credentials +with the SDKs's stscreds package. + + // Initial credentials loaded from SDK's default credential chain. Such as + // the environment, shared credentials (~/.aws/credentials), or EC2 Instance + // Role. These credentials will be used to to make the STS Assume Role API. + sess := session.Must(session.NewSession()) + + // Create the credentials from AssumeRoleProvider to assume the role + // referenced by the "myRoleARN" ARN. + creds := stscreds.NewCredentials(sess, "myRoleArn") + + // Create service client value configured for credentials + // from assumed role. + svc := s3.New(sess, &aws.Config{Credentials: creds}) + +Assume Role with static MFA Token + +To assume an IAM role with a MFA token you can either specify a MFA token code +directly or provide a function to prompt the user each time the credentials +need to refresh the role's credentials. Specifying the TokenCode should be used +for short lived operations that will not need to be refreshed, and when you do +not want to have direct control over the user provides their MFA token. + +With TokenCode the AssumeRoleProvider will be not be able to refresh the role's +credentials. + + // Create the credentials from AssumeRoleProvider to assume the role + // referenced by the "myRoleARN" ARN using the MFA token code provided. + creds := stscreds.NewCredentials(sess, "myRoleArn", func(p *stscreds.AssumeRoleProvider) { + p.SerialNumber = aws.String("myTokenSerialNumber") + p.TokenCode = aws.String("00000000") + }) + + // Create service client value configured for credentials + // from assumed role. + svc := s3.New(sess, &aws.Config{Credentials: creds}) + +Assume Role with MFA Token Provider + +To assume an IAM role with MFA for longer running tasks where the credentials +may need to be refreshed setting the TokenProvider field of AssumeRoleProvider +will allow the credential provider to prompt for new MFA token code when the +role's credentials need to be refreshed. + +The StdinTokenProvider function is available to prompt on stdin to retrieve +the MFA token code from the user. You can also implement custom prompts by +satisfing the TokenProvider function signature. + +Using StdinTokenProvider with multiple AssumeRoleProviders, or Credentials will +have undesirable results as the StdinTokenProvider will not be synchronized. A +single Credentials with an AssumeRoleProvider can be shared safely. + + // Create the credentials from AssumeRoleProvider to assume the role + // referenced by the "myRoleARN" ARN. Prompting for MFA token from stdin. + creds := stscreds.NewCredentials(sess, "myRoleArn", func(p *stscreds.AssumeRoleProvider) { + p.SerialNumber = aws.String("myTokenSerialNumber") + p.TokenProvider = stscreds.StdinTokenProvider + }) + + // Create service client value configured for credentials + // from assumed role. + svc := s3.New(sess, &aws.Config{Credentials: creds}) + +*/ +package stscreds + +import ( + "fmt" + "os" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/internal/sdkrand" + "github.com/aws/aws-sdk-go/service/sts" +) + +// StdinTokenProvider will prompt on stderr and read from stdin for a string value. +// An error is returned if reading from stdin fails. +// +// Use this function go read MFA tokens from stdin. The function makes no attempt +// to make atomic prompts from stdin across multiple gorouties. +// +// Using StdinTokenProvider with multiple AssumeRoleProviders, or Credentials will +// have undesirable results as the StdinTokenProvider will not be synchronized. A +// single Credentials with an AssumeRoleProvider can be shared safely +// +// Will wait forever until something is provided on the stdin. +func StdinTokenProvider() (string, error) { + var v string + fmt.Fprintf(os.Stderr, "Assume Role MFA token code: ") + _, err := fmt.Scanln(&v) + + return v, err +} + +// ProviderName provides a name of AssumeRole provider +const ProviderName = "AssumeRoleProvider" + +// AssumeRoler represents the minimal subset of the STS client API used by this provider. +type AssumeRoler interface { + AssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) +} + +// DefaultDuration is the default amount of time in minutes that the credentials +// will be valid for. +var DefaultDuration = time.Duration(15) * time.Minute + +// AssumeRoleProvider retrieves temporary credentials from the STS service, and +// keeps track of their expiration time. +// +// This credential provider will be used by the SDKs default credential change +// when shared configuration is enabled, and the shared config or shared credentials +// file configure assume role. See Session docs for how to do this. +// +// AssumeRoleProvider does not provide any synchronization and it is not safe +// to share this value across multiple Credentials, Sessions, or service clients +// without also sharing the same Credentials instance. +type AssumeRoleProvider struct { + credentials.Expiry + + // STS client to make assume role request with. + Client AssumeRoler + + // Role to be assumed. + RoleARN string + + // Session name, if you wish to reuse the credentials elsewhere. + RoleSessionName string + + // Expiry duration of the STS credentials. Defaults to 15 minutes if not set. + Duration time.Duration + + // Optional ExternalID to pass along, defaults to nil if not set. + ExternalID *string + + // The policy plain text must be 2048 bytes or shorter. However, an internal + // conversion compresses it into a packed binary format with a separate limit. + // The PackedPolicySize response element indicates by percentage how close to + // the upper size limit the policy is, with 100% equaling the maximum allowed + // size. + Policy *string + + // The identification number of the MFA device that is associated with the user + // who is making the AssumeRole call. Specify this value if the trust policy + // of the role being assumed includes a condition that requires MFA authentication. + // The value is either the serial number for a hardware device (such as GAHT12345678) + // or an Amazon Resource Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user). + SerialNumber *string + + // The value provided by the MFA device, if the trust policy of the role being + // assumed requires MFA (that is, if the policy includes a condition that tests + // for MFA). If the role being assumed requires MFA and if the TokenCode value + // is missing or expired, the AssumeRole call returns an "access denied" error. + // + // If SerialNumber is set and neither TokenCode nor TokenProvider are also + // set an error will be returned. + TokenCode *string + + // Async method of providing MFA token code for assuming an IAM role with MFA. + // The value returned by the function will be used as the TokenCode in the Retrieve + // call. See StdinTokenProvider for a provider that prompts and reads from stdin. + // + // This token provider will be called when ever the assumed role's + // credentials need to be refreshed when SerialNumber is also set and + // TokenCode is not set. + // + // If both TokenCode and TokenProvider is set, TokenProvider will be used and + // TokenCode is ignored. + TokenProvider func() (string, error) + + // ExpiryWindow will allow the credentials to trigger refreshing prior to + // the credentials actually expiring. This is beneficial so race conditions + // with expiring credentials do not cause request to fail unexpectedly + // due to ExpiredTokenException exceptions. + // + // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true + // 10 seconds before the credentials are actually expired. + // + // If ExpiryWindow is 0 or less it will be ignored. + ExpiryWindow time.Duration + + // MaxJitterFrac reduces the effective Duration of each credential requested + // by a random percentage between 0 and MaxJitterFraction. MaxJitterFrac must + // have a value between 0 and 1. Any other value may lead to expected behavior. + // With a MaxJitterFrac value of 0, default) will no jitter will be used. + // + // For example, with a Duration of 30m and a MaxJitterFrac of 0.1, the + // AssumeRole call will be made with an arbitrary Duration between 27m and + // 30m. + // + // MaxJitterFrac should not be negative. + MaxJitterFrac float64 +} + +// NewCredentials returns a pointer to a new Credentials object wrapping the +// AssumeRoleProvider. The credentials will expire every 15 minutes and the +// role will be named after a nanosecond timestamp of this operation. +// +// Takes a Config provider to create the STS client. The ConfigProvider is +// satisfied by the session.Session type. +// +// It is safe to share the returned Credentials with multiple Sessions and +// service clients. All access to the credentials and refreshing them +// will be synchronized. +func NewCredentials(c client.ConfigProvider, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials { + p := &AssumeRoleProvider{ + Client: sts.New(c), + RoleARN: roleARN, + Duration: DefaultDuration, + } + + for _, option := range options { + option(p) + } + + return credentials.NewCredentials(p) +} + +// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping the +// AssumeRoleProvider. The credentials will expire every 15 minutes and the +// role will be named after a nanosecond timestamp of this operation. +// +// Takes an AssumeRoler which can be satisfied by the STS client. +// +// It is safe to share the returned Credentials with multiple Sessions and +// service clients. All access to the credentials and refreshing them +// will be synchronized. +func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials { + p := &AssumeRoleProvider{ + Client: svc, + RoleARN: roleARN, + Duration: DefaultDuration, + } + + for _, option := range options { + option(p) + } + + return credentials.NewCredentials(p) +} + +// Retrieve generates a new set of temporary credentials using STS. +func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) { + // Apply defaults where parameters are not set. + if p.RoleSessionName == "" { + // Try to work out a role name that will hopefully end up unique. + p.RoleSessionName = fmt.Sprintf("%d", time.Now().UTC().UnixNano()) + } + if p.Duration == 0 { + // Expire as often as AWS permits. + p.Duration = DefaultDuration + } + jitter := time.Duration(sdkrand.SeededRand.Float64() * p.MaxJitterFrac * float64(p.Duration)) + input := &sts.AssumeRoleInput{ + DurationSeconds: aws.Int64(int64((p.Duration - jitter) / time.Second)), + RoleArn: aws.String(p.RoleARN), + RoleSessionName: aws.String(p.RoleSessionName), + ExternalId: p.ExternalID, + } + if p.Policy != nil { + input.Policy = p.Policy + } + if p.SerialNumber != nil { + if p.TokenCode != nil { + input.SerialNumber = p.SerialNumber + input.TokenCode = p.TokenCode + } else if p.TokenProvider != nil { + input.SerialNumber = p.SerialNumber + code, err := p.TokenProvider() + if err != nil { + return credentials.Value{ProviderName: ProviderName}, err + } + input.TokenCode = aws.String(code) + } else { + return credentials.Value{ProviderName: ProviderName}, + awserr.New("AssumeRoleTokenNotAvailable", + "assume role with MFA enabled, but neither TokenCode nor TokenProvider are set", nil) + } + } + + roleOutput, err := p.Client.AssumeRole(input) + if err != nil { + return credentials.Value{ProviderName: ProviderName}, err + } + + // We will proactively generate new credentials before they expire. + p.SetExpiration(*roleOutput.Credentials.Expiration, p.ExpiryWindow) + + return credentials.Value{ + AccessKeyID: *roleOutput.Credentials.AccessKeyId, + SecretAccessKey: *roleOutput.Credentials.SecretAccessKey, + SessionToken: *roleOutput.Credentials.SessionToken, + ProviderName: ProviderName, + }, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go new file mode 100644 index 00000000000..b20b6339484 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go @@ -0,0 +1,100 @@ +package stscreds + +import ( + "fmt" + "io/ioutil" + "strconv" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/service/sts" + "github.com/aws/aws-sdk-go/service/sts/stsiface" +) + +const ( + // ErrCodeWebIdentity will be used as an error code when constructing + // a new error to be returned during session creation or retrieval. + ErrCodeWebIdentity = "WebIdentityErr" + + // WebIdentityProviderName is the web identity provider name + WebIdentityProviderName = "WebIdentityCredentials" +) + +// now is used to return a time.Time object representing +// the current time. This can be used to easily test and +// compare test values. +var now = time.Now + +// WebIdentityRoleProvider is used to retrieve credentials using +// an OIDC token. +type WebIdentityRoleProvider struct { + credentials.Expiry + + client stsiface.STSAPI + ExpiryWindow time.Duration + + tokenFilePath string + roleARN string + roleSessionName string +} + +// NewWebIdentityCredentials will return a new set of credentials with a given +// configuration, role arn, and token file path. +func NewWebIdentityCredentials(c client.ConfigProvider, roleARN, roleSessionName, path string) *credentials.Credentials { + svc := sts.New(c) + p := NewWebIdentityRoleProvider(svc, roleARN, roleSessionName, path) + return credentials.NewCredentials(p) +} + +// NewWebIdentityRoleProvider will return a new WebIdentityRoleProvider with the +// provided stsiface.STSAPI +func NewWebIdentityRoleProvider(svc stsiface.STSAPI, roleARN, roleSessionName, path string) *WebIdentityRoleProvider { + return &WebIdentityRoleProvider{ + client: svc, + tokenFilePath: path, + roleARN: roleARN, + roleSessionName: roleSessionName, + } +} + +// Retrieve will attempt to assume a role from a token which is located at +// 'WebIdentityTokenFilePath' specified destination and if that is empty an +// error will be returned. +func (p *WebIdentityRoleProvider) Retrieve() (credentials.Value, error) { + b, err := ioutil.ReadFile(p.tokenFilePath) + if err != nil { + errMsg := fmt.Sprintf("unable to read file at %s", p.tokenFilePath) + return credentials.Value{}, awserr.New(ErrCodeWebIdentity, errMsg, err) + } + + sessionName := p.roleSessionName + if len(sessionName) == 0 { + // session name is used to uniquely identify a session. This simply + // uses unix time in nanoseconds to uniquely identify sessions. + sessionName = strconv.FormatInt(now().UnixNano(), 10) + } + req, resp := p.client.AssumeRoleWithWebIdentityRequest(&sts.AssumeRoleWithWebIdentityInput{ + RoleArn: &p.roleARN, + RoleSessionName: &sessionName, + WebIdentityToken: aws.String(string(b)), + }) + // InvalidIdentityToken error is a temporary error that can occur + // when assuming an Role with a JWT web identity token. + req.RetryErrorCodes = append(req.RetryErrorCodes, sts.ErrCodeInvalidIdentityTokenException) + if err := req.Send(); err != nil { + return credentials.Value{}, awserr.New(ErrCodeWebIdentity, "failed to retrieve credentials", err) + } + + p.SetExpiration(aws.TimeValue(resp.Credentials.Expiration), p.ExpiryWindow) + + value := credentials.Value{ + AccessKeyID: aws.StringValue(resp.Credentials.AccessKeyId), + SecretAccessKey: aws.StringValue(resp.Credentials.SecretAccessKey), + SessionToken: aws.StringValue(resp.Credentials.SessionToken), + ProviderName: WebIdentityProviderName, + } + return value, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go b/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go new file mode 100644 index 00000000000..25a66d1dda2 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go @@ -0,0 +1,69 @@ +// Package csm provides the Client Side Monitoring (CSM) client which enables +// sending metrics via UDP connection to the CSM agent. This package provides +// control options, and configuration for the CSM client. The client can be +// controlled manually, or automatically via the SDK's Session configuration. +// +// Enabling CSM client via SDK's Session configuration +// +// The CSM client can be enabled automatically via SDK's Session configuration. +// The SDK's session configuration enables the CSM client if the AWS_CSM_PORT +// environment variable is set to a non-empty value. +// +// The configuration options for the CSM client via the SDK's session +// configuration are: +// +// * AWS_CSM_PORT= +// The port number the CSM agent will receive metrics on. +// +// * AWS_CSM_HOST= +// The hostname, or IP address the CSM agent will receive metrics on. +// Without port number. +// +// Manually enabling the CSM client +// +// The CSM client can be started, paused, and resumed manually. The Start +// function will enable the CSM client to publish metrics to the CSM agent. It +// is safe to call Start concurrently, but if Start is called additional times +// with different ClientID or address it will panic. +// +// r, err := csm.Start("clientID", ":31000") +// if err != nil { +// panic(fmt.Errorf("failed starting CSM: %v", err)) +// } +// +// When controlling the CSM client manually, you must also inject its request +// handlers into the SDK's Session configuration for the SDK's API clients to +// publish metrics. +// +// sess, err := session.NewSession(&aws.Config{}) +// if err != nil { +// panic(fmt.Errorf("failed loading session: %v", err)) +// } +// +// // Add CSM client's metric publishing request handlers to the SDK's +// // Session Configuration. +// r.InjectHandlers(&sess.Handlers) +// +// Controlling CSM client +// +// Once the CSM client has been enabled the Get function will return a Reporter +// value that you can use to pause and resume the metrics published to the CSM +// agent. If Get function is called before the reporter is enabled with the +// Start function or via SDK's Session configuration nil will be returned. +// +// The Pause method can be called to stop the CSM client publishing metrics to +// the CSM agent. The Continue method will resume metric publishing. +// +// // Get the CSM client Reporter. +// r := csm.Get() +// +// // Will pause monitoring +// r.Pause() +// resp, err = client.GetObject(&s3.GetObjectInput{ +// Bucket: aws.String("bucket"), +// Key: aws.String("key"), +// }) +// +// // Resume monitoring +// r.Continue() +package csm diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go b/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go new file mode 100644 index 00000000000..4b19e2800e3 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go @@ -0,0 +1,89 @@ +package csm + +import ( + "fmt" + "strings" + "sync" +) + +var ( + lock sync.Mutex +) + +const ( + // DefaultPort is used when no port is specified. + DefaultPort = "31000" + + // DefaultHost is the host that will be used when none is specified. + DefaultHost = "127.0.0.1" +) + +// AddressWithDefaults returns a CSM address built from the host and port +// values. If the host or port is not set, default values will be used +// instead. If host is "localhost" it will be replaced with "127.0.0.1". +func AddressWithDefaults(host, port string) string { + if len(host) == 0 || strings.EqualFold(host, "localhost") { + host = DefaultHost + } + + if len(port) == 0 { + port = DefaultPort + } + + // Only IP6 host can contain a colon + if strings.Contains(host, ":") { + return "[" + host + "]:" + port + } + + return host + ":" + port +} + +// Start will start a long running go routine to capture +// client side metrics. Calling start multiple time will only +// start the metric listener once and will panic if a different +// client ID or port is passed in. +// +// r, err := csm.Start("clientID", "127.0.0.1:31000") +// if err != nil { +// panic(fmt.Errorf("expected no error, but received %v", err)) +// } +// sess := session.NewSession() +// r.InjectHandlers(sess.Handlers) +// +// svc := s3.New(sess) +// out, err := svc.GetObject(&s3.GetObjectInput{ +// Bucket: aws.String("bucket"), +// Key: aws.String("key"), +// }) +func Start(clientID string, url string) (*Reporter, error) { + lock.Lock() + defer lock.Unlock() + + if sender == nil { + sender = newReporter(clientID, url) + } else { + if sender.clientID != clientID { + panic(fmt.Errorf("inconsistent client IDs. %q was expected, but received %q", sender.clientID, clientID)) + } + + if sender.url != url { + panic(fmt.Errorf("inconsistent URLs. %q was expected, but received %q", sender.url, url)) + } + } + + if err := connect(url); err != nil { + sender = nil + return nil, err + } + + return sender, nil +} + +// Get will return a reporter if one exists, if one does not exist, nil will +// be returned. +func Get() *Reporter { + lock.Lock() + defer lock.Unlock() + + return sender +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go b/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go new file mode 100644 index 00000000000..5bacc791a1e --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go @@ -0,0 +1,109 @@ +package csm + +import ( + "strconv" + "time" + + "github.com/aws/aws-sdk-go/aws" +) + +type metricTime time.Time + +func (t metricTime) MarshalJSON() ([]byte, error) { + ns := time.Duration(time.Time(t).UnixNano()) + return []byte(strconv.FormatInt(int64(ns/time.Millisecond), 10)), nil +} + +type metric struct { + ClientID *string `json:"ClientId,omitempty"` + API *string `json:"Api,omitempty"` + Service *string `json:"Service,omitempty"` + Timestamp *metricTime `json:"Timestamp,omitempty"` + Type *string `json:"Type,omitempty"` + Version *int `json:"Version,omitempty"` + + AttemptCount *int `json:"AttemptCount,omitempty"` + Latency *int `json:"Latency,omitempty"` + + Fqdn *string `json:"Fqdn,omitempty"` + UserAgent *string `json:"UserAgent,omitempty"` + AttemptLatency *int `json:"AttemptLatency,omitempty"` + + SessionToken *string `json:"SessionToken,omitempty"` + Region *string `json:"Region,omitempty"` + AccessKey *string `json:"AccessKey,omitempty"` + HTTPStatusCode *int `json:"HttpStatusCode,omitempty"` + XAmzID2 *string `json:"XAmzId2,omitempty"` + XAmzRequestID *string `json:"XAmznRequestId,omitempty"` + + AWSException *string `json:"AwsException,omitempty"` + AWSExceptionMessage *string `json:"AwsExceptionMessage,omitempty"` + SDKException *string `json:"SdkException,omitempty"` + SDKExceptionMessage *string `json:"SdkExceptionMessage,omitempty"` + + FinalHTTPStatusCode *int `json:"FinalHttpStatusCode,omitempty"` + FinalAWSException *string `json:"FinalAwsException,omitempty"` + FinalAWSExceptionMessage *string `json:"FinalAwsExceptionMessage,omitempty"` + FinalSDKException *string `json:"FinalSdkException,omitempty"` + FinalSDKExceptionMessage *string `json:"FinalSdkExceptionMessage,omitempty"` + + DestinationIP *string `json:"DestinationIp,omitempty"` + ConnectionReused *int `json:"ConnectionReused,omitempty"` + + AcquireConnectionLatency *int `json:"AcquireConnectionLatency,omitempty"` + ConnectLatency *int `json:"ConnectLatency,omitempty"` + RequestLatency *int `json:"RequestLatency,omitempty"` + DNSLatency *int `json:"DnsLatency,omitempty"` + TCPLatency *int `json:"TcpLatency,omitempty"` + SSLLatency *int `json:"SslLatency,omitempty"` + + MaxRetriesExceeded *int `json:"MaxRetriesExceeded,omitempty"` +} + +func (m *metric) TruncateFields() { + m.ClientID = truncateString(m.ClientID, 255) + m.UserAgent = truncateString(m.UserAgent, 256) + + m.AWSException = truncateString(m.AWSException, 128) + m.AWSExceptionMessage = truncateString(m.AWSExceptionMessage, 512) + + m.SDKException = truncateString(m.SDKException, 128) + m.SDKExceptionMessage = truncateString(m.SDKExceptionMessage, 512) + + m.FinalAWSException = truncateString(m.FinalAWSException, 128) + m.FinalAWSExceptionMessage = truncateString(m.FinalAWSExceptionMessage, 512) + + m.FinalSDKException = truncateString(m.FinalSDKException, 128) + m.FinalSDKExceptionMessage = truncateString(m.FinalSDKExceptionMessage, 512) +} + +func truncateString(v *string, l int) *string { + if v != nil && len(*v) > l { + nv := (*v)[:l] + return &nv + } + + return v +} + +func (m *metric) SetException(e metricException) { + switch te := e.(type) { + case awsException: + m.AWSException = aws.String(te.exception) + m.AWSExceptionMessage = aws.String(te.message) + case sdkException: + m.SDKException = aws.String(te.exception) + m.SDKExceptionMessage = aws.String(te.message) + } +} + +func (m *metric) SetFinalException(e metricException) { + switch te := e.(type) { + case awsException: + m.FinalAWSException = aws.String(te.exception) + m.FinalAWSExceptionMessage = aws.String(te.message) + case sdkException: + m.FinalSDKException = aws.String(te.exception) + m.FinalSDKExceptionMessage = aws.String(te.message) + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go b/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go new file mode 100644 index 00000000000..82a3e345e93 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go @@ -0,0 +1,55 @@ +package csm + +import ( + "sync/atomic" +) + +const ( + runningEnum = iota + pausedEnum +) + +var ( + // MetricsChannelSize of metrics to hold in the channel + MetricsChannelSize = 100 +) + +type metricChan struct { + ch chan metric + paused *int64 +} + +func newMetricChan(size int) metricChan { + return metricChan{ + ch: make(chan metric, size), + paused: new(int64), + } +} + +func (ch *metricChan) Pause() { + atomic.StoreInt64(ch.paused, pausedEnum) +} + +func (ch *metricChan) Continue() { + atomic.StoreInt64(ch.paused, runningEnum) +} + +func (ch *metricChan) IsPaused() bool { + v := atomic.LoadInt64(ch.paused) + return v == pausedEnum +} + +// Push will push metrics to the metric channel if the channel +// is not paused +func (ch *metricChan) Push(m metric) bool { + if ch.IsPaused() { + return false + } + + select { + case ch.ch <- m: + return true + default: + return false + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go b/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go new file mode 100644 index 00000000000..54a99280ce9 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go @@ -0,0 +1,26 @@ +package csm + +type metricException interface { + Exception() string + Message() string +} + +type requestException struct { + exception string + message string +} + +func (e requestException) Exception() string { + return e.exception +} +func (e requestException) Message() string { + return e.message +} + +type awsException struct { + requestException +} + +type sdkException struct { + requestException +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go b/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go new file mode 100644 index 00000000000..9186587fc04 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go @@ -0,0 +1,264 @@ +package csm + +import ( + "encoding/json" + "net" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/request" +) + +// Reporter will gather metrics of API requests made and +// send those metrics to the CSM endpoint. +type Reporter struct { + clientID string + url string + conn net.Conn + metricsCh metricChan + done chan struct{} +} + +var ( + sender *Reporter +) + +func connect(url string) error { + const network = "udp" + if err := sender.connect(network, url); err != nil { + return err + } + + if sender.done == nil { + sender.done = make(chan struct{}) + go sender.start() + } + + return nil +} + +func newReporter(clientID, url string) *Reporter { + return &Reporter{ + clientID: clientID, + url: url, + metricsCh: newMetricChan(MetricsChannelSize), + } +} + +func (rep *Reporter) sendAPICallAttemptMetric(r *request.Request) { + if rep == nil { + return + } + + now := time.Now() + creds, _ := r.Config.Credentials.Get() + + m := metric{ + ClientID: aws.String(rep.clientID), + API: aws.String(r.Operation.Name), + Service: aws.String(r.ClientInfo.ServiceID), + Timestamp: (*metricTime)(&now), + UserAgent: aws.String(r.HTTPRequest.Header.Get("User-Agent")), + Region: r.Config.Region, + Type: aws.String("ApiCallAttempt"), + Version: aws.Int(1), + + XAmzRequestID: aws.String(r.RequestID), + + AttemptLatency: aws.Int(int(now.Sub(r.AttemptTime).Nanoseconds() / int64(time.Millisecond))), + AccessKey: aws.String(creds.AccessKeyID), + } + + if r.HTTPResponse != nil { + m.HTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode) + } + + if r.Error != nil { + if awserr, ok := r.Error.(awserr.Error); ok { + m.SetException(getMetricException(awserr)) + } + } + + m.TruncateFields() + rep.metricsCh.Push(m) +} + +func getMetricException(err awserr.Error) metricException { + msg := err.Error() + code := err.Code() + + switch code { + case "RequestError", + request.ErrCodeSerialization, + request.CanceledErrorCode: + return sdkException{ + requestException{exception: code, message: msg}, + } + default: + return awsException{ + requestException{exception: code, message: msg}, + } + } +} + +func (rep *Reporter) sendAPICallMetric(r *request.Request) { + if rep == nil { + return + } + + now := time.Now() + m := metric{ + ClientID: aws.String(rep.clientID), + API: aws.String(r.Operation.Name), + Service: aws.String(r.ClientInfo.ServiceID), + Timestamp: (*metricTime)(&now), + UserAgent: aws.String(r.HTTPRequest.Header.Get("User-Agent")), + Type: aws.String("ApiCall"), + AttemptCount: aws.Int(r.RetryCount + 1), + Region: r.Config.Region, + Latency: aws.Int(int(time.Since(r.Time) / time.Millisecond)), + XAmzRequestID: aws.String(r.RequestID), + MaxRetriesExceeded: aws.Int(boolIntValue(r.RetryCount >= r.MaxRetries())), + } + + if r.HTTPResponse != nil { + m.FinalHTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode) + } + + if r.Error != nil { + if awserr, ok := r.Error.(awserr.Error); ok { + m.SetFinalException(getMetricException(awserr)) + } + } + + m.TruncateFields() + + // TODO: Probably want to figure something out for logging dropped + // metrics + rep.metricsCh.Push(m) +} + +func (rep *Reporter) connect(network, url string) error { + if rep.conn != nil { + rep.conn.Close() + } + + conn, err := net.Dial(network, url) + if err != nil { + return awserr.New("UDPError", "Could not connect", err) + } + + rep.conn = conn + + return nil +} + +func (rep *Reporter) close() { + if rep.done != nil { + close(rep.done) + } + + rep.metricsCh.Pause() +} + +func (rep *Reporter) start() { + defer func() { + rep.metricsCh.Pause() + }() + + for { + select { + case <-rep.done: + rep.done = nil + return + case m := <-rep.metricsCh.ch: + // TODO: What to do with this error? Probably should just log + b, err := json.Marshal(m) + if err != nil { + continue + } + + rep.conn.Write(b) + } + } +} + +// Pause will pause the metric channel preventing any new metrics from being +// added. It is safe to call concurrently with other calls to Pause, but if +// called concurently with Continue can lead to unexpected state. +func (rep *Reporter) Pause() { + lock.Lock() + defer lock.Unlock() + + if rep == nil { + return + } + + rep.close() +} + +// Continue will reopen the metric channel and allow for monitoring to be +// resumed. It is safe to call concurrently with other calls to Continue, but +// if called concurently with Pause can lead to unexpected state. +func (rep *Reporter) Continue() { + lock.Lock() + defer lock.Unlock() + if rep == nil { + return + } + + if !rep.metricsCh.IsPaused() { + return + } + + rep.metricsCh.Continue() +} + +// Client side metric handler names +const ( + APICallMetricHandlerName = "awscsm.SendAPICallMetric" + APICallAttemptMetricHandlerName = "awscsm.SendAPICallAttemptMetric" +) + +// InjectHandlers will will enable client side metrics and inject the proper +// handlers to handle how metrics are sent. +// +// InjectHandlers is NOT safe to call concurrently. Calling InjectHandlers +// multiple times may lead to unexpected behavior, (e.g. duplicate metrics). +// +// // Start must be called in order to inject the correct handlers +// r, err := csm.Start("clientID", "127.0.0.1:8094") +// if err != nil { +// panic(fmt.Errorf("expected no error, but received %v", err)) +// } +// +// sess := session.NewSession() +// r.InjectHandlers(&sess.Handlers) +// +// // create a new service client with our client side metric session +// svc := s3.New(sess) +func (rep *Reporter) InjectHandlers(handlers *request.Handlers) { + if rep == nil { + return + } + + handlers.Complete.PushFrontNamed(request.NamedHandler{ + Name: APICallMetricHandlerName, + Fn: rep.sendAPICallMetric, + }) + + handlers.CompleteAttempt.PushFrontNamed(request.NamedHandler{ + Name: APICallAttemptMetricHandlerName, + Fn: rep.sendAPICallAttemptMetric, + }) +} + +// boolIntValue return 1 for true and 0 for false. +func boolIntValue(b bool) int { + if b { + return 1 + } + + return 0 +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go index 50f831c8fc5..23bb639e018 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go @@ -8,17 +8,23 @@ package defaults import ( + "fmt" + "net" "net/http" + "net/url" "os" "time" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/corehandlers" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds" + "github.com/aws/aws-sdk-go/aws/credentials/endpointcreds" "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/endpoints" + "github.com/aws/aws-sdk-go/internal/shareddefaults" ) // A Defaults provides a collection of default values for SDK clients. @@ -54,7 +60,7 @@ func Config() *aws.Config { WithMaxRetries(aws.UseServiceDefaultRetries). WithLogger(aws.NewDefaultLogger()). WithLogLevel(aws.LogOff). - WithSleepDelay(time.Sleep) + WithEndpointResolver(endpoints.DefaultResolver()) } // Handlers returns the default request handlers. @@ -66,8 +72,12 @@ func Handlers() request.Handlers { var handlers request.Handlers handlers.Validate.PushBackNamed(corehandlers.ValidateEndpointHandler) + handlers.Validate.AfterEachFn = request.HandlerListStopOnError handlers.Build.PushBackNamed(corehandlers.SDKVersionUserAgentHandler) + handlers.Build.PushBackNamed(corehandlers.AddHostExecEnvUserAgentHander) + handlers.Build.AfterEachFn = request.HandlerListStopOnError handlers.Sign.PushBackNamed(corehandlers.BuildContentLengthHandler) + handlers.Send.PushBackNamed(corehandlers.ValidateReqSigHandler) handlers.Send.PushBackNamed(corehandlers.SendHandler) handlers.AfterRetry.PushBackNamed(corehandlers.AfterRetryHandler) handlers.ValidateResponse.PushBackNamed(corehandlers.ValidateResponseHandler) @@ -81,15 +91,117 @@ func Handlers() request.Handlers { // is available if you need to reset the credentials of an // existing service client or session's Config. func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credentials { - endpoint, signingRegion := endpoints.EndpointForRegion(ec2metadata.ServiceName, *cfg.Region, true) - - return credentials.NewChainCredentials( - []credentials.Provider{ - &credentials.EnvProvider{}, - &credentials.SharedCredentialsProvider{Filename: "", Profile: ""}, - &ec2rolecreds.EC2RoleProvider{ - Client: ec2metadata.NewClient(*cfg, handlers, endpoint, signingRegion), - ExpiryWindow: 5 * time.Minute, - }, - }) + return credentials.NewCredentials(&credentials.ChainProvider{ + VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors), + Providers: CredProviders(cfg, handlers), + }) +} + +// CredProviders returns the slice of providers used in +// the default credential chain. +// +// For applications that need to use some other provider (for example use +// different environment variables for legacy reasons) but still fall back +// on the default chain of providers. This allows that default chaint to be +// automatically updated +func CredProviders(cfg *aws.Config, handlers request.Handlers) []credentials.Provider { + return []credentials.Provider{ + &credentials.EnvProvider{}, + &credentials.SharedCredentialsProvider{Filename: "", Profile: ""}, + RemoteCredProvider(*cfg, handlers), + } +} + +const ( + httpProviderAuthorizationEnvVar = "AWS_CONTAINER_AUTHORIZATION_TOKEN" + httpProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_FULL_URI" +) + +// RemoteCredProvider returns a credentials provider for the default remote +// endpoints such as EC2 or ECS Roles. +func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider { + if u := os.Getenv(httpProviderEnvVar); len(u) > 0 { + return localHTTPCredProvider(cfg, handlers, u) + } + + if uri := os.Getenv(shareddefaults.ECSCredsProviderEnvVar); len(uri) > 0 { + u := fmt.Sprintf("%s%s", shareddefaults.ECSContainerCredentialsURI, uri) + return httpCredProvider(cfg, handlers, u) + } + + return ec2RoleProvider(cfg, handlers) +} + +var lookupHostFn = net.LookupHost + +func isLoopbackHost(host string) (bool, error) { + ip := net.ParseIP(host) + if ip != nil { + return ip.IsLoopback(), nil + } + + // Host is not an ip, perform lookup + addrs, err := lookupHostFn(host) + if err != nil { + return false, err + } + for _, addr := range addrs { + if !net.ParseIP(addr).IsLoopback() { + return false, nil + } + } + + return true, nil +} + +func localHTTPCredProvider(cfg aws.Config, handlers request.Handlers, u string) credentials.Provider { + var errMsg string + + parsed, err := url.Parse(u) + if err != nil { + errMsg = fmt.Sprintf("invalid URL, %v", err) + } else { + host := aws.URLHostname(parsed) + if len(host) == 0 { + errMsg = "unable to parse host from local HTTP cred provider URL" + } else if isLoopback, loopbackErr := isLoopbackHost(host); loopbackErr != nil { + errMsg = fmt.Sprintf("failed to resolve host %q, %v", host, loopbackErr) + } else if !isLoopback { + errMsg = fmt.Sprintf("invalid endpoint host, %q, only loopback hosts are allowed.", host) + } + } + + if len(errMsg) > 0 { + if cfg.Logger != nil { + cfg.Logger.Log("Ignoring, HTTP credential provider", errMsg, err) + } + return credentials.ErrorProvider{ + Err: awserr.New("CredentialsEndpointError", errMsg, err), + ProviderName: endpointcreds.ProviderName, + } + } + + return httpCredProvider(cfg, handlers, u) +} + +func httpCredProvider(cfg aws.Config, handlers request.Handlers, u string) credentials.Provider { + return endpointcreds.NewProviderClient(cfg, handlers, u, + func(p *endpointcreds.Provider) { + p.ExpiryWindow = 5 * time.Minute + p.AuthorizationToken = os.Getenv(httpProviderAuthorizationEnvVar) + }, + ) +} + +func ec2RoleProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider { + resolver := cfg.EndpointResolver + if resolver == nil { + resolver = endpoints.DefaultResolver() + } + + e, _ := resolver.EndpointFor(endpoints.Ec2metadataServiceID, "") + return &ec2rolecreds.EC2RoleProvider{ + Client: ec2metadata.NewClient(cfg, handlers, e.URL, e.SigningRegion), + ExpiryWindow: 5 * time.Minute, + } } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go b/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go new file mode 100644 index 00000000000..ca0ee1dcc78 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go @@ -0,0 +1,27 @@ +package defaults + +import ( + "github.com/aws/aws-sdk-go/internal/shareddefaults" +) + +// SharedCredentialsFilename returns the SDK's default file path +// for the shared credentials file. +// +// Builds the shared config file path based on the OS's platform. +// +// - Linux/Unix: $HOME/.aws/credentials +// - Windows: %USERPROFILE%\.aws\credentials +func SharedCredentialsFilename() string { + return shareddefaults.SharedCredentialsFilename() +} + +// SharedConfigFilename returns the SDK's default file path for +// the shared config file. +// +// Builds the shared config file path based on the OS's platform. +// +// - Linux/Unix: $HOME/.aws/config +// - Windows: %USERPROFILE%\.aws\config +func SharedConfigFilename() string { + return shareddefaults.SharedConfigFilename() +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/doc.go b/vendor/github.com/aws/aws-sdk-go/aws/doc.go new file mode 100644 index 00000000000..4fcb6161848 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/doc.go @@ -0,0 +1,56 @@ +// Package aws provides the core SDK's utilities and shared types. Use this package's +// utilities to simplify setting and reading API operations parameters. +// +// Value and Pointer Conversion Utilities +// +// This package includes a helper conversion utility for each scalar type the SDK's +// API use. These utilities make getting a pointer of the scalar, and dereferencing +// a pointer easier. +// +// Each conversion utility comes in two forms. Value to Pointer and Pointer to Value. +// The Pointer to value will safely dereference the pointer and return its value. +// If the pointer was nil, the scalar's zero value will be returned. +// +// The value to pointer functions will be named after the scalar type. So get a +// *string from a string value use the "String" function. This makes it easy to +// to get pointer of a literal string value, because getting the address of a +// literal requires assigning the value to a variable first. +// +// var strPtr *string +// +// // Without the SDK's conversion functions +// str := "my string" +// strPtr = &str +// +// // With the SDK's conversion functions +// strPtr = aws.String("my string") +// +// // Convert *string to string value +// str = aws.StringValue(strPtr) +// +// In addition to scalars the aws package also includes conversion utilities for +// map and slice for commonly types used in API parameters. The map and slice +// conversion functions use similar naming pattern as the scalar conversion +// functions. +// +// var strPtrs []*string +// var strs []string = []string{"Go", "Gophers", "Go"} +// +// // Convert []string to []*string +// strPtrs = aws.StringSlice(strs) +// +// // Convert []*string to []string +// strs = aws.StringValueSlice(strPtrs) +// +// SDK Default HTTP Client +// +// The SDK will use the http.DefaultClient if a HTTP client is not provided to +// the SDK's Session, or service client constructor. This means that if the +// http.DefaultClient is modified by other components of your application the +// modifications will be picked up by the SDK as well. +// +// In some cases this might be intended, but it is a better practice to create +// a custom HTTP Client to share explicitly through your application. You can +// configure the SDK to use the custom HTTP Client by setting the HTTPClient +// value of the SDK's Config type when creating a Session or service client. +package aws diff --git a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go index e5137ca17da..12897eef626 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go @@ -1,34 +1,161 @@ package ec2metadata import ( - "path" + "encoding/json" + "fmt" + "net/http" + "strconv" + "strings" + "time" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkuri" ) -// GetMetadata uses the path provided to request +// getToken uses the duration to return a token for EC2 metadata service, +// or an error if the request failed. +func (c *EC2Metadata) getToken(duration time.Duration) (tokenOutput, error) { + op := &request.Operation{ + Name: "GetToken", + HTTPMethod: "PUT", + HTTPPath: "/api/token", + } + + var output tokenOutput + req := c.NewRequest(op, nil, &output) + + // remove the fetch token handler from the request handlers to avoid infinite recursion + req.Handlers.Sign.RemoveByName(fetchTokenHandlerName) + + // Swap the unmarshalMetadataHandler with unmarshalTokenHandler on this request. + req.Handlers.Unmarshal.Swap(unmarshalMetadataHandlerName, unmarshalTokenHandler) + + ttl := strconv.FormatInt(int64(duration/time.Second), 10) + req.HTTPRequest.Header.Set(ttlHeader, ttl) + + err := req.Send() + + // Errors with bad request status should be returned. + if err != nil { + err = awserr.NewRequestFailure( + awserr.New(req.HTTPResponse.Status, http.StatusText(req.HTTPResponse.StatusCode), err), + req.HTTPResponse.StatusCode, req.RequestID) + } + + return output, err +} + +// GetMetadata uses the path provided to request information from the EC2 +// instance metadata service. The content will be returned as a string, or +// error if the request failed. func (c *EC2Metadata) GetMetadata(p string) (string, error) { op := &request.Operation{ Name: "GetMetadata", HTTPMethod: "GET", - HTTPPath: path.Join("/", "meta-data", p), + HTTPPath: sdkuri.PathJoin("/meta-data", p), + } + output := &metadataOutput{} + + req := c.NewRequest(op, nil, output) + + err := req.Send() + return output.Content, err +} + +// GetUserData returns the userdata that was configured for the service. If +// there is no user-data setup for the EC2 instance a "NotFoundError" error +// code will be returned. +func (c *EC2Metadata) GetUserData() (string, error) { + op := &request.Operation{ + Name: "GetUserData", + HTTPMethod: "GET", + HTTPPath: "/user-data", } output := &metadataOutput{} req := c.NewRequest(op, nil, output) - return output.Content, req.Send() + err := req.Send() + return output.Content, err +} + +// GetDynamicData uses the path provided to request information from the EC2 +// instance metadata service for dynamic data. The content will be returned +// as a string, or error if the request failed. +func (c *EC2Metadata) GetDynamicData(p string) (string, error) { + op := &request.Operation{ + Name: "GetDynamicData", + HTTPMethod: "GET", + HTTPPath: sdkuri.PathJoin("/dynamic", p), + } + + output := &metadataOutput{} + req := c.NewRequest(op, nil, output) + + err := req.Send() + return output.Content, err +} + +// GetInstanceIdentityDocument retrieves an identity document describing an +// instance. Error is returned if the request fails or is unable to parse +// the response. +func (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentityDocument, error) { + resp, err := c.GetDynamicData("instance-identity/document") + if err != nil { + return EC2InstanceIdentityDocument{}, + awserr.New("EC2MetadataRequestError", + "failed to get EC2 instance identity document", err) + } + + doc := EC2InstanceIdentityDocument{} + if err := json.NewDecoder(strings.NewReader(resp)).Decode(&doc); err != nil { + return EC2InstanceIdentityDocument{}, + awserr.New(request.ErrCodeSerialization, + "failed to decode EC2 instance identity document", err) + } + + return doc, nil +} + +// IAMInfo retrieves IAM info from the metadata API +func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) { + resp, err := c.GetMetadata("iam/info") + if err != nil { + return EC2IAMInfo{}, + awserr.New("EC2MetadataRequestError", + "failed to get EC2 IAM info", err) + } + + info := EC2IAMInfo{} + if err := json.NewDecoder(strings.NewReader(resp)).Decode(&info); err != nil { + return EC2IAMInfo{}, + awserr.New(request.ErrCodeSerialization, + "failed to decode EC2 IAM info", err) + } + + if info.Code != "Success" { + errMsg := fmt.Sprintf("failed to get EC2 IAM Info (%s)", info.Code) + return EC2IAMInfo{}, + awserr.New("EC2MetadataError", errMsg, nil) + } + + return info, nil } // Region returns the region the instance is running in. func (c *EC2Metadata) Region() (string, error) { - resp, err := c.GetMetadata("placement/availability-zone") + ec2InstanceIdentityDocument, err := c.GetInstanceIdentityDocument() if err != nil { return "", err } - - // returns region without the suffix. Eg: us-west-2a becomes us-west-2 - return resp[:len(resp)-1], nil + // extract region from the ec2InstanceIdentityDocument + region := ec2InstanceIdentityDocument.Region + if len(region) == 0 { + return "", awserr.New("EC2MetadataError", "invalid region received for ec2metadata instance", nil) + } + // returns region + return region, nil } // Available returns if the application has access to the EC2 Metadata service. @@ -41,3 +168,32 @@ func (c *EC2Metadata) Available() bool { return true } + +// An EC2IAMInfo provides the shape for unmarshaling +// an IAM info from the metadata API +type EC2IAMInfo struct { + Code string + LastUpdated time.Time + InstanceProfileArn string + InstanceProfileID string +} + +// An EC2InstanceIdentityDocument provides the shape for unmarshaling +// an instance identity document +type EC2InstanceIdentityDocument struct { + DevpayProductCodes []string `json:"devpayProductCodes"` + MarketplaceProductCodes []string `json:"marketplaceProductCodes"` + AvailabilityZone string `json:"availabilityZone"` + PrivateIP string `json:"privateIp"` + Version string `json:"version"` + Region string `json:"region"` + InstanceID string `json:"instanceId"` + BillingProducts []string `json:"billingProducts"` + InstanceType string `json:"instanceType"` + AccountID string `json:"accountId"` + PendingTime time.Time `json:"pendingTime"` + ImageID string `json:"imageId"` + KernelID string `json:"kernelId"` + RamdiskID string `json:"ramdiskId"` + Architecture string `json:"architecture"` +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go index f0dc331e012..8eccac05aa2 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go @@ -1,22 +1,49 @@ // Package ec2metadata provides the client for making API calls to the // EC2 Metadata service. +// +// This package's client can be disabled completely by setting the environment +// variable "AWS_EC2_METADATA_DISABLED=true". This environment variable set to +// true instructs the SDK to disable the EC2 Metadata client. The client cannot +// be used while the environment variable is set to true, (case insensitive). package ec2metadata import ( - "io/ioutil" - "net" + "bytes" + "errors" + "io" "net/http" + "os" + "strconv" + "strings" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/aws/corehandlers" "github.com/aws/aws-sdk-go/aws/request" ) -// ServiceName is the name of the service. -const ServiceName = "ec2metadata" +const ( + // ServiceName is the name of the service. + ServiceName = "ec2metadata" + disableServiceEnvVar = "AWS_EC2_METADATA_DISABLED" + + // Headers for Token and TTL + ttlHeader = "x-aws-ec2-metadata-token-ttl-seconds" + tokenHeader = "x-aws-ec2-metadata-token" + + // Named Handler constants + fetchTokenHandlerName = "FetchTokenHandler" + unmarshalMetadataHandlerName = "unmarshalMetadataHandler" + unmarshalTokenHandlerName = "unmarshalTokenHandler" + enableTokenProviderHandlerName = "enableTokenProviderHandler" + + // TTL constants + defaultTTL = 21600 * time.Second + ttlExpirationWindow = 30 * time.Second +) // A EC2Metadata is an EC2 Metadata service Client. type EC2Metadata struct { @@ -26,6 +53,7 @@ type EC2Metadata struct { // New creates a new instance of the EC2Metadata client with a session. // This client is safe to use across multiple goroutines. // +// // Example: // // Create a EC2Metadata client from just a session. // svc := ec2metadata.New(mySession) @@ -40,22 +68,19 @@ func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2Metadata { // NewClient returns a new EC2Metadata client. Should be used to create // a client when not using a session. Generally using just New with a session // is preferred. +// +// If an unmodified HTTP client is provided from the stdlib default, or no client +// the EC2RoleProvider's EC2Metadata HTTP client's timeout will be shortened. +// To disable this set Config.EC2MetadataDisableTimeoutOverride to false. Enabled by default. func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion string, opts ...func(*client.Client)) *EC2Metadata { - // If the default http client is provided, replace it with a custom - // client using default timeouts. - if cfg.HTTPClient == http.DefaultClient { + if !aws.BoolValue(cfg.EC2MetadataDisableTimeoutOverride) && httpClientZero(cfg.HTTPClient) { + // If the http client is unmodified and this feature is not disabled + // set custom timeouts for EC2Metadata requests. cfg.HTTPClient = &http.Client{ - Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - Dial: (&net.Dialer{ - // use a shorter timeout than default because the metadata - // service is local if it is running, and to fail faster - // if not running on an ec2 instance. - Timeout: 5 * time.Second, - KeepAlive: 30 * time.Second, - }).Dial, - TLSHandshakeTimeout: 10 * time.Second, - }, + // use a shorter timeout than default because the metadata + // service is local if it is running, and to fail faster + // if not running on an ec2 instance. + Timeout: 5 * time.Second, } } @@ -64,6 +89,7 @@ func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegio cfg, metadata.ClientInfo{ ServiceName: ServiceName, + ServiceID: ServiceName, Endpoint: endpoint, APIVersion: "latest", }, @@ -71,42 +97,126 @@ func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegio ), } - svc.Handlers.Unmarshal.PushBack(unmarshalHandler) + // token provider instance + tp := newTokenProvider(svc, defaultTTL) + + // NamedHandler for fetching token + svc.Handlers.Sign.PushBackNamed(request.NamedHandler{ + Name: fetchTokenHandlerName, + Fn: tp.fetchTokenHandler, + }) + // NamedHandler for enabling token provider + svc.Handlers.Complete.PushBackNamed(request.NamedHandler{ + Name: enableTokenProviderHandlerName, + Fn: tp.enableTokenProviderHandler, + }) + + svc.Handlers.Unmarshal.PushBackNamed(unmarshalHandler) svc.Handlers.UnmarshalError.PushBack(unmarshalError) svc.Handlers.Validate.Clear() svc.Handlers.Validate.PushBack(validateEndpointHandler) + // Disable the EC2 Metadata service if the environment variable is set. + // This short-circuits the service's functionality to always fail to send + // requests. + if strings.ToLower(os.Getenv(disableServiceEnvVar)) == "true" { + svc.Handlers.Send.SwapNamed(request.NamedHandler{ + Name: corehandlers.SendHandler.Name, + Fn: func(r *request.Request) { + r.HTTPResponse = &http.Response{ + Header: http.Header{}, + } + r.Error = awserr.New( + request.CanceledErrorCode, + "EC2 IMDS access disabled via "+disableServiceEnvVar+" env var", + nil) + }, + }) + } + // Add additional options to the service config for _, option := range opts { option(svc.Client) } - return svc } +func httpClientZero(c *http.Client) bool { + return c == nil || (c.Transport == nil && c.CheckRedirect == nil && c.Jar == nil && c.Timeout == 0) +} + type metadataOutput struct { Content string } -func unmarshalHandler(r *request.Request) { - defer r.HTTPResponse.Body.Close() - b, err := ioutil.ReadAll(r.HTTPResponse.Body) - if err != nil { - r.Error = awserr.New("SerializationError", "unable to unmarshal EC2 metadata respose", err) - } +type tokenOutput struct { + Token string + TTL time.Duration +} + +// unmarshal token handler is used to parse the response of a getToken operation +var unmarshalTokenHandler = request.NamedHandler{ + Name: unmarshalTokenHandlerName, + Fn: func(r *request.Request) { + defer r.HTTPResponse.Body.Close() + var b bytes.Buffer + if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { + r.Error = awserr.NewRequestFailure(awserr.New(request.ErrCodeSerialization, + "unable to unmarshal EC2 metadata response", err), r.HTTPResponse.StatusCode, r.RequestID) + return + } + + v := r.HTTPResponse.Header.Get(ttlHeader) + data, ok := r.Data.(*tokenOutput) + if !ok { + return + } - data := r.Data.(*metadataOutput) - data.Content = string(b) + data.Token = b.String() + // TTL is in seconds + i, err := strconv.ParseInt(v, 10, 64) + if err != nil { + r.Error = awserr.NewRequestFailure(awserr.New(request.ParamFormatErrCode, + "unable to parse EC2 token TTL response", err), r.HTTPResponse.StatusCode, r.RequestID) + return + } + t := time.Duration(i) * time.Second + data.TTL = t + }, +} + +var unmarshalHandler = request.NamedHandler{ + Name: unmarshalMetadataHandlerName, + Fn: func(r *request.Request) { + defer r.HTTPResponse.Body.Close() + var b bytes.Buffer + if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { + r.Error = awserr.NewRequestFailure(awserr.New(request.ErrCodeSerialization, + "unable to unmarshal EC2 metadata response", err), r.HTTPResponse.StatusCode, r.RequestID) + return + } + + if data, ok := r.Data.(*metadataOutput); ok { + data.Content = b.String() + } + }, } func unmarshalError(r *request.Request) { defer r.HTTPResponse.Body.Close() - _, err := ioutil.ReadAll(r.HTTPResponse.Body) - if err != nil { - r.Error = awserr.New("SerializationError", "unable to unmarshal EC2 metadata error respose", err) + var b bytes.Buffer + + if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, "unable to unmarshal EC2 metadata error response", err), + r.HTTPResponse.StatusCode, r.RequestID) + return } - // TODO extract the error... + // Response body format is not consistent between metadata endpoints. + // Grab the error message as a string and include that as the source error + r.Error = awserr.NewRequestFailure(awserr.New("EC2MetadataError", "failed to make EC2Metadata request", errors.New(b.String())), + r.HTTPResponse.StatusCode, r.RequestID) } func validateEndpointHandler(r *request.Request) { diff --git a/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go new file mode 100644 index 00000000000..06f76055f36 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go @@ -0,0 +1,92 @@ +package ec2metadata + +import ( + "net/http" + "sync/atomic" + "time" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/request" +) + +// A tokenProvider struct provides access to EC2Metadata client +// and atomic instance of a token, along with configuredTTL for it. +// tokenProvider also provides an atomic flag to disable the +// fetch token operation. +// The disabled member will use 0 as false, and 1 as true. +type tokenProvider struct { + client *EC2Metadata + token atomic.Value + configuredTTL time.Duration + disabled uint32 +} + +// A ec2Token struct helps use of token in EC2 Metadata service ops +type ec2Token struct { + token string + credentials.Expiry +} + +// newTokenProvider provides a pointer to a tokenProvider instance +func newTokenProvider(c *EC2Metadata, duration time.Duration) *tokenProvider { + return &tokenProvider{client: c, configuredTTL: duration} +} + +// fetchTokenHandler fetches token for EC2Metadata service client by default. +func (t *tokenProvider) fetchTokenHandler(r *request.Request) { + + // short-circuits to insecure data flow if tokenProvider is disabled. + if v := atomic.LoadUint32(&t.disabled); v == 1 { + return + } + + if ec2Token, ok := t.token.Load().(ec2Token); ok && !ec2Token.IsExpired() { + r.HTTPRequest.Header.Set(tokenHeader, ec2Token.token) + return + } + + output, err := t.client.getToken(t.configuredTTL) + + if err != nil { + + // change the disabled flag on token provider to true, + // when error is request timeout error. + if requestFailureError, ok := err.(awserr.RequestFailure); ok { + switch requestFailureError.StatusCode() { + case http.StatusForbidden, http.StatusNotFound, http.StatusMethodNotAllowed: + atomic.StoreUint32(&t.disabled, 1) + case http.StatusBadRequest: + r.Error = requestFailureError + } + + // Check if request timed out while waiting for response + if e, ok := requestFailureError.OrigErr().(awserr.Error); ok { + if e.Code() == "RequestError" { + atomic.StoreUint32(&t.disabled, 1) + } + } + } + return + } + + newToken := ec2Token{ + token: output.Token, + } + newToken.SetExpiration(time.Now().Add(output.TTL), ttlExpirationWindow) + t.token.Store(newToken) + + // Inject token header to the request. + if ec2Token, ok := t.token.Load().(ec2Token); ok { + r.HTTPRequest.Header.Set(tokenHeader, ec2Token.token) + } +} + +// enableTokenProviderHandler enables the token provider +func (t *tokenProvider) enableTokenProviderHandler(r *request.Request) { + // If the error code status is 401, we enable the token provider + if e, ok := r.Error.(awserr.RequestFailure); ok && e != nil && + e.StatusCode() == http.StatusUnauthorized { + atomic.StoreUint32(&t.disabled, 0) + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go new file mode 100644 index 00000000000..343a2106f81 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go @@ -0,0 +1,216 @@ +package endpoints + +import ( + "encoding/json" + "fmt" + "io" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +type modelDefinition map[string]json.RawMessage + +// A DecodeModelOptions are the options for how the endpoints model definition +// are decoded. +type DecodeModelOptions struct { + SkipCustomizations bool +} + +// Set combines all of the option functions together. +func (d *DecodeModelOptions) Set(optFns ...func(*DecodeModelOptions)) { + for _, fn := range optFns { + fn(d) + } +} + +// DecodeModel unmarshals a Regions and Endpoint model definition file into +// a endpoint Resolver. If the file format is not supported, or an error occurs +// when unmarshaling the model an error will be returned. +// +// Casting the return value of this func to a EnumPartitions will +// allow you to get a list of the partitions in the order the endpoints +// will be resolved in. +// +// resolver, err := endpoints.DecodeModel(reader) +// +// partitions := resolver.(endpoints.EnumPartitions).Partitions() +// for _, p := range partitions { +// // ... inspect partitions +// } +func DecodeModel(r io.Reader, optFns ...func(*DecodeModelOptions)) (Resolver, error) { + var opts DecodeModelOptions + opts.Set(optFns...) + + // Get the version of the partition file to determine what + // unmarshaling model to use. + modelDef := modelDefinition{} + if err := json.NewDecoder(r).Decode(&modelDef); err != nil { + return nil, newDecodeModelError("failed to decode endpoints model", err) + } + + var version string + if b, ok := modelDef["version"]; ok { + version = string(b) + } else { + return nil, newDecodeModelError("endpoints version not found in model", nil) + } + + if version == "3" { + return decodeV3Endpoints(modelDef, opts) + } + + return nil, newDecodeModelError( + fmt.Sprintf("endpoints version %s, not supported", version), nil) +} + +func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions) (Resolver, error) { + b, ok := modelDef["partitions"] + if !ok { + return nil, newDecodeModelError("endpoints model missing partitions", nil) + } + + ps := partitions{} + if err := json.Unmarshal(b, &ps); err != nil { + return nil, newDecodeModelError("failed to decode endpoints model", err) + } + + if opts.SkipCustomizations { + return ps, nil + } + + // Customization + for i := 0; i < len(ps); i++ { + p := &ps[i] + custAddEC2Metadata(p) + custAddS3DualStack(p) + custRegionalS3(p) + custRmIotDataService(p) + custFixAppAutoscalingChina(p) + custFixAppAutoscalingUsGov(p) + } + + return ps, nil +} + +func custAddS3DualStack(p *partition) { + if p.ID != "aws" { + return + } + + custAddDualstack(p, "s3") + custAddDualstack(p, "s3-control") +} + +func custRegionalS3(p *partition) { + if p.ID != "aws" { + return + } + + service, ok := p.Services["s3"] + if !ok { + return + } + + // If global endpoint already exists no customization needed. + if _, ok := service.Endpoints["aws-global"]; ok { + return + } + + service.PartitionEndpoint = "aws-global" + service.Endpoints["us-east-1"] = endpoint{} + service.Endpoints["aws-global"] = endpoint{ + Hostname: "s3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + } + + p.Services["s3"] = service +} + +func custAddDualstack(p *partition, svcName string) { + s, ok := p.Services[svcName] + if !ok { + return + } + + s.Defaults.HasDualStack = boxedTrue + s.Defaults.DualStackHostname = "{service}.dualstack.{region}.{dnsSuffix}" + + p.Services[svcName] = s +} + +func custAddEC2Metadata(p *partition) { + p.Services["ec2metadata"] = service{ + IsRegionalized: boxedFalse, + PartitionEndpoint: "aws-global", + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, + }, + } +} + +func custRmIotDataService(p *partition) { + delete(p.Services, "data.iot") +} + +func custFixAppAutoscalingChina(p *partition) { + if p.ID != "aws-cn" { + return + } + + const serviceName = "application-autoscaling" + s, ok := p.Services[serviceName] + if !ok { + return + } + + const expectHostname = `autoscaling.{region}.amazonaws.com` + if e, a := s.Defaults.Hostname, expectHostname; e != a { + fmt.Printf("custFixAppAutoscalingChina: ignoring customization, expected %s, got %s\n", e, a) + return + } + + s.Defaults.Hostname = expectHostname + ".cn" + p.Services[serviceName] = s +} + +func custFixAppAutoscalingUsGov(p *partition) { + if p.ID != "aws-us-gov" { + return + } + + const serviceName = "application-autoscaling" + s, ok := p.Services[serviceName] + if !ok { + return + } + + if a := s.Defaults.CredentialScope.Service; a != "" { + fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty credential scope service, got %s\n", a) + return + } + + if a := s.Defaults.Hostname; a != "" { + fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty hostname, got %s\n", a) + return + } + + s.Defaults.CredentialScope.Service = "application-autoscaling" + s.Defaults.Hostname = "autoscaling.{region}.amazonaws.com" + + p.Services[serviceName] = s +} + +type decodeModelError struct { + awsError +} + +func newDecodeModelError(msg string, err error) decodeModelError { + return decodeModelError{ + awsError: awserr.New("DecodeEndpointsModelError", msg, err), + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go new file mode 100644 index 00000000000..5eb99c1020d --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go @@ -0,0 +1,6149 @@ +// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT. + +package endpoints + +import ( + "regexp" +) + +// Partition identifiers +const ( + AwsPartitionID = "aws" // AWS Standard partition. + AwsCnPartitionID = "aws-cn" // AWS China partition. + AwsUsGovPartitionID = "aws-us-gov" // AWS GovCloud (US) partition. + AwsIsoPartitionID = "aws-iso" // AWS ISO (US) partition. + AwsIsoBPartitionID = "aws-iso-b" // AWS ISOB (US) partition. +) + +// AWS Standard partition's regions. +const ( + ApEast1RegionID = "ap-east-1" // Asia Pacific (Hong Kong). + ApNortheast1RegionID = "ap-northeast-1" // Asia Pacific (Tokyo). + ApNortheast2RegionID = "ap-northeast-2" // Asia Pacific (Seoul). + ApSouth1RegionID = "ap-south-1" // Asia Pacific (Mumbai). + ApSoutheast1RegionID = "ap-southeast-1" // Asia Pacific (Singapore). + ApSoutheast2RegionID = "ap-southeast-2" // Asia Pacific (Sydney). + CaCentral1RegionID = "ca-central-1" // Canada (Central). + EuCentral1RegionID = "eu-central-1" // EU (Frankfurt). + EuNorth1RegionID = "eu-north-1" // EU (Stockholm). + EuWest1RegionID = "eu-west-1" // EU (Ireland). + EuWest2RegionID = "eu-west-2" // EU (London). + EuWest3RegionID = "eu-west-3" // EU (Paris). + MeSouth1RegionID = "me-south-1" // Middle East (Bahrain). + SaEast1RegionID = "sa-east-1" // South America (Sao Paulo). + UsEast1RegionID = "us-east-1" // US East (N. Virginia). + UsEast2RegionID = "us-east-2" // US East (Ohio). + UsWest1RegionID = "us-west-1" // US West (N. California). + UsWest2RegionID = "us-west-2" // US West (Oregon). +) + +// AWS China partition's regions. +const ( + CnNorth1RegionID = "cn-north-1" // China (Beijing). + CnNorthwest1RegionID = "cn-northwest-1" // China (Ningxia). +) + +// AWS GovCloud (US) partition's regions. +const ( + UsGovEast1RegionID = "us-gov-east-1" // AWS GovCloud (US-East). + UsGovWest1RegionID = "us-gov-west-1" // AWS GovCloud (US). +) + +// AWS ISO (US) partition's regions. +const ( + UsIsoEast1RegionID = "us-iso-east-1" // US ISO East. +) + +// AWS ISOB (US) partition's regions. +const ( + UsIsobEast1RegionID = "us-isob-east-1" // US ISOB East (Ohio). +) + +// DefaultResolver returns an Endpoint resolver that will be able +// to resolve endpoints for: AWS Standard, AWS China, AWS GovCloud (US), AWS ISO (US), and AWS ISOB (US). +// +// Use DefaultPartitions() to get the list of the default partitions. +func DefaultResolver() Resolver { + return defaultPartitions +} + +// DefaultPartitions returns a list of the partitions the SDK is bundled +// with. The available partitions are: AWS Standard, AWS China, AWS GovCloud (US), AWS ISO (US), and AWS ISOB (US). +// +// partitions := endpoints.DefaultPartitions +// for _, p := range partitions { +// // ... inspect partitions +// } +func DefaultPartitions() []Partition { + return defaultPartitions.Partitions() +} + +var defaultPartitions = partitions{ + awsPartition, + awscnPartition, + awsusgovPartition, + awsisoPartition, + awsisobPartition, +} + +// AwsPartition returns the Resolver for AWS Standard. +func AwsPartition() Partition { + return awsPartition.Partition() +} + +var awsPartition = partition{ + ID: "aws", + Name: "AWS Standard", + DNSSuffix: "amazonaws.com", + RegionRegex: regionRegex{ + Regexp: func() *regexp.Regexp { + reg, _ := regexp.Compile("^(us|eu|ap|sa|ca|me)\\-\\w+\\-\\d+$") + return reg + }(), + }, + Defaults: endpoint{ + Hostname: "{service}.{region}.{dnsSuffix}", + Protocols: []string{"https"}, + SignatureVersions: []string{"v4"}, + }, + Regions: regions{ + "ap-east-1": region{ + Description: "Asia Pacific (Hong Kong)", + }, + "ap-northeast-1": region{ + Description: "Asia Pacific (Tokyo)", + }, + "ap-northeast-2": region{ + Description: "Asia Pacific (Seoul)", + }, + "ap-south-1": region{ + Description: "Asia Pacific (Mumbai)", + }, + "ap-southeast-1": region{ + Description: "Asia Pacific (Singapore)", + }, + "ap-southeast-2": region{ + Description: "Asia Pacific (Sydney)", + }, + "ca-central-1": region{ + Description: "Canada (Central)", + }, + "eu-central-1": region{ + Description: "EU (Frankfurt)", + }, + "eu-north-1": region{ + Description: "EU (Stockholm)", + }, + "eu-west-1": region{ + Description: "EU (Ireland)", + }, + "eu-west-2": region{ + Description: "EU (London)", + }, + "eu-west-3": region{ + Description: "EU (Paris)", + }, + "me-south-1": region{ + Description: "Middle East (Bahrain)", + }, + "sa-east-1": region{ + Description: "South America (Sao Paulo)", + }, + "us-east-1": region{ + Description: "US East (N. Virginia)", + }, + "us-east-2": region{ + Description: "US East (Ohio)", + }, + "us-west-1": region{ + Description: "US West (N. California)", + }, + "us-west-2": region{ + Description: "US West (Oregon)", + }, + }, + Services: services{ + "a4b": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "acm": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "acm-pca": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "api.ecr": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{ + Hostname: "api.ecr.ap-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-east-1", + }, + }, + "ap-northeast-1": endpoint{ + Hostname: "api.ecr.ap-northeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "api.ecr.ap-northeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-south-1": endpoint{ + Hostname: "api.ecr.ap-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-south-1", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "api.ecr.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "api.ecr.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "api.ecr.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "api.ecr.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-north-1": endpoint{ + Hostname: "api.ecr.eu-north-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-north-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "api.ecr.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "api.ecr.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "eu-west-3": endpoint{ + Hostname: "api.ecr.eu-west-3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-3", + }, + }, + "me-south-1": endpoint{ + Hostname: "api.ecr.me-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "me-south-1", + }, + }, + "sa-east-1": endpoint{ + Hostname: "api.ecr.sa-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "sa-east-1", + }, + }, + "us-east-1": endpoint{ + Hostname: "api.ecr.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "api.ecr.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{ + Hostname: "api.ecr.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{ + Hostname: "api.ecr.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "api.mediatailor": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "api.pricing": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "pricing", + }, + }, + Endpoints: endpoints{ + "ap-south-1": endpoint{}, + "us-east-1": endpoint{}, + }, + }, + "api.sagemaker": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "api-fips.sagemaker.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "api-fips.sagemaker.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "api-fips.sagemaker.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "api-fips.sagemaker.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "apigateway": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "application-autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "appmesh": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "appstream2": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + CredentialScope: credentialScope{ + Service: "appstream", + }, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "fips": endpoint{ + Hostname: "appstream2-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "appsync": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "athena": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "autoscaling-plans": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "backup": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "batch": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "budgets": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "budgets.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "ce": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "ce.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "chime": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + Defaults: endpoint{ + SSLCommonName: "service.chime.aws.amazon.com", + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "service.chime.aws.amazon.com", + Protocols: []string{"https"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "cloud9": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "clouddirectory": service{ + + Endpoints: endpoints{ + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cloudformation": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cloudfront": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "cloudfront.amazonaws.com", + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "cloudhsm": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cloudhsmv2": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "cloudhsm", + }, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cloudsearch": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cloudtrail": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "codebuild": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "codebuild-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "codebuild-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "codebuild-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "codebuild-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "codecommit": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips": endpoint{ + Hostname: "codecommit-fips.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "codedeploy": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "codedeploy-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "codedeploy-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "codedeploy-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "codedeploy-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "codepipeline": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "codestar": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cognito-identity": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cognito-idp": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cognito-sync": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "comprehend": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "comprehendmedical": service{ + + Endpoints: endpoints{ + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "config": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "connect": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "cur": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "data.mediastore": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "dataexchange": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "datapipeline": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "datasync": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "datasync-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "datasync-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "datasync-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "datasync-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "dax": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "devicefarm": service{ + + Endpoints: endpoints{ + "us-west-2": endpoint{}, + }, + }, + "directconnect": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "discovery": service{ + + Endpoints: endpoints{ + "eu-central-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "dms": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "docdb": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{ + Hostname: "rds.ap-northeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "rds.ap-northeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-south-1": endpoint{ + Hostname: "rds.ap-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-south-1", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "rds.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "rds.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "eu-central-1": endpoint{ + Hostname: "rds.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "rds.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "rds.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "eu-west-3": endpoint{ + Hostname: "rds.eu-west-3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-3", + }, + }, + "us-east-1": endpoint{ + Hostname: "rds.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "rds.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "rds.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "ds": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "ca-central-1-fips": endpoint{ + Hostname: "dynamodb-fips.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "local": endpoint{ + Hostname: "localhost:8000", + Protocols: []string{"http"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "dynamodb-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "dynamodb-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "dynamodb-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "dynamodb-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "ec2": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "ec2metadata": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, + }, + }, + "ecs": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "elasticache": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips": endpoint{ + Hostname: "elasticache-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "elasticbeanstalk": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "elasticfilesystem": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "elasticloadbalancing": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "elasticmapreduce": service{ + Defaults: endpoint{ + SSLCommonName: "{region}.{service}.{dnsSuffix}", + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{ + SSLCommonName: "{service}.{region}.{dnsSuffix}", + }, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{ + SSLCommonName: "{service}.{region}.{dnsSuffix}", + }, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "elastictranscoder": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "email": service{ + + Endpoints: endpoints{ + "ap-south-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "entitlement.marketplace": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "aws-marketplace", + }, + }, + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "es": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips": endpoint{ + Hostname: "es-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "events": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "firehose": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "fms": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "forecast": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "forecastquery": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "fsx": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "gamelift": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "glacier": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "glue": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "greengrass": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "groundstation": service{ + + Endpoints: endpoints{ + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "guardduty": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "guardduty-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "guardduty-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "guardduty-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "guardduty-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "health": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "iam": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "iam.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "importexport": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "importexport.amazonaws.com", + SignatureVersions: []string{"v2", "v4"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + Service: "IngestionService", + }, + }, + }, + }, + "inspector": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "iot": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "execute-api", + }, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "iotanalytics": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "iotevents": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "ioteventsdata": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{ + Hostname: "data.iotevents.ap-northeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "data.iotevents.ap-northeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "data.iotevents.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "data.iotevents.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "eu-central-1": endpoint{ + Hostname: "data.iotevents.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "data.iotevents.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "data.iotevents.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "us-east-1": endpoint{ + Hostname: "data.iotevents.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "data.iotevents.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "data.iotevents.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "iotsecuredtunneling": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "iotthingsgraph": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "iotthingsgraph", + }, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kafka": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kinesis": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kinesisanalytics": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kinesisvideo": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "lakeformation": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "lambda": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "license-manager": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "lightsail": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "logs": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "machinelearning": service{ + + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + }, + }, + "marketplacecommerceanalytics": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "mediaconnect": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mediaconvert": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "medialive": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mediapackage": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mediastore": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "metering.marketplace": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "aws-marketplace", + }, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mgh": service{ + + Endpoints: endpoints{ + "eu-central-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mobileanalytics": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "models.lex": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "lex", + }, + }, + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "monitoring": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mq": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "mq-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "mq-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "mq-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "mq-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mturk-requester": service{ + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "sandbox": endpoint{ + Hostname: "mturk-requester-sandbox.us-east-1.amazonaws.com", + }, + "us-east-1": endpoint{}, + }, + }, + "neptune": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{ + Hostname: "rds.ap-northeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "rds.ap-northeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-south-1": endpoint{ + Hostname: "rds.ap-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-south-1", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "rds.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "rds.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "rds.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "rds.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-north-1": endpoint{ + Hostname: "rds.eu-north-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-north-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "rds.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "rds.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "me-south-1": endpoint{ + Hostname: "rds.me-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "me-south-1", + }, + }, + "us-east-1": endpoint{ + Hostname: "rds.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "rds.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "rds.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "oidc": service{ + + Endpoints: endpoints{ + "ap-southeast-1": endpoint{ + Hostname: "oidc.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "oidc.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "oidc.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "oidc.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "oidc.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "oidc.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "us-east-1": endpoint{ + Hostname: "oidc.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "oidc.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "oidc.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "opsworks": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "opsworks-cm": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "organizations": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "organizations.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "pinpoint": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "mobiletargeting", + }, + }, + Endpoints: endpoints{ + "ap-south-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "pinpoint-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "pinpoint-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "us-east-1": endpoint{ + Hostname: "pinpoint.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-west-2": endpoint{ + Hostname: "pinpoint.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "polly": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "portal.sso": service{ + + Endpoints: endpoints{ + "ap-southeast-1": endpoint{ + Hostname: "portal.sso.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "portal.sso.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "portal.sso.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "portal.sso.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "portal.sso.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "portal.sso.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "us-east-1": endpoint{ + Hostname: "portal.sso.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "portal.sso.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "portal.sso.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "projects.iot1click": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "qldb": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "ram": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "rds": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{ + SSLCommonName: "{service}.{dnsSuffix}", + }, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "redshift": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "rekognition": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "resource-groups": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "resource-groups-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "resource-groups-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "resource-groups-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "resource-groups-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "robomaker": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "route53": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "route53.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "route53domains": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "route53resolver": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "runtime.lex": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "lex", + }, + }, + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "runtime.sagemaker": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "runtime-fips.sagemaker.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "runtime-fips.sagemaker.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "runtime-fips.sagemaker.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "runtime-fips.sagemaker.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "s3": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"s3v4"}, + + HasDualStack: boxedTrue, + DualStackHostname: "{service}.dualstack.{region}.{dnsSuffix}", + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{ + Hostname: "s3.ap-northeast-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{ + Hostname: "s3.ap-southeast-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "ap-southeast-2": endpoint{ + Hostname: "s3.ap-southeast-2.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "aws-global": endpoint{ + Hostname: "s3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{ + Hostname: "s3.eu-west-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "s3-external-1": endpoint{ + Hostname: "s3-external-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "sa-east-1": endpoint{ + Hostname: "s3.sa-east-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{ + Hostname: "s3.us-west-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "us-west-2": endpoint{ + Hostname: "s3.us-west-2.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + }, + }, + "s3-control": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + SignatureVersions: []string{"s3v4"}, + + HasDualStack: boxedTrue, + DualStackHostname: "{service}.dualstack.{region}.{dnsSuffix}", + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{ + Hostname: "s3-control.ap-northeast-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "s3-control.ap-northeast-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-south-1": endpoint{ + Hostname: "s3-control.ap-south-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-south-1", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "s3-control.ap-southeast-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "s3-control.ap-southeast-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "s3-control.ca-central-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "s3-control.eu-central-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-north-1": endpoint{ + Hostname: "s3-control.eu-north-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-north-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "s3-control.eu-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "s3-control.eu-west-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "eu-west-3": endpoint{ + Hostname: "s3-control.eu-west-3.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-west-3", + }, + }, + "sa-east-1": endpoint{ + Hostname: "s3-control.sa-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "sa-east-1", + }, + }, + "us-east-1": endpoint{ + Hostname: "s3-control.us-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-1-fips": endpoint{ + Hostname: "s3-control-fips.us-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "s3-control.us-east-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-east-2-fips": endpoint{ + Hostname: "s3-control-fips.us-east-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{ + Hostname: "s3-control.us-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-1-fips": endpoint{ + Hostname: "s3-control-fips.us-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{ + Hostname: "s3-control.us-west-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "us-west-2-fips": endpoint{ + Hostname: "s3-control-fips.us-west-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "savingsplans": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "savingsplans.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "sdb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"v2"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{ + Hostname: "sdb.amazonaws.com", + }, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "secretsmanager": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "secretsmanager-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "secretsmanager-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "secretsmanager-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "secretsmanager-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "securityhub": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "serverlessrepo": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{ + Protocols: []string{"https"}, + }, + "ap-northeast-1": endpoint{ + Protocols: []string{"https"}, + }, + "ap-northeast-2": endpoint{ + Protocols: []string{"https"}, + }, + "ap-south-1": endpoint{ + Protocols: []string{"https"}, + }, + "ap-southeast-1": endpoint{ + Protocols: []string{"https"}, + }, + "ap-southeast-2": endpoint{ + Protocols: []string{"https"}, + }, + "ca-central-1": endpoint{ + Protocols: []string{"https"}, + }, + "eu-central-1": endpoint{ + Protocols: []string{"https"}, + }, + "eu-north-1": endpoint{ + Protocols: []string{"https"}, + }, + "eu-west-1": endpoint{ + Protocols: []string{"https"}, + }, + "eu-west-2": endpoint{ + Protocols: []string{"https"}, + }, + "eu-west-3": endpoint{ + Protocols: []string{"https"}, + }, + "me-south-1": endpoint{ + Protocols: []string{"https"}, + }, + "sa-east-1": endpoint{ + Protocols: []string{"https"}, + }, + "us-east-1": endpoint{ + Protocols: []string{"https"}, + }, + "us-east-2": endpoint{ + Protocols: []string{"https"}, + }, + "us-west-1": endpoint{ + Protocols: []string{"https"}, + }, + "us-west-2": endpoint{ + Protocols: []string{"https"}, + }, + }, + }, + "servicecatalog": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "servicecatalog-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "servicecatalog-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "servicecatalog-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "servicecatalog-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "servicediscovery": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "session.qldb": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "shield": service{ + IsRegionalized: boxedFalse, + Defaults: endpoint{ + SSLCommonName: "shield.us-east-1.amazonaws.com", + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "sms": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "snowball": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "sns": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "sqs": service{ + Defaults: endpoint{ + SSLCommonName: "{region}.queue.{dnsSuffix}", + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "sqs-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "sqs-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "sqs-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "sqs-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{ + SSLCommonName: "queue.{dnsSuffix}", + }, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "ssm": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "states": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "storagegateway": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "streams.dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Service: "dynamodb", + }, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "ca-central-1-fips": endpoint{ + Hostname: "dynamodb-fips.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "local": endpoint{ + Hostname: "localhost:8000", + Protocols: []string{"http"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "dynamodb-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "dynamodb-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "dynamodb-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "dynamodb-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "sts": service{ + PartitionEndpoint: "aws-global", + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "aws-global": endpoint{ + Hostname: "sts.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "sts-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "sts-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "sts-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "sts-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "support": service{ + PartitionEndpoint: "aws-global", + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "support.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "swf": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "tagging": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "transcribe": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "transcribestreaming": service{ + + Endpoints: endpoints{ + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "transfer": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "translate": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "translate-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "translate-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "translate-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "waf": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "waf.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "waf-regional": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "workdocs": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "workmail": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "workspaces": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "xray": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + }, +} + +// AwsCnPartition returns the Resolver for AWS China. +func AwsCnPartition() Partition { + return awscnPartition.Partition() +} + +var awscnPartition = partition{ + ID: "aws-cn", + Name: "AWS China", + DNSSuffix: "amazonaws.com.cn", + RegionRegex: regionRegex{ + Regexp: func() *regexp.Regexp { + reg, _ := regexp.Compile("^cn\\-\\w+\\-\\d+$") + return reg + }(), + }, + Defaults: endpoint{ + Hostname: "{service}.{region}.{dnsSuffix}", + Protocols: []string{"https"}, + SignatureVersions: []string{"v4"}, + }, + Regions: regions{ + "cn-north-1": region{ + Description: "China (Beijing)", + }, + "cn-northwest-1": region{ + Description: "China (Ningxia)", + }, + }, + Services: services{ + "api.ecr": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{ + Hostname: "api.ecr.cn-north-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + "cn-northwest-1": endpoint{ + Hostname: "api.ecr.cn-northwest-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "apigateway": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "application-autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "batch": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "cloudformation": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "cloudfront": service{ + PartitionEndpoint: "aws-cn-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-cn-global": endpoint{ + Hostname: "cloudfront.cn-northwest-1.amazonaws.com.cn", + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "cloudtrail": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "codebuild": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "codedeploy": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "cognito-identity": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "config": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "dax": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{}, + }, + }, + "directconnect": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "dms": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "ds": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "ec2": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "ec2metadata": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, + }, + }, + "ecs": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "elasticache": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "elasticbeanstalk": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "elasticloadbalancing": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "elasticmapreduce": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "es": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "events": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "firehose": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "gamelift": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "glacier": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "glue": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{}, + }, + }, + "greengrass": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "iam": service{ + PartitionEndpoint: "aws-cn-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-cn-global": endpoint{ + Hostname: "iam.cn-north-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + }, + }, + "iot": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "execute-api", + }, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "kinesis": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "lambda": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "license-manager": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "logs": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "mediaconvert": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{ + Hostname: "subscribe.mediaconvert.cn-northwest-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "monitoring": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "polly": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{}, + }, + }, + "rds": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "redshift": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "s3": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"s3v4"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "s3-control": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + SignatureVersions: []string{"s3v4"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{ + Hostname: "s3-control.cn-north-1.amazonaws.com.cn", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + "cn-northwest-1": endpoint{ + Hostname: "s3-control.cn-northwest-1.amazonaws.com.cn", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "sms": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "snowball": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "sns": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "sqs": service{ + Defaults: endpoint{ + SSLCommonName: "{region}.queue.{dnsSuffix}", + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "ssm": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "states": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "storagegateway": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "streams.dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Service: "dynamodb", + }, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "sts": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "support": service{ + PartitionEndpoint: "aws-cn-global", + + Endpoints: endpoints{ + "aws-cn-global": endpoint{ + Hostname: "support.cn-north-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + }, + }, + "swf": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "tagging": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "transcribe": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{ + Hostname: "cn.transcribe.cn-north-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + "cn-northwest-1": endpoint{ + Hostname: "cn.transcribe.cn-northwest-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "workspaces": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{}, + }, + }, + }, +} + +// AwsUsGovPartition returns the Resolver for AWS GovCloud (US). +func AwsUsGovPartition() Partition { + return awsusgovPartition.Partition() +} + +var awsusgovPartition = partition{ + ID: "aws-us-gov", + Name: "AWS GovCloud (US)", + DNSSuffix: "amazonaws.com", + RegionRegex: regionRegex{ + Regexp: func() *regexp.Regexp { + reg, _ := regexp.Compile("^us\\-gov\\-\\w+\\-\\d+$") + return reg + }(), + }, + Defaults: endpoint{ + Hostname: "{service}.{region}.{dnsSuffix}", + Protocols: []string{"https"}, + SignatureVersions: []string{"v4"}, + }, + Regions: regions{ + "us-gov-east-1": region{ + Description: "AWS GovCloud (US-East)", + }, + "us-gov-west-1": region{ + Description: "AWS GovCloud (US)", + }, + }, + Services: services{ + "acm": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "acm-pca": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "api.ecr": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{ + Hostname: "api.ecr.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{ + Hostname: "api.ecr.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "api.sagemaker": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "apigateway": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "application-autoscaling": service{ + Defaults: endpoint{ + Hostname: "autoscaling.{region}.amazonaws.com", + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Service: "application-autoscaling", + }, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "appstream2": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + CredentialScope: credentialScope{ + Service: "appstream", + }, + }, + Endpoints: endpoints{ + "fips": endpoint{ + Hostname: "appstream2-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-west-1": endpoint{}, + }, + }, + "athena": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "autoscaling": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "clouddirectory": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "cloudformation": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "cloudhsm": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "cloudhsmv2": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "cloudhsm", + }, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "cloudtrail": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "codebuild": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "codecommit": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "codedeploy": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-east-1-fips": endpoint{ + Hostname: "codedeploy-fips.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "codedeploy-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "comprehend": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "config": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "datasync": service{ + + Endpoints: endpoints{ + "fips-us-gov-west-1": endpoint{ + Hostname: "datasync-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "directconnect": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "dms": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "ds": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "dynamodb": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-east-1-fips": endpoint{ + Hostname: "dynamodb.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "dynamodb.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "ec2": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "ec2metadata": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, + }, + }, + "ecs": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "elasticache": service{ + + Endpoints: endpoints{ + "fips": endpoint{ + Hostname: "elasticache-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "elasticbeanstalk": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "elasticfilesystem": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "elasticloadbalancing": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "elasticmapreduce": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"https"}, + }, + }, + }, + "es": service{ + + Endpoints: endpoints{ + "fips": endpoint{ + Hostname: "es-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "events": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "firehose": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "glacier": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "glue": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "greengrass": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "guardduty": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "health": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "iam": service{ + PartitionEndpoint: "aws-us-gov-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-us-gov-global": endpoint{ + Hostname: "iam.us-gov.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "inspector": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "iot": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "execute-api", + }, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "kinesis": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "ProdFips": endpoint{ + Hostname: "kms-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "lambda": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "license-manager": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "logs": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "mediaconvert": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "metering.marketplace": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "aws-marketplace", + }, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "monitoring": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "neptune": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{ + Hostname: "rds.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{ + Hostname: "rds.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "organizations": service{ + PartitionEndpoint: "aws-us-gov-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-us-gov-global": endpoint{ + Hostname: "organizations.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "polly": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "ram": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "rds": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "redshift": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "rekognition": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "resource-groups": service{ + + Endpoints: endpoints{ + "fips-us-gov-east-1": endpoint{ + Hostname: "resource-groups.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "fips-us-gov-west-1": endpoint{ + Hostname: "resource-groups.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "route53": service{ + PartitionEndpoint: "aws-us-gov-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-us-gov-global": endpoint{ + Hostname: "route53.us-gov.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "route53resolver": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "runtime.sagemaker": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "s3": service{ + Defaults: endpoint{ + SignatureVersions: []string{"s3", "s3v4"}, + }, + Endpoints: endpoints{ + "fips-us-gov-west-1": endpoint{ + Hostname: "s3-fips-us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{ + Hostname: "s3.us-gov-east-1.amazonaws.com", + Protocols: []string{"http", "https"}, + }, + "us-gov-west-1": endpoint{ + Hostname: "s3.us-gov-west-1.amazonaws.com", + Protocols: []string{"http", "https"}, + }, + }, + }, + "s3-control": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + SignatureVersions: []string{"s3v4"}, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{ + Hostname: "s3-control.us-gov-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-east-1-fips": endpoint{ + Hostname: "s3-control-fips.us-gov-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{ + Hostname: "s3-control.us-gov-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-west-1-fips": endpoint{ + Hostname: "s3-control-fips.us-gov-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "secretsmanager": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-east-1-fips": endpoint{ + Hostname: "secretsmanager-fips.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "secretsmanager-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "serverlessrepo": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{ + Protocols: []string{"https"}, + }, + "us-gov-west-1": endpoint{ + Protocols: []string{"https"}, + }, + }, + }, + "servicecatalog": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "servicecatalog-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "sms": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "snowball": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "sns": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "sqs": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + SSLCommonName: "{region}.queue.{dnsSuffix}", + Protocols: []string{"http", "https"}, + }, + }, + }, + "ssm": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "states": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "storagegateway": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "streams.dynamodb": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "dynamodb", + }, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-east-1-fips": endpoint{ + Hostname: "dynamodb.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "dynamodb.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "sts": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "swf": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "tagging": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "transcribe": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "translate": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "translate-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "waf-regional": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "workspaces": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + }, +} + +// AwsIsoPartition returns the Resolver for AWS ISO (US). +func AwsIsoPartition() Partition { + return awsisoPartition.Partition() +} + +var awsisoPartition = partition{ + ID: "aws-iso", + Name: "AWS ISO (US)", + DNSSuffix: "c2s.ic.gov", + RegionRegex: regionRegex{ + Regexp: func() *regexp.Regexp { + reg, _ := regexp.Compile("^us\\-iso\\-\\w+\\-\\d+$") + return reg + }(), + }, + Defaults: endpoint{ + Hostname: "{service}.{region}.{dnsSuffix}", + Protocols: []string{"https"}, + SignatureVersions: []string{"v4"}, + }, + Regions: regions{ + "us-iso-east-1": region{ + Description: "US ISO East", + }, + }, + Services: services{ + "api.ecr": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Hostname: "api.ecr.us-iso-east-1.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, + }, + }, + "api.sagemaker": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "apigateway": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "application-autoscaling": service{ + Defaults: endpoint{ + Hostname: "autoscaling.us-iso-east-1.c2s.ic.gov", + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "autoscaling": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "cloudformation": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "cloudtrail": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "codedeploy": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "config": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "datapipeline": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "directconnect": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "dms": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "ds": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "dynamodb": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "ec2": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "ec2metadata": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, + }, + }, + "ecs": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "elasticache": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "elasticloadbalancing": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "elasticmapreduce": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"https"}, + }, + }, + }, + "events": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "glacier": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "health": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "iam": service{ + PartitionEndpoint: "aws-iso-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-iso-global": endpoint{ + Hostname: "iam.us-iso-east-1.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, + }, + }, + "kinesis": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "ProdFips": endpoint{ + Hostname: "kms-fips.us-iso-east-1.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, + "us-iso-east-1": endpoint{}, + }, + }, + "lambda": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "logs": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "monitoring": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "rds": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "redshift": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "route53": service{ + PartitionEndpoint: "aws-iso-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-iso-global": endpoint{ + Hostname: "route53.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, + }, + }, + "runtime.sagemaker": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "s3": service{ + Defaults: endpoint{ + SignatureVersions: []string{"s3v4"}, + }, + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"s3v4"}, + }, + }, + }, + "snowball": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "sns": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "sqs": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "states": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "streams.dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Service: "dynamodb", + }, + }, + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "sts": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "support": service{ + PartitionEndpoint: "aws-iso-global", + + Endpoints: endpoints{ + "aws-iso-global": endpoint{ + Hostname: "support.us-iso-east-1.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, + }, + }, + "swf": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "workspaces": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + }, +} + +// AwsIsoBPartition returns the Resolver for AWS ISOB (US). +func AwsIsoBPartition() Partition { + return awsisobPartition.Partition() +} + +var awsisobPartition = partition{ + ID: "aws-iso-b", + Name: "AWS ISOB (US)", + DNSSuffix: "sc2s.sgov.gov", + RegionRegex: regionRegex{ + Regexp: func() *regexp.Regexp { + reg, _ := regexp.Compile("^us\\-isob\\-\\w+\\-\\d+$") + return reg + }(), + }, + Defaults: endpoint{ + Hostname: "{service}.{region}.{dnsSuffix}", + Protocols: []string{"https"}, + SignatureVersions: []string{"v4"}, + }, + Regions: regions{ + "us-isob-east-1": region{ + Description: "US ISOB East (Ohio)", + }, + }, + Services: services{ + "application-autoscaling": service{ + Defaults: endpoint{ + Hostname: "autoscaling.us-isob-east-1.sc2s.sgov.gov", + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "cloudformation": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "cloudtrail": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "config": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "directconnect": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "dms": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "ec2": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "ec2metadata": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, + }, + }, + "elasticache": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "elasticloadbalancing": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{ + Protocols: []string{"https"}, + }, + }, + }, + "elasticmapreduce": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "events": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "glacier": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "health": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "iam": service{ + PartitionEndpoint: "aws-iso-b-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-iso-b-global": endpoint{ + Hostname: "iam.us-isob-east-1.sc2s.sgov.gov", + CredentialScope: credentialScope{ + Region: "us-isob-east-1", + }, + }, + }, + }, + "kinesis": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "ProdFips": endpoint{ + Hostname: "kms-fips.us-isob-east-1.sc2s.sgov.gov", + CredentialScope: credentialScope{ + Region: "us-isob-east-1", + }, + }, + "us-isob-east-1": endpoint{}, + }, + }, + "logs": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "monitoring": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "rds": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "redshift": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "s3": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"s3v4"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "snowball": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "sns": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "sqs": service{ + Defaults: endpoint{ + SSLCommonName: "{region}.queue.{dnsSuffix}", + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "states": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "streams.dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Service: "dynamodb", + }, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "sts": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "support": service{ + PartitionEndpoint: "aws-iso-b-global", + + Endpoints: endpoints{ + "aws-iso-b-global": endpoint{ + Hostname: "support.us-isob-east-1.sc2s.sgov.gov", + CredentialScope: credentialScope{ + Region: "us-isob-east-1", + }, + }, + }, + }, + "swf": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + }, +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go new file mode 100644 index 00000000000..ca8fc828e15 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go @@ -0,0 +1,141 @@ +package endpoints + +// Service identifiers +// +// Deprecated: Use client package's EndpointsID value instead of these +// ServiceIDs. These IDs are not maintained, and are out of date. +const ( + A4bServiceID = "a4b" // A4b. + AcmServiceID = "acm" // Acm. + AcmPcaServiceID = "acm-pca" // AcmPca. + ApiMediatailorServiceID = "api.mediatailor" // ApiMediatailor. + ApiPricingServiceID = "api.pricing" // ApiPricing. + ApiSagemakerServiceID = "api.sagemaker" // ApiSagemaker. + ApigatewayServiceID = "apigateway" // Apigateway. + ApplicationAutoscalingServiceID = "application-autoscaling" // ApplicationAutoscaling. + Appstream2ServiceID = "appstream2" // Appstream2. + AppsyncServiceID = "appsync" // Appsync. + AthenaServiceID = "athena" // Athena. + AutoscalingServiceID = "autoscaling" // Autoscaling. + AutoscalingPlansServiceID = "autoscaling-plans" // AutoscalingPlans. + BatchServiceID = "batch" // Batch. + BudgetsServiceID = "budgets" // Budgets. + CeServiceID = "ce" // Ce. + ChimeServiceID = "chime" // Chime. + Cloud9ServiceID = "cloud9" // Cloud9. + ClouddirectoryServiceID = "clouddirectory" // Clouddirectory. + CloudformationServiceID = "cloudformation" // Cloudformation. + CloudfrontServiceID = "cloudfront" // Cloudfront. + CloudhsmServiceID = "cloudhsm" // Cloudhsm. + Cloudhsmv2ServiceID = "cloudhsmv2" // Cloudhsmv2. + CloudsearchServiceID = "cloudsearch" // Cloudsearch. + CloudtrailServiceID = "cloudtrail" // Cloudtrail. + CodebuildServiceID = "codebuild" // Codebuild. + CodecommitServiceID = "codecommit" // Codecommit. + CodedeployServiceID = "codedeploy" // Codedeploy. + CodepipelineServiceID = "codepipeline" // Codepipeline. + CodestarServiceID = "codestar" // Codestar. + CognitoIdentityServiceID = "cognito-identity" // CognitoIdentity. + CognitoIdpServiceID = "cognito-idp" // CognitoIdp. + CognitoSyncServiceID = "cognito-sync" // CognitoSync. + ComprehendServiceID = "comprehend" // Comprehend. + ConfigServiceID = "config" // Config. + CurServiceID = "cur" // Cur. + DatapipelineServiceID = "datapipeline" // Datapipeline. + DaxServiceID = "dax" // Dax. + DevicefarmServiceID = "devicefarm" // Devicefarm. + DirectconnectServiceID = "directconnect" // Directconnect. + DiscoveryServiceID = "discovery" // Discovery. + DmsServiceID = "dms" // Dms. + DsServiceID = "ds" // Ds. + DynamodbServiceID = "dynamodb" // Dynamodb. + Ec2ServiceID = "ec2" // Ec2. + Ec2metadataServiceID = "ec2metadata" // Ec2metadata. + EcrServiceID = "ecr" // Ecr. + EcsServiceID = "ecs" // Ecs. + ElasticacheServiceID = "elasticache" // Elasticache. + ElasticbeanstalkServiceID = "elasticbeanstalk" // Elasticbeanstalk. + ElasticfilesystemServiceID = "elasticfilesystem" // Elasticfilesystem. + ElasticloadbalancingServiceID = "elasticloadbalancing" // Elasticloadbalancing. + ElasticmapreduceServiceID = "elasticmapreduce" // Elasticmapreduce. + ElastictranscoderServiceID = "elastictranscoder" // Elastictranscoder. + EmailServiceID = "email" // Email. + EntitlementMarketplaceServiceID = "entitlement.marketplace" // EntitlementMarketplace. + EsServiceID = "es" // Es. + EventsServiceID = "events" // Events. + FirehoseServiceID = "firehose" // Firehose. + FmsServiceID = "fms" // Fms. + GameliftServiceID = "gamelift" // Gamelift. + GlacierServiceID = "glacier" // Glacier. + GlueServiceID = "glue" // Glue. + GreengrassServiceID = "greengrass" // Greengrass. + GuarddutyServiceID = "guardduty" // Guardduty. + HealthServiceID = "health" // Health. + IamServiceID = "iam" // Iam. + ImportexportServiceID = "importexport" // Importexport. + InspectorServiceID = "inspector" // Inspector. + IotServiceID = "iot" // Iot. + IotanalyticsServiceID = "iotanalytics" // Iotanalytics. + KinesisServiceID = "kinesis" // Kinesis. + KinesisanalyticsServiceID = "kinesisanalytics" // Kinesisanalytics. + KinesisvideoServiceID = "kinesisvideo" // Kinesisvideo. + KmsServiceID = "kms" // Kms. + LambdaServiceID = "lambda" // Lambda. + LightsailServiceID = "lightsail" // Lightsail. + LogsServiceID = "logs" // Logs. + MachinelearningServiceID = "machinelearning" // Machinelearning. + MarketplacecommerceanalyticsServiceID = "marketplacecommerceanalytics" // Marketplacecommerceanalytics. + MediaconvertServiceID = "mediaconvert" // Mediaconvert. + MedialiveServiceID = "medialive" // Medialive. + MediapackageServiceID = "mediapackage" // Mediapackage. + MediastoreServiceID = "mediastore" // Mediastore. + MeteringMarketplaceServiceID = "metering.marketplace" // MeteringMarketplace. + MghServiceID = "mgh" // Mgh. + MobileanalyticsServiceID = "mobileanalytics" // Mobileanalytics. + ModelsLexServiceID = "models.lex" // ModelsLex. + MonitoringServiceID = "monitoring" // Monitoring. + MturkRequesterServiceID = "mturk-requester" // MturkRequester. + NeptuneServiceID = "neptune" // Neptune. + OpsworksServiceID = "opsworks" // Opsworks. + OpsworksCmServiceID = "opsworks-cm" // OpsworksCm. + OrganizationsServiceID = "organizations" // Organizations. + PinpointServiceID = "pinpoint" // Pinpoint. + PollyServiceID = "polly" // Polly. + RdsServiceID = "rds" // Rds. + RedshiftServiceID = "redshift" // Redshift. + RekognitionServiceID = "rekognition" // Rekognition. + ResourceGroupsServiceID = "resource-groups" // ResourceGroups. + Route53ServiceID = "route53" // Route53. + Route53domainsServiceID = "route53domains" // Route53domains. + RuntimeLexServiceID = "runtime.lex" // RuntimeLex. + RuntimeSagemakerServiceID = "runtime.sagemaker" // RuntimeSagemaker. + S3ServiceID = "s3" // S3. + S3ControlServiceID = "s3-control" // S3Control. + SagemakerServiceID = "api.sagemaker" // Sagemaker. + SdbServiceID = "sdb" // Sdb. + SecretsmanagerServiceID = "secretsmanager" // Secretsmanager. + ServerlessrepoServiceID = "serverlessrepo" // Serverlessrepo. + ServicecatalogServiceID = "servicecatalog" // Servicecatalog. + ServicediscoveryServiceID = "servicediscovery" // Servicediscovery. + ShieldServiceID = "shield" // Shield. + SmsServiceID = "sms" // Sms. + SnowballServiceID = "snowball" // Snowball. + SnsServiceID = "sns" // Sns. + SqsServiceID = "sqs" // Sqs. + SsmServiceID = "ssm" // Ssm. + StatesServiceID = "states" // States. + StoragegatewayServiceID = "storagegateway" // Storagegateway. + StreamsDynamodbServiceID = "streams.dynamodb" // StreamsDynamodb. + StsServiceID = "sts" // Sts. + SupportServiceID = "support" // Support. + SwfServiceID = "swf" // Swf. + TaggingServiceID = "tagging" // Tagging. + TransferServiceID = "transfer" // Transfer. + TranslateServiceID = "translate" // Translate. + WafServiceID = "waf" // Waf. + WafRegionalServiceID = "waf-regional" // WafRegional. + WorkdocsServiceID = "workdocs" // Workdocs. + WorkmailServiceID = "workmail" // Workmail. + WorkspacesServiceID = "workspaces" // Workspaces. + XrayServiceID = "xray" // Xray. +) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go new file mode 100644 index 00000000000..84316b92c05 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go @@ -0,0 +1,66 @@ +// Package endpoints provides the types and functionality for defining regions +// and endpoints, as well as querying those definitions. +// +// The SDK's Regions and Endpoints metadata is code generated into the endpoints +// package, and is accessible via the DefaultResolver function. This function +// returns a endpoint Resolver will search the metadata and build an associated +// endpoint if one is found. The default resolver will search all partitions +// known by the SDK. e.g AWS Standard (aws), AWS China (aws-cn), and +// AWS GovCloud (US) (aws-us-gov). +// . +// +// Enumerating Regions and Endpoint Metadata +// +// Casting the Resolver returned by DefaultResolver to a EnumPartitions interface +// will allow you to get access to the list of underlying Partitions with the +// Partitions method. This is helpful if you want to limit the SDK's endpoint +// resolving to a single partition, or enumerate regions, services, and endpoints +// in the partition. +// +// resolver := endpoints.DefaultResolver() +// partitions := resolver.(endpoints.EnumPartitions).Partitions() +// +// for _, p := range partitions { +// fmt.Println("Regions for", p.ID()) +// for id, _ := range p.Regions() { +// fmt.Println("*", id) +// } +// +// fmt.Println("Services for", p.ID()) +// for id, _ := range p.Services() { +// fmt.Println("*", id) +// } +// } +// +// Using Custom Endpoints +// +// The endpoints package also gives you the ability to use your own logic how +// endpoints are resolved. This is a great way to define a custom endpoint +// for select services, without passing that logic down through your code. +// +// If a type implements the Resolver interface it can be used to resolve +// endpoints. To use this with the SDK's Session and Config set the value +// of the type to the EndpointsResolver field of aws.Config when initializing +// the session, or service client. +// +// In addition the ResolverFunc is a wrapper for a func matching the signature +// of Resolver.EndpointFor, converting it to a type that satisfies the +// Resolver interface. +// +// +// myCustomResolver := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) { +// if service == endpoints.S3ServiceID { +// return endpoints.ResolvedEndpoint{ +// URL: "s3.custom.endpoint.com", +// SigningRegion: "custom-signing-region", +// }, nil +// } +// +// return endpoints.DefaultResolver().EndpointFor(service, region, optFns...) +// } +// +// sess := session.Must(session.NewSession(&aws.Config{ +// Region: aws.String("us-west-2"), +// EndpointResolver: endpoints.ResolverFunc(myCustomResolver), +// })) +package endpoints diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go new file mode 100644 index 00000000000..1f53d9cb686 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go @@ -0,0 +1,564 @@ +package endpoints + +import ( + "fmt" + "regexp" + "strings" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +// Options provide the configuration needed to direct how the +// endpoints will be resolved. +type Options struct { + // DisableSSL forces the endpoint to be resolved as HTTP. + // instead of HTTPS if the service supports it. + DisableSSL bool + + // Sets the resolver to resolve the endpoint as a dualstack endpoint + // for the service. If dualstack support for a service is not known and + // StrictMatching is not enabled a dualstack endpoint for the service will + // be returned. This endpoint may not be valid. If StrictMatching is + // enabled only services that are known to support dualstack will return + // dualstack endpoints. + UseDualStack bool + + // Enables strict matching of services and regions resolved endpoints. + // If the partition doesn't enumerate the exact service and region an + // error will be returned. This option will prevent returning endpoints + // that look valid, but may not resolve to any real endpoint. + StrictMatching bool + + // Enables resolving a service endpoint based on the region provided if the + // service does not exist. The service endpoint ID will be used as the service + // domain name prefix. By default the endpoint resolver requires the service + // to be known when resolving endpoints. + // + // If resolving an endpoint on the partition list the provided region will + // be used to determine which partition's domain name pattern to the service + // endpoint ID with. If both the service and region are unknown and resolving + // the endpoint on partition list an UnknownEndpointError error will be returned. + // + // If resolving and endpoint on a partition specific resolver that partition's + // domain name pattern will be used with the service endpoint ID. If both + // region and service do not exist when resolving an endpoint on a specific + // partition the partition's domain pattern will be used to combine the + // endpoint and region together. + // + // This option is ignored if StrictMatching is enabled. + ResolveUnknownService bool + + // STS Regional Endpoint flag helps with resolving the STS endpoint + STSRegionalEndpoint STSRegionalEndpoint + + // S3 Regional Endpoint flag helps with resolving the S3 endpoint + S3UsEast1RegionalEndpoint S3UsEast1RegionalEndpoint +} + +// STSRegionalEndpoint is an enum for the states of the STS Regional Endpoint +// options. +type STSRegionalEndpoint int + +func (e STSRegionalEndpoint) String() string { + switch e { + case LegacySTSEndpoint: + return "legacy" + case RegionalSTSEndpoint: + return "regional" + case UnsetSTSEndpoint: + return "" + default: + return "unknown" + } +} + +const ( + + // UnsetSTSEndpoint represents that STS Regional Endpoint flag is not specified. + UnsetSTSEndpoint STSRegionalEndpoint = iota + + // LegacySTSEndpoint represents when STS Regional Endpoint flag is specified + // to use legacy endpoints. + LegacySTSEndpoint + + // RegionalSTSEndpoint represents when STS Regional Endpoint flag is specified + // to use regional endpoints. + RegionalSTSEndpoint +) + +// GetSTSRegionalEndpoint function returns the STSRegionalEndpointFlag based +// on the input string provided in env config or shared config by the user. +// +// `legacy`, `regional` are the only case-insensitive valid strings for +// resolving the STS regional Endpoint flag. +func GetSTSRegionalEndpoint(s string) (STSRegionalEndpoint, error) { + switch { + case strings.EqualFold(s, "legacy"): + return LegacySTSEndpoint, nil + case strings.EqualFold(s, "regional"): + return RegionalSTSEndpoint, nil + default: + return UnsetSTSEndpoint, fmt.Errorf("unable to resolve the value of STSRegionalEndpoint for %v", s) + } +} + +// S3UsEast1RegionalEndpoint is an enum for the states of the S3 us-east-1 +// Regional Endpoint options. +type S3UsEast1RegionalEndpoint int + +func (e S3UsEast1RegionalEndpoint) String() string { + switch e { + case LegacyS3UsEast1Endpoint: + return "legacy" + case RegionalS3UsEast1Endpoint: + return "regional" + case UnsetS3UsEast1Endpoint: + return "" + default: + return "unknown" + } +} + +const ( + + // UnsetS3UsEast1Endpoint represents that S3 Regional Endpoint flag is not + // specified. + UnsetS3UsEast1Endpoint S3UsEast1RegionalEndpoint = iota + + // LegacyS3UsEast1Endpoint represents when S3 Regional Endpoint flag is + // specified to use legacy endpoints. + LegacyS3UsEast1Endpoint + + // RegionalS3UsEast1Endpoint represents when S3 Regional Endpoint flag is + // specified to use regional endpoints. + RegionalS3UsEast1Endpoint +) + +// GetS3UsEast1RegionalEndpoint function returns the S3UsEast1RegionalEndpointFlag based +// on the input string provided in env config or shared config by the user. +// +// `legacy`, `regional` are the only case-insensitive valid strings for +// resolving the S3 regional Endpoint flag. +func GetS3UsEast1RegionalEndpoint(s string) (S3UsEast1RegionalEndpoint, error) { + switch { + case strings.EqualFold(s, "legacy"): + return LegacyS3UsEast1Endpoint, nil + case strings.EqualFold(s, "regional"): + return RegionalS3UsEast1Endpoint, nil + default: + return UnsetS3UsEast1Endpoint, + fmt.Errorf("unable to resolve the value of S3UsEast1RegionalEndpoint for %v", s) + } +} + +// Set combines all of the option functions together. +func (o *Options) Set(optFns ...func(*Options)) { + for _, fn := range optFns { + fn(o) + } +} + +// DisableSSLOption sets the DisableSSL options. Can be used as a functional +// option when resolving endpoints. +func DisableSSLOption(o *Options) { + o.DisableSSL = true +} + +// UseDualStackOption sets the UseDualStack option. Can be used as a functional +// option when resolving endpoints. +func UseDualStackOption(o *Options) { + o.UseDualStack = true +} + +// StrictMatchingOption sets the StrictMatching option. Can be used as a functional +// option when resolving endpoints. +func StrictMatchingOption(o *Options) { + o.StrictMatching = true +} + +// ResolveUnknownServiceOption sets the ResolveUnknownService option. Can be used +// as a functional option when resolving endpoints. +func ResolveUnknownServiceOption(o *Options) { + o.ResolveUnknownService = true +} + +// STSRegionalEndpointOption enables the STS endpoint resolver behavior to resolve +// STS endpoint to their regional endpoint, instead of the global endpoint. +func STSRegionalEndpointOption(o *Options) { + o.STSRegionalEndpoint = RegionalSTSEndpoint +} + +// A Resolver provides the interface for functionality to resolve endpoints. +// The build in Partition and DefaultResolver return value satisfy this interface. +type Resolver interface { + EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) +} + +// ResolverFunc is a helper utility that wraps a function so it satisfies the +// Resolver interface. This is useful when you want to add additional endpoint +// resolving logic, or stub out specific endpoints with custom values. +type ResolverFunc func(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) + +// EndpointFor wraps the ResolverFunc function to satisfy the Resolver interface. +func (fn ResolverFunc) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) { + return fn(service, region, opts...) +} + +var schemeRE = regexp.MustCompile("^([^:]+)://") + +// AddScheme adds the HTTP or HTTPS schemes to a endpoint URL if there is no +// scheme. If disableSSL is true HTTP will set HTTP instead of the default HTTPS. +// +// If disableSSL is set, it will only set the URL's scheme if the URL does not +// contain a scheme. +func AddScheme(endpoint string, disableSSL bool) string { + if !schemeRE.MatchString(endpoint) { + scheme := "https" + if disableSSL { + scheme = "http" + } + endpoint = fmt.Sprintf("%s://%s", scheme, endpoint) + } + + return endpoint +} + +// EnumPartitions a provides a way to retrieve the underlying partitions that +// make up the SDK's default Resolver, or any resolver decoded from a model +// file. +// +// Use this interface with DefaultResolver and DecodeModels to get the list of +// Partitions. +type EnumPartitions interface { + Partitions() []Partition +} + +// RegionsForService returns a map of regions for the partition and service. +// If either the partition or service does not exist false will be returned +// as the second parameter. +// +// This example shows how to get the regions for DynamoDB in the AWS partition. +// rs, exists := endpoints.RegionsForService(endpoints.DefaultPartitions(), endpoints.AwsPartitionID, endpoints.DynamodbServiceID) +// +// This is equivalent to using the partition directly. +// rs := endpoints.AwsPartition().Services()[endpoints.DynamodbServiceID].Regions() +func RegionsForService(ps []Partition, partitionID, serviceID string) (map[string]Region, bool) { + for _, p := range ps { + if p.ID() != partitionID { + continue + } + if _, ok := p.p.Services[serviceID]; !ok { + break + } + + s := Service{ + id: serviceID, + p: p.p, + } + return s.Regions(), true + } + + return map[string]Region{}, false +} + +// PartitionForRegion returns the first partition which includes the region +// passed in. This includes both known regions and regions which match +// a pattern supported by the partition which may include regions that are +// not explicitly known by the partition. Use the Regions method of the +// returned Partition if explicit support is needed. +func PartitionForRegion(ps []Partition, regionID string) (Partition, bool) { + for _, p := range ps { + if _, ok := p.p.Regions[regionID]; ok || p.p.RegionRegex.MatchString(regionID) { + return p, true + } + } + + return Partition{}, false +} + +// A Partition provides the ability to enumerate the partition's regions +// and services. +type Partition struct { + id, dnsSuffix string + p *partition +} + +// DNSSuffix returns the base domain name of the partition. +func (p Partition) DNSSuffix() string { return p.dnsSuffix } + +// ID returns the identifier of the partition. +func (p Partition) ID() string { return p.id } + +// EndpointFor attempts to resolve the endpoint based on service and region. +// See Options for information on configuring how the endpoint is resolved. +// +// If the service cannot be found in the metadata the UnknownServiceError +// error will be returned. This validation will occur regardless if +// StrictMatching is enabled. To enable resolving unknown services set the +// "ResolveUnknownService" option to true. When StrictMatching is disabled +// this option allows the partition resolver to resolve a endpoint based on +// the service endpoint ID provided. +// +// When resolving endpoints you can choose to enable StrictMatching. This will +// require the provided service and region to be known by the partition. +// If the endpoint cannot be strictly resolved an error will be returned. This +// mode is useful to ensure the endpoint resolved is valid. Without +// StrictMatching enabled the endpoint returned may look valid but may not work. +// StrictMatching requires the SDK to be updated if you want to take advantage +// of new regions and services expansions. +// +// Errors that can be returned. +// * UnknownServiceError +// * UnknownEndpointError +func (p Partition) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) { + return p.p.EndpointFor(service, region, opts...) +} + +// Regions returns a map of Regions indexed by their ID. This is useful for +// enumerating over the regions in a partition. +func (p Partition) Regions() map[string]Region { + rs := map[string]Region{} + for id, r := range p.p.Regions { + rs[id] = Region{ + id: id, + desc: r.Description, + p: p.p, + } + } + + return rs +} + +// Services returns a map of Service indexed by their ID. This is useful for +// enumerating over the services in a partition. +func (p Partition) Services() map[string]Service { + ss := map[string]Service{} + for id := range p.p.Services { + ss[id] = Service{ + id: id, + p: p.p, + } + } + + return ss +} + +// A Region provides information about a region, and ability to resolve an +// endpoint from the context of a region, given a service. +type Region struct { + id, desc string + p *partition +} + +// ID returns the region's identifier. +func (r Region) ID() string { return r.id } + +// Description returns the region's description. The region description +// is free text, it can be empty, and it may change between SDK releases. +func (r Region) Description() string { return r.desc } + +// ResolveEndpoint resolves an endpoint from the context of the region given +// a service. See Partition.EndpointFor for usage and errors that can be returned. +func (r Region) ResolveEndpoint(service string, opts ...func(*Options)) (ResolvedEndpoint, error) { + return r.p.EndpointFor(service, r.id, opts...) +} + +// Services returns a list of all services that are known to be in this region. +func (r Region) Services() map[string]Service { + ss := map[string]Service{} + for id, s := range r.p.Services { + if _, ok := s.Endpoints[r.id]; ok { + ss[id] = Service{ + id: id, + p: r.p, + } + } + } + + return ss +} + +// A Service provides information about a service, and ability to resolve an +// endpoint from the context of a service, given a region. +type Service struct { + id string + p *partition +} + +// ID returns the identifier for the service. +func (s Service) ID() string { return s.id } + +// ResolveEndpoint resolves an endpoint from the context of a service given +// a region. See Partition.EndpointFor for usage and errors that can be returned. +func (s Service) ResolveEndpoint(region string, opts ...func(*Options)) (ResolvedEndpoint, error) { + return s.p.EndpointFor(s.id, region, opts...) +} + +// Regions returns a map of Regions that the service is present in. +// +// A region is the AWS region the service exists in. Whereas a Endpoint is +// an URL that can be resolved to a instance of a service. +func (s Service) Regions() map[string]Region { + rs := map[string]Region{} + for id := range s.p.Services[s.id].Endpoints { + if r, ok := s.p.Regions[id]; ok { + rs[id] = Region{ + id: id, + desc: r.Description, + p: s.p, + } + } + } + + return rs +} + +// Endpoints returns a map of Endpoints indexed by their ID for all known +// endpoints for a service. +// +// A region is the AWS region the service exists in. Whereas a Endpoint is +// an URL that can be resolved to a instance of a service. +func (s Service) Endpoints() map[string]Endpoint { + es := map[string]Endpoint{} + for id := range s.p.Services[s.id].Endpoints { + es[id] = Endpoint{ + id: id, + serviceID: s.id, + p: s.p, + } + } + + return es +} + +// A Endpoint provides information about endpoints, and provides the ability +// to resolve that endpoint for the service, and the region the endpoint +// represents. +type Endpoint struct { + id string + serviceID string + p *partition +} + +// ID returns the identifier for an endpoint. +func (e Endpoint) ID() string { return e.id } + +// ServiceID returns the identifier the endpoint belongs to. +func (e Endpoint) ServiceID() string { return e.serviceID } + +// ResolveEndpoint resolves an endpoint from the context of a service and +// region the endpoint represents. See Partition.EndpointFor for usage and +// errors that can be returned. +func (e Endpoint) ResolveEndpoint(opts ...func(*Options)) (ResolvedEndpoint, error) { + return e.p.EndpointFor(e.serviceID, e.id, opts...) +} + +// A ResolvedEndpoint is an endpoint that has been resolved based on a partition +// service, and region. +type ResolvedEndpoint struct { + // The endpoint URL + URL string + + // The endpoint partition + PartitionID string + + // The region that should be used for signing requests. + SigningRegion string + + // The service name that should be used for signing requests. + SigningName string + + // States that the signing name for this endpoint was derived from metadata + // passed in, but was not explicitly modeled. + SigningNameDerived bool + + // The signing method that should be used for signing requests. + SigningMethod string +} + +// So that the Error interface type can be included as an anonymous field +// in the requestError struct and not conflict with the error.Error() method. +type awsError awserr.Error + +// A EndpointNotFoundError is returned when in StrictMatching mode, and the +// endpoint for the service and region cannot be found in any of the partitions. +type EndpointNotFoundError struct { + awsError + Partition string + Service string + Region string +} + +// A UnknownServiceError is returned when the service does not resolve to an +// endpoint. Includes a list of all known services for the partition. Returned +// when a partition does not support the service. +type UnknownServiceError struct { + awsError + Partition string + Service string + Known []string +} + +// NewUnknownServiceError builds and returns UnknownServiceError. +func NewUnknownServiceError(p, s string, known []string) UnknownServiceError { + return UnknownServiceError{ + awsError: awserr.New("UnknownServiceError", + "could not resolve endpoint for unknown service", nil), + Partition: p, + Service: s, + Known: known, + } +} + +// String returns the string representation of the error. +func (e UnknownServiceError) Error() string { + extra := fmt.Sprintf("partition: %q, service: %q", + e.Partition, e.Service) + if len(e.Known) > 0 { + extra += fmt.Sprintf(", known: %v", e.Known) + } + return awserr.SprintError(e.Code(), e.Message(), extra, e.OrigErr()) +} + +// String returns the string representation of the error. +func (e UnknownServiceError) String() string { + return e.Error() +} + +// A UnknownEndpointError is returned when in StrictMatching mode and the +// service is valid, but the region does not resolve to an endpoint. Includes +// a list of all known endpoints for the service. +type UnknownEndpointError struct { + awsError + Partition string + Service string + Region string + Known []string +} + +// NewUnknownEndpointError builds and returns UnknownEndpointError. +func NewUnknownEndpointError(p, s, r string, known []string) UnknownEndpointError { + return UnknownEndpointError{ + awsError: awserr.New("UnknownEndpointError", + "could not resolve endpoint", nil), + Partition: p, + Service: s, + Region: r, + Known: known, + } +} + +// String returns the string representation of the error. +func (e UnknownEndpointError) Error() string { + extra := fmt.Sprintf("partition: %q, service: %q, region: %q", + e.Partition, e.Service, e.Region) + if len(e.Known) > 0 { + extra += fmt.Sprintf(", known: %v", e.Known) + } + return awserr.SprintError(e.Code(), e.Message(), extra, e.OrigErr()) +} + +// String returns the string representation of the error. +func (e UnknownEndpointError) String() string { + return e.Error() +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go new file mode 100644 index 00000000000..df75e899adb --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go @@ -0,0 +1,24 @@ +package endpoints + +var legacyGlobalRegions = map[string]map[string]struct{}{ + "sts": { + "ap-northeast-1": {}, + "ap-south-1": {}, + "ap-southeast-1": {}, + "ap-southeast-2": {}, + "ca-central-1": {}, + "eu-central-1": {}, + "eu-north-1": {}, + "eu-west-1": {}, + "eu-west-2": {}, + "eu-west-3": {}, + "sa-east-1": {}, + "us-east-1": {}, + "us-east-2": {}, + "us-west-1": {}, + "us-west-2": {}, + }, + "s3": { + "us-east-1": {}, + }, +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go new file mode 100644 index 00000000000..eb2ac83c992 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go @@ -0,0 +1,341 @@ +package endpoints + +import ( + "fmt" + "regexp" + "strconv" + "strings" +) + +type partitions []partition + +func (ps partitions) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) { + var opt Options + opt.Set(opts...) + + for i := 0; i < len(ps); i++ { + if !ps[i].canResolveEndpoint(service, region, opt.StrictMatching) { + continue + } + + return ps[i].EndpointFor(service, region, opts...) + } + + // If loose matching fallback to first partition format to use + // when resolving the endpoint. + if !opt.StrictMatching && len(ps) > 0 { + return ps[0].EndpointFor(service, region, opts...) + } + + return ResolvedEndpoint{}, NewUnknownEndpointError("all partitions", service, region, []string{}) +} + +// Partitions satisfies the EnumPartitions interface and returns a list +// of Partitions representing each partition represented in the SDK's +// endpoints model. +func (ps partitions) Partitions() []Partition { + parts := make([]Partition, 0, len(ps)) + for i := 0; i < len(ps); i++ { + parts = append(parts, ps[i].Partition()) + } + + return parts +} + +type partition struct { + ID string `json:"partition"` + Name string `json:"partitionName"` + DNSSuffix string `json:"dnsSuffix"` + RegionRegex regionRegex `json:"regionRegex"` + Defaults endpoint `json:"defaults"` + Regions regions `json:"regions"` + Services services `json:"services"` +} + +func (p partition) Partition() Partition { + return Partition{ + dnsSuffix: p.DNSSuffix, + id: p.ID, + p: &p, + } +} + +func (p partition) canResolveEndpoint(service, region string, strictMatch bool) bool { + s, hasService := p.Services[service] + _, hasEndpoint := s.Endpoints[region] + + if hasEndpoint && hasService { + return true + } + + if strictMatch { + return false + } + + return p.RegionRegex.MatchString(region) +} + +func allowLegacyEmptyRegion(service string) bool { + legacy := map[string]struct{}{ + "budgets": {}, + "ce": {}, + "chime": {}, + "cloudfront": {}, + "ec2metadata": {}, + "iam": {}, + "importexport": {}, + "organizations": {}, + "route53": {}, + "sts": {}, + "support": {}, + "waf": {}, + } + + _, allowed := legacy[service] + return allowed +} + +func (p partition) EndpointFor(service, region string, opts ...func(*Options)) (resolved ResolvedEndpoint, err error) { + var opt Options + opt.Set(opts...) + + s, hasService := p.Services[service] + if len(service) == 0 || !(hasService || opt.ResolveUnknownService) { + // Only return error if the resolver will not fallback to creating + // endpoint based on service endpoint ID passed in. + return resolved, NewUnknownServiceError(p.ID, service, serviceList(p.Services)) + } + + if len(region) == 0 && allowLegacyEmptyRegion(service) && len(s.PartitionEndpoint) != 0 { + region = s.PartitionEndpoint + } + + if (service == "sts" && opt.STSRegionalEndpoint != RegionalSTSEndpoint) || + (service == "s3" && opt.S3UsEast1RegionalEndpoint != RegionalS3UsEast1Endpoint) { + if _, ok := legacyGlobalRegions[service][region]; ok { + region = "aws-global" + } + } + + e, hasEndpoint := s.endpointForRegion(region) + if len(region) == 0 || (!hasEndpoint && opt.StrictMatching) { + return resolved, NewUnknownEndpointError(p.ID, service, region, endpointList(s.Endpoints)) + } + + defs := []endpoint{p.Defaults, s.Defaults} + + return e.resolve(service, p.ID, region, p.DNSSuffix, defs, opt), nil +} + +func serviceList(ss services) []string { + list := make([]string, 0, len(ss)) + for k := range ss { + list = append(list, k) + } + return list +} +func endpointList(es endpoints) []string { + list := make([]string, 0, len(es)) + for k := range es { + list = append(list, k) + } + return list +} + +type regionRegex struct { + *regexp.Regexp +} + +func (rr *regionRegex) UnmarshalJSON(b []byte) (err error) { + // Strip leading and trailing quotes + regex, err := strconv.Unquote(string(b)) + if err != nil { + return fmt.Errorf("unable to strip quotes from regex, %v", err) + } + + rr.Regexp, err = regexp.Compile(regex) + if err != nil { + return fmt.Errorf("unable to unmarshal region regex, %v", err) + } + return nil +} + +type regions map[string]region + +type region struct { + Description string `json:"description"` +} + +type services map[string]service + +type service struct { + PartitionEndpoint string `json:"partitionEndpoint"` + IsRegionalized boxedBool `json:"isRegionalized,omitempty"` + Defaults endpoint `json:"defaults"` + Endpoints endpoints `json:"endpoints"` +} + +func (s *service) endpointForRegion(region string) (endpoint, bool) { + if s.IsRegionalized == boxedFalse { + return s.Endpoints[s.PartitionEndpoint], region == s.PartitionEndpoint + } + + if e, ok := s.Endpoints[region]; ok { + return e, true + } + + // Unable to find any matching endpoint, return + // blank that will be used for generic endpoint creation. + return endpoint{}, false +} + +type endpoints map[string]endpoint + +type endpoint struct { + Hostname string `json:"hostname"` + Protocols []string `json:"protocols"` + CredentialScope credentialScope `json:"credentialScope"` + + // Custom fields not modeled + HasDualStack boxedBool `json:"-"` + DualStackHostname string `json:"-"` + + // Signature Version not used + SignatureVersions []string `json:"signatureVersions"` + + // SSLCommonName not used. + SSLCommonName string `json:"sslCommonName"` +} + +const ( + defaultProtocol = "https" + defaultSigner = "v4" +) + +var ( + protocolPriority = []string{"https", "http"} + signerPriority = []string{"v4", "v2"} +) + +func getByPriority(s []string, p []string, def string) string { + if len(s) == 0 { + return def + } + + for i := 0; i < len(p); i++ { + for j := 0; j < len(s); j++ { + if s[j] == p[i] { + return s[j] + } + } + } + + return s[0] +} + +func (e endpoint) resolve(service, partitionID, region, dnsSuffix string, defs []endpoint, opts Options) ResolvedEndpoint { + var merged endpoint + for _, def := range defs { + merged.mergeIn(def) + } + merged.mergeIn(e) + e = merged + + signingRegion := e.CredentialScope.Region + if len(signingRegion) == 0 { + signingRegion = region + } + + signingName := e.CredentialScope.Service + var signingNameDerived bool + if len(signingName) == 0 { + signingName = service + signingNameDerived = true + } + + hostname := e.Hostname + // Offset the hostname for dualstack if enabled + if opts.UseDualStack && e.HasDualStack == boxedTrue { + hostname = e.DualStackHostname + region = signingRegion + } + + u := strings.Replace(hostname, "{service}", service, 1) + u = strings.Replace(u, "{region}", region, 1) + u = strings.Replace(u, "{dnsSuffix}", dnsSuffix, 1) + + scheme := getEndpointScheme(e.Protocols, opts.DisableSSL) + u = fmt.Sprintf("%s://%s", scheme, u) + + return ResolvedEndpoint{ + URL: u, + PartitionID: partitionID, + SigningRegion: signingRegion, + SigningName: signingName, + SigningNameDerived: signingNameDerived, + SigningMethod: getByPriority(e.SignatureVersions, signerPriority, defaultSigner), + } +} + +func getEndpointScheme(protocols []string, disableSSL bool) string { + if disableSSL { + return "http" + } + + return getByPriority(protocols, protocolPriority, defaultProtocol) +} + +func (e *endpoint) mergeIn(other endpoint) { + if len(other.Hostname) > 0 { + e.Hostname = other.Hostname + } + if len(other.Protocols) > 0 { + e.Protocols = other.Protocols + } + if len(other.SignatureVersions) > 0 { + e.SignatureVersions = other.SignatureVersions + } + if len(other.CredentialScope.Region) > 0 { + e.CredentialScope.Region = other.CredentialScope.Region + } + if len(other.CredentialScope.Service) > 0 { + e.CredentialScope.Service = other.CredentialScope.Service + } + if len(other.SSLCommonName) > 0 { + e.SSLCommonName = other.SSLCommonName + } + if other.HasDualStack != boxedBoolUnset { + e.HasDualStack = other.HasDualStack + } + if len(other.DualStackHostname) > 0 { + e.DualStackHostname = other.DualStackHostname + } +} + +type credentialScope struct { + Region string `json:"region"` + Service string `json:"service"` +} + +type boxedBool int + +func (b *boxedBool) UnmarshalJSON(buf []byte) error { + v, err := strconv.ParseBool(string(buf)) + if err != nil { + return err + } + + if v { + *b = boxedTrue + } else { + *b = boxedFalse + } + + return nil +} + +const ( + boxedBoolUnset boxedBool = iota + boxedFalse + boxedTrue +) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go new file mode 100644 index 00000000000..0fdfcc56e05 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go @@ -0,0 +1,351 @@ +// +build codegen + +package endpoints + +import ( + "fmt" + "io" + "reflect" + "strings" + "text/template" + "unicode" +) + +// A CodeGenOptions are the options for code generating the endpoints into +// Go code from the endpoints model definition. +type CodeGenOptions struct { + // Options for how the model will be decoded. + DecodeModelOptions DecodeModelOptions + + // Disables code generation of the service endpoint prefix IDs defined in + // the model. + DisableGenerateServiceIDs bool +} + +// Set combines all of the option functions together +func (d *CodeGenOptions) Set(optFns ...func(*CodeGenOptions)) { + for _, fn := range optFns { + fn(d) + } +} + +// CodeGenModel given a endpoints model file will decode it and attempt to +// generate Go code from the model definition. Error will be returned if +// the code is unable to be generated, or decoded. +func CodeGenModel(modelFile io.Reader, outFile io.Writer, optFns ...func(*CodeGenOptions)) error { + var opts CodeGenOptions + opts.Set(optFns...) + + resolver, err := DecodeModel(modelFile, func(d *DecodeModelOptions) { + *d = opts.DecodeModelOptions + }) + if err != nil { + return err + } + + v := struct { + Resolver + CodeGenOptions + }{ + Resolver: resolver, + CodeGenOptions: opts, + } + + tmpl := template.Must(template.New("tmpl").Funcs(funcMap).Parse(v3Tmpl)) + if err := tmpl.ExecuteTemplate(outFile, "defaults", v); err != nil { + return fmt.Errorf("failed to execute template, %v", err) + } + + return nil +} + +func toSymbol(v string) string { + out := []rune{} + for _, c := range strings.Title(v) { + if !(unicode.IsNumber(c) || unicode.IsLetter(c)) { + continue + } + + out = append(out, c) + } + + return string(out) +} + +func quoteString(v string) string { + return fmt.Sprintf("%q", v) +} + +func regionConstName(p, r string) string { + return toSymbol(p) + toSymbol(r) +} + +func partitionGetter(id string) string { + return fmt.Sprintf("%sPartition", toSymbol(id)) +} + +func partitionVarName(id string) string { + return fmt.Sprintf("%sPartition", strings.ToLower(toSymbol(id))) +} + +func listPartitionNames(ps partitions) string { + names := []string{} + switch len(ps) { + case 1: + return ps[0].Name + case 2: + return fmt.Sprintf("%s and %s", ps[0].Name, ps[1].Name) + default: + for i, p := range ps { + if i == len(ps)-1 { + names = append(names, "and "+p.Name) + } else { + names = append(names, p.Name) + } + } + return strings.Join(names, ", ") + } +} + +func boxedBoolIfSet(msg string, v boxedBool) string { + switch v { + case boxedTrue: + return fmt.Sprintf(msg, "boxedTrue") + case boxedFalse: + return fmt.Sprintf(msg, "boxedFalse") + default: + return "" + } +} + +func stringIfSet(msg, v string) string { + if len(v) == 0 { + return "" + } + + return fmt.Sprintf(msg, v) +} + +func stringSliceIfSet(msg string, vs []string) string { + if len(vs) == 0 { + return "" + } + + names := []string{} + for _, v := range vs { + names = append(names, `"`+v+`"`) + } + + return fmt.Sprintf(msg, strings.Join(names, ",")) +} + +func endpointIsSet(v endpoint) bool { + return !reflect.DeepEqual(v, endpoint{}) +} + +func serviceSet(ps partitions) map[string]struct{} { + set := map[string]struct{}{} + for _, p := range ps { + for id := range p.Services { + set[id] = struct{}{} + } + } + + return set +} + +var funcMap = template.FuncMap{ + "ToSymbol": toSymbol, + "QuoteString": quoteString, + "RegionConst": regionConstName, + "PartitionGetter": partitionGetter, + "PartitionVarName": partitionVarName, + "ListPartitionNames": listPartitionNames, + "BoxedBoolIfSet": boxedBoolIfSet, + "StringIfSet": stringIfSet, + "StringSliceIfSet": stringSliceIfSet, + "EndpointIsSet": endpointIsSet, + "ServicesSet": serviceSet, +} + +const v3Tmpl = ` +{{ define "defaults" -}} +// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT. + +package endpoints + +import ( + "regexp" +) + + {{ template "partition consts" $.Resolver }} + + {{ range $_, $partition := $.Resolver }} + {{ template "partition region consts" $partition }} + {{ end }} + + {{ if not $.DisableGenerateServiceIDs -}} + {{ template "service consts" $.Resolver }} + {{- end }} + + {{ template "endpoint resolvers" $.Resolver }} +{{- end }} + +{{ define "partition consts" }} + // Partition identifiers + const ( + {{ range $_, $p := . -}} + {{ ToSymbol $p.ID }}PartitionID = {{ QuoteString $p.ID }} // {{ $p.Name }} partition. + {{ end -}} + ) +{{- end }} + +{{ define "partition region consts" }} + // {{ .Name }} partition's regions. + const ( + {{ range $id, $region := .Regions -}} + {{ ToSymbol $id }}RegionID = {{ QuoteString $id }} // {{ $region.Description }}. + {{ end -}} + ) +{{- end }} + +{{ define "service consts" }} + // Service identifiers + const ( + {{ $serviceSet := ServicesSet . -}} + {{ range $id, $_ := $serviceSet -}} + {{ ToSymbol $id }}ServiceID = {{ QuoteString $id }} // {{ ToSymbol $id }}. + {{ end -}} + ) +{{- end }} + +{{ define "endpoint resolvers" }} + // DefaultResolver returns an Endpoint resolver that will be able + // to resolve endpoints for: {{ ListPartitionNames . }}. + // + // Use DefaultPartitions() to get the list of the default partitions. + func DefaultResolver() Resolver { + return defaultPartitions + } + + // DefaultPartitions returns a list of the partitions the SDK is bundled + // with. The available partitions are: {{ ListPartitionNames . }}. + // + // partitions := endpoints.DefaultPartitions + // for _, p := range partitions { + // // ... inspect partitions + // } + func DefaultPartitions() []Partition { + return defaultPartitions.Partitions() + } + + var defaultPartitions = partitions{ + {{ range $_, $partition := . -}} + {{ PartitionVarName $partition.ID }}, + {{ end }} + } + + {{ range $_, $partition := . -}} + {{ $name := PartitionGetter $partition.ID -}} + // {{ $name }} returns the Resolver for {{ $partition.Name }}. + func {{ $name }}() Partition { + return {{ PartitionVarName $partition.ID }}.Partition() + } + var {{ PartitionVarName $partition.ID }} = {{ template "gocode Partition" $partition }} + {{ end }} +{{ end }} + +{{ define "default partitions" }} + func DefaultPartitions() []Partition { + return []partition{ + {{ range $_, $partition := . -}} + // {{ ToSymbol $partition.ID}}Partition(), + {{ end }} + } + } +{{ end }} + +{{ define "gocode Partition" -}} +partition{ + {{ StringIfSet "ID: %q,\n" .ID -}} + {{ StringIfSet "Name: %q,\n" .Name -}} + {{ StringIfSet "DNSSuffix: %q,\n" .DNSSuffix -}} + RegionRegex: {{ template "gocode RegionRegex" .RegionRegex }}, + {{ if EndpointIsSet .Defaults -}} + Defaults: {{ template "gocode Endpoint" .Defaults }}, + {{- end }} + Regions: {{ template "gocode Regions" .Regions }}, + Services: {{ template "gocode Services" .Services }}, +} +{{- end }} + +{{ define "gocode RegionRegex" -}} +regionRegex{ + Regexp: func() *regexp.Regexp{ + reg, _ := regexp.Compile({{ QuoteString .Regexp.String }}) + return reg + }(), +} +{{- end }} + +{{ define "gocode Regions" -}} +regions{ + {{ range $id, $region := . -}} + "{{ $id }}": {{ template "gocode Region" $region }}, + {{ end -}} +} +{{- end }} + +{{ define "gocode Region" -}} +region{ + {{ StringIfSet "Description: %q,\n" .Description -}} +} +{{- end }} + +{{ define "gocode Services" -}} +services{ + {{ range $id, $service := . -}} + "{{ $id }}": {{ template "gocode Service" $service }}, + {{ end }} +} +{{- end }} + +{{ define "gocode Service" -}} +service{ + {{ StringIfSet "PartitionEndpoint: %q,\n" .PartitionEndpoint -}} + {{ BoxedBoolIfSet "IsRegionalized: %s,\n" .IsRegionalized -}} + {{ if EndpointIsSet .Defaults -}} + Defaults: {{ template "gocode Endpoint" .Defaults -}}, + {{- end }} + {{ if .Endpoints -}} + Endpoints: {{ template "gocode Endpoints" .Endpoints }}, + {{- end }} +} +{{- end }} + +{{ define "gocode Endpoints" -}} +endpoints{ + {{ range $id, $endpoint := . -}} + "{{ $id }}": {{ template "gocode Endpoint" $endpoint }}, + {{ end }} +} +{{- end }} + +{{ define "gocode Endpoint" -}} +endpoint{ + {{ StringIfSet "Hostname: %q,\n" .Hostname -}} + {{ StringIfSet "SSLCommonName: %q,\n" .SSLCommonName -}} + {{ StringSliceIfSet "Protocols: []string{%s},\n" .Protocols -}} + {{ StringSliceIfSet "SignatureVersions: []string{%s},\n" .SignatureVersions -}} + {{ if or .CredentialScope.Region .CredentialScope.Service -}} + CredentialScope: credentialScope{ + {{ StringIfSet "Region: %q,\n" .CredentialScope.Region -}} + {{ StringIfSet "Service: %q,\n" .CredentialScope.Service -}} + }, + {{- end }} + {{ BoxedBoolIfSet "HasDualStack: %s,\n" .HasDualStack -}} + {{ StringIfSet "DualStackHostname: %q,\n" .DualStackHostname -}} + +} +{{- end }} +` diff --git a/vendor/github.com/aws/aws-sdk-go/aws/errors.go b/vendor/github.com/aws/aws-sdk-go/aws/errors.go index 57663616868..fa06f7a8f8b 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/errors.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/errors.go @@ -5,13 +5,9 @@ import "github.com/aws/aws-sdk-go/aws/awserr" var ( // ErrMissingRegion is an error that is returned if region configuration is // not found. - // - // @readonly ErrMissingRegion = awserr.New("MissingRegion", "could not find region configuration", nil) // ErrMissingEndpoint is an error that is returned if an endpoint cannot be // resolved for a service. - // - // @readonly ErrMissingEndpoint = awserr.New("MissingEndpoint", "'Endpoint' configuration is required for this service", nil) ) diff --git a/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go b/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go new file mode 100644 index 00000000000..91a6f277a7e --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go @@ -0,0 +1,12 @@ +package aws + +// JSONValue is a representation of a grab bag type that will be marshaled +// into a json string. This type can be used just like any other map. +// +// Example: +// +// values := aws.JSONValue{ +// "Foo": "Bar", +// } +// values["Baz"] = "Qux" +type JSONValue map[string]interface{} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/logger.go b/vendor/github.com/aws/aws-sdk-go/aws/logger.go index f5369487384..6ed15b2ecc2 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/logger.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/logger.go @@ -26,14 +26,14 @@ func (l *LogLevelType) Value() LogLevelType { // Matches returns true if the v LogLevel is enabled by this LogLevel. Should be // used with logging sub levels. Is safe to use on nil value LogLevelTypes. If -// LogLevel is nill, will default to LogOff comparison. +// LogLevel is nil, will default to LogOff comparison. func (l *LogLevelType) Matches(v LogLevelType) bool { c := l.Value() return c&v == v } // AtLeast returns true if this LogLevel is at least high enough to satisfies v. -// Is safe to use on nil value LogLevelTypes. If LogLevel is nill, will default +// Is safe to use on nil value LogLevelTypes. If LogLevel is nil, will default // to LogOff comparison. func (l *LogLevelType) AtLeast(v LogLevelType) bool { c := l.Value() @@ -71,6 +71,12 @@ const ( // LogDebugWithRequestErrors states the SDK should log when service requests fail // to build, send, validate, or unmarshal. LogDebugWithRequestErrors + + // LogDebugWithEventStreamBody states the SDK should log EventStream + // request and response bodys. This should be used to log the EventStream + // wire unmarshaled message content of requests and responses made while + // using the SDK Will also enable LogDebug. + LogDebugWithEventStreamBody ) // A Logger is a minimalistic interface for the SDK to log messages to. Should @@ -79,6 +85,20 @@ type Logger interface { Log(...interface{}) } +// A LoggerFunc is a convenience type to convert a function taking a variadic +// list of arguments and wrap it so the Logger interface can be used. +// +// Example: +// s3.New(sess, &aws.Config{Logger: aws.LoggerFunc(func(args ...interface{}) { +// fmt.Fprintln(os.Stdout, args...) +// })}) +type LoggerFunc func(...interface{}) + +// Log calls the wrapped function with the arguments provided +func (f LoggerFunc) Log(args ...interface{}) { + f(args...) +} + // NewDefaultLogger returns a Logger which will write log messages to stdout, and // use same formatting runes as the stdlib log.Logger func NewDefaultLogger() Logger { diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go b/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go new file mode 100644 index 00000000000..d9b37f4d32a --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go @@ -0,0 +1,18 @@ +package request + +import ( + "strings" +) + +func isErrConnectionReset(err error) bool { + if strings.Contains(err.Error(), "read: connection reset") { + return false + } + + if strings.Contains(err.Error(), "connection reset") || + strings.Contains(err.Error(), "broken pipe") { + return true + } + + return false +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go b/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go index 3e90a7976ae..185b073181e 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go @@ -14,13 +14,16 @@ type Handlers struct { Send HandlerList ValidateResponse HandlerList Unmarshal HandlerList + UnmarshalStream HandlerList UnmarshalMeta HandlerList UnmarshalError HandlerList Retry HandlerList AfterRetry HandlerList + CompleteAttempt HandlerList + Complete HandlerList } -// Copy returns of this handler's lists. +// Copy returns a copy of this handler's lists. func (h *Handlers) Copy() Handlers { return Handlers{ Validate: h.Validate.copy(), @@ -29,30 +32,100 @@ func (h *Handlers) Copy() Handlers { Send: h.Send.copy(), ValidateResponse: h.ValidateResponse.copy(), Unmarshal: h.Unmarshal.copy(), + UnmarshalStream: h.UnmarshalStream.copy(), UnmarshalError: h.UnmarshalError.copy(), UnmarshalMeta: h.UnmarshalMeta.copy(), Retry: h.Retry.copy(), AfterRetry: h.AfterRetry.copy(), + CompleteAttempt: h.CompleteAttempt.copy(), + Complete: h.Complete.copy(), } } -// Clear removes callback functions for all handlers +// Clear removes callback functions for all handlers. func (h *Handlers) Clear() { h.Validate.Clear() h.Build.Clear() h.Send.Clear() h.Sign.Clear() h.Unmarshal.Clear() + h.UnmarshalStream.Clear() h.UnmarshalMeta.Clear() h.UnmarshalError.Clear() h.ValidateResponse.Clear() h.Retry.Clear() h.AfterRetry.Clear() + h.CompleteAttempt.Clear() + h.Complete.Clear() +} + +// IsEmpty returns if there are no handlers in any of the handlerlists. +func (h *Handlers) IsEmpty() bool { + if h.Validate.Len() != 0 { + return false + } + if h.Build.Len() != 0 { + return false + } + if h.Send.Len() != 0 { + return false + } + if h.Sign.Len() != 0 { + return false + } + if h.Unmarshal.Len() != 0 { + return false + } + if h.UnmarshalStream.Len() != 0 { + return false + } + if h.UnmarshalMeta.Len() != 0 { + return false + } + if h.UnmarshalError.Len() != 0 { + return false + } + if h.ValidateResponse.Len() != 0 { + return false + } + if h.Retry.Len() != 0 { + return false + } + if h.AfterRetry.Len() != 0 { + return false + } + if h.CompleteAttempt.Len() != 0 { + return false + } + if h.Complete.Len() != 0 { + return false + } + + return true +} + +// A HandlerListRunItem represents an entry in the HandlerList which +// is being run. +type HandlerListRunItem struct { + Index int + Handler NamedHandler + Request *Request } // A HandlerList manages zero or more handlers in a list. type HandlerList struct { list []NamedHandler + + // Called after each request handler in the list is called. If set + // and the func returns true the HandlerList will continue to iterate + // over the request handlers. If false is returned the HandlerList + // will stop iterating. + // + // Should be used if extra logic to be performed between each handler + // in the list. This can be used to terminate a list's iteration + // based on a condition such as error like, HandlerListStopOnError. + // Or for logging like HandlerListLogItem. + AfterEachFn func(item HandlerListRunItem) bool } // A NamedHandler is a struct that contains a name and function callback. @@ -63,14 +136,20 @@ type NamedHandler struct { // copy creates a copy of the handler list. func (l *HandlerList) copy() HandlerList { - var n HandlerList - n.list = append([]NamedHandler{}, l.list...) + n := HandlerList{ + AfterEachFn: l.AfterEachFn, + } + if len(l.list) == 0 { + return n + } + + n.list = append(make([]NamedHandler, 0, len(l.list)), l.list...) return n } // Clear clears the handler list. func (l *HandlerList) Clear() { - l.list = []NamedHandler{} + l.list = l.list[0:0] } // Len returns the number of handlers in the list. @@ -80,39 +159,142 @@ func (l *HandlerList) Len() int { // PushBack pushes handler f to the back of the handler list. func (l *HandlerList) PushBack(f func(*Request)) { - l.list = append(l.list, NamedHandler{"__anonymous", f}) -} - -// PushFront pushes handler f to the front of the handler list. -func (l *HandlerList) PushFront(f func(*Request)) { - l.list = append([]NamedHandler{{"__anonymous", f}}, l.list...) + l.PushBackNamed(NamedHandler{"__anonymous", f}) } // PushBackNamed pushes named handler f to the back of the handler list. func (l *HandlerList) PushBackNamed(n NamedHandler) { + if cap(l.list) == 0 { + l.list = make([]NamedHandler, 0, 5) + } l.list = append(l.list, n) } +// PushFront pushes handler f to the front of the handler list. +func (l *HandlerList) PushFront(f func(*Request)) { + l.PushFrontNamed(NamedHandler{"__anonymous", f}) +} + // PushFrontNamed pushes named handler f to the front of the handler list. func (l *HandlerList) PushFrontNamed(n NamedHandler) { - l.list = append([]NamedHandler{n}, l.list...) + if cap(l.list) == len(l.list) { + // Allocating new list required + l.list = append([]NamedHandler{n}, l.list...) + } else { + // Enough room to prepend into list. + l.list = append(l.list, NamedHandler{}) + copy(l.list[1:], l.list) + l.list[0] = n + } } // Remove removes a NamedHandler n func (l *HandlerList) Remove(n NamedHandler) { - newlist := []NamedHandler{} - for _, m := range l.list { - if m.Name != n.Name { - newlist = append(newlist, m) + l.RemoveByName(n.Name) +} + +// RemoveByName removes a NamedHandler by name. +func (l *HandlerList) RemoveByName(name string) { + for i := 0; i < len(l.list); i++ { + m := l.list[i] + if m.Name == name { + // Shift array preventing creating new arrays + copy(l.list[i:], l.list[i+1:]) + l.list[len(l.list)-1] = NamedHandler{} + l.list = l.list[:len(l.list)-1] + + // decrement list so next check to length is correct + i-- + } + } +} + +// SwapNamed will swap out any existing handlers with the same name as the +// passed in NamedHandler returning true if handlers were swapped. False is +// returned otherwise. +func (l *HandlerList) SwapNamed(n NamedHandler) (swapped bool) { + for i := 0; i < len(l.list); i++ { + if l.list[i].Name == n.Name { + l.list[i].Fn = n.Fn + swapped = true + } + } + + return swapped +} + +// Swap will swap out all handlers matching the name passed in. The matched +// handlers will be swapped in. True is returned if the handlers were swapped. +func (l *HandlerList) Swap(name string, replace NamedHandler) bool { + var swapped bool + + for i := 0; i < len(l.list); i++ { + if l.list[i].Name == name { + l.list[i] = replace + swapped = true } } - l.list = newlist + + return swapped +} + +// SetBackNamed will replace the named handler if it exists in the handler list. +// If the handler does not exist the handler will be added to the end of the list. +func (l *HandlerList) SetBackNamed(n NamedHandler) { + if !l.SwapNamed(n) { + l.PushBackNamed(n) + } +} + +// SetFrontNamed will replace the named handler if it exists in the handler list. +// If the handler does not exist the handler will be added to the beginning of +// the list. +func (l *HandlerList) SetFrontNamed(n NamedHandler) { + if !l.SwapNamed(n) { + l.PushFrontNamed(n) + } } // Run executes all handlers in the list with a given request object. func (l *HandlerList) Run(r *Request) { - for _, f := range l.list { - f.Fn(r) + for i, h := range l.list { + h.Fn(r) + item := HandlerListRunItem{ + Index: i, Handler: h, Request: r, + } + if l.AfterEachFn != nil && !l.AfterEachFn(item) { + return + } + } +} + +// HandlerListLogItem logs the request handler and the state of the +// request's Error value. Always returns true to continue iterating +// request handlers in a HandlerList. +func HandlerListLogItem(item HandlerListRunItem) bool { + if item.Request.Config.Logger == nil { + return true + } + item.Request.Config.Logger.Log("DEBUG: RequestHandler", + item.Index, item.Handler.Name, item.Request.Error) + + return true +} + +// HandlerListStopOnError returns false to stop the HandlerList iterating +// over request handlers if Request.Error is not nil. True otherwise +// to continue iterating. +func HandlerListStopOnError(item HandlerListRunItem) bool { + return item.Request.Error == nil +} + +// WithAppendUserAgent will add a string to the user agent prefixed with a +// single white space. +func WithAppendUserAgent(s string) Option { + return func(r *Request) { + r.Handlers.Build.PushBack(func(r2 *Request) { + AddToUserAgent(r, s) + }) } } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go b/vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go new file mode 100644 index 00000000000..79f79602b03 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go @@ -0,0 +1,24 @@ +package request + +import ( + "io" + "net/http" + "net/url" +) + +func copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request { + req := new(http.Request) + *req = *r + req.URL = &url.URL{} + *req.URL = *r.URL + req.Body = body + + req.Header = http.Header{} + for k, v := range r.Header { + for _, vv := range v { + req.Header.Add(k, vv) + } + } + + return req +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go b/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go new file mode 100644 index 00000000000..9370fa50c38 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go @@ -0,0 +1,65 @@ +package request + +import ( + "io" + "sync" + + "github.com/aws/aws-sdk-go/internal/sdkio" +) + +// offsetReader is a thread-safe io.ReadCloser to prevent racing +// with retrying requests +type offsetReader struct { + buf io.ReadSeeker + lock sync.Mutex + closed bool +} + +func newOffsetReader(buf io.ReadSeeker, offset int64) (*offsetReader, error) { + reader := &offsetReader{} + _, err := buf.Seek(offset, sdkio.SeekStart) + if err != nil { + return nil, err + } + + reader.buf = buf + return reader, nil +} + +// Close will close the instance of the offset reader's access to +// the underlying io.ReadSeeker. +func (o *offsetReader) Close() error { + o.lock.Lock() + defer o.lock.Unlock() + o.closed = true + return nil +} + +// Read is a thread-safe read of the underlying io.ReadSeeker +func (o *offsetReader) Read(p []byte) (int, error) { + o.lock.Lock() + defer o.lock.Unlock() + + if o.closed { + return 0, io.EOF + } + + return o.buf.Read(p) +} + +// Seek is a thread-safe seeking operation. +func (o *offsetReader) Seek(offset int64, whence int) (int64, error) { + o.lock.Lock() + defer o.lock.Unlock() + + return o.buf.Seek(offset, whence) +} + +// CloseAndCopy will return a new offsetReader with a copy of the old buffer +// and close the old buffer. +func (o *offsetReader) CloseAndCopy(offset int64) (*offsetReader, error) { + if err := o.Close(); err != nil { + return nil, err + } + return newOffsetReader(o.buf, offset) +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/request.go b/vendor/github.com/aws/aws-sdk-go/aws/request/request.go index 3735d7fa533..52178141da6 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/request/request.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/request.go @@ -4,7 +4,6 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "net/http" "net/url" "reflect" @@ -12,7 +11,31 @@ import ( "time" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/internal/sdkio" +) + +const ( + // ErrCodeSerialization is the serialization error code that is received + // during protocol unmarshaling. + ErrCodeSerialization = "SerializationError" + + // ErrCodeRead is an error that is returned during HTTP reads. + ErrCodeRead = "ReadError" + + // ErrCodeResponseTimeout is the connection timeout error that is received + // during body reads. + ErrCodeResponseTimeout = "ResponseTimeout" + + // ErrCodeInvalidPresignExpire is returned when the expire time provided to + // presign is invalid + ErrCodeInvalidPresignExpire = "InvalidPresignExpireError" + + // CanceledErrorCode is the error code that will be returned by an + // API request that was canceled. Requests given a aws.Context may + // return this error when canceled. + CanceledErrorCode = "RequestCanceled" ) // A Request is the service request to be made. @@ -22,22 +45,48 @@ type Request struct { Handlers Handlers Retryer - Time time.Time - ExpireTime time.Duration - Operation *Operation - HTTPRequest *http.Request - HTTPResponse *http.Response - Body io.ReadSeeker - BodyStart int64 // offset from beginning of Body that the request body starts - Params interface{} - Error error - Data interface{} - RequestID string - RetryCount int - Retryable *bool - RetryDelay time.Duration + AttemptTime time.Time + Time time.Time + Operation *Operation + HTTPRequest *http.Request + HTTPResponse *http.Response + Body io.ReadSeeker + BodyStart int64 // offset from beginning of Body that the request body starts + Params interface{} + Error error + Data interface{} + RequestID string + RetryCount int + Retryable *bool + RetryDelay time.Duration + NotHoist bool + SignedHeaderVals http.Header + LastSignedAt time.Time + DisableFollowRedirects bool + + // Additional API error codes that should be retried. IsErrorRetryable + // will consider these codes in addition to its built in cases. + RetryErrorCodes []string + + // Additional API error codes that should be retried with throttle backoff + // delay. IsErrorThrottle will consider these codes in addition to its + // built in cases. + ThrottleErrorCodes []string + + // A value greater than 0 instructs the request to be signed as Presigned URL + // You should not set this field directly. Instead use Request's + // Presign or PresignRequest methods. + ExpireTime time.Duration + + context aws.Context built bool + + // Need to persist an intermediate body between the input Body and HTTP + // request body because the HTTP Client's transport can maintain a reference + // to the HTTP request's body after the client has returned. This value is + // safe to use concurrently and wrap the input Body for each HTTP request. + safeBody *offsetReader } // An Operation is the service API operation to be made. @@ -46,18 +95,16 @@ type Operation struct { HTTPMethod string HTTPPath string *Paginator -} -// Paginator keeps track of pagination configuration for an API operation. -type Paginator struct { - InputTokens []string - OutputTokens []string - LimitToken string - TruncationToken string + BeforePresignFn func(r *Request) error } -// New returns a new Request pointer for the service API -// operation and parameters. +// New returns a new Request pointer for the service API operation and +// parameters. +// +// A Retryer should be provided to direct how the request is retried. If +// Retryer is nil, a default no retry value will be used. You can use +// NoOpRetryer in the Client package to disable retry behavior directly. // // Params is any value of input parameters to be the request payload. // Data is pointer value to an object which the request's response @@ -65,17 +112,25 @@ type Paginator struct { func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers, retryer Retryer, operation *Operation, params interface{}, data interface{}) *Request { + if retryer == nil { + retryer = noOpRetryer{} + } + method := operation.HTTPMethod if method == "" { method = "POST" } - p := operation.HTTPPath - if p == "" { - p = "/" - } httpReq, _ := http.NewRequest(method, "", nil) - httpReq.URL, _ = url.Parse(clientInfo.Endpoint + p) + + var err error + httpReq.URL, err = url.Parse(clientInfo.Endpoint + operation.HTTPPath) + if err != nil { + httpReq.URL = &url.URL{} + err = awserr.New("InvalidEndpointURL", "invalid endpoint uri", err) + } + + SanitizeHostForHeader(httpReq) r := &Request{ Config: cfg, @@ -89,7 +144,7 @@ func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers, HTTPRequest: httpReq, Body: nil, Params: params, - Error: nil, + Error: err, Data: data, } r.SetBufferBody([]byte{}) @@ -97,11 +152,106 @@ func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers, return r } +// A Option is a functional option that can augment or modify a request when +// using a WithContext API operation method. +type Option func(*Request) + +// WithGetResponseHeader builds a request Option which will retrieve a single +// header value from the HTTP Response. If there are multiple values for the +// header key use WithGetResponseHeaders instead to access the http.Header +// map directly. The passed in val pointer must be non-nil. +// +// This Option can be used multiple times with a single API operation. +// +// var id2, versionID string +// svc.PutObjectWithContext(ctx, params, +// request.WithGetResponseHeader("x-amz-id-2", &id2), +// request.WithGetResponseHeader("x-amz-version-id", &versionID), +// ) +func WithGetResponseHeader(key string, val *string) Option { + return func(r *Request) { + r.Handlers.Complete.PushBack(func(req *Request) { + *val = req.HTTPResponse.Header.Get(key) + }) + } +} + +// WithGetResponseHeaders builds a request Option which will retrieve the +// headers from the HTTP response and assign them to the passed in headers +// variable. The passed in headers pointer must be non-nil. +// +// var headers http.Header +// svc.PutObjectWithContext(ctx, params, request.WithGetResponseHeaders(&headers)) +func WithGetResponseHeaders(headers *http.Header) Option { + return func(r *Request) { + r.Handlers.Complete.PushBack(func(req *Request) { + *headers = req.HTTPResponse.Header + }) + } +} + +// WithLogLevel is a request option that will set the request to use a specific +// log level when the request is made. +// +// svc.PutObjectWithContext(ctx, params, request.WithLogLevel(aws.LogDebugWithHTTPBody) +func WithLogLevel(l aws.LogLevelType) Option { + return func(r *Request) { + r.Config.LogLevel = aws.LogLevel(l) + } +} + +// ApplyOptions will apply each option to the request calling them in the order +// the were provided. +func (r *Request) ApplyOptions(opts ...Option) { + for _, opt := range opts { + opt(r) + } +} + +// Context will always returns a non-nil context. If Request does not have a +// context aws.BackgroundContext will be returned. +func (r *Request) Context() aws.Context { + if r.context != nil { + return r.context + } + return aws.BackgroundContext() +} + +// SetContext adds a Context to the current request that can be used to cancel +// a in-flight request. The Context value must not be nil, or this method will +// panic. +// +// Unlike http.Request.WithContext, SetContext does not return a copy of the +// Request. It is not safe to use use a single Request value for multiple +// requests. A new Request should be created for each API operation request. +// +// Go 1.6 and below: +// The http.Request's Cancel field will be set to the Done() value of +// the context. This will overwrite the Cancel field's value. +// +// Go 1.7 and above: +// The http.Request.WithContext will be used to set the context on the underlying +// http.Request. This will create a shallow copy of the http.Request. The SDK +// may create sub contexts in the future for nested requests such as retries. +func (r *Request) SetContext(ctx aws.Context) { + if ctx == nil { + panic("context cannot be nil") + } + setRequestContext(r, ctx) +} + // WillRetry returns if the request's can be retried. func (r *Request) WillRetry() bool { + if !aws.IsReaderSeekable(r.Body) && r.HTTPRequest.Body != NoBody { + return false + } return r.Error != nil && aws.BoolValue(r.Retryable) && r.RetryCount < r.MaxRetries() } +func fmtAttemptCount(retryCount, maxRetries int) string { + return fmt.Sprintf("attempt %v/%v", retryCount, maxRetries) +} + // ParamsFilled returns if the request's parameters have been populated // and the parameters are valid. False is returned if no parameters are // provided or invalid. @@ -129,38 +279,105 @@ func (r *Request) SetStringBody(s string) { // SetReaderBody will set the request's body reader. func (r *Request) SetReaderBody(reader io.ReadSeeker) { - r.HTTPRequest.Body = ioutil.NopCloser(reader) r.Body = reader + + if aws.IsReaderSeekable(reader) { + var err error + // Get the Bodies current offset so retries will start from the same + // initial position. + r.BodyStart, err = reader.Seek(0, sdkio.SeekCurrent) + if err != nil { + r.Error = awserr.New(ErrCodeSerialization, + "failed to determine start of request body", err) + return + } + } + r.ResetBody() } // Presign returns the request's signed URL. Error will be returned -// if the signing fails. -func (r *Request) Presign(expireTime time.Duration) (string, error) { - r.ExpireTime = expireTime - r.Sign() - if r.Error != nil { - return "", r.Error +// if the signing fails. The expire parameter is only used for presigned Amazon +// S3 API requests. All other AWS services will use a fixed expiration +// time of 15 minutes. +// +// It is invalid to create a presigned URL with a expire duration 0 or less. An +// error is returned if expire duration is 0 or less. +func (r *Request) Presign(expire time.Duration) (string, error) { + r = r.copy() + + // Presign requires all headers be hoisted. There is no way to retrieve + // the signed headers not hoisted without this. Making the presigned URL + // useless. + r.NotHoist = false + + u, _, err := getPresignedURL(r, expire) + return u, err +} + +// PresignRequest behaves just like presign, with the addition of returning a +// set of headers that were signed. The expire parameter is only used for +// presigned Amazon S3 API requests. All other AWS services will use a fixed +// expiration time of 15 minutes. +// +// It is invalid to create a presigned URL with a expire duration 0 or less. An +// error is returned if expire duration is 0 or less. +// +// Returns the URL string for the API operation with signature in the query string, +// and the HTTP headers that were included in the signature. These headers must +// be included in any HTTP request made with the presigned URL. +// +// To prevent hoisting any headers to the query string set NotHoist to true on +// this Request value prior to calling PresignRequest. +func (r *Request) PresignRequest(expire time.Duration) (string, http.Header, error) { + r = r.copy() + return getPresignedURL(r, expire) +} + +// IsPresigned returns true if the request represents a presigned API url. +func (r *Request) IsPresigned() bool { + return r.ExpireTime != 0 +} + +func getPresignedURL(r *Request, expire time.Duration) (string, http.Header, error) { + if expire <= 0 { + return "", nil, awserr.New( + ErrCodeInvalidPresignExpire, + "presigned URL requires an expire duration greater than 0", + nil, + ) + } + + r.ExpireTime = expire + + if r.Operation.BeforePresignFn != nil { + if err := r.Operation.BeforePresignFn(r); err != nil { + return "", nil, err + } } - return r.HTTPRequest.URL.String(), nil + + if err := r.Sign(); err != nil { + return "", nil, err + } + + return r.HTTPRequest.URL.String(), r.SignedHeaderVals, nil } -func debugLogReqError(r *Request, stage string, retrying bool, err error) { +const ( + notRetrying = "not retrying" +) + +func debugLogReqError(r *Request, stage, retryStr string, err error) { if !r.Config.LogLevel.Matches(aws.LogDebugWithRequestErrors) { return } - retryStr := "not retrying" - if retrying { - retryStr = "will retry" - } - r.Config.Logger.Log(fmt.Sprintf("DEBUG: %s %s/%s failed, %s, error %v", stage, r.ClientInfo.ServiceName, r.Operation.Name, retryStr, err)) } // Build will build the request's object so it can be signed and sent // to the service. Build will also validate all the request's parameters. -// Anny additional build Handlers set on this request will be run +// Any additional build Handlers set on this request will be run // in the order they were set. // // The request will only be built once. Multiple calls to build will have @@ -170,27 +387,30 @@ func debugLogReqError(r *Request, stage string, retrying bool, err error) { // which occurred will be returned. func (r *Request) Build() error { if !r.built { - r.Error = nil r.Handlers.Validate.Run(r) if r.Error != nil { - debugLogReqError(r, "Validate Request", false, r.Error) + debugLogReqError(r, "Validate Request", notRetrying, r.Error) return r.Error } r.Handlers.Build.Run(r) + if r.Error != nil { + debugLogReqError(r, "Build Request", notRetrying, r.Error) + return r.Error + } r.built = true } return r.Error } -// Sign will sign the request retuning error if errors are encountered. +// Sign will sign the request, returning error if errors are encountered. // -// Send will build the request prior to signing. All Sign Handlers will +// Sign will build the request prior to signing. All Sign Handlers will // be executed in the order they were set. func (r *Request) Sign() error { r.Build() if r.Error != nil { - debugLogReqError(r, "Build Request", false, r.Error) + debugLogReqError(r, "Build Request", notRetrying, r.Error) return r.Error } @@ -198,77 +418,187 @@ func (r *Request) Sign() error { return r.Error } -// Send will send the request returning error if errors are encountered. +func (r *Request) getNextRequestBody() (body io.ReadCloser, err error) { + if r.safeBody != nil { + r.safeBody.Close() + } + + r.safeBody, err = newOffsetReader(r.Body, r.BodyStart) + if err != nil { + return nil, awserr.New(ErrCodeSerialization, + "failed to get next request body reader", err) + } + + // Go 1.8 tightened and clarified the rules code needs to use when building + // requests with the http package. Go 1.8 removed the automatic detection + // of if the Request.Body was empty, or actually had bytes in it. The SDK + // always sets the Request.Body even if it is empty and should not actually + // be sent. This is incorrect. + // + // Go 1.8 did add a http.NoBody value that the SDK can use to tell the http + // client that the request really should be sent without a body. The + // Request.Body cannot be set to nil, which is preferable, because the + // field is exported and could introduce nil pointer dereferences for users + // of the SDK if they used that field. + // + // Related golang/go#18257 + l, err := aws.SeekerLen(r.Body) + if err != nil { + return nil, awserr.New(ErrCodeSerialization, + "failed to compute request body size", err) + } + + if l == 0 { + body = NoBody + } else if l > 0 { + body = r.safeBody + } else { + // Hack to prevent sending bodies for methods where the body + // should be ignored by the server. Sending bodies on these + // methods without an associated ContentLength will cause the + // request to socket timeout because the server does not handle + // Transfer-Encoding: chunked bodies for these methods. + // + // This would only happen if a aws.ReaderSeekerCloser was used with + // a io.Reader that was not also an io.Seeker, or did not implement + // Len() method. + switch r.Operation.HTTPMethod { + case "GET", "HEAD", "DELETE": + body = NoBody + default: + body = r.safeBody + } + } + + return body, nil +} + +// GetBody will return an io.ReadSeeker of the Request's underlying +// input body with a concurrency safe wrapper. +func (r *Request) GetBody() io.ReadSeeker { + return r.safeBody +} + +// Send will send the request, returning error if errors are encountered. // // Send will sign the request prior to sending. All Send Handlers will // be executed in the order they were set. +// +// Canceling a request is non-deterministic. If a request has been canceled, +// then the transport will choose, randomly, one of the state channels during +// reads or getting the connection. +// +// readLoop() and getConn(req *Request, cm connectMethod) +// https://github.com/golang/go/blob/master/src/net/http/transport.go +// +// Send will not close the request.Request's body. func (r *Request) Send() error { - for { - r.Sign() - if r.Error != nil { - return r.Error - } + defer func() { + // Regardless of success or failure of the request trigger the Complete + // request handlers. + r.Handlers.Complete.Run(r) + }() + + if err := r.Error; err != nil { + return err + } - if aws.BoolValue(r.Retryable) { - if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) { - r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d", - r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount)) - } + for { + r.Error = nil + r.AttemptTime = time.Now() - // Re-seek the body back to the original point in for a retry so that - // send will send the body's contents again in the upcoming request. - r.Body.Seek(r.BodyStart, 0) - r.HTTPRequest.Body = ioutil.NopCloser(r.Body) + if err := r.Sign(); err != nil { + debugLogReqError(r, "Sign Request", notRetrying, err) + return err } - r.Retryable = nil - r.Handlers.Send.Run(r) - if r.Error != nil { - err := r.Error - r.Handlers.Retry.Run(r) - r.Handlers.AfterRetry.Run(r) - if r.Error != nil { - debugLogReqError(r, "Send Request", false, r.Error) - return r.Error - } - debugLogReqError(r, "Send Request", true, err) - continue + if err := r.sendRequest(); err == nil { + return nil } + r.Handlers.Retry.Run(r) + r.Handlers.AfterRetry.Run(r) - r.Handlers.UnmarshalMeta.Run(r) - r.Handlers.ValidateResponse.Run(r) - if r.Error != nil { - err := r.Error - r.Handlers.UnmarshalError.Run(r) - r.Handlers.Retry.Run(r) - r.Handlers.AfterRetry.Run(r) - if r.Error != nil { - debugLogReqError(r, "Validate Response", false, r.Error) - return r.Error - } - debugLogReqError(r, "Validate Response", true, err) - continue + if r.Error != nil || !aws.BoolValue(r.Retryable) { + return r.Error } - r.Handlers.Unmarshal.Run(r) - if r.Error != nil { - err := r.Error - r.Handlers.Retry.Run(r) - r.Handlers.AfterRetry.Run(r) - if r.Error != nil { - debugLogReqError(r, "Unmarshal Response", false, r.Error) - return r.Error - } - debugLogReqError(r, "Unmarshal Response", true, err) - continue + if err := r.prepareRetry(); err != nil { + r.Error = err + return err } + } +} - break +func (r *Request) prepareRetry() error { + if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) { + r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d", + r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount)) + } + + // The previous http.Request will have a reference to the r.Body + // and the HTTP Client's Transport may still be reading from + // the request's body even though the Client's Do returned. + r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil) + r.ResetBody() + if err := r.Error; err != nil { + return awserr.New(ErrCodeSerialization, + "failed to prepare body for retry", err) + + } + + // Closing response body to ensure that no response body is leaked + // between retry attempts. + if r.HTTPResponse != nil && r.HTTPResponse.Body != nil { + r.HTTPResponse.Body.Close() } return nil } +func (r *Request) sendRequest() (sendErr error) { + defer r.Handlers.CompleteAttempt.Run(r) + + r.Retryable = nil + r.Handlers.Send.Run(r) + if r.Error != nil { + debugLogReqError(r, "Send Request", + fmtAttemptCount(r.RetryCount, r.MaxRetries()), + r.Error) + return r.Error + } + + r.Handlers.UnmarshalMeta.Run(r) + r.Handlers.ValidateResponse.Run(r) + if r.Error != nil { + r.Handlers.UnmarshalError.Run(r) + debugLogReqError(r, "Validate Response", + fmtAttemptCount(r.RetryCount, r.MaxRetries()), + r.Error) + return r.Error + } + + r.Handlers.Unmarshal.Run(r) + if r.Error != nil { + debugLogReqError(r, "Unmarshal Response", + fmtAttemptCount(r.RetryCount, r.MaxRetries()), + r.Error) + return r.Error + } + + return nil +} + +// copy will copy a request which will allow for local manipulation of the +// request. +func (r *Request) copy() *Request { + req := &Request{} + *req = *r + req.Handlers = r.Handlers.Copy() + op := *r.Operation + req.Operation = &op + return req +} + // AddToUserAgent adds the string to the end of the request's current user agent. func AddToUserAgent(r *Request, s string) { curUA := r.HTTPRequest.Header.Get("User-Agent") @@ -277,3 +607,72 @@ func AddToUserAgent(r *Request, s string) { } r.HTTPRequest.Header.Set("User-Agent", s) } + +// SanitizeHostForHeader removes default port from host and updates request.Host +func SanitizeHostForHeader(r *http.Request) { + host := getHost(r) + port := portOnly(host) + if port != "" && isDefaultPort(r.URL.Scheme, port) { + r.Host = stripPort(host) + } +} + +// Returns host from request +func getHost(r *http.Request) string { + if r.Host != "" { + return r.Host + } + + return r.URL.Host +} + +// Hostname returns u.Host, without any port number. +// +// If Host is an IPv6 literal with a port number, Hostname returns the +// IPv6 literal without the square brackets. IPv6 literals may include +// a zone identifier. +// +// Copied from the Go 1.8 standard library (net/url) +func stripPort(hostport string) string { + colon := strings.IndexByte(hostport, ':') + if colon == -1 { + return hostport + } + if i := strings.IndexByte(hostport, ']'); i != -1 { + return strings.TrimPrefix(hostport[:i], "[") + } + return hostport[:colon] +} + +// Port returns the port part of u.Host, without the leading colon. +// If u.Host doesn't contain a port, Port returns an empty string. +// +// Copied from the Go 1.8 standard library (net/url) +func portOnly(hostport string) string { + colon := strings.IndexByte(hostport, ':') + if colon == -1 { + return "" + } + if i := strings.Index(hostport, "]:"); i != -1 { + return hostport[i+len("]:"):] + } + if strings.Contains(hostport, "]") { + return "" + } + return hostport[colon+len(":"):] +} + +// Returns true if the specified URI is using the standard port +// (i.e. port 80 for HTTP URIs or 443 for HTTPS URIs) +func isDefaultPort(scheme, port string) bool { + if port == "" { + return true + } + + lowerCaseScheme := strings.ToLower(scheme) + if (lowerCaseScheme == "http" && port == "80") || (lowerCaseScheme == "https" && port == "443") { + return true + } + + return false +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go b/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go new file mode 100644 index 00000000000..e36e468b7c6 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go @@ -0,0 +1,39 @@ +// +build !go1.8 + +package request + +import "io" + +// NoBody is an io.ReadCloser with no bytes. Read always returns EOF +// and Close always returns nil. It can be used in an outgoing client +// request to explicitly signal that a request has zero bytes. +// An alternative, however, is to simply set Request.Body to nil. +// +// Copy of Go 1.8 NoBody type from net/http/http.go +type noBody struct{} + +func (noBody) Read([]byte) (int, error) { return 0, io.EOF } +func (noBody) Close() error { return nil } +func (noBody) WriteTo(io.Writer) (int64, error) { return 0, nil } + +// NoBody is an empty reader that will trigger the Go HTTP client to not include +// and body in the HTTP request. +var NoBody = noBody{} + +// ResetBody rewinds the request body back to its starting position, and +// sets the HTTP Request body reference. When the body is read prior +// to being sent in the HTTP request it will need to be rewound. +// +// ResetBody will automatically be called by the SDK's build handler, but if +// the request is being used directly ResetBody must be called before the request +// is Sent. SetStringBody, SetBufferBody, and SetReaderBody will automatically +// call ResetBody. +func (r *Request) ResetBody() { + body, err := r.getNextRequestBody() + if err != nil { + r.Error = err + return + } + + r.HTTPRequest.Body = body +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go b/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go new file mode 100644 index 00000000000..de1292f45a2 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go @@ -0,0 +1,36 @@ +// +build go1.8 + +package request + +import ( + "net/http" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +// NoBody is a http.NoBody reader instructing Go HTTP client to not include +// and body in the HTTP request. +var NoBody = http.NoBody + +// ResetBody rewinds the request body back to its starting position, and +// sets the HTTP Request body reference. When the body is read prior +// to being sent in the HTTP request it will need to be rewound. +// +// ResetBody will automatically be called by the SDK's build handler, but if +// the request is being used directly ResetBody must be called before the request +// is Sent. SetStringBody, SetBufferBody, and SetReaderBody will automatically +// call ResetBody. +// +// Will also set the Go 1.8's http.Request.GetBody member to allow retrying +// PUT/POST redirects. +func (r *Request) ResetBody() { + body, err := r.getNextRequestBody() + if err != nil { + r.Error = awserr.New(ErrCodeSerialization, + "failed to reset request body", err) + return + } + + r.HTTPRequest.Body = body + r.HTTPRequest.GetBody = r.getNextRequestBody +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go b/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go new file mode 100644 index 00000000000..a7365cd1e46 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go @@ -0,0 +1,14 @@ +// +build go1.7 + +package request + +import "github.com/aws/aws-sdk-go/aws" + +// setContext updates the Request to use the passed in context for cancellation. +// Context will also be used for request retry delay. +// +// Creates shallow copy of the http.Request with the WithContext method. +func setRequestContext(r *Request, ctx aws.Context) { + r.context = ctx + r.HTTPRequest = r.HTTPRequest.WithContext(ctx) +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go b/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go new file mode 100644 index 00000000000..307fa0705be --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go @@ -0,0 +1,14 @@ +// +build !go1.7 + +package request + +import "github.com/aws/aws-sdk-go/aws" + +// setContext updates the Request to use the passed in context for cancellation. +// Context will also be used for request retry delay. +// +// Creates shallow copy of the http.Request with the WithContext method. +func setRequestContext(r *Request, ctx aws.Context) { + r.context = ctx + r.HTTPRequest.Cancel = ctx.Done() +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go b/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go index 2939ec473f2..64784e16f3d 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go @@ -2,29 +2,140 @@ package request import ( "reflect" + "sync/atomic" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awsutil" ) -//type Paginater interface { -// HasNextPage() bool -// NextPage() *Request -// EachPage(fn func(data interface{}, isLastPage bool) (shouldContinue bool)) error -//} +// A Pagination provides paginating of SDK API operations which are paginatable. +// Generally you should not use this type directly, but use the "Pages" API +// operations method to automatically perform pagination for you. Such as, +// "S3.ListObjectsPages", and "S3.ListObjectsPagesWithContext" methods. +// +// Pagination differs from a Paginator type in that pagination is the type that +// does the pagination between API operations, and Paginator defines the +// configuration that will be used per page request. +// +// for p.Next() { +// data := p.Page().(*s3.ListObjectsOutput) +// // process the page's data +// // ... +// // break out of loop to stop fetching additional pages +// } +// +// return p.Err() +// +// See service client API operation Pages methods for examples how the SDK will +// use the Pagination type. +type Pagination struct { + // Function to return a Request value for each pagination request. + // Any configuration or handlers that need to be applied to the request + // prior to getting the next page should be done here before the request + // returned. + // + // NewRequest should always be built from the same API operations. It is + // undefined if different API operations are returned on subsequent calls. + NewRequest func() (*Request, error) + // EndPageOnSameToken, when enabled, will allow the paginator to stop on + // token that are the same as its previous tokens. + EndPageOnSameToken bool -// HasNextPage returns true if this request has more pages of data available. -func (r *Request) HasNextPage() bool { - return len(r.nextPageTokens()) > 0 + started bool + prevTokens []interface{} + nextTokens []interface{} + + err error + curPage interface{} +} + +// HasNextPage will return true if Pagination is able to determine that the API +// operation has additional pages. False will be returned if there are no more +// pages remaining. +// +// Will always return true if Next has not been called yet. +func (p *Pagination) HasNextPage() bool { + if !p.started { + return true + } + + hasNextPage := len(p.nextTokens) != 0 + if p.EndPageOnSameToken { + return hasNextPage && !awsutil.DeepEqual(p.nextTokens, p.prevTokens) + } + return hasNextPage +} + +// Err returns the error Pagination encountered when retrieving the next page. +func (p *Pagination) Err() error { + return p.err +} + +// Page returns the current page. Page should only be called after a successful +// call to Next. It is undefined what Page will return if Page is called after +// Next returns false. +func (p *Pagination) Page() interface{} { + return p.curPage +} + +// Next will attempt to retrieve the next page for the API operation. When a page +// is retrieved true will be returned. If the page cannot be retrieved, or there +// are no more pages false will be returned. +// +// Use the Page method to retrieve the current page data. The data will need +// to be cast to the API operation's output type. +// +// Use the Err method to determine if an error occurred if Page returns false. +func (p *Pagination) Next() bool { + if !p.HasNextPage() { + return false + } + + req, err := p.NewRequest() + if err != nil { + p.err = err + return false + } + + if p.started { + for i, intok := range req.Operation.InputTokens { + awsutil.SetValueAtPath(req.Params, intok, p.nextTokens[i]) + } + } + p.started = true + + err = req.Send() + if err != nil { + p.err = err + return false + } + + p.prevTokens = p.nextTokens + p.nextTokens = req.nextPageTokens() + p.curPage = req.Data + + return true +} + +// A Paginator is the configuration data that defines how an API operation +// should be paginated. This type is used by the API service models to define +// the generated pagination config for service APIs. +// +// The Pagination type is what provides iterating between pages of an API. It +// is only used to store the token metadata the SDK should use for performing +// pagination. +type Paginator struct { + InputTokens []string + OutputTokens []string + LimitToken string + TruncationToken string } -// nextPageTokens returns the tokens to use when asking for the next page of -// data. +// nextPageTokens returns the tokens to use when asking for the next page of data. func (r *Request) nextPageTokens() []interface{} { if r.Operation.Paginator == nil { return nil } - if r.Operation.TruncationToken != "" { tr, _ := awsutil.ValuesAtPath(r.Data, r.Operation.TruncationToken) if len(tr) == 0 { @@ -37,7 +148,7 @@ func (r *Request) nextPageTokens() []interface{} { return nil } case bool: - if v == false { + if !v { return nil } } @@ -46,13 +157,28 @@ func (r *Request) nextPageTokens() []interface{} { tokens := []interface{}{} tokenAdded := false for _, outToken := range r.Operation.OutputTokens { - v, _ := awsutil.ValuesAtPath(r.Data, outToken) - if len(v) > 0 { - tokens = append(tokens, v[0]) - tokenAdded = true - } else { + vs, _ := awsutil.ValuesAtPath(r.Data, outToken) + if len(vs) == 0 { tokens = append(tokens, nil) + continue } + v := vs[0] + + switch tv := v.(type) { + case *string: + if len(aws.StringValue(tv)) == 0 { + tokens = append(tokens, nil) + continue + } + case string: + if len(tv) == 0 { + tokens = append(tokens, nil) + continue + } + } + + tokenAdded = true + tokens = append(tokens, v) } if !tokenAdded { return nil @@ -61,9 +187,40 @@ func (r *Request) nextPageTokens() []interface{} { return tokens } +// Ensure a deprecated item is only logged once instead of each time its used. +func logDeprecatedf(logger aws.Logger, flag *int32, msg string) { + if logger == nil { + return + } + if atomic.CompareAndSwapInt32(flag, 0, 1) { + logger.Log(msg) + } +} + +var ( + logDeprecatedHasNextPage int32 + logDeprecatedNextPage int32 + logDeprecatedEachPage int32 +) + +// HasNextPage returns true if this request has more pages of data available. +// +// Deprecated Use Pagination type for configurable pagination of API operations +func (r *Request) HasNextPage() bool { + logDeprecatedf(r.Config.Logger, &logDeprecatedHasNextPage, + "Request.HasNextPage deprecated. Use Pagination type for configurable pagination of API operations") + + return len(r.nextPageTokens()) > 0 +} + // NextPage returns a new Request that can be executed to return the next // page of result data. Call .Send() on this request to execute it. +// +// Deprecated Use Pagination type for configurable pagination of API operations func (r *Request) NextPage() *Request { + logDeprecatedf(r.Config.Logger, &logDeprecatedNextPage, + "Request.NextPage deprecated. Use Pagination type for configurable pagination of API operations") + tokens := r.nextPageTokens() if len(tokens) == 0 { return nil @@ -90,7 +247,12 @@ func (r *Request) NextPage() *Request { // as the structure "T". The lastPage value represents whether the page is // the last page of data or not. The return value of this function should // return true to keep iterating or false to stop. +// +// Deprecated Use Pagination type for configurable pagination of API operations func (r *Request) EachPage(fn func(data interface{}, isLastPage bool) (shouldContinue bool)) error { + logDeprecatedf(r.Config.Logger, &logDeprecatedEachPage, + "Request.EachPage deprecated. Use Pagination type for configurable pagination of API operations") + for page := r; page != nil; page = page.NextPage() { if err := page.Send(); err != nil { return err diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go b/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go index ab6fff5ac84..8015acc67eb 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go @@ -1,40 +1,96 @@ package request import ( + "net" + "net/url" + "strings" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" ) -// Retryer is an interface to control retry logic for a given service. -// The default implementation used by most services is the service.DefaultRetryer -// structure, which contains basic retry logic using exponential backoff. +// Retryer provides the interface drive the SDK's request retry behavior. The +// Retryer implementation is responsible for implementing exponential backoff, +// and determine if a request API error should be retried. +// +// client.DefaultRetryer is the SDK's default implementation of the Retryer. It +// uses the which uses the Request.IsErrorRetryable and Request.IsErrorThrottle +// methods to determine if the request is retried. type Retryer interface { + // RetryRules return the retry delay that should be used by the SDK before + // making another request attempt for the failed request. RetryRules(*Request) time.Duration + + // ShouldRetry returns if the failed request is retryable. + // + // Implementations may consider request attempt count when determining if a + // request is retryable, but the SDK will use MaxRetries to limit the + // number of attempts a request are made. ShouldRetry(*Request) bool + + // MaxRetries is the number of times a request may be retried before + // failing. MaxRetries() int } -// WithRetryer sets a config Retryer value to the given Config returning it -// for chaining. +// WithRetryer sets a Retryer value to the given Config returning the Config +// value for chaining. The value must not be nil. func WithRetryer(cfg *aws.Config, retryer Retryer) *aws.Config { + if retryer == nil { + if cfg.Logger != nil { + cfg.Logger.Log("ERROR: Request.WithRetryer called with nil retryer. Replacing with retry disabled Retryer.") + } + retryer = noOpRetryer{} + } cfg.Retryer = retryer return cfg + +} + +// noOpRetryer is a internal no op retryer used when a request is created +// without a retryer. +// +// Provides a retryer that performs no retries. +// It should be used when we do not want retries to be performed. +type noOpRetryer struct{} + +// MaxRetries returns the number of maximum returns the service will use to make +// an individual API; For NoOpRetryer the MaxRetries will always be zero. +func (d noOpRetryer) MaxRetries() int { + return 0 +} + +// ShouldRetry will always return false for NoOpRetryer, as it should never retry. +func (d noOpRetryer) ShouldRetry(_ *Request) bool { + return false +} + +// RetryRules returns the delay duration before retrying this request again; +// since NoOpRetryer does not retry, RetryRules always returns 0. +func (d noOpRetryer) RetryRules(_ *Request) time.Duration { + return 0 } // retryableCodes is a collection of service response codes which are retry-able // without any further action. var retryableCodes = map[string]struct{}{ - "RequestError": {}, - "RequestTimeout": {}, + "RequestError": {}, + "RequestTimeout": {}, + ErrCodeResponseTimeout: {}, + "RequestTimeoutException": {}, // Glacier's flavor of RequestTimeout +} + +var throttleCodes = map[string]struct{}{ "ProvisionedThroughputExceededException": {}, "Throttling": {}, "ThrottlingException": {}, "RequestLimitExceeded": {}, "RequestThrottled": {}, - "LimitExceededException": {}, // Deleting 10+ DynamoDb tables at once + "RequestThrottledException": {}, "TooManyRequestsException": {}, // Lambda functions + "PriorRequestNotComplete": {}, // Route53 + "TransactionInProgressException": {}, } // credsExpiredCodes is a collection of error codes which signify the credentials @@ -46,6 +102,11 @@ var credsExpiredCodes = map[string]struct{}{ "RequestExpired": {}, // EC2 Only } +func isCodeThrottle(code string) bool { + _, ok := throttleCodes[code] + return ok +} + func isCodeRetryable(code string) bool { if _, ok := retryableCodes[code]; ok { return true @@ -59,24 +120,188 @@ func isCodeExpiredCreds(code string) bool { return ok } +var validParentCodes = map[string]struct{}{ + ErrCodeSerialization: {}, + ErrCodeRead: {}, +} + +func isNestedErrorRetryable(parentErr awserr.Error) bool { + if parentErr == nil { + return false + } + + if _, ok := validParentCodes[parentErr.Code()]; !ok { + return false + } + + err := parentErr.OrigErr() + if err == nil { + return false + } + + if aerr, ok := err.(awserr.Error); ok { + return isCodeRetryable(aerr.Code()) + } + + if t, ok := err.(temporary); ok { + return t.Temporary() || isErrConnectionReset(err) + } + + return isErrConnectionReset(err) +} + +// IsErrorRetryable returns whether the error is retryable, based on its Code. +// Returns false if error is nil. +func IsErrorRetryable(err error) bool { + if err == nil { + return false + } + return shouldRetryError(err) +} + +type temporary interface { + Temporary() bool +} + +func shouldRetryError(origErr error) bool { + switch err := origErr.(type) { + case awserr.Error: + if err.Code() == CanceledErrorCode { + return false + } + if isNestedErrorRetryable(err) { + return true + } + + origErr := err.OrigErr() + var shouldRetry bool + if origErr != nil { + shouldRetry := shouldRetryError(origErr) + if err.Code() == "RequestError" && !shouldRetry { + return false + } + } + if isCodeRetryable(err.Code()) { + return true + } + return shouldRetry + + case *url.Error: + if strings.Contains(err.Error(), "connection refused") { + // Refused connections should be retried as the service may not yet + // be running on the port. Go TCP dial considers refused + // connections as not temporary. + return true + } + // *url.Error only implements Temporary after golang 1.6 but since + // url.Error only wraps the error: + return shouldRetryError(err.Err) + + case temporary: + if netErr, ok := err.(*net.OpError); ok && netErr.Op == "dial" { + return true + } + // If the error is temporary, we want to allow continuation of the + // retry process + return err.Temporary() || isErrConnectionReset(origErr) + + case nil: + // `awserr.Error.OrigErr()` can be nil, meaning there was an error but + // because we don't know the cause, it is marked as retryable. See + // TestRequest4xxUnretryable for an example. + return true + + default: + switch err.Error() { + case "net/http: request canceled", + "net/http: request canceled while waiting for connection": + // known 1.5 error case when an http request is cancelled + return false + } + // here we don't know the error; so we allow a retry. + return true + } +} + +// IsErrorThrottle returns whether the error is to be throttled based on its code. +// Returns false if error is nil. +func IsErrorThrottle(err error) bool { + if aerr, ok := err.(awserr.Error); ok && aerr != nil { + return isCodeThrottle(aerr.Code()) + } + return false +} + +// IsErrorExpiredCreds returns whether the error code is a credential expiry +// error. Returns false if error is nil. +func IsErrorExpiredCreds(err error) bool { + if aerr, ok := err.(awserr.Error); ok && aerr != nil { + return isCodeExpiredCreds(aerr.Code()) + } + return false +} + // IsErrorRetryable returns whether the error is retryable, based on its Code. // Returns false if the request has no Error set. +// +// Alias for the utility function IsErrorRetryable func (r *Request) IsErrorRetryable() bool { - if r.Error != nil { - if err, ok := r.Error.(awserr.Error); ok { - return isCodeRetryable(err.Code()) + if isErrCode(r.Error, r.RetryErrorCodes) { + return true + } + + // HTTP response status code 501 should not be retried. + // 501 represents Not Implemented which means the request method is not + // supported by the server and cannot be handled. + if r.HTTPResponse != nil { + // HTTP response status code 500 represents internal server error and + // should be retried without any throttle. + if r.HTTPResponse.StatusCode == 500 { + return true + } + } + return IsErrorRetryable(r.Error) +} + +// IsErrorThrottle returns whether the error is to be throttled based on its +// code. Returns false if the request has no Error set. +// +// Alias for the utility function IsErrorThrottle +func (r *Request) IsErrorThrottle() bool { + if isErrCode(r.Error, r.ThrottleErrorCodes) { + return true + } + + if r.HTTPResponse != nil { + switch r.HTTPResponse.StatusCode { + case + 429, // error caused due to too many requests + 502, // Bad Gateway error should be throttled + 503, // caused when service is unavailable + 504: // error occurred due to gateway timeout + return true + } + } + + return IsErrorThrottle(r.Error) +} + +func isErrCode(err error, codes []string) bool { + if aerr, ok := err.(awserr.Error); ok && aerr != nil { + for _, code := range codes { + if code == aerr.Code() { + return true + } } } + return false } // IsErrorExpired returns whether the error code is a credential expiry error. // Returns false if the request has no Error set. +// +// Alias for the utility function IsErrorExpiredCreds func (r *Request) IsErrorExpired() bool { - if r.Error != nil { - if err, ok := r.Error.(awserr.Error); ok { - return isCodeExpiredCreds(err.Code()) - } - } - return false + return IsErrorExpiredCreds(r.Error) } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go b/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go new file mode 100644 index 00000000000..09a44eb987a --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go @@ -0,0 +1,94 @@ +package request + +import ( + "io" + "time" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +var timeoutErr = awserr.New( + ErrCodeResponseTimeout, + "read on body has reached the timeout limit", + nil, +) + +type readResult struct { + n int + err error +} + +// timeoutReadCloser will handle body reads that take too long. +// We will return a ErrReadTimeout error if a timeout occurs. +type timeoutReadCloser struct { + reader io.ReadCloser + duration time.Duration +} + +// Read will spin off a goroutine to call the reader's Read method. We will +// select on the timer's channel or the read's channel. Whoever completes first +// will be returned. +func (r *timeoutReadCloser) Read(b []byte) (int, error) { + timer := time.NewTimer(r.duration) + c := make(chan readResult, 1) + + go func() { + n, err := r.reader.Read(b) + timer.Stop() + c <- readResult{n: n, err: err} + }() + + select { + case data := <-c: + return data.n, data.err + case <-timer.C: + return 0, timeoutErr + } +} + +func (r *timeoutReadCloser) Close() error { + return r.reader.Close() +} + +const ( + // HandlerResponseTimeout is what we use to signify the name of the + // response timeout handler. + HandlerResponseTimeout = "ResponseTimeoutHandler" +) + +// adaptToResponseTimeoutError is a handler that will replace any top level error +// to a ErrCodeResponseTimeout, if its child is that. +func adaptToResponseTimeoutError(req *Request) { + if err, ok := req.Error.(awserr.Error); ok { + aerr, ok := err.OrigErr().(awserr.Error) + if ok && aerr.Code() == ErrCodeResponseTimeout { + req.Error = aerr + } + } +} + +// WithResponseReadTimeout is a request option that will wrap the body in a timeout read closer. +// This will allow for per read timeouts. If a timeout occurred, we will return the +// ErrCodeResponseTimeout. +// +// svc.PutObjectWithContext(ctx, params, request.WithTimeoutReadCloser(30 * time.Second) +func WithResponseReadTimeout(duration time.Duration) Option { + return func(r *Request) { + + var timeoutHandler = NamedHandler{ + HandlerResponseTimeout, + func(req *Request) { + req.HTTPResponse.Body = &timeoutReadCloser{ + reader: req.HTTPResponse.Body, + duration: duration, + } + }} + + // remove the handler so we are not stomping over any new durations. + r.Handlers.Send.RemoveByName(HandlerResponseTimeout) + r.Handlers.Send.PushBackNamed(timeoutHandler) + + r.Handlers.Unmarshal.PushBack(adaptToResponseTimeoutError) + r.Handlers.UnmarshalError.PushBack(adaptToResponseTimeoutError) + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go b/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go new file mode 100644 index 00000000000..8630683f317 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go @@ -0,0 +1,286 @@ +package request + +import ( + "bytes" + "fmt" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +const ( + // InvalidParameterErrCode is the error code for invalid parameters errors + InvalidParameterErrCode = "InvalidParameter" + // ParamRequiredErrCode is the error code for required parameter errors + ParamRequiredErrCode = "ParamRequiredError" + // ParamMinValueErrCode is the error code for fields with too low of a + // number value. + ParamMinValueErrCode = "ParamMinValueError" + // ParamMinLenErrCode is the error code for fields without enough elements. + ParamMinLenErrCode = "ParamMinLenError" + // ParamMaxLenErrCode is the error code for value being too long. + ParamMaxLenErrCode = "ParamMaxLenError" + + // ParamFormatErrCode is the error code for a field with invalid + // format or characters. + ParamFormatErrCode = "ParamFormatInvalidError" +) + +// Validator provides a way for types to perform validation logic on their +// input values that external code can use to determine if a type's values +// are valid. +type Validator interface { + Validate() error +} + +// An ErrInvalidParams provides wrapping of invalid parameter errors found when +// validating API operation input parameters. +type ErrInvalidParams struct { + // Context is the base context of the invalid parameter group. + Context string + errs []ErrInvalidParam +} + +// Add adds a new invalid parameter error to the collection of invalid +// parameters. The context of the invalid parameter will be updated to reflect +// this collection. +func (e *ErrInvalidParams) Add(err ErrInvalidParam) { + err.SetContext(e.Context) + e.errs = append(e.errs, err) +} + +// AddNested adds the invalid parameter errors from another ErrInvalidParams +// value into this collection. The nested errors will have their nested context +// updated and base context to reflect the merging. +// +// Use for nested validations errors. +func (e *ErrInvalidParams) AddNested(nestedCtx string, nested ErrInvalidParams) { + for _, err := range nested.errs { + err.SetContext(e.Context) + err.AddNestedContext(nestedCtx) + e.errs = append(e.errs, err) + } +} + +// Len returns the number of invalid parameter errors +func (e ErrInvalidParams) Len() int { + return len(e.errs) +} + +// Code returns the code of the error +func (e ErrInvalidParams) Code() string { + return InvalidParameterErrCode +} + +// Message returns the message of the error +func (e ErrInvalidParams) Message() string { + return fmt.Sprintf("%d validation error(s) found.", len(e.errs)) +} + +// Error returns the string formatted form of the invalid parameters. +func (e ErrInvalidParams) Error() string { + w := &bytes.Buffer{} + fmt.Fprintf(w, "%s: %s\n", e.Code(), e.Message()) + + for _, err := range e.errs { + fmt.Fprintf(w, "- %s\n", err.Message()) + } + + return w.String() +} + +// OrigErr returns the invalid parameters as a awserr.BatchedErrors value +func (e ErrInvalidParams) OrigErr() error { + return awserr.NewBatchError( + InvalidParameterErrCode, e.Message(), e.OrigErrs()) +} + +// OrigErrs returns a slice of the invalid parameters +func (e ErrInvalidParams) OrigErrs() []error { + errs := make([]error, len(e.errs)) + for i := 0; i < len(errs); i++ { + errs[i] = e.errs[i] + } + + return errs +} + +// An ErrInvalidParam represents an invalid parameter error type. +type ErrInvalidParam interface { + awserr.Error + + // Field name the error occurred on. + Field() string + + // SetContext updates the context of the error. + SetContext(string) + + // AddNestedContext updates the error's context to include a nested level. + AddNestedContext(string) +} + +type errInvalidParam struct { + context string + nestedContext string + field string + code string + msg string +} + +// Code returns the error code for the type of invalid parameter. +func (e *errInvalidParam) Code() string { + return e.code +} + +// Message returns the reason the parameter was invalid, and its context. +func (e *errInvalidParam) Message() string { + return fmt.Sprintf("%s, %s.", e.msg, e.Field()) +} + +// Error returns the string version of the invalid parameter error. +func (e *errInvalidParam) Error() string { + return fmt.Sprintf("%s: %s", e.code, e.Message()) +} + +// OrigErr returns nil, Implemented for awserr.Error interface. +func (e *errInvalidParam) OrigErr() error { + return nil +} + +// Field Returns the field and context the error occurred. +func (e *errInvalidParam) Field() string { + field := e.context + if len(field) > 0 { + field += "." + } + if len(e.nestedContext) > 0 { + field += fmt.Sprintf("%s.", e.nestedContext) + } + field += e.field + + return field +} + +// SetContext updates the base context of the error. +func (e *errInvalidParam) SetContext(ctx string) { + e.context = ctx +} + +// AddNestedContext prepends a context to the field's path. +func (e *errInvalidParam) AddNestedContext(ctx string) { + if len(e.nestedContext) == 0 { + e.nestedContext = ctx + } else { + e.nestedContext = fmt.Sprintf("%s.%s", ctx, e.nestedContext) + } + +} + +// An ErrParamRequired represents an required parameter error. +type ErrParamRequired struct { + errInvalidParam +} + +// NewErrParamRequired creates a new required parameter error. +func NewErrParamRequired(field string) *ErrParamRequired { + return &ErrParamRequired{ + errInvalidParam{ + code: ParamRequiredErrCode, + field: field, + msg: fmt.Sprintf("missing required field"), + }, + } +} + +// An ErrParamMinValue represents a minimum value parameter error. +type ErrParamMinValue struct { + errInvalidParam + min float64 +} + +// NewErrParamMinValue creates a new minimum value parameter error. +func NewErrParamMinValue(field string, min float64) *ErrParamMinValue { + return &ErrParamMinValue{ + errInvalidParam: errInvalidParam{ + code: ParamMinValueErrCode, + field: field, + msg: fmt.Sprintf("minimum field value of %v", min), + }, + min: min, + } +} + +// MinValue returns the field's require minimum value. +// +// float64 is returned for both int and float min values. +func (e *ErrParamMinValue) MinValue() float64 { + return e.min +} + +// An ErrParamMinLen represents a minimum length parameter error. +type ErrParamMinLen struct { + errInvalidParam + min int +} + +// NewErrParamMinLen creates a new minimum length parameter error. +func NewErrParamMinLen(field string, min int) *ErrParamMinLen { + return &ErrParamMinLen{ + errInvalidParam: errInvalidParam{ + code: ParamMinLenErrCode, + field: field, + msg: fmt.Sprintf("minimum field size of %v", min), + }, + min: min, + } +} + +// MinLen returns the field's required minimum length. +func (e *ErrParamMinLen) MinLen() int { + return e.min +} + +// An ErrParamMaxLen represents a maximum length parameter error. +type ErrParamMaxLen struct { + errInvalidParam + max int +} + +// NewErrParamMaxLen creates a new maximum length parameter error. +func NewErrParamMaxLen(field string, max int, value string) *ErrParamMaxLen { + return &ErrParamMaxLen{ + errInvalidParam: errInvalidParam{ + code: ParamMaxLenErrCode, + field: field, + msg: fmt.Sprintf("maximum size of %v, %v", max, value), + }, + max: max, + } +} + +// MaxLen returns the field's required minimum length. +func (e *ErrParamMaxLen) MaxLen() int { + return e.max +} + +// An ErrParamFormat represents a invalid format parameter error. +type ErrParamFormat struct { + errInvalidParam + format string +} + +// NewErrParamFormat creates a new invalid format parameter error. +func NewErrParamFormat(field string, format, value string) *ErrParamFormat { + return &ErrParamFormat{ + errInvalidParam: errInvalidParam{ + code: ParamFormatErrCode, + field: field, + msg: fmt.Sprintf("format %v, %v", format, value), + }, + format: format, + } +} + +// Format returns the field's required format. +func (e *ErrParamFormat) Format() string { + return e.format +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go b/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go new file mode 100644 index 00000000000..4601f883cc5 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go @@ -0,0 +1,295 @@ +package request + +import ( + "fmt" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/awsutil" +) + +// WaiterResourceNotReadyErrorCode is the error code returned by a waiter when +// the waiter's max attempts have been exhausted. +const WaiterResourceNotReadyErrorCode = "ResourceNotReady" + +// A WaiterOption is a function that will update the Waiter value's fields to +// configure the waiter. +type WaiterOption func(*Waiter) + +// WithWaiterMaxAttempts returns the maximum number of times the waiter should +// attempt to check the resource for the target state. +func WithWaiterMaxAttempts(max int) WaiterOption { + return func(w *Waiter) { + w.MaxAttempts = max + } +} + +// WaiterDelay will return a delay the waiter should pause between attempts to +// check the resource state. The passed in attempt is the number of times the +// Waiter has checked the resource state. +// +// Attempt is the number of attempts the Waiter has made checking the resource +// state. +type WaiterDelay func(attempt int) time.Duration + +// ConstantWaiterDelay returns a WaiterDelay that will always return a constant +// delay the waiter should use between attempts. It ignores the number of +// attempts made. +func ConstantWaiterDelay(delay time.Duration) WaiterDelay { + return func(attempt int) time.Duration { + return delay + } +} + +// WithWaiterDelay will set the Waiter to use the WaiterDelay passed in. +func WithWaiterDelay(delayer WaiterDelay) WaiterOption { + return func(w *Waiter) { + w.Delay = delayer + } +} + +// WithWaiterLogger returns a waiter option to set the logger a waiter +// should use to log warnings and errors to. +func WithWaiterLogger(logger aws.Logger) WaiterOption { + return func(w *Waiter) { + w.Logger = logger + } +} + +// WithWaiterRequestOptions returns a waiter option setting the request +// options for each request the waiter makes. Appends to waiter's request +// options already set. +func WithWaiterRequestOptions(opts ...Option) WaiterOption { + return func(w *Waiter) { + w.RequestOptions = append(w.RequestOptions, opts...) + } +} + +// A Waiter provides the functionality to perform a blocking call which will +// wait for a resource state to be satisfied by a service. +// +// This type should not be used directly. The API operations provided in the +// service packages prefixed with "WaitUntil" should be used instead. +type Waiter struct { + Name string + Acceptors []WaiterAcceptor + Logger aws.Logger + + MaxAttempts int + Delay WaiterDelay + + RequestOptions []Option + NewRequest func([]Option) (*Request, error) + SleepWithContext func(aws.Context, time.Duration) error +} + +// ApplyOptions updates the waiter with the list of waiter options provided. +func (w *Waiter) ApplyOptions(opts ...WaiterOption) { + for _, fn := range opts { + fn(w) + } +} + +// WaiterState are states the waiter uses based on WaiterAcceptor definitions +// to identify if the resource state the waiter is waiting on has occurred. +type WaiterState int + +// String returns the string representation of the waiter state. +func (s WaiterState) String() string { + switch s { + case SuccessWaiterState: + return "success" + case FailureWaiterState: + return "failure" + case RetryWaiterState: + return "retry" + default: + return "unknown waiter state" + } +} + +// States the waiter acceptors will use to identify target resource states. +const ( + SuccessWaiterState WaiterState = iota // waiter successful + FailureWaiterState // waiter failed + RetryWaiterState // waiter needs to be retried +) + +// WaiterMatchMode is the mode that the waiter will use to match the WaiterAcceptor +// definition's Expected attribute. +type WaiterMatchMode int + +// Modes the waiter will use when inspecting API response to identify target +// resource states. +const ( + PathAllWaiterMatch WaiterMatchMode = iota // match on all paths + PathWaiterMatch // match on specific path + PathAnyWaiterMatch // match on any path + PathListWaiterMatch // match on list of paths + StatusWaiterMatch // match on status code + ErrorWaiterMatch // match on error +) + +// String returns the string representation of the waiter match mode. +func (m WaiterMatchMode) String() string { + switch m { + case PathAllWaiterMatch: + return "pathAll" + case PathWaiterMatch: + return "path" + case PathAnyWaiterMatch: + return "pathAny" + case PathListWaiterMatch: + return "pathList" + case StatusWaiterMatch: + return "status" + case ErrorWaiterMatch: + return "error" + default: + return "unknown waiter match mode" + } +} + +// WaitWithContext will make requests for the API operation using NewRequest to +// build API requests. The request's response will be compared against the +// Waiter's Acceptors to determine the successful state of the resource the +// waiter is inspecting. +// +// The passed in context must not be nil. If it is nil a panic will occur. The +// Context will be used to cancel the waiter's pending requests and retry delays. +// Use aws.BackgroundContext if no context is available. +// +// The waiter will continue until the target state defined by the Acceptors, +// or the max attempts expires. +// +// Will return the WaiterResourceNotReadyErrorCode error code if the waiter's +// retryer ShouldRetry returns false. This normally will happen when the max +// wait attempts expires. +func (w Waiter) WaitWithContext(ctx aws.Context) error { + + for attempt := 1; ; attempt++ { + req, err := w.NewRequest(w.RequestOptions) + if err != nil { + waiterLogf(w.Logger, "unable to create request %v", err) + return err + } + req.Handlers.Build.PushBack(MakeAddToUserAgentFreeFormHandler("Waiter")) + err = req.Send() + + // See if any of the acceptors match the request's response, or error + for _, a := range w.Acceptors { + if matched, matchErr := a.match(w.Name, w.Logger, req, err); matched { + return matchErr + } + } + + // The Waiter should only check the resource state MaxAttempts times + // This is here instead of in the for loop above to prevent delaying + // unnecessary when the waiter will not retry. + if attempt == w.MaxAttempts { + break + } + + // Delay to wait before inspecting the resource again + delay := w.Delay(attempt) + if sleepFn := req.Config.SleepDelay; sleepFn != nil { + // Support SleepDelay for backwards compatibility and testing + sleepFn(delay) + } else { + sleepCtxFn := w.SleepWithContext + if sleepCtxFn == nil { + sleepCtxFn = aws.SleepWithContext + } + + if err := sleepCtxFn(ctx, delay); err != nil { + return awserr.New(CanceledErrorCode, "waiter context canceled", err) + } + } + } + + return awserr.New(WaiterResourceNotReadyErrorCode, "exceeded wait attempts", nil) +} + +// A WaiterAcceptor provides the information needed to wait for an API operation +// to complete. +type WaiterAcceptor struct { + State WaiterState + Matcher WaiterMatchMode + Argument string + Expected interface{} +} + +// match returns if the acceptor found a match with the passed in request +// or error. True is returned if the acceptor made a match, error is returned +// if there was an error attempting to perform the match. +func (a *WaiterAcceptor) match(name string, l aws.Logger, req *Request, err error) (bool, error) { + result := false + var vals []interface{} + + switch a.Matcher { + case PathAllWaiterMatch, PathWaiterMatch: + // Require all matches to be equal for result to match + vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) + if len(vals) == 0 { + break + } + result = true + for _, val := range vals { + if !awsutil.DeepEqual(val, a.Expected) { + result = false + break + } + } + case PathAnyWaiterMatch: + // Only a single match needs to equal for the result to match + vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) + for _, val := range vals { + if awsutil.DeepEqual(val, a.Expected) { + result = true + break + } + } + case PathListWaiterMatch: + // ignored matcher + case StatusWaiterMatch: + s := a.Expected.(int) + result = s == req.HTTPResponse.StatusCode + case ErrorWaiterMatch: + if aerr, ok := err.(awserr.Error); ok { + result = aerr.Code() == a.Expected.(string) + } + default: + waiterLogf(l, "WARNING: Waiter %s encountered unexpected matcher: %s", + name, a.Matcher) + } + + if !result { + // If there was no matching result found there is nothing more to do + // for this response, retry the request. + return false, nil + } + + switch a.State { + case SuccessWaiterState: + // waiter completed + return true, nil + case FailureWaiterState: + // Waiter failure state triggered + return true, awserr.New(WaiterResourceNotReadyErrorCode, + "failed waiting for successful resource state", err) + case RetryWaiterState: + // clear the error and retry the operation + return false, nil + default: + waiterLogf(l, "WARNING: Waiter %s encountered unexpected state: %s", + name, a.State) + return false, nil + } +} + +func waiterLogf(logger aws.Logger, msg string, args ...interface{}) { + if logger != nil { + logger.Log(fmt.Sprintf(msg, args...)) + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go b/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go new file mode 100644 index 00000000000..ea9ebb6f6a2 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go @@ -0,0 +1,26 @@ +// +build go1.7 + +package session + +import ( + "net" + "net/http" + "time" +) + +// Transport that should be used when a custom CA bundle is specified with the +// SDK. +func getCABundleTransport() *http.Transport { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + DualStack: true, + }).DialContext, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go b/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go new file mode 100644 index 00000000000..fec39dfc126 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go @@ -0,0 +1,22 @@ +// +build !go1.6,go1.5 + +package session + +import ( + "net" + "net/http" + "time" +) + +// Transport that should be used when a custom CA bundle is specified with the +// SDK. +func getCABundleTransport() *http.Transport { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go b/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go new file mode 100644 index 00000000000..1c5a5391e65 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go @@ -0,0 +1,23 @@ +// +build !go1.7,go1.6 + +package session + +import ( + "net" + "net/http" + "time" +) + +// Transport that should be used when a custom CA bundle is specified with the +// SDK. +func getCABundleTransport() *http.Transport { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go b/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go new file mode 100644 index 00000000000..cc64e24f1d5 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go @@ -0,0 +1,259 @@ +package session + +import ( + "fmt" + "os" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/credentials/processcreds" + "github.com/aws/aws-sdk-go/aws/credentials/stscreds" + "github.com/aws/aws-sdk-go/aws/defaults" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/shareddefaults" +) + +func resolveCredentials(cfg *aws.Config, + envCfg envConfig, sharedCfg sharedConfig, + handlers request.Handlers, + sessOpts Options, +) (*credentials.Credentials, error) { + + switch { + case len(sessOpts.Profile) != 0: + // User explicitly provided an Profile in the session's configuration + // so load that profile from shared config first. + // Github(aws/aws-sdk-go#2727) + return resolveCredsFromProfile(cfg, envCfg, sharedCfg, handlers, sessOpts) + + case envCfg.Creds.HasKeys(): + // Environment credentials + return credentials.NewStaticCredentialsFromCreds(envCfg.Creds), nil + + case len(envCfg.WebIdentityTokenFilePath) != 0: + // Web identity token from environment, RoleARN required to also be + // set. + return assumeWebIdentity(cfg, handlers, + envCfg.WebIdentityTokenFilePath, + envCfg.RoleARN, + envCfg.RoleSessionName, + ) + + default: + // Fallback to the "default" credential resolution chain. + return resolveCredsFromProfile(cfg, envCfg, sharedCfg, handlers, sessOpts) + } +} + +// WebIdentityEmptyRoleARNErr will occur if 'AWS_WEB_IDENTITY_TOKEN_FILE' was set but +// 'AWS_ROLE_ARN' was not set. +var WebIdentityEmptyRoleARNErr = awserr.New(stscreds.ErrCodeWebIdentity, "role ARN is not set", nil) + +// WebIdentityEmptyTokenFilePathErr will occur if 'AWS_ROLE_ARN' was set but +// 'AWS_WEB_IDENTITY_TOKEN_FILE' was not set. +var WebIdentityEmptyTokenFilePathErr = awserr.New(stscreds.ErrCodeWebIdentity, "token file path is not set", nil) + +func assumeWebIdentity(cfg *aws.Config, handlers request.Handlers, + filepath string, + roleARN, sessionName string, +) (*credentials.Credentials, error) { + + if len(filepath) == 0 { + return nil, WebIdentityEmptyTokenFilePathErr + } + + if len(roleARN) == 0 { + return nil, WebIdentityEmptyRoleARNErr + } + + creds := stscreds.NewWebIdentityCredentials( + &Session{ + Config: cfg, + Handlers: handlers.Copy(), + }, + roleARN, + sessionName, + filepath, + ) + + return creds, nil +} + +func resolveCredsFromProfile(cfg *aws.Config, + envCfg envConfig, sharedCfg sharedConfig, + handlers request.Handlers, + sessOpts Options, +) (creds *credentials.Credentials, err error) { + + switch { + case sharedCfg.SourceProfile != nil: + // Assume IAM role with credentials source from a different profile. + creds, err = resolveCredsFromProfile(cfg, envCfg, + *sharedCfg.SourceProfile, handlers, sessOpts, + ) + + case sharedCfg.Creds.HasKeys(): + // Static Credentials from Shared Config/Credentials file. + creds = credentials.NewStaticCredentialsFromCreds( + sharedCfg.Creds, + ) + + case len(sharedCfg.CredentialProcess) != 0: + // Get credentials from CredentialProcess + creds = processcreds.NewCredentials(sharedCfg.CredentialProcess) + + case len(sharedCfg.CredentialSource) != 0: + creds, err = resolveCredsFromSource(cfg, envCfg, + sharedCfg, handlers, sessOpts, + ) + + case len(sharedCfg.WebIdentityTokenFile) != 0: + // Credentials from Assume Web Identity token require an IAM Role, and + // that roll will be assumed. May be wrapped with another assume role + // via SourceProfile. + return assumeWebIdentity(cfg, handlers, + sharedCfg.WebIdentityTokenFile, + sharedCfg.RoleARN, + sharedCfg.RoleSessionName, + ) + + default: + // Fallback to default credentials provider, include mock errors for + // the credential chain so user can identify why credentials failed to + // be retrieved. + creds = credentials.NewCredentials(&credentials.ChainProvider{ + VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors), + Providers: []credentials.Provider{ + &credProviderError{ + Err: awserr.New("EnvAccessKeyNotFound", + "failed to find credentials in the environment.", nil), + }, + &credProviderError{ + Err: awserr.New("SharedCredsLoad", + fmt.Sprintf("failed to load profile, %s.", envCfg.Profile), nil), + }, + defaults.RemoteCredProvider(*cfg, handlers), + }, + }) + } + if err != nil { + return nil, err + } + + if len(sharedCfg.RoleARN) > 0 { + cfgCp := *cfg + cfgCp.Credentials = creds + return credsFromAssumeRole(cfgCp, handlers, sharedCfg, sessOpts) + } + + return creds, nil +} + +// valid credential source values +const ( + credSourceEc2Metadata = "Ec2InstanceMetadata" + credSourceEnvironment = "Environment" + credSourceECSContainer = "EcsContainer" +) + +func resolveCredsFromSource(cfg *aws.Config, + envCfg envConfig, sharedCfg sharedConfig, + handlers request.Handlers, + sessOpts Options, +) (creds *credentials.Credentials, err error) { + + switch sharedCfg.CredentialSource { + case credSourceEc2Metadata: + p := defaults.RemoteCredProvider(*cfg, handlers) + creds = credentials.NewCredentials(p) + + case credSourceEnvironment: + creds = credentials.NewStaticCredentialsFromCreds(envCfg.Creds) + + case credSourceECSContainer: + if len(os.Getenv(shareddefaults.ECSCredsProviderEnvVar)) == 0 { + return nil, ErrSharedConfigECSContainerEnvVarEmpty + } + + p := defaults.RemoteCredProvider(*cfg, handlers) + creds = credentials.NewCredentials(p) + + default: + return nil, ErrSharedConfigInvalidCredSource + } + + return creds, nil +} + +func credsFromAssumeRole(cfg aws.Config, + handlers request.Handlers, + sharedCfg sharedConfig, + sessOpts Options, +) (*credentials.Credentials, error) { + + if len(sharedCfg.MFASerial) != 0 && sessOpts.AssumeRoleTokenProvider == nil { + // AssumeRole Token provider is required if doing Assume Role + // with MFA. + return nil, AssumeRoleTokenProviderNotSetError{} + } + + return stscreds.NewCredentials( + &Session{ + Config: &cfg, + Handlers: handlers.Copy(), + }, + sharedCfg.RoleARN, + func(opt *stscreds.AssumeRoleProvider) { + opt.RoleSessionName = sharedCfg.RoleSessionName + opt.Duration = sessOpts.AssumeRoleDuration + + // Assume role with external ID + if len(sharedCfg.ExternalID) > 0 { + opt.ExternalID = aws.String(sharedCfg.ExternalID) + } + + // Assume role with MFA + if len(sharedCfg.MFASerial) > 0 { + opt.SerialNumber = aws.String(sharedCfg.MFASerial) + opt.TokenProvider = sessOpts.AssumeRoleTokenProvider + } + }, + ), nil +} + +// AssumeRoleTokenProviderNotSetError is an error returned when creating a +// session when the MFAToken option is not set when shared config is configured +// load assume a role with an MFA token. +type AssumeRoleTokenProviderNotSetError struct{} + +// Code is the short id of the error. +func (e AssumeRoleTokenProviderNotSetError) Code() string { + return "AssumeRoleTokenProviderNotSetError" +} + +// Message is the description of the error +func (e AssumeRoleTokenProviderNotSetError) Message() string { + return fmt.Sprintf("assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.") +} + +// OrigErr is the underlying error that caused the failure. +func (e AssumeRoleTokenProviderNotSetError) OrigErr() error { + return nil +} + +// Error satisfies the error interface. +func (e AssumeRoleTokenProviderNotSetError) Error() string { + return awserr.SprintError(e.Code(), e.Message(), "", nil) +} + +type credProviderError struct { + Err error +} + +func (c credProviderError) Retrieve() (credentials.Value, error) { + return credentials.Value{}, c.Err +} +func (c credProviderError) IsExpired() bool { + return true +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go b/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go new file mode 100644 index 00000000000..7ec66e7e589 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go @@ -0,0 +1,245 @@ +/* +Package session provides configuration for the SDK's service clients. Sessions +can be shared across service clients that share the same base configuration. + +Sessions are safe to use concurrently as long as the Session is not being +modified. Sessions should be cached when possible, because creating a new +Session will load all configuration values from the environment, and config +files each time the Session is created. Sharing the Session value across all of +your service clients will ensure the configuration is loaded the fewest number +of times possible. + +Sessions options from Shared Config + +By default NewSession will only load credentials from the shared credentials +file (~/.aws/credentials). If the AWS_SDK_LOAD_CONFIG environment variable is +set to a truthy value the Session will be created from the configuration +values from the shared config (~/.aws/config) and shared credentials +(~/.aws/credentials) files. Using the NewSessionWithOptions with +SharedConfigState set to SharedConfigEnable will create the session as if the +AWS_SDK_LOAD_CONFIG environment variable was set. + +Credential and config loading order + +The Session will attempt to load configuration and credentials from the +environment, configuration files, and other credential sources. The order +configuration is loaded in is: + + * Environment Variables + * Shared Credentials file + * Shared Configuration file (if SharedConfig is enabled) + * EC2 Instance Metadata (credentials only) + +The Environment variables for credentials will have precedence over shared +config even if SharedConfig is enabled. To override this behavior, and use +shared config credentials instead specify the session.Options.Profile, (e.g. +when using credential_source=Environment to assume a role). + + sess, err := session.NewSessionWithOptions(session.Options{ + Profile: "myProfile", + }) + +Creating Sessions + +Creating a Session without additional options will load credentials region, and +profile loaded from the environment and shared config automatically. See, +"Environment Variables" section for information on environment variables used +by Session. + + // Create Session + sess, err := session.NewSession() + + +When creating Sessions optional aws.Config values can be passed in that will +override the default, or loaded, config values the Session is being created +with. This allows you to provide additional, or case based, configuration +as needed. + + // Create a Session with a custom region + sess, err := session.NewSession(&aws.Config{ + Region: aws.String("us-west-2"), + }) + +Use NewSessionWithOptions to provide additional configuration driving how the +Session's configuration will be loaded. Such as, specifying shared config +profile, or override the shared config state, (AWS_SDK_LOAD_CONFIG). + + // Equivalent to session.NewSession() + sess, err := session.NewSessionWithOptions(session.Options{ + // Options + }) + + sess, err := session.NewSessionWithOptions(session.Options{ + // Specify profile to load for the session's config + Profile: "profile_name", + + // Provide SDK Config options, such as Region. + Config: aws.Config{ + Region: aws.String("us-west-2"), + }, + + // Force enable Shared Config support + SharedConfigState: session.SharedConfigEnable, + }) + +Adding Handlers + +You can add handlers to a session to decorate API operation, (e.g. adding HTTP +headers). All clients that use the Session receive a copy of the Session's +handlers. For example, the following request handler added to the Session logs +every requests made. + + // Create a session, and add additional handlers for all service + // clients created with the Session to inherit. Adds logging handler. + sess := session.Must(session.NewSession()) + + sess.Handlers.Send.PushFront(func(r *request.Request) { + // Log every request made and its payload + logger.Printf("Request: %s/%s, Params: %s", + r.ClientInfo.ServiceName, r.Operation, r.Params) + }) + +Shared Config Fields + +By default the SDK will only load the shared credentials file's +(~/.aws/credentials) credentials values, and all other config is provided by +the environment variables, SDK defaults, and user provided aws.Config values. + +If the AWS_SDK_LOAD_CONFIG environment variable is set, or SharedConfigEnable +option is used to create the Session the full shared config values will be +loaded. This includes credentials, region, and support for assume role. In +addition the Session will load its configuration from both the shared config +file (~/.aws/config) and shared credentials file (~/.aws/credentials). Both +files have the same format. + +If both config files are present the configuration from both files will be +read. The Session will be created from configuration values from the shared +credentials file (~/.aws/credentials) over those in the shared config file +(~/.aws/config). + +Credentials are the values the SDK uses to authenticating requests with AWS +Services. When specified in a file, both aws_access_key_id and +aws_secret_access_key must be provided together in the same file to be +considered valid. They will be ignored if both are not present. +aws_session_token is an optional field that can be provided in addition to the +other two fields. + + aws_access_key_id = AKID + aws_secret_access_key = SECRET + aws_session_token = TOKEN + + ; region only supported if SharedConfigEnabled. + region = us-east-1 + +Assume Role configuration + +The role_arn field allows you to configure the SDK to assume an IAM role using +a set of credentials from another source. Such as when paired with static +credentials, "profile_source", "credential_process", or "credential_source" +fields. If "role_arn" is provided, a source of credentials must also be +specified, such as "source_profile", "credential_source", or +"credential_process". + + role_arn = arn:aws:iam:::role/ + source_profile = profile_with_creds + external_id = 1234 + mfa_serial = + role_session_name = session_name + + +The SDK supports assuming a role with MFA token. If "mfa_serial" is set, you +must also set the Session Option.AssumeRoleTokenProvider. The Session will fail +to load if the AssumeRoleTokenProvider is not specified. + + sess := session.Must(session.NewSessionWithOptions(session.Options{ + AssumeRoleTokenProvider: stscreds.StdinTokenProvider, + })) + +To setup Assume Role outside of a session see the stscreds.AssumeRoleProvider +documentation. + +Environment Variables + +When a Session is created several environment variables can be set to adjust +how the SDK functions, and what configuration data it loads when creating +Sessions. All environment values are optional, but some values like credentials +require multiple of the values to set or the partial values will be ignored. +All environment variable values are strings unless otherwise noted. + +Environment configuration values. If set both Access Key ID and Secret Access +Key must be provided. Session Token and optionally also be provided, but is +not required. + + # Access Key ID + AWS_ACCESS_KEY_ID=AKID + AWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set. + + # Secret Access Key + AWS_SECRET_ACCESS_KEY=SECRET + AWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set. + + # Session Token + AWS_SESSION_TOKEN=TOKEN + +Region value will instruct the SDK where to make service API requests to. If is +not provided in the environment the region must be provided before a service +client request is made. + + AWS_REGION=us-east-1 + + # AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set, + # and AWS_REGION is not also set. + AWS_DEFAULT_REGION=us-east-1 + +Profile name the SDK should load use when loading shared config from the +configuration files. If not provided "default" will be used as the profile name. + + AWS_PROFILE=my_profile + + # AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set, + # and AWS_PROFILE is not also set. + AWS_DEFAULT_PROFILE=my_profile + +SDK load config instructs the SDK to load the shared config in addition to +shared credentials. This also expands the configuration loaded so the shared +credentials will have parity with the shared config file. This also enables +Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE +env values as well. + + AWS_SDK_LOAD_CONFIG=1 + +Shared credentials file path can be set to instruct the SDK to use an alternative +file for the shared credentials. If not set the file will be loaded from +$HOME/.aws/credentials on Linux/Unix based systems, and +%USERPROFILE%\.aws\credentials on Windows. + + AWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials + +Shared config file path can be set to instruct the SDK to use an alternative +file for the shared config. If not set the file will be loaded from +$HOME/.aws/config on Linux/Unix based systems, and +%USERPROFILE%\.aws\config on Windows. + + AWS_CONFIG_FILE=$HOME/my_shared_config + +Path to a custom Credentials Authority (CA) bundle PEM file that the SDK +will use instead of the default system's root CA bundle. Use this only +if you want to replace the CA bundle the SDK uses for TLS requests. + + AWS_CA_BUNDLE=$HOME/my_custom_ca_bundle + +Enabling this option will attempt to merge the Transport into the SDK's HTTP +client. If the client's Transport is not a http.Transport an error will be +returned. If the Transport's TLS config is set this option will cause the SDK +to overwrite the Transport's TLS config's RootCAs value. If the CA bundle file +contains multiple certificates all of them will be loaded. + +The Session option CustomCABundle is also available when creating sessions +to also enable this feature. CustomCABundle session option field has priority +over the AWS_CA_BUNDLE environment variable, and will be used if both are set. + +Setting a custom HTTPClient in the aws.Config options will override this setting. +To use this option and custom HTTP client, the HTTP client needs to be provided +when creating the session. Not the service client. +*/ +package session diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go b/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go new file mode 100644 index 00000000000..4092ab8fb7e --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go @@ -0,0 +1,320 @@ +package session + +import ( + "fmt" + "os" + "strconv" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/defaults" + "github.com/aws/aws-sdk-go/aws/endpoints" +) + +// EnvProviderName provides a name of the provider when config is loaded from environment. +const EnvProviderName = "EnvConfigCredentials" + +// envConfig is a collection of environment values the SDK will read +// setup config from. All environment values are optional. But some values +// such as credentials require multiple values to be complete or the values +// will be ignored. +type envConfig struct { + // Environment configuration values. If set both Access Key ID and Secret Access + // Key must be provided. Session Token and optionally also be provided, but is + // not required. + // + // # Access Key ID + // AWS_ACCESS_KEY_ID=AKID + // AWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set. + // + // # Secret Access Key + // AWS_SECRET_ACCESS_KEY=SECRET + // AWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set. + // + // # Session Token + // AWS_SESSION_TOKEN=TOKEN + Creds credentials.Value + + // Region value will instruct the SDK where to make service API requests to. If is + // not provided in the environment the region must be provided before a service + // client request is made. + // + // AWS_REGION=us-east-1 + // + // # AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set, + // # and AWS_REGION is not also set. + // AWS_DEFAULT_REGION=us-east-1 + Region string + + // Profile name the SDK should load use when loading shared configuration from the + // shared configuration files. If not provided "default" will be used as the + // profile name. + // + // AWS_PROFILE=my_profile + // + // # AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set, + // # and AWS_PROFILE is not also set. + // AWS_DEFAULT_PROFILE=my_profile + Profile string + + // SDK load config instructs the SDK to load the shared config in addition to + // shared credentials. This also expands the configuration loaded from the shared + // credentials to have parity with the shared config file. This also enables + // Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE + // env values as well. + // + // AWS_SDK_LOAD_CONFIG=1 + EnableSharedConfig bool + + // Shared credentials file path can be set to instruct the SDK to use an alternate + // file for the shared credentials. If not set the file will be loaded from + // $HOME/.aws/credentials on Linux/Unix based systems, and + // %USERPROFILE%\.aws\credentials on Windows. + // + // AWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials + SharedCredentialsFile string + + // Shared config file path can be set to instruct the SDK to use an alternate + // file for the shared config. If not set the file will be loaded from + // $HOME/.aws/config on Linux/Unix based systems, and + // %USERPROFILE%\.aws\config on Windows. + // + // AWS_CONFIG_FILE=$HOME/my_shared_config + SharedConfigFile string + + // Sets the path to a custom Credentials Authority (CA) Bundle PEM file + // that the SDK will use instead of the system's root CA bundle. + // Only use this if you want to configure the SDK to use a custom set + // of CAs. + // + // Enabling this option will attempt to merge the Transport + // into the SDK's HTTP client. If the client's Transport is + // not a http.Transport an error will be returned. If the + // Transport's TLS config is set this option will cause the + // SDK to overwrite the Transport's TLS config's RootCAs value. + // + // Setting a custom HTTPClient in the aws.Config options will override this setting. + // To use this option and custom HTTP client, the HTTP client needs to be provided + // when creating the session. Not the service client. + // + // AWS_CA_BUNDLE=$HOME/my_custom_ca_bundle + CustomCABundle string + + csmEnabled string + CSMEnabled *bool + CSMPort string + CSMHost string + CSMClientID string + + // Enables endpoint discovery via environment variables. + // + // AWS_ENABLE_ENDPOINT_DISCOVERY=true + EnableEndpointDiscovery *bool + enableEndpointDiscovery string + + // Specifies the WebIdentity token the SDK should use to assume a role + // with. + // + // AWS_WEB_IDENTITY_TOKEN_FILE=file_path + WebIdentityTokenFilePath string + + // Specifies the IAM role arn to use when assuming an role. + // + // AWS_ROLE_ARN=role_arn + RoleARN string + + // Specifies the IAM role session name to use when assuming a role. + // + // AWS_ROLE_SESSION_NAME=session_name + RoleSessionName string + + // Specifies the STS Regional Endpoint flag for the SDK to resolve the endpoint + // for a service. + // + // AWS_STS_REGIONAL_ENDPOINTS=regional + // This can take value as `regional` or `legacy` + STSRegionalEndpoint endpoints.STSRegionalEndpoint + + // Specifies the S3 Regional Endpoint flag for the SDK to resolve the + // endpoint for a service. + // + // AWS_S3_US_EAST_1_REGIONAL_ENDPOINT=regional + // This can take value as `regional` or `legacy` + S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint +} + +var ( + csmEnabledEnvKey = []string{ + "AWS_CSM_ENABLED", + } + csmHostEnvKey = []string{ + "AWS_CSM_HOST", + } + csmPortEnvKey = []string{ + "AWS_CSM_PORT", + } + csmClientIDEnvKey = []string{ + "AWS_CSM_CLIENT_ID", + } + credAccessEnvKey = []string{ + "AWS_ACCESS_KEY_ID", + "AWS_ACCESS_KEY", + } + credSecretEnvKey = []string{ + "AWS_SECRET_ACCESS_KEY", + "AWS_SECRET_KEY", + } + credSessionEnvKey = []string{ + "AWS_SESSION_TOKEN", + } + + enableEndpointDiscoveryEnvKey = []string{ + "AWS_ENABLE_ENDPOINT_DISCOVERY", + } + + regionEnvKeys = []string{ + "AWS_REGION", + "AWS_DEFAULT_REGION", // Only read if AWS_SDK_LOAD_CONFIG is also set + } + profileEnvKeys = []string{ + "AWS_PROFILE", + "AWS_DEFAULT_PROFILE", // Only read if AWS_SDK_LOAD_CONFIG is also set + } + sharedCredsFileEnvKey = []string{ + "AWS_SHARED_CREDENTIALS_FILE", + } + sharedConfigFileEnvKey = []string{ + "AWS_CONFIG_FILE", + } + webIdentityTokenFilePathEnvKey = []string{ + "AWS_WEB_IDENTITY_TOKEN_FILE", + } + roleARNEnvKey = []string{ + "AWS_ROLE_ARN", + } + roleSessionNameEnvKey = []string{ + "AWS_ROLE_SESSION_NAME", + } + stsRegionalEndpointKey = []string{ + "AWS_STS_REGIONAL_ENDPOINTS", + } + s3UsEast1RegionalEndpoint = []string{ + "AWS_S3_US_EAST_1_REGIONAL_ENDPOINT", + } +) + +// loadEnvConfig retrieves the SDK's environment configuration. +// See `envConfig` for the values that will be retrieved. +// +// If the environment variable `AWS_SDK_LOAD_CONFIG` is set to a truthy value +// the shared SDK config will be loaded in addition to the SDK's specific +// configuration values. +func loadEnvConfig() (envConfig, error) { + enableSharedConfig, _ := strconv.ParseBool(os.Getenv("AWS_SDK_LOAD_CONFIG")) + return envConfigLoad(enableSharedConfig) +} + +// loadEnvSharedConfig retrieves the SDK's environment configuration, and the +// SDK shared config. See `envConfig` for the values that will be retrieved. +// +// Loads the shared configuration in addition to the SDK's specific configuration. +// This will load the same values as `loadEnvConfig` if the `AWS_SDK_LOAD_CONFIG` +// environment variable is set. +func loadSharedEnvConfig() (envConfig, error) { + return envConfigLoad(true) +} + +func envConfigLoad(enableSharedConfig bool) (envConfig, error) { + cfg := envConfig{} + + cfg.EnableSharedConfig = enableSharedConfig + + // Static environment credentials + var creds credentials.Value + setFromEnvVal(&creds.AccessKeyID, credAccessEnvKey) + setFromEnvVal(&creds.SecretAccessKey, credSecretEnvKey) + setFromEnvVal(&creds.SessionToken, credSessionEnvKey) + if creds.HasKeys() { + // Require logical grouping of credentials + creds.ProviderName = EnvProviderName + cfg.Creds = creds + } + + // Role Metadata + setFromEnvVal(&cfg.RoleARN, roleARNEnvKey) + setFromEnvVal(&cfg.RoleSessionName, roleSessionNameEnvKey) + + // Web identity environment variables + setFromEnvVal(&cfg.WebIdentityTokenFilePath, webIdentityTokenFilePathEnvKey) + + // CSM environment variables + setFromEnvVal(&cfg.csmEnabled, csmEnabledEnvKey) + setFromEnvVal(&cfg.CSMHost, csmHostEnvKey) + setFromEnvVal(&cfg.CSMPort, csmPortEnvKey) + setFromEnvVal(&cfg.CSMClientID, csmClientIDEnvKey) + + if len(cfg.csmEnabled) != 0 { + v, _ := strconv.ParseBool(cfg.csmEnabled) + cfg.CSMEnabled = &v + } + + regionKeys := regionEnvKeys + profileKeys := profileEnvKeys + if !cfg.EnableSharedConfig { + regionKeys = regionKeys[:1] + profileKeys = profileKeys[:1] + } + + setFromEnvVal(&cfg.Region, regionKeys) + setFromEnvVal(&cfg.Profile, profileKeys) + + // endpoint discovery is in reference to it being enabled. + setFromEnvVal(&cfg.enableEndpointDiscovery, enableEndpointDiscoveryEnvKey) + if len(cfg.enableEndpointDiscovery) > 0 { + cfg.EnableEndpointDiscovery = aws.Bool(cfg.enableEndpointDiscovery != "false") + } + + setFromEnvVal(&cfg.SharedCredentialsFile, sharedCredsFileEnvKey) + setFromEnvVal(&cfg.SharedConfigFile, sharedConfigFileEnvKey) + + if len(cfg.SharedCredentialsFile) == 0 { + cfg.SharedCredentialsFile = defaults.SharedCredentialsFilename() + } + if len(cfg.SharedConfigFile) == 0 { + cfg.SharedConfigFile = defaults.SharedConfigFilename() + } + + cfg.CustomCABundle = os.Getenv("AWS_CA_BUNDLE") + + var err error + // STS Regional Endpoint variable + for _, k := range stsRegionalEndpointKey { + if v := os.Getenv(k); len(v) != 0 { + cfg.STSRegionalEndpoint, err = endpoints.GetSTSRegionalEndpoint(v) + if err != nil { + return cfg, fmt.Errorf("failed to load, %v from env config, %v", k, err) + } + } + } + + // S3 Regional Endpoint variable + for _, k := range s3UsEast1RegionalEndpoint { + if v := os.Getenv(k); len(v) != 0 { + cfg.S3UsEast1RegionalEndpoint, err = endpoints.GetS3UsEast1RegionalEndpoint(v) + if err != nil { + return cfg, fmt.Errorf("failed to load, %v from env config, %v", k, err) + } + } + } + + return cfg, nil +} + +func setFromEnvVal(dst *string, keys []string) { + for _, k := range keys { + if v := os.Getenv(k); len(v) != 0 { + *dst = v + break + } + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/session.go b/vendor/github.com/aws/aws-sdk-go/aws/session/session.go index 6a0f371a29a..ab6daac7c30 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/session/session.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/session/session.go @@ -1,68 +1,606 @@ -// Package session provides a way to create service clients with shared configuration -// and handlers. -// -// Generally this package should be used instead of the `defaults` package. -// -// A session should be used to share configurations and request handlers between multiple -// service clients. When service clients need specific configuration aws.Config can be -// used to provide additional configuration directly to the service client. package session import ( + "crypto/tls" + "crypto/x509" + "fmt" + "io" + "io/ioutil" + "net/http" + "os" + "time" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/corehandlers" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/csm" "github.com/aws/aws-sdk-go/aws/defaults" + "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/endpoints" ) +const ( + // ErrCodeSharedConfig represents an error that occurs in the shared + // configuration logic + ErrCodeSharedConfig = "SharedConfigErr" +) + +// ErrSharedConfigSourceCollision will be returned if a section contains both +// source_profile and credential_source +var ErrSharedConfigSourceCollision = awserr.New(ErrCodeSharedConfig, "only source profile or credential source can be specified, not both", nil) + +// ErrSharedConfigECSContainerEnvVarEmpty will be returned if the environment +// variables are empty and Environment was set as the credential source +var ErrSharedConfigECSContainerEnvVarEmpty = awserr.New(ErrCodeSharedConfig, "EcsContainer was specified as the credential_source, but 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' was not set", nil) + +// ErrSharedConfigInvalidCredSource will be returned if an invalid credential source was provided +var ErrSharedConfigInvalidCredSource = awserr.New(ErrCodeSharedConfig, "credential source values must be EcsContainer, Ec2InstanceMetadata, or Environment", nil) + // A Session provides a central location to create service clients from and // store configurations and request handlers for those services. // // Sessions are safe to create service clients concurrently, but it is not safe -// to mutate the session concurrently. +// to mutate the Session concurrently. +// +// The Session satisfies the service client's client.ConfigProvider. type Session struct { Config *aws.Config Handlers request.Handlers } -// New creates a new instance of the handlers merging in the provided Configs -// on top of the SDK's default configurations. Once the session is created it -// can be mutated to modify Configs or Handlers. The session is safe to be read -// concurrently, but it should not be written to concurrently. +// New creates a new instance of the handlers merging in the provided configs +// on top of the SDK's default configurations. Once the Session is created it +// can be mutated to modify the Config or Handlers. The Session is safe to be +// read concurrently, but it should not be written to concurrently. // -// Example: -// // Create a session with the default config and request handlers. -// sess := session.New() +// If the AWS_SDK_LOAD_CONFIG environment is set to a truthy value, the New +// method could now encounter an error when loading the configuration. When +// The environment variable is set, and an error occurs, New will return a +// session that will fail all requests reporting the error that occurred while +// loading the session. Use NewSession to get the error when creating the +// session. // -// // Create a session with a custom region -// sess := session.New(&aws.Config{Region: aws.String("us-east-1")}) +// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value +// the shared config file (~/.aws/config) will also be loaded, in addition to +// the shared credentials file (~/.aws/credentials). Values set in both the +// shared config, and shared credentials will be taken from the shared +// credentials file. // -// // Create a session, and add additional handlers for all service -// // clients created with the session to inherit. Adds logging handler. -// sess := session.New() -// sess.Handlers.Send.PushFront(func(r *request.Request) { -// // Log every request made and its payload -// logger.Println("Request: %s/%s, Payload: %s", r.ClientInfo.ServiceName, r.Operation, r.Params) -// }) -// -// // Create a S3 client instance from a session -// sess := session.New() -// svc := s3.New(sess) +// Deprecated: Use NewSession functions to create sessions instead. NewSession +// has the same functionality as New except an error can be returned when the +// func is called instead of waiting to receive an error until a request is made. func New(cfgs ...*aws.Config) *Session { - def := defaults.Get() + // load initial config from environment + envCfg, envErr := loadEnvConfig() + + if envCfg.EnableSharedConfig { + var cfg aws.Config + cfg.MergeIn(cfgs...) + s, err := NewSessionWithOptions(Options{ + Config: cfg, + SharedConfigState: SharedConfigEnable, + }) + if err != nil { + // Old session.New expected all errors to be discovered when + // a request is made, and would report the errors then. This + // needs to be replicated if an error occurs while creating + // the session. + msg := "failed to create session with AWS_SDK_LOAD_CONFIG enabled. " + + "Use session.NewSession to handle errors occurring during session creation." + + // Session creation failed, need to report the error and prevent + // any requests from succeeding. + s = &Session{Config: defaults.Config()} + s.logDeprecatedNewSessionError(msg, err, cfgs) + } + + return s + } + + s := deprecatedNewSession(cfgs...) + if envErr != nil { + msg := "failed to load env config" + s.logDeprecatedNewSessionError(msg, envErr, cfgs) + } + + if csmCfg, err := loadCSMConfig(envCfg, []string{}); err != nil { + if l := s.Config.Logger; l != nil { + l.Log(fmt.Sprintf("ERROR: failed to load CSM configuration, %v", err)) + } + } else if csmCfg.Enabled { + err := enableCSM(&s.Handlers, csmCfg, s.Config.Logger) + if err != nil { + msg := "failed to enable CSM" + s.logDeprecatedNewSessionError(msg, err, cfgs) + } + } + + return s +} + +// NewSession returns a new Session created from SDK defaults, config files, +// environment, and user provided config files. Once the Session is created +// it can be mutated to modify the Config or Handlers. The Session is safe to +// be read concurrently, but it should not be written to concurrently. +// +// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value +// the shared config file (~/.aws/config) will also be loaded in addition to +// the shared credentials file (~/.aws/credentials). Values set in both the +// shared config, and shared credentials will be taken from the shared +// credentials file. Enabling the Shared Config will also allow the Session +// to be built with retrieving credentials with AssumeRole set in the config. +// +// See the NewSessionWithOptions func for information on how to override or +// control through code how the Session will be created, such as specifying the +// config profile, and controlling if shared config is enabled or not. +func NewSession(cfgs ...*aws.Config) (*Session, error) { + opts := Options{} + opts.Config.MergeIn(cfgs...) + + return NewSessionWithOptions(opts) +} + +// SharedConfigState provides the ability to optionally override the state +// of the session's creation based on the shared config being enabled or +// disabled. +type SharedConfigState int + +const ( + // SharedConfigStateFromEnv does not override any state of the + // AWS_SDK_LOAD_CONFIG env var. It is the default value of the + // SharedConfigState type. + SharedConfigStateFromEnv SharedConfigState = iota + + // SharedConfigDisable overrides the AWS_SDK_LOAD_CONFIG env var value + // and disables the shared config functionality. + SharedConfigDisable + + // SharedConfigEnable overrides the AWS_SDK_LOAD_CONFIG env var value + // and enables the shared config functionality. + SharedConfigEnable +) + +// Options provides the means to control how a Session is created and what +// configuration values will be loaded. +// +type Options struct { + // Provides config values for the SDK to use when creating service clients + // and making API requests to services. Any value set in with this field + // will override the associated value provided by the SDK defaults, + // environment or config files where relevant. + // + // If not set, configuration values from from SDK defaults, environment, + // config will be used. + Config aws.Config + + // Overrides the config profile the Session should be created from. If not + // set the value of the environment variable will be loaded (AWS_PROFILE, + // or AWS_DEFAULT_PROFILE if the Shared Config is enabled). + // + // If not set and environment variables are not set the "default" + // (DefaultSharedConfigProfile) will be used as the profile to load the + // session config from. + Profile string + + // Instructs how the Session will be created based on the AWS_SDK_LOAD_CONFIG + // environment variable. By default a Session will be created using the + // value provided by the AWS_SDK_LOAD_CONFIG environment variable. + // + // Setting this value to SharedConfigEnable or SharedConfigDisable + // will allow you to override the AWS_SDK_LOAD_CONFIG environment variable + // and enable or disable the shared config functionality. + SharedConfigState SharedConfigState + + // Ordered list of files the session will load configuration from. + // It will override environment variable AWS_SHARED_CREDENTIALS_FILE, AWS_CONFIG_FILE. + SharedConfigFiles []string + + // When the SDK's shared config is configured to assume a role with MFA + // this option is required in order to provide the mechanism that will + // retrieve the MFA token. There is no default value for this field. If + // it is not set an error will be returned when creating the session. + // + // This token provider will be called when ever the assumed role's + // credentials need to be refreshed. Within the context of service clients + // all sharing the same session the SDK will ensure calls to the token + // provider are atomic. When sharing a token provider across multiple + // sessions additional synchronization logic is needed to ensure the + // token providers do not introduce race conditions. It is recommend to + // share the session where possible. + // + // stscreds.StdinTokenProvider is a basic implementation that will prompt + // from stdin for the MFA token code. + // + // This field is only used if the shared configuration is enabled, and + // the config enables assume role wit MFA via the mfa_serial field. + AssumeRoleTokenProvider func() (string, error) + + // When the SDK's shared config is configured to assume a role this option + // may be provided to set the expiry duration of the STS credentials. + // Defaults to 15 minutes if not set as documented in the + // stscreds.AssumeRoleProvider. + AssumeRoleDuration time.Duration + + // Reader for a custom Credentials Authority (CA) bundle in PEM format that + // the SDK will use instead of the default system's root CA bundle. Use this + // only if you want to replace the CA bundle the SDK uses for TLS requests. + // + // Enabling this option will attempt to merge the Transport into the SDK's HTTP + // client. If the client's Transport is not a http.Transport an error will be + // returned. If the Transport's TLS config is set this option will cause the SDK + // to overwrite the Transport's TLS config's RootCAs value. If the CA + // bundle reader contains multiple certificates all of them will be loaded. + // + // The Session option CustomCABundle is also available when creating sessions + // to also enable this feature. CustomCABundle session option field has priority + // over the AWS_CA_BUNDLE environment variable, and will be used if both are set. + CustomCABundle io.Reader + + // The handlers that the session and all API clients will be created with. + // This must be a complete set of handlers. Use the defaults.Handlers() + // function to initialize this value before changing the handlers to be + // used by the SDK. + Handlers request.Handlers +} + +// NewSessionWithOptions returns a new Session created from SDK defaults, config files, +// environment, and user provided config files. This func uses the Options +// values to configure how the Session is created. +// +// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value +// the shared config file (~/.aws/config) will also be loaded in addition to +// the shared credentials file (~/.aws/credentials). Values set in both the +// shared config, and shared credentials will be taken from the shared +// credentials file. Enabling the Shared Config will also allow the Session +// to be built with retrieving credentials with AssumeRole set in the config. +// +// // Equivalent to session.New +// sess := session.Must(session.NewSessionWithOptions(session.Options{})) +// +// // Specify profile to load for the session's config +// sess := session.Must(session.NewSessionWithOptions(session.Options{ +// Profile: "profile_name", +// })) +// +// // Specify profile for config and region for requests +// sess := session.Must(session.NewSessionWithOptions(session.Options{ +// Config: aws.Config{Region: aws.String("us-east-1")}, +// Profile: "profile_name", +// })) +// +// // Force enable Shared Config support +// sess := session.Must(session.NewSessionWithOptions(session.Options{ +// SharedConfigState: session.SharedConfigEnable, +// })) +func NewSessionWithOptions(opts Options) (*Session, error) { + var envCfg envConfig + var err error + if opts.SharedConfigState == SharedConfigEnable { + envCfg, err = loadSharedEnvConfig() + if err != nil { + return nil, fmt.Errorf("failed to load shared config, %v", err) + } + } else { + envCfg, err = loadEnvConfig() + if err != nil { + return nil, fmt.Errorf("failed to load environment config, %v", err) + } + } + + if len(opts.Profile) != 0 { + envCfg.Profile = opts.Profile + } + + switch opts.SharedConfigState { + case SharedConfigDisable: + envCfg.EnableSharedConfig = false + case SharedConfigEnable: + envCfg.EnableSharedConfig = true + } + + // Only use AWS_CA_BUNDLE if session option is not provided. + if len(envCfg.CustomCABundle) != 0 && opts.CustomCABundle == nil { + f, err := os.Open(envCfg.CustomCABundle) + if err != nil { + return nil, awserr.New("LoadCustomCABundleError", + "failed to open custom CA bundle PEM file", err) + } + defer f.Close() + opts.CustomCABundle = f + } + + return newSession(opts, envCfg, &opts.Config) +} + +// Must is a helper function to ensure the Session is valid and there was no +// error when calling a NewSession function. +// +// This helper is intended to be used in variable initialization to load the +// Session and configuration at startup. Such as: +// +// var sess = session.Must(session.NewSession()) +func Must(sess *Session, err error) *Session { + if err != nil { + panic(err) + } + + return sess +} + +func deprecatedNewSession(cfgs ...*aws.Config) *Session { + cfg := defaults.Config() + handlers := defaults.Handlers() + + // Apply the passed in configs so the configuration can be applied to the + // default credential chain + cfg.MergeIn(cfgs...) + if cfg.EndpointResolver == nil { + // An endpoint resolver is required for a session to be able to provide + // endpoints for service client configurations. + cfg.EndpointResolver = endpoints.DefaultResolver() + } + cfg.Credentials = defaults.CredChain(cfg, handlers) + + // Reapply any passed in configs to override credentials if set + cfg.MergeIn(cfgs...) + s := &Session{ - Config: def.Config, - Handlers: def.Handlers, + Config: cfg, + Handlers: handlers, } - s.Config.MergeIn(cfgs...) initHandlers(s) - return s } +func enableCSM(handlers *request.Handlers, cfg csmConfig, logger aws.Logger) error { + if logger != nil { + logger.Log("Enabling CSM") + } + + r, err := csm.Start(cfg.ClientID, csm.AddressWithDefaults(cfg.Host, cfg.Port)) + if err != nil { + return err + } + r.InjectHandlers(handlers) + + return nil +} + +func newSession(opts Options, envCfg envConfig, cfgs ...*aws.Config) (*Session, error) { + cfg := defaults.Config() + + handlers := opts.Handlers + if handlers.IsEmpty() { + handlers = defaults.Handlers() + } + + // Get a merged version of the user provided config to determine if + // credentials were. + userCfg := &aws.Config{} + userCfg.MergeIn(cfgs...) + cfg.MergeIn(userCfg) + + // Ordered config files will be loaded in with later files overwriting + // previous config file values. + var cfgFiles []string + if opts.SharedConfigFiles != nil { + cfgFiles = opts.SharedConfigFiles + } else { + cfgFiles = []string{envCfg.SharedConfigFile, envCfg.SharedCredentialsFile} + if !envCfg.EnableSharedConfig { + // The shared config file (~/.aws/config) is only loaded if instructed + // to load via the envConfig.EnableSharedConfig (AWS_SDK_LOAD_CONFIG). + cfgFiles = cfgFiles[1:] + } + } + + // Load additional config from file(s) + sharedCfg, err := loadSharedConfig(envCfg.Profile, cfgFiles, envCfg.EnableSharedConfig) + if err != nil { + if len(envCfg.Profile) == 0 && !envCfg.EnableSharedConfig && (envCfg.Creds.HasKeys() || userCfg.Credentials != nil) { + // Special case where the user has not explicitly specified an AWS_PROFILE, + // or session.Options.profile, shared config is not enabled, and the + // environment has credentials, allow the shared config file to fail to + // load since the user has already provided credentials, and nothing else + // is required to be read file. Github(aws/aws-sdk-go#2455) + } else if _, ok := err.(SharedConfigProfileNotExistsError); !ok { + return nil, err + } + } + + if err := mergeConfigSrcs(cfg, userCfg, envCfg, sharedCfg, handlers, opts); err != nil { + return nil, err + } + + s := &Session{ + Config: cfg, + Handlers: handlers, + } + + initHandlers(s) + + if csmCfg, err := loadCSMConfig(envCfg, cfgFiles); err != nil { + if l := s.Config.Logger; l != nil { + l.Log(fmt.Sprintf("ERROR: failed to load CSM configuration, %v", err)) + } + } else if csmCfg.Enabled { + err = enableCSM(&s.Handlers, csmCfg, s.Config.Logger) + if err != nil { + return nil, err + } + } + + // Setup HTTP client with custom cert bundle if enabled + if opts.CustomCABundle != nil { + if err := loadCustomCABundle(s, opts.CustomCABundle); err != nil { + return nil, err + } + } + + return s, nil +} + +type csmConfig struct { + Enabled bool + Host string + Port string + ClientID string +} + +var csmProfileName = "aws_csm" + +func loadCSMConfig(envCfg envConfig, cfgFiles []string) (csmConfig, error) { + if envCfg.CSMEnabled != nil { + if *envCfg.CSMEnabled { + return csmConfig{ + Enabled: true, + ClientID: envCfg.CSMClientID, + Host: envCfg.CSMHost, + Port: envCfg.CSMPort, + }, nil + } + return csmConfig{}, nil + } + + sharedCfg, err := loadSharedConfig(csmProfileName, cfgFiles, false) + if err != nil { + if _, ok := err.(SharedConfigProfileNotExistsError); !ok { + return csmConfig{}, err + } + } + if sharedCfg.CSMEnabled != nil && *sharedCfg.CSMEnabled == true { + return csmConfig{ + Enabled: true, + ClientID: sharedCfg.CSMClientID, + Host: sharedCfg.CSMHost, + Port: sharedCfg.CSMPort, + }, nil + } + + return csmConfig{}, nil +} + +func loadCustomCABundle(s *Session, bundle io.Reader) error { + var t *http.Transport + switch v := s.Config.HTTPClient.Transport.(type) { + case *http.Transport: + t = v + default: + if s.Config.HTTPClient.Transport != nil { + return awserr.New("LoadCustomCABundleError", + "unable to load custom CA bundle, HTTPClient's transport unsupported type", nil) + } + } + if t == nil { + // Nil transport implies `http.DefaultTransport` should be used. Since + // the SDK cannot modify, nor copy the `DefaultTransport` specifying + // the values the next closest behavior. + t = getCABundleTransport() + } + + p, err := loadCertPool(bundle) + if err != nil { + return err + } + if t.TLSClientConfig == nil { + t.TLSClientConfig = &tls.Config{} + } + t.TLSClientConfig.RootCAs = p + + s.Config.HTTPClient.Transport = t + + return nil +} + +func loadCertPool(r io.Reader) (*x509.CertPool, error) { + b, err := ioutil.ReadAll(r) + if err != nil { + return nil, awserr.New("LoadCustomCABundleError", + "failed to read custom CA bundle PEM file", err) + } + + p := x509.NewCertPool() + if !p.AppendCertsFromPEM(b) { + return nil, awserr.New("LoadCustomCABundleError", + "failed to load custom CA bundle PEM file", err) + } + + return p, nil +} + +func mergeConfigSrcs(cfg, userCfg *aws.Config, + envCfg envConfig, sharedCfg sharedConfig, + handlers request.Handlers, + sessOpts Options, +) error { + + // Region if not already set by user + if len(aws.StringValue(cfg.Region)) == 0 { + if len(envCfg.Region) > 0 { + cfg.WithRegion(envCfg.Region) + } else if envCfg.EnableSharedConfig && len(sharedCfg.Region) > 0 { + cfg.WithRegion(sharedCfg.Region) + } + } + + if cfg.EnableEndpointDiscovery == nil { + if envCfg.EnableEndpointDiscovery != nil { + cfg.WithEndpointDiscovery(*envCfg.EnableEndpointDiscovery) + } else if envCfg.EnableSharedConfig && sharedCfg.EnableEndpointDiscovery != nil { + cfg.WithEndpointDiscovery(*sharedCfg.EnableEndpointDiscovery) + } + } + + // Regional Endpoint flag for STS endpoint resolving + mergeSTSRegionalEndpointConfig(cfg, []endpoints.STSRegionalEndpoint{ + userCfg.STSRegionalEndpoint, + envCfg.STSRegionalEndpoint, + sharedCfg.STSRegionalEndpoint, + endpoints.LegacySTSEndpoint, + }) + + // Regional Endpoint flag for S3 endpoint resolving + mergeS3UsEast1RegionalEndpointConfig(cfg, []endpoints.S3UsEast1RegionalEndpoint{ + userCfg.S3UsEast1RegionalEndpoint, + envCfg.S3UsEast1RegionalEndpoint, + sharedCfg.S3UsEast1RegionalEndpoint, + endpoints.LegacyS3UsEast1Endpoint, + }) + + // Configure credentials if not already set by the user when creating the + // Session. + if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil { + creds, err := resolveCredentials(cfg, envCfg, sharedCfg, handlers, sessOpts) + if err != nil { + return err + } + cfg.Credentials = creds + } + + return nil +} + +func mergeSTSRegionalEndpointConfig(cfg *aws.Config, values []endpoints.STSRegionalEndpoint) { + for _, v := range values { + if v != endpoints.UnsetSTSEndpoint { + cfg.STSRegionalEndpoint = v + break + } + } +} + +func mergeS3UsEast1RegionalEndpointConfig(cfg *aws.Config, values []endpoints.S3UsEast1RegionalEndpoint) { + for _, v := range values { + if v != endpoints.UnsetS3UsEast1Endpoint { + cfg.S3UsEast1RegionalEndpoint = v + break + } + } +} + func initHandlers(s *Session) { // Add the Validate parameter handler if it is not disabled. s.Handlers.Validate.Remove(corehandlers.ValidateParametersHandler) @@ -71,13 +609,12 @@ func initHandlers(s *Session) { } } -// Copy creates and returns a copy of the current session, coping the config +// Copy creates and returns a copy of the current Session, copying the config // and handlers. If any additional configs are provided they will be merged -// on top of the session's copied config. +// on top of the Session's copied config. // -// Example: -// // Create a copy of the current session, configured for the us-west-2 region. -// sess.Copy(&aws.Config{Region: aws.String("us-west-2"}) +// // Create a copy of the current Session, configured for the us-west-2 region. +// sess.Copy(&aws.Config{Region: aws.String("us-west-2")}) func (s *Session) Copy(cfgs ...*aws.Config) *Session { newSession := &Session{ Config: s.Config.Copy(cfgs...), @@ -92,20 +629,91 @@ func (s *Session) Copy(cfgs ...*aws.Config) *Session { // ClientConfig satisfies the client.ConfigProvider interface and is used to // configure the service client instances. Passing the Session to the service // client's constructor (New) will use this method to configure the client. -// -// Example: -// sess := session.New() -// s3.New(sess) -func (s *Session) ClientConfig(serviceName string, cfgs ...*aws.Config) client.Config { +func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) client.Config { + s = s.Copy(cfgs...) + + region := aws.StringValue(s.Config.Region) + resolved, err := s.resolveEndpoint(service, region, s.Config) + if err != nil && s.Config.Logger != nil { + s.Config.Logger.Log(fmt.Sprintf( + "ERROR: unable to resolve endpoint for service %q, region %q, err: %v", + service, region, err)) + } + + return client.Config{ + Config: s.Config, + Handlers: s.Handlers, + Endpoint: resolved.URL, + SigningRegion: resolved.SigningRegion, + SigningNameDerived: resolved.SigningNameDerived, + SigningName: resolved.SigningName, + } +} + +func (s *Session) resolveEndpoint(service, region string, cfg *aws.Config) (endpoints.ResolvedEndpoint, error) { + + if ep := aws.StringValue(cfg.Endpoint); len(ep) != 0 { + return endpoints.ResolvedEndpoint{ + URL: endpoints.AddScheme(ep, aws.BoolValue(cfg.DisableSSL)), + SigningRegion: region, + }, nil + } + + resolved, err := cfg.EndpointResolver.EndpointFor(service, region, + func(opt *endpoints.Options) { + opt.DisableSSL = aws.BoolValue(cfg.DisableSSL) + opt.UseDualStack = aws.BoolValue(cfg.UseDualStack) + // Support for STSRegionalEndpoint where the STSRegionalEndpoint is + // provided in envConfig or sharedConfig with envConfig getting + // precedence. + opt.STSRegionalEndpoint = cfg.STSRegionalEndpoint + + // Support for S3UsEast1RegionalEndpoint where the S3UsEast1RegionalEndpoint is + // provided in envConfig or sharedConfig with envConfig getting + // precedence. + opt.S3UsEast1RegionalEndpoint = cfg.S3UsEast1RegionalEndpoint + + // Support the condition where the service is modeled but its + // endpoint metadata is not available. + opt.ResolveUnknownService = true + }, + ) + if err != nil { + return endpoints.ResolvedEndpoint{}, err + } + + return resolved, nil +} + +// ClientConfigNoResolveEndpoint is the same as ClientConfig with the exception +// that the EndpointResolver will not be used to resolve the endpoint. The only +// endpoint set must come from the aws.Config.Endpoint field. +func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) client.Config { s = s.Copy(cfgs...) - endpoint, signingRegion := endpoints.NormalizeEndpoint( - aws.StringValue(s.Config.Endpoint), serviceName, - aws.StringValue(s.Config.Region), aws.BoolValue(s.Config.DisableSSL)) + + var resolved endpoints.ResolvedEndpoint + if ep := aws.StringValue(s.Config.Endpoint); len(ep) > 0 { + resolved.URL = endpoints.AddScheme(ep, aws.BoolValue(s.Config.DisableSSL)) + resolved.SigningRegion = aws.StringValue(s.Config.Region) + } return client.Config{ - Config: s.Config, - Handlers: s.Handlers, - Endpoint: endpoint, - SigningRegion: signingRegion, + Config: s.Config, + Handlers: s.Handlers, + Endpoint: resolved.URL, + SigningRegion: resolved.SigningRegion, + SigningNameDerived: resolved.SigningNameDerived, + SigningName: resolved.SigningName, } } + +// logDeprecatedNewSessionError function enables error handling for session +func (s *Session) logDeprecatedNewSessionError(msg string, err error, cfgs []*aws.Config) { + // Session creation failed, need to report the error and prevent + // any requests from succeeding. + s.Config.MergeIn(cfgs...) + s.Config.Logger.Log("ERROR:", msg, "Error:", err) + s.Handlers.Validate.PushBack(func(r *request.Request) { + r.Error = err + }) +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go b/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go new file mode 100644 index 00000000000..1d7b049cf7c --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go @@ -0,0 +1,526 @@ +package session + +import ( + "fmt" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/endpoints" + "github.com/aws/aws-sdk-go/internal/ini" +) + +const ( + // Static Credentials group + accessKeyIDKey = `aws_access_key_id` // group required + secretAccessKey = `aws_secret_access_key` // group required + sessionTokenKey = `aws_session_token` // optional + + // Assume Role Credentials group + roleArnKey = `role_arn` // group required + sourceProfileKey = `source_profile` // group required (or credential_source) + credentialSourceKey = `credential_source` // group required (or source_profile) + externalIDKey = `external_id` // optional + mfaSerialKey = `mfa_serial` // optional + roleSessionNameKey = `role_session_name` // optional + + // CSM options + csmEnabledKey = `csm_enabled` + csmHostKey = `csm_host` + csmPortKey = `csm_port` + csmClientIDKey = `csm_client_id` + + // Additional Config fields + regionKey = `region` + + // endpoint discovery group + enableEndpointDiscoveryKey = `endpoint_discovery_enabled` // optional + + // External Credential Process + credentialProcessKey = `credential_process` // optional + + // Web Identity Token File + webIdentityTokenFileKey = `web_identity_token_file` // optional + + // Additional config fields for regional or legacy endpoints + stsRegionalEndpointSharedKey = `sts_regional_endpoints` + + // Additional config fields for regional or legacy endpoints + s3UsEast1RegionalSharedKey = `s3_us_east_1_regional_endpoint` + + // DefaultSharedConfigProfile is the default profile to be used when + // loading configuration from the config files if another profile name + // is not provided. + DefaultSharedConfigProfile = `default` +) + +// sharedConfig represents the configuration fields of the SDK config files. +type sharedConfig struct { + // Credentials values from the config file. Both aws_access_key_id and + // aws_secret_access_key must be provided together in the same file to be + // considered valid. The values will be ignored if not a complete group. + // aws_session_token is an optional field that can be provided if both of + // the other two fields are also provided. + // + // aws_access_key_id + // aws_secret_access_key + // aws_session_token + Creds credentials.Value + + CredentialSource string + CredentialProcess string + WebIdentityTokenFile string + + RoleARN string + RoleSessionName string + ExternalID string + MFASerial string + + SourceProfileName string + SourceProfile *sharedConfig + + // Region is the region the SDK should use for looking up AWS service + // endpoints and signing requests. + // + // region + Region string + + // EnableEndpointDiscovery can be enabled in the shared config by setting + // endpoint_discovery_enabled to true + // + // endpoint_discovery_enabled = true + EnableEndpointDiscovery *bool + // CSM Options + CSMEnabled *bool + CSMHost string + CSMPort string + CSMClientID string + + // Specifies the Regional Endpoint flag for the SDK to resolve the endpoint for a service + // + // sts_regional_endpoints = regional + // This can take value as `LegacySTSEndpoint` or `RegionalSTSEndpoint` + STSRegionalEndpoint endpoints.STSRegionalEndpoint + + // Specifies the Regional Endpoint flag for the SDK to resolve the endpoint for a service + // + // s3_us_east_1_regional_endpoint = regional + // This can take value as `LegacyS3UsEast1Endpoint` or `RegionalS3UsEast1Endpoint` + S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint +} + +type sharedConfigFile struct { + Filename string + IniData ini.Sections +} + +// loadSharedConfig retrieves the configuration from the list of files using +// the profile provided. The order the files are listed will determine +// precedence. Values in subsequent files will overwrite values defined in +// earlier files. +// +// For example, given two files A and B. Both define credentials. If the order +// of the files are A then B, B's credential values will be used instead of +// A's. +// +// See sharedConfig.setFromFile for information how the config files +// will be loaded. +func loadSharedConfig(profile string, filenames []string, exOpts bool) (sharedConfig, error) { + if len(profile) == 0 { + profile = DefaultSharedConfigProfile + } + + files, err := loadSharedConfigIniFiles(filenames) + if err != nil { + return sharedConfig{}, err + } + + cfg := sharedConfig{} + profiles := map[string]struct{}{} + if err = cfg.setFromIniFiles(profiles, profile, files, exOpts); err != nil { + return sharedConfig{}, err + } + + return cfg, nil +} + +func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, error) { + files := make([]sharedConfigFile, 0, len(filenames)) + + for _, filename := range filenames { + sections, err := ini.OpenFile(filename) + if aerr, ok := err.(awserr.Error); ok && aerr.Code() == ini.ErrCodeUnableToReadFile { + // Skip files which can't be opened and read for whatever reason + continue + } else if err != nil { + return nil, SharedConfigLoadError{Filename: filename, Err: err} + } + + files = append(files, sharedConfigFile{ + Filename: filename, IniData: sections, + }) + } + + return files, nil +} + +func (cfg *sharedConfig) setFromIniFiles(profiles map[string]struct{}, profile string, files []sharedConfigFile, exOpts bool) error { + // Trim files from the list that don't exist. + var skippedFiles int + var profileNotFoundErr error + for _, f := range files { + if err := cfg.setFromIniFile(profile, f, exOpts); err != nil { + if _, ok := err.(SharedConfigProfileNotExistsError); ok { + // Ignore profiles not defined in individual files. + profileNotFoundErr = err + skippedFiles++ + continue + } + return err + } + } + if skippedFiles == len(files) { + // If all files were skipped because the profile is not found, return + // the original profile not found error. + return profileNotFoundErr + } + + if _, ok := profiles[profile]; ok { + // if this is the second instance of the profile the Assume Role + // options must be cleared because they are only valid for the + // first reference of a profile. The self linked instance of the + // profile only have credential provider options. + cfg.clearAssumeRoleOptions() + } else { + // First time a profile has been seen, It must either be a assume role + // or credentials. Assert if the credential type requires a role ARN, + // the ARN is also set. + if err := cfg.validateCredentialsRequireARN(profile); err != nil { + return err + } + } + profiles[profile] = struct{}{} + + if err := cfg.validateCredentialType(); err != nil { + return err + } + + // Link source profiles for assume roles + if len(cfg.SourceProfileName) != 0 { + // Linked profile via source_profile ignore credential provider + // options, the source profile must provide the credentials. + cfg.clearCredentialOptions() + + srcCfg := &sharedConfig{} + err := srcCfg.setFromIniFiles(profiles, cfg.SourceProfileName, files, exOpts) + if err != nil { + // SourceProfile that doesn't exist is an error in configuration. + if _, ok := err.(SharedConfigProfileNotExistsError); ok { + err = SharedConfigAssumeRoleError{ + RoleARN: cfg.RoleARN, + SourceProfile: cfg.SourceProfileName, + } + } + return err + } + + if !srcCfg.hasCredentials() { + return SharedConfigAssumeRoleError{ + RoleARN: cfg.RoleARN, + SourceProfile: cfg.SourceProfileName, + } + } + + cfg.SourceProfile = srcCfg + } + + return nil +} + +// setFromFile loads the configuration from the file using the profile +// provided. A sharedConfig pointer type value is used so that multiple config +// file loadings can be chained. +// +// Only loads complete logically grouped values, and will not set fields in cfg +// for incomplete grouped values in the config. Such as credentials. For +// example if a config file only includes aws_access_key_id but no +// aws_secret_access_key the aws_access_key_id will be ignored. +func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile, exOpts bool) error { + section, ok := file.IniData.GetSection(profile) + if !ok { + // Fallback to to alternate profile name: profile + section, ok = file.IniData.GetSection(fmt.Sprintf("profile %s", profile)) + if !ok { + return SharedConfigProfileNotExistsError{Profile: profile, Err: nil} + } + } + + if exOpts { + // Assume Role Parameters + updateString(&cfg.RoleARN, section, roleArnKey) + updateString(&cfg.ExternalID, section, externalIDKey) + updateString(&cfg.MFASerial, section, mfaSerialKey) + updateString(&cfg.RoleSessionName, section, roleSessionNameKey) + updateString(&cfg.SourceProfileName, section, sourceProfileKey) + updateString(&cfg.CredentialSource, section, credentialSourceKey) + updateString(&cfg.Region, section, regionKey) + + if v := section.String(stsRegionalEndpointSharedKey); len(v) != 0 { + sre, err := endpoints.GetSTSRegionalEndpoint(v) + if err != nil { + return fmt.Errorf("failed to load %s from shared config, %s, %v", + stsRegionalEndpointSharedKey, file.Filename, err) + } + cfg.STSRegionalEndpoint = sre + } + + if v := section.String(s3UsEast1RegionalSharedKey); len(v) != 0 { + sre, err := endpoints.GetS3UsEast1RegionalEndpoint(v) + if err != nil { + return fmt.Errorf("failed to load %s from shared config, %s, %v", + s3UsEast1RegionalSharedKey, file.Filename, err) + } + cfg.S3UsEast1RegionalEndpoint = sre + } + } + + updateString(&cfg.CredentialProcess, section, credentialProcessKey) + updateString(&cfg.WebIdentityTokenFile, section, webIdentityTokenFileKey) + + // Shared Credentials + creds := credentials.Value{ + AccessKeyID: section.String(accessKeyIDKey), + SecretAccessKey: section.String(secretAccessKey), + SessionToken: section.String(sessionTokenKey), + ProviderName: fmt.Sprintf("SharedConfigCredentials: %s", file.Filename), + } + if creds.HasKeys() { + cfg.Creds = creds + } + + // Endpoint discovery + updateBoolPtr(&cfg.EnableEndpointDiscovery, section, enableEndpointDiscoveryKey) + + // CSM options + updateBoolPtr(&cfg.CSMEnabled, section, csmEnabledKey) + updateString(&cfg.CSMHost, section, csmHostKey) + updateString(&cfg.CSMPort, section, csmPortKey) + updateString(&cfg.CSMClientID, section, csmClientIDKey) + + return nil +} + +func (cfg *sharedConfig) validateCredentialsRequireARN(profile string) error { + var credSource string + + switch { + case len(cfg.SourceProfileName) != 0: + credSource = sourceProfileKey + case len(cfg.CredentialSource) != 0: + credSource = credentialSourceKey + case len(cfg.WebIdentityTokenFile) != 0: + credSource = webIdentityTokenFileKey + } + + if len(credSource) != 0 && len(cfg.RoleARN) == 0 { + return CredentialRequiresARNError{ + Type: credSource, + Profile: profile, + } + } + + return nil +} + +func (cfg *sharedConfig) validateCredentialType() error { + // Only one or no credential type can be defined. + if !oneOrNone( + len(cfg.SourceProfileName) != 0, + len(cfg.CredentialSource) != 0, + len(cfg.CredentialProcess) != 0, + len(cfg.WebIdentityTokenFile) != 0, + ) { + return ErrSharedConfigSourceCollision + } + + return nil +} + +func (cfg *sharedConfig) hasCredentials() bool { + switch { + case len(cfg.SourceProfileName) != 0: + case len(cfg.CredentialSource) != 0: + case len(cfg.CredentialProcess) != 0: + case len(cfg.WebIdentityTokenFile) != 0: + case cfg.Creds.HasKeys(): + default: + return false + } + + return true +} + +func (cfg *sharedConfig) clearCredentialOptions() { + cfg.CredentialSource = "" + cfg.CredentialProcess = "" + cfg.WebIdentityTokenFile = "" + cfg.Creds = credentials.Value{} +} + +func (cfg *sharedConfig) clearAssumeRoleOptions() { + cfg.RoleARN = "" + cfg.ExternalID = "" + cfg.MFASerial = "" + cfg.RoleSessionName = "" + cfg.SourceProfileName = "" +} + +func oneOrNone(bs ...bool) bool { + var count int + + for _, b := range bs { + if b { + count++ + if count > 1 { + return false + } + } + } + + return true +} + +// updateString will only update the dst with the value in the section key, key +// is present in the section. +func updateString(dst *string, section ini.Section, key string) { + if !section.Has(key) { + return + } + *dst = section.String(key) +} + +// updateBoolPtr will only update the dst with the value in the section key, +// key is present in the section. +func updateBoolPtr(dst **bool, section ini.Section, key string) { + if !section.Has(key) { + return + } + *dst = new(bool) + **dst = section.Bool(key) +} + +// SharedConfigLoadError is an error for the shared config file failed to load. +type SharedConfigLoadError struct { + Filename string + Err error +} + +// Code is the short id of the error. +func (e SharedConfigLoadError) Code() string { + return "SharedConfigLoadError" +} + +// Message is the description of the error +func (e SharedConfigLoadError) Message() string { + return fmt.Sprintf("failed to load config file, %s", e.Filename) +} + +// OrigErr is the underlying error that caused the failure. +func (e SharedConfigLoadError) OrigErr() error { + return e.Err +} + +// Error satisfies the error interface. +func (e SharedConfigLoadError) Error() string { + return awserr.SprintError(e.Code(), e.Message(), "", e.Err) +} + +// SharedConfigProfileNotExistsError is an error for the shared config when +// the profile was not find in the config file. +type SharedConfigProfileNotExistsError struct { + Profile string + Err error +} + +// Code is the short id of the error. +func (e SharedConfigProfileNotExistsError) Code() string { + return "SharedConfigProfileNotExistsError" +} + +// Message is the description of the error +func (e SharedConfigProfileNotExistsError) Message() string { + return fmt.Sprintf("failed to get profile, %s", e.Profile) +} + +// OrigErr is the underlying error that caused the failure. +func (e SharedConfigProfileNotExistsError) OrigErr() error { + return e.Err +} + +// Error satisfies the error interface. +func (e SharedConfigProfileNotExistsError) Error() string { + return awserr.SprintError(e.Code(), e.Message(), "", e.Err) +} + +// SharedConfigAssumeRoleError is an error for the shared config when the +// profile contains assume role information, but that information is invalid +// or not complete. +type SharedConfigAssumeRoleError struct { + RoleARN string + SourceProfile string +} + +// Code is the short id of the error. +func (e SharedConfigAssumeRoleError) Code() string { + return "SharedConfigAssumeRoleError" +} + +// Message is the description of the error +func (e SharedConfigAssumeRoleError) Message() string { + return fmt.Sprintf( + "failed to load assume role for %s, source profile %s has no shared credentials", + e.RoleARN, e.SourceProfile, + ) +} + +// OrigErr is the underlying error that caused the failure. +func (e SharedConfigAssumeRoleError) OrigErr() error { + return nil +} + +// Error satisfies the error interface. +func (e SharedConfigAssumeRoleError) Error() string { + return awserr.SprintError(e.Code(), e.Message(), "", nil) +} + +// CredentialRequiresARNError provides the error for shared config credentials +// that are incorrectly configured in the shared config or credentials file. +type CredentialRequiresARNError struct { + // type of credentials that were configured. + Type string + + // Profile name the credentials were in. + Profile string +} + +// Code is the short id of the error. +func (e CredentialRequiresARNError) Code() string { + return "CredentialRequiresARNError" +} + +// Message is the description of the error +func (e CredentialRequiresARNError) Message() string { + return fmt.Sprintf( + "credential type %s requires role_arn, profile %s", + e.Type, e.Profile, + ) +} + +// OrigErr is the underlying error that caused the failure. +func (e CredentialRequiresARNError) OrigErr() error { + return nil +} + +// Error satisfies the error interface. +func (e CredentialRequiresARNError) Error() string { + return awserr.SprintError(e.Code(), e.Message(), "", nil) +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go new file mode 100644 index 00000000000..244c86da054 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go @@ -0,0 +1,82 @@ +package v4 + +import ( + "net/http" + "strings" +) + +// validator houses a set of rule needed for validation of a +// string value +type rules []rule + +// rule interface allows for more flexible rules and just simply +// checks whether or not a value adheres to that rule +type rule interface { + IsValid(value string) bool +} + +// IsValid will iterate through all rules and see if any rules +// apply to the value and supports nested rules +func (r rules) IsValid(value string) bool { + for _, rule := range r { + if rule.IsValid(value) { + return true + } + } + return false +} + +// mapRule generic rule for maps +type mapRule map[string]struct{} + +// IsValid for the map rule satisfies whether it exists in the map +func (m mapRule) IsValid(value string) bool { + _, ok := m[value] + return ok +} + +// whitelist is a generic rule for whitelisting +type whitelist struct { + rule +} + +// IsValid for whitelist checks if the value is within the whitelist +func (w whitelist) IsValid(value string) bool { + return w.rule.IsValid(value) +} + +// blacklist is a generic rule for blacklisting +type blacklist struct { + rule +} + +// IsValid for whitelist checks if the value is within the whitelist +func (b blacklist) IsValid(value string) bool { + return !b.rule.IsValid(value) +} + +type patterns []string + +// IsValid for patterns checks each pattern and returns if a match has +// been found +func (p patterns) IsValid(value string) bool { + for _, pattern := range p { + if strings.HasPrefix(http.CanonicalHeaderKey(value), pattern) { + return true + } + } + return false +} + +// inclusiveRules rules allow for rules to depend on one another +type inclusiveRules []rule + +// IsValid will return true if all rules are true +func (r inclusiveRules) IsValid(value string) bool { + for _, rule := range r { + if !rule.IsValid(value) { + return false + } + } + return true +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go new file mode 100644 index 00000000000..6aa2ed241bb --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go @@ -0,0 +1,7 @@ +package v4 + +// WithUnsignedPayload will enable and set the UnsignedPayload field to +// true of the signer. +func WithUnsignedPayload(v4 *Signer) { + v4.UnsignedPayload = true +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go new file mode 100644 index 00000000000..bd082e9d1f7 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go @@ -0,0 +1,24 @@ +// +build go1.5 + +package v4 + +import ( + "net/url" + "strings" +) + +func getURIPath(u *url.URL) string { + var uri string + + if len(u.Opaque) > 0 { + uri = "/" + strings.Join(strings.Split(u.Opaque, "/")[3:], "/") + } else { + uri = u.EscapedPath() + } + + if len(uri) == 0 { + uri = "/" + } + + return uri +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go new file mode 100644 index 00000000000..8104793aa5b --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go @@ -0,0 +1,806 @@ +// Package v4 implements signing for AWS V4 signer +// +// Provides request signing for request that need to be signed with +// AWS V4 Signatures. +// +// Standalone Signer +// +// Generally using the signer outside of the SDK should not require any additional +// logic when using Go v1.5 or higher. The signer does this by taking advantage +// of the URL.EscapedPath method. If your request URI requires additional escaping +// you many need to use the URL.Opaque to define what the raw URI should be sent +// to the service as. +// +// The signer will first check the URL.Opaque field, and use its value if set. +// The signer does require the URL.Opaque field to be set in the form of: +// +// "///" +// +// // e.g. +// "//example.com/some/path" +// +// The leading "//" and hostname are required or the URL.Opaque escaping will +// not work correctly. +// +// If URL.Opaque is not set the signer will fallback to the URL.EscapedPath() +// method and using the returned value. If you're using Go v1.4 you must set +// URL.Opaque if the URI path needs escaping. If URL.Opaque is not set with +// Go v1.5 the signer will fallback to URL.Path. +// +// AWS v4 signature validation requires that the canonical string's URI path +// element must be the URI escaped form of the HTTP request's path. +// http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html +// +// The Go HTTP client will perform escaping automatically on the request. Some +// of these escaping may cause signature validation errors because the HTTP +// request differs from the URI path or query that the signature was generated. +// https://golang.org/pkg/net/url/#URL.EscapedPath +// +// Because of this, it is recommended that when using the signer outside of the +// SDK that explicitly escaping the request prior to being signed is preferable, +// and will help prevent signature validation errors. This can be done by setting +// the URL.Opaque or URL.RawPath. The SDK will use URL.Opaque first and then +// call URL.EscapedPath() if Opaque is not set. +// +// If signing a request intended for HTTP2 server, and you're using Go 1.6.2 +// through 1.7.4 you should use the URL.RawPath as the pre-escaped form of the +// request URL. https://github.com/golang/go/issues/16847 points to a bug in +// Go pre 1.8 that fails to make HTTP2 requests using absolute URL in the HTTP +// message. URL.Opaque generally will force Go to make requests with absolute URL. +// URL.RawPath does not do this, but RawPath must be a valid escaping of Path +// or url.EscapedPath will ignore the RawPath escaping. +// +// Test `TestStandaloneSign` provides a complete example of using the signer +// outside of the SDK and pre-escaping the URI path. +package v4 + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/hex" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "sort" + "strconv" + "strings" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkio" + "github.com/aws/aws-sdk-go/private/protocol/rest" +) + +const ( + authHeaderPrefix = "AWS4-HMAC-SHA256" + timeFormat = "20060102T150405Z" + shortTimeFormat = "20060102" + + // emptyStringSHA256 is a SHA256 of an empty string + emptyStringSHA256 = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` +) + +var ignoredHeaders = rules{ + blacklist{ + mapRule{ + "Authorization": struct{}{}, + "User-Agent": struct{}{}, + "X-Amzn-Trace-Id": struct{}{}, + }, + }, +} + +// requiredSignedHeaders is a whitelist for build canonical headers. +var requiredSignedHeaders = rules{ + whitelist{ + mapRule{ + "Cache-Control": struct{}{}, + "Content-Disposition": struct{}{}, + "Content-Encoding": struct{}{}, + "Content-Language": struct{}{}, + "Content-Md5": struct{}{}, + "Content-Type": struct{}{}, + "Expires": struct{}{}, + "If-Match": struct{}{}, + "If-Modified-Since": struct{}{}, + "If-None-Match": struct{}{}, + "If-Unmodified-Since": struct{}{}, + "Range": struct{}{}, + "X-Amz-Acl": struct{}{}, + "X-Amz-Copy-Source": struct{}{}, + "X-Amz-Copy-Source-If-Match": struct{}{}, + "X-Amz-Copy-Source-If-Modified-Since": struct{}{}, + "X-Amz-Copy-Source-If-None-Match": struct{}{}, + "X-Amz-Copy-Source-If-Unmodified-Since": struct{}{}, + "X-Amz-Copy-Source-Range": struct{}{}, + "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm": struct{}{}, + "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key": struct{}{}, + "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5": struct{}{}, + "X-Amz-Grant-Full-control": struct{}{}, + "X-Amz-Grant-Read": struct{}{}, + "X-Amz-Grant-Read-Acp": struct{}{}, + "X-Amz-Grant-Write": struct{}{}, + "X-Amz-Grant-Write-Acp": struct{}{}, + "X-Amz-Metadata-Directive": struct{}{}, + "X-Amz-Mfa": struct{}{}, + "X-Amz-Request-Payer": struct{}{}, + "X-Amz-Server-Side-Encryption": struct{}{}, + "X-Amz-Server-Side-Encryption-Aws-Kms-Key-Id": struct{}{}, + "X-Amz-Server-Side-Encryption-Customer-Algorithm": struct{}{}, + "X-Amz-Server-Side-Encryption-Customer-Key": struct{}{}, + "X-Amz-Server-Side-Encryption-Customer-Key-Md5": struct{}{}, + "X-Amz-Storage-Class": struct{}{}, + "X-Amz-Tagging": struct{}{}, + "X-Amz-Website-Redirect-Location": struct{}{}, + "X-Amz-Content-Sha256": struct{}{}, + }, + }, + patterns{"X-Amz-Meta-"}, +} + +// allowedHoisting is a whitelist for build query headers. The boolean value +// represents whether or not it is a pattern. +var allowedQueryHoisting = inclusiveRules{ + blacklist{requiredSignedHeaders}, + patterns{"X-Amz-"}, +} + +// Signer applies AWS v4 signing to given request. Use this to sign requests +// that need to be signed with AWS V4 Signatures. +type Signer struct { + // The authentication credentials the request will be signed against. + // This value must be set to sign requests. + Credentials *credentials.Credentials + + // Sets the log level the signer should use when reporting information to + // the logger. If the logger is nil nothing will be logged. See + // aws.LogLevelType for more information on available logging levels + // + // By default nothing will be logged. + Debug aws.LogLevelType + + // The logger loging information will be written to. If there the logger + // is nil, nothing will be logged. + Logger aws.Logger + + // Disables the Signer's moving HTTP header key/value pairs from the HTTP + // request header to the request's query string. This is most commonly used + // with pre-signed requests preventing headers from being added to the + // request's query string. + DisableHeaderHoisting bool + + // Disables the automatic escaping of the URI path of the request for the + // siganture's canonical string's path. For services that do not need additional + // escaping then use this to disable the signer escaping the path. + // + // S3 is an example of a service that does not need additional escaping. + // + // http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html + DisableURIPathEscaping bool + + // Disables the automatical setting of the HTTP request's Body field with the + // io.ReadSeeker passed in to the signer. This is useful if you're using a + // custom wrapper around the body for the io.ReadSeeker and want to preserve + // the Body value on the Request.Body. + // + // This does run the risk of signing a request with a body that will not be + // sent in the request. Need to ensure that the underlying data of the Body + // values are the same. + DisableRequestBodyOverwrite bool + + // currentTimeFn returns the time value which represents the current time. + // This value should only be used for testing. If it is nil the default + // time.Now will be used. + currentTimeFn func() time.Time + + // UnsignedPayload will prevent signing of the payload. This will only + // work for services that have support for this. + UnsignedPayload bool +} + +// NewSigner returns a Signer pointer configured with the credentials and optional +// option values provided. If not options are provided the Signer will use its +// default configuration. +func NewSigner(credentials *credentials.Credentials, options ...func(*Signer)) *Signer { + v4 := &Signer{ + Credentials: credentials, + } + + for _, option := range options { + option(v4) + } + + return v4 +} + +type signingCtx struct { + ServiceName string + Region string + Request *http.Request + Body io.ReadSeeker + Query url.Values + Time time.Time + ExpireTime time.Duration + SignedHeaderVals http.Header + + DisableURIPathEscaping bool + + credValues credentials.Value + isPresign bool + formattedTime string + formattedShortTime string + unsignedPayload bool + + bodyDigest string + signedHeaders string + canonicalHeaders string + canonicalString string + credentialString string + stringToSign string + signature string + authorization string +} + +// Sign signs AWS v4 requests with the provided body, service name, region the +// request is made to, and time the request is signed at. The signTime allows +// you to specify that a request is signed for the future, and cannot be +// used until then. +// +// Returns a list of HTTP headers that were included in the signature or an +// error if signing the request failed. Generally for signed requests this value +// is not needed as the full request context will be captured by the http.Request +// value. It is included for reference though. +// +// Sign will set the request's Body to be the `body` parameter passed in. If +// the body is not already an io.ReadCloser, it will be wrapped within one. If +// a `nil` body parameter passed to Sign, the request's Body field will be +// also set to nil. Its important to note that this functionality will not +// change the request's ContentLength of the request. +// +// Sign differs from Presign in that it will sign the request using HTTP +// header values. This type of signing is intended for http.Request values that +// will not be shared, or are shared in a way the header values on the request +// will not be lost. +// +// The requests body is an io.ReadSeeker so the SHA256 of the body can be +// generated. To bypass the signer computing the hash you can set the +// "X-Amz-Content-Sha256" header with a precomputed value. The signer will +// only compute the hash if the request header value is empty. +func (v4 Signer) Sign(r *http.Request, body io.ReadSeeker, service, region string, signTime time.Time) (http.Header, error) { + return v4.signWithBody(r, body, service, region, 0, false, signTime) +} + +// Presign signs AWS v4 requests with the provided body, service name, region +// the request is made to, and time the request is signed at. The signTime +// allows you to specify that a request is signed for the future, and cannot +// be used until then. +// +// Returns a list of HTTP headers that were included in the signature or an +// error if signing the request failed. For presigned requests these headers +// and their values must be included on the HTTP request when it is made. This +// is helpful to know what header values need to be shared with the party the +// presigned request will be distributed to. +// +// Presign differs from Sign in that it will sign the request using query string +// instead of header values. This allows you to share the Presigned Request's +// URL with third parties, or distribute it throughout your system with minimal +// dependencies. +// +// Presign also takes an exp value which is the duration the +// signed request will be valid after the signing time. This is allows you to +// set when the request will expire. +// +// The requests body is an io.ReadSeeker so the SHA256 of the body can be +// generated. To bypass the signer computing the hash you can set the +// "X-Amz-Content-Sha256" header with a precomputed value. The signer will +// only compute the hash if the request header value is empty. +// +// Presigning a S3 request will not compute the body's SHA256 hash by default. +// This is done due to the general use case for S3 presigned URLs is to share +// PUT/GET capabilities. If you would like to include the body's SHA256 in the +// presigned request's signature you can set the "X-Amz-Content-Sha256" +// HTTP header and that will be included in the request's signature. +func (v4 Signer) Presign(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, signTime time.Time) (http.Header, error) { + return v4.signWithBody(r, body, service, region, exp, true, signTime) +} + +func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, isPresign bool, signTime time.Time) (http.Header, error) { + currentTimeFn := v4.currentTimeFn + if currentTimeFn == nil { + currentTimeFn = time.Now + } + + ctx := &signingCtx{ + Request: r, + Body: body, + Query: r.URL.Query(), + Time: signTime, + ExpireTime: exp, + isPresign: isPresign, + ServiceName: service, + Region: region, + DisableURIPathEscaping: v4.DisableURIPathEscaping, + unsignedPayload: v4.UnsignedPayload, + } + + for key := range ctx.Query { + sort.Strings(ctx.Query[key]) + } + + if ctx.isRequestSigned() { + ctx.Time = currentTimeFn() + ctx.handlePresignRemoval() + } + + var err error + ctx.credValues, err = v4.Credentials.Get() + if err != nil { + return http.Header{}, err + } + + ctx.sanitizeHostForHeader() + ctx.assignAmzQueryValues() + if err := ctx.build(v4.DisableHeaderHoisting); err != nil { + return nil, err + } + + // If the request is not presigned the body should be attached to it. This + // prevents the confusion of wanting to send a signed request without + // the body the request was signed for attached. + if !(v4.DisableRequestBodyOverwrite || ctx.isPresign) { + var reader io.ReadCloser + if body != nil { + var ok bool + if reader, ok = body.(io.ReadCloser); !ok { + reader = ioutil.NopCloser(body) + } + } + r.Body = reader + } + + if v4.Debug.Matches(aws.LogDebugWithSigning) { + v4.logSigningInfo(ctx) + } + + return ctx.SignedHeaderVals, nil +} + +func (ctx *signingCtx) sanitizeHostForHeader() { + request.SanitizeHostForHeader(ctx.Request) +} + +func (ctx *signingCtx) handlePresignRemoval() { + if !ctx.isPresign { + return + } + + // The credentials have expired for this request. The current signing + // is invalid, and needs to be request because the request will fail. + ctx.removePresign() + + // Update the request's query string to ensure the values stays in + // sync in the case retrieving the new credentials fails. + ctx.Request.URL.RawQuery = ctx.Query.Encode() +} + +func (ctx *signingCtx) assignAmzQueryValues() { + if ctx.isPresign { + ctx.Query.Set("X-Amz-Algorithm", authHeaderPrefix) + if ctx.credValues.SessionToken != "" { + ctx.Query.Set("X-Amz-Security-Token", ctx.credValues.SessionToken) + } else { + ctx.Query.Del("X-Amz-Security-Token") + } + + return + } + + if ctx.credValues.SessionToken != "" { + ctx.Request.Header.Set("X-Amz-Security-Token", ctx.credValues.SessionToken) + } +} + +// SignRequestHandler is a named request handler the SDK will use to sign +// service client request with using the V4 signature. +var SignRequestHandler = request.NamedHandler{ + Name: "v4.SignRequestHandler", Fn: SignSDKRequest, +} + +// SignSDKRequest signs an AWS request with the V4 signature. This +// request handler should only be used with the SDK's built in service client's +// API operation requests. +// +// This function should not be used on its on its own, but in conjunction with +// an AWS service client's API operation call. To sign a standalone request +// not created by a service client's API operation method use the "Sign" or +// "Presign" functions of the "Signer" type. +// +// If the credentials of the request's config are set to +// credentials.AnonymousCredentials the request will not be signed. +func SignSDKRequest(req *request.Request) { + SignSDKRequestWithCurrentTime(req, time.Now) +} + +// BuildNamedHandler will build a generic handler for signing. +func BuildNamedHandler(name string, opts ...func(*Signer)) request.NamedHandler { + return request.NamedHandler{ + Name: name, + Fn: func(req *request.Request) { + SignSDKRequestWithCurrentTime(req, time.Now, opts...) + }, + } +} + +// SignSDKRequestWithCurrentTime will sign the SDK's request using the time +// function passed in. Behaves the same as SignSDKRequest with the exception +// the request is signed with the value returned by the current time function. +func SignSDKRequestWithCurrentTime(req *request.Request, curTimeFn func() time.Time, opts ...func(*Signer)) { + // If the request does not need to be signed ignore the signing of the + // request if the AnonymousCredentials object is used. + if req.Config.Credentials == credentials.AnonymousCredentials { + return + } + + region := req.ClientInfo.SigningRegion + if region == "" { + region = aws.StringValue(req.Config.Region) + } + + name := req.ClientInfo.SigningName + if name == "" { + name = req.ClientInfo.ServiceName + } + + v4 := NewSigner(req.Config.Credentials, func(v4 *Signer) { + v4.Debug = req.Config.LogLevel.Value() + v4.Logger = req.Config.Logger + v4.DisableHeaderHoisting = req.NotHoist + v4.currentTimeFn = curTimeFn + if name == "s3" { + // S3 service should not have any escaping applied + v4.DisableURIPathEscaping = true + } + // Prevents setting the HTTPRequest's Body. Since the Body could be + // wrapped in a custom io.Closer that we do not want to be stompped + // on top of by the signer. + v4.DisableRequestBodyOverwrite = true + }) + + for _, opt := range opts { + opt(v4) + } + + curTime := curTimeFn() + signedHeaders, err := v4.signWithBody(req.HTTPRequest, req.GetBody(), + name, region, req.ExpireTime, req.ExpireTime > 0, curTime, + ) + if err != nil { + req.Error = err + req.SignedHeaderVals = nil + return + } + + req.SignedHeaderVals = signedHeaders + req.LastSignedAt = curTime +} + +const logSignInfoMsg = `DEBUG: Request Signature: +---[ CANONICAL STRING ]----------------------------- +%s +---[ STRING TO SIGN ]-------------------------------- +%s%s +-----------------------------------------------------` +const logSignedURLMsg = ` +---[ SIGNED URL ]------------------------------------ +%s` + +func (v4 *Signer) logSigningInfo(ctx *signingCtx) { + signedURLMsg := "" + if ctx.isPresign { + signedURLMsg = fmt.Sprintf(logSignedURLMsg, ctx.Request.URL.String()) + } + msg := fmt.Sprintf(logSignInfoMsg, ctx.canonicalString, ctx.stringToSign, signedURLMsg) + v4.Logger.Log(msg) +} + +func (ctx *signingCtx) build(disableHeaderHoisting bool) error { + ctx.buildTime() // no depends + ctx.buildCredentialString() // no depends + + if err := ctx.buildBodyDigest(); err != nil { + return err + } + + unsignedHeaders := ctx.Request.Header + if ctx.isPresign { + if !disableHeaderHoisting { + urlValues := url.Values{} + urlValues, unsignedHeaders = buildQuery(allowedQueryHoisting, unsignedHeaders) // no depends + for k := range urlValues { + ctx.Query[k] = urlValues[k] + } + } + } + + ctx.buildCanonicalHeaders(ignoredHeaders, unsignedHeaders) + ctx.buildCanonicalString() // depends on canon headers / signed headers + ctx.buildStringToSign() // depends on canon string + ctx.buildSignature() // depends on string to sign + + if ctx.isPresign { + ctx.Request.URL.RawQuery += "&X-Amz-Signature=" + ctx.signature + } else { + parts := []string{ + authHeaderPrefix + " Credential=" + ctx.credValues.AccessKeyID + "/" + ctx.credentialString, + "SignedHeaders=" + ctx.signedHeaders, + "Signature=" + ctx.signature, + } + ctx.Request.Header.Set("Authorization", strings.Join(parts, ", ")) + } + + return nil +} + +func (ctx *signingCtx) buildTime() { + ctx.formattedTime = ctx.Time.UTC().Format(timeFormat) + ctx.formattedShortTime = ctx.Time.UTC().Format(shortTimeFormat) + + if ctx.isPresign { + duration := int64(ctx.ExpireTime / time.Second) + ctx.Query.Set("X-Amz-Date", ctx.formattedTime) + ctx.Query.Set("X-Amz-Expires", strconv.FormatInt(duration, 10)) + } else { + ctx.Request.Header.Set("X-Amz-Date", ctx.formattedTime) + } +} + +func (ctx *signingCtx) buildCredentialString() { + ctx.credentialString = strings.Join([]string{ + ctx.formattedShortTime, + ctx.Region, + ctx.ServiceName, + "aws4_request", + }, "/") + + if ctx.isPresign { + ctx.Query.Set("X-Amz-Credential", ctx.credValues.AccessKeyID+"/"+ctx.credentialString) + } +} + +func buildQuery(r rule, header http.Header) (url.Values, http.Header) { + query := url.Values{} + unsignedHeaders := http.Header{} + for k, h := range header { + if r.IsValid(k) { + query[k] = h + } else { + unsignedHeaders[k] = h + } + } + + return query, unsignedHeaders +} +func (ctx *signingCtx) buildCanonicalHeaders(r rule, header http.Header) { + var headers []string + headers = append(headers, "host") + for k, v := range header { + canonicalKey := http.CanonicalHeaderKey(k) + if !r.IsValid(canonicalKey) { + continue // ignored header + } + if ctx.SignedHeaderVals == nil { + ctx.SignedHeaderVals = make(http.Header) + } + + lowerCaseKey := strings.ToLower(k) + if _, ok := ctx.SignedHeaderVals[lowerCaseKey]; ok { + // include additional values + ctx.SignedHeaderVals[lowerCaseKey] = append(ctx.SignedHeaderVals[lowerCaseKey], v...) + continue + } + + headers = append(headers, lowerCaseKey) + ctx.SignedHeaderVals[lowerCaseKey] = v + } + sort.Strings(headers) + + ctx.signedHeaders = strings.Join(headers, ";") + + if ctx.isPresign { + ctx.Query.Set("X-Amz-SignedHeaders", ctx.signedHeaders) + } + + headerValues := make([]string, len(headers)) + for i, k := range headers { + if k == "host" { + if ctx.Request.Host != "" { + headerValues[i] = "host:" + ctx.Request.Host + } else { + headerValues[i] = "host:" + ctx.Request.URL.Host + } + } else { + headerValues[i] = k + ":" + + strings.Join(ctx.SignedHeaderVals[k], ",") + } + } + stripExcessSpaces(headerValues) + ctx.canonicalHeaders = strings.Join(headerValues, "\n") +} + +func (ctx *signingCtx) buildCanonicalString() { + ctx.Request.URL.RawQuery = strings.Replace(ctx.Query.Encode(), "+", "%20", -1) + + uri := getURIPath(ctx.Request.URL) + + if !ctx.DisableURIPathEscaping { + uri = rest.EscapePath(uri, false) + } + + ctx.canonicalString = strings.Join([]string{ + ctx.Request.Method, + uri, + ctx.Request.URL.RawQuery, + ctx.canonicalHeaders + "\n", + ctx.signedHeaders, + ctx.bodyDigest, + }, "\n") +} + +func (ctx *signingCtx) buildStringToSign() { + ctx.stringToSign = strings.Join([]string{ + authHeaderPrefix, + ctx.formattedTime, + ctx.credentialString, + hex.EncodeToString(makeSha256([]byte(ctx.canonicalString))), + }, "\n") +} + +func (ctx *signingCtx) buildSignature() { + secret := ctx.credValues.SecretAccessKey + date := makeHmac([]byte("AWS4"+secret), []byte(ctx.formattedShortTime)) + region := makeHmac(date, []byte(ctx.Region)) + service := makeHmac(region, []byte(ctx.ServiceName)) + credentials := makeHmac(service, []byte("aws4_request")) + signature := makeHmac(credentials, []byte(ctx.stringToSign)) + ctx.signature = hex.EncodeToString(signature) +} + +func (ctx *signingCtx) buildBodyDigest() error { + hash := ctx.Request.Header.Get("X-Amz-Content-Sha256") + if hash == "" { + includeSHA256Header := ctx.unsignedPayload || + ctx.ServiceName == "s3" || + ctx.ServiceName == "glacier" + + s3Presign := ctx.isPresign && ctx.ServiceName == "s3" + + if ctx.unsignedPayload || s3Presign { + hash = "UNSIGNED-PAYLOAD" + includeSHA256Header = !s3Presign + } else if ctx.Body == nil { + hash = emptyStringSHA256 + } else { + if !aws.IsReaderSeekable(ctx.Body) { + return fmt.Errorf("cannot use unseekable request body %T, for signed request with body", ctx.Body) + } + hashBytes, err := makeSha256Reader(ctx.Body) + if err != nil { + return err + } + hash = hex.EncodeToString(hashBytes) + } + + if includeSHA256Header { + ctx.Request.Header.Set("X-Amz-Content-Sha256", hash) + } + } + ctx.bodyDigest = hash + + return nil +} + +// isRequestSigned returns if the request is currently signed or presigned +func (ctx *signingCtx) isRequestSigned() bool { + if ctx.isPresign && ctx.Query.Get("X-Amz-Signature") != "" { + return true + } + if ctx.Request.Header.Get("Authorization") != "" { + return true + } + + return false +} + +// unsign removes signing flags for both signed and presigned requests. +func (ctx *signingCtx) removePresign() { + ctx.Query.Del("X-Amz-Algorithm") + ctx.Query.Del("X-Amz-Signature") + ctx.Query.Del("X-Amz-Security-Token") + ctx.Query.Del("X-Amz-Date") + ctx.Query.Del("X-Amz-Expires") + ctx.Query.Del("X-Amz-Credential") + ctx.Query.Del("X-Amz-SignedHeaders") +} + +func makeHmac(key []byte, data []byte) []byte { + hash := hmac.New(sha256.New, key) + hash.Write(data) + return hash.Sum(nil) +} + +func makeSha256(data []byte) []byte { + hash := sha256.New() + hash.Write(data) + return hash.Sum(nil) +} + +func makeSha256Reader(reader io.ReadSeeker) (hashBytes []byte, err error) { + hash := sha256.New() + start, err := reader.Seek(0, sdkio.SeekCurrent) + if err != nil { + return nil, err + } + defer func() { + // ensure error is return if unable to seek back to start of payload. + _, err = reader.Seek(start, sdkio.SeekStart) + }() + + // Use CopyN to avoid allocating the 32KB buffer in io.Copy for bodies + // smaller than 32KB. Fall back to io.Copy if we fail to determine the size. + size, err := aws.SeekerLen(reader) + if err != nil { + io.Copy(hash, reader) + } else { + io.CopyN(hash, reader, size) + } + + return hash.Sum(nil), nil +} + +const doubleSpace = " " + +// stripExcessSpaces will rewrite the passed in slice's string values to not +// contain multiple side-by-side spaces. +func stripExcessSpaces(vals []string) { + var j, k, l, m, spaces int + for i, str := range vals { + // Trim trailing spaces + for j = len(str) - 1; j >= 0 && str[j] == ' '; j-- { + } + + // Trim leading spaces + for k = 0; k < j && str[k] == ' '; k++ { + } + str = str[k : j+1] + + // Strip multiple spaces. + j = strings.Index(str, doubleSpace) + if j < 0 { + vals[i] = str + continue + } + + buf := []byte(str) + for k, m, l = j, j, len(buf); k < l; k++ { + if buf[k] == ' ' { + if spaces == 0 { + // First space. + buf[m] = buf[k] + m++ + } + spaces++ + } else { + // End of multiple spaces. + spaces = 0 + buf[m] = buf[k] + m++ + } + } + + vals[i] = string(buf[:m]) + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/types.go b/vendor/github.com/aws/aws-sdk-go/aws/types.go index 0f067c57f4e..455091540fd 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/types.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/types.go @@ -3,9 +3,22 @@ package aws import ( "io" "sync" + + "github.com/aws/aws-sdk-go/internal/sdkio" ) -// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser +// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser. Allows the +// SDK to accept an io.Reader that is not also an io.Seeker for unsigned +// streaming payload API operations. +// +// A ReadSeekCloser wrapping an nonseekable io.Reader used in an API +// operation's input will prevent that operation being retried in the case of +// network errors, and cause operation requests to fail if the operation +// requires payload signing. +// +// Note: If using With S3 PutObject to stream an object upload The SDK's S3 +// Upload manager (s3manager.Uploader) provides support for streaming with the +// ability to retry network errors. func ReadSeekCloser(r io.Reader) ReaderSeekerCloser { return ReaderSeekerCloser{r} } @@ -16,10 +29,27 @@ type ReaderSeekerCloser struct { r io.Reader } +// IsReaderSeekable returns if the underlying reader type can be seeked. A +// io.Reader might not actually be seekable if it is the ReaderSeekerCloser +// type. +func IsReaderSeekable(r io.Reader) bool { + switch v := r.(type) { + case ReaderSeekerCloser: + return v.IsSeeker() + case *ReaderSeekerCloser: + return v.IsSeeker() + case io.ReadSeeker: + return true + default: + return false + } +} + // Read reads from the reader up to size of p. The number of bytes read, and // error if it occurred will be returned. // -// If the reader is not an io.Reader zero bytes read, and nil error will be returned. +// If the reader is not an io.Reader zero bytes read, and nil error will be +// returned. // // Performs the same functionality as io.Reader Read func (r ReaderSeekerCloser) Read(p []byte) (int, error) { @@ -44,6 +74,77 @@ func (r ReaderSeekerCloser) Seek(offset int64, whence int) (int64, error) { return int64(0), nil } +// IsSeeker returns if the underlying reader is also a seeker. +func (r ReaderSeekerCloser) IsSeeker() bool { + _, ok := r.r.(io.Seeker) + return ok +} + +// HasLen returns the length of the underlying reader if the value implements +// the Len() int method. +func (r ReaderSeekerCloser) HasLen() (int, bool) { + type lenner interface { + Len() int + } + + if lr, ok := r.r.(lenner); ok { + return lr.Len(), true + } + + return 0, false +} + +// GetLen returns the length of the bytes remaining in the underlying reader. +// Checks first for Len(), then io.Seeker to determine the size of the +// underlying reader. +// +// Will return -1 if the length cannot be determined. +func (r ReaderSeekerCloser) GetLen() (int64, error) { + if l, ok := r.HasLen(); ok { + return int64(l), nil + } + + if s, ok := r.r.(io.Seeker); ok { + return seekerLen(s) + } + + return -1, nil +} + +// SeekerLen attempts to get the number of bytes remaining at the seeker's +// current position. Returns the number of bytes remaining or error. +func SeekerLen(s io.Seeker) (int64, error) { + // Determine if the seeker is actually seekable. ReaderSeekerCloser + // hides the fact that a io.Readers might not actually be seekable. + switch v := s.(type) { + case ReaderSeekerCloser: + return v.GetLen() + case *ReaderSeekerCloser: + return v.GetLen() + } + + return seekerLen(s) +} + +func seekerLen(s io.Seeker) (int64, error) { + curOffset, err := s.Seek(0, sdkio.SeekCurrent) + if err != nil { + return 0, err + } + + endOffset, err := s.Seek(0, sdkio.SeekEnd) + if err != nil { + return 0, err + } + + _, err = s.Seek(curOffset, sdkio.SeekStart) + if err != nil { + return 0, err + } + + return endOffset - curOffset, nil +} + // Close closes the ReaderSeekerCloser. // // If the ReaderSeekerCloser is not an io.Closer nothing will be done. @@ -61,28 +162,46 @@ func (r ReaderSeekerCloser) Close() error { type WriteAtBuffer struct { buf []byte m sync.Mutex + + // GrowthCoeff defines the growth rate of the internal buffer. By + // default, the growth rate is 1, where expanding the internal + // buffer will allocate only enough capacity to fit the new expected + // length. + GrowthCoeff float64 +} + +// NewWriteAtBuffer creates a WriteAtBuffer with an internal buffer +// provided by buf. +func NewWriteAtBuffer(buf []byte) *WriteAtBuffer { + return &WriteAtBuffer{buf: buf} } // WriteAt writes a slice of bytes to a buffer starting at the position provided // The number of bytes written will be returned, or error. Can overwrite previous // written slices if the write ats overlap. func (b *WriteAtBuffer) WriteAt(p []byte, pos int64) (n int, err error) { + pLen := len(p) + expLen := pos + int64(pLen) b.m.Lock() defer b.m.Unlock() - - expLen := pos + int64(len(p)) if int64(len(b.buf)) < expLen { - newBuf := make([]byte, expLen) - copy(newBuf, b.buf) - b.buf = newBuf + if int64(cap(b.buf)) < expLen { + if b.GrowthCoeff < 1 { + b.GrowthCoeff = 1 + } + newBuf := make([]byte, expLen, int64(b.GrowthCoeff*float64(expLen))) + copy(newBuf, b.buf) + b.buf = newBuf + } + b.buf = b.buf[:expLen] } copy(b.buf[pos:], p) - return len(p), nil + return pLen, nil } // Bytes returns a slice of bytes written to the buffer. func (b *WriteAtBuffer) Bytes() []byte { b.m.Lock() defer b.m.Unlock() - return b.buf[:len(b.buf):len(b.buf)] + return b.buf } diff --git a/vendor/github.com/aws/aws-sdk-go/aws/url.go b/vendor/github.com/aws/aws-sdk-go/aws/url.go new file mode 100644 index 00000000000..6192b2455b6 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/url.go @@ -0,0 +1,12 @@ +// +build go1.8 + +package aws + +import "net/url" + +// URLHostname will extract the Hostname without port from the URL value. +// +// Wrapper of net/url#URL.Hostname for backwards Go version compatibility. +func URLHostname(url *url.URL) string { + return url.Hostname() +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go b/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go new file mode 100644 index 00000000000..0210d2720e7 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go @@ -0,0 +1,29 @@ +// +build !go1.8 + +package aws + +import ( + "net/url" + "strings" +) + +// URLHostname will extract the Hostname without port from the URL value. +// +// Copy of Go 1.8's net/url#URL.Hostname functionality. +func URLHostname(url *url.URL) string { + return stripPort(url.Host) + +} + +// stripPort is copy of Go 1.8 url#URL.Hostname functionality. +// https://golang.org/src/net/url/url.go +func stripPort(hostport string) string { + colon := strings.IndexByte(hostport, ':') + if colon == -1 { + return hostport + } + if i := strings.IndexByte(hostport, ']'); i != -1 { + return strings.TrimPrefix(hostport[:i], "[") + } + return hostport[:colon] +} diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go index b86f3684294..9df3ff69327 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/version.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.0.6" +const SDKVersion = "1.25.44" diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go new file mode 100644 index 00000000000..e83a99886bc --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go @@ -0,0 +1,120 @@ +package ini + +// ASTKind represents different states in the parse table +// and the type of AST that is being constructed +type ASTKind int + +// ASTKind* is used in the parse table to transition between +// the different states +const ( + ASTKindNone = ASTKind(iota) + ASTKindStart + ASTKindExpr + ASTKindEqualExpr + ASTKindStatement + ASTKindSkipStatement + ASTKindExprStatement + ASTKindSectionStatement + ASTKindNestedSectionStatement + ASTKindCompletedNestedSectionStatement + ASTKindCommentStatement + ASTKindCompletedSectionStatement +) + +func (k ASTKind) String() string { + switch k { + case ASTKindNone: + return "none" + case ASTKindStart: + return "start" + case ASTKindExpr: + return "expr" + case ASTKindStatement: + return "stmt" + case ASTKindSectionStatement: + return "section_stmt" + case ASTKindExprStatement: + return "expr_stmt" + case ASTKindCommentStatement: + return "comment" + case ASTKindNestedSectionStatement: + return "nested_section_stmt" + case ASTKindCompletedSectionStatement: + return "completed_stmt" + case ASTKindSkipStatement: + return "skip" + default: + return "" + } +} + +// AST interface allows us to determine what kind of node we +// are on and casting may not need to be necessary. +// +// The root is always the first node in Children +type AST struct { + Kind ASTKind + Root Token + RootToken bool + Children []AST +} + +func newAST(kind ASTKind, root AST, children ...AST) AST { + return AST{ + Kind: kind, + Children: append([]AST{root}, children...), + } +} + +func newASTWithRootToken(kind ASTKind, root Token, children ...AST) AST { + return AST{ + Kind: kind, + Root: root, + RootToken: true, + Children: children, + } +} + +// AppendChild will append to the list of children an AST has. +func (a *AST) AppendChild(child AST) { + a.Children = append(a.Children, child) +} + +// GetRoot will return the root AST which can be the first entry +// in the children list or a token. +func (a *AST) GetRoot() AST { + if a.RootToken { + return *a + } + + if len(a.Children) == 0 { + return AST{} + } + + return a.Children[0] +} + +// GetChildren will return the current AST's list of children +func (a *AST) GetChildren() []AST { + if len(a.Children) == 0 { + return []AST{} + } + + if a.RootToken { + return a.Children + } + + return a.Children[1:] +} + +// SetChildren will set and override all children of the AST. +func (a *AST) SetChildren(children []AST) { + if a.RootToken { + a.Children = children + } else { + a.Children = append(a.Children[:1], children...) + } +} + +// Start is used to indicate the starting state of the parse table. +var Start = newAST(ASTKindStart, AST{}) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go new file mode 100644 index 00000000000..0895d53cbe6 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go @@ -0,0 +1,11 @@ +package ini + +var commaRunes = []rune(",") + +func isComma(b rune) bool { + return b == ',' +} + +func newCommaToken() Token { + return newToken(TokenComma, commaRunes, NoneType) +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go new file mode 100644 index 00000000000..0b76999ba1f --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go @@ -0,0 +1,35 @@ +package ini + +// isComment will return whether or not the next byte(s) is a +// comment. +func isComment(b []rune) bool { + if len(b) == 0 { + return false + } + + switch b[0] { + case ';': + return true + case '#': + return true + } + + return false +} + +// newCommentToken will create a comment token and +// return how many bytes were read. +func newCommentToken(b []rune) (Token, int, error) { + i := 0 + for ; i < len(b); i++ { + if b[i] == '\n' { + break + } + + if len(b)-i > 2 && b[i] == '\r' && b[i+1] == '\n' { + break + } + } + + return newToken(TokenComment, b[:i], NoneType), i, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go new file mode 100644 index 00000000000..25ce0fe134d --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go @@ -0,0 +1,29 @@ +// Package ini is an LL(1) parser for configuration files. +// +// Example: +// sections, err := ini.OpenFile("/path/to/file") +// if err != nil { +// panic(err) +// } +// +// profile := "foo" +// section, ok := sections.GetSection(profile) +// if !ok { +// fmt.Printf("section %q could not be found", profile) +// } +// +// Below is the BNF that describes this parser +// Grammar: +// stmt -> value stmt' +// stmt' -> epsilon | op stmt +// value -> number | string | boolean | quoted_string +// +// section -> [ section' +// section' -> value section_close +// section_close -> ] +// +// SkipState will skip (NL WS)+ +// +// comment -> # comment' | ; comment' +// comment' -> epsilon | value +package ini diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go new file mode 100644 index 00000000000..04345a54c20 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go @@ -0,0 +1,4 @@ +package ini + +// emptyToken is used to satisfy the Token interface +var emptyToken = newToken(TokenNone, []rune{}, NoneType) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go new file mode 100644 index 00000000000..91ba2a59dd5 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go @@ -0,0 +1,24 @@ +package ini + +// newExpression will return an expression AST. +// Expr represents an expression +// +// grammar: +// expr -> string | number +func newExpression(tok Token) AST { + return newASTWithRootToken(ASTKindExpr, tok) +} + +func newEqualExpr(left AST, tok Token) AST { + return newASTWithRootToken(ASTKindEqualExpr, tok, left) +} + +// EqualExprKey will return a LHS value in the equal expr +func EqualExprKey(ast AST) string { + children := ast.GetChildren() + if len(children) == 0 || ast.Kind != ASTKindEqualExpr { + return "" + } + + return string(children[0].Root.Raw()) +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go new file mode 100644 index 00000000000..8d462f77e24 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go @@ -0,0 +1,17 @@ +// +build gofuzz + +package ini + +import ( + "bytes" +) + +func Fuzz(data []byte) int { + b := bytes.NewReader(data) + + if _, err := Parse(b); err != nil { + return 0 + } + + return 1 +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go new file mode 100644 index 00000000000..3b0ca7afe3b --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go @@ -0,0 +1,51 @@ +package ini + +import ( + "io" + "os" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +// OpenFile takes a path to a given file, and will open and parse +// that file. +func OpenFile(path string) (Sections, error) { + f, err := os.Open(path) + if err != nil { + return Sections{}, awserr.New(ErrCodeUnableToReadFile, "unable to open file", err) + } + defer f.Close() + + return Parse(f) +} + +// Parse will parse the given file using the shared config +// visitor. +func Parse(f io.Reader) (Sections, error) { + tree, err := ParseAST(f) + if err != nil { + return Sections{}, err + } + + v := NewDefaultVisitor() + if err = Walk(tree, v); err != nil { + return Sections{}, err + } + + return v.Sections, nil +} + +// ParseBytes will parse the given bytes and return the parsed sections. +func ParseBytes(b []byte) (Sections, error) { + tree, err := ParseASTBytes(b) + if err != nil { + return Sections{}, err + } + + v := NewDefaultVisitor() + if err = Walk(tree, v); err != nil { + return Sections{}, err + } + + return v.Sections, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go new file mode 100644 index 00000000000..582c024ad15 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go @@ -0,0 +1,165 @@ +package ini + +import ( + "bytes" + "io" + "io/ioutil" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +const ( + // ErrCodeUnableToReadFile is used when a file is failed to be + // opened or read from. + ErrCodeUnableToReadFile = "FailedRead" +) + +// TokenType represents the various different tokens types +type TokenType int + +func (t TokenType) String() string { + switch t { + case TokenNone: + return "none" + case TokenLit: + return "literal" + case TokenSep: + return "sep" + case TokenOp: + return "op" + case TokenWS: + return "ws" + case TokenNL: + return "newline" + case TokenComment: + return "comment" + case TokenComma: + return "comma" + default: + return "" + } +} + +// TokenType enums +const ( + TokenNone = TokenType(iota) + TokenLit + TokenSep + TokenComma + TokenOp + TokenWS + TokenNL + TokenComment +) + +type iniLexer struct{} + +// Tokenize will return a list of tokens during lexical analysis of the +// io.Reader. +func (l *iniLexer) Tokenize(r io.Reader) ([]Token, error) { + b, err := ioutil.ReadAll(r) + if err != nil { + return nil, awserr.New(ErrCodeUnableToReadFile, "unable to read file", err) + } + + return l.tokenize(b) +} + +func (l *iniLexer) tokenize(b []byte) ([]Token, error) { + runes := bytes.Runes(b) + var err error + n := 0 + tokenAmount := countTokens(runes) + tokens := make([]Token, tokenAmount) + count := 0 + + for len(runes) > 0 && count < tokenAmount { + switch { + case isWhitespace(runes[0]): + tokens[count], n, err = newWSToken(runes) + case isComma(runes[0]): + tokens[count], n = newCommaToken(), 1 + case isComment(runes): + tokens[count], n, err = newCommentToken(runes) + case isNewline(runes): + tokens[count], n, err = newNewlineToken(runes) + case isSep(runes): + tokens[count], n, err = newSepToken(runes) + case isOp(runes): + tokens[count], n, err = newOpToken(runes) + default: + tokens[count], n, err = newLitToken(runes) + } + + if err != nil { + return nil, err + } + + count++ + + runes = runes[n:] + } + + return tokens[:count], nil +} + +func countTokens(runes []rune) int { + count, n := 0, 0 + var err error + + for len(runes) > 0 { + switch { + case isWhitespace(runes[0]): + _, n, err = newWSToken(runes) + case isComma(runes[0]): + _, n = newCommaToken(), 1 + case isComment(runes): + _, n, err = newCommentToken(runes) + case isNewline(runes): + _, n, err = newNewlineToken(runes) + case isSep(runes): + _, n, err = newSepToken(runes) + case isOp(runes): + _, n, err = newOpToken(runes) + default: + _, n, err = newLitToken(runes) + } + + if err != nil { + return 0 + } + + count++ + runes = runes[n:] + } + + return count + 1 +} + +// Token indicates a metadata about a given value. +type Token struct { + t TokenType + ValueType ValueType + base int + raw []rune +} + +var emptyValue = Value{} + +func newToken(t TokenType, raw []rune, v ValueType) Token { + return Token{ + t: t, + raw: raw, + ValueType: v, + } +} + +// Raw return the raw runes that were consumed +func (tok Token) Raw() []rune { + return tok.raw +} + +// Type returns the token type +func (tok Token) Type() TokenType { + return tok.t +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go new file mode 100644 index 00000000000..cf9fad81e70 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go @@ -0,0 +1,356 @@ +package ini + +import ( + "fmt" + "io" +) + +// State enums for the parse table +const ( + InvalidState = iota + // stmt -> value stmt' + StatementState + // stmt' -> MarkComplete | op stmt + StatementPrimeState + // value -> number | string | boolean | quoted_string + ValueState + // section -> [ section' + OpenScopeState + // section' -> value section_close + SectionState + // section_close -> ] + CloseScopeState + // SkipState will skip (NL WS)+ + SkipState + // SkipTokenState will skip any token and push the previous + // state onto the stack. + SkipTokenState + // comment -> # comment' | ; comment' + // comment' -> MarkComplete | value + CommentState + // MarkComplete state will complete statements and move that + // to the completed AST list + MarkCompleteState + // TerminalState signifies that the tokens have been fully parsed + TerminalState +) + +// parseTable is a state machine to dictate the grammar above. +var parseTable = map[ASTKind]map[TokenType]int{ + ASTKindStart: map[TokenType]int{ + TokenLit: StatementState, + TokenSep: OpenScopeState, + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenComment: CommentState, + TokenNone: TerminalState, + }, + ASTKindCommentStatement: map[TokenType]int{ + TokenLit: StatementState, + TokenSep: OpenScopeState, + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenComment: CommentState, + TokenNone: MarkCompleteState, + }, + ASTKindExpr: map[TokenType]int{ + TokenOp: StatementPrimeState, + TokenLit: ValueState, + TokenSep: OpenScopeState, + TokenWS: ValueState, + TokenNL: SkipState, + TokenComment: CommentState, + TokenNone: MarkCompleteState, + }, + ASTKindEqualExpr: map[TokenType]int{ + TokenLit: ValueState, + TokenWS: SkipTokenState, + TokenNL: SkipState, + }, + ASTKindStatement: map[TokenType]int{ + TokenLit: SectionState, + TokenSep: CloseScopeState, + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenComment: CommentState, + TokenNone: MarkCompleteState, + }, + ASTKindExprStatement: map[TokenType]int{ + TokenLit: ValueState, + TokenSep: OpenScopeState, + TokenOp: ValueState, + TokenWS: ValueState, + TokenNL: MarkCompleteState, + TokenComment: CommentState, + TokenNone: TerminalState, + TokenComma: SkipState, + }, + ASTKindSectionStatement: map[TokenType]int{ + TokenLit: SectionState, + TokenOp: SectionState, + TokenSep: CloseScopeState, + TokenWS: SectionState, + TokenNL: SkipTokenState, + }, + ASTKindCompletedSectionStatement: map[TokenType]int{ + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenLit: StatementState, + TokenSep: OpenScopeState, + TokenComment: CommentState, + TokenNone: MarkCompleteState, + }, + ASTKindSkipStatement: map[TokenType]int{ + TokenLit: StatementState, + TokenSep: OpenScopeState, + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenComment: CommentState, + TokenNone: TerminalState, + }, +} + +// ParseAST will parse input from an io.Reader using +// an LL(1) parser. +func ParseAST(r io.Reader) ([]AST, error) { + lexer := iniLexer{} + tokens, err := lexer.Tokenize(r) + if err != nil { + return []AST{}, err + } + + return parse(tokens) +} + +// ParseASTBytes will parse input from a byte slice using +// an LL(1) parser. +func ParseASTBytes(b []byte) ([]AST, error) { + lexer := iniLexer{} + tokens, err := lexer.tokenize(b) + if err != nil { + return []AST{}, err + } + + return parse(tokens) +} + +func parse(tokens []Token) ([]AST, error) { + start := Start + stack := newParseStack(3, len(tokens)) + + stack.Push(start) + s := newSkipper() + +loop: + for stack.Len() > 0 { + k := stack.Pop() + + var tok Token + if len(tokens) == 0 { + // this occurs when all the tokens have been processed + // but reduction of what's left on the stack needs to + // occur. + tok = emptyToken + } else { + tok = tokens[0] + } + + step := parseTable[k.Kind][tok.Type()] + if s.ShouldSkip(tok) { + // being in a skip state with no tokens will break out of + // the parse loop since there is nothing left to process. + if len(tokens) == 0 { + break loop + } + // if should skip is true, we skip the tokens until should skip is set to false. + step = SkipTokenState + } + + switch step { + case TerminalState: + // Finished parsing. Push what should be the last + // statement to the stack. If there is anything left + // on the stack, an error in parsing has occurred. + if k.Kind != ASTKindStart { + stack.MarkComplete(k) + } + break loop + case SkipTokenState: + // When skipping a token, the previous state was popped off the stack. + // To maintain the correct state, the previous state will be pushed + // onto the stack. + stack.Push(k) + case StatementState: + if k.Kind != ASTKindStart { + stack.MarkComplete(k) + } + expr := newExpression(tok) + stack.Push(expr) + case StatementPrimeState: + if tok.Type() != TokenOp { + stack.MarkComplete(k) + continue + } + + if k.Kind != ASTKindExpr { + return nil, NewParseError( + fmt.Sprintf("invalid expression: expected Expr type, but found %T type", k), + ) + } + + k = trimSpaces(k) + expr := newEqualExpr(k, tok) + stack.Push(expr) + case ValueState: + // ValueState requires the previous state to either be an equal expression + // or an expression statement. + // + // This grammar occurs when the RHS is a number, word, or quoted string. + // equal_expr -> lit op equal_expr' + // equal_expr' -> number | string | quoted_string + // quoted_string -> " quoted_string' + // quoted_string' -> string quoted_string_end + // quoted_string_end -> " + // + // otherwise + // expr_stmt -> equal_expr (expr_stmt')* + // expr_stmt' -> ws S | op S | MarkComplete + // S -> equal_expr' expr_stmt' + switch k.Kind { + case ASTKindEqualExpr: + // assigning a value to some key + k.AppendChild(newExpression(tok)) + stack.Push(newExprStatement(k)) + case ASTKindExpr: + k.Root.raw = append(k.Root.raw, tok.Raw()...) + stack.Push(k) + case ASTKindExprStatement: + root := k.GetRoot() + children := root.GetChildren() + if len(children) == 0 { + return nil, NewParseError( + fmt.Sprintf("invalid expression: AST contains no children %s", k.Kind), + ) + } + + rhs := children[len(children)-1] + + if rhs.Root.ValueType != QuotedStringType { + rhs.Root.ValueType = StringType + rhs.Root.raw = append(rhs.Root.raw, tok.Raw()...) + + } + + children[len(children)-1] = rhs + k.SetChildren(children) + + stack.Push(k) + } + case OpenScopeState: + if !runeCompare(tok.Raw(), openBrace) { + return nil, NewParseError("expected '['") + } + // If OpenScopeState is not at the start, we must mark the previous ast as complete + // + // for example: if previous ast was a skip statement; + // we should mark it as complete before we create a new statement + if k.Kind != ASTKindStart { + stack.MarkComplete(k) + } + + stmt := newStatement() + stack.Push(stmt) + case CloseScopeState: + if !runeCompare(tok.Raw(), closeBrace) { + return nil, NewParseError("expected ']'") + } + + k = trimSpaces(k) + stack.Push(newCompletedSectionStatement(k)) + case SectionState: + var stmt AST + + switch k.Kind { + case ASTKindStatement: + // If there are multiple literals inside of a scope declaration, + // then the current token's raw value will be appended to the Name. + // + // This handles cases like [ profile default ] + // + // k will represent a SectionStatement with the children representing + // the label of the section + stmt = newSectionStatement(tok) + case ASTKindSectionStatement: + k.Root.raw = append(k.Root.raw, tok.Raw()...) + stmt = k + default: + return nil, NewParseError( + fmt.Sprintf("invalid statement: expected statement: %v", k.Kind), + ) + } + + stack.Push(stmt) + case MarkCompleteState: + if k.Kind != ASTKindStart { + stack.MarkComplete(k) + } + + if stack.Len() == 0 { + stack.Push(start) + } + case SkipState: + stack.Push(newSkipStatement(k)) + s.Skip() + case CommentState: + if k.Kind == ASTKindStart { + stack.Push(k) + } else { + stack.MarkComplete(k) + } + + stmt := newCommentStatement(tok) + stack.Push(stmt) + default: + return nil, NewParseError( + fmt.Sprintf("invalid state with ASTKind %v and TokenType %v", + k, tok.Type())) + } + + if len(tokens) > 0 { + tokens = tokens[1:] + } + } + + // this occurs when a statement has not been completed + if stack.top > 1 { + return nil, NewParseError(fmt.Sprintf("incomplete ini expression")) + } + + // returns a sublist which excludes the start symbol + return stack.List(), nil +} + +// trimSpaces will trim spaces on the left and right hand side of +// the literal. +func trimSpaces(k AST) AST { + // trim left hand side of spaces + for i := 0; i < len(k.Root.raw); i++ { + if !isWhitespace(k.Root.raw[i]) { + break + } + + k.Root.raw = k.Root.raw[1:] + i-- + } + + // trim right hand side of spaces + for i := len(k.Root.raw) - 1; i >= 0; i-- { + if !isWhitespace(k.Root.raw[i]) { + break + } + + k.Root.raw = k.Root.raw[:len(k.Root.raw)-1] + } + + return k +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go new file mode 100644 index 00000000000..24df543d38c --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go @@ -0,0 +1,324 @@ +package ini + +import ( + "fmt" + "strconv" + "strings" +) + +var ( + runesTrue = []rune("true") + runesFalse = []rune("false") +) + +var literalValues = [][]rune{ + runesTrue, + runesFalse, +} + +func isBoolValue(b []rune) bool { + for _, lv := range literalValues { + if isLitValue(lv, b) { + return true + } + } + return false +} + +func isLitValue(want, have []rune) bool { + if len(have) < len(want) { + return false + } + + for i := 0; i < len(want); i++ { + if want[i] != have[i] { + return false + } + } + + return true +} + +// isNumberValue will return whether not the leading characters in +// a byte slice is a number. A number is delimited by whitespace or +// the newline token. +// +// A number is defined to be in a binary, octal, decimal (int | float), hex format, +// or in scientific notation. +func isNumberValue(b []rune) bool { + negativeIndex := 0 + helper := numberHelper{} + needDigit := false + + for i := 0; i < len(b); i++ { + negativeIndex++ + + switch b[i] { + case '-': + if helper.IsNegative() || negativeIndex != 1 { + return false + } + helper.Determine(b[i]) + needDigit = true + continue + case 'e', 'E': + if err := helper.Determine(b[i]); err != nil { + return false + } + negativeIndex = 0 + needDigit = true + continue + case 'b': + if helper.numberFormat == hex { + break + } + fallthrough + case 'o', 'x': + needDigit = true + if i == 0 { + return false + } + + fallthrough + case '.': + if err := helper.Determine(b[i]); err != nil { + return false + } + needDigit = true + continue + } + + if i > 0 && (isNewline(b[i:]) || isWhitespace(b[i])) { + return !needDigit + } + + if !helper.CorrectByte(b[i]) { + return false + } + needDigit = false + } + + return !needDigit +} + +func isValid(b []rune) (bool, int, error) { + if len(b) == 0 { + // TODO: should probably return an error + return false, 0, nil + } + + return isValidRune(b[0]), 1, nil +} + +func isValidRune(r rune) bool { + return r != ':' && r != '=' && r != '[' && r != ']' && r != ' ' && r != '\n' +} + +// ValueType is an enum that will signify what type +// the Value is +type ValueType int + +func (v ValueType) String() string { + switch v { + case NoneType: + return "NONE" + case DecimalType: + return "FLOAT" + case IntegerType: + return "INT" + case StringType: + return "STRING" + case BoolType: + return "BOOL" + } + + return "" +} + +// ValueType enums +const ( + NoneType = ValueType(iota) + DecimalType + IntegerType + StringType + QuotedStringType + BoolType +) + +// Value is a union container +type Value struct { + Type ValueType + raw []rune + + integer int64 + decimal float64 + boolean bool + str string +} + +func newValue(t ValueType, base int, raw []rune) (Value, error) { + v := Value{ + Type: t, + raw: raw, + } + var err error + + switch t { + case DecimalType: + v.decimal, err = strconv.ParseFloat(string(raw), 64) + case IntegerType: + if base != 10 { + raw = raw[2:] + } + + v.integer, err = strconv.ParseInt(string(raw), base, 64) + case StringType: + v.str = string(raw) + case QuotedStringType: + v.str = string(raw[1 : len(raw)-1]) + case BoolType: + v.boolean = runeCompare(v.raw, runesTrue) + } + + // issue 2253 + // + // if the value trying to be parsed is too large, then we will use + // the 'StringType' and raw value instead. + if nerr, ok := err.(*strconv.NumError); ok && nerr.Err == strconv.ErrRange { + v.Type = StringType + v.str = string(raw) + err = nil + } + + return v, err +} + +// Append will append values and change the type to a string +// type. +func (v *Value) Append(tok Token) { + r := tok.Raw() + if v.Type != QuotedStringType { + v.Type = StringType + r = tok.raw[1 : len(tok.raw)-1] + } + if tok.Type() != TokenLit { + v.raw = append(v.raw, tok.Raw()...) + } else { + v.raw = append(v.raw, r...) + } +} + +func (v Value) String() string { + switch v.Type { + case DecimalType: + return fmt.Sprintf("decimal: %f", v.decimal) + case IntegerType: + return fmt.Sprintf("integer: %d", v.integer) + case StringType: + return fmt.Sprintf("string: %s", string(v.raw)) + case QuotedStringType: + return fmt.Sprintf("quoted string: %s", string(v.raw)) + case BoolType: + return fmt.Sprintf("bool: %t", v.boolean) + default: + return "union not set" + } +} + +func newLitToken(b []rune) (Token, int, error) { + n := 0 + var err error + + token := Token{} + if b[0] == '"' { + n, err = getStringValue(b) + if err != nil { + return token, n, err + } + + token = newToken(TokenLit, b[:n], QuotedStringType) + } else if isNumberValue(b) { + var base int + base, n, err = getNumericalValue(b) + if err != nil { + return token, 0, err + } + + value := b[:n] + vType := IntegerType + if contains(value, '.') || hasExponent(value) { + vType = DecimalType + } + token = newToken(TokenLit, value, vType) + token.base = base + } else if isBoolValue(b) { + n, err = getBoolValue(b) + + token = newToken(TokenLit, b[:n], BoolType) + } else { + n, err = getValue(b) + token = newToken(TokenLit, b[:n], StringType) + } + + return token, n, err +} + +// IntValue returns an integer value +func (v Value) IntValue() int64 { + return v.integer +} + +// FloatValue returns a float value +func (v Value) FloatValue() float64 { + return v.decimal +} + +// BoolValue returns a bool value +func (v Value) BoolValue() bool { + return v.boolean +} + +func isTrimmable(r rune) bool { + switch r { + case '\n', ' ': + return true + } + return false +} + +// StringValue returns the string value +func (v Value) StringValue() string { + switch v.Type { + case StringType: + return strings.TrimFunc(string(v.raw), isTrimmable) + case QuotedStringType: + // preserve all characters in the quotes + return string(removeEscapedCharacters(v.raw[1 : len(v.raw)-1])) + default: + return strings.TrimFunc(string(v.raw), isTrimmable) + } +} + +func contains(runes []rune, c rune) bool { + for i := 0; i < len(runes); i++ { + if runes[i] == c { + return true + } + } + + return false +} + +func runeCompare(v1 []rune, v2 []rune) bool { + if len(v1) != len(v2) { + return false + } + + for i := 0; i < len(v1); i++ { + if v1[i] != v2[i] { + return false + } + } + + return true +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go new file mode 100644 index 00000000000..e52ac399f17 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go @@ -0,0 +1,30 @@ +package ini + +func isNewline(b []rune) bool { + if len(b) == 0 { + return false + } + + if b[0] == '\n' { + return true + } + + if len(b) < 2 { + return false + } + + return b[0] == '\r' && b[1] == '\n' +} + +func newNewlineToken(b []rune) (Token, int, error) { + i := 1 + if b[0] == '\r' && isNewline(b[1:]) { + i++ + } + + if !isNewline([]rune(b[:i])) { + return emptyToken, 0, NewParseError("invalid new line token") + } + + return newToken(TokenNL, b[:i], NoneType), i, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go new file mode 100644 index 00000000000..a45c0bc5662 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go @@ -0,0 +1,152 @@ +package ini + +import ( + "bytes" + "fmt" + "strconv" +) + +const ( + none = numberFormat(iota) + binary + octal + decimal + hex + exponent +) + +type numberFormat int + +// numberHelper is used to dictate what format a number is in +// and what to do for negative values. Since -1e-4 is a valid +// number, we cannot just simply check for duplicate negatives. +type numberHelper struct { + numberFormat numberFormat + + negative bool + negativeExponent bool +} + +func (b numberHelper) Exists() bool { + return b.numberFormat != none +} + +func (b numberHelper) IsNegative() bool { + return b.negative || b.negativeExponent +} + +func (b *numberHelper) Determine(c rune) error { + if b.Exists() { + return NewParseError(fmt.Sprintf("multiple number formats: 0%v", string(c))) + } + + switch c { + case 'b': + b.numberFormat = binary + case 'o': + b.numberFormat = octal + case 'x': + b.numberFormat = hex + case 'e', 'E': + b.numberFormat = exponent + case '-': + if b.numberFormat != exponent { + b.negative = true + } else { + b.negativeExponent = true + } + case '.': + b.numberFormat = decimal + default: + return NewParseError(fmt.Sprintf("invalid number character: %v", string(c))) + } + + return nil +} + +func (b numberHelper) CorrectByte(c rune) bool { + switch { + case b.numberFormat == binary: + if !isBinaryByte(c) { + return false + } + case b.numberFormat == octal: + if !isOctalByte(c) { + return false + } + case b.numberFormat == hex: + if !isHexByte(c) { + return false + } + case b.numberFormat == decimal: + if !isDigit(c) { + return false + } + case b.numberFormat == exponent: + if !isDigit(c) { + return false + } + case b.negativeExponent: + if !isDigit(c) { + return false + } + case b.negative: + if !isDigit(c) { + return false + } + default: + if !isDigit(c) { + return false + } + } + + return true +} + +func (b numberHelper) Base() int { + switch b.numberFormat { + case binary: + return 2 + case octal: + return 8 + case hex: + return 16 + default: + return 10 + } +} + +func (b numberHelper) String() string { + buf := bytes.Buffer{} + i := 0 + + switch b.numberFormat { + case binary: + i++ + buf.WriteString(strconv.Itoa(i) + ": binary format\n") + case octal: + i++ + buf.WriteString(strconv.Itoa(i) + ": octal format\n") + case hex: + i++ + buf.WriteString(strconv.Itoa(i) + ": hex format\n") + case exponent: + i++ + buf.WriteString(strconv.Itoa(i) + ": exponent format\n") + default: + i++ + buf.WriteString(strconv.Itoa(i) + ": integer format\n") + } + + if b.negative { + i++ + buf.WriteString(strconv.Itoa(i) + ": negative format\n") + } + + if b.negativeExponent { + i++ + buf.WriteString(strconv.Itoa(i) + ": negative exponent format\n") + } + + return buf.String() +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go new file mode 100644 index 00000000000..8a84c7cbe08 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go @@ -0,0 +1,39 @@ +package ini + +import ( + "fmt" +) + +var ( + equalOp = []rune("=") + equalColonOp = []rune(":") +) + +func isOp(b []rune) bool { + if len(b) == 0 { + return false + } + + switch b[0] { + case '=': + return true + case ':': + return true + default: + return false + } +} + +func newOpToken(b []rune) (Token, int, error) { + tok := Token{} + + switch b[0] { + case '=': + tok = newToken(TokenOp, equalOp, NoneType) + case ':': + tok = newToken(TokenOp, equalColonOp, NoneType) + default: + return tok, 0, NewParseError(fmt.Sprintf("unexpected op type, %v", b[0])) + } + return tok, 1, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go new file mode 100644 index 00000000000..45728701931 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go @@ -0,0 +1,43 @@ +package ini + +import "fmt" + +const ( + // ErrCodeParseError is returned when a parsing error + // has occurred. + ErrCodeParseError = "INIParseError" +) + +// ParseError is an error which is returned during any part of +// the parsing process. +type ParseError struct { + msg string +} + +// NewParseError will return a new ParseError where message +// is the description of the error. +func NewParseError(message string) *ParseError { + return &ParseError{ + msg: message, + } +} + +// Code will return the ErrCodeParseError +func (err *ParseError) Code() string { + return ErrCodeParseError +} + +// Message returns the error's message +func (err *ParseError) Message() string { + return err.msg +} + +// OrigError return nothing since there will never be any +// original error. +func (err *ParseError) OrigError() error { + return nil +} + +func (err *ParseError) Error() string { + return fmt.Sprintf("%s: %s", err.Code(), err.Message()) +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go new file mode 100644 index 00000000000..7f01cf7c703 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go @@ -0,0 +1,60 @@ +package ini + +import ( + "bytes" + "fmt" +) + +// ParseStack is a stack that contains a container, the stack portion, +// and the list which is the list of ASTs that have been successfully +// parsed. +type ParseStack struct { + top int + container []AST + list []AST + index int +} + +func newParseStack(sizeContainer, sizeList int) ParseStack { + return ParseStack{ + container: make([]AST, sizeContainer), + list: make([]AST, sizeList), + } +} + +// Pop will return and truncate the last container element. +func (s *ParseStack) Pop() AST { + s.top-- + return s.container[s.top] +} + +// Push will add the new AST to the container +func (s *ParseStack) Push(ast AST) { + s.container[s.top] = ast + s.top++ +} + +// MarkComplete will append the AST to the list of completed statements +func (s *ParseStack) MarkComplete(ast AST) { + s.list[s.index] = ast + s.index++ +} + +// List will return the completed statements +func (s ParseStack) List() []AST { + return s.list[:s.index] +} + +// Len will return the length of the container +func (s *ParseStack) Len() int { + return s.top +} + +func (s ParseStack) String() string { + buf := bytes.Buffer{} + for i, node := range s.list { + buf.WriteString(fmt.Sprintf("%d: %v\n", i+1, node)) + } + + return buf.String() +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go new file mode 100644 index 00000000000..f82095ba259 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go @@ -0,0 +1,41 @@ +package ini + +import ( + "fmt" +) + +var ( + emptyRunes = []rune{} +) + +func isSep(b []rune) bool { + if len(b) == 0 { + return false + } + + switch b[0] { + case '[', ']': + return true + default: + return false + } +} + +var ( + openBrace = []rune("[") + closeBrace = []rune("]") +) + +func newSepToken(b []rune) (Token, int, error) { + tok := Token{} + + switch b[0] { + case '[': + tok = newToken(TokenSep, openBrace, NoneType) + case ']': + tok = newToken(TokenSep, closeBrace, NoneType) + default: + return tok, 0, NewParseError(fmt.Sprintf("unexpected sep type, %v", b[0])) + } + return tok, 1, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go new file mode 100644 index 00000000000..da7a4049cfa --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go @@ -0,0 +1,45 @@ +package ini + +// skipper is used to skip certain blocks of an ini file. +// Currently skipper is used to skip nested blocks of ini +// files. See example below +// +// [ foo ] +// nested = ; this section will be skipped +// a=b +// c=d +// bar=baz ; this will be included +type skipper struct { + shouldSkip bool + TokenSet bool + prevTok Token +} + +func newSkipper() skipper { + return skipper{ + prevTok: emptyToken, + } +} + +func (s *skipper) ShouldSkip(tok Token) bool { + // should skip state will be modified only if previous token was new line (NL); + // and the current token is not WhiteSpace (WS). + if s.shouldSkip && + s.prevTok.Type() == TokenNL && + tok.Type() != TokenWS { + s.Continue() + return false + } + s.prevTok = tok + return s.shouldSkip +} + +func (s *skipper) Skip() { + s.shouldSkip = true +} + +func (s *skipper) Continue() { + s.shouldSkip = false + // empty token is assigned as we return to default state, when should skip is false + s.prevTok = emptyToken +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go new file mode 100644 index 00000000000..18f3fe89317 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go @@ -0,0 +1,35 @@ +package ini + +// Statement is an empty AST mostly used for transitioning states. +func newStatement() AST { + return newAST(ASTKindStatement, AST{}) +} + +// SectionStatement represents a section AST +func newSectionStatement(tok Token) AST { + return newASTWithRootToken(ASTKindSectionStatement, tok) +} + +// ExprStatement represents a completed expression AST +func newExprStatement(ast AST) AST { + return newAST(ASTKindExprStatement, ast) +} + +// CommentStatement represents a comment in the ini definition. +// +// grammar: +// comment -> #comment' | ;comment' +// comment' -> epsilon | value +func newCommentStatement(tok Token) AST { + return newAST(ASTKindCommentStatement, newExpression(tok)) +} + +// CompletedSectionStatement represents a completed section +func newCompletedSectionStatement(ast AST) AST { + return newAST(ASTKindCompletedSectionStatement, ast) +} + +// SkipStatement is used to skip whole statements +func newSkipStatement(ast AST) AST { + return newAST(ASTKindSkipStatement, ast) +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go new file mode 100644 index 00000000000..305999d29be --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go @@ -0,0 +1,284 @@ +package ini + +import ( + "fmt" +) + +// getStringValue will return a quoted string and the amount +// of bytes read +// +// an error will be returned if the string is not properly formatted +func getStringValue(b []rune) (int, error) { + if b[0] != '"' { + return 0, NewParseError("strings must start with '\"'") + } + + endQuote := false + i := 1 + + for ; i < len(b) && !endQuote; i++ { + if escaped := isEscaped(b[:i], b[i]); b[i] == '"' && !escaped { + endQuote = true + break + } else if escaped { + /*c, err := getEscapedByte(b[i]) + if err != nil { + return 0, err + } + + b[i-1] = c + b = append(b[:i], b[i+1:]...) + i--*/ + + continue + } + } + + if !endQuote { + return 0, NewParseError("missing '\"' in string value") + } + + return i + 1, nil +} + +// getBoolValue will return a boolean and the amount +// of bytes read +// +// an error will be returned if the boolean is not of a correct +// value +func getBoolValue(b []rune) (int, error) { + if len(b) < 4 { + return 0, NewParseError("invalid boolean value") + } + + n := 0 + for _, lv := range literalValues { + if len(lv) > len(b) { + continue + } + + if isLitValue(lv, b) { + n = len(lv) + } + } + + if n == 0 { + return 0, NewParseError("invalid boolean value") + } + + return n, nil +} + +// getNumericalValue will return a numerical string, the amount +// of bytes read, and the base of the number +// +// an error will be returned if the number is not of a correct +// value +func getNumericalValue(b []rune) (int, int, error) { + if !isDigit(b[0]) { + return 0, 0, NewParseError("invalid digit value") + } + + i := 0 + helper := numberHelper{} + +loop: + for negativeIndex := 0; i < len(b); i++ { + negativeIndex++ + + if !isDigit(b[i]) { + switch b[i] { + case '-': + if helper.IsNegative() || negativeIndex != 1 { + return 0, 0, NewParseError("parse error '-'") + } + + n := getNegativeNumber(b[i:]) + i += (n - 1) + helper.Determine(b[i]) + continue + case '.': + if err := helper.Determine(b[i]); err != nil { + return 0, 0, err + } + case 'e', 'E': + if err := helper.Determine(b[i]); err != nil { + return 0, 0, err + } + + negativeIndex = 0 + case 'b': + if helper.numberFormat == hex { + break + } + fallthrough + case 'o', 'x': + if i == 0 && b[i] != '0' { + return 0, 0, NewParseError("incorrect base format, expected leading '0'") + } + + if i != 1 { + return 0, 0, NewParseError(fmt.Sprintf("incorrect base format found %s at %d index", string(b[i]), i)) + } + + if err := helper.Determine(b[i]); err != nil { + return 0, 0, err + } + default: + if isWhitespace(b[i]) { + break loop + } + + if isNewline(b[i:]) { + break loop + } + + if !(helper.numberFormat == hex && isHexByte(b[i])) { + if i+2 < len(b) && !isNewline(b[i:i+2]) { + return 0, 0, NewParseError("invalid numerical character") + } else if !isNewline([]rune{b[i]}) { + return 0, 0, NewParseError("invalid numerical character") + } + + break loop + } + } + } + } + + return helper.Base(), i, nil +} + +// isDigit will return whether or not something is an integer +func isDigit(b rune) bool { + return b >= '0' && b <= '9' +} + +func hasExponent(v []rune) bool { + return contains(v, 'e') || contains(v, 'E') +} + +func isBinaryByte(b rune) bool { + switch b { + case '0', '1': + return true + default: + return false + } +} + +func isOctalByte(b rune) bool { + switch b { + case '0', '1', '2', '3', '4', '5', '6', '7': + return true + default: + return false + } +} + +func isHexByte(b rune) bool { + if isDigit(b) { + return true + } + return (b >= 'A' && b <= 'F') || + (b >= 'a' && b <= 'f') +} + +func getValue(b []rune) (int, error) { + i := 0 + + for i < len(b) { + if isNewline(b[i:]) { + break + } + + if isOp(b[i:]) { + break + } + + valid, n, err := isValid(b[i:]) + if err != nil { + return 0, err + } + + if !valid { + break + } + + i += n + } + + return i, nil +} + +// getNegativeNumber will return a negative number from a +// byte slice. This will iterate through all characters until +// a non-digit has been found. +func getNegativeNumber(b []rune) int { + if b[0] != '-' { + return 0 + } + + i := 1 + for ; i < len(b); i++ { + if !isDigit(b[i]) { + return i + } + } + + return i +} + +// isEscaped will return whether or not the character is an escaped +// character. +func isEscaped(value []rune, b rune) bool { + if len(value) == 0 { + return false + } + + switch b { + case '\'': // single quote + case '"': // quote + case 'n': // newline + case 't': // tab + case '\\': // backslash + default: + return false + } + + return value[len(value)-1] == '\\' +} + +func getEscapedByte(b rune) (rune, error) { + switch b { + case '\'': // single quote + return '\'', nil + case '"': // quote + return '"', nil + case 'n': // newline + return '\n', nil + case 't': // table + return '\t', nil + case '\\': // backslash + return '\\', nil + default: + return b, NewParseError(fmt.Sprintf("invalid escaped character %c", b)) + } +} + +func removeEscapedCharacters(b []rune) []rune { + for i := 0; i < len(b); i++ { + if isEscaped(b[:i], b[i]) { + c, err := getEscapedByte(b[i]) + if err != nil { + return b + } + + b[i-1] = c + b = append(b[:i], b[i+1:]...) + i-- + } + } + + return b +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go new file mode 100644 index 00000000000..94841c32443 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go @@ -0,0 +1,166 @@ +package ini + +import ( + "fmt" + "sort" +) + +// Visitor is an interface used by walkers that will +// traverse an array of ASTs. +type Visitor interface { + VisitExpr(AST) error + VisitStatement(AST) error +} + +// DefaultVisitor is used to visit statements and expressions +// and ensure that they are both of the correct format. +// In addition, upon visiting this will build sections and populate +// the Sections field which can be used to retrieve profile +// configuration. +type DefaultVisitor struct { + scope string + Sections Sections +} + +// NewDefaultVisitor return a DefaultVisitor +func NewDefaultVisitor() *DefaultVisitor { + return &DefaultVisitor{ + Sections: Sections{ + container: map[string]Section{}, + }, + } +} + +// VisitExpr visits expressions... +func (v *DefaultVisitor) VisitExpr(expr AST) error { + t := v.Sections.container[v.scope] + if t.values == nil { + t.values = values{} + } + + switch expr.Kind { + case ASTKindExprStatement: + opExpr := expr.GetRoot() + switch opExpr.Kind { + case ASTKindEqualExpr: + children := opExpr.GetChildren() + if len(children) <= 1 { + return NewParseError("unexpected token type") + } + + rhs := children[1] + + if rhs.Root.Type() != TokenLit { + return NewParseError("unexpected token type") + } + + key := EqualExprKey(opExpr) + v, err := newValue(rhs.Root.ValueType, rhs.Root.base, rhs.Root.Raw()) + if err != nil { + return err + } + + t.values[key] = v + default: + return NewParseError(fmt.Sprintf("unsupported expression %v", expr)) + } + default: + return NewParseError(fmt.Sprintf("unsupported expression %v", expr)) + } + + v.Sections.container[v.scope] = t + return nil +} + +// VisitStatement visits statements... +func (v *DefaultVisitor) VisitStatement(stmt AST) error { + switch stmt.Kind { + case ASTKindCompletedSectionStatement: + child := stmt.GetRoot() + if child.Kind != ASTKindSectionStatement { + return NewParseError(fmt.Sprintf("unsupported child statement: %T", child)) + } + + name := string(child.Root.Raw()) + v.Sections.container[name] = Section{} + v.scope = name + default: + return NewParseError(fmt.Sprintf("unsupported statement: %s", stmt.Kind)) + } + + return nil +} + +// Sections is a map of Section structures that represent +// a configuration. +type Sections struct { + container map[string]Section +} + +// GetSection will return section p. If section p does not exist, +// false will be returned in the second parameter. +func (t Sections) GetSection(p string) (Section, bool) { + v, ok := t.container[p] + return v, ok +} + +// values represents a map of union values. +type values map[string]Value + +// List will return a list of all sections that were successfully +// parsed. +func (t Sections) List() []string { + keys := make([]string, len(t.container)) + i := 0 + for k := range t.container { + keys[i] = k + i++ + } + + sort.Strings(keys) + return keys +} + +// Section contains a name and values. This represent +// a sectioned entry in a configuration file. +type Section struct { + Name string + values values +} + +// Has will return whether or not an entry exists in a given section +func (t Section) Has(k string) bool { + _, ok := t.values[k] + return ok +} + +// ValueType will returned what type the union is set to. If +// k was not found, the NoneType will be returned. +func (t Section) ValueType(k string) (ValueType, bool) { + v, ok := t.values[k] + return v.Type, ok +} + +// Bool returns a bool value at k +func (t Section) Bool(k string) bool { + return t.values[k].BoolValue() +} + +// Int returns an integer value at k +func (t Section) Int(k string) int64 { + return t.values[k].IntValue() +} + +// Float64 returns a float value at k +func (t Section) Float64(k string) float64 { + return t.values[k].FloatValue() +} + +// String returns the string value at k +func (t Section) String(k string) string { + _, ok := t.values[k] + if !ok { + return "" + } + return t.values[k].StringValue() +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go new file mode 100644 index 00000000000..99915f7f777 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go @@ -0,0 +1,25 @@ +package ini + +// Walk will traverse the AST using the v, the Visitor. +func Walk(tree []AST, v Visitor) error { + for _, node := range tree { + switch node.Kind { + case ASTKindExpr, + ASTKindExprStatement: + + if err := v.VisitExpr(node); err != nil { + return err + } + case ASTKindStatement, + ASTKindCompletedSectionStatement, + ASTKindNestedSectionStatement, + ASTKindCompletedNestedSectionStatement: + + if err := v.VisitStatement(node); err != nil { + return err + } + } + } + + return nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go b/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go new file mode 100644 index 00000000000..7ffb4ae06ff --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go @@ -0,0 +1,24 @@ +package ini + +import ( + "unicode" +) + +// isWhitespace will return whether or not the character is +// a whitespace character. +// +// Whitespace is defined as a space or tab. +func isWhitespace(c rune) bool { + return unicode.IsSpace(c) && c != '\n' && c != '\r' +} + +func newWSToken(b []rune) (Token, int, error) { + i := 0 + for ; i < len(b); i++ { + if !isWhitespace(b[i]) { + break + } + } + + return newToken(TokenWS, b[:i], NoneType), i, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/s3err/error.go b/vendor/github.com/aws/aws-sdk-go/internal/s3err/error.go new file mode 100644 index 00000000000..0b9b0dfce04 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/s3err/error.go @@ -0,0 +1,57 @@ +package s3err + +import ( + "fmt" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/request" +) + +// RequestFailure provides additional S3 specific metadata for the request +// failure. +type RequestFailure struct { + awserr.RequestFailure + + hostID string +} + +// NewRequestFailure returns a request failure error decordated with S3 +// specific metadata. +func NewRequestFailure(err awserr.RequestFailure, hostID string) *RequestFailure { + return &RequestFailure{RequestFailure: err, hostID: hostID} +} + +func (r RequestFailure) Error() string { + extra := fmt.Sprintf("status code: %d, request id: %s, host id: %s", + r.StatusCode(), r.RequestID(), r.hostID) + return awserr.SprintError(r.Code(), r.Message(), extra, r.OrigErr()) +} +func (r RequestFailure) String() string { + return r.Error() +} + +// HostID returns the HostID request response value. +func (r RequestFailure) HostID() string { + return r.hostID +} + +// RequestFailureWrapperHandler returns a handler to rap an +// awserr.RequestFailure with the S3 request ID 2 from the response. +func RequestFailureWrapperHandler() request.NamedHandler { + return request.NamedHandler{ + Name: "awssdk.s3.errorHandler", + Fn: func(req *request.Request) { + reqErr, ok := req.Error.(awserr.RequestFailure) + if !ok || reqErr == nil { + return + } + + hostID := req.HTTPResponse.Header.Get("X-Amz-Id-2") + if req.Error == nil { + return + } + + req.Error = NewRequestFailure(reqErr, hostID) + }, + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go new file mode 100644 index 00000000000..6c443988bbc --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go @@ -0,0 +1,12 @@ +package sdkio + +const ( + // Byte is 8 bits + Byte int64 = 1 + // KibiByte (KiB) is 1024 Bytes + KibiByte = Byte * 1024 + // MebiByte (MiB) is 1024 KiB + MebiByte = KibiByte * 1024 + // GibiByte (GiB) is 1024 MiB + GibiByte = MebiByte * 1024 +) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go new file mode 100644 index 00000000000..5aa9137e0f9 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go @@ -0,0 +1,10 @@ +// +build !go1.7 + +package sdkio + +// Copy of Go 1.7 io package's Seeker constants. +const ( + SeekStart = 0 // seek relative to the origin of the file + SeekCurrent = 1 // seek relative to the current offset + SeekEnd = 2 // seek relative to the end +) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go new file mode 100644 index 00000000000..e5f005613b7 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go @@ -0,0 +1,12 @@ +// +build go1.7 + +package sdkio + +import "io" + +// Alias for Go 1.7 io package Seeker constants +const ( + SeekStart = io.SeekStart // seek relative to the origin of the file + SeekCurrent = io.SeekCurrent // seek relative to the current offset + SeekEnd = io.SeekEnd // seek relative to the end +) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go new file mode 100644 index 00000000000..44898eed0fd --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go @@ -0,0 +1,15 @@ +// +build go1.10 + +package sdkmath + +import "math" + +// Round returns the nearest integer, rounding half away from zero. +// +// Special cases are: +// Round(±0) = ±0 +// Round(±Inf) = ±Inf +// Round(NaN) = NaN +func Round(x float64) float64 { + return math.Round(x) +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go new file mode 100644 index 00000000000..810ec7f08b0 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go @@ -0,0 +1,56 @@ +// +build !go1.10 + +package sdkmath + +import "math" + +// Copied from the Go standard library's (Go 1.12) math/floor.go for use in +// Go version prior to Go 1.10. +const ( + uvone = 0x3FF0000000000000 + mask = 0x7FF + shift = 64 - 11 - 1 + bias = 1023 + signMask = 1 << 63 + fracMask = 1<= 0.5 { + // return t + Copysign(1, x) + // } + // return t + // } + bits := math.Float64bits(x) + e := uint(bits>>shift) & mask + if e < bias { + // Round abs(x) < 1 including denormals. + bits &= signMask // +-0 + if e == bias-1 { + bits |= uvone // +-1 + } + } else if e < bias+shift { + // Round any abs(x) >= 1 containing a fractional component [0,1). + // + // Numbers with larger exponents are returned unchanged since they + // must be either an integer, infinity, or NaN. + const half = 1 << (shift - 1) + e -= bias + bits += half >> e + bits &^= fracMask >> e + } + return math.Float64frombits(bits) +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go new file mode 100644 index 00000000000..0c9802d8770 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go @@ -0,0 +1,29 @@ +package sdkrand + +import ( + "math/rand" + "sync" + "time" +) + +// lockedSource is a thread-safe implementation of rand.Source +type lockedSource struct { + lk sync.Mutex + src rand.Source +} + +func (r *lockedSource) Int63() (n int64) { + r.lk.Lock() + n = r.src.Int63() + r.lk.Unlock() + return +} + +func (r *lockedSource) Seed(seed int64) { + r.lk.Lock() + r.src.Seed(seed) + r.lk.Unlock() +} + +// SeededRand is a new RNG using a thread safe implementation of rand.Source +var SeededRand = rand.New(&lockedSource{src: rand.NewSource(time.Now().UnixNano())}) diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go new file mode 100644 index 00000000000..f4651da2da5 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go @@ -0,0 +1,11 @@ +// +build go1.6 + +package sdkrand + +import "math/rand" + +// Read provides the stub for math.Rand.Read method support for go version's +// 1.6 and greater. +func Read(r *rand.Rand, p []byte) (int, error) { + return r.Read(p) +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go new file mode 100644 index 00000000000..b1d93a33d48 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go @@ -0,0 +1,24 @@ +// +build !go1.6 + +package sdkrand + +import "math/rand" + +// Read backfills Go 1.6's math.Rand.Reader for Go 1.5 +func Read(r *rand.Rand, p []byte) (n int, err error) { + // Copy of Go standard libraries math package's read function not added to + // standard library until Go 1.6. + var pos int8 + var val int64 + for n = 0; n < len(p); n++ { + if pos == 0 { + val = r.Int63() + pos = 7 + } + p[n] = byte(val) + val >>= 8 + pos-- + } + + return n, err +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go b/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go new file mode 100644 index 00000000000..38ea61afeaa --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go @@ -0,0 +1,23 @@ +package sdkuri + +import ( + "path" + "strings" +) + +// PathJoin will join the elements of the path delimited by the "/" +// character. Similar to path.Join with the exception the trailing "/" +// character is preserved if present. +func PathJoin(elems ...string) string { + if len(elems) == 0 { + return "" + } + + hasTrailing := strings.HasSuffix(elems[len(elems)-1], "/") + str := path.Join(elems...) + if hasTrailing && str != "/" { + str += "/" + } + + return str +} diff --git a/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go b/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go new file mode 100644 index 00000000000..7da8a49ce52 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go @@ -0,0 +1,12 @@ +package shareddefaults + +const ( + // ECSCredsProviderEnvVar is an environmental variable key used to + // determine which path needs to be hit. + ECSCredsProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" +) + +// ECSContainerCredentialsURI is the endpoint to retrieve container +// credentials. This can be overridden to test to ensure the credential process +// is behaving correctly. +var ECSContainerCredentialsURI = "http://169.254.170.2" diff --git a/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go b/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go new file mode 100644 index 00000000000..ebcbc2b40a3 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go @@ -0,0 +1,40 @@ +package shareddefaults + +import ( + "os" + "path/filepath" + "runtime" +) + +// SharedCredentialsFilename returns the SDK's default file path +// for the shared credentials file. +// +// Builds the shared config file path based on the OS's platform. +// +// - Linux/Unix: $HOME/.aws/credentials +// - Windows: %USERPROFILE%\.aws\credentials +func SharedCredentialsFilename() string { + return filepath.Join(UserHomeDir(), ".aws", "credentials") +} + +// SharedConfigFilename returns the SDK's default file path for +// the shared config file. +// +// Builds the shared config file path based on the OS's platform. +// +// - Linux/Unix: $HOME/.aws/config +// - Windows: %USERPROFILE%\.aws\config +func SharedConfigFilename() string { + return filepath.Join(UserHomeDir(), ".aws", "config") +} + +// UserHomeDir returns the home directory for the user the process is +// running under. +func UserHomeDir() string { + if runtime.GOOS == "windows" { // Windows + return os.Getenv("USERPROFILE") + } + + // *nix + return os.Getenv("HOME") +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.go b/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.go deleted file mode 100644 index 2b279e65999..00000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.go +++ /dev/null @@ -1,65 +0,0 @@ -// Package endpoints validates regional endpoints for services. -package endpoints - -//go:generate go run ../model/cli/gen-endpoints/main.go endpoints.json endpoints_map.go -//go:generate gofmt -s -w endpoints_map.go - -import ( - "fmt" - "regexp" - "strings" -) - -// NormalizeEndpoint takes and endpoint and service API information to return a -// normalized endpoint and signing region. If the endpoint is not an empty string -// the service name and region will be used to look up the service's API endpoint. -// If the endpoint is provided the scheme will be added if it is not present. -func NormalizeEndpoint(endpoint, serviceName, region string, disableSSL bool) (normEndpoint, signingRegion string) { - if endpoint == "" { - return EndpointForRegion(serviceName, region, disableSSL) - } - - return AddScheme(endpoint, disableSSL), "" -} - -// EndpointForRegion returns an endpoint and its signing region for a service and region. -// if the service and region pair are not found endpoint and signingRegion will be empty. -func EndpointForRegion(svcName, region string, disableSSL bool) (endpoint, signingRegion string) { - derivedKeys := []string{ - region + "/" + svcName, - region + "/*", - "*/" + svcName, - "*/*", - } - - for _, key := range derivedKeys { - if val, ok := endpointsMap.Endpoints[key]; ok { - ep := val.Endpoint - ep = strings.Replace(ep, "{region}", region, -1) - ep = strings.Replace(ep, "{service}", svcName, -1) - - endpoint = ep - signingRegion = val.SigningRegion - break - } - } - - return AddScheme(endpoint, disableSSL), signingRegion -} - -// Regular expression to determine if the endpoint string is prefixed with a scheme. -var schemeRE = regexp.MustCompile("^([^:]+)://") - -// AddScheme adds the HTTP or HTTPS schemes to a endpoint URL if there is no -// scheme. If disableSSL is true HTTP will be added instead of the default HTTPS. -func AddScheme(endpoint string, disableSSL bool) string { - if endpoint != "" && !schemeRE.MatchString(endpoint) { - scheme := "https" - if disableSSL { - scheme = "http" - } - endpoint = fmt.Sprintf("%s://%s", scheme, endpoint) - } - - return endpoint -} diff --git a/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.json b/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.json deleted file mode 100644 index ea819b1ec35..00000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "version": 2, - "endpoints": { - "*/*": { - "endpoint": "{service}.{region}.amazonaws.com" - }, - "cn-north-1/*": { - "endpoint": "{service}.{region}.amazonaws.com.cn", - "signatureVersion": "v4" - }, - "us-gov-west-1/iam": { - "endpoint": "iam.us-gov.amazonaws.com" - }, - "us-gov-west-1/sts": { - "endpoint": "sts.us-gov-west-1.amazonaws.com" - }, - "us-gov-west-1/s3": { - "endpoint": "s3-{region}.amazonaws.com" - }, - "*/cloudfront": { - "endpoint": "cloudfront.amazonaws.com", - "signingRegion": "us-east-1" - }, - "*/cloudsearchdomain": { - "endpoint": "", - "signingRegion": "us-east-1" - }, - "*/data.iot": { - "endpoint": "", - "signingRegion": "us-east-1" - }, - "*/ec2metadata": { - "endpoint": "http://169.254.169.254/latest", - "signingRegion": "us-east-1" - }, - "*/iam": { - "endpoint": "iam.amazonaws.com", - "signingRegion": "us-east-1" - }, - "*/importexport": { - "endpoint": "importexport.amazonaws.com", - "signingRegion": "us-east-1" - }, - "*/route53": { - "endpoint": "route53.amazonaws.com", - "signingRegion": "us-east-1" - }, - "*/sts": { - "endpoint": "sts.amazonaws.com", - "signingRegion": "us-east-1" - }, - "*/waf": { - "endpoint": "waf.amazonaws.com", - "signingRegion": "us-east-1" - }, - "us-east-1/sdb": { - "endpoint": "sdb.amazonaws.com", - "signingRegion": "us-east-1" - }, - "us-east-1/s3": { - "endpoint": "s3.amazonaws.com" - }, - "us-west-1/s3": { - "endpoint": "s3-{region}.amazonaws.com" - }, - "us-west-2/s3": { - "endpoint": "s3-{region}.amazonaws.com" - }, - "eu-west-1/s3": { - "endpoint": "s3-{region}.amazonaws.com" - }, - "ap-southeast-1/s3": { - "endpoint": "s3-{region}.amazonaws.com" - }, - "ap-southeast-2/s3": { - "endpoint": "s3-{region}.amazonaws.com" - }, - "ap-northeast-1/s3": { - "endpoint": "s3-{region}.amazonaws.com" - }, - "sa-east-1/s3": { - "endpoint": "s3-{region}.amazonaws.com" - }, - "eu-central-1/s3": { - "endpoint": "{service}.{region}.amazonaws.com", - "signatureVersion": "v4" - } - } -} diff --git a/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints_map.go b/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints_map.go deleted file mode 100644 index 3fab91c7f19..00000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/endpoints/endpoints_map.go +++ /dev/null @@ -1,101 +0,0 @@ -package endpoints - -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. - -type endpointStruct struct { - Version int - Endpoints map[string]endpointEntry -} - -type endpointEntry struct { - Endpoint string - SigningRegion string -} - -var endpointsMap = endpointStruct{ - Version: 2, - Endpoints: map[string]endpointEntry{ - "*/*": { - Endpoint: "{service}.{region}.amazonaws.com", - }, - "*/cloudfront": { - Endpoint: "cloudfront.amazonaws.com", - SigningRegion: "us-east-1", - }, - "*/cloudsearchdomain": { - Endpoint: "", - SigningRegion: "us-east-1", - }, - "*/data.iot": { - Endpoint: "", - SigningRegion: "us-east-1", - }, - "*/ec2metadata": { - Endpoint: "http://169.254.169.254/latest", - SigningRegion: "us-east-1", - }, - "*/iam": { - Endpoint: "iam.amazonaws.com", - SigningRegion: "us-east-1", - }, - "*/importexport": { - Endpoint: "importexport.amazonaws.com", - SigningRegion: "us-east-1", - }, - "*/route53": { - Endpoint: "route53.amazonaws.com", - SigningRegion: "us-east-1", - }, - "*/sts": { - Endpoint: "sts.amazonaws.com", - SigningRegion: "us-east-1", - }, - "*/waf": { - Endpoint: "waf.amazonaws.com", - SigningRegion: "us-east-1", - }, - "ap-northeast-1/s3": { - Endpoint: "s3-{region}.amazonaws.com", - }, - "ap-southeast-1/s3": { - Endpoint: "s3-{region}.amazonaws.com", - }, - "ap-southeast-2/s3": { - Endpoint: "s3-{region}.amazonaws.com", - }, - "cn-north-1/*": { - Endpoint: "{service}.{region}.amazonaws.com.cn", - }, - "eu-central-1/s3": { - Endpoint: "{service}.{region}.amazonaws.com", - }, - "eu-west-1/s3": { - Endpoint: "s3-{region}.amazonaws.com", - }, - "sa-east-1/s3": { - Endpoint: "s3-{region}.amazonaws.com", - }, - "us-east-1/s3": { - Endpoint: "s3.amazonaws.com", - }, - "us-east-1/sdb": { - Endpoint: "sdb.amazonaws.com", - SigningRegion: "us-east-1", - }, - "us-gov-west-1/iam": { - Endpoint: "iam.us-gov.amazonaws.com", - }, - "us-gov-west-1/s3": { - Endpoint: "s3-{region}.amazonaws.com", - }, - "us-gov-west-1/sts": { - Endpoint: "sts.us-gov-west-1.amazonaws.com", - }, - "us-west-1/s3": { - Endpoint: "s3-{region}.amazonaws.com", - }, - "us-west-2/s3": { - Endpoint: "s3-{region}.amazonaws.com", - }, - }, -} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/debug.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/debug.go new file mode 100644 index 00000000000..ecc7bf82fa2 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/debug.go @@ -0,0 +1,144 @@ +package eventstream + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "strconv" +) + +type decodedMessage struct { + rawMessage + Headers decodedHeaders `json:"headers"` +} +type jsonMessage struct { + Length json.Number `json:"total_length"` + HeadersLen json.Number `json:"headers_length"` + PreludeCRC json.Number `json:"prelude_crc"` + Headers decodedHeaders `json:"headers"` + Payload []byte `json:"payload"` + CRC json.Number `json:"message_crc"` +} + +func (d *decodedMessage) UnmarshalJSON(b []byte) (err error) { + var jsonMsg jsonMessage + if err = json.Unmarshal(b, &jsonMsg); err != nil { + return err + } + + d.Length, err = numAsUint32(jsonMsg.Length) + if err != nil { + return err + } + d.HeadersLen, err = numAsUint32(jsonMsg.HeadersLen) + if err != nil { + return err + } + d.PreludeCRC, err = numAsUint32(jsonMsg.PreludeCRC) + if err != nil { + return err + } + d.Headers = jsonMsg.Headers + d.Payload = jsonMsg.Payload + d.CRC, err = numAsUint32(jsonMsg.CRC) + if err != nil { + return err + } + + return nil +} + +func (d *decodedMessage) MarshalJSON() ([]byte, error) { + jsonMsg := jsonMessage{ + Length: json.Number(strconv.Itoa(int(d.Length))), + HeadersLen: json.Number(strconv.Itoa(int(d.HeadersLen))), + PreludeCRC: json.Number(strconv.Itoa(int(d.PreludeCRC))), + Headers: d.Headers, + Payload: d.Payload, + CRC: json.Number(strconv.Itoa(int(d.CRC))), + } + + return json.Marshal(jsonMsg) +} + +func numAsUint32(n json.Number) (uint32, error) { + v, err := n.Int64() + if err != nil { + return 0, fmt.Errorf("failed to get int64 json number, %v", err) + } + + return uint32(v), nil +} + +func (d decodedMessage) Message() Message { + return Message{ + Headers: Headers(d.Headers), + Payload: d.Payload, + } +} + +type decodedHeaders Headers + +func (hs *decodedHeaders) UnmarshalJSON(b []byte) error { + var jsonHeaders []struct { + Name string `json:"name"` + Type valueType `json:"type"` + Value interface{} `json:"value"` + } + + decoder := json.NewDecoder(bytes.NewReader(b)) + decoder.UseNumber() + if err := decoder.Decode(&jsonHeaders); err != nil { + return err + } + + var headers Headers + for _, h := range jsonHeaders { + value, err := valueFromType(h.Type, h.Value) + if err != nil { + return err + } + headers.Set(h.Name, value) + } + (*hs) = decodedHeaders(headers) + + return nil +} + +func valueFromType(typ valueType, val interface{}) (Value, error) { + switch typ { + case trueValueType: + return BoolValue(true), nil + case falseValueType: + return BoolValue(false), nil + case int8ValueType: + v, err := val.(json.Number).Int64() + return Int8Value(int8(v)), err + case int16ValueType: + v, err := val.(json.Number).Int64() + return Int16Value(int16(v)), err + case int32ValueType: + v, err := val.(json.Number).Int64() + return Int32Value(int32(v)), err + case int64ValueType: + v, err := val.(json.Number).Int64() + return Int64Value(v), err + case bytesValueType: + v, err := base64.StdEncoding.DecodeString(val.(string)) + return BytesValue(v), err + case stringValueType: + v, err := base64.StdEncoding.DecodeString(val.(string)) + return StringValue(string(v)), err + case timestampValueType: + v, err := val.(json.Number).Int64() + return TimestampValue(timeFromEpochMilli(v)), err + case uuidValueType: + v, err := base64.StdEncoding.DecodeString(val.(string)) + var tv UUIDValue + copy(tv[:], v) + return tv, err + default: + panic(fmt.Sprintf("unknown type, %s, %T", typ.String(), val)) + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/decode.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/decode.go new file mode 100644 index 00000000000..4b972b2d666 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/decode.go @@ -0,0 +1,199 @@ +package eventstream + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "encoding/json" + "fmt" + "hash" + "hash/crc32" + "io" + + "github.com/aws/aws-sdk-go/aws" +) + +// Decoder provides decoding of an Event Stream messages. +type Decoder struct { + r io.Reader + logger aws.Logger +} + +// NewDecoder initializes and returns a Decoder for decoding event +// stream messages from the reader provided. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{ + r: r, + } +} + +// Decode attempts to decode a single message from the event stream reader. +// Will return the event stream message, or error if Decode fails to read +// the message from the stream. +func (d *Decoder) Decode(payloadBuf []byte) (m Message, err error) { + reader := d.r + if d.logger != nil { + debugMsgBuf := bytes.NewBuffer(nil) + reader = io.TeeReader(reader, debugMsgBuf) + defer func() { + logMessageDecode(d.logger, debugMsgBuf, m, err) + }() + } + + crc := crc32.New(crc32IEEETable) + hashReader := io.TeeReader(reader, crc) + + prelude, err := decodePrelude(hashReader, crc) + if err != nil { + return Message{}, err + } + + if prelude.HeadersLen > 0 { + lr := io.LimitReader(hashReader, int64(prelude.HeadersLen)) + m.Headers, err = decodeHeaders(lr) + if err != nil { + return Message{}, err + } + } + + if payloadLen := prelude.PayloadLen(); payloadLen > 0 { + buf, err := decodePayload(payloadBuf, io.LimitReader(hashReader, int64(payloadLen))) + if err != nil { + return Message{}, err + } + m.Payload = buf + } + + msgCRC := crc.Sum32() + if err := validateCRC(reader, msgCRC); err != nil { + return Message{}, err + } + + return m, nil +} + +// UseLogger specifies the Logger that that the decoder should use to log the +// message decode to. +func (d *Decoder) UseLogger(logger aws.Logger) { + d.logger = logger +} + +func logMessageDecode(logger aws.Logger, msgBuf *bytes.Buffer, msg Message, decodeErr error) { + w := bytes.NewBuffer(nil) + defer func() { logger.Log(w.String()) }() + + fmt.Fprintf(w, "Raw message:\n%s\n", + hex.Dump(msgBuf.Bytes())) + + if decodeErr != nil { + fmt.Fprintf(w, "Decode error: %v\n", decodeErr) + return + } + + rawMsg, err := msg.rawMessage() + if err != nil { + fmt.Fprintf(w, "failed to create raw message, %v\n", err) + return + } + + decodedMsg := decodedMessage{ + rawMessage: rawMsg, + Headers: decodedHeaders(msg.Headers), + } + + fmt.Fprintf(w, "Decoded message:\n") + encoder := json.NewEncoder(w) + if err := encoder.Encode(decodedMsg); err != nil { + fmt.Fprintf(w, "failed to generate decoded message, %v\n", err) + } +} + +func decodePrelude(r io.Reader, crc hash.Hash32) (messagePrelude, error) { + var p messagePrelude + + var err error + p.Length, err = decodeUint32(r) + if err != nil { + return messagePrelude{}, err + } + + p.HeadersLen, err = decodeUint32(r) + if err != nil { + return messagePrelude{}, err + } + + if err := p.ValidateLens(); err != nil { + return messagePrelude{}, err + } + + preludeCRC := crc.Sum32() + if err := validateCRC(r, preludeCRC); err != nil { + return messagePrelude{}, err + } + + p.PreludeCRC = preludeCRC + + return p, nil +} + +func decodePayload(buf []byte, r io.Reader) ([]byte, error) { + w := bytes.NewBuffer(buf[0:0]) + + _, err := io.Copy(w, r) + return w.Bytes(), err +} + +func decodeUint8(r io.Reader) (uint8, error) { + type byteReader interface { + ReadByte() (byte, error) + } + + if br, ok := r.(byteReader); ok { + v, err := br.ReadByte() + return uint8(v), err + } + + var b [1]byte + _, err := io.ReadFull(r, b[:]) + return uint8(b[0]), err +} +func decodeUint16(r io.Reader) (uint16, error) { + var b [2]byte + bs := b[:] + _, err := io.ReadFull(r, bs) + if err != nil { + return 0, err + } + return binary.BigEndian.Uint16(bs), nil +} +func decodeUint32(r io.Reader) (uint32, error) { + var b [4]byte + bs := b[:] + _, err := io.ReadFull(r, bs) + if err != nil { + return 0, err + } + return binary.BigEndian.Uint32(bs), nil +} +func decodeUint64(r io.Reader) (uint64, error) { + var b [8]byte + bs := b[:] + _, err := io.ReadFull(r, bs) + if err != nil { + return 0, err + } + return binary.BigEndian.Uint64(bs), nil +} + +func validateCRC(r io.Reader, expect uint32) error { + msgCRC, err := decodeUint32(r) + if err != nil { + return err + } + + if msgCRC != expect { + return ChecksumError{} + } + + return nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/encode.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/encode.go new file mode 100644 index 00000000000..150a60981d8 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/encode.go @@ -0,0 +1,114 @@ +package eventstream + +import ( + "bytes" + "encoding/binary" + "hash" + "hash/crc32" + "io" +) + +// Encoder provides EventStream message encoding. +type Encoder struct { + w io.Writer + + headersBuf *bytes.Buffer +} + +// NewEncoder initializes and returns an Encoder to encode Event Stream +// messages to an io.Writer. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + w: w, + headersBuf: bytes.NewBuffer(nil), + } +} + +// Encode encodes a single EventStream message to the io.Writer the Encoder +// was created with. An error is returned if writing the message fails. +func (e *Encoder) Encode(msg Message) error { + e.headersBuf.Reset() + + err := encodeHeaders(e.headersBuf, msg.Headers) + if err != nil { + return err + } + + crc := crc32.New(crc32IEEETable) + hashWriter := io.MultiWriter(e.w, crc) + + headersLen := uint32(e.headersBuf.Len()) + payloadLen := uint32(len(msg.Payload)) + + if err := encodePrelude(hashWriter, crc, headersLen, payloadLen); err != nil { + return err + } + + if headersLen > 0 { + if _, err := io.Copy(hashWriter, e.headersBuf); err != nil { + return err + } + } + + if payloadLen > 0 { + if _, err := hashWriter.Write(msg.Payload); err != nil { + return err + } + } + + msgCRC := crc.Sum32() + return binary.Write(e.w, binary.BigEndian, msgCRC) +} + +func encodePrelude(w io.Writer, crc hash.Hash32, headersLen, payloadLen uint32) error { + p := messagePrelude{ + Length: minMsgLen + headersLen + payloadLen, + HeadersLen: headersLen, + } + if err := p.ValidateLens(); err != nil { + return err + } + + err := binaryWriteFields(w, binary.BigEndian, + p.Length, + p.HeadersLen, + ) + if err != nil { + return err + } + + p.PreludeCRC = crc.Sum32() + err = binary.Write(w, binary.BigEndian, p.PreludeCRC) + if err != nil { + return err + } + + return nil +} + +func encodeHeaders(w io.Writer, headers Headers) error { + for _, h := range headers { + hn := headerName{ + Len: uint8(len(h.Name)), + } + copy(hn.Name[:hn.Len], h.Name) + if err := hn.encode(w); err != nil { + return err + } + + if err := h.Value.encode(w); err != nil { + return err + } + } + + return nil +} + +func binaryWriteFields(w io.Writer, order binary.ByteOrder, vs ...interface{}) error { + for _, v := range vs { + if err := binary.Write(w, order, v); err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/error.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/error.go new file mode 100644 index 00000000000..5481ef30796 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/error.go @@ -0,0 +1,23 @@ +package eventstream + +import "fmt" + +// LengthError provides the error for items being larger than a maximum length. +type LengthError struct { + Part string + Want int + Have int + Value interface{} +} + +func (e LengthError) Error() string { + return fmt.Sprintf("%s length invalid, %d/%d, %v", + e.Part, e.Want, e.Have, e.Value) +} + +// ChecksumError provides the error for message checksum invalidation errors. +type ChecksumError struct{} + +func (e ChecksumError) Error() string { + return "message checksum mismatch" +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go new file mode 100644 index 00000000000..97937c8e598 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go @@ -0,0 +1,196 @@ +package eventstreamapi + +import ( + "fmt" + "io" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/private/protocol" + "github.com/aws/aws-sdk-go/private/protocol/eventstream" +) + +// Unmarshaler provides the interface for unmarshaling a EventStream +// message into a SDK type. +type Unmarshaler interface { + UnmarshalEvent(protocol.PayloadUnmarshaler, eventstream.Message) error +} + +// EventStream headers with specific meaning to async API functionality. +const ( + MessageTypeHeader = `:message-type` // Identifies type of message. + EventMessageType = `event` + ErrorMessageType = `error` + ExceptionMessageType = `exception` + + // Message Events + EventTypeHeader = `:event-type` // Identifies message event type e.g. "Stats". + + // Message Error + ErrorCodeHeader = `:error-code` + ErrorMessageHeader = `:error-message` + + // Message Exception + ExceptionTypeHeader = `:exception-type` +) + +// EventReader provides reading from the EventStream of an reader. +type EventReader struct { + reader io.ReadCloser + decoder *eventstream.Decoder + + unmarshalerForEventType func(string) (Unmarshaler, error) + payloadUnmarshaler protocol.PayloadUnmarshaler + + payloadBuf []byte +} + +// NewEventReader returns a EventReader built from the reader and unmarshaler +// provided. Use ReadStream method to start reading from the EventStream. +func NewEventReader( + reader io.ReadCloser, + payloadUnmarshaler protocol.PayloadUnmarshaler, + unmarshalerForEventType func(string) (Unmarshaler, error), +) *EventReader { + return &EventReader{ + reader: reader, + decoder: eventstream.NewDecoder(reader), + payloadUnmarshaler: payloadUnmarshaler, + unmarshalerForEventType: unmarshalerForEventType, + payloadBuf: make([]byte, 10*1024), + } +} + +// UseLogger instructs the EventReader to use the logger and log level +// specified. +func (r *EventReader) UseLogger(logger aws.Logger, logLevel aws.LogLevelType) { + if logger != nil && logLevel.Matches(aws.LogDebugWithEventStreamBody) { + r.decoder.UseLogger(logger) + } +} + +// ReadEvent attempts to read a message from the EventStream and return the +// unmarshaled event value that the message is for. +// +// For EventStream API errors check if the returned error satisfies the +// awserr.Error interface to get the error's Code and Message components. +// +// EventUnmarshalers called with EventStream messages must take copies of the +// message's Payload. The payload will is reused between events read. +func (r *EventReader) ReadEvent() (event interface{}, err error) { + msg, err := r.decoder.Decode(r.payloadBuf) + if err != nil { + return nil, err + } + defer func() { + // Reclaim payload buffer for next message read. + r.payloadBuf = msg.Payload[0:0] + }() + + typ, err := GetHeaderString(msg, MessageTypeHeader) + if err != nil { + return nil, err + } + + switch typ { + case EventMessageType: + return r.unmarshalEventMessage(msg) + case ExceptionMessageType: + err = r.unmarshalEventException(msg) + return nil, err + case ErrorMessageType: + return nil, r.unmarshalErrorMessage(msg) + default: + return nil, fmt.Errorf("unknown eventstream message type, %v", typ) + } +} + +func (r *EventReader) unmarshalEventMessage( + msg eventstream.Message, +) (event interface{}, err error) { + eventType, err := GetHeaderString(msg, EventTypeHeader) + if err != nil { + return nil, err + } + + ev, err := r.unmarshalerForEventType(eventType) + if err != nil { + return nil, err + } + + err = ev.UnmarshalEvent(r.payloadUnmarshaler, msg) + if err != nil { + return nil, err + } + + return ev, nil +} + +func (r *EventReader) unmarshalEventException( + msg eventstream.Message, +) (err error) { + eventType, err := GetHeaderString(msg, ExceptionTypeHeader) + if err != nil { + return err + } + + ev, err := r.unmarshalerForEventType(eventType) + if err != nil { + return err + } + + err = ev.UnmarshalEvent(r.payloadUnmarshaler, msg) + if err != nil { + return err + } + + var ok bool + err, ok = ev.(error) + if !ok { + err = messageError{ + code: "SerializationError", + msg: fmt.Sprintf( + "event stream exception %s mapped to non-error %T, %v", + eventType, ev, ev, + ), + } + } + + return err +} + +func (r *EventReader) unmarshalErrorMessage(msg eventstream.Message) (err error) { + var msgErr messageError + + msgErr.code, err = GetHeaderString(msg, ErrorCodeHeader) + if err != nil { + return err + } + + msgErr.msg, err = GetHeaderString(msg, ErrorMessageHeader) + if err != nil { + return err + } + + return msgErr +} + +// Close closes the EventReader's EventStream reader. +func (r *EventReader) Close() error { + return r.reader.Close() +} + +// GetHeaderString returns the value of the header as a string. If the header +// is not set or the value is not a string an error will be returned. +func GetHeaderString(msg eventstream.Message, headerName string) (string, error) { + headerVal := msg.Headers.Get(headerName) + if headerVal == nil { + return "", fmt.Errorf("error header %s not present", headerName) + } + + v, ok := headerVal.Get().(string) + if !ok { + return "", fmt.Errorf("error header value is not a string, %T", headerVal) + } + + return v, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/error.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/error.go new file mode 100644 index 00000000000..5ea5a988b63 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/error.go @@ -0,0 +1,24 @@ +package eventstreamapi + +import "fmt" + +type messageError struct { + code string + msg string +} + +func (e messageError) Code() string { + return e.code +} + +func (e messageError) Message() string { + return e.msg +} + +func (e messageError) Error() string { + return fmt.Sprintf("%s: %s", e.code, e.msg) +} + +func (e messageError) OrigErr() error { + return nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header.go new file mode 100644 index 00000000000..3b44dde2f32 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header.go @@ -0,0 +1,166 @@ +package eventstream + +import ( + "encoding/binary" + "fmt" + "io" +) + +// Headers are a collection of EventStream header values. +type Headers []Header + +// Header is a single EventStream Key Value header pair. +type Header struct { + Name string + Value Value +} + +// Set associates the name with a value. If the header name already exists in +// the Headers the value will be replaced with the new one. +func (hs *Headers) Set(name string, value Value) { + var i int + for ; i < len(*hs); i++ { + if (*hs)[i].Name == name { + (*hs)[i].Value = value + return + } + } + + *hs = append(*hs, Header{ + Name: name, Value: value, + }) +} + +// Get returns the Value associated with the header. Nil is returned if the +// value does not exist. +func (hs Headers) Get(name string) Value { + for i := 0; i < len(hs); i++ { + if h := hs[i]; h.Name == name { + return h.Value + } + } + return nil +} + +// Del deletes the value in the Headers if it exists. +func (hs *Headers) Del(name string) { + for i := 0; i < len(*hs); i++ { + if (*hs)[i].Name == name { + copy((*hs)[i:], (*hs)[i+1:]) + (*hs) = (*hs)[:len(*hs)-1] + } + } +} + +func decodeHeaders(r io.Reader) (Headers, error) { + hs := Headers{} + + for { + name, err := decodeHeaderName(r) + if err != nil { + if err == io.EOF { + // EOF while getting header name means no more headers + break + } + return nil, err + } + + value, err := decodeHeaderValue(r) + if err != nil { + return nil, err + } + + hs.Set(name, value) + } + + return hs, nil +} + +func decodeHeaderName(r io.Reader) (string, error) { + var n headerName + + var err error + n.Len, err = decodeUint8(r) + if err != nil { + return "", err + } + + name := n.Name[:n.Len] + if _, err := io.ReadFull(r, name); err != nil { + return "", err + } + + return string(name), nil +} + +func decodeHeaderValue(r io.Reader) (Value, error) { + var raw rawValue + + typ, err := decodeUint8(r) + if err != nil { + return nil, err + } + raw.Type = valueType(typ) + + var v Value + + switch raw.Type { + case trueValueType: + v = BoolValue(true) + case falseValueType: + v = BoolValue(false) + case int8ValueType: + var tv Int8Value + err = tv.decode(r) + v = tv + case int16ValueType: + var tv Int16Value + err = tv.decode(r) + v = tv + case int32ValueType: + var tv Int32Value + err = tv.decode(r) + v = tv + case int64ValueType: + var tv Int64Value + err = tv.decode(r) + v = tv + case bytesValueType: + var tv BytesValue + err = tv.decode(r) + v = tv + case stringValueType: + var tv StringValue + err = tv.decode(r) + v = tv + case timestampValueType: + var tv TimestampValue + err = tv.decode(r) + v = tv + case uuidValueType: + var tv UUIDValue + err = tv.decode(r) + v = tv + default: + panic(fmt.Sprintf("unknown value type %d", raw.Type)) + } + + // Error could be EOF, let caller deal with it + return v, err +} + +const maxHeaderNameLen = 255 + +type headerName struct { + Len uint8 + Name [maxHeaderNameLen]byte +} + +func (v headerName) encode(w io.Writer) error { + if err := binary.Write(w, binary.BigEndian, v.Len); err != nil { + return err + } + + _, err := w.Write(v.Name[:v.Len]) + return err +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go new file mode 100644 index 00000000000..e3fc0766a9e --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go @@ -0,0 +1,501 @@ +package eventstream + +import ( + "encoding/base64" + "encoding/binary" + "fmt" + "io" + "strconv" + "time" +) + +const maxHeaderValueLen = 1<<15 - 1 // 2^15-1 or 32KB - 1 + +// valueType is the EventStream header value type. +type valueType uint8 + +// Header value types +const ( + trueValueType valueType = iota + falseValueType + int8ValueType // Byte + int16ValueType // Short + int32ValueType // Integer + int64ValueType // Long + bytesValueType + stringValueType + timestampValueType + uuidValueType +) + +func (t valueType) String() string { + switch t { + case trueValueType: + return "bool" + case falseValueType: + return "bool" + case int8ValueType: + return "int8" + case int16ValueType: + return "int16" + case int32ValueType: + return "int32" + case int64ValueType: + return "int64" + case bytesValueType: + return "byte_array" + case stringValueType: + return "string" + case timestampValueType: + return "timestamp" + case uuidValueType: + return "uuid" + default: + return fmt.Sprintf("unknown value type %d", uint8(t)) + } +} + +type rawValue struct { + Type valueType + Len uint16 // Only set for variable length slices + Value []byte // byte representation of value, BigEndian encoding. +} + +func (r rawValue) encodeScalar(w io.Writer, v interface{}) error { + return binaryWriteFields(w, binary.BigEndian, + r.Type, + v, + ) +} + +func (r rawValue) encodeFixedSlice(w io.Writer, v []byte) error { + binary.Write(w, binary.BigEndian, r.Type) + + _, err := w.Write(v) + return err +} + +func (r rawValue) encodeBytes(w io.Writer, v []byte) error { + if len(v) > maxHeaderValueLen { + return LengthError{ + Part: "header value", + Want: maxHeaderValueLen, Have: len(v), + Value: v, + } + } + r.Len = uint16(len(v)) + + err := binaryWriteFields(w, binary.BigEndian, + r.Type, + r.Len, + ) + if err != nil { + return err + } + + _, err = w.Write(v) + return err +} + +func (r rawValue) encodeString(w io.Writer, v string) error { + if len(v) > maxHeaderValueLen { + return LengthError{ + Part: "header value", + Want: maxHeaderValueLen, Have: len(v), + Value: v, + } + } + r.Len = uint16(len(v)) + + type stringWriter interface { + WriteString(string) (int, error) + } + + err := binaryWriteFields(w, binary.BigEndian, + r.Type, + r.Len, + ) + if err != nil { + return err + } + + if sw, ok := w.(stringWriter); ok { + _, err = sw.WriteString(v) + } else { + _, err = w.Write([]byte(v)) + } + + return err +} + +func decodeFixedBytesValue(r io.Reader, buf []byte) error { + _, err := io.ReadFull(r, buf) + return err +} + +func decodeBytesValue(r io.Reader) ([]byte, error) { + var raw rawValue + var err error + raw.Len, err = decodeUint16(r) + if err != nil { + return nil, err + } + + buf := make([]byte, raw.Len) + _, err = io.ReadFull(r, buf) + if err != nil { + return nil, err + } + + return buf, nil +} + +func decodeStringValue(r io.Reader) (string, error) { + v, err := decodeBytesValue(r) + return string(v), err +} + +// Value represents the abstract header value. +type Value interface { + Get() interface{} + String() string + valueType() valueType + encode(io.Writer) error +} + +// An BoolValue provides eventstream encoding, and representation +// of a Go bool value. +type BoolValue bool + +// Get returns the underlying type +func (v BoolValue) Get() interface{} { + return bool(v) +} + +// valueType returns the EventStream header value type value. +func (v BoolValue) valueType() valueType { + if v { + return trueValueType + } + return falseValueType +} + +func (v BoolValue) String() string { + return strconv.FormatBool(bool(v)) +} + +// encode encodes the BoolValue into an eventstream binary value +// representation. +func (v BoolValue) encode(w io.Writer) error { + return binary.Write(w, binary.BigEndian, v.valueType()) +} + +// An Int8Value provides eventstream encoding, and representation of a Go +// int8 value. +type Int8Value int8 + +// Get returns the underlying value. +func (v Int8Value) Get() interface{} { + return int8(v) +} + +// valueType returns the EventStream header value type value. +func (Int8Value) valueType() valueType { + return int8ValueType +} + +func (v Int8Value) String() string { + return fmt.Sprintf("0x%02x", int8(v)) +} + +// encode encodes the Int8Value into an eventstream binary value +// representation. +func (v Int8Value) encode(w io.Writer) error { + raw := rawValue{ + Type: v.valueType(), + } + + return raw.encodeScalar(w, v) +} + +func (v *Int8Value) decode(r io.Reader) error { + n, err := decodeUint8(r) + if err != nil { + return err + } + + *v = Int8Value(n) + return nil +} + +// An Int16Value provides eventstream encoding, and representation of a Go +// int16 value. +type Int16Value int16 + +// Get returns the underlying value. +func (v Int16Value) Get() interface{} { + return int16(v) +} + +// valueType returns the EventStream header value type value. +func (Int16Value) valueType() valueType { + return int16ValueType +} + +func (v Int16Value) String() string { + return fmt.Sprintf("0x%04x", int16(v)) +} + +// encode encodes the Int16Value into an eventstream binary value +// representation. +func (v Int16Value) encode(w io.Writer) error { + raw := rawValue{ + Type: v.valueType(), + } + return raw.encodeScalar(w, v) +} + +func (v *Int16Value) decode(r io.Reader) error { + n, err := decodeUint16(r) + if err != nil { + return err + } + + *v = Int16Value(n) + return nil +} + +// An Int32Value provides eventstream encoding, and representation of a Go +// int32 value. +type Int32Value int32 + +// Get returns the underlying value. +func (v Int32Value) Get() interface{} { + return int32(v) +} + +// valueType returns the EventStream header value type value. +func (Int32Value) valueType() valueType { + return int32ValueType +} + +func (v Int32Value) String() string { + return fmt.Sprintf("0x%08x", int32(v)) +} + +// encode encodes the Int32Value into an eventstream binary value +// representation. +func (v Int32Value) encode(w io.Writer) error { + raw := rawValue{ + Type: v.valueType(), + } + return raw.encodeScalar(w, v) +} + +func (v *Int32Value) decode(r io.Reader) error { + n, err := decodeUint32(r) + if err != nil { + return err + } + + *v = Int32Value(n) + return nil +} + +// An Int64Value provides eventstream encoding, and representation of a Go +// int64 value. +type Int64Value int64 + +// Get returns the underlying value. +func (v Int64Value) Get() interface{} { + return int64(v) +} + +// valueType returns the EventStream header value type value. +func (Int64Value) valueType() valueType { + return int64ValueType +} + +func (v Int64Value) String() string { + return fmt.Sprintf("0x%016x", int64(v)) +} + +// encode encodes the Int64Value into an eventstream binary value +// representation. +func (v Int64Value) encode(w io.Writer) error { + raw := rawValue{ + Type: v.valueType(), + } + return raw.encodeScalar(w, v) +} + +func (v *Int64Value) decode(r io.Reader) error { + n, err := decodeUint64(r) + if err != nil { + return err + } + + *v = Int64Value(n) + return nil +} + +// An BytesValue provides eventstream encoding, and representation of a Go +// byte slice. +type BytesValue []byte + +// Get returns the underlying value. +func (v BytesValue) Get() interface{} { + return []byte(v) +} + +// valueType returns the EventStream header value type value. +func (BytesValue) valueType() valueType { + return bytesValueType +} + +func (v BytesValue) String() string { + return base64.StdEncoding.EncodeToString([]byte(v)) +} + +// encode encodes the BytesValue into an eventstream binary value +// representation. +func (v BytesValue) encode(w io.Writer) error { + raw := rawValue{ + Type: v.valueType(), + } + + return raw.encodeBytes(w, []byte(v)) +} + +func (v *BytesValue) decode(r io.Reader) error { + buf, err := decodeBytesValue(r) + if err != nil { + return err + } + + *v = BytesValue(buf) + return nil +} + +// An StringValue provides eventstream encoding, and representation of a Go +// string. +type StringValue string + +// Get returns the underlying value. +func (v StringValue) Get() interface{} { + return string(v) +} + +// valueType returns the EventStream header value type value. +func (StringValue) valueType() valueType { + return stringValueType +} + +func (v StringValue) String() string { + return string(v) +} + +// encode encodes the StringValue into an eventstream binary value +// representation. +func (v StringValue) encode(w io.Writer) error { + raw := rawValue{ + Type: v.valueType(), + } + + return raw.encodeString(w, string(v)) +} + +func (v *StringValue) decode(r io.Reader) error { + s, err := decodeStringValue(r) + if err != nil { + return err + } + + *v = StringValue(s) + return nil +} + +// An TimestampValue provides eventstream encoding, and representation of a Go +// timestamp. +type TimestampValue time.Time + +// Get returns the underlying value. +func (v TimestampValue) Get() interface{} { + return time.Time(v) +} + +// valueType returns the EventStream header value type value. +func (TimestampValue) valueType() valueType { + return timestampValueType +} + +func (v TimestampValue) epochMilli() int64 { + nano := time.Time(v).UnixNano() + msec := nano / int64(time.Millisecond) + return msec +} + +func (v TimestampValue) String() string { + msec := v.epochMilli() + return strconv.FormatInt(msec, 10) +} + +// encode encodes the TimestampValue into an eventstream binary value +// representation. +func (v TimestampValue) encode(w io.Writer) error { + raw := rawValue{ + Type: v.valueType(), + } + + msec := v.epochMilli() + return raw.encodeScalar(w, msec) +} + +func (v *TimestampValue) decode(r io.Reader) error { + n, err := decodeUint64(r) + if err != nil { + return err + } + + *v = TimestampValue(timeFromEpochMilli(int64(n))) + return nil +} + +func timeFromEpochMilli(t int64) time.Time { + secs := t / 1e3 + msec := t % 1e3 + return time.Unix(secs, msec*int64(time.Millisecond)).UTC() +} + +// An UUIDValue provides eventstream encoding, and representation of a UUID +// value. +type UUIDValue [16]byte + +// Get returns the underlying value. +func (v UUIDValue) Get() interface{} { + return v[:] +} + +// valueType returns the EventStream header value type value. +func (UUIDValue) valueType() valueType { + return uuidValueType +} + +func (v UUIDValue) String() string { + return fmt.Sprintf(`%X-%X-%X-%X-%X`, v[0:4], v[4:6], v[6:8], v[8:10], v[10:]) +} + +// encode encodes the UUIDValue into an eventstream binary value +// representation. +func (v UUIDValue) encode(w io.Writer) error { + raw := rawValue{ + Type: v.valueType(), + } + + return raw.encodeFixedSlice(w, v[:]) +} + +func (v *UUIDValue) decode(r io.Reader) error { + tv := (*v)[:] + return decodeFixedBytesValue(r, tv) +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/message.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/message.go new file mode 100644 index 00000000000..2dc012a66e2 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/message.go @@ -0,0 +1,103 @@ +package eventstream + +import ( + "bytes" + "encoding/binary" + "hash/crc32" +) + +const preludeLen = 8 +const preludeCRCLen = 4 +const msgCRCLen = 4 +const minMsgLen = preludeLen + preludeCRCLen + msgCRCLen +const maxPayloadLen = 1024 * 1024 * 16 // 16MB +const maxHeadersLen = 1024 * 128 // 128KB +const maxMsgLen = minMsgLen + maxHeadersLen + maxPayloadLen + +var crc32IEEETable = crc32.MakeTable(crc32.IEEE) + +// A Message provides the eventstream message representation. +type Message struct { + Headers Headers + Payload []byte +} + +func (m *Message) rawMessage() (rawMessage, error) { + var raw rawMessage + + if len(m.Headers) > 0 { + var headers bytes.Buffer + if err := encodeHeaders(&headers, m.Headers); err != nil { + return rawMessage{}, err + } + raw.Headers = headers.Bytes() + raw.HeadersLen = uint32(len(raw.Headers)) + } + + raw.Length = raw.HeadersLen + uint32(len(m.Payload)) + minMsgLen + + hash := crc32.New(crc32IEEETable) + binaryWriteFields(hash, binary.BigEndian, raw.Length, raw.HeadersLen) + raw.PreludeCRC = hash.Sum32() + + binaryWriteFields(hash, binary.BigEndian, raw.PreludeCRC) + + if raw.HeadersLen > 0 { + hash.Write(raw.Headers) + } + + // Read payload bytes and update hash for it as well. + if len(m.Payload) > 0 { + raw.Payload = m.Payload + hash.Write(raw.Payload) + } + + raw.CRC = hash.Sum32() + + return raw, nil +} + +type messagePrelude struct { + Length uint32 + HeadersLen uint32 + PreludeCRC uint32 +} + +func (p messagePrelude) PayloadLen() uint32 { + return p.Length - p.HeadersLen - minMsgLen +} + +func (p messagePrelude) ValidateLens() error { + if p.Length == 0 || p.Length > maxMsgLen { + return LengthError{ + Part: "message prelude", + Want: maxMsgLen, + Have: int(p.Length), + } + } + if p.HeadersLen > maxHeadersLen { + return LengthError{ + Part: "message headers", + Want: maxHeadersLen, + Have: int(p.HeadersLen), + } + } + if payloadLen := p.PayloadLen(); payloadLen > maxPayloadLen { + return LengthError{ + Part: "message payload", + Want: maxPayloadLen, + Have: int(payloadLen), + } + } + + return nil +} + +type rawMessage struct { + messagePrelude + + Headers []byte + Payload []byte + + CRC uint32 +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go new file mode 100644 index 00000000000..d7d42db0a6a --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go @@ -0,0 +1,68 @@ +package protocol + +import ( + "strings" + + "github.com/aws/aws-sdk-go/aws/request" +) + +// ValidateEndpointHostHandler is a request handler that will validate the +// request endpoint's hosts is a valid RFC 3986 host. +var ValidateEndpointHostHandler = request.NamedHandler{ + Name: "awssdk.protocol.ValidateEndpointHostHandler", + Fn: func(r *request.Request) { + err := ValidateEndpointHost(r.Operation.Name, r.HTTPRequest.URL.Host) + if err != nil { + r.Error = err + } + }, +} + +// ValidateEndpointHost validates that the host string passed in is a valid RFC +// 3986 host. Returns error if the host is not valid. +func ValidateEndpointHost(opName, host string) error { + paramErrs := request.ErrInvalidParams{Context: opName} + labels := strings.Split(host, ".") + + for i, label := range labels { + if i == len(labels)-1 && len(label) == 0 { + // Allow trailing dot for FQDN hosts. + continue + } + + if !ValidHostLabel(label) { + paramErrs.Add(request.NewErrParamFormat( + "endpoint host label", "[a-zA-Z0-9-]{1,63}", label)) + } + } + + if len(host) > 255 { + paramErrs.Add(request.NewErrParamMaxLen( + "endpoint host", 255, host, + )) + } + + if paramErrs.Len() > 0 { + return paramErrs + } + return nil +} + +// ValidHostLabel returns if the label is a valid RFC 3986 host label. +func ValidHostLabel(label string) bool { + if l := len(label); l == 0 || l > 63 { + return false + } + for _, r := range label { + switch { + case r >= '0' && r <= '9': + case r >= 'A' && r <= 'Z': + case r >= 'a' && r <= 'z': + case r == '-': + default: + return false + } + } + + return true +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go new file mode 100644 index 00000000000..915b0fcafd7 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go @@ -0,0 +1,54 @@ +package protocol + +import ( + "strings" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" +) + +// HostPrefixHandlerName is the handler name for the host prefix request +// handler. +const HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler" + +// NewHostPrefixHandler constructs a build handler +func NewHostPrefixHandler(prefix string, labelsFn func() map[string]string) request.NamedHandler { + builder := HostPrefixBuilder{ + Prefix: prefix, + LabelsFn: labelsFn, + } + + return request.NamedHandler{ + Name: HostPrefixHandlerName, + Fn: builder.Build, + } +} + +// HostPrefixBuilder provides the request handler to expand and prepend +// the host prefix into the operation's request endpoint host. +type HostPrefixBuilder struct { + Prefix string + LabelsFn func() map[string]string +} + +// Build updates the passed in Request with the HostPrefix template expanded. +func (h HostPrefixBuilder) Build(r *request.Request) { + if aws.BoolValue(r.Config.DisableEndpointHostPrefix) { + return + } + + var labels map[string]string + if h.LabelsFn != nil { + labels = h.LabelsFn() + } + + prefix := h.Prefix + for name, value := range labels { + prefix = strings.Replace(prefix, "{"+name+"}", value, -1) + } + + r.HTTPRequest.URL.Host = prefix + r.HTTPRequest.URL.Host + if len(r.HTTPRequest.Host) > 0 { + r.HTTPRequest.Host = prefix + r.HTTPRequest.Host + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go new file mode 100644 index 00000000000..53831dff984 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go @@ -0,0 +1,75 @@ +package protocol + +import ( + "crypto/rand" + "fmt" + "reflect" +) + +// RandReader is the random reader the protocol package will use to read +// random bytes from. This is exported for testing, and should not be used. +var RandReader = rand.Reader + +const idempotencyTokenFillTag = `idempotencyToken` + +// CanSetIdempotencyToken returns true if the struct field should be +// automatically populated with a Idempotency token. +// +// Only *string and string type fields that are tagged with idempotencyToken +// which are not already set can be auto filled. +func CanSetIdempotencyToken(v reflect.Value, f reflect.StructField) bool { + switch u := v.Interface().(type) { + // To auto fill an Idempotency token the field must be a string, + // tagged for auto fill, and have a zero value. + case *string: + return u == nil && len(f.Tag.Get(idempotencyTokenFillTag)) != 0 + case string: + return len(u) == 0 && len(f.Tag.Get(idempotencyTokenFillTag)) != 0 + } + + return false +} + +// GetIdempotencyToken returns a randomly generated idempotency token. +func GetIdempotencyToken() string { + b := make([]byte, 16) + RandReader.Read(b) + + return UUIDVersion4(b) +} + +// SetIdempotencyToken will set the value provided with a Idempotency Token. +// Given that the value can be set. Will panic if value is not setable. +func SetIdempotencyToken(v reflect.Value) { + if v.Kind() == reflect.Ptr { + if v.IsNil() && v.CanSet() { + v.Set(reflect.New(v.Type().Elem())) + } + v = v.Elem() + } + v = reflect.Indirect(v) + + if !v.CanSet() { + panic(fmt.Sprintf("unable to set idempotnecy token %v", v)) + } + + b := make([]byte, 16) + _, err := rand.Read(b) + if err != nil { + // TODO handle error + return + } + + v.Set(reflect.ValueOf(UUIDVersion4(b))) +} + +// UUIDVersion4 returns a Version 4 random UUID from the byte slice provided +func UUIDVersion4(u []byte) string { + // https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29 + // 13th character is "4" + u[6] = (u[6] | 0x40) & 0x4F + // 17th character is "8", "9", "a", or "b" + u[8] = (u[8] | 0x80) & 0xBF + + return fmt.Sprintf(`%X-%X-%X-%X-%X`, u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go new file mode 100644 index 00000000000..864fb6704b4 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go @@ -0,0 +1,296 @@ +// Package jsonutil provides JSON serialization of AWS requests and responses. +package jsonutil + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "math" + "reflect" + "sort" + "strconv" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/private/protocol" +) + +var timeType = reflect.ValueOf(time.Time{}).Type() +var byteSliceType = reflect.ValueOf([]byte{}).Type() + +// BuildJSON builds a JSON string for a given object v. +func BuildJSON(v interface{}) ([]byte, error) { + var buf bytes.Buffer + + err := buildAny(reflect.ValueOf(v), &buf, "") + return buf.Bytes(), err +} + +func buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + origVal := value + value = reflect.Indirect(value) + if !value.IsValid() { + return nil + } + + vtype := value.Type() + + t := tag.Get("type") + if t == "" { + switch vtype.Kind() { + case reflect.Struct: + // also it can't be a time object + if value.Type() != timeType { + t = "structure" + } + case reflect.Slice: + // also it can't be a byte slice + if _, ok := value.Interface().([]byte); !ok { + t = "list" + } + case reflect.Map: + // cannot be a JSONValue map + if _, ok := value.Interface().(aws.JSONValue); !ok { + t = "map" + } + } + } + + switch t { + case "structure": + if field, ok := vtype.FieldByName("_"); ok { + tag = field.Tag + } + return buildStruct(value, buf, tag) + case "list": + return buildList(value, buf, tag) + case "map": + return buildMap(value, buf, tag) + default: + return buildScalar(origVal, buf, tag) + } +} + +func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + if !value.IsValid() { + return nil + } + + // unwrap payloads + if payload := tag.Get("payload"); payload != "" { + field, _ := value.Type().FieldByName(payload) + tag = field.Tag + value = elemOf(value.FieldByName(payload)) + + if !value.IsValid() { + return nil + } + } + + buf.WriteByte('{') + + t := value.Type() + first := true + for i := 0; i < t.NumField(); i++ { + member := value.Field(i) + + // This allocates the most memory. + // Additionally, we cannot skip nil fields due to + // idempotency auto filling. + field := t.Field(i) + + if field.PkgPath != "" { + continue // ignore unexported fields + } + if field.Tag.Get("json") == "-" { + continue + } + if field.Tag.Get("location") != "" { + continue // ignore non-body elements + } + if field.Tag.Get("ignore") != "" { + continue + } + + if protocol.CanSetIdempotencyToken(member, field) { + token := protocol.GetIdempotencyToken() + member = reflect.ValueOf(&token) + } + + if (member.Kind() == reflect.Ptr || member.Kind() == reflect.Slice || member.Kind() == reflect.Map) && member.IsNil() { + continue // ignore unset fields + } + + if first { + first = false + } else { + buf.WriteByte(',') + } + + // figure out what this field is called + name := field.Name + if locName := field.Tag.Get("locationName"); locName != "" { + name = locName + } + + writeString(name, buf) + buf.WriteString(`:`) + + err := buildAny(member, buf, field.Tag) + if err != nil { + return err + } + + } + + buf.WriteString("}") + + return nil +} + +func buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + buf.WriteString("[") + + for i := 0; i < value.Len(); i++ { + buildAny(value.Index(i), buf, "") + + if i < value.Len()-1 { + buf.WriteString(",") + } + } + + buf.WriteString("]") + + return nil +} + +type sortedValues []reflect.Value + +func (sv sortedValues) Len() int { return len(sv) } +func (sv sortedValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] } +func (sv sortedValues) Less(i, j int) bool { return sv[i].String() < sv[j].String() } + +func buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + buf.WriteString("{") + + sv := sortedValues(value.MapKeys()) + sort.Sort(sv) + + for i, k := range sv { + if i > 0 { + buf.WriteByte(',') + } + + writeString(k.String(), buf) + buf.WriteString(`:`) + + buildAny(value.MapIndex(k), buf, "") + } + + buf.WriteString("}") + + return nil +} + +func buildScalar(v reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + // prevents allocation on the heap. + scratch := [64]byte{} + switch value := reflect.Indirect(v); value.Kind() { + case reflect.String: + writeString(value.String(), buf) + case reflect.Bool: + if value.Bool() { + buf.WriteString("true") + } else { + buf.WriteString("false") + } + case reflect.Int64: + buf.Write(strconv.AppendInt(scratch[:0], value.Int(), 10)) + case reflect.Float64: + f := value.Float() + if math.IsInf(f, 0) || math.IsNaN(f) { + return &json.UnsupportedValueError{Value: v, Str: strconv.FormatFloat(f, 'f', -1, 64)} + } + buf.Write(strconv.AppendFloat(scratch[:0], f, 'f', -1, 64)) + default: + switch converted := value.Interface().(type) { + case time.Time: + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.UnixTimeFormatName + } + + ts := protocol.FormatTime(format, converted) + if format != protocol.UnixTimeFormatName { + ts = `"` + ts + `"` + } + + buf.WriteString(ts) + case []byte: + if !value.IsNil() { + buf.WriteByte('"') + if len(converted) < 1024 { + // for small buffers, using Encode directly is much faster. + dst := make([]byte, base64.StdEncoding.EncodedLen(len(converted))) + base64.StdEncoding.Encode(dst, converted) + buf.Write(dst) + } else { + // for large buffers, avoid unnecessary extra temporary + // buffer space. + enc := base64.NewEncoder(base64.StdEncoding, buf) + enc.Write(converted) + enc.Close() + } + buf.WriteByte('"') + } + case aws.JSONValue: + str, err := protocol.EncodeJSONValue(converted, protocol.QuotedEscape) + if err != nil { + return fmt.Errorf("unable to encode JSONValue, %v", err) + } + buf.WriteString(str) + default: + return fmt.Errorf("unsupported JSON value %v (%s)", value.Interface(), value.Type()) + } + } + return nil +} + +var hex = "0123456789abcdef" + +func writeString(s string, buf *bytes.Buffer) { + buf.WriteByte('"') + for i := 0; i < len(s); i++ { + if s[i] == '"' { + buf.WriteString(`\"`) + } else if s[i] == '\\' { + buf.WriteString(`\\`) + } else if s[i] == '\b' { + buf.WriteString(`\b`) + } else if s[i] == '\f' { + buf.WriteString(`\f`) + } else if s[i] == '\r' { + buf.WriteString(`\r`) + } else if s[i] == '\t' { + buf.WriteString(`\t`) + } else if s[i] == '\n' { + buf.WriteString(`\n`) + } else if s[i] < 32 { + buf.WriteString("\\u00") + buf.WriteByte(hex[s[i]>>4]) + buf.WriteByte(hex[s[i]&0xF]) + } else { + buf.WriteByte(s[i]) + } + } + buf.WriteByte('"') +} + +// Returns the reflection element of a value, if it is a pointer. +func elemOf(value reflect.Value) reflect.Value { + for value.Kind() == reflect.Ptr { + value = value.Elem() + } + return value +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go new file mode 100644 index 00000000000..ea0da79a5e0 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go @@ -0,0 +1,250 @@ +package jsonutil + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "reflect" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/private/protocol" +) + +// UnmarshalJSONError unmarshal's the reader's JSON document into the passed in +// type. The value to unmarshal the json document into must be a pointer to the +// type. +func UnmarshalJSONError(v interface{}, stream io.Reader) error { + var errBuf bytes.Buffer + body := io.TeeReader(stream, &errBuf) + + err := json.NewDecoder(body).Decode(v) + if err != nil { + msg := "failed decoding error message" + if err == io.EOF { + msg = "error message missing" + err = nil + } + return awserr.NewUnmarshalError(err, msg, errBuf.Bytes()) + } + + return nil +} + +// UnmarshalJSON reads a stream and unmarshals the results in object v. +func UnmarshalJSON(v interface{}, stream io.Reader) error { + var out interface{} + + err := json.NewDecoder(stream).Decode(&out) + if err == io.EOF { + return nil + } else if err != nil { + return err + } + + return unmarshalAny(reflect.ValueOf(v), out, "") +} + +func unmarshalAny(value reflect.Value, data interface{}, tag reflect.StructTag) error { + vtype := value.Type() + if vtype.Kind() == reflect.Ptr { + vtype = vtype.Elem() // check kind of actual element type + } + + t := tag.Get("type") + if t == "" { + switch vtype.Kind() { + case reflect.Struct: + // also it can't be a time object + if _, ok := value.Interface().(*time.Time); !ok { + t = "structure" + } + case reflect.Slice: + // also it can't be a byte slice + if _, ok := value.Interface().([]byte); !ok { + t = "list" + } + case reflect.Map: + // cannot be a JSONValue map + if _, ok := value.Interface().(aws.JSONValue); !ok { + t = "map" + } + } + } + + switch t { + case "structure": + if field, ok := vtype.FieldByName("_"); ok { + tag = field.Tag + } + return unmarshalStruct(value, data, tag) + case "list": + return unmarshalList(value, data, tag) + case "map": + return unmarshalMap(value, data, tag) + default: + return unmarshalScalar(value, data, tag) + } +} + +func unmarshalStruct(value reflect.Value, data interface{}, tag reflect.StructTag) error { + if data == nil { + return nil + } + mapData, ok := data.(map[string]interface{}) + if !ok { + return fmt.Errorf("JSON value is not a structure (%#v)", data) + } + + t := value.Type() + if value.Kind() == reflect.Ptr { + if value.IsNil() { // create the structure if it's nil + s := reflect.New(value.Type().Elem()) + value.Set(s) + value = s + } + + value = value.Elem() + t = t.Elem() + } + + // unwrap any payloads + if payload := tag.Get("payload"); payload != "" { + field, _ := t.FieldByName(payload) + return unmarshalAny(value.FieldByName(payload), data, field.Tag) + } + + for i := 0; i < t.NumField(); i++ { + field := t.Field(i) + if field.PkgPath != "" { + continue // ignore unexported fields + } + + // figure out what this field is called + name := field.Name + if locName := field.Tag.Get("locationName"); locName != "" { + name = locName + } + + member := value.FieldByIndex(field.Index) + err := unmarshalAny(member, mapData[name], field.Tag) + if err != nil { + return err + } + } + return nil +} + +func unmarshalList(value reflect.Value, data interface{}, tag reflect.StructTag) error { + if data == nil { + return nil + } + listData, ok := data.([]interface{}) + if !ok { + return fmt.Errorf("JSON value is not a list (%#v)", data) + } + + if value.IsNil() { + l := len(listData) + value.Set(reflect.MakeSlice(value.Type(), l, l)) + } + + for i, c := range listData { + err := unmarshalAny(value.Index(i), c, "") + if err != nil { + return err + } + } + + return nil +} + +func unmarshalMap(value reflect.Value, data interface{}, tag reflect.StructTag) error { + if data == nil { + return nil + } + mapData, ok := data.(map[string]interface{}) + if !ok { + return fmt.Errorf("JSON value is not a map (%#v)", data) + } + + if value.IsNil() { + value.Set(reflect.MakeMap(value.Type())) + } + + for k, v := range mapData { + kvalue := reflect.ValueOf(k) + vvalue := reflect.New(value.Type().Elem()).Elem() + + unmarshalAny(vvalue, v, "") + value.SetMapIndex(kvalue, vvalue) + } + + return nil +} + +func unmarshalScalar(value reflect.Value, data interface{}, tag reflect.StructTag) error { + + switch d := data.(type) { + case nil: + return nil // nothing to do here + case string: + switch value.Interface().(type) { + case *string: + value.Set(reflect.ValueOf(&d)) + case []byte: + b, err := base64.StdEncoding.DecodeString(d) + if err != nil { + return err + } + value.Set(reflect.ValueOf(b)) + case *time.Time: + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.ISO8601TimeFormatName + } + + t, err := protocol.ParseTime(format, d) + if err != nil { + return err + } + value.Set(reflect.ValueOf(&t)) + case aws.JSONValue: + // No need to use escaping as the value is a non-quoted string. + v, err := protocol.DecodeJSONValue(d, protocol.NoEscape) + if err != nil { + return err + } + value.Set(reflect.ValueOf(v)) + default: + return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) + } + case float64: + switch value.Interface().(type) { + case *int64: + di := int64(d) + value.Set(reflect.ValueOf(&di)) + case *float64: + value.Set(reflect.ValueOf(&d)) + case *time.Time: + // Time unmarshaled from a float64 can only be epoch seconds + t := time.Unix(int64(d), 0).UTC() + value.Set(reflect.ValueOf(&t)) + default: + return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) + } + case bool: + switch value.Interface().(type) { + case *bool: + value.Set(reflect.ValueOf(&d)) + default: + return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) + } + default: + return fmt.Errorf("unsupported JSON value (%v)", data) + } + return nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go new file mode 100644 index 00000000000..776d1101843 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go @@ -0,0 +1,76 @@ +package protocol + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "strconv" + + "github.com/aws/aws-sdk-go/aws" +) + +// EscapeMode is the mode that should be use for escaping a value +type EscapeMode uint + +// The modes for escaping a value before it is marshaled, and unmarshaled. +const ( + NoEscape EscapeMode = iota + Base64Escape + QuotedEscape +) + +// EncodeJSONValue marshals the value into a JSON string, and optionally base64 +// encodes the string before returning it. +// +// Will panic if the escape mode is unknown. +func EncodeJSONValue(v aws.JSONValue, escape EscapeMode) (string, error) { + b, err := json.Marshal(v) + if err != nil { + return "", err + } + + switch escape { + case NoEscape: + return string(b), nil + case Base64Escape: + return base64.StdEncoding.EncodeToString(b), nil + case QuotedEscape: + return strconv.Quote(string(b)), nil + } + + panic(fmt.Sprintf("EncodeJSONValue called with unknown EscapeMode, %v", escape)) +} + +// DecodeJSONValue will attempt to decode the string input as a JSONValue. +// Optionally decoding base64 the value first before JSON unmarshaling. +// +// Will panic if the escape mode is unknown. +func DecodeJSONValue(v string, escape EscapeMode) (aws.JSONValue, error) { + var b []byte + var err error + + switch escape { + case NoEscape: + b = []byte(v) + case Base64Escape: + b, err = base64.StdEncoding.DecodeString(v) + case QuotedEscape: + var u string + u, err = strconv.Unquote(v) + b = []byte(u) + default: + panic(fmt.Sprintf("DecodeJSONValue called with unknown EscapeMode, %v", escape)) + } + + if err != nil { + return nil, err + } + + m := aws.JSONValue{} + err = json.Unmarshal(b, &m) + if err != nil { + return nil, err + } + + return m, nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go new file mode 100644 index 00000000000..e21614a1250 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go @@ -0,0 +1,81 @@ +package protocol + +import ( + "io" + "io/ioutil" + "net/http" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/aws/request" +) + +// PayloadUnmarshaler provides the interface for unmarshaling a payload's +// reader into a SDK shape. +type PayloadUnmarshaler interface { + UnmarshalPayload(io.Reader, interface{}) error +} + +// HandlerPayloadUnmarshal implements the PayloadUnmarshaler from a +// HandlerList. This provides the support for unmarshaling a payload reader to +// a shape without needing a SDK request first. +type HandlerPayloadUnmarshal struct { + Unmarshalers request.HandlerList +} + +// UnmarshalPayload unmarshals the io.Reader payload into the SDK shape using +// the Unmarshalers HandlerList provided. Returns an error if unable +// unmarshaling fails. +func (h HandlerPayloadUnmarshal) UnmarshalPayload(r io.Reader, v interface{}) error { + req := &request.Request{ + HTTPRequest: &http.Request{}, + HTTPResponse: &http.Response{ + StatusCode: 200, + Header: http.Header{}, + Body: ioutil.NopCloser(r), + }, + Data: v, + } + + h.Unmarshalers.Run(req) + + return req.Error +} + +// PayloadMarshaler provides the interface for marshaling a SDK shape into and +// io.Writer. +type PayloadMarshaler interface { + MarshalPayload(io.Writer, interface{}) error +} + +// HandlerPayloadMarshal implements the PayloadMarshaler from a HandlerList. +// This provides support for marshaling a SDK shape into an io.Writer without +// needing a SDK request first. +type HandlerPayloadMarshal struct { + Marshalers request.HandlerList +} + +// MarshalPayload marshals the SDK shape into the io.Writer using the +// Marshalers HandlerList provided. Returns an error if unable if marshal +// fails. +func (h HandlerPayloadMarshal) MarshalPayload(w io.Writer, v interface{}) error { + req := request.New( + aws.Config{}, + metadata.ClientInfo{}, + request.Handlers{}, + nil, + &request.Operation{HTTPMethod: "GET"}, + v, + nil, + ) + + h.Marshalers.Run(req) + + if req.Error != nil { + return req.Error + } + + io.Copy(w, req.GetBody()) + + return nil +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go index 2d78c35c241..0cb99eb5796 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go @@ -1,7 +1,7 @@ -// Package query provides serialisation of AWS query requests, and responses. +// Package query provides serialization of AWS query requests, and responses. package query -//go:generate go run ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/query.json build_test.go +//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/query.json build_test.go import ( "net/url" @@ -11,6 +11,9 @@ import ( "github.com/aws/aws-sdk-go/private/protocol/query/queryutil" ) +// BuildHandler is a named request handler for building query protocol requests +var BuildHandler = request.NamedHandler{Name: "awssdk.query.Build", Fn: Build} + // Build builds a request for an AWS Query service. func Build(r *request.Request) { body := url.Values{ @@ -18,11 +21,11 @@ func Build(r *request.Request) { "Version": {r.ClientInfo.APIVersion}, } if err := queryutil.Parse(body, r.Params, false); err != nil { - r.Error = awserr.New("SerializationError", "failed encoding Query request", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed encoding Query request", err) return } - if r.ExpireTime == 0 { + if !r.IsPresigned() { r.HTTPRequest.Method = "POST" r.HTTPRequest.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8") r.SetBufferBody([]byte(body.Encode())) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go index 4afa4cf0eed..75866d01218 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go @@ -9,6 +9,8 @@ import ( "strconv" "strings" "time" + + "github.com/aws/aws-sdk-go/private/protocol" ) // Parse parses an object i and fills a url.Values object. The isEC2 flag @@ -68,14 +70,22 @@ func (q *queryParser) parseStruct(v url.Values, value reflect.Value, prefix stri t := value.Type() for i := 0; i < value.NumField(); i++ { - if c := t.Field(i).Name[0:1]; strings.ToLower(c) == c { + elemValue := elemOf(value.Field(i)) + field := t.Field(i) + + if field.PkgPath != "" { continue // ignore unexported fields } + if field.Tag.Get("ignore") != "" { + continue + } - elemValue := elemOf(value.Field(i)) - field := t.Field(i) - var name string + if protocol.CanSetIdempotencyToken(value.Field(i), field) { + token := protocol.GetIdempotencyToken() + elemValue = reflect.ValueOf(token) + } + var name string if q.isEC2 { name = field.Tag.Get("queryName") } @@ -111,9 +121,17 @@ func (q *queryParser) parseList(v url.Values, value reflect.Value, prefix string return nil } + if _, ok := value.Interface().([]byte); ok { + return q.parseScalar(v, value, prefix, tag) + } + // check for unflattened list member if !q.isEC2 && tag.Get("flattened") == "" { - prefix += ".member" + if listName := tag.Get("locationNameList"); listName == "" { + prefix += ".member" + } else { + prefix += "." + listName + } } for i := 0; i < value.Len(); i++ { @@ -215,7 +233,12 @@ func (q *queryParser) parseScalar(v url.Values, r reflect.Value, name string, ta v.Set(name, strconv.FormatFloat(float64(value), 'f', -1, 32)) case time.Time: const ISO8601UTC = "2006-01-02T15:04:05Z" - v.Set(name, value.UTC().Format(ISO8601UTC)) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.ISO8601TimeFormatName + } + + v.Set(name, protocol.FormatTime(format, value)) default: return fmt.Errorf("unsupported value for param %s: %v (%s)", name, r.Interface(), r.Type().Name()) } diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go index 1fcab1d1a13..f69c1efc93a 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go @@ -1,6 +1,6 @@ package query -//go:generate go run ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/query.json unmarshal_test.go +//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/query.json unmarshal_test.go import ( "encoding/xml" @@ -10,6 +10,12 @@ import ( "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" ) +// UnmarshalHandler is a named request handler for unmarshaling query protocol requests +var UnmarshalHandler = request.NamedHandler{Name: "awssdk.query.Unmarshal", Fn: Unmarshal} + +// UnmarshalMetaHandler is a named request handler for unmarshaling query protocol request metadata +var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.query.UnmarshalMeta", Fn: UnmarshalMeta} + // Unmarshal unmarshals a response for an AWS Query service. func Unmarshal(r *request.Request) { defer r.HTTPResponse.Body.Close() @@ -17,7 +23,11 @@ func Unmarshal(r *request.Request) { decoder := xml.NewDecoder(r.HTTPResponse.Body) err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result") if err != nil { - r.Error = awserr.New("SerializationError", "failed decoding Query response", err) + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, "failed decoding Query response", err), + r.HTTPResponse.StatusCode, + r.RequestID, + ) return } } @@ -25,5 +35,5 @@ func Unmarshal(r *request.Request) { // UnmarshalMeta unmarshals header response values for an AWS Query service. func UnmarshalMeta(r *request.Request) { - // TODO implement unmarshaling of request IDs + r.RequestID = r.HTTPResponse.Header.Get("X-Amzn-Requestid") } diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go index 08609d92088..831b0110c54 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go @@ -2,32 +2,68 @@ package query import ( "encoding/xml" - "io" + "fmt" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" ) +// UnmarshalErrorHandler is a name request handler to unmarshal request errors +var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.query.UnmarshalError", Fn: UnmarshalError} + type xmlErrorResponse struct { - XMLName xml.Name `xml:"ErrorResponse"` - Code string `xml:"Error>Code"` - Message string `xml:"Error>Message"` - RequestID string `xml:"RequestId"` + Code string `xml:"Error>Code"` + Message string `xml:"Error>Message"` + RequestID string `xml:"RequestId"` +} + +type xmlResponseError struct { + xmlErrorResponse +} + +func (e *xmlResponseError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + const svcUnavailableTagName = "ServiceUnavailableException" + const errorResponseTagName = "ErrorResponse" + + switch start.Name.Local { + case svcUnavailableTagName: + e.Code = svcUnavailableTagName + e.Message = "service is unavailable" + return d.Skip() + + case errorResponseTagName: + return d.DecodeElement(&e.xmlErrorResponse, &start) + + default: + return fmt.Errorf("unknown error response tag, %v", start) + } } // UnmarshalError unmarshals an error response for an AWS Query service. func UnmarshalError(r *request.Request) { defer r.HTTPResponse.Body.Close() - resp := &xmlErrorResponse{} - err := xml.NewDecoder(r.HTTPResponse.Body).Decode(resp) - if err != nil && err != io.EOF { - r.Error = awserr.New("SerializationError", "failed to decode query XML error response", err) - } else { + var respErr xmlResponseError + err := xmlutil.UnmarshalXMLError(&respErr, r.HTTPResponse.Body) + if err != nil { r.Error = awserr.NewRequestFailure( - awserr.New(resp.Code, resp.Message, nil), + awserr.New(request.ErrCodeSerialization, + "failed to unmarshal error message", err), r.HTTPResponse.StatusCode, - resp.RequestID, + r.RequestID, ) + return } + + reqID := respErr.RequestID + if len(reqID) == 0 { + reqID = r.RequestID + } + + r.Error = awserr.NewRequestFailure( + awserr.New(respErr.Code, respErr.Message, nil), + r.HTTPResponse.StatusCode, + reqID, + ) } diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go index ed3c2e03955..1301b149d35 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go @@ -14,18 +14,19 @@ import ( "strings" "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol" ) -// RFC822 returns an RFC822 formatted timestamp for AWS protocols -const RFC822 = "Mon, 2 Jan 2006 15:04:05 GMT" - // Whether the byte value can be sent without escaping in AWS URLs var noEscape [256]bool var errValueNotSet = fmt.Errorf("value not set") +var byteSliceType = reflect.TypeOf([]byte{}) + func init() { for i := 0; i < len(noEscape); i++ { // AWS expects every character except these to be escaped @@ -39,18 +40,36 @@ func init() { } } +// BuildHandler is a named request handler for building rest protocol requests +var BuildHandler = request.NamedHandler{Name: "awssdk.rest.Build", Fn: Build} + // Build builds the REST component of a service request. func Build(r *request.Request) { if r.ParamsFilled() { v := reflect.ValueOf(r.Params).Elem() - buildLocationElements(r, v) + buildLocationElements(r, v, false) buildBody(r, v) } } -func buildLocationElements(r *request.Request, v reflect.Value) { +// BuildAsGET builds the REST component of a service request with the ability to hoist +// data from the body. +func BuildAsGET(r *request.Request) { + if r.ParamsFilled() { + v := reflect.ValueOf(r.Params).Elem() + buildLocationElements(r, v, true) + buildBody(r, v) + } +} + +func buildLocationElements(r *request.Request, v reflect.Value, buildGETQuery bool) { query := r.HTTPRequest.URL.Query() + // Setup the raw path to match the base path pattern. This is needed + // so that when the path is mutated a custom escaped version can be + // stored in RawPath that will be used by the Go client. + r.HTTPRequest.URL.RawPath = r.HTTPRequest.URL.Path + for i := 0; i < v.NumField(); i++ { m := v.Field(i) if n := v.Type().Field(i).Name; n[0:1] == strings.ToLower(n[0:1]) { @@ -63,23 +82,42 @@ func buildLocationElements(r *request.Request, v reflect.Value) { if name == "" { name = field.Name } - if m.Kind() == reflect.Ptr { + if kind := m.Kind(); kind == reflect.Ptr { m = m.Elem() + } else if kind == reflect.Interface { + if !m.Elem().IsValid() { + continue + } } if !m.IsValid() { continue } + if field.Tag.Get("ignore") != "" { + continue + } + + // Support the ability to customize values to be marshaled as a + // blob even though they were modeled as a string. Required for S3 + // API operations like SSECustomerKey is modeled as stirng but + // required to be base64 encoded in request. + if field.Tag.Get("marshal-as") == "blob" { + m = m.Convert(byteSliceType) + } var err error switch field.Tag.Get("location") { case "headers": // header maps - err = buildHeaderMap(&r.HTTPRequest.Header, m, field.Tag.Get("locationName")) + err = buildHeaderMap(&r.HTTPRequest.Header, m, field.Tag) case "header": - err = buildHeader(&r.HTTPRequest.Header, m, name) + err = buildHeader(&r.HTTPRequest.Header, m, name, field.Tag) case "uri": - err = buildURI(r.HTTPRequest.URL, m, name) + err = buildURI(r.HTTPRequest.URL, m, name, field.Tag) case "querystring": - err = buildQueryString(query, m, name) + err = buildQueryString(query, m, name, field.Tag) + default: + if buildGETQuery { + err = buildQueryString(query, m, name, field.Tag) + } } r.Error = err } @@ -89,7 +127,9 @@ func buildLocationElements(r *request.Request, v reflect.Value) { } r.HTTPRequest.URL.RawQuery = query.Encode() - updatePath(r.HTTPRequest.URL, r.HTTPRequest.URL.Path) + if !aws.BoolValue(r.Config.DisableRestProtocolURICleaning) { + cleanPath(r.HTTPRequest.URL) + } } func buildBody(r *request.Request, v reflect.Value) { @@ -107,7 +147,7 @@ func buildBody(r *request.Request, v reflect.Value) { case string: r.SetStringBody(reader) default: - r.Error = awserr.New("SerializationError", + r.Error = awserr.New(request.ErrCodeSerialization, "failed to encode REST request", fmt.Errorf("unknown payload type %s", payload.Type())) } @@ -117,51 +157,58 @@ func buildBody(r *request.Request, v reflect.Value) { } } -func buildHeader(header *http.Header, v reflect.Value, name string) error { - str, err := convertType(v) +func buildHeader(header *http.Header, v reflect.Value, name string, tag reflect.StructTag) error { + str, err := convertType(v, tag) if err == errValueNotSet { return nil } else if err != nil { - return awserr.New("SerializationError", "failed to encode REST request", err) + return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) } + name = strings.TrimSpace(name) + str = strings.TrimSpace(str) + header.Add(name, str) return nil } -func buildHeaderMap(header *http.Header, v reflect.Value, prefix string) error { +func buildHeaderMap(header *http.Header, v reflect.Value, tag reflect.StructTag) error { + prefix := tag.Get("locationName") for _, key := range v.MapKeys() { - str, err := convertType(v.MapIndex(key)) + str, err := convertType(v.MapIndex(key), tag) if err == errValueNotSet { continue } else if err != nil { - return awserr.New("SerializationError", "failed to encode REST request", err) + return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) } + keyStr := strings.TrimSpace(key.String()) + str = strings.TrimSpace(str) - header.Add(prefix+key.String(), str) + header.Add(prefix+keyStr, str) } return nil } -func buildURI(u *url.URL, v reflect.Value, name string) error { - value, err := convertType(v) +func buildURI(u *url.URL, v reflect.Value, name string, tag reflect.StructTag) error { + value, err := convertType(v, tag) if err == errValueNotSet { return nil } else if err != nil { - return awserr.New("SerializationError", "failed to encode REST request", err) + return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) } - uri := u.Path - uri = strings.Replace(uri, "{"+name+"}", EscapePath(value, true), -1) - uri = strings.Replace(uri, "{"+name+"+}", EscapePath(value, false), -1) - u.Path = uri + u.Path = strings.Replace(u.Path, "{"+name+"}", value, -1) + u.Path = strings.Replace(u.Path, "{"+name+"+}", value, -1) + + u.RawPath = strings.Replace(u.RawPath, "{"+name+"}", EscapePath(value, true), -1) + u.RawPath = strings.Replace(u.RawPath, "{"+name+"+}", EscapePath(value, false), -1) return nil } -func buildQueryString(query url.Values, v reflect.Value, name string) error { +func buildQueryString(query url.Values, v reflect.Value, name string, tag reflect.StructTag) error { switch value := v.Interface().(type) { case []*string: for _, item := range value { @@ -178,11 +225,11 @@ func buildQueryString(query url.Values, v reflect.Value, name string) error { } } default: - str, err := convertType(v) + str, err := convertType(v, tag) if err == errValueNotSet { return nil } else if err != nil { - return awserr.New("SerializationError", "failed to encode REST request", err) + return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) } query.Set(name, str) } @@ -190,25 +237,17 @@ func buildQueryString(query url.Values, v reflect.Value, name string) error { return nil } -func updatePath(url *url.URL, urlPath string) { - scheme, query := url.Scheme, url.RawQuery +func cleanPath(u *url.URL) { + hasSlash := strings.HasSuffix(u.Path, "/") - hasSlash := strings.HasSuffix(urlPath, "/") + // clean up path, removing duplicate `/` + u.Path = path.Clean(u.Path) + u.RawPath = path.Clean(u.RawPath) - // clean up path - urlPath = path.Clean(urlPath) - if hasSlash && !strings.HasSuffix(urlPath, "/") { - urlPath += "/" + if hasSlash && !strings.HasSuffix(u.Path, "/") { + u.Path += "/" + u.RawPath += "/" } - - // get formatted URL minus scheme so we can build this into Opaque - url.Scheme, url.Path, url.RawQuery = "", "", "" - s := url.String() - url.Scheme = scheme - url.RawQuery = query - - // build opaque URI - url.Opaque = s + urlPath } // EscapePath escapes part of a URL path in Amazon style @@ -219,20 +258,18 @@ func EscapePath(path string, encodeSep bool) string { if noEscape[c] || (c == '/' && !encodeSep) { buf.WriteByte(c) } else { - buf.WriteByte('%') - buf.WriteString(strings.ToUpper(strconv.FormatUint(uint64(c), 16))) + fmt.Fprintf(&buf, "%%%02X", c) } } return buf.String() } -func convertType(v reflect.Value) (string, error) { +func convertType(v reflect.Value, tag reflect.StructTag) (str string, err error) { v = reflect.Indirect(v) if !v.IsValid() { return "", errValueNotSet } - var str string switch value := v.Interface().(type) { case string: str = value @@ -245,9 +282,28 @@ func convertType(v reflect.Value) (string, error) { case float64: str = strconv.FormatFloat(value, 'f', -1, 64) case time.Time: - str = value.UTC().Format(RFC822) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.RFC822TimeFormatName + if tag.Get("location") == "querystring" { + format = protocol.ISO8601TimeFormatName + } + } + str = protocol.FormatTime(format, value) + case aws.JSONValue: + if len(value) == 0 { + return "", errValueNotSet + } + escaping := protocol.NoEscape + if tag.Get("location") == "header" { + escaping = protocol.Base64Escape + } + str, err = protocol.EncodeJSONValue(value, escaping) + if err != nil { + return "", fmt.Errorf("unable to encode JSONValue, %v", err) + } default: - err := fmt.Errorf("Unsupported value for param %v (%s)", v.Interface(), v.Type()) + err := fmt.Errorf("unsupported value for param %v (%s)", v.Interface(), v.Type()) return "", err } return str, nil diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go index 27f47b02c71..74e361e070d 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go @@ -1,8 +1,10 @@ package rest import ( + "bytes" "encoding/base64" "fmt" + "io" "io/ioutil" "net/http" "reflect" @@ -13,8 +15,15 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol" ) +// UnmarshalHandler is a named request handler for unmarshaling rest protocol requests +var UnmarshalHandler = request.NamedHandler{Name: "awssdk.rest.Unmarshal", Fn: Unmarshal} + +// UnmarshalMetaHandler is a named request handler for unmarshaling rest protocol request metadata +var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.rest.UnmarshalMeta", Fn: UnmarshalMeta} + // Unmarshal unmarshals the REST component of a response in a REST service. func Unmarshal(r *request.Request) { if r.DataFilled() { @@ -26,6 +35,10 @@ func Unmarshal(r *request.Request) { // UnmarshalMeta unmarshals the REST metadata of a response in a REST service func UnmarshalMeta(r *request.Request) { r.RequestID = r.HTTPResponse.Header.Get("X-Amzn-Requestid") + if r.RequestID == "" { + // Alternative version of request id in the header + r.RequestID = r.HTTPResponse.Header.Get("X-Amz-Request-Id") + } if r.DataFilled() { v := reflect.Indirect(reflect.ValueOf(r.Data)) unmarshalLocationElements(r, v) @@ -41,28 +54,38 @@ func unmarshalBody(r *request.Request, v reflect.Value) { if payload.IsValid() { switch payload.Interface().(type) { case []byte: + defer r.HTTPResponse.Body.Close() b, err := ioutil.ReadAll(r.HTTPResponse.Body) if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST response", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) } else { payload.Set(reflect.ValueOf(b)) } case *string: + defer r.HTTPResponse.Body.Close() b, err := ioutil.ReadAll(r.HTTPResponse.Body) if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST response", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) } else { str := string(b) payload.Set(reflect.ValueOf(&str)) } default: switch payload.Type().String() { - case "io.ReadSeeker": - payload.Set(reflect.ValueOf(aws.ReadSeekCloser(r.HTTPResponse.Body))) - case "aws.ReadSeekCloser", "io.ReadCloser": + case "io.ReadCloser": payload.Set(reflect.ValueOf(r.HTTPResponse.Body)) + case "io.ReadSeeker": + b, err := ioutil.ReadAll(r.HTTPResponse.Body) + if err != nil { + r.Error = awserr.New(request.ErrCodeSerialization, + "failed to read response body", err) + return + } + payload.Set(reflect.ValueOf(ioutil.NopCloser(bytes.NewReader(b)))) default: - r.Error = awserr.New("SerializationError", + io.Copy(ioutil.Discard, r.HTTPResponse.Body) + defer r.HTTPResponse.Body.Close() + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", fmt.Errorf("unknown payload type %s", payload.Type())) } @@ -90,16 +113,16 @@ func unmarshalLocationElements(r *request.Request, v reflect.Value) { case "statusCode": unmarshalStatusCode(m, r.HTTPResponse.StatusCode) case "header": - err := unmarshalHeader(m, r.HTTPResponse.Header.Get(name)) + err := unmarshalHeader(m, r.HTTPResponse.Header.Get(name), field.Tag) if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST response", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) break } case "headers": prefix := field.Tag.Get("locationName") err := unmarshalHeaderMap(m, r.HTTPResponse.Header, prefix) if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST response", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) break } } @@ -123,6 +146,9 @@ func unmarshalStatusCode(v reflect.Value, statusCode int) { } func unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix string) error { + if len(headers) == 0 { + return nil + } switch r.Interface().(type) { case map[string]*string: // we only support string map value types out := map[string]*string{} @@ -132,14 +158,28 @@ func unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix string) err out[k[len(prefix):]] = &v[0] } } - r.Set(reflect.ValueOf(out)) + if len(out) != 0 { + r.Set(reflect.ValueOf(out)) + } + } return nil } -func unmarshalHeader(v reflect.Value, header string) error { - if !v.IsValid() || (header == "" && v.Elem().Kind() != reflect.String) { - return nil +func unmarshalHeader(v reflect.Value, header string, tag reflect.StructTag) error { + switch tag.Get("type") { + case "jsonvalue": + if len(header) == 0 { + return nil + } + case "blob": + if len(header) == 0 { + return nil + } + default: + if !v.IsValid() || (header == "" && v.Elem().Kind() != reflect.String) { + return nil + } } switch v.Interface().(type) { @@ -150,7 +190,7 @@ func unmarshalHeader(v reflect.Value, header string) error { if err != nil { return err } - v.Set(reflect.ValueOf(&b)) + v.Set(reflect.ValueOf(b)) case *bool: b, err := strconv.ParseBool(header) if err != nil { @@ -170,11 +210,25 @@ func unmarshalHeader(v reflect.Value, header string) error { } v.Set(reflect.ValueOf(&f)) case *time.Time: - t, err := time.Parse(RFC822, header) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.RFC822TimeFormatName + } + t, err := protocol.ParseTime(format, header) if err != nil { return err } v.Set(reflect.ValueOf(&t)) + case aws.JSONValue: + escaping := protocol.NoEscape + if tag.Get("location") == "header" { + escaping = protocol.Base64Escape + } + m, err := protocol.DecodeJSONValue(header, escaping) + if err != nil { + return err + } + v.Set(reflect.ValueOf(m)) default: err := fmt.Errorf("Unsupported value for param %v (%s)", v.Interface(), v.Type()) return err diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go index a6bc0c74c81..07a6187ea62 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go @@ -1,9 +1,9 @@ -// Package restxml provides RESTful XML serialisation of AWS +// Package restxml provides RESTful XML serialization of AWS // requests and responses. package restxml -//go:generate go run ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/rest-xml.json build_test.go -//go:generate go run ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/rest-xml.json unmarshal_test.go +//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/rest-xml.json build_test.go +//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/rest-xml.json unmarshal_test.go import ( "bytes" @@ -16,6 +16,18 @@ import ( "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" ) +// BuildHandler is a named request handler for building restxml protocol requests +var BuildHandler = request.NamedHandler{Name: "awssdk.restxml.Build", Fn: Build} + +// UnmarshalHandler is a named request handler for unmarshaling restxml protocol requests +var UnmarshalHandler = request.NamedHandler{Name: "awssdk.restxml.Unmarshal", Fn: Unmarshal} + +// UnmarshalMetaHandler is a named request handler for unmarshaling restxml protocol request metadata +var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.restxml.UnmarshalMeta", Fn: UnmarshalMeta} + +// UnmarshalErrorHandler is a named request handler for unmarshaling restxml protocol request errors +var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.restxml.UnmarshalError", Fn: UnmarshalError} + // Build builds a request payload for the REST XML protocol. func Build(r *request.Request) { rest.Build(r) @@ -24,7 +36,12 @@ func Build(r *request.Request) { var buf bytes.Buffer err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf)) if err != nil { - r.Error = awserr.New("SerializationError", "failed to encode rest XML request", err) + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, + "failed to encode rest XML request", err), + 0, + r.RequestID, + ) return } r.SetBufferBody(buf.Bytes()) @@ -38,7 +55,12 @@ func Unmarshal(r *request.Request) { decoder := xml.NewDecoder(r.HTTPResponse.Body) err := xmlutil.UnmarshalXML(r.Data, decoder, "") if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST XML response", err) + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, + "failed to decode REST XML response", err), + r.HTTPResponse.StatusCode, + r.RequestID, + ) return } } else { diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go new file mode 100644 index 00000000000..05d4ff51925 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go @@ -0,0 +1,84 @@ +package protocol + +import ( + "math" + "strconv" + "time" + + "github.com/aws/aws-sdk-go/internal/sdkmath" +) + +// Names of time formats supported by the SDK +const ( + RFC822TimeFormatName = "rfc822" + ISO8601TimeFormatName = "iso8601" + UnixTimeFormatName = "unixTimestamp" +) + +// Time formats supported by the SDK +// Output time is intended to not contain decimals +const ( + // RFC 7231#section-7.1.1.1 timetamp format. e.g Tue, 29 Apr 2014 18:30:38 GMT + RFC822TimeFormat = "Mon, 2 Jan 2006 15:04:05 GMT" + + // This format is used for output time without seconds precision + RFC822OutputTimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT" + + // RFC3339 a subset of the ISO8601 timestamp format. e.g 2014-04-29T18:30:38Z + ISO8601TimeFormat = "2006-01-02T15:04:05.999999999Z" + + // This format is used for output time without seconds precision + ISO8601OutputTimeFormat = "2006-01-02T15:04:05Z" +) + +// IsKnownTimestampFormat returns if the timestamp format name +// is know to the SDK's protocols. +func IsKnownTimestampFormat(name string) bool { + switch name { + case RFC822TimeFormatName: + fallthrough + case ISO8601TimeFormatName: + fallthrough + case UnixTimeFormatName: + return true + default: + return false + } +} + +// FormatTime returns a string value of the time. +func FormatTime(name string, t time.Time) string { + t = t.UTC() + + switch name { + case RFC822TimeFormatName: + return t.Format(RFC822OutputTimeFormat) + case ISO8601TimeFormatName: + return t.Format(ISO8601OutputTimeFormat) + case UnixTimeFormatName: + return strconv.FormatInt(t.Unix(), 10) + default: + panic("unknown timestamp format name, " + name) + } +} + +// ParseTime attempts to parse the time given the format. Returns +// the time if it was able to be parsed, and fails otherwise. +func ParseTime(formatName, value string) (time.Time, error) { + switch formatName { + case RFC822TimeFormatName: + return time.Parse(RFC822TimeFormat, value) + case ISO8601TimeFormatName: + return time.Parse(ISO8601TimeFormat, value) + case UnixTimeFormatName: + v, err := strconv.ParseFloat(value, 64) + _, dec := math.Modf(v) + dec = sdkmath.Round(dec*1e3) / 1e3 //Rounds 0.1229999 to 0.123 + if err != nil { + return time.Time{}, err + } + return time.Unix(int64(v), int64(dec*(1e9))), nil + default: + panic("unknown timestamp format name, " + formatName) + } +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go new file mode 100644 index 00000000000..da1a68111db --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go @@ -0,0 +1,21 @@ +package protocol + +import ( + "io" + "io/ioutil" + + "github.com/aws/aws-sdk-go/aws/request" +) + +// UnmarshalDiscardBodyHandler is a named request handler to empty and close a response's body +var UnmarshalDiscardBodyHandler = request.NamedHandler{Name: "awssdk.shared.UnmarshalDiscardBody", Fn: UnmarshalDiscardBody} + +// UnmarshalDiscardBody is a request handler to empty a response's body and closing it. +func UnmarshalDiscardBody(r *request.Request) { + if r.HTTPResponse == nil || r.HTTPResponse.Body == nil { + return + } + + io.Copy(ioutil.Discard, r.HTTPResponse.Body) + r.HTTPResponse.Body.Close() +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go index 0d76dffbd61..cf981fe9513 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go @@ -1,4 +1,4 @@ -// Package xmlutil provides XML serialisation of AWS requests and responses. +// Package xmlutil provides XML serialization of AWS requests and responses. package xmlutil import ( @@ -8,13 +8,18 @@ import ( "reflect" "sort" "strconv" - "strings" "time" + + "github.com/aws/aws-sdk-go/private/protocol" ) -// BuildXML will serialize params into an xml.Encoder. -// Error will be returned if the serialization of any of the params or nested values fails. +// BuildXML will serialize params into an xml.Encoder. Error will be returned +// if the serialization of any of the params or nested values fails. func BuildXML(params interface{}, e *xml.Encoder) error { + return buildXML(params, e, false) +} + +func buildXML(params interface{}, e *xml.Encoder, sorted bool) error { b := xmlBuilder{encoder: e, namespaces: map[string]string{}} root := NewXMLElement(xml.Name{}) if err := b.buildValue(reflect.ValueOf(params), root, ""); err != nil { @@ -22,7 +27,7 @@ func BuildXML(params interface{}, e *xml.Encoder) error { } for _, c := range root.Children { for _, v := range c { - return StructToXML(e, v, false) + return StructToXML(e, v, sorted) } } return nil @@ -82,15 +87,13 @@ func (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode, tag refle } } -// buildStruct adds a struct and its fields to the current XMLNode. All fields any any nested +// buildStruct adds a struct and its fields to the current XMLNode. All fields and any nested // types are converted to XMLNodes also. func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { if !value.IsValid() { return nil } - fieldAdded := false - // unwrap payloads if payload := tag.Get("payload"); payload != "" { field, _ := value.Type().FieldByName(payload) @@ -118,19 +121,31 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl child.Attr = append(child.Attr, ns) } + var payloadFields, nonPayloadFields int + t := value.Type() for i := 0; i < value.NumField(); i++ { - if c := t.Field(i).Name[0:1]; strings.ToLower(c) == c { + member := elemOf(value.Field(i)) + field := t.Field(i) + + if field.PkgPath != "" { continue // ignore unexported fields } + if field.Tag.Get("ignore") != "" { + continue + } - member := elemOf(value.Field(i)) - field := t.Field(i) mTag := field.Tag - if mTag.Get("location") != "" { // skip non-body members + nonPayloadFields++ continue } + payloadFields++ + + if protocol.CanSetIdempotencyToken(value.Field(i), field) { + token := protocol.GetIdempotencyToken() + member = reflect.ValueOf(token) + } memberName := mTag.Get("locationName") if memberName == "" { @@ -140,11 +155,11 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl if err := b.buildValue(member, child, mTag); err != nil { return err } - - fieldAdded = true } - if fieldAdded { // only append this child if we have one ore more valid members + // Only case where the child shape is not added is if the shape only contains + // non-payload fields, e.g headers/query. + if !(payloadFields == 0 && nonPayloadFields > 0) { current.AddChild(child) } @@ -269,8 +284,12 @@ func (b *xmlBuilder) buildScalar(value reflect.Value, current *XMLNode, tag refl case float32: str = strconv.FormatFloat(float64(converted), 'f', -1, 32) case time.Time: - const ISO8601UTC = "2006-01-02T15:04:05Z" - str = converted.UTC().Format(ISO8601UTC) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.ISO8601TimeFormatName + } + + str = protocol.FormatTime(format, converted) default: return fmt.Errorf("unsupported value for param %s: %v (%s)", tag.Get("locationName"), value.Interface(), value.Type().Name()) diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go new file mode 100644 index 00000000000..c1a511851f6 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go @@ -0,0 +1,32 @@ +package xmlutil + +import ( + "encoding/xml" + "strings" +) + +type xmlAttrSlice []xml.Attr + +func (x xmlAttrSlice) Len() int { + return len(x) +} + +func (x xmlAttrSlice) Less(i, j int) bool { + spaceI, spaceJ := x[i].Name.Space, x[j].Name.Space + localI, localJ := x[i].Name.Local, x[j].Name.Local + valueI, valueJ := x[i].Value, x[j].Value + + spaceCmp := strings.Compare(spaceI, spaceJ) + localCmp := strings.Compare(localI, localJ) + valueCmp := strings.Compare(valueI, valueJ) + + if spaceCmp == -1 || (spaceCmp == 0 && (localCmp == -1 || (localCmp == 0 && valueCmp == -1))) { + return true + } + + return false +} + +func (x xmlAttrSlice) Swap(i, j int) { + x[i], x[j] = x[j], x[i] +} diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go index 49f291a857b..7108d380093 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go @@ -1,6 +1,7 @@ package xmlutil import ( + "bytes" "encoding/base64" "encoding/xml" "fmt" @@ -9,13 +10,36 @@ import ( "strconv" "strings" "time" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/private/protocol" ) +// UnmarshalXMLError unmarshals the XML error from the stream into the value +// type specified. The value must be a pointer. If the message fails to +// unmarshal, the message content will be included in the returned error as a +// awserr.UnmarshalError. +func UnmarshalXMLError(v interface{}, stream io.Reader) error { + var errBuf bytes.Buffer + body := io.TeeReader(stream, &errBuf) + + err := xml.NewDecoder(body).Decode(v) + if err != nil && err != io.EOF { + return awserr.NewUnmarshalError(err, + "failed to unmarshal error message", errBuf.Bytes()) + } + + return nil +} + // UnmarshalXML deserializes an xml.Decoder into the container v. V // needs to match the shape of the XML expected to be decoded. // If the shape doesn't match unmarshaling will fail. func UnmarshalXML(v interface{}, d *xml.Decoder, wrapper string) error { - n, _ := XMLToStruct(d, nil) + n, err := XMLToStruct(d, nil) + if err != nil { + return err + } if n.Children != nil { for _, root := range n.Children { for _, c := range root { @@ -23,7 +47,7 @@ func UnmarshalXML(v interface{}, d *xml.Decoder, wrapper string) error { c = wrappedChild[0] // pull out wrapped element } - err := parse(reflect.ValueOf(v), c, "") + err = parse(reflect.ValueOf(v), c, "") if err != nil { if err == io.EOF { return nil @@ -49,9 +73,15 @@ func parse(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { if t == "" { switch rtype.Kind() { case reflect.Struct: - t = "structure" + // also it can't be a time object + if _, ok := r.Interface().(*time.Time); !ok { + t = "structure" + } case reflect.Slice: - t = "list" + // also it can't be a byte slice + if _, ok := r.Interface().([]byte); !ok { + t = "list" + } case reflect.Map: t = "map" } @@ -111,11 +141,8 @@ func parseStruct(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { elems := node.Children[name] if elems == nil { // try to find the field in attributes - for _, a := range node.Attr { - if name == a.Name.Local { - // turn this into a text node for de-serializing - elems = []*XMLNode{{Text: a.Value}} - } + if val, ok := node.findElem(name); ok { + elems = []*XMLNode{{Text: val}} } } @@ -247,8 +274,12 @@ func parseScalar(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { } r.Set(reflect.ValueOf(&v)) case *time.Time: - const ISO8601UTC = "2006-01-02T15:04:05Z" - t, err := time.Parse(ISO8601UTC, node.Text) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.ISO8601TimeFormatName + } + + t, err := protocol.ParseTime(format, node.Text) if err != nil { return err } diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go index 72c198a9d8d..42f71648eee 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go @@ -2,6 +2,7 @@ package xmlutil import ( "encoding/xml" + "fmt" "io" "sort" ) @@ -12,6 +13,9 @@ type XMLNode struct { Children map[string][]*XMLNode `json:",omitempty"` Text string `json:",omitempty"` Attr []xml.Attr `json:",omitempty"` + + namespaces map[string]string + parent *XMLNode } // NewXMLElement returns a pointer to a new XMLNode initialized to default values. @@ -25,6 +29,7 @@ func NewXMLElement(name xml.Name) *XMLNode { // AddChild adds child to the XMLNode. func (n *XMLNode) AddChild(child *XMLNode) { + child.parent = n if _, ok := n.Children[child.Name.Local]; !ok { n.Children[child.Name.Local] = []*XMLNode{} } @@ -36,11 +41,16 @@ func XMLToStruct(d *xml.Decoder, s *xml.StartElement) (*XMLNode, error) { out := &XMLNode{} for { tok, err := d.Token() - if tok == nil || err == io.EOF { - break - } if err != nil { - return out, err + if err == io.EOF { + break + } else { + return out, err + } + } + + if tok == nil { + break } switch typed := tok.(type) { @@ -59,24 +69,68 @@ func XMLToStruct(d *xml.Decoder, s *xml.StartElement) (*XMLNode, error) { slice = []*XMLNode{} } node, e := XMLToStruct(d, &el) + out.findNamespaces() if e != nil { return out, e } node.Name = typed.Name + node.findNamespaces() + tempOut := *out + // Save into a temp variable, simply because out gets squashed during + // loop iterations + node.parent = &tempOut slice = append(slice, node) out.Children[name] = slice case xml.EndElement: if s != nil && s.Name.Local == typed.Name.Local { // matching end token return out, nil } + out = &XMLNode{} } } return out, nil } +func (n *XMLNode) findNamespaces() { + ns := map[string]string{} + for _, a := range n.Attr { + if a.Name.Space == "xmlns" { + ns[a.Value] = a.Name.Local + } + } + + n.namespaces = ns +} + +func (n *XMLNode) findElem(name string) (string, bool) { + for node := n; node != nil; node = node.parent { + for _, a := range node.Attr { + namespace := a.Name.Space + if v, ok := node.namespaces[namespace]; ok { + namespace = v + } + if name == fmt.Sprintf("%s:%s", namespace, a.Name.Local) { + return a.Value, true + } + } + } + return "", false +} + // StructToXML writes an XMLNode to a xml.Encoder as tokens. func StructToXML(e *xml.Encoder, node *XMLNode, sorted bool) error { - e.EncodeToken(xml.StartElement{Name: node.Name, Attr: node.Attr}) + // Sort Attributes + attrs := node.Attr + if sorted { + sortedAttrs := make([]xml.Attr, len(attrs)) + for _, k := range node.Attr { + sortedAttrs = append(sortedAttrs, k) + } + sort.Sort(xmlAttrSlice(sortedAttrs)) + attrs = sortedAttrs + } + + e.EncodeToken(xml.StartElement{Name: node.Name, Attr: attrs}) if node.Text != "" { e.EncodeToken(xml.CharData([]byte(node.Text))) diff --git a/vendor/github.com/aws/aws-sdk-go/private/signer/v4/v4.go b/vendor/github.com/aws/aws-sdk-go/private/signer/v4/v4.go deleted file mode 100644 index dc176f312ba..00000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/signer/v4/v4.go +++ /dev/null @@ -1,365 +0,0 @@ -// Package v4 implements signing for AWS V4 signer -package v4 - -import ( - "crypto/hmac" - "crypto/sha256" - "encoding/hex" - "fmt" - "io" - "net/http" - "net/url" - "sort" - "strconv" - "strings" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/private/protocol/rest" -) - -const ( - authHeaderPrefix = "AWS4-HMAC-SHA256" - timeFormat = "20060102T150405Z" - shortTimeFormat = "20060102" -) - -var ignoredHeaders = map[string]bool{ - "Authorization": true, - "Content-Type": true, - "Content-Length": true, - "User-Agent": true, -} - -type signer struct { - Request *http.Request - Time time.Time - ExpireTime time.Duration - ServiceName string - Region string - CredValues credentials.Value - Credentials *credentials.Credentials - Query url.Values - Body io.ReadSeeker - Debug aws.LogLevelType - Logger aws.Logger - - isPresign bool - formattedTime string - formattedShortTime string - - signedHeaders string - canonicalHeaders string - canonicalString string - credentialString string - stringToSign string - signature string - authorization string -} - -// Sign requests with signature version 4. -// -// Will sign the requests with the service config's Credentials object -// Signing is skipped if the credentials is the credentials.AnonymousCredentials -// object. -func Sign(req *request.Request) { - // If the request does not need to be signed ignore the signing of the - // request if the AnonymousCredentials object is used. - if req.Config.Credentials == credentials.AnonymousCredentials { - return - } - - region := req.ClientInfo.SigningRegion - if region == "" { - region = aws.StringValue(req.Config.Region) - } - - name := req.ClientInfo.SigningName - if name == "" { - name = req.ClientInfo.ServiceName - } - - s := signer{ - Request: req.HTTPRequest, - Time: req.Time, - ExpireTime: req.ExpireTime, - Query: req.HTTPRequest.URL.Query(), - Body: req.Body, - ServiceName: name, - Region: region, - Credentials: req.Config.Credentials, - Debug: req.Config.LogLevel.Value(), - Logger: req.Config.Logger, - } - - req.Error = s.sign() -} - -func (v4 *signer) sign() error { - if v4.ExpireTime != 0 { - v4.isPresign = true - } - - if v4.isRequestSigned() { - if !v4.Credentials.IsExpired() { - // If the request is already signed, and the credentials have not - // expired yet ignore the signing request. - return nil - } - - // The credentials have expired for this request. The current signing - // is invalid, and needs to be request because the request will fail. - if v4.isPresign { - v4.removePresign() - // Update the request's query string to ensure the values stays in - // sync in the case retrieving the new credentials fails. - v4.Request.URL.RawQuery = v4.Query.Encode() - } - } - - var err error - v4.CredValues, err = v4.Credentials.Get() - if err != nil { - return err - } - - if v4.isPresign { - v4.Query.Set("X-Amz-Algorithm", authHeaderPrefix) - if v4.CredValues.SessionToken != "" { - v4.Query.Set("X-Amz-Security-Token", v4.CredValues.SessionToken) - } else { - v4.Query.Del("X-Amz-Security-Token") - } - } else if v4.CredValues.SessionToken != "" { - v4.Request.Header.Set("X-Amz-Security-Token", v4.CredValues.SessionToken) - } - - v4.build() - - if v4.Debug.Matches(aws.LogDebugWithSigning) { - v4.logSigningInfo() - } - - return nil -} - -const logSignInfoMsg = `DEBUG: Request Signiture: ----[ CANONICAL STRING ]----------------------------- -%s ----[ STRING TO SIGN ]-------------------------------- -%s%s ------------------------------------------------------` -const logSignedURLMsg = ` ----[ SIGNED URL ]------------------------------------ -%s` - -func (v4 *signer) logSigningInfo() { - signedURLMsg := "" - if v4.isPresign { - signedURLMsg = fmt.Sprintf(logSignedURLMsg, v4.Request.URL.String()) - } - msg := fmt.Sprintf(logSignInfoMsg, v4.canonicalString, v4.stringToSign, signedURLMsg) - v4.Logger.Log(msg) -} - -func (v4 *signer) build() { - v4.buildTime() // no depends - v4.buildCredentialString() // no depends - if v4.isPresign { - v4.buildQuery() // no depends - } - v4.buildCanonicalHeaders() // depends on cred string - v4.buildCanonicalString() // depends on canon headers / signed headers - v4.buildStringToSign() // depends on canon string - v4.buildSignature() // depends on string to sign - - if v4.isPresign { - v4.Request.URL.RawQuery += "&X-Amz-Signature=" + v4.signature - } else { - parts := []string{ - authHeaderPrefix + " Credential=" + v4.CredValues.AccessKeyID + "/" + v4.credentialString, - "SignedHeaders=" + v4.signedHeaders, - "Signature=" + v4.signature, - } - v4.Request.Header.Set("Authorization", strings.Join(parts, ", ")) - } -} - -func (v4 *signer) buildTime() { - v4.formattedTime = v4.Time.UTC().Format(timeFormat) - v4.formattedShortTime = v4.Time.UTC().Format(shortTimeFormat) - - if v4.isPresign { - duration := int64(v4.ExpireTime / time.Second) - v4.Query.Set("X-Amz-Date", v4.formattedTime) - v4.Query.Set("X-Amz-Expires", strconv.FormatInt(duration, 10)) - } else { - v4.Request.Header.Set("X-Amz-Date", v4.formattedTime) - } -} - -func (v4 *signer) buildCredentialString() { - v4.credentialString = strings.Join([]string{ - v4.formattedShortTime, - v4.Region, - v4.ServiceName, - "aws4_request", - }, "/") - - if v4.isPresign { - v4.Query.Set("X-Amz-Credential", v4.CredValues.AccessKeyID+"/"+v4.credentialString) - } -} - -func (v4 *signer) buildQuery() { - for k, h := range v4.Request.Header { - if strings.HasPrefix(http.CanonicalHeaderKey(k), "X-Amz-") { - continue // never hoist x-amz-* headers, they must be signed - } - if _, ok := ignoredHeaders[http.CanonicalHeaderKey(k)]; ok { - continue // never hoist ignored headers - } - - v4.Request.Header.Del(k) - v4.Query.Del(k) - for _, v := range h { - v4.Query.Add(k, v) - } - } -} - -func (v4 *signer) buildCanonicalHeaders() { - var headers []string - headers = append(headers, "host") - for k := range v4.Request.Header { - if _, ok := ignoredHeaders[http.CanonicalHeaderKey(k)]; ok { - continue // ignored header - } - headers = append(headers, strings.ToLower(k)) - } - sort.Strings(headers) - - v4.signedHeaders = strings.Join(headers, ";") - - if v4.isPresign { - v4.Query.Set("X-Amz-SignedHeaders", v4.signedHeaders) - } - - headerValues := make([]string, len(headers)) - for i, k := range headers { - if k == "host" { - headerValues[i] = "host:" + v4.Request.URL.Host - } else { - headerValues[i] = k + ":" + - strings.Join(v4.Request.Header[http.CanonicalHeaderKey(k)], ",") - } - } - - v4.canonicalHeaders = strings.Join(headerValues, "\n") -} - -func (v4 *signer) buildCanonicalString() { - v4.Request.URL.RawQuery = strings.Replace(v4.Query.Encode(), "+", "%20", -1) - uri := v4.Request.URL.Opaque - if uri != "" { - uri = "/" + strings.Join(strings.Split(uri, "/")[3:], "/") - } else { - uri = v4.Request.URL.Path - } - if uri == "" { - uri = "/" - } - - if v4.ServiceName != "s3" { - uri = rest.EscapePath(uri, false) - } - - v4.canonicalString = strings.Join([]string{ - v4.Request.Method, - uri, - v4.Request.URL.RawQuery, - v4.canonicalHeaders + "\n", - v4.signedHeaders, - v4.bodyDigest(), - }, "\n") -} - -func (v4 *signer) buildStringToSign() { - v4.stringToSign = strings.Join([]string{ - authHeaderPrefix, - v4.formattedTime, - v4.credentialString, - hex.EncodeToString(makeSha256([]byte(v4.canonicalString))), - }, "\n") -} - -func (v4 *signer) buildSignature() { - secret := v4.CredValues.SecretAccessKey - date := makeHmac([]byte("AWS4"+secret), []byte(v4.formattedShortTime)) - region := makeHmac(date, []byte(v4.Region)) - service := makeHmac(region, []byte(v4.ServiceName)) - credentials := makeHmac(service, []byte("aws4_request")) - signature := makeHmac(credentials, []byte(v4.stringToSign)) - v4.signature = hex.EncodeToString(signature) -} - -func (v4 *signer) bodyDigest() string { - hash := v4.Request.Header.Get("X-Amz-Content-Sha256") - if hash == "" { - if v4.isPresign && v4.ServiceName == "s3" { - hash = "UNSIGNED-PAYLOAD" - } else if v4.Body == nil { - hash = hex.EncodeToString(makeSha256([]byte{})) - } else { - hash = hex.EncodeToString(makeSha256Reader(v4.Body)) - } - v4.Request.Header.Add("X-Amz-Content-Sha256", hash) - } - return hash -} - -// isRequestSigned returns if the request is currently signed or presigned -func (v4 *signer) isRequestSigned() bool { - if v4.isPresign && v4.Query.Get("X-Amz-Signature") != "" { - return true - } - if v4.Request.Header.Get("Authorization") != "" { - return true - } - - return false -} - -// unsign removes signing flags for both signed and presigned requests. -func (v4 *signer) removePresign() { - v4.Query.Del("X-Amz-Algorithm") - v4.Query.Del("X-Amz-Signature") - v4.Query.Del("X-Amz-Security-Token") - v4.Query.Del("X-Amz-Date") - v4.Query.Del("X-Amz-Expires") - v4.Query.Del("X-Amz-Credential") - v4.Query.Del("X-Amz-SignedHeaders") -} - -func makeHmac(key []byte, data []byte) []byte { - hash := hmac.New(sha256.New, key) - hash.Write(data) - return hash.Sum(nil) -} - -func makeSha256(data []byte) []byte { - hash := sha256.New() - hash.Write(data) - return hash.Sum(nil) -} - -func makeSha256Reader(reader io.ReadSeeker) []byte { - hash := sha256.New() - start, _ := reader.Seek(0, 1) - defer reader.Seek(start, 0) - - io.Copy(hash, reader) - return hash.Sum(nil) -} diff --git a/vendor/github.com/aws/aws-sdk-go/private/waiter/waiter.go b/vendor/github.com/aws/aws-sdk-go/private/waiter/waiter.go deleted file mode 100644 index e5fb13666ab..00000000000 --- a/vendor/github.com/aws/aws-sdk-go/private/waiter/waiter.go +++ /dev/null @@ -1,136 +0,0 @@ -package waiter - -import ( - "fmt" - "reflect" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/awsutil" - "github.com/aws/aws-sdk-go/aws/request" -) - -// A Config provides a collection of configuration values to setup a generated -// waiter code with. -type Config struct { - Name string - Delay int - MaxAttempts int - Operation string - Acceptors []WaitAcceptor -} - -// A WaitAcceptor provides the information needed to wait for an API operation -// to complete. -type WaitAcceptor struct { - Expected interface{} - Matcher string - State string - Argument string -} - -// A Waiter provides waiting for an operation to complete. -type Waiter struct { - Config - Client interface{} - Input interface{} -} - -// Wait waits for an operation to complete, expire max attempts, or fail. Error -// is returned if the operation fails. -func (w *Waiter) Wait() error { - client := reflect.ValueOf(w.Client) - in := reflect.ValueOf(w.Input) - method := client.MethodByName(w.Config.Operation + "Request") - - for i := 0; i < w.MaxAttempts; i++ { - res := method.Call([]reflect.Value{in}) - req := res[0].Interface().(*request.Request) - req.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Waiter")) - - err := req.Send() - for _, a := range w.Acceptors { - if err != nil && a.Matcher != "error" { - // Only matcher error is valid if there is a request error - continue - } - - result := false - var vals []interface{} - switch a.Matcher { - case "pathAll", "path": - // Require all matches to be equal for result to match - vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) - result = true - for _, val := range vals { - if !awsutil.DeepEqual(val, a.Expected) { - result = false - break - } - } - case "pathAny": - // Only a single match needs to equal for the result to match - vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) - for _, val := range vals { - if awsutil.DeepEqual(val, a.Expected) { - result = true - break - } - } - case "status": - s := a.Expected.(int) - result = s == req.HTTPResponse.StatusCode - case "error": - if aerr, ok := err.(awserr.Error); ok { - result = aerr.Code() == a.Expected.(string) - } - case "pathList": - // ignored matcher - default: - logf(client, "WARNING: Waiter for %s encountered unexpected matcher: %s", - w.Config.Operation, a.Matcher) - } - - if !result { - // If there was no matching result found there is nothing more to do - // for this response, retry the request. - continue - } - - switch a.State { - case "success": - // waiter completed - return nil - case "failure": - // Waiter failure state triggered - return awserr.New("ResourceNotReady", - fmt.Sprintf("failed waiting for successful resource state"), err) - case "retry": - // clear the error and retry the operation - err = nil - default: - logf(client, "WARNING: Waiter for %s encountered unexpected state: %s", - w.Config.Operation, a.State) - } - } - if err != nil { - return err - } - - time.Sleep(time.Second * time.Duration(w.Delay)) - } - - return awserr.New("ResourceNotReady", - fmt.Sprintf("exceeded %d wait attempts", w.MaxAttempts), nil) -} - -func logf(client reflect.Value, msg string, args ...interface{}) { - cfgVal := client.FieldByName("Config") - if !cfgVal.IsValid() { - return - } - if cfg, ok := cfgVal.Interface().(*aws.Config); ok && cfg.Logger != nil { - cfg.Logger.Log(fmt.Sprintf(msg, args...)) - } -} diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/api.go b/vendor/github.com/aws/aws-sdk-go/service/s3/api.go index 1d631220732..5fcd0f1ec44 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/api.go @@ -1,19 +1,53 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. -// Package s3 provides a client for Amazon Simple Storage Service. package s3 import ( + "bytes" + "fmt" "io" + "sync" + "sync/atomic" "time" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/awsutil" + "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol" + "github.com/aws/aws-sdk-go/private/protocol/eventstream" + "github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi" + "github.com/aws/aws-sdk-go/private/protocol/rest" + "github.com/aws/aws-sdk-go/private/protocol/restxml" ) const opAbortMultipartUpload = "AbortMultipartUpload" -// AbortMultipartUploadRequest generates a request for the AbortMultipartUpload operation. +// AbortMultipartUploadRequest generates a "aws/request.Request" representing the +// client's request for the AbortMultipartUpload operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AbortMultipartUpload for more information on using the AbortMultipartUpload +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AbortMultipartUploadRequest method. +// req, resp := client.AbortMultipartUploadRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUpload func (c *S3) AbortMultipartUploadRequest(input *AbortMultipartUploadInput) (req *request.Request, output *AbortMultipartUploadOutput) { op := &request.Operation{ Name: opAbortMultipartUpload, @@ -25,26 +59,98 @@ func (c *S3) AbortMultipartUploadRequest(input *AbortMultipartUploadInput) (req input = &AbortMultipartUploadInput{} } - req = c.newRequest(op, input, output) output = &AbortMultipartUploadOutput{} - req.Data = output + req = c.newRequest(op, input, output) return } -// Aborts a multipart upload. +// AbortMultipartUpload API operation for Amazon Simple Storage Service. +// +// This operation aborts a multipart upload. After a multipart upload is aborted, +// no additional parts can be uploaded using that upload ID. The storage consumed +// by any previously uploaded parts will be freed. However, if any part uploads +// are currently in progress, those part uploads might or might not succeed. +// As a result, it might be necessary to abort a given multipart upload multiple +// times in order to completely free all storage consumed by all parts. // // To verify that all parts have been removed, so you don't get charged for -// the part storage, you should call the List Parts operation and ensure the +// the part storage, you should call the ListParts operation and ensure the // parts list is empty. +// +// For information on permissions required to use the multipart upload API, +// see Multipart Upload API and Permissions (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html). +// +// The following operations are related to AbortMultipartUpload +// +// * CreateMultipartUpload +// +// * UploadPart +// +// * CompleteMultipartUpload +// +// * ListParts +// +// * ListMultipartUploads +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation AbortMultipartUpload for usage and error information. +// +// Returned Error Codes: +// * ErrCodeNoSuchUpload "NoSuchUpload" +// The specified multipart upload does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUpload func (c *S3) AbortMultipartUpload(input *AbortMultipartUploadInput) (*AbortMultipartUploadOutput, error) { req, out := c.AbortMultipartUploadRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AbortMultipartUploadWithContext is the same as AbortMultipartUpload with the addition of +// the ability to pass a context and additional request options. +// +// See AbortMultipartUpload for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) AbortMultipartUploadWithContext(ctx aws.Context, input *AbortMultipartUploadInput, opts ...request.Option) (*AbortMultipartUploadOutput, error) { + req, out := c.AbortMultipartUploadRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCompleteMultipartUpload = "CompleteMultipartUpload" -// CompleteMultipartUploadRequest generates a request for the CompleteMultipartUpload operation. +// CompleteMultipartUploadRequest generates a "aws/request.Request" representing the +// client's request for the CompleteMultipartUpload operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CompleteMultipartUpload for more information on using the CompleteMultipartUpload +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CompleteMultipartUploadRequest method. +// req, resp := client.CompleteMultipartUploadRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUpload func (c *S3) CompleteMultipartUploadRequest(input *CompleteMultipartUploadInput) (req *request.Request, output *CompleteMultipartUploadOutput) { op := &request.Operation{ Name: opCompleteMultipartUpload, @@ -56,22 +162,127 @@ func (c *S3) CompleteMultipartUploadRequest(input *CompleteMultipartUploadInput) input = &CompleteMultipartUploadInput{} } - req = c.newRequest(op, input, output) output = &CompleteMultipartUploadOutput{} - req.Data = output + req = c.newRequest(op, input, output) return } +// CompleteMultipartUpload API operation for Amazon Simple Storage Service. +// // Completes a multipart upload by assembling previously uploaded parts. +// +// You first initiate the multipart upload and then upload all parts using the +// UploadPart operation. After successfully uploading all relevant parts of +// an upload, you call this operation to complete the upload. Upon receiving +// this request, Amazon S3 concatenates all the parts in ascending order by +// part number to create a new object. In the Complete Multipart Upload request, +// you must provide the parts list. You must ensure the parts list is complete, +// this operation concatenates the parts you provide in the list. For each part +// in the list, you must provide the part number and the ETag value, returned +// after that part was uploaded. +// +// Processing of a Complete Multipart Upload request could take several minutes +// to complete. After Amazon S3 begins processing the request, it sends an HTTP +// response header that specifies a 200 OK response. While processing is in +// progress, Amazon S3 periodically sends whitespace characters to keep the +// connection from timing out. Because a request could fail after the initial +// 200 OK response has been sent, it is important that you check the response +// body to determine whether the request succeeded. +// +// Note that if CompleteMultipartUpload fails, applications should be prepared +// to retry the failed requests. For more information, see Amazon S3 Error Best +// Practices (https://docs.aws.amazon.com/AmazonS3/latest/dev/ErrorBestPractices.html). +// +// For more information on multipart uploads, see Uploading Objects Using Multipart +// Upload (https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html). +// +// For information on permissions required to use the multipart upload API, +// see Multipart Upload API and Permissions (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html). +// +// GetBucketLifecycle has the following special errors: +// +// * Error code: EntityTooSmall Description: Your proposed upload is smaller +// than the minimum allowed object size. Each part must be at least 5 MB +// in size, except the last part. 400 Bad Request +// +// * Error code: InvalidPart Description: One or more of the specified parts +// could not be found. The part might not have been uploaded, or the specified +// entity tag might not have matched the part's entity tag. 400 Bad Request +// +// * Error code: InvalidPartOrder Description: The list of parts was not +// in ascending order. The parts list must be specified in order by part +// number. 400 Bad Request +// +// * Error code: NoSuchUpload Description: The specified multipart upload +// does not exist. The upload ID might be invalid, or the multipart upload +// might have been aborted or completed. 404 Not Found +// +// The following operations are related to DeleteBucketMetricsConfiguration: +// +// * CreateMultipartUpload +// +// * UploadPart +// +// * AbortMultipartUpload +// +// * ListParts +// +// * ListMultipartUploads +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation CompleteMultipartUpload for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUpload func (c *S3) CompleteMultipartUpload(input *CompleteMultipartUploadInput) (*CompleteMultipartUploadOutput, error) { req, out := c.CompleteMultipartUploadRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CompleteMultipartUploadWithContext is the same as CompleteMultipartUpload with the addition of +// the ability to pass a context and additional request options. +// +// See CompleteMultipartUpload for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) CompleteMultipartUploadWithContext(ctx aws.Context, input *CompleteMultipartUploadInput, opts ...request.Option) (*CompleteMultipartUploadOutput, error) { + req, out := c.CompleteMultipartUploadRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCopyObject = "CopyObject" -// CopyObjectRequest generates a request for the CopyObject operation. +// CopyObjectRequest generates a "aws/request.Request" representing the +// client's request for the CopyObject operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CopyObject for more information on using the CopyObject +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CopyObjectRequest method. +// req, resp := client.CopyObjectRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObject func (c *S3) CopyObjectRequest(input *CopyObjectInput) (req *request.Request, output *CopyObjectOutput) { op := &request.Operation{ Name: opCopyObject, @@ -83,22 +294,258 @@ func (c *S3) CopyObjectRequest(input *CopyObjectInput) (req *request.Request, ou input = &CopyObjectInput{} } - req = c.newRequest(op, input, output) output = &CopyObjectOutput{} - req.Data = output + req = c.newRequest(op, input, output) return } +// CopyObject API operation for Amazon Simple Storage Service. +// // Creates a copy of an object that is already stored in Amazon S3. +// +// You can store individual objects of up to 5 TB in Amazon S3. You create a +// copy of your object up to 5 GB in size in a single atomic operation using +// this API. However, for copying an object greater than 5 GB, you must use +// the multipart upload Upload Part - Copy API. For conceptual information, +// see Copy Object Using the REST Multipart Upload API (https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html). +// +// When copying an object, you can preserve all metadata (default) or specify +// new metadata. However, the ACL is not preserved and is set to private for +// the user making the request. To override the default ACL setting, specify +// a new ACL when generating a copy request. For more information, see Using +// ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). +// +// Amazon S3 Transfer Acceleration does not support cross-region copies. If +// you request a cross-region copy using a Transfer Acceleration endpoint, you +// get a 400 Bad Request error. For more information about transfer acceleration, +// see Transfer Acceleration (https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html). +// +// All copy requests must be authenticated. Additionally, you must have read +// access to the source object and write access to the destination bucket. For +// more information, see REST Authentication (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html). +// Both the Region that you want to copy the object from and the Region that +// you want to copy the object to must be enabled for your account. +// +// To only copy an object under certain conditions, such as whether the Etag +// matches or whether the object was modified before or after a specified date, +// use the request parameters x-amz-copy-source-if-match, x-amz-copy-source-if-none-match, +// x-amz-copy-source-if-unmodified-since, or x-amz-copy-source-if-modified-since. +// +// All headers with the x-amz- prefix, including x-amz-copy-source, must be +// signed. +// +// You can use this operation to change the storage class of an object that +// is already stored in Amazon S3 using the StorageClass parameter. For more +// information, see Storage Classes (https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html). +// +// The source object that you are copying can be encrypted or unencrypted. If +// the source object is encrypted, it can be encrypted by server-side encryption +// using AWS-managed encryption keys or by using a customer-provided encryption +// key. When copying an object, you can request that Amazon S3 encrypt the target +// object by using either the AWS-managed encryption keys or by using your own +// encryption key. You can do this regardless of the form of server-side encryption +// that was used to encrypt the source, or even if the source object was not +// encrypted. For more information about server-side encryption, see Using Server-Side +// Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html). +// +// A copy request might return an error when Amazon S3 receives the copy request +// or while Amazon S3 is copying the files. If the error occurs before the copy +// operation starts, you receive a standard Amazon S3 error. If the error occurs +// during the copy operation, the error response is embedded in the 200 OK response. +// This means that a 200 OK response can contain either a success or an error. +// Design your application to parse the contents of the response and handle +// it appropriately. +// +// If the copy is successful, you receive a response with information about +// the copied object. +// +// If the request is an HTTP 1.1 request, the response is chunk encoded. If +// it were not, it would not contain the content-length, and you would need +// to read the entire body. +// +// Consider the following when using request headers: +// +// * Consideration 1 – If both the x-amz-copy-source-if-match and x-amz-copy-source-if-unmodified-since +// headers are present in the request and evaluate as follows, Amazon S3 +// returns 200 OK and copies the data: x-amz-copy-source-if-match condition +// evaluates to true x-amz-copy-source-if-unmodified-since condition evaluates +// to false +// +// * Consideration 2 – If both of the x-amz-copy-source-if-none-match and +// x-amz-copy-source-if-modified-since headers are present in the request +// and evaluate as follows, Amazon S3 returns the 412 Precondition Failed +// response code: x-amz-copy-source-if-none-match condition evaluates to +// false x-amz-copy-source-if-modified-since condition evaluates to true +// +// The copy request charge is based on the storage class and Region you specify +// for the destination object. For pricing information, see Amazon S3 Pricing +// (https://aws.amazon.com/s3/pricing/). +// +// Following are other considerations when using CopyObject: +// +// Versioning +// +// By default, x-amz-copy-source identifies the current version of an object +// to copy. (If the current version is a delete marker, Amazon S3 behaves as +// if the object was deleted.) To copy a different version, use the versionId +// subresource. +// +// If you enable versioning on the target bucket, Amazon S3 generates a unique +// version ID for the object being copied. This version ID is different from +// the version ID of the source object. Amazon S3 returns the version ID of +// the copied object in the x-amz-version-id response header in the response. +// +// If you do not enable versioning or suspend it on the target bucket, the version +// ID that Amazon S3 generates is always null. +// +// If the source object's storage class is GLACIER, then you must restore a +// copy of this object before you can use it as a source object for the copy +// operation. For more information, see . +// +// Access Permissions +// +// When copying an object, you can optionally specify the accounts or groups +// that should be granted specific permissions on the new object. There are +// two ways to grant the permissions using the request headers: +// +// * Specify a canned ACL with the x-amz-acl request header. For more information, +// see Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly with the x-amz-grant-read, x-amz-grant-read-acp, +// x-amz-grant-write-acp, and x-amz-grant-full-control headers. These parameters +// map to the set of permissions that Amazon S3 supports in an ACL. For more +// information, see Access Control List (ACL) Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). +// +// You can use either a canned ACL or specify access permissions explicitly. +// You cannot do both. +// +// Server-Side- Encryption-Specific Request Headers +// +// To encrypt the target object, you must provide the appropriate encryption-related +// request headers. The one you use depends on whether you want to use AWS-managed +// encryption keys or provide your own encryption key. +// +// * To encrypt the target object using server-side encryption with an AWS-managed +// encryption key, provide the following request headers, as appropriate. +// x-amz-server-side​-encryption x-amz-server-side-encryption-aws-kms-key-id +// x-amz-server-side-encryption-context If you specify x-amz-server-side-encryption:aws:kms, +// but don't provide x-amz-server-side- encryption-aws-kms-key-id, Amazon +// S3 uses the AWS managed customer master key (CMK) in KMS to protect the +// data. All GET and PUT requests for an object protected by AWS KMS fail +// if you don't make them with SSL or by using SigV4. For more information +// on Server-Side Encryption with CMKs stored in Amazon KMS (SSE-KMS), see +// Protecting Data Using Server-Side Encryption with CMKs stored in KMS (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html). +// +// * To encrypt the target object using server-side encryption with an encryption +// key that you provide, use the following headers. x-amz-server-side​-encryption​-customer-algorithm +// x-amz-server-side​-encryption​-customer-key x-amz-server-side​-encryption​-customer-key-MD5 +// +// * If the source object is encrypted using server-side encryption with +// customer-provided encryption keys, you must use the following headers. +// x-amz-copy-source​-server-side​-encryption​-customer-algorithm x-amz-copy-source​-server-side​-encryption​-customer-key +// x-amz-copy-source-​server-side​-encryption​-customer-key-MD5 For +// more information on Server-Side Encryption with CMKs stored in Amazon +// KMS (SSE-KMS), see Protecting Data Using Server-Side Encryption with CMKs +// stored in Amazon KMS (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html). +// +// Access-Control-List (ACL)-Specific Request Headers +// +// You also can use the following access control–related headers with this +// operation. By default, all objects are private. Only the owner has full access +// control. When adding a new object, you can grant permissions to individual +// AWS accounts or to predefined groups defined by Amazon S3. These permissions +// are then added to the Access Control List (ACL) on the object. For more information, +// see Using ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). +// With this operation, you can grant access permissions using one of the following +// two methods: +// +// * Specify a canned ACL (x-amz-acl) — Amazon S3 supports a set of predefined +// ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees +// and permissions. For more information, see Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly — To explicitly grant access +// permissions to specific AWS accounts or groups, use the following headers. +// Each header maps to specific permissions that Amazon S3 supports in an +// ACL. For more information, see Access Control List (ACL) Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). +// In the header, you specify a list of grantees who get the specific permission. +// To grant permissions explicitly use: x-amz-grant-read x-amz-grant-write +// x-amz-grant-read-acp x-amz-grant-write-acp x-amz-grant-full-control You +// specify each grantee as a type=value pair, where the type is one of the +// following: emailAddress – if the value specified is the email address +// of an AWS account id – if the value specified is the canonical user +// ID of an AWS account uri – if you are granting permissions to a predefined +// group For example, the following x-amz-grant-read header grants the AWS +// accounts identified by email addresses permissions to read object data +// and its metadata: x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com" +// +// The following operation are related to CopyObject +// +// * PutObject +// +// * GetObject +// +// For more information, see Copying Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectsExamples.html). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation CopyObject for usage and error information. +// +// Returned Error Codes: +// * ErrCodeObjectNotInActiveTierError "ObjectNotInActiveTierError" +// The source object of the COPY operation is not in the active tier and is +// only stored in Amazon Glacier. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObject func (c *S3) CopyObject(input *CopyObjectInput) (*CopyObjectOutput, error) { req, out := c.CopyObjectRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CopyObjectWithContext is the same as CopyObject with the addition of +// the ability to pass a context and additional request options. +// +// See CopyObject for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) CopyObjectWithContext(ctx aws.Context, input *CopyObjectInput, opts ...request.Option) (*CopyObjectOutput, error) { + req, out := c.CopyObjectRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateBucket = "CreateBucket" -// CreateBucketRequest generates a request for the CreateBucket operation. +// CreateBucketRequest generates a "aws/request.Request" representing the +// client's request for the CreateBucket operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateBucket for more information on using the CreateBucket +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateBucketRequest method. +// req, resp := client.CreateBucketRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucket func (c *S3) CreateBucketRequest(input *CreateBucketInput) (req *request.Request, output *CreateBucketOutput) { op := &request.Operation{ Name: opCreateBucket, @@ -110,22 +557,135 @@ func (c *S3) CreateBucketRequest(input *CreateBucketInput) (req *request.Request input = &CreateBucketInput{} } - req = c.newRequest(op, input, output) output = &CreateBucketOutput{} - req.Data = output + req = c.newRequest(op, input, output) return } -// Creates a new bucket. +// CreateBucket API operation for Amazon Simple Storage Service. +// +// Creates a new bucket. To create a bucket, you must register with Amazon S3 +// and have a valid AWS Access Key ID to authenticate requests. Anonymous requests +// are never allowed to create buckets. By creating the bucket, you become the +// bucket owner. +// +// Not every string is an acceptable bucket name. For information on bucket +// naming restrictions, see Working with Amazon S3 Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html). +// +// By default, the bucket is created in the US East (N. Virginia) region. You +// can optionally specify a region in the request body. You might choose a region +// to optimize latency, minimize costs, or address regulatory requirements. +// For example, if you reside in Europe, you will probably find it advantageous +// to create buckets in the EU (Ireland) region. For more information, see How +// to Select a Region for Your Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro). +// +// If you send your create bucket request to the s3.amazonaws.com endpoint, +// the request go to the us-east-1 region. Accordingly, the signature calculations +// in Signature Version 4 must use us-east-1 as region, even if the location +// constraint in the request specifies another region where the bucket is to +// be created. If you create a bucket in a region other than US East (N. Virginia) +// region, your application must be able to handle 307 redirect. For more information, +// see Virtual Hosting of Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html). +// +// When creating a bucket using this operation, you can optionally specify the +// accounts or groups that should be granted specific permissions on the bucket. +// There are two ways to grant the appropriate permissions using the request +// headers. +// +// * Specify a canned ACL using the x-amz-acl request header. Amazon S3 supports +// a set of predefined ACLs, known as canned ACLs. Each canned ACL has a +// predefined set of grantees and permissions. For more information, see +// Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly using the x-amz-grant-read, x-amz-grant-write, +// x-amz-grant-read-acp, x-amz-grant-write-acp, x-amz-grant-full-control +// headers. These headers map to the set of permissions Amazon S3 supports +// in an ACL. For more information, see Access Control List (ACL) Overview +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). You +// specify each grantee as a type=value pair, where the type is one of the +// following: emailAddress – if the value specified is the email address +// of an AWS account id – if the value specified is the canonical user +// ID of an AWS account uri – if you are granting permissions to a predefined +// group For example, the following x-amz-grant-read header grants the AWS +// accounts identified by email addresses permissions to read object data +// and its metadata: x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com" +// +// You can use either a canned ACL or specify access permissions explicitly. +// You cannot do both. +// +// The following operations are related to CreateBucket: +// +// * PutObject +// +// * DeleteBucket +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation CreateBucket for usage and error information. +// +// Returned Error Codes: +// * ErrCodeBucketAlreadyExists "BucketAlreadyExists" +// The requested bucket name is not available. The bucket namespace is shared +// by all users of the system. Please select a different name and try again. +// +// * ErrCodeBucketAlreadyOwnedByYou "BucketAlreadyOwnedByYou" +// The bucket you tried to create already exists, and you own it. Amazon S3 +// returns this error in all AWS Regions except in the North Virginia region. +// For legacy compatibility, if you re-create an existing bucket that you already +// own in the North Virginia region, Amazon S3 returns 200 OK and resets the +// bucket access control lists (ACLs). +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucket func (c *S3) CreateBucket(input *CreateBucketInput) (*CreateBucketOutput, error) { req, out := c.CreateBucketRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateBucketWithContext is the same as CreateBucket with the addition of +// the ability to pass a context and additional request options. +// +// See CreateBucket for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) CreateBucketWithContext(ctx aws.Context, input *CreateBucketInput, opts ...request.Option) (*CreateBucketOutput, error) { + req, out := c.CreateBucketRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateMultipartUpload = "CreateMultipartUpload" -// CreateMultipartUploadRequest generates a request for the CreateMultipartUpload operation. +// CreateMultipartUploadRequest generates a "aws/request.Request" representing the +// client's request for the CreateMultipartUpload operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateMultipartUpload for more information on using the CreateMultipartUpload +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateMultipartUploadRequest method. +// req, resp := client.CreateMultipartUploadRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUpload func (c *S3) CreateMultipartUploadRequest(input *CreateMultipartUploadInput) (req *request.Request, output *CreateMultipartUploadOutput) { op := &request.Operation{ Name: opCreateMultipartUpload, @@ -137,28 +697,208 @@ func (c *S3) CreateMultipartUploadRequest(input *CreateMultipartUploadInput) (re input = &CreateMultipartUploadInput{} } - req = c.newRequest(op, input, output) output = &CreateMultipartUploadOutput{} - req.Data = output + req = c.newRequest(op, input, output) return } -// Initiates a multipart upload and returns an upload ID. +// CreateMultipartUpload API operation for Amazon Simple Storage Service. // -// Note: After you initiate multipart upload and upload one or more parts, you -// must either complete or abort multipart upload in order to stop getting charged -// for storage of the uploaded parts. Only after you either complete or abort -// multipart upload, Amazon S3 frees up the parts storage and stops charging -// you for the parts storage. +// This operation initiates a multipart upload and returns an upload ID. This +// upload ID is used to associate all of the parts in the specific multipart +// upload. You specify this upload ID in each of your subsequent upload part +// requests (see UploadPart). You also include this upload ID in the final request +// to either complete or abort the multipart upload request. +// +// For more information about multipart uploads, see Multipart Upload Overview +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html). +// +// If you have configured a lifecycle rule to abort incomplete multipart uploads, +// the upload must complete within the number of days specified in the bucket +// lifecycle configuration. Otherwise, the incomplete multipart upload becomes +// eligible for an abort operation and Amazon S3 aborts the multipart upload. +// For more information, see Aborting Incomplete Multipart Uploads Using a Bucket +// Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config). +// +// For information about the permissions required to use the multipart upload +// API, see Multipart Upload API and Permissions (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html). +// +// For request signing, multipart upload is just a series of regular requests. +// You initiate a multipart upload, send one or more requests to upload parts, +// and then complete the multipart upload process. You sign each request individually. +// There is nothing special about signing multipart upload requests. For more +// information about signing, see Authenticating Requests (AWS Signature Version +// 4) (https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html). +// +// After you initiate a multipart upload and upload one or more parts, to stop +// being charged for storing the uploaded parts, you must either complete or +// abort the multipart upload. Amazon S3 frees up the space used to store the +// parts and stop charging you for storing them only after you either complete +// or abort a multipart upload. +// +// You can optionally request server-side encryption. For server-side encryption, +// Amazon S3 encrypts your data as it writes it to disks in its data centers +// and decrypts it when you access it. You can provide your own encryption key, +// or use AWS Key Management Service (AWS KMS) customer master keys (CMKs) or +// Amazon S3-managed encryption keys. If you choose to provide your own encryption +// key, the request headers you provide in UploadPart) and UploadPartCopy) requests +// must match the headers you used in the request to initiate the upload by +// using CreateMultipartUpload. +// +// To perform a multipart upload with encryption using an AWS KMS CMK, the requester +// must have permission to the kms:Encrypt, kms:Decrypt, kms:ReEncrypt*, kms:GenerateDataKey*, +// and kms:DescribeKey actions on the key. These permissions are required because +// Amazon S3 must decrypt and read data from the encrypted file parts before +// it completes the multipart upload. +// +// If your AWS Identity and Access Management (IAM) user or role is in the same +// AWS account as the AWS KMS CMK, then you must have these permissions on the +// key policy. If your IAM user or role belongs to a different account than +// the key, then you must have the permissions on both the key policy and your +// IAM user or role. +// +// For more information, see Protecting Data Using Server-Side Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html). +// +// Access Permissions +// +// When copying an object, you can optionally specify the accounts or groups +// that should be granted specific permissions on the new object. There are +// two ways to grant the permissions using the request headers: +// +// * Specify a canned ACL with the x-amz-acl request header. For more information, +// see Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly with the x-amz-grant-read, x-amz-grant-read-acp, +// x-amz-grant-write-acp, and x-amz-grant-full-control headers. These parameters +// map to the set of permissions that Amazon S3 supports in an ACL. For more +// information, see Access Control List (ACL) Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). +// +// You can use either a canned ACL or specify access permissions explicitly. +// You cannot do both. +// +// Server-Side- Encryption-Specific Request Headers +// +// You can optionally tell Amazon S3 to encrypt data at rest using server-side +// encryption. Server-side encryption is for data encryption at rest. Amazon +// S3 encrypts your data as it writes it to disks in its data centers and decrypts +// it when you access it. The option you use depends on whether you want to +// use AWS-managed encryption keys or provide your own encryption key. +// +// * Use encryption keys managed by Amazon S3 or customer master keys (CMKs) +// stored in Amazon Key Management Service (KMS) – If you want AWS to manage +// the keys used to encrypt data, specify the following headers in the request. +// x-amz-server-side​-encryption x-amz-server-side-encryption-aws-kms-key-id +// x-amz-server-side-encryption-context If you specify x-amz-server-side-encryption:aws:kms, +// but don't provide x-amz-server-side- encryption-aws-kms-key-id, Amazon +// S3 uses the AWS managed CMK in AWS KMS to protect the data. All GET and +// PUT requests for an object protected by AWS KMS fail if you don't make +// them with SSL or by using SigV4. For more information on Server-Side Encryption +// with CMKs Stored in Amazon KMS (SSE-KMS), see Protecting Data Using Server-Side +// Encryption with CMKs stored in AWS KMS (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html). +// +// * Use customer-provided encryption keys – If you want to manage your +// own encryption keys, provide all the following headers in the request. +// x-amz-server-side​-encryption​-customer-algorithm x-amz-server-side​-encryption​-customer-key +// x-amz-server-side​-encryption​-customer-key-MD5 For more information +// on Server-Side Encryption with CMKs stored in AWS KMS (SSE-KMS), see Protecting +// Data Using Server-Side Encryption with CMKs stored in AWS KMS (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html). +// +// Access-Control-List (ACL)-Specific Request Headers +// +// You also can use the following access control–related headers with this +// operation. By default, all objects are private. Only the owner has full access +// control. When adding a new object, you can grant permissions to individual +// AWS accounts or to predefined groups defined by Amazon S3. These permissions +// are then added to the Access Control List (ACL) on the object. For more information, +// see Using ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). +// With this operation, you can grant access permissions using one of the following +// two methods: +// +// * Specify a canned ACL (x-amz-acl) — Amazon S3 supports a set of predefined +// ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees +// and permissions. For more information, see Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly — To explicitly grant access +// permissions to specific AWS accounts or groups, use the following headers. +// Each header maps to specific permissions that Amazon S3 supports in an +// ACL. For more information, see Access Control List (ACL) Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). +// In the header, you specify a list of grantees who get the specific permission. +// To grant permissions explicitly use: x-amz-grant-read x-amz-grant-write +// x-amz-grant-read-acp x-amz-grant-write-acp x-amz-grant-full-control You +// specify each grantee as a type=value pair, where the type is one of the +// following: emailAddress – if the value specified is the email address +// of an AWS account id – if the value specified is the canonical user +// ID of an AWS account uri – if you are granting permissions to a predefined +// group For example, the following x-amz-grant-read header grants the AWS +// accounts identified by email addresses permissions to read object data +// and its metadata: x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com" +// +// The following operations are related to CreateMultipartUpload: +// +// * UploadPart +// +// * CompleteMultipartUpload +// +// * AbortMultipartUpload +// +// * ListParts +// +// * ListMultipartUploads +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation CreateMultipartUpload for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUpload func (c *S3) CreateMultipartUpload(input *CreateMultipartUploadInput) (*CreateMultipartUploadOutput, error) { req, out := c.CreateMultipartUploadRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateMultipartUploadWithContext is the same as CreateMultipartUpload with the addition of +// the ability to pass a context and additional request options. +// +// See CreateMultipartUpload for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) CreateMultipartUploadWithContext(ctx aws.Context, input *CreateMultipartUploadInput, opts ...request.Option) (*CreateMultipartUploadOutput, error) { + req, out := c.CreateMultipartUploadRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opDeleteBucket = "DeleteBucket" -// DeleteBucketRequest generates a request for the DeleteBucket operation. +// DeleteBucketRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucket operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucket for more information on using the DeleteBucket +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketRequest method. +// req, resp := client.DeleteBucketRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucket func (c *S3) DeleteBucketRequest(input *DeleteBucketInput) (req *request.Request, output *DeleteBucketOutput) { op := &request.Operation{ Name: opDeleteBucket, @@ -170,1665 +910,19886 @@ func (c *S3) DeleteBucketRequest(input *DeleteBucketInput) (req *request.Request input = &DeleteBucketInput{} } - req = c.newRequest(op, input, output) output = &DeleteBucketOutput{} - req.Data = output + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } +// DeleteBucket API operation for Amazon Simple Storage Service. +// // Deletes the bucket. All objects (including all object versions and Delete // Markers) in the bucket must be deleted before the bucket itself can be deleted. +// +// Related Resources +// +// * +// +// * +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucket for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucket func (c *S3) DeleteBucket(input *DeleteBucketInput) (*DeleteBucketOutput, error) { req, out := c.DeleteBucketRequest(input) - err := req.Send() - return out, err + return out, req.Send() } -const opDeleteBucketCors = "DeleteBucketCors" +// DeleteBucketWithContext is the same as DeleteBucket with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucket for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketWithContext(ctx aws.Context, input *DeleteBucketInput, opts ...request.Option) (*DeleteBucketOutput, error) { + req, out := c.DeleteBucketRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteBucketCorsRequest generates a request for the DeleteBucketCors operation. -func (c *S3) DeleteBucketCorsRequest(input *DeleteBucketCorsInput) (req *request.Request, output *DeleteBucketCorsOutput) { +const opDeleteBucketAnalyticsConfiguration = "DeleteBucketAnalyticsConfiguration" + +// DeleteBucketAnalyticsConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketAnalyticsConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketAnalyticsConfiguration for more information on using the DeleteBucketAnalyticsConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketAnalyticsConfigurationRequest method. +// req, resp := client.DeleteBucketAnalyticsConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketAnalyticsConfiguration +func (c *S3) DeleteBucketAnalyticsConfigurationRequest(input *DeleteBucketAnalyticsConfigurationInput) (req *request.Request, output *DeleteBucketAnalyticsConfigurationOutput) { op := &request.Operation{ - Name: opDeleteBucketCors, + Name: opDeleteBucketAnalyticsConfiguration, HTTPMethod: "DELETE", - HTTPPath: "/{Bucket}?cors", + HTTPPath: "/{Bucket}?analytics", } if input == nil { - input = &DeleteBucketCorsInput{} + input = &DeleteBucketAnalyticsConfigurationInput{} } + output = &DeleteBucketAnalyticsConfigurationOutput{} req = c.newRequest(op, input, output) - output = &DeleteBucketCorsOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Deletes the cors configuration information set for the bucket. -func (c *S3) DeleteBucketCors(input *DeleteBucketCorsInput) (*DeleteBucketCorsOutput, error) { - req, out := c.DeleteBucketCorsRequest(input) - err := req.Send() - return out, err +// DeleteBucketAnalyticsConfiguration API operation for Amazon Simple Storage Service. +// +// Deletes an analytics configuration for the bucket (specified by the analytics +// configuration ID). +// +// To use this operation, you must have permissions to perform the s3:PutAnalyticsConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev//using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For information about Amazon S3 analytics feature, see Amazon S3 Analytics +// – Storage Class Analysis (https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html). +// +// The following operations are related to DeleteBucketAnalyticsConfiguration: +// +// * +// +// * +// +// * +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketAnalyticsConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketAnalyticsConfiguration +func (c *S3) DeleteBucketAnalyticsConfiguration(input *DeleteBucketAnalyticsConfigurationInput) (*DeleteBucketAnalyticsConfigurationOutput, error) { + req, out := c.DeleteBucketAnalyticsConfigurationRequest(input) + return out, req.Send() } -const opDeleteBucketLifecycle = "DeleteBucketLifecycle" - -// DeleteBucketLifecycleRequest generates a request for the DeleteBucketLifecycle operation. -func (c *S3) DeleteBucketLifecycleRequest(input *DeleteBucketLifecycleInput) (req *request.Request, output *DeleteBucketLifecycleOutput) { - op := &request.Operation{ - Name: opDeleteBucketLifecycle, - HTTPMethod: "DELETE", - HTTPPath: "/{Bucket}?lifecycle", - } +// DeleteBucketAnalyticsConfigurationWithContext is the same as DeleteBucketAnalyticsConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketAnalyticsConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketAnalyticsConfigurationWithContext(ctx aws.Context, input *DeleteBucketAnalyticsConfigurationInput, opts ...request.Option) (*DeleteBucketAnalyticsConfigurationOutput, error) { + req, out := c.DeleteBucketAnalyticsConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} - if input == nil { - input = &DeleteBucketLifecycleInput{} - } +const opDeleteBucketCors = "DeleteBucketCors" - req = c.newRequest(op, input, output) - output = &DeleteBucketLifecycleOutput{} - req.Data = output - return -} - -// Deletes the lifecycle configuration from the bucket. -func (c *S3) DeleteBucketLifecycle(input *DeleteBucketLifecycleInput) (*DeleteBucketLifecycleOutput, error) { - req, out := c.DeleteBucketLifecycleRequest(input) - err := req.Send() - return out, err -} - -const opDeleteBucketPolicy = "DeleteBucketPolicy" - -// DeleteBucketPolicyRequest generates a request for the DeleteBucketPolicy operation. -func (c *S3) DeleteBucketPolicyRequest(input *DeleteBucketPolicyInput) (req *request.Request, output *DeleteBucketPolicyOutput) { +// DeleteBucketCorsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketCors operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketCors for more information on using the DeleteBucketCors +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketCorsRequest method. +// req, resp := client.DeleteBucketCorsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketCors +func (c *S3) DeleteBucketCorsRequest(input *DeleteBucketCorsInput) (req *request.Request, output *DeleteBucketCorsOutput) { op := &request.Operation{ - Name: opDeleteBucketPolicy, + Name: opDeleteBucketCors, HTTPMethod: "DELETE", - HTTPPath: "/{Bucket}?policy", + HTTPPath: "/{Bucket}?cors", } if input == nil { - input = &DeleteBucketPolicyInput{} + input = &DeleteBucketCorsInput{} } + output = &DeleteBucketCorsOutput{} req = c.newRequest(op, input, output) - output = &DeleteBucketPolicyOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Deletes the policy from the bucket. -func (c *S3) DeleteBucketPolicy(input *DeleteBucketPolicyInput) (*DeleteBucketPolicyOutput, error) { - req, out := c.DeleteBucketPolicyRequest(input) - err := req.Send() - return out, err +// DeleteBucketCors API operation for Amazon Simple Storage Service. +// +// Deletes the cors configuration information set for the bucket. +// +// To use this operation, you must have permission to perform the s3:PutBucketCORS +// action. The bucket owner has this permission by default and can grant this +// permission to others. +// +// For information more about cors, go to Enabling Cross-Origin Resource Sharing +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the Amazon +// Simple Storage Service Developer Guide. +// +// Related Resources: +// +// * +// +// * RESTOPTIONSobject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketCors for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketCors +func (c *S3) DeleteBucketCors(input *DeleteBucketCorsInput) (*DeleteBucketCorsOutput, error) { + req, out := c.DeleteBucketCorsRequest(input) + return out, req.Send() } -const opDeleteBucketReplication = "DeleteBucketReplication" +// DeleteBucketCorsWithContext is the same as DeleteBucketCors with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketCors for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketCorsWithContext(ctx aws.Context, input *DeleteBucketCorsInput, opts ...request.Option) (*DeleteBucketCorsOutput, error) { + req, out := c.DeleteBucketCorsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteBucketReplicationRequest generates a request for the DeleteBucketReplication operation. -func (c *S3) DeleteBucketReplicationRequest(input *DeleteBucketReplicationInput) (req *request.Request, output *DeleteBucketReplicationOutput) { +const opDeleteBucketEncryption = "DeleteBucketEncryption" + +// DeleteBucketEncryptionRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketEncryption operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketEncryption for more information on using the DeleteBucketEncryption +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketEncryptionRequest method. +// req, resp := client.DeleteBucketEncryptionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketEncryption +func (c *S3) DeleteBucketEncryptionRequest(input *DeleteBucketEncryptionInput) (req *request.Request, output *DeleteBucketEncryptionOutput) { op := &request.Operation{ - Name: opDeleteBucketReplication, + Name: opDeleteBucketEncryption, HTTPMethod: "DELETE", - HTTPPath: "/{Bucket}?replication", + HTTPPath: "/{Bucket}?encryption", } if input == nil { - input = &DeleteBucketReplicationInput{} + input = &DeleteBucketEncryptionInput{} } + output = &DeleteBucketEncryptionOutput{} req = c.newRequest(op, input, output) - output = &DeleteBucketReplicationOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -func (c *S3) DeleteBucketReplication(input *DeleteBucketReplicationInput) (*DeleteBucketReplicationOutput, error) { - req, out := c.DeleteBucketReplicationRequest(input) - err := req.Send() - return out, err +// DeleteBucketEncryption API operation for Amazon Simple Storage Service. +// +// This implementation of the DELETE operation removes default encryption from +// the bucket. For information about the Amazon S3 default encryption feature, +// see Amazon S3 Default Bucket Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev//bucket-encryption.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// To use this operation, you must have permissions to perform the s3:PutEncryptionConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev//using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev//s3-access-control.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Related Resources +// +// * PutBucketEncryption +// +// * GetBucketEncryption +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketEncryption for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketEncryption +func (c *S3) DeleteBucketEncryption(input *DeleteBucketEncryptionInput) (*DeleteBucketEncryptionOutput, error) { + req, out := c.DeleteBucketEncryptionRequest(input) + return out, req.Send() } -const opDeleteBucketTagging = "DeleteBucketTagging" - -// DeleteBucketTaggingRequest generates a request for the DeleteBucketTagging operation. -func (c *S3) DeleteBucketTaggingRequest(input *DeleteBucketTaggingInput) (req *request.Request, output *DeleteBucketTaggingOutput) { +// DeleteBucketEncryptionWithContext is the same as DeleteBucketEncryption with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketEncryption for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketEncryptionWithContext(ctx aws.Context, input *DeleteBucketEncryptionInput, opts ...request.Option) (*DeleteBucketEncryptionOutput, error) { + req, out := c.DeleteBucketEncryptionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDeleteBucketInventoryConfiguration = "DeleteBucketInventoryConfiguration" + +// DeleteBucketInventoryConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketInventoryConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketInventoryConfiguration for more information on using the DeleteBucketInventoryConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketInventoryConfigurationRequest method. +// req, resp := client.DeleteBucketInventoryConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketInventoryConfiguration +func (c *S3) DeleteBucketInventoryConfigurationRequest(input *DeleteBucketInventoryConfigurationInput) (req *request.Request, output *DeleteBucketInventoryConfigurationOutput) { op := &request.Operation{ - Name: opDeleteBucketTagging, + Name: opDeleteBucketInventoryConfiguration, HTTPMethod: "DELETE", - HTTPPath: "/{Bucket}?tagging", + HTTPPath: "/{Bucket}?inventory", } if input == nil { - input = &DeleteBucketTaggingInput{} + input = &DeleteBucketInventoryConfigurationInput{} } + output = &DeleteBucketInventoryConfigurationOutput{} req = c.newRequest(op, input, output) - output = &DeleteBucketTaggingOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Deletes the tags from the bucket. -func (c *S3) DeleteBucketTagging(input *DeleteBucketTaggingInput) (*DeleteBucketTaggingOutput, error) { - req, out := c.DeleteBucketTaggingRequest(input) - err := req.Send() - return out, err +// DeleteBucketInventoryConfiguration API operation for Amazon Simple Storage Service. +// +// Deletes an inventory configuration (identified by the inventory ID) from +// the bucket. +// +// To use this operation, you must have permissions to perform the s3:PutInventoryConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For information about the Amazon S3 inventory feature, see Amazon S3 Inventory +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html). +// +// Operation related to DeleteBucketInventoryConfiguration include: +// +// * GetBucketInventoryConfiguration +// +// * PutBucketInventoryConfiguration +// +// * ListBucketInventoryConfigurations +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketInventoryConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketInventoryConfiguration +func (c *S3) DeleteBucketInventoryConfiguration(input *DeleteBucketInventoryConfigurationInput) (*DeleteBucketInventoryConfigurationOutput, error) { + req, out := c.DeleteBucketInventoryConfigurationRequest(input) + return out, req.Send() } -const opDeleteBucketWebsite = "DeleteBucketWebsite" +// DeleteBucketInventoryConfigurationWithContext is the same as DeleteBucketInventoryConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketInventoryConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketInventoryConfigurationWithContext(ctx aws.Context, input *DeleteBucketInventoryConfigurationInput, opts ...request.Option) (*DeleteBucketInventoryConfigurationOutput, error) { + req, out := c.DeleteBucketInventoryConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteBucketWebsiteRequest generates a request for the DeleteBucketWebsite operation. -func (c *S3) DeleteBucketWebsiteRequest(input *DeleteBucketWebsiteInput) (req *request.Request, output *DeleteBucketWebsiteOutput) { +const opDeleteBucketLifecycle = "DeleteBucketLifecycle" + +// DeleteBucketLifecycleRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketLifecycle operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketLifecycle for more information on using the DeleteBucketLifecycle +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketLifecycleRequest method. +// req, resp := client.DeleteBucketLifecycleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketLifecycle +func (c *S3) DeleteBucketLifecycleRequest(input *DeleteBucketLifecycleInput) (req *request.Request, output *DeleteBucketLifecycleOutput) { op := &request.Operation{ - Name: opDeleteBucketWebsite, + Name: opDeleteBucketLifecycle, HTTPMethod: "DELETE", - HTTPPath: "/{Bucket}?website", + HTTPPath: "/{Bucket}?lifecycle", } if input == nil { - input = &DeleteBucketWebsiteInput{} + input = &DeleteBucketLifecycleInput{} } + output = &DeleteBucketLifecycleOutput{} req = c.newRequest(op, input, output) - output = &DeleteBucketWebsiteOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// This operation removes the website configuration from the bucket. -func (c *S3) DeleteBucketWebsite(input *DeleteBucketWebsiteInput) (*DeleteBucketWebsiteOutput, error) { - req, out := c.DeleteBucketWebsiteRequest(input) - err := req.Send() - return out, err +// DeleteBucketLifecycle API operation for Amazon Simple Storage Service. +// +// Deletes the lifecycle configuration from the specified bucket. Amazon S3 +// removes all the lifecycle configuration rules in the lifecycle subresource +// associated with the bucket. Your objects never expire, and Amazon S3 no longer +// automatically deletes any objects on the basis of rules contained in the +// deleted lifecycle configuration. +// +// To use this operation, you must have permission to perform the s3:PutLifecycleConfiguration +// action. By default, the bucket owner has this permission and the bucket owner +// can grant this permission to others. +// +// There is usually some time lag before lifecycle configuration deletion is +// fully propagated to all the Amazon S3 systems. +// +// For more information about the object expiration, see Elements to Describe +// Lifecycle Actions (https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#intro-lifecycle-rules-actions). +// +// Related actions include: +// +// * PutBucketLifecycleConfiguration +// +// * GetBucketLifecycleConfiguration +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketLifecycle for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketLifecycle +func (c *S3) DeleteBucketLifecycle(input *DeleteBucketLifecycleInput) (*DeleteBucketLifecycleOutput, error) { + req, out := c.DeleteBucketLifecycleRequest(input) + return out, req.Send() } -const opDeleteObject = "DeleteObject" +// DeleteBucketLifecycleWithContext is the same as DeleteBucketLifecycle with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketLifecycle for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketLifecycleWithContext(ctx aws.Context, input *DeleteBucketLifecycleInput, opts ...request.Option) (*DeleteBucketLifecycleOutput, error) { + req, out := c.DeleteBucketLifecycleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteObjectRequest generates a request for the DeleteObject operation. -func (c *S3) DeleteObjectRequest(input *DeleteObjectInput) (req *request.Request, output *DeleteObjectOutput) { +const opDeleteBucketMetricsConfiguration = "DeleteBucketMetricsConfiguration" + +// DeleteBucketMetricsConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketMetricsConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketMetricsConfiguration for more information on using the DeleteBucketMetricsConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketMetricsConfigurationRequest method. +// req, resp := client.DeleteBucketMetricsConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketMetricsConfiguration +func (c *S3) DeleteBucketMetricsConfigurationRequest(input *DeleteBucketMetricsConfigurationInput) (req *request.Request, output *DeleteBucketMetricsConfigurationOutput) { op := &request.Operation{ - Name: opDeleteObject, + Name: opDeleteBucketMetricsConfiguration, HTTPMethod: "DELETE", - HTTPPath: "/{Bucket}/{Key+}", + HTTPPath: "/{Bucket}?metrics", } if input == nil { - input = &DeleteObjectInput{} + input = &DeleteBucketMetricsConfigurationInput{} } + output = &DeleteBucketMetricsConfigurationOutput{} req = c.newRequest(op, input, output) - output = &DeleteObjectOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Removes the null version (if there is one) of an object and inserts a delete -// marker, which becomes the latest version of the object. If there isn't a -// null version, Amazon S3 does not remove any objects. -func (c *S3) DeleteObject(input *DeleteObjectInput) (*DeleteObjectOutput, error) { - req, out := c.DeleteObjectRequest(input) - err := req.Send() - return out, err +// DeleteBucketMetricsConfiguration API operation for Amazon Simple Storage Service. +// +// Deletes a metrics configuration for the Amazon CloudWatch request metrics +// (specified by the metrics configuration ID) from the bucket. Note that this +// doesn't include the daily storage metrics. +// +// To use this operation, you must have permissions to perform the s3:PutMetricsConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For information about CloudWatch request metrics for Amazon S3, see Monitoring +// Metrics with Amazon CloudWatch (https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html). +// +// The following operations are related to DeleteBucketMetricsConfiguration +// +// * GetBucketMetricsConfiguration +// +// * PutBucketMetricsConfiguration +// +// * ListBucketMetricsConfigurations +// +// * Monitoring Metrics with Amazon CloudWatch (https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html) +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketMetricsConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketMetricsConfiguration +func (c *S3) DeleteBucketMetricsConfiguration(input *DeleteBucketMetricsConfigurationInput) (*DeleteBucketMetricsConfigurationOutput, error) { + req, out := c.DeleteBucketMetricsConfigurationRequest(input) + return out, req.Send() } -const opDeleteObjects = "DeleteObjects" +// DeleteBucketMetricsConfigurationWithContext is the same as DeleteBucketMetricsConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketMetricsConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketMetricsConfigurationWithContext(ctx aws.Context, input *DeleteBucketMetricsConfigurationInput, opts ...request.Option) (*DeleteBucketMetricsConfigurationOutput, error) { + req, out := c.DeleteBucketMetricsConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteObjectsRequest generates a request for the DeleteObjects operation. -func (c *S3) DeleteObjectsRequest(input *DeleteObjectsInput) (req *request.Request, output *DeleteObjectsOutput) { +const opDeleteBucketPolicy = "DeleteBucketPolicy" + +// DeleteBucketPolicyRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketPolicy operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketPolicy for more information on using the DeleteBucketPolicy +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketPolicyRequest method. +// req, resp := client.DeleteBucketPolicyRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketPolicy +func (c *S3) DeleteBucketPolicyRequest(input *DeleteBucketPolicyInput) (req *request.Request, output *DeleteBucketPolicyOutput) { op := &request.Operation{ - Name: opDeleteObjects, - HTTPMethod: "POST", - HTTPPath: "/{Bucket}?delete", + Name: opDeleteBucketPolicy, + HTTPMethod: "DELETE", + HTTPPath: "/{Bucket}?policy", } if input == nil { - input = &DeleteObjectsInput{} + input = &DeleteBucketPolicyInput{} } + output = &DeleteBucketPolicyOutput{} req = c.newRequest(op, input, output) - output = &DeleteObjectsOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// This operation enables you to delete multiple objects from a bucket using -// a single HTTP request. You may specify up to 1000 keys. -func (c *S3) DeleteObjects(input *DeleteObjectsInput) (*DeleteObjectsOutput, error) { - req, out := c.DeleteObjectsRequest(input) - err := req.Send() - return out, err +// DeleteBucketPolicy API operation for Amazon Simple Storage Service. +// +// This implementation of the DELETE operation uses the policysubresource to +// delete the policy of a specified bucket. If you are using an identity other +// than the root user of the AWS account that owns the bucket, the calling identity +// must have the DeleteBucketPolicy permissions on the specified bucket and +// belong to the bucket owner's account in order to use this operation. +// +// If you don't have DeleteBucketPolicy permissions, Amazon S3 returns a 403 +// Access Denied error. If you have the correct permissions, but you're notusing +// an identity that belongs to the bucket owner's account, Amazon S3 returns +// a 405 Method Not Allowed error. +// +// As a security precaution, the root user of the AWS account that owns a bucket +// can always use this operation, even if the policy explicitly denies the root +// user the ability to perform this action. +// +// For more information about bucket policies, see Using Bucket Policies and +// UserPolicies (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html). +// +// The following operations are related to DeleteBucketPolicy +// +// * CreateBucket +// +// * DeleteObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketPolicy for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketPolicy +func (c *S3) DeleteBucketPolicy(input *DeleteBucketPolicyInput) (*DeleteBucketPolicyOutput, error) { + req, out := c.DeleteBucketPolicyRequest(input) + return out, req.Send() } -const opGetBucketAcl = "GetBucketAcl" +// DeleteBucketPolicyWithContext is the same as DeleteBucketPolicy with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketPolicy for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketPolicyWithContext(ctx aws.Context, input *DeleteBucketPolicyInput, opts ...request.Option) (*DeleteBucketPolicyOutput, error) { + req, out := c.DeleteBucketPolicyRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketAclRequest generates a request for the GetBucketAcl operation. -func (c *S3) GetBucketAclRequest(input *GetBucketAclInput) (req *request.Request, output *GetBucketAclOutput) { +const opDeleteBucketReplication = "DeleteBucketReplication" + +// DeleteBucketReplicationRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketReplication operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketReplication for more information on using the DeleteBucketReplication +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketReplicationRequest method. +// req, resp := client.DeleteBucketReplicationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketReplication +func (c *S3) DeleteBucketReplicationRequest(input *DeleteBucketReplicationInput) (req *request.Request, output *DeleteBucketReplicationOutput) { op := &request.Operation{ - Name: opGetBucketAcl, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?acl", + Name: opDeleteBucketReplication, + HTTPMethod: "DELETE", + HTTPPath: "/{Bucket}?replication", } if input == nil { - input = &GetBucketAclInput{} + input = &DeleteBucketReplicationInput{} } + output = &DeleteBucketReplicationOutput{} req = c.newRequest(op, input, output) - output = &GetBucketAclOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Gets the access control policy for the bucket. -func (c *S3) GetBucketAcl(input *GetBucketAclInput) (*GetBucketAclOutput, error) { - req, out := c.GetBucketAclRequest(input) - err := req.Send() - return out, err +// DeleteBucketReplication API operation for Amazon Simple Storage Service. +// +// Deletes the replication configuration from the bucket. +// +// To use this operation, you must have permissions to perform the s3:PutReplicationConfiguration +// action. The bucket owner has these permissions by default and can grant it +// to others. For more information about permissions, see Permissions Related +// to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// It can take a while for the deletion of a replication configuration to fully +// propagate. +// +// For information about replication configuration, see Replication (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html) +// in the Amazon S3 Developer Guide. +// +// The following operations are related to DeleteBucketReplication +// +// * PutBucketReplication +// +// * GetBucketReplication +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketReplication for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketReplication +func (c *S3) DeleteBucketReplication(input *DeleteBucketReplicationInput) (*DeleteBucketReplicationOutput, error) { + req, out := c.DeleteBucketReplicationRequest(input) + return out, req.Send() } -const opGetBucketCors = "GetBucketCors" +// DeleteBucketReplicationWithContext is the same as DeleteBucketReplication with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketReplication for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketReplicationWithContext(ctx aws.Context, input *DeleteBucketReplicationInput, opts ...request.Option) (*DeleteBucketReplicationOutput, error) { + req, out := c.DeleteBucketReplicationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketCorsRequest generates a request for the GetBucketCors operation. -func (c *S3) GetBucketCorsRequest(input *GetBucketCorsInput) (req *request.Request, output *GetBucketCorsOutput) { - op := &request.Operation{ - Name: opGetBucketCors, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?cors", - } - - if input == nil { - input = &GetBucketCorsInput{} - } - - req = c.newRequest(op, input, output) - output = &GetBucketCorsOutput{} - req.Data = output - return -} - -// Returns the cors configuration for the bucket. -func (c *S3) GetBucketCors(input *GetBucketCorsInput) (*GetBucketCorsOutput, error) { - req, out := c.GetBucketCorsRequest(input) - err := req.Send() - return out, err -} - -const opGetBucketLifecycle = "GetBucketLifecycle" +const opDeleteBucketTagging = "DeleteBucketTagging" -// GetBucketLifecycleRequest generates a request for the GetBucketLifecycle operation. -func (c *S3) GetBucketLifecycleRequest(input *GetBucketLifecycleInput) (req *request.Request, output *GetBucketLifecycleOutput) { +// DeleteBucketTaggingRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketTagging operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketTagging for more information on using the DeleteBucketTagging +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketTaggingRequest method. +// req, resp := client.DeleteBucketTaggingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketTagging +func (c *S3) DeleteBucketTaggingRequest(input *DeleteBucketTaggingInput) (req *request.Request, output *DeleteBucketTaggingOutput) { op := &request.Operation{ - Name: opGetBucketLifecycle, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?lifecycle", + Name: opDeleteBucketTagging, + HTTPMethod: "DELETE", + HTTPPath: "/{Bucket}?tagging", } if input == nil { - input = &GetBucketLifecycleInput{} + input = &DeleteBucketTaggingInput{} } + output = &DeleteBucketTaggingOutput{} req = c.newRequest(op, input, output) - output = &GetBucketLifecycleOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Deprecated, see the GetBucketLifecycleConfiguration operation. -func (c *S3) GetBucketLifecycle(input *GetBucketLifecycleInput) (*GetBucketLifecycleOutput, error) { - req, out := c.GetBucketLifecycleRequest(input) - err := req.Send() - return out, err +// DeleteBucketTagging API operation for Amazon Simple Storage Service. +// +// Deletes the tags from the bucket. +// +// To use this operation, you must have permission to perform the s3:PutBucketTagging +// action. By default, the bucket owner has this permission and can grant this +// permission to others. +// +// The following operations are related to DeleteBucketTagging +// +// * GetBucketTagging +// +// * PutBucketTagging +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketTagging for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketTagging +func (c *S3) DeleteBucketTagging(input *DeleteBucketTaggingInput) (*DeleteBucketTaggingOutput, error) { + req, out := c.DeleteBucketTaggingRequest(input) + return out, req.Send() } -const opGetBucketLifecycleConfiguration = "GetBucketLifecycleConfiguration" +// DeleteBucketTaggingWithContext is the same as DeleteBucketTagging with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketTagging for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketTaggingWithContext(ctx aws.Context, input *DeleteBucketTaggingInput, opts ...request.Option) (*DeleteBucketTaggingOutput, error) { + req, out := c.DeleteBucketTaggingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketLifecycleConfigurationRequest generates a request for the GetBucketLifecycleConfiguration operation. -func (c *S3) GetBucketLifecycleConfigurationRequest(input *GetBucketLifecycleConfigurationInput) (req *request.Request, output *GetBucketLifecycleConfigurationOutput) { +const opDeleteBucketWebsite = "DeleteBucketWebsite" + +// DeleteBucketWebsiteRequest generates a "aws/request.Request" representing the +// client's request for the DeleteBucketWebsite operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteBucketWebsite for more information on using the DeleteBucketWebsite +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteBucketWebsiteRequest method. +// req, resp := client.DeleteBucketWebsiteRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketWebsite +func (c *S3) DeleteBucketWebsiteRequest(input *DeleteBucketWebsiteInput) (req *request.Request, output *DeleteBucketWebsiteOutput) { op := &request.Operation{ - Name: opGetBucketLifecycleConfiguration, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?lifecycle", + Name: opDeleteBucketWebsite, + HTTPMethod: "DELETE", + HTTPPath: "/{Bucket}?website", } if input == nil { - input = &GetBucketLifecycleConfigurationInput{} + input = &DeleteBucketWebsiteInput{} } + output = &DeleteBucketWebsiteOutput{} req = c.newRequest(op, input, output) - output = &GetBucketLifecycleConfigurationOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Returns the lifecycle configuration information set on the bucket. -func (c *S3) GetBucketLifecycleConfiguration(input *GetBucketLifecycleConfigurationInput) (*GetBucketLifecycleConfigurationOutput, error) { - req, out := c.GetBucketLifecycleConfigurationRequest(input) - err := req.Send() - return out, err +// DeleteBucketWebsite API operation for Amazon Simple Storage Service. +// +// This operation removes the website configuration for a bucket. Amazon S3 +// returns a 200 OK response upon successfully deleting a website configuration +// on the specified bucket. You will get a 200 OK response if the website configuration +// you are trying to delete does not exist on the bucket. Amazon S3 returns +// a 404 response if the bucket specified in the request does not exist. +// +// This DELETE operation requires the S3:DeleteBucketWebsite permission. By +// default, only the bucket owner can delete the website configuration attached +// to a bucket. However, bucket owners can grant other users permission to delete +// the website configuration by writing a bucket policy granting them the S3:DeleteBucketWebsite +// permission. +// +// For more information about hosting websites, see Hosting Websites on Amazon +// S3 (https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html). +// +// The following operations are related to DeleteBucketWebsite +// +// * GetBucketWebsite +// +// * PutBucketWebsite +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteBucketWebsite for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketWebsite +func (c *S3) DeleteBucketWebsite(input *DeleteBucketWebsiteInput) (*DeleteBucketWebsiteOutput, error) { + req, out := c.DeleteBucketWebsiteRequest(input) + return out, req.Send() } -const opGetBucketLocation = "GetBucketLocation" +// DeleteBucketWebsiteWithContext is the same as DeleteBucketWebsite with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteBucketWebsite for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteBucketWebsiteWithContext(ctx aws.Context, input *DeleteBucketWebsiteInput, opts ...request.Option) (*DeleteBucketWebsiteOutput, error) { + req, out := c.DeleteBucketWebsiteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketLocationRequest generates a request for the GetBucketLocation operation. -func (c *S3) GetBucketLocationRequest(input *GetBucketLocationInput) (req *request.Request, output *GetBucketLocationOutput) { +const opDeleteObject = "DeleteObject" + +// DeleteObjectRequest generates a "aws/request.Request" representing the +// client's request for the DeleteObject operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteObject for more information on using the DeleteObject +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteObjectRequest method. +// req, resp := client.DeleteObjectRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObject +func (c *S3) DeleteObjectRequest(input *DeleteObjectInput) (req *request.Request, output *DeleteObjectOutput) { op := &request.Operation{ - Name: opGetBucketLocation, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?location", + Name: opDeleteObject, + HTTPMethod: "DELETE", + HTTPPath: "/{Bucket}/{Key+}", } if input == nil { - input = &GetBucketLocationInput{} + input = &DeleteObjectInput{} } + output = &DeleteObjectOutput{} req = c.newRequest(op, input, output) - output = &GetBucketLocationOutput{} - req.Data = output return } -// Returns the region the bucket resides in. -func (c *S3) GetBucketLocation(input *GetBucketLocationInput) (*GetBucketLocationOutput, error) { - req, out := c.GetBucketLocationRequest(input) - err := req.Send() - return out, err +// DeleteObject API operation for Amazon Simple Storage Service. +// +// Removes the null version (if there is one) of an object and inserts a delete +// marker, which becomes the latest version of the object. If there isn't a +// null version, Amazon S3 does not remove any objects. +// +// To remove a specific version, you must be the bucket owner and you must use +// the version Id subresource. Using this subresource permanently deletes the +// version. If the object deleted is a delete marker, Amazon S3 sets the response +// header, x-amz-delete-marker, to true. +// +// If the object you want to delete is in a bucket where the bucket versioning +// configurationis MFA Delete enabled, you must include the x-amz-mfa request +// header in the DELETE versionId request. Requests that include x-amz-mfa must +// use HTTPS. +// +// For more information about MFA Delete, see Using MFA Delete (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMFADelete.html). +// To see sample requests that use versioning, see Sample Request (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html#ExampleVersionObjectDelete). +// +// You can delete objects by explicitly calling the DELETE Object API or configure +// its lifecycle (PutBucketLifecycle) to enable Amazon S3 to remove them for +// you. If you want to block users or accounts from removing or deleting objects +// from your bucket you must deny them the s3:DeleteObject, s3:DeleteObjectVersion +// and s3:PutLifeCycleConfiguration actions. +// +// The following operation is related to DeleteObject +// +// * PutObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteObject for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObject +func (c *S3) DeleteObject(input *DeleteObjectInput) (*DeleteObjectOutput, error) { + req, out := c.DeleteObjectRequest(input) + return out, req.Send() } -const opGetBucketLogging = "GetBucketLogging" +// DeleteObjectWithContext is the same as DeleteObject with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteObject for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteObjectWithContext(ctx aws.Context, input *DeleteObjectInput, opts ...request.Option) (*DeleteObjectOutput, error) { + req, out := c.DeleteObjectRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketLoggingRequest generates a request for the GetBucketLogging operation. -func (c *S3) GetBucketLoggingRequest(input *GetBucketLoggingInput) (req *request.Request, output *GetBucketLoggingOutput) { +const opDeleteObjectTagging = "DeleteObjectTagging" + +// DeleteObjectTaggingRequest generates a "aws/request.Request" representing the +// client's request for the DeleteObjectTagging operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteObjectTagging for more information on using the DeleteObjectTagging +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteObjectTaggingRequest method. +// req, resp := client.DeleteObjectTaggingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTagging +func (c *S3) DeleteObjectTaggingRequest(input *DeleteObjectTaggingInput) (req *request.Request, output *DeleteObjectTaggingOutput) { op := &request.Operation{ - Name: opGetBucketLogging, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?logging", + Name: opDeleteObjectTagging, + HTTPMethod: "DELETE", + HTTPPath: "/{Bucket}/{Key+}?tagging", } if input == nil { - input = &GetBucketLoggingInput{} + input = &DeleteObjectTaggingInput{} } + output = &DeleteObjectTaggingOutput{} req = c.newRequest(op, input, output) - output = &GetBucketLoggingOutput{} - req.Data = output return } -// Returns the logging status of a bucket and the permissions users have to -// view and modify that status. To use GET, you must be the bucket owner. -func (c *S3) GetBucketLogging(input *GetBucketLoggingInput) (*GetBucketLoggingOutput, error) { - req, out := c.GetBucketLoggingRequest(input) - err := req.Send() - return out, err +// DeleteObjectTagging API operation for Amazon Simple Storage Service. +// +// Removes the entire tag set from the specified object. For more information +// about managing object tags, see Object Tagging (https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete). +// +// To use this operation, you must have permission to perform the s3:DeleteObjectTagging +// action. +// +// To delete tags of a specific object version, add the versionId query parameter +// in the request. You will need permission for the s3:DeleteObjectVersionTagging +// action. +// +// The following operations are related to DeleteBucketMetricsConfiguration +// +// * PutObjectTagging +// +// * GetObjectTagging +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteObjectTagging for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTagging +func (c *S3) DeleteObjectTagging(input *DeleteObjectTaggingInput) (*DeleteObjectTaggingOutput, error) { + req, out := c.DeleteObjectTaggingRequest(input) + return out, req.Send() } -const opGetBucketNotification = "GetBucketNotification" +// DeleteObjectTaggingWithContext is the same as DeleteObjectTagging with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteObjectTagging for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteObjectTaggingWithContext(ctx aws.Context, input *DeleteObjectTaggingInput, opts ...request.Option) (*DeleteObjectTaggingOutput, error) { + req, out := c.DeleteObjectTaggingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketNotificationRequest generates a request for the GetBucketNotification operation. -func (c *S3) GetBucketNotificationRequest(input *GetBucketNotificationConfigurationRequest) (req *request.Request, output *NotificationConfigurationDeprecated) { +const opDeleteObjects = "DeleteObjects" + +// DeleteObjectsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteObjects operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteObjects for more information on using the DeleteObjects +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteObjectsRequest method. +// req, resp := client.DeleteObjectsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjects +func (c *S3) DeleteObjectsRequest(input *DeleteObjectsInput) (req *request.Request, output *DeleteObjectsOutput) { op := &request.Operation{ - Name: opGetBucketNotification, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?notification", + Name: opDeleteObjects, + HTTPMethod: "POST", + HTTPPath: "/{Bucket}?delete", } if input == nil { - input = &GetBucketNotificationConfigurationRequest{} + input = &DeleteObjectsInput{} } + output = &DeleteObjectsOutput{} req = c.newRequest(op, input, output) - output = &NotificationConfigurationDeprecated{} - req.Data = output return } -// Deprecated, see the GetBucketNotificationConfiguration operation. -func (c *S3) GetBucketNotification(input *GetBucketNotificationConfigurationRequest) (*NotificationConfigurationDeprecated, error) { - req, out := c.GetBucketNotificationRequest(input) - err := req.Send() - return out, err +// DeleteObjects API operation for Amazon Simple Storage Service. +// +// This operation enables you to delete multiple objects from a bucket using +// a single HTTP request. If you know the object keys that you want to delete, +// then this operation provides a suitable alternative to sending individual +// delete requests, reducing per-request overhead. +// +// The request contains a list of up to 1000 keys that you want to delete. In +// the XML, you provide the object key names, and optionally, version IDs if +// you want to delete a specific version of the object from a versioning-enabled +// bucket. For each key, Amazon S3 performs a delete operation and returns the +// result of that delete, success, or failure, in the response. Note that, if +// the object specified in the request is not found, Amazon S3 returns the result +// as deleted. +// +// The operation supports two modes for the response; verbose and quiet. By +// default, the operation uses verbose mode in which the response includes the +// result of deletion of each key in your request. In quiet mode the response +// includes only keys where the delete operation encountered an error. For a +// successful deletion, the operation does not return any information about +// the delete in the response body. +// +// When performing this operation on an MFA Delete enabled bucket, that attempts +// to delete any versioned objects, you must include an MFA token. If you do +// not provide one, the entire request will fail, even if there are non versioned +// objects you are attempting to delete. If you provide an invalid token, whether +// there are versioned keys in the request or not, the entire Multi-Object Delete +// request will fail. For information about MFA Delete, see MFA Delete (https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html#MultiFactorAuthenticationDelete). +// +// Finally, the Content-MD5 header is required for all Multi-Object Delete requests. +// Amazon S3 uses the header value to ensure that your request body has not +// be altered in transit. +// +// The following operations are related to DeleteObjects +// +// * CreateMultipartUpload +// +// * UploadPart +// +// * CompleteMultipartUpload +// +// * ListParts +// +// * AbortMultipartUpload +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeleteObjects for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjects +func (c *S3) DeleteObjects(input *DeleteObjectsInput) (*DeleteObjectsOutput, error) { + req, out := c.DeleteObjectsRequest(input) + return out, req.Send() } -const opGetBucketNotificationConfiguration = "GetBucketNotificationConfiguration" +// DeleteObjectsWithContext is the same as DeleteObjects with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteObjects for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeleteObjectsWithContext(ctx aws.Context, input *DeleteObjectsInput, opts ...request.Option) (*DeleteObjectsOutput, error) { + req, out := c.DeleteObjectsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketNotificationConfigurationRequest generates a request for the GetBucketNotificationConfiguration operation. -func (c *S3) GetBucketNotificationConfigurationRequest(input *GetBucketNotificationConfigurationRequest) (req *request.Request, output *NotificationConfiguration) { +const opDeletePublicAccessBlock = "DeletePublicAccessBlock" + +// DeletePublicAccessBlockRequest generates a "aws/request.Request" representing the +// client's request for the DeletePublicAccessBlock operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeletePublicAccessBlock for more information on using the DeletePublicAccessBlock +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeletePublicAccessBlockRequest method. +// req, resp := client.DeletePublicAccessBlockRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletePublicAccessBlock +func (c *S3) DeletePublicAccessBlockRequest(input *DeletePublicAccessBlockInput) (req *request.Request, output *DeletePublicAccessBlockOutput) { op := &request.Operation{ - Name: opGetBucketNotificationConfiguration, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?notification", + Name: opDeletePublicAccessBlock, + HTTPMethod: "DELETE", + HTTPPath: "/{Bucket}?publicAccessBlock", } if input == nil { - input = &GetBucketNotificationConfigurationRequest{} + input = &DeletePublicAccessBlockInput{} } + output = &DeletePublicAccessBlockOutput{} req = c.newRequest(op, input, output) - output = &NotificationConfiguration{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Returns the notification configuration of a bucket. -func (c *S3) GetBucketNotificationConfiguration(input *GetBucketNotificationConfigurationRequest) (*NotificationConfiguration, error) { - req, out := c.GetBucketNotificationConfigurationRequest(input) - err := req.Send() - return out, err +// DeletePublicAccessBlock API operation for Amazon Simple Storage Service. +// +// Removes the PublicAccessBlock configuration for an Amazon S3 bucket. In order +// to use this operation, you must have the s3:PutBucketPublicAccessBlock permission. +// For more information about permissions, see Permissions Related to Bucket +// Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// The following operations are related to DeleteBucketMetricsConfiguration: +// +// * Using Amazon S3 Block Public Access (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html) +// +// * GetPublicAccessBlock +// +// * PutPublicAccessBlock +// +// * GetBucketPolicyStatus +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation DeletePublicAccessBlock for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletePublicAccessBlock +func (c *S3) DeletePublicAccessBlock(input *DeletePublicAccessBlockInput) (*DeletePublicAccessBlockOutput, error) { + req, out := c.DeletePublicAccessBlockRequest(input) + return out, req.Send() } -const opGetBucketPolicy = "GetBucketPolicy" - -// GetBucketPolicyRequest generates a request for the GetBucketPolicy operation. -func (c *S3) GetBucketPolicyRequest(input *GetBucketPolicyInput) (req *request.Request, output *GetBucketPolicyOutput) { +// DeletePublicAccessBlockWithContext is the same as DeletePublicAccessBlock with the addition of +// the ability to pass a context and additional request options. +// +// See DeletePublicAccessBlock for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) DeletePublicAccessBlockWithContext(ctx aws.Context, input *DeletePublicAccessBlockInput, opts ...request.Option) (*DeletePublicAccessBlockOutput, error) { + req, out := c.DeletePublicAccessBlockRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetBucketAccelerateConfiguration = "GetBucketAccelerateConfiguration" + +// GetBucketAccelerateConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketAccelerateConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketAccelerateConfiguration for more information on using the GetBucketAccelerateConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketAccelerateConfigurationRequest method. +// req, resp := client.GetBucketAccelerateConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfiguration +func (c *S3) GetBucketAccelerateConfigurationRequest(input *GetBucketAccelerateConfigurationInput) (req *request.Request, output *GetBucketAccelerateConfigurationOutput) { op := &request.Operation{ - Name: opGetBucketPolicy, + Name: opGetBucketAccelerateConfiguration, HTTPMethod: "GET", - HTTPPath: "/{Bucket}?policy", + HTTPPath: "/{Bucket}?accelerate", } if input == nil { - input = &GetBucketPolicyInput{} + input = &GetBucketAccelerateConfigurationInput{} } + output = &GetBucketAccelerateConfigurationOutput{} req = c.newRequest(op, input, output) - output = &GetBucketPolicyOutput{} - req.Data = output return } -// Returns the policy of a specified bucket. -func (c *S3) GetBucketPolicy(input *GetBucketPolicyInput) (*GetBucketPolicyOutput, error) { - req, out := c.GetBucketPolicyRequest(input) - err := req.Send() - return out, err -} - -const opGetBucketReplication = "GetBucketReplication" - -// GetBucketReplicationRequest generates a request for the GetBucketReplication operation. -func (c *S3) GetBucketReplicationRequest(input *GetBucketReplicationInput) (req *request.Request, output *GetBucketReplicationOutput) { - op := &request.Operation{ - Name: opGetBucketReplication, - HTTPMethod: "GET", - HTTPPath: "/{Bucket}?replication", - } - - if input == nil { - input = &GetBucketReplicationInput{} - } - - req = c.newRequest(op, input, output) - output = &GetBucketReplicationOutput{} - req.Data = output - return +// GetBucketAccelerateConfiguration API operation for Amazon Simple Storage Service. +// +// This implementation of the GET operation uses the accelerate subresource +// to return the Transfer Acceleration state of a bucket, which is either Enabled +// or Suspended. Amazon S3 Transfer Acceleration is a bucket-level feature that +// enables you to perform faster data transfers to and from Amazon S3. +// +// To use this operation, you must have permission to perform the s3:GetAccelerateConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev//using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev//s3-access-control.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// You set the Transfer Acceleration state of an existing bucket to Enabled +// or Suspended by using the PutBucketAccelerateConfiguration operation. +// +// A GET accelerate request does not return a state value for a bucket that +// has no transfer acceleration state. A bucket has no Transfer Acceleration +// state, if a state has never been set on the bucket. +// +// For more information on transfer acceleration, see Transfer Acceleration +// (https://docs.aws.amazon.com/AmazonS3/latest/dev//transfer-acceleration.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Related Resources +// +// * PutBucketAccelerateConfiguration +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketAccelerateConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfiguration +func (c *S3) GetBucketAccelerateConfiguration(input *GetBucketAccelerateConfigurationInput) (*GetBucketAccelerateConfigurationOutput, error) { + req, out := c.GetBucketAccelerateConfigurationRequest(input) + return out, req.Send() } -func (c *S3) GetBucketReplication(input *GetBucketReplicationInput) (*GetBucketReplicationOutput, error) { - req, out := c.GetBucketReplicationRequest(input) - err := req.Send() - return out, err +// GetBucketAccelerateConfigurationWithContext is the same as GetBucketAccelerateConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketAccelerateConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketAccelerateConfigurationWithContext(ctx aws.Context, input *GetBucketAccelerateConfigurationInput, opts ...request.Option) (*GetBucketAccelerateConfigurationOutput, error) { + req, out := c.GetBucketAccelerateConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opGetBucketRequestPayment = "GetBucketRequestPayment" +const opGetBucketAcl = "GetBucketAcl" -// GetBucketRequestPaymentRequest generates a request for the GetBucketRequestPayment operation. -func (c *S3) GetBucketRequestPaymentRequest(input *GetBucketRequestPaymentInput) (req *request.Request, output *GetBucketRequestPaymentOutput) { +// GetBucketAclRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketAcl operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketAcl for more information on using the GetBucketAcl +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketAclRequest method. +// req, resp := client.GetBucketAclRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAcl +func (c *S3) GetBucketAclRequest(input *GetBucketAclInput) (req *request.Request, output *GetBucketAclOutput) { op := &request.Operation{ - Name: opGetBucketRequestPayment, + Name: opGetBucketAcl, HTTPMethod: "GET", - HTTPPath: "/{Bucket}?requestPayment", + HTTPPath: "/{Bucket}?acl", } if input == nil { - input = &GetBucketRequestPaymentInput{} + input = &GetBucketAclInput{} } + output = &GetBucketAclOutput{} req = c.newRequest(op, input, output) - output = &GetBucketRequestPaymentOutput{} - req.Data = output return } -// Returns the request payment configuration of a bucket. -func (c *S3) GetBucketRequestPayment(input *GetBucketRequestPaymentInput) (*GetBucketRequestPaymentOutput, error) { - req, out := c.GetBucketRequestPaymentRequest(input) - err := req.Send() - return out, err +// GetBucketAcl API operation for Amazon Simple Storage Service. +// +// This implementation of the GET operation uses the acl subresource to return +// the access control list (ACL) of a bucket. To use GET to return the ACL of +// the bucket, you must have READ_ACP access to the bucket. If READ_ACP permission +// is granted to the anonymous user, you can return the ACL of the bucket without +// using an authorization header. +// +// Related Resources +// +// * +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketAcl for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAcl +func (c *S3) GetBucketAcl(input *GetBucketAclInput) (*GetBucketAclOutput, error) { + req, out := c.GetBucketAclRequest(input) + return out, req.Send() } -const opGetBucketTagging = "GetBucketTagging" +// GetBucketAclWithContext is the same as GetBucketAcl with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketAcl for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketAclWithContext(ctx aws.Context, input *GetBucketAclInput, opts ...request.Option) (*GetBucketAclOutput, error) { + req, out := c.GetBucketAclRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketTaggingRequest generates a request for the GetBucketTagging operation. -func (c *S3) GetBucketTaggingRequest(input *GetBucketTaggingInput) (req *request.Request, output *GetBucketTaggingOutput) { +const opGetBucketAnalyticsConfiguration = "GetBucketAnalyticsConfiguration" + +// GetBucketAnalyticsConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketAnalyticsConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketAnalyticsConfiguration for more information on using the GetBucketAnalyticsConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketAnalyticsConfigurationRequest method. +// req, resp := client.GetBucketAnalyticsConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfiguration +func (c *S3) GetBucketAnalyticsConfigurationRequest(input *GetBucketAnalyticsConfigurationInput) (req *request.Request, output *GetBucketAnalyticsConfigurationOutput) { op := &request.Operation{ - Name: opGetBucketTagging, + Name: opGetBucketAnalyticsConfiguration, HTTPMethod: "GET", - HTTPPath: "/{Bucket}?tagging", + HTTPPath: "/{Bucket}?analytics", } if input == nil { - input = &GetBucketTaggingInput{} + input = &GetBucketAnalyticsConfigurationInput{} } + output = &GetBucketAnalyticsConfigurationOutput{} req = c.newRequest(op, input, output) - output = &GetBucketTaggingOutput{} - req.Data = output return } -// Returns the tag set associated with the bucket. -func (c *S3) GetBucketTagging(input *GetBucketTaggingInput) (*GetBucketTaggingOutput, error) { - req, out := c.GetBucketTaggingRequest(input) - err := req.Send() - return out, err +// GetBucketAnalyticsConfiguration API operation for Amazon Simple Storage Service. +// +// This implementation of the GET operation returns an analytics configuration +// (identified by the analytics configuration ID) from the bucket. +// +// To use this operation, you must have permissions to perform the s3:GetAnalyticsConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// For information about Amazon S3 analytics feature, see Amazon S3 Analytics +// – Storage Class Analysis (https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Related Resources +// +// * +// +// * +// +// * +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketAnalyticsConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfiguration +func (c *S3) GetBucketAnalyticsConfiguration(input *GetBucketAnalyticsConfigurationInput) (*GetBucketAnalyticsConfigurationOutput, error) { + req, out := c.GetBucketAnalyticsConfigurationRequest(input) + return out, req.Send() } -const opGetBucketVersioning = "GetBucketVersioning" +// GetBucketAnalyticsConfigurationWithContext is the same as GetBucketAnalyticsConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketAnalyticsConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketAnalyticsConfigurationWithContext(ctx aws.Context, input *GetBucketAnalyticsConfigurationInput, opts ...request.Option) (*GetBucketAnalyticsConfigurationOutput, error) { + req, out := c.GetBucketAnalyticsConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketVersioningRequest generates a request for the GetBucketVersioning operation. -func (c *S3) GetBucketVersioningRequest(input *GetBucketVersioningInput) (req *request.Request, output *GetBucketVersioningOutput) { +const opGetBucketCors = "GetBucketCors" + +// GetBucketCorsRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketCors operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketCors for more information on using the GetBucketCors +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketCorsRequest method. +// req, resp := client.GetBucketCorsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCors +func (c *S3) GetBucketCorsRequest(input *GetBucketCorsInput) (req *request.Request, output *GetBucketCorsOutput) { op := &request.Operation{ - Name: opGetBucketVersioning, + Name: opGetBucketCors, HTTPMethod: "GET", - HTTPPath: "/{Bucket}?versioning", + HTTPPath: "/{Bucket}?cors", } if input == nil { - input = &GetBucketVersioningInput{} + input = &GetBucketCorsInput{} } + output = &GetBucketCorsOutput{} req = c.newRequest(op, input, output) - output = &GetBucketVersioningOutput{} - req.Data = output return } -// Returns the versioning state of a bucket. -func (c *S3) GetBucketVersioning(input *GetBucketVersioningInput) (*GetBucketVersioningOutput, error) { - req, out := c.GetBucketVersioningRequest(input) - err := req.Send() - return out, err +// GetBucketCors API operation for Amazon Simple Storage Service. +// +// Returns the cors configuration information set for the bucket. +// +// To use this operation, you must have permission to perform the s3:GetBucketCORS +// action. By default, the bucket owner has this permission and can grant it +// to others. +// +// To learn more cors, see Enabling Cross-Origin Resource Sharing (https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html)Enabling +// Cross-Origin Resource Sharing. +// +// The following operations are related to GetBucketCors: +// +// * PutBucketCors +// +// * DeleteBucketCors +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketCors for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCors +func (c *S3) GetBucketCors(input *GetBucketCorsInput) (*GetBucketCorsOutput, error) { + req, out := c.GetBucketCorsRequest(input) + return out, req.Send() } -const opGetBucketWebsite = "GetBucketWebsite" +// GetBucketCorsWithContext is the same as GetBucketCors with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketCors for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketCorsWithContext(ctx aws.Context, input *GetBucketCorsInput, opts ...request.Option) (*GetBucketCorsOutput, error) { + req, out := c.GetBucketCorsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetBucketWebsiteRequest generates a request for the GetBucketWebsite operation. -func (c *S3) GetBucketWebsiteRequest(input *GetBucketWebsiteInput) (req *request.Request, output *GetBucketWebsiteOutput) { +const opGetBucketEncryption = "GetBucketEncryption" + +// GetBucketEncryptionRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketEncryption operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketEncryption for more information on using the GetBucketEncryption +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketEncryptionRequest method. +// req, resp := client.GetBucketEncryptionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryption +func (c *S3) GetBucketEncryptionRequest(input *GetBucketEncryptionInput) (req *request.Request, output *GetBucketEncryptionOutput) { op := &request.Operation{ - Name: opGetBucketWebsite, + Name: opGetBucketEncryption, HTTPMethod: "GET", - HTTPPath: "/{Bucket}?website", + HTTPPath: "/{Bucket}?encryption", } if input == nil { - input = &GetBucketWebsiteInput{} + input = &GetBucketEncryptionInput{} } + output = &GetBucketEncryptionOutput{} req = c.newRequest(op, input, output) - output = &GetBucketWebsiteOutput{} - req.Data = output return } -// Returns the website configuration for a bucket. -func (c *S3) GetBucketWebsite(input *GetBucketWebsiteInput) (*GetBucketWebsiteOutput, error) { - req, out := c.GetBucketWebsiteRequest(input) - err := req.Send() - return out, err +// GetBucketEncryption API operation for Amazon Simple Storage Service. +// +// Returns the default encryption configuration for an Amazon S3 bucket. For +// information about the Amazon S3 default encryption feature, see Amazon S3 +// Default Bucket Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html). +// +// To use this operation, you must have permission to perform the s3:GetEncryptionConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// The following operations are related to GetBucketEncryption: +// +// * PutBucketEncryption +// +// * DeleteBucketEncryption +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketEncryption for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryption +func (c *S3) GetBucketEncryption(input *GetBucketEncryptionInput) (*GetBucketEncryptionOutput, error) { + req, out := c.GetBucketEncryptionRequest(input) + return out, req.Send() } -const opGetObject = "GetObject" - -// GetObjectRequest generates a request for the GetObject operation. -func (c *S3) GetObjectRequest(input *GetObjectInput) (req *request.Request, output *GetObjectOutput) { +// GetBucketEncryptionWithContext is the same as GetBucketEncryption with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketEncryption for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketEncryptionWithContext(ctx aws.Context, input *GetBucketEncryptionInput, opts ...request.Option) (*GetBucketEncryptionOutput, error) { + req, out := c.GetBucketEncryptionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetBucketInventoryConfiguration = "GetBucketInventoryConfiguration" + +// GetBucketInventoryConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketInventoryConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketInventoryConfiguration for more information on using the GetBucketInventoryConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketInventoryConfigurationRequest method. +// req, resp := client.GetBucketInventoryConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfiguration +func (c *S3) GetBucketInventoryConfigurationRequest(input *GetBucketInventoryConfigurationInput) (req *request.Request, output *GetBucketInventoryConfigurationOutput) { op := &request.Operation{ - Name: opGetObject, + Name: opGetBucketInventoryConfiguration, HTTPMethod: "GET", - HTTPPath: "/{Bucket}/{Key+}", + HTTPPath: "/{Bucket}?inventory", } if input == nil { - input = &GetObjectInput{} + input = &GetBucketInventoryConfigurationInput{} } + output = &GetBucketInventoryConfigurationOutput{} req = c.newRequest(op, input, output) - output = &GetObjectOutput{} - req.Data = output return } -// Retrieves objects from Amazon S3. -func (c *S3) GetObject(input *GetObjectInput) (*GetObjectOutput, error) { - req, out := c.GetObjectRequest(input) - err := req.Send() - return out, err +// GetBucketInventoryConfiguration API operation for Amazon Simple Storage Service. +// +// Returns an inventory configuration (identified by the inventory configuration +// ID) from the bucket. +// +// To use this operation, you must have permissions to perform the s3:GetInventoryConfiguration +// action. The bucket owner has this permission by default and can grant this +// permission to others. For more information about permissions, see Permissions +// Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For information about the Amazon S3 inventory feature, see Amazon S3 Inventory +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html). +// +// The following operations are related to GetBucketInventoryConfiguration: +// +// * DeleteBucketInventoryConfiguration +// +// * ListBucketInventoryConfigurations +// +// * PutBucketInventoryConfiguration +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketInventoryConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfiguration +func (c *S3) GetBucketInventoryConfiguration(input *GetBucketInventoryConfigurationInput) (*GetBucketInventoryConfigurationOutput, error) { + req, out := c.GetBucketInventoryConfigurationRequest(input) + return out, req.Send() } -const opGetObjectAcl = "GetObjectAcl" +// GetBucketInventoryConfigurationWithContext is the same as GetBucketInventoryConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketInventoryConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketInventoryConfigurationWithContext(ctx aws.Context, input *GetBucketInventoryConfigurationInput, opts ...request.Option) (*GetBucketInventoryConfigurationOutput, error) { + req, out := c.GetBucketInventoryConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetObjectAclRequest generates a request for the GetObjectAcl operation. -func (c *S3) GetObjectAclRequest(input *GetObjectAclInput) (req *request.Request, output *GetObjectAclOutput) { +const opGetBucketLifecycle = "GetBucketLifecycle" + +// GetBucketLifecycleRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketLifecycle operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketLifecycle for more information on using the GetBucketLifecycle +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketLifecycleRequest method. +// req, resp := client.GetBucketLifecycleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycle +// +// Deprecated: GetBucketLifecycle has been deprecated +func (c *S3) GetBucketLifecycleRequest(input *GetBucketLifecycleInput) (req *request.Request, output *GetBucketLifecycleOutput) { + if c.Client.Config.Logger != nil { + c.Client.Config.Logger.Log("This operation, GetBucketLifecycle, has been deprecated") + } op := &request.Operation{ - Name: opGetObjectAcl, + Name: opGetBucketLifecycle, HTTPMethod: "GET", - HTTPPath: "/{Bucket}/{Key+}?acl", + HTTPPath: "/{Bucket}?lifecycle", } if input == nil { - input = &GetObjectAclInput{} + input = &GetBucketLifecycleInput{} } + output = &GetBucketLifecycleOutput{} req = c.newRequest(op, input, output) - output = &GetObjectAclOutput{} - req.Data = output return } -// Returns the access control list (ACL) of an object. -func (c *S3) GetObjectAcl(input *GetObjectAclInput) (*GetObjectAclOutput, error) { - req, out := c.GetObjectAclRequest(input) - err := req.Send() - return out, err +// GetBucketLifecycle API operation for Amazon Simple Storage Service. +// +// +// For an updated version of this API, see GetBucketLifecycleConfiguration. +// If you configured a bucket lifecycle using the filter element, you should +// the updated version of this topic. This topic is provided for backward compatibility. +// +// Returns the lifecycle configuration information set on the bucket. For information +// about lifecycle configuration, see Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html). +// +// To use this operation, you must have permission to perform the s3:GetLifecycleConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// GetBucketLifecycle has the following special error: +// +// * Error code: NoSuchLifecycleConfiguration Description: The lifecycle +// configuration does not exist. HTTP Status Code: 404 Not Found SOAP Fault +// Code Prefix: Client +// +// The following operations are related to GetBucketLifecycle: +// +// * GetBucketLifecycleConfiguration +// +// * PutBucketLifecycle +// +// * DeleteBucketLifecycle +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketLifecycle for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycle +// +// Deprecated: GetBucketLifecycle has been deprecated +func (c *S3) GetBucketLifecycle(input *GetBucketLifecycleInput) (*GetBucketLifecycleOutput, error) { + req, out := c.GetBucketLifecycleRequest(input) + return out, req.Send() } -const opGetObjectTorrent = "GetObjectTorrent" +// GetBucketLifecycleWithContext is the same as GetBucketLifecycle with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketLifecycle for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +// +// Deprecated: GetBucketLifecycleWithContext has been deprecated +func (c *S3) GetBucketLifecycleWithContext(ctx aws.Context, input *GetBucketLifecycleInput, opts ...request.Option) (*GetBucketLifecycleOutput, error) { + req, out := c.GetBucketLifecycleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetObjectTorrentRequest generates a request for the GetObjectTorrent operation. -func (c *S3) GetObjectTorrentRequest(input *GetObjectTorrentInput) (req *request.Request, output *GetObjectTorrentOutput) { +const opGetBucketLifecycleConfiguration = "GetBucketLifecycleConfiguration" + +// GetBucketLifecycleConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketLifecycleConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketLifecycleConfiguration for more information on using the GetBucketLifecycleConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketLifecycleConfigurationRequest method. +// req, resp := client.GetBucketLifecycleConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfiguration +func (c *S3) GetBucketLifecycleConfigurationRequest(input *GetBucketLifecycleConfigurationInput) (req *request.Request, output *GetBucketLifecycleConfigurationOutput) { op := &request.Operation{ - Name: opGetObjectTorrent, + Name: opGetBucketLifecycleConfiguration, HTTPMethod: "GET", - HTTPPath: "/{Bucket}/{Key+}?torrent", + HTTPPath: "/{Bucket}?lifecycle", } if input == nil { - input = &GetObjectTorrentInput{} + input = &GetBucketLifecycleConfigurationInput{} } + output = &GetBucketLifecycleConfigurationOutput{} req = c.newRequest(op, input, output) - output = &GetObjectTorrentOutput{} - req.Data = output return } -// Return torrent files from a bucket. -func (c *S3) GetObjectTorrent(input *GetObjectTorrentInput) (*GetObjectTorrentOutput, error) { - req, out := c.GetObjectTorrentRequest(input) - err := req.Send() - return out, err -} - -const opHeadBucket = "HeadBucket" - -// HeadBucketRequest generates a request for the HeadBucket operation. -func (c *S3) HeadBucketRequest(input *HeadBucketInput) (req *request.Request, output *HeadBucketOutput) { - op := &request.Operation{ - Name: opHeadBucket, - HTTPMethod: "HEAD", - HTTPPath: "/{Bucket}", - } - - if input == nil { - input = &HeadBucketInput{} - } - - req = c.newRequest(op, input, output) - output = &HeadBucketOutput{} - req.Data = output - return +// GetBucketLifecycleConfiguration API operation for Amazon Simple Storage Service. +// +// +// Bucket lifecycle configuration now supports specifying a lifecycle rule using +// an object key name prefix, one or more object tags, or a combination of both. +// Accordingly, this section describes the latest API. The response describes +// the new filter element that you can use to specify a filter to select a subset +// of objects to which the rule applies. If you are still using previous version +// of the lifecycle configuration, it works. For the earlier API description, +// see GetBucketLifecycle. +// +// Returns the lifecycle configuration information set on the bucket. For information +// about lifecycle configuration, see Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html). +// +// To use this operation, you must have permission to perform the s3:GetLifecycleConfiguration +// action. The bucket owner has this permission, by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// GetBucketLifecycleConfiguration has the following special error: +// +// * Error code: NoSuchLifecycleConfiguration Description: The lifecycle +// configuration does not exist. HTTP Status Code: 404 Not Found SOAP Fault +// Code Prefix: Client +// +// The following operations are related to DeleteBucketMetricsConfiguration: +// +// * GetBucketLifecycle +// +// * PutBucketLifecycle +// +// * DeleteBucketLifecycle +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketLifecycleConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfiguration +func (c *S3) GetBucketLifecycleConfiguration(input *GetBucketLifecycleConfigurationInput) (*GetBucketLifecycleConfigurationOutput, error) { + req, out := c.GetBucketLifecycleConfigurationRequest(input) + return out, req.Send() } -// This operation is useful to determine if a bucket exists and you have permission -// to access it. -func (c *S3) HeadBucket(input *HeadBucketInput) (*HeadBucketOutput, error) { - req, out := c.HeadBucketRequest(input) - err := req.Send() - return out, err +// GetBucketLifecycleConfigurationWithContext is the same as GetBucketLifecycleConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketLifecycleConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketLifecycleConfigurationWithContext(ctx aws.Context, input *GetBucketLifecycleConfigurationInput, opts ...request.Option) (*GetBucketLifecycleConfigurationOutput, error) { + req, out := c.GetBucketLifecycleConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opHeadObject = "HeadObject" +const opGetBucketLocation = "GetBucketLocation" -// HeadObjectRequest generates a request for the HeadObject operation. -func (c *S3) HeadObjectRequest(input *HeadObjectInput) (req *request.Request, output *HeadObjectOutput) { +// GetBucketLocationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketLocation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketLocation for more information on using the GetBucketLocation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketLocationRequest method. +// req, resp := client.GetBucketLocationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocation +func (c *S3) GetBucketLocationRequest(input *GetBucketLocationInput) (req *request.Request, output *GetBucketLocationOutput) { op := &request.Operation{ - Name: opHeadObject, - HTTPMethod: "HEAD", - HTTPPath: "/{Bucket}/{Key+}", + Name: opGetBucketLocation, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?location", } if input == nil { - input = &HeadObjectInput{} + input = &GetBucketLocationInput{} } + output = &GetBucketLocationOutput{} req = c.newRequest(op, input, output) - output = &HeadObjectOutput{} - req.Data = output return } -// The HEAD operation retrieves metadata from an object without returning the -// object itself. This operation is useful if you're only interested in an object's -// metadata. To use HEAD, you must have READ access to the object. -func (c *S3) HeadObject(input *HeadObjectInput) (*HeadObjectOutput, error) { - req, out := c.HeadObjectRequest(input) - err := req.Send() - return out, err +// GetBucketLocation API operation for Amazon Simple Storage Service. +// +// Returns the region the bucket resides in. You set the bucket's region using +// the LocationConstraint request parameter in a CreateBucket request. For more +// information, see CreateBucket. +// +// To use this implementation of the operation, you must be the bucket owner. +// +// The following operations are related to GetBucketLocation: +// +// * GetObject +// +// * CreateBucket +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketLocation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocation +func (c *S3) GetBucketLocation(input *GetBucketLocationInput) (*GetBucketLocationOutput, error) { + req, out := c.GetBucketLocationRequest(input) + return out, req.Send() } -const opListBuckets = "ListBuckets" +// GetBucketLocationWithContext is the same as GetBucketLocation with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketLocation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketLocationWithContext(ctx aws.Context, input *GetBucketLocationInput, opts ...request.Option) (*GetBucketLocationOutput, error) { + req, out := c.GetBucketLocationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ListBucketsRequest generates a request for the ListBuckets operation. -func (c *S3) ListBucketsRequest(input *ListBucketsInput) (req *request.Request, output *ListBucketsOutput) { +const opGetBucketLogging = "GetBucketLogging" + +// GetBucketLoggingRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketLogging operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketLogging for more information on using the GetBucketLogging +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketLoggingRequest method. +// req, resp := client.GetBucketLoggingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLogging +func (c *S3) GetBucketLoggingRequest(input *GetBucketLoggingInput) (req *request.Request, output *GetBucketLoggingOutput) { op := &request.Operation{ - Name: opListBuckets, + Name: opGetBucketLogging, HTTPMethod: "GET", - HTTPPath: "/", + HTTPPath: "/{Bucket}?logging", } if input == nil { - input = &ListBucketsInput{} + input = &GetBucketLoggingInput{} } + output = &GetBucketLoggingOutput{} req = c.newRequest(op, input, output) - output = &ListBucketsOutput{} - req.Data = output return } -// Returns a list of all buckets owned by the authenticated sender of the request. -func (c *S3) ListBuckets(input *ListBucketsInput) (*ListBucketsOutput, error) { - req, out := c.ListBucketsRequest(input) - err := req.Send() - return out, err +// GetBucketLogging API operation for Amazon Simple Storage Service. +// +// Returns the logging status of a bucket and the permissions users have to +// view and modify that status. To use GET, you must be the bucket owner. +// +// The following operations are related to GetBucketLogging: +// +// * CreateBucket +// +// * PutBucketLogging +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketLogging for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLogging +func (c *S3) GetBucketLogging(input *GetBucketLoggingInput) (*GetBucketLoggingOutput, error) { + req, out := c.GetBucketLoggingRequest(input) + return out, req.Send() } -const opListMultipartUploads = "ListMultipartUploads" +// GetBucketLoggingWithContext is the same as GetBucketLogging with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketLogging for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketLoggingWithContext(ctx aws.Context, input *GetBucketLoggingInput, opts ...request.Option) (*GetBucketLoggingOutput, error) { + req, out := c.GetBucketLoggingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ListMultipartUploadsRequest generates a request for the ListMultipartUploads operation. -func (c *S3) ListMultipartUploadsRequest(input *ListMultipartUploadsInput) (req *request.Request, output *ListMultipartUploadsOutput) { +const opGetBucketMetricsConfiguration = "GetBucketMetricsConfiguration" + +// GetBucketMetricsConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketMetricsConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketMetricsConfiguration for more information on using the GetBucketMetricsConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketMetricsConfigurationRequest method. +// req, resp := client.GetBucketMetricsConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfiguration +func (c *S3) GetBucketMetricsConfigurationRequest(input *GetBucketMetricsConfigurationInput) (req *request.Request, output *GetBucketMetricsConfigurationOutput) { op := &request.Operation{ - Name: opListMultipartUploads, + Name: opGetBucketMetricsConfiguration, HTTPMethod: "GET", - HTTPPath: "/{Bucket}?uploads", - Paginator: &request.Paginator{ - InputTokens: []string{"KeyMarker", "UploadIdMarker"}, - OutputTokens: []string{"NextKeyMarker", "NextUploadIdMarker"}, - LimitToken: "MaxUploads", - TruncationToken: "IsTruncated", - }, + HTTPPath: "/{Bucket}?metrics", } if input == nil { - input = &ListMultipartUploadsInput{} + input = &GetBucketMetricsConfigurationInput{} } + output = &GetBucketMetricsConfigurationOutput{} req = c.newRequest(op, input, output) - output = &ListMultipartUploadsOutput{} - req.Data = output return } -// This operation lists in-progress multipart uploads. -func (c *S3) ListMultipartUploads(input *ListMultipartUploadsInput) (*ListMultipartUploadsOutput, error) { - req, out := c.ListMultipartUploadsRequest(input) - err := req.Send() - return out, err +// GetBucketMetricsConfiguration API operation for Amazon Simple Storage Service. +// +// Gets a metrics configuration (specified by the metrics configuration ID) +// from the bucket. Note that this doesn't include the daily storage metrics. +// +// To use this operation, you must have permissions to perform the s3:GetMetricsConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For information about CloudWatch request metrics for Amazon S3, see Monitoring +// Metrics with Amazon CloudWatch (https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html). +// +// The following operations are related to GetBucketMetricsConfiguration: +// +// * PutBucketMetricsConfiguration +// +// * DeleteBucketMetricsConfiguration +// +// * ListBucketMetricsConfigurations +// +// * Monitoring Metrics with Amazon CloudWatch (https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html) +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketMetricsConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfiguration +func (c *S3) GetBucketMetricsConfiguration(input *GetBucketMetricsConfigurationInput) (*GetBucketMetricsConfigurationOutput, error) { + req, out := c.GetBucketMetricsConfigurationRequest(input) + return out, req.Send() } -func (c *S3) ListMultipartUploadsPages(input *ListMultipartUploadsInput, fn func(p *ListMultipartUploadsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.ListMultipartUploadsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*ListMultipartUploadsOutput), lastPage) - }) +// GetBucketMetricsConfigurationWithContext is the same as GetBucketMetricsConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketMetricsConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketMetricsConfigurationWithContext(ctx aws.Context, input *GetBucketMetricsConfigurationInput, opts ...request.Option) (*GetBucketMetricsConfigurationOutput, error) { + req, out := c.GetBucketMetricsConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opListObjectVersions = "ListObjectVersions" +const opGetBucketNotification = "GetBucketNotification" -// ListObjectVersionsRequest generates a request for the ListObjectVersions operation. -func (c *S3) ListObjectVersionsRequest(input *ListObjectVersionsInput) (req *request.Request, output *ListObjectVersionsOutput) { +// GetBucketNotificationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketNotification operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketNotification for more information on using the GetBucketNotification +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketNotificationRequest method. +// req, resp := client.GetBucketNotificationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotification +// +// Deprecated: GetBucketNotification has been deprecated +func (c *S3) GetBucketNotificationRequest(input *GetBucketNotificationConfigurationRequest) (req *request.Request, output *NotificationConfigurationDeprecated) { + if c.Client.Config.Logger != nil { + c.Client.Config.Logger.Log("This operation, GetBucketNotification, has been deprecated") + } op := &request.Operation{ - Name: opListObjectVersions, + Name: opGetBucketNotification, HTTPMethod: "GET", - HTTPPath: "/{Bucket}?versions", - Paginator: &request.Paginator{ - InputTokens: []string{"KeyMarker", "VersionIdMarker"}, - OutputTokens: []string{"NextKeyMarker", "NextVersionIdMarker"}, - LimitToken: "MaxKeys", - TruncationToken: "IsTruncated", - }, + HTTPPath: "/{Bucket}?notification", } if input == nil { - input = &ListObjectVersionsInput{} + input = &GetBucketNotificationConfigurationRequest{} } + output = &NotificationConfigurationDeprecated{} req = c.newRequest(op, input, output) - output = &ListObjectVersionsOutput{} - req.Data = output return } -// Returns metadata about all of the versions of objects in a bucket. -func (c *S3) ListObjectVersions(input *ListObjectVersionsInput) (*ListObjectVersionsOutput, error) { - req, out := c.ListObjectVersionsRequest(input) - err := req.Send() - return out, err +// GetBucketNotification API operation for Amazon Simple Storage Service. +// +// No longer used, see GetBucketNotificationConfiguration. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketNotification for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotification +// +// Deprecated: GetBucketNotification has been deprecated +func (c *S3) GetBucketNotification(input *GetBucketNotificationConfigurationRequest) (*NotificationConfigurationDeprecated, error) { + req, out := c.GetBucketNotificationRequest(input) + return out, req.Send() } -func (c *S3) ListObjectVersionsPages(input *ListObjectVersionsInput, fn func(p *ListObjectVersionsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.ListObjectVersionsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*ListObjectVersionsOutput), lastPage) - }) +// GetBucketNotificationWithContext is the same as GetBucketNotification with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketNotification for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +// +// Deprecated: GetBucketNotificationWithContext has been deprecated +func (c *S3) GetBucketNotificationWithContext(ctx aws.Context, input *GetBucketNotificationConfigurationRequest, opts ...request.Option) (*NotificationConfigurationDeprecated, error) { + req, out := c.GetBucketNotificationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opListObjects = "ListObjects" +const opGetBucketNotificationConfiguration = "GetBucketNotificationConfiguration" -// ListObjectsRequest generates a request for the ListObjects operation. -func (c *S3) ListObjectsRequest(input *ListObjectsInput) (req *request.Request, output *ListObjectsOutput) { +// GetBucketNotificationConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketNotificationConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketNotificationConfiguration for more information on using the GetBucketNotificationConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketNotificationConfigurationRequest method. +// req, resp := client.GetBucketNotificationConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotificationConfiguration +func (c *S3) GetBucketNotificationConfigurationRequest(input *GetBucketNotificationConfigurationRequest) (req *request.Request, output *NotificationConfiguration) { op := &request.Operation{ - Name: opListObjects, + Name: opGetBucketNotificationConfiguration, HTTPMethod: "GET", - HTTPPath: "/{Bucket}", - Paginator: &request.Paginator{ - InputTokens: []string{"Marker"}, - OutputTokens: []string{"NextMarker || Contents[-1].Key"}, - LimitToken: "MaxKeys", - TruncationToken: "IsTruncated", - }, + HTTPPath: "/{Bucket}?notification", } if input == nil { - input = &ListObjectsInput{} + input = &GetBucketNotificationConfigurationRequest{} } + output = &NotificationConfiguration{} req = c.newRequest(op, input, output) - output = &ListObjectsOutput{} - req.Data = output return } -// Returns some or all (up to 1000) of the objects in a bucket. You can use -// the request parameters as selection criteria to return a subset of the objects -// in a bucket. -func (c *S3) ListObjects(input *ListObjectsInput) (*ListObjectsOutput, error) { - req, out := c.ListObjectsRequest(input) - err := req.Send() - return out, err +// GetBucketNotificationConfiguration API operation for Amazon Simple Storage Service. +// +// Returns the notification configuration of a bucket. +// +// If notifications are not enabled on the bucket, the operation returns an +// empty NotificationConfiguration element. +// +// By default, you must be the bucket owner to read the notification configuration +// of a bucket. However, the bucket owner can use a bucket policy to grant permission +// to other users to read this configuration with the s3:GetBucketNotification +// permission. +// +// For more information about setting and reading the notification configuration +// on a bucket, see Setting Up Notification of Bucket Events (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html). +// For more information about bucket policies, see Using Bucket Policies (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html). +// +// The following operation is related to GetBucketNotification: +// +// * PutBucketNotification +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketNotificationConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotificationConfiguration +func (c *S3) GetBucketNotificationConfiguration(input *GetBucketNotificationConfigurationRequest) (*NotificationConfiguration, error) { + req, out := c.GetBucketNotificationConfigurationRequest(input) + return out, req.Send() } -func (c *S3) ListObjectsPages(input *ListObjectsInput, fn func(p *ListObjectsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.ListObjectsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*ListObjectsOutput), lastPage) - }) +// GetBucketNotificationConfigurationWithContext is the same as GetBucketNotificationConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketNotificationConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketNotificationConfigurationWithContext(ctx aws.Context, input *GetBucketNotificationConfigurationRequest, opts ...request.Option) (*NotificationConfiguration, error) { + req, out := c.GetBucketNotificationConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opListParts = "ListParts" +const opGetBucketPolicy = "GetBucketPolicy" -// ListPartsRequest generates a request for the ListParts operation. -func (c *S3) ListPartsRequest(input *ListPartsInput) (req *request.Request, output *ListPartsOutput) { +// GetBucketPolicyRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketPolicy operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketPolicy for more information on using the GetBucketPolicy +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketPolicyRequest method. +// req, resp := client.GetBucketPolicyRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicy +func (c *S3) GetBucketPolicyRequest(input *GetBucketPolicyInput) (req *request.Request, output *GetBucketPolicyOutput) { op := &request.Operation{ - Name: opListParts, + Name: opGetBucketPolicy, HTTPMethod: "GET", - HTTPPath: "/{Bucket}/{Key+}", - Paginator: &request.Paginator{ - InputTokens: []string{"PartNumberMarker"}, - OutputTokens: []string{"NextPartNumberMarker"}, - LimitToken: "MaxParts", - TruncationToken: "IsTruncated", - }, + HTTPPath: "/{Bucket}?policy", } if input == nil { - input = &ListPartsInput{} + input = &GetBucketPolicyInput{} } + output = &GetBucketPolicyOutput{} req = c.newRequest(op, input, output) - output = &ListPartsOutput{} - req.Data = output return } -// Lists the parts that have been uploaded for a specific multipart upload. -func (c *S3) ListParts(input *ListPartsInput) (*ListPartsOutput, error) { - req, out := c.ListPartsRequest(input) - err := req.Send() - return out, err -} - -func (c *S3) ListPartsPages(input *ListPartsInput, fn func(p *ListPartsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.ListPartsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*ListPartsOutput), lastPage) - }) -} - -const opPutBucketAcl = "PutBucketAcl" - -// PutBucketAclRequest generates a request for the PutBucketAcl operation. -func (c *S3) PutBucketAclRequest(input *PutBucketAclInput) (req *request.Request, output *PutBucketAclOutput) { - op := &request.Operation{ - Name: opPutBucketAcl, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?acl", - } - - if input == nil { - input = &PutBucketAclInput{} - } - - req = c.newRequest(op, input, output) - output = &PutBucketAclOutput{} - req.Data = output - return +// GetBucketPolicy API operation for Amazon Simple Storage Service. +// +// Returns the policy of a specified bucket. If you are using an identity other +// than the root user of the AWS account that owns the bucket, the calling identity +// must have the GetBucketPolicy permissions on the specified bucket and belong +// to the bucket owner's account in order to use this operation. +// +// If you don't have GetBucketPolicy permissions, Amazon S3 returns a 403 Access +// Denied error. If you have the correct permissions, but you're not using an +// identity that belongs to the bucket owner's account, Amazon S3 returns a +// 405 Method Not Allowed error. +// +// As a security precaution, the root user of the AWS account that owns a bucket +// can always use this operation, even if the policy explicitly denies the root +// user the ability to perform this action. +// +// For more information about bucket policies, see Using Bucket Policies and +// User Policies (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html). +// +// The following operation is related to GetBucketPolicy: +// +// * GetObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketPolicy for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicy +func (c *S3) GetBucketPolicy(input *GetBucketPolicyInput) (*GetBucketPolicyOutput, error) { + req, out := c.GetBucketPolicyRequest(input) + return out, req.Send() } -// Sets the permissions on a bucket using access control lists (ACL). -func (c *S3) PutBucketAcl(input *PutBucketAclInput) (*PutBucketAclOutput, error) { - req, out := c.PutBucketAclRequest(input) - err := req.Send() - return out, err +// GetBucketPolicyWithContext is the same as GetBucketPolicy with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketPolicy for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketPolicyWithContext(ctx aws.Context, input *GetBucketPolicyInput, opts ...request.Option) (*GetBucketPolicyOutput, error) { + req, out := c.GetBucketPolicyRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opPutBucketCors = "PutBucketCors" +const opGetBucketPolicyStatus = "GetBucketPolicyStatus" -// PutBucketCorsRequest generates a request for the PutBucketCors operation. -func (c *S3) PutBucketCorsRequest(input *PutBucketCorsInput) (req *request.Request, output *PutBucketCorsOutput) { +// GetBucketPolicyStatusRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketPolicyStatus operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketPolicyStatus for more information on using the GetBucketPolicyStatus +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketPolicyStatusRequest method. +// req, resp := client.GetBucketPolicyStatusRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatus +func (c *S3) GetBucketPolicyStatusRequest(input *GetBucketPolicyStatusInput) (req *request.Request, output *GetBucketPolicyStatusOutput) { op := &request.Operation{ - Name: opPutBucketCors, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?cors", + Name: opGetBucketPolicyStatus, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?policyStatus", } if input == nil { - input = &PutBucketCorsInput{} + input = &GetBucketPolicyStatusInput{} } + output = &GetBucketPolicyStatusOutput{} req = c.newRequest(op, input, output) - output = &PutBucketCorsOutput{} - req.Data = output return } -// Sets the cors configuration for a bucket. -func (c *S3) PutBucketCors(input *PutBucketCorsInput) (*PutBucketCorsOutput, error) { - req, out := c.PutBucketCorsRequest(input) - err := req.Send() - return out, err +// GetBucketPolicyStatus API operation for Amazon Simple Storage Service. +// +// Retrieves the policy status for an Amazon S3 bucket, indicating whether the +// bucket is public. In order to use this operation, you must have the s3:GetBucketPolicyStatus +// permission. For more information about Amazon S3 permissions, see Specifying +// Permissions in a Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html). +// +// For more information about when Amazon S3 considers a bucket public, see +// The Meaning of "Public" (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status). +// +// The following operations are related to GetBucketPolicyStatus: +// +// * Using Amazon S3 Block Public Access (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html) +// +// * GetPublicAccessBlock +// +// * PutPublicAccessBlock +// +// * DeletePublicAccessBlock +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketPolicyStatus for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatus +func (c *S3) GetBucketPolicyStatus(input *GetBucketPolicyStatusInput) (*GetBucketPolicyStatusOutput, error) { + req, out := c.GetBucketPolicyStatusRequest(input) + return out, req.Send() } -const opPutBucketLifecycle = "PutBucketLifecycle" +// GetBucketPolicyStatusWithContext is the same as GetBucketPolicyStatus with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketPolicyStatus for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketPolicyStatusWithContext(ctx aws.Context, input *GetBucketPolicyStatusInput, opts ...request.Option) (*GetBucketPolicyStatusOutput, error) { + req, out := c.GetBucketPolicyStatusRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutBucketLifecycleRequest generates a request for the PutBucketLifecycle operation. -func (c *S3) PutBucketLifecycleRequest(input *PutBucketLifecycleInput) (req *request.Request, output *PutBucketLifecycleOutput) { +const opGetBucketReplication = "GetBucketReplication" + +// GetBucketReplicationRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketReplication operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketReplication for more information on using the GetBucketReplication +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketReplicationRequest method. +// req, resp := client.GetBucketReplicationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplication +func (c *S3) GetBucketReplicationRequest(input *GetBucketReplicationInput) (req *request.Request, output *GetBucketReplicationOutput) { op := &request.Operation{ - Name: opPutBucketLifecycle, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?lifecycle", + Name: opGetBucketReplication, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?replication", } if input == nil { - input = &PutBucketLifecycleInput{} + input = &GetBucketReplicationInput{} } + output = &GetBucketReplicationOutput{} req = c.newRequest(op, input, output) - output = &PutBucketLifecycleOutput{} - req.Data = output return } -// Deprecated, see the PutBucketLifecycleConfiguration operation. -func (c *S3) PutBucketLifecycle(input *PutBucketLifecycleInput) (*PutBucketLifecycleOutput, error) { - req, out := c.PutBucketLifecycleRequest(input) - err := req.Send() - return out, err +// GetBucketReplication API operation for Amazon Simple Storage Service. +// +// Returns the replication configuration of a bucket. +// +// It can take a while to propagate the put or delete a replication configuration +// to all Amazon S3 systems. Therefore, a get request soon after put or delete +// can return a wrong result. +// +// For information about replication configuration, see Replication (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html). +// +// This operation requires permissions for the s3:GetReplicationConfiguration +// action. For more information about permissions, see Using Bucket Policies +// and User Policies (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html). +// +// If you include the Filter element in a replication configuration, you must +// also include the DeleteMarkerReplication and Priority elements. The response +// also returns those elements. +// +// GetBucketReplication has the following special error: +// +// * Error code: NoSuchReplicationConfiguration Description: There is no +// replication configuration with that name. HTTP Status Code: 404 Not Found +// SOAP Fault Code Prefix: Client +// +// The following operations are related to GetBucketReplication: +// +// * PutBucketReplication +// +// * DeleteBucketReplication +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketReplication for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplication +func (c *S3) GetBucketReplication(input *GetBucketReplicationInput) (*GetBucketReplicationOutput, error) { + req, out := c.GetBucketReplicationRequest(input) + return out, req.Send() } -const opPutBucketLifecycleConfiguration = "PutBucketLifecycleConfiguration" +// GetBucketReplicationWithContext is the same as GetBucketReplication with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketReplication for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketReplicationWithContext(ctx aws.Context, input *GetBucketReplicationInput, opts ...request.Option) (*GetBucketReplicationOutput, error) { + req, out := c.GetBucketReplicationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutBucketLifecycleConfigurationRequest generates a request for the PutBucketLifecycleConfiguration operation. -func (c *S3) PutBucketLifecycleConfigurationRequest(input *PutBucketLifecycleConfigurationInput) (req *request.Request, output *PutBucketLifecycleConfigurationOutput) { +const opGetBucketRequestPayment = "GetBucketRequestPayment" + +// GetBucketRequestPaymentRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketRequestPayment operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketRequestPayment for more information on using the GetBucketRequestPayment +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketRequestPaymentRequest method. +// req, resp := client.GetBucketRequestPaymentRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPayment +func (c *S3) GetBucketRequestPaymentRequest(input *GetBucketRequestPaymentInput) (req *request.Request, output *GetBucketRequestPaymentOutput) { op := &request.Operation{ - Name: opPutBucketLifecycleConfiguration, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?lifecycle", + Name: opGetBucketRequestPayment, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?requestPayment", } if input == nil { - input = &PutBucketLifecycleConfigurationInput{} + input = &GetBucketRequestPaymentInput{} } + output = &GetBucketRequestPaymentOutput{} req = c.newRequest(op, input, output) - output = &PutBucketLifecycleConfigurationOutput{} - req.Data = output return } -// Sets lifecycle configuration for your bucket. If a lifecycle configuration -// exists, it replaces it. -func (c *S3) PutBucketLifecycleConfiguration(input *PutBucketLifecycleConfigurationInput) (*PutBucketLifecycleConfigurationOutput, error) { - req, out := c.PutBucketLifecycleConfigurationRequest(input) - err := req.Send() - return out, err +// GetBucketRequestPayment API operation for Amazon Simple Storage Service. +// +// Returns the request payment configuration of a bucket. To use this version +// of the operation, you must be the bucket owner. For more information, see +// Requester Pays Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html). +// +// The following operations are related to GetBucketRequestPayment: +// +// * ListObjects +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketRequestPayment for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPayment +func (c *S3) GetBucketRequestPayment(input *GetBucketRequestPaymentInput) (*GetBucketRequestPaymentOutput, error) { + req, out := c.GetBucketRequestPaymentRequest(input) + return out, req.Send() } -const opPutBucketLogging = "PutBucketLogging" +// GetBucketRequestPaymentWithContext is the same as GetBucketRequestPayment with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketRequestPayment for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketRequestPaymentWithContext(ctx aws.Context, input *GetBucketRequestPaymentInput, opts ...request.Option) (*GetBucketRequestPaymentOutput, error) { + req, out := c.GetBucketRequestPaymentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutBucketLoggingRequest generates a request for the PutBucketLogging operation. -func (c *S3) PutBucketLoggingRequest(input *PutBucketLoggingInput) (req *request.Request, output *PutBucketLoggingOutput) { +const opGetBucketTagging = "GetBucketTagging" + +// GetBucketTaggingRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketTagging operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketTagging for more information on using the GetBucketTagging +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketTaggingRequest method. +// req, resp := client.GetBucketTaggingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTagging +func (c *S3) GetBucketTaggingRequest(input *GetBucketTaggingInput) (req *request.Request, output *GetBucketTaggingOutput) { op := &request.Operation{ - Name: opPutBucketLogging, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?logging", + Name: opGetBucketTagging, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?tagging", } if input == nil { - input = &PutBucketLoggingInput{} + input = &GetBucketTaggingInput{} } + output = &GetBucketTaggingOutput{} req = c.newRequest(op, input, output) - output = &PutBucketLoggingOutput{} - req.Data = output return } -// Set the logging parameters for a bucket and to specify permissions for who -// can view and modify the logging parameters. To set the logging status of -// a bucket, you must be the bucket owner. -func (c *S3) PutBucketLogging(input *PutBucketLoggingInput) (*PutBucketLoggingOutput, error) { - req, out := c.PutBucketLoggingRequest(input) - err := req.Send() - return out, err +// GetBucketTagging API operation for Amazon Simple Storage Service. +// +// Returns the tag set associated with the bucket. +// +// To use this operation, you must have permission to perform the s3:GetBucketTagging +// action. By default, the bucket owner has this permission and can grant this +// permission to others. +// +// GetBucketTagging has the following special error: +// +// * Error code: NoSuchTagSetError Description: There is no tag set associated +// with the bucket. +// +// The following operations are related to GetBucketTagging: +// +// * PutBucketTagging +// +// * DeleteBucketTagging +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketTagging for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTagging +func (c *S3) GetBucketTagging(input *GetBucketTaggingInput) (*GetBucketTaggingOutput, error) { + req, out := c.GetBucketTaggingRequest(input) + return out, req.Send() } -const opPutBucketNotification = "PutBucketNotification" +// GetBucketTaggingWithContext is the same as GetBucketTagging with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketTagging for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketTaggingWithContext(ctx aws.Context, input *GetBucketTaggingInput, opts ...request.Option) (*GetBucketTaggingOutput, error) { + req, out := c.GetBucketTaggingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutBucketNotificationRequest generates a request for the PutBucketNotification operation. -func (c *S3) PutBucketNotificationRequest(input *PutBucketNotificationInput) (req *request.Request, output *PutBucketNotificationOutput) { +const opGetBucketVersioning = "GetBucketVersioning" + +// GetBucketVersioningRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketVersioning operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketVersioning for more information on using the GetBucketVersioning +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketVersioningRequest method. +// req, resp := client.GetBucketVersioningRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioning +func (c *S3) GetBucketVersioningRequest(input *GetBucketVersioningInput) (req *request.Request, output *GetBucketVersioningOutput) { op := &request.Operation{ - Name: opPutBucketNotification, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?notification", + Name: opGetBucketVersioning, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?versioning", } if input == nil { - input = &PutBucketNotificationInput{} + input = &GetBucketVersioningInput{} } + output = &GetBucketVersioningOutput{} req = c.newRequest(op, input, output) - output = &PutBucketNotificationOutput{} - req.Data = output return } -// Deprecated, see the PutBucketNotificationConfiguraiton operation. -func (c *S3) PutBucketNotification(input *PutBucketNotificationInput) (*PutBucketNotificationOutput, error) { - req, out := c.PutBucketNotificationRequest(input) - err := req.Send() - return out, err +// GetBucketVersioning API operation for Amazon Simple Storage Service. +// +// Returns the versioning state of a bucket. +// +// To retrieve the versioning state of a bucket, you must be the bucket owner. +// +// This implementation also returns the MFA Delete status of the versioning +// state, i.e., if the MFA Delete status is enabled, the bucket owner must use +// an authentication device to change the versioning state of the bucket. +// +// The following operations are related to GetBucketVersioning: +// +// * GetObject +// +// * PutObject +// +// * DeleteObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketVersioning for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioning +func (c *S3) GetBucketVersioning(input *GetBucketVersioningInput) (*GetBucketVersioningOutput, error) { + req, out := c.GetBucketVersioningRequest(input) + return out, req.Send() } -const opPutBucketNotificationConfiguration = "PutBucketNotificationConfiguration" +// GetBucketVersioningWithContext is the same as GetBucketVersioning with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketVersioning for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketVersioningWithContext(ctx aws.Context, input *GetBucketVersioningInput, opts ...request.Option) (*GetBucketVersioningOutput, error) { + req, out := c.GetBucketVersioningRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutBucketNotificationConfigurationRequest generates a request for the PutBucketNotificationConfiguration operation. -func (c *S3) PutBucketNotificationConfigurationRequest(input *PutBucketNotificationConfigurationInput) (req *request.Request, output *PutBucketNotificationConfigurationOutput) { +const opGetBucketWebsite = "GetBucketWebsite" + +// GetBucketWebsiteRequest generates a "aws/request.Request" representing the +// client's request for the GetBucketWebsite operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetBucketWebsite for more information on using the GetBucketWebsite +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetBucketWebsiteRequest method. +// req, resp := client.GetBucketWebsiteRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsite +func (c *S3) GetBucketWebsiteRequest(input *GetBucketWebsiteInput) (req *request.Request, output *GetBucketWebsiteOutput) { op := &request.Operation{ - Name: opPutBucketNotificationConfiguration, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?notification", + Name: opGetBucketWebsite, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?website", } if input == nil { - input = &PutBucketNotificationConfigurationInput{} + input = &GetBucketWebsiteInput{} } + output = &GetBucketWebsiteOutput{} req = c.newRequest(op, input, output) - output = &PutBucketNotificationConfigurationOutput{} - req.Data = output return } -// Enables notifications of specified events for a bucket. -func (c *S3) PutBucketNotificationConfiguration(input *PutBucketNotificationConfigurationInput) (*PutBucketNotificationConfigurationOutput, error) { - req, out := c.PutBucketNotificationConfigurationRequest(input) - err := req.Send() - return out, err +// GetBucketWebsite API operation for Amazon Simple Storage Service. +// +// Returns the website configuration for a bucket. To host website on Amazon +// S3, you can configure a bucket as website by adding a website configuration. +// For more information about hosting websites, see Hosting Websites on Amazon +// S3 (https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html). +// +// This GET operation requires the S3:GetBucketWebsite permission. By default, +// only the bucket owner can read the bucket website configuration. However, +// bucket owners can allow other users to read the website configuration by +// writing a bucket policy granting them the S3:GetBucketWebsite permission. +// +// The following operations are related to DeleteBucketWebsite +// +// * DeleteBucketWebsite +// +// * PutBucketWebsite +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetBucketWebsite for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsite +func (c *S3) GetBucketWebsite(input *GetBucketWebsiteInput) (*GetBucketWebsiteOutput, error) { + req, out := c.GetBucketWebsiteRequest(input) + return out, req.Send() } -const opPutBucketPolicy = "PutBucketPolicy" +// GetBucketWebsiteWithContext is the same as GetBucketWebsite with the addition of +// the ability to pass a context and additional request options. +// +// See GetBucketWebsite for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetBucketWebsiteWithContext(ctx aws.Context, input *GetBucketWebsiteInput, opts ...request.Option) (*GetBucketWebsiteOutput, error) { + req, out := c.GetBucketWebsiteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutBucketPolicyRequest generates a request for the PutBucketPolicy operation. -func (c *S3) PutBucketPolicyRequest(input *PutBucketPolicyInput) (req *request.Request, output *PutBucketPolicyOutput) { - op := &request.Operation{ - Name: opPutBucketPolicy, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?policy", +const opGetObject = "GetObject" + +// GetObjectRequest generates a "aws/request.Request" representing the +// client's request for the GetObject operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetObject for more information on using the GetObject +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetObjectRequest method. +// req, resp := client.GetObjectRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObject +func (c *S3) GetObjectRequest(input *GetObjectInput) (req *request.Request, output *GetObjectOutput) { + op := &request.Operation{ + Name: opGetObject, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}/{Key+}", } if input == nil { - input = &PutBucketPolicyInput{} + input = &GetObjectInput{} } + output = &GetObjectOutput{} req = c.newRequest(op, input, output) - output = &PutBucketPolicyOutput{} - req.Data = output return } -// Replaces a policy on a bucket. If the bucket already has a policy, the one -// in this request completely replaces it. -func (c *S3) PutBucketPolicy(input *PutBucketPolicyInput) (*PutBucketPolicyOutput, error) { - req, out := c.PutBucketPolicyRequest(input) - err := req.Send() - return out, err +// GetObject API operation for Amazon Simple Storage Service. +// +// Retrieves objects from Amazon S3. To use GET, you must have READ access to +// the object. If you grant READ access to the anonymous user, you can return +// the object without using an authorization header. +// +// An Amazon S3 bucket has no directory hierarchy such as you would find in +// a typical computer file system. You can, however, create a logical hierarchy +// by using object key names that imply a folder structure. For example, instead +// of naming an object sample.jpg, you can name it photos/2006/February/sample.jpg. +// +// To get an object from such a logical hierarchy, specify the full key name +// for the object in the GET operation. For a virtual hosted-style request example, +// if you have the object photos/2006/February/sample.jpg, specify the resource +// as /photos/2006/February/sample.jpg. For a path-style request example, if +// you have the object photos/2006/February/sample.jpg in the bucket named examplebucket, +// specify the resource as /examplebucket/photos/2006/February/sample.jpg. For +// more information about request types, see HTTP Host Header Bucket Specification +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingSpecifyBucket). +// +// To distribute large files to many people, you can save bandwidth costs by +// using BitTorrent. For more information, see Amazon S3 Torrent (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html). +// For more information about returning the ACL of an object, see GetObjectAcl. +// +// If the object you are retrieving is stored in the GLACIER or DEEP_ARCHIVE +// storage classes, before you can retrieve the object you must first restore +// a copy using . Otherwise, this operation returns an InvalidObjectStateError +// error. For information about restoring archived objects, see Restoring Archived +// Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html). +// +// Encryption request headers, like x-amz-server-side-encryption, should not +// be sent for GET requests if your object uses server-side encryption with +// CMKs stored in AWS KMS (SSE-KMS) or server-side encryption with Amazon S3–managed +// encryption keys (SSE-S3). If your object does use these types of keys, you’ll +// get an HTTP 400 BadRequest error. +// +// If you encrypt an object by using server-side encryption with customer-provided +// encryption keys (SSE-C) when you store the object in Amazon S3, then when +// you GET the object, you must use the following headers: +// +// * x-amz-server-side​-encryption​-customer-algorithm +// +// * x-amz-server-side​-encryption​-customer-key +// +// * x-amz-server-side​-encryption​-customer-key-MD5 +// +// For more information about SSE-C, see Server-Side Encryption (Using Customer-Provided +// Encryption Keys) (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html). +// +// Assuming you have permission to read object tags (permission for the s3:GetObjectVersionTagging +// action), the response also returns the x-amz-tagging-count header that provides +// the count of number of tags associated with the object. You can use GetObjectTagging +// to retrieve the tag set associated with an object. +// +// Permissions +// +// You need the s3:GetObject permission for this operation. For more information, +// see Specifying Permissions in a Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html). +// If the object you request does not exist, the error Amazon S3 returns depends +// on whether you also have the s3:ListBucket permission. +// +// * If you have the s3:ListBucket permission on the bucket, Amazon S3 will +// return an HTTP status code 404 ("no such key") error. +// +// * If you don’t have the s3:ListBucket permission, Amazon S3 will return +// an HTTP status code 403 ("access denied") error. +// +// Versioning +// +// By default, the GET operation returns the current version of an object. To +// return a different version, use the versionId subresource. +// +// If the current version of the object is a delete marker, Amazon S3 behaves +// as if the object was deleted and includes x-amz-delete-marker: true in the +// response. +// +// For more information about versioning, see PutBucketVersioning. +// +// Overriding Response Header Values +// +// There are times when you want to override certain response header values +// in a GET response. For example, you might override the Content-Disposition +// response header value in your GET request. +// +// You can override values for a set of response headers using the following +// query parameters. These response header values are sent only on a successful +// request, that is, when status code 200 OK is returned. The set of headers +// you can override using these parameters is a subset of the headers that Amazon +// S3 accepts when you create an object. The response headers that you can override +// for the GET response are Content-Type, Content-Language, Expires, Cache-Control, +// Content-Disposition, and Content-Encoding. To override these header values +// in the GET response, you use the following request parameters. +// +// You must sign the request, either using an Authorization header or a presigned +// URL, when using these parameters. They cannot be used with an unsigned (anonymous) +// request. +// +// * response-content-type +// +// * response-content-language +// +// * response-expires +// +// * response-cache-control +// +// * response-content-disposition +// +// * response-content-encoding +// +// Additional Considerations about Request Headers +// +// If both of the If-Match and If-Unmodified-Since headers are present in the +// request as follows: If-Match condition evaluates to true, and; If-Unmodified-Since +// condition evaluates to false; then, S3 returns 200 OK and the data requested. +// +// If both of the If-None-Match and If-Modified-Since headers are present in +// the request as follows:If-None-Match condition evaluates to false, and; If-Modified-Since +// condition evaluates to true; then, S3 returns 304 Not Modified response code. +// +// For more information about conditional requests, see RFC 7232 (https://tools.ietf.org/html/rfc7232). +// +// The following operations are related to GetObject: +// +// * ListBuckets +// +// * GetObjectAcl +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetObject for usage and error information. +// +// Returned Error Codes: +// * ErrCodeNoSuchKey "NoSuchKey" +// The specified key does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObject +func (c *S3) GetObject(input *GetObjectInput) (*GetObjectOutput, error) { + req, out := c.GetObjectRequest(input) + return out, req.Send() } -const opPutBucketReplication = "PutBucketReplication" +// GetObjectWithContext is the same as GetObject with the addition of +// the ability to pass a context and additional request options. +// +// See GetObject for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetObjectWithContext(ctx aws.Context, input *GetObjectInput, opts ...request.Option) (*GetObjectOutput, error) { + req, out := c.GetObjectRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutBucketReplicationRequest generates a request for the PutBucketReplication operation. -func (c *S3) PutBucketReplicationRequest(input *PutBucketReplicationInput) (req *request.Request, output *PutBucketReplicationOutput) { +const opGetObjectAcl = "GetObjectAcl" + +// GetObjectAclRequest generates a "aws/request.Request" representing the +// client's request for the GetObjectAcl operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetObjectAcl for more information on using the GetObjectAcl +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetObjectAclRequest method. +// req, resp := client.GetObjectAclRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAcl +func (c *S3) GetObjectAclRequest(input *GetObjectAclInput) (req *request.Request, output *GetObjectAclOutput) { op := &request.Operation{ - Name: opPutBucketReplication, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?replication", + Name: opGetObjectAcl, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}/{Key+}?acl", } if input == nil { - input = &PutBucketReplicationInput{} + input = &GetObjectAclInput{} } + output = &GetObjectAclOutput{} req = c.newRequest(op, input, output) - output = &PutBucketReplicationOutput{} - req.Data = output return } -// Creates a new replication configuration (or replaces an existing one, if -// present). -func (c *S3) PutBucketReplication(input *PutBucketReplicationInput) (*PutBucketReplicationOutput, error) { - req, out := c.PutBucketReplicationRequest(input) - err := req.Send() - return out, err +// GetObjectAcl API operation for Amazon Simple Storage Service. +// +// Returns the access control list (ACL) of an object. To use this operation, +// you must have READ_ACP access to the object. +// +// Versioning +// +// By default, GET returns ACL information about the current version of an object. +// To return ACL information about a different version, use the versionId subresource. +// +// The following operations are related to GetObjectAcl: +// +// * GetObject +// +// * DeleteObject +// +// * PutObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetObjectAcl for usage and error information. +// +// Returned Error Codes: +// * ErrCodeNoSuchKey "NoSuchKey" +// The specified key does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAcl +func (c *S3) GetObjectAcl(input *GetObjectAclInput) (*GetObjectAclOutput, error) { + req, out := c.GetObjectAclRequest(input) + return out, req.Send() } -const opPutBucketRequestPayment = "PutBucketRequestPayment" +// GetObjectAclWithContext is the same as GetObjectAcl with the addition of +// the ability to pass a context and additional request options. +// +// See GetObjectAcl for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetObjectAclWithContext(ctx aws.Context, input *GetObjectAclInput, opts ...request.Option) (*GetObjectAclOutput, error) { + req, out := c.GetObjectAclRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutBucketRequestPaymentRequest generates a request for the PutBucketRequestPayment operation. -func (c *S3) PutBucketRequestPaymentRequest(input *PutBucketRequestPaymentInput) (req *request.Request, output *PutBucketRequestPaymentOutput) { +const opGetObjectLegalHold = "GetObjectLegalHold" + +// GetObjectLegalHoldRequest generates a "aws/request.Request" representing the +// client's request for the GetObjectLegalHold operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetObjectLegalHold for more information on using the GetObjectLegalHold +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetObjectLegalHoldRequest method. +// req, resp := client.GetObjectLegalHoldRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHold +func (c *S3) GetObjectLegalHoldRequest(input *GetObjectLegalHoldInput) (req *request.Request, output *GetObjectLegalHoldOutput) { op := &request.Operation{ - Name: opPutBucketRequestPayment, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?requestPayment", + Name: opGetObjectLegalHold, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}/{Key+}?legal-hold", } if input == nil { - input = &PutBucketRequestPaymentInput{} + input = &GetObjectLegalHoldInput{} } + output = &GetObjectLegalHoldOutput{} req = c.newRequest(op, input, output) - output = &PutBucketRequestPaymentOutput{} - req.Data = output return } -// Sets the request payment configuration for a bucket. By default, the bucket -// owner pays for downloads from the bucket. This configuration parameter enables -// the bucket owner (only) to specify that the person requesting the download -// will be charged for the download. Documentation on requester pays buckets -// can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html -func (c *S3) PutBucketRequestPayment(input *PutBucketRequestPaymentInput) (*PutBucketRequestPaymentOutput, error) { - req, out := c.PutBucketRequestPaymentRequest(input) - err := req.Send() - return out, err +// GetObjectLegalHold API operation for Amazon Simple Storage Service. +// +// Gets an object's current Legal Hold status. For more information, see Locking +// Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetObjectLegalHold for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHold +func (c *S3) GetObjectLegalHold(input *GetObjectLegalHoldInput) (*GetObjectLegalHoldOutput, error) { + req, out := c.GetObjectLegalHoldRequest(input) + return out, req.Send() } -const opPutBucketTagging = "PutBucketTagging" - -// PutBucketTaggingRequest generates a request for the PutBucketTagging operation. -func (c *S3) PutBucketTaggingRequest(input *PutBucketTaggingInput) (req *request.Request, output *PutBucketTaggingOutput) { +// GetObjectLegalHoldWithContext is the same as GetObjectLegalHold with the addition of +// the ability to pass a context and additional request options. +// +// See GetObjectLegalHold for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetObjectLegalHoldWithContext(ctx aws.Context, input *GetObjectLegalHoldInput, opts ...request.Option) (*GetObjectLegalHoldOutput, error) { + req, out := c.GetObjectLegalHoldRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetObjectLockConfiguration = "GetObjectLockConfiguration" + +// GetObjectLockConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the GetObjectLockConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetObjectLockConfiguration for more information on using the GetObjectLockConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetObjectLockConfigurationRequest method. +// req, resp := client.GetObjectLockConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfiguration +func (c *S3) GetObjectLockConfigurationRequest(input *GetObjectLockConfigurationInput) (req *request.Request, output *GetObjectLockConfigurationOutput) { op := &request.Operation{ - Name: opPutBucketTagging, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?tagging", + Name: opGetObjectLockConfiguration, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?object-lock", } if input == nil { - input = &PutBucketTaggingInput{} + input = &GetObjectLockConfigurationInput{} } + output = &GetObjectLockConfigurationOutput{} req = c.newRequest(op, input, output) - output = &PutBucketTaggingOutput{} - req.Data = output return } -// Sets the tags for a bucket. -func (c *S3) PutBucketTagging(input *PutBucketTaggingInput) (*PutBucketTaggingOutput, error) { - req, out := c.PutBucketTaggingRequest(input) - err := req.Send() - return out, err +// GetObjectLockConfiguration API operation for Amazon Simple Storage Service. +// +// Gets the Object Lock configuration for a bucket. The rule specified in the +// Object Lock configuration will be applied by default to every new object +// placed in the specified bucket. For more information, see Locking Objects +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetObjectLockConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfiguration +func (c *S3) GetObjectLockConfiguration(input *GetObjectLockConfigurationInput) (*GetObjectLockConfigurationOutput, error) { + req, out := c.GetObjectLockConfigurationRequest(input) + return out, req.Send() } -const opPutBucketVersioning = "PutBucketVersioning" - -// PutBucketVersioningRequest generates a request for the PutBucketVersioning operation. -func (c *S3) PutBucketVersioningRequest(input *PutBucketVersioningInput) (req *request.Request, output *PutBucketVersioningOutput) { +// GetObjectLockConfigurationWithContext is the same as GetObjectLockConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See GetObjectLockConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetObjectLockConfigurationWithContext(ctx aws.Context, input *GetObjectLockConfigurationInput, opts ...request.Option) (*GetObjectLockConfigurationOutput, error) { + req, out := c.GetObjectLockConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetObjectRetention = "GetObjectRetention" + +// GetObjectRetentionRequest generates a "aws/request.Request" representing the +// client's request for the GetObjectRetention operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetObjectRetention for more information on using the GetObjectRetention +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetObjectRetentionRequest method. +// req, resp := client.GetObjectRetentionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetention +func (c *S3) GetObjectRetentionRequest(input *GetObjectRetentionInput) (req *request.Request, output *GetObjectRetentionOutput) { op := &request.Operation{ - Name: opPutBucketVersioning, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?versioning", + Name: opGetObjectRetention, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}/{Key+}?retention", } if input == nil { - input = &PutBucketVersioningInput{} + input = &GetObjectRetentionInput{} } + output = &GetObjectRetentionOutput{} req = c.newRequest(op, input, output) - output = &PutBucketVersioningOutput{} - req.Data = output return } -// Sets the versioning state of an existing bucket. To set the versioning state, -// you must be the bucket owner. -func (c *S3) PutBucketVersioning(input *PutBucketVersioningInput) (*PutBucketVersioningOutput, error) { - req, out := c.PutBucketVersioningRequest(input) - err := req.Send() - return out, err +// GetObjectRetention API operation for Amazon Simple Storage Service. +// +// Retrieves an object's retention settings. For more information, see Locking +// Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetObjectRetention for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetention +func (c *S3) GetObjectRetention(input *GetObjectRetentionInput) (*GetObjectRetentionOutput, error) { + req, out := c.GetObjectRetentionRequest(input) + return out, req.Send() } -const opPutBucketWebsite = "PutBucketWebsite" - -// PutBucketWebsiteRequest generates a request for the PutBucketWebsite operation. -func (c *S3) PutBucketWebsiteRequest(input *PutBucketWebsiteInput) (req *request.Request, output *PutBucketWebsiteOutput) { +// GetObjectRetentionWithContext is the same as GetObjectRetention with the addition of +// the ability to pass a context and additional request options. +// +// See GetObjectRetention for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetObjectRetentionWithContext(ctx aws.Context, input *GetObjectRetentionInput, opts ...request.Option) (*GetObjectRetentionOutput, error) { + req, out := c.GetObjectRetentionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetObjectTagging = "GetObjectTagging" + +// GetObjectTaggingRequest generates a "aws/request.Request" representing the +// client's request for the GetObjectTagging operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetObjectTagging for more information on using the GetObjectTagging +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetObjectTaggingRequest method. +// req, resp := client.GetObjectTaggingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTagging +func (c *S3) GetObjectTaggingRequest(input *GetObjectTaggingInput) (req *request.Request, output *GetObjectTaggingOutput) { op := &request.Operation{ - Name: opPutBucketWebsite, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}?website", + Name: opGetObjectTagging, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}/{Key+}?tagging", } if input == nil { - input = &PutBucketWebsiteInput{} + input = &GetObjectTaggingInput{} } + output = &GetObjectTaggingOutput{} req = c.newRequest(op, input, output) - output = &PutBucketWebsiteOutput{} - req.Data = output return } -// Set the website configuration for a bucket. -func (c *S3) PutBucketWebsite(input *PutBucketWebsiteInput) (*PutBucketWebsiteOutput, error) { - req, out := c.PutBucketWebsiteRequest(input) - err := req.Send() - return out, err +// GetObjectTagging API operation for Amazon Simple Storage Service. +// +// Returns the tag-set of an object. You send the GET request against the tagging +// subresource associated with the object. +// +// To use this operation, you must have permission to perform the s3:GetObjectTagging +// action. By default, the GET operation returns information about current version +// of an object. For a versioned bucket, you can have multiple versions of an +// object in your bucket. To retrieve tags of any other version, use the versionId +// query parameter. You also need permission for the s3:GetObjectVersionTagging +// action. +// +// By default, the bucket owner has this permission and can grant this permission +// to others. +// +// For information about the Amazon S3 object tagging feature, see Object Tagging +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html). +// +// The following operation is related to GetObjectTagging: +// +// * PutObjectTagging +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetObjectTagging for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTagging +func (c *S3) GetObjectTagging(input *GetObjectTaggingInput) (*GetObjectTaggingOutput, error) { + req, out := c.GetObjectTaggingRequest(input) + return out, req.Send() } -const opPutObject = "PutObject" +// GetObjectTaggingWithContext is the same as GetObjectTagging with the addition of +// the ability to pass a context and additional request options. +// +// See GetObjectTagging for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetObjectTaggingWithContext(ctx aws.Context, input *GetObjectTaggingInput, opts ...request.Option) (*GetObjectTaggingOutput, error) { + req, out := c.GetObjectTaggingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutObjectRequest generates a request for the PutObject operation. -func (c *S3) PutObjectRequest(input *PutObjectInput) (req *request.Request, output *PutObjectOutput) { +const opGetObjectTorrent = "GetObjectTorrent" + +// GetObjectTorrentRequest generates a "aws/request.Request" representing the +// client's request for the GetObjectTorrent operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetObjectTorrent for more information on using the GetObjectTorrent +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetObjectTorrentRequest method. +// req, resp := client.GetObjectTorrentRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrent +func (c *S3) GetObjectTorrentRequest(input *GetObjectTorrentInput) (req *request.Request, output *GetObjectTorrentOutput) { op := &request.Operation{ - Name: opPutObject, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}/{Key+}", + Name: opGetObjectTorrent, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}/{Key+}?torrent", } if input == nil { - input = &PutObjectInput{} + input = &GetObjectTorrentInput{} } + output = &GetObjectTorrentOutput{} req = c.newRequest(op, input, output) - output = &PutObjectOutput{} - req.Data = output return } -// Adds an object to a bucket. -func (c *S3) PutObject(input *PutObjectInput) (*PutObjectOutput, error) { - req, out := c.PutObjectRequest(input) - err := req.Send() - return out, err +// GetObjectTorrent API operation for Amazon Simple Storage Service. +// +// Return torrent files from a bucket. BitTorrent can save you bandwidth when +// you're distributing large files. For more information about BitTorrent, see +// Amazon S3 Torrent (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3Torrent.html). +// +// You can get torrent only for objects that are less than 5 GB in size and +// that are not encrypted using server-side encryption with customer-provided +// encryption key. +// +// To use GET, you must have READ access to the object. +// +// The following operation is related to GetObjectTorrent: +// +// * GetObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetObjectTorrent for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrent +func (c *S3) GetObjectTorrent(input *GetObjectTorrentInput) (*GetObjectTorrentOutput, error) { + req, out := c.GetObjectTorrentRequest(input) + return out, req.Send() } -const opPutObjectAcl = "PutObjectAcl" +// GetObjectTorrentWithContext is the same as GetObjectTorrent with the addition of +// the ability to pass a context and additional request options. +// +// See GetObjectTorrent for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetObjectTorrentWithContext(ctx aws.Context, input *GetObjectTorrentInput, opts ...request.Option) (*GetObjectTorrentOutput, error) { + req, out := c.GetObjectTorrentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PutObjectAclRequest generates a request for the PutObjectAcl operation. -func (c *S3) PutObjectAclRequest(input *PutObjectAclInput) (req *request.Request, output *PutObjectAclOutput) { - op := &request.Operation{ - Name: opPutObjectAcl, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}/{Key+}?acl", +const opGetPublicAccessBlock = "GetPublicAccessBlock" + +// GetPublicAccessBlockRequest generates a "aws/request.Request" representing the +// client's request for the GetPublicAccessBlock operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetPublicAccessBlock for more information on using the GetPublicAccessBlock +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetPublicAccessBlockRequest method. +// req, resp := client.GetPublicAccessBlockRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlock +func (c *S3) GetPublicAccessBlockRequest(input *GetPublicAccessBlockInput) (req *request.Request, output *GetPublicAccessBlockOutput) { + op := &request.Operation{ + Name: opGetPublicAccessBlock, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?publicAccessBlock", } if input == nil { - input = &PutObjectAclInput{} + input = &GetPublicAccessBlockInput{} } + output = &GetPublicAccessBlockOutput{} req = c.newRequest(op, input, output) - output = &PutObjectAclOutput{} - req.Data = output return } -// uses the acl subresource to set the access control list (ACL) permissions -// for an object that already exists in a bucket -func (c *S3) PutObjectAcl(input *PutObjectAclInput) (*PutObjectAclOutput, error) { - req, out := c.PutObjectAclRequest(input) - err := req.Send() - return out, err +// GetPublicAccessBlock API operation for Amazon Simple Storage Service. +// +// Retrieves the PublicAccessBlock configuration for an Amazon S3 bucket. In +// order to use this operation, you must have the s3:GetBucketPublicAccessBlock +// permission. For more information about Amazon S3 permissions, see Specifying +// Permissions in a Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html). +// +// When Amazon S3 evaluates the PublicAccessBlock configuration for a bucket +// or an object, it checks the PublicAccessBlock configuration for both the +// bucket (or the bucket that contains the object) and the bucket owner's account. +// If the PublicAccessBlock settings are different between the bucket and the +// account, Amazon S3 uses the most restrictive combination of the bucket-level +// and account-level settings. +// +// For more information about when Amazon S3 considers a bucket or an object +// public, see The Meaning of "Public" (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status). +// +// The following operations are related to GetPublicAccessBlock: +// +// * Using Amazon S3 Block Public Access (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html) +// +// * PutPublicAccessBlock +// +// * GetPublicAccessBlock +// +// * DeletePublicAccessBlock +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation GetPublicAccessBlock for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlock +func (c *S3) GetPublicAccessBlock(input *GetPublicAccessBlockInput) (*GetPublicAccessBlockOutput, error) { + req, out := c.GetPublicAccessBlockRequest(input) + return out, req.Send() } -const opRestoreObject = "RestoreObject" +// GetPublicAccessBlockWithContext is the same as GetPublicAccessBlock with the addition of +// the ability to pass a context and additional request options. +// +// See GetPublicAccessBlock for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) GetPublicAccessBlockWithContext(ctx aws.Context, input *GetPublicAccessBlockInput, opts ...request.Option) (*GetPublicAccessBlockOutput, error) { + req, out := c.GetPublicAccessBlockRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// RestoreObjectRequest generates a request for the RestoreObject operation. -func (c *S3) RestoreObjectRequest(input *RestoreObjectInput) (req *request.Request, output *RestoreObjectOutput) { +const opHeadBucket = "HeadBucket" + +// HeadBucketRequest generates a "aws/request.Request" representing the +// client's request for the HeadBucket operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See HeadBucket for more information on using the HeadBucket +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the HeadBucketRequest method. +// req, resp := client.HeadBucketRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadBucket +func (c *S3) HeadBucketRequest(input *HeadBucketInput) (req *request.Request, output *HeadBucketOutput) { op := &request.Operation{ - Name: opRestoreObject, - HTTPMethod: "POST", - HTTPPath: "/{Bucket}/{Key+}?restore", + Name: opHeadBucket, + HTTPMethod: "HEAD", + HTTPPath: "/{Bucket}", } if input == nil { - input = &RestoreObjectInput{} + input = &HeadBucketInput{} } + output = &HeadBucketOutput{} req = c.newRequest(op, input, output) - output = &RestoreObjectOutput{} - req.Data = output + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// Restores an archived copy of an object back into Amazon S3 -func (c *S3) RestoreObject(input *RestoreObjectInput) (*RestoreObjectOutput, error) { - req, out := c.RestoreObjectRequest(input) - err := req.Send() - return out, err +// HeadBucket API operation for Amazon Simple Storage Service. +// +// This operation is useful to determine if a bucket exists and you have permission +// to access it. The operation returns a 200 OK if the bucket exists and you +// have permission to access it. Otherwise, the operation might return responses +// such as 404 Not Found and 403 Forbidden. +// +// To use this operation, you must have permissions to perform the s3:ListBucket +// action. The bucket owner has this permission by default and can grant this +// permission to others. For more information about permissions, see Permissions +// Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation HeadBucket for usage and error information. +// +// Returned Error Codes: +// * ErrCodeNoSuchBucket "NoSuchBucket" +// The specified bucket does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadBucket +func (c *S3) HeadBucket(input *HeadBucketInput) (*HeadBucketOutput, error) { + req, out := c.HeadBucketRequest(input) + return out, req.Send() } -const opUploadPart = "UploadPart" +// HeadBucketWithContext is the same as HeadBucket with the addition of +// the ability to pass a context and additional request options. +// +// See HeadBucket for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) HeadBucketWithContext(ctx aws.Context, input *HeadBucketInput, opts ...request.Option) (*HeadBucketOutput, error) { + req, out := c.HeadBucketRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// UploadPartRequest generates a request for the UploadPart operation. -func (c *S3) UploadPartRequest(input *UploadPartInput) (req *request.Request, output *UploadPartOutput) { +const opHeadObject = "HeadObject" + +// HeadObjectRequest generates a "aws/request.Request" representing the +// client's request for the HeadObject operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See HeadObject for more information on using the HeadObject +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the HeadObjectRequest method. +// req, resp := client.HeadObjectRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObject +func (c *S3) HeadObjectRequest(input *HeadObjectInput) (req *request.Request, output *HeadObjectOutput) { op := &request.Operation{ - Name: opUploadPart, - HTTPMethod: "PUT", + Name: opHeadObject, + HTTPMethod: "HEAD", HTTPPath: "/{Bucket}/{Key+}", } if input == nil { - input = &UploadPartInput{} + input = &HeadObjectInput{} } + output = &HeadObjectOutput{} req = c.newRequest(op, input, output) - output = &UploadPartOutput{} - req.Data = output return } -// Uploads a part in a multipart upload. +// HeadObject API operation for Amazon Simple Storage Service. // -// Note: After you initiate multipart upload and upload one or more parts, you -// must either complete or abort multipart upload in order to stop getting charged -// for storage of the uploaded parts. Only after you either complete or abort -// multipart upload, Amazon S3 frees up the parts storage and stops charging -// you for the parts storage. -func (c *S3) UploadPart(input *UploadPartInput) (*UploadPartOutput, error) { - req, out := c.UploadPartRequest(input) - err := req.Send() - return out, err +// The HEAD operation retrieves metadata from an object without returning the +// object itself. This operation is useful if you're only interested in an object's +// metadata. To use HEAD, you must have READ access to the object. +// +// A HEAD request has the same options as a GET operation on an object. The +// response is identical to the GET response except that there is no response +// body. +// +// If you encrypt an object by using server-side encryption with customer-provided +// encryption keys (SSE-C) when you store the object in Amazon S3, then when +// you retrieve the metadata from the object, you must use the following headers: +// +// * x-amz-server-side​-encryption​-customer-algorithm +// +// * x-amz-server-side​-encryption​-customer-key +// +// * x-amz-server-side​-encryption​-customer-key-MD5 +// +// For more information about SSE-C, see Server-Side Encryption (Using Customer-Provided +// Encryption Keys) (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html). +// +// Encryption request headers, like x-amz-server-side-encryption, should not +// be sent for GET requests if your object uses server-side encryption with +// CMKs stored in AWS KMS (SSE-KMS) or server-side encryption with Amazon S3–managed +// encryption keys (SSE-S3). If your object does use these types of keys, you’ll +// get an HTTP 400 BadRequest error. +// +// Request headers are limited to 8 KB in size. For more information, see Common +// Request Headers (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonRequestHeaders.html). +// +// Consider the following when using request headers: +// +// * Consideration 1 – If both of the If-Match and If-Unmodified-Since +// headers are present in the request as follows: If-Match condition evaluates +// to true, and; If-Unmodified-Since condition evaluates to false; Then Amazon +// S3 returns 200 OK and the data requested. +// +// * Consideration 2 – If both of the If-None-Match and If-Modified-Since +// headers are present in the request as follows: If-None-Match condition +// evaluates to false, and; If-Modified-Since condition evaluates to true; +// Then Amazon S3 returns the 304 Not Modified response code. +// +// For more information about conditional requests, see RFC 7232 (https://tools.ietf.org/html/rfc7232). +// +// Permissions +// +// You need the s3:GetObject permission for this operation. For more information, +// see Specifying Permissions in a Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html). +// If the object you request does not exist, the error Amazon S3 returns depends +// on whether you also have the s3:ListBucket permission. +// +// * If you have the s3:ListBucket permission on the bucket, Amazon S3 will +// return a HTTP status code 404 ("no such key") error. +// +// * If you don’t have the s3:ListBucket permission, Amazon S3 will return +// a HTTP status code 403 ("access denied") error. +// +// The following operation is related to HeadObject: +// +// * GetObject +// +// See http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#RESTErrorResponses +// for more information on returned errors. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation HeadObject for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObject +func (c *S3) HeadObject(input *HeadObjectInput) (*HeadObjectOutput, error) { + req, out := c.HeadObjectRequest(input) + return out, req.Send() } -const opUploadPartCopy = "UploadPartCopy" +// HeadObjectWithContext is the same as HeadObject with the addition of +// the ability to pass a context and additional request options. +// +// See HeadObject for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) HeadObjectWithContext(ctx aws.Context, input *HeadObjectInput, opts ...request.Option) (*HeadObjectOutput, error) { + req, out := c.HeadObjectRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// UploadPartCopyRequest generates a request for the UploadPartCopy operation. -func (c *S3) UploadPartCopyRequest(input *UploadPartCopyInput) (req *request.Request, output *UploadPartCopyOutput) { +const opListBucketAnalyticsConfigurations = "ListBucketAnalyticsConfigurations" + +// ListBucketAnalyticsConfigurationsRequest generates a "aws/request.Request" representing the +// client's request for the ListBucketAnalyticsConfigurations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListBucketAnalyticsConfigurations for more information on using the ListBucketAnalyticsConfigurations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListBucketAnalyticsConfigurationsRequest method. +// req, resp := client.ListBucketAnalyticsConfigurationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurations +func (c *S3) ListBucketAnalyticsConfigurationsRequest(input *ListBucketAnalyticsConfigurationsInput) (req *request.Request, output *ListBucketAnalyticsConfigurationsOutput) { op := &request.Operation{ - Name: opUploadPartCopy, - HTTPMethod: "PUT", - HTTPPath: "/{Bucket}/{Key+}", + Name: opListBucketAnalyticsConfigurations, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?analytics", } if input == nil { - input = &UploadPartCopyInput{} + input = &ListBucketAnalyticsConfigurationsInput{} } + output = &ListBucketAnalyticsConfigurationsOutput{} req = c.newRequest(op, input, output) - output = &UploadPartCopyOutput{} - req.Data = output return } -// Uploads a part by copying data from an existing object as data source. -func (c *S3) UploadPartCopy(input *UploadPartCopyInput) (*UploadPartCopyOutput, error) { - req, out := c.UploadPartCopyRequest(input) - err := req.Send() - return out, err +// ListBucketAnalyticsConfigurations API operation for Amazon Simple Storage Service. +// +// Lists the analytics configurations for the bucket. You can have up to 1,000 +// analytics configurations per bucket. +// +// This operation supports list pagination and does not return more than 100 +// configurations at a time. You should always check the IsTruncated element +// in the response. If there are no more configurations to list, IsTruncated +// is set to false. If there are more configurations to list, IsTruncated is +// set to true, and there will be a value in NextContinuationToken. You use +// the NextContinuationToken value to continue the pagination of the list by +// passing the value in continuation-token in the request to GET the next page. +// +// To use this operation, you must have permissions to perform the s3:GetAnalyticsConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For information about Amazon S3 analytics feature, see Amazon S3 Analytics +// – Storage Class Analysis (https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html). +// +// The following operations are related to ListBucketAnalyticsConfigurations: +// +// * GetBucketAnalyticsConfiguration +// +// * DeleteBucketAnalyticsConfiguration +// +// * PutBucketAnalyticsConfiguration +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListBucketAnalyticsConfigurations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurations +func (c *S3) ListBucketAnalyticsConfigurations(input *ListBucketAnalyticsConfigurationsInput) (*ListBucketAnalyticsConfigurationsOutput, error) { + req, out := c.ListBucketAnalyticsConfigurationsRequest(input) + return out, req.Send() } -type AbortMultipartUploadInput struct { - _ struct{} `type:"structure"` +// ListBucketAnalyticsConfigurationsWithContext is the same as ListBucketAnalyticsConfigurations with the addition of +// the ability to pass a context and additional request options. +// +// See ListBucketAnalyticsConfigurations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListBucketAnalyticsConfigurationsWithContext(ctx aws.Context, input *ListBucketAnalyticsConfigurationsInput, opts ...request.Option) (*ListBucketAnalyticsConfigurationsOutput, error) { + req, out := c.ListBucketAnalyticsConfigurationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opListBucketInventoryConfigurations = "ListBucketInventoryConfigurations" + +// ListBucketInventoryConfigurationsRequest generates a "aws/request.Request" representing the +// client's request for the ListBucketInventoryConfigurations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListBucketInventoryConfigurations for more information on using the ListBucketInventoryConfigurations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListBucketInventoryConfigurationsRequest method. +// req, resp := client.ListBucketInventoryConfigurationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurations +func (c *S3) ListBucketInventoryConfigurationsRequest(input *ListBucketInventoryConfigurationsInput) (req *request.Request, output *ListBucketInventoryConfigurationsOutput) { + op := &request.Operation{ + Name: opListBucketInventoryConfigurations, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?inventory", + } - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + if input == nil { + input = &ListBucketInventoryConfigurationsInput{} + } - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + output = &ListBucketInventoryConfigurationsOutput{} + req = c.newRequest(op, input, output) + return +} - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +// ListBucketInventoryConfigurations API operation for Amazon Simple Storage Service. +// +// Returns a list of inventory configurations for the bucket. You can have up +// to 1,000 analytics configurations per bucket. +// +// This operation supports list pagination and does not return more than 100 +// configurations at a time. Always check the IsTruncated element in the response. +// If there are no more configurations to list, IsTruncated is set to false. +// If there are more configurations to list, IsTruncated is set to true, and +// there is a value in NextContinuationToken. You use the NextContinuationToken +// value to continue the pagination of the list by passing the value in continuation-token +// in the request to GET the next page. +// +// To use this operation, you must have permissions to perform the s3:GetInventoryConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For information about the Amazon S3 inventory feature, see Amazon S3 Inventory +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html) +// +// The following operations are related to ListBucketInventoryConfigurations: +// +// * GetBucketInventoryConfiguration +// +// * DeleteBucketInventoryConfiguration +// +// * PutBucketInventoryConfiguration +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListBucketInventoryConfigurations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurations +func (c *S3) ListBucketInventoryConfigurations(input *ListBucketInventoryConfigurationsInput) (*ListBucketInventoryConfigurationsOutput, error) { + req, out := c.ListBucketInventoryConfigurationsRequest(input) + return out, req.Send() +} + +// ListBucketInventoryConfigurationsWithContext is the same as ListBucketInventoryConfigurations with the addition of +// the ability to pass a context and additional request options. +// +// See ListBucketInventoryConfigurations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListBucketInventoryConfigurationsWithContext(ctx aws.Context, input *ListBucketInventoryConfigurationsInput, opts ...request.Option) (*ListBucketInventoryConfigurationsOutput, error) { + req, out := c.ListBucketInventoryConfigurationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opListBucketMetricsConfigurations = "ListBucketMetricsConfigurations" + +// ListBucketMetricsConfigurationsRequest generates a "aws/request.Request" representing the +// client's request for the ListBucketMetricsConfigurations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListBucketMetricsConfigurations for more information on using the ListBucketMetricsConfigurations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListBucketMetricsConfigurationsRequest method. +// req, resp := client.ListBucketMetricsConfigurationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurations +func (c *S3) ListBucketMetricsConfigurationsRequest(input *ListBucketMetricsConfigurationsInput) (req *request.Request, output *ListBucketMetricsConfigurationsOutput) { + op := &request.Operation{ + Name: opListBucketMetricsConfigurations, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?metrics", + } + + if input == nil { + input = &ListBucketMetricsConfigurationsInput{} + } + + output = &ListBucketMetricsConfigurationsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListBucketMetricsConfigurations API operation for Amazon Simple Storage Service. +// +// Lists the metrics configurations for the bucket. The metrics configurations +// are only for the request metrics of the bucket and do not provide information +// on daily storage metrics. You can have up to 1,000 configurations per bucket. +// +// This operation supports list pagination and does not return more than 100 +// configurations at a time. Always check the IsTruncated element in the response. +// If there are no more configurations to list, IsTruncated is set to false. +// If there are more configurations to list, IsTruncated is set to true, and +// there is a value in NextContinuationToken. You use the NextContinuationToken +// value to continue the pagination of the list by passing the value in continuation-token +// in the request to GET the next page. +// +// To use this operation, you must have permissions to perform the s3:GetMetricsConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For more information about metrics configurations and CloudWatch request +// metrics, see Monitoring Metrics with Amazon CloudWatch (https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html). +// +// The following operations are related to ListBucketMetricsConfigurations: +// +// * PutBucketMetricsConfiguration +// +// * GetBucketMetricsConfiguration +// +// * DeleteBucketMetricsConfiguration +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListBucketMetricsConfigurations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurations +func (c *S3) ListBucketMetricsConfigurations(input *ListBucketMetricsConfigurationsInput) (*ListBucketMetricsConfigurationsOutput, error) { + req, out := c.ListBucketMetricsConfigurationsRequest(input) + return out, req.Send() +} + +// ListBucketMetricsConfigurationsWithContext is the same as ListBucketMetricsConfigurations with the addition of +// the ability to pass a context and additional request options. +// +// See ListBucketMetricsConfigurations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListBucketMetricsConfigurationsWithContext(ctx aws.Context, input *ListBucketMetricsConfigurationsInput, opts ...request.Option) (*ListBucketMetricsConfigurationsOutput, error) { + req, out := c.ListBucketMetricsConfigurationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opListBuckets = "ListBuckets" + +// ListBucketsRequest generates a "aws/request.Request" representing the +// client's request for the ListBuckets operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListBuckets for more information on using the ListBuckets +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListBucketsRequest method. +// req, resp := client.ListBucketsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBuckets +func (c *S3) ListBucketsRequest(input *ListBucketsInput) (req *request.Request, output *ListBucketsOutput) { + op := &request.Operation{ + Name: opListBuckets, + HTTPMethod: "GET", + HTTPPath: "/", + } + + if input == nil { + input = &ListBucketsInput{} + } + + output = &ListBucketsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListBuckets API operation for Amazon Simple Storage Service. +// +// Returns a list of all buckets owned by the authenticated sender of the request. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListBuckets for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBuckets +func (c *S3) ListBuckets(input *ListBucketsInput) (*ListBucketsOutput, error) { + req, out := c.ListBucketsRequest(input) + return out, req.Send() +} + +// ListBucketsWithContext is the same as ListBuckets with the addition of +// the ability to pass a context and additional request options. +// +// See ListBuckets for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListBucketsWithContext(ctx aws.Context, input *ListBucketsInput, opts ...request.Option) (*ListBucketsOutput, error) { + req, out := c.ListBucketsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opListMultipartUploads = "ListMultipartUploads" + +// ListMultipartUploadsRequest generates a "aws/request.Request" representing the +// client's request for the ListMultipartUploads operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListMultipartUploads for more information on using the ListMultipartUploads +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListMultipartUploadsRequest method. +// req, resp := client.ListMultipartUploadsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploads +func (c *S3) ListMultipartUploadsRequest(input *ListMultipartUploadsInput) (req *request.Request, output *ListMultipartUploadsOutput) { + op := &request.Operation{ + Name: opListMultipartUploads, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?uploads", + Paginator: &request.Paginator{ + InputTokens: []string{"KeyMarker", "UploadIdMarker"}, + OutputTokens: []string{"NextKeyMarker", "NextUploadIdMarker"}, + LimitToken: "MaxUploads", + TruncationToken: "IsTruncated", + }, + } + + if input == nil { + input = &ListMultipartUploadsInput{} + } + + output = &ListMultipartUploadsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListMultipartUploads API operation for Amazon Simple Storage Service. +// +// This operation lists in-progress multipart uploads. An in-progress multipart +// upload is a multipart upload that has been initiated using the Initiate Multipart +// Upload request, but has not yet been completed or aborted. +// +// This operation returns at most 1,000 multipart uploads in the response. 1,000 +// multipart uploads is the maximum number of uploads a response can include, +// which is also the default value. You can further limit the number of uploads +// in a response by specifying the max-uploads parameter in the response. If +// additional multipart uploads satisfy the list criteria, the response will +// contain an IsTruncated element with the value true. To list the additional +// multipart uploads, use the key-marker and upload-id-marker request parameters. +// +// In the response, the uploads are sorted by key. If your application has initiated +// more than one multipart upload using the same object key, then uploads in +// the response are first sorted by key. Additionally, uploads are sorted in +// ascending order within each key by the upload initiation time. +// +// For more information on multipart uploads, see Uploading Objects Using Multipart +// Upload (https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html). +// +// For information on permissions required to use the multipart upload API, +// see Multipart Upload API and Permissions (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html). +// +// The following operations are related to ListMultipartUploads: +// +// * CreateMultipartUpload +// +// * UploadPart +// +// * CompleteMultipartUpload +// +// * ListParts +// +// * AbortMultipartUpload +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListMultipartUploads for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploads +func (c *S3) ListMultipartUploads(input *ListMultipartUploadsInput) (*ListMultipartUploadsOutput, error) { + req, out := c.ListMultipartUploadsRequest(input) + return out, req.Send() +} + +// ListMultipartUploadsWithContext is the same as ListMultipartUploads with the addition of +// the ability to pass a context and additional request options. +// +// See ListMultipartUploads for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListMultipartUploadsWithContext(ctx aws.Context, input *ListMultipartUploadsInput, opts ...request.Option) (*ListMultipartUploadsOutput, error) { + req, out := c.ListMultipartUploadsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// ListMultipartUploadsPages iterates over the pages of a ListMultipartUploads operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See ListMultipartUploads method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a ListMultipartUploads operation. +// pageNum := 0 +// err := client.ListMultipartUploadsPages(params, +// func(page *s3.ListMultipartUploadsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *S3) ListMultipartUploadsPages(input *ListMultipartUploadsInput, fn func(*ListMultipartUploadsOutput, bool) bool) error { + return c.ListMultipartUploadsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// ListMultipartUploadsPagesWithContext same as ListMultipartUploadsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListMultipartUploadsPagesWithContext(ctx aws.Context, input *ListMultipartUploadsInput, fn func(*ListMultipartUploadsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *ListMultipartUploadsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.ListMultipartUploadsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*ListMultipartUploadsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opListObjectVersions = "ListObjectVersions" + +// ListObjectVersionsRequest generates a "aws/request.Request" representing the +// client's request for the ListObjectVersions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListObjectVersions for more information on using the ListObjectVersions +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListObjectVersionsRequest method. +// req, resp := client.ListObjectVersionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersions +func (c *S3) ListObjectVersionsRequest(input *ListObjectVersionsInput) (req *request.Request, output *ListObjectVersionsOutput) { + op := &request.Operation{ + Name: opListObjectVersions, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?versions", + Paginator: &request.Paginator{ + InputTokens: []string{"KeyMarker", "VersionIdMarker"}, + OutputTokens: []string{"NextKeyMarker", "NextVersionIdMarker"}, + LimitToken: "MaxKeys", + TruncationToken: "IsTruncated", + }, + } + + if input == nil { + input = &ListObjectVersionsInput{} + } + + output = &ListObjectVersionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListObjectVersions API operation for Amazon Simple Storage Service. +// +// Returns metadata about all of the versions of objects in a bucket. You can +// also use request parameters as selection criteria to return metadata about +// a subset of all the object versions. +// +// A 200 OK response can contain valid or invalid XML. Make sure to design your +// application to parse the contents of the response and handle it appropriately. +// +// To use this operation, you must have READ access to the bucket. +// +// The following operations are related to ListObjectVersions: +// +// * ListObjectsV2 +// +// * GetObject +// +// * PutObject +// +// * DeleteObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListObjectVersions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersions +func (c *S3) ListObjectVersions(input *ListObjectVersionsInput) (*ListObjectVersionsOutput, error) { + req, out := c.ListObjectVersionsRequest(input) + return out, req.Send() +} + +// ListObjectVersionsWithContext is the same as ListObjectVersions with the addition of +// the ability to pass a context and additional request options. +// +// See ListObjectVersions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListObjectVersionsWithContext(ctx aws.Context, input *ListObjectVersionsInput, opts ...request.Option) (*ListObjectVersionsOutput, error) { + req, out := c.ListObjectVersionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// ListObjectVersionsPages iterates over the pages of a ListObjectVersions operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See ListObjectVersions method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a ListObjectVersions operation. +// pageNum := 0 +// err := client.ListObjectVersionsPages(params, +// func(page *s3.ListObjectVersionsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *S3) ListObjectVersionsPages(input *ListObjectVersionsInput, fn func(*ListObjectVersionsOutput, bool) bool) error { + return c.ListObjectVersionsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// ListObjectVersionsPagesWithContext same as ListObjectVersionsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListObjectVersionsPagesWithContext(ctx aws.Context, input *ListObjectVersionsInput, fn func(*ListObjectVersionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *ListObjectVersionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.ListObjectVersionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*ListObjectVersionsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opListObjects = "ListObjects" + +// ListObjectsRequest generates a "aws/request.Request" representing the +// client's request for the ListObjects operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListObjects for more information on using the ListObjects +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListObjectsRequest method. +// req, resp := client.ListObjectsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjects +func (c *S3) ListObjectsRequest(input *ListObjectsInput) (req *request.Request, output *ListObjectsOutput) { + op := &request.Operation{ + Name: opListObjects, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}", + Paginator: &request.Paginator{ + InputTokens: []string{"Marker"}, + OutputTokens: []string{"NextMarker || Contents[-1].Key"}, + LimitToken: "MaxKeys", + TruncationToken: "IsTruncated", + }, + } + + if input == nil { + input = &ListObjectsInput{} + } + + output = &ListObjectsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListObjects API operation for Amazon Simple Storage Service. +// +// Returns some or all (up to 1000) of the objects in a bucket. You can use +// the request parameters as selection criteria to return a subset of the objects +// in a bucket. A 200 OK response can contain valid or invalid XML. Be sure +// to design your application to parse the contents of the response and handle +// it appropriately. +// +// This API has been revised. We recommend that you use the newer version, ListObjectsV2, +// when developing applications. For backward compatibility, Amazon S3 continues +// to support ListObjects. +// +// The following operations are related to ListObjects: +// +// * ListObjectsV2 +// +// * GetObject +// +// * PutObject +// +// * CreateBucket +// +// * ListBuckets +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListObjects for usage and error information. +// +// Returned Error Codes: +// * ErrCodeNoSuchBucket "NoSuchBucket" +// The specified bucket does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjects +func (c *S3) ListObjects(input *ListObjectsInput) (*ListObjectsOutput, error) { + req, out := c.ListObjectsRequest(input) + return out, req.Send() +} + +// ListObjectsWithContext is the same as ListObjects with the addition of +// the ability to pass a context and additional request options. +// +// See ListObjects for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListObjectsWithContext(ctx aws.Context, input *ListObjectsInput, opts ...request.Option) (*ListObjectsOutput, error) { + req, out := c.ListObjectsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// ListObjectsPages iterates over the pages of a ListObjects operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See ListObjects method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a ListObjects operation. +// pageNum := 0 +// err := client.ListObjectsPages(params, +// func(page *s3.ListObjectsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *S3) ListObjectsPages(input *ListObjectsInput, fn func(*ListObjectsOutput, bool) bool) error { + return c.ListObjectsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// ListObjectsPagesWithContext same as ListObjectsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListObjectsPagesWithContext(ctx aws.Context, input *ListObjectsInput, fn func(*ListObjectsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *ListObjectsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.ListObjectsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*ListObjectsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opListObjectsV2 = "ListObjectsV2" + +// ListObjectsV2Request generates a "aws/request.Request" representing the +// client's request for the ListObjectsV2 operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListObjectsV2 for more information on using the ListObjectsV2 +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListObjectsV2Request method. +// req, resp := client.ListObjectsV2Request(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2 +func (c *S3) ListObjectsV2Request(input *ListObjectsV2Input) (req *request.Request, output *ListObjectsV2Output) { + op := &request.Operation{ + Name: opListObjectsV2, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}?list-type=2", + Paginator: &request.Paginator{ + InputTokens: []string{"ContinuationToken"}, + OutputTokens: []string{"NextContinuationToken"}, + LimitToken: "MaxKeys", + TruncationToken: "", + }, + } + + if input == nil { + input = &ListObjectsV2Input{} + } + + output = &ListObjectsV2Output{} + req = c.newRequest(op, input, output) + return +} + +// ListObjectsV2 API operation for Amazon Simple Storage Service. +// +// Returns some or all (up to 1,000) of the objects in a bucket. You can use +// the request parameters as selection criteria to return a subset of the objects +// in a bucket. A 200 OK response can contain valid or invalid XML. Make sure +// to design your application to parse the contents of the response and handle +// it appropriately. +// +// To use thisoperation, you must have READ access to the bucket. +// +// To use this operation in an AWS Identity and Access Management (IAM) policy, +// you must have permissions to perform the s3:ListBucket action. The bucket +// owner has this permission by default and can grant this permission to others. +// For more information about permissions, see Permissions Related to Bucket +// Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// This section describes the latest revision of the API. We recommend that +// you use this revised API for application development. For backward compatibility, +// Amazon S3 continues to support the prior version of this API, ListObjects. +// +// To get a list of your buckets, see ListBuckets. +// +// The following operations are related to ListObjectsV2: +// +// * GetObject +// +// * PutObject +// +// * CreateBucket +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListObjectsV2 for usage and error information. +// +// Returned Error Codes: +// * ErrCodeNoSuchBucket "NoSuchBucket" +// The specified bucket does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2 +func (c *S3) ListObjectsV2(input *ListObjectsV2Input) (*ListObjectsV2Output, error) { + req, out := c.ListObjectsV2Request(input) + return out, req.Send() +} + +// ListObjectsV2WithContext is the same as ListObjectsV2 with the addition of +// the ability to pass a context and additional request options. +// +// See ListObjectsV2 for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListObjectsV2WithContext(ctx aws.Context, input *ListObjectsV2Input, opts ...request.Option) (*ListObjectsV2Output, error) { + req, out := c.ListObjectsV2Request(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// ListObjectsV2Pages iterates over the pages of a ListObjectsV2 operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See ListObjectsV2 method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a ListObjectsV2 operation. +// pageNum := 0 +// err := client.ListObjectsV2Pages(params, +// func(page *s3.ListObjectsV2Output, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *S3) ListObjectsV2Pages(input *ListObjectsV2Input, fn func(*ListObjectsV2Output, bool) bool) error { + return c.ListObjectsV2PagesWithContext(aws.BackgroundContext(), input, fn) +} + +// ListObjectsV2PagesWithContext same as ListObjectsV2Pages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListObjectsV2PagesWithContext(ctx aws.Context, input *ListObjectsV2Input, fn func(*ListObjectsV2Output, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *ListObjectsV2Input + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.ListObjectsV2Request(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*ListObjectsV2Output), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opListParts = "ListParts" + +// ListPartsRequest generates a "aws/request.Request" representing the +// client's request for the ListParts operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ListParts for more information on using the ListParts +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ListPartsRequest method. +// req, resp := client.ListPartsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListParts +func (c *S3) ListPartsRequest(input *ListPartsInput) (req *request.Request, output *ListPartsOutput) { + op := &request.Operation{ + Name: opListParts, + HTTPMethod: "GET", + HTTPPath: "/{Bucket}/{Key+}", + Paginator: &request.Paginator{ + InputTokens: []string{"PartNumberMarker"}, + OutputTokens: []string{"NextPartNumberMarker"}, + LimitToken: "MaxParts", + TruncationToken: "IsTruncated", + }, + } + + if input == nil { + input = &ListPartsInput{} + } + + output = &ListPartsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ListParts API operation for Amazon Simple Storage Service. +// +// Lists the parts that have been uploaded for a specific multipart upload. +// This operation must include the upload ID, which you obtain by sending the +// initiate multipart upload request (see CreateMultipartUpload). This request +// returns a maximum of 1,000 uploaded parts. The default number of parts returned +// is 1,000 parts. You can restrict the number of parts returned by specifying +// the max-parts request parameter. If your multipart upload consists of more +// than 1,000 parts, the response returns an IsTruncated field with the value +// of true, and a NextPartNumberMarker element. In subsequent ListParts requests +// you can include the part-number-marker query string parameter and set its +// value to the NextPartNumberMarker field value from the previous response. +// +// For more information on multipart uploads, see Uploading Objects Using Multipart +// Upload (https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html). +// +// For information on permissions required to use the multipart upload API, +// see Multipart Upload API and Permissions (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html). +// +// The following operations are related to ListParts: +// +// * CreateMultipartUpload +// +// * UploadPart +// +// * CompleteMultipartUpload +// +// * AbortMultipartUpload +// +// * ListMultipartUploads +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation ListParts for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListParts +func (c *S3) ListParts(input *ListPartsInput) (*ListPartsOutput, error) { + req, out := c.ListPartsRequest(input) + return out, req.Send() +} + +// ListPartsWithContext is the same as ListParts with the addition of +// the ability to pass a context and additional request options. +// +// See ListParts for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListPartsWithContext(ctx aws.Context, input *ListPartsInput, opts ...request.Option) (*ListPartsOutput, error) { + req, out := c.ListPartsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// ListPartsPages iterates over the pages of a ListParts operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See ListParts method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a ListParts operation. +// pageNum := 0 +// err := client.ListPartsPages(params, +// func(page *s3.ListPartsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *S3) ListPartsPages(input *ListPartsInput, fn func(*ListPartsOutput, bool) bool) error { + return c.ListPartsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// ListPartsPagesWithContext same as ListPartsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) ListPartsPagesWithContext(ctx aws.Context, input *ListPartsInput, fn func(*ListPartsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *ListPartsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.ListPartsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*ListPartsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opPutBucketAccelerateConfiguration = "PutBucketAccelerateConfiguration" + +// PutBucketAccelerateConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketAccelerateConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketAccelerateConfiguration for more information on using the PutBucketAccelerateConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketAccelerateConfigurationRequest method. +// req, resp := client.PutBucketAccelerateConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAccelerateConfiguration +func (c *S3) PutBucketAccelerateConfigurationRequest(input *PutBucketAccelerateConfigurationInput) (req *request.Request, output *PutBucketAccelerateConfigurationOutput) { + op := &request.Operation{ + Name: opPutBucketAccelerateConfiguration, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?accelerate", + } + + if input == nil { + input = &PutBucketAccelerateConfigurationInput{} + } + + output = &PutBucketAccelerateConfigurationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketAccelerateConfiguration API operation for Amazon Simple Storage Service. +// +// Sets the accelerate configuration of an existing bucket. Amazon S3 Transfer +// Acceleration is a bucket-level feature that enables you to perform faster +// data transfers to Amazon S3. +// +// To use this operation, you must have permission to perform the s3:PutAccelerateConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// The Transfer Acceleration state of a bucket can be set to one of the following +// two values: +// +// * Enabled – Enables accelerated data transfers to the bucket. +// +// * Suspended – Disables accelerated data transfers to the bucket. +// +// The GetBucketAccelerateConfiguration operation returns the transfer acceleration +// state of a bucket. +// +// After setting the Transfer Acceleration state of a bucket to Enabled, it +// might take up to thirty minutes before the data transfer rates to the bucket +// increase. +// +// The name of the bucket used for Transfer Acceleration must be DNS-compliant +// and must not contain periods ("."). +// +// For more information about transfer acceleration, see Transfer Acceleration +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html). +// +// The following operations are related to PutBucketAccelerateConfiguration: +// +// * GetBucketAccelerateConfiguration +// +// * CreateBucket +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketAccelerateConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAccelerateConfiguration +func (c *S3) PutBucketAccelerateConfiguration(input *PutBucketAccelerateConfigurationInput) (*PutBucketAccelerateConfigurationOutput, error) { + req, out := c.PutBucketAccelerateConfigurationRequest(input) + return out, req.Send() +} + +// PutBucketAccelerateConfigurationWithContext is the same as PutBucketAccelerateConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketAccelerateConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketAccelerateConfigurationWithContext(ctx aws.Context, input *PutBucketAccelerateConfigurationInput, opts ...request.Option) (*PutBucketAccelerateConfigurationOutput, error) { + req, out := c.PutBucketAccelerateConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketAcl = "PutBucketAcl" + +// PutBucketAclRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketAcl operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketAcl for more information on using the PutBucketAcl +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketAclRequest method. +// req, resp := client.PutBucketAclRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAcl +func (c *S3) PutBucketAclRequest(input *PutBucketAclInput) (req *request.Request, output *PutBucketAclOutput) { + op := &request.Operation{ + Name: opPutBucketAcl, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?acl", + } + + if input == nil { + input = &PutBucketAclInput{} + } + + output = &PutBucketAclOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketAcl API operation for Amazon Simple Storage Service. +// +// Sets the permissions on an existing bucket using access control lists (ACL). +// For more information, see Using ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). +// To set the ACL of a bucket, you must have WRITE_ACP permission. +// +// You can use one of the following two ways to set a bucket's permissions: +// +// * Specify the ACL in the request body +// +// * Specify permissions using request headers +// +// You cannot specify access permission using both the body and the request +// headers. +// +// Depending on your application needs, you may choose to set the ACL on a bucket +// using either the request body or the headers. For example, if you have an +// existing application that updates a bucket ACL using the request body, then +// you can continue to use that approach. +// +// Access Permissions +// +// You can set access permissions using one of the following methods: +// +// * Specify a canned ACL with the x-amz-acl request header. Amazon S3 supports +// a set of predefined ACLs, known as canned ACLs. Each canned ACL has a +// predefined set of grantees and permissions. Specify the canned ACL name +// as the value of x-amz-acl. If you use this header, you cannot use other +// access control specific headers in your request. For more information, +// see Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly with the x-amz-grant-read, x-amz-grant-read-acp, +// x-amz-grant-write-acp, and x-amz-grant-full-control headers. When using +// these headers you specify explicit access permissions and grantees (AWS +// accounts or a Amazon S3 groups) who will receive the permission. If you +// use these ACL specific headers, you cannot use x-amz-acl header to set +// a canned ACL. These parameters map to the set of permissions that Amazon +// S3 supports in an ACL. For more information, see Access Control List (ACL) +// Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). +// You specify each grantee as a type=value pair, where the type is one of +// the following: emailAddress – if the value specified is the email address +// of an AWS account id – if the value specified is the canonical user +// ID of an AWS account uri – if you are granting permissions to a predefined +// group For example, the following x-amz-grant-write header grants create, +// overwrite, and delete objects permission to LogDelivery group predefined +// by Amazon S3 and two AWS accounts identified by their email addresses. +// x-amz-grant-write: uri="http://acs.amazonaws.com/groups/s3/LogDelivery", +// emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com" +// +// You can use either a canned ACL or specify access permissions explicitly. +// You cannot do both. +// +// Grantee Values +// +// You can specify the person (grantee) to whom you're assigning access rights +// (using request elements) in the following ways: +// +// * By Email address: <>Grantees@email.com<>lt;/Grantee> +// The grantee is resolved to the CanonicalUser and, in a response to a GET +// Object acl request, appears as the CanonicalUser. +// +// * By the person's ID: <>ID<><>GranteesEmail<> +// DisplayName is optional and ignored in the request +// +// * By URI: <>http://acs.amazonaws.com/groups/global/AuthenticatedUsers<> +// +// Related Resources +// +// * CreateBucket +// +// * DeleteBucket +// +// * GetObjectAcl +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketAcl for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAcl +func (c *S3) PutBucketAcl(input *PutBucketAclInput) (*PutBucketAclOutput, error) { + req, out := c.PutBucketAclRequest(input) + return out, req.Send() +} + +// PutBucketAclWithContext is the same as PutBucketAcl with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketAcl for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketAclWithContext(ctx aws.Context, input *PutBucketAclInput, opts ...request.Option) (*PutBucketAclOutput, error) { + req, out := c.PutBucketAclRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketAnalyticsConfiguration = "PutBucketAnalyticsConfiguration" + +// PutBucketAnalyticsConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketAnalyticsConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketAnalyticsConfiguration for more information on using the PutBucketAnalyticsConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketAnalyticsConfigurationRequest method. +// req, resp := client.PutBucketAnalyticsConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAnalyticsConfiguration +func (c *S3) PutBucketAnalyticsConfigurationRequest(input *PutBucketAnalyticsConfigurationInput) (req *request.Request, output *PutBucketAnalyticsConfigurationOutput) { + op := &request.Operation{ + Name: opPutBucketAnalyticsConfiguration, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?analytics", + } + + if input == nil { + input = &PutBucketAnalyticsConfigurationInput{} + } + + output = &PutBucketAnalyticsConfigurationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketAnalyticsConfiguration API operation for Amazon Simple Storage Service. +// +// Sets an analytics configuration for the bucket (specified by the analytics +// configuration ID). You can have up to 1,000 analytics configurations per +// bucket. +// +// You can choose to have storage class analysis export analysis reports to +// a comma-separated values (CSV) flat file, see the DataExport request element. +// Reports are updated daily and are based on the object filters you configure. +// When selecting data export you specify a destination bucket and optional +// destination prefix where the file is written. You can export the data to +// a destination bucket in a different account. However, the destination bucket +// must be in the same region as the bucket that you are making the PUT analytics +// configuration to. For more information, see Amazon S3 Analytics – Storage +// Class Analysis (https://docs.aws.amazon.com/AmazonS3/latest/dev/analytics-storage-class.html). +// +// You must create a bucket policy on the destination bucket where the exported +// file is written to grant permissions to Amazon S3 to write objects to the +// bucket. For an example policy, see Granting Permissions for Amazon S3 Inventory +// and Storage Class Analysis (https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9). +// +// To use this operation, you must have permissions to perform the s3:PutAnalyticsConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// Special Errors +// +// * HTTP Error: HTTP 400 Bad Request Code: InvalidArgument Cause: Invalid +// argument. +// +// * HTTP Error: HTTP 400 Bad Request Code: TooManyConfigurations Cause: +// You are attempting to create a new configuration but have already reached +// the 1,000-configuration limit. +// +// * HTTP Error: HTTP 403 Forbidden Code: AccessDenied Cause: You are not +// the owner of the specified bucket, or you do not have the s3:PutAnalyticsConfiguration +// bucket permission to set the configuration on the bucket. +// +// Related Resources +// +// * +// +// * +// +// * +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketAnalyticsConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAnalyticsConfiguration +func (c *S3) PutBucketAnalyticsConfiguration(input *PutBucketAnalyticsConfigurationInput) (*PutBucketAnalyticsConfigurationOutput, error) { + req, out := c.PutBucketAnalyticsConfigurationRequest(input) + return out, req.Send() +} + +// PutBucketAnalyticsConfigurationWithContext is the same as PutBucketAnalyticsConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketAnalyticsConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketAnalyticsConfigurationWithContext(ctx aws.Context, input *PutBucketAnalyticsConfigurationInput, opts ...request.Option) (*PutBucketAnalyticsConfigurationOutput, error) { + req, out := c.PutBucketAnalyticsConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketCors = "PutBucketCors" + +// PutBucketCorsRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketCors operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketCors for more information on using the PutBucketCors +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketCorsRequest method. +// req, resp := client.PutBucketCorsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketCors +func (c *S3) PutBucketCorsRequest(input *PutBucketCorsInput) (req *request.Request, output *PutBucketCorsOutput) { + op := &request.Operation{ + Name: opPutBucketCors, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?cors", + } + + if input == nil { + input = &PutBucketCorsInput{} + } + + output = &PutBucketCorsOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketCors API operation for Amazon Simple Storage Service. +// +// Sets the cors configuration for your bucket. If the configuration exists, +// Amazon S3 replaces it. +// +// To use this operation, you must be allowed to perform the s3:PutBucketCORS +// action. By default, the bucket owner has this permission and can grant it +// to others. +// +// You set this configuration on a bucket so that the bucket can service cross-origin +// requests. For example, you might want to enable a request whose origin is +// http://www.example.com to access your Amazon S3 bucket at my.example.bucket.com +// by using the browser's XMLHttpRequest capability. +// +// To enable cross-origin resource sharing (CORS) on a bucket, you add the cors +// subresource to the bucket. The cors subresource is an XML document in which +// you configure rules that identify origins and the HTTP methods that can be +// executed on your bucket. The document is limited to 64 KB in size. +// +// When Amazon S3 receives a cross-origin request (or a pre-flight OPTIONS request) +// against a bucket, it evaluates the cors configuration on the bucket and uses +// the first CORSRule rule that matches the incoming browser request to enable +// a cross-origin request. For a rule to match, the following conditions must +// be met: +// +// * The request's Origin header must match AllowedOrigin elements. +// +// * The request method (for example, GET, PUT, HEAD and so on) or the Access-Control-Request-Method +// header in case of a pre-flight OPTIONS request must be one of the AllowedMethod +// elements. +// +// * Every header specified in the Access-Control-Request-Headers request +// header of a pre-flight request must match an AllowedHeader element. +// +// For more information about CORS, go to Enabling Cross-Origin Resource Sharing +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the Amazon +// Simple Storage Service Developer Guide. +// +// Related Resources +// +// * GetBucketCors +// +// * DeleteBucketCors +// +// * RESTOPTIONSobject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketCors for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketCors +func (c *S3) PutBucketCors(input *PutBucketCorsInput) (*PutBucketCorsOutput, error) { + req, out := c.PutBucketCorsRequest(input) + return out, req.Send() +} + +// PutBucketCorsWithContext is the same as PutBucketCors with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketCors for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketCorsWithContext(ctx aws.Context, input *PutBucketCorsInput, opts ...request.Option) (*PutBucketCorsOutput, error) { + req, out := c.PutBucketCorsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketEncryption = "PutBucketEncryption" + +// PutBucketEncryptionRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketEncryption operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketEncryption for more information on using the PutBucketEncryption +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketEncryptionRequest method. +// req, resp := client.PutBucketEncryptionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketEncryption +func (c *S3) PutBucketEncryptionRequest(input *PutBucketEncryptionInput) (req *request.Request, output *PutBucketEncryptionOutput) { + op := &request.Operation{ + Name: opPutBucketEncryption, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?encryption", + } + + if input == nil { + input = &PutBucketEncryptionInput{} + } + + output = &PutBucketEncryptionOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketEncryption API operation for Amazon Simple Storage Service. +// +// This implementation of the PUT operation uses the encryption subresource +// to set the default encryption state of an existing bucket. +// +// This implementation of the PUT operation sets default encryption for a buckets +// using server-side encryption with Amazon S3-managed keys SSE-S3 or AWS KMS +// customer master keys (CMKs) (SSE-KMS) bucket. For information about the Amazon +// S3 default encryption feature, see As a security precaution, the root user +// of the AWS account that owns a bucket can always use this operation, even +// if the policy explicitly denies the root user the ability to perform this +// action. in the Amazon Simple Storage Service Developer Guide. +// +// This operation requires AWS Signature Version 4. For more information, see +// Authenticating Requests (AWS Signature Version 4) (sig-v4-authenticating-requests.html). +// +// To use this operation, you must have permissions to perform the s3:PutEncryptionConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Related Resources +// +// * GetBucketEncryption +// +// * DeleteBucketEncryption +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketEncryption for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketEncryption +func (c *S3) PutBucketEncryption(input *PutBucketEncryptionInput) (*PutBucketEncryptionOutput, error) { + req, out := c.PutBucketEncryptionRequest(input) + return out, req.Send() +} + +// PutBucketEncryptionWithContext is the same as PutBucketEncryption with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketEncryption for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketEncryptionWithContext(ctx aws.Context, input *PutBucketEncryptionInput, opts ...request.Option) (*PutBucketEncryptionOutput, error) { + req, out := c.PutBucketEncryptionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketInventoryConfiguration = "PutBucketInventoryConfiguration" + +// PutBucketInventoryConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketInventoryConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketInventoryConfiguration for more information on using the PutBucketInventoryConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketInventoryConfigurationRequest method. +// req, resp := client.PutBucketInventoryConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketInventoryConfiguration +func (c *S3) PutBucketInventoryConfigurationRequest(input *PutBucketInventoryConfigurationInput) (req *request.Request, output *PutBucketInventoryConfigurationOutput) { + op := &request.Operation{ + Name: opPutBucketInventoryConfiguration, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?inventory", + } + + if input == nil { + input = &PutBucketInventoryConfigurationInput{} + } + + output = &PutBucketInventoryConfigurationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketInventoryConfiguration API operation for Amazon Simple Storage Service. +// +// This implementation of the PUT operation adds an inventory configuration +// (identified by the inventory ID) to the bucket. You can have up to 1,000 +// inventory configurations per bucket. +// +// Amazon S3 inventory generates inventories of the objects in the bucket on +// a daily or weekly basis, and the results are published to a flat file. The +// bucket that is inventoried is called the source bucket, and the bucket where +// the inventory flat file is stored is called the destination bucket. The destination +// bucket must be in the same AWS Region as the source bucket. +// +// When you configure an inventory for a source bucket, you specify the destination +// bucket where you want the inventory to be stored, and whether to generate +// the inventory daily or weekly. You can also configure what object metadata +// to include and whether to inventory all object versions or only current versions. +// For more information, see Amazon S3 Inventory (https://docs.aws.amazon.com/AmazonS3/latest/dev//storage-inventory.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// You must create a bucket policy on the destination bucket to grant permissions +// to Amazon S3 to write objects to the bucket in the defined location. For +// an example policy, see Granting Permissions for Amazon S3 Inventory and Storage +// Class Analysis. (https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-9) +// +// To use this operation, you must have permissions to perform the s3:PutInventoryConfiguration +// action. The bucket owner has this permission by default and can grant this +// permission to others. For more information about permissions, see Permissions +// Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev//using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev//s3-access-control.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Special Errors +// +// * HTTP 400 Bad Request Error Code: InvalidArgument Cause: Invalid Argument +// +// * HTTP 400 Bad Request Error Code: TooManyConfigurations Cause: You are +// attempting to create a new configuration but have already reached the +// 1,000-configuration limit. +// +// * HTTP 403 Forbidden Error Code: AccessDenied Cause: You are not the owner +// of the specified bucket, or you do not have the s3:PutInventoryConfiguration +// bucket permission to set the configuration on the bucket +// +// Related Resources +// +// * GetBucketInventoryConfiguration +// +// * DeleteBucketInventoryConfiguration +// +// * ListBucketInventoryConfigurations +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketInventoryConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketInventoryConfiguration +func (c *S3) PutBucketInventoryConfiguration(input *PutBucketInventoryConfigurationInput) (*PutBucketInventoryConfigurationOutput, error) { + req, out := c.PutBucketInventoryConfigurationRequest(input) + return out, req.Send() +} + +// PutBucketInventoryConfigurationWithContext is the same as PutBucketInventoryConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketInventoryConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketInventoryConfigurationWithContext(ctx aws.Context, input *PutBucketInventoryConfigurationInput, opts ...request.Option) (*PutBucketInventoryConfigurationOutput, error) { + req, out := c.PutBucketInventoryConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketLifecycle = "PutBucketLifecycle" + +// PutBucketLifecycleRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketLifecycle operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketLifecycle for more information on using the PutBucketLifecycle +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketLifecycleRequest method. +// req, resp := client.PutBucketLifecycleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycle +// +// Deprecated: PutBucketLifecycle has been deprecated +func (c *S3) PutBucketLifecycleRequest(input *PutBucketLifecycleInput) (req *request.Request, output *PutBucketLifecycleOutput) { + if c.Client.Config.Logger != nil { + c.Client.Config.Logger.Log("This operation, PutBucketLifecycle, has been deprecated") + } + op := &request.Operation{ + Name: opPutBucketLifecycle, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?lifecycle", + } + + if input == nil { + input = &PutBucketLifecycleInput{} + } + + output = &PutBucketLifecycleOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketLifecycle API operation for Amazon Simple Storage Service. +// +// +// For an updated version of this API, see PutBucketLifecycleConfiguration. +// This version has been deprecated. Existing lifecycle configurations will +// work. For new lifecycle configurations, use the updated API. +// +// Creates a new lifecycle configuration for the bucket or replaces an existing +// lifecycle configuration. For information about lifecycle configuration, see +// Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev//object-lifecycle-mgmt.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// By default, all Amazon S3 resources, including buckets, objects, and related +// subresources (for example, lifecycle configuration and website configuration) +// are private. Only the resource owner, the AWS account that created the resource, +// can access it. The resource owner can optionally grant access permissions +// to others by writing an access policy. For this operation, users must get +// the s3:PutLifecycleConfiguration permission. +// +// You can also explicitly deny permissions. Explicit denial also supersedes +// any other permissions. If you want to prevent users or accounts from removing +// or deleting objects from your bucket, you must deny them permissions for +// the following actions: +// +// * s3:DeleteObject +// +// * s3:DeleteObjectVersion +// +// * s3:PutLifecycleConfiguration +// +// For more information about permissions, see Managing Access Permissions to +// your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev//s3-access-control.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// For more examples of transitioning objects to storage classes such as STANDARD_IA +// or ONEZONE_IA, see Examples of Lifecycle Configuration (https://docs.aws.amazon.com/AmazonS3/latest/dev//intro-lifecycle-rules.html#lifecycle-configuration-examples). +// +// Related Resources +// +// * GetBucketLifecycle(Deprecated) +// +// * GetBucketLifecycleConfiguration +// +// * +// +// * By default, a resource owner—in this case, a bucket owner, which is +// the AWS account that created the bucket—can perform any of the operations. +// A resource owner can also grant others permission to perform the operation. +// For more information, see the following topics in the Amazon Simple Storage +// Service Developer Guide: Specifying Permissions in a Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev//using-with-s3-actions.html) +// Managing Access Permissions to your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev//s3-access-control.html) +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketLifecycle for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycle +// +// Deprecated: PutBucketLifecycle has been deprecated +func (c *S3) PutBucketLifecycle(input *PutBucketLifecycleInput) (*PutBucketLifecycleOutput, error) { + req, out := c.PutBucketLifecycleRequest(input) + return out, req.Send() +} + +// PutBucketLifecycleWithContext is the same as PutBucketLifecycle with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketLifecycle for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +// +// Deprecated: PutBucketLifecycleWithContext has been deprecated +func (c *S3) PutBucketLifecycleWithContext(ctx aws.Context, input *PutBucketLifecycleInput, opts ...request.Option) (*PutBucketLifecycleOutput, error) { + req, out := c.PutBucketLifecycleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketLifecycleConfiguration = "PutBucketLifecycleConfiguration" + +// PutBucketLifecycleConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketLifecycleConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketLifecycleConfiguration for more information on using the PutBucketLifecycleConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketLifecycleConfigurationRequest method. +// req, resp := client.PutBucketLifecycleConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleConfiguration +func (c *S3) PutBucketLifecycleConfigurationRequest(input *PutBucketLifecycleConfigurationInput) (req *request.Request, output *PutBucketLifecycleConfigurationOutput) { + op := &request.Operation{ + Name: opPutBucketLifecycleConfiguration, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?lifecycle", + } + + if input == nil { + input = &PutBucketLifecycleConfigurationInput{} + } + + output = &PutBucketLifecycleConfigurationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketLifecycleConfiguration API operation for Amazon Simple Storage Service. +// +// Creates a new lifecycle configuration for the bucket or replaces an existing +// lifecycle configuration. For information about lifecycle configuration, see +// Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// Bucket lifecycle configuration now supports specifying a lifecycle rule using +// an object key name prefix, one or more object tags, or a combination of both. +// Accordingly, this section describes the latest API. The previous version +// of the API supported filtering based only on an object key name prefix, which +// is supported for backward compatibility. For the related API description, +// see PutBucketLifecycle. +// +// Rules +// +// You specify the lifecycle configuration in your request body. The lifecycle +// configuration is specified as XML consisting of one or more rules. Each rule +// consists of the following: +// +// * Filter identifying a subset of objects to which the rule applies. The +// filter can be based on a key name prefix, object tags, or a combination +// of both. +// +// * Status whether the rule is in effect. +// +// * One or more lifecycle transition and expiration actions that you want +// Amazon S3 to perform on the objects identified by the filter. If the state +// of your bucket is versioning-enabled or versioning-suspended, you can +// have many versions of the same object (one current version and zero or +// more noncurrent versions). Amazon S3 provides predefined actions that +// you can specify for current and noncurrent object versions. +// +// For more information, see Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) +// and Lifecycle Configuration Elements (https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html). +// +// Permissions +// +// By default, all Amazon S3 resources are private, including buckets, objects, +// and related subresources (for example, lifecycle configuration and website +// configuration). Only the resource owner (that is, the AWS account that created +// it) can access the resource. The resource owner can optionally grant access +// permissions to others by writing an access policy. For this operation, a +// user must get the s3:PutLifecycleConfiguration permission. +// +// You can also explicitly deny permissions. Explicit deny also supersedes any +// other permissions. If you want to block users or accounts from removing or +// deleting objects from your bucket, you must deny them permissions for the +// following actions: +// +// * s3:DeleteObject +// +// * s3:DeleteObjectVersion +// +// * s3:PutLifecycleConfiguration +// +// For more information about permissions, see Managing Access Permissions to +// Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// The following are related to PutBucketLifecycleConfiguration: +// +// * Examples of Lifecycle Configuration (https://docs.aws.amazon.com/AmazonS3/latest/dev/lifecycle-configuration-examples.html) +// +// * GetBucketLifecycleConfiguration +// +// * DeleteBucketLifecycle +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketLifecycleConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleConfiguration +func (c *S3) PutBucketLifecycleConfiguration(input *PutBucketLifecycleConfigurationInput) (*PutBucketLifecycleConfigurationOutput, error) { + req, out := c.PutBucketLifecycleConfigurationRequest(input) + return out, req.Send() +} + +// PutBucketLifecycleConfigurationWithContext is the same as PutBucketLifecycleConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketLifecycleConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketLifecycleConfigurationWithContext(ctx aws.Context, input *PutBucketLifecycleConfigurationInput, opts ...request.Option) (*PutBucketLifecycleConfigurationOutput, error) { + req, out := c.PutBucketLifecycleConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketLogging = "PutBucketLogging" + +// PutBucketLoggingRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketLogging operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketLogging for more information on using the PutBucketLogging +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketLoggingRequest method. +// req, resp := client.PutBucketLoggingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLogging +func (c *S3) PutBucketLoggingRequest(input *PutBucketLoggingInput) (req *request.Request, output *PutBucketLoggingOutput) { + op := &request.Operation{ + Name: opPutBucketLogging, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?logging", + } + + if input == nil { + input = &PutBucketLoggingInput{} + } + + output = &PutBucketLoggingOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketLogging API operation for Amazon Simple Storage Service. +// +// Set the logging parameters for a bucket and to specify permissions for who +// can view and modify the logging parameters. All logs are saved to buckets +// in the same AWS Region as the source bucket. To set the logging status of +// a bucket, you must be the bucket owner. +// +// The bucket owner is automatically granted FULL_CONTROL to all logs. You use +// the Grantee request element to grant access to other people. The Permissions +// request element specifies the kind of access the grantee has to the logs. +// +// Grantee Values +// +// You can specify the person (grantee) to whom you're assigning access rights +// (using request elements) in the following ways: +// +// * By the person's ID: <>ID<><>GranteesEmail<> +// DisplayName is optional and ignored in the request. +// +// * By Email address: <>Grantees@email.com<> +// The grantee is resolved to the CanonicalUser and, in a response to a GET +// Object acl request, appears as the CanonicalUser. +// +// * By URI: <>http://acs.amazonaws.com/groups/global/AuthenticatedUsers<> +// +// To enable logging, you use LoggingEnabled and its children request elements. +// To disable logging, you use an empty BucketLoggingStatus request element: +// +// +// +// For more information about server access logging, see Server Access Logging +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerLogs.html). +// +// For more information about creating a bucket, see CreateBucket. For more +// information about returning the logging status of a bucket, see GetBucketLogging. +// +// The following operations are related to PutBucketLogging: +// +// * PutObject +// +// * DeleteBucket +// +// * CreateBucket +// +// * GetBucketLogging +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketLogging for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLogging +func (c *S3) PutBucketLogging(input *PutBucketLoggingInput) (*PutBucketLoggingOutput, error) { + req, out := c.PutBucketLoggingRequest(input) + return out, req.Send() +} + +// PutBucketLoggingWithContext is the same as PutBucketLogging with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketLogging for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketLoggingWithContext(ctx aws.Context, input *PutBucketLoggingInput, opts ...request.Option) (*PutBucketLoggingOutput, error) { + req, out := c.PutBucketLoggingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketMetricsConfiguration = "PutBucketMetricsConfiguration" + +// PutBucketMetricsConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketMetricsConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketMetricsConfiguration for more information on using the PutBucketMetricsConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketMetricsConfigurationRequest method. +// req, resp := client.PutBucketMetricsConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketMetricsConfiguration +func (c *S3) PutBucketMetricsConfigurationRequest(input *PutBucketMetricsConfigurationInput) (req *request.Request, output *PutBucketMetricsConfigurationOutput) { + op := &request.Operation{ + Name: opPutBucketMetricsConfiguration, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?metrics", + } + + if input == nil { + input = &PutBucketMetricsConfigurationInput{} + } + + output = &PutBucketMetricsConfigurationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketMetricsConfiguration API operation for Amazon Simple Storage Service. +// +// Sets a metrics configuration (specified by the metrics configuration ID) +// for the bucket. You can have up to 1,000 metrics configurations per bucket. +// If you're updating an existing metrics configuration, note that this is a +// full replacement of the existing metrics configuration. If you don't include +// the elements you want to keep, they are erased. +// +// To use this operation, you must have permissions to perform the s3:PutMetricsConfiguration +// action. The bucket owner has this permission by default. The bucket owner +// can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// For information about CloudWatch request metrics for Amazon S3, see Monitoring +// Metrics with Amazon CloudWatch (https://docs.aws.amazon.com/AmazonS3/latest/dev/cloudwatch-monitoring.html). +// +// The following operations are related to PutBucketMetricsConfiguration: +// +// * DeleteBucketMetricsConfiguration +// +// * PutBucketMetricsConfiguration +// +// * ListBucketMetricsConfigurations +// +// GetBucketLifecycle has the following special error: +// +// * Error code: TooManyConfigurations Description:You are attempting to +// create a new configuration but have already reached the 1,000-configuration +// limit. HTTP Status Code: HTTP 400 Bad Request +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketMetricsConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketMetricsConfiguration +func (c *S3) PutBucketMetricsConfiguration(input *PutBucketMetricsConfigurationInput) (*PutBucketMetricsConfigurationOutput, error) { + req, out := c.PutBucketMetricsConfigurationRequest(input) + return out, req.Send() +} + +// PutBucketMetricsConfigurationWithContext is the same as PutBucketMetricsConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketMetricsConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketMetricsConfigurationWithContext(ctx aws.Context, input *PutBucketMetricsConfigurationInput, opts ...request.Option) (*PutBucketMetricsConfigurationOutput, error) { + req, out := c.PutBucketMetricsConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketNotification = "PutBucketNotification" + +// PutBucketNotificationRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketNotification operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketNotification for more information on using the PutBucketNotification +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketNotificationRequest method. +// req, resp := client.PutBucketNotificationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotification +// +// Deprecated: PutBucketNotification has been deprecated +func (c *S3) PutBucketNotificationRequest(input *PutBucketNotificationInput) (req *request.Request, output *PutBucketNotificationOutput) { + if c.Client.Config.Logger != nil { + c.Client.Config.Logger.Log("This operation, PutBucketNotification, has been deprecated") + } + op := &request.Operation{ + Name: opPutBucketNotification, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?notification", + } + + if input == nil { + input = &PutBucketNotificationInput{} + } + + output = &PutBucketNotificationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketNotification API operation for Amazon Simple Storage Service. +// +// No longer used, see the PutBucketNotificationConfiguration operation. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketNotification for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotification +// +// Deprecated: PutBucketNotification has been deprecated +func (c *S3) PutBucketNotification(input *PutBucketNotificationInput) (*PutBucketNotificationOutput, error) { + req, out := c.PutBucketNotificationRequest(input) + return out, req.Send() +} + +// PutBucketNotificationWithContext is the same as PutBucketNotification with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketNotification for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +// +// Deprecated: PutBucketNotificationWithContext has been deprecated +func (c *S3) PutBucketNotificationWithContext(ctx aws.Context, input *PutBucketNotificationInput, opts ...request.Option) (*PutBucketNotificationOutput, error) { + req, out := c.PutBucketNotificationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketNotificationConfiguration = "PutBucketNotificationConfiguration" + +// PutBucketNotificationConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketNotificationConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketNotificationConfiguration for more information on using the PutBucketNotificationConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketNotificationConfigurationRequest method. +// req, resp := client.PutBucketNotificationConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationConfiguration +func (c *S3) PutBucketNotificationConfigurationRequest(input *PutBucketNotificationConfigurationInput) (req *request.Request, output *PutBucketNotificationConfigurationOutput) { + op := &request.Operation{ + Name: opPutBucketNotificationConfiguration, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?notification", + } + + if input == nil { + input = &PutBucketNotificationConfigurationInput{} + } + + output = &PutBucketNotificationConfigurationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketNotificationConfiguration API operation for Amazon Simple Storage Service. +// +// Enables notifications of specified events for a bucket. For more information +// about event notifications, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html). +// +// Using this API, you can replace an existing notification configuration. The +// configuration is an XML file that defines the event types that you want Amazon +// S3 to publish and the destination where you want Amazon S3 to publish an +// event notification when it detects an event of the specified type. +// +// By default, your bucket has no event notifications configured. That is, the +// notification configuration will be an empty NotificationConfiguration. +// +// +// +// +// +// This operation replaces the existing notification configuration with the +// configuration you include in the request body. +// +// After Amazon S3 receives this request, it first verifies that any Amazon +// Simple Notification Service (Amazon SNS) or Amazon Simple Queue Service (Amazon +// SQS) destination exists, and that the bucket owner has permission to publish +// to it by sending a test notification. In the case of AWS Lambda destinations, +// Amazon S3 verifies that the Lambda function permissions grant Amazon S3 permission +// to invoke the function from the Amazon S3 bucket. For more information, see +// Configuring Notifications for Amazon S3 Events (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html). +// +// You can disable notifications by adding the empty NotificationConfiguration +// element. +// +// By default, only the bucket owner can configure notifications on a bucket. +// However, bucket owners can use a bucket policy to grant permission to other +// users to set this configuration with s3:PutBucketNotification permission. +// +// The PUT notification is an atomic operation. For example, suppose your notification +// configuration includes SNS topic, SQS queue, and Lambda function configurations. +// When you send a PUT request with this configuration, Amazon S3 sends test +// messages to your SNS topic. If the message fails, the entire PUT operation +// will fail, and Amazon S3 will not add the configuration to your bucket. +// +// Responses +// +// If the configuration in the request body includes only one TopicConfiguration +// specifying only the s3:ReducedRedundancyLostObject event type, the response +// will also include the x-amz-sns-test-message-id header containing the message +// ID of the test notification sent to topic. +// +// The following operations is related to PutBucketNotificationConfiguration: +// +// * GetBucketNotificationConfiguration +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketNotificationConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationConfiguration +func (c *S3) PutBucketNotificationConfiguration(input *PutBucketNotificationConfigurationInput) (*PutBucketNotificationConfigurationOutput, error) { + req, out := c.PutBucketNotificationConfigurationRequest(input) + return out, req.Send() +} + +// PutBucketNotificationConfigurationWithContext is the same as PutBucketNotificationConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketNotificationConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketNotificationConfigurationWithContext(ctx aws.Context, input *PutBucketNotificationConfigurationInput, opts ...request.Option) (*PutBucketNotificationConfigurationOutput, error) { + req, out := c.PutBucketNotificationConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketPolicy = "PutBucketPolicy" + +// PutBucketPolicyRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketPolicy operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketPolicy for more information on using the PutBucketPolicy +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketPolicyRequest method. +// req, resp := client.PutBucketPolicyRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketPolicy +func (c *S3) PutBucketPolicyRequest(input *PutBucketPolicyInput) (req *request.Request, output *PutBucketPolicyOutput) { + op := &request.Operation{ + Name: opPutBucketPolicy, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?policy", + } + + if input == nil { + input = &PutBucketPolicyInput{} + } + + output = &PutBucketPolicyOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketPolicy API operation for Amazon Simple Storage Service. +// +// Applies an Amazon S3 bucket policy to an Amazon S3 bucket. If you are using +// an identity other than the root user of the AWS account that owns the bucket, +// the calling identity must have the PutBucketPolicy permissions on the specified +// bucket and belong to the bucket owner's account in order to use this operation. +// +// If you don't have PutBucketPolicy permissions, Amazon S3 returns a 403 Access +// Denied error. If you have the correct permissions, but you're not using an +// identity that belongs to the bucket owner's account, Amazon S3 returns a +// 405 Method Not Allowed error. +// +// As a security precaution, the root user of the AWS account that owns a bucket +// can always use this operation, even if the policy explicitly denies the root +// user the ability to perform this action. +// +// For more information about bucket policies, see Using Bucket Policies and +// User Policies (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html). +// +// The following operations are related to PutBucketPolicy: +// +// * CreateBucket +// +// * DeleteBucket +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketPolicy for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketPolicy +func (c *S3) PutBucketPolicy(input *PutBucketPolicyInput) (*PutBucketPolicyOutput, error) { + req, out := c.PutBucketPolicyRequest(input) + return out, req.Send() +} + +// PutBucketPolicyWithContext is the same as PutBucketPolicy with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketPolicy for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketPolicyWithContext(ctx aws.Context, input *PutBucketPolicyInput, opts ...request.Option) (*PutBucketPolicyOutput, error) { + req, out := c.PutBucketPolicyRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketReplication = "PutBucketReplication" + +// PutBucketReplicationRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketReplication operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketReplication for more information on using the PutBucketReplication +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketReplicationRequest method. +// req, resp := client.PutBucketReplicationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketReplication +func (c *S3) PutBucketReplicationRequest(input *PutBucketReplicationInput) (req *request.Request, output *PutBucketReplicationOutput) { + op := &request.Operation{ + Name: opPutBucketReplication, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?replication", + } + + if input == nil { + input = &PutBucketReplicationInput{} + } + + output = &PutBucketReplicationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketReplication API operation for Amazon Simple Storage Service. +// +// Creates a replication configuration or replaces an existing one. For more +// information, see Replication (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html) +// in the Amazon S3 Developer Guide. +// +// To perform this operation, the user or role performing the operation must +// have the iam:PassRole (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) +// permission. +// +// Specify the replication configuration in the request body. In the replication +// configuration, you provide the name of the destination bucket where you want +// Amazon S3 to replicate objects, the IAM role that Amazon S3 can assume to +// replicate objects on your behalf, and other relevant information. +// +// A replication configuration must include at least one rule, and can contain +// a maximum of 1,000. Each rule identifies a subset of objects to replicate +// by filtering the objects in the source bucket. To choose additional subsets +// of objects to replicate, add a rule for each subset. All rules must specify +// the same destination bucket. +// +// To specify a subset of the objects in the source bucket to apply a replication +// rule to, add the Filter element as a child of the Rule element. You can filter +// objects based on an object key prefix, one or more object tags, or both. +// When you add the Filter element in the configuration, you must also add the +// following elements: DeleteMarkerReplication, Status, and Priority. +// +// For information about enabling versioning on a bucket, see Using Versioning +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html). +// +// By default, a resource owner, in this case the AWS account that created the +// bucket, can perform this operation. The resource owner can also grant others +// permissions to perform the operation. For more information about permissions, +// see Specifying Permissions in a Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// Handling Replication of Encrypted Objects +// +// By default, Amazon S3 doesn't replicate objects that are stored at rest using +// server-side encryption with CMKs stored in AWS KMS. To replicate AWS KMS-encrypted +// objects, add the following: SourceSelectionCriteria, SseKmsEncryptedObjects, +// Status, EncryptionConfiguration, and ReplicaKmsKeyID. For information about +// replication configuration, see Replicating Objects Created with SSE Using +// CMKs stored in AWS KMS (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-config-for-kms-objects.html). +// +// PutBucketReplication has the following special errors: +// +// * Error code: InvalidRequest Description: If the in +// has a value, the element must be specified. HTTP 400 +// +// * Error code: InvalidArgument Description: The element is empty. +// It must contain a valid account ID. HTTP 400 +// +// * Error code: InvalidArgument Description: The AWS account specified in +// the element must match the destination bucket owner. HTTP 400 +// +// The following operations are related to PutBucketReplication: +// +// * GetBucketReplication +// +// * DeleteBucketReplication +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketReplication for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketReplication +func (c *S3) PutBucketReplication(input *PutBucketReplicationInput) (*PutBucketReplicationOutput, error) { + req, out := c.PutBucketReplicationRequest(input) + return out, req.Send() +} + +// PutBucketReplicationWithContext is the same as PutBucketReplication with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketReplication for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketReplicationWithContext(ctx aws.Context, input *PutBucketReplicationInput, opts ...request.Option) (*PutBucketReplicationOutput, error) { + req, out := c.PutBucketReplicationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketRequestPayment = "PutBucketRequestPayment" + +// PutBucketRequestPaymentRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketRequestPayment operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketRequestPayment for more information on using the PutBucketRequestPayment +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketRequestPaymentRequest method. +// req, resp := client.PutBucketRequestPaymentRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketRequestPayment +func (c *S3) PutBucketRequestPaymentRequest(input *PutBucketRequestPaymentInput) (req *request.Request, output *PutBucketRequestPaymentOutput) { + op := &request.Operation{ + Name: opPutBucketRequestPayment, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?requestPayment", + } + + if input == nil { + input = &PutBucketRequestPaymentInput{} + } + + output = &PutBucketRequestPaymentOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketRequestPayment API operation for Amazon Simple Storage Service. +// +// Sets the request payment configuration for a bucket. By default, the bucket +// owner pays for downloads from the bucket. This configuration parameter enables +// the bucket owner (only) to specify that the person requesting the download +// will be charged for the download. For more information, see Requester Pays +// Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html). +// +// The following operations are related to PutBucketRequestPayment: +// +// * CreateBucket +// +// * GetBucketRequestPayment +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketRequestPayment for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketRequestPayment +func (c *S3) PutBucketRequestPayment(input *PutBucketRequestPaymentInput) (*PutBucketRequestPaymentOutput, error) { + req, out := c.PutBucketRequestPaymentRequest(input) + return out, req.Send() +} + +// PutBucketRequestPaymentWithContext is the same as PutBucketRequestPayment with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketRequestPayment for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketRequestPaymentWithContext(ctx aws.Context, input *PutBucketRequestPaymentInput, opts ...request.Option) (*PutBucketRequestPaymentOutput, error) { + req, out := c.PutBucketRequestPaymentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketTagging = "PutBucketTagging" + +// PutBucketTaggingRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketTagging operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketTagging for more information on using the PutBucketTagging +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketTaggingRequest method. +// req, resp := client.PutBucketTaggingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketTagging +func (c *S3) PutBucketTaggingRequest(input *PutBucketTaggingInput) (req *request.Request, output *PutBucketTaggingOutput) { + op := &request.Operation{ + Name: opPutBucketTagging, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?tagging", + } + + if input == nil { + input = &PutBucketTaggingInput{} + } + + output = &PutBucketTaggingOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketTagging API operation for Amazon Simple Storage Service. +// +// Sets the tags for a bucket. +// +// Use tags to organize your AWS bill to reflect your own cost structure. To +// do this, sign up to get your AWS account bill with tag key values included. +// Then, to see the cost of combined resources, organize your billing information +// according to resources with the same tag key values. For example, you can +// tag several resources with a specific application name, and then organize +// your billing information to see the total cost of that application across +// several services. For more information, see Cost Allocation and Tagging (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html). +// +// Within a bucket, if you add a tag that has the same key as an existing tag, +// the new value overwrites the old value. For more information, see Using Cost +// Allocation in Amazon S3 Bucket Tags (https://docs.aws.amazon.com/AmazonS3/latest/dev/CostAllocTagging.html). +// +// To use this operation, you must have permissions to perform the s3:PutBucketTagging +// action. The bucket owner has this permission by default and can grant this +// permission to others. For more information about permissions, see Permissions +// Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html). +// +// PutBucketTagging has the following special errors: +// +// * Error code: InvalidTagError Description: The tag provided was not a +// valid tag. This error can occur if the tag did not pass input validation. +// For information about tag restrictions, see User-Defined Tag Restrictions +// (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2//allocation-tag-restrictions.html) +// and AWS-Generated Cost Allocation Tag Restrictions (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2//aws-tag-restrictions.html). +// +// * Error code: MalformedXMLError Description: The XML provided does not +// match the schema. +// +// * Error code: OperationAbortedError Description: A conflicting conditional +// operation is currently in progress against this resource. Please try again. +// +// * Error code: InternalError Description: The service was unable to apply +// the provided tag to the bucket. +// +// The following operations are related to PutBucketTagging: +// +// * GetBucketTagging +// +// * DeleteBucketTagging +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketTagging for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketTagging +func (c *S3) PutBucketTagging(input *PutBucketTaggingInput) (*PutBucketTaggingOutput, error) { + req, out := c.PutBucketTaggingRequest(input) + return out, req.Send() +} + +// PutBucketTaggingWithContext is the same as PutBucketTagging with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketTagging for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketTaggingWithContext(ctx aws.Context, input *PutBucketTaggingInput, opts ...request.Option) (*PutBucketTaggingOutput, error) { + req, out := c.PutBucketTaggingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketVersioning = "PutBucketVersioning" + +// PutBucketVersioningRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketVersioning operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketVersioning for more information on using the PutBucketVersioning +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketVersioningRequest method. +// req, resp := client.PutBucketVersioningRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketVersioning +func (c *S3) PutBucketVersioningRequest(input *PutBucketVersioningInput) (req *request.Request, output *PutBucketVersioningOutput) { + op := &request.Operation{ + Name: opPutBucketVersioning, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?versioning", + } + + if input == nil { + input = &PutBucketVersioningInput{} + } + + output = &PutBucketVersioningOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketVersioning API operation for Amazon Simple Storage Service. +// +// Sets the versioning state of an existing bucket. To set the versioning state, +// you must be the bucket owner. +// +// You can set the versioning state with one of the following values: +// +// Enabled—Enables versioning for the objects in the bucket. All objects added +// to the bucket receive a unique version ID. +// +// Suspended—Disables versioning for the objects in the bucket. All objects +// added to the bucket receive the version ID null. +// +// If the versioning state has never been set on a bucket, it has no versioning +// state; a GetBucketVersioning request does not return a versioning state value. +// +// If the bucket owner enables MFA Delete in the bucket versioning configuration, +// the bucket owner must include the x-amz-mfa request header and the Status +// and the MfaDelete request elements in a request to set the versioning state +// of the bucket. +// +// If you have an object expiration lifecycle policy in your non-versioned bucket +// and you want to maintain the same permanent delete behavior when you enable +// versioning, you must add a noncurrent expiration policy. The noncurrent expiration +// lifecycle policy will manage the deletes of the noncurrent object versions +// in the version-enabled bucket. (A version-enabled bucket maintains one current +// and zero or more noncurrent object versions.) For more information, see Lifecycle +// and Versioning (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-and-other-bucket-config). +// +// Related Resources +// +// * CreateBucket +// +// * DeleteBucket +// +// * GetBucketVersioning +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketVersioning for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketVersioning +func (c *S3) PutBucketVersioning(input *PutBucketVersioningInput) (*PutBucketVersioningOutput, error) { + req, out := c.PutBucketVersioningRequest(input) + return out, req.Send() +} + +// PutBucketVersioningWithContext is the same as PutBucketVersioning with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketVersioning for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketVersioningWithContext(ctx aws.Context, input *PutBucketVersioningInput, opts ...request.Option) (*PutBucketVersioningOutput, error) { + req, out := c.PutBucketVersioningRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutBucketWebsite = "PutBucketWebsite" + +// PutBucketWebsiteRequest generates a "aws/request.Request" representing the +// client's request for the PutBucketWebsite operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutBucketWebsite for more information on using the PutBucketWebsite +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutBucketWebsiteRequest method. +// req, resp := client.PutBucketWebsiteRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketWebsite +func (c *S3) PutBucketWebsiteRequest(input *PutBucketWebsiteInput) (req *request.Request, output *PutBucketWebsiteOutput) { + op := &request.Operation{ + Name: opPutBucketWebsite, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?website", + } + + if input == nil { + input = &PutBucketWebsiteInput{} + } + + output = &PutBucketWebsiteOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutBucketWebsite API operation for Amazon Simple Storage Service. +// +// Sets the configuration of the website that is specified in the website subresource. +// To configure a bucket as a website, you can add this subresource on the bucket +// with website configuration information such as the file name of the index +// document and any redirect rules. For more information, see Hosting Websites +// on Amazon S3 (https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html). +// +// This PUT operation requires the S3:PutBucketWebsite permission. By default, +// only the bucket owner can configure the website attached to a bucket; however, +// bucket owners can allow other users to set the website configuration by writing +// a bucket policy that grants them the S3:PutBucketWebsite permission. +// +// To redirect all website requests sent to the bucket's website endpoint, you +// add a website configuration with the following elements. Because all requests +// are sent to another website, you don't need to provide index document name +// for the bucket. +// +// * WebsiteConfiguration +// +// * RedirectAllRequestsTo +// +// * HostName +// +// * Protocol +// +// If you want granular control over redirects, you can use the following elements +// to add routing rules that describe conditions for redirecting requests and +// information about the redirect destination. In this case, the website configuration +// must provide an index document for the bucket, because some requests might +// not be redirected. +// +// * WebsiteConfiguration +// +// * IndexDocument +// +// * Suffix +// +// * ErrorDocument +// +// * Key +// +// * RoutingRules +// +// * RoutingRule +// +// * Condition +// +// * HttpErrorCodeReturnedEquals +// +// * KeyPrefixEquals +// +// * Redirect +// +// * Protocol +// +// * HostName +// +// * ReplaceKeyPrefixWith +// +// * ReplaceKeyWith +// +// * HttpRedirectCode +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutBucketWebsite for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketWebsite +func (c *S3) PutBucketWebsite(input *PutBucketWebsiteInput) (*PutBucketWebsiteOutput, error) { + req, out := c.PutBucketWebsiteRequest(input) + return out, req.Send() +} + +// PutBucketWebsiteWithContext is the same as PutBucketWebsite with the addition of +// the ability to pass a context and additional request options. +// +// See PutBucketWebsite for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutBucketWebsiteWithContext(ctx aws.Context, input *PutBucketWebsiteInput, opts ...request.Option) (*PutBucketWebsiteOutput, error) { + req, out := c.PutBucketWebsiteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutObject = "PutObject" + +// PutObjectRequest generates a "aws/request.Request" representing the +// client's request for the PutObject operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutObject for more information on using the PutObject +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutObjectRequest method. +// req, resp := client.PutObjectRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObject +func (c *S3) PutObjectRequest(input *PutObjectInput) (req *request.Request, output *PutObjectOutput) { + op := &request.Operation{ + Name: opPutObject, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}/{Key+}", + } + + if input == nil { + input = &PutObjectInput{} + } + + output = &PutObjectOutput{} + req = c.newRequest(op, input, output) + return +} + +// PutObject API operation for Amazon Simple Storage Service. +// +// Adds an object to a bucket. You must have WRITE permissions on a bucket to +// add an object to it. +// +// Amazon S3 never adds partial objects; if you receive a success response, +// Amazon S3 added the entire object to the bucket. +// +// Amazon S3 is a distributed system. If it receives multiple write requests +// for the same object simultaneously, it overwrites all but the last object +// written. Amazon S3 does not provide object locking; if you need this, make +// sure to build it into your application layer or use versioning instead. +// +// To ensure that data is not corrupted traversing the network, use the Content-MD5 +// header. When you use this header, Amazon S3 checks the object against the +// provided MD5 value and, if they do not match, returns an error. Additionally, +// you can calculate the MD5 while putting an object to Amazon S3 and compare +// the returned ETag to the calculated MD5 value. +// +// To configure your application to send the request headers before sending +// the request body, use the 100-continue HTTP status code. For PUT operations, +// this helps you avoid sending the message body if the message is rejected +// based on the headers (for example, because authentication fails or a redirect +// occurs). For more information on the 100-continue HTTP status code, see Section +// 8.2.3 of http://www.ietf.org/rfc/rfc2616.txt (http://www.ietf.org/rfc/rfc2616.txt). +// +// You can optionally request server-side encryption. With server-side encryption, +// Amazon S3 encrypts your data as it writes it to disks in its data centers +// and decrypts the data when you access it. You have the option to provide +// your own encryption key or use AWS-managed encryption keys. For more information, +// see Using Server-Side Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html). +// +// Access Permissions +// +// You can optionally specify the accounts or groups that should be granted +// specific permissions on the new object. There are two ways to grant the permissions +// using the request headers: +// +// * Specify a canned ACL with the x-amz-acl request header. For more information, +// see Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly with the x-amz-grant-read, x-amz-grant-read-acp, +// x-amz-grant-write-acp, and x-amz-grant-full-control headers. These parameters +// map to the set of permissions that Amazon S3 supports in an ACL. For more +// information, see Access Control List (ACL) Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). +// +// You can use either a canned ACL or specify access permissions explicitly. +// You cannot do both. +// +// Server-Side- Encryption-Specific Request Headers +// +// You can optionally tell Amazon S3 to encrypt data at rest using server-side +// encryption. Server-side encryption is for data encryption at rest. Amazon +// S3 encrypts your data as it writes it to disks in its data centers and decrypts +// it when you access it. The option you use depends on whether you want to +// use AWS-managed encryption keys or provide your own encryption key. +// +// * Use encryption keys managed Amazon S3 or customer master keys (CMKs) +// stored in AWS Key Management Service (KMS) – If you want AWS to manage +// the keys used to encrypt data, specify the following headers in the request. +// x-amz-server-side​-encryption x-amz-server-side-encryption-aws-kms-key-id +// x-amz-server-side-encryption-context If you specify x-amz-server-side-encryption:aws:kms, +// but don't provide x-amz-server-side- encryption-aws-kms-key-id, Amazon +// S3 uses the AWS managed CMK in AWS KMS to protect the data. All GET and +// PUT requests for an object protected by AWS KMS fail if you don't make +// them with SSL or by using SigV4. For more information on Server-Side Encryption +// with CMKs stored in AWS KMS (SSE-KMS), see Protecting Data Using Server-Side +// Encryption with CMKs stored in AWS (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html). +// +// * Use customer-provided encryption keys – If you want to manage your +// own encryption keys, provide all the following headers in the request. +// x-amz-server-side​-encryption​-customer-algorithm x-amz-server-side​-encryption​-customer-key +// x-amz-server-side​-encryption​-customer-key-MD5 For more information +// on Server-Side Encryption with CMKs stored in KMS (SSE-KMS), see Protecting +// Data Using Server-Side Encryption with CMKs stored in AWS KMS (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html). +// +// Access-Control-List (ACL)-Specific Request Headers +// +// You also can use the following access control–related headers with this +// operation. By default, all objects are private. Only the owner has full access +// control. When adding a new object, you can grant permissions to individual +// AWS accounts or to predefined groups defined by Amazon S3. These permissions +// are then added to the Access Control List (ACL) on the object. For more information, +// see Using ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html). +// With this operation, you can grant access permissions using one of the following +// two methods: +// +// * Specify a canned ACL (x-amz-acl) — Amazon S3 supports a set of predefined +// ACLs, known as canned ACLs. Each canned ACL has a predefined set of grantees +// and permissions. For more information, see Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly — To explicitly grant access +// permissions to specific AWS accounts or groups, use the following headers. +// Each header maps to specific permissions that Amazon S3 supports in an +// ACL. For more information, see Access Control List (ACL) Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). +// In the header, you specify a list of grantees who get the specific permission. +// To grant permissions explicitly use: x-amz-grant-read x-amz-grant-write +// x-amz-grant-read-acp x-amz-grant-write-acp x-amz-grant-full-control You +// specify each grantee as a type=value pair, where the type is one of the +// following: emailAddress – if the value specified is the email address +// of an AWS account Using email addresses to specify a grantee is only supported +// in the following AWS Regions: US East (N. Virginia) US West (N. California) +// US West (Oregon) Asia Pacific (Singapore) Asia Pacific (Sydney) Asia Pacific +// (Tokyo) EU (Ireland) South America (São Paulo) For a list of all the +// Amazon S3 supported regions and endpoints, see Regions and Endpoints (https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) +// in the AWS General Reference id – if the value specified is the canonical +// user ID of an AWS account uri – if you are granting permissions to a +// predefined group For example, the following x-amz-grant-read header grants +// the AWS accounts identified by email addresses permissions to read object +// data and its metadata: x-amz-grant-read: emailAddress="xyz@amazon.com", +// emailAddress="abc@amazon.com" +// +// Server-Side- Encryption-Specific Request Headers +// +// You can optionally tell Amazon S3 to encrypt data at rest using server-side +// encryption. Server-side encryption is for data encryption at rest. Amazon +// S3 encrypts your data as it writes it to disks in its data centers and decrypts +// it when you access it. The option you use depends on whether you want to +// use AWS-managed encryption keys or provide your own encryption key. +// +// * Use encryption keys managed by Amazon S3 or customer master keys (CMKs) +// stored in AWS Key Management Service (KMS) – If you want AWS to manage +// the keys used to encrypt data, specify the following headers in the request. +// x-amz-server-side​-encryption x-amz-server-side-encryption-aws-kms-key-id +// x-amz-server-side-encryption-context If you specify x-amz-server-side-encryption:aws:kms, +// but don't provide x-amz-server-side- encryption-aws-kms-key-id, Amazon +// S3 uses the default AWS KMS CMK to protect the data. All GET and PUT requests +// for an object protected by AWS KMS fail if you don't make them with SSL +// or by using SigV4. For more information on Server-Side Encryption with +// CMKs stored in AWS KMS (SSE-KMS), see Protecting Data Using Server-Side +// Encryption with CMKs stored in AWS KMS (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html). +// +// * Use customer-provided encryption keys – If you want to manage your +// own encryption keys, provide all the following headers in the request. +// If you use this feature, the ETag value that Amazon S3 returns in the +// response is not the MD5 of the object. x-amz-server-side​-encryption​-customer-algorithm +// x-amz-server-side​-encryption​-customer-key x-amz-server-side​-encryption​-customer-key-MD5 +// For more information on Server-Side Encryption with CMKs stored in AWS +// KMS (SSE-KMS), see Protecting Data Using Server-Side Encryption with CMKs +// stored in AWS KMS (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html). +// +// Storage Class Options +// +// By default, Amazon S3 uses the Standard storage class to store newly created +// objects. The Standard storage class provides high durability and high availability. +// You can specify other storage classes depending on the performance needs. +// For more information, see Storage Classes (https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Versioning +// +// If you enable versioning for a bucket, Amazon S3 automatically generates +// a unique version ID for the object being stored. Amazon S3 returns this ID +// in the response using the x-amz-version-id response header. If versioning +// is suspended, Amazon S3 always uses null as the version ID for the object +// stored. For more information about returning the versioning state of a bucket, +// see GetBucketVersioning. If you enable versioning for a bucket, when Amazon +// S3 receives multiple write requests for the same object simultaneously, it +// stores all of the objects. +// +// Related Resources +// +// * CopyObject +// +// * DeleteObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutObject for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObject +func (c *S3) PutObject(input *PutObjectInput) (*PutObjectOutput, error) { + req, out := c.PutObjectRequest(input) + return out, req.Send() +} + +// PutObjectWithContext is the same as PutObject with the addition of +// the ability to pass a context and additional request options. +// +// See PutObject for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutObjectWithContext(ctx aws.Context, input *PutObjectInput, opts ...request.Option) (*PutObjectOutput, error) { + req, out := c.PutObjectRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutObjectAcl = "PutObjectAcl" + +// PutObjectAclRequest generates a "aws/request.Request" representing the +// client's request for the PutObjectAcl operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutObjectAcl for more information on using the PutObjectAcl +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutObjectAclRequest method. +// req, resp := client.PutObjectAclRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAcl +func (c *S3) PutObjectAclRequest(input *PutObjectAclInput) (req *request.Request, output *PutObjectAclOutput) { + op := &request.Operation{ + Name: opPutObjectAcl, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}/{Key+}?acl", + } + + if input == nil { + input = &PutObjectAclInput{} + } + + output = &PutObjectAclOutput{} + req = c.newRequest(op, input, output) + return +} + +// PutObjectAcl API operation for Amazon Simple Storage Service. +// +// uses the acl subresource to set the access control list (ACL) permissions +// for an object that already exists in a bucket. You must have WRITE_ACP permission +// to set the ACL of an object. +// +// Depending on your application needs, you may choose to set the ACL on an +// object using either the request body or the headers. For example, if you +// have an existing application that updates a bucket ACL using the request +// body, then you can continue to use that approach. +// +// Access Permissions +// +// You can set access permissions using one of the following methods: +// +// * Specify a canned ACL with the x-amz-acl request header. Amazon S3 supports +// a set of predefined ACLs, known as canned ACLs. Each canned ACL has a +// predefined set of grantees and permissions. Specify the canned ACL name +// as the value of x-amz-acl. If you use this header, you cannot use other +// access control specific headers in your request. For more information, +// see Canned ACL (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). +// +// * Specify access permissions explicitly with the x-amz-grant-read, x-amz-grant-read-acp, +// x-amz-grant-write-acp, and x-amz-grant-full-control headers. When using +// these headers you specify explicit access permissions and grantees (AWS +// accounts or a Amazon S3 groups) who will receive the permission. If you +// use these ACL specific headers, you cannot use x-amz-acl header to set +// a canned ACL. These parameters map to the set of permissions that Amazon +// S3 supports in an ACL. For more information, see Access Control List (ACL) +// Overview (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html). +// You specify each grantee as a type=value pair, where the type is one of +// the following: emailAddress – if the value specified is the email address +// of an AWS account id – if the value specified is the canonical user +// ID of an AWS account uri – if you are granting permissions to a predefined +// group For example, the following x-amz-grant-read header grants list objects +// permission to the two AWS accounts identified by their email addresses. +// x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com" +// +// You can use either a canned ACL or specify access permissions explicitly. +// You cannot do both. +// +// Grantee Values +// +// You can specify the person (grantee) to whom you're assigning access rights +// (using request elements) in the following ways: +// +// * By Email address: <>Grantees@email.com<>lt;/Grantee> +// The grantee is resolved to the CanonicalUser and, in a response to a GET +// Object acl request, appears as the CanonicalUser. +// +// * By the person's ID: <>ID<><>GranteesEmail<> +// DisplayName is optional and ignored in the request +// +// * By URI: <>http://acs.amazonaws.com/groups/global/AuthenticatedUsers<> +// +// Versioning +// +// The ACL of an object is set at the object version level. By default, PUT +// sets the ACL of the current version of an object. To set the ACL of a different +// version, use the versionId subresource. +// +// Related Resources +// +// * CopyObject +// +// * GetObject +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutObjectAcl for usage and error information. +// +// Returned Error Codes: +// * ErrCodeNoSuchKey "NoSuchKey" +// The specified key does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAcl +func (c *S3) PutObjectAcl(input *PutObjectAclInput) (*PutObjectAclOutput, error) { + req, out := c.PutObjectAclRequest(input) + return out, req.Send() +} + +// PutObjectAclWithContext is the same as PutObjectAcl with the addition of +// the ability to pass a context and additional request options. +// +// See PutObjectAcl for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutObjectAclWithContext(ctx aws.Context, input *PutObjectAclInput, opts ...request.Option) (*PutObjectAclOutput, error) { + req, out := c.PutObjectAclRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutObjectLegalHold = "PutObjectLegalHold" + +// PutObjectLegalHoldRequest generates a "aws/request.Request" representing the +// client's request for the PutObjectLegalHold operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutObjectLegalHold for more information on using the PutObjectLegalHold +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutObjectLegalHoldRequest method. +// req, resp := client.PutObjectLegalHoldRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHold +func (c *S3) PutObjectLegalHoldRequest(input *PutObjectLegalHoldInput) (req *request.Request, output *PutObjectLegalHoldOutput) { + op := &request.Operation{ + Name: opPutObjectLegalHold, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}/{Key+}?legal-hold", + } + + if input == nil { + input = &PutObjectLegalHoldInput{} + } + + output = &PutObjectLegalHoldOutput{} + req = c.newRequest(op, input, output) + return +} + +// PutObjectLegalHold API operation for Amazon Simple Storage Service. +// +// Applies a Legal Hold configuration to the specified object. +// +// Related Resources +// +// * Locking Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html) +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutObjectLegalHold for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHold +func (c *S3) PutObjectLegalHold(input *PutObjectLegalHoldInput) (*PutObjectLegalHoldOutput, error) { + req, out := c.PutObjectLegalHoldRequest(input) + return out, req.Send() +} + +// PutObjectLegalHoldWithContext is the same as PutObjectLegalHold with the addition of +// the ability to pass a context and additional request options. +// +// See PutObjectLegalHold for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutObjectLegalHoldWithContext(ctx aws.Context, input *PutObjectLegalHoldInput, opts ...request.Option) (*PutObjectLegalHoldOutput, error) { + req, out := c.PutObjectLegalHoldRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutObjectLockConfiguration = "PutObjectLockConfiguration" + +// PutObjectLockConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the PutObjectLockConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutObjectLockConfiguration for more information on using the PutObjectLockConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutObjectLockConfigurationRequest method. +// req, resp := client.PutObjectLockConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfiguration +func (c *S3) PutObjectLockConfigurationRequest(input *PutObjectLockConfigurationInput) (req *request.Request, output *PutObjectLockConfigurationOutput) { + op := &request.Operation{ + Name: opPutObjectLockConfiguration, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?object-lock", + } + + if input == nil { + input = &PutObjectLockConfigurationInput{} + } + + output = &PutObjectLockConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// PutObjectLockConfiguration API operation for Amazon Simple Storage Service. +// +// Places an Object Lock configuration on the specified bucket. The rule specified +// in the Object Lock configuration will be applied by default to every new +// object placed in the specified bucket. +// +// DefaultRetention requires either Days or Years. You can't specify both at +// the same time. +// +// Related Resources +// +// * Locking Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html) +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutObjectLockConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfiguration +func (c *S3) PutObjectLockConfiguration(input *PutObjectLockConfigurationInput) (*PutObjectLockConfigurationOutput, error) { + req, out := c.PutObjectLockConfigurationRequest(input) + return out, req.Send() +} + +// PutObjectLockConfigurationWithContext is the same as PutObjectLockConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See PutObjectLockConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutObjectLockConfigurationWithContext(ctx aws.Context, input *PutObjectLockConfigurationInput, opts ...request.Option) (*PutObjectLockConfigurationOutput, error) { + req, out := c.PutObjectLockConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutObjectRetention = "PutObjectRetention" + +// PutObjectRetentionRequest generates a "aws/request.Request" representing the +// client's request for the PutObjectRetention operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutObjectRetention for more information on using the PutObjectRetention +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutObjectRetentionRequest method. +// req, resp := client.PutObjectRetentionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetention +func (c *S3) PutObjectRetentionRequest(input *PutObjectRetentionInput) (req *request.Request, output *PutObjectRetentionOutput) { + op := &request.Operation{ + Name: opPutObjectRetention, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}/{Key+}?retention", + } + + if input == nil { + input = &PutObjectRetentionInput{} + } + + output = &PutObjectRetentionOutput{} + req = c.newRequest(op, input, output) + return +} + +// PutObjectRetention API operation for Amazon Simple Storage Service. +// +// Places an Object Retention configuration on an object. +// +// Related Resources +// +// * Locking Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html) +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutObjectRetention for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetention +func (c *S3) PutObjectRetention(input *PutObjectRetentionInput) (*PutObjectRetentionOutput, error) { + req, out := c.PutObjectRetentionRequest(input) + return out, req.Send() +} + +// PutObjectRetentionWithContext is the same as PutObjectRetention with the addition of +// the ability to pass a context and additional request options. +// +// See PutObjectRetention for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutObjectRetentionWithContext(ctx aws.Context, input *PutObjectRetentionInput, opts ...request.Option) (*PutObjectRetentionOutput, error) { + req, out := c.PutObjectRetentionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutObjectTagging = "PutObjectTagging" + +// PutObjectTaggingRequest generates a "aws/request.Request" representing the +// client's request for the PutObjectTagging operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutObjectTagging for more information on using the PutObjectTagging +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutObjectTaggingRequest method. +// req, resp := client.PutObjectTaggingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTagging +func (c *S3) PutObjectTaggingRequest(input *PutObjectTaggingInput) (req *request.Request, output *PutObjectTaggingOutput) { + op := &request.Operation{ + Name: opPutObjectTagging, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}/{Key+}?tagging", + } + + if input == nil { + input = &PutObjectTaggingInput{} + } + + output = &PutObjectTaggingOutput{} + req = c.newRequest(op, input, output) + return +} + +// PutObjectTagging API operation for Amazon Simple Storage Service. +// +// Sets the supplied tag-set to an object that already exists in a bucket +// +// A tag is a key-value pair. You can associate tags with an object by sending +// a PUT request against the tagging subresource that is associated with the +// object. You can retrieve tags by sending a GET request. For more information, +// see GetObjectTagging. +// +// For tagging-related restrictions related to characters and encodings, see +// Tag Restrictions (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html). +// Note that Amazon S3 limits the maximum number of tags to 10 tags per object. +// +// To use this operation, you must have permission to perform the s3:PutObjectTagging +// action. By default, the bucket owner has this permission and can grant this +// permission to others. +// +// To put tags of any other version, use the versionId query parameter. You +// also need permission for the s3:PutObjectVersionTagging action. +// +// For information about the Amazon S3 object tagging feature, see Object Tagging +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html). +// +// Special Errors +// +// * Code: InvalidTagError Cause: The tag provided was not a valid tag. This +// error can occur if the tag did not pass input validation. For more information, +// see Object Tagging (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html). +// +// * Code: MalformedXMLError Cause: The XML provided does not match the schema. +// +// * Code: OperationAbortedError Cause: A conflicting conditional operation +// is currently in progress against this resource. Please try again. +// +// * Code: InternalError Cause: The service was unable to apply the provided +// tag to the object. +// +// Related Resources +// +// * GetObjectTagging +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutObjectTagging for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTagging +func (c *S3) PutObjectTagging(input *PutObjectTaggingInput) (*PutObjectTaggingOutput, error) { + req, out := c.PutObjectTaggingRequest(input) + return out, req.Send() +} + +// PutObjectTaggingWithContext is the same as PutObjectTagging with the addition of +// the ability to pass a context and additional request options. +// +// See PutObjectTagging for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutObjectTaggingWithContext(ctx aws.Context, input *PutObjectTaggingInput, opts ...request.Option) (*PutObjectTaggingOutput, error) { + req, out := c.PutObjectTaggingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPutPublicAccessBlock = "PutPublicAccessBlock" + +// PutPublicAccessBlockRequest generates a "aws/request.Request" representing the +// client's request for the PutPublicAccessBlock operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PutPublicAccessBlock for more information on using the PutPublicAccessBlock +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PutPublicAccessBlockRequest method. +// req, resp := client.PutPublicAccessBlockRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutPublicAccessBlock +func (c *S3) PutPublicAccessBlockRequest(input *PutPublicAccessBlockInput) (req *request.Request, output *PutPublicAccessBlockOutput) { + op := &request.Operation{ + Name: opPutPublicAccessBlock, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}?publicAccessBlock", + } + + if input == nil { + input = &PutPublicAccessBlockInput{} + } + + output = &PutPublicAccessBlockOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// PutPublicAccessBlock API operation for Amazon Simple Storage Service. +// +// Creates or modifies the PublicAccessBlock configuration for an Amazon S3 +// bucket. In order to use this operation, you must have the s3:PutBucketPublicAccessBlock +// permission. For more information about Amazon S3 permissions, see Specifying +// Permissions in a Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html). +// +// When Amazon S3 evaluates the PublicAccessBlock configuration for a bucket +// or an object, it checks the PublicAccessBlock configuration for both the +// bucket (or the bucket that contains the object) and the bucket owner's account. +// If the PublicAccessBlock configurations are different between the bucket +// and the account, Amazon S3 uses the most restrictive combination of the bucket-level +// and account-level settings. +// +// For more information about when Amazon S3 considers a bucket or an object +// public, see The Meaning of "Public" (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status). +// +// Related Resources +// +// * GetPublicAccessBlock +// +// * DeletePublicAccessBlock +// +// * GetBucketPolicyStatus +// +// * Using Amazon S3 Block Public Access (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html) +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation PutPublicAccessBlock for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutPublicAccessBlock +func (c *S3) PutPublicAccessBlock(input *PutPublicAccessBlockInput) (*PutPublicAccessBlockOutput, error) { + req, out := c.PutPublicAccessBlockRequest(input) + return out, req.Send() +} + +// PutPublicAccessBlockWithContext is the same as PutPublicAccessBlock with the addition of +// the ability to pass a context and additional request options. +// +// See PutPublicAccessBlock for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) PutPublicAccessBlockWithContext(ctx aws.Context, input *PutPublicAccessBlockInput, opts ...request.Option) (*PutPublicAccessBlockOutput, error) { + req, out := c.PutPublicAccessBlockRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRestoreObject = "RestoreObject" + +// RestoreObjectRequest generates a "aws/request.Request" representing the +// client's request for the RestoreObject operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RestoreObject for more information on using the RestoreObject +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RestoreObjectRequest method. +// req, resp := client.RestoreObjectRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObject +func (c *S3) RestoreObjectRequest(input *RestoreObjectInput) (req *request.Request, output *RestoreObjectOutput) { + op := &request.Operation{ + Name: opRestoreObject, + HTTPMethod: "POST", + HTTPPath: "/{Bucket}/{Key+}?restore", + } + + if input == nil { + input = &RestoreObjectInput{} + } + + output = &RestoreObjectOutput{} + req = c.newRequest(op, input, output) + return +} + +// RestoreObject API operation for Amazon Simple Storage Service. +// +// Restores an archived copy of an object back into Amazon S3 +// +// This operation performs the following types of requests: +// +// * select - Perform a select query on an archived object +// +// * restore an archive - Restore an archived object +// +// To use this operation, you must have permissions to perform the s3:RestoreObject +// and s3:GetObject actions. The bucket owner has this permission by default +// and can grant this permission to others. For more information about permissions, +// see Permissions Related to Bucket Subresource Operations (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-bucket-subresources) +// and Managing Access Permissions to Your Amazon S3 Resources (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Querying Archives with Select Requests +// +// You use a select type of request to perform SQL queries on archived objects. +// The archived objects that are being queried by the select request must be +// formatted as uncompressed comma-separated values (CSV) files. You can run +// queries and custom analytics on your archived data without having to restore +// your data to a hotter Amazon S3 tier. For an overview about select requests, +// see Querying Archived Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/querying-glacier-archives.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// When making a select request, do the following: +// +// * Define an output location for the select query's output. This must be +// an Amazon S3 bucket in the same AWS Region as the bucket that contains +// the archive object that is being queried. The AWS account that initiates +// the job must have permissions to write to the S3 bucket. You can specify +// the storage class and encryption for the output objects stored in the +// bucket. For more information about output, see Querying Archived Objects +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/querying-glacier-archives.html) +// in the Amazon Simple Storage Service Developer Guide. For more information +// about the S3 structure in the request body, see the following: PutObject +// Managing Access with ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html) +// in the Amazon Simple Storage Service Developer Guide Protecting Data Using +// Server-Side Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) +// in the Amazon Simple Storage Service Developer Guide +// +// * Define the SQL expression for the SELECT type of restoration for your +// query in the request body's SelectParameters structure. You can use expressions +// like the following examples. The following expression returns all records +// from the specified object. SELECT * FROM Object Assuming that you are +// not using any headers for data stored in the object, you can specify columns +// with positional headers. SELECT s._1, s._2 FROM Object s WHERE s._3 > +// 100 If you have headers and you set the fileHeaderInfo in the CSV structure +// in the request body to USE, you can specify headers in the query. (If +// you set the fileHeaderInfo field to IGNORE, the first row is skipped for +// the query.) You cannot mix ordinal positions with header column names. +// SELECT s.Id, s.FirstName, s.SSN FROM S3Object s +// +// For more information about using SQL with Glacier Select restore, see SQL +// Reference for Amazon S3 Select and Glacier Select (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// When making a select request, you can also do the following: +// +// * To expedite your queries, specify the Expedited tier. For more information +// about tiers, see "Restoring Archives," later in this topic. +// +// * Specify details about the data serialization format of both the input +// object that is being queried and the serialization of the CSV-encoded +// query results. +// +// The following are additional important facts about the select feature: +// +// * The output results are new Amazon S3 objects. Unlike archive retrievals, +// they are stored until explicitly deleted-manually or through a lifecycle +// policy. +// +// * You can issue more than one select request on the same Amazon S3 object. +// Amazon S3 doesn't deduplicate requests, so avoid issuing duplicate requests. +// +// * Amazon S3 accepts a select request even if the object has already been +// restored. A select request doesn’t return error response 409. +// +// Restoring Archives +// +// Objects in the GLACIER and DEEP_ARCHIVE storage classes are archived. To +// access an archived object, you must first initiate a restore request. This +// restores a temporary copy of the archived object. In a restore request, you +// specify the number of days that you want the restored copy to exist. After +// the specified period, Amazon S3 deletes the temporary copy but the object +// remains archived in the GLACIER or DEEP_ARCHIVE storage class that object +// was restored from. +// +// To restore a specific object version, you can provide a version ID. If you +// don't provide a version ID, Amazon S3 restores the current version. +// +// The time it takes restore jobs to finish depends on which storage class the +// object is being restored from and which data access tier you specify. +// +// When restoring an archived object (or using a select request), you can specify +// one of the following data access tier options in the Tier element of the +// request body: +// +// * Expedited - Expedited retrievals allow you to quickly access your data +// stored in the GLACIER storage class when occasional urgent requests for +// a subset of archives are required. For all but the largest archived objects +// (250 MB+), data accessed using Expedited retrievals are typically made +// available within 1–5 minutes. Provisioned capacity ensures that retrieval +// capacity for Expedited retrievals is available when you need it. Expedited +// retrievals and provisioned capacity are not available for the DEEP_ARCHIVE +// storage class. +// +// * Standard - Standard retrievals allow you to access any of your archived +// objects within several hours. This is the default option for the GLACIER +// and DEEP_ARCHIVE retrieval requests that do not specify the retrieval +// option. Standard retrievals typically complete within 3-5 hours from the +// GLACIER storage class and typically complete within 12 hours from the +// DEEP_ARCHIVE storage class. +// +// * Bulk - Bulk retrievals are Amazon Glacier’s lowest-cost retrieval +// option, enabling you to retrieve large amounts, even petabytes, of data +// inexpensively in a day. Bulk retrievals typically complete within 5-12 +// hours from the GLACIER storage class and typically complete within 48 +// hours from the DEEP_ARCHIVE storage class. +// +// For more information about archive retrieval options and provisioned capacity +// for Expedited data access, see Restoring Archived Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// You can use Amazon S3 restore speed upgrade to change the restore speed to +// a faster speed while it is in progress. You upgrade the speed of an in-progress +// restoration by issuing another restore request to the same object, setting +// a new Tier request element. When issuing a request to upgrade the restore +// tier, you must choose a tier that is faster than the tier that the in-progress +// restore is using. You must not change any other parameters, such as the Days +// request element. For more information, see Upgrading the Speed of an In-Progress +// Restore (https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html#restoring-objects-upgrade-tier.title.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// To get the status of object restoration, you can send a HEAD request. Operations +// return the x-amz-restore header, which provides information about the restoration +// status, in the response. You can use Amazon S3 event notifications to notify +// you when a restore is initiated or completed. For more information, see Configuring +// Amazon S3 Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// After restoring an archived object, you can update the restoration period +// by reissuing the request with a new period. Amazon S3 updates the restoration +// period relative to the current time and charges only for the request-there +// are no data transfer charges. You cannot update the restoration period when +// Amazon S3 is actively processing your current restore request for the object. +// +// If your bucket has a lifecycle configuration with a rule that includes an +// expiration action, the object expiration overrides the life span that you +// specify in a restore request. For example, if you restore an object copy +// for 10 days, but the object is scheduled to expire in 3 days, Amazon S3 deletes +// the object in 3 days. For more information about lifecycle configuration, +// see PutBucketLifecycleConfiguration and Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) +// in Amazon Simple Storage Service Developer Guide. +// +// Responses +// +// A successful operation returns either the 200 OK or 202 Accepted status code. +// +// * If the object copy is not previously restored, then Amazon S3 returns +// 202 Accepted in the response. +// +// * If the object copy is previously restored, Amazon S3 returns 200 OK +// in the response. +// +// Special Errors +// +// * Code: RestoreAlreadyInProgress Cause: Object restore is already in progress. +// (This error does not apply to SELECT type requests.) HTTP Status Code: +// 409 Conflict SOAP Fault Code Prefix: Client +// +// * Code: GlacierExpeditedRetrievalNotAvailable Cause: Glacier expedited +// retrievals are currently not available. Try again later. (Returned if +// there is insufficient capacity to process the Expedited request. This +// error applies only to Expedited retrievals and not to Standard or Bulk +// retrievals.) HTTP Status Code: 503 SOAP Fault Code Prefix: N/A +// +// Related Resources +// +// * PutBucketLifecycleConfiguration +// +// * GetBucketNotificationConfiguration +// +// * SQL Reference for Amazon S3 Select and Glacier Select (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html) +// in the Amazon Simple Storage Service Developer Guide +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation RestoreObject for usage and error information. +// +// Returned Error Codes: +// * ErrCodeObjectAlreadyInActiveTierError "ObjectAlreadyInActiveTierError" +// This operation is not allowed against this storage tier +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObject +func (c *S3) RestoreObject(input *RestoreObjectInput) (*RestoreObjectOutput, error) { + req, out := c.RestoreObjectRequest(input) + return out, req.Send() +} + +// RestoreObjectWithContext is the same as RestoreObject with the addition of +// the ability to pass a context and additional request options. +// +// See RestoreObject for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) RestoreObjectWithContext(ctx aws.Context, input *RestoreObjectInput, opts ...request.Option) (*RestoreObjectOutput, error) { + req, out := c.RestoreObjectRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opSelectObjectContent = "SelectObjectContent" + +// SelectObjectContentRequest generates a "aws/request.Request" representing the +// client's request for the SelectObjectContent operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See SelectObjectContent for more information on using the SelectObjectContent +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the SelectObjectContentRequest method. +// req, resp := client.SelectObjectContentRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContent +func (c *S3) SelectObjectContentRequest(input *SelectObjectContentInput) (req *request.Request, output *SelectObjectContentOutput) { + op := &request.Operation{ + Name: opSelectObjectContent, + HTTPMethod: "POST", + HTTPPath: "/{Bucket}/{Key+}?select&select-type=2", + } + + if input == nil { + input = &SelectObjectContentInput{} + } + + output = &SelectObjectContentOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Send.Swap(client.LogHTTPResponseHandler.Name, client.LogHTTPResponseHeaderHandler) + req.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, rest.UnmarshalHandler) + req.Handlers.Unmarshal.PushBack(output.runEventStreamLoop) + return +} + +// SelectObjectContent API operation for Amazon Simple Storage Service. +// +// This operation filters the contents of an Amazon S3 object based on a simple +// structured query language (SQL) statement. In the request, along with the +// SQL expression, you must also specify a data serialization format (JSON, +// CSV, or Apache Parquet) of the object. Amazon S3 uses this format to parse +// object data into records, and returns only records that match the specified +// SQL expression. You must also specify the data serialization format for the +// response. +// +// For more information about Amazon S3 Select, see Selecting Content from Objects +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/selecting-content-from-objects.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// For more information about using SQL with Amazon S3 Select, see SQL Reference +// for Amazon S3 Select and Glacier Select (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Permissions +// +// You must have s3:GetObject permission for this operation. Amazon S3 Select +// does not support anonymous access. For more information about permissions, +// see Specifying Permissions in a Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Object Data Formats +// +// You can use Amazon S3 Select to query objects that have the following format +// properties: +// +// * CSV, JSON, and Parquet - Objects must be in CSV, JSON, or Parquet format. +// +// * UTF-8 - UTF-8 is the only encoding type Amazon S3 Select supports. +// +// * GZIP or BZIP2 - CSV and JSON files can be compressed using GZIP or BZIP2. +// GZIP and BZIP2 are the only compression formats that Amazon S3 Select +// supports for CSV and JSON files. Amazon S3 Select supports columnar compression +// for Parquet using GZIP or Snappy. Amazon S3 Select does not support whole-object +// compression for Parquet objects. +// +// * Server-side encryption - Amazon S3 Select supports querying objects +// that are protected with server-side encryption. For objects that are encrypted +// with customer-provided encryption keys (SSE-C), you must use HTTPS, and +// you must use the headers that are documented in the GetObject. For more +// information about SSE-C, see Server-Side Encryption (Using Customer-Provided +// Encryption Keys) (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html) +// in the Amazon Simple Storage Service Developer Guide. For objects that +// are encrypted with Amazon S3 managed encryption keys (SSE-S3) and customer +// master keys (CMKs) stored in AWS Key Management Service (SSE-KMS), server-side +// encryption is handled transparently, so you don't need to specify anything. +// For more information about server-side encryption, including SSE-S3 and +// SSE-KMS, see Protecting Data Using Server-Side Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Working with the Response Body +// +// Given the response size is unknown, Amazon S3 Select streams the response +// as a series of messages and includes a Transfer-Encoding header with chunked +// as its value in the response. For more information, see RESTSelectObjectAppendix . +// +// GetObject Support +// +// The SelectObjectContent operation does not support the following GetObject +// functionality. For more information, see GetObject. +// +// * Range: While you can specify a scan range for a Amazon S3 Select request, +// see SelectObjectContentRequest$ScanRange in the request parameters below, +// you cannot specify the range of bytes of an object to return. +// +// * GLACIER, DEEP_ARCHIVE and REDUCED_REDUNDANCY storage classes: You cannot +// specify the GLACIER, DEEP_ARCHIVE, or REDUCED_REDUNDANCY storage classes. +// For more information, about storage classes see Storage Classes (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#storage-class-intro) +// in the Amazon Simple Storage Service Developer Guide. +// +// Special Errors +// +// For a list of special errors for this operation and for general information +// about Amazon S3 errors and a list of error codes, see ErrorResponses +// +// Related Resources +// +// * GetObject +// +// * GetBucketLifecycleConfiguration +// +// * PutBucketLifecycleConfiguration +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation SelectObjectContent for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContent +func (c *S3) SelectObjectContent(input *SelectObjectContentInput) (*SelectObjectContentOutput, error) { + req, out := c.SelectObjectContentRequest(input) + return out, req.Send() +} + +// SelectObjectContentWithContext is the same as SelectObjectContent with the addition of +// the ability to pass a context and additional request options. +// +// See SelectObjectContent for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) SelectObjectContentWithContext(ctx aws.Context, input *SelectObjectContentInput, opts ...request.Option) (*SelectObjectContentOutput, error) { + req, out := c.SelectObjectContentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opUploadPart = "UploadPart" + +// UploadPartRequest generates a "aws/request.Request" representing the +// client's request for the UploadPart operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See UploadPart for more information on using the UploadPart +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the UploadPartRequest method. +// req, resp := client.UploadPartRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPart +func (c *S3) UploadPartRequest(input *UploadPartInput) (req *request.Request, output *UploadPartOutput) { + op := &request.Operation{ + Name: opUploadPart, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}/{Key+}", + } + + if input == nil { + input = &UploadPartInput{} + } + + output = &UploadPartOutput{} + req = c.newRequest(op, input, output) + return +} + +// UploadPart API operation for Amazon Simple Storage Service. +// +// Uploads a part in a multipart upload. +// +// In this operation, you provide part data in your request. However, you have +// an option to specify your existing Amazon S3 object as a data source for +// the part you are uploading. To upload a part from an existing object, you +// use the UploadPartCopy operation. +// +// You must initiate a multipart upload (see CreateMultipartUpload) before you +// can upload any part. In response to your initiate request, Amazon S3 returns +// an upload ID, a unique identifier, that you must include in your upload part +// request. +// +// Part numbers can be any number from 1 to 10,000, inclusive. A part number +// uniquely identifies a part and also defines its position within the object +// being created. If you upload a new part using the same part number that was +// used with a previous part, the previously uploaded part is overwritten. Each +// part must be at least 5 MB in size, except the last part. There is no size +// limit on the last part of your multipart upload. +// +// To ensure that data is not corrupted when traversing the network, specify +// the Content-MD5 header in the upload part request. Amazon S3 checks the part +// data against the provided MD5 value. If they do not match, Amazon S3 returns +// an error. +// +// Note: After you initiate multipart upload and upload one or more parts, you +// must either complete or abort multipart upload in order to stop getting charged +// for storage of the uploaded parts. Only after you either complete or abort +// multipart upload, Amazon S3 frees up the parts storage and stops charging +// you for the parts storage. +// +// For more information on multipart uploads, go to Multipart Upload Overview +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html) in the +// Amazon Simple Storage Service Developer Guide . +// +// For information on the permissions required to use the multipart upload API, +// go to Multipart Upload API and Permissions (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// You can optionally request server-side encryption where Amazon S3 encrypts +// your data as it writes it to disks in its data centers and decrypts it for +// you when you access it. You have the option of providing your own encryption +// key, or you can use the AWS-managed encryption keys. If you choose to provide +// your own encryption key, the request headers you provide in the request must +// match the headers you used in the request to initiate the upload by using +// CreateMultipartUpload. For more information, go to Using Server-Side Encryption +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Server-side encryption is supported by the S3 Multipart Upload actions. Unless +// you are using a customer-provided encryption key, you don't need to specify +// the encryption parameters in each UploadPart request. Instead, you only need +// to specify the server side encryption parameters in the initial Initiate +// Multipart request. For more information, see CreateMultipartUpload. +// +// If you requested server-side encryption using a customer-provided encryption +// key in your initiate multipart upload request, you must provide identical +// encryption information in each part upload using the following headers. +// +// * x-amz-server-side​-encryption​-customer-algorithm +// +// * x-amz-server-side​-encryption​-customer-key +// +// * x-amz-server-side​-encryption​-customer-key-MD5 +// +// Special Errors +// +// * Code: NoSuchUpload Cause: The specified multipart upload does not exist. +// The upload ID might be invalid, or the multipart upload might have been +// aborted or completed. HTTP Status Code: 404 Not Found SOAP Fault Code +// Prefix: Client +// +// Related Resources +// +// * CreateMultipartUpload +// +// * CompleteMultipartUpload +// +// * AbortMultipartUpload +// +// * ListParts +// +// * ListMultipartUploads +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation UploadPart for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPart +func (c *S3) UploadPart(input *UploadPartInput) (*UploadPartOutput, error) { + req, out := c.UploadPartRequest(input) + return out, req.Send() +} + +// UploadPartWithContext is the same as UploadPart with the addition of +// the ability to pass a context and additional request options. +// +// See UploadPart for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) UploadPartWithContext(ctx aws.Context, input *UploadPartInput, opts ...request.Option) (*UploadPartOutput, error) { + req, out := c.UploadPartRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opUploadPartCopy = "UploadPartCopy" + +// UploadPartCopyRequest generates a "aws/request.Request" representing the +// client's request for the UploadPartCopy operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See UploadPartCopy for more information on using the UploadPartCopy +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the UploadPartCopyRequest method. +// req, resp := client.UploadPartCopyRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopy +func (c *S3) UploadPartCopyRequest(input *UploadPartCopyInput) (req *request.Request, output *UploadPartCopyOutput) { + op := &request.Operation{ + Name: opUploadPartCopy, + HTTPMethod: "PUT", + HTTPPath: "/{Bucket}/{Key+}", + } + + if input == nil { + input = &UploadPartCopyInput{} + } + + output = &UploadPartCopyOutput{} + req = c.newRequest(op, input, output) + return +} + +// UploadPartCopy API operation for Amazon Simple Storage Service. +// +// Uploads a part by copying data from an existing object as data source. You +// specify the data source by adding the request header x-amz-copy-source in +// your request and a byte range by adding the request header x-amz-copy-source-range +// in your request. +// +// The minimum allowable part size for a multipart upload is 5 MB. For more +// information about multipart upload limits, go to Quick Facts (https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// Instead of using an existing object as part data, you might use the UploadPart +// operation and provide data in your request. +// +// You must initiate a multipart upload before you can upload any part. In response +// to your initiate request. Amazon S3 returns a unique identifier, the upload +// ID, that you must include in your upload part request. +// +// For more information on using the UploadPartCopy operation, see the following +// topics: +// +// * For conceptual information on multipart uploads, go to Uploading Objects +// Using Multipart Upload (https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// * For information on permissions required to use the multipart upload +// API, go to Multipart Upload API and Permissions (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuAndPermissions.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// * For information about copying objects using a single atomic operation +// vs. the multipart upload, go to Operations on Objects (https://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectOperations.html) +// in the Amazon Simple Storage Service Developer Guide. +// +// * For information about using server-side encryption with customer-provided +// encryption keys with the UploadPartCopy operation, see CopyObject and +// UploadPart. +// +// Note the following additional considerations about the request headers x-amz-copy-source-if-match, +// x-amz-copy-source-if-none-match x-amz-copy-source-if-unmodified-since x-amz-copy-source-if-modified-since +// +// * Consideration 1 - If both of the x-amz-copy-source-if-match and x-amz-copy-source-if-unmodified-since +// headers are present in the request as follows: x-amz-copy-source-if-match +// condition evaluates to true, and; x-amz-copy-source-if-unmodified-since +// condition evaluates to false; then, S3 returns 200 OK and copies the data. +// +// * Consideration 2 - If both of the x-amz-copy-source-if-none-match and +// x-amz-copy-source-if-modified-since headers are present in the request +// as follows: x-amz-copy-source-if-none-match condition evaluates to false, +// and; x-amz-copy-source-if-modified-since condition evaluates to true; +// then, S3 returns 412 Precondition Failed response code. +// +// Versioning +// +// If your bucket has versioning enabled, you could have multiple versions of +// the same object. By default, x-amz-copy-source identifies the current version +// of the object to copy. If the current version is a delete marker and you +// don't specify a versionId in the x-amz-copy-source, Amazon S3 returns a 404 +// error, because the object does not exist. If you specify versionId in the +// x-amz-copy-source and the versionId is a delete marker, Amazon S3 returns +// an HTTP 400 error, because you are not allowed to specify a delete marker +// as a version for the x-amz-copy-source. +// +// You can optionally specify a specific version of the source object to copy +// by adding the versionId subresource as shown in the following example: +// +// x-amz-copy-source: /bucket/object?versionId=version id +// +// Special Errors +// +// * Code: NoSuchUpload Cause: The specified multipart upload does not exist. +// The upload ID might be invalid, or the multipart upload might have been +// aborted or completed. HTTP Status Code: 404 Not Found +// +// * Code: InvalidRequest Cause: The specified copy source is not supported +// as a byte-range copy source. HTTP Status Code: 400 Bad Request +// +// Related Resources +// +// * CreateMultipartUpload +// +// * UploadPart +// +// * CompleteMultipartUpload +// +// * AbortMultipartUpload +// +// * ListParts +// +// * ListMultipartUploads +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Simple Storage Service's +// API operation UploadPartCopy for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopy +func (c *S3) UploadPartCopy(input *UploadPartCopyInput) (*UploadPartCopyOutput, error) { + req, out := c.UploadPartCopyRequest(input) + return out, req.Send() +} + +// UploadPartCopyWithContext is the same as UploadPartCopy with the addition of +// the ability to pass a context and additional request options. +// +// See UploadPartCopy for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) UploadPartCopyWithContext(ctx aws.Context, input *UploadPartCopyInput, opts ...request.Option) (*UploadPartCopyOutput, error) { + req, out := c.UploadPartCopyRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// Specifies the days since the initiation of an incomplete multipart upload +// that Amazon S3 will wait before permanently removing all parts of the upload. +// For more information, see Aborting Incomplete Multipart Uploads Using a Bucket +// Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config) +// in the Amazon Simple Storage Service Developer Guide. +type AbortIncompleteMultipartUpload struct { + _ struct{} `type:"structure"` + + // Specifies the number of days after which Amazon S3 aborts an incomplete multipart + // upload. + DaysAfterInitiation *int64 `type:"integer"` +} + +// String returns the string representation +func (s AbortIncompleteMultipartUpload) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AbortIncompleteMultipartUpload) GoString() string { + return s.String() +} + +// SetDaysAfterInitiation sets the DaysAfterInitiation field's value. +func (s *AbortIncompleteMultipartUpload) SetDaysAfterInitiation(v int64) *AbortIncompleteMultipartUpload { + s.DaysAfterInitiation = &v + return s +} + +type AbortMultipartUploadInput struct { + _ struct{} `locationName:"AbortMultipartUploadRequest" type:"structure"` + + // The bucket to which the upload was taking place. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Key of the object for which the multipart upload was initiated. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // Upload ID that identifies the multipart upload. + // + // UploadId is a required field + UploadId *string `location:"querystring" locationName:"uploadId" type:"string" required:"true"` +} + +// String returns the string representation +func (s AbortMultipartUploadInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AbortMultipartUploadInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AbortMultipartUploadInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AbortMultipartUploadInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.UploadId == nil { + invalidParams.Add(request.NewErrParamRequired("UploadId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *AbortMultipartUploadInput) SetBucket(v string) *AbortMultipartUploadInput { + s.Bucket = &v + return s +} + +func (s *AbortMultipartUploadInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *AbortMultipartUploadInput) SetKey(v string) *AbortMultipartUploadInput { + s.Key = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *AbortMultipartUploadInput) SetRequestPayer(v string) *AbortMultipartUploadInput { + s.RequestPayer = &v + return s +} + +// SetUploadId sets the UploadId field's value. +func (s *AbortMultipartUploadInput) SetUploadId(v string) *AbortMultipartUploadInput { + s.UploadId = &v + return s +} + +type AbortMultipartUploadOutput struct { + _ struct{} `type:"structure"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +} + +// String returns the string representation +func (s AbortMultipartUploadOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AbortMultipartUploadOutput) GoString() string { + return s.String() +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *AbortMultipartUploadOutput) SetRequestCharged(v string) *AbortMultipartUploadOutput { + s.RequestCharged = &v + return s +} + +// Configures the transfer acceleration state for an Amazon S3 bucket. For more +// information, see Amazon S3 Transfer Acceleration (https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html) +// in the Amazon Simple Storage Service Developer Guide. +type AccelerateConfiguration struct { + _ struct{} `type:"structure"` + + // Specifies the transfer acceleration status of the bucket. + Status *string `type:"string" enum:"BucketAccelerateStatus"` +} + +// String returns the string representation +func (s AccelerateConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AccelerateConfiguration) GoString() string { + return s.String() +} + +// SetStatus sets the Status field's value. +func (s *AccelerateConfiguration) SetStatus(v string) *AccelerateConfiguration { + s.Status = &v + return s +} + +// Contains the elements that set the ACL permissions for an object per grantee. +type AccessControlPolicy struct { + _ struct{} `type:"structure"` + + // A list of grants. + Grants []*Grant `locationName:"AccessControlList" locationNameList:"Grant" type:"list"` + + // Container for the bucket owner's display name and ID. + Owner *Owner `type:"structure"` +} + +// String returns the string representation +func (s AccessControlPolicy) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AccessControlPolicy) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AccessControlPolicy) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AccessControlPolicy"} + if s.Grants != nil { + for i, v := range s.Grants { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Grants", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetGrants sets the Grants field's value. +func (s *AccessControlPolicy) SetGrants(v []*Grant) *AccessControlPolicy { + s.Grants = v + return s +} + +// SetOwner sets the Owner field's value. +func (s *AccessControlPolicy) SetOwner(v *Owner) *AccessControlPolicy { + s.Owner = v + return s +} + +// A container for information about access control for replicas. +type AccessControlTranslation struct { + _ struct{} `type:"structure"` + + // Specifies the replica ownership. For default and valid values, see PUT bucket + // replication (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html) + // in the Amazon Simple Storage Service API Reference. + // + // Owner is a required field + Owner *string `type:"string" required:"true" enum:"OwnerOverride"` +} + +// String returns the string representation +func (s AccessControlTranslation) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AccessControlTranslation) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AccessControlTranslation) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AccessControlTranslation"} + if s.Owner == nil { + invalidParams.Add(request.NewErrParamRequired("Owner")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetOwner sets the Owner field's value. +func (s *AccessControlTranslation) SetOwner(v string) *AccessControlTranslation { + s.Owner = &v + return s +} + +// A conjunction (logical AND) of predicates, which is used in evaluating a +// metrics filter. The operator must have at least two predicates in any combination, +// and an object must match all of the predicates for the filter to apply. +type AnalyticsAndOperator struct { + _ struct{} `type:"structure"` + + // The prefix to use when evaluating an AND predicate: The prefix that an object + // must have to be included in the metrics results. + Prefix *string `type:"string"` + + // The list of tags to use when evaluating an AND predicate. + Tags []*Tag `locationName:"Tag" locationNameList:"Tag" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s AnalyticsAndOperator) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AnalyticsAndOperator) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AnalyticsAndOperator) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AnalyticsAndOperator"} + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetPrefix sets the Prefix field's value. +func (s *AnalyticsAndOperator) SetPrefix(v string) *AnalyticsAndOperator { + s.Prefix = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *AnalyticsAndOperator) SetTags(v []*Tag) *AnalyticsAndOperator { + s.Tags = v + return s +} + +// Specifies the configuration and any analyses for the analytics filter of +// an Amazon S3 bucket. +type AnalyticsConfiguration struct { + _ struct{} `type:"structure"` + + // The filter used to describe a set of objects for analyses. A filter must + // have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). + // If no filter is provided, all objects will be considered in any analysis. + Filter *AnalyticsFilter `type:"structure"` + + // The ID that identifies the analytics configuration. + // + // Id is a required field + Id *string `type:"string" required:"true"` + + // Contains data related to access patterns to be collected and made available + // to analyze the tradeoffs between different storage classes. + // + // StorageClassAnalysis is a required field + StorageClassAnalysis *StorageClassAnalysis `type:"structure" required:"true"` +} + +// String returns the string representation +func (s AnalyticsConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AnalyticsConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AnalyticsConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AnalyticsConfiguration"} + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + if s.StorageClassAnalysis == nil { + invalidParams.Add(request.NewErrParamRequired("StorageClassAnalysis")) + } + if s.Filter != nil { + if err := s.Filter.Validate(); err != nil { + invalidParams.AddNested("Filter", err.(request.ErrInvalidParams)) + } + } + if s.StorageClassAnalysis != nil { + if err := s.StorageClassAnalysis.Validate(); err != nil { + invalidParams.AddNested("StorageClassAnalysis", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilter sets the Filter field's value. +func (s *AnalyticsConfiguration) SetFilter(v *AnalyticsFilter) *AnalyticsConfiguration { + s.Filter = v + return s +} + +// SetId sets the Id field's value. +func (s *AnalyticsConfiguration) SetId(v string) *AnalyticsConfiguration { + s.Id = &v + return s +} + +// SetStorageClassAnalysis sets the StorageClassAnalysis field's value. +func (s *AnalyticsConfiguration) SetStorageClassAnalysis(v *StorageClassAnalysis) *AnalyticsConfiguration { + s.StorageClassAnalysis = v + return s +} + +// Where to publish the analytics results. +type AnalyticsExportDestination struct { + _ struct{} `type:"structure"` + + // A destination signifying output to an S3 bucket. + // + // S3BucketDestination is a required field + S3BucketDestination *AnalyticsS3BucketDestination `type:"structure" required:"true"` +} + +// String returns the string representation +func (s AnalyticsExportDestination) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AnalyticsExportDestination) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AnalyticsExportDestination) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AnalyticsExportDestination"} + if s.S3BucketDestination == nil { + invalidParams.Add(request.NewErrParamRequired("S3BucketDestination")) + } + if s.S3BucketDestination != nil { + if err := s.S3BucketDestination.Validate(); err != nil { + invalidParams.AddNested("S3BucketDestination", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetS3BucketDestination sets the S3BucketDestination field's value. +func (s *AnalyticsExportDestination) SetS3BucketDestination(v *AnalyticsS3BucketDestination) *AnalyticsExportDestination { + s.S3BucketDestination = v + return s +} + +// The filter used to describe a set of objects for analyses. A filter must +// have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). +// If no filter is provided, all objects will be considered in any analysis. +type AnalyticsFilter struct { + _ struct{} `type:"structure"` + + // A conjunction (logical AND) of predicates, which is used in evaluating an + // analytics filter. The operator must have at least two predicates. + And *AnalyticsAndOperator `type:"structure"` + + // The prefix to use when evaluating an analytics filter. + Prefix *string `type:"string"` + + // The tag to use when evaluating an analytics filter. + Tag *Tag `type:"structure"` +} + +// String returns the string representation +func (s AnalyticsFilter) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AnalyticsFilter) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AnalyticsFilter) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AnalyticsFilter"} + if s.And != nil { + if err := s.And.Validate(); err != nil { + invalidParams.AddNested("And", err.(request.ErrInvalidParams)) + } + } + if s.Tag != nil { + if err := s.Tag.Validate(); err != nil { + invalidParams.AddNested("Tag", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAnd sets the And field's value. +func (s *AnalyticsFilter) SetAnd(v *AnalyticsAndOperator) *AnalyticsFilter { + s.And = v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *AnalyticsFilter) SetPrefix(v string) *AnalyticsFilter { + s.Prefix = &v + return s +} + +// SetTag sets the Tag field's value. +func (s *AnalyticsFilter) SetTag(v *Tag) *AnalyticsFilter { + s.Tag = v + return s +} + +// Contains information about where to publish the analytics results. +type AnalyticsS3BucketDestination struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the bucket to which data is exported. + // + // Bucket is a required field + Bucket *string `type:"string" required:"true"` + + // The account ID that owns the destination bucket. If no account ID is provided, + // the owner will not be validated prior to exporting data. + BucketAccountId *string `type:"string"` + + // Specifies the file format used when exporting data to Amazon S3. + // + // Format is a required field + Format *string `type:"string" required:"true" enum:"AnalyticsS3ExportFileFormat"` + + // The prefix to use when exporting data. The prefix is prepended to all results. + Prefix *string `type:"string"` +} + +// String returns the string representation +func (s AnalyticsS3BucketDestination) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AnalyticsS3BucketDestination) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AnalyticsS3BucketDestination) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AnalyticsS3BucketDestination"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Format == nil { + invalidParams.Add(request.NewErrParamRequired("Format")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *AnalyticsS3BucketDestination) SetBucket(v string) *AnalyticsS3BucketDestination { + s.Bucket = &v + return s +} + +func (s *AnalyticsS3BucketDestination) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetBucketAccountId sets the BucketAccountId field's value. +func (s *AnalyticsS3BucketDestination) SetBucketAccountId(v string) *AnalyticsS3BucketDestination { + s.BucketAccountId = &v + return s +} + +// SetFormat sets the Format field's value. +func (s *AnalyticsS3BucketDestination) SetFormat(v string) *AnalyticsS3BucketDestination { + s.Format = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *AnalyticsS3BucketDestination) SetPrefix(v string) *AnalyticsS3BucketDestination { + s.Prefix = &v + return s +} + +// In terms of implementation, a Bucket is a resource. An Amazon S3 bucket name +// is globally unique, and the namespace is shared by all AWS accounts. +type Bucket struct { + _ struct{} `type:"structure"` + + // Date the bucket was created. + CreationDate *time.Time `type:"timestamp"` + + // The name of the bucket. + Name *string `type:"string"` +} + +// String returns the string representation +func (s Bucket) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Bucket) GoString() string { + return s.String() +} + +// SetCreationDate sets the CreationDate field's value. +func (s *Bucket) SetCreationDate(v time.Time) *Bucket { + s.CreationDate = &v + return s +} + +// SetName sets the Name field's value. +func (s *Bucket) SetName(v string) *Bucket { + s.Name = &v + return s +} + +// Specifies the lifecycle configuration for objects in an Amazon S3 bucket. +// For more information, see Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html) +// in the Amazon Simple Storage Service Developer Guide. +type BucketLifecycleConfiguration struct { + _ struct{} `type:"structure"` + + // A lifecycle rule for individual objects in an Amazon S3 bucket. + // + // Rules is a required field + Rules []*LifecycleRule `locationName:"Rule" type:"list" flattened:"true" required:"true"` +} + +// String returns the string representation +func (s BucketLifecycleConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s BucketLifecycleConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *BucketLifecycleConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "BucketLifecycleConfiguration"} + if s.Rules == nil { + invalidParams.Add(request.NewErrParamRequired("Rules")) + } + if s.Rules != nil { + for i, v := range s.Rules { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Rules", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetRules sets the Rules field's value. +func (s *BucketLifecycleConfiguration) SetRules(v []*LifecycleRule) *BucketLifecycleConfiguration { + s.Rules = v + return s +} + +// Container for logging status information. +type BucketLoggingStatus struct { + _ struct{} `type:"structure"` + + // Describes where logs are stored and the prefix that Amazon S3 assigns to + // all log object keys for a bucket. For more information, see PUT Bucket logging + // (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html) + // in the Amazon Simple Storage Service API Reference. + LoggingEnabled *LoggingEnabled `type:"structure"` +} + +// String returns the string representation +func (s BucketLoggingStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s BucketLoggingStatus) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *BucketLoggingStatus) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "BucketLoggingStatus"} + if s.LoggingEnabled != nil { + if err := s.LoggingEnabled.Validate(); err != nil { + invalidParams.AddNested("LoggingEnabled", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLoggingEnabled sets the LoggingEnabled field's value. +func (s *BucketLoggingStatus) SetLoggingEnabled(v *LoggingEnabled) *BucketLoggingStatus { + s.LoggingEnabled = v + return s +} + +// Describes the cross-origin access configuration for objects in an Amazon +// S3 bucket. For more information, see Enabling Cross-Origin Resource Sharing +// (https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the Amazon +// Simple Storage Service Developer Guide. +type CORSConfiguration struct { + _ struct{} `type:"structure"` + + // A set of origins and methods (cross-origin access that you want to allow). + // You can add up to 100 rules to the configuration. + // + // CORSRules is a required field + CORSRules []*CORSRule `locationName:"CORSRule" type:"list" flattened:"true" required:"true"` +} + +// String returns the string representation +func (s CORSConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CORSConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CORSConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CORSConfiguration"} + if s.CORSRules == nil { + invalidParams.Add(request.NewErrParamRequired("CORSRules")) + } + if s.CORSRules != nil { + for i, v := range s.CORSRules { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "CORSRules", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCORSRules sets the CORSRules field's value. +func (s *CORSConfiguration) SetCORSRules(v []*CORSRule) *CORSConfiguration { + s.CORSRules = v + return s +} + +// Specifies a cross-origin access rule for an Amazon S3 bucket. +type CORSRule struct { + _ struct{} `type:"structure"` + + // Headers that are specified in the Access-Control-Request-Headers header. + // These headers are allowed in a preflight OPTIONS request. In response to + // any preflight OPTIONS request, Amazon S3 returns any requested headers that + // are allowed. + AllowedHeaders []*string `locationName:"AllowedHeader" type:"list" flattened:"true"` + + // An HTTP method that you allow the origin to execute. Valid values are GET, + // PUT, HEAD, POST, and DELETE. + // + // AllowedMethods is a required field + AllowedMethods []*string `locationName:"AllowedMethod" type:"list" flattened:"true" required:"true"` + + // One or more origins you want customers to be able to access the bucket from. + // + // AllowedOrigins is a required field + AllowedOrigins []*string `locationName:"AllowedOrigin" type:"list" flattened:"true" required:"true"` + + // One or more headers in the response that you want customers to be able to + // access from their applications (for example, from a JavaScript XMLHttpRequest + // object). + ExposeHeaders []*string `locationName:"ExposeHeader" type:"list" flattened:"true"` + + // The time in seconds that your browser is to cache the preflight response + // for the specified resource. + MaxAgeSeconds *int64 `type:"integer"` +} + +// String returns the string representation +func (s CORSRule) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CORSRule) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CORSRule) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CORSRule"} + if s.AllowedMethods == nil { + invalidParams.Add(request.NewErrParamRequired("AllowedMethods")) + } + if s.AllowedOrigins == nil { + invalidParams.Add(request.NewErrParamRequired("AllowedOrigins")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAllowedHeaders sets the AllowedHeaders field's value. +func (s *CORSRule) SetAllowedHeaders(v []*string) *CORSRule { + s.AllowedHeaders = v + return s +} + +// SetAllowedMethods sets the AllowedMethods field's value. +func (s *CORSRule) SetAllowedMethods(v []*string) *CORSRule { + s.AllowedMethods = v + return s +} + +// SetAllowedOrigins sets the AllowedOrigins field's value. +func (s *CORSRule) SetAllowedOrigins(v []*string) *CORSRule { + s.AllowedOrigins = v + return s +} + +// SetExposeHeaders sets the ExposeHeaders field's value. +func (s *CORSRule) SetExposeHeaders(v []*string) *CORSRule { + s.ExposeHeaders = v + return s +} + +// SetMaxAgeSeconds sets the MaxAgeSeconds field's value. +func (s *CORSRule) SetMaxAgeSeconds(v int64) *CORSRule { + s.MaxAgeSeconds = &v + return s +} + +// Describes how a uncompressed comma-separated values (CSV)-formatted input +// object is formatted. +type CSVInput struct { + _ struct{} `type:"structure"` + + // Specifies that CSV field values may contain quoted record delimiters and + // such records should be allowed. Default value is FALSE. Setting this value + // to TRUE may lower performance. + AllowQuotedRecordDelimiter *bool `type:"boolean"` + + // A single character used to indicate that a row should be ignored when the + // character is present at the start of that row. You can specify any character + // to indicate a comment line. + Comments *string `type:"string"` + + // A single character used to separate individual fields in a record. You can + // specify an arbitrary delimiter. + FieldDelimiter *string `type:"string"` + + // Describes the first line of input. Valid values are: + // + // * NONE: First line is not a header. + // + // * IGNORE: First line is a header, but you can't use the header values + // to indicate the column in an expression. You can use column position (such + // as _1, _2, …) to indicate the column (SELECT s._1 FROM OBJECT s). + // + // * Use: First line is a header, and you can use the header value to identify + // a column in an expression (SELECT "name" FROM OBJECT). + FileHeaderInfo *string `type:"string" enum:"FileHeaderInfo"` + + // A single character used for escaping when the field delimiter is part of + // the value. For example, if the value is a, b, Amazon S3 wraps this field + // value in quotation marks, as follows: " a , b ". + // + // Type: String + // + // Default: " + // + // Ancestors: CSV + QuoteCharacter *string `type:"string"` + + // A single character used for escaping the quotation mark character inside + // an already escaped value. For example, the value """ a , b """ is parsed + // as " a , b ". + QuoteEscapeCharacter *string `type:"string"` + + // A single character used to separate individual records in the input. Instead + // of the default value, you can specify an arbitrary delimiter. + RecordDelimiter *string `type:"string"` +} + +// String returns the string representation +func (s CSVInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CSVInput) GoString() string { + return s.String() +} + +// SetAllowQuotedRecordDelimiter sets the AllowQuotedRecordDelimiter field's value. +func (s *CSVInput) SetAllowQuotedRecordDelimiter(v bool) *CSVInput { + s.AllowQuotedRecordDelimiter = &v + return s +} + +// SetComments sets the Comments field's value. +func (s *CSVInput) SetComments(v string) *CSVInput { + s.Comments = &v + return s +} + +// SetFieldDelimiter sets the FieldDelimiter field's value. +func (s *CSVInput) SetFieldDelimiter(v string) *CSVInput { + s.FieldDelimiter = &v + return s +} + +// SetFileHeaderInfo sets the FileHeaderInfo field's value. +func (s *CSVInput) SetFileHeaderInfo(v string) *CSVInput { + s.FileHeaderInfo = &v + return s +} + +// SetQuoteCharacter sets the QuoteCharacter field's value. +func (s *CSVInput) SetQuoteCharacter(v string) *CSVInput { + s.QuoteCharacter = &v + return s +} + +// SetQuoteEscapeCharacter sets the QuoteEscapeCharacter field's value. +func (s *CSVInput) SetQuoteEscapeCharacter(v string) *CSVInput { + s.QuoteEscapeCharacter = &v + return s +} + +// SetRecordDelimiter sets the RecordDelimiter field's value. +func (s *CSVInput) SetRecordDelimiter(v string) *CSVInput { + s.RecordDelimiter = &v + return s +} + +// Describes how uncompressed comma-separated values (CSV)-formatted results +// are formatted. +type CSVOutput struct { + _ struct{} `type:"structure"` + + // The value used to separate individual fields in a record. You can specify + // an arbitrary delimiter. + FieldDelimiter *string `type:"string"` + + // A single character used for escaping when the field delimiter is part of + // the value. For example, if the value is a, b, Amazon S3 wraps this field + // value in quotation marks, as follows: " a , b ". + QuoteCharacter *string `type:"string"` + + // The single character used for escaping the quote character inside an already + // escaped value. + QuoteEscapeCharacter *string `type:"string"` + + // Indicates whether to use quotation marks around output fields. + // + // * ALWAYS: Always use quotation marks for output fields. + // + // * ASNEEDED: Use quotation marks for output fields when needed. + QuoteFields *string `type:"string" enum:"QuoteFields"` + + // A single character used to separate individual records in the output. Instead + // of the default value, you can specify an arbitrary delimiter. + RecordDelimiter *string `type:"string"` +} + +// String returns the string representation +func (s CSVOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CSVOutput) GoString() string { + return s.String() +} + +// SetFieldDelimiter sets the FieldDelimiter field's value. +func (s *CSVOutput) SetFieldDelimiter(v string) *CSVOutput { + s.FieldDelimiter = &v + return s +} + +// SetQuoteCharacter sets the QuoteCharacter field's value. +func (s *CSVOutput) SetQuoteCharacter(v string) *CSVOutput { + s.QuoteCharacter = &v + return s +} + +// SetQuoteEscapeCharacter sets the QuoteEscapeCharacter field's value. +func (s *CSVOutput) SetQuoteEscapeCharacter(v string) *CSVOutput { + s.QuoteEscapeCharacter = &v + return s +} + +// SetQuoteFields sets the QuoteFields field's value. +func (s *CSVOutput) SetQuoteFields(v string) *CSVOutput { + s.QuoteFields = &v + return s +} + +// SetRecordDelimiter sets the RecordDelimiter field's value. +func (s *CSVOutput) SetRecordDelimiter(v string) *CSVOutput { + s.RecordDelimiter = &v + return s +} + +// Container for specifying the AWS Lambda notification configuration. +type CloudFunctionConfiguration struct { + _ struct{} `type:"structure"` + + // Lambda cloud function ARN that Amazon S3 can invoke when it detects events + // of the specified type. + CloudFunction *string `type:"string"` + + // The bucket event for which to send notifications. + // + // Deprecated: Event has been deprecated + Event *string `deprecated:"true" type:"string" enum:"Event"` + + // Bucket events for which to send notifications. + Events []*string `locationName:"Event" type:"list" flattened:"true"` + + // An optional unique identifier for configurations in a notification configuration. + // If you don't provide one, Amazon S3 will assign an ID. + Id *string `type:"string"` + + // The role supporting the invocation of the lambda function + InvocationRole *string `type:"string"` +} + +// String returns the string representation +func (s CloudFunctionConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CloudFunctionConfiguration) GoString() string { + return s.String() +} + +// SetCloudFunction sets the CloudFunction field's value. +func (s *CloudFunctionConfiguration) SetCloudFunction(v string) *CloudFunctionConfiguration { + s.CloudFunction = &v + return s +} + +// SetEvent sets the Event field's value. +func (s *CloudFunctionConfiguration) SetEvent(v string) *CloudFunctionConfiguration { + s.Event = &v + return s +} + +// SetEvents sets the Events field's value. +func (s *CloudFunctionConfiguration) SetEvents(v []*string) *CloudFunctionConfiguration { + s.Events = v + return s +} + +// SetId sets the Id field's value. +func (s *CloudFunctionConfiguration) SetId(v string) *CloudFunctionConfiguration { + s.Id = &v + return s +} + +// SetInvocationRole sets the InvocationRole field's value. +func (s *CloudFunctionConfiguration) SetInvocationRole(v string) *CloudFunctionConfiguration { + s.InvocationRole = &v + return s +} + +// Container for all (if there are any) keys between Prefix and the next occurrence +// of the string specified by a delimiter. CommonPrefixes lists keys that act +// like subdirectories in the directory specified by Prefix. For example, if +// the prefix is notes/ and the delimiter is a slash (/) as in notes/summer/july, +// the common prefix is notes/summer/. +type CommonPrefix struct { + _ struct{} `type:"structure"` + + // Container for the specified common prefix. + Prefix *string `type:"string"` +} + +// String returns the string representation +func (s CommonPrefix) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CommonPrefix) GoString() string { + return s.String() +} + +// SetPrefix sets the Prefix field's value. +func (s *CommonPrefix) SetPrefix(v string) *CommonPrefix { + s.Prefix = &v + return s +} + +type CompleteMultipartUploadInput struct { + _ struct{} `locationName:"CompleteMultipartUploadRequest" type:"structure" payload:"MultipartUpload"` + + // Name of the bucket to which the multipart upload was initiated. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Object key for which the multipart upload was initiated. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // The container for the multipart upload request information. + MultipartUpload *CompletedMultipartUpload `locationName:"CompleteMultipartUpload" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // ID for the initiated multipart upload. + // + // UploadId is a required field + UploadId *string `location:"querystring" locationName:"uploadId" type:"string" required:"true"` +} + +// String returns the string representation +func (s CompleteMultipartUploadInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CompleteMultipartUploadInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CompleteMultipartUploadInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CompleteMultipartUploadInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.UploadId == nil { + invalidParams.Add(request.NewErrParamRequired("UploadId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *CompleteMultipartUploadInput) SetBucket(v string) *CompleteMultipartUploadInput { + s.Bucket = &v + return s +} + +func (s *CompleteMultipartUploadInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *CompleteMultipartUploadInput) SetKey(v string) *CompleteMultipartUploadInput { + s.Key = &v + return s +} + +// SetMultipartUpload sets the MultipartUpload field's value. +func (s *CompleteMultipartUploadInput) SetMultipartUpload(v *CompletedMultipartUpload) *CompleteMultipartUploadInput { + s.MultipartUpload = v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *CompleteMultipartUploadInput) SetRequestPayer(v string) *CompleteMultipartUploadInput { + s.RequestPayer = &v + return s +} + +// SetUploadId sets the UploadId field's value. +func (s *CompleteMultipartUploadInput) SetUploadId(v string) *CompleteMultipartUploadInput { + s.UploadId = &v + return s +} + +type CompleteMultipartUploadOutput struct { + _ struct{} `type:"structure"` + + // The name of the bucket that contains the newly created object. + Bucket *string `type:"string"` + + // Entity tag that identifies the newly created object's data. Objects with + // different object data will have different entity tags. The entity tag is + // an opaque string. The entity tag may or may not be an MD5 digest of the object + // data. If the entity tag is not an MD5 digest of the object data, it will + // contain one or more nonhexadecimal characters and/or will consist of less + // than 32 or more than 32 hexadecimal digits. + ETag *string `type:"string"` + + // If the object expiration is configured, this will contain the expiration + // date (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded. + Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` + + // The object key of the newly created object. + Key *string `min:"1" type:"string"` + + // The URI that identifies the newly created object. + Location *string `type:"string"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + + // If present, specifies the ID of the AWS Key Management Service (KMS) customer + // master key (CMK) that was used for the object. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` + + // If you specified server-side encryption either with an Amazon S3-managed + // encryption key or an AWS KMS customer master key (CMK) in your initiate multipart + // upload request, the response includes this header. It confirms the encryption + // algorithm that Amazon S3 used to encrypt the object. + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + + // Version ID of the newly created object, in case the bucket has versioning + // turned on. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +} + +// String returns the string representation +func (s CompleteMultipartUploadOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CompleteMultipartUploadOutput) GoString() string { + return s.String() +} + +// SetBucket sets the Bucket field's value. +func (s *CompleteMultipartUploadOutput) SetBucket(v string) *CompleteMultipartUploadOutput { + s.Bucket = &v + return s +} + +func (s *CompleteMultipartUploadOutput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetETag sets the ETag field's value. +func (s *CompleteMultipartUploadOutput) SetETag(v string) *CompleteMultipartUploadOutput { + s.ETag = &v + return s +} + +// SetExpiration sets the Expiration field's value. +func (s *CompleteMultipartUploadOutput) SetExpiration(v string) *CompleteMultipartUploadOutput { + s.Expiration = &v + return s +} + +// SetKey sets the Key field's value. +func (s *CompleteMultipartUploadOutput) SetKey(v string) *CompleteMultipartUploadOutput { + s.Key = &v + return s +} + +// SetLocation sets the Location field's value. +func (s *CompleteMultipartUploadOutput) SetLocation(v string) *CompleteMultipartUploadOutput { + s.Location = &v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *CompleteMultipartUploadOutput) SetRequestCharged(v string) *CompleteMultipartUploadOutput { + s.RequestCharged = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *CompleteMultipartUploadOutput) SetSSEKMSKeyId(v string) *CompleteMultipartUploadOutput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *CompleteMultipartUploadOutput) SetServerSideEncryption(v string) *CompleteMultipartUploadOutput { + s.ServerSideEncryption = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *CompleteMultipartUploadOutput) SetVersionId(v string) *CompleteMultipartUploadOutput { + s.VersionId = &v + return s +} + +// The container for the completed multipart upload details. +type CompletedMultipartUpload struct { + _ struct{} `type:"structure"` + + // Array of CompletedPart data types. + Parts []*CompletedPart `locationName:"Part" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s CompletedMultipartUpload) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CompletedMultipartUpload) GoString() string { + return s.String() +} + +// SetParts sets the Parts field's value. +func (s *CompletedMultipartUpload) SetParts(v []*CompletedPart) *CompletedMultipartUpload { + s.Parts = v + return s +} + +// Details of the parts that were uploaded. +type CompletedPart struct { + _ struct{} `type:"structure"` + + // Entity tag returned when the part was uploaded. + ETag *string `type:"string"` + + // Part number that identifies the part. This is a positive integer between + // 1 and 10,000. + PartNumber *int64 `type:"integer"` +} + +// String returns the string representation +func (s CompletedPart) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CompletedPart) GoString() string { + return s.String() +} + +// SetETag sets the ETag field's value. +func (s *CompletedPart) SetETag(v string) *CompletedPart { + s.ETag = &v + return s +} + +// SetPartNumber sets the PartNumber field's value. +func (s *CompletedPart) SetPartNumber(v int64) *CompletedPart { + s.PartNumber = &v + return s +} + +// A container for describing a condition that must be met for the specified +// redirect to apply. For example, 1. If request is for pages in the /docs folder, +// redirect to the /documents folder. 2. If request results in HTTP error 4xx, +// redirect request to another host where you might process the error. +type Condition struct { + _ struct{} `type:"structure"` + + // The HTTP error code when the redirect is applied. In the event of an error, + // if the error code equals this value, then the specified redirect is applied. + // Required when parent element Condition is specified and sibling KeyPrefixEquals + // is not specified. If both are specified, then both must be true for the redirect + // to be applied. + HttpErrorCodeReturnedEquals *string `type:"string"` + + // The object key name prefix when the redirect is applied. For example, to + // redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. + // To redirect request for all pages with the prefix docs/, the key prefix will + // be /docs, which identifies all objects in the docs/ folder. Required when + // the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals + // is not specified. If both conditions are specified, both must be true for + // the redirect to be applied. + KeyPrefixEquals *string `type:"string"` +} + +// String returns the string representation +func (s Condition) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Condition) GoString() string { + return s.String() +} + +// SetHttpErrorCodeReturnedEquals sets the HttpErrorCodeReturnedEquals field's value. +func (s *Condition) SetHttpErrorCodeReturnedEquals(v string) *Condition { + s.HttpErrorCodeReturnedEquals = &v + return s +} + +// SetKeyPrefixEquals sets the KeyPrefixEquals field's value. +func (s *Condition) SetKeyPrefixEquals(v string) *Condition { + s.KeyPrefixEquals = &v + return s +} + +type ContinuationEvent struct { + _ struct{} `locationName:"ContinuationEvent" type:"structure"` +} + +// String returns the string representation +func (s ContinuationEvent) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ContinuationEvent) GoString() string { + return s.String() +} + +// The ContinuationEvent is and event in the SelectObjectContentEventStream group of events. +func (s *ContinuationEvent) eventSelectObjectContentEventStream() {} + +// UnmarshalEvent unmarshals the EventStream Message into the ContinuationEvent value. +// This method is only used internally within the SDK's EventStream handling. +func (s *ContinuationEvent) UnmarshalEvent( + payloadUnmarshaler protocol.PayloadUnmarshaler, + msg eventstream.Message, +) error { + return nil +} + +type CopyObjectInput struct { + _ struct{} `locationName:"CopyObjectRequest" type:"structure"` + + // The canned ACL to apply to the object. + ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"ObjectCannedACL"` + + // The name of the destination bucket. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Specifies caching behavior along the request/reply chain. + CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` + + // Specifies presentational information for the object. + ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` + + // Specifies what content encodings have been applied to the object and thus + // what decoding mechanisms must be applied to obtain the media-type referenced + // by the Content-Type header field. + ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` + + // The language the content is in. + ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` + + // A standard MIME type describing the format of the object data. + ContentType *string `location:"header" locationName:"Content-Type" type:"string"` + + // The name of the source bucket and key name of the source object, separated + // by a slash (/). Must be URL-encoded. + // + // CopySource is a required field + CopySource *string `location:"header" locationName:"x-amz-copy-source" type:"string" required:"true"` + + // Copies the object if its entity tag (ETag) matches the specified tag. + CopySourceIfMatch *string `location:"header" locationName:"x-amz-copy-source-if-match" type:"string"` + + // Copies the object if it has been modified since the specified time. + CopySourceIfModifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-modified-since" type:"timestamp"` + + // Copies the object if its entity tag (ETag) is different than the specified + // ETag. + CopySourceIfNoneMatch *string `location:"header" locationName:"x-amz-copy-source-if-none-match" type:"string"` + + // Copies the object if it hasn't been modified since the specified time. + CopySourceIfUnmodifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-unmodified-since" type:"timestamp"` + + // Specifies the algorithm to use when decrypting the source object (e.g., AES256). + CopySourceSSECustomerAlgorithm *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-algorithm" type:"string"` + + // Specifies the customer-provided encryption key for Amazon S3 to use to decrypt + // the source object. The encryption key provided in this header must be one + // that was used when the source object was created. + CopySourceSSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-key" type:"string" sensitive:"true"` + + // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. + // Amazon S3 uses this header for a message integrity check to ensure the encryption + // key was transmitted without error. + CopySourceSSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-key-MD5" type:"string"` + + // The date and time at which the object is no longer cacheable. + Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp"` + + // Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object. + GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` + + // Allows grantee to read the object data and its metadata. + GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` + + // Allows grantee to read the object ACL. + GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` + + // Allows grantee to write the ACL for the applicable object. + GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` + + // The key of the destination object. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // A map of metadata to store with the object in S3. + Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` + + // Specifies whether the metadata is copied from the source object or replaced + // with metadata provided in the request. + MetadataDirective *string `location:"header" locationName:"x-amz-metadata-directive" type:"string" enum:"MetadataDirective"` + + // Specifies whether you want to apply a Legal Hold to the copied object. + ObjectLockLegalHoldStatus *string `location:"header" locationName:"x-amz-object-lock-legal-hold" type:"string" enum:"ObjectLockLegalHoldStatus"` + + // The Object Lock mode that you want to apply to the copied object. + ObjectLockMode *string `location:"header" locationName:"x-amz-object-lock-mode" type:"string" enum:"ObjectLockMode"` + + // The date and time when you want the copied object's Object Lock to expire. + ObjectLockRetainUntilDate *time.Time `location:"header" locationName:"x-amz-object-lock-retain-until-date" type:"timestamp" timestampFormat:"iso8601"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // Specifies the algorithm to use to when encrypting the object (e.g., AES256). + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting + // data. This value is used to store the object and then it is discarded; Amazon + // does not store the encryption key. The key must be appropriate for use with + // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm + // header. + SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"` + + // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. + // Amazon S3 uses this header for a message integrity check to ensure the encryption + // key was transmitted without error. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // Specifies the AWS KMS Encryption Context to use for object encryption. The + // value of this header is a base64-encoded UTF-8 string holding JSON with the + // encryption context key-value pairs. + SSEKMSEncryptionContext *string `location:"header" locationName:"x-amz-server-side-encryption-context" type:"string" sensitive:"true"` + + // Specifies the AWS KMS key ID to use for object encryption. All GET and PUT + // requests for an object protected by AWS KMS will fail if not made via SSL + // or using SigV4. Documentation on configuring any of the officially supported + // AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` + + // The Server-side encryption algorithm used when storing this object in S3 + // (e.g., AES256, aws:kms). + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + + // The type of storage to use for the object. Defaults to 'STANDARD'. + StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` + + // The tag-set for the object destination object this value must be used in + // conjunction with the TaggingDirective. The tag-set must be encoded as URL + // Query parameters + Tagging *string `location:"header" locationName:"x-amz-tagging" type:"string"` + + // Specifies whether the object tag-set are copied from the source object or + // replaced with tag-set provided in the request. + TaggingDirective *string `location:"header" locationName:"x-amz-tagging-directive" type:"string" enum:"TaggingDirective"` + + // If the bucket is configured as a website, redirects requests for this object + // to another object in the same bucket or to an external URL. Amazon S3 stores + // the value of this header in the object metadata. + WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` +} + +// String returns the string representation +func (s CopyObjectInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopyObjectInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CopyObjectInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CopyObjectInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.CopySource == nil { + invalidParams.Add(request.NewErrParamRequired("CopySource")) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetACL sets the ACL field's value. +func (s *CopyObjectInput) SetACL(v string) *CopyObjectInput { + s.ACL = &v + return s +} + +// SetBucket sets the Bucket field's value. +func (s *CopyObjectInput) SetBucket(v string) *CopyObjectInput { + s.Bucket = &v + return s +} + +func (s *CopyObjectInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetCacheControl sets the CacheControl field's value. +func (s *CopyObjectInput) SetCacheControl(v string) *CopyObjectInput { + s.CacheControl = &v + return s +} + +// SetContentDisposition sets the ContentDisposition field's value. +func (s *CopyObjectInput) SetContentDisposition(v string) *CopyObjectInput { + s.ContentDisposition = &v + return s +} + +// SetContentEncoding sets the ContentEncoding field's value. +func (s *CopyObjectInput) SetContentEncoding(v string) *CopyObjectInput { + s.ContentEncoding = &v + return s +} + +// SetContentLanguage sets the ContentLanguage field's value. +func (s *CopyObjectInput) SetContentLanguage(v string) *CopyObjectInput { + s.ContentLanguage = &v + return s +} + +// SetContentType sets the ContentType field's value. +func (s *CopyObjectInput) SetContentType(v string) *CopyObjectInput { + s.ContentType = &v + return s +} + +// SetCopySource sets the CopySource field's value. +func (s *CopyObjectInput) SetCopySource(v string) *CopyObjectInput { + s.CopySource = &v + return s +} + +// SetCopySourceIfMatch sets the CopySourceIfMatch field's value. +func (s *CopyObjectInput) SetCopySourceIfMatch(v string) *CopyObjectInput { + s.CopySourceIfMatch = &v + return s +} + +// SetCopySourceIfModifiedSince sets the CopySourceIfModifiedSince field's value. +func (s *CopyObjectInput) SetCopySourceIfModifiedSince(v time.Time) *CopyObjectInput { + s.CopySourceIfModifiedSince = &v + return s +} + +// SetCopySourceIfNoneMatch sets the CopySourceIfNoneMatch field's value. +func (s *CopyObjectInput) SetCopySourceIfNoneMatch(v string) *CopyObjectInput { + s.CopySourceIfNoneMatch = &v + return s +} + +// SetCopySourceIfUnmodifiedSince sets the CopySourceIfUnmodifiedSince field's value. +func (s *CopyObjectInput) SetCopySourceIfUnmodifiedSince(v time.Time) *CopyObjectInput { + s.CopySourceIfUnmodifiedSince = &v + return s +} + +// SetCopySourceSSECustomerAlgorithm sets the CopySourceSSECustomerAlgorithm field's value. +func (s *CopyObjectInput) SetCopySourceSSECustomerAlgorithm(v string) *CopyObjectInput { + s.CopySourceSSECustomerAlgorithm = &v + return s +} + +// SetCopySourceSSECustomerKey sets the CopySourceSSECustomerKey field's value. +func (s *CopyObjectInput) SetCopySourceSSECustomerKey(v string) *CopyObjectInput { + s.CopySourceSSECustomerKey = &v + return s +} + +func (s *CopyObjectInput) getCopySourceSSECustomerKey() (v string) { + if s.CopySourceSSECustomerKey == nil { + return v + } + return *s.CopySourceSSECustomerKey +} + +// SetCopySourceSSECustomerKeyMD5 sets the CopySourceSSECustomerKeyMD5 field's value. +func (s *CopyObjectInput) SetCopySourceSSECustomerKeyMD5(v string) *CopyObjectInput { + s.CopySourceSSECustomerKeyMD5 = &v + return s +} + +// SetExpires sets the Expires field's value. +func (s *CopyObjectInput) SetExpires(v time.Time) *CopyObjectInput { + s.Expires = &v + return s +} + +// SetGrantFullControl sets the GrantFullControl field's value. +func (s *CopyObjectInput) SetGrantFullControl(v string) *CopyObjectInput { + s.GrantFullControl = &v + return s +} + +// SetGrantRead sets the GrantRead field's value. +func (s *CopyObjectInput) SetGrantRead(v string) *CopyObjectInput { + s.GrantRead = &v + return s +} + +// SetGrantReadACP sets the GrantReadACP field's value. +func (s *CopyObjectInput) SetGrantReadACP(v string) *CopyObjectInput { + s.GrantReadACP = &v + return s +} + +// SetGrantWriteACP sets the GrantWriteACP field's value. +func (s *CopyObjectInput) SetGrantWriteACP(v string) *CopyObjectInput { + s.GrantWriteACP = &v + return s +} + +// SetKey sets the Key field's value. +func (s *CopyObjectInput) SetKey(v string) *CopyObjectInput { + s.Key = &v + return s +} + +// SetMetadata sets the Metadata field's value. +func (s *CopyObjectInput) SetMetadata(v map[string]*string) *CopyObjectInput { + s.Metadata = v + return s +} + +// SetMetadataDirective sets the MetadataDirective field's value. +func (s *CopyObjectInput) SetMetadataDirective(v string) *CopyObjectInput { + s.MetadataDirective = &v + return s +} + +// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value. +func (s *CopyObjectInput) SetObjectLockLegalHoldStatus(v string) *CopyObjectInput { + s.ObjectLockLegalHoldStatus = &v + return s +} + +// SetObjectLockMode sets the ObjectLockMode field's value. +func (s *CopyObjectInput) SetObjectLockMode(v string) *CopyObjectInput { + s.ObjectLockMode = &v + return s +} + +// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value. +func (s *CopyObjectInput) SetObjectLockRetainUntilDate(v time.Time) *CopyObjectInput { + s.ObjectLockRetainUntilDate = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *CopyObjectInput) SetRequestPayer(v string) *CopyObjectInput { + s.RequestPayer = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *CopyObjectInput) SetSSECustomerAlgorithm(v string) *CopyObjectInput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKey sets the SSECustomerKey field's value. +func (s *CopyObjectInput) SetSSECustomerKey(v string) *CopyObjectInput { + s.SSECustomerKey = &v + return s +} + +func (s *CopyObjectInput) getSSECustomerKey() (v string) { + if s.SSECustomerKey == nil { + return v + } + return *s.SSECustomerKey +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *CopyObjectInput) SetSSECustomerKeyMD5(v string) *CopyObjectInput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetSSEKMSEncryptionContext sets the SSEKMSEncryptionContext field's value. +func (s *CopyObjectInput) SetSSEKMSEncryptionContext(v string) *CopyObjectInput { + s.SSEKMSEncryptionContext = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *CopyObjectInput) SetSSEKMSKeyId(v string) *CopyObjectInput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *CopyObjectInput) SetServerSideEncryption(v string) *CopyObjectInput { + s.ServerSideEncryption = &v + return s +} + +// SetStorageClass sets the StorageClass field's value. +func (s *CopyObjectInput) SetStorageClass(v string) *CopyObjectInput { + s.StorageClass = &v + return s +} + +// SetTagging sets the Tagging field's value. +func (s *CopyObjectInput) SetTagging(v string) *CopyObjectInput { + s.Tagging = &v + return s +} + +// SetTaggingDirective sets the TaggingDirective field's value. +func (s *CopyObjectInput) SetTaggingDirective(v string) *CopyObjectInput { + s.TaggingDirective = &v + return s +} + +// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value. +func (s *CopyObjectInput) SetWebsiteRedirectLocation(v string) *CopyObjectInput { + s.WebsiteRedirectLocation = &v + return s +} + +type CopyObjectOutput struct { + _ struct{} `type:"structure" payload:"CopyObjectResult"` + + // Container for all response elements. + CopyObjectResult *CopyObjectResult `type:"structure"` + + // Version of the copied object in the destination bucket. + CopySourceVersionId *string `location:"header" locationName:"x-amz-copy-source-version-id" type:"string"` + + // If the object expiration is configured, the response includes this header. + Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header confirming the encryption algorithm + // used. + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header to provide round trip message integrity + // verification of the customer-provided encryption key. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // If present, specifies the AWS KMS Encryption Context to use for object encryption. + // The value of this header is a base64-encoded UTF-8 string holding JSON with + // the encryption context key-value pairs. + SSEKMSEncryptionContext *string `location:"header" locationName:"x-amz-server-side-encryption-context" type:"string" sensitive:"true"` + + // If present, specifies the ID of the AWS Key Management Service (KMS) customer + // master key (CMK) that was used for the object. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` + + // The Server-side encryption algorithm used when storing this object in S3 + // (e.g., AES256, aws:kms). + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + + // Version ID of the newly created copy. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +} + +// String returns the string representation +func (s CopyObjectOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopyObjectOutput) GoString() string { + return s.String() +} + +// SetCopyObjectResult sets the CopyObjectResult field's value. +func (s *CopyObjectOutput) SetCopyObjectResult(v *CopyObjectResult) *CopyObjectOutput { + s.CopyObjectResult = v + return s +} + +// SetCopySourceVersionId sets the CopySourceVersionId field's value. +func (s *CopyObjectOutput) SetCopySourceVersionId(v string) *CopyObjectOutput { + s.CopySourceVersionId = &v + return s +} + +// SetExpiration sets the Expiration field's value. +func (s *CopyObjectOutput) SetExpiration(v string) *CopyObjectOutput { + s.Expiration = &v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *CopyObjectOutput) SetRequestCharged(v string) *CopyObjectOutput { + s.RequestCharged = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *CopyObjectOutput) SetSSECustomerAlgorithm(v string) *CopyObjectOutput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *CopyObjectOutput) SetSSECustomerKeyMD5(v string) *CopyObjectOutput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetSSEKMSEncryptionContext sets the SSEKMSEncryptionContext field's value. +func (s *CopyObjectOutput) SetSSEKMSEncryptionContext(v string) *CopyObjectOutput { + s.SSEKMSEncryptionContext = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *CopyObjectOutput) SetSSEKMSKeyId(v string) *CopyObjectOutput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *CopyObjectOutput) SetServerSideEncryption(v string) *CopyObjectOutput { + s.ServerSideEncryption = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *CopyObjectOutput) SetVersionId(v string) *CopyObjectOutput { + s.VersionId = &v + return s +} + +// >Container for all response elements. +type CopyObjectResult struct { + _ struct{} `type:"structure"` + + // Returns the ETag of the new object. The ETag reflects only changes to the + // contents of an object, not its metadata. The source and destination ETag + // is identical for a successfully copied object. + ETag *string `type:"string"` + + // Returns the date that the object was last modified. + LastModified *time.Time `type:"timestamp"` +} + +// String returns the string representation +func (s CopyObjectResult) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopyObjectResult) GoString() string { + return s.String() +} + +// SetETag sets the ETag field's value. +func (s *CopyObjectResult) SetETag(v string) *CopyObjectResult { + s.ETag = &v + return s +} + +// SetLastModified sets the LastModified field's value. +func (s *CopyObjectResult) SetLastModified(v time.Time) *CopyObjectResult { + s.LastModified = &v + return s +} + +// Container for all response elements. +type CopyPartResult struct { + _ struct{} `type:"structure"` + + // Entity tag of the object. + ETag *string `type:"string"` + + // Date and time at which the object was uploaded. + LastModified *time.Time `type:"timestamp"` +} + +// String returns the string representation +func (s CopyPartResult) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopyPartResult) GoString() string { + return s.String() +} + +// SetETag sets the ETag field's value. +func (s *CopyPartResult) SetETag(v string) *CopyPartResult { + s.ETag = &v + return s +} + +// SetLastModified sets the LastModified field's value. +func (s *CopyPartResult) SetLastModified(v time.Time) *CopyPartResult { + s.LastModified = &v + return s +} + +// The configuration information for the bucket. +type CreateBucketConfiguration struct { + _ struct{} `type:"structure"` + + // Specifies the region where the bucket will be created. If you don't specify + // a region, the bucket is created in US East (N. Virginia) Region (us-east-1). + LocationConstraint *string `type:"string" enum:"BucketLocationConstraint"` +} + +// String returns the string representation +func (s CreateBucketConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateBucketConfiguration) GoString() string { + return s.String() +} + +// SetLocationConstraint sets the LocationConstraint field's value. +func (s *CreateBucketConfiguration) SetLocationConstraint(v string) *CreateBucketConfiguration { + s.LocationConstraint = &v + return s +} + +type CreateBucketInput struct { + _ struct{} `locationName:"CreateBucketRequest" type:"structure" payload:"CreateBucketConfiguration"` + + // The canned ACL to apply to the bucket. + ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"BucketCannedACL"` + + // The name of the bucket to create. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The configuration information for the bucket. + CreateBucketConfiguration *CreateBucketConfiguration `locationName:"CreateBucketConfiguration" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + + // Allows grantee the read, write, read ACP, and write ACP permissions on the + // bucket. + GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` + + // Allows grantee to list the objects in the bucket. + GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` + + // Allows grantee to read the bucket ACL. + GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` + + // Allows grantee to create, overwrite, and delete any object in the bucket. + GrantWrite *string `location:"header" locationName:"x-amz-grant-write" type:"string"` + + // Allows grantee to write the ACL for the applicable bucket. + GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` + + // Specifies whether you want S3 Object Lock to be enabled for the new bucket. + ObjectLockEnabledForBucket *bool `location:"header" locationName:"x-amz-bucket-object-lock-enabled" type:"boolean"` +} + +// String returns the string representation +func (s CreateBucketInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateBucketInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateBucketInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateBucketInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetACL sets the ACL field's value. +func (s *CreateBucketInput) SetACL(v string) *CreateBucketInput { + s.ACL = &v + return s +} + +// SetBucket sets the Bucket field's value. +func (s *CreateBucketInput) SetBucket(v string) *CreateBucketInput { + s.Bucket = &v + return s +} + +func (s *CreateBucketInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetCreateBucketConfiguration sets the CreateBucketConfiguration field's value. +func (s *CreateBucketInput) SetCreateBucketConfiguration(v *CreateBucketConfiguration) *CreateBucketInput { + s.CreateBucketConfiguration = v + return s +} + +// SetGrantFullControl sets the GrantFullControl field's value. +func (s *CreateBucketInput) SetGrantFullControl(v string) *CreateBucketInput { + s.GrantFullControl = &v + return s +} + +// SetGrantRead sets the GrantRead field's value. +func (s *CreateBucketInput) SetGrantRead(v string) *CreateBucketInput { + s.GrantRead = &v + return s +} + +// SetGrantReadACP sets the GrantReadACP field's value. +func (s *CreateBucketInput) SetGrantReadACP(v string) *CreateBucketInput { + s.GrantReadACP = &v + return s +} + +// SetGrantWrite sets the GrantWrite field's value. +func (s *CreateBucketInput) SetGrantWrite(v string) *CreateBucketInput { + s.GrantWrite = &v + return s +} + +// SetGrantWriteACP sets the GrantWriteACP field's value. +func (s *CreateBucketInput) SetGrantWriteACP(v string) *CreateBucketInput { + s.GrantWriteACP = &v + return s +} + +// SetObjectLockEnabledForBucket sets the ObjectLockEnabledForBucket field's value. +func (s *CreateBucketInput) SetObjectLockEnabledForBucket(v bool) *CreateBucketInput { + s.ObjectLockEnabledForBucket = &v + return s +} + +type CreateBucketOutput struct { + _ struct{} `type:"structure"` + + // Specifies the region where the bucket will be created. If you are creating + // a bucket on the US East (N. Virginia) region (us-east-1), you do not need + // to specify the location. + Location *string `location:"header" locationName:"Location" type:"string"` +} + +// String returns the string representation +func (s CreateBucketOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateBucketOutput) GoString() string { + return s.String() +} + +// SetLocation sets the Location field's value. +func (s *CreateBucketOutput) SetLocation(v string) *CreateBucketOutput { + s.Location = &v + return s +} + +type CreateMultipartUploadInput struct { + _ struct{} `locationName:"CreateMultipartUploadRequest" type:"structure"` + + // The canned ACL to apply to the object. + ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"ObjectCannedACL"` + + // The name of the bucket to which to initiate the upload + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Specifies caching behavior along the request/reply chain. + CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` + + // Specifies presentational information for the object. + ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` + + // Specifies what content encodings have been applied to the object and thus + // what decoding mechanisms must be applied to obtain the media-type referenced + // by the Content-Type header field. + ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` + + // The language the content is in. + ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` + + // A standard MIME type describing the format of the object data. + ContentType *string `location:"header" locationName:"Content-Type" type:"string"` + + // The date and time at which the object is no longer cacheable. + Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp"` + + // Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object. + GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` + + // Allows grantee to read the object data and its metadata. + GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` + + // Allows grantee to read the object ACL. + GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` + + // Allows grantee to write the ACL for the applicable object. + GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` + + // Object key for which the multipart upload is to be initiated. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // A map of metadata to store with the object in S3. + Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` + + // Specifies whether you want to apply a Legal Hold to the uploaded object. + ObjectLockLegalHoldStatus *string `location:"header" locationName:"x-amz-object-lock-legal-hold" type:"string" enum:"ObjectLockLegalHoldStatus"` + + // Specifies the Object Lock mode that you want to apply to the uploaded object. + ObjectLockMode *string `location:"header" locationName:"x-amz-object-lock-mode" type:"string" enum:"ObjectLockMode"` + + // Specifies the date and time when you want the Object Lock to expire. + ObjectLockRetainUntilDate *time.Time `location:"header" locationName:"x-amz-object-lock-retain-until-date" type:"timestamp" timestampFormat:"iso8601"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // Specifies the algorithm to use to when encrypting the object (e.g., AES256). + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting + // data. This value is used to store the object and then it is discarded; Amazon + // does not store the encryption key. The key must be appropriate for use with + // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm + // header. + SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"` + + // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. + // Amazon S3 uses this header for a message integrity check to ensure the encryption + // key was transmitted without error. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // Specifies the AWS KMS Encryption Context to use for object encryption. The + // value of this header is a base64-encoded UTF-8 string holding JSON with the + // encryption context key-value pairs. + SSEKMSEncryptionContext *string `location:"header" locationName:"x-amz-server-side-encryption-context" type:"string" sensitive:"true"` + + // Specifies the AWS KMS key ID to use for object encryption. All GET and PUT + // requests for an object protected by AWS KMS will fail if not made via SSL + // or using SigV4. Documentation on configuring any of the officially supported + // AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` + + // The Server-side encryption algorithm used when storing this object in S3 + // (e.g., AES256, aws:kms). + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + + // The type of storage to use for the object. Defaults to 'STANDARD'. + StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` + + // The tag-set for the object. The tag-set must be encoded as URL Query parameters + Tagging *string `location:"header" locationName:"x-amz-tagging" type:"string"` + + // If the bucket is configured as a website, redirects requests for this object + // to another object in the same bucket or to an external URL. Amazon S3 stores + // the value of this header in the object metadata. + WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` +} + +// String returns the string representation +func (s CreateMultipartUploadInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateMultipartUploadInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateMultipartUploadInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateMultipartUploadInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetACL sets the ACL field's value. +func (s *CreateMultipartUploadInput) SetACL(v string) *CreateMultipartUploadInput { + s.ACL = &v + return s +} + +// SetBucket sets the Bucket field's value. +func (s *CreateMultipartUploadInput) SetBucket(v string) *CreateMultipartUploadInput { + s.Bucket = &v + return s +} + +func (s *CreateMultipartUploadInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetCacheControl sets the CacheControl field's value. +func (s *CreateMultipartUploadInput) SetCacheControl(v string) *CreateMultipartUploadInput { + s.CacheControl = &v + return s +} + +// SetContentDisposition sets the ContentDisposition field's value. +func (s *CreateMultipartUploadInput) SetContentDisposition(v string) *CreateMultipartUploadInput { + s.ContentDisposition = &v + return s +} + +// SetContentEncoding sets the ContentEncoding field's value. +func (s *CreateMultipartUploadInput) SetContentEncoding(v string) *CreateMultipartUploadInput { + s.ContentEncoding = &v + return s +} + +// SetContentLanguage sets the ContentLanguage field's value. +func (s *CreateMultipartUploadInput) SetContentLanguage(v string) *CreateMultipartUploadInput { + s.ContentLanguage = &v + return s +} + +// SetContentType sets the ContentType field's value. +func (s *CreateMultipartUploadInput) SetContentType(v string) *CreateMultipartUploadInput { + s.ContentType = &v + return s +} + +// SetExpires sets the Expires field's value. +func (s *CreateMultipartUploadInput) SetExpires(v time.Time) *CreateMultipartUploadInput { + s.Expires = &v + return s +} + +// SetGrantFullControl sets the GrantFullControl field's value. +func (s *CreateMultipartUploadInput) SetGrantFullControl(v string) *CreateMultipartUploadInput { + s.GrantFullControl = &v + return s +} + +// SetGrantRead sets the GrantRead field's value. +func (s *CreateMultipartUploadInput) SetGrantRead(v string) *CreateMultipartUploadInput { + s.GrantRead = &v + return s +} + +// SetGrantReadACP sets the GrantReadACP field's value. +func (s *CreateMultipartUploadInput) SetGrantReadACP(v string) *CreateMultipartUploadInput { + s.GrantReadACP = &v + return s +} + +// SetGrantWriteACP sets the GrantWriteACP field's value. +func (s *CreateMultipartUploadInput) SetGrantWriteACP(v string) *CreateMultipartUploadInput { + s.GrantWriteACP = &v + return s +} + +// SetKey sets the Key field's value. +func (s *CreateMultipartUploadInput) SetKey(v string) *CreateMultipartUploadInput { + s.Key = &v + return s +} + +// SetMetadata sets the Metadata field's value. +func (s *CreateMultipartUploadInput) SetMetadata(v map[string]*string) *CreateMultipartUploadInput { + s.Metadata = v + return s +} + +// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value. +func (s *CreateMultipartUploadInput) SetObjectLockLegalHoldStatus(v string) *CreateMultipartUploadInput { + s.ObjectLockLegalHoldStatus = &v + return s +} + +// SetObjectLockMode sets the ObjectLockMode field's value. +func (s *CreateMultipartUploadInput) SetObjectLockMode(v string) *CreateMultipartUploadInput { + s.ObjectLockMode = &v + return s +} + +// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value. +func (s *CreateMultipartUploadInput) SetObjectLockRetainUntilDate(v time.Time) *CreateMultipartUploadInput { + s.ObjectLockRetainUntilDate = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *CreateMultipartUploadInput) SetRequestPayer(v string) *CreateMultipartUploadInput { + s.RequestPayer = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *CreateMultipartUploadInput) SetSSECustomerAlgorithm(v string) *CreateMultipartUploadInput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKey sets the SSECustomerKey field's value. +func (s *CreateMultipartUploadInput) SetSSECustomerKey(v string) *CreateMultipartUploadInput { + s.SSECustomerKey = &v + return s +} + +func (s *CreateMultipartUploadInput) getSSECustomerKey() (v string) { + if s.SSECustomerKey == nil { + return v + } + return *s.SSECustomerKey +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *CreateMultipartUploadInput) SetSSECustomerKeyMD5(v string) *CreateMultipartUploadInput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetSSEKMSEncryptionContext sets the SSEKMSEncryptionContext field's value. +func (s *CreateMultipartUploadInput) SetSSEKMSEncryptionContext(v string) *CreateMultipartUploadInput { + s.SSEKMSEncryptionContext = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *CreateMultipartUploadInput) SetSSEKMSKeyId(v string) *CreateMultipartUploadInput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *CreateMultipartUploadInput) SetServerSideEncryption(v string) *CreateMultipartUploadInput { + s.ServerSideEncryption = &v + return s +} + +// SetStorageClass sets the StorageClass field's value. +func (s *CreateMultipartUploadInput) SetStorageClass(v string) *CreateMultipartUploadInput { + s.StorageClass = &v + return s +} + +// SetTagging sets the Tagging field's value. +func (s *CreateMultipartUploadInput) SetTagging(v string) *CreateMultipartUploadInput { + s.Tagging = &v + return s +} + +// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value. +func (s *CreateMultipartUploadInput) SetWebsiteRedirectLocation(v string) *CreateMultipartUploadInput { + s.WebsiteRedirectLocation = &v + return s +} + +type CreateMultipartUploadOutput struct { + _ struct{} `type:"structure"` + + // If the bucket has a lifecycle rule configured with an action to abort incomplete + // multipart uploads and the prefix in the lifecycle rule matches the object + // name in the request, the response includes this header. The header indicates + // when the initiated multipart upload becomes eligible for an abort operation. + // For more information, see Aborting Incomplete Multipart Uploads Using a Bucket + // Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config). + // + // The response also includes the x-amz-abort-rule-id header that provides the + // ID of the lifecycle configuration rule that defines this action. + AbortDate *time.Time `location:"header" locationName:"x-amz-abort-date" type:"timestamp"` + + // This header is returned along with the x-amz-abort-date header. It identifies + // the applicable lifecycle configuration rule that defines the action to abort + // incomplete multipart uploads. + AbortRuleId *string `location:"header" locationName:"x-amz-abort-rule-id" type:"string"` + + // Name of the bucket to which the multipart upload was initiated. + Bucket *string `locationName:"Bucket" type:"string"` + + // Object key for which the multipart upload was initiated. + Key *string `min:"1" type:"string"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header confirming the encryption algorithm + // used. + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header to provide round trip message integrity + // verification of the customer-provided encryption key. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // If present, specifies the AWS KMS Encryption Context to use for object encryption. + // The value of this header is a base64-encoded UTF-8 string holding JSON with + // the encryption context key-value pairs. + SSEKMSEncryptionContext *string `location:"header" locationName:"x-amz-server-side-encryption-context" type:"string" sensitive:"true"` + + // If present, specifies the ID of the AWS Key Management Service (KMS) customer + // master key (CMK) that was used for the object. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` + + // The Server-side encryption algorithm used when storing this object in S3 + // (e.g., AES256, aws:kms). + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + + // ID for the initiated multipart upload. + UploadId *string `type:"string"` +} + +// String returns the string representation +func (s CreateMultipartUploadOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateMultipartUploadOutput) GoString() string { + return s.String() +} + +// SetAbortDate sets the AbortDate field's value. +func (s *CreateMultipartUploadOutput) SetAbortDate(v time.Time) *CreateMultipartUploadOutput { + s.AbortDate = &v + return s +} + +// SetAbortRuleId sets the AbortRuleId field's value. +func (s *CreateMultipartUploadOutput) SetAbortRuleId(v string) *CreateMultipartUploadOutput { + s.AbortRuleId = &v + return s +} + +// SetBucket sets the Bucket field's value. +func (s *CreateMultipartUploadOutput) SetBucket(v string) *CreateMultipartUploadOutput { + s.Bucket = &v + return s +} + +func (s *CreateMultipartUploadOutput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *CreateMultipartUploadOutput) SetKey(v string) *CreateMultipartUploadOutput { + s.Key = &v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *CreateMultipartUploadOutput) SetRequestCharged(v string) *CreateMultipartUploadOutput { + s.RequestCharged = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *CreateMultipartUploadOutput) SetSSECustomerAlgorithm(v string) *CreateMultipartUploadOutput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *CreateMultipartUploadOutput) SetSSECustomerKeyMD5(v string) *CreateMultipartUploadOutput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetSSEKMSEncryptionContext sets the SSEKMSEncryptionContext field's value. +func (s *CreateMultipartUploadOutput) SetSSEKMSEncryptionContext(v string) *CreateMultipartUploadOutput { + s.SSEKMSEncryptionContext = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *CreateMultipartUploadOutput) SetSSEKMSKeyId(v string) *CreateMultipartUploadOutput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *CreateMultipartUploadOutput) SetServerSideEncryption(v string) *CreateMultipartUploadOutput { + s.ServerSideEncryption = &v + return s +} + +// SetUploadId sets the UploadId field's value. +func (s *CreateMultipartUploadOutput) SetUploadId(v string) *CreateMultipartUploadOutput { + s.UploadId = &v + return s +} + +// The container element for specifying the default Object Lock retention settings +// for new objects placed in the specified bucket. +type DefaultRetention struct { + _ struct{} `type:"structure"` + + // The number of days that you want to specify for the default retention period. + Days *int64 `type:"integer"` + + // The default Object Lock retention mode you want to apply to new objects placed + // in the specified bucket. + Mode *string `type:"string" enum:"ObjectLockRetentionMode"` + + // The number of years that you want to specify for the default retention period. + Years *int64 `type:"integer"` +} + +// String returns the string representation +func (s DefaultRetention) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DefaultRetention) GoString() string { + return s.String() +} + +// SetDays sets the Days field's value. +func (s *DefaultRetention) SetDays(v int64) *DefaultRetention { + s.Days = &v + return s +} + +// SetMode sets the Mode field's value. +func (s *DefaultRetention) SetMode(v string) *DefaultRetention { + s.Mode = &v + return s +} + +// SetYears sets the Years field's value. +func (s *DefaultRetention) SetYears(v int64) *DefaultRetention { + s.Years = &v + return s +} + +// Container for the objects to delete. +type Delete struct { + _ struct{} `type:"structure"` + + // The objects to delete. + // + // Objects is a required field + Objects []*ObjectIdentifier `locationName:"Object" type:"list" flattened:"true" required:"true"` + + // Element to enable quiet mode for the request. When you add this element, + // you must set its value to true. + Quiet *bool `type:"boolean"` +} + +// String returns the string representation +func (s Delete) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Delete) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Delete) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Delete"} + if s.Objects == nil { + invalidParams.Add(request.NewErrParamRequired("Objects")) + } + if s.Objects != nil { + for i, v := range s.Objects { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Objects", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetObjects sets the Objects field's value. +func (s *Delete) SetObjects(v []*ObjectIdentifier) *Delete { + s.Objects = v + return s +} + +// SetQuiet sets the Quiet field's value. +func (s *Delete) SetQuiet(v bool) *Delete { + s.Quiet = &v + return s +} + +type DeleteBucketAnalyticsConfigurationInput struct { + _ struct{} `locationName:"DeleteBucketAnalyticsConfigurationRequest" type:"structure"` + + // The name of the bucket from which an analytics configuration is deleted. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ID that identifies the analytics configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketAnalyticsConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketAnalyticsConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketAnalyticsConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketAnalyticsConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketAnalyticsConfigurationInput) SetBucket(v string) *DeleteBucketAnalyticsConfigurationInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketAnalyticsConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetId sets the Id field's value. +func (s *DeleteBucketAnalyticsConfigurationInput) SetId(v string) *DeleteBucketAnalyticsConfigurationInput { + s.Id = &v + return s +} + +type DeleteBucketAnalyticsConfigurationOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketAnalyticsConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketAnalyticsConfigurationOutput) GoString() string { + return s.String() +} + +type DeleteBucketCorsInput struct { + _ struct{} `locationName:"DeleteBucketCorsRequest" type:"structure"` + + // Specifies the bucket whose cors configuration is being deleted. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketCorsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketCorsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketCorsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketCorsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketCorsInput) SetBucket(v string) *DeleteBucketCorsInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketCorsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeleteBucketCorsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketCorsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketCorsOutput) GoString() string { + return s.String() +} + +type DeleteBucketEncryptionInput struct { + _ struct{} `locationName:"DeleteBucketEncryptionRequest" type:"structure"` + + // The name of the bucket containing the server-side encryption configuration + // to delete. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketEncryptionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketEncryptionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketEncryptionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketEncryptionInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketEncryptionInput) SetBucket(v string) *DeleteBucketEncryptionInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketEncryptionInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeleteBucketEncryptionOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketEncryptionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketEncryptionOutput) GoString() string { + return s.String() +} + +type DeleteBucketInput struct { + _ struct{} `locationName:"DeleteBucketRequest" type:"structure"` + + // Specifies the bucket being deleted. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketInput) SetBucket(v string) *DeleteBucketInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeleteBucketInventoryConfigurationInput struct { + _ struct{} `locationName:"DeleteBucketInventoryConfigurationRequest" type:"structure"` + + // The name of the bucket containing the inventory configuration to delete. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ID used to identify the inventory configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketInventoryConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketInventoryConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketInventoryConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketInventoryConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketInventoryConfigurationInput) SetBucket(v string) *DeleteBucketInventoryConfigurationInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketInventoryConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetId sets the Id field's value. +func (s *DeleteBucketInventoryConfigurationInput) SetId(v string) *DeleteBucketInventoryConfigurationInput { + s.Id = &v + return s +} + +type DeleteBucketInventoryConfigurationOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketInventoryConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketInventoryConfigurationOutput) GoString() string { + return s.String() +} + +type DeleteBucketLifecycleInput struct { + _ struct{} `locationName:"DeleteBucketLifecycleRequest" type:"structure"` + + // The bucket name of the lifecycle to delete. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketLifecycleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketLifecycleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketLifecycleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketLifecycleInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketLifecycleInput) SetBucket(v string) *DeleteBucketLifecycleInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketLifecycleInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeleteBucketLifecycleOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketLifecycleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketLifecycleOutput) GoString() string { + return s.String() +} + +type DeleteBucketMetricsConfigurationInput struct { + _ struct{} `locationName:"DeleteBucketMetricsConfigurationRequest" type:"structure"` + + // The name of the bucket containing the metrics configuration to delete. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ID used to identify the metrics configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketMetricsConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketMetricsConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketMetricsConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketMetricsConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketMetricsConfigurationInput) SetBucket(v string) *DeleteBucketMetricsConfigurationInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketMetricsConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetId sets the Id field's value. +func (s *DeleteBucketMetricsConfigurationInput) SetId(v string) *DeleteBucketMetricsConfigurationInput { + s.Id = &v + return s +} + +type DeleteBucketMetricsConfigurationOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketMetricsConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketMetricsConfigurationOutput) GoString() string { + return s.String() +} + +type DeleteBucketOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketOutput) GoString() string { + return s.String() +} + +type DeleteBucketPolicyInput struct { + _ struct{} `locationName:"DeleteBucketPolicyRequest" type:"structure"` + + // The bucket name. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketPolicyInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketPolicyInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketPolicyInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketPolicyInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketPolicyInput) SetBucket(v string) *DeleteBucketPolicyInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketPolicyInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeleteBucketPolicyOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketPolicyOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketPolicyOutput) GoString() string { + return s.String() +} + +type DeleteBucketReplicationInput struct { + _ struct{} `locationName:"DeleteBucketReplicationRequest" type:"structure"` + + // The bucket name. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketReplicationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketReplicationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketReplicationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketReplicationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketReplicationInput) SetBucket(v string) *DeleteBucketReplicationInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketReplicationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeleteBucketReplicationOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketReplicationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketReplicationOutput) GoString() string { + return s.String() +} + +type DeleteBucketTaggingInput struct { + _ struct{} `locationName:"DeleteBucketTaggingRequest" type:"structure"` + + // The bucket that has the tag set to be removed. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketTaggingInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketTaggingInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketTaggingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketTaggingInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketTaggingInput) SetBucket(v string) *DeleteBucketTaggingInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketTaggingInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeleteBucketTaggingOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketTaggingOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketTaggingOutput) GoString() string { + return s.String() +} + +type DeleteBucketWebsiteInput struct { + _ struct{} `locationName:"DeleteBucketWebsiteRequest" type:"structure"` + + // The bucket name for which you want to remove the website configuration. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteBucketWebsiteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketWebsiteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteBucketWebsiteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteBucketWebsiteInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteBucketWebsiteInput) SetBucket(v string) *DeleteBucketWebsiteInput { + s.Bucket = &v + return s +} + +func (s *DeleteBucketWebsiteInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeleteBucketWebsiteOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteBucketWebsiteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteBucketWebsiteOutput) GoString() string { + return s.String() +} + +// Information about the delete marker. +type DeleteMarkerEntry struct { + _ struct{} `type:"structure"` + + // Specifies whether the object is (true) or is not (false) the latest version + // of an object. + IsLatest *bool `type:"boolean"` + + // The object key. + Key *string `min:"1" type:"string"` + + // Date and time the object was last modified. + LastModified *time.Time `type:"timestamp"` + + // The account that created the delete marker.> + Owner *Owner `type:"structure"` + + // Version ID of an object. + VersionId *string `type:"string"` +} + +// String returns the string representation +func (s DeleteMarkerEntry) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteMarkerEntry) GoString() string { + return s.String() +} + +// SetIsLatest sets the IsLatest field's value. +func (s *DeleteMarkerEntry) SetIsLatest(v bool) *DeleteMarkerEntry { + s.IsLatest = &v + return s +} + +// SetKey sets the Key field's value. +func (s *DeleteMarkerEntry) SetKey(v string) *DeleteMarkerEntry { + s.Key = &v + return s +} + +// SetLastModified sets the LastModified field's value. +func (s *DeleteMarkerEntry) SetLastModified(v time.Time) *DeleteMarkerEntry { + s.LastModified = &v + return s +} + +// SetOwner sets the Owner field's value. +func (s *DeleteMarkerEntry) SetOwner(v *Owner) *DeleteMarkerEntry { + s.Owner = v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *DeleteMarkerEntry) SetVersionId(v string) *DeleteMarkerEntry { + s.VersionId = &v + return s +} + +// Specifies whether Amazon S3 replicates the delete markers. If you specify +// a Filter, you must specify this element. However, in the latest version of +// replication configuration (when Filter is specified), Amazon S3 doesn't replicate +// delete markers. Therefore, the DeleteMarkerReplication element can contain +// only Disabled. For an example configuration, see Basic Rule +// Configuration (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-config-min-rule-config). +// +// If you don't specify the Filter element, Amazon S3 assumes the replication +// configuration is the earlier version, V1. In the earlier version, Amazon +// S3 handled replication of delete markers differently. For more information, +// see Backward Compatibility (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations). +type DeleteMarkerReplication struct { + _ struct{} `type:"structure"` + + // Indicates whether to replicate delete markers. + // + // In the current implementation, Amazon S3 doesn't replicate the delete markers. + // The status must be Disabled. + Status *string `type:"string" enum:"DeleteMarkerReplicationStatus"` +} + +// String returns the string representation +func (s DeleteMarkerReplication) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteMarkerReplication) GoString() string { + return s.String() +} + +// SetStatus sets the Status field's value. +func (s *DeleteMarkerReplication) SetStatus(v string) *DeleteMarkerReplication { + s.Status = &v + return s +} + +type DeleteObjectInput struct { + _ struct{} `locationName:"DeleteObjectRequest" type:"structure"` + + // The bucket name of the bucket containing the object. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Indicates whether S3 Object Lock should bypass Governance-mode restrictions + // to process this operation. + BypassGovernanceRetention *bool `location:"header" locationName:"x-amz-bypass-governance-retention" type:"boolean"` + + // Key name of the object to delete. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // The concatenation of the authentication device's serial number, a space, + // and the value that is displayed on your authentication device. Required to + // permanently delete a versionedobject if versioning is configured with MFA + // Deleteenabled. + MFA *string `location:"header" locationName:"x-amz-mfa" type:"string"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // VersionId used to reference a specific version of the object. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +} + +// String returns the string representation +func (s DeleteObjectInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteObjectInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteObjectInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteObjectInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteObjectInput) SetBucket(v string) *DeleteObjectInput { + s.Bucket = &v + return s +} + +func (s *DeleteObjectInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetBypassGovernanceRetention sets the BypassGovernanceRetention field's value. +func (s *DeleteObjectInput) SetBypassGovernanceRetention(v bool) *DeleteObjectInput { + s.BypassGovernanceRetention = &v + return s +} + +// SetKey sets the Key field's value. +func (s *DeleteObjectInput) SetKey(v string) *DeleteObjectInput { + s.Key = &v + return s +} + +// SetMFA sets the MFA field's value. +func (s *DeleteObjectInput) SetMFA(v string) *DeleteObjectInput { + s.MFA = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *DeleteObjectInput) SetRequestPayer(v string) *DeleteObjectInput { + s.RequestPayer = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *DeleteObjectInput) SetVersionId(v string) *DeleteObjectInput { + s.VersionId = &v + return s +} + +type DeleteObjectOutput struct { + _ struct{} `type:"structure"` + + // Specifies whether the versioned object that was permanently deleted was (true) + // or was not (false) a delete marker. + DeleteMarker *bool `location:"header" locationName:"x-amz-delete-marker" type:"boolean"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + + // Returns the version ID of the delete marker created as a result of the DELETE + // operation. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +} + +// String returns the string representation +func (s DeleteObjectOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteObjectOutput) GoString() string { + return s.String() +} + +// SetDeleteMarker sets the DeleteMarker field's value. +func (s *DeleteObjectOutput) SetDeleteMarker(v bool) *DeleteObjectOutput { + s.DeleteMarker = &v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *DeleteObjectOutput) SetRequestCharged(v string) *DeleteObjectOutput { + s.RequestCharged = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *DeleteObjectOutput) SetVersionId(v string) *DeleteObjectOutput { + s.VersionId = &v + return s +} + +type DeleteObjectTaggingInput struct { + _ struct{} `locationName:"DeleteObjectTaggingRequest" type:"structure"` + + // The bucket containing the objects from which to remove the tags. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Name of the tag. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // The versionId of the object that the tag-set will be removed from. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +} + +// String returns the string representation +func (s DeleteObjectTaggingInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteObjectTaggingInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteObjectTaggingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteObjectTaggingInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteObjectTaggingInput) SetBucket(v string) *DeleteObjectTaggingInput { + s.Bucket = &v + return s +} + +func (s *DeleteObjectTaggingInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *DeleteObjectTaggingInput) SetKey(v string) *DeleteObjectTaggingInput { + s.Key = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *DeleteObjectTaggingInput) SetVersionId(v string) *DeleteObjectTaggingInput { + s.VersionId = &v + return s +} + +type DeleteObjectTaggingOutput struct { + _ struct{} `type:"structure"` + + // The versionId of the object the tag-set was removed from. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +} + +// String returns the string representation +func (s DeleteObjectTaggingOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteObjectTaggingOutput) GoString() string { + return s.String() +} + +// SetVersionId sets the VersionId field's value. +func (s *DeleteObjectTaggingOutput) SetVersionId(v string) *DeleteObjectTaggingOutput { + s.VersionId = &v + return s +} + +type DeleteObjectsInput struct { + _ struct{} `locationName:"DeleteObjectsRequest" type:"structure" payload:"Delete"` + + // The bucket name containing the objects to delete. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Specifies whether you want to delete this object even if it has a Governance-type + // Object Lock in place. You must have sufficient permissions to perform this + // operation. + BypassGovernanceRetention *bool `location:"header" locationName:"x-amz-bypass-governance-retention" type:"boolean"` + + // Container for the request. + // + // Delete is a required field + Delete *Delete `locationName:"Delete" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + + // The concatenation of the authentication device's serial number, a space, + // and the value that is displayed on your authentication device. Required to + // permanently delete a versioned object if versioning is configured with MFA + // Delete enabled. + MFA *string `location:"header" locationName:"x-amz-mfa" type:"string"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +} + +// String returns the string representation +func (s DeleteObjectsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteObjectsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteObjectsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteObjectsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Delete == nil { + invalidParams.Add(request.NewErrParamRequired("Delete")) + } + if s.Delete != nil { + if err := s.Delete.Validate(); err != nil { + invalidParams.AddNested("Delete", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeleteObjectsInput) SetBucket(v string) *DeleteObjectsInput { + s.Bucket = &v + return s +} + +func (s *DeleteObjectsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetBypassGovernanceRetention sets the BypassGovernanceRetention field's value. +func (s *DeleteObjectsInput) SetBypassGovernanceRetention(v bool) *DeleteObjectsInput { + s.BypassGovernanceRetention = &v + return s +} + +// SetDelete sets the Delete field's value. +func (s *DeleteObjectsInput) SetDelete(v *Delete) *DeleteObjectsInput { + s.Delete = v + return s +} + +// SetMFA sets the MFA field's value. +func (s *DeleteObjectsInput) SetMFA(v string) *DeleteObjectsInput { + s.MFA = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *DeleteObjectsInput) SetRequestPayer(v string) *DeleteObjectsInput { + s.RequestPayer = &v + return s +} + +type DeleteObjectsOutput struct { + _ struct{} `type:"structure"` + + // Container element for a successful delete. It identifies the object that + // was successfully deleted. + Deleted []*DeletedObject `type:"list" flattened:"true"` + + // Container for a failed delete operation that describes the object that Amazon + // S3 attempted to delete and the error it encountered. + Errors []*Error `locationName:"Error" type:"list" flattened:"true"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +} + +// String returns the string representation +func (s DeleteObjectsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteObjectsOutput) GoString() string { + return s.String() +} + +// SetDeleted sets the Deleted field's value. +func (s *DeleteObjectsOutput) SetDeleted(v []*DeletedObject) *DeleteObjectsOutput { + s.Deleted = v + return s +} + +// SetErrors sets the Errors field's value. +func (s *DeleteObjectsOutput) SetErrors(v []*Error) *DeleteObjectsOutput { + s.Errors = v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *DeleteObjectsOutput) SetRequestCharged(v string) *DeleteObjectsOutput { + s.RequestCharged = &v + return s +} + +type DeletePublicAccessBlockInput struct { + _ struct{} `locationName:"DeletePublicAccessBlockRequest" type:"structure"` + + // The Amazon S3 bucket whose PublicAccessBlock configuration you want to delete. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeletePublicAccessBlockInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeletePublicAccessBlockInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeletePublicAccessBlockInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeletePublicAccessBlockInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *DeletePublicAccessBlockInput) SetBucket(v string) *DeletePublicAccessBlockInput { + s.Bucket = &v + return s +} + +func (s *DeletePublicAccessBlockInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type DeletePublicAccessBlockOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeletePublicAccessBlockOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeletePublicAccessBlockOutput) GoString() string { + return s.String() +} + +// Information about the deleted object. +type DeletedObject struct { + _ struct{} `type:"structure"` + + // Specifies whether the versioned object that was permanently deleted was (true) + // or was not (false) a delete marker. In a simple DELETE, this header indicates + // whether (true) or not (false) a delete marker was created. + DeleteMarker *bool `type:"boolean"` + + // The version ID of the delete marker created as a result of the DELETE operation. + // If you delete a specific object version, the value returned by this header + // is the version ID of the object version deleted. + DeleteMarkerVersionId *string `type:"string"` + + // The name of the deleted object. + Key *string `min:"1" type:"string"` + + // The version ID of the deleted object. + VersionId *string `type:"string"` +} + +// String returns the string representation +func (s DeletedObject) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeletedObject) GoString() string { + return s.String() +} + +// SetDeleteMarker sets the DeleteMarker field's value. +func (s *DeletedObject) SetDeleteMarker(v bool) *DeletedObject { + s.DeleteMarker = &v + return s +} + +// SetDeleteMarkerVersionId sets the DeleteMarkerVersionId field's value. +func (s *DeletedObject) SetDeleteMarkerVersionId(v string) *DeletedObject { + s.DeleteMarkerVersionId = &v + return s +} + +// SetKey sets the Key field's value. +func (s *DeletedObject) SetKey(v string) *DeletedObject { + s.Key = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *DeletedObject) SetVersionId(v string) *DeletedObject { + s.VersionId = &v + return s +} + +// Specifies information about where to publish analysis or configuration results +// for an Amazon S3 bucket. +type Destination struct { + _ struct{} `type:"structure"` + + // Specify this only in a cross-account scenario (where source and destination + // bucket owners are not the same), and you want to change replica ownership + // to the AWS account that owns the destination bucket. If this is not specified + // in the replication configuration, the replicas are owned by same AWS account + // that owns the source object. + AccessControlTranslation *AccessControlTranslation `type:"structure"` + + // Destination bucket owner account ID. In a cross-account scenario, if you + // direct Amazon S3 to change replica ownership to the AWS account that owns + // the destination bucket by specifying the AccessControlTranslation property, + // this is the account ID of the destination bucket owner. For more information, + // see Replication Additional Configuration: Change Replica Owner (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-change-owner.html) + // in the Amazon Simple Storage Service Developer Guide. + Account *string `type:"string"` + + // The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to + // store the results. + // + // Bucket is a required field + Bucket *string `type:"string" required:"true"` + + // A container that provides information about encryption. If SourceSelectionCriteria + // is specified, you must specify this element. + EncryptionConfiguration *EncryptionConfiguration `type:"structure"` + + // A container specifying replication metrics-related information, including + // whether emitting metrics and Amazon S3 events for replication are enabled. + // In addition, contains configurations related to specific metrics or events. + // Must be specified together with a ReplicationTime block. + Metrics *Metrics `type:"structure"` + + // A container specifying the time when all objects and operations on objects + // are replicated. Must be specified together with a Metrics block. + ReplicationTime *ReplicationTime `type:"structure"` + + // The storage class to use when replicating objects, such as standard or reduced + // redundancy. By default, Amazon S3 uses the storage class of the source object + // to create the object replica. + // + // For valid values, see the StorageClass element of the PUT Bucket replication + // (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html) + // action in the Amazon Simple Storage Service API Reference. + StorageClass *string `type:"string" enum:"StorageClass"` +} + +// String returns the string representation +func (s Destination) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Destination) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Destination) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Destination"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.AccessControlTranslation != nil { + if err := s.AccessControlTranslation.Validate(); err != nil { + invalidParams.AddNested("AccessControlTranslation", err.(request.ErrInvalidParams)) + } + } + if s.Metrics != nil { + if err := s.Metrics.Validate(); err != nil { + invalidParams.AddNested("Metrics", err.(request.ErrInvalidParams)) + } + } + if s.ReplicationTime != nil { + if err := s.ReplicationTime.Validate(); err != nil { + invalidParams.AddNested("ReplicationTime", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAccessControlTranslation sets the AccessControlTranslation field's value. +func (s *Destination) SetAccessControlTranslation(v *AccessControlTranslation) *Destination { + s.AccessControlTranslation = v + return s +} + +// SetAccount sets the Account field's value. +func (s *Destination) SetAccount(v string) *Destination { + s.Account = &v + return s +} + +// SetBucket sets the Bucket field's value. +func (s *Destination) SetBucket(v string) *Destination { + s.Bucket = &v + return s +} + +func (s *Destination) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetEncryptionConfiguration sets the EncryptionConfiguration field's value. +func (s *Destination) SetEncryptionConfiguration(v *EncryptionConfiguration) *Destination { + s.EncryptionConfiguration = v + return s +} + +// SetMetrics sets the Metrics field's value. +func (s *Destination) SetMetrics(v *Metrics) *Destination { + s.Metrics = v + return s +} + +// SetReplicationTime sets the ReplicationTime field's value. +func (s *Destination) SetReplicationTime(v *ReplicationTime) *Destination { + s.ReplicationTime = v + return s +} + +// SetStorageClass sets the StorageClass field's value. +func (s *Destination) SetStorageClass(v string) *Destination { + s.StorageClass = &v + return s +} + +// Contains the type of server-side encryption used. +type Encryption struct { + _ struct{} `type:"structure"` + + // The server-side encryption algorithm used when storing job results in Amazon + // S3 (e.g., AES256, aws:kms). + // + // EncryptionType is a required field + EncryptionType *string `type:"string" required:"true" enum:"ServerSideEncryption"` + + // If the encryption type is aws:kms, this optional value can be used to specify + // the encryption context for the restore results. + KMSContext *string `type:"string"` + + // If the encryption type is aws:kms, this optional value specifies the AWS + // KMS key ID to use for encryption of job results. + KMSKeyId *string `type:"string" sensitive:"true"` +} + +// String returns the string representation +func (s Encryption) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Encryption) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Encryption) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Encryption"} + if s.EncryptionType == nil { + invalidParams.Add(request.NewErrParamRequired("EncryptionType")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEncryptionType sets the EncryptionType field's value. +func (s *Encryption) SetEncryptionType(v string) *Encryption { + s.EncryptionType = &v + return s +} + +// SetKMSContext sets the KMSContext field's value. +func (s *Encryption) SetKMSContext(v string) *Encryption { + s.KMSContext = &v + return s +} + +// SetKMSKeyId sets the KMSKeyId field's value. +func (s *Encryption) SetKMSKeyId(v string) *Encryption { + s.KMSKeyId = &v + return s +} + +// Specifies encryption-related information for an Amazon S3 bucket that is +// a destination for replicated objects. +type EncryptionConfiguration struct { + _ struct{} `type:"structure"` + + // Specifies the AWS KMS Key ID (Key ARN or Alias ARN) for the destination bucket. + // Amazon S3 uses this key to encrypt replica objects. + ReplicaKmsKeyID *string `type:"string"` +} + +// String returns the string representation +func (s EncryptionConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s EncryptionConfiguration) GoString() string { + return s.String() +} + +// SetReplicaKmsKeyID sets the ReplicaKmsKeyID field's value. +func (s *EncryptionConfiguration) SetReplicaKmsKeyID(v string) *EncryptionConfiguration { + s.ReplicaKmsKeyID = &v + return s +} + +// A message that indicates the request is complete and no more messages will +// be sent. You should not assume that the request is complete until the client +// receives an EndEvent. +type EndEvent struct { + _ struct{} `locationName:"EndEvent" type:"structure"` +} + +// String returns the string representation +func (s EndEvent) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s EndEvent) GoString() string { + return s.String() +} + +// The EndEvent is and event in the SelectObjectContentEventStream group of events. +func (s *EndEvent) eventSelectObjectContentEventStream() {} + +// UnmarshalEvent unmarshals the EventStream Message into the EndEvent value. +// This method is only used internally within the SDK's EventStream handling. +func (s *EndEvent) UnmarshalEvent( + payloadUnmarshaler protocol.PayloadUnmarshaler, + msg eventstream.Message, +) error { + return nil +} + +// Container for all error elements. +type Error struct { + _ struct{} `type:"structure"` + + // The error code is a string that uniquely identifies an error condition. It + // is meant to be read and understood by programs that detect and handle errors + // by type. + // + // Amazon S3 error codes + // + // * Code: AccessDenied Description: Access Denied HTTP Status Code: 403 + // Forbidden SOAP Fault Code Prefix: Client + // + // * Code: AccountProblem Description: There is a problem with your AWS account + // that prevents the operation from completing successfully. Contact AWS + // Support for further assistance. HTTP Status Code: 403 Forbidden SOAP Fault + // Code Prefix: Client + // + // * Code: AllAccessDisabled Description: All access to this Amazon S3 resource + // has been disabled. Contact AWS Support for further assistance. HTTP Status + // Code: 403 Forbidden SOAP Fault Code Prefix: Client + // + // * Code: AmbiguousGrantByEmailAddress Description: The email address you + // provided is associated with more than one account. HTTP Status Code: 400 + // Bad Request SOAP Fault Code Prefix: Client + // + // * Code: AuthorizationHeaderMalformed Description: The authorization header + // you provided is invalid. HTTP Status Code: 400 Bad Request HTTP Status + // Code: N/A + // + // * Code: BadDigest Description: The Content-MD5 you specified did not match + // what we received. HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: + // Client + // + // * Code: BucketAlreadyExists Description: The requested bucket name is + // not available. The bucket namespace is shared by all users of the system. + // Please select a different name and try again. HTTP Status Code: 409 Conflict + // SOAP Fault Code Prefix: Client + // + // * Code: BucketAlreadyOwnedByYou Description: The bucket you tried to create + // already exists, and you own it. Amazon S3 returns this error in all AWS + // Regions except in the North Virginia region. For legacy compatibility, + // if you re-create an existing bucket that you already own in the North + // Virginia region, Amazon S3 returns 200 OK and resets the bucket access + // control lists (ACLs). Code: 409 Conflict (in all regions except the North + // Virginia region) SOAP Fault Code Prefix: Client + // + // * Code: BucketNotEmpty Description: The bucket you tried to delete is + // not empty. HTTP Status Code: 409 Conflict SOAP Fault Code Prefix: Client + // + // * Code: CredentialsNotSupported Description: This request does not support + // credentials. HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: + // Client + // + // * Code: CrossLocationLoggingProhibited Description: Cross-location logging + // not allowed. Buckets in one geographic location cannot log information + // to a bucket in another location. HTTP Status Code: 403 Forbidden SOAP + // Fault Code Prefix: Client + // + // * Code: EntityTooSmall Description: Your proposed upload is smaller than + // the minimum allowed object size. HTTP Status Code: 400 Bad Request SOAP + // Fault Code Prefix: Client + // + // * Code: EntityTooLarge Description: Your proposed upload exceeds the maximum + // allowed object size. HTTP Status Code: 400 Bad Request SOAP Fault Code + // Prefix: Client + // + // * Code: ExpiredToken Description: The provided token has expired. HTTP + // Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: IllegalVersioningConfigurationException Description: Indicates + // that the versioning configuration specified in the request is invalid. + // HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: IncompleteBody Description: You did not provide the number of + // bytes specified by the Content-Length HTTP header HTTP Status Code: 400 + // Bad Request SOAP Fault Code Prefix: Client + // + // * Code: IncorrectNumberOfFilesInPostRequest Description: POST requires + // exactly one file upload per request. HTTP Status Code: 400 Bad Request + // SOAP Fault Code Prefix: Client + // + // * Code: InlineDataTooLarge Description: Inline data exceeds the maximum + // allowed size. HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: + // Client + // + // * Code: InternalError Description: We encountered an internal error. Please + // try again. HTTP Status Code: 500 Internal Server Error SOAP Fault Code + // Prefix: Server + // + // * Code: InvalidAccessKeyId Description: The AWS access key ID you provided + // does not exist in our records. HTTP Status Code: 403 Forbidden SOAP Fault + // Code Prefix: Client + // + // * Code: InvalidAddressingHeader Description: You must specify the Anonymous + // role. HTTP Status Code: N/A SOAP Fault Code Prefix: Client + // + // * Code: InvalidArgument Description: Invalid Argument HTTP Status Code: + // 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidBucketName Description: The specified bucket is not valid. + // HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidBucketState Description: The request is not valid with + // the current state of the bucket. HTTP Status Code: 409 Conflict SOAP Fault + // Code Prefix: Client + // + // * Code: InvalidDigest Description: The Content-MD5 you specified is not + // valid. HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidEncryptionAlgorithmError Description: The encryption request + // you specified is not valid. The valid value is AES256. HTTP Status Code: + // 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidLocationConstraint Description: The specified location + // constraint is not valid. For more information about Regions, see How to + // Select a Region for Your Buckets (https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro). + // HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidObjectState Description: The operation is not valid for + // the current state of the object. HTTP Status Code: 403 Forbidden SOAP + // Fault Code Prefix: Client + // + // * Code: InvalidPart Description: One or more of the specified parts could + // not be found. The part might not have been uploaded, or the specified + // entity tag might not have matched the part's entity tag. HTTP Status Code: + // 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidPartOrder Description: The list of parts was not in ascending + // order. Parts list must be specified in order by part number. HTTP Status + // Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidPayer Description: All access to this object has been disabled. + // Please contact AWS Support for further assistance. HTTP Status Code: 403 + // Forbidden SOAP Fault Code Prefix: Client + // + // * Code: InvalidPolicyDocument Description: The content of the form does + // not meet the conditions specified in the policy document. HTTP Status + // Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidRange Description: The requested range cannot be satisfied. + // HTTP Status Code: 416 Requested Range Not Satisfiable SOAP Fault Code + // Prefix: Client + // + // * Code: InvalidRequest Description: Please use AWS4-HMAC-SHA256. HTTP + // Status Code: 400 Bad Request Code: N/A + // + // * Code: InvalidRequest Description: SOAP requests must be made over an + // HTTPS connection. HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: + // Client + // + // * Code: InvalidRequest Description: Amazon S3 Transfer Acceleration is + // not supported for buckets with non-DNS compliant names. HTTP Status Code: + // 400 Bad Request Code: N/A + // + // * Code: InvalidRequest Description: Amazon S3 Transfer Acceleration is + // not supported for buckets with periods (.) in their names. HTTP Status + // Code: 400 Bad Request Code: N/A + // + // * Code: InvalidRequest Description: Amazon S3 Transfer Accelerate endpoint + // only supports virtual style requests. HTTP Status Code: 400 Bad Request + // Code: N/A + // + // * Code: InvalidRequest Description: Amazon S3 Transfer Accelerate is not + // configured on this bucket. HTTP Status Code: 400 Bad Request Code: N/A + // + // * Code: InvalidRequest Description: Amazon S3 Transfer Accelerate is disabled + // on this bucket. HTTP Status Code: 400 Bad Request Code: N/A + // + // * Code: InvalidRequest Description: Amazon S3 Transfer Acceleration is + // not supported on this bucket. Contact AWS Support for more information. + // HTTP Status Code: 400 Bad Request Code: N/A + // + // * Code: InvalidRequest Description: Amazon S3 Transfer Acceleration cannot + // be enabled on this bucket. Contact AWS Support for more information. HTTP + // Status Code: 400 Bad Request Code: N/A + // + // * Code: InvalidSecurity Description: The provided security credentials + // are not valid. HTTP Status Code: 403 Forbidden SOAP Fault Code Prefix: + // Client + // + // * Code: InvalidSOAPRequest Description: The SOAP request body is invalid. + // HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidStorageClass Description: The storage class you specified + // is not valid. HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: + // Client + // + // * Code: InvalidTargetBucketForLogging Description: The target bucket for + // logging does not exist, is not owned by you, or does not have the appropriate + // grants for the log-delivery group. HTTP Status Code: 400 Bad Request SOAP + // Fault Code Prefix: Client + // + // * Code: InvalidToken Description: The provided token is malformed or otherwise + // invalid. HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: InvalidURI Description: Couldn't parse the specified URI. HTTP + // Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: KeyTooLongError Description: Your key is too long. HTTP Status + // Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: MalformedACLError Description: The XML you provided was not well-formed + // or did not validate against our published schema. HTTP Status Code: 400 + // Bad Request SOAP Fault Code Prefix: Client + // + // * Code: MalformedPOSTRequest Description: The body of your POST request + // is not well-formed multipart/form-data. HTTP Status Code: 400 Bad Request + // SOAP Fault Code Prefix: Client + // + // * Code: MalformedXML Description: This happens when the user sends malformed + // XML (XML that doesn't conform to the published XSD) for the configuration. + // The error message is, "The XML you provided was not well-formed or did + // not validate against our published schema." HTTP Status Code: 400 Bad + // Request SOAP Fault Code Prefix: Client + // + // * Code: MaxMessageLengthExceeded Description: Your request was too big. + // HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: MaxPostPreDataLengthExceededError Description: Your POST request + // fields preceding the upload file were too large. HTTP Status Code: 400 + // Bad Request SOAP Fault Code Prefix: Client + // + // * Code: MetadataTooLarge Description: Your metadata headers exceed the + // maximum allowed metadata size. HTTP Status Code: 400 Bad Request SOAP + // Fault Code Prefix: Client + // + // * Code: MethodNotAllowed Description: The specified method is not allowed + // against this resource. HTTP Status Code: 405 Method Not Allowed SOAP Fault + // Code Prefix: Client + // + // * Code: MissingAttachment Description: A SOAP attachment was expected, + // but none were found. HTTP Status Code: N/A SOAP Fault Code Prefix: Client + // + // * Code: MissingContentLength Description: You must provide the Content-Length + // HTTP header. HTTP Status Code: 411 Length Required SOAP Fault Code Prefix: + // Client + // + // * Code: MissingRequestBodyError Description: This happens when the user + // sends an empty XML document as a request. The error message is, "Request + // body is empty." HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: + // Client + // + // * Code: MissingSecurityElement Description: The SOAP 1.1 request is missing + // a security element. HTTP Status Code: 400 Bad Request SOAP Fault Code + // Prefix: Client + // + // * Code: MissingSecurityHeader Description: Your request is missing a required + // header. HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: NoLoggingStatusForKey Description: There is no such thing as a + // logging status subresource for a key. HTTP Status Code: 400 Bad Request + // SOAP Fault Code Prefix: Client + // + // * Code: NoSuchBucket Description: The specified bucket does not exist. + // HTTP Status Code: 404 Not Found SOAP Fault Code Prefix: Client + // + // * Code: NoSuchBucketPolicy Description: The specified bucket does not + // have a bucket policy. HTTP Status Code: 404 Not Found SOAP Fault Code + // Prefix: Client + // + // * Code: NoSuchKey Description: The specified key does not exist. HTTP + // Status Code: 404 Not Found SOAP Fault Code Prefix: Client + // + // * Code: NoSuchLifecycleConfiguration Description: The lifecycle configuration + // does not exist. HTTP Status Code: 404 Not Found SOAP Fault Code Prefix: + // Client + // + // * Code: NoSuchUpload Description: The specified multipart upload does + // not exist. The upload ID might be invalid, or the multipart upload might + // have been aborted or completed. HTTP Status Code: 404 Not Found SOAP Fault + // Code Prefix: Client + // + // * Code: NoSuchVersion Description: Indicates that the version ID specified + // in the request does not match an existing version. HTTP Status Code: 404 + // Not Found SOAP Fault Code Prefix: Client + // + // * Code: NotImplemented Description: A header you provided implies functionality + // that is not implemented. HTTP Status Code: 501 Not Implemented SOAP Fault + // Code Prefix: Server + // + // * Code: NotSignedUp Description: Your account is not signed up for the + // Amazon S3 service. You must sign up before you can use Amazon S3. You + // can sign up at the following URL: https://aws.amazon.com/s3 HTTP Status + // Code: 403 Forbidden SOAP Fault Code Prefix: Client + // + // * Code: OperationAborted Description: A conflicting conditional operation + // is currently in progress against this resource. Try again. HTTP Status + // Code: 409 Conflict SOAP Fault Code Prefix: Client + // + // * Code: PermanentRedirect Description: The bucket you are attempting to + // access must be addressed using the specified endpoint. Send all future + // requests to this endpoint. HTTP Status Code: 301 Moved Permanently SOAP + // Fault Code Prefix: Client + // + // * Code: PreconditionFailed Description: At least one of the preconditions + // you specified did not hold. HTTP Status Code: 412 Precondition Failed + // SOAP Fault Code Prefix: Client + // + // * Code: Redirect Description: Temporary redirect. HTTP Status Code: 307 + // Moved Temporarily SOAP Fault Code Prefix: Client + // + // * Code: RestoreAlreadyInProgress Description: Object restore is already + // in progress. HTTP Status Code: 409 Conflict SOAP Fault Code Prefix: Client + // + // * Code: RequestIsNotMultiPartContent Description: Bucket POST must be + // of the enclosure-type multipart/form-data. HTTP Status Code: 400 Bad Request + // SOAP Fault Code Prefix: Client + // + // * Code: RequestTimeout Description: Your socket connection to the server + // was not read from or written to within the timeout period. HTTP Status + // Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: RequestTimeTooSkewed Description: The difference between the request + // time and the server's time is too large. HTTP Status Code: 403 Forbidden + // SOAP Fault Code Prefix: Client + // + // * Code: RequestTorrentOfBucketError Description: Requesting the torrent + // file of a bucket is not permitted. HTTP Status Code: 400 Bad Request SOAP + // Fault Code Prefix: Client + // + // * Code: SignatureDoesNotMatch Description: The request signature we calculated + // does not match the signature you provided. Check your AWS secret access + // key and signing method. For more information, see REST Authentication + // (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) + // and SOAP Authentication (https://docs.aws.amazon.com/AmazonS3/latest/dev/SOAPAuthentication.html) + // for details. HTTP Status Code: 403 Forbidden SOAP Fault Code Prefix: Client + // + // * Code: ServiceUnavailable Description: Reduce your request rate. HTTP + // Status Code: 503 Service Unavailable SOAP Fault Code Prefix: Server + // + // * Code: SlowDown Description: Reduce your request rate. HTTP Status Code: + // 503 Slow Down SOAP Fault Code Prefix: Server + // + // * Code: TemporaryRedirect Description: You are being redirected to the + // bucket while DNS updates. HTTP Status Code: 307 Moved Temporarily SOAP + // Fault Code Prefix: Client + // + // * Code: TokenRefreshRequired Description: The provided token must be refreshed. + // HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: TooManyBuckets Description: You have attempted to create more + // buckets than allowed. HTTP Status Code: 400 Bad Request SOAP Fault Code + // Prefix: Client + // + // * Code: UnexpectedContent Description: This request does not support content. + // HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + // + // * Code: UnresolvableGrantByEmailAddress Description: The email address + // you provided does not match any account on record. HTTP Status Code: 400 + // Bad Request SOAP Fault Code Prefix: Client + // + // * Code: UserKeyMustBeSpecified Description: The bucket POST must contain + // the specified field name. If it is specified, check the order of the fields. + // HTTP Status Code: 400 Bad Request SOAP Fault Code Prefix: Client + Code *string `type:"string"` + + // The error key. + Key *string `min:"1" type:"string"` + + // The error message contains a generic description of the error condition in + // English. It is intended for a human audience. Simple programs display the + // message directly to the end user if they encounter an error condition they + // don't know how or don't care to handle. Sophisticated programs with more + // exhaustive error handling and proper internationalization are more likely + // to ignore the error message. + Message *string `type:"string"` + + // The version ID of the error. + VersionId *string `type:"string"` +} + +// String returns the string representation +func (s Error) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Error) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *Error) SetCode(v string) *Error { + s.Code = &v + return s +} + +// SetKey sets the Key field's value. +func (s *Error) SetKey(v string) *Error { + s.Key = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *Error) SetMessage(v string) *Error { + s.Message = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *Error) SetVersionId(v string) *Error { + s.VersionId = &v + return s +} + +// The error information. +type ErrorDocument struct { + _ struct{} `type:"structure"` + + // The object key name to use when a 4XX class error occurs. + // + // Key is a required field + Key *string `min:"1" type:"string" required:"true"` +} + +// String returns the string representation +func (s ErrorDocument) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ErrorDocument) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ErrorDocument) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ErrorDocument"} + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetKey sets the Key field's value. +func (s *ErrorDocument) SetKey(v string) *ErrorDocument { + s.Key = &v + return s +} + +// A container that specifies information about existing object replication. +// You can choose whether to enable or disable the replication of existing objects. +type ExistingObjectReplication struct { + _ struct{} `type:"structure"` + + // Specifies whether existing object replication is enabled. + // + // Status is a required field + Status *string `type:"string" required:"true" enum:"ExistingObjectReplicationStatus"` +} + +// String returns the string representation +func (s ExistingObjectReplication) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ExistingObjectReplication) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ExistingObjectReplication) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ExistingObjectReplication"} + if s.Status == nil { + invalidParams.Add(request.NewErrParamRequired("Status")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetStatus sets the Status field's value. +func (s *ExistingObjectReplication) SetStatus(v string) *ExistingObjectReplication { + s.Status = &v + return s +} + +// Specifies the Amazon S3 object key name to filter on and whether to filter +// on the suffix or prefix of the key name. +type FilterRule struct { + _ struct{} `type:"structure"` + + // The object key name prefix or suffix identifying one or more objects to which + // the filtering rule applies. The maximum length is 1,024 characters. Overlapping + // prefixes and suffixes are not supported. For more information, see Configuring + // Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) + // in the Amazon Simple Storage Service Developer Guide. + Name *string `type:"string" enum:"FilterRuleName"` + + // The value that the filter searches for in object key names. + Value *string `type:"string"` +} + +// String returns the string representation +func (s FilterRule) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s FilterRule) GoString() string { + return s.String() +} + +// SetName sets the Name field's value. +func (s *FilterRule) SetName(v string) *FilterRule { + s.Name = &v + return s +} + +// SetValue sets the Value field's value. +func (s *FilterRule) SetValue(v string) *FilterRule { + s.Value = &v + return s +} + +type GetBucketAccelerateConfigurationInput struct { + _ struct{} `locationName:"GetBucketAccelerateConfigurationRequest" type:"structure"` + + // Name of the bucket for which the accelerate configuration is retrieved. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketAccelerateConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketAccelerateConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketAccelerateConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketAccelerateConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketAccelerateConfigurationInput) SetBucket(v string) *GetBucketAccelerateConfigurationInput { + s.Bucket = &v + return s +} + +func (s *GetBucketAccelerateConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketAccelerateConfigurationOutput struct { + _ struct{} `type:"structure"` + + // The accelerate configuration of the bucket. + Status *string `type:"string" enum:"BucketAccelerateStatus"` +} + +// String returns the string representation +func (s GetBucketAccelerateConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketAccelerateConfigurationOutput) GoString() string { + return s.String() +} + +// SetStatus sets the Status field's value. +func (s *GetBucketAccelerateConfigurationOutput) SetStatus(v string) *GetBucketAccelerateConfigurationOutput { + s.Status = &v + return s +} + +type GetBucketAclInput struct { + _ struct{} `locationName:"GetBucketAclRequest" type:"structure"` + + // Specifies the S3 bucket whose ACL is being requested. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketAclInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketAclInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketAclInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketAclInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketAclInput) SetBucket(v string) *GetBucketAclInput { + s.Bucket = &v + return s +} + +func (s *GetBucketAclInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketAclOutput struct { + _ struct{} `type:"structure"` + + // A list of grants. + Grants []*Grant `locationName:"AccessControlList" locationNameList:"Grant" type:"list"` + + // Container for the bucket owner's display name and ID. + Owner *Owner `type:"structure"` +} + +// String returns the string representation +func (s GetBucketAclOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketAclOutput) GoString() string { + return s.String() +} + +// SetGrants sets the Grants field's value. +func (s *GetBucketAclOutput) SetGrants(v []*Grant) *GetBucketAclOutput { + s.Grants = v + return s +} + +// SetOwner sets the Owner field's value. +func (s *GetBucketAclOutput) SetOwner(v *Owner) *GetBucketAclOutput { + s.Owner = v + return s +} + +type GetBucketAnalyticsConfigurationInput struct { + _ struct{} `locationName:"GetBucketAnalyticsConfigurationRequest" type:"structure"` + + // The name of the bucket from which an analytics configuration is retrieved. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ID that identifies the analytics configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketAnalyticsConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketAnalyticsConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketAnalyticsConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketAnalyticsConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketAnalyticsConfigurationInput) SetBucket(v string) *GetBucketAnalyticsConfigurationInput { + s.Bucket = &v + return s +} + +func (s *GetBucketAnalyticsConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetId sets the Id field's value. +func (s *GetBucketAnalyticsConfigurationInput) SetId(v string) *GetBucketAnalyticsConfigurationInput { + s.Id = &v + return s +} + +type GetBucketAnalyticsConfigurationOutput struct { + _ struct{} `type:"structure" payload:"AnalyticsConfiguration"` + + // The configuration and any analyses for the analytics filter. + AnalyticsConfiguration *AnalyticsConfiguration `type:"structure"` +} + +// String returns the string representation +func (s GetBucketAnalyticsConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketAnalyticsConfigurationOutput) GoString() string { + return s.String() +} + +// SetAnalyticsConfiguration sets the AnalyticsConfiguration field's value. +func (s *GetBucketAnalyticsConfigurationOutput) SetAnalyticsConfiguration(v *AnalyticsConfiguration) *GetBucketAnalyticsConfigurationOutput { + s.AnalyticsConfiguration = v + return s +} + +type GetBucketCorsInput struct { + _ struct{} `locationName:"GetBucketCorsRequest" type:"structure"` + + // The bucket name for which to get the cors configuration. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketCorsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketCorsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketCorsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketCorsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketCorsInput) SetBucket(v string) *GetBucketCorsInput { + s.Bucket = &v + return s +} + +func (s *GetBucketCorsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketCorsOutput struct { + _ struct{} `type:"structure"` + + // A set of origins and methods (cross-origin access that you want to allow). + // You can add up to 100 rules to the configuration. + CORSRules []*CORSRule `locationName:"CORSRule" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s GetBucketCorsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketCorsOutput) GoString() string { + return s.String() +} + +// SetCORSRules sets the CORSRules field's value. +func (s *GetBucketCorsOutput) SetCORSRules(v []*CORSRule) *GetBucketCorsOutput { + s.CORSRules = v + return s +} + +type GetBucketEncryptionInput struct { + _ struct{} `locationName:"GetBucketEncryptionRequest" type:"structure"` + + // The name of the bucket from which the server-side encryption configuration + // is retrieved. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketEncryptionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketEncryptionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketEncryptionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketEncryptionInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketEncryptionInput) SetBucket(v string) *GetBucketEncryptionInput { + s.Bucket = &v + return s +} + +func (s *GetBucketEncryptionInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketEncryptionOutput struct { + _ struct{} `type:"structure" payload:"ServerSideEncryptionConfiguration"` + + // Specifies the default server-side-encryption configuration. + ServerSideEncryptionConfiguration *ServerSideEncryptionConfiguration `type:"structure"` +} + +// String returns the string representation +func (s GetBucketEncryptionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketEncryptionOutput) GoString() string { + return s.String() +} + +// SetServerSideEncryptionConfiguration sets the ServerSideEncryptionConfiguration field's value. +func (s *GetBucketEncryptionOutput) SetServerSideEncryptionConfiguration(v *ServerSideEncryptionConfiguration) *GetBucketEncryptionOutput { + s.ServerSideEncryptionConfiguration = v + return s +} + +type GetBucketInventoryConfigurationInput struct { + _ struct{} `locationName:"GetBucketInventoryConfigurationRequest" type:"structure"` + + // The name of the bucket containing the inventory configuration to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ID used to identify the inventory configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketInventoryConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketInventoryConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketInventoryConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketInventoryConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketInventoryConfigurationInput) SetBucket(v string) *GetBucketInventoryConfigurationInput { + s.Bucket = &v + return s +} + +func (s *GetBucketInventoryConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetId sets the Id field's value. +func (s *GetBucketInventoryConfigurationInput) SetId(v string) *GetBucketInventoryConfigurationInput { + s.Id = &v + return s +} + +type GetBucketInventoryConfigurationOutput struct { + _ struct{} `type:"structure" payload:"InventoryConfiguration"` + + // Specifies the inventory configuration. + InventoryConfiguration *InventoryConfiguration `type:"structure"` +} + +// String returns the string representation +func (s GetBucketInventoryConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketInventoryConfigurationOutput) GoString() string { + return s.String() +} + +// SetInventoryConfiguration sets the InventoryConfiguration field's value. +func (s *GetBucketInventoryConfigurationOutput) SetInventoryConfiguration(v *InventoryConfiguration) *GetBucketInventoryConfigurationOutput { + s.InventoryConfiguration = v + return s +} + +type GetBucketLifecycleConfigurationInput struct { + _ struct{} `locationName:"GetBucketLifecycleConfigurationRequest" type:"structure"` + + // The name of the bucket for which to the the lifecycle information. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketLifecycleConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketLifecycleConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketLifecycleConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketLifecycleConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketLifecycleConfigurationInput) SetBucket(v string) *GetBucketLifecycleConfigurationInput { + s.Bucket = &v + return s +} + +func (s *GetBucketLifecycleConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketLifecycleConfigurationOutput struct { + _ struct{} `type:"structure"` + + // Container for a lifecycle rule. + Rules []*LifecycleRule `locationName:"Rule" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s GetBucketLifecycleConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketLifecycleConfigurationOutput) GoString() string { + return s.String() +} + +// SetRules sets the Rules field's value. +func (s *GetBucketLifecycleConfigurationOutput) SetRules(v []*LifecycleRule) *GetBucketLifecycleConfigurationOutput { + s.Rules = v + return s +} + +type GetBucketLifecycleInput struct { + _ struct{} `locationName:"GetBucketLifecycleRequest" type:"structure"` + + // The name of the bucket for which to the the lifecycle information. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketLifecycleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketLifecycleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketLifecycleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketLifecycleInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketLifecycleInput) SetBucket(v string) *GetBucketLifecycleInput { + s.Bucket = &v + return s +} + +func (s *GetBucketLifecycleInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketLifecycleOutput struct { + _ struct{} `type:"structure"` + + // Container for a lifecycle rule. + Rules []*Rule `locationName:"Rule" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s GetBucketLifecycleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketLifecycleOutput) GoString() string { + return s.String() +} + +// SetRules sets the Rules field's value. +func (s *GetBucketLifecycleOutput) SetRules(v []*Rule) *GetBucketLifecycleOutput { + s.Rules = v + return s +} + +type GetBucketLocationInput struct { + _ struct{} `locationName:"GetBucketLocationRequest" type:"structure"` + + // The name of the bucket for which to get the location. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketLocationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketLocationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketLocationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketLocationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketLocationInput) SetBucket(v string) *GetBucketLocationInput { + s.Bucket = &v + return s +} + +func (s *GetBucketLocationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketLocationOutput struct { + _ struct{} `type:"structure"` + + // Specifies the region where the bucket resides. For a list of all the Amazon + // S3 supported location constraints by region, see Regions and Endpoints (https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region). + LocationConstraint *string `type:"string" enum:"BucketLocationConstraint"` +} + +// String returns the string representation +func (s GetBucketLocationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketLocationOutput) GoString() string { + return s.String() +} + +// SetLocationConstraint sets the LocationConstraint field's value. +func (s *GetBucketLocationOutput) SetLocationConstraint(v string) *GetBucketLocationOutput { + s.LocationConstraint = &v + return s +} + +type GetBucketLoggingInput struct { + _ struct{} `locationName:"GetBucketLoggingRequest" type:"structure"` + + // The bucket name for which to get the logging information. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketLoggingInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketLoggingInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketLoggingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketLoggingInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketLoggingInput) SetBucket(v string) *GetBucketLoggingInput { + s.Bucket = &v + return s +} + +func (s *GetBucketLoggingInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketLoggingOutput struct { + _ struct{} `type:"structure"` + + // Describes where logs are stored and the prefix that Amazon S3 assigns to + // all log object keys for a bucket. For more information, see PUT Bucket logging + // (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html) + // in the Amazon Simple Storage Service API Reference. + LoggingEnabled *LoggingEnabled `type:"structure"` +} + +// String returns the string representation +func (s GetBucketLoggingOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketLoggingOutput) GoString() string { + return s.String() +} + +// SetLoggingEnabled sets the LoggingEnabled field's value. +func (s *GetBucketLoggingOutput) SetLoggingEnabled(v *LoggingEnabled) *GetBucketLoggingOutput { + s.LoggingEnabled = v + return s +} + +type GetBucketMetricsConfigurationInput struct { + _ struct{} `locationName:"GetBucketMetricsConfigurationRequest" type:"structure"` + + // The name of the bucket containing the metrics configuration to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ID used to identify the metrics configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketMetricsConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketMetricsConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketMetricsConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketMetricsConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketMetricsConfigurationInput) SetBucket(v string) *GetBucketMetricsConfigurationInput { + s.Bucket = &v + return s +} + +func (s *GetBucketMetricsConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetId sets the Id field's value. +func (s *GetBucketMetricsConfigurationInput) SetId(v string) *GetBucketMetricsConfigurationInput { + s.Id = &v + return s +} + +type GetBucketMetricsConfigurationOutput struct { + _ struct{} `type:"structure" payload:"MetricsConfiguration"` + + // Specifies the metrics configuration. + MetricsConfiguration *MetricsConfiguration `type:"structure"` +} + +// String returns the string representation +func (s GetBucketMetricsConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketMetricsConfigurationOutput) GoString() string { + return s.String() +} + +// SetMetricsConfiguration sets the MetricsConfiguration field's value. +func (s *GetBucketMetricsConfigurationOutput) SetMetricsConfiguration(v *MetricsConfiguration) *GetBucketMetricsConfigurationOutput { + s.MetricsConfiguration = v + return s +} + +type GetBucketNotificationConfigurationRequest struct { + _ struct{} `locationName:"GetBucketNotificationConfigurationRequest" type:"structure"` + + // Name of the bucket for which to get the notification configuration + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketNotificationConfigurationRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketNotificationConfigurationRequest) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketNotificationConfigurationRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketNotificationConfigurationRequest"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketNotificationConfigurationRequest) SetBucket(v string) *GetBucketNotificationConfigurationRequest { + s.Bucket = &v + return s +} + +func (s *GetBucketNotificationConfigurationRequest) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketPolicyInput struct { + _ struct{} `locationName:"GetBucketPolicyRequest" type:"structure"` + + // The bucket name for which to get the bucket policy. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketPolicyInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketPolicyInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketPolicyInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketPolicyInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketPolicyInput) SetBucket(v string) *GetBucketPolicyInput { + s.Bucket = &v + return s +} + +func (s *GetBucketPolicyInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketPolicyOutput struct { + _ struct{} `type:"structure" payload:"Policy"` + + // The bucket policy as a JSON document. + Policy *string `type:"string"` +} + +// String returns the string representation +func (s GetBucketPolicyOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketPolicyOutput) GoString() string { + return s.String() +} + +// SetPolicy sets the Policy field's value. +func (s *GetBucketPolicyOutput) SetPolicy(v string) *GetBucketPolicyOutput { + s.Policy = &v + return s +} + +type GetBucketPolicyStatusInput struct { + _ struct{} `locationName:"GetBucketPolicyStatusRequest" type:"structure"` + + // The name of the Amazon S3 bucket whose policy status you want to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketPolicyStatusInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketPolicyStatusInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketPolicyStatusInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketPolicyStatusInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketPolicyStatusInput) SetBucket(v string) *GetBucketPolicyStatusInput { + s.Bucket = &v + return s +} + +func (s *GetBucketPolicyStatusInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketPolicyStatusOutput struct { + _ struct{} `type:"structure" payload:"PolicyStatus"` + + // The policy status for the specified bucket. + PolicyStatus *PolicyStatus `type:"structure"` +} + +// String returns the string representation +func (s GetBucketPolicyStatusOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketPolicyStatusOutput) GoString() string { + return s.String() +} + +// SetPolicyStatus sets the PolicyStatus field's value. +func (s *GetBucketPolicyStatusOutput) SetPolicyStatus(v *PolicyStatus) *GetBucketPolicyStatusOutput { + s.PolicyStatus = v + return s +} + +type GetBucketReplicationInput struct { + _ struct{} `locationName:"GetBucketReplicationRequest" type:"structure"` + + // The bucket name for which to get the replication information. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketReplicationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketReplicationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketReplicationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketReplicationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketReplicationInput) SetBucket(v string) *GetBucketReplicationInput { + s.Bucket = &v + return s +} + +func (s *GetBucketReplicationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketReplicationOutput struct { + _ struct{} `type:"structure" payload:"ReplicationConfiguration"` + + // A container for replication rules. You can add up to 1,000 rules. The maximum + // size of a replication configuration is 2 MB. + ReplicationConfiguration *ReplicationConfiguration `type:"structure"` +} + +// String returns the string representation +func (s GetBucketReplicationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketReplicationOutput) GoString() string { + return s.String() +} + +// SetReplicationConfiguration sets the ReplicationConfiguration field's value. +func (s *GetBucketReplicationOutput) SetReplicationConfiguration(v *ReplicationConfiguration) *GetBucketReplicationOutput { + s.ReplicationConfiguration = v + return s +} + +type GetBucketRequestPaymentInput struct { + _ struct{} `locationName:"GetBucketRequestPaymentRequest" type:"structure"` + + // The name of the bucket for which to get the payment request configuration + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketRequestPaymentInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketRequestPaymentInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketRequestPaymentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketRequestPaymentInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketRequestPaymentInput) SetBucket(v string) *GetBucketRequestPaymentInput { + s.Bucket = &v + return s +} + +func (s *GetBucketRequestPaymentInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketRequestPaymentOutput struct { + _ struct{} `type:"structure"` + + // Specifies who pays for the download and request fees. + Payer *string `type:"string" enum:"Payer"` +} + +// String returns the string representation +func (s GetBucketRequestPaymentOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketRequestPaymentOutput) GoString() string { + return s.String() +} + +// SetPayer sets the Payer field's value. +func (s *GetBucketRequestPaymentOutput) SetPayer(v string) *GetBucketRequestPaymentOutput { + s.Payer = &v + return s +} + +type GetBucketTaggingInput struct { + _ struct{} `locationName:"GetBucketTaggingRequest" type:"structure"` + + // The name of the bucket for which to get the tagging information. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketTaggingInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketTaggingInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketTaggingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketTaggingInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketTaggingInput) SetBucket(v string) *GetBucketTaggingInput { + s.Bucket = &v + return s +} + +func (s *GetBucketTaggingInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketTaggingOutput struct { + _ struct{} `type:"structure"` + + // Contains the tag set. + // + // TagSet is a required field + TagSet []*Tag `locationNameList:"Tag" type:"list" required:"true"` +} + +// String returns the string representation +func (s GetBucketTaggingOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketTaggingOutput) GoString() string { + return s.String() +} + +// SetTagSet sets the TagSet field's value. +func (s *GetBucketTaggingOutput) SetTagSet(v []*Tag) *GetBucketTaggingOutput { + s.TagSet = v + return s +} + +type GetBucketVersioningInput struct { + _ struct{} `locationName:"GetBucketVersioningRequest" type:"structure"` + + // The name of the bucket for which to get the versioning information. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketVersioningInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketVersioningInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketVersioningInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketVersioningInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketVersioningInput) SetBucket(v string) *GetBucketVersioningInput { + s.Bucket = &v + return s +} + +func (s *GetBucketVersioningInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketVersioningOutput struct { + _ struct{} `type:"structure"` + + // Specifies whether MFA delete is enabled in the bucket versioning configuration. + // This element is only returned if the bucket has been configured with MFA + // delete. If the bucket has never been so configured, this element is not returned. + MFADelete *string `locationName:"MfaDelete" type:"string" enum:"MFADeleteStatus"` + + // The versioning state of the bucket. + Status *string `type:"string" enum:"BucketVersioningStatus"` +} + +// String returns the string representation +func (s GetBucketVersioningOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketVersioningOutput) GoString() string { + return s.String() +} + +// SetMFADelete sets the MFADelete field's value. +func (s *GetBucketVersioningOutput) SetMFADelete(v string) *GetBucketVersioningOutput { + s.MFADelete = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *GetBucketVersioningOutput) SetStatus(v string) *GetBucketVersioningOutput { + s.Status = &v + return s +} + +type GetBucketWebsiteInput struct { + _ struct{} `locationName:"GetBucketWebsiteRequest" type:"structure"` + + // The bucket name for which to get the website configuration. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetBucketWebsiteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketWebsiteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetBucketWebsiteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetBucketWebsiteInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetBucketWebsiteInput) SetBucket(v string) *GetBucketWebsiteInput { + s.Bucket = &v + return s +} + +func (s *GetBucketWebsiteInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetBucketWebsiteOutput struct { + _ struct{} `type:"structure"` + + // The name of the error document for the website. + ErrorDocument *ErrorDocument `type:"structure"` + + // The name of the index document for the website. + IndexDocument *IndexDocument `type:"structure"` + + // Specifies the redirect behavior of all requests to a website endpoint of + // an Amazon S3 bucket. + RedirectAllRequestsTo *RedirectAllRequestsTo `type:"structure"` + + // Rules that define when a redirect is applied and the redirect behavior. + RoutingRules []*RoutingRule `locationNameList:"RoutingRule" type:"list"` +} + +// String returns the string representation +func (s GetBucketWebsiteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetBucketWebsiteOutput) GoString() string { + return s.String() +} + +// SetErrorDocument sets the ErrorDocument field's value. +func (s *GetBucketWebsiteOutput) SetErrorDocument(v *ErrorDocument) *GetBucketWebsiteOutput { + s.ErrorDocument = v + return s +} + +// SetIndexDocument sets the IndexDocument field's value. +func (s *GetBucketWebsiteOutput) SetIndexDocument(v *IndexDocument) *GetBucketWebsiteOutput { + s.IndexDocument = v + return s +} + +// SetRedirectAllRequestsTo sets the RedirectAllRequestsTo field's value. +func (s *GetBucketWebsiteOutput) SetRedirectAllRequestsTo(v *RedirectAllRequestsTo) *GetBucketWebsiteOutput { + s.RedirectAllRequestsTo = v + return s +} + +// SetRoutingRules sets the RoutingRules field's value. +func (s *GetBucketWebsiteOutput) SetRoutingRules(v []*RoutingRule) *GetBucketWebsiteOutput { + s.RoutingRules = v + return s +} + +type GetObjectAclInput struct { + _ struct{} `locationName:"GetObjectAclRequest" type:"structure"` + + // The bucket name of the object for which to get the ACL information. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The key of the object for which to get the ACL information. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // VersionId used to reference a specific version of the object. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +} + +// String returns the string representation +func (s GetObjectAclInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectAclInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetObjectAclInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetObjectAclInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetObjectAclInput) SetBucket(v string) *GetObjectAclInput { + s.Bucket = &v + return s +} + +func (s *GetObjectAclInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *GetObjectAclInput) SetKey(v string) *GetObjectAclInput { + s.Key = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *GetObjectAclInput) SetRequestPayer(v string) *GetObjectAclInput { + s.RequestPayer = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *GetObjectAclInput) SetVersionId(v string) *GetObjectAclInput { + s.VersionId = &v + return s +} + +type GetObjectAclOutput struct { + _ struct{} `type:"structure"` + + // A list of grants. + Grants []*Grant `locationName:"AccessControlList" locationNameList:"Grant" type:"list"` + + // Container for the bucket owner's display name and ID. + Owner *Owner `type:"structure"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +} + +// String returns the string representation +func (s GetObjectAclOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectAclOutput) GoString() string { + return s.String() +} + +// SetGrants sets the Grants field's value. +func (s *GetObjectAclOutput) SetGrants(v []*Grant) *GetObjectAclOutput { + s.Grants = v + return s +} + +// SetOwner sets the Owner field's value. +func (s *GetObjectAclOutput) SetOwner(v *Owner) *GetObjectAclOutput { + s.Owner = v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *GetObjectAclOutput) SetRequestCharged(v string) *GetObjectAclOutput { + s.RequestCharged = &v + return s +} + +type GetObjectInput struct { + _ struct{} `locationName:"GetObjectRequest" type:"structure"` + + // The bucket name containing the object. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Return the object only if its entity tag (ETag) is the same as the one specified, + // otherwise return a 412 (precondition failed). + IfMatch *string `location:"header" locationName:"If-Match" type:"string"` + + // Return the object only if it has been modified since the specified time, + // otherwise return a 304 (not modified). + IfModifiedSince *time.Time `location:"header" locationName:"If-Modified-Since" type:"timestamp"` + + // Return the object only if its entity tag (ETag) is different from the one + // specified, otherwise return a 304 (not modified). + IfNoneMatch *string `location:"header" locationName:"If-None-Match" type:"string"` + + // Return the object only if it has not been modified since the specified time, + // otherwise return a 412 (precondition failed). + IfUnmodifiedSince *time.Time `location:"header" locationName:"If-Unmodified-Since" type:"timestamp"` + + // Key of the object to get. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Part number of the object being read. This is a positive integer between + // 1 and 10,000. Effectively performs a 'ranged' GET request for the part specified. + // Useful for downloading just a part of an object. + PartNumber *int64 `location:"querystring" locationName:"partNumber" type:"integer"` + + // Downloads the specified range bytes of an object. For more information about + // the HTTP Range header, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35. + Range *string `location:"header" locationName:"Range" type:"string"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // Sets the Cache-Control header of the response. + ResponseCacheControl *string `location:"querystring" locationName:"response-cache-control" type:"string"` + + // Sets the Content-Disposition header of the response + ResponseContentDisposition *string `location:"querystring" locationName:"response-content-disposition" type:"string"` + + // Sets the Content-Encoding header of the response. + ResponseContentEncoding *string `location:"querystring" locationName:"response-content-encoding" type:"string"` + + // Sets the Content-Language header of the response. + ResponseContentLanguage *string `location:"querystring" locationName:"response-content-language" type:"string"` + + // Sets the Content-Type header of the response. + ResponseContentType *string `location:"querystring" locationName:"response-content-type" type:"string"` + + // Sets the Expires header of the response. + ResponseExpires *time.Time `location:"querystring" locationName:"response-expires" type:"timestamp"` + + // Specifies the algorithm to use to when encrypting the object (e.g., AES256). + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting + // data. This value is used to store the object and then it is discarded; Amazon + // does not store the encryption key. The key must be appropriate for use with + // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm + // header. + SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"` + + // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. + // Amazon S3 uses this header for a message integrity check to ensure the encryption + // key was transmitted without error. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // VersionId used to reference a specific version of the object. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +} + +// String returns the string representation +func (s GetObjectInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetObjectInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetObjectInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetObjectInput) SetBucket(v string) *GetObjectInput { + s.Bucket = &v + return s +} + +func (s *GetObjectInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetIfMatch sets the IfMatch field's value. +func (s *GetObjectInput) SetIfMatch(v string) *GetObjectInput { + s.IfMatch = &v + return s +} + +// SetIfModifiedSince sets the IfModifiedSince field's value. +func (s *GetObjectInput) SetIfModifiedSince(v time.Time) *GetObjectInput { + s.IfModifiedSince = &v + return s +} + +// SetIfNoneMatch sets the IfNoneMatch field's value. +func (s *GetObjectInput) SetIfNoneMatch(v string) *GetObjectInput { + s.IfNoneMatch = &v + return s +} + +// SetIfUnmodifiedSince sets the IfUnmodifiedSince field's value. +func (s *GetObjectInput) SetIfUnmodifiedSince(v time.Time) *GetObjectInput { + s.IfUnmodifiedSince = &v + return s +} + +// SetKey sets the Key field's value. +func (s *GetObjectInput) SetKey(v string) *GetObjectInput { + s.Key = &v + return s +} + +// SetPartNumber sets the PartNumber field's value. +func (s *GetObjectInput) SetPartNumber(v int64) *GetObjectInput { + s.PartNumber = &v + return s +} + +// SetRange sets the Range field's value. +func (s *GetObjectInput) SetRange(v string) *GetObjectInput { + s.Range = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *GetObjectInput) SetRequestPayer(v string) *GetObjectInput { + s.RequestPayer = &v + return s +} + +// SetResponseCacheControl sets the ResponseCacheControl field's value. +func (s *GetObjectInput) SetResponseCacheControl(v string) *GetObjectInput { + s.ResponseCacheControl = &v + return s +} + +// SetResponseContentDisposition sets the ResponseContentDisposition field's value. +func (s *GetObjectInput) SetResponseContentDisposition(v string) *GetObjectInput { + s.ResponseContentDisposition = &v + return s +} + +// SetResponseContentEncoding sets the ResponseContentEncoding field's value. +func (s *GetObjectInput) SetResponseContentEncoding(v string) *GetObjectInput { + s.ResponseContentEncoding = &v + return s +} + +// SetResponseContentLanguage sets the ResponseContentLanguage field's value. +func (s *GetObjectInput) SetResponseContentLanguage(v string) *GetObjectInput { + s.ResponseContentLanguage = &v + return s +} + +// SetResponseContentType sets the ResponseContentType field's value. +func (s *GetObjectInput) SetResponseContentType(v string) *GetObjectInput { + s.ResponseContentType = &v + return s +} + +// SetResponseExpires sets the ResponseExpires field's value. +func (s *GetObjectInput) SetResponseExpires(v time.Time) *GetObjectInput { + s.ResponseExpires = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *GetObjectInput) SetSSECustomerAlgorithm(v string) *GetObjectInput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKey sets the SSECustomerKey field's value. +func (s *GetObjectInput) SetSSECustomerKey(v string) *GetObjectInput { + s.SSECustomerKey = &v + return s +} + +func (s *GetObjectInput) getSSECustomerKey() (v string) { + if s.SSECustomerKey == nil { + return v + } + return *s.SSECustomerKey +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *GetObjectInput) SetSSECustomerKeyMD5(v string) *GetObjectInput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *GetObjectInput) SetVersionId(v string) *GetObjectInput { + s.VersionId = &v + return s +} + +type GetObjectLegalHoldInput struct { + _ struct{} `locationName:"GetObjectLegalHoldRequest" type:"structure"` + + // The bucket containing the object whose Legal Hold status you want to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The key name for the object whose Legal Hold status you want to retrieve. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // The version ID of the object whose Legal Hold status you want to retrieve. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +} + +// String returns the string representation +func (s GetObjectLegalHoldInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectLegalHoldInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetObjectLegalHoldInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetObjectLegalHoldInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetObjectLegalHoldInput) SetBucket(v string) *GetObjectLegalHoldInput { + s.Bucket = &v + return s +} + +func (s *GetObjectLegalHoldInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *GetObjectLegalHoldInput) SetKey(v string) *GetObjectLegalHoldInput { + s.Key = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *GetObjectLegalHoldInput) SetRequestPayer(v string) *GetObjectLegalHoldInput { + s.RequestPayer = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *GetObjectLegalHoldInput) SetVersionId(v string) *GetObjectLegalHoldInput { + s.VersionId = &v + return s +} + +type GetObjectLegalHoldOutput struct { + _ struct{} `type:"structure" payload:"LegalHold"` + + // The current Legal Hold status for the specified object. + LegalHold *ObjectLockLegalHold `type:"structure"` +} + +// String returns the string representation +func (s GetObjectLegalHoldOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectLegalHoldOutput) GoString() string { + return s.String() +} + +// SetLegalHold sets the LegalHold field's value. +func (s *GetObjectLegalHoldOutput) SetLegalHold(v *ObjectLockLegalHold) *GetObjectLegalHoldOutput { + s.LegalHold = v + return s +} + +type GetObjectLockConfigurationInput struct { + _ struct{} `locationName:"GetObjectLockConfigurationRequest" type:"structure"` + + // The bucket whose Object Lock configuration you want to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetObjectLockConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectLockConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetObjectLockConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetObjectLockConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetObjectLockConfigurationInput) SetBucket(v string) *GetObjectLockConfigurationInput { + s.Bucket = &v + return s +} + +func (s *GetObjectLockConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetObjectLockConfigurationOutput struct { + _ struct{} `type:"structure" payload:"ObjectLockConfiguration"` + + // The specified bucket's Object Lock configuration. + ObjectLockConfiguration *ObjectLockConfiguration `type:"structure"` +} + +// String returns the string representation +func (s GetObjectLockConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectLockConfigurationOutput) GoString() string { + return s.String() +} + +// SetObjectLockConfiguration sets the ObjectLockConfiguration field's value. +func (s *GetObjectLockConfigurationOutput) SetObjectLockConfiguration(v *ObjectLockConfiguration) *GetObjectLockConfigurationOutput { + s.ObjectLockConfiguration = v + return s +} + +type GetObjectOutput struct { + _ struct{} `type:"structure" payload:"Body"` + + // Indicates that a range of bytes was specifed. + AcceptRanges *string `location:"header" locationName:"accept-ranges" type:"string"` + + // Object data. + Body io.ReadCloser `type:"blob"` + + // Specifies caching behavior along the request/reply chain. + CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` + + // Specifies presentational information for the object. + ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` + + // Specifies what content encodings have been applied to the object and thus + // what decoding mechanisms must be applied to obtain the media-type referenced + // by the Content-Type header field. + ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` + + // The language the content is in. + ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` + + // Size of the body in bytes. + ContentLength *int64 `location:"header" locationName:"Content-Length" type:"long"` + + // The portion of the object returned in the response. + ContentRange *string `location:"header" locationName:"Content-Range" type:"string"` + + // A standard MIME type describing the format of the object data. + ContentType *string `location:"header" locationName:"Content-Type" type:"string"` + + // Specifies whether the object retrieved was (true) or was not (false) a Delete + // Marker. If false, this response header does not appear in the response. + DeleteMarker *bool `location:"header" locationName:"x-amz-delete-marker" type:"boolean"` + + // An ETag is an opaque identifier assigned by a web server to a specific version + // of a resource found at a URL + ETag *string `location:"header" locationName:"ETag" type:"string"` + + // If the object expiration is configured (see PUT Bucket lifecycle), the response + // includes this header. It includes the expiry-date and rule-id key value pairs + // providing object expiration information. The value of the rule-id is URL + // encoded. + Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` + + // The date and time at which the object is no longer cacheable. + Expires *string `location:"header" locationName:"Expires" type:"string"` + + // Last modified date of the object + LastModified *time.Time `location:"header" locationName:"Last-Modified" type:"timestamp"` + + // A map of metadata to store with the object in S3. + Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` + + // This is set to the number of metadata entries not returned in x-amz-meta + // headers. This can happen if you create metadata using an API like SOAP that + // supports more flexible metadata than the REST API. For example, using SOAP, + // you can create metadata whose values are not legal HTTP headers. + MissingMeta *int64 `location:"header" locationName:"x-amz-missing-meta" type:"integer"` + + // Indicates whether this object has an active legal hold. This field is only + // returned if you have permission to view an object's legal hold status. + ObjectLockLegalHoldStatus *string `location:"header" locationName:"x-amz-object-lock-legal-hold" type:"string" enum:"ObjectLockLegalHoldStatus"` + + // The Object Lock mode currently in place for this object. + ObjectLockMode *string `location:"header" locationName:"x-amz-object-lock-mode" type:"string" enum:"ObjectLockMode"` + + // The date and time when this object's Object Lock will expire. + ObjectLockRetainUntilDate *time.Time `location:"header" locationName:"x-amz-object-lock-retain-until-date" type:"timestamp" timestampFormat:"iso8601"` + + // The count of parts this object has. + PartsCount *int64 `location:"header" locationName:"x-amz-mp-parts-count" type:"integer"` + + // Amazon S3 can return this if your request involves a bucket that is either + // a source or destination in a replication rule. + ReplicationStatus *string `location:"header" locationName:"x-amz-replication-status" type:"string" enum:"ReplicationStatus"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + + // Provides information about object restoration operation and expiration time + // of the restored object copy. + Restore *string `location:"header" locationName:"x-amz-restore" type:"string"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header confirming the encryption algorithm + // used. + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header to provide round trip message integrity + // verification of the customer-provided encryption key. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // If present, specifies the ID of the AWS Key Management Service (KMS) customer + // master key (CMK) that was used for the object. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` + + // The Server-side encryption algorithm used when storing this object in S3 + // (e.g., AES256, aws:kms). + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + + // Provides storage class information of the object. Amazon S3 returns this + // header for all objects except for Standard storage class objects. + StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` + + // The number of tags, if any, on the object. + TagCount *int64 `location:"header" locationName:"x-amz-tagging-count" type:"integer"` + + // Version of the object. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` + + // If the bucket is configured as a website, redirects requests for this object + // to another object in the same bucket or to an external URL. Amazon S3 stores + // the value of this header in the object metadata. + WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` +} + +// String returns the string representation +func (s GetObjectOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectOutput) GoString() string { + return s.String() +} + +// SetAcceptRanges sets the AcceptRanges field's value. +func (s *GetObjectOutput) SetAcceptRanges(v string) *GetObjectOutput { + s.AcceptRanges = &v + return s +} + +// SetBody sets the Body field's value. +func (s *GetObjectOutput) SetBody(v io.ReadCloser) *GetObjectOutput { + s.Body = v + return s +} + +// SetCacheControl sets the CacheControl field's value. +func (s *GetObjectOutput) SetCacheControl(v string) *GetObjectOutput { + s.CacheControl = &v + return s +} + +// SetContentDisposition sets the ContentDisposition field's value. +func (s *GetObjectOutput) SetContentDisposition(v string) *GetObjectOutput { + s.ContentDisposition = &v + return s +} + +// SetContentEncoding sets the ContentEncoding field's value. +func (s *GetObjectOutput) SetContentEncoding(v string) *GetObjectOutput { + s.ContentEncoding = &v + return s +} + +// SetContentLanguage sets the ContentLanguage field's value. +func (s *GetObjectOutput) SetContentLanguage(v string) *GetObjectOutput { + s.ContentLanguage = &v + return s +} + +// SetContentLength sets the ContentLength field's value. +func (s *GetObjectOutput) SetContentLength(v int64) *GetObjectOutput { + s.ContentLength = &v + return s +} + +// SetContentRange sets the ContentRange field's value. +func (s *GetObjectOutput) SetContentRange(v string) *GetObjectOutput { + s.ContentRange = &v + return s +} + +// SetContentType sets the ContentType field's value. +func (s *GetObjectOutput) SetContentType(v string) *GetObjectOutput { + s.ContentType = &v + return s +} + +// SetDeleteMarker sets the DeleteMarker field's value. +func (s *GetObjectOutput) SetDeleteMarker(v bool) *GetObjectOutput { + s.DeleteMarker = &v + return s +} + +// SetETag sets the ETag field's value. +func (s *GetObjectOutput) SetETag(v string) *GetObjectOutput { + s.ETag = &v + return s +} + +// SetExpiration sets the Expiration field's value. +func (s *GetObjectOutput) SetExpiration(v string) *GetObjectOutput { + s.Expiration = &v + return s +} + +// SetExpires sets the Expires field's value. +func (s *GetObjectOutput) SetExpires(v string) *GetObjectOutput { + s.Expires = &v + return s +} + +// SetLastModified sets the LastModified field's value. +func (s *GetObjectOutput) SetLastModified(v time.Time) *GetObjectOutput { + s.LastModified = &v + return s +} + +// SetMetadata sets the Metadata field's value. +func (s *GetObjectOutput) SetMetadata(v map[string]*string) *GetObjectOutput { + s.Metadata = v + return s +} + +// SetMissingMeta sets the MissingMeta field's value. +func (s *GetObjectOutput) SetMissingMeta(v int64) *GetObjectOutput { + s.MissingMeta = &v + return s +} + +// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value. +func (s *GetObjectOutput) SetObjectLockLegalHoldStatus(v string) *GetObjectOutput { + s.ObjectLockLegalHoldStatus = &v + return s +} + +// SetObjectLockMode sets the ObjectLockMode field's value. +func (s *GetObjectOutput) SetObjectLockMode(v string) *GetObjectOutput { + s.ObjectLockMode = &v + return s +} + +// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value. +func (s *GetObjectOutput) SetObjectLockRetainUntilDate(v time.Time) *GetObjectOutput { + s.ObjectLockRetainUntilDate = &v + return s +} + +// SetPartsCount sets the PartsCount field's value. +func (s *GetObjectOutput) SetPartsCount(v int64) *GetObjectOutput { + s.PartsCount = &v + return s +} + +// SetReplicationStatus sets the ReplicationStatus field's value. +func (s *GetObjectOutput) SetReplicationStatus(v string) *GetObjectOutput { + s.ReplicationStatus = &v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *GetObjectOutput) SetRequestCharged(v string) *GetObjectOutput { + s.RequestCharged = &v + return s +} + +// SetRestore sets the Restore field's value. +func (s *GetObjectOutput) SetRestore(v string) *GetObjectOutput { + s.Restore = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *GetObjectOutput) SetSSECustomerAlgorithm(v string) *GetObjectOutput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *GetObjectOutput) SetSSECustomerKeyMD5(v string) *GetObjectOutput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *GetObjectOutput) SetSSEKMSKeyId(v string) *GetObjectOutput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *GetObjectOutput) SetServerSideEncryption(v string) *GetObjectOutput { + s.ServerSideEncryption = &v + return s +} + +// SetStorageClass sets the StorageClass field's value. +func (s *GetObjectOutput) SetStorageClass(v string) *GetObjectOutput { + s.StorageClass = &v + return s +} + +// SetTagCount sets the TagCount field's value. +func (s *GetObjectOutput) SetTagCount(v int64) *GetObjectOutput { + s.TagCount = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *GetObjectOutput) SetVersionId(v string) *GetObjectOutput { + s.VersionId = &v + return s +} + +// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value. +func (s *GetObjectOutput) SetWebsiteRedirectLocation(v string) *GetObjectOutput { + s.WebsiteRedirectLocation = &v + return s +} + +type GetObjectRetentionInput struct { + _ struct{} `locationName:"GetObjectRetentionRequest" type:"structure"` + + // The bucket containing the object whose retention settings you want to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The key name for the object whose retention settings you want to retrieve. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // The version ID for the object whose retention settings you want to retrieve. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +} + +// String returns the string representation +func (s GetObjectRetentionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectRetentionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetObjectRetentionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetObjectRetentionInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetObjectRetentionInput) SetBucket(v string) *GetObjectRetentionInput { + s.Bucket = &v + return s +} + +func (s *GetObjectRetentionInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *GetObjectRetentionInput) SetKey(v string) *GetObjectRetentionInput { + s.Key = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *GetObjectRetentionInput) SetRequestPayer(v string) *GetObjectRetentionInput { + s.RequestPayer = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *GetObjectRetentionInput) SetVersionId(v string) *GetObjectRetentionInput { + s.VersionId = &v + return s +} + +type GetObjectRetentionOutput struct { + _ struct{} `type:"structure" payload:"Retention"` + + // The container element for an object's retention settings. + Retention *ObjectLockRetention `type:"structure"` +} + +// String returns the string representation +func (s GetObjectRetentionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectRetentionOutput) GoString() string { + return s.String() +} + +// SetRetention sets the Retention field's value. +func (s *GetObjectRetentionOutput) SetRetention(v *ObjectLockRetention) *GetObjectRetentionOutput { + s.Retention = v + return s +} + +type GetObjectTaggingInput struct { + _ struct{} `locationName:"GetObjectTaggingRequest" type:"structure"` + + // The bucket name containing the object for which to get the tagging information. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Object key for which to get the tagging information. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // The versionId of the object for which to get the tagging information. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +} + +// String returns the string representation +func (s GetObjectTaggingInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectTaggingInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetObjectTaggingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetObjectTaggingInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetObjectTaggingInput) SetBucket(v string) *GetObjectTaggingInput { + s.Bucket = &v + return s +} + +func (s *GetObjectTaggingInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *GetObjectTaggingInput) SetKey(v string) *GetObjectTaggingInput { + s.Key = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *GetObjectTaggingInput) SetVersionId(v string) *GetObjectTaggingInput { + s.VersionId = &v + return s +} + +type GetObjectTaggingOutput struct { + _ struct{} `type:"structure"` + + // Contains the tag set. + // + // TagSet is a required field + TagSet []*Tag `locationNameList:"Tag" type:"list" required:"true"` + + // The versionId of the object for which you got the tagging information. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +} + +// String returns the string representation +func (s GetObjectTaggingOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectTaggingOutput) GoString() string { + return s.String() +} + +// SetTagSet sets the TagSet field's value. +func (s *GetObjectTaggingOutput) SetTagSet(v []*Tag) *GetObjectTaggingOutput { + s.TagSet = v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *GetObjectTaggingOutput) SetVersionId(v string) *GetObjectTaggingOutput { + s.VersionId = &v + return s +} + +type GetObjectTorrentInput struct { + _ struct{} `locationName:"GetObjectTorrentRequest" type:"structure"` + + // The name of the bucket containing the object for which to get the torrent + // files. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The object key for which to get the information. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +} + +// String returns the string representation +func (s GetObjectTorrentInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectTorrentInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetObjectTorrentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetObjectTorrentInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetObjectTorrentInput) SetBucket(v string) *GetObjectTorrentInput { + s.Bucket = &v + return s +} + +func (s *GetObjectTorrentInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *GetObjectTorrentInput) SetKey(v string) *GetObjectTorrentInput { + s.Key = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *GetObjectTorrentInput) SetRequestPayer(v string) *GetObjectTorrentInput { + s.RequestPayer = &v + return s +} + +type GetObjectTorrentOutput struct { + _ struct{} `type:"structure" payload:"Body"` + + // A Bencoded dictionary as defined by the BitTorrent specification + Body io.ReadCloser `type:"blob"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +} + +// String returns the string representation +func (s GetObjectTorrentOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetObjectTorrentOutput) GoString() string { + return s.String() +} + +// SetBody sets the Body field's value. +func (s *GetObjectTorrentOutput) SetBody(v io.ReadCloser) *GetObjectTorrentOutput { + s.Body = v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *GetObjectTorrentOutput) SetRequestCharged(v string) *GetObjectTorrentOutput { + s.RequestCharged = &v + return s +} + +type GetPublicAccessBlockInput struct { + _ struct{} `locationName:"GetPublicAccessBlockRequest" type:"structure"` + + // The name of the Amazon S3 bucket whose PublicAccessBlock configuration you + // want to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetPublicAccessBlockInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetPublicAccessBlockInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetPublicAccessBlockInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetPublicAccessBlockInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *GetPublicAccessBlockInput) SetBucket(v string) *GetPublicAccessBlockInput { + s.Bucket = &v + return s +} + +func (s *GetPublicAccessBlockInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type GetPublicAccessBlockOutput struct { + _ struct{} `type:"structure" payload:"PublicAccessBlockConfiguration"` + + // The PublicAccessBlock configuration currently in effect for this Amazon S3 + // bucket. + PublicAccessBlockConfiguration *PublicAccessBlockConfiguration `type:"structure"` +} + +// String returns the string representation +func (s GetPublicAccessBlockOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetPublicAccessBlockOutput) GoString() string { + return s.String() +} + +// SetPublicAccessBlockConfiguration sets the PublicAccessBlockConfiguration field's value. +func (s *GetPublicAccessBlockOutput) SetPublicAccessBlockConfiguration(v *PublicAccessBlockConfiguration) *GetPublicAccessBlockOutput { + s.PublicAccessBlockConfiguration = v + return s +} + +// Container for Glacier job parameters. +type GlacierJobParameters struct { + _ struct{} `type:"structure"` + + // Glacier retrieval tier at which the restore will be processed. + // + // Tier is a required field + Tier *string `type:"string" required:"true" enum:"Tier"` +} + +// String returns the string representation +func (s GlacierJobParameters) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GlacierJobParameters) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GlacierJobParameters) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GlacierJobParameters"} + if s.Tier == nil { + invalidParams.Add(request.NewErrParamRequired("Tier")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetTier sets the Tier field's value. +func (s *GlacierJobParameters) SetTier(v string) *GlacierJobParameters { + s.Tier = &v + return s +} + +// Container for grant information. +type Grant struct { + _ struct{} `type:"structure"` + + // The person being granted permissions. + Grantee *Grantee `type:"structure" xmlPrefix:"xsi" xmlURI:"http://www.w3.org/2001/XMLSchema-instance"` + + // Specifies the permission given to the grantee. + Permission *string `type:"string" enum:"Permission"` +} + +// String returns the string representation +func (s Grant) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Grant) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Grant) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Grant"} + if s.Grantee != nil { + if err := s.Grantee.Validate(); err != nil { + invalidParams.AddNested("Grantee", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetGrantee sets the Grantee field's value. +func (s *Grant) SetGrantee(v *Grantee) *Grant { + s.Grantee = v + return s +} + +// SetPermission sets the Permission field's value. +func (s *Grant) SetPermission(v string) *Grant { + s.Permission = &v + return s +} + +// Container for the person being granted permissions. +type Grantee struct { + _ struct{} `type:"structure" xmlPrefix:"xsi" xmlURI:"http://www.w3.org/2001/XMLSchema-instance"` + + // Screen name of the grantee. + DisplayName *string `type:"string"` + + // Email address of the grantee. + EmailAddress *string `type:"string"` + + // The canonical user ID of the grantee. + ID *string `type:"string"` + + // Type of grantee + // + // Type is a required field + Type *string `locationName:"xsi:type" type:"string" xmlAttribute:"true" required:"true" enum:"Type"` + + // URI of the grantee group. + URI *string `type:"string"` +} + +// String returns the string representation +func (s Grantee) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Grantee) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Grantee) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Grantee"} + if s.Type == nil { + invalidParams.Add(request.NewErrParamRequired("Type")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDisplayName sets the DisplayName field's value. +func (s *Grantee) SetDisplayName(v string) *Grantee { + s.DisplayName = &v + return s +} + +// SetEmailAddress sets the EmailAddress field's value. +func (s *Grantee) SetEmailAddress(v string) *Grantee { + s.EmailAddress = &v + return s +} + +// SetID sets the ID field's value. +func (s *Grantee) SetID(v string) *Grantee { + s.ID = &v + return s +} + +// SetType sets the Type field's value. +func (s *Grantee) SetType(v string) *Grantee { + s.Type = &v + return s +} + +// SetURI sets the URI field's value. +func (s *Grantee) SetURI(v string) *Grantee { + s.URI = &v + return s +} + +type HeadBucketInput struct { + _ struct{} `locationName:"HeadBucketRequest" type:"structure"` + + // The bucket name. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +} + +// String returns the string representation +func (s HeadBucketInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s HeadBucketInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *HeadBucketInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "HeadBucketInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *HeadBucketInput) SetBucket(v string) *HeadBucketInput { + s.Bucket = &v + return s +} + +func (s *HeadBucketInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type HeadBucketOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s HeadBucketOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s HeadBucketOutput) GoString() string { + return s.String() +} + +type HeadObjectInput struct { + _ struct{} `locationName:"HeadObjectRequest" type:"structure"` + + // The name of the bucket containing the object. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Return the object only if its entity tag (ETag) is the same as the one specified, + // otherwise return a 412 (precondition failed). + IfMatch *string `location:"header" locationName:"If-Match" type:"string"` + + // Return the object only if it has been modified since the specified time, + // otherwise return a 304 (not modified). + IfModifiedSince *time.Time `location:"header" locationName:"If-Modified-Since" type:"timestamp"` + + // Return the object only if its entity tag (ETag) is different from the one + // specified, otherwise return a 304 (not modified). + IfNoneMatch *string `location:"header" locationName:"If-None-Match" type:"string"` + + // Return the object only if it has not been modified since the specified time, + // otherwise return a 412 (precondition failed). + IfUnmodifiedSince *time.Time `location:"header" locationName:"If-Unmodified-Since" type:"timestamp"` + + // The object key. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Part number of the object being read. This is a positive integer between + // 1 and 10,000. Effectively performs a 'ranged' HEAD request for the part specified. + // Useful querying about the size of the part and the number of parts in this + // object. + PartNumber *int64 `location:"querystring" locationName:"partNumber" type:"integer"` + + // Downloads the specified range bytes of an object. For more information about + // the HTTP Range header, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35. + Range *string `location:"header" locationName:"Range" type:"string"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // Specifies the algorithm to use to when encrypting the object (e.g., AES256). + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting + // data. This value is used to store the object and then it is discarded; Amazon + // does not store the encryption key. The key must be appropriate for use with + // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm + // header. + SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"` + + // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. + // Amazon S3 uses this header for a message integrity check to ensure the encryption + // key was transmitted without error. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // VersionId used to reference a specific version of the object. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +} + +// String returns the string representation +func (s HeadObjectInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s HeadObjectInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *HeadObjectInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "HeadObjectInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *HeadObjectInput) SetBucket(v string) *HeadObjectInput { + s.Bucket = &v + return s +} + +func (s *HeadObjectInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetIfMatch sets the IfMatch field's value. +func (s *HeadObjectInput) SetIfMatch(v string) *HeadObjectInput { + s.IfMatch = &v + return s +} + +// SetIfModifiedSince sets the IfModifiedSince field's value. +func (s *HeadObjectInput) SetIfModifiedSince(v time.Time) *HeadObjectInput { + s.IfModifiedSince = &v + return s +} + +// SetIfNoneMatch sets the IfNoneMatch field's value. +func (s *HeadObjectInput) SetIfNoneMatch(v string) *HeadObjectInput { + s.IfNoneMatch = &v + return s +} + +// SetIfUnmodifiedSince sets the IfUnmodifiedSince field's value. +func (s *HeadObjectInput) SetIfUnmodifiedSince(v time.Time) *HeadObjectInput { + s.IfUnmodifiedSince = &v + return s +} + +// SetKey sets the Key field's value. +func (s *HeadObjectInput) SetKey(v string) *HeadObjectInput { + s.Key = &v + return s +} + +// SetPartNumber sets the PartNumber field's value. +func (s *HeadObjectInput) SetPartNumber(v int64) *HeadObjectInput { + s.PartNumber = &v + return s +} + +// SetRange sets the Range field's value. +func (s *HeadObjectInput) SetRange(v string) *HeadObjectInput { + s.Range = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *HeadObjectInput) SetRequestPayer(v string) *HeadObjectInput { + s.RequestPayer = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *HeadObjectInput) SetSSECustomerAlgorithm(v string) *HeadObjectInput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKey sets the SSECustomerKey field's value. +func (s *HeadObjectInput) SetSSECustomerKey(v string) *HeadObjectInput { + s.SSECustomerKey = &v + return s +} + +func (s *HeadObjectInput) getSSECustomerKey() (v string) { + if s.SSECustomerKey == nil { + return v + } + return *s.SSECustomerKey +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *HeadObjectInput) SetSSECustomerKeyMD5(v string) *HeadObjectInput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *HeadObjectInput) SetVersionId(v string) *HeadObjectInput { + s.VersionId = &v + return s +} + +type HeadObjectOutput struct { + _ struct{} `type:"structure"` + + // Indicates that a range of bytes was specifed. + AcceptRanges *string `location:"header" locationName:"accept-ranges" type:"string"` + + // Specifies caching behavior along the request/reply chain. + CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` + + // Specifies presentational information for the object. + ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` + + // Specifies what content encodings have been applied to the object and thus + // what decoding mechanisms must be applied to obtain the media-type referenced + // by the Content-Type header field. + ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` + + // The language the content is in. + ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` + + // Size of the body in bytes. + ContentLength *int64 `location:"header" locationName:"Content-Length" type:"long"` + + // A standard MIME type describing the format of the object data. + ContentType *string `location:"header" locationName:"Content-Type" type:"string"` + + // Specifies whether the object retrieved was (true) or was not (false) a Delete + // Marker. If false, this response header does not appear in the response. + DeleteMarker *bool `location:"header" locationName:"x-amz-delete-marker" type:"boolean"` + + // An ETag is an opaque identifier assigned by a web server to a specific version + // of a resource found at a URL + ETag *string `location:"header" locationName:"ETag" type:"string"` + + // If the object expiration is configured (see PUT Bucket lifecycle), the response + // includes this header. It includes the expiry-date and rule-id key value pairs + // providing object expiration information. The value of the rule-id is URL + // encoded. + Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` + + // The date and time at which the object is no longer cacheable. + Expires *string `location:"header" locationName:"Expires" type:"string"` + + // Last modified date of the object + LastModified *time.Time `location:"header" locationName:"Last-Modified" type:"timestamp"` + + // A map of metadata to store with the object in S3. + Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` + + // This is set to the number of metadata entries not returned in x-amz-meta + // headers. This can happen if you create metadata using an API like SOAP that + // supports more flexible metadata than the REST API. For example, using SOAP, + // you can create metadata whose values are not legal HTTP headers. + MissingMeta *int64 `location:"header" locationName:"x-amz-missing-meta" type:"integer"` + + // Specifies whether a legal hold is in effect for this object. This header + // is only returned if the requester has the s3:GetObjectLegalHold permission. + // This header is not returned if the specified version of this object has never + // had a legal hold applied. For more information about S3 Object Lock, see + // Object Lock (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html). + ObjectLockLegalHoldStatus *string `location:"header" locationName:"x-amz-object-lock-legal-hold" type:"string" enum:"ObjectLockLegalHoldStatus"` + + // The Object Lock mode, if any, that's in effect for this object. This header + // is only returned if the requester has the s3:GetObjectRetention permission. + // For more information about S3 Object Lock, see Object Lock (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html). + ObjectLockMode *string `location:"header" locationName:"x-amz-object-lock-mode" type:"string" enum:"ObjectLockMode"` + + // The date and time when the Object Lock retention period expires. This header + // is only returned if the requester has the s3:GetObjectRetention permission. + ObjectLockRetainUntilDate *time.Time `location:"header" locationName:"x-amz-object-lock-retain-until-date" type:"timestamp" timestampFormat:"iso8601"` + + // The count of parts this object has. + PartsCount *int64 `location:"header" locationName:"x-amz-mp-parts-count" type:"integer"` + + // Amazon S3 can return this header if your request involves a bucket that is + // either a source or destination in a replication rule. + // + // In replication you have a source bucket on which you configure replication + // and destination bucket where Amazon S3 stores object replicas. When you request + // an object (GetObject) or object metadata (HeadObject) from these buckets, + // Amazon S3 will return the x-amz-replication-status header in the response + // as follows: + // + // * If requesting object from the source bucket — Amazon S3 will return + // the x-amz-replication-status header if object in your request is eligible + // for replication. For example, suppose in your replication configuration + // you specify object prefix "TaxDocs" requesting Amazon S3 to replicate + // objects with key prefix "TaxDocs". Then any objects you upload with this + // key name prefix, for example "TaxDocs/document1.pdf", is eligible for + // replication. For any object request with this key name prefix Amazon S3 + // will return the x-amz-replication-status header with value PENDING, COMPLETED + // or FAILED indicating object replication status. + // + // * If requesting object from the destination bucket — Amazon S3 will + // return the x-amz-replication-status header with value REPLICA if object + // in your request is a replica that Amazon S3 created. + // + // For more information, see Replication (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html). + ReplicationStatus *string `location:"header" locationName:"x-amz-replication-status" type:"string" enum:"ReplicationStatus"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + + // If the object is an archived object (an object whose storage class is GLACIER), + // the response includes this header if either the archive restoration is in + // progress (see RestoreObject or an archive copy is already restored. + // + // If an archive copy is already restored, the header value indicates when Amazon + // S3 is scheduled to delete the object copy. For example: + // + // x-amz-restore: ongoing-request="false", expiry-date="Fri, 23 Dec 2012 00:00:00 + // GMT" + // + // If the object restoration is in progress, the header returns the value ongoing-request="true". + // + // For more information about archiving objects, see Transitioning Objects: + // General Considerations (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html#lifecycle-transition-general-considerations). + Restore *string `location:"header" locationName:"x-amz-restore" type:"string"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header confirming the encryption algorithm + // used. + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header to provide round trip message integrity + // verification of the customer-provided encryption key. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // If present, specifies the ID of the AWS Key Management Service (KMS) customer + // master key (CMK) that was used for the object. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` + + // If the object is stored using server-side encryption either with an AWS KMS + // customer master key (CMK) or an Amazon S3-managed encryption key, the response + // includes this header with the value of the Server-side encryption algorithm + // used when storing this object in S3 (e.g., AES256, aws:kms). + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + + // Provides storage class information of the object. Amazon S3 returns this + // header for all objects except for Standard storage class objects. + // + // For more information, see Storage Classes (https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-class-intro.html). + StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` + + // Version of the object. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` + + // If the bucket is configured as a website, redirects requests for this object + // to another object in the same bucket or to an external URL. Amazon S3 stores + // the value of this header in the object metadata. + WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` +} + +// String returns the string representation +func (s HeadObjectOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s HeadObjectOutput) GoString() string { + return s.String() +} + +// SetAcceptRanges sets the AcceptRanges field's value. +func (s *HeadObjectOutput) SetAcceptRanges(v string) *HeadObjectOutput { + s.AcceptRanges = &v + return s +} + +// SetCacheControl sets the CacheControl field's value. +func (s *HeadObjectOutput) SetCacheControl(v string) *HeadObjectOutput { + s.CacheControl = &v + return s +} + +// SetContentDisposition sets the ContentDisposition field's value. +func (s *HeadObjectOutput) SetContentDisposition(v string) *HeadObjectOutput { + s.ContentDisposition = &v + return s +} + +// SetContentEncoding sets the ContentEncoding field's value. +func (s *HeadObjectOutput) SetContentEncoding(v string) *HeadObjectOutput { + s.ContentEncoding = &v + return s +} + +// SetContentLanguage sets the ContentLanguage field's value. +func (s *HeadObjectOutput) SetContentLanguage(v string) *HeadObjectOutput { + s.ContentLanguage = &v + return s +} + +// SetContentLength sets the ContentLength field's value. +func (s *HeadObjectOutput) SetContentLength(v int64) *HeadObjectOutput { + s.ContentLength = &v + return s +} + +// SetContentType sets the ContentType field's value. +func (s *HeadObjectOutput) SetContentType(v string) *HeadObjectOutput { + s.ContentType = &v + return s +} + +// SetDeleteMarker sets the DeleteMarker field's value. +func (s *HeadObjectOutput) SetDeleteMarker(v bool) *HeadObjectOutput { + s.DeleteMarker = &v + return s +} + +// SetETag sets the ETag field's value. +func (s *HeadObjectOutput) SetETag(v string) *HeadObjectOutput { + s.ETag = &v + return s +} + +// SetExpiration sets the Expiration field's value. +func (s *HeadObjectOutput) SetExpiration(v string) *HeadObjectOutput { + s.Expiration = &v + return s +} + +// SetExpires sets the Expires field's value. +func (s *HeadObjectOutput) SetExpires(v string) *HeadObjectOutput { + s.Expires = &v + return s +} + +// SetLastModified sets the LastModified field's value. +func (s *HeadObjectOutput) SetLastModified(v time.Time) *HeadObjectOutput { + s.LastModified = &v + return s +} + +// SetMetadata sets the Metadata field's value. +func (s *HeadObjectOutput) SetMetadata(v map[string]*string) *HeadObjectOutput { + s.Metadata = v + return s +} + +// SetMissingMeta sets the MissingMeta field's value. +func (s *HeadObjectOutput) SetMissingMeta(v int64) *HeadObjectOutput { + s.MissingMeta = &v + return s +} + +// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value. +func (s *HeadObjectOutput) SetObjectLockLegalHoldStatus(v string) *HeadObjectOutput { + s.ObjectLockLegalHoldStatus = &v + return s +} + +// SetObjectLockMode sets the ObjectLockMode field's value. +func (s *HeadObjectOutput) SetObjectLockMode(v string) *HeadObjectOutput { + s.ObjectLockMode = &v + return s +} + +// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value. +func (s *HeadObjectOutput) SetObjectLockRetainUntilDate(v time.Time) *HeadObjectOutput { + s.ObjectLockRetainUntilDate = &v + return s +} + +// SetPartsCount sets the PartsCount field's value. +func (s *HeadObjectOutput) SetPartsCount(v int64) *HeadObjectOutput { + s.PartsCount = &v + return s +} + +// SetReplicationStatus sets the ReplicationStatus field's value. +func (s *HeadObjectOutput) SetReplicationStatus(v string) *HeadObjectOutput { + s.ReplicationStatus = &v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *HeadObjectOutput) SetRequestCharged(v string) *HeadObjectOutput { + s.RequestCharged = &v + return s +} + +// SetRestore sets the Restore field's value. +func (s *HeadObjectOutput) SetRestore(v string) *HeadObjectOutput { + s.Restore = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *HeadObjectOutput) SetSSECustomerAlgorithm(v string) *HeadObjectOutput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *HeadObjectOutput) SetSSECustomerKeyMD5(v string) *HeadObjectOutput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *HeadObjectOutput) SetSSEKMSKeyId(v string) *HeadObjectOutput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *HeadObjectOutput) SetServerSideEncryption(v string) *HeadObjectOutput { + s.ServerSideEncryption = &v + return s +} + +// SetStorageClass sets the StorageClass field's value. +func (s *HeadObjectOutput) SetStorageClass(v string) *HeadObjectOutput { + s.StorageClass = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *HeadObjectOutput) SetVersionId(v string) *HeadObjectOutput { + s.VersionId = &v + return s +} + +// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value. +func (s *HeadObjectOutput) SetWebsiteRedirectLocation(v string) *HeadObjectOutput { + s.WebsiteRedirectLocation = &v + return s +} + +// Container for the Suffix element. +type IndexDocument struct { + _ struct{} `type:"structure"` + + // A suffix that is appended to a request that is for a directory on the website + // endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ + // the data that is returned will be for the object with the key name images/index.html) + // The suffix must not be empty and must not include a slash character. + // + // Suffix is a required field + Suffix *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s IndexDocument) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s IndexDocument) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *IndexDocument) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "IndexDocument"} + if s.Suffix == nil { + invalidParams.Add(request.NewErrParamRequired("Suffix")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetSuffix sets the Suffix field's value. +func (s *IndexDocument) SetSuffix(v string) *IndexDocument { + s.Suffix = &v + return s +} + +// Container element that identifies who initiated the ultipart upload. +type Initiator struct { + _ struct{} `type:"structure"` + + // Name of the Principal. + DisplayName *string `type:"string"` + + // If the principal is an AWS account, it provides the Canonical User ID. If + // the principal is an IAM User, it provides a user ARN value. + ID *string `type:"string"` +} + +// String returns the string representation +func (s Initiator) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Initiator) GoString() string { + return s.String() +} + +// SetDisplayName sets the DisplayName field's value. +func (s *Initiator) SetDisplayName(v string) *Initiator { + s.DisplayName = &v + return s +} + +// SetID sets the ID field's value. +func (s *Initiator) SetID(v string) *Initiator { + s.ID = &v + return s +} + +// Describes the serialization format of the object. +type InputSerialization struct { + _ struct{} `type:"structure"` + + // Describes the serialization of a CSV-encoded object. + CSV *CSVInput `type:"structure"` + + // Specifies object's compression format. Valid values: NONE, GZIP, BZIP2. Default + // Value: NONE. + CompressionType *string `type:"string" enum:"CompressionType"` + + // Specifies JSON as object's input serialization format. + JSON *JSONInput `type:"structure"` + + // Specifies Parquet as object's input serialization format. + Parquet *ParquetInput `type:"structure"` +} + +// String returns the string representation +func (s InputSerialization) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InputSerialization) GoString() string { + return s.String() +} + +// SetCSV sets the CSV field's value. +func (s *InputSerialization) SetCSV(v *CSVInput) *InputSerialization { + s.CSV = v + return s +} + +// SetCompressionType sets the CompressionType field's value. +func (s *InputSerialization) SetCompressionType(v string) *InputSerialization { + s.CompressionType = &v + return s +} + +// SetJSON sets the JSON field's value. +func (s *InputSerialization) SetJSON(v *JSONInput) *InputSerialization { + s.JSON = v + return s +} + +// SetParquet sets the Parquet field's value. +func (s *InputSerialization) SetParquet(v *ParquetInput) *InputSerialization { + s.Parquet = v + return s +} + +// Specifies the inventory configuration for an Amazon S3 bucket. For more information, +// see GET Bucket inventory (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html) +// in the Amazon Simple Storage Service API Reference. +type InventoryConfiguration struct { + _ struct{} `type:"structure"` + + // Contains information about where to publish the inventory results. + // + // Destination is a required field + Destination *InventoryDestination `type:"structure" required:"true"` + + // Specifies an inventory filter. The inventory only includes objects that meet + // the filter's criteria. + Filter *InventoryFilter `type:"structure"` + + // The ID used to identify the inventory configuration. + // + // Id is a required field + Id *string `type:"string" required:"true"` + + // Object versions to include in the inventory list. If set to All, the list + // includes all the object versions, which adds the version-related fields VersionId, + // IsLatest, and DeleteMarker to the list. If set to Current, the list does + // not contain these version-related fields. + // + // IncludedObjectVersions is a required field + IncludedObjectVersions *string `type:"string" required:"true" enum:"InventoryIncludedObjectVersions"` + + // Specifies whether the inventory is enabled or disabled. If set to True, an + // inventory list is generated. If set to False, no inventory list is generated. + // + // IsEnabled is a required field + IsEnabled *bool `type:"boolean" required:"true"` + + // Contains the optional fields that are included in the inventory results. + OptionalFields []*string `locationNameList:"Field" type:"list"` + + // Specifies the schedule for generating inventory results. + // + // Schedule is a required field + Schedule *InventorySchedule `type:"structure" required:"true"` +} + +// String returns the string representation +func (s InventoryConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InventoryConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *InventoryConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "InventoryConfiguration"} + if s.Destination == nil { + invalidParams.Add(request.NewErrParamRequired("Destination")) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + if s.IncludedObjectVersions == nil { + invalidParams.Add(request.NewErrParamRequired("IncludedObjectVersions")) + } + if s.IsEnabled == nil { + invalidParams.Add(request.NewErrParamRequired("IsEnabled")) + } + if s.Schedule == nil { + invalidParams.Add(request.NewErrParamRequired("Schedule")) + } + if s.Destination != nil { + if err := s.Destination.Validate(); err != nil { + invalidParams.AddNested("Destination", err.(request.ErrInvalidParams)) + } + } + if s.Filter != nil { + if err := s.Filter.Validate(); err != nil { + invalidParams.AddNested("Filter", err.(request.ErrInvalidParams)) + } + } + if s.Schedule != nil { + if err := s.Schedule.Validate(); err != nil { + invalidParams.AddNested("Schedule", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestination sets the Destination field's value. +func (s *InventoryConfiguration) SetDestination(v *InventoryDestination) *InventoryConfiguration { + s.Destination = v + return s +} + +// SetFilter sets the Filter field's value. +func (s *InventoryConfiguration) SetFilter(v *InventoryFilter) *InventoryConfiguration { + s.Filter = v + return s +} + +// SetId sets the Id field's value. +func (s *InventoryConfiguration) SetId(v string) *InventoryConfiguration { + s.Id = &v + return s +} + +// SetIncludedObjectVersions sets the IncludedObjectVersions field's value. +func (s *InventoryConfiguration) SetIncludedObjectVersions(v string) *InventoryConfiguration { + s.IncludedObjectVersions = &v + return s +} + +// SetIsEnabled sets the IsEnabled field's value. +func (s *InventoryConfiguration) SetIsEnabled(v bool) *InventoryConfiguration { + s.IsEnabled = &v + return s +} + +// SetOptionalFields sets the OptionalFields field's value. +func (s *InventoryConfiguration) SetOptionalFields(v []*string) *InventoryConfiguration { + s.OptionalFields = v + return s +} + +// SetSchedule sets the Schedule field's value. +func (s *InventoryConfiguration) SetSchedule(v *InventorySchedule) *InventoryConfiguration { + s.Schedule = v + return s +} + +// Specifies the inventory configuration for an Amazon S3 bucket. +type InventoryDestination struct { + _ struct{} `type:"structure"` + + // Contains the bucket name, file format, bucket owner (optional), and prefix + // (optional) where inventory results are published. + // + // S3BucketDestination is a required field + S3BucketDestination *InventoryS3BucketDestination `type:"structure" required:"true"` +} + +// String returns the string representation +func (s InventoryDestination) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InventoryDestination) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *InventoryDestination) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "InventoryDestination"} + if s.S3BucketDestination == nil { + invalidParams.Add(request.NewErrParamRequired("S3BucketDestination")) + } + if s.S3BucketDestination != nil { + if err := s.S3BucketDestination.Validate(); err != nil { + invalidParams.AddNested("S3BucketDestination", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetS3BucketDestination sets the S3BucketDestination field's value. +func (s *InventoryDestination) SetS3BucketDestination(v *InventoryS3BucketDestination) *InventoryDestination { + s.S3BucketDestination = v + return s +} + +// Contains the type of server-side encryption used to encrypt the inventory +// results. +type InventoryEncryption struct { + _ struct{} `type:"structure"` + + // Specifies the use of SSE-KMS to encrypt delivered Inventory reports. + SSEKMS *SSEKMS `locationName:"SSE-KMS" type:"structure"` + + // Specifies the use of SSE-S3 to encrypt delivered Inventory reports. + SSES3 *SSES3 `locationName:"SSE-S3" type:"structure"` +} + +// String returns the string representation +func (s InventoryEncryption) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InventoryEncryption) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *InventoryEncryption) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "InventoryEncryption"} + if s.SSEKMS != nil { + if err := s.SSEKMS.Validate(); err != nil { + invalidParams.AddNested("SSEKMS", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetSSEKMS sets the SSEKMS field's value. +func (s *InventoryEncryption) SetSSEKMS(v *SSEKMS) *InventoryEncryption { + s.SSEKMS = v + return s +} + +// SetSSES3 sets the SSES3 field's value. +func (s *InventoryEncryption) SetSSES3(v *SSES3) *InventoryEncryption { + s.SSES3 = v + return s +} + +// Specifies an inventory filter. The inventory only includes objects that meet +// the filter's criteria. +type InventoryFilter struct { + _ struct{} `type:"structure"` + + // The prefix that an object must have to be included in the inventory results. + // + // Prefix is a required field + Prefix *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s InventoryFilter) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InventoryFilter) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *InventoryFilter) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "InventoryFilter"} + if s.Prefix == nil { + invalidParams.Add(request.NewErrParamRequired("Prefix")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetPrefix sets the Prefix field's value. +func (s *InventoryFilter) SetPrefix(v string) *InventoryFilter { + s.Prefix = &v + return s +} + +// Contains the bucket name, file format, bucket owner (optional), and prefix +// (optional) where inventory results are published. +type InventoryS3BucketDestination struct { + _ struct{} `type:"structure"` + + // The ID of the account that owns the destination bucket. + AccountId *string `type:"string"` + + // The Amazon resource name (ARN) of the bucket where inventory results will + // be published. + // + // Bucket is a required field + Bucket *string `type:"string" required:"true"` + + // Contains the type of server-side encryption used to encrypt the inventory + // results. + Encryption *InventoryEncryption `type:"structure"` + + // Specifies the output format of the inventory results. + // + // Format is a required field + Format *string `type:"string" required:"true" enum:"InventoryFormat"` + + // The prefix that is prepended to all inventory results. + Prefix *string `type:"string"` +} + +// String returns the string representation +func (s InventoryS3BucketDestination) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InventoryS3BucketDestination) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *InventoryS3BucketDestination) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "InventoryS3BucketDestination"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Format == nil { + invalidParams.Add(request.NewErrParamRequired("Format")) + } + if s.Encryption != nil { + if err := s.Encryption.Validate(); err != nil { + invalidParams.AddNested("Encryption", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAccountId sets the AccountId field's value. +func (s *InventoryS3BucketDestination) SetAccountId(v string) *InventoryS3BucketDestination { + s.AccountId = &v + return s +} + +// SetBucket sets the Bucket field's value. +func (s *InventoryS3BucketDestination) SetBucket(v string) *InventoryS3BucketDestination { + s.Bucket = &v + return s +} + +func (s *InventoryS3BucketDestination) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetEncryption sets the Encryption field's value. +func (s *InventoryS3BucketDestination) SetEncryption(v *InventoryEncryption) *InventoryS3BucketDestination { + s.Encryption = v + return s +} + +// SetFormat sets the Format field's value. +func (s *InventoryS3BucketDestination) SetFormat(v string) *InventoryS3BucketDestination { + s.Format = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *InventoryS3BucketDestination) SetPrefix(v string) *InventoryS3BucketDestination { + s.Prefix = &v + return s +} + +// Specifies the schedule for generating inventory results. +type InventorySchedule struct { + _ struct{} `type:"structure"` + + // Specifies how frequently inventory results are produced. + // + // Frequency is a required field + Frequency *string `type:"string" required:"true" enum:"InventoryFrequency"` +} + +// String returns the string representation +func (s InventorySchedule) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InventorySchedule) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *InventorySchedule) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "InventorySchedule"} + if s.Frequency == nil { + invalidParams.Add(request.NewErrParamRequired("Frequency")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFrequency sets the Frequency field's value. +func (s *InventorySchedule) SetFrequency(v string) *InventorySchedule { + s.Frequency = &v + return s +} + +// Specifies JSON as object's input serialization format. +type JSONInput struct { + _ struct{} `type:"structure"` + + // The type of JSON. Valid values: Document, Lines. + Type *string `type:"string" enum:"JSONType"` +} + +// String returns the string representation +func (s JSONInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s JSONInput) GoString() string { + return s.String() +} + +// SetType sets the Type field's value. +func (s *JSONInput) SetType(v string) *JSONInput { + s.Type = &v + return s +} + +// Specifies JSON as request's output serialization format. +type JSONOutput struct { + _ struct{} `type:"structure"` + + // The value used to separate individual records in the output. + RecordDelimiter *string `type:"string"` +} + +// String returns the string representation +func (s JSONOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s JSONOutput) GoString() string { + return s.String() +} + +// SetRecordDelimiter sets the RecordDelimiter field's value. +func (s *JSONOutput) SetRecordDelimiter(v string) *JSONOutput { + s.RecordDelimiter = &v + return s +} + +// A container for object key name prefix and suffix filtering rules. +type KeyFilter struct { + _ struct{} `type:"structure"` + + // A list of containers for the key value pair that defines the criteria for + // the filter rule. + FilterRules []*FilterRule `locationName:"FilterRule" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s KeyFilter) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s KeyFilter) GoString() string { + return s.String() +} + +// SetFilterRules sets the FilterRules field's value. +func (s *KeyFilter) SetFilterRules(v []*FilterRule) *KeyFilter { + s.FilterRules = v + return s +} + +// A container for specifying the configuration for AWS Lambda notifications. +type LambdaFunctionConfiguration struct { + _ struct{} `type:"structure"` + + // The Amazon S3 bucket event for which to invoke the AWS Lambda function. For + // more information, see Supported Event Types (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) + // in the Amazon Simple Storage Service Developer Guide. + // + // Events is a required field + Events []*string `locationName:"Event" type:"list" flattened:"true" required:"true"` + + // Specifies object key name filtering rules. For information about key name + // filtering, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) + // in the Amazon Simple Storage Service Developer Guide. + Filter *NotificationConfigurationFilter `type:"structure"` + + // An optional unique identifier for configurations in a notification configuration. + // If you don't provide one, Amazon S3 will assign an ID. + Id *string `type:"string"` + + // The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3 + // invokes when the specified event type occurs. + // + // LambdaFunctionArn is a required field + LambdaFunctionArn *string `locationName:"CloudFunction" type:"string" required:"true"` +} + +// String returns the string representation +func (s LambdaFunctionConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LambdaFunctionConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *LambdaFunctionConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LambdaFunctionConfiguration"} + if s.Events == nil { + invalidParams.Add(request.NewErrParamRequired("Events")) + } + if s.LambdaFunctionArn == nil { + invalidParams.Add(request.NewErrParamRequired("LambdaFunctionArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEvents sets the Events field's value. +func (s *LambdaFunctionConfiguration) SetEvents(v []*string) *LambdaFunctionConfiguration { + s.Events = v + return s +} + +// SetFilter sets the Filter field's value. +func (s *LambdaFunctionConfiguration) SetFilter(v *NotificationConfigurationFilter) *LambdaFunctionConfiguration { + s.Filter = v + return s +} + +// SetId sets the Id field's value. +func (s *LambdaFunctionConfiguration) SetId(v string) *LambdaFunctionConfiguration { + s.Id = &v + return s +} + +// SetLambdaFunctionArn sets the LambdaFunctionArn field's value. +func (s *LambdaFunctionConfiguration) SetLambdaFunctionArn(v string) *LambdaFunctionConfiguration { + s.LambdaFunctionArn = &v + return s +} + +// Container for lifecycle rules. You can add as many as 1000 rules. +type LifecycleConfiguration struct { + _ struct{} `type:"structure"` + + // Specifies lifecycle configuration rules for an Amazon S3 bucket. + // + // Rules is a required field + Rules []*Rule `locationName:"Rule" type:"list" flattened:"true" required:"true"` +} + +// String returns the string representation +func (s LifecycleConfiguration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LifecycleConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *LifecycleConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LifecycleConfiguration"} + if s.Rules == nil { + invalidParams.Add(request.NewErrParamRequired("Rules")) + } + if s.Rules != nil { + for i, v := range s.Rules { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Rules", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetRules sets the Rules field's value. +func (s *LifecycleConfiguration) SetRules(v []*Rule) *LifecycleConfiguration { + s.Rules = v + return s +} + +// Container for the expiration for the lifecycle of the object. +type LifecycleExpiration struct { + _ struct{} `type:"structure"` + + // Indicates at what date the object is to be moved or deleted. Should be in + // GMT ISO 8601 Format. + Date *time.Time `type:"timestamp" timestampFormat:"iso8601"` + + // Indicates the lifetime, in days, of the objects that are subject to the rule. + // The value must be a non-zero positive integer. + Days *int64 `type:"integer"` + + // Indicates whether Amazon S3 will remove a delete marker with no noncurrent + // versions. If set to true, the delete marker will be expired; if set to false + // the policy takes no action. This cannot be specified with Days or Date in + // a Lifecycle Expiration Policy. + ExpiredObjectDeleteMarker *bool `type:"boolean"` +} + +// String returns the string representation +func (s LifecycleExpiration) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LifecycleExpiration) GoString() string { + return s.String() +} + +// SetDate sets the Date field's value. +func (s *LifecycleExpiration) SetDate(v time.Time) *LifecycleExpiration { + s.Date = &v + return s +} + +// SetDays sets the Days field's value. +func (s *LifecycleExpiration) SetDays(v int64) *LifecycleExpiration { + s.Days = &v + return s +} + +// SetExpiredObjectDeleteMarker sets the ExpiredObjectDeleteMarker field's value. +func (s *LifecycleExpiration) SetExpiredObjectDeleteMarker(v bool) *LifecycleExpiration { + s.ExpiredObjectDeleteMarker = &v + return s +} + +// A lifecycle rule for individual objects in an Amazon S3 bucket. +type LifecycleRule struct { + _ struct{} `type:"structure"` + + // Specifies the days since the initiation of an incomplete multipart upload + // that Amazon S3 will wait before permanently removing all parts of the upload. + // For more information, see Aborting Incomplete Multipart Uploads Using a Bucket + // Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config) + // in the Amazon Simple Storage Service Developer Guide. + AbortIncompleteMultipartUpload *AbortIncompleteMultipartUpload `type:"structure"` + + // Specifies the expiration for the lifecycle of the object in the form of date, + // days and, whether the object has a delete marker. + Expiration *LifecycleExpiration `type:"structure"` + + // The Filter is used to identify objects that a Lifecycle Rule applies to. + // A Filter must have exactly one of Prefix, Tag, or And specified. + Filter *LifecycleRuleFilter `type:"structure"` + + // Unique identifier for the rule. The value cannot be longer than 255 characters. + ID *string `type:"string"` + + // Specifies when noncurrent object versions expire. Upon expiration, Amazon + // S3 permanently deletes the noncurrent object versions. You set this lifecycle + // configuration action on a bucket that has versioning enabled (or suspended) + // to request that Amazon S3 delete noncurrent object versions at a specific + // period in the object's lifetime. + NoncurrentVersionExpiration *NoncurrentVersionExpiration `type:"structure"` + + // Specifies the transition rule for the lifecycle rule that describes when + // noncurrent objects transition to the a specific storage class. If your bucket + // is versioning-enabled (or versioning is suspended), you can set this action + // to request that Amazon S3 transition noncurrent object versions to the a + // specifc storage class at a set period in the object's lifetime. + NoncurrentVersionTransitions []*NoncurrentVersionTransition `locationName:"NoncurrentVersionTransition" type:"list" flattened:"true"` + + // Prefix identifying one or more objects to which the rule applies. This is + // No longer used; use Filter instead. + // + // Deprecated: Prefix has been deprecated + Prefix *string `deprecated:"true" type:"string"` + + // If 'Enabled', the rule is currently being applied. If 'Disabled', the rule + // is not currently being applied. + // + // Status is a required field + Status *string `type:"string" required:"true" enum:"ExpirationStatus"` + + // Specifies when an Amazon S3 object transitions to a specified storage class. + Transitions []*Transition `locationName:"Transition" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s LifecycleRule) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LifecycleRule) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *LifecycleRule) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LifecycleRule"} + if s.Status == nil { + invalidParams.Add(request.NewErrParamRequired("Status")) + } + if s.Filter != nil { + if err := s.Filter.Validate(); err != nil { + invalidParams.AddNested("Filter", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAbortIncompleteMultipartUpload sets the AbortIncompleteMultipartUpload field's value. +func (s *LifecycleRule) SetAbortIncompleteMultipartUpload(v *AbortIncompleteMultipartUpload) *LifecycleRule { + s.AbortIncompleteMultipartUpload = v + return s +} + +// SetExpiration sets the Expiration field's value. +func (s *LifecycleRule) SetExpiration(v *LifecycleExpiration) *LifecycleRule { + s.Expiration = v + return s +} + +// SetFilter sets the Filter field's value. +func (s *LifecycleRule) SetFilter(v *LifecycleRuleFilter) *LifecycleRule { + s.Filter = v + return s +} + +// SetID sets the ID field's value. +func (s *LifecycleRule) SetID(v string) *LifecycleRule { + s.ID = &v + return s +} + +// SetNoncurrentVersionExpiration sets the NoncurrentVersionExpiration field's value. +func (s *LifecycleRule) SetNoncurrentVersionExpiration(v *NoncurrentVersionExpiration) *LifecycleRule { + s.NoncurrentVersionExpiration = v + return s +} + +// SetNoncurrentVersionTransitions sets the NoncurrentVersionTransitions field's value. +func (s *LifecycleRule) SetNoncurrentVersionTransitions(v []*NoncurrentVersionTransition) *LifecycleRule { + s.NoncurrentVersionTransitions = v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *LifecycleRule) SetPrefix(v string) *LifecycleRule { + s.Prefix = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *LifecycleRule) SetStatus(v string) *LifecycleRule { + s.Status = &v + return s +} + +// SetTransitions sets the Transitions field's value. +func (s *LifecycleRule) SetTransitions(v []*Transition) *LifecycleRule { + s.Transitions = v + return s +} + +// This is used in a Lifecycle Rule Filter to apply a logical AND to two or +// more predicates. The Lifecycle Rule will apply to any object matching all +// of the predicates configured inside the And operator. +type LifecycleRuleAndOperator struct { + _ struct{} `type:"structure"` + + // Prefix identifying one or more objects to which the rule applies. + Prefix *string `type:"string"` + + // All of these tags must exist in the object's tag set in order for the rule + // to apply. + Tags []*Tag `locationName:"Tag" locationNameList:"Tag" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s LifecycleRuleAndOperator) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LifecycleRuleAndOperator) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *LifecycleRuleAndOperator) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LifecycleRuleAndOperator"} + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetPrefix sets the Prefix field's value. +func (s *LifecycleRuleAndOperator) SetPrefix(v string) *LifecycleRuleAndOperator { + s.Prefix = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *LifecycleRuleAndOperator) SetTags(v []*Tag) *LifecycleRuleAndOperator { + s.Tags = v + return s +} + +// The Filter is used to identify objects that a Lifecycle Rule applies to. +// A Filter must have exactly one of Prefix, Tag, or And specified. +type LifecycleRuleFilter struct { + _ struct{} `type:"structure"` + + // This is used in a Lifecycle Rule Filter to apply a logical AND to two or + // more predicates. The Lifecycle Rule will apply to any object matching all + // of the predicates configured inside the And operator. + And *LifecycleRuleAndOperator `type:"structure"` + + // Prefix identifying one or more objects to which the rule applies. + Prefix *string `type:"string"` + + // This tag must exist in the object's tag set in order for the rule to apply. + Tag *Tag `type:"structure"` +} + +// String returns the string representation +func (s LifecycleRuleFilter) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LifecycleRuleFilter) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *LifecycleRuleFilter) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LifecycleRuleFilter"} + if s.And != nil { + if err := s.And.Validate(); err != nil { + invalidParams.AddNested("And", err.(request.ErrInvalidParams)) + } + } + if s.Tag != nil { + if err := s.Tag.Validate(); err != nil { + invalidParams.AddNested("Tag", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAnd sets the And field's value. +func (s *LifecycleRuleFilter) SetAnd(v *LifecycleRuleAndOperator) *LifecycleRuleFilter { + s.And = v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *LifecycleRuleFilter) SetPrefix(v string) *LifecycleRuleFilter { + s.Prefix = &v + return s +} + +// SetTag sets the Tag field's value. +func (s *LifecycleRuleFilter) SetTag(v *Tag) *LifecycleRuleFilter { + s.Tag = v + return s +} + +type ListBucketAnalyticsConfigurationsInput struct { + _ struct{} `locationName:"ListBucketAnalyticsConfigurationsRequest" type:"structure"` + + // The name of the bucket from which analytics configurations are retrieved. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ContinuationToken that represents a placeholder from where this request + // should begin. + ContinuationToken *string `location:"querystring" locationName:"continuation-token" type:"string"` +} + +// String returns the string representation +func (s ListBucketAnalyticsConfigurationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListBucketAnalyticsConfigurationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListBucketAnalyticsConfigurationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListBucketAnalyticsConfigurationsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *ListBucketAnalyticsConfigurationsInput) SetBucket(v string) *ListBucketAnalyticsConfigurationsInput { + s.Bucket = &v + return s +} + +func (s *ListBucketAnalyticsConfigurationsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetContinuationToken sets the ContinuationToken field's value. +func (s *ListBucketAnalyticsConfigurationsInput) SetContinuationToken(v string) *ListBucketAnalyticsConfigurationsInput { + s.ContinuationToken = &v + return s +} + +type ListBucketAnalyticsConfigurationsOutput struct { + _ struct{} `type:"structure"` + + // The list of analytics configurations for a bucket. + AnalyticsConfigurationList []*AnalyticsConfiguration `locationName:"AnalyticsConfiguration" type:"list" flattened:"true"` + + // The marker that is used as a starting point for this analytics configuration + // list response. This value is present if it was sent in the request. + ContinuationToken *string `type:"string"` + + // Indicates whether the returned list of analytics configurations is complete. + // A value of true indicates that the list is not complete and the NextContinuationToken + // will be provided for a subsequent request. + IsTruncated *bool `type:"boolean"` + + // NextContinuationToken is sent when isTruncated is true, which indicates that + // there are more analytics configurations to list. The next request must include + // this NextContinuationToken. The token is obfuscated and is not a usable value. + NextContinuationToken *string `type:"string"` +} + +// String returns the string representation +func (s ListBucketAnalyticsConfigurationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListBucketAnalyticsConfigurationsOutput) GoString() string { + return s.String() +} + +// SetAnalyticsConfigurationList sets the AnalyticsConfigurationList field's value. +func (s *ListBucketAnalyticsConfigurationsOutput) SetAnalyticsConfigurationList(v []*AnalyticsConfiguration) *ListBucketAnalyticsConfigurationsOutput { + s.AnalyticsConfigurationList = v + return s +} + +// SetContinuationToken sets the ContinuationToken field's value. +func (s *ListBucketAnalyticsConfigurationsOutput) SetContinuationToken(v string) *ListBucketAnalyticsConfigurationsOutput { + s.ContinuationToken = &v + return s +} + +// SetIsTruncated sets the IsTruncated field's value. +func (s *ListBucketAnalyticsConfigurationsOutput) SetIsTruncated(v bool) *ListBucketAnalyticsConfigurationsOutput { + s.IsTruncated = &v + return s +} + +// SetNextContinuationToken sets the NextContinuationToken field's value. +func (s *ListBucketAnalyticsConfigurationsOutput) SetNextContinuationToken(v string) *ListBucketAnalyticsConfigurationsOutput { + s.NextContinuationToken = &v + return s +} + +type ListBucketInventoryConfigurationsInput struct { + _ struct{} `locationName:"ListBucketInventoryConfigurationsRequest" type:"structure"` + + // The name of the bucket containing the inventory configurations to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The marker used to continue an inventory configuration listing that has been + // truncated. Use the NextContinuationToken from a previously truncated list + // response to continue the listing. The continuation token is an opaque value + // that Amazon S3 understands. + ContinuationToken *string `location:"querystring" locationName:"continuation-token" type:"string"` +} + +// String returns the string representation +func (s ListBucketInventoryConfigurationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListBucketInventoryConfigurationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListBucketInventoryConfigurationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListBucketInventoryConfigurationsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *ListBucketInventoryConfigurationsInput) SetBucket(v string) *ListBucketInventoryConfigurationsInput { + s.Bucket = &v + return s +} + +func (s *ListBucketInventoryConfigurationsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetContinuationToken sets the ContinuationToken field's value. +func (s *ListBucketInventoryConfigurationsInput) SetContinuationToken(v string) *ListBucketInventoryConfigurationsInput { + s.ContinuationToken = &v + return s +} + +type ListBucketInventoryConfigurationsOutput struct { + _ struct{} `type:"structure"` + + // If sent in the request, the marker that is used as a starting point for this + // inventory configuration list response. + ContinuationToken *string `type:"string"` + + // The list of inventory configurations for a bucket. + InventoryConfigurationList []*InventoryConfiguration `locationName:"InventoryConfiguration" type:"list" flattened:"true"` + + // Tells whether the returned list of inventory configurations is complete. + // A value of true indicates that the list is not complete and the NextContinuationToken + // is provided for a subsequent request. + IsTruncated *bool `type:"boolean"` + + // The marker used to continue this inventory configuration listing. Use the + // NextContinuationToken from this response to continue the listing in a subsequent + // request. The continuation token is an opaque value that Amazon S3 understands. + NextContinuationToken *string `type:"string"` +} + +// String returns the string representation +func (s ListBucketInventoryConfigurationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListBucketInventoryConfigurationsOutput) GoString() string { + return s.String() +} + +// SetContinuationToken sets the ContinuationToken field's value. +func (s *ListBucketInventoryConfigurationsOutput) SetContinuationToken(v string) *ListBucketInventoryConfigurationsOutput { + s.ContinuationToken = &v + return s +} + +// SetInventoryConfigurationList sets the InventoryConfigurationList field's value. +func (s *ListBucketInventoryConfigurationsOutput) SetInventoryConfigurationList(v []*InventoryConfiguration) *ListBucketInventoryConfigurationsOutput { + s.InventoryConfigurationList = v + return s +} + +// SetIsTruncated sets the IsTruncated field's value. +func (s *ListBucketInventoryConfigurationsOutput) SetIsTruncated(v bool) *ListBucketInventoryConfigurationsOutput { + s.IsTruncated = &v + return s +} + +// SetNextContinuationToken sets the NextContinuationToken field's value. +func (s *ListBucketInventoryConfigurationsOutput) SetNextContinuationToken(v string) *ListBucketInventoryConfigurationsOutput { + s.NextContinuationToken = &v + return s +} + +type ListBucketMetricsConfigurationsInput struct { + _ struct{} `locationName:"ListBucketMetricsConfigurationsRequest" type:"structure"` + + // The name of the bucket containing the metrics configurations to retrieve. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The marker that is used to continue a metrics configuration listing that + // has been truncated. Use the NextContinuationToken from a previously truncated + // list response to continue the listing. The continuation token is an opaque + // value that Amazon S3 understands. + ContinuationToken *string `location:"querystring" locationName:"continuation-token" type:"string"` +} + +// String returns the string representation +func (s ListBucketMetricsConfigurationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListBucketMetricsConfigurationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListBucketMetricsConfigurationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListBucketMetricsConfigurationsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *ListBucketMetricsConfigurationsInput) SetBucket(v string) *ListBucketMetricsConfigurationsInput { + s.Bucket = &v + return s +} + +func (s *ListBucketMetricsConfigurationsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetContinuationToken sets the ContinuationToken field's value. +func (s *ListBucketMetricsConfigurationsInput) SetContinuationToken(v string) *ListBucketMetricsConfigurationsInput { + s.ContinuationToken = &v + return s +} + +type ListBucketMetricsConfigurationsOutput struct { + _ struct{} `type:"structure"` + + // The marker that is used as a starting point for this metrics configuration + // list response. This value is present if it was sent in the request. + ContinuationToken *string `type:"string"` + + // Indicates whether the returned list of metrics configurations is complete. + // A value of true indicates that the list is not complete and the NextContinuationToken + // will be provided for a subsequent request. + IsTruncated *bool `type:"boolean"` + + // The list of metrics configurations for a bucket. + MetricsConfigurationList []*MetricsConfiguration `locationName:"MetricsConfiguration" type:"list" flattened:"true"` + + // The marker used to continue a metrics configuration listing that has been + // truncated. Use the NextContinuationToken from a previously truncated list + // response to continue the listing. The continuation token is an opaque value + // that Amazon S3 understands. + NextContinuationToken *string `type:"string"` +} + +// String returns the string representation +func (s ListBucketMetricsConfigurationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListBucketMetricsConfigurationsOutput) GoString() string { + return s.String() +} + +// SetContinuationToken sets the ContinuationToken field's value. +func (s *ListBucketMetricsConfigurationsOutput) SetContinuationToken(v string) *ListBucketMetricsConfigurationsOutput { + s.ContinuationToken = &v + return s +} + +// SetIsTruncated sets the IsTruncated field's value. +func (s *ListBucketMetricsConfigurationsOutput) SetIsTruncated(v bool) *ListBucketMetricsConfigurationsOutput { + s.IsTruncated = &v + return s +} + +// SetMetricsConfigurationList sets the MetricsConfigurationList field's value. +func (s *ListBucketMetricsConfigurationsOutput) SetMetricsConfigurationList(v []*MetricsConfiguration) *ListBucketMetricsConfigurationsOutput { + s.MetricsConfigurationList = v + return s +} + +// SetNextContinuationToken sets the NextContinuationToken field's value. +func (s *ListBucketMetricsConfigurationsOutput) SetNextContinuationToken(v string) *ListBucketMetricsConfigurationsOutput { + s.NextContinuationToken = &v + return s +} + +type ListBucketsInput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s ListBucketsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListBucketsInput) GoString() string { + return s.String() +} + +type ListBucketsOutput struct { + _ struct{} `type:"structure"` + + // The list of buckets owned by the requestor. + Buckets []*Bucket `locationNameList:"Bucket" type:"list"` + + // The owner of the buckets listed. + Owner *Owner `type:"structure"` +} + +// String returns the string representation +func (s ListBucketsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListBucketsOutput) GoString() string { + return s.String() +} + +// SetBuckets sets the Buckets field's value. +func (s *ListBucketsOutput) SetBuckets(v []*Bucket) *ListBucketsOutput { + s.Buckets = v + return s +} + +// SetOwner sets the Owner field's value. +func (s *ListBucketsOutput) SetOwner(v *Owner) *ListBucketsOutput { + s.Owner = v + return s +} + +type ListMultipartUploadsInput struct { + _ struct{} `locationName:"ListMultipartUploadsRequest" type:"structure"` + + // Name of the bucket to which the multipart upload was initiated. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Character you use to group keys. + // + // All keys that contain the same string between the prefix, if specified, and + // the first occurrence of the delimiter after the prefix are grouped under + // a single result element, CommonPrefixes. If you don't specify the prefix + // parameter, then the substring starts at the beginning of the key. The keys + // that are grouped under CommonPrefixes result element are not returned elsewhere + // in the response. + Delimiter *string `location:"querystring" locationName:"delimiter" type:"string"` + + // Requests Amazon S3 to encode the object keys in the response and specifies + // the encoding method to use. An object key may contain any Unicode character; + // however, XML 1.0 parser cannot parse some characters, such as characters + // with an ASCII value from 0 to 10. For characters that are not supported in + // XML 1.0, you can add this parameter to request that Amazon S3 encode the + // keys in the response. + EncodingType *string `location:"querystring" locationName:"encoding-type" type:"string" enum:"EncodingType"` + + // Together with upload-id-marker, this parameter specifies the multipart upload + // after which listing should begin. + // + // If upload-id-marker is not specified, only the keys lexicographically greater + // than the specified key-marker will be included in the list. + // + // If upload-id-marker is specified, any multipart uploads for a key equal to + // the key-marker might also be included, provided those multipart uploads have + // upload IDs lexicographically greater than the specified upload-id-marker. + KeyMarker *string `location:"querystring" locationName:"key-marker" type:"string"` + + // Sets the maximum number of multipart uploads, from 1 to 1,000, to return + // in the response body. 1,000 is the maximum number of uploads that can be + // returned in a response. + MaxUploads *int64 `location:"querystring" locationName:"max-uploads" type:"integer"` + + // Lists in-progress uploads only for those keys that begin with the specified + // prefix. You can use prefixes to separate a bucket into different grouping + // of keys. (You can think of using prefix to make groups in the same way you'd + // use a folder in a file system.) + Prefix *string `location:"querystring" locationName:"prefix" type:"string"` + + // Together with key-marker, specifies the multipart upload after which listing + // should begin. If key-marker is not specified, the upload-id-marker parameter + // is ignored. Otherwise, any multipart uploads for a key equal to the key-marker + // might be included in the list only if they have an upload ID lexicographically + // greater than the specified upload-id-marker. + UploadIdMarker *string `location:"querystring" locationName:"upload-id-marker" type:"string"` +} + +// String returns the string representation +func (s ListMultipartUploadsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListMultipartUploadsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListMultipartUploadsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListMultipartUploadsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *ListMultipartUploadsInput) SetBucket(v string) *ListMultipartUploadsInput { + s.Bucket = &v + return s +} + +func (s *ListMultipartUploadsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetDelimiter sets the Delimiter field's value. +func (s *ListMultipartUploadsInput) SetDelimiter(v string) *ListMultipartUploadsInput { + s.Delimiter = &v + return s +} + +// SetEncodingType sets the EncodingType field's value. +func (s *ListMultipartUploadsInput) SetEncodingType(v string) *ListMultipartUploadsInput { + s.EncodingType = &v + return s +} + +// SetKeyMarker sets the KeyMarker field's value. +func (s *ListMultipartUploadsInput) SetKeyMarker(v string) *ListMultipartUploadsInput { + s.KeyMarker = &v + return s +} + +// SetMaxUploads sets the MaxUploads field's value. +func (s *ListMultipartUploadsInput) SetMaxUploads(v int64) *ListMultipartUploadsInput { + s.MaxUploads = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *ListMultipartUploadsInput) SetPrefix(v string) *ListMultipartUploadsInput { + s.Prefix = &v + return s +} + +// SetUploadIdMarker sets the UploadIdMarker field's value. +func (s *ListMultipartUploadsInput) SetUploadIdMarker(v string) *ListMultipartUploadsInput { + s.UploadIdMarker = &v + return s +} + +type ListMultipartUploadsOutput struct { + _ struct{} `type:"structure"` + + // Name of the bucket to which the multipart upload was initiated. + Bucket *string `type:"string"` + + // If you specify a delimiter in the request, then the result returns each distinct + // key prefix containing the delimiter in a CommonPrefixes element. The distinct + // key prefixes are returned in the Prefix child element. + CommonPrefixes []*CommonPrefix `type:"list" flattened:"true"` + + // Contains the delimiter you specified in the request. If you don't specify + // a delimiter in your request, this element is absent from the response. + Delimiter *string `type:"string"` + + // Encoding type used by Amazon S3 to encode object keys in the response. + // + // If you specify encoding-type request parameter, Amazon S3 includes this element + // in the response, and returns encoded key name values in the following response + // elements: + // + // Delimiter, KeyMarker, Prefix, NextKeyMarker, Key. + EncodingType *string `type:"string" enum:"EncodingType"` + + // Indicates whether the returned list of multipart uploads is truncated. A + // value of true indicates that the list was truncated. The list can be truncated + // if the number of multipart uploads exceeds the limit allowed or specified + // by max uploads. + IsTruncated *bool `type:"boolean"` + + // The key at or after which the listing began. + KeyMarker *string `type:"string"` + + // Maximum number of multipart uploads that could have been included in the + // response. + MaxUploads *int64 `type:"integer"` + + // When a list is truncated, this element specifies the value that should be + // used for the key-marker request parameter in a subsequent request. + NextKeyMarker *string `type:"string"` + + // When a list is truncated, this element specifies the value that should be + // used for the upload-id-marker request parameter in a subsequent request. + NextUploadIdMarker *string `type:"string"` + + // When a prefix is provided in the request, this field contains the specified + // prefix. The result contains only keys starting with the specified prefix. + Prefix *string `type:"string"` + + // Upload ID after which listing began. + UploadIdMarker *string `type:"string"` + + // Container for elements related to a particular multipart upload. A response + // can contain zero or more Upload elements. + Uploads []*MultipartUpload `locationName:"Upload" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s ListMultipartUploadsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListMultipartUploadsOutput) GoString() string { + return s.String() +} + +// SetBucket sets the Bucket field's value. +func (s *ListMultipartUploadsOutput) SetBucket(v string) *ListMultipartUploadsOutput { + s.Bucket = &v + return s +} + +func (s *ListMultipartUploadsOutput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetCommonPrefixes sets the CommonPrefixes field's value. +func (s *ListMultipartUploadsOutput) SetCommonPrefixes(v []*CommonPrefix) *ListMultipartUploadsOutput { + s.CommonPrefixes = v + return s +} + +// SetDelimiter sets the Delimiter field's value. +func (s *ListMultipartUploadsOutput) SetDelimiter(v string) *ListMultipartUploadsOutput { + s.Delimiter = &v + return s +} + +// SetEncodingType sets the EncodingType field's value. +func (s *ListMultipartUploadsOutput) SetEncodingType(v string) *ListMultipartUploadsOutput { + s.EncodingType = &v + return s +} + +// SetIsTruncated sets the IsTruncated field's value. +func (s *ListMultipartUploadsOutput) SetIsTruncated(v bool) *ListMultipartUploadsOutput { + s.IsTruncated = &v + return s +} + +// SetKeyMarker sets the KeyMarker field's value. +func (s *ListMultipartUploadsOutput) SetKeyMarker(v string) *ListMultipartUploadsOutput { + s.KeyMarker = &v + return s +} + +// SetMaxUploads sets the MaxUploads field's value. +func (s *ListMultipartUploadsOutput) SetMaxUploads(v int64) *ListMultipartUploadsOutput { + s.MaxUploads = &v + return s +} + +// SetNextKeyMarker sets the NextKeyMarker field's value. +func (s *ListMultipartUploadsOutput) SetNextKeyMarker(v string) *ListMultipartUploadsOutput { + s.NextKeyMarker = &v + return s +} + +// SetNextUploadIdMarker sets the NextUploadIdMarker field's value. +func (s *ListMultipartUploadsOutput) SetNextUploadIdMarker(v string) *ListMultipartUploadsOutput { + s.NextUploadIdMarker = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *ListMultipartUploadsOutput) SetPrefix(v string) *ListMultipartUploadsOutput { + s.Prefix = &v + return s +} + +// SetUploadIdMarker sets the UploadIdMarker field's value. +func (s *ListMultipartUploadsOutput) SetUploadIdMarker(v string) *ListMultipartUploadsOutput { + s.UploadIdMarker = &v + return s +} + +// SetUploads sets the Uploads field's value. +func (s *ListMultipartUploadsOutput) SetUploads(v []*MultipartUpload) *ListMultipartUploadsOutput { + s.Uploads = v + return s +} + +type ListObjectVersionsInput struct { + _ struct{} `locationName:"ListObjectVersionsRequest" type:"structure"` + + // The name of the bucket that contains the objects. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // A delimiter is a character that you specify to group keys. All keys that + // contain the same string between the prefix and the first occurrence of the + // delimiter are grouped under a single result element in CommonPrefixes. These + // groups are counted as one result against the max-keys limitation. These keys + // are not returned elsewhere in the response. + Delimiter *string `location:"querystring" locationName:"delimiter" type:"string"` + + // Requests Amazon S3 to encode the object keys in the response and specifies + // the encoding method to use. An object key may contain any Unicode character; + // however, XML 1.0 parser cannot parse some characters, such as characters + // with an ASCII value from 0 to 10. For characters that are not supported in + // XML 1.0, you can add this parameter to request that Amazon S3 encode the + // keys in the response. + EncodingType *string `location:"querystring" locationName:"encoding-type" type:"string" enum:"EncodingType"` + + // Specifies the key to start with when listing objects in a bucket. + KeyMarker *string `location:"querystring" locationName:"key-marker" type:"string"` + + // Sets the maximum number of keys returned in the response. The response might + // contain fewer keys but will never contain more. If additional keys satisfy + // the search criteria, but were not returned because max-keys was exceeded, + // the response contains true. To return the additional + // keys, see key-marker and version-id-marker. + MaxKeys *int64 `location:"querystring" locationName:"max-keys" type:"integer"` + + // Use this parameter to select only those keys that begin with the specified + // prefix. You can use prefixes to separate a bucket into different groupings + // of keys. (You can think of using prefix to make groups in the same way you'd + // use a folder in a file system.) You can use prefix with delimiter to roll + // up numerous objects into a single result under CommonPrefixes. + Prefix *string `location:"querystring" locationName:"prefix" type:"string"` + + // Specifies the object version you want to start listing from. + VersionIdMarker *string `location:"querystring" locationName:"version-id-marker" type:"string"` +} + +// String returns the string representation +func (s ListObjectVersionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListObjectVersionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListObjectVersionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListObjectVersionsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *ListObjectVersionsInput) SetBucket(v string) *ListObjectVersionsInput { + s.Bucket = &v + return s +} + +func (s *ListObjectVersionsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetDelimiter sets the Delimiter field's value. +func (s *ListObjectVersionsInput) SetDelimiter(v string) *ListObjectVersionsInput { + s.Delimiter = &v + return s +} + +// SetEncodingType sets the EncodingType field's value. +func (s *ListObjectVersionsInput) SetEncodingType(v string) *ListObjectVersionsInput { + s.EncodingType = &v + return s +} + +// SetKeyMarker sets the KeyMarker field's value. +func (s *ListObjectVersionsInput) SetKeyMarker(v string) *ListObjectVersionsInput { + s.KeyMarker = &v + return s +} + +// SetMaxKeys sets the MaxKeys field's value. +func (s *ListObjectVersionsInput) SetMaxKeys(v int64) *ListObjectVersionsInput { + s.MaxKeys = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *ListObjectVersionsInput) SetPrefix(v string) *ListObjectVersionsInput { + s.Prefix = &v + return s +} + +// SetVersionIdMarker sets the VersionIdMarker field's value. +func (s *ListObjectVersionsInput) SetVersionIdMarker(v string) *ListObjectVersionsInput { + s.VersionIdMarker = &v + return s +} + +type ListObjectVersionsOutput struct { + _ struct{} `type:"structure"` + + // All of the keys rolled up into a common prefix count as a single return when + // calculating the number of returns. + CommonPrefixes []*CommonPrefix `type:"list" flattened:"true"` + + // Container for an object that is a delete marker. + DeleteMarkers []*DeleteMarkerEntry `locationName:"DeleteMarker" type:"list" flattened:"true"` + + // The delimeter grouping the included keys. A delimiter is a character that + // you specify to group keys. All keys that contain the same string between + // the prefix and the first occurrence of the delimiter are grouped under a + // single result element in CommonPrefixes. These groups are counted as one + // result against the max-keys limitation. These keys are not returned elsewhere + // in the response. + Delimiter *string `type:"string"` + + // Encoding type used by Amazon S3 to encode object key names in the XML response. + // + // If you specify encoding-type request parameter, Amazon S3 includes this element + // in the response, and returns encoded key name values in the following response + // elements: + // + // KeyMarker, NextKeyMarker, Prefix, Key, and Delimiter. + EncodingType *string `type:"string" enum:"EncodingType"` + + // A flag that indicates whether or not Amazon S3 returned all of the results + // that satisfied the search criteria. If your results were truncated, you can + // make a follow-up paginated request using the NextKeyMarker and NextVersionIdMarker + // response parameters as a starting place in another request to return the + // rest of the results. + IsTruncated *bool `type:"boolean"` + + // Marks the last Key returned in a truncated response. + KeyMarker *string `type:"string"` + + // Specifies the maximum number of objects to return. + MaxKeys *int64 `type:"integer"` + + // Bucket owner's name. + Name *string `type:"string"` + + // When the number of responses exceeds the value of MaxKeys, NextKeyMarker + // specifies the first key not returned that satisfies the search criteria. + // Use this value for the key-marker request parameter in a subsequent request. + NextKeyMarker *string `type:"string"` + + // When the number of responses exceeds the value of MaxKeys, NextVersionIdMarker + // specifies the first object version not returned that satisfies the search + // criteria. Use this value for the version-id-marker request parameter in a + // subsequent request. + NextVersionIdMarker *string `type:"string"` + + // Selects objects that start with the value supplied by this parameter. + Prefix *string `type:"string"` + + // Marks the last version of the Key returned in a truncated response. + VersionIdMarker *string `type:"string"` + + // Container for version information. + Versions []*ObjectVersion `locationName:"Version" type:"list" flattened:"true"` +} + +// String returns the string representation +func (s ListObjectVersionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListObjectVersionsOutput) GoString() string { + return s.String() +} + +// SetCommonPrefixes sets the CommonPrefixes field's value. +func (s *ListObjectVersionsOutput) SetCommonPrefixes(v []*CommonPrefix) *ListObjectVersionsOutput { + s.CommonPrefixes = v + return s +} + +// SetDeleteMarkers sets the DeleteMarkers field's value. +func (s *ListObjectVersionsOutput) SetDeleteMarkers(v []*DeleteMarkerEntry) *ListObjectVersionsOutput { + s.DeleteMarkers = v + return s +} + +// SetDelimiter sets the Delimiter field's value. +func (s *ListObjectVersionsOutput) SetDelimiter(v string) *ListObjectVersionsOutput { + s.Delimiter = &v + return s +} + +// SetEncodingType sets the EncodingType field's value. +func (s *ListObjectVersionsOutput) SetEncodingType(v string) *ListObjectVersionsOutput { + s.EncodingType = &v + return s +} + +// SetIsTruncated sets the IsTruncated field's value. +func (s *ListObjectVersionsOutput) SetIsTruncated(v bool) *ListObjectVersionsOutput { + s.IsTruncated = &v + return s +} + +// SetKeyMarker sets the KeyMarker field's value. +func (s *ListObjectVersionsOutput) SetKeyMarker(v string) *ListObjectVersionsOutput { + s.KeyMarker = &v + return s +} + +// SetMaxKeys sets the MaxKeys field's value. +func (s *ListObjectVersionsOutput) SetMaxKeys(v int64) *ListObjectVersionsOutput { + s.MaxKeys = &v + return s +} + +// SetName sets the Name field's value. +func (s *ListObjectVersionsOutput) SetName(v string) *ListObjectVersionsOutput { + s.Name = &v + return s +} + +// SetNextKeyMarker sets the NextKeyMarker field's value. +func (s *ListObjectVersionsOutput) SetNextKeyMarker(v string) *ListObjectVersionsOutput { + s.NextKeyMarker = &v + return s +} + +// SetNextVersionIdMarker sets the NextVersionIdMarker field's value. +func (s *ListObjectVersionsOutput) SetNextVersionIdMarker(v string) *ListObjectVersionsOutput { + s.NextVersionIdMarker = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *ListObjectVersionsOutput) SetPrefix(v string) *ListObjectVersionsOutput { + s.Prefix = &v + return s +} + +// SetVersionIdMarker sets the VersionIdMarker field's value. +func (s *ListObjectVersionsOutput) SetVersionIdMarker(v string) *ListObjectVersionsOutput { + s.VersionIdMarker = &v + return s +} + +// SetVersions sets the Versions field's value. +func (s *ListObjectVersionsOutput) SetVersions(v []*ObjectVersion) *ListObjectVersionsOutput { + s.Versions = v + return s +} + +type ListObjectsInput struct { + _ struct{} `locationName:"ListObjectsRequest" type:"structure"` + + // The name of the bucket containing the objects. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // A delimiter is a character you use to group keys. + Delimiter *string `location:"querystring" locationName:"delimiter" type:"string"` + + // Requests Amazon S3 to encode the object keys in the response and specifies + // the encoding method to use. An object key may contain any Unicode character; + // however, XML 1.0 parser cannot parse some characters, such as characters + // with an ASCII value from 0 to 10. For characters that are not supported in + // XML 1.0, you can add this parameter to request that Amazon S3 encode the + // keys in the response. + EncodingType *string `location:"querystring" locationName:"encoding-type" type:"string" enum:"EncodingType"` + + // Specifies the key to start with when listing objects in a bucket. + Marker *string `location:"querystring" locationName:"marker" type:"string"` + + // Sets the maximum number of keys returned in the response. The response might + // contain fewer keys but will never contain more. + MaxKeys *int64 `location:"querystring" locationName:"max-keys" type:"integer"` + + // Limits the response to keys that begin with the specified prefix. + Prefix *string `location:"querystring" locationName:"prefix" type:"string"` + + // Confirms that the requester knows that she or he will be charged for the + // list objects request. Bucket owners need not specify this parameter in their + // requests. + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +} + +// String returns the string representation +func (s ListObjectsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ListObjectsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListObjectsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListObjectsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *ListObjectsInput) SetBucket(v string) *ListObjectsInput { + s.Bucket = &v + return s +} + +func (s *ListObjectsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetDelimiter sets the Delimiter field's value. +func (s *ListObjectsInput) SetDelimiter(v string) *ListObjectsInput { + s.Delimiter = &v + return s +} + +// SetEncodingType sets the EncodingType field's value. +func (s *ListObjectsInput) SetEncodingType(v string) *ListObjectsInput { + s.EncodingType = &v + return s +} + +// SetMarker sets the Marker field's value. +func (s *ListObjectsInput) SetMarker(v string) *ListObjectsInput { + s.Marker = &v + return s +} + +// SetMaxKeys sets the MaxKeys field's value. +func (s *ListObjectsInput) SetMaxKeys(v int64) *ListObjectsInput { + s.MaxKeys = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *ListObjectsInput) SetPrefix(v string) *ListObjectsInput { + s.Prefix = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *ListObjectsInput) SetRequestPayer(v string) *ListObjectsInput { + s.RequestPayer = &v + return s +} + +type ListObjectsOutput struct { + _ struct{} `type:"structure"` + + // All of the keys rolled up in a common prefix count as a single return when + // calculating the number of returns. + // + // A response can contain CommonPrefixes only if you specify a delimiter. + // + // CommonPrefixes contains all (if there are any) keys between Prefix and the + // next occurrence of the string specified by the delimiter. + // + // CommonPrefixes lists keys that act like subdirectories in the directory specified + // by Prefix. + // + // For example, if the prefix is notes/ and the delimiter is a slash (/) as + // in notes/summer/july, the common prefix is notes/summer/. All of the keys + // that roll up into a common prefix count as a single return when calculating + // the number of returns. + CommonPrefixes []*CommonPrefix `type:"list" flattened:"true"` + + // Metadata about each object returned. + Contents []*Object `type:"list" flattened:"true"` + + // Causes keys that contain the same string between the prefix and the first + // occurrence of the delimiter to be rolled up into a single result element + // in the CommonPrefixes collection. These rolled-up keys are not returned elsewhere + // in the response. Each rolled-up result counts as only one return against + // the MaxKeys value. + Delimiter *string `type:"string"` + + // Encoding type used by Amazon S3 to encode object keys in the response. + EncodingType *string `type:"string" enum:"EncodingType"` + + // A flag that indicates whether or not Amazon S3 returned all of the results + // that satisfied the search criteria. + IsTruncated *bool `type:"boolean"` + + // Indicates where in the bucket listing begins. Marker is included in the response + // if it was sent with the request. + Marker *string `type:"string"` + + // The maximum number of keys returned in the response body. + MaxKeys *int64 `type:"integer"` - UploadId *string `location:"querystring" locationName:"uploadId" type:"string" required:"true"` + // Name of the bucket. + Name *string `type:"string"` + + // When response is truncated (the IsTruncated element value in the response + // is true), you can use the key name in this field as marker in the subsequent + // request to get next set of objects. Amazon S3 lists objects in alphabetical + // order Note: This element is returned only if you have delimiter request parameter + // specified. If response does not include the NextMaker and it is truncated, + // you can use the value of the last Key in the response as the marker in the + // subsequent request to get the next set of object keys. + NextMarker *string `type:"string"` + + // Keys that begin with the indicated prefix. + Prefix *string `type:"string"` } // String returns the string representation -func (s AbortMultipartUploadInput) String() string { +func (s ListObjectsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AbortMultipartUploadInput) GoString() string { +func (s ListObjectsOutput) GoString() string { return s.String() } -type AbortMultipartUploadOutput struct { - _ struct{} `type:"structure"` +// SetCommonPrefixes sets the CommonPrefixes field's value. +func (s *ListObjectsOutput) SetCommonPrefixes(v []*CommonPrefix) *ListObjectsOutput { + s.CommonPrefixes = v + return s +} - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +// SetContents sets the Contents field's value. +func (s *ListObjectsOutput) SetContents(v []*Object) *ListObjectsOutput { + s.Contents = v + return s } -// String returns the string representation -func (s AbortMultipartUploadOutput) String() string { - return awsutil.Prettify(s) +// SetDelimiter sets the Delimiter field's value. +func (s *ListObjectsOutput) SetDelimiter(v string) *ListObjectsOutput { + s.Delimiter = &v + return s } -// GoString returns the string representation -func (s AbortMultipartUploadOutput) GoString() string { - return s.String() +// SetEncodingType sets the EncodingType field's value. +func (s *ListObjectsOutput) SetEncodingType(v string) *ListObjectsOutput { + s.EncodingType = &v + return s } -type AccessControlPolicy struct { - _ struct{} `type:"structure"` +// SetIsTruncated sets the IsTruncated field's value. +func (s *ListObjectsOutput) SetIsTruncated(v bool) *ListObjectsOutput { + s.IsTruncated = &v + return s +} - // A list of grants. - Grants []*Grant `locationName:"AccessControlList" locationNameList:"Grant" type:"list"` +// SetMarker sets the Marker field's value. +func (s *ListObjectsOutput) SetMarker(v string) *ListObjectsOutput { + s.Marker = &v + return s +} - Owner *Owner `type:"structure"` +// SetMaxKeys sets the MaxKeys field's value. +func (s *ListObjectsOutput) SetMaxKeys(v int64) *ListObjectsOutput { + s.MaxKeys = &v + return s } -// String returns the string representation -func (s AccessControlPolicy) String() string { - return awsutil.Prettify(s) +// SetName sets the Name field's value. +func (s *ListObjectsOutput) SetName(v string) *ListObjectsOutput { + s.Name = &v + return s } -// GoString returns the string representation -func (s AccessControlPolicy) GoString() string { - return s.String() +// SetNextMarker sets the NextMarker field's value. +func (s *ListObjectsOutput) SetNextMarker(v string) *ListObjectsOutput { + s.NextMarker = &v + return s } -type Bucket struct { - _ struct{} `type:"structure"` +// SetPrefix sets the Prefix field's value. +func (s *ListObjectsOutput) SetPrefix(v string) *ListObjectsOutput { + s.Prefix = &v + return s +} - // Date the bucket was created. - CreationDate *time.Time `type:"timestamp" timestampFormat:"iso8601"` +type ListObjectsV2Input struct { + _ struct{} `locationName:"ListObjectsV2Request" type:"structure"` - // The name of the bucket. - Name *string `type:"string"` + // Name of the bucket to list. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // ContinuationToken indicates Amazon S3 that the list is being continued on + // this bucket with a token. ContinuationToken is obfuscated and is not a real + // key. + ContinuationToken *string `location:"querystring" locationName:"continuation-token" type:"string"` + + // A delimiter is a character you use to group keys. + Delimiter *string `location:"querystring" locationName:"delimiter" type:"string"` + + // Encoding type used by Amazon S3 to encode object keys in the response. + EncodingType *string `location:"querystring" locationName:"encoding-type" type:"string" enum:"EncodingType"` + + // The owner field is not present in listV2 by default, if you want to return + // owner field with each key in the result then set the fetch owner field to + // true + FetchOwner *bool `location:"querystring" locationName:"fetch-owner" type:"boolean"` + + // Sets the maximum number of keys returned in the response. The response might + // contain fewer keys but will never contain more. + MaxKeys *int64 `location:"querystring" locationName:"max-keys" type:"integer"` + + // Limits the response to keys that begin with the specified prefix. + Prefix *string `location:"querystring" locationName:"prefix" type:"string"` + + // Confirms that the requester knows that she or he will be charged for the + // list objects request in V2 style. Bucket owners need not specify this parameter + // in their requests. + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts + // listing after this specified key. StartAfter can be any key in the bucket. + StartAfter *string `location:"querystring" locationName:"start-after" type:"string"` } // String returns the string representation -func (s Bucket) String() string { +func (s ListObjectsV2Input) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Bucket) GoString() string { +func (s ListObjectsV2Input) GoString() string { return s.String() } -type BucketLifecycleConfiguration struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListObjectsV2Input) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListObjectsV2Input"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } - Rules []*LifecycleRule `locationName:"Rule" type:"list" flattened:"true" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s BucketLifecycleConfiguration) String() string { - return awsutil.Prettify(s) +// SetBucket sets the Bucket field's value. +func (s *ListObjectsV2Input) SetBucket(v string) *ListObjectsV2Input { + s.Bucket = &v + return s } -// GoString returns the string representation -func (s BucketLifecycleConfiguration) GoString() string { - return s.String() +func (s *ListObjectsV2Input) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket } -type BucketLoggingStatus struct { - _ struct{} `type:"structure"` +// SetContinuationToken sets the ContinuationToken field's value. +func (s *ListObjectsV2Input) SetContinuationToken(v string) *ListObjectsV2Input { + s.ContinuationToken = &v + return s +} - LoggingEnabled *LoggingEnabled `type:"structure"` +// SetDelimiter sets the Delimiter field's value. +func (s *ListObjectsV2Input) SetDelimiter(v string) *ListObjectsV2Input { + s.Delimiter = &v + return s } -// String returns the string representation -func (s BucketLoggingStatus) String() string { - return awsutil.Prettify(s) +// SetEncodingType sets the EncodingType field's value. +func (s *ListObjectsV2Input) SetEncodingType(v string) *ListObjectsV2Input { + s.EncodingType = &v + return s } -// GoString returns the string representation -func (s BucketLoggingStatus) GoString() string { - return s.String() +// SetFetchOwner sets the FetchOwner field's value. +func (s *ListObjectsV2Input) SetFetchOwner(v bool) *ListObjectsV2Input { + s.FetchOwner = &v + return s } -type CORSConfiguration struct { - _ struct{} `type:"structure"` +// SetMaxKeys sets the MaxKeys field's value. +func (s *ListObjectsV2Input) SetMaxKeys(v int64) *ListObjectsV2Input { + s.MaxKeys = &v + return s +} - CORSRules []*CORSRule `locationName:"CORSRule" type:"list" flattened:"true" required:"true"` +// SetPrefix sets the Prefix field's value. +func (s *ListObjectsV2Input) SetPrefix(v string) *ListObjectsV2Input { + s.Prefix = &v + return s } -// String returns the string representation -func (s CORSConfiguration) String() string { - return awsutil.Prettify(s) +// SetRequestPayer sets the RequestPayer field's value. +func (s *ListObjectsV2Input) SetRequestPayer(v string) *ListObjectsV2Input { + s.RequestPayer = &v + return s } -// GoString returns the string representation -func (s CORSConfiguration) GoString() string { - return s.String() +// SetStartAfter sets the StartAfter field's value. +func (s *ListObjectsV2Input) SetStartAfter(v string) *ListObjectsV2Input { + s.StartAfter = &v + return s } -type CORSRule struct { +type ListObjectsV2Output struct { _ struct{} `type:"structure"` - // Specifies which headers are allowed in a pre-flight OPTIONS request. - AllowedHeaders []*string `locationName:"AllowedHeader" type:"list" flattened:"true"` + // All of the keys rolled up into a common prefix count as a single return when + // calculating the number of returns. + // + // A response can contain CommonPrefixes only if you specify a delimiter. + // + // CommonPrefixes contains all (if there are any) keys between Prefix and the + // next occurrence of the string specified by a delimiter. + // + // CommonPrefixes lists keys that act like subdirectories in the directory specified + // by Prefix. + // + // For example, if the prefix is notes/ and the delimiter is a slash (/) as + // in notes/summer/july, the common prefix is notes/summer/. All of the keys + // that roll up into a common prefix count as a single return when calculating + // the number of returns. + CommonPrefixes []*CommonPrefix `type:"list" flattened:"true"` - // Identifies HTTP methods that the domain/origin specified in the rule is allowed - // to execute. - AllowedMethods []*string `locationName:"AllowedMethod" type:"list" flattened:"true" required:"true"` + // Metadata about each object returned. + Contents []*Object `type:"list" flattened:"true"` - // One or more origins you want customers to be able to access the bucket from. - AllowedOrigins []*string `locationName:"AllowedOrigin" type:"list" flattened:"true" required:"true"` + // If ContinuationToken was sent with the request, it is included in the response. + ContinuationToken *string `type:"string"` - // One or more headers in the response that you want customers to be able to - // access from their applications (for example, from a JavaScript XMLHttpRequest - // object). - ExposeHeaders []*string `locationName:"ExposeHeader" type:"list" flattened:"true"` + // Causes keys that contain the same string between the prefix and the first + // occurrence of the delimiter to be rolled up into a single result element + // in the CommonPrefixes collection. These rolled-up keys are not returned elsewhere + // in the response. Each rolled-up result counts as only one return against + // the MaxKeys value. + Delimiter *string `type:"string"` - // The time in seconds that your browser is to cache the preflight response - // for the specified resource. - MaxAgeSeconds *int64 `type:"integer"` + // Encoding type used by Amazon S3 to encode object key names in the XML response. + // + // If you specify the encoding-type request parameter, Amazon S3 includes this + // element in the response, and returns encoded key name values in the following + // response elements: + // + // Delimiter, Prefix, Key, and StartAfter. + EncodingType *string `type:"string" enum:"EncodingType"` + + // Set to false if all of the results were returned. Set to true if more keys + // are available to return. If the number of results exceeds that specified + // by MaxKeys, all of the results might not be returned. + IsTruncated *bool `type:"boolean"` + + // KeyCount is the number of keys returned with this request. KeyCount will + // always be less than equals to MaxKeys field. Say you ask for 50 keys, your + // result will include less than equals 50 keys + KeyCount *int64 `type:"integer"` + + // Sets the maximum number of keys returned in the response. The response might + // contain fewer keys but will never contain more. + MaxKeys *int64 `type:"integer"` + + // Name of the bucket. + Name *string `type:"string"` + + // NextContinuationToken is sent when isTruncated is true which means there + // are more keys in the bucket that can be listed. The next list requests to + // Amazon S3 can be continued with this NextContinuationToken. NextContinuationToken + // is obfuscated and is not a real key + NextContinuationToken *string `type:"string"` + + // Keys that begin with the indicated prefix. + Prefix *string `type:"string"` + + // If StartAfter was sent with the request, it is included in the response. + StartAfter *string `type:"string"` } // String returns the string representation -func (s CORSRule) String() string { +func (s ListObjectsV2Output) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CORSRule) GoString() string { +func (s ListObjectsV2Output) GoString() string { return s.String() } -type CloudFunctionConfiguration struct { - _ struct{} `type:"structure"` +// SetCommonPrefixes sets the CommonPrefixes field's value. +func (s *ListObjectsV2Output) SetCommonPrefixes(v []*CommonPrefix) *ListObjectsV2Output { + s.CommonPrefixes = v + return s +} - CloudFunction *string `type:"string"` +// SetContents sets the Contents field's value. +func (s *ListObjectsV2Output) SetContents(v []*Object) *ListObjectsV2Output { + s.Contents = v + return s +} - // Bucket event for which to send notifications. - Event *string `type:"string" enum:"Event"` +// SetContinuationToken sets the ContinuationToken field's value. +func (s *ListObjectsV2Output) SetContinuationToken(v string) *ListObjectsV2Output { + s.ContinuationToken = &v + return s +} - Events []*string `locationName:"Event" type:"list" flattened:"true"` +// SetDelimiter sets the Delimiter field's value. +func (s *ListObjectsV2Output) SetDelimiter(v string) *ListObjectsV2Output { + s.Delimiter = &v + return s +} - // Optional unique identifier for configurations in a notification configuration. - // If you don't provide one, Amazon S3 will assign an ID. - Id *string `type:"string"` +// SetEncodingType sets the EncodingType field's value. +func (s *ListObjectsV2Output) SetEncodingType(v string) *ListObjectsV2Output { + s.EncodingType = &v + return s +} - InvocationRole *string `type:"string"` +// SetIsTruncated sets the IsTruncated field's value. +func (s *ListObjectsV2Output) SetIsTruncated(v bool) *ListObjectsV2Output { + s.IsTruncated = &v + return s } -// String returns the string representation -func (s CloudFunctionConfiguration) String() string { - return awsutil.Prettify(s) +// SetKeyCount sets the KeyCount field's value. +func (s *ListObjectsV2Output) SetKeyCount(v int64) *ListObjectsV2Output { + s.KeyCount = &v + return s } -// GoString returns the string representation -func (s CloudFunctionConfiguration) GoString() string { - return s.String() +// SetMaxKeys sets the MaxKeys field's value. +func (s *ListObjectsV2Output) SetMaxKeys(v int64) *ListObjectsV2Output { + s.MaxKeys = &v + return s } -type CommonPrefix struct { - _ struct{} `type:"structure"` +// SetName sets the Name field's value. +func (s *ListObjectsV2Output) SetName(v string) *ListObjectsV2Output { + s.Name = &v + return s +} - Prefix *string `type:"string"` +// SetNextContinuationToken sets the NextContinuationToken field's value. +func (s *ListObjectsV2Output) SetNextContinuationToken(v string) *ListObjectsV2Output { + s.NextContinuationToken = &v + return s } -// String returns the string representation -func (s CommonPrefix) String() string { - return awsutil.Prettify(s) +// SetPrefix sets the Prefix field's value. +func (s *ListObjectsV2Output) SetPrefix(v string) *ListObjectsV2Output { + s.Prefix = &v + return s } -// GoString returns the string representation -func (s CommonPrefix) GoString() string { - return s.String() +// SetStartAfter sets the StartAfter field's value. +func (s *ListObjectsV2Output) SetStartAfter(v string) *ListObjectsV2Output { + s.StartAfter = &v + return s } -type CompleteMultipartUploadInput struct { - _ struct{} `type:"structure" payload:"MultipartUpload"` +type ListPartsInput struct { + _ struct{} `locationName:"ListPartsRequest" type:"structure"` + // Name of the bucket to which the parts are being uploaded.-> + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // Object key for which the multipart upload was initiated. + // + // Key is a required field Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` - MultipartUpload *CompletedMultipartUpload `locationName:"CompleteMultipartUpload" type:"structure"` + // Sets the maximum number of parts to return. + MaxParts *int64 `location:"querystring" locationName:"max-parts" type:"integer"` + + // Specifies the part after which listing should begin. Only parts with higher + // part numbers will be listed. + PartNumberMarker *int64 `location:"querystring" locationName:"part-number-marker" type:"integer"` // Confirms that the requester knows that she or he will be charged for the // request. Bucket owners need not specify this parameter in their requests. @@ -1836,785 +20797,1287 @@ type CompleteMultipartUploadInput struct { // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + // Upload ID identifying the multipart upload whose parts are being listed. + // + // UploadId is a required field UploadId *string `location:"querystring" locationName:"uploadId" type:"string" required:"true"` } // String returns the string representation -func (s CompleteMultipartUploadInput) String() string { +func (s ListPartsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CompleteMultipartUploadInput) GoString() string { +func (s ListPartsInput) GoString() string { return s.String() } -type CompleteMultipartUploadOutput struct { - _ struct{} `type:"structure"` - - Bucket *string `type:"string"` - - // Entity tag of the object. - ETag *string `type:"string"` - - // If the object expiration is configured, this will contain the expiration - // date (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded. - Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ListPartsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ListPartsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.UploadId == nil { + invalidParams.Add(request.NewErrParamRequired("UploadId")) + } - Key *string `min:"1" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - Location *string `type:"string"` +// SetBucket sets the Bucket field's value. +func (s *ListPartsInput) SetBucket(v string) *ListPartsInput { + s.Bucket = &v + return s +} - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +func (s *ListPartsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // If present, specifies the ID of the AWS Key Management Service (KMS) master - // encryption key that was used for the object. - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` +// SetKey sets the Key field's value. +func (s *ListPartsInput) SetKey(v string) *ListPartsInput { + s.Key = &v + return s +} - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` +// SetMaxParts sets the MaxParts field's value. +func (s *ListPartsInput) SetMaxParts(v int64) *ListPartsInput { + s.MaxParts = &v + return s +} - // Version of the object. - VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +// SetPartNumberMarker sets the PartNumberMarker field's value. +func (s *ListPartsInput) SetPartNumberMarker(v int64) *ListPartsInput { + s.PartNumberMarker = &v + return s } -// String returns the string representation -func (s CompleteMultipartUploadOutput) String() string { - return awsutil.Prettify(s) +// SetRequestPayer sets the RequestPayer field's value. +func (s *ListPartsInput) SetRequestPayer(v string) *ListPartsInput { + s.RequestPayer = &v + return s } -// GoString returns the string representation -func (s CompleteMultipartUploadOutput) GoString() string { - return s.String() +// SetUploadId sets the UploadId field's value. +func (s *ListPartsInput) SetUploadId(v string) *ListPartsInput { + s.UploadId = &v + return s } -type CompletedMultipartUpload struct { +type ListPartsOutput struct { _ struct{} `type:"structure"` - Parts []*CompletedPart `locationName:"Part" type:"list" flattened:"true"` -} + // If the bucket has a lifecycle rule configured with an action to abort incomplete + // multipart uploads and the prefix in the lifecycle rule matches the object + // name in the request, then the response includes this header indicating when + // the initiated multipart upload will become eligible for abort operation. + // For more information, see Aborting Incomplete Multipart Uploads Using a Bucket + // Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config). + // + // The response will also include the x-amz-abort-rule-id header that will provide + // the ID of the lifecycle configuration rule that defines this action. + AbortDate *time.Time `location:"header" locationName:"x-amz-abort-date" type:"timestamp"` + + // This header is returned along with the x-amz-abort-date header. It identifies + // applicable lifecycle configuration rule that defines the action to abort + // incomplete multipart uploads. + AbortRuleId *string `location:"header" locationName:"x-amz-abort-rule-id" type:"string"` -// String returns the string representation -func (s CompletedMultipartUpload) String() string { - return awsutil.Prettify(s) -} + // Name of the bucket to which the multipart upload was initiated. + Bucket *string `type:"string"` -// GoString returns the string representation -func (s CompletedMultipartUpload) GoString() string { - return s.String() -} + // Container element that identifies who initiated the multipart upload. If + // the initiator is an AWS account, this element provides the same information + // as the Owner element. If the initiator is an IAM User, then this element + // provides the user ARN and display name. + Initiator *Initiator `type:"structure"` -type CompletedPart struct { - _ struct{} `type:"structure"` + // Indicates whether the returned list of parts is truncated. A true value indicates + // that the list was truncated. A list can be truncated if the number of parts + // exceeds the limit returned in the MaxParts element. + IsTruncated *bool `type:"boolean"` + + // Object key for which the multipart upload was initiated. + Key *string `min:"1" type:"string"` + + // Maximum number of parts that were allowed in the response. + MaxParts *int64 `type:"integer"` + + // When a list is truncated, this element specifies the last part in the list, + // as well as the value to use for the part-number-marker request parameter + // in a subsequent request. + NextPartNumberMarker *int64 `type:"integer"` + + // Container element that identifies the object owner, after the object is created. + // If multipart upload is initiated by an IAM user, this element provides the + // parent account ID and display name. + Owner *Owner `type:"structure"` + + // When a list is truncated, this element specifies the last part in the list, + // as well as the value to use for the part-number-marker request parameter + // in a subsequent request. + PartNumberMarker *int64 `type:"integer"` + + // Container for elements related to a particular part. A response can contain + // zero or more Part elements. + Parts []*Part `locationName:"Part" type:"list" flattened:"true"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` - // Entity tag returned when the part was uploaded. - ETag *string `type:"string"` + // Class of storage (STANDARD or REDUCED_REDUNDANCY) used to store the uploaded + // object. + StorageClass *string `type:"string" enum:"StorageClass"` - // Part number that identifies the part. This is a positive integer between - // 1 and 10,000. - PartNumber *int64 `type:"integer"` + // Upload ID identifying the multipart upload whose parts are being listed. + UploadId *string `type:"string"` } // String returns the string representation -func (s CompletedPart) String() string { +func (s ListPartsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CompletedPart) GoString() string { +func (s ListPartsOutput) GoString() string { return s.String() } -type Condition struct { - _ struct{} `type:"structure"` - - // The HTTP error code when the redirect is applied. In the event of an error, - // if the error code equals this value, then the specified redirect is applied. - // Required when parent element Condition is specified and sibling KeyPrefixEquals - // is not specified. If both are specified, then both must be true for the redirect - // to be applied. - HttpErrorCodeReturnedEquals *string `type:"string"` - - // The object key name prefix when the redirect is applied. For example, to - // redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. - // To redirect request for all pages with the prefix docs/, the key prefix will - // be /docs, which identifies all objects in the docs/ folder. Required when - // the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals - // is not specified. If both conditions are specified, both must be true for - // the redirect to be applied. - KeyPrefixEquals *string `type:"string"` +// SetAbortDate sets the AbortDate field's value. +func (s *ListPartsOutput) SetAbortDate(v time.Time) *ListPartsOutput { + s.AbortDate = &v + return s } -// String returns the string representation -func (s Condition) String() string { - return awsutil.Prettify(s) +// SetAbortRuleId sets the AbortRuleId field's value. +func (s *ListPartsOutput) SetAbortRuleId(v string) *ListPartsOutput { + s.AbortRuleId = &v + return s } -// GoString returns the string representation -func (s Condition) GoString() string { - return s.String() +// SetBucket sets the Bucket field's value. +func (s *ListPartsOutput) SetBucket(v string) *ListPartsOutput { + s.Bucket = &v + return s } -type CopyObjectInput struct { - _ struct{} `type:"structure"` - - // The canned ACL to apply to the object. - ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"ObjectCannedACL"` - - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - - // Specifies caching behavior along the request/reply chain. - CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` - - // Specifies presentational information for the object. - ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` - - // Specifies what content encodings have been applied to the object and thus - // what decoding mechanisms must be applied to obtain the media-type referenced - // by the Content-Type header field. - ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` - - // The language the content is in. - ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` - - // A standard MIME type describing the format of the object data. - ContentType *string `location:"header" locationName:"Content-Type" type:"string"` - - // The name of the source bucket and key name of the source object, separated - // by a slash (/). Must be URL-encoded. - CopySource *string `location:"header" locationName:"x-amz-copy-source" type:"string" required:"true"` - - // Copies the object if its entity tag (ETag) matches the specified tag. - CopySourceIfMatch *string `location:"header" locationName:"x-amz-copy-source-if-match" type:"string"` - - // Copies the object if it has been modified since the specified time. - CopySourceIfModifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-modified-since" type:"timestamp" timestampFormat:"rfc822"` - - // Copies the object if its entity tag (ETag) is different than the specified - // ETag. - CopySourceIfNoneMatch *string `location:"header" locationName:"x-amz-copy-source-if-none-match" type:"string"` +func (s *ListPartsOutput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // Copies the object if it hasn't been modified since the specified time. - CopySourceIfUnmodifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-unmodified-since" type:"timestamp" timestampFormat:"rfc822"` +// SetInitiator sets the Initiator field's value. +func (s *ListPartsOutput) SetInitiator(v *Initiator) *ListPartsOutput { + s.Initiator = v + return s +} - // Specifies the algorithm to use when decrypting the source object (e.g., AES256). - CopySourceSSECustomerAlgorithm *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-algorithm" type:"string"` +// SetIsTruncated sets the IsTruncated field's value. +func (s *ListPartsOutput) SetIsTruncated(v bool) *ListPartsOutput { + s.IsTruncated = &v + return s +} - // Specifies the customer-provided encryption key for Amazon S3 to use to decrypt - // the source object. The encryption key provided in this header must be one - // that was used when the source object was created. - CopySourceSSECustomerKey *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-key" type:"string"` +// SetKey sets the Key field's value. +func (s *ListPartsOutput) SetKey(v string) *ListPartsOutput { + s.Key = &v + return s +} - // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. - // Amazon S3 uses this header for a message integrity check to ensure the encryption - // key was transmitted without error. - CopySourceSSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-key-MD5" type:"string"` +// SetMaxParts sets the MaxParts field's value. +func (s *ListPartsOutput) SetMaxParts(v int64) *ListPartsOutput { + s.MaxParts = &v + return s +} - // The date and time at which the object is no longer cacheable. - Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp" timestampFormat:"rfc822"` +// SetNextPartNumberMarker sets the NextPartNumberMarker field's value. +func (s *ListPartsOutput) SetNextPartNumberMarker(v int64) *ListPartsOutput { + s.NextPartNumberMarker = &v + return s +} - // Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object. - GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` +// SetOwner sets the Owner field's value. +func (s *ListPartsOutput) SetOwner(v *Owner) *ListPartsOutput { + s.Owner = v + return s +} - // Allows grantee to read the object data and its metadata. - GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` +// SetPartNumberMarker sets the PartNumberMarker field's value. +func (s *ListPartsOutput) SetPartNumberMarker(v int64) *ListPartsOutput { + s.PartNumberMarker = &v + return s +} - // Allows grantee to read the object ACL. - GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` +// SetParts sets the Parts field's value. +func (s *ListPartsOutput) SetParts(v []*Part) *ListPartsOutput { + s.Parts = v + return s +} - // Allows grantee to write the ACL for the applicable object. - GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` +// SetRequestCharged sets the RequestCharged field's value. +func (s *ListPartsOutput) SetRequestCharged(v string) *ListPartsOutput { + s.RequestCharged = &v + return s +} - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` +// SetStorageClass sets the StorageClass field's value. +func (s *ListPartsOutput) SetStorageClass(v string) *ListPartsOutput { + s.StorageClass = &v + return s +} - // A map of metadata to store with the object in S3. - Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` +// SetUploadId sets the UploadId field's value. +func (s *ListPartsOutput) SetUploadId(v string) *ListPartsOutput { + s.UploadId = &v + return s +} - // Specifies whether the metadata is copied from the source object or replaced - // with metadata provided in the request. - MetadataDirective *string `location:"header" locationName:"x-amz-metadata-directive" type:"string" enum:"MetadataDirective"` +// Describes an S3 location that will receive the results of the restore request. +type Location struct { + _ struct{} `type:"structure"` - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + // A list of grants that control access to the staged results. + AccessControlList []*Grant `locationNameList:"Grant" type:"list"` - // Specifies the algorithm to use to when encrypting the object (e.g., AES256). - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + // The name of the bucket where the restore results will be placed. + // + // BucketName is a required field + BucketName *string `type:"string" required:"true"` - // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting - // data. This value is used to store the object and then it is discarded; Amazon - // does not store the encryption key. The key must be appropriate for use with - // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm - // header. - SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string"` + // The canned ACL to apply to the restore results. + CannedACL *string `type:"string" enum:"ObjectCannedACL"` - // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. - // Amazon S3 uses this header for a message integrity check to ensure the encryption - // key was transmitted without error. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + // Contains the type of server-side encryption used. + Encryption *Encryption `type:"structure"` - // Specifies the AWS KMS key ID to use for object encryption. All GET and PUT - // requests for an object protected by AWS KMS will fail if not made via SSL - // or using SigV4. Documentation on configuring any of the officially supported - // AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` + // The prefix that is prepended to the restore results for this request. + // + // Prefix is a required field + Prefix *string `type:"string" required:"true"` - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + // The class of storage used to store the restore results. + StorageClass *string `type:"string" enum:"StorageClass"` - // The type of storage to use for the object. Defaults to 'STANDARD'. - StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` + // The tag-set that is applied to the restore results. + Tagging *Tagging `type:"structure"` - // If the bucket is configured as a website, redirects requests for this object - // to another object in the same bucket or to an external URL. Amazon S3 stores - // the value of this header in the object metadata. - WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` + // A list of metadata to store with the restore results in S3. + UserMetadata []*MetadataEntry `locationNameList:"MetadataEntry" type:"list"` } // String returns the string representation -func (s CopyObjectInput) String() string { +func (s Location) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CopyObjectInput) GoString() string { +func (s Location) GoString() string { return s.String() } -type CopyObjectOutput struct { - _ struct{} `type:"structure" payload:"CopyObjectResult"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *Location) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Location"} + if s.BucketName == nil { + invalidParams.Add(request.NewErrParamRequired("BucketName")) + } + if s.Prefix == nil { + invalidParams.Add(request.NewErrParamRequired("Prefix")) + } + if s.AccessControlList != nil { + for i, v := range s.AccessControlList { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "AccessControlList", i), err.(request.ErrInvalidParams)) + } + } + } + if s.Encryption != nil { + if err := s.Encryption.Validate(); err != nil { + invalidParams.AddNested("Encryption", err.(request.ErrInvalidParams)) + } + } + if s.Tagging != nil { + if err := s.Tagging.Validate(); err != nil { + invalidParams.AddNested("Tagging", err.(request.ErrInvalidParams)) + } + } - CopyObjectResult *CopyObjectResult `type:"structure"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - CopySourceVersionId *string `location:"header" locationName:"x-amz-copy-source-version-id" type:"string"` +// SetAccessControlList sets the AccessControlList field's value. +func (s *Location) SetAccessControlList(v []*Grant) *Location { + s.AccessControlList = v + return s +} - // If the object expiration is configured, the response includes this header. - Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` +// SetBucketName sets the BucketName field's value. +func (s *Location) SetBucketName(v string) *Location { + s.BucketName = &v + return s +} - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +// SetCannedACL sets the CannedACL field's value. +func (s *Location) SetCannedACL(v string) *Location { + s.CannedACL = &v + return s +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header confirming the encryption algorithm - // used. - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` +// SetEncryption sets the Encryption field's value. +func (s *Location) SetEncryption(v *Encryption) *Location { + s.Encryption = v + return s +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header to provide round trip message integrity - // verification of the customer-provided encryption key. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` +// SetPrefix sets the Prefix field's value. +func (s *Location) SetPrefix(v string) *Location { + s.Prefix = &v + return s +} - // If present, specifies the ID of the AWS Key Management Service (KMS) master - // encryption key that was used for the object. - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` +// SetStorageClass sets the StorageClass field's value. +func (s *Location) SetStorageClass(v string) *Location { + s.StorageClass = &v + return s +} - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` +// SetTagging sets the Tagging field's value. +func (s *Location) SetTagging(v *Tagging) *Location { + s.Tagging = v + return s +} - // Version ID of the newly created copy. - VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +// SetUserMetadata sets the UserMetadata field's value. +func (s *Location) SetUserMetadata(v []*MetadataEntry) *Location { + s.UserMetadata = v + return s +} + +// Describes where logs are stored and the prefix that Amazon S3 assigns to +// all log object keys for a bucket. For more information, see PUT Bucket logging +// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html) +// in the Amazon Simple Storage Service API Reference. +type LoggingEnabled struct { + _ struct{} `type:"structure"` + + // Specifies the bucket where you want Amazon S3 to store server access logs. + // You can have your logs delivered to any bucket that you own, including the + // same bucket that is being logged. You can also configure multiple buckets + // to deliver their logs to the same target bucket. In this case you should + // choose a different TargetPrefix for each source bucket so that the delivered + // log files can be distinguished by key. + // + // TargetBucket is a required field + TargetBucket *string `type:"string" required:"true"` + + // Container for granting information. + TargetGrants []*TargetGrant `locationNameList:"Grant" type:"list"` + + // A prefix for all log object keys. If you store log files from multiple Amazon + // S3 buckets in a single bucket, you can use a prefix to distinguish which + // log files came from which bucket. + // + // TargetPrefix is a required field + TargetPrefix *string `type:"string" required:"true"` } // String returns the string representation -func (s CopyObjectOutput) String() string { +func (s LoggingEnabled) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CopyObjectOutput) GoString() string { +func (s LoggingEnabled) GoString() string { return s.String() } -type CopyObjectResult struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *LoggingEnabled) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LoggingEnabled"} + if s.TargetBucket == nil { + invalidParams.Add(request.NewErrParamRequired("TargetBucket")) + } + if s.TargetPrefix == nil { + invalidParams.Add(request.NewErrParamRequired("TargetPrefix")) + } + if s.TargetGrants != nil { + for i, v := range s.TargetGrants { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TargetGrants", i), err.(request.ErrInvalidParams)) + } + } + } - ETag *string `type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"` +// SetTargetBucket sets the TargetBucket field's value. +func (s *LoggingEnabled) SetTargetBucket(v string) *LoggingEnabled { + s.TargetBucket = &v + return s } -// String returns the string representation -func (s CopyObjectResult) String() string { - return awsutil.Prettify(s) +// SetTargetGrants sets the TargetGrants field's value. +func (s *LoggingEnabled) SetTargetGrants(v []*TargetGrant) *LoggingEnabled { + s.TargetGrants = v + return s } -// GoString returns the string representation -func (s CopyObjectResult) GoString() string { - return s.String() +// SetTargetPrefix sets the TargetPrefix field's value. +func (s *LoggingEnabled) SetTargetPrefix(v string) *LoggingEnabled { + s.TargetPrefix = &v + return s } -type CopyPartResult struct { +// A metadata key-value pair to store with an object. +type MetadataEntry struct { _ struct{} `type:"structure"` - // Entity tag of the object. - ETag *string `type:"string"` + // Name of the Object. + Name *string `type:"string"` - // Date and time at which the object was uploaded. - LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"` + // Value of the Object. + Value *string `type:"string"` } // String returns the string representation -func (s CopyPartResult) String() string { +func (s MetadataEntry) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CopyPartResult) GoString() string { +func (s MetadataEntry) GoString() string { return s.String() } -type CreateBucketConfiguration struct { +// SetName sets the Name field's value. +func (s *MetadataEntry) SetName(v string) *MetadataEntry { + s.Name = &v + return s +} + +// SetValue sets the Value field's value. +func (s *MetadataEntry) SetValue(v string) *MetadataEntry { + s.Value = &v + return s +} + +// A container specifying replication metrics-related information, including +// whether emitting metrics and Amazon S3 events for replication are enabled. +// In addition, contains configurations related to specific metrics or events. +// Must be specified together with a ReplicationTime block. +type Metrics struct { _ struct{} `type:"structure"` - // Specifies the region where the bucket will be created. If you don't specify - // a region, the bucket will be created in US Standard. - LocationConstraint *string `type:"string" enum:"BucketLocationConstraint"` + // A container specifying the time threshold for emitting the s3:Replication:OperationMissedThreshold + // event. + // + // EventThreshold is a required field + EventThreshold *ReplicationTimeValue `type:"structure" required:"true"` + + // Specifies whether the replication metrics are enabled. + // + // Status is a required field + Status *string `type:"string" required:"true" enum:"MetricsStatus"` } // String returns the string representation -func (s CreateBucketConfiguration) String() string { +func (s Metrics) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateBucketConfiguration) GoString() string { +func (s Metrics) GoString() string { return s.String() } -type CreateBucketInput struct { - _ struct{} `type:"structure" payload:"CreateBucketConfiguration"` - - // The canned ACL to apply to the bucket. - ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"BucketCannedACL"` - - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - - CreateBucketConfiguration *CreateBucketConfiguration `locationName:"CreateBucketConfiguration" type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *Metrics) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Metrics"} + if s.EventThreshold == nil { + invalidParams.Add(request.NewErrParamRequired("EventThreshold")) + } + if s.Status == nil { + invalidParams.Add(request.NewErrParamRequired("Status")) + } - // Allows grantee the read, write, read ACP, and write ACP permissions on the - // bucket. - GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Allows grantee to list the objects in the bucket. - GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` +// SetEventThreshold sets the EventThreshold field's value. +func (s *Metrics) SetEventThreshold(v *ReplicationTimeValue) *Metrics { + s.EventThreshold = v + return s +} - // Allows grantee to read the bucket ACL. - GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` +// SetStatus sets the Status field's value. +func (s *Metrics) SetStatus(v string) *Metrics { + s.Status = &v + return s +} - // Allows grantee to create, overwrite, and delete any object in the bucket. - GrantWrite *string `location:"header" locationName:"x-amz-grant-write" type:"string"` +// A conjunction (logical AND) of predicates, which is used in evaluating a +// metrics filter. The operator must have at least two predicates, and an object +// must match all of the predicates in order for the filter to apply. +type MetricsAndOperator struct { + _ struct{} `type:"structure"` - // Allows grantee to write the ACL for the applicable bucket. - GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` + // The prefix used when evaluating an AND predicate. + Prefix *string `type:"string"` + + // The list of tags used when evaluating an AND predicate. + Tags []*Tag `locationName:"Tag" locationNameList:"Tag" type:"list" flattened:"true"` } // String returns the string representation -func (s CreateBucketInput) String() string { +func (s MetricsAndOperator) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateBucketInput) GoString() string { +func (s MetricsAndOperator) GoString() string { return s.String() } -type CreateBucketOutput struct { +// Validate inspects the fields of the type to determine if they are valid. +func (s *MetricsAndOperator) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "MetricsAndOperator"} + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetPrefix sets the Prefix field's value. +func (s *MetricsAndOperator) SetPrefix(v string) *MetricsAndOperator { + s.Prefix = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *MetricsAndOperator) SetTags(v []*Tag) *MetricsAndOperator { + s.Tags = v + return s +} + +// Specifies a metrics configuration for the CloudWatch request metrics (specified +// by the metrics configuration ID) from an Amazon S3 bucket. If you're updating +// an existing metrics configuration, note that this is a full replacement of +// the existing metrics configuration. If you don't include the elements you +// want to keep, they are erased. For more information, see PUT Bucket metrics +// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTMetricConfiguration.html) +// in the Amazon Simple Storage Service API Reference. +type MetricsConfiguration struct { _ struct{} `type:"structure"` - Location *string `location:"header" locationName:"Location" type:"string"` + // Specifies a metrics configuration filter. The metrics configuration will + // only include objects that meet the filter's criteria. A filter must be a + // prefix, a tag, or a conjunction (MetricsAndOperator). + Filter *MetricsFilter `type:"structure"` + + // The ID used to identify the metrics configuration. + // + // Id is a required field + Id *string `type:"string" required:"true"` } // String returns the string representation -func (s CreateBucketOutput) String() string { +func (s MetricsConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateBucketOutput) GoString() string { +func (s MetricsConfiguration) GoString() string { return s.String() } -type CreateMultipartUploadInput struct { - _ struct{} `type:"structure"` - - // The canned ACL to apply to the object. - ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"ObjectCannedACL"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *MetricsConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "MetricsConfiguration"} + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + if s.Filter != nil { + if err := s.Filter.Validate(); err != nil { + invalidParams.AddNested("Filter", err.(request.ErrInvalidParams)) + } + } - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Specifies caching behavior along the request/reply chain. - CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` +// SetFilter sets the Filter field's value. +func (s *MetricsConfiguration) SetFilter(v *MetricsFilter) *MetricsConfiguration { + s.Filter = v + return s +} - // Specifies presentational information for the object. - ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` +// SetId sets the Id field's value. +func (s *MetricsConfiguration) SetId(v string) *MetricsConfiguration { + s.Id = &v + return s +} - // Specifies what content encodings have been applied to the object and thus - // what decoding mechanisms must be applied to obtain the media-type referenced - // by the Content-Type header field. - ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` +// Specifies a metrics configuration filter. The metrics configuration only +// includes objects that meet the filter's criteria. A filter must be a prefix, +// a tag, or a conjunction (MetricsAndOperator). +type MetricsFilter struct { + _ struct{} `type:"structure"` - // The language the content is in. - ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` + // A conjunction (logical AND) of predicates, which is used in evaluating a + // metrics filter. The operator must have at least two predicates, and an object + // must match all of the predicates in order for the filter to apply. + And *MetricsAndOperator `type:"structure"` - // A standard MIME type describing the format of the object data. - ContentType *string `location:"header" locationName:"Content-Type" type:"string"` + // The prefix used when evaluating a metrics filter. + Prefix *string `type:"string"` - // The date and time at which the object is no longer cacheable. - Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp" timestampFormat:"rfc822"` + // The tag used when evaluating a metrics filter. + Tag *Tag `type:"structure"` +} - // Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object. - GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` +// String returns the string representation +func (s MetricsFilter) String() string { + return awsutil.Prettify(s) +} - // Allows grantee to read the object data and its metadata. - GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` +// GoString returns the string representation +func (s MetricsFilter) GoString() string { + return s.String() +} - // Allows grantee to read the object ACL. - GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *MetricsFilter) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "MetricsFilter"} + if s.And != nil { + if err := s.And.Validate(); err != nil { + invalidParams.AddNested("And", err.(request.ErrInvalidParams)) + } + } + if s.Tag != nil { + if err := s.Tag.Validate(); err != nil { + invalidParams.AddNested("Tag", err.(request.ErrInvalidParams)) + } + } - // Allows grantee to write the ACL for the applicable object. - GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` +// SetAnd sets the And field's value. +func (s *MetricsFilter) SetAnd(v *MetricsAndOperator) *MetricsFilter { + s.And = v + return s +} - // A map of metadata to store with the object in S3. - Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` +// SetPrefix sets the Prefix field's value. +func (s *MetricsFilter) SetPrefix(v string) *MetricsFilter { + s.Prefix = &v + return s +} - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +// SetTag sets the Tag field's value. +func (s *MetricsFilter) SetTag(v *Tag) *MetricsFilter { + s.Tag = v + return s +} - // Specifies the algorithm to use to when encrypting the object (e.g., AES256). - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` +// Container for the MultipartUpload for the Amazon S3 object. +type MultipartUpload struct { + _ struct{} `type:"structure"` - // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting - // data. This value is used to store the object and then it is discarded; Amazon - // does not store the encryption key. The key must be appropriate for use with - // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm - // header. - SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string"` + // Date and time at which the multipart upload was initiated. + Initiated *time.Time `type:"timestamp"` - // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. - // Amazon S3 uses this header for a message integrity check to ensure the encryption - // key was transmitted without error. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + // Identifies who initiated the multipart upload. + Initiator *Initiator `type:"structure"` - // Specifies the AWS KMS key ID to use for object encryption. All GET and PUT - // requests for an object protected by AWS KMS will fail if not made via SSL - // or using SigV4. Documentation on configuring any of the officially supported - // AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` + // Key of the object for which the multipart upload was initiated. + Key *string `min:"1" type:"string"` - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + // Specifies the owner of the object that is part of the multipart upload. + Owner *Owner `type:"structure"` - // The type of storage to use for the object. Defaults to 'STANDARD'. - StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` + // The class of storage used to store the object. + StorageClass *string `type:"string" enum:"StorageClass"` - // If the bucket is configured as a website, redirects requests for this object - // to another object in the same bucket or to an external URL. Amazon S3 stores - // the value of this header in the object metadata. - WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` + // Upload ID that identifies the multipart upload. + UploadId *string `type:"string"` } // String returns the string representation -func (s CreateMultipartUploadInput) String() string { +func (s MultipartUpload) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateMultipartUploadInput) GoString() string { +func (s MultipartUpload) GoString() string { return s.String() } -type CreateMultipartUploadOutput struct { - _ struct{} `type:"structure"` - - // Name of the bucket to which the multipart upload was initiated. - Bucket *string `locationName:"Bucket" type:"string"` +// SetInitiated sets the Initiated field's value. +func (s *MultipartUpload) SetInitiated(v time.Time) *MultipartUpload { + s.Initiated = &v + return s +} - // Object key for which the multipart upload was initiated. - Key *string `min:"1" type:"string"` +// SetInitiator sets the Initiator field's value. +func (s *MultipartUpload) SetInitiator(v *Initiator) *MultipartUpload { + s.Initiator = v + return s +} - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +// SetKey sets the Key field's value. +func (s *MultipartUpload) SetKey(v string) *MultipartUpload { + s.Key = &v + return s +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header confirming the encryption algorithm - // used. - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` +// SetOwner sets the Owner field's value. +func (s *MultipartUpload) SetOwner(v *Owner) *MultipartUpload { + s.Owner = v + return s +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header to provide round trip message integrity - // verification of the customer-provided encryption key. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` +// SetStorageClass sets the StorageClass field's value. +func (s *MultipartUpload) SetStorageClass(v string) *MultipartUpload { + s.StorageClass = &v + return s +} - // If present, specifies the ID of the AWS Key Management Service (KMS) master - // encryption key that was used for the object. - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` +// SetUploadId sets the UploadId field's value. +func (s *MultipartUpload) SetUploadId(v string) *MultipartUpload { + s.UploadId = &v + return s +} - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` +// Specifies when noncurrent object versions expire. Upon expiration, Amazon +// S3 permanently deletes the noncurrent object versions. You set this lifecycle +// configuration action on a bucket that has versioning enabled (or suspended) +// to request that Amazon S3 delete noncurrent object versions at a specific +// period in the object's lifetime. +type NoncurrentVersionExpiration struct { + _ struct{} `type:"structure"` - // ID for the initiated multipart upload. - UploadId *string `type:"string"` + // Specifies the number of days an object is noncurrent before Amazon S3 can + // perform the associated action. For information about the noncurrent days + // calculations, see How Amazon S3 Calculates When an Object Became Noncurrent + // (https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations) + // in the Amazon Simple Storage Service Developer Guide. + NoncurrentDays *int64 `type:"integer"` } // String returns the string representation -func (s CreateMultipartUploadOutput) String() string { +func (s NoncurrentVersionExpiration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateMultipartUploadOutput) GoString() string { +func (s NoncurrentVersionExpiration) GoString() string { return s.String() } -type Delete struct { +// SetNoncurrentDays sets the NoncurrentDays field's value. +func (s *NoncurrentVersionExpiration) SetNoncurrentDays(v int64) *NoncurrentVersionExpiration { + s.NoncurrentDays = &v + return s +} + +// Container for the transition rule that describes when noncurrent objects +// transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, +// or DEEP_ARCHIVE storage class. If your bucket is versioning-enabled (or versioning +// is suspended), you can set this action to request that Amazon S3 transition +// noncurrent object versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, +// GLACIER, or DEEP_ARCHIVE storage class at a specific period in the object's +// lifetime. +type NoncurrentVersionTransition struct { _ struct{} `type:"structure"` - Objects []*ObjectIdentifier `locationName:"Object" type:"list" flattened:"true" required:"true"` + // Specifies the number of days an object is noncurrent before Amazon S3 can + // perform the associated action. For information about the noncurrent days + // calculations, see How Amazon S3 Calculates When an Object Became Noncurrent + // (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html) + // in the Amazon Simple Storage Service Developer Guide. + NoncurrentDays *int64 `type:"integer"` - // Element to enable quiet mode for the request. When you add this element, - // you must set its value to true. - Quiet *bool `type:"boolean"` + // The class of storage used to store the object. + StorageClass *string `type:"string" enum:"TransitionStorageClass"` } // String returns the string representation -func (s Delete) String() string { +func (s NoncurrentVersionTransition) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Delete) GoString() string { +func (s NoncurrentVersionTransition) GoString() string { return s.String() } -type DeleteBucketCorsInput struct { +// SetNoncurrentDays sets the NoncurrentDays field's value. +func (s *NoncurrentVersionTransition) SetNoncurrentDays(v int64) *NoncurrentVersionTransition { + s.NoncurrentDays = &v + return s +} + +// SetStorageClass sets the StorageClass field's value. +func (s *NoncurrentVersionTransition) SetStorageClass(v string) *NoncurrentVersionTransition { + s.StorageClass = &v + return s +} + +// A container for specifying the notification configuration of the bucket. +// If this element is empty, notifications are turned off for the bucket. +type NotificationConfiguration struct { _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // Describes the AWS Lambda functions to invoke and the events for which to + // invoke them. + LambdaFunctionConfigurations []*LambdaFunctionConfiguration `locationName:"CloudFunctionConfiguration" type:"list" flattened:"true"` + + // The Amazon Simple Queue Service queues to publish messages to and the events + // for which to publish messages. + QueueConfigurations []*QueueConfiguration `locationName:"QueueConfiguration" type:"list" flattened:"true"` + + // The topic to which notifications are sent and the events for which notifications + // are generated. + TopicConfigurations []*TopicConfiguration `locationName:"TopicConfiguration" type:"list" flattened:"true"` } // String returns the string representation -func (s DeleteBucketCorsInput) String() string { +func (s NotificationConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketCorsInput) GoString() string { +func (s NotificationConfiguration) GoString() string { return s.String() } -type DeleteBucketCorsOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *NotificationConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "NotificationConfiguration"} + if s.LambdaFunctionConfigurations != nil { + for i, v := range s.LambdaFunctionConfigurations { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "LambdaFunctionConfigurations", i), err.(request.ErrInvalidParams)) + } + } + } + if s.QueueConfigurations != nil { + for i, v := range s.QueueConfigurations { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "QueueConfigurations", i), err.(request.ErrInvalidParams)) + } + } + } + if s.TopicConfigurations != nil { + for i, v := range s.TopicConfigurations { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TopicConfigurations", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s DeleteBucketCorsOutput) String() string { - return awsutil.Prettify(s) +// SetLambdaFunctionConfigurations sets the LambdaFunctionConfigurations field's value. +func (s *NotificationConfiguration) SetLambdaFunctionConfigurations(v []*LambdaFunctionConfiguration) *NotificationConfiguration { + s.LambdaFunctionConfigurations = v + return s } -// GoString returns the string representation -func (s DeleteBucketCorsOutput) GoString() string { - return s.String() +// SetQueueConfigurations sets the QueueConfigurations field's value. +func (s *NotificationConfiguration) SetQueueConfigurations(v []*QueueConfiguration) *NotificationConfiguration { + s.QueueConfigurations = v + return s } -type DeleteBucketInput struct { +// SetTopicConfigurations sets the TopicConfigurations field's value. +func (s *NotificationConfiguration) SetTopicConfigurations(v []*TopicConfiguration) *NotificationConfiguration { + s.TopicConfigurations = v + return s +} + +type NotificationConfigurationDeprecated struct { _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // Container for specifying the AWS Lambda notification configuration. + CloudFunctionConfiguration *CloudFunctionConfiguration `type:"structure"` + + // This data type is deprecated. This data type specifies the configuration + // for publishing messages to an Amazon Simple Queue Service (Amazon SQS) queue + // when Amazon S3 detects specified events. + QueueConfiguration *QueueConfigurationDeprecated `type:"structure"` + + // This data type is deperecated. A container for specifying the configuration + // for publication of messages to an Amazon Simple Notification Service (Amazon + // SNS) topic when Amazon S3 detects specified events. + TopicConfiguration *TopicConfigurationDeprecated `type:"structure"` } // String returns the string representation -func (s DeleteBucketInput) String() string { +func (s NotificationConfigurationDeprecated) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketInput) GoString() string { +func (s NotificationConfigurationDeprecated) GoString() string { return s.String() } -type DeleteBucketLifecycleInput struct { +// SetCloudFunctionConfiguration sets the CloudFunctionConfiguration field's value. +func (s *NotificationConfigurationDeprecated) SetCloudFunctionConfiguration(v *CloudFunctionConfiguration) *NotificationConfigurationDeprecated { + s.CloudFunctionConfiguration = v + return s +} + +// SetQueueConfiguration sets the QueueConfiguration field's value. +func (s *NotificationConfigurationDeprecated) SetQueueConfiguration(v *QueueConfigurationDeprecated) *NotificationConfigurationDeprecated { + s.QueueConfiguration = v + return s +} + +// SetTopicConfiguration sets the TopicConfiguration field's value. +func (s *NotificationConfigurationDeprecated) SetTopicConfiguration(v *TopicConfigurationDeprecated) *NotificationConfigurationDeprecated { + s.TopicConfiguration = v + return s +} + +// Specifies object key name filtering rules. For information about key name +// filtering, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) +// in the Amazon Simple Storage Service Developer Guide. +type NotificationConfigurationFilter struct { _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // A container for object key name prefix and suffix filtering rules. + Key *KeyFilter `locationName:"S3Key" type:"structure"` } // String returns the string representation -func (s DeleteBucketLifecycleInput) String() string { +func (s NotificationConfigurationFilter) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketLifecycleInput) GoString() string { +func (s NotificationConfigurationFilter) GoString() string { return s.String() } -type DeleteBucketLifecycleOutput struct { +// SetKey sets the Key field's value. +func (s *NotificationConfigurationFilter) SetKey(v *KeyFilter) *NotificationConfigurationFilter { + s.Key = v + return s +} + +// An object consists of data and its descriptive metadata. +type Object struct { _ struct{} `type:"structure"` + + // The entity tag is an MD5 hash of the object. ETag reflects only changes to + // the contents of an object, not its metadata. + ETag *string `type:"string"` + + // The name that you assign to an object. You use the object key to retrieve + // the object. + Key *string `min:"1" type:"string"` + + // The date the Object was Last Modified + LastModified *time.Time `type:"timestamp"` + + // The owner of the object + Owner *Owner `type:"structure"` + + // Size in bytes of the object + Size *int64 `type:"integer"` + + // The class of storage used to store the object. + StorageClass *string `type:"string" enum:"ObjectStorageClass"` } // String returns the string representation -func (s DeleteBucketLifecycleOutput) String() string { +func (s Object) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketLifecycleOutput) GoString() string { +func (s Object) GoString() string { return s.String() } -type DeleteBucketOutput struct { - _ struct{} `type:"structure"` +// SetETag sets the ETag field's value. +func (s *Object) SetETag(v string) *Object { + s.ETag = &v + return s } -// String returns the string representation -func (s DeleteBucketOutput) String() string { - return awsutil.Prettify(s) +// SetKey sets the Key field's value. +func (s *Object) SetKey(v string) *Object { + s.Key = &v + return s } -// GoString returns the string representation -func (s DeleteBucketOutput) GoString() string { - return s.String() +// SetLastModified sets the LastModified field's value. +func (s *Object) SetLastModified(v time.Time) *Object { + s.LastModified = &v + return s } -type DeleteBucketPolicyInput struct { - _ struct{} `type:"structure"` - - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetOwner sets the Owner field's value. +func (s *Object) SetOwner(v *Owner) *Object { + s.Owner = v + return s } -// String returns the string representation -func (s DeleteBucketPolicyInput) String() string { - return awsutil.Prettify(s) +// SetSize sets the Size field's value. +func (s *Object) SetSize(v int64) *Object { + s.Size = &v + return s } -// GoString returns the string representation -func (s DeleteBucketPolicyInput) GoString() string { - return s.String() +// SetStorageClass sets the StorageClass field's value. +func (s *Object) SetStorageClass(v string) *Object { + s.StorageClass = &v + return s } -type DeleteBucketPolicyOutput struct { +// Object Identifier is unique value to identify objects. +type ObjectIdentifier struct { _ struct{} `type:"structure"` + + // Key name of the object to delete. + // + // Key is a required field + Key *string `min:"1" type:"string" required:"true"` + + // VersionId for the specific version of the object to delete. + VersionId *string `type:"string"` } // String returns the string representation -func (s DeleteBucketPolicyOutput) String() string { +func (s ObjectIdentifier) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketPolicyOutput) GoString() string { +func (s ObjectIdentifier) GoString() string { return s.String() } -type DeleteBucketReplicationInput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ObjectIdentifier) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ObjectIdentifier"} + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s DeleteBucketReplicationInput) String() string { - return awsutil.Prettify(s) +// SetKey sets the Key field's value. +func (s *ObjectIdentifier) SetKey(v string) *ObjectIdentifier { + s.Key = &v + return s } -// GoString returns the string representation -func (s DeleteBucketReplicationInput) GoString() string { - return s.String() +// SetVersionId sets the VersionId field's value. +func (s *ObjectIdentifier) SetVersionId(v string) *ObjectIdentifier { + s.VersionId = &v + return s } -type DeleteBucketReplicationOutput struct { +// The container element for Object Lock configuration parameters. +type ObjectLockConfiguration struct { _ struct{} `type:"structure"` + + // Indicates whether this bucket has an Object Lock configuration enabled. + ObjectLockEnabled *string `type:"string" enum:"ObjectLockEnabled"` + + // The Object Lock rule in place for the specified object. + Rule *ObjectLockRule `type:"structure"` } // String returns the string representation -func (s DeleteBucketReplicationOutput) String() string { +func (s ObjectLockConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketReplicationOutput) GoString() string { +func (s ObjectLockConfiguration) GoString() string { return s.String() } -type DeleteBucketTaggingInput struct { - _ struct{} `type:"structure"` - - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` -} - -// String returns the string representation -func (s DeleteBucketTaggingInput) String() string { - return awsutil.Prettify(s) +// SetObjectLockEnabled sets the ObjectLockEnabled field's value. +func (s *ObjectLockConfiguration) SetObjectLockEnabled(v string) *ObjectLockConfiguration { + s.ObjectLockEnabled = &v + return s } -// GoString returns the string representation -func (s DeleteBucketTaggingInput) GoString() string { - return s.String() +// SetRule sets the Rule field's value. +func (s *ObjectLockConfiguration) SetRule(v *ObjectLockRule) *ObjectLockConfiguration { + s.Rule = v + return s } -type DeleteBucketTaggingOutput struct { +// A Legal Hold configuration for an object. +type ObjectLockLegalHold struct { _ struct{} `type:"structure"` + + // Indicates whether the specified object has a Legal Hold in place. + Status *string `type:"string" enum:"ObjectLockLegalHoldStatus"` } // String returns the string representation -func (s DeleteBucketTaggingOutput) String() string { +func (s ObjectLockLegalHold) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketTaggingOutput) GoString() string { +func (s ObjectLockLegalHold) GoString() string { return s.String() } -type DeleteBucketWebsiteInput struct { +// SetStatus sets the Status field's value. +func (s *ObjectLockLegalHold) SetStatus(v string) *ObjectLockLegalHold { + s.Status = &v + return s +} + +// A Retention configuration for an object. +type ObjectLockRetention struct { _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // Indicates the Retention mode for the specified object. + Mode *string `type:"string" enum:"ObjectLockRetentionMode"` + + // The date on which this Object Lock Retention will expire. + RetainUntilDate *time.Time `type:"timestamp" timestampFormat:"iso8601"` } // String returns the string representation -func (s DeleteBucketWebsiteInput) String() string { +func (s ObjectLockRetention) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketWebsiteInput) GoString() string { +func (s ObjectLockRetention) GoString() string { return s.String() } -type DeleteBucketWebsiteOutput struct { +// SetMode sets the Mode field's value. +func (s *ObjectLockRetention) SetMode(v string) *ObjectLockRetention { + s.Mode = &v + return s +} + +// SetRetainUntilDate sets the RetainUntilDate field's value. +func (s *ObjectLockRetention) SetRetainUntilDate(v time.Time) *ObjectLockRetention { + s.RetainUntilDate = &v + return s +} + +// The container element for an Object Lock rule. +type ObjectLockRule struct { _ struct{} `type:"structure"` + + // The default retention period that you want to apply to new objects placed + // in the specified bucket. + DefaultRetention *DefaultRetention `type:"structure"` } // String returns the string representation -func (s DeleteBucketWebsiteOutput) String() string { +func (s ObjectLockRule) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteBucketWebsiteOutput) GoString() string { +func (s ObjectLockRule) GoString() string { return s.String() } -type DeleteMarkerEntry struct { +// SetDefaultRetention sets the DefaultRetention field's value. +func (s *ObjectLockRule) SetDefaultRetention(v *DefaultRetention) *ObjectLockRule { + s.DefaultRetention = v + return s +} + +// The version of an object. +type ObjectVersion struct { _ struct{} `type:"structure"` + // The entity tag is an MD5 hash of that version of the object + ETag *string `type:"string"` + // Specifies whether the object is (true) or is not (false) the latest version // of an object. IsLatest *bool `type:"boolean"` @@ -2623,1662 +22086,2685 @@ type DeleteMarkerEntry struct { Key *string `min:"1" type:"string"` // Date and time the object was last modified. - LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"` + LastModified *time.Time `type:"timestamp"` + // Specifies the Owner of the object. Owner *Owner `type:"structure"` + // Size in bytes of the object. + Size *int64 `type:"integer"` + + // The class of storage used to store the object. + StorageClass *string `type:"string" enum:"ObjectVersionStorageClass"` + // Version ID of an object. VersionId *string `type:"string"` } // String returns the string representation -func (s DeleteMarkerEntry) String() string { +func (s ObjectVersion) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteMarkerEntry) GoString() string { +func (s ObjectVersion) GoString() string { return s.String() } -type DeleteObjectInput struct { - _ struct{} `type:"structure"` +// SetETag sets the ETag field's value. +func (s *ObjectVersion) SetETag(v string) *ObjectVersion { + s.ETag = &v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetIsLatest sets the IsLatest field's value. +func (s *ObjectVersion) SetIsLatest(v bool) *ObjectVersion { + s.IsLatest = &v + return s +} - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` +// SetKey sets the Key field's value. +func (s *ObjectVersion) SetKey(v string) *ObjectVersion { + s.Key = &v + return s +} - // The concatenation of the authentication device's serial number, a space, - // and the value that is displayed on your authentication device. - MFA *string `location:"header" locationName:"x-amz-mfa" type:"string"` +// SetLastModified sets the LastModified field's value. +func (s *ObjectVersion) SetLastModified(v time.Time) *ObjectVersion { + s.LastModified = &v + return s +} - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +// SetOwner sets the Owner field's value. +func (s *ObjectVersion) SetOwner(v *Owner) *ObjectVersion { + s.Owner = v + return s +} - // VersionId used to reference a specific version of the object. - VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +// SetSize sets the Size field's value. +func (s *ObjectVersion) SetSize(v int64) *ObjectVersion { + s.Size = &v + return s } -// String returns the string representation -func (s DeleteObjectInput) String() string { - return awsutil.Prettify(s) +// SetStorageClass sets the StorageClass field's value. +func (s *ObjectVersion) SetStorageClass(v string) *ObjectVersion { + s.StorageClass = &v + return s } -// GoString returns the string representation -func (s DeleteObjectInput) GoString() string { - return s.String() +// SetVersionId sets the VersionId field's value. +func (s *ObjectVersion) SetVersionId(v string) *ObjectVersion { + s.VersionId = &v + return s } -type DeleteObjectOutput struct { +// Describes the location where the restore job's output is stored. +type OutputLocation struct { _ struct{} `type:"structure"` - // Specifies whether the versioned object that was permanently deleted was (true) - // or was not (false) a delete marker. - DeleteMarker *bool `location:"header" locationName:"x-amz-delete-marker" type:"boolean"` - - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` - - // Returns the version ID of the delete marker created as a result of the DELETE - // operation. - VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` + // Describes an S3 location that will receive the results of the restore request. + S3 *Location `type:"structure"` } // String returns the string representation -func (s DeleteObjectOutput) String() string { +func (s OutputLocation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteObjectOutput) GoString() string { +func (s OutputLocation) GoString() string { return s.String() } -type DeleteObjectsInput struct { - _ struct{} `type:"structure" payload:"Delete"` - - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - - Delete *Delete `locationName:"Delete" type:"structure" required:"true"` - - // The concatenation of the authentication device's serial number, a space, - // and the value that is displayed on your authentication device. - MFA *string `location:"header" locationName:"x-amz-mfa" type:"string"` - - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *OutputLocation) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "OutputLocation"} + if s.S3 != nil { + if err := s.S3.Validate(); err != nil { + invalidParams.AddNested("S3", err.(request.ErrInvalidParams)) + } + } -// String returns the string representation -func (s DeleteObjectsInput) String() string { - return awsutil.Prettify(s) + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// GoString returns the string representation -func (s DeleteObjectsInput) GoString() string { - return s.String() +// SetS3 sets the S3 field's value. +func (s *OutputLocation) SetS3(v *Location) *OutputLocation { + s.S3 = v + return s } -type DeleteObjectsOutput struct { +// Describes how results of the Select job are serialized. +type OutputSerialization struct { _ struct{} `type:"structure"` - Deleted []*DeletedObject `type:"list" flattened:"true"` - - Errors []*Error `locationName:"Error" type:"list" flattened:"true"` + // Describes the serialization of CSV-encoded Select results. + CSV *CSVOutput `type:"structure"` - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + // Specifies JSON as request's output serialization format. + JSON *JSONOutput `type:"structure"` } // String returns the string representation -func (s DeleteObjectsOutput) String() string { +func (s OutputSerialization) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteObjectsOutput) GoString() string { +func (s OutputSerialization) GoString() string { return s.String() } -type DeletedObject struct { - _ struct{} `type:"structure"` - - DeleteMarker *bool `type:"boolean"` - - DeleteMarkerVersionId *string `type:"string"` - - Key *string `min:"1" type:"string"` - - VersionId *string `type:"string"` -} - -// String returns the string representation -func (s DeletedObject) String() string { - return awsutil.Prettify(s) +// SetCSV sets the CSV field's value. +func (s *OutputSerialization) SetCSV(v *CSVOutput) *OutputSerialization { + s.CSV = v + return s } -// GoString returns the string representation -func (s DeletedObject) GoString() string { - return s.String() +// SetJSON sets the JSON field's value. +func (s *OutputSerialization) SetJSON(v *JSONOutput) *OutputSerialization { + s.JSON = v + return s } -type Destination struct { +// Container for the owner's display name and ID +type Owner struct { _ struct{} `type:"structure"` - // Amazon resource name (ARN) of the bucket where you want Amazon S3 to store - // replicas of the object identified by the rule. - Bucket *string `type:"string" required:"true"` + // Container for the display name of the owner + DisplayName *string `type:"string"` - // The class of storage used to store the object. - StorageClass *string `type:"string" enum:"StorageClass"` + // Container for the ID of the owner + ID *string `type:"string"` } // String returns the string representation -func (s Destination) String() string { +func (s Owner) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Destination) GoString() string { +func (s Owner) GoString() string { return s.String() } -type Error struct { - _ struct{} `type:"structure"` - - Code *string `type:"string"` - - Key *string `min:"1" type:"string"` - - Message *string `type:"string"` - - VersionId *string `type:"string"` -} - -// String returns the string representation -func (s Error) String() string { - return awsutil.Prettify(s) +// SetDisplayName sets the DisplayName field's value. +func (s *Owner) SetDisplayName(v string) *Owner { + s.DisplayName = &v + return s } -// GoString returns the string representation -func (s Error) GoString() string { - return s.String() +// SetID sets the ID field's value. +func (s *Owner) SetID(v string) *Owner { + s.ID = &v + return s } -type ErrorDocument struct { +// Container for Parquet. +type ParquetInput struct { _ struct{} `type:"structure"` - - // The object key name to use when a 4XX class error occurs. - Key *string `min:"1" type:"string" required:"true"` } // String returns the string representation -func (s ErrorDocument) String() string { +func (s ParquetInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ErrorDocument) GoString() string { +func (s ParquetInput) GoString() string { return s.String() } -// Container for key value pair that defines the criteria for the filter rule. -type FilterRule struct { +// Container for elements related to a part. +type Part struct { _ struct{} `type:"structure"` - // Object key name prefix or suffix identifying one or more objects to which - // the filtering rule applies. Maximum prefix length can be up to 1,024 characters. - // Overlapping prefixes and suffixes are not supported. For more information, - // go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) - // in the Amazon Simple Storage Service Developer Guide. - Name *string `type:"string" enum:"FilterRuleName"` + // Entity tag returned when the part was uploaded. + ETag *string `type:"string"` - Value *string `type:"string"` + // Date and time at which the part was uploaded. + LastModified *time.Time `type:"timestamp"` + + // Part number identifying the part. This is a positive integer between 1 and + // 10,000. + PartNumber *int64 `type:"integer"` + + // Size in bytes of the uploaded part data. + Size *int64 `type:"integer"` } // String returns the string representation -func (s FilterRule) String() string { +func (s Part) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s FilterRule) GoString() string { +func (s Part) GoString() string { return s.String() } -type GetBucketAclInput struct { - _ struct{} `type:"structure"` +// SetETag sets the ETag field's value. +func (s *Part) SetETag(v string) *Part { + s.ETag = &v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetLastModified sets the LastModified field's value. +func (s *Part) SetLastModified(v time.Time) *Part { + s.LastModified = &v + return s } -// String returns the string representation -func (s GetBucketAclInput) String() string { - return awsutil.Prettify(s) +// SetPartNumber sets the PartNumber field's value. +func (s *Part) SetPartNumber(v int64) *Part { + s.PartNumber = &v + return s } -// GoString returns the string representation -func (s GetBucketAclInput) GoString() string { - return s.String() +// SetSize sets the Size field's value. +func (s *Part) SetSize(v int64) *Part { + s.Size = &v + return s } -type GetBucketAclOutput struct { +// The container element for a bucket's policy status. +type PolicyStatus struct { _ struct{} `type:"structure"` - // A list of grants. - Grants []*Grant `locationName:"AccessControlList" locationNameList:"Grant" type:"list"` - - Owner *Owner `type:"structure"` + // The policy status for this bucket. TRUE indicates that this bucket is public. + // FALSE indicates that the bucket is not public. + IsPublic *bool `locationName:"IsPublic" type:"boolean"` } // String returns the string representation -func (s GetBucketAclOutput) String() string { +func (s PolicyStatus) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketAclOutput) GoString() string { +func (s PolicyStatus) GoString() string { return s.String() } -type GetBucketCorsInput struct { +// SetIsPublic sets the IsPublic field's value. +func (s *PolicyStatus) SetIsPublic(v bool) *PolicyStatus { + s.IsPublic = &v + return s +} + +// This data type contains information about progress of an operation. +type Progress struct { _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // The current number of uncompressed object bytes processed. + BytesProcessed *int64 `type:"long"` + + // The current number of bytes of records payload data returned. + BytesReturned *int64 `type:"long"` + + // The current number of object bytes scanned. + BytesScanned *int64 `type:"long"` } // String returns the string representation -func (s GetBucketCorsInput) String() string { +func (s Progress) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketCorsInput) GoString() string { +func (s Progress) GoString() string { return s.String() } -type GetBucketCorsOutput struct { - _ struct{} `type:"structure"` +// SetBytesProcessed sets the BytesProcessed field's value. +func (s *Progress) SetBytesProcessed(v int64) *Progress { + s.BytesProcessed = &v + return s +} - CORSRules []*CORSRule `locationName:"CORSRule" type:"list" flattened:"true"` +// SetBytesReturned sets the BytesReturned field's value. +func (s *Progress) SetBytesReturned(v int64) *Progress { + s.BytesReturned = &v + return s +} + +// SetBytesScanned sets the BytesScanned field's value. +func (s *Progress) SetBytesScanned(v int64) *Progress { + s.BytesScanned = &v + return s +} + +// This data type contains information about the progress event of an operation. +type ProgressEvent struct { + _ struct{} `locationName:"ProgressEvent" type:"structure" payload:"Details"` + + // The Progress event details. + Details *Progress `locationName:"Details" type:"structure"` } // String returns the string representation -func (s GetBucketCorsOutput) String() string { +func (s ProgressEvent) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketCorsOutput) GoString() string { +func (s ProgressEvent) GoString() string { return s.String() } -type GetBucketLifecycleConfigurationInput struct { +// SetDetails sets the Details field's value. +func (s *ProgressEvent) SetDetails(v *Progress) *ProgressEvent { + s.Details = v + return s +} + +// The ProgressEvent is and event in the SelectObjectContentEventStream group of events. +func (s *ProgressEvent) eventSelectObjectContentEventStream() {} + +// UnmarshalEvent unmarshals the EventStream Message into the ProgressEvent value. +// This method is only used internally within the SDK's EventStream handling. +func (s *ProgressEvent) UnmarshalEvent( + payloadUnmarshaler protocol.PayloadUnmarshaler, + msg eventstream.Message, +) error { + if err := payloadUnmarshaler.UnmarshalPayload( + bytes.NewReader(msg.Payload), s, + ); err != nil { + return err + } + return nil +} + +// The PublicAccessBlock configuration that you want to apply to this Amazon +// S3 bucket. You can enable the configuration options in any combination. For +// more information about when Amazon S3 considers a bucket or object public, +// see The Meaning of "Public" (https://docs.aws.amazon.com/AmazonS3/latest/dev//access-control-block-public-access.html#access-control-block-public-access-policy-status) +// in the Amazon Simple Storage Service Developer Guide. +type PublicAccessBlockConfiguration struct { _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // Specifies whether Amazon S3 should block public access control lists (ACLs) + // for this bucket and objects in this bucket. Setting this element to TRUE + // causes the following behavior: + // + // * PUT Bucket acl and PUT Object acl calls fail if the specified ACL is + // public. + // + // * PUT Object calls fail if the request includes a public ACL. + // + // * PUT Bucket calls fail if the request includes a public ACL. + // + // Enabling this setting doesn't affect existing policies or ACLs. + BlockPublicAcls *bool `locationName:"BlockPublicAcls" type:"boolean"` + + // Specifies whether Amazon S3 should block public bucket policies for this + // bucket. Setting this element to TRUE causes Amazon S3 to reject calls to + // PUT Bucket policy if the specified bucket policy allows public access. + // + // Enabling this setting doesn't affect existing bucket policies. + BlockPublicPolicy *bool `locationName:"BlockPublicPolicy" type:"boolean"` + + // Specifies whether Amazon S3 should ignore public ACLs for this bucket and + // objects in this bucket. Setting this element to TRUE causes Amazon S3 to + // ignore all public ACLs on this bucket and objects in this bucket. + // + // Enabling this setting doesn't affect the persistence of any existing ACLs + // and doesn't prevent new public ACLs from being set. + IgnorePublicAcls *bool `locationName:"IgnorePublicAcls" type:"boolean"` + + // Specifies whether Amazon S3 should restrict public bucket policies for this + // bucket. Setting this element to TRUE restricts access to this bucket to only + // AWS services and authorized users within this account if the bucket has a + // public policy. + // + // Enabling this setting doesn't affect previously stored bucket policies, except + // that public and cross-account access within any public bucket policy, including + // non-public delegation to specific accounts, is blocked. + RestrictPublicBuckets *bool `locationName:"RestrictPublicBuckets" type:"boolean"` } // String returns the string representation -func (s GetBucketLifecycleConfigurationInput) String() string { +func (s PublicAccessBlockConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketLifecycleConfigurationInput) GoString() string { +func (s PublicAccessBlockConfiguration) GoString() string { return s.String() } -type GetBucketLifecycleConfigurationOutput struct { - _ struct{} `type:"structure"` +// SetBlockPublicAcls sets the BlockPublicAcls field's value. +func (s *PublicAccessBlockConfiguration) SetBlockPublicAcls(v bool) *PublicAccessBlockConfiguration { + s.BlockPublicAcls = &v + return s +} - Rules []*LifecycleRule `locationName:"Rule" type:"list" flattened:"true"` +// SetBlockPublicPolicy sets the BlockPublicPolicy field's value. +func (s *PublicAccessBlockConfiguration) SetBlockPublicPolicy(v bool) *PublicAccessBlockConfiguration { + s.BlockPublicPolicy = &v + return s } -// String returns the string representation -func (s GetBucketLifecycleConfigurationOutput) String() string { - return awsutil.Prettify(s) +// SetIgnorePublicAcls sets the IgnorePublicAcls field's value. +func (s *PublicAccessBlockConfiguration) SetIgnorePublicAcls(v bool) *PublicAccessBlockConfiguration { + s.IgnorePublicAcls = &v + return s } -// GoString returns the string representation -func (s GetBucketLifecycleConfigurationOutput) GoString() string { - return s.String() +// SetRestrictPublicBuckets sets the RestrictPublicBuckets field's value. +func (s *PublicAccessBlockConfiguration) SetRestrictPublicBuckets(v bool) *PublicAccessBlockConfiguration { + s.RestrictPublicBuckets = &v + return s } -type GetBucketLifecycleInput struct { - _ struct{} `type:"structure"` +type PutBucketAccelerateConfigurationInput struct { + _ struct{} `locationName:"PutBucketAccelerateConfigurationRequest" type:"structure" payload:"AccelerateConfiguration"` + + // Container for setting the transfer acceleration state. + // + // AccelerateConfiguration is a required field + AccelerateConfiguration *AccelerateConfiguration `locationName:"AccelerateConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + // Name of the bucket for which the accelerate configuration is set. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` } // String returns the string representation -func (s GetBucketLifecycleInput) String() string { +func (s PutBucketAccelerateConfigurationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketLifecycleInput) GoString() string { +func (s PutBucketAccelerateConfigurationInput) GoString() string { return s.String() } -type GetBucketLifecycleOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketAccelerateConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketAccelerateConfigurationInput"} + if s.AccelerateConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("AccelerateConfiguration")) + } + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } - Rules []*Rule `locationName:"Rule" type:"list" flattened:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAccelerateConfiguration sets the AccelerateConfiguration field's value. +func (s *PutBucketAccelerateConfigurationInput) SetAccelerateConfiguration(v *AccelerateConfiguration) *PutBucketAccelerateConfigurationInput { + s.AccelerateConfiguration = v + return s +} + +// SetBucket sets the Bucket field's value. +func (s *PutBucketAccelerateConfigurationInput) SetBucket(v string) *PutBucketAccelerateConfigurationInput { + s.Bucket = &v + return s +} + +func (s *PutBucketAccelerateConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +type PutBucketAccelerateConfigurationOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetBucketLifecycleOutput) String() string { +func (s PutBucketAccelerateConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketLifecycleOutput) GoString() string { +func (s PutBucketAccelerateConfigurationOutput) GoString() string { return s.String() } -type GetBucketLocationInput struct { - _ struct{} `type:"structure"` +type PutBucketAclInput struct { + _ struct{} `locationName:"PutBucketAclRequest" type:"structure" payload:"AccessControlPolicy"` + + // The canned ACL to apply to the bucket. + ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"BucketCannedACL"` + + // Contains the elements that set the ACL permissions for an object per grantee. + AccessControlPolicy *AccessControlPolicy `locationName:"AccessControlPolicy" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + // The bucket to which to apply the ACL. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Allows grantee the read, write, read ACP, and write ACP permissions on the + // bucket. + GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` + + // Allows grantee to list the objects in the bucket. + GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` + + // Allows grantee to read the bucket ACL. + GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` + + // Allows grantee to create, overwrite, and delete any object in the bucket. + GrantWrite *string `location:"header" locationName:"x-amz-grant-write" type:"string"` + + // Allows grantee to write the ACL for the applicable bucket. + GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` } // String returns the string representation -func (s GetBucketLocationInput) String() string { +func (s PutBucketAclInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketLocationInput) GoString() string { +func (s PutBucketAclInput) GoString() string { return s.String() } -type GetBucketLocationOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketAclInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketAclInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.AccessControlPolicy != nil { + if err := s.AccessControlPolicy.Validate(); err != nil { + invalidParams.AddNested("AccessControlPolicy", err.(request.ErrInvalidParams)) + } + } - LocationConstraint *string `type:"string" enum:"BucketLocationConstraint"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s GetBucketLocationOutput) String() string { - return awsutil.Prettify(s) +// SetACL sets the ACL field's value. +func (s *PutBucketAclInput) SetACL(v string) *PutBucketAclInput { + s.ACL = &v + return s } -// GoString returns the string representation -func (s GetBucketLocationOutput) GoString() string { - return s.String() +// SetAccessControlPolicy sets the AccessControlPolicy field's value. +func (s *PutBucketAclInput) SetAccessControlPolicy(v *AccessControlPolicy) *PutBucketAclInput { + s.AccessControlPolicy = v + return s } -type GetBucketLoggingInput struct { - _ struct{} `type:"structure"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketAclInput) SetBucket(v string) *PutBucketAclInput { + s.Bucket = &v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +func (s *PutBucketAclInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket } -// String returns the string representation -func (s GetBucketLoggingInput) String() string { - return awsutil.Prettify(s) +// SetGrantFullControl sets the GrantFullControl field's value. +func (s *PutBucketAclInput) SetGrantFullControl(v string) *PutBucketAclInput { + s.GrantFullControl = &v + return s } -// GoString returns the string representation -func (s GetBucketLoggingInput) GoString() string { - return s.String() +// SetGrantRead sets the GrantRead field's value. +func (s *PutBucketAclInput) SetGrantRead(v string) *PutBucketAclInput { + s.GrantRead = &v + return s } -type GetBucketLoggingOutput struct { - _ struct{} `type:"structure"` +// SetGrantReadACP sets the GrantReadACP field's value. +func (s *PutBucketAclInput) SetGrantReadACP(v string) *PutBucketAclInput { + s.GrantReadACP = &v + return s +} - LoggingEnabled *LoggingEnabled `type:"structure"` +// SetGrantWrite sets the GrantWrite field's value. +func (s *PutBucketAclInput) SetGrantWrite(v string) *PutBucketAclInput { + s.GrantWrite = &v + return s +} + +// SetGrantWriteACP sets the GrantWriteACP field's value. +func (s *PutBucketAclInput) SetGrantWriteACP(v string) *PutBucketAclInput { + s.GrantWriteACP = &v + return s +} + +type PutBucketAclOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetBucketLoggingOutput) String() string { +func (s PutBucketAclOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketLoggingOutput) GoString() string { +func (s PutBucketAclOutput) GoString() string { return s.String() } -type GetBucketNotificationConfigurationRequest struct { - _ struct{} `type:"structure"` +type PutBucketAnalyticsConfigurationInput struct { + _ struct{} `locationName:"PutBucketAnalyticsConfigurationRequest" type:"structure" payload:"AnalyticsConfiguration"` - // Name of the buket to get the notification configuration for. + // The configuration and any analyses for the analytics filter. + // + // AnalyticsConfiguration is a required field + AnalyticsConfiguration *AnalyticsConfiguration `locationName:"AnalyticsConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + + // The name of the bucket to which an analytics configuration is stored. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ID that identifies the analytics configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` } // String returns the string representation -func (s GetBucketNotificationConfigurationRequest) String() string { +func (s PutBucketAnalyticsConfigurationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketNotificationConfigurationRequest) GoString() string { +func (s PutBucketAnalyticsConfigurationInput) GoString() string { return s.String() } -type GetBucketPolicyInput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketAnalyticsConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketAnalyticsConfigurationInput"} + if s.AnalyticsConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("AnalyticsConfiguration")) + } + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + if s.AnalyticsConfiguration != nil { + if err := s.AnalyticsConfiguration.Validate(); err != nil { + invalidParams.AddNested("AnalyticsConfiguration", err.(request.ErrInvalidParams)) + } + } - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s GetBucketPolicyInput) String() string { - return awsutil.Prettify(s) +// SetAnalyticsConfiguration sets the AnalyticsConfiguration field's value. +func (s *PutBucketAnalyticsConfigurationInput) SetAnalyticsConfiguration(v *AnalyticsConfiguration) *PutBucketAnalyticsConfigurationInput { + s.AnalyticsConfiguration = v + return s } -// GoString returns the string representation -func (s GetBucketPolicyInput) GoString() string { - return s.String() +// SetBucket sets the Bucket field's value. +func (s *PutBucketAnalyticsConfigurationInput) SetBucket(v string) *PutBucketAnalyticsConfigurationInput { + s.Bucket = &v + return s } -type GetBucketPolicyOutput struct { - _ struct{} `type:"structure" payload:"Policy"` +func (s *PutBucketAnalyticsConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // The bucket policy as a JSON document. - Policy *string `type:"string"` +// SetId sets the Id field's value. +func (s *PutBucketAnalyticsConfigurationInput) SetId(v string) *PutBucketAnalyticsConfigurationInput { + s.Id = &v + return s +} + +type PutBucketAnalyticsConfigurationOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetBucketPolicyOutput) String() string { +func (s PutBucketAnalyticsConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketPolicyOutput) GoString() string { +func (s PutBucketAnalyticsConfigurationOutput) GoString() string { return s.String() } -type GetBucketReplicationInput struct { - _ struct{} `type:"structure"` +type PutBucketCorsInput struct { + _ struct{} `locationName:"PutBucketCorsRequest" type:"structure" payload:"CORSConfiguration"` + // Specifies the bucket impacted by the corsconfiguration. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Describes the cross-origin access configuration for objects in an Amazon + // S3 bucket. For more information, see Enabling Cross-Origin Resource Sharing + // (https://docs.aws.amazon.com/AmazonS3/latest/dev//cors.html) in the Amazon + // Simple Storage Service Developer Guide. + // + // CORSConfiguration is a required field + CORSConfiguration *CORSConfiguration `locationName:"CORSConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s GetBucketReplicationInput) String() string { +func (s PutBucketCorsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketReplicationInput) GoString() string { +func (s PutBucketCorsInput) GoString() string { return s.String() } -type GetBucketReplicationOutput struct { - _ struct{} `type:"structure" payload:"ReplicationConfiguration"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketCorsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketCorsInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.CORSConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("CORSConfiguration")) + } + if s.CORSConfiguration != nil { + if err := s.CORSConfiguration.Validate(); err != nil { + invalidParams.AddNested("CORSConfiguration", err.(request.ErrInvalidParams)) + } + } - // Container for replication rules. You can add as many as 1,000 rules. Total - // replication configuration size can be up to 2 MB. - ReplicationConfiguration *ReplicationConfiguration `type:"structure"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s GetBucketReplicationOutput) String() string { - return awsutil.Prettify(s) +// SetBucket sets the Bucket field's value. +func (s *PutBucketCorsInput) SetBucket(v string) *PutBucketCorsInput { + s.Bucket = &v + return s } -// GoString returns the string representation -func (s GetBucketReplicationOutput) GoString() string { - return s.String() +func (s *PutBucketCorsInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket } -type GetBucketRequestPaymentInput struct { - _ struct{} `type:"structure"` +// SetCORSConfiguration sets the CORSConfiguration field's value. +func (s *PutBucketCorsInput) SetCORSConfiguration(v *CORSConfiguration) *PutBucketCorsInput { + s.CORSConfiguration = v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +type PutBucketCorsOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetBucketRequestPaymentInput) String() string { +func (s PutBucketCorsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketRequestPaymentInput) GoString() string { +func (s PutBucketCorsOutput) GoString() string { return s.String() } -type GetBucketRequestPaymentOutput struct { - _ struct{} `type:"structure"` +type PutBucketEncryptionInput struct { + _ struct{} `locationName:"PutBucketEncryptionRequest" type:"structure" payload:"ServerSideEncryptionConfiguration"` - // Specifies who pays for the download and request fees. - Payer *string `type:"string" enum:"Payer"` + // Specifies default encryption for a bucket using server-side encryption with + // Amazon S3-managed keys (SSE-S3) or customer master keys stored in AWS KMS + // (SSE-KMS). For information about the Amazon S3 default encryption feature, + // see Amazon S3 Default Bucket Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html) + // in the Amazon Simple Storage Service Developer Guide. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Specifies the default server-side-encryption configuration. + // + // ServerSideEncryptionConfiguration is a required field + ServerSideEncryptionConfiguration *ServerSideEncryptionConfiguration `locationName:"ServerSideEncryptionConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s GetBucketRequestPaymentOutput) String() string { +func (s PutBucketEncryptionInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketRequestPaymentOutput) GoString() string { +func (s PutBucketEncryptionInput) GoString() string { return s.String() } -type GetBucketTaggingInput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketEncryptionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketEncryptionInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.ServerSideEncryptionConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("ServerSideEncryptionConfiguration")) + } + if s.ServerSideEncryptionConfiguration != nil { + if err := s.ServerSideEncryptionConfiguration.Validate(); err != nil { + invalidParams.AddNested("ServerSideEncryptionConfiguration", err.(request.ErrInvalidParams)) + } + } - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s GetBucketTaggingInput) String() string { - return awsutil.Prettify(s) +// SetBucket sets the Bucket field's value. +func (s *PutBucketEncryptionInput) SetBucket(v string) *PutBucketEncryptionInput { + s.Bucket = &v + return s } -// GoString returns the string representation -func (s GetBucketTaggingInput) GoString() string { - return s.String() +func (s *PutBucketEncryptionInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket } -type GetBucketTaggingOutput struct { - _ struct{} `type:"structure"` +// SetServerSideEncryptionConfiguration sets the ServerSideEncryptionConfiguration field's value. +func (s *PutBucketEncryptionInput) SetServerSideEncryptionConfiguration(v *ServerSideEncryptionConfiguration) *PutBucketEncryptionInput { + s.ServerSideEncryptionConfiguration = v + return s +} - TagSet []*Tag `locationNameList:"Tag" type:"list" required:"true"` +type PutBucketEncryptionOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetBucketTaggingOutput) String() string { +func (s PutBucketEncryptionOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketTaggingOutput) GoString() string { +func (s PutBucketEncryptionOutput) GoString() string { return s.String() } -type GetBucketVersioningInput struct { - _ struct{} `type:"structure"` +type PutBucketInventoryConfigurationInput struct { + _ struct{} `locationName:"PutBucketInventoryConfigurationRequest" type:"structure" payload:"InventoryConfiguration"` + // The name of the bucket where the inventory configuration will be stored. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The ID used to identify the inventory configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` + + // Specifies the inventory configuration. + // + // InventoryConfiguration is a required field + InventoryConfiguration *InventoryConfiguration `locationName:"InventoryConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s GetBucketVersioningInput) String() string { +func (s PutBucketInventoryConfigurationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketVersioningInput) GoString() string { +func (s PutBucketInventoryConfigurationInput) GoString() string { return s.String() } -type GetBucketVersioningOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketInventoryConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketInventoryConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + if s.InventoryConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("InventoryConfiguration")) + } + if s.InventoryConfiguration != nil { + if err := s.InventoryConfiguration.Validate(); err != nil { + invalidParams.AddNested("InventoryConfiguration", err.(request.ErrInvalidParams)) + } + } - // Specifies whether MFA delete is enabled in the bucket versioning configuration. - // This element is only returned if the bucket has been configured with MFA - // delete. If the bucket has never been so configured, this element is not returned. - MFADelete *string `locationName:"MfaDelete" type:"string" enum:"MFADeleteStatus"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // The versioning state of the bucket. - Status *string `type:"string" enum:"BucketVersioningStatus"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketInventoryConfigurationInput) SetBucket(v string) *PutBucketInventoryConfigurationInput { + s.Bucket = &v + return s +} + +func (s *PutBucketInventoryConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetId sets the Id field's value. +func (s *PutBucketInventoryConfigurationInput) SetId(v string) *PutBucketInventoryConfigurationInput { + s.Id = &v + return s +} + +// SetInventoryConfiguration sets the InventoryConfiguration field's value. +func (s *PutBucketInventoryConfigurationInput) SetInventoryConfiguration(v *InventoryConfiguration) *PutBucketInventoryConfigurationInput { + s.InventoryConfiguration = v + return s +} + +type PutBucketInventoryConfigurationOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetBucketVersioningOutput) String() string { +func (s PutBucketInventoryConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketVersioningOutput) GoString() string { +func (s PutBucketInventoryConfigurationOutput) GoString() string { return s.String() } -type GetBucketWebsiteInput struct { - _ struct{} `type:"structure"` +type PutBucketLifecycleConfigurationInput struct { + _ struct{} `locationName:"PutBucketLifecycleConfigurationRequest" type:"structure" payload:"LifecycleConfiguration"` + // The name of the bucket for which to set the configuration. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Container for lifecycle rules. You can add as many as 1,000 rules. + LifecycleConfiguration *BucketLifecycleConfiguration `locationName:"LifecycleConfiguration" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s GetBucketWebsiteInput) String() string { +func (s PutBucketLifecycleConfigurationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketWebsiteInput) GoString() string { +func (s PutBucketLifecycleConfigurationInput) GoString() string { return s.String() } -type GetBucketWebsiteOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketLifecycleConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketLifecycleConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.LifecycleConfiguration != nil { + if err := s.LifecycleConfiguration.Validate(); err != nil { + invalidParams.AddNested("LifecycleConfiguration", err.(request.ErrInvalidParams)) + } + } - ErrorDocument *ErrorDocument `type:"structure"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - IndexDocument *IndexDocument `type:"structure"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketLifecycleConfigurationInput) SetBucket(v string) *PutBucketLifecycleConfigurationInput { + s.Bucket = &v + return s +} - RedirectAllRequestsTo *RedirectAllRequestsTo `type:"structure"` +func (s *PutBucketLifecycleConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - RoutingRules []*RoutingRule `locationNameList:"RoutingRule" type:"list"` +// SetLifecycleConfiguration sets the LifecycleConfiguration field's value. +func (s *PutBucketLifecycleConfigurationInput) SetLifecycleConfiguration(v *BucketLifecycleConfiguration) *PutBucketLifecycleConfigurationInput { + s.LifecycleConfiguration = v + return s +} + +type PutBucketLifecycleConfigurationOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetBucketWebsiteOutput) String() string { +func (s PutBucketLifecycleConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetBucketWebsiteOutput) GoString() string { +func (s PutBucketLifecycleConfigurationOutput) GoString() string { return s.String() } -type GetObjectAclInput struct { - _ struct{} `type:"structure"` +type PutBucketLifecycleInput struct { + _ struct{} `locationName:"PutBucketLifecycleRequest" type:"structure" payload:"LifecycleConfiguration"` + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` - - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` - - // VersionId used to reference a specific version of the object. - VersionId *string `location:"querystring" locationName:"versionId" type:"string"` + // Container for lifecycle rules. You can add as many as 1000 rules. + LifecycleConfiguration *LifecycleConfiguration `locationName:"LifecycleConfiguration" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s GetObjectAclInput) String() string { +func (s PutBucketLifecycleInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetObjectAclInput) GoString() string { +func (s PutBucketLifecycleInput) GoString() string { return s.String() } -type GetObjectAclOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketLifecycleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketLifecycleInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.LifecycleConfiguration != nil { + if err := s.LifecycleConfiguration.Validate(); err != nil { + invalidParams.AddNested("LifecycleConfiguration", err.(request.ErrInvalidParams)) + } + } - // A list of grants. - Grants []*Grant `locationName:"AccessControlList" locationNameList:"Grant" type:"list"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - Owner *Owner `type:"structure"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketLifecycleInput) SetBucket(v string) *PutBucketLifecycleInput { + s.Bucket = &v + return s +} - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +func (s *PutBucketLifecycleInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetLifecycleConfiguration sets the LifecycleConfiguration field's value. +func (s *PutBucketLifecycleInput) SetLifecycleConfiguration(v *LifecycleConfiguration) *PutBucketLifecycleInput { + s.LifecycleConfiguration = v + return s +} + +type PutBucketLifecycleOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetObjectAclOutput) String() string { +func (s PutBucketLifecycleOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetObjectAclOutput) GoString() string { +func (s PutBucketLifecycleOutput) GoString() string { return s.String() } -type GetObjectInput struct { - _ struct{} `type:"structure"` +type PutBucketLoggingInput struct { + _ struct{} `locationName:"PutBucketLoggingRequest" type:"structure" payload:"BucketLoggingStatus"` + // The name of the bucket for which to set the logging parameters. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // Return the object only if its entity tag (ETag) is the same as the one specified, - // otherwise return a 412 (precondition failed). - IfMatch *string `location:"header" locationName:"If-Match" type:"string"` - - // Return the object only if it has been modified since the specified time, - // otherwise return a 304 (not modified). - IfModifiedSince *time.Time `location:"header" locationName:"If-Modified-Since" type:"timestamp" timestampFormat:"rfc822"` - - // Return the object only if its entity tag (ETag) is different from the one - // specified, otherwise return a 304 (not modified). - IfNoneMatch *string `location:"header" locationName:"If-None-Match" type:"string"` - - // Return the object only if it has not been modified since the specified time, - // otherwise return a 412 (precondition failed). - IfUnmodifiedSince *time.Time `location:"header" locationName:"If-Unmodified-Since" type:"timestamp" timestampFormat:"rfc822"` - - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` - - // Downloads the specified range bytes of an object. For more information about - // the HTTP Range header, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35. - Range *string `location:"header" locationName:"Range" type:"string"` - - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` - - // Sets the Cache-Control header of the response. - ResponseCacheControl *string `location:"querystring" locationName:"response-cache-control" type:"string"` - - // Sets the Content-Disposition header of the response - ResponseContentDisposition *string `location:"querystring" locationName:"response-content-disposition" type:"string"` - - // Sets the Content-Encoding header of the response. - ResponseContentEncoding *string `location:"querystring" locationName:"response-content-encoding" type:"string"` - - // Sets the Content-Language header of the response. - ResponseContentLanguage *string `location:"querystring" locationName:"response-content-language" type:"string"` - - // Sets the Content-Type header of the response. - ResponseContentType *string `location:"querystring" locationName:"response-content-type" type:"string"` - - // Sets the Expires header of the response. - ResponseExpires *time.Time `location:"querystring" locationName:"response-expires" type:"timestamp" timestampFormat:"iso8601"` - - // Specifies the algorithm to use to when encrypting the object (e.g., AES256). - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` - - // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting - // data. This value is used to store the object and then it is discarded; Amazon - // does not store the encryption key. The key must be appropriate for use with - // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm - // header. - SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string"` - - // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. - // Amazon S3 uses this header for a message integrity check to ensure the encryption - // key was transmitted without error. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` - - // VersionId used to reference a specific version of the object. - VersionId *string `location:"querystring" locationName:"versionId" type:"string"` + // Container for logging status information. + // + // BucketLoggingStatus is a required field + BucketLoggingStatus *BucketLoggingStatus `locationName:"BucketLoggingStatus" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s GetObjectInput) String() string { +func (s PutBucketLoggingInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetObjectInput) GoString() string { +func (s PutBucketLoggingInput) GoString() string { return s.String() } -type GetObjectOutput struct { - _ struct{} `type:"structure" payload:"Body"` - - AcceptRanges *string `location:"header" locationName:"accept-ranges" type:"string"` - - // Object data. - Body io.ReadCloser `type:"blob"` - - // Specifies caching behavior along the request/reply chain. - CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` - - // Specifies presentational information for the object. - ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` - - // Specifies what content encodings have been applied to the object and thus - // what decoding mechanisms must be applied to obtain the media-type referenced - // by the Content-Type header field. - ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` - - // The language the content is in. - ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketLoggingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketLoggingInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.BucketLoggingStatus == nil { + invalidParams.Add(request.NewErrParamRequired("BucketLoggingStatus")) + } + if s.BucketLoggingStatus != nil { + if err := s.BucketLoggingStatus.Validate(); err != nil { + invalidParams.AddNested("BucketLoggingStatus", err.(request.ErrInvalidParams)) + } + } - // Size of the body in bytes. - ContentLength *int64 `location:"header" locationName:"Content-Length" type:"integer"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // The portion of the object returned in the response. - ContentRange *string `location:"header" locationName:"Content-Range" type:"string"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketLoggingInput) SetBucket(v string) *PutBucketLoggingInput { + s.Bucket = &v + return s +} - // A standard MIME type describing the format of the object data. - ContentType *string `location:"header" locationName:"Content-Type" type:"string"` +func (s *PutBucketLoggingInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // Specifies whether the object retrieved was (true) or was not (false) a Delete - // Marker. If false, this response header does not appear in the response. - DeleteMarker *bool `location:"header" locationName:"x-amz-delete-marker" type:"boolean"` +// SetBucketLoggingStatus sets the BucketLoggingStatus field's value. +func (s *PutBucketLoggingInput) SetBucketLoggingStatus(v *BucketLoggingStatus) *PutBucketLoggingInput { + s.BucketLoggingStatus = v + return s +} - // An ETag is an opaque identifier assigned by a web server to a specific version - // of a resource found at a URL - ETag *string `location:"header" locationName:"ETag" type:"string"` +type PutBucketLoggingOutput struct { + _ struct{} `type:"structure"` +} - // If the object expiration is configured (see PUT Bucket lifecycle), the response - // includes this header. It includes the expiry-date and rule-id key value pairs - // providing object expiration information. The value of the rule-id is URL - // encoded. - Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` +// String returns the string representation +func (s PutBucketLoggingOutput) String() string { + return awsutil.Prettify(s) +} - // The date and time at which the object is no longer cacheable. - Expires *string `location:"header" locationName:"Expires" type:"string"` +// GoString returns the string representation +func (s PutBucketLoggingOutput) GoString() string { + return s.String() +} - // Last modified date of the object - LastModified *time.Time `location:"header" locationName:"Last-Modified" type:"timestamp" timestampFormat:"rfc822"` +type PutBucketMetricsConfigurationInput struct { + _ struct{} `locationName:"PutBucketMetricsConfigurationRequest" type:"structure" payload:"MetricsConfiguration"` - // A map of metadata to store with the object in S3. - Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` + // The name of the bucket for which the metrics configuration is set. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // This is set to the number of metadata entries not returned in x-amz-meta - // headers. This can happen if you create metadata using an API like SOAP that - // supports more flexible metadata than the REST API. For example, using SOAP, - // you can create metadata whose values are not legal HTTP headers. - MissingMeta *int64 `location:"header" locationName:"x-amz-missing-meta" type:"integer"` + // The ID used to identify the metrics configuration. + // + // Id is a required field + Id *string `location:"querystring" locationName:"id" type:"string" required:"true"` - ReplicationStatus *string `location:"header" locationName:"x-amz-replication-status" type:"string" enum:"ReplicationStatus"` + // Specifies the metrics configuration. + // + // MetricsConfiguration is a required field + MetricsConfiguration *MetricsConfiguration `locationName:"MetricsConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` +} - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +// String returns the string representation +func (s PutBucketMetricsConfigurationInput) String() string { + return awsutil.Prettify(s) +} - // Provides information about object restoration operation and expiration time - // of the restored object copy. - Restore *string `location:"header" locationName:"x-amz-restore" type:"string"` +// GoString returns the string representation +func (s PutBucketMetricsConfigurationInput) GoString() string { + return s.String() +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header confirming the encryption algorithm - // used. - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketMetricsConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketMetricsConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + if s.MetricsConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("MetricsConfiguration")) + } + if s.MetricsConfiguration != nil { + if err := s.MetricsConfiguration.Validate(); err != nil { + invalidParams.AddNested("MetricsConfiguration", err.(request.ErrInvalidParams)) + } + } - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header to provide round trip message integrity - // verification of the customer-provided encryption key. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // If present, specifies the ID of the AWS Key Management Service (KMS) master - // encryption key that was used for the object. - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketMetricsConfigurationInput) SetBucket(v string) *PutBucketMetricsConfigurationInput { + s.Bucket = &v + return s +} - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` +func (s *PutBucketMetricsConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` +// SetId sets the Id field's value. +func (s *PutBucketMetricsConfigurationInput) SetId(v string) *PutBucketMetricsConfigurationInput { + s.Id = &v + return s +} - // Version of the object. - VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +// SetMetricsConfiguration sets the MetricsConfiguration field's value. +func (s *PutBucketMetricsConfigurationInput) SetMetricsConfiguration(v *MetricsConfiguration) *PutBucketMetricsConfigurationInput { + s.MetricsConfiguration = v + return s +} - // If the bucket is configured as a website, redirects requests for this object - // to another object in the same bucket or to an external URL. Amazon S3 stores - // the value of this header in the object metadata. - WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` +type PutBucketMetricsConfigurationOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetObjectOutput) String() string { +func (s PutBucketMetricsConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetObjectOutput) GoString() string { +func (s PutBucketMetricsConfigurationOutput) GoString() string { return s.String() } -type GetObjectTorrentInput struct { - _ struct{} `type:"structure"` +type PutBucketNotificationConfigurationInput struct { + _ struct{} `locationName:"PutBucketNotificationConfigurationRequest" type:"structure" payload:"NotificationConfiguration"` + // The name of the bucket. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` - - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + // A container for specifying the notification configuration of the bucket. + // If this element is empty, notifications are turned off for the bucket. + // + // NotificationConfiguration is a required field + NotificationConfiguration *NotificationConfiguration `locationName:"NotificationConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s GetObjectTorrentInput) String() string { +func (s PutBucketNotificationConfigurationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetObjectTorrentInput) GoString() string { +func (s PutBucketNotificationConfigurationInput) GoString() string { return s.String() } -type GetObjectTorrentOutput struct { - _ struct{} `type:"structure" payload:"Body"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketNotificationConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketNotificationConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.NotificationConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("NotificationConfiguration")) + } + if s.NotificationConfiguration != nil { + if err := s.NotificationConfiguration.Validate(); err != nil { + invalidParams.AddNested("NotificationConfiguration", err.(request.ErrInvalidParams)) + } + } - Body io.ReadCloser `type:"blob"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketNotificationConfigurationInput) SetBucket(v string) *PutBucketNotificationConfigurationInput { + s.Bucket = &v + return s +} + +func (s *PutBucketNotificationConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetNotificationConfiguration sets the NotificationConfiguration field's value. +func (s *PutBucketNotificationConfigurationInput) SetNotificationConfiguration(v *NotificationConfiguration) *PutBucketNotificationConfigurationInput { + s.NotificationConfiguration = v + return s +} + +type PutBucketNotificationConfigurationOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetObjectTorrentOutput) String() string { +func (s PutBucketNotificationConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetObjectTorrentOutput) GoString() string { +func (s PutBucketNotificationConfigurationOutput) GoString() string { return s.String() } -type Grant struct { - _ struct{} `type:"structure"` +type PutBucketNotificationInput struct { + _ struct{} `locationName:"PutBucketNotificationRequest" type:"structure" payload:"NotificationConfiguration"` - Grantee *Grantee `type:"structure"` + // The name of the bucket. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // Specifies the permission given to the grantee. - Permission *string `type:"string" enum:"Permission"` + // The container for the configuration. + // + // NotificationConfiguration is a required field + NotificationConfiguration *NotificationConfigurationDeprecated `locationName:"NotificationConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s Grant) String() string { +func (s PutBucketNotificationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Grant) GoString() string { +func (s PutBucketNotificationInput) GoString() string { return s.String() } -type Grantee struct { - _ struct{} `type:"structure" xmlPrefix:"xsi" xmlURI:"http://www.w3.org/2001/XMLSchema-instance"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketNotificationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketNotificationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.NotificationConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("NotificationConfiguration")) + } - // Screen name of the grantee. - DisplayName *string `type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Email address of the grantee. - EmailAddress *string `type:"string"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketNotificationInput) SetBucket(v string) *PutBucketNotificationInput { + s.Bucket = &v + return s +} - // The canonical user ID of the grantee. - ID *string `type:"string"` +func (s *PutBucketNotificationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // Type of grantee - Type *string `locationName:"xsi:type" type:"string" xmlAttribute:"true" required:"true" enum:"Type"` +// SetNotificationConfiguration sets the NotificationConfiguration field's value. +func (s *PutBucketNotificationInput) SetNotificationConfiguration(v *NotificationConfigurationDeprecated) *PutBucketNotificationInput { + s.NotificationConfiguration = v + return s +} - // URI of the grantee group. - URI *string `type:"string"` +type PutBucketNotificationOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s Grantee) String() string { +func (s PutBucketNotificationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Grantee) GoString() string { +func (s PutBucketNotificationOutput) GoString() string { return s.String() } -type HeadBucketInput struct { - _ struct{} `type:"structure"` +type PutBucketPolicyInput struct { + _ struct{} `locationName:"PutBucketPolicyRequest" type:"structure" payload:"Policy"` + // The name of the bucket. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Set this parameter to true to confirm that you want to remove your permissions + // to change this bucket policy in the future. + ConfirmRemoveSelfBucketAccess *bool `location:"header" locationName:"x-amz-confirm-remove-self-bucket-access" type:"boolean"` + + // The bucket policy as a JSON document. + // + // Policy is a required field + Policy *string `type:"string" required:"true"` } // String returns the string representation -func (s HeadBucketInput) String() string { +func (s PutBucketPolicyInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HeadBucketInput) GoString() string { +func (s PutBucketPolicyInput) GoString() string { return s.String() } -type HeadBucketOutput struct { +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketPolicyInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketPolicyInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Policy == nil { + invalidParams.Add(request.NewErrParamRequired("Policy")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *PutBucketPolicyInput) SetBucket(v string) *PutBucketPolicyInput { + s.Bucket = &v + return s +} + +func (s *PutBucketPolicyInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetConfirmRemoveSelfBucketAccess sets the ConfirmRemoveSelfBucketAccess field's value. +func (s *PutBucketPolicyInput) SetConfirmRemoveSelfBucketAccess(v bool) *PutBucketPolicyInput { + s.ConfirmRemoveSelfBucketAccess = &v + return s +} + +// SetPolicy sets the Policy field's value. +func (s *PutBucketPolicyInput) SetPolicy(v string) *PutBucketPolicyInput { + s.Policy = &v + return s +} + +type PutBucketPolicyOutput struct { _ struct{} `type:"structure"` } // String returns the string representation -func (s HeadBucketOutput) String() string { +func (s PutBucketPolicyOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HeadBucketOutput) GoString() string { +func (s PutBucketPolicyOutput) GoString() string { return s.String() } -type HeadObjectInput struct { - _ struct{} `type:"structure"` +type PutBucketReplicationInput struct { + _ struct{} `locationName:"PutBucketReplicationRequest" type:"structure" payload:"ReplicationConfiguration"` + // The name of the bucket + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // Return the object only if its entity tag (ETag) is the same as the one specified, - // otherwise return a 412 (precondition failed). - IfMatch *string `location:"header" locationName:"If-Match" type:"string"` + // A container for replication rules. You can add up to 1,000 rules. The maximum + // size of a replication configuration is 2 MB. + // + // ReplicationConfiguration is a required field + ReplicationConfiguration *ReplicationConfiguration `locationName:"ReplicationConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` - // Return the object only if it has been modified since the specified time, - // otherwise return a 304 (not modified). - IfModifiedSince *time.Time `location:"header" locationName:"If-Modified-Since" type:"timestamp" timestampFormat:"rfc822"` + Token *string `location:"header" locationName:"x-amz-bucket-object-lock-token" type:"string"` +} - // Return the object only if its entity tag (ETag) is different from the one - // specified, otherwise return a 304 (not modified). - IfNoneMatch *string `location:"header" locationName:"If-None-Match" type:"string"` +// String returns the string representation +func (s PutBucketReplicationInput) String() string { + return awsutil.Prettify(s) +} - // Return the object only if it has not been modified since the specified time, - // otherwise return a 412 (precondition failed). - IfUnmodifiedSince *time.Time `location:"header" locationName:"If-Unmodified-Since" type:"timestamp" timestampFormat:"rfc822"` +// GoString returns the string representation +func (s PutBucketReplicationInput) GoString() string { + return s.String() +} - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketReplicationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketReplicationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.ReplicationConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("ReplicationConfiguration")) + } + if s.ReplicationConfiguration != nil { + if err := s.ReplicationConfiguration.Validate(); err != nil { + invalidParams.AddNested("ReplicationConfiguration", err.(request.ErrInvalidParams)) + } + } - // Downloads the specified range bytes of an object. For more information about - // the HTTP Range header, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35. - Range *string `location:"header" locationName:"Range" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketReplicationInput) SetBucket(v string) *PutBucketReplicationInput { + s.Bucket = &v + return s +} - // Specifies the algorithm to use to when encrypting the object (e.g., AES256). - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` +func (s *PutBucketReplicationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting - // data. This value is used to store the object and then it is discarded; Amazon - // does not store the encryption key. The key must be appropriate for use with - // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm - // header. - SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string"` +// SetReplicationConfiguration sets the ReplicationConfiguration field's value. +func (s *PutBucketReplicationInput) SetReplicationConfiguration(v *ReplicationConfiguration) *PutBucketReplicationInput { + s.ReplicationConfiguration = v + return s +} - // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. - // Amazon S3 uses this header for a message integrity check to ensure the encryption - // key was transmitted without error. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` +// SetToken sets the Token field's value. +func (s *PutBucketReplicationInput) SetToken(v string) *PutBucketReplicationInput { + s.Token = &v + return s +} - // VersionId used to reference a specific version of the object. - VersionId *string `location:"querystring" locationName:"versionId" type:"string"` +type PutBucketReplicationOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s HeadObjectInput) String() string { +func (s PutBucketReplicationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HeadObjectInput) GoString() string { +func (s PutBucketReplicationOutput) GoString() string { return s.String() } -type HeadObjectOutput struct { - _ struct{} `type:"structure"` - - AcceptRanges *string `location:"header" locationName:"accept-ranges" type:"string"` +type PutBucketRequestPaymentInput struct { + _ struct{} `locationName:"PutBucketRequestPaymentRequest" type:"structure" payload:"RequestPaymentConfiguration"` - // Specifies caching behavior along the request/reply chain. - CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` + // The bucket name. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // Specifies presentational information for the object. - ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` + // Container for Payer. + // + // RequestPaymentConfiguration is a required field + RequestPaymentConfiguration *RequestPaymentConfiguration `locationName:"RequestPaymentConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` +} - // Specifies what content encodings have been applied to the object and thus - // what decoding mechanisms must be applied to obtain the media-type referenced - // by the Content-Type header field. - ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` +// String returns the string representation +func (s PutBucketRequestPaymentInput) String() string { + return awsutil.Prettify(s) +} - // The language the content is in. - ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` +// GoString returns the string representation +func (s PutBucketRequestPaymentInput) GoString() string { + return s.String() +} - // Size of the body in bytes. - ContentLength *int64 `location:"header" locationName:"Content-Length" type:"integer"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketRequestPaymentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketRequestPaymentInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.RequestPaymentConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("RequestPaymentConfiguration")) + } + if s.RequestPaymentConfiguration != nil { + if err := s.RequestPaymentConfiguration.Validate(); err != nil { + invalidParams.AddNested("RequestPaymentConfiguration", err.(request.ErrInvalidParams)) + } + } - // A standard MIME type describing the format of the object data. - ContentType *string `location:"header" locationName:"Content-Type" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Specifies whether the object retrieved was (true) or was not (false) a Delete - // Marker. If false, this response header does not appear in the response. - DeleteMarker *bool `location:"header" locationName:"x-amz-delete-marker" type:"boolean"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketRequestPaymentInput) SetBucket(v string) *PutBucketRequestPaymentInput { + s.Bucket = &v + return s +} - // An ETag is an opaque identifier assigned by a web server to a specific version - // of a resource found at a URL - ETag *string `location:"header" locationName:"ETag" type:"string"` +func (s *PutBucketRequestPaymentInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // If the object expiration is configured (see PUT Bucket lifecycle), the response - // includes this header. It includes the expiry-date and rule-id key value pairs - // providing object expiration information. The value of the rule-id is URL - // encoded. - Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` +// SetRequestPaymentConfiguration sets the RequestPaymentConfiguration field's value. +func (s *PutBucketRequestPaymentInput) SetRequestPaymentConfiguration(v *RequestPaymentConfiguration) *PutBucketRequestPaymentInput { + s.RequestPaymentConfiguration = v + return s +} - // The date and time at which the object is no longer cacheable. - Expires *string `location:"header" locationName:"Expires" type:"string"` +type PutBucketRequestPaymentOutput struct { + _ struct{} `type:"structure"` +} - // Last modified date of the object - LastModified *time.Time `location:"header" locationName:"Last-Modified" type:"timestamp" timestampFormat:"rfc822"` +// String returns the string representation +func (s PutBucketRequestPaymentOutput) String() string { + return awsutil.Prettify(s) +} - // A map of metadata to store with the object in S3. - Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` +// GoString returns the string representation +func (s PutBucketRequestPaymentOutput) GoString() string { + return s.String() +} - // This is set to the number of metadata entries not returned in x-amz-meta - // headers. This can happen if you create metadata using an API like SOAP that - // supports more flexible metadata than the REST API. For example, using SOAP, - // you can create metadata whose values are not legal HTTP headers. - MissingMeta *int64 `location:"header" locationName:"x-amz-missing-meta" type:"integer"` +type PutBucketTaggingInput struct { + _ struct{} `locationName:"PutBucketTaggingRequest" type:"structure" payload:"Tagging"` - ReplicationStatus *string `location:"header" locationName:"x-amz-replication-status" type:"string" enum:"ReplicationStatus"` + // The bucket name. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + // Container for the TagSet and Tag elements. + // + // Tagging is a required field + Tagging *Tagging `locationName:"Tagging" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` +} - // Provides information about object restoration operation and expiration time - // of the restored object copy. - Restore *string `location:"header" locationName:"x-amz-restore" type:"string"` +// String returns the string representation +func (s PutBucketTaggingInput) String() string { + return awsutil.Prettify(s) +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header confirming the encryption algorithm - // used. - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` +// GoString returns the string representation +func (s PutBucketTaggingInput) GoString() string { + return s.String() +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header to provide round trip message integrity - // verification of the customer-provided encryption key. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketTaggingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketTaggingInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Tagging == nil { + invalidParams.Add(request.NewErrParamRequired("Tagging")) + } + if s.Tagging != nil { + if err := s.Tagging.Validate(); err != nil { + invalidParams.AddNested("Tagging", err.(request.ErrInvalidParams)) + } + } - // If present, specifies the ID of the AWS Key Management Service (KMS) master - // encryption key that was used for the object. - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketTaggingInput) SetBucket(v string) *PutBucketTaggingInput { + s.Bucket = &v + return s +} - StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` +func (s *PutBucketTaggingInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // Version of the object. - VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +// SetTagging sets the Tagging field's value. +func (s *PutBucketTaggingInput) SetTagging(v *Tagging) *PutBucketTaggingInput { + s.Tagging = v + return s +} - // If the bucket is configured as a website, redirects requests for this object - // to another object in the same bucket or to an external URL. Amazon S3 stores - // the value of this header in the object metadata. - WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` +type PutBucketTaggingOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s HeadObjectOutput) String() string { +func (s PutBucketTaggingOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HeadObjectOutput) GoString() string { +func (s PutBucketTaggingOutput) GoString() string { return s.String() } -type IndexDocument struct { - _ struct{} `type:"structure"` +type PutBucketVersioningInput struct { + _ struct{} `locationName:"PutBucketVersioningRequest" type:"structure" payload:"VersioningConfiguration"` - // A suffix that is appended to a request that is for a directory on the website - // endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ - // the data that is returned will be for the object with the key name images/index.html) - // The suffix must not be empty and must not include a slash character. - Suffix *string `type:"string" required:"true"` + // The bucket name. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The concatenation of the authentication device's serial number, a space, + // and the value that is displayed on your authentication device. + MFA *string `location:"header" locationName:"x-amz-mfa" type:"string"` + + // Container for setting the versioning state. + // + // VersioningConfiguration is a required field + VersioningConfiguration *VersioningConfiguration `locationName:"VersioningConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s IndexDocument) String() string { +func (s PutBucketVersioningInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s IndexDocument) GoString() string { +func (s PutBucketVersioningInput) GoString() string { return s.String() } -type Initiator struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketVersioningInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketVersioningInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.VersioningConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("VersioningConfiguration")) + } - // Name of the Principal. - DisplayName *string `type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // If the principal is an AWS account, it provides the Canonical User ID. If - // the principal is an IAM User, it provides a user ARN value. - ID *string `type:"string"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketVersioningInput) SetBucket(v string) *PutBucketVersioningInput { + s.Bucket = &v + return s +} + +func (s *PutBucketVersioningInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetMFA sets the MFA field's value. +func (s *PutBucketVersioningInput) SetMFA(v string) *PutBucketVersioningInput { + s.MFA = &v + return s +} + +// SetVersioningConfiguration sets the VersioningConfiguration field's value. +func (s *PutBucketVersioningInput) SetVersioningConfiguration(v *VersioningConfiguration) *PutBucketVersioningInput { + s.VersioningConfiguration = v + return s +} + +type PutBucketVersioningOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s Initiator) String() string { +func (s PutBucketVersioningOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Initiator) GoString() string { +func (s PutBucketVersioningOutput) GoString() string { return s.String() } -// Container for object key name prefix and suffix filtering rules. -type KeyFilter struct { - _ struct{} `type:"structure"` +type PutBucketWebsiteInput struct { + _ struct{} `locationName:"PutBucketWebsiteRequest" type:"structure" payload:"WebsiteConfiguration"` - // A list of containers for key value pair that defines the criteria for the - // filter rule. - FilterRules []*FilterRule `locationName:"FilterRule" type:"list" flattened:"true"` + // The bucket name. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Container for the request. + // + // WebsiteConfiguration is a required field + WebsiteConfiguration *WebsiteConfiguration `locationName:"WebsiteConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s KeyFilter) String() string { +func (s PutBucketWebsiteInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s KeyFilter) GoString() string { +func (s PutBucketWebsiteInput) GoString() string { return s.String() } -// Container for specifying the AWS Lambda notification configuration. -type LambdaFunctionConfiguration struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutBucketWebsiteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutBucketWebsiteInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.WebsiteConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("WebsiteConfiguration")) + } + if s.WebsiteConfiguration != nil { + if err := s.WebsiteConfiguration.Validate(); err != nil { + invalidParams.AddNested("WebsiteConfiguration", err.(request.ErrInvalidParams)) + } + } - Events []*string `locationName:"Event" type:"list" flattened:"true" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Container for object key name filtering rules. For information about key - // name filtering, go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) - // in the Amazon Simple Storage Service Developer Guide. - Filter *NotificationConfigurationFilter `type:"structure"` +// SetBucket sets the Bucket field's value. +func (s *PutBucketWebsiteInput) SetBucket(v string) *PutBucketWebsiteInput { + s.Bucket = &v + return s +} - // Optional unique identifier for configurations in a notification configuration. - // If you don't provide one, Amazon S3 will assign an ID. - Id *string `type:"string"` +func (s *PutBucketWebsiteInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // Lambda cloud function ARN that Amazon S3 can invoke when it detects events - // of the specified type. - LambdaFunctionArn *string `locationName:"CloudFunction" type:"string" required:"true"` +// SetWebsiteConfiguration sets the WebsiteConfiguration field's value. +func (s *PutBucketWebsiteInput) SetWebsiteConfiguration(v *WebsiteConfiguration) *PutBucketWebsiteInput { + s.WebsiteConfiguration = v + return s +} + +type PutBucketWebsiteOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s LambdaFunctionConfiguration) String() string { +func (s PutBucketWebsiteOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s LambdaFunctionConfiguration) GoString() string { +func (s PutBucketWebsiteOutput) GoString() string { return s.String() } -type LifecycleConfiguration struct { - _ struct{} `type:"structure"` +type PutObjectAclInput struct { + _ struct{} `locationName:"PutObjectAclRequest" type:"structure" payload:"AccessControlPolicy"` - Rules []*Rule `locationName:"Rule" type:"list" flattened:"true" required:"true"` + // The canned ACL to apply to the object. For more information, see Canned ACL + // (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL) + ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"ObjectCannedACL"` + + // Contains the elements that set the ACL permissions for an object per grantee. + AccessControlPolicy *AccessControlPolicy `locationName:"AccessControlPolicy" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + + // The name of the bucket to which the ACL is being added. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Allows grantee the read, write, read ACP, and write ACP permissions on the + // bucket. + GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` + + // Allows grantee to list the objects in the bucket. + GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` + + // Allows grantee to read the bucket ACL. + GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` + + // Allows grantee to create, overwrite, and delete any object in the bucket. + GrantWrite *string `location:"header" locationName:"x-amz-grant-write" type:"string"` + + // Allows grantee to write the ACL for the applicable bucket. + GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` + + // Key for which the PUT operation was initiated. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // VersionId used to reference a specific version of the object. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` } // String returns the string representation -func (s LifecycleConfiguration) String() string { +func (s PutObjectAclInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s LifecycleConfiguration) GoString() string { +func (s PutObjectAclInput) GoString() string { return s.String() } -type LifecycleExpiration struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutObjectAclInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutObjectAclInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.AccessControlPolicy != nil { + if err := s.AccessControlPolicy.Validate(); err != nil { + invalidParams.AddNested("AccessControlPolicy", err.(request.ErrInvalidParams)) + } + } - // Indicates at what date the object is to be moved or deleted. Should be in - // GMT ISO 8601 Format. - Date *time.Time `type:"timestamp" timestampFormat:"iso8601"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Indicates the lifetime, in days, of the objects that are subject to the rule. - // The value must be a non-zero positive integer. - Days *int64 `type:"integer"` +// SetACL sets the ACL field's value. +func (s *PutObjectAclInput) SetACL(v string) *PutObjectAclInput { + s.ACL = &v + return s } -// String returns the string representation -func (s LifecycleExpiration) String() string { - return awsutil.Prettify(s) +// SetAccessControlPolicy sets the AccessControlPolicy field's value. +func (s *PutObjectAclInput) SetAccessControlPolicy(v *AccessControlPolicy) *PutObjectAclInput { + s.AccessControlPolicy = v + return s } -// GoString returns the string representation -func (s LifecycleExpiration) GoString() string { - return s.String() +// SetBucket sets the Bucket field's value. +func (s *PutObjectAclInput) SetBucket(v string) *PutObjectAclInput { + s.Bucket = &v + return s } -type LifecycleRule struct { - _ struct{} `type:"structure"` +func (s *PutObjectAclInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - Expiration *LifecycleExpiration `type:"structure"` +// SetGrantFullControl sets the GrantFullControl field's value. +func (s *PutObjectAclInput) SetGrantFullControl(v string) *PutObjectAclInput { + s.GrantFullControl = &v + return s +} - // Unique identifier for the rule. The value cannot be longer than 255 characters. - ID *string `type:"string"` +// SetGrantRead sets the GrantRead field's value. +func (s *PutObjectAclInput) SetGrantRead(v string) *PutObjectAclInput { + s.GrantRead = &v + return s +} - // Specifies when noncurrent object versions expire. Upon expiration, Amazon - // S3 permanently deletes the noncurrent object versions. You set this lifecycle - // configuration action on a bucket that has versioning enabled (or suspended) - // to request that Amazon S3 delete noncurrent object versions at a specific - // period in the object's lifetime. - NoncurrentVersionExpiration *NoncurrentVersionExpiration `type:"structure"` +// SetGrantReadACP sets the GrantReadACP field's value. +func (s *PutObjectAclInput) SetGrantReadACP(v string) *PutObjectAclInput { + s.GrantReadACP = &v + return s +} - NoncurrentVersionTransitions []*NoncurrentVersionTransition `locationName:"NoncurrentVersionTransition" type:"list" flattened:"true"` +// SetGrantWrite sets the GrantWrite field's value. +func (s *PutObjectAclInput) SetGrantWrite(v string) *PutObjectAclInput { + s.GrantWrite = &v + return s +} - // Prefix identifying one or more objects to which the rule applies. - Prefix *string `type:"string" required:"true"` +// SetGrantWriteACP sets the GrantWriteACP field's value. +func (s *PutObjectAclInput) SetGrantWriteACP(v string) *PutObjectAclInput { + s.GrantWriteACP = &v + return s +} - // If 'Enabled', the rule is currently being applied. If 'Disabled', the rule - // is not currently being applied. - Status *string `type:"string" required:"true" enum:"ExpirationStatus"` +// SetKey sets the Key field's value. +func (s *PutObjectAclInput) SetKey(v string) *PutObjectAclInput { + s.Key = &v + return s +} - Transitions []*Transition `locationName:"Transition" type:"list" flattened:"true"` +// SetRequestPayer sets the RequestPayer field's value. +func (s *PutObjectAclInput) SetRequestPayer(v string) *PutObjectAclInput { + s.RequestPayer = &v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *PutObjectAclInput) SetVersionId(v string) *PutObjectAclInput { + s.VersionId = &v + return s +} + +type PutObjectAclOutput struct { + _ struct{} `type:"structure"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` } // String returns the string representation -func (s LifecycleRule) String() string { +func (s PutObjectAclOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s LifecycleRule) GoString() string { +func (s PutObjectAclOutput) GoString() string { return s.String() } -type ListBucketsInput struct { - _ struct{} `type:"structure"` +// SetRequestCharged sets the RequestCharged field's value. +func (s *PutObjectAclOutput) SetRequestCharged(v string) *PutObjectAclOutput { + s.RequestCharged = &v + return s } -// String returns the string representation -func (s ListBucketsInput) String() string { - return awsutil.Prettify(s) -} +type PutObjectInput struct { + _ struct{} `locationName:"PutObjectRequest" type:"structure" payload:"Body"` + + // The canned ACL to apply to the object. For more information, see Canned ACL + // (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#CannedACL). + ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"ObjectCannedACL"` + + // Object data. + Body io.ReadSeeker `type:"blob"` + + // Name of the bucket to which the PUT operation was initiated. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Can be used to specify caching behavior along the request/reply chain. For + // more information, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 + // (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9). + CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` + + // Specifies presentational information for the object. For more information, + // see http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1). + ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` + + // Specifies what content encodings have been applied to the object and thus + // what decoding mechanisms must be applied to obtain the media-type referenced + // by the Content-Type header field. For more information, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11 + // (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11). + ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` + + // The language the content is in. + ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` + + // Size of the body in bytes. This parameter is useful when the size of the + // body cannot be determined automatically. For more information, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13 + // (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13). + ContentLength *int64 `location:"header" locationName:"Content-Length" type:"long"` + + // The base64-encoded 128-bit MD5 digest of the message (without the headers) + // according to RFC 1864. This header can be used as a message integrity check + // to verify that the data is the same data that was originally sent. Although + // it is optional, we recommend using the Content-MD5 mechanism as an end-to-end + // integrity check. For more information about REST request authentication, + // see REST Authentication (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html). + ContentMD5 *string `location:"header" locationName:"Content-MD5" type:"string"` + + // A standard MIME type describing the format of the contents. For more information, + // see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17). + ContentType *string `location:"header" locationName:"Content-Type" type:"string"` + + // The date and time at which the object is no longer cacheable. For more information, + // see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21). + Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp"` + + // Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object. + GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` + + // Allows grantee to read the object data and its metadata. + GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` + + // Allows grantee to read the object ACL. + GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` + + // Allows grantee to write the ACL for the applicable object. + GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` -// GoString returns the string representation -func (s ListBucketsInput) GoString() string { - return s.String() -} + // Object key for which the PUT operation was initiated. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` -type ListBucketsOutput struct { - _ struct{} `type:"structure"` + // A map of metadata to store with the object in S3. + Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` - Buckets []*Bucket `locationNameList:"Bucket" type:"list"` + // Specifies whether a legal hold will be applied to this object. For more information + // about S3 Object Lock, see Object Lock (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock.html). + ObjectLockLegalHoldStatus *string `location:"header" locationName:"x-amz-object-lock-legal-hold" type:"string" enum:"ObjectLockLegalHoldStatus"` - Owner *Owner `type:"structure"` -} + // The Object Lock mode that you want to apply to this object. + ObjectLockMode *string `location:"header" locationName:"x-amz-object-lock-mode" type:"string" enum:"ObjectLockMode"` -// String returns the string representation -func (s ListBucketsOutput) String() string { - return awsutil.Prettify(s) -} + // The date and time when you want this object's Object Lock to expire. + ObjectLockRetainUntilDate *time.Time `location:"header" locationName:"x-amz-object-lock-retain-until-date" type:"timestamp" timestampFormat:"iso8601"` -// GoString returns the string representation -func (s ListBucketsOutput) GoString() string { - return s.String() -} + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` -type ListMultipartUploadsInput struct { - _ struct{} `type:"structure"` + // Specifies the algorithm to use to when encrypting the object (e.g., AES256). + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting + // data. This value is used to store the object and then it is discarded; Amazon + // does not store the encryption key. The key must be appropriate for use with + // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm + // header. + SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"` - // Character you use to group keys. - Delimiter *string `location:"querystring" locationName:"delimiter" type:"string"` + // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. + // Amazon S3 uses this header for a message integrity check to ensure the encryption + // key was transmitted without error. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` - // Requests Amazon S3 to encode the object keys in the response and specifies - // the encoding method to use. An object key may contain any Unicode character; - // however, XML 1.0 parser cannot parse some characters, such as characters - // with an ASCII value from 0 to 10. For characters that are not supported in - // XML 1.0, you can add this parameter to request that Amazon S3 encode the - // keys in the response. - EncodingType *string `location:"querystring" locationName:"encoding-type" type:"string" enum:"EncodingType"` + // Specifies the AWS KMS Encryption Context to use for object encryption. The + // value of this header is a base64-encoded UTF-8 string holding JSON with the + // encryption context key-value pairs. + SSEKMSEncryptionContext *string `location:"header" locationName:"x-amz-server-side-encryption-context" type:"string" sensitive:"true"` + + // If the x-amz-server-side-encryption is present and has the value of aws:kms, + // this header specifies the ID of the AWS Key Management Service (AWS KMS) + // customer master key (CMK) that was used for the object. + // + // If the value of x-amz-server-side-encryption is aws:kms, this header specifies + // the ID of the AWS KMS CMK that will be used for the object. If you specify + // x-amz-server-side-encryption:aws:kms, but do not provide x-amz-server-side-encryption-aws-kms-key-id, + // Amazon S3 uses the AWS managed CMK in AWS to protect the data. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` - // Together with upload-id-marker, this parameter specifies the multipart upload - // after which listing should begin. - KeyMarker *string `location:"querystring" locationName:"key-marker" type:"string"` + // The Server-side encryption algorithm used when storing this object in S3 + // (e.g., AES256, aws:kms). + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` - // Sets the maximum number of multipart uploads, from 1 to 1,000, to return - // in the response body. 1,000 is the maximum number of uploads that can be - // returned in a response. - MaxUploads *int64 `location:"querystring" locationName:"max-uploads" type:"integer"` + // If you don't specify, Standard is the default storage class. Amazon S3 supports + // other storage classes. + StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` - // Lists in-progress uploads only for those keys that begin with the specified - // prefix. - Prefix *string `location:"querystring" locationName:"prefix" type:"string"` + // The tag-set for the object. The tag-set must be encoded as URL Query parameters. + // (For example, "Key1=Value1") + Tagging *string `location:"header" locationName:"x-amz-tagging" type:"string"` - // Together with key-marker, specifies the multipart upload after which listing - // should begin. If key-marker is not specified, the upload-id-marker parameter - // is ignored. - UploadIdMarker *string `location:"querystring" locationName:"upload-id-marker" type:"string"` + // If the bucket is configured as a website, redirects requests for this object + // to another object in the same bucket or to an external URL. Amazon S3 stores + // the value of this header in the object metadata. For information about object + // metadata, see . + // + // In the following example, the request header sets the redirect to an object + // (anotherPage.html) in the same bucket: + // + // x-amz-website-redirect-location: /anotherPage.html + // + // In the following example, the request header sets the object redirect to + // another website: + // + // x-amz-website-redirect-location: http://www.example.com/ + // + // For more information about website hosting in Amazon S3, see Hosting Websites + // on Amazon S3 (https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) + // and How to Configure Website Page Redirects (https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html). + WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` } // String returns the string representation -func (s ListMultipartUploadsInput) String() string { +func (s PutObjectInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ListMultipartUploadsInput) GoString() string { +func (s PutObjectInput) GoString() string { return s.String() } -type ListMultipartUploadsOutput struct { - _ struct{} `type:"structure"` - - // Name of the bucket to which the multipart upload was initiated. - Bucket *string `type:"string"` - - CommonPrefixes []*CommonPrefix `type:"list" flattened:"true"` - - Delimiter *string `type:"string"` - - // Encoding type used by Amazon S3 to encode object keys in the response. - EncodingType *string `type:"string" enum:"EncodingType"` - - // Indicates whether the returned list of multipart uploads is truncated. A - // value of true indicates that the list was truncated. The list can be truncated - // if the number of multipart uploads exceeds the limit allowed or specified - // by max uploads. - IsTruncated *bool `type:"boolean"` - - // The key at or after which the listing began. - KeyMarker *string `type:"string"` - - // Maximum number of multipart uploads that could have been included in the - // response. - MaxUploads *int64 `type:"integer"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutObjectInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutObjectInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } - // When a list is truncated, this element specifies the value that should be - // used for the key-marker request parameter in a subsequent request. - NextKeyMarker *string `type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // When a list is truncated, this element specifies the value that should be - // used for the upload-id-marker request parameter in a subsequent request. - NextUploadIdMarker *string `type:"string"` +// SetACL sets the ACL field's value. +func (s *PutObjectInput) SetACL(v string) *PutObjectInput { + s.ACL = &v + return s +} - // When a prefix is provided in the request, this field contains the specified - // prefix. The result contains only keys starting with the specified prefix. - Prefix *string `type:"string"` +// SetBody sets the Body field's value. +func (s *PutObjectInput) SetBody(v io.ReadSeeker) *PutObjectInput { + s.Body = v + return s +} - // Upload ID after which listing began. - UploadIdMarker *string `type:"string"` +// SetBucket sets the Bucket field's value. +func (s *PutObjectInput) SetBucket(v string) *PutObjectInput { + s.Bucket = &v + return s +} - Uploads []*MultipartUpload `locationName:"Upload" type:"list" flattened:"true"` +func (s *PutObjectInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket } -// String returns the string representation -func (s ListMultipartUploadsOutput) String() string { - return awsutil.Prettify(s) +// SetCacheControl sets the CacheControl field's value. +func (s *PutObjectInput) SetCacheControl(v string) *PutObjectInput { + s.CacheControl = &v + return s } -// GoString returns the string representation -func (s ListMultipartUploadsOutput) GoString() string { - return s.String() +// SetContentDisposition sets the ContentDisposition field's value. +func (s *PutObjectInput) SetContentDisposition(v string) *PutObjectInput { + s.ContentDisposition = &v + return s } -type ListObjectVersionsInput struct { - _ struct{} `type:"structure"` +// SetContentEncoding sets the ContentEncoding field's value. +func (s *PutObjectInput) SetContentEncoding(v string) *PutObjectInput { + s.ContentEncoding = &v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetContentLanguage sets the ContentLanguage field's value. +func (s *PutObjectInput) SetContentLanguage(v string) *PutObjectInput { + s.ContentLanguage = &v + return s +} - // A delimiter is a character you use to group keys. - Delimiter *string `location:"querystring" locationName:"delimiter" type:"string"` +// SetContentLength sets the ContentLength field's value. +func (s *PutObjectInput) SetContentLength(v int64) *PutObjectInput { + s.ContentLength = &v + return s +} - // Requests Amazon S3 to encode the object keys in the response and specifies - // the encoding method to use. An object key may contain any Unicode character; - // however, XML 1.0 parser cannot parse some characters, such as characters - // with an ASCII value from 0 to 10. For characters that are not supported in - // XML 1.0, you can add this parameter to request that Amazon S3 encode the - // keys in the response. - EncodingType *string `location:"querystring" locationName:"encoding-type" type:"string" enum:"EncodingType"` +// SetContentMD5 sets the ContentMD5 field's value. +func (s *PutObjectInput) SetContentMD5(v string) *PutObjectInput { + s.ContentMD5 = &v + return s +} - // Specifies the key to start with when listing objects in a bucket. - KeyMarker *string `location:"querystring" locationName:"key-marker" type:"string"` +// SetContentType sets the ContentType field's value. +func (s *PutObjectInput) SetContentType(v string) *PutObjectInput { + s.ContentType = &v + return s +} - // Sets the maximum number of keys returned in the response. The response might - // contain fewer keys but will never contain more. - MaxKeys *int64 `location:"querystring" locationName:"max-keys" type:"integer"` +// SetExpires sets the Expires field's value. +func (s *PutObjectInput) SetExpires(v time.Time) *PutObjectInput { + s.Expires = &v + return s +} - // Limits the response to keys that begin with the specified prefix. - Prefix *string `location:"querystring" locationName:"prefix" type:"string"` +// SetGrantFullControl sets the GrantFullControl field's value. +func (s *PutObjectInput) SetGrantFullControl(v string) *PutObjectInput { + s.GrantFullControl = &v + return s +} - // Specifies the object version you want to start listing from. - VersionIdMarker *string `location:"querystring" locationName:"version-id-marker" type:"string"` +// SetGrantRead sets the GrantRead field's value. +func (s *PutObjectInput) SetGrantRead(v string) *PutObjectInput { + s.GrantRead = &v + return s } -// String returns the string representation -func (s ListObjectVersionsInput) String() string { - return awsutil.Prettify(s) +// SetGrantReadACP sets the GrantReadACP field's value. +func (s *PutObjectInput) SetGrantReadACP(v string) *PutObjectInput { + s.GrantReadACP = &v + return s } -// GoString returns the string representation -func (s ListObjectVersionsInput) GoString() string { - return s.String() +// SetGrantWriteACP sets the GrantWriteACP field's value. +func (s *PutObjectInput) SetGrantWriteACP(v string) *PutObjectInput { + s.GrantWriteACP = &v + return s } -type ListObjectVersionsOutput struct { - _ struct{} `type:"structure"` +// SetKey sets the Key field's value. +func (s *PutObjectInput) SetKey(v string) *PutObjectInput { + s.Key = &v + return s +} - CommonPrefixes []*CommonPrefix `type:"list" flattened:"true"` +// SetMetadata sets the Metadata field's value. +func (s *PutObjectInput) SetMetadata(v map[string]*string) *PutObjectInput { + s.Metadata = v + return s +} - DeleteMarkers []*DeleteMarkerEntry `locationName:"DeleteMarker" type:"list" flattened:"true"` +// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value. +func (s *PutObjectInput) SetObjectLockLegalHoldStatus(v string) *PutObjectInput { + s.ObjectLockLegalHoldStatus = &v + return s +} - Delimiter *string `type:"string"` +// SetObjectLockMode sets the ObjectLockMode field's value. +func (s *PutObjectInput) SetObjectLockMode(v string) *PutObjectInput { + s.ObjectLockMode = &v + return s +} - // Encoding type used by Amazon S3 to encode object keys in the response. - EncodingType *string `type:"string" enum:"EncodingType"` +// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value. +func (s *PutObjectInput) SetObjectLockRetainUntilDate(v time.Time) *PutObjectInput { + s.ObjectLockRetainUntilDate = &v + return s +} - // A flag that indicates whether or not Amazon S3 returned all of the results - // that satisfied the search criteria. If your results were truncated, you can - // make a follow-up paginated request using the NextKeyMarker and NextVersionIdMarker - // response parameters as a starting place in another request to return the - // rest of the results. - IsTruncated *bool `type:"boolean"` +// SetRequestPayer sets the RequestPayer field's value. +func (s *PutObjectInput) SetRequestPayer(v string) *PutObjectInput { + s.RequestPayer = &v + return s +} - // Marks the last Key returned in a truncated response. - KeyMarker *string `type:"string"` +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *PutObjectInput) SetSSECustomerAlgorithm(v string) *PutObjectInput { + s.SSECustomerAlgorithm = &v + return s +} - MaxKeys *int64 `type:"integer"` +// SetSSECustomerKey sets the SSECustomerKey field's value. +func (s *PutObjectInput) SetSSECustomerKey(v string) *PutObjectInput { + s.SSECustomerKey = &v + return s +} - Name *string `type:"string"` +func (s *PutObjectInput) getSSECustomerKey() (v string) { + if s.SSECustomerKey == nil { + return v + } + return *s.SSECustomerKey +} - // Use this value for the key marker request parameter in a subsequent request. - NextKeyMarker *string `type:"string"` +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *PutObjectInput) SetSSECustomerKeyMD5(v string) *PutObjectInput { + s.SSECustomerKeyMD5 = &v + return s +} - // Use this value for the next version id marker parameter in a subsequent request. - NextVersionIdMarker *string `type:"string"` +// SetSSEKMSEncryptionContext sets the SSEKMSEncryptionContext field's value. +func (s *PutObjectInput) SetSSEKMSEncryptionContext(v string) *PutObjectInput { + s.SSEKMSEncryptionContext = &v + return s +} - Prefix *string `type:"string"` +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *PutObjectInput) SetSSEKMSKeyId(v string) *PutObjectInput { + s.SSEKMSKeyId = &v + return s +} - VersionIdMarker *string `type:"string"` +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *PutObjectInput) SetServerSideEncryption(v string) *PutObjectInput { + s.ServerSideEncryption = &v + return s +} - Versions []*ObjectVersion `locationName:"Version" type:"list" flattened:"true"` +// SetStorageClass sets the StorageClass field's value. +func (s *PutObjectInput) SetStorageClass(v string) *PutObjectInput { + s.StorageClass = &v + return s } -// String returns the string representation -func (s ListObjectVersionsOutput) String() string { - return awsutil.Prettify(s) +// SetTagging sets the Tagging field's value. +func (s *PutObjectInput) SetTagging(v string) *PutObjectInput { + s.Tagging = &v + return s } -// GoString returns the string representation -func (s ListObjectVersionsOutput) GoString() string { - return s.String() +// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value. +func (s *PutObjectInput) SetWebsiteRedirectLocation(v string) *PutObjectInput { + s.WebsiteRedirectLocation = &v + return s } -type ListObjectsInput struct { - _ struct{} `type:"structure"` +type PutObjectLegalHoldInput struct { + _ struct{} `locationName:"PutObjectLegalHoldRequest" type:"structure" payload:"LegalHold"` + // The bucket containing the object that you want to place a Legal Hold on. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // A delimiter is a character you use to group keys. - Delimiter *string `location:"querystring" locationName:"delimiter" type:"string"` - - // Requests Amazon S3 to encode the object keys in the response and specifies - // the encoding method to use. An object key may contain any Unicode character; - // however, XML 1.0 parser cannot parse some characters, such as characters - // with an ASCII value from 0 to 10. For characters that are not supported in - // XML 1.0, you can add this parameter to request that Amazon S3 encode the - // keys in the response. - EncodingType *string `location:"querystring" locationName:"encoding-type" type:"string" enum:"EncodingType"` + // The key name for the object that you want to place a Legal Hold on. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` - // Specifies the key to start with when listing objects in a bucket. - Marker *string `location:"querystring" locationName:"marker" type:"string"` + // Container element for the Legal Hold configuration you want to apply to the + // specified object. + LegalHold *ObjectLockLegalHold `locationName:"LegalHold" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` - // Sets the maximum number of keys returned in the response. The response might - // contain fewer keys but will never contain more. - MaxKeys *int64 `location:"querystring" locationName:"max-keys" type:"integer"` + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` - // Limits the response to keys that begin with the specified prefix. - Prefix *string `location:"querystring" locationName:"prefix" type:"string"` + // The version ID of the object that you want to place a Legal Hold on. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` } // String returns the string representation -func (s ListObjectsInput) String() string { +func (s PutObjectLegalHoldInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ListObjectsInput) GoString() string { +func (s PutObjectLegalHoldInput) GoString() string { return s.String() } -type ListObjectsOutput struct { - _ struct{} `type:"structure"` - - CommonPrefixes []*CommonPrefix `type:"list" flattened:"true"` - - Contents []*Object `type:"list" flattened:"true"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutObjectLegalHoldInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutObjectLegalHoldInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } - Delimiter *string `type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Encoding type used by Amazon S3 to encode object keys in the response. - EncodingType *string `type:"string" enum:"EncodingType"` +// SetBucket sets the Bucket field's value. +func (s *PutObjectLegalHoldInput) SetBucket(v string) *PutObjectLegalHoldInput { + s.Bucket = &v + return s +} - // A flag that indicates whether or not Amazon S3 returned all of the results - // that satisfied the search criteria. - IsTruncated *bool `type:"boolean"` +func (s *PutObjectLegalHoldInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - Marker *string `type:"string"` +// SetKey sets the Key field's value. +func (s *PutObjectLegalHoldInput) SetKey(v string) *PutObjectLegalHoldInput { + s.Key = &v + return s +} - MaxKeys *int64 `type:"integer"` +// SetLegalHold sets the LegalHold field's value. +func (s *PutObjectLegalHoldInput) SetLegalHold(v *ObjectLockLegalHold) *PutObjectLegalHoldInput { + s.LegalHold = v + return s +} - Name *string `type:"string"` +// SetRequestPayer sets the RequestPayer field's value. +func (s *PutObjectLegalHoldInput) SetRequestPayer(v string) *PutObjectLegalHoldInput { + s.RequestPayer = &v + return s +} - // When response is truncated (the IsTruncated element value in the response - // is true), you can use the key name in this field as marker in the subsequent - // request to get next set of objects. Amazon S3 lists objects in alphabetical - // order Note: This element is returned only if you have delimiter request parameter - // specified. If response does not include the NextMaker and it is truncated, - // you can use the value of the last Key in the response as the marker in the - // subsequent request to get the next set of object keys. - NextMarker *string `type:"string"` +// SetVersionId sets the VersionId field's value. +func (s *PutObjectLegalHoldInput) SetVersionId(v string) *PutObjectLegalHoldInput { + s.VersionId = &v + return s +} - Prefix *string `type:"string"` +type PutObjectLegalHoldOutput struct { + _ struct{} `type:"structure"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` } // String returns the string representation -func (s ListObjectsOutput) String() string { +func (s PutObjectLegalHoldOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ListObjectsOutput) GoString() string { +func (s PutObjectLegalHoldOutput) GoString() string { return s.String() } -type ListPartsInput struct { - _ struct{} `type:"structure"` - - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetRequestCharged sets the RequestCharged field's value. +func (s *PutObjectLegalHoldOutput) SetRequestCharged(v string) *PutObjectLegalHoldOutput { + s.RequestCharged = &v + return s +} - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` +type PutObjectLockConfigurationInput struct { + _ struct{} `locationName:"PutObjectLockConfigurationRequest" type:"structure" payload:"ObjectLockConfiguration"` - // Sets the maximum number of parts to return. - MaxParts *int64 `location:"querystring" locationName:"max-parts" type:"integer"` + // The bucket whose Object Lock configuration you want to create or replace. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // Specifies the part after which listing should begin. Only parts with higher - // part numbers will be listed. - PartNumberMarker *int64 `location:"querystring" locationName:"part-number-marker" type:"integer"` + // The Object Lock configuration that you want to apply to the specified bucket. + ObjectLockConfiguration *ObjectLockConfiguration `locationName:"ObjectLockConfiguration" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` // Confirms that the requester knows that she or he will be charged for the // request. Bucket owners need not specify this parameter in their requests. @@ -4286,1351 +24772,2818 @@ type ListPartsInput struct { // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` - // Upload ID identifying the multipart upload whose parts are being listed. - UploadId *string `location:"querystring" locationName:"uploadId" type:"string" required:"true"` + // A token to allow Object Lock to be enabled for an existing bucket. + Token *string `location:"header" locationName:"x-amz-bucket-object-lock-token" type:"string"` } // String returns the string representation -func (s ListPartsInput) String() string { +func (s PutObjectLockConfigurationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ListPartsInput) GoString() string { +func (s PutObjectLockConfigurationInput) GoString() string { return s.String() } -type ListPartsOutput struct { - _ struct{} `type:"structure"` - - // Name of the bucket to which the multipart upload was initiated. - Bucket *string `type:"string"` - - // Identifies who initiated the multipart upload. - Initiator *Initiator `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutObjectLockConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutObjectLockConfigurationInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } - // Indicates whether the returned list of parts is truncated. - IsTruncated *bool `type:"boolean"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Object key for which the multipart upload was initiated. - Key *string `min:"1" type:"string"` +// SetBucket sets the Bucket field's value. +func (s *PutObjectLockConfigurationInput) SetBucket(v string) *PutObjectLockConfigurationInput { + s.Bucket = &v + return s +} - // Maximum number of parts that were allowed in the response. - MaxParts *int64 `type:"integer"` +func (s *PutObjectLockConfigurationInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // When a list is truncated, this element specifies the last part in the list, - // as well as the value to use for the part-number-marker request parameter - // in a subsequent request. - NextPartNumberMarker *int64 `type:"integer"` +// SetObjectLockConfiguration sets the ObjectLockConfiguration field's value. +func (s *PutObjectLockConfigurationInput) SetObjectLockConfiguration(v *ObjectLockConfiguration) *PutObjectLockConfigurationInput { + s.ObjectLockConfiguration = v + return s +} - Owner *Owner `type:"structure"` +// SetRequestPayer sets the RequestPayer field's value. +func (s *PutObjectLockConfigurationInput) SetRequestPayer(v string) *PutObjectLockConfigurationInput { + s.RequestPayer = &v + return s +} - // Part number after which listing begins. - PartNumberMarker *int64 `type:"integer"` +// SetToken sets the Token field's value. +func (s *PutObjectLockConfigurationInput) SetToken(v string) *PutObjectLockConfigurationInput { + s.Token = &v + return s +} - Parts []*Part `locationName:"Part" type:"list" flattened:"true"` +type PutObjectLockConfigurationOutput struct { + _ struct{} `type:"structure"` // If present, indicates that the requester was successfully charged for the // request. RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` - - // The class of storage used to store the object. - StorageClass *string `type:"string" enum:"StorageClass"` - - // Upload ID identifying the multipart upload whose parts are being listed. - UploadId *string `type:"string"` } // String returns the string representation -func (s ListPartsOutput) String() string { +func (s PutObjectLockConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ListPartsOutput) GoString() string { +func (s PutObjectLockConfigurationOutput) GoString() string { return s.String() } -type LoggingEnabled struct { +// SetRequestCharged sets the RequestCharged field's value. +func (s *PutObjectLockConfigurationOutput) SetRequestCharged(v string) *PutObjectLockConfigurationOutput { + s.RequestCharged = &v + return s +} + +type PutObjectOutput struct { _ struct{} `type:"structure"` - // Specifies the bucket where you want Amazon S3 to store server access logs. - // You can have your logs delivered to any bucket that you own, including the - // same bucket that is being logged. You can also configure multiple buckets - // to deliver their logs to the same target bucket. In this case you should - // choose a different TargetPrefix for each source bucket so that the delivered - // log files can be distinguished by key. - TargetBucket *string `type:"string"` + // Entity tag for the uploaded object. + ETag *string `location:"header" locationName:"ETag" type:"string"` - TargetGrants []*TargetGrant `locationNameList:"Grant" type:"list"` + // If the expiration is configured for the object (see PutBucketLifecycleConfiguration), + // the response includes this header. It includes the expiry-date and rule-id + // key-value pairs that provide information about object expiration. The value + // of the rule-id is URL encoded. + Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header confirming the encryption algorithm + // used. + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // If server-side encryption with a customer-provided encryption key was requested, + // the response will include this header to provide round trip message integrity + // verification of the customer-provided encryption key. + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // If present, specifies the AWS KMS Encryption Context to use for object encryption. + // The value of this header is a base64-encoded UTF-8 string holding JSON with + // the encryption context key-value pairs. + SSEKMSEncryptionContext *string `location:"header" locationName:"x-amz-server-side-encryption-context" type:"string" sensitive:"true"` - // This element lets you specify a prefix for the keys that the log files will - // be stored under. - TargetPrefix *string `type:"string"` + // If the x-amz-server-side-encryption is present and has the value of aws:kms, + // this header specifies the ID of the AWS Key Management Service (KMS) customer + // master key (CMK) that was used for the object. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` + + // If you specified server-side encryption either with an AWS KMS customer master + // key (CMK) or Amazon S3-managed encryption key in your PUT request, the response + // includes this header. It confirms the encryption algorithm that Amazon S3 + // used to encrypt the object. + ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + + // Version of the object. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` } // String returns the string representation -func (s LoggingEnabled) String() string { +func (s PutObjectOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s LoggingEnabled) GoString() string { +func (s PutObjectOutput) GoString() string { return s.String() } -type MultipartUpload struct { - _ struct{} `type:"structure"` +// SetETag sets the ETag field's value. +func (s *PutObjectOutput) SetETag(v string) *PutObjectOutput { + s.ETag = &v + return s +} - // Date and time at which the multipart upload was initiated. - Initiated *time.Time `type:"timestamp" timestampFormat:"iso8601"` +// SetExpiration sets the Expiration field's value. +func (s *PutObjectOutput) SetExpiration(v string) *PutObjectOutput { + s.Expiration = &v + return s +} - // Identifies who initiated the multipart upload. - Initiator *Initiator `type:"structure"` +// SetRequestCharged sets the RequestCharged field's value. +func (s *PutObjectOutput) SetRequestCharged(v string) *PutObjectOutput { + s.RequestCharged = &v + return s +} - // Key of the object for which the multipart upload was initiated. - Key *string `min:"1" type:"string"` +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *PutObjectOutput) SetSSECustomerAlgorithm(v string) *PutObjectOutput { + s.SSECustomerAlgorithm = &v + return s +} - Owner *Owner `type:"structure"` +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *PutObjectOutput) SetSSECustomerKeyMD5(v string) *PutObjectOutput { + s.SSECustomerKeyMD5 = &v + return s +} - // The class of storage used to store the object. - StorageClass *string `type:"string" enum:"StorageClass"` +// SetSSEKMSEncryptionContext sets the SSEKMSEncryptionContext field's value. +func (s *PutObjectOutput) SetSSEKMSEncryptionContext(v string) *PutObjectOutput { + s.SSEKMSEncryptionContext = &v + return s +} - // Upload ID that identifies the multipart upload. - UploadId *string `type:"string"` +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *PutObjectOutput) SetSSEKMSKeyId(v string) *PutObjectOutput { + s.SSEKMSKeyId = &v + return s } -// String returns the string representation -func (s MultipartUpload) String() string { - return awsutil.Prettify(s) +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *PutObjectOutput) SetServerSideEncryption(v string) *PutObjectOutput { + s.ServerSideEncryption = &v + return s } -// GoString returns the string representation -func (s MultipartUpload) GoString() string { - return s.String() +// SetVersionId sets the VersionId field's value. +func (s *PutObjectOutput) SetVersionId(v string) *PutObjectOutput { + s.VersionId = &v + return s } -// Specifies when noncurrent object versions expire. Upon expiration, Amazon -// S3 permanently deletes the noncurrent object versions. You set this lifecycle -// configuration action on a bucket that has versioning enabled (or suspended) -// to request that Amazon S3 delete noncurrent object versions at a specific -// period in the object's lifetime. -type NoncurrentVersionExpiration struct { - _ struct{} `type:"structure"` +type PutObjectRetentionInput struct { + _ struct{} `locationName:"PutObjectRetentionRequest" type:"structure" payload:"Retention"` - // Specifies the number of days an object is noncurrent before Amazon S3 can - // perform the associated action. For information about the noncurrent days - // calculations, see How Amazon S3 Calculates When an Object Became Noncurrent - // (/AmazonS3/latest/dev/s3-access-control.html) in the Amazon Simple Storage - // Service Developer Guide. - NoncurrentDays *int64 `type:"integer"` + // The bucket that contains the object you want to apply this Object Retention + // configuration to. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // Indicates whether this operation should bypass Governance-mode restrictions. + BypassGovernanceRetention *bool `location:"header" locationName:"x-amz-bypass-governance-retention" type:"boolean"` + + // The key name for the object that you want to apply this Object Retention + // configuration to. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // The container element for the Object Retention configuration. + Retention *ObjectLockRetention `locationName:"Retention" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + + // The version ID for the object that you want to apply this Object Retention + // configuration to. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` } // String returns the string representation -func (s NoncurrentVersionExpiration) String() string { +func (s PutObjectRetentionInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NoncurrentVersionExpiration) GoString() string { +func (s PutObjectRetentionInput) GoString() string { return s.String() } -// Container for the transition rule that describes when noncurrent objects -// transition to the STANDARD_IA or GLACIER storage class. If your bucket is -// versioning-enabled (or versioning is suspended), you can set this action -// to request that Amazon S3 transition noncurrent object versions to the STANDARD_IA -// or GLACIER storage class at a specific period in the object's lifetime. -type NoncurrentVersionTransition struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutObjectRetentionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutObjectRetentionInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } - // Specifies the number of days an object is noncurrent before Amazon S3 can - // perform the associated action. For information about the noncurrent days - // calculations, see How Amazon S3 Calculates When an Object Became Noncurrent - // (/AmazonS3/latest/dev/s3-access-control.html) in the Amazon Simple Storage - // Service Developer Guide. - NoncurrentDays *int64 `type:"integer"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // The class of storage used to store the object. - StorageClass *string `type:"string" enum:"TransitionStorageClass"` +// SetBucket sets the Bucket field's value. +func (s *PutObjectRetentionInput) SetBucket(v string) *PutObjectRetentionInput { + s.Bucket = &v + return s +} + +func (s *PutObjectRetentionInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetBypassGovernanceRetention sets the BypassGovernanceRetention field's value. +func (s *PutObjectRetentionInput) SetBypassGovernanceRetention(v bool) *PutObjectRetentionInput { + s.BypassGovernanceRetention = &v + return s +} + +// SetKey sets the Key field's value. +func (s *PutObjectRetentionInput) SetKey(v string) *PutObjectRetentionInput { + s.Key = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *PutObjectRetentionInput) SetRequestPayer(v string) *PutObjectRetentionInput { + s.RequestPayer = &v + return s +} + +// SetRetention sets the Retention field's value. +func (s *PutObjectRetentionInput) SetRetention(v *ObjectLockRetention) *PutObjectRetentionInput { + s.Retention = v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *PutObjectRetentionInput) SetVersionId(v string) *PutObjectRetentionInput { + s.VersionId = &v + return s +} + +type PutObjectRetentionOutput struct { + _ struct{} `type:"structure"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` } // String returns the string representation -func (s NoncurrentVersionTransition) String() string { +func (s PutObjectRetentionOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NoncurrentVersionTransition) GoString() string { +func (s PutObjectRetentionOutput) GoString() string { return s.String() } -// Container for specifying the notification configuration of the bucket. If -// this element is empty, notifications are turned off on the bucket. -type NotificationConfiguration struct { - _ struct{} `type:"structure"` +// SetRequestCharged sets the RequestCharged field's value. +func (s *PutObjectRetentionOutput) SetRequestCharged(v string) *PutObjectRetentionOutput { + s.RequestCharged = &v + return s +} - LambdaFunctionConfigurations []*LambdaFunctionConfiguration `locationName:"CloudFunctionConfiguration" type:"list" flattened:"true"` +type PutObjectTaggingInput struct { + _ struct{} `locationName:"PutObjectTaggingRequest" type:"structure" payload:"Tagging"` - QueueConfigurations []*QueueConfiguration `locationName:"QueueConfiguration" type:"list" flattened:"true"` + // The bucket containing the object. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - TopicConfigurations []*TopicConfiguration `locationName:"TopicConfiguration" type:"list" flattened:"true"` + // Name of the tag. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Container for the TagSet and Tag elements + // + // Tagging is a required field + Tagging *Tagging `locationName:"Tagging" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + + // The versionId of the object that the tag-set will be added to. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` } // String returns the string representation -func (s NotificationConfiguration) String() string { +func (s PutObjectTaggingInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NotificationConfiguration) GoString() string { +func (s PutObjectTaggingInput) GoString() string { return s.String() } -type NotificationConfigurationDeprecated struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutObjectTaggingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutObjectTaggingInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.Tagging == nil { + invalidParams.Add(request.NewErrParamRequired("Tagging")) + } + if s.Tagging != nil { + if err := s.Tagging.Validate(); err != nil { + invalidParams.AddNested("Tagging", err.(request.ErrInvalidParams)) + } + } - CloudFunctionConfiguration *CloudFunctionConfiguration `type:"structure"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - QueueConfiguration *QueueConfigurationDeprecated `type:"structure"` +// SetBucket sets the Bucket field's value. +func (s *PutObjectTaggingInput) SetBucket(v string) *PutObjectTaggingInput { + s.Bucket = &v + return s +} - TopicConfiguration *TopicConfigurationDeprecated `type:"structure"` +func (s *PutObjectTaggingInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetKey sets the Key field's value. +func (s *PutObjectTaggingInput) SetKey(v string) *PutObjectTaggingInput { + s.Key = &v + return s +} + +// SetTagging sets the Tagging field's value. +func (s *PutObjectTaggingInput) SetTagging(v *Tagging) *PutObjectTaggingInput { + s.Tagging = v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *PutObjectTaggingInput) SetVersionId(v string) *PutObjectTaggingInput { + s.VersionId = &v + return s +} + +type PutObjectTaggingOutput struct { + _ struct{} `type:"structure"` + + // The versionId of the object the tag-set was added to. + VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` } // String returns the string representation -func (s NotificationConfigurationDeprecated) String() string { +func (s PutObjectTaggingOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NotificationConfigurationDeprecated) GoString() string { +func (s PutObjectTaggingOutput) GoString() string { return s.String() } -// Container for object key name filtering rules. For information about key -// name filtering, go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) -// in the Amazon Simple Storage Service Developer Guide. -type NotificationConfigurationFilter struct { - _ struct{} `type:"structure"` +// SetVersionId sets the VersionId field's value. +func (s *PutObjectTaggingOutput) SetVersionId(v string) *PutObjectTaggingOutput { + s.VersionId = &v + return s +} - // Container for object key name prefix and suffix filtering rules. - Key *KeyFilter `locationName:"S3Key" type:"structure"` +type PutPublicAccessBlockInput struct { + _ struct{} `locationName:"PutPublicAccessBlockRequest" type:"structure" payload:"PublicAccessBlockConfiguration"` + + // The name of the Amazon S3 bucket whose PublicAccessBlock configuration you + // want to set. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + + // The PublicAccessBlock configuration that you want to apply to this Amazon + // S3 bucket. You can enable the configuration options in any combination. For + // more information about when Amazon S3 considers a bucket or object public, + // see The Meaning of "Public" (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status) + // in the Amazon Simple Storage Service Developer Guide. + // + // PublicAccessBlockConfiguration is a required field + PublicAccessBlockConfiguration *PublicAccessBlockConfiguration `locationName:"PublicAccessBlockConfiguration" type:"structure" required:"true" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` } // String returns the string representation -func (s NotificationConfigurationFilter) String() string { +func (s PutPublicAccessBlockInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NotificationConfigurationFilter) GoString() string { +func (s PutPublicAccessBlockInput) GoString() string { return s.String() } -type Object struct { - _ struct{} `type:"structure"` - - ETag *string `type:"string"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *PutPublicAccessBlockInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PutPublicAccessBlockInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.PublicAccessBlockConfiguration == nil { + invalidParams.Add(request.NewErrParamRequired("PublicAccessBlockConfiguration")) + } - Key *string `min:"1" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"` +// SetBucket sets the Bucket field's value. +func (s *PutPublicAccessBlockInput) SetBucket(v string) *PutPublicAccessBlockInput { + s.Bucket = &v + return s +} - Owner *Owner `type:"structure"` +func (s *PutPublicAccessBlockInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - Size *int64 `type:"integer"` +// SetPublicAccessBlockConfiguration sets the PublicAccessBlockConfiguration field's value. +func (s *PutPublicAccessBlockInput) SetPublicAccessBlockConfiguration(v *PublicAccessBlockConfiguration) *PutPublicAccessBlockInput { + s.PublicAccessBlockConfiguration = v + return s +} - // The class of storage used to store the object. - StorageClass *string `type:"string" enum:"ObjectStorageClass"` +type PutPublicAccessBlockOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s Object) String() string { +func (s PutPublicAccessBlockOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Object) GoString() string { +func (s PutPublicAccessBlockOutput) GoString() string { return s.String() } -type ObjectIdentifier struct { +// Specifies the configuration for publishing messages to an Amazon Simple Queue +// Service (Amazon SQS) queue when Amazon S3 detects specified events. +type QueueConfiguration struct { _ struct{} `type:"structure"` - // Key name of the object to delete. - Key *string `min:"1" type:"string" required:"true"` + // A collection of bucket events for which to send notiications + // + // Events is a required field + Events []*string `locationName:"Event" type:"list" flattened:"true" required:"true"` - // VersionId for the specific version of the object to delete. - VersionId *string `type:"string"` + // Specifies object key name filtering rules. For information about key name + // filtering, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) + // in the Amazon Simple Storage Service Developer Guide. + Filter *NotificationConfigurationFilter `type:"structure"` + + // An optional unique identifier for configurations in a notification configuration. + // If you don't provide one, Amazon S3 will assign an ID. + Id *string `type:"string"` + + // The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3 + // publishes a message when it detects events of the specified type. + // + // QueueArn is a required field + QueueArn *string `locationName:"Queue" type:"string" required:"true"` } // String returns the string representation -func (s ObjectIdentifier) String() string { +func (s QueueConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ObjectIdentifier) GoString() string { +func (s QueueConfiguration) GoString() string { return s.String() } -type ObjectVersion struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *QueueConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "QueueConfiguration"} + if s.Events == nil { + invalidParams.Add(request.NewErrParamRequired("Events")) + } + if s.QueueArn == nil { + invalidParams.Add(request.NewErrParamRequired("QueueArn")) + } - ETag *string `type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Specifies whether the object is (true) or is not (false) the latest version - // of an object. - IsLatest *bool `type:"boolean"` +// SetEvents sets the Events field's value. +func (s *QueueConfiguration) SetEvents(v []*string) *QueueConfiguration { + s.Events = v + return s +} - // The object key. - Key *string `min:"1" type:"string"` +// SetFilter sets the Filter field's value. +func (s *QueueConfiguration) SetFilter(v *NotificationConfigurationFilter) *QueueConfiguration { + s.Filter = v + return s +} - // Date and time the object was last modified. - LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"` +// SetId sets the Id field's value. +func (s *QueueConfiguration) SetId(v string) *QueueConfiguration { + s.Id = &v + return s +} - Owner *Owner `type:"structure"` +// SetQueueArn sets the QueueArn field's value. +func (s *QueueConfiguration) SetQueueArn(v string) *QueueConfiguration { + s.QueueArn = &v + return s +} - // Size in bytes of the object. - Size *int64 `type:"integer"` +// This data type is deprecated. Please use QueueConfiguration for the same +// purposes. This dat type specifies the configuration for publishing messages +// to an Amazon Simple Queue Service (Amazon SQS) queue when Amazon S3 detects +// specified events. +type QueueConfigurationDeprecated struct { + _ struct{} `type:"structure"` - // The class of storage used to store the object. - StorageClass *string `type:"string" enum:"ObjectVersionStorageClass"` + // The bucket event for which to send notifications. + // + // Deprecated: Event has been deprecated + Event *string `deprecated:"true" type:"string" enum:"Event"` - // Version ID of an object. - VersionId *string `type:"string"` + // A collection of bucket events for which to send notiications + Events []*string `locationName:"Event" type:"list" flattened:"true"` + + // An optional unique identifier for configurations in a notification configuration. + // If you don't provide one, Amazon S3 will assign an ID. + Id *string `type:"string"` + + // The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3 + // publishes a message when it detects events of the specified type. + Queue *string `type:"string"` } // String returns the string representation -func (s ObjectVersion) String() string { +func (s QueueConfigurationDeprecated) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ObjectVersion) GoString() string { +func (s QueueConfigurationDeprecated) GoString() string { return s.String() } -type Owner struct { - _ struct{} `type:"structure"` +// SetEvent sets the Event field's value. +func (s *QueueConfigurationDeprecated) SetEvent(v string) *QueueConfigurationDeprecated { + s.Event = &v + return s +} - DisplayName *string `type:"string"` +// SetEvents sets the Events field's value. +func (s *QueueConfigurationDeprecated) SetEvents(v []*string) *QueueConfigurationDeprecated { + s.Events = v + return s +} - ID *string `type:"string"` +// SetId sets the Id field's value. +func (s *QueueConfigurationDeprecated) SetId(v string) *QueueConfigurationDeprecated { + s.Id = &v + return s +} + +// SetQueue sets the Queue field's value. +func (s *QueueConfigurationDeprecated) SetQueue(v string) *QueueConfigurationDeprecated { + s.Queue = &v + return s +} + +// The container for the records event. +type RecordsEvent struct { + _ struct{} `locationName:"RecordsEvent" type:"structure" payload:"Payload"` + + // The byte array of partial, one or more result records. + // + // Payload is automatically base64 encoded/decoded by the SDK. + Payload []byte `type:"blob"` } // String returns the string representation -func (s Owner) String() string { +func (s RecordsEvent) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Owner) GoString() string { +func (s RecordsEvent) GoString() string { return s.String() } -type Part struct { +// SetPayload sets the Payload field's value. +func (s *RecordsEvent) SetPayload(v []byte) *RecordsEvent { + s.Payload = v + return s +} + +// The RecordsEvent is and event in the SelectObjectContentEventStream group of events. +func (s *RecordsEvent) eventSelectObjectContentEventStream() {} + +// UnmarshalEvent unmarshals the EventStream Message into the RecordsEvent value. +// This method is only used internally within the SDK's EventStream handling. +func (s *RecordsEvent) UnmarshalEvent( + payloadUnmarshaler protocol.PayloadUnmarshaler, + msg eventstream.Message, +) error { + s.Payload = make([]byte, len(msg.Payload)) + copy(s.Payload, msg.Payload) + return nil +} + +// Specifies how requests are redirected. In the event of an error, you can +// specify a different error code to return. +type Redirect struct { _ struct{} `type:"structure"` - // Entity tag returned when the part was uploaded. - ETag *string `type:"string"` + // The host name to use in the redirect request. + HostName *string `type:"string"` - // Date and time at which the part was uploaded. - LastModified *time.Time `type:"timestamp" timestampFormat:"iso8601"` + // The HTTP redirect code to use on the response. Not required if one of the + // siblings is present. + HttpRedirectCode *string `type:"string"` - // Part number identifying the part. This is a positive integer between 1 and - // 10,000. - PartNumber *int64 `type:"integer"` + // Protocol to use when redirecting requests. The default is the protocol that + // is used in the original request. + Protocol *string `type:"string" enum:"Protocol"` - // Size of the uploaded part data. - Size *int64 `type:"integer"` + // The object key prefix to use in the redirect request. For example, to redirect + // requests for all pages with prefix docs/ (objects in the docs/ folder) to + // documents/, you can set a condition block with KeyPrefixEquals set to docs/ + // and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required + // if one of the siblings is present. Can be present only if ReplaceKeyWith + // is not provided. + ReplaceKeyPrefixWith *string `type:"string"` + + // The specific object key to use in the redirect request. For example, redirect + // request to error.html. Not required if one of the siblings is present. Can + // be present only if ReplaceKeyPrefixWith is not provided. + ReplaceKeyWith *string `type:"string"` } // String returns the string representation -func (s Part) String() string { +func (s Redirect) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Part) GoString() string { +func (s Redirect) GoString() string { return s.String() } -type PutBucketAclInput struct { - _ struct{} `type:"structure" payload:"AccessControlPolicy"` - - // The canned ACL to apply to the bucket. - ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"BucketCannedACL"` +// SetHostName sets the HostName field's value. +func (s *Redirect) SetHostName(v string) *Redirect { + s.HostName = &v + return s +} - AccessControlPolicy *AccessControlPolicy `locationName:"AccessControlPolicy" type:"structure"` +// SetHttpRedirectCode sets the HttpRedirectCode field's value. +func (s *Redirect) SetHttpRedirectCode(v string) *Redirect { + s.HttpRedirectCode = &v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetProtocol sets the Protocol field's value. +func (s *Redirect) SetProtocol(v string) *Redirect { + s.Protocol = &v + return s +} - // Allows grantee the read, write, read ACP, and write ACP permissions on the - // bucket. - GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` +// SetReplaceKeyPrefixWith sets the ReplaceKeyPrefixWith field's value. +func (s *Redirect) SetReplaceKeyPrefixWith(v string) *Redirect { + s.ReplaceKeyPrefixWith = &v + return s +} - // Allows grantee to list the objects in the bucket. - GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` +// SetReplaceKeyWith sets the ReplaceKeyWith field's value. +func (s *Redirect) SetReplaceKeyWith(v string) *Redirect { + s.ReplaceKeyWith = &v + return s +} - // Allows grantee to read the bucket ACL. - GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` +// Specifies the redirect behavior of all requests to a website endpoint of +// an Amazon S3 bucket. +type RedirectAllRequestsTo struct { + _ struct{} `type:"structure"` - // Allows grantee to create, overwrite, and delete any object in the bucket. - GrantWrite *string `location:"header" locationName:"x-amz-grant-write" type:"string"` + // Name of the host where requests are redirected. + // + // HostName is a required field + HostName *string `type:"string" required:"true"` - // Allows grantee to write the ACL for the applicable bucket. - GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` + // Protocol to use when redirecting requests. The default is the protocol that + // is used in the original request. + Protocol *string `type:"string" enum:"Protocol"` } // String returns the string representation -func (s PutBucketAclInput) String() string { +func (s RedirectAllRequestsTo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketAclInput) GoString() string { +func (s RedirectAllRequestsTo) GoString() string { return s.String() } -type PutBucketAclOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *RedirectAllRequestsTo) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RedirectAllRequestsTo"} + if s.HostName == nil { + invalidParams.Add(request.NewErrParamRequired("HostName")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s PutBucketAclOutput) String() string { - return awsutil.Prettify(s) +// SetHostName sets the HostName field's value. +func (s *RedirectAllRequestsTo) SetHostName(v string) *RedirectAllRequestsTo { + s.HostName = &v + return s } -// GoString returns the string representation -func (s PutBucketAclOutput) GoString() string { - return s.String() +// SetProtocol sets the Protocol field's value. +func (s *RedirectAllRequestsTo) SetProtocol(v string) *RedirectAllRequestsTo { + s.Protocol = &v + return s } -type PutBucketCorsInput struct { - _ struct{} `type:"structure" payload:"CORSConfiguration"` +// A container for replication rules. You can add up to 1,000 rules. The maximum +// size of a replication configuration is 2 MB. +type ReplicationConfiguration struct { + _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // The Amazon Resource Name (ARN) of the AWS Identity and Access Management + // (IAM) role that Amazon S3 assumes when replicating objects. For more information, + // see How to Set Up Replication (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-how-setup.html) + // in the Amazon Simple Storage Service Developer Guide. + // + // Role is a required field + Role *string `type:"string" required:"true"` - CORSConfiguration *CORSConfiguration `locationName:"CORSConfiguration" type:"structure" required:"true"` + // A container for one or more replication rules. A replication configuration + // must have at least one rule and can contain a maximum of 1,000 rules. + // + // Rules is a required field + Rules []*ReplicationRule `locationName:"Rule" type:"list" flattened:"true" required:"true"` } // String returns the string representation -func (s PutBucketCorsInput) String() string { +func (s ReplicationConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketCorsInput) GoString() string { +func (s ReplicationConfiguration) GoString() string { return s.String() } -type PutBucketCorsOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReplicationConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplicationConfiguration"} + if s.Role == nil { + invalidParams.Add(request.NewErrParamRequired("Role")) + } + if s.Rules == nil { + invalidParams.Add(request.NewErrParamRequired("Rules")) + } + if s.Rules != nil { + for i, v := range s.Rules { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Rules", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s PutBucketCorsOutput) String() string { - return awsutil.Prettify(s) +// SetRole sets the Role field's value. +func (s *ReplicationConfiguration) SetRole(v string) *ReplicationConfiguration { + s.Role = &v + return s } -// GoString returns the string representation -func (s PutBucketCorsOutput) GoString() string { - return s.String() +// SetRules sets the Rules field's value. +func (s *ReplicationConfiguration) SetRules(v []*ReplicationRule) *ReplicationConfiguration { + s.Rules = v + return s } -type PutBucketLifecycleConfigurationInput struct { - _ struct{} `type:"structure" payload:"LifecycleConfiguration"` +// Specifies which Amazon S3 objects to replicate and where to store the replicas. +type ReplicationRule struct { + _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // Specifies whether Amazon S3 replicates the delete markers. If you specify + // a Filter, you must specify this element. However, in the latest version of + // replication configuration (when Filter is specified), Amazon S3 doesn't replicate + // delete markers. Therefore, the DeleteMarkerReplication element can contain + // only Disabled. For an example configuration, see Basic Rule + // Configuration (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-config-min-rule-config). + // + // If you don't specify the Filter element, Amazon S3 assumes the replication + // configuration is the earlier version, V1. In the earlier version, Amazon + // S3 handled replication of delete markers differently. For more information, + // see Backward Compatibility (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication-add-config.html#replication-backward-compat-considerations). + DeleteMarkerReplication *DeleteMarkerReplication `type:"structure"` + + // A container for information about the replication destination. + // + // Destination is a required field + Destination *Destination `type:"structure" required:"true"` + + // A container that specifies information about existing object replication. + // You can choose whether to enable or disable the replication of existing objects. + ExistingObjectReplication *ExistingObjectReplication `type:"structure"` + + // A filter that identifies the subset of objects to which the replication rule + // applies. A Filter must specify exactly one Prefix, Tag, or an And child element. + Filter *ReplicationRuleFilter `type:"structure"` + + // A unique identifier for the rule. The maximum value is 255 characters. + ID *string `type:"string"` - LifecycleConfiguration *BucketLifecycleConfiguration `locationName:"LifecycleConfiguration" type:"structure"` + // An object keyname prefix that identifies the object or objects to which the + // rule applies. The maximum prefix length is 1,024 characters. To include all + // objects in a bucket, specify an empty string. + // + // Deprecated: Prefix has been deprecated + Prefix *string `deprecated:"true" type:"string"` + + // The priority associated with the rule. If you specify multiple rules in a + // replication configuration, Amazon S3 prioritizes the rules to prevent conflicts + // when filtering. If two or more rules identify the same object based on a + // specified filter, the rule with higher priority takes precedence. For example: + // + // * Same object quality prefix based filter criteria If prefixes you specified + // in multiple rules overlap + // + // * Same object qualify tag based filter criteria specified in multiple + // rules + // + // For more information, see Replication (https://docs.aws.amazon.com/AmazonS3/latest/dev/replication.html) + // in the Amazon S3 Developer Guide. + Priority *int64 `type:"integer"` + + // A container that describes additional filters for identifying the source + // objects that you want to replicate. You can choose to enable or disable the + // replication of these objects. Currently, Amazon S3 supports only the filter + // that you can specify for objects created with server-side encryption using + // a customer master key (CMK) stored in AWS Key Management Service (SSE-KMS). + SourceSelectionCriteria *SourceSelectionCriteria `type:"structure"` + + // Specifies whether the rule is enabled. + // + // Status is a required field + Status *string `type:"string" required:"true" enum:"ReplicationRuleStatus"` } // String returns the string representation -func (s PutBucketLifecycleConfigurationInput) String() string { +func (s ReplicationRule) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketLifecycleConfigurationInput) GoString() string { +func (s ReplicationRule) GoString() string { return s.String() } -type PutBucketLifecycleConfigurationOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReplicationRule) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplicationRule"} + if s.Destination == nil { + invalidParams.Add(request.NewErrParamRequired("Destination")) + } + if s.Status == nil { + invalidParams.Add(request.NewErrParamRequired("Status")) + } + if s.Destination != nil { + if err := s.Destination.Validate(); err != nil { + invalidParams.AddNested("Destination", err.(request.ErrInvalidParams)) + } + } + if s.ExistingObjectReplication != nil { + if err := s.ExistingObjectReplication.Validate(); err != nil { + invalidParams.AddNested("ExistingObjectReplication", err.(request.ErrInvalidParams)) + } + } + if s.Filter != nil { + if err := s.Filter.Validate(); err != nil { + invalidParams.AddNested("Filter", err.(request.ErrInvalidParams)) + } + } + if s.SourceSelectionCriteria != nil { + if err := s.SourceSelectionCriteria.Validate(); err != nil { + invalidParams.AddNested("SourceSelectionCriteria", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s PutBucketLifecycleConfigurationOutput) String() string { - return awsutil.Prettify(s) +// SetDeleteMarkerReplication sets the DeleteMarkerReplication field's value. +func (s *ReplicationRule) SetDeleteMarkerReplication(v *DeleteMarkerReplication) *ReplicationRule { + s.DeleteMarkerReplication = v + return s } -// GoString returns the string representation -func (s PutBucketLifecycleConfigurationOutput) GoString() string { - return s.String() +// SetDestination sets the Destination field's value. +func (s *ReplicationRule) SetDestination(v *Destination) *ReplicationRule { + s.Destination = v + return s } -type PutBucketLifecycleInput struct { - _ struct{} `type:"structure" payload:"LifecycleConfiguration"` +// SetExistingObjectReplication sets the ExistingObjectReplication field's value. +func (s *ReplicationRule) SetExistingObjectReplication(v *ExistingObjectReplication) *ReplicationRule { + s.ExistingObjectReplication = v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetFilter sets the Filter field's value. +func (s *ReplicationRule) SetFilter(v *ReplicationRuleFilter) *ReplicationRule { + s.Filter = v + return s +} - LifecycleConfiguration *LifecycleConfiguration `locationName:"LifecycleConfiguration" type:"structure"` +// SetID sets the ID field's value. +func (s *ReplicationRule) SetID(v string) *ReplicationRule { + s.ID = &v + return s } -// String returns the string representation -func (s PutBucketLifecycleInput) String() string { - return awsutil.Prettify(s) +// SetPrefix sets the Prefix field's value. +func (s *ReplicationRule) SetPrefix(v string) *ReplicationRule { + s.Prefix = &v + return s } -// GoString returns the string representation -func (s PutBucketLifecycleInput) GoString() string { - return s.String() +// SetPriority sets the Priority field's value. +func (s *ReplicationRule) SetPriority(v int64) *ReplicationRule { + s.Priority = &v + return s } -type PutBucketLifecycleOutput struct { +// SetSourceSelectionCriteria sets the SourceSelectionCriteria field's value. +func (s *ReplicationRule) SetSourceSelectionCriteria(v *SourceSelectionCriteria) *ReplicationRule { + s.SourceSelectionCriteria = v + return s +} + +// SetStatus sets the Status field's value. +func (s *ReplicationRule) SetStatus(v string) *ReplicationRule { + s.Status = &v + return s +} + +// A container for specifying rule filters. The filters determine the subset +// of objects to which the rule applies. This element is required only if you +// specify more than one filter. +// +// For example: +// +// * If you specify both a Prefix and a Tag filter, wrap these filters in +// an And tag. +// +// * If you specify a filter based on multiple tags, wrap the Tag elements +// in an And tag +type ReplicationRuleAndOperator struct { _ struct{} `type:"structure"` + + // An object keyname prefix that identifies the subset of objects to which the + // rule applies. + Prefix *string `type:"string"` + + // An array of tags containing key and value pairs. + Tags []*Tag `locationName:"Tag" locationNameList:"Tag" type:"list" flattened:"true"` } // String returns the string representation -func (s PutBucketLifecycleOutput) String() string { +func (s ReplicationRuleAndOperator) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketLifecycleOutput) GoString() string { +func (s ReplicationRuleAndOperator) GoString() string { return s.String() } -type PutBucketLoggingInput struct { - _ struct{} `type:"structure" payload:"BucketLoggingStatus"` - - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReplicationRuleAndOperator) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplicationRuleAndOperator"} + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } - BucketLoggingStatus *BucketLoggingStatus `locationName:"BucketLoggingStatus" type:"structure" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s PutBucketLoggingInput) String() string { - return awsutil.Prettify(s) +// SetPrefix sets the Prefix field's value. +func (s *ReplicationRuleAndOperator) SetPrefix(v string) *ReplicationRuleAndOperator { + s.Prefix = &v + return s } -// GoString returns the string representation -func (s PutBucketLoggingInput) GoString() string { - return s.String() +// SetTags sets the Tags field's value. +func (s *ReplicationRuleAndOperator) SetTags(v []*Tag) *ReplicationRuleAndOperator { + s.Tags = v + return s } -type PutBucketLoggingOutput struct { +// A filter that identifies the subset of objects to which the replication rule +// applies. A Filter must specify exactly one Prefix, Tag, or an And child element. +type ReplicationRuleFilter struct { _ struct{} `type:"structure"` + + // A container for specifying rule filters. The filters determine the subset + // of objects to which the rule applies. This element is required only if you + // specify more than one filter. For example: + // + // * If you specify both a Prefix and a Tag filter, wrap these filters in + // an And tag. + // + // * If you specify a filter based on multiple tags, wrap the Tag elements + // in an And tag. + And *ReplicationRuleAndOperator `type:"structure"` + + // An object keyname prefix that identifies the subset of objects to which the + // rule applies. + Prefix *string `type:"string"` + + // A container for specifying a tag key and value. + // + // The rule applies only to objects that have the tag in their tag set. + Tag *Tag `type:"structure"` } // String returns the string representation -func (s PutBucketLoggingOutput) String() string { +func (s ReplicationRuleFilter) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketLoggingOutput) GoString() string { +func (s ReplicationRuleFilter) GoString() string { return s.String() } -type PutBucketNotificationConfigurationInput struct { - _ struct{} `type:"structure" payload:"NotificationConfiguration"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReplicationRuleFilter) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplicationRuleFilter"} + if s.And != nil { + if err := s.And.Validate(); err != nil { + invalidParams.AddNested("And", err.(request.ErrInvalidParams)) + } + } + if s.Tag != nil { + if err := s.Tag.Validate(); err != nil { + invalidParams.AddNested("Tag", err.(request.ErrInvalidParams)) + } + } - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Container for specifying the notification configuration of the bucket. If - // this element is empty, notifications are turned off on the bucket. - NotificationConfiguration *NotificationConfiguration `locationName:"NotificationConfiguration" type:"structure" required:"true"` +// SetAnd sets the And field's value. +func (s *ReplicationRuleFilter) SetAnd(v *ReplicationRuleAndOperator) *ReplicationRuleFilter { + s.And = v + return s } -// String returns the string representation -func (s PutBucketNotificationConfigurationInput) String() string { - return awsutil.Prettify(s) +// SetPrefix sets the Prefix field's value. +func (s *ReplicationRuleFilter) SetPrefix(v string) *ReplicationRuleFilter { + s.Prefix = &v + return s } -// GoString returns the string representation -func (s PutBucketNotificationConfigurationInput) GoString() string { - return s.String() +// SetTag sets the Tag field's value. +func (s *ReplicationRuleFilter) SetTag(v *Tag) *ReplicationRuleFilter { + s.Tag = v + return s } -type PutBucketNotificationConfigurationOutput struct { +// A container specifying the time when all objects and operations on objects +// are replicated. Must be specified together with a Metrics block. +type ReplicationTime struct { _ struct{} `type:"structure"` + + // Specifies whether the replication time is enabled. + // + // Status is a required field + Status *string `type:"string" required:"true" enum:"ReplicationTimeStatus"` + + // A container specifying the time by which replication should complete for + // all objects and operations on objects. + // + // Time is a required field + Time *ReplicationTimeValue `type:"structure" required:"true"` } // String returns the string representation -func (s PutBucketNotificationConfigurationOutput) String() string { +func (s ReplicationTime) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketNotificationConfigurationOutput) GoString() string { +func (s ReplicationTime) GoString() string { return s.String() } -type PutBucketNotificationInput struct { - _ struct{} `type:"structure" payload:"NotificationConfiguration"` - - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReplicationTime) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplicationTime"} + if s.Status == nil { + invalidParams.Add(request.NewErrParamRequired("Status")) + } + if s.Time == nil { + invalidParams.Add(request.NewErrParamRequired("Time")) + } - NotificationConfiguration *NotificationConfigurationDeprecated `locationName:"NotificationConfiguration" type:"structure" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s PutBucketNotificationInput) String() string { - return awsutil.Prettify(s) +// SetStatus sets the Status field's value. +func (s *ReplicationTime) SetStatus(v string) *ReplicationTime { + s.Status = &v + return s } -// GoString returns the string representation -func (s PutBucketNotificationInput) GoString() string { - return s.String() +// SetTime sets the Time field's value. +func (s *ReplicationTime) SetTime(v *ReplicationTimeValue) *ReplicationTime { + s.Time = v + return s } -type PutBucketNotificationOutput struct { +// A container specifying the time value. +type ReplicationTimeValue struct { _ struct{} `type:"structure"` + + // Contains an integer specifying time in minutes. + Minutes *int64 `type:"integer"` } // String returns the string representation -func (s PutBucketNotificationOutput) String() string { +func (s ReplicationTimeValue) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketNotificationOutput) GoString() string { +func (s ReplicationTimeValue) GoString() string { return s.String() } -type PutBucketPolicyInput struct { - _ struct{} `type:"structure" payload:"Policy"` +// SetMinutes sets the Minutes field's value. +func (s *ReplicationTimeValue) SetMinutes(v int64) *ReplicationTimeValue { + s.Minutes = &v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// Container for Payer. +type RequestPaymentConfiguration struct { + _ struct{} `type:"structure"` - // The bucket policy as a JSON document. - Policy *string `type:"string" required:"true"` + // Specifies who pays for the download and request fees. + // + // Payer is a required field + Payer *string `type:"string" required:"true" enum:"Payer"` } // String returns the string representation -func (s PutBucketPolicyInput) String() string { +func (s RequestPaymentConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketPolicyInput) GoString() string { +func (s RequestPaymentConfiguration) GoString() string { return s.String() } -type PutBucketPolicyOutput struct { +// Validate inspects the fields of the type to determine if they are valid. +func (s *RequestPaymentConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RequestPaymentConfiguration"} + if s.Payer == nil { + invalidParams.Add(request.NewErrParamRequired("Payer")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetPayer sets the Payer field's value. +func (s *RequestPaymentConfiguration) SetPayer(v string) *RequestPaymentConfiguration { + s.Payer = &v + return s +} + +// Container for specifiying if periodic QueryProgress messages should be sent. +type RequestProgress struct { _ struct{} `type:"structure"` + + // Specifies whether periodic QueryProgress frames should be sent. Valid values: + // TRUE, FALSE. Default value: FALSE. + Enabled *bool `type:"boolean"` } // String returns the string representation -func (s PutBucketPolicyOutput) String() string { +func (s RequestProgress) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketPolicyOutput) GoString() string { +func (s RequestProgress) GoString() string { return s.String() } -type PutBucketReplicationInput struct { - _ struct{} `type:"structure" payload:"ReplicationConfiguration"` +// SetEnabled sets the Enabled field's value. +func (s *RequestProgress) SetEnabled(v bool) *RequestProgress { + s.Enabled = &v + return s +} + +type RestoreObjectInput struct { + _ struct{} `locationName:"RestoreObjectRequest" type:"structure" payload:"RestoreRequest"` + // The bucket name. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // Container for replication rules. You can add as many as 1,000 rules. Total - // replication configuration size can be up to 2 MB. - ReplicationConfiguration *ReplicationConfiguration `locationName:"ReplicationConfiguration" type:"structure" required:"true"` + // Object key for which the operation was initiated. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Confirms that the requester knows that she or he will be charged for the + // request. Bucket owners need not specify this parameter in their requests. + // Documentation on downloading objects from requester pays buckets can be found + // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html + RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + + // Container for restore job parameters. + RestoreRequest *RestoreRequest `locationName:"RestoreRequest" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` + + // VersionId used to reference a specific version of the object. + VersionId *string `location:"querystring" locationName:"versionId" type:"string"` } // String returns the string representation -func (s PutBucketReplicationInput) String() string { +func (s RestoreObjectInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketReplicationInput) GoString() string { +func (s RestoreObjectInput) GoString() string { return s.String() } -type PutBucketReplicationOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *RestoreObjectInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RestoreObjectInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.RestoreRequest != nil { + if err := s.RestoreRequest.Validate(); err != nil { + invalidParams.AddNested("RestoreRequest", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s PutBucketReplicationOutput) String() string { - return awsutil.Prettify(s) +// SetBucket sets the Bucket field's value. +func (s *RestoreObjectInput) SetBucket(v string) *RestoreObjectInput { + s.Bucket = &v + return s } -// GoString returns the string representation -func (s PutBucketReplicationOutput) GoString() string { - return s.String() +func (s *RestoreObjectInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket } -type PutBucketRequestPaymentInput struct { - _ struct{} `type:"structure" payload:"RequestPaymentConfiguration"` +// SetKey sets the Key field's value. +func (s *RestoreObjectInput) SetKey(v string) *RestoreObjectInput { + s.Key = &v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetRequestPayer sets the RequestPayer field's value. +func (s *RestoreObjectInput) SetRequestPayer(v string) *RestoreObjectInput { + s.RequestPayer = &v + return s +} + +// SetRestoreRequest sets the RestoreRequest field's value. +func (s *RestoreObjectInput) SetRestoreRequest(v *RestoreRequest) *RestoreObjectInput { + s.RestoreRequest = v + return s +} + +// SetVersionId sets the VersionId field's value. +func (s *RestoreObjectInput) SetVersionId(v string) *RestoreObjectInput { + s.VersionId = &v + return s +} - RequestPaymentConfiguration *RequestPaymentConfiguration `locationName:"RequestPaymentConfiguration" type:"structure" required:"true"` +type RestoreObjectOutput struct { + _ struct{} `type:"structure"` + + // If present, indicates that the requester was successfully charged for the + // request. + RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + + // Indicates the path in the provided S3 output location where Select results + // will be restored to. + RestoreOutputPath *string `location:"header" locationName:"x-amz-restore-output-path" type:"string"` } // String returns the string representation -func (s PutBucketRequestPaymentInput) String() string { +func (s RestoreObjectOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketRequestPaymentInput) GoString() string { +func (s RestoreObjectOutput) GoString() string { return s.String() } -type PutBucketRequestPaymentOutput struct { +// SetRequestCharged sets the RequestCharged field's value. +func (s *RestoreObjectOutput) SetRequestCharged(v string) *RestoreObjectOutput { + s.RequestCharged = &v + return s +} + +// SetRestoreOutputPath sets the RestoreOutputPath field's value. +func (s *RestoreObjectOutput) SetRestoreOutputPath(v string) *RestoreObjectOutput { + s.RestoreOutputPath = &v + return s +} + +// Container for restore job parameters. +type RestoreRequest struct { _ struct{} `type:"structure"` + + // Lifetime of the active copy in days. Do not use with restores that specify + // OutputLocation. + Days *int64 `type:"integer"` + + // The optional description for the job. + Description *string `type:"string"` + + // Glacier related parameters pertaining to this job. Do not use with restores + // that specify OutputLocation. + GlacierJobParameters *GlacierJobParameters `type:"structure"` + + // Describes the location where the restore job's output is stored. + OutputLocation *OutputLocation `type:"structure"` + + // Describes the parameters for Select job types. + SelectParameters *SelectParameters `type:"structure"` + + // Glacier retrieval tier at which the restore will be processed. + Tier *string `type:"string" enum:"Tier"` + + // Type of restore request. + Type *string `type:"string" enum:"RestoreRequestType"` } // String returns the string representation -func (s PutBucketRequestPaymentOutput) String() string { +func (s RestoreRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketRequestPaymentOutput) GoString() string { +func (s RestoreRequest) GoString() string { return s.String() } -type PutBucketTaggingInput struct { - _ struct{} `type:"structure" payload:"Tagging"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *RestoreRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RestoreRequest"} + if s.GlacierJobParameters != nil { + if err := s.GlacierJobParameters.Validate(); err != nil { + invalidParams.AddNested("GlacierJobParameters", err.(request.ErrInvalidParams)) + } + } + if s.OutputLocation != nil { + if err := s.OutputLocation.Validate(); err != nil { + invalidParams.AddNested("OutputLocation", err.(request.ErrInvalidParams)) + } + } + if s.SelectParameters != nil { + if err := s.SelectParameters.Validate(); err != nil { + invalidParams.AddNested("SelectParameters", err.(request.ErrInvalidParams)) + } + } - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - Tagging *Tagging `locationName:"Tagging" type:"structure" required:"true"` +// SetDays sets the Days field's value. +func (s *RestoreRequest) SetDays(v int64) *RestoreRequest { + s.Days = &v + return s } -// String returns the string representation -func (s PutBucketTaggingInput) String() string { - return awsutil.Prettify(s) +// SetDescription sets the Description field's value. +func (s *RestoreRequest) SetDescription(v string) *RestoreRequest { + s.Description = &v + return s } -// GoString returns the string representation -func (s PutBucketTaggingInput) GoString() string { - return s.String() +// SetGlacierJobParameters sets the GlacierJobParameters field's value. +func (s *RestoreRequest) SetGlacierJobParameters(v *GlacierJobParameters) *RestoreRequest { + s.GlacierJobParameters = v + return s } -type PutBucketTaggingOutput struct { - _ struct{} `type:"structure"` +// SetOutputLocation sets the OutputLocation field's value. +func (s *RestoreRequest) SetOutputLocation(v *OutputLocation) *RestoreRequest { + s.OutputLocation = v + return s } -// String returns the string representation -func (s PutBucketTaggingOutput) String() string { - return awsutil.Prettify(s) +// SetSelectParameters sets the SelectParameters field's value. +func (s *RestoreRequest) SetSelectParameters(v *SelectParameters) *RestoreRequest { + s.SelectParameters = v + return s } -// GoString returns the string representation -func (s PutBucketTaggingOutput) GoString() string { - return s.String() +// SetTier sets the Tier field's value. +func (s *RestoreRequest) SetTier(v string) *RestoreRequest { + s.Tier = &v + return s } -type PutBucketVersioningInput struct { - _ struct{} `type:"structure" payload:"VersioningConfiguration"` +// SetType sets the Type field's value. +func (s *RestoreRequest) SetType(v string) *RestoreRequest { + s.Type = &v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// Specifies the redirect behavior and when a redirect is applied. +type RoutingRule struct { + _ struct{} `type:"structure"` - // The concatenation of the authentication device's serial number, a space, - // and the value that is displayed on your authentication device. - MFA *string `location:"header" locationName:"x-amz-mfa" type:"string"` + // A container for describing a condition that must be met for the specified + // redirect to apply. For example, 1. If request is for pages in the /docs folder, + // redirect to the /documents folder. 2. If request results in HTTP error 4xx, + // redirect request to another host where you might process the error. + Condition *Condition `type:"structure"` - VersioningConfiguration *VersioningConfiguration `locationName:"VersioningConfiguration" type:"structure" required:"true"` + // Container for redirect information. You can redirect requests to another + // host, to another page, or with another protocol. In the event of an error, + // you can specify a different error code to return. + // + // Redirect is a required field + Redirect *Redirect `type:"structure" required:"true"` } // String returns the string representation -func (s PutBucketVersioningInput) String() string { +func (s RoutingRule) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketVersioningInput) GoString() string { +func (s RoutingRule) GoString() string { return s.String() } -type PutBucketVersioningOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *RoutingRule) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RoutingRule"} + if s.Redirect == nil { + invalidParams.Add(request.NewErrParamRequired("Redirect")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s PutBucketVersioningOutput) String() string { - return awsutil.Prettify(s) +// SetCondition sets the Condition field's value. +func (s *RoutingRule) SetCondition(v *Condition) *RoutingRule { + s.Condition = v + return s } -// GoString returns the string representation -func (s PutBucketVersioningOutput) GoString() string { - return s.String() +// SetRedirect sets the Redirect field's value. +func (s *RoutingRule) SetRedirect(v *Redirect) *RoutingRule { + s.Redirect = v + return s } -type PutBucketWebsiteInput struct { - _ struct{} `type:"structure" payload:"WebsiteConfiguration"` +// Specifies lifecycle rules for an Amazon S3 bucket. For more information, +// see PUT Bucket lifecycle (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html) +// in the Amazon Simple Storage Service API Reference. +type Rule struct { + _ struct{} `type:"structure"` - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + // Specifies the days since the initiation of an incomplete multipart upload + // that Amazon S3 will wait before permanently removing all parts of the upload. + // For more information, see Aborting Incomplete Multipart Uploads Using a Bucket + // Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config) + // in the Amazon Simple Storage Service Developer Guide. + AbortIncompleteMultipartUpload *AbortIncompleteMultipartUpload `type:"structure"` + + // Specifies the expiration for the lifecycle of the object. + Expiration *LifecycleExpiration `type:"structure"` - WebsiteConfiguration *WebsiteConfiguration `locationName:"WebsiteConfiguration" type:"structure" required:"true"` + // Unique identifier for the rule. The value can't be longer than 255 characters. + ID *string `type:"string"` + + // Specifies when noncurrent object versions expire. Upon expiration, Amazon + // S3 permanently deletes the noncurrent object versions. You set this lifecycle + // configuration action on a bucket that has versioning enabled (or suspended) + // to request that Amazon S3 delete noncurrent object versions at a specific + // period in the object's lifetime. + NoncurrentVersionExpiration *NoncurrentVersionExpiration `type:"structure"` + + // Container for the transition rule that describes when noncurrent objects + // transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, + // or DEEP_ARCHIVE storage class. If your bucket is versioning-enabled (or versioning + // is suspended), you can set this action to request that Amazon S3 transition + // noncurrent object versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, + // GLACIER, or DEEP_ARCHIVE storage class at a specific period in the object's + // lifetime. + NoncurrentVersionTransition *NoncurrentVersionTransition `type:"structure"` + + // Object key prefix that identifies one or more objects to which this rule + // applies. + // + // Prefix is a required field + Prefix *string `type:"string" required:"true"` + + // If Enabled, the rule is currently being applied. If Disabled, the rule is + // not currently being applied. + // + // Status is a required field + Status *string `type:"string" required:"true" enum:"ExpirationStatus"` + + // Specifies when an object transitions to a specified storage class. + Transition *Transition `type:"structure"` } // String returns the string representation -func (s PutBucketWebsiteInput) String() string { +func (s Rule) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutBucketWebsiteInput) GoString() string { +func (s Rule) GoString() string { return s.String() } -type PutBucketWebsiteOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *Rule) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Rule"} + if s.Prefix == nil { + invalidParams.Add(request.NewErrParamRequired("Prefix")) + } + if s.Status == nil { + invalidParams.Add(request.NewErrParamRequired("Status")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// String returns the string representation -func (s PutBucketWebsiteOutput) String() string { - return awsutil.Prettify(s) +// SetAbortIncompleteMultipartUpload sets the AbortIncompleteMultipartUpload field's value. +func (s *Rule) SetAbortIncompleteMultipartUpload(v *AbortIncompleteMultipartUpload) *Rule { + s.AbortIncompleteMultipartUpload = v + return s } -// GoString returns the string representation -func (s PutBucketWebsiteOutput) GoString() string { - return s.String() +// SetExpiration sets the Expiration field's value. +func (s *Rule) SetExpiration(v *LifecycleExpiration) *Rule { + s.Expiration = v + return s } -type PutObjectAclInput struct { - _ struct{} `type:"structure" payload:"AccessControlPolicy"` +// SetID sets the ID field's value. +func (s *Rule) SetID(v string) *Rule { + s.ID = &v + return s +} - // The canned ACL to apply to the object. - ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"ObjectCannedACL"` +// SetNoncurrentVersionExpiration sets the NoncurrentVersionExpiration field's value. +func (s *Rule) SetNoncurrentVersionExpiration(v *NoncurrentVersionExpiration) *Rule { + s.NoncurrentVersionExpiration = v + return s +} - AccessControlPolicy *AccessControlPolicy `locationName:"AccessControlPolicy" type:"structure"` +// SetNoncurrentVersionTransition sets the NoncurrentVersionTransition field's value. +func (s *Rule) SetNoncurrentVersionTransition(v *NoncurrentVersionTransition) *Rule { + s.NoncurrentVersionTransition = v + return s +} - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` +// SetPrefix sets the Prefix field's value. +func (s *Rule) SetPrefix(v string) *Rule { + s.Prefix = &v + return s +} - // Allows grantee the read, write, read ACP, and write ACP permissions on the - // bucket. - GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` +// SetStatus sets the Status field's value. +func (s *Rule) SetStatus(v string) *Rule { + s.Status = &v + return s +} - // Allows grantee to list the objects in the bucket. - GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` +// SetTransition sets the Transition field's value. +func (s *Rule) SetTransition(v *Transition) *Rule { + s.Transition = v + return s +} - // Allows grantee to read the bucket ACL. - GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` +// Specifies the use of SSE-KMS to encrypt delivered Inventory reports. +type SSEKMS struct { + _ struct{} `locationName:"SSE-KMS" type:"structure"` - // Allows grantee to create, overwrite, and delete any object in the bucket. - GrantWrite *string `location:"header" locationName:"x-amz-grant-write" type:"string"` + // Specifies the ID of the AWS Key Management Service (KMS) customer master + // key (CMK) to use for encrypting Inventory reports. + // + // KeyId is a required field + KeyId *string `type:"string" required:"true" sensitive:"true"` +} - // Allows grantee to write the ACL for the applicable bucket. - GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` +// String returns the string representation +func (s SSEKMS) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SSEKMS) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *SSEKMS) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SSEKMS"} + if s.KeyId == nil { + invalidParams.Add(request.NewErrParamRequired("KeyId")) + } - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +// SetKeyId sets the KeyId field's value. +func (s *SSEKMS) SetKeyId(v string) *SSEKMS { + s.KeyId = &v + return s +} + +// Specifies the use of SSE-S3 to encrypt delivered Inventory reports. +type SSES3 struct { + _ struct{} `locationName:"SSE-S3" type:"structure"` } // String returns the string representation -func (s PutObjectAclInput) String() string { +func (s SSES3) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutObjectAclInput) GoString() string { +func (s SSES3) GoString() string { return s.String() } -type PutObjectAclOutput struct { +type ScanRange struct { _ struct{} `type:"structure"` - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` + // Specifies the end of the byte range. This parameter is optional. Valid values: + // non-negative integers. The default value is one less than the size of the + // object being queried. If only the End parameter is supplied, it is interpreted + // to mean scan the last N bytes of the file. For example; 50 + // means scan the last 50 bytes. + End *int64 `type:"long"` + + // Specifies the start of the byte range. This parameter is optional. Valid + // values: non-negative integers. The default value is 0. If only start is supplied, + // it means scan from that point to the end of the file.For example; 50 + // means scan from byte 50 until the end of the file. + Start *int64 `type:"long"` } // String returns the string representation -func (s PutObjectAclOutput) String() string { +func (s ScanRange) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutObjectAclOutput) GoString() string { +func (s ScanRange) GoString() string { return s.String() } -type PutObjectInput struct { - _ struct{} `type:"structure" payload:"Body"` +// SetEnd sets the End field's value. +func (s *ScanRange) SetEnd(v int64) *ScanRange { + s.End = &v + return s +} - // The canned ACL to apply to the object. - ACL *string `location:"header" locationName:"x-amz-acl" type:"string" enum:"ObjectCannedACL"` +// SetStart sets the Start field's value. +func (s *ScanRange) SetStart(v int64) *ScanRange { + s.Start = &v + return s +} - // Object data. - Body io.ReadSeeker `type:"blob"` +// SelectObjectContentEventStream provides handling of EventStreams for +// the SelectObjectContent API. +// +// Use this type to receive SelectObjectContentEventStream events. The events +// can be read from the Events channel member. +// +// The events that can be received are: +// +// * ContinuationEvent +// * EndEvent +// * ProgressEvent +// * RecordsEvent +// * StatsEvent +type SelectObjectContentEventStream struct { + // Reader is the EventStream reader for the SelectObjectContentEventStream + // events. This value is automatically set by the SDK when the API call is made + // Use this member when unit testing your code with the SDK to mock out the + // EventStream Reader. + // + // Must not be nil. + Reader SelectObjectContentEventStreamReader + + // StreamCloser is the io.Closer for the EventStream connection. For HTTP + // EventStream this is the response Body. The stream will be closed when + // the Close method of the EventStream is called. + StreamCloser io.Closer +} + +// Close closes the EventStream. This will also cause the Events channel to be +// closed. You can use the closing of the Events channel to terminate your +// application's read from the API's EventStream. +// +// Will close the underlying EventStream reader. For EventStream over HTTP +// connection this will also close the HTTP connection. +// +// Close must be called when done using the EventStream API. Not calling Close +// may result in resource leaks. +func (es *SelectObjectContentEventStream) Close() (err error) { + es.Reader.Close() + es.StreamCloser.Close() - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + return es.Err() +} - // Specifies caching behavior along the request/reply chain. - CacheControl *string `location:"header" locationName:"Cache-Control" type:"string"` +// Err returns any error that occurred while reading EventStream Events from +// the service API's response. Returns nil if there were no errors. +func (es *SelectObjectContentEventStream) Err() error { + if err := es.Reader.Err(); err != nil { + return err + } + return nil +} - // Specifies presentational information for the object. - ContentDisposition *string `location:"header" locationName:"Content-Disposition" type:"string"` +// Events returns a channel to read EventStream Events from the +// SelectObjectContent API. +// +// These events are: +// +// * ContinuationEvent +// * EndEvent +// * ProgressEvent +// * RecordsEvent +// * StatsEvent +func (es *SelectObjectContentEventStream) Events() <-chan SelectObjectContentEventStreamEvent { + return es.Reader.Events() +} - // Specifies what content encodings have been applied to the object and thus - // what decoding mechanisms must be applied to obtain the media-type referenced - // by the Content-Type header field. - ContentEncoding *string `location:"header" locationName:"Content-Encoding" type:"string"` +// SelectObjectContentEventStreamEvent groups together all EventStream +// events read from the SelectObjectContent API. +// +// These events are: +// +// * ContinuationEvent +// * EndEvent +// * ProgressEvent +// * RecordsEvent +// * StatsEvent +type SelectObjectContentEventStreamEvent interface { + eventSelectObjectContentEventStream() +} + +// SelectObjectContentEventStreamReader provides the interface for reading EventStream +// Events from the SelectObjectContent API. The +// default implementation for this interface will be SelectObjectContentEventStream. +// +// The reader's Close method must allow multiple concurrent calls. +// +// These events are: +// +// * ContinuationEvent +// * EndEvent +// * ProgressEvent +// * RecordsEvent +// * StatsEvent +type SelectObjectContentEventStreamReader interface { + // Returns a channel of events as they are read from the event stream. + Events() <-chan SelectObjectContentEventStreamEvent + + // Close will close the underlying event stream reader. For event stream over + // HTTP this will also close the HTTP connection. + Close() error + + // Returns any error that has occurred while reading from the event stream. + Err() error +} + +type readSelectObjectContentEventStream struct { + eventReader *eventstreamapi.EventReader + stream chan SelectObjectContentEventStreamEvent + errVal atomic.Value + + done chan struct{} + closeOnce sync.Once +} + +func newReadSelectObjectContentEventStream( + reader io.ReadCloser, + unmarshalers request.HandlerList, + logger aws.Logger, + logLevel aws.LogLevelType, +) *readSelectObjectContentEventStream { + r := &readSelectObjectContentEventStream{ + stream: make(chan SelectObjectContentEventStreamEvent), + done: make(chan struct{}), + } - // The language the content is in. - ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"` + r.eventReader = eventstreamapi.NewEventReader( + reader, + protocol.HandlerPayloadUnmarshal{ + Unmarshalers: unmarshalers, + }, + r.unmarshalerForEventType, + ) + r.eventReader.UseLogger(logger, logLevel) - // Size of the body in bytes. This parameter is useful when the size of the - // body cannot be determined automatically. - ContentLength *int64 `location:"header" locationName:"Content-Length" type:"integer"` + return r +} - // A standard MIME type describing the format of the object data. - ContentType *string `location:"header" locationName:"Content-Type" type:"string"` +// Close will close the underlying event stream reader. For EventStream over +// HTTP this will also close the HTTP connection. +func (r *readSelectObjectContentEventStream) Close() error { + r.closeOnce.Do(r.safeClose) - // The date and time at which the object is no longer cacheable. - Expires *time.Time `location:"header" locationName:"Expires" type:"timestamp" timestampFormat:"rfc822"` + return r.Err() +} - // Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object. - GrantFullControl *string `location:"header" locationName:"x-amz-grant-full-control" type:"string"` +func (r *readSelectObjectContentEventStream) safeClose() { + close(r.done) + err := r.eventReader.Close() + if err != nil { + r.errVal.Store(err) + } +} - // Allows grantee to read the object data and its metadata. - GrantRead *string `location:"header" locationName:"x-amz-grant-read" type:"string"` +func (r *readSelectObjectContentEventStream) Err() error { + if v := r.errVal.Load(); v != nil { + return v.(error) + } - // Allows grantee to read the object ACL. - GrantReadACP *string `location:"header" locationName:"x-amz-grant-read-acp" type:"string"` + return nil +} + +func (r *readSelectObjectContentEventStream) Events() <-chan SelectObjectContentEventStreamEvent { + return r.stream +} + +func (r *readSelectObjectContentEventStream) readEventStream() { + defer close(r.stream) + + for { + event, err := r.eventReader.ReadEvent() + if err != nil { + if err == io.EOF { + return + } + select { + case <-r.done: + // If closed already ignore the error + return + default: + } + r.errVal.Store(err) + return + } + + select { + case r.stream <- event.(SelectObjectContentEventStreamEvent): + case <-r.done: + return + } + } +} - // Allows grantee to write the ACL for the applicable object. - GrantWriteACP *string `location:"header" locationName:"x-amz-grant-write-acp" type:"string"` +func (r *readSelectObjectContentEventStream) unmarshalerForEventType( + eventType string, +) (eventstreamapi.Unmarshaler, error) { + switch eventType { + case "Cont": + return &ContinuationEvent{}, nil - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + case "End": + return &EndEvent{}, nil - // A map of metadata to store with the object in S3. - Metadata map[string]*string `location:"headers" locationName:"x-amz-meta-" type:"map"` + case "Progress": + return &ProgressEvent{}, nil - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` + case "Records": + return &RecordsEvent{}, nil - // Specifies the algorithm to use to when encrypting the object (e.g., AES256). - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + case "Stats": + return &StatsEvent{}, nil + default: + return nil, awserr.New( + request.ErrCodeSerialization, + fmt.Sprintf("unknown event type name, %s, for SelectObjectContentEventStream", eventType), + nil, + ) + } +} - // Specifies the customer-provided encryption key for Amazon S3 to use in encrypting - // data. This value is used to store the object and then it is discarded; Amazon - // does not store the encryption key. The key must be appropriate for use with - // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm - // header. - SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string"` +// Request to filter the contents of an Amazon S3 object based on a simple Structured +// Query Language (SQL) statement. In the request, along with the SQL expression, +// you must specify a data serialization format (JSON or CSV) of the object. +// Amazon S3 uses this to parse object data into records. It returns only records +// that match the specified SQL expression. You must also specify the data serialization +// format for the response. For more information, see S3Select API Documentation +// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html). +type SelectObjectContentInput struct { + _ struct{} `locationName:"SelectObjectContentRequest" type:"structure" xmlURI:"http://s3.amazonaws.com/doc/2006-03-01/"` - // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. - // Amazon S3 uses this header for a message integrity check to ensure the encryption - // key was transmitted without error. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + // The S3 bucket. + // + // Bucket is a required field + Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` - // Specifies the AWS KMS key ID to use for object encryption. All GET and PUT - // requests for an object protected by AWS KMS will fail if not made via SSL - // or using SigV4. Documentation on configuring any of the officially supported - // AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` + // The expression that is used to query the object. + // + // Expression is a required field + Expression *string `type:"string" required:"true"` - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` + // The type of the provided expression (for example., SQL). + // + // ExpressionType is a required field + ExpressionType *string `type:"string" required:"true" enum:"ExpressionType"` - // The type of storage to use for the object. Defaults to 'STANDARD'. - StorageClass *string `location:"header" locationName:"x-amz-storage-class" type:"string" enum:"StorageClass"` + // Describes the format of the data in the object that is being queried. + // + // InputSerialization is a required field + InputSerialization *InputSerialization `type:"structure" required:"true"` - // If the bucket is configured as a website, redirects requests for this object - // to another object in the same bucket or to an external URL. Amazon S3 stores - // the value of this header in the object metadata. - WebsiteRedirectLocation *string `location:"header" locationName:"x-amz-website-redirect-location" type:"string"` + // The object key. + // + // Key is a required field + Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` + + // Describes the format of the data that you want Amazon S3 to return in response. + // + // OutputSerialization is a required field + OutputSerialization *OutputSerialization `type:"structure" required:"true"` + + // Specifies if periodic request progress information should be enabled. + RequestProgress *RequestProgress `type:"structure"` + + // The SSE Algorithm used to encrypt the object. For more information, see Server-Side + // Encryption (Using Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html). + SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` + + // The SSE Customer Key. For more information, see Server-Side Encryption (Using + // Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html). + SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"` + + // The SSE Customer Key MD5. For more information, see Server-Side Encryption + // (Using Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html). + SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` + + // Specifies the byte range of the object to get the records from. A record + // is processed when its first byte is contained by the range. This parameter + // is optional, but when specified, it must not be empty. See RFC 2616, Section + // 14.35.1 about how to specify the start and end of the range. + // + // ScanRangemay be used in the following ways: + // + // * 50100 - process only + // the records starting between the bytes 50 and 100 (inclusive, counting + // from zero) + // + // * 50 - process only the records + // starting after the byte 50 + // + // * 50 - process only the records within + // the last 50 bytes of the file. + ScanRange *ScanRange `type:"structure"` } // String returns the string representation -func (s PutObjectInput) String() string { +func (s SelectObjectContentInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PutObjectInput) GoString() string { +func (s SelectObjectContentInput) GoString() string { return s.String() } -type PutObjectOutput struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *SelectObjectContentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SelectObjectContentInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Expression == nil { + invalidParams.Add(request.NewErrParamRequired("Expression")) + } + if s.ExpressionType == nil { + invalidParams.Add(request.NewErrParamRequired("ExpressionType")) + } + if s.InputSerialization == nil { + invalidParams.Add(request.NewErrParamRequired("InputSerialization")) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.OutputSerialization == nil { + invalidParams.Add(request.NewErrParamRequired("OutputSerialization")) + } - // Entity tag for the uploaded object. - ETag *string `location:"header" locationName:"ETag" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // If the object expiration is configured, this will contain the expiration - // date (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded. - Expiration *string `location:"header" locationName:"x-amz-expiration" type:"string"` +// SetBucket sets the Bucket field's value. +func (s *SelectObjectContentInput) SetBucket(v string) *SelectObjectContentInput { + s.Bucket = &v + return s +} - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +func (s *SelectObjectContentInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header confirming the encryption algorithm - // used. - SSECustomerAlgorithm *string `location:"header" locationName:"x-amz-server-side-encryption-customer-algorithm" type:"string"` +// SetExpression sets the Expression field's value. +func (s *SelectObjectContentInput) SetExpression(v string) *SelectObjectContentInput { + s.Expression = &v + return s +} - // If server-side encryption with a customer-provided encryption key was requested, - // the response will include this header to provide round trip message integrity - // verification of the customer-provided encryption key. - SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` +// SetExpressionType sets the ExpressionType field's value. +func (s *SelectObjectContentInput) SetExpressionType(v string) *SelectObjectContentInput { + s.ExpressionType = &v + return s +} - // If present, specifies the ID of the AWS Key Management Service (KMS) master - // encryption key that was used for the object. - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` +// SetInputSerialization sets the InputSerialization field's value. +func (s *SelectObjectContentInput) SetInputSerialization(v *InputSerialization) *SelectObjectContentInput { + s.InputSerialization = v + return s +} - // The Server-side encryption algorithm used when storing this object in S3 - // (e.g., AES256, aws:kms). - ServerSideEncryption *string `location:"header" locationName:"x-amz-server-side-encryption" type:"string" enum:"ServerSideEncryption"` +// SetKey sets the Key field's value. +func (s *SelectObjectContentInput) SetKey(v string) *SelectObjectContentInput { + s.Key = &v + return s +} - // Version of the object. - VersionId *string `location:"header" locationName:"x-amz-version-id" type:"string"` +// SetOutputSerialization sets the OutputSerialization field's value. +func (s *SelectObjectContentInput) SetOutputSerialization(v *OutputSerialization) *SelectObjectContentInput { + s.OutputSerialization = v + return s } -// String returns the string representation -func (s PutObjectOutput) String() string { - return awsutil.Prettify(s) +// SetRequestProgress sets the RequestProgress field's value. +func (s *SelectObjectContentInput) SetRequestProgress(v *RequestProgress) *SelectObjectContentInput { + s.RequestProgress = v + return s } -// GoString returns the string representation -func (s PutObjectOutput) GoString() string { - return s.String() +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *SelectObjectContentInput) SetSSECustomerAlgorithm(v string) *SelectObjectContentInput { + s.SSECustomerAlgorithm = &v + return s } -// Container for specifying an configuration when you want Amazon S3 to publish -// events to an Amazon Simple Queue Service (Amazon SQS) queue. -type QueueConfiguration struct { - _ struct{} `type:"structure"` +// SetSSECustomerKey sets the SSECustomerKey field's value. +func (s *SelectObjectContentInput) SetSSECustomerKey(v string) *SelectObjectContentInput { + s.SSECustomerKey = &v + return s +} - Events []*string `locationName:"Event" type:"list" flattened:"true" required:"true"` +func (s *SelectObjectContentInput) getSSECustomerKey() (v string) { + if s.SSECustomerKey == nil { + return v + } + return *s.SSECustomerKey +} - // Container for object key name filtering rules. For information about key - // name filtering, go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) - // in the Amazon Simple Storage Service Developer Guide. - Filter *NotificationConfigurationFilter `type:"structure"` +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *SelectObjectContentInput) SetSSECustomerKeyMD5(v string) *SelectObjectContentInput { + s.SSECustomerKeyMD5 = &v + return s +} - // Optional unique identifier for configurations in a notification configuration. - // If you don't provide one, Amazon S3 will assign an ID. - Id *string `type:"string"` +// SetScanRange sets the ScanRange field's value. +func (s *SelectObjectContentInput) SetScanRange(v *ScanRange) *SelectObjectContentInput { + s.ScanRange = v + return s +} - // Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects - // events of specified type. - QueueArn *string `locationName:"Queue" type:"string" required:"true"` +type SelectObjectContentOutput struct { + _ struct{} `type:"structure" payload:"Payload"` + + // Use EventStream to use the API's stream. + EventStream *SelectObjectContentEventStream `type:"structure"` } // String returns the string representation -func (s QueueConfiguration) String() string { +func (s SelectObjectContentOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s QueueConfiguration) GoString() string { +func (s SelectObjectContentOutput) GoString() string { return s.String() } -type QueueConfigurationDeprecated struct { +// SetEventStream sets the EventStream field's value. +func (s *SelectObjectContentOutput) SetEventStream(v *SelectObjectContentEventStream) *SelectObjectContentOutput { + s.EventStream = v + return s +} + +func (s *SelectObjectContentOutput) runEventStreamLoop(r *request.Request) { + if r.Error != nil { + return + } + reader := newReadSelectObjectContentEventStream( + r.HTTPResponse.Body, + r.Handlers.UnmarshalStream, + r.Config.Logger, + r.Config.LogLevel.Value(), + ) + go reader.readEventStream() + + eventStream := &SelectObjectContentEventStream{ + StreamCloser: r.HTTPResponse.Body, + Reader: reader, + } + s.EventStream = eventStream +} + +// Describes the parameters for Select job types. +type SelectParameters struct { _ struct{} `type:"structure"` - // Bucket event for which to send notifications. - Event *string `type:"string" enum:"Event"` + // The expression that is used to query the object. + // + // Expression is a required field + Expression *string `type:"string" required:"true"` - Events []*string `locationName:"Event" type:"list" flattened:"true"` + // The type of the provided expression (e.g., SQL). + // + // ExpressionType is a required field + ExpressionType *string `type:"string" required:"true" enum:"ExpressionType"` - // Optional unique identifier for configurations in a notification configuration. - // If you don't provide one, Amazon S3 will assign an ID. - Id *string `type:"string"` + // Describes the serialization format of the object. + // + // InputSerialization is a required field + InputSerialization *InputSerialization `type:"structure" required:"true"` - Queue *string `type:"string"` + // Describes how the results of the Select job are serialized. + // + // OutputSerialization is a required field + OutputSerialization *OutputSerialization `type:"structure" required:"true"` } // String returns the string representation -func (s QueueConfigurationDeprecated) String() string { +func (s SelectParameters) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s QueueConfigurationDeprecated) GoString() string { +func (s SelectParameters) GoString() string { return s.String() } -type Redirect struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *SelectParameters) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SelectParameters"} + if s.Expression == nil { + invalidParams.Add(request.NewErrParamRequired("Expression")) + } + if s.ExpressionType == nil { + invalidParams.Add(request.NewErrParamRequired("ExpressionType")) + } + if s.InputSerialization == nil { + invalidParams.Add(request.NewErrParamRequired("InputSerialization")) + } + if s.OutputSerialization == nil { + invalidParams.Add(request.NewErrParamRequired("OutputSerialization")) + } - // The host name to use in the redirect request. - HostName *string `type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // The HTTP redirect code to use on the response. Not required if one of the - // siblings is present. - HttpRedirectCode *string `type:"string"` +// SetExpression sets the Expression field's value. +func (s *SelectParameters) SetExpression(v string) *SelectParameters { + s.Expression = &v + return s +} - // Protocol to use (http, https) when redirecting requests. The default is the - // protocol that is used in the original request. - Protocol *string `type:"string" enum:"Protocol"` +// SetExpressionType sets the ExpressionType field's value. +func (s *SelectParameters) SetExpressionType(v string) *SelectParameters { + s.ExpressionType = &v + return s +} - // The object key prefix to use in the redirect request. For example, to redirect - // requests for all pages with prefix docs/ (objects in the docs/ folder) to - // documents/, you can set a condition block with KeyPrefixEquals set to docs/ - // and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required - // if one of the siblings is present. Can be present only if ReplaceKeyWith - // is not provided. - ReplaceKeyPrefixWith *string `type:"string"` +// SetInputSerialization sets the InputSerialization field's value. +func (s *SelectParameters) SetInputSerialization(v *InputSerialization) *SelectParameters { + s.InputSerialization = v + return s +} - // The specific object key to use in the redirect request. For example, redirect - // request to error.html. Not required if one of the sibling is present. Can - // be present only if ReplaceKeyPrefixWith is not provided. - ReplaceKeyWith *string `type:"string"` +// SetOutputSerialization sets the OutputSerialization field's value. +func (s *SelectParameters) SetOutputSerialization(v *OutputSerialization) *SelectParameters { + s.OutputSerialization = v + return s +} + +// Describes the default server-side encryption to apply to new objects in the +// bucket. If a PUT Object request doesn't specify any server-side encryption, +// this default encryption will be applied. For more information, see PUT Bucket +// encryption (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html) +// in the Amazon Simple Storage Service API Reference. +type ServerSideEncryptionByDefault struct { + _ struct{} `type:"structure"` + + // KMS master key ID to use for the default encryption. This parameter is allowed + // if and only if SSEAlgorithm is set to aws:kms. + KMSMasterKeyID *string `type:"string" sensitive:"true"` + + // Server-side encryption algorithm to use for the default encryption. + // + // SSEAlgorithm is a required field + SSEAlgorithm *string `type:"string" required:"true" enum:"ServerSideEncryption"` } // String returns the string representation -func (s Redirect) String() string { +func (s ServerSideEncryptionByDefault) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Redirect) GoString() string { +func (s ServerSideEncryptionByDefault) GoString() string { return s.String() } -type RedirectAllRequestsTo struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ServerSideEncryptionByDefault) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ServerSideEncryptionByDefault"} + if s.SSEAlgorithm == nil { + invalidParams.Add(request.NewErrParamRequired("SSEAlgorithm")) + } - // Name of the host where requests will be redirected. - HostName *string `type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Protocol to use (http, https) when redirecting requests. The default is the - // protocol that is used in the original request. - Protocol *string `type:"string" enum:"Protocol"` +// SetKMSMasterKeyID sets the KMSMasterKeyID field's value. +func (s *ServerSideEncryptionByDefault) SetKMSMasterKeyID(v string) *ServerSideEncryptionByDefault { + s.KMSMasterKeyID = &v + return s +} + +// SetSSEAlgorithm sets the SSEAlgorithm field's value. +func (s *ServerSideEncryptionByDefault) SetSSEAlgorithm(v string) *ServerSideEncryptionByDefault { + s.SSEAlgorithm = &v + return s +} + +// Specifies the default server-side-encryption configuration. +type ServerSideEncryptionConfiguration struct { + _ struct{} `type:"structure"` + + // Container for information about a particular server-side encryption configuration + // rule. + // + // Rules is a required field + Rules []*ServerSideEncryptionRule `locationName:"Rule" type:"list" flattened:"true" required:"true"` } // String returns the string representation -func (s RedirectAllRequestsTo) String() string { +func (s ServerSideEncryptionConfiguration) String() string { return awsutil.Prettify(s) } -// GoString returns the string representation -func (s RedirectAllRequestsTo) GoString() string { - return s.String() +// GoString returns the string representation +func (s ServerSideEncryptionConfiguration) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ServerSideEncryptionConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ServerSideEncryptionConfiguration"} + if s.Rules == nil { + invalidParams.Add(request.NewErrParamRequired("Rules")) + } + if s.Rules != nil { + for i, v := range s.Rules { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Rules", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetRules sets the Rules field's value. +func (s *ServerSideEncryptionConfiguration) SetRules(v []*ServerSideEncryptionRule) *ServerSideEncryptionConfiguration { + s.Rules = v + return s } -// Container for replication rules. You can add as many as 1,000 rules. Total -// replication configuration size can be up to 2 MB. -type ReplicationConfiguration struct { +// Specifies the default server-side encryption configuration. +type ServerSideEncryptionRule struct { _ struct{} `type:"structure"` - // Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating - // the objects. - Role *string `type:"string" required:"true"` - - // Container for information about a particular replication rule. Replication - // configuration must have at least one rule and can contain up to 1,000 rules. - Rules []*ReplicationRule `locationName:"Rule" type:"list" flattened:"true" required:"true"` + // Specifies the default server-side encryption to apply to new objects in the + // bucket. If a PUT Object request doesn't specify any server-side encryption, + // this default encryption will be applied. + ApplyServerSideEncryptionByDefault *ServerSideEncryptionByDefault `type:"structure"` } // String returns the string representation -func (s ReplicationConfiguration) String() string { +func (s ServerSideEncryptionRule) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplicationConfiguration) GoString() string { +func (s ServerSideEncryptionRule) GoString() string { return s.String() } -type ReplicationRule struct { - _ struct{} `type:"structure"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *ServerSideEncryptionRule) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ServerSideEncryptionRule"} + if s.ApplyServerSideEncryptionByDefault != nil { + if err := s.ApplyServerSideEncryptionByDefault.Validate(); err != nil { + invalidParams.AddNested("ApplyServerSideEncryptionByDefault", err.(request.ErrInvalidParams)) + } + } - Destination *Destination `type:"structure" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Unique identifier for the rule. The value cannot be longer than 255 characters. - ID *string `type:"string"` +// SetApplyServerSideEncryptionByDefault sets the ApplyServerSideEncryptionByDefault field's value. +func (s *ServerSideEncryptionRule) SetApplyServerSideEncryptionByDefault(v *ServerSideEncryptionByDefault) *ServerSideEncryptionRule { + s.ApplyServerSideEncryptionByDefault = v + return s +} - // Object keyname prefix identifying one or more objects to which the rule applies. - // Maximum prefix length can be up to 1,024 characters. Overlapping prefixes - // are not supported. - Prefix *string `type:"string" required:"true"` +// A container that describes additional filters for identifying the source +// objects that you want to replicate. You can choose to enable or disable the +// replication of these objects. Currently, Amazon S3 supports only the filter +// that you can specify for objects created with server-side encryption using +// a customer master key (CMK) stored in AWS Key Management Service (SSE-KMS). +type SourceSelectionCriteria struct { + _ struct{} `type:"structure"` - // The rule is ignored if status is not Enabled. - Status *string `type:"string" required:"true" enum:"ReplicationRuleStatus"` + // A container for filter information for the selection of Amazon S3 objects + // encrypted with AWS KMS. If you include SourceSelectionCriteria in the replication + // configuration, this element is required. + SseKmsEncryptedObjects *SseKmsEncryptedObjects `type:"structure"` } // String returns the string representation -func (s ReplicationRule) String() string { +func (s SourceSelectionCriteria) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplicationRule) GoString() string { +func (s SourceSelectionCriteria) GoString() string { return s.String() } -type RequestPaymentConfiguration struct { +// Validate inspects the fields of the type to determine if they are valid. +func (s *SourceSelectionCriteria) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SourceSelectionCriteria"} + if s.SseKmsEncryptedObjects != nil { + if err := s.SseKmsEncryptedObjects.Validate(); err != nil { + invalidParams.AddNested("SseKmsEncryptedObjects", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetSseKmsEncryptedObjects sets the SseKmsEncryptedObjects field's value. +func (s *SourceSelectionCriteria) SetSseKmsEncryptedObjects(v *SseKmsEncryptedObjects) *SourceSelectionCriteria { + s.SseKmsEncryptedObjects = v + return s +} + +// A container for filter information for the selection of S3 objects encrypted +// with AWS KMS. +type SseKmsEncryptedObjects struct { _ struct{} `type:"structure"` - // Specifies who pays for the download and request fees. - Payer *string `type:"string" required:"true" enum:"Payer"` + // Specifies whether Amazon S3 replicates objects created with server-side encryption + // using a customer master key (CMK) stored in AWS Key Management Service. + // + // Status is a required field + Status *string `type:"string" required:"true" enum:"SseKmsEncryptedObjectsStatus"` } // String returns the string representation -func (s RequestPaymentConfiguration) String() string { +func (s SseKmsEncryptedObjects) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RequestPaymentConfiguration) GoString() string { +func (s SseKmsEncryptedObjects) GoString() string { return s.String() } -type RestoreObjectInput struct { - _ struct{} `type:"structure" payload:"RestoreRequest"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *SseKmsEncryptedObjects) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SseKmsEncryptedObjects"} + if s.Status == nil { + invalidParams.Add(request.NewErrParamRequired("Status")) + } - Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` +// SetStatus sets the Status field's value. +func (s *SseKmsEncryptedObjects) SetStatus(v string) *SseKmsEncryptedObjects { + s.Status = &v + return s +} - // Confirms that the requester knows that she or he will be charged for the - // request. Bucket owners need not specify this parameter in their requests. - // Documentation on downloading objects from requester pays buckets can be found - // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html - RequestPayer *string `location:"header" locationName:"x-amz-request-payer" type:"string" enum:"RequestPayer"` +// Container for the stats details. +type Stats struct { + _ struct{} `type:"structure"` - RestoreRequest *RestoreRequest `locationName:"RestoreRequest" type:"structure"` + // The total number of uncompressed object bytes processed. + BytesProcessed *int64 `type:"long"` - VersionId *string `location:"querystring" locationName:"versionId" type:"string"` + // The total number of bytes of records payload data returned. + BytesReturned *int64 `type:"long"` + + // The total number of object bytes scanned. + BytesScanned *int64 `type:"long"` } // String returns the string representation -func (s RestoreObjectInput) String() string { +func (s Stats) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RestoreObjectInput) GoString() string { +func (s Stats) GoString() string { return s.String() } -type RestoreObjectOutput struct { - _ struct{} `type:"structure"` - - // If present, indicates that the requester was successfully charged for the - // request. - RequestCharged *string `location:"header" locationName:"x-amz-request-charged" type:"string" enum:"RequestCharged"` +// SetBytesProcessed sets the BytesProcessed field's value. +func (s *Stats) SetBytesProcessed(v int64) *Stats { + s.BytesProcessed = &v + return s } -// String returns the string representation -func (s RestoreObjectOutput) String() string { - return awsutil.Prettify(s) +// SetBytesReturned sets the BytesReturned field's value. +func (s *Stats) SetBytesReturned(v int64) *Stats { + s.BytesReturned = &v + return s } -// GoString returns the string representation -func (s RestoreObjectOutput) GoString() string { - return s.String() +// SetBytesScanned sets the BytesScanned field's value. +func (s *Stats) SetBytesScanned(v int64) *Stats { + s.BytesScanned = &v + return s } -type RestoreRequest struct { - _ struct{} `type:"structure"` +// Container for the Stats Event. +type StatsEvent struct { + _ struct{} `locationName:"StatsEvent" type:"structure" payload:"Details"` - // Lifetime of the active copy in days - Days *int64 `type:"integer" required:"true"` + // The Stats event details. + Details *Stats `locationName:"Details" type:"structure"` } // String returns the string representation -func (s RestoreRequest) String() string { +func (s StatsEvent) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RestoreRequest) GoString() string { +func (s StatsEvent) GoString() string { return s.String() } -type RoutingRule struct { - _ struct{} `type:"structure"` +// SetDetails sets the Details field's value. +func (s *StatsEvent) SetDetails(v *Stats) *StatsEvent { + s.Details = v + return s +} - // A container for describing a condition that must be met for the specified - // redirect to apply. For example, 1. If request is for pages in the /docs folder, - // redirect to the /documents folder. 2. If request results in HTTP error 4xx, - // redirect request to another host where you might process the error. - Condition *Condition `type:"structure"` +// The StatsEvent is and event in the SelectObjectContentEventStream group of events. +func (s *StatsEvent) eventSelectObjectContentEventStream() {} - // Container for redirect information. You can redirect requests to another - // host, to another page, or with another protocol. In the event of an error, - // you can can specify a different error code to return. - Redirect *Redirect `type:"structure" required:"true"` +// UnmarshalEvent unmarshals the EventStream Message into the StatsEvent value. +// This method is only used internally within the SDK's EventStream handling. +func (s *StatsEvent) UnmarshalEvent( + payloadUnmarshaler protocol.PayloadUnmarshaler, + msg eventstream.Message, +) error { + if err := payloadUnmarshaler.UnmarshalPayload( + bytes.NewReader(msg.Payload), s, + ); err != nil { + return err + } + return nil +} + +// Specifies data related to access patterns to be collected and made available +// to analyze the tradeoffs between different storage classes for an Amazon +// S3 bucket. +type StorageClassAnalysis struct { + _ struct{} `type:"structure"` + + // Specifies how data related to the storage class analysis for an Amazon S3 + // bucket should be exported. + DataExport *StorageClassAnalysisDataExport `type:"structure"` } // String returns the string representation -func (s RoutingRule) String() string { +func (s StorageClassAnalysis) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RoutingRule) GoString() string { +func (s StorageClassAnalysis) GoString() string { return s.String() } -type Rule struct { - _ struct{} `type:"structure"` - - Expiration *LifecycleExpiration `type:"structure"` - - // Unique identifier for the rule. The value cannot be longer than 255 characters. - ID *string `type:"string"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *StorageClassAnalysis) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "StorageClassAnalysis"} + if s.DataExport != nil { + if err := s.DataExport.Validate(); err != nil { + invalidParams.AddNested("DataExport", err.(request.ErrInvalidParams)) + } + } - // Specifies when noncurrent object versions expire. Upon expiration, Amazon - // S3 permanently deletes the noncurrent object versions. You set this lifecycle - // configuration action on a bucket that has versioning enabled (or suspended) - // to request that Amazon S3 delete noncurrent object versions at a specific - // period in the object's lifetime. - NoncurrentVersionExpiration *NoncurrentVersionExpiration `type:"structure"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} - // Container for the transition rule that describes when noncurrent objects - // transition to the STANDARD_IA or GLACIER storage class. If your bucket is - // versioning-enabled (or versioning is suspended), you can set this action - // to request that Amazon S3 transition noncurrent object versions to the STANDARD_IA - // or GLACIER storage class at a specific period in the object's lifetime. - NoncurrentVersionTransition *NoncurrentVersionTransition `type:"structure"` +// SetDataExport sets the DataExport field's value. +func (s *StorageClassAnalysis) SetDataExport(v *StorageClassAnalysisDataExport) *StorageClassAnalysis { + s.DataExport = v + return s +} - // Prefix identifying one or more objects to which the rule applies. - Prefix *string `type:"string" required:"true"` +// Container for data related to the storage class analysis for an Amazon S3 +// bucket for export. +type StorageClassAnalysisDataExport struct { + _ struct{} `type:"structure"` - // If 'Enabled', the rule is currently being applied. If 'Disabled', the rule - // is not currently being applied. - Status *string `type:"string" required:"true" enum:"ExpirationStatus"` + // The place to store the data for an analysis. + // + // Destination is a required field + Destination *AnalyticsExportDestination `type:"structure" required:"true"` - Transition *Transition `type:"structure"` + // The version of the output schema to use when exporting data. Must be V_1. + // + // OutputSchemaVersion is a required field + OutputSchemaVersion *string `type:"string" required:"true" enum:"StorageClassAnalysisSchemaVersion"` } // String returns the string representation -func (s Rule) String() string { +func (s StorageClassAnalysisDataExport) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Rule) GoString() string { +func (s StorageClassAnalysisDataExport) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *StorageClassAnalysisDataExport) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "StorageClassAnalysisDataExport"} + if s.Destination == nil { + invalidParams.Add(request.NewErrParamRequired("Destination")) + } + if s.OutputSchemaVersion == nil { + invalidParams.Add(request.NewErrParamRequired("OutputSchemaVersion")) + } + if s.Destination != nil { + if err := s.Destination.Validate(); err != nil { + invalidParams.AddNested("Destination", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestination sets the Destination field's value. +func (s *StorageClassAnalysisDataExport) SetDestination(v *AnalyticsExportDestination) *StorageClassAnalysisDataExport { + s.Destination = v + return s +} + +// SetOutputSchemaVersion sets the OutputSchemaVersion field's value. +func (s *StorageClassAnalysisDataExport) SetOutputSchemaVersion(v string) *StorageClassAnalysisDataExport { + s.OutputSchemaVersion = &v + return s +} + +// A container of a key value name pair. type Tag struct { _ struct{} `type:"structure"` // Name of the tag. + // + // Key is a required field Key *string `min:"1" type:"string" required:"true"` // Value of the tag. + // + // Value is a required field Value *string `type:"string" required:"true"` } @@ -5644,9 +27597,44 @@ func (s Tag) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *Tag) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Tag"} + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.Value == nil { + invalidParams.Add(request.NewErrParamRequired("Value")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetKey sets the Key field's value. +func (s *Tag) SetKey(v string) *Tag { + s.Key = &v + return s +} + +// SetValue sets the Value field's value. +func (s *Tag) SetValue(v string) *Tag { + s.Value = &v + return s +} + +// Container for TagSet elements. type Tagging struct { _ struct{} `type:"structure"` + // A collection for a a set of tags + // + // TagSet is a required field TagSet []*Tag `locationNameList:"Tag" type:"list" required:"true"` } @@ -5660,10 +27648,41 @@ func (s Tagging) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *Tagging) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Tagging"} + if s.TagSet == nil { + invalidParams.Add(request.NewErrParamRequired("TagSet")) + } + if s.TagSet != nil { + for i, v := range s.TagSet { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TagSet", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetTagSet sets the TagSet field's value. +func (s *Tagging) SetTagSet(v []*Tag) *Tagging { + s.TagSet = v + return s +} + +// Container for granting information. type TargetGrant struct { _ struct{} `type:"structure"` - Grantee *Grantee `type:"structure"` + // Container for the person being granted permissions. + Grantee *Grantee `type:"structure" xmlPrefix:"xsi" xmlURI:"http://www.w3.org/2001/XMLSchema-instance"` // Logging permissions assigned to the Grantee for the bucket. Permission *string `type:"string" enum:"BucketLogsPermission"` @@ -5679,24 +27698,59 @@ func (s TargetGrant) GoString() string { return s.String() } -// Container for specifying the configuration when you want Amazon S3 to publish -// events to an Amazon Simple Notification Service (Amazon SNS) topic. +// Validate inspects the fields of the type to determine if they are valid. +func (s *TargetGrant) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TargetGrant"} + if s.Grantee != nil { + if err := s.Grantee.Validate(); err != nil { + invalidParams.AddNested("Grantee", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetGrantee sets the Grantee field's value. +func (s *TargetGrant) SetGrantee(v *Grantee) *TargetGrant { + s.Grantee = v + return s +} + +// SetPermission sets the Permission field's value. +func (s *TargetGrant) SetPermission(v string) *TargetGrant { + s.Permission = &v + return s +} + +// A container for specifying the configuration for publication of messages +// to an Amazon Simple Notification Service (Amazon SNS) topic when Amazon S3 +// detects specified events. type TopicConfiguration struct { _ struct{} `type:"structure"` + // The Amazon S3 bucket event about which to send notifications. For more information, + // see Supported Event Types (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) + // in the Amazon Simple Storage Service Developer Guide. + // + // Events is a required field Events []*string `locationName:"Event" type:"list" flattened:"true" required:"true"` - // Container for object key name filtering rules. For information about key - // name filtering, go to Configuring Event Notifications (http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) + // Specifies object key name filtering rules. For information about key name + // filtering, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html) // in the Amazon Simple Storage Service Developer Guide. Filter *NotificationConfigurationFilter `type:"structure"` - // Optional unique identifier for configurations in a notification configuration. + // An optional unique identifier for configurations in a notification configuration. // If you don't provide one, Amazon S3 will assign an ID. Id *string `type:"string"` - // Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects - // events of specified type. + // The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3 + // publishes a message when it detects events of the specified type. + // + // TopicArn is a required field TopicArn *string `locationName:"Topic" type:"string" required:"true"` } @@ -5710,15 +27764,62 @@ func (s TopicConfiguration) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *TopicConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TopicConfiguration"} + if s.Events == nil { + invalidParams.Add(request.NewErrParamRequired("Events")) + } + if s.TopicArn == nil { + invalidParams.Add(request.NewErrParamRequired("TopicArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEvents sets the Events field's value. +func (s *TopicConfiguration) SetEvents(v []*string) *TopicConfiguration { + s.Events = v + return s +} + +// SetFilter sets the Filter field's value. +func (s *TopicConfiguration) SetFilter(v *NotificationConfigurationFilter) *TopicConfiguration { + s.Filter = v + return s +} + +// SetId sets the Id field's value. +func (s *TopicConfiguration) SetId(v string) *TopicConfiguration { + s.Id = &v + return s +} + +// SetTopicArn sets the TopicArn field's value. +func (s *TopicConfiguration) SetTopicArn(v string) *TopicConfiguration { + s.TopicArn = &v + return s +} + +// A container for specifying the configuration for publication of messages +// to an Amazon Simple Notification Service (Amazon SNS) topic when Amazon S3 +// detects specified events. This data type is deperecated. Please use TopicConfiguration +// instead. type TopicConfigurationDeprecated struct { _ struct{} `type:"structure"` // Bucket event for which to send notifications. - Event *string `type:"string" enum:"Event"` + // + // Deprecated: Event has been deprecated + Event *string `deprecated:"true" type:"string" enum:"Event"` + // A collection of events related to objects Events []*string `locationName:"Event" type:"list" flattened:"true"` - // Optional unique identifier for configurations in a notification configuration. + // An optional unique identifier for configurations in a notification configuration. // If you don't provide one, Amazon S3 will assign an ID. Id *string `type:"string"` @@ -5737,18 +27838,43 @@ func (s TopicConfigurationDeprecated) GoString() string { return s.String() } +// SetEvent sets the Event field's value. +func (s *TopicConfigurationDeprecated) SetEvent(v string) *TopicConfigurationDeprecated { + s.Event = &v + return s +} + +// SetEvents sets the Events field's value. +func (s *TopicConfigurationDeprecated) SetEvents(v []*string) *TopicConfigurationDeprecated { + s.Events = v + return s +} + +// SetId sets the Id field's value. +func (s *TopicConfigurationDeprecated) SetId(v string) *TopicConfigurationDeprecated { + s.Id = &v + return s +} + +// SetTopic sets the Topic field's value. +func (s *TopicConfigurationDeprecated) SetTopic(v string) *TopicConfigurationDeprecated { + s.Topic = &v + return s +} + +// Specifies when an object transitions to a specified storage class. type Transition struct { _ struct{} `type:"structure"` - // Indicates at what date the object is to be moved or deleted. Should be in - // GMT ISO 8601 Format. + // Indicates when objects are transitioned to the specified storage class. The + // date value must be in ISO 8601 format. The time is always midnight UTC. Date *time.Time `type:"timestamp" timestampFormat:"iso8601"` - // Indicates the lifetime, in days, of the objects that are subject to the rule. - // The value must be a non-zero positive integer. + // Indicates the number of days after creation when objects are transitioned + // to the specified storage class. The value must be a positive integer. Days *int64 `type:"integer"` - // The class of storage used to store the object. + // The storage class to which you want the object to transition. StorageClass *string `type:"string" enum:"TransitionStorageClass"` } @@ -5762,33 +27888,56 @@ func (s Transition) GoString() string { return s.String() } +// SetDate sets the Date field's value. +func (s *Transition) SetDate(v time.Time) *Transition { + s.Date = &v + return s +} + +// SetDays sets the Days field's value. +func (s *Transition) SetDays(v int64) *Transition { + s.Days = &v + return s +} + +// SetStorageClass sets the StorageClass field's value. +func (s *Transition) SetStorageClass(v string) *Transition { + s.StorageClass = &v + return s +} + type UploadPartCopyInput struct { - _ struct{} `type:"structure"` + _ struct{} `locationName:"UploadPartCopyRequest" type:"structure"` + // The bucket name. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` // The name of the source bucket and key name of the source object, separated // by a slash (/). Must be URL-encoded. + // + // CopySource is a required field CopySource *string `location:"header" locationName:"x-amz-copy-source" type:"string" required:"true"` // Copies the object if its entity tag (ETag) matches the specified tag. CopySourceIfMatch *string `location:"header" locationName:"x-amz-copy-source-if-match" type:"string"` // Copies the object if it has been modified since the specified time. - CopySourceIfModifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-modified-since" type:"timestamp" timestampFormat:"rfc822"` + CopySourceIfModifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-modified-since" type:"timestamp"` // Copies the object if its entity tag (ETag) is different than the specified // ETag. CopySourceIfNoneMatch *string `location:"header" locationName:"x-amz-copy-source-if-none-match" type:"string"` // Copies the object if it hasn't been modified since the specified time. - CopySourceIfUnmodifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-unmodified-since" type:"timestamp" timestampFormat:"rfc822"` + CopySourceIfUnmodifiedSince *time.Time `location:"header" locationName:"x-amz-copy-source-if-unmodified-since" type:"timestamp"` // The range of bytes to copy from the source object. The range value must use // the form bytes=first-last, where the first and last are the zero-based byte // offsets to copy. For example, bytes=0-9 indicates that you want to copy the // first ten bytes of the source. You can copy a range only if the source object - // is greater than 5 GB. + // is greater than 5 MB. CopySourceRange *string `location:"header" locationName:"x-amz-copy-source-range" type:"string"` // Specifies the algorithm to use when decrypting the source object (e.g., AES256). @@ -5797,17 +27946,22 @@ type UploadPartCopyInput struct { // Specifies the customer-provided encryption key for Amazon S3 to use to decrypt // the source object. The encryption key provided in this header must be one // that was used when the source object was created. - CopySourceSSECustomerKey *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-key" type:"string"` + CopySourceSSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-key" type:"string" sensitive:"true"` // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. // Amazon S3 uses this header for a message integrity check to ensure the encryption // key was transmitted without error. CopySourceSSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-copy-source-server-side-encryption-customer-key-MD5" type:"string"` + // Object key for which the multipart upload was initiated. + // + // Key is a required field Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` // Part number of part being copied. This is a positive integer between 1 and // 10,000. + // + // PartNumber is a required field PartNumber *int64 `location:"querystring" locationName:"partNumber" type:"integer" required:"true"` // Confirms that the requester knows that she or he will be charged for the @@ -5825,7 +27979,7 @@ type UploadPartCopyInput struct { // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm // header. This must be the same encryption key specified in the initiate multipart // upload request. - SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string"` + SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"` // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. // Amazon S3 uses this header for a message integrity check to ensure the encryption @@ -5833,6 +27987,8 @@ type UploadPartCopyInput struct { SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` // Upload ID identifying the multipart upload whose part is being copied. + // + // UploadId is a required field UploadId *string `location:"querystring" locationName:"uploadId" type:"string" required:"true"` } @@ -5846,9 +28002,164 @@ func (s UploadPartCopyInput) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *UploadPartCopyInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "UploadPartCopyInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.CopySource == nil { + invalidParams.Add(request.NewErrParamRequired("CopySource")) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.PartNumber == nil { + invalidParams.Add(request.NewErrParamRequired("PartNumber")) + } + if s.UploadId == nil { + invalidParams.Add(request.NewErrParamRequired("UploadId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *UploadPartCopyInput) SetBucket(v string) *UploadPartCopyInput { + s.Bucket = &v + return s +} + +func (s *UploadPartCopyInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetCopySource sets the CopySource field's value. +func (s *UploadPartCopyInput) SetCopySource(v string) *UploadPartCopyInput { + s.CopySource = &v + return s +} + +// SetCopySourceIfMatch sets the CopySourceIfMatch field's value. +func (s *UploadPartCopyInput) SetCopySourceIfMatch(v string) *UploadPartCopyInput { + s.CopySourceIfMatch = &v + return s +} + +// SetCopySourceIfModifiedSince sets the CopySourceIfModifiedSince field's value. +func (s *UploadPartCopyInput) SetCopySourceIfModifiedSince(v time.Time) *UploadPartCopyInput { + s.CopySourceIfModifiedSince = &v + return s +} + +// SetCopySourceIfNoneMatch sets the CopySourceIfNoneMatch field's value. +func (s *UploadPartCopyInput) SetCopySourceIfNoneMatch(v string) *UploadPartCopyInput { + s.CopySourceIfNoneMatch = &v + return s +} + +// SetCopySourceIfUnmodifiedSince sets the CopySourceIfUnmodifiedSince field's value. +func (s *UploadPartCopyInput) SetCopySourceIfUnmodifiedSince(v time.Time) *UploadPartCopyInput { + s.CopySourceIfUnmodifiedSince = &v + return s +} + +// SetCopySourceRange sets the CopySourceRange field's value. +func (s *UploadPartCopyInput) SetCopySourceRange(v string) *UploadPartCopyInput { + s.CopySourceRange = &v + return s +} + +// SetCopySourceSSECustomerAlgorithm sets the CopySourceSSECustomerAlgorithm field's value. +func (s *UploadPartCopyInput) SetCopySourceSSECustomerAlgorithm(v string) *UploadPartCopyInput { + s.CopySourceSSECustomerAlgorithm = &v + return s +} + +// SetCopySourceSSECustomerKey sets the CopySourceSSECustomerKey field's value. +func (s *UploadPartCopyInput) SetCopySourceSSECustomerKey(v string) *UploadPartCopyInput { + s.CopySourceSSECustomerKey = &v + return s +} + +func (s *UploadPartCopyInput) getCopySourceSSECustomerKey() (v string) { + if s.CopySourceSSECustomerKey == nil { + return v + } + return *s.CopySourceSSECustomerKey +} + +// SetCopySourceSSECustomerKeyMD5 sets the CopySourceSSECustomerKeyMD5 field's value. +func (s *UploadPartCopyInput) SetCopySourceSSECustomerKeyMD5(v string) *UploadPartCopyInput { + s.CopySourceSSECustomerKeyMD5 = &v + return s +} + +// SetKey sets the Key field's value. +func (s *UploadPartCopyInput) SetKey(v string) *UploadPartCopyInput { + s.Key = &v + return s +} + +// SetPartNumber sets the PartNumber field's value. +func (s *UploadPartCopyInput) SetPartNumber(v int64) *UploadPartCopyInput { + s.PartNumber = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *UploadPartCopyInput) SetRequestPayer(v string) *UploadPartCopyInput { + s.RequestPayer = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *UploadPartCopyInput) SetSSECustomerAlgorithm(v string) *UploadPartCopyInput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKey sets the SSECustomerKey field's value. +func (s *UploadPartCopyInput) SetSSECustomerKey(v string) *UploadPartCopyInput { + s.SSECustomerKey = &v + return s +} + +func (s *UploadPartCopyInput) getSSECustomerKey() (v string) { + if s.SSECustomerKey == nil { + return v + } + return *s.SSECustomerKey +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *UploadPartCopyInput) SetSSECustomerKeyMD5(v string) *UploadPartCopyInput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetUploadId sets the UploadId field's value. +func (s *UploadPartCopyInput) SetUploadId(v string) *UploadPartCopyInput { + s.UploadId = &v + return s +} + type UploadPartCopyOutput struct { _ struct{} `type:"structure" payload:"CopyPartResult"` + // Container for all response elements. CopyPartResult *CopyPartResult `type:"structure"` // The version of the source object that was copied, if you have enabled versioning @@ -5869,9 +28180,9 @@ type UploadPartCopyOutput struct { // verification of the customer-provided encryption key. SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` - // If present, specifies the ID of the AWS Key Management Service (KMS) master - // encryption key that was used for the object. - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` + // If present, specifies the ID of the AWS Key Management Service (KMS) customer + // master key (CMK) that was used for the object. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` // The Server-side encryption algorithm used when storing this object in S3 // (e.g., AES256, aws:kms). @@ -5888,21 +28199,77 @@ func (s UploadPartCopyOutput) GoString() string { return s.String() } +// SetCopyPartResult sets the CopyPartResult field's value. +func (s *UploadPartCopyOutput) SetCopyPartResult(v *CopyPartResult) *UploadPartCopyOutput { + s.CopyPartResult = v + return s +} + +// SetCopySourceVersionId sets the CopySourceVersionId field's value. +func (s *UploadPartCopyOutput) SetCopySourceVersionId(v string) *UploadPartCopyOutput { + s.CopySourceVersionId = &v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *UploadPartCopyOutput) SetRequestCharged(v string) *UploadPartCopyOutput { + s.RequestCharged = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *UploadPartCopyOutput) SetSSECustomerAlgorithm(v string) *UploadPartCopyOutput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *UploadPartCopyOutput) SetSSECustomerKeyMD5(v string) *UploadPartCopyOutput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *UploadPartCopyOutput) SetSSEKMSKeyId(v string) *UploadPartCopyOutput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *UploadPartCopyOutput) SetServerSideEncryption(v string) *UploadPartCopyOutput { + s.ServerSideEncryption = &v + return s +} + type UploadPartInput struct { - _ struct{} `type:"structure" payload:"Body"` + _ struct{} `locationName:"UploadPartRequest" type:"structure" payload:"Body"` + // Object data. Body io.ReadSeeker `type:"blob"` + // Name of the bucket to which the multipart upload was initiated. + // + // Bucket is a required field Bucket *string `location:"uri" locationName:"Bucket" type:"string" required:"true"` // Size of the body in bytes. This parameter is useful when the size of the // body cannot be determined automatically. - ContentLength *int64 `location:"header" locationName:"Content-Length" type:"integer"` + ContentLength *int64 `location:"header" locationName:"Content-Length" type:"long"` + + // The base64-encoded 128-bit MD5 digest of the part data. This parameter is + // auto-populated when using the command from the CLI. This parameted is required + // if object lock parameters are specified. + ContentMD5 *string `location:"header" locationName:"Content-MD5" type:"string"` + // Object key for which the multipart upload was initiated. + // + // Key is a required field Key *string `location:"uri" locationName:"Key" min:"1" type:"string" required:"true"` // Part number of part being uploaded. This is a positive integer between 1 // and 10,000. + // + // PartNumber is a required field PartNumber *int64 `location:"querystring" locationName:"partNumber" type:"integer" required:"true"` // Confirms that the requester knows that she or he will be charged for the @@ -5920,7 +28287,7 @@ type UploadPartInput struct { // the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm // header. This must be the same encryption key specified in the initiate multipart // upload request. - SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string"` + SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"` // Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. // Amazon S3 uses this header for a message integrity check to ensure the encryption @@ -5928,6 +28295,8 @@ type UploadPartInput struct { SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` // Upload ID identifying the multipart upload whose part is being uploaded. + // + // UploadId is a required field UploadId *string `location:"querystring" locationName:"uploadId" type:"string" required:"true"` } @@ -5941,6 +28310,114 @@ func (s UploadPartInput) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *UploadPartInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "UploadPartInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + if s.Bucket != nil && len(*s.Bucket) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Bucket", 1)) + } + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.PartNumber == nil { + invalidParams.Add(request.NewErrParamRequired("PartNumber")) + } + if s.UploadId == nil { + invalidParams.Add(request.NewErrParamRequired("UploadId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBody sets the Body field's value. +func (s *UploadPartInput) SetBody(v io.ReadSeeker) *UploadPartInput { + s.Body = v + return s +} + +// SetBucket sets the Bucket field's value. +func (s *UploadPartInput) SetBucket(v string) *UploadPartInput { + s.Bucket = &v + return s +} + +func (s *UploadPartInput) getBucket() (v string) { + if s.Bucket == nil { + return v + } + return *s.Bucket +} + +// SetContentLength sets the ContentLength field's value. +func (s *UploadPartInput) SetContentLength(v int64) *UploadPartInput { + s.ContentLength = &v + return s +} + +// SetContentMD5 sets the ContentMD5 field's value. +func (s *UploadPartInput) SetContentMD5(v string) *UploadPartInput { + s.ContentMD5 = &v + return s +} + +// SetKey sets the Key field's value. +func (s *UploadPartInput) SetKey(v string) *UploadPartInput { + s.Key = &v + return s +} + +// SetPartNumber sets the PartNumber field's value. +func (s *UploadPartInput) SetPartNumber(v int64) *UploadPartInput { + s.PartNumber = &v + return s +} + +// SetRequestPayer sets the RequestPayer field's value. +func (s *UploadPartInput) SetRequestPayer(v string) *UploadPartInput { + s.RequestPayer = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *UploadPartInput) SetSSECustomerAlgorithm(v string) *UploadPartInput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKey sets the SSECustomerKey field's value. +func (s *UploadPartInput) SetSSECustomerKey(v string) *UploadPartInput { + s.SSECustomerKey = &v + return s +} + +func (s *UploadPartInput) getSSECustomerKey() (v string) { + if s.SSECustomerKey == nil { + return v + } + return *s.SSECustomerKey +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *UploadPartInput) SetSSECustomerKeyMD5(v string) *UploadPartInput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetUploadId sets the UploadId field's value. +func (s *UploadPartInput) SetUploadId(v string) *UploadPartInput { + s.UploadId = &v + return s +} + type UploadPartOutput struct { _ struct{} `type:"structure"` @@ -5961,9 +28438,9 @@ type UploadPartOutput struct { // verification of the customer-provided encryption key. SSECustomerKeyMD5 *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key-MD5" type:"string"` - // If present, specifies the ID of the AWS Key Management Service (KMS) master - // encryption key that was used for the object. - SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string"` + // If present, specifies the ID of the AWS Key Management Service (KMS) customer + // master key (CMK) was used for the object. + SSEKMSKeyId *string `location:"header" locationName:"x-amz-server-side-encryption-aws-kms-key-id" type:"string" sensitive:"true"` // The Server-side encryption algorithm used when storing this object in S3 // (e.g., AES256, aws:kms). @@ -5980,6 +28457,45 @@ func (s UploadPartOutput) GoString() string { return s.String() } +// SetETag sets the ETag field's value. +func (s *UploadPartOutput) SetETag(v string) *UploadPartOutput { + s.ETag = &v + return s +} + +// SetRequestCharged sets the RequestCharged field's value. +func (s *UploadPartOutput) SetRequestCharged(v string) *UploadPartOutput { + s.RequestCharged = &v + return s +} + +// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value. +func (s *UploadPartOutput) SetSSECustomerAlgorithm(v string) *UploadPartOutput { + s.SSECustomerAlgorithm = &v + return s +} + +// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value. +func (s *UploadPartOutput) SetSSECustomerKeyMD5(v string) *UploadPartOutput { + s.SSECustomerKeyMD5 = &v + return s +} + +// SetSSEKMSKeyId sets the SSEKMSKeyId field's value. +func (s *UploadPartOutput) SetSSEKMSKeyId(v string) *UploadPartOutput { + s.SSEKMSKeyId = &v + return s +} + +// SetServerSideEncryption sets the ServerSideEncryption field's value. +func (s *UploadPartOutput) SetServerSideEncryption(v string) *UploadPartOutput { + s.ServerSideEncryption = &v + return s +} + +// Describes the versioning state of an Amazon S3 bucket. For more information, +// see PUT Bucket versioning (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html) +// in the Amazon Simple Storage Service API Reference. type VersioningConfiguration struct { _ struct{} `type:"structure"` @@ -6002,15 +28518,34 @@ func (s VersioningConfiguration) GoString() string { return s.String() } +// SetMFADelete sets the MFADelete field's value. +func (s *VersioningConfiguration) SetMFADelete(v string) *VersioningConfiguration { + s.MFADelete = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *VersioningConfiguration) SetStatus(v string) *VersioningConfiguration { + s.Status = &v + return s +} + +// Specifies website configuration parameters for an Amazon S3 bucket. type WebsiteConfiguration struct { _ struct{} `type:"structure"` + // The name of the error document for the website. ErrorDocument *ErrorDocument `type:"structure"` + // The name of the index document for the website. IndexDocument *IndexDocument `type:"structure"` + // The redirect behavior for every request to this bucket's website endpoint. + // + // If you specify this property, you can't specify any other property. RedirectAllRequestsTo *RedirectAllRequestsTo `type:"structure"` + // Rules that define when a redirect is applied and the redirect behavior. RoutingRules []*RoutingRule `locationNameList:"RoutingRule" type:"list"` } @@ -6024,56 +28559,165 @@ func (s WebsiteConfiguration) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *WebsiteConfiguration) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "WebsiteConfiguration"} + if s.ErrorDocument != nil { + if err := s.ErrorDocument.Validate(); err != nil { + invalidParams.AddNested("ErrorDocument", err.(request.ErrInvalidParams)) + } + } + if s.IndexDocument != nil { + if err := s.IndexDocument.Validate(); err != nil { + invalidParams.AddNested("IndexDocument", err.(request.ErrInvalidParams)) + } + } + if s.RedirectAllRequestsTo != nil { + if err := s.RedirectAllRequestsTo.Validate(); err != nil { + invalidParams.AddNested("RedirectAllRequestsTo", err.(request.ErrInvalidParams)) + } + } + if s.RoutingRules != nil { + for i, v := range s.RoutingRules { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "RoutingRules", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetErrorDocument sets the ErrorDocument field's value. +func (s *WebsiteConfiguration) SetErrorDocument(v *ErrorDocument) *WebsiteConfiguration { + s.ErrorDocument = v + return s +} + +// SetIndexDocument sets the IndexDocument field's value. +func (s *WebsiteConfiguration) SetIndexDocument(v *IndexDocument) *WebsiteConfiguration { + s.IndexDocument = v + return s +} + +// SetRedirectAllRequestsTo sets the RedirectAllRequestsTo field's value. +func (s *WebsiteConfiguration) SetRedirectAllRequestsTo(v *RedirectAllRequestsTo) *WebsiteConfiguration { + s.RedirectAllRequestsTo = v + return s +} + +// SetRoutingRules sets the RoutingRules field's value. +func (s *WebsiteConfiguration) SetRoutingRules(v []*RoutingRule) *WebsiteConfiguration { + s.RoutingRules = v + return s +} + +const ( + // AnalyticsS3ExportFileFormatCsv is a AnalyticsS3ExportFileFormat enum value + AnalyticsS3ExportFileFormatCsv = "CSV" +) + const ( - // @enum BucketCannedACL + // BucketAccelerateStatusEnabled is a BucketAccelerateStatus enum value + BucketAccelerateStatusEnabled = "Enabled" + + // BucketAccelerateStatusSuspended is a BucketAccelerateStatus enum value + BucketAccelerateStatusSuspended = "Suspended" +) + +const ( + // BucketCannedACLPrivate is a BucketCannedACL enum value BucketCannedACLPrivate = "private" - // @enum BucketCannedACL + + // BucketCannedACLPublicRead is a BucketCannedACL enum value BucketCannedACLPublicRead = "public-read" - // @enum BucketCannedACL + + // BucketCannedACLPublicReadWrite is a BucketCannedACL enum value BucketCannedACLPublicReadWrite = "public-read-write" - // @enum BucketCannedACL + + // BucketCannedACLAuthenticatedRead is a BucketCannedACL enum value BucketCannedACLAuthenticatedRead = "authenticated-read" ) const ( - // @enum BucketLocationConstraint + // BucketLocationConstraintEu is a BucketLocationConstraint enum value BucketLocationConstraintEu = "EU" - // @enum BucketLocationConstraint + + // BucketLocationConstraintEuWest1 is a BucketLocationConstraint enum value BucketLocationConstraintEuWest1 = "eu-west-1" - // @enum BucketLocationConstraint + + // BucketLocationConstraintUsWest1 is a BucketLocationConstraint enum value BucketLocationConstraintUsWest1 = "us-west-1" - // @enum BucketLocationConstraint + + // BucketLocationConstraintUsWest2 is a BucketLocationConstraint enum value BucketLocationConstraintUsWest2 = "us-west-2" - // @enum BucketLocationConstraint + + // BucketLocationConstraintApSouth1 is a BucketLocationConstraint enum value + BucketLocationConstraintApSouth1 = "ap-south-1" + + // BucketLocationConstraintApSoutheast1 is a BucketLocationConstraint enum value BucketLocationConstraintApSoutheast1 = "ap-southeast-1" - // @enum BucketLocationConstraint + + // BucketLocationConstraintApSoutheast2 is a BucketLocationConstraint enum value BucketLocationConstraintApSoutheast2 = "ap-southeast-2" - // @enum BucketLocationConstraint + + // BucketLocationConstraintApNortheast1 is a BucketLocationConstraint enum value BucketLocationConstraintApNortheast1 = "ap-northeast-1" - // @enum BucketLocationConstraint + + // BucketLocationConstraintSaEast1 is a BucketLocationConstraint enum value BucketLocationConstraintSaEast1 = "sa-east-1" - // @enum BucketLocationConstraint + + // BucketLocationConstraintCnNorth1 is a BucketLocationConstraint enum value BucketLocationConstraintCnNorth1 = "cn-north-1" - // @enum BucketLocationConstraint + + // BucketLocationConstraintEuCentral1 is a BucketLocationConstraint enum value BucketLocationConstraintEuCentral1 = "eu-central-1" ) const ( - // @enum BucketLogsPermission + // BucketLogsPermissionFullControl is a BucketLogsPermission enum value BucketLogsPermissionFullControl = "FULL_CONTROL" - // @enum BucketLogsPermission + + // BucketLogsPermissionRead is a BucketLogsPermission enum value BucketLogsPermissionRead = "READ" - // @enum BucketLogsPermission + + // BucketLogsPermissionWrite is a BucketLogsPermission enum value BucketLogsPermissionWrite = "WRITE" ) const ( - // @enum BucketVersioningStatus + // BucketVersioningStatusEnabled is a BucketVersioningStatus enum value BucketVersioningStatusEnabled = "Enabled" - // @enum BucketVersioningStatus + + // BucketVersioningStatusSuspended is a BucketVersioningStatus enum value BucketVersioningStatusSuspended = "Suspended" ) +const ( + // CompressionTypeNone is a CompressionType enum value + CompressionTypeNone = "NONE" + + // CompressionTypeGzip is a CompressionType enum value + CompressionTypeGzip = "GZIP" + + // CompressionTypeBzip2 is a CompressionType enum value + CompressionTypeBzip2 = "BZIP2" +) + +const ( + // DeleteMarkerReplicationStatusEnabled is a DeleteMarkerReplicationStatus enum value + DeleteMarkerReplicationStatusEnabled = "Enabled" + + // DeleteMarkerReplicationStatusDisabled is a DeleteMarkerReplicationStatus enum value + DeleteMarkerReplicationStatusDisabled = "Disabled" +) + // Requests Amazon S3 to encode the object keys in the response and specifies // the encoding method to use. An object key may contain any Unicode character; // however, XML 1.0 parser cannot parse some characters, such as characters @@ -6081,147 +28725,366 @@ const ( // XML 1.0, you can add this parameter to request that Amazon S3 encode the // keys in the response. const ( - // @enum EncodingType + // EncodingTypeUrl is a EncodingType enum value EncodingTypeUrl = "url" ) -// Bucket event for which to send notifications. +// The bucket event for which to send notifications. const ( - // @enum Event + // EventS3ReducedRedundancyLostObject is a Event enum value EventS3ReducedRedundancyLostObject = "s3:ReducedRedundancyLostObject" - // @enum Event + + // EventS3ObjectCreated is a Event enum value EventS3ObjectCreated = "s3:ObjectCreated:*" - // @enum Event + + // EventS3ObjectCreatedPut is a Event enum value EventS3ObjectCreatedPut = "s3:ObjectCreated:Put" - // @enum Event + + // EventS3ObjectCreatedPost is a Event enum value EventS3ObjectCreatedPost = "s3:ObjectCreated:Post" - // @enum Event + + // EventS3ObjectCreatedCopy is a Event enum value EventS3ObjectCreatedCopy = "s3:ObjectCreated:Copy" - // @enum Event + + // EventS3ObjectCreatedCompleteMultipartUpload is a Event enum value EventS3ObjectCreatedCompleteMultipartUpload = "s3:ObjectCreated:CompleteMultipartUpload" - // @enum Event + + // EventS3ObjectRemoved is a Event enum value EventS3ObjectRemoved = "s3:ObjectRemoved:*" - // @enum Event + + // EventS3ObjectRemovedDelete is a Event enum value EventS3ObjectRemovedDelete = "s3:ObjectRemoved:Delete" - // @enum Event + + // EventS3ObjectRemovedDeleteMarkerCreated is a Event enum value EventS3ObjectRemovedDeleteMarkerCreated = "s3:ObjectRemoved:DeleteMarkerCreated" + + // EventS3ObjectRestore is a Event enum value + EventS3ObjectRestore = "s3:ObjectRestore:*" + + // EventS3ObjectRestorePost is a Event enum value + EventS3ObjectRestorePost = "s3:ObjectRestore:Post" + + // EventS3ObjectRestoreCompleted is a Event enum value + EventS3ObjectRestoreCompleted = "s3:ObjectRestore:Completed" + + // EventS3Replication is a Event enum value + EventS3Replication = "s3:Replication:*" + + // EventS3ReplicationOperationFailedReplication is a Event enum value + EventS3ReplicationOperationFailedReplication = "s3:Replication:OperationFailedReplication" + + // EventS3ReplicationOperationNotTracked is a Event enum value + EventS3ReplicationOperationNotTracked = "s3:Replication:OperationNotTracked" + + // EventS3ReplicationOperationMissedThreshold is a Event enum value + EventS3ReplicationOperationMissedThreshold = "s3:Replication:OperationMissedThreshold" + + // EventS3ReplicationOperationReplicatedAfterThreshold is a Event enum value + EventS3ReplicationOperationReplicatedAfterThreshold = "s3:Replication:OperationReplicatedAfterThreshold" +) + +const ( + // ExistingObjectReplicationStatusEnabled is a ExistingObjectReplicationStatus enum value + ExistingObjectReplicationStatusEnabled = "Enabled" + + // ExistingObjectReplicationStatusDisabled is a ExistingObjectReplicationStatus enum value + ExistingObjectReplicationStatusDisabled = "Disabled" ) const ( - // @enum ExpirationStatus + // ExpirationStatusEnabled is a ExpirationStatus enum value ExpirationStatusEnabled = "Enabled" - // @enum ExpirationStatus + + // ExpirationStatusDisabled is a ExpirationStatus enum value ExpirationStatusDisabled = "Disabled" ) const ( - // @enum FilterRuleName + // ExpressionTypeSql is a ExpressionType enum value + ExpressionTypeSql = "SQL" +) + +const ( + // FileHeaderInfoUse is a FileHeaderInfo enum value + FileHeaderInfoUse = "USE" + + // FileHeaderInfoIgnore is a FileHeaderInfo enum value + FileHeaderInfoIgnore = "IGNORE" + + // FileHeaderInfoNone is a FileHeaderInfo enum value + FileHeaderInfoNone = "NONE" +) + +const ( + // FilterRuleNamePrefix is a FilterRuleName enum value FilterRuleNamePrefix = "prefix" - // @enum FilterRuleName + + // FilterRuleNameSuffix is a FilterRuleName enum value FilterRuleNameSuffix = "suffix" ) const ( - // @enum MFADelete + // InventoryFormatCsv is a InventoryFormat enum value + InventoryFormatCsv = "CSV" + + // InventoryFormatOrc is a InventoryFormat enum value + InventoryFormatOrc = "ORC" + + // InventoryFormatParquet is a InventoryFormat enum value + InventoryFormatParquet = "Parquet" +) + +const ( + // InventoryFrequencyDaily is a InventoryFrequency enum value + InventoryFrequencyDaily = "Daily" + + // InventoryFrequencyWeekly is a InventoryFrequency enum value + InventoryFrequencyWeekly = "Weekly" +) + +const ( + // InventoryIncludedObjectVersionsAll is a InventoryIncludedObjectVersions enum value + InventoryIncludedObjectVersionsAll = "All" + + // InventoryIncludedObjectVersionsCurrent is a InventoryIncludedObjectVersions enum value + InventoryIncludedObjectVersionsCurrent = "Current" +) + +const ( + // InventoryOptionalFieldSize is a InventoryOptionalField enum value + InventoryOptionalFieldSize = "Size" + + // InventoryOptionalFieldLastModifiedDate is a InventoryOptionalField enum value + InventoryOptionalFieldLastModifiedDate = "LastModifiedDate" + + // InventoryOptionalFieldStorageClass is a InventoryOptionalField enum value + InventoryOptionalFieldStorageClass = "StorageClass" + + // InventoryOptionalFieldEtag is a InventoryOptionalField enum value + InventoryOptionalFieldEtag = "ETag" + + // InventoryOptionalFieldIsMultipartUploaded is a InventoryOptionalField enum value + InventoryOptionalFieldIsMultipartUploaded = "IsMultipartUploaded" + + // InventoryOptionalFieldReplicationStatus is a InventoryOptionalField enum value + InventoryOptionalFieldReplicationStatus = "ReplicationStatus" + + // InventoryOptionalFieldEncryptionStatus is a InventoryOptionalField enum value + InventoryOptionalFieldEncryptionStatus = "EncryptionStatus" + + // InventoryOptionalFieldObjectLockRetainUntilDate is a InventoryOptionalField enum value + InventoryOptionalFieldObjectLockRetainUntilDate = "ObjectLockRetainUntilDate" + + // InventoryOptionalFieldObjectLockMode is a InventoryOptionalField enum value + InventoryOptionalFieldObjectLockMode = "ObjectLockMode" + + // InventoryOptionalFieldObjectLockLegalHoldStatus is a InventoryOptionalField enum value + InventoryOptionalFieldObjectLockLegalHoldStatus = "ObjectLockLegalHoldStatus" + + // InventoryOptionalFieldIntelligentTieringAccessTier is a InventoryOptionalField enum value + InventoryOptionalFieldIntelligentTieringAccessTier = "IntelligentTieringAccessTier" +) + +const ( + // JSONTypeDocument is a JSONType enum value + JSONTypeDocument = "DOCUMENT" + + // JSONTypeLines is a JSONType enum value + JSONTypeLines = "LINES" +) + +const ( + // MFADeleteEnabled is a MFADelete enum value MFADeleteEnabled = "Enabled" - // @enum MFADelete + + // MFADeleteDisabled is a MFADelete enum value MFADeleteDisabled = "Disabled" ) const ( - // @enum MFADeleteStatus + // MFADeleteStatusEnabled is a MFADeleteStatus enum value MFADeleteStatusEnabled = "Enabled" - // @enum MFADeleteStatus + + // MFADeleteStatusDisabled is a MFADeleteStatus enum value MFADeleteStatusDisabled = "Disabled" ) const ( - // @enum MetadataDirective + // MetadataDirectiveCopy is a MetadataDirective enum value MetadataDirectiveCopy = "COPY" - // @enum MetadataDirective + + // MetadataDirectiveReplace is a MetadataDirective enum value MetadataDirectiveReplace = "REPLACE" ) const ( - // @enum ObjectCannedACL + // MetricsStatusEnabled is a MetricsStatus enum value + MetricsStatusEnabled = "Enabled" + + // MetricsStatusDisabled is a MetricsStatus enum value + MetricsStatusDisabled = "Disabled" +) + +const ( + // ObjectCannedACLPrivate is a ObjectCannedACL enum value ObjectCannedACLPrivate = "private" - // @enum ObjectCannedACL + + // ObjectCannedACLPublicRead is a ObjectCannedACL enum value ObjectCannedACLPublicRead = "public-read" - // @enum ObjectCannedACL + + // ObjectCannedACLPublicReadWrite is a ObjectCannedACL enum value ObjectCannedACLPublicReadWrite = "public-read-write" - // @enum ObjectCannedACL + + // ObjectCannedACLAuthenticatedRead is a ObjectCannedACL enum value ObjectCannedACLAuthenticatedRead = "authenticated-read" - // @enum ObjectCannedACL + + // ObjectCannedACLAwsExecRead is a ObjectCannedACL enum value ObjectCannedACLAwsExecRead = "aws-exec-read" - // @enum ObjectCannedACL + + // ObjectCannedACLBucketOwnerRead is a ObjectCannedACL enum value ObjectCannedACLBucketOwnerRead = "bucket-owner-read" - // @enum ObjectCannedACL + + // ObjectCannedACLBucketOwnerFullControl is a ObjectCannedACL enum value ObjectCannedACLBucketOwnerFullControl = "bucket-owner-full-control" ) const ( - // @enum ObjectStorageClass + // ObjectLockEnabledEnabled is a ObjectLockEnabled enum value + ObjectLockEnabledEnabled = "Enabled" +) + +const ( + // ObjectLockLegalHoldStatusOn is a ObjectLockLegalHoldStatus enum value + ObjectLockLegalHoldStatusOn = "ON" + + // ObjectLockLegalHoldStatusOff is a ObjectLockLegalHoldStatus enum value + ObjectLockLegalHoldStatusOff = "OFF" +) + +const ( + // ObjectLockModeGovernance is a ObjectLockMode enum value + ObjectLockModeGovernance = "GOVERNANCE" + + // ObjectLockModeCompliance is a ObjectLockMode enum value + ObjectLockModeCompliance = "COMPLIANCE" +) + +const ( + // ObjectLockRetentionModeGovernance is a ObjectLockRetentionMode enum value + ObjectLockRetentionModeGovernance = "GOVERNANCE" + + // ObjectLockRetentionModeCompliance is a ObjectLockRetentionMode enum value + ObjectLockRetentionModeCompliance = "COMPLIANCE" +) + +const ( + // ObjectStorageClassStandard is a ObjectStorageClass enum value ObjectStorageClassStandard = "STANDARD" - // @enum ObjectStorageClass + + // ObjectStorageClassReducedRedundancy is a ObjectStorageClass enum value ObjectStorageClassReducedRedundancy = "REDUCED_REDUNDANCY" - // @enum ObjectStorageClass + + // ObjectStorageClassGlacier is a ObjectStorageClass enum value ObjectStorageClassGlacier = "GLACIER" + + // ObjectStorageClassStandardIa is a ObjectStorageClass enum value + ObjectStorageClassStandardIa = "STANDARD_IA" + + // ObjectStorageClassOnezoneIa is a ObjectStorageClass enum value + ObjectStorageClassOnezoneIa = "ONEZONE_IA" + + // ObjectStorageClassIntelligentTiering is a ObjectStorageClass enum value + ObjectStorageClassIntelligentTiering = "INTELLIGENT_TIERING" + + // ObjectStorageClassDeepArchive is a ObjectStorageClass enum value + ObjectStorageClassDeepArchive = "DEEP_ARCHIVE" ) const ( - // @enum ObjectVersionStorageClass + // ObjectVersionStorageClassStandard is a ObjectVersionStorageClass enum value ObjectVersionStorageClassStandard = "STANDARD" ) const ( - // @enum Payer + // OwnerOverrideDestination is a OwnerOverride enum value + OwnerOverrideDestination = "Destination" +) + +const ( + // PayerRequester is a Payer enum value PayerRequester = "Requester" - // @enum Payer + + // PayerBucketOwner is a Payer enum value PayerBucketOwner = "BucketOwner" ) const ( - // @enum Permission + // PermissionFullControl is a Permission enum value PermissionFullControl = "FULL_CONTROL" - // @enum Permission + + // PermissionWrite is a Permission enum value PermissionWrite = "WRITE" - // @enum Permission + + // PermissionWriteAcp is a Permission enum value PermissionWriteAcp = "WRITE_ACP" - // @enum Permission + + // PermissionRead is a Permission enum value PermissionRead = "READ" - // @enum Permission + + // PermissionReadAcp is a Permission enum value PermissionReadAcp = "READ_ACP" ) const ( - // @enum Protocol + // ProtocolHttp is a Protocol enum value ProtocolHttp = "http" - // @enum Protocol + + // ProtocolHttps is a Protocol enum value ProtocolHttps = "https" ) const ( - // @enum ReplicationRuleStatus + // QuoteFieldsAlways is a QuoteFields enum value + QuoteFieldsAlways = "ALWAYS" + + // QuoteFieldsAsneeded is a QuoteFields enum value + QuoteFieldsAsneeded = "ASNEEDED" +) + +const ( + // ReplicationRuleStatusEnabled is a ReplicationRuleStatus enum value ReplicationRuleStatusEnabled = "Enabled" - // @enum ReplicationRuleStatus + + // ReplicationRuleStatusDisabled is a ReplicationRuleStatus enum value ReplicationRuleStatusDisabled = "Disabled" ) const ( - // @enum ReplicationStatus + // ReplicationStatusComplete is a ReplicationStatus enum value ReplicationStatusComplete = "COMPLETE" - // @enum ReplicationStatus + + // ReplicationStatusPending is a ReplicationStatus enum value ReplicationStatusPending = "PENDING" - // @enum ReplicationStatus + + // ReplicationStatusFailed is a ReplicationStatus enum value ReplicationStatusFailed = "FAILED" - // @enum ReplicationStatus + + // ReplicationStatusReplica is a ReplicationStatus enum value ReplicationStatusReplica = "REPLICA" ) +const ( + // ReplicationTimeStatusEnabled is a ReplicationTimeStatus enum value + ReplicationTimeStatusEnabled = "Enabled" + + // ReplicationTimeStatusDisabled is a ReplicationTimeStatus enum value + ReplicationTimeStatusDisabled = "Disabled" +) + // If present, indicates that the requester was successfully charged for the // request. const ( - // @enum RequestCharged + // RequestChargedRequester is a RequestCharged enum value RequestChargedRequester = "requester" ) @@ -6230,38 +29093,102 @@ const ( // Documentation on downloading objects from requester pays buckets can be found // at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html const ( - // @enum RequestPayer + // RequestPayerRequester is a RequestPayer enum value RequestPayerRequester = "requester" ) const ( - // @enum ServerSideEncryption + // RestoreRequestTypeSelect is a RestoreRequestType enum value + RestoreRequestTypeSelect = "SELECT" +) + +const ( + // ServerSideEncryptionAes256 is a ServerSideEncryption enum value ServerSideEncryptionAes256 = "AES256" - // @enum ServerSideEncryption + + // ServerSideEncryptionAwsKms is a ServerSideEncryption enum value ServerSideEncryptionAwsKms = "aws:kms" ) const ( - // @enum StorageClass + // SseKmsEncryptedObjectsStatusEnabled is a SseKmsEncryptedObjectsStatus enum value + SseKmsEncryptedObjectsStatusEnabled = "Enabled" + + // SseKmsEncryptedObjectsStatusDisabled is a SseKmsEncryptedObjectsStatus enum value + SseKmsEncryptedObjectsStatusDisabled = "Disabled" +) + +const ( + // StorageClassStandard is a StorageClass enum value StorageClassStandard = "STANDARD" - // @enum StorageClass + + // StorageClassReducedRedundancy is a StorageClass enum value StorageClassReducedRedundancy = "REDUCED_REDUNDANCY" - // @enum StorageClass + + // StorageClassStandardIa is a StorageClass enum value StorageClassStandardIa = "STANDARD_IA" + + // StorageClassOnezoneIa is a StorageClass enum value + StorageClassOnezoneIa = "ONEZONE_IA" + + // StorageClassIntelligentTiering is a StorageClass enum value + StorageClassIntelligentTiering = "INTELLIGENT_TIERING" + + // StorageClassGlacier is a StorageClass enum value + StorageClassGlacier = "GLACIER" + + // StorageClassDeepArchive is a StorageClass enum value + StorageClassDeepArchive = "DEEP_ARCHIVE" +) + +const ( + // StorageClassAnalysisSchemaVersionV1 is a StorageClassAnalysisSchemaVersion enum value + StorageClassAnalysisSchemaVersionV1 = "V_1" +) + +const ( + // TaggingDirectiveCopy is a TaggingDirective enum value + TaggingDirectiveCopy = "COPY" + + // TaggingDirectiveReplace is a TaggingDirective enum value + TaggingDirectiveReplace = "REPLACE" +) + +const ( + // TierStandard is a Tier enum value + TierStandard = "Standard" + + // TierBulk is a Tier enum value + TierBulk = "Bulk" + + // TierExpedited is a Tier enum value + TierExpedited = "Expedited" ) const ( - // @enum TransitionStorageClass + // TransitionStorageClassGlacier is a TransitionStorageClass enum value TransitionStorageClassGlacier = "GLACIER" - // @enum TransitionStorageClass + + // TransitionStorageClassStandardIa is a TransitionStorageClass enum value TransitionStorageClassStandardIa = "STANDARD_IA" + + // TransitionStorageClassOnezoneIa is a TransitionStorageClass enum value + TransitionStorageClassOnezoneIa = "ONEZONE_IA" + + // TransitionStorageClassIntelligentTiering is a TransitionStorageClass enum value + TransitionStorageClassIntelligentTiering = "INTELLIGENT_TIERING" + + // TransitionStorageClassDeepArchive is a TransitionStorageClass enum value + TransitionStorageClassDeepArchive = "DEEP_ARCHIVE" ) const ( - // @enum Type + // TypeCanonicalUser is a Type enum value TypeCanonicalUser = "CanonicalUser" - // @enum Type + + // TypeAmazonCustomerByEmail is a Type enum value TypeAmazonCustomerByEmail = "AmazonCustomerByEmail" - // @enum Type + + // TypeGroup is a Type enum value TypeGroup = "Group" ) diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/body_hash.go b/vendor/github.com/aws/aws-sdk-go/service/s3/body_hash.go new file mode 100644 index 00000000000..5c8ce5cc8a5 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/body_hash.go @@ -0,0 +1,249 @@ +package s3 + +import ( + "bytes" + "crypto/md5" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "fmt" + "hash" + "io" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkio" +) + +const ( + contentMD5Header = "Content-Md5" + contentSha256Header = "X-Amz-Content-Sha256" + amzTeHeader = "X-Amz-Te" + amzTxEncodingHeader = "X-Amz-Transfer-Encoding" + + appendMD5TxEncoding = "append-md5" +) + +// contentMD5 computes and sets the HTTP Content-MD5 header for requests that +// require it. +func contentMD5(r *request.Request) { + h := md5.New() + + if !aws.IsReaderSeekable(r.Body) { + if r.Config.Logger != nil { + r.Config.Logger.Log(fmt.Sprintf( + "Unable to compute Content-MD5 for unseekable body, S3.%s", + r.Operation.Name)) + } + return + } + + if _, err := copySeekableBody(h, r.Body); err != nil { + r.Error = awserr.New("ContentMD5", "failed to compute body MD5", err) + return + } + + // encode the md5 checksum in base64 and set the request header. + v := base64.StdEncoding.EncodeToString(h.Sum(nil)) + r.HTTPRequest.Header.Set(contentMD5Header, v) +} + +// computeBodyHashes will add Content MD5 and Content Sha256 hashes to the +// request. If the body is not seekable or S3DisableContentMD5Validation set +// this handler will be ignored. +func computeBodyHashes(r *request.Request) { + if aws.BoolValue(r.Config.S3DisableContentMD5Validation) { + return + } + if r.IsPresigned() { + return + } + if r.Error != nil || !aws.IsReaderSeekable(r.Body) { + return + } + + var md5Hash, sha256Hash hash.Hash + hashers := make([]io.Writer, 0, 2) + + // Determine upfront which hashes can be set without overriding user + // provide header data. + if v := r.HTTPRequest.Header.Get(contentMD5Header); len(v) == 0 { + md5Hash = md5.New() + hashers = append(hashers, md5Hash) + } + + if v := r.HTTPRequest.Header.Get(contentSha256Header); len(v) == 0 { + sha256Hash = sha256.New() + hashers = append(hashers, sha256Hash) + } + + // Create the destination writer based on the hashes that are not already + // provided by the user. + var dst io.Writer + switch len(hashers) { + case 0: + return + case 1: + dst = hashers[0] + default: + dst = io.MultiWriter(hashers...) + } + + if _, err := copySeekableBody(dst, r.Body); err != nil { + r.Error = awserr.New("BodyHashError", "failed to compute body hashes", err) + return + } + + // For the hashes created, set the associated headers that the user did not + // already provide. + if md5Hash != nil { + sum := make([]byte, md5.Size) + encoded := make([]byte, md5Base64EncLen) + + base64.StdEncoding.Encode(encoded, md5Hash.Sum(sum[0:0])) + r.HTTPRequest.Header[contentMD5Header] = []string{string(encoded)} + } + + if sha256Hash != nil { + encoded := make([]byte, sha256HexEncLen) + sum := make([]byte, sha256.Size) + + hex.Encode(encoded, sha256Hash.Sum(sum[0:0])) + r.HTTPRequest.Header[contentSha256Header] = []string{string(encoded)} + } +} + +const ( + md5Base64EncLen = (md5.Size + 2) / 3 * 4 // base64.StdEncoding.EncodedLen + sha256HexEncLen = sha256.Size * 2 // hex.EncodedLen +) + +func copySeekableBody(dst io.Writer, src io.ReadSeeker) (int64, error) { + curPos, err := src.Seek(0, sdkio.SeekCurrent) + if err != nil { + return 0, err + } + + // hash the body. seek back to the first position after reading to reset + // the body for transmission. copy errors may be assumed to be from the + // body. + n, err := io.Copy(dst, src) + if err != nil { + return n, err + } + + _, err = src.Seek(curPos, sdkio.SeekStart) + if err != nil { + return n, err + } + + return n, nil +} + +// Adds the x-amz-te: append_md5 header to the request. This requests the service +// responds with a trailing MD5 checksum. +// +// Will not ask for append MD5 if disabled, the request is presigned or, +// or the API operation does not support content MD5 validation. +func askForTxEncodingAppendMD5(r *request.Request) { + if aws.BoolValue(r.Config.S3DisableContentMD5Validation) { + return + } + if r.IsPresigned() { + return + } + r.HTTPRequest.Header.Set(amzTeHeader, appendMD5TxEncoding) +} + +func useMD5ValidationReader(r *request.Request) { + if r.Error != nil { + return + } + + if v := r.HTTPResponse.Header.Get(amzTxEncodingHeader); v != appendMD5TxEncoding { + return + } + + var bodyReader *io.ReadCloser + var contentLen int64 + switch tv := r.Data.(type) { + case *GetObjectOutput: + bodyReader = &tv.Body + contentLen = aws.Int64Value(tv.ContentLength) + // Update ContentLength hiden the trailing MD5 checksum. + tv.ContentLength = aws.Int64(contentLen - md5.Size) + tv.ContentRange = aws.String(r.HTTPResponse.Header.Get("X-Amz-Content-Range")) + default: + r.Error = awserr.New("ChecksumValidationError", + fmt.Sprintf("%s: %s header received on unsupported API, %s", + amzTxEncodingHeader, appendMD5TxEncoding, r.Operation.Name, + ), nil) + return + } + + if contentLen < md5.Size { + r.Error = awserr.New("ChecksumValidationError", + fmt.Sprintf("invalid Content-Length %d for %s %s", + contentLen, appendMD5TxEncoding, amzTxEncodingHeader, + ), nil) + return + } + + // Wrap and swap the response body reader with the validation reader. + *bodyReader = newMD5ValidationReader(*bodyReader, contentLen-md5.Size) +} + +type md5ValidationReader struct { + rawReader io.ReadCloser + payload io.Reader + hash hash.Hash + + payloadLen int64 + read int64 +} + +func newMD5ValidationReader(reader io.ReadCloser, payloadLen int64) *md5ValidationReader { + h := md5.New() + return &md5ValidationReader{ + rawReader: reader, + payload: io.TeeReader(&io.LimitedReader{R: reader, N: payloadLen}, h), + hash: h, + payloadLen: payloadLen, + } +} + +func (v *md5ValidationReader) Read(p []byte) (n int, err error) { + n, err = v.payload.Read(p) + if err != nil && err != io.EOF { + return n, err + } + + v.read += int64(n) + + if err == io.EOF { + if v.read != v.payloadLen { + return n, io.ErrUnexpectedEOF + } + expectSum := make([]byte, md5.Size) + actualSum := make([]byte, md5.Size) + if _, sumReadErr := io.ReadFull(v.rawReader, expectSum); sumReadErr != nil { + return n, sumReadErr + } + actualSum = v.hash.Sum(actualSum[0:0]) + if !bytes.Equal(expectSum, actualSum) { + return n, awserr.New("InvalidChecksum", + fmt.Sprintf("expected MD5 checksum %s, got %s", + hex.EncodeToString(expectSum), + hex.EncodeToString(actualSum), + ), + nil) + } + } + + return n, err +} + +func (v *md5ValidationReader) Close() error { + return v.rawReader.Close() +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/bucket_location.go b/vendor/github.com/aws/aws-sdk-go/service/s3/bucket_location.go index c3a2702dad4..9ba8a788720 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/bucket_location.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/bucket_location.go @@ -12,19 +12,83 @@ import ( var reBucketLocation = regexp.MustCompile(`>([^<>]+)<\/Location`) +// NormalizeBucketLocation is a utility function which will update the +// passed in value to always be a region ID. Generally this would be used +// with GetBucketLocation API operation. +// +// Replaces empty string with "us-east-1", and "EU" with "eu-west-1". +// +// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html +// for more information on the values that can be returned. +func NormalizeBucketLocation(loc string) string { + switch loc { + case "": + loc = "us-east-1" + case "EU": + loc = "eu-west-1" + } + + return loc +} + +// NormalizeBucketLocationHandler is a request handler which will update the +// GetBucketLocation's result LocationConstraint value to always be a region ID. +// +// Replaces empty string with "us-east-1", and "EU" with "eu-west-1". +// +// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html +// for more information on the values that can be returned. +// +// req, result := svc.GetBucketLocationRequest(&s3.GetBucketLocationInput{ +// Bucket: aws.String(bucket), +// }) +// req.Handlers.Unmarshal.PushBackNamed(NormalizeBucketLocationHandler) +// err := req.Send() +var NormalizeBucketLocationHandler = request.NamedHandler{ + Name: "awssdk.s3.NormalizeBucketLocation", + Fn: func(req *request.Request) { + if req.Error != nil { + return + } + + out := req.Data.(*GetBucketLocationOutput) + loc := NormalizeBucketLocation(aws.StringValue(out.LocationConstraint)) + out.LocationConstraint = aws.String(loc) + }, +} + +// WithNormalizeBucketLocation is a request option which will update the +// GetBucketLocation's result LocationConstraint value to always be a region ID. +// +// Replaces empty string with "us-east-1", and "EU" with "eu-west-1". +// +// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html +// for more information on the values that can be returned. +// +// result, err := svc.GetBucketLocationWithContext(ctx, +// &s3.GetBucketLocationInput{ +// Bucket: aws.String(bucket), +// }, +// s3.WithNormalizeBucketLocation, +// ) +func WithNormalizeBucketLocation(r *request.Request) { + r.Handlers.Unmarshal.PushBackNamed(NormalizeBucketLocationHandler) +} + func buildGetBucketLocation(r *request.Request) { if r.DataFilled() { out := r.Data.(*GetBucketLocationOutput) b, err := ioutil.ReadAll(r.HTTPResponse.Body) if err != nil { - r.Error = awserr.New("SerializationError", "failed reading response body", err) + r.Error = awserr.New(request.ErrCodeSerialization, + "failed reading response body", err) return } match := reBucketLocation.FindSubmatch(b) if len(match) > 1 { loc := string(match[1]) - out.LocationConstraint = &loc + out.LocationConstraint = aws.String(loc) } } } diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/content_md5.go b/vendor/github.com/aws/aws-sdk-go/service/s3/content_md5.go deleted file mode 100644 index 9fc5df94d33..00000000000 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/content_md5.go +++ /dev/null @@ -1,36 +0,0 @@ -package s3 - -import ( - "crypto/md5" - "encoding/base64" - "io" - - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" -) - -// contentMD5 computes and sets the HTTP Content-MD5 header for requests that -// require it. -func contentMD5(r *request.Request) { - h := md5.New() - - // hash the body. seek back to the first position after reading to reset - // the body for transmission. copy errors may be assumed to be from the - // body. - _, err := io.Copy(h, r.Body) - if err != nil { - r.Error = awserr.New("ContentMD5", "failed to read body", err) - return - } - _, err = r.Body.Seek(0, 0) - if err != nil { - r.Error = awserr.New("ContentMD5", "failed to seek body", err) - return - } - - // encode the md5 checksum in base64 and set the request header. - sum := h.Sum(nil) - sum64 := make([]byte, base64.StdEncoding.EncodedLen(len(sum))) - base64.StdEncoding.Encode(sum64, sum) - r.HTTPRequest.Header.Set("Content-MD5", string(sum64)) -} diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go b/vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go index eaa4af8ea84..23d386b16c8 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go @@ -3,35 +3,73 @@ package s3 import ( "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/s3err" ) func init() { - initClient = func(c *client.Client) { - // Support building custom host-style bucket endpoints - c.Handlers.Build.PushFront(updateHostWithBucket) + initClient = defaultInitClientFn + initRequest = defaultInitRequestFn +} - // Require SSL when using SSE keys - c.Handlers.Validate.PushBack(validateSSERequiresSSL) - c.Handlers.Build.PushBack(computeSSEKeys) +func defaultInitClientFn(c *client.Client) { + // Support building custom endpoints based on config + c.Handlers.Build.PushFront(updateEndpointForS3Config) - // S3 uses custom error unmarshaling logic - c.Handlers.UnmarshalError.Clear() - c.Handlers.UnmarshalError.PushBack(unmarshalError) - } + // Require SSL when using SSE keys + c.Handlers.Validate.PushBack(validateSSERequiresSSL) + c.Handlers.Build.PushBack(computeSSEKeyMD5) + c.Handlers.Build.PushBack(computeCopySourceSSEKeyMD5) + + // S3 uses custom error unmarshaling logic + c.Handlers.UnmarshalError.Clear() + c.Handlers.UnmarshalError.PushBack(unmarshalError) + c.Handlers.UnmarshalError.PushBackNamed(s3err.RequestFailureWrapperHandler()) +} + +func defaultInitRequestFn(r *request.Request) { + // Add reuest handlers for specific platforms. + // e.g. 100-continue support for PUT requests using Go 1.6 + platformRequestHandlers(r) - initRequest = func(r *request.Request) { - switch r.Operation.Name { - case opPutBucketCors, opPutBucketLifecycle, opPutBucketPolicy, opPutBucketTagging, opDeleteObjects: - // These S3 operations require Content-MD5 to be set - r.Handlers.Build.PushBack(contentMD5) - case opGetBucketLocation: - // GetBucketLocation has custom parsing logic - r.Handlers.Unmarshal.PushFront(buildGetBucketLocation) - case opCreateBucket: - // Auto-populate LocationConstraint with current region - r.Handlers.Validate.PushFront(populateLocationConstraint) - case opCopyObject, opUploadPartCopy, opCompleteMultipartUpload: - r.Handlers.Unmarshal.PushFront(copyMultipartStatusOKUnmarhsalError) - } + switch r.Operation.Name { + case opPutBucketCors, opPutBucketLifecycle, opPutBucketPolicy, + opPutBucketTagging, opDeleteObjects, opPutBucketLifecycleConfiguration, + opPutObjectLegalHold, opPutObjectRetention, opPutObjectLockConfiguration, + opPutBucketReplication: + // These S3 operations require Content-MD5 to be set + r.Handlers.Build.PushBack(contentMD5) + case opGetBucketLocation: + // GetBucketLocation has custom parsing logic + r.Handlers.Unmarshal.PushFront(buildGetBucketLocation) + case opCreateBucket: + // Auto-populate LocationConstraint with current region + r.Handlers.Validate.PushFront(populateLocationConstraint) + case opCopyObject, opUploadPartCopy, opCompleteMultipartUpload: + r.Handlers.Unmarshal.PushFront(copyMultipartStatusOKUnmarhsalError) + r.Handlers.Unmarshal.PushBackNamed(s3err.RequestFailureWrapperHandler()) + case opPutObject, opUploadPart: + r.Handlers.Build.PushBack(computeBodyHashes) + // Disabled until #1837 root issue is resolved. + // case opGetObject: + // r.Handlers.Build.PushBack(askForTxEncodingAppendMD5) + // r.Handlers.Unmarshal.PushBack(useMD5ValidationReader) } } + +// bucketGetter is an accessor interface to grab the "Bucket" field from +// an S3 type. +type bucketGetter interface { + getBucket() string +} + +// sseCustomerKeyGetter is an accessor interface to grab the "SSECustomerKey" +// field from an S3 type. +type sseCustomerKeyGetter interface { + getSSECustomerKey() string +} + +// copySourceSSECustomerKeyGetter is an accessor interface to grab the +// "CopySourceSSECustomerKey" field from an S3 type. +type copySourceSSECustomerKeyGetter interface { + getCopySourceSSECustomerKey() string +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/doc.go b/vendor/github.com/aws/aws-sdk-go/service/s3/doc.go new file mode 100644 index 00000000000..0def02255ac --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/doc.go @@ -0,0 +1,26 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +// Package s3 provides the client and types for making API +// requests to Amazon Simple Storage Service. +// +// See https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01 for more information on this service. +// +// See s3 package documentation for more information. +// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/ +// +// Using the Client +// +// To contact Amazon Simple Storage Service with the SDK use the New function to create +// a new service client. With that client you can make API requests to the service. +// These clients are safe to use concurrently. +// +// See the SDK's documentation for more information on how to use the SDK. +// https://docs.aws.amazon.com/sdk-for-go/api/ +// +// See aws.Config documentation for more information on configuring SDK clients. +// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config +// +// See the Amazon Simple Storage Service client S3 for more +// information on creating client for this service. +// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#New +package s3 diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/doc_custom.go b/vendor/github.com/aws/aws-sdk-go/service/s3/doc_custom.go new file mode 100644 index 00000000000..4b65f71531a --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/doc_custom.go @@ -0,0 +1,123 @@ +// Upload Managers +// +// The s3manager package's Uploader provides concurrent upload of content to S3 +// by taking advantage of S3's Multipart APIs. The Uploader also supports both +// io.Reader for streaming uploads, and will also take advantage of io.ReadSeeker +// for optimizations if the Body satisfies that type. Once the Uploader instance +// is created you can call Upload concurrently from multiple goroutines safely. +// +// // The session the S3 Uploader will use +// sess := session.Must(session.NewSession()) +// +// // Create an uploader with the session and default options +// uploader := s3manager.NewUploader(sess) +// +// f, err := os.Open(filename) +// if err != nil { +// return fmt.Errorf("failed to open file %q, %v", filename, err) +// } +// +// // Upload the file to S3. +// result, err := uploader.Upload(&s3manager.UploadInput{ +// Bucket: aws.String(myBucket), +// Key: aws.String(myString), +// Body: f, +// }) +// if err != nil { +// return fmt.Errorf("failed to upload file, %v", err) +// } +// fmt.Printf("file uploaded to, %s\n", aws.StringValue(result.Location)) +// +// See the s3manager package's Uploader type documentation for more information. +// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#Uploader +// +// Download Manager +// +// The s3manager package's Downloader provides concurrently downloading of Objects +// from S3. The Downloader will write S3 Object content with an io.WriterAt. +// Once the Downloader instance is created you can call Download concurrently from +// multiple goroutines safely. +// +// // The session the S3 Downloader will use +// sess := session.Must(session.NewSession()) +// +// // Create a downloader with the session and default options +// downloader := s3manager.NewDownloader(sess) +// +// // Create a file to write the S3 Object contents to. +// f, err := os.Create(filename) +// if err != nil { +// return fmt.Errorf("failed to create file %q, %v", filename, err) +// } +// +// // Write the contents of S3 Object to the file +// n, err := downloader.Download(f, &s3.GetObjectInput{ +// Bucket: aws.String(myBucket), +// Key: aws.String(myString), +// }) +// if err != nil { +// return fmt.Errorf("failed to download file, %v", err) +// } +// fmt.Printf("file downloaded, %d bytes\n", n) +// +// See the s3manager package's Downloader type documentation for more information. +// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#Downloader +// +// Automatic URI cleaning +// +// Interacting with objects whose keys contain adjacent slashes (e.g. bucketname/foo//bar/objectname) +// requires setting DisableRestProtocolURICleaning to true in the aws.Config struct +// used by the service client. +// +// svc := s3.New(sess, &aws.Config{ +// DisableRestProtocolURICleaning: aws.Bool(true), +// }) +// out, err := svc.GetObject(&s3.GetObjectInput { +// Bucket: aws.String("bucketname"), +// Key: aws.String("//foo//bar//moo"), +// }) +// +// Get Bucket Region +// +// GetBucketRegion will attempt to get the region for a bucket using a region +// hint to determine which AWS partition to perform the query on. Use this utility +// to determine the region a bucket is in. +// +// sess := session.Must(session.NewSession()) +// +// bucket := "my-bucket" +// region, err := s3manager.GetBucketRegion(ctx, sess, bucket, "us-west-2") +// if err != nil { +// if aerr, ok := err.(awserr.Error); ok && aerr.Code() == "NotFound" { +// fmt.Fprintf(os.Stderr, "unable to find bucket %s's region not found\n", bucket) +// } +// return err +// } +// fmt.Printf("Bucket %s is in %s region\n", bucket, region) +// +// See the s3manager package's GetBucketRegion function documentation for more information +// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#GetBucketRegion +// +// S3 Crypto Client +// +// The s3crypto package provides the tools to upload and download encrypted +// content from S3. The Encryption and Decryption clients can be used concurrently +// once the client is created. +// +// sess := session.Must(session.NewSession()) +// +// // Create the decryption client. +// svc := s3crypto.NewDecryptionClient(sess) +// +// // The object will be downloaded from S3 and decrypted locally. By metadata +// // about the object's encryption will instruct the decryption client how +// // decrypt the content of the object. By default KMS is used for keys. +// result, err := svc.GetObject(&s3.GetObjectInput { +// Bucket: aws.String(myBucket), +// Key: aws.String(myKey), +// }) +// +// See the s3crypto package documentation for more information. +// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3crypto/ +// +package s3 diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/errors.go b/vendor/github.com/aws/aws-sdk-go/service/s3/errors.go new file mode 100644 index 00000000000..4db90702493 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/errors.go @@ -0,0 +1,54 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +package s3 + +const ( + + // ErrCodeBucketAlreadyExists for service response error code + // "BucketAlreadyExists". + // + // The requested bucket name is not available. The bucket namespace is shared + // by all users of the system. Please select a different name and try again. + ErrCodeBucketAlreadyExists = "BucketAlreadyExists" + + // ErrCodeBucketAlreadyOwnedByYou for service response error code + // "BucketAlreadyOwnedByYou". + // + // The bucket you tried to create already exists, and you own it. Amazon S3 + // returns this error in all AWS Regions except in the North Virginia region. + // For legacy compatibility, if you re-create an existing bucket that you already + // own in the North Virginia region, Amazon S3 returns 200 OK and resets the + // bucket access control lists (ACLs). + ErrCodeBucketAlreadyOwnedByYou = "BucketAlreadyOwnedByYou" + + // ErrCodeNoSuchBucket for service response error code + // "NoSuchBucket". + // + // The specified bucket does not exist. + ErrCodeNoSuchBucket = "NoSuchBucket" + + // ErrCodeNoSuchKey for service response error code + // "NoSuchKey". + // + // The specified key does not exist. + ErrCodeNoSuchKey = "NoSuchKey" + + // ErrCodeNoSuchUpload for service response error code + // "NoSuchUpload". + // + // The specified multipart upload does not exist. + ErrCodeNoSuchUpload = "NoSuchUpload" + + // ErrCodeObjectAlreadyInActiveTierError for service response error code + // "ObjectAlreadyInActiveTierError". + // + // This operation is not allowed against this storage tier + ErrCodeObjectAlreadyInActiveTierError = "ObjectAlreadyInActiveTierError" + + // ErrCodeObjectNotInActiveTierError for service response error code + // "ObjectNotInActiveTierError". + // + // The source object of the COPY operation is not in the active tier and is + // only stored in Amazon Glacier. + ErrCodeObjectNotInActiveTierError = "ObjectNotInActiveTierError" +) diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/host_style_bucket.go b/vendor/github.com/aws/aws-sdk-go/service/s3/host_style_bucket.go index b7cf4f9cc30..a7fbc2de2f8 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/host_style_bucket.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/host_style_bucket.go @@ -1,60 +1,155 @@ package s3 import ( + "fmt" + "net/url" "regexp" "strings" "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awsutil" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" ) -var reDomain = regexp.MustCompile(`^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$`) -var reIPAddress = regexp.MustCompile(`^(\d+\.){3}\d+$`) +// an operationBlacklist is a list of operation names that should a +// request handler should not be executed with. +type operationBlacklist []string -// dnsCompatibleBucketName returns true if the bucket name is DNS compatible. -// Buckets created outside of the classic region MUST be DNS compatible. -func dnsCompatibleBucketName(bucket string) bool { - return reDomain.MatchString(bucket) && - !reIPAddress.MatchString(bucket) && - !strings.Contains(bucket, "..") +// Continue will return true of the Request's operation name is not +// in the blacklist. False otherwise. +func (b operationBlacklist) Continue(r *request.Request) bool { + for i := 0; i < len(b); i++ { + if b[i] == r.Operation.Name { + return false + } + } + return true } -// hostStyleBucketName returns true if the request should put the bucket in -// the host. This is false if S3ForcePathStyle is explicitly set or if the -// bucket is not DNS compatible. -func hostStyleBucketName(r *request.Request, bucket string) bool { - if aws.BoolValue(r.Config.S3ForcePathStyle) { - return false +var accelerateOpBlacklist = operationBlacklist{ + opListBuckets, opCreateBucket, opDeleteBucket, +} + +// Request handler to automatically add the bucket name to the endpoint domain +// if possible. This style of bucket is valid for all bucket names which are +// DNS compatible and do not contain "." +func updateEndpointForS3Config(r *request.Request) { + forceHostStyle := aws.BoolValue(r.Config.S3ForcePathStyle) + accelerate := aws.BoolValue(r.Config.S3UseAccelerate) + + if accelerate && accelerateOpBlacklist.Continue(r) { + if forceHostStyle { + if r.Config.Logger != nil { + r.Config.Logger.Log("ERROR: aws.Config.S3UseAccelerate is not compatible with aws.Config.S3ForcePathStyle, ignoring S3ForcePathStyle.") + } + } + updateEndpointForAccelerate(r) + } else if !forceHostStyle && r.Operation.Name != opGetBucketLocation { + updateEndpointForHostStyle(r) } +} - // Bucket might be DNS compatible but dots in the hostname will fail - // certificate validation, so do not use host-style. - if r.HTTPRequest.URL.Scheme == "https" && strings.Contains(bucket, ".") { - return false +func updateEndpointForHostStyle(r *request.Request) { + bucket, ok := bucketNameFromReqParams(r.Params) + if !ok { + // Ignore operation requests if the bucketname was not provided + // if this is an input validation error the validation handler + // will report it. + return } - // GetBucketLocation should be able to be called from any region within - // a partition, and return the associated region of the bucket. - if r.Operation.Name == opGetBucketLocation { - return false + if !hostCompatibleBucketName(r.HTTPRequest.URL, bucket) { + // bucket name must be valid to put into the host + return } - // Use host-style if the bucket is DNS compatible - return dnsCompatibleBucketName(bucket) + moveBucketToHost(r.HTTPRequest.URL, bucket) } -func updateHostWithBucket(r *request.Request) { - b, _ := awsutil.ValuesAtPath(r.Params, "Bucket") - if len(b) == 0 { +var ( + accelElem = []byte("s3-accelerate.dualstack.") +) + +func updateEndpointForAccelerate(r *request.Request) { + bucket, ok := bucketNameFromReqParams(r.Params) + if !ok { + // Ignore operation requests if the bucketname was not provided + // if this is an input validation error the validation handler + // will report it. + return + } + + if !hostCompatibleBucketName(r.HTTPRequest.URL, bucket) { + r.Error = awserr.New("InvalidParameterException", + fmt.Sprintf("bucket name %s is not compatible with S3 Accelerate", bucket), + nil) + return + } + + parts := strings.Split(r.HTTPRequest.URL.Host, ".") + if len(parts) < 3 { + r.Error = awserr.New("InvalidParameterExecption", + fmt.Sprintf("unable to update endpoint host for S3 accelerate, hostname invalid, %s", + r.HTTPRequest.URL.Host), nil) return } - if bucket := b[0].(*string); aws.StringValue(bucket) != "" && hostStyleBucketName(r, *bucket) { - r.HTTPRequest.URL.Host = *bucket + "." + r.HTTPRequest.URL.Host - r.HTTPRequest.URL.Path = strings.Replace(r.HTTPRequest.URL.Path, "/{Bucket}", "", -1) - if r.HTTPRequest.URL.Path == "" { - r.HTTPRequest.URL.Path = "/" + if parts[0] == "s3" || strings.HasPrefix(parts[0], "s3-") { + parts[0] = "s3-accelerate" + } + for i := 1; i+1 < len(parts); i++ { + if parts[i] == aws.StringValue(r.Config.Region) { + parts = append(parts[:i], parts[i+1:]...) + break } } + + r.HTTPRequest.URL.Host = strings.Join(parts, ".") + + moveBucketToHost(r.HTTPRequest.URL, bucket) +} + +// Attempts to retrieve the bucket name from the request input parameters. +// If no bucket is found, or the field is empty "", false will be returned. +func bucketNameFromReqParams(params interface{}) (string, bool) { + if iface, ok := params.(bucketGetter); ok { + b := iface.getBucket() + return b, len(b) > 0 + } + + return "", false +} + +// hostCompatibleBucketName returns true if the request should +// put the bucket in the host. This is false if S3ForcePathStyle is +// explicitly set or if the bucket is not DNS compatible. +func hostCompatibleBucketName(u *url.URL, bucket string) bool { + // Bucket might be DNS compatible but dots in the hostname will fail + // certificate validation, so do not use host-style. + if u.Scheme == "https" && strings.Contains(bucket, ".") { + return false + } + + // if the bucket is DNS compatible + return dnsCompatibleBucketName(bucket) +} + +var reDomain = regexp.MustCompile(`^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$`) +var reIPAddress = regexp.MustCompile(`^(\d+\.){3}\d+$`) + +// dnsCompatibleBucketName returns true if the bucket name is DNS compatible. +// Buckets created outside of the classic region MUST be DNS compatible. +func dnsCompatibleBucketName(bucket string) bool { + return reDomain.MatchString(bucket) && + !reIPAddress.MatchString(bucket) && + !strings.Contains(bucket, "..") +} + +// moveBucketToHost moves the bucket name from the URI path to URL host. +func moveBucketToHost(u *url.URL, bucket string) { + u.Host = bucket + "." + u.Host + u.Path = strings.Replace(u.Path, "/{Bucket}", "", -1) + if u.Path == "" { + u.Path = "/" + } } diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/platform_handlers.go b/vendor/github.com/aws/aws-sdk-go/service/s3/platform_handlers.go new file mode 100644 index 00000000000..8e6f3307d41 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/platform_handlers.go @@ -0,0 +1,8 @@ +// +build !go1.6 + +package s3 + +import "github.com/aws/aws-sdk-go/aws/request" + +func platformRequestHandlers(r *request.Request) { +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/platform_handlers_go1.6.go b/vendor/github.com/aws/aws-sdk-go/service/s3/platform_handlers_go1.6.go new file mode 100644 index 00000000000..14d05f7b75a --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/platform_handlers_go1.6.go @@ -0,0 +1,28 @@ +// +build go1.6 + +package s3 + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" +) + +func platformRequestHandlers(r *request.Request) { + if r.Operation.HTTPMethod == "PUT" { + // 100-Continue should only be used on put requests. + r.Handlers.Sign.PushBack(add100Continue) + } +} + +func add100Continue(r *request.Request) { + if aws.BoolValue(r.Config.S3Disable100Continue) { + return + } + if r.HTTPRequest.ContentLength < 1024*1024*2 { + // Ignore requests smaller than 2MB. This helps prevent delaying + // requests unnecessarily. + return + } + + r.HTTPRequest.Header.Set("Expect", "100-Continue") +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/service.go b/vendor/github.com/aws/aws-sdk-go/service/s3/service.go index e80d95429a4..ba77bb81270 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/service.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/service.go @@ -1,4 +1,4 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. package s3 @@ -7,13 +7,16 @@ import ( "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/client/metadata" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/aws/signer/v4" "github.com/aws/aws-sdk-go/private/protocol/restxml" - "github.com/aws/aws-sdk-go/private/signer/v4" ) -// S3 is a client for Amazon S3. -//The service client's operations are safe to be used concurrently. -// It is not safe to mutate any of the client's properties though. +// S3 provides the API operation methods for making requests to +// Amazon Simple Storage Service. See this package's package overview docs +// for details on the service. +// +// S3 methods are safe to use concurrently. It is not safe to +// modify mutate any of the struct's properties though. type S3 struct { *client.Client } @@ -24,32 +27,41 @@ var initClient func(*client.Client) // Used for custom request initialization logic var initRequest func(*request.Request) -// A ServiceName is the name of the service the client will make API calls to. -const ServiceName = "s3" +// Service information constants +const ( + ServiceName = "s3" // Name of service. + EndpointsID = ServiceName // ID to lookup a service endpoint with. + ServiceID = "S3" // ServiceID is a unique identifer of a specific service. +) // New creates a new instance of the S3 client with a session. // If additional configuration is needed for the client instance use the optional // aws.Config parameter to add your extra config. // // Example: +// mySession := session.Must(session.NewSession()) +// // // Create a S3 client from just a session. // svc := s3.New(mySession) // // // Create a S3 client with additional configuration // svc := s3.New(mySession, aws.NewConfig().WithRegion("us-west-2")) func New(p client.ConfigProvider, cfgs ...*aws.Config) *S3 { - c := p.ClientConfig(ServiceName, cfgs...) - return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion) + c := p.ClientConfig(EndpointsID, cfgs...) + return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName) } // newClient creates, initializes and returns a new service client instance. -func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion string) *S3 { +func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *S3 { svc := &S3{ Client: client.New( cfg, metadata.ClientInfo{ ServiceName: ServiceName, + ServiceID: ServiceID, + SigningName: signingName, SigningRegion: signingRegion, + PartitionID: partitionID, Endpoint: endpoint, APIVersion: "2006-03-01", }, @@ -58,11 +70,15 @@ func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegio } // Handlers - svc.Handlers.Sign.PushBack(v4.Sign) - svc.Handlers.Build.PushBack(restxml.Build) - svc.Handlers.Unmarshal.PushBack(restxml.Unmarshal) - svc.Handlers.UnmarshalMeta.PushBack(restxml.UnmarshalMeta) - svc.Handlers.UnmarshalError.PushBack(restxml.UnmarshalError) + svc.Handlers.Sign.PushBackNamed(v4.BuildNamedHandler(v4.SignRequestHandler.Name, func(s *v4.Signer) { + s.DisableURIPathEscaping = true + })) + svc.Handlers.Build.PushBackNamed(restxml.BuildHandler) + svc.Handlers.Unmarshal.PushBackNamed(restxml.UnmarshalHandler) + svc.Handlers.UnmarshalMeta.PushBackNamed(restxml.UnmarshalMetaHandler) + svc.Handlers.UnmarshalError.PushBackNamed(restxml.UnmarshalErrorHandler) + + svc.Handlers.UnmarshalStream.PushBackNamed(restxml.UnmarshalHandler) // Run custom client initialization if present if initClient != nil { diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go b/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go index 268ea2fb459..b71c835deef 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/sse.go @@ -3,42 +3,82 @@ package s3 import ( "crypto/md5" "encoding/base64" + "net/http" "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/awsutil" "github.com/aws/aws-sdk-go/aws/request" ) var errSSERequiresSSL = awserr.New("ConfigError", "cannot send SSE keys over HTTP.", nil) func validateSSERequiresSSL(r *request.Request) { - if r.HTTPRequest.URL.Scheme != "https" { - p, _ := awsutil.ValuesAtPath(r.Params, "SSECustomerKey||CopySourceSSECustomerKey") - if len(p) > 0 { + if r.HTTPRequest.URL.Scheme == "https" { + return + } + + if iface, ok := r.Params.(sseCustomerKeyGetter); ok { + if len(iface.getSSECustomerKey()) > 0 { + r.Error = errSSERequiresSSL + return + } + } + + if iface, ok := r.Params.(copySourceSSECustomerKeyGetter); ok { + if len(iface.getCopySourceSSECustomerKey()) > 0 { r.Error = errSSERequiresSSL + return } } } -func computeSSEKeys(r *request.Request) { - headers := []string{ - "x-amz-server-side-encryption-customer-key", - "x-amz-copy-source-server-side-encryption-customer-key", +const ( + sseKeyHeader = "x-amz-server-side-encryption-customer-key" + sseKeyMD5Header = sseKeyHeader + "-md5" +) + +func computeSSEKeyMD5(r *request.Request) { + var key string + if g, ok := r.Params.(sseCustomerKeyGetter); ok { + key = g.getSSECustomerKey() } - for _, h := range headers { - md5h := h + "-md5" - if key := r.HTTPRequest.Header.Get(h); key != "" { - // Base64-encode the value - b64v := base64.StdEncoding.EncodeToString([]byte(key)) - r.HTTPRequest.Header.Set(h, b64v) - - // Add MD5 if it wasn't computed - if r.HTTPRequest.Header.Get(md5h) == "" { - sum := md5.Sum([]byte(key)) - b64sum := base64.StdEncoding.EncodeToString(sum[:]) - r.HTTPRequest.Header.Set(md5h, b64sum) - } + computeKeyMD5(sseKeyHeader, sseKeyMD5Header, key, r.HTTPRequest) +} + +const ( + copySrcSSEKeyHeader = "x-amz-copy-source-server-side-encryption-customer-key" + copySrcSSEKeyMD5Header = copySrcSSEKeyHeader + "-md5" +) + +func computeCopySourceSSEKeyMD5(r *request.Request) { + var key string + if g, ok := r.Params.(copySourceSSECustomerKeyGetter); ok { + key = g.getCopySourceSSECustomerKey() + } + + computeKeyMD5(copySrcSSEKeyHeader, copySrcSSEKeyMD5Header, key, r.HTTPRequest) +} + +func computeKeyMD5(keyHeader, keyMD5Header, key string, r *http.Request) { + if len(key) == 0 { + // Backwards compatiablity where user just set the header value instead + // of using the API parameter, or setting the header value for an + // operation without the parameters modeled. + key = r.Header.Get(keyHeader) + if len(key) == 0 { + return } + + // In backwards compatiable, the header's value is not base64 encoded, + // and needs to be encoded and updated by the SDK's customizations. + b64Key := base64.StdEncoding.EncodeToString([]byte(key)) + r.Header.Set(keyHeader, b64Key) + } + + // Only update Key's MD5 if not already set. + if len(r.Header.Get(keyMD5Header)) == 0 { + sum := md5.Sum([]byte(key)) + keyMD5 := base64.StdEncoding.EncodeToString(sum[:]) + r.Header.Set(keyMD5Header, keyMD5) } } diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go b/vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go index ce65fcdaf6c..f6a69aed11b 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go @@ -5,20 +5,24 @@ import ( "io/ioutil" "net/http" - "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkio" ) func copyMultipartStatusOKUnmarhsalError(r *request.Request) { b, err := ioutil.ReadAll(r.HTTPResponse.Body) if err != nil { - r.Error = awserr.New("SerializationError", "unable to read response body", err) + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, "unable to read response body", err), + r.HTTPResponse.StatusCode, + r.RequestID, + ) return } body := bytes.NewReader(b) - r.HTTPResponse.Body = aws.ReadSeekCloser(body) - defer r.HTTPResponse.Body.(aws.ReaderSeekerCloser).Seek(0, 0) + r.HTTPResponse.Body = ioutil.NopCloser(body) + defer body.Seek(0, sdkio.SeekStart) if body.Len() == 0 { // If there is no body don't attempt to parse the body. @@ -27,7 +31,7 @@ func copyMultipartStatusOKUnmarhsalError(r *request.Request) { unmarshalError(r) if err, ok := r.Error.(awserr.Error); ok && err != nil { - if err.Code() == "SerializationError" { + if err.Code() == request.ErrCodeSerialization { r.Error = nil return } diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/unmarshal_error.go b/vendor/github.com/aws/aws-sdk-go/service/s3/unmarshal_error.go index 30470ac117f..5b63fac72ff 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/unmarshal_error.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/unmarshal_error.go @@ -4,12 +4,14 @@ import ( "encoding/xml" "fmt" "io" + "io/ioutil" "net/http" "strings" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" ) type xmlErrorResponse struct { @@ -20,32 +22,67 @@ type xmlErrorResponse struct { func unmarshalError(r *request.Request) { defer r.HTTPResponse.Body.Close() + defer io.Copy(ioutil.Discard, r.HTTPResponse.Body) + // Bucket exists in a different region, and request needs + // to be made to the correct region. if r.HTTPResponse.StatusCode == http.StatusMovedPermanently { - r.Error = awserr.New("BucketRegionError", - fmt.Sprintf("incorrect region, the bucket is not in '%s' region", aws.StringValue(r.Config.Region)), nil) - return - } - - if r.HTTPResponse.ContentLength == int64(0) { - // No body, use status code to generate an awserr.Error + msg := fmt.Sprintf( + "incorrect region, the bucket is not in '%s' region at endpoint '%s'", + aws.StringValue(r.Config.Region), + aws.StringValue(r.Config.Endpoint), + ) + if v := r.HTTPResponse.Header.Get("x-amz-bucket-region"); len(v) != 0 { + msg += fmt.Sprintf(", bucket is in '%s' region", v) + } r.Error = awserr.NewRequestFailure( - awserr.New(strings.Replace(r.HTTPResponse.Status, " ", "", -1), r.HTTPResponse.Status, nil), + awserr.New("BucketRegionError", msg, nil), r.HTTPResponse.StatusCode, - "", + r.RequestID, ) return } - resp := &xmlErrorResponse{} - err := xml.NewDecoder(r.HTTPResponse.Body).Decode(resp) - if err != nil && err != io.EOF { - r.Error = awserr.New("SerializationError", "failed to decode S3 XML error response", nil) - } else { + // Attempt to parse error from body if it is known + var errResp xmlErrorResponse + err := xmlutil.UnmarshalXMLError(&errResp, r.HTTPResponse.Body) + if err == io.EOF { + // Only capture the error if an unmarshal error occurs that is not EOF, + // because S3 might send an error without a error message which causes + // the XML unmarshal to fail with EOF. + err = nil + } + if err != nil { r.Error = awserr.NewRequestFailure( - awserr.New(resp.Code, resp.Message, nil), + awserr.New(request.ErrCodeSerialization, + "failed to unmarshal error message", err), r.HTTPResponse.StatusCode, - "", + r.RequestID, ) + return } + + // Fallback to status code converted to message if still no error code + if len(errResp.Code) == 0 { + statusText := http.StatusText(r.HTTPResponse.StatusCode) + errResp.Code = strings.Replace(statusText, " ", "", -1) + errResp.Message = statusText + } + + r.Error = awserr.NewRequestFailure( + awserr.New(errResp.Code, errResp.Message, err), + r.HTTPResponse.StatusCode, + r.RequestID, + ) +} + +// A RequestFailure provides access to the S3 Request ID and Host ID values +// returned from API operation errors. Getting the error as a string will +// return the formated error with the same information as awserr.RequestFailure, +// while also adding the HostID value from the response. +type RequestFailure interface { + awserr.RequestFailure + + // Host ID is the S3 Host ID needed for debug, and contacting support + HostID() string } diff --git a/vendor/github.com/aws/aws-sdk-go/service/s3/waiters.go b/vendor/github.com/aws/aws-sdk-go/service/s3/waiters.go index 4879fca8a0c..2596c694b50 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/s3/waiters.go +++ b/vendor/github.com/aws/aws-sdk-go/service/s3/waiters.go @@ -1,117 +1,214 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. package s3 import ( - "github.com/aws/aws-sdk-go/private/waiter" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" ) +// WaitUntilBucketExists uses the Amazon S3 API operation +// HeadBucket to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. func (c *S3) WaitUntilBucketExists(input *HeadBucketInput) error { - waiterCfg := waiter.Config{ - Operation: "HeadBucket", - Delay: 5, + return c.WaitUntilBucketExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilBucketExistsWithContext is an extended version of WaitUntilBucketExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) WaitUntilBucketExistsWithContext(ctx aws.Context, input *HeadBucketInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilBucketExists", MaxAttempts: 20, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(5 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "status", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 200, }, { - State: "success", - Matcher: "status", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, + Expected: 301, + }, + { + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 403, }, { - State: "retry", - Matcher: "status", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 404, }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *HeadBucketInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.HeadBucketRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } +// WaitUntilBucketNotExists uses the Amazon S3 API operation +// HeadBucket to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. func (c *S3) WaitUntilBucketNotExists(input *HeadBucketInput) error { - waiterCfg := waiter.Config{ - Operation: "HeadBucket", - Delay: 5, + return c.WaitUntilBucketNotExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilBucketNotExistsWithContext is an extended version of WaitUntilBucketNotExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) WaitUntilBucketNotExistsWithContext(ctx aws.Context, input *HeadBucketInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilBucketNotExists", MaxAttempts: 20, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(5 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "status", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 404, }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *HeadBucketInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.HeadBucketRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } +// WaitUntilObjectExists uses the Amazon S3 API operation +// HeadObject to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. func (c *S3) WaitUntilObjectExists(input *HeadObjectInput) error { - waiterCfg := waiter.Config{ - Operation: "HeadObject", - Delay: 5, + return c.WaitUntilObjectExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilObjectExistsWithContext is an extended version of WaitUntilObjectExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) WaitUntilObjectExistsWithContext(ctx aws.Context, input *HeadObjectInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilObjectExists", MaxAttempts: 20, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(5 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "status", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 200, }, { - State: "retry", - Matcher: "status", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 404, }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *HeadObjectInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.HeadObjectRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } +// WaitUntilObjectNotExists uses the Amazon S3 API operation +// HeadObject to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. func (c *S3) WaitUntilObjectNotExists(input *HeadObjectInput) error { - waiterCfg := waiter.Config{ - Operation: "HeadObject", - Delay: 5, + return c.WaitUntilObjectNotExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilObjectNotExistsWithContext is an extended version of WaitUntilObjectNotExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *S3) WaitUntilObjectNotExistsWithContext(ctx aws.Context, input *HeadObjectInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilObjectNotExists", MaxAttempts: 20, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(5 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "status", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 404, }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *HeadObjectInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.HeadObjectRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/api.go b/vendor/github.com/aws/aws-sdk-go/service/sts/api.go new file mode 100644 index 00000000000..7f60d4aa185 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/sts/api.go @@ -0,0 +1,3115 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +package sts + +import ( + "fmt" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awsutil" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/request" +) + +const opAssumeRole = "AssumeRole" + +// AssumeRoleRequest generates a "aws/request.Request" representing the +// client's request for the AssumeRole operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AssumeRole for more information on using the AssumeRole +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AssumeRoleRequest method. +// req, resp := client.AssumeRoleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole +func (c *STS) AssumeRoleRequest(input *AssumeRoleInput) (req *request.Request, output *AssumeRoleOutput) { + op := &request.Operation{ + Name: opAssumeRole, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AssumeRoleInput{} + } + + output = &AssumeRoleOutput{} + req = c.newRequest(op, input, output) + return +} + +// AssumeRole API operation for AWS Security Token Service. +// +// Returns a set of temporary security credentials that you can use to access +// AWS resources that you might not normally have access to. These temporary +// credentials consist of an access key ID, a secret access key, and a security +// token. Typically, you use AssumeRole within your account or for cross-account +// access. For a comparison of AssumeRole with other API operations that produce +// temporary credentials, see Requesting Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// in the IAM User Guide. +// +// You cannot use AWS account root user credentials to call AssumeRole. You +// must use credentials for an IAM user or an IAM role to call AssumeRole. +// +// For cross-account access, imagine that you own multiple accounts and need +// to access resources in each account. You could create long-term credentials +// in each account to access those resources. However, managing all those credentials +// and remembering which one can access which account can be time consuming. +// Instead, you can create one set of long-term credentials in one account. +// Then use temporary security credentials to access all the other accounts +// by assuming roles in those accounts. For more information about roles, see +// IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) +// in the IAM User Guide. +// +// Session Duration +// +// By default, the temporary security credentials created by AssumeRole last +// for one hour. However, you can use the optional DurationSeconds parameter +// to specify the duration of your session. You can provide a value from 900 +// seconds (15 minutes) up to the maximum session duration setting for the role. +// This setting can have a value from 1 hour to 12 hours. To learn how to view +// the maximum value for your role, see View the Maximum Session Duration Setting +// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) +// in the IAM User Guide. The maximum session duration limit applies when you +// use the AssumeRole* API operations or the assume-role* CLI commands. However +// the limit does not apply when you use those operations to create a console +// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) +// in the IAM User Guide. +// +// Permissions +// +// The temporary security credentials created by AssumeRole can be used to make +// API calls to any AWS service with the following exception: You cannot call +// the AWS STS GetFederationToken or GetSessionToken API operations. +// +// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// to this operation. You can pass a single JSON policy document to use as an +// inline session policy. You can also specify up to 10 managed policies to +// use as managed session policies. The plain text that you use for both inline +// and managed session policies can't exceed 2,048 characters. Passing policies +// to this operation returns new temporary credentials. The resulting session's +// permissions are the intersection of the role's identity-based policy and +// the session policies. You can use the role's temporary credentials in subsequent +// AWS API calls to access resources in the account that owns the role. You +// cannot use session policies to grant more permissions than those allowed +// by the identity-based policy of the role that is being assumed. For more +// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// in the IAM User Guide. +// +// To assume a role from a different account, your AWS account must be trusted +// by the role. The trust relationship is defined in the role's trust policy +// when the role is created. That trust policy states which accounts are allowed +// to delegate that access to users in the account. +// +// A user who wants to access a role in a different account must also have permissions +// that are delegated from the user account administrator. The administrator +// must attach a policy that allows the user to call AssumeRole for the ARN +// of the role in the other account. If the user is in the same account as the +// role, then you can do either of the following: +// +// * Attach a policy to the user (identical to the previous user in a different +// account). +// +// * Add the user as a principal directly in the role's trust policy. +// +// In this case, the trust policy acts as an IAM resource-based policy. Users +// in the same account as the role do not need explicit permission to assume +// the role. For more information about trust policies and resource-based policies, +// see IAM Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) +// in the IAM User Guide. +// +// Tags +// +// (Optional) You can pass tag key-value pairs to your session. These tags are +// called session tags. For more information about session tags, see Passing +// Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// An administrator must grant you the permissions necessary to pass session +// tags. The administrator can also create granular permissions to allow you +// to pass only specific session tags. For more information, see Tutorial: Using +// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) +// in the IAM User Guide. +// +// You can set the session tags as transitive. Transitive tags persist during +// role chaining. For more information, see Chaining Roles with Session Tags +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) +// in the IAM User Guide. +// +// Using MFA with AssumeRole +// +// (Optional) You can include multi-factor authentication (MFA) information +// when you call AssumeRole. This is useful for cross-account scenarios to ensure +// that the user that assumes the role has been authenticated with an AWS MFA +// device. In that scenario, the trust policy of the role being assumed includes +// a condition that tests for MFA authentication. If the caller does not include +// valid MFA information, the request to assume the role is denied. The condition +// in a trust policy that tests for MFA authentication might look like the following +// example. +// +// "Condition": {"Bool": {"aws:MultiFactorAuthPresent": true}} +// +// For more information, see Configuring MFA-Protected API Access (https://docs.aws.amazon.com/IAM/latest/UserGuide/MFAProtectedAPI.html) +// in the IAM User Guide guide. +// +// To use MFA with AssumeRole, you pass values for the SerialNumber and TokenCode +// parameters. The SerialNumber value identifies the user's hardware or virtual +// MFA device. The TokenCode is the time-based one-time password (TOTP) that +// the MFA device produces. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation AssumeRole for usage and error information. +// +// Returned Error Codes: +// * ErrCodeMalformedPolicyDocumentException "MalformedPolicyDocument" +// The request was rejected because the policy document was malformed. The error +// message describes the specific error. +// +// * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" +// The request was rejected because the total packed size of the session policies +// and session tags combined was too large. An AWS conversion compresses the +// session policy document, session policy ARNs, and session tags into a packed +// binary format that has a separate limit. The error message indicates by percentage +// how close the policies and tags are to the upper size limit. For more information, +// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You could receive this error even though you meet other defined session policy +// and session tag limits. For more information, see IAM and STS Entity Character +// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// * ErrCodeRegionDisabledException "RegionDisabledException" +// STS is not activated in the requested region for the account that is being +// asked to generate credentials. The account administrator must use the IAM +// console to activate STS in that region. For more information, see Activating +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole +func (c *STS) AssumeRole(input *AssumeRoleInput) (*AssumeRoleOutput, error) { + req, out := c.AssumeRoleRequest(input) + return out, req.Send() +} + +// AssumeRoleWithContext is the same as AssumeRole with the addition of +// the ability to pass a context and additional request options. +// +// See AssumeRole for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) AssumeRoleWithContext(ctx aws.Context, input *AssumeRoleInput, opts ...request.Option) (*AssumeRoleOutput, error) { + req, out := c.AssumeRoleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAssumeRoleWithSAML = "AssumeRoleWithSAML" + +// AssumeRoleWithSAMLRequest generates a "aws/request.Request" representing the +// client's request for the AssumeRoleWithSAML operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AssumeRoleWithSAML for more information on using the AssumeRoleWithSAML +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AssumeRoleWithSAMLRequest method. +// req, resp := client.AssumeRoleWithSAMLRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML +func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *request.Request, output *AssumeRoleWithSAMLOutput) { + op := &request.Operation{ + Name: opAssumeRoleWithSAML, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AssumeRoleWithSAMLInput{} + } + + output = &AssumeRoleWithSAMLOutput{} + req = c.newRequest(op, input, output) + req.Config.Credentials = credentials.AnonymousCredentials + return +} + +// AssumeRoleWithSAML API operation for AWS Security Token Service. +// +// Returns a set of temporary security credentials for users who have been authenticated +// via a SAML authentication response. This operation provides a mechanism for +// tying an enterprise identity store or directory to role-based AWS access +// without user-specific credentials or configuration. For a comparison of AssumeRoleWithSAML +// with the other API operations that produce temporary credentials, see Requesting +// Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// in the IAM User Guide. +// +// The temporary security credentials returned by this operation consist of +// an access key ID, a secret access key, and a security token. Applications +// can use these temporary security credentials to sign calls to AWS services. +// +// Session Duration +// +// By default, the temporary security credentials created by AssumeRoleWithSAML +// last for one hour. However, you can use the optional DurationSeconds parameter +// to specify the duration of your session. Your role session lasts for the +// duration that you specify, or until the time specified in the SAML authentication +// response's SessionNotOnOrAfter value, whichever is shorter. You can provide +// a DurationSeconds value from 900 seconds (15 minutes) up to the maximum session +// duration setting for the role. This setting can have a value from 1 hour +// to 12 hours. To learn how to view the maximum value for your role, see View +// the Maximum Session Duration Setting for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) +// in the IAM User Guide. The maximum session duration limit applies when you +// use the AssumeRole* API operations or the assume-role* CLI commands. However +// the limit does not apply when you use those operations to create a console +// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) +// in the IAM User Guide. +// +// Permissions +// +// The temporary security credentials created by AssumeRoleWithSAML can be used +// to make API calls to any AWS service with the following exception: you cannot +// call the STS GetFederationToken or GetSessionToken API operations. +// +// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// to this operation. You can pass a single JSON policy document to use as an +// inline session policy. You can also specify up to 10 managed policies to +// use as managed session policies. The plain text that you use for both inline +// and managed session policies can't exceed 2,048 characters. Passing policies +// to this operation returns new temporary credentials. The resulting session's +// permissions are the intersection of the role's identity-based policy and +// the session policies. You can use the role's temporary credentials in subsequent +// AWS API calls to access resources in the account that owns the role. You +// cannot use session policies to grant more permissions than those allowed +// by the identity-based policy of the role that is being assumed. For more +// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// in the IAM User Guide. +// +// Calling AssumeRoleWithSAML does not require the use of AWS security credentials. +// The identity of the caller is validated by using keys in the metadata document +// that is uploaded for the SAML provider entity for your identity provider. +// +// Calling AssumeRoleWithSAML can result in an entry in your AWS CloudTrail +// logs. The entry includes the value in the NameID element of the SAML assertion. +// We recommend that you use a NameIDType that is not associated with any personally +// identifiable information (PII). For example, you could instead use the persistent +// identifier (urn:oasis:names:tc:SAML:2.0:nameid-format:persistent). +// +// Tags +// +// (Optional) You can configure your IdP to pass attributes into your SAML assertion +// as session tags. Each session tag consists of a key name and an associated +// value. For more information about session tags, see Passing Session Tags +// in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You can pass up to 50 session tags. The plain text session tag keys can’t +// exceed 128 characters and the values can’t exceed 256 characters. For these +// and additional limits, see IAM and STS Character Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) +// in the IAM User Guide. +// +// An AWS conversion compresses the passed session policies and session tags +// into a packed binary format that has a separate limit. Your request can fail +// for this limit even if your plain text meets the other requirements. The +// PackedPolicySize response element indicates by percentage how close the policies +// and tags for your request are to the upper size limit. +// +// You can pass a session tag with the same key as a tag that is attached to +// the role. When you do, session tags override the role's tags with the same +// key. +// +// An administrator must grant you the permissions necessary to pass session +// tags. The administrator can also create granular permissions to allow you +// to pass only specific session tags. For more information, see Tutorial: Using +// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) +// in the IAM User Guide. +// +// You can set the session tags as transitive. Transitive tags persist during +// role chaining. For more information, see Chaining Roles with Session Tags +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) +// in the IAM User Guide. +// +// SAML Configuration +// +// Before your application can call AssumeRoleWithSAML, you must configure your +// SAML identity provider (IdP) to issue the claims required by AWS. Additionally, +// you must use AWS Identity and Access Management (IAM) to create a SAML provider +// entity in your AWS account that represents your identity provider. You must +// also create an IAM role that specifies this SAML provider in its trust policy. +// +// For more information, see the following resources: +// +// * About SAML 2.0-based Federation (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html) +// in the IAM User Guide. +// +// * Creating SAML Identity Providers (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html) +// in the IAM User Guide. +// +// * Configuring a Relying Party and Claims (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html) +// in the IAM User Guide. +// +// * Creating a Role for SAML 2.0 Federation (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html) +// in the IAM User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation AssumeRoleWithSAML for usage and error information. +// +// Returned Error Codes: +// * ErrCodeMalformedPolicyDocumentException "MalformedPolicyDocument" +// The request was rejected because the policy document was malformed. The error +// message describes the specific error. +// +// * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" +// The request was rejected because the total packed size of the session policies +// and session tags combined was too large. An AWS conversion compresses the +// session policy document, session policy ARNs, and session tags into a packed +// binary format that has a separate limit. The error message indicates by percentage +// how close the policies and tags are to the upper size limit. For more information, +// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You could receive this error even though you meet other defined session policy +// and session tag limits. For more information, see IAM and STS Entity Character +// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// * ErrCodeIDPRejectedClaimException "IDPRejectedClaim" +// The identity provider (IdP) reported that authentication failed. This might +// be because the claim is invalid. +// +// If this error is returned for the AssumeRoleWithWebIdentity operation, it +// can also mean that the claim has expired or has been explicitly revoked. +// +// * ErrCodeInvalidIdentityTokenException "InvalidIdentityToken" +// The web identity token that was passed could not be validated by AWS. Get +// a new identity token from the identity provider and then retry the request. +// +// * ErrCodeExpiredTokenException "ExpiredTokenException" +// The web identity token that was passed is expired or is not valid. Get a +// new identity token from the identity provider and then retry the request. +// +// * ErrCodeRegionDisabledException "RegionDisabledException" +// STS is not activated in the requested region for the account that is being +// asked to generate credentials. The account administrator must use the IAM +// console to activate STS in that region. For more information, see Activating +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML +func (c *STS) AssumeRoleWithSAML(input *AssumeRoleWithSAMLInput) (*AssumeRoleWithSAMLOutput, error) { + req, out := c.AssumeRoleWithSAMLRequest(input) + return out, req.Send() +} + +// AssumeRoleWithSAMLWithContext is the same as AssumeRoleWithSAML with the addition of +// the ability to pass a context and additional request options. +// +// See AssumeRoleWithSAML for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) AssumeRoleWithSAMLWithContext(ctx aws.Context, input *AssumeRoleWithSAMLInput, opts ...request.Option) (*AssumeRoleWithSAMLOutput, error) { + req, out := c.AssumeRoleWithSAMLRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAssumeRoleWithWebIdentity = "AssumeRoleWithWebIdentity" + +// AssumeRoleWithWebIdentityRequest generates a "aws/request.Request" representing the +// client's request for the AssumeRoleWithWebIdentity operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AssumeRoleWithWebIdentity for more information on using the AssumeRoleWithWebIdentity +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AssumeRoleWithWebIdentityRequest method. +// req, resp := client.AssumeRoleWithWebIdentityRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity +func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityInput) (req *request.Request, output *AssumeRoleWithWebIdentityOutput) { + op := &request.Operation{ + Name: opAssumeRoleWithWebIdentity, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AssumeRoleWithWebIdentityInput{} + } + + output = &AssumeRoleWithWebIdentityOutput{} + req = c.newRequest(op, input, output) + req.Config.Credentials = credentials.AnonymousCredentials + return +} + +// AssumeRoleWithWebIdentity API operation for AWS Security Token Service. +// +// Returns a set of temporary security credentials for users who have been authenticated +// in a mobile or web application with a web identity provider. Example providers +// include Amazon Cognito, Login with Amazon, Facebook, Google, or any OpenID +// Connect-compatible identity provider. +// +// For mobile applications, we recommend that you use Amazon Cognito. You can +// use Amazon Cognito with the AWS SDK for iOS Developer Guide (http://aws.amazon.com/sdkforios/) +// and the AWS SDK for Android Developer Guide (http://aws.amazon.com/sdkforandroid/) +// to uniquely identify a user. You can also supply the user with a consistent +// identity throughout the lifetime of an application. +// +// To learn more about Amazon Cognito, see Amazon Cognito Overview (https://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html#d0e840) +// in AWS SDK for Android Developer Guide and Amazon Cognito Overview (https://docs.aws.amazon.com/mobile/sdkforios/developerguide/cognito-auth.html#d0e664) +// in the AWS SDK for iOS Developer Guide. +// +// Calling AssumeRoleWithWebIdentity does not require the use of AWS security +// credentials. Therefore, you can distribute an application (for example, on +// mobile devices) that requests temporary security credentials without including +// long-term AWS credentials in the application. You also don't need to deploy +// server-based proxy services that use long-term AWS credentials. Instead, +// the identity of the caller is validated by using a token from the web identity +// provider. For a comparison of AssumeRoleWithWebIdentity with the other API +// operations that produce temporary credentials, see Requesting Temporary Security +// Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// in the IAM User Guide. +// +// The temporary security credentials returned by this API consist of an access +// key ID, a secret access key, and a security token. Applications can use these +// temporary security credentials to sign calls to AWS service API operations. +// +// Session Duration +// +// By default, the temporary security credentials created by AssumeRoleWithWebIdentity +// last for one hour. However, you can use the optional DurationSeconds parameter +// to specify the duration of your session. You can provide a value from 900 +// seconds (15 minutes) up to the maximum session duration setting for the role. +// This setting can have a value from 1 hour to 12 hours. To learn how to view +// the maximum value for your role, see View the Maximum Session Duration Setting +// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) +// in the IAM User Guide. The maximum session duration limit applies when you +// use the AssumeRole* API operations or the assume-role* CLI commands. However +// the limit does not apply when you use those operations to create a console +// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) +// in the IAM User Guide. +// +// Permissions +// +// The temporary security credentials created by AssumeRoleWithWebIdentity can +// be used to make API calls to any AWS service with the following exception: +// you cannot call the STS GetFederationToken or GetSessionToken API operations. +// +// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// to this operation. You can pass a single JSON policy document to use as an +// inline session policy. You can also specify up to 10 managed policies to +// use as managed session policies. The plain text that you use for both inline +// and managed session policies can't exceed 2,048 characters. Passing policies +// to this operation returns new temporary credentials. The resulting session's +// permissions are the intersection of the role's identity-based policy and +// the session policies. You can use the role's temporary credentials in subsequent +// AWS API calls to access resources in the account that owns the role. You +// cannot use session policies to grant more permissions than those allowed +// by the identity-based policy of the role that is being assumed. For more +// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// in the IAM User Guide. +// +// Tags +// +// (Optional) You can configure your IdP to pass attributes into your web identity +// token as session tags. Each session tag consists of a key name and an associated +// value. For more information about session tags, see Passing Session Tags +// in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You can pass up to 50 session tags. The plain text session tag keys can’t +// exceed 128 characters and the values can’t exceed 256 characters. For these +// and additional limits, see IAM and STS Character Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) +// in the IAM User Guide. +// +// An AWS conversion compresses the passed session policies and session tags +// into a packed binary format that has a separate limit. Your request can fail +// for this limit even if your plain text meets the other requirements. The +// PackedPolicySize response element indicates by percentage how close the policies +// and tags for your request are to the upper size limit. +// +// You can pass a session tag with the same key as a tag that is attached to +// the role. When you do, the session tag overrides the role tag with the same +// key. +// +// An administrator must grant you the permissions necessary to pass session +// tags. The administrator can also create granular permissions to allow you +// to pass only specific session tags. For more information, see Tutorial: Using +// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) +// in the IAM User Guide. +// +// You can set the session tags as transitive. Transitive tags persist during +// role chaining. For more information, see Chaining Roles with Session Tags +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) +// in the IAM User Guide. +// +// Identities +// +// Before your application can call AssumeRoleWithWebIdentity, you must have +// an identity token from a supported identity provider and create a role that +// the application can assume. The role that your application assumes must trust +// the identity provider that is associated with the identity token. In other +// words, the identity provider must be specified in the role's trust policy. +// +// Calling AssumeRoleWithWebIdentity can result in an entry in your AWS CloudTrail +// logs. The entry includes the Subject (http://openid.net/specs/openid-connect-core-1_0.html#Claims) +// of the provided Web Identity Token. We recommend that you avoid using any +// personally identifiable information (PII) in this field. For example, you +// could instead use a GUID or a pairwise identifier, as suggested in the OIDC +// specification (http://openid.net/specs/openid-connect-core-1_0.html#SubjectIDTypes). +// +// For more information about how to use web identity federation and the AssumeRoleWithWebIdentity +// API, see the following resources: +// +// * Using Web Identity Federation API Operations for Mobile Apps (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html) +// and Federation Through a Web-based Identity Provider (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity). +// +// * Web Identity Federation Playground (https://web-identity-federation-playground.s3.amazonaws.com/index.html). +// Walk through the process of authenticating through Login with Amazon, +// Facebook, or Google, getting temporary security credentials, and then +// using those credentials to make a request to AWS. +// +// * AWS SDK for iOS Developer Guide (http://aws.amazon.com/sdkforios/) and +// AWS SDK for Android Developer Guide (http://aws.amazon.com/sdkforandroid/). +// These toolkits contain sample apps that show how to invoke the identity +// providers. The toolkits then show how to use the information from these +// providers to get and use temporary security credentials. +// +// * Web Identity Federation with Mobile Applications (http://aws.amazon.com/articles/web-identity-federation-with-mobile-applications). +// This article discusses web identity federation and shows an example of +// how to use web identity federation to get access to content in Amazon +// S3. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation AssumeRoleWithWebIdentity for usage and error information. +// +// Returned Error Codes: +// * ErrCodeMalformedPolicyDocumentException "MalformedPolicyDocument" +// The request was rejected because the policy document was malformed. The error +// message describes the specific error. +// +// * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" +// The request was rejected because the total packed size of the session policies +// and session tags combined was too large. An AWS conversion compresses the +// session policy document, session policy ARNs, and session tags into a packed +// binary format that has a separate limit. The error message indicates by percentage +// how close the policies and tags are to the upper size limit. For more information, +// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You could receive this error even though you meet other defined session policy +// and session tag limits. For more information, see IAM and STS Entity Character +// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// * ErrCodeIDPRejectedClaimException "IDPRejectedClaim" +// The identity provider (IdP) reported that authentication failed. This might +// be because the claim is invalid. +// +// If this error is returned for the AssumeRoleWithWebIdentity operation, it +// can also mean that the claim has expired or has been explicitly revoked. +// +// * ErrCodeIDPCommunicationErrorException "IDPCommunicationError" +// The request could not be fulfilled because the identity provider (IDP) that +// was asked to verify the incoming identity token could not be reached. This +// is often a transient error caused by network conditions. Retry the request +// a limited number of times so that you don't exceed the request rate. If the +// error persists, the identity provider might be down or not responding. +// +// * ErrCodeInvalidIdentityTokenException "InvalidIdentityToken" +// The web identity token that was passed could not be validated by AWS. Get +// a new identity token from the identity provider and then retry the request. +// +// * ErrCodeExpiredTokenException "ExpiredTokenException" +// The web identity token that was passed is expired or is not valid. Get a +// new identity token from the identity provider and then retry the request. +// +// * ErrCodeRegionDisabledException "RegionDisabledException" +// STS is not activated in the requested region for the account that is being +// asked to generate credentials. The account administrator must use the IAM +// console to activate STS in that region. For more information, see Activating +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity +func (c *STS) AssumeRoleWithWebIdentity(input *AssumeRoleWithWebIdentityInput) (*AssumeRoleWithWebIdentityOutput, error) { + req, out := c.AssumeRoleWithWebIdentityRequest(input) + return out, req.Send() +} + +// AssumeRoleWithWebIdentityWithContext is the same as AssumeRoleWithWebIdentity with the addition of +// the ability to pass a context and additional request options. +// +// See AssumeRoleWithWebIdentity for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) AssumeRoleWithWebIdentityWithContext(ctx aws.Context, input *AssumeRoleWithWebIdentityInput, opts ...request.Option) (*AssumeRoleWithWebIdentityOutput, error) { + req, out := c.AssumeRoleWithWebIdentityRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDecodeAuthorizationMessage = "DecodeAuthorizationMessage" + +// DecodeAuthorizationMessageRequest generates a "aws/request.Request" representing the +// client's request for the DecodeAuthorizationMessage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DecodeAuthorizationMessage for more information on using the DecodeAuthorizationMessage +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DecodeAuthorizationMessageRequest method. +// req, resp := client.DecodeAuthorizationMessageRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage +func (c *STS) DecodeAuthorizationMessageRequest(input *DecodeAuthorizationMessageInput) (req *request.Request, output *DecodeAuthorizationMessageOutput) { + op := &request.Operation{ + Name: opDecodeAuthorizationMessage, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DecodeAuthorizationMessageInput{} + } + + output = &DecodeAuthorizationMessageOutput{} + req = c.newRequest(op, input, output) + return +} + +// DecodeAuthorizationMessage API operation for AWS Security Token Service. +// +// Decodes additional information about the authorization status of a request +// from an encoded message returned in response to an AWS request. +// +// For example, if a user is not authorized to perform an operation that he +// or she has requested, the request returns a Client.UnauthorizedOperation +// response (an HTTP 403 response). Some AWS operations additionally return +// an encoded message that can provide details about this authorization failure. +// +// Only certain AWS operations return an encoded authorization message. The +// documentation for an individual operation indicates whether that operation +// returns an encoded message in addition to returning an HTTP code. +// +// The message is encoded because the details of the authorization status can +// constitute privileged information that the user who requested the operation +// should not see. To decode an authorization status message, a user must be +// granted permissions via an IAM policy to request the DecodeAuthorizationMessage +// (sts:DecodeAuthorizationMessage) action. +// +// The decoded message includes the following type of information: +// +// * Whether the request was denied due to an explicit deny or due to the +// absence of an explicit allow. For more information, see Determining Whether +// a Request is Allowed or Denied (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) +// in the IAM User Guide. +// +// * The principal who made the request. +// +// * The requested action. +// +// * The requested resource. +// +// * The values of condition keys in the context of the user's request. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation DecodeAuthorizationMessage for usage and error information. +// +// Returned Error Codes: +// * ErrCodeInvalidAuthorizationMessageException "InvalidAuthorizationMessageException" +// The error returned if the message passed to DecodeAuthorizationMessage was +// invalid. This can happen if the token contains invalid characters, such as +// linebreaks. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage +func (c *STS) DecodeAuthorizationMessage(input *DecodeAuthorizationMessageInput) (*DecodeAuthorizationMessageOutput, error) { + req, out := c.DecodeAuthorizationMessageRequest(input) + return out, req.Send() +} + +// DecodeAuthorizationMessageWithContext is the same as DecodeAuthorizationMessage with the addition of +// the ability to pass a context and additional request options. +// +// See DecodeAuthorizationMessage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) DecodeAuthorizationMessageWithContext(ctx aws.Context, input *DecodeAuthorizationMessageInput, opts ...request.Option) (*DecodeAuthorizationMessageOutput, error) { + req, out := c.DecodeAuthorizationMessageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetAccessKeyInfo = "GetAccessKeyInfo" + +// GetAccessKeyInfoRequest generates a "aws/request.Request" representing the +// client's request for the GetAccessKeyInfo operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetAccessKeyInfo for more information on using the GetAccessKeyInfo +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetAccessKeyInfoRequest method. +// req, resp := client.GetAccessKeyInfoRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetAccessKeyInfo +func (c *STS) GetAccessKeyInfoRequest(input *GetAccessKeyInfoInput) (req *request.Request, output *GetAccessKeyInfoOutput) { + op := &request.Operation{ + Name: opGetAccessKeyInfo, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetAccessKeyInfoInput{} + } + + output = &GetAccessKeyInfoOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetAccessKeyInfo API operation for AWS Security Token Service. +// +// Returns the account identifier for the specified access key ID. +// +// Access keys consist of two parts: an access key ID (for example, AKIAIOSFODNN7EXAMPLE) +// and a secret access key (for example, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY). +// For more information about access keys, see Managing Access Keys for IAM +// Users (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) +// in the IAM User Guide. +// +// When you pass an access key ID to this operation, it returns the ID of the +// AWS account to which the keys belong. Access key IDs beginning with AKIA +// are long-term credentials for an IAM user or the AWS account root user. Access +// key IDs beginning with ASIA are temporary credentials that are created using +// STS operations. If the account in the response belongs to you, you can sign +// in as the root user and review your root user access keys. Then, you can +// pull a credentials report (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_getting-report.html) +// to learn which IAM user owns the keys. To learn who requested the temporary +// credentials for an ASIA access key, view the STS events in your CloudTrail +// logs (https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html) +// in the IAM User Guide. +// +// This operation does not indicate the state of the access key. The key might +// be active, inactive, or deleted. Active keys might not have permissions to +// perform an operation. Providing a deleted access key might return an error +// that the key doesn't exist. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation GetAccessKeyInfo for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetAccessKeyInfo +func (c *STS) GetAccessKeyInfo(input *GetAccessKeyInfoInput) (*GetAccessKeyInfoOutput, error) { + req, out := c.GetAccessKeyInfoRequest(input) + return out, req.Send() +} + +// GetAccessKeyInfoWithContext is the same as GetAccessKeyInfo with the addition of +// the ability to pass a context and additional request options. +// +// See GetAccessKeyInfo for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) GetAccessKeyInfoWithContext(ctx aws.Context, input *GetAccessKeyInfoInput, opts ...request.Option) (*GetAccessKeyInfoOutput, error) { + req, out := c.GetAccessKeyInfoRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetCallerIdentity = "GetCallerIdentity" + +// GetCallerIdentityRequest generates a "aws/request.Request" representing the +// client's request for the GetCallerIdentity operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetCallerIdentity for more information on using the GetCallerIdentity +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetCallerIdentityRequest method. +// req, resp := client.GetCallerIdentityRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity +func (c *STS) GetCallerIdentityRequest(input *GetCallerIdentityInput) (req *request.Request, output *GetCallerIdentityOutput) { + op := &request.Operation{ + Name: opGetCallerIdentity, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetCallerIdentityInput{} + } + + output = &GetCallerIdentityOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetCallerIdentity API operation for AWS Security Token Service. +// +// Returns details about the IAM user or role whose credentials are used to +// call the operation. +// +// No permissions are required to perform this operation. If an administrator +// adds a policy to your IAM user or role that explicitly denies access to the +// sts:GetCallerIdentity action, you can still perform this operation. Permissions +// are not required because the same information is returned when an IAM user +// or role is denied access. To view an example response, see I Am Not Authorized +// to Perform: iam:DeleteVirtualMFADevice (https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_access-denied-delete-mfa) +// in the IAM User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation GetCallerIdentity for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity +func (c *STS) GetCallerIdentity(input *GetCallerIdentityInput) (*GetCallerIdentityOutput, error) { + req, out := c.GetCallerIdentityRequest(input) + return out, req.Send() +} + +// GetCallerIdentityWithContext is the same as GetCallerIdentity with the addition of +// the ability to pass a context and additional request options. +// +// See GetCallerIdentity for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) GetCallerIdentityWithContext(ctx aws.Context, input *GetCallerIdentityInput, opts ...request.Option) (*GetCallerIdentityOutput, error) { + req, out := c.GetCallerIdentityRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetFederationToken = "GetFederationToken" + +// GetFederationTokenRequest generates a "aws/request.Request" representing the +// client's request for the GetFederationToken operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetFederationToken for more information on using the GetFederationToken +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetFederationTokenRequest method. +// req, resp := client.GetFederationTokenRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken +func (c *STS) GetFederationTokenRequest(input *GetFederationTokenInput) (req *request.Request, output *GetFederationTokenOutput) { + op := &request.Operation{ + Name: opGetFederationToken, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetFederationTokenInput{} + } + + output = &GetFederationTokenOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetFederationToken API operation for AWS Security Token Service. +// +// Returns a set of temporary security credentials (consisting of an access +// key ID, a secret access key, and a security token) for a federated user. +// A typical use is in a proxy application that gets temporary security credentials +// on behalf of distributed applications inside a corporate network. You must +// call the GetFederationToken operation using the long-term security credentials +// of an IAM user. As a result, this call is appropriate in contexts where those +// credentials can be safely stored, usually in a server-based application. +// For a comparison of GetFederationToken with the other API operations that +// produce temporary credentials, see Requesting Temporary Security Credentials +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// in the IAM User Guide. +// +// You can create a mobile-based or browser-based app that can authenticate +// users using a web identity provider like Login with Amazon, Facebook, Google, +// or an OpenID Connect-compatible identity provider. In this case, we recommend +// that you use Amazon Cognito (http://aws.amazon.com/cognito/) or AssumeRoleWithWebIdentity. +// For more information, see Federation Through a Web-based Identity Provider +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity) +// in the IAM User Guide. +// +// You can also call GetFederationToken using the security credentials of an +// AWS account root user, but we do not recommend it. Instead, we recommend +// that you create an IAM user for the purpose of the proxy application. Then +// attach a policy to the IAM user that limits federated users to only the actions +// and resources that they need to access. For more information, see IAM Best +// Practices (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) +// in the IAM User Guide. +// +// Session duration +// +// The temporary credentials are valid for the specified duration, from 900 +// seconds (15 minutes) up to a maximum of 129,600 seconds (36 hours). The default +// session duration is 43,200 seconds (12 hours). Temporary credentials that +// are obtained by using AWS account root user credentials have a maximum duration +// of 3,600 seconds (1 hour). +// +// Permissions +// +// You can use the temporary credentials created by GetFederationToken in any +// AWS service except the following: +// +// * You cannot call any IAM operations using the AWS CLI or the AWS API. +// +// * You cannot call any STS operations except GetCallerIdentity. +// +// You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// to this operation. You can pass a single JSON policy document to use as an +// inline session policy. You can also specify up to 10 managed policies to +// use as managed session policies. The plain text that you use for both inline +// and managed session policies can't exceed 2,048 characters. +// +// Though the session policy parameters are optional, if you do not pass a policy, +// then the resulting federated user session has no permissions. When you pass +// session policies, the session permissions are the intersection of the IAM +// user policies and the session policies that you pass. This gives you a way +// to further restrict the permissions for a federated user. You cannot use +// session policies to grant more permissions than those that are defined in +// the permissions policy of the IAM user. For more information, see Session +// Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// in the IAM User Guide. For information about using GetFederationToken to +// create temporary security credentials, see GetFederationToken—Federation +// Through a Custom Identity Broker (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getfederationtoken). +// +// You can use the credentials to access a resource that has a resource-based +// policy. If that policy specifically references the federated user session +// in the Principal element of the policy, the session has the permissions allowed +// by the policy. These permissions are granted in addition to the permissions +// granted by the session policies. +// +// Tags +// +// (Optional) You can pass tag key-value pairs to your session. These are called +// session tags. For more information about session tags, see Passing Session +// Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// An administrator must grant you the permissions necessary to pass session +// tags. The administrator can also create granular permissions to allow you +// to pass only specific session tags. For more information, see Tutorial: Using +// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) +// in the IAM User Guide. +// +// Tag key–value pairs are not case sensitive, but case is preserved. This +// means that you cannot have separate Department and department tag keys. Assume +// that the user that you are federating has the Department=Marketing tag and +// you pass the department=engineering session tag. Department and department +// are not saved as separate tags, and the session tag passed in the request +// takes precedence over the user tag. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation GetFederationToken for usage and error information. +// +// Returned Error Codes: +// * ErrCodeMalformedPolicyDocumentException "MalformedPolicyDocument" +// The request was rejected because the policy document was malformed. The error +// message describes the specific error. +// +// * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" +// The request was rejected because the total packed size of the session policies +// and session tags combined was too large. An AWS conversion compresses the +// session policy document, session policy ARNs, and session tags into a packed +// binary format that has a separate limit. The error message indicates by percentage +// how close the policies and tags are to the upper size limit. For more information, +// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You could receive this error even though you meet other defined session policy +// and session tag limits. For more information, see IAM and STS Entity Character +// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// * ErrCodeRegionDisabledException "RegionDisabledException" +// STS is not activated in the requested region for the account that is being +// asked to generate credentials. The account administrator must use the IAM +// console to activate STS in that region. For more information, see Activating +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken +func (c *STS) GetFederationToken(input *GetFederationTokenInput) (*GetFederationTokenOutput, error) { + req, out := c.GetFederationTokenRequest(input) + return out, req.Send() +} + +// GetFederationTokenWithContext is the same as GetFederationToken with the addition of +// the ability to pass a context and additional request options. +// +// See GetFederationToken for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) GetFederationTokenWithContext(ctx aws.Context, input *GetFederationTokenInput, opts ...request.Option) (*GetFederationTokenOutput, error) { + req, out := c.GetFederationTokenRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetSessionToken = "GetSessionToken" + +// GetSessionTokenRequest generates a "aws/request.Request" representing the +// client's request for the GetSessionToken operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetSessionToken for more information on using the GetSessionToken +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetSessionTokenRequest method. +// req, resp := client.GetSessionTokenRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken +func (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *request.Request, output *GetSessionTokenOutput) { + op := &request.Operation{ + Name: opGetSessionToken, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetSessionTokenInput{} + } + + output = &GetSessionTokenOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetSessionToken API operation for AWS Security Token Service. +// +// Returns a set of temporary credentials for an AWS account or IAM user. The +// credentials consist of an access key ID, a secret access key, and a security +// token. Typically, you use GetSessionToken if you want to use MFA to protect +// programmatic calls to specific AWS API operations like Amazon EC2 StopInstances. +// MFA-enabled IAM users would need to call GetSessionToken and submit an MFA +// code that is associated with their MFA device. Using the temporary security +// credentials that are returned from the call, IAM users can then make programmatic +// calls to API operations that require MFA authentication. If you do not supply +// a correct MFA code, then the API returns an access denied error. For a comparison +// of GetSessionToken with the other API operations that produce temporary credentials, +// see Requesting Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// in the IAM User Guide. +// +// Session Duration +// +// The GetSessionToken operation must be called by using the long-term AWS security +// credentials of the AWS account root user or an IAM user. Credentials that +// are created by IAM users are valid for the duration that you specify. This +// duration can range from 900 seconds (15 minutes) up to a maximum of 129,600 +// seconds (36 hours), with a default of 43,200 seconds (12 hours). Credentials +// based on account credentials can range from 900 seconds (15 minutes) up to +// 3,600 seconds (1 hour), with a default of 1 hour. +// +// Permissions +// +// The temporary security credentials created by GetSessionToken can be used +// to make API calls to any AWS service with the following exceptions: +// +// * You cannot call any IAM API operations unless MFA authentication information +// is included in the request. +// +// * You cannot call any STS API except AssumeRole or GetCallerIdentity. +// +// We recommend that you do not call GetSessionToken with AWS account root user +// credentials. Instead, follow our best practices (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#create-iam-users) +// by creating one or more IAM users, giving them the necessary permissions, +// and using IAM users for everyday interaction with AWS. +// +// The credentials that are returned by GetSessionToken are based on permissions +// associated with the user whose credentials were used to call the operation. +// If GetSessionToken is called using AWS account root user credentials, the +// temporary credentials have root user permissions. Similarly, if GetSessionToken +// is called using the credentials of an IAM user, the temporary credentials +// have the same permissions as the IAM user. +// +// For more information about using GetSessionToken to create temporary credentials, +// go to Temporary Credentials for Users in Untrusted Environments (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken) +// in the IAM User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation GetSessionToken for usage and error information. +// +// Returned Error Codes: +// * ErrCodeRegionDisabledException "RegionDisabledException" +// STS is not activated in the requested region for the account that is being +// asked to generate credentials. The account administrator must use the IAM +// console to activate STS in that region. For more information, see Activating +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken +func (c *STS) GetSessionToken(input *GetSessionTokenInput) (*GetSessionTokenOutput, error) { + req, out := c.GetSessionTokenRequest(input) + return out, req.Send() +} + +// GetSessionTokenWithContext is the same as GetSessionToken with the addition of +// the ability to pass a context and additional request options. +// +// See GetSessionToken for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) GetSessionTokenWithContext(ctx aws.Context, input *GetSessionTokenInput, opts ...request.Option) (*GetSessionTokenOutput, error) { + req, out := c.GetSessionTokenRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +type AssumeRoleInput struct { + _ struct{} `type:"structure"` + + // The duration, in seconds, of the role session. The value can range from 900 + // seconds (15 minutes) up to the maximum session duration setting for the role. + // This setting can have a value from 1 hour to 12 hours. If you specify a value + // higher than this setting, the operation fails. For example, if you specify + // a session duration of 12 hours, but your administrator set the maximum session + // duration to 6 hours, your operation fails. To learn how to view the maximum + // value for your role, see View the Maximum Session Duration Setting for a + // Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) + // in the IAM User Guide. + // + // By default, the value is set to 3600 seconds. + // + // The DurationSeconds parameter is separate from the duration of a console + // session that you might request using the returned credentials. The request + // to the federation endpoint for a console sign-in token takes a SessionDuration + // parameter that specifies the maximum length of the console session. For more + // information, see Creating a URL that Enables Federated Users to Access the + // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) + // in the IAM User Guide. + DurationSeconds *int64 `min:"900" type:"integer"` + + // A unique identifier that might be required when you assume a role in another + // account. If the administrator of the account to which the role belongs provided + // you with an external ID, then provide that value in the ExternalId parameter. + // This value can be any string, such as a passphrase or account number. A cross-account + // role is usually set up to trust everyone in an account. Therefore, the administrator + // of the trusting account might send an external ID to the administrator of + // the trusted account. That way, only someone with the ID can assume the role, + // rather than everyone in the account. For more information about the external + // ID, see How to Use an External ID When Granting Access to Your AWS Resources + // to a Third Party (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) + // in the IAM User Guide. + // + // The regex used to validate this parameter is a string of characters consisting + // of upper- and lower-case alphanumeric characters with no spaces. You can + // also include underscores or any of the following characters: =,.@:/- + ExternalId *string `min:"2" type:"string"` + + // An IAM policy in JSON format that you want to use as an inline session policy. + // + // This parameter is optional. Passing policies to this operation returns new + // temporary credentials. The resulting session's permissions are the intersection + // of the role's identity-based policy and the session policies. You can use + // the role's temporary credentials in subsequent AWS API calls to access resources + // in the account that owns the role. You cannot use session policies to grant + // more permissions than those allowed by the identity-based policy of the role + // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + // + // The plain text that you use for both inline and managed session policies + // can't exceed 2,048 characters. The JSON policy characters can be any ASCII + // character from the space character to the end of the valid character list + // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), + // and carriage return (\u000D) characters. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + Policy *string `min:"1" type:"string"` + + // The Amazon Resource Names (ARNs) of the IAM managed policies that you want + // to use as managed session policies. The policies must exist in the same account + // as the role. + // + // This parameter is optional. You can provide up to 10 managed policy ARNs. + // However, the plain text that you use for both inline and managed session + // policies can't exceed 2,048 characters. For more information about ARNs, + // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // Passing policies to this operation returns new temporary credentials. The + // resulting session's permissions are the intersection of the role's identity-based + // policy and the session policies. You can use the role's temporary credentials + // in subsequent AWS API calls to access resources in the account that owns + // the role. You cannot use session policies to grant more permissions than + // those allowed by the identity-based policy of the role that is being assumed. + // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + PolicyArns []*PolicyDescriptorType `type:"list"` + + // The Amazon Resource Name (ARN) of the role to assume. + // + // RoleArn is a required field + RoleArn *string `min:"20" type:"string" required:"true"` + + // An identifier for the assumed role session. + // + // Use the role session name to uniquely identify a session when the same role + // is assumed by different principals or for different reasons. In cross-account + // scenarios, the role session name is visible to, and can be logged by the + // account that owns the role. The role session name is also used in the ARN + // of the assumed role principal. This means that subsequent cross-account API + // requests that use the temporary security credentials will expose the role + // session name to the external account in their AWS CloudTrail logs. + // + // The regex used to validate this parameter is a string of characters consisting + // of upper- and lower-case alphanumeric characters with no spaces. You can + // also include underscores or any of the following characters: =,.@- + // + // RoleSessionName is a required field + RoleSessionName *string `min:"2" type:"string" required:"true"` + + // The identification number of the MFA device that is associated with the user + // who is making the AssumeRole call. Specify this value if the trust policy + // of the role being assumed includes a condition that requires MFA authentication. + // The value is either the serial number for a hardware device (such as GAHT12345678) + // or an Amazon Resource Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user). + // + // The regex used to validate this parameter is a string of characters consisting + // of upper- and lower-case alphanumeric characters with no spaces. You can + // also include underscores or any of the following characters: =,.@- + SerialNumber *string `min:"9" type:"string"` + + // A list of session tags that you want to pass. Each session tag consists of + // a key name and an associated value. For more information about session tags, + // see Tagging AWS STS Sessions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) + // in the IAM User Guide. + // + // This parameter is optional. You can pass up to 50 session tags. The plain + // text session tag keys can’t exceed 128 characters, and the values can’t + // exceed 256 characters. For these and additional limits, see IAM and STS Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) + // in the IAM User Guide. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // You can pass a session tag with the same key as a tag that is already attached + // to the role. When you do, session tags override a role tag with the same + // key. + // + // Tag key–value pairs are not case sensitive, but case is preserved. This + // means that you cannot have separate Department and department tag keys. Assume + // that the role has the Department=Marketing tag and you pass the department=engineering + // session tag. Department and department are not saved as separate tags, and + // the session tag passed in the request takes precedence over the role tag. + // + // Additionally, if you used temporary credentials to perform this operation, + // the new session inherits any transitive session tags from the calling session. + // If you pass a session tag with the same key as an inherited tag, the operation + // fails. To view the inherited tags for a session, see the AWS CloudTrail logs. + // For more information, see Viewing Session Tags in CloudTrail (https://docs.aws.amazon.com/IAM/latest/UserGuide/session-tags.html#id_session-tags_ctlogs) + // in the IAM User Guide. + Tags []*Tag `type:"list"` + + // The value provided by the MFA device, if the trust policy of the role being + // assumed requires MFA (that is, if the policy includes a condition that tests + // for MFA). If the role being assumed requires MFA and if the TokenCode value + // is missing or expired, the AssumeRole call returns an "access denied" error. + // + // The format for this parameter, as described by its regex pattern, is a sequence + // of six numeric digits. + TokenCode *string `min:"6" type:"string"` + + // A list of keys for session tags that you want to set as transitive. If you + // set a tag key as transitive, the corresponding key and value passes to subsequent + // sessions in a role chain. For more information, see Chaining Roles with Session + // Tags (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) + // in the IAM User Guide. + // + // This parameter is optional. When you set session tags as transitive, the + // session policy and session tags packed binary limit is not affected. + // + // If you choose not to specify a transitive tag key, then no tags are passed + // from this session to any subsequent sessions. + TransitiveTagKeys []*string `type:"list"` +} + +// String returns the string representation +func (s AssumeRoleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssumeRoleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssumeRoleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssumeRoleInput"} + if s.DurationSeconds != nil && *s.DurationSeconds < 900 { + invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) + } + if s.ExternalId != nil && len(*s.ExternalId) < 2 { + invalidParams.Add(request.NewErrParamMinLen("ExternalId", 2)) + } + if s.Policy != nil && len(*s.Policy) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) + } + if s.RoleArn == nil { + invalidParams.Add(request.NewErrParamRequired("RoleArn")) + } + if s.RoleArn != nil && len(*s.RoleArn) < 20 { + invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20)) + } + if s.RoleSessionName == nil { + invalidParams.Add(request.NewErrParamRequired("RoleSessionName")) + } + if s.RoleSessionName != nil && len(*s.RoleSessionName) < 2 { + invalidParams.Add(request.NewErrParamMinLen("RoleSessionName", 2)) + } + if s.SerialNumber != nil && len(*s.SerialNumber) < 9 { + invalidParams.Add(request.NewErrParamMinLen("SerialNumber", 9)) + } + if s.TokenCode != nil && len(*s.TokenCode) < 6 { + invalidParams.Add(request.NewErrParamMinLen("TokenCode", 6)) + } + if s.PolicyArns != nil { + for i, v := range s.PolicyArns { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) + } + } + } + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDurationSeconds sets the DurationSeconds field's value. +func (s *AssumeRoleInput) SetDurationSeconds(v int64) *AssumeRoleInput { + s.DurationSeconds = &v + return s +} + +// SetExternalId sets the ExternalId field's value. +func (s *AssumeRoleInput) SetExternalId(v string) *AssumeRoleInput { + s.ExternalId = &v + return s +} + +// SetPolicy sets the Policy field's value. +func (s *AssumeRoleInput) SetPolicy(v string) *AssumeRoleInput { + s.Policy = &v + return s +} + +// SetPolicyArns sets the PolicyArns field's value. +func (s *AssumeRoleInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleInput { + s.PolicyArns = v + return s +} + +// SetRoleArn sets the RoleArn field's value. +func (s *AssumeRoleInput) SetRoleArn(v string) *AssumeRoleInput { + s.RoleArn = &v + return s +} + +// SetRoleSessionName sets the RoleSessionName field's value. +func (s *AssumeRoleInput) SetRoleSessionName(v string) *AssumeRoleInput { + s.RoleSessionName = &v + return s +} + +// SetSerialNumber sets the SerialNumber field's value. +func (s *AssumeRoleInput) SetSerialNumber(v string) *AssumeRoleInput { + s.SerialNumber = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *AssumeRoleInput) SetTags(v []*Tag) *AssumeRoleInput { + s.Tags = v + return s +} + +// SetTokenCode sets the TokenCode field's value. +func (s *AssumeRoleInput) SetTokenCode(v string) *AssumeRoleInput { + s.TokenCode = &v + return s +} + +// SetTransitiveTagKeys sets the TransitiveTagKeys field's value. +func (s *AssumeRoleInput) SetTransitiveTagKeys(v []*string) *AssumeRoleInput { + s.TransitiveTagKeys = v + return s +} + +// Contains the response to a successful AssumeRole request, including temporary +// AWS credentials that can be used to make AWS requests. +type AssumeRoleOutput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) and the assumed role ID, which are identifiers + // that you can use to refer to the resulting temporary security credentials. + // For example, you can reference these credentials as a principal in a resource-based + // policy by using the ARN or assumed role ID. The ARN and ID include the RoleSessionName + // that you specified when you called AssumeRole. + AssumedRoleUser *AssumedRoleUser `type:"structure"` + + // The temporary security credentials, which include an access key ID, a secret + // access key, and a security (or session) token. + // + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. + Credentials *Credentials `type:"structure"` + + // A percentage value that indicates the packed size of the session policies + // and session tags combined passed in the request. The request fails if the + // packed size is greater than 100 percent, which means the policies and tags + // exceeded the allowed space. + PackedPolicySize *int64 `type:"integer"` +} + +// String returns the string representation +func (s AssumeRoleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssumeRoleOutput) GoString() string { + return s.String() +} + +// SetAssumedRoleUser sets the AssumedRoleUser field's value. +func (s *AssumeRoleOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleOutput { + s.AssumedRoleUser = v + return s +} + +// SetCredentials sets the Credentials field's value. +func (s *AssumeRoleOutput) SetCredentials(v *Credentials) *AssumeRoleOutput { + s.Credentials = v + return s +} + +// SetPackedPolicySize sets the PackedPolicySize field's value. +func (s *AssumeRoleOutput) SetPackedPolicySize(v int64) *AssumeRoleOutput { + s.PackedPolicySize = &v + return s +} + +type AssumeRoleWithSAMLInput struct { + _ struct{} `type:"structure"` + + // The duration, in seconds, of the role session. Your role session lasts for + // the duration that you specify for the DurationSeconds parameter, or until + // the time specified in the SAML authentication response's SessionNotOnOrAfter + // value, whichever is shorter. You can provide a DurationSeconds value from + // 900 seconds (15 minutes) up to the maximum session duration setting for the + // role. This setting can have a value from 1 hour to 12 hours. If you specify + // a value higher than this setting, the operation fails. For example, if you + // specify a session duration of 12 hours, but your administrator set the maximum + // session duration to 6 hours, your operation fails. To learn how to view the + // maximum value for your role, see View the Maximum Session Duration Setting + // for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) + // in the IAM User Guide. + // + // By default, the value is set to 3600 seconds. + // + // The DurationSeconds parameter is separate from the duration of a console + // session that you might request using the returned credentials. The request + // to the federation endpoint for a console sign-in token takes a SessionDuration + // parameter that specifies the maximum length of the console session. For more + // information, see Creating a URL that Enables Federated Users to Access the + // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) + // in the IAM User Guide. + DurationSeconds *int64 `min:"900" type:"integer"` + + // An IAM policy in JSON format that you want to use as an inline session policy. + // + // This parameter is optional. Passing policies to this operation returns new + // temporary credentials. The resulting session's permissions are the intersection + // of the role's identity-based policy and the session policies. You can use + // the role's temporary credentials in subsequent AWS API calls to access resources + // in the account that owns the role. You cannot use session policies to grant + // more permissions than those allowed by the identity-based policy of the role + // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + // + // The plain text that you use for both inline and managed session policies + // can't exceed 2,048 characters. The JSON policy characters can be any ASCII + // character from the space character to the end of the valid character list + // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), + // and carriage return (\u000D) characters. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + Policy *string `min:"1" type:"string"` + + // The Amazon Resource Names (ARNs) of the IAM managed policies that you want + // to use as managed session policies. The policies must exist in the same account + // as the role. + // + // This parameter is optional. You can provide up to 10 managed policy ARNs. + // However, the plain text that you use for both inline and managed session + // policies can't exceed 2,048 characters. For more information about ARNs, + // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // Passing policies to this operation returns new temporary credentials. The + // resulting session's permissions are the intersection of the role's identity-based + // policy and the session policies. You can use the role's temporary credentials + // in subsequent AWS API calls to access resources in the account that owns + // the role. You cannot use session policies to grant more permissions than + // those allowed by the identity-based policy of the role that is being assumed. + // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + PolicyArns []*PolicyDescriptorType `type:"list"` + + // The Amazon Resource Name (ARN) of the SAML provider in IAM that describes + // the IdP. + // + // PrincipalArn is a required field + PrincipalArn *string `min:"20" type:"string" required:"true"` + + // The Amazon Resource Name (ARN) of the role that the caller is assuming. + // + // RoleArn is a required field + RoleArn *string `min:"20" type:"string" required:"true"` + + // The base-64 encoded SAML authentication response provided by the IdP. + // + // For more information, see Configuring a Relying Party and Adding Claims (https://docs.aws.amazon.com/IAM/latest/UserGuide/create-role-saml-IdP-tasks.html) + // in the IAM User Guide. + // + // SAMLAssertion is a required field + SAMLAssertion *string `min:"4" type:"string" required:"true"` +} + +// String returns the string representation +func (s AssumeRoleWithSAMLInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssumeRoleWithSAMLInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssumeRoleWithSAMLInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssumeRoleWithSAMLInput"} + if s.DurationSeconds != nil && *s.DurationSeconds < 900 { + invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) + } + if s.Policy != nil && len(*s.Policy) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) + } + if s.PrincipalArn == nil { + invalidParams.Add(request.NewErrParamRequired("PrincipalArn")) + } + if s.PrincipalArn != nil && len(*s.PrincipalArn) < 20 { + invalidParams.Add(request.NewErrParamMinLen("PrincipalArn", 20)) + } + if s.RoleArn == nil { + invalidParams.Add(request.NewErrParamRequired("RoleArn")) + } + if s.RoleArn != nil && len(*s.RoleArn) < 20 { + invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20)) + } + if s.SAMLAssertion == nil { + invalidParams.Add(request.NewErrParamRequired("SAMLAssertion")) + } + if s.SAMLAssertion != nil && len(*s.SAMLAssertion) < 4 { + invalidParams.Add(request.NewErrParamMinLen("SAMLAssertion", 4)) + } + if s.PolicyArns != nil { + for i, v := range s.PolicyArns { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDurationSeconds sets the DurationSeconds field's value. +func (s *AssumeRoleWithSAMLInput) SetDurationSeconds(v int64) *AssumeRoleWithSAMLInput { + s.DurationSeconds = &v + return s +} + +// SetPolicy sets the Policy field's value. +func (s *AssumeRoleWithSAMLInput) SetPolicy(v string) *AssumeRoleWithSAMLInput { + s.Policy = &v + return s +} + +// SetPolicyArns sets the PolicyArns field's value. +func (s *AssumeRoleWithSAMLInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleWithSAMLInput { + s.PolicyArns = v + return s +} + +// SetPrincipalArn sets the PrincipalArn field's value. +func (s *AssumeRoleWithSAMLInput) SetPrincipalArn(v string) *AssumeRoleWithSAMLInput { + s.PrincipalArn = &v + return s +} + +// SetRoleArn sets the RoleArn field's value. +func (s *AssumeRoleWithSAMLInput) SetRoleArn(v string) *AssumeRoleWithSAMLInput { + s.RoleArn = &v + return s +} + +// SetSAMLAssertion sets the SAMLAssertion field's value. +func (s *AssumeRoleWithSAMLInput) SetSAMLAssertion(v string) *AssumeRoleWithSAMLInput { + s.SAMLAssertion = &v + return s +} + +// Contains the response to a successful AssumeRoleWithSAML request, including +// temporary AWS credentials that can be used to make AWS requests. +type AssumeRoleWithSAMLOutput struct { + _ struct{} `type:"structure"` + + // The identifiers for the temporary security credentials that the operation + // returns. + AssumedRoleUser *AssumedRoleUser `type:"structure"` + + // The value of the Recipient attribute of the SubjectConfirmationData element + // of the SAML assertion. + Audience *string `type:"string"` + + // The temporary security credentials, which include an access key ID, a secret + // access key, and a security (or session) token. + // + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. + Credentials *Credentials `type:"structure"` + + // The value of the Issuer element of the SAML assertion. + Issuer *string `type:"string"` + + // A hash value based on the concatenation of the Issuer response value, the + // AWS account ID, and the friendly name (the last part of the ARN) of the SAML + // provider in IAM. The combination of NameQualifier and Subject can be used + // to uniquely identify a federated user. + // + // The following pseudocode shows how the hash value is calculated: + // + // BASE64 ( SHA1 ( "https://example.com/saml" + "123456789012" + "/MySAMLIdP" + // ) ) + NameQualifier *string `type:"string"` + + // A percentage value that indicates the packed size of the session policies + // and session tags combined passed in the request. The request fails if the + // packed size is greater than 100 percent, which means the policies and tags + // exceeded the allowed space. + PackedPolicySize *int64 `type:"integer"` + + // The value of the NameID element in the Subject element of the SAML assertion. + Subject *string `type:"string"` + + // The format of the name ID, as defined by the Format attribute in the NameID + // element of the SAML assertion. Typical examples of the format are transient + // or persistent. + // + // If the format includes the prefix urn:oasis:names:tc:SAML:2.0:nameid-format, + // that prefix is removed. For example, urn:oasis:names:tc:SAML:2.0:nameid-format:transient + // is returned as transient. If the format includes any other prefix, the format + // is returned with no modifications. + SubjectType *string `type:"string"` +} + +// String returns the string representation +func (s AssumeRoleWithSAMLOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssumeRoleWithSAMLOutput) GoString() string { + return s.String() +} + +// SetAssumedRoleUser sets the AssumedRoleUser field's value. +func (s *AssumeRoleWithSAMLOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleWithSAMLOutput { + s.AssumedRoleUser = v + return s +} + +// SetAudience sets the Audience field's value. +func (s *AssumeRoleWithSAMLOutput) SetAudience(v string) *AssumeRoleWithSAMLOutput { + s.Audience = &v + return s +} + +// SetCredentials sets the Credentials field's value. +func (s *AssumeRoleWithSAMLOutput) SetCredentials(v *Credentials) *AssumeRoleWithSAMLOutput { + s.Credentials = v + return s +} + +// SetIssuer sets the Issuer field's value. +func (s *AssumeRoleWithSAMLOutput) SetIssuer(v string) *AssumeRoleWithSAMLOutput { + s.Issuer = &v + return s +} + +// SetNameQualifier sets the NameQualifier field's value. +func (s *AssumeRoleWithSAMLOutput) SetNameQualifier(v string) *AssumeRoleWithSAMLOutput { + s.NameQualifier = &v + return s +} + +// SetPackedPolicySize sets the PackedPolicySize field's value. +func (s *AssumeRoleWithSAMLOutput) SetPackedPolicySize(v int64) *AssumeRoleWithSAMLOutput { + s.PackedPolicySize = &v + return s +} + +// SetSubject sets the Subject field's value. +func (s *AssumeRoleWithSAMLOutput) SetSubject(v string) *AssumeRoleWithSAMLOutput { + s.Subject = &v + return s +} + +// SetSubjectType sets the SubjectType field's value. +func (s *AssumeRoleWithSAMLOutput) SetSubjectType(v string) *AssumeRoleWithSAMLOutput { + s.SubjectType = &v + return s +} + +type AssumeRoleWithWebIdentityInput struct { + _ struct{} `type:"structure"` + + // The duration, in seconds, of the role session. The value can range from 900 + // seconds (15 minutes) up to the maximum session duration setting for the role. + // This setting can have a value from 1 hour to 12 hours. If you specify a value + // higher than this setting, the operation fails. For example, if you specify + // a session duration of 12 hours, but your administrator set the maximum session + // duration to 6 hours, your operation fails. To learn how to view the maximum + // value for your role, see View the Maximum Session Duration Setting for a + // Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) + // in the IAM User Guide. + // + // By default, the value is set to 3600 seconds. + // + // The DurationSeconds parameter is separate from the duration of a console + // session that you might request using the returned credentials. The request + // to the federation endpoint for a console sign-in token takes a SessionDuration + // parameter that specifies the maximum length of the console session. For more + // information, see Creating a URL that Enables Federated Users to Access the + // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) + // in the IAM User Guide. + DurationSeconds *int64 `min:"900" type:"integer"` + + // An IAM policy in JSON format that you want to use as an inline session policy. + // + // This parameter is optional. Passing policies to this operation returns new + // temporary credentials. The resulting session's permissions are the intersection + // of the role's identity-based policy and the session policies. You can use + // the role's temporary credentials in subsequent AWS API calls to access resources + // in the account that owns the role. You cannot use session policies to grant + // more permissions than those allowed by the identity-based policy of the role + // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + // + // The plain text that you use for both inline and managed session policies + // can't exceed 2,048 characters. The JSON policy characters can be any ASCII + // character from the space character to the end of the valid character list + // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), + // and carriage return (\u000D) characters. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + Policy *string `min:"1" type:"string"` + + // The Amazon Resource Names (ARNs) of the IAM managed policies that you want + // to use as managed session policies. The policies must exist in the same account + // as the role. + // + // This parameter is optional. You can provide up to 10 managed policy ARNs. + // However, the plain text that you use for both inline and managed session + // policies can't exceed 2,048 characters. For more information about ARNs, + // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // Passing policies to this operation returns new temporary credentials. The + // resulting session's permissions are the intersection of the role's identity-based + // policy and the session policies. You can use the role's temporary credentials + // in subsequent AWS API calls to access resources in the account that owns + // the role. You cannot use session policies to grant more permissions than + // those allowed by the identity-based policy of the role that is being assumed. + // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + PolicyArns []*PolicyDescriptorType `type:"list"` + + // The fully qualified host component of the domain name of the identity provider. + // + // Specify this value only for OAuth 2.0 access tokens. Currently www.amazon.com + // and graph.facebook.com are the only supported identity providers for OAuth + // 2.0 access tokens. Do not include URL schemes and port numbers. + // + // Do not specify this value for OpenID Connect ID tokens. + ProviderId *string `min:"4" type:"string"` + + // The Amazon Resource Name (ARN) of the role that the caller is assuming. + // + // RoleArn is a required field + RoleArn *string `min:"20" type:"string" required:"true"` + + // An identifier for the assumed role session. Typically, you pass the name + // or identifier that is associated with the user who is using your application. + // That way, the temporary security credentials that your application will use + // are associated with that user. This session name is included as part of the + // ARN and assumed role ID in the AssumedRoleUser response element. + // + // The regex used to validate this parameter is a string of characters consisting + // of upper- and lower-case alphanumeric characters with no spaces. You can + // also include underscores or any of the following characters: =,.@- + // + // RoleSessionName is a required field + RoleSessionName *string `min:"2" type:"string" required:"true"` + + // The OAuth 2.0 access token or OpenID Connect ID token that is provided by + // the identity provider. Your application must get this token by authenticating + // the user who is using your application with a web identity provider before + // the application makes an AssumeRoleWithWebIdentity call. + // + // WebIdentityToken is a required field + WebIdentityToken *string `min:"4" type:"string" required:"true"` +} + +// String returns the string representation +func (s AssumeRoleWithWebIdentityInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssumeRoleWithWebIdentityInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssumeRoleWithWebIdentityInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssumeRoleWithWebIdentityInput"} + if s.DurationSeconds != nil && *s.DurationSeconds < 900 { + invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) + } + if s.Policy != nil && len(*s.Policy) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) + } + if s.ProviderId != nil && len(*s.ProviderId) < 4 { + invalidParams.Add(request.NewErrParamMinLen("ProviderId", 4)) + } + if s.RoleArn == nil { + invalidParams.Add(request.NewErrParamRequired("RoleArn")) + } + if s.RoleArn != nil && len(*s.RoleArn) < 20 { + invalidParams.Add(request.NewErrParamMinLen("RoleArn", 20)) + } + if s.RoleSessionName == nil { + invalidParams.Add(request.NewErrParamRequired("RoleSessionName")) + } + if s.RoleSessionName != nil && len(*s.RoleSessionName) < 2 { + invalidParams.Add(request.NewErrParamMinLen("RoleSessionName", 2)) + } + if s.WebIdentityToken == nil { + invalidParams.Add(request.NewErrParamRequired("WebIdentityToken")) + } + if s.WebIdentityToken != nil && len(*s.WebIdentityToken) < 4 { + invalidParams.Add(request.NewErrParamMinLen("WebIdentityToken", 4)) + } + if s.PolicyArns != nil { + for i, v := range s.PolicyArns { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDurationSeconds sets the DurationSeconds field's value. +func (s *AssumeRoleWithWebIdentityInput) SetDurationSeconds(v int64) *AssumeRoleWithWebIdentityInput { + s.DurationSeconds = &v + return s +} + +// SetPolicy sets the Policy field's value. +func (s *AssumeRoleWithWebIdentityInput) SetPolicy(v string) *AssumeRoleWithWebIdentityInput { + s.Policy = &v + return s +} + +// SetPolicyArns sets the PolicyArns field's value. +func (s *AssumeRoleWithWebIdentityInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleWithWebIdentityInput { + s.PolicyArns = v + return s +} + +// SetProviderId sets the ProviderId field's value. +func (s *AssumeRoleWithWebIdentityInput) SetProviderId(v string) *AssumeRoleWithWebIdentityInput { + s.ProviderId = &v + return s +} + +// SetRoleArn sets the RoleArn field's value. +func (s *AssumeRoleWithWebIdentityInput) SetRoleArn(v string) *AssumeRoleWithWebIdentityInput { + s.RoleArn = &v + return s +} + +// SetRoleSessionName sets the RoleSessionName field's value. +func (s *AssumeRoleWithWebIdentityInput) SetRoleSessionName(v string) *AssumeRoleWithWebIdentityInput { + s.RoleSessionName = &v + return s +} + +// SetWebIdentityToken sets the WebIdentityToken field's value. +func (s *AssumeRoleWithWebIdentityInput) SetWebIdentityToken(v string) *AssumeRoleWithWebIdentityInput { + s.WebIdentityToken = &v + return s +} + +// Contains the response to a successful AssumeRoleWithWebIdentity request, +// including temporary AWS credentials that can be used to make AWS requests. +type AssumeRoleWithWebIdentityOutput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) and the assumed role ID, which are identifiers + // that you can use to refer to the resulting temporary security credentials. + // For example, you can reference these credentials as a principal in a resource-based + // policy by using the ARN or assumed role ID. The ARN and ID include the RoleSessionName + // that you specified when you called AssumeRole. + AssumedRoleUser *AssumedRoleUser `type:"structure"` + + // The intended audience (also known as client ID) of the web identity token. + // This is traditionally the client identifier issued to the application that + // requested the web identity token. + Audience *string `type:"string"` + + // The temporary security credentials, which include an access key ID, a secret + // access key, and a security token. + // + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. + Credentials *Credentials `type:"structure"` + + // A percentage value that indicates the packed size of the session policies + // and session tags combined passed in the request. The request fails if the + // packed size is greater than 100 percent, which means the policies and tags + // exceeded the allowed space. + PackedPolicySize *int64 `type:"integer"` + + // The issuing authority of the web identity token presented. For OpenID Connect + // ID tokens, this contains the value of the iss field. For OAuth 2.0 access + // tokens, this contains the value of the ProviderId parameter that was passed + // in the AssumeRoleWithWebIdentity request. + Provider *string `type:"string"` + + // The unique user identifier that is returned by the identity provider. This + // identifier is associated with the WebIdentityToken that was submitted with + // the AssumeRoleWithWebIdentity call. The identifier is typically unique to + // the user and the application that acquired the WebIdentityToken (pairwise + // identifier). For OpenID Connect ID tokens, this field contains the value + // returned by the identity provider as the token's sub (Subject) claim. + SubjectFromWebIdentityToken *string `min:"6" type:"string"` +} + +// String returns the string representation +func (s AssumeRoleWithWebIdentityOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssumeRoleWithWebIdentityOutput) GoString() string { + return s.String() +} + +// SetAssumedRoleUser sets the AssumedRoleUser field's value. +func (s *AssumeRoleWithWebIdentityOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleWithWebIdentityOutput { + s.AssumedRoleUser = v + return s +} + +// SetAudience sets the Audience field's value. +func (s *AssumeRoleWithWebIdentityOutput) SetAudience(v string) *AssumeRoleWithWebIdentityOutput { + s.Audience = &v + return s +} + +// SetCredentials sets the Credentials field's value. +func (s *AssumeRoleWithWebIdentityOutput) SetCredentials(v *Credentials) *AssumeRoleWithWebIdentityOutput { + s.Credentials = v + return s +} + +// SetPackedPolicySize sets the PackedPolicySize field's value. +func (s *AssumeRoleWithWebIdentityOutput) SetPackedPolicySize(v int64) *AssumeRoleWithWebIdentityOutput { + s.PackedPolicySize = &v + return s +} + +// SetProvider sets the Provider field's value. +func (s *AssumeRoleWithWebIdentityOutput) SetProvider(v string) *AssumeRoleWithWebIdentityOutput { + s.Provider = &v + return s +} + +// SetSubjectFromWebIdentityToken sets the SubjectFromWebIdentityToken field's value. +func (s *AssumeRoleWithWebIdentityOutput) SetSubjectFromWebIdentityToken(v string) *AssumeRoleWithWebIdentityOutput { + s.SubjectFromWebIdentityToken = &v + return s +} + +// The identifiers for the temporary security credentials that the operation +// returns. +type AssumedRoleUser struct { + _ struct{} `type:"structure"` + + // The ARN of the temporary security credentials that are returned from the + // AssumeRole action. For more information about ARNs and how to use them in + // policies, see IAM Identifiers (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html) + // in the IAM User Guide. + // + // Arn is a required field + Arn *string `min:"20" type:"string" required:"true"` + + // A unique identifier that contains the role ID and the role session name of + // the role that is being assumed. The role ID is generated by AWS when the + // role is created. + // + // AssumedRoleId is a required field + AssumedRoleId *string `min:"2" type:"string" required:"true"` +} + +// String returns the string representation +func (s AssumedRoleUser) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssumedRoleUser) GoString() string { + return s.String() +} + +// SetArn sets the Arn field's value. +func (s *AssumedRoleUser) SetArn(v string) *AssumedRoleUser { + s.Arn = &v + return s +} + +// SetAssumedRoleId sets the AssumedRoleId field's value. +func (s *AssumedRoleUser) SetAssumedRoleId(v string) *AssumedRoleUser { + s.AssumedRoleId = &v + return s +} + +// AWS credentials for API authentication. +type Credentials struct { + _ struct{} `type:"structure"` + + // The access key ID that identifies the temporary security credentials. + // + // AccessKeyId is a required field + AccessKeyId *string `min:"16" type:"string" required:"true"` + + // The date on which the current credentials expire. + // + // Expiration is a required field + Expiration *time.Time `type:"timestamp" required:"true"` + + // The secret access key that can be used to sign requests. + // + // SecretAccessKey is a required field + SecretAccessKey *string `type:"string" required:"true"` + + // The token that users must pass to the service API to use the temporary credentials. + // + // SessionToken is a required field + SessionToken *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s Credentials) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Credentials) GoString() string { + return s.String() +} + +// SetAccessKeyId sets the AccessKeyId field's value. +func (s *Credentials) SetAccessKeyId(v string) *Credentials { + s.AccessKeyId = &v + return s +} + +// SetExpiration sets the Expiration field's value. +func (s *Credentials) SetExpiration(v time.Time) *Credentials { + s.Expiration = &v + return s +} + +// SetSecretAccessKey sets the SecretAccessKey field's value. +func (s *Credentials) SetSecretAccessKey(v string) *Credentials { + s.SecretAccessKey = &v + return s +} + +// SetSessionToken sets the SessionToken field's value. +func (s *Credentials) SetSessionToken(v string) *Credentials { + s.SessionToken = &v + return s +} + +type DecodeAuthorizationMessageInput struct { + _ struct{} `type:"structure"` + + // The encoded message that was returned with the response. + // + // EncodedMessage is a required field + EncodedMessage *string `min:"1" type:"string" required:"true"` +} + +// String returns the string representation +func (s DecodeAuthorizationMessageInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DecodeAuthorizationMessageInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DecodeAuthorizationMessageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DecodeAuthorizationMessageInput"} + if s.EncodedMessage == nil { + invalidParams.Add(request.NewErrParamRequired("EncodedMessage")) + } + if s.EncodedMessage != nil && len(*s.EncodedMessage) < 1 { + invalidParams.Add(request.NewErrParamMinLen("EncodedMessage", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEncodedMessage sets the EncodedMessage field's value. +func (s *DecodeAuthorizationMessageInput) SetEncodedMessage(v string) *DecodeAuthorizationMessageInput { + s.EncodedMessage = &v + return s +} + +// A document that contains additional information about the authorization status +// of a request from an encoded message that is returned in response to an AWS +// request. +type DecodeAuthorizationMessageOutput struct { + _ struct{} `type:"structure"` + + // An XML document that contains the decoded message. + DecodedMessage *string `type:"string"` +} + +// String returns the string representation +func (s DecodeAuthorizationMessageOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DecodeAuthorizationMessageOutput) GoString() string { + return s.String() +} + +// SetDecodedMessage sets the DecodedMessage field's value. +func (s *DecodeAuthorizationMessageOutput) SetDecodedMessage(v string) *DecodeAuthorizationMessageOutput { + s.DecodedMessage = &v + return s +} + +// Identifiers for the federated user that is associated with the credentials. +type FederatedUser struct { + _ struct{} `type:"structure"` + + // The ARN that specifies the federated user that is associated with the credentials. + // For more information about ARNs and how to use them in policies, see IAM + // Identifiers (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html) + // in the IAM User Guide. + // + // Arn is a required field + Arn *string `min:"20" type:"string" required:"true"` + + // The string that identifies the federated user associated with the credentials, + // similar to the unique ID of an IAM user. + // + // FederatedUserId is a required field + FederatedUserId *string `min:"2" type:"string" required:"true"` +} + +// String returns the string representation +func (s FederatedUser) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s FederatedUser) GoString() string { + return s.String() +} + +// SetArn sets the Arn field's value. +func (s *FederatedUser) SetArn(v string) *FederatedUser { + s.Arn = &v + return s +} + +// SetFederatedUserId sets the FederatedUserId field's value. +func (s *FederatedUser) SetFederatedUserId(v string) *FederatedUser { + s.FederatedUserId = &v + return s +} + +type GetAccessKeyInfoInput struct { + _ struct{} `type:"structure"` + + // The identifier of an access key. + // + // This parameter allows (through its regex pattern) a string of characters + // that can consist of any upper- or lowercase letter or digit. + // + // AccessKeyId is a required field + AccessKeyId *string `min:"16" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetAccessKeyInfoInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetAccessKeyInfoInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetAccessKeyInfoInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetAccessKeyInfoInput"} + if s.AccessKeyId == nil { + invalidParams.Add(request.NewErrParamRequired("AccessKeyId")) + } + if s.AccessKeyId != nil && len(*s.AccessKeyId) < 16 { + invalidParams.Add(request.NewErrParamMinLen("AccessKeyId", 16)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAccessKeyId sets the AccessKeyId field's value. +func (s *GetAccessKeyInfoInput) SetAccessKeyId(v string) *GetAccessKeyInfoInput { + s.AccessKeyId = &v + return s +} + +type GetAccessKeyInfoOutput struct { + _ struct{} `type:"structure"` + + // The number used to identify the AWS account. + Account *string `type:"string"` +} + +// String returns the string representation +func (s GetAccessKeyInfoOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetAccessKeyInfoOutput) GoString() string { + return s.String() +} + +// SetAccount sets the Account field's value. +func (s *GetAccessKeyInfoOutput) SetAccount(v string) *GetAccessKeyInfoOutput { + s.Account = &v + return s +} + +type GetCallerIdentityInput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s GetCallerIdentityInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetCallerIdentityInput) GoString() string { + return s.String() +} + +// Contains the response to a successful GetCallerIdentity request, including +// information about the entity making the request. +type GetCallerIdentityOutput struct { + _ struct{} `type:"structure"` + + // The AWS account ID number of the account that owns or contains the calling + // entity. + Account *string `type:"string"` + + // The AWS ARN associated with the calling entity. + Arn *string `min:"20" type:"string"` + + // The unique identifier of the calling entity. The exact value depends on the + // type of entity that is making the call. The values returned are those listed + // in the aws:userid column in the Principal table (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable) + // found on the Policy Variables reference page in the IAM User Guide. + UserId *string `type:"string"` +} + +// String returns the string representation +func (s GetCallerIdentityOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetCallerIdentityOutput) GoString() string { + return s.String() +} + +// SetAccount sets the Account field's value. +func (s *GetCallerIdentityOutput) SetAccount(v string) *GetCallerIdentityOutput { + s.Account = &v + return s +} + +// SetArn sets the Arn field's value. +func (s *GetCallerIdentityOutput) SetArn(v string) *GetCallerIdentityOutput { + s.Arn = &v + return s +} + +// SetUserId sets the UserId field's value. +func (s *GetCallerIdentityOutput) SetUserId(v string) *GetCallerIdentityOutput { + s.UserId = &v + return s +} + +type GetFederationTokenInput struct { + _ struct{} `type:"structure"` + + // The duration, in seconds, that the session should last. Acceptable durations + // for federation sessions range from 900 seconds (15 minutes) to 129,600 seconds + // (36 hours), with 43,200 seconds (12 hours) as the default. Sessions obtained + // using AWS account root user credentials are restricted to a maximum of 3,600 + // seconds (one hour). If the specified duration is longer than one hour, the + // session obtained by using root user credentials defaults to one hour. + DurationSeconds *int64 `min:"900" type:"integer"` + + // The name of the federated user. The name is used as an identifier for the + // temporary security credentials (such as Bob). For example, you can reference + // the federated user name in a resource-based policy, such as in an Amazon + // S3 bucket policy. + // + // The regex used to validate this parameter is a string of characters consisting + // of upper- and lower-case alphanumeric characters with no spaces. You can + // also include underscores or any of the following characters: =,.@- + // + // Name is a required field + Name *string `min:"2" type:"string" required:"true"` + + // An IAM policy in JSON format that you want to use as an inline session policy. + // + // You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // to this operation. You can pass a single JSON policy document to use as an + // inline session policy. You can also specify up to 10 managed policies to + // use as managed session policies. + // + // This parameter is optional. However, if you do not pass any session policies, + // then the resulting federated user session has no permissions. + // + // When you pass session policies, the session permissions are the intersection + // of the IAM user policies and the session policies that you pass. This gives + // you a way to further restrict the permissions for a federated user. You cannot + // use session policies to grant more permissions than those that are defined + // in the permissions policy of the IAM user. For more information, see Session + // Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + // + // The resulting credentials can be used to access a resource that has a resource-based + // policy. If that policy specifically references the federated user session + // in the Principal element of the policy, the session has the permissions allowed + // by the policy. These permissions are granted in addition to the permissions + // that are granted by the session policies. + // + // The plain text that you use for both inline and managed session policies + // can't exceed 2,048 characters. The JSON policy characters can be any ASCII + // character from the space character to the end of the valid character list + // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), + // and carriage return (\u000D) characters. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + Policy *string `min:"1" type:"string"` + + // The Amazon Resource Names (ARNs) of the IAM managed policies that you want + // to use as a managed session policy. The policies must exist in the same account + // as the IAM user that is requesting federated access. + // + // You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // to this operation. You can pass a single JSON policy document to use as an + // inline session policy. You can also specify up to 10 managed policies to + // use as managed session policies. The plain text that you use for both inline + // and managed session policies can't exceed 2,048 characters. You can provide + // up to 10 managed policy ARNs. For more information about ARNs, see Amazon + // Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + // + // This parameter is optional. However, if you do not pass any session policies, + // then the resulting federated user session has no permissions. + // + // When you pass session policies, the session permissions are the intersection + // of the IAM user policies and the session policies that you pass. This gives + // you a way to further restrict the permissions for a federated user. You cannot + // use session policies to grant more permissions than those that are defined + // in the permissions policy of the IAM user. For more information, see Session + // Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + // + // The resulting credentials can be used to access a resource that has a resource-based + // policy. If that policy specifically references the federated user session + // in the Principal element of the policy, the session has the permissions allowed + // by the policy. These permissions are granted in addition to the permissions + // that are granted by the session policies. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + PolicyArns []*PolicyDescriptorType `type:"list"` + + // A list of session tags. Each session tag consists of a key name and an associated + // value. For more information about session tags, see Passing Session Tags + // in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) + // in the IAM User Guide. + // + // This parameter is optional. You can pass up to 50 session tags. The plain + // text session tag keys can’t exceed 128 characters and the values can’t + // exceed 256 characters. For these and additional limits, see IAM and STS Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) + // in the IAM User Guide. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // You can pass a session tag with the same key as a tag that is already attached + // to the user you are federating. When you do, session tags override a user + // tag with the same key. + // + // Tag key–value pairs are not case sensitive, but case is preserved. This + // means that you cannot have separate Department and department tag keys. Assume + // that the role has the Department=Marketing tag and you pass the department=engineering + // session tag. Department and department are not saved as separate tags, and + // the session tag passed in the request takes precedence over the role tag. + Tags []*Tag `type:"list"` +} + +// String returns the string representation +func (s GetFederationTokenInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetFederationTokenInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetFederationTokenInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetFederationTokenInput"} + if s.DurationSeconds != nil && *s.DurationSeconds < 900 { + invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) + } + if s.Name == nil { + invalidParams.Add(request.NewErrParamRequired("Name")) + } + if s.Name != nil && len(*s.Name) < 2 { + invalidParams.Add(request.NewErrParamMinLen("Name", 2)) + } + if s.Policy != nil && len(*s.Policy) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) + } + if s.PolicyArns != nil { + for i, v := range s.PolicyArns { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) + } + } + } + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDurationSeconds sets the DurationSeconds field's value. +func (s *GetFederationTokenInput) SetDurationSeconds(v int64) *GetFederationTokenInput { + s.DurationSeconds = &v + return s +} + +// SetName sets the Name field's value. +func (s *GetFederationTokenInput) SetName(v string) *GetFederationTokenInput { + s.Name = &v + return s +} + +// SetPolicy sets the Policy field's value. +func (s *GetFederationTokenInput) SetPolicy(v string) *GetFederationTokenInput { + s.Policy = &v + return s +} + +// SetPolicyArns sets the PolicyArns field's value. +func (s *GetFederationTokenInput) SetPolicyArns(v []*PolicyDescriptorType) *GetFederationTokenInput { + s.PolicyArns = v + return s +} + +// SetTags sets the Tags field's value. +func (s *GetFederationTokenInput) SetTags(v []*Tag) *GetFederationTokenInput { + s.Tags = v + return s +} + +// Contains the response to a successful GetFederationToken request, including +// temporary AWS credentials that can be used to make AWS requests. +type GetFederationTokenOutput struct { + _ struct{} `type:"structure"` + + // The temporary security credentials, which include an access key ID, a secret + // access key, and a security (or session) token. + // + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. + Credentials *Credentials `type:"structure"` + + // Identifiers for the federated user associated with the credentials (such + // as arn:aws:sts::123456789012:federated-user/Bob or 123456789012:Bob). You + // can use the federated user's ARN in your resource-based policies, such as + // an Amazon S3 bucket policy. + FederatedUser *FederatedUser `type:"structure"` + + // A percentage value that indicates the packed size of the session policies + // and session tags combined passed in the request. The request fails if the + // packed size is greater than 100 percent, which means the policies and tags + // exceeded the allowed space. + PackedPolicySize *int64 `type:"integer"` +} + +// String returns the string representation +func (s GetFederationTokenOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetFederationTokenOutput) GoString() string { + return s.String() +} + +// SetCredentials sets the Credentials field's value. +func (s *GetFederationTokenOutput) SetCredentials(v *Credentials) *GetFederationTokenOutput { + s.Credentials = v + return s +} + +// SetFederatedUser sets the FederatedUser field's value. +func (s *GetFederationTokenOutput) SetFederatedUser(v *FederatedUser) *GetFederationTokenOutput { + s.FederatedUser = v + return s +} + +// SetPackedPolicySize sets the PackedPolicySize field's value. +func (s *GetFederationTokenOutput) SetPackedPolicySize(v int64) *GetFederationTokenOutput { + s.PackedPolicySize = &v + return s +} + +type GetSessionTokenInput struct { + _ struct{} `type:"structure"` + + // The duration, in seconds, that the credentials should remain valid. Acceptable + // durations for IAM user sessions range from 900 seconds (15 minutes) to 129,600 + // seconds (36 hours), with 43,200 seconds (12 hours) as the default. Sessions + // for AWS account owners are restricted to a maximum of 3,600 seconds (one + // hour). If the duration is longer than one hour, the session for AWS account + // owners defaults to one hour. + DurationSeconds *int64 `min:"900" type:"integer"` + + // The identification number of the MFA device that is associated with the IAM + // user who is making the GetSessionToken call. Specify this value if the IAM + // user has a policy that requires MFA authentication. The value is either the + // serial number for a hardware device (such as GAHT12345678) or an Amazon Resource + // Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user). + // You can find the device for an IAM user by going to the AWS Management Console + // and viewing the user's security credentials. + // + // The regex used to validate this parameter is a string of characters consisting + // of upper- and lower-case alphanumeric characters with no spaces. You can + // also include underscores or any of the following characters: =,.@:/- + SerialNumber *string `min:"9" type:"string"` + + // The value provided by the MFA device, if MFA is required. If any policy requires + // the IAM user to submit an MFA code, specify this value. If MFA authentication + // is required, the user must provide a code when requesting a set of temporary + // security credentials. A user who fails to provide the code receives an "access + // denied" response when requesting resources that require MFA authentication. + // + // The format for this parameter, as described by its regex pattern, is a sequence + // of six numeric digits. + TokenCode *string `min:"6" type:"string"` +} + +// String returns the string representation +func (s GetSessionTokenInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetSessionTokenInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetSessionTokenInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetSessionTokenInput"} + if s.DurationSeconds != nil && *s.DurationSeconds < 900 { + invalidParams.Add(request.NewErrParamMinValue("DurationSeconds", 900)) + } + if s.SerialNumber != nil && len(*s.SerialNumber) < 9 { + invalidParams.Add(request.NewErrParamMinLen("SerialNumber", 9)) + } + if s.TokenCode != nil && len(*s.TokenCode) < 6 { + invalidParams.Add(request.NewErrParamMinLen("TokenCode", 6)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDurationSeconds sets the DurationSeconds field's value. +func (s *GetSessionTokenInput) SetDurationSeconds(v int64) *GetSessionTokenInput { + s.DurationSeconds = &v + return s +} + +// SetSerialNumber sets the SerialNumber field's value. +func (s *GetSessionTokenInput) SetSerialNumber(v string) *GetSessionTokenInput { + s.SerialNumber = &v + return s +} + +// SetTokenCode sets the TokenCode field's value. +func (s *GetSessionTokenInput) SetTokenCode(v string) *GetSessionTokenInput { + s.TokenCode = &v + return s +} + +// Contains the response to a successful GetSessionToken request, including +// temporary AWS credentials that can be used to make AWS requests. +type GetSessionTokenOutput struct { + _ struct{} `type:"structure"` + + // The temporary security credentials, which include an access key ID, a secret + // access key, and a security (or session) token. + // + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. + Credentials *Credentials `type:"structure"` +} + +// String returns the string representation +func (s GetSessionTokenOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetSessionTokenOutput) GoString() string { + return s.String() +} + +// SetCredentials sets the Credentials field's value. +func (s *GetSessionTokenOutput) SetCredentials(v *Credentials) *GetSessionTokenOutput { + s.Credentials = v + return s +} + +// A reference to the IAM managed policy that is passed as a session policy +// for a role session or a federated user session. +type PolicyDescriptorType struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the IAM managed policy to use as a session + // policy for the role. For more information about ARNs, see Amazon Resource + // Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + Arn *string `locationName:"arn" min:"20" type:"string"` +} + +// String returns the string representation +func (s PolicyDescriptorType) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s PolicyDescriptorType) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *PolicyDescriptorType) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PolicyDescriptorType"} + if s.Arn != nil && len(*s.Arn) < 20 { + invalidParams.Add(request.NewErrParamMinLen("Arn", 20)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetArn sets the Arn field's value. +func (s *PolicyDescriptorType) SetArn(v string) *PolicyDescriptorType { + s.Arn = &v + return s +} + +// You can pass custom key-value pair attributes when you assume a role or federate +// a user. These are called session tags. You can then use the session tags +// to control access to resources. For more information, see Tagging AWS STS +// Sessions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +type Tag struct { + _ struct{} `type:"structure"` + + // The key for a session tag. + // + // You can pass up to 50 session tags. The plain text session tag keys can’t + // exceed 128 characters. For these and additional limits, see IAM and STS Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) + // in the IAM User Guide. + // + // Key is a required field + Key *string `min:"1" type:"string" required:"true"` + + // The value for a session tag. + // + // You can pass up to 50 session tags. The plain text session tag values can’t + // exceed 256 characters. For these and additional limits, see IAM and STS Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) + // in the IAM User Guide. + // + // Value is a required field + Value *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s Tag) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Tag) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Tag) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Tag"} + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.Value == nil { + invalidParams.Add(request.NewErrParamRequired("Value")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetKey sets the Key field's value. +func (s *Tag) SetKey(v string) *Tag { + s.Key = &v + return s +} + +// SetValue sets the Value field's value. +func (s *Tag) SetValue(v string) *Tag { + s.Value = &v + return s +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go b/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go new file mode 100644 index 00000000000..d5307fcaa0f --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go @@ -0,0 +1,11 @@ +package sts + +import "github.com/aws/aws-sdk-go/aws/request" + +func init() { + initRequest = customizeRequest +} + +func customizeRequest(r *request.Request) { + r.RetryErrorCodes = append(r.RetryErrorCodes, ErrCodeIDPCommunicationErrorException) +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go b/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go new file mode 100644 index 00000000000..fcb720dcac6 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go @@ -0,0 +1,108 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +// Package sts provides the client and types for making API +// requests to AWS Security Token Service. +// +// The AWS Security Token Service (STS) is a web service that enables you to +// request temporary, limited-privilege credentials for AWS Identity and Access +// Management (IAM) users or for users that you authenticate (federated users). +// This guide provides descriptions of the STS API. For more detailed information +// about using this service, go to Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html). +// +// For information about setting up signatures and authorization through the +// API, go to Signing AWS API Requests (https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html) +// in the AWS General Reference. For general information about the Query API, +// go to Making Query Requests (https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html) +// in Using IAM. For information about using security tokens with other AWS +// products, go to AWS Services That Work with IAM (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) +// in the IAM User Guide. +// +// If you're new to AWS and need additional technical information about a specific +// AWS product, you can find the product's technical documentation at http://aws.amazon.com/documentation/ +// (http://aws.amazon.com/documentation/). +// +// Endpoints +// +// By default, AWS Security Token Service (STS) is available as a global service, +// and all AWS STS requests go to a single endpoint at https://sts.amazonaws.com. +// Global requests map to the US East (N. Virginia) region. AWS recommends using +// Regional AWS STS endpoints instead of the global endpoint to reduce latency, +// build in redundancy, and increase session token validity. For more information, +// see Managing AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// Most AWS Regions are enabled for operations in all AWS services by default. +// Those Regions are automatically activated for use with AWS STS. Some Regions, +// such as Asia Pacific (Hong Kong), must be manually enabled. To learn more +// about enabling and disabling AWS Regions, see Managing AWS Regions (https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) +// in the AWS General Reference. When you enable these AWS Regions, they are +// automatically activated for use with AWS STS. You cannot activate the STS +// endpoint for a Region that is disabled. Tokens that are valid in all AWS +// Regions are longer than tokens that are valid in Regions that are enabled +// by default. Changing this setting might affect existing systems where you +// temporarily store tokens. For more information, see Managing Global Endpoint +// Session Tokens (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-manage-tokens) +// in the IAM User Guide. +// +// After you activate a Region for use with AWS STS, you can direct AWS STS +// API calls to that Region. AWS STS recommends that you provide both the Region +// and endpoint when you make calls to a Regional endpoint. You can provide +// the Region alone for manually enabled Regions, such as Asia Pacific (Hong +// Kong). In this case, the calls are directed to the STS Regional endpoint. +// However, if you provide the Region alone for Regions enabled by default, +// the calls are directed to the global endpoint of https://sts.amazonaws.com. +// +// To view the list of AWS STS endpoints and whether they are active by default, +// see Writing Code to Use AWS STS Regions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code) +// in the IAM User Guide. +// +// Recording API requests +// +// STS supports AWS CloudTrail, which is a service that records AWS calls for +// your AWS account and delivers log files to an Amazon S3 bucket. By using +// information collected by CloudTrail, you can determine what requests were +// successfully made to STS, who made the request, when it was made, and so +// on. +// +// If you activate AWS STS endpoints in Regions other than the default global +// endpoint, then you must also turn on CloudTrail logging in those Regions. +// This is necessary to record any AWS STS API calls that are made in those +// Regions. For more information, see Turning On CloudTrail in Additional Regions +// (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/aggregating_logs_regions_turn_on_ct.html) +// in the AWS CloudTrail User Guide. +// +// AWS Security Token Service (STS) is a global service with a single endpoint +// at https://sts.amazonaws.com. Calls to this endpoint are logged as calls +// to a global service. However, because this endpoint is physically located +// in the US East (N. Virginia) Region, your logs list us-east-1 as the event +// Region. CloudTrail does not write these logs to the US East (Ohio) Region +// unless you choose to include global service logs in that Region. CloudTrail +// writes calls to all Regional endpoints to their respective Regions. For example, +// calls to sts.us-east-2.amazonaws.com are published to the US East (Ohio) +// Region and calls to sts.eu-central-1.amazonaws.com are published to the EU +// (Frankfurt) Region. +// +// To learn more about CloudTrail, including how to turn it on and find your +// log files, see the AWS CloudTrail User Guide (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html). +// +// See https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15 for more information on this service. +// +// See sts package documentation for more information. +// https://docs.aws.amazon.com/sdk-for-go/api/service/sts/ +// +// Using the Client +// +// To contact AWS Security Token Service with the SDK use the New function to create +// a new service client. With that client you can make API requests to the service. +// These clients are safe to use concurrently. +// +// See the SDK's documentation for more information on how to use the SDK. +// https://docs.aws.amazon.com/sdk-for-go/api/ +// +// See aws.Config documentation for more information on configuring SDK clients. +// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config +// +// See the AWS Security Token Service client STS for more +// information on creating client for this service. +// https://docs.aws.amazon.com/sdk-for-go/api/service/sts/#New +package sts diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go b/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go new file mode 100644 index 00000000000..a233f542ef2 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go @@ -0,0 +1,82 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +package sts + +const ( + + // ErrCodeExpiredTokenException for service response error code + // "ExpiredTokenException". + // + // The web identity token that was passed is expired or is not valid. Get a + // new identity token from the identity provider and then retry the request. + ErrCodeExpiredTokenException = "ExpiredTokenException" + + // ErrCodeIDPCommunicationErrorException for service response error code + // "IDPCommunicationError". + // + // The request could not be fulfilled because the identity provider (IDP) that + // was asked to verify the incoming identity token could not be reached. This + // is often a transient error caused by network conditions. Retry the request + // a limited number of times so that you don't exceed the request rate. If the + // error persists, the identity provider might be down or not responding. + ErrCodeIDPCommunicationErrorException = "IDPCommunicationError" + + // ErrCodeIDPRejectedClaimException for service response error code + // "IDPRejectedClaim". + // + // The identity provider (IdP) reported that authentication failed. This might + // be because the claim is invalid. + // + // If this error is returned for the AssumeRoleWithWebIdentity operation, it + // can also mean that the claim has expired or has been explicitly revoked. + ErrCodeIDPRejectedClaimException = "IDPRejectedClaim" + + // ErrCodeInvalidAuthorizationMessageException for service response error code + // "InvalidAuthorizationMessageException". + // + // The error returned if the message passed to DecodeAuthorizationMessage was + // invalid. This can happen if the token contains invalid characters, such as + // linebreaks. + ErrCodeInvalidAuthorizationMessageException = "InvalidAuthorizationMessageException" + + // ErrCodeInvalidIdentityTokenException for service response error code + // "InvalidIdentityToken". + // + // The web identity token that was passed could not be validated by AWS. Get + // a new identity token from the identity provider and then retry the request. + ErrCodeInvalidIdentityTokenException = "InvalidIdentityToken" + + // ErrCodeMalformedPolicyDocumentException for service response error code + // "MalformedPolicyDocument". + // + // The request was rejected because the policy document was malformed. The error + // message describes the specific error. + ErrCodeMalformedPolicyDocumentException = "MalformedPolicyDocument" + + // ErrCodePackedPolicyTooLargeException for service response error code + // "PackedPolicyTooLarge". + // + // The request was rejected because the total packed size of the session policies + // and session tags combined was too large. An AWS conversion compresses the + // session policy document, session policy ARNs, and session tags into a packed + // binary format that has a separate limit. The error message indicates by percentage + // how close the policies and tags are to the upper size limit. For more information, + // see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) + // in the IAM User Guide. + // + // You could receive this error even though you meet other defined session policy + // and session tag limits. For more information, see IAM and STS Entity Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) + // in the IAM User Guide. + ErrCodePackedPolicyTooLargeException = "PackedPolicyTooLarge" + + // ErrCodeRegionDisabledException for service response error code + // "RegionDisabledException". + // + // STS is not activated in the requested region for the account that is being + // asked to generate credentials. The account administrator must use the IAM + // console to activate STS in that region. For more information, see Activating + // and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) + // in the IAM User Guide. + ErrCodeRegionDisabledException = "RegionDisabledException" +) diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/service.go b/vendor/github.com/aws/aws-sdk-go/service/sts/service.go new file mode 100644 index 00000000000..586faed1936 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/sts/service.go @@ -0,0 +1,98 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +package sts + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/aws/signer/v4" + "github.com/aws/aws-sdk-go/private/protocol/query" +) + +// STS provides the API operation methods for making requests to +// AWS Security Token Service. See this package's package overview docs +// for details on the service. +// +// STS methods are safe to use concurrently. It is not safe to +// modify mutate any of the struct's properties though. +type STS struct { + *client.Client +} + +// Used for custom client initialization logic +var initClient func(*client.Client) + +// Used for custom request initialization logic +var initRequest func(*request.Request) + +// Service information constants +const ( + ServiceName = "sts" // Name of service. + EndpointsID = ServiceName // ID to lookup a service endpoint with. + ServiceID = "STS" // ServiceID is a unique identifer of a specific service. +) + +// New creates a new instance of the STS client with a session. +// If additional configuration is needed for the client instance use the optional +// aws.Config parameter to add your extra config. +// +// Example: +// mySession := session.Must(session.NewSession()) +// +// // Create a STS client from just a session. +// svc := sts.New(mySession) +// +// // Create a STS client with additional configuration +// svc := sts.New(mySession, aws.NewConfig().WithRegion("us-west-2")) +func New(p client.ConfigProvider, cfgs ...*aws.Config) *STS { + c := p.ClientConfig(EndpointsID, cfgs...) + return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName) +} + +// newClient creates, initializes and returns a new service client instance. +func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *STS { + svc := &STS{ + Client: client.New( + cfg, + metadata.ClientInfo{ + ServiceName: ServiceName, + ServiceID: ServiceID, + SigningName: signingName, + SigningRegion: signingRegion, + PartitionID: partitionID, + Endpoint: endpoint, + APIVersion: "2011-06-15", + }, + handlers, + ), + } + + // Handlers + svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler) + svc.Handlers.Build.PushBackNamed(query.BuildHandler) + svc.Handlers.Unmarshal.PushBackNamed(query.UnmarshalHandler) + svc.Handlers.UnmarshalMeta.PushBackNamed(query.UnmarshalMetaHandler) + svc.Handlers.UnmarshalError.PushBackNamed(query.UnmarshalErrorHandler) + + // Run custom client initialization if present + if initClient != nil { + initClient(svc.Client) + } + + return svc +} + +// newRequest creates a new request for a STS operation and runs any +// custom request initialization. +func (c *STS) newRequest(op *request.Operation, params, data interface{}) *request.Request { + req := c.NewRequest(op, params, data) + + // Run custom request initialization if present + if initRequest != nil { + initRequest(req) + } + + return req +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go b/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go new file mode 100644 index 00000000000..e2e1d6efe55 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go @@ -0,0 +1,96 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +// Package stsiface provides an interface to enable mocking the AWS Security Token Service service client +// for testing your code. +// +// It is important to note that this interface will have breaking changes +// when the service model is updated and adds new API operations, paginators, +// and waiters. +package stsiface + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/service/sts" +) + +// STSAPI provides an interface to enable mocking the +// sts.STS service client's API operation, +// paginators, and waiters. This make unit testing your code that calls out +// to the SDK's service client's calls easier. +// +// The best way to use this interface is so the SDK's service client's calls +// can be stubbed out for unit testing your code with the SDK without needing +// to inject custom request handlers into the SDK's request pipeline. +// +// // myFunc uses an SDK service client to make a request to +// // AWS Security Token Service. +// func myFunc(svc stsiface.STSAPI) bool { +// // Make svc.AssumeRole request +// } +// +// func main() { +// sess := session.New() +// svc := sts.New(sess) +// +// myFunc(svc) +// } +// +// In your _test.go file: +// +// // Define a mock struct to be used in your unit tests of myFunc. +// type mockSTSClient struct { +// stsiface.STSAPI +// } +// func (m *mockSTSClient) AssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) { +// // mock response/functionality +// } +// +// func TestMyFunc(t *testing.T) { +// // Setup Test +// mockSvc := &mockSTSClient{} +// +// myfunc(mockSvc) +// +// // Verify myFunc's functionality +// } +// +// It is important to note that this interface will have breaking changes +// when the service model is updated and adds new API operations, paginators, +// and waiters. Its suggested to use the pattern above for testing, or using +// tooling to generate mocks to satisfy the interfaces. +type STSAPI interface { + AssumeRole(*sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) + AssumeRoleWithContext(aws.Context, *sts.AssumeRoleInput, ...request.Option) (*sts.AssumeRoleOutput, error) + AssumeRoleRequest(*sts.AssumeRoleInput) (*request.Request, *sts.AssumeRoleOutput) + + AssumeRoleWithSAML(*sts.AssumeRoleWithSAMLInput) (*sts.AssumeRoleWithSAMLOutput, error) + AssumeRoleWithSAMLWithContext(aws.Context, *sts.AssumeRoleWithSAMLInput, ...request.Option) (*sts.AssumeRoleWithSAMLOutput, error) + AssumeRoleWithSAMLRequest(*sts.AssumeRoleWithSAMLInput) (*request.Request, *sts.AssumeRoleWithSAMLOutput) + + AssumeRoleWithWebIdentity(*sts.AssumeRoleWithWebIdentityInput) (*sts.AssumeRoleWithWebIdentityOutput, error) + AssumeRoleWithWebIdentityWithContext(aws.Context, *sts.AssumeRoleWithWebIdentityInput, ...request.Option) (*sts.AssumeRoleWithWebIdentityOutput, error) + AssumeRoleWithWebIdentityRequest(*sts.AssumeRoleWithWebIdentityInput) (*request.Request, *sts.AssumeRoleWithWebIdentityOutput) + + DecodeAuthorizationMessage(*sts.DecodeAuthorizationMessageInput) (*sts.DecodeAuthorizationMessageOutput, error) + DecodeAuthorizationMessageWithContext(aws.Context, *sts.DecodeAuthorizationMessageInput, ...request.Option) (*sts.DecodeAuthorizationMessageOutput, error) + DecodeAuthorizationMessageRequest(*sts.DecodeAuthorizationMessageInput) (*request.Request, *sts.DecodeAuthorizationMessageOutput) + + GetAccessKeyInfo(*sts.GetAccessKeyInfoInput) (*sts.GetAccessKeyInfoOutput, error) + GetAccessKeyInfoWithContext(aws.Context, *sts.GetAccessKeyInfoInput, ...request.Option) (*sts.GetAccessKeyInfoOutput, error) + GetAccessKeyInfoRequest(*sts.GetAccessKeyInfoInput) (*request.Request, *sts.GetAccessKeyInfoOutput) + + GetCallerIdentity(*sts.GetCallerIdentityInput) (*sts.GetCallerIdentityOutput, error) + GetCallerIdentityWithContext(aws.Context, *sts.GetCallerIdentityInput, ...request.Option) (*sts.GetCallerIdentityOutput, error) + GetCallerIdentityRequest(*sts.GetCallerIdentityInput) (*request.Request, *sts.GetCallerIdentityOutput) + + GetFederationToken(*sts.GetFederationTokenInput) (*sts.GetFederationTokenOutput, error) + GetFederationTokenWithContext(aws.Context, *sts.GetFederationTokenInput, ...request.Option) (*sts.GetFederationTokenOutput, error) + GetFederationTokenRequest(*sts.GetFederationTokenInput) (*request.Request, *sts.GetFederationTokenOutput) + + GetSessionToken(*sts.GetSessionTokenInput) (*sts.GetSessionTokenOutput, error) + GetSessionTokenWithContext(aws.Context, *sts.GetSessionTokenInput, ...request.Option) (*sts.GetSessionTokenOutput, error) + GetSessionTokenRequest(*sts.GetSessionTokenInput) (*request.Request, *sts.GetSessionTokenOutput) +} + +var _ STSAPI = (*sts.STS)(nil) diff --git a/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/golang/protobuf/LICENSE deleted file mode 100644 index 1b1b1921efa..00000000000 --- a/vendor/github.com/golang/protobuf/LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Go support for Protocol Buffers - Google's data interchange format - -Copyright 2010 The Go Authors. All rights reserved. -https://github.com/golang/protobuf - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/vendor/github.com/google/go-querystring/LICENSE b/vendor/github.com/google/go-querystring/LICENSE new file mode 100644 index 00000000000..ae121a1e46d --- /dev/null +++ b/vendor/github.com/google/go-querystring/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2013 Google. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/hashicorp/consul-template/CHANGELOG.md b/vendor/github.com/hashicorp/consul-template/CHANGELOG.md index e04dcccdb22..a64a51225e8 100644 --- a/vendor/github.com/hashicorp/consul-template/CHANGELOG.md +++ b/vendor/github.com/hashicorp/consul-template/CHANGELOG.md @@ -1,3 +1,49 @@ +## v0.22.1 (Nov 08, 2019) + +SECURITY: + +* curl is vulnerable in the latest alpine docker image [[GH-1302](https://github.com/hashicorp/consul-template/issues/1302)] + +## v0.22.0 (September 10, 2019) + +IMPROVEMENTS: + +* Add rate limiting to consul api calls [[GH-1279](https://github.com/hashicorp/consul-template/pull/1279)] +* Add `byMeta` function [[GH-1237](https://github.com/hashicorp/consul-template/pull/1237)] +* Add support for : and = in service tag values [[GH-1149](https://github.com/hashicorp/consul-template/pull/1149), [GH-1049](https://github.com/hashicorp/consul-template/issues/1049)] +* Add `explodeMap` function [[GH-1148](https://github.com/hashicorp/consul-template/pull/1148)] +* Don't wait for splay when stopping child runner [[GH-1141](https://github.com/hashicorp/consul-template/pull/1141)] +* Add `safels` and `safetree` functions [[GH-1132](https://github.com/hashicorp/consul-template/pull/1132)] +* Support Vault certificates with no lease [[GH-1106](https://github.com/hashicorp/consul-template/pull/1106)] +* Add wrapper function for go-sockaddr templating [[GH-1087](https://github.com/hashicorp/consul-template/pull/1087)] +* Build binaries for arm64 platform [[GH-1251](https://github.com/hashicorp/consul-template/pull/1251)] + +BUG FIXES: + +* Fix arm/arm64 builds by enabling CGO and restricting builds to Linux [workaround for [go/issues/32912](https://github.com/golang/go/issues/32912)] + +## v0.21.3 (September 05, 2019) + +BUG FIXES: + +* Fix regression in non-renewable sleep [[GH-1277](https://github.com/hashicorp/consul-template/pull/1277), [GH-1272](https://github.com/hashicorp/consul-template/issues/1272), [GH-1276](https://github.com/hashicorp/consul-template/issues/1276)] + +## v0.21.2 (August 31, 2019) + +BUG FIXES: + +* Fix regression in backup [[GH-1271](https://github.com/hashicorp/consul-template/pull/1271), [GH-1270](https://github.com/hashicorp/consul-template/issues/1270)] + +## v0.21.1 (August 30, 2019) + +BUG FIXES: + +* Fixed issue in Vault call retry logic [[GH-1269](https://github.com/hashicorp/consul-template/pull/1269), [GH-1224](https://github.com/hashicorp/consul-template/issues/1224)] +* Fixed race in backup [[GH-1265](https://github.com/hashicorp/consul-template/pull/1265), [GH-1264](https://github.com/hashicorp/consul-template/issues/1264)] +* Fixed issue when reading deleted secret [[GH-1260](https://github.com/hashicorp/consul-template/pull/1260), [GH-1198](https://github.com/hashicorp/consul-template/issues/1198)] +* Fix issue with Vault writes [[GH-1257](https://github.com/hashicorp/consul-template/pull/1257), [GH-1252](https://github.com/hashicorp/consul-template/issues/1252)] +* Fix loop to work with template set integers [[GH-1255](https://github.com/hashicorp/consul-template/pull/1255), [GH-1143](https://github.com/hashicorp/consul-template/issues/1143)] + ## v0.21.0 (August 05, 2019) IMPROVEMENTS: @@ -13,7 +59,7 @@ BUG FIXES: * Fixed issue with templates not rendering with `-once` [[GH-1227](https://github.com/hashicorp/consul-template/pull/1227), [GH-1196](https://github.com/hashicorp/consul-template/issues/1196), [GH-1207](https://github.com/hashicorp/consul-template/issues/1207)] * Fixed regression with ~/.vault-token and with vault_agent_token_file not respecting renew_token [[GH-1228](https://github.com/hashicorp/consul-template/issues/1228), [GH-1189](https://github.com/hashicorp/consul-template/issues/1189)] * CA certificates missing from docker 'light' image [[GH-1200](https://github.com/hashicorp/consul-template/issues/1200)] -* Fixed issue with dedup data garbage in Consul KV [[GH-1158](https://github.com/hashicorp/consul-template/issues/1158), [[GH-1168](https://github.com/hashicorp/consul-template/issues/1168)] +* Fixed issue with dedup data garbage in Consul KV [[GH-1158](https://github.com/hashicorp/consul-template/issues/1158), [GH-1168](https://github.com/hashicorp/consul-template/issues/1168)] * Fixed bad case in import path [[GH-1139](https://github.com/hashicorp/consul-template/issues/1139)] * Documented limits on using "." in service names [[GH-1205](https://github.com/hashicorp/consul-template/issues/1205)] diff --git a/vendor/github.com/hashicorp/consul-template/Makefile b/vendor/github.com/hashicorp/consul-template/Makefile index 0d5e40b508e..7d97be30ede 100644 --- a/vendor/github.com/hashicorp/consul-template/Makefile +++ b/vendor/github.com/hashicorp/consul-template/Makefile @@ -14,11 +14,11 @@ GOTAGS ?= GOMAXPROCS ?= 4 # Get the project metadata -GO_DOCKER_VERSION ?= 1.12 +GO_DOCKER_VERSION ?= 1.13 PROJECT := $(shell go list -m -mod=vendor) OWNER := "hashicorp" NAME := $(notdir $(PROJECT)) -GIT_COMMIT ?= $(shell git rev-parse --short HEAD) +GIT_COMMIT ?= $(shell git rev-parse --short HEAD || echo release) VERSION := $(shell awk -F\" '/Version/ { print $$2; exit }' "${CURRENT_DIR}/version/version.go") # Current system information @@ -27,8 +27,9 @@ GOARCH ?= $(shell go env GOARCH) # Default os-arch combination to build XC_OS ?= darwin freebsd linux netbsd openbsd solaris windows -XC_ARCH ?= 386 amd64 arm -XC_EXCLUDE ?= darwin/arm solaris/386 solaris/arm windows/arm +XC_ARCH ?= 386 amd64 arm arm64 +# XC_EXCLUDE "arm64" entries excludes both arm and arm64 +XC_EXCLUDE ?= darwin/arm64 freebsd/arm64 netbsd/arm64 openbsd/arm64 solaris/386 solaris/arm64 windows/arm64 # GPG Signing key (blank by default, means no GPG signing) GPG_KEY ?= @@ -52,8 +53,15 @@ define make-xc-target @printf "%s%20s %s\n" "-->" "${1}/${2}:" "${PROJECT} (excluded)" else @printf "%s%20s %s\n" "-->" "${1}/${2}:" "${PROJECT}" + case "$2" in \ + arm) export CGO_ENABLED="1" ; \ + export GOARM=5 \ + export CC="arm-linux-gnueabi-gcc" ;; \ + arm64) export CGO_ENABLED="1" ; \ + export CC="aarch64-linux-gnu-gcc" ;; \ + *) export CGO_ENABLED="0" ;; \ + esac ; \ env \ - CGO_ENABLED="0" \ GOOS="${1}" \ GOARCH="${2}" \ go build \ @@ -73,7 +81,16 @@ endef $(foreach goarch,$(XC_ARCH),$(foreach goos,$(XC_OS),$(eval $(call make-xc-target,$(goos),$(goarch),$(if $(findstring windows,$(goos)),.exe,))))) # Use docker to create pristine builds for release +# First build image w/ arm build requirements, then build all binaries pristine: + @docker build \ + --rm \ + --force-rm \ + --no-cache \ + --compress \ + --file="docker/pristine/Dockerfile" \ + --build-arg="GOVERSION=${GO_DOCKER_VERSION}" \ + --tag="pristine-builder" . @docker run \ --interactive \ --user $$(id -u):$$(id -g) \ @@ -82,9 +99,9 @@ pristine: --volume="${CURRENT_DIR}:/go/src/${PROJECT}" \ --volume="${GOPATH}/pkg/mod:/go/pkg/mod" \ --workdir="/go/src/${PROJECT}" \ - --env=CGO_ENABLED="0" \ --env=GO111MODULE=on \ - "golang:${GO_DOCKER_VERSION}" env GOCACHE=/tmp make -j4 build + "pristine-builder" \ + env GOCACHE=/tmp make -j4 build # dev builds and installs the project locally. dev: @@ -229,3 +246,8 @@ _sign: @echo "" @echo "And then upload the binaries in dist/!" .PHONY: _sign + +# Add/Update the "Table Of Contents" in the README.md +toc: + @./scripts/readme-toc.sh +.PHONY: toc diff --git a/vendor/github.com/hashicorp/consul-template/README.md b/vendor/github.com/hashicorp/consul-template/README.md index fb8f34dab9b..0fcd8e81608 100644 --- a/vendor/github.com/hashicorp/consul-template/README.md +++ b/vendor/github.com/hashicorp/consul-template/README.md @@ -20,6 +20,103 @@ this functionality might prove useful. --- +## Table of Contents + +- [Community Support](#community-support) +- [Installation](#installation) +- [Quick Example](#quick-example) +- [Usage](#usage) + - [Command Line Flags](#command-line-flags) + - [Configuration File Format](#configuration-file-format) + - [Templating Language](#templating-language) + - [API Functions](#api-functions) + - [datacenters](#datacenters) + - [file](#file) + - [key](#key) + - [keyExists](#keyexists) + - [keyOrDefault](#keyordefault) + - [ls](#ls) + - [safeLs](#safels) + - [node](#node) + - [nodes](#nodes) + - [secret](#secret) + - [secrets](#secrets) + - [service](#service) + - [services](#services) + - [tree](#tree) + - [safeTree](#safetree) + - [Scratch](#scratch) + - [scratch.Key](#scratchkey) + - [scratch.Get](#scratchget) + - [scratch.Set](#scratchset) + - [scratch.SetX](#scratchsetx) + - [scratch.MapSet](#scratchmapset) + - [scratch.MapSetX](#scratchmapsetx) + - [scratch.MapValues](#scratchmapvalues) + - [Helper Functions](#helper-functions) + - [base64Decode](#base64decode) + - [base64Encode](#base64encode) + - [base64URLDecode](#base64urldecode) + - [base64URLEncode](#base64urlencode) + - [byKey](#bykey) + - [byTag](#bytag) + - [byMeta](#bymeta) + - [contains](#contains) + - [containsAll](#containsall) + - [containsAny](#containsany) + - [containsNone](#containsnone) + - [containsNotAll](#containsnotall) + - [env](#env) + - [executeTemplate](#executetemplate) + - [explode](#explode) + - [explodeMap](#explodemap) + - [indent](#indent) + - [in](#in) + - [loop](#loop) + - [join](#join) + - [trimSpace](#trimspace) + - [parseBool](#parsebool) + - [parseFloat](#parsefloat) + - [parseInt](#parseint) + - [parseJSON](#parsejson) + - [parseUint](#parseuint) + - [plugin](#plugin) + - [regexMatch](#regexmatch) + - [regexReplaceAll](#regexreplaceall) + - [replaceAll](#replaceall) + - [split](#split) + - [timestamp](#timestamp) + - [toJSON](#tojson) + - [toJSONPretty](#tojsonpretty) + - [toLower](#tolower) + - [toTitle](#totitle) + - [toTOML](#totoml) + - [toUpper](#toupper) + - [toYAML](#toyaml) + - [sockaddr](#sockaddr) + - [Math Functions](#math-functions) + - [add](#add) + - [subtract](#subtract) + - [multiply](#multiply) + - [divide](#divide) + - [modulo](#modulo) +- [Plugins](#plugins) + - [Authoring Plugins](#authoring-plugins) + - [Important Notes](#important-notes) +- [Caveats](#caveats) + - [Dots in Service Names](#dots-in-service-names) + - [Once Mode](#once-mode) + - [Exec Mode](#exec-mode) + - [De-Duplication Mode](#de-duplication-mode) + - [Termination on Error](#termination-on-error) + - [Command Environment](#command-environment) + - [Multi-phase Execution](#multi-phase-execution) +- [Running and Process Lifecycle](#running-and-process-lifecycle) +- [Debugging](#debugging) +- [FAQ](#faq) +- [Contributing](#contributing) + + ## Community Support If you have questions about how consul-template works, its capabilities or @@ -272,19 +369,6 @@ vault { # of the address is required. address = "https://vault.service.consul:8200" - # This is the grace period between lease renewal of periodic secrets and secret - # re-acquisition. When renewing a secret, if the remaining lease is less than or - # equal to the configured grace, Consul Template will request a new credential. - # This prevents Vault from revoking the credential at expiration and Consul - # Template having a stale credential. - # - # Note: If you set this to a value that is higher than your default TTL or - # max TTL (as set in vault), Consul Template will always read a new secret! - # - # This should also be less than or around 1/3 of your TTL for a predictable - # behaviour. See https://github.com/hashicorp/vault/issues/3414 - grace = "5m" - # This is a Vault Enterprise namespace to use for reading/writing secrets. # # This value can also be specified via the environment variable VAULT_NAMESPACE. @@ -719,6 +803,23 @@ maxconns:15 minconns:5 ``` +##### `safeLs` + +Same as [ls](#ls), but refuse to render template, if the KV prefix query return blank/empty data. + +This is especially useful, for rendering mission critical files, that are being populated by consul-template. + +For example: + +```text +/root/.ssh/authorized_keys +/etc/sysconfig/iptables +``` + +Using `safeLs` on empty prefixes will result in template output not being rendered at all. + +To learn how `safeLs` was born see [CT-1131](https://github.com/hashicorp/consul-template/issues/1131) [C-3975](https://github.com/hashicorp/consul/issues/3975) and [CR-82](https://github.com/hashicorp/consul-replicate/issues/82). + ##### `node` Query [Consul][consul] for a node in the catalog. @@ -859,18 +960,16 @@ secret in plain-text on disk. If an attacker is able to get access to the file, they will have access to plain-text secrets. Please note that Vault does not support blocking queries. As a result, Consul -Template will not immediately reload in the event a secret is changed as it does -with Consul's key-value store. Consul Template will fetch a new secret at half -the lease duration of the original secret. For example, most items in Vault's -generic secret backend have a default 30 day lease. This means Consul Template -will renew the secret every 15 days. As such, it is recommended that a smaller -lease duration be used when generating the initial secret to force Consul -Template to renew more often. +Template will not immediately reload in the event a secret is changed as it +does with Consul's key-value store. Consul Template will renew the secret with +Vault's [Renewer API](https://godoc.org/github.com/hashicorp/vault/api#Renewer). +The Renew API tries to use most of the time the secret is good, renewing at +around 90% of the lease time (as set by Vault). Also consider enabling `error_on_missing_key` when working with templates that will interact with Vault. By default, Consul Template uses Go's templating language. When accessing a struct field or map key that does not exist, it -defaults to printing "". This may not be the desired behavior, +defaults to printing ``. This may not be the desired behavior, especially when working with passwords or other data. As such, it is recommended you set: @@ -956,7 +1055,7 @@ The example above is querying Consul for healthy "web" services, in the "east-aw ```liquid {{ range service "web" }} -server {{ .Name }}{{ .Address }}:{{ .Port }}{{ end }} +server {{ .Name }} {{ .Address }}:{{ .Port }}{{ end }} ``` renders the IP addresses of all _healthy_ nodes with a logical service named @@ -1060,6 +1159,23 @@ nested/config/value "value" Unlike `ls`, `tree` returns **all** keys under the prefix, just like the Unix `tree` command. +##### `safeTree` + +Same as [tree](#tree), but refuse to render template, if the KV prefix query return blank/empty data. + +This is especially useful, for rendering mission critical files, that are being populated by consul-template. + +For example: + +```text +/root/.ssh/authorized_keys +/etc/sysconfig/iptables +``` + +Using `safeTree` on empty prefixes will result in template output not being rendered at all. + +To learn how `safeTree` was born see [CT-1131](https://github.com/hashicorp/consul-template/issues/1131) [C-3975](https://github.com/hashicorp/consul/issues/3975) and [CR-82](https://github.com/hashicorp/consul-replicate/issues/82). + --- #### Scratch @@ -1250,6 +1366,81 @@ Takes the list of services returned by the [`service`](#service) or {{ end }}{{ end }} ``` +##### `byMeta` + +Takes a list of services returned by the [`service`](#service) or +[`services`](#services) and returns a map that groups services by ServiceMeta values. +Multiple service meta keys can be passed as a comma separated string. `|int` can be added to +a meta key to convert numbers from service meta values to padded numbers in `printf "%05d" % value` +format (useful for sorting as Go Template sorts maps by keys). + +**Example**: + +If we have the following services registered in Consul: + +```json +{ + "Services": [ + { + "ID": "redis-dev-1", + "Name": "redis", + "ServiceMeta": { + "environment": "dev", + "shard_number": "1" + }, + ... + }, + { + "ID": "redis-prod-1", + "Name": "redis", + "ServiceMeta": { + "environment": "prod", + "shard_number": "1" + }, + ... + }, + { + "ID": "redis-prod-2", + "Name": "redis", + "ServiceMeta": { + "environment": "prod", + "shard_number": "2", + }, + ... + } + ] +} +``` + +```liquid +{{ service "redis|any" | byMeta "environment,shard_number|int" | toJSON }} +``` + +The code above will produce a map of services grouped by meta: + +```json +{ + "dev_00001": [ + { + "ID": "redis-dev-1", + ... + } + ], + "prod_00001": [ + { + "ID": "redis-prod-1", + ... + } + ], + "prod_00002": [ + { + "ID": "redis-prod-2", + ... + } + ] +} +``` + ##### `contains` Determines if a needle is within an iterable element. @@ -1260,7 +1451,7 @@ Determines if a needle is within an iterable element. {{ end }} ``` -#### `containsAll` +##### `containsAll` Returns `true` if all needles are within an iterable element, or `false` otherwise. Returns `true` if the list of needles is empty. @@ -1271,7 +1462,7 @@ otherwise. Returns `true` if the list of needles is empty. {{ end }} ``` -#### `containsAny` +##### `containsAny` Returns `true` if any needle is within an iterable element, or `false` otherwise. Returns `false` if the list of needles is empty. @@ -1282,7 +1473,7 @@ otherwise. Returns `false` if the list of needles is empty. {{ end }} ``` -#### `containsNone` +##### `containsNone` Returns `true` if no needles are within an iterable element, or `false` otherwise. Returns `true` if the list of needles is empty. @@ -1293,7 +1484,7 @@ otherwise. Returns `true` if the list of needles is empty. {{ end }} ``` -#### `containsNotAll` +##### `containsNotAll` Returns `true` if some needle is not within an iterable element, or `false` otherwise. Returns `false` if the list of needles is empty. @@ -1365,6 +1556,17 @@ You will need to have a reasonable format about your data in Consul. Please see [Go's text/template package][text-template] for more information. +##### `explodeMap` + +Takes the value of a map and converts it into a deeply-nested map for parsing/traversing, +using the same logic as `explode`. + +```liquid +{{ scratch.MapSet "example", "foo/bar", "a" }} +{{ scratch.MapSet "example", "foo/baz", "b" }} +{{ scratch.Get "example" | explodeMap | toYAML }} +``` + ##### `indent` Indents a block of text by prefixing N number of spaces per line. @@ -1705,6 +1907,18 @@ minconns: "2" Note: Consul stores all KV data as strings. Thus true is "true", 1 is "1", etc. +##### `sockaddr` + +Takes a quote-escaped template string as an argument and passes it on to +[hashicorp/go-sockaddr](https://github.com/hashicorp/go-sockaddr) templating engine. + +```liquid +{{ sockaddr "GetPrivateIP" }} +``` + +See [hashicorp/go-sockaddr documentation](https://godoc.org/github.com/hashicorp/go-sockaddr) +for more information. + --- #### Math Functions @@ -2208,12 +2422,7 @@ A: Configuration management tools are designed to be used in unison with Consul ## Contributing -To build and install Consul Template locally, you will need to install the -Docker engine: - -- [Docker for Mac](https://docs.docker.com/engine/installation/mac/) -- [Docker for Windows](https://docs.docker.com/engine/installation/windows/) -- [Docker for Linux](https://docs.docker.com/engine/installation/linux/ubuntulinux/) +To build and install Envconsul locally, you will need to [install Go][go]. Clone the repository: @@ -2255,3 +2464,4 @@ go test ./... -run SomeTestFunction_name [releases]: https://releases.hashicorp.com/consul-template "Consul Template Releases" [text-template]: https://golang.org/pkg/text/template/ "Go's text/template package" [vault]: https://www.vaultproject.io "Vault by HashiCorp" +[go]: https://golang.org "Go programming language" diff --git a/vendor/github.com/hashicorp/consul-template/child/child.go b/vendor/github.com/hashicorp/consul-template/child/child.go index ebee97b9783..3c94816f596 100644 --- a/vendor/github.com/hashicorp/consul-template/child/child.go +++ b/vendor/github.com/hashicorp/consul-template/child/child.go @@ -197,7 +197,7 @@ func (c *Child) Reload() error { c.Lock() defer c.Unlock() - c.kill() + c.kill(false) return c.start() } @@ -223,7 +223,7 @@ func (c *Child) Kill() { log.Printf("[INFO] (child) killing process") c.Lock() defer c.Unlock() - c.kill() + c.kill(false) } // Stop behaves almost identical to Kill except it suppresses future processes @@ -231,6 +231,17 @@ func (c *Child) Kill() { // process from sending its value back up the exit channel. This is useful // when doing a graceful shutdown of an application. func (c *Child) Stop() { + c.internalStop(false) +} + +// StopImmediately behaves almost identical to Stop except it does not wait +// for any random splay if configured. This is used for performing a fast +// shutdown of consul-template and its children when a kill signal is received. +func (c *Child) StopImmediately() { + c.internalStop(true) +} + +func (c *Child) internalStop(immediately bool) { log.Printf("[INFO] (child) stopping process") c.Lock() @@ -242,7 +253,7 @@ func (c *Child) Stop() { log.Printf("[WARN] (child) already stopped") return } - c.kill() + c.kill(immediately) close(c.stopCh) c.stopped = true } @@ -354,7 +365,7 @@ func (c *Child) reload() error { return c.signal(c.reloadSignal) } -func (c *Child) kill() { +func (c *Child) kill(immediately bool) { if !c.running() { return } @@ -362,13 +373,15 @@ func (c *Child) kill() { exited := false process := c.cmd.Process - if c.cmd.ProcessState == nil { + if c.cmd.ProcessState != nil { + log.Printf("[DEBUG] (child) Kill() called but process dead; not waiting for splay.") + } else if immediately { + log.Printf("[DEBUG] (child) Kill() called but performing immediate shutdown; not waiting for splay.") + } else { select { case <-c.stopCh: case <-c.randomSplay(): } - } else { - log.Printf("[DEBUG] (runner) Kill() called but process dead; not waiting for splay.") } if c.killSignal != nil { diff --git a/vendor/github.com/hashicorp/consul-template/cli.go b/vendor/github.com/hashicorp/consul-template/cli.go index 2ce9e088308..52b99c27acf 100644 --- a/vendor/github.com/hashicorp/consul-template/cli.go +++ b/vendor/github.com/hashicorp/consul-template/cli.go @@ -152,7 +152,7 @@ func (cli *CLI) Run(args []string) int { go runner.Start() case *config.KillSignal: fmt.Fprintf(cli.errStream, "Cleaning up...\n") - runner.Stop() + runner.StopImmediately() return ExitCodeInterrupt case signals.SignalLookup["SIGCHLD"]: // The SIGCHLD signal is sent to the parent of a child process when it @@ -731,11 +731,6 @@ Options: -vault-addr=
Sets the address of the Vault server - -vault-grace= - Sets the grace period between lease renewal and secret re-acquisition - if - the remaining lease duration is less than this value, Consul Template will - acquire a new secret from Vault - -vault-renew-token Periodically renew the provided Vault API token - this defaults to "true" and will renew the token at half of the lease duration diff --git a/vendor/github.com/hashicorp/consul-template/dependency/dependency.go b/vendor/github.com/hashicorp/consul-template/dependency/dependency.go index 04c16b1a1ac..c9161f82f49 100644 --- a/vendor/github.com/hashicorp/consul-template/dependency/dependency.go +++ b/vendor/github.com/hashicorp/consul-template/dependency/dependency.go @@ -18,7 +18,7 @@ const ( nodeNameRe = `(?P[[:word:]\.\-\_]+)` nearRe = `(~(?P[[:word:]\.\-\_]+))?` prefixRe = `/?(?P[^@]+)` - tagRe = `((?P[[:word:]\.\-\_]+)\.)?` + tagRe = `((?P[[:word:]=:\.\-\_]+)\.)?` ) type Type int diff --git a/vendor/github.com/hashicorp/consul-template/dependency/vault_common.go b/vendor/github.com/hashicorp/consul-template/dependency/vault_common.go index 213c632930d..6abe69cfd14 100644 --- a/vendor/github.com/hashicorp/consul-template/dependency/vault_common.go +++ b/vendor/github.com/hashicorp/consul-template/dependency/vault_common.go @@ -7,6 +7,9 @@ import ( "strings" "time" + "crypto/x509" + "encoding/pem" + "github.com/hashicorp/vault/api" ) @@ -64,15 +67,80 @@ type SecretWrapInfo struct { WrappedAccessor string } -// vaultRenewDuration accepts a secret and returns the recommended amount of +// +type renewer interface { + Dependency + stopChan() chan struct{} + secrets() (*Secret, *api.Secret) +} + +func renewSecret(clients *ClientSet, d renewer) error { + log.Printf("[TRACE] %s: starting renewer", d) + + secret, vaultSecret := d.secrets() + renewer, err := clients.Vault().NewRenewer(&api.RenewerInput{ + Secret: vaultSecret, + }) + if err != nil { + return err + } + go renewer.Renew() + defer renewer.Stop() + + for { + select { + case err := <-renewer.DoneCh(): + if err != nil { + log.Printf("[WARN] %s: failed to renew: %s", d, err) + } + log.Printf("[WARN] %s: renewer done (maybe the lease expired)", d) + return nil + case renewal := <-renewer.RenewCh(): + log.Printf("[TRACE] %s: successfully renewed", d) + printVaultWarnings(d, renewal.Secret.Warnings) + updateSecret(secret, renewal.Secret) + case <-d.stopChan(): + return ErrStopped + } + } +} + +// durationFrom cert gets the duration of validity from cert data and +// returns that value as an integer number of seconds +func durationFromCert(certData string) int { + block, _ := pem.Decode([]byte(certData)) + if block == nil { + return -1 + } + cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + log.Printf("[WARN] Unable to parse certificate data: %s", err) + return -1 + } + + return int(cert.NotAfter.Sub(cert.NotBefore).Seconds()) +} + +// leaseCheckWait accepts a secret and returns the recommended amount of // time to sleep. -func vaultRenewDuration(s *Secret) time.Duration { +func leaseCheckWait(s *Secret) time.Duration { // Handle whether this is an auth or a regular secret. base := s.LeaseDuration if s.Auth != nil && s.Auth.LeaseDuration > 0 { base = s.Auth.LeaseDuration } + // Handle if this is a certificate with no lease + if certInterface, ok := s.Data["certificate"]; ok && s.LeaseID == "" { + if certData, ok := certInterface.(string); ok { + newDuration := durationFromCert(certData) + if newDuration > 0 { + log.Printf("[DEBUG] Found certificate and set lease duration to %d seconds", newDuration) + base = newDuration + } + } + } + // Ensure we have a lease duration, since sometimes this can be zero. if base <= 0 { base = int(VaultDefaultLeaseDuration.Seconds()) diff --git a/vendor/github.com/hashicorp/consul-template/dependency/vault_read.go b/vendor/github.com/hashicorp/consul-template/dependency/vault_read.go index eae6fc91674..00ebf27ec0d 100644 --- a/vendor/github.com/hashicorp/consul-template/dependency/vault_read.go +++ b/vendor/github.com/hashicorp/consul-template/dependency/vault_read.go @@ -18,7 +18,8 @@ var ( // VaultReadQuery is the dependency to Vault for a secret type VaultReadQuery struct { - stopCh chan struct{} + stopCh chan struct{} + sleepCh chan time.Duration rawPath string queryValues url.Values @@ -45,81 +46,70 @@ func NewVaultReadQuery(s string) (*VaultReadQuery, error) { return &VaultReadQuery{ stopCh: make(chan struct{}, 1), + sleepCh: make(chan time.Duration, 1), rawPath: secretURL.Path, queryValues: secretURL.Query(), }, nil } // Fetch queries the Vault API -func (d *VaultReadQuery) Fetch(clients *ClientSet, opts *QueryOptions) (interface{}, *ResponseMetadata, error) { +func (d *VaultReadQuery) Fetch(clients *ClientSet, opts *QueryOptions, +) (interface{}, *ResponseMetadata, error) { select { case <-d.stopCh: return nil, nil, ErrStopped default: } + select { + case dur := <-d.sleepCh: + time.Sleep(dur) + default: + } - opts = opts.Merge(&QueryOptions{}) + firstRun := d.secret == nil - if d.secret != nil { - if vaultSecretRenewable(d.secret) { - log.Printf("[TRACE] %s: starting renewer", d) - - renewer, err := clients.Vault().NewRenewer(&api.RenewerInput{ - Grace: opts.VaultGrace, - Secret: d.vaultSecret, - }) - if err != nil { - return nil, nil, errors.Wrap(err, d.String()) - } - go renewer.Renew() - defer renewer.Stop() - - RENEW: - for { - select { - case err := <-renewer.DoneCh(): - if err != nil { - log.Printf("[WARN] %s: failed to renew: %s", d, err) - } - log.Printf("[WARN] %s: renewer returned (maybe the lease expired)", d) - break RENEW - case renewal := <-renewer.RenewCh(): - log.Printf("[TRACE] %s: successfully renewed", d) - printVaultWarnings(d, renewal.Secret.Warnings) - updateSecret(d.secret, renewal.Secret) - case <-d.stopCh: - return nil, nil, ErrStopped - } - } - } else { - // The secret isn't renewable, probably the generic secret backend. - dur := vaultRenewDuration(d.secret) - log.Printf("[TRACE] %s: secret is not renewable, sleeping for %s", d, dur) - select { - case <-time.After(dur): - // The lease is almost expired, it's time to request a new one. - case <-d.stopCh: - return nil, nil, ErrStopped - } + if !firstRun && vaultSecretRenewable(d.secret) { + err := renewSecret(clients, d) + if err != nil { + return nil, nil, errors.Wrap(err, d.String()) } } - // We don't have a secret, or the prior renewal failed - vaultSecret, err := d.readSecret(clients, opts) + err := d.fetchSecret(clients, opts) if err != nil { return nil, nil, errors.Wrap(err, d.String()) } - // Print any warnings - printVaultWarnings(d, vaultSecret.Warnings) - - // Create the cloned secret which will be exposed to the template. - d.vaultSecret = vaultSecret - d.secret = transformSecret(vaultSecret) + if !vaultSecretRenewable(d.secret) { + dur := leaseCheckWait(d.secret) + log.Printf("[TRACE] %s: non-renewable secret, set sleep for %s", d, dur) + d.sleepCh <- dur + } return respWithMetadata(d.secret) } +func (d *VaultReadQuery) fetchSecret(clients *ClientSet, opts *QueryOptions, +) error { + opts = opts.Merge(&QueryOptions{}) + vaultSecret, err := d.readSecret(clients, opts) + if err == nil { + printVaultWarnings(d, vaultSecret.Warnings) + d.vaultSecret = vaultSecret + // the cloned secret which will be exposed to the template + d.secret = transformSecret(vaultSecret) + } + return err +} + +func (d *VaultReadQuery) stopChan() chan struct{} { + return d.stopCh +} + +func (d *VaultReadQuery) secrets() (*Secret, *api.Secret) { + return d.secret, d.vaultSecret +} + // CanShare returns if this dependency is shareable. func (d *VaultReadQuery) CanShare() bool { return false @@ -147,7 +137,8 @@ func (d *VaultReadQuery) readSecret(clients *ClientSet, opts *QueryOptions) (*ap if d.isKVv2 == nil { mountPath, isKVv2, err := isKVv2(vaultClient, d.rawPath) if err != nil { - log.Printf("[WARN] %s: failed to check if %s is KVv2, assume not: %s", d, d.rawPath, err) + log.Printf("[WARN] %s: failed to check if %s is KVv2, "+ + "assume not: %s", d, d.rawPath, err) isKVv2 = false d.secretPath = d.rawPath } else if isKVv2 { @@ -163,12 +154,22 @@ func (d *VaultReadQuery) readSecret(clients *ClientSet, opts *QueryOptions) (*ap Path: "/v1/" + d.secretPath, RawQuery: queryString, }) - vaultSecret, err := vaultClient.Logical().ReadWithData(d.secretPath, d.queryValues) + vaultSecret, err := vaultClient.Logical().ReadWithData(d.secretPath, + d.queryValues) + if err != nil { return nil, errors.Wrap(err, d.String()) } - if vaultSecret == nil { + if vaultSecret == nil || deletedKVv2(vaultSecret) { return nil, fmt.Errorf("no secret exists at %s", d.secretPath) } return vaultSecret, nil } + +func deletedKVv2(s *api.Secret) bool { + switch md := s.Data["metadata"].(type) { + case map[string]interface{}: + return md["deletion_time"] != "" + } + return false +} diff --git a/vendor/github.com/hashicorp/consul-template/dependency/vault_token.go b/vendor/github.com/hashicorp/consul-template/dependency/vault_token.go index a3c7f4c8743..93ad5984ac6 100644 --- a/vendor/github.com/hashicorp/consul-template/dependency/vault_token.go +++ b/vendor/github.com/hashicorp/consul-template/dependency/vault_token.go @@ -1,9 +1,6 @@ package dependency import ( - "log" - "time" - "github.com/hashicorp/vault/api" "github.com/pkg/errors" ) @@ -37,64 +34,31 @@ func NewVaultTokenQuery(token string) (*VaultTokenQuery, error) { } // Fetch queries the Vault API -func (d *VaultTokenQuery) Fetch(clients *ClientSet, opts *QueryOptions) (interface{}, *ResponseMetadata, error) { +func (d *VaultTokenQuery) Fetch(clients *ClientSet, opts *QueryOptions, +) (interface{}, *ResponseMetadata, error) { select { case <-d.stopCh: return nil, nil, ErrStopped default: } - opts = opts.Merge(&QueryOptions{}) - if vaultSecretRenewable(d.secret) { - log.Printf("[TRACE] %s: starting renewer", d) - - renewer, err := clients.Vault().NewRenewer(&api.RenewerInput{ - Grace: opts.VaultGrace, - Secret: d.vaultSecret, - }) + err := renewSecret(clients, d) if err != nil { return nil, nil, errors.Wrap(err, d.String()) } - go renewer.Renew() - defer renewer.Stop() - - RENEW: - for { - select { - case err := <-renewer.DoneCh(): - if err != nil { - log.Printf("[WARN] %s: failed to renew: %s", d, err) - } - log.Printf("[WARN] %s: renewer returned (maybe the lease expired)", d) - break RENEW - case renewal := <-renewer.RenewCh(): - log.Printf("[TRACE] %s: successfully renewed", d) - printVaultWarnings(d, renewal.Secret.Warnings) - updateSecret(d.secret, renewal.Secret) - case <-d.stopCh: - return nil, nil, ErrStopped - } - } + renewSecret(clients, d) } - // The secret isn't renewable, probably the generic secret backend. - // TODO This is incorrect when given a non-renewable template. We should - // instead to a lookup self to determine the lease duration. - dur := vaultRenewDuration(d.secret) - if dur < opts.VaultGrace { - dur = opts.VaultGrace - } + return nil, nil, ErrLeaseExpired +} - log.Printf("[TRACE] %s: token is not renewable, sleeping for %s", d, dur) - select { - case <-time.After(dur): - // The lease is almost expired, it's time to request a new one. - case <-d.stopCh: - return nil, nil, ErrStopped - } +func (d *VaultTokenQuery) stopChan() chan struct{} { + return d.stopCh +} - return nil, nil, ErrLeaseExpired +func (d *VaultTokenQuery) secrets() (*Secret, *api.Secret) { + return d.secret, d.vaultSecret } // CanShare returns if this dependency is shareable. diff --git a/vendor/github.com/hashicorp/consul-template/dependency/vault_write.go b/vendor/github.com/hashicorp/consul-template/dependency/vault_write.go index 22aad3aa242..c2841712f77 100644 --- a/vendor/github.com/hashicorp/consul-template/dependency/vault_write.go +++ b/vendor/github.com/hashicorp/consul-template/dependency/vault_write.go @@ -21,7 +21,8 @@ var ( // VaultWriteQuery is the dependency to Vault for a secret type VaultWriteQuery struct { - stopCh chan struct{} + stopCh chan struct{} + sleepCh chan time.Duration path string data map[string]interface{} @@ -42,6 +43,7 @@ func NewVaultWriteQuery(s string, d map[string]interface{}) (*VaultWriteQuery, e return &VaultWriteQuery{ stopCh: make(chan struct{}, 1), + sleepCh: make(chan time.Duration, 1), path: s, data: d, dataHash: sha1Map(d), @@ -49,75 +51,62 @@ func NewVaultWriteQuery(s string, d map[string]interface{}) (*VaultWriteQuery, e } // Fetch queries the Vault API -func (d *VaultWriteQuery) Fetch(clients *ClientSet, opts *QueryOptions) (interface{}, *ResponseMetadata, error) { +func (d *VaultWriteQuery) Fetch(clients *ClientSet, opts *QueryOptions, +) (interface{}, *ResponseMetadata, error) { select { case <-d.stopCh: return nil, nil, ErrStopped default: } + select { + case dur := <-d.sleepCh: + time.Sleep(dur) + default: + } - opts = opts.Merge(&QueryOptions{}) + firstRun := d.secret == nil - if d.secret != nil { - if vaultSecretRenewable(d.secret) { - log.Printf("[TRACE] %s: starting renewer", d) - - renewer, err := clients.Vault().NewRenewer(&api.RenewerInput{ - Grace: opts.VaultGrace, - Secret: d.vaultSecret, - }) - if err != nil { - return nil, nil, errors.Wrap(err, d.String()) - } - go renewer.Renew() - defer renewer.Stop() - - RENEW: - for { - select { - case err := <-renewer.DoneCh(): - if err != nil { - log.Printf("[WARN] %s: failed to renew: %s", d, err) - } - log.Printf("[WARN] %s: renewer returned (maybe the lease expired)", d) - break RENEW - case renewal := <-renewer.RenewCh(): - log.Printf("[TRACE] %s: successfully renewed", d) - printVaultWarnings(d, renewal.Secret.Warnings) - updateSecret(d.secret, renewal.Secret) - case <-d.stopCh: - return nil, nil, ErrStopped - } - } - } else { - // The secret isn't renewable, probably the generic secret backend. - dur := vaultRenewDuration(d.secret) - log.Printf("[TRACE] %s: secret is not renewable, sleeping for %s", d, dur) - select { - case <-time.After(dur): - // The lease is almost expired, it's time to request a new one. - case <-d.stopCh: - return nil, nil, ErrStopped - } + if !firstRun && vaultSecretRenewable(d.secret) { + err := renewSecret(clients, d) + if err != nil { + return nil, nil, errors.Wrap(err, d.String()) } } - // We don't have a secret, or the prior renewal failed + opts = opts.Merge(&QueryOptions{}) vaultSecret, err := d.writeSecret(clients, opts) if err != nil { return nil, nil, errors.Wrap(err, d.String()) } - // Print any warnings - printVaultWarnings(d, vaultSecret.Warnings) + // vaultSecret == nil when writing to KVv1 engines + if vaultSecret == nil { + return respWithMetadata(d.secret) + } - // Create the cloned secret which will be exposed to the template. + printVaultWarnings(d, vaultSecret.Warnings) d.vaultSecret = vaultSecret + // cloned secret which will be exposed to the template d.secret = transformSecret(vaultSecret) + if !vaultSecretRenewable(d.secret) { + dur := leaseCheckWait(d.secret) + log.Printf("[TRACE] %s: non-renewable secret, set sleep for %s", d, dur) + d.sleepCh <- dur + } + return respWithMetadata(d.secret) } +// meet renewer interface +func (d *VaultWriteQuery) stopChan() chan struct{} { + return d.stopCh +} + +func (d *VaultWriteQuery) secrets() (*Secret, *api.Secret) { + return d.secret, d.vaultSecret +} + // CanShare returns if this dependency is shareable. func (d *VaultWriteQuery) CanShare() bool { return false @@ -168,14 +157,20 @@ func (d *VaultWriteQuery) writeSecret(clients *ClientSet, opts *QueryOptions) (* RawQuery: opts.String(), }) - vaultSecret, err := clients.Vault().Logical().Write(d.path, d.data) + data := d.data + + _, isv2, _ := isKVv2(clients.Vault(), d.path) + if isv2 { + data = map[string]interface{}{"data": d.data} + } + + vaultSecret, err := clients.Vault().Logical().Write(d.path, data) if err != nil { return nil, errors.Wrap(err, d.String()) } - if vaultSecret == nil { - if _, isv2, _ := isKVv2(clients.Vault(), d.path); isv2 { - return nil, fmt.Errorf("no secret exists at %s", d.path) - } + // vaultSecret is always nil when KVv1 engine (isv2==false) + if isv2 && vaultSecret == nil { + return nil, fmt.Errorf("no secret exists at %s", d.path) } return vaultSecret, nil diff --git a/vendor/github.com/hashicorp/consul-template/go.mod b/vendor/github.com/hashicorp/consul-template/go.mod index 4698887d37d..a449ad5baaf 100644 --- a/vendor/github.com/hashicorp/consul-template/go.mod +++ b/vendor/github.com/hashicorp/consul-template/go.mod @@ -7,13 +7,14 @@ require ( github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 // indirect github.com/frankban/quicktest v1.4.0 // indirect github.com/google/btree v1.0.0 // indirect - github.com/hashicorp/consul/api v1.1.0 - github.com/hashicorp/consul/sdk v0.1.1 + github.com/hashicorp/consul/api v1.2.0 + github.com/hashicorp/consul/sdk v0.2.0 github.com/hashicorp/go-gatedio v0.5.0 github.com/hashicorp/go-immutable-radix v1.1.0 // indirect github.com/hashicorp/go-msgpack v0.5.5 // indirect github.com/hashicorp/go-multierror v1.0.0 github.com/hashicorp/go-rootcerts v1.0.1 + github.com/hashicorp/go-sockaddr v1.0.2 github.com/hashicorp/go-syslog v1.0.0 github.com/hashicorp/golang-lru v0.5.3 // indirect github.com/hashicorp/hcl v1.0.0 diff --git a/vendor/github.com/hashicorp/consul-template/go.sum b/vendor/github.com/hashicorp/consul-template/go.sum index 4fd78bc91c9..648fcc967b7 100644 --- a/vendor/github.com/hashicorp/consul-template/go.sum +++ b/vendor/github.com/hashicorp/consul-template/go.sum @@ -36,11 +36,10 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/hashicorp/consul v1.5.3 h1:EmTWRf/cuqZk6Ug9tgFUVE9xNgJPpmBvJwJMvm+agSk= -github.com/hashicorp/consul/api v1.1.0 h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1 h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/api v1.2.0 h1:oPsuzLp2uk7I7rojPKuncWbZ+m5TMoD4Ivs+2Rkeh4Y= +github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw= +github.com/hashicorp/consul/sdk v0.2.0 h1:GWFYFmry/k4b1hEoy7kSkmU8e30GAyI4VZHk0fRxeL4= +github.com/hashicorp/consul/sdk v0.2.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= diff --git a/vendor/github.com/hashicorp/consul-template/manager/runner.go b/vendor/github.com/hashicorp/consul-template/manager/runner.go index 496cb05e09d..877f4bf945f 100644 --- a/vendor/github.com/hashicorp/consul-template/manager/runner.go +++ b/vendor/github.com/hashicorp/consul-template/manager/runner.go @@ -390,26 +390,13 @@ func (r *Runner) Start() { // Stop halts the execution of this runner and its subprocesses. func (r *Runner) Stop() { - r.stopLock.Lock() - defer r.stopLock.Unlock() - - if r.stopped { - return - } - - log.Printf("[INFO] (runner) stopping") - r.stopDedup() - r.stopWatcher() - r.stopChild() - - if err := r.deletePid(); err != nil { - log.Printf("[WARN] (runner) could not remove pid at %v: %s", - r.config.PidFile, err) - } - - r.stopped = true + r.internalStop(false) +} - close(r.DoneCh) +// StopImmediately behaves like Stop but won't wait for any splay on any child +// process it may be running. +func (r *Runner) StopImmediately() { + r.internalStop(true) } // TemplateRenderedCh returns a channel that will be triggered when one or more @@ -437,6 +424,29 @@ func (r *Runner) RenderEvents() map[string]*RenderEvent { return times } +func (r *Runner) internalStop(immediately bool) { + r.stopLock.Lock() + defer r.stopLock.Unlock() + + if r.stopped { + return + } + + log.Printf("[INFO] (runner) stopping") + r.stopDedup() + r.stopWatcher() + r.stopChild(immediately) + + if err := r.deletePid(); err != nil { + log.Printf("[WARN] (runner) could not remove pid at %q: %s", + *r.config.PidFile, err) + } + + r.stopped = true + + close(r.DoneCh) +} + func (r *Runner) stopDedup() { if r.dedup != nil { log.Printf("[DEBUG] (runner) stopping de-duplication manager") @@ -451,13 +461,18 @@ func (r *Runner) stopWatcher() { } } -func (r *Runner) stopChild() { +func (r *Runner) stopChild(immediately bool) { r.childLock.RLock() defer r.childLock.RUnlock() if r.child != nil { - log.Printf("[DEBUG] (runner) stopping child process") - r.child.Stop() + if immediately { + log.Printf("[DEBUG] (runner) stopping child process immediately") + r.child.StopImmediately() + } else { + log.Printf("[DEBUG] (runner) stopping child process") + r.child.Stop() + } } } diff --git a/vendor/github.com/hashicorp/consul-template/renderer/renderer.go b/vendor/github.com/hashicorp/consul-template/renderer/renderer.go index 34e68a2b15c..59931c19e62 100644 --- a/vendor/github.com/hashicorp/consul-template/renderer/renderer.go +++ b/vendor/github.com/hashicorp/consul-template/renderer/renderer.go @@ -163,12 +163,14 @@ func AtomicWrite(path string, createDestDirs bool, contents []byte, perms os.Fil } // If we got this far, it means we are about to save the file. Copy the - // current contents of the file onto disk (if it exists) so we have a backup. + // current file so we have a backup. Note that os.Link preserves the Mode. if backup { - if _, err := os.Stat(path); !os.IsNotExist(err) { - if err := copyFile(path, path+".bak"); err != nil { - return err - } + bak, old := path+".bak", path+".old.bak" + os.Rename(bak, old) // ignore error + if err := os.Link(path, bak); err != nil { + log.Printf("[WARN] (runner) could not backup %q: %v", path, err) + } else { + os.Remove(old) // ignore error } } @@ -178,33 +180,3 @@ func AtomicWrite(path string, createDestDirs bool, contents []byte, perms os.Fil return nil } - -// copyFile copies the file at src to the path at dst. Any errors that occur -// are returned. -func copyFile(src, dst string) error { - s, err := os.Open(src) - if err != nil { - return err - } - defer s.Close() - - stat, err := s.Stat() - if err != nil { - return err - } - - d, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, stat.Mode()) - if err != nil { - return err - } - if _, err := io.Copy(d, s); err != nil { - d.Close() - return err - } - if err := d.Close(); err != nil { - return err - } - - // io.Copy can restrict file permissions based on umask. - return os.Chmod(dst, stat.Mode()) -} diff --git a/vendor/github.com/hashicorp/consul-template/template/funcs.go b/vendor/github.com/hashicorp/consul-template/template/funcs.go index 2270f6fd290..a599034f74e 100644 --- a/vendor/github.com/hashicorp/consul-template/template/funcs.go +++ b/vendor/github.com/hashicorp/consul-template/template/funcs.go @@ -11,6 +11,7 @@ import ( "path/filepath" "reflect" "regexp" + "sort" "strconv" "strings" "text/template" @@ -18,6 +19,7 @@ import ( "github.com/BurntSushi/toml" dep "github.com/hashicorp/consul-template/dependency" + socktmpl "github.com/hashicorp/go-sockaddr/template" "github.com/pkg/errors" yaml "gopkg.in/yaml.v2" ) @@ -208,8 +210,13 @@ func keyWithDefaultFunc(b *Brain, used, missing *dep.Set) func(string, string) ( } } +func safeLsFunc(b *Brain, used, missing *dep.Set) func(string) ([]*dep.KeyPair, error) { + // call lsFunc but explicitly mark that empty data set returned on monitored KV prefix is NOT safe + return lsFunc(b, used, missing, false) +} + // lsFunc returns or accumulates keyPrefix dependencies. -func lsFunc(b *Brain, used, missing *dep.Set) func(string) ([]*dep.KeyPair, error) { +func lsFunc(b *Brain, used, missing *dep.Set, emptyIsSafe bool) func(string) ([]*dep.KeyPair, error) { return func(s string) ([]*dep.KeyPair, error) { result := []*dep.KeyPair{} @@ -231,9 +238,23 @@ func lsFunc(b *Brain, used, missing *dep.Set) func(string) ([]*dep.KeyPair, erro result = append(result, pair) } } - return result, nil + + if len(result) == 0 { + if emptyIsSafe { + // Operator used potentially unsafe ls function in the template instead of the safeLs + return result, nil + } + } else { + // non empty result is good so we just return the data + return result, nil + } + + // If we reach this part of the code result is completely empty as value returned no KV pairs + // Operator selected to use safeLs on the specific KV prefix so we will refuse to render template + // by marking d as missing } + // b.Recall either returned an error or safeLs entered unsafe case missing.Add(d) return result, nil @@ -358,6 +379,51 @@ func secretsFunc(b *Brain, used, missing *dep.Set) func(string) ([]string, error } } +// byMeta returns Services grouped by one or many ServiceMeta fields. +func byMeta(meta string, services []*dep.HealthService) (groups map[string][]*dep.HealthService, err error) { + re := regexp.MustCompile("[^a-zA-Z0-9_-]") + normalize := func(x string) string { + return re.ReplaceAllString(x, "_") + } + getOrDefault := func(m map[string]string, key string) string { + realKey := strings.TrimSuffix(key, "|int") + if val, ok := m[realKey]; ok { + if val != "" { + return val + } + } + if strings.HasSuffix(key, "|int") { + return "0" + } + return fmt.Sprintf("_no_%s_", realKey) + } + + metas := strings.Split(meta, ",") + + groups = make(map[string][]*dep.HealthService) + + for _, s := range services { + sm := s.ServiceMeta + keyParts := []string{} + for _, meta := range metas { + value := getOrDefault(sm, meta) + if strings.HasSuffix(meta, "|int") { + value = getOrDefault(sm, meta) + i, err := strconv.Atoi(value) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("cannot parse %v as number ", value)) + } + value = fmt.Sprintf("%05d", i) + } + keyParts = append(keyParts, normalize(value)) + } + key := strings.Join(keyParts, "_") + groups[key] = append(groups[key], s) + } + + return groups, nil +} + // serviceFunc returns or accumulates health service dependencies. func serviceFunc(b *Brain, used, missing *dep.Set) func(...string) ([]*dep.HealthService, error) { return func(s ...string) ([]*dep.HealthService, error) { @@ -406,8 +472,13 @@ func servicesFunc(b *Brain, used, missing *dep.Set) func(...string) ([]*dep.Cata } } +func safeTreeFunc(b *Brain, used, missing *dep.Set) func(string) ([]*dep.KeyPair, error) { + // call treeFunc but explicitly mark that empty data set returned on monitored KV prefix is NOT safe + return treeFunc(b, used, missing, false) +} + // treeFunc returns or accumulates keyPrefix dependencies. -func treeFunc(b *Brain, used, missing *dep.Set) func(string) ([]*dep.KeyPair, error) { +func treeFunc(b *Brain, used, missing *dep.Set, emptyIsSafe bool) func(string) ([]*dep.KeyPair, error) { return func(s string) ([]*dep.KeyPair, error) { result := []*dep.KeyPair{} @@ -430,9 +501,23 @@ func treeFunc(b *Brain, used, missing *dep.Set) func(string) ([]*dep.KeyPair, er result = append(result, pair) } } - return result, nil + + if len(result) == 0 { + if emptyIsSafe { + // Operator used potentially unsafe tree function in the template instead of the safeTree + return result, nil + } + } else { + // non empty result is good so we just return the data + return result, nil + } + + // If we reach this part of the code result is completely empty as value returned no KV pairs + // Operator selected to use safeTree on the specific KV prefix so we will refuse to render template + // by marking d as missing } + // b.Recall either returned an error or safeTree entered unsafe case missing.Add(d) return result, nil @@ -583,8 +668,8 @@ func explode(pairs []*dep.KeyPair) (map[string]interface{}, error) { return m, nil } -// explodeHelper is a recursive helper for explode. -func explodeHelper(m map[string]interface{}, k, v, p string) error { +// explodeHelper is a recursive helper for explode and explodeMap +func explodeHelper(m map[string]interface{}, k string, v interface{}, p string) error { if strings.Contains(k, "/") { parts := strings.Split(k, "/") top := parts[0] @@ -607,6 +692,24 @@ func explodeHelper(m map[string]interface{}, k, v, p string) error { return nil } +// explodeMap turns a single-level map into a deeply-nested hash. +func explodeMap(mapIn map[string]interface{}) (map[string]interface{}, error) { + mapOut := make(map[string]interface{}) + + var keys []string + for k := range mapIn { + keys = append(keys, k) + } + sort.Strings(keys) + + for i := range keys { + if err := explodeHelper(mapOut, keys[i], mapIn[keys[i]], keys[i]); err != nil { + return nil, errors.Wrap(err, "explodeMap") + } + } + return mapOut, nil +} + // in searches for a given value in a given interface. func in(l, v interface{}) (bool, error) { lv := reflect.ValueOf(l) @@ -697,16 +800,41 @@ func indent(spaces int, s string) (string, error) { // print(i) // } // -func loop(ints ...int64) (<-chan int64, error) { - var start, stop int64 - switch len(ints) { +func loop(ifaces ...interface{}) (<-chan int64, error) { + + to64 := func(i interface{}) (int64, error) { + v := reflect.ValueOf(i) + switch v.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, + reflect.Int64: + return int64(v.Int()), nil + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, + reflect.Uint64: + return int64(v.Uint()), nil + case reflect.String: + return parseInt(v.String()) + } + return 0, fmt.Errorf("loop: bad argument type: %T", i) + } + + var i1, i2 interface{} + switch len(ifaces) { case 1: - start, stop = 0, ints[0] + i1, i2 = 0, ifaces[0] case 2: - start, stop = ints[0], ints[1] + i1, i2 = ifaces[0], ifaces[1] default: - return nil, fmt.Errorf("loop: wrong number of arguments, expected 1 or 2"+ - ", but got %d", len(ints)) + return nil, fmt.Errorf("loop: wrong number of arguments, expected "+ + "1 or 2, but got %d", len(ifaces)) + } + + start, err := to64(i1) + if err != nil { + return nil, err + } + stop, err := to64(i2) + if err != nil { + return nil, err } ch := make(chan int64) @@ -1184,3 +1312,13 @@ func pathInSandbox(sandbox, path string) error { } return nil } + +// sockaddr wraps go-sockaddr templating +func sockaddr(args ...string) (string, error) { + t := fmt.Sprintf("{{ %s }} ", strings.Join(args, " ")) + k, err := socktmpl.Parse(t) + if err != nil { + return "", err + } + return k, nil +} diff --git a/vendor/github.com/hashicorp/consul-template/template/template.go b/vendor/github.com/hashicorp/consul-template/template/template.go index ff3f36f213d..36da551834a 100644 --- a/vendor/github.com/hashicorp/consul-template/template/template.go +++ b/vendor/github.com/hashicorp/consul-template/template/template.go @@ -230,14 +230,16 @@ func funcMap(i *funcMapInput) template.FuncMap { "key": keyFunc(i.brain, i.used, i.missing), "keyExists": keyExistsFunc(i.brain, i.used, i.missing), "keyOrDefault": keyWithDefaultFunc(i.brain, i.used, i.missing), - "ls": lsFunc(i.brain, i.used, i.missing), + "ls": lsFunc(i.brain, i.used, i.missing, true), + "safeLs": safeLsFunc(i.brain, i.used, i.missing), "node": nodeFunc(i.brain, i.used, i.missing), "nodes": nodesFunc(i.brain, i.used, i.missing), "secret": secretFunc(i.brain, i.used, i.missing), "secrets": secretsFunc(i.brain, i.used, i.missing), "service": serviceFunc(i.brain, i.used, i.missing), "services": servicesFunc(i.brain, i.used, i.missing), - "tree": treeFunc(i.brain, i.used, i.missing), + "tree": treeFunc(i.brain, i.used, i.missing, true), + "safeTree": safeTreeFunc(i.brain, i.used, i.missing), // Scratch "scratch": func() *Scratch { return &scratch }, @@ -257,6 +259,7 @@ func funcMap(i *funcMapInput) template.FuncMap { "env": envFunc(i.env), "executeTemplate": executeTemplateFunc(i.t), "explode": explode, + "explodeMap": explodeMap, "in": in, "indent": indent, "loop": loop, @@ -280,7 +283,8 @@ func funcMap(i *funcMapInput) template.FuncMap { "toUpper": toUpper, "toYAML": toYAML, "split": split, - + "byMeta": byMeta, + "sockaddr": sockaddr, // Math functions "add": add, "subtract": subtract, diff --git a/vendor/github.com/hashicorp/consul-template/version/version.go b/vendor/github.com/hashicorp/consul-template/version/version.go index 6e12bfc06dc..077931edc7b 100644 --- a/vendor/github.com/hashicorp/consul-template/version/version.go +++ b/vendor/github.com/hashicorp/consul-template/version/version.go @@ -2,7 +2,7 @@ package version import "fmt" -const Version = "0.21.0" +const Version = "0.22.1" var ( Name string diff --git a/vendor/github.com/hashicorp/consul-template/watch/view.go b/vendor/github.com/hashicorp/consul-template/watch/view.go index 191c008c1df..bcef6c0b218 100644 --- a/vendor/github.com/hashicorp/consul-template/watch/view.go +++ b/vendor/github.com/hashicorp/consul-template/watch/view.go @@ -3,6 +3,7 @@ package watch import ( "fmt" "log" + "math/rand" "reflect" "sync" "time" @@ -207,6 +208,8 @@ func (v *View) fetch(doneCh, successCh chan<- struct{}, errCh chan<- error) { default: } + start := time.Now() // for rateLimiter below + data, rm, err := v.dependency.Fetch(v.clients, &dep.QueryOptions{ AllowStale: allowStale, WaitTime: defaultWaitTime, @@ -247,6 +250,10 @@ func (v *View) fetch(doneCh, successCh chan<- struct{}, errCh chan<- error) { allowStale = true } + if dur := rateLimiter(start); dur > 1 { + time.Sleep(dur) + } + if rm.LastIndex == v.lastIndex { log.Printf("[TRACE] (view) %s no new data (index was the same)", v.dependency) continue @@ -282,6 +289,18 @@ func (v *View) fetch(doneCh, successCh chan<- struct{}, errCh chan<- error) { } } +const minDelayBetweenUpdates = time.Millisecond * 100 + +// return a duration to sleep to limit the frequency of upstream calls +func rateLimiter(start time.Time) time.Duration { + remaining := minDelayBetweenUpdates - time.Since(start) + if remaining > 0 { + dither := time.Duration(rand.Int63n(20000000)) // 0-20ms + return remaining + dither + } + return 0 +} + // stop halts polling of this view. func (v *View) stop() { v.dependency.Stop() diff --git a/vendor/github.com/hashicorp/go-connlimit/README.md b/vendor/github.com/hashicorp/go-connlimit/README.md new file mode 100644 index 00000000000..99d2d95b0d2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-connlimit/README.md @@ -0,0 +1,77 @@ +# Go Server Client Connection Tracking + +This package provides a library for network servers to track how many +concurrent connections they have from a given client address. + +It's designed to be very simple and shared between several HashiCorp products +that provide network servers and need this kind of control to impose limits on +the resources that can be consumed by a single client. + +## Usage + +### TCP Server + +``` +// During server setup: +s.limiter = NewLimiter(Config{ + MaxConnsPerClientIP: 10, +}) + +``` + +``` +// handleConn is called in its own goroutine for each net.Conn accepted by +// a net.Listener. +func (s *Server) handleConn(conn net.Conn) { + defer conn.Close() + + // Track the connection + free, err := s.limiter.Accept(conn) + if err != nil { + // Not accepted as limit has been reached (or some other error), log error + // or warning and close. + + // The standard err.Error() message when limit is reached is generic so it + // doesn't leak information which may potentially be sensitive (e.g. current + // limits set or number of connections). This also allows comparison to + // ErrPerClientIPLimitReached if it's important to handle it differently + // from an internal library or io error (currently not possible but might be + // in the future if additional functionality is added). + + // If you would like to log more information about the current limit that + // can be obtained with s.limiter.Config(). + return + } + // Defer a call to free to decrement the counter for this client IP once we + // are done with this conn. + defer free() + + + // Handle the conn +} +``` + +### HTTP Server + +``` +lim := NewLimiter(Config{ + MaxConnsPerClientIP: 10, +}) +s := http.Server{ + // Other config here + ConnState: lim.HTTPConnStateFunc(), +} +``` + +### Dynamic Configuration + +The limiter supports dynamic reconfiguration. At any time, any goroutine may +call `limiter.SetConfig(c Config)` which will atomically update the config. All +subsequent calls to `Accept` will use the newly configured limits in their +decisions and calls to `limiter.Config()` will return the new config. + +Note that if the limits are reduced that will only prevent further connections +beyond the new limit - existing connections are not actively closed to meet the +limit. In cases where this is critical it's often preferable to mitigate in a +more focussed way e.g. by adding an iptables rule that blocks all connections +from one malicious client without affecting the whole server. diff --git a/vendor/github.com/hashicorp/go-connlimit/connlimit.go b/vendor/github.com/hashicorp/go-connlimit/connlimit.go new file mode 100644 index 00000000000..cefcb8dad0c --- /dev/null +++ b/vendor/github.com/hashicorp/go-connlimit/connlimit.go @@ -0,0 +1,180 @@ +package connlimit + +import ( + "errors" + "net" + "net/http" + "sync" + "sync/atomic" +) + +var ( + // ErrPerClientIPLimitReached is returned if accepting a new conn would exceed + // the per-client-ip limit set. + ErrPerClientIPLimitReached = errors.New("client connection limit reached") +) + +// Limiter implements a simple limiter that tracks the number of connections +// from each client IP. It may be used in it's zero value although no limits +// will be configured initially - they can be set later with SetConfig. +type Limiter struct { + // cs stores the map of active connections by IP address. We store a set of + // conn pointers not just a counter because http.Server.ConnState hook only + // gives us a connection object between calls so we need to know if a closed + // conn is one that was previously accepted or one we've just closed in the + // ConnState hook because the client has hit its limit. + cs map[string]map[net.Conn]struct{} + + // l protects access to cs + l sync.Mutex + + // cfg is stored atomically to provide non-blocking reads via Config. This + // might be important if this is called regularly in a health or metrics + // endpoint and shouldn't block new connections being established. + cfg atomic.Value +} + +// Config is the configuration for the limiter. +type Config struct { + // MaxConnsPerClientIP limits how many concurrent connections are allowed from + // a given client IP. The IP is the one reported by the connection so cannot + // be relied upon if clients are connecting through multiple proxies or able + // to spoof their source IP address in some way. Similarly, multiple clients + // connected via a proxy or NAT gateway or similar will all be seen as coming + // from the same IP and so limited as one client. + MaxConnsPerClientIP int +} + +// NewLimiter returns a limiter with the specified config. +func NewLimiter(cfg Config) *Limiter { + l := &Limiter{} + l.SetConfig(cfg) + return l +} + +// Accept is called as early as possible when handling a new conn. If the +// connection should be accepted according to the Limiter's Config, it will +// return a free func and nil error. The free func must be called when the +// connection is no longer being handled - typically in a defer statement in the +// main connection handling goroutine, this will decrement the counter for that +// client IP. If the configured limit has been reached, a no-op func is returned +// (doesn't need to be called), and ErrPerClientIPLimitReached is returned. +// +// If any other error is returned it signifies something wrong with the config +// or transient failure to read or parse the remote IP. The free func will be a +// no-op in this case and need not be called. +func (l *Limiter) Accept(conn net.Conn) (func(), error) { + addrKey := addrKey(conn) + + // Load config outside locked section since it's not updated under lock anyway + // and the atomic Load might be slower/contented so better to do outside lock. + cfg := l.Config() + + l.l.Lock() + defer l.l.Unlock() + + if l.cs == nil { + l.cs = make(map[string]map[net.Conn]struct{}) + } + + cs := l.cs[addrKey] + if cs == nil { + cs = make(map[net.Conn]struct{}) + l.cs[addrKey] = cs + } + + n := len(cs) + + // Might be greater since config is dynamic. + if cfg.MaxConnsPerClientIP > 0 && n >= cfg.MaxConnsPerClientIP { + return func() {}, ErrPerClientIPLimitReached + } + + // Add the conn to the map + cs[conn] = struct{}{} + + // Create a free func over the address key we used + free := func() { + l.freeConn(conn) + } + + return free, nil +} + +func addrKey(conn net.Conn) string { + addr := conn.RemoteAddr() + switch a := addr.(type) { + case *net.TCPAddr: + return "ip:" + a.IP.String() + case *net.UDPAddr: + return "ip:" + a.IP.String() + case *net.IPAddr: + return "ip:" + a.IP.String() + default: + // not sure what to do with this, just assume whole Addr is relevant? + return addr.Network() + "/" + addr.String() + } +} + +// freeConn removes a connection from the map if it's present. It is a no-op if +// the conn was never accepted by Accept. +func (l *Limiter) freeConn(conn net.Conn) { + addrKey := addrKey(conn) + + l.l.Lock() + defer l.l.Unlock() + + cs, ok := l.cs[addrKey] + if !ok { + return + } + + delete(cs, conn) + if len(cs) == 0 { + delete(l.cs, addrKey) + } +} + +// Config returns the current limiter configuration. It is safe to call from any +// goroutine and does not block new connections being accepted. +func (l *Limiter) Config() Config { + cfgRaw := l.cfg.Load() + if cfg, ok := cfgRaw.(Config); ok { + return cfg + } + return Config{} +} + +// SetConfig dynamically updates the limiter configuration. It is safe to call +// from any goroutine. Note that if the limit is lowered, active conns will not +// be closed and may remain over the limit until they close naturally. +func (l *Limiter) SetConfig(c Config) { + l.cfg.Store(c) +} + +// HTTPConnStateFunc returns a func that can be passed as the ConnState field of +// an http.Server. This intercepts new HTTP connections to the server and +// applies the limiting to new connections. +// +// Note that if the conn is hijacked from the HTTP server then it will be freed +// in the limiter as if it was closed. Servers that use Hijacking must implement +// their own calls if they need to continue limiting the number of concurrent +// hijacked connections. +func (l *Limiter) HTTPConnStateFunc() func(net.Conn, http.ConnState) { + return func(conn net.Conn, state http.ConnState) { + switch state { + case http.StateNew: + _, err := l.Accept(conn) + if err != nil { + conn.Close() + } + case http.StateHijacked: + l.freeConn(conn) + case http.StateClosed: + // Maybe free the conn. This might be a conn we closed in the case above + // that was never counted as it was over limit but freeConn will be a + // no-op in that case. + l.freeConn(conn) + } + } +} diff --git a/vendor/github.com/hashicorp/go-connlimit/go.mod b/vendor/github.com/hashicorp/go-connlimit/go.mod new file mode 100644 index 00000000000..d01785e8462 --- /dev/null +++ b/vendor/github.com/hashicorp/go-connlimit/go.mod @@ -0,0 +1,8 @@ +module github.com/hashicorp/go-connlimit + +go 1.12 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/stretchr/testify v1.4.0 +) diff --git a/vendor/github.com/hashicorp/go-connlimit/go.sum b/vendor/github.com/hashicorp/go-connlimit/go.sum new file mode 100644 index 00000000000..3216266c6eb --- /dev/null +++ b/vendor/github.com/hashicorp/go-connlimit/go.sum @@ -0,0 +1,13 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/hashicorp/go-connlimit/wrap.go b/vendor/github.com/hashicorp/go-connlimit/wrap.go new file mode 100644 index 00000000000..b9922609b51 --- /dev/null +++ b/vendor/github.com/hashicorp/go-connlimit/wrap.go @@ -0,0 +1,27 @@ +package connlimit + +import "net" + +// WrappedConn wraps a net.Conn and free() func returned by Limiter.Accept so +// that when the wrapped connections Close method is called, its free func is +// also called. +type WrappedConn struct { + net.Conn + free func() +} + +// Wrap wraps a net.Conn's Close method so free() is called when Close is +// called. Useful when handing off tracked connections to libraries that close +// them. +func Wrap(conn net.Conn, free func()) net.Conn { + return &WrappedConn{ + Conn: conn, + free: free, + } +} + +// Close frees the tracked connection and closes the underlying net.Conn. +func (w *WrappedConn) Close() error { + w.free() + return w.Conn.Close() +} diff --git a/vendor/github.com/hashicorp/go-discover/README.md b/vendor/github.com/hashicorp/go-discover/README.md index 5023f75fbf7..8eeb44c83b5 100644 --- a/vendor/github.com/hashicorp/go-discover/README.md +++ b/vendor/github.com/hashicorp/go-discover/README.md @@ -25,15 +25,26 @@ function. * Amazon AWS [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/aws/aws_discover.go#L19-L33) * DigitalOcean [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/digitalocean/digitalocean_discover.go#L16-L24) * Google Cloud [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/gce/gce_discover.go#L17-L37) + * Linode [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/linode/linode_discover.go#L30-L41) + * mDNS [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/mdns/mdns_provider.go#L19-L31) * Microsoft Azure [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/azure/azure_discover.go#L16-L37) * Openstack [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/os/os_discover.go#L23-L38) * Scaleway [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/scaleway/scaleway_discover.go#L14-L22) * SoftLayer [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/softlayer/softlayer_discover.go#L16-L25) + * TencentCloud [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/tencentcloud/tencentcloud_discover.go#L23-L37) * Triton [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/triton/triton_discover.go#L17-L27) + * vSphere [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/vsphere/vsphere_discover.go#L148-L155) + * Packet [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/packet/packet_discover.go#L25-L35) + +The following providers are implemented in the go-discover/provider subdirectory +but aren't automatically registered. If you want to support these providers, +register them manually: + + * Kubernetes [Config options](https://github.com/hashicorp/go-discover/blob/master/provider/k8s/k8s_discover.go#L32-L51) HashiCorp maintains acceptance tests that regularly allocate and run tests with real resources to verify the behavior of several of these providers. Those -currently are: Amazon AWS, Microsoft Azure, Google Cloud, DigitalOcean, and Triton. +currently are: Amazon AWS, Microsoft Azure, Google Cloud, DigitalOcean, Triton, Scaleway, AliBaba Cloud, vSphere, and Packet.net. ### Config Example @@ -50,6 +61,12 @@ provider=digitalocean region=... tag_name=... api_token=... # Google Cloud provider=gce project_name=... zone_pattern=eu-west-* tag_value=consul credentials_file=... +# Linode +provider=linode tag_name=... region=us-east address_type=private_v4 api_token=... + +# mDNS +provider=mdns service=consul domain=local + # Microsoft Azure provider=azure tag_name=consul tag_value=... tenant_id=... client_id=... subscription_id=... secret_access_key=... @@ -62,9 +79,20 @@ provider=scaleway organization=my-org tag_name=consul-server token=... region=.. # SoftLayer provider=softlayer datacenter=dal06 tag_value=consul username=... api_key=... +# TencentCloud +provider=tencentcloud region=ap-guangzhou tag_key=consul tag_value=... access_key_id=... access_key_secret=... + # Triton provider=triton account=testaccount url=https://us-sw-1.api.joyentcloud.com key_id=... tag_key=consul-role tag_value=server +# vSphere +provider=vsphere category_name=consul-role tag_name=consul-server host=... user=... password=... insecure_ssl=[true|false] + +# Packet +provider=packet auth_token=token project=uuid url=... address_type=... + +# Kubernetes +provider=k8s label_selector="app = consul-server" ``` ## Command Line Tool Usage @@ -111,6 +139,25 @@ cfg := "provider=aws region=eu-west-1 ..." addrs, err := d.Addrs(cfg, l) ``` +You can also add support for providers that aren't registered by default: + +```go +// Imports at top of file +import "github.com/hashicorp/go-discover/provider/k8s" + +// support discovery for all supported providers +d := discover.Discover{} + +// support discovery for AWS and GCE only +d := discover.Discover{ + Providers : map[string]discover.Provider{ + "k8s": &k8s.Provider{}, + } +} + +// ... +``` + For complete API documentation, see [GoDoc](https://godoc.org/github.com/hashicorp/go-discover). The configuration for the supported providers is documented in the @@ -119,6 +166,9 @@ sub-package. ## Testing +**Note: Due to the `go.sum` checksum errors referenced in [#68](https://github.com/hashicorp/go-discover/issues/68), +you will need Go 1.11.4+ to build/test go-discover.** + Configuration tests can be run with Go: ``` diff --git a/vendor/github.com/hashicorp/go-discover/config.go b/vendor/github.com/hashicorp/go-discover/config.go index 1853c9fa1af..318018c75fc 100644 --- a/vendor/github.com/hashicorp/go-discover/config.go +++ b/vendor/github.com/hashicorp/go-discover/config.go @@ -77,7 +77,10 @@ func parse(in string) (Config, error) { } state = stateEqual default: - return nil, fmt.Errorf("%s: %s", key, val) + if val == "" { + return nil, fmt.Errorf("%s: - equals in key's value, enclosing double-quote needed %s=\"value-with-=-symbol\"", key, key) + } + return nil, fmt.Errorf("%s: error with key=value pair %s", key, val) } case stateEqual: diff --git a/vendor/github.com/hashicorp/go-discover/discover.go b/vendor/github.com/hashicorp/go-discover/discover.go index 5365a385141..369fd4153a2 100644 --- a/vendor/github.com/hashicorp/go-discover/discover.go +++ b/vendor/github.com/hashicorp/go-discover/discover.go @@ -14,10 +14,15 @@ import ( "github.com/hashicorp/go-discover/provider/azure" "github.com/hashicorp/go-discover/provider/digitalocean" "github.com/hashicorp/go-discover/provider/gce" + "github.com/hashicorp/go-discover/provider/linode" + "github.com/hashicorp/go-discover/provider/mdns" "github.com/hashicorp/go-discover/provider/os" + "github.com/hashicorp/go-discover/provider/packet" "github.com/hashicorp/go-discover/provider/scaleway" "github.com/hashicorp/go-discover/provider/softlayer" + "github.com/hashicorp/go-discover/provider/tencentcloud" "github.com/hashicorp/go-discover/provider/triton" + "github.com/hashicorp/go-discover/provider/vsphere" ) // Provider has lookup functions for meta data in a @@ -31,6 +36,13 @@ type Provider interface { Help() string } +// ProviderWithUserAgent is a provider that declares it's user agent. Not all +// providers support this. +type ProviderWithUserAgent interface { + // SetUserAgent sets the user agent on the provider to the provided string. + SetUserAgent(s string) +} + // Providers contains all available providers. var Providers = map[string]Provider{ "aliyun": &aliyun.Provider{}, @@ -38,10 +50,15 @@ var Providers = map[string]Provider{ "azure": &azure.Provider{}, "digitalocean": &digitalocean.Provider{}, "gce": &gce.Provider{}, + "linode": &linode.Provider{}, + "mdns": &mdns.Provider{}, "os": &os.Provider{}, "scaleway": &scaleway.Provider{}, "softlayer": &softlayer.Provider{}, + "tencentcloud": &tencentcloud.Provider{}, "triton": &triton.Provider{}, + "vsphere": &vsphere.Provider{}, + "packet": &packet.Provider{}, } // Discover looks up metadata in different cloud environments. @@ -50,10 +67,48 @@ type Discover struct { // If nil, the default list of providers is used. Providers map[string]Provider + // userAgent is the string to use for requests, when supported. + userAgent string + // once is used to initialize the actual list of providers. once sync.Once } +// Option is used as an initialization option/ +type Option func(*Discover) error + +// New creates a new discover client with the given options. +func New(opts ...Option) (*Discover, error) { + d := new(Discover) + + for _, opt := range opts { + if err := opt(d); err != nil { + return nil, err + } + } + + d.once.Do(d.initProviders) + + return d, nil +} + +// WithUserAgent allows specifying a custom user agent option to send with +// requests when the underlying client library supports it. +func WithUserAgent(agent string) Option { + return func(d *Discover) error { + d.userAgent = agent + return nil + } +} + +// WithProviders allows specifying your own set of providers. +func WithProviders(m map[string]Provider) Option { + return func(d *Discover) error { + d.Providers = m + return nil + } +} + // initProviders sets the list of providers to the // default list of providers if none are configured. func (d *Discover) initProviders() { @@ -122,5 +177,10 @@ func (d *Discover) Addrs(cfg string, l *log.Logger) ([]string, error) { } l.Printf("[DEBUG] discover: Using provider %q", name) + if typ, ok := p.(ProviderWithUserAgent); ok { + typ.SetUserAgent(d.userAgent) + return p.Addrs(args, l) + } + return p.Addrs(args, l) } diff --git a/vendor/github.com/hashicorp/go-discover/go.mod b/vendor/github.com/hashicorp/go-discover/go.mod new file mode 100644 index 00000000000..20a6aef8206 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/go.mod @@ -0,0 +1,77 @@ +module github.com/hashicorp/go-discover + +require ( + cloud.google.com/go v0.26.0 // indirect + github.com/Azure/azure-sdk-for-go v16.0.0+incompatible + github.com/Azure/go-autorest v10.7.0+incompatible + github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af // indirect + github.com/aws/aws-sdk-go v1.25.41 + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661 + github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect + github.com/digitalocean/godo v1.1.1 + github.com/dimchansky/utfbom v1.1.0 // indirect + github.com/dnaeon/go-vcr v1.0.1 // indirect + github.com/fsnotify/fsnotify v1.4.7 // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/gogo/protobuf v1.1.1 // indirect + github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect + github.com/golang/protobuf v1.2.0 // indirect + github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c // indirect + github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135 // indirect + github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf // indirect + github.com/googleapis/gnostic v0.2.0 // indirect + github.com/gophercloud/gophercloud v0.0.0-20180828235145-f29afc2cceca + github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c // indirect + github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect + github.com/hashicorp/go-multierror v1.0.0 + github.com/hashicorp/mdns v1.0.1 + github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 + github.com/hpcloud/tail v1.0.0 // indirect + github.com/imdario/mergo v0.3.6 // indirect + github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da // indirect + github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62 + github.com/json-iterator/go v1.1.5 // indirect + github.com/jtolds/gls v4.2.1+incompatible // indirect + github.com/likexian/gokit v0.20.16 + github.com/linode/linodego v0.7.1 + github.com/mitchellh/go-homedir v1.0.0 + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 + github.com/onsi/ginkgo v1.6.0 // indirect + github.com/onsi/gomega v1.4.1 // indirect + github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c + github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pkg/errors v0.8.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 // indirect + github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect + github.com/sirupsen/logrus v1.0.6 // indirect + github.com/smartystreets/assertions v0.0.0-20180820201707-7c9eb446e3cf // indirect + github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect + github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d + github.com/spf13/pflag v1.0.2 // indirect + github.com/stretchr/testify v1.2.2 // indirect + github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible + github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9 // indirect + github.com/vmware/govmomi v0.18.0 + golang.org/x/oauth2 v0.0.0-20170807180024-9a379c6b3e95 + golang.org/x/text v0.3.0 // indirect + golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2 // indirect + google.golang.org/api v0.0.0-20180829000535-087779f1d2c9 + google.golang.org/appengine v1.1.0 // indirect + gopkg.in/airbrake/gobrake.v2 v2.0.9 // indirect + gopkg.in/fsnotify.v1 v1.4.7 // indirect + gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/resty.v1 v1.12.0 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + gopkg.in/yaml.v2 v2.2.1 // indirect + k8s.io/api v0.0.0-20180806132203-61b11ee65332 + k8s.io/apimachinery v0.0.0-20180821005732-488889b0007f + k8s.io/client-go v8.0.0+incompatible + launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect +) + +go 1.13 diff --git a/vendor/github.com/hashicorp/go-discover/go.sum b/vendor/github.com/hashicorp/go-discover/go.sum new file mode 100644 index 00000000000..0d9df8c56ad --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/go.sum @@ -0,0 +1,174 @@ +cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/Azure/azure-sdk-for-go v16.0.0+incompatible h1:gr1qKY/Ll72VjFTZmaBwRK1yQHAxCnV25ekOKroc9ws= +github.com/Azure/azure-sdk-for-go v16.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-autorest v10.7.0+incompatible h1:dB+dKSLGdJLEhU/FoZTSNSPMZuE5H4M5p5zgSct7qwM= +github.com/Azure/go-autorest v10.7.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af h1:DBNMBMuMiWYu0b+8KMJuWmfCkcxl09JwdlqwDZZ6U14= +github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw= +github.com/aws/aws-sdk-go v1.15.24 h1:xLAdTA/ore6xdPAljzZRed7IGqQgC+nY+ERS5vaj4Ro= +github.com/aws/aws-sdk-go v1.15.24/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.25.41 h1:/hj7nZ0586wFqpwjNpzWiUTwtaMgxAZNZKHay80MdXw= +github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661 h1:lrWnAyy/F72MbxIxFUzKmcMCdt9Oi8RzpAxzTNQHD7o= +github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/digitalocean/godo v1.1.1 h1:v0A7yF3xmKLjjdJGIeBbINfMufcrrRhqZsxuVQMoT+U= +github.com/digitalocean/godo v1.1.1/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-ini/ini v1.25.4 h1:Mujh4R/dH6YL8bxuISne3xX2+qcQ9p0IxKAP6ExWoUo= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135 h1:zLTLjkaOFEFIOxY5BWLFLwh+cL8vOBW4XJ2aqLE/Tf0= +github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/googleapis/gnostic v0.2.0 h1:l6N3VoaVzTncYYW+9yOz2LJJammFZGBO13sqgEhpy9g= +github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gophercloud/gophercloud v0.0.0-20180828235145-f29afc2cceca h1:wobTb8SE189AuxzEKClyYxiI4nUGWlpVtl13eLiFlOE= +github.com/gophercloud/gophercloud v0.0.0-20180828235145-f29afc2cceca/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= +github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c h1:16eHWuMGvCjSfgRJKqIzapE78onvvTbdi1rMkU00lZw= +github.com/gopherjs/gopherjs v0.0.0-20180825215210-0210a2f0f73c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1 h1:XFSOubp8KWB+Jd2PDyaX5xUd5bhSP/+pTDZVDMzZJM8= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443 h1:O/pT5C1Q3mVXMyuqg7yuAWUg/jMZR1/0QTzTRdNR6Uw= +github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443/go.mod h1:bEpDU35nTu0ey1EXjwNwPjI9xErAsoOCmcMb9GKvyxo= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da h1:FjHUJJ7oBW4G/9j1KzlHaXL09LyMVM9rupS39lncbXk= +github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 h1:12VvqtR6Aowv3l/EQUlocDHW2Cp4G9WJVH7uyH8QFJE= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62 h1:JHCT6xuyPUrbbgAPE/3dqlvUKzRHMNuTBKKUb6OeR/k= +github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA= +github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE= +github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/likexian/gokit v0.0.0-20190309162924-0a377eecf7aa/go.mod h1:QdfYv6y6qPA9pbBA2qXtoT8BMKha6UyNbxWGWl/9Jfk= +github.com/likexian/gokit v0.0.0-20190418170008-ace88ad0983b/go.mod h1:KKqSnk/VVSW8kEyO2vVCXoanzEutKdlBAPohmGXkxCk= +github.com/likexian/gokit v0.0.0-20190501133040-e77ea8b19cdc/go.mod h1:3kvONayqCaj+UgrRZGpgfXzHdMYCAO0KAt4/8n0L57Y= +github.com/likexian/gokit v0.20.16 h1:8ypmVXLx8yIvlTwzH8Ybz8LDAfWjdy0W5O354JWPjA4= +github.com/likexian/gokit v0.20.16/go.mod h1:kn+nTv3tqh6yhor9BC4Lfiu58SmH8NmQ2PmEl+uM6nU= +github.com/likexian/simplejson-go v0.0.0-20190409170913-40473a74d76d/go.mod h1:Typ1BfnATYtZ/+/shXfFYLrovhFyuKvzwrdOnIDHlmg= +github.com/likexian/simplejson-go v0.0.0-20190419151922-c1f9f0b4f084/go.mod h1:U4O1vIJvIKwbMZKUJ62lppfdvkCdVd2nfMimHK81eec= +github.com/likexian/simplejson-go v0.0.0-20190502021454-d8787b4bfa0b/go.mod h1:3BWwtmKP9cXWwYCr5bkoVDEfLywacOv0s06OBEDpyt8= +github.com/linode/linodego v0.7.1 h1:4WZmMpSA2NRwlPZcc0+4Gyn7rr99Evk9bnr0B3gXRKE= +github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZinAbj2sY= +github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2 h1:BQ1HW7hr4IVovMwWg0E0PYcyW8CzqDcVmaew9cujU4s= +github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk= +github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.1 h1:PZSj/UFNaVp3KxrzHOcS7oyuWA7LoOY/77yCTEFu21U= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c h1:vwpFWvAO8DeIZfFeqASzZfsxuWPno9ncAebBEP0N3uE= +github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03 h1:Wdi9nwnhFNAlseAOekn6B5G/+GMtks9UKbvRU/CMM/o= +github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03/go.mod h1:gRAiPF5C5Nd0eyyRdqIu9qTiFSoZzpTq727b5B8fkkU= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sirupsen/logrus v1.0.6 h1:hcP1GmhGigz/O7h1WVUM5KklBp1JoNS9FggWKdj/j3s= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/smartystreets/assertions v0.0.0-20180820201707-7c9eb446e3cf h1:6V1qxN6Usn4jy8unvggSJz/NC790tefw8Zdy6OZS5co= +github.com/smartystreets/assertions v0.0.0-20180820201707-7c9eb446e3cf/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a h1:JSvGDIbmil4Ui/dDdFBExb7/cmkNjyX5F97oglmvCDo= +github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= +github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d h1:bVQRCxQvfjNUeRqaY/uT0tFuvuFY0ulgnczuR684Xic= +github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d/go.mod h1:Cw4GTlQccdRGSEf6KiMju767x0NEHE0YIVPJSaXjlsw= +github.com/spf13/pflag v1.0.2 h1:Fy0orTDgHdbnzHcsOgfCN4LtHf0ec3wwtiwJqwvf3Gc= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible h1:8uRvJleFpqLsO77WaAh2UrasMOzd8MxXrNj20e7El+Q= +github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4= +github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9 h1:/Bsw4C+DEdqPjt8vAqaC9LAqpAQnaCQQqmolqq3S1T4= +github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9/go.mod h1:RHkNRtSLfOK7qBTHaeSX1D6BNpI3qw7NTxsmNr4RvN8= +github.com/vmware/govmomi v0.18.0 h1:f7QxSmP7meCtoAmiKZogvVbLInT+CZx6Px6K5rYsJZo= +github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3 h1:KYQXGkl6vs02hK7pK4eIbw0NpNPedieTSTEiJ//bwGs= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519 h1:x6rhz8Y9CjbgQkccRGmELH6K+LJj7tOoh3XWeC1yaQM= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/oauth2 v0.0.0-20170807180024-9a379c6b3e95 h1:RS+wSrhdVci7CsPwJaMN8exaP3UTuQU0qB34R/E/JD0= +golang.org/x/oauth2 v0.0.0-20170807180024-9a379c6b3e95/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5 h1:x6r4Jo0KNzOOzYd8lbcRsqjuqEASK6ob3auvWYM4/8U= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2 h1:+DCIGbF/swA92ohVg0//6X2IVY3KZs6p9mix0ziNYJM= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +google.golang.org/api v0.0.0-20180829000535-087779f1d2c9 h1:z1TeLUmxf9ws9KLICfmX+KGXTs+rjm+aGWzfsv7MZ9w= +google.golang.org/api v0.0.0-20180829000535-087779f1d2c9/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +k8s.io/api v0.0.0-20180806132203-61b11ee65332 h1:+ED/2NBbOoeWB9QrGTHxZI7UnE7rnHPKKumOl0WXphs= +k8s.io/api v0.0.0-20180806132203-61b11ee65332/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= +k8s.io/apimachinery v0.0.0-20180821005732-488889b0007f h1:V0PkbgaYp5JqCmzLyRmssDtzim0NShXM8gYi4fcX230= +k8s.io/apimachinery v0.0.0-20180821005732-488889b0007f/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= +k8s.io/client-go v8.0.0+incompatible h1:tTI4hRmb1DRMl4fG6Vclfdi6nTM82oIrTT7HfitmxC4= +k8s.io/client-go v8.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= diff --git a/vendor/github.com/hashicorp/go-discover/provider/aliyun/aliyun_discover.go b/vendor/github.com/hashicorp/go-discover/provider/aliyun/aliyun_discover.go index 5cde8075841..39d2be4ccf8 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aliyun/aliyun_discover.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aliyun/aliyun_discover.go @@ -10,7 +10,13 @@ import ( "github.com/denverdino/aliyungo/ecs" ) -type Provider struct{} +type Provider struct { + userAgent string +} + +func (p *Provider) SetUserAgent(s string) { + p.userAgent = s +} func (p *Provider) Help() string { return `Aliyun(Alibaba Cloud): @@ -57,6 +63,10 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error svc := ecs.NewClient(accessKeyID, accessKeySecret) + if p.userAgent != "" { + svc.SetUserAgent(p.userAgent) + } + l.Printf("[INFO] discover-aliyun: Filter instances with %s=%s", tagKey, tagValue) resp, err := svc.DescribeInstancesWithRaw(&ecs.DescribeInstancesArgs{ RegionId: common.Region(region), diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/NOTICE.txt b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/NOTICE.txt index 5f14d1162ed..899129ecc46 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/NOTICE.txt +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/NOTICE.txt @@ -1,3 +1,3 @@ AWS SDK for Go -Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. Copyright 2014-2015 Stripe, Inc. diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go index 56fdfc2bfc7..99849c0e19c 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go @@ -138,8 +138,27 @@ type RequestFailure interface { RequestID() string } -// NewRequestFailure returns a new request error wrapper for the given Error -// provided. +// NewRequestFailure returns a wrapped error with additional information for +// request status code, and service requestID. +// +// Should be used to wrap all request which involve service requests. Even if +// the request failed without a service response, but had an HTTP status code +// that may be meaningful. func NewRequestFailure(err Error, statusCode int, reqID string) RequestFailure { return newRequestError(err, statusCode, reqID) } + +// UnmarshalError provides the interface for the SDK failing to unmarshal data. +type UnmarshalError interface { + awsError + Bytes() []byte +} + +// NewUnmarshalError returns an initialized UnmarshalError error wrapper adding +// the bytes that fail to unmarshal to the error. +func NewUnmarshalError(err error, msg string, bytes []byte) UnmarshalError { + return &unmarshalError{ + awsError: New("UnmarshalError", msg, err), + bytes: bytes, + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go index 0202a008f5d..9cf7eaf4007 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go @@ -1,6 +1,9 @@ package awserr -import "fmt" +import ( + "encoding/hex" + "fmt" +) // SprintError returns a string of the formatted error code. // @@ -119,6 +122,7 @@ type requestError struct { awsError statusCode int requestID string + bytes []byte } // newRequestError returns a wrapped error with additional information for @@ -170,6 +174,29 @@ func (r requestError) OrigErrs() []error { return []error{r.OrigErr()} } +type unmarshalError struct { + awsError + bytes []byte +} + +// Error returns the string representation of the error. +// Satisfies the error interface. +func (e unmarshalError) Error() string { + extra := hex.Dump(e.bytes) + return SprintError(e.Code(), e.Message(), extra, e.OrigErr()) +} + +// String returns the string representation of the error. +// Alias for Error to satisfy the stringer interface. +func (e unmarshalError) String() string { + return e.Error() +} + +// Bytes returns the bytes that failed to unmarshal. +func (e unmarshalError) Bytes() []byte { + return e.bytes +} + // An error list that satisfies the golang interface type errorList []error @@ -181,7 +208,7 @@ func (e errorList) Error() string { // How do we want to handle the array size being zero if size := len(e); size > 0 { for i := 0; i < size; i++ { - msg += fmt.Sprintf("%s", e[i].Error()) + msg += e[i].Error() // We check the next index to see if it is within the slice. // If it is, then we append a newline. We do this, because unit tests // could be broken with the additional '\n' diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go index 59fa4a558a9..142a7a01c52 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go @@ -15,7 +15,7 @@ func DeepEqual(a, b interface{}) bool { rb := reflect.Indirect(reflect.ValueOf(b)) if raValid, rbValid := ra.IsValid(), rb.IsValid(); !raValid && !rbValid { - // If the elements are both nil, and of the same type the are equal + // If the elements are both nil, and of the same type they are equal // If they are of different types they are not equal return reflect.TypeOf(a) == reflect.TypeOf(b) } else if raValid != rbValid { diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go index 11c52c38968..a4eb6a7f43a 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go @@ -70,7 +70,7 @@ func rValuesAtPath(v interface{}, path string, createPath, caseSensitive, nilTer value = value.FieldByNameFunc(func(name string) bool { if c == name { return true - } else if !caseSensitive && strings.ToLower(name) == strings.ToLower(c) { + } else if !caseSensitive && strings.EqualFold(name, c) { return true } return false @@ -185,13 +185,12 @@ func ValuesAtPath(i interface{}, path string) ([]interface{}, error) { // SetValueAtPath sets a value at the case insensitive lexical path inside // of a structure. func SetValueAtPath(i interface{}, path string, v interface{}) { - if rvals := rValuesAtPath(i, path, true, false, v == nil); rvals != nil { - for _, rval := range rvals { - if rval.Kind() == reflect.Ptr && rval.IsNil() { - continue - } - setValue(rval, v) + rvals := rValuesAtPath(i, path, true, false, v == nil) + for _, rval := range rvals { + if rval.Kind() == reflect.Ptr && rval.IsNil() { + continue } + setValue(rval, v) } } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go index b6432f1a118..645df2450fc 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go @@ -23,28 +23,27 @@ func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) { case reflect.Struct: buf.WriteString("{\n") - names := []string{} for i := 0; i < v.Type().NumField(); i++ { - name := v.Type().Field(i).Name - f := v.Field(i) - if name[0:1] == strings.ToLower(name[0:1]) { + ft := v.Type().Field(i) + fv := v.Field(i) + + if ft.Name[0:1] == strings.ToLower(ft.Name[0:1]) { continue // ignore unexported fields } - if (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice) && f.IsNil() { + if (fv.Kind() == reflect.Ptr || fv.Kind() == reflect.Slice) && fv.IsNil() { continue // ignore unset fields } - names = append(names, name) - } - for i, n := range names { - val := v.FieldByName(n) buf.WriteString(strings.Repeat(" ", indent+2)) - buf.WriteString(n + ": ") - stringValue(val, indent+2, buf) + buf.WriteString(ft.Name + ": ") - if i < len(names)-1 { - buf.WriteString(",\n") + if tag := ft.Tag.Get("sensitive"); tag == "true" { + buf.WriteString("") + } else { + stringValue(fv, indent+2, buf) } + + buf.WriteString(",\n") } buf.WriteString("\n" + strings.Repeat(" ", indent) + "}") diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/client.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/client.go index 17fc76a0f66..03334d69207 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/client.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/client.go @@ -2,7 +2,6 @@ package client import ( "fmt" - "net/http/httputil" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/client/metadata" @@ -13,9 +12,16 @@ import ( type Config struct { Config *aws.Config Handlers request.Handlers + PartitionID string Endpoint string SigningRegion string SigningName string + + // States that the signing name did not come from a modeled source but + // was derived based on other data. Used by service client constructors + // to determine if the signin name can be overridden based on metadata the + // service has. + SigningNameDerived bool } // ConfigProvider provides a generic way for a service client to receive @@ -46,7 +52,7 @@ func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Handlers, op svc := &Client{ Config: cfg, ClientInfo: info, - Handlers: handlers, + Handlers: handlers.Copy(), } switch retryer, ok := cfg.Retryer.(request.Retryer); { @@ -59,7 +65,7 @@ func New(cfg aws.Config, info metadata.ClientInfo, handlers request.Handlers, op default: maxRetries := aws.IntValue(cfg.MaxRetries) if cfg.MaxRetries == nil || maxRetries == aws.UseServiceDefaultRetries { - maxRetries = 3 + maxRetries = DefaultRetryerMaxNumRetries } svc.Retryer = DefaultRetryer{NumMaxRetries: maxRetries} } @@ -86,61 +92,6 @@ func (c *Client) AddDebugHandlers() { return } - c.Handlers.Send.PushFront(logRequest) - c.Handlers.Send.PushBack(logResponse) -} - -const logReqMsg = `DEBUG: Request %s/%s Details: ----[ REQUEST POST-SIGN ]----------------------------- -%s ------------------------------------------------------` - -const logReqErrMsg = `DEBUG ERROR: Request %s/%s: ----[ REQUEST DUMP ERROR ]----------------------------- -%s ------------------------------------------------------` - -func logRequest(r *request.Request) { - logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) - dumpedBody, err := httputil.DumpRequestOut(r.HTTPRequest, logBody) - if err != nil { - r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, r.ClientInfo.ServiceName, r.Operation.Name, err)) - return - } - - if logBody { - // Reset the request body because dumpRequest will re-wrap the r.HTTPRequest's - // Body as a NoOpCloser and will not be reset after read by the HTTP - // client reader. - r.ResetBody() - } - - r.Config.Logger.Log(fmt.Sprintf(logReqMsg, r.ClientInfo.ServiceName, r.Operation.Name, string(dumpedBody))) -} - -const logRespMsg = `DEBUG: Response %s/%s Details: ----[ RESPONSE ]-------------------------------------- -%s ------------------------------------------------------` - -const logRespErrMsg = `DEBUG ERROR: Response %s/%s: ----[ RESPONSE DUMP ERROR ]----------------------------- -%s ------------------------------------------------------` - -func logResponse(r *request.Request) { - var msg = "no response data" - if r.HTTPResponse != nil { - logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) - dumpedBody, err := httputil.DumpResponse(r.HTTPResponse, logBody) - if err != nil { - r.Config.Logger.Log(fmt.Sprintf(logRespErrMsg, r.ClientInfo.ServiceName, r.Operation.Name, err)) - return - } - - msg = string(dumpedBody) - } else if r.Error != nil { - msg = r.Error.Error() - } - r.Config.Logger.Log(fmt.Sprintf(logRespMsg, r.ClientInfo.ServiceName, r.Operation.Name, msg)) + c.Handlers.Send.PushFrontNamed(LogHTTPRequestHandler) + c.Handlers.Send.PushBackNamed(LogHTTPResponseHandler) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go index 43a3676b797..9f6af19dd45 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go @@ -1,90 +1,177 @@ package client import ( - "math/rand" - "sync" + "math" + "strconv" "time" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkrand" ) // DefaultRetryer implements basic retry logic using exponential backoff for -// most services. If you want to implement custom retry logic, implement the -// request.Retryer interface or create a structure type that composes this -// struct and override the specific methods. For example, to override only -// the MaxRetries method: +// most services. If you want to implement custom retry logic, you can implement the +// request.Retryer interface. // -// type retryer struct { -// service.DefaultRetryer -// } -// -// // This implementation always has 100 max retries -// func (d retryer) MaxRetries() uint { return 100 } type DefaultRetryer struct { + // Num max Retries is the number of max retries that will be performed. + // By default, this is zero. NumMaxRetries int + + // MinRetryDelay is the minimum retry delay after which retry will be performed. + // If not set, the value is 0ns. + MinRetryDelay time.Duration + + // MinThrottleRetryDelay is the minimum retry delay when throttled. + // If not set, the value is 0ns. + MinThrottleDelay time.Duration + + // MaxRetryDelay is the maximum retry delay before which retry must be performed. + // If not set, the value is 0ns. + MaxRetryDelay time.Duration + + // MaxThrottleDelay is the maximum retry delay when throttled. + // If not set, the value is 0ns. + MaxThrottleDelay time.Duration } +const ( + // DefaultRetryerMaxNumRetries sets maximum number of retries + DefaultRetryerMaxNumRetries = 3 + + // DefaultRetryerMinRetryDelay sets minimum retry delay + DefaultRetryerMinRetryDelay = 30 * time.Millisecond + + // DefaultRetryerMinThrottleDelay sets minimum delay when throttled + DefaultRetryerMinThrottleDelay = 500 * time.Millisecond + + // DefaultRetryerMaxRetryDelay sets maximum retry delay + DefaultRetryerMaxRetryDelay = 300 * time.Second + + // DefaultRetryerMaxThrottleDelay sets maximum delay when throttled + DefaultRetryerMaxThrottleDelay = 300 * time.Second +) + // MaxRetries returns the number of maximum returns the service will use to make // an individual API request. func (d DefaultRetryer) MaxRetries() int { return d.NumMaxRetries } -var seededRand = rand.New(&lockedSource{src: rand.NewSource(time.Now().UnixNano())}) +// setRetryerDefaults sets the default values of the retryer if not set +func (d *DefaultRetryer) setRetryerDefaults() { + if d.MinRetryDelay == 0 { + d.MinRetryDelay = DefaultRetryerMinRetryDelay + } + if d.MaxRetryDelay == 0 { + d.MaxRetryDelay = DefaultRetryerMaxRetryDelay + } + if d.MinThrottleDelay == 0 { + d.MinThrottleDelay = DefaultRetryerMinThrottleDelay + } + if d.MaxThrottleDelay == 0 { + d.MaxThrottleDelay = DefaultRetryerMaxThrottleDelay + } +} // RetryRules returns the delay duration before retrying this request again func (d DefaultRetryer) RetryRules(r *request.Request) time.Duration { - // Set the upper limit of delay in retrying at ~five minutes - minTime := 30 - throttle := d.shouldThrottle(r) - if throttle { - minTime = 500 + + // if number of max retries is zero, no retries will be performed. + if d.NumMaxRetries == 0 { + return 0 + } + + // Sets default value for retryer members + d.setRetryerDefaults() + + // minDelay is the minimum retryer delay + minDelay := d.MinRetryDelay + + var initialDelay time.Duration + + isThrottle := r.IsErrorThrottle() + if isThrottle { + if delay, ok := getRetryAfterDelay(r); ok { + initialDelay = delay + } + minDelay = d.MinThrottleDelay } retryCount := r.RetryCount - if retryCount > 13 { - retryCount = 13 - } else if throttle && retryCount > 8 { - retryCount = 8 + + // maxDelay the maximum retryer delay + maxDelay := d.MaxRetryDelay + + if isThrottle { + maxDelay = d.MaxThrottleDelay } - delay := (1 << uint(retryCount)) * (seededRand.Intn(minTime) + minTime) - return time.Duration(delay) * time.Millisecond + var delay time.Duration + + // Logic to cap the retry count based on the minDelay provided + actualRetryCount := int(math.Log2(float64(minDelay))) + 1 + if actualRetryCount < 63-retryCount { + delay = time.Duration(1< maxDelay { + delay = getJitterDelay(maxDelay / 2) + } + } else { + delay = getJitterDelay(maxDelay / 2) + } + return delay + initialDelay +} + +// getJitterDelay returns a jittered delay for retry +func getJitterDelay(duration time.Duration) time.Duration { + return time.Duration(sdkrand.SeededRand.Int63n(int64(duration)) + int64(duration)) } // ShouldRetry returns true if the request should be retried. func (d DefaultRetryer) ShouldRetry(r *request.Request) bool { - if r.HTTPResponse.StatusCode >= 500 { - return true + + // ShouldRetry returns false if number of max retries is 0. + if d.NumMaxRetries == 0 { + return false } - return r.IsErrorRetryable() || d.shouldThrottle(r) -} -// ShouldThrottle returns true if the request should be throttled. -func (d DefaultRetryer) shouldThrottle(r *request.Request) bool { - if r.HTTPResponse.StatusCode == 502 || - r.HTTPResponse.StatusCode == 503 || - r.HTTPResponse.StatusCode == 504 { - return true + // If one of the other handlers already set the retry state + // we don't want to override it based on the service's state + if r.Retryable != nil { + return *r.Retryable } - return r.IsErrorThrottle() + return r.IsErrorRetryable() || r.IsErrorThrottle() } -// lockedSource is a thread-safe implementation of rand.Source -type lockedSource struct { - lk sync.Mutex - src rand.Source -} +// This will look in the Retry-After header, RFC 7231, for how long +// it will wait before attempting another request +func getRetryAfterDelay(r *request.Request) (time.Duration, bool) { + if !canUseRetryAfterHeader(r) { + return 0, false + } + + delayStr := r.HTTPResponse.Header.Get("Retry-After") + if len(delayStr) == 0 { + return 0, false + } -func (r *lockedSource) Int63() (n int64) { - r.lk.Lock() - n = r.src.Int63() - r.lk.Unlock() - return + delay, err := strconv.Atoi(delayStr) + if err != nil { + return 0, false + } + + return time.Duration(delay) * time.Second, true } -func (r *lockedSource) Seed(seed int64) { - r.lk.Lock() - r.src.Seed(seed) - r.lk.Unlock() +// Will look at the status code to see if the retry header pertains to +// the status code. +func canUseRetryAfterHeader(r *request.Request) bool { + switch r.HTTPResponse.StatusCode { + case 429: + case 503: + default: + return false + } + + return true } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go new file mode 100644 index 00000000000..8958c32d4e9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/logger.go @@ -0,0 +1,194 @@ +package client + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "net/http/httputil" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" +) + +const logReqMsg = `DEBUG: Request %s/%s Details: +---[ REQUEST POST-SIGN ]----------------------------- +%s +-----------------------------------------------------` + +const logReqErrMsg = `DEBUG ERROR: Request %s/%s: +---[ REQUEST DUMP ERROR ]----------------------------- +%s +------------------------------------------------------` + +type logWriter struct { + // Logger is what we will use to log the payload of a response. + Logger aws.Logger + // buf stores the contents of what has been read + buf *bytes.Buffer +} + +func (logger *logWriter) Write(b []byte) (int, error) { + return logger.buf.Write(b) +} + +type teeReaderCloser struct { + // io.Reader will be a tee reader that is used during logging. + // This structure will read from a body and write the contents to a logger. + io.Reader + // Source is used just to close when we are done reading. + Source io.ReadCloser +} + +func (reader *teeReaderCloser) Close() error { + return reader.Source.Close() +} + +// LogHTTPRequestHandler is a SDK request handler to log the HTTP request sent +// to a service. Will include the HTTP request body if the LogLevel of the +// request matches LogDebugWithHTTPBody. +var LogHTTPRequestHandler = request.NamedHandler{ + Name: "awssdk.client.LogRequest", + Fn: logRequest, +} + +func logRequest(r *request.Request) { + logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) + bodySeekable := aws.IsReaderSeekable(r.Body) + + b, err := httputil.DumpRequestOut(r.HTTPRequest, logBody) + if err != nil { + r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, err)) + return + } + + if logBody { + if !bodySeekable { + r.SetReaderBody(aws.ReadSeekCloser(r.HTTPRequest.Body)) + } + // Reset the request body because dumpRequest will re-wrap the + // r.HTTPRequest's Body as a NoOpCloser and will not be reset after + // read by the HTTP client reader. + if err := r.Error; err != nil { + r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, err)) + return + } + } + + r.Config.Logger.Log(fmt.Sprintf(logReqMsg, + r.ClientInfo.ServiceName, r.Operation.Name, string(b))) +} + +// LogHTTPRequestHeaderHandler is a SDK request handler to log the HTTP request sent +// to a service. Will only log the HTTP request's headers. The request payload +// will not be read. +var LogHTTPRequestHeaderHandler = request.NamedHandler{ + Name: "awssdk.client.LogRequestHeader", + Fn: logRequestHeader, +} + +func logRequestHeader(r *request.Request) { + b, err := httputil.DumpRequestOut(r.HTTPRequest, false) + if err != nil { + r.Config.Logger.Log(fmt.Sprintf(logReqErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, err)) + return + } + + r.Config.Logger.Log(fmt.Sprintf(logReqMsg, + r.ClientInfo.ServiceName, r.Operation.Name, string(b))) +} + +const logRespMsg = `DEBUG: Response %s/%s Details: +---[ RESPONSE ]-------------------------------------- +%s +-----------------------------------------------------` + +const logRespErrMsg = `DEBUG ERROR: Response %s/%s: +---[ RESPONSE DUMP ERROR ]----------------------------- +%s +-----------------------------------------------------` + +// LogHTTPResponseHandler is a SDK request handler to log the HTTP response +// received from a service. Will include the HTTP response body if the LogLevel +// of the request matches LogDebugWithHTTPBody. +var LogHTTPResponseHandler = request.NamedHandler{ + Name: "awssdk.client.LogResponse", + Fn: logResponse, +} + +func logResponse(r *request.Request) { + lw := &logWriter{r.Config.Logger, bytes.NewBuffer(nil)} + + if r.HTTPResponse == nil { + lw.Logger.Log(fmt.Sprintf(logRespErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, "request's HTTPResponse is nil")) + return + } + + logBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody) + if logBody { + r.HTTPResponse.Body = &teeReaderCloser{ + Reader: io.TeeReader(r.HTTPResponse.Body, lw), + Source: r.HTTPResponse.Body, + } + } + + handlerFn := func(req *request.Request) { + b, err := httputil.DumpResponse(req.HTTPResponse, false) + if err != nil { + lw.Logger.Log(fmt.Sprintf(logRespErrMsg, + req.ClientInfo.ServiceName, req.Operation.Name, err)) + return + } + + lw.Logger.Log(fmt.Sprintf(logRespMsg, + req.ClientInfo.ServiceName, req.Operation.Name, string(b))) + + if logBody { + b, err := ioutil.ReadAll(lw.buf) + if err != nil { + lw.Logger.Log(fmt.Sprintf(logRespErrMsg, + req.ClientInfo.ServiceName, req.Operation.Name, err)) + return + } + + lw.Logger.Log(string(b)) + } + } + + const handlerName = "awsdk.client.LogResponse.ResponseBody" + + r.Handlers.Unmarshal.SetBackNamed(request.NamedHandler{ + Name: handlerName, Fn: handlerFn, + }) + r.Handlers.UnmarshalError.SetBackNamed(request.NamedHandler{ + Name: handlerName, Fn: handlerFn, + }) +} + +// LogHTTPResponseHeaderHandler is a SDK request handler to log the HTTP +// response received from a service. Will only log the HTTP response's headers. +// The response payload will not be read. +var LogHTTPResponseHeaderHandler = request.NamedHandler{ + Name: "awssdk.client.LogResponseHeader", + Fn: logResponseHeader, +} + +func logResponseHeader(r *request.Request) { + if r.Config.Logger == nil { + return + } + + b, err := httputil.DumpResponse(r.HTTPResponse, false) + if err != nil { + r.Config.Logger.Log(fmt.Sprintf(logRespErrMsg, + r.ClientInfo.ServiceName, r.Operation.Name, err)) + return + } + + r.Config.Logger.Log(fmt.Sprintf(logRespMsg, + r.ClientInfo.ServiceName, r.Operation.Name, string(b))) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go index 4778056ddfd..0c48f72e08e 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go @@ -3,7 +3,9 @@ package metadata // ClientInfo wraps immutable data from the client.Client structure. type ClientInfo struct { ServiceName string + ServiceID string APIVersion string + PartitionID string Endpoint string SigningName string SigningRegion string diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go new file mode 100644 index 00000000000..881d575f010 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/client/no_op_retryer.go @@ -0,0 +1,28 @@ +package client + +import ( + "time" + + "github.com/aws/aws-sdk-go/aws/request" +) + +// NoOpRetryer provides a retryer that performs no retries. +// It should be used when we do not want retries to be performed. +type NoOpRetryer struct{} + +// MaxRetries returns the number of maximum returns the service will use to make +// an individual API; For NoOpRetryer the MaxRetries will always be zero. +func (d NoOpRetryer) MaxRetries() int { + return 0 +} + +// ShouldRetry will always return false for NoOpRetryer, as it should never retry. +func (d NoOpRetryer) ShouldRetry(_ *request.Request) bool { + return false +} + +// RetryRules returns the delay duration before retrying this request again; +// since NoOpRetryer does not retry, RetryRules always returns 0. +func (d NoOpRetryer) RetryRules(_ *request.Request) time.Duration { + return 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/config.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/config.go index d58b81280ac..93ebbcc13f8 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/config.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/config.go @@ -18,13 +18,13 @@ const UseServiceDefaultRetries = -1 type RequestRetryer interface{} // A Config provides service configuration for service clients. By default, -// all clients will use the defaults.DefaultConfig tructure. +// all clients will use the defaults.DefaultConfig structure. // -// // Create Session with MaxRetry configuration to be shared by multiple +// // Create Session with MaxRetries configuration to be shared by multiple // // service clients. -// sess, err := session.NewSession(&aws.Config{ +// sess := session.Must(session.NewSession(&aws.Config{ // MaxRetries: aws.Int(3), -// }) +// })) // // // Create S3 service client with a specific Region. // svc := s3.New(sess, &aws.Config{ @@ -45,21 +45,28 @@ type Config struct { // that overrides the default generated endpoint for a client. Set this // to `""` to use the default generated endpoint. // - // @note You must still provide a `Region` value when specifying an - // endpoint for a client. + // Note: You must still provide a `Region` value when specifying an + // endpoint for a client. Endpoint *string // The resolver to use for looking up endpoints for AWS service clients // to use based on region. EndpointResolver endpoints.Resolver + // EnforceShouldRetryCheck is used in the AfterRetryHandler to always call + // ShouldRetry regardless of whether or not if request.Retryable is set. + // This will utilize ShouldRetry method of custom retryers. If EnforceShouldRetryCheck + // is not set, then ShouldRetry will only be called if request.Retryable is nil. + // Proper handling of the request.Retryable field is important when setting this field. + EnforceShouldRetryCheck *bool + // The region to send requests to. This parameter is required and must // be configured globally or on a per-client basis unless otherwise // noted. A full list of regions is found in the "Regions and Endpoints" // document. // - // @see http://docs.aws.amazon.com/general/latest/gr/rande.html - // AWS Regions and Endpoints + // See http://docs.aws.amazon.com/general/latest/gr/rande.html for AWS + // Regions and Endpoints. Region *string // Set this to `true` to disable SSL when sending requests. Defaults @@ -88,7 +95,7 @@ type Config struct { // recoverable failures. // // When nil or the value does not implement the request.Retryer interface, - // the request.DefaultRetryer will be used. + // the client.DefaultRetryer will be used. // // When both Retryer and MaxRetries are non-nil, the former is used and // the latter ignored. @@ -113,9 +120,10 @@ type Config struct { // will use virtual hosted bucket addressing when possible // (`http://BUCKET.s3.amazonaws.com/KEY`). // - // @note This configuration option is specific to the Amazon S3 service. - // @see http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html - // Amazon S3: Virtual Hosting of Buckets + // Note: This configuration option is specific to the Amazon S3 service. + // + // See http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html + // for Amazon S3: Virtual Hosting of Buckets S3ForcePathStyle *bool // Set this to `true` to disable the SDK adding the `Expect: 100-Continue` @@ -144,6 +152,15 @@ type Config struct { // with accelerate. S3UseAccelerate *bool + // S3DisableContentMD5Validation config option is temporarily disabled, + // For S3 GetObject API calls, #1837. + // + // Set this to `true` to disable the S3 service client from automatically + // adding the ContentMD5 to S3 Object Put and Upload API calls. This option + // will also disable the SDK from performing object ContentMD5 validation + // on GetObject API calls. + S3DisableContentMD5Validation *bool + // Set this to `true` to disable the EC2Metadata client from overriding the // default http.Client's Timeout. This is helpful if you do not want the // EC2Metadata client to create a new http.Client. This options is only @@ -154,13 +171,14 @@ type Config struct { // the EC2Metadata overriding the timeout for default credentials chain. // // Example: - // sess, err := session.NewSession(aws.NewConfig().WithEC2MetadataDiableTimeoutOverride(true)) + // sess := session.Must(session.NewSession(aws.NewConfig() + // .WithEC2MetadataDiableTimeoutOverride(true))) // // svc := s3.New(sess) // EC2MetadataDisableTimeoutOverride *bool - // Instructs the endpiont to be generated for a service client to + // Instructs the endpoint to be generated for a service client to // be the dual stack endpoint. The dual stack endpoint will support // both IPv4 and IPv6 addressing. // @@ -174,7 +192,7 @@ type Config struct { // // Only supported with. // - // sess, err := session.NewSession() + // sess := session.Must(session.NewSession()) // // svc := s3.New(sess, &aws.Config{ // UseDualStack: aws.Bool(true), @@ -186,13 +204,19 @@ type Config struct { // request delays. This value should only be used for testing. To adjust // the delay of a request see the aws/client.DefaultRetryer and // aws/request.Retryer. + // + // SleepDelay will prevent any Context from being used for canceling retry + // delay of an API operation. It is recommended to not use SleepDelay at all + // and specify a Retryer instead. SleepDelay func(time.Duration) // DisableRestProtocolURICleaning will not clean the URL path when making rest protocol requests. // Will default to false. This would only be used for empty directory names in s3 requests. // // Example: - // sess, err := session.NewSession(&aws.Config{DisableRestProtocolURICleaning: aws.Bool(true)) + // sess := session.Must(session.NewSession(&aws.Config{ + // DisableRestProtocolURICleaning: aws.Bool(true), + // })) // // svc := s3.New(sess) // out, err := svc.GetObject(&s3.GetObjectInput { @@ -200,16 +224,44 @@ type Config struct { // Key: aws.String("//foo//bar//moo"), // }) DisableRestProtocolURICleaning *bool + + // EnableEndpointDiscovery will allow for endpoint discovery on operations that + // have the definition in its model. By default, endpoint discovery is off. + // + // Example: + // sess := session.Must(session.NewSession(&aws.Config{ + // EnableEndpointDiscovery: aws.Bool(true), + // })) + // + // svc := s3.New(sess) + // out, err := svc.GetObject(&s3.GetObjectInput { + // Bucket: aws.String("bucketname"), + // Key: aws.String("/foo/bar/moo"), + // }) + EnableEndpointDiscovery *bool + + // DisableEndpointHostPrefix will disable the SDK's behavior of prefixing + // request endpoint hosts with modeled information. + // + // Disabling this feature is useful when you want to use local endpoints + // for testing that do not support the modeled host prefix pattern. + DisableEndpointHostPrefix *bool + + // STSRegionalEndpoint will enable regional or legacy endpoint resolving + STSRegionalEndpoint endpoints.STSRegionalEndpoint + + // S3UsEast1RegionalEndpoint will enable regional or legacy endpoint resolving + S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint } // NewConfig returns a new Config pointer that can be chained with builder // methods to set multiple configuration values inline without using pointers. // -// // Create Session with MaxRetry configuration to be shared by multiple +// // Create Session with MaxRetries configuration to be shared by multiple // // service clients. -// sess, err := session.NewSession(aws.NewConfig(). +// sess := session.Must(session.NewSession(aws.NewConfig(). // WithMaxRetries(3), -// ) +// )) // // // Create S3 service client with a specific Region. // svc := s3.New(sess, aws.NewConfig(). @@ -322,6 +374,15 @@ func (c *Config) WithS3Disable100Continue(disable bool) *Config { func (c *Config) WithS3UseAccelerate(enable bool) *Config { c.S3UseAccelerate = &enable return c + +} + +// WithS3DisableContentMD5Validation sets a config +// S3DisableContentMD5Validation value returning a Config pointer for chaining. +func (c *Config) WithS3DisableContentMD5Validation(enable bool) *Config { + c.S3DisableContentMD5Validation = &enable + return c + } // WithUseDualStack sets a config UseDualStack value returning a Config @@ -345,6 +406,19 @@ func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config { return c } +// WithEndpointDiscovery will set whether or not to use endpoint discovery. +func (c *Config) WithEndpointDiscovery(t bool) *Config { + c.EnableEndpointDiscovery = &t + return c +} + +// WithDisableEndpointHostPrefix will set whether or not to use modeled host prefix +// when making requests. +func (c *Config) WithDisableEndpointHostPrefix(t bool) *Config { + c.DisableEndpointHostPrefix = &t + return c +} + // MergeIn merges the passed in configs into the existing config object. func (c *Config) MergeIn(cfgs ...*Config) { for _, other := range cfgs { @@ -352,6 +426,20 @@ func (c *Config) MergeIn(cfgs ...*Config) { } } +// WithSTSRegionalEndpoint will set whether or not to use regional endpoint flag +// when resolving the endpoint for a service +func (c *Config) WithSTSRegionalEndpoint(sre endpoints.STSRegionalEndpoint) *Config { + c.STSRegionalEndpoint = sre + return c +} + +// WithS3UsEast1RegionalEndpoint will set whether or not to use regional endpoint flag +// when resolving the endpoint for a service +func (c *Config) WithS3UsEast1RegionalEndpoint(sre endpoints.S3UsEast1RegionalEndpoint) *Config { + c.S3UsEast1RegionalEndpoint = sre + return c +} + func mergeInConfig(dst *Config, other *Config) { if other == nil { return @@ -421,6 +509,10 @@ func mergeInConfig(dst *Config, other *Config) { dst.S3UseAccelerate = other.S3UseAccelerate } + if other.S3DisableContentMD5Validation != nil { + dst.S3DisableContentMD5Validation = other.S3DisableContentMD5Validation + } + if other.UseDualStack != nil { dst.UseDualStack = other.UseDualStack } @@ -436,6 +528,26 @@ func mergeInConfig(dst *Config, other *Config) { if other.DisableRestProtocolURICleaning != nil { dst.DisableRestProtocolURICleaning = other.DisableRestProtocolURICleaning } + + if other.EnforceShouldRetryCheck != nil { + dst.EnforceShouldRetryCheck = other.EnforceShouldRetryCheck + } + + if other.EnableEndpointDiscovery != nil { + dst.EnableEndpointDiscovery = other.EnableEndpointDiscovery + } + + if other.DisableEndpointHostPrefix != nil { + dst.DisableEndpointHostPrefix = other.DisableEndpointHostPrefix + } + + if other.STSRegionalEndpoint != endpoints.UnsetSTSEndpoint { + dst.STSRegionalEndpoint = other.STSRegionalEndpoint + } + + if other.S3UsEast1RegionalEndpoint != endpoints.UnsetS3UsEast1Endpoint { + dst.S3UsEast1RegionalEndpoint = other.S3UsEast1RegionalEndpoint + } } // Copy will return a shallow copy of the Config object. If any additional diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go new file mode 100644 index 00000000000..2866f9a7fb9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go @@ -0,0 +1,37 @@ +// +build !go1.9 + +package aws + +import "time" + +// Context is an copy of the Go v1.7 stdlib's context.Context interface. +// It is represented as a SDK interface to enable you to use the "WithContext" +// API methods with Go v1.6 and a Context type such as golang.org/x/net/context. +// +// See https://golang.org/pkg/context on how to use contexts. +type Context interface { + // Deadline returns the time when work done on behalf of this context + // should be canceled. Deadline returns ok==false when no deadline is + // set. Successive calls to Deadline return the same results. + Deadline() (deadline time.Time, ok bool) + + // Done returns a channel that's closed when work done on behalf of this + // context should be canceled. Done may return nil if this context can + // never be canceled. Successive calls to Done return the same value. + Done() <-chan struct{} + + // Err returns a non-nil error value after Done is closed. Err returns + // Canceled if the context was canceled or DeadlineExceeded if the + // context's deadline passed. No other values for Err are defined. + // After Done is closed, successive calls to Err return the same value. + Err() error + + // Value returns the value associated with this context for key, or nil + // if no value is associated with key. Successive calls to Value with + // the same key returns the same result. + // + // Use context values only for request-scoped data that transits + // processes and API boundaries, not for passing optional parameters to + // functions. + Value(key interface{}) interface{} +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go new file mode 100644 index 00000000000..3718b26e101 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go @@ -0,0 +1,11 @@ +// +build go1.9 + +package aws + +import "context" + +// Context is an alias of the Go stdlib's context.Context interface. +// It can be used within the SDK's API operation "WithContext" methods. +// +// See https://golang.org/pkg/context on how to use contexts. +type Context = context.Context diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go new file mode 100644 index 00000000000..66c5945db15 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go @@ -0,0 +1,56 @@ +// +build !go1.7 + +package aws + +import "time" + +// An emptyCtx is a copy of the Go 1.7 context.emptyCtx type. This is copied to +// provide a 1.6 and 1.5 safe version of context that is compatible with Go +// 1.7's Context. +// +// An emptyCtx is never canceled, has no values, and has no deadline. It is not +// struct{}, since vars of this type must have distinct addresses. +type emptyCtx int + +func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { + return +} + +func (*emptyCtx) Done() <-chan struct{} { + return nil +} + +func (*emptyCtx) Err() error { + return nil +} + +func (*emptyCtx) Value(key interface{}) interface{} { + return nil +} + +func (e *emptyCtx) String() string { + switch e { + case backgroundCtx: + return "aws.BackgroundContext" + } + return "unknown empty Context" +} + +var ( + backgroundCtx = new(emptyCtx) +) + +// BackgroundContext returns a context that will never be canceled, has no +// values, and no deadline. This context is used by the SDK to provide +// backwards compatibility with non-context API operations and functionality. +// +// Go 1.6 and before: +// This context function is equivalent to context.Background in the Go stdlib. +// +// Go 1.7 and later: +// The context returned will be the value returned by context.Background() +// +// See https://golang.org/pkg/context for more information on Contexts. +func BackgroundContext() Context { + return backgroundCtx +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go new file mode 100644 index 00000000000..9c29f29af17 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go @@ -0,0 +1,20 @@ +// +build go1.7 + +package aws + +import "context" + +// BackgroundContext returns a context that will never be canceled, has no +// values, and no deadline. This context is used by the SDK to provide +// backwards compatibility with non-context API operations and functionality. +// +// Go 1.6 and before: +// This context function is equivalent to context.Background in the Go stdlib. +// +// Go 1.7 and later: +// The context returned will be the value returned by context.Background() +// +// See https://golang.org/pkg/context for more information on Contexts. +func BackgroundContext() Context { + return context.Background() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go new file mode 100644 index 00000000000..304fd156120 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go @@ -0,0 +1,24 @@ +package aws + +import ( + "time" +) + +// SleepWithContext will wait for the timer duration to expire, or the context +// is canceled. Which ever happens first. If the context is canceled the Context's +// error will be returned. +// +// Expects Context to always return a non-nil error if the Done channel is closed. +func SleepWithContext(ctx Context, dur time.Duration) error { + t := time.NewTimer(dur) + defer t.Stop() + + select { + case <-t.C: + break + case <-ctx.Done(): + return ctx.Err() + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go index 3b73a7da7f9..4e076c1837a 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/convert_types.go @@ -179,6 +179,242 @@ func IntValueMap(src map[string]*int) map[string]int { return dst } +// Uint returns a pointer to the uint value passed in. +func Uint(v uint) *uint { + return &v +} + +// UintValue returns the value of the uint pointer passed in or +// 0 if the pointer is nil. +func UintValue(v *uint) uint { + if v != nil { + return *v + } + return 0 +} + +// UintSlice converts a slice of uint values uinto a slice of +// uint pointers +func UintSlice(src []uint) []*uint { + dst := make([]*uint, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// UintValueSlice converts a slice of uint pointers uinto a slice of +// uint values +func UintValueSlice(src []*uint) []uint { + dst := make([]uint, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// UintMap converts a string map of uint values uinto a string +// map of uint pointers +func UintMap(src map[string]uint) map[string]*uint { + dst := make(map[string]*uint) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// UintValueMap converts a string map of uint pointers uinto a string +// map of uint values +func UintValueMap(src map[string]*uint) map[string]uint { + dst := make(map[string]uint) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int8 returns a pointer to the int8 value passed in. +func Int8(v int8) *int8 { + return &v +} + +// Int8Value returns the value of the int8 pointer passed in or +// 0 if the pointer is nil. +func Int8Value(v *int8) int8 { + if v != nil { + return *v + } + return 0 +} + +// Int8Slice converts a slice of int8 values into a slice of +// int8 pointers +func Int8Slice(src []int8) []*int8 { + dst := make([]*int8, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Int8ValueSlice converts a slice of int8 pointers into a slice of +// int8 values +func Int8ValueSlice(src []*int8) []int8 { + dst := make([]int8, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Int8Map converts a string map of int8 values into a string +// map of int8 pointers +func Int8Map(src map[string]int8) map[string]*int8 { + dst := make(map[string]*int8) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Int8ValueMap converts a string map of int8 pointers into a string +// map of int8 values +func Int8ValueMap(src map[string]*int8) map[string]int8 { + dst := make(map[string]int8) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int16 returns a pointer to the int16 value passed in. +func Int16(v int16) *int16 { + return &v +} + +// Int16Value returns the value of the int16 pointer passed in or +// 0 if the pointer is nil. +func Int16Value(v *int16) int16 { + if v != nil { + return *v + } + return 0 +} + +// Int16Slice converts a slice of int16 values into a slice of +// int16 pointers +func Int16Slice(src []int16) []*int16 { + dst := make([]*int16, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Int16ValueSlice converts a slice of int16 pointers into a slice of +// int16 values +func Int16ValueSlice(src []*int16) []int16 { + dst := make([]int16, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Int16Map converts a string map of int16 values into a string +// map of int16 pointers +func Int16Map(src map[string]int16) map[string]*int16 { + dst := make(map[string]*int16) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Int16ValueMap converts a string map of int16 pointers into a string +// map of int16 values +func Int16ValueMap(src map[string]*int16) map[string]int16 { + dst := make(map[string]int16) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Int32 returns a pointer to the int32 value passed in. +func Int32(v int32) *int32 { + return &v +} + +// Int32Value returns the value of the int32 pointer passed in or +// 0 if the pointer is nil. +func Int32Value(v *int32) int32 { + if v != nil { + return *v + } + return 0 +} + +// Int32Slice converts a slice of int32 values into a slice of +// int32 pointers +func Int32Slice(src []int32) []*int32 { + dst := make([]*int32, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Int32ValueSlice converts a slice of int32 pointers into a slice of +// int32 values +func Int32ValueSlice(src []*int32) []int32 { + dst := make([]int32, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Int32Map converts a string map of int32 values into a string +// map of int32 pointers +func Int32Map(src map[string]int32) map[string]*int32 { + dst := make(map[string]*int32) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Int32ValueMap converts a string map of int32 pointers into a string +// map of int32 values +func Int32ValueMap(src map[string]*int32) map[string]int32 { + dst := make(map[string]int32) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + // Int64 returns a pointer to the int64 value passed in. func Int64(v int64) *int64 { return &v @@ -238,6 +474,301 @@ func Int64ValueMap(src map[string]*int64) map[string]int64 { return dst } +// Uint8 returns a pointer to the uint8 value passed in. +func Uint8(v uint8) *uint8 { + return &v +} + +// Uint8Value returns the value of the uint8 pointer passed in or +// 0 if the pointer is nil. +func Uint8Value(v *uint8) uint8 { + if v != nil { + return *v + } + return 0 +} + +// Uint8Slice converts a slice of uint8 values into a slice of +// uint8 pointers +func Uint8Slice(src []uint8) []*uint8 { + dst := make([]*uint8, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint8ValueSlice converts a slice of uint8 pointers into a slice of +// uint8 values +func Uint8ValueSlice(src []*uint8) []uint8 { + dst := make([]uint8, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint8Map converts a string map of uint8 values into a string +// map of uint8 pointers +func Uint8Map(src map[string]uint8) map[string]*uint8 { + dst := make(map[string]*uint8) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint8ValueMap converts a string map of uint8 pointers into a string +// map of uint8 values +func Uint8ValueMap(src map[string]*uint8) map[string]uint8 { + dst := make(map[string]uint8) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint16 returns a pointer to the uint16 value passed in. +func Uint16(v uint16) *uint16 { + return &v +} + +// Uint16Value returns the value of the uint16 pointer passed in or +// 0 if the pointer is nil. +func Uint16Value(v *uint16) uint16 { + if v != nil { + return *v + } + return 0 +} + +// Uint16Slice converts a slice of uint16 values into a slice of +// uint16 pointers +func Uint16Slice(src []uint16) []*uint16 { + dst := make([]*uint16, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint16ValueSlice converts a slice of uint16 pointers into a slice of +// uint16 values +func Uint16ValueSlice(src []*uint16) []uint16 { + dst := make([]uint16, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint16Map converts a string map of uint16 values into a string +// map of uint16 pointers +func Uint16Map(src map[string]uint16) map[string]*uint16 { + dst := make(map[string]*uint16) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint16ValueMap converts a string map of uint16 pointers into a string +// map of uint16 values +func Uint16ValueMap(src map[string]*uint16) map[string]uint16 { + dst := make(map[string]uint16) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint32 returns a pointer to the uint32 value passed in. +func Uint32(v uint32) *uint32 { + return &v +} + +// Uint32Value returns the value of the uint32 pointer passed in or +// 0 if the pointer is nil. +func Uint32Value(v *uint32) uint32 { + if v != nil { + return *v + } + return 0 +} + +// Uint32Slice converts a slice of uint32 values into a slice of +// uint32 pointers +func Uint32Slice(src []uint32) []*uint32 { + dst := make([]*uint32, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint32ValueSlice converts a slice of uint32 pointers into a slice of +// uint32 values +func Uint32ValueSlice(src []*uint32) []uint32 { + dst := make([]uint32, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint32Map converts a string map of uint32 values into a string +// map of uint32 pointers +func Uint32Map(src map[string]uint32) map[string]*uint32 { + dst := make(map[string]*uint32) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint32ValueMap converts a string map of uint32 pointers into a string +// map of uint32 values +func Uint32ValueMap(src map[string]*uint32) map[string]uint32 { + dst := make(map[string]uint32) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Uint64 returns a pointer to the uint64 value passed in. +func Uint64(v uint64) *uint64 { + return &v +} + +// Uint64Value returns the value of the uint64 pointer passed in or +// 0 if the pointer is nil. +func Uint64Value(v *uint64) uint64 { + if v != nil { + return *v + } + return 0 +} + +// Uint64Slice converts a slice of uint64 values into a slice of +// uint64 pointers +func Uint64Slice(src []uint64) []*uint64 { + dst := make([]*uint64, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Uint64ValueSlice converts a slice of uint64 pointers into a slice of +// uint64 values +func Uint64ValueSlice(src []*uint64) []uint64 { + dst := make([]uint64, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Uint64Map converts a string map of uint64 values into a string +// map of uint64 pointers +func Uint64Map(src map[string]uint64) map[string]*uint64 { + dst := make(map[string]*uint64) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Uint64ValueMap converts a string map of uint64 pointers into a string +// map of uint64 values +func Uint64ValueMap(src map[string]*uint64) map[string]uint64 { + dst := make(map[string]uint64) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + +// Float32 returns a pointer to the float32 value passed in. +func Float32(v float32) *float32 { + return &v +} + +// Float32Value returns the value of the float32 pointer passed in or +// 0 if the pointer is nil. +func Float32Value(v *float32) float32 { + if v != nil { + return *v + } + return 0 +} + +// Float32Slice converts a slice of float32 values into a slice of +// float32 pointers +func Float32Slice(src []float32) []*float32 { + dst := make([]*float32, len(src)) + for i := 0; i < len(src); i++ { + dst[i] = &(src[i]) + } + return dst +} + +// Float32ValueSlice converts a slice of float32 pointers into a slice of +// float32 values +func Float32ValueSlice(src []*float32) []float32 { + dst := make([]float32, len(src)) + for i := 0; i < len(src); i++ { + if src[i] != nil { + dst[i] = *(src[i]) + } + } + return dst +} + +// Float32Map converts a string map of float32 values into a string +// map of float32 pointers +func Float32Map(src map[string]float32) map[string]*float32 { + dst := make(map[string]*float32) + for k, val := range src { + v := val + dst[k] = &v + } + return dst +} + +// Float32ValueMap converts a string map of float32 pointers into a string +// map of float32 values +func Float32ValueMap(src map[string]*float32) map[string]float32 { + dst := make(map[string]float32) + for k, val := range src { + if val != nil { + dst[k] = *val + } + } + return dst +} + // Float64 returns a pointer to the float64 value passed in. func Float64(v float64) *float64 { return &v @@ -311,6 +842,24 @@ func TimeValue(v *time.Time) time.Time { return time.Time{} } +// SecondsTimeValue converts an int64 pointer to a time.Time value +// representing seconds since Epoch or time.Time{} if the pointer is nil. +func SecondsTimeValue(v *int64) time.Time { + if v != nil { + return time.Unix((*v / 1000), 0) + } + return time.Time{} +} + +// MillisecondsTimeValue converts an int64 pointer to a time.Time value +// representing milliseconds sinch Epoch or time.Time{} if the pointer is nil. +func MillisecondsTimeValue(v *int64) time.Time { + if v != nil { + return time.Unix(0, (*v * 1000000)) + } + return time.Time{} +} + // TimeUnixMilli returns a Unix timestamp in milliseconds from "January 1, 1970 UTC". // The result is undefined if the Unix time cannot be represented by an int64. // Which includes calling TimeUnixMilli on a zero Time is undefined. diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go index 8a7bafc78ca..0c60e612ea5 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go @@ -3,12 +3,10 @@ package corehandlers import ( "bytes" "fmt" - "io" "io/ioutil" "net/http" "net/url" "regexp" - "runtime" "strconv" "time" @@ -27,7 +25,7 @@ type lener interface { // or will use the HTTPRequest.Header's "Content-Length" if defined. If unable // to determine request body length and no "Content-Length" was specified it will panic. // -// The Content-Length will only be aded to the request if the length of the body +// The Content-Length will only be added to the request if the length of the body // is greater than 0. If the body is empty or the current `Content-Length` // header is <= 0, the header will also be stripped. var BuildContentLengthHandler = request.NamedHandler{Name: "core.BuildContentLengthHandler", Fn: func(r *request.Request) { @@ -36,18 +34,13 @@ var BuildContentLengthHandler = request.NamedHandler{Name: "core.BuildContentLen if slength := r.HTTPRequest.Header.Get("Content-Length"); slength != "" { length, _ = strconv.ParseInt(slength, 10, 64) } else { - switch body := r.Body.(type) { - case nil: - length = 0 - case lener: - length = int64(body.Len()) - case io.Seeker: - r.BodyStart, _ = body.Seek(0, 1) - end, _ := body.Seek(0, 2) - body.Seek(r.BodyStart, 0) // make sure to seek back to original location - length = end - r.BodyStart - default: - panic("Cannot get length of body, must provide `ContentLength`") + if r.Body != nil { + var err error + length, err = aws.SeekerLen(r.Body) + if err != nil { + r.Error = awserr.New(request.ErrCodeSerialization, "failed to get request body's length", err) + return + } } } @@ -60,19 +53,12 @@ var BuildContentLengthHandler = request.NamedHandler{Name: "core.BuildContentLen } }} -// SDKVersionUserAgentHandler is a request handler for adding the SDK Version to the user agent. -var SDKVersionUserAgentHandler = request.NamedHandler{ - Name: "core.SDKVersionUserAgentHandler", - Fn: request.MakeAddToUserAgentHandler(aws.SDKName, aws.SDKVersion, - runtime.Version(), runtime.GOOS, runtime.GOARCH), -} - var reStatusCode = regexp.MustCompile(`^(\d{3})`) // ValidateReqSigHandler is a request handler to ensure that the request's // signature doesn't expire before it is sent. This can happen when a request -// is built and signed signficantly before it is sent. Or significant delays -// occur whne retrying requests that would cause the signature to expire. +// is built and signed significantly before it is sent. Or significant delays +// occur when retrying requests that would cause the signature to expire. var ValidateReqSigHandler = request.NamedHandler{ Name: "core.ValidateReqSigHandler", Fn: func(r *request.Request) { @@ -86,9 +72,9 @@ var ValidateReqSigHandler = request.NamedHandler{ signedTime = r.LastSignedAt } - // 10 minutes to allow for some clock skew/delays in transmission. + // 5 minutes to allow for some clock skew/delays in transmission. // Would be improved with aws/aws-sdk-go#423 - if signedTime.Add(10 * time.Minute).After(time.Now()) { + if signedTime.Add(5 * time.Minute).After(time.Now()) { return } @@ -98,44 +84,95 @@ var ValidateReqSigHandler = request.NamedHandler{ } // SendHandler is a request handler to send service request using HTTP client. -var SendHandler = request.NamedHandler{Name: "core.SendHandler", Fn: func(r *request.Request) { - var err error - r.HTTPResponse, err = r.Config.HTTPClient.Do(r.HTTPRequest) - if err != nil { - // Prevent leaking if an HTTPResponse was returned. Clean up - // the body. - if r.HTTPResponse != nil { - r.HTTPResponse.Body.Close() +var SendHandler = request.NamedHandler{ + Name: "core.SendHandler", + Fn: func(r *request.Request) { + sender := sendFollowRedirects + if r.DisableFollowRedirects { + sender = sendWithoutFollowRedirects } - // Capture the case where url.Error is returned for error processing - // response. e.g. 301 without location header comes back as string - // error and r.HTTPResponse is nil. Other url redirect errors will - // comeback in a similar method. - if e, ok := err.(*url.Error); ok && e.Err != nil { - if s := reStatusCode.FindStringSubmatch(e.Err.Error()); s != nil { - code, _ := strconv.ParseInt(s[1], 10, 64) - r.HTTPResponse = &http.Response{ - StatusCode: int(code), - Status: http.StatusText(int(code)), - Body: ioutil.NopCloser(bytes.NewReader([]byte{})), - } - return - } + + if request.NoBody == r.HTTPRequest.Body { + // Strip off the request body if the NoBody reader was used as a + // place holder for a request body. This prevents the SDK from + // making requests with a request body when it would be invalid + // to do so. + // + // Use a shallow copy of the http.Request to ensure the race condition + // of transport on Body will not trigger + reqOrig, reqCopy := r.HTTPRequest, *r.HTTPRequest + reqCopy.Body = nil + r.HTTPRequest = &reqCopy + defer func() { + r.HTTPRequest = reqOrig + }() + } + + var err error + r.HTTPResponse, err = sender(r) + if err != nil { + handleSendError(r, err) } - if r.HTTPResponse == nil { - // Add a dummy request response object to ensure the HTTPResponse - // value is consistent. + }, +} + +func sendFollowRedirects(r *request.Request) (*http.Response, error) { + return r.Config.HTTPClient.Do(r.HTTPRequest) +} + +func sendWithoutFollowRedirects(r *request.Request) (*http.Response, error) { + transport := r.Config.HTTPClient.Transport + if transport == nil { + transport = http.DefaultTransport + } + + return transport.RoundTrip(r.HTTPRequest) +} + +func handleSendError(r *request.Request, err error) { + // Prevent leaking if an HTTPResponse was returned. Clean up + // the body. + if r.HTTPResponse != nil { + r.HTTPResponse.Body.Close() + } + // Capture the case where url.Error is returned for error processing + // response. e.g. 301 without location header comes back as string + // error and r.HTTPResponse is nil. Other URL redirect errors will + // comeback in a similar method. + if e, ok := err.(*url.Error); ok && e.Err != nil { + if s := reStatusCode.FindStringSubmatch(e.Err.Error()); s != nil { + code, _ := strconv.ParseInt(s[1], 10, 64) r.HTTPResponse = &http.Response{ - StatusCode: int(0), - Status: http.StatusText(int(0)), + StatusCode: int(code), + Status: http.StatusText(int(code)), Body: ioutil.NopCloser(bytes.NewReader([]byte{})), } + return } - // Catch all other request errors. - r.Error = awserr.New("RequestError", "send request failed", err) - r.Retryable = aws.Bool(true) // network errors are retryable } -}} + if r.HTTPResponse == nil { + // Add a dummy request response object to ensure the HTTPResponse + // value is consistent. + r.HTTPResponse = &http.Response{ + StatusCode: int(0), + Status: http.StatusText(int(0)), + Body: ioutil.NopCloser(bytes.NewReader([]byte{})), + } + } + // Catch all request errors, and let the default retrier determine + // if the error is retryable. + r.Error = awserr.New("RequestError", "send request failed", err) + + // Override the error with a context canceled error, if that was canceled. + ctx := r.Context() + select { + case <-ctx.Done(): + r.Error = awserr.New(request.CanceledErrorCode, + "request context canceled", ctx.Err()) + r.Retryable = aws.Bool(false) + default: + } +} // ValidateResponseHandler is a request handler to validate service response. var ValidateResponseHandler = request.NamedHandler{Name: "core.ValidateResponseHandler", Fn: func(r *request.Request) { @@ -147,28 +184,39 @@ var ValidateResponseHandler = request.NamedHandler{Name: "core.ValidateResponseH // AfterRetryHandler performs final checks to determine if the request should // be retried and how long to delay. -var AfterRetryHandler = request.NamedHandler{Name: "core.AfterRetryHandler", Fn: func(r *request.Request) { - // If one of the other handlers already set the retry state - // we don't want to override it based on the service's state - if r.Retryable == nil { - r.Retryable = aws.Bool(r.ShouldRetry(r)) - } +var AfterRetryHandler = request.NamedHandler{ + Name: "core.AfterRetryHandler", + Fn: func(r *request.Request) { + // If one of the other handlers already set the retry state + // we don't want to override it based on the service's state + if r.Retryable == nil || aws.BoolValue(r.Config.EnforceShouldRetryCheck) { + r.Retryable = aws.Bool(r.ShouldRetry(r)) + } - if r.WillRetry() { - r.RetryDelay = r.RetryRules(r) - r.Config.SleepDelay(r.RetryDelay) + if r.WillRetry() { + r.RetryDelay = r.RetryRules(r) - // when the expired token exception occurs the credentials - // need to be expired locally so that the next request to - // get credentials will trigger a credentials refresh. - if r.IsErrorExpired() { - r.Config.Credentials.Expire() - } + if sleepFn := r.Config.SleepDelay; sleepFn != nil { + // Support SleepDelay for backwards compatibility and testing + sleepFn(r.RetryDelay) + } else if err := aws.SleepWithContext(r.Context(), r.RetryDelay); err != nil { + r.Error = awserr.New(request.CanceledErrorCode, + "request context canceled", err) + r.Retryable = aws.Bool(false) + return + } - r.RetryCount++ - r.Error = nil - } -}} + // when the expired token exception occurs the credentials + // need to be expired locally so that the next request to + // get credentials will trigger a credentials refresh. + if r.IsErrorExpired() { + r.Config.Credentials.Expire() + } + + r.RetryCount++ + r.Error = nil + } + }} // ValidateEndpointHandler is a request handler to validate a request had the // appropriate Region and Endpoint set. Will set r.Error if the endpoint or diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go new file mode 100644 index 00000000000..ab69c7a6f38 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go @@ -0,0 +1,37 @@ +package corehandlers + +import ( + "os" + "runtime" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" +) + +// SDKVersionUserAgentHandler is a request handler for adding the SDK Version +// to the user agent. +var SDKVersionUserAgentHandler = request.NamedHandler{ + Name: "core.SDKVersionUserAgentHandler", + Fn: request.MakeAddToUserAgentHandler(aws.SDKName, aws.SDKVersion, + runtime.Version(), runtime.GOOS, runtime.GOARCH), +} + +const execEnvVar = `AWS_EXECUTION_ENV` +const execEnvUAKey = `exec-env` + +// AddHostExecEnvUserAgentHander is a request handler appending the SDK's +// execution environment to the user agent. +// +// If the environment variable AWS_EXECUTION_ENV is set, its value will be +// appended to the user agent string. +var AddHostExecEnvUserAgentHander = request.NamedHandler{ + Name: "core.AddHostExecEnvUserAgentHander", + Fn: func(r *request.Request) { + v := os.Getenv(execEnvVar) + if len(v) == 0 { + return + } + + request.AddToUserAgent(r, execEnvUAKey+"/"+v) + }, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go index 6efc77bf093..3ad1e798df8 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go @@ -9,11 +9,9 @@ var ( // providers in the ChainProvider. // // This has been deprecated. For verbose error messaging set - // aws.Config.CredentialsChainVerboseErrors to true - // - // @readonly + // aws.Config.CredentialsChainVerboseErrors to true. ErrNoValidProvidersFoundInChain = awserr.New("NoCredentialProviders", - `no valid providers in chain. Deprecated. + `no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors`, nil) ) @@ -39,16 +37,18 @@ var ( // does not return any credentials ChainProvider will return the error // ErrNoValidProvidersFoundInChain // -// creds := NewChainCredentials( -// []Provider{ -// &EnvProvider{}, -// &EC2RoleProvider{ +// creds := credentials.NewChainCredentials( +// []credentials.Provider{ +// &credentials.EnvProvider{}, +// &ec2rolecreds.EC2RoleProvider{ // Client: ec2metadata.New(sess), // }, // }) // // // Usage of ChainCredentials with aws.Config -// svc := ec2.New(&aws.Config{Credentials: creds}) +// svc := ec2.New(session.Must(session.NewSession(&aws.Config{ +// Credentials: creds, +// }))) // type ChainProvider struct { Providers []Provider diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go index 7b8ebf5f9d8..4af59215814 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go @@ -14,7 +14,7 @@ // // Example of using the environment variable credentials. // -// creds := NewEnvCredentials() +// creds := credentials.NewEnvCredentials() // // // Retrieve the credentials value // credValue, err := creds.Get() @@ -26,7 +26,7 @@ // This may be helpful to proactively expire credentials and refresh them sooner // than they would naturally expire on their own. // -// creds := NewCredentials(&EC2RoleProvider{}) +// creds := credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{}) // creds.Expire() // credsValue, err := creds.Get() // // New credentials will be retrieved instead of from cache. @@ -43,14 +43,17 @@ // func (m *MyProvider) Retrieve() (Value, error) {...} // func (m *MyProvider) IsExpired() bool {...} // -// creds := NewCredentials(&MyProvider{}) +// creds := credentials.NewCredentials(&MyProvider{}) // credValue, err := creds.Get() // package credentials import ( + "fmt" "sync" "time" + + "github.com/aws/aws-sdk-go/aws/awserr" ) // AnonymousCredentials is an empty Credential object that can be used as @@ -60,10 +63,10 @@ import ( // when making service API calls. For example, when accessing public // s3 buckets. // -// svc := s3.New(&aws.Config{Credentials: AnonymousCredentials}) +// svc := s3.New(session.Must(session.NewSession(&aws.Config{ +// Credentials: credentials.AnonymousCredentials, +// }))) // // Access public S3 buckets. -// -// @readonly var AnonymousCredentials = NewStaticCredentials("", "", "") // A Value is the AWS credentials value for individual credential fields. @@ -81,6 +84,12 @@ type Value struct { ProviderName string } +// HasKeys returns if the credentials Value has both AccessKeyID and +// SecretAccessKey value set. +func (v Value) HasKeys() bool { + return len(v.AccessKeyID) != 0 && len(v.SecretAccessKey) != 0 +} + // A Provider is the interface for any component which will provide credentials // Value. A provider is required to manage its own Expired state, and what to // be expired means. @@ -88,7 +97,7 @@ type Value struct { // The Provider should not need to implement its own mutexes, because // that will be managed by Credentials. type Provider interface { - // Refresh returns nil if it successfully retrieved the value. + // Retrieve returns nil if it successfully retrieved the value. // Error is returned if the value were not obtainable, or empty. Retrieve() (Value, error) @@ -97,6 +106,35 @@ type Provider interface { IsExpired() bool } +// An Expirer is an interface that Providers can implement to expose the expiration +// time, if known. If the Provider cannot accurately provide this info, +// it should not implement this interface. +type Expirer interface { + // The time at which the credentials are no longer valid + ExpiresAt() time.Time +} + +// An ErrorProvider is a stub credentials provider that always returns an error +// this is used by the SDK when construction a known provider is not possible +// due to an error. +type ErrorProvider struct { + // The error to be returned from Retrieve + Err error + + // The provider name to set on the Retrieved returned Value + ProviderName string +} + +// Retrieve will always return the error that the ErrorProvider was created with. +func (p ErrorProvider) Retrieve() (Value, error) { + return Value{ProviderName: p.ProviderName}, p.Err +} + +// IsExpired will always return not expired. +func (p ErrorProvider) IsExpired() bool { + return false +} + // A Expiry provides shared expiration logic to be used by credentials // providers to implement expiry functionality. // @@ -135,13 +173,19 @@ func (e *Expiry) SetExpiration(expiration time.Time, window time.Duration) { // IsExpired returns if the credentials are expired. func (e *Expiry) IsExpired() bool { - if e.CurrentTime == nil { - e.CurrentTime = time.Now + curTime := e.CurrentTime + if curTime == nil { + curTime = time.Now } - return e.expiration.Before(e.CurrentTime()) + return e.expiration.Before(curTime()) +} + +// ExpiresAt returns the expiration time of the credential +func (e *Expiry) ExpiresAt() time.Time { + return e.expiration } -// A Credentials provides synchronous safe retrieval of AWS credentials Value. +// A Credentials provides concurrency safe retrieval of AWS credentials Value. // Credentials will cache the credentials value until they expire. Once the value // expires the next Get will attempt to retrieve valid credentials. // @@ -155,7 +199,8 @@ func (e *Expiry) IsExpired() bool { type Credentials struct { creds Value forceRefresh bool - m sync.Mutex + + m sync.RWMutex provider Provider } @@ -178,6 +223,17 @@ func NewCredentials(provider Provider) *Credentials { // If Credentials.Expire() was called the credentials Value will be force // expired, and the next call to Get() will cause them to be refreshed. func (c *Credentials) Get() (Value, error) { + // Check the cached credentials first with just the read lock. + c.m.RLock() + if !c.isExpired() { + creds := c.creds + c.m.RUnlock() + return creds, nil + } + c.m.RUnlock() + + // Credentials are expired need to retrieve the credentials taking the full + // lock. c.m.Lock() defer c.m.Unlock() @@ -211,8 +267,8 @@ func (c *Credentials) Expire() { // If the Credentials were forced to be expired with Expire() this will // reflect that override. func (c *Credentials) IsExpired() bool { - c.m.Lock() - defer c.m.Unlock() + c.m.RLock() + defer c.m.RUnlock() return c.isExpired() } @@ -221,3 +277,23 @@ func (c *Credentials) IsExpired() bool { func (c *Credentials) isExpired() bool { return c.forceRefresh || c.provider.IsExpired() } + +// ExpiresAt provides access to the functionality of the Expirer interface of +// the underlying Provider, if it supports that interface. Otherwise, it returns +// an error. +func (c *Credentials) ExpiresAt() (time.Time, error) { + c.m.RLock() + defer c.m.RUnlock() + + expirer, ok := c.provider.(Expirer) + if !ok { + return time.Time{}, awserr.New("ProviderNotExpirer", + fmt.Sprintf("provider %s does not support ExpiresAt()", c.creds.ProviderName), + nil) + } + if c.forceRefresh { + // set expiration time to the distant past + return time.Time{}, nil + } + return expirer.ExpiresAt(), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go index c39749524ec..43d4ed386ab 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go @@ -4,7 +4,6 @@ import ( "bufio" "encoding/json" "fmt" - "path" "strings" "time" @@ -12,6 +11,8 @@ import ( "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkuri" ) // ProviderName provides a name of EC2Role provider @@ -125,7 +126,7 @@ type ec2RoleCredRespBody struct { Message string } -const iamSecurityCredsPath = "/iam/security-credentials" +const iamSecurityCredsPath = "iam/security-credentials/" // requestCredList requests a list of credentials from the EC2 service. // If there are no credentials, or there is an error making or receiving the request @@ -142,7 +143,8 @@ func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) { } if err := s.Err(); err != nil { - return nil, awserr.New("SerializationError", "failed to read EC2 instance role from metadata service", err) + return nil, awserr.New(request.ErrCodeSerialization, + "failed to read EC2 instance role from metadata service", err) } return credsList, nil @@ -153,7 +155,7 @@ func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) { // If the credentials cannot be found, or there is an error reading the response // and error will be returned. func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCredRespBody, error) { - resp, err := client.GetMetadata(path.Join(iamSecurityCredsPath, credsName)) + resp, err := client.GetMetadata(sdkuri.PathJoin(iamSecurityCredsPath, credsName)) if err != nil { return ec2RoleCredRespBody{}, awserr.New("EC2RoleRequestError", @@ -164,7 +166,7 @@ func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCred respCreds := ec2RoleCredRespBody{} if err := json.NewDecoder(strings.NewReader(resp)).Decode(&respCreds); err != nil { return ec2RoleCredRespBody{}, - awserr.New("SerializationError", + awserr.New(request.ErrCodeSerialization, fmt.Sprintf("failed to decode %s EC2 instance role credentials", credsName), err) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go index a4cec5c553a..1a7af53a4da 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go @@ -39,6 +39,7 @@ import ( "github.com/aws/aws-sdk-go/aws/client/metadata" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol/json/jsonutil" ) // ProviderName is the name of the credentials provider. @@ -65,6 +66,10 @@ type Provider struct { // // If ExpiryWindow is 0 or less it will be ignored. ExpiryWindow time.Duration + + // Optional authorization token value if set will be used as the value of + // the Authorization header of the endpoint credential request. + AuthorizationToken string } // NewProviderClient returns a credentials Provider for retrieving AWS credentials @@ -93,8 +98,8 @@ func NewProviderClient(cfg aws.Config, handlers request.Handlers, endpoint strin return p } -// NewCredentialsClient returns a Credentials wrapper for retrieving credentials -// from an arbitrary endpoint concurrently. The client will request the +// NewCredentialsClient returns a pointer to a new Credentials object +// wrapping the endpoint credentials Provider. func NewCredentialsClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) *credentials.Credentials { return credentials.NewCredentials(NewProviderClient(cfg, handlers, endpoint, options...)) } @@ -152,6 +157,9 @@ func (p *Provider) getCredentials() (*getCredentialsOutput, error) { out := &getCredentialsOutput{} req := p.Client.NewRequest(op, nil, out) req.HTTPRequest.Header.Set("Accept", "application/json") + if authToken := p.AuthorizationToken; len(authToken) != 0 { + req.HTTPRequest.Header.Set("Authorization", authToken) + } return out, req.Send() } @@ -167,7 +175,7 @@ func unmarshalHandler(r *request.Request) { out := r.Data.(*getCredentialsOutput) if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&out); err != nil { - r.Error = awserr.New("SerializationError", + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode endpoint credentials", err, ) @@ -178,11 +186,15 @@ func unmarshalError(r *request.Request) { defer r.HTTPResponse.Body.Close() var errOut errorOutput - if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&errOut); err != nil { - r.Error = awserr.New("SerializationError", - "failed to decode endpoint credentials", - err, + err := jsonutil.UnmarshalJSONError(&errOut, r.HTTPResponse.Body) + if err != nil { + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, + "failed to decode error message", err), + r.HTTPResponse.StatusCode, + r.RequestID, ) + return } // Response body format is not consistent between metadata endpoints. diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go index 96655bc46ae..54c5cf7333f 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go @@ -12,14 +12,10 @@ const EnvProviderName = "EnvProvider" var ( // ErrAccessKeyIDNotFound is returned when the AWS Access Key ID can't be // found in the process's environment. - // - // @readonly ErrAccessKeyIDNotFound = awserr.New("EnvAccessKeyNotFound", "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment", nil) // ErrSecretAccessKeyNotFound is returned when the AWS Secret Access Key // can't be found in the process's environment. - // - // @readonly ErrSecretAccessKeyNotFound = awserr.New("EnvSecretNotFound", "AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment", nil) ) @@ -29,6 +25,7 @@ var ( // Environment variables used: // // * Access Key ID: AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY +// // * Secret Access Key: AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY type EnvProvider struct { retrieved bool diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go new file mode 100644 index 00000000000..1980c8c140a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go @@ -0,0 +1,425 @@ +/* +Package processcreds is a credential Provider to retrieve `credential_process` +credentials. + +WARNING: The following describes a method of sourcing credentials from an external +process. This can potentially be dangerous, so proceed with caution. Other +credential providers should be preferred if at all possible. If using this +option, you should make sure that the config file is as locked down as possible +using security best practices for your operating system. + +You can use credentials from a `credential_process` in a variety of ways. + +One way is to setup your shared config file, located in the default +location, with the `credential_process` key and the command you want to be +called. You also need to set the AWS_SDK_LOAD_CONFIG environment variable +(e.g., `export AWS_SDK_LOAD_CONFIG=1`) to use the shared config file. + + [default] + credential_process = /command/to/call + +Creating a new session will use the credential process to retrieve credentials. +NOTE: If there are credentials in the profile you are using, the credential +process will not be used. + + // Initialize a session to load credentials. + sess, _ := session.NewSession(&aws.Config{ + Region: aws.String("us-east-1")}, + ) + + // Create S3 service client to use the credentials. + svc := s3.New(sess) + +Another way to use the `credential_process` method is by using +`credentials.NewCredentials()` and providing a command to be executed to +retrieve credentials: + + // Create credentials using the ProcessProvider. + creds := processcreds.NewCredentials("/path/to/command") + + // Create service client value configured for credentials. + svc := s3.New(sess, &aws.Config{Credentials: creds}) + +You can set a non-default timeout for the `credential_process` with another +constructor, `credentials.NewCredentialsTimeout()`, providing the timeout. To +set a one minute timeout: + + // Create credentials using the ProcessProvider. + creds := processcreds.NewCredentialsTimeout( + "/path/to/command", + time.Duration(500) * time.Millisecond) + +If you need more control, you can set any configurable options in the +credentials using one or more option functions. For example, you can set a two +minute timeout, a credential duration of 60 minutes, and a maximum stdout +buffer size of 2k. + + creds := processcreds.NewCredentials( + "/path/to/command", + func(opt *ProcessProvider) { + opt.Timeout = time.Duration(2) * time.Minute + opt.Duration = time.Duration(60) * time.Minute + opt.MaxBufSize = 2048 + }) + +You can also use your own `exec.Cmd`: + + // Create an exec.Cmd + myCommand := exec.Command("/path/to/command") + + // Create credentials using your exec.Cmd and custom timeout + creds := processcreds.NewCredentialsCommand( + myCommand, + func(opt *processcreds.ProcessProvider) { + opt.Timeout = time.Duration(1) * time.Second + }) +*/ +package processcreds + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "runtime" + "strings" + "time" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" +) + +const ( + // ProviderName is the name this credentials provider will label any + // returned credentials Value with. + ProviderName = `ProcessProvider` + + // ErrCodeProcessProviderParse error parsing process output + ErrCodeProcessProviderParse = "ProcessProviderParseError" + + // ErrCodeProcessProviderVersion version error in output + ErrCodeProcessProviderVersion = "ProcessProviderVersionError" + + // ErrCodeProcessProviderRequired required attribute missing in output + ErrCodeProcessProviderRequired = "ProcessProviderRequiredError" + + // ErrCodeProcessProviderExecution execution of command failed + ErrCodeProcessProviderExecution = "ProcessProviderExecutionError" + + // errMsgProcessProviderTimeout process took longer than allowed + errMsgProcessProviderTimeout = "credential process timed out" + + // errMsgProcessProviderProcess process error + errMsgProcessProviderProcess = "error in credential_process" + + // errMsgProcessProviderParse problem parsing output + errMsgProcessProviderParse = "parse failed of credential_process output" + + // errMsgProcessProviderVersion version error in output + errMsgProcessProviderVersion = "wrong version in process output (not 1)" + + // errMsgProcessProviderMissKey missing access key id in output + errMsgProcessProviderMissKey = "missing AccessKeyId in process output" + + // errMsgProcessProviderMissSecret missing secret acess key in output + errMsgProcessProviderMissSecret = "missing SecretAccessKey in process output" + + // errMsgProcessProviderPrepareCmd prepare of command failed + errMsgProcessProviderPrepareCmd = "failed to prepare command" + + // errMsgProcessProviderEmptyCmd command must not be empty + errMsgProcessProviderEmptyCmd = "command must not be empty" + + // errMsgProcessProviderPipe failed to initialize pipe + errMsgProcessProviderPipe = "failed to initialize pipe" + + // DefaultDuration is the default amount of time in minutes that the + // credentials will be valid for. + DefaultDuration = time.Duration(15) * time.Minute + + // DefaultBufSize limits buffer size from growing to an enormous + // amount due to a faulty process. + DefaultBufSize = 1024 + + // DefaultTimeout default limit on time a process can run. + DefaultTimeout = time.Duration(1) * time.Minute +) + +// ProcessProvider satisfies the credentials.Provider interface, and is a +// client to retrieve credentials from a process. +type ProcessProvider struct { + staticCreds bool + credentials.Expiry + originalCommand []string + + // Expiry duration of the credentials. Defaults to 15 minutes if not set. + Duration time.Duration + + // ExpiryWindow will allow the credentials to trigger refreshing prior to + // the credentials actually expiring. This is beneficial so race conditions + // with expiring credentials do not cause request to fail unexpectedly + // due to ExpiredTokenException exceptions. + // + // So a ExpiryWindow of 10s would cause calls to IsExpired() to return true + // 10 seconds before the credentials are actually expired. + // + // If ExpiryWindow is 0 or less it will be ignored. + ExpiryWindow time.Duration + + // A string representing an os command that should return a JSON with + // credential information. + command *exec.Cmd + + // MaxBufSize limits memory usage from growing to an enormous + // amount due to a faulty process. + MaxBufSize int + + // Timeout limits the time a process can run. + Timeout time.Duration +} + +// NewCredentials returns a pointer to a new Credentials object wrapping the +// ProcessProvider. The credentials will expire every 15 minutes by default. +func NewCredentials(command string, options ...func(*ProcessProvider)) *credentials.Credentials { + p := &ProcessProvider{ + command: exec.Command(command), + Duration: DefaultDuration, + Timeout: DefaultTimeout, + MaxBufSize: DefaultBufSize, + } + + for _, option := range options { + option(p) + } + + return credentials.NewCredentials(p) +} + +// NewCredentialsTimeout returns a pointer to a new Credentials object with +// the specified command and timeout, and default duration and max buffer size. +func NewCredentialsTimeout(command string, timeout time.Duration) *credentials.Credentials { + p := NewCredentials(command, func(opt *ProcessProvider) { + opt.Timeout = timeout + }) + + return p +} + +// NewCredentialsCommand returns a pointer to a new Credentials object with +// the specified command, and default timeout, duration and max buffer size. +func NewCredentialsCommand(command *exec.Cmd, options ...func(*ProcessProvider)) *credentials.Credentials { + p := &ProcessProvider{ + command: command, + Duration: DefaultDuration, + Timeout: DefaultTimeout, + MaxBufSize: DefaultBufSize, + } + + for _, option := range options { + option(p) + } + + return credentials.NewCredentials(p) +} + +type credentialProcessResponse struct { + Version int + AccessKeyID string `json:"AccessKeyId"` + SecretAccessKey string + SessionToken string + Expiration *time.Time +} + +// Retrieve executes the 'credential_process' and returns the credentials. +func (p *ProcessProvider) Retrieve() (credentials.Value, error) { + out, err := p.executeCredentialProcess() + if err != nil { + return credentials.Value{ProviderName: ProviderName}, err + } + + // Serialize and validate response + resp := &credentialProcessResponse{} + if err = json.Unmarshal(out, resp); err != nil { + return credentials.Value{ProviderName: ProviderName}, awserr.New( + ErrCodeProcessProviderParse, + fmt.Sprintf("%s: %s", errMsgProcessProviderParse, string(out)), + err) + } + + if resp.Version != 1 { + return credentials.Value{ProviderName: ProviderName}, awserr.New( + ErrCodeProcessProviderVersion, + errMsgProcessProviderVersion, + nil) + } + + if len(resp.AccessKeyID) == 0 { + return credentials.Value{ProviderName: ProviderName}, awserr.New( + ErrCodeProcessProviderRequired, + errMsgProcessProviderMissKey, + nil) + } + + if len(resp.SecretAccessKey) == 0 { + return credentials.Value{ProviderName: ProviderName}, awserr.New( + ErrCodeProcessProviderRequired, + errMsgProcessProviderMissSecret, + nil) + } + + // Handle expiration + p.staticCreds = resp.Expiration == nil + if resp.Expiration != nil { + p.SetExpiration(*resp.Expiration, p.ExpiryWindow) + } + + return credentials.Value{ + ProviderName: ProviderName, + AccessKeyID: resp.AccessKeyID, + SecretAccessKey: resp.SecretAccessKey, + SessionToken: resp.SessionToken, + }, nil +} + +// IsExpired returns true if the credentials retrieved are expired, or not yet +// retrieved. +func (p *ProcessProvider) IsExpired() bool { + if p.staticCreds { + return false + } + return p.Expiry.IsExpired() +} + +// prepareCommand prepares the command to be executed. +func (p *ProcessProvider) prepareCommand() error { + + var cmdArgs []string + if runtime.GOOS == "windows" { + cmdArgs = []string{"cmd.exe", "/C"} + } else { + cmdArgs = []string{"sh", "-c"} + } + + if len(p.originalCommand) == 0 { + p.originalCommand = make([]string, len(p.command.Args)) + copy(p.originalCommand, p.command.Args) + + // check for empty command because it succeeds + if len(strings.TrimSpace(p.originalCommand[0])) < 1 { + return awserr.New( + ErrCodeProcessProviderExecution, + fmt.Sprintf( + "%s: %s", + errMsgProcessProviderPrepareCmd, + errMsgProcessProviderEmptyCmd), + nil) + } + } + + cmdArgs = append(cmdArgs, p.originalCommand...) + p.command = exec.Command(cmdArgs[0], cmdArgs[1:]...) + p.command.Env = os.Environ() + + return nil +} + +// executeCredentialProcess starts the credential process on the OS and +// returns the results or an error. +func (p *ProcessProvider) executeCredentialProcess() ([]byte, error) { + + if err := p.prepareCommand(); err != nil { + return nil, err + } + + // Setup the pipes + outReadPipe, outWritePipe, err := os.Pipe() + if err != nil { + return nil, awserr.New( + ErrCodeProcessProviderExecution, + errMsgProcessProviderPipe, + err) + } + + p.command.Stderr = os.Stderr // display stderr on console for MFA + p.command.Stdout = outWritePipe // get creds json on process's stdout + p.command.Stdin = os.Stdin // enable stdin for MFA + + output := bytes.NewBuffer(make([]byte, 0, p.MaxBufSize)) + + stdoutCh := make(chan error, 1) + go readInput( + io.LimitReader(outReadPipe, int64(p.MaxBufSize)), + output, + stdoutCh) + + execCh := make(chan error, 1) + go executeCommand(*p.command, execCh) + + finished := false + var errors []error + for !finished { + select { + case readError := <-stdoutCh: + errors = appendError(errors, readError) + finished = true + case execError := <-execCh: + err := outWritePipe.Close() + errors = appendError(errors, err) + errors = appendError(errors, execError) + if errors != nil { + return output.Bytes(), awserr.NewBatchError( + ErrCodeProcessProviderExecution, + errMsgProcessProviderProcess, + errors) + } + case <-time.After(p.Timeout): + finished = true + return output.Bytes(), awserr.NewBatchError( + ErrCodeProcessProviderExecution, + errMsgProcessProviderTimeout, + errors) // errors can be nil + } + } + + out := output.Bytes() + + if runtime.GOOS == "windows" { + // windows adds slashes to quotes + out = []byte(strings.Replace(string(out), `\"`, `"`, -1)) + } + + return out, nil +} + +// appendError conveniently checks for nil before appending slice +func appendError(errors []error, err error) []error { + if err != nil { + return append(errors, err) + } + return errors +} + +func executeCommand(cmd exec.Cmd, exec chan error) { + // Start the command + err := cmd.Start() + if err == nil { + err = cmd.Wait() + } + + exec <- err +} + +func readInput(r io.Reader, w io.Writer, read chan error) { + tee := io.TeeReader(r, w) + + _, err := ioutil.ReadAll(tee) + + if err == io.EOF { + err = nil + } + + read <- err // will only arrive here when write end of pipe is closed +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go index 7fb7cbf0db0..e1551495812 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go @@ -3,11 +3,10 @@ package credentials import ( "fmt" "os" - "path/filepath" - - "github.com/go-ini/ini" "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/internal/ini" + "github.com/aws/aws-sdk-go/internal/shareddefaults" ) // SharedCredsProviderName provides a name of SharedCreds provider @@ -15,8 +14,6 @@ const SharedCredsProviderName = "SharedCredentialsProvider" var ( // ErrSharedCredentialsHomeNotFound is emitted when the user directory cannot be found. - // - // @readonly ErrSharedCredentialsHomeNotFound = awserr.New("UserHomeNotFound", "user home directory not found.", nil) ) @@ -79,36 +76,37 @@ func (p *SharedCredentialsProvider) IsExpired() bool { // The credentials retrieved from the profile will be returned or error. Error will be // returned if it fails to read from the file, or the data is invalid. func loadProfile(filename, profile string) (Value, error) { - config, err := ini.Load(filename) + config, err := ini.OpenFile(filename) if err != nil { return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to load shared credentials file", err) } - iniProfile, err := config.GetSection(profile) - if err != nil { - return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", err) + + iniProfile, ok := config.GetSection(profile) + if !ok { + return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", nil) } - id, err := iniProfile.GetKey("aws_access_key_id") - if err != nil { + id := iniProfile.String("aws_access_key_id") + if len(id) == 0 { return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsAccessKey", fmt.Sprintf("shared credentials %s in %s did not contain aws_access_key_id", profile, filename), - err) + nil) } - secret, err := iniProfile.GetKey("aws_secret_access_key") - if err != nil { + secret := iniProfile.String("aws_secret_access_key") + if len(secret) == 0 { return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsSecret", fmt.Sprintf("shared credentials %s in %s did not contain aws_secret_access_key", profile, filename), nil) } // Default to empty string if not found - token := iniProfile.Key("aws_session_token") + token := iniProfile.String("aws_session_token") return Value{ - AccessKeyID: id.String(), - SecretAccessKey: secret.String(), - SessionToken: token.String(), + AccessKeyID: id, + SecretAccessKey: secret, + SessionToken: token, ProviderName: SharedCredsProviderName, }, nil } @@ -117,22 +115,23 @@ func loadProfile(filename, profile string) (Value, error) { // // Will return an error if the user's home directory path cannot be found. func (p *SharedCredentialsProvider) filename() (string, error) { - if p.Filename == "" { - if p.Filename = os.Getenv("AWS_SHARED_CREDENTIALS_FILE"); p.Filename != "" { - return p.Filename, nil - } - - homeDir := os.Getenv("HOME") // *nix - if homeDir == "" { // Windows - homeDir = os.Getenv("USERPROFILE") - } - if homeDir == "" { - return "", ErrSharedCredentialsHomeNotFound - } - - p.Filename = filepath.Join(homeDir, ".aws", "credentials") + if len(p.Filename) != 0 { + return p.Filename, nil + } + + if p.Filename = os.Getenv("AWS_SHARED_CREDENTIALS_FILE"); len(p.Filename) != 0 { + return p.Filename, nil } + if home := shareddefaults.UserHomeDir(); len(home) == 0 { + // Backwards compatibility of home directly not found error being returned. + // This error is too verbose, failure when opening the file would of been + // a better error to return. + return "", ErrSharedCredentialsHomeNotFound + } + + p.Filename = shareddefaults.SharedCredentialsFilename() + return p.Filename, nil } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go index 4f5dab3fcc4..531139e3971 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go @@ -9,8 +9,6 @@ const StaticProviderName = "StaticProvider" var ( // ErrStaticCredentialsEmpty is emitted when static credentials are empty. - // - // @readonly ErrStaticCredentialsEmpty = awserr.New("EmptyStaticCreds", "static credentials are empty", nil) ) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go index 30c847ae221..2e528d130d4 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go @@ -1,19 +1,115 @@ -// Package stscreds are credential Providers to retrieve STS AWS credentials. -// -// STS provides multiple ways to retrieve credentials which can be used when making -// future AWS service API operation calls. +/* +Package stscreds are credential Providers to retrieve STS AWS credentials. + +STS provides multiple ways to retrieve credentials which can be used when making +future AWS service API operation calls. + +The SDK will ensure that per instance of credentials.Credentials all requests +to refresh the credentials will be synchronized. But, the SDK is unable to +ensure synchronous usage of the AssumeRoleProvider if the value is shared +between multiple Credentials, Sessions or service clients. + +Assume Role + +To assume an IAM role using STS with the SDK you can create a new Credentials +with the SDKs's stscreds package. + + // Initial credentials loaded from SDK's default credential chain. Such as + // the environment, shared credentials (~/.aws/credentials), or EC2 Instance + // Role. These credentials will be used to to make the STS Assume Role API. + sess := session.Must(session.NewSession()) + + // Create the credentials from AssumeRoleProvider to assume the role + // referenced by the "myRoleARN" ARN. + creds := stscreds.NewCredentials(sess, "myRoleArn") + + // Create service client value configured for credentials + // from assumed role. + svc := s3.New(sess, &aws.Config{Credentials: creds}) + +Assume Role with static MFA Token + +To assume an IAM role with a MFA token you can either specify a MFA token code +directly or provide a function to prompt the user each time the credentials +need to refresh the role's credentials. Specifying the TokenCode should be used +for short lived operations that will not need to be refreshed, and when you do +not want to have direct control over the user provides their MFA token. + +With TokenCode the AssumeRoleProvider will be not be able to refresh the role's +credentials. + + // Create the credentials from AssumeRoleProvider to assume the role + // referenced by the "myRoleARN" ARN using the MFA token code provided. + creds := stscreds.NewCredentials(sess, "myRoleArn", func(p *stscreds.AssumeRoleProvider) { + p.SerialNumber = aws.String("myTokenSerialNumber") + p.TokenCode = aws.String("00000000") + }) + + // Create service client value configured for credentials + // from assumed role. + svc := s3.New(sess, &aws.Config{Credentials: creds}) + +Assume Role with MFA Token Provider + +To assume an IAM role with MFA for longer running tasks where the credentials +may need to be refreshed setting the TokenProvider field of AssumeRoleProvider +will allow the credential provider to prompt for new MFA token code when the +role's credentials need to be refreshed. + +The StdinTokenProvider function is available to prompt on stdin to retrieve +the MFA token code from the user. You can also implement custom prompts by +satisfing the TokenProvider function signature. + +Using StdinTokenProvider with multiple AssumeRoleProviders, or Credentials will +have undesirable results as the StdinTokenProvider will not be synchronized. A +single Credentials with an AssumeRoleProvider can be shared safely. + + // Create the credentials from AssumeRoleProvider to assume the role + // referenced by the "myRoleARN" ARN. Prompting for MFA token from stdin. + creds := stscreds.NewCredentials(sess, "myRoleArn", func(p *stscreds.AssumeRoleProvider) { + p.SerialNumber = aws.String("myTokenSerialNumber") + p.TokenProvider = stscreds.StdinTokenProvider + }) + + // Create service client value configured for credentials + // from assumed role. + svc := s3.New(sess, &aws.Config{Credentials: creds}) + +*/ package stscreds import ( "fmt" + "os" "time" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/internal/sdkrand" "github.com/aws/aws-sdk-go/service/sts" ) +// StdinTokenProvider will prompt on stderr and read from stdin for a string value. +// An error is returned if reading from stdin fails. +// +// Use this function go read MFA tokens from stdin. The function makes no attempt +// to make atomic prompts from stdin across multiple gorouties. +// +// Using StdinTokenProvider with multiple AssumeRoleProviders, or Credentials will +// have undesirable results as the StdinTokenProvider will not be synchronized. A +// single Credentials with an AssumeRoleProvider can be shared safely +// +// Will wait forever until something is provided on the stdin. +func StdinTokenProvider() (string, error) { + var v string + fmt.Fprintf(os.Stderr, "Assume Role MFA token code: ") + _, err := fmt.Scanln(&v) + + return v, err +} + // ProviderName provides a name of AssumeRole provider const ProviderName = "AssumeRoleProvider" @@ -27,8 +123,15 @@ type AssumeRoler interface { var DefaultDuration = time.Duration(15) * time.Minute // AssumeRoleProvider retrieves temporary credentials from the STS service, and -// keeps track of their expiration time. This provider must be used explicitly, -// as it is not included in the credentials chain. +// keeps track of their expiration time. +// +// This credential provider will be used by the SDKs default credential change +// when shared configuration is enabled, and the shared config or shared credentials +// file configure assume role. See Session docs for how to do this. +// +// AssumeRoleProvider does not provide any synchronization and it is not safe +// to share this value across multiple Credentials, Sessions, or service clients +// without also sharing the same Credentials instance. type AssumeRoleProvider struct { credentials.Expiry @@ -65,8 +168,23 @@ type AssumeRoleProvider struct { // assumed requires MFA (that is, if the policy includes a condition that tests // for MFA). If the role being assumed requires MFA and if the TokenCode value // is missing or expired, the AssumeRole call returns an "access denied" error. + // + // If SerialNumber is set and neither TokenCode nor TokenProvider are also + // set an error will be returned. TokenCode *string + // Async method of providing MFA token code for assuming an IAM role with MFA. + // The value returned by the function will be used as the TokenCode in the Retrieve + // call. See StdinTokenProvider for a provider that prompts and reads from stdin. + // + // This token provider will be called when ever the assumed role's + // credentials need to be refreshed when SerialNumber is also set and + // TokenCode is not set. + // + // If both TokenCode and TokenProvider is set, TokenProvider will be used and + // TokenCode is ignored. + TokenProvider func() (string, error) + // ExpiryWindow will allow the credentials to trigger refreshing prior to // the credentials actually expiring. This is beneficial so race conditions // with expiring credentials do not cause request to fail unexpectedly @@ -77,6 +195,18 @@ type AssumeRoleProvider struct { // // If ExpiryWindow is 0 or less it will be ignored. ExpiryWindow time.Duration + + // MaxJitterFrac reduces the effective Duration of each credential requested + // by a random percentage between 0 and MaxJitterFraction. MaxJitterFrac must + // have a value between 0 and 1. Any other value may lead to expected behavior. + // With a MaxJitterFrac value of 0, default) will no jitter will be used. + // + // For example, with a Duration of 30m and a MaxJitterFrac of 0.1, the + // AssumeRole call will be made with an arbitrary Duration between 27m and + // 30m. + // + // MaxJitterFrac should not be negative. + MaxJitterFrac float64 } // NewCredentials returns a pointer to a new Credentials object wrapping the @@ -85,6 +215,10 @@ type AssumeRoleProvider struct { // // Takes a Config provider to create the STS client. The ConfigProvider is // satisfied by the session.Session type. +// +// It is safe to share the returned Credentials with multiple Sessions and +// service clients. All access to the credentials and refreshing them +// will be synchronized. func NewCredentials(c client.ConfigProvider, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials { p := &AssumeRoleProvider{ Client: sts.New(c), @@ -103,7 +237,11 @@ func NewCredentials(c client.ConfigProvider, roleARN string, options ...func(*As // AssumeRoleProvider. The credentials will expire every 15 minutes and the // role will be named after a nanosecond timestamp of this operation. // -// Takes an AssumeRoler which can be satisfiede by the STS client. +// Takes an AssumeRoler which can be satisfied by the STS client. +// +// It is safe to share the returned Credentials with multiple Sessions and +// service clients. All access to the credentials and refreshing them +// will be synchronized. func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials { p := &AssumeRoleProvider{ Client: svc, @@ -120,7 +258,6 @@ func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ...func(* // Retrieve generates a new set of temporary credentials using STS. func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) { - // Apply defaults where parameters are not set. if p.RoleSessionName == "" { // Try to work out a role name that will hopefully end up unique. @@ -130,8 +267,9 @@ func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) { // Expire as often as AWS permits. p.Duration = DefaultDuration } + jitter := time.Duration(sdkrand.SeededRand.Float64() * p.MaxJitterFrac * float64(p.Duration)) input := &sts.AssumeRoleInput{ - DurationSeconds: aws.Int64(int64(p.Duration / time.Second)), + DurationSeconds: aws.Int64(int64((p.Duration - jitter) / time.Second)), RoleArn: aws.String(p.RoleARN), RoleSessionName: aws.String(p.RoleSessionName), ExternalId: p.ExternalID, @@ -139,12 +277,25 @@ func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) { if p.Policy != nil { input.Policy = p.Policy } - if p.SerialNumber != nil && p.TokenCode != nil { - input.SerialNumber = p.SerialNumber - input.TokenCode = p.TokenCode + if p.SerialNumber != nil { + if p.TokenCode != nil { + input.SerialNumber = p.SerialNumber + input.TokenCode = p.TokenCode + } else if p.TokenProvider != nil { + input.SerialNumber = p.SerialNumber + code, err := p.TokenProvider() + if err != nil { + return credentials.Value{ProviderName: ProviderName}, err + } + input.TokenCode = aws.String(code) + } else { + return credentials.Value{ProviderName: ProviderName}, + awserr.New("AssumeRoleTokenNotAvailable", + "assume role with MFA enabled, but neither TokenCode nor TokenProvider are set", nil) + } } - roleOutput, err := p.Client.AssumeRole(input) + roleOutput, err := p.Client.AssumeRole(input) if err != nil { return credentials.Value{ProviderName: ProviderName}, err } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go new file mode 100644 index 00000000000..b20b6339484 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/web_identity_provider.go @@ -0,0 +1,100 @@ +package stscreds + +import ( + "fmt" + "io/ioutil" + "strconv" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/service/sts" + "github.com/aws/aws-sdk-go/service/sts/stsiface" +) + +const ( + // ErrCodeWebIdentity will be used as an error code when constructing + // a new error to be returned during session creation or retrieval. + ErrCodeWebIdentity = "WebIdentityErr" + + // WebIdentityProviderName is the web identity provider name + WebIdentityProviderName = "WebIdentityCredentials" +) + +// now is used to return a time.Time object representing +// the current time. This can be used to easily test and +// compare test values. +var now = time.Now + +// WebIdentityRoleProvider is used to retrieve credentials using +// an OIDC token. +type WebIdentityRoleProvider struct { + credentials.Expiry + + client stsiface.STSAPI + ExpiryWindow time.Duration + + tokenFilePath string + roleARN string + roleSessionName string +} + +// NewWebIdentityCredentials will return a new set of credentials with a given +// configuration, role arn, and token file path. +func NewWebIdentityCredentials(c client.ConfigProvider, roleARN, roleSessionName, path string) *credentials.Credentials { + svc := sts.New(c) + p := NewWebIdentityRoleProvider(svc, roleARN, roleSessionName, path) + return credentials.NewCredentials(p) +} + +// NewWebIdentityRoleProvider will return a new WebIdentityRoleProvider with the +// provided stsiface.STSAPI +func NewWebIdentityRoleProvider(svc stsiface.STSAPI, roleARN, roleSessionName, path string) *WebIdentityRoleProvider { + return &WebIdentityRoleProvider{ + client: svc, + tokenFilePath: path, + roleARN: roleARN, + roleSessionName: roleSessionName, + } +} + +// Retrieve will attempt to assume a role from a token which is located at +// 'WebIdentityTokenFilePath' specified destination and if that is empty an +// error will be returned. +func (p *WebIdentityRoleProvider) Retrieve() (credentials.Value, error) { + b, err := ioutil.ReadFile(p.tokenFilePath) + if err != nil { + errMsg := fmt.Sprintf("unable to read file at %s", p.tokenFilePath) + return credentials.Value{}, awserr.New(ErrCodeWebIdentity, errMsg, err) + } + + sessionName := p.roleSessionName + if len(sessionName) == 0 { + // session name is used to uniquely identify a session. This simply + // uses unix time in nanoseconds to uniquely identify sessions. + sessionName = strconv.FormatInt(now().UnixNano(), 10) + } + req, resp := p.client.AssumeRoleWithWebIdentityRequest(&sts.AssumeRoleWithWebIdentityInput{ + RoleArn: &p.roleARN, + RoleSessionName: &sessionName, + WebIdentityToken: aws.String(string(b)), + }) + // InvalidIdentityToken error is a temporary error that can occur + // when assuming an Role with a JWT web identity token. + req.RetryErrorCodes = append(req.RetryErrorCodes, sts.ErrCodeInvalidIdentityTokenException) + if err := req.Send(); err != nil { + return credentials.Value{}, awserr.New(ErrCodeWebIdentity, "failed to retrieve credentials", err) + } + + p.SetExpiration(aws.TimeValue(resp.Credentials.Expiration), p.ExpiryWindow) + + value := credentials.Value{ + AccessKeyID: aws.StringValue(resp.Credentials.AccessKeyId), + SecretAccessKey: aws.StringValue(resp.Credentials.SecretAccessKey), + SessionToken: aws.StringValue(resp.Credentials.SessionToken), + ProviderName: WebIdentityProviderName, + } + return value, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go new file mode 100644 index 00000000000..25a66d1dda2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go @@ -0,0 +1,69 @@ +// Package csm provides the Client Side Monitoring (CSM) client which enables +// sending metrics via UDP connection to the CSM agent. This package provides +// control options, and configuration for the CSM client. The client can be +// controlled manually, or automatically via the SDK's Session configuration. +// +// Enabling CSM client via SDK's Session configuration +// +// The CSM client can be enabled automatically via SDK's Session configuration. +// The SDK's session configuration enables the CSM client if the AWS_CSM_PORT +// environment variable is set to a non-empty value. +// +// The configuration options for the CSM client via the SDK's session +// configuration are: +// +// * AWS_CSM_PORT= +// The port number the CSM agent will receive metrics on. +// +// * AWS_CSM_HOST= +// The hostname, or IP address the CSM agent will receive metrics on. +// Without port number. +// +// Manually enabling the CSM client +// +// The CSM client can be started, paused, and resumed manually. The Start +// function will enable the CSM client to publish metrics to the CSM agent. It +// is safe to call Start concurrently, but if Start is called additional times +// with different ClientID or address it will panic. +// +// r, err := csm.Start("clientID", ":31000") +// if err != nil { +// panic(fmt.Errorf("failed starting CSM: %v", err)) +// } +// +// When controlling the CSM client manually, you must also inject its request +// handlers into the SDK's Session configuration for the SDK's API clients to +// publish metrics. +// +// sess, err := session.NewSession(&aws.Config{}) +// if err != nil { +// panic(fmt.Errorf("failed loading session: %v", err)) +// } +// +// // Add CSM client's metric publishing request handlers to the SDK's +// // Session Configuration. +// r.InjectHandlers(&sess.Handlers) +// +// Controlling CSM client +// +// Once the CSM client has been enabled the Get function will return a Reporter +// value that you can use to pause and resume the metrics published to the CSM +// agent. If Get function is called before the reporter is enabled with the +// Start function or via SDK's Session configuration nil will be returned. +// +// The Pause method can be called to stop the CSM client publishing metrics to +// the CSM agent. The Continue method will resume metric publishing. +// +// // Get the CSM client Reporter. +// r := csm.Get() +// +// // Will pause monitoring +// r.Pause() +// resp, err = client.GetObject(&s3.GetObjectInput{ +// Bucket: aws.String("bucket"), +// Key: aws.String("key"), +// }) +// +// // Resume monitoring +// r.Continue() +package csm diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go new file mode 100644 index 00000000000..4b19e2800e3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go @@ -0,0 +1,89 @@ +package csm + +import ( + "fmt" + "strings" + "sync" +) + +var ( + lock sync.Mutex +) + +const ( + // DefaultPort is used when no port is specified. + DefaultPort = "31000" + + // DefaultHost is the host that will be used when none is specified. + DefaultHost = "127.0.0.1" +) + +// AddressWithDefaults returns a CSM address built from the host and port +// values. If the host or port is not set, default values will be used +// instead. If host is "localhost" it will be replaced with "127.0.0.1". +func AddressWithDefaults(host, port string) string { + if len(host) == 0 || strings.EqualFold(host, "localhost") { + host = DefaultHost + } + + if len(port) == 0 { + port = DefaultPort + } + + // Only IP6 host can contain a colon + if strings.Contains(host, ":") { + return "[" + host + "]:" + port + } + + return host + ":" + port +} + +// Start will start a long running go routine to capture +// client side metrics. Calling start multiple time will only +// start the metric listener once and will panic if a different +// client ID or port is passed in. +// +// r, err := csm.Start("clientID", "127.0.0.1:31000") +// if err != nil { +// panic(fmt.Errorf("expected no error, but received %v", err)) +// } +// sess := session.NewSession() +// r.InjectHandlers(sess.Handlers) +// +// svc := s3.New(sess) +// out, err := svc.GetObject(&s3.GetObjectInput{ +// Bucket: aws.String("bucket"), +// Key: aws.String("key"), +// }) +func Start(clientID string, url string) (*Reporter, error) { + lock.Lock() + defer lock.Unlock() + + if sender == nil { + sender = newReporter(clientID, url) + } else { + if sender.clientID != clientID { + panic(fmt.Errorf("inconsistent client IDs. %q was expected, but received %q", sender.clientID, clientID)) + } + + if sender.url != url { + panic(fmt.Errorf("inconsistent URLs. %q was expected, but received %q", sender.url, url)) + } + } + + if err := connect(url); err != nil { + sender = nil + return nil, err + } + + return sender, nil +} + +// Get will return a reporter if one exists, if one does not exist, nil will +// be returned. +func Get() *Reporter { + lock.Lock() + defer lock.Unlock() + + return sender +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go new file mode 100644 index 00000000000..5bacc791a1e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go @@ -0,0 +1,109 @@ +package csm + +import ( + "strconv" + "time" + + "github.com/aws/aws-sdk-go/aws" +) + +type metricTime time.Time + +func (t metricTime) MarshalJSON() ([]byte, error) { + ns := time.Duration(time.Time(t).UnixNano()) + return []byte(strconv.FormatInt(int64(ns/time.Millisecond), 10)), nil +} + +type metric struct { + ClientID *string `json:"ClientId,omitempty"` + API *string `json:"Api,omitempty"` + Service *string `json:"Service,omitempty"` + Timestamp *metricTime `json:"Timestamp,omitempty"` + Type *string `json:"Type,omitempty"` + Version *int `json:"Version,omitempty"` + + AttemptCount *int `json:"AttemptCount,omitempty"` + Latency *int `json:"Latency,omitempty"` + + Fqdn *string `json:"Fqdn,omitempty"` + UserAgent *string `json:"UserAgent,omitempty"` + AttemptLatency *int `json:"AttemptLatency,omitempty"` + + SessionToken *string `json:"SessionToken,omitempty"` + Region *string `json:"Region,omitempty"` + AccessKey *string `json:"AccessKey,omitempty"` + HTTPStatusCode *int `json:"HttpStatusCode,omitempty"` + XAmzID2 *string `json:"XAmzId2,omitempty"` + XAmzRequestID *string `json:"XAmznRequestId,omitempty"` + + AWSException *string `json:"AwsException,omitempty"` + AWSExceptionMessage *string `json:"AwsExceptionMessage,omitempty"` + SDKException *string `json:"SdkException,omitempty"` + SDKExceptionMessage *string `json:"SdkExceptionMessage,omitempty"` + + FinalHTTPStatusCode *int `json:"FinalHttpStatusCode,omitempty"` + FinalAWSException *string `json:"FinalAwsException,omitempty"` + FinalAWSExceptionMessage *string `json:"FinalAwsExceptionMessage,omitempty"` + FinalSDKException *string `json:"FinalSdkException,omitempty"` + FinalSDKExceptionMessage *string `json:"FinalSdkExceptionMessage,omitempty"` + + DestinationIP *string `json:"DestinationIp,omitempty"` + ConnectionReused *int `json:"ConnectionReused,omitempty"` + + AcquireConnectionLatency *int `json:"AcquireConnectionLatency,omitempty"` + ConnectLatency *int `json:"ConnectLatency,omitempty"` + RequestLatency *int `json:"RequestLatency,omitempty"` + DNSLatency *int `json:"DnsLatency,omitempty"` + TCPLatency *int `json:"TcpLatency,omitempty"` + SSLLatency *int `json:"SslLatency,omitempty"` + + MaxRetriesExceeded *int `json:"MaxRetriesExceeded,omitempty"` +} + +func (m *metric) TruncateFields() { + m.ClientID = truncateString(m.ClientID, 255) + m.UserAgent = truncateString(m.UserAgent, 256) + + m.AWSException = truncateString(m.AWSException, 128) + m.AWSExceptionMessage = truncateString(m.AWSExceptionMessage, 512) + + m.SDKException = truncateString(m.SDKException, 128) + m.SDKExceptionMessage = truncateString(m.SDKExceptionMessage, 512) + + m.FinalAWSException = truncateString(m.FinalAWSException, 128) + m.FinalAWSExceptionMessage = truncateString(m.FinalAWSExceptionMessage, 512) + + m.FinalSDKException = truncateString(m.FinalSDKException, 128) + m.FinalSDKExceptionMessage = truncateString(m.FinalSDKExceptionMessage, 512) +} + +func truncateString(v *string, l int) *string { + if v != nil && len(*v) > l { + nv := (*v)[:l] + return &nv + } + + return v +} + +func (m *metric) SetException(e metricException) { + switch te := e.(type) { + case awsException: + m.AWSException = aws.String(te.exception) + m.AWSExceptionMessage = aws.String(te.message) + case sdkException: + m.SDKException = aws.String(te.exception) + m.SDKExceptionMessage = aws.String(te.message) + } +} + +func (m *metric) SetFinalException(e metricException) { + switch te := e.(type) { + case awsException: + m.FinalAWSException = aws.String(te.exception) + m.FinalAWSExceptionMessage = aws.String(te.message) + case sdkException: + m.FinalSDKException = aws.String(te.exception) + m.FinalSDKExceptionMessage = aws.String(te.message) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go new file mode 100644 index 00000000000..82a3e345e93 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go @@ -0,0 +1,55 @@ +package csm + +import ( + "sync/atomic" +) + +const ( + runningEnum = iota + pausedEnum +) + +var ( + // MetricsChannelSize of metrics to hold in the channel + MetricsChannelSize = 100 +) + +type metricChan struct { + ch chan metric + paused *int64 +} + +func newMetricChan(size int) metricChan { + return metricChan{ + ch: make(chan metric, size), + paused: new(int64), + } +} + +func (ch *metricChan) Pause() { + atomic.StoreInt64(ch.paused, pausedEnum) +} + +func (ch *metricChan) Continue() { + atomic.StoreInt64(ch.paused, runningEnum) +} + +func (ch *metricChan) IsPaused() bool { + v := atomic.LoadInt64(ch.paused) + return v == pausedEnum +} + +// Push will push metrics to the metric channel if the channel +// is not paused +func (ch *metricChan) Push(m metric) bool { + if ch.IsPaused() { + return false + } + + select { + case ch.ch <- m: + return true + default: + return false + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go new file mode 100644 index 00000000000..54a99280ce9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go @@ -0,0 +1,26 @@ +package csm + +type metricException interface { + Exception() string + Message() string +} + +type requestException struct { + exception string + message string +} + +func (e requestException) Exception() string { + return e.exception +} +func (e requestException) Message() string { + return e.message +} + +type awsException struct { + requestException +} + +type sdkException struct { + requestException +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go new file mode 100644 index 00000000000..9186587fc04 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go @@ -0,0 +1,264 @@ +package csm + +import ( + "encoding/json" + "net" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/request" +) + +// Reporter will gather metrics of API requests made and +// send those metrics to the CSM endpoint. +type Reporter struct { + clientID string + url string + conn net.Conn + metricsCh metricChan + done chan struct{} +} + +var ( + sender *Reporter +) + +func connect(url string) error { + const network = "udp" + if err := sender.connect(network, url); err != nil { + return err + } + + if sender.done == nil { + sender.done = make(chan struct{}) + go sender.start() + } + + return nil +} + +func newReporter(clientID, url string) *Reporter { + return &Reporter{ + clientID: clientID, + url: url, + metricsCh: newMetricChan(MetricsChannelSize), + } +} + +func (rep *Reporter) sendAPICallAttemptMetric(r *request.Request) { + if rep == nil { + return + } + + now := time.Now() + creds, _ := r.Config.Credentials.Get() + + m := metric{ + ClientID: aws.String(rep.clientID), + API: aws.String(r.Operation.Name), + Service: aws.String(r.ClientInfo.ServiceID), + Timestamp: (*metricTime)(&now), + UserAgent: aws.String(r.HTTPRequest.Header.Get("User-Agent")), + Region: r.Config.Region, + Type: aws.String("ApiCallAttempt"), + Version: aws.Int(1), + + XAmzRequestID: aws.String(r.RequestID), + + AttemptLatency: aws.Int(int(now.Sub(r.AttemptTime).Nanoseconds() / int64(time.Millisecond))), + AccessKey: aws.String(creds.AccessKeyID), + } + + if r.HTTPResponse != nil { + m.HTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode) + } + + if r.Error != nil { + if awserr, ok := r.Error.(awserr.Error); ok { + m.SetException(getMetricException(awserr)) + } + } + + m.TruncateFields() + rep.metricsCh.Push(m) +} + +func getMetricException(err awserr.Error) metricException { + msg := err.Error() + code := err.Code() + + switch code { + case "RequestError", + request.ErrCodeSerialization, + request.CanceledErrorCode: + return sdkException{ + requestException{exception: code, message: msg}, + } + default: + return awsException{ + requestException{exception: code, message: msg}, + } + } +} + +func (rep *Reporter) sendAPICallMetric(r *request.Request) { + if rep == nil { + return + } + + now := time.Now() + m := metric{ + ClientID: aws.String(rep.clientID), + API: aws.String(r.Operation.Name), + Service: aws.String(r.ClientInfo.ServiceID), + Timestamp: (*metricTime)(&now), + UserAgent: aws.String(r.HTTPRequest.Header.Get("User-Agent")), + Type: aws.String("ApiCall"), + AttemptCount: aws.Int(r.RetryCount + 1), + Region: r.Config.Region, + Latency: aws.Int(int(time.Since(r.Time) / time.Millisecond)), + XAmzRequestID: aws.String(r.RequestID), + MaxRetriesExceeded: aws.Int(boolIntValue(r.RetryCount >= r.MaxRetries())), + } + + if r.HTTPResponse != nil { + m.FinalHTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode) + } + + if r.Error != nil { + if awserr, ok := r.Error.(awserr.Error); ok { + m.SetFinalException(getMetricException(awserr)) + } + } + + m.TruncateFields() + + // TODO: Probably want to figure something out for logging dropped + // metrics + rep.metricsCh.Push(m) +} + +func (rep *Reporter) connect(network, url string) error { + if rep.conn != nil { + rep.conn.Close() + } + + conn, err := net.Dial(network, url) + if err != nil { + return awserr.New("UDPError", "Could not connect", err) + } + + rep.conn = conn + + return nil +} + +func (rep *Reporter) close() { + if rep.done != nil { + close(rep.done) + } + + rep.metricsCh.Pause() +} + +func (rep *Reporter) start() { + defer func() { + rep.metricsCh.Pause() + }() + + for { + select { + case <-rep.done: + rep.done = nil + return + case m := <-rep.metricsCh.ch: + // TODO: What to do with this error? Probably should just log + b, err := json.Marshal(m) + if err != nil { + continue + } + + rep.conn.Write(b) + } + } +} + +// Pause will pause the metric channel preventing any new metrics from being +// added. It is safe to call concurrently with other calls to Pause, but if +// called concurently with Continue can lead to unexpected state. +func (rep *Reporter) Pause() { + lock.Lock() + defer lock.Unlock() + + if rep == nil { + return + } + + rep.close() +} + +// Continue will reopen the metric channel and allow for monitoring to be +// resumed. It is safe to call concurrently with other calls to Continue, but +// if called concurently with Pause can lead to unexpected state. +func (rep *Reporter) Continue() { + lock.Lock() + defer lock.Unlock() + if rep == nil { + return + } + + if !rep.metricsCh.IsPaused() { + return + } + + rep.metricsCh.Continue() +} + +// Client side metric handler names +const ( + APICallMetricHandlerName = "awscsm.SendAPICallMetric" + APICallAttemptMetricHandlerName = "awscsm.SendAPICallAttemptMetric" +) + +// InjectHandlers will will enable client side metrics and inject the proper +// handlers to handle how metrics are sent. +// +// InjectHandlers is NOT safe to call concurrently. Calling InjectHandlers +// multiple times may lead to unexpected behavior, (e.g. duplicate metrics). +// +// // Start must be called in order to inject the correct handlers +// r, err := csm.Start("clientID", "127.0.0.1:8094") +// if err != nil { +// panic(fmt.Errorf("expected no error, but received %v", err)) +// } +// +// sess := session.NewSession() +// r.InjectHandlers(&sess.Handlers) +// +// // create a new service client with our client side metric session +// svc := s3.New(sess) +func (rep *Reporter) InjectHandlers(handlers *request.Handlers) { + if rep == nil { + return + } + + handlers.Complete.PushFrontNamed(request.NamedHandler{ + Name: APICallMetricHandlerName, + Fn: rep.sendAPICallMetric, + }) + + handlers.CompleteAttempt.PushFrontNamed(request.NamedHandler{ + Name: APICallAttemptMetricHandlerName, + Fn: rep.sendAPICallAttemptMetric, + }) +} + +// boolIntValue return 1 for true and 0 for false. +func boolIntValue(b bool) int { + if b { + return 1 + } + + return 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go index 0ef55040a8f..23bb639e018 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go @@ -9,11 +9,14 @@ package defaults import ( "fmt" + "net" "net/http" + "net/url" "os" "time" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/corehandlers" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds" @@ -21,6 +24,7 @@ import ( "github.com/aws/aws-sdk-go/aws/ec2metadata" "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/shareddefaults" ) // A Defaults provides a collection of default values for SDK clients. @@ -56,7 +60,6 @@ func Config() *aws.Config { WithMaxRetries(aws.UseServiceDefaultRetries). WithLogger(aws.NewDefaultLogger()). WithLogLevel(aws.LogOff). - WithSleepDelay(time.Sleep). WithEndpointResolver(endpoints.DefaultResolver()) } @@ -71,6 +74,7 @@ func Handlers() request.Handlers { handlers.Validate.PushBackNamed(corehandlers.ValidateEndpointHandler) handlers.Validate.AfterEachFn = request.HandlerListStopOnError handlers.Build.PushBackNamed(corehandlers.SDKVersionUserAgentHandler) + handlers.Build.PushBackNamed(corehandlers.AddHostExecEnvUserAgentHander) handlers.Build.AfterEachFn = request.HandlerListStopOnError handlers.Sign.PushBackNamed(corehandlers.BuildContentLengthHandler) handlers.Send.PushBackNamed(corehandlers.ValidateReqSigHandler) @@ -89,33 +93,102 @@ func Handlers() request.Handlers { func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credentials { return credentials.NewCredentials(&credentials.ChainProvider{ VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors), - Providers: []credentials.Provider{ - &credentials.EnvProvider{}, - &credentials.SharedCredentialsProvider{Filename: "", Profile: ""}, - RemoteCredProvider(*cfg, handlers), - }, + Providers: CredProviders(cfg, handlers), }) } -// RemoteCredProvider returns a credenitials provider for the default remote +// CredProviders returns the slice of providers used in +// the default credential chain. +// +// For applications that need to use some other provider (for example use +// different environment variables for legacy reasons) but still fall back +// on the default chain of providers. This allows that default chaint to be +// automatically updated +func CredProviders(cfg *aws.Config, handlers request.Handlers) []credentials.Provider { + return []credentials.Provider{ + &credentials.EnvProvider{}, + &credentials.SharedCredentialsProvider{Filename: "", Profile: ""}, + RemoteCredProvider(*cfg, handlers), + } +} + +const ( + httpProviderAuthorizationEnvVar = "AWS_CONTAINER_AUTHORIZATION_TOKEN" + httpProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_FULL_URI" +) + +// RemoteCredProvider returns a credentials provider for the default remote // endpoints such as EC2 or ECS Roles. func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider { - ecsCredURI := os.Getenv("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI") + if u := os.Getenv(httpProviderEnvVar); len(u) > 0 { + return localHTTPCredProvider(cfg, handlers, u) + } - if len(ecsCredURI) > 0 { - return ecsCredProvider(cfg, handlers, ecsCredURI) + if uri := os.Getenv(shareddefaults.ECSCredsProviderEnvVar); len(uri) > 0 { + u := fmt.Sprintf("%s%s", shareddefaults.ECSContainerCredentialsURI, uri) + return httpCredProvider(cfg, handlers, u) } return ec2RoleProvider(cfg, handlers) } -func ecsCredProvider(cfg aws.Config, handlers request.Handlers, uri string) credentials.Provider { - const host = `169.254.170.2` +var lookupHostFn = net.LookupHost + +func isLoopbackHost(host string) (bool, error) { + ip := net.ParseIP(host) + if ip != nil { + return ip.IsLoopback(), nil + } + + // Host is not an ip, perform lookup + addrs, err := lookupHostFn(host) + if err != nil { + return false, err + } + for _, addr := range addrs { + if !net.ParseIP(addr).IsLoopback() { + return false, nil + } + } + + return true, nil +} + +func localHTTPCredProvider(cfg aws.Config, handlers request.Handlers, u string) credentials.Provider { + var errMsg string + + parsed, err := url.Parse(u) + if err != nil { + errMsg = fmt.Sprintf("invalid URL, %v", err) + } else { + host := aws.URLHostname(parsed) + if len(host) == 0 { + errMsg = "unable to parse host from local HTTP cred provider URL" + } else if isLoopback, loopbackErr := isLoopbackHost(host); loopbackErr != nil { + errMsg = fmt.Sprintf("failed to resolve host %q, %v", host, loopbackErr) + } else if !isLoopback { + errMsg = fmt.Sprintf("invalid endpoint host, %q, only loopback hosts are allowed.", host) + } + } + + if len(errMsg) > 0 { + if cfg.Logger != nil { + cfg.Logger.Log("Ignoring, HTTP credential provider", errMsg, err) + } + return credentials.ErrorProvider{ + Err: awserr.New("CredentialsEndpointError", errMsg, err), + ProviderName: endpointcreds.ProviderName, + } + } + + return httpCredProvider(cfg, handlers, u) +} - return endpointcreds.NewProviderClient(cfg, handlers, - fmt.Sprintf("http://%s%s", host, uri), +func httpCredProvider(cfg aws.Config, handlers request.Handlers, u string) credentials.Provider { + return endpointcreds.NewProviderClient(cfg, handlers, u, func(p *endpointcreds.Provider) { p.ExpiryWindow = 5 * time.Minute + p.AuthorizationToken = os.Getenv(httpProviderAuthorizationEnvVar) }, ) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go new file mode 100644 index 00000000000..ca0ee1dcc78 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go @@ -0,0 +1,27 @@ +package defaults + +import ( + "github.com/aws/aws-sdk-go/internal/shareddefaults" +) + +// SharedCredentialsFilename returns the SDK's default file path +// for the shared credentials file. +// +// Builds the shared config file path based on the OS's platform. +// +// - Linux/Unix: $HOME/.aws/credentials +// - Windows: %USERPROFILE%\.aws\credentials +func SharedCredentialsFilename() string { + return shareddefaults.SharedCredentialsFilename() +} + +// SharedConfigFilename returns the SDK's default file path for +// the shared config file. +// +// Builds the shared config file path based on the OS's platform. +// +// - Linux/Unix: $HOME/.aws/config +// - Windows: %USERPROFILE%\.aws\config +func SharedConfigFilename() string { + return shareddefaults.SharedConfigFilename() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/doc.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/doc.go new file mode 100644 index 00000000000..4fcb6161848 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/doc.go @@ -0,0 +1,56 @@ +// Package aws provides the core SDK's utilities and shared types. Use this package's +// utilities to simplify setting and reading API operations parameters. +// +// Value and Pointer Conversion Utilities +// +// This package includes a helper conversion utility for each scalar type the SDK's +// API use. These utilities make getting a pointer of the scalar, and dereferencing +// a pointer easier. +// +// Each conversion utility comes in two forms. Value to Pointer and Pointer to Value. +// The Pointer to value will safely dereference the pointer and return its value. +// If the pointer was nil, the scalar's zero value will be returned. +// +// The value to pointer functions will be named after the scalar type. So get a +// *string from a string value use the "String" function. This makes it easy to +// to get pointer of a literal string value, because getting the address of a +// literal requires assigning the value to a variable first. +// +// var strPtr *string +// +// // Without the SDK's conversion functions +// str := "my string" +// strPtr = &str +// +// // With the SDK's conversion functions +// strPtr = aws.String("my string") +// +// // Convert *string to string value +// str = aws.StringValue(strPtr) +// +// In addition to scalars the aws package also includes conversion utilities for +// map and slice for commonly types used in API parameters. The map and slice +// conversion functions use similar naming pattern as the scalar conversion +// functions. +// +// var strPtrs []*string +// var strs []string = []string{"Go", "Gophers", "Go"} +// +// // Convert []string to []*string +// strPtrs = aws.StringSlice(strs) +// +// // Convert []*string to []string +// strs = aws.StringValueSlice(strPtrs) +// +// SDK Default HTTP Client +// +// The SDK will use the http.DefaultClient if a HTTP client is not provided to +// the SDK's Session, or service client constructor. This means that if the +// http.DefaultClient is modified by other components of your application the +// modifications will be picked up by the SDK as well. +// +// In some cases this might be intended, but it is a better practice to create +// a custom HTTP Client to share explicitly through your application. You can +// configure the SDK to use the custom HTTP Client by setting the HTTPClient +// value of the SDK's Config type when creating a Session or service client. +package aws diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go index 984407a580f..12897eef626 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go @@ -4,28 +4,63 @@ import ( "encoding/json" "fmt" "net/http" - "path" + "strconv" "strings" "time" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkuri" ) +// getToken uses the duration to return a token for EC2 metadata service, +// or an error if the request failed. +func (c *EC2Metadata) getToken(duration time.Duration) (tokenOutput, error) { + op := &request.Operation{ + Name: "GetToken", + HTTPMethod: "PUT", + HTTPPath: "/api/token", + } + + var output tokenOutput + req := c.NewRequest(op, nil, &output) + + // remove the fetch token handler from the request handlers to avoid infinite recursion + req.Handlers.Sign.RemoveByName(fetchTokenHandlerName) + + // Swap the unmarshalMetadataHandler with unmarshalTokenHandler on this request. + req.Handlers.Unmarshal.Swap(unmarshalMetadataHandlerName, unmarshalTokenHandler) + + ttl := strconv.FormatInt(int64(duration/time.Second), 10) + req.HTTPRequest.Header.Set(ttlHeader, ttl) + + err := req.Send() + + // Errors with bad request status should be returned. + if err != nil { + err = awserr.NewRequestFailure( + awserr.New(req.HTTPResponse.Status, http.StatusText(req.HTTPResponse.StatusCode), err), + req.HTTPResponse.StatusCode, req.RequestID) + } + + return output, err +} + // GetMetadata uses the path provided to request information from the EC2 -// instance metdata service. The content will be returned as a string, or +// instance metadata service. The content will be returned as a string, or // error if the request failed. func (c *EC2Metadata) GetMetadata(p string) (string, error) { op := &request.Operation{ Name: "GetMetadata", HTTPMethod: "GET", - HTTPPath: path.Join("/", "meta-data", p), + HTTPPath: sdkuri.PathJoin("/meta-data", p), } - output := &metadataOutput{} + req := c.NewRequest(op, nil, output) - return output.Content, req.Send() + err := req.Send() + return output.Content, err } // GetUserData returns the userdata that was configured for the service. If @@ -35,18 +70,14 @@ func (c *EC2Metadata) GetUserData() (string, error) { op := &request.Operation{ Name: "GetUserData", HTTPMethod: "GET", - HTTPPath: path.Join("/", "user-data"), + HTTPPath: "/user-data", } output := &metadataOutput{} req := c.NewRequest(op, nil, output) - req.Handlers.UnmarshalError.PushBack(func(r *request.Request) { - if r.HTTPResponse.StatusCode == http.StatusNotFound { - r.Error = awserr.New("NotFoundError", "user-data not found", r.Error) - } - }) - return output.Content, req.Send() + err := req.Send() + return output.Content, err } // GetDynamicData uses the path provided to request information from the EC2 @@ -56,13 +87,14 @@ func (c *EC2Metadata) GetDynamicData(p string) (string, error) { op := &request.Operation{ Name: "GetDynamicData", HTTPMethod: "GET", - HTTPPath: path.Join("/", "dynamic", p), + HTTPPath: sdkuri.PathJoin("/dynamic", p), } output := &metadataOutput{} req := c.NewRequest(op, nil, output) - return output.Content, req.Send() + err := req.Send() + return output.Content, err } // GetInstanceIdentityDocument retrieves an identity document describing an @@ -79,7 +111,7 @@ func (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentityDocument doc := EC2InstanceIdentityDocument{} if err := json.NewDecoder(strings.NewReader(resp)).Decode(&doc); err != nil { return EC2InstanceIdentityDocument{}, - awserr.New("SerializationError", + awserr.New(request.ErrCodeSerialization, "failed to decode EC2 instance identity document", err) } @@ -98,7 +130,7 @@ func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) { info := EC2IAMInfo{} if err := json.NewDecoder(strings.NewReader(resp)).Decode(&info); err != nil { return EC2IAMInfo{}, - awserr.New("SerializationError", + awserr.New(request.ErrCodeSerialization, "failed to decode EC2 IAM info", err) } @@ -113,13 +145,17 @@ func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) { // Region returns the region the instance is running in. func (c *EC2Metadata) Region() (string, error) { - resp, err := c.GetMetadata("placement/availability-zone") + ec2InstanceIdentityDocument, err := c.GetInstanceIdentityDocument() if err != nil { return "", err } - - // returns region without the suffix. Eg: us-west-2a becomes us-west-2 - return resp[:len(resp)-1], nil + // extract region from the ec2InstanceIdentityDocument + region := ec2InstanceIdentityDocument.Region + if len(region) == 0 { + return "", awserr.New("EC2MetadataError", "invalid region received for ec2metadata instance", nil) + } + // returns region + return region, nil } // Available returns if the application has access to the EC2 Metadata service. @@ -145,18 +181,19 @@ type EC2IAMInfo struct { // An EC2InstanceIdentityDocument provides the shape for unmarshaling // an instance identity document type EC2InstanceIdentityDocument struct { - DevpayProductCodes []string `json:"devpayProductCodes"` - AvailabilityZone string `json:"availabilityZone"` - PrivateIP string `json:"privateIp"` - Version string `json:"version"` - Region string `json:"region"` - InstanceID string `json:"instanceId"` - BillingProducts []string `json:"billingProducts"` - InstanceType string `json:"instanceType"` - AccountID string `json:"accountId"` - PendingTime time.Time `json:"pendingTime"` - ImageID string `json:"imageId"` - KernelID string `json:"kernelId"` - RamdiskID string `json:"ramdiskId"` - Architecture string `json:"architecture"` + DevpayProductCodes []string `json:"devpayProductCodes"` + MarketplaceProductCodes []string `json:"marketplaceProductCodes"` + AvailabilityZone string `json:"availabilityZone"` + PrivateIP string `json:"privateIp"` + Version string `json:"version"` + Region string `json:"region"` + InstanceID string `json:"instanceId"` + BillingProducts []string `json:"billingProducts"` + InstanceType string `json:"instanceType"` + AccountID string `json:"accountId"` + PendingTime time.Time `json:"pendingTime"` + ImageID string `json:"imageId"` + KernelID string `json:"kernelId"` + RamdiskID string `json:"ramdiskId"` + Architecture string `json:"architecture"` } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go index 5b4379dbd8e..8eccac05aa2 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go @@ -1,5 +1,10 @@ // Package ec2metadata provides the client for making API calls to the // EC2 Metadata service. +// +// This package's client can be disabled completely by setting the environment +// variable "AWS_EC2_METADATA_DISABLED=true". This environment variable set to +// true instructs the SDK to disable the EC2 Metadata client. The client cannot +// be used while the environment variable is set to true, (case insensitive). package ec2metadata import ( @@ -7,17 +12,38 @@ import ( "errors" "io" "net/http" + "os" + "strconv" + "strings" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/aws/corehandlers" "github.com/aws/aws-sdk-go/aws/request" ) -// ServiceName is the name of the service. -const ServiceName = "ec2metadata" +const ( + // ServiceName is the name of the service. + ServiceName = "ec2metadata" + disableServiceEnvVar = "AWS_EC2_METADATA_DISABLED" + + // Headers for Token and TTL + ttlHeader = "x-aws-ec2-metadata-token-ttl-seconds" + tokenHeader = "x-aws-ec2-metadata-token" + + // Named Handler constants + fetchTokenHandlerName = "FetchTokenHandler" + unmarshalMetadataHandlerName = "unmarshalMetadataHandler" + unmarshalTokenHandlerName = "unmarshalTokenHandler" + enableTokenProviderHandlerName = "enableTokenProviderHandler" + + // TTL constants + defaultTTL = 21600 * time.Second + ttlExpirationWindow = 30 * time.Second +) // A EC2Metadata is an EC2 Metadata service Client. type EC2Metadata struct { @@ -63,6 +89,7 @@ func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegio cfg, metadata.ClientInfo{ ServiceName: ServiceName, + ServiceID: ServiceName, Endpoint: endpoint, APIVersion: "latest", }, @@ -70,16 +97,47 @@ func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegio ), } - svc.Handlers.Unmarshal.PushBack(unmarshalHandler) + // token provider instance + tp := newTokenProvider(svc, defaultTTL) + + // NamedHandler for fetching token + svc.Handlers.Sign.PushBackNamed(request.NamedHandler{ + Name: fetchTokenHandlerName, + Fn: tp.fetchTokenHandler, + }) + // NamedHandler for enabling token provider + svc.Handlers.Complete.PushBackNamed(request.NamedHandler{ + Name: enableTokenProviderHandlerName, + Fn: tp.enableTokenProviderHandler, + }) + + svc.Handlers.Unmarshal.PushBackNamed(unmarshalHandler) svc.Handlers.UnmarshalError.PushBack(unmarshalError) svc.Handlers.Validate.Clear() svc.Handlers.Validate.PushBack(validateEndpointHandler) + // Disable the EC2 Metadata service if the environment variable is set. + // This short-circuits the service's functionality to always fail to send + // requests. + if strings.ToLower(os.Getenv(disableServiceEnvVar)) == "true" { + svc.Handlers.Send.SwapNamed(request.NamedHandler{ + Name: corehandlers.SendHandler.Name, + Fn: func(r *request.Request) { + r.HTTPResponse = &http.Response{ + Header: http.Header{}, + } + r.Error = awserr.New( + request.CanceledErrorCode, + "EC2 IMDS access disabled via "+disableServiceEnvVar+" env var", + nil) + }, + }) + } + // Add additional options to the service config for _, option := range opts { option(svc.Client) } - return svc } @@ -91,30 +149,74 @@ type metadataOutput struct { Content string } -func unmarshalHandler(r *request.Request) { - defer r.HTTPResponse.Body.Close() - b := &bytes.Buffer{} - if _, err := io.Copy(b, r.HTTPResponse.Body); err != nil { - r.Error = awserr.New("SerializationError", "unable to unmarshal EC2 metadata respose", err) - return - } +type tokenOutput struct { + Token string + TTL time.Duration +} - if data, ok := r.Data.(*metadataOutput); ok { - data.Content = b.String() - } +// unmarshal token handler is used to parse the response of a getToken operation +var unmarshalTokenHandler = request.NamedHandler{ + Name: unmarshalTokenHandlerName, + Fn: func(r *request.Request) { + defer r.HTTPResponse.Body.Close() + var b bytes.Buffer + if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { + r.Error = awserr.NewRequestFailure(awserr.New(request.ErrCodeSerialization, + "unable to unmarshal EC2 metadata response", err), r.HTTPResponse.StatusCode, r.RequestID) + return + } + + v := r.HTTPResponse.Header.Get(ttlHeader) + data, ok := r.Data.(*tokenOutput) + if !ok { + return + } + + data.Token = b.String() + // TTL is in seconds + i, err := strconv.ParseInt(v, 10, 64) + if err != nil { + r.Error = awserr.NewRequestFailure(awserr.New(request.ParamFormatErrCode, + "unable to parse EC2 token TTL response", err), r.HTTPResponse.StatusCode, r.RequestID) + return + } + t := time.Duration(i) * time.Second + data.TTL = t + }, +} + +var unmarshalHandler = request.NamedHandler{ + Name: unmarshalMetadataHandlerName, + Fn: func(r *request.Request) { + defer r.HTTPResponse.Body.Close() + var b bytes.Buffer + if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { + r.Error = awserr.NewRequestFailure(awserr.New(request.ErrCodeSerialization, + "unable to unmarshal EC2 metadata response", err), r.HTTPResponse.StatusCode, r.RequestID) + return + } + + if data, ok := r.Data.(*metadataOutput); ok { + data.Content = b.String() + } + }, } func unmarshalError(r *request.Request) { defer r.HTTPResponse.Body.Close() - b := &bytes.Buffer{} - if _, err := io.Copy(b, r.HTTPResponse.Body); err != nil { - r.Error = awserr.New("SerializationError", "unable to unmarshal EC2 metadata error respose", err) + var b bytes.Buffer + + if _, err := io.Copy(&b, r.HTTPResponse.Body); err != nil { + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, "unable to unmarshal EC2 metadata error response", err), + r.HTTPResponse.StatusCode, r.RequestID) return } // Response body format is not consistent between metadata endpoints. // Grab the error message as a string and include that as the source error - r.Error = awserr.New("EC2MetadataError", "failed to make EC2Metadata request", errors.New(b.String())) + r.Error = awserr.NewRequestFailure(awserr.New("EC2MetadataError", "failed to make EC2Metadata request", errors.New(b.String())), + r.HTTPResponse.StatusCode, r.RequestID) } func validateEndpointHandler(r *request.Request) { diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go new file mode 100644 index 00000000000..06f76055f36 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/token_provider.go @@ -0,0 +1,92 @@ +package ec2metadata + +import ( + "net/http" + "sync/atomic" + "time" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/request" +) + +// A tokenProvider struct provides access to EC2Metadata client +// and atomic instance of a token, along with configuredTTL for it. +// tokenProvider also provides an atomic flag to disable the +// fetch token operation. +// The disabled member will use 0 as false, and 1 as true. +type tokenProvider struct { + client *EC2Metadata + token atomic.Value + configuredTTL time.Duration + disabled uint32 +} + +// A ec2Token struct helps use of token in EC2 Metadata service ops +type ec2Token struct { + token string + credentials.Expiry +} + +// newTokenProvider provides a pointer to a tokenProvider instance +func newTokenProvider(c *EC2Metadata, duration time.Duration) *tokenProvider { + return &tokenProvider{client: c, configuredTTL: duration} +} + +// fetchTokenHandler fetches token for EC2Metadata service client by default. +func (t *tokenProvider) fetchTokenHandler(r *request.Request) { + + // short-circuits to insecure data flow if tokenProvider is disabled. + if v := atomic.LoadUint32(&t.disabled); v == 1 { + return + } + + if ec2Token, ok := t.token.Load().(ec2Token); ok && !ec2Token.IsExpired() { + r.HTTPRequest.Header.Set(tokenHeader, ec2Token.token) + return + } + + output, err := t.client.getToken(t.configuredTTL) + + if err != nil { + + // change the disabled flag on token provider to true, + // when error is request timeout error. + if requestFailureError, ok := err.(awserr.RequestFailure); ok { + switch requestFailureError.StatusCode() { + case http.StatusForbidden, http.StatusNotFound, http.StatusMethodNotAllowed: + atomic.StoreUint32(&t.disabled, 1) + case http.StatusBadRequest: + r.Error = requestFailureError + } + + // Check if request timed out while waiting for response + if e, ok := requestFailureError.OrigErr().(awserr.Error); ok { + if e.Code() == "RequestError" { + atomic.StoreUint32(&t.disabled, 1) + } + } + } + return + } + + newToken := ec2Token{ + token: output.Token, + } + newToken.SetExpiration(time.Now().Add(output.TTL), ttlExpirationWindow) + t.token.Store(newToken) + + // Inject token header to the request. + if ec2Token, ok := t.token.Load().(ec2Token); ok { + r.HTTPRequest.Header.Set(tokenHeader, ec2Token.token) + } +} + +// enableTokenProviderHandler enables the token provider +func (t *tokenProvider) enableTokenProviderHandler(r *request.Request) { + // If the error code status is 401, we enable the token provider + if e, ok := r.Error.(awserr.RequestFailure); ok && e != nil && + e.StatusCode() == http.StatusUnauthorized { + atomic.StoreUint32(&t.disabled, 0) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go index 74f72de0735..343a2106f81 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go @@ -83,7 +83,10 @@ func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions) (Resol p := &ps[i] custAddEC2Metadata(p) custAddS3DualStack(p) + custRegionalS3(p) custRmIotDataService(p) + custFixAppAutoscalingChina(p) + custFixAppAutoscalingUsGov(p) } return ps, nil @@ -94,7 +97,39 @@ func custAddS3DualStack(p *partition) { return } - s, ok := p.Services["s3"] + custAddDualstack(p, "s3") + custAddDualstack(p, "s3-control") +} + +func custRegionalS3(p *partition) { + if p.ID != "aws" { + return + } + + service, ok := p.Services["s3"] + if !ok { + return + } + + // If global endpoint already exists no customization needed. + if _, ok := service.Endpoints["aws-global"]; ok { + return + } + + service.PartitionEndpoint = "aws-global" + service.Endpoints["us-east-1"] = endpoint{} + service.Endpoints["aws-global"] = endpoint{ + Hostname: "s3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + } + + p.Services["s3"] = service +} + +func custAddDualstack(p *partition, svcName string) { + s, ok := p.Services[svcName] if !ok { return } @@ -102,7 +137,7 @@ func custAddS3DualStack(p *partition) { s.Defaults.HasDualStack = boxedTrue s.Defaults.DualStackHostname = "{service}.dualstack.{region}.{dnsSuffix}" - p.Services["s3"] = s + p.Services[svcName] = s } func custAddEC2Metadata(p *partition) { @@ -122,6 +157,54 @@ func custRmIotDataService(p *partition) { delete(p.Services, "data.iot") } +func custFixAppAutoscalingChina(p *partition) { + if p.ID != "aws-cn" { + return + } + + const serviceName = "application-autoscaling" + s, ok := p.Services[serviceName] + if !ok { + return + } + + const expectHostname = `autoscaling.{region}.amazonaws.com` + if e, a := s.Defaults.Hostname, expectHostname; e != a { + fmt.Printf("custFixAppAutoscalingChina: ignoring customization, expected %s, got %s\n", e, a) + return + } + + s.Defaults.Hostname = expectHostname + ".cn" + p.Services[serviceName] = s +} + +func custFixAppAutoscalingUsGov(p *partition) { + if p.ID != "aws-us-gov" { + return + } + + const serviceName = "application-autoscaling" + s, ok := p.Services[serviceName] + if !ok { + return + } + + if a := s.Defaults.CredentialScope.Service; a != "" { + fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty credential scope service, got %s\n", a) + return + } + + if a := s.Defaults.Hostname; a != "" { + fmt.Printf("custFixAppAutoscalingUsGov: ignoring customization, expected empty hostname, got %s\n", a) + return + } + + s.Defaults.CredentialScope.Service = "application-autoscaling" + s.Defaults.Hostname = "autoscaling.{region}.amazonaws.com" + + p.Services[serviceName] = s +} + type decodeModelError struct { awsError } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go index 53616560d82..0f77e9caeab 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go @@ -1,4 +1,4 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT. package endpoints @@ -11,10 +11,13 @@ const ( AwsPartitionID = "aws" // AWS Standard partition. AwsCnPartitionID = "aws-cn" // AWS China partition. AwsUsGovPartitionID = "aws-us-gov" // AWS GovCloud (US) partition. + AwsIsoPartitionID = "aws-iso" // AWS ISO (US) partition. + AwsIsoBPartitionID = "aws-iso-b" // AWS ISOB (US) partition. ) // AWS Standard partition's regions. const ( + ApEast1RegionID = "ap-east-1" // Asia Pacific (Hong Kong). ApNortheast1RegionID = "ap-northeast-1" // Asia Pacific (Tokyo). ApNortheast2RegionID = "ap-northeast-2" // Asia Pacific (Seoul). ApSouth1RegionID = "ap-south-1" // Asia Pacific (Mumbai). @@ -22,8 +25,11 @@ const ( ApSoutheast2RegionID = "ap-southeast-2" // Asia Pacific (Sydney). CaCentral1RegionID = "ca-central-1" // Canada (Central). EuCentral1RegionID = "eu-central-1" // EU (Frankfurt). + EuNorth1RegionID = "eu-north-1" // EU (Stockholm). EuWest1RegionID = "eu-west-1" // EU (Ireland). EuWest2RegionID = "eu-west-2" // EU (London). + EuWest3RegionID = "eu-west-3" // EU (Paris). + MeSouth1RegionID = "me-south-1" // Middle East (Bahrain). SaEast1RegionID = "sa-east-1" // South America (Sao Paulo). UsEast1RegionID = "us-east-1" // US East (N. Virginia). UsEast2RegionID = "us-east-2" // US East (Ohio). @@ -33,128 +39,51 @@ const ( // AWS China partition's regions. const ( - CnNorth1RegionID = "cn-north-1" // China (Beijing). + CnNorth1RegionID = "cn-north-1" // China (Beijing). + CnNorthwest1RegionID = "cn-northwest-1" // China (Ningxia). ) // AWS GovCloud (US) partition's regions. const ( + UsGovEast1RegionID = "us-gov-east-1" // AWS GovCloud (US-East). UsGovWest1RegionID = "us-gov-west-1" // AWS GovCloud (US). ) -// Service identifiers +// AWS ISO (US) partition's regions. const ( - AcmServiceID = "acm" // Acm. - ApigatewayServiceID = "apigateway" // Apigateway. - ApplicationAutoscalingServiceID = "application-autoscaling" // ApplicationAutoscaling. - Appstream2ServiceID = "appstream2" // Appstream2. - AutoscalingServiceID = "autoscaling" // Autoscaling. - BatchServiceID = "batch" // Batch. - BudgetsServiceID = "budgets" // Budgets. - ClouddirectoryServiceID = "clouddirectory" // Clouddirectory. - CloudformationServiceID = "cloudformation" // Cloudformation. - CloudfrontServiceID = "cloudfront" // Cloudfront. - CloudhsmServiceID = "cloudhsm" // Cloudhsm. - CloudsearchServiceID = "cloudsearch" // Cloudsearch. - CloudtrailServiceID = "cloudtrail" // Cloudtrail. - CodebuildServiceID = "codebuild" // Codebuild. - CodecommitServiceID = "codecommit" // Codecommit. - CodedeployServiceID = "codedeploy" // Codedeploy. - CodepipelineServiceID = "codepipeline" // Codepipeline. - CognitoIdentityServiceID = "cognito-identity" // CognitoIdentity. - CognitoIdpServiceID = "cognito-idp" // CognitoIdp. - CognitoSyncServiceID = "cognito-sync" // CognitoSync. - ConfigServiceID = "config" // Config. - CurServiceID = "cur" // Cur. - DatapipelineServiceID = "datapipeline" // Datapipeline. - DevicefarmServiceID = "devicefarm" // Devicefarm. - DirectconnectServiceID = "directconnect" // Directconnect. - DiscoveryServiceID = "discovery" // Discovery. - DmsServiceID = "dms" // Dms. - DsServiceID = "ds" // Ds. - DynamodbServiceID = "dynamodb" // Dynamodb. - Ec2ServiceID = "ec2" // Ec2. - Ec2metadataServiceID = "ec2metadata" // Ec2metadata. - EcrServiceID = "ecr" // Ecr. - EcsServiceID = "ecs" // Ecs. - ElasticacheServiceID = "elasticache" // Elasticache. - ElasticbeanstalkServiceID = "elasticbeanstalk" // Elasticbeanstalk. - ElasticfilesystemServiceID = "elasticfilesystem" // Elasticfilesystem. - ElasticloadbalancingServiceID = "elasticloadbalancing" // Elasticloadbalancing. - ElasticmapreduceServiceID = "elasticmapreduce" // Elasticmapreduce. - ElastictranscoderServiceID = "elastictranscoder" // Elastictranscoder. - EmailServiceID = "email" // Email. - EsServiceID = "es" // Es. - EventsServiceID = "events" // Events. - FirehoseServiceID = "firehose" // Firehose. - GameliftServiceID = "gamelift" // Gamelift. - GlacierServiceID = "glacier" // Glacier. - HealthServiceID = "health" // Health. - IamServiceID = "iam" // Iam. - ImportexportServiceID = "importexport" // Importexport. - InspectorServiceID = "inspector" // Inspector. - IotServiceID = "iot" // Iot. - KinesisServiceID = "kinesis" // Kinesis. - KinesisanalyticsServiceID = "kinesisanalytics" // Kinesisanalytics. - KmsServiceID = "kms" // Kms. - LambdaServiceID = "lambda" // Lambda. - LightsailServiceID = "lightsail" // Lightsail. - LogsServiceID = "logs" // Logs. - MachinelearningServiceID = "machinelearning" // Machinelearning. - MarketplacecommerceanalyticsServiceID = "marketplacecommerceanalytics" // Marketplacecommerceanalytics. - MeteringMarketplaceServiceID = "metering.marketplace" // MeteringMarketplace. - MobileanalyticsServiceID = "mobileanalytics" // Mobileanalytics. - MonitoringServiceID = "monitoring" // Monitoring. - OpsworksServiceID = "opsworks" // Opsworks. - OpsworksCmServiceID = "opsworks-cm" // OpsworksCm. - PinpointServiceID = "pinpoint" // Pinpoint. - PollyServiceID = "polly" // Polly. - RdsServiceID = "rds" // Rds. - RedshiftServiceID = "redshift" // Redshift. - RekognitionServiceID = "rekognition" // Rekognition. - Route53ServiceID = "route53" // Route53. - Route53domainsServiceID = "route53domains" // Route53domains. - RuntimeLexServiceID = "runtime.lex" // RuntimeLex. - S3ServiceID = "s3" // S3. - SdbServiceID = "sdb" // Sdb. - ServicecatalogServiceID = "servicecatalog" // Servicecatalog. - ShieldServiceID = "shield" // Shield. - SmsServiceID = "sms" // Sms. - SnowballServiceID = "snowball" // Snowball. - SnsServiceID = "sns" // Sns. - SqsServiceID = "sqs" // Sqs. - SsmServiceID = "ssm" // Ssm. - StatesServiceID = "states" // States. - StoragegatewayServiceID = "storagegateway" // Storagegateway. - StreamsDynamodbServiceID = "streams.dynamodb" // StreamsDynamodb. - StsServiceID = "sts" // Sts. - SupportServiceID = "support" // Support. - SwfServiceID = "swf" // Swf. - WafServiceID = "waf" // Waf. - WafRegionalServiceID = "waf-regional" // WafRegional. - WorkspacesServiceID = "workspaces" // Workspaces. - XrayServiceID = "xray" // Xray. + UsIsoEast1RegionID = "us-iso-east-1" // US ISO East. +) + +// AWS ISOB (US) partition's regions. +const ( + UsIsobEast1RegionID = "us-isob-east-1" // US ISOB East (Ohio). ) // DefaultResolver returns an Endpoint resolver that will be able -// to resolve endpoints for: AWS Standard, AWS China, and AWS GovCloud (US). +// to resolve endpoints for: AWS Standard, AWS China, AWS GovCloud (US), AWS ISO (US), and AWS ISOB (US). // -// Casting the return value of this func to a EnumPartitions will -// allow you to get a list of the partitions in the order the endpoints -// will be resolved in. +// Use DefaultPartitions() to get the list of the default partitions. +func DefaultResolver() Resolver { + return defaultPartitions +} + +// DefaultPartitions returns a list of the partitions the SDK is bundled +// with. The available partitions are: AWS Standard, AWS China, AWS GovCloud (US), AWS ISO (US), and AWS ISOB (US). // -// resolver := endpoints.DefaultResolver() -// partitions := resolver.(endpoints.EnumPartitions).Partitions() +// partitions := endpoints.DefaultPartitions // for _, p := range partitions { // // ... inspect partitions // } -func DefaultResolver() Resolver { - return defaultPartitions +func DefaultPartitions() []Partition { + return defaultPartitions.Partitions() } var defaultPartitions = partitions{ awsPartition, awscnPartition, awsusgovPartition, + awsisoPartition, + awsisobPartition, } // AwsPartition returns the Resolver for AWS Standard. @@ -168,7 +97,7 @@ var awsPartition = partition{ DNSSuffix: "amazonaws.com", RegionRegex: regionRegex{ Regexp: func() *regexp.Regexp { - reg, _ := regexp.Compile("^(us|eu|ap|sa|ca)\\-\\w+\\-\\d+$") + reg, _ := regexp.Compile("^(us|eu|ap|sa|ca|me)\\-\\w+\\-\\d+$") return reg }(), }, @@ -178,6 +107,9 @@ var awsPartition = partition{ SignatureVersions: []string{"v4"}, }, Regions: regions{ + "ap-east-1": region{ + Description: "Asia Pacific (Hong Kong)", + }, "ap-northeast-1": region{ Description: "Asia Pacific (Tokyo)", }, @@ -199,12 +131,21 @@ var awsPartition = partition{ "eu-central-1": region{ Description: "EU (Frankfurt)", }, + "eu-north-1": region{ + Description: "EU (Stockholm)", + }, "eu-west-1": region{ Description: "EU (Ireland)", }, "eu-west-2": region{ Description: "EU (London)", }, + "eu-west-3": region{ + Description: "EU (Paris)", + }, + "me-south-1": region{ + Description: "Middle East (Bahrain)", + }, "sa-east-1": region{ Description: "South America (Sao Paulo)", }, @@ -222,9 +163,16 @@ var awsPartition = partition{ }, }, Services: services{ + "a4b": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, "acm": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -232,8 +180,11 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -241,66 +192,171 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "apigateway": service{ - + "acm-pca": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "application-autoscaling": service{ - Defaults: endpoint{ - Hostname: "autoscaling.{region}.amazonaws.com", - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Service: "application-autoscaling", + "api.ecr": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{ + Hostname: "api.ecr.ap-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-east-1", + }, + }, + "ap-northeast-1": endpoint{ + Hostname: "api.ecr.ap-northeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "api.ecr.ap-northeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-south-1": endpoint{ + Hostname: "api.ecr.ap-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-south-1", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "api.ecr.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "api.ecr.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "api.ecr.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "api.ecr.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-north-1": endpoint{ + Hostname: "api.ecr.eu-north-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-north-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "api.ecr.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "api.ecr.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "eu-west-3": endpoint{ + Hostname: "api.ecr.eu-west-3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-3", + }, + }, + "me-south-1": endpoint{ + Hostname: "api.ecr.me-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "me-south-1", + }, + }, + "sa-east-1": endpoint{ + Hostname: "api.ecr.sa-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "sa-east-1", + }, + }, + "us-east-1": endpoint{ + Hostname: "api.ecr.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "api.ecr.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{ + Hostname: "api.ecr.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{ + Hostname: "api.ecr.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, }, }, + }, + "api.mediatailor": service{ + Endpoints: endpoints{ "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "appstream2": service{ + "api.pricing": service{ Defaults: endpoint{ - Protocols: []string{"https"}, CredentialScope: credentialScope{ - Service: "appstream", + Service: "pricing", }, }, Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, + "ap-south-1": endpoint{}, + "us-east-1": endpoint{}, }, }, - "autoscaling": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, + "api.sagemaker": service{ + Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -308,48 +364,71 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "batch": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "budgets": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "budgets.amazonaws.com", + "us-east-1-fips": endpoint{ + Hostname: "api-fips.sagemaker.us-east-1.amazonaws.com", CredentialScope: credentialScope{ Region: "us-east-1", }, }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "api-fips.sagemaker.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "api-fips.sagemaker.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "api-fips.sagemaker.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, }, }, - "clouddirectory": service{ + "apigateway": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, + "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "cloudformation": service{ - + "application-autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -357,8 +436,11 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -366,37 +448,32 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "cloudfront": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "cloudfront.amazonaws.com", - Protocols: []string{"http", "https"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "cloudhsm": service{ + "appmesh": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "cloudsearch": service{ - + "appstream2": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + CredentialScope: credentialScope{ + Service: "appstream", + }, + }, Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, @@ -404,13 +481,17 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, + "fips": endpoint{ + Hostname: "appstream2-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, }, }, - "cloudtrail": service{ + "appsync": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, @@ -418,38 +499,18 @@ var awsPartition = partition{ "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, - "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "codebuild": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "codecommit": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "codedeploy": service{ + "athena": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -457,71 +518,89 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "codepipeline": service{ - + "autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, + "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "cognito-identity": service{ - + "autoscaling-plans": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, + "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "cognito-idp": service{ + "backup": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, + "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "cognito-sync": service{ - - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "config": service{ + "batch": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -529,8 +608,11 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -538,117 +620,79 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "cur": service{ + "budgets": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, Endpoints: endpoints{ - "us-east-1": endpoint{}, + "aws-global": endpoint{ + Hostname: "budgets.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, }, }, - "datapipeline": service{ + "ce": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, + "aws-global": endpoint{ + Hostname: "ce.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, }, }, - "devicefarm": service{ - + "chime": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + Defaults: endpoint{ + SSLCommonName: "service.chime.aws.amazon.com", + Protocols: []string{"https"}, + }, Endpoints: endpoints{ - "us-west-2": endpoint{}, + "aws-global": endpoint{ + Hostname: "service.chime.aws.amazon.com", + Protocols: []string{"https"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, }, }, - "directconnect": service{ + "cloud9": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, - "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "discovery": service{ - - Endpoints: endpoints{ - "us-west-2": endpoint{}, - }, - }, - "dms": service{ + "clouddirectory": service{ Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, - "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "ds": service{ + "cloudformation": service{ Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "local": endpoint{ - Hostname: "localhost:8000", - Protocols: []string{"http"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "ec2": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -656,8 +700,11 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -665,18 +712,21 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "ec2metadata": service{ + "cloudfront": service{ PartitionEndpoint: "aws-global", IsRegionalized: boxedFalse, Endpoints: endpoints{ "aws-global": endpoint{ - Hostname: "169.254.169.254/latest", - Protocols: []string{"http"}, + Hostname: "cloudfront.amazonaws.com", + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, }, }, }, - "ecr": service{ + "cloudhsm": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, @@ -685,51 +735,58 @@ var awsPartition = partition{ "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "ecs": service{ - + "cloudhsmv2": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "cloudhsm", + }, + }, Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "elasticache": service{ + "cloudsearch": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, - "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "elasticbeanstalk": service{ + "cloudtrail": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -737,8 +794,11 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -746,20 +806,10 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "elasticfilesystem": service{ + "codebuild": service{ Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "elasticloadbalancing": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, - Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -767,20 +817,44 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "codebuild-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "codebuild-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "codebuild-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "codebuild-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, }, }, - "elasticmapreduce": service{ - Defaults: endpoint{ - SSLCommonName: "{region}.{service}.{dnsSuffix}", - Protocols: []string{"http", "https"}, - }, + "codecommit": service{ + Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, @@ -788,42 +862,73 @@ var awsPartition = partition{ "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, - "eu-central-1": endpoint{ - SSLCommonName: "{service}.{region}.{dnsSuffix}", - }, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{ - SSLCommonName: "{service}.{region}.{dnsSuffix}", + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips": endpoint{ + Hostname: "codecommit-fips.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, }, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, }, }, - "elastictranscoder": service{ + "codedeploy": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "email": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "codedeploy-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "codedeploy-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "codedeploy-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "codedeploy-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, }, }, - "es": service{ + "codepipeline": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, @@ -831,8 +936,12 @@ var awsPartition = partition{ "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -840,54 +949,47 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "events": service{ + "codestar": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "firehose": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "gamelift": service{ + "cognito-identity": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, - "sa-east-1": endpoint{}, + "eu-west-2": endpoint{}, "us-east-1": endpoint{}, + "us-east-2": endpoint{}, "us-west-2": endpoint{}, }, }, - "glacier": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, + "cognito-idp": service{ + Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, @@ -895,104 +997,57 @@ var awsPartition = partition{ "eu-west-2": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, - "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "health": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "iam": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "iam.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, - }, - }, - "importexport": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "importexport.amazonaws.com", - SignatureVersions: []string{"v2", "v4"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - Service: "IngestionService", - }, - }, - }, - }, - "inspector": service{ + "cognito-sync": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, "us-east-1": endpoint{}, + "us-east-2": endpoint{}, "us-west-2": endpoint{}, }, }, - "iot": service{ + "comprehend": service{ Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "execute-api", - }, + Protocols: []string{"https"}, }, Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-2": endpoint{}, }, }, - "kinesis": service{ + "comprehendmedical": service{ Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, - "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "kinesisanalytics": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "kms": service{ + "config": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -1000,8 +1055,11 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -1009,91 +1067,65 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "lambda": service{ + "connect": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, - "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "lightsail": service{ + "cur": service{ Endpoints: endpoints{ "us-east-1": endpoint{}, }, }, - "logs": service{ + "data.mediastore": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, - "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, - "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "machinelearning": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - }, - }, - "marketplacecommerceanalytics": service{ + "dataexchange": service{ - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "metering.marketplace": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "aws-marketplace", - }, - }, Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, - "sa-east-1": endpoint{}, + "eu-west-2": endpoint{}, "us-east-1": endpoint{}, + "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "mobileanalytics": service{ + "datapipeline": service{ Endpoints: endpoints{ - "us-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, }, }, - "monitoring": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, + "datasync": service{ + Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -1101,26 +1133,53 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "datasync-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "datasync-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "datasync-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "datasync-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, }, }, - "opsworks": service{ + "dax": service{ Endpoints: endpoints{ "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -1128,36 +1187,16 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "opsworks-cm": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "pinpoint": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "mobiletargeting", - }, - }, - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "polly": service{ + "devicefarm": service{ Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, "us-west-2": endpoint{}, }, }, - "rds": service{ + "directconnect": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -1165,20 +1204,29 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, - "us-east-1": endpoint{ - SSLCommonName: "{service}.{dnsSuffix}", - }, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, }, }, - "redshift": service{ + "discovery": service{ + + Endpoints: endpoints{ + "eu-central-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "dms": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -1186,8 +1234,11 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -1195,172 +1246,206 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "rekognition": service{ - - Endpoints: endpoints{ - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "route53": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, + "docdb": service{ Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "route53.amazonaws.com", + "ap-northeast-1": endpoint{ + Hostname: "rds.ap-northeast-1.amazonaws.com", CredentialScope: credentialScope{ - Region: "us-east-1", + Region: "ap-northeast-1", }, }, - }, - }, - "route53domains": service{ - - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "runtime.lex": service{ - Defaults: endpoint{ - CredentialScope: credentialScope{ - Service: "lex", + "ap-northeast-2": endpoint{ + Hostname: "rds.ap-northeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, }, - }, - Endpoints: endpoints{ - "us-east-1": endpoint{}, - }, - }, - "s3": service{ - PartitionEndpoint: "us-east-1", - IsRegionalized: boxedTrue, - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - SignatureVersions: []string{"s3v4"}, - - HasDualStack: boxedTrue, - DualStackHostname: "{service}.dualstack.{region}.{dnsSuffix}", - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{ - Hostname: "s3-ap-northeast-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, + "ap-south-1": endpoint{ + Hostname: "rds.ap-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-south-1", + }, }, - "ap-northeast-2": endpoint{}, - "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{ - Hostname: "s3-ap-southeast-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, + Hostname: "rds.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, }, "ap-southeast-2": endpoint{ - Hostname: "s3-ap-southeast-2.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, + Hostname: "rds.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "eu-central-1": endpoint{ + Hostname: "rds.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, }, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, "eu-west-1": endpoint{ - Hostname: "s3-eu-west-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, + Hostname: "rds.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, }, - "eu-west-2": endpoint{}, - "s3-external-1": endpoint{ - Hostname: "s3-external-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, + "eu-west-2": endpoint{ + Hostname: "rds.eu-west-2.amazonaws.com", CredentialScope: credentialScope{ - Region: "us-east-1", + Region: "eu-west-2", }, }, - "sa-east-1": endpoint{ - Hostname: "s3-sa-east-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, + "eu-west-3": endpoint{ + Hostname: "rds.eu-west-3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-3", + }, }, "us-east-1": endpoint{ - Hostname: "s3.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, + Hostname: "rds.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, }, - "us-east-2": endpoint{}, - "us-west-1": endpoint{ - Hostname: "s3-us-west-1.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, + "us-east-2": endpoint{ + Hostname: "rds.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, }, "us-west-2": endpoint{ - Hostname: "s3-us-west-2.amazonaws.com", - SignatureVersions: []string{"s3", "s3v4"}, - }, - }, - }, - "sdb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - SignatureVersions: []string{"v2"}, - }, - Endpoints: endpoints{ - "ap-northeast-1": endpoint{}, - "ap-southeast-1": endpoint{}, - "ap-southeast-2": endpoint{}, - "eu-west-1": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{ - Hostname: "sdb.amazonaws.com", + Hostname: "rds.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, }, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, }, }, - "servicecatalog": service{ + "ds": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, + "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "shield": service{ - IsRegionalized: boxedFalse, + "dynamodb": service{ Defaults: endpoint{ - SSLCommonName: "Shield.us-east-1.amazonaws.com", - Protocols: []string{"https"}, - }, - Endpoints: endpoints{ - "us-east-1": endpoint{}, + Protocols: []string{"http", "https"}, }, - }, - "sms": service{ - Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, - "eu-west-1": endpoint{}, - "us-east-1": endpoint{}, + "ca-central-1": endpoint{}, + "ca-central-1-fips": endpoint{ + Hostname: "dynamodb-fips.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "local": endpoint{ + Hostname: "localhost:8000", + Protocols: []string{"http"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "dynamodb-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "dynamodb-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "dynamodb-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "dynamodb-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, }, }, - "snowball": service{ - + "ec2": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "sns": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, + "ec2metadata": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, }, + }, + "ecs": service{ + Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -1368,8 +1453,11 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -1377,12 +1465,10 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "sqs": service{ - Defaults: endpoint{ - SSLCommonName: "{region}.queue.{dnsSuffix}", - Protocols: []string{"http", "https"}, - }, + "elasticache": service{ + Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -1390,26 +1476,40 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{ - SSLCommonName: "queue.{dnsSuffix}", + "eu-west-3": endpoint{}, + "fips": endpoint{ + Hostname: "elasticache-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, }, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, }, }, - "ssm": service{ + "elasticbeanstalk": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -1417,27 +1517,47 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "states": service{ + "elasticfilesystem": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, + "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "storagegateway": service{ - + "elasticloadbalancing": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -1445,77 +1565,74 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - "streams.dynamodb": service{ + "elasticmapreduce": service{ Defaults: endpoint{ - Protocols: []string{"http", "http", "https", "https"}, - CredentialScope: credentialScope{ - Service: "dynamodb", - }, + SSLCommonName: "{region}.{service}.{dnsSuffix}", + Protocols: []string{"https"}, }, Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, - "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "local": endpoint{ - Hostname: "localhost:8000", - Protocols: []string{"http"}, - CredentialScope: credentialScope{ - Region: "us-east-1", - }, + "eu-central-1": endpoint{ + SSLCommonName: "{service}.{region}.{dnsSuffix}", + }, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{ + SSLCommonName: "{service}.{region}.{dnsSuffix}", }, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "sts": service{ - PartitionEndpoint: "aws-global", - Defaults: endpoint{ - Hostname: "sts.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-east-1", - }, - }, + "elastictranscoder": service{ + Endpoints: endpoints{ "ap-northeast-1": endpoint{}, - "ap-northeast-2": endpoint{ - Hostname: "sts.ap-northeast-2.amazonaws.com", - CredentialScope: credentialScope{ - Region: "ap-northeast-2", - }, - }, "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, - "aws-global": endpoint{}, - "ca-central-1": endpoint{}, - "eu-central-1": endpoint{}, "eu-west-1": endpoint{}, - "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, "us-east-1": endpoint{}, - "us-east-2": endpoint{}, "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "support": service{ + "email": service{ + Endpoints: endpoints{ + "ap-south-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "entitlement.marketplace": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "aws-marketplace", + }, + }, Endpoints: endpoints{ "us-east-1": endpoint{}, }, }, - "swf": service{ + "es": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, @@ -1523,59 +1640,86 @@ var awsPartition = partition{ "ap-southeast-2": endpoint{}, "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, "eu-west-2": endpoint{}, - "sa-east-1": endpoint{}, - "us-east-1": endpoint{}, - "us-east-2": endpoint{}, - "us-west-1": endpoint{}, - "us-west-2": endpoint{}, - }, - }, - "waf": service{ - PartitionEndpoint: "aws-global", - IsRegionalized: boxedFalse, - - Endpoints: endpoints{ - "aws-global": endpoint{ - Hostname: "waf.amazonaws.com", + "eu-west-3": endpoint{}, + "fips": endpoint{ + Hostname: "es-fips.us-west-1.amazonaws.com", CredentialScope: credentialScope{ - Region: "us-east-1", + Region: "us-west-1", }, }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, }, }, - "waf-regional": service{ + "events": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "workspaces": service{ + "firehose": service{ Endpoints: endpoints{ + "ap-east-1": endpoint{}, "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, "us-west-2": endpoint{}, }, }, - "xray": service{ - + "fms": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, Endpoints: endpoints{ "ap-northeast-1": endpoint{}, "ap-northeast-2": endpoint{}, "ap-south-1": endpoint{}, "ap-southeast-1": endpoint{}, "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, "sa-east-1": endpoint{}, "us-east-1": endpoint{}, "us-east-2": endpoint{}, @@ -1583,21 +1727,3767 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, - }, -} - -// AwsCnPartition returns the Resolver for AWS China. -func AwsCnPartition() Partition { - return awscnPartition.Partition() -} + "forecast": service{ -var awscnPartition = partition{ - ID: "aws-cn", + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "forecastquery": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "fsx": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "gamelift": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "glacier": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "glue": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "greengrass": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "groundstation": service{ + + Endpoints: endpoints{ + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "guardduty": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "guardduty-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "guardduty-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "guardduty-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "guardduty-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "health": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "iam": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "iam.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "importexport": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "importexport.amazonaws.com", + SignatureVersions: []string{"v2", "v4"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + Service: "IngestionService", + }, + }, + }, + }, + "inspector": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "iot": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "execute-api", + }, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "iotanalytics": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "iotevents": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "ioteventsdata": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{ + Hostname: "data.iotevents.ap-northeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "data.iotevents.ap-northeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "data.iotevents.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "data.iotevents.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "eu-central-1": endpoint{ + Hostname: "data.iotevents.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "data.iotevents.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "data.iotevents.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "us-east-1": endpoint{ + Hostname: "data.iotevents.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "data.iotevents.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "data.iotevents.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "iotthingsgraph": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "iotthingsgraph", + }, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kafka": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kinesis": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kinesisanalytics": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kinesisvideo": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "lakeformation": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "lambda": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "license-manager": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "lightsail": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "logs": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "machinelearning": service{ + + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + }, + }, + "marketplacecommerceanalytics": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "mediaconnect": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mediaconvert": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "medialive": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mediapackage": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mediastore": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "metering.marketplace": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "aws-marketplace", + }, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mgh": service{ + + Endpoints: endpoints{ + "eu-central-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mobileanalytics": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "models.lex": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "lex", + }, + }, + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "monitoring": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mq": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "mq-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "mq-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "mq-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "mq-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "mturk-requester": service{ + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "sandbox": endpoint{ + Hostname: "mturk-requester-sandbox.us-east-1.amazonaws.com", + }, + "us-east-1": endpoint{}, + }, + }, + "neptune": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{ + Hostname: "rds.ap-northeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "rds.ap-northeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-south-1": endpoint{ + Hostname: "rds.ap-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-south-1", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "rds.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "rds.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "rds.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "rds.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-north-1": endpoint{ + Hostname: "rds.eu-north-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-north-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "rds.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "rds.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "me-south-1": endpoint{ + Hostname: "rds.me-south-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "me-south-1", + }, + }, + "us-east-1": endpoint{ + Hostname: "rds.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "rds.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "rds.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "oidc": service{ + + Endpoints: endpoints{ + "ap-southeast-1": endpoint{ + Hostname: "oidc.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "oidc.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "oidc.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "oidc.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "oidc.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "oidc.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "us-east-1": endpoint{ + Hostname: "oidc.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "oidc.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "oidc.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "opsworks": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "opsworks-cm": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "organizations": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "organizations.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "pinpoint": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "mobiletargeting", + }, + }, + Endpoints: endpoints{ + "ap-south-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "polly": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "portal.sso": service{ + + Endpoints: endpoints{ + "ap-southeast-1": endpoint{ + Hostname: "portal.sso.ap-southeast-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "portal.sso.ap-southeast-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "portal.sso.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "portal.sso.eu-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "portal.sso.eu-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "portal.sso.eu-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "us-east-1": endpoint{ + Hostname: "portal.sso.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "portal.sso.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{ + Hostname: "portal.sso.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "projects.iot1click": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "qldb": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "ram": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "rds": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{ + SSLCommonName: "{service}.{dnsSuffix}", + }, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "redshift": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "rekognition": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "resource-groups": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "resource-groups-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "resource-groups-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "resource-groups-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "resource-groups-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "robomaker": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "route53": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "route53.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "route53domains": service{ + + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "route53resolver": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "runtime.lex": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "lex", + }, + }, + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "runtime.sagemaker": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "runtime-fips.sagemaker.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "runtime-fips.sagemaker.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "runtime-fips.sagemaker.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "runtime-fips.sagemaker.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "s3": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"s3v4"}, + + HasDualStack: boxedTrue, + DualStackHostname: "{service}.dualstack.{region}.{dnsSuffix}", + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{ + Hostname: "s3.ap-northeast-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{ + Hostname: "s3.ap-southeast-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "ap-southeast-2": endpoint{ + Hostname: "s3.ap-southeast-2.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "aws-global": endpoint{ + Hostname: "s3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{ + Hostname: "s3.eu-west-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "s3-external-1": endpoint{ + Hostname: "s3-external-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "sa-east-1": endpoint{ + Hostname: "s3.sa-east-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{ + Hostname: "s3.us-west-1.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + "us-west-2": endpoint{ + Hostname: "s3.us-west-2.amazonaws.com", + SignatureVersions: []string{"s3", "s3v4"}, + }, + }, + }, + "s3-control": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + SignatureVersions: []string{"s3v4"}, + + HasDualStack: boxedTrue, + DualStackHostname: "{service}.dualstack.{region}.{dnsSuffix}", + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{ + Hostname: "s3-control.ap-northeast-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-northeast-1", + }, + }, + "ap-northeast-2": endpoint{ + Hostname: "s3-control.ap-northeast-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-northeast-2", + }, + }, + "ap-south-1": endpoint{ + Hostname: "s3-control.ap-south-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-south-1", + }, + }, + "ap-southeast-1": endpoint{ + Hostname: "s3-control.ap-southeast-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-southeast-1", + }, + }, + "ap-southeast-2": endpoint{ + Hostname: "s3-control.ap-southeast-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ap-southeast-2", + }, + }, + "ca-central-1": endpoint{ + Hostname: "s3-control.ca-central-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{ + Hostname: "s3-control.eu-central-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-central-1", + }, + }, + "eu-north-1": endpoint{ + Hostname: "s3-control.eu-north-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-north-1", + }, + }, + "eu-west-1": endpoint{ + Hostname: "s3-control.eu-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-west-1", + }, + }, + "eu-west-2": endpoint{ + Hostname: "s3-control.eu-west-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-west-2", + }, + }, + "eu-west-3": endpoint{ + Hostname: "s3-control.eu-west-3.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "eu-west-3", + }, + }, + "sa-east-1": endpoint{ + Hostname: "s3-control.sa-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "sa-east-1", + }, + }, + "us-east-1": endpoint{ + Hostname: "s3-control.us-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-1-fips": endpoint{ + Hostname: "s3-control-fips.us-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{ + Hostname: "s3-control.us-east-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-east-2-fips": endpoint{ + Hostname: "s3-control-fips.us-east-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{ + Hostname: "s3-control.us-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-1-fips": endpoint{ + Hostname: "s3-control-fips.us-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{ + Hostname: "s3-control.us-west-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "us-west-2-fips": endpoint{ + Hostname: "s3-control-fips.us-west-2.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "savingsplans": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "savingsplans.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "sdb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"v2"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{ + Hostname: "sdb.amazonaws.com", + }, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "secretsmanager": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "secretsmanager-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "secretsmanager-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "secretsmanager-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "secretsmanager-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "securityhub": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "serverlessrepo": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{ + Protocols: []string{"https"}, + }, + "ap-northeast-1": endpoint{ + Protocols: []string{"https"}, + }, + "ap-northeast-2": endpoint{ + Protocols: []string{"https"}, + }, + "ap-south-1": endpoint{ + Protocols: []string{"https"}, + }, + "ap-southeast-1": endpoint{ + Protocols: []string{"https"}, + }, + "ap-southeast-2": endpoint{ + Protocols: []string{"https"}, + }, + "ca-central-1": endpoint{ + Protocols: []string{"https"}, + }, + "eu-central-1": endpoint{ + Protocols: []string{"https"}, + }, + "eu-north-1": endpoint{ + Protocols: []string{"https"}, + }, + "eu-west-1": endpoint{ + Protocols: []string{"https"}, + }, + "eu-west-2": endpoint{ + Protocols: []string{"https"}, + }, + "eu-west-3": endpoint{ + Protocols: []string{"https"}, + }, + "me-south-1": endpoint{ + Protocols: []string{"https"}, + }, + "sa-east-1": endpoint{ + Protocols: []string{"https"}, + }, + "us-east-1": endpoint{ + Protocols: []string{"https"}, + }, + "us-east-2": endpoint{ + Protocols: []string{"https"}, + }, + "us-west-1": endpoint{ + Protocols: []string{"https"}, + }, + "us-west-2": endpoint{ + Protocols: []string{"https"}, + }, + }, + }, + "servicecatalog": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "servicecatalog-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "servicecatalog-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "servicecatalog-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "servicecatalog-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "servicediscovery": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "session.qldb": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "shield": service{ + IsRegionalized: boxedFalse, + Defaults: endpoint{ + SSLCommonName: "shield.us-east-1.amazonaws.com", + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-east-1": endpoint{}, + }, + }, + "sms": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "snowball": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "sns": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "sqs": service{ + Defaults: endpoint{ + SSLCommonName: "{region}.queue.{dnsSuffix}", + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-us-east-1": endpoint{ + Hostname: "sqs-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "sqs-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "sqs-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "sqs-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{ + SSLCommonName: "queue.{dnsSuffix}", + }, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "ssm": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "states": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "storagegateway": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "streams.dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Service: "dynamodb", + }, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "ca-central-1-fips": endpoint{ + Hostname: "dynamodb-fips.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "local": endpoint{ + Hostname: "localhost:8000", + Protocols: []string{"http"}, + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "dynamodb-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "dynamodb-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "dynamodb-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "dynamodb-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "sts": service{ + PartitionEndpoint: "aws-global", + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "aws-global": endpoint{ + Hostname: "sts.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "sts-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "sts-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-1": endpoint{}, + "us-west-1-fips": endpoint{ + Hostname: "sts-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "sts-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "support": service{ + PartitionEndpoint: "aws-global", + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "support.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "swf": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "tagging": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "transcribe": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "transcribestreaming": service{ + + Endpoints: endpoints{ + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "transfer": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "translate": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-1-fips": endpoint{ + Hostname: "translate-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "us-east-2": endpoint{}, + "us-east-2-fips": endpoint{ + Hostname: "translate-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "us-west-2": endpoint{}, + "us-west-2-fips": endpoint{ + Hostname: "translate-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + }, + }, + "waf": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "waf.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + }, + }, + "waf-regional": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "workdocs": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "workmail": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "eu-west-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "workspaces": service{ + + Endpoints: endpoints{ + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + "xray": service{ + + Endpoints: endpoints{ + "ap-east-1": endpoint{}, + "ap-northeast-1": endpoint{}, + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-north-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "me-south-1": endpoint{}, + "sa-east-1": endpoint{}, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, + }, +} + +// AwsCnPartition returns the Resolver for AWS China. +func AwsCnPartition() Partition { + return awscnPartition.Partition() +} + +var awscnPartition = partition{ + ID: "aws-cn", Name: "AWS China", DNSSuffix: "amazonaws.com.cn", RegionRegex: regionRegex{ Regexp: func() *regexp.Regexp { - reg, _ := regexp.Compile("^cn\\-\\w+\\-\\d+$") + reg, _ := regexp.Compile("^cn\\-\\w+\\-\\d+$") + return reg + }(), + }, + Defaults: endpoint{ + Hostname: "{service}.{region}.{dnsSuffix}", + Protocols: []string{"https"}, + SignatureVersions: []string{"v4"}, + }, + Regions: regions{ + "cn-north-1": region{ + Description: "China (Beijing)", + }, + "cn-northwest-1": region{ + Description: "China (Ningxia)", + }, + }, + Services: services{ + "api.ecr": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{ + Hostname: "api.ecr.cn-north-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + "cn-northwest-1": endpoint{ + Hostname: "api.ecr.cn-northwest-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "apigateway": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "application-autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "batch": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "cloudformation": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "cloudfront": service{ + PartitionEndpoint: "aws-cn-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-cn-global": endpoint{ + Hostname: "cloudfront.cn-northwest-1.amazonaws.com.cn", + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "cloudtrail": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "codebuild": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "codedeploy": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "cognito-identity": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "config": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "dax": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{}, + }, + }, + "directconnect": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "dms": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "ds": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "ec2": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "ec2metadata": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, + }, + }, + "ecs": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "elasticache": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "elasticbeanstalk": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "elasticloadbalancing": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "elasticmapreduce": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "es": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "events": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "firehose": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "gamelift": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "glacier": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "glue": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{}, + }, + }, + "greengrass": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "iam": service{ + PartitionEndpoint: "aws-cn-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-cn-global": endpoint{ + Hostname: "iam.cn-north-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + }, + }, + "iot": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "execute-api", + }, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "kinesis": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "lambda": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "license-manager": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "logs": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "mediaconvert": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{ + Hostname: "subscribe.mediaconvert.cn-northwest-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "monitoring": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "polly": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{}, + }, + }, + "rds": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "redshift": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "s3": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"s3v4"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "s3-control": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + SignatureVersions: []string{"s3v4"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{ + Hostname: "s3-control.cn-north-1.amazonaws.com.cn", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + "cn-northwest-1": endpoint{ + Hostname: "s3-control.cn-northwest-1.amazonaws.com.cn", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "sms": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "snowball": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "sns": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "sqs": service{ + Defaults: endpoint{ + SSLCommonName: "{region}.queue.{dnsSuffix}", + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "ssm": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "states": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "storagegateway": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + }, + }, + "streams.dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Service: "dynamodb", + }, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "sts": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "support": service{ + PartitionEndpoint: "aws-cn-global", + + Endpoints: endpoints{ + "aws-cn-global": endpoint{ + Hostname: "support.cn-north-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + }, + }, + "swf": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "tagging": service{ + + Endpoints: endpoints{ + "cn-north-1": endpoint{}, + "cn-northwest-1": endpoint{}, + }, + }, + "transcribe": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "cn-north-1": endpoint{ + Hostname: "cn.transcribe.cn-north-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-north-1", + }, + }, + "cn-northwest-1": endpoint{ + Hostname: "cn.transcribe.cn-northwest-1.amazonaws.com.cn", + CredentialScope: credentialScope{ + Region: "cn-northwest-1", + }, + }, + }, + }, + "workspaces": service{ + + Endpoints: endpoints{ + "cn-northwest-1": endpoint{}, + }, + }, + }, +} + +// AwsUsGovPartition returns the Resolver for AWS GovCloud (US). +func AwsUsGovPartition() Partition { + return awsusgovPartition.Partition() +} + +var awsusgovPartition = partition{ + ID: "aws-us-gov", + Name: "AWS GovCloud (US)", + DNSSuffix: "amazonaws.com", + RegionRegex: regionRegex{ + Regexp: func() *regexp.Regexp { + reg, _ := regexp.Compile("^us\\-gov\\-\\w+\\-\\d+$") + return reg + }(), + }, + Defaults: endpoint{ + Hostname: "{service}.{region}.{dnsSuffix}", + Protocols: []string{"https"}, + SignatureVersions: []string{"v4"}, + }, + Regions: regions{ + "us-gov-east-1": region{ + Description: "AWS GovCloud (US-East)", + }, + "us-gov-west-1": region{ + Description: "AWS GovCloud (US)", + }, + }, + Services: services{ + "acm": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "acm-pca": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "api.ecr": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{ + Hostname: "api.ecr.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{ + Hostname: "api.ecr.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "api.sagemaker": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "apigateway": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "application-autoscaling": service{ + Defaults: endpoint{ + Hostname: "autoscaling.{region}.amazonaws.com", + Protocols: []string{"http", "https"}, + CredentialScope: credentialScope{ + Service: "application-autoscaling", + }, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "appstream2": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + CredentialScope: credentialScope{ + Service: "appstream", + }, + }, + Endpoints: endpoints{ + "fips": endpoint{ + Hostname: "appstream2-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-west-1": endpoint{}, + }, + }, + "athena": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "autoscaling": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "clouddirectory": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "cloudformation": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "cloudhsm": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "cloudhsmv2": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "cloudhsm", + }, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "cloudtrail": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "codebuild": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "codecommit": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "codedeploy": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-east-1-fips": endpoint{ + Hostname: "codedeploy-fips.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "codedeploy-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "comprehend": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "config": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "datasync": service{ + + Endpoints: endpoints{ + "fips-us-gov-west-1": endpoint{ + Hostname: "datasync-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "directconnect": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "dms": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "ds": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "dynamodb": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-east-1-fips": endpoint{ + Hostname: "dynamodb.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "dynamodb.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "ec2": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "ec2metadata": service{ + PartitionEndpoint: "aws-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-global": endpoint{ + Hostname: "169.254.169.254/latest", + Protocols: []string{"http"}, + }, + }, + }, + "ecs": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "elasticache": service{ + + Endpoints: endpoints{ + "fips": endpoint{ + Hostname: "elasticache-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "elasticbeanstalk": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "elasticfilesystem": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "elasticloadbalancing": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "elasticmapreduce": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"https"}, + }, + }, + }, + "es": service{ + + Endpoints: endpoints{ + "fips": endpoint{ + Hostname: "es-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "events": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "firehose": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "glacier": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "glue": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "greengrass": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "guardduty": service{ + IsRegionalized: boxedTrue, + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "health": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "iam": service{ + PartitionEndpoint: "aws-us-gov-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-us-gov-global": endpoint{ + Hostname: "iam.us-gov.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "inspector": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "iot": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "execute-api", + }, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "kinesis": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "ProdFips": endpoint{ + Hostname: "kms-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "lambda": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "license-manager": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "logs": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "mediaconvert": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "metering.marketplace": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "aws-marketplace", + }, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "monitoring": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "neptune": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{ + Hostname: "rds.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{ + Hostname: "rds.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "organizations": service{ + PartitionEndpoint: "aws-us-gov-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-us-gov-global": endpoint{ + Hostname: "organizations.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "polly": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "ram": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "rds": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "redshift": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "rekognition": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "resource-groups": service{ + + Endpoints: endpoints{ + "fips-us-gov-east-1": endpoint{ + Hostname: "resource-groups.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "fips-us-gov-west-1": endpoint{ + Hostname: "resource-groups.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "route53": service{ + PartitionEndpoint: "aws-us-gov-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-us-gov-global": endpoint{ + Hostname: "route53.us-gov.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "route53resolver": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "runtime.sagemaker": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "s3": service{ + Defaults: endpoint{ + SignatureVersions: []string{"s3", "s3v4"}, + }, + Endpoints: endpoints{ + "fips-us-gov-west-1": endpoint{ + Hostname: "s3-fips-us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{ + Hostname: "s3.us-gov-east-1.amazonaws.com", + Protocols: []string{"http", "https"}, + }, + "us-gov-west-1": endpoint{ + Hostname: "s3.us-gov-west-1.amazonaws.com", + Protocols: []string{"http", "https"}, + }, + }, + }, + "s3-control": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + SignatureVersions: []string{"s3v4"}, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{ + Hostname: "s3-control.us-gov-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-east-1-fips": endpoint{ + Hostname: "s3-control-fips.us-gov-east-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{ + Hostname: "s3-control.us-gov-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-west-1-fips": endpoint{ + Hostname: "s3-control-fips.us-gov-west-1.amazonaws.com", + SignatureVersions: []string{"s3v4"}, + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "secretsmanager": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-east-1-fips": endpoint{ + Hostname: "secretsmanager-fips.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "secretsmanager-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "serverlessrepo": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{ + Protocols: []string{"https"}, + }, + "us-gov-west-1": endpoint{ + Protocols: []string{"https"}, + }, + }, + }, + "servicecatalog": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "servicecatalog-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "sms": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "snowball": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "sns": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + Protocols: []string{"http", "https"}, + }, + }, + }, + "sqs": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{ + SSLCommonName: "{region}.queue.{dnsSuffix}", + Protocols: []string{"http", "https"}, + }, + }, + }, + "ssm": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "states": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "storagegateway": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "streams.dynamodb": service{ + Defaults: endpoint{ + CredentialScope: credentialScope{ + Service: "dynamodb", + }, + }, + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-east-1-fips": endpoint{ + Hostname: "dynamodb.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "dynamodb.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "sts": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "swf": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "tagging": service{ + + Endpoints: endpoints{ + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, + "transcribe": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "translate": service{ + Defaults: endpoint{ + Protocols: []string{"https"}, + }, + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + "us-gov-west-1-fips": endpoint{ + Hostname: "translate-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + }, + }, + "waf-regional": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + "workspaces": service{ + + Endpoints: endpoints{ + "us-gov-west-1": endpoint{}, + }, + }, + }, +} + +// AwsIsoPartition returns the Resolver for AWS ISO (US). +func AwsIsoPartition() Partition { + return awsisoPartition.Partition() +} + +var awsisoPartition = partition{ + ID: "aws-iso", + Name: "AWS ISO (US)", + DNSSuffix: "c2s.ic.gov", + RegionRegex: regionRegex{ + Regexp: func() *regexp.Regexp { + reg, _ := regexp.Compile("^us\\-iso\\-\\w+\\-\\d+$") return reg }(), }, @@ -1607,57 +5497,111 @@ var awscnPartition = partition{ SignatureVersions: []string{"v4"}, }, Regions: regions{ - "cn-north-1": region{ - Description: "China (Beijing)", + "us-iso-east-1": region{ + Description: "US ISO East", }, }, Services: services{ - "autoscaling": service{ + "api.ecr": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Hostname: "api.ecr.us-iso-east-1.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, + }, + }, + "api.sagemaker": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "apigateway": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "application-autoscaling": service{ Defaults: endpoint{ + Hostname: "autoscaling.us-iso-east-1.c2s.ic.gov", Protocols: []string{"http", "https"}, }, Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, + }, + }, + "autoscaling": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, }, }, "cloudformation": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "cloudtrail": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, + }, + }, + "codedeploy": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, }, }, "config": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, + }, + }, + "datapipeline": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "directconnect": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, + }, + }, + "dms": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, }, }, - "directconnect": service{ + "ds": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "dynamodb": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, + Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, }, }, "ec2": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, + Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "ec2metadata": service{ @@ -1671,57 +5615,63 @@ var awscnPartition = partition{ }, }, }, - "elasticache": service{ + "ecs": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, - "elasticbeanstalk": service{ + "elasticache": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "elasticloadbalancing": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, + Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, }, }, "elasticmapreduce": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, + Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{ + Protocols: []string{"https"}, + }, }, }, "events": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "glacier": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, }, + }, + "health": service{ + Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "iam": service{ - PartitionEndpoint: "aws-cn-global", + PartitionEndpoint: "aws-iso-global", IsRegionalized: boxedFalse, Endpoints: endpoints{ - "aws-cn-global": endpoint{ - Hostname: "iam.cn-north-1.amazonaws.com.cn", + "aws-iso-global": endpoint{ + Hostname: "iam.us-iso-east-1.c2s.ic.gov", CredentialScope: credentialScope{ - Region: "cn-north-1", + Region: "us-iso-east-1", }, }, }, @@ -1729,105 +5679,167 @@ var awscnPartition = partition{ "kinesis": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, + }, + }, + "kms": service{ + + Endpoints: endpoints{ + "ProdFips": endpoint{ + Hostname: "kms-fips.us-iso-east-1.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, + "us-iso-east-1": endpoint{}, + }, + }, + "lambda": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, }, }, "logs": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "monitoring": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, - }, + Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "rds": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "redshift": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, + }, + }, + "route53": service{ + PartitionEndpoint: "aws-iso-global", + IsRegionalized: boxedFalse, + + Endpoints: endpoints{ + "aws-iso-global": endpoint{ + Hostname: "route53.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, + }, + }, + "runtime.sagemaker": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, }, }, "s3": service{ Defaults: endpoint{ - Protocols: []string{"http", "https"}, SignatureVersions: []string{"s3v4"}, }, Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"s3v4"}, + }, }, }, - "sns": service{ - Defaults: endpoint{ - Protocols: []string{"http", "https"}, + "snowball": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, }, + }, + "sns": service{ + Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, }, }, "sqs": service{ - Defaults: endpoint{ - SSLCommonName: "{region}.queue.{dnsSuffix}", - Protocols: []string{"http", "https"}, - }, + Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, }, }, - "storagegateway": service{ + "states": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, }, }, "streams.dynamodb": service{ Defaults: endpoint{ - Protocols: []string{"http", "http", "https", "https"}, + Protocols: []string{"http", "https"}, CredentialScope: credentialScope{ Service: "dynamodb", }, }, Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{ + Protocols: []string{"http", "https"}, + }, }, }, "sts": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, + }, + }, + "support": service{ + PartitionEndpoint: "aws-iso-global", + + Endpoints: endpoints{ + "aws-iso-global": endpoint{ + Hostname: "support.us-iso-east-1.c2s.ic.gov", + CredentialScope: credentialScope{ + Region: "us-iso-east-1", + }, + }, }, }, "swf": service{ Endpoints: endpoints{ - "cn-north-1": endpoint{}, + "us-iso-east-1": endpoint{}, + }, + }, + "workspaces": service{ + + Endpoints: endpoints{ + "us-iso-east-1": endpoint{}, }, }, }, } -// AwsUsGovPartition returns the Resolver for AWS GovCloud (US). -func AwsUsGovPartition() Partition { - return awsusgovPartition.Partition() +// AwsIsoBPartition returns the Resolver for AWS ISOB (US). +func AwsIsoBPartition() Partition { + return awsisobPartition.Partition() } -var awsusgovPartition = partition{ - ID: "aws-us-gov", - Name: "AWS GovCloud (US)", - DNSSuffix: "amazonaws.com", +var awsisobPartition = partition{ + ID: "aws-iso-b", + Name: "AWS ISOB (US)", + DNSSuffix: "sc2s.sgov.gov", RegionRegex: regionRegex{ Regexp: func() *regexp.Regexp { - reg, _ := regexp.Compile("^us\\-gov\\-\\w+\\-\\d+$") + reg, _ := regexp.Compile("^us\\-isob\\-\\w+\\-\\d+$") return reg }(), }, @@ -1837,59 +5849,72 @@ var awsusgovPartition = partition{ SignatureVersions: []string{"v4"}, }, Regions: regions{ - "us-gov-west-1": region{ - Description: "AWS GovCloud (US)", + "us-isob-east-1": region{ + Description: "US ISOB East (Ohio)", }, }, Services: services{ - "autoscaling": service{ - + "application-autoscaling": service{ + Defaults: endpoint{ + Hostname: "autoscaling.us-isob-east-1.sc2s.sgov.gov", + Protocols: []string{"http", "https"}, + }, Endpoints: endpoints{ - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, - }, + "us-isob-east-1": endpoint{}, }, }, - "cloudformation": service{ - + "autoscaling": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, - "cloudhsm": service{ + "cloudformation": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "cloudtrail": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "config": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "directconnect": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, - "dynamodb": service{ + "dms": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, + }, + }, + "dynamodb": service{ + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, }, }, "ec2": service{ - + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "ec2metadata": service{ @@ -1906,136 +5931,167 @@ var awsusgovPartition = partition{ "elasticache": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "elasticloadbalancing": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, + "us-isob-east-1": endpoint{ + Protocols: []string{"https"}, }, }, }, "elasticmapreduce": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, - }, + "us-isob-east-1": endpoint{}, + }, + }, + "events": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, }, }, "glacier": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, - }, + "us-isob-east-1": endpoint{}, + }, + }, + "health": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, }, }, "iam": service{ - PartitionEndpoint: "aws-us-gov-global", + PartitionEndpoint: "aws-iso-b-global", IsRegionalized: boxedFalse, Endpoints: endpoints{ - "aws-us-gov-global": endpoint{ - Hostname: "iam.us-gov.amazonaws.com", + "aws-iso-b-global": endpoint{ + Hostname: "iam.us-isob-east-1.sc2s.sgov.gov", CredentialScope: credentialScope{ - Region: "us-gov-west-1", + Region: "us-isob-east-1", }, }, }, }, + "kinesis": service{ + + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, "kms": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "ProdFips": endpoint{ + Hostname: "kms-fips.us-isob-east-1.sc2s.sgov.gov", + CredentialScope: credentialScope{ + Region: "us-isob-east-1", + }, + }, + "us-isob-east-1": endpoint{}, }, }, "logs": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "monitoring": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "rds": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "redshift": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "s3": service{ Defaults: endpoint{ - SignatureVersions: []string{"s3", "s3v4"}, + Protocols: []string{"http", "https"}, + SignatureVersions: []string{"s3v4"}, }, Endpoints: endpoints{ - "fips-us-gov-west-1": endpoint{ - Hostname: "s3-fips-us-gov-west-1.amazonaws.com", - CredentialScope: credentialScope{ - Region: "us-gov-west-1", - }, - }, - "us-gov-west-1": endpoint{ - Hostname: "s3-us-gov-west-1.amazonaws.com", - Protocols: []string{"http", "https"}, - }, + "us-isob-east-1": endpoint{}, }, }, "snowball": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "sns": service{ - + Defaults: endpoint{ + Protocols: []string{"http", "https"}, + }, Endpoints: endpoints{ - "us-gov-west-1": endpoint{ - Protocols: []string{"http", "https"}, - }, + "us-isob-east-1": endpoint{}, }, }, "sqs": service{ + Defaults: endpoint{ + SSLCommonName: "{region}.queue.{dnsSuffix}", + Protocols: []string{"http", "https"}, + }, + Endpoints: endpoints{ + "us-isob-east-1": endpoint{}, + }, + }, + "states": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{ - SSLCommonName: "{region}.queue.{dnsSuffix}", - Protocols: []string{"http", "https"}, - }, + "us-isob-east-1": endpoint{}, }, }, "streams.dynamodb": service{ Defaults: endpoint{ + Protocols: []string{"http", "https"}, CredentialScope: credentialScope{ Service: "dynamodb", }, }, Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, "sts": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, + }, + }, + "support": service{ + PartitionEndpoint: "aws-iso-b-global", + + Endpoints: endpoints{ + "aws-iso-b-global": endpoint{ + Hostname: "support.us-isob-east-1.sc2s.sgov.gov", + CredentialScope: credentialScope{ + Region: "us-isob-east-1", + }, + }, }, }, "swf": service{ Endpoints: endpoints{ - "us-gov-west-1": endpoint{}, + "us-isob-east-1": endpoint{}, }, }, }, diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go new file mode 100644 index 00000000000..ca8fc828e15 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go @@ -0,0 +1,141 @@ +package endpoints + +// Service identifiers +// +// Deprecated: Use client package's EndpointsID value instead of these +// ServiceIDs. These IDs are not maintained, and are out of date. +const ( + A4bServiceID = "a4b" // A4b. + AcmServiceID = "acm" // Acm. + AcmPcaServiceID = "acm-pca" // AcmPca. + ApiMediatailorServiceID = "api.mediatailor" // ApiMediatailor. + ApiPricingServiceID = "api.pricing" // ApiPricing. + ApiSagemakerServiceID = "api.sagemaker" // ApiSagemaker. + ApigatewayServiceID = "apigateway" // Apigateway. + ApplicationAutoscalingServiceID = "application-autoscaling" // ApplicationAutoscaling. + Appstream2ServiceID = "appstream2" // Appstream2. + AppsyncServiceID = "appsync" // Appsync. + AthenaServiceID = "athena" // Athena. + AutoscalingServiceID = "autoscaling" // Autoscaling. + AutoscalingPlansServiceID = "autoscaling-plans" // AutoscalingPlans. + BatchServiceID = "batch" // Batch. + BudgetsServiceID = "budgets" // Budgets. + CeServiceID = "ce" // Ce. + ChimeServiceID = "chime" // Chime. + Cloud9ServiceID = "cloud9" // Cloud9. + ClouddirectoryServiceID = "clouddirectory" // Clouddirectory. + CloudformationServiceID = "cloudformation" // Cloudformation. + CloudfrontServiceID = "cloudfront" // Cloudfront. + CloudhsmServiceID = "cloudhsm" // Cloudhsm. + Cloudhsmv2ServiceID = "cloudhsmv2" // Cloudhsmv2. + CloudsearchServiceID = "cloudsearch" // Cloudsearch. + CloudtrailServiceID = "cloudtrail" // Cloudtrail. + CodebuildServiceID = "codebuild" // Codebuild. + CodecommitServiceID = "codecommit" // Codecommit. + CodedeployServiceID = "codedeploy" // Codedeploy. + CodepipelineServiceID = "codepipeline" // Codepipeline. + CodestarServiceID = "codestar" // Codestar. + CognitoIdentityServiceID = "cognito-identity" // CognitoIdentity. + CognitoIdpServiceID = "cognito-idp" // CognitoIdp. + CognitoSyncServiceID = "cognito-sync" // CognitoSync. + ComprehendServiceID = "comprehend" // Comprehend. + ConfigServiceID = "config" // Config. + CurServiceID = "cur" // Cur. + DatapipelineServiceID = "datapipeline" // Datapipeline. + DaxServiceID = "dax" // Dax. + DevicefarmServiceID = "devicefarm" // Devicefarm. + DirectconnectServiceID = "directconnect" // Directconnect. + DiscoveryServiceID = "discovery" // Discovery. + DmsServiceID = "dms" // Dms. + DsServiceID = "ds" // Ds. + DynamodbServiceID = "dynamodb" // Dynamodb. + Ec2ServiceID = "ec2" // Ec2. + Ec2metadataServiceID = "ec2metadata" // Ec2metadata. + EcrServiceID = "ecr" // Ecr. + EcsServiceID = "ecs" // Ecs. + ElasticacheServiceID = "elasticache" // Elasticache. + ElasticbeanstalkServiceID = "elasticbeanstalk" // Elasticbeanstalk. + ElasticfilesystemServiceID = "elasticfilesystem" // Elasticfilesystem. + ElasticloadbalancingServiceID = "elasticloadbalancing" // Elasticloadbalancing. + ElasticmapreduceServiceID = "elasticmapreduce" // Elasticmapreduce. + ElastictranscoderServiceID = "elastictranscoder" // Elastictranscoder. + EmailServiceID = "email" // Email. + EntitlementMarketplaceServiceID = "entitlement.marketplace" // EntitlementMarketplace. + EsServiceID = "es" // Es. + EventsServiceID = "events" // Events. + FirehoseServiceID = "firehose" // Firehose. + FmsServiceID = "fms" // Fms. + GameliftServiceID = "gamelift" // Gamelift. + GlacierServiceID = "glacier" // Glacier. + GlueServiceID = "glue" // Glue. + GreengrassServiceID = "greengrass" // Greengrass. + GuarddutyServiceID = "guardduty" // Guardduty. + HealthServiceID = "health" // Health. + IamServiceID = "iam" // Iam. + ImportexportServiceID = "importexport" // Importexport. + InspectorServiceID = "inspector" // Inspector. + IotServiceID = "iot" // Iot. + IotanalyticsServiceID = "iotanalytics" // Iotanalytics. + KinesisServiceID = "kinesis" // Kinesis. + KinesisanalyticsServiceID = "kinesisanalytics" // Kinesisanalytics. + KinesisvideoServiceID = "kinesisvideo" // Kinesisvideo. + KmsServiceID = "kms" // Kms. + LambdaServiceID = "lambda" // Lambda. + LightsailServiceID = "lightsail" // Lightsail. + LogsServiceID = "logs" // Logs. + MachinelearningServiceID = "machinelearning" // Machinelearning. + MarketplacecommerceanalyticsServiceID = "marketplacecommerceanalytics" // Marketplacecommerceanalytics. + MediaconvertServiceID = "mediaconvert" // Mediaconvert. + MedialiveServiceID = "medialive" // Medialive. + MediapackageServiceID = "mediapackage" // Mediapackage. + MediastoreServiceID = "mediastore" // Mediastore. + MeteringMarketplaceServiceID = "metering.marketplace" // MeteringMarketplace. + MghServiceID = "mgh" // Mgh. + MobileanalyticsServiceID = "mobileanalytics" // Mobileanalytics. + ModelsLexServiceID = "models.lex" // ModelsLex. + MonitoringServiceID = "monitoring" // Monitoring. + MturkRequesterServiceID = "mturk-requester" // MturkRequester. + NeptuneServiceID = "neptune" // Neptune. + OpsworksServiceID = "opsworks" // Opsworks. + OpsworksCmServiceID = "opsworks-cm" // OpsworksCm. + OrganizationsServiceID = "organizations" // Organizations. + PinpointServiceID = "pinpoint" // Pinpoint. + PollyServiceID = "polly" // Polly. + RdsServiceID = "rds" // Rds. + RedshiftServiceID = "redshift" // Redshift. + RekognitionServiceID = "rekognition" // Rekognition. + ResourceGroupsServiceID = "resource-groups" // ResourceGroups. + Route53ServiceID = "route53" // Route53. + Route53domainsServiceID = "route53domains" // Route53domains. + RuntimeLexServiceID = "runtime.lex" // RuntimeLex. + RuntimeSagemakerServiceID = "runtime.sagemaker" // RuntimeSagemaker. + S3ServiceID = "s3" // S3. + S3ControlServiceID = "s3-control" // S3Control. + SagemakerServiceID = "api.sagemaker" // Sagemaker. + SdbServiceID = "sdb" // Sdb. + SecretsmanagerServiceID = "secretsmanager" // Secretsmanager. + ServerlessrepoServiceID = "serverlessrepo" // Serverlessrepo. + ServicecatalogServiceID = "servicecatalog" // Servicecatalog. + ServicediscoveryServiceID = "servicediscovery" // Servicediscovery. + ShieldServiceID = "shield" // Shield. + SmsServiceID = "sms" // Sms. + SnowballServiceID = "snowball" // Snowball. + SnsServiceID = "sns" // Sns. + SqsServiceID = "sqs" // Sqs. + SsmServiceID = "ssm" // Ssm. + StatesServiceID = "states" // States. + StoragegatewayServiceID = "storagegateway" // Storagegateway. + StreamsDynamodbServiceID = "streams.dynamodb" // StreamsDynamodb. + StsServiceID = "sts" // Sts. + SupportServiceID = "support" // Support. + SwfServiceID = "swf" // Swf. + TaggingServiceID = "tagging" // Tagging. + TransferServiceID = "transfer" // Transfer. + TranslateServiceID = "translate" // Translate. + WafServiceID = "waf" // Waf. + WafRegionalServiceID = "waf-regional" // WafRegional. + WorkdocsServiceID = "workdocs" // Workdocs. + WorkmailServiceID = "workmail" // Workmail. + WorkspacesServiceID = "workspaces" // Workspaces. + XrayServiceID = "xray" // Xray. +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go index a0e9bc45471..84316b92c05 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go @@ -21,12 +21,12 @@ // partitions := resolver.(endpoints.EnumPartitions).Partitions() // // for _, p := range partitions { -// fmt.Println("Regions for", p.Name) +// fmt.Println("Regions for", p.ID()) // for id, _ := range p.Regions() { // fmt.Println("*", id) // } // -// fmt.Println("Services for", p.Name) +// fmt.Println("Services for", p.ID()) // for id, _ := range p.Services() { // fmt.Println("*", id) // } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go index 37e19ab00df..1f53d9cb686 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go @@ -3,6 +3,7 @@ package endpoints import ( "fmt" "regexp" + "strings" "github.com/aws/aws-sdk-go/aws/awserr" ) @@ -35,7 +36,7 @@ type Options struct { // // If resolving an endpoint on the partition list the provided region will // be used to determine which partition's domain name pattern to the service - // endpoint ID with. If both the service and region are unkonwn and resolving + // endpoint ID with. If both the service and region are unknown and resolving // the endpoint on partition list an UnknownEndpointError error will be returned. // // If resolving and endpoint on a partition specific resolver that partition's @@ -46,6 +47,108 @@ type Options struct { // // This option is ignored if StrictMatching is enabled. ResolveUnknownService bool + + // STS Regional Endpoint flag helps with resolving the STS endpoint + STSRegionalEndpoint STSRegionalEndpoint + + // S3 Regional Endpoint flag helps with resolving the S3 endpoint + S3UsEast1RegionalEndpoint S3UsEast1RegionalEndpoint +} + +// STSRegionalEndpoint is an enum for the states of the STS Regional Endpoint +// options. +type STSRegionalEndpoint int + +func (e STSRegionalEndpoint) String() string { + switch e { + case LegacySTSEndpoint: + return "legacy" + case RegionalSTSEndpoint: + return "regional" + case UnsetSTSEndpoint: + return "" + default: + return "unknown" + } +} + +const ( + + // UnsetSTSEndpoint represents that STS Regional Endpoint flag is not specified. + UnsetSTSEndpoint STSRegionalEndpoint = iota + + // LegacySTSEndpoint represents when STS Regional Endpoint flag is specified + // to use legacy endpoints. + LegacySTSEndpoint + + // RegionalSTSEndpoint represents when STS Regional Endpoint flag is specified + // to use regional endpoints. + RegionalSTSEndpoint +) + +// GetSTSRegionalEndpoint function returns the STSRegionalEndpointFlag based +// on the input string provided in env config or shared config by the user. +// +// `legacy`, `regional` are the only case-insensitive valid strings for +// resolving the STS regional Endpoint flag. +func GetSTSRegionalEndpoint(s string) (STSRegionalEndpoint, error) { + switch { + case strings.EqualFold(s, "legacy"): + return LegacySTSEndpoint, nil + case strings.EqualFold(s, "regional"): + return RegionalSTSEndpoint, nil + default: + return UnsetSTSEndpoint, fmt.Errorf("unable to resolve the value of STSRegionalEndpoint for %v", s) + } +} + +// S3UsEast1RegionalEndpoint is an enum for the states of the S3 us-east-1 +// Regional Endpoint options. +type S3UsEast1RegionalEndpoint int + +func (e S3UsEast1RegionalEndpoint) String() string { + switch e { + case LegacyS3UsEast1Endpoint: + return "legacy" + case RegionalS3UsEast1Endpoint: + return "regional" + case UnsetS3UsEast1Endpoint: + return "" + default: + return "unknown" + } +} + +const ( + + // UnsetS3UsEast1Endpoint represents that S3 Regional Endpoint flag is not + // specified. + UnsetS3UsEast1Endpoint S3UsEast1RegionalEndpoint = iota + + // LegacyS3UsEast1Endpoint represents when S3 Regional Endpoint flag is + // specified to use legacy endpoints. + LegacyS3UsEast1Endpoint + + // RegionalS3UsEast1Endpoint represents when S3 Regional Endpoint flag is + // specified to use regional endpoints. + RegionalS3UsEast1Endpoint +) + +// GetS3UsEast1RegionalEndpoint function returns the S3UsEast1RegionalEndpointFlag based +// on the input string provided in env config or shared config by the user. +// +// `legacy`, `regional` are the only case-insensitive valid strings for +// resolving the S3 regional Endpoint flag. +func GetS3UsEast1RegionalEndpoint(s string) (S3UsEast1RegionalEndpoint, error) { + switch { + case strings.EqualFold(s, "legacy"): + return LegacyS3UsEast1Endpoint, nil + case strings.EqualFold(s, "regional"): + return RegionalS3UsEast1Endpoint, nil + default: + return UnsetS3UsEast1Endpoint, + fmt.Errorf("unable to resolve the value of S3UsEast1RegionalEndpoint for %v", s) + } } // Set combines all of the option functions together. @@ -79,6 +182,12 @@ func ResolveUnknownServiceOption(o *Options) { o.ResolveUnknownService = true } +// STSRegionalEndpointOption enables the STS endpoint resolver behavior to resolve +// STS endpoint to their regional endpoint, instead of the global endpoint. +func STSRegionalEndpointOption(o *Options) { + o.STSRegionalEndpoint = RegionalSTSEndpoint +} + // A Resolver provides the interface for functionality to resolve endpoints. // The build in Partition and DefaultResolver return value satisfy this interface. type Resolver interface { @@ -124,15 +233,61 @@ type EnumPartitions interface { Partitions() []Partition } +// RegionsForService returns a map of regions for the partition and service. +// If either the partition or service does not exist false will be returned +// as the second parameter. +// +// This example shows how to get the regions for DynamoDB in the AWS partition. +// rs, exists := endpoints.RegionsForService(endpoints.DefaultPartitions(), endpoints.AwsPartitionID, endpoints.DynamodbServiceID) +// +// This is equivalent to using the partition directly. +// rs := endpoints.AwsPartition().Services()[endpoints.DynamodbServiceID].Regions() +func RegionsForService(ps []Partition, partitionID, serviceID string) (map[string]Region, bool) { + for _, p := range ps { + if p.ID() != partitionID { + continue + } + if _, ok := p.p.Services[serviceID]; !ok { + break + } + + s := Service{ + id: serviceID, + p: p.p, + } + return s.Regions(), true + } + + return map[string]Region{}, false +} + +// PartitionForRegion returns the first partition which includes the region +// passed in. This includes both known regions and regions which match +// a pattern supported by the partition which may include regions that are +// not explicitly known by the partition. Use the Regions method of the +// returned Partition if explicit support is needed. +func PartitionForRegion(ps []Partition, regionID string) (Partition, bool) { + for _, p := range ps { + if _, ok := p.p.Regions[regionID]; ok || p.p.RegionRegex.MatchString(regionID) { + return p, true + } + } + + return Partition{}, false +} + // A Partition provides the ability to enumerate the partition's regions // and services. type Partition struct { - id string - p *partition + id, dnsSuffix string + p *partition } +// DNSSuffix returns the base domain name of the partition. +func (p Partition) DNSSuffix() string { return p.dnsSuffix } + // ID returns the identifier of the partition. -func (p *Partition) ID() string { return p.id } +func (p Partition) ID() string { return p.id } // EndpointFor attempts to resolve the endpoint based on service and region. // See Options for information on configuring how the endpoint is resolved. @@ -148,25 +303,26 @@ func (p *Partition) ID() string { return p.id } // require the provided service and region to be known by the partition. // If the endpoint cannot be strictly resolved an error will be returned. This // mode is useful to ensure the endpoint resolved is valid. Without -// StrictMatching enabled the endpoint returned my look valid but may not work. +// StrictMatching enabled the endpoint returned may look valid but may not work. // StrictMatching requires the SDK to be updated if you want to take advantage // of new regions and services expansions. // // Errors that can be returned. // * UnknownServiceError // * UnknownEndpointError -func (p *Partition) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) { +func (p Partition) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) { return p.p.EndpointFor(service, region, opts...) } // Regions returns a map of Regions indexed by their ID. This is useful for // enumerating over the regions in a partition. -func (p *Partition) Regions() map[string]Region { +func (p Partition) Regions() map[string]Region { rs := map[string]Region{} - for id := range p.p.Regions { + for id, r := range p.p.Regions { rs[id] = Region{ - id: id, - p: p.p, + id: id, + desc: r.Description, + p: p.p, } } @@ -175,7 +331,7 @@ func (p *Partition) Regions() map[string]Region { // Services returns a map of Service indexed by their ID. This is useful for // enumerating over the services in a partition. -func (p *Partition) Services() map[string]Service { +func (p Partition) Services() map[string]Service { ss := map[string]Service{} for id := range p.p.Services { ss[id] = Service{ @@ -195,16 +351,20 @@ type Region struct { } // ID returns the region's identifier. -func (r *Region) ID() string { return r.id } +func (r Region) ID() string { return r.id } + +// Description returns the region's description. The region description +// is free text, it can be empty, and it may change between SDK releases. +func (r Region) Description() string { return r.desc } // ResolveEndpoint resolves an endpoint from the context of the region given // a service. See Partition.EndpointFor for usage and errors that can be returned. -func (r *Region) ResolveEndpoint(service string, opts ...func(*Options)) (ResolvedEndpoint, error) { +func (r Region) ResolveEndpoint(service string, opts ...func(*Options)) (ResolvedEndpoint, error) { return r.p.EndpointFor(service, r.id, opts...) } // Services returns a list of all services that are known to be in this region. -func (r *Region) Services() map[string]Service { +func (r Region) Services() map[string]Service { ss := map[string]Service{} for id, s := range r.p.Services { if _, ok := s.Endpoints[r.id]; ok { @@ -226,17 +386,39 @@ type Service struct { } // ID returns the identifier for the service. -func (s *Service) ID() string { return s.id } +func (s Service) ID() string { return s.id } // ResolveEndpoint resolves an endpoint from the context of a service given // a region. See Partition.EndpointFor for usage and errors that can be returned. -func (s *Service) ResolveEndpoint(region string, opts ...func(*Options)) (ResolvedEndpoint, error) { +func (s Service) ResolveEndpoint(region string, opts ...func(*Options)) (ResolvedEndpoint, error) { return s.p.EndpointFor(s.id, region, opts...) } +// Regions returns a map of Regions that the service is present in. +// +// A region is the AWS region the service exists in. Whereas a Endpoint is +// an URL that can be resolved to a instance of a service. +func (s Service) Regions() map[string]Region { + rs := map[string]Region{} + for id := range s.p.Services[s.id].Endpoints { + if r, ok := s.p.Regions[id]; ok { + rs[id] = Region{ + id: id, + desc: r.Description, + p: s.p, + } + } + } + + return rs +} + // Endpoints returns a map of Endpoints indexed by their ID for all known // endpoints for a service. -func (s *Service) Endpoints() map[string]Endpoint { +// +// A region is the AWS region the service exists in. Whereas a Endpoint is +// an URL that can be resolved to a instance of a service. +func (s Service) Endpoints() map[string]Endpoint { es := map[string]Endpoint{} for id := range s.p.Services[s.id].Endpoints { es[id] = Endpoint{ @@ -259,15 +441,15 @@ type Endpoint struct { } // ID returns the identifier for an endpoint. -func (e *Endpoint) ID() string { return e.id } +func (e Endpoint) ID() string { return e.id } // ServiceID returns the identifier the endpoint belongs to. -func (e *Endpoint) ServiceID() string { return e.serviceID } +func (e Endpoint) ServiceID() string { return e.serviceID } // ResolveEndpoint resolves an endpoint from the context of a service and // region the endpoint represents. See Partition.EndpointFor for usage and // errors that can be returned. -func (e *Endpoint) ResolveEndpoint(opts ...func(*Options)) (ResolvedEndpoint, error) { +func (e Endpoint) ResolveEndpoint(opts ...func(*Options)) (ResolvedEndpoint, error) { return e.p.EndpointFor(e.serviceID, e.id, opts...) } @@ -277,12 +459,19 @@ type ResolvedEndpoint struct { // The endpoint URL URL string + // The endpoint partition + PartitionID string + // The region that should be used for signing requests. SigningRegion string // The service name that should be used for signing requests. SigningName string + // States that the signing name for this endpoint was derived from metadata + // passed in, but was not explicitly modeled. + SigningNameDerived bool + // The signing method that should be used for signing requests. SigningMethod string } @@ -300,28 +489,6 @@ type EndpointNotFoundError struct { Region string } -//// NewEndpointNotFoundError builds and returns NewEndpointNotFoundError. -//func NewEndpointNotFoundError(p, s, r string) EndpointNotFoundError { -// return EndpointNotFoundError{ -// awsError: awserr.New("EndpointNotFoundError", "unable to find endpoint", nil), -// Partition: p, -// Service: s, -// Region: r, -// } -//} -// -//// Error returns string representation of the error. -//func (e EndpointNotFoundError) Error() string { -// extra := fmt.Sprintf("partition: %q, service: %q, region: %q", -// e.Partition, e.Service, e.Region) -// return awserr.SprintError(e.Code(), e.Message(), extra, e.OrigErr()) -//} -// -//// String returns the string representation of the error. -//func (e EndpointNotFoundError) String() string { -// return e.Error() -//} - // A UnknownServiceError is returned when the service does not resolve to an // endpoint. Includes a list of all known services for the partition. Returned // when a partition does not support the service. diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go new file mode 100644 index 00000000000..df75e899adb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/legacy_regions.go @@ -0,0 +1,24 @@ +package endpoints + +var legacyGlobalRegions = map[string]map[string]struct{}{ + "sts": { + "ap-northeast-1": {}, + "ap-south-1": {}, + "ap-southeast-1": {}, + "ap-southeast-2": {}, + "ca-central-1": {}, + "eu-central-1": {}, + "eu-north-1": {}, + "eu-west-1": {}, + "eu-west-2": {}, + "eu-west-3": {}, + "sa-east-1": {}, + "us-east-1": {}, + "us-east-2": {}, + "us-west-1": {}, + "us-west-2": {}, + }, + "s3": { + "us-east-1": {}, + }, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go index 13d968a249e..eb2ac83c992 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go @@ -54,8 +54,9 @@ type partition struct { func (p partition) Partition() Partition { return Partition{ - id: p.ID, - p: &p, + dnsSuffix: p.DNSSuffix, + id: p.ID, + p: &p, } } @@ -74,24 +75,56 @@ func (p partition) canResolveEndpoint(service, region string, strictMatch bool) return p.RegionRegex.MatchString(region) } +func allowLegacyEmptyRegion(service string) bool { + legacy := map[string]struct{}{ + "budgets": {}, + "ce": {}, + "chime": {}, + "cloudfront": {}, + "ec2metadata": {}, + "iam": {}, + "importexport": {}, + "organizations": {}, + "route53": {}, + "sts": {}, + "support": {}, + "waf": {}, + } + + _, allowed := legacy[service] + return allowed +} + func (p partition) EndpointFor(service, region string, opts ...func(*Options)) (resolved ResolvedEndpoint, err error) { var opt Options opt.Set(opts...) s, hasService := p.Services[service] - if !(hasService || opt.ResolveUnknownService) { + if len(service) == 0 || !(hasService || opt.ResolveUnknownService) { // Only return error if the resolver will not fallback to creating // endpoint based on service endpoint ID passed in. return resolved, NewUnknownServiceError(p.ID, service, serviceList(p.Services)) } + if len(region) == 0 && allowLegacyEmptyRegion(service) && len(s.PartitionEndpoint) != 0 { + region = s.PartitionEndpoint + } + + if (service == "sts" && opt.STSRegionalEndpoint != RegionalSTSEndpoint) || + (service == "s3" && opt.S3UsEast1RegionalEndpoint != RegionalS3UsEast1Endpoint) { + if _, ok := legacyGlobalRegions[service][region]; ok { + region = "aws-global" + } + } + e, hasEndpoint := s.endpointForRegion(region) - if !hasEndpoint && opt.StrictMatching { + if len(region) == 0 || (!hasEndpoint && opt.StrictMatching) { return resolved, NewUnknownEndpointError(p.ID, service, region, endpointList(s.Endpoints)) } defs := []endpoint{p.Defaults, s.Defaults} - return e.resolve(service, region, p.DNSSuffix, defs, opt), nil + + return e.resolve(service, p.ID, region, p.DNSSuffix, defs, opt), nil } func serviceList(ss services) []string { @@ -200,7 +233,7 @@ func getByPriority(s []string, p []string, def string) string { return s[0] } -func (e endpoint) resolve(service, region, dnsSuffix string, defs []endpoint, opts Options) ResolvedEndpoint { +func (e endpoint) resolve(service, partitionID, region, dnsSuffix string, defs []endpoint, opts Options) ResolvedEndpoint { var merged endpoint for _, def := range defs { merged.mergeIn(def) @@ -208,11 +241,23 @@ func (e endpoint) resolve(service, region, dnsSuffix string, defs []endpoint, op merged.mergeIn(e) e = merged - hostname := e.Hostname + signingRegion := e.CredentialScope.Region + if len(signingRegion) == 0 { + signingRegion = region + } + + signingName := e.CredentialScope.Service + var signingNameDerived bool + if len(signingName) == 0 { + signingName = service + signingNameDerived = true + } + hostname := e.Hostname // Offset the hostname for dualstack if enabled if opts.UseDualStack && e.HasDualStack == boxedTrue { hostname = e.DualStackHostname + region = signingRegion } u := strings.Replace(hostname, "{service}", service, 1) @@ -222,20 +267,13 @@ func (e endpoint) resolve(service, region, dnsSuffix string, defs []endpoint, op scheme := getEndpointScheme(e.Protocols, opts.DisableSSL) u = fmt.Sprintf("%s://%s", scheme, u) - signingRegion := e.CredentialScope.Region - if len(signingRegion) == 0 { - signingRegion = region - } - signingName := e.CredentialScope.Service - if len(signingName) == 0 { - signingName = service - } - return ResolvedEndpoint{ - URL: u, - SigningRegion: signingRegion, - SigningName: signingName, - SigningMethod: getByPriority(e.SignatureVersions, signerPriority, defaultSigner), + URL: u, + PartitionID: partitionID, + SigningRegion: signingRegion, + SigningName: signingName, + SigningNameDerived: signingNameDerived, + SigningMethod: getByPriority(e.SignatureVersions, signerPriority, defaultSigner), } } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go index 1e7369dbfd1..0fdfcc56e05 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go @@ -16,6 +16,10 @@ import ( type CodeGenOptions struct { // Options for how the model will be decoded. DecodeModelOptions DecodeModelOptions + + // Disables code generation of the service endpoint prefix IDs defined in + // the model. + DisableGenerateServiceIDs bool } // Set combines all of the option functions together @@ -39,8 +43,16 @@ func CodeGenModel(modelFile io.Reader, outFile io.Writer, optFns ...func(*CodeGe return err } + v := struct { + Resolver + CodeGenOptions + }{ + Resolver: resolver, + CodeGenOptions: opts, + } + tmpl := template.Must(template.New("tmpl").Funcs(funcMap).Parse(v3Tmpl)) - if err := tmpl.ExecuteTemplate(outFile, "defaults", resolver); err != nil { + if err := tmpl.ExecuteTemplate(outFile, "defaults", v); err != nil { return fmt.Errorf("failed to execute template, %v", err) } @@ -158,7 +170,7 @@ var funcMap = template.FuncMap{ const v3Tmpl = ` {{ define "defaults" -}} -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT. package endpoints @@ -166,15 +178,17 @@ import ( "regexp" ) - {{ template "partition consts" . }} + {{ template "partition consts" $.Resolver }} - {{ range $_, $partition := . }} + {{ range $_, $partition := $.Resolver }} {{ template "partition region consts" $partition }} {{ end }} - {{ template "service consts" . }} + {{ if not $.DisableGenerateServiceIDs -}} + {{ template "service consts" $.Resolver }} + {{- end }} - {{ template "endpoint resolvers" . }} + {{ template "endpoint resolvers" $.Resolver }} {{- end }} {{ define "partition consts" }} @@ -209,17 +223,20 @@ import ( // DefaultResolver returns an Endpoint resolver that will be able // to resolve endpoints for: {{ ListPartitionNames . }}. // - // Casting the return value of this func to a EnumPartitions will - // allow you to get a list of the partitions in the order the endpoints - // will be resolved in. + // Use DefaultPartitions() to get the list of the default partitions. + func DefaultResolver() Resolver { + return defaultPartitions + } + + // DefaultPartitions returns a list of the partitions the SDK is bundled + // with. The available partitions are: {{ ListPartitionNames . }}. // - // resolver := endpoints.DefaultResolver() - // partitions := resolver.(endpoints.EnumPartitions).Partitions() + // partitions := endpoints.DefaultPartitions // for _, p := range partitions { // // ... inspect partitions // } - func DefaultResolver() Resolver { - return defaultPartitions + func DefaultPartitions() []Partition { + return defaultPartitions.Partitions() } var defaultPartitions = partitions{ diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/errors.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/errors.go index 57663616868..fa06f7a8f8b 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/errors.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/errors.go @@ -5,13 +5,9 @@ import "github.com/aws/aws-sdk-go/aws/awserr" var ( // ErrMissingRegion is an error that is returned if region configuration is // not found. - // - // @readonly ErrMissingRegion = awserr.New("MissingRegion", "could not find region configuration", nil) // ErrMissingEndpoint is an error that is returned if an endpoint cannot be // resolved for a service. - // - // @readonly ErrMissingEndpoint = awserr.New("MissingEndpoint", "'Endpoint' configuration is required for this service", nil) ) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go new file mode 100644 index 00000000000..91a6f277a7e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go @@ -0,0 +1,12 @@ +package aws + +// JSONValue is a representation of a grab bag type that will be marshaled +// into a json string. This type can be used just like any other map. +// +// Example: +// +// values := aws.JSONValue{ +// "Foo": "Bar", +// } +// values["Baz"] = "Qux" +type JSONValue map[string]interface{} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/logger.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/logger.go index db87188e20c..6ed15b2ecc2 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/logger.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/logger.go @@ -26,14 +26,14 @@ func (l *LogLevelType) Value() LogLevelType { // Matches returns true if the v LogLevel is enabled by this LogLevel. Should be // used with logging sub levels. Is safe to use on nil value LogLevelTypes. If -// LogLevel is nill, will default to LogOff comparison. +// LogLevel is nil, will default to LogOff comparison. func (l *LogLevelType) Matches(v LogLevelType) bool { c := l.Value() return c&v == v } // AtLeast returns true if this LogLevel is at least high enough to satisfies v. -// Is safe to use on nil value LogLevelTypes. If LogLevel is nill, will default +// Is safe to use on nil value LogLevelTypes. If LogLevel is nil, will default // to LogOff comparison. func (l *LogLevelType) AtLeast(v LogLevelType) bool { c := l.Value() @@ -71,6 +71,12 @@ const ( // LogDebugWithRequestErrors states the SDK should log when service requests fail // to build, send, validate, or unmarshal. LogDebugWithRequestErrors + + // LogDebugWithEventStreamBody states the SDK should log EventStream + // request and response bodys. This should be used to log the EventStream + // wire unmarshaled message content of requests and responses made while + // using the SDK Will also enable LogDebug. + LogDebugWithEventStreamBody ) // A Logger is a minimalistic interface for the SDK to log messages to. Should diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go new file mode 100644 index 00000000000..d9b37f4d32a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go @@ -0,0 +1,18 @@ +package request + +import ( + "strings" +) + +func isErrConnectionReset(err error) bool { + if strings.Contains(err.Error(), "read: connection reset") { + return false + } + + if strings.Contains(err.Error(), "connection reset") || + strings.Contains(err.Error(), "broken pipe") { + return true + } + + return false +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go index 5279c19c09d..185b073181e 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go @@ -14,13 +14,16 @@ type Handlers struct { Send HandlerList ValidateResponse HandlerList Unmarshal HandlerList + UnmarshalStream HandlerList UnmarshalMeta HandlerList UnmarshalError HandlerList Retry HandlerList AfterRetry HandlerList + CompleteAttempt HandlerList + Complete HandlerList } -// Copy returns of this handler's lists. +// Copy returns a copy of this handler's lists. func (h *Handlers) Copy() Handlers { return Handlers{ Validate: h.Validate.copy(), @@ -29,25 +32,76 @@ func (h *Handlers) Copy() Handlers { Send: h.Send.copy(), ValidateResponse: h.ValidateResponse.copy(), Unmarshal: h.Unmarshal.copy(), + UnmarshalStream: h.UnmarshalStream.copy(), UnmarshalError: h.UnmarshalError.copy(), UnmarshalMeta: h.UnmarshalMeta.copy(), Retry: h.Retry.copy(), AfterRetry: h.AfterRetry.copy(), + CompleteAttempt: h.CompleteAttempt.copy(), + Complete: h.Complete.copy(), } } -// Clear removes callback functions for all handlers +// Clear removes callback functions for all handlers. func (h *Handlers) Clear() { h.Validate.Clear() h.Build.Clear() h.Send.Clear() h.Sign.Clear() h.Unmarshal.Clear() + h.UnmarshalStream.Clear() h.UnmarshalMeta.Clear() h.UnmarshalError.Clear() h.ValidateResponse.Clear() h.Retry.Clear() h.AfterRetry.Clear() + h.CompleteAttempt.Clear() + h.Complete.Clear() +} + +// IsEmpty returns if there are no handlers in any of the handlerlists. +func (h *Handlers) IsEmpty() bool { + if h.Validate.Len() != 0 { + return false + } + if h.Build.Len() != 0 { + return false + } + if h.Send.Len() != 0 { + return false + } + if h.Sign.Len() != 0 { + return false + } + if h.Unmarshal.Len() != 0 { + return false + } + if h.UnmarshalStream.Len() != 0 { + return false + } + if h.UnmarshalMeta.Len() != 0 { + return false + } + if h.UnmarshalError.Len() != 0 { + return false + } + if h.ValidateResponse.Len() != 0 { + return false + } + if h.Retry.Len() != 0 { + return false + } + if h.AfterRetry.Len() != 0 { + return false + } + if h.CompleteAttempt.Len() != 0 { + return false + } + if h.Complete.Len() != 0 { + return false + } + + return true } // A HandlerListRunItem represents an entry in the HandlerList which @@ -85,13 +139,17 @@ func (l *HandlerList) copy() HandlerList { n := HandlerList{ AfterEachFn: l.AfterEachFn, } - n.list = append([]NamedHandler{}, l.list...) + if len(l.list) == 0 { + return n + } + + n.list = append(make([]NamedHandler, 0, len(l.list)), l.list...) return n } // Clear clears the handler list. func (l *HandlerList) Clear() { - l.list = []NamedHandler{} + l.list = l.list[0:0] } // Len returns the number of handlers in the list. @@ -101,33 +159,100 @@ func (l *HandlerList) Len() int { // PushBack pushes handler f to the back of the handler list. func (l *HandlerList) PushBack(f func(*Request)) { - l.list = append(l.list, NamedHandler{"__anonymous", f}) -} - -// PushFront pushes handler f to the front of the handler list. -func (l *HandlerList) PushFront(f func(*Request)) { - l.list = append([]NamedHandler{{"__anonymous", f}}, l.list...) + l.PushBackNamed(NamedHandler{"__anonymous", f}) } // PushBackNamed pushes named handler f to the back of the handler list. func (l *HandlerList) PushBackNamed(n NamedHandler) { + if cap(l.list) == 0 { + l.list = make([]NamedHandler, 0, 5) + } l.list = append(l.list, n) } +// PushFront pushes handler f to the front of the handler list. +func (l *HandlerList) PushFront(f func(*Request)) { + l.PushFrontNamed(NamedHandler{"__anonymous", f}) +} + // PushFrontNamed pushes named handler f to the front of the handler list. func (l *HandlerList) PushFrontNamed(n NamedHandler) { - l.list = append([]NamedHandler{n}, l.list...) + if cap(l.list) == len(l.list) { + // Allocating new list required + l.list = append([]NamedHandler{n}, l.list...) + } else { + // Enough room to prepend into list. + l.list = append(l.list, NamedHandler{}) + copy(l.list[1:], l.list) + l.list[0] = n + } } // Remove removes a NamedHandler n func (l *HandlerList) Remove(n NamedHandler) { - newlist := []NamedHandler{} - for _, m := range l.list { - if m.Name != n.Name { - newlist = append(newlist, m) + l.RemoveByName(n.Name) +} + +// RemoveByName removes a NamedHandler by name. +func (l *HandlerList) RemoveByName(name string) { + for i := 0; i < len(l.list); i++ { + m := l.list[i] + if m.Name == name { + // Shift array preventing creating new arrays + copy(l.list[i:], l.list[i+1:]) + l.list[len(l.list)-1] = NamedHandler{} + l.list = l.list[:len(l.list)-1] + + // decrement list so next check to length is correct + i-- + } + } +} + +// SwapNamed will swap out any existing handlers with the same name as the +// passed in NamedHandler returning true if handlers were swapped. False is +// returned otherwise. +func (l *HandlerList) SwapNamed(n NamedHandler) (swapped bool) { + for i := 0; i < len(l.list); i++ { + if l.list[i].Name == n.Name { + l.list[i].Fn = n.Fn + swapped = true + } + } + + return swapped +} + +// Swap will swap out all handlers matching the name passed in. The matched +// handlers will be swapped in. True is returned if the handlers were swapped. +func (l *HandlerList) Swap(name string, replace NamedHandler) bool { + var swapped bool + + for i := 0; i < len(l.list); i++ { + if l.list[i].Name == name { + l.list[i] = replace + swapped = true } } - l.list = newlist + + return swapped +} + +// SetBackNamed will replace the named handler if it exists in the handler list. +// If the handler does not exist the handler will be added to the end of the list. +func (l *HandlerList) SetBackNamed(n NamedHandler) { + if !l.SwapNamed(n) { + l.PushBackNamed(n) + } +} + +// SetFrontNamed will replace the named handler if it exists in the handler list. +// If the handler does not exist the handler will be added to the beginning of +// the list. +func (l *HandlerList) SetFrontNamed(n NamedHandler) { + if !l.SwapNamed(n) { + l.PushFrontNamed(n) + } } // Run executes all handlers in the list with a given request object. @@ -163,6 +288,16 @@ func HandlerListStopOnError(item HandlerListRunItem) bool { return item.Request.Error == nil } +// WithAppendUserAgent will add a string to the user agent prefixed with a +// single white space. +func WithAppendUserAgent(s string) Option { + return func(r *Request) { + r.Handlers.Build.PushBack(func(r2 *Request) { + AddToUserAgent(r, s) + }) + } +} + // MakeAddToUserAgentHandler will add the name/version pair to the User-Agent request // header. If the extra parameters are provided they will be added as metadata to the // name/version pair resulting in the following format. diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go index 02f07f4a462..9370fa50c38 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go @@ -3,6 +3,8 @@ package request import ( "io" "sync" + + "github.com/aws/aws-sdk-go/internal/sdkio" ) // offsetReader is a thread-safe io.ReadCloser to prevent racing @@ -13,12 +15,15 @@ type offsetReader struct { closed bool } -func newOffsetReader(buf io.ReadSeeker, offset int64) *offsetReader { +func newOffsetReader(buf io.ReadSeeker, offset int64) (*offsetReader, error) { reader := &offsetReader{} - buf.Seek(offset, 0) + _, err := buf.Seek(offset, sdkio.SeekStart) + if err != nil { + return nil, err + } reader.buf = buf - return reader + return reader, nil } // Close will close the instance of the offset reader's access to @@ -52,7 +57,9 @@ func (o *offsetReader) Seek(offset int64, whence int) (int64, error) { // CloseAndCopy will return a new offsetReader with a copy of the old buffer // and close the old buffer. -func (o *offsetReader) CloseAndCopy(offset int64) *offsetReader { - o.Close() +func (o *offsetReader) CloseAndCopy(offset int64) (*offsetReader, error) { + if err := o.Close(); err != nil { + return nil, err + } return newOffsetReader(o.buf, offset) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request.go index 77312bb6655..52178141da6 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request.go @@ -4,7 +4,6 @@ import ( "bytes" "fmt" "io" - "net" "net/http" "net/url" "reflect" @@ -14,6 +13,29 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/internal/sdkio" +) + +const ( + // ErrCodeSerialization is the serialization error code that is received + // during protocol unmarshaling. + ErrCodeSerialization = "SerializationError" + + // ErrCodeRead is an error that is returned during HTTP reads. + ErrCodeRead = "ReadError" + + // ErrCodeResponseTimeout is the connection timeout error that is received + // during body reads. + ErrCodeResponseTimeout = "ResponseTimeout" + + // ErrCodeInvalidPresignExpire is returned when the expire time provided to + // presign is invalid + ErrCodeInvalidPresignExpire = "InvalidPresignExpireError" + + // CanceledErrorCode is the error code that will be returned by an + // API request that was canceled. Requests given a aws.Context may + // return this error when canceled. + CanceledErrorCode = "RequestCanceled" ) // A Request is the service request to be made. @@ -23,30 +45,47 @@ type Request struct { Handlers Handlers Retryer - Time time.Time - ExpireTime time.Duration - Operation *Operation - HTTPRequest *http.Request - HTTPResponse *http.Response - Body io.ReadSeeker - BodyStart int64 // offset from beginning of Body that the request body starts - Params interface{} - Error error - Data interface{} - RequestID string - RetryCount int - Retryable *bool - RetryDelay time.Duration - NotHoist bool - SignedHeaderVals http.Header - LastSignedAt time.Time + AttemptTime time.Time + Time time.Time + Operation *Operation + HTTPRequest *http.Request + HTTPResponse *http.Response + Body io.ReadSeeker + BodyStart int64 // offset from beginning of Body that the request body starts + Params interface{} + Error error + Data interface{} + RequestID string + RetryCount int + Retryable *bool + RetryDelay time.Duration + NotHoist bool + SignedHeaderVals http.Header + LastSignedAt time.Time + DisableFollowRedirects bool + + // Additional API error codes that should be retried. IsErrorRetryable + // will consider these codes in addition to its built in cases. + RetryErrorCodes []string + + // Additional API error codes that should be retried with throttle backoff + // delay. IsErrorThrottle will consider these codes in addition to its + // built in cases. + ThrottleErrorCodes []string + + // A value greater than 0 instructs the request to be signed as Presigned URL + // You should not set this field directly. Instead use Request's + // Presign or PresignRequest methods. + ExpireTime time.Duration + + context aws.Context built bool - // Need to persist an intermideant body betweend the input Body and HTTP + // Need to persist an intermediate body between the input Body and HTTP // request body because the HTTP Client's transport can maintain a reference // to the HTTP request's body after the client has returned. This value is - // safe to use concurrently and rewraps the input Body for each HTTP request. + // safe to use concurrently and wrap the input Body for each HTTP request. safeBody *offsetReader } @@ -60,16 +99,12 @@ type Operation struct { BeforePresignFn func(r *Request) error } -// Paginator keeps track of pagination configuration for an API operation. -type Paginator struct { - InputTokens []string - OutputTokens []string - LimitToken string - TruncationToken string -} - -// New returns a new Request pointer for the service API -// operation and parameters. +// New returns a new Request pointer for the service API operation and +// parameters. +// +// A Retryer should be provided to direct how the request is retried. If +// Retryer is nil, a default no retry value will be used. You can use +// NoOpRetryer in the Client package to disable retry behavior directly. // // Params is any value of input parameters to be the request payload. // Data is pointer value to an object which the request's response @@ -77,6 +112,10 @@ type Paginator struct { func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers, retryer Retryer, operation *Operation, params interface{}, data interface{}) *Request { + if retryer == nil { + retryer = noOpRetryer{} + } + method := operation.HTTPMethod if method == "" { method = "POST" @@ -91,6 +130,8 @@ func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers, err = awserr.New("InvalidEndpointURL", "invalid endpoint uri", err) } + SanitizeHostForHeader(httpReq) + r := &Request{ Config: cfg, ClientInfo: clientInfo, @@ -111,11 +152,106 @@ func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers, return r } +// A Option is a functional option that can augment or modify a request when +// using a WithContext API operation method. +type Option func(*Request) + +// WithGetResponseHeader builds a request Option which will retrieve a single +// header value from the HTTP Response. If there are multiple values for the +// header key use WithGetResponseHeaders instead to access the http.Header +// map directly. The passed in val pointer must be non-nil. +// +// This Option can be used multiple times with a single API operation. +// +// var id2, versionID string +// svc.PutObjectWithContext(ctx, params, +// request.WithGetResponseHeader("x-amz-id-2", &id2), +// request.WithGetResponseHeader("x-amz-version-id", &versionID), +// ) +func WithGetResponseHeader(key string, val *string) Option { + return func(r *Request) { + r.Handlers.Complete.PushBack(func(req *Request) { + *val = req.HTTPResponse.Header.Get(key) + }) + } +} + +// WithGetResponseHeaders builds a request Option which will retrieve the +// headers from the HTTP response and assign them to the passed in headers +// variable. The passed in headers pointer must be non-nil. +// +// var headers http.Header +// svc.PutObjectWithContext(ctx, params, request.WithGetResponseHeaders(&headers)) +func WithGetResponseHeaders(headers *http.Header) Option { + return func(r *Request) { + r.Handlers.Complete.PushBack(func(req *Request) { + *headers = req.HTTPResponse.Header + }) + } +} + +// WithLogLevel is a request option that will set the request to use a specific +// log level when the request is made. +// +// svc.PutObjectWithContext(ctx, params, request.WithLogLevel(aws.LogDebugWithHTTPBody) +func WithLogLevel(l aws.LogLevelType) Option { + return func(r *Request) { + r.Config.LogLevel = aws.LogLevel(l) + } +} + +// ApplyOptions will apply each option to the request calling them in the order +// the were provided. +func (r *Request) ApplyOptions(opts ...Option) { + for _, opt := range opts { + opt(r) + } +} + +// Context will always returns a non-nil context. If Request does not have a +// context aws.BackgroundContext will be returned. +func (r *Request) Context() aws.Context { + if r.context != nil { + return r.context + } + return aws.BackgroundContext() +} + +// SetContext adds a Context to the current request that can be used to cancel +// a in-flight request. The Context value must not be nil, or this method will +// panic. +// +// Unlike http.Request.WithContext, SetContext does not return a copy of the +// Request. It is not safe to use use a single Request value for multiple +// requests. A new Request should be created for each API operation request. +// +// Go 1.6 and below: +// The http.Request's Cancel field will be set to the Done() value of +// the context. This will overwrite the Cancel field's value. +// +// Go 1.7 and above: +// The http.Request.WithContext will be used to set the context on the underlying +// http.Request. This will create a shallow copy of the http.Request. The SDK +// may create sub contexts in the future for nested requests such as retries. +func (r *Request) SetContext(ctx aws.Context) { + if ctx == nil { + panic("context cannot be nil") + } + setRequestContext(r, ctx) +} + // WillRetry returns if the request's can be retried. func (r *Request) WillRetry() bool { + if !aws.IsReaderSeekable(r.Body) && r.HTTPRequest.Body != NoBody { + return false + } return r.Error != nil && aws.BoolValue(r.Retryable) && r.RetryCount < r.MaxRetries() } +func fmtAttemptCount(retryCount, maxRetries int) string { + return fmt.Sprintf("attempt %v/%v", retryCount, maxRetries) +} + // ParamsFilled returns if the request's parameters have been populated // and the parameters are valid. False is returned if no parameters are // provided or invalid. @@ -144,59 +280,104 @@ func (r *Request) SetStringBody(s string) { // SetReaderBody will set the request's body reader. func (r *Request) SetReaderBody(reader io.ReadSeeker) { r.Body = reader + + if aws.IsReaderSeekable(reader) { + var err error + // Get the Bodies current offset so retries will start from the same + // initial position. + r.BodyStart, err = reader.Seek(0, sdkio.SeekCurrent) + if err != nil { + r.Error = awserr.New(ErrCodeSerialization, + "failed to determine start of request body", err) + return + } + } r.ResetBody() } // Presign returns the request's signed URL. Error will be returned -// if the signing fails. -func (r *Request) Presign(expireTime time.Duration) (string, error) { - r.ExpireTime = expireTime +// if the signing fails. The expire parameter is only used for presigned Amazon +// S3 API requests. All other AWS services will use a fixed expiration +// time of 15 minutes. +// +// It is invalid to create a presigned URL with a expire duration 0 or less. An +// error is returned if expire duration is 0 or less. +func (r *Request) Presign(expire time.Duration) (string, error) { + r = r.copy() + + // Presign requires all headers be hoisted. There is no way to retrieve + // the signed headers not hoisted without this. Making the presigned URL + // useless. r.NotHoist = false + u, _, err := getPresignedURL(r, expire) + return u, err +} + +// PresignRequest behaves just like presign, with the addition of returning a +// set of headers that were signed. The expire parameter is only used for +// presigned Amazon S3 API requests. All other AWS services will use a fixed +// expiration time of 15 minutes. +// +// It is invalid to create a presigned URL with a expire duration 0 or less. An +// error is returned if expire duration is 0 or less. +// +// Returns the URL string for the API operation with signature in the query string, +// and the HTTP headers that were included in the signature. These headers must +// be included in any HTTP request made with the presigned URL. +// +// To prevent hoisting any headers to the query string set NotHoist to true on +// this Request value prior to calling PresignRequest. +func (r *Request) PresignRequest(expire time.Duration) (string, http.Header, error) { + r = r.copy() + return getPresignedURL(r, expire) +} + +// IsPresigned returns true if the request represents a presigned API url. +func (r *Request) IsPresigned() bool { + return r.ExpireTime != 0 +} + +func getPresignedURL(r *Request, expire time.Duration) (string, http.Header, error) { + if expire <= 0 { + return "", nil, awserr.New( + ErrCodeInvalidPresignExpire, + "presigned URL requires an expire duration greater than 0", + nil, + ) + } + + r.ExpireTime = expire + if r.Operation.BeforePresignFn != nil { - r = r.copy() - err := r.Operation.BeforePresignFn(r) - if err != nil { - return "", err + if err := r.Operation.BeforePresignFn(r); err != nil { + return "", nil, err } } - r.Sign() - if r.Error != nil { - return "", r.Error + if err := r.Sign(); err != nil { + return "", nil, err } - return r.HTTPRequest.URL.String(), nil -} -// PresignRequest behaves just like presign, but hoists all headers and signs them. -// Also returns the signed hash back to the user -func (r *Request) PresignRequest(expireTime time.Duration) (string, http.Header, error) { - r.ExpireTime = expireTime - r.NotHoist = true - r.Sign() - if r.Error != nil { - return "", nil, r.Error - } return r.HTTPRequest.URL.String(), r.SignedHeaderVals, nil } -func debugLogReqError(r *Request, stage string, retrying bool, err error) { +const ( + notRetrying = "not retrying" +) + +func debugLogReqError(r *Request, stage, retryStr string, err error) { if !r.Config.LogLevel.Matches(aws.LogDebugWithRequestErrors) { return } - retryStr := "not retrying" - if retrying { - retryStr = "will retry" - } - r.Config.Logger.Log(fmt.Sprintf("DEBUG: %s %s/%s failed, %s, error %v", stage, r.ClientInfo.ServiceName, r.Operation.Name, retryStr, err)) } // Build will build the request's object so it can be signed and sent // to the service. Build will also validate all the request's parameters. -// Anny additional build Handlers set on this request will be run +// Any additional build Handlers set on this request will be run // in the order they were set. // // The request will only be built once. Multiple calls to build will have @@ -208,12 +389,12 @@ func (r *Request) Build() error { if !r.built { r.Handlers.Validate.Run(r) if r.Error != nil { - debugLogReqError(r, "Validate Request", false, r.Error) + debugLogReqError(r, "Validate Request", notRetrying, r.Error) return r.Error } r.Handlers.Build.Run(r) if r.Error != nil { - debugLogReqError(r, "Build Request", false, r.Error) + debugLogReqError(r, "Build Request", notRetrying, r.Error) return r.Error } r.built = true @@ -222,14 +403,14 @@ func (r *Request) Build() error { return r.Error } -// Sign will sign the request returning error if errors are encountered. +// Sign will sign the request, returning error if errors are encountered. // -// Send will build the request prior to signing. All Sign Handlers will +// Sign will build the request prior to signing. All Sign Handlers will // be executed in the order they were set. func (r *Request) Sign() error { r.Build() if r.Error != nil { - debugLogReqError(r, "Build Request", false, r.Error) + debugLogReqError(r, "Build Request", notRetrying, r.Error) return r.Error } @@ -237,15 +418,16 @@ func (r *Request) Sign() error { return r.Error } -// ResetBody rewinds the request body backto its starting position, and -// set's the HTTP Request body reference. When the body is read prior -// to being sent in the HTTP request it will need to be rewound. -func (r *Request) ResetBody() { +func (r *Request) getNextRequestBody() (body io.ReadCloser, err error) { if r.safeBody != nil { r.safeBody.Close() } - r.safeBody = newOffsetReader(r.Body, r.BodyStart) + r.safeBody, err = newOffsetReader(r.Body, r.BodyStart) + if err != nil { + return nil, awserr.New(ErrCodeSerialization, + "failed to get next request body reader", err) + } // Go 1.8 tightened and clarified the rules code needs to use when building // requests with the http package. Go 1.8 removed the automatic detection @@ -260,16 +442,16 @@ func (r *Request) ResetBody() { // of the SDK if they used that field. // // Related golang/go#18257 - l, err := computeBodyLength(r.Body) + l, err := aws.SeekerLen(r.Body) if err != nil { - r.Error = awserr.New("SerializationError", "failed to compute request body size", err) - return + return nil, awserr.New(ErrCodeSerialization, + "failed to compute request body size", err) } if l == 0 { - r.HTTPRequest.Body = noBodyReader + body = NoBody } else if l > 0 { - r.HTTPRequest.Body = r.safeBody + body = r.safeBody } else { // Hack to prevent sending bodies for methods where the body // should be ignored by the server. Sending bodies on these @@ -278,50 +460,17 @@ func (r *Request) ResetBody() { // Transfer-Encoding: chunked bodies for these methods. // // This would only happen if a aws.ReaderSeekerCloser was used with - // a io.Reader that was not also an io.Seeker. + // a io.Reader that was not also an io.Seeker, or did not implement + // Len() method. switch r.Operation.HTTPMethod { case "GET", "HEAD", "DELETE": - r.HTTPRequest.Body = noBodyReader + body = NoBody default: - r.HTTPRequest.Body = r.safeBody + body = r.safeBody } } -} - -// Attempts to compute the length of the body of the reader using the -// io.Seeker interface. If the value is not seekable because of being -// a ReaderSeekerCloser without an unerlying Seeker -1 will be returned. -// If no error occurs the length of the body will be returned. -func computeBodyLength(r io.ReadSeeker) (int64, error) { - seekable := true - // Determine if the seeker is actually seekable. ReaderSeekerCloser - // hides the fact that a io.Readers might not actually be seekable. - switch v := r.(type) { - case aws.ReaderSeekerCloser: - seekable = v.IsSeeker() - case *aws.ReaderSeekerCloser: - seekable = v.IsSeeker() - } - if !seekable { - return -1, nil - } - - curOffset, err := r.Seek(0, 1) - if err != nil { - return 0, err - } - - endOffset, err := r.Seek(0, 2) - if err != nil { - return 0, err - } - _, err = r.Seek(curOffset, 0) - if err != nil { - return 0, err - } - - return endOffset - curOffset, nil + return body, nil } // GetBody will return an io.ReadSeeker of the Request's underlying @@ -330,7 +479,7 @@ func (r *Request) GetBody() io.ReadSeeker { return r.safeBody } -// Send will send the request returning error if errors are encountered. +// Send will send the request, returning error if errors are encountered. // // Send will sign the request prior to sending. All Send Handlers will // be executed in the order they were set. @@ -344,78 +493,96 @@ func (r *Request) GetBody() io.ReadSeeker { // // Send will not close the request.Request's body. func (r *Request) Send() error { + defer func() { + // Regardless of success or failure of the request trigger the Complete + // request handlers. + r.Handlers.Complete.Run(r) + }() + + if err := r.Error; err != nil { + return err + } + for { - if aws.BoolValue(r.Retryable) { - if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) { - r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d", - r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount)) - } - - // The previous http.Request will have a reference to the r.Body - // and the HTTP Client's Transport may still be reading from - // the request's body even though the Client's Do returned. - r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil) - r.ResetBody() - - // Closing response body to ensure that no response body is leaked - // between retry attempts. - if r.HTTPResponse != nil && r.HTTPResponse.Body != nil { - r.HTTPResponse.Body.Close() - } - } + r.Error = nil + r.AttemptTime = time.Now() - r.Sign() - if r.Error != nil { - return r.Error + if err := r.Sign(); err != nil { + debugLogReqError(r, "Sign Request", notRetrying, err) + return err } - r.Retryable = nil - - r.Handlers.Send.Run(r) - if r.Error != nil { - if !shouldRetryCancel(r) { - return r.Error - } - - err := r.Error - r.Handlers.Retry.Run(r) - r.Handlers.AfterRetry.Run(r) - if r.Error != nil { - debugLogReqError(r, "Send Request", false, r.Error) - return r.Error - } - debugLogReqError(r, "Send Request", true, err) - continue + if err := r.sendRequest(); err == nil { + return nil } - r.Handlers.UnmarshalMeta.Run(r) - r.Handlers.ValidateResponse.Run(r) - if r.Error != nil { - err := r.Error - r.Handlers.UnmarshalError.Run(r) - r.Handlers.Retry.Run(r) - r.Handlers.AfterRetry.Run(r) - if r.Error != nil { - debugLogReqError(r, "Validate Response", false, r.Error) - return r.Error - } - debugLogReqError(r, "Validate Response", true, err) - continue + r.Handlers.Retry.Run(r) + r.Handlers.AfterRetry.Run(r) + + if r.Error != nil || !aws.BoolValue(r.Retryable) { + return r.Error } - r.Handlers.Unmarshal.Run(r) - if r.Error != nil { - err := r.Error - r.Handlers.Retry.Run(r) - r.Handlers.AfterRetry.Run(r) - if r.Error != nil { - debugLogReqError(r, "Unmarshal Response", false, r.Error) - return r.Error - } - debugLogReqError(r, "Unmarshal Response", true, err) - continue + if err := r.prepareRetry(); err != nil { + r.Error = err + return err } + } +} - break +func (r *Request) prepareRetry() error { + if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) { + r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d", + r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount)) + } + + // The previous http.Request will have a reference to the r.Body + // and the HTTP Client's Transport may still be reading from + // the request's body even though the Client's Do returned. + r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil) + r.ResetBody() + if err := r.Error; err != nil { + return awserr.New(ErrCodeSerialization, + "failed to prepare body for retry", err) + + } + + // Closing response body to ensure that no response body is leaked + // between retry attempts. + if r.HTTPResponse != nil && r.HTTPResponse.Body != nil { + r.HTTPResponse.Body.Close() + } + + return nil +} + +func (r *Request) sendRequest() (sendErr error) { + defer r.Handlers.CompleteAttempt.Run(r) + + r.Retryable = nil + r.Handlers.Send.Run(r) + if r.Error != nil { + debugLogReqError(r, "Send Request", + fmtAttemptCount(r.RetryCount, r.MaxRetries()), + r.Error) + return r.Error + } + + r.Handlers.UnmarshalMeta.Run(r) + r.Handlers.ValidateResponse.Run(r) + if r.Error != nil { + r.Handlers.UnmarshalError.Run(r) + debugLogReqError(r, "Validate Response", + fmtAttemptCount(r.RetryCount, r.MaxRetries()), + r.Error) + return r.Error + } + + r.Handlers.Unmarshal.Run(r) + if r.Error != nil { + debugLogReqError(r, "Unmarshal Response", + fmtAttemptCount(r.RetryCount, r.MaxRetries()), + r.Error) + return r.Error } return nil @@ -441,25 +608,71 @@ func AddToUserAgent(r *Request, s string) { r.HTTPRequest.Header.Set("User-Agent", s) } -func shouldRetryCancel(r *Request) bool { - awsErr, ok := r.Error.(awserr.Error) - timeoutErr := false - errStr := r.Error.Error() - if ok { - err := awsErr.OrigErr() - netErr, netOK := err.(net.Error) - timeoutErr = netOK && netErr.Temporary() - if urlErr, ok := err.(*url.Error); !timeoutErr && ok { - errStr = urlErr.Err.Error() - } +// SanitizeHostForHeader removes default port from host and updates request.Host +func SanitizeHostForHeader(r *http.Request) { + host := getHost(r) + port := portOnly(host) + if port != "" && isDefaultPort(r.URL.Scheme, port) { + r.Host = stripPort(host) + } +} + +// Returns host from request +func getHost(r *http.Request) string { + if r.Host != "" { + return r.Host } - // There can be two types of canceled errors here. - // The first being a net.Error and the other being an error. - // If the request was timed out, we want to continue the retry - // process. Otherwise, return the canceled error. - return timeoutErr || - (errStr != "net/http: request canceled" && - errStr != "net/http: request canceled while waiting for connection") + return r.URL.Host +} + +// Hostname returns u.Host, without any port number. +// +// If Host is an IPv6 literal with a port number, Hostname returns the +// IPv6 literal without the square brackets. IPv6 literals may include +// a zone identifier. +// +// Copied from the Go 1.8 standard library (net/url) +func stripPort(hostport string) string { + colon := strings.IndexByte(hostport, ':') + if colon == -1 { + return hostport + } + if i := strings.IndexByte(hostport, ']'); i != -1 { + return strings.TrimPrefix(hostport[:i], "[") + } + return hostport[:colon] +} + +// Port returns the port part of u.Host, without the leading colon. +// If u.Host doesn't contain a port, Port returns an empty string. +// +// Copied from the Go 1.8 standard library (net/url) +func portOnly(hostport string) string { + colon := strings.IndexByte(hostport, ':') + if colon == -1 { + return "" + } + if i := strings.Index(hostport, "]:"); i != -1 { + return hostport[i+len("]:"):] + } + if strings.Contains(hostport, "]") { + return "" + } + return hostport[colon+len(":"):] +} + +// Returns true if the specified URI is using the standard port +// (i.e. port 80 for HTTP URIs or 443 for HTTPS URIs) +func isDefaultPort(scheme, port string) bool { + if port == "" { + return true + } + + lowerCaseScheme := strings.ToLower(scheme) + if (lowerCaseScheme == "http" && port == "80") || (lowerCaseScheme == "https" && port == "443") { + return true + } + return false } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go index 1323af9007b..e36e468b7c6 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go @@ -16,6 +16,24 @@ func (noBody) Read([]byte) (int, error) { return 0, io.EOF } func (noBody) Close() error { return nil } func (noBody) WriteTo(io.Writer) (int64, error) { return 0, nil } -// Is an empty reader that will trigger the Go HTTP client to not include +// NoBody is an empty reader that will trigger the Go HTTP client to not include // and body in the HTTP request. -var noBodyReader = noBody{} +var NoBody = noBody{} + +// ResetBody rewinds the request body back to its starting position, and +// sets the HTTP Request body reference. When the body is read prior +// to being sent in the HTTP request it will need to be rewound. +// +// ResetBody will automatically be called by the SDK's build handler, but if +// the request is being used directly ResetBody must be called before the request +// is Sent. SetStringBody, SetBufferBody, and SetReaderBody will automatically +// call ResetBody. +func (r *Request) ResetBody() { + body, err := r.getNextRequestBody() + if err != nil { + r.Error = err + return + } + + r.HTTPRequest.Body = body +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go index 8b963f4de27..de1292f45a2 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go @@ -2,8 +2,35 @@ package request -import "net/http" +import ( + "net/http" -// Is a http.NoBody reader instructing Go HTTP client to not include + "github.com/aws/aws-sdk-go/aws/awserr" +) + +// NoBody is a http.NoBody reader instructing Go HTTP client to not include // and body in the HTTP request. -var noBodyReader = http.NoBody +var NoBody = http.NoBody + +// ResetBody rewinds the request body back to its starting position, and +// sets the HTTP Request body reference. When the body is read prior +// to being sent in the HTTP request it will need to be rewound. +// +// ResetBody will automatically be called by the SDK's build handler, but if +// the request is being used directly ResetBody must be called before the request +// is Sent. SetStringBody, SetBufferBody, and SetReaderBody will automatically +// call ResetBody. +// +// Will also set the Go 1.8's http.Request.GetBody member to allow retrying +// PUT/POST redirects. +func (r *Request) ResetBody() { + body, err := r.getNextRequestBody() + if err != nil { + r.Error = awserr.New(ErrCodeSerialization, + "failed to reset request body", err) + return + } + + r.HTTPRequest.Body = body + r.HTTPRequest.GetBody = r.getNextRequestBody +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go new file mode 100644 index 00000000000..a7365cd1e46 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go @@ -0,0 +1,14 @@ +// +build go1.7 + +package request + +import "github.com/aws/aws-sdk-go/aws" + +// setContext updates the Request to use the passed in context for cancellation. +// Context will also be used for request retry delay. +// +// Creates shallow copy of the http.Request with the WithContext method. +func setRequestContext(r *Request, ctx aws.Context) { + r.context = ctx + r.HTTPRequest = r.HTTPRequest.WithContext(ctx) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go new file mode 100644 index 00000000000..307fa0705be --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go @@ -0,0 +1,14 @@ +// +build !go1.7 + +package request + +import "github.com/aws/aws-sdk-go/aws" + +// setContext updates the Request to use the passed in context for cancellation. +// Context will also be used for request retry delay. +// +// Creates shallow copy of the http.Request with the WithContext method. +func setRequestContext(r *Request, ctx aws.Context) { + r.context = ctx + r.HTTPRequest.Cancel = ctx.Done() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go index 2939ec473f2..64784e16f3d 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go @@ -2,29 +2,140 @@ package request import ( "reflect" + "sync/atomic" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awsutil" ) -//type Paginater interface { -// HasNextPage() bool -// NextPage() *Request -// EachPage(fn func(data interface{}, isLastPage bool) (shouldContinue bool)) error -//} +// A Pagination provides paginating of SDK API operations which are paginatable. +// Generally you should not use this type directly, but use the "Pages" API +// operations method to automatically perform pagination for you. Such as, +// "S3.ListObjectsPages", and "S3.ListObjectsPagesWithContext" methods. +// +// Pagination differs from a Paginator type in that pagination is the type that +// does the pagination between API operations, and Paginator defines the +// configuration that will be used per page request. +// +// for p.Next() { +// data := p.Page().(*s3.ListObjectsOutput) +// // process the page's data +// // ... +// // break out of loop to stop fetching additional pages +// } +// +// return p.Err() +// +// See service client API operation Pages methods for examples how the SDK will +// use the Pagination type. +type Pagination struct { + // Function to return a Request value for each pagination request. + // Any configuration or handlers that need to be applied to the request + // prior to getting the next page should be done here before the request + // returned. + // + // NewRequest should always be built from the same API operations. It is + // undefined if different API operations are returned on subsequent calls. + NewRequest func() (*Request, error) + // EndPageOnSameToken, when enabled, will allow the paginator to stop on + // token that are the same as its previous tokens. + EndPageOnSameToken bool -// HasNextPage returns true if this request has more pages of data available. -func (r *Request) HasNextPage() bool { - return len(r.nextPageTokens()) > 0 + started bool + prevTokens []interface{} + nextTokens []interface{} + + err error + curPage interface{} +} + +// HasNextPage will return true if Pagination is able to determine that the API +// operation has additional pages. False will be returned if there are no more +// pages remaining. +// +// Will always return true if Next has not been called yet. +func (p *Pagination) HasNextPage() bool { + if !p.started { + return true + } + + hasNextPage := len(p.nextTokens) != 0 + if p.EndPageOnSameToken { + return hasNextPage && !awsutil.DeepEqual(p.nextTokens, p.prevTokens) + } + return hasNextPage +} + +// Err returns the error Pagination encountered when retrieving the next page. +func (p *Pagination) Err() error { + return p.err +} + +// Page returns the current page. Page should only be called after a successful +// call to Next. It is undefined what Page will return if Page is called after +// Next returns false. +func (p *Pagination) Page() interface{} { + return p.curPage +} + +// Next will attempt to retrieve the next page for the API operation. When a page +// is retrieved true will be returned. If the page cannot be retrieved, or there +// are no more pages false will be returned. +// +// Use the Page method to retrieve the current page data. The data will need +// to be cast to the API operation's output type. +// +// Use the Err method to determine if an error occurred if Page returns false. +func (p *Pagination) Next() bool { + if !p.HasNextPage() { + return false + } + + req, err := p.NewRequest() + if err != nil { + p.err = err + return false + } + + if p.started { + for i, intok := range req.Operation.InputTokens { + awsutil.SetValueAtPath(req.Params, intok, p.nextTokens[i]) + } + } + p.started = true + + err = req.Send() + if err != nil { + p.err = err + return false + } + + p.prevTokens = p.nextTokens + p.nextTokens = req.nextPageTokens() + p.curPage = req.Data + + return true +} + +// A Paginator is the configuration data that defines how an API operation +// should be paginated. This type is used by the API service models to define +// the generated pagination config for service APIs. +// +// The Pagination type is what provides iterating between pages of an API. It +// is only used to store the token metadata the SDK should use for performing +// pagination. +type Paginator struct { + InputTokens []string + OutputTokens []string + LimitToken string + TruncationToken string } -// nextPageTokens returns the tokens to use when asking for the next page of -// data. +// nextPageTokens returns the tokens to use when asking for the next page of data. func (r *Request) nextPageTokens() []interface{} { if r.Operation.Paginator == nil { return nil } - if r.Operation.TruncationToken != "" { tr, _ := awsutil.ValuesAtPath(r.Data, r.Operation.TruncationToken) if len(tr) == 0 { @@ -37,7 +148,7 @@ func (r *Request) nextPageTokens() []interface{} { return nil } case bool: - if v == false { + if !v { return nil } } @@ -46,13 +157,28 @@ func (r *Request) nextPageTokens() []interface{} { tokens := []interface{}{} tokenAdded := false for _, outToken := range r.Operation.OutputTokens { - v, _ := awsutil.ValuesAtPath(r.Data, outToken) - if len(v) > 0 { - tokens = append(tokens, v[0]) - tokenAdded = true - } else { + vs, _ := awsutil.ValuesAtPath(r.Data, outToken) + if len(vs) == 0 { tokens = append(tokens, nil) + continue } + v := vs[0] + + switch tv := v.(type) { + case *string: + if len(aws.StringValue(tv)) == 0 { + tokens = append(tokens, nil) + continue + } + case string: + if len(tv) == 0 { + tokens = append(tokens, nil) + continue + } + } + + tokenAdded = true + tokens = append(tokens, v) } if !tokenAdded { return nil @@ -61,9 +187,40 @@ func (r *Request) nextPageTokens() []interface{} { return tokens } +// Ensure a deprecated item is only logged once instead of each time its used. +func logDeprecatedf(logger aws.Logger, flag *int32, msg string) { + if logger == nil { + return + } + if atomic.CompareAndSwapInt32(flag, 0, 1) { + logger.Log(msg) + } +} + +var ( + logDeprecatedHasNextPage int32 + logDeprecatedNextPage int32 + logDeprecatedEachPage int32 +) + +// HasNextPage returns true if this request has more pages of data available. +// +// Deprecated Use Pagination type for configurable pagination of API operations +func (r *Request) HasNextPage() bool { + logDeprecatedf(r.Config.Logger, &logDeprecatedHasNextPage, + "Request.HasNextPage deprecated. Use Pagination type for configurable pagination of API operations") + + return len(r.nextPageTokens()) > 0 +} + // NextPage returns a new Request that can be executed to return the next // page of result data. Call .Send() on this request to execute it. +// +// Deprecated Use Pagination type for configurable pagination of API operations func (r *Request) NextPage() *Request { + logDeprecatedf(r.Config.Logger, &logDeprecatedNextPage, + "Request.NextPage deprecated. Use Pagination type for configurable pagination of API operations") + tokens := r.nextPageTokens() if len(tokens) == 0 { return nil @@ -90,7 +247,12 @@ func (r *Request) NextPage() *Request { // as the structure "T". The lastPage value represents whether the page is // the last page of data or not. The return value of this function should // return true to keep iterating or false to stop. +// +// Deprecated Use Pagination type for configurable pagination of API operations func (r *Request) EachPage(fn func(data interface{}, isLastPage bool) (shouldContinue bool)) error { + logDeprecatedf(r.Config.Logger, &logDeprecatedEachPage, + "Request.EachPage deprecated. Use Pagination type for configurable pagination of API operations") + for page := r; page != nil; page = page.NextPage() { if err := page.Send(); err != nil { return err diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go index ebd60ccc4fb..8015acc67eb 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go @@ -1,33 +1,84 @@ package request import ( + "net" + "net/url" + "strings" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" ) -// Retryer is an interface to control retry logic for a given service. -// The default implementation used by most services is the service.DefaultRetryer -// structure, which contains basic retry logic using exponential backoff. +// Retryer provides the interface drive the SDK's request retry behavior. The +// Retryer implementation is responsible for implementing exponential backoff, +// and determine if a request API error should be retried. +// +// client.DefaultRetryer is the SDK's default implementation of the Retryer. It +// uses the which uses the Request.IsErrorRetryable and Request.IsErrorThrottle +// methods to determine if the request is retried. type Retryer interface { + // RetryRules return the retry delay that should be used by the SDK before + // making another request attempt for the failed request. RetryRules(*Request) time.Duration + + // ShouldRetry returns if the failed request is retryable. + // + // Implementations may consider request attempt count when determining if a + // request is retryable, but the SDK will use MaxRetries to limit the + // number of attempts a request are made. ShouldRetry(*Request) bool + + // MaxRetries is the number of times a request may be retried before + // failing. MaxRetries() int } -// WithRetryer sets a config Retryer value to the given Config returning it -// for chaining. +// WithRetryer sets a Retryer value to the given Config returning the Config +// value for chaining. The value must not be nil. func WithRetryer(cfg *aws.Config, retryer Retryer) *aws.Config { + if retryer == nil { + if cfg.Logger != nil { + cfg.Logger.Log("ERROR: Request.WithRetryer called with nil retryer. Replacing with retry disabled Retryer.") + } + retryer = noOpRetryer{} + } cfg.Retryer = retryer return cfg + +} + +// noOpRetryer is a internal no op retryer used when a request is created +// without a retryer. +// +// Provides a retryer that performs no retries. +// It should be used when we do not want retries to be performed. +type noOpRetryer struct{} + +// MaxRetries returns the number of maximum returns the service will use to make +// an individual API; For NoOpRetryer the MaxRetries will always be zero. +func (d noOpRetryer) MaxRetries() int { + return 0 +} + +// ShouldRetry will always return false for NoOpRetryer, as it should never retry. +func (d noOpRetryer) ShouldRetry(_ *Request) bool { + return false +} + +// RetryRules returns the delay duration before retrying this request again; +// since NoOpRetryer does not retry, RetryRules always returns 0. +func (d noOpRetryer) RetryRules(_ *Request) time.Duration { + return 0 } // retryableCodes is a collection of service response codes which are retry-able // without any further action. var retryableCodes = map[string]struct{}{ - "RequestError": {}, - "RequestTimeout": {}, + "RequestError": {}, + "RequestTimeout": {}, + ErrCodeResponseTimeout: {}, + "RequestTimeoutException": {}, // Glacier's flavor of RequestTimeout } var throttleCodes = map[string]struct{}{ @@ -36,9 +87,10 @@ var throttleCodes = map[string]struct{}{ "ThrottlingException": {}, "RequestLimitExceeded": {}, "RequestThrottled": {}, - "LimitExceededException": {}, // Deleting 10+ DynamoDb tables at once + "RequestThrottledException": {}, "TooManyRequestsException": {}, // Lambda functions "PriorRequestNotComplete": {}, // Route53 + "TransactionInProgressException": {}, } // credsExpiredCodes is a collection of error codes which signify the credentials @@ -68,35 +120,188 @@ func isCodeExpiredCreds(code string) bool { return ok } +var validParentCodes = map[string]struct{}{ + ErrCodeSerialization: {}, + ErrCodeRead: {}, +} + +func isNestedErrorRetryable(parentErr awserr.Error) bool { + if parentErr == nil { + return false + } + + if _, ok := validParentCodes[parentErr.Code()]; !ok { + return false + } + + err := parentErr.OrigErr() + if err == nil { + return false + } + + if aerr, ok := err.(awserr.Error); ok { + return isCodeRetryable(aerr.Code()) + } + + if t, ok := err.(temporary); ok { + return t.Temporary() || isErrConnectionReset(err) + } + + return isErrConnectionReset(err) +} + +// IsErrorRetryable returns whether the error is retryable, based on its Code. +// Returns false if error is nil. +func IsErrorRetryable(err error) bool { + if err == nil { + return false + } + return shouldRetryError(err) +} + +type temporary interface { + Temporary() bool +} + +func shouldRetryError(origErr error) bool { + switch err := origErr.(type) { + case awserr.Error: + if err.Code() == CanceledErrorCode { + return false + } + if isNestedErrorRetryable(err) { + return true + } + + origErr := err.OrigErr() + var shouldRetry bool + if origErr != nil { + shouldRetry := shouldRetryError(origErr) + if err.Code() == "RequestError" && !shouldRetry { + return false + } + } + if isCodeRetryable(err.Code()) { + return true + } + return shouldRetry + + case *url.Error: + if strings.Contains(err.Error(), "connection refused") { + // Refused connections should be retried as the service may not yet + // be running on the port. Go TCP dial considers refused + // connections as not temporary. + return true + } + // *url.Error only implements Temporary after golang 1.6 but since + // url.Error only wraps the error: + return shouldRetryError(err.Err) + + case temporary: + if netErr, ok := err.(*net.OpError); ok && netErr.Op == "dial" { + return true + } + // If the error is temporary, we want to allow continuation of the + // retry process + return err.Temporary() || isErrConnectionReset(origErr) + + case nil: + // `awserr.Error.OrigErr()` can be nil, meaning there was an error but + // because we don't know the cause, it is marked as retryable. See + // TestRequest4xxUnretryable for an example. + return true + + default: + switch err.Error() { + case "net/http: request canceled", + "net/http: request canceled while waiting for connection": + // known 1.5 error case when an http request is cancelled + return false + } + // here we don't know the error; so we allow a retry. + return true + } +} + +// IsErrorThrottle returns whether the error is to be throttled based on its code. +// Returns false if error is nil. +func IsErrorThrottle(err error) bool { + if aerr, ok := err.(awserr.Error); ok && aerr != nil { + return isCodeThrottle(aerr.Code()) + } + return false +} + +// IsErrorExpiredCreds returns whether the error code is a credential expiry +// error. Returns false if error is nil. +func IsErrorExpiredCreds(err error) bool { + if aerr, ok := err.(awserr.Error); ok && aerr != nil { + return isCodeExpiredCreds(aerr.Code()) + } + return false +} + // IsErrorRetryable returns whether the error is retryable, based on its Code. // Returns false if the request has no Error set. +// +// Alias for the utility function IsErrorRetryable func (r *Request) IsErrorRetryable() bool { - if r.Error != nil { - if err, ok := r.Error.(awserr.Error); ok { - return isCodeRetryable(err.Code()) + if isErrCode(r.Error, r.RetryErrorCodes) { + return true + } + + // HTTP response status code 501 should not be retried. + // 501 represents Not Implemented which means the request method is not + // supported by the server and cannot be handled. + if r.HTTPResponse != nil { + // HTTP response status code 500 represents internal server error and + // should be retried without any throttle. + if r.HTTPResponse.StatusCode == 500 { + return true } } - return false + return IsErrorRetryable(r.Error) } -// IsErrorThrottle returns whether the error is to be throttled based on its code. -// Returns false if the request has no Error set +// IsErrorThrottle returns whether the error is to be throttled based on its +// code. Returns false if the request has no Error set. +// +// Alias for the utility function IsErrorThrottle func (r *Request) IsErrorThrottle() bool { - if r.Error != nil { - if err, ok := r.Error.(awserr.Error); ok { - return isCodeThrottle(err.Code()) + if isErrCode(r.Error, r.ThrottleErrorCodes) { + return true + } + + if r.HTTPResponse != nil { + switch r.HTTPResponse.StatusCode { + case + 429, // error caused due to too many requests + 502, // Bad Gateway error should be throttled + 503, // caused when service is unavailable + 504: // error occurred due to gateway timeout + return true } } + + return IsErrorThrottle(r.Error) +} + +func isErrCode(err error, codes []string) bool { + if aerr, ok := err.(awserr.Error); ok && aerr != nil { + for _, code := range codes { + if code == aerr.Code() { + return true + } + } + } + return false } // IsErrorExpired returns whether the error code is a credential expiry error. // Returns false if the request has no Error set. +// +// Alias for the utility function IsErrorExpiredCreds func (r *Request) IsErrorExpired() bool { - if r.Error != nil { - if err, ok := r.Error.(awserr.Error); ok { - return isCodeExpiredCreds(err.Code()) - } - } - return false + return IsErrorExpiredCreds(r.Error) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go new file mode 100644 index 00000000000..09a44eb987a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go @@ -0,0 +1,94 @@ +package request + +import ( + "io" + "time" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +var timeoutErr = awserr.New( + ErrCodeResponseTimeout, + "read on body has reached the timeout limit", + nil, +) + +type readResult struct { + n int + err error +} + +// timeoutReadCloser will handle body reads that take too long. +// We will return a ErrReadTimeout error if a timeout occurs. +type timeoutReadCloser struct { + reader io.ReadCloser + duration time.Duration +} + +// Read will spin off a goroutine to call the reader's Read method. We will +// select on the timer's channel or the read's channel. Whoever completes first +// will be returned. +func (r *timeoutReadCloser) Read(b []byte) (int, error) { + timer := time.NewTimer(r.duration) + c := make(chan readResult, 1) + + go func() { + n, err := r.reader.Read(b) + timer.Stop() + c <- readResult{n: n, err: err} + }() + + select { + case data := <-c: + return data.n, data.err + case <-timer.C: + return 0, timeoutErr + } +} + +func (r *timeoutReadCloser) Close() error { + return r.reader.Close() +} + +const ( + // HandlerResponseTimeout is what we use to signify the name of the + // response timeout handler. + HandlerResponseTimeout = "ResponseTimeoutHandler" +) + +// adaptToResponseTimeoutError is a handler that will replace any top level error +// to a ErrCodeResponseTimeout, if its child is that. +func adaptToResponseTimeoutError(req *Request) { + if err, ok := req.Error.(awserr.Error); ok { + aerr, ok := err.OrigErr().(awserr.Error) + if ok && aerr.Code() == ErrCodeResponseTimeout { + req.Error = aerr + } + } +} + +// WithResponseReadTimeout is a request option that will wrap the body in a timeout read closer. +// This will allow for per read timeouts. If a timeout occurred, we will return the +// ErrCodeResponseTimeout. +// +// svc.PutObjectWithContext(ctx, params, request.WithTimeoutReadCloser(30 * time.Second) +func WithResponseReadTimeout(duration time.Duration) Option { + return func(r *Request) { + + var timeoutHandler = NamedHandler{ + HandlerResponseTimeout, + func(req *Request) { + req.HTTPResponse.Body = &timeoutReadCloser{ + reader: req.HTTPResponse.Body, + duration: duration, + } + }} + + // remove the handler so we are not stomping over any new durations. + r.Handlers.Send.RemoveByName(HandlerResponseTimeout) + r.Handlers.Send.PushBackNamed(timeoutHandler) + + r.Handlers.Unmarshal.PushBack(adaptToResponseTimeoutError) + r.Handlers.UnmarshalError.PushBack(adaptToResponseTimeoutError) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go index 2520286b75d..8630683f317 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/validation.go @@ -17,6 +17,12 @@ const ( ParamMinValueErrCode = "ParamMinValueError" // ParamMinLenErrCode is the error code for fields without enough elements. ParamMinLenErrCode = "ParamMinLenError" + // ParamMaxLenErrCode is the error code for value being too long. + ParamMaxLenErrCode = "ParamMaxLenError" + + // ParamFormatErrCode is the error code for a field with invalid + // format or characters. + ParamFormatErrCode = "ParamFormatInvalidError" ) // Validator provides a way for types to perform validation logic on their @@ -220,7 +226,7 @@ type ErrParamMinLen struct { func NewErrParamMinLen(field string, min int) *ErrParamMinLen { return &ErrParamMinLen{ errInvalidParam: errInvalidParam{ - code: ParamMinValueErrCode, + code: ParamMinLenErrCode, field: field, msg: fmt.Sprintf("minimum field size of %v", min), }, @@ -232,3 +238,49 @@ func NewErrParamMinLen(field string, min int) *ErrParamMinLen { func (e *ErrParamMinLen) MinLen() int { return e.min } + +// An ErrParamMaxLen represents a maximum length parameter error. +type ErrParamMaxLen struct { + errInvalidParam + max int +} + +// NewErrParamMaxLen creates a new maximum length parameter error. +func NewErrParamMaxLen(field string, max int, value string) *ErrParamMaxLen { + return &ErrParamMaxLen{ + errInvalidParam: errInvalidParam{ + code: ParamMaxLenErrCode, + field: field, + msg: fmt.Sprintf("maximum size of %v, %v", max, value), + }, + max: max, + } +} + +// MaxLen returns the field's required minimum length. +func (e *ErrParamMaxLen) MaxLen() int { + return e.max +} + +// An ErrParamFormat represents a invalid format parameter error. +type ErrParamFormat struct { + errInvalidParam + format string +} + +// NewErrParamFormat creates a new invalid format parameter error. +func NewErrParamFormat(field string, format, value string) *ErrParamFormat { + return &ErrParamFormat{ + errInvalidParam: errInvalidParam{ + code: ParamFormatErrCode, + field: field, + msg: fmt.Sprintf("format %v, %v", format, value), + }, + format: format, + } +} + +// Format returns the field's required format. +func (e *ErrParamFormat) Format() string { + return e.format +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go new file mode 100644 index 00000000000..4601f883cc5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go @@ -0,0 +1,295 @@ +package request + +import ( + "fmt" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/awsutil" +) + +// WaiterResourceNotReadyErrorCode is the error code returned by a waiter when +// the waiter's max attempts have been exhausted. +const WaiterResourceNotReadyErrorCode = "ResourceNotReady" + +// A WaiterOption is a function that will update the Waiter value's fields to +// configure the waiter. +type WaiterOption func(*Waiter) + +// WithWaiterMaxAttempts returns the maximum number of times the waiter should +// attempt to check the resource for the target state. +func WithWaiterMaxAttempts(max int) WaiterOption { + return func(w *Waiter) { + w.MaxAttempts = max + } +} + +// WaiterDelay will return a delay the waiter should pause between attempts to +// check the resource state. The passed in attempt is the number of times the +// Waiter has checked the resource state. +// +// Attempt is the number of attempts the Waiter has made checking the resource +// state. +type WaiterDelay func(attempt int) time.Duration + +// ConstantWaiterDelay returns a WaiterDelay that will always return a constant +// delay the waiter should use between attempts. It ignores the number of +// attempts made. +func ConstantWaiterDelay(delay time.Duration) WaiterDelay { + return func(attempt int) time.Duration { + return delay + } +} + +// WithWaiterDelay will set the Waiter to use the WaiterDelay passed in. +func WithWaiterDelay(delayer WaiterDelay) WaiterOption { + return func(w *Waiter) { + w.Delay = delayer + } +} + +// WithWaiterLogger returns a waiter option to set the logger a waiter +// should use to log warnings and errors to. +func WithWaiterLogger(logger aws.Logger) WaiterOption { + return func(w *Waiter) { + w.Logger = logger + } +} + +// WithWaiterRequestOptions returns a waiter option setting the request +// options for each request the waiter makes. Appends to waiter's request +// options already set. +func WithWaiterRequestOptions(opts ...Option) WaiterOption { + return func(w *Waiter) { + w.RequestOptions = append(w.RequestOptions, opts...) + } +} + +// A Waiter provides the functionality to perform a blocking call which will +// wait for a resource state to be satisfied by a service. +// +// This type should not be used directly. The API operations provided in the +// service packages prefixed with "WaitUntil" should be used instead. +type Waiter struct { + Name string + Acceptors []WaiterAcceptor + Logger aws.Logger + + MaxAttempts int + Delay WaiterDelay + + RequestOptions []Option + NewRequest func([]Option) (*Request, error) + SleepWithContext func(aws.Context, time.Duration) error +} + +// ApplyOptions updates the waiter with the list of waiter options provided. +func (w *Waiter) ApplyOptions(opts ...WaiterOption) { + for _, fn := range opts { + fn(w) + } +} + +// WaiterState are states the waiter uses based on WaiterAcceptor definitions +// to identify if the resource state the waiter is waiting on has occurred. +type WaiterState int + +// String returns the string representation of the waiter state. +func (s WaiterState) String() string { + switch s { + case SuccessWaiterState: + return "success" + case FailureWaiterState: + return "failure" + case RetryWaiterState: + return "retry" + default: + return "unknown waiter state" + } +} + +// States the waiter acceptors will use to identify target resource states. +const ( + SuccessWaiterState WaiterState = iota // waiter successful + FailureWaiterState // waiter failed + RetryWaiterState // waiter needs to be retried +) + +// WaiterMatchMode is the mode that the waiter will use to match the WaiterAcceptor +// definition's Expected attribute. +type WaiterMatchMode int + +// Modes the waiter will use when inspecting API response to identify target +// resource states. +const ( + PathAllWaiterMatch WaiterMatchMode = iota // match on all paths + PathWaiterMatch // match on specific path + PathAnyWaiterMatch // match on any path + PathListWaiterMatch // match on list of paths + StatusWaiterMatch // match on status code + ErrorWaiterMatch // match on error +) + +// String returns the string representation of the waiter match mode. +func (m WaiterMatchMode) String() string { + switch m { + case PathAllWaiterMatch: + return "pathAll" + case PathWaiterMatch: + return "path" + case PathAnyWaiterMatch: + return "pathAny" + case PathListWaiterMatch: + return "pathList" + case StatusWaiterMatch: + return "status" + case ErrorWaiterMatch: + return "error" + default: + return "unknown waiter match mode" + } +} + +// WaitWithContext will make requests for the API operation using NewRequest to +// build API requests. The request's response will be compared against the +// Waiter's Acceptors to determine the successful state of the resource the +// waiter is inspecting. +// +// The passed in context must not be nil. If it is nil a panic will occur. The +// Context will be used to cancel the waiter's pending requests and retry delays. +// Use aws.BackgroundContext if no context is available. +// +// The waiter will continue until the target state defined by the Acceptors, +// or the max attempts expires. +// +// Will return the WaiterResourceNotReadyErrorCode error code if the waiter's +// retryer ShouldRetry returns false. This normally will happen when the max +// wait attempts expires. +func (w Waiter) WaitWithContext(ctx aws.Context) error { + + for attempt := 1; ; attempt++ { + req, err := w.NewRequest(w.RequestOptions) + if err != nil { + waiterLogf(w.Logger, "unable to create request %v", err) + return err + } + req.Handlers.Build.PushBack(MakeAddToUserAgentFreeFormHandler("Waiter")) + err = req.Send() + + // See if any of the acceptors match the request's response, or error + for _, a := range w.Acceptors { + if matched, matchErr := a.match(w.Name, w.Logger, req, err); matched { + return matchErr + } + } + + // The Waiter should only check the resource state MaxAttempts times + // This is here instead of in the for loop above to prevent delaying + // unnecessary when the waiter will not retry. + if attempt == w.MaxAttempts { + break + } + + // Delay to wait before inspecting the resource again + delay := w.Delay(attempt) + if sleepFn := req.Config.SleepDelay; sleepFn != nil { + // Support SleepDelay for backwards compatibility and testing + sleepFn(delay) + } else { + sleepCtxFn := w.SleepWithContext + if sleepCtxFn == nil { + sleepCtxFn = aws.SleepWithContext + } + + if err := sleepCtxFn(ctx, delay); err != nil { + return awserr.New(CanceledErrorCode, "waiter context canceled", err) + } + } + } + + return awserr.New(WaiterResourceNotReadyErrorCode, "exceeded wait attempts", nil) +} + +// A WaiterAcceptor provides the information needed to wait for an API operation +// to complete. +type WaiterAcceptor struct { + State WaiterState + Matcher WaiterMatchMode + Argument string + Expected interface{} +} + +// match returns if the acceptor found a match with the passed in request +// or error. True is returned if the acceptor made a match, error is returned +// if there was an error attempting to perform the match. +func (a *WaiterAcceptor) match(name string, l aws.Logger, req *Request, err error) (bool, error) { + result := false + var vals []interface{} + + switch a.Matcher { + case PathAllWaiterMatch, PathWaiterMatch: + // Require all matches to be equal for result to match + vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) + if len(vals) == 0 { + break + } + result = true + for _, val := range vals { + if !awsutil.DeepEqual(val, a.Expected) { + result = false + break + } + } + case PathAnyWaiterMatch: + // Only a single match needs to equal for the result to match + vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) + for _, val := range vals { + if awsutil.DeepEqual(val, a.Expected) { + result = true + break + } + } + case PathListWaiterMatch: + // ignored matcher + case StatusWaiterMatch: + s := a.Expected.(int) + result = s == req.HTTPResponse.StatusCode + case ErrorWaiterMatch: + if aerr, ok := err.(awserr.Error); ok { + result = aerr.Code() == a.Expected.(string) + } + default: + waiterLogf(l, "WARNING: Waiter %s encountered unexpected matcher: %s", + name, a.Matcher) + } + + if !result { + // If there was no matching result found there is nothing more to do + // for this response, retry the request. + return false, nil + } + + switch a.State { + case SuccessWaiterState: + // waiter completed + return true, nil + case FailureWaiterState: + // Waiter failure state triggered + return true, awserr.New(WaiterResourceNotReadyErrorCode, + "failed waiting for successful resource state", err) + case RetryWaiterState: + // clear the error and retry the operation + return false, nil + default: + waiterLogf(l, "WARNING: Waiter %s encountered unexpected state: %s", + name, a.State) + return false, nil + } +} + +func waiterLogf(logger aws.Logger, msg string, args ...interface{}) { + if logger != nil { + logger.Log(fmt.Sprintf(msg, args...)) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go new file mode 100644 index 00000000000..ea9ebb6f6a2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go @@ -0,0 +1,26 @@ +// +build go1.7 + +package session + +import ( + "net" + "net/http" + "time" +) + +// Transport that should be used when a custom CA bundle is specified with the +// SDK. +func getCABundleTransport() *http.Transport { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + DualStack: true, + }).DialContext, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go new file mode 100644 index 00000000000..fec39dfc126 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go @@ -0,0 +1,22 @@ +// +build !go1.6,go1.5 + +package session + +import ( + "net" + "net/http" + "time" +) + +// Transport that should be used when a custom CA bundle is specified with the +// SDK. +func getCABundleTransport() *http.Transport { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go new file mode 100644 index 00000000000..1c5a5391e65 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go @@ -0,0 +1,23 @@ +// +build !go1.7,go1.6 + +package session + +import ( + "net" + "net/http" + "time" +) + +// Transport that should be used when a custom CA bundle is specified with the +// SDK. +func getCABundleTransport() *http.Transport { + return &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go new file mode 100644 index 00000000000..cc64e24f1d5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go @@ -0,0 +1,259 @@ +package session + +import ( + "fmt" + "os" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/credentials/processcreds" + "github.com/aws/aws-sdk-go/aws/credentials/stscreds" + "github.com/aws/aws-sdk-go/aws/defaults" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/shareddefaults" +) + +func resolveCredentials(cfg *aws.Config, + envCfg envConfig, sharedCfg sharedConfig, + handlers request.Handlers, + sessOpts Options, +) (*credentials.Credentials, error) { + + switch { + case len(sessOpts.Profile) != 0: + // User explicitly provided an Profile in the session's configuration + // so load that profile from shared config first. + // Github(aws/aws-sdk-go#2727) + return resolveCredsFromProfile(cfg, envCfg, sharedCfg, handlers, sessOpts) + + case envCfg.Creds.HasKeys(): + // Environment credentials + return credentials.NewStaticCredentialsFromCreds(envCfg.Creds), nil + + case len(envCfg.WebIdentityTokenFilePath) != 0: + // Web identity token from environment, RoleARN required to also be + // set. + return assumeWebIdentity(cfg, handlers, + envCfg.WebIdentityTokenFilePath, + envCfg.RoleARN, + envCfg.RoleSessionName, + ) + + default: + // Fallback to the "default" credential resolution chain. + return resolveCredsFromProfile(cfg, envCfg, sharedCfg, handlers, sessOpts) + } +} + +// WebIdentityEmptyRoleARNErr will occur if 'AWS_WEB_IDENTITY_TOKEN_FILE' was set but +// 'AWS_ROLE_ARN' was not set. +var WebIdentityEmptyRoleARNErr = awserr.New(stscreds.ErrCodeWebIdentity, "role ARN is not set", nil) + +// WebIdentityEmptyTokenFilePathErr will occur if 'AWS_ROLE_ARN' was set but +// 'AWS_WEB_IDENTITY_TOKEN_FILE' was not set. +var WebIdentityEmptyTokenFilePathErr = awserr.New(stscreds.ErrCodeWebIdentity, "token file path is not set", nil) + +func assumeWebIdentity(cfg *aws.Config, handlers request.Handlers, + filepath string, + roleARN, sessionName string, +) (*credentials.Credentials, error) { + + if len(filepath) == 0 { + return nil, WebIdentityEmptyTokenFilePathErr + } + + if len(roleARN) == 0 { + return nil, WebIdentityEmptyRoleARNErr + } + + creds := stscreds.NewWebIdentityCredentials( + &Session{ + Config: cfg, + Handlers: handlers.Copy(), + }, + roleARN, + sessionName, + filepath, + ) + + return creds, nil +} + +func resolveCredsFromProfile(cfg *aws.Config, + envCfg envConfig, sharedCfg sharedConfig, + handlers request.Handlers, + sessOpts Options, +) (creds *credentials.Credentials, err error) { + + switch { + case sharedCfg.SourceProfile != nil: + // Assume IAM role with credentials source from a different profile. + creds, err = resolveCredsFromProfile(cfg, envCfg, + *sharedCfg.SourceProfile, handlers, sessOpts, + ) + + case sharedCfg.Creds.HasKeys(): + // Static Credentials from Shared Config/Credentials file. + creds = credentials.NewStaticCredentialsFromCreds( + sharedCfg.Creds, + ) + + case len(sharedCfg.CredentialProcess) != 0: + // Get credentials from CredentialProcess + creds = processcreds.NewCredentials(sharedCfg.CredentialProcess) + + case len(sharedCfg.CredentialSource) != 0: + creds, err = resolveCredsFromSource(cfg, envCfg, + sharedCfg, handlers, sessOpts, + ) + + case len(sharedCfg.WebIdentityTokenFile) != 0: + // Credentials from Assume Web Identity token require an IAM Role, and + // that roll will be assumed. May be wrapped with another assume role + // via SourceProfile. + return assumeWebIdentity(cfg, handlers, + sharedCfg.WebIdentityTokenFile, + sharedCfg.RoleARN, + sharedCfg.RoleSessionName, + ) + + default: + // Fallback to default credentials provider, include mock errors for + // the credential chain so user can identify why credentials failed to + // be retrieved. + creds = credentials.NewCredentials(&credentials.ChainProvider{ + VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors), + Providers: []credentials.Provider{ + &credProviderError{ + Err: awserr.New("EnvAccessKeyNotFound", + "failed to find credentials in the environment.", nil), + }, + &credProviderError{ + Err: awserr.New("SharedCredsLoad", + fmt.Sprintf("failed to load profile, %s.", envCfg.Profile), nil), + }, + defaults.RemoteCredProvider(*cfg, handlers), + }, + }) + } + if err != nil { + return nil, err + } + + if len(sharedCfg.RoleARN) > 0 { + cfgCp := *cfg + cfgCp.Credentials = creds + return credsFromAssumeRole(cfgCp, handlers, sharedCfg, sessOpts) + } + + return creds, nil +} + +// valid credential source values +const ( + credSourceEc2Metadata = "Ec2InstanceMetadata" + credSourceEnvironment = "Environment" + credSourceECSContainer = "EcsContainer" +) + +func resolveCredsFromSource(cfg *aws.Config, + envCfg envConfig, sharedCfg sharedConfig, + handlers request.Handlers, + sessOpts Options, +) (creds *credentials.Credentials, err error) { + + switch sharedCfg.CredentialSource { + case credSourceEc2Metadata: + p := defaults.RemoteCredProvider(*cfg, handlers) + creds = credentials.NewCredentials(p) + + case credSourceEnvironment: + creds = credentials.NewStaticCredentialsFromCreds(envCfg.Creds) + + case credSourceECSContainer: + if len(os.Getenv(shareddefaults.ECSCredsProviderEnvVar)) == 0 { + return nil, ErrSharedConfigECSContainerEnvVarEmpty + } + + p := defaults.RemoteCredProvider(*cfg, handlers) + creds = credentials.NewCredentials(p) + + default: + return nil, ErrSharedConfigInvalidCredSource + } + + return creds, nil +} + +func credsFromAssumeRole(cfg aws.Config, + handlers request.Handlers, + sharedCfg sharedConfig, + sessOpts Options, +) (*credentials.Credentials, error) { + + if len(sharedCfg.MFASerial) != 0 && sessOpts.AssumeRoleTokenProvider == nil { + // AssumeRole Token provider is required if doing Assume Role + // with MFA. + return nil, AssumeRoleTokenProviderNotSetError{} + } + + return stscreds.NewCredentials( + &Session{ + Config: &cfg, + Handlers: handlers.Copy(), + }, + sharedCfg.RoleARN, + func(opt *stscreds.AssumeRoleProvider) { + opt.RoleSessionName = sharedCfg.RoleSessionName + opt.Duration = sessOpts.AssumeRoleDuration + + // Assume role with external ID + if len(sharedCfg.ExternalID) > 0 { + opt.ExternalID = aws.String(sharedCfg.ExternalID) + } + + // Assume role with MFA + if len(sharedCfg.MFASerial) > 0 { + opt.SerialNumber = aws.String(sharedCfg.MFASerial) + opt.TokenProvider = sessOpts.AssumeRoleTokenProvider + } + }, + ), nil +} + +// AssumeRoleTokenProviderNotSetError is an error returned when creating a +// session when the MFAToken option is not set when shared config is configured +// load assume a role with an MFA token. +type AssumeRoleTokenProviderNotSetError struct{} + +// Code is the short id of the error. +func (e AssumeRoleTokenProviderNotSetError) Code() string { + return "AssumeRoleTokenProviderNotSetError" +} + +// Message is the description of the error +func (e AssumeRoleTokenProviderNotSetError) Message() string { + return fmt.Sprintf("assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.") +} + +// OrigErr is the underlying error that caused the failure. +func (e AssumeRoleTokenProviderNotSetError) OrigErr() error { + return nil +} + +// Error satisfies the error interface. +func (e AssumeRoleTokenProviderNotSetError) Error() string { + return awserr.SprintError(e.Code(), e.Message(), "", nil) +} + +type credProviderError struct { + Err error +} + +func (c credProviderError) Retrieve() (credentials.Value, error) { + return credentials.Value{}, c.Err +} +func (c credProviderError) IsExpired() bool { + return true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go index d3dc8404ed2..7ec66e7e589 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/doc.go @@ -1,117 +1,109 @@ /* -Package session provides configuration for the SDK's service clients. +Package session provides configuration for the SDK's service clients. Sessions +can be shared across service clients that share the same base configuration. -Sessions can be shared across all service clients that share the same base -configuration. The Session is built from the SDK's default configuration and -request handlers. +Sessions are safe to use concurrently as long as the Session is not being +modified. Sessions should be cached when possible, because creating a new +Session will load all configuration values from the environment, and config +files each time the Session is created. Sharing the Session value across all of +your service clients will ensure the configuration is loaded the fewest number +of times possible. -Sessions should be cached when possible, because creating a new Session will -load all configuration values from the environment, and config files each time -the Session is created. Sharing the Session value across all of your service -clients will ensure the configuration is loaded the fewest number of times possible. +Sessions options from Shared Config -Concurrency +By default NewSession will only load credentials from the shared credentials +file (~/.aws/credentials). If the AWS_SDK_LOAD_CONFIG environment variable is +set to a truthy value the Session will be created from the configuration +values from the shared config (~/.aws/config) and shared credentials +(~/.aws/credentials) files. Using the NewSessionWithOptions with +SharedConfigState set to SharedConfigEnable will create the session as if the +AWS_SDK_LOAD_CONFIG environment variable was set. -Sessions are safe to use concurrently as long as the Session is not being -modified. The SDK will not modify the Session once the Session has been created. -Creating service clients concurrently from a shared Session is safe. +Credential and config loading order -Sessions from Shared Config +The Session will attempt to load configuration and credentials from the +environment, configuration files, and other credential sources. The order +configuration is loaded in is: -Sessions can be created using the method above that will only load the -additional config if the AWS_SDK_LOAD_CONFIG environment variable is set. -Alternatively you can explicitly create a Session with shared config enabled. -To do this you can use NewSessionWithOptions to configure how the Session will -be created. Using the NewSessionWithOptions with SharedConfigState set to -SharedConfigEnabled will create the session as if the AWS_SDK_LOAD_CONFIG -environment variable was set. + * Environment Variables + * Shared Credentials file + * Shared Configuration file (if SharedConfig is enabled) + * EC2 Instance Metadata (credentials only) -Creating Sessions +The Environment variables for credentials will have precedence over shared +config even if SharedConfig is enabled. To override this behavior, and use +shared config credentials instead specify the session.Options.Profile, (e.g. +when using credential_source=Environment to assume a role). -When creating Sessions optional aws.Config values can be passed in that will -override the default, or loaded config values the Session is being created -with. This allows you to provide additional, or case based, configuration -as needed. + sess, err := session.NewSessionWithOptions(session.Options{ + Profile: "myProfile", + }) -By default NewSession will only load credentials from the shared credentials -file (~/.aws/credentials). If the AWS_SDK_LOAD_CONFIG environment variable is -set to a truthy value the Session will be created from the configuration -values from the shared config (~/.aws/config) and shared credentials -(~/.aws/credentials) files. See the section Sessions from Shared Config for -more information. +Creating Sessions -Create a Session with the default config and request handlers. With credentials -region, and profile loaded from the environment and shared config automatically. -Requires the AWS_PROFILE to be set, or "default" is used. +Creating a Session without additional options will load credentials region, and +profile loaded from the environment and shared config automatically. See, +"Environment Variables" section for information on environment variables used +by Session. // Create Session sess, err := session.NewSession() - // Create a Session with a custom region - sess, err := session.NewSession(&aws.Config{Region: aws.String("us-east-1")}) - - // Create a S3 client instance from a session - sess, err := session.NewSession() - if err != nil { - // Handle Session creation error - } - svc := s3.New(sess) -Create Session With Option Overrides +When creating Sessions optional aws.Config values can be passed in that will +override the default, or loaded, config values the Session is being created +with. This allows you to provide additional, or case based, configuration +as needed. -In addition to NewSession, Sessions can be created using NewSessionWithOptions. -This func allows you to control and override how the Session will be created -through code instead of being driven by environment variables only. + // Create a Session with a custom region + sess, err := session.NewSession(&aws.Config{ + Region: aws.String("us-west-2"), + }) -Use NewSessionWithOptions when you want to provide the config profile, or -override the shared config state (AWS_SDK_LOAD_CONFIG). +Use NewSessionWithOptions to provide additional configuration driving how the +Session's configuration will be loaded. Such as, specifying shared config +profile, or override the shared config state, (AWS_SDK_LOAD_CONFIG). // Equivalent to session.NewSession() - sess, err := session.NewSessionWithOptions(session.Options{}) - - // Specify profile to load for the session's config sess, err := session.NewSessionWithOptions(session.Options{ - Profile: "profile_name", + // Options }) - // Specify profile for config and region for requests sess, err := session.NewSessionWithOptions(session.Options{ - Config: aws.Config{Region: aws.String("us-east-1")}, - Profile: "profile_name", - }) + // Specify profile to load for the session's config + Profile: "profile_name", - // Force enable Shared Config support - sess, err := session.NewSessionWithOptions(session.Options{ - SharedConfigState: SharedConfigEnable, + // Provide SDK Config options, such as Region. + Config: aws.Config{ + Region: aws.String("us-west-2"), + }, + + // Force enable Shared Config support + SharedConfigState: session.SharedConfigEnable, }) Adding Handlers -You can add handlers to a session for processing HTTP requests. All service -clients that use the session inherit the handlers. For example, the following -handler logs every request and its payload made by a service client: +You can add handlers to a session to decorate API operation, (e.g. adding HTTP +headers). All clients that use the Session receive a copy of the Session's +handlers. For example, the following request handler added to the Session logs +every requests made. // Create a session, and add additional handlers for all service // clients created with the Session to inherit. Adds logging handler. - sess, err := session.NewSession() + sess := session.Must(session.NewSession()) + sess.Handlers.Send.PushFront(func(r *request.Request) { // Log every request made and its payload - logger.Println("Request: %s/%s, Payload: %s", + logger.Printf("Request: %s/%s, Params: %s", r.ClientInfo.ServiceName, r.Operation, r.Params) }) -Deprecated "New" function - -The New session function has been deprecated because it does not provide good -way to return errors that occur when loading the configuration files and values. -Because of this, NewSession was created so errors can be retrieved when -creating a session fails. - Shared Config Fields -By default the SDK will only load the shared credentials file's (~/.aws/credentials) -credentials values, and all other config is provided by the environment variables, -SDK defaults, and user provided aws.Config values. +By default the SDK will only load the shared credentials file's +(~/.aws/credentials) credentials values, and all other config is provided by +the environment variables, SDK defaults, and user provided aws.Config values. If the AWS_SDK_LOAD_CONFIG environment variable is set, or SharedConfigEnable option is used to create the Session the full shared config values will be @@ -121,38 +113,50 @@ file (~/.aws/config) and shared credentials file (~/.aws/credentials). Both files have the same format. If both config files are present the configuration from both files will be -read. The Session will be created from configuration values from the shared -credentials file (~/.aws/credentials) over those in the shared credentials -file (~/.aws/config). +read. The Session will be created from configuration values from the shared +credentials file (~/.aws/credentials) over those in the shared config file +(~/.aws/config). -Credentials are the values the SDK should use for authenticating requests with -AWS Services. They arfrom a configuration file will need to include both -aws_access_key_id and aws_secret_access_key must be provided together in the -same file to be considered valid. The values will be ignored if not a complete -group. aws_session_token is an optional field that can be provided if both of -the other two fields are also provided. +Credentials are the values the SDK uses to authenticating requests with AWS +Services. When specified in a file, both aws_access_key_id and +aws_secret_access_key must be provided together in the same file to be +considered valid. They will be ignored if both are not present. +aws_session_token is an optional field that can be provided in addition to the +other two fields. aws_access_key_id = AKID aws_secret_access_key = SECRET aws_session_token = TOKEN -Assume Role values allow you to configure the SDK to assume an IAM role using -a set of credentials provided in a config file via the source_profile field. -Both "role_arn" and "source_profile" are required. The SDK does not support -assuming a role with MFA token Via the Session's constructor. You can use the -stscreds.AssumeRoleProvider credentials provider to specify custom -configuration and support for MFA. + ; region only supported if SharedConfigEnabled. + region = us-east-1 + +Assume Role configuration + +The role_arn field allows you to configure the SDK to assume an IAM role using +a set of credentials from another source. Such as when paired with static +credentials, "profile_source", "credential_process", or "credential_source" +fields. If "role_arn" is provided, a source of credentials must also be +specified, such as "source_profile", "credential_source", or +"credential_process". role_arn = arn:aws:iam:::role/ source_profile = profile_with_creds external_id = 1234 - mfa_serial = not supported! + mfa_serial = role_session_name = session_name -Region is the region the SDK should use for looking up AWS service endpoints -and signing requests. - region = us-east-1 +The SDK supports assuming a role with MFA token. If "mfa_serial" is set, you +must also set the Session Option.AssumeRoleTokenProvider. The Session will fail +to load if the AssumeRoleTokenProvider is not specified. + + sess := session.Must(session.NewSessionWithOptions(session.Options{ + AssumeRoleTokenProvider: stscreds.StdinTokenProvider, + })) + +To setup Assume Role outside of a session see the stscreds.AssumeRoleProvider +documentation. Environment Variables @@ -218,6 +222,24 @@ $HOME/.aws/config on Linux/Unix based systems, and AWS_CONFIG_FILE=$HOME/my_shared_config +Path to a custom Credentials Authority (CA) bundle PEM file that the SDK +will use instead of the default system's root CA bundle. Use this only +if you want to replace the CA bundle the SDK uses for TLS requests. + + AWS_CA_BUNDLE=$HOME/my_custom_ca_bundle + +Enabling this option will attempt to merge the Transport into the SDK's HTTP +client. If the client's Transport is not a http.Transport an error will be +returned. If the Transport's TLS config is set this option will cause the SDK +to overwrite the Transport's TLS config's RootCAs value. If the CA bundle file +contains multiple certificates all of them will be loaded. + +The Session option CustomCABundle is also available when creating sessions +to also enable this feature. CustomCABundle session option field has priority +over the AWS_CA_BUNDLE environment variable, and will be used if both are set. +Setting a custom HTTPClient in the aws.Config options will override this setting. +To use this option and custom HTTP client, the HTTP client needs to be provided +when creating the session. Not the service client. */ package session diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go index d2f0c844811..4092ab8fb7e 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go @@ -1,13 +1,19 @@ package session import ( + "fmt" "os" - "path/filepath" "strconv" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/defaults" + "github.com/aws/aws-sdk-go/aws/endpoints" ) +// EnvProviderName provides a name of the provider when config is loaded from environment. +const EnvProviderName = "EnvConfigCredentials" + // envConfig is a collection of environment values the SDK will read // setup config from. All environment values are optional. But some values // such as credentials require multiple values to be complete or the values @@ -75,9 +81,81 @@ type envConfig struct { // // AWS_CONFIG_FILE=$HOME/my_shared_config SharedConfigFile string + + // Sets the path to a custom Credentials Authority (CA) Bundle PEM file + // that the SDK will use instead of the system's root CA bundle. + // Only use this if you want to configure the SDK to use a custom set + // of CAs. + // + // Enabling this option will attempt to merge the Transport + // into the SDK's HTTP client. If the client's Transport is + // not a http.Transport an error will be returned. If the + // Transport's TLS config is set this option will cause the + // SDK to overwrite the Transport's TLS config's RootCAs value. + // + // Setting a custom HTTPClient in the aws.Config options will override this setting. + // To use this option and custom HTTP client, the HTTP client needs to be provided + // when creating the session. Not the service client. + // + // AWS_CA_BUNDLE=$HOME/my_custom_ca_bundle + CustomCABundle string + + csmEnabled string + CSMEnabled *bool + CSMPort string + CSMHost string + CSMClientID string + + // Enables endpoint discovery via environment variables. + // + // AWS_ENABLE_ENDPOINT_DISCOVERY=true + EnableEndpointDiscovery *bool + enableEndpointDiscovery string + + // Specifies the WebIdentity token the SDK should use to assume a role + // with. + // + // AWS_WEB_IDENTITY_TOKEN_FILE=file_path + WebIdentityTokenFilePath string + + // Specifies the IAM role arn to use when assuming an role. + // + // AWS_ROLE_ARN=role_arn + RoleARN string + + // Specifies the IAM role session name to use when assuming a role. + // + // AWS_ROLE_SESSION_NAME=session_name + RoleSessionName string + + // Specifies the STS Regional Endpoint flag for the SDK to resolve the endpoint + // for a service. + // + // AWS_STS_REGIONAL_ENDPOINTS=regional + // This can take value as `regional` or `legacy` + STSRegionalEndpoint endpoints.STSRegionalEndpoint + + // Specifies the S3 Regional Endpoint flag for the SDK to resolve the + // endpoint for a service. + // + // AWS_S3_US_EAST_1_REGIONAL_ENDPOINT=regional + // This can take value as `regional` or `legacy` + S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint } var ( + csmEnabledEnvKey = []string{ + "AWS_CSM_ENABLED", + } + csmHostEnvKey = []string{ + "AWS_CSM_HOST", + } + csmPortEnvKey = []string{ + "AWS_CSM_PORT", + } + csmClientIDEnvKey = []string{ + "AWS_CSM_CLIENT_ID", + } credAccessEnvKey = []string{ "AWS_ACCESS_KEY_ID", "AWS_ACCESS_KEY", @@ -90,6 +168,10 @@ var ( "AWS_SESSION_TOKEN", } + enableEndpointDiscoveryEnvKey = []string{ + "AWS_ENABLE_ENDPOINT_DISCOVERY", + } + regionEnvKeys = []string{ "AWS_REGION", "AWS_DEFAULT_REGION", // Only read if AWS_SDK_LOAD_CONFIG is also set @@ -98,6 +180,27 @@ var ( "AWS_PROFILE", "AWS_DEFAULT_PROFILE", // Only read if AWS_SDK_LOAD_CONFIG is also set } + sharedCredsFileEnvKey = []string{ + "AWS_SHARED_CREDENTIALS_FILE", + } + sharedConfigFileEnvKey = []string{ + "AWS_CONFIG_FILE", + } + webIdentityTokenFilePathEnvKey = []string{ + "AWS_WEB_IDENTITY_TOKEN_FILE", + } + roleARNEnvKey = []string{ + "AWS_ROLE_ARN", + } + roleSessionNameEnvKey = []string{ + "AWS_ROLE_SESSION_NAME", + } + stsRegionalEndpointKey = []string{ + "AWS_STS_REGIONAL_ENDPOINTS", + } + s3UsEast1RegionalEndpoint = []string{ + "AWS_S3_US_EAST_1_REGIONAL_ENDPOINT", + } ) // loadEnvConfig retrieves the SDK's environment configuration. @@ -106,7 +209,7 @@ var ( // If the environment variable `AWS_SDK_LOAD_CONFIG` is set to a truthy value // the shared SDK config will be loaded in addition to the SDK's specific // configuration values. -func loadEnvConfig() envConfig { +func loadEnvConfig() (envConfig, error) { enableSharedConfig, _ := strconv.ParseBool(os.Getenv("AWS_SDK_LOAD_CONFIG")) return envConfigLoad(enableSharedConfig) } @@ -117,24 +220,42 @@ func loadEnvConfig() envConfig { // Loads the shared configuration in addition to the SDK's specific configuration. // This will load the same values as `loadEnvConfig` if the `AWS_SDK_LOAD_CONFIG` // environment variable is set. -func loadSharedEnvConfig() envConfig { +func loadSharedEnvConfig() (envConfig, error) { return envConfigLoad(true) } -func envConfigLoad(enableSharedConfig bool) envConfig { +func envConfigLoad(enableSharedConfig bool) (envConfig, error) { cfg := envConfig{} cfg.EnableSharedConfig = enableSharedConfig - setFromEnvVal(&cfg.Creds.AccessKeyID, credAccessEnvKey) - setFromEnvVal(&cfg.Creds.SecretAccessKey, credSecretEnvKey) - setFromEnvVal(&cfg.Creds.SessionToken, credSessionEnvKey) + // Static environment credentials + var creds credentials.Value + setFromEnvVal(&creds.AccessKeyID, credAccessEnvKey) + setFromEnvVal(&creds.SecretAccessKey, credSecretEnvKey) + setFromEnvVal(&creds.SessionToken, credSessionEnvKey) + if creds.HasKeys() { + // Require logical grouping of credentials + creds.ProviderName = EnvProviderName + cfg.Creds = creds + } + + // Role Metadata + setFromEnvVal(&cfg.RoleARN, roleARNEnvKey) + setFromEnvVal(&cfg.RoleSessionName, roleSessionNameEnvKey) + + // Web identity environment variables + setFromEnvVal(&cfg.WebIdentityTokenFilePath, webIdentityTokenFilePathEnvKey) + + // CSM environment variables + setFromEnvVal(&cfg.csmEnabled, csmEnabledEnvKey) + setFromEnvVal(&cfg.CSMHost, csmHostEnvKey) + setFromEnvVal(&cfg.CSMPort, csmPortEnvKey) + setFromEnvVal(&cfg.CSMClientID, csmClientIDEnvKey) - // Require logical grouping of credentials - if len(cfg.Creds.AccessKeyID) == 0 || len(cfg.Creds.SecretAccessKey) == 0 { - cfg.Creds = credentials.Value{} - } else { - cfg.Creds.ProviderName = "EnvConfigCredentials" + if len(cfg.csmEnabled) != 0 { + v, _ := strconv.ParseBool(cfg.csmEnabled) + cfg.CSMEnabled = &v } regionKeys := regionEnvKeys @@ -147,42 +268,53 @@ func envConfigLoad(enableSharedConfig bool) envConfig { setFromEnvVal(&cfg.Region, regionKeys) setFromEnvVal(&cfg.Profile, profileKeys) - cfg.SharedCredentialsFile = sharedCredentialsFilename() - cfg.SharedConfigFile = sharedConfigFilename() + // endpoint discovery is in reference to it being enabled. + setFromEnvVal(&cfg.enableEndpointDiscovery, enableEndpointDiscoveryEnvKey) + if len(cfg.enableEndpointDiscovery) > 0 { + cfg.EnableEndpointDiscovery = aws.Bool(cfg.enableEndpointDiscovery != "false") + } - return cfg -} + setFromEnvVal(&cfg.SharedCredentialsFile, sharedCredsFileEnvKey) + setFromEnvVal(&cfg.SharedConfigFile, sharedConfigFileEnvKey) -func setFromEnvVal(dst *string, keys []string) { - for _, k := range keys { - if v := os.Getenv(k); len(v) > 0 { - *dst = v - break - } + if len(cfg.SharedCredentialsFile) == 0 { + cfg.SharedCredentialsFile = defaults.SharedCredentialsFilename() } -} - -func sharedCredentialsFilename() string { - if name := os.Getenv("AWS_SHARED_CREDENTIALS_FILE"); len(name) > 0 { - return name + if len(cfg.SharedConfigFile) == 0 { + cfg.SharedConfigFile = defaults.SharedConfigFilename() } - return filepath.Join(userHomeDir(), ".aws", "credentials") -} + cfg.CustomCABundle = os.Getenv("AWS_CA_BUNDLE") -func sharedConfigFilename() string { - if name := os.Getenv("AWS_CONFIG_FILE"); len(name) > 0 { - return name + var err error + // STS Regional Endpoint variable + for _, k := range stsRegionalEndpointKey { + if v := os.Getenv(k); len(v) != 0 { + cfg.STSRegionalEndpoint, err = endpoints.GetSTSRegionalEndpoint(v) + if err != nil { + return cfg, fmt.Errorf("failed to load, %v from env config, %v", k, err) + } + } + } + + // S3 Regional Endpoint variable + for _, k := range s3UsEast1RegionalEndpoint { + if v := os.Getenv(k); len(v) != 0 { + cfg.S3UsEast1RegionalEndpoint, err = endpoints.GetS3UsEast1RegionalEndpoint(v) + if err != nil { + return cfg, fmt.Errorf("failed to load, %v from env config, %v", k, err) + } + } } - return filepath.Join(userHomeDir(), ".aws", "config") + return cfg, nil } -func userHomeDir() string { - homeDir := os.Getenv("HOME") // *nix - if len(homeDir) == 0 { // windows - homeDir = os.Getenv("USERPROFILE") +func setFromEnvVal(dst *string, keys []string) { + for _, k := range keys { + if v := os.Getenv(k); len(v) != 0 { + *dst = v + break + } } - - return homeDir } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/session.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/session.go index 3d52fc20d72..ab6daac7c30 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/session.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/session.go @@ -1,26 +1,50 @@ package session import ( + "crypto/tls" + "crypto/x509" "fmt" + "io" + "io/ioutil" + "net/http" + "os" + "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/corehandlers" "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/aws/aws-sdk-go/aws/credentials/stscreds" + "github.com/aws/aws-sdk-go/aws/csm" "github.com/aws/aws-sdk-go/aws/defaults" "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/request" ) +const ( + // ErrCodeSharedConfig represents an error that occurs in the shared + // configuration logic + ErrCodeSharedConfig = "SharedConfigErr" +) + +// ErrSharedConfigSourceCollision will be returned if a section contains both +// source_profile and credential_source +var ErrSharedConfigSourceCollision = awserr.New(ErrCodeSharedConfig, "only source profile or credential source can be specified, not both", nil) + +// ErrSharedConfigECSContainerEnvVarEmpty will be returned if the environment +// variables are empty and Environment was set as the credential source +var ErrSharedConfigECSContainerEnvVarEmpty = awserr.New(ErrCodeSharedConfig, "EcsContainer was specified as the credential_source, but 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' was not set", nil) + +// ErrSharedConfigInvalidCredSource will be returned if an invalid credential source was provided +var ErrSharedConfigInvalidCredSource = awserr.New(ErrCodeSharedConfig, "credential source values must be EcsContainer, Ec2InstanceMetadata, or Environment", nil) + // A Session provides a central location to create service clients from and // store configurations and request handlers for those services. // // Sessions are safe to create service clients concurrently, but it is not safe // to mutate the Session concurrently. // -// The Session satisfies the service client's client.ClientConfigProvider. +// The Session satisfies the service client's client.ConfigProvider. type Session struct { Config *aws.Config Handlers request.Handlers @@ -49,10 +73,15 @@ type Session struct { // func is called instead of waiting to receive an error until a request is made. func New(cfgs ...*aws.Config) *Session { // load initial config from environment - envCfg := loadEnvConfig() + envCfg, envErr := loadEnvConfig() if envCfg.EnableSharedConfig { - s, err := newSession(envCfg, cfgs...) + var cfg aws.Config + cfg.MergeIn(cfgs...) + s, err := NewSessionWithOptions(Options{ + Config: cfg, + SharedConfigState: SharedConfigEnable, + }) if err != nil { // Old session.New expected all errors to be discovered when // a request is made, and would report the errors then. This @@ -64,16 +93,31 @@ func New(cfgs ...*aws.Config) *Session { // Session creation failed, need to report the error and prevent // any requests from succeeding. s = &Session{Config: defaults.Config()} - s.Config.MergeIn(cfgs...) - s.Config.Logger.Log("ERROR:", msg, "Error:", err) - s.Handlers.Validate.PushBack(func(r *request.Request) { - r.Error = err - }) + s.logDeprecatedNewSessionError(msg, err, cfgs) } + return s } - return oldNewSession(cfgs...) + s := deprecatedNewSession(cfgs...) + if envErr != nil { + msg := "failed to load env config" + s.logDeprecatedNewSessionError(msg, envErr, cfgs) + } + + if csmCfg, err := loadCSMConfig(envCfg, []string{}); err != nil { + if l := s.Config.Logger; l != nil { + l.Log(fmt.Sprintf("ERROR: failed to load CSM configuration, %v", err)) + } + } else if csmCfg.Enabled { + err := enableCSM(&s.Handlers, csmCfg, s.Config.Logger) + if err != nil { + msg := "failed to enable CSM" + s.logDeprecatedNewSessionError(msg, err, cfgs) + } + } + + return s } // NewSession returns a new Session created from SDK defaults, config files, @@ -89,12 +133,13 @@ func New(cfgs ...*aws.Config) *Session { // to be built with retrieving credentials with AssumeRole set in the config. // // See the NewSessionWithOptions func for information on how to override or -// control through code how the Session will be created. Such as specifying the +// control through code how the Session will be created, such as specifying the // config profile, and controlling if shared config is enabled or not. func NewSession(cfgs ...*aws.Config) (*Session, error) { - envCfg := loadEnvConfig() + opts := Options{} + opts.Config.MergeIn(cfgs...) - return newSession(envCfg, cfgs...) + return NewSessionWithOptions(opts) } // SharedConfigState provides the ability to optionally override the state @@ -147,6 +192,57 @@ type Options struct { // will allow you to override the AWS_SDK_LOAD_CONFIG environment variable // and enable or disable the shared config functionality. SharedConfigState SharedConfigState + + // Ordered list of files the session will load configuration from. + // It will override environment variable AWS_SHARED_CREDENTIALS_FILE, AWS_CONFIG_FILE. + SharedConfigFiles []string + + // When the SDK's shared config is configured to assume a role with MFA + // this option is required in order to provide the mechanism that will + // retrieve the MFA token. There is no default value for this field. If + // it is not set an error will be returned when creating the session. + // + // This token provider will be called when ever the assumed role's + // credentials need to be refreshed. Within the context of service clients + // all sharing the same session the SDK will ensure calls to the token + // provider are atomic. When sharing a token provider across multiple + // sessions additional synchronization logic is needed to ensure the + // token providers do not introduce race conditions. It is recommend to + // share the session where possible. + // + // stscreds.StdinTokenProvider is a basic implementation that will prompt + // from stdin for the MFA token code. + // + // This field is only used if the shared configuration is enabled, and + // the config enables assume role wit MFA via the mfa_serial field. + AssumeRoleTokenProvider func() (string, error) + + // When the SDK's shared config is configured to assume a role this option + // may be provided to set the expiry duration of the STS credentials. + // Defaults to 15 minutes if not set as documented in the + // stscreds.AssumeRoleProvider. + AssumeRoleDuration time.Duration + + // Reader for a custom Credentials Authority (CA) bundle in PEM format that + // the SDK will use instead of the default system's root CA bundle. Use this + // only if you want to replace the CA bundle the SDK uses for TLS requests. + // + // Enabling this option will attempt to merge the Transport into the SDK's HTTP + // client. If the client's Transport is not a http.Transport an error will be + // returned. If the Transport's TLS config is set this option will cause the SDK + // to overwrite the Transport's TLS config's RootCAs value. If the CA + // bundle reader contains multiple certificates all of them will be loaded. + // + // The Session option CustomCABundle is also available when creating sessions + // to also enable this feature. CustomCABundle session option field has priority + // over the AWS_CA_BUNDLE environment variable, and will be used if both are set. + CustomCABundle io.Reader + + // The handlers that the session and all API clients will be created with. + // This must be a complete set of handlers. Use the defaults.Handlers() + // function to initialize this value before changing the handlers to be + // used by the SDK. + Handlers request.Handlers } // NewSessionWithOptions returns a new Session created from SDK defaults, config files, @@ -161,32 +257,39 @@ type Options struct { // to be built with retrieving credentials with AssumeRole set in the config. // // // Equivalent to session.New -// sess, err := session.NewSessionWithOptions(session.Options{}) +// sess := session.Must(session.NewSessionWithOptions(session.Options{})) // // // Specify profile to load for the session's config -// sess, err := session.NewSessionWithOptions(session.Options{ +// sess := session.Must(session.NewSessionWithOptions(session.Options{ // Profile: "profile_name", -// }) +// })) // // // Specify profile for config and region for requests -// sess, err := session.NewSessionWithOptions(session.Options{ +// sess := session.Must(session.NewSessionWithOptions(session.Options{ // Config: aws.Config{Region: aws.String("us-east-1")}, // Profile: "profile_name", -// }) +// })) // // // Force enable Shared Config support -// sess, err := session.NewSessionWithOptions(session.Options{ -// SharedConfigState: SharedConfigEnable, -// }) +// sess := session.Must(session.NewSessionWithOptions(session.Options{ +// SharedConfigState: session.SharedConfigEnable, +// })) func NewSessionWithOptions(opts Options) (*Session, error) { var envCfg envConfig + var err error if opts.SharedConfigState == SharedConfigEnable { - envCfg = loadSharedEnvConfig() + envCfg, err = loadSharedEnvConfig() + if err != nil { + return nil, fmt.Errorf("failed to load shared config, %v", err) + } } else { - envCfg = loadEnvConfig() + envCfg, err = loadEnvConfig() + if err != nil { + return nil, fmt.Errorf("failed to load environment config, %v", err) + } } - if len(opts.Profile) > 0 { + if len(opts.Profile) != 0 { envCfg.Profile = opts.Profile } @@ -197,7 +300,18 @@ func NewSessionWithOptions(opts Options) (*Session, error) { envCfg.EnableSharedConfig = true } - return newSession(envCfg, &opts.Config) + // Only use AWS_CA_BUNDLE if session option is not provided. + if len(envCfg.CustomCABundle) != 0 && opts.CustomCABundle == nil { + f, err := os.Open(envCfg.CustomCABundle) + if err != nil { + return nil, awserr.New("LoadCustomCABundleError", + "failed to open custom CA bundle PEM file", err) + } + defer f.Close() + opts.CustomCABundle = f + } + + return newSession(opts, envCfg, &opts.Config) } // Must is a helper function to ensure the Session is valid and there was no @@ -215,7 +329,7 @@ func Must(sess *Session, err error) *Session { return sess } -func oldNewSession(cfgs ...*aws.Config) *Session { +func deprecatedNewSession(cfgs ...*aws.Config) *Session { cfg := defaults.Config() handlers := defaults.Handlers() @@ -238,35 +352,68 @@ func oldNewSession(cfgs ...*aws.Config) *Session { } initHandlers(s) - return s } -func newSession(envCfg envConfig, cfgs ...*aws.Config) (*Session, error) { +func enableCSM(handlers *request.Handlers, cfg csmConfig, logger aws.Logger) error { + if logger != nil { + logger.Log("Enabling CSM") + } + + r, err := csm.Start(cfg.ClientID, csm.AddressWithDefaults(cfg.Host, cfg.Port)) + if err != nil { + return err + } + r.InjectHandlers(handlers) + + return nil +} + +func newSession(opts Options, envCfg envConfig, cfgs ...*aws.Config) (*Session, error) { cfg := defaults.Config() - handlers := defaults.Handlers() + + handlers := opts.Handlers + if handlers.IsEmpty() { + handlers = defaults.Handlers() + } // Get a merged version of the user provided config to determine if // credentials were. userCfg := &aws.Config{} userCfg.MergeIn(cfgs...) + cfg.MergeIn(userCfg) - // Order config files will be loaded in with later files overwriting + // Ordered config files will be loaded in with later files overwriting // previous config file values. - cfgFiles := []string{envCfg.SharedConfigFile, envCfg.SharedCredentialsFile} - if !envCfg.EnableSharedConfig { - // The shared config file (~/.aws/config) is only loaded if instructed - // to load via the envConfig.EnableSharedConfig (AWS_SDK_LOAD_CONFIG). - cfgFiles = cfgFiles[1:] + var cfgFiles []string + if opts.SharedConfigFiles != nil { + cfgFiles = opts.SharedConfigFiles + } else { + cfgFiles = []string{envCfg.SharedConfigFile, envCfg.SharedCredentialsFile} + if !envCfg.EnableSharedConfig { + // The shared config file (~/.aws/config) is only loaded if instructed + // to load via the envConfig.EnableSharedConfig (AWS_SDK_LOAD_CONFIG). + cfgFiles = cfgFiles[1:] + } } // Load additional config from file(s) - sharedCfg, err := loadSharedConfig(envCfg.Profile, cfgFiles) + sharedCfg, err := loadSharedConfig(envCfg.Profile, cfgFiles, envCfg.EnableSharedConfig) if err != nil { - return nil, err + if len(envCfg.Profile) == 0 && !envCfg.EnableSharedConfig && (envCfg.Creds.HasKeys() || userCfg.Credentials != nil) { + // Special case where the user has not explicitly specified an AWS_PROFILE, + // or session.Options.profile, shared config is not enabled, and the + // environment has credentials, allow the shared config file to fail to + // load since the user has already provided credentials, and nothing else + // is required to be read file. Github(aws/aws-sdk-go#2455) + } else if _, ok := err.(SharedConfigProfileNotExistsError); !ok { + return nil, err + } } - mergeConfigSrcs(cfg, userCfg, envCfg, sharedCfg, handlers) + if err := mergeConfigSrcs(cfg, userCfg, envCfg, sharedCfg, handlers, opts); err != nil { + return nil, err + } s := &Session{ Config: cfg, @@ -275,12 +422,120 @@ func newSession(envCfg envConfig, cfgs ...*aws.Config) (*Session, error) { initHandlers(s) + if csmCfg, err := loadCSMConfig(envCfg, cfgFiles); err != nil { + if l := s.Config.Logger; l != nil { + l.Log(fmt.Sprintf("ERROR: failed to load CSM configuration, %v", err)) + } + } else if csmCfg.Enabled { + err = enableCSM(&s.Handlers, csmCfg, s.Config.Logger) + if err != nil { + return nil, err + } + } + + // Setup HTTP client with custom cert bundle if enabled + if opts.CustomCABundle != nil { + if err := loadCustomCABundle(s, opts.CustomCABundle); err != nil { + return nil, err + } + } + return s, nil } -func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg sharedConfig, handlers request.Handlers) { - // Merge in user provided configuration - cfg.MergeIn(userCfg) +type csmConfig struct { + Enabled bool + Host string + Port string + ClientID string +} + +var csmProfileName = "aws_csm" + +func loadCSMConfig(envCfg envConfig, cfgFiles []string) (csmConfig, error) { + if envCfg.CSMEnabled != nil { + if *envCfg.CSMEnabled { + return csmConfig{ + Enabled: true, + ClientID: envCfg.CSMClientID, + Host: envCfg.CSMHost, + Port: envCfg.CSMPort, + }, nil + } + return csmConfig{}, nil + } + + sharedCfg, err := loadSharedConfig(csmProfileName, cfgFiles, false) + if err != nil { + if _, ok := err.(SharedConfigProfileNotExistsError); !ok { + return csmConfig{}, err + } + } + if sharedCfg.CSMEnabled != nil && *sharedCfg.CSMEnabled == true { + return csmConfig{ + Enabled: true, + ClientID: sharedCfg.CSMClientID, + Host: sharedCfg.CSMHost, + Port: sharedCfg.CSMPort, + }, nil + } + + return csmConfig{}, nil +} + +func loadCustomCABundle(s *Session, bundle io.Reader) error { + var t *http.Transport + switch v := s.Config.HTTPClient.Transport.(type) { + case *http.Transport: + t = v + default: + if s.Config.HTTPClient.Transport != nil { + return awserr.New("LoadCustomCABundleError", + "unable to load custom CA bundle, HTTPClient's transport unsupported type", nil) + } + } + if t == nil { + // Nil transport implies `http.DefaultTransport` should be used. Since + // the SDK cannot modify, nor copy the `DefaultTransport` specifying + // the values the next closest behavior. + t = getCABundleTransport() + } + + p, err := loadCertPool(bundle) + if err != nil { + return err + } + if t.TLSClientConfig == nil { + t.TLSClientConfig = &tls.Config{} + } + t.TLSClientConfig.RootCAs = p + + s.Config.HTTPClient.Transport = t + + return nil +} + +func loadCertPool(r io.Reader) (*x509.CertPool, error) { + b, err := ioutil.ReadAll(r) + if err != nil { + return nil, awserr.New("LoadCustomCABundleError", + "failed to read custom CA bundle PEM file", err) + } + + p := x509.NewCertPool() + if !p.AppendCertsFromPEM(b) { + return nil, awserr.New("LoadCustomCABundleError", + "failed to load custom CA bundle PEM file", err) + } + + return p, nil +} + +func mergeConfigSrcs(cfg, userCfg *aws.Config, + envCfg envConfig, sharedCfg sharedConfig, + handlers request.Handlers, + sessOpts Options, +) error { // Region if not already set by user if len(aws.StringValue(cfg.Region)) == 0 { @@ -291,64 +546,59 @@ func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg share } } - // Configure credentials if not already set + if cfg.EnableEndpointDiscovery == nil { + if envCfg.EnableEndpointDiscovery != nil { + cfg.WithEndpointDiscovery(*envCfg.EnableEndpointDiscovery) + } else if envCfg.EnableSharedConfig && sharedCfg.EnableEndpointDiscovery != nil { + cfg.WithEndpointDiscovery(*sharedCfg.EnableEndpointDiscovery) + } + } + + // Regional Endpoint flag for STS endpoint resolving + mergeSTSRegionalEndpointConfig(cfg, []endpoints.STSRegionalEndpoint{ + userCfg.STSRegionalEndpoint, + envCfg.STSRegionalEndpoint, + sharedCfg.STSRegionalEndpoint, + endpoints.LegacySTSEndpoint, + }) + + // Regional Endpoint flag for S3 endpoint resolving + mergeS3UsEast1RegionalEndpointConfig(cfg, []endpoints.S3UsEast1RegionalEndpoint{ + userCfg.S3UsEast1RegionalEndpoint, + envCfg.S3UsEast1RegionalEndpoint, + sharedCfg.S3UsEast1RegionalEndpoint, + endpoints.LegacyS3UsEast1Endpoint, + }) + + // Configure credentials if not already set by the user when creating the + // Session. if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil { - if len(envCfg.Creds.AccessKeyID) > 0 { - cfg.Credentials = credentials.NewStaticCredentialsFromCreds( - envCfg.Creds, - ) - } else if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.RoleARN) > 0 && sharedCfg.AssumeRoleSource != nil { - cfgCp := *cfg - cfgCp.Credentials = credentials.NewStaticCredentialsFromCreds( - sharedCfg.AssumeRoleSource.Creds, - ) - cfg.Credentials = stscreds.NewCredentials( - &Session{ - Config: &cfgCp, - Handlers: handlers.Copy(), - }, - sharedCfg.AssumeRole.RoleARN, - func(opt *stscreds.AssumeRoleProvider) { - opt.RoleSessionName = sharedCfg.AssumeRole.RoleSessionName - - if len(sharedCfg.AssumeRole.ExternalID) > 0 { - opt.ExternalID = aws.String(sharedCfg.AssumeRole.ExternalID) - } - - // MFA not supported - }, - ) - } else if len(sharedCfg.Creds.AccessKeyID) > 0 { - cfg.Credentials = credentials.NewStaticCredentialsFromCreds( - sharedCfg.Creds, - ) - } else { - // Fallback to default credentials provider, include mock errors - // for the credential chain so user can identify why credentials - // failed to be retrieved. - cfg.Credentials = credentials.NewCredentials(&credentials.ChainProvider{ - VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors), - Providers: []credentials.Provider{ - &credProviderError{Err: awserr.New("EnvAccessKeyNotFound", "failed to find credentials in the environment.", nil)}, - &credProviderError{Err: awserr.New("SharedCredsLoad", fmt.Sprintf("failed to load profile, %s.", envCfg.Profile), nil)}, - defaults.RemoteCredProvider(*cfg, handlers), - }, - }) + creds, err := resolveCredentials(cfg, envCfg, sharedCfg, handlers, sessOpts) + if err != nil { + return err } + cfg.Credentials = creds } -} -type credProviderError struct { - Err error + return nil } -var emptyCreds = credentials.Value{} - -func (c credProviderError) Retrieve() (credentials.Value, error) { - return credentials.Value{}, c.Err +func mergeSTSRegionalEndpointConfig(cfg *aws.Config, values []endpoints.STSRegionalEndpoint) { + for _, v := range values { + if v != endpoints.UnsetSTSEndpoint { + cfg.STSRegionalEndpoint = v + break + } + } } -func (c credProviderError) IsExpired() bool { - return true + +func mergeS3UsEast1RegionalEndpointConfig(cfg *aws.Config, values []endpoints.S3UsEast1RegionalEndpoint) { + for _, v := range values { + if v != endpoints.UnsetS3UsEast1Endpoint { + cfg.S3UsEast1RegionalEndpoint = v + break + } + } } func initHandlers(s *Session) { @@ -359,7 +609,7 @@ func initHandlers(s *Session) { } } -// Copy creates and returns a copy of the current Session, coping the config +// Copy creates and returns a copy of the current Session, copying the config // and handlers. If any additional configs are provided they will be merged // on top of the Session's copied config. // @@ -379,46 +629,60 @@ func (s *Session) Copy(cfgs ...*aws.Config) *Session { // ClientConfig satisfies the client.ConfigProvider interface and is used to // configure the service client instances. Passing the Session to the service // client's constructor (New) will use this method to configure the client. -func (s *Session) ClientConfig(serviceName string, cfgs ...*aws.Config) client.Config { - // Backwards compatibility, the error will be eaten if user calls ClientConfig - // directly. All SDK services will use ClientconfigWithError. - cfg, _ := s.clientConfigWithErr(serviceName, cfgs...) - - return cfg -} - -func (s *Session) clientConfigWithErr(serviceName string, cfgs ...*aws.Config) (client.Config, error) { +func (s *Session) ClientConfig(service string, cfgs ...*aws.Config) client.Config { s = s.Copy(cfgs...) - var resolved endpoints.ResolvedEndpoint - var err error - region := aws.StringValue(s.Config.Region) + resolved, err := s.resolveEndpoint(service, region, s.Config) + if err != nil && s.Config.Logger != nil { + s.Config.Logger.Log(fmt.Sprintf( + "ERROR: unable to resolve endpoint for service %q, region %q, err: %v", + service, region, err)) + } - if endpoint := aws.StringValue(s.Config.Endpoint); len(endpoint) != 0 { - resolved.URL = endpoints.AddScheme(endpoint, aws.BoolValue(s.Config.DisableSSL)) - resolved.SigningRegion = region - } else { - resolved, err = s.Config.EndpointResolver.EndpointFor( - serviceName, region, - func(opt *endpoints.Options) { - opt.DisableSSL = aws.BoolValue(s.Config.DisableSSL) - opt.UseDualStack = aws.BoolValue(s.Config.UseDualStack) + return client.Config{ + Config: s.Config, + Handlers: s.Handlers, + Endpoint: resolved.URL, + SigningRegion: resolved.SigningRegion, + SigningNameDerived: resolved.SigningNameDerived, + SigningName: resolved.SigningName, + } +} + +func (s *Session) resolveEndpoint(service, region string, cfg *aws.Config) (endpoints.ResolvedEndpoint, error) { - // Support the condition where the service is modeled but its - // endpoint metadata is not available. - opt.ResolveUnknownService = true - }, - ) + if ep := aws.StringValue(cfg.Endpoint); len(ep) != 0 { + return endpoints.ResolvedEndpoint{ + URL: endpoints.AddScheme(ep, aws.BoolValue(cfg.DisableSSL)), + SigningRegion: region, + }, nil } - return client.Config{ - Config: s.Config, - Handlers: s.Handlers, - Endpoint: resolved.URL, - SigningRegion: resolved.SigningRegion, - SigningName: resolved.SigningName, - }, err + resolved, err := cfg.EndpointResolver.EndpointFor(service, region, + func(opt *endpoints.Options) { + opt.DisableSSL = aws.BoolValue(cfg.DisableSSL) + opt.UseDualStack = aws.BoolValue(cfg.UseDualStack) + // Support for STSRegionalEndpoint where the STSRegionalEndpoint is + // provided in envConfig or sharedConfig with envConfig getting + // precedence. + opt.STSRegionalEndpoint = cfg.STSRegionalEndpoint + + // Support for S3UsEast1RegionalEndpoint where the S3UsEast1RegionalEndpoint is + // provided in envConfig or sharedConfig with envConfig getting + // precedence. + opt.S3UsEast1RegionalEndpoint = cfg.S3UsEast1RegionalEndpoint + + // Support the condition where the service is modeled but its + // endpoint metadata is not available. + opt.ResolveUnknownService = true + }, + ) + if err != nil { + return endpoints.ResolvedEndpoint{}, err + } + + return resolved, nil } // ClientConfigNoResolveEndpoint is the same as ClientConfig with the exception @@ -428,19 +692,28 @@ func (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) client.Conf s = s.Copy(cfgs...) var resolved endpoints.ResolvedEndpoint - - region := aws.StringValue(s.Config.Region) - if ep := aws.StringValue(s.Config.Endpoint); len(ep) > 0 { resolved.URL = endpoints.AddScheme(ep, aws.BoolValue(s.Config.DisableSSL)) - resolved.SigningRegion = region + resolved.SigningRegion = aws.StringValue(s.Config.Region) } return client.Config{ - Config: s.Config, - Handlers: s.Handlers, - Endpoint: resolved.URL, - SigningRegion: resolved.SigningRegion, - SigningName: resolved.SigningName, + Config: s.Config, + Handlers: s.Handlers, + Endpoint: resolved.URL, + SigningRegion: resolved.SigningRegion, + SigningNameDerived: resolved.SigningNameDerived, + SigningName: resolved.SigningName, } } + +// logDeprecatedNewSessionError function enables error handling for session +func (s *Session) logDeprecatedNewSessionError(msg string, err error, cfgs []*aws.Config) { + // Session creation failed, need to report the error and prevent + // any requests from succeeding. + s.Config.MergeIn(cfgs...) + s.Config.Logger.Log("ERROR:", msg, "Error:", err) + s.Handlers.Validate.PushBack(func(r *request.Request) { + r.Error = err + }) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go index b58076f5e32..1d7b049cf7c 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go @@ -2,11 +2,11 @@ package session import ( "fmt" - "io/ioutil" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/credentials" - "github.com/go-ini/ini" + "github.com/aws/aws-sdk-go/aws/endpoints" + "github.com/aws/aws-sdk-go/internal/ini" ) const ( @@ -16,68 +16,115 @@ const ( sessionTokenKey = `aws_session_token` // optional // Assume Role Credentials group - roleArnKey = `role_arn` // group required - sourceProfileKey = `source_profile` // group required - externalIDKey = `external_id` // optional - mfaSerialKey = `mfa_serial` // optional - roleSessionNameKey = `role_session_name` // optional + roleArnKey = `role_arn` // group required + sourceProfileKey = `source_profile` // group required (or credential_source) + credentialSourceKey = `credential_source` // group required (or source_profile) + externalIDKey = `external_id` // optional + mfaSerialKey = `mfa_serial` // optional + roleSessionNameKey = `role_session_name` // optional + + // CSM options + csmEnabledKey = `csm_enabled` + csmHostKey = `csm_host` + csmPortKey = `csm_port` + csmClientIDKey = `csm_client_id` // Additional Config fields regionKey = `region` + // endpoint discovery group + enableEndpointDiscoveryKey = `endpoint_discovery_enabled` // optional + + // External Credential Process + credentialProcessKey = `credential_process` // optional + + // Web Identity Token File + webIdentityTokenFileKey = `web_identity_token_file` // optional + + // Additional config fields for regional or legacy endpoints + stsRegionalEndpointSharedKey = `sts_regional_endpoints` + + // Additional config fields for regional or legacy endpoints + s3UsEast1RegionalSharedKey = `s3_us_east_1_regional_endpoint` + // DefaultSharedConfigProfile is the default profile to be used when // loading configuration from the config files if another profile name // is not provided. DefaultSharedConfigProfile = `default` ) -type assumeRoleConfig struct { - RoleARN string - SourceProfile string - ExternalID string - MFASerial string - RoleSessionName string -} - // sharedConfig represents the configuration fields of the SDK config files. type sharedConfig struct { - // Credentials values from the config file. Both aws_access_key_id - // and aws_secret_access_key must be provided together in the same file - // to be considered valid. The values will be ignored if not a complete group. - // aws_session_token is an optional field that can be provided if both of the - // other two fields are also provided. + // Credentials values from the config file. Both aws_access_key_id and + // aws_secret_access_key must be provided together in the same file to be + // considered valid. The values will be ignored if not a complete group. + // aws_session_token is an optional field that can be provided if both of + // the other two fields are also provided. // // aws_access_key_id // aws_secret_access_key // aws_session_token Creds credentials.Value - AssumeRole assumeRoleConfig - AssumeRoleSource *sharedConfig + CredentialSource string + CredentialProcess string + WebIdentityTokenFile string + + RoleARN string + RoleSessionName string + ExternalID string + MFASerial string + + SourceProfileName string + SourceProfile *sharedConfig - // Region is the region the SDK should use for looking up AWS service endpoints - // and signing requests. + // Region is the region the SDK should use for looking up AWS service + // endpoints and signing requests. // // region Region string + + // EnableEndpointDiscovery can be enabled in the shared config by setting + // endpoint_discovery_enabled to true + // + // endpoint_discovery_enabled = true + EnableEndpointDiscovery *bool + // CSM Options + CSMEnabled *bool + CSMHost string + CSMPort string + CSMClientID string + + // Specifies the Regional Endpoint flag for the SDK to resolve the endpoint for a service + // + // sts_regional_endpoints = regional + // This can take value as `LegacySTSEndpoint` or `RegionalSTSEndpoint` + STSRegionalEndpoint endpoints.STSRegionalEndpoint + + // Specifies the Regional Endpoint flag for the SDK to resolve the endpoint for a service + // + // s3_us_east_1_regional_endpoint = regional + // This can take value as `LegacyS3UsEast1Endpoint` or `RegionalS3UsEast1Endpoint` + S3UsEast1RegionalEndpoint endpoints.S3UsEast1RegionalEndpoint } type sharedConfigFile struct { Filename string - IniData *ini.File + IniData ini.Sections } -// loadSharedConfig retrieves the configuration from the list of files -// using the profile provided. The order the files are listed will determine +// loadSharedConfig retrieves the configuration from the list of files using +// the profile provided. The order the files are listed will determine // precedence. Values in subsequent files will overwrite values defined in // earlier files. // // For example, given two files A and B. Both define credentials. If the order -// of the files are A then B, B's credential values will be used instead of A's. +// of the files are A then B, B's credential values will be used instead of +// A's. // // See sharedConfig.setFromFile for information how the config files // will be loaded. -func loadSharedConfig(profile string, filenames []string) (sharedConfig, error) { +func loadSharedConfig(profile string, filenames []string, exOpts bool) (sharedConfig, error) { if len(profile) == 0 { profile = DefaultSharedConfigProfile } @@ -88,16 +135,11 @@ func loadSharedConfig(profile string, filenames []string) (sharedConfig, error) } cfg := sharedConfig{} - if err = cfg.setFromIniFiles(profile, files); err != nil { + profiles := map[string]struct{}{} + if err = cfg.setFromIniFiles(profiles, profile, files, exOpts); err != nil { return sharedConfig{}, err } - if len(cfg.AssumeRole.SourceProfile) > 0 { - if err := cfg.setAssumeRoleSource(profile, files); err != nil { - return sharedConfig{}, err - } - } - return cfg, nil } @@ -105,114 +147,267 @@ func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, error) { files := make([]sharedConfigFile, 0, len(filenames)) for _, filename := range filenames { - b, err := ioutil.ReadFile(filename) - if err != nil { + sections, err := ini.OpenFile(filename) + if aerr, ok := err.(awserr.Error); ok && aerr.Code() == ini.ErrCodeUnableToReadFile { // Skip files which can't be opened and read for whatever reason continue - } - - f, err := ini.Load(b) - if err != nil { - return nil, SharedConfigLoadError{Filename: filename} + } else if err != nil { + return nil, SharedConfigLoadError{Filename: filename, Err: err} } files = append(files, sharedConfigFile{ - Filename: filename, IniData: f, + Filename: filename, IniData: sections, }) } return files, nil } -func (cfg *sharedConfig) setAssumeRoleSource(origProfile string, files []sharedConfigFile) error { - var assumeRoleSrc sharedConfig +func (cfg *sharedConfig) setFromIniFiles(profiles map[string]struct{}, profile string, files []sharedConfigFile, exOpts bool) error { + // Trim files from the list that don't exist. + var skippedFiles int + var profileNotFoundErr error + for _, f := range files { + if err := cfg.setFromIniFile(profile, f, exOpts); err != nil { + if _, ok := err.(SharedConfigProfileNotExistsError); ok { + // Ignore profiles not defined in individual files. + profileNotFoundErr = err + skippedFiles++ + continue + } + return err + } + } + if skippedFiles == len(files) { + // If all files were skipped because the profile is not found, return + // the original profile not found error. + return profileNotFoundErr + } - // Multiple level assume role chains are not support - if cfg.AssumeRole.SourceProfile == origProfile { - assumeRoleSrc = *cfg - assumeRoleSrc.AssumeRole = assumeRoleConfig{} + if _, ok := profiles[profile]; ok { + // if this is the second instance of the profile the Assume Role + // options must be cleared because they are only valid for the + // first reference of a profile. The self linked instance of the + // profile only have credential provider options. + cfg.clearAssumeRoleOptions() } else { - err := assumeRoleSrc.setFromIniFiles(cfg.AssumeRole.SourceProfile, files) - if err != nil { + // First time a profile has been seen, It must either be a assume role + // or credentials. Assert if the credential type requires a role ARN, + // the ARN is also set. + if err := cfg.validateCredentialsRequireARN(profile); err != nil { return err } } + profiles[profile] = struct{}{} - if len(assumeRoleSrc.Creds.AccessKeyID) == 0 { - return SharedConfigAssumeRoleError{RoleARN: cfg.AssumeRole.RoleARN} + if err := cfg.validateCredentialType(); err != nil { + return err } - cfg.AssumeRoleSource = &assumeRoleSrc - - return nil -} + // Link source profiles for assume roles + if len(cfg.SourceProfileName) != 0 { + // Linked profile via source_profile ignore credential provider + // options, the source profile must provide the credentials. + cfg.clearCredentialOptions() -func (cfg *sharedConfig) setFromIniFiles(profile string, files []sharedConfigFile) error { - // Trim files from the list that don't exist. - for _, f := range files { - if err := cfg.setFromIniFile(profile, f); err != nil { + srcCfg := &sharedConfig{} + err := srcCfg.setFromIniFiles(profiles, cfg.SourceProfileName, files, exOpts) + if err != nil { + // SourceProfile that doesn't exist is an error in configuration. if _, ok := err.(SharedConfigProfileNotExistsError); ok { - // Ignore proviles missings - continue + err = SharedConfigAssumeRoleError{ + RoleARN: cfg.RoleARN, + SourceProfile: cfg.SourceProfileName, + } } return err } + + if !srcCfg.hasCredentials() { + return SharedConfigAssumeRoleError{ + RoleARN: cfg.RoleARN, + SourceProfile: cfg.SourceProfileName, + } + } + + cfg.SourceProfile = srcCfg } return nil } -// setFromFile loads the configuration from the file using -// the profile provided. A sharedConfig pointer type value is used so that -// multiple config file loadings can be chained. +// setFromFile loads the configuration from the file using the profile +// provided. A sharedConfig pointer type value is used so that multiple config +// file loadings can be chained. // // Only loads complete logically grouped values, and will not set fields in cfg -// for incomplete grouped values in the config. Such as credentials. For example -// if a config file only includes aws_access_key_id but no aws_secret_access_key -// the aws_access_key_id will be ignored. -func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile) error { - section, err := file.IniData.GetSection(profile) - if err != nil { +// for incomplete grouped values in the config. Such as credentials. For +// example if a config file only includes aws_access_key_id but no +// aws_secret_access_key the aws_access_key_id will be ignored. +func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile, exOpts bool) error { + section, ok := file.IniData.GetSection(profile) + if !ok { // Fallback to to alternate profile name: profile - section, err = file.IniData.GetSection(fmt.Sprintf("profile %s", profile)) - if err != nil { - return SharedConfigProfileNotExistsError{Profile: profile, Err: err} + section, ok = file.IniData.GetSection(fmt.Sprintf("profile %s", profile)) + if !ok { + return SharedConfigProfileNotExistsError{Profile: profile, Err: nil} } } - // Shared Credentials - akid := section.Key(accessKeyIDKey).String() - secret := section.Key(secretAccessKey).String() - if len(akid) > 0 && len(secret) > 0 { - cfg.Creds = credentials.Value{ - AccessKeyID: akid, - SecretAccessKey: secret, - SessionToken: section.Key(sessionTokenKey).String(), - ProviderName: fmt.Sprintf("SharedConfigCredentials: %s", file.Filename), + if exOpts { + // Assume Role Parameters + updateString(&cfg.RoleARN, section, roleArnKey) + updateString(&cfg.ExternalID, section, externalIDKey) + updateString(&cfg.MFASerial, section, mfaSerialKey) + updateString(&cfg.RoleSessionName, section, roleSessionNameKey) + updateString(&cfg.SourceProfileName, section, sourceProfileKey) + updateString(&cfg.CredentialSource, section, credentialSourceKey) + updateString(&cfg.Region, section, regionKey) + + if v := section.String(stsRegionalEndpointSharedKey); len(v) != 0 { + sre, err := endpoints.GetSTSRegionalEndpoint(v) + if err != nil { + return fmt.Errorf("failed to load %s from shared config, %s, %v", + stsRegionalEndpointSharedKey, file.Filename, err) + } + cfg.STSRegionalEndpoint = sre + } + + if v := section.String(s3UsEast1RegionalSharedKey); len(v) != 0 { + sre, err := endpoints.GetS3UsEast1RegionalEndpoint(v) + if err != nil { + return fmt.Errorf("failed to load %s from shared config, %s, %v", + s3UsEast1RegionalSharedKey, file.Filename, err) + } + cfg.S3UsEast1RegionalEndpoint = sre } } - // Assume Role - roleArn := section.Key(roleArnKey).String() - srcProfile := section.Key(sourceProfileKey).String() - if len(roleArn) > 0 && len(srcProfile) > 0 { - cfg.AssumeRole = assumeRoleConfig{ - RoleARN: roleArn, - SourceProfile: srcProfile, - ExternalID: section.Key(externalIDKey).String(), - MFASerial: section.Key(mfaSerialKey).String(), - RoleSessionName: section.Key(roleSessionNameKey).String(), + updateString(&cfg.CredentialProcess, section, credentialProcessKey) + updateString(&cfg.WebIdentityTokenFile, section, webIdentityTokenFileKey) + + // Shared Credentials + creds := credentials.Value{ + AccessKeyID: section.String(accessKeyIDKey), + SecretAccessKey: section.String(secretAccessKey), + SessionToken: section.String(sessionTokenKey), + ProviderName: fmt.Sprintf("SharedConfigCredentials: %s", file.Filename), + } + if creds.HasKeys() { + cfg.Creds = creds + } + + // Endpoint discovery + updateBoolPtr(&cfg.EnableEndpointDiscovery, section, enableEndpointDiscoveryKey) + + // CSM options + updateBoolPtr(&cfg.CSMEnabled, section, csmEnabledKey) + updateString(&cfg.CSMHost, section, csmHostKey) + updateString(&cfg.CSMPort, section, csmPortKey) + updateString(&cfg.CSMClientID, section, csmClientIDKey) + + return nil +} + +func (cfg *sharedConfig) validateCredentialsRequireARN(profile string) error { + var credSource string + + switch { + case len(cfg.SourceProfileName) != 0: + credSource = sourceProfileKey + case len(cfg.CredentialSource) != 0: + credSource = credentialSourceKey + case len(cfg.WebIdentityTokenFile) != 0: + credSource = webIdentityTokenFileKey + } + + if len(credSource) != 0 && len(cfg.RoleARN) == 0 { + return CredentialRequiresARNError{ + Type: credSource, + Profile: profile, } } - // Region - if v := section.Key(regionKey).String(); len(v) > 0 { - cfg.Region = v + return nil +} + +func (cfg *sharedConfig) validateCredentialType() error { + // Only one or no credential type can be defined. + if !oneOrNone( + len(cfg.SourceProfileName) != 0, + len(cfg.CredentialSource) != 0, + len(cfg.CredentialProcess) != 0, + len(cfg.WebIdentityTokenFile) != 0, + ) { + return ErrSharedConfigSourceCollision } return nil } +func (cfg *sharedConfig) hasCredentials() bool { + switch { + case len(cfg.SourceProfileName) != 0: + case len(cfg.CredentialSource) != 0: + case len(cfg.CredentialProcess) != 0: + case len(cfg.WebIdentityTokenFile) != 0: + case cfg.Creds.HasKeys(): + default: + return false + } + + return true +} + +func (cfg *sharedConfig) clearCredentialOptions() { + cfg.CredentialSource = "" + cfg.CredentialProcess = "" + cfg.WebIdentityTokenFile = "" + cfg.Creds = credentials.Value{} +} + +func (cfg *sharedConfig) clearAssumeRoleOptions() { + cfg.RoleARN = "" + cfg.ExternalID = "" + cfg.MFASerial = "" + cfg.RoleSessionName = "" + cfg.SourceProfileName = "" +} + +func oneOrNone(bs ...bool) bool { + var count int + + for _, b := range bs { + if b { + count++ + if count > 1 { + return false + } + } + } + + return true +} + +// updateString will only update the dst with the value in the section key, key +// is present in the section. +func updateString(dst *string, section ini.Section, key string) { + if !section.Has(key) { + return + } + *dst = section.String(key) +} + +// updateBoolPtr will only update the dst with the value in the section key, +// key is present in the section. +func updateBoolPtr(dst **bool, section ini.Section, key string) { + if !section.Has(key) { + return + } + *dst = new(bool) + **dst = section.Bool(key) +} + // SharedConfigLoadError is an error for the shared config file failed to load. type SharedConfigLoadError struct { Filename string @@ -270,7 +465,8 @@ func (e SharedConfigProfileNotExistsError) Error() string { // profile contains assume role information, but that information is invalid // or not complete. type SharedConfigAssumeRoleError struct { - RoleARN string + RoleARN string + SourceProfile string } // Code is the short id of the error. @@ -280,8 +476,10 @@ func (e SharedConfigAssumeRoleError) Code() string { // Message is the description of the error func (e SharedConfigAssumeRoleError) Message() string { - return fmt.Sprintf("failed to load assume role for %s, source profile has no shared credentials", - e.RoleARN) + return fmt.Sprintf( + "failed to load assume role for %s, source profile %s has no shared credentials", + e.RoleARN, e.SourceProfile, + ) } // OrigErr is the underlying error that caused the failure. @@ -293,3 +491,36 @@ func (e SharedConfigAssumeRoleError) OrigErr() error { func (e SharedConfigAssumeRoleError) Error() string { return awserr.SprintError(e.Code(), e.Message(), "", nil) } + +// CredentialRequiresARNError provides the error for shared config credentials +// that are incorrectly configured in the shared config or credentials file. +type CredentialRequiresARNError struct { + // type of credentials that were configured. + Type string + + // Profile name the credentials were in. + Profile string +} + +// Code is the short id of the error. +func (e CredentialRequiresARNError) Code() string { + return "CredentialRequiresARNError" +} + +// Message is the description of the error +func (e CredentialRequiresARNError) Message() string { + return fmt.Sprintf( + "credential type %s requires role_arn, profile %s", + e.Type, e.Profile, + ) +} + +// OrigErr is the underlying error that caused the failure. +func (e CredentialRequiresARNError) OrigErr() error { + return nil +} + +// Error satisfies the error interface. +func (e CredentialRequiresARNError) Error() string { + return awserr.SprintError(e.Code(), e.Message(), "", nil) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go new file mode 100644 index 00000000000..6aa2ed241bb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go @@ -0,0 +1,7 @@ +package v4 + +// WithUnsignedPayload will enable and set the UnsignedPayload field to +// true of the signer. +func WithUnsignedPayload(v4 *Signer) { + v4.UnsignedPayload = true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go index 98bfe742b3b..8104793aa5b 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go @@ -45,7 +45,7 @@ // If signing a request intended for HTTP2 server, and you're using Go 1.6.2 // through 1.7.4 you should use the URL.RawPath as the pre-escaped form of the // request URL. https://github.com/golang/go/issues/16847 points to a bug in -// Go pre 1.8 that failes to make HTTP2 requests using absolute URL in the HTTP +// Go pre 1.8 that fails to make HTTP2 requests using absolute URL in the HTTP // message. URL.Opaque generally will force Go to make requests with absolute URL. // URL.RawPath does not do this, but RawPath must be a valid escaping of Path // or url.EscapedPath will ignore the RawPath escaping. @@ -55,7 +55,6 @@ package v4 import ( - "bytes" "crypto/hmac" "crypto/sha256" "encoding/hex" @@ -72,6 +71,7 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/internal/sdkio" "github.com/aws/aws-sdk-go/private/protocol/rest" ) @@ -98,25 +98,25 @@ var ignoredHeaders = rules{ var requiredSignedHeaders = rules{ whitelist{ mapRule{ - "Cache-Control": struct{}{}, - "Content-Disposition": struct{}{}, - "Content-Encoding": struct{}{}, - "Content-Language": struct{}{}, - "Content-Md5": struct{}{}, - "Content-Type": struct{}{}, - "Expires": struct{}{}, - "If-Match": struct{}{}, - "If-Modified-Since": struct{}{}, - "If-None-Match": struct{}{}, - "If-Unmodified-Since": struct{}{}, - "Range": struct{}{}, - "X-Amz-Acl": struct{}{}, - "X-Amz-Copy-Source": struct{}{}, - "X-Amz-Copy-Source-If-Match": struct{}{}, - "X-Amz-Copy-Source-If-Modified-Since": struct{}{}, - "X-Amz-Copy-Source-If-None-Match": struct{}{}, - "X-Amz-Copy-Source-If-Unmodified-Since": struct{}{}, - "X-Amz-Copy-Source-Range": struct{}{}, + "Cache-Control": struct{}{}, + "Content-Disposition": struct{}{}, + "Content-Encoding": struct{}{}, + "Content-Language": struct{}{}, + "Content-Md5": struct{}{}, + "Content-Type": struct{}{}, + "Expires": struct{}{}, + "If-Match": struct{}{}, + "If-Modified-Since": struct{}{}, + "If-None-Match": struct{}{}, + "If-Unmodified-Since": struct{}{}, + "Range": struct{}{}, + "X-Amz-Acl": struct{}{}, + "X-Amz-Copy-Source": struct{}{}, + "X-Amz-Copy-Source-If-Match": struct{}{}, + "X-Amz-Copy-Source-If-Modified-Since": struct{}{}, + "X-Amz-Copy-Source-If-None-Match": struct{}{}, + "X-Amz-Copy-Source-If-Unmodified-Since": struct{}{}, + "X-Amz-Copy-Source-Range": struct{}{}, "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm": struct{}{}, "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key": struct{}{}, "X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5": struct{}{}, @@ -134,7 +134,9 @@ var requiredSignedHeaders = rules{ "X-Amz-Server-Side-Encryption-Customer-Key": struct{}{}, "X-Amz-Server-Side-Encryption-Customer-Key-Md5": struct{}{}, "X-Amz-Storage-Class": struct{}{}, + "X-Amz-Tagging": struct{}{}, "X-Amz-Website-Redirect-Location": struct{}{}, + "X-Amz-Content-Sha256": struct{}{}, }, }, patterns{"X-Amz-Meta-"}, @@ -180,7 +182,7 @@ type Signer struct { // http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html DisableURIPathEscaping bool - // Disales the automatical setting of the HTTP request's Body field with the + // Disables the automatical setting of the HTTP request's Body field with the // io.ReadSeeker passed in to the signer. This is useful if you're using a // custom wrapper around the body for the io.ReadSeeker and want to preserve // the Body value on the Request.Body. @@ -194,6 +196,10 @@ type Signer struct { // This value should only be used for testing. If it is nil the default // time.Now will be used. currentTimeFn func() time.Time + + // UnsignedPayload will prevent signing of the payload. This will only + // work for services that have support for this. + UnsignedPayload bool } // NewSigner returns a Signer pointer configured with the credentials and optional @@ -227,6 +233,7 @@ type signingCtx struct { isPresign bool formattedTime string formattedShortTime string + unsignedPayload bool bodyDigest string signedHeaders string @@ -264,7 +271,7 @@ type signingCtx struct { // "X-Amz-Content-Sha256" header with a precomputed value. The signer will // only compute the hash if the request header value is empty. func (v4 Signer) Sign(r *http.Request, body io.ReadSeeker, service, region string, signTime time.Time) (http.Header, error) { - return v4.signWithBody(r, body, service, region, 0, signTime) + return v4.signWithBody(r, body, service, region, 0, false, signTime) } // Presign signs AWS v4 requests with the provided body, service name, region @@ -298,10 +305,10 @@ func (v4 Signer) Sign(r *http.Request, body io.ReadSeeker, service, region strin // presigned request's signature you can set the "X-Amz-Content-Sha256" // HTTP header and that will be included in the request's signature. func (v4 Signer) Presign(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, signTime time.Time) (http.Header, error) { - return v4.signWithBody(r, body, service, region, exp, signTime) + return v4.signWithBody(r, body, service, region, exp, true, signTime) } -func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, signTime time.Time) (http.Header, error) { +func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, isPresign bool, signTime time.Time) (http.Header, error) { currentTimeFn := v4.currentTimeFn if currentTimeFn == nil { currentTimeFn = time.Now @@ -313,10 +320,11 @@ func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, regi Query: r.URL.Query(), Time: signTime, ExpireTime: exp, - isPresign: exp != 0, + isPresign: isPresign, ServiceName: service, Region: region, DisableURIPathEscaping: v4.DisableURIPathEscaping, + unsignedPayload: v4.UnsignedPayload, } for key := range ctx.Query { @@ -334,8 +342,11 @@ func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, regi return http.Header{}, err } + ctx.sanitizeHostForHeader() ctx.assignAmzQueryValues() - ctx.build(v4.DisableHeaderHoisting) + if err := ctx.build(v4.DisableHeaderHoisting); err != nil { + return nil, err + } // If the request is not presigned the body should be attached to it. This // prevents the confusion of wanting to send a signed request without @@ -358,6 +369,10 @@ func (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, regi return ctx.SignedHeaderVals, nil } +func (ctx *signingCtx) sanitizeHostForHeader() { + request.SanitizeHostForHeader(ctx.Request) +} + func (ctx *signingCtx) handlePresignRemoval() { if !ctx.isPresign { return @@ -396,7 +411,7 @@ var SignRequestHandler = request.NamedHandler{ } // SignSDKRequest signs an AWS request with the V4 signature. This -// request handler is bested used only with the SDK's built in service client's +// request handler should only be used with the SDK's built in service client's // API operation requests. // // This function should not be used on its on its own, but in conjunction with @@ -407,9 +422,23 @@ var SignRequestHandler = request.NamedHandler{ // If the credentials of the request's config are set to // credentials.AnonymousCredentials the request will not be signed. func SignSDKRequest(req *request.Request) { - signSDKRequestWithCurrTime(req, time.Now) + SignSDKRequestWithCurrentTime(req, time.Now) +} + +// BuildNamedHandler will build a generic handler for signing. +func BuildNamedHandler(name string, opts ...func(*Signer)) request.NamedHandler { + return request.NamedHandler{ + Name: name, + Fn: func(req *request.Request) { + SignSDKRequestWithCurrentTime(req, time.Now, opts...) + }, + } } -func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time) { + +// SignSDKRequestWithCurrentTime will sign the SDK's request using the time +// function passed in. Behaves the same as SignSDKRequest with the exception +// the request is signed with the value returned by the current time function. +func SignSDKRequestWithCurrentTime(req *request.Request, curTimeFn func() time.Time, opts ...func(*Signer)) { // If the request does not need to be signed ignore the signing of the // request if the AnonymousCredentials object is used. if req.Config.Credentials == credentials.AnonymousCredentials { @@ -441,13 +470,13 @@ func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time v4.DisableRequestBodyOverwrite = true }) - signingTime := req.Time - if !req.LastSignedAt.IsZero() { - signingTime = req.LastSignedAt + for _, opt := range opts { + opt(v4) } + curTime := curTimeFn() signedHeaders, err := v4.signWithBody(req.HTTPRequest, req.GetBody(), - name, region, req.ExpireTime, signingTime, + name, region, req.ExpireTime, req.ExpireTime > 0, curTime, ) if err != nil { req.Error = err @@ -456,7 +485,7 @@ func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time } req.SignedHeaderVals = signedHeaders - req.LastSignedAt = curTimeFn() + req.LastSignedAt = curTime } const logSignInfoMsg = `DEBUG: Request Signature: @@ -478,10 +507,14 @@ func (v4 *Signer) logSigningInfo(ctx *signingCtx) { v4.Logger.Log(msg) } -func (ctx *signingCtx) build(disableHeaderHoisting bool) { +func (ctx *signingCtx) build(disableHeaderHoisting bool) error { ctx.buildTime() // no depends ctx.buildCredentialString() // no depends + if err := ctx.buildBodyDigest(); err != nil { + return err + } + unsignedHeaders := ctx.Request.Header if ctx.isPresign { if !disableHeaderHoisting { @@ -493,7 +526,6 @@ func (ctx *signingCtx) build(disableHeaderHoisting bool) { } } - ctx.buildBodyDigest() ctx.buildCanonicalHeaders(ignoredHeaders, unsignedHeaders) ctx.buildCanonicalString() // depends on canon headers / signed headers ctx.buildStringToSign() // depends on canon string @@ -509,6 +541,8 @@ func (ctx *signingCtx) build(disableHeaderHoisting bool) { } ctx.Request.Header.Set("Authorization", strings.Join(parts, ", ")) } + + return nil } func (ctx *signingCtx) buildTime() { @@ -583,14 +617,18 @@ func (ctx *signingCtx) buildCanonicalHeaders(r rule, header http.Header) { headerValues := make([]string, len(headers)) for i, k := range headers { if k == "host" { - headerValues[i] = "host:" + ctx.Request.URL.Host + if ctx.Request.Host != "" { + headerValues[i] = "host:" + ctx.Request.Host + } else { + headerValues[i] = "host:" + ctx.Request.URL.Host + } } else { headerValues[i] = k + ":" + strings.Join(ctx.SignedHeaderVals[k], ",") } } - - ctx.canonicalHeaders = strings.Join(stripExcessSpaces(headerValues), "\n") + stripExcessSpaces(headerValues) + ctx.canonicalHeaders = strings.Join(headerValues, "\n") } func (ctx *signingCtx) buildCanonicalString() { @@ -631,21 +669,38 @@ func (ctx *signingCtx) buildSignature() { ctx.signature = hex.EncodeToString(signature) } -func (ctx *signingCtx) buildBodyDigest() { +func (ctx *signingCtx) buildBodyDigest() error { hash := ctx.Request.Header.Get("X-Amz-Content-Sha256") if hash == "" { - if ctx.isPresign && ctx.ServiceName == "s3" { + includeSHA256Header := ctx.unsignedPayload || + ctx.ServiceName == "s3" || + ctx.ServiceName == "glacier" + + s3Presign := ctx.isPresign && ctx.ServiceName == "s3" + + if ctx.unsignedPayload || s3Presign { hash = "UNSIGNED-PAYLOAD" + includeSHA256Header = !s3Presign } else if ctx.Body == nil { hash = emptyStringSHA256 } else { - hash = hex.EncodeToString(makeSha256Reader(ctx.Body)) + if !aws.IsReaderSeekable(ctx.Body) { + return fmt.Errorf("cannot use unseekable request body %T, for signed request with body", ctx.Body) + } + hashBytes, err := makeSha256Reader(ctx.Body) + if err != nil { + return err + } + hash = hex.EncodeToString(hashBytes) } - if ctx.ServiceName == "s3" || ctx.ServiceName == "glacier" { + + if includeSHA256Header { ctx.Request.Header.Set("X-Amz-Content-Sha256", hash) } } ctx.bodyDigest = hash + + return nil } // isRequestSigned returns if the request is currently signed or presigned @@ -683,58 +738,69 @@ func makeSha256(data []byte) []byte { return hash.Sum(nil) } -func makeSha256Reader(reader io.ReadSeeker) []byte { +func makeSha256Reader(reader io.ReadSeeker) (hashBytes []byte, err error) { hash := sha256.New() - start, _ := reader.Seek(0, 1) - defer reader.Seek(start, 0) + start, err := reader.Seek(0, sdkio.SeekCurrent) + if err != nil { + return nil, err + } + defer func() { + // ensure error is return if unable to seek back to start of payload. + _, err = reader.Seek(start, sdkio.SeekStart) + }() + + // Use CopyN to avoid allocating the 32KB buffer in io.Copy for bodies + // smaller than 32KB. Fall back to io.Copy if we fail to determine the size. + size, err := aws.SeekerLen(reader) + if err != nil { + io.Copy(hash, reader) + } else { + io.CopyN(hash, reader, size) + } - io.Copy(hash, reader) - return hash.Sum(nil) + return hash.Sum(nil), nil } -const doubleSpaces = " " - -var doubleSpaceBytes = []byte(doubleSpaces) +const doubleSpace = " " -func stripExcessSpaces(headerVals []string) []string { - vals := make([]string, len(headerVals)) - for i, str := range headerVals { - // Trim leading and trailing spaces - trimmed := strings.TrimSpace(str) +// stripExcessSpaces will rewrite the passed in slice's string values to not +// contain multiple side-by-side spaces. +func stripExcessSpaces(vals []string) { + var j, k, l, m, spaces int + for i, str := range vals { + // Trim trailing spaces + for j = len(str) - 1; j >= 0 && str[j] == ' '; j-- { + } - idx := strings.Index(trimmed, doubleSpaces) - var buf []byte - for idx > -1 { - // Multiple adjacent spaces found - if buf == nil { - // first time create the buffer - buf = []byte(trimmed) - } + // Trim leading spaces + for k = 0; k < j && str[k] == ' '; k++ { + } + str = str[k : j+1] - stripToIdx := -1 - for j := idx + 1; j < len(buf); j++ { - if buf[j] != ' ' { - buf = append(buf[:idx+1], buf[j:]...) - stripToIdx = j - break - } - } + // Strip multiple spaces. + j = strings.Index(str, doubleSpace) + if j < 0 { + vals[i] = str + continue + } - if stripToIdx >= 0 { - idx = bytes.Index(buf[stripToIdx:], doubleSpaceBytes) - if idx >= 0 { - idx += stripToIdx + buf := []byte(str) + for k, m, l = j, j, len(buf); k < l; k++ { + if buf[k] == ' ' { + if spaces == 0 { + // First space. + buf[m] = buf[k] + m++ } + spaces++ } else { - idx = -1 + // End of multiple spaces. + spaces = 0 + buf[m] = buf[k] + m++ } } - if buf != nil { - vals[i] = string(buf) - } else { - vals[i] = trimmed - } + vals[i] = string(buf[:m]) } - return vals } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/types.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/types.go index 0e2d864e10a..455091540fd 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/types.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/types.go @@ -3,15 +3,22 @@ package aws import ( "io" "sync" + + "github.com/aws/aws-sdk-go/internal/sdkio" ) -// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser. Should -// only be used with an io.Reader that is also an io.Seeker. Doing so may -// cause request signature errors, or request body's not sent for GET, HEAD -// and DELETE HTTP methods. +// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser. Allows the +// SDK to accept an io.Reader that is not also an io.Seeker for unsigned +// streaming payload API operations. +// +// A ReadSeekCloser wrapping an nonseekable io.Reader used in an API +// operation's input will prevent that operation being retried in the case of +// network errors, and cause operation requests to fail if the operation +// requires payload signing. // -// Deprecated: Should only be used with io.ReadSeeker. If using for -// S3 PutObject to stream content use s3manager.Uploader instead. +// Note: If using With S3 PutObject to stream an object upload The SDK's S3 +// Upload manager (s3manager.Uploader) provides support for streaming with the +// ability to retry network errors. func ReadSeekCloser(r io.Reader) ReaderSeekerCloser { return ReaderSeekerCloser{r} } @@ -22,10 +29,27 @@ type ReaderSeekerCloser struct { r io.Reader } +// IsReaderSeekable returns if the underlying reader type can be seeked. A +// io.Reader might not actually be seekable if it is the ReaderSeekerCloser +// type. +func IsReaderSeekable(r io.Reader) bool { + switch v := r.(type) { + case ReaderSeekerCloser: + return v.IsSeeker() + case *ReaderSeekerCloser: + return v.IsSeeker() + case io.ReadSeeker: + return true + default: + return false + } +} + // Read reads from the reader up to size of p. The number of bytes read, and // error if it occurred will be returned. // -// If the reader is not an io.Reader zero bytes read, and nil error will be returned. +// If the reader is not an io.Reader zero bytes read, and nil error will be +// returned. // // Performs the same functionality as io.Reader Read func (r ReaderSeekerCloser) Read(p []byte) (int, error) { @@ -56,6 +80,71 @@ func (r ReaderSeekerCloser) IsSeeker() bool { return ok } +// HasLen returns the length of the underlying reader if the value implements +// the Len() int method. +func (r ReaderSeekerCloser) HasLen() (int, bool) { + type lenner interface { + Len() int + } + + if lr, ok := r.r.(lenner); ok { + return lr.Len(), true + } + + return 0, false +} + +// GetLen returns the length of the bytes remaining in the underlying reader. +// Checks first for Len(), then io.Seeker to determine the size of the +// underlying reader. +// +// Will return -1 if the length cannot be determined. +func (r ReaderSeekerCloser) GetLen() (int64, error) { + if l, ok := r.HasLen(); ok { + return int64(l), nil + } + + if s, ok := r.r.(io.Seeker); ok { + return seekerLen(s) + } + + return -1, nil +} + +// SeekerLen attempts to get the number of bytes remaining at the seeker's +// current position. Returns the number of bytes remaining or error. +func SeekerLen(s io.Seeker) (int64, error) { + // Determine if the seeker is actually seekable. ReaderSeekerCloser + // hides the fact that a io.Readers might not actually be seekable. + switch v := s.(type) { + case ReaderSeekerCloser: + return v.GetLen() + case *ReaderSeekerCloser: + return v.GetLen() + } + + return seekerLen(s) +} + +func seekerLen(s io.Seeker) (int64, error) { + curOffset, err := s.Seek(0, sdkio.SeekCurrent) + if err != nil { + return 0, err + } + + endOffset, err := s.Seek(0, sdkio.SeekEnd) + if err != nil { + return 0, err + } + + _, err = s.Seek(curOffset, sdkio.SeekStart) + if err != nil { + return 0, err + } + + return endOffset - curOffset, nil +} + // Close closes the ReaderSeekerCloser. // // If the ReaderSeekerCloser is not an io.Closer nothing will be done. diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/url.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/url.go new file mode 100644 index 00000000000..6192b2455b6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/url.go @@ -0,0 +1,12 @@ +// +build go1.8 + +package aws + +import "net/url" + +// URLHostname will extract the Hostname without port from the URL value. +// +// Wrapper of net/url#URL.Hostname for backwards Go version compatibility. +func URLHostname(url *url.URL) string { + return url.Hostname() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go new file mode 100644 index 00000000000..0210d2720e7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go @@ -0,0 +1,29 @@ +// +build !go1.8 + +package aws + +import ( + "net/url" + "strings" +) + +// URLHostname will extract the Hostname without port from the URL value. +// +// Copy of Go 1.8's net/url#URL.Hostname functionality. +func URLHostname(url *url.URL) string { + return stripPort(url.Host) + +} + +// stripPort is copy of Go 1.8 url#URL.Hostname functionality. +// https://golang.org/src/net/url/url.go +func stripPort(hostport string) string { + colon := strings.IndexByte(hostport, ':') + if colon == -1 { + return hostport + } + if i := strings.IndexByte(hostport, ']'); i != -1 { + return strings.TrimPrefix(hostport[:i], "[") + } + return hostport[:colon] +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/version.go index 2eb30f030d0..f094e263e18 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/version.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.6.24" +const SDKVersion = "1.25.41" diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go new file mode 100644 index 00000000000..e83a99886bc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go @@ -0,0 +1,120 @@ +package ini + +// ASTKind represents different states in the parse table +// and the type of AST that is being constructed +type ASTKind int + +// ASTKind* is used in the parse table to transition between +// the different states +const ( + ASTKindNone = ASTKind(iota) + ASTKindStart + ASTKindExpr + ASTKindEqualExpr + ASTKindStatement + ASTKindSkipStatement + ASTKindExprStatement + ASTKindSectionStatement + ASTKindNestedSectionStatement + ASTKindCompletedNestedSectionStatement + ASTKindCommentStatement + ASTKindCompletedSectionStatement +) + +func (k ASTKind) String() string { + switch k { + case ASTKindNone: + return "none" + case ASTKindStart: + return "start" + case ASTKindExpr: + return "expr" + case ASTKindStatement: + return "stmt" + case ASTKindSectionStatement: + return "section_stmt" + case ASTKindExprStatement: + return "expr_stmt" + case ASTKindCommentStatement: + return "comment" + case ASTKindNestedSectionStatement: + return "nested_section_stmt" + case ASTKindCompletedSectionStatement: + return "completed_stmt" + case ASTKindSkipStatement: + return "skip" + default: + return "" + } +} + +// AST interface allows us to determine what kind of node we +// are on and casting may not need to be necessary. +// +// The root is always the first node in Children +type AST struct { + Kind ASTKind + Root Token + RootToken bool + Children []AST +} + +func newAST(kind ASTKind, root AST, children ...AST) AST { + return AST{ + Kind: kind, + Children: append([]AST{root}, children...), + } +} + +func newASTWithRootToken(kind ASTKind, root Token, children ...AST) AST { + return AST{ + Kind: kind, + Root: root, + RootToken: true, + Children: children, + } +} + +// AppendChild will append to the list of children an AST has. +func (a *AST) AppendChild(child AST) { + a.Children = append(a.Children, child) +} + +// GetRoot will return the root AST which can be the first entry +// in the children list or a token. +func (a *AST) GetRoot() AST { + if a.RootToken { + return *a + } + + if len(a.Children) == 0 { + return AST{} + } + + return a.Children[0] +} + +// GetChildren will return the current AST's list of children +func (a *AST) GetChildren() []AST { + if len(a.Children) == 0 { + return []AST{} + } + + if a.RootToken { + return a.Children + } + + return a.Children[1:] +} + +// SetChildren will set and override all children of the AST. +func (a *AST) SetChildren(children []AST) { + if a.RootToken { + a.Children = children + } else { + a.Children = append(a.Children[:1], children...) + } +} + +// Start is used to indicate the starting state of the parse table. +var Start = newAST(ASTKindStart, AST{}) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go new file mode 100644 index 00000000000..0895d53cbe6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go @@ -0,0 +1,11 @@ +package ini + +var commaRunes = []rune(",") + +func isComma(b rune) bool { + return b == ',' +} + +func newCommaToken() Token { + return newToken(TokenComma, commaRunes, NoneType) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go new file mode 100644 index 00000000000..0b76999ba1f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go @@ -0,0 +1,35 @@ +package ini + +// isComment will return whether or not the next byte(s) is a +// comment. +func isComment(b []rune) bool { + if len(b) == 0 { + return false + } + + switch b[0] { + case ';': + return true + case '#': + return true + } + + return false +} + +// newCommentToken will create a comment token and +// return how many bytes were read. +func newCommentToken(b []rune) (Token, int, error) { + i := 0 + for ; i < len(b); i++ { + if b[i] == '\n' { + break + } + + if len(b)-i > 2 && b[i] == '\r' && b[i+1] == '\n' { + break + } + } + + return newToken(TokenComment, b[:i], NoneType), i, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go new file mode 100644 index 00000000000..25ce0fe134d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go @@ -0,0 +1,29 @@ +// Package ini is an LL(1) parser for configuration files. +// +// Example: +// sections, err := ini.OpenFile("/path/to/file") +// if err != nil { +// panic(err) +// } +// +// profile := "foo" +// section, ok := sections.GetSection(profile) +// if !ok { +// fmt.Printf("section %q could not be found", profile) +// } +// +// Below is the BNF that describes this parser +// Grammar: +// stmt -> value stmt' +// stmt' -> epsilon | op stmt +// value -> number | string | boolean | quoted_string +// +// section -> [ section' +// section' -> value section_close +// section_close -> ] +// +// SkipState will skip (NL WS)+ +// +// comment -> # comment' | ; comment' +// comment' -> epsilon | value +package ini diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go new file mode 100644 index 00000000000..04345a54c20 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go @@ -0,0 +1,4 @@ +package ini + +// emptyToken is used to satisfy the Token interface +var emptyToken = newToken(TokenNone, []rune{}, NoneType) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go new file mode 100644 index 00000000000..91ba2a59dd5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go @@ -0,0 +1,24 @@ +package ini + +// newExpression will return an expression AST. +// Expr represents an expression +// +// grammar: +// expr -> string | number +func newExpression(tok Token) AST { + return newASTWithRootToken(ASTKindExpr, tok) +} + +func newEqualExpr(left AST, tok Token) AST { + return newASTWithRootToken(ASTKindEqualExpr, tok, left) +} + +// EqualExprKey will return a LHS value in the equal expr +func EqualExprKey(ast AST) string { + children := ast.GetChildren() + if len(children) == 0 || ast.Kind != ASTKindEqualExpr { + return "" + } + + return string(children[0].Root.Raw()) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go new file mode 100644 index 00000000000..8d462f77e24 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go @@ -0,0 +1,17 @@ +// +build gofuzz + +package ini + +import ( + "bytes" +) + +func Fuzz(data []byte) int { + b := bytes.NewReader(data) + + if _, err := Parse(b); err != nil { + return 0 + } + + return 1 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go new file mode 100644 index 00000000000..3b0ca7afe3b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go @@ -0,0 +1,51 @@ +package ini + +import ( + "io" + "os" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +// OpenFile takes a path to a given file, and will open and parse +// that file. +func OpenFile(path string) (Sections, error) { + f, err := os.Open(path) + if err != nil { + return Sections{}, awserr.New(ErrCodeUnableToReadFile, "unable to open file", err) + } + defer f.Close() + + return Parse(f) +} + +// Parse will parse the given file using the shared config +// visitor. +func Parse(f io.Reader) (Sections, error) { + tree, err := ParseAST(f) + if err != nil { + return Sections{}, err + } + + v := NewDefaultVisitor() + if err = Walk(tree, v); err != nil { + return Sections{}, err + } + + return v.Sections, nil +} + +// ParseBytes will parse the given bytes and return the parsed sections. +func ParseBytes(b []byte) (Sections, error) { + tree, err := ParseASTBytes(b) + if err != nil { + return Sections{}, err + } + + v := NewDefaultVisitor() + if err = Walk(tree, v); err != nil { + return Sections{}, err + } + + return v.Sections, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go new file mode 100644 index 00000000000..582c024ad15 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go @@ -0,0 +1,165 @@ +package ini + +import ( + "bytes" + "io" + "io/ioutil" + + "github.com/aws/aws-sdk-go/aws/awserr" +) + +const ( + // ErrCodeUnableToReadFile is used when a file is failed to be + // opened or read from. + ErrCodeUnableToReadFile = "FailedRead" +) + +// TokenType represents the various different tokens types +type TokenType int + +func (t TokenType) String() string { + switch t { + case TokenNone: + return "none" + case TokenLit: + return "literal" + case TokenSep: + return "sep" + case TokenOp: + return "op" + case TokenWS: + return "ws" + case TokenNL: + return "newline" + case TokenComment: + return "comment" + case TokenComma: + return "comma" + default: + return "" + } +} + +// TokenType enums +const ( + TokenNone = TokenType(iota) + TokenLit + TokenSep + TokenComma + TokenOp + TokenWS + TokenNL + TokenComment +) + +type iniLexer struct{} + +// Tokenize will return a list of tokens during lexical analysis of the +// io.Reader. +func (l *iniLexer) Tokenize(r io.Reader) ([]Token, error) { + b, err := ioutil.ReadAll(r) + if err != nil { + return nil, awserr.New(ErrCodeUnableToReadFile, "unable to read file", err) + } + + return l.tokenize(b) +} + +func (l *iniLexer) tokenize(b []byte) ([]Token, error) { + runes := bytes.Runes(b) + var err error + n := 0 + tokenAmount := countTokens(runes) + tokens := make([]Token, tokenAmount) + count := 0 + + for len(runes) > 0 && count < tokenAmount { + switch { + case isWhitespace(runes[0]): + tokens[count], n, err = newWSToken(runes) + case isComma(runes[0]): + tokens[count], n = newCommaToken(), 1 + case isComment(runes): + tokens[count], n, err = newCommentToken(runes) + case isNewline(runes): + tokens[count], n, err = newNewlineToken(runes) + case isSep(runes): + tokens[count], n, err = newSepToken(runes) + case isOp(runes): + tokens[count], n, err = newOpToken(runes) + default: + tokens[count], n, err = newLitToken(runes) + } + + if err != nil { + return nil, err + } + + count++ + + runes = runes[n:] + } + + return tokens[:count], nil +} + +func countTokens(runes []rune) int { + count, n := 0, 0 + var err error + + for len(runes) > 0 { + switch { + case isWhitespace(runes[0]): + _, n, err = newWSToken(runes) + case isComma(runes[0]): + _, n = newCommaToken(), 1 + case isComment(runes): + _, n, err = newCommentToken(runes) + case isNewline(runes): + _, n, err = newNewlineToken(runes) + case isSep(runes): + _, n, err = newSepToken(runes) + case isOp(runes): + _, n, err = newOpToken(runes) + default: + _, n, err = newLitToken(runes) + } + + if err != nil { + return 0 + } + + count++ + runes = runes[n:] + } + + return count + 1 +} + +// Token indicates a metadata about a given value. +type Token struct { + t TokenType + ValueType ValueType + base int + raw []rune +} + +var emptyValue = Value{} + +func newToken(t TokenType, raw []rune, v ValueType) Token { + return Token{ + t: t, + raw: raw, + ValueType: v, + } +} + +// Raw return the raw runes that were consumed +func (tok Token) Raw() []rune { + return tok.raw +} + +// Type returns the token type +func (tok Token) Type() TokenType { + return tok.t +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go new file mode 100644 index 00000000000..cf9fad81e70 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go @@ -0,0 +1,356 @@ +package ini + +import ( + "fmt" + "io" +) + +// State enums for the parse table +const ( + InvalidState = iota + // stmt -> value stmt' + StatementState + // stmt' -> MarkComplete | op stmt + StatementPrimeState + // value -> number | string | boolean | quoted_string + ValueState + // section -> [ section' + OpenScopeState + // section' -> value section_close + SectionState + // section_close -> ] + CloseScopeState + // SkipState will skip (NL WS)+ + SkipState + // SkipTokenState will skip any token and push the previous + // state onto the stack. + SkipTokenState + // comment -> # comment' | ; comment' + // comment' -> MarkComplete | value + CommentState + // MarkComplete state will complete statements and move that + // to the completed AST list + MarkCompleteState + // TerminalState signifies that the tokens have been fully parsed + TerminalState +) + +// parseTable is a state machine to dictate the grammar above. +var parseTable = map[ASTKind]map[TokenType]int{ + ASTKindStart: map[TokenType]int{ + TokenLit: StatementState, + TokenSep: OpenScopeState, + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenComment: CommentState, + TokenNone: TerminalState, + }, + ASTKindCommentStatement: map[TokenType]int{ + TokenLit: StatementState, + TokenSep: OpenScopeState, + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenComment: CommentState, + TokenNone: MarkCompleteState, + }, + ASTKindExpr: map[TokenType]int{ + TokenOp: StatementPrimeState, + TokenLit: ValueState, + TokenSep: OpenScopeState, + TokenWS: ValueState, + TokenNL: SkipState, + TokenComment: CommentState, + TokenNone: MarkCompleteState, + }, + ASTKindEqualExpr: map[TokenType]int{ + TokenLit: ValueState, + TokenWS: SkipTokenState, + TokenNL: SkipState, + }, + ASTKindStatement: map[TokenType]int{ + TokenLit: SectionState, + TokenSep: CloseScopeState, + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenComment: CommentState, + TokenNone: MarkCompleteState, + }, + ASTKindExprStatement: map[TokenType]int{ + TokenLit: ValueState, + TokenSep: OpenScopeState, + TokenOp: ValueState, + TokenWS: ValueState, + TokenNL: MarkCompleteState, + TokenComment: CommentState, + TokenNone: TerminalState, + TokenComma: SkipState, + }, + ASTKindSectionStatement: map[TokenType]int{ + TokenLit: SectionState, + TokenOp: SectionState, + TokenSep: CloseScopeState, + TokenWS: SectionState, + TokenNL: SkipTokenState, + }, + ASTKindCompletedSectionStatement: map[TokenType]int{ + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenLit: StatementState, + TokenSep: OpenScopeState, + TokenComment: CommentState, + TokenNone: MarkCompleteState, + }, + ASTKindSkipStatement: map[TokenType]int{ + TokenLit: StatementState, + TokenSep: OpenScopeState, + TokenWS: SkipTokenState, + TokenNL: SkipTokenState, + TokenComment: CommentState, + TokenNone: TerminalState, + }, +} + +// ParseAST will parse input from an io.Reader using +// an LL(1) parser. +func ParseAST(r io.Reader) ([]AST, error) { + lexer := iniLexer{} + tokens, err := lexer.Tokenize(r) + if err != nil { + return []AST{}, err + } + + return parse(tokens) +} + +// ParseASTBytes will parse input from a byte slice using +// an LL(1) parser. +func ParseASTBytes(b []byte) ([]AST, error) { + lexer := iniLexer{} + tokens, err := lexer.tokenize(b) + if err != nil { + return []AST{}, err + } + + return parse(tokens) +} + +func parse(tokens []Token) ([]AST, error) { + start := Start + stack := newParseStack(3, len(tokens)) + + stack.Push(start) + s := newSkipper() + +loop: + for stack.Len() > 0 { + k := stack.Pop() + + var tok Token + if len(tokens) == 0 { + // this occurs when all the tokens have been processed + // but reduction of what's left on the stack needs to + // occur. + tok = emptyToken + } else { + tok = tokens[0] + } + + step := parseTable[k.Kind][tok.Type()] + if s.ShouldSkip(tok) { + // being in a skip state with no tokens will break out of + // the parse loop since there is nothing left to process. + if len(tokens) == 0 { + break loop + } + // if should skip is true, we skip the tokens until should skip is set to false. + step = SkipTokenState + } + + switch step { + case TerminalState: + // Finished parsing. Push what should be the last + // statement to the stack. If there is anything left + // on the stack, an error in parsing has occurred. + if k.Kind != ASTKindStart { + stack.MarkComplete(k) + } + break loop + case SkipTokenState: + // When skipping a token, the previous state was popped off the stack. + // To maintain the correct state, the previous state will be pushed + // onto the stack. + stack.Push(k) + case StatementState: + if k.Kind != ASTKindStart { + stack.MarkComplete(k) + } + expr := newExpression(tok) + stack.Push(expr) + case StatementPrimeState: + if tok.Type() != TokenOp { + stack.MarkComplete(k) + continue + } + + if k.Kind != ASTKindExpr { + return nil, NewParseError( + fmt.Sprintf("invalid expression: expected Expr type, but found %T type", k), + ) + } + + k = trimSpaces(k) + expr := newEqualExpr(k, tok) + stack.Push(expr) + case ValueState: + // ValueState requires the previous state to either be an equal expression + // or an expression statement. + // + // This grammar occurs when the RHS is a number, word, or quoted string. + // equal_expr -> lit op equal_expr' + // equal_expr' -> number | string | quoted_string + // quoted_string -> " quoted_string' + // quoted_string' -> string quoted_string_end + // quoted_string_end -> " + // + // otherwise + // expr_stmt -> equal_expr (expr_stmt')* + // expr_stmt' -> ws S | op S | MarkComplete + // S -> equal_expr' expr_stmt' + switch k.Kind { + case ASTKindEqualExpr: + // assigning a value to some key + k.AppendChild(newExpression(tok)) + stack.Push(newExprStatement(k)) + case ASTKindExpr: + k.Root.raw = append(k.Root.raw, tok.Raw()...) + stack.Push(k) + case ASTKindExprStatement: + root := k.GetRoot() + children := root.GetChildren() + if len(children) == 0 { + return nil, NewParseError( + fmt.Sprintf("invalid expression: AST contains no children %s", k.Kind), + ) + } + + rhs := children[len(children)-1] + + if rhs.Root.ValueType != QuotedStringType { + rhs.Root.ValueType = StringType + rhs.Root.raw = append(rhs.Root.raw, tok.Raw()...) + + } + + children[len(children)-1] = rhs + k.SetChildren(children) + + stack.Push(k) + } + case OpenScopeState: + if !runeCompare(tok.Raw(), openBrace) { + return nil, NewParseError("expected '['") + } + // If OpenScopeState is not at the start, we must mark the previous ast as complete + // + // for example: if previous ast was a skip statement; + // we should mark it as complete before we create a new statement + if k.Kind != ASTKindStart { + stack.MarkComplete(k) + } + + stmt := newStatement() + stack.Push(stmt) + case CloseScopeState: + if !runeCompare(tok.Raw(), closeBrace) { + return nil, NewParseError("expected ']'") + } + + k = trimSpaces(k) + stack.Push(newCompletedSectionStatement(k)) + case SectionState: + var stmt AST + + switch k.Kind { + case ASTKindStatement: + // If there are multiple literals inside of a scope declaration, + // then the current token's raw value will be appended to the Name. + // + // This handles cases like [ profile default ] + // + // k will represent a SectionStatement with the children representing + // the label of the section + stmt = newSectionStatement(tok) + case ASTKindSectionStatement: + k.Root.raw = append(k.Root.raw, tok.Raw()...) + stmt = k + default: + return nil, NewParseError( + fmt.Sprintf("invalid statement: expected statement: %v", k.Kind), + ) + } + + stack.Push(stmt) + case MarkCompleteState: + if k.Kind != ASTKindStart { + stack.MarkComplete(k) + } + + if stack.Len() == 0 { + stack.Push(start) + } + case SkipState: + stack.Push(newSkipStatement(k)) + s.Skip() + case CommentState: + if k.Kind == ASTKindStart { + stack.Push(k) + } else { + stack.MarkComplete(k) + } + + stmt := newCommentStatement(tok) + stack.Push(stmt) + default: + return nil, NewParseError( + fmt.Sprintf("invalid state with ASTKind %v and TokenType %v", + k, tok.Type())) + } + + if len(tokens) > 0 { + tokens = tokens[1:] + } + } + + // this occurs when a statement has not been completed + if stack.top > 1 { + return nil, NewParseError(fmt.Sprintf("incomplete ini expression")) + } + + // returns a sublist which excludes the start symbol + return stack.List(), nil +} + +// trimSpaces will trim spaces on the left and right hand side of +// the literal. +func trimSpaces(k AST) AST { + // trim left hand side of spaces + for i := 0; i < len(k.Root.raw); i++ { + if !isWhitespace(k.Root.raw[i]) { + break + } + + k.Root.raw = k.Root.raw[1:] + i-- + } + + // trim right hand side of spaces + for i := len(k.Root.raw) - 1; i >= 0; i-- { + if !isWhitespace(k.Root.raw[i]) { + break + } + + k.Root.raw = k.Root.raw[:len(k.Root.raw)-1] + } + + return k +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go new file mode 100644 index 00000000000..24df543d38c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go @@ -0,0 +1,324 @@ +package ini + +import ( + "fmt" + "strconv" + "strings" +) + +var ( + runesTrue = []rune("true") + runesFalse = []rune("false") +) + +var literalValues = [][]rune{ + runesTrue, + runesFalse, +} + +func isBoolValue(b []rune) bool { + for _, lv := range literalValues { + if isLitValue(lv, b) { + return true + } + } + return false +} + +func isLitValue(want, have []rune) bool { + if len(have) < len(want) { + return false + } + + for i := 0; i < len(want); i++ { + if want[i] != have[i] { + return false + } + } + + return true +} + +// isNumberValue will return whether not the leading characters in +// a byte slice is a number. A number is delimited by whitespace or +// the newline token. +// +// A number is defined to be in a binary, octal, decimal (int | float), hex format, +// or in scientific notation. +func isNumberValue(b []rune) bool { + negativeIndex := 0 + helper := numberHelper{} + needDigit := false + + for i := 0; i < len(b); i++ { + negativeIndex++ + + switch b[i] { + case '-': + if helper.IsNegative() || negativeIndex != 1 { + return false + } + helper.Determine(b[i]) + needDigit = true + continue + case 'e', 'E': + if err := helper.Determine(b[i]); err != nil { + return false + } + negativeIndex = 0 + needDigit = true + continue + case 'b': + if helper.numberFormat == hex { + break + } + fallthrough + case 'o', 'x': + needDigit = true + if i == 0 { + return false + } + + fallthrough + case '.': + if err := helper.Determine(b[i]); err != nil { + return false + } + needDigit = true + continue + } + + if i > 0 && (isNewline(b[i:]) || isWhitespace(b[i])) { + return !needDigit + } + + if !helper.CorrectByte(b[i]) { + return false + } + needDigit = false + } + + return !needDigit +} + +func isValid(b []rune) (bool, int, error) { + if len(b) == 0 { + // TODO: should probably return an error + return false, 0, nil + } + + return isValidRune(b[0]), 1, nil +} + +func isValidRune(r rune) bool { + return r != ':' && r != '=' && r != '[' && r != ']' && r != ' ' && r != '\n' +} + +// ValueType is an enum that will signify what type +// the Value is +type ValueType int + +func (v ValueType) String() string { + switch v { + case NoneType: + return "NONE" + case DecimalType: + return "FLOAT" + case IntegerType: + return "INT" + case StringType: + return "STRING" + case BoolType: + return "BOOL" + } + + return "" +} + +// ValueType enums +const ( + NoneType = ValueType(iota) + DecimalType + IntegerType + StringType + QuotedStringType + BoolType +) + +// Value is a union container +type Value struct { + Type ValueType + raw []rune + + integer int64 + decimal float64 + boolean bool + str string +} + +func newValue(t ValueType, base int, raw []rune) (Value, error) { + v := Value{ + Type: t, + raw: raw, + } + var err error + + switch t { + case DecimalType: + v.decimal, err = strconv.ParseFloat(string(raw), 64) + case IntegerType: + if base != 10 { + raw = raw[2:] + } + + v.integer, err = strconv.ParseInt(string(raw), base, 64) + case StringType: + v.str = string(raw) + case QuotedStringType: + v.str = string(raw[1 : len(raw)-1]) + case BoolType: + v.boolean = runeCompare(v.raw, runesTrue) + } + + // issue 2253 + // + // if the value trying to be parsed is too large, then we will use + // the 'StringType' and raw value instead. + if nerr, ok := err.(*strconv.NumError); ok && nerr.Err == strconv.ErrRange { + v.Type = StringType + v.str = string(raw) + err = nil + } + + return v, err +} + +// Append will append values and change the type to a string +// type. +func (v *Value) Append(tok Token) { + r := tok.Raw() + if v.Type != QuotedStringType { + v.Type = StringType + r = tok.raw[1 : len(tok.raw)-1] + } + if tok.Type() != TokenLit { + v.raw = append(v.raw, tok.Raw()...) + } else { + v.raw = append(v.raw, r...) + } +} + +func (v Value) String() string { + switch v.Type { + case DecimalType: + return fmt.Sprintf("decimal: %f", v.decimal) + case IntegerType: + return fmt.Sprintf("integer: %d", v.integer) + case StringType: + return fmt.Sprintf("string: %s", string(v.raw)) + case QuotedStringType: + return fmt.Sprintf("quoted string: %s", string(v.raw)) + case BoolType: + return fmt.Sprintf("bool: %t", v.boolean) + default: + return "union not set" + } +} + +func newLitToken(b []rune) (Token, int, error) { + n := 0 + var err error + + token := Token{} + if b[0] == '"' { + n, err = getStringValue(b) + if err != nil { + return token, n, err + } + + token = newToken(TokenLit, b[:n], QuotedStringType) + } else if isNumberValue(b) { + var base int + base, n, err = getNumericalValue(b) + if err != nil { + return token, 0, err + } + + value := b[:n] + vType := IntegerType + if contains(value, '.') || hasExponent(value) { + vType = DecimalType + } + token = newToken(TokenLit, value, vType) + token.base = base + } else if isBoolValue(b) { + n, err = getBoolValue(b) + + token = newToken(TokenLit, b[:n], BoolType) + } else { + n, err = getValue(b) + token = newToken(TokenLit, b[:n], StringType) + } + + return token, n, err +} + +// IntValue returns an integer value +func (v Value) IntValue() int64 { + return v.integer +} + +// FloatValue returns a float value +func (v Value) FloatValue() float64 { + return v.decimal +} + +// BoolValue returns a bool value +func (v Value) BoolValue() bool { + return v.boolean +} + +func isTrimmable(r rune) bool { + switch r { + case '\n', ' ': + return true + } + return false +} + +// StringValue returns the string value +func (v Value) StringValue() string { + switch v.Type { + case StringType: + return strings.TrimFunc(string(v.raw), isTrimmable) + case QuotedStringType: + // preserve all characters in the quotes + return string(removeEscapedCharacters(v.raw[1 : len(v.raw)-1])) + default: + return strings.TrimFunc(string(v.raw), isTrimmable) + } +} + +func contains(runes []rune, c rune) bool { + for i := 0; i < len(runes); i++ { + if runes[i] == c { + return true + } + } + + return false +} + +func runeCompare(v1 []rune, v2 []rune) bool { + if len(v1) != len(v2) { + return false + } + + for i := 0; i < len(v1); i++ { + if v1[i] != v2[i] { + return false + } + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go new file mode 100644 index 00000000000..e52ac399f17 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go @@ -0,0 +1,30 @@ +package ini + +func isNewline(b []rune) bool { + if len(b) == 0 { + return false + } + + if b[0] == '\n' { + return true + } + + if len(b) < 2 { + return false + } + + return b[0] == '\r' && b[1] == '\n' +} + +func newNewlineToken(b []rune) (Token, int, error) { + i := 1 + if b[0] == '\r' && isNewline(b[1:]) { + i++ + } + + if !isNewline([]rune(b[:i])) { + return emptyToken, 0, NewParseError("invalid new line token") + } + + return newToken(TokenNL, b[:i], NoneType), i, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go new file mode 100644 index 00000000000..a45c0bc5662 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go @@ -0,0 +1,152 @@ +package ini + +import ( + "bytes" + "fmt" + "strconv" +) + +const ( + none = numberFormat(iota) + binary + octal + decimal + hex + exponent +) + +type numberFormat int + +// numberHelper is used to dictate what format a number is in +// and what to do for negative values. Since -1e-4 is a valid +// number, we cannot just simply check for duplicate negatives. +type numberHelper struct { + numberFormat numberFormat + + negative bool + negativeExponent bool +} + +func (b numberHelper) Exists() bool { + return b.numberFormat != none +} + +func (b numberHelper) IsNegative() bool { + return b.negative || b.negativeExponent +} + +func (b *numberHelper) Determine(c rune) error { + if b.Exists() { + return NewParseError(fmt.Sprintf("multiple number formats: 0%v", string(c))) + } + + switch c { + case 'b': + b.numberFormat = binary + case 'o': + b.numberFormat = octal + case 'x': + b.numberFormat = hex + case 'e', 'E': + b.numberFormat = exponent + case '-': + if b.numberFormat != exponent { + b.negative = true + } else { + b.negativeExponent = true + } + case '.': + b.numberFormat = decimal + default: + return NewParseError(fmt.Sprintf("invalid number character: %v", string(c))) + } + + return nil +} + +func (b numberHelper) CorrectByte(c rune) bool { + switch { + case b.numberFormat == binary: + if !isBinaryByte(c) { + return false + } + case b.numberFormat == octal: + if !isOctalByte(c) { + return false + } + case b.numberFormat == hex: + if !isHexByte(c) { + return false + } + case b.numberFormat == decimal: + if !isDigit(c) { + return false + } + case b.numberFormat == exponent: + if !isDigit(c) { + return false + } + case b.negativeExponent: + if !isDigit(c) { + return false + } + case b.negative: + if !isDigit(c) { + return false + } + default: + if !isDigit(c) { + return false + } + } + + return true +} + +func (b numberHelper) Base() int { + switch b.numberFormat { + case binary: + return 2 + case octal: + return 8 + case hex: + return 16 + default: + return 10 + } +} + +func (b numberHelper) String() string { + buf := bytes.Buffer{} + i := 0 + + switch b.numberFormat { + case binary: + i++ + buf.WriteString(strconv.Itoa(i) + ": binary format\n") + case octal: + i++ + buf.WriteString(strconv.Itoa(i) + ": octal format\n") + case hex: + i++ + buf.WriteString(strconv.Itoa(i) + ": hex format\n") + case exponent: + i++ + buf.WriteString(strconv.Itoa(i) + ": exponent format\n") + default: + i++ + buf.WriteString(strconv.Itoa(i) + ": integer format\n") + } + + if b.negative { + i++ + buf.WriteString(strconv.Itoa(i) + ": negative format\n") + } + + if b.negativeExponent { + i++ + buf.WriteString(strconv.Itoa(i) + ": negative exponent format\n") + } + + return buf.String() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go new file mode 100644 index 00000000000..8a84c7cbe08 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go @@ -0,0 +1,39 @@ +package ini + +import ( + "fmt" +) + +var ( + equalOp = []rune("=") + equalColonOp = []rune(":") +) + +func isOp(b []rune) bool { + if len(b) == 0 { + return false + } + + switch b[0] { + case '=': + return true + case ':': + return true + default: + return false + } +} + +func newOpToken(b []rune) (Token, int, error) { + tok := Token{} + + switch b[0] { + case '=': + tok = newToken(TokenOp, equalOp, NoneType) + case ':': + tok = newToken(TokenOp, equalColonOp, NoneType) + default: + return tok, 0, NewParseError(fmt.Sprintf("unexpected op type, %v", b[0])) + } + return tok, 1, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go new file mode 100644 index 00000000000..45728701931 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go @@ -0,0 +1,43 @@ +package ini + +import "fmt" + +const ( + // ErrCodeParseError is returned when a parsing error + // has occurred. + ErrCodeParseError = "INIParseError" +) + +// ParseError is an error which is returned during any part of +// the parsing process. +type ParseError struct { + msg string +} + +// NewParseError will return a new ParseError where message +// is the description of the error. +func NewParseError(message string) *ParseError { + return &ParseError{ + msg: message, + } +} + +// Code will return the ErrCodeParseError +func (err *ParseError) Code() string { + return ErrCodeParseError +} + +// Message returns the error's message +func (err *ParseError) Message() string { + return err.msg +} + +// OrigError return nothing since there will never be any +// original error. +func (err *ParseError) OrigError() error { + return nil +} + +func (err *ParseError) Error() string { + return fmt.Sprintf("%s: %s", err.Code(), err.Message()) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go new file mode 100644 index 00000000000..7f01cf7c703 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go @@ -0,0 +1,60 @@ +package ini + +import ( + "bytes" + "fmt" +) + +// ParseStack is a stack that contains a container, the stack portion, +// and the list which is the list of ASTs that have been successfully +// parsed. +type ParseStack struct { + top int + container []AST + list []AST + index int +} + +func newParseStack(sizeContainer, sizeList int) ParseStack { + return ParseStack{ + container: make([]AST, sizeContainer), + list: make([]AST, sizeList), + } +} + +// Pop will return and truncate the last container element. +func (s *ParseStack) Pop() AST { + s.top-- + return s.container[s.top] +} + +// Push will add the new AST to the container +func (s *ParseStack) Push(ast AST) { + s.container[s.top] = ast + s.top++ +} + +// MarkComplete will append the AST to the list of completed statements +func (s *ParseStack) MarkComplete(ast AST) { + s.list[s.index] = ast + s.index++ +} + +// List will return the completed statements +func (s ParseStack) List() []AST { + return s.list[:s.index] +} + +// Len will return the length of the container +func (s *ParseStack) Len() int { + return s.top +} + +func (s ParseStack) String() string { + buf := bytes.Buffer{} + for i, node := range s.list { + buf.WriteString(fmt.Sprintf("%d: %v\n", i+1, node)) + } + + return buf.String() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go new file mode 100644 index 00000000000..f82095ba259 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go @@ -0,0 +1,41 @@ +package ini + +import ( + "fmt" +) + +var ( + emptyRunes = []rune{} +) + +func isSep(b []rune) bool { + if len(b) == 0 { + return false + } + + switch b[0] { + case '[', ']': + return true + default: + return false + } +} + +var ( + openBrace = []rune("[") + closeBrace = []rune("]") +) + +func newSepToken(b []rune) (Token, int, error) { + tok := Token{} + + switch b[0] { + case '[': + tok = newToken(TokenSep, openBrace, NoneType) + case ']': + tok = newToken(TokenSep, closeBrace, NoneType) + default: + return tok, 0, NewParseError(fmt.Sprintf("unexpected sep type, %v", b[0])) + } + return tok, 1, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go new file mode 100644 index 00000000000..da7a4049cfa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go @@ -0,0 +1,45 @@ +package ini + +// skipper is used to skip certain blocks of an ini file. +// Currently skipper is used to skip nested blocks of ini +// files. See example below +// +// [ foo ] +// nested = ; this section will be skipped +// a=b +// c=d +// bar=baz ; this will be included +type skipper struct { + shouldSkip bool + TokenSet bool + prevTok Token +} + +func newSkipper() skipper { + return skipper{ + prevTok: emptyToken, + } +} + +func (s *skipper) ShouldSkip(tok Token) bool { + // should skip state will be modified only if previous token was new line (NL); + // and the current token is not WhiteSpace (WS). + if s.shouldSkip && + s.prevTok.Type() == TokenNL && + tok.Type() != TokenWS { + s.Continue() + return false + } + s.prevTok = tok + return s.shouldSkip +} + +func (s *skipper) Skip() { + s.shouldSkip = true +} + +func (s *skipper) Continue() { + s.shouldSkip = false + // empty token is assigned as we return to default state, when should skip is false + s.prevTok = emptyToken +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go new file mode 100644 index 00000000000..18f3fe89317 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go @@ -0,0 +1,35 @@ +package ini + +// Statement is an empty AST mostly used for transitioning states. +func newStatement() AST { + return newAST(ASTKindStatement, AST{}) +} + +// SectionStatement represents a section AST +func newSectionStatement(tok Token) AST { + return newASTWithRootToken(ASTKindSectionStatement, tok) +} + +// ExprStatement represents a completed expression AST +func newExprStatement(ast AST) AST { + return newAST(ASTKindExprStatement, ast) +} + +// CommentStatement represents a comment in the ini definition. +// +// grammar: +// comment -> #comment' | ;comment' +// comment' -> epsilon | value +func newCommentStatement(tok Token) AST { + return newAST(ASTKindCommentStatement, newExpression(tok)) +} + +// CompletedSectionStatement represents a completed section +func newCompletedSectionStatement(ast AST) AST { + return newAST(ASTKindCompletedSectionStatement, ast) +} + +// SkipStatement is used to skip whole statements +func newSkipStatement(ast AST) AST { + return newAST(ASTKindSkipStatement, ast) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go new file mode 100644 index 00000000000..305999d29be --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go @@ -0,0 +1,284 @@ +package ini + +import ( + "fmt" +) + +// getStringValue will return a quoted string and the amount +// of bytes read +// +// an error will be returned if the string is not properly formatted +func getStringValue(b []rune) (int, error) { + if b[0] != '"' { + return 0, NewParseError("strings must start with '\"'") + } + + endQuote := false + i := 1 + + for ; i < len(b) && !endQuote; i++ { + if escaped := isEscaped(b[:i], b[i]); b[i] == '"' && !escaped { + endQuote = true + break + } else if escaped { + /*c, err := getEscapedByte(b[i]) + if err != nil { + return 0, err + } + + b[i-1] = c + b = append(b[:i], b[i+1:]...) + i--*/ + + continue + } + } + + if !endQuote { + return 0, NewParseError("missing '\"' in string value") + } + + return i + 1, nil +} + +// getBoolValue will return a boolean and the amount +// of bytes read +// +// an error will be returned if the boolean is not of a correct +// value +func getBoolValue(b []rune) (int, error) { + if len(b) < 4 { + return 0, NewParseError("invalid boolean value") + } + + n := 0 + for _, lv := range literalValues { + if len(lv) > len(b) { + continue + } + + if isLitValue(lv, b) { + n = len(lv) + } + } + + if n == 0 { + return 0, NewParseError("invalid boolean value") + } + + return n, nil +} + +// getNumericalValue will return a numerical string, the amount +// of bytes read, and the base of the number +// +// an error will be returned if the number is not of a correct +// value +func getNumericalValue(b []rune) (int, int, error) { + if !isDigit(b[0]) { + return 0, 0, NewParseError("invalid digit value") + } + + i := 0 + helper := numberHelper{} + +loop: + for negativeIndex := 0; i < len(b); i++ { + negativeIndex++ + + if !isDigit(b[i]) { + switch b[i] { + case '-': + if helper.IsNegative() || negativeIndex != 1 { + return 0, 0, NewParseError("parse error '-'") + } + + n := getNegativeNumber(b[i:]) + i += (n - 1) + helper.Determine(b[i]) + continue + case '.': + if err := helper.Determine(b[i]); err != nil { + return 0, 0, err + } + case 'e', 'E': + if err := helper.Determine(b[i]); err != nil { + return 0, 0, err + } + + negativeIndex = 0 + case 'b': + if helper.numberFormat == hex { + break + } + fallthrough + case 'o', 'x': + if i == 0 && b[i] != '0' { + return 0, 0, NewParseError("incorrect base format, expected leading '0'") + } + + if i != 1 { + return 0, 0, NewParseError(fmt.Sprintf("incorrect base format found %s at %d index", string(b[i]), i)) + } + + if err := helper.Determine(b[i]); err != nil { + return 0, 0, err + } + default: + if isWhitespace(b[i]) { + break loop + } + + if isNewline(b[i:]) { + break loop + } + + if !(helper.numberFormat == hex && isHexByte(b[i])) { + if i+2 < len(b) && !isNewline(b[i:i+2]) { + return 0, 0, NewParseError("invalid numerical character") + } else if !isNewline([]rune{b[i]}) { + return 0, 0, NewParseError("invalid numerical character") + } + + break loop + } + } + } + } + + return helper.Base(), i, nil +} + +// isDigit will return whether or not something is an integer +func isDigit(b rune) bool { + return b >= '0' && b <= '9' +} + +func hasExponent(v []rune) bool { + return contains(v, 'e') || contains(v, 'E') +} + +func isBinaryByte(b rune) bool { + switch b { + case '0', '1': + return true + default: + return false + } +} + +func isOctalByte(b rune) bool { + switch b { + case '0', '1', '2', '3', '4', '5', '6', '7': + return true + default: + return false + } +} + +func isHexByte(b rune) bool { + if isDigit(b) { + return true + } + return (b >= 'A' && b <= 'F') || + (b >= 'a' && b <= 'f') +} + +func getValue(b []rune) (int, error) { + i := 0 + + for i < len(b) { + if isNewline(b[i:]) { + break + } + + if isOp(b[i:]) { + break + } + + valid, n, err := isValid(b[i:]) + if err != nil { + return 0, err + } + + if !valid { + break + } + + i += n + } + + return i, nil +} + +// getNegativeNumber will return a negative number from a +// byte slice. This will iterate through all characters until +// a non-digit has been found. +func getNegativeNumber(b []rune) int { + if b[0] != '-' { + return 0 + } + + i := 1 + for ; i < len(b); i++ { + if !isDigit(b[i]) { + return i + } + } + + return i +} + +// isEscaped will return whether or not the character is an escaped +// character. +func isEscaped(value []rune, b rune) bool { + if len(value) == 0 { + return false + } + + switch b { + case '\'': // single quote + case '"': // quote + case 'n': // newline + case 't': // tab + case '\\': // backslash + default: + return false + } + + return value[len(value)-1] == '\\' +} + +func getEscapedByte(b rune) (rune, error) { + switch b { + case '\'': // single quote + return '\'', nil + case '"': // quote + return '"', nil + case 'n': // newline + return '\n', nil + case 't': // table + return '\t', nil + case '\\': // backslash + return '\\', nil + default: + return b, NewParseError(fmt.Sprintf("invalid escaped character %c", b)) + } +} + +func removeEscapedCharacters(b []rune) []rune { + for i := 0; i < len(b); i++ { + if isEscaped(b[:i], b[i]) { + c, err := getEscapedByte(b[i]) + if err != nil { + return b + } + + b[i-1] = c + b = append(b[:i], b[i+1:]...) + i-- + } + } + + return b +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go new file mode 100644 index 00000000000..94841c32443 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go @@ -0,0 +1,166 @@ +package ini + +import ( + "fmt" + "sort" +) + +// Visitor is an interface used by walkers that will +// traverse an array of ASTs. +type Visitor interface { + VisitExpr(AST) error + VisitStatement(AST) error +} + +// DefaultVisitor is used to visit statements and expressions +// and ensure that they are both of the correct format. +// In addition, upon visiting this will build sections and populate +// the Sections field which can be used to retrieve profile +// configuration. +type DefaultVisitor struct { + scope string + Sections Sections +} + +// NewDefaultVisitor return a DefaultVisitor +func NewDefaultVisitor() *DefaultVisitor { + return &DefaultVisitor{ + Sections: Sections{ + container: map[string]Section{}, + }, + } +} + +// VisitExpr visits expressions... +func (v *DefaultVisitor) VisitExpr(expr AST) error { + t := v.Sections.container[v.scope] + if t.values == nil { + t.values = values{} + } + + switch expr.Kind { + case ASTKindExprStatement: + opExpr := expr.GetRoot() + switch opExpr.Kind { + case ASTKindEqualExpr: + children := opExpr.GetChildren() + if len(children) <= 1 { + return NewParseError("unexpected token type") + } + + rhs := children[1] + + if rhs.Root.Type() != TokenLit { + return NewParseError("unexpected token type") + } + + key := EqualExprKey(opExpr) + v, err := newValue(rhs.Root.ValueType, rhs.Root.base, rhs.Root.Raw()) + if err != nil { + return err + } + + t.values[key] = v + default: + return NewParseError(fmt.Sprintf("unsupported expression %v", expr)) + } + default: + return NewParseError(fmt.Sprintf("unsupported expression %v", expr)) + } + + v.Sections.container[v.scope] = t + return nil +} + +// VisitStatement visits statements... +func (v *DefaultVisitor) VisitStatement(stmt AST) error { + switch stmt.Kind { + case ASTKindCompletedSectionStatement: + child := stmt.GetRoot() + if child.Kind != ASTKindSectionStatement { + return NewParseError(fmt.Sprintf("unsupported child statement: %T", child)) + } + + name := string(child.Root.Raw()) + v.Sections.container[name] = Section{} + v.scope = name + default: + return NewParseError(fmt.Sprintf("unsupported statement: %s", stmt.Kind)) + } + + return nil +} + +// Sections is a map of Section structures that represent +// a configuration. +type Sections struct { + container map[string]Section +} + +// GetSection will return section p. If section p does not exist, +// false will be returned in the second parameter. +func (t Sections) GetSection(p string) (Section, bool) { + v, ok := t.container[p] + return v, ok +} + +// values represents a map of union values. +type values map[string]Value + +// List will return a list of all sections that were successfully +// parsed. +func (t Sections) List() []string { + keys := make([]string, len(t.container)) + i := 0 + for k := range t.container { + keys[i] = k + i++ + } + + sort.Strings(keys) + return keys +} + +// Section contains a name and values. This represent +// a sectioned entry in a configuration file. +type Section struct { + Name string + values values +} + +// Has will return whether or not an entry exists in a given section +func (t Section) Has(k string) bool { + _, ok := t.values[k] + return ok +} + +// ValueType will returned what type the union is set to. If +// k was not found, the NoneType will be returned. +func (t Section) ValueType(k string) (ValueType, bool) { + v, ok := t.values[k] + return v.Type, ok +} + +// Bool returns a bool value at k +func (t Section) Bool(k string) bool { + return t.values[k].BoolValue() +} + +// Int returns an integer value at k +func (t Section) Int(k string) int64 { + return t.values[k].IntValue() +} + +// Float64 returns a float value at k +func (t Section) Float64(k string) float64 { + return t.values[k].FloatValue() +} + +// String returns the string value at k +func (t Section) String(k string) string { + _, ok := t.values[k] + if !ok { + return "" + } + return t.values[k].StringValue() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go new file mode 100644 index 00000000000..99915f7f777 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go @@ -0,0 +1,25 @@ +package ini + +// Walk will traverse the AST using the v, the Visitor. +func Walk(tree []AST, v Visitor) error { + for _, node := range tree { + switch node.Kind { + case ASTKindExpr, + ASTKindExprStatement: + + if err := v.VisitExpr(node); err != nil { + return err + } + case ASTKindStatement, + ASTKindCompletedSectionStatement, + ASTKindNestedSectionStatement, + ASTKindCompletedNestedSectionStatement: + + if err := v.VisitStatement(node); err != nil { + return err + } + } + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go new file mode 100644 index 00000000000..7ffb4ae06ff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go @@ -0,0 +1,24 @@ +package ini + +import ( + "unicode" +) + +// isWhitespace will return whether or not the character is +// a whitespace character. +// +// Whitespace is defined as a space or tab. +func isWhitespace(c rune) bool { + return unicode.IsSpace(c) && c != '\n' && c != '\r' +} + +func newWSToken(b []rune) (Token, int, error) { + i := 0 + for ; i < len(b); i++ { + if !isWhitespace(b[i]) { + break + } + } + + return newToken(TokenWS, b[:i], NoneType), i, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go new file mode 100644 index 00000000000..6c443988bbc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/byte.go @@ -0,0 +1,12 @@ +package sdkio + +const ( + // Byte is 8 bits + Byte int64 = 1 + // KibiByte (KiB) is 1024 Bytes + KibiByte = Byte * 1024 + // MebiByte (MiB) is 1024 KiB + MebiByte = KibiByte * 1024 + // GibiByte (GiB) is 1024 MiB + GibiByte = MebiByte * 1024 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go new file mode 100644 index 00000000000..5aa9137e0f9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go @@ -0,0 +1,10 @@ +// +build !go1.7 + +package sdkio + +// Copy of Go 1.7 io package's Seeker constants. +const ( + SeekStart = 0 // seek relative to the origin of the file + SeekCurrent = 1 // seek relative to the current offset + SeekEnd = 2 // seek relative to the end +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go new file mode 100644 index 00000000000..e5f005613b7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go @@ -0,0 +1,12 @@ +// +build go1.7 + +package sdkio + +import "io" + +// Alias for Go 1.7 io package Seeker constants +const ( + SeekStart = io.SeekStart // seek relative to the origin of the file + SeekCurrent = io.SeekCurrent // seek relative to the current offset + SeekEnd = io.SeekEnd // seek relative to the end +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go new file mode 100644 index 00000000000..44898eed0fd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor.go @@ -0,0 +1,15 @@ +// +build go1.10 + +package sdkmath + +import "math" + +// Round returns the nearest integer, rounding half away from zero. +// +// Special cases are: +// Round(±0) = ±0 +// Round(±Inf) = ±Inf +// Round(NaN) = NaN +func Round(x float64) float64 { + return math.Round(x) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go new file mode 100644 index 00000000000..810ec7f08b0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkmath/floor_go1.9.go @@ -0,0 +1,56 @@ +// +build !go1.10 + +package sdkmath + +import "math" + +// Copied from the Go standard library's (Go 1.12) math/floor.go for use in +// Go version prior to Go 1.10. +const ( + uvone = 0x3FF0000000000000 + mask = 0x7FF + shift = 64 - 11 - 1 + bias = 1023 + signMask = 1 << 63 + fracMask = 1<= 0.5 { + // return t + Copysign(1, x) + // } + // return t + // } + bits := math.Float64bits(x) + e := uint(bits>>shift) & mask + if e < bias { + // Round abs(x) < 1 including denormals. + bits &= signMask // +-0 + if e == bias-1 { + bits |= uvone // +-1 + } + } else if e < bias+shift { + // Round any abs(x) >= 1 containing a fractional component [0,1). + // + // Numbers with larger exponents are returned unchanged since they + // must be either an integer, infinity, or NaN. + const half = 1 << (shift - 1) + e -= bias + bits += half >> e + bits &^= fracMask >> e + } + return math.Float64frombits(bits) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go new file mode 100644 index 00000000000..0c9802d8770 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go @@ -0,0 +1,29 @@ +package sdkrand + +import ( + "math/rand" + "sync" + "time" +) + +// lockedSource is a thread-safe implementation of rand.Source +type lockedSource struct { + lk sync.Mutex + src rand.Source +} + +func (r *lockedSource) Int63() (n int64) { + r.lk.Lock() + n = r.src.Int63() + r.lk.Unlock() + return +} + +func (r *lockedSource) Seed(seed int64) { + r.lk.Lock() + r.src.Seed(seed) + r.lk.Unlock() +} + +// SeededRand is a new RNG using a thread safe implementation of rand.Source +var SeededRand = rand.New(&lockedSource{src: rand.NewSource(time.Now().UnixNano())}) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go new file mode 100644 index 00000000000..f4651da2da5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read.go @@ -0,0 +1,11 @@ +// +build go1.6 + +package sdkrand + +import "math/rand" + +// Read provides the stub for math.Rand.Read method support for go version's +// 1.6 and greater. +func Read(r *rand.Rand, p []byte) (int, error) { + return r.Read(p) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go new file mode 100644 index 00000000000..b1d93a33d48 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkrand/read_1_5.go @@ -0,0 +1,24 @@ +// +build !go1.6 + +package sdkrand + +import "math/rand" + +// Read backfills Go 1.6's math.Rand.Reader for Go 1.5 +func Read(r *rand.Rand, p []byte) (n int, err error) { + // Copy of Go standard libraries math package's read function not added to + // standard library until Go 1.6. + var pos int8 + var val int64 + for n = 0; n < len(p); n++ { + if pos == 0 { + val = r.Int63() + pos = 7 + } + p[n] = byte(val) + val >>= 8 + pos-- + } + + return n, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go new file mode 100644 index 00000000000..38ea61afeaa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go @@ -0,0 +1,23 @@ +package sdkuri + +import ( + "path" + "strings" +) + +// PathJoin will join the elements of the path delimited by the "/" +// character. Similar to path.Join with the exception the trailing "/" +// character is preserved if present. +func PathJoin(elems ...string) string { + if len(elems) == 0 { + return "" + } + + hasTrailing := strings.HasSuffix(elems[len(elems)-1], "/") + str := path.Join(elems...) + if hasTrailing && str != "/" { + str += "/" + } + + return str +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go new file mode 100644 index 00000000000..7da8a49ce52 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go @@ -0,0 +1,12 @@ +package shareddefaults + +const ( + // ECSCredsProviderEnvVar is an environmental variable key used to + // determine which path needs to be hit. + ECSCredsProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" +) + +// ECSContainerCredentialsURI is the endpoint to retrieve container +// credentials. This can be overridden to test to ensure the credential process +// is behaving correctly. +var ECSContainerCredentialsURI = "http://169.254.170.2" diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go new file mode 100644 index 00000000000..ebcbc2b40a3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go @@ -0,0 +1,40 @@ +package shareddefaults + +import ( + "os" + "path/filepath" + "runtime" +) + +// SharedCredentialsFilename returns the SDK's default file path +// for the shared credentials file. +// +// Builds the shared config file path based on the OS's platform. +// +// - Linux/Unix: $HOME/.aws/credentials +// - Windows: %USERPROFILE%\.aws\credentials +func SharedCredentialsFilename() string { + return filepath.Join(UserHomeDir(), ".aws", "credentials") +} + +// SharedConfigFilename returns the SDK's default file path for +// the shared config file. +// +// Builds the shared config file path based on the OS's platform. +// +// - Linux/Unix: $HOME/.aws/config +// - Windows: %USERPROFILE%\.aws\config +func SharedConfigFilename() string { + return filepath.Join(UserHomeDir(), ".aws", "config") +} + +// UserHomeDir returns the home directory for the user the process is +// running under. +func UserHomeDir() string { + if runtime.GOOS == "windows" { // Windows + return os.Getenv("USERPROFILE") + } + + // *nix + return os.Getenv("HOME") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go index eedc5bd7d44..50c5ed76005 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/build.go @@ -21,10 +21,11 @@ func Build(r *request.Request) { "Version": {r.ClientInfo.APIVersion}, } if err := queryutil.Parse(body, r.Params, true); err != nil { - r.Error = awserr.New("SerializationError", "failed encoding EC2 Query request", err) + r.Error = awserr.New(request.ErrCodeSerialization, + "failed encoding EC2 Query request", err) } - if r.ExpireTime == 0 { + if !r.IsPresigned() { r.HTTPRequest.Method = "POST" r.HTTPRequest.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8") r.SetBufferBody([]byte(body.Encode())) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go index 095e97ccf91..105d732f9d3 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go @@ -4,7 +4,6 @@ package ec2query import ( "encoding/xml" - "io" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" @@ -27,7 +26,12 @@ func Unmarshal(r *request.Request) { decoder := xml.NewDecoder(r.HTTPResponse.Body) err := xmlutil.UnmarshalXML(r.Data, decoder, "") if err != nil { - r.Error = awserr.New("SerializationError", "failed decoding EC2 Query response", err) + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, + "failed decoding EC2 Query response", err), + r.HTTPResponse.StatusCode, + r.RequestID, + ) return } } @@ -35,7 +39,11 @@ func Unmarshal(r *request.Request) { // UnmarshalMeta unmarshals response headers for the EC2 protocol. func UnmarshalMeta(r *request.Request) { - // TODO implement unmarshaling of request IDs + r.RequestID = r.HTTPResponse.Header.Get("X-Amzn-Requestid") + if r.RequestID == "" { + // Alternative version of request id in the header + r.RequestID = r.HTTPResponse.Header.Get("X-Amz-Request-Id") + } } type xmlErrorResponse struct { @@ -49,15 +57,21 @@ type xmlErrorResponse struct { func UnmarshalError(r *request.Request) { defer r.HTTPResponse.Body.Close() - resp := &xmlErrorResponse{} - err := xml.NewDecoder(r.HTTPResponse.Body).Decode(resp) - if err != nil && err != io.EOF { - r.Error = awserr.New("SerializationError", "failed decoding EC2 Query error response", err) - } else { + var respErr xmlErrorResponse + err := xmlutil.UnmarshalXMLError(&respErr, r.HTTPResponse.Body) + if err != nil { r.Error = awserr.NewRequestFailure( - awserr.New(resp.Code, resp.Message, nil), + awserr.New(request.ErrCodeSerialization, + "failed to unmarshal error message", err), r.HTTPResponse.StatusCode, - resp.RequestID, + r.RequestID, ) + return } + + r.Error = awserr.NewRequestFailure( + awserr.New(respErr.Code, respErr.Message, nil), + r.HTTPResponse.StatusCode, + respErr.RequestID, + ) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go new file mode 100644 index 00000000000..d7d42db0a6a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/host.go @@ -0,0 +1,68 @@ +package protocol + +import ( + "strings" + + "github.com/aws/aws-sdk-go/aws/request" +) + +// ValidateEndpointHostHandler is a request handler that will validate the +// request endpoint's hosts is a valid RFC 3986 host. +var ValidateEndpointHostHandler = request.NamedHandler{ + Name: "awssdk.protocol.ValidateEndpointHostHandler", + Fn: func(r *request.Request) { + err := ValidateEndpointHost(r.Operation.Name, r.HTTPRequest.URL.Host) + if err != nil { + r.Error = err + } + }, +} + +// ValidateEndpointHost validates that the host string passed in is a valid RFC +// 3986 host. Returns error if the host is not valid. +func ValidateEndpointHost(opName, host string) error { + paramErrs := request.ErrInvalidParams{Context: opName} + labels := strings.Split(host, ".") + + for i, label := range labels { + if i == len(labels)-1 && len(label) == 0 { + // Allow trailing dot for FQDN hosts. + continue + } + + if !ValidHostLabel(label) { + paramErrs.Add(request.NewErrParamFormat( + "endpoint host label", "[a-zA-Z0-9-]{1,63}", label)) + } + } + + if len(host) > 255 { + paramErrs.Add(request.NewErrParamMaxLen( + "endpoint host", 255, host, + )) + } + + if paramErrs.Len() > 0 { + return paramErrs + } + return nil +} + +// ValidHostLabel returns if the label is a valid RFC 3986 host label. +func ValidHostLabel(label string) bool { + if l := len(label); l == 0 || l > 63 { + return false + } + for _, r := range label { + switch { + case r >= '0' && r <= '9': + case r >= 'A' && r <= 'Z': + case r >= 'a' && r <= 'z': + case r == '-': + default: + return false + } + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go new file mode 100644 index 00000000000..915b0fcafd7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go @@ -0,0 +1,54 @@ +package protocol + +import ( + "strings" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" +) + +// HostPrefixHandlerName is the handler name for the host prefix request +// handler. +const HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler" + +// NewHostPrefixHandler constructs a build handler +func NewHostPrefixHandler(prefix string, labelsFn func() map[string]string) request.NamedHandler { + builder := HostPrefixBuilder{ + Prefix: prefix, + LabelsFn: labelsFn, + } + + return request.NamedHandler{ + Name: HostPrefixHandlerName, + Fn: builder.Build, + } +} + +// HostPrefixBuilder provides the request handler to expand and prepend +// the host prefix into the operation's request endpoint host. +type HostPrefixBuilder struct { + Prefix string + LabelsFn func() map[string]string +} + +// Build updates the passed in Request with the HostPrefix template expanded. +func (h HostPrefixBuilder) Build(r *request.Request) { + if aws.BoolValue(r.Config.DisableEndpointHostPrefix) { + return + } + + var labels map[string]string + if h.LabelsFn != nil { + labels = h.LabelsFn() + } + + prefix := h.Prefix + for name, value := range labels { + prefix = strings.Replace(prefix, "{"+name+"}", value, -1) + } + + r.HTTPRequest.URL.Host = prefix + r.HTTPRequest.URL.Host + if len(r.HTTPRequest.Host) > 0 { + r.HTTPRequest.Host = prefix + r.HTTPRequest.Host + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go new file mode 100644 index 00000000000..864fb6704b4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go @@ -0,0 +1,296 @@ +// Package jsonutil provides JSON serialization of AWS requests and responses. +package jsonutil + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "math" + "reflect" + "sort" + "strconv" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/private/protocol" +) + +var timeType = reflect.ValueOf(time.Time{}).Type() +var byteSliceType = reflect.ValueOf([]byte{}).Type() + +// BuildJSON builds a JSON string for a given object v. +func BuildJSON(v interface{}) ([]byte, error) { + var buf bytes.Buffer + + err := buildAny(reflect.ValueOf(v), &buf, "") + return buf.Bytes(), err +} + +func buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + origVal := value + value = reflect.Indirect(value) + if !value.IsValid() { + return nil + } + + vtype := value.Type() + + t := tag.Get("type") + if t == "" { + switch vtype.Kind() { + case reflect.Struct: + // also it can't be a time object + if value.Type() != timeType { + t = "structure" + } + case reflect.Slice: + // also it can't be a byte slice + if _, ok := value.Interface().([]byte); !ok { + t = "list" + } + case reflect.Map: + // cannot be a JSONValue map + if _, ok := value.Interface().(aws.JSONValue); !ok { + t = "map" + } + } + } + + switch t { + case "structure": + if field, ok := vtype.FieldByName("_"); ok { + tag = field.Tag + } + return buildStruct(value, buf, tag) + case "list": + return buildList(value, buf, tag) + case "map": + return buildMap(value, buf, tag) + default: + return buildScalar(origVal, buf, tag) + } +} + +func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + if !value.IsValid() { + return nil + } + + // unwrap payloads + if payload := tag.Get("payload"); payload != "" { + field, _ := value.Type().FieldByName(payload) + tag = field.Tag + value = elemOf(value.FieldByName(payload)) + + if !value.IsValid() { + return nil + } + } + + buf.WriteByte('{') + + t := value.Type() + first := true + for i := 0; i < t.NumField(); i++ { + member := value.Field(i) + + // This allocates the most memory. + // Additionally, we cannot skip nil fields due to + // idempotency auto filling. + field := t.Field(i) + + if field.PkgPath != "" { + continue // ignore unexported fields + } + if field.Tag.Get("json") == "-" { + continue + } + if field.Tag.Get("location") != "" { + continue // ignore non-body elements + } + if field.Tag.Get("ignore") != "" { + continue + } + + if protocol.CanSetIdempotencyToken(member, field) { + token := protocol.GetIdempotencyToken() + member = reflect.ValueOf(&token) + } + + if (member.Kind() == reflect.Ptr || member.Kind() == reflect.Slice || member.Kind() == reflect.Map) && member.IsNil() { + continue // ignore unset fields + } + + if first { + first = false + } else { + buf.WriteByte(',') + } + + // figure out what this field is called + name := field.Name + if locName := field.Tag.Get("locationName"); locName != "" { + name = locName + } + + writeString(name, buf) + buf.WriteString(`:`) + + err := buildAny(member, buf, field.Tag) + if err != nil { + return err + } + + } + + buf.WriteString("}") + + return nil +} + +func buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + buf.WriteString("[") + + for i := 0; i < value.Len(); i++ { + buildAny(value.Index(i), buf, "") + + if i < value.Len()-1 { + buf.WriteString(",") + } + } + + buf.WriteString("]") + + return nil +} + +type sortedValues []reflect.Value + +func (sv sortedValues) Len() int { return len(sv) } +func (sv sortedValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] } +func (sv sortedValues) Less(i, j int) bool { return sv[i].String() < sv[j].String() } + +func buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + buf.WriteString("{") + + sv := sortedValues(value.MapKeys()) + sort.Sort(sv) + + for i, k := range sv { + if i > 0 { + buf.WriteByte(',') + } + + writeString(k.String(), buf) + buf.WriteString(`:`) + + buildAny(value.MapIndex(k), buf, "") + } + + buf.WriteString("}") + + return nil +} + +func buildScalar(v reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error { + // prevents allocation on the heap. + scratch := [64]byte{} + switch value := reflect.Indirect(v); value.Kind() { + case reflect.String: + writeString(value.String(), buf) + case reflect.Bool: + if value.Bool() { + buf.WriteString("true") + } else { + buf.WriteString("false") + } + case reflect.Int64: + buf.Write(strconv.AppendInt(scratch[:0], value.Int(), 10)) + case reflect.Float64: + f := value.Float() + if math.IsInf(f, 0) || math.IsNaN(f) { + return &json.UnsupportedValueError{Value: v, Str: strconv.FormatFloat(f, 'f', -1, 64)} + } + buf.Write(strconv.AppendFloat(scratch[:0], f, 'f', -1, 64)) + default: + switch converted := value.Interface().(type) { + case time.Time: + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.UnixTimeFormatName + } + + ts := protocol.FormatTime(format, converted) + if format != protocol.UnixTimeFormatName { + ts = `"` + ts + `"` + } + + buf.WriteString(ts) + case []byte: + if !value.IsNil() { + buf.WriteByte('"') + if len(converted) < 1024 { + // for small buffers, using Encode directly is much faster. + dst := make([]byte, base64.StdEncoding.EncodedLen(len(converted))) + base64.StdEncoding.Encode(dst, converted) + buf.Write(dst) + } else { + // for large buffers, avoid unnecessary extra temporary + // buffer space. + enc := base64.NewEncoder(base64.StdEncoding, buf) + enc.Write(converted) + enc.Close() + } + buf.WriteByte('"') + } + case aws.JSONValue: + str, err := protocol.EncodeJSONValue(converted, protocol.QuotedEscape) + if err != nil { + return fmt.Errorf("unable to encode JSONValue, %v", err) + } + buf.WriteString(str) + default: + return fmt.Errorf("unsupported JSON value %v (%s)", value.Interface(), value.Type()) + } + } + return nil +} + +var hex = "0123456789abcdef" + +func writeString(s string, buf *bytes.Buffer) { + buf.WriteByte('"') + for i := 0; i < len(s); i++ { + if s[i] == '"' { + buf.WriteString(`\"`) + } else if s[i] == '\\' { + buf.WriteString(`\\`) + } else if s[i] == '\b' { + buf.WriteString(`\b`) + } else if s[i] == '\f' { + buf.WriteString(`\f`) + } else if s[i] == '\r' { + buf.WriteString(`\r`) + } else if s[i] == '\t' { + buf.WriteString(`\t`) + } else if s[i] == '\n' { + buf.WriteString(`\n`) + } else if s[i] < 32 { + buf.WriteString("\\u00") + buf.WriteByte(hex[s[i]>>4]) + buf.WriteByte(hex[s[i]&0xF]) + } else { + buf.WriteByte(s[i]) + } + } + buf.WriteByte('"') +} + +// Returns the reflection element of a value, if it is a pointer. +func elemOf(value reflect.Value) reflect.Value { + for value.Kind() == reflect.Ptr { + value = value.Elem() + } + return value +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go new file mode 100644 index 00000000000..ea0da79a5e0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go @@ -0,0 +1,250 @@ +package jsonutil + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "reflect" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/private/protocol" +) + +// UnmarshalJSONError unmarshal's the reader's JSON document into the passed in +// type. The value to unmarshal the json document into must be a pointer to the +// type. +func UnmarshalJSONError(v interface{}, stream io.Reader) error { + var errBuf bytes.Buffer + body := io.TeeReader(stream, &errBuf) + + err := json.NewDecoder(body).Decode(v) + if err != nil { + msg := "failed decoding error message" + if err == io.EOF { + msg = "error message missing" + err = nil + } + return awserr.NewUnmarshalError(err, msg, errBuf.Bytes()) + } + + return nil +} + +// UnmarshalJSON reads a stream and unmarshals the results in object v. +func UnmarshalJSON(v interface{}, stream io.Reader) error { + var out interface{} + + err := json.NewDecoder(stream).Decode(&out) + if err == io.EOF { + return nil + } else if err != nil { + return err + } + + return unmarshalAny(reflect.ValueOf(v), out, "") +} + +func unmarshalAny(value reflect.Value, data interface{}, tag reflect.StructTag) error { + vtype := value.Type() + if vtype.Kind() == reflect.Ptr { + vtype = vtype.Elem() // check kind of actual element type + } + + t := tag.Get("type") + if t == "" { + switch vtype.Kind() { + case reflect.Struct: + // also it can't be a time object + if _, ok := value.Interface().(*time.Time); !ok { + t = "structure" + } + case reflect.Slice: + // also it can't be a byte slice + if _, ok := value.Interface().([]byte); !ok { + t = "list" + } + case reflect.Map: + // cannot be a JSONValue map + if _, ok := value.Interface().(aws.JSONValue); !ok { + t = "map" + } + } + } + + switch t { + case "structure": + if field, ok := vtype.FieldByName("_"); ok { + tag = field.Tag + } + return unmarshalStruct(value, data, tag) + case "list": + return unmarshalList(value, data, tag) + case "map": + return unmarshalMap(value, data, tag) + default: + return unmarshalScalar(value, data, tag) + } +} + +func unmarshalStruct(value reflect.Value, data interface{}, tag reflect.StructTag) error { + if data == nil { + return nil + } + mapData, ok := data.(map[string]interface{}) + if !ok { + return fmt.Errorf("JSON value is not a structure (%#v)", data) + } + + t := value.Type() + if value.Kind() == reflect.Ptr { + if value.IsNil() { // create the structure if it's nil + s := reflect.New(value.Type().Elem()) + value.Set(s) + value = s + } + + value = value.Elem() + t = t.Elem() + } + + // unwrap any payloads + if payload := tag.Get("payload"); payload != "" { + field, _ := t.FieldByName(payload) + return unmarshalAny(value.FieldByName(payload), data, field.Tag) + } + + for i := 0; i < t.NumField(); i++ { + field := t.Field(i) + if field.PkgPath != "" { + continue // ignore unexported fields + } + + // figure out what this field is called + name := field.Name + if locName := field.Tag.Get("locationName"); locName != "" { + name = locName + } + + member := value.FieldByIndex(field.Index) + err := unmarshalAny(member, mapData[name], field.Tag) + if err != nil { + return err + } + } + return nil +} + +func unmarshalList(value reflect.Value, data interface{}, tag reflect.StructTag) error { + if data == nil { + return nil + } + listData, ok := data.([]interface{}) + if !ok { + return fmt.Errorf("JSON value is not a list (%#v)", data) + } + + if value.IsNil() { + l := len(listData) + value.Set(reflect.MakeSlice(value.Type(), l, l)) + } + + for i, c := range listData { + err := unmarshalAny(value.Index(i), c, "") + if err != nil { + return err + } + } + + return nil +} + +func unmarshalMap(value reflect.Value, data interface{}, tag reflect.StructTag) error { + if data == nil { + return nil + } + mapData, ok := data.(map[string]interface{}) + if !ok { + return fmt.Errorf("JSON value is not a map (%#v)", data) + } + + if value.IsNil() { + value.Set(reflect.MakeMap(value.Type())) + } + + for k, v := range mapData { + kvalue := reflect.ValueOf(k) + vvalue := reflect.New(value.Type().Elem()).Elem() + + unmarshalAny(vvalue, v, "") + value.SetMapIndex(kvalue, vvalue) + } + + return nil +} + +func unmarshalScalar(value reflect.Value, data interface{}, tag reflect.StructTag) error { + + switch d := data.(type) { + case nil: + return nil // nothing to do here + case string: + switch value.Interface().(type) { + case *string: + value.Set(reflect.ValueOf(&d)) + case []byte: + b, err := base64.StdEncoding.DecodeString(d) + if err != nil { + return err + } + value.Set(reflect.ValueOf(b)) + case *time.Time: + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.ISO8601TimeFormatName + } + + t, err := protocol.ParseTime(format, d) + if err != nil { + return err + } + value.Set(reflect.ValueOf(&t)) + case aws.JSONValue: + // No need to use escaping as the value is a non-quoted string. + v, err := protocol.DecodeJSONValue(d, protocol.NoEscape) + if err != nil { + return err + } + value.Set(reflect.ValueOf(v)) + default: + return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) + } + case float64: + switch value.Interface().(type) { + case *int64: + di := int64(d) + value.Set(reflect.ValueOf(&di)) + case *float64: + value.Set(reflect.ValueOf(&d)) + case *time.Time: + // Time unmarshaled from a float64 can only be epoch seconds + t := time.Unix(int64(d), 0).UTC() + value.Set(reflect.ValueOf(&t)) + default: + return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) + } + case bool: + switch value.Interface().(type) { + case *bool: + value.Set(reflect.ValueOf(&d)) + default: + return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type()) + } + default: + return fmt.Errorf("unsupported JSON value (%v)", data) + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go new file mode 100644 index 00000000000..776d1101843 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go @@ -0,0 +1,76 @@ +package protocol + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "strconv" + + "github.com/aws/aws-sdk-go/aws" +) + +// EscapeMode is the mode that should be use for escaping a value +type EscapeMode uint + +// The modes for escaping a value before it is marshaled, and unmarshaled. +const ( + NoEscape EscapeMode = iota + Base64Escape + QuotedEscape +) + +// EncodeJSONValue marshals the value into a JSON string, and optionally base64 +// encodes the string before returning it. +// +// Will panic if the escape mode is unknown. +func EncodeJSONValue(v aws.JSONValue, escape EscapeMode) (string, error) { + b, err := json.Marshal(v) + if err != nil { + return "", err + } + + switch escape { + case NoEscape: + return string(b), nil + case Base64Escape: + return base64.StdEncoding.EncodeToString(b), nil + case QuotedEscape: + return strconv.Quote(string(b)), nil + } + + panic(fmt.Sprintf("EncodeJSONValue called with unknown EscapeMode, %v", escape)) +} + +// DecodeJSONValue will attempt to decode the string input as a JSONValue. +// Optionally decoding base64 the value first before JSON unmarshaling. +// +// Will panic if the escape mode is unknown. +func DecodeJSONValue(v string, escape EscapeMode) (aws.JSONValue, error) { + var b []byte + var err error + + switch escape { + case NoEscape: + b = []byte(v) + case Base64Escape: + b, err = base64.StdEncoding.DecodeString(v) + case QuotedEscape: + var u string + u, err = strconv.Unquote(v) + b = []byte(u) + default: + panic(fmt.Sprintf("DecodeJSONValue called with unknown EscapeMode, %v", escape)) + } + + if err != nil { + return nil, err + } + + m := aws.JSONValue{} + err = json.Unmarshal(b, &m) + if err != nil { + return nil, err + } + + return m, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go new file mode 100644 index 00000000000..e21614a1250 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go @@ -0,0 +1,81 @@ +package protocol + +import ( + "io" + "io/ioutil" + "net/http" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/aws/request" +) + +// PayloadUnmarshaler provides the interface for unmarshaling a payload's +// reader into a SDK shape. +type PayloadUnmarshaler interface { + UnmarshalPayload(io.Reader, interface{}) error +} + +// HandlerPayloadUnmarshal implements the PayloadUnmarshaler from a +// HandlerList. This provides the support for unmarshaling a payload reader to +// a shape without needing a SDK request first. +type HandlerPayloadUnmarshal struct { + Unmarshalers request.HandlerList +} + +// UnmarshalPayload unmarshals the io.Reader payload into the SDK shape using +// the Unmarshalers HandlerList provided. Returns an error if unable +// unmarshaling fails. +func (h HandlerPayloadUnmarshal) UnmarshalPayload(r io.Reader, v interface{}) error { + req := &request.Request{ + HTTPRequest: &http.Request{}, + HTTPResponse: &http.Response{ + StatusCode: 200, + Header: http.Header{}, + Body: ioutil.NopCloser(r), + }, + Data: v, + } + + h.Unmarshalers.Run(req) + + return req.Error +} + +// PayloadMarshaler provides the interface for marshaling a SDK shape into and +// io.Writer. +type PayloadMarshaler interface { + MarshalPayload(io.Writer, interface{}) error +} + +// HandlerPayloadMarshal implements the PayloadMarshaler from a HandlerList. +// This provides support for marshaling a SDK shape into an io.Writer without +// needing a SDK request first. +type HandlerPayloadMarshal struct { + Marshalers request.HandlerList +} + +// MarshalPayload marshals the SDK shape into the io.Writer using the +// Marshalers HandlerList provided. Returns an error if unable if marshal +// fails. +func (h HandlerPayloadMarshal) MarshalPayload(w io.Writer, v interface{}) error { + req := request.New( + aws.Config{}, + metadata.ClientInfo{}, + request.Handlers{}, + nil, + &request.Operation{HTTPMethod: "GET"}, + v, + nil, + ) + + h.Marshalers.Run(req) + + if req.Error != nil { + return req.Error + } + + io.Copy(w, req.GetBody()) + + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go index 18169f0f8ce..0cb99eb5796 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go @@ -21,11 +21,11 @@ func Build(r *request.Request) { "Version": {r.ClientInfo.APIVersion}, } if err := queryutil.Parse(body, r.Params, false); err != nil { - r.Error = awserr.New("SerializationError", "failed encoding Query request", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed encoding Query request", err) return } - if r.ExpireTime == 0 { + if !r.IsPresigned() { r.HTTPRequest.Method = "POST" r.HTTPRequest.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8") r.SetBufferBody([]byte(body.Encode())) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go index f434ab7cb93..75866d01218 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go @@ -80,7 +80,6 @@ func (q *queryParser) parseStruct(v url.Values, value reflect.Value, prefix stri continue } - if protocol.CanSetIdempotencyToken(value.Field(i), field) { token := protocol.GetIdempotencyToken() elemValue = reflect.ValueOf(token) @@ -122,9 +121,17 @@ func (q *queryParser) parseList(v url.Values, value reflect.Value, prefix string return nil } + if _, ok := value.Interface().([]byte); ok { + return q.parseScalar(v, value, prefix, tag) + } + // check for unflattened list member if !q.isEC2 && tag.Get("flattened") == "" { - prefix += ".member" + if listName := tag.Get("locationNameList"); listName == "" { + prefix += ".member" + } else { + prefix += "." + listName + } } for i := 0; i < value.Len(); i++ { @@ -226,7 +233,12 @@ func (q *queryParser) parseScalar(v url.Values, r reflect.Value, name string, ta v.Set(name, strconv.FormatFloat(float64(value), 'f', -1, 32)) case time.Time: const ISO8601UTC = "2006-01-02T15:04:05Z" - v.Set(name, value.UTC().Format(ISO8601UTC)) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.ISO8601TimeFormatName + } + + v.Set(name, protocol.FormatTime(format, value)) default: return fmt.Errorf("unsupported value for param %s: %v (%s)", name, r.Interface(), r.Type().Name()) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go index e0f4d5a5419..f69c1efc93a 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go @@ -23,7 +23,11 @@ func Unmarshal(r *request.Request) { decoder := xml.NewDecoder(r.HTTPResponse.Body) err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result") if err != nil { - r.Error = awserr.New("SerializationError", "failed decoding Query response", err) + r.Error = awserr.NewRequestFailure( + awserr.New(request.ErrCodeSerialization, "failed decoding Query response", err), + r.HTTPResponse.StatusCode, + r.RequestID, + ) return } } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go index f2142961717..831b0110c54 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go @@ -2,65 +2,68 @@ package query import ( "encoding/xml" - "io/ioutil" + "fmt" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil" ) +// UnmarshalErrorHandler is a name request handler to unmarshal request errors +var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.query.UnmarshalError", Fn: UnmarshalError} + type xmlErrorResponse struct { - XMLName xml.Name `xml:"ErrorResponse"` - Code string `xml:"Error>Code"` - Message string `xml:"Error>Message"` - RequestID string `xml:"RequestId"` + Code string `xml:"Error>Code"` + Message string `xml:"Error>Message"` + RequestID string `xml:"RequestId"` } -type xmlServiceUnavailableResponse struct { - XMLName xml.Name `xml:"ServiceUnavailableException"` +type xmlResponseError struct { + xmlErrorResponse } -// UnmarshalErrorHandler is a name request handler to unmarshal request errors -var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.query.UnmarshalError", Fn: UnmarshalError} +func (e *xmlResponseError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + const svcUnavailableTagName = "ServiceUnavailableException" + const errorResponseTagName = "ErrorResponse" + + switch start.Name.Local { + case svcUnavailableTagName: + e.Code = svcUnavailableTagName + e.Message = "service is unavailable" + return d.Skip() + + case errorResponseTagName: + return d.DecodeElement(&e.xmlErrorResponse, &start) + + default: + return fmt.Errorf("unknown error response tag, %v", start) + } +} // UnmarshalError unmarshals an error response for an AWS Query service. func UnmarshalError(r *request.Request) { defer r.HTTPResponse.Body.Close() - bodyBytes, err := ioutil.ReadAll(r.HTTPResponse.Body) + var respErr xmlResponseError + err := xmlutil.UnmarshalXMLError(&respErr, r.HTTPResponse.Body) if err != nil { - r.Error = awserr.New("SerializationError", "failed to read from query HTTP response body", err) - return - } - - // First check for specific error - resp := xmlErrorResponse{} - decodeErr := xml.Unmarshal(bodyBytes, &resp) - if decodeErr == nil { - reqID := resp.RequestID - if reqID == "" { - reqID = r.RequestID - } r.Error = awserr.NewRequestFailure( - awserr.New(resp.Code, resp.Message, nil), + awserr.New(request.ErrCodeSerialization, + "failed to unmarshal error message", err), r.HTTPResponse.StatusCode, - reqID, + r.RequestID, ) return } - // Check for unhandled error - servUnavailResp := xmlServiceUnavailableResponse{} - unavailErr := xml.Unmarshal(bodyBytes, &servUnavailResp) - if unavailErr == nil { - r.Error = awserr.NewRequestFailure( - awserr.New("ServiceUnavailableException", "service is unavailable", nil), - r.HTTPResponse.StatusCode, - r.RequestID, - ) - return + reqID := respErr.RequestID + if len(reqID) == 0 { + reqID = r.RequestID } - // Failed to retrieve any error message from the response body - r.Error = awserr.New("SerializationError", - "failed to decode query XML error response", decodeErr) + r.Error = awserr.NewRequestFailure( + awserr.New(respErr.Code, respErr.Message, nil), + r.HTTPResponse.StatusCode, + reqID, + ) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go index 20a41d462c2..1301b149d35 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go @@ -17,16 +17,16 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol" ) -// RFC822 returns an RFC822 formatted timestamp for AWS protocols -const RFC822 = "Mon, 2 Jan 2006 15:04:05 GMT" - // Whether the byte value can be sent without escaping in AWS URLs var noEscape [256]bool var errValueNotSet = fmt.Errorf("value not set") +var byteSliceType = reflect.TypeOf([]byte{}) + func init() { for i := 0; i < len(noEscape); i++ { // AWS expects every character except these to be escaped @@ -82,8 +82,12 @@ func buildLocationElements(r *request.Request, v reflect.Value, buildGETQuery bo if name == "" { name = field.Name } - if m.Kind() == reflect.Ptr { + if kind := m.Kind(); kind == reflect.Ptr { m = m.Elem() + } else if kind == reflect.Interface { + if !m.Elem().IsValid() { + continue + } } if !m.IsValid() { continue @@ -92,19 +96,27 @@ func buildLocationElements(r *request.Request, v reflect.Value, buildGETQuery bo continue } + // Support the ability to customize values to be marshaled as a + // blob even though they were modeled as a string. Required for S3 + // API operations like SSECustomerKey is modeled as stirng but + // required to be base64 encoded in request. + if field.Tag.Get("marshal-as") == "blob" { + m = m.Convert(byteSliceType) + } + var err error switch field.Tag.Get("location") { case "headers": // header maps - err = buildHeaderMap(&r.HTTPRequest.Header, m, field.Tag.Get("locationName")) + err = buildHeaderMap(&r.HTTPRequest.Header, m, field.Tag) case "header": - err = buildHeader(&r.HTTPRequest.Header, m, name) + err = buildHeader(&r.HTTPRequest.Header, m, name, field.Tag) case "uri": - err = buildURI(r.HTTPRequest.URL, m, name) + err = buildURI(r.HTTPRequest.URL, m, name, field.Tag) case "querystring": - err = buildQueryString(query, m, name) + err = buildQueryString(query, m, name, field.Tag) default: if buildGETQuery { - err = buildQueryString(query, m, name) + err = buildQueryString(query, m, name, field.Tag) } } r.Error = err @@ -135,7 +147,7 @@ func buildBody(r *request.Request, v reflect.Value) { case string: r.SetStringBody(reader) default: - r.Error = awserr.New("SerializationError", + r.Error = awserr.New(request.ErrCodeSerialization, "failed to encode REST request", fmt.Errorf("unknown payload type %s", payload.Type())) } @@ -145,40 +157,46 @@ func buildBody(r *request.Request, v reflect.Value) { } } -func buildHeader(header *http.Header, v reflect.Value, name string) error { - str, err := convertType(v) +func buildHeader(header *http.Header, v reflect.Value, name string, tag reflect.StructTag) error { + str, err := convertType(v, tag) if err == errValueNotSet { return nil } else if err != nil { - return awserr.New("SerializationError", "failed to encode REST request", err) + return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) } + name = strings.TrimSpace(name) + str = strings.TrimSpace(str) + header.Add(name, str) return nil } -func buildHeaderMap(header *http.Header, v reflect.Value, prefix string) error { +func buildHeaderMap(header *http.Header, v reflect.Value, tag reflect.StructTag) error { + prefix := tag.Get("locationName") for _, key := range v.MapKeys() { - str, err := convertType(v.MapIndex(key)) + str, err := convertType(v.MapIndex(key), tag) if err == errValueNotSet { continue } else if err != nil { - return awserr.New("SerializationError", "failed to encode REST request", err) + return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) } + keyStr := strings.TrimSpace(key.String()) + str = strings.TrimSpace(str) - header.Add(prefix+key.String(), str) + header.Add(prefix+keyStr, str) } return nil } -func buildURI(u *url.URL, v reflect.Value, name string) error { - value, err := convertType(v) +func buildURI(u *url.URL, v reflect.Value, name string, tag reflect.StructTag) error { + value, err := convertType(v, tag) if err == errValueNotSet { return nil } else if err != nil { - return awserr.New("SerializationError", "failed to encode REST request", err) + return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) } u.Path = strings.Replace(u.Path, "{"+name+"}", value, -1) @@ -190,7 +208,7 @@ func buildURI(u *url.URL, v reflect.Value, name string) error { return nil } -func buildQueryString(query url.Values, v reflect.Value, name string) error { +func buildQueryString(query url.Values, v reflect.Value, name string, tag reflect.StructTag) error { switch value := v.Interface().(type) { case []*string: for _, item := range value { @@ -207,11 +225,11 @@ func buildQueryString(query url.Values, v reflect.Value, name string) error { } } default: - str, err := convertType(v) + str, err := convertType(v, tag) if err == errValueNotSet { return nil } else if err != nil { - return awserr.New("SerializationError", "failed to encode REST request", err) + return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err) } query.Set(name, str) } @@ -246,13 +264,12 @@ func EscapePath(path string, encodeSep bool) string { return buf.String() } -func convertType(v reflect.Value) (string, error) { +func convertType(v reflect.Value, tag reflect.StructTag) (str string, err error) { v = reflect.Indirect(v) if !v.IsValid() { return "", errValueNotSet } - var str string switch value := v.Interface().(type) { case string: str = value @@ -265,9 +282,28 @@ func convertType(v reflect.Value) (string, error) { case float64: str = strconv.FormatFloat(value, 'f', -1, 64) case time.Time: - str = value.UTC().Format(RFC822) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.RFC822TimeFormatName + if tag.Get("location") == "querystring" { + format = protocol.ISO8601TimeFormatName + } + } + str = protocol.FormatTime(format, value) + case aws.JSONValue: + if len(value) == 0 { + return "", errValueNotSet + } + escaping := protocol.NoEscape + if tag.Get("location") == "header" { + escaping = protocol.Base64Escape + } + str, err = protocol.EncodeJSONValue(value, escaping) + if err != nil { + return "", fmt.Errorf("unable to encode JSONValue, %v", err) + } default: - err := fmt.Errorf("Unsupported value for param %v (%s)", v.Interface(), v.Type()) + err := fmt.Errorf("unsupported value for param %v (%s)", v.Interface(), v.Type()) return "", err } return str, nil diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go index 9c00921c09b..74e361e070d 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go @@ -12,8 +12,10 @@ import ( "strings" "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/private/protocol" ) // UnmarshalHandler is a named request handler for unmarshaling rest protocol requests @@ -55,7 +57,7 @@ func unmarshalBody(r *request.Request, v reflect.Value) { defer r.HTTPResponse.Body.Close() b, err := ioutil.ReadAll(r.HTTPResponse.Body) if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST response", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) } else { payload.Set(reflect.ValueOf(b)) } @@ -63,7 +65,7 @@ func unmarshalBody(r *request.Request, v reflect.Value) { defer r.HTTPResponse.Body.Close() b, err := ioutil.ReadAll(r.HTTPResponse.Body) if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST response", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) } else { str := string(b) payload.Set(reflect.ValueOf(&str)) @@ -75,7 +77,7 @@ func unmarshalBody(r *request.Request, v reflect.Value) { case "io.ReadSeeker": b, err := ioutil.ReadAll(r.HTTPResponse.Body) if err != nil { - r.Error = awserr.New("SerializationError", + r.Error = awserr.New(request.ErrCodeSerialization, "failed to read response body", err) return } @@ -83,7 +85,7 @@ func unmarshalBody(r *request.Request, v reflect.Value) { default: io.Copy(ioutil.Discard, r.HTTPResponse.Body) defer r.HTTPResponse.Body.Close() - r.Error = awserr.New("SerializationError", + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", fmt.Errorf("unknown payload type %s", payload.Type())) } @@ -111,16 +113,16 @@ func unmarshalLocationElements(r *request.Request, v reflect.Value) { case "statusCode": unmarshalStatusCode(m, r.HTTPResponse.StatusCode) case "header": - err := unmarshalHeader(m, r.HTTPResponse.Header.Get(name)) + err := unmarshalHeader(m, r.HTTPResponse.Header.Get(name), field.Tag) if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST response", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) break } case "headers": prefix := field.Tag.Get("locationName") err := unmarshalHeaderMap(m, r.HTTPResponse.Header, prefix) if err != nil { - r.Error = awserr.New("SerializationError", "failed to decode REST response", err) + r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err) break } } @@ -144,6 +146,9 @@ func unmarshalStatusCode(v reflect.Value, statusCode int) { } func unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix string) error { + if len(headers) == 0 { + return nil + } switch r.Interface().(type) { case map[string]*string: // we only support string map value types out := map[string]*string{} @@ -153,14 +158,28 @@ func unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix string) err out[k[len(prefix):]] = &v[0] } } - r.Set(reflect.ValueOf(out)) + if len(out) != 0 { + r.Set(reflect.ValueOf(out)) + } + } return nil } -func unmarshalHeader(v reflect.Value, header string) error { - if !v.IsValid() || (header == "" && v.Elem().Kind() != reflect.String) { - return nil +func unmarshalHeader(v reflect.Value, header string, tag reflect.StructTag) error { + switch tag.Get("type") { + case "jsonvalue": + if len(header) == 0 { + return nil + } + case "blob": + if len(header) == 0 { + return nil + } + default: + if !v.IsValid() || (header == "" && v.Elem().Kind() != reflect.String) { + return nil + } } switch v.Interface().(type) { @@ -171,7 +190,7 @@ func unmarshalHeader(v reflect.Value, header string) error { if err != nil { return err } - v.Set(reflect.ValueOf(&b)) + v.Set(reflect.ValueOf(b)) case *bool: b, err := strconv.ParseBool(header) if err != nil { @@ -191,11 +210,25 @@ func unmarshalHeader(v reflect.Value, header string) error { } v.Set(reflect.ValueOf(&f)) case *time.Time: - t, err := time.Parse(RFC822, header) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.RFC822TimeFormatName + } + t, err := protocol.ParseTime(format, header) if err != nil { return err } v.Set(reflect.ValueOf(&t)) + case aws.JSONValue: + escaping := protocol.NoEscape + if tag.Get("location") == "header" { + escaping = protocol.Base64Escape + } + m, err := protocol.DecodeJSONValue(header, escaping) + if err != nil { + return err + } + v.Set(reflect.ValueOf(m)) default: err := fmt.Errorf("Unsupported value for param %v (%s)", v.Interface(), v.Type()) return err diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go new file mode 100644 index 00000000000..05d4ff51925 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go @@ -0,0 +1,84 @@ +package protocol + +import ( + "math" + "strconv" + "time" + + "github.com/aws/aws-sdk-go/internal/sdkmath" +) + +// Names of time formats supported by the SDK +const ( + RFC822TimeFormatName = "rfc822" + ISO8601TimeFormatName = "iso8601" + UnixTimeFormatName = "unixTimestamp" +) + +// Time formats supported by the SDK +// Output time is intended to not contain decimals +const ( + // RFC 7231#section-7.1.1.1 timetamp format. e.g Tue, 29 Apr 2014 18:30:38 GMT + RFC822TimeFormat = "Mon, 2 Jan 2006 15:04:05 GMT" + + // This format is used for output time without seconds precision + RFC822OutputTimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT" + + // RFC3339 a subset of the ISO8601 timestamp format. e.g 2014-04-29T18:30:38Z + ISO8601TimeFormat = "2006-01-02T15:04:05.999999999Z" + + // This format is used for output time without seconds precision + ISO8601OutputTimeFormat = "2006-01-02T15:04:05Z" +) + +// IsKnownTimestampFormat returns if the timestamp format name +// is know to the SDK's protocols. +func IsKnownTimestampFormat(name string) bool { + switch name { + case RFC822TimeFormatName: + fallthrough + case ISO8601TimeFormatName: + fallthrough + case UnixTimeFormatName: + return true + default: + return false + } +} + +// FormatTime returns a string value of the time. +func FormatTime(name string, t time.Time) string { + t = t.UTC() + + switch name { + case RFC822TimeFormatName: + return t.Format(RFC822OutputTimeFormat) + case ISO8601TimeFormatName: + return t.Format(ISO8601OutputTimeFormat) + case UnixTimeFormatName: + return strconv.FormatInt(t.Unix(), 10) + default: + panic("unknown timestamp format name, " + name) + } +} + +// ParseTime attempts to parse the time given the format. Returns +// the time if it was able to be parsed, and fails otherwise. +func ParseTime(formatName, value string) (time.Time, error) { + switch formatName { + case RFC822TimeFormatName: + return time.Parse(RFC822TimeFormat, value) + case ISO8601TimeFormatName: + return time.Parse(ISO8601TimeFormat, value) + case UnixTimeFormatName: + v, err := strconv.ParseFloat(value, 64) + _, dec := math.Modf(v) + dec = sdkmath.Round(dec*1e3) / 1e3 //Rounds 0.1229999 to 0.123 + if err != nil { + return time.Time{}, err + } + return time.Unix(int64(v), int64(dec*(1e9))), nil + default: + panic("unknown timestamp format name, " + formatName) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go index c74c191967a..cf981fe9513 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go @@ -13,9 +13,13 @@ import ( "github.com/aws/aws-sdk-go/private/protocol" ) -// BuildXML will serialize params into an xml.Encoder. -// Error will be returned if the serialization of any of the params or nested values fails. +// BuildXML will serialize params into an xml.Encoder. Error will be returned +// if the serialization of any of the params or nested values fails. func BuildXML(params interface{}, e *xml.Encoder) error { + return buildXML(params, e, false) +} + +func buildXML(params interface{}, e *xml.Encoder, sorted bool) error { b := xmlBuilder{encoder: e, namespaces: map[string]string{}} root := NewXMLElement(xml.Name{}) if err := b.buildValue(reflect.ValueOf(params), root, ""); err != nil { @@ -23,7 +27,7 @@ func BuildXML(params interface{}, e *xml.Encoder) error { } for _, c := range root.Children { for _, v := range c { - return StructToXML(e, v, false) + return StructToXML(e, v, sorted) } } return nil @@ -83,15 +87,13 @@ func (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode, tag refle } } -// buildStruct adds a struct and its fields to the current XMLNode. All fields any any nested +// buildStruct adds a struct and its fields to the current XMLNode. All fields and any nested // types are converted to XMLNodes also. func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error { if !value.IsValid() { return nil } - fieldAdded := false - // unwrap payloads if payload := tag.Get("payload"); payload != "" { field, _ := value.Type().FieldByName(payload) @@ -119,6 +121,8 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl child.Attr = append(child.Attr, ns) } + var payloadFields, nonPayloadFields int + t := value.Type() for i := 0; i < value.NumField(); i++ { member := elemOf(value.Field(i)) @@ -131,11 +135,12 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl continue } - mTag := field.Tag if mTag.Get("location") != "" { // skip non-body members + nonPayloadFields++ continue } + payloadFields++ if protocol.CanSetIdempotencyToken(value.Field(i), field) { token := protocol.GetIdempotencyToken() @@ -150,11 +155,11 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl if err := b.buildValue(member, child, mTag); err != nil { return err } - - fieldAdded = true } - if fieldAdded { // only append this child if we have one ore more valid members + // Only case where the child shape is not added is if the shape only contains + // non-payload fields, e.g headers/query. + if !(payloadFields == 0 && nonPayloadFields > 0) { current.AddChild(child) } @@ -279,8 +284,12 @@ func (b *xmlBuilder) buildScalar(value reflect.Value, current *XMLNode, tag refl case float32: str = strconv.FormatFloat(float64(converted), 'f', -1, 32) case time.Time: - const ISO8601UTC = "2006-01-02T15:04:05Z" - str = converted.UTC().Format(ISO8601UTC) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.ISO8601TimeFormatName + } + + str = protocol.FormatTime(format, converted) default: return fmt.Errorf("unsupported value for param %s: %v (%s)", tag.Get("locationName"), value.Interface(), value.Type().Name()) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go new file mode 100644 index 00000000000..c1a511851f6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/sort.go @@ -0,0 +1,32 @@ +package xmlutil + +import ( + "encoding/xml" + "strings" +) + +type xmlAttrSlice []xml.Attr + +func (x xmlAttrSlice) Len() int { + return len(x) +} + +func (x xmlAttrSlice) Less(i, j int) bool { + spaceI, spaceJ := x[i].Name.Space, x[j].Name.Space + localI, localJ := x[i].Name.Local, x[j].Name.Local + valueI, valueJ := x[i].Value, x[j].Value + + spaceCmp := strings.Compare(spaceI, spaceJ) + localCmp := strings.Compare(localI, localJ) + valueCmp := strings.Compare(valueI, valueJ) + + if spaceCmp == -1 || (spaceCmp == 0 && (localCmp == -1 || (localCmp == 0 && valueCmp == -1))) { + return true + } + + return false +} + +func (x xmlAttrSlice) Swap(i, j int) { + x[i], x[j] = x[j], x[i] +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go index 64b6ddd3e18..7108d380093 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go @@ -1,6 +1,7 @@ package xmlutil import ( + "bytes" "encoding/base64" "encoding/xml" "fmt" @@ -9,13 +10,36 @@ import ( "strconv" "strings" "time" + + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/private/protocol" ) +// UnmarshalXMLError unmarshals the XML error from the stream into the value +// type specified. The value must be a pointer. If the message fails to +// unmarshal, the message content will be included in the returned error as a +// awserr.UnmarshalError. +func UnmarshalXMLError(v interface{}, stream io.Reader) error { + var errBuf bytes.Buffer + body := io.TeeReader(stream, &errBuf) + + err := xml.NewDecoder(body).Decode(v) + if err != nil && err != io.EOF { + return awserr.NewUnmarshalError(err, + "failed to unmarshal error message", errBuf.Bytes()) + } + + return nil +} + // UnmarshalXML deserializes an xml.Decoder into the container v. V // needs to match the shape of the XML expected to be decoded. // If the shape doesn't match unmarshaling will fail. func UnmarshalXML(v interface{}, d *xml.Decoder, wrapper string) error { - n, _ := XMLToStruct(d, nil) + n, err := XMLToStruct(d, nil) + if err != nil { + return err + } if n.Children != nil { for _, root := range n.Children { for _, c := range root { @@ -23,7 +47,7 @@ func UnmarshalXML(v interface{}, d *xml.Decoder, wrapper string) error { c = wrappedChild[0] // pull out wrapped element } - err := parse(reflect.ValueOf(v), c, "") + err = parse(reflect.ValueOf(v), c, "") if err != nil { if err == io.EOF { return nil @@ -49,9 +73,15 @@ func parse(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { if t == "" { switch rtype.Kind() { case reflect.Struct: - t = "structure" + // also it can't be a time object + if _, ok := r.Interface().(*time.Time); !ok { + t = "structure" + } case reflect.Slice: - t = "list" + // also it can't be a byte slice + if _, ok := r.Interface().([]byte); !ok { + t = "list" + } case reflect.Map: t = "map" } @@ -244,8 +274,12 @@ func parseScalar(r reflect.Value, node *XMLNode, tag reflect.StructTag) error { } r.Set(reflect.ValueOf(&v)) case *time.Time: - const ISO8601UTC = "2006-01-02T15:04:05Z" - t, err := time.Parse(ISO8601UTC, node.Text) + format := tag.Get("timestampFormat") + if len(format) == 0 { + format = protocol.ISO8601TimeFormatName + } + + t, err := protocol.ParseTime(format, node.Text) if err != nil { return err } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go index 3112512a210..42f71648eee 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go @@ -29,6 +29,7 @@ func NewXMLElement(name xml.Name) *XMLNode { // AddChild adds child to the XMLNode. func (n *XMLNode) AddChild(child *XMLNode) { + child.parent = n if _, ok := n.Children[child.Name.Local]; !ok { n.Children[child.Name.Local] = []*XMLNode{} } @@ -40,11 +41,16 @@ func XMLToStruct(d *xml.Decoder, s *xml.StartElement) (*XMLNode, error) { out := &XMLNode{} for { tok, err := d.Token() - if tok == nil || err == io.EOF { - break - } if err != nil { - return out, err + if err == io.EOF { + break + } else { + return out, err + } + } + + if tok == nil { + break } switch typed := tok.(type) { @@ -113,7 +119,18 @@ func (n *XMLNode) findElem(name string) (string, bool) { // StructToXML writes an XMLNode to a xml.Encoder as tokens. func StructToXML(e *xml.Encoder, node *XMLNode, sorted bool) error { - e.EncodeToken(xml.StartElement{Name: node.Name, Attr: node.Attr}) + // Sort Attributes + attrs := node.Attr + if sorted { + sortedAttrs := make([]xml.Attr, len(attrs)) + for _, k := range node.Attr { + sortedAttrs = append(sortedAttrs, k) + } + sort.Sort(xmlAttrSlice(sortedAttrs)) + attrs = sortedAttrs + } + + e.EncodeToken(xml.StartElement{Name: node.Name, Attr: attrs}) if node.Text != "" { e.EncodeToken(xml.CharData([]byte(node.Text))) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/waiter/waiter.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/waiter/waiter.go deleted file mode 100644 index b51e9449c10..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/private/waiter/waiter.go +++ /dev/null @@ -1,134 +0,0 @@ -package waiter - -import ( - "fmt" - "reflect" - "time" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/awsutil" - "github.com/aws/aws-sdk-go/aws/request" -) - -// A Config provides a collection of configuration values to setup a generated -// waiter code with. -type Config struct { - Name string - Delay int - MaxAttempts int - Operation string - Acceptors []WaitAcceptor -} - -// A WaitAcceptor provides the information needed to wait for an API operation -// to complete. -type WaitAcceptor struct { - Expected interface{} - Matcher string - State string - Argument string -} - -// A Waiter provides waiting for an operation to complete. -type Waiter struct { - Config - Client interface{} - Input interface{} -} - -// Wait waits for an operation to complete, expire max attempts, or fail. Error -// is returned if the operation fails. -func (w *Waiter) Wait() error { - client := reflect.ValueOf(w.Client) - in := reflect.ValueOf(w.Input) - method := client.MethodByName(w.Config.Operation + "Request") - - for i := 0; i < w.MaxAttempts; i++ { - res := method.Call([]reflect.Value{in}) - req := res[0].Interface().(*request.Request) - req.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Waiter")) - - err := req.Send() - for _, a := range w.Acceptors { - result := false - var vals []interface{} - switch a.Matcher { - case "pathAll", "path": - // Require all matches to be equal for result to match - vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) - if len(vals) == 0 { - break - } - result = true - for _, val := range vals { - if !awsutil.DeepEqual(val, a.Expected) { - result = false - break - } - } - case "pathAny": - // Only a single match needs to equal for the result to match - vals, _ = awsutil.ValuesAtPath(req.Data, a.Argument) - for _, val := range vals { - if awsutil.DeepEqual(val, a.Expected) { - result = true - break - } - } - case "status": - s := a.Expected.(int) - result = s == req.HTTPResponse.StatusCode - case "error": - if aerr, ok := err.(awserr.Error); ok { - result = aerr.Code() == a.Expected.(string) - } - case "pathList": - // ignored matcher - default: - logf(client, "WARNING: Waiter for %s encountered unexpected matcher: %s", - w.Config.Operation, a.Matcher) - } - - if !result { - // If there was no matching result found there is nothing more to do - // for this response, retry the request. - continue - } - - switch a.State { - case "success": - // waiter completed - return nil - case "failure": - // Waiter failure state triggered - return awserr.New("ResourceNotReady", - fmt.Sprintf("failed waiting for successful resource state"), err) - case "retry": - // clear the error and retry the operation - err = nil - default: - logf(client, "WARNING: Waiter for %s encountered unexpected state: %s", - w.Config.Operation, a.State) - } - } - if err != nil { - return err - } - - time.Sleep(time.Second * time.Duration(w.Delay)) - } - - return awserr.New("ResourceNotReady", - fmt.Sprintf("exceeded %d wait attempts", w.MaxAttempts), nil) -} - -func logf(client reflect.Value, msg string, args ...interface{}) { - cfgVal := client.FieldByName("Config") - if !cfgVal.IsValid() { - return - } - if cfg, ok := cfgVal.Interface().(*aws.Config); ok && cfg.Logger != nil { - cfg.Logger.Log(fmt.Sprintf(msg, args...)) - } -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go index cb4ded4bcee..cf3ccc75687 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/api.go @@ -1,12 +1,12 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. -// Package ec2 provides a client for Amazon Elastic Compute Cloud. package ec2 import ( "fmt" "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awsutil" "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/private/protocol" @@ -17,19 +17,18 @@ const opAcceptReservedInstancesExchangeQuote = "AcceptReservedInstancesExchangeQ // AcceptReservedInstancesExchangeQuoteRequest generates a "aws/request.Request" representing the // client's request for the AcceptReservedInstancesExchangeQuote operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AcceptReservedInstancesExchangeQuote for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AcceptReservedInstancesExchangeQuote method directly -// instead. +// See AcceptReservedInstancesExchangeQuote for more information on using the AcceptReservedInstancesExchangeQuote +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AcceptReservedInstancesExchangeQuoteRequest method. // req, resp := client.AcceptReservedInstancesExchangeQuoteRequest(params) @@ -39,7 +38,7 @@ const opAcceptReservedInstancesExchangeQuote = "AcceptReservedInstancesExchangeQ // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuote +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuote func (c *EC2) AcceptReservedInstancesExchangeQuoteRequest(input *AcceptReservedInstancesExchangeQuoteInput) (req *request.Request, output *AcceptReservedInstancesExchangeQuoteOutput) { op := &request.Operation{ Name: opAcceptReservedInstancesExchangeQuote, @@ -67,30 +66,197 @@ func (c *EC2) AcceptReservedInstancesExchangeQuoteRequest(input *AcceptReservedI // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AcceptReservedInstancesExchangeQuote for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuote +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuote func (c *EC2) AcceptReservedInstancesExchangeQuote(input *AcceptReservedInstancesExchangeQuoteInput) (*AcceptReservedInstancesExchangeQuoteOutput, error) { req, out := c.AcceptReservedInstancesExchangeQuoteRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AcceptReservedInstancesExchangeQuoteWithContext is the same as AcceptReservedInstancesExchangeQuote with the addition of +// the ability to pass a context and additional request options. +// +// See AcceptReservedInstancesExchangeQuote for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AcceptReservedInstancesExchangeQuoteWithContext(ctx aws.Context, input *AcceptReservedInstancesExchangeQuoteInput, opts ...request.Option) (*AcceptReservedInstancesExchangeQuoteOutput, error) { + req, out := c.AcceptReservedInstancesExchangeQuoteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAcceptTransitGatewayVpcAttachment = "AcceptTransitGatewayVpcAttachment" + +// AcceptTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the +// client's request for the AcceptTransitGatewayVpcAttachment operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AcceptTransitGatewayVpcAttachment for more information on using the AcceptTransitGatewayVpcAttachment +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AcceptTransitGatewayVpcAttachmentRequest method. +// req, resp := client.AcceptTransitGatewayVpcAttachmentRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayVpcAttachment +func (c *EC2) AcceptTransitGatewayVpcAttachmentRequest(input *AcceptTransitGatewayVpcAttachmentInput) (req *request.Request, output *AcceptTransitGatewayVpcAttachmentOutput) { + op := &request.Operation{ + Name: opAcceptTransitGatewayVpcAttachment, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AcceptTransitGatewayVpcAttachmentInput{} + } + + output = &AcceptTransitGatewayVpcAttachmentOutput{} + req = c.newRequest(op, input, output) + return +} + +// AcceptTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. +// +// Accepts a request to attach a VPC to a transit gateway. +// +// The VPC attachment must be in the pendingAcceptance state. Use DescribeTransitGatewayVpcAttachments +// to view your pending VPC attachment requests. Use RejectTransitGatewayVpcAttachment +// to reject a VPC attachment request. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation AcceptTransitGatewayVpcAttachment for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayVpcAttachment +func (c *EC2) AcceptTransitGatewayVpcAttachment(input *AcceptTransitGatewayVpcAttachmentInput) (*AcceptTransitGatewayVpcAttachmentOutput, error) { + req, out := c.AcceptTransitGatewayVpcAttachmentRequest(input) + return out, req.Send() +} + +// AcceptTransitGatewayVpcAttachmentWithContext is the same as AcceptTransitGatewayVpcAttachment with the addition of +// the ability to pass a context and additional request options. +// +// See AcceptTransitGatewayVpcAttachment for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AcceptTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *AcceptTransitGatewayVpcAttachmentInput, opts ...request.Option) (*AcceptTransitGatewayVpcAttachmentOutput, error) { + req, out := c.AcceptTransitGatewayVpcAttachmentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAcceptVpcEndpointConnections = "AcceptVpcEndpointConnections" + +// AcceptVpcEndpointConnectionsRequest generates a "aws/request.Request" representing the +// client's request for the AcceptVpcEndpointConnections operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AcceptVpcEndpointConnections for more information on using the AcceptVpcEndpointConnections +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AcceptVpcEndpointConnectionsRequest method. +// req, resp := client.AcceptVpcEndpointConnectionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcEndpointConnections +func (c *EC2) AcceptVpcEndpointConnectionsRequest(input *AcceptVpcEndpointConnectionsInput) (req *request.Request, output *AcceptVpcEndpointConnectionsOutput) { + op := &request.Operation{ + Name: opAcceptVpcEndpointConnections, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AcceptVpcEndpointConnectionsInput{} + } + + output = &AcceptVpcEndpointConnectionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// AcceptVpcEndpointConnections API operation for Amazon Elastic Compute Cloud. +// +// Accepts one or more interface VPC endpoint connection requests to your VPC +// endpoint service. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation AcceptVpcEndpointConnections for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcEndpointConnections +func (c *EC2) AcceptVpcEndpointConnections(input *AcceptVpcEndpointConnectionsInput) (*AcceptVpcEndpointConnectionsOutput, error) { + req, out := c.AcceptVpcEndpointConnectionsRequest(input) + return out, req.Send() +} + +// AcceptVpcEndpointConnectionsWithContext is the same as AcceptVpcEndpointConnections with the addition of +// the ability to pass a context and additional request options. +// +// See AcceptVpcEndpointConnections for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AcceptVpcEndpointConnectionsWithContext(ctx aws.Context, input *AcceptVpcEndpointConnectionsInput, opts ...request.Option) (*AcceptVpcEndpointConnectionsOutput, error) { + req, out := c.AcceptVpcEndpointConnectionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAcceptVpcPeeringConnection = "AcceptVpcPeeringConnection" // AcceptVpcPeeringConnectionRequest generates a "aws/request.Request" representing the // client's request for the AcceptVpcPeeringConnection operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AcceptVpcPeeringConnection for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AcceptVpcPeeringConnection method directly -// instead. +// See AcceptVpcPeeringConnection for more information on using the AcceptVpcPeeringConnection +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AcceptVpcPeeringConnectionRequest method. // req, resp := client.AcceptVpcPeeringConnectionRequest(params) @@ -100,7 +266,7 @@ const opAcceptVpcPeeringConnection = "AcceptVpcPeeringConnection" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnection +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnection func (c *EC2) AcceptVpcPeeringConnectionRequest(input *AcceptVpcPeeringConnectionInput) (req *request.Request, output *AcceptVpcPeeringConnectionOutput) { op := &request.Operation{ Name: opAcceptVpcPeeringConnection, @@ -121,8 +287,11 @@ func (c *EC2) AcceptVpcPeeringConnectionRequest(input *AcceptVpcPeeringConnectio // // Accept a VPC peering connection request. To accept a request, the VPC peering // connection must be in the pending-acceptance state, and you must be the owner -// of the peer VPC. Use the DescribeVpcPeeringConnections request to view your -// outstanding VPC peering connection requests. +// of the peer VPC. Use DescribeVpcPeeringConnections to view your outstanding +// VPC peering connection requests. +// +// For an inter-Region VPC peering connection request, you must accept the VPC +// peering connection in the Region of the accepter VPC. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -130,30 +299,133 @@ func (c *EC2) AcceptVpcPeeringConnectionRequest(input *AcceptVpcPeeringConnectio // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AcceptVpcPeeringConnection for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnection +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnection func (c *EC2) AcceptVpcPeeringConnection(input *AcceptVpcPeeringConnectionInput) (*AcceptVpcPeeringConnectionOutput, error) { req, out := c.AcceptVpcPeeringConnectionRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AcceptVpcPeeringConnectionWithContext is the same as AcceptVpcPeeringConnection with the addition of +// the ability to pass a context and additional request options. +// +// See AcceptVpcPeeringConnection for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AcceptVpcPeeringConnectionWithContext(ctx aws.Context, input *AcceptVpcPeeringConnectionInput, opts ...request.Option) (*AcceptVpcPeeringConnectionOutput, error) { + req, out := c.AcceptVpcPeeringConnectionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAdvertiseByoipCidr = "AdvertiseByoipCidr" + +// AdvertiseByoipCidrRequest generates a "aws/request.Request" representing the +// client's request for the AdvertiseByoipCidr operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AdvertiseByoipCidr for more information on using the AdvertiseByoipCidr +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AdvertiseByoipCidrRequest method. +// req, resp := client.AdvertiseByoipCidrRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AdvertiseByoipCidr +func (c *EC2) AdvertiseByoipCidrRequest(input *AdvertiseByoipCidrInput) (req *request.Request, output *AdvertiseByoipCidrOutput) { + op := &request.Operation{ + Name: opAdvertiseByoipCidr, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AdvertiseByoipCidrInput{} + } + + output = &AdvertiseByoipCidrOutput{} + req = c.newRequest(op, input, output) + return +} + +// AdvertiseByoipCidr API operation for Amazon Elastic Compute Cloud. +// +// Advertises an IPv4 address range that is provisioned for use with your AWS +// resources through bring your own IP addresses (BYOIP). +// +// You can perform this operation at most once every 10 seconds, even if you +// specify different address ranges each time. +// +// We recommend that you stop advertising the BYOIP CIDR from other locations +// when you advertise it from AWS. To minimize down time, you can configure +// your AWS resources to use an address from a BYOIP CIDR before it is advertised, +// and then simultaneously stop advertising it from the current location and +// start advertising it through AWS. +// +// It can take a few minutes before traffic to the specified addresses starts +// routing to AWS because of BGP propagation delays. +// +// To stop advertising the BYOIP CIDR, use WithdrawByoipCidr. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation AdvertiseByoipCidr for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AdvertiseByoipCidr +func (c *EC2) AdvertiseByoipCidr(input *AdvertiseByoipCidrInput) (*AdvertiseByoipCidrOutput, error) { + req, out := c.AdvertiseByoipCidrRequest(input) + return out, req.Send() +} + +// AdvertiseByoipCidrWithContext is the same as AdvertiseByoipCidr with the addition of +// the ability to pass a context and additional request options. +// +// See AdvertiseByoipCidr for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AdvertiseByoipCidrWithContext(ctx aws.Context, input *AdvertiseByoipCidrInput, opts ...request.Option) (*AdvertiseByoipCidrOutput, error) { + req, out := c.AdvertiseByoipCidrRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAllocateAddress = "AllocateAddress" // AllocateAddressRequest generates a "aws/request.Request" representing the // client's request for the AllocateAddress operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AllocateAddress for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AllocateAddress method directly -// instead. +// See AllocateAddress for more information on using the AllocateAddress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AllocateAddressRequest method. // req, resp := client.AllocateAddressRequest(params) @@ -163,7 +435,7 @@ const opAllocateAddress = "AllocateAddress" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddress +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddress func (c *EC2) AllocateAddressRequest(input *AllocateAddressInput) (req *request.Request, output *AllocateAddressOutput) { op := &request.Operation{ Name: opAllocateAddress, @@ -182,10 +454,29 @@ func (c *EC2) AllocateAddressRequest(input *AllocateAddressInput) (req *request. // AllocateAddress API operation for Amazon Elastic Compute Cloud. // -// Acquires an Elastic IP address. +// Allocates an Elastic IP address to your AWS account. After you allocate the +// Elastic IP address you can associate it with an instance or network interface. +// After you release an Elastic IP address, it is released to the IP address +// pool and can be allocated to a different AWS account. +// +// You can allocate an Elastic IP address from an address pool owned by AWS +// or from an address pool created from a public IPv4 address range that you +// have brought to AWS for use with your AWS resources using bring your own +// IP addresses (BYOIP). For more information, see Bring Your Own IP Addresses +// (BYOIP) (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// [EC2-VPC] If you release an Elastic IP address, you might be able to recover +// it. You cannot recover an Elastic IP address that you released after it is +// allocated to another AWS account. You cannot recover an Elastic IP address +// for EC2-Classic. To attempt to recover an Elastic IP address that you released, +// specify it in this operation. // // An Elastic IP address is for use either in the EC2-Classic platform or in -// a VPC. For more information, see Elastic IP Addresses (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) +// a VPC. By default, you can allocate 5 Elastic IP addresses for EC2-Classic +// per Region and 5 Elastic IP addresses for EC2-VPC per Region. +// +// For more information, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -194,30 +485,44 @@ func (c *EC2) AllocateAddressRequest(input *AllocateAddressInput) (req *request. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AllocateAddress for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddress +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddress func (c *EC2) AllocateAddress(input *AllocateAddressInput) (*AllocateAddressOutput, error) { req, out := c.AllocateAddressRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AllocateAddressWithContext is the same as AllocateAddress with the addition of +// the ability to pass a context and additional request options. +// +// See AllocateAddress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AllocateAddressWithContext(ctx aws.Context, input *AllocateAddressInput, opts ...request.Option) (*AllocateAddressOutput, error) { + req, out := c.AllocateAddressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAllocateHosts = "AllocateHosts" // AllocateHostsRequest generates a "aws/request.Request" representing the // client's request for the AllocateHosts operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AllocateHosts for usage and error information. +// See AllocateHosts for more information on using the AllocateHosts +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AllocateHosts method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AllocateHostsRequest method. // req, resp := client.AllocateHostsRequest(params) @@ -227,7 +532,7 @@ const opAllocateHosts = "AllocateHosts" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHosts +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHosts func (c *EC2) AllocateHostsRequest(input *AllocateHostsInput) (req *request.Request, output *AllocateHostsOutput) { op := &request.Operation{ Name: opAllocateHosts, @@ -246,9 +551,9 @@ func (c *EC2) AllocateHostsRequest(input *AllocateHostsInput) (req *request.Requ // AllocateHosts API operation for Amazon Elastic Compute Cloud. // -// Allocates a Dedicated Host to your account. At minimum you need to specify -// the instance size type, Availability Zone, and quantity of hosts you want -// to allocate. +// Allocates a Dedicated Host to your account. At a minimum, specify the supported +// instance type or instance family, the Availability Zone in which to allocate +// the host, and the number of hosts to allocate. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -256,30 +561,120 @@ func (c *EC2) AllocateHostsRequest(input *AllocateHostsInput) (req *request.Requ // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AllocateHosts for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHosts +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHosts func (c *EC2) AllocateHosts(input *AllocateHostsInput) (*AllocateHostsOutput, error) { req, out := c.AllocateHostsRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AllocateHostsWithContext is the same as AllocateHosts with the addition of +// the ability to pass a context and additional request options. +// +// See AllocateHosts for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AllocateHostsWithContext(ctx aws.Context, input *AllocateHostsInput, opts ...request.Option) (*AllocateHostsOutput, error) { + req, out := c.AllocateHostsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opApplySecurityGroupsToClientVpnTargetNetwork = "ApplySecurityGroupsToClientVpnTargetNetwork" + +// ApplySecurityGroupsToClientVpnTargetNetworkRequest generates a "aws/request.Request" representing the +// client's request for the ApplySecurityGroupsToClientVpnTargetNetwork operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ApplySecurityGroupsToClientVpnTargetNetwork for more information on using the ApplySecurityGroupsToClientVpnTargetNetwork +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ApplySecurityGroupsToClientVpnTargetNetworkRequest method. +// req, resp := client.ApplySecurityGroupsToClientVpnTargetNetworkRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ApplySecurityGroupsToClientVpnTargetNetwork +func (c *EC2) ApplySecurityGroupsToClientVpnTargetNetworkRequest(input *ApplySecurityGroupsToClientVpnTargetNetworkInput) (req *request.Request, output *ApplySecurityGroupsToClientVpnTargetNetworkOutput) { + op := &request.Operation{ + Name: opApplySecurityGroupsToClientVpnTargetNetwork, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ApplySecurityGroupsToClientVpnTargetNetworkInput{} + } + + output = &ApplySecurityGroupsToClientVpnTargetNetworkOutput{} + req = c.newRequest(op, input, output) + return +} + +// ApplySecurityGroupsToClientVpnTargetNetwork API operation for Amazon Elastic Compute Cloud. +// +// Applies a security group to the association between the target network and +// the Client VPN endpoint. This action replaces the existing security groups +// with the specified security groups. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ApplySecurityGroupsToClientVpnTargetNetwork for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ApplySecurityGroupsToClientVpnTargetNetwork +func (c *EC2) ApplySecurityGroupsToClientVpnTargetNetwork(input *ApplySecurityGroupsToClientVpnTargetNetworkInput) (*ApplySecurityGroupsToClientVpnTargetNetworkOutput, error) { + req, out := c.ApplySecurityGroupsToClientVpnTargetNetworkRequest(input) + return out, req.Send() +} + +// ApplySecurityGroupsToClientVpnTargetNetworkWithContext is the same as ApplySecurityGroupsToClientVpnTargetNetwork with the addition of +// the ability to pass a context and additional request options. +// +// See ApplySecurityGroupsToClientVpnTargetNetwork for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ApplySecurityGroupsToClientVpnTargetNetworkWithContext(ctx aws.Context, input *ApplySecurityGroupsToClientVpnTargetNetworkInput, opts ...request.Option) (*ApplySecurityGroupsToClientVpnTargetNetworkOutput, error) { + req, out := c.ApplySecurityGroupsToClientVpnTargetNetworkRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssignIpv6Addresses = "AssignIpv6Addresses" // AssignIpv6AddressesRequest generates a "aws/request.Request" representing the // client's request for the AssignIpv6Addresses operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AssignIpv6Addresses for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssignIpv6Addresses method directly -// instead. +// See AssignIpv6Addresses for more information on using the AssignIpv6Addresses +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssignIpv6AddressesRequest method. // req, resp := client.AssignIpv6AddressesRequest(params) @@ -289,7 +684,7 @@ const opAssignIpv6Addresses = "AssignIpv6Addresses" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6Addresses +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6Addresses func (c *EC2) AssignIpv6AddressesRequest(input *AssignIpv6AddressesInput) (req *request.Request, output *AssignIpv6AddressesOutput) { op := &request.Operation{ Name: opAssignIpv6Addresses, @@ -314,7 +709,7 @@ func (c *EC2) AssignIpv6AddressesRequest(input *AssignIpv6AddressesInput) (req * // CIDR block range. You can assign as many IPv6 addresses to a network interface // as you can assign private IPv4 addresses, and the limit varies per instance // type. For information, see IP Addresses Per Network Interface Per Instance -// Type (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) +// Type (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -323,30 +718,44 @@ func (c *EC2) AssignIpv6AddressesRequest(input *AssignIpv6AddressesInput) (req * // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AssignIpv6Addresses for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6Addresses +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6Addresses func (c *EC2) AssignIpv6Addresses(input *AssignIpv6AddressesInput) (*AssignIpv6AddressesOutput, error) { req, out := c.AssignIpv6AddressesRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssignIpv6AddressesWithContext is the same as AssignIpv6Addresses with the addition of +// the ability to pass a context and additional request options. +// +// See AssignIpv6Addresses for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssignIpv6AddressesWithContext(ctx aws.Context, input *AssignIpv6AddressesInput, opts ...request.Option) (*AssignIpv6AddressesOutput, error) { + req, out := c.AssignIpv6AddressesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssignPrivateIpAddresses = "AssignPrivateIpAddresses" // AssignPrivateIpAddressesRequest generates a "aws/request.Request" representing the // client's request for the AssignPrivateIpAddresses operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AssignPrivateIpAddresses for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssignPrivateIpAddresses method directly -// instead. +// See AssignPrivateIpAddresses for more information on using the AssignPrivateIpAddresses +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssignPrivateIpAddressesRequest method. // req, resp := client.AssignPrivateIpAddressesRequest(params) @@ -356,7 +765,7 @@ const opAssignPrivateIpAddresses = "AssignPrivateIpAddresses" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddresses +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddresses func (c *EC2) AssignPrivateIpAddressesRequest(input *AssignPrivateIpAddressesInput) (req *request.Request, output *AssignPrivateIpAddressesOutput) { op := &request.Operation{ Name: opAssignPrivateIpAddresses, @@ -370,24 +779,29 @@ func (c *EC2) AssignPrivateIpAddressesRequest(input *AssignPrivateIpAddressesInp output = &AssignPrivateIpAddressesOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } // AssignPrivateIpAddresses API operation for Amazon Elastic Compute Cloud. // // Assigns one or more secondary private IP addresses to the specified network -// interface. You can specify one or more specific secondary IP addresses, or -// you can specify the number of secondary IP addresses to be automatically -// assigned within the subnet's CIDR block range. The number of secondary IP -// addresses that you can assign to an instance varies by instance type. For -// information about instance types, see Instance Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) +// interface. +// +// You can specify one or more specific secondary IP addresses, or you can specify +// the number of secondary IP addresses to be automatically assigned within +// the subnet's CIDR block range. The number of secondary IP addresses that +// you can assign to an instance varies by instance type. For information about +// instance types, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) // in the Amazon Elastic Compute Cloud User Guide. For more information about -// Elastic IP addresses, see Elastic IP Addresses (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) +// Elastic IP addresses, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) // in the Amazon Elastic Compute Cloud User Guide. // -// AssignPrivateIpAddresses is available only in EC2-VPC. +// When you move a secondary private IP address to another network interface, +// any Elastic IP address that is associated with the IP address is also moved. +// +// Remapping an IP address is an asynchronous operation. When you move an IP +// address from one network interface to another, check network/interfaces/macs/mac/local-ipv4s +// in the instance metadata to confirm that the remapping is complete. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -395,30 +809,44 @@ func (c *EC2) AssignPrivateIpAddressesRequest(input *AssignPrivateIpAddressesInp // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AssignPrivateIpAddresses for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddresses +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddresses func (c *EC2) AssignPrivateIpAddresses(input *AssignPrivateIpAddressesInput) (*AssignPrivateIpAddressesOutput, error) { req, out := c.AssignPrivateIpAddressesRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssignPrivateIpAddressesWithContext is the same as AssignPrivateIpAddresses with the addition of +// the ability to pass a context and additional request options. +// +// See AssignPrivateIpAddresses for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssignPrivateIpAddressesWithContext(ctx aws.Context, input *AssignPrivateIpAddressesInput, opts ...request.Option) (*AssignPrivateIpAddressesOutput, error) { + req, out := c.AssignPrivateIpAddressesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssociateAddress = "AssociateAddress" // AssociateAddressRequest generates a "aws/request.Request" representing the // client's request for the AssociateAddress operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AssociateAddress for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssociateAddress method directly -// instead. +// See AssociateAddress for more information on using the AssociateAddress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssociateAddressRequest method. // req, resp := client.AssociateAddressRequest(params) @@ -428,7 +856,7 @@ const opAssociateAddress = "AssociateAddress" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddress +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddress func (c *EC2) AssociateAddressRequest(input *AssociateAddressInput) (req *request.Request, output *AssociateAddressOutput) { op := &request.Operation{ Name: opAssociateAddress, @@ -448,19 +876,25 @@ func (c *EC2) AssociateAddressRequest(input *AssociateAddressInput) (req *reques // AssociateAddress API operation for Amazon Elastic Compute Cloud. // // Associates an Elastic IP address with an instance or a network interface. +// Before you can use an Elastic IP address, you must allocate it to your account. // // An Elastic IP address is for use in either the EC2-Classic platform or in -// a VPC. For more information, see Elastic IP Addresses (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) +// a VPC. For more information, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) // in the Amazon Elastic Compute Cloud User Guide. // // [EC2-Classic, VPC in an EC2-VPC-only account] If the Elastic IP address is // already associated with a different instance, it is disassociated from that -// instance and associated with the specified instance. +// instance and associated with the specified instance. If you associate an +// Elastic IP address with an instance that has an existing Elastic IP address, +// the existing address is disassociated from the instance, but remains allocated +// to your account. // // [VPC in an EC2-Classic account] If you don't specify a private IP address, // the Elastic IP address is associated with the primary IP address. If the // Elastic IP address is already associated with a different instance or a network -// interface, you get an error unless you allow reassociation. +// interface, you get an error unless you allow reassociation. You cannot associate +// an Elastic IP address with an instance or network interface that has an existing +// Elastic IP address. // // This is an idempotent operation. If you perform the operation more than once, // Amazon EC2 doesn't return an error, and you may be charged for each time @@ -473,30 +907,122 @@ func (c *EC2) AssociateAddressRequest(input *AssociateAddressInput) (req *reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AssociateAddress for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddress +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddress func (c *EC2) AssociateAddress(input *AssociateAddressInput) (*AssociateAddressOutput, error) { req, out := c.AssociateAddressRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssociateAddressWithContext is the same as AssociateAddress with the addition of +// the ability to pass a context and additional request options. +// +// See AssociateAddress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssociateAddressWithContext(ctx aws.Context, input *AssociateAddressInput, opts ...request.Option) (*AssociateAddressOutput, error) { + req, out := c.AssociateAddressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAssociateClientVpnTargetNetwork = "AssociateClientVpnTargetNetwork" + +// AssociateClientVpnTargetNetworkRequest generates a "aws/request.Request" representing the +// client's request for the AssociateClientVpnTargetNetwork operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AssociateClientVpnTargetNetwork for more information on using the AssociateClientVpnTargetNetwork +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AssociateClientVpnTargetNetworkRequest method. +// req, resp := client.AssociateClientVpnTargetNetworkRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateClientVpnTargetNetwork +func (c *EC2) AssociateClientVpnTargetNetworkRequest(input *AssociateClientVpnTargetNetworkInput) (req *request.Request, output *AssociateClientVpnTargetNetworkOutput) { + op := &request.Operation{ + Name: opAssociateClientVpnTargetNetwork, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AssociateClientVpnTargetNetworkInput{} + } + + output = &AssociateClientVpnTargetNetworkOutput{} + req = c.newRequest(op, input, output) + return +} + +// AssociateClientVpnTargetNetwork API operation for Amazon Elastic Compute Cloud. +// +// Associates a target network with a Client VPN endpoint. A target network +// is a subnet in a VPC. You can associate multiple subnets from the same VPC +// with a Client VPN endpoint. You can associate only one subnet in each Availability +// Zone. We recommend that you associate at least two subnets to provide Availability +// Zone redundancy. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation AssociateClientVpnTargetNetwork for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateClientVpnTargetNetwork +func (c *EC2) AssociateClientVpnTargetNetwork(input *AssociateClientVpnTargetNetworkInput) (*AssociateClientVpnTargetNetworkOutput, error) { + req, out := c.AssociateClientVpnTargetNetworkRequest(input) + return out, req.Send() +} + +// AssociateClientVpnTargetNetworkWithContext is the same as AssociateClientVpnTargetNetwork with the addition of +// the ability to pass a context and additional request options. +// +// See AssociateClientVpnTargetNetwork for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssociateClientVpnTargetNetworkWithContext(ctx aws.Context, input *AssociateClientVpnTargetNetworkInput, opts ...request.Option) (*AssociateClientVpnTargetNetworkOutput, error) { + req, out := c.AssociateClientVpnTargetNetworkRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssociateDhcpOptions = "AssociateDhcpOptions" // AssociateDhcpOptionsRequest generates a "aws/request.Request" representing the // client's request for the AssociateDhcpOptions operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AssociateDhcpOptions for usage and error information. +// See AssociateDhcpOptions for more information on using the AssociateDhcpOptions +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssociateDhcpOptions method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssociateDhcpOptionsRequest method. // req, resp := client.AssociateDhcpOptionsRequest(params) @@ -506,7 +1032,7 @@ const opAssociateDhcpOptions = "AssociateDhcpOptions" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptions +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptions func (c *EC2) AssociateDhcpOptionsRequest(input *AssociateDhcpOptionsInput) (req *request.Request, output *AssociateDhcpOptionsOutput) { op := &request.Operation{ Name: opAssociateDhcpOptions, @@ -520,8 +1046,7 @@ func (c *EC2) AssociateDhcpOptionsRequest(input *AssociateDhcpOptionsInput) (req output = &AssociateDhcpOptionsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } @@ -537,7 +1062,7 @@ func (c *EC2) AssociateDhcpOptionsRequest(input *AssociateDhcpOptionsInput) (req // its DHCP lease. You can explicitly renew the lease using the operating system // on the instance. // -// For more information, see DHCP Options Sets (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html) +// For more information, see DHCP Options Sets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -546,30 +1071,44 @@ func (c *EC2) AssociateDhcpOptionsRequest(input *AssociateDhcpOptionsInput) (req // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AssociateDhcpOptions for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptions +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptions func (c *EC2) AssociateDhcpOptions(input *AssociateDhcpOptionsInput) (*AssociateDhcpOptionsOutput, error) { req, out := c.AssociateDhcpOptionsRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssociateDhcpOptionsWithContext is the same as AssociateDhcpOptions with the addition of +// the ability to pass a context and additional request options. +// +// See AssociateDhcpOptions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssociateDhcpOptionsWithContext(ctx aws.Context, input *AssociateDhcpOptionsInput, opts ...request.Option) (*AssociateDhcpOptionsOutput, error) { + req, out := c.AssociateDhcpOptionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssociateIamInstanceProfile = "AssociateIamInstanceProfile" // AssociateIamInstanceProfileRequest generates a "aws/request.Request" representing the // client's request for the AssociateIamInstanceProfile operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AssociateIamInstanceProfile for usage and error information. +// See AssociateIamInstanceProfile for more information on using the AssociateIamInstanceProfile +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssociateIamInstanceProfile method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssociateIamInstanceProfileRequest method. // req, resp := client.AssociateIamInstanceProfileRequest(params) @@ -579,7 +1118,7 @@ const opAssociateIamInstanceProfile = "AssociateIamInstanceProfile" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfile +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfile func (c *EC2) AssociateIamInstanceProfileRequest(input *AssociateIamInstanceProfileInput) (req *request.Request, output *AssociateIamInstanceProfileOutput) { op := &request.Operation{ Name: opAssociateIamInstanceProfile, @@ -607,30 +1146,44 @@ func (c *EC2) AssociateIamInstanceProfileRequest(input *AssociateIamInstanceProf // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AssociateIamInstanceProfile for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfile +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfile func (c *EC2) AssociateIamInstanceProfile(input *AssociateIamInstanceProfileInput) (*AssociateIamInstanceProfileOutput, error) { req, out := c.AssociateIamInstanceProfileRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssociateIamInstanceProfileWithContext is the same as AssociateIamInstanceProfile with the addition of +// the ability to pass a context and additional request options. +// +// See AssociateIamInstanceProfile for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssociateIamInstanceProfileWithContext(ctx aws.Context, input *AssociateIamInstanceProfileInput, opts ...request.Option) (*AssociateIamInstanceProfileOutput, error) { + req, out := c.AssociateIamInstanceProfileRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssociateRouteTable = "AssociateRouteTable" // AssociateRouteTableRequest generates a "aws/request.Request" representing the // client's request for the AssociateRouteTable operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AssociateRouteTable for usage and error information. +// See AssociateRouteTable for more information on using the AssociateRouteTable +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssociateRouteTable method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssociateRouteTableRequest method. // req, resp := client.AssociateRouteTableRequest(params) @@ -640,7 +1193,7 @@ const opAssociateRouteTable = "AssociateRouteTable" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTable +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTable func (c *EC2) AssociateRouteTableRequest(input *AssociateRouteTableInput) (req *request.Request, output *AssociateRouteTableOutput) { op := &request.Operation{ Name: opAssociateRouteTable, @@ -665,7 +1218,7 @@ func (c *EC2) AssociateRouteTableRequest(input *AssociateRouteTableInput) (req * // an association ID, which you need in order to disassociate the route table // from the subnet later. A route table can be associated with multiple subnets. // -// For more information about route tables, see Route Tables (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html) +// For more information, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -674,30 +1227,44 @@ func (c *EC2) AssociateRouteTableRequest(input *AssociateRouteTableInput) (req * // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AssociateRouteTable for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTable +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTable func (c *EC2) AssociateRouteTable(input *AssociateRouteTableInput) (*AssociateRouteTableOutput, error) { req, out := c.AssociateRouteTableRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssociateRouteTableWithContext is the same as AssociateRouteTable with the addition of +// the ability to pass a context and additional request options. +// +// See AssociateRouteTable for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssociateRouteTableWithContext(ctx aws.Context, input *AssociateRouteTableInput, opts ...request.Option) (*AssociateRouteTableOutput, error) { + req, out := c.AssociateRouteTableRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssociateSubnetCidrBlock = "AssociateSubnetCidrBlock" // AssociateSubnetCidrBlockRequest generates a "aws/request.Request" representing the // client's request for the AssociateSubnetCidrBlock operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AssociateSubnetCidrBlock for usage and error information. +// See AssociateSubnetCidrBlock for more information on using the AssociateSubnetCidrBlock +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssociateSubnetCidrBlock method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssociateSubnetCidrBlockRequest method. // req, resp := client.AssociateSubnetCidrBlockRequest(params) @@ -707,7 +1274,7 @@ const opAssociateSubnetCidrBlock = "AssociateSubnetCidrBlock" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlock +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlock func (c *EC2) AssociateSubnetCidrBlockRequest(input *AssociateSubnetCidrBlockInput) (req *request.Request, output *AssociateSubnetCidrBlockOutput) { op := &request.Operation{ Name: opAssociateSubnetCidrBlock, @@ -736,30 +1303,119 @@ func (c *EC2) AssociateSubnetCidrBlockRequest(input *AssociateSubnetCidrBlockInp // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AssociateSubnetCidrBlock for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlock +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlock func (c *EC2) AssociateSubnetCidrBlock(input *AssociateSubnetCidrBlockInput) (*AssociateSubnetCidrBlockOutput, error) { req, out := c.AssociateSubnetCidrBlockRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssociateSubnetCidrBlockWithContext is the same as AssociateSubnetCidrBlock with the addition of +// the ability to pass a context and additional request options. +// +// See AssociateSubnetCidrBlock for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssociateSubnetCidrBlockWithContext(ctx aws.Context, input *AssociateSubnetCidrBlockInput, opts ...request.Option) (*AssociateSubnetCidrBlockOutput, error) { + req, out := c.AssociateSubnetCidrBlockRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAssociateTransitGatewayRouteTable = "AssociateTransitGatewayRouteTable" + +// AssociateTransitGatewayRouteTableRequest generates a "aws/request.Request" representing the +// client's request for the AssociateTransitGatewayRouteTable operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AssociateTransitGatewayRouteTable for more information on using the AssociateTransitGatewayRouteTable +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AssociateTransitGatewayRouteTableRequest method. +// req, resp := client.AssociateTransitGatewayRouteTableRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayRouteTable +func (c *EC2) AssociateTransitGatewayRouteTableRequest(input *AssociateTransitGatewayRouteTableInput) (req *request.Request, output *AssociateTransitGatewayRouteTableOutput) { + op := &request.Operation{ + Name: opAssociateTransitGatewayRouteTable, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AssociateTransitGatewayRouteTableInput{} + } + + output = &AssociateTransitGatewayRouteTableOutput{} + req = c.newRequest(op, input, output) + return +} + +// AssociateTransitGatewayRouteTable API operation for Amazon Elastic Compute Cloud. +// +// Associates the specified attachment with the specified transit gateway route +// table. You can associate only one route table with an attachment. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation AssociateTransitGatewayRouteTable for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayRouteTable +func (c *EC2) AssociateTransitGatewayRouteTable(input *AssociateTransitGatewayRouteTableInput) (*AssociateTransitGatewayRouteTableOutput, error) { + req, out := c.AssociateTransitGatewayRouteTableRequest(input) + return out, req.Send() +} + +// AssociateTransitGatewayRouteTableWithContext is the same as AssociateTransitGatewayRouteTable with the addition of +// the ability to pass a context and additional request options. +// +// See AssociateTransitGatewayRouteTable for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssociateTransitGatewayRouteTableWithContext(ctx aws.Context, input *AssociateTransitGatewayRouteTableInput, opts ...request.Option) (*AssociateTransitGatewayRouteTableOutput, error) { + req, out := c.AssociateTransitGatewayRouteTableRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssociateVpcCidrBlock = "AssociateVpcCidrBlock" // AssociateVpcCidrBlockRequest generates a "aws/request.Request" representing the // client's request for the AssociateVpcCidrBlock operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AssociateVpcCidrBlock for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssociateVpcCidrBlock method directly -// instead. +// See AssociateVpcCidrBlock for more information on using the AssociateVpcCidrBlock +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssociateVpcCidrBlockRequest method. // req, resp := client.AssociateVpcCidrBlockRequest(params) @@ -769,7 +1425,7 @@ const opAssociateVpcCidrBlock = "AssociateVpcCidrBlock" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlock +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlock func (c *EC2) AssociateVpcCidrBlockRequest(input *AssociateVpcCidrBlockInput) (req *request.Request, output *AssociateVpcCidrBlockOutput) { op := &request.Operation{ Name: opAssociateVpcCidrBlock, @@ -788,8 +1444,13 @@ func (c *EC2) AssociateVpcCidrBlockRequest(input *AssociateVpcCidrBlockInput) (r // AssociateVpcCidrBlock API operation for Amazon Elastic Compute Cloud. // -// Associates a CIDR block with your VPC. You can only associate a single Amazon-provided -// IPv6 CIDR block with your VPC. The IPv6 CIDR block size is fixed at /56. +// Associates a CIDR block with your VPC. You can associate a secondary IPv4 +// CIDR block, or you can associate an Amazon-provided IPv6 CIDR block. The +// IPv6 CIDR block size is fixed at /56. +// +// For more information about associating CIDR blocks with your VPC and applicable +// restrictions, see VPC and Subnet Sizing (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing) +// in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -797,30 +1458,44 @@ func (c *EC2) AssociateVpcCidrBlockRequest(input *AssociateVpcCidrBlockInput) (r // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AssociateVpcCidrBlock for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlock +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlock func (c *EC2) AssociateVpcCidrBlock(input *AssociateVpcCidrBlockInput) (*AssociateVpcCidrBlockOutput, error) { req, out := c.AssociateVpcCidrBlockRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssociateVpcCidrBlockWithContext is the same as AssociateVpcCidrBlock with the addition of +// the ability to pass a context and additional request options. +// +// See AssociateVpcCidrBlock for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AssociateVpcCidrBlockWithContext(ctx aws.Context, input *AssociateVpcCidrBlockInput, opts ...request.Option) (*AssociateVpcCidrBlockOutput, error) { + req, out := c.AssociateVpcCidrBlockRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAttachClassicLinkVpc = "AttachClassicLinkVpc" // AttachClassicLinkVpcRequest generates a "aws/request.Request" representing the // client's request for the AttachClassicLinkVpc operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AttachClassicLinkVpc for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AttachClassicLinkVpc method directly -// instead. +// See AttachClassicLinkVpc for more information on using the AttachClassicLinkVpc +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AttachClassicLinkVpcRequest method. // req, resp := client.AttachClassicLinkVpcRequest(params) @@ -830,7 +1505,7 @@ const opAttachClassicLinkVpc = "AttachClassicLinkVpc" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpc +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpc func (c *EC2) AttachClassicLinkVpcRequest(input *AttachClassicLinkVpcInput) (req *request.Request, output *AttachClassicLinkVpcOutput) { op := &request.Operation{ Name: opAttachClassicLinkVpc, @@ -868,30 +1543,44 @@ func (c *EC2) AttachClassicLinkVpcRequest(input *AttachClassicLinkVpcInput) (req // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AttachClassicLinkVpc for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpc +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpc func (c *EC2) AttachClassicLinkVpc(input *AttachClassicLinkVpcInput) (*AttachClassicLinkVpcOutput, error) { req, out := c.AttachClassicLinkVpcRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AttachClassicLinkVpcWithContext is the same as AttachClassicLinkVpc with the addition of +// the ability to pass a context and additional request options. +// +// See AttachClassicLinkVpc for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AttachClassicLinkVpcWithContext(ctx aws.Context, input *AttachClassicLinkVpcInput, opts ...request.Option) (*AttachClassicLinkVpcOutput, error) { + req, out := c.AttachClassicLinkVpcRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAttachInternetGateway = "AttachInternetGateway" // AttachInternetGatewayRequest generates a "aws/request.Request" representing the // client's request for the AttachInternetGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AttachInternetGateway for usage and error information. +// See AttachInternetGateway for more information on using the AttachInternetGateway +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AttachInternetGateway method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AttachInternetGatewayRequest method. // req, resp := client.AttachInternetGatewayRequest(params) @@ -901,7 +1590,7 @@ const opAttachInternetGateway = "AttachInternetGateway" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGateway func (c *EC2) AttachInternetGatewayRequest(input *AttachInternetGatewayInput) (req *request.Request, output *AttachInternetGatewayOutput) { op := &request.Operation{ Name: opAttachInternetGateway, @@ -915,16 +1604,15 @@ func (c *EC2) AttachInternetGatewayRequest(input *AttachInternetGatewayInput) (r output = &AttachInternetGatewayOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } // AttachInternetGateway API operation for Amazon Elastic Compute Cloud. // -// Attaches an Internet gateway to a VPC, enabling connectivity between the -// Internet and the VPC. For more information about your VPC and Internet gateway, -// see the Amazon Virtual Private Cloud User Guide (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/). +// Attaches an internet gateway to a VPC, enabling connectivity between the +// internet and the VPC. For more information about your VPC and internet gateway, +// see the Amazon Virtual Private Cloud User Guide (https://docs.aws.amazon.com/vpc/latest/userguide/). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -932,30 +1620,44 @@ func (c *EC2) AttachInternetGatewayRequest(input *AttachInternetGatewayInput) (r // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AttachInternetGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGateway func (c *EC2) AttachInternetGateway(input *AttachInternetGatewayInput) (*AttachInternetGatewayOutput, error) { req, out := c.AttachInternetGatewayRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AttachInternetGatewayWithContext is the same as AttachInternetGateway with the addition of +// the ability to pass a context and additional request options. +// +// See AttachInternetGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AttachInternetGatewayWithContext(ctx aws.Context, input *AttachInternetGatewayInput, opts ...request.Option) (*AttachInternetGatewayOutput, error) { + req, out := c.AttachInternetGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAttachNetworkInterface = "AttachNetworkInterface" // AttachNetworkInterfaceRequest generates a "aws/request.Request" representing the // client's request for the AttachNetworkInterface operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AttachNetworkInterface for usage and error information. +// See AttachNetworkInterface for more information on using the AttachNetworkInterface +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AttachNetworkInterface method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AttachNetworkInterfaceRequest method. // req, resp := client.AttachNetworkInterfaceRequest(params) @@ -965,7 +1667,7 @@ const opAttachNetworkInterface = "AttachNetworkInterface" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterface +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterface func (c *EC2) AttachNetworkInterfaceRequest(input *AttachNetworkInterfaceInput) (req *request.Request, output *AttachNetworkInterfaceOutput) { op := &request.Operation{ Name: opAttachNetworkInterface, @@ -992,30 +1694,44 @@ func (c *EC2) AttachNetworkInterfaceRequest(input *AttachNetworkInterfaceInput) // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AttachNetworkInterface for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterface +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterface func (c *EC2) AttachNetworkInterface(input *AttachNetworkInterfaceInput) (*AttachNetworkInterfaceOutput, error) { req, out := c.AttachNetworkInterfaceRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AttachNetworkInterfaceWithContext is the same as AttachNetworkInterface with the addition of +// the ability to pass a context and additional request options. +// +// See AttachNetworkInterface for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AttachNetworkInterfaceWithContext(ctx aws.Context, input *AttachNetworkInterfaceInput, opts ...request.Option) (*AttachNetworkInterfaceOutput, error) { + req, out := c.AttachNetworkInterfaceRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAttachVolume = "AttachVolume" // AttachVolumeRequest generates a "aws/request.Request" representing the // client's request for the AttachVolume operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AttachVolume for usage and error information. +// See AttachVolume for more information on using the AttachVolume +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AttachVolume method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AttachVolumeRequest method. // req, resp := client.AttachVolumeRequest(params) @@ -1025,7 +1741,7 @@ const opAttachVolume = "AttachVolume" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVolume +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVolume func (c *EC2) AttachVolumeRequest(input *AttachVolumeInput) (req *request.Request, output *VolumeAttachment) { op := &request.Operation{ Name: opAttachVolume, @@ -1047,15 +1763,12 @@ func (c *EC2) AttachVolumeRequest(input *AttachVolumeInput) (req *request.Reques // Attaches an EBS volume to a running or stopped instance and exposes it to // the instance with the specified device name. // -// Encrypted EBS volumes may only be attached to instances that support Amazon -// EBS encryption. For more information, see Amazon EBS Encryption (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// Encrypted EBS volumes must be attached to instances that support Amazon EBS +// encryption. For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) // in the Amazon Elastic Compute Cloud User Guide. // -// For a list of supported device names, see Attaching an EBS Volume to an Instance -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html). -// Any device names that aren't reserved for instance store volumes can be used -// for EBS volumes. For more information, see Amazon EC2 Instance Store (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) -// in the Amazon Elastic Compute Cloud User Guide. +// After you attach an EBS volume, you must make it available. For more information, +// see Making an EBS Volume Available For Use (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html). // // If a volume has an AWS Marketplace product code: // @@ -1069,10 +1782,7 @@ func (c *EC2) AttachVolumeRequest(input *AttachVolumeInput) (req *request.Reques // the product. For example, you can't detach a volume from a Windows instance // and attach it to a Linux instance. // -// For an overview of the AWS Marketplace, see Introducing AWS Marketplace (https://aws.amazon.com/marketplace/help/200900000). -// -// For more information about EBS volumes, see Attaching Amazon EBS Volumes -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html) +// For more information, see Attaching Amazon EBS Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -1081,30 +1791,44 @@ func (c *EC2) AttachVolumeRequest(input *AttachVolumeInput) (req *request.Reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AttachVolume for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVolume +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVolume func (c *EC2) AttachVolume(input *AttachVolumeInput) (*VolumeAttachment, error) { req, out := c.AttachVolumeRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AttachVolumeWithContext is the same as AttachVolume with the addition of +// the ability to pass a context and additional request options. +// +// See AttachVolume for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AttachVolumeWithContext(ctx aws.Context, input *AttachVolumeInput, opts ...request.Option) (*VolumeAttachment, error) { + req, out := c.AttachVolumeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAttachVpnGateway = "AttachVpnGateway" // AttachVpnGatewayRequest generates a "aws/request.Request" representing the // client's request for the AttachVpnGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AttachVpnGateway for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AttachVpnGateway method directly -// instead. +// See AttachVpnGateway for more information on using the AttachVpnGateway +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AttachVpnGatewayRequest method. // req, resp := client.AttachVpnGatewayRequest(params) @@ -1114,7 +1838,7 @@ const opAttachVpnGateway = "AttachVpnGateway" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGateway func (c *EC2) AttachVpnGatewayRequest(input *AttachVpnGatewayInput) (req *request.Request, output *AttachVpnGatewayOutput) { op := &request.Operation{ Name: opAttachVpnGateway, @@ -1133,9 +1857,11 @@ func (c *EC2) AttachVpnGatewayRequest(input *AttachVpnGatewayInput) (req *reques // AttachVpnGateway API operation for Amazon Elastic Compute Cloud. // -// Attaches a virtual private gateway to a VPC. For more information, see Adding -// a Hardware Virtual Private Gateway to Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html) -// in the Amazon Virtual Private Cloud User Guide. +// Attaches a virtual private gateway to a VPC. You can attach one virtual private +// gateway to one VPC at a time. +// +// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) +// in the AWS Site-to-Site VPN User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -1143,30 +1869,121 @@ func (c *EC2) AttachVpnGatewayRequest(input *AttachVpnGatewayInput) (req *reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AttachVpnGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGateway func (c *EC2) AttachVpnGateway(input *AttachVpnGatewayInput) (*AttachVpnGatewayOutput, error) { req, out := c.AttachVpnGatewayRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AttachVpnGatewayWithContext is the same as AttachVpnGateway with the addition of +// the ability to pass a context and additional request options. +// +// See AttachVpnGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AttachVpnGatewayWithContext(ctx aws.Context, input *AttachVpnGatewayInput, opts ...request.Option) (*AttachVpnGatewayOutput, error) { + req, out := c.AttachVpnGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAuthorizeClientVpnIngress = "AuthorizeClientVpnIngress" + +// AuthorizeClientVpnIngressRequest generates a "aws/request.Request" representing the +// client's request for the AuthorizeClientVpnIngress operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AuthorizeClientVpnIngress for more information on using the AuthorizeClientVpnIngress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AuthorizeClientVpnIngressRequest method. +// req, resp := client.AuthorizeClientVpnIngressRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeClientVpnIngress +func (c *EC2) AuthorizeClientVpnIngressRequest(input *AuthorizeClientVpnIngressInput) (req *request.Request, output *AuthorizeClientVpnIngressOutput) { + op := &request.Operation{ + Name: opAuthorizeClientVpnIngress, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AuthorizeClientVpnIngressInput{} + } + + output = &AuthorizeClientVpnIngressOutput{} + req = c.newRequest(op, input, output) + return +} + +// AuthorizeClientVpnIngress API operation for Amazon Elastic Compute Cloud. +// +// Adds an ingress authorization rule to a Client VPN endpoint. Ingress authorization +// rules act as firewall rules that grant access to networks. You must configure +// ingress authorization rules to enable clients to access resources in AWS +// or on-premises networks. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation AuthorizeClientVpnIngress for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeClientVpnIngress +func (c *EC2) AuthorizeClientVpnIngress(input *AuthorizeClientVpnIngressInput) (*AuthorizeClientVpnIngressOutput, error) { + req, out := c.AuthorizeClientVpnIngressRequest(input) + return out, req.Send() +} + +// AuthorizeClientVpnIngressWithContext is the same as AuthorizeClientVpnIngress with the addition of +// the ability to pass a context and additional request options. +// +// See AuthorizeClientVpnIngress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AuthorizeClientVpnIngressWithContext(ctx aws.Context, input *AuthorizeClientVpnIngressInput, opts ...request.Option) (*AuthorizeClientVpnIngressOutput, error) { + req, out := c.AuthorizeClientVpnIngressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAuthorizeSecurityGroupEgress = "AuthorizeSecurityGroupEgress" // AuthorizeSecurityGroupEgressRequest generates a "aws/request.Request" representing the // client's request for the AuthorizeSecurityGroupEgress operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See AuthorizeSecurityGroupEgress for usage and error information. +// See AuthorizeSecurityGroupEgress for more information on using the AuthorizeSecurityGroupEgress +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AuthorizeSecurityGroupEgress method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AuthorizeSecurityGroupEgressRequest method. // req, resp := client.AuthorizeSecurityGroupEgressRequest(params) @@ -1176,7 +1993,7 @@ const opAuthorizeSecurityGroupEgress = "AuthorizeSecurityGroupEgress" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgress +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgress func (c *EC2) AuthorizeSecurityGroupEgressRequest(input *AuthorizeSecurityGroupEgressInput) (req *request.Request, output *AuthorizeSecurityGroupEgressOutput) { op := &request.Operation{ Name: opAuthorizeSecurityGroupEgress, @@ -1190,61 +2007,74 @@ func (c *EC2) AuthorizeSecurityGroupEgressRequest(input *AuthorizeSecurityGroupE output = &AuthorizeSecurityGroupEgressOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } // AuthorizeSecurityGroupEgress API operation for Amazon Elastic Compute Cloud. // -// [EC2-VPC only] Adds one or more egress rules to a security group for use -// with a VPC. Specifically, this action permits instances to send traffic to -// one or more destination IPv4 or IPv6 CIDR address ranges, or to one or more -// destination security groups for the same VPC. This action doesn't apply to -// security groups for use in EC2-Classic. For more information, see Security -// Groups for Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) -// in the Amazon Virtual Private Cloud User Guide. For more information about -// security group limits, see Amazon VPC Limits (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Appendix_Limits.html). -// -// Each rule consists of the protocol (for example, TCP), plus either a CIDR -// range or a source group. For the TCP and UDP protocols, you must also specify -// the destination port or port range. For the ICMP protocol, you must also -// specify the ICMP type and code. You can use -1 for the type or code to mean -// all types or all codes. +// [VPC only] Adds the specified egress rules to a security group for use with +// a VPC. +// +// An outbound rule permits instances to send traffic to the specified IPv4 +// or IPv6 CIDR address ranges, or to the instances associated with the specified +// destination security groups. +// +// You specify a protocol for each rule (for example, TCP). For the TCP and +// UDP protocols, you must also specify the destination port or port range. +// For the ICMP protocol, you must also specify the ICMP type and code. You +// can use -1 for the type or code to mean all types or all codes. // // Rule changes are propagated to affected instances as quickly as possible. // However, a small delay might occur. // +// For more information about VPC security group limits, see Amazon VPC Limits +// (https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). +// // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AuthorizeSecurityGroupEgress for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgress +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgress func (c *EC2) AuthorizeSecurityGroupEgress(input *AuthorizeSecurityGroupEgressInput) (*AuthorizeSecurityGroupEgressOutput, error) { req, out := c.AuthorizeSecurityGroupEgressRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AuthorizeSecurityGroupEgressWithContext is the same as AuthorizeSecurityGroupEgress with the addition of +// the ability to pass a context and additional request options. +// +// See AuthorizeSecurityGroupEgress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AuthorizeSecurityGroupEgressWithContext(ctx aws.Context, input *AuthorizeSecurityGroupEgressInput, opts ...request.Option) (*AuthorizeSecurityGroupEgressOutput, error) { + req, out := c.AuthorizeSecurityGroupEgressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAuthorizeSecurityGroupIngress = "AuthorizeSecurityGroupIngress" // AuthorizeSecurityGroupIngressRequest generates a "aws/request.Request" representing the // client's request for the AuthorizeSecurityGroupIngress operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AuthorizeSecurityGroupIngress for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AuthorizeSecurityGroupIngress method directly -// instead. +// See AuthorizeSecurityGroupIngress for more information on using the AuthorizeSecurityGroupIngress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AuthorizeSecurityGroupIngressRequest method. // req, resp := client.AuthorizeSecurityGroupIngressRequest(params) @@ -1254,7 +2084,7 @@ const opAuthorizeSecurityGroupIngress = "AuthorizeSecurityGroupIngress" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngress +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngress func (c *EC2) AuthorizeSecurityGroupIngressRequest(input *AuthorizeSecurityGroupIngressInput) (req *request.Request, output *AuthorizeSecurityGroupIngressOutput) { op := &request.Operation{ Name: opAuthorizeSecurityGroupIngress, @@ -1268,30 +2098,28 @@ func (c *EC2) AuthorizeSecurityGroupIngressRequest(input *AuthorizeSecurityGroup output = &AuthorizeSecurityGroupIngressOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } // AuthorizeSecurityGroupIngress API operation for Amazon Elastic Compute Cloud. // -// Adds one or more ingress rules to a security group. +// Adds the specified ingress rules to a security group. +// +// An inbound rule permits instances to receive traffic from the specified IPv4 +// or IPv6 CIDR address ranges, or from the instances associated with the specified +// destination security groups. +// +// You specify a protocol for each rule (for example, TCP). For TCP and UDP, +// you must also specify the destination port or port range. For ICMP/ICMPv6, +// you must also specify the ICMP/ICMPv6 type and code. You can use -1 to mean +// all types or all codes. // // Rule changes are propagated to instances within the security group as quickly // as possible. However, a small delay might occur. // -// [EC2-Classic] This action gives one or more IPv4 CIDR address ranges permission -// to access a security group in your account, or gives one or more security -// groups (called the source groups) permission to access a security group for -// your account. A source group can be for your own AWS account, or another. -// You can have up to 100 rules per group. -// -// [EC2-VPC] This action gives one or more IPv4 or IPv6 CIDR address ranges -// permission to access a security group in your VPC, or gives one or more other -// security groups (called the source groups) permission to access a security -// group for your VPC. The security groups must all be for the same VPC or a -// peer VPC in a VPC peering connection. For more information about VPC security -// group limits, see Amazon VPC Limits (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Appendix_Limits.html). +// For more information about VPC security group limits, see Amazon VPC Limits +// (https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -1299,30 +2127,44 @@ func (c *EC2) AuthorizeSecurityGroupIngressRequest(input *AuthorizeSecurityGroup // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation AuthorizeSecurityGroupIngress for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngress +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngress func (c *EC2) AuthorizeSecurityGroupIngress(input *AuthorizeSecurityGroupIngressInput) (*AuthorizeSecurityGroupIngressOutput, error) { req, out := c.AuthorizeSecurityGroupIngressRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AuthorizeSecurityGroupIngressWithContext is the same as AuthorizeSecurityGroupIngress with the addition of +// the ability to pass a context and additional request options. +// +// See AuthorizeSecurityGroupIngress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) AuthorizeSecurityGroupIngressWithContext(ctx aws.Context, input *AuthorizeSecurityGroupIngressInput, opts ...request.Option) (*AuthorizeSecurityGroupIngressOutput, error) { + req, out := c.AuthorizeSecurityGroupIngressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opBundleInstance = "BundleInstance" // BundleInstanceRequest generates a "aws/request.Request" representing the // client's request for the BundleInstance operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See BundleInstance for usage and error information. +// See BundleInstance for more information on using the BundleInstance +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the BundleInstance method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the BundleInstanceRequest method. // req, resp := client.BundleInstanceRequest(params) @@ -1332,7 +2174,7 @@ const opBundleInstance = "BundleInstance" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstance +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstance func (c *EC2) BundleInstanceRequest(input *BundleInstanceInput) (req *request.Request, output *BundleInstanceOutput) { op := &request.Operation{ Name: opBundleInstance, @@ -1359,38 +2201,50 @@ func (c *EC2) BundleInstanceRequest(input *BundleInstanceInput) (req *request.Re // This action is not applicable for Linux/Unix instances or Windows instances // that are backed by Amazon EBS. // -// For more information, see Creating an Instance Store-Backed Windows AMI (http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Creating_InstanceStoreBacked_WinAMI.html). -// // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation BundleInstance for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstance +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstance func (c *EC2) BundleInstance(input *BundleInstanceInput) (*BundleInstanceOutput, error) { req, out := c.BundleInstanceRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// BundleInstanceWithContext is the same as BundleInstance with the addition of +// the ability to pass a context and additional request options. +// +// See BundleInstance for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) BundleInstanceWithContext(ctx aws.Context, input *BundleInstanceInput, opts ...request.Option) (*BundleInstanceOutput, error) { + req, out := c.BundleInstanceRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCancelBundleTask = "CancelBundleTask" // CancelBundleTaskRequest generates a "aws/request.Request" representing the // client's request for the CancelBundleTask operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CancelBundleTask for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CancelBundleTask method directly -// instead. +// See CancelBundleTask for more information on using the CancelBundleTask +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CancelBundleTaskRequest method. // req, resp := client.CancelBundleTaskRequest(params) @@ -1400,7 +2254,7 @@ const opCancelBundleTask = "CancelBundleTask" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTask func (c *EC2) CancelBundleTaskRequest(input *CancelBundleTaskInput) (req *request.Request, output *CancelBundleTaskOutput) { op := &request.Operation{ Name: opCancelBundleTask, @@ -1427,30 +2281,125 @@ func (c *EC2) CancelBundleTaskRequest(input *CancelBundleTaskInput) (req *reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CancelBundleTask for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTask func (c *EC2) CancelBundleTask(input *CancelBundleTaskInput) (*CancelBundleTaskOutput, error) { req, out := c.CancelBundleTaskRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CancelBundleTaskWithContext is the same as CancelBundleTask with the addition of +// the ability to pass a context and additional request options. +// +// See CancelBundleTask for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CancelBundleTaskWithContext(ctx aws.Context, input *CancelBundleTaskInput, opts ...request.Option) (*CancelBundleTaskOutput, error) { + req, out := c.CancelBundleTaskRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCancelCapacityReservation = "CancelCapacityReservation" + +// CancelCapacityReservationRequest generates a "aws/request.Request" representing the +// client's request for the CancelCapacityReservation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CancelCapacityReservation for more information on using the CancelCapacityReservation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CancelCapacityReservationRequest method. +// req, resp := client.CancelCapacityReservationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservation +func (c *EC2) CancelCapacityReservationRequest(input *CancelCapacityReservationInput) (req *request.Request, output *CancelCapacityReservationOutput) { + op := &request.Operation{ + Name: opCancelCapacityReservation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CancelCapacityReservationInput{} + } + + output = &CancelCapacityReservationOutput{} + req = c.newRequest(op, input, output) + return +} + +// CancelCapacityReservation API operation for Amazon Elastic Compute Cloud. +// +// Cancels the specified Capacity Reservation, releases the reserved capacity, +// and changes the Capacity Reservation's state to cancelled. +// +// Instances running in the reserved capacity continue running until you stop +// them. Stopped instances that target the Capacity Reservation can no longer +// launch. Modify these instances to either target a different Capacity Reservation, +// launch On-Demand Instance capacity, or run in any open Capacity Reservation +// that has matching attributes and sufficient capacity. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CancelCapacityReservation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservation +func (c *EC2) CancelCapacityReservation(input *CancelCapacityReservationInput) (*CancelCapacityReservationOutput, error) { + req, out := c.CancelCapacityReservationRequest(input) + return out, req.Send() +} + +// CancelCapacityReservationWithContext is the same as CancelCapacityReservation with the addition of +// the ability to pass a context and additional request options. +// +// See CancelCapacityReservation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CancelCapacityReservationWithContext(ctx aws.Context, input *CancelCapacityReservationInput, opts ...request.Option) (*CancelCapacityReservationOutput, error) { + req, out := c.CancelCapacityReservationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCancelConversionTask = "CancelConversionTask" // CancelConversionTaskRequest generates a "aws/request.Request" representing the // client's request for the CancelConversionTask operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CancelConversionTask for usage and error information. +// See CancelConversionTask for more information on using the CancelConversionTask +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CancelConversionTask method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CancelConversionTaskRequest method. // req, resp := client.CancelConversionTaskRequest(params) @@ -1460,7 +2409,7 @@ const opCancelConversionTask = "CancelConversionTask" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionTask func (c *EC2) CancelConversionTaskRequest(input *CancelConversionTaskInput) (req *request.Request, output *CancelConversionTaskOutput) { op := &request.Operation{ Name: opCancelConversionTask, @@ -1474,8 +2423,7 @@ func (c *EC2) CancelConversionTaskRequest(input *CancelConversionTaskInput) (req output = &CancelConversionTaskOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } @@ -1488,7 +2436,7 @@ func (c *EC2) CancelConversionTaskRequest(input *CancelConversionTaskInput) (req // and returns an exception. // // For more information, see Importing a Virtual Machine Using the Amazon EC2 -// CLI (http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html). +// CLI (https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -1496,30 +2444,44 @@ func (c *EC2) CancelConversionTaskRequest(input *CancelConversionTaskInput) (req // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CancelConversionTask for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionTask func (c *EC2) CancelConversionTask(input *CancelConversionTaskInput) (*CancelConversionTaskOutput, error) { req, out := c.CancelConversionTaskRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CancelConversionTaskWithContext is the same as CancelConversionTask with the addition of +// the ability to pass a context and additional request options. +// +// See CancelConversionTask for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CancelConversionTaskWithContext(ctx aws.Context, input *CancelConversionTaskInput, opts ...request.Option) (*CancelConversionTaskOutput, error) { + req, out := c.CancelConversionTaskRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCancelExportTask = "CancelExportTask" // CancelExportTaskRequest generates a "aws/request.Request" representing the // client's request for the CancelExportTask operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CancelExportTask for usage and error information. +// See CancelExportTask for more information on using the CancelExportTask +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CancelExportTask method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CancelExportTaskRequest method. // req, resp := client.CancelExportTaskRequest(params) @@ -1529,7 +2491,7 @@ const opCancelExportTask = "CancelExportTask" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTask func (c *EC2) CancelExportTaskRequest(input *CancelExportTaskInput) (req *request.Request, output *CancelExportTaskOutput) { op := &request.Operation{ Name: opCancelExportTask, @@ -1543,8 +2505,7 @@ func (c *EC2) CancelExportTaskRequest(input *CancelExportTaskInput) (req *reques output = &CancelExportTaskOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } @@ -1561,30 +2522,44 @@ func (c *EC2) CancelExportTaskRequest(input *CancelExportTaskInput) (req *reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CancelExportTask for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTask func (c *EC2) CancelExportTask(input *CancelExportTaskInput) (*CancelExportTaskOutput, error) { req, out := c.CancelExportTaskRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CancelExportTaskWithContext is the same as CancelExportTask with the addition of +// the ability to pass a context and additional request options. +// +// See CancelExportTask for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CancelExportTaskWithContext(ctx aws.Context, input *CancelExportTaskInput, opts ...request.Option) (*CancelExportTaskOutput, error) { + req, out := c.CancelExportTaskRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCancelImportTask = "CancelImportTask" // CancelImportTaskRequest generates a "aws/request.Request" representing the // client's request for the CancelImportTask operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CancelImportTask for usage and error information. +// See CancelImportTask for more information on using the CancelImportTask +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CancelImportTask method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CancelImportTaskRequest method. // req, resp := client.CancelImportTaskRequest(params) @@ -1594,7 +2569,7 @@ const opCancelImportTask = "CancelImportTask" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTask func (c *EC2) CancelImportTaskRequest(input *CancelImportTaskInput) (req *request.Request, output *CancelImportTaskOutput) { op := &request.Operation{ Name: opCancelImportTask, @@ -1621,30 +2596,44 @@ func (c *EC2) CancelImportTaskRequest(input *CancelImportTaskInput) (req *reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CancelImportTask for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTask func (c *EC2) CancelImportTask(input *CancelImportTaskInput) (*CancelImportTaskOutput, error) { req, out := c.CancelImportTaskRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CancelImportTaskWithContext is the same as CancelImportTask with the addition of +// the ability to pass a context and additional request options. +// +// See CancelImportTask for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CancelImportTaskWithContext(ctx aws.Context, input *CancelImportTaskInput, opts ...request.Option) (*CancelImportTaskOutput, error) { + req, out := c.CancelImportTaskRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCancelReservedInstancesListing = "CancelReservedInstancesListing" // CancelReservedInstancesListingRequest generates a "aws/request.Request" representing the // client's request for the CancelReservedInstancesListing operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CancelReservedInstancesListing for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CancelReservedInstancesListing method directly -// instead. +// See CancelReservedInstancesListing for more information on using the CancelReservedInstancesListing +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CancelReservedInstancesListingRequest method. // req, resp := client.CancelReservedInstancesListingRequest(params) @@ -1654,7 +2643,7 @@ const opCancelReservedInstancesListing = "CancelReservedInstancesListing" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListing +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListing func (c *EC2) CancelReservedInstancesListingRequest(input *CancelReservedInstancesListingInput) (req *request.Request, output *CancelReservedInstancesListingOutput) { op := &request.Operation{ Name: opCancelReservedInstancesListing, @@ -1676,7 +2665,7 @@ func (c *EC2) CancelReservedInstancesListingRequest(input *CancelReservedInstanc // Cancels the specified Reserved Instance listing in the Reserved Instance // Marketplace. // -// For more information, see Reserved Instance Marketplace (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) +// For more information, see Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -1685,30 +2674,44 @@ func (c *EC2) CancelReservedInstancesListingRequest(input *CancelReservedInstanc // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CancelReservedInstancesListing for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListing +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListing func (c *EC2) CancelReservedInstancesListing(input *CancelReservedInstancesListingInput) (*CancelReservedInstancesListingOutput, error) { req, out := c.CancelReservedInstancesListingRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CancelReservedInstancesListingWithContext is the same as CancelReservedInstancesListing with the addition of +// the ability to pass a context and additional request options. +// +// See CancelReservedInstancesListing for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CancelReservedInstancesListingWithContext(ctx aws.Context, input *CancelReservedInstancesListingInput, opts ...request.Option) (*CancelReservedInstancesListingOutput, error) { + req, out := c.CancelReservedInstancesListingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCancelSpotFleetRequests = "CancelSpotFleetRequests" // CancelSpotFleetRequestsRequest generates a "aws/request.Request" representing the // client's request for the CancelSpotFleetRequests operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CancelSpotFleetRequests for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CancelSpotFleetRequests method directly -// instead. +// See CancelSpotFleetRequests for more information on using the CancelSpotFleetRequests +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CancelSpotFleetRequestsRequest method. // req, resp := client.CancelSpotFleetRequestsRequest(params) @@ -1718,7 +2721,7 @@ const opCancelSpotFleetRequests = "CancelSpotFleetRequests" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequests +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequests func (c *EC2) CancelSpotFleetRequestsRequest(input *CancelSpotFleetRequestsInput) (req *request.Request, output *CancelSpotFleetRequestsOutput) { op := &request.Operation{ Name: opCancelSpotFleetRequests, @@ -1737,12 +2740,12 @@ func (c *EC2) CancelSpotFleetRequestsRequest(input *CancelSpotFleetRequestsInput // CancelSpotFleetRequests API operation for Amazon Elastic Compute Cloud. // -// Cancels the specified Spot fleet requests. +// Cancels the specified Spot Fleet requests. // -// After you cancel a Spot fleet request, the Spot fleet launches no new Spot -// instances. You must specify whether the Spot fleet should also terminate -// its Spot instances. If you terminate the instances, the Spot fleet request -// enters the cancelled_terminating state. Otherwise, the Spot fleet request +// After you cancel a Spot Fleet request, the Spot Fleet launches no new Spot +// Instances. You must specify whether the Spot Fleet should also terminate +// its Spot Instances. If you terminate the instances, the Spot Fleet request +// enters the cancelled_terminating state. Otherwise, the Spot Fleet request // enters the cancelled_running state and the instances continue to run until // they are interrupted or you terminate them manually. // @@ -1752,30 +2755,44 @@ func (c *EC2) CancelSpotFleetRequestsRequest(input *CancelSpotFleetRequestsInput // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CancelSpotFleetRequests for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequests +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequests func (c *EC2) CancelSpotFleetRequests(input *CancelSpotFleetRequestsInput) (*CancelSpotFleetRequestsOutput, error) { req, out := c.CancelSpotFleetRequestsRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CancelSpotFleetRequestsWithContext is the same as CancelSpotFleetRequests with the addition of +// the ability to pass a context and additional request options. +// +// See CancelSpotFleetRequests for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CancelSpotFleetRequestsWithContext(ctx aws.Context, input *CancelSpotFleetRequestsInput, opts ...request.Option) (*CancelSpotFleetRequestsOutput, error) { + req, out := c.CancelSpotFleetRequestsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCancelSpotInstanceRequests = "CancelSpotInstanceRequests" // CancelSpotInstanceRequestsRequest generates a "aws/request.Request" representing the // client's request for the CancelSpotInstanceRequests operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CancelSpotInstanceRequests for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CancelSpotInstanceRequests method directly -// instead. +// See CancelSpotInstanceRequests for more information on using the CancelSpotInstanceRequests +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CancelSpotInstanceRequestsRequest method. // req, resp := client.CancelSpotInstanceRequestsRequest(params) @@ -1785,7 +2802,7 @@ const opCancelSpotInstanceRequests = "CancelSpotInstanceRequests" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequests +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequests func (c *EC2) CancelSpotInstanceRequestsRequest(input *CancelSpotInstanceRequestsInput) (req *request.Request, output *CancelSpotInstanceRequestsOutput) { op := &request.Operation{ Name: opCancelSpotInstanceRequests, @@ -1804,14 +2821,9 @@ func (c *EC2) CancelSpotInstanceRequestsRequest(input *CancelSpotInstanceRequest // CancelSpotInstanceRequests API operation for Amazon Elastic Compute Cloud. // -// Cancels one or more Spot instance requests. Spot instances are instances -// that Amazon EC2 starts on your behalf when the bid price that you specify -// exceeds the current Spot price. Amazon EC2 periodically sets the Spot price -// based on available Spot instance capacity and current Spot instance requests. -// For more information, see Spot Instance Requests (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Cancels one or more Spot Instance requests. // -// Canceling a Spot instance request does not terminate running Spot instances +// Canceling a Spot Instance request does not terminate running Spot Instances // associated with the request. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -1820,30 +2832,44 @@ func (c *EC2) CancelSpotInstanceRequestsRequest(input *CancelSpotInstanceRequest // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CancelSpotInstanceRequests for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequests +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequests func (c *EC2) CancelSpotInstanceRequests(input *CancelSpotInstanceRequestsInput) (*CancelSpotInstanceRequestsOutput, error) { req, out := c.CancelSpotInstanceRequestsRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CancelSpotInstanceRequestsWithContext is the same as CancelSpotInstanceRequests with the addition of +// the ability to pass a context and additional request options. +// +// See CancelSpotInstanceRequests for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CancelSpotInstanceRequestsWithContext(ctx aws.Context, input *CancelSpotInstanceRequestsInput, opts ...request.Option) (*CancelSpotInstanceRequestsOutput, error) { + req, out := c.CancelSpotInstanceRequestsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opConfirmProductInstance = "ConfirmProductInstance" // ConfirmProductInstanceRequest generates a "aws/request.Request" representing the // client's request for the ConfirmProductInstance operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See ConfirmProductInstance for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ConfirmProductInstance method directly -// instead. +// See ConfirmProductInstance for more information on using the ConfirmProductInstance +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the ConfirmProductInstanceRequest method. // req, resp := client.ConfirmProductInstanceRequest(params) @@ -1853,7 +2879,7 @@ const opConfirmProductInstance = "ConfirmProductInstance" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstance +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstance func (c *EC2) ConfirmProductInstanceRequest(input *ConfirmProductInstanceInput) (req *request.Request, output *ConfirmProductInstanceOutput) { op := &request.Operation{ Name: opConfirmProductInstance, @@ -1874,8 +2900,7 @@ func (c *EC2) ConfirmProductInstanceRequest(input *ConfirmProductInstanceInput) // // Determines whether a product code is associated with an instance. This action // can only be used by the owner of the product code. It is useful when a product -// code owner needs to verify whether another user's instance is eligible for -// support. +// code owner must verify whether another user's instance is eligible for support. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -1883,30 +2908,118 @@ func (c *EC2) ConfirmProductInstanceRequest(input *ConfirmProductInstanceInput) // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation ConfirmProductInstance for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstance +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstance func (c *EC2) ConfirmProductInstance(input *ConfirmProductInstanceInput) (*ConfirmProductInstanceOutput, error) { req, out := c.ConfirmProductInstanceRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// ConfirmProductInstanceWithContext is the same as ConfirmProductInstance with the addition of +// the ability to pass a context and additional request options. +// +// See ConfirmProductInstance for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ConfirmProductInstanceWithContext(ctx aws.Context, input *ConfirmProductInstanceInput, opts ...request.Option) (*ConfirmProductInstanceOutput, error) { + req, out := c.ConfirmProductInstanceRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCopyFpgaImage = "CopyFpgaImage" + +// CopyFpgaImageRequest generates a "aws/request.Request" representing the +// client's request for the CopyFpgaImage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CopyFpgaImage for more information on using the CopyFpgaImage +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CopyFpgaImageRequest method. +// req, resp := client.CopyFpgaImageRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyFpgaImage +func (c *EC2) CopyFpgaImageRequest(input *CopyFpgaImageInput) (req *request.Request, output *CopyFpgaImageOutput) { + op := &request.Operation{ + Name: opCopyFpgaImage, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CopyFpgaImageInput{} + } + + output = &CopyFpgaImageOutput{} + req = c.newRequest(op, input, output) + return +} + +// CopyFpgaImage API operation for Amazon Elastic Compute Cloud. +// +// Copies the specified Amazon FPGA Image (AFI) to the current Region. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CopyFpgaImage for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyFpgaImage +func (c *EC2) CopyFpgaImage(input *CopyFpgaImageInput) (*CopyFpgaImageOutput, error) { + req, out := c.CopyFpgaImageRequest(input) + return out, req.Send() +} + +// CopyFpgaImageWithContext is the same as CopyFpgaImage with the addition of +// the ability to pass a context and additional request options. +// +// See CopyFpgaImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CopyFpgaImageWithContext(ctx aws.Context, input *CopyFpgaImageInput, opts ...request.Option) (*CopyFpgaImageOutput, error) { + req, out := c.CopyFpgaImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCopyImage = "CopyImage" // CopyImageRequest generates a "aws/request.Request" representing the // client's request for the CopyImage operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CopyImage for usage and error information. +// See CopyImage for more information on using the CopyImage +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CopyImage method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CopyImageRequest method. // req, resp := client.CopyImageRequest(params) @@ -1916,7 +3029,7 @@ const opCopyImage = "CopyImage" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImage +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImage func (c *EC2) CopyImageRequest(input *CopyImageInput) (req *request.Request, output *CopyImageOutput) { op := &request.Operation{ Name: opCopyImage, @@ -1935,11 +3048,17 @@ func (c *EC2) CopyImageRequest(input *CopyImageInput) (req *request.Request, out // CopyImage API operation for Amazon Elastic Compute Cloud. // -// Initiates the copy of an AMI from the specified source region to the current -// region. You specify the destination region by using its endpoint when making +// Initiates the copy of an AMI from the specified source Region to the current +// Region. You specify the destination Region by using its endpoint when making // the request. // -// For more information, see Copying AMIs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html) +// Copies of encrypted backing snapshots for the AMI are encrypted. Copies of +// unencrypted backing snapshots remain unencrypted, unless you set Encrypted +// during the copy operation. You cannot create an unencrypted copy of an encrypted +// backing snapshot. +// +// For more information about the prerequisites and limits when copying an AMI, +// see Copying an AMI (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -1948,30 +3067,44 @@ func (c *EC2) CopyImageRequest(input *CopyImageInput) (req *request.Request, out // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CopyImage for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImage +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImage func (c *EC2) CopyImage(input *CopyImageInput) (*CopyImageOutput, error) { req, out := c.CopyImageRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CopyImageWithContext is the same as CopyImage with the addition of +// the ability to pass a context and additional request options. +// +// See CopyImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CopyImageWithContext(ctx aws.Context, input *CopyImageInput, opts ...request.Option) (*CopyImageOutput, error) { + req, out := c.CopyImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCopySnapshot = "CopySnapshot" // CopySnapshotRequest generates a "aws/request.Request" representing the // client's request for the CopySnapshot operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CopySnapshot for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CopySnapshot method directly -// instead. +// See CopySnapshot for more information on using the CopySnapshot +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CopySnapshotRequest method. // req, resp := client.CopySnapshotRequest(params) @@ -1981,7 +3114,7 @@ const opCopySnapshot = "CopySnapshot" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshot +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshot func (c *EC2) CopySnapshotRequest(input *CopySnapshotInput) (req *request.Request, output *CopySnapshotOutput) { op := &request.Operation{ Name: opCopySnapshot, @@ -2001,24 +3134,23 @@ func (c *EC2) CopySnapshotRequest(input *CopySnapshotInput) (req *request.Reques // CopySnapshot API operation for Amazon Elastic Compute Cloud. // // Copies a point-in-time snapshot of an EBS volume and stores it in Amazon -// S3. You can copy the snapshot within the same region or from one region to +// S3. You can copy the snapshot within the same Region or from one Region to // another. You can use the snapshot to create EBS volumes or Amazon Machine -// Images (AMIs). The snapshot is copied to the regional endpoint that you send -// the HTTP request to. +// Images (AMIs). // // Copies of encrypted EBS snapshots remain encrypted. Copies of unencrypted -// snapshots remain unencrypted, unless the Encrypted flag is specified during -// the snapshot copy operation. By default, encrypted snapshot copies use the -// default AWS Key Management Service (AWS KMS) customer master key (CMK); however, -// you can specify a non-default CMK with the KmsKeyId parameter. +// snapshots remain unencrypted, unless you enable encryption for the snapshot +// copy operation. By default, encrypted snapshot copies use the default AWS +// Key Management Service (AWS KMS) customer master key (CMK); however, you +// can specify a different CMK. // // To copy an encrypted snapshot that has been shared from another account, // you must have permissions for the CMK used to encrypt the snapshot. // -// Snapshots created by the CopySnapshot action have an arbitrary volume ID +// Snapshots created by copying another snapshot have an arbitrary volume ID // that should not be used for any purpose. // -// For more information, see Copying an Amazon EBS Snapshot (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html) +// For more information, see Copying an Amazon EBS Snapshot (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2027,30 +3159,294 @@ func (c *EC2) CopySnapshotRequest(input *CopySnapshotInput) (req *request.Reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CopySnapshot for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshot +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshot func (c *EC2) CopySnapshot(input *CopySnapshotInput) (*CopySnapshotOutput, error) { req, out := c.CopySnapshotRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CopySnapshotWithContext is the same as CopySnapshot with the addition of +// the ability to pass a context and additional request options. +// +// See CopySnapshot for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CopySnapshotWithContext(ctx aws.Context, input *CopySnapshotInput, opts ...request.Option) (*CopySnapshotOutput, error) { + req, out := c.CopySnapshotRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateCapacityReservation = "CreateCapacityReservation" + +// CreateCapacityReservationRequest generates a "aws/request.Request" representing the +// client's request for the CreateCapacityReservation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateCapacityReservation for more information on using the CreateCapacityReservation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateCapacityReservationRequest method. +// req, resp := client.CreateCapacityReservationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservation +func (c *EC2) CreateCapacityReservationRequest(input *CreateCapacityReservationInput) (req *request.Request, output *CreateCapacityReservationOutput) { + op := &request.Operation{ + Name: opCreateCapacityReservation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateCapacityReservationInput{} + } + + output = &CreateCapacityReservationOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateCapacityReservation API operation for Amazon Elastic Compute Cloud. +// +// Creates a new Capacity Reservation with the specified attributes. +// +// Capacity Reservations enable you to reserve capacity for your Amazon EC2 +// instances in a specific Availability Zone for any duration. This gives you +// the flexibility to selectively add capacity reservations and still get the +// Regional RI discounts for that usage. By creating Capacity Reservations, +// you ensure that you always have access to Amazon EC2 capacity when you need +// it, for as long as you need it. For more information, see Capacity Reservations +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Your request to create a Capacity Reservation could fail if Amazon EC2 does +// not have sufficient capacity to fulfill the request. If your request fails +// due to Amazon EC2 capacity constraints, either try again at a later time, +// try in a different Availability Zone, or request a smaller capacity reservation. +// If your application is flexible across instance types and sizes, try to create +// a Capacity Reservation with different instance attributes. +// +// Your request could also fail if the requested quantity exceeds your On-Demand +// Instance limit for the selected instance type. If your request fails due +// to limit constraints, increase your On-Demand Instance limit for the required +// instance type and try again. For more information about increasing your instance +// limits, see Amazon EC2 Service Limits (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateCapacityReservation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservation +func (c *EC2) CreateCapacityReservation(input *CreateCapacityReservationInput) (*CreateCapacityReservationOutput, error) { + req, out := c.CreateCapacityReservationRequest(input) + return out, req.Send() +} + +// CreateCapacityReservationWithContext is the same as CreateCapacityReservation with the addition of +// the ability to pass a context and additional request options. +// +// See CreateCapacityReservation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateCapacityReservationWithContext(ctx aws.Context, input *CreateCapacityReservationInput, opts ...request.Option) (*CreateCapacityReservationOutput, error) { + req, out := c.CreateCapacityReservationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateClientVpnEndpoint = "CreateClientVpnEndpoint" + +// CreateClientVpnEndpointRequest generates a "aws/request.Request" representing the +// client's request for the CreateClientVpnEndpoint operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateClientVpnEndpoint for more information on using the CreateClientVpnEndpoint +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateClientVpnEndpointRequest method. +// req, resp := client.CreateClientVpnEndpointRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnEndpoint +func (c *EC2) CreateClientVpnEndpointRequest(input *CreateClientVpnEndpointInput) (req *request.Request, output *CreateClientVpnEndpointOutput) { + op := &request.Operation{ + Name: opCreateClientVpnEndpoint, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateClientVpnEndpointInput{} + } + + output = &CreateClientVpnEndpointOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateClientVpnEndpoint API operation for Amazon Elastic Compute Cloud. +// +// Creates a Client VPN endpoint. A Client VPN endpoint is the resource you +// create and configure to enable and manage client VPN sessions. It is the +// destination endpoint at which all client VPN sessions are terminated. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateClientVpnEndpoint for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnEndpoint +func (c *EC2) CreateClientVpnEndpoint(input *CreateClientVpnEndpointInput) (*CreateClientVpnEndpointOutput, error) { + req, out := c.CreateClientVpnEndpointRequest(input) + return out, req.Send() +} + +// CreateClientVpnEndpointWithContext is the same as CreateClientVpnEndpoint with the addition of +// the ability to pass a context and additional request options. +// +// See CreateClientVpnEndpoint for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateClientVpnEndpointWithContext(ctx aws.Context, input *CreateClientVpnEndpointInput, opts ...request.Option) (*CreateClientVpnEndpointOutput, error) { + req, out := c.CreateClientVpnEndpointRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateClientVpnRoute = "CreateClientVpnRoute" + +// CreateClientVpnRouteRequest generates a "aws/request.Request" representing the +// client's request for the CreateClientVpnRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateClientVpnRoute for more information on using the CreateClientVpnRoute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateClientVpnRouteRequest method. +// req, resp := client.CreateClientVpnRouteRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnRoute +func (c *EC2) CreateClientVpnRouteRequest(input *CreateClientVpnRouteInput) (req *request.Request, output *CreateClientVpnRouteOutput) { + op := &request.Operation{ + Name: opCreateClientVpnRoute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateClientVpnRouteInput{} + } + + output = &CreateClientVpnRouteOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateClientVpnRoute API operation for Amazon Elastic Compute Cloud. +// +// Adds a route to a network to a Client VPN endpoint. Each Client VPN endpoint +// has a route table that describes the available destination network routes. +// Each route in the route table specifies the path for traffic to specific +// resources or networks. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateClientVpnRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnRoute +func (c *EC2) CreateClientVpnRoute(input *CreateClientVpnRouteInput) (*CreateClientVpnRouteOutput, error) { + req, out := c.CreateClientVpnRouteRequest(input) + return out, req.Send() +} + +// CreateClientVpnRouteWithContext is the same as CreateClientVpnRoute with the addition of +// the ability to pass a context and additional request options. +// +// See CreateClientVpnRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateClientVpnRouteWithContext(ctx aws.Context, input *CreateClientVpnRouteInput, opts ...request.Option) (*CreateClientVpnRouteOutput, error) { + req, out := c.CreateClientVpnRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateCustomerGateway = "CreateCustomerGateway" // CreateCustomerGatewayRequest generates a "aws/request.Request" representing the // client's request for the CreateCustomerGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateCustomerGateway for usage and error information. +// See CreateCustomerGateway for more information on using the CreateCustomerGateway +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateCustomerGateway method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateCustomerGatewayRequest method. // req, resp := client.CreateCustomerGatewayRequest(params) @@ -2060,7 +3456,7 @@ const opCreateCustomerGateway = "CreateCustomerGateway" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGateway func (c *EC2) CreateCustomerGatewayRequest(input *CreateCustomerGatewayInput) (req *request.Request, output *CreateCustomerGatewayOutput) { op := &request.Operation{ Name: opCreateCustomerGateway, @@ -2083,7 +3479,7 @@ func (c *EC2) CreateCustomerGatewayRequest(input *CreateCustomerGatewayInput) (r // gateway is the appliance at your end of the VPN connection. (The device on // the AWS side of the VPN connection is the virtual private gateway.) You must // provide the Internet-routable IP address of the customer gateway's external -// interface. The IP address must be static and may be behind a device performing +// interface. The IP address must be static and can be behind a device performing // network address translation (NAT). // // For devices that use Border Gateway Protocol (BGP), you can also provide @@ -2092,18 +3488,16 @@ func (c *EC2) CreateCustomerGatewayRequest(input *CreateCustomerGatewayInput) (r // a private ASN (in the 64512 - 65534 range). // // Amazon EC2 supports all 2-byte ASN numbers in the range of 1 - 65534, with -// the exception of 7224, which is reserved in the us-east-1 region, and 9059, -// which is reserved in the eu-west-1 region. +// the exception of 7224, which is reserved in the us-east-1 Region, and 9059, +// which is reserved in the eu-west-1 Region. // -// For more information about VPN customer gateways, see Adding a Hardware Virtual -// Private Gateway to Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html) -// in the Amazon Virtual Private Cloud User Guide. +// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) +// in the AWS Site-to-Site VPN User Guide. // -// You cannot create more than one customer gateway with the same VPN type, -// IP address, and BGP ASN parameter values. If you run an identical request -// more than one time, the first request creates the customer gateway, and subsequent -// requests return information about the existing customer gateway. The subsequent -// requests do not create new customer gateway resources. +// To create more than one customer gateway with the same VPN type, IP address, +// and BGP ASN, specify a unique device name for each customer gateway. Identical +// requests return information about the existing customer gateway and do not +// create new customer gateways. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -2111,30 +3505,208 @@ func (c *EC2) CreateCustomerGatewayRequest(input *CreateCustomerGatewayInput) (r // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateCustomerGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGateway func (c *EC2) CreateCustomerGateway(input *CreateCustomerGatewayInput) (*CreateCustomerGatewayOutput, error) { req, out := c.CreateCustomerGatewayRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateCustomerGatewayWithContext is the same as CreateCustomerGateway with the addition of +// the ability to pass a context and additional request options. +// +// See CreateCustomerGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateCustomerGatewayWithContext(ctx aws.Context, input *CreateCustomerGatewayInput, opts ...request.Option) (*CreateCustomerGatewayOutput, error) { + req, out := c.CreateCustomerGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateDefaultSubnet = "CreateDefaultSubnet" + +// CreateDefaultSubnetRequest generates a "aws/request.Request" representing the +// client's request for the CreateDefaultSubnet operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateDefaultSubnet for more information on using the CreateDefaultSubnet +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateDefaultSubnetRequest method. +// req, resp := client.CreateDefaultSubnetRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultSubnet +func (c *EC2) CreateDefaultSubnetRequest(input *CreateDefaultSubnetInput) (req *request.Request, output *CreateDefaultSubnetOutput) { + op := &request.Operation{ + Name: opCreateDefaultSubnet, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateDefaultSubnetInput{} + } + + output = &CreateDefaultSubnetOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateDefaultSubnet API operation for Amazon Elastic Compute Cloud. +// +// Creates a default subnet with a size /20 IPv4 CIDR block in the specified +// Availability Zone in your default VPC. You can have only one default subnet +// per Availability Zone. For more information, see Creating a Default Subnet +// (https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet) +// in the Amazon Virtual Private Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateDefaultSubnet for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultSubnet +func (c *EC2) CreateDefaultSubnet(input *CreateDefaultSubnetInput) (*CreateDefaultSubnetOutput, error) { + req, out := c.CreateDefaultSubnetRequest(input) + return out, req.Send() +} + +// CreateDefaultSubnetWithContext is the same as CreateDefaultSubnet with the addition of +// the ability to pass a context and additional request options. +// +// See CreateDefaultSubnet for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateDefaultSubnetWithContext(ctx aws.Context, input *CreateDefaultSubnetInput, opts ...request.Option) (*CreateDefaultSubnetOutput, error) { + req, out := c.CreateDefaultSubnetRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateDefaultVpc = "CreateDefaultVpc" + +// CreateDefaultVpcRequest generates a "aws/request.Request" representing the +// client's request for the CreateDefaultVpc operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateDefaultVpc for more information on using the CreateDefaultVpc +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateDefaultVpcRequest method. +// req, resp := client.CreateDefaultVpcRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultVpc +func (c *EC2) CreateDefaultVpcRequest(input *CreateDefaultVpcInput) (req *request.Request, output *CreateDefaultVpcOutput) { + op := &request.Operation{ + Name: opCreateDefaultVpc, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateDefaultVpcInput{} + } + + output = &CreateDefaultVpcOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateDefaultVpc API operation for Amazon Elastic Compute Cloud. +// +// Creates a default VPC with a size /16 IPv4 CIDR block and a default subnet +// in each Availability Zone. For more information about the components of a +// default VPC, see Default VPC and Default Subnets (https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) +// in the Amazon Virtual Private Cloud User Guide. You cannot specify the components +// of the default VPC yourself. +// +// If you deleted your previous default VPC, you can create a default VPC. You +// cannot have more than one default VPC per Region. +// +// If your account supports EC2-Classic, you cannot use this action to create +// a default VPC in a Region that supports EC2-Classic. If you want a default +// VPC in a Region that supports EC2-Classic, see "I really want a default VPC +// for my existing EC2 account. Is that possible?" in the Default VPCs FAQ (http://aws.amazon.com/vpc/faqs/#Default_VPCs). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateDefaultVpc for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultVpc +func (c *EC2) CreateDefaultVpc(input *CreateDefaultVpcInput) (*CreateDefaultVpcOutput, error) { + req, out := c.CreateDefaultVpcRequest(input) + return out, req.Send() +} + +// CreateDefaultVpcWithContext is the same as CreateDefaultVpc with the addition of +// the ability to pass a context and additional request options. +// +// See CreateDefaultVpc for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateDefaultVpcWithContext(ctx aws.Context, input *CreateDefaultVpcInput, opts ...request.Option) (*CreateDefaultVpcOutput, error) { + req, out := c.CreateDefaultVpcRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateDhcpOptions = "CreateDhcpOptions" // CreateDhcpOptionsRequest generates a "aws/request.Request" representing the // client's request for the CreateDhcpOptions operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateDhcpOptions for usage and error information. +// See CreateDhcpOptions for more information on using the CreateDhcpOptions +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateDhcpOptions method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateDhcpOptionsRequest method. // req, resp := client.CreateDhcpOptionsRequest(params) @@ -2144,7 +3716,7 @@ const opCreateDhcpOptions = "CreateDhcpOptions" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptions +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptions func (c *EC2) CreateDhcpOptionsRequest(input *CreateDhcpOptionsInput) (req *request.Request, output *CreateDhcpOptionsOutput) { op := &request.Operation{ Name: opCreateDhcpOptions, @@ -2172,20 +3744,20 @@ func (c *EC2) CreateDhcpOptionsRequest(input *CreateDhcpOptionsInput) (req *requ // * domain-name-servers - The IP addresses of up to four domain name servers, // or AmazonProvidedDNS. The default DHCP option set specifies AmazonProvidedDNS. // If specifying more than one domain name server, specify the IP addresses -// in a single parameter, separated by commas. If you want your instance -// to receive a custom DNS hostname as specified in domain-name, you must -// set domain-name-servers to a custom DNS server. -// -// * domain-name - If you're using AmazonProvidedDNS in "us-east-1", specify -// "ec2.internal". If you're using AmazonProvidedDNS in another region, specify -// "region.compute.internal" (for example, "ap-northeast-1.compute.internal"). -// Otherwise, specify a domain name (for example, "MyCompany.com"). This -// value is used to complete unqualified DNS hostnames. Important: Some Linux -// operating systems accept multiple domain names separated by spaces. However, -// Windows and other Linux operating systems treat the value as a single -// domain, which results in unexpected behavior. If your DHCP options set -// is associated with a VPC that has instances with multiple operating systems, -// specify only one domain name. +// in a single parameter, separated by commas. To have your instance receive +// a custom DNS hostname as specified in domain-name, you must set domain-name-servers +// to a custom DNS server. +// +// * domain-name - If you're using AmazonProvidedDNS in us-east-1, specify +// ec2.internal. If you're using AmazonProvidedDNS in another Region, specify +// region.compute.internal (for example, ap-northeast-1.compute.internal). +// Otherwise, specify a domain name (for example, MyCompany.com). This value +// is used to complete unqualified DNS hostnames. Important: Some Linux operating +// systems accept multiple domain names separated by spaces. However, Windows +// and other Linux operating systems treat the value as a single domain, +// which results in unexpected behavior. If your DHCP options set is associated +// with a VPC that has instances with multiple operating systems, specify +// only one domain name. // // * ntp-servers - The IP addresses of up to four Network Time Protocol (NTP) // servers. @@ -2198,10 +3770,9 @@ func (c *EC2) CreateDhcpOptionsRequest(input *CreateDhcpOptionsInput) (req *requ // // Your VPC automatically starts out with a set of DHCP options that includes // only a DNS server that we provide (AmazonProvidedDNS). If you create a set -// of options, and if your VPC has an Internet gateway, make sure to set the +// of options, and if your VPC has an internet gateway, make sure to set the // domain-name-servers option either to AmazonProvidedDNS or to a domain name -// server of your choice. For more information about DHCP options, see DHCP -// Options Sets (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html) +// server of your choice. For more information, see DHCP Options Sets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2210,30 +3781,44 @@ func (c *EC2) CreateDhcpOptionsRequest(input *CreateDhcpOptionsInput) (req *requ // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateDhcpOptions for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptions +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptions func (c *EC2) CreateDhcpOptions(input *CreateDhcpOptionsInput) (*CreateDhcpOptionsOutput, error) { req, out := c.CreateDhcpOptionsRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateDhcpOptionsWithContext is the same as CreateDhcpOptions with the addition of +// the ability to pass a context and additional request options. +// +// See CreateDhcpOptions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateDhcpOptionsWithContext(ctx aws.Context, input *CreateDhcpOptionsInput, opts ...request.Option) (*CreateDhcpOptionsOutput, error) { + req, out := c.CreateDhcpOptionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateEgressOnlyInternetGateway = "CreateEgressOnlyInternetGateway" // CreateEgressOnlyInternetGatewayRequest generates a "aws/request.Request" representing the // client's request for the CreateEgressOnlyInternetGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateEgressOnlyInternetGateway for usage and error information. +// See CreateEgressOnlyInternetGateway for more information on using the CreateEgressOnlyInternetGateway +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateEgressOnlyInternetGateway method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateEgressOnlyInternetGatewayRequest method. // req, resp := client.CreateEgressOnlyInternetGatewayRequest(params) @@ -2243,7 +3828,7 @@ const opCreateEgressOnlyInternetGateway = "CreateEgressOnlyInternetGateway" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGateway func (c *EC2) CreateEgressOnlyInternetGatewayRequest(input *CreateEgressOnlyInternetGatewayInput) (req *request.Request, output *CreateEgressOnlyInternetGatewayOutput) { op := &request.Operation{ Name: opCreateEgressOnlyInternetGateway, @@ -2262,9 +3847,9 @@ func (c *EC2) CreateEgressOnlyInternetGatewayRequest(input *CreateEgressOnlyInte // CreateEgressOnlyInternetGateway API operation for Amazon Elastic Compute Cloud. // -// [IPv6 only] Creates an egress-only Internet gateway for your VPC. An egress-only -// Internet gateway is used to enable outbound communication over IPv6 from -// instances in your VPC to the Internet, and prevents hosts outside of your +// [IPv6 only] Creates an egress-only internet gateway for your VPC. An egress-only +// internet gateway is used to enable outbound communication over IPv6 from +// instances in your VPC to the internet, and prevents hosts outside of your // VPC from initiating an IPv6 connection with your instance. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2273,30 +3858,124 @@ func (c *EC2) CreateEgressOnlyInternetGatewayRequest(input *CreateEgressOnlyInte // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateEgressOnlyInternetGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGateway func (c *EC2) CreateEgressOnlyInternetGateway(input *CreateEgressOnlyInternetGatewayInput) (*CreateEgressOnlyInternetGatewayOutput, error) { req, out := c.CreateEgressOnlyInternetGatewayRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateEgressOnlyInternetGatewayWithContext is the same as CreateEgressOnlyInternetGateway with the addition of +// the ability to pass a context and additional request options. +// +// See CreateEgressOnlyInternetGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateEgressOnlyInternetGatewayWithContext(ctx aws.Context, input *CreateEgressOnlyInternetGatewayInput, opts ...request.Option) (*CreateEgressOnlyInternetGatewayOutput, error) { + req, out := c.CreateEgressOnlyInternetGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateFleet = "CreateFleet" + +// CreateFleetRequest generates a "aws/request.Request" representing the +// client's request for the CreateFleet operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateFleet for more information on using the CreateFleet +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateFleetRequest method. +// req, resp := client.CreateFleetRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFleet +func (c *EC2) CreateFleetRequest(input *CreateFleetInput) (req *request.Request, output *CreateFleetOutput) { + op := &request.Operation{ + Name: opCreateFleet, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateFleetInput{} + } + + output = &CreateFleetOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateFleet API operation for Amazon Elastic Compute Cloud. +// +// Launches an EC2 Fleet. +// +// You can create a single EC2 Fleet that includes multiple launch specifications +// that vary by instance type, AMI, Availability Zone, or subnet. +// +// For more information, see Launching an EC2 Fleet (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateFleet for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFleet +func (c *EC2) CreateFleet(input *CreateFleetInput) (*CreateFleetOutput, error) { + req, out := c.CreateFleetRequest(input) + return out, req.Send() +} + +// CreateFleetWithContext is the same as CreateFleet with the addition of +// the ability to pass a context and additional request options. +// +// See CreateFleet for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateFleetWithContext(ctx aws.Context, input *CreateFleetInput, opts ...request.Option) (*CreateFleetOutput, error) { + req, out := c.CreateFleetRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateFlowLogs = "CreateFlowLogs" // CreateFlowLogsRequest generates a "aws/request.Request" representing the // client's request for the CreateFlowLogs operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateFlowLogs for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateFlowLogs method directly -// instead. +// See CreateFlowLogs for more information on using the CreateFlowLogs +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateFlowLogsRequest method. // req, resp := client.CreateFlowLogsRequest(params) @@ -2306,7 +3985,7 @@ const opCreateFlowLogs = "CreateFlowLogs" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogs +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogs func (c *EC2) CreateFlowLogsRequest(input *CreateFlowLogsInput) (req *request.Request, output *CreateFlowLogsOutput) { op := &request.Operation{ Name: opCreateFlowLogs, @@ -2325,16 +4004,22 @@ func (c *EC2) CreateFlowLogsRequest(input *CreateFlowLogsInput) (req *request.Re // CreateFlowLogs API operation for Amazon Elastic Compute Cloud. // -// Creates one or more flow logs to capture IP traffic for a specific network -// interface, subnet, or VPC. Flow logs are delivered to a specified log group -// in Amazon CloudWatch Logs. If you specify a VPC or subnet in the request, -// a log stream is created in CloudWatch Logs for each network interface in -// the subnet or VPC. Log streams can include information about accepted and -// rejected traffic to a network interface. You can view the data in your log -// streams using Amazon CloudWatch Logs. +// Creates one or more flow logs to capture information about IP traffic for +// a specific network interface, subnet, or VPC. +// +// Flow log data for a monitored network interface is recorded as flow log records, +// which are log events consisting of fields that describe the traffic flow. +// For more information, see Flow Log Records (https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) +// in the Amazon Virtual Private Cloud User Guide. +// +// When publishing to CloudWatch Logs, flow log records are published to a log +// group, and each network interface has a unique log stream in the log group. +// When publishing to Amazon S3, flow log records for all of the monitored network +// interfaces are published to a single log file object that is stored in the +// specified bucket. // -// In your request, you must also specify an IAM role that has permission to -// publish logs to CloudWatch Logs. +// For more information, see VPC Flow Logs (https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) +// in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -2342,30 +4027,125 @@ func (c *EC2) CreateFlowLogsRequest(input *CreateFlowLogsInput) (req *request.Re // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateFlowLogs for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogs +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogs func (c *EC2) CreateFlowLogs(input *CreateFlowLogsInput) (*CreateFlowLogsOutput, error) { req, out := c.CreateFlowLogsRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateFlowLogsWithContext is the same as CreateFlowLogs with the addition of +// the ability to pass a context and additional request options. +// +// See CreateFlowLogs for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateFlowLogsWithContext(ctx aws.Context, input *CreateFlowLogsInput, opts ...request.Option) (*CreateFlowLogsOutput, error) { + req, out := c.CreateFlowLogsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateFpgaImage = "CreateFpgaImage" + +// CreateFpgaImageRequest generates a "aws/request.Request" representing the +// client's request for the CreateFpgaImage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateFpgaImage for more information on using the CreateFpgaImage +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateFpgaImageRequest method. +// req, resp := client.CreateFpgaImageRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFpgaImage +func (c *EC2) CreateFpgaImageRequest(input *CreateFpgaImageInput) (req *request.Request, output *CreateFpgaImageOutput) { + op := &request.Operation{ + Name: opCreateFpgaImage, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateFpgaImageInput{} + } + + output = &CreateFpgaImageOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateFpgaImage API operation for Amazon Elastic Compute Cloud. +// +// Creates an Amazon FPGA Image (AFI) from the specified design checkpoint (DCP). +// +// The create operation is asynchronous. To verify that the AFI is ready for +// use, check the output logs. +// +// An AFI contains the FPGA bitstream that is ready to download to an FPGA. +// You can securely deploy an AFI on multiple FPGA-accelerated instances. For +// more information, see the AWS FPGA Hardware Development Kit (https://github.com/aws/aws-fpga/). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateFpgaImage for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFpgaImage +func (c *EC2) CreateFpgaImage(input *CreateFpgaImageInput) (*CreateFpgaImageOutput, error) { + req, out := c.CreateFpgaImageRequest(input) + return out, req.Send() +} + +// CreateFpgaImageWithContext is the same as CreateFpgaImage with the addition of +// the ability to pass a context and additional request options. +// +// See CreateFpgaImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateFpgaImageWithContext(ctx aws.Context, input *CreateFpgaImageInput, opts ...request.Option) (*CreateFpgaImageOutput, error) { + req, out := c.CreateFpgaImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateImage = "CreateImage" // CreateImageRequest generates a "aws/request.Request" representing the // client's request for the CreateImage operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateImage for usage and error information. +// See CreateImage for more information on using the CreateImage +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateImage method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateImageRequest method. // req, resp := client.CreateImageRequest(params) @@ -2375,7 +4155,7 @@ const opCreateImage = "CreateImage" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImage +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImage func (c *EC2) CreateImageRequest(input *CreateImageInput) (req *request.Request, output *CreateImageOutput) { op := &request.Operation{ Name: opCreateImage, @@ -2402,7 +4182,7 @@ func (c *EC2) CreateImageRequest(input *CreateImageInput) (req *request.Request, // mapping information for those volumes. When you launch an instance from this // new AMI, the instance automatically launches with those additional volumes. // -// For more information, see Creating Amazon EBS-Backed Linux AMIs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) +// For more information, see Creating Amazon EBS-Backed Linux AMIs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2411,30 +4191,44 @@ func (c *EC2) CreateImageRequest(input *CreateImageInput) (req *request.Request, // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateImage for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImage +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImage func (c *EC2) CreateImage(input *CreateImageInput) (*CreateImageOutput, error) { req, out := c.CreateImageRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateImageWithContext is the same as CreateImage with the addition of +// the ability to pass a context and additional request options. +// +// See CreateImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateImageWithContext(ctx aws.Context, input *CreateImageInput, opts ...request.Option) (*CreateImageOutput, error) { + req, out := c.CreateImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateInstanceExportTask = "CreateInstanceExportTask" // CreateInstanceExportTaskRequest generates a "aws/request.Request" representing the // client's request for the CreateInstanceExportTask operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateInstanceExportTask for usage and error information. +// See CreateInstanceExportTask for more information on using the CreateInstanceExportTask +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateInstanceExportTask method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateInstanceExportTaskRequest method. // req, resp := client.CreateInstanceExportTaskRequest(params) @@ -2444,7 +4238,7 @@ const opCreateInstanceExportTask = "CreateInstanceExportTask" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTask func (c *EC2) CreateInstanceExportTaskRequest(input *CreateInstanceExportTaskInput) (req *request.Request, output *CreateInstanceExportTaskOutput) { op := &request.Operation{ Name: opCreateInstanceExportTask, @@ -2467,7 +4261,7 @@ func (c *EC2) CreateInstanceExportTaskRequest(input *CreateInstanceExportTaskInp // // For information about the supported operating systems, image formats, and // known limitations for the types of instances you can export, see Exporting -// an Instance as a VM Using VM Import/Export (http://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html) +// an Instance as a VM Using VM Import/Export (https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html) // in the VM Import/Export User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2476,30 +4270,44 @@ func (c *EC2) CreateInstanceExportTaskRequest(input *CreateInstanceExportTaskInp // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateInstanceExportTask for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTask +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTask func (c *EC2) CreateInstanceExportTask(input *CreateInstanceExportTaskInput) (*CreateInstanceExportTaskOutput, error) { req, out := c.CreateInstanceExportTaskRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateInstanceExportTaskWithContext is the same as CreateInstanceExportTask with the addition of +// the ability to pass a context and additional request options. +// +// See CreateInstanceExportTask for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateInstanceExportTaskWithContext(ctx aws.Context, input *CreateInstanceExportTaskInput, opts ...request.Option) (*CreateInstanceExportTaskOutput, error) { + req, out := c.CreateInstanceExportTaskRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateInternetGateway = "CreateInternetGateway" // CreateInternetGatewayRequest generates a "aws/request.Request" representing the // client's request for the CreateInternetGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateInternetGateway for usage and error information. +// See CreateInternetGateway for more information on using the CreateInternetGateway +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateInternetGateway method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateInternetGatewayRequest method. // req, resp := client.CreateInternetGatewayRequest(params) @@ -2509,7 +4317,7 @@ const opCreateInternetGateway = "CreateInternetGateway" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGateway func (c *EC2) CreateInternetGatewayRequest(input *CreateInternetGatewayInput) (req *request.Request, output *CreateInternetGatewayOutput) { op := &request.Operation{ Name: opCreateInternetGateway, @@ -2528,11 +4336,11 @@ func (c *EC2) CreateInternetGatewayRequest(input *CreateInternetGatewayInput) (r // CreateInternetGateway API operation for Amazon Elastic Compute Cloud. // -// Creates an Internet gateway for use with a VPC. After creating the Internet +// Creates an internet gateway for use with a VPC. After creating the internet // gateway, you attach it to a VPC using AttachInternetGateway. // -// For more information about your VPC and Internet gateway, see the Amazon -// Virtual Private Cloud User Guide (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/). +// For more information about your VPC and internet gateway, see the Amazon +// Virtual Private Cloud User Guide (https://docs.aws.amazon.com/vpc/latest/userguide/). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -2540,30 +4348,44 @@ func (c *EC2) CreateInternetGatewayRequest(input *CreateInternetGatewayInput) (r // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateInternetGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGateway func (c *EC2) CreateInternetGateway(input *CreateInternetGatewayInput) (*CreateInternetGatewayOutput, error) { req, out := c.CreateInternetGatewayRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateInternetGatewayWithContext is the same as CreateInternetGateway with the addition of +// the ability to pass a context and additional request options. +// +// See CreateInternetGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateInternetGatewayWithContext(ctx aws.Context, input *CreateInternetGatewayInput, opts ...request.Option) (*CreateInternetGatewayOutput, error) { + req, out := c.CreateInternetGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateKeyPair = "CreateKeyPair" // CreateKeyPairRequest generates a "aws/request.Request" representing the // client's request for the CreateKeyPair operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateKeyPair for usage and error information. +// See CreateKeyPair for more information on using the CreateKeyPair +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateKeyPair method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateKeyPairRequest method. // req, resp := client.CreateKeyPairRequest(params) @@ -2573,7 +4395,7 @@ const opCreateKeyPair = "CreateKeyPair" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateKeyPair +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateKeyPair func (c *EC2) CreateKeyPairRequest(input *CreateKeyPairInput) (req *request.Request, output *CreateKeyPairOutput) { op := &request.Operation{ Name: opCreateKeyPair, @@ -2594,15 +4416,16 @@ func (c *EC2) CreateKeyPairRequest(input *CreateKeyPairInput) (req *request.Requ // // Creates a 2048-bit RSA key pair with the specified name. Amazon EC2 stores // the public key and displays the private key for you to save to a file. The -// private key is returned as an unencrypted PEM encoded PKCS#8 private key. +// private key is returned as an unencrypted PEM encoded PKCS#1 private key. // If a key with the specified name already exists, Amazon EC2 returns an error. // -// You can have up to five thousand key pairs per region. +// You can have up to five thousand key pairs per Region. // -// The key pair returned to you is available only in the region in which you -// create it. To create a key pair that is available in all regions, use ImportKeyPair. +// The key pair returned to you is available only in the Region in which you +// create it. If you prefer, you can create your own key pair using a third-party +// tool and upload it to any Region using ImportKeyPair. // -// For more information about key pairs, see Key Pairs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) +// For more information, see Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2611,30 +4434,198 @@ func (c *EC2) CreateKeyPairRequest(input *CreateKeyPairInput) (req *request.Requ // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateKeyPair for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateKeyPair +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateKeyPair func (c *EC2) CreateKeyPair(input *CreateKeyPairInput) (*CreateKeyPairOutput, error) { req, out := c.CreateKeyPairRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateKeyPairWithContext is the same as CreateKeyPair with the addition of +// the ability to pass a context and additional request options. +// +// See CreateKeyPair for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateKeyPairWithContext(ctx aws.Context, input *CreateKeyPairInput, opts ...request.Option) (*CreateKeyPairOutput, error) { + req, out := c.CreateKeyPairRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateLaunchTemplate = "CreateLaunchTemplate" + +// CreateLaunchTemplateRequest generates a "aws/request.Request" representing the +// client's request for the CreateLaunchTemplate operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateLaunchTemplate for more information on using the CreateLaunchTemplate +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateLaunchTemplateRequest method. +// req, resp := client.CreateLaunchTemplateRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplate +func (c *EC2) CreateLaunchTemplateRequest(input *CreateLaunchTemplateInput) (req *request.Request, output *CreateLaunchTemplateOutput) { + op := &request.Operation{ + Name: opCreateLaunchTemplate, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateLaunchTemplateInput{} + } + + output = &CreateLaunchTemplateOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateLaunchTemplate API operation for Amazon Elastic Compute Cloud. +// +// Creates a launch template. A launch template contains the parameters to launch +// an instance. When you launch an instance using RunInstances, you can specify +// a launch template instead of providing the launch parameters in the request. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateLaunchTemplate for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplate +func (c *EC2) CreateLaunchTemplate(input *CreateLaunchTemplateInput) (*CreateLaunchTemplateOutput, error) { + req, out := c.CreateLaunchTemplateRequest(input) + return out, req.Send() +} + +// CreateLaunchTemplateWithContext is the same as CreateLaunchTemplate with the addition of +// the ability to pass a context and additional request options. +// +// See CreateLaunchTemplate for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateLaunchTemplateWithContext(ctx aws.Context, input *CreateLaunchTemplateInput, opts ...request.Option) (*CreateLaunchTemplateOutput, error) { + req, out := c.CreateLaunchTemplateRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateLaunchTemplateVersion = "CreateLaunchTemplateVersion" + +// CreateLaunchTemplateVersionRequest generates a "aws/request.Request" representing the +// client's request for the CreateLaunchTemplateVersion operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateLaunchTemplateVersion for more information on using the CreateLaunchTemplateVersion +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateLaunchTemplateVersionRequest method. +// req, resp := client.CreateLaunchTemplateVersionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplateVersion +func (c *EC2) CreateLaunchTemplateVersionRequest(input *CreateLaunchTemplateVersionInput) (req *request.Request, output *CreateLaunchTemplateVersionOutput) { + op := &request.Operation{ + Name: opCreateLaunchTemplateVersion, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateLaunchTemplateVersionInput{} + } + + output = &CreateLaunchTemplateVersionOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateLaunchTemplateVersion API operation for Amazon Elastic Compute Cloud. +// +// Creates a new version for a launch template. You can specify an existing +// version of launch template from which to base the new version. +// +// Launch template versions are numbered in the order in which they are created. +// You cannot specify, change, or replace the numbering of launch template versions. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateLaunchTemplateVersion for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplateVersion +func (c *EC2) CreateLaunchTemplateVersion(input *CreateLaunchTemplateVersionInput) (*CreateLaunchTemplateVersionOutput, error) { + req, out := c.CreateLaunchTemplateVersionRequest(input) + return out, req.Send() +} + +// CreateLaunchTemplateVersionWithContext is the same as CreateLaunchTemplateVersion with the addition of +// the ability to pass a context and additional request options. +// +// See CreateLaunchTemplateVersion for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateLaunchTemplateVersionWithContext(ctx aws.Context, input *CreateLaunchTemplateVersionInput, opts ...request.Option) (*CreateLaunchTemplateVersionOutput, error) { + req, out := c.CreateLaunchTemplateVersionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateNatGateway = "CreateNatGateway" // CreateNatGatewayRequest generates a "aws/request.Request" representing the // client's request for the CreateNatGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateNatGateway for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateNatGateway method directly -// instead. +// See CreateNatGateway for more information on using the CreateNatGateway +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateNatGatewayRequest method. // req, resp := client.CreateNatGatewayRequest(params) @@ -2644,7 +4635,7 @@ const opCreateNatGateway = "CreateNatGateway" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGateway func (c *EC2) CreateNatGatewayRequest(input *CreateNatGatewayInput) (req *request.Request, output *CreateNatGatewayOutput) { op := &request.Operation{ Name: opCreateNatGateway, @@ -2663,11 +4654,12 @@ func (c *EC2) CreateNatGatewayRequest(input *CreateNatGatewayInput) (req *reques // CreateNatGateway API operation for Amazon Elastic Compute Cloud. // -// Creates a NAT gateway in the specified subnet. A NAT gateway can be used -// to enable instances in a private subnet to connect to the Internet. This -// action creates a network interface in the specified subnet with a private -// IP address from the IP address range of the subnet. For more information, -// see NAT Gateways (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html) +// Creates a NAT gateway in the specified public subnet. This action creates +// a network interface in the specified subnet with a private IP address from +// the IP address range of the subnet. Internet-bound traffic from a private +// subnet can be routed to the NAT gateway, therefore enabling instances in +// the private subnet to connect to the internet. For more information, see +// NAT Gateways (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2676,30 +4668,44 @@ func (c *EC2) CreateNatGatewayRequest(input *CreateNatGatewayInput) (req *reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateNatGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGateway +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGateway func (c *EC2) CreateNatGateway(input *CreateNatGatewayInput) (*CreateNatGatewayOutput, error) { req, out := c.CreateNatGatewayRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateNatGatewayWithContext is the same as CreateNatGateway with the addition of +// the ability to pass a context and additional request options. +// +// See CreateNatGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateNatGatewayWithContext(ctx aws.Context, input *CreateNatGatewayInput, opts ...request.Option) (*CreateNatGatewayOutput, error) { + req, out := c.CreateNatGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateNetworkAcl = "CreateNetworkAcl" // CreateNetworkAclRequest generates a "aws/request.Request" representing the // client's request for the CreateNetworkAcl operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateNetworkAcl for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateNetworkAcl method directly -// instead. +// See CreateNetworkAcl for more information on using the CreateNetworkAcl +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateNetworkAclRequest method. // req, resp := client.CreateNetworkAclRequest(params) @@ -2709,7 +4715,7 @@ const opCreateNetworkAcl = "CreateNetworkAcl" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAcl +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAcl func (c *EC2) CreateNetworkAclRequest(input *CreateNetworkAclInput) (req *request.Request, output *CreateNetworkAclOutput) { op := &request.Operation{ Name: opCreateNetworkAcl, @@ -2731,7 +4737,7 @@ func (c *EC2) CreateNetworkAclRequest(input *CreateNetworkAclInput) (req *reques // Creates a network ACL in a VPC. Network ACLs provide an optional layer of // security (in addition to security groups) for the instances in your VPC. // -// For more information about network ACLs, see Network ACLs (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html) +// For more information, see Network ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2740,30 +4746,44 @@ func (c *EC2) CreateNetworkAclRequest(input *CreateNetworkAclInput) (req *reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateNetworkAcl for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAcl +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAcl func (c *EC2) CreateNetworkAcl(input *CreateNetworkAclInput) (*CreateNetworkAclOutput, error) { req, out := c.CreateNetworkAclRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateNetworkAclWithContext is the same as CreateNetworkAcl with the addition of +// the ability to pass a context and additional request options. +// +// See CreateNetworkAcl for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateNetworkAclWithContext(ctx aws.Context, input *CreateNetworkAclInput, opts ...request.Option) (*CreateNetworkAclOutput, error) { + req, out := c.CreateNetworkAclRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateNetworkAclEntry = "CreateNetworkAclEntry" // CreateNetworkAclEntryRequest generates a "aws/request.Request" representing the // client's request for the CreateNetworkAclEntry operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateNetworkAclEntry for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateNetworkAclEntry method directly -// instead. +// See CreateNetworkAclEntry for more information on using the CreateNetworkAclEntry +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateNetworkAclEntryRequest method. // req, resp := client.CreateNetworkAclEntryRequest(params) @@ -2773,7 +4793,7 @@ const opCreateNetworkAclEntry = "CreateNetworkAclEntry" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntry +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntry func (c *EC2) CreateNetworkAclEntryRequest(input *CreateNetworkAclEntryInput) (req *request.Request, output *CreateNetworkAclEntryOutput) { op := &request.Operation{ Name: opCreateNetworkAclEntry, @@ -2787,8 +4807,7 @@ func (c *EC2) CreateNetworkAclEntryRequest(input *CreateNetworkAclEntryInput) (r output = &CreateNetworkAclEntryOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } @@ -2809,7 +4828,7 @@ func (c *EC2) CreateNetworkAclEntryRequest(input *CreateNetworkAclEntryInput) (r // After you add an entry, you can't modify it; you must either replace it, // or create an entry and delete the old one. // -// For more information about network ACLs, see Network ACLs (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html) +// For more information about network ACLs, see Network ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2818,30 +4837,44 @@ func (c *EC2) CreateNetworkAclEntryRequest(input *CreateNetworkAclEntryInput) (r // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateNetworkAclEntry for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntry +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntry func (c *EC2) CreateNetworkAclEntry(input *CreateNetworkAclEntryInput) (*CreateNetworkAclEntryOutput, error) { req, out := c.CreateNetworkAclEntryRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateNetworkAclEntryWithContext is the same as CreateNetworkAclEntry with the addition of +// the ability to pass a context and additional request options. +// +// See CreateNetworkAclEntry for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateNetworkAclEntryWithContext(ctx aws.Context, input *CreateNetworkAclEntryInput, opts ...request.Option) (*CreateNetworkAclEntryOutput, error) { + req, out := c.CreateNetworkAclEntryRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateNetworkInterface = "CreateNetworkInterface" // CreateNetworkInterfaceRequest generates a "aws/request.Request" representing the // client's request for the CreateNetworkInterface operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateNetworkInterface for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateNetworkInterface method directly -// instead. +// See CreateNetworkInterface for more information on using the CreateNetworkInterface +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateNetworkInterfaceRequest method. // req, resp := client.CreateNetworkInterfaceRequest(params) @@ -2851,7 +4884,7 @@ const opCreateNetworkInterface = "CreateNetworkInterface" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterface +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterface func (c *EC2) CreateNetworkInterfaceRequest(input *CreateNetworkInterfaceInput) (req *request.Request, output *CreateNetworkInterfaceOutput) { op := &request.Operation{ Name: opCreateNetworkInterface, @@ -2873,7 +4906,7 @@ func (c *EC2) CreateNetworkInterfaceRequest(input *CreateNetworkInterfaceInput) // Creates a network interface in the specified subnet. // // For more information about network interfaces, see Elastic Network Interfaces -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) in the +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html) in the // Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2882,30 +4915,122 @@ func (c *EC2) CreateNetworkInterfaceRequest(input *CreateNetworkInterfaceInput) // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateNetworkInterface for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterface +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterface func (c *EC2) CreateNetworkInterface(input *CreateNetworkInterfaceInput) (*CreateNetworkInterfaceOutput, error) { req, out := c.CreateNetworkInterfaceRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateNetworkInterfaceWithContext is the same as CreateNetworkInterface with the addition of +// the ability to pass a context and additional request options. +// +// See CreateNetworkInterface for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateNetworkInterfaceWithContext(ctx aws.Context, input *CreateNetworkInterfaceInput, opts ...request.Option) (*CreateNetworkInterfaceOutput, error) { + req, out := c.CreateNetworkInterfaceRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateNetworkInterfacePermission = "CreateNetworkInterfacePermission" + +// CreateNetworkInterfacePermissionRequest generates a "aws/request.Request" representing the +// client's request for the CreateNetworkInterfacePermission operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateNetworkInterfacePermission for more information on using the CreateNetworkInterfacePermission +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateNetworkInterfacePermissionRequest method. +// req, resp := client.CreateNetworkInterfacePermissionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfacePermission +func (c *EC2) CreateNetworkInterfacePermissionRequest(input *CreateNetworkInterfacePermissionInput) (req *request.Request, output *CreateNetworkInterfacePermissionOutput) { + op := &request.Operation{ + Name: opCreateNetworkInterfacePermission, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateNetworkInterfacePermissionInput{} + } + + output = &CreateNetworkInterfacePermissionOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateNetworkInterfacePermission API operation for Amazon Elastic Compute Cloud. +// +// Grants an AWS-authorized account permission to attach the specified network +// interface to an instance in their account. +// +// You can grant permission to a single AWS account only, and only one account +// at a time. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateNetworkInterfacePermission for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfacePermission +func (c *EC2) CreateNetworkInterfacePermission(input *CreateNetworkInterfacePermissionInput) (*CreateNetworkInterfacePermissionOutput, error) { + req, out := c.CreateNetworkInterfacePermissionRequest(input) + return out, req.Send() +} + +// CreateNetworkInterfacePermissionWithContext is the same as CreateNetworkInterfacePermission with the addition of +// the ability to pass a context and additional request options. +// +// See CreateNetworkInterfacePermission for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateNetworkInterfacePermissionWithContext(ctx aws.Context, input *CreateNetworkInterfacePermissionInput, opts ...request.Option) (*CreateNetworkInterfacePermissionOutput, error) { + req, out := c.CreateNetworkInterfacePermissionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreatePlacementGroup = "CreatePlacementGroup" // CreatePlacementGroupRequest generates a "aws/request.Request" representing the // client's request for the CreatePlacementGroup operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreatePlacementGroup for usage and error information. +// See CreatePlacementGroup for more information on using the CreatePlacementGroup +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreatePlacementGroup method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreatePlacementGroupRequest method. // req, resp := client.CreatePlacementGroupRequest(params) @@ -2915,7 +5040,7 @@ const opCreatePlacementGroup = "CreatePlacementGroup" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroup +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroup func (c *EC2) CreatePlacementGroupRequest(input *CreatePlacementGroupInput) (req *request.Request, output *CreatePlacementGroupOutput) { op := &request.Operation{ Name: opCreatePlacementGroup, @@ -2929,18 +5054,23 @@ func (c *EC2) CreatePlacementGroupRequest(input *CreatePlacementGroupInput) (req output = &CreatePlacementGroupOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } // CreatePlacementGroup API operation for Amazon Elastic Compute Cloud. // -// Creates a placement group that you launch cluster instances into. You must -// give the group a name that's unique within the scope of your account. +// Creates a placement group in which to launch instances. The strategy of the +// placement group determines how the instances are organized within the group. // -// For more information about placement groups and cluster instances, see Cluster -// Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html) +// A cluster placement group is a logical grouping of instances within a single +// Availability Zone that benefit from low network latency, high network throughput. +// A spread placement group places instances on distinct hardware. A partition +// placement group places groups of instances in different partitions, where +// instances in one partition do not share the same hardware with instances +// in another partition. +// +// For more information, see Placement Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -2949,30 +5079,44 @@ func (c *EC2) CreatePlacementGroupRequest(input *CreatePlacementGroupInput) (req // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreatePlacementGroup for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroup +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroup func (c *EC2) CreatePlacementGroup(input *CreatePlacementGroupInput) (*CreatePlacementGroupOutput, error) { req, out := c.CreatePlacementGroupRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreatePlacementGroupWithContext is the same as CreatePlacementGroup with the addition of +// the ability to pass a context and additional request options. +// +// See CreatePlacementGroup for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreatePlacementGroupWithContext(ctx aws.Context, input *CreatePlacementGroupInput, opts ...request.Option) (*CreatePlacementGroupOutput, error) { + req, out := c.CreatePlacementGroupRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateReservedInstancesListing = "CreateReservedInstancesListing" // CreateReservedInstancesListingRequest generates a "aws/request.Request" representing the // client's request for the CreateReservedInstancesListing operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateReservedInstancesListing for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateReservedInstancesListing method directly -// instead. +// See CreateReservedInstancesListing for more information on using the CreateReservedInstancesListing +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateReservedInstancesListingRequest method. // req, resp := client.CreateReservedInstancesListingRequest(params) @@ -2982,7 +5126,7 @@ const opCreateReservedInstancesListing = "CreateReservedInstancesListing" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListing +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListing func (c *EC2) CreateReservedInstancesListingRequest(input *CreateReservedInstancesListingInput) (req *request.Request, output *CreateReservedInstancesListingOutput) { op := &request.Operation{ Name: opCreateReservedInstancesListing, @@ -3006,9 +5150,8 @@ func (c *EC2) CreateReservedInstancesListingRequest(input *CreateReservedInstanc // listing at a time. To get a list of your Standard Reserved Instances, you // can use the DescribeReservedInstances operation. // -// Only Standard Reserved Instances with a capacity reservation can be sold -// in the Reserved Instance Marketplace. Convertible Reserved Instances and -// Standard Reserved Instances with a regional benefit cannot be sold. +// Only Standard Reserved Instances can be sold in the Reserved Instance Marketplace. +// Convertible Reserved Instances cannot be sold. // // The Reserved Instance Marketplace matches sellers who want to resell Standard // Reserved Instance capacity that they no longer need with buyers who want @@ -3023,7 +5166,7 @@ func (c *EC2) CreateReservedInstancesListingRequest(input *CreateReservedInstanc // for purchase. To view the details of your Standard Reserved Instance listing, // you can use the DescribeReservedInstancesListings operation. // -// For more information, see Reserved Instance Marketplace (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) +// For more information, see Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -3032,30 +5175,44 @@ func (c *EC2) CreateReservedInstancesListingRequest(input *CreateReservedInstanc // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateReservedInstancesListing for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListing +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListing func (c *EC2) CreateReservedInstancesListing(input *CreateReservedInstancesListingInput) (*CreateReservedInstancesListingOutput, error) { req, out := c.CreateReservedInstancesListingRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateReservedInstancesListingWithContext is the same as CreateReservedInstancesListing with the addition of +// the ability to pass a context and additional request options. +// +// See CreateReservedInstancesListing for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateReservedInstancesListingWithContext(ctx aws.Context, input *CreateReservedInstancesListingInput, opts ...request.Option) (*CreateReservedInstancesListingOutput, error) { + req, out := c.CreateReservedInstancesListingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateRoute = "CreateRoute" // CreateRouteRequest generates a "aws/request.Request" representing the // client's request for the CreateRoute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateRoute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateRoute method directly -// instead. +// See CreateRoute for more information on using the CreateRoute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateRouteRequest method. // req, resp := client.CreateRouteRequest(params) @@ -3065,7 +5222,7 @@ const opCreateRoute = "CreateRoute" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRoute +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRoute func (c *EC2) CreateRouteRequest(input *CreateRouteInput) (req *request.Request, output *CreateRouteOutput) { op := &request.Operation{ Name: opCreateRoute, @@ -3086,9 +5243,9 @@ func (c *EC2) CreateRouteRequest(input *CreateRouteInput) (req *request.Request, // // Creates a route in a route table within a VPC. // -// You must specify one of the following targets: Internet gateway or virtual +// You must specify one of the following targets: internet gateway or virtual // private gateway, NAT instance, NAT gateway, VPC peering connection, network -// interface, or egress-only Internet gateway. +// interface, or egress-only internet gateway. // // When determining how to route traffic, we use the route with the most specific // match. For example, traffic is destined for the IPv4 address 192.0.2.3, and @@ -3102,7 +5259,7 @@ func (c *EC2) CreateRouteRequest(input *CreateRouteInput) (req *request.Request, // route in the list covers a smaller number of IP addresses and is therefore // more specific, so we use that route to determine where to target the traffic. // -// For more information about route tables, see Route Tables (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html) +// For more information about route tables, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -3111,30 +5268,44 @@ func (c *EC2) CreateRouteRequest(input *CreateRouteInput) (req *request.Request, // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateRoute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRoute +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRoute func (c *EC2) CreateRoute(input *CreateRouteInput) (*CreateRouteOutput, error) { req, out := c.CreateRouteRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateRouteWithContext is the same as CreateRoute with the addition of +// the ability to pass a context and additional request options. +// +// See CreateRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateRouteWithContext(ctx aws.Context, input *CreateRouteInput, opts ...request.Option) (*CreateRouteOutput, error) { + req, out := c.CreateRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateRouteTable = "CreateRouteTable" // CreateRouteTableRequest generates a "aws/request.Request" representing the // client's request for the CreateRouteTable operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateRouteTable for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateRouteTable method directly -// instead. +// See CreateRouteTable for more information on using the CreateRouteTable +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateRouteTableRequest method. // req, resp := client.CreateRouteTableRequest(params) @@ -3144,7 +5315,7 @@ const opCreateRouteTable = "CreateRouteTable" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTable +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTable func (c *EC2) CreateRouteTableRequest(input *CreateRouteTableInput) (req *request.Request, output *CreateRouteTableOutput) { op := &request.Operation{ Name: opCreateRouteTable, @@ -3166,7 +5337,7 @@ func (c *EC2) CreateRouteTableRequest(input *CreateRouteTableInput) (req *reques // Creates a route table for the specified VPC. After you create a route table, // you can add routes and associate the table with a subnet. // -// For more information about route tables, see Route Tables (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html) +// For more information, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -3175,30 +5346,44 @@ func (c *EC2) CreateRouteTableRequest(input *CreateRouteTableInput) (req *reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateRouteTable for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTable +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTable func (c *EC2) CreateRouteTable(input *CreateRouteTableInput) (*CreateRouteTableOutput, error) { req, out := c.CreateRouteTableRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateRouteTableWithContext is the same as CreateRouteTable with the addition of +// the ability to pass a context and additional request options. +// +// See CreateRouteTable for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateRouteTableWithContext(ctx aws.Context, input *CreateRouteTableInput, opts ...request.Option) (*CreateRouteTableOutput, error) { + req, out := c.CreateRouteTableRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateSecurityGroup = "CreateSecurityGroup" // CreateSecurityGroupRequest generates a "aws/request.Request" representing the // client's request for the CreateSecurityGroup operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateSecurityGroup for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateSecurityGroup method directly -// instead. +// See CreateSecurityGroup for more information on using the CreateSecurityGroup +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateSecurityGroupRequest method. // req, resp := client.CreateSecurityGroupRequest(params) @@ -3208,7 +5393,7 @@ const opCreateSecurityGroup = "CreateSecurityGroup" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroup +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroup func (c *EC2) CreateSecurityGroupRequest(input *CreateSecurityGroupInput) (req *request.Request, output *CreateSecurityGroupOutput) { op := &request.Operation{ Name: opCreateSecurityGroup, @@ -3229,17 +5414,13 @@ func (c *EC2) CreateSecurityGroupRequest(input *CreateSecurityGroupInput) (req * // // Creates a security group. // -// A security group is for use with instances either in the EC2-Classic platform -// or in a specific VPC. For more information, see Amazon EC2 Security Groups -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) +// A security group acts as a virtual firewall for your instance to control +// inbound and outbound traffic. For more information, see Amazon EC2 Security +// Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) // in the Amazon Elastic Compute Cloud User Guide and Security Groups for Your -// VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) +// VPC (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) // in the Amazon Virtual Private Cloud User Guide. // -// EC2-Classic: You can have up to 500 security groups. -// -// EC2-VPC: You can create up to 500 security groups per VPC. -// // When you create a security group, you specify a friendly name of your choice. // You can have a security group for use in EC2-Classic with the same name as // a security group for use in a VPC. However, you can't have two security groups @@ -3255,36 +5436,53 @@ func (c *EC2) CreateSecurityGroupRequest(input *CreateSecurityGroupInput) (req * // You can add or remove rules from your security groups using AuthorizeSecurityGroupIngress, // AuthorizeSecurityGroupEgress, RevokeSecurityGroupIngress, and RevokeSecurityGroupEgress. // +// For more information about VPC security group limits, see Amazon VPC Limits +// (https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html). +// // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateSecurityGroup for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroup +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroup func (c *EC2) CreateSecurityGroup(input *CreateSecurityGroupInput) (*CreateSecurityGroupOutput, error) { req, out := c.CreateSecurityGroupRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateSecurityGroupWithContext is the same as CreateSecurityGroup with the addition of +// the ability to pass a context and additional request options. +// +// See CreateSecurityGroup for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateSecurityGroupWithContext(ctx aws.Context, input *CreateSecurityGroupInput, opts ...request.Option) (*CreateSecurityGroupOutput, error) { + req, out := c.CreateSecurityGroupRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateSnapshot = "CreateSnapshot" // CreateSnapshotRequest generates a "aws/request.Request" representing the // client's request for the CreateSnapshot operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateSnapshot for usage and error information. +// See CreateSnapshot for more information on using the CreateSnapshot +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateSnapshot method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateSnapshotRequest method. // req, resp := client.CreateSnapshotRequest(params) @@ -3294,7 +5492,7 @@ const opCreateSnapshot = "CreateSnapshot" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshot +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshot func (c *EC2) CreateSnapshotRequest(input *CreateSnapshotInput) (req *request.Request, output *Snapshot) { op := &request.Operation{ Name: opCreateSnapshot, @@ -3338,8 +5536,12 @@ func (c *EC2) CreateSnapshotRequest(input *CreateSnapshotInput) (req *request.Re // encrypted. Your encrypted volumes and any associated snapshots always remain // protected. // -// For more information, see Amazon Elastic Block Store (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) -// and Amazon EBS Encryption (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// You can tag your snapshots during creation. For more information, see Tagging +// Your Amazon EC2 Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// For more information, see Amazon Elastic Block Store (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) +// and Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -3348,30 +5550,121 @@ func (c *EC2) CreateSnapshotRequest(input *CreateSnapshotInput) (req *request.Re // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateSnapshot for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshot +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshot func (c *EC2) CreateSnapshot(input *CreateSnapshotInput) (*Snapshot, error) { req, out := c.CreateSnapshotRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateSnapshotWithContext is the same as CreateSnapshot with the addition of +// the ability to pass a context and additional request options. +// +// See CreateSnapshot for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateSnapshotWithContext(ctx aws.Context, input *CreateSnapshotInput, opts ...request.Option) (*Snapshot, error) { + req, out := c.CreateSnapshotRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateSnapshots = "CreateSnapshots" + +// CreateSnapshotsRequest generates a "aws/request.Request" representing the +// client's request for the CreateSnapshots operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateSnapshots for more information on using the CreateSnapshots +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateSnapshotsRequest method. +// req, resp := client.CreateSnapshotsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshots +func (c *EC2) CreateSnapshotsRequest(input *CreateSnapshotsInput) (req *request.Request, output *CreateSnapshotsOutput) { + op := &request.Operation{ + Name: opCreateSnapshots, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateSnapshotsInput{} + } + + output = &CreateSnapshotsOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateSnapshots API operation for Amazon Elastic Compute Cloud. +// +// Creates crash-consistent snapshots of multiple EBS volumes and stores the +// data in S3. Volumes are chosen by specifying an instance. Any attached volumes +// will produce one snapshot each that is crash-consistent across the instance. +// Boot volumes can be excluded by changing the parameters. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation CreateSnapshots for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshots +func (c *EC2) CreateSnapshots(input *CreateSnapshotsInput) (*CreateSnapshotsOutput, error) { + req, out := c.CreateSnapshotsRequest(input) + return out, req.Send() +} + +// CreateSnapshotsWithContext is the same as CreateSnapshots with the addition of +// the ability to pass a context and additional request options. +// +// See CreateSnapshots for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateSnapshotsWithContext(ctx aws.Context, input *CreateSnapshotsInput, opts ...request.Option) (*CreateSnapshotsOutput, error) { + req, out := c.CreateSnapshotsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateSpotDatafeedSubscription = "CreateSpotDatafeedSubscription" // CreateSpotDatafeedSubscriptionRequest generates a "aws/request.Request" representing the // client's request for the CreateSpotDatafeedSubscription operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateSpotDatafeedSubscription for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateSpotDatafeedSubscription method directly -// instead. +// See CreateSpotDatafeedSubscription for more information on using the CreateSpotDatafeedSubscription +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateSpotDatafeedSubscriptionRequest method. // req, resp := client.CreateSpotDatafeedSubscriptionRequest(params) @@ -3381,7 +5674,7 @@ const opCreateSpotDatafeedSubscription = "CreateSpotDatafeedSubscription" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscription +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscription func (c *EC2) CreateSpotDatafeedSubscriptionRequest(input *CreateSpotDatafeedSubscriptionInput) (req *request.Request, output *CreateSpotDatafeedSubscriptionOutput) { op := &request.Operation{ Name: opCreateSpotDatafeedSubscription, @@ -3400,10 +5693,10 @@ func (c *EC2) CreateSpotDatafeedSubscriptionRequest(input *CreateSpotDatafeedSub // CreateSpotDatafeedSubscription API operation for Amazon Elastic Compute Cloud. // -// Creates a data feed for Spot instances, enabling you to view Spot instance +// Creates a data feed for Spot Instances, enabling you to view Spot Instance // usage logs. You can create one data feed per AWS account. For more information, -// see Spot Instance Data Feed (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) -// in the Amazon Elastic Compute Cloud User Guide. +// see Spot Instance Data Feed (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) +// in the Amazon EC2 User Guide for Linux Instances. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -3411,30 +5704,44 @@ func (c *EC2) CreateSpotDatafeedSubscriptionRequest(input *CreateSpotDatafeedSub // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateSpotDatafeedSubscription for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscription +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscription func (c *EC2) CreateSpotDatafeedSubscription(input *CreateSpotDatafeedSubscriptionInput) (*CreateSpotDatafeedSubscriptionOutput, error) { req, out := c.CreateSpotDatafeedSubscriptionRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateSpotDatafeedSubscriptionWithContext is the same as CreateSpotDatafeedSubscription with the addition of +// the ability to pass a context and additional request options. +// +// See CreateSpotDatafeedSubscription for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateSpotDatafeedSubscriptionWithContext(ctx aws.Context, input *CreateSpotDatafeedSubscriptionInput, opts ...request.Option) (*CreateSpotDatafeedSubscriptionOutput, error) { + req, out := c.CreateSpotDatafeedSubscriptionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateSubnet = "CreateSubnet" // CreateSubnetRequest generates a "aws/request.Request" representing the // client's request for the CreateSubnet operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateSubnet for usage and error information. +// See CreateSubnet for more information on using the CreateSubnet +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateSubnet method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateSubnetRequest method. // req, resp := client.CreateSubnetRequest(params) @@ -3444,7 +5751,7 @@ const opCreateSubnet = "CreateSubnet" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnet +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnet func (c *EC2) CreateSubnetRequest(input *CreateSubnetInput) (req *request.Request, output *CreateSubnetOutput) { op := &request.Operation{ Name: opCreateSubnet, @@ -3465,19 +5772,18 @@ func (c *EC2) CreateSubnetRequest(input *CreateSubnetInput) (req *request.Reques // // Creates a subnet in an existing VPC. // -// When you create each subnet, you provide the VPC ID and the CIDR block you -// want for the subnet. After you create a subnet, you can't change its CIDR -// block. The subnet's IPv4 CIDR block can be the same as the VPC's IPv4 CIDR -// block (assuming you want only a single subnet in the VPC), or a subset of -// the VPC's IPv4 CIDR block. If you create more than one subnet in a VPC, the -// subnets' CIDR blocks must not overlap. The smallest IPv4 subnet (and VPC) -// you can create uses a /28 netmask (16 IPv4 addresses), and the largest uses -// a /16 netmask (65,536 IPv4 addresses). +// When you create each subnet, you provide the VPC ID and IPv4 CIDR block for +// the subnet. After you create a subnet, you can't change its CIDR block. The +// size of the subnet's IPv4 CIDR block can be the same as a VPC's IPv4 CIDR +// block, or a subset of a VPC's IPv4 CIDR block. If you create more than one +// subnet in a VPC, the subnets' CIDR blocks must not overlap. The smallest +// IPv4 subnet (and VPC) you can create uses a /28 netmask (16 IPv4 addresses), +// and the largest uses a /16 netmask (65,536 IPv4 addresses). // // If you've associated an IPv6 CIDR block with your VPC, you can create a subnet // with an IPv6 CIDR block that uses a /64 prefix length. // -// AWS reserves both the first four and the last IP address in each subnet's +// AWS reserves both the first four and the last IPv4 address in each subnet's // CIDR block. They're not available for use. // // If you add more than one subnet to a VPC, they're set up in a star topology @@ -3489,7 +5795,7 @@ func (c *EC2) CreateSubnetRequest(input *CreateSubnetInput) (req *request.Reques // It's therefore possible to have a subnet with no running instances (they're // all stopped), but no remaining IP addresses available. // -// For more information about subnets, see Your VPC and Subnets (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html) +// For more information about subnets, see Your VPC and Subnets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) // in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -3498,30 +5804,44 @@ func (c *EC2) CreateSubnetRequest(input *CreateSubnetInput) (req *request.Reques // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateSubnet for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnet +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnet func (c *EC2) CreateSubnet(input *CreateSubnetInput) (*CreateSubnetOutput, error) { req, out := c.CreateSubnetRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// CreateSubnetWithContext is the same as CreateSubnet with the addition of +// the ability to pass a context and additional request options. +// +// See CreateSubnet for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateSubnetWithContext(ctx aws.Context, input *CreateSubnetInput, opts ...request.Option) (*CreateSubnetOutput, error) { + req, out := c.CreateSubnetRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opCreateTags = "CreateTags" // CreateTagsRequest generates a "aws/request.Request" representing the // client's request for the CreateTags operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See CreateTags for usage and error information. +// See CreateTags for more information on using the CreateTags +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateTags method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the CreateTagsRequest method. // req, resp := client.CreateTagsRequest(params) @@ -3531,7 +5851,7 @@ const opCreateTags = "CreateTags" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTags +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTags func (c *EC2) CreateTagsRequest(input *CreateTagsInput) (req *request.Request, output *CreateTagsOutput) { op := &request.Operation{ Name: opCreateTags, @@ -3545,21 +5865,20 @@ func (c *EC2) CreateTagsRequest(input *CreateTagsInput) (req *request.Request, o output = &CreateTagsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } // CreateTags API operation for Amazon Elastic Compute Cloud. // -// Adds or overwrites one or more tags for the specified Amazon EC2 resource +// Adds or overwrites the specified tags for the specified Amazon EC2 resource // or resources. Each resource can have a maximum of 50 tags. Each tag consists // of a key and optional value. Tag keys must be unique per resource. // -// For more information about tags, see Tagging Your Resources (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) +// For more information about tags, see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) // in the Amazon Elastic Compute Cloud User Guide. For more information about // creating IAM policies that control users' access to resources based on tags, -// see Supported Resource-Level Permissions for Amazon EC2 API Actions (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html) +// see Supported Resource-Level Permissions for Amazon EC2 API Actions (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -3568,2316 +5887,2798 @@ func (c *EC2) CreateTagsRequest(input *CreateTagsInput) (req *request.Request, o // // See the AWS API reference guide for Amazon Elastic Compute Cloud's // API operation CreateTags for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTags +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTags func (c *EC2) CreateTags(input *CreateTagsInput) (*CreateTagsOutput, error) { req, out := c.CreateTagsRequest(input) - err := req.Send() - return out, err + return out, req.Send() } -const opCreateVolume = "CreateVolume" +// CreateTagsWithContext is the same as CreateTags with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTags for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTagsWithContext(ctx aws.Context, input *CreateTagsInput, opts ...request.Option) (*CreateTagsOutput, error) { + req, out := c.CreateTagsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// CreateVolumeRequest generates a "aws/request.Request" representing the -// client's request for the CreateVolume operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateTrafficMirrorFilter = "CreateTrafficMirrorFilter" + +// CreateTrafficMirrorFilterRequest generates a "aws/request.Request" representing the +// client's request for the CreateTrafficMirrorFilter operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateVolume for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateVolume method directly -// instead. +// See CreateTrafficMirrorFilter for more information on using the CreateTrafficMirrorFilter +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the CreateVolumeRequest method. -// req, resp := client.CreateVolumeRequest(params) +// +// // Example sending a request using the CreateTrafficMirrorFilterRequest method. +// req, resp := client.CreateTrafficMirrorFilterRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolume -func (c *EC2) CreateVolumeRequest(input *CreateVolumeInput) (req *request.Request, output *Volume) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilter +func (c *EC2) CreateTrafficMirrorFilterRequest(input *CreateTrafficMirrorFilterInput) (req *request.Request, output *CreateTrafficMirrorFilterOutput) { op := &request.Operation{ - Name: opCreateVolume, + Name: opCreateTrafficMirrorFilter, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &CreateVolumeInput{} + input = &CreateTrafficMirrorFilterInput{} } - output = &Volume{} + output = &CreateTrafficMirrorFilterOutput{} req = c.newRequest(op, input, output) return } -// CreateVolume API operation for Amazon Elastic Compute Cloud. -// -// Creates an EBS volume that can be attached to an instance in the same Availability -// Zone. The volume is created in the regional endpoint that you send the HTTP -// request to. For more information see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html). +// CreateTrafficMirrorFilter API operation for Amazon Elastic Compute Cloud. // -// You can create a new empty volume or restore a volume from an EBS snapshot. -// Any AWS Marketplace product codes from the snapshot are propagated to the -// volume. +// Creates a Traffic Mirror filter. // -// You can create encrypted volumes with the Encrypted parameter. Encrypted -// volumes may only be attached to instances that support Amazon EBS encryption. -// Volumes that are created from encrypted snapshots are also automatically -// encrypted. For more information, see Amazon EBS Encryption (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) -// in the Amazon Elastic Compute Cloud User Guide. +// A Traffic Mirror filter is a set of rules that defines the traffic to mirror. // -// For more information, see Creating or Restoring an Amazon EBS Volume (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html) -// in the Amazon Elastic Compute Cloud User Guide. +// By default, no traffic is mirrored. To mirror traffic, use CreateTrafficMirrorFilterRule +// (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilterRule.htm) +// to add Traffic Mirror rules to the filter. The rules you add define what +// traffic gets mirrored. You can also use ModifyTrafficMirrorFilterNetworkServices +// (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyTrafficMirrorFilterNetworkServices.html) +// to mirror supported network services. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVolume for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolume -func (c *EC2) CreateVolume(input *CreateVolumeInput) (*Volume, error) { - req, out := c.CreateVolumeRequest(input) - err := req.Send() - return out, err +// API operation CreateTrafficMirrorFilter for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilter +func (c *EC2) CreateTrafficMirrorFilter(input *CreateTrafficMirrorFilterInput) (*CreateTrafficMirrorFilterOutput, error) { + req, out := c.CreateTrafficMirrorFilterRequest(input) + return out, req.Send() } -const opCreateVpc = "CreateVpc" +// CreateTrafficMirrorFilterWithContext is the same as CreateTrafficMirrorFilter with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTrafficMirrorFilter for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTrafficMirrorFilterWithContext(ctx aws.Context, input *CreateTrafficMirrorFilterInput, opts ...request.Option) (*CreateTrafficMirrorFilterOutput, error) { + req, out := c.CreateTrafficMirrorFilterRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// CreateVpcRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpc operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateTrafficMirrorFilterRule = "CreateTrafficMirrorFilterRule" + +// CreateTrafficMirrorFilterRuleRequest generates a "aws/request.Request" representing the +// client's request for the CreateTrafficMirrorFilterRule operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateVpc for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateVpc method directly -// instead. +// See CreateTrafficMirrorFilterRule for more information on using the CreateTrafficMirrorFilterRule +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the CreateVpcRequest method. -// req, resp := client.CreateVpcRequest(params) +// +// // Example sending a request using the CreateTrafficMirrorFilterRuleRequest method. +// req, resp := client.CreateTrafficMirrorFilterRuleRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpc -func (c *EC2) CreateVpcRequest(input *CreateVpcInput) (req *request.Request, output *CreateVpcOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilterRule +func (c *EC2) CreateTrafficMirrorFilterRuleRequest(input *CreateTrafficMirrorFilterRuleInput) (req *request.Request, output *CreateTrafficMirrorFilterRuleOutput) { op := &request.Operation{ - Name: opCreateVpc, + Name: opCreateTrafficMirrorFilterRule, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &CreateVpcInput{} + input = &CreateTrafficMirrorFilterRuleInput{} } - output = &CreateVpcOutput{} + output = &CreateTrafficMirrorFilterRuleOutput{} req = c.newRequest(op, input, output) return } -// CreateVpc API operation for Amazon Elastic Compute Cloud. -// -// Creates a VPC with the specified IPv4 CIDR block. The smallest VPC you can -// create uses a /28 netmask (16 IPv4 addresses), and the largest uses a /16 -// netmask (65,536 IPv4 addresses). To help you decide how big to make your -// VPC, see Your VPC and Subnets (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html) -// in the Amazon Virtual Private Cloud User Guide. +// CreateTrafficMirrorFilterRule API operation for Amazon Elastic Compute Cloud. // -// You can optionally request an Amazon-provided IPv6 CIDR block for the VPC. -// The IPv6 CIDR block uses a /56 prefix length, and is allocated from Amazon's -// pool of IPv6 addresses. You cannot choose the IPv6 range for your VPC. +// Creates a Traffic Mirror filter rule. // -// By default, each instance you launch in the VPC has the default DHCP options, -// which includes only a default DNS server that we provide (AmazonProvidedDNS). -// For more information about DHCP options, see DHCP Options Sets (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html) -// in the Amazon Virtual Private Cloud User Guide. +// A Traffic Mirror rule defines the Traffic Mirror source traffic to mirror. // -// You can specify the instance tenancy value for the VPC when you create it. -// You can't change this value for the VPC after you create it. For more information, -// see Dedicated Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) -// in the Amazon Elastic Compute Cloud User Guide. +// You need the Traffic Mirror filter ID when you create the rule. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpc for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpc -func (c *EC2) CreateVpc(input *CreateVpcInput) (*CreateVpcOutput, error) { - req, out := c.CreateVpcRequest(input) - err := req.Send() - return out, err +// API operation CreateTrafficMirrorFilterRule for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilterRule +func (c *EC2) CreateTrafficMirrorFilterRule(input *CreateTrafficMirrorFilterRuleInput) (*CreateTrafficMirrorFilterRuleOutput, error) { + req, out := c.CreateTrafficMirrorFilterRuleRequest(input) + return out, req.Send() } -const opCreateVpcEndpoint = "CreateVpcEndpoint" +// CreateTrafficMirrorFilterRuleWithContext is the same as CreateTrafficMirrorFilterRule with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTrafficMirrorFilterRule for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTrafficMirrorFilterRuleWithContext(ctx aws.Context, input *CreateTrafficMirrorFilterRuleInput, opts ...request.Option) (*CreateTrafficMirrorFilterRuleOutput, error) { + req, out := c.CreateTrafficMirrorFilterRuleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// CreateVpcEndpointRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpcEndpoint operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateTrafficMirrorSession = "CreateTrafficMirrorSession" + +// CreateTrafficMirrorSessionRequest generates a "aws/request.Request" representing the +// client's request for the CreateTrafficMirrorSession operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateVpcEndpoint for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateVpcEndpoint method directly -// instead. +// See CreateTrafficMirrorSession for more information on using the CreateTrafficMirrorSession +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the CreateVpcEndpointRequest method. -// req, resp := client.CreateVpcEndpointRequest(params) +// +// // Example sending a request using the CreateTrafficMirrorSessionRequest method. +// req, resp := client.CreateTrafficMirrorSessionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpoint -func (c *EC2) CreateVpcEndpointRequest(input *CreateVpcEndpointInput) (req *request.Request, output *CreateVpcEndpointOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorSession +func (c *EC2) CreateTrafficMirrorSessionRequest(input *CreateTrafficMirrorSessionInput) (req *request.Request, output *CreateTrafficMirrorSessionOutput) { op := &request.Operation{ - Name: opCreateVpcEndpoint, + Name: opCreateTrafficMirrorSession, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &CreateVpcEndpointInput{} + input = &CreateTrafficMirrorSessionInput{} } - output = &CreateVpcEndpointOutput{} + output = &CreateTrafficMirrorSessionOutput{} req = c.newRequest(op, input, output) return } -// CreateVpcEndpoint API operation for Amazon Elastic Compute Cloud. +// CreateTrafficMirrorSession API operation for Amazon Elastic Compute Cloud. +// +// Creates a Traffic Mirror session. // -// Creates a VPC endpoint for a specified AWS service. An endpoint enables you -// to create a private connection between your VPC and another AWS service in -// your account. You can specify an endpoint policy to attach to the endpoint -// that will control access to the service from your VPC. You can also specify -// the VPC route tables that use the endpoint. +// A Traffic Mirror session actively copies packets from a Traffic Mirror source +// to a Traffic Mirror target. Create a filter, and then assign it to the session +// to define a subset of the traffic to mirror, for example all TCP traffic. // -// Use DescribeVpcEndpointServices to get a list of supported AWS services. +// The Traffic Mirror source and the Traffic Mirror target (monitoring appliances) +// can be in the same VPC, or in a different VPC connected via VPC peering or +// a transit gateway. +// +// By default, no traffic is mirrored. Use CreateTrafficMirrorFilter (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilter.htm) +// to create filter rules that specify the traffic to mirror. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpcEndpoint for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpoint -func (c *EC2) CreateVpcEndpoint(input *CreateVpcEndpointInput) (*CreateVpcEndpointOutput, error) { - req, out := c.CreateVpcEndpointRequest(input) - err := req.Send() - return out, err +// API operation CreateTrafficMirrorSession for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorSession +func (c *EC2) CreateTrafficMirrorSession(input *CreateTrafficMirrorSessionInput) (*CreateTrafficMirrorSessionOutput, error) { + req, out := c.CreateTrafficMirrorSessionRequest(input) + return out, req.Send() } -const opCreateVpcPeeringConnection = "CreateVpcPeeringConnection" +// CreateTrafficMirrorSessionWithContext is the same as CreateTrafficMirrorSession with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTrafficMirrorSession for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTrafficMirrorSessionWithContext(ctx aws.Context, input *CreateTrafficMirrorSessionInput, opts ...request.Option) (*CreateTrafficMirrorSessionOutput, error) { + req, out := c.CreateTrafficMirrorSessionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// CreateVpcPeeringConnectionRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpcPeeringConnection operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateTrafficMirrorTarget = "CreateTrafficMirrorTarget" + +// CreateTrafficMirrorTargetRequest generates a "aws/request.Request" representing the +// client's request for the CreateTrafficMirrorTarget operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateVpcPeeringConnection for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateVpcPeeringConnection method directly -// instead. +// See CreateTrafficMirrorTarget for more information on using the CreateTrafficMirrorTarget +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the CreateVpcPeeringConnectionRequest method. -// req, resp := client.CreateVpcPeeringConnectionRequest(params) +// +// // Example sending a request using the CreateTrafficMirrorTargetRequest method. +// req, resp := client.CreateTrafficMirrorTargetRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnection -func (c *EC2) CreateVpcPeeringConnectionRequest(input *CreateVpcPeeringConnectionInput) (req *request.Request, output *CreateVpcPeeringConnectionOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorTarget +func (c *EC2) CreateTrafficMirrorTargetRequest(input *CreateTrafficMirrorTargetInput) (req *request.Request, output *CreateTrafficMirrorTargetOutput) { op := &request.Operation{ - Name: opCreateVpcPeeringConnection, + Name: opCreateTrafficMirrorTarget, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &CreateVpcPeeringConnectionInput{} + input = &CreateTrafficMirrorTargetInput{} } - output = &CreateVpcPeeringConnectionOutput{} + output = &CreateTrafficMirrorTargetOutput{} req = c.newRequest(op, input, output) return } -// CreateVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. +// CreateTrafficMirrorTarget API operation for Amazon Elastic Compute Cloud. // -// Requests a VPC peering connection between two VPCs: a requester VPC that -// you own and a peer VPC with which to create the connection. The peer VPC -// can belong to another AWS account. The requester VPC and peer VPC cannot -// have overlapping CIDR blocks. +// Creates a target for your Traffic Mirror session. // -// The owner of the peer VPC must accept the peering request to activate the -// peering connection. The VPC peering connection request expires after 7 days, -// after which it cannot be accepted or rejected. +// A Traffic Mirror target is the destination for mirrored traffic. The Traffic +// Mirror source and the Traffic Mirror target (monitoring appliances) can be +// in the same VPC, or in different VPCs connected via VPC peering or a transit +// gateway. +// +// A Traffic Mirror target can be a network interface, or a Network Load Balancer. // -// A CreateVpcPeeringConnection request between VPCs with overlapping CIDR blocks -// results in the VPC peering connection having a status of failed. +// To use the target in a Traffic Mirror session, use CreateTrafficMirrorSession +// (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorSession.htm). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpcPeeringConnection for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnection -func (c *EC2) CreateVpcPeeringConnection(input *CreateVpcPeeringConnectionInput) (*CreateVpcPeeringConnectionOutput, error) { - req, out := c.CreateVpcPeeringConnectionRequest(input) - err := req.Send() - return out, err +// API operation CreateTrafficMirrorTarget for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorTarget +func (c *EC2) CreateTrafficMirrorTarget(input *CreateTrafficMirrorTargetInput) (*CreateTrafficMirrorTargetOutput, error) { + req, out := c.CreateTrafficMirrorTargetRequest(input) + return out, req.Send() } -const opCreateVpnConnection = "CreateVpnConnection" +// CreateTrafficMirrorTargetWithContext is the same as CreateTrafficMirrorTarget with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTrafficMirrorTarget for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTrafficMirrorTargetWithContext(ctx aws.Context, input *CreateTrafficMirrorTargetInput, opts ...request.Option) (*CreateTrafficMirrorTargetOutput, error) { + req, out := c.CreateTrafficMirrorTargetRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// CreateVpnConnectionRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpnConnection operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateTransitGateway = "CreateTransitGateway" + +// CreateTransitGatewayRequest generates a "aws/request.Request" representing the +// client's request for the CreateTransitGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateVpnConnection for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateVpnConnection method directly -// instead. +// See CreateTransitGateway for more information on using the CreateTransitGateway +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the CreateVpnConnectionRequest method. -// req, resp := client.CreateVpnConnectionRequest(params) +// +// // Example sending a request using the CreateTransitGatewayRequest method. +// req, resp := client.CreateTransitGatewayRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnection -func (c *EC2) CreateVpnConnectionRequest(input *CreateVpnConnectionInput) (req *request.Request, output *CreateVpnConnectionOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGateway +func (c *EC2) CreateTransitGatewayRequest(input *CreateTransitGatewayInput) (req *request.Request, output *CreateTransitGatewayOutput) { op := &request.Operation{ - Name: opCreateVpnConnection, + Name: opCreateTransitGateway, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &CreateVpnConnectionInput{} + input = &CreateTransitGatewayInput{} } - output = &CreateVpnConnectionOutput{} + output = &CreateTransitGatewayOutput{} req = c.newRequest(op, input, output) return } -// CreateVpnConnection API operation for Amazon Elastic Compute Cloud. +// CreateTransitGateway API operation for Amazon Elastic Compute Cloud. // -// Creates a VPN connection between an existing virtual private gateway and -// a VPN customer gateway. The only supported connection type is ipsec.1. -// -// The response includes information that you need to give to your network administrator -// to configure your customer gateway. +// Creates a transit gateway. // -// We strongly recommend that you use HTTPS when calling this operation because -// the response contains sensitive cryptographic information for configuring -// your customer gateway. +// You can use a transit gateway to interconnect your virtual private clouds +// (VPC) and on-premises networks. After the transit gateway enters the available +// state, you can attach your VPCs and VPN connections to the transit gateway. // -// If you decide to shut down your VPN connection for any reason and later create -// a new VPN connection, you must reconfigure your customer gateway with the -// new information returned from this call. +// To attach your VPCs, use CreateTransitGatewayVpcAttachment. // -// This is an idempotent operation. If you perform the operation more than once, -// Amazon EC2 doesn't return an error. +// To attach a VPN connection, use CreateCustomerGateway to create a customer +// gateway and specify the ID of the customer gateway and the ID of the transit +// gateway in a call to CreateVpnConnection. // -// For more information about VPN connections, see Adding a Hardware Virtual -// Private Gateway to Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html) -// in the Amazon Virtual Private Cloud User Guide. +// When you create a transit gateway, we create a default transit gateway route +// table and use it as the default association route table and the default propagation +// route table. You can use CreateTransitGatewayRouteTable to create additional +// transit gateway route tables. If you disable automatic route propagation, +// we do not create a default transit gateway route table. You can use EnableTransitGatewayRouteTablePropagation +// to propagate routes from a resource attachment to a transit gateway route +// table. If you disable automatic associations, you can use AssociateTransitGatewayRouteTable +// to associate a resource attachment with a transit gateway route table. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpnConnection for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnection -func (c *EC2) CreateVpnConnection(input *CreateVpnConnectionInput) (*CreateVpnConnectionOutput, error) { - req, out := c.CreateVpnConnectionRequest(input) - err := req.Send() - return out, err +// API operation CreateTransitGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGateway +func (c *EC2) CreateTransitGateway(input *CreateTransitGatewayInput) (*CreateTransitGatewayOutput, error) { + req, out := c.CreateTransitGatewayRequest(input) + return out, req.Send() } -const opCreateVpnConnectionRoute = "CreateVpnConnectionRoute" +// CreateTransitGatewayWithContext is the same as CreateTransitGateway with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTransitGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTransitGatewayWithContext(ctx aws.Context, input *CreateTransitGatewayInput, opts ...request.Option) (*CreateTransitGatewayOutput, error) { + req, out := c.CreateTransitGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// CreateVpnConnectionRouteRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpnConnectionRoute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateTransitGatewayRoute = "CreateTransitGatewayRoute" + +// CreateTransitGatewayRouteRequest generates a "aws/request.Request" representing the +// client's request for the CreateTransitGatewayRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateVpnConnectionRoute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateVpnConnectionRoute method directly -// instead. +// See CreateTransitGatewayRoute for more information on using the CreateTransitGatewayRoute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the CreateVpnConnectionRouteRequest method. -// req, resp := client.CreateVpnConnectionRouteRequest(params) +// +// // Example sending a request using the CreateTransitGatewayRouteRequest method. +// req, resp := client.CreateTransitGatewayRouteRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRoute -func (c *EC2) CreateVpnConnectionRouteRequest(input *CreateVpnConnectionRouteInput) (req *request.Request, output *CreateVpnConnectionRouteOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRoute +func (c *EC2) CreateTransitGatewayRouteRequest(input *CreateTransitGatewayRouteInput) (req *request.Request, output *CreateTransitGatewayRouteOutput) { op := &request.Operation{ - Name: opCreateVpnConnectionRoute, + Name: opCreateTransitGatewayRoute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &CreateVpnConnectionRouteInput{} + input = &CreateTransitGatewayRouteInput{} } - output = &CreateVpnConnectionRouteOutput{} + output = &CreateTransitGatewayRouteOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// CreateVpnConnectionRoute API operation for Amazon Elastic Compute Cloud. -// -// Creates a static route associated with a VPN connection between an existing -// virtual private gateway and a VPN customer gateway. The static route allows -// traffic to be routed from the virtual private gateway to the VPN customer -// gateway. +// CreateTransitGatewayRoute API operation for Amazon Elastic Compute Cloud. // -// For more information about VPN connections, see Adding a Hardware Virtual -// Private Gateway to Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html) -// in the Amazon Virtual Private Cloud User Guide. +// Creates a static route for the specified transit gateway route table. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpnConnectionRoute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRoute -func (c *EC2) CreateVpnConnectionRoute(input *CreateVpnConnectionRouteInput) (*CreateVpnConnectionRouteOutput, error) { - req, out := c.CreateVpnConnectionRouteRequest(input) - err := req.Send() - return out, err +// API operation CreateTransitGatewayRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRoute +func (c *EC2) CreateTransitGatewayRoute(input *CreateTransitGatewayRouteInput) (*CreateTransitGatewayRouteOutput, error) { + req, out := c.CreateTransitGatewayRouteRequest(input) + return out, req.Send() } -const opCreateVpnGateway = "CreateVpnGateway" +// CreateTransitGatewayRouteWithContext is the same as CreateTransitGatewayRoute with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTransitGatewayRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTransitGatewayRouteWithContext(ctx aws.Context, input *CreateTransitGatewayRouteInput, opts ...request.Option) (*CreateTransitGatewayRouteOutput, error) { + req, out := c.CreateTransitGatewayRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// CreateVpnGatewayRequest generates a "aws/request.Request" representing the -// client's request for the CreateVpnGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateTransitGatewayRouteTable = "CreateTransitGatewayRouteTable" + +// CreateTransitGatewayRouteTableRequest generates a "aws/request.Request" representing the +// client's request for the CreateTransitGatewayRouteTable operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See CreateVpnGateway for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the CreateVpnGateway method directly -// instead. +// See CreateTransitGatewayRouteTable for more information on using the CreateTransitGatewayRouteTable +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the CreateVpnGatewayRequest method. -// req, resp := client.CreateVpnGatewayRequest(params) +// +// // Example sending a request using the CreateTransitGatewayRouteTableRequest method. +// req, resp := client.CreateTransitGatewayRouteTableRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGateway -func (c *EC2) CreateVpnGatewayRequest(input *CreateVpnGatewayInput) (req *request.Request, output *CreateVpnGatewayOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteTable +func (c *EC2) CreateTransitGatewayRouteTableRequest(input *CreateTransitGatewayRouteTableInput) (req *request.Request, output *CreateTransitGatewayRouteTableOutput) { op := &request.Operation{ - Name: opCreateVpnGateway, + Name: opCreateTransitGatewayRouteTable, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &CreateVpnGatewayInput{} + input = &CreateTransitGatewayRouteTableInput{} } - output = &CreateVpnGatewayOutput{} + output = &CreateTransitGatewayRouteTableOutput{} req = c.newRequest(op, input, output) return } -// CreateVpnGateway API operation for Amazon Elastic Compute Cloud. -// -// Creates a virtual private gateway. A virtual private gateway is the endpoint -// on the VPC side of your VPN connection. You can create a virtual private -// gateway before creating the VPC itself. +// CreateTransitGatewayRouteTable API operation for Amazon Elastic Compute Cloud. // -// For more information about virtual private gateways, see Adding a Hardware -// Virtual Private Gateway to Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html) -// in the Amazon Virtual Private Cloud User Guide. +// Creates a route table for the specified transit gateway. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation CreateVpnGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGateway -func (c *EC2) CreateVpnGateway(input *CreateVpnGatewayInput) (*CreateVpnGatewayOutput, error) { - req, out := c.CreateVpnGatewayRequest(input) - err := req.Send() - return out, err +// API operation CreateTransitGatewayRouteTable for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteTable +func (c *EC2) CreateTransitGatewayRouteTable(input *CreateTransitGatewayRouteTableInput) (*CreateTransitGatewayRouteTableOutput, error) { + req, out := c.CreateTransitGatewayRouteTableRequest(input) + return out, req.Send() } -const opDeleteCustomerGateway = "DeleteCustomerGateway" +// CreateTransitGatewayRouteTableWithContext is the same as CreateTransitGatewayRouteTable with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTransitGatewayRouteTable for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTransitGatewayRouteTableWithContext(ctx aws.Context, input *CreateTransitGatewayRouteTableInput, opts ...request.Option) (*CreateTransitGatewayRouteTableOutput, error) { + req, out := c.CreateTransitGatewayRouteTableRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteCustomerGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteCustomerGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateTransitGatewayVpcAttachment = "CreateTransitGatewayVpcAttachment" + +// CreateTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the +// client's request for the CreateTransitGatewayVpcAttachment operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteCustomerGateway for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteCustomerGateway method directly -// instead. +// See CreateTransitGatewayVpcAttachment for more information on using the CreateTransitGatewayVpcAttachment +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteCustomerGatewayRequest method. -// req, resp := client.DeleteCustomerGatewayRequest(params) +// +// // Example sending a request using the CreateTransitGatewayVpcAttachmentRequest method. +// req, resp := client.CreateTransitGatewayVpcAttachmentRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGateway -func (c *EC2) DeleteCustomerGatewayRequest(input *DeleteCustomerGatewayInput) (req *request.Request, output *DeleteCustomerGatewayOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayVpcAttachment +func (c *EC2) CreateTransitGatewayVpcAttachmentRequest(input *CreateTransitGatewayVpcAttachmentInput) (req *request.Request, output *CreateTransitGatewayVpcAttachmentOutput) { op := &request.Operation{ - Name: opDeleteCustomerGateway, + Name: opCreateTransitGatewayVpcAttachment, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteCustomerGatewayInput{} + input = &CreateTransitGatewayVpcAttachmentInput{} } - output = &DeleteCustomerGatewayOutput{} + output = &CreateTransitGatewayVpcAttachmentOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteCustomerGateway API operation for Amazon Elastic Compute Cloud. +// CreateTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified customer gateway. You must delete the VPN connection -// before you can delete the customer gateway. +// Attaches the specified VPC to the specified transit gateway. +// +// If you attach a VPC with a CIDR range that overlaps the CIDR range of a VPC +// that is already attached, the new VPC CIDR range is not propagated to the +// default propagation route table. +// +// To send VPC traffic to an attached transit gateway, add a route to the VPC +// route table using CreateRoute. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteCustomerGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGateway -func (c *EC2) DeleteCustomerGateway(input *DeleteCustomerGatewayInput) (*DeleteCustomerGatewayOutput, error) { - req, out := c.DeleteCustomerGatewayRequest(input) - err := req.Send() - return out, err +// API operation CreateTransitGatewayVpcAttachment for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayVpcAttachment +func (c *EC2) CreateTransitGatewayVpcAttachment(input *CreateTransitGatewayVpcAttachmentInput) (*CreateTransitGatewayVpcAttachmentOutput, error) { + req, out := c.CreateTransitGatewayVpcAttachmentRequest(input) + return out, req.Send() } -const opDeleteDhcpOptions = "DeleteDhcpOptions" +// CreateTransitGatewayVpcAttachmentWithContext is the same as CreateTransitGatewayVpcAttachment with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTransitGatewayVpcAttachment for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *CreateTransitGatewayVpcAttachmentInput, opts ...request.Option) (*CreateTransitGatewayVpcAttachmentOutput, error) { + req, out := c.CreateTransitGatewayVpcAttachmentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteDhcpOptionsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteDhcpOptions operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVolume = "CreateVolume" + +// CreateVolumeRequest generates a "aws/request.Request" representing the +// client's request for the CreateVolume operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteDhcpOptions for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteDhcpOptions method directly -// instead. +// See CreateVolume for more information on using the CreateVolume +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteDhcpOptionsRequest method. -// req, resp := client.DeleteDhcpOptionsRequest(params) +// +// // Example sending a request using the CreateVolumeRequest method. +// req, resp := client.CreateVolumeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptions -func (c *EC2) DeleteDhcpOptionsRequest(input *DeleteDhcpOptionsInput) (req *request.Request, output *DeleteDhcpOptionsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolume +func (c *EC2) CreateVolumeRequest(input *CreateVolumeInput) (req *request.Request, output *Volume) { op := &request.Operation{ - Name: opDeleteDhcpOptions, + Name: opCreateVolume, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteDhcpOptionsInput{} + input = &CreateVolumeInput{} } - output = &DeleteDhcpOptionsOutput{} + output = &Volume{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteDhcpOptions API operation for Amazon Elastic Compute Cloud. +// CreateVolume API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified set of DHCP options. You must disassociate the set -// of DHCP options before you can delete it. You can disassociate the set of -// DHCP options by associating either a new set of options or the default set -// of options with the VPC. +// Creates an EBS volume that can be attached to an instance in the same Availability +// Zone. The volume is created in the regional endpoint that you send the HTTP +// request to. For more information see Regions and Endpoints (https://docs.aws.amazon.com/general/latest/gr/rande.html). +// +// You can create a new empty volume or restore a volume from an EBS snapshot. +// Any AWS Marketplace product codes from the snapshot are propagated to the +// volume. +// +// You can create encrypted volumes. Encrypted volumes must be attached to instances +// that support Amazon EBS encryption. Volumes that are created from encrypted +// snapshots are also automatically encrypted. For more information, see Amazon +// EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// You can tag your volumes during creation. For more information, see Tagging +// Your Amazon EC2 Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// For more information, see Creating an Amazon EBS Volume (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteDhcpOptions for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptions -func (c *EC2) DeleteDhcpOptions(input *DeleteDhcpOptionsInput) (*DeleteDhcpOptionsOutput, error) { - req, out := c.DeleteDhcpOptionsRequest(input) - err := req.Send() - return out, err +// API operation CreateVolume for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolume +func (c *EC2) CreateVolume(input *CreateVolumeInput) (*Volume, error) { + req, out := c.CreateVolumeRequest(input) + return out, req.Send() } -const opDeleteEgressOnlyInternetGateway = "DeleteEgressOnlyInternetGateway" +// CreateVolumeWithContext is the same as CreateVolume with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVolume for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVolumeWithContext(ctx aws.Context, input *CreateVolumeInput, opts ...request.Option) (*Volume, error) { + req, out := c.CreateVolumeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteEgressOnlyInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteEgressOnlyInternetGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVpc = "CreateVpc" + +// CreateVpcRequest generates a "aws/request.Request" representing the +// client's request for the CreateVpc operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteEgressOnlyInternetGateway for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteEgressOnlyInternetGateway method directly -// instead. +// See CreateVpc for more information on using the CreateVpc +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteEgressOnlyInternetGatewayRequest method. -// req, resp := client.DeleteEgressOnlyInternetGatewayRequest(params) +// +// // Example sending a request using the CreateVpcRequest method. +// req, resp := client.CreateVpcRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGateway -func (c *EC2) DeleteEgressOnlyInternetGatewayRequest(input *DeleteEgressOnlyInternetGatewayInput) (req *request.Request, output *DeleteEgressOnlyInternetGatewayOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpc +func (c *EC2) CreateVpcRequest(input *CreateVpcInput) (req *request.Request, output *CreateVpcOutput) { op := &request.Operation{ - Name: opDeleteEgressOnlyInternetGateway, + Name: opCreateVpc, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteEgressOnlyInternetGatewayInput{} + input = &CreateVpcInput{} } - output = &DeleteEgressOnlyInternetGatewayOutput{} + output = &CreateVpcOutput{} req = c.newRequest(op, input, output) return } -// DeleteEgressOnlyInternetGateway API operation for Amazon Elastic Compute Cloud. +// CreateVpc API operation for Amazon Elastic Compute Cloud. +// +// Creates a VPC with the specified IPv4 CIDR block. The smallest VPC you can +// create uses a /28 netmask (16 IPv4 addresses), and the largest uses a /16 +// netmask (65,536 IPv4 addresses). For more information about how large to +// make your VPC, see Your VPC and Subnets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) +// in the Amazon Virtual Private Cloud User Guide. +// +// You can optionally request an Amazon-provided IPv6 CIDR block for the VPC. +// The IPv6 CIDR block uses a /56 prefix length, and is allocated from Amazon's +// pool of IPv6 addresses. You cannot choose the IPv6 range for your VPC. +// +// By default, each instance you launch in the VPC has the default DHCP options, +// which include only a default DNS server that we provide (AmazonProvidedDNS). +// For more information, see DHCP Options Sets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) +// in the Amazon Virtual Private Cloud User Guide. // -// Deletes an egress-only Internet gateway. +// You can specify the instance tenancy value for the VPC when you create it. +// You can't change this value for the VPC after you create it. For more information, +// see Dedicated Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteEgressOnlyInternetGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGateway -func (c *EC2) DeleteEgressOnlyInternetGateway(input *DeleteEgressOnlyInternetGatewayInput) (*DeleteEgressOnlyInternetGatewayOutput, error) { - req, out := c.DeleteEgressOnlyInternetGatewayRequest(input) - err := req.Send() - return out, err +// API operation CreateVpc for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpc +func (c *EC2) CreateVpc(input *CreateVpcInput) (*CreateVpcOutput, error) { + req, out := c.CreateVpcRequest(input) + return out, req.Send() } -const opDeleteFlowLogs = "DeleteFlowLogs" +// CreateVpcWithContext is the same as CreateVpc with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVpc for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVpcWithContext(ctx aws.Context, input *CreateVpcInput, opts ...request.Option) (*CreateVpcOutput, error) { + req, out := c.CreateVpcRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteFlowLogsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteFlowLogs operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVpcEndpoint = "CreateVpcEndpoint" + +// CreateVpcEndpointRequest generates a "aws/request.Request" representing the +// client's request for the CreateVpcEndpoint operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteFlowLogs for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteFlowLogs method directly -// instead. +// See CreateVpcEndpoint for more information on using the CreateVpcEndpoint +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteFlowLogsRequest method. -// req, resp := client.DeleteFlowLogsRequest(params) +// +// // Example sending a request using the CreateVpcEndpointRequest method. +// req, resp := client.CreateVpcEndpointRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogs -func (c *EC2) DeleteFlowLogsRequest(input *DeleteFlowLogsInput) (req *request.Request, output *DeleteFlowLogsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpoint +func (c *EC2) CreateVpcEndpointRequest(input *CreateVpcEndpointInput) (req *request.Request, output *CreateVpcEndpointOutput) { op := &request.Operation{ - Name: opDeleteFlowLogs, + Name: opCreateVpcEndpoint, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteFlowLogsInput{} + input = &CreateVpcEndpointInput{} } - output = &DeleteFlowLogsOutput{} + output = &CreateVpcEndpointOutput{} req = c.newRequest(op, input, output) return } -// DeleteFlowLogs API operation for Amazon Elastic Compute Cloud. +// CreateVpcEndpoint API operation for Amazon Elastic Compute Cloud. // -// Deletes one or more flow logs. +// Creates a VPC endpoint for a specified service. An endpoint enables you to +// create a private connection between your VPC and the service. The service +// may be provided by AWS, an AWS Marketplace partner, or another AWS account. +// For more information, see VPC Endpoints (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) +// in the Amazon Virtual Private Cloud User Guide. +// +// A gateway endpoint serves as a target for a route in your route table for +// traffic destined for the AWS service. You can specify an endpoint policy +// to attach to the endpoint that will control access to the service from your +// VPC. You can also specify the VPC route tables that use the endpoint. +// +// An interface endpoint is a network interface in your subnet that serves as +// an endpoint for communicating with the specified service. You can specify +// the subnets in which to create an endpoint, and the security groups to associate +// with the endpoint network interface. +// +// Use DescribeVpcEndpointServices to get a list of supported services. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteFlowLogs for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogs -func (c *EC2) DeleteFlowLogs(input *DeleteFlowLogsInput) (*DeleteFlowLogsOutput, error) { - req, out := c.DeleteFlowLogsRequest(input) - err := req.Send() - return out, err +// API operation CreateVpcEndpoint for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpoint +func (c *EC2) CreateVpcEndpoint(input *CreateVpcEndpointInput) (*CreateVpcEndpointOutput, error) { + req, out := c.CreateVpcEndpointRequest(input) + return out, req.Send() } -const opDeleteInternetGateway = "DeleteInternetGateway" +// CreateVpcEndpointWithContext is the same as CreateVpcEndpoint with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVpcEndpoint for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVpcEndpointWithContext(ctx aws.Context, input *CreateVpcEndpointInput, opts ...request.Option) (*CreateVpcEndpointOutput, error) { + req, out := c.CreateVpcEndpointRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteInternetGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVpcEndpointConnectionNotification = "CreateVpcEndpointConnectionNotification" + +// CreateVpcEndpointConnectionNotificationRequest generates a "aws/request.Request" representing the +// client's request for the CreateVpcEndpointConnectionNotification operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteInternetGateway for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteInternetGateway method directly -// instead. +// See CreateVpcEndpointConnectionNotification for more information on using the CreateVpcEndpointConnectionNotification +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteInternetGatewayRequest method. -// req, resp := client.DeleteInternetGatewayRequest(params) +// +// // Example sending a request using the CreateVpcEndpointConnectionNotificationRequest method. +// req, resp := client.CreateVpcEndpointConnectionNotificationRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGateway -func (c *EC2) DeleteInternetGatewayRequest(input *DeleteInternetGatewayInput) (req *request.Request, output *DeleteInternetGatewayOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointConnectionNotification +func (c *EC2) CreateVpcEndpointConnectionNotificationRequest(input *CreateVpcEndpointConnectionNotificationInput) (req *request.Request, output *CreateVpcEndpointConnectionNotificationOutput) { op := &request.Operation{ - Name: opDeleteInternetGateway, + Name: opCreateVpcEndpointConnectionNotification, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteInternetGatewayInput{} + input = &CreateVpcEndpointConnectionNotificationInput{} } - output = &DeleteInternetGatewayOutput{} + output = &CreateVpcEndpointConnectionNotificationOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteInternetGateway API operation for Amazon Elastic Compute Cloud. +// CreateVpcEndpointConnectionNotification API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified Internet gateway. You must detach the Internet gateway -// from the VPC before you can delete it. +// Creates a connection notification for a specified VPC endpoint or VPC endpoint +// service. A connection notification notifies you of specific endpoint events. +// You must create an SNS topic to receive notifications. For more information, +// see Create a Topic (https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) +// in the Amazon Simple Notification Service Developer Guide. +// +// You can create a connection notification for interface endpoints only. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteInternetGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGateway -func (c *EC2) DeleteInternetGateway(input *DeleteInternetGatewayInput) (*DeleteInternetGatewayOutput, error) { - req, out := c.DeleteInternetGatewayRequest(input) - err := req.Send() - return out, err +// API operation CreateVpcEndpointConnectionNotification for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointConnectionNotification +func (c *EC2) CreateVpcEndpointConnectionNotification(input *CreateVpcEndpointConnectionNotificationInput) (*CreateVpcEndpointConnectionNotificationOutput, error) { + req, out := c.CreateVpcEndpointConnectionNotificationRequest(input) + return out, req.Send() } -const opDeleteKeyPair = "DeleteKeyPair" +// CreateVpcEndpointConnectionNotificationWithContext is the same as CreateVpcEndpointConnectionNotification with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVpcEndpointConnectionNotification for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVpcEndpointConnectionNotificationWithContext(ctx aws.Context, input *CreateVpcEndpointConnectionNotificationInput, opts ...request.Option) (*CreateVpcEndpointConnectionNotificationOutput, error) { + req, out := c.CreateVpcEndpointConnectionNotificationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteKeyPairRequest generates a "aws/request.Request" representing the -// client's request for the DeleteKeyPair operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVpcEndpointServiceConfiguration = "CreateVpcEndpointServiceConfiguration" + +// CreateVpcEndpointServiceConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the CreateVpcEndpointServiceConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteKeyPair for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteKeyPair method directly -// instead. +// See CreateVpcEndpointServiceConfiguration for more information on using the CreateVpcEndpointServiceConfiguration +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteKeyPairRequest method. -// req, resp := client.DeleteKeyPairRequest(params) +// +// // Example sending a request using the CreateVpcEndpointServiceConfigurationRequest method. +// req, resp := client.CreateVpcEndpointServiceConfigurationRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPair -func (c *EC2) DeleteKeyPairRequest(input *DeleteKeyPairInput) (req *request.Request, output *DeleteKeyPairOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointServiceConfiguration +func (c *EC2) CreateVpcEndpointServiceConfigurationRequest(input *CreateVpcEndpointServiceConfigurationInput) (req *request.Request, output *CreateVpcEndpointServiceConfigurationOutput) { op := &request.Operation{ - Name: opDeleteKeyPair, + Name: opCreateVpcEndpointServiceConfiguration, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteKeyPairInput{} + input = &CreateVpcEndpointServiceConfigurationInput{} } - output = &DeleteKeyPairOutput{} + output = &CreateVpcEndpointServiceConfigurationOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteKeyPair API operation for Amazon Elastic Compute Cloud. +// CreateVpcEndpointServiceConfiguration API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified key pair, by removing the public key from Amazon EC2. +// Creates a VPC endpoint service configuration to which service consumers (AWS +// accounts, IAM users, and IAM roles) can connect. Service consumers can create +// an interface VPC endpoint to connect to your service. +// +// To create an endpoint service configuration, you must first create a Network +// Load Balancer for your service. For more information, see VPC Endpoint Services +// (https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) +// in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteKeyPair for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPair -func (c *EC2) DeleteKeyPair(input *DeleteKeyPairInput) (*DeleteKeyPairOutput, error) { - req, out := c.DeleteKeyPairRequest(input) - err := req.Send() - return out, err +// API operation CreateVpcEndpointServiceConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointServiceConfiguration +func (c *EC2) CreateVpcEndpointServiceConfiguration(input *CreateVpcEndpointServiceConfigurationInput) (*CreateVpcEndpointServiceConfigurationOutput, error) { + req, out := c.CreateVpcEndpointServiceConfigurationRequest(input) + return out, req.Send() } -const opDeleteNatGateway = "DeleteNatGateway" +// CreateVpcEndpointServiceConfigurationWithContext is the same as CreateVpcEndpointServiceConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVpcEndpointServiceConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVpcEndpointServiceConfigurationWithContext(ctx aws.Context, input *CreateVpcEndpointServiceConfigurationInput, opts ...request.Option) (*CreateVpcEndpointServiceConfigurationOutput, error) { + req, out := c.CreateVpcEndpointServiceConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteNatGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNatGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVpcPeeringConnection = "CreateVpcPeeringConnection" + +// CreateVpcPeeringConnectionRequest generates a "aws/request.Request" representing the +// client's request for the CreateVpcPeeringConnection operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteNatGateway for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteNatGateway method directly -// instead. +// See CreateVpcPeeringConnection for more information on using the CreateVpcPeeringConnection +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteNatGatewayRequest method. -// req, resp := client.DeleteNatGatewayRequest(params) +// +// // Example sending a request using the CreateVpcPeeringConnectionRequest method. +// req, resp := client.CreateVpcPeeringConnectionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGateway -func (c *EC2) DeleteNatGatewayRequest(input *DeleteNatGatewayInput) (req *request.Request, output *DeleteNatGatewayOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnection +func (c *EC2) CreateVpcPeeringConnectionRequest(input *CreateVpcPeeringConnectionInput) (req *request.Request, output *CreateVpcPeeringConnectionOutput) { op := &request.Operation{ - Name: opDeleteNatGateway, + Name: opCreateVpcPeeringConnection, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteNatGatewayInput{} + input = &CreateVpcPeeringConnectionInput{} } - output = &DeleteNatGatewayOutput{} + output = &CreateVpcPeeringConnectionOutput{} req = c.newRequest(op, input, output) return } -// DeleteNatGateway API operation for Amazon Elastic Compute Cloud. +// CreateVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified NAT gateway. Deleting a NAT gateway disassociates its -// Elastic IP address, but does not release the address from your account. Deleting -// a NAT gateway does not delete any NAT gateway routes in your route tables. +// Requests a VPC peering connection between two VPCs: a requester VPC that +// you own and an accepter VPC with which to create the connection. The accepter +// VPC can belong to another AWS account and can be in a different Region to +// the requester VPC. The requester VPC and accepter VPC cannot have overlapping +// CIDR blocks. +// +// Limitations and rules apply to a VPC peering connection. For more information, +// see the limitations (https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-basics.html#vpc-peering-limitations) +// section in the VPC Peering Guide. +// +// The owner of the accepter VPC must accept the peering request to activate +// the peering connection. The VPC peering connection request expires after +// 7 days, after which it cannot be accepted or rejected. +// +// If you create a VPC peering connection request between VPCs with overlapping +// CIDR blocks, the VPC peering connection has a status of failed. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNatGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGateway -func (c *EC2) DeleteNatGateway(input *DeleteNatGatewayInput) (*DeleteNatGatewayOutput, error) { - req, out := c.DeleteNatGatewayRequest(input) - err := req.Send() - return out, err +// API operation CreateVpcPeeringConnection for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnection +func (c *EC2) CreateVpcPeeringConnection(input *CreateVpcPeeringConnectionInput) (*CreateVpcPeeringConnectionOutput, error) { + req, out := c.CreateVpcPeeringConnectionRequest(input) + return out, req.Send() } -const opDeleteNetworkAcl = "DeleteNetworkAcl" +// CreateVpcPeeringConnectionWithContext is the same as CreateVpcPeeringConnection with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVpcPeeringConnection for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVpcPeeringConnectionWithContext(ctx aws.Context, input *CreateVpcPeeringConnectionInput, opts ...request.Option) (*CreateVpcPeeringConnectionOutput, error) { + req, out := c.CreateVpcPeeringConnectionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteNetworkAclRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNetworkAcl operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVpnConnection = "CreateVpnConnection" + +// CreateVpnConnectionRequest generates a "aws/request.Request" representing the +// client's request for the CreateVpnConnection operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteNetworkAcl for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteNetworkAcl method directly -// instead. +// See CreateVpnConnection for more information on using the CreateVpnConnection +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteNetworkAclRequest method. -// req, resp := client.DeleteNetworkAclRequest(params) +// +// // Example sending a request using the CreateVpnConnectionRequest method. +// req, resp := client.CreateVpnConnectionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAcl -func (c *EC2) DeleteNetworkAclRequest(input *DeleteNetworkAclInput) (req *request.Request, output *DeleteNetworkAclOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnection +func (c *EC2) CreateVpnConnectionRequest(input *CreateVpnConnectionInput) (req *request.Request, output *CreateVpnConnectionOutput) { op := &request.Operation{ - Name: opDeleteNetworkAcl, + Name: opCreateVpnConnection, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteNetworkAclInput{} + input = &CreateVpnConnectionInput{} } - output = &DeleteNetworkAclOutput{} + output = &CreateVpnConnectionOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteNetworkAcl API operation for Amazon Elastic Compute Cloud. +// CreateVpnConnection API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified network ACL. You can't delete the ACL if it's associated -// with any subnets. You can't delete the default network ACL. +// Creates a VPN connection between an existing virtual private gateway and +// a VPN customer gateway. The supported connection type is ipsec.1. +// +// The response includes information that you need to give to your network administrator +// to configure your customer gateway. +// +// We strongly recommend that you use HTTPS when calling this operation because +// the response contains sensitive cryptographic information for configuring +// your customer gateway. +// +// If you decide to shut down your VPN connection for any reason and later create +// a new VPN connection, you must reconfigure your customer gateway with the +// new information returned from this call. +// +// This is an idempotent operation. If you perform the operation more than once, +// Amazon EC2 doesn't return an error. +// +// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) +// in the AWS Site-to-Site VPN User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNetworkAcl for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAcl -func (c *EC2) DeleteNetworkAcl(input *DeleteNetworkAclInput) (*DeleteNetworkAclOutput, error) { - req, out := c.DeleteNetworkAclRequest(input) - err := req.Send() - return out, err +// API operation CreateVpnConnection for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnection +func (c *EC2) CreateVpnConnection(input *CreateVpnConnectionInput) (*CreateVpnConnectionOutput, error) { + req, out := c.CreateVpnConnectionRequest(input) + return out, req.Send() } -const opDeleteNetworkAclEntry = "DeleteNetworkAclEntry" +// CreateVpnConnectionWithContext is the same as CreateVpnConnection with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVpnConnection for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVpnConnectionWithContext(ctx aws.Context, input *CreateVpnConnectionInput, opts ...request.Option) (*CreateVpnConnectionOutput, error) { + req, out := c.CreateVpnConnectionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteNetworkAclEntryRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNetworkAclEntry operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVpnConnectionRoute = "CreateVpnConnectionRoute" + +// CreateVpnConnectionRouteRequest generates a "aws/request.Request" representing the +// client's request for the CreateVpnConnectionRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteNetworkAclEntry for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteNetworkAclEntry method directly -// instead. +// See CreateVpnConnectionRoute for more information on using the CreateVpnConnectionRoute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteNetworkAclEntryRequest method. -// req, resp := client.DeleteNetworkAclEntryRequest(params) +// +// // Example sending a request using the CreateVpnConnectionRouteRequest method. +// req, resp := client.CreateVpnConnectionRouteRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntry -func (c *EC2) DeleteNetworkAclEntryRequest(input *DeleteNetworkAclEntryInput) (req *request.Request, output *DeleteNetworkAclEntryOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRoute +func (c *EC2) CreateVpnConnectionRouteRequest(input *CreateVpnConnectionRouteInput) (req *request.Request, output *CreateVpnConnectionRouteOutput) { op := &request.Operation{ - Name: opDeleteNetworkAclEntry, + Name: opCreateVpnConnectionRoute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteNetworkAclEntryInput{} + input = &CreateVpnConnectionRouteInput{} } - output = &DeleteNetworkAclEntryOutput{} + output = &CreateVpnConnectionRouteOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DeleteNetworkAclEntry API operation for Amazon Elastic Compute Cloud. +// CreateVpnConnectionRoute API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified ingress or egress entry (rule) from the specified network -// ACL. +// Creates a static route associated with a VPN connection between an existing +// virtual private gateway and a VPN customer gateway. The static route allows +// traffic to be routed from the virtual private gateway to the VPN customer +// gateway. +// +// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) +// in the AWS Site-to-Site VPN User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNetworkAclEntry for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntry -func (c *EC2) DeleteNetworkAclEntry(input *DeleteNetworkAclEntryInput) (*DeleteNetworkAclEntryOutput, error) { - req, out := c.DeleteNetworkAclEntryRequest(input) - err := req.Send() - return out, err +// API operation CreateVpnConnectionRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRoute +func (c *EC2) CreateVpnConnectionRoute(input *CreateVpnConnectionRouteInput) (*CreateVpnConnectionRouteOutput, error) { + req, out := c.CreateVpnConnectionRouteRequest(input) + return out, req.Send() } -const opDeleteNetworkInterface = "DeleteNetworkInterface" +// CreateVpnConnectionRouteWithContext is the same as CreateVpnConnectionRoute with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVpnConnectionRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVpnConnectionRouteWithContext(ctx aws.Context, input *CreateVpnConnectionRouteInput, opts ...request.Option) (*CreateVpnConnectionRouteOutput, error) { + req, out := c.CreateVpnConnectionRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteNetworkInterfaceRequest generates a "aws/request.Request" representing the -// client's request for the DeleteNetworkInterface operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opCreateVpnGateway = "CreateVpnGateway" + +// CreateVpnGatewayRequest generates a "aws/request.Request" representing the +// client's request for the CreateVpnGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteNetworkInterface for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteNetworkInterface method directly -// instead. +// See CreateVpnGateway for more information on using the CreateVpnGateway +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteNetworkInterfaceRequest method. -// req, resp := client.DeleteNetworkInterfaceRequest(params) +// +// // Example sending a request using the CreateVpnGatewayRequest method. +// req, resp := client.CreateVpnGatewayRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterface -func (c *EC2) DeleteNetworkInterfaceRequest(input *DeleteNetworkInterfaceInput) (req *request.Request, output *DeleteNetworkInterfaceOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGateway +func (c *EC2) CreateVpnGatewayRequest(input *CreateVpnGatewayInput) (req *request.Request, output *CreateVpnGatewayOutput) { op := &request.Operation{ - Name: opDeleteNetworkInterface, + Name: opCreateVpnGateway, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteNetworkInterfaceInput{} + input = &CreateVpnGatewayInput{} } - output = &DeleteNetworkInterfaceOutput{} + output = &CreateVpnGatewayOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteNetworkInterface API operation for Amazon Elastic Compute Cloud. +// CreateVpnGateway API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified network interface. You must detach the network interface -// before you can delete it. +// Creates a virtual private gateway. A virtual private gateway is the endpoint +// on the VPC side of your VPN connection. You can create a virtual private +// gateway before creating the VPC itself. +// +// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) +// in the AWS Site-to-Site VPN User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteNetworkInterface for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterface -func (c *EC2) DeleteNetworkInterface(input *DeleteNetworkInterfaceInput) (*DeleteNetworkInterfaceOutput, error) { - req, out := c.DeleteNetworkInterfaceRequest(input) - err := req.Send() - return out, err +// API operation CreateVpnGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGateway +func (c *EC2) CreateVpnGateway(input *CreateVpnGatewayInput) (*CreateVpnGatewayOutput, error) { + req, out := c.CreateVpnGatewayRequest(input) + return out, req.Send() } -const opDeletePlacementGroup = "DeletePlacementGroup" +// CreateVpnGatewayWithContext is the same as CreateVpnGateway with the addition of +// the ability to pass a context and additional request options. +// +// See CreateVpnGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) CreateVpnGatewayWithContext(ctx aws.Context, input *CreateVpnGatewayInput, opts ...request.Option) (*CreateVpnGatewayOutput, error) { + req, out := c.CreateVpnGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeletePlacementGroupRequest generates a "aws/request.Request" representing the -// client's request for the DeletePlacementGroup operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteClientVpnEndpoint = "DeleteClientVpnEndpoint" + +// DeleteClientVpnEndpointRequest generates a "aws/request.Request" representing the +// client's request for the DeleteClientVpnEndpoint operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeletePlacementGroup for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeletePlacementGroup method directly -// instead. +// See DeleteClientVpnEndpoint for more information on using the DeleteClientVpnEndpoint +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeletePlacementGroupRequest method. -// req, resp := client.DeletePlacementGroupRequest(params) +// +// // Example sending a request using the DeleteClientVpnEndpointRequest method. +// req, resp := client.DeleteClientVpnEndpointRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroup -func (c *EC2) DeletePlacementGroupRequest(input *DeletePlacementGroupInput) (req *request.Request, output *DeletePlacementGroupOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnEndpoint +func (c *EC2) DeleteClientVpnEndpointRequest(input *DeleteClientVpnEndpointInput) (req *request.Request, output *DeleteClientVpnEndpointOutput) { op := &request.Operation{ - Name: opDeletePlacementGroup, + Name: opDeleteClientVpnEndpoint, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeletePlacementGroupInput{} + input = &DeleteClientVpnEndpointInput{} } - output = &DeletePlacementGroupOutput{} + output = &DeleteClientVpnEndpointOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeletePlacementGroup API operation for Amazon Elastic Compute Cloud. +// DeleteClientVpnEndpoint API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified placement group. You must terminate all instances in -// the placement group before you can delete the placement group. For more information -// about placement groups and cluster instances, see Cluster Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Deletes the specified Client VPN endpoint. You must disassociate all target +// networks before you can delete a Client VPN endpoint. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeletePlacementGroup for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroup -func (c *EC2) DeletePlacementGroup(input *DeletePlacementGroupInput) (*DeletePlacementGroupOutput, error) { - req, out := c.DeletePlacementGroupRequest(input) - err := req.Send() - return out, err +// API operation DeleteClientVpnEndpoint for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnEndpoint +func (c *EC2) DeleteClientVpnEndpoint(input *DeleteClientVpnEndpointInput) (*DeleteClientVpnEndpointOutput, error) { + req, out := c.DeleteClientVpnEndpointRequest(input) + return out, req.Send() } -const opDeleteRoute = "DeleteRoute" +// DeleteClientVpnEndpointWithContext is the same as DeleteClientVpnEndpoint with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteClientVpnEndpoint for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteClientVpnEndpointWithContext(ctx aws.Context, input *DeleteClientVpnEndpointInput, opts ...request.Option) (*DeleteClientVpnEndpointOutput, error) { + req, out := c.DeleteClientVpnEndpointRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteRouteRequest generates a "aws/request.Request" representing the -// client's request for the DeleteRoute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteClientVpnRoute = "DeleteClientVpnRoute" + +// DeleteClientVpnRouteRequest generates a "aws/request.Request" representing the +// client's request for the DeleteClientVpnRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteRoute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteRoute method directly -// instead. +// See DeleteClientVpnRoute for more information on using the DeleteClientVpnRoute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteRouteRequest method. -// req, resp := client.DeleteRouteRequest(params) +// +// // Example sending a request using the DeleteClientVpnRouteRequest method. +// req, resp := client.DeleteClientVpnRouteRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRoute -func (c *EC2) DeleteRouteRequest(input *DeleteRouteInput) (req *request.Request, output *DeleteRouteOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnRoute +func (c *EC2) DeleteClientVpnRouteRequest(input *DeleteClientVpnRouteInput) (req *request.Request, output *DeleteClientVpnRouteOutput) { op := &request.Operation{ - Name: opDeleteRoute, + Name: opDeleteClientVpnRoute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteRouteInput{} + input = &DeleteClientVpnRouteInput{} } - output = &DeleteRouteOutput{} + output = &DeleteClientVpnRouteOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteRoute API operation for Amazon Elastic Compute Cloud. +// DeleteClientVpnRoute API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified route from the specified route table. +// Deletes a route from a Client VPN endpoint. You can only delete routes that +// you manually added using the CreateClientVpnRoute action. You cannot delete +// routes that were automatically added when associating a subnet. To remove +// routes that have been automatically added, disassociate the target subnet +// from the Client VPN endpoint. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteRoute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRoute -func (c *EC2) DeleteRoute(input *DeleteRouteInput) (*DeleteRouteOutput, error) { - req, out := c.DeleteRouteRequest(input) - err := req.Send() - return out, err +// API operation DeleteClientVpnRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnRoute +func (c *EC2) DeleteClientVpnRoute(input *DeleteClientVpnRouteInput) (*DeleteClientVpnRouteOutput, error) { + req, out := c.DeleteClientVpnRouteRequest(input) + return out, req.Send() } -const opDeleteRouteTable = "DeleteRouteTable" +// DeleteClientVpnRouteWithContext is the same as DeleteClientVpnRoute with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteClientVpnRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteClientVpnRouteWithContext(ctx aws.Context, input *DeleteClientVpnRouteInput, opts ...request.Option) (*DeleteClientVpnRouteOutput, error) { + req, out := c.DeleteClientVpnRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the DeleteRouteTable operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteCustomerGateway = "DeleteCustomerGateway" + +// DeleteCustomerGatewayRequest generates a "aws/request.Request" representing the +// client's request for the DeleteCustomerGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteRouteTable for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteRouteTable method directly -// instead. +// See DeleteCustomerGateway for more information on using the DeleteCustomerGateway +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteRouteTableRequest method. -// req, resp := client.DeleteRouteTableRequest(params) +// +// // Example sending a request using the DeleteCustomerGatewayRequest method. +// req, resp := client.DeleteCustomerGatewayRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTable -func (c *EC2) DeleteRouteTableRequest(input *DeleteRouteTableInput) (req *request.Request, output *DeleteRouteTableOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGateway +func (c *EC2) DeleteCustomerGatewayRequest(input *DeleteCustomerGatewayInput) (req *request.Request, output *DeleteCustomerGatewayOutput) { op := &request.Operation{ - Name: opDeleteRouteTable, + Name: opDeleteCustomerGateway, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteRouteTableInput{} + input = &DeleteCustomerGatewayInput{} } - output = &DeleteRouteTableOutput{} + output = &DeleteCustomerGatewayOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DeleteRouteTable API operation for Amazon Elastic Compute Cloud. +// DeleteCustomerGateway API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified route table. You must disassociate the route table -// from any subnets before you can delete it. You can't delete the main route -// table. +// Deletes the specified customer gateway. You must delete the VPN connection +// before you can delete the customer gateway. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteRouteTable for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTable -func (c *EC2) DeleteRouteTable(input *DeleteRouteTableInput) (*DeleteRouteTableOutput, error) { - req, out := c.DeleteRouteTableRequest(input) - err := req.Send() - return out, err +// API operation DeleteCustomerGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGateway +func (c *EC2) DeleteCustomerGateway(input *DeleteCustomerGatewayInput) (*DeleteCustomerGatewayOutput, error) { + req, out := c.DeleteCustomerGatewayRequest(input) + return out, req.Send() } -const opDeleteSecurityGroup = "DeleteSecurityGroup" +// DeleteCustomerGatewayWithContext is the same as DeleteCustomerGateway with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteCustomerGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteCustomerGatewayWithContext(ctx aws.Context, input *DeleteCustomerGatewayInput, opts ...request.Option) (*DeleteCustomerGatewayOutput, error) { + req, out := c.DeleteCustomerGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteSecurityGroupRequest generates a "aws/request.Request" representing the -// client's request for the DeleteSecurityGroup operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteDhcpOptions = "DeleteDhcpOptions" + +// DeleteDhcpOptionsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteDhcpOptions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteSecurityGroup for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteSecurityGroup method directly -// instead. +// See DeleteDhcpOptions for more information on using the DeleteDhcpOptions +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteSecurityGroupRequest method. -// req, resp := client.DeleteSecurityGroupRequest(params) +// +// // Example sending a request using the DeleteDhcpOptionsRequest method. +// req, resp := client.DeleteDhcpOptionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroup -func (c *EC2) DeleteSecurityGroupRequest(input *DeleteSecurityGroupInput) (req *request.Request, output *DeleteSecurityGroupOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptions +func (c *EC2) DeleteDhcpOptionsRequest(input *DeleteDhcpOptionsInput) (req *request.Request, output *DeleteDhcpOptionsOutput) { op := &request.Operation{ - Name: opDeleteSecurityGroup, + Name: opDeleteDhcpOptions, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteSecurityGroupInput{} + input = &DeleteDhcpOptionsInput{} } - output = &DeleteSecurityGroupOutput{} + output = &DeleteDhcpOptionsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DeleteSecurityGroup API operation for Amazon Elastic Compute Cloud. -// -// Deletes a security group. +// DeleteDhcpOptions API operation for Amazon Elastic Compute Cloud. // -// If you attempt to delete a security group that is associated with an instance, -// or is referenced by another security group, the operation fails with InvalidGroup.InUse -// in EC2-Classic or DependencyViolation in EC2-VPC. +// Deletes the specified set of DHCP options. You must disassociate the set +// of DHCP options before you can delete it. You can disassociate the set of +// DHCP options by associating either a new set of options or the default set +// of options with the VPC. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteSecurityGroup for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroup -func (c *EC2) DeleteSecurityGroup(input *DeleteSecurityGroupInput) (*DeleteSecurityGroupOutput, error) { - req, out := c.DeleteSecurityGroupRequest(input) - err := req.Send() - return out, err +// API operation DeleteDhcpOptions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptions +func (c *EC2) DeleteDhcpOptions(input *DeleteDhcpOptionsInput) (*DeleteDhcpOptionsOutput, error) { + req, out := c.DeleteDhcpOptionsRequest(input) + return out, req.Send() } -const opDeleteSnapshot = "DeleteSnapshot" +// DeleteDhcpOptionsWithContext is the same as DeleteDhcpOptions with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteDhcpOptions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteDhcpOptionsWithContext(ctx aws.Context, input *DeleteDhcpOptionsInput, opts ...request.Option) (*DeleteDhcpOptionsOutput, error) { + req, out := c.DeleteDhcpOptionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteSnapshotRequest generates a "aws/request.Request" representing the -// client's request for the DeleteSnapshot operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteEgressOnlyInternetGateway = "DeleteEgressOnlyInternetGateway" + +// DeleteEgressOnlyInternetGatewayRequest generates a "aws/request.Request" representing the +// client's request for the DeleteEgressOnlyInternetGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteSnapshot for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteSnapshot method directly -// instead. +// See DeleteEgressOnlyInternetGateway for more information on using the DeleteEgressOnlyInternetGateway +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteSnapshotRequest method. -// req, resp := client.DeleteSnapshotRequest(params) +// +// // Example sending a request using the DeleteEgressOnlyInternetGatewayRequest method. +// req, resp := client.DeleteEgressOnlyInternetGatewayRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshot -func (c *EC2) DeleteSnapshotRequest(input *DeleteSnapshotInput) (req *request.Request, output *DeleteSnapshotOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGateway +func (c *EC2) DeleteEgressOnlyInternetGatewayRequest(input *DeleteEgressOnlyInternetGatewayInput) (req *request.Request, output *DeleteEgressOnlyInternetGatewayOutput) { op := &request.Operation{ - Name: opDeleteSnapshot, + Name: opDeleteEgressOnlyInternetGateway, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteSnapshotInput{} + input = &DeleteEgressOnlyInternetGatewayInput{} } - output = &DeleteSnapshotOutput{} + output = &DeleteEgressOnlyInternetGatewayOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteSnapshot API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified snapshot. -// -// When you make periodic snapshots of a volume, the snapshots are incremental, -// and only the blocks on the device that have changed since your last snapshot -// are saved in the new snapshot. When you delete a snapshot, only the data -// not needed for any other snapshot is removed. So regardless of which prior -// snapshots have been deleted, all active snapshots will have access to all -// the information needed to restore the volume. -// -// You cannot delete a snapshot of the root device of an EBS volume used by -// a registered AMI. You must first de-register the AMI before you can delete -// the snapshot. +// DeleteEgressOnlyInternetGateway API operation for Amazon Elastic Compute Cloud. // -// For more information, see Deleting an Amazon EBS Snapshot (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-snapshot.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Deletes an egress-only internet gateway. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteSnapshot for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshot -func (c *EC2) DeleteSnapshot(input *DeleteSnapshotInput) (*DeleteSnapshotOutput, error) { - req, out := c.DeleteSnapshotRequest(input) - err := req.Send() - return out, err +// API operation DeleteEgressOnlyInternetGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGateway +func (c *EC2) DeleteEgressOnlyInternetGateway(input *DeleteEgressOnlyInternetGatewayInput) (*DeleteEgressOnlyInternetGatewayOutput, error) { + req, out := c.DeleteEgressOnlyInternetGatewayRequest(input) + return out, req.Send() } -const opDeleteSpotDatafeedSubscription = "DeleteSpotDatafeedSubscription" +// DeleteEgressOnlyInternetGatewayWithContext is the same as DeleteEgressOnlyInternetGateway with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteEgressOnlyInternetGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteEgressOnlyInternetGatewayWithContext(ctx aws.Context, input *DeleteEgressOnlyInternetGatewayInput, opts ...request.Option) (*DeleteEgressOnlyInternetGatewayOutput, error) { + req, out := c.DeleteEgressOnlyInternetGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteSpotDatafeedSubscriptionRequest generates a "aws/request.Request" representing the -// client's request for the DeleteSpotDatafeedSubscription operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteFleets = "DeleteFleets" + +// DeleteFleetsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteFleets operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteSpotDatafeedSubscription for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteSpotDatafeedSubscription method directly -// instead. +// See DeleteFleets for more information on using the DeleteFleets +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteSpotDatafeedSubscriptionRequest method. -// req, resp := client.DeleteSpotDatafeedSubscriptionRequest(params) +// +// // Example sending a request using the DeleteFleetsRequest method. +// req, resp := client.DeleteFleetsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscription -func (c *EC2) DeleteSpotDatafeedSubscriptionRequest(input *DeleteSpotDatafeedSubscriptionInput) (req *request.Request, output *DeleteSpotDatafeedSubscriptionOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleets +func (c *EC2) DeleteFleetsRequest(input *DeleteFleetsInput) (req *request.Request, output *DeleteFleetsOutput) { op := &request.Operation{ - Name: opDeleteSpotDatafeedSubscription, + Name: opDeleteFleets, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteSpotDatafeedSubscriptionInput{} + input = &DeleteFleetsInput{} } - output = &DeleteSpotDatafeedSubscriptionOutput{} + output = &DeleteFleetsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteSpotDatafeedSubscription API operation for Amazon Elastic Compute Cloud. +// DeleteFleets API operation for Amazon Elastic Compute Cloud. +// +// Deletes the specified EC2 Fleet. // -// Deletes the data feed for Spot instances. +// After you delete an EC2 Fleet, it launches no new instances. You must specify +// whether an EC2 Fleet should also terminate its instances. If you terminate +// the instances, the EC2 Fleet enters the deleted_terminating state. Otherwise, +// the EC2 Fleet enters the deleted_running state, and the instances continue +// to run until they are interrupted or you terminate them manually. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteSpotDatafeedSubscription for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscription -func (c *EC2) DeleteSpotDatafeedSubscription(input *DeleteSpotDatafeedSubscriptionInput) (*DeleteSpotDatafeedSubscriptionOutput, error) { - req, out := c.DeleteSpotDatafeedSubscriptionRequest(input) - err := req.Send() - return out, err +// API operation DeleteFleets for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleets +func (c *EC2) DeleteFleets(input *DeleteFleetsInput) (*DeleteFleetsOutput, error) { + req, out := c.DeleteFleetsRequest(input) + return out, req.Send() } -const opDeleteSubnet = "DeleteSubnet" +// DeleteFleetsWithContext is the same as DeleteFleets with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteFleets for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteFleetsWithContext(ctx aws.Context, input *DeleteFleetsInput, opts ...request.Option) (*DeleteFleetsOutput, error) { + req, out := c.DeleteFleetsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteSubnetRequest generates a "aws/request.Request" representing the -// client's request for the DeleteSubnet operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteFlowLogs = "DeleteFlowLogs" + +// DeleteFlowLogsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteFlowLogs operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteSubnet for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteSubnet method directly -// instead. +// See DeleteFlowLogs for more information on using the DeleteFlowLogs +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteSubnetRequest method. -// req, resp := client.DeleteSubnetRequest(params) +// +// // Example sending a request using the DeleteFlowLogsRequest method. +// req, resp := client.DeleteFlowLogsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnet -func (c *EC2) DeleteSubnetRequest(input *DeleteSubnetInput) (req *request.Request, output *DeleteSubnetOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogs +func (c *EC2) DeleteFlowLogsRequest(input *DeleteFlowLogsInput) (req *request.Request, output *DeleteFlowLogsOutput) { op := &request.Operation{ - Name: opDeleteSubnet, + Name: opDeleteFlowLogs, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteSubnetInput{} + input = &DeleteFlowLogsInput{} } - output = &DeleteSubnetOutput{} + output = &DeleteFlowLogsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteSubnet API operation for Amazon Elastic Compute Cloud. +// DeleteFlowLogs API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified subnet. You must terminate all running instances in -// the subnet before you can delete the subnet. +// Deletes one or more flow logs. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteSubnet for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnet -func (c *EC2) DeleteSubnet(input *DeleteSubnetInput) (*DeleteSubnetOutput, error) { - req, out := c.DeleteSubnetRequest(input) - err := req.Send() - return out, err +// API operation DeleteFlowLogs for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogs +func (c *EC2) DeleteFlowLogs(input *DeleteFlowLogsInput) (*DeleteFlowLogsOutput, error) { + req, out := c.DeleteFlowLogsRequest(input) + return out, req.Send() } -const opDeleteTags = "DeleteTags" +// DeleteFlowLogsWithContext is the same as DeleteFlowLogs with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteFlowLogs for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteFlowLogsWithContext(ctx aws.Context, input *DeleteFlowLogsInput, opts ...request.Option) (*DeleteFlowLogsOutput, error) { + req, out := c.DeleteFlowLogsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteTagsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteTags operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteFpgaImage = "DeleteFpgaImage" + +// DeleteFpgaImageRequest generates a "aws/request.Request" representing the +// client's request for the DeleteFpgaImage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteTags for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteTags method directly -// instead. +// See DeleteFpgaImage for more information on using the DeleteFpgaImage +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteTagsRequest method. -// req, resp := client.DeleteTagsRequest(params) +// +// // Example sending a request using the DeleteFpgaImageRequest method. +// req, resp := client.DeleteFpgaImageRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTags -func (c *EC2) DeleteTagsRequest(input *DeleteTagsInput) (req *request.Request, output *DeleteTagsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFpgaImage +func (c *EC2) DeleteFpgaImageRequest(input *DeleteFpgaImageInput) (req *request.Request, output *DeleteFpgaImageOutput) { op := &request.Operation{ - Name: opDeleteTags, + Name: opDeleteFpgaImage, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteTagsInput{} + input = &DeleteFpgaImageInput{} } - output = &DeleteTagsOutput{} + output = &DeleteFpgaImageOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteTags API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified set of tags from the specified set of resources. This -// call is designed to follow a DescribeTags request. +// DeleteFpgaImage API operation for Amazon Elastic Compute Cloud. // -// For more information about tags, see Tagging Your Resources (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Deletes the specified Amazon FPGA Image (AFI). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteTags for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTags -func (c *EC2) DeleteTags(input *DeleteTagsInput) (*DeleteTagsOutput, error) { - req, out := c.DeleteTagsRequest(input) - err := req.Send() - return out, err +// API operation DeleteFpgaImage for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFpgaImage +func (c *EC2) DeleteFpgaImage(input *DeleteFpgaImageInput) (*DeleteFpgaImageOutput, error) { + req, out := c.DeleteFpgaImageRequest(input) + return out, req.Send() } -const opDeleteVolume = "DeleteVolume" +// DeleteFpgaImageWithContext is the same as DeleteFpgaImage with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteFpgaImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteFpgaImageWithContext(ctx aws.Context, input *DeleteFpgaImageInput, opts ...request.Option) (*DeleteFpgaImageOutput, error) { + req, out := c.DeleteFpgaImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteVolumeRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVolume operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteInternetGateway = "DeleteInternetGateway" + +// DeleteInternetGatewayRequest generates a "aws/request.Request" representing the +// client's request for the DeleteInternetGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteVolume for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteVolume method directly -// instead. +// See DeleteInternetGateway for more information on using the DeleteInternetGateway +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteVolumeRequest method. -// req, resp := client.DeleteVolumeRequest(params) +// +// // Example sending a request using the DeleteInternetGatewayRequest method. +// req, resp := client.DeleteInternetGatewayRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolume -func (c *EC2) DeleteVolumeRequest(input *DeleteVolumeInput) (req *request.Request, output *DeleteVolumeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGateway +func (c *EC2) DeleteInternetGatewayRequest(input *DeleteInternetGatewayInput) (req *request.Request, output *DeleteInternetGatewayOutput) { op := &request.Operation{ - Name: opDeleteVolume, + Name: opDeleteInternetGateway, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteVolumeInput{} + input = &DeleteInternetGatewayInput{} } - output = &DeleteVolumeOutput{} + output = &DeleteInternetGatewayOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DeleteVolume API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified EBS volume. The volume must be in the available state -// (not attached to an instance). -// -// The volume may remain in the deleting state for several minutes. +// DeleteInternetGateway API operation for Amazon Elastic Compute Cloud. // -// For more information, see Deleting an Amazon EBS Volume (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-volume.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Deletes the specified internet gateway. You must detach the internet gateway +// from the VPC before you can delete it. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVolume for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolume -func (c *EC2) DeleteVolume(input *DeleteVolumeInput) (*DeleteVolumeOutput, error) { - req, out := c.DeleteVolumeRequest(input) - err := req.Send() - return out, err +// API operation DeleteInternetGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGateway +func (c *EC2) DeleteInternetGateway(input *DeleteInternetGatewayInput) (*DeleteInternetGatewayOutput, error) { + req, out := c.DeleteInternetGatewayRequest(input) + return out, req.Send() } -const opDeleteVpc = "DeleteVpc" +// DeleteInternetGatewayWithContext is the same as DeleteInternetGateway with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteInternetGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteInternetGatewayWithContext(ctx aws.Context, input *DeleteInternetGatewayInput, opts ...request.Option) (*DeleteInternetGatewayOutput, error) { + req, out := c.DeleteInternetGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteVpcRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpc operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteKeyPair = "DeleteKeyPair" + +// DeleteKeyPairRequest generates a "aws/request.Request" representing the +// client's request for the DeleteKeyPair operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteVpc for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteVpc method directly -// instead. +// See DeleteKeyPair for more information on using the DeleteKeyPair +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteVpcRequest method. -// req, resp := client.DeleteVpcRequest(params) +// +// // Example sending a request using the DeleteKeyPairRequest method. +// req, resp := client.DeleteKeyPairRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpc -func (c *EC2) DeleteVpcRequest(input *DeleteVpcInput) (req *request.Request, output *DeleteVpcOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPair +func (c *EC2) DeleteKeyPairRequest(input *DeleteKeyPairInput) (req *request.Request, output *DeleteKeyPairOutput) { op := &request.Operation{ - Name: opDeleteVpc, + Name: opDeleteKeyPair, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteVpcInput{} + input = &DeleteKeyPairInput{} } - output = &DeleteVpcOutput{} + output = &DeleteKeyPairOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DeleteVpc API operation for Amazon Elastic Compute Cloud. +// DeleteKeyPair API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified VPC. You must detach or delete all gateways and resources -// that are associated with the VPC before you can delete it. For example, you -// must terminate all instances running in the VPC, delete all security groups -// associated with the VPC (except the default one), delete all route tables -// associated with the VPC (except the default one), and so on. +// Deletes the specified key pair, by removing the public key from Amazon EC2. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpc for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpc -func (c *EC2) DeleteVpc(input *DeleteVpcInput) (*DeleteVpcOutput, error) { - req, out := c.DeleteVpcRequest(input) - err := req.Send() - return out, err +// API operation DeleteKeyPair for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPair +func (c *EC2) DeleteKeyPair(input *DeleteKeyPairInput) (*DeleteKeyPairOutput, error) { + req, out := c.DeleteKeyPairRequest(input) + return out, req.Send() } -const opDeleteVpcEndpoints = "DeleteVpcEndpoints" +// DeleteKeyPairWithContext is the same as DeleteKeyPair with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteKeyPair for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteKeyPairWithContext(ctx aws.Context, input *DeleteKeyPairInput, opts ...request.Option) (*DeleteKeyPairOutput, error) { + req, out := c.DeleteKeyPairRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteVpcEndpointsRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpcEndpoints operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteLaunchTemplate = "DeleteLaunchTemplate" + +// DeleteLaunchTemplateRequest generates a "aws/request.Request" representing the +// client's request for the DeleteLaunchTemplate operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteVpcEndpoints for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteVpcEndpoints method directly -// instead. +// See DeleteLaunchTemplate for more information on using the DeleteLaunchTemplate +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteVpcEndpointsRequest method. -// req, resp := client.DeleteVpcEndpointsRequest(params) +// +// // Example sending a request using the DeleteLaunchTemplateRequest method. +// req, resp := client.DeleteLaunchTemplateRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpoints -func (c *EC2) DeleteVpcEndpointsRequest(input *DeleteVpcEndpointsInput) (req *request.Request, output *DeleteVpcEndpointsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplate +func (c *EC2) DeleteLaunchTemplateRequest(input *DeleteLaunchTemplateInput) (req *request.Request, output *DeleteLaunchTemplateOutput) { op := &request.Operation{ - Name: opDeleteVpcEndpoints, + Name: opDeleteLaunchTemplate, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteVpcEndpointsInput{} + input = &DeleteLaunchTemplateInput{} } - output = &DeleteVpcEndpointsOutput{} + output = &DeleteLaunchTemplateOutput{} req = c.newRequest(op, input, output) return } -// DeleteVpcEndpoints API operation for Amazon Elastic Compute Cloud. +// DeleteLaunchTemplate API operation for Amazon Elastic Compute Cloud. // -// Deletes one or more specified VPC endpoints. Deleting the endpoint also deletes -// the endpoint routes in the route tables that were associated with the endpoint. +// Deletes a launch template. Deleting a launch template deletes all of its +// versions. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpcEndpoints for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpoints -func (c *EC2) DeleteVpcEndpoints(input *DeleteVpcEndpointsInput) (*DeleteVpcEndpointsOutput, error) { - req, out := c.DeleteVpcEndpointsRequest(input) - err := req.Send() - return out, err +// API operation DeleteLaunchTemplate for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplate +func (c *EC2) DeleteLaunchTemplate(input *DeleteLaunchTemplateInput) (*DeleteLaunchTemplateOutput, error) { + req, out := c.DeleteLaunchTemplateRequest(input) + return out, req.Send() } -const opDeleteVpcPeeringConnection = "DeleteVpcPeeringConnection" +// DeleteLaunchTemplateWithContext is the same as DeleteLaunchTemplate with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteLaunchTemplate for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteLaunchTemplateWithContext(ctx aws.Context, input *DeleteLaunchTemplateInput, opts ...request.Option) (*DeleteLaunchTemplateOutput, error) { + req, out := c.DeleteLaunchTemplateRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteVpcPeeringConnectionRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpcPeeringConnection operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteLaunchTemplateVersions = "DeleteLaunchTemplateVersions" + +// DeleteLaunchTemplateVersionsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteLaunchTemplateVersions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteVpcPeeringConnection for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteVpcPeeringConnection method directly -// instead. +// See DeleteLaunchTemplateVersions for more information on using the DeleteLaunchTemplateVersions +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteVpcPeeringConnectionRequest method. -// req, resp := client.DeleteVpcPeeringConnectionRequest(params) +// +// // Example sending a request using the DeleteLaunchTemplateVersionsRequest method. +// req, resp := client.DeleteLaunchTemplateVersionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnection -func (c *EC2) DeleteVpcPeeringConnectionRequest(input *DeleteVpcPeeringConnectionInput) (req *request.Request, output *DeleteVpcPeeringConnectionOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateVersions +func (c *EC2) DeleteLaunchTemplateVersionsRequest(input *DeleteLaunchTemplateVersionsInput) (req *request.Request, output *DeleteLaunchTemplateVersionsOutput) { op := &request.Operation{ - Name: opDeleteVpcPeeringConnection, + Name: opDeleteLaunchTemplateVersions, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteVpcPeeringConnectionInput{} + input = &DeleteLaunchTemplateVersionsInput{} } - output = &DeleteVpcPeeringConnectionOutput{} + output = &DeleteLaunchTemplateVersionsOutput{} req = c.newRequest(op, input, output) return } -// DeleteVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. +// DeleteLaunchTemplateVersions API operation for Amazon Elastic Compute Cloud. // -// Deletes a VPC peering connection. Either the owner of the requester VPC or -// the owner of the peer VPC can delete the VPC peering connection if it's in -// the active state. The owner of the requester VPC can delete a VPC peering -// connection in the pending-acceptance state. +// Deletes one or more versions of a launch template. You cannot delete the +// default version of a launch template; you must first assign a different version +// as the default. If the default version is the only version for the launch +// template, you must delete the entire launch template using DeleteLaunchTemplate. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpcPeeringConnection for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnection -func (c *EC2) DeleteVpcPeeringConnection(input *DeleteVpcPeeringConnectionInput) (*DeleteVpcPeeringConnectionOutput, error) { - req, out := c.DeleteVpcPeeringConnectionRequest(input) - err := req.Send() - return out, err +// API operation DeleteLaunchTemplateVersions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateVersions +func (c *EC2) DeleteLaunchTemplateVersions(input *DeleteLaunchTemplateVersionsInput) (*DeleteLaunchTemplateVersionsOutput, error) { + req, out := c.DeleteLaunchTemplateVersionsRequest(input) + return out, req.Send() } -const opDeleteVpnConnection = "DeleteVpnConnection" +// DeleteLaunchTemplateVersionsWithContext is the same as DeleteLaunchTemplateVersions with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteLaunchTemplateVersions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteLaunchTemplateVersionsWithContext(ctx aws.Context, input *DeleteLaunchTemplateVersionsInput, opts ...request.Option) (*DeleteLaunchTemplateVersionsOutput, error) { + req, out := c.DeleteLaunchTemplateVersionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteVpnConnectionRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpnConnection operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteNatGateway = "DeleteNatGateway" + +// DeleteNatGatewayRequest generates a "aws/request.Request" representing the +// client's request for the DeleteNatGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteVpnConnection for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteVpnConnection method directly -// instead. +// See DeleteNatGateway for more information on using the DeleteNatGateway +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteVpnConnectionRequest method. -// req, resp := client.DeleteVpnConnectionRequest(params) +// +// // Example sending a request using the DeleteNatGatewayRequest method. +// req, resp := client.DeleteNatGatewayRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnection -func (c *EC2) DeleteVpnConnectionRequest(input *DeleteVpnConnectionInput) (req *request.Request, output *DeleteVpnConnectionOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGateway +func (c *EC2) DeleteNatGatewayRequest(input *DeleteNatGatewayInput) (req *request.Request, output *DeleteNatGatewayOutput) { op := &request.Operation{ - Name: opDeleteVpnConnection, + Name: opDeleteNatGateway, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteVpnConnectionInput{} + input = &DeleteNatGatewayInput{} } - output = &DeleteVpnConnectionOutput{} + output = &DeleteNatGatewayOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DeleteVpnConnection API operation for Amazon Elastic Compute Cloud. -// -// Deletes the specified VPN connection. +// DeleteNatGateway API operation for Amazon Elastic Compute Cloud. // -// If you're deleting the VPC and its associated components, we recommend that -// you detach the virtual private gateway from the VPC and delete the VPC before -// deleting the VPN connection. If you believe that the tunnel credentials for -// your VPN connection have been compromised, you can delete the VPN connection -// and create a new one that has new keys, without needing to delete the VPC -// or virtual private gateway. If you create a new VPN connection, you must -// reconfigure the customer gateway using the new configuration information -// returned with the new VPN connection ID. +// Deletes the specified NAT gateway. Deleting a NAT gateway disassociates its +// Elastic IP address, but does not release the address from your account. Deleting +// a NAT gateway does not delete any NAT gateway routes in your route tables. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpnConnection for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnection -func (c *EC2) DeleteVpnConnection(input *DeleteVpnConnectionInput) (*DeleteVpnConnectionOutput, error) { - req, out := c.DeleteVpnConnectionRequest(input) - err := req.Send() - return out, err +// API operation DeleteNatGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGateway +func (c *EC2) DeleteNatGateway(input *DeleteNatGatewayInput) (*DeleteNatGatewayOutput, error) { + req, out := c.DeleteNatGatewayRequest(input) + return out, req.Send() } -const opDeleteVpnConnectionRoute = "DeleteVpnConnectionRoute" +// DeleteNatGatewayWithContext is the same as DeleteNatGateway with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteNatGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteNatGatewayWithContext(ctx aws.Context, input *DeleteNatGatewayInput, opts ...request.Option) (*DeleteNatGatewayOutput, error) { + req, out := c.DeleteNatGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteVpnConnectionRouteRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpnConnectionRoute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteNetworkAcl = "DeleteNetworkAcl" + +// DeleteNetworkAclRequest generates a "aws/request.Request" representing the +// client's request for the DeleteNetworkAcl operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteVpnConnectionRoute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteVpnConnectionRoute method directly -// instead. +// See DeleteNetworkAcl for more information on using the DeleteNetworkAcl +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteVpnConnectionRouteRequest method. -// req, resp := client.DeleteVpnConnectionRouteRequest(params) +// +// // Example sending a request using the DeleteNetworkAclRequest method. +// req, resp := client.DeleteNetworkAclRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRoute -func (c *EC2) DeleteVpnConnectionRouteRequest(input *DeleteVpnConnectionRouteInput) (req *request.Request, output *DeleteVpnConnectionRouteOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAcl +func (c *EC2) DeleteNetworkAclRequest(input *DeleteNetworkAclInput) (req *request.Request, output *DeleteNetworkAclOutput) { op := &request.Operation{ - Name: opDeleteVpnConnectionRoute, + Name: opDeleteNetworkAcl, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteVpnConnectionRouteInput{} + input = &DeleteNetworkAclInput{} } - output = &DeleteVpnConnectionRouteOutput{} + output = &DeleteNetworkAclOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DeleteVpnConnectionRoute API operation for Amazon Elastic Compute Cloud. +// DeleteNetworkAcl API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified static route associated with a VPN connection between -// an existing virtual private gateway and a VPN customer gateway. The static -// route allows traffic to be routed from the virtual private gateway to the -// VPN customer gateway. +// Deletes the specified network ACL. You can't delete the ACL if it's associated +// with any subnets. You can't delete the default network ACL. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpnConnectionRoute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRoute -func (c *EC2) DeleteVpnConnectionRoute(input *DeleteVpnConnectionRouteInput) (*DeleteVpnConnectionRouteOutput, error) { - req, out := c.DeleteVpnConnectionRouteRequest(input) - err := req.Send() - return out, err +// API operation DeleteNetworkAcl for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAcl +func (c *EC2) DeleteNetworkAcl(input *DeleteNetworkAclInput) (*DeleteNetworkAclOutput, error) { + req, out := c.DeleteNetworkAclRequest(input) + return out, req.Send() } -const opDeleteVpnGateway = "DeleteVpnGateway" +// DeleteNetworkAclWithContext is the same as DeleteNetworkAcl with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteNetworkAcl for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteNetworkAclWithContext(ctx aws.Context, input *DeleteNetworkAclInput, opts ...request.Option) (*DeleteNetworkAclOutput, error) { + req, out := c.DeleteNetworkAclRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeleteVpnGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DeleteVpnGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteNetworkAclEntry = "DeleteNetworkAclEntry" + +// DeleteNetworkAclEntryRequest generates a "aws/request.Request" representing the +// client's request for the DeleteNetworkAclEntry operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeleteVpnGateway for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeleteVpnGateway method directly -// instead. +// See DeleteNetworkAclEntry for more information on using the DeleteNetworkAclEntry +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeleteVpnGatewayRequest method. -// req, resp := client.DeleteVpnGatewayRequest(params) +// +// // Example sending a request using the DeleteNetworkAclEntryRequest method. +// req, resp := client.DeleteNetworkAclEntryRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGateway -func (c *EC2) DeleteVpnGatewayRequest(input *DeleteVpnGatewayInput) (req *request.Request, output *DeleteVpnGatewayOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntry +func (c *EC2) DeleteNetworkAclEntryRequest(input *DeleteNetworkAclEntryInput) (req *request.Request, output *DeleteNetworkAclEntryOutput) { op := &request.Operation{ - Name: opDeleteVpnGateway, + Name: opDeleteNetworkAclEntry, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeleteVpnGatewayInput{} + input = &DeleteNetworkAclEntryInput{} } - output = &DeleteVpnGatewayOutput{} + output = &DeleteNetworkAclEntryOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DeleteVpnGateway API operation for Amazon Elastic Compute Cloud. +// DeleteNetworkAclEntry API operation for Amazon Elastic Compute Cloud. // -// Deletes the specified virtual private gateway. We recommend that before you -// delete a virtual private gateway, you detach it from the VPC and delete the -// VPN connection. Note that you don't need to delete the virtual private gateway -// if you plan to delete and recreate the VPN connection between your VPC and -// your network. +// Deletes the specified ingress or egress entry (rule) from the specified network +// ACL. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeleteVpnGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGateway -func (c *EC2) DeleteVpnGateway(input *DeleteVpnGatewayInput) (*DeleteVpnGatewayOutput, error) { - req, out := c.DeleteVpnGatewayRequest(input) - err := req.Send() - return out, err +// API operation DeleteNetworkAclEntry for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntry +func (c *EC2) DeleteNetworkAclEntry(input *DeleteNetworkAclEntryInput) (*DeleteNetworkAclEntryOutput, error) { + req, out := c.DeleteNetworkAclEntryRequest(input) + return out, req.Send() } -const opDeregisterImage = "DeregisterImage" +// DeleteNetworkAclEntryWithContext is the same as DeleteNetworkAclEntry with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteNetworkAclEntry for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteNetworkAclEntryWithContext(ctx aws.Context, input *DeleteNetworkAclEntryInput, opts ...request.Option) (*DeleteNetworkAclEntryOutput, error) { + req, out := c.DeleteNetworkAclEntryRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DeregisterImageRequest generates a "aws/request.Request" representing the -// client's request for the DeregisterImage operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteNetworkInterface = "DeleteNetworkInterface" + +// DeleteNetworkInterfaceRequest generates a "aws/request.Request" representing the +// client's request for the DeleteNetworkInterface operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DeregisterImage for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DeregisterImage method directly -// instead. +// See DeleteNetworkInterface for more information on using the DeleteNetworkInterface +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DeregisterImageRequest method. -// req, resp := client.DeregisterImageRequest(params) +// +// // Example sending a request using the DeleteNetworkInterfaceRequest method. +// req, resp := client.DeleteNetworkInterfaceRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImage -func (c *EC2) DeregisterImageRequest(input *DeregisterImageInput) (req *request.Request, output *DeregisterImageOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterface +func (c *EC2) DeleteNetworkInterfaceRequest(input *DeleteNetworkInterfaceInput) (req *request.Request, output *DeleteNetworkInterfaceOutput) { op := &request.Operation{ - Name: opDeregisterImage, + Name: opDeleteNetworkInterface, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DeregisterImageInput{} + input = &DeleteNetworkInterfaceInput{} } - output = &DeregisterImageOutput{} + output = &DeleteNetworkInterfaceOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DeregisterImage API operation for Amazon Elastic Compute Cloud. -// -// Deregisters the specified AMI. After you deregister an AMI, it can't be used -// to launch new instances. +// DeleteNetworkInterface API operation for Amazon Elastic Compute Cloud. // -// This command does not delete the AMI. +// Deletes the specified network interface. You must detach the network interface +// before you can delete it. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DeregisterImage for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImage -func (c *EC2) DeregisterImage(input *DeregisterImageInput) (*DeregisterImageOutput, error) { - req, out := c.DeregisterImageRequest(input) - err := req.Send() - return out, err +// API operation DeleteNetworkInterface for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterface +func (c *EC2) DeleteNetworkInterface(input *DeleteNetworkInterfaceInput) (*DeleteNetworkInterfaceOutput, error) { + req, out := c.DeleteNetworkInterfaceRequest(input) + return out, req.Send() } -const opDescribeAccountAttributes = "DescribeAccountAttributes" +// DeleteNetworkInterfaceWithContext is the same as DeleteNetworkInterface with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteNetworkInterface for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteNetworkInterfaceWithContext(ctx aws.Context, input *DeleteNetworkInterfaceInput, opts ...request.Option) (*DeleteNetworkInterfaceOutput, error) { + req, out := c.DeleteNetworkInterfaceRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeAccountAttributesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeAccountAttributes operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteNetworkInterfacePermission = "DeleteNetworkInterfacePermission" + +// DeleteNetworkInterfacePermissionRequest generates a "aws/request.Request" representing the +// client's request for the DeleteNetworkInterfacePermission operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeAccountAttributes for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeAccountAttributes method directly -// instead. +// See DeleteNetworkInterfacePermission for more information on using the DeleteNetworkInterfacePermission +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeAccountAttributesRequest method. -// req, resp := client.DescribeAccountAttributesRequest(params) +// +// // Example sending a request using the DeleteNetworkInterfacePermissionRequest method. +// req, resp := client.DeleteNetworkInterfacePermissionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributes -func (c *EC2) DescribeAccountAttributesRequest(input *DescribeAccountAttributesInput) (req *request.Request, output *DescribeAccountAttributesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfacePermission +func (c *EC2) DeleteNetworkInterfacePermissionRequest(input *DeleteNetworkInterfacePermissionInput) (req *request.Request, output *DeleteNetworkInterfacePermissionOutput) { op := &request.Operation{ - Name: opDescribeAccountAttributes, + Name: opDeleteNetworkInterfacePermission, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeAccountAttributesInput{} + input = &DeleteNetworkInterfacePermissionInput{} } - output = &DescribeAccountAttributesOutput{} + output = &DeleteNetworkInterfacePermissionOutput{} req = c.newRequest(op, input, output) return } -// DescribeAccountAttributes API operation for Amazon Elastic Compute Cloud. -// -// Describes attributes of your AWS account. The following are the supported -// account attributes: -// -// * supported-platforms: Indicates whether your account can launch instances -// into EC2-Classic and EC2-VPC, or only into EC2-VPC. -// -// * default-vpc: The ID of the default VPC for your account, or none. -// -// * max-instances: The maximum number of On-Demand instances that you can -// run. +// DeleteNetworkInterfacePermission API operation for Amazon Elastic Compute Cloud. // -// * vpc-max-security-groups-per-interface: The maximum number of security -// groups that you can assign to a network interface. -// -// * max-elastic-ips: The maximum number of Elastic IP addresses that you -// can allocate for use with EC2-Classic. -// -// * vpc-max-elastic-ips: The maximum number of Elastic IP addresses that -// you can allocate for use with EC2-VPC. +// Deletes a permission for a network interface. By default, you cannot delete +// the permission if the account for which you're removing the permission has +// attached the network interface to an instance. However, you can force delete +// the permission, regardless of any attachment. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeAccountAttributes for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributes -func (c *EC2) DescribeAccountAttributes(input *DescribeAccountAttributesInput) (*DescribeAccountAttributesOutput, error) { - req, out := c.DescribeAccountAttributesRequest(input) - err := req.Send() - return out, err +// API operation DeleteNetworkInterfacePermission for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfacePermission +func (c *EC2) DeleteNetworkInterfacePermission(input *DeleteNetworkInterfacePermissionInput) (*DeleteNetworkInterfacePermissionOutput, error) { + req, out := c.DeleteNetworkInterfacePermissionRequest(input) + return out, req.Send() } -const opDescribeAddresses = "DescribeAddresses" +// DeleteNetworkInterfacePermissionWithContext is the same as DeleteNetworkInterfacePermission with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteNetworkInterfacePermission for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteNetworkInterfacePermissionWithContext(ctx aws.Context, input *DeleteNetworkInterfacePermissionInput, opts ...request.Option) (*DeleteNetworkInterfacePermissionOutput, error) { + req, out := c.DeleteNetworkInterfacePermissionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeAddressesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeAddresses operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeletePlacementGroup = "DeletePlacementGroup" + +// DeletePlacementGroupRequest generates a "aws/request.Request" representing the +// client's request for the DeletePlacementGroup operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeAddresses for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeAddresses method directly -// instead. +// See DeletePlacementGroup for more information on using the DeletePlacementGroup +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeAddressesRequest method. -// req, resp := client.DescribeAddressesRequest(params) +// +// // Example sending a request using the DeletePlacementGroupRequest method. +// req, resp := client.DeletePlacementGroupRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddresses -func (c *EC2) DescribeAddressesRequest(input *DescribeAddressesInput) (req *request.Request, output *DescribeAddressesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroup +func (c *EC2) DeletePlacementGroupRequest(input *DeletePlacementGroupInput) (req *request.Request, output *DeletePlacementGroupOutput) { op := &request.Operation{ - Name: opDescribeAddresses, + Name: opDeletePlacementGroup, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeAddressesInput{} + input = &DeletePlacementGroupInput{} } - output = &DescribeAddressesOutput{} + output = &DeletePlacementGroupOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeAddresses API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your Elastic IP addresses. +// DeletePlacementGroup API operation for Amazon Elastic Compute Cloud. // -// An Elastic IP address is for use in either the EC2-Classic platform or in -// a VPC. For more information, see Elastic IP Addresses (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) +// Deletes the specified placement group. You must terminate all instances in +// the placement group before you can delete the placement group. For more information, +// see Placement Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -5885,2427 +8686,2972 @@ func (c *EC2) DescribeAddressesRequest(input *DescribeAddressesInput) (req *requ // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeAddresses for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddresses -func (c *EC2) DescribeAddresses(input *DescribeAddressesInput) (*DescribeAddressesOutput, error) { - req, out := c.DescribeAddressesRequest(input) - err := req.Send() - return out, err +// API operation DeletePlacementGroup for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroup +func (c *EC2) DeletePlacementGroup(input *DeletePlacementGroupInput) (*DeletePlacementGroupOutput, error) { + req, out := c.DeletePlacementGroupRequest(input) + return out, req.Send() } -const opDescribeAvailabilityZones = "DescribeAvailabilityZones" +// DeletePlacementGroupWithContext is the same as DeletePlacementGroup with the addition of +// the ability to pass a context and additional request options. +// +// See DeletePlacementGroup for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeletePlacementGroupWithContext(ctx aws.Context, input *DeletePlacementGroupInput, opts ...request.Option) (*DeletePlacementGroupOutput, error) { + req, out := c.DeletePlacementGroupRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeAvailabilityZonesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeAvailabilityZones operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteQueuedReservedInstances = "DeleteQueuedReservedInstances" + +// DeleteQueuedReservedInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DeleteQueuedReservedInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeAvailabilityZones for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeAvailabilityZones method directly -// instead. +// See DeleteQueuedReservedInstances for more information on using the DeleteQueuedReservedInstances +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeAvailabilityZonesRequest method. -// req, resp := client.DescribeAvailabilityZonesRequest(params) +// +// // Example sending a request using the DeleteQueuedReservedInstancesRequest method. +// req, resp := client.DeleteQueuedReservedInstancesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZones -func (c *EC2) DescribeAvailabilityZonesRequest(input *DescribeAvailabilityZonesInput) (req *request.Request, output *DescribeAvailabilityZonesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteQueuedReservedInstances +func (c *EC2) DeleteQueuedReservedInstancesRequest(input *DeleteQueuedReservedInstancesInput) (req *request.Request, output *DeleteQueuedReservedInstancesOutput) { op := &request.Operation{ - Name: opDescribeAvailabilityZones, + Name: opDeleteQueuedReservedInstances, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeAvailabilityZonesInput{} + input = &DeleteQueuedReservedInstancesInput{} } - output = &DescribeAvailabilityZonesOutput{} + output = &DeleteQueuedReservedInstancesOutput{} req = c.newRequest(op, input, output) return } -// DescribeAvailabilityZones API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of the Availability Zones that are available to you. -// The results include zones only for the region you're currently using. If -// there is an event impacting an Availability Zone, you can use this request -// to view the state and any provided message for that Availability Zone. +// DeleteQueuedReservedInstances API operation for Amazon Elastic Compute Cloud. // -// For more information, see Regions and Availability Zones (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Deletes the queued purchases for the specified Reserved Instances. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeAvailabilityZones for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZones -func (c *EC2) DescribeAvailabilityZones(input *DescribeAvailabilityZonesInput) (*DescribeAvailabilityZonesOutput, error) { - req, out := c.DescribeAvailabilityZonesRequest(input) - err := req.Send() - return out, err +// API operation DeleteQueuedReservedInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteQueuedReservedInstances +func (c *EC2) DeleteQueuedReservedInstances(input *DeleteQueuedReservedInstancesInput) (*DeleteQueuedReservedInstancesOutput, error) { + req, out := c.DeleteQueuedReservedInstancesRequest(input) + return out, req.Send() } -const opDescribeBundleTasks = "DescribeBundleTasks" +// DeleteQueuedReservedInstancesWithContext is the same as DeleteQueuedReservedInstances with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteQueuedReservedInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteQueuedReservedInstancesWithContext(ctx aws.Context, input *DeleteQueuedReservedInstancesInput, opts ...request.Option) (*DeleteQueuedReservedInstancesOutput, error) { + req, out := c.DeleteQueuedReservedInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeBundleTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeBundleTasks operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteRoute = "DeleteRoute" + +// DeleteRouteRequest generates a "aws/request.Request" representing the +// client's request for the DeleteRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeBundleTasks for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeBundleTasks method directly -// instead. +// See DeleteRoute for more information on using the DeleteRoute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeBundleTasksRequest method. -// req, resp := client.DescribeBundleTasksRequest(params) +// +// // Example sending a request using the DeleteRouteRequest method. +// req, resp := client.DeleteRouteRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasks -func (c *EC2) DescribeBundleTasksRequest(input *DescribeBundleTasksInput) (req *request.Request, output *DescribeBundleTasksOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRoute +func (c *EC2) DeleteRouteRequest(input *DeleteRouteInput) (req *request.Request, output *DeleteRouteOutput) { op := &request.Operation{ - Name: opDescribeBundleTasks, + Name: opDeleteRoute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeBundleTasksInput{} + input = &DeleteRouteInput{} } - output = &DescribeBundleTasksOutput{} + output = &DeleteRouteOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeBundleTasks API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your bundling tasks. +// DeleteRoute API operation for Amazon Elastic Compute Cloud. // -// Completed bundle tasks are listed for only a limited time. If your bundle -// task is no longer in the list, you can still register an AMI from it. Just -// use RegisterImage with the Amazon S3 bucket name and image manifest name -// you provided to the bundle task. +// Deletes the specified route from the specified route table. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeBundleTasks for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasks -func (c *EC2) DescribeBundleTasks(input *DescribeBundleTasksInput) (*DescribeBundleTasksOutput, error) { - req, out := c.DescribeBundleTasksRequest(input) - err := req.Send() - return out, err +// API operation DeleteRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRoute +func (c *EC2) DeleteRoute(input *DeleteRouteInput) (*DeleteRouteOutput, error) { + req, out := c.DeleteRouteRequest(input) + return out, req.Send() } -const opDescribeClassicLinkInstances = "DescribeClassicLinkInstances" +// DeleteRouteWithContext is the same as DeleteRoute with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteRouteWithContext(ctx aws.Context, input *DeleteRouteInput, opts ...request.Option) (*DeleteRouteOutput, error) { + req, out := c.DeleteRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeClassicLinkInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeClassicLinkInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteRouteTable = "DeleteRouteTable" + +// DeleteRouteTableRequest generates a "aws/request.Request" representing the +// client's request for the DeleteRouteTable operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeClassicLinkInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeClassicLinkInstances method directly -// instead. +// See DeleteRouteTable for more information on using the DeleteRouteTable +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeClassicLinkInstancesRequest method. -// req, resp := client.DescribeClassicLinkInstancesRequest(params) +// +// // Example sending a request using the DeleteRouteTableRequest method. +// req, resp := client.DeleteRouteTableRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstances -func (c *EC2) DescribeClassicLinkInstancesRequest(input *DescribeClassicLinkInstancesInput) (req *request.Request, output *DescribeClassicLinkInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTable +func (c *EC2) DeleteRouteTableRequest(input *DeleteRouteTableInput) (req *request.Request, output *DeleteRouteTableOutput) { op := &request.Operation{ - Name: opDescribeClassicLinkInstances, + Name: opDeleteRouteTable, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeClassicLinkInstancesInput{} + input = &DeleteRouteTableInput{} } - output = &DescribeClassicLinkInstancesOutput{} + output = &DeleteRouteTableOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeClassicLinkInstances API operation for Amazon Elastic Compute Cloud. +// DeleteRouteTable API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your linked EC2-Classic instances. This request -// only returns information about EC2-Classic instances linked to a VPC through -// ClassicLink; you cannot use this request to return information about other -// instances. +// Deletes the specified route table. You must disassociate the route table +// from any subnets before you can delete it. You can't delete the main route +// table. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeClassicLinkInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstances -func (c *EC2) DescribeClassicLinkInstances(input *DescribeClassicLinkInstancesInput) (*DescribeClassicLinkInstancesOutput, error) { - req, out := c.DescribeClassicLinkInstancesRequest(input) - err := req.Send() - return out, err +// API operation DeleteRouteTable for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTable +func (c *EC2) DeleteRouteTable(input *DeleteRouteTableInput) (*DeleteRouteTableOutput, error) { + req, out := c.DeleteRouteTableRequest(input) + return out, req.Send() } -const opDescribeConversionTasks = "DescribeConversionTasks" +// DeleteRouteTableWithContext is the same as DeleteRouteTable with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteRouteTable for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteRouteTableWithContext(ctx aws.Context, input *DeleteRouteTableInput, opts ...request.Option) (*DeleteRouteTableOutput, error) { + req, out := c.DeleteRouteTableRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeConversionTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeConversionTasks operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteSecurityGroup = "DeleteSecurityGroup" + +// DeleteSecurityGroupRequest generates a "aws/request.Request" representing the +// client's request for the DeleteSecurityGroup operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeConversionTasks for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeConversionTasks method directly -// instead. +// See DeleteSecurityGroup for more information on using the DeleteSecurityGroup +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeConversionTasksRequest method. -// req, resp := client.DescribeConversionTasksRequest(params) +// +// // Example sending a request using the DeleteSecurityGroupRequest method. +// req, resp := client.DeleteSecurityGroupRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasks -func (c *EC2) DescribeConversionTasksRequest(input *DescribeConversionTasksInput) (req *request.Request, output *DescribeConversionTasksOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroup +func (c *EC2) DeleteSecurityGroupRequest(input *DeleteSecurityGroupInput) (req *request.Request, output *DeleteSecurityGroupOutput) { op := &request.Operation{ - Name: opDescribeConversionTasks, + Name: opDeleteSecurityGroup, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeConversionTasksInput{} + input = &DeleteSecurityGroupInput{} } - output = &DescribeConversionTasksOutput{} + output = &DeleteSecurityGroupOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeConversionTasks API operation for Amazon Elastic Compute Cloud. +// DeleteSecurityGroup API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your conversion tasks. For more information, see -// the VM Import/Export User Guide (http://docs.aws.amazon.com/vm-import/latest/userguide/). +// Deletes a security group. // -// For information about the import manifest referenced by this API action, -// see VM Import Manifest (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). +// If you attempt to delete a security group that is associated with an instance, +// or is referenced by another security group, the operation fails with InvalidGroup.InUse +// in EC2-Classic or DependencyViolation in EC2-VPC. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeConversionTasks for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasks -func (c *EC2) DescribeConversionTasks(input *DescribeConversionTasksInput) (*DescribeConversionTasksOutput, error) { - req, out := c.DescribeConversionTasksRequest(input) - err := req.Send() - return out, err +// API operation DeleteSecurityGroup for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroup +func (c *EC2) DeleteSecurityGroup(input *DeleteSecurityGroupInput) (*DeleteSecurityGroupOutput, error) { + req, out := c.DeleteSecurityGroupRequest(input) + return out, req.Send() } -const opDescribeCustomerGateways = "DescribeCustomerGateways" +// DeleteSecurityGroupWithContext is the same as DeleteSecurityGroup with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteSecurityGroup for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteSecurityGroupWithContext(ctx aws.Context, input *DeleteSecurityGroupInput, opts ...request.Option) (*DeleteSecurityGroupOutput, error) { + req, out := c.DeleteSecurityGroupRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeCustomerGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeCustomerGateways operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteSnapshot = "DeleteSnapshot" + +// DeleteSnapshotRequest generates a "aws/request.Request" representing the +// client's request for the DeleteSnapshot operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeCustomerGateways for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeCustomerGateways method directly -// instead. +// See DeleteSnapshot for more information on using the DeleteSnapshot +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeCustomerGatewaysRequest method. -// req, resp := client.DescribeCustomerGatewaysRequest(params) +// +// // Example sending a request using the DeleteSnapshotRequest method. +// req, resp := client.DeleteSnapshotRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGateways -func (c *EC2) DescribeCustomerGatewaysRequest(input *DescribeCustomerGatewaysInput) (req *request.Request, output *DescribeCustomerGatewaysOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshot +func (c *EC2) DeleteSnapshotRequest(input *DeleteSnapshotInput) (req *request.Request, output *DeleteSnapshotOutput) { op := &request.Operation{ - Name: opDescribeCustomerGateways, + Name: opDeleteSnapshot, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeCustomerGatewaysInput{} + input = &DeleteSnapshotInput{} } - output = &DescribeCustomerGatewaysOutput{} + output = &DeleteSnapshotOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeCustomerGateways API operation for Amazon Elastic Compute Cloud. +// DeleteSnapshot API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your VPN customer gateways. +// Deletes the specified snapshot. // -// For more information about VPN customer gateways, see Adding a Hardware Virtual -// Private Gateway to Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html) -// in the Amazon Virtual Private Cloud User Guide. +// When you make periodic snapshots of a volume, the snapshots are incremental, +// and only the blocks on the device that have changed since your last snapshot +// are saved in the new snapshot. When you delete a snapshot, only the data +// not needed for any other snapshot is removed. So regardless of which prior +// snapshots have been deleted, all active snapshots will have access to all +// the information needed to restore the volume. +// +// You cannot delete a snapshot of the root device of an EBS volume used by +// a registered AMI. You must first de-register the AMI before you can delete +// the snapshot. +// +// For more information, see Deleting an Amazon EBS Snapshot (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-snapshot.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeCustomerGateways for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGateways -func (c *EC2) DescribeCustomerGateways(input *DescribeCustomerGatewaysInput) (*DescribeCustomerGatewaysOutput, error) { - req, out := c.DescribeCustomerGatewaysRequest(input) - err := req.Send() - return out, err +// API operation DeleteSnapshot for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshot +func (c *EC2) DeleteSnapshot(input *DeleteSnapshotInput) (*DeleteSnapshotOutput, error) { + req, out := c.DeleteSnapshotRequest(input) + return out, req.Send() } -const opDescribeDhcpOptions = "DescribeDhcpOptions" +// DeleteSnapshotWithContext is the same as DeleteSnapshot with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteSnapshot for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteSnapshotWithContext(ctx aws.Context, input *DeleteSnapshotInput, opts ...request.Option) (*DeleteSnapshotOutput, error) { + req, out := c.DeleteSnapshotRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeDhcpOptionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeDhcpOptions operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteSpotDatafeedSubscription = "DeleteSpotDatafeedSubscription" + +// DeleteSpotDatafeedSubscriptionRequest generates a "aws/request.Request" representing the +// client's request for the DeleteSpotDatafeedSubscription operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeDhcpOptions for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeDhcpOptions method directly -// instead. +// See DeleteSpotDatafeedSubscription for more information on using the DeleteSpotDatafeedSubscription +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeDhcpOptionsRequest method. -// req, resp := client.DescribeDhcpOptionsRequest(params) +// +// // Example sending a request using the DeleteSpotDatafeedSubscriptionRequest method. +// req, resp := client.DeleteSpotDatafeedSubscriptionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptions -func (c *EC2) DescribeDhcpOptionsRequest(input *DescribeDhcpOptionsInput) (req *request.Request, output *DescribeDhcpOptionsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscription +func (c *EC2) DeleteSpotDatafeedSubscriptionRequest(input *DeleteSpotDatafeedSubscriptionInput) (req *request.Request, output *DeleteSpotDatafeedSubscriptionOutput) { op := &request.Operation{ - Name: opDescribeDhcpOptions, + Name: opDeleteSpotDatafeedSubscription, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeDhcpOptionsInput{} + input = &DeleteSpotDatafeedSubscriptionInput{} } - output = &DescribeDhcpOptionsOutput{} + output = &DeleteSpotDatafeedSubscriptionOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeDhcpOptions API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your DHCP options sets. +// DeleteSpotDatafeedSubscription API operation for Amazon Elastic Compute Cloud. // -// For more information about DHCP options sets, see DHCP Options Sets (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html) -// in the Amazon Virtual Private Cloud User Guide. +// Deletes the data feed for Spot Instances. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeDhcpOptions for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptions -func (c *EC2) DescribeDhcpOptions(input *DescribeDhcpOptionsInput) (*DescribeDhcpOptionsOutput, error) { - req, out := c.DescribeDhcpOptionsRequest(input) - err := req.Send() - return out, err +// API operation DeleteSpotDatafeedSubscription for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscription +func (c *EC2) DeleteSpotDatafeedSubscription(input *DeleteSpotDatafeedSubscriptionInput) (*DeleteSpotDatafeedSubscriptionOutput, error) { + req, out := c.DeleteSpotDatafeedSubscriptionRequest(input) + return out, req.Send() } -const opDescribeEgressOnlyInternetGateways = "DescribeEgressOnlyInternetGateways" +// DeleteSpotDatafeedSubscriptionWithContext is the same as DeleteSpotDatafeedSubscription with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteSpotDatafeedSubscription for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteSpotDatafeedSubscriptionWithContext(ctx aws.Context, input *DeleteSpotDatafeedSubscriptionInput, opts ...request.Option) (*DeleteSpotDatafeedSubscriptionOutput, error) { + req, out := c.DeleteSpotDatafeedSubscriptionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeEgressOnlyInternetGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeEgressOnlyInternetGateways operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteSubnet = "DeleteSubnet" + +// DeleteSubnetRequest generates a "aws/request.Request" representing the +// client's request for the DeleteSubnet operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeEgressOnlyInternetGateways for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeEgressOnlyInternetGateways method directly -// instead. +// See DeleteSubnet for more information on using the DeleteSubnet +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeEgressOnlyInternetGatewaysRequest method. -// req, resp := client.DescribeEgressOnlyInternetGatewaysRequest(params) +// +// // Example sending a request using the DeleteSubnetRequest method. +// req, resp := client.DeleteSubnetRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGateways -func (c *EC2) DescribeEgressOnlyInternetGatewaysRequest(input *DescribeEgressOnlyInternetGatewaysInput) (req *request.Request, output *DescribeEgressOnlyInternetGatewaysOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnet +func (c *EC2) DeleteSubnetRequest(input *DeleteSubnetInput) (req *request.Request, output *DeleteSubnetOutput) { op := &request.Operation{ - Name: opDescribeEgressOnlyInternetGateways, + Name: opDeleteSubnet, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeEgressOnlyInternetGatewaysInput{} + input = &DeleteSubnetInput{} } - output = &DescribeEgressOnlyInternetGatewaysOutput{} + output = &DeleteSubnetOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeEgressOnlyInternetGateways API operation for Amazon Elastic Compute Cloud. +// DeleteSubnet API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your egress-only Internet gateways. +// Deletes the specified subnet. You must terminate all running instances in +// the subnet before you can delete the subnet. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeEgressOnlyInternetGateways for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGateways -func (c *EC2) DescribeEgressOnlyInternetGateways(input *DescribeEgressOnlyInternetGatewaysInput) (*DescribeEgressOnlyInternetGatewaysOutput, error) { - req, out := c.DescribeEgressOnlyInternetGatewaysRequest(input) - err := req.Send() - return out, err +// API operation DeleteSubnet for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnet +func (c *EC2) DeleteSubnet(input *DeleteSubnetInput) (*DeleteSubnetOutput, error) { + req, out := c.DeleteSubnetRequest(input) + return out, req.Send() } -const opDescribeExportTasks = "DescribeExportTasks" +// DeleteSubnetWithContext is the same as DeleteSubnet with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteSubnet for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteSubnetWithContext(ctx aws.Context, input *DeleteSubnetInput, opts ...request.Option) (*DeleteSubnetOutput, error) { + req, out := c.DeleteSubnetRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeExportTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeExportTasks operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTags = "DeleteTags" + +// DeleteTagsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTags operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeExportTasks for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeExportTasks method directly -// instead. +// See DeleteTags for more information on using the DeleteTags +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeExportTasksRequest method. -// req, resp := client.DescribeExportTasksRequest(params) +// +// // Example sending a request using the DeleteTagsRequest method. +// req, resp := client.DeleteTagsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasks -func (c *EC2) DescribeExportTasksRequest(input *DescribeExportTasksInput) (req *request.Request, output *DescribeExportTasksOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTags +func (c *EC2) DeleteTagsRequest(input *DeleteTagsInput) (req *request.Request, output *DeleteTagsOutput) { op := &request.Operation{ - Name: opDescribeExportTasks, + Name: opDeleteTags, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeExportTasksInput{} + input = &DeleteTagsInput{} } - output = &DescribeExportTasksOutput{} + output = &DeleteTagsOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeExportTasks API operation for Amazon Elastic Compute Cloud. +// DeleteTags API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your export tasks. +// Deletes the specified set of tags from the specified set of resources. +// +// To list the current tags, use DescribeTags. For more information about tags, +// see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeExportTasks for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasks -func (c *EC2) DescribeExportTasks(input *DescribeExportTasksInput) (*DescribeExportTasksOutput, error) { - req, out := c.DescribeExportTasksRequest(input) - err := req.Send() - return out, err +// API operation DeleteTags for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTags +func (c *EC2) DeleteTags(input *DeleteTagsInput) (*DeleteTagsOutput, error) { + req, out := c.DeleteTagsRequest(input) + return out, req.Send() } -const opDescribeFlowLogs = "DescribeFlowLogs" +// DeleteTagsWithContext is the same as DeleteTags with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTags for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTagsWithContext(ctx aws.Context, input *DeleteTagsInput, opts ...request.Option) (*DeleteTagsOutput, error) { + req, out := c.DeleteTagsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeFlowLogsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeFlowLogs operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTrafficMirrorFilter = "DeleteTrafficMirrorFilter" + +// DeleteTrafficMirrorFilterRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTrafficMirrorFilter operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeFlowLogs for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeFlowLogs method directly -// instead. +// See DeleteTrafficMirrorFilter for more information on using the DeleteTrafficMirrorFilter +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeFlowLogsRequest method. -// req, resp := client.DescribeFlowLogsRequest(params) +// +// // Example sending a request using the DeleteTrafficMirrorFilterRequest method. +// req, resp := client.DeleteTrafficMirrorFilterRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogs -func (c *EC2) DescribeFlowLogsRequest(input *DescribeFlowLogsInput) (req *request.Request, output *DescribeFlowLogsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilter +func (c *EC2) DeleteTrafficMirrorFilterRequest(input *DeleteTrafficMirrorFilterInput) (req *request.Request, output *DeleteTrafficMirrorFilterOutput) { op := &request.Operation{ - Name: opDescribeFlowLogs, + Name: opDeleteTrafficMirrorFilter, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeFlowLogsInput{} + input = &DeleteTrafficMirrorFilterInput{} } - output = &DescribeFlowLogsOutput{} + output = &DeleteTrafficMirrorFilterOutput{} req = c.newRequest(op, input, output) return } -// DescribeFlowLogs API operation for Amazon Elastic Compute Cloud. +// DeleteTrafficMirrorFilter API operation for Amazon Elastic Compute Cloud. // -// Describes one or more flow logs. To view the information in your flow logs -// (the log streams for the network interfaces), you must use the CloudWatch -// Logs console or the CloudWatch Logs API. +// Deletes the specified Traffic Mirror filter. +// +// You cannot delete a Traffic Mirror filter that is in use by a Traffic Mirror +// session. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeFlowLogs for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogs -func (c *EC2) DescribeFlowLogs(input *DescribeFlowLogsInput) (*DescribeFlowLogsOutput, error) { - req, out := c.DescribeFlowLogsRequest(input) - err := req.Send() - return out, err +// API operation DeleteTrafficMirrorFilter for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilter +func (c *EC2) DeleteTrafficMirrorFilter(input *DeleteTrafficMirrorFilterInput) (*DeleteTrafficMirrorFilterOutput, error) { + req, out := c.DeleteTrafficMirrorFilterRequest(input) + return out, req.Send() } -const opDescribeHostReservationOfferings = "DescribeHostReservationOfferings" +// DeleteTrafficMirrorFilterWithContext is the same as DeleteTrafficMirrorFilter with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTrafficMirrorFilter for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTrafficMirrorFilterWithContext(ctx aws.Context, input *DeleteTrafficMirrorFilterInput, opts ...request.Option) (*DeleteTrafficMirrorFilterOutput, error) { + req, out := c.DeleteTrafficMirrorFilterRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeHostReservationOfferingsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeHostReservationOfferings operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTrafficMirrorFilterRule = "DeleteTrafficMirrorFilterRule" + +// DeleteTrafficMirrorFilterRuleRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTrafficMirrorFilterRule operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeHostReservationOfferings for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeHostReservationOfferings method directly -// instead. +// See DeleteTrafficMirrorFilterRule for more information on using the DeleteTrafficMirrorFilterRule +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeHostReservationOfferingsRequest method. -// req, resp := client.DescribeHostReservationOfferingsRequest(params) +// +// // Example sending a request using the DeleteTrafficMirrorFilterRuleRequest method. +// req, resp := client.DeleteTrafficMirrorFilterRuleRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferings -func (c *EC2) DescribeHostReservationOfferingsRequest(input *DescribeHostReservationOfferingsInput) (req *request.Request, output *DescribeHostReservationOfferingsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilterRule +func (c *EC2) DeleteTrafficMirrorFilterRuleRequest(input *DeleteTrafficMirrorFilterRuleInput) (req *request.Request, output *DeleteTrafficMirrorFilterRuleOutput) { op := &request.Operation{ - Name: opDescribeHostReservationOfferings, + Name: opDeleteTrafficMirrorFilterRule, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeHostReservationOfferingsInput{} + input = &DeleteTrafficMirrorFilterRuleInput{} } - output = &DescribeHostReservationOfferingsOutput{} + output = &DeleteTrafficMirrorFilterRuleOutput{} req = c.newRequest(op, input, output) return } -// DescribeHostReservationOfferings API operation for Amazon Elastic Compute Cloud. +// DeleteTrafficMirrorFilterRule API operation for Amazon Elastic Compute Cloud. // -// Describes the Dedicated Host Reservations that are available to purchase. -// -// The results describe all the Dedicated Host Reservation offerings, including -// offerings that may not match the instance family and region of your Dedicated -// Hosts. When purchasing an offering, ensure that the the instance family and -// region of the offering matches that of the Dedicated Host/s it will be associated -// with. For an overview of supported instance types, see Dedicated Hosts Overview -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Deletes the specified Traffic Mirror rule. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeHostReservationOfferings for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferings -func (c *EC2) DescribeHostReservationOfferings(input *DescribeHostReservationOfferingsInput) (*DescribeHostReservationOfferingsOutput, error) { - req, out := c.DescribeHostReservationOfferingsRequest(input) - err := req.Send() - return out, err +// API operation DeleteTrafficMirrorFilterRule for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilterRule +func (c *EC2) DeleteTrafficMirrorFilterRule(input *DeleteTrafficMirrorFilterRuleInput) (*DeleteTrafficMirrorFilterRuleOutput, error) { + req, out := c.DeleteTrafficMirrorFilterRuleRequest(input) + return out, req.Send() } -const opDescribeHostReservations = "DescribeHostReservations" +// DeleteTrafficMirrorFilterRuleWithContext is the same as DeleteTrafficMirrorFilterRule with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTrafficMirrorFilterRule for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTrafficMirrorFilterRuleWithContext(ctx aws.Context, input *DeleteTrafficMirrorFilterRuleInput, opts ...request.Option) (*DeleteTrafficMirrorFilterRuleOutput, error) { + req, out := c.DeleteTrafficMirrorFilterRuleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeHostReservationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeHostReservations operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTrafficMirrorSession = "DeleteTrafficMirrorSession" + +// DeleteTrafficMirrorSessionRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTrafficMirrorSession operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeHostReservations for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeHostReservations method directly -// instead. +// See DeleteTrafficMirrorSession for more information on using the DeleteTrafficMirrorSession +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeHostReservationsRequest method. -// req, resp := client.DescribeHostReservationsRequest(params) +// +// // Example sending a request using the DeleteTrafficMirrorSessionRequest method. +// req, resp := client.DeleteTrafficMirrorSessionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservations -func (c *EC2) DescribeHostReservationsRequest(input *DescribeHostReservationsInput) (req *request.Request, output *DescribeHostReservationsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorSession +func (c *EC2) DeleteTrafficMirrorSessionRequest(input *DeleteTrafficMirrorSessionInput) (req *request.Request, output *DeleteTrafficMirrorSessionOutput) { op := &request.Operation{ - Name: opDescribeHostReservations, + Name: opDeleteTrafficMirrorSession, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeHostReservationsInput{} + input = &DeleteTrafficMirrorSessionInput{} } - output = &DescribeHostReservationsOutput{} + output = &DeleteTrafficMirrorSessionOutput{} req = c.newRequest(op, input, output) return } -// DescribeHostReservations API operation for Amazon Elastic Compute Cloud. +// DeleteTrafficMirrorSession API operation for Amazon Elastic Compute Cloud. // -// Describes Dedicated Host Reservations which are associated with Dedicated -// Hosts in your account. +// Deletes the specified Traffic Mirror session. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeHostReservations for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservations -func (c *EC2) DescribeHostReservations(input *DescribeHostReservationsInput) (*DescribeHostReservationsOutput, error) { - req, out := c.DescribeHostReservationsRequest(input) - err := req.Send() - return out, err +// API operation DeleteTrafficMirrorSession for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorSession +func (c *EC2) DeleteTrafficMirrorSession(input *DeleteTrafficMirrorSessionInput) (*DeleteTrafficMirrorSessionOutput, error) { + req, out := c.DeleteTrafficMirrorSessionRequest(input) + return out, req.Send() } -const opDescribeHosts = "DescribeHosts" +// DeleteTrafficMirrorSessionWithContext is the same as DeleteTrafficMirrorSession with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTrafficMirrorSession for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTrafficMirrorSessionWithContext(ctx aws.Context, input *DeleteTrafficMirrorSessionInput, opts ...request.Option) (*DeleteTrafficMirrorSessionOutput, error) { + req, out := c.DeleteTrafficMirrorSessionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeHostsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeHosts operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTrafficMirrorTarget = "DeleteTrafficMirrorTarget" + +// DeleteTrafficMirrorTargetRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTrafficMirrorTarget operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeHosts for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeHosts method directly -// instead. +// See DeleteTrafficMirrorTarget for more information on using the DeleteTrafficMirrorTarget +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeHostsRequest method. -// req, resp := client.DescribeHostsRequest(params) +// +// // Example sending a request using the DeleteTrafficMirrorTargetRequest method. +// req, resp := client.DeleteTrafficMirrorTargetRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHosts -func (c *EC2) DescribeHostsRequest(input *DescribeHostsInput) (req *request.Request, output *DescribeHostsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorTarget +func (c *EC2) DeleteTrafficMirrorTargetRequest(input *DeleteTrafficMirrorTargetInput) (req *request.Request, output *DeleteTrafficMirrorTargetOutput) { op := &request.Operation{ - Name: opDescribeHosts, + Name: opDeleteTrafficMirrorTarget, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeHostsInput{} + input = &DeleteTrafficMirrorTargetInput{} } - output = &DescribeHostsOutput{} + output = &DeleteTrafficMirrorTargetOutput{} req = c.newRequest(op, input, output) return } -// DescribeHosts API operation for Amazon Elastic Compute Cloud. +// DeleteTrafficMirrorTarget API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your Dedicated Hosts. +// Deletes the specified Traffic Mirror target. // -// The results describe only the Dedicated Hosts in the region you're currently -// using. All listed instances consume capacity on your Dedicated Host. Dedicated -// Hosts that have recently been released will be listed with the state released. +// You cannot delete a Traffic Mirror target that is in use by a Traffic Mirror +// session. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeHosts for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHosts -func (c *EC2) DescribeHosts(input *DescribeHostsInput) (*DescribeHostsOutput, error) { - req, out := c.DescribeHostsRequest(input) - err := req.Send() - return out, err +// API operation DeleteTrafficMirrorTarget for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorTarget +func (c *EC2) DeleteTrafficMirrorTarget(input *DeleteTrafficMirrorTargetInput) (*DeleteTrafficMirrorTargetOutput, error) { + req, out := c.DeleteTrafficMirrorTargetRequest(input) + return out, req.Send() } -const opDescribeIamInstanceProfileAssociations = "DescribeIamInstanceProfileAssociations" +// DeleteTrafficMirrorTargetWithContext is the same as DeleteTrafficMirrorTarget with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTrafficMirrorTarget for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTrafficMirrorTargetWithContext(ctx aws.Context, input *DeleteTrafficMirrorTargetInput, opts ...request.Option) (*DeleteTrafficMirrorTargetOutput, error) { + req, out := c.DeleteTrafficMirrorTargetRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeIamInstanceProfileAssociationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeIamInstanceProfileAssociations operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTransitGateway = "DeleteTransitGateway" + +// DeleteTransitGatewayRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTransitGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeIamInstanceProfileAssociations for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeIamInstanceProfileAssociations method directly -// instead. +// See DeleteTransitGateway for more information on using the DeleteTransitGateway +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeIamInstanceProfileAssociationsRequest method. -// req, resp := client.DescribeIamInstanceProfileAssociationsRequest(params) +// +// // Example sending a request using the DeleteTransitGatewayRequest method. +// req, resp := client.DeleteTransitGatewayRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociations -func (c *EC2) DescribeIamInstanceProfileAssociationsRequest(input *DescribeIamInstanceProfileAssociationsInput) (req *request.Request, output *DescribeIamInstanceProfileAssociationsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGateway +func (c *EC2) DeleteTransitGatewayRequest(input *DeleteTransitGatewayInput) (req *request.Request, output *DeleteTransitGatewayOutput) { op := &request.Operation{ - Name: opDescribeIamInstanceProfileAssociations, + Name: opDeleteTransitGateway, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeIamInstanceProfileAssociationsInput{} + input = &DeleteTransitGatewayInput{} } - output = &DescribeIamInstanceProfileAssociationsOutput{} + output = &DeleteTransitGatewayOutput{} req = c.newRequest(op, input, output) return } -// DescribeIamInstanceProfileAssociations API operation for Amazon Elastic Compute Cloud. +// DeleteTransitGateway API operation for Amazon Elastic Compute Cloud. // -// Describes your IAM instance profile associations. +// Deletes the specified transit gateway. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeIamInstanceProfileAssociations for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociations -func (c *EC2) DescribeIamInstanceProfileAssociations(input *DescribeIamInstanceProfileAssociationsInput) (*DescribeIamInstanceProfileAssociationsOutput, error) { - req, out := c.DescribeIamInstanceProfileAssociationsRequest(input) - err := req.Send() - return out, err +// API operation DeleteTransitGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGateway +func (c *EC2) DeleteTransitGateway(input *DeleteTransitGatewayInput) (*DeleteTransitGatewayOutput, error) { + req, out := c.DeleteTransitGatewayRequest(input) + return out, req.Send() } -const opDescribeIdFormat = "DescribeIdFormat" +// DeleteTransitGatewayWithContext is the same as DeleteTransitGateway with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTransitGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTransitGatewayWithContext(ctx aws.Context, input *DeleteTransitGatewayInput, opts ...request.Option) (*DeleteTransitGatewayOutput, error) { + req, out := c.DeleteTransitGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the DescribeIdFormat operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTransitGatewayRoute = "DeleteTransitGatewayRoute" + +// DeleteTransitGatewayRouteRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTransitGatewayRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeIdFormat for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeIdFormat method directly -// instead. +// See DeleteTransitGatewayRoute for more information on using the DeleteTransitGatewayRoute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeIdFormatRequest method. -// req, resp := client.DescribeIdFormatRequest(params) +// +// // Example sending a request using the DeleteTransitGatewayRouteRequest method. +// req, resp := client.DeleteTransitGatewayRouteRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormat -func (c *EC2) DescribeIdFormatRequest(input *DescribeIdFormatInput) (req *request.Request, output *DescribeIdFormatOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRoute +func (c *EC2) DeleteTransitGatewayRouteRequest(input *DeleteTransitGatewayRouteInput) (req *request.Request, output *DeleteTransitGatewayRouteOutput) { op := &request.Operation{ - Name: opDescribeIdFormat, + Name: opDeleteTransitGatewayRoute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeIdFormatInput{} + input = &DeleteTransitGatewayRouteInput{} } - output = &DescribeIdFormatOutput{} + output = &DeleteTransitGatewayRouteOutput{} req = c.newRequest(op, input, output) return } -// DescribeIdFormat API operation for Amazon Elastic Compute Cloud. -// -// Describes the ID format settings for your resources on a per-region basis, -// for example, to view which resource types are enabled for longer IDs. This -// request only returns information about resource types whose ID formats can -// be modified; it does not return information about other resource types. +// DeleteTransitGatewayRoute API operation for Amazon Elastic Compute Cloud. // -// The following resource types support longer IDs: instance | reservation | -// snapshot | volume. -// -// These settings apply to the IAM user who makes the request; they do not apply -// to the entire AWS account. By default, an IAM user defaults to the same settings -// as the root user, unless they explicitly override the settings by running -// the ModifyIdFormat command. Resources created with longer IDs are visible -// to all IAM users, regardless of these settings and provided that they have -// permission to use the relevant Describe command for the resource type. +// Deletes the specified route from the specified transit gateway route table. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeIdFormat for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormat -func (c *EC2) DescribeIdFormat(input *DescribeIdFormatInput) (*DescribeIdFormatOutput, error) { - req, out := c.DescribeIdFormatRequest(input) - err := req.Send() - return out, err +// API operation DeleteTransitGatewayRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRoute +func (c *EC2) DeleteTransitGatewayRoute(input *DeleteTransitGatewayRouteInput) (*DeleteTransitGatewayRouteOutput, error) { + req, out := c.DeleteTransitGatewayRouteRequest(input) + return out, req.Send() } -const opDescribeIdentityIdFormat = "DescribeIdentityIdFormat" +// DeleteTransitGatewayRouteWithContext is the same as DeleteTransitGatewayRoute with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTransitGatewayRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTransitGatewayRouteWithContext(ctx aws.Context, input *DeleteTransitGatewayRouteInput, opts ...request.Option) (*DeleteTransitGatewayRouteOutput, error) { + req, out := c.DeleteTransitGatewayRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeIdentityIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the DescribeIdentityIdFormat operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTransitGatewayRouteTable = "DeleteTransitGatewayRouteTable" + +// DeleteTransitGatewayRouteTableRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTransitGatewayRouteTable operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeIdentityIdFormat for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeIdentityIdFormat method directly -// instead. +// See DeleteTransitGatewayRouteTable for more information on using the DeleteTransitGatewayRouteTable +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeIdentityIdFormatRequest method. -// req, resp := client.DescribeIdentityIdFormatRequest(params) +// +// // Example sending a request using the DeleteTransitGatewayRouteTableRequest method. +// req, resp := client.DeleteTransitGatewayRouteTableRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormat -func (c *EC2) DescribeIdentityIdFormatRequest(input *DescribeIdentityIdFormatInput) (req *request.Request, output *DescribeIdentityIdFormatOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteTable +func (c *EC2) DeleteTransitGatewayRouteTableRequest(input *DeleteTransitGatewayRouteTableInput) (req *request.Request, output *DeleteTransitGatewayRouteTableOutput) { op := &request.Operation{ - Name: opDescribeIdentityIdFormat, + Name: opDeleteTransitGatewayRouteTable, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeIdentityIdFormatInput{} + input = &DeleteTransitGatewayRouteTableInput{} } - output = &DescribeIdentityIdFormatOutput{} + output = &DeleteTransitGatewayRouteTableOutput{} req = c.newRequest(op, input, output) return } -// DescribeIdentityIdFormat API operation for Amazon Elastic Compute Cloud. -// -// Describes the ID format settings for resources for the specified IAM user, -// IAM role, or root user. For example, you can view the resource types that -// are enabled for longer IDs. This request only returns information about resource -// types whose ID formats can be modified; it does not return information about -// other resource types. For more information, see Resource IDs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// The following resource types support longer IDs: instance | reservation | -// snapshot | volume. +// DeleteTransitGatewayRouteTable API operation for Amazon Elastic Compute Cloud. // -// These settings apply to the principal specified in the request. They do not -// apply to the principal that makes the request. +// Deletes the specified transit gateway route table. You must disassociate +// the route table from any transit gateway route tables before you can delete +// it. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeIdentityIdFormat for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormat -func (c *EC2) DescribeIdentityIdFormat(input *DescribeIdentityIdFormatInput) (*DescribeIdentityIdFormatOutput, error) { - req, out := c.DescribeIdentityIdFormatRequest(input) - err := req.Send() - return out, err +// API operation DeleteTransitGatewayRouteTable for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteTable +func (c *EC2) DeleteTransitGatewayRouteTable(input *DeleteTransitGatewayRouteTableInput) (*DeleteTransitGatewayRouteTableOutput, error) { + req, out := c.DeleteTransitGatewayRouteTableRequest(input) + return out, req.Send() } -const opDescribeImageAttribute = "DescribeImageAttribute" +// DeleteTransitGatewayRouteTableWithContext is the same as DeleteTransitGatewayRouteTable with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTransitGatewayRouteTable for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTransitGatewayRouteTableWithContext(ctx aws.Context, input *DeleteTransitGatewayRouteTableInput, opts ...request.Option) (*DeleteTransitGatewayRouteTableOutput, error) { + req, out := c.DeleteTransitGatewayRouteTableRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeImageAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteTransitGatewayVpcAttachment = "DeleteTransitGatewayVpcAttachment" + +// DeleteTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTransitGatewayVpcAttachment operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeImageAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeImageAttribute method directly -// instead. +// See DeleteTransitGatewayVpcAttachment for more information on using the DeleteTransitGatewayVpcAttachment +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeImageAttributeRequest method. -// req, resp := client.DescribeImageAttributeRequest(params) +// +// // Example sending a request using the DeleteTransitGatewayVpcAttachmentRequest method. +// req, resp := client.DeleteTransitGatewayVpcAttachmentRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageAttribute -func (c *EC2) DescribeImageAttributeRequest(input *DescribeImageAttributeInput) (req *request.Request, output *DescribeImageAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayVpcAttachment +func (c *EC2) DeleteTransitGatewayVpcAttachmentRequest(input *DeleteTransitGatewayVpcAttachmentInput) (req *request.Request, output *DeleteTransitGatewayVpcAttachmentOutput) { op := &request.Operation{ - Name: opDescribeImageAttribute, + Name: opDeleteTransitGatewayVpcAttachment, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeImageAttributeInput{} + input = &DeleteTransitGatewayVpcAttachmentInput{} } - output = &DescribeImageAttributeOutput{} + output = &DeleteTransitGatewayVpcAttachmentOutput{} req = c.newRequest(op, input, output) return } -// DescribeImageAttribute API operation for Amazon Elastic Compute Cloud. +// DeleteTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. // -// Describes the specified attribute of the specified AMI. You can specify only -// one attribute at a time. +// Deletes the specified VPC attachment. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeImageAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageAttribute -func (c *EC2) DescribeImageAttribute(input *DescribeImageAttributeInput) (*DescribeImageAttributeOutput, error) { - req, out := c.DescribeImageAttributeRequest(input) - err := req.Send() - return out, err +// API operation DeleteTransitGatewayVpcAttachment for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayVpcAttachment +func (c *EC2) DeleteTransitGatewayVpcAttachment(input *DeleteTransitGatewayVpcAttachmentInput) (*DeleteTransitGatewayVpcAttachmentOutput, error) { + req, out := c.DeleteTransitGatewayVpcAttachmentRequest(input) + return out, req.Send() } -const opDescribeImages = "DescribeImages" +// DeleteTransitGatewayVpcAttachmentWithContext is the same as DeleteTransitGatewayVpcAttachment with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTransitGatewayVpcAttachment for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *DeleteTransitGatewayVpcAttachmentInput, opts ...request.Option) (*DeleteTransitGatewayVpcAttachmentOutput, error) { + req, out := c.DeleteTransitGatewayVpcAttachmentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeImagesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeImages operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteVolume = "DeleteVolume" + +// DeleteVolumeRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVolume operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeImages for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeImages method directly -// instead. +// See DeleteVolume for more information on using the DeleteVolume +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeImagesRequest method. -// req, resp := client.DescribeImagesRequest(params) +// +// // Example sending a request using the DeleteVolumeRequest method. +// req, resp := client.DeleteVolumeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImages -func (c *EC2) DescribeImagesRequest(input *DescribeImagesInput) (req *request.Request, output *DescribeImagesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolume +func (c *EC2) DeleteVolumeRequest(input *DeleteVolumeInput) (req *request.Request, output *DeleteVolumeOutput) { op := &request.Operation{ - Name: opDescribeImages, + Name: opDeleteVolume, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeImagesInput{} + input = &DeleteVolumeInput{} } - output = &DescribeImagesOutput{} + output = &DeleteVolumeOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeImages API operation for Amazon Elastic Compute Cloud. +// DeleteVolume API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of the images (AMIs, AKIs, and ARIs) available to you. -// Images available to you include public images, private images that you own, -// and private images owned by other AWS accounts but for which you have explicit -// launch permissions. +// Deletes the specified EBS volume. The volume must be in the available state +// (not attached to an instance). +// +// The volume can remain in the deleting state for several minutes. // -// Deregistered images are included in the returned results for an unspecified -// interval after deregistration. +// For more information, see Deleting an Amazon EBS Volume (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-volume.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeImages for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImages -func (c *EC2) DescribeImages(input *DescribeImagesInput) (*DescribeImagesOutput, error) { - req, out := c.DescribeImagesRequest(input) - err := req.Send() - return out, err +// API operation DeleteVolume for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolume +func (c *EC2) DeleteVolume(input *DeleteVolumeInput) (*DeleteVolumeOutput, error) { + req, out := c.DeleteVolumeRequest(input) + return out, req.Send() } -const opDescribeImportImageTasks = "DescribeImportImageTasks" +// DeleteVolumeWithContext is the same as DeleteVolume with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteVolume for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVolumeWithContext(ctx aws.Context, input *DeleteVolumeInput, opts ...request.Option) (*DeleteVolumeOutput, error) { + req, out := c.DeleteVolumeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeImportImageTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeImportImageTasks operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteVpc = "DeleteVpc" + +// DeleteVpcRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVpc operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeImportImageTasks for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeImportImageTasks method directly -// instead. +// See DeleteVpc for more information on using the DeleteVpc +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeImportImageTasksRequest method. -// req, resp := client.DescribeImportImageTasksRequest(params) +// +// // Example sending a request using the DeleteVpcRequest method. +// req, resp := client.DeleteVpcRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasks -func (c *EC2) DescribeImportImageTasksRequest(input *DescribeImportImageTasksInput) (req *request.Request, output *DescribeImportImageTasksOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpc +func (c *EC2) DeleteVpcRequest(input *DeleteVpcInput) (req *request.Request, output *DeleteVpcOutput) { op := &request.Operation{ - Name: opDescribeImportImageTasks, + Name: opDeleteVpc, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeImportImageTasksInput{} + input = &DeleteVpcInput{} } - output = &DescribeImportImageTasksOutput{} + output = &DeleteVpcOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeImportImageTasks API operation for Amazon Elastic Compute Cloud. +// DeleteVpc API operation for Amazon Elastic Compute Cloud. // -// Displays details about an import virtual machine or import snapshot tasks -// that are already created. +// Deletes the specified VPC. You must detach or delete all gateways and resources +// that are associated with the VPC before you can delete it. For example, you +// must terminate all instances running in the VPC, delete all security groups +// associated with the VPC (except the default one), delete all route tables +// associated with the VPC (except the default one), and so on. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeImportImageTasks for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasks -func (c *EC2) DescribeImportImageTasks(input *DescribeImportImageTasksInput) (*DescribeImportImageTasksOutput, error) { - req, out := c.DescribeImportImageTasksRequest(input) - err := req.Send() - return out, err +// API operation DeleteVpc for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpc +func (c *EC2) DeleteVpc(input *DeleteVpcInput) (*DeleteVpcOutput, error) { + req, out := c.DeleteVpcRequest(input) + return out, req.Send() } -const opDescribeImportSnapshotTasks = "DescribeImportSnapshotTasks" +// DeleteVpcWithContext is the same as DeleteVpc with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteVpc for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVpcWithContext(ctx aws.Context, input *DeleteVpcInput, opts ...request.Option) (*DeleteVpcOutput, error) { + req, out := c.DeleteVpcRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeImportSnapshotTasksRequest generates a "aws/request.Request" representing the -// client's request for the DescribeImportSnapshotTasks operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteVpcEndpointConnectionNotifications = "DeleteVpcEndpointConnectionNotifications" + +// DeleteVpcEndpointConnectionNotificationsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVpcEndpointConnectionNotifications operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeImportSnapshotTasks for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeImportSnapshotTasks method directly -// instead. +// See DeleteVpcEndpointConnectionNotifications for more information on using the DeleteVpcEndpointConnectionNotifications +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeImportSnapshotTasksRequest method. -// req, resp := client.DescribeImportSnapshotTasksRequest(params) +// +// // Example sending a request using the DeleteVpcEndpointConnectionNotificationsRequest method. +// req, resp := client.DeleteVpcEndpointConnectionNotificationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasks -func (c *EC2) DescribeImportSnapshotTasksRequest(input *DescribeImportSnapshotTasksInput) (req *request.Request, output *DescribeImportSnapshotTasksOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointConnectionNotifications +func (c *EC2) DeleteVpcEndpointConnectionNotificationsRequest(input *DeleteVpcEndpointConnectionNotificationsInput) (req *request.Request, output *DeleteVpcEndpointConnectionNotificationsOutput) { op := &request.Operation{ - Name: opDescribeImportSnapshotTasks, + Name: opDeleteVpcEndpointConnectionNotifications, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeImportSnapshotTasksInput{} + input = &DeleteVpcEndpointConnectionNotificationsInput{} } - output = &DescribeImportSnapshotTasksOutput{} + output = &DeleteVpcEndpointConnectionNotificationsOutput{} req = c.newRequest(op, input, output) return } -// DescribeImportSnapshotTasks API operation for Amazon Elastic Compute Cloud. +// DeleteVpcEndpointConnectionNotifications API operation for Amazon Elastic Compute Cloud. // -// Describes your import snapshot tasks. +// Deletes one or more VPC endpoint connection notifications. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeImportSnapshotTasks for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasks -func (c *EC2) DescribeImportSnapshotTasks(input *DescribeImportSnapshotTasksInput) (*DescribeImportSnapshotTasksOutput, error) { - req, out := c.DescribeImportSnapshotTasksRequest(input) - err := req.Send() - return out, err +// API operation DeleteVpcEndpointConnectionNotifications for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointConnectionNotifications +func (c *EC2) DeleteVpcEndpointConnectionNotifications(input *DeleteVpcEndpointConnectionNotificationsInput) (*DeleteVpcEndpointConnectionNotificationsOutput, error) { + req, out := c.DeleteVpcEndpointConnectionNotificationsRequest(input) + return out, req.Send() } -const opDescribeInstanceAttribute = "DescribeInstanceAttribute" +// DeleteVpcEndpointConnectionNotificationsWithContext is the same as DeleteVpcEndpointConnectionNotifications with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteVpcEndpointConnectionNotifications for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVpcEndpointConnectionNotificationsWithContext(ctx aws.Context, input *DeleteVpcEndpointConnectionNotificationsInput, opts ...request.Option) (*DeleteVpcEndpointConnectionNotificationsOutput, error) { + req, out := c.DeleteVpcEndpointConnectionNotificationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeInstanceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstanceAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteVpcEndpointServiceConfigurations = "DeleteVpcEndpointServiceConfigurations" + +// DeleteVpcEndpointServiceConfigurationsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVpcEndpointServiceConfigurations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeInstanceAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeInstanceAttribute method directly -// instead. +// See DeleteVpcEndpointServiceConfigurations for more information on using the DeleteVpcEndpointServiceConfigurations +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeInstanceAttributeRequest method. -// req, resp := client.DescribeInstanceAttributeRequest(params) +// +// // Example sending a request using the DeleteVpcEndpointServiceConfigurationsRequest method. +// req, resp := client.DeleteVpcEndpointServiceConfigurationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceAttribute -func (c *EC2) DescribeInstanceAttributeRequest(input *DescribeInstanceAttributeInput) (req *request.Request, output *DescribeInstanceAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointServiceConfigurations +func (c *EC2) DeleteVpcEndpointServiceConfigurationsRequest(input *DeleteVpcEndpointServiceConfigurationsInput) (req *request.Request, output *DeleteVpcEndpointServiceConfigurationsOutput) { op := &request.Operation{ - Name: opDescribeInstanceAttribute, + Name: opDeleteVpcEndpointServiceConfigurations, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeInstanceAttributeInput{} + input = &DeleteVpcEndpointServiceConfigurationsInput{} } - output = &DescribeInstanceAttributeOutput{} + output = &DeleteVpcEndpointServiceConfigurationsOutput{} req = c.newRequest(op, input, output) return } -// DescribeInstanceAttribute API operation for Amazon Elastic Compute Cloud. +// DeleteVpcEndpointServiceConfigurations API operation for Amazon Elastic Compute Cloud. // -// Describes the specified attribute of the specified instance. You can specify -// only one attribute at a time. Valid attribute values are: instanceType | -// kernel | ramdisk | userData | disableApiTermination | instanceInitiatedShutdownBehavior -// | rootDeviceName | blockDeviceMapping | productCodes | sourceDestCheck | -// groupSet | ebsOptimized | sriovNetSupport +// Deletes one or more VPC endpoint service configurations in your account. +// Before you delete the endpoint service configuration, you must reject any +// Available or PendingAcceptance interface endpoint connections that are attached +// to the service. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstanceAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceAttribute -func (c *EC2) DescribeInstanceAttribute(input *DescribeInstanceAttributeInput) (*DescribeInstanceAttributeOutput, error) { - req, out := c.DescribeInstanceAttributeRequest(input) - err := req.Send() - return out, err +// API operation DeleteVpcEndpointServiceConfigurations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointServiceConfigurations +func (c *EC2) DeleteVpcEndpointServiceConfigurations(input *DeleteVpcEndpointServiceConfigurationsInput) (*DeleteVpcEndpointServiceConfigurationsOutput, error) { + req, out := c.DeleteVpcEndpointServiceConfigurationsRequest(input) + return out, req.Send() } -const opDescribeInstanceStatus = "DescribeInstanceStatus" +// DeleteVpcEndpointServiceConfigurationsWithContext is the same as DeleteVpcEndpointServiceConfigurations with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteVpcEndpointServiceConfigurations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVpcEndpointServiceConfigurationsWithContext(ctx aws.Context, input *DeleteVpcEndpointServiceConfigurationsInput, opts ...request.Option) (*DeleteVpcEndpointServiceConfigurationsOutput, error) { + req, out := c.DeleteVpcEndpointServiceConfigurationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeInstanceStatusRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstanceStatus operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteVpcEndpoints = "DeleteVpcEndpoints" + +// DeleteVpcEndpointsRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVpcEndpoints operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeInstanceStatus for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeInstanceStatus method directly -// instead. +// See DeleteVpcEndpoints for more information on using the DeleteVpcEndpoints +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeInstanceStatusRequest method. -// req, resp := client.DescribeInstanceStatusRequest(params) +// +// // Example sending a request using the DeleteVpcEndpointsRequest method. +// req, resp := client.DeleteVpcEndpointsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatus -func (c *EC2) DescribeInstanceStatusRequest(input *DescribeInstanceStatusInput) (req *request.Request, output *DescribeInstanceStatusOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpoints +func (c *EC2) DeleteVpcEndpointsRequest(input *DeleteVpcEndpointsInput) (req *request.Request, output *DeleteVpcEndpointsOutput) { op := &request.Operation{ - Name: opDescribeInstanceStatus, + Name: opDeleteVpcEndpoints, HTTPMethod: "POST", HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, } if input == nil { - input = &DescribeInstanceStatusInput{} + input = &DeleteVpcEndpointsInput{} } - output = &DescribeInstanceStatusOutput{} + output = &DeleteVpcEndpointsOutput{} req = c.newRequest(op, input, output) return } -// DescribeInstanceStatus API operation for Amazon Elastic Compute Cloud. -// -// Describes the status of one or more instances. By default, only running instances -// are described, unless specified otherwise. -// -// Instance status includes the following components: -// -// * Status checks - Amazon EC2 performs status checks on running EC2 instances -// to identify hardware and software issues. For more information, see Status -// Checks for Your Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html) -// and Troubleshooting Instances with Failed Status Checks (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// * Scheduled events - Amazon EC2 can schedule events (such as reboot, stop, -// or terminate) for your instances related to hardware issues, software -// updates, or system maintenance. For more information, see Scheduled Events -// for Your Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html) -// in the Amazon Elastic Compute Cloud User Guide. +// DeleteVpcEndpoints API operation for Amazon Elastic Compute Cloud. // -// * Instance state - You can manage your instances from the moment you launch -// them through their termination. For more information, see Instance Lifecycle -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Deletes one or more specified VPC endpoints. Deleting a gateway endpoint +// also deletes the endpoint routes in the route tables that were associated +// with the endpoint. Deleting an interface endpoint deletes the endpoint network +// interfaces. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstanceStatus for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatus -func (c *EC2) DescribeInstanceStatus(input *DescribeInstanceStatusInput) (*DescribeInstanceStatusOutput, error) { - req, out := c.DescribeInstanceStatusRequest(input) - err := req.Send() - return out, err +// API operation DeleteVpcEndpoints for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpoints +func (c *EC2) DeleteVpcEndpoints(input *DeleteVpcEndpointsInput) (*DeleteVpcEndpointsOutput, error) { + req, out := c.DeleteVpcEndpointsRequest(input) + return out, req.Send() } -// DescribeInstanceStatusPages iterates over the pages of a DescribeInstanceStatus operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeInstanceStatus method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. +// DeleteVpcEndpointsWithContext is the same as DeleteVpcEndpoints with the addition of +// the ability to pass a context and additional request options. // -// // Example iterating over at most 3 pages of a DescribeInstanceStatus operation. -// pageNum := 0 -// err := client.DescribeInstanceStatusPages(params, -// func(page *DescribeInstanceStatusOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) +// See DeleteVpcEndpoints for details on how to use this API operation. // -func (c *EC2) DescribeInstanceStatusPages(input *DescribeInstanceStatusInput, fn func(p *DescribeInstanceStatusOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeInstanceStatusRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeInstanceStatusOutput), lastPage) - }) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVpcEndpointsWithContext(ctx aws.Context, input *DeleteVpcEndpointsInput, opts ...request.Option) (*DeleteVpcEndpointsOutput, error) { + req, out := c.DeleteVpcEndpointsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opDescribeInstances = "DescribeInstances" +const opDeleteVpcPeeringConnection = "DeleteVpcPeeringConnection" -// DescribeInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DeleteVpcPeeringConnectionRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVpcPeeringConnection operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeInstances method directly -// instead. +// See DeleteVpcPeeringConnection for more information on using the DeleteVpcPeeringConnection +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeInstancesRequest method. -// req, resp := client.DescribeInstancesRequest(params) +// +// // Example sending a request using the DeleteVpcPeeringConnectionRequest method. +// req, resp := client.DeleteVpcPeeringConnectionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstances -func (c *EC2) DescribeInstancesRequest(input *DescribeInstancesInput) (req *request.Request, output *DescribeInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnection +func (c *EC2) DeleteVpcPeeringConnectionRequest(input *DeleteVpcPeeringConnectionInput) (req *request.Request, output *DeleteVpcPeeringConnectionOutput) { op := &request.Operation{ - Name: opDescribeInstances, + Name: opDeleteVpcPeeringConnection, HTTPMethod: "POST", HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, } if input == nil { - input = &DescribeInstancesInput{} + input = &DeleteVpcPeeringConnectionInput{} } - output = &DescribeInstancesOutput{} + output = &DeleteVpcPeeringConnectionOutput{} req = c.newRequest(op, input, output) return } -// DescribeInstances API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your instances. -// -// If you specify one or more instance IDs, Amazon EC2 returns information for -// those instances. If you do not specify instance IDs, Amazon EC2 returns information -// for all relevant instances. If you specify an instance ID that is not valid, -// an error is returned. If you specify an instance that you do not own, it -// is not included in the returned results. -// -// Recently terminated instances might appear in the returned results. This -// interval is usually less than one hour. +// DeleteVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. // -// If you describe instances in the rare case where an Availability Zone is -// experiencing a service disruption and you specify instance IDs that are in -// the affected zone, or do not specify any instance IDs at all, the call fails. -// If you describe instances and specify only instance IDs that are in an unaffected -// zone, the call works normally. +// Deletes a VPC peering connection. Either the owner of the requester VPC or +// the owner of the accepter VPC can delete the VPC peering connection if it's +// in the active state. The owner of the requester VPC can delete a VPC peering +// connection in the pending-acceptance state. You cannot delete a VPC peering +// connection that's in the failed state. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstances -func (c *EC2) DescribeInstances(input *DescribeInstancesInput) (*DescribeInstancesOutput, error) { - req, out := c.DescribeInstancesRequest(input) - err := req.Send() - return out, err +// API operation DeleteVpcPeeringConnection for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnection +func (c *EC2) DeleteVpcPeeringConnection(input *DeleteVpcPeeringConnectionInput) (*DeleteVpcPeeringConnectionOutput, error) { + req, out := c.DeleteVpcPeeringConnectionRequest(input) + return out, req.Send() } -// DescribeInstancesPages iterates over the pages of a DescribeInstances operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeInstances method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. +// DeleteVpcPeeringConnectionWithContext is the same as DeleteVpcPeeringConnection with the addition of +// the ability to pass a context and additional request options. // -// // Example iterating over at most 3 pages of a DescribeInstances operation. -// pageNum := 0 -// err := client.DescribeInstancesPages(params, -// func(page *DescribeInstancesOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) +// See DeleteVpcPeeringConnection for details on how to use this API operation. // -func (c *EC2) DescribeInstancesPages(input *DescribeInstancesInput, fn func(p *DescribeInstancesOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeInstancesRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeInstancesOutput), lastPage) - }) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVpcPeeringConnectionWithContext(ctx aws.Context, input *DeleteVpcPeeringConnectionInput, opts ...request.Option) (*DeleteVpcPeeringConnectionOutput, error) { + req, out := c.DeleteVpcPeeringConnectionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opDescribeInternetGateways = "DescribeInternetGateways" +const opDeleteVpnConnection = "DeleteVpnConnection" -// DescribeInternetGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeInternetGateways operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DeleteVpnConnectionRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVpnConnection operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeInternetGateways for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeInternetGateways method directly -// instead. +// See DeleteVpnConnection for more information on using the DeleteVpnConnection +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeInternetGatewaysRequest method. -// req, resp := client.DescribeInternetGatewaysRequest(params) +// +// // Example sending a request using the DeleteVpnConnectionRequest method. +// req, resp := client.DeleteVpnConnectionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGateways -func (c *EC2) DescribeInternetGatewaysRequest(input *DescribeInternetGatewaysInput) (req *request.Request, output *DescribeInternetGatewaysOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnection +func (c *EC2) DeleteVpnConnectionRequest(input *DeleteVpnConnectionInput) (req *request.Request, output *DeleteVpnConnectionOutput) { op := &request.Operation{ - Name: opDescribeInternetGateways, + Name: opDeleteVpnConnection, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeInternetGatewaysInput{} + input = &DeleteVpnConnectionInput{} } - output = &DescribeInternetGatewaysOutput{} + output = &DeleteVpnConnectionOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeInternetGateways API operation for Amazon Elastic Compute Cloud. +// DeleteVpnConnection API operation for Amazon Elastic Compute Cloud. +// +// Deletes the specified VPN connection. // -// Describes one or more of your Internet gateways. +// If you're deleting the VPC and its associated components, we recommend that +// you detach the virtual private gateway from the VPC and delete the VPC before +// deleting the VPN connection. If you believe that the tunnel credentials for +// your VPN connection have been compromised, you can delete the VPN connection +// and create a new one that has new keys, without needing to delete the VPC +// or virtual private gateway. If you create a new VPN connection, you must +// reconfigure the customer gateway using the new configuration information +// returned with the new VPN connection ID. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeInternetGateways for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGateways -func (c *EC2) DescribeInternetGateways(input *DescribeInternetGatewaysInput) (*DescribeInternetGatewaysOutput, error) { - req, out := c.DescribeInternetGatewaysRequest(input) - err := req.Send() - return out, err +// API operation DeleteVpnConnection for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnection +func (c *EC2) DeleteVpnConnection(input *DeleteVpnConnectionInput) (*DeleteVpnConnectionOutput, error) { + req, out := c.DeleteVpnConnectionRequest(input) + return out, req.Send() } -const opDescribeKeyPairs = "DescribeKeyPairs" +// DeleteVpnConnectionWithContext is the same as DeleteVpnConnection with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteVpnConnection for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVpnConnectionWithContext(ctx aws.Context, input *DeleteVpnConnectionInput, opts ...request.Option) (*DeleteVpnConnectionOutput, error) { + req, out := c.DeleteVpnConnectionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeKeyPairsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeKeyPairs operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteVpnConnectionRoute = "DeleteVpnConnectionRoute" + +// DeleteVpnConnectionRouteRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVpnConnectionRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeKeyPairs for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeKeyPairs method directly -// instead. +// See DeleteVpnConnectionRoute for more information on using the DeleteVpnConnectionRoute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeKeyPairsRequest method. -// req, resp := client.DescribeKeyPairsRequest(params) +// +// // Example sending a request using the DeleteVpnConnectionRouteRequest method. +// req, resp := client.DeleteVpnConnectionRouteRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairs -func (c *EC2) DescribeKeyPairsRequest(input *DescribeKeyPairsInput) (req *request.Request, output *DescribeKeyPairsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRoute +func (c *EC2) DeleteVpnConnectionRouteRequest(input *DeleteVpnConnectionRouteInput) (req *request.Request, output *DeleteVpnConnectionRouteOutput) { op := &request.Operation{ - Name: opDescribeKeyPairs, + Name: opDeleteVpnConnectionRoute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeKeyPairsInput{} + input = &DeleteVpnConnectionRouteInput{} } - output = &DescribeKeyPairsOutput{} + output = &DeleteVpnConnectionRouteOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeKeyPairs API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your key pairs. +// DeleteVpnConnectionRoute API operation for Amazon Elastic Compute Cloud. // -// For more information about key pairs, see Key Pairs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Deletes the specified static route associated with a VPN connection between +// an existing virtual private gateway and a VPN customer gateway. The static +// route allows traffic to be routed from the virtual private gateway to the +// VPN customer gateway. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeKeyPairs for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairs -func (c *EC2) DescribeKeyPairs(input *DescribeKeyPairsInput) (*DescribeKeyPairsOutput, error) { - req, out := c.DescribeKeyPairsRequest(input) - err := req.Send() - return out, err +// API operation DeleteVpnConnectionRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRoute +func (c *EC2) DeleteVpnConnectionRoute(input *DeleteVpnConnectionRouteInput) (*DeleteVpnConnectionRouteOutput, error) { + req, out := c.DeleteVpnConnectionRouteRequest(input) + return out, req.Send() } -const opDescribeMovingAddresses = "DescribeMovingAddresses" +// DeleteVpnConnectionRouteWithContext is the same as DeleteVpnConnectionRoute with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteVpnConnectionRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVpnConnectionRouteWithContext(ctx aws.Context, input *DeleteVpnConnectionRouteInput, opts ...request.Option) (*DeleteVpnConnectionRouteOutput, error) { + req, out := c.DeleteVpnConnectionRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeMovingAddressesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeMovingAddresses operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeleteVpnGateway = "DeleteVpnGateway" + +// DeleteVpnGatewayRequest generates a "aws/request.Request" representing the +// client's request for the DeleteVpnGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeMovingAddresses for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeMovingAddresses method directly -// instead. +// See DeleteVpnGateway for more information on using the DeleteVpnGateway +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeMovingAddressesRequest method. -// req, resp := client.DescribeMovingAddressesRequest(params) +// +// // Example sending a request using the DeleteVpnGatewayRequest method. +// req, resp := client.DeleteVpnGatewayRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddresses -func (c *EC2) DescribeMovingAddressesRequest(input *DescribeMovingAddressesInput) (req *request.Request, output *DescribeMovingAddressesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGateway +func (c *EC2) DeleteVpnGatewayRequest(input *DeleteVpnGatewayInput) (req *request.Request, output *DeleteVpnGatewayOutput) { op := &request.Operation{ - Name: opDescribeMovingAddresses, + Name: opDeleteVpnGateway, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeMovingAddressesInput{} + input = &DeleteVpnGatewayInput{} } - output = &DescribeMovingAddressesOutput{} + output = &DeleteVpnGatewayOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeMovingAddresses API operation for Amazon Elastic Compute Cloud. +// DeleteVpnGateway API operation for Amazon Elastic Compute Cloud. // -// Describes your Elastic IP addresses that are being moved to the EC2-VPC platform, -// or that are being restored to the EC2-Classic platform. This request does -// not return information about any other Elastic IP addresses in your account. +// Deletes the specified virtual private gateway. We recommend that before you +// delete a virtual private gateway, you detach it from the VPC and delete the +// VPN connection. Note that you don't need to delete the virtual private gateway +// if you plan to delete and recreate the VPN connection between your VPC and +// your network. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeMovingAddresses for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddresses -func (c *EC2) DescribeMovingAddresses(input *DescribeMovingAddressesInput) (*DescribeMovingAddressesOutput, error) { - req, out := c.DescribeMovingAddressesRequest(input) - err := req.Send() - return out, err +// API operation DeleteVpnGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGateway +func (c *EC2) DeleteVpnGateway(input *DeleteVpnGatewayInput) (*DeleteVpnGatewayOutput, error) { + req, out := c.DeleteVpnGatewayRequest(input) + return out, req.Send() } -const opDescribeNatGateways = "DescribeNatGateways" +// DeleteVpnGatewayWithContext is the same as DeleteVpnGateway with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteVpnGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeleteVpnGatewayWithContext(ctx aws.Context, input *DeleteVpnGatewayInput, opts ...request.Option) (*DeleteVpnGatewayOutput, error) { + req, out := c.DeleteVpnGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeNatGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNatGateways operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDeprovisionByoipCidr = "DeprovisionByoipCidr" + +// DeprovisionByoipCidrRequest generates a "aws/request.Request" representing the +// client's request for the DeprovisionByoipCidr operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeNatGateways for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeNatGateways method directly -// instead. +// See DeprovisionByoipCidr for more information on using the DeprovisionByoipCidr +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeNatGatewaysRequest method. -// req, resp := client.DescribeNatGatewaysRequest(params) +// +// // Example sending a request using the DeprovisionByoipCidrRequest method. +// req, resp := client.DeprovisionByoipCidrRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGateways -func (c *EC2) DescribeNatGatewaysRequest(input *DescribeNatGatewaysInput) (req *request.Request, output *DescribeNatGatewaysOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionByoipCidr +func (c *EC2) DeprovisionByoipCidrRequest(input *DeprovisionByoipCidrInput) (req *request.Request, output *DeprovisionByoipCidrOutput) { op := &request.Operation{ - Name: opDescribeNatGateways, + Name: opDeprovisionByoipCidr, HTTPMethod: "POST", HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, } if input == nil { - input = &DescribeNatGatewaysInput{} + input = &DeprovisionByoipCidrInput{} } - output = &DescribeNatGatewaysOutput{} + output = &DeprovisionByoipCidrOutput{} req = c.newRequest(op, input, output) return } -// DescribeNatGateways API operation for Amazon Elastic Compute Cloud. +// DeprovisionByoipCidr API operation for Amazon Elastic Compute Cloud. +// +// Releases the specified address range that you provisioned for use with your +// AWS resources through bring your own IP addresses (BYOIP) and deletes the +// corresponding address pool. // -// Describes one or more of the your NAT gateways. +// Before you can release an address range, you must stop advertising it using +// WithdrawByoipCidr and you must not have any IP addresses allocated from its +// address range. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNatGateways for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGateways -func (c *EC2) DescribeNatGateways(input *DescribeNatGatewaysInput) (*DescribeNatGatewaysOutput, error) { - req, out := c.DescribeNatGatewaysRequest(input) - err := req.Send() - return out, err +// API operation DeprovisionByoipCidr for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionByoipCidr +func (c *EC2) DeprovisionByoipCidr(input *DeprovisionByoipCidrInput) (*DeprovisionByoipCidrOutput, error) { + req, out := c.DeprovisionByoipCidrRequest(input) + return out, req.Send() } -// DescribeNatGatewaysPages iterates over the pages of a DescribeNatGateways operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. +// DeprovisionByoipCidrWithContext is the same as DeprovisionByoipCidr with the addition of +// the ability to pass a context and additional request options. // -// See DescribeNatGateways method for more information on how to use this operation. -// -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeNatGateways operation. -// pageNum := 0 -// err := client.DescribeNatGatewaysPages(params, -// func(page *DescribeNatGatewaysOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) +// See DeprovisionByoipCidr for details on how to use this API operation. // -func (c *EC2) DescribeNatGatewaysPages(input *DescribeNatGatewaysInput, fn func(p *DescribeNatGatewaysOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeNatGatewaysRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeNatGatewaysOutput), lastPage) - }) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeprovisionByoipCidrWithContext(ctx aws.Context, input *DeprovisionByoipCidrInput, opts ...request.Option) (*DeprovisionByoipCidrOutput, error) { + req, out := c.DeprovisionByoipCidrRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opDescribeNetworkAcls = "DescribeNetworkAcls" +const opDeregisterImage = "DeregisterImage" -// DescribeNetworkAclsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNetworkAcls operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DeregisterImageRequest generates a "aws/request.Request" representing the +// client's request for the DeregisterImage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeNetworkAcls for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeNetworkAcls method directly -// instead. +// See DeregisterImage for more information on using the DeregisterImage +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeNetworkAclsRequest method. -// req, resp := client.DescribeNetworkAclsRequest(params) +// +// // Example sending a request using the DeregisterImageRequest method. +// req, resp := client.DeregisterImageRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAcls -func (c *EC2) DescribeNetworkAclsRequest(input *DescribeNetworkAclsInput) (req *request.Request, output *DescribeNetworkAclsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImage +func (c *EC2) DeregisterImageRequest(input *DeregisterImageInput) (req *request.Request, output *DeregisterImageOutput) { op := &request.Operation{ - Name: opDescribeNetworkAcls, + Name: opDeregisterImage, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeNetworkAclsInput{} + input = &DeregisterImageInput{} } - output = &DescribeNetworkAclsOutput{} + output = &DeregisterImageOutput{} req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) return } -// DescribeNetworkAcls API operation for Amazon Elastic Compute Cloud. +// DeregisterImage API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your network ACLs. +// Deregisters the specified AMI. After you deregister an AMI, it can't be used +// to launch new instances; however, it doesn't affect any instances that you've +// already launched from the AMI. You'll continue to incur usage costs for those +// instances until you terminate them. // -// For more information about network ACLs, see Network ACLs (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html) -// in the Amazon Virtual Private Cloud User Guide. +// When you deregister an Amazon EBS-backed AMI, it doesn't affect the snapshot +// that was created for the root volume of the instance during the AMI creation +// process. When you deregister an instance store-backed AMI, it doesn't affect +// the files that you uploaded to Amazon S3 when you created the AMI. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNetworkAcls for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAcls -func (c *EC2) DescribeNetworkAcls(input *DescribeNetworkAclsInput) (*DescribeNetworkAclsOutput, error) { - req, out := c.DescribeNetworkAclsRequest(input) - err := req.Send() - return out, err +// API operation DeregisterImage for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImage +func (c *EC2) DeregisterImage(input *DeregisterImageInput) (*DeregisterImageOutput, error) { + req, out := c.DeregisterImageRequest(input) + return out, req.Send() } -const opDescribeNetworkInterfaceAttribute = "DescribeNetworkInterfaceAttribute" +// DeregisterImageWithContext is the same as DeregisterImage with the addition of +// the ability to pass a context and additional request options. +// +// See DeregisterImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DeregisterImageWithContext(ctx aws.Context, input *DeregisterImageInput, opts ...request.Option) (*DeregisterImageOutput, error) { + req, out := c.DeregisterImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNetworkInterfaceAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeAccountAttributes = "DescribeAccountAttributes" + +// DescribeAccountAttributesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeAccountAttributes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeNetworkInterfaceAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeNetworkInterfaceAttribute method directly -// instead. +// See DescribeAccountAttributes for more information on using the DescribeAccountAttributes +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeNetworkInterfaceAttributeRequest method. -// req, resp := client.DescribeNetworkInterfaceAttributeRequest(params) +// +// // Example sending a request using the DescribeAccountAttributesRequest method. +// req, resp := client.DescribeAccountAttributesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttribute -func (c *EC2) DescribeNetworkInterfaceAttributeRequest(input *DescribeNetworkInterfaceAttributeInput) (req *request.Request, output *DescribeNetworkInterfaceAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributes +func (c *EC2) DescribeAccountAttributesRequest(input *DescribeAccountAttributesInput) (req *request.Request, output *DescribeAccountAttributesOutput) { op := &request.Operation{ - Name: opDescribeNetworkInterfaceAttribute, + Name: opDescribeAccountAttributes, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeNetworkInterfaceAttributeInput{} + input = &DescribeAccountAttributesInput{} } - output = &DescribeNetworkInterfaceAttributeOutput{} + output = &DescribeAccountAttributesOutput{} req = c.newRequest(op, input, output) return } -// DescribeNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. +// DescribeAccountAttributes API operation for Amazon Elastic Compute Cloud. // -// Describes a network interface attribute. You can specify only one attribute -// at a time. +// Describes attributes of your AWS account. The following are the supported +// account attributes: +// +// * supported-platforms: Indicates whether your account can launch instances +// into EC2-Classic and EC2-VPC, or only into EC2-VPC. +// +// * default-vpc: The ID of the default VPC for your account, or none. +// +// * max-instances: The maximum number of On-Demand Instances that you can +// run. +// +// * vpc-max-security-groups-per-interface: The maximum number of security +// groups that you can assign to a network interface. +// +// * max-elastic-ips: The maximum number of Elastic IP addresses that you +// can allocate for use with EC2-Classic. +// +// * vpc-max-elastic-ips: The maximum number of Elastic IP addresses that +// you can allocate for use with EC2-VPC. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNetworkInterfaceAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttribute -func (c *EC2) DescribeNetworkInterfaceAttribute(input *DescribeNetworkInterfaceAttributeInput) (*DescribeNetworkInterfaceAttributeOutput, error) { - req, out := c.DescribeNetworkInterfaceAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeAccountAttributes for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributes +func (c *EC2) DescribeAccountAttributes(input *DescribeAccountAttributesInput) (*DescribeAccountAttributesOutput, error) { + req, out := c.DescribeAccountAttributesRequest(input) + return out, req.Send() } -const opDescribeNetworkInterfaces = "DescribeNetworkInterfaces" +// DescribeAccountAttributesWithContext is the same as DescribeAccountAttributes with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeAccountAttributes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeAccountAttributesWithContext(ctx aws.Context, input *DescribeAccountAttributesInput, opts ...request.Option) (*DescribeAccountAttributesOutput, error) { + req, out := c.DescribeAccountAttributesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeNetworkInterfacesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeNetworkInterfaces operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeAddresses = "DescribeAddresses" + +// DescribeAddressesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeAddresses operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeNetworkInterfaces for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeNetworkInterfaces method directly -// instead. +// See DescribeAddresses for more information on using the DescribeAddresses +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeNetworkInterfacesRequest method. -// req, resp := client.DescribeNetworkInterfacesRequest(params) +// +// // Example sending a request using the DescribeAddressesRequest method. +// req, resp := client.DescribeAddressesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaces -func (c *EC2) DescribeNetworkInterfacesRequest(input *DescribeNetworkInterfacesInput) (req *request.Request, output *DescribeNetworkInterfacesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddresses +func (c *EC2) DescribeAddressesRequest(input *DescribeAddressesInput) (req *request.Request, output *DescribeAddressesOutput) { op := &request.Operation{ - Name: opDescribeNetworkInterfaces, + Name: opDescribeAddresses, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeNetworkInterfacesInput{} + input = &DescribeAddressesInput{} } - output = &DescribeNetworkInterfacesOutput{} + output = &DescribeAddressesOutput{} req = c.newRequest(op, input, output) return } -// DescribeNetworkInterfaces API operation for Amazon Elastic Compute Cloud. +// DescribeAddresses API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your network interfaces. +// Describes the specified Elastic IP addresses or all of your Elastic IP addresses. +// +// An Elastic IP address is for use in either the EC2-Classic platform or in +// a VPC. For more information, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeNetworkInterfaces for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaces -func (c *EC2) DescribeNetworkInterfaces(input *DescribeNetworkInterfacesInput) (*DescribeNetworkInterfacesOutput, error) { - req, out := c.DescribeNetworkInterfacesRequest(input) - err := req.Send() - return out, err +// API operation DescribeAddresses for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddresses +func (c *EC2) DescribeAddresses(input *DescribeAddressesInput) (*DescribeAddressesOutput, error) { + req, out := c.DescribeAddressesRequest(input) + return out, req.Send() } -const opDescribePlacementGroups = "DescribePlacementGroups" +// DescribeAddressesWithContext is the same as DescribeAddresses with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeAddresses for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeAddressesWithContext(ctx aws.Context, input *DescribeAddressesInput, opts ...request.Option) (*DescribeAddressesOutput, error) { + req, out := c.DescribeAddressesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribePlacementGroupsRequest generates a "aws/request.Request" representing the -// client's request for the DescribePlacementGroups operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeAggregateIdFormat = "DescribeAggregateIdFormat" + +// DescribeAggregateIdFormatRequest generates a "aws/request.Request" representing the +// client's request for the DescribeAggregateIdFormat operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribePlacementGroups for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribePlacementGroups method directly -// instead. +// See DescribeAggregateIdFormat for more information on using the DescribeAggregateIdFormat +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribePlacementGroupsRequest method. -// req, resp := client.DescribePlacementGroupsRequest(params) +// +// // Example sending a request using the DescribeAggregateIdFormatRequest method. +// req, resp := client.DescribeAggregateIdFormatRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroups -func (c *EC2) DescribePlacementGroupsRequest(input *DescribePlacementGroupsInput) (req *request.Request, output *DescribePlacementGroupsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAggregateIdFormat +func (c *EC2) DescribeAggregateIdFormatRequest(input *DescribeAggregateIdFormatInput) (req *request.Request, output *DescribeAggregateIdFormatOutput) { op := &request.Operation{ - Name: opDescribePlacementGroups, + Name: opDescribeAggregateIdFormat, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribePlacementGroupsInput{} + input = &DescribeAggregateIdFormatInput{} } - output = &DescribePlacementGroupsOutput{} + output = &DescribeAggregateIdFormatOutput{} req = c.newRequest(op, input, output) return } -// DescribePlacementGroups API operation for Amazon Elastic Compute Cloud. +// DescribeAggregateIdFormat API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your placement groups. For more information about -// placement groups and cluster instances, see Cluster Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes the longer ID format settings for all resource types in a specific +// Region. This request is useful for performing a quick audit to determine +// whether a specific Region is fully opted in for longer IDs (17-character +// IDs). +// +// This request only returns information about resource types that support longer +// IDs. +// +// The following resource types support longer IDs: bundle | conversion-task +// | customer-gateway | dhcp-options | elastic-ip-allocation | elastic-ip-association +// | export-task | flow-log | image | import-task | instance | internet-gateway +// | network-acl | network-acl-association | network-interface | network-interface-attachment +// | prefix-list | reservation | route-table | route-table-association | security-group +// | snapshot | subnet | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association +// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribePlacementGroups for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroups -func (c *EC2) DescribePlacementGroups(input *DescribePlacementGroupsInput) (*DescribePlacementGroupsOutput, error) { - req, out := c.DescribePlacementGroupsRequest(input) - err := req.Send() - return out, err +// API operation DescribeAggregateIdFormat for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAggregateIdFormat +func (c *EC2) DescribeAggregateIdFormat(input *DescribeAggregateIdFormatInput) (*DescribeAggregateIdFormatOutput, error) { + req, out := c.DescribeAggregateIdFormatRequest(input) + return out, req.Send() } -const opDescribePrefixLists = "DescribePrefixLists" +// DescribeAggregateIdFormatWithContext is the same as DescribeAggregateIdFormat with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeAggregateIdFormat for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeAggregateIdFormatWithContext(ctx aws.Context, input *DescribeAggregateIdFormatInput, opts ...request.Option) (*DescribeAggregateIdFormatOutput, error) { + req, out := c.DescribeAggregateIdFormatRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribePrefixListsRequest generates a "aws/request.Request" representing the -// client's request for the DescribePrefixLists operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeAvailabilityZones = "DescribeAvailabilityZones" + +// DescribeAvailabilityZonesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeAvailabilityZones operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribePrefixLists for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribePrefixLists method directly -// instead. +// See DescribeAvailabilityZones for more information on using the DescribeAvailabilityZones +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribePrefixListsRequest method. -// req, resp := client.DescribePrefixListsRequest(params) +// +// // Example sending a request using the DescribeAvailabilityZonesRequest method. +// req, resp := client.DescribeAvailabilityZonesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixLists -func (c *EC2) DescribePrefixListsRequest(input *DescribePrefixListsInput) (req *request.Request, output *DescribePrefixListsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZones +func (c *EC2) DescribeAvailabilityZonesRequest(input *DescribeAvailabilityZonesInput) (req *request.Request, output *DescribeAvailabilityZonesOutput) { op := &request.Operation{ - Name: opDescribePrefixLists, + Name: opDescribeAvailabilityZones, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribePrefixListsInput{} + input = &DescribeAvailabilityZonesInput{} } - output = &DescribePrefixListsOutput{} + output = &DescribeAvailabilityZonesOutput{} req = c.newRequest(op, input, output) return } -// DescribePrefixLists API operation for Amazon Elastic Compute Cloud. +// DescribeAvailabilityZones API operation for Amazon Elastic Compute Cloud. // -// Describes available AWS services in a prefix list format, which includes -// the prefix list name and prefix list ID of the service and the IP address -// range for the service. A prefix list ID is required for creating an outbound -// security group rule that allows traffic from a VPC to access an AWS service -// through a VPC endpoint. +// Describes the Availability Zones that are available to you. The results include +// zones only for the Region you're currently using. If there is an event impacting +// an Availability Zone, you can use this request to view the state and any +// provided message for that Availability Zone. +// +// For more information, see Regions and Availability Zones (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribePrefixLists for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixLists -func (c *EC2) DescribePrefixLists(input *DescribePrefixListsInput) (*DescribePrefixListsOutput, error) { - req, out := c.DescribePrefixListsRequest(input) - err := req.Send() - return out, err +// API operation DescribeAvailabilityZones for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZones +func (c *EC2) DescribeAvailabilityZones(input *DescribeAvailabilityZonesInput) (*DescribeAvailabilityZonesOutput, error) { + req, out := c.DescribeAvailabilityZonesRequest(input) + return out, req.Send() } -const opDescribeRegions = "DescribeRegions" +// DescribeAvailabilityZonesWithContext is the same as DescribeAvailabilityZones with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeAvailabilityZones for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeAvailabilityZonesWithContext(ctx aws.Context, input *DescribeAvailabilityZonesInput, opts ...request.Option) (*DescribeAvailabilityZonesOutput, error) { + req, out := c.DescribeAvailabilityZonesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeRegionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeRegions operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeBundleTasks = "DescribeBundleTasks" + +// DescribeBundleTasksRequest generates a "aws/request.Request" representing the +// client's request for the DescribeBundleTasks operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeRegions for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeRegions method directly -// instead. +// See DescribeBundleTasks for more information on using the DescribeBundleTasks +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeRegionsRequest method. -// req, resp := client.DescribeRegionsRequest(params) +// +// // Example sending a request using the DescribeBundleTasksRequest method. +// req, resp := client.DescribeBundleTasksRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegions -func (c *EC2) DescribeRegionsRequest(input *DescribeRegionsInput) (req *request.Request, output *DescribeRegionsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasks +func (c *EC2) DescribeBundleTasksRequest(input *DescribeBundleTasksInput) (req *request.Request, output *DescribeBundleTasksOutput) { op := &request.Operation{ - Name: opDescribeRegions, + Name: opDescribeBundleTasks, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeRegionsInput{} + input = &DescribeBundleTasksInput{} } - output = &DescribeRegionsOutput{} + output = &DescribeBundleTasksOutput{} req = c.newRequest(op, input, output) return } -// DescribeRegions API operation for Amazon Elastic Compute Cloud. +// DescribeBundleTasks API operation for Amazon Elastic Compute Cloud. // -// Describes one or more regions that are currently available to you. +// Describes the specified bundle tasks or all of your bundle tasks. // -// For a list of the regions supported by Amazon EC2, see Regions and Endpoints -// (http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region). +// Completed bundle tasks are listed for only a limited time. If your bundle +// task is no longer in the list, you can still register an AMI from it. Just +// use RegisterImage with the Amazon S3 bucket name and image manifest name +// you provided to the bundle task. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeRegions for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegions -func (c *EC2) DescribeRegions(input *DescribeRegionsInput) (*DescribeRegionsOutput, error) { - req, out := c.DescribeRegionsRequest(input) - err := req.Send() - return out, err +// API operation DescribeBundleTasks for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasks +func (c *EC2) DescribeBundleTasks(input *DescribeBundleTasksInput) (*DescribeBundleTasksOutput, error) { + req, out := c.DescribeBundleTasksRequest(input) + return out, req.Send() } -const opDescribeReservedInstances = "DescribeReservedInstances" +// DescribeBundleTasksWithContext is the same as DescribeBundleTasks with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeBundleTasks for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeBundleTasksWithContext(ctx aws.Context, input *DescribeBundleTasksInput, opts ...request.Option) (*DescribeBundleTasksOutput, error) { + req, out := c.DescribeBundleTasksRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeReservedInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeReservedInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeByoipCidrs = "DescribeByoipCidrs" + +// DescribeByoipCidrsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeByoipCidrs operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeReservedInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeReservedInstances method directly -// instead. +// See DescribeByoipCidrs for more information on using the DescribeByoipCidrs +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeReservedInstancesRequest method. -// req, resp := client.DescribeReservedInstancesRequest(params) +// +// // Example sending a request using the DescribeByoipCidrsRequest method. +// req, resp := client.DescribeByoipCidrsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstances -func (c *EC2) DescribeReservedInstancesRequest(input *DescribeReservedInstancesInput) (req *request.Request, output *DescribeReservedInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeByoipCidrs +func (c *EC2) DescribeByoipCidrsRequest(input *DescribeByoipCidrsInput) (req *request.Request, output *DescribeByoipCidrsOutput) { op := &request.Operation{ - Name: opDescribeReservedInstances, + Name: opDescribeByoipCidrs, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeReservedInstancesInput{} + input = &DescribeByoipCidrsInput{} } - output = &DescribeReservedInstancesOutput{} + output = &DescribeByoipCidrsOutput{} req = c.newRequest(op, input, output) return } -// DescribeReservedInstances API operation for Amazon Elastic Compute Cloud. +// DescribeByoipCidrs API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of the Reserved Instances that you purchased. +// Describes the IP address ranges that were specified in calls to ProvisionByoipCidr. // -// For more information about Reserved Instances, see Reserved Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html) -// in the Amazon Elastic Compute Cloud User Guide. +// To describe the address pools that were created when you provisioned the +// address ranges, use DescribePublicIpv4Pools. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeReservedInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstances -func (c *EC2) DescribeReservedInstances(input *DescribeReservedInstancesInput) (*DescribeReservedInstancesOutput, error) { - req, out := c.DescribeReservedInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeByoipCidrs for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeByoipCidrs +func (c *EC2) DescribeByoipCidrs(input *DescribeByoipCidrsInput) (*DescribeByoipCidrsOutput, error) { + req, out := c.DescribeByoipCidrsRequest(input) + return out, req.Send() } -const opDescribeReservedInstancesListings = "DescribeReservedInstancesListings" +// DescribeByoipCidrsWithContext is the same as DescribeByoipCidrs with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeByoipCidrs for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeByoipCidrsWithContext(ctx aws.Context, input *DescribeByoipCidrsInput, opts ...request.Option) (*DescribeByoipCidrsOutput, error) { + req, out := c.DescribeByoipCidrsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeReservedInstancesListingsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeReservedInstancesListings operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeByoipCidrsPages iterates over the pages of a DescribeByoipCidrs operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeByoipCidrs method for more information on how to use this operation. // -// See DescribeReservedInstancesListings for usage and error information. +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeReservedInstancesListings method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeByoipCidrs operation. +// pageNum := 0 +// err := client.DescribeByoipCidrsPages(params, +// func(page *ec2.DescribeByoipCidrsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeByoipCidrsPages(input *DescribeByoipCidrsInput, fn func(*DescribeByoipCidrsOutput, bool) bool) error { + return c.DescribeByoipCidrsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeByoipCidrsPagesWithContext same as DescribeByoipCidrsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the DescribeReservedInstancesListingsRequest method. -// req, resp := client.DescribeReservedInstancesListingsRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeByoipCidrsPagesWithContext(ctx aws.Context, input *DescribeByoipCidrsInput, fn func(*DescribeByoipCidrsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeByoipCidrsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeByoipCidrsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeByoipCidrsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeCapacityReservations = "DescribeCapacityReservations" + +// DescribeCapacityReservationsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeCapacityReservations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeCapacityReservations for more information on using the DescribeCapacityReservations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeCapacityReservationsRequest method. +// req, resp := client.DescribeCapacityReservationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListings -func (c *EC2) DescribeReservedInstancesListingsRequest(input *DescribeReservedInstancesListingsInput) (req *request.Request, output *DescribeReservedInstancesListingsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservations +func (c *EC2) DescribeCapacityReservationsRequest(input *DescribeCapacityReservationsInput) (req *request.Request, output *DescribeCapacityReservationsOutput) { op := &request.Operation{ - Name: opDescribeReservedInstancesListings, + Name: opDescribeCapacityReservations, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeReservedInstancesListingsInput{} + input = &DescribeCapacityReservationsInput{} } - output = &DescribeReservedInstancesListingsOutput{} + output = &DescribeCapacityReservationsOutput{} req = c.newRequest(op, input, output) return } -// DescribeReservedInstancesListings API operation for Amazon Elastic Compute Cloud. -// -// Describes your account's Reserved Instance listings in the Reserved Instance -// Marketplace. -// -// The Reserved Instance Marketplace matches sellers who want to resell Reserved -// Instance capacity that they no longer need with buyers who want to purchase -// additional capacity. Reserved Instances bought and sold through the Reserved -// Instance Marketplace work like any other Reserved Instances. -// -// As a seller, you choose to list some or all of your Reserved Instances, and -// you specify the upfront price to receive for them. Your Reserved Instances -// are then listed in the Reserved Instance Marketplace and are available for -// purchase. -// -// As a buyer, you specify the configuration of the Reserved Instance to purchase, -// and the Marketplace matches what you're searching for with what's available. -// The Marketplace first sells the lowest priced Reserved Instances to you, -// and continues to sell available Reserved Instance listings to you until your -// demand is met. You are charged based on the total price of all of the listings -// that you purchase. +// DescribeCapacityReservations API operation for Amazon Elastic Compute Cloud. // -// For more information, see Reserved Instance Marketplace (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes one or more of your Capacity Reservations. The results describe +// only the Capacity Reservations in the AWS Region that you're currently using. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeReservedInstancesListings for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListings -func (c *EC2) DescribeReservedInstancesListings(input *DescribeReservedInstancesListingsInput) (*DescribeReservedInstancesListingsOutput, error) { - req, out := c.DescribeReservedInstancesListingsRequest(input) - err := req.Send() - return out, err +// API operation DescribeCapacityReservations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservations +func (c *EC2) DescribeCapacityReservations(input *DescribeCapacityReservationsInput) (*DescribeCapacityReservationsOutput, error) { + req, out := c.DescribeCapacityReservationsRequest(input) + return out, req.Send() } -const opDescribeReservedInstancesModifications = "DescribeReservedInstancesModifications" +// DescribeCapacityReservationsWithContext is the same as DescribeCapacityReservations with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeCapacityReservations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeCapacityReservationsWithContext(ctx aws.Context, input *DescribeCapacityReservationsInput, opts ...request.Option) (*DescribeCapacityReservationsOutput, error) { + req, out := c.DescribeCapacityReservationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeReservedInstancesModificationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeReservedInstancesModifications operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeCapacityReservationsPages iterates over the pages of a DescribeCapacityReservations operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See DescribeReservedInstancesModifications for usage and error information. +// See DescribeCapacityReservations method for more information on how to use this operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeReservedInstancesModifications method directly -// instead. +// Note: This operation can generate multiple requests to a service. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// // Example iterating over at most 3 pages of a DescribeCapacityReservations operation. +// pageNum := 0 +// err := client.DescribeCapacityReservationsPages(params, +// func(page *ec2.DescribeCapacityReservationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// // Example sending a request using the DescribeReservedInstancesModificationsRequest method. -// req, resp := client.DescribeReservedInstancesModificationsRequest(params) +func (c *EC2) DescribeCapacityReservationsPages(input *DescribeCapacityReservationsInput, fn func(*DescribeCapacityReservationsOutput, bool) bool) error { + return c.DescribeCapacityReservationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeCapacityReservationsPagesWithContext same as DescribeCapacityReservationsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeCapacityReservationsPagesWithContext(ctx aws.Context, input *DescribeCapacityReservationsInput, fn func(*DescribeCapacityReservationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeCapacityReservationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeCapacityReservationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeCapacityReservationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeClassicLinkInstances = "DescribeClassicLinkInstances" + +// DescribeClassicLinkInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeClassicLinkInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeClassicLinkInstances for more information on using the DescribeClassicLinkInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeClassicLinkInstancesRequest method. +// req, resp := client.DescribeClassicLinkInstancesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModifications -func (c *EC2) DescribeReservedInstancesModificationsRequest(input *DescribeReservedInstancesModificationsInput) (req *request.Request, output *DescribeReservedInstancesModificationsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstances +func (c *EC2) DescribeClassicLinkInstancesRequest(input *DescribeClassicLinkInstancesInput) (req *request.Request, output *DescribeClassicLinkInstancesOutput) { op := &request.Operation{ - Name: opDescribeReservedInstancesModifications, + Name: opDescribeClassicLinkInstances, HTTPMethod: "POST", HTTPPath: "/", Paginator: &request.Paginator{ InputTokens: []string{"NextToken"}, OutputTokens: []string{"NextToken"}, - LimitToken: "", + LimitToken: "MaxResults", TruncationToken: "", }, } if input == nil { - input = &DescribeReservedInstancesModificationsInput{} + input = &DescribeClassicLinkInstancesInput{} } - output = &DescribeReservedInstancesModificationsOutput{} + output = &DescribeClassicLinkInstancesOutput{} req = c.newRequest(op, input, output) return } -// DescribeReservedInstancesModifications API operation for Amazon Elastic Compute Cloud. -// -// Describes the modifications made to your Reserved Instances. If no parameter -// is specified, information about all your Reserved Instances modification -// requests is returned. If a modification ID is specified, only information -// about the specific modification is returned. +// DescribeClassicLinkInstances API operation for Amazon Elastic Compute Cloud. // -// For more information, see Modifying Reserved Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes one or more of your linked EC2-Classic instances. This request +// only returns information about EC2-Classic instances linked to a VPC through +// ClassicLink. You cannot use this request to return information about other +// instances. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeReservedInstancesModifications for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModifications -func (c *EC2) DescribeReservedInstancesModifications(input *DescribeReservedInstancesModificationsInput) (*DescribeReservedInstancesModificationsOutput, error) { - req, out := c.DescribeReservedInstancesModificationsRequest(input) - err := req.Send() - return out, err +// API operation DescribeClassicLinkInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstances +func (c *EC2) DescribeClassicLinkInstances(input *DescribeClassicLinkInstancesInput) (*DescribeClassicLinkInstancesOutput, error) { + req, out := c.DescribeClassicLinkInstancesRequest(input) + return out, req.Send() } -// DescribeReservedInstancesModificationsPages iterates over the pages of a DescribeReservedInstancesModifications operation, +// DescribeClassicLinkInstancesWithContext is the same as DescribeClassicLinkInstances with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeClassicLinkInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClassicLinkInstancesWithContext(ctx aws.Context, input *DescribeClassicLinkInstancesInput, opts ...request.Option) (*DescribeClassicLinkInstancesOutput, error) { + req, out := c.DescribeClassicLinkInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeClassicLinkInstancesPages iterates over the pages of a DescribeClassicLinkInstances operation, // calling the "fn" function with the response data for each page. To stop // iterating, return false from the fn function. // -// See DescribeReservedInstancesModifications method for more information on how to use this operation. +// See DescribeClassicLinkInstances method for more information on how to use this operation. // // Note: This operation can generate multiple requests to a service. // -// // Example iterating over at most 3 pages of a DescribeReservedInstancesModifications operation. +// // Example iterating over at most 3 pages of a DescribeClassicLinkInstances operation. // pageNum := 0 -// err := client.DescribeReservedInstancesModificationsPages(params, -// func(page *DescribeReservedInstancesModificationsOutput, lastPage bool) bool { +// err := client.DescribeClassicLinkInstancesPages(params, +// func(page *ec2.DescribeClassicLinkInstancesOutput, lastPage bool) bool { // pageNum++ // fmt.Println(page) // return pageNum <= 3 // }) // -func (c *EC2) DescribeReservedInstancesModificationsPages(input *DescribeReservedInstancesModificationsInput, fn func(p *DescribeReservedInstancesModificationsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeReservedInstancesModificationsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeReservedInstancesModificationsOutput), lastPage) - }) +func (c *EC2) DescribeClassicLinkInstancesPages(input *DescribeClassicLinkInstancesInput, fn func(*DescribeClassicLinkInstancesOutput, bool) bool) error { + return c.DescribeClassicLinkInstancesPagesWithContext(aws.BackgroundContext(), input, fn) } -const opDescribeReservedInstancesOfferings = "DescribeReservedInstancesOfferings" +// DescribeClassicLinkInstancesPagesWithContext same as DescribeClassicLinkInstancesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClassicLinkInstancesPagesWithContext(ctx aws.Context, input *DescribeClassicLinkInstancesInput, fn func(*DescribeClassicLinkInstancesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeClassicLinkInstancesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeClassicLinkInstancesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } -// DescribeReservedInstancesOfferingsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeReservedInstancesOfferings operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. + for p.Next() { + if !fn(p.Page().(*DescribeClassicLinkInstancesOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeClientVpnAuthorizationRules = "DescribeClientVpnAuthorizationRules" + +// DescribeClientVpnAuthorizationRulesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeClientVpnAuthorizationRules operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeReservedInstancesOfferings for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeReservedInstancesOfferings method directly -// instead. +// See DescribeClientVpnAuthorizationRules for more information on using the DescribeClientVpnAuthorizationRules +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeReservedInstancesOfferingsRequest method. -// req, resp := client.DescribeReservedInstancesOfferingsRequest(params) +// +// // Example sending a request using the DescribeClientVpnAuthorizationRulesRequest method. +// req, resp := client.DescribeClientVpnAuthorizationRulesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferings -func (c *EC2) DescribeReservedInstancesOfferingsRequest(input *DescribeReservedInstancesOfferingsInput) (req *request.Request, output *DescribeReservedInstancesOfferingsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnAuthorizationRules +func (c *EC2) DescribeClientVpnAuthorizationRulesRequest(input *DescribeClientVpnAuthorizationRulesInput) (req *request.Request, output *DescribeClientVpnAuthorizationRulesOutput) { op := &request.Operation{ - Name: opDescribeReservedInstancesOfferings, + Name: opDescribeClientVpnAuthorizationRules, HTTPMethod: "POST", HTTPPath: "/", Paginator: &request.Paginator{ @@ -8317,485 +11663,811 @@ func (c *EC2) DescribeReservedInstancesOfferingsRequest(input *DescribeReservedI } if input == nil { - input = &DescribeReservedInstancesOfferingsInput{} + input = &DescribeClientVpnAuthorizationRulesInput{} } - output = &DescribeReservedInstancesOfferingsOutput{} + output = &DescribeClientVpnAuthorizationRulesOutput{} req = c.newRequest(op, input, output) return } -// DescribeReservedInstancesOfferings API operation for Amazon Elastic Compute Cloud. -// -// Describes Reserved Instance offerings that are available for purchase. With -// Reserved Instances, you purchase the right to launch instances for a period -// of time. During that time period, you do not receive insufficient capacity -// errors, and you pay a lower usage rate than the rate charged for On-Demand -// instances for the actual time used. -// -// If you have listed your own Reserved Instances for sale in the Reserved Instance -// Marketplace, they will be excluded from these results. This is to ensure -// that you do not purchase your own Reserved Instances. +// DescribeClientVpnAuthorizationRules API operation for Amazon Elastic Compute Cloud. // -// For more information, see Reserved Instance Marketplace (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes the authorization rules for a specified Client VPN endpoint. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeReservedInstancesOfferings for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferings -func (c *EC2) DescribeReservedInstancesOfferings(input *DescribeReservedInstancesOfferingsInput) (*DescribeReservedInstancesOfferingsOutput, error) { - req, out := c.DescribeReservedInstancesOfferingsRequest(input) - err := req.Send() - return out, err +// API operation DescribeClientVpnAuthorizationRules for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnAuthorizationRules +func (c *EC2) DescribeClientVpnAuthorizationRules(input *DescribeClientVpnAuthorizationRulesInput) (*DescribeClientVpnAuthorizationRulesOutput, error) { + req, out := c.DescribeClientVpnAuthorizationRulesRequest(input) + return out, req.Send() } -// DescribeReservedInstancesOfferingsPages iterates over the pages of a DescribeReservedInstancesOfferings operation, +// DescribeClientVpnAuthorizationRulesWithContext is the same as DescribeClientVpnAuthorizationRules with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeClientVpnAuthorizationRules for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnAuthorizationRulesWithContext(ctx aws.Context, input *DescribeClientVpnAuthorizationRulesInput, opts ...request.Option) (*DescribeClientVpnAuthorizationRulesOutput, error) { + req, out := c.DescribeClientVpnAuthorizationRulesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeClientVpnAuthorizationRulesPages iterates over the pages of a DescribeClientVpnAuthorizationRules operation, // calling the "fn" function with the response data for each page. To stop // iterating, return false from the fn function. // -// See DescribeReservedInstancesOfferings method for more information on how to use this operation. +// See DescribeClientVpnAuthorizationRules method for more information on how to use this operation. // // Note: This operation can generate multiple requests to a service. // -// // Example iterating over at most 3 pages of a DescribeReservedInstancesOfferings operation. +// // Example iterating over at most 3 pages of a DescribeClientVpnAuthorizationRules operation. // pageNum := 0 -// err := client.DescribeReservedInstancesOfferingsPages(params, -// func(page *DescribeReservedInstancesOfferingsOutput, lastPage bool) bool { +// err := client.DescribeClientVpnAuthorizationRulesPages(params, +// func(page *ec2.DescribeClientVpnAuthorizationRulesOutput, lastPage bool) bool { // pageNum++ // fmt.Println(page) // return pageNum <= 3 // }) // -func (c *EC2) DescribeReservedInstancesOfferingsPages(input *DescribeReservedInstancesOfferingsInput, fn func(p *DescribeReservedInstancesOfferingsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeReservedInstancesOfferingsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeReservedInstancesOfferingsOutput), lastPage) - }) +func (c *EC2) DescribeClientVpnAuthorizationRulesPages(input *DescribeClientVpnAuthorizationRulesInput, fn func(*DescribeClientVpnAuthorizationRulesOutput, bool) bool) error { + return c.DescribeClientVpnAuthorizationRulesPagesWithContext(aws.BackgroundContext(), input, fn) } -const opDescribeRouteTables = "DescribeRouteTables" +// DescribeClientVpnAuthorizationRulesPagesWithContext same as DescribeClientVpnAuthorizationRulesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnAuthorizationRulesPagesWithContext(ctx aws.Context, input *DescribeClientVpnAuthorizationRulesInput, fn func(*DescribeClientVpnAuthorizationRulesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeClientVpnAuthorizationRulesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeClientVpnAuthorizationRulesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } -// DescribeRouteTablesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeRouteTables operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. + for p.Next() { + if !fn(p.Page().(*DescribeClientVpnAuthorizationRulesOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeClientVpnConnections = "DescribeClientVpnConnections" + +// DescribeClientVpnConnectionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeClientVpnConnections operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeRouteTables for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeRouteTables method directly -// instead. +// See DescribeClientVpnConnections for more information on using the DescribeClientVpnConnections +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeRouteTablesRequest method. -// req, resp := client.DescribeRouteTablesRequest(params) +// +// // Example sending a request using the DescribeClientVpnConnectionsRequest method. +// req, resp := client.DescribeClientVpnConnectionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTables -func (c *EC2) DescribeRouteTablesRequest(input *DescribeRouteTablesInput) (req *request.Request, output *DescribeRouteTablesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnConnections +func (c *EC2) DescribeClientVpnConnectionsRequest(input *DescribeClientVpnConnectionsInput) (req *request.Request, output *DescribeClientVpnConnectionsOutput) { op := &request.Operation{ - Name: opDescribeRouteTables, + Name: opDescribeClientVpnConnections, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeRouteTablesInput{} + input = &DescribeClientVpnConnectionsInput{} } - output = &DescribeRouteTablesOutput{} + output = &DescribeClientVpnConnectionsOutput{} req = c.newRequest(op, input, output) return } -// DescribeRouteTables API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your route tables. -// -// Each subnet in your VPC must be associated with a route table. If a subnet -// is not explicitly associated with any route table, it is implicitly associated -// with the main route table. This command does not return the subnet ID for -// implicit associations. +// DescribeClientVpnConnections API operation for Amazon Elastic Compute Cloud. // -// For more information about route tables, see Route Tables (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. +// Describes active client connections and connections that have been terminated +// within the last 60 minutes for the specified Client VPN endpoint. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeRouteTables for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTables -func (c *EC2) DescribeRouteTables(input *DescribeRouteTablesInput) (*DescribeRouteTablesOutput, error) { - req, out := c.DescribeRouteTablesRequest(input) - err := req.Send() - return out, err +// API operation DescribeClientVpnConnections for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnConnections +func (c *EC2) DescribeClientVpnConnections(input *DescribeClientVpnConnectionsInput) (*DescribeClientVpnConnectionsOutput, error) { + req, out := c.DescribeClientVpnConnectionsRequest(input) + return out, req.Send() } -const opDescribeScheduledInstanceAvailability = "DescribeScheduledInstanceAvailability" +// DescribeClientVpnConnectionsWithContext is the same as DescribeClientVpnConnections with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeClientVpnConnections for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnConnectionsWithContext(ctx aws.Context, input *DescribeClientVpnConnectionsInput, opts ...request.Option) (*DescribeClientVpnConnectionsOutput, error) { + req, out := c.DescribeClientVpnConnectionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeScheduledInstanceAvailabilityRequest generates a "aws/request.Request" representing the -// client's request for the DescribeScheduledInstanceAvailability operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeClientVpnConnectionsPages iterates over the pages of a DescribeClientVpnConnections operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See DescribeScheduledInstanceAvailability for usage and error information. +// See DescribeClientVpnConnections method for more information on how to use this operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeScheduledInstanceAvailability method directly -// instead. +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeClientVpnConnections operation. +// pageNum := 0 +// err := client.DescribeClientVpnConnectionsPages(params, +// func(page *ec2.DescribeClientVpnConnectionsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeClientVpnConnectionsPages(input *DescribeClientVpnConnectionsInput, fn func(*DescribeClientVpnConnectionsOutput, bool) bool) error { + return c.DescribeClientVpnConnectionsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeClientVpnConnectionsPagesWithContext same as DescribeClientVpnConnectionsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the DescribeScheduledInstanceAvailabilityRequest method. -// req, resp := client.DescribeScheduledInstanceAvailabilityRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnConnectionsPagesWithContext(ctx aws.Context, input *DescribeClientVpnConnectionsInput, fn func(*DescribeClientVpnConnectionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeClientVpnConnectionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeClientVpnConnectionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeClientVpnConnectionsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeClientVpnEndpoints = "DescribeClientVpnEndpoints" + +// DescribeClientVpnEndpointsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeClientVpnEndpoints operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeClientVpnEndpoints for more information on using the DescribeClientVpnEndpoints +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeClientVpnEndpointsRequest method. +// req, resp := client.DescribeClientVpnEndpointsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailability -func (c *EC2) DescribeScheduledInstanceAvailabilityRequest(input *DescribeScheduledInstanceAvailabilityInput) (req *request.Request, output *DescribeScheduledInstanceAvailabilityOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnEndpoints +func (c *EC2) DescribeClientVpnEndpointsRequest(input *DescribeClientVpnEndpointsInput) (req *request.Request, output *DescribeClientVpnEndpointsOutput) { op := &request.Operation{ - Name: opDescribeScheduledInstanceAvailability, + Name: opDescribeClientVpnEndpoints, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeScheduledInstanceAvailabilityInput{} + input = &DescribeClientVpnEndpointsInput{} } - output = &DescribeScheduledInstanceAvailabilityOutput{} + output = &DescribeClientVpnEndpointsOutput{} req = c.newRequest(op, input, output) return } -// DescribeScheduledInstanceAvailability API operation for Amazon Elastic Compute Cloud. -// -// Finds available schedules that meet the specified criteria. -// -// You can search for an available schedule no more than 3 months in advance. -// You must meet the minimum required duration of 1,200 hours per year. For -// example, the minimum daily schedule is 4 hours, the minimum weekly schedule -// is 24 hours, and the minimum monthly schedule is 100 hours. +// DescribeClientVpnEndpoints API operation for Amazon Elastic Compute Cloud. // -// After you find a schedule that meets your needs, call PurchaseScheduledInstances -// to purchase Scheduled Instances with that schedule. +// Describes one or more Client VPN endpoints in the account. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeScheduledInstanceAvailability for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailability -func (c *EC2) DescribeScheduledInstanceAvailability(input *DescribeScheduledInstanceAvailabilityInput) (*DescribeScheduledInstanceAvailabilityOutput, error) { - req, out := c.DescribeScheduledInstanceAvailabilityRequest(input) - err := req.Send() - return out, err +// API operation DescribeClientVpnEndpoints for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnEndpoints +func (c *EC2) DescribeClientVpnEndpoints(input *DescribeClientVpnEndpointsInput) (*DescribeClientVpnEndpointsOutput, error) { + req, out := c.DescribeClientVpnEndpointsRequest(input) + return out, req.Send() } -const opDescribeScheduledInstances = "DescribeScheduledInstances" - -// DescribeScheduledInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeScheduledInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeClientVpnEndpointsWithContext is the same as DescribeClientVpnEndpoints with the addition of +// the ability to pass a context and additional request options. // -// See DescribeScheduledInstances for usage and error information. +// See DescribeClientVpnEndpoints for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeScheduledInstances method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnEndpointsWithContext(ctx aws.Context, input *DescribeClientVpnEndpointsInput, opts ...request.Option) (*DescribeClientVpnEndpointsOutput, error) { + req, out := c.DescribeClientVpnEndpointsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeClientVpnEndpointsPages iterates over the pages of a DescribeClientVpnEndpoints operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeClientVpnEndpoints method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeClientVpnEndpoints operation. +// pageNum := 0 +// err := client.DescribeClientVpnEndpointsPages(params, +// func(page *ec2.DescribeClientVpnEndpointsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeClientVpnEndpointsPages(input *DescribeClientVpnEndpointsInput, fn func(*DescribeClientVpnEndpointsOutput, bool) bool) error { + return c.DescribeClientVpnEndpointsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeClientVpnEndpointsPagesWithContext same as DescribeClientVpnEndpointsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnEndpointsPagesWithContext(ctx aws.Context, input *DescribeClientVpnEndpointsInput, fn func(*DescribeClientVpnEndpointsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeClientVpnEndpointsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeClientVpnEndpointsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeClientVpnEndpointsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeClientVpnRoutes = "DescribeClientVpnRoutes" + +// DescribeClientVpnRoutesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeClientVpnRoutes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeClientVpnRoutes for more information on using the DescribeClientVpnRoutes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeScheduledInstancesRequest method. -// req, resp := client.DescribeScheduledInstancesRequest(params) +// +// // Example sending a request using the DescribeClientVpnRoutesRequest method. +// req, resp := client.DescribeClientVpnRoutesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstances -func (c *EC2) DescribeScheduledInstancesRequest(input *DescribeScheduledInstancesInput) (req *request.Request, output *DescribeScheduledInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnRoutes +func (c *EC2) DescribeClientVpnRoutesRequest(input *DescribeClientVpnRoutesInput) (req *request.Request, output *DescribeClientVpnRoutesOutput) { op := &request.Operation{ - Name: opDescribeScheduledInstances, + Name: opDescribeClientVpnRoutes, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeScheduledInstancesInput{} + input = &DescribeClientVpnRoutesInput{} } - output = &DescribeScheduledInstancesOutput{} + output = &DescribeClientVpnRoutesOutput{} req = c.newRequest(op, input, output) return } -// DescribeScheduledInstances API operation for Amazon Elastic Compute Cloud. +// DescribeClientVpnRoutes API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your Scheduled Instances. +// Describes the routes for the specified Client VPN endpoint. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeScheduledInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstances -func (c *EC2) DescribeScheduledInstances(input *DescribeScheduledInstancesInput) (*DescribeScheduledInstancesOutput, error) { - req, out := c.DescribeScheduledInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeClientVpnRoutes for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnRoutes +func (c *EC2) DescribeClientVpnRoutes(input *DescribeClientVpnRoutesInput) (*DescribeClientVpnRoutesOutput, error) { + req, out := c.DescribeClientVpnRoutesRequest(input) + return out, req.Send() } -const opDescribeSecurityGroupReferences = "DescribeSecurityGroupReferences" +// DescribeClientVpnRoutesWithContext is the same as DescribeClientVpnRoutes with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeClientVpnRoutes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnRoutesWithContext(ctx aws.Context, input *DescribeClientVpnRoutesInput, opts ...request.Option) (*DescribeClientVpnRoutesOutput, error) { + req, out := c.DescribeClientVpnRoutesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeSecurityGroupReferencesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSecurityGroupReferences operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeClientVpnRoutesPages iterates over the pages of a DescribeClientVpnRoutes operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See DescribeSecurityGroupReferences for usage and error information. +// See DescribeClientVpnRoutes method for more information on how to use this operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSecurityGroupReferences method directly -// instead. +// Note: This operation can generate multiple requests to a service. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// // Example iterating over at most 3 pages of a DescribeClientVpnRoutes operation. +// pageNum := 0 +// err := client.DescribeClientVpnRoutesPages(params, +// func(page *ec2.DescribeClientVpnRoutesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeClientVpnRoutesPages(input *DescribeClientVpnRoutesInput, fn func(*DescribeClientVpnRoutesOutput, bool) bool) error { + return c.DescribeClientVpnRoutesPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeClientVpnRoutesPagesWithContext same as DescribeClientVpnRoutesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnRoutesPagesWithContext(ctx aws.Context, input *DescribeClientVpnRoutesInput, fn func(*DescribeClientVpnRoutesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeClientVpnRoutesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeClientVpnRoutesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeClientVpnRoutesOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeClientVpnTargetNetworks = "DescribeClientVpnTargetNetworks" + +// DescribeClientVpnTargetNetworksRequest generates a "aws/request.Request" representing the +// client's request for the DescribeClientVpnTargetNetworks operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeClientVpnTargetNetworks for more information on using the DescribeClientVpnTargetNetworks +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSecurityGroupReferencesRequest method. -// req, resp := client.DescribeSecurityGroupReferencesRequest(params) +// +// // Example sending a request using the DescribeClientVpnTargetNetworksRequest method. +// req, resp := client.DescribeClientVpnTargetNetworksRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferences -func (c *EC2) DescribeSecurityGroupReferencesRequest(input *DescribeSecurityGroupReferencesInput) (req *request.Request, output *DescribeSecurityGroupReferencesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnTargetNetworks +func (c *EC2) DescribeClientVpnTargetNetworksRequest(input *DescribeClientVpnTargetNetworksInput) (req *request.Request, output *DescribeClientVpnTargetNetworksOutput) { op := &request.Operation{ - Name: opDescribeSecurityGroupReferences, + Name: opDescribeClientVpnTargetNetworks, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeSecurityGroupReferencesInput{} + input = &DescribeClientVpnTargetNetworksInput{} } - output = &DescribeSecurityGroupReferencesOutput{} + output = &DescribeClientVpnTargetNetworksOutput{} req = c.newRequest(op, input, output) return } -// DescribeSecurityGroupReferences API operation for Amazon Elastic Compute Cloud. +// DescribeClientVpnTargetNetworks API operation for Amazon Elastic Compute Cloud. // -// [EC2-VPC only] Describes the VPCs on the other side of a VPC peering connection -// that are referencing the security groups you've specified in this request. +// Describes the target networks associated with the specified Client VPN endpoint. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSecurityGroupReferences for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferences -func (c *EC2) DescribeSecurityGroupReferences(input *DescribeSecurityGroupReferencesInput) (*DescribeSecurityGroupReferencesOutput, error) { - req, out := c.DescribeSecurityGroupReferencesRequest(input) - err := req.Send() - return out, err +// API operation DescribeClientVpnTargetNetworks for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnTargetNetworks +func (c *EC2) DescribeClientVpnTargetNetworks(input *DescribeClientVpnTargetNetworksInput) (*DescribeClientVpnTargetNetworksOutput, error) { + req, out := c.DescribeClientVpnTargetNetworksRequest(input) + return out, req.Send() } -const opDescribeSecurityGroups = "DescribeSecurityGroups" +// DescribeClientVpnTargetNetworksWithContext is the same as DescribeClientVpnTargetNetworks with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeClientVpnTargetNetworks for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnTargetNetworksWithContext(ctx aws.Context, input *DescribeClientVpnTargetNetworksInput, opts ...request.Option) (*DescribeClientVpnTargetNetworksOutput, error) { + req, out := c.DescribeClientVpnTargetNetworksRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeSecurityGroupsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSecurityGroups operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeClientVpnTargetNetworksPages iterates over the pages of a DescribeClientVpnTargetNetworks operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See DescribeSecurityGroups for usage and error information. +// See DescribeClientVpnTargetNetworks method for more information on how to use this operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSecurityGroups method directly -// instead. +// Note: This operation can generate multiple requests to a service. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// // Example iterating over at most 3 pages of a DescribeClientVpnTargetNetworks operation. +// pageNum := 0 +// err := client.DescribeClientVpnTargetNetworksPages(params, +// func(page *ec2.DescribeClientVpnTargetNetworksOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// // Example sending a request using the DescribeSecurityGroupsRequest method. -// req, resp := client.DescribeSecurityGroupsRequest(params) +func (c *EC2) DescribeClientVpnTargetNetworksPages(input *DescribeClientVpnTargetNetworksInput, fn func(*DescribeClientVpnTargetNetworksOutput, bool) bool) error { + return c.DescribeClientVpnTargetNetworksPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeClientVpnTargetNetworksPagesWithContext same as DescribeClientVpnTargetNetworksPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeClientVpnTargetNetworksPagesWithContext(ctx aws.Context, input *DescribeClientVpnTargetNetworksInput, fn func(*DescribeClientVpnTargetNetworksOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeClientVpnTargetNetworksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeClientVpnTargetNetworksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeClientVpnTargetNetworksOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeConversionTasks = "DescribeConversionTasks" + +// DescribeConversionTasksRequest generates a "aws/request.Request" representing the +// client's request for the DescribeConversionTasks operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeConversionTasks for more information on using the DescribeConversionTasks +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeConversionTasksRequest method. +// req, resp := client.DescribeConversionTasksRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroups -func (c *EC2) DescribeSecurityGroupsRequest(input *DescribeSecurityGroupsInput) (req *request.Request, output *DescribeSecurityGroupsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasks +func (c *EC2) DescribeConversionTasksRequest(input *DescribeConversionTasksInput) (req *request.Request, output *DescribeConversionTasksOutput) { op := &request.Operation{ - Name: opDescribeSecurityGroups, + Name: opDescribeConversionTasks, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeSecurityGroupsInput{} + input = &DescribeConversionTasksInput{} } - output = &DescribeSecurityGroupsOutput{} + output = &DescribeConversionTasksOutput{} req = c.newRequest(op, input, output) return } -// DescribeSecurityGroups API operation for Amazon Elastic Compute Cloud. +// DescribeConversionTasks API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your security groups. +// Describes the specified conversion tasks or all your conversion tasks. For +// more information, see the VM Import/Export User Guide (https://docs.aws.amazon.com/vm-import/latest/userguide/). // -// A security group is for use with instances either in the EC2-Classic platform -// or in a specific VPC. For more information, see Amazon EC2 Security Groups -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) -// in the Amazon Elastic Compute Cloud User Guide and Security Groups for Your -// VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) -// in the Amazon Virtual Private Cloud User Guide. +// For information about the import manifest referenced by this API action, +// see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSecurityGroups for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroups -func (c *EC2) DescribeSecurityGroups(input *DescribeSecurityGroupsInput) (*DescribeSecurityGroupsOutput, error) { - req, out := c.DescribeSecurityGroupsRequest(input) - err := req.Send() - return out, err +// API operation DescribeConversionTasks for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasks +func (c *EC2) DescribeConversionTasks(input *DescribeConversionTasksInput) (*DescribeConversionTasksOutput, error) { + req, out := c.DescribeConversionTasksRequest(input) + return out, req.Send() } -const opDescribeSnapshotAttribute = "DescribeSnapshotAttribute" +// DescribeConversionTasksWithContext is the same as DescribeConversionTasks with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeConversionTasks for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeConversionTasksWithContext(ctx aws.Context, input *DescribeConversionTasksInput, opts ...request.Option) (*DescribeConversionTasksOutput, error) { + req, out := c.DescribeConversionTasksRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeSnapshotAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSnapshotAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeCustomerGateways = "DescribeCustomerGateways" + +// DescribeCustomerGatewaysRequest generates a "aws/request.Request" representing the +// client's request for the DescribeCustomerGateways operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeSnapshotAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSnapshotAttribute method directly -// instead. +// See DescribeCustomerGateways for more information on using the DescribeCustomerGateways +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSnapshotAttributeRequest method. -// req, resp := client.DescribeSnapshotAttributeRequest(params) +// +// // Example sending a request using the DescribeCustomerGatewaysRequest method. +// req, resp := client.DescribeCustomerGatewaysRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttribute -func (c *EC2) DescribeSnapshotAttributeRequest(input *DescribeSnapshotAttributeInput) (req *request.Request, output *DescribeSnapshotAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGateways +func (c *EC2) DescribeCustomerGatewaysRequest(input *DescribeCustomerGatewaysInput) (req *request.Request, output *DescribeCustomerGatewaysOutput) { op := &request.Operation{ - Name: opDescribeSnapshotAttribute, + Name: opDescribeCustomerGateways, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeSnapshotAttributeInput{} + input = &DescribeCustomerGatewaysInput{} } - output = &DescribeSnapshotAttributeOutput{} + output = &DescribeCustomerGatewaysOutput{} req = c.newRequest(op, input, output) return } -// DescribeSnapshotAttribute API operation for Amazon Elastic Compute Cloud. +// DescribeCustomerGateways API operation for Amazon Elastic Compute Cloud. // -// Describes the specified attribute of the specified snapshot. You can specify -// only one attribute at a time. +// Describes one or more of your VPN customer gateways. // -// For more information about EBS snapshots, see Amazon EBS Snapshots (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) -// in the Amazon Elastic Compute Cloud User Guide. +// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) +// in the AWS Site-to-Site VPN User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSnapshotAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttribute -func (c *EC2) DescribeSnapshotAttribute(input *DescribeSnapshotAttributeInput) (*DescribeSnapshotAttributeOutput, error) { - req, out := c.DescribeSnapshotAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeCustomerGateways for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGateways +func (c *EC2) DescribeCustomerGateways(input *DescribeCustomerGatewaysInput) (*DescribeCustomerGatewaysOutput, error) { + req, out := c.DescribeCustomerGatewaysRequest(input) + return out, req.Send() } -const opDescribeSnapshots = "DescribeSnapshots" +// DescribeCustomerGatewaysWithContext is the same as DescribeCustomerGateways with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeCustomerGateways for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeCustomerGatewaysWithContext(ctx aws.Context, input *DescribeCustomerGatewaysInput, opts ...request.Option) (*DescribeCustomerGatewaysOutput, error) { + req, out := c.DescribeCustomerGatewaysRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeSnapshotsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSnapshots operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeDhcpOptions = "DescribeDhcpOptions" + +// DescribeDhcpOptionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeDhcpOptions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeSnapshots for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSnapshots method directly -// instead. +// See DescribeDhcpOptions for more information on using the DescribeDhcpOptions +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSnapshotsRequest method. -// req, resp := client.DescribeSnapshotsRequest(params) +// +// // Example sending a request using the DescribeDhcpOptionsRequest method. +// req, resp := client.DescribeDhcpOptionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshots -func (c *EC2) DescribeSnapshotsRequest(input *DescribeSnapshotsInput) (req *request.Request, output *DescribeSnapshotsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptions +func (c *EC2) DescribeDhcpOptionsRequest(input *DescribeDhcpOptionsInput) (req *request.Request, output *DescribeDhcpOptionsOutput) { op := &request.Operation{ - Name: opDescribeSnapshots, + Name: opDescribeDhcpOptions, HTTPMethod: "POST", HTTPPath: "/", Paginator: &request.Paginator{ @@ -8807,318 +12479,338 @@ func (c *EC2) DescribeSnapshotsRequest(input *DescribeSnapshotsInput) (req *requ } if input == nil { - input = &DescribeSnapshotsInput{} + input = &DescribeDhcpOptionsInput{} } - output = &DescribeSnapshotsOutput{} + output = &DescribeDhcpOptionsOutput{} req = c.newRequest(op, input, output) return } -// DescribeSnapshots API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of the EBS snapshots available to you. Available snapshots -// include public snapshots available for any AWS account to launch, private -// snapshots that you own, and private snapshots owned by another AWS account -// but for which you've been given explicit create volume permissions. -// -// The create volume permissions fall into the following categories: -// -// * public: The owner of the snapshot granted create volume permissions -// for the snapshot to the all group. All AWS accounts have create volume -// permissions for these snapshots. -// -// * explicit: The owner of the snapshot granted create volume permissions -// to a specific AWS account. -// -// * implicit: An AWS account has implicit create volume permissions for -// all snapshots it owns. -// -// The list of snapshots returned can be modified by specifying snapshot IDs, -// snapshot owners, or AWS accounts with create volume permissions. If no options -// are specified, Amazon EC2 returns all snapshots for which you have create -// volume permissions. -// -// If you specify one or more snapshot IDs, only snapshots that have the specified -// IDs are returned. If you specify an invalid snapshot ID, an error is returned. -// If you specify a snapshot ID for which you do not have access, it is not -// included in the returned results. -// -// If you specify one or more snapshot owners using the OwnerIds option, only -// snapshots from the specified owners and for which you have access are returned. -// The results can include the AWS account IDs of the specified owners, amazon -// for snapshots owned by Amazon, or self for snapshots that you own. -// -// If you specify a list of restorable users, only snapshots with create snapshot -// permissions for those users are returned. You can specify AWS account IDs -// (if you own the snapshots), self for snapshots for which you own or have -// explicit permissions, or all for public snapshots. +// DescribeDhcpOptions API operation for Amazon Elastic Compute Cloud. // -// If you are describing a long list of snapshots, you can paginate the output -// to make the list more manageable. The MaxResults parameter sets the maximum -// number of results returned in a single page. If the list of results exceeds -// your MaxResults value, then that number of results is returned along with -// a NextToken value that can be passed to a subsequent DescribeSnapshots request -// to retrieve the remaining results. +// Describes one or more of your DHCP options sets. // -// For more information about EBS snapshots, see Amazon EBS Snapshots (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) -// in the Amazon Elastic Compute Cloud User Guide. +// For more information, see DHCP Options Sets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) +// in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSnapshots for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshots -func (c *EC2) DescribeSnapshots(input *DescribeSnapshotsInput) (*DescribeSnapshotsOutput, error) { - req, out := c.DescribeSnapshotsRequest(input) - err := req.Send() - return out, err +// API operation DescribeDhcpOptions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptions +func (c *EC2) DescribeDhcpOptions(input *DescribeDhcpOptionsInput) (*DescribeDhcpOptionsOutput, error) { + req, out := c.DescribeDhcpOptionsRequest(input) + return out, req.Send() } -// DescribeSnapshotsPages iterates over the pages of a DescribeSnapshots operation, +// DescribeDhcpOptionsWithContext is the same as DescribeDhcpOptions with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeDhcpOptions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeDhcpOptionsWithContext(ctx aws.Context, input *DescribeDhcpOptionsInput, opts ...request.Option) (*DescribeDhcpOptionsOutput, error) { + req, out := c.DescribeDhcpOptionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeDhcpOptionsPages iterates over the pages of a DescribeDhcpOptions operation, // calling the "fn" function with the response data for each page. To stop // iterating, return false from the fn function. // -// See DescribeSnapshots method for more information on how to use this operation. +// See DescribeDhcpOptions method for more information on how to use this operation. // // Note: This operation can generate multiple requests to a service. // -// // Example iterating over at most 3 pages of a DescribeSnapshots operation. +// // Example iterating over at most 3 pages of a DescribeDhcpOptions operation. // pageNum := 0 -// err := client.DescribeSnapshotsPages(params, -// func(page *DescribeSnapshotsOutput, lastPage bool) bool { +// err := client.DescribeDhcpOptionsPages(params, +// func(page *ec2.DescribeDhcpOptionsOutput, lastPage bool) bool { // pageNum++ // fmt.Println(page) // return pageNum <= 3 // }) // -func (c *EC2) DescribeSnapshotsPages(input *DescribeSnapshotsInput, fn func(p *DescribeSnapshotsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeSnapshotsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeSnapshotsOutput), lastPage) - }) +func (c *EC2) DescribeDhcpOptionsPages(input *DescribeDhcpOptionsInput, fn func(*DescribeDhcpOptionsOutput, bool) bool) error { + return c.DescribeDhcpOptionsPagesWithContext(aws.BackgroundContext(), input, fn) } -const opDescribeSpotDatafeedSubscription = "DescribeSpotDatafeedSubscription" +// DescribeDhcpOptionsPagesWithContext same as DescribeDhcpOptionsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeDhcpOptionsPagesWithContext(ctx aws.Context, input *DescribeDhcpOptionsInput, fn func(*DescribeDhcpOptionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeDhcpOptionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeDhcpOptionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } -// DescribeSpotDatafeedSubscriptionRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotDatafeedSubscription operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. + for p.Next() { + if !fn(p.Page().(*DescribeDhcpOptionsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeEgressOnlyInternetGateways = "DescribeEgressOnlyInternetGateways" + +// DescribeEgressOnlyInternetGatewaysRequest generates a "aws/request.Request" representing the +// client's request for the DescribeEgressOnlyInternetGateways operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeSpotDatafeedSubscription for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSpotDatafeedSubscription method directly -// instead. +// See DescribeEgressOnlyInternetGateways for more information on using the DescribeEgressOnlyInternetGateways +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSpotDatafeedSubscriptionRequest method. -// req, resp := client.DescribeSpotDatafeedSubscriptionRequest(params) +// +// // Example sending a request using the DescribeEgressOnlyInternetGatewaysRequest method. +// req, resp := client.DescribeEgressOnlyInternetGatewaysRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscription -func (c *EC2) DescribeSpotDatafeedSubscriptionRequest(input *DescribeSpotDatafeedSubscriptionInput) (req *request.Request, output *DescribeSpotDatafeedSubscriptionOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGateways +func (c *EC2) DescribeEgressOnlyInternetGatewaysRequest(input *DescribeEgressOnlyInternetGatewaysInput) (req *request.Request, output *DescribeEgressOnlyInternetGatewaysOutput) { op := &request.Operation{ - Name: opDescribeSpotDatafeedSubscription, + Name: opDescribeEgressOnlyInternetGateways, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeSpotDatafeedSubscriptionInput{} + input = &DescribeEgressOnlyInternetGatewaysInput{} } - output = &DescribeSpotDatafeedSubscriptionOutput{} + output = &DescribeEgressOnlyInternetGatewaysOutput{} req = c.newRequest(op, input, output) return } -// DescribeSpotDatafeedSubscription API operation for Amazon Elastic Compute Cloud. +// DescribeEgressOnlyInternetGateways API operation for Amazon Elastic Compute Cloud. // -// Describes the data feed for Spot instances. For more information, see Spot -// Instance Data Feed (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes one or more of your egress-only internet gateways. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotDatafeedSubscription for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscription -func (c *EC2) DescribeSpotDatafeedSubscription(input *DescribeSpotDatafeedSubscriptionInput) (*DescribeSpotDatafeedSubscriptionOutput, error) { - req, out := c.DescribeSpotDatafeedSubscriptionRequest(input) - err := req.Send() - return out, err +// API operation DescribeEgressOnlyInternetGateways for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGateways +func (c *EC2) DescribeEgressOnlyInternetGateways(input *DescribeEgressOnlyInternetGatewaysInput) (*DescribeEgressOnlyInternetGatewaysOutput, error) { + req, out := c.DescribeEgressOnlyInternetGatewaysRequest(input) + return out, req.Send() } -const opDescribeSpotFleetInstances = "DescribeSpotFleetInstances" - -// DescribeSpotFleetInstancesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotFleetInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeEgressOnlyInternetGatewaysWithContext is the same as DescribeEgressOnlyInternetGateways with the addition of +// the ability to pass a context and additional request options. // -// See DescribeSpotFleetInstances for usage and error information. +// See DescribeEgressOnlyInternetGateways for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSpotFleetInstances method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeEgressOnlyInternetGatewaysWithContext(ctx aws.Context, input *DescribeEgressOnlyInternetGatewaysInput, opts ...request.Option) (*DescribeEgressOnlyInternetGatewaysOutput, error) { + req, out := c.DescribeEgressOnlyInternetGatewaysRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeEgressOnlyInternetGatewaysPages iterates over the pages of a DescribeEgressOnlyInternetGateways operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeEgressOnlyInternetGateways method for more information on how to use this operation. // -// // Example sending a request using the DescribeSpotFleetInstancesRequest method. -// req, resp := client.DescribeSpotFleetInstancesRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeEgressOnlyInternetGateways operation. +// pageNum := 0 +// err := client.DescribeEgressOnlyInternetGatewaysPages(params, +// func(page *ec2.DescribeEgressOnlyInternetGatewaysOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstances -func (c *EC2) DescribeSpotFleetInstancesRequest(input *DescribeSpotFleetInstancesInput) (req *request.Request, output *DescribeSpotFleetInstancesOutput) { - op := &request.Operation{ - Name: opDescribeSpotFleetInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeEgressOnlyInternetGatewaysPages(input *DescribeEgressOnlyInternetGatewaysInput, fn func(*DescribeEgressOnlyInternetGatewaysOutput, bool) bool) error { + return c.DescribeEgressOnlyInternetGatewaysPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &DescribeSpotFleetInstancesInput{} +// DescribeEgressOnlyInternetGatewaysPagesWithContext same as DescribeEgressOnlyInternetGatewaysPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeEgressOnlyInternetGatewaysPagesWithContext(ctx aws.Context, input *DescribeEgressOnlyInternetGatewaysInput, fn func(*DescribeEgressOnlyInternetGatewaysOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeEgressOnlyInternetGatewaysInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeEgressOnlyInternetGatewaysRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &DescribeSpotFleetInstancesOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeEgressOnlyInternetGatewaysOutput), !p.HasNextPage()) { + break + } + } -// DescribeSpotFleetInstances API operation for Amazon Elastic Compute Cloud. -// -// Describes the running instances for the specified Spot fleet. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotFleetInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstances -func (c *EC2) DescribeSpotFleetInstances(input *DescribeSpotFleetInstancesInput) (*DescribeSpotFleetInstancesOutput, error) { - req, out := c.DescribeSpotFleetInstancesRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opDescribeSpotFleetRequestHistory = "DescribeSpotFleetRequestHistory" +const opDescribeElasticGpus = "DescribeElasticGpus" -// DescribeSpotFleetRequestHistoryRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotFleetRequestHistory operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeElasticGpusRequest generates a "aws/request.Request" representing the +// client's request for the DescribeElasticGpus operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeSpotFleetRequestHistory for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSpotFleetRequestHistory method directly -// instead. +// See DescribeElasticGpus for more information on using the DescribeElasticGpus +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSpotFleetRequestHistoryRequest method. -// req, resp := client.DescribeSpotFleetRequestHistoryRequest(params) +// +// // Example sending a request using the DescribeElasticGpusRequest method. +// req, resp := client.DescribeElasticGpusRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistory -func (c *EC2) DescribeSpotFleetRequestHistoryRequest(input *DescribeSpotFleetRequestHistoryInput) (req *request.Request, output *DescribeSpotFleetRequestHistoryOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeElasticGpus +func (c *EC2) DescribeElasticGpusRequest(input *DescribeElasticGpusInput) (req *request.Request, output *DescribeElasticGpusOutput) { op := &request.Operation{ - Name: opDescribeSpotFleetRequestHistory, + Name: opDescribeElasticGpus, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeSpotFleetRequestHistoryInput{} + input = &DescribeElasticGpusInput{} } - output = &DescribeSpotFleetRequestHistoryOutput{} + output = &DescribeElasticGpusOutput{} req = c.newRequest(op, input, output) return } -// DescribeSpotFleetRequestHistory API operation for Amazon Elastic Compute Cloud. +// DescribeElasticGpus API operation for Amazon Elastic Compute Cloud. // -// Describes the events for the specified Spot fleet request during the specified -// time. -// -// Spot fleet events are delayed by up to 30 seconds before they can be described. -// This ensures that you can query by the last evaluated time and not miss a -// recorded event. +// Describes the Elastic Graphics accelerator associated with your instances. +// For more information about Elastic Graphics, see Amazon Elastic Graphics +// (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotFleetRequestHistory for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistory -func (c *EC2) DescribeSpotFleetRequestHistory(input *DescribeSpotFleetRequestHistoryInput) (*DescribeSpotFleetRequestHistoryOutput, error) { - req, out := c.DescribeSpotFleetRequestHistoryRequest(input) - err := req.Send() - return out, err +// API operation DescribeElasticGpus for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeElasticGpus +func (c *EC2) DescribeElasticGpus(input *DescribeElasticGpusInput) (*DescribeElasticGpusOutput, error) { + req, out := c.DescribeElasticGpusRequest(input) + return out, req.Send() } -const opDescribeSpotFleetRequests = "DescribeSpotFleetRequests" +// DescribeElasticGpusWithContext is the same as DescribeElasticGpus with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeElasticGpus for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeElasticGpusWithContext(ctx aws.Context, input *DescribeElasticGpusInput, opts ...request.Option) (*DescribeElasticGpusOutput, error) { + req, out := c.DescribeElasticGpusRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeSpotFleetRequestsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotFleetRequests operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeExportImageTasks = "DescribeExportImageTasks" + +// DescribeExportImageTasksRequest generates a "aws/request.Request" representing the +// client's request for the DescribeExportImageTasks operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeSpotFleetRequests for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSpotFleetRequests method directly -// instead. +// See DescribeExportImageTasks for more information on using the DescribeExportImageTasks +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSpotFleetRequestsRequest method. -// req, resp := client.DescribeSpotFleetRequestsRequest(params) +// +// // Example sending a request using the DescribeExportImageTasksRequest method. +// req, resp := client.DescribeExportImageTasksRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequests -func (c *EC2) DescribeSpotFleetRequestsRequest(input *DescribeSpotFleetRequestsInput) (req *request.Request, output *DescribeSpotFleetRequestsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportImageTasks +func (c *EC2) DescribeExportImageTasksRequest(input *DescribeExportImageTasksInput) (req *request.Request, output *DescribeExportImageTasksOutput) { op := &request.Operation{ - Name: opDescribeSpotFleetRequests, + Name: opDescribeExportImageTasks, HTTPMethod: "POST", HTTPPath: "/", Paginator: &request.Paginator{ @@ -9130,163 +12822,202 @@ func (c *EC2) DescribeSpotFleetRequestsRequest(input *DescribeSpotFleetRequestsI } if input == nil { - input = &DescribeSpotFleetRequestsInput{} + input = &DescribeExportImageTasksInput{} } - output = &DescribeSpotFleetRequestsOutput{} + output = &DescribeExportImageTasksOutput{} req = c.newRequest(op, input, output) return } -// DescribeSpotFleetRequests API operation for Amazon Elastic Compute Cloud. -// -// Describes your Spot fleet requests. +// DescribeExportImageTasks API operation for Amazon Elastic Compute Cloud. // -// Spot fleet requests are deleted 48 hours after they are canceled and their -// instances are terminated. +// Describes the specified export image tasks or all your export image tasks. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotFleetRequests for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequests -func (c *EC2) DescribeSpotFleetRequests(input *DescribeSpotFleetRequestsInput) (*DescribeSpotFleetRequestsOutput, error) { - req, out := c.DescribeSpotFleetRequestsRequest(input) - err := req.Send() - return out, err +// API operation DescribeExportImageTasks for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportImageTasks +func (c *EC2) DescribeExportImageTasks(input *DescribeExportImageTasksInput) (*DescribeExportImageTasksOutput, error) { + req, out := c.DescribeExportImageTasksRequest(input) + return out, req.Send() } -// DescribeSpotFleetRequestsPages iterates over the pages of a DescribeSpotFleetRequests operation, +// DescribeExportImageTasksWithContext is the same as DescribeExportImageTasks with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeExportImageTasks for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeExportImageTasksWithContext(ctx aws.Context, input *DescribeExportImageTasksInput, opts ...request.Option) (*DescribeExportImageTasksOutput, error) { + req, out := c.DescribeExportImageTasksRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeExportImageTasksPages iterates over the pages of a DescribeExportImageTasks operation, // calling the "fn" function with the response data for each page. To stop // iterating, return false from the fn function. // -// See DescribeSpotFleetRequests method for more information on how to use this operation. +// See DescribeExportImageTasks method for more information on how to use this operation. // // Note: This operation can generate multiple requests to a service. // -// // Example iterating over at most 3 pages of a DescribeSpotFleetRequests operation. +// // Example iterating over at most 3 pages of a DescribeExportImageTasks operation. // pageNum := 0 -// err := client.DescribeSpotFleetRequestsPages(params, -// func(page *DescribeSpotFleetRequestsOutput, lastPage bool) bool { +// err := client.DescribeExportImageTasksPages(params, +// func(page *ec2.DescribeExportImageTasksOutput, lastPage bool) bool { // pageNum++ // fmt.Println(page) // return pageNum <= 3 // }) // -func (c *EC2) DescribeSpotFleetRequestsPages(input *DescribeSpotFleetRequestsInput, fn func(p *DescribeSpotFleetRequestsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeSpotFleetRequestsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeSpotFleetRequestsOutput), lastPage) - }) +func (c *EC2) DescribeExportImageTasksPages(input *DescribeExportImageTasksInput, fn func(*DescribeExportImageTasksOutput, bool) bool) error { + return c.DescribeExportImageTasksPagesWithContext(aws.BackgroundContext(), input, fn) } -const opDescribeSpotInstanceRequests = "DescribeSpotInstanceRequests" +// DescribeExportImageTasksPagesWithContext same as DescribeExportImageTasksPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeExportImageTasksPagesWithContext(ctx aws.Context, input *DescribeExportImageTasksInput, fn func(*DescribeExportImageTasksOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeExportImageTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeExportImageTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } -// DescribeSpotInstanceRequestsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotInstanceRequests operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. + for p.Next() { + if !fn(p.Page().(*DescribeExportImageTasksOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeExportTasks = "DescribeExportTasks" + +// DescribeExportTasksRequest generates a "aws/request.Request" representing the +// client's request for the DescribeExportTasks operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeSpotInstanceRequests for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSpotInstanceRequests method directly -// instead. +// See DescribeExportTasks for more information on using the DescribeExportTasks +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSpotInstanceRequestsRequest method. -// req, resp := client.DescribeSpotInstanceRequestsRequest(params) +// +// // Example sending a request using the DescribeExportTasksRequest method. +// req, resp := client.DescribeExportTasksRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequests -func (c *EC2) DescribeSpotInstanceRequestsRequest(input *DescribeSpotInstanceRequestsInput) (req *request.Request, output *DescribeSpotInstanceRequestsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasks +func (c *EC2) DescribeExportTasksRequest(input *DescribeExportTasksInput) (req *request.Request, output *DescribeExportTasksOutput) { op := &request.Operation{ - Name: opDescribeSpotInstanceRequests, + Name: opDescribeExportTasks, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeSpotInstanceRequestsInput{} + input = &DescribeExportTasksInput{} } - output = &DescribeSpotInstanceRequestsOutput{} + output = &DescribeExportTasksOutput{} req = c.newRequest(op, input, output) return } -// DescribeSpotInstanceRequests API operation for Amazon Elastic Compute Cloud. -// -// Describes the Spot instance requests that belong to your account. Spot instances -// are instances that Amazon EC2 launches when the bid price that you specify -// exceeds the current Spot price. Amazon EC2 periodically sets the Spot price -// based on available Spot instance capacity and current Spot instance requests. -// For more information, see Spot Instance Requests (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// You can use DescribeSpotInstanceRequests to find a running Spot instance -// by examining the response. If the status of the Spot instance is fulfilled, -// the instance ID appears in the response and contains the identifier of the -// instance. Alternatively, you can use DescribeInstances with a filter to look -// for instances where the instance lifecycle is spot. +// DescribeExportTasks API operation for Amazon Elastic Compute Cloud. // -// Spot instance requests are deleted 4 hours after they are canceled and their -// instances are terminated. +// Describes the specified export instance tasks or all your export instance +// tasks. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotInstanceRequests for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequests -func (c *EC2) DescribeSpotInstanceRequests(input *DescribeSpotInstanceRequestsInput) (*DescribeSpotInstanceRequestsOutput, error) { - req, out := c.DescribeSpotInstanceRequestsRequest(input) - err := req.Send() - return out, err +// API operation DescribeExportTasks for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasks +func (c *EC2) DescribeExportTasks(input *DescribeExportTasksInput) (*DescribeExportTasksOutput, error) { + req, out := c.DescribeExportTasksRequest(input) + return out, req.Send() } -const opDescribeSpotPriceHistory = "DescribeSpotPriceHistory" +// DescribeExportTasksWithContext is the same as DescribeExportTasks with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeExportTasks for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeExportTasksWithContext(ctx aws.Context, input *DescribeExportTasksInput, opts ...request.Option) (*DescribeExportTasksOutput, error) { + req, out := c.DescribeExportTasksRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeSpotPriceHistoryRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSpotPriceHistory operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeFastSnapshotRestores = "DescribeFastSnapshotRestores" + +// DescribeFastSnapshotRestoresRequest generates a "aws/request.Request" representing the +// client's request for the DescribeFastSnapshotRestores operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeSpotPriceHistory for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSpotPriceHistory method directly -// instead. +// See DescribeFastSnapshotRestores for more information on using the DescribeFastSnapshotRestores +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSpotPriceHistoryRequest method. -// req, resp := client.DescribeSpotPriceHistoryRequest(params) +// +// // Example sending a request using the DescribeFastSnapshotRestoresRequest method. +// req, resp := client.DescribeFastSnapshotRestoresRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistory -func (c *EC2) DescribeSpotPriceHistoryRequest(input *DescribeSpotPriceHistoryInput) (req *request.Request, output *DescribeSpotPriceHistoryOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastSnapshotRestores +func (c *EC2) DescribeFastSnapshotRestoresRequest(input *DescribeFastSnapshotRestoresInput) (req *request.Request, output *DescribeFastSnapshotRestoresOutput) { op := &request.Operation{ - Name: opDescribeSpotPriceHistory, + Name: opDescribeFastSnapshotRestores, HTTPMethod: "POST", HTTPPath: "/", Paginator: &request.Paginator{ @@ -9298,219 +13029,279 @@ func (c *EC2) DescribeSpotPriceHistoryRequest(input *DescribeSpotPriceHistoryInp } if input == nil { - input = &DescribeSpotPriceHistoryInput{} + input = &DescribeFastSnapshotRestoresInput{} } - output = &DescribeSpotPriceHistoryOutput{} + output = &DescribeFastSnapshotRestoresOutput{} req = c.newRequest(op, input, output) return } -// DescribeSpotPriceHistory API operation for Amazon Elastic Compute Cloud. -// -// Describes the Spot price history. For more information, see Spot Instance -// Pricing History (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html) -// in the Amazon Elastic Compute Cloud User Guide. +// DescribeFastSnapshotRestores API operation for Amazon Elastic Compute Cloud. // -// When you specify a start and end time, this operation returns the prices -// of the instance types within the time range that you specified and the time -// when the price changed. The price is valid within the time period that you -// specified; the response merely indicates the last time that the price changed. +// Describes the state of fast snapshot restores for your snapshots. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSpotPriceHistory for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistory -func (c *EC2) DescribeSpotPriceHistory(input *DescribeSpotPriceHistoryInput) (*DescribeSpotPriceHistoryOutput, error) { - req, out := c.DescribeSpotPriceHistoryRequest(input) - err := req.Send() - return out, err +// API operation DescribeFastSnapshotRestores for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastSnapshotRestores +func (c *EC2) DescribeFastSnapshotRestores(input *DescribeFastSnapshotRestoresInput) (*DescribeFastSnapshotRestoresOutput, error) { + req, out := c.DescribeFastSnapshotRestoresRequest(input) + return out, req.Send() } -// DescribeSpotPriceHistoryPages iterates over the pages of a DescribeSpotPriceHistory operation, +// DescribeFastSnapshotRestoresWithContext is the same as DescribeFastSnapshotRestores with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeFastSnapshotRestores for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFastSnapshotRestoresWithContext(ctx aws.Context, input *DescribeFastSnapshotRestoresInput, opts ...request.Option) (*DescribeFastSnapshotRestoresOutput, error) { + req, out := c.DescribeFastSnapshotRestoresRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeFastSnapshotRestoresPages iterates over the pages of a DescribeFastSnapshotRestores operation, // calling the "fn" function with the response data for each page. To stop // iterating, return false from the fn function. // -// See DescribeSpotPriceHistory method for more information on how to use this operation. +// See DescribeFastSnapshotRestores method for more information on how to use this operation. // // Note: This operation can generate multiple requests to a service. // -// // Example iterating over at most 3 pages of a DescribeSpotPriceHistory operation. +// // Example iterating over at most 3 pages of a DescribeFastSnapshotRestores operation. // pageNum := 0 -// err := client.DescribeSpotPriceHistoryPages(params, -// func(page *DescribeSpotPriceHistoryOutput, lastPage bool) bool { +// err := client.DescribeFastSnapshotRestoresPages(params, +// func(page *ec2.DescribeFastSnapshotRestoresOutput, lastPage bool) bool { // pageNum++ // fmt.Println(page) // return pageNum <= 3 // }) // -func (c *EC2) DescribeSpotPriceHistoryPages(input *DescribeSpotPriceHistoryInput, fn func(p *DescribeSpotPriceHistoryOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeSpotPriceHistoryRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeSpotPriceHistoryOutput), lastPage) - }) +func (c *EC2) DescribeFastSnapshotRestoresPages(input *DescribeFastSnapshotRestoresInput, fn func(*DescribeFastSnapshotRestoresOutput, bool) bool) error { + return c.DescribeFastSnapshotRestoresPagesWithContext(aws.BackgroundContext(), input, fn) } -const opDescribeStaleSecurityGroups = "DescribeStaleSecurityGroups" +// DescribeFastSnapshotRestoresPagesWithContext same as DescribeFastSnapshotRestoresPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFastSnapshotRestoresPagesWithContext(ctx aws.Context, input *DescribeFastSnapshotRestoresInput, fn func(*DescribeFastSnapshotRestoresOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeFastSnapshotRestoresInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeFastSnapshotRestoresRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } -// DescribeStaleSecurityGroupsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeStaleSecurityGroups operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. + for p.Next() { + if !fn(p.Page().(*DescribeFastSnapshotRestoresOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeFleetHistory = "DescribeFleetHistory" + +// DescribeFleetHistoryRequest generates a "aws/request.Request" representing the +// client's request for the DescribeFleetHistory operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeStaleSecurityGroups for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeStaleSecurityGroups method directly -// instead. +// See DescribeFleetHistory for more information on using the DescribeFleetHistory +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeStaleSecurityGroupsRequest method. -// req, resp := client.DescribeStaleSecurityGroupsRequest(params) +// +// // Example sending a request using the DescribeFleetHistoryRequest method. +// req, resp := client.DescribeFleetHistoryRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroups -func (c *EC2) DescribeStaleSecurityGroupsRequest(input *DescribeStaleSecurityGroupsInput) (req *request.Request, output *DescribeStaleSecurityGroupsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetHistory +func (c *EC2) DescribeFleetHistoryRequest(input *DescribeFleetHistoryInput) (req *request.Request, output *DescribeFleetHistoryOutput) { op := &request.Operation{ - Name: opDescribeStaleSecurityGroups, + Name: opDescribeFleetHistory, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeStaleSecurityGroupsInput{} + input = &DescribeFleetHistoryInput{} } - output = &DescribeStaleSecurityGroupsOutput{} + output = &DescribeFleetHistoryOutput{} req = c.newRequest(op, input, output) return } -// DescribeStaleSecurityGroups API operation for Amazon Elastic Compute Cloud. +// DescribeFleetHistory API operation for Amazon Elastic Compute Cloud. +// +// Describes the events for the specified EC2 Fleet during the specified time. // -// [EC2-VPC only] Describes the stale security group rules for security groups -// in a specified VPC. Rules are stale when they reference a deleted security -// group in a peer VPC, or a security group in a peer VPC for which the VPC -// peering connection has been deleted. +// EC2 Fleet events are delayed by up to 30 seconds before they can be described. +// This ensures that you can query by the last evaluated time and not miss a +// recorded event. EC2 Fleet events are available for 48 hours. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeStaleSecurityGroups for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroups -func (c *EC2) DescribeStaleSecurityGroups(input *DescribeStaleSecurityGroupsInput) (*DescribeStaleSecurityGroupsOutput, error) { - req, out := c.DescribeStaleSecurityGroupsRequest(input) - err := req.Send() - return out, err +// API operation DescribeFleetHistory for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetHistory +func (c *EC2) DescribeFleetHistory(input *DescribeFleetHistoryInput) (*DescribeFleetHistoryOutput, error) { + req, out := c.DescribeFleetHistoryRequest(input) + return out, req.Send() } -const opDescribeSubnets = "DescribeSubnets" +// DescribeFleetHistoryWithContext is the same as DescribeFleetHistory with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeFleetHistory for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFleetHistoryWithContext(ctx aws.Context, input *DescribeFleetHistoryInput, opts ...request.Option) (*DescribeFleetHistoryOutput, error) { + req, out := c.DescribeFleetHistoryRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeSubnetsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeSubnets operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeFleetInstances = "DescribeFleetInstances" + +// DescribeFleetInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeFleetInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeSubnets for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeSubnets method directly -// instead. +// See DescribeFleetInstances for more information on using the DescribeFleetInstances +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeSubnetsRequest method. -// req, resp := client.DescribeSubnetsRequest(params) +// +// // Example sending a request using the DescribeFleetInstancesRequest method. +// req, resp := client.DescribeFleetInstancesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnets -func (c *EC2) DescribeSubnetsRequest(input *DescribeSubnetsInput) (req *request.Request, output *DescribeSubnetsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetInstances +func (c *EC2) DescribeFleetInstancesRequest(input *DescribeFleetInstancesInput) (req *request.Request, output *DescribeFleetInstancesOutput) { op := &request.Operation{ - Name: opDescribeSubnets, + Name: opDescribeFleetInstances, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeSubnetsInput{} + input = &DescribeFleetInstancesInput{} } - output = &DescribeSubnetsOutput{} + output = &DescribeFleetInstancesOutput{} req = c.newRequest(op, input, output) return } -// DescribeSubnets API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your subnets. +// DescribeFleetInstances API operation for Amazon Elastic Compute Cloud. // -// For more information about subnets, see Your VPC and Subnets (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html) -// in the Amazon Virtual Private Cloud User Guide. +// Describes the running instances for the specified EC2 Fleet. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeSubnets for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnets -func (c *EC2) DescribeSubnets(input *DescribeSubnetsInput) (*DescribeSubnetsOutput, error) { - req, out := c.DescribeSubnetsRequest(input) - err := req.Send() - return out, err +// API operation DescribeFleetInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetInstances +func (c *EC2) DescribeFleetInstances(input *DescribeFleetInstancesInput) (*DescribeFleetInstancesOutput, error) { + req, out := c.DescribeFleetInstancesRequest(input) + return out, req.Send() } -const opDescribeTags = "DescribeTags" +// DescribeFleetInstancesWithContext is the same as DescribeFleetInstances with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeFleetInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFleetInstancesWithContext(ctx aws.Context, input *DescribeFleetInstancesInput, opts ...request.Option) (*DescribeFleetInstancesOutput, error) { + req, out := c.DescribeFleetInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeTagsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeTags operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeFleets = "DescribeFleets" + +// DescribeFleetsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeFleets operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeTags for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeTags method directly -// instead. +// See DescribeFleets for more information on using the DescribeFleets +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeTagsRequest method. -// req, resp := client.DescribeTagsRequest(params) +// +// // Example sending a request using the DescribeFleetsRequest method. +// req, resp := client.DescribeFleetsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTags -func (c *EC2) DescribeTagsRequest(input *DescribeTagsInput) (req *request.Request, output *DescribeTagsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleets +func (c *EC2) DescribeFleetsRequest(input *DescribeFleetsInput) (req *request.Request, output *DescribeFleetsOutput) { op := &request.Operation{ - Name: opDescribeTags, + Name: opDescribeFleets, HTTPMethod: "POST", HTTPPath: "/", Paginator: &request.Paginator{ @@ -9522,278 +13313,335 @@ func (c *EC2) DescribeTagsRequest(input *DescribeTagsInput) (req *request.Reques } if input == nil { - input = &DescribeTagsInput{} + input = &DescribeFleetsInput{} } - output = &DescribeTagsOutput{} + output = &DescribeFleetsOutput{} req = c.newRequest(op, input, output) return } -// DescribeTags API operation for Amazon Elastic Compute Cloud. +// DescribeFleets API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of the tags for your EC2 resources. -// -// For more information about tags, see Tagging Your Resources (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes the specified EC2 Fleets or all your EC2 Fleets. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeTags for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTags -func (c *EC2) DescribeTags(input *DescribeTagsInput) (*DescribeTagsOutput, error) { - req, out := c.DescribeTagsRequest(input) - err := req.Send() - return out, err +// API operation DescribeFleets for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleets +func (c *EC2) DescribeFleets(input *DescribeFleetsInput) (*DescribeFleetsOutput, error) { + req, out := c.DescribeFleetsRequest(input) + return out, req.Send() } -// DescribeTagsPages iterates over the pages of a DescribeTags operation, +// DescribeFleetsWithContext is the same as DescribeFleets with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeFleets for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFleetsWithContext(ctx aws.Context, input *DescribeFleetsInput, opts ...request.Option) (*DescribeFleetsOutput, error) { + req, out := c.DescribeFleetsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeFleetsPages iterates over the pages of a DescribeFleets operation, // calling the "fn" function with the response data for each page. To stop // iterating, return false from the fn function. // -// See DescribeTags method for more information on how to use this operation. +// See DescribeFleets method for more information on how to use this operation. // // Note: This operation can generate multiple requests to a service. // -// // Example iterating over at most 3 pages of a DescribeTags operation. +// // Example iterating over at most 3 pages of a DescribeFleets operation. // pageNum := 0 -// err := client.DescribeTagsPages(params, -// func(page *DescribeTagsOutput, lastPage bool) bool { +// err := client.DescribeFleetsPages(params, +// func(page *ec2.DescribeFleetsOutput, lastPage bool) bool { // pageNum++ // fmt.Println(page) // return pageNum <= 3 // }) // -func (c *EC2) DescribeTagsPages(input *DescribeTagsInput, fn func(p *DescribeTagsOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeTagsRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeTagsOutput), lastPage) - }) +func (c *EC2) DescribeFleetsPages(input *DescribeFleetsInput, fn func(*DescribeFleetsOutput, bool) bool) error { + return c.DescribeFleetsPagesWithContext(aws.BackgroundContext(), input, fn) } -const opDescribeVolumeAttribute = "DescribeVolumeAttribute" +// DescribeFleetsPagesWithContext same as DescribeFleetsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFleetsPagesWithContext(ctx aws.Context, input *DescribeFleetsInput, fn func(*DescribeFleetsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeFleetsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeFleetsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } -// DescribeVolumeAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVolumeAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. + for p.Next() { + if !fn(p.Page().(*DescribeFleetsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeFlowLogs = "DescribeFlowLogs" + +// DescribeFlowLogsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeFlowLogs operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeVolumeAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVolumeAttribute method directly -// instead. +// See DescribeFlowLogs for more information on using the DescribeFlowLogs +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeVolumeAttributeRequest method. -// req, resp := client.DescribeVolumeAttributeRequest(params) +// +// // Example sending a request using the DescribeFlowLogsRequest method. +// req, resp := client.DescribeFlowLogsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttribute -func (c *EC2) DescribeVolumeAttributeRequest(input *DescribeVolumeAttributeInput) (req *request.Request, output *DescribeVolumeAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogs +func (c *EC2) DescribeFlowLogsRequest(input *DescribeFlowLogsInput) (req *request.Request, output *DescribeFlowLogsOutput) { op := &request.Operation{ - Name: opDescribeVolumeAttribute, + Name: opDescribeFlowLogs, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeVolumeAttributeInput{} + input = &DescribeFlowLogsInput{} } - output = &DescribeVolumeAttributeOutput{} + output = &DescribeFlowLogsOutput{} req = c.newRequest(op, input, output) return } -// DescribeVolumeAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified attribute of the specified volume. You can specify -// only one attribute at a time. +// DescribeFlowLogs API operation for Amazon Elastic Compute Cloud. // -// For more information about EBS volumes, see Amazon EBS Volumes (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes one or more flow logs. To view the information in your flow logs +// (the log streams for the network interfaces), you must use the CloudWatch +// Logs console or the CloudWatch Logs API. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVolumeAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttribute -func (c *EC2) DescribeVolumeAttribute(input *DescribeVolumeAttributeInput) (*DescribeVolumeAttributeOutput, error) { - req, out := c.DescribeVolumeAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeFlowLogs for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogs +func (c *EC2) DescribeFlowLogs(input *DescribeFlowLogsInput) (*DescribeFlowLogsOutput, error) { + req, out := c.DescribeFlowLogsRequest(input) + return out, req.Send() } -const opDescribeVolumeStatus = "DescribeVolumeStatus" +// DescribeFlowLogsWithContext is the same as DescribeFlowLogs with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeFlowLogs for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFlowLogsWithContext(ctx aws.Context, input *DescribeFlowLogsInput, opts ...request.Option) (*DescribeFlowLogsOutput, error) { + req, out := c.DescribeFlowLogsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeVolumeStatusRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVolumeStatus operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeFlowLogsPages iterates over the pages of a DescribeFlowLogs operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See DescribeVolumeStatus for usage and error information. +// See DescribeFlowLogs method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVolumeStatus method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeFlowLogs operation. +// pageNum := 0 +// err := client.DescribeFlowLogsPages(params, +// func(page *ec2.DescribeFlowLogsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeFlowLogsPages(input *DescribeFlowLogsInput, fn func(*DescribeFlowLogsOutput, bool) bool) error { + return c.DescribeFlowLogsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeFlowLogsPagesWithContext same as DescribeFlowLogsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the DescribeVolumeStatusRequest method. -// req, resp := client.DescribeVolumeStatusRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFlowLogsPagesWithContext(ctx aws.Context, input *DescribeFlowLogsInput, fn func(*DescribeFlowLogsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeFlowLogsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeFlowLogsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeFlowLogsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeFpgaImageAttribute = "DescribeFpgaImageAttribute" + +// DescribeFpgaImageAttributeRequest generates a "aws/request.Request" representing the +// client's request for the DescribeFpgaImageAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeFpgaImageAttribute for more information on using the DescribeFpgaImageAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeFpgaImageAttributeRequest method. +// req, resp := client.DescribeFpgaImageAttributeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatus -func (c *EC2) DescribeVolumeStatusRequest(input *DescribeVolumeStatusInput) (req *request.Request, output *DescribeVolumeStatusOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImageAttribute +func (c *EC2) DescribeFpgaImageAttributeRequest(input *DescribeFpgaImageAttributeInput) (req *request.Request, output *DescribeFpgaImageAttributeOutput) { op := &request.Operation{ - Name: opDescribeVolumeStatus, + Name: opDescribeFpgaImageAttribute, HTTPMethod: "POST", HTTPPath: "/", - Paginator: &request.Paginator{ - InputTokens: []string{"NextToken"}, - OutputTokens: []string{"NextToken"}, - LimitToken: "MaxResults", - TruncationToken: "", - }, } if input == nil { - input = &DescribeVolumeStatusInput{} + input = &DescribeFpgaImageAttributeInput{} } - output = &DescribeVolumeStatusOutput{} + output = &DescribeFpgaImageAttributeOutput{} req = c.newRequest(op, input, output) return } -// DescribeVolumeStatus API operation for Amazon Elastic Compute Cloud. -// -// Describes the status of the specified volumes. Volume status provides the -// result of the checks performed on your volumes to determine events that can -// impair the performance of your volumes. The performance of a volume can be -// affected if an issue occurs on the volume's underlying host. If the volume's -// underlying host experiences a power outage or system issue, after the system -// is restored, there could be data inconsistencies on the volume. Volume events -// notify you if this occurs. Volume actions notify you if any action needs -// to be taken in response to the event. +// DescribeFpgaImageAttribute API operation for Amazon Elastic Compute Cloud. // -// The DescribeVolumeStatus operation provides the following information about -// the specified volumes: -// -// Status: Reflects the current status of the volume. The possible values are -// ok, impaired , warning, or insufficient-data. If all checks pass, the overall -// status of the volume is ok. If the check fails, the overall status is impaired. -// If the status is insufficient-data, then the checks may still be taking place -// on your volume at the time. We recommend that you retry the request. For -// more information on volume status, see Monitoring the Status of Your Volumes -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-status.html). -// -// Events: Reflect the cause of a volume status and may require you to take -// action. For example, if your volume returns an impaired status, then the -// volume event might be potential-data-inconsistency. This means that your -// volume has been affected by an issue with the underlying host, has all I/O -// operations disabled, and may have inconsistent data. -// -// Actions: Reflect the actions you may have to take in response to an event. -// For example, if the status of the volume is impaired and the volume event -// shows potential-data-inconsistency, then the action shows enable-volume-io. -// This means that you may want to enable the I/O operations for the volume -// by calling the EnableVolumeIO action and then check the volume for data consistency. -// -// Volume status is based on the volume status checks, and does not reflect -// the volume state. Therefore, volume status does not indicate volumes in the -// error state (for example, when a volume is incapable of accepting I/O.) +// Describes the specified attribute of the specified Amazon FPGA Image (AFI). // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVolumeStatus for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatus -func (c *EC2) DescribeVolumeStatus(input *DescribeVolumeStatusInput) (*DescribeVolumeStatusOutput, error) { - req, out := c.DescribeVolumeStatusRequest(input) - err := req.Send() - return out, err +// API operation DescribeFpgaImageAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImageAttribute +func (c *EC2) DescribeFpgaImageAttribute(input *DescribeFpgaImageAttributeInput) (*DescribeFpgaImageAttributeOutput, error) { + req, out := c.DescribeFpgaImageAttributeRequest(input) + return out, req.Send() } -// DescribeVolumeStatusPages iterates over the pages of a DescribeVolumeStatus operation, -// calling the "fn" function with the response data for each page. To stop -// iterating, return false from the fn function. -// -// See DescribeVolumeStatus method for more information on how to use this operation. +// DescribeFpgaImageAttributeWithContext is the same as DescribeFpgaImageAttribute with the addition of +// the ability to pass a context and additional request options. // -// Note: This operation can generate multiple requests to a service. -// -// // Example iterating over at most 3 pages of a DescribeVolumeStatus operation. -// pageNum := 0 -// err := client.DescribeVolumeStatusPages(params, -// func(page *DescribeVolumeStatusOutput, lastPage bool) bool { -// pageNum++ -// fmt.Println(page) -// return pageNum <= 3 -// }) +// See DescribeFpgaImageAttribute for details on how to use this API operation. // -func (c *EC2) DescribeVolumeStatusPages(input *DescribeVolumeStatusInput, fn func(p *DescribeVolumeStatusOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeVolumeStatusRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeVolumeStatusOutput), lastPage) - }) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFpgaImageAttributeWithContext(ctx aws.Context, input *DescribeFpgaImageAttributeInput, opts ...request.Option) (*DescribeFpgaImageAttributeOutput, error) { + req, out := c.DescribeFpgaImageAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -const opDescribeVolumes = "DescribeVolumes" +const opDescribeFpgaImages = "DescribeFpgaImages" -// DescribeVolumesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVolumes operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeFpgaImagesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeFpgaImages operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeVolumes for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVolumes method directly -// instead. +// See DescribeFpgaImages for more information on using the DescribeFpgaImages +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeVolumesRequest method. -// req, resp := client.DescribeVolumesRequest(params) +// +// // Example sending a request using the DescribeFpgaImagesRequest method. +// req, resp := client.DescribeFpgaImagesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumes -func (c *EC2) DescribeVolumesRequest(input *DescribeVolumesInput) (req *request.Request, output *DescribeVolumesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImages +func (c *EC2) DescribeFpgaImagesRequest(input *DescribeFpgaImagesInput) (req *request.Request, output *DescribeFpgaImagesOutput) { op := &request.Operation{ - Name: opDescribeVolumes, + Name: opDescribeFpgaImages, HTTPMethod: "POST", HTTPPath: "/", Paginator: &request.Paginator{ @@ -9805,940 +13653,1397 @@ func (c *EC2) DescribeVolumesRequest(input *DescribeVolumesInput) (req *request. } if input == nil { - input = &DescribeVolumesInput{} + input = &DescribeFpgaImagesInput{} } - output = &DescribeVolumesOutput{} + output = &DescribeFpgaImagesOutput{} req = c.newRequest(op, input, output) return } -// DescribeVolumes API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified EBS volumes. -// -// If you are describing a long list of volumes, you can paginate the output -// to make the list more manageable. The MaxResults parameter sets the maximum -// number of results returned in a single page. If the list of results exceeds -// your MaxResults value, then that number of results is returned along with -// a NextToken value that can be passed to a subsequent DescribeVolumes request -// to retrieve the remaining results. +// DescribeFpgaImages API operation for Amazon Elastic Compute Cloud. // -// For more information about EBS volumes, see Amazon EBS Volumes (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes the Amazon FPGA Images (AFIs) available to you. These include public +// AFIs, private AFIs that you own, and AFIs owned by other AWS accounts for +// which you have load permissions. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVolumes for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumes -func (c *EC2) DescribeVolumes(input *DescribeVolumesInput) (*DescribeVolumesOutput, error) { - req, out := c.DescribeVolumesRequest(input) - err := req.Send() - return out, err +// API operation DescribeFpgaImages for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImages +func (c *EC2) DescribeFpgaImages(input *DescribeFpgaImagesInput) (*DescribeFpgaImagesOutput, error) { + req, out := c.DescribeFpgaImagesRequest(input) + return out, req.Send() } -// DescribeVolumesPages iterates over the pages of a DescribeVolumes operation, +// DescribeFpgaImagesWithContext is the same as DescribeFpgaImages with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeFpgaImages for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFpgaImagesWithContext(ctx aws.Context, input *DescribeFpgaImagesInput, opts ...request.Option) (*DescribeFpgaImagesOutput, error) { + req, out := c.DescribeFpgaImagesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeFpgaImagesPages iterates over the pages of a DescribeFpgaImages operation, // calling the "fn" function with the response data for each page. To stop // iterating, return false from the fn function. // -// See DescribeVolumes method for more information on how to use this operation. +// See DescribeFpgaImages method for more information on how to use this operation. // // Note: This operation can generate multiple requests to a service. // -// // Example iterating over at most 3 pages of a DescribeVolumes operation. +// // Example iterating over at most 3 pages of a DescribeFpgaImages operation. // pageNum := 0 -// err := client.DescribeVolumesPages(params, -// func(page *DescribeVolumesOutput, lastPage bool) bool { +// err := client.DescribeFpgaImagesPages(params, +// func(page *ec2.DescribeFpgaImagesOutput, lastPage bool) bool { // pageNum++ // fmt.Println(page) // return pageNum <= 3 // }) // -func (c *EC2) DescribeVolumesPages(input *DescribeVolumesInput, fn func(p *DescribeVolumesOutput, lastPage bool) (shouldContinue bool)) error { - page, _ := c.DescribeVolumesRequest(input) - page.Handlers.Build.PushBack(request.MakeAddToUserAgentFreeFormHandler("Paginator")) - return page.EachPage(func(p interface{}, lastPage bool) bool { - return fn(p.(*DescribeVolumesOutput), lastPage) - }) +func (c *EC2) DescribeFpgaImagesPages(input *DescribeFpgaImagesInput, fn func(*DescribeFpgaImagesOutput, bool) bool) error { + return c.DescribeFpgaImagesPagesWithContext(aws.BackgroundContext(), input, fn) } -const opDescribeVolumesModifications = "DescribeVolumesModifications" +// DescribeFpgaImagesPagesWithContext same as DescribeFpgaImagesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeFpgaImagesPagesWithContext(ctx aws.Context, input *DescribeFpgaImagesInput, fn func(*DescribeFpgaImagesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeFpgaImagesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeFpgaImagesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } -// DescribeVolumesModificationsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVolumesModifications operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. + for p.Next() { + if !fn(p.Page().(*DescribeFpgaImagesOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeHostReservationOfferings = "DescribeHostReservationOfferings" + +// DescribeHostReservationOfferingsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeHostReservationOfferings operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeVolumesModifications for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVolumesModifications method directly -// instead. +// See DescribeHostReservationOfferings for more information on using the DescribeHostReservationOfferings +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeVolumesModificationsRequest method. -// req, resp := client.DescribeVolumesModificationsRequest(params) +// +// // Example sending a request using the DescribeHostReservationOfferingsRequest method. +// req, resp := client.DescribeHostReservationOfferingsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModifications -func (c *EC2) DescribeVolumesModificationsRequest(input *DescribeVolumesModificationsInput) (req *request.Request, output *DescribeVolumesModificationsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferings +func (c *EC2) DescribeHostReservationOfferingsRequest(input *DescribeHostReservationOfferingsInput) (req *request.Request, output *DescribeHostReservationOfferingsOutput) { op := &request.Operation{ - Name: opDescribeVolumesModifications, + Name: opDescribeHostReservationOfferings, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeVolumesModificationsInput{} + input = &DescribeHostReservationOfferingsInput{} } - output = &DescribeVolumesModificationsOutput{} + output = &DescribeHostReservationOfferingsOutput{} req = c.newRequest(op, input, output) return } -// DescribeVolumesModifications API operation for Amazon Elastic Compute Cloud. -// -// Reports the current modification status of EBS volumes. +// DescribeHostReservationOfferings API operation for Amazon Elastic Compute Cloud. // -// Current-generation EBS volumes support modification of attributes including -// type, size, and (for io1 volumes) IOPS provisioning while either attached -// to or detached from an instance. Following an action from the API or the -// console to modify a volume, the status of the modification may be modifying, -// optimizing, completed, or failed. If a volume has never been modified, then -// certain elements of the returned VolumeModification objects are null. +// Describes the Dedicated Host reservations that are available to purchase. // -// You can also use CloudWatch Events to check the status of a modification -// to an EBS volume. For information about CloudWatch Events, see the Amazon -// CloudWatch Events User Guide (http://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). -// For more information, see Monitoring Volume Modifications" (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#monitoring_mods). +// The results describe all of the Dedicated Host reservation offerings, including +// offerings that might not match the instance family and Region of your Dedicated +// Hosts. When purchasing an offering, ensure that the instance family and Region +// of the offering matches that of the Dedicated Hosts with which it is to be +// associated. For more information about supported instance types, see Dedicated +// Hosts Overview (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVolumesModifications for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModifications -func (c *EC2) DescribeVolumesModifications(input *DescribeVolumesModificationsInput) (*DescribeVolumesModificationsOutput, error) { - req, out := c.DescribeVolumesModificationsRequest(input) - err := req.Send() - return out, err +// API operation DescribeHostReservationOfferings for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferings +func (c *EC2) DescribeHostReservationOfferings(input *DescribeHostReservationOfferingsInput) (*DescribeHostReservationOfferingsOutput, error) { + req, out := c.DescribeHostReservationOfferingsRequest(input) + return out, req.Send() } -const opDescribeVpcAttribute = "DescribeVpcAttribute" - -// DescribeVpcAttributeRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeHostReservationOfferingsWithContext is the same as DescribeHostReservationOfferings with the addition of +// the ability to pass a context and additional request options. // -// See DescribeVpcAttribute for usage and error information. +// See DescribeHostReservationOfferings for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpcAttribute method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeHostReservationOfferingsWithContext(ctx aws.Context, input *DescribeHostReservationOfferingsInput, opts ...request.Option) (*DescribeHostReservationOfferingsOutput, error) { + req, out := c.DescribeHostReservationOfferingsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeHostReservationOfferingsPages iterates over the pages of a DescribeHostReservationOfferings operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeHostReservationOfferings method for more information on how to use this operation. // -// // Example sending a request using the DescribeVpcAttributeRequest method. -// req, resp := client.DescribeVpcAttributeRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeHostReservationOfferings operation. +// pageNum := 0 +// err := client.DescribeHostReservationOfferingsPages(params, +// func(page *ec2.DescribeHostReservationOfferingsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttribute -func (c *EC2) DescribeVpcAttributeRequest(input *DescribeVpcAttributeInput) (req *request.Request, output *DescribeVpcAttributeOutput) { - op := &request.Operation{ - Name: opDescribeVpcAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeHostReservationOfferingsPages(input *DescribeHostReservationOfferingsInput, fn func(*DescribeHostReservationOfferingsOutput, bool) bool) error { + return c.DescribeHostReservationOfferingsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &DescribeVpcAttributeInput{} +// DescribeHostReservationOfferingsPagesWithContext same as DescribeHostReservationOfferingsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeHostReservationOfferingsPagesWithContext(ctx aws.Context, input *DescribeHostReservationOfferingsInput, fn func(*DescribeHostReservationOfferingsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeHostReservationOfferingsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeHostReservationOfferingsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &DescribeVpcAttributeOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeHostReservationOfferingsOutput), !p.HasNextPage()) { + break + } + } -// DescribeVpcAttribute API operation for Amazon Elastic Compute Cloud. -// -// Describes the specified attribute of the specified VPC. You can specify only -// one attribute at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttribute -func (c *EC2) DescribeVpcAttribute(input *DescribeVpcAttributeInput) (*DescribeVpcAttributeOutput, error) { - req, out := c.DescribeVpcAttributeRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opDescribeVpcClassicLink = "DescribeVpcClassicLink" +const opDescribeHostReservations = "DescribeHostReservations" -// DescribeVpcClassicLinkRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcClassicLink operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeHostReservationsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeHostReservations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeVpcClassicLink for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpcClassicLink method directly -// instead. +// See DescribeHostReservations for more information on using the DescribeHostReservations +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeVpcClassicLinkRequest method. -// req, resp := client.DescribeVpcClassicLinkRequest(params) +// +// // Example sending a request using the DescribeHostReservationsRequest method. +// req, resp := client.DescribeHostReservationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLink -func (c *EC2) DescribeVpcClassicLinkRequest(input *DescribeVpcClassicLinkInput) (req *request.Request, output *DescribeVpcClassicLinkOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservations +func (c *EC2) DescribeHostReservationsRequest(input *DescribeHostReservationsInput) (req *request.Request, output *DescribeHostReservationsOutput) { op := &request.Operation{ - Name: opDescribeVpcClassicLink, + Name: opDescribeHostReservations, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeVpcClassicLinkInput{} + input = &DescribeHostReservationsInput{} } - output = &DescribeVpcClassicLinkOutput{} + output = &DescribeHostReservationsOutput{} req = c.newRequest(op, input, output) return } -// DescribeVpcClassicLink API operation for Amazon Elastic Compute Cloud. +// DescribeHostReservations API operation for Amazon Elastic Compute Cloud. // -// Describes the ClassicLink status of one or more VPCs. +// Describes reservations that are associated with Dedicated Hosts in your account. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcClassicLink for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLink -func (c *EC2) DescribeVpcClassicLink(input *DescribeVpcClassicLinkInput) (*DescribeVpcClassicLinkOutput, error) { - req, out := c.DescribeVpcClassicLinkRequest(input) - err := req.Send() - return out, err +// API operation DescribeHostReservations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservations +func (c *EC2) DescribeHostReservations(input *DescribeHostReservationsInput) (*DescribeHostReservationsOutput, error) { + req, out := c.DescribeHostReservationsRequest(input) + return out, req.Send() } -const opDescribeVpcClassicLinkDnsSupport = "DescribeVpcClassicLinkDnsSupport" +// DescribeHostReservationsWithContext is the same as DescribeHostReservations with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeHostReservations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeHostReservationsWithContext(ctx aws.Context, input *DescribeHostReservationsInput, opts ...request.Option) (*DescribeHostReservationsOutput, error) { + req, out := c.DescribeHostReservationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcClassicLinkDnsSupport operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeHostReservationsPages iterates over the pages of a DescribeHostReservations operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeHostReservations method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// See DescribeVpcClassicLinkDnsSupport for usage and error information. +// // Example iterating over at most 3 pages of a DescribeHostReservations operation. +// pageNum := 0 +// err := client.DescribeHostReservationsPages(params, +// func(page *ec2.DescribeHostReservationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeHostReservationsPages(input *DescribeHostReservationsInput, fn func(*DescribeHostReservationsOutput, bool) bool) error { + return c.DescribeHostReservationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeHostReservationsPagesWithContext same as DescribeHostReservationsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeHostReservationsPagesWithContext(ctx aws.Context, input *DescribeHostReservationsInput, fn func(*DescribeHostReservationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeHostReservationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeHostReservationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeHostReservationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeHosts = "DescribeHosts" + +// DescribeHostsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeHosts operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpcClassicLinkDnsSupport method directly -// instead. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeHosts for more information on using the DescribeHosts +// API call, and error handling. // -// // Example sending a request using the DescribeVpcClassicLinkDnsSupportRequest method. -// req, resp := client.DescribeVpcClassicLinkDnsSupportRequest(params) +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeHostsRequest method. +// req, resp := client.DescribeHostsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupport -func (c *EC2) DescribeVpcClassicLinkDnsSupportRequest(input *DescribeVpcClassicLinkDnsSupportInput) (req *request.Request, output *DescribeVpcClassicLinkDnsSupportOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHosts +func (c *EC2) DescribeHostsRequest(input *DescribeHostsInput) (req *request.Request, output *DescribeHostsOutput) { op := &request.Operation{ - Name: opDescribeVpcClassicLinkDnsSupport, + Name: opDescribeHosts, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeVpcClassicLinkDnsSupportInput{} + input = &DescribeHostsInput{} } - output = &DescribeVpcClassicLinkDnsSupportOutput{} + output = &DescribeHostsOutput{} req = c.newRequest(op, input, output) return } -// DescribeVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. +// DescribeHosts API operation for Amazon Elastic Compute Cloud. // -// Describes the ClassicLink DNS support status of one or more VPCs. If enabled, -// the DNS hostname of a linked EC2-Classic instance resolves to its private -// IP address when addressed from an instance in the VPC to which it's linked. -// Similarly, the DNS hostname of an instance in a VPC resolves to its private -// IP address when addressed from a linked EC2-Classic instance. For more information -// about ClassicLink, see ClassicLink (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes the specified Dedicated Hosts or all your Dedicated Hosts. +// +// The results describe only the Dedicated Hosts in the Region you're currently +// using. All listed instances consume capacity on your Dedicated Host. Dedicated +// Hosts that have recently been released are listed with the state released. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcClassicLinkDnsSupport for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupport -func (c *EC2) DescribeVpcClassicLinkDnsSupport(input *DescribeVpcClassicLinkDnsSupportInput) (*DescribeVpcClassicLinkDnsSupportOutput, error) { - req, out := c.DescribeVpcClassicLinkDnsSupportRequest(input) - err := req.Send() - return out, err +// API operation DescribeHosts for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHosts +func (c *EC2) DescribeHosts(input *DescribeHostsInput) (*DescribeHostsOutput, error) { + req, out := c.DescribeHostsRequest(input) + return out, req.Send() } -const opDescribeVpcEndpointServices = "DescribeVpcEndpointServices" +// DescribeHostsWithContext is the same as DescribeHosts with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeHosts for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeHostsWithContext(ctx aws.Context, input *DescribeHostsInput, opts ...request.Option) (*DescribeHostsOutput, error) { + req, out := c.DescribeHostsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeVpcEndpointServicesRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcEndpointServices operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeHostsPages iterates over the pages of a DescribeHosts operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See DescribeVpcEndpointServices for usage and error information. +// See DescribeHosts method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpcEndpointServices method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeHosts operation. +// pageNum := 0 +// err := client.DescribeHostsPages(params, +// func(page *ec2.DescribeHostsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeHostsPages(input *DescribeHostsInput, fn func(*DescribeHostsOutput, bool) bool) error { + return c.DescribeHostsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeHostsPagesWithContext same as DescribeHostsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the DescribeVpcEndpointServicesRequest method. -// req, resp := client.DescribeVpcEndpointServicesRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeHostsPagesWithContext(ctx aws.Context, input *DescribeHostsInput, fn func(*DescribeHostsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeHostsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeHostsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeHostsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeIamInstanceProfileAssociations = "DescribeIamInstanceProfileAssociations" + +// DescribeIamInstanceProfileAssociationsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeIamInstanceProfileAssociations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeIamInstanceProfileAssociations for more information on using the DescribeIamInstanceProfileAssociations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeIamInstanceProfileAssociationsRequest method. +// req, resp := client.DescribeIamInstanceProfileAssociationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServices -func (c *EC2) DescribeVpcEndpointServicesRequest(input *DescribeVpcEndpointServicesInput) (req *request.Request, output *DescribeVpcEndpointServicesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociations +func (c *EC2) DescribeIamInstanceProfileAssociationsRequest(input *DescribeIamInstanceProfileAssociationsInput) (req *request.Request, output *DescribeIamInstanceProfileAssociationsOutput) { op := &request.Operation{ - Name: opDescribeVpcEndpointServices, + Name: opDescribeIamInstanceProfileAssociations, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DescribeVpcEndpointServicesInput{} + input = &DescribeIamInstanceProfileAssociationsInput{} } - output = &DescribeVpcEndpointServicesOutput{} + output = &DescribeIamInstanceProfileAssociationsOutput{} req = c.newRequest(op, input, output) return } -// DescribeVpcEndpointServices API operation for Amazon Elastic Compute Cloud. +// DescribeIamInstanceProfileAssociations API operation for Amazon Elastic Compute Cloud. // -// Describes all supported AWS services that can be specified when creating -// a VPC endpoint. +// Describes your IAM instance profile associations. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcEndpointServices for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServices -func (c *EC2) DescribeVpcEndpointServices(input *DescribeVpcEndpointServicesInput) (*DescribeVpcEndpointServicesOutput, error) { - req, out := c.DescribeVpcEndpointServicesRequest(input) - err := req.Send() - return out, err +// API operation DescribeIamInstanceProfileAssociations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociations +func (c *EC2) DescribeIamInstanceProfileAssociations(input *DescribeIamInstanceProfileAssociationsInput) (*DescribeIamInstanceProfileAssociationsOutput, error) { + req, out := c.DescribeIamInstanceProfileAssociationsRequest(input) + return out, req.Send() } -const opDescribeVpcEndpoints = "DescribeVpcEndpoints" - -// DescribeVpcEndpointsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcEndpoints operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeIamInstanceProfileAssociationsWithContext is the same as DescribeIamInstanceProfileAssociations with the addition of +// the ability to pass a context and additional request options. // -// See DescribeVpcEndpoints for usage and error information. +// See DescribeIamInstanceProfileAssociations for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpcEndpoints method directly -// instead. -// -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. -// -// // Example sending a request using the DescribeVpcEndpointsRequest method. -// req, resp := client.DescribeVpcEndpointsRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeIamInstanceProfileAssociationsWithContext(ctx aws.Context, input *DescribeIamInstanceProfileAssociationsInput, opts ...request.Option) (*DescribeIamInstanceProfileAssociationsOutput, error) { + req, out := c.DescribeIamInstanceProfileAssociationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeIamInstanceProfileAssociationsPages iterates over the pages of a DescribeIamInstanceProfileAssociations operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// See DescribeIamInstanceProfileAssociations method for more information on how to use this operation. // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpoints -func (c *EC2) DescribeVpcEndpointsRequest(input *DescribeVpcEndpointsInput) (req *request.Request, output *DescribeVpcEndpointsOutput) { - op := &request.Operation{ - Name: opDescribeVpcEndpoints, - HTTPMethod: "POST", - HTTPPath: "/", - } +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeIamInstanceProfileAssociations operation. +// pageNum := 0 +// err := client.DescribeIamInstanceProfileAssociationsPages(params, +// func(page *ec2.DescribeIamInstanceProfileAssociationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeIamInstanceProfileAssociationsPages(input *DescribeIamInstanceProfileAssociationsInput, fn func(*DescribeIamInstanceProfileAssociationsOutput, bool) bool) error { + return c.DescribeIamInstanceProfileAssociationsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &DescribeVpcEndpointsInput{} +// DescribeIamInstanceProfileAssociationsPagesWithContext same as DescribeIamInstanceProfileAssociationsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeIamInstanceProfileAssociationsPagesWithContext(ctx aws.Context, input *DescribeIamInstanceProfileAssociationsInput, fn func(*DescribeIamInstanceProfileAssociationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeIamInstanceProfileAssociationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeIamInstanceProfileAssociationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &DescribeVpcEndpointsOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeIamInstanceProfileAssociationsOutput), !p.HasNextPage()) { + break + } + } -// DescribeVpcEndpoints API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your VPC endpoints. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcEndpoints for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpoints -func (c *EC2) DescribeVpcEndpoints(input *DescribeVpcEndpointsInput) (*DescribeVpcEndpointsOutput, error) { - req, out := c.DescribeVpcEndpointsRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opDescribeVpcPeeringConnections = "DescribeVpcPeeringConnections" +const opDescribeIdFormat = "DescribeIdFormat" -// DescribeVpcPeeringConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcPeeringConnections operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeIdFormatRequest generates a "aws/request.Request" representing the +// client's request for the DescribeIdFormat operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeVpcPeeringConnections for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpcPeeringConnections method directly -// instead. +// See DescribeIdFormat for more information on using the DescribeIdFormat +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeVpcPeeringConnectionsRequest method. -// req, resp := client.DescribeVpcPeeringConnectionsRequest(params) +// +// // Example sending a request using the DescribeIdFormatRequest method. +// req, resp := client.DescribeIdFormatRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnections -func (c *EC2) DescribeVpcPeeringConnectionsRequest(input *DescribeVpcPeeringConnectionsInput) (req *request.Request, output *DescribeVpcPeeringConnectionsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormat +func (c *EC2) DescribeIdFormatRequest(input *DescribeIdFormatInput) (req *request.Request, output *DescribeIdFormatOutput) { op := &request.Operation{ - Name: opDescribeVpcPeeringConnections, + Name: opDescribeIdFormat, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeVpcPeeringConnectionsInput{} + input = &DescribeIdFormatInput{} } - output = &DescribeVpcPeeringConnectionsOutput{} + output = &DescribeIdFormatOutput{} req = c.newRequest(op, input, output) return } -// DescribeVpcPeeringConnections API operation for Amazon Elastic Compute Cloud. +// DescribeIdFormat API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your VPC peering connections. +// Describes the ID format settings for your resources on a per-Region basis, +// for example, to view which resource types are enabled for longer IDs. This +// request only returns information about resource types whose ID formats can +// be modified; it does not return information about other resource types. +// +// The following resource types support longer IDs: bundle | conversion-task +// | customer-gateway | dhcp-options | elastic-ip-allocation | elastic-ip-association +// | export-task | flow-log | image | import-task | instance | internet-gateway +// | network-acl | network-acl-association | network-interface | network-interface-attachment +// | prefix-list | reservation | route-table | route-table-association | security-group +// | snapshot | subnet | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association +// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. +// +// These settings apply to the IAM user who makes the request; they do not apply +// to the entire AWS account. By default, an IAM user defaults to the same settings +// as the root user, unless they explicitly override the settings by running +// the ModifyIdFormat command. Resources created with longer IDs are visible +// to all IAM users, regardless of these settings and provided that they have +// permission to use the relevant Describe command for the resource type. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcPeeringConnections for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnections -func (c *EC2) DescribeVpcPeeringConnections(input *DescribeVpcPeeringConnectionsInput) (*DescribeVpcPeeringConnectionsOutput, error) { - req, out := c.DescribeVpcPeeringConnectionsRequest(input) - err := req.Send() - return out, err +// API operation DescribeIdFormat for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormat +func (c *EC2) DescribeIdFormat(input *DescribeIdFormatInput) (*DescribeIdFormatOutput, error) { + req, out := c.DescribeIdFormatRequest(input) + return out, req.Send() } -const opDescribeVpcs = "DescribeVpcs" +// DescribeIdFormatWithContext is the same as DescribeIdFormat with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeIdFormat for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeIdFormatWithContext(ctx aws.Context, input *DescribeIdFormatInput, opts ...request.Option) (*DescribeIdFormatOutput, error) { + req, out := c.DescribeIdFormatRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeVpcsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpcs operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeIdentityIdFormat = "DescribeIdentityIdFormat" + +// DescribeIdentityIdFormatRequest generates a "aws/request.Request" representing the +// client's request for the DescribeIdentityIdFormat operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeVpcs for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpcs method directly -// instead. +// See DescribeIdentityIdFormat for more information on using the DescribeIdentityIdFormat +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeVpcsRequest method. -// req, resp := client.DescribeVpcsRequest(params) +// +// // Example sending a request using the DescribeIdentityIdFormatRequest method. +// req, resp := client.DescribeIdentityIdFormatRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcs -func (c *EC2) DescribeVpcsRequest(input *DescribeVpcsInput) (req *request.Request, output *DescribeVpcsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormat +func (c *EC2) DescribeIdentityIdFormatRequest(input *DescribeIdentityIdFormatInput) (req *request.Request, output *DescribeIdentityIdFormatOutput) { op := &request.Operation{ - Name: opDescribeVpcs, + Name: opDescribeIdentityIdFormat, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeVpcsInput{} + input = &DescribeIdentityIdFormatInput{} } - output = &DescribeVpcsOutput{} + output = &DescribeIdentityIdFormatOutput{} req = c.newRequest(op, input, output) return } -// DescribeVpcs API operation for Amazon Elastic Compute Cloud. +// DescribeIdentityIdFormat API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your VPCs. +// Describes the ID format settings for resources for the specified IAM user, +// IAM role, or root user. For example, you can view the resource types that +// are enabled for longer IDs. This request only returns information about resource +// types whose ID formats can be modified; it does not return information about +// other resource types. For more information, see Resource IDs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// The following resource types support longer IDs: bundle | conversion-task +// | customer-gateway | dhcp-options | elastic-ip-allocation | elastic-ip-association +// | export-task | flow-log | image | import-task | instance | internet-gateway +// | network-acl | network-acl-association | network-interface | network-interface-attachment +// | prefix-list | reservation | route-table | route-table-association | security-group +// | snapshot | subnet | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association +// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. +// +// These settings apply to the principal specified in the request. They do not +// apply to the principal that makes the request. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpcs for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcs -func (c *EC2) DescribeVpcs(input *DescribeVpcsInput) (*DescribeVpcsOutput, error) { - req, out := c.DescribeVpcsRequest(input) - err := req.Send() - return out, err +// API operation DescribeIdentityIdFormat for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormat +func (c *EC2) DescribeIdentityIdFormat(input *DescribeIdentityIdFormatInput) (*DescribeIdentityIdFormatOutput, error) { + req, out := c.DescribeIdentityIdFormatRequest(input) + return out, req.Send() } -const opDescribeVpnConnections = "DescribeVpnConnections" +// DescribeIdentityIdFormatWithContext is the same as DescribeIdentityIdFormat with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeIdentityIdFormat for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeIdentityIdFormatWithContext(ctx aws.Context, input *DescribeIdentityIdFormatInput, opts ...request.Option) (*DescribeIdentityIdFormatOutput, error) { + req, out := c.DescribeIdentityIdFormatRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeVpnConnectionsRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpnConnections operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeImageAttribute = "DescribeImageAttribute" + +// DescribeImageAttributeRequest generates a "aws/request.Request" representing the +// client's request for the DescribeImageAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeVpnConnections for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpnConnections method directly -// instead. +// See DescribeImageAttribute for more information on using the DescribeImageAttribute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeVpnConnectionsRequest method. -// req, resp := client.DescribeVpnConnectionsRequest(params) +// +// // Example sending a request using the DescribeImageAttributeRequest method. +// req, resp := client.DescribeImageAttributeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnections -func (c *EC2) DescribeVpnConnectionsRequest(input *DescribeVpnConnectionsInput) (req *request.Request, output *DescribeVpnConnectionsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageAttribute +func (c *EC2) DescribeImageAttributeRequest(input *DescribeImageAttributeInput) (req *request.Request, output *DescribeImageAttributeOutput) { op := &request.Operation{ - Name: opDescribeVpnConnections, + Name: opDescribeImageAttribute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeVpnConnectionsInput{} + input = &DescribeImageAttributeInput{} } - output = &DescribeVpnConnectionsOutput{} + output = &DescribeImageAttributeOutput{} req = c.newRequest(op, input, output) return } -// DescribeVpnConnections API operation for Amazon Elastic Compute Cloud. -// -// Describes one or more of your VPN connections. +// DescribeImageAttribute API operation for Amazon Elastic Compute Cloud. // -// For more information about VPN connections, see Adding a Hardware Virtual -// Private Gateway to Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html) -// in the Amazon Virtual Private Cloud User Guide. +// Describes the specified attribute of the specified AMI. You can specify only +// one attribute at a time. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpnConnections for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnections -func (c *EC2) DescribeVpnConnections(input *DescribeVpnConnectionsInput) (*DescribeVpnConnectionsOutput, error) { - req, out := c.DescribeVpnConnectionsRequest(input) - err := req.Send() - return out, err +// API operation DescribeImageAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageAttribute +func (c *EC2) DescribeImageAttribute(input *DescribeImageAttributeInput) (*DescribeImageAttributeOutput, error) { + req, out := c.DescribeImageAttributeRequest(input) + return out, req.Send() } -const opDescribeVpnGateways = "DescribeVpnGateways" +// DescribeImageAttributeWithContext is the same as DescribeImageAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeImageAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeImageAttributeWithContext(ctx aws.Context, input *DescribeImageAttributeInput, opts ...request.Option) (*DescribeImageAttributeOutput, error) { + req, out := c.DescribeImageAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DescribeVpnGatewaysRequest generates a "aws/request.Request" representing the -// client's request for the DescribeVpnGateways operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeImages = "DescribeImages" + +// DescribeImagesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeImages operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DescribeVpnGateways for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DescribeVpnGateways method directly -// instead. +// See DescribeImages for more information on using the DescribeImages +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DescribeVpnGatewaysRequest method. -// req, resp := client.DescribeVpnGatewaysRequest(params) +// +// // Example sending a request using the DescribeImagesRequest method. +// req, resp := client.DescribeImagesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGateways -func (c *EC2) DescribeVpnGatewaysRequest(input *DescribeVpnGatewaysInput) (req *request.Request, output *DescribeVpnGatewaysOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImages +func (c *EC2) DescribeImagesRequest(input *DescribeImagesInput) (req *request.Request, output *DescribeImagesOutput) { op := &request.Operation{ - Name: opDescribeVpnGateways, + Name: opDescribeImages, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DescribeVpnGatewaysInput{} + input = &DescribeImagesInput{} } - output = &DescribeVpnGatewaysOutput{} + output = &DescribeImagesOutput{} req = c.newRequest(op, input, output) return } -// DescribeVpnGateways API operation for Amazon Elastic Compute Cloud. +// DescribeImages API operation for Amazon Elastic Compute Cloud. // -// Describes one or more of your virtual private gateways. +// Describes the specified images (AMIs, AKIs, and ARIs) available to you or +// all of the images available to you. // -// For more information about virtual private gateways, see Adding an IPsec -// Hardware VPN to Your VPC (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html) -// in the Amazon Virtual Private Cloud User Guide. +// The images available to you include public images, private images that you +// own, and private images owned by other AWS accounts for which you have explicit +// launch permissions. +// +// Recently deregistered images appear in the returned results for a short interval +// and then return empty results. After all instances that reference a deregistered +// AMI are terminated, specifying the ID of the image results in an error indicating +// that the AMI ID cannot be found. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DescribeVpnGateways for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGateways -func (c *EC2) DescribeVpnGateways(input *DescribeVpnGatewaysInput) (*DescribeVpnGatewaysOutput, error) { - req, out := c.DescribeVpnGatewaysRequest(input) - err := req.Send() - return out, err +// API operation DescribeImages for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImages +func (c *EC2) DescribeImages(input *DescribeImagesInput) (*DescribeImagesOutput, error) { + req, out := c.DescribeImagesRequest(input) + return out, req.Send() } -const opDetachClassicLinkVpc = "DetachClassicLinkVpc" +// DescribeImagesWithContext is the same as DescribeImages with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeImages for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeImagesWithContext(ctx aws.Context, input *DescribeImagesInput, opts ...request.Option) (*DescribeImagesOutput, error) { + req, out := c.DescribeImagesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DetachClassicLinkVpcRequest generates a "aws/request.Request" representing the -// client's request for the DetachClassicLinkVpc operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeImportImageTasks = "DescribeImportImageTasks" + +// DescribeImportImageTasksRequest generates a "aws/request.Request" representing the +// client's request for the DescribeImportImageTasks operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DetachClassicLinkVpc for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DetachClassicLinkVpc method directly -// instead. +// See DescribeImportImageTasks for more information on using the DescribeImportImageTasks +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DetachClassicLinkVpcRequest method. -// req, resp := client.DetachClassicLinkVpcRequest(params) +// +// // Example sending a request using the DescribeImportImageTasksRequest method. +// req, resp := client.DescribeImportImageTasksRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpc -func (c *EC2) DetachClassicLinkVpcRequest(input *DetachClassicLinkVpcInput) (req *request.Request, output *DetachClassicLinkVpcOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasks +func (c *EC2) DescribeImportImageTasksRequest(input *DescribeImportImageTasksInput) (req *request.Request, output *DescribeImportImageTasksOutput) { op := &request.Operation{ - Name: opDetachClassicLinkVpc, + Name: opDescribeImportImageTasks, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DetachClassicLinkVpcInput{} + input = &DescribeImportImageTasksInput{} } - output = &DetachClassicLinkVpcOutput{} + output = &DescribeImportImageTasksOutput{} req = c.newRequest(op, input, output) return } -// DetachClassicLinkVpc API operation for Amazon Elastic Compute Cloud. +// DescribeImportImageTasks API operation for Amazon Elastic Compute Cloud. // -// Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance -// has been unlinked, the VPC security groups are no longer associated with -// it. An instance is automatically unlinked from a VPC when it's stopped. +// Displays details about an import virtual machine or import snapshot tasks +// that are already created. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachClassicLinkVpc for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpc -func (c *EC2) DetachClassicLinkVpc(input *DetachClassicLinkVpcInput) (*DetachClassicLinkVpcOutput, error) { - req, out := c.DetachClassicLinkVpcRequest(input) - err := req.Send() - return out, err +// API operation DescribeImportImageTasks for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasks +func (c *EC2) DescribeImportImageTasks(input *DescribeImportImageTasksInput) (*DescribeImportImageTasksOutput, error) { + req, out := c.DescribeImportImageTasksRequest(input) + return out, req.Send() } -const opDetachInternetGateway = "DetachInternetGateway" +// DescribeImportImageTasksWithContext is the same as DescribeImportImageTasks with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeImportImageTasks for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeImportImageTasksWithContext(ctx aws.Context, input *DescribeImportImageTasksInput, opts ...request.Option) (*DescribeImportImageTasksOutput, error) { + req, out := c.DescribeImportImageTasksRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DetachInternetGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DetachInternetGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeImportImageTasksPages iterates over the pages of a DescribeImportImageTasks operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeImportImageTasks method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// See DetachInternetGateway for usage and error information. +// // Example iterating over at most 3 pages of a DescribeImportImageTasks operation. +// pageNum := 0 +// err := client.DescribeImportImageTasksPages(params, +// func(page *ec2.DescribeImportImageTasksOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeImportImageTasksPages(input *DescribeImportImageTasksInput, fn func(*DescribeImportImageTasksOutput, bool) bool) error { + return c.DescribeImportImageTasksPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeImportImageTasksPagesWithContext same as DescribeImportImageTasksPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeImportImageTasksPagesWithContext(ctx aws.Context, input *DescribeImportImageTasksInput, fn func(*DescribeImportImageTasksOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeImportImageTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeImportImageTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeImportImageTasksOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeImportSnapshotTasks = "DescribeImportSnapshotTasks" + +// DescribeImportSnapshotTasksRequest generates a "aws/request.Request" representing the +// client's request for the DescribeImportSnapshotTasks operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DetachInternetGateway method directly -// instead. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeImportSnapshotTasks for more information on using the DescribeImportSnapshotTasks +// API call, and error handling. // -// // Example sending a request using the DetachInternetGatewayRequest method. -// req, resp := client.DetachInternetGatewayRequest(params) +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeImportSnapshotTasksRequest method. +// req, resp := client.DescribeImportSnapshotTasksRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGateway -func (c *EC2) DetachInternetGatewayRequest(input *DetachInternetGatewayInput) (req *request.Request, output *DetachInternetGatewayOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasks +func (c *EC2) DescribeImportSnapshotTasksRequest(input *DescribeImportSnapshotTasksInput) (req *request.Request, output *DescribeImportSnapshotTasksOutput) { op := &request.Operation{ - Name: opDetachInternetGateway, + Name: opDescribeImportSnapshotTasks, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DetachInternetGatewayInput{} + input = &DescribeImportSnapshotTasksInput{} } - output = &DetachInternetGatewayOutput{} + output = &DescribeImportSnapshotTasksOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DetachInternetGateway API operation for Amazon Elastic Compute Cloud. +// DescribeImportSnapshotTasks API operation for Amazon Elastic Compute Cloud. // -// Detaches an Internet gateway from a VPC, disabling connectivity between the -// Internet and the VPC. The VPC must not contain any running instances with -// Elastic IP addresses. +// Describes your import snapshot tasks. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachInternetGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGateway -func (c *EC2) DetachInternetGateway(input *DetachInternetGatewayInput) (*DetachInternetGatewayOutput, error) { - req, out := c.DetachInternetGatewayRequest(input) - err := req.Send() - return out, err +// API operation DescribeImportSnapshotTasks for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasks +func (c *EC2) DescribeImportSnapshotTasks(input *DescribeImportSnapshotTasksInput) (*DescribeImportSnapshotTasksOutput, error) { + req, out := c.DescribeImportSnapshotTasksRequest(input) + return out, req.Send() } -const opDetachNetworkInterface = "DetachNetworkInterface" +// DescribeImportSnapshotTasksWithContext is the same as DescribeImportSnapshotTasks with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeImportSnapshotTasks for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeImportSnapshotTasksWithContext(ctx aws.Context, input *DescribeImportSnapshotTasksInput, opts ...request.Option) (*DescribeImportSnapshotTasksOutput, error) { + req, out := c.DescribeImportSnapshotTasksRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DetachNetworkInterfaceRequest generates a "aws/request.Request" representing the -// client's request for the DetachNetworkInterface operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeImportSnapshotTasksPages iterates over the pages of a DescribeImportSnapshotTasks operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeImportSnapshotTasks method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeImportSnapshotTasks operation. +// pageNum := 0 +// err := client.DescribeImportSnapshotTasksPages(params, +// func(page *ec2.DescribeImportSnapshotTasksOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeImportSnapshotTasksPages(input *DescribeImportSnapshotTasksInput, fn func(*DescribeImportSnapshotTasksOutput, bool) bool) error { + return c.DescribeImportSnapshotTasksPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeImportSnapshotTasksPagesWithContext same as DescribeImportSnapshotTasksPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeImportSnapshotTasksPagesWithContext(ctx aws.Context, input *DescribeImportSnapshotTasksInput, fn func(*DescribeImportSnapshotTasksOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeImportSnapshotTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeImportSnapshotTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeImportSnapshotTasksOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeInstanceAttribute = "DescribeInstanceAttribute" + +// DescribeInstanceAttributeRequest generates a "aws/request.Request" representing the +// client's request for the DescribeInstanceAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DetachNetworkInterface for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DetachNetworkInterface method directly -// instead. +// See DescribeInstanceAttribute for more information on using the DescribeInstanceAttribute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DetachNetworkInterfaceRequest method. -// req, resp := client.DetachNetworkInterfaceRequest(params) +// +// // Example sending a request using the DescribeInstanceAttributeRequest method. +// req, resp := client.DescribeInstanceAttributeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterface -func (c *EC2) DetachNetworkInterfaceRequest(input *DetachNetworkInterfaceInput) (req *request.Request, output *DetachNetworkInterfaceOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceAttribute +func (c *EC2) DescribeInstanceAttributeRequest(input *DescribeInstanceAttributeInput) (req *request.Request, output *DescribeInstanceAttributeOutput) { op := &request.Operation{ - Name: opDetachNetworkInterface, + Name: opDescribeInstanceAttribute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DetachNetworkInterfaceInput{} + input = &DescribeInstanceAttributeInput{} } - output = &DetachNetworkInterfaceOutput{} + output = &DescribeInstanceAttributeOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DetachNetworkInterface API operation for Amazon Elastic Compute Cloud. +// DescribeInstanceAttribute API operation for Amazon Elastic Compute Cloud. // -// Detaches a network interface from an instance. +// Describes the specified attribute of the specified instance. You can specify +// only one attribute at a time. Valid attribute values are: instanceType | +// kernel | ramdisk | userData | disableApiTermination | instanceInitiatedShutdownBehavior +// | rootDeviceName | blockDeviceMapping | productCodes | sourceDestCheck | +// groupSet | ebsOptimized | sriovNetSupport // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachNetworkInterface for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterface -func (c *EC2) DetachNetworkInterface(input *DetachNetworkInterfaceInput) (*DetachNetworkInterfaceOutput, error) { - req, out := c.DetachNetworkInterfaceRequest(input) - err := req.Send() - return out, err +// API operation DescribeInstanceAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceAttribute +func (c *EC2) DescribeInstanceAttribute(input *DescribeInstanceAttributeInput) (*DescribeInstanceAttributeOutput, error) { + req, out := c.DescribeInstanceAttributeRequest(input) + return out, req.Send() } -const opDetachVolume = "DetachVolume" +// DescribeInstanceAttributeWithContext is the same as DescribeInstanceAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeInstanceAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstanceAttributeWithContext(ctx aws.Context, input *DescribeInstanceAttributeInput, opts ...request.Option) (*DescribeInstanceAttributeOutput, error) { + req, out := c.DescribeInstanceAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DetachVolumeRequest generates a "aws/request.Request" representing the -// client's request for the DetachVolume operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeInstanceCreditSpecifications = "DescribeInstanceCreditSpecifications" + +// DescribeInstanceCreditSpecificationsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeInstanceCreditSpecifications operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DetachVolume for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DetachVolume method directly -// instead. +// See DescribeInstanceCreditSpecifications for more information on using the DescribeInstanceCreditSpecifications +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DetachVolumeRequest method. -// req, resp := client.DetachVolumeRequest(params) +// +// // Example sending a request using the DescribeInstanceCreditSpecificationsRequest method. +// req, resp := client.DescribeInstanceCreditSpecificationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVolume -func (c *EC2) DetachVolumeRequest(input *DetachVolumeInput) (req *request.Request, output *VolumeAttachment) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceCreditSpecifications +func (c *EC2) DescribeInstanceCreditSpecificationsRequest(input *DescribeInstanceCreditSpecificationsInput) (req *request.Request, output *DescribeInstanceCreditSpecificationsOutput) { op := &request.Operation{ - Name: opDetachVolume, + Name: opDescribeInstanceCreditSpecifications, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DetachVolumeInput{} + input = &DescribeInstanceCreditSpecificationsInput{} } - output = &VolumeAttachment{} + output = &DescribeInstanceCreditSpecificationsOutput{} req = c.newRequest(op, input, output) return } -// DetachVolume API operation for Amazon Elastic Compute Cloud. +// DescribeInstanceCreditSpecifications API operation for Amazon Elastic Compute Cloud. // -// Detaches an EBS volume from an instance. Make sure to unmount any file systems -// on the device within your operating system before detaching the volume. Failure -// to do so can result in the volume becoming stuck in the busy state while -// detaching. If this happens, detachment can be delayed indefinitely until -// you unmount the volume, force detachment, reboot the instance, or all three. -// If an EBS volume is the root device of an instance, it can't be detached -// while the instance is running. To detach the root volume, stop the instance -// first. +// Describes the credit option for CPU usage of the specified T2 or T3 instances. +// The credit options are standard and unlimited. // -// When a volume with an AWS Marketplace product code is detached from an instance, -// the product code is no longer associated with the instance. +// If you do not specify an instance ID, Amazon EC2 returns T2 and T3 instances +// with the unlimited credit option, as well as instances that were previously +// configured as T2 or T3 with the unlimited credit option. For example, if +// you resize a T2 instance, while it is configured as unlimited, to an M4 instance, +// Amazon EC2 returns the M4 instance. +// +// If you specify one or more instance IDs, Amazon EC2 returns the credit option +// (standard or unlimited) of those instances. If you specify an instance ID +// that is not valid, such as an instance that is not a T2 or T3 instance, an +// error is returned. +// +// Recently terminated instances might appear in the returned results. This +// interval is usually less than one hour. +// +// If an Availability Zone is experiencing a service disruption and you specify +// instance IDs in the affected zone, or do not specify any instance IDs at +// all, the call fails. If you specify only instance IDs in an unaffected zone, +// the call works normally. // -// For more information, see Detaching an Amazon EBS Volume (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html) +// For more information, see Burstable Performance Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -10746,1852 +15051,2546 @@ func (c *EC2) DetachVolumeRequest(input *DetachVolumeInput) (req *request.Reques // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachVolume for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVolume -func (c *EC2) DetachVolume(input *DetachVolumeInput) (*VolumeAttachment, error) { - req, out := c.DetachVolumeRequest(input) - err := req.Send() - return out, err +// API operation DescribeInstanceCreditSpecifications for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceCreditSpecifications +func (c *EC2) DescribeInstanceCreditSpecifications(input *DescribeInstanceCreditSpecificationsInput) (*DescribeInstanceCreditSpecificationsOutput, error) { + req, out := c.DescribeInstanceCreditSpecificationsRequest(input) + return out, req.Send() } -const opDetachVpnGateway = "DetachVpnGateway" - -// DetachVpnGatewayRequest generates a "aws/request.Request" representing the -// client's request for the DetachVpnGateway operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeInstanceCreditSpecificationsWithContext is the same as DescribeInstanceCreditSpecifications with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeInstanceCreditSpecifications for details on how to use this API operation. // -// See DetachVpnGateway for usage and error information. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstanceCreditSpecificationsWithContext(ctx aws.Context, input *DescribeInstanceCreditSpecificationsInput, opts ...request.Option) (*DescribeInstanceCreditSpecificationsOutput, error) { + req, out := c.DescribeInstanceCreditSpecificationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeInstanceCreditSpecificationsPages iterates over the pages of a DescribeInstanceCreditSpecifications operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DetachVpnGateway method directly -// instead. +// See DescribeInstanceCreditSpecifications method for more information on how to use this operation. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// Note: This operation can generate multiple requests to a service. // -// // Example sending a request using the DetachVpnGatewayRequest method. -// req, resp := client.DetachVpnGatewayRequest(params) +// // Example iterating over at most 3 pages of a DescribeInstanceCreditSpecifications operation. +// pageNum := 0 +// err := client.DescribeInstanceCreditSpecificationsPages(params, +// func(page *ec2.DescribeInstanceCreditSpecificationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +func (c *EC2) DescribeInstanceCreditSpecificationsPages(input *DescribeInstanceCreditSpecificationsInput, fn func(*DescribeInstanceCreditSpecificationsOutput, bool) bool) error { + return c.DescribeInstanceCreditSpecificationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeInstanceCreditSpecificationsPagesWithContext same as DescribeInstanceCreditSpecificationsPages except +// it takes a Context and allows setting request options on the pages. // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGateway -func (c *EC2) DetachVpnGatewayRequest(input *DetachVpnGatewayInput) (req *request.Request, output *DetachVpnGatewayOutput) { - op := &request.Operation{ - Name: opDetachVpnGateway, - HTTPMethod: "POST", - HTTPPath: "/", +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstanceCreditSpecificationsPagesWithContext(ctx aws.Context, input *DescribeInstanceCreditSpecificationsInput, fn func(*DescribeInstanceCreditSpecificationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeInstanceCreditSpecificationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstanceCreditSpecificationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - if input == nil { - input = &DetachVpnGatewayInput{} + for p.Next() { + if !fn(p.Page().(*DescribeInstanceCreditSpecificationsOutput), !p.HasNextPage()) { + break + } } - output = &DetachVpnGatewayOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} - -// DetachVpnGateway API operation for Amazon Elastic Compute Cloud. -// -// Detaches a virtual private gateway from a VPC. You do this if you're planning -// to turn off the VPC and not use it anymore. You can confirm a virtual private -// gateway has been completely detached from a VPC by describing the virtual -// private gateway (any attachments to the virtual private gateway are also -// described). -// -// You must wait for the attachment's state to switch to detached before you -// can delete the VPC or attach a different VPC to the virtual private gateway. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DetachVpnGateway for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGateway -func (c *EC2) DetachVpnGateway(input *DetachVpnGatewayInput) (*DetachVpnGatewayOutput, error) { - req, out := c.DetachVpnGatewayRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opDisableVgwRoutePropagation = "DisableVgwRoutePropagation" +const opDescribeInstanceStatus = "DescribeInstanceStatus" -// DisableVgwRoutePropagationRequest generates a "aws/request.Request" representing the -// client's request for the DisableVgwRoutePropagation operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeInstanceStatusRequest generates a "aws/request.Request" representing the +// client's request for the DescribeInstanceStatus operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DisableVgwRoutePropagation for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DisableVgwRoutePropagation method directly -// instead. +// See DescribeInstanceStatus for more information on using the DescribeInstanceStatus +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DisableVgwRoutePropagationRequest method. -// req, resp := client.DisableVgwRoutePropagationRequest(params) +// +// // Example sending a request using the DescribeInstanceStatusRequest method. +// req, resp := client.DescribeInstanceStatusRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagation -func (c *EC2) DisableVgwRoutePropagationRequest(input *DisableVgwRoutePropagationInput) (req *request.Request, output *DisableVgwRoutePropagationOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatus +func (c *EC2) DescribeInstanceStatusRequest(input *DescribeInstanceStatusInput) (req *request.Request, output *DescribeInstanceStatusOutput) { op := &request.Operation{ - Name: opDisableVgwRoutePropagation, + Name: opDescribeInstanceStatus, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DisableVgwRoutePropagationInput{} + input = &DescribeInstanceStatusInput{} } - output = &DisableVgwRoutePropagationOutput{} + output = &DescribeInstanceStatusOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DisableVgwRoutePropagation API operation for Amazon Elastic Compute Cloud. +// DescribeInstanceStatus API operation for Amazon Elastic Compute Cloud. // -// Disables a virtual private gateway (VGW) from propagating routes to a specified -// route table of a VPC. +// Describes the status of the specified instances or all of your instances. +// By default, only running instances are described, unless you specifically +// indicate to return the status of all instances. +// +// Instance status includes the following components: +// +// * Status checks - Amazon EC2 performs status checks on running EC2 instances +// to identify hardware and software issues. For more information, see Status +// Checks for Your Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html) +// and Troubleshooting Instances with Failed Status Checks (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// * Scheduled events - Amazon EC2 can schedule events (such as reboot, stop, +// or terminate) for your instances related to hardware issues, software +// updates, or system maintenance. For more information, see Scheduled Events +// for Your Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// * Instance state - You can manage your instances from the moment you launch +// them through their termination. For more information, see Instance Lifecycle +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableVgwRoutePropagation for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagation -func (c *EC2) DisableVgwRoutePropagation(input *DisableVgwRoutePropagationInput) (*DisableVgwRoutePropagationOutput, error) { - req, out := c.DisableVgwRoutePropagationRequest(input) - err := req.Send() - return out, err +// API operation DescribeInstanceStatus for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatus +func (c *EC2) DescribeInstanceStatus(input *DescribeInstanceStatusInput) (*DescribeInstanceStatusOutput, error) { + req, out := c.DescribeInstanceStatusRequest(input) + return out, req.Send() } -const opDisableVpcClassicLink = "DisableVpcClassicLink" +// DescribeInstanceStatusWithContext is the same as DescribeInstanceStatus with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeInstanceStatus for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstanceStatusWithContext(ctx aws.Context, input *DescribeInstanceStatusInput, opts ...request.Option) (*DescribeInstanceStatusOutput, error) { + req, out := c.DescribeInstanceStatusRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DisableVpcClassicLinkRequest generates a "aws/request.Request" representing the -// client's request for the DisableVpcClassicLink operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeInstanceStatusPages iterates over the pages of a DescribeInstanceStatus operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeInstanceStatus method for more information on how to use this operation. // -// See DisableVpcClassicLink for usage and error information. +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DisableVpcClassicLink method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeInstanceStatus operation. +// pageNum := 0 +// err := client.DescribeInstanceStatusPages(params, +// func(page *ec2.DescribeInstanceStatusOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeInstanceStatusPages(input *DescribeInstanceStatusInput, fn func(*DescribeInstanceStatusOutput, bool) bool) error { + return c.DescribeInstanceStatusPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeInstanceStatusPagesWithContext same as DescribeInstanceStatusPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the DisableVpcClassicLinkRequest method. -// req, resp := client.DisableVpcClassicLinkRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstanceStatusPagesWithContext(ctx aws.Context, input *DescribeInstanceStatusInput, fn func(*DescribeInstanceStatusOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeInstanceStatusInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstanceStatusRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeInstanceStatusOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeInstanceTypeOfferings = "DescribeInstanceTypeOfferings" + +// DescribeInstanceTypeOfferingsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeInstanceTypeOfferings operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeInstanceTypeOfferings for more information on using the DescribeInstanceTypeOfferings +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeInstanceTypeOfferingsRequest method. +// req, resp := client.DescribeInstanceTypeOfferingsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLink -func (c *EC2) DisableVpcClassicLinkRequest(input *DisableVpcClassicLinkInput) (req *request.Request, output *DisableVpcClassicLinkOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypeOfferings +func (c *EC2) DescribeInstanceTypeOfferingsRequest(input *DescribeInstanceTypeOfferingsInput) (req *request.Request, output *DescribeInstanceTypeOfferingsOutput) { op := &request.Operation{ - Name: opDisableVpcClassicLink, + Name: opDescribeInstanceTypeOfferings, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DisableVpcClassicLinkInput{} + input = &DescribeInstanceTypeOfferingsInput{} } - output = &DisableVpcClassicLinkOutput{} + output = &DescribeInstanceTypeOfferingsOutput{} req = c.newRequest(op, input, output) return } -// DisableVpcClassicLink API operation for Amazon Elastic Compute Cloud. +// DescribeInstanceTypeOfferings API operation for Amazon Elastic Compute Cloud. // -// Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC -// that has EC2-Classic instances linked to it. +// Returns a list of all instance types offered. The results can be filtered +// by location (Region or Availability Zone). If no location is specified, the +// instance types offered in the current Region are returned. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableVpcClassicLink for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLink -func (c *EC2) DisableVpcClassicLink(input *DisableVpcClassicLinkInput) (*DisableVpcClassicLinkOutput, error) { - req, out := c.DisableVpcClassicLinkRequest(input) - err := req.Send() - return out, err +// API operation DescribeInstanceTypeOfferings for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypeOfferings +func (c *EC2) DescribeInstanceTypeOfferings(input *DescribeInstanceTypeOfferingsInput) (*DescribeInstanceTypeOfferingsOutput, error) { + req, out := c.DescribeInstanceTypeOfferingsRequest(input) + return out, req.Send() } -const opDisableVpcClassicLinkDnsSupport = "DisableVpcClassicLinkDnsSupport" +// DescribeInstanceTypeOfferingsWithContext is the same as DescribeInstanceTypeOfferings with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeInstanceTypeOfferings for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstanceTypeOfferingsWithContext(ctx aws.Context, input *DescribeInstanceTypeOfferingsInput, opts ...request.Option) (*DescribeInstanceTypeOfferingsOutput, error) { + req, out := c.DescribeInstanceTypeOfferingsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DisableVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the -// client's request for the DisableVpcClassicLinkDnsSupport operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeInstanceTypes = "DescribeInstanceTypes" + +// DescribeInstanceTypesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeInstanceTypes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DisableVpcClassicLinkDnsSupport for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DisableVpcClassicLinkDnsSupport method directly -// instead. +// See DescribeInstanceTypes for more information on using the DescribeInstanceTypes +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DisableVpcClassicLinkDnsSupportRequest method. -// req, resp := client.DisableVpcClassicLinkDnsSupportRequest(params) +// +// // Example sending a request using the DescribeInstanceTypesRequest method. +// req, resp := client.DescribeInstanceTypesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupport -func (c *EC2) DisableVpcClassicLinkDnsSupportRequest(input *DisableVpcClassicLinkDnsSupportInput) (req *request.Request, output *DisableVpcClassicLinkDnsSupportOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypes +func (c *EC2) DescribeInstanceTypesRequest(input *DescribeInstanceTypesInput) (req *request.Request, output *DescribeInstanceTypesOutput) { op := &request.Operation{ - Name: opDisableVpcClassicLinkDnsSupport, + Name: opDescribeInstanceTypes, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DisableVpcClassicLinkDnsSupportInput{} + input = &DescribeInstanceTypesInput{} } - output = &DisableVpcClassicLinkDnsSupportOutput{} + output = &DescribeInstanceTypesOutput{} req = c.newRequest(op, input, output) return } -// DisableVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. +// DescribeInstanceTypes API operation for Amazon Elastic Compute Cloud. // -// Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve -// to public IP addresses when addressed between a linked EC2-Classic instance -// and instances in the VPC to which it's linked. For more information about -// ClassicLink, see ClassicLink (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Returns a list of all instance types offered in your current AWS Region. +// The results can be filtered by the attributes of the instance types. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisableVpcClassicLinkDnsSupport for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupport -func (c *EC2) DisableVpcClassicLinkDnsSupport(input *DisableVpcClassicLinkDnsSupportInput) (*DisableVpcClassicLinkDnsSupportOutput, error) { - req, out := c.DisableVpcClassicLinkDnsSupportRequest(input) - err := req.Send() - return out, err +// API operation DescribeInstanceTypes for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypes +func (c *EC2) DescribeInstanceTypes(input *DescribeInstanceTypesInput) (*DescribeInstanceTypesOutput, error) { + req, out := c.DescribeInstanceTypesRequest(input) + return out, req.Send() } -const opDisassociateAddress = "DisassociateAddress" +// DescribeInstanceTypesWithContext is the same as DescribeInstanceTypes with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeInstanceTypes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstanceTypesWithContext(ctx aws.Context, input *DescribeInstanceTypesInput, opts ...request.Option) (*DescribeInstanceTypesOutput, error) { + req, out := c.DescribeInstanceTypesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// DisassociateAddressRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateAddress operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeInstances = "DescribeInstances" + +// DescribeInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DisassociateAddress for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DisassociateAddress method directly -// instead. +// See DescribeInstances for more information on using the DescribeInstances +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DisassociateAddressRequest method. -// req, resp := client.DisassociateAddressRequest(params) +// +// // Example sending a request using the DescribeInstancesRequest method. +// req, resp := client.DescribeInstancesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddress -func (c *EC2) DisassociateAddressRequest(input *DisassociateAddressInput) (req *request.Request, output *DisassociateAddressOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstances +func (c *EC2) DescribeInstancesRequest(input *DescribeInstancesInput) (req *request.Request, output *DescribeInstancesOutput) { op := &request.Operation{ - Name: opDisassociateAddress, + Name: opDescribeInstances, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DisassociateAddressInput{} + input = &DescribeInstancesInput{} } - output = &DisassociateAddressOutput{} + output = &DescribeInstancesOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DisassociateAddress API operation for Amazon Elastic Compute Cloud. +// DescribeInstances API operation for Amazon Elastic Compute Cloud. // -// Disassociates an Elastic IP address from the instance or network interface -// it's associated with. +// Describes the specified instances or all of AWS account's instances. // -// An Elastic IP address is for use in either the EC2-Classic platform or in -// a VPC. For more information, see Elastic IP Addresses (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) -// in the Amazon Elastic Compute Cloud User Guide. +// If you specify one or more instance IDs, Amazon EC2 returns information for +// those instances. If you do not specify instance IDs, Amazon EC2 returns information +// for all relevant instances. If you specify an instance ID that is not valid, +// an error is returned. If you specify an instance that you do not own, it +// is not included in the returned results. // -// This is an idempotent operation. If you perform the operation more than once, -// Amazon EC2 doesn't return an error. +// Recently terminated instances might appear in the returned results. This +// interval is usually less than one hour. +// +// If you describe instances in the rare case where an Availability Zone is +// experiencing a service disruption and you specify instance IDs that are in +// the affected zone, or do not specify any instance IDs at all, the call fails. +// If you describe instances and specify only instance IDs that are in an unaffected +// zone, the call works normally. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateAddress for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddress -func (c *EC2) DisassociateAddress(input *DisassociateAddressInput) (*DisassociateAddressOutput, error) { - req, out := c.DisassociateAddressRequest(input) - err := req.Send() - return out, err +// API operation DescribeInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstances +func (c *EC2) DescribeInstances(input *DescribeInstancesInput) (*DescribeInstancesOutput, error) { + req, out := c.DescribeInstancesRequest(input) + return out, req.Send() } -const opDisassociateIamInstanceProfile = "DisassociateIamInstanceProfile" - -// DisassociateIamInstanceProfileRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateIamInstanceProfile operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeInstancesWithContext is the same as DescribeInstances with the addition of +// the ability to pass a context and additional request options. // -// See DisassociateIamInstanceProfile for usage and error information. +// See DescribeInstances for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DisassociateIamInstanceProfile method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstancesWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.Option) (*DescribeInstancesOutput, error) { + req, out := c.DescribeInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeInstancesPages iterates over the pages of a DescribeInstances operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeInstances method for more information on how to use this operation. // -// // Example sending a request using the DisassociateIamInstanceProfileRequest method. -// req, resp := client.DisassociateIamInstanceProfileRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeInstances operation. +// pageNum := 0 +// err := client.DescribeInstancesPages(params, +// func(page *ec2.DescribeInstancesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfile -func (c *EC2) DisassociateIamInstanceProfileRequest(input *DisassociateIamInstanceProfileInput) (req *request.Request, output *DisassociateIamInstanceProfileOutput) { - op := &request.Operation{ - Name: opDisassociateIamInstanceProfile, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeInstancesPages(input *DescribeInstancesInput, fn func(*DescribeInstancesOutput, bool) bool) error { + return c.DescribeInstancesPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &DisassociateIamInstanceProfileInput{} +// DescribeInstancesPagesWithContext same as DescribeInstancesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInstancesPagesWithContext(ctx aws.Context, input *DescribeInstancesInput, fn func(*DescribeInstancesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeInstancesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstancesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &DisassociateIamInstanceProfileOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeInstancesOutput), !p.HasNextPage()) { + break + } + } -// DisassociateIamInstanceProfile API operation for Amazon Elastic Compute Cloud. -// -// Disassociates an IAM instance profile from a running or stopped instance. -// -// Use DescribeIamInstanceProfileAssociations to get the association ID. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateIamInstanceProfile for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfile -func (c *EC2) DisassociateIamInstanceProfile(input *DisassociateIamInstanceProfileInput) (*DisassociateIamInstanceProfileOutput, error) { - req, out := c.DisassociateIamInstanceProfileRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opDisassociateRouteTable = "DisassociateRouteTable" +const opDescribeInternetGateways = "DescribeInternetGateways" -// DisassociateRouteTableRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateRouteTable operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeInternetGatewaysRequest generates a "aws/request.Request" representing the +// client's request for the DescribeInternetGateways operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DisassociateRouteTable for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DisassociateRouteTable method directly -// instead. +// See DescribeInternetGateways for more information on using the DescribeInternetGateways +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DisassociateRouteTableRequest method. -// req, resp := client.DisassociateRouteTableRequest(params) +// +// // Example sending a request using the DescribeInternetGatewaysRequest method. +// req, resp := client.DescribeInternetGatewaysRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTable -func (c *EC2) DisassociateRouteTableRequest(input *DisassociateRouteTableInput) (req *request.Request, output *DisassociateRouteTableOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGateways +func (c *EC2) DescribeInternetGatewaysRequest(input *DescribeInternetGatewaysInput) (req *request.Request, output *DescribeInternetGatewaysOutput) { op := &request.Operation{ - Name: opDisassociateRouteTable, + Name: opDescribeInternetGateways, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &DisassociateRouteTableInput{} + input = &DescribeInternetGatewaysInput{} } - output = &DisassociateRouteTableOutput{} + output = &DescribeInternetGatewaysOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// DisassociateRouteTable API operation for Amazon Elastic Compute Cloud. -// -// Disassociates a subnet from a route table. +// DescribeInternetGateways API operation for Amazon Elastic Compute Cloud. // -// After you perform this action, the subnet no longer uses the routes in the -// route table. Instead, it uses the routes in the VPC's main route table. For -// more information about route tables, see Route Tables (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. +// Describes one or more of your internet gateways. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateRouteTable for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTable -func (c *EC2) DisassociateRouteTable(input *DisassociateRouteTableInput) (*DisassociateRouteTableOutput, error) { - req, out := c.DisassociateRouteTableRequest(input) - err := req.Send() - return out, err +// API operation DescribeInternetGateways for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGateways +func (c *EC2) DescribeInternetGateways(input *DescribeInternetGatewaysInput) (*DescribeInternetGatewaysOutput, error) { + req, out := c.DescribeInternetGatewaysRequest(input) + return out, req.Send() } -const opDisassociateSubnetCidrBlock = "DisassociateSubnetCidrBlock" - -// DisassociateSubnetCidrBlockRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateSubnetCidrBlock operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeInternetGatewaysWithContext is the same as DescribeInternetGateways with the addition of +// the ability to pass a context and additional request options. // -// See DisassociateSubnetCidrBlock for usage and error information. +// See DescribeInternetGateways for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DisassociateSubnetCidrBlock method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInternetGatewaysWithContext(ctx aws.Context, input *DescribeInternetGatewaysInput, opts ...request.Option) (*DescribeInternetGatewaysOutput, error) { + req, out := c.DescribeInternetGatewaysRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeInternetGatewaysPages iterates over the pages of a DescribeInternetGateways operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeInternetGateways method for more information on how to use this operation. // -// // Example sending a request using the DisassociateSubnetCidrBlockRequest method. -// req, resp := client.DisassociateSubnetCidrBlockRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeInternetGateways operation. +// pageNum := 0 +// err := client.DescribeInternetGatewaysPages(params, +// func(page *ec2.DescribeInternetGatewaysOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlock -func (c *EC2) DisassociateSubnetCidrBlockRequest(input *DisassociateSubnetCidrBlockInput) (req *request.Request, output *DisassociateSubnetCidrBlockOutput) { - op := &request.Operation{ - Name: opDisassociateSubnetCidrBlock, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeInternetGatewaysPages(input *DescribeInternetGatewaysInput, fn func(*DescribeInternetGatewaysOutput, bool) bool) error { + return c.DescribeInternetGatewaysPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &DisassociateSubnetCidrBlockInput{} +// DescribeInternetGatewaysPagesWithContext same as DescribeInternetGatewaysPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeInternetGatewaysPagesWithContext(ctx aws.Context, input *DescribeInternetGatewaysInput, fn func(*DescribeInternetGatewaysOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeInternetGatewaysInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInternetGatewaysRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &DisassociateSubnetCidrBlockOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeInternetGatewaysOutput), !p.HasNextPage()) { + break + } + } -// DisassociateSubnetCidrBlock API operation for Amazon Elastic Compute Cloud. -// -// Disassociates a CIDR block from a subnet. Currently, you can disassociate -// an IPv6 CIDR block only. You must detach or delete all gateways and resources -// that are associated with the CIDR block before you can disassociate it. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateSubnetCidrBlock for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlock -func (c *EC2) DisassociateSubnetCidrBlock(input *DisassociateSubnetCidrBlockInput) (*DisassociateSubnetCidrBlockOutput, error) { - req, out := c.DisassociateSubnetCidrBlockRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opDisassociateVpcCidrBlock = "DisassociateVpcCidrBlock" +const opDescribeKeyPairs = "DescribeKeyPairs" -// DisassociateVpcCidrBlockRequest generates a "aws/request.Request" representing the -// client's request for the DisassociateVpcCidrBlock operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeKeyPairsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeKeyPairs operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See DisassociateVpcCidrBlock for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DisassociateVpcCidrBlock method directly -// instead. +// See DescribeKeyPairs for more information on using the DescribeKeyPairs +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the DisassociateVpcCidrBlockRequest method. -// req, resp := client.DisassociateVpcCidrBlockRequest(params) +// +// // Example sending a request using the DescribeKeyPairsRequest method. +// req, resp := client.DescribeKeyPairsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlock -func (c *EC2) DisassociateVpcCidrBlockRequest(input *DisassociateVpcCidrBlockInput) (req *request.Request, output *DisassociateVpcCidrBlockOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairs +func (c *EC2) DescribeKeyPairsRequest(input *DescribeKeyPairsInput) (req *request.Request, output *DescribeKeyPairsOutput) { op := &request.Operation{ - Name: opDisassociateVpcCidrBlock, + Name: opDescribeKeyPairs, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &DisassociateVpcCidrBlockInput{} + input = &DescribeKeyPairsInput{} } - output = &DisassociateVpcCidrBlockOutput{} + output = &DescribeKeyPairsOutput{} req = c.newRequest(op, input, output) return } -// DisassociateVpcCidrBlock API operation for Amazon Elastic Compute Cloud. +// DescribeKeyPairs API operation for Amazon Elastic Compute Cloud. // -// Disassociates a CIDR block from a VPC. Currently, you can disassociate an -// IPv6 CIDR block only. You must detach or delete all gateways and resources -// that are associated with the CIDR block before you can disassociate it. +// Describes the specified key pairs or all of your key pairs. +// +// For more information about key pairs, see Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation DisassociateVpcCidrBlock for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlock -func (c *EC2) DisassociateVpcCidrBlock(input *DisassociateVpcCidrBlockInput) (*DisassociateVpcCidrBlockOutput, error) { - req, out := c.DisassociateVpcCidrBlockRequest(input) - err := req.Send() - return out, err +// API operation DescribeKeyPairs for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairs +func (c *EC2) DescribeKeyPairs(input *DescribeKeyPairsInput) (*DescribeKeyPairsOutput, error) { + req, out := c.DescribeKeyPairsRequest(input) + return out, req.Send() } -const opEnableVgwRoutePropagation = "EnableVgwRoutePropagation" +// DescribeKeyPairsWithContext is the same as DescribeKeyPairs with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeKeyPairs for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeKeyPairsWithContext(ctx aws.Context, input *DescribeKeyPairsInput, opts ...request.Option) (*DescribeKeyPairsOutput, error) { + req, out := c.DescribeKeyPairsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// EnableVgwRoutePropagationRequest generates a "aws/request.Request" representing the -// client's request for the EnableVgwRoutePropagation operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeLaunchTemplateVersions = "DescribeLaunchTemplateVersions" + +// DescribeLaunchTemplateVersionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeLaunchTemplateVersions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See EnableVgwRoutePropagation for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the EnableVgwRoutePropagation method directly -// instead. +// See DescribeLaunchTemplateVersions for more information on using the DescribeLaunchTemplateVersions +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the EnableVgwRoutePropagationRequest method. -// req, resp := client.EnableVgwRoutePropagationRequest(params) +// +// // Example sending a request using the DescribeLaunchTemplateVersionsRequest method. +// req, resp := client.DescribeLaunchTemplateVersionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagation -func (c *EC2) EnableVgwRoutePropagationRequest(input *EnableVgwRoutePropagationInput) (req *request.Request, output *EnableVgwRoutePropagationOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplateVersions +func (c *EC2) DescribeLaunchTemplateVersionsRequest(input *DescribeLaunchTemplateVersionsInput) (req *request.Request, output *DescribeLaunchTemplateVersionsOutput) { op := &request.Operation{ - Name: opEnableVgwRoutePropagation, + Name: opDescribeLaunchTemplateVersions, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &EnableVgwRoutePropagationInput{} + input = &DescribeLaunchTemplateVersionsInput{} } - output = &EnableVgwRoutePropagationOutput{} + output = &DescribeLaunchTemplateVersionsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// EnableVgwRoutePropagation API operation for Amazon Elastic Compute Cloud. +// DescribeLaunchTemplateVersions API operation for Amazon Elastic Compute Cloud. // -// Enables a virtual private gateway (VGW) to propagate routes to the specified -// route table of a VPC. +// Describes one or more versions of a specified launch template. You can describe +// all versions, individual versions, or a range of versions. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableVgwRoutePropagation for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagation -func (c *EC2) EnableVgwRoutePropagation(input *EnableVgwRoutePropagationInput) (*EnableVgwRoutePropagationOutput, error) { - req, out := c.EnableVgwRoutePropagationRequest(input) - err := req.Send() - return out, err +// API operation DescribeLaunchTemplateVersions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplateVersions +func (c *EC2) DescribeLaunchTemplateVersions(input *DescribeLaunchTemplateVersionsInput) (*DescribeLaunchTemplateVersionsOutput, error) { + req, out := c.DescribeLaunchTemplateVersionsRequest(input) + return out, req.Send() } -const opEnableVolumeIO = "EnableVolumeIO" - -// EnableVolumeIORequest generates a "aws/request.Request" representing the -// client's request for the EnableVolumeIO operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeLaunchTemplateVersionsWithContext is the same as DescribeLaunchTemplateVersions with the addition of +// the ability to pass a context and additional request options. // -// See EnableVolumeIO for usage and error information. +// See DescribeLaunchTemplateVersions for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the EnableVolumeIO method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeLaunchTemplateVersionsWithContext(ctx aws.Context, input *DescribeLaunchTemplateVersionsInput, opts ...request.Option) (*DescribeLaunchTemplateVersionsOutput, error) { + req, out := c.DescribeLaunchTemplateVersionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeLaunchTemplateVersionsPages iterates over the pages of a DescribeLaunchTemplateVersions operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeLaunchTemplateVersions method for more information on how to use this operation. // -// // Example sending a request using the EnableVolumeIORequest method. -// req, resp := client.EnableVolumeIORequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeLaunchTemplateVersions operation. +// pageNum := 0 +// err := client.DescribeLaunchTemplateVersionsPages(params, +// func(page *ec2.DescribeLaunchTemplateVersionsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIO -func (c *EC2) EnableVolumeIORequest(input *EnableVolumeIOInput) (req *request.Request, output *EnableVolumeIOOutput) { - op := &request.Operation{ - Name: opEnableVolumeIO, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeLaunchTemplateVersionsPages(input *DescribeLaunchTemplateVersionsInput, fn func(*DescribeLaunchTemplateVersionsOutput, bool) bool) error { + return c.DescribeLaunchTemplateVersionsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &EnableVolumeIOInput{} +// DescribeLaunchTemplateVersionsPagesWithContext same as DescribeLaunchTemplateVersionsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeLaunchTemplateVersionsPagesWithContext(ctx aws.Context, input *DescribeLaunchTemplateVersionsInput, fn func(*DescribeLaunchTemplateVersionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeLaunchTemplateVersionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeLaunchTemplateVersionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &EnableVolumeIOOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeLaunchTemplateVersionsOutput), !p.HasNextPage()) { + break + } + } -// EnableVolumeIO API operation for Amazon Elastic Compute Cloud. -// -// Enables I/O operations for a volume that had I/O operations disabled because -// the data on the volume was potentially inconsistent. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableVolumeIO for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIO -func (c *EC2) EnableVolumeIO(input *EnableVolumeIOInput) (*EnableVolumeIOOutput, error) { - req, out := c.EnableVolumeIORequest(input) - err := req.Send() - return out, err + return p.Err() } -const opEnableVpcClassicLink = "EnableVpcClassicLink" +const opDescribeLaunchTemplates = "DescribeLaunchTemplates" -// EnableVpcClassicLinkRequest generates a "aws/request.Request" representing the -// client's request for the EnableVpcClassicLink operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeLaunchTemplatesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeLaunchTemplates operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See EnableVpcClassicLink for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the EnableVpcClassicLink method directly -// instead. +// See DescribeLaunchTemplates for more information on using the DescribeLaunchTemplates +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the EnableVpcClassicLinkRequest method. -// req, resp := client.EnableVpcClassicLinkRequest(params) +// +// // Example sending a request using the DescribeLaunchTemplatesRequest method. +// req, resp := client.DescribeLaunchTemplatesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLink -func (c *EC2) EnableVpcClassicLinkRequest(input *EnableVpcClassicLinkInput) (req *request.Request, output *EnableVpcClassicLinkOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplates +func (c *EC2) DescribeLaunchTemplatesRequest(input *DescribeLaunchTemplatesInput) (req *request.Request, output *DescribeLaunchTemplatesOutput) { op := &request.Operation{ - Name: opEnableVpcClassicLink, + Name: opDescribeLaunchTemplates, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &EnableVpcClassicLinkInput{} + input = &DescribeLaunchTemplatesInput{} } - output = &EnableVpcClassicLinkOutput{} + output = &DescribeLaunchTemplatesOutput{} req = c.newRequest(op, input, output) return } -// EnableVpcClassicLink API operation for Amazon Elastic Compute Cloud. +// DescribeLaunchTemplates API operation for Amazon Elastic Compute Cloud. // -// Enables a VPC for ClassicLink. You can then link EC2-Classic instances to -// your ClassicLink-enabled VPC to allow communication over private IP addresses. -// You cannot enable your VPC for ClassicLink if any of your VPC's route tables -// have existing routes for address ranges within the 10.0.0.0/8 IP address -// range, excluding local routes for VPCs in the 10.0.0.0/16 and 10.1.0.0/16 -// IP address ranges. For more information, see ClassicLink (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes one or more launch templates. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableVpcClassicLink for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLink -func (c *EC2) EnableVpcClassicLink(input *EnableVpcClassicLinkInput) (*EnableVpcClassicLinkOutput, error) { - req, out := c.EnableVpcClassicLinkRequest(input) - err := req.Send() - return out, err +// API operation DescribeLaunchTemplates for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplates +func (c *EC2) DescribeLaunchTemplates(input *DescribeLaunchTemplatesInput) (*DescribeLaunchTemplatesOutput, error) { + req, out := c.DescribeLaunchTemplatesRequest(input) + return out, req.Send() } -const opEnableVpcClassicLinkDnsSupport = "EnableVpcClassicLinkDnsSupport" - -// EnableVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the -// client's request for the EnableVpcClassicLinkDnsSupport operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeLaunchTemplatesWithContext is the same as DescribeLaunchTemplates with the addition of +// the ability to pass a context and additional request options. // -// See EnableVpcClassicLinkDnsSupport for usage and error information. +// See DescribeLaunchTemplates for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the EnableVpcClassicLinkDnsSupport method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeLaunchTemplatesWithContext(ctx aws.Context, input *DescribeLaunchTemplatesInput, opts ...request.Option) (*DescribeLaunchTemplatesOutput, error) { + req, out := c.DescribeLaunchTemplatesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeLaunchTemplatesPages iterates over the pages of a DescribeLaunchTemplates operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeLaunchTemplates method for more information on how to use this operation. // -// // Example sending a request using the EnableVpcClassicLinkDnsSupportRequest method. -// req, resp := client.EnableVpcClassicLinkDnsSupportRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeLaunchTemplates operation. +// pageNum := 0 +// err := client.DescribeLaunchTemplatesPages(params, +// func(page *ec2.DescribeLaunchTemplatesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupport -func (c *EC2) EnableVpcClassicLinkDnsSupportRequest(input *EnableVpcClassicLinkDnsSupportInput) (req *request.Request, output *EnableVpcClassicLinkDnsSupportOutput) { - op := &request.Operation{ - Name: opEnableVpcClassicLinkDnsSupport, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeLaunchTemplatesPages(input *DescribeLaunchTemplatesInput, fn func(*DescribeLaunchTemplatesOutput, bool) bool) error { + return c.DescribeLaunchTemplatesPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &EnableVpcClassicLinkDnsSupportInput{} +// DescribeLaunchTemplatesPagesWithContext same as DescribeLaunchTemplatesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeLaunchTemplatesPagesWithContext(ctx aws.Context, input *DescribeLaunchTemplatesInput, fn func(*DescribeLaunchTemplatesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeLaunchTemplatesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeLaunchTemplatesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &EnableVpcClassicLinkDnsSupportOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeLaunchTemplatesOutput), !p.HasNextPage()) { + break + } + } -// EnableVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. -// -// Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, -// the DNS hostname of a linked EC2-Classic instance resolves to its private -// IP address when addressed from an instance in the VPC to which it's linked. -// Similarly, the DNS hostname of an instance in a VPC resolves to its private -// IP address when addressed from a linked EC2-Classic instance. For more information -// about ClassicLink, see ClassicLink (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation EnableVpcClassicLinkDnsSupport for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupport -func (c *EC2) EnableVpcClassicLinkDnsSupport(input *EnableVpcClassicLinkDnsSupportInput) (*EnableVpcClassicLinkDnsSupportOutput, error) { - req, out := c.EnableVpcClassicLinkDnsSupportRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opGetConsoleOutput = "GetConsoleOutput" +const opDescribeMovingAddresses = "DescribeMovingAddresses" -// GetConsoleOutputRequest generates a "aws/request.Request" representing the -// client's request for the GetConsoleOutput operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeMovingAddressesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeMovingAddresses operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See GetConsoleOutput for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the GetConsoleOutput method directly -// instead. +// See DescribeMovingAddresses for more information on using the DescribeMovingAddresses +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the GetConsoleOutputRequest method. -// req, resp := client.GetConsoleOutputRequest(params) +// +// // Example sending a request using the DescribeMovingAddressesRequest method. +// req, resp := client.DescribeMovingAddressesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutput -func (c *EC2) GetConsoleOutputRequest(input *GetConsoleOutputInput) (req *request.Request, output *GetConsoleOutputOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddresses +func (c *EC2) DescribeMovingAddressesRequest(input *DescribeMovingAddressesInput) (req *request.Request, output *DescribeMovingAddressesOutput) { op := &request.Operation{ - Name: opGetConsoleOutput, + Name: opDescribeMovingAddresses, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &GetConsoleOutputInput{} + input = &DescribeMovingAddressesInput{} } - output = &GetConsoleOutputOutput{} + output = &DescribeMovingAddressesOutput{} req = c.newRequest(op, input, output) return } -// GetConsoleOutput API operation for Amazon Elastic Compute Cloud. -// -// Gets the console output for the specified instance. -// -// Instances do not have a physical monitor through which you can view their -// console output. They also lack physical controls that allow you to power -// up, reboot, or shut them down. To allow these actions, we provide them through -// the Amazon EC2 API and command line interface. -// -// Instance console output is buffered and posted shortly after instance boot, -// reboot, and termination. Amazon EC2 preserves the most recent 64 KB output -// which is available for at least one hour after the most recent post. -// -// For Linux instances, the instance console output displays the exact console -// output that would normally be displayed on a physical monitor attached to -// a computer. This output is buffered because the instance produces it and -// then posts it to a store where the instance's owner can retrieve it. +// DescribeMovingAddresses API operation for Amazon Elastic Compute Cloud. // -// For Windows instances, the instance console output includes output from the -// EC2Config service. +// Describes your Elastic IP addresses that are being moved to the EC2-VPC platform, +// or that are being restored to the EC2-Classic platform. This request does +// not return information about any other Elastic IP addresses in your account. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetConsoleOutput for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutput -func (c *EC2) GetConsoleOutput(input *GetConsoleOutputInput) (*GetConsoleOutputOutput, error) { - req, out := c.GetConsoleOutputRequest(input) - err := req.Send() - return out, err +// API operation DescribeMovingAddresses for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddresses +func (c *EC2) DescribeMovingAddresses(input *DescribeMovingAddressesInput) (*DescribeMovingAddressesOutput, error) { + req, out := c.DescribeMovingAddressesRequest(input) + return out, req.Send() } -const opGetConsoleScreenshot = "GetConsoleScreenshot" - -// GetConsoleScreenshotRequest generates a "aws/request.Request" representing the -// client's request for the GetConsoleScreenshot operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. -// -// See GetConsoleScreenshot for usage and error information. +// DescribeMovingAddressesWithContext is the same as DescribeMovingAddresses with the addition of +// the ability to pass a context and additional request options. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the GetConsoleScreenshot method directly -// instead. +// See DescribeMovingAddresses for details on how to use this API operation. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. -// -// // Example sending a request using the GetConsoleScreenshotRequest method. -// req, resp := client.GetConsoleScreenshotRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeMovingAddressesWithContext(ctx aws.Context, input *DescribeMovingAddressesInput, opts ...request.Option) (*DescribeMovingAddressesOutput, error) { + req, out := c.DescribeMovingAddressesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeMovingAddressesPages iterates over the pages of a DescribeMovingAddresses operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeMovingAddresses method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeMovingAddresses operation. +// pageNum := 0 +// err := client.DescribeMovingAddressesPages(params, +// func(page *ec2.DescribeMovingAddressesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeMovingAddressesPages(input *DescribeMovingAddressesInput, fn func(*DescribeMovingAddressesOutput, bool) bool) error { + return c.DescribeMovingAddressesPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeMovingAddressesPagesWithContext same as DescribeMovingAddressesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeMovingAddressesPagesWithContext(ctx aws.Context, input *DescribeMovingAddressesInput, fn func(*DescribeMovingAddressesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeMovingAddressesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeMovingAddressesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeMovingAddressesOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeNatGateways = "DescribeNatGateways" + +// DescribeNatGatewaysRequest generates a "aws/request.Request" representing the +// client's request for the DescribeNatGateways operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeNatGateways for more information on using the DescribeNatGateways +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeNatGatewaysRequest method. +// req, resp := client.DescribeNatGatewaysRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshot -func (c *EC2) GetConsoleScreenshotRequest(input *GetConsoleScreenshotInput) (req *request.Request, output *GetConsoleScreenshotOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGateways +func (c *EC2) DescribeNatGatewaysRequest(input *DescribeNatGatewaysInput) (req *request.Request, output *DescribeNatGatewaysOutput) { op := &request.Operation{ - Name: opGetConsoleScreenshot, + Name: opDescribeNatGateways, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &GetConsoleScreenshotInput{} + input = &DescribeNatGatewaysInput{} } - output = &GetConsoleScreenshotOutput{} + output = &DescribeNatGatewaysOutput{} req = c.newRequest(op, input, output) return } -// GetConsoleScreenshot API operation for Amazon Elastic Compute Cloud. -// -// Retrieve a JPG-format screenshot of a running instance to help with troubleshooting. +// DescribeNatGateways API operation for Amazon Elastic Compute Cloud. // -// The returned content is Base64-encoded. +// Describes one or more of your NAT gateways. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetConsoleScreenshot for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshot -func (c *EC2) GetConsoleScreenshot(input *GetConsoleScreenshotInput) (*GetConsoleScreenshotOutput, error) { - req, out := c.GetConsoleScreenshotRequest(input) - err := req.Send() - return out, err +// API operation DescribeNatGateways for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGateways +func (c *EC2) DescribeNatGateways(input *DescribeNatGatewaysInput) (*DescribeNatGatewaysOutput, error) { + req, out := c.DescribeNatGatewaysRequest(input) + return out, req.Send() } -const opGetHostReservationPurchasePreview = "GetHostReservationPurchasePreview" +// DescribeNatGatewaysWithContext is the same as DescribeNatGateways with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeNatGateways for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNatGatewaysWithContext(ctx aws.Context, input *DescribeNatGatewaysInput, opts ...request.Option) (*DescribeNatGatewaysOutput, error) { + req, out := c.DescribeNatGatewaysRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetHostReservationPurchasePreviewRequest generates a "aws/request.Request" representing the -// client's request for the GetHostReservationPurchasePreview operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeNatGatewaysPages iterates over the pages of a DescribeNatGateways operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeNatGateways method for more information on how to use this operation. // -// See GetHostReservationPurchasePreview for usage and error information. +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the GetHostReservationPurchasePreview method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeNatGateways operation. +// pageNum := 0 +// err := client.DescribeNatGatewaysPages(params, +// func(page *ec2.DescribeNatGatewaysOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeNatGatewaysPages(input *DescribeNatGatewaysInput, fn func(*DescribeNatGatewaysOutput, bool) bool) error { + return c.DescribeNatGatewaysPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeNatGatewaysPagesWithContext same as DescribeNatGatewaysPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the GetHostReservationPurchasePreviewRequest method. -// req, resp := client.GetHostReservationPurchasePreviewRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNatGatewaysPagesWithContext(ctx aws.Context, input *DescribeNatGatewaysInput, fn func(*DescribeNatGatewaysOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeNatGatewaysInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeNatGatewaysRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeNatGatewaysOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeNetworkAcls = "DescribeNetworkAcls" + +// DescribeNetworkAclsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeNetworkAcls operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeNetworkAcls for more information on using the DescribeNetworkAcls +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeNetworkAclsRequest method. +// req, resp := client.DescribeNetworkAclsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreview -func (c *EC2) GetHostReservationPurchasePreviewRequest(input *GetHostReservationPurchasePreviewInput) (req *request.Request, output *GetHostReservationPurchasePreviewOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAcls +func (c *EC2) DescribeNetworkAclsRequest(input *DescribeNetworkAclsInput) (req *request.Request, output *DescribeNetworkAclsOutput) { op := &request.Operation{ - Name: opGetHostReservationPurchasePreview, + Name: opDescribeNetworkAcls, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &GetHostReservationPurchasePreviewInput{} + input = &DescribeNetworkAclsInput{} } - output = &GetHostReservationPurchasePreviewOutput{} + output = &DescribeNetworkAclsOutput{} req = c.newRequest(op, input, output) return } -// GetHostReservationPurchasePreview API operation for Amazon Elastic Compute Cloud. +// DescribeNetworkAcls API operation for Amazon Elastic Compute Cloud. // -// Preview a reservation purchase with configurations that match those of your -// Dedicated Host. You must have active Dedicated Hosts in your account before -// you purchase a reservation. +// Describes one or more of your network ACLs. // -// This is a preview of the PurchaseHostReservation action and does not result -// in the offering being purchased. +// For more information, see Network ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) +// in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetHostReservationPurchasePreview for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreview -func (c *EC2) GetHostReservationPurchasePreview(input *GetHostReservationPurchasePreviewInput) (*GetHostReservationPurchasePreviewOutput, error) { - req, out := c.GetHostReservationPurchasePreviewRequest(input) - err := req.Send() - return out, err +// API operation DescribeNetworkAcls for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAcls +func (c *EC2) DescribeNetworkAcls(input *DescribeNetworkAclsInput) (*DescribeNetworkAclsOutput, error) { + req, out := c.DescribeNetworkAclsRequest(input) + return out, req.Send() } -const opGetPasswordData = "GetPasswordData" +// DescribeNetworkAclsWithContext is the same as DescribeNetworkAcls with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeNetworkAcls for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNetworkAclsWithContext(ctx aws.Context, input *DescribeNetworkAclsInput, opts ...request.Option) (*DescribeNetworkAclsOutput, error) { + req, out := c.DescribeNetworkAclsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetPasswordDataRequest generates a "aws/request.Request" representing the -// client's request for the GetPasswordData operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeNetworkAclsPages iterates over the pages of a DescribeNetworkAcls operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See GetPasswordData for usage and error information. +// See DescribeNetworkAcls method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the GetPasswordData method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeNetworkAcls operation. +// pageNum := 0 +// err := client.DescribeNetworkAclsPages(params, +// func(page *ec2.DescribeNetworkAclsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeNetworkAclsPages(input *DescribeNetworkAclsInput, fn func(*DescribeNetworkAclsOutput, bool) bool) error { + return c.DescribeNetworkAclsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeNetworkAclsPagesWithContext same as DescribeNetworkAclsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the GetPasswordDataRequest method. -// req, resp := client.GetPasswordDataRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNetworkAclsPagesWithContext(ctx aws.Context, input *DescribeNetworkAclsInput, fn func(*DescribeNetworkAclsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeNetworkAclsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeNetworkAclsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeNetworkAclsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeNetworkInterfaceAttribute = "DescribeNetworkInterfaceAttribute" + +// DescribeNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the +// client's request for the DescribeNetworkInterfaceAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeNetworkInterfaceAttribute for more information on using the DescribeNetworkInterfaceAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeNetworkInterfaceAttributeRequest method. +// req, resp := client.DescribeNetworkInterfaceAttributeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordData -func (c *EC2) GetPasswordDataRequest(input *GetPasswordDataInput) (req *request.Request, output *GetPasswordDataOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttribute +func (c *EC2) DescribeNetworkInterfaceAttributeRequest(input *DescribeNetworkInterfaceAttributeInput) (req *request.Request, output *DescribeNetworkInterfaceAttributeOutput) { op := &request.Operation{ - Name: opGetPasswordData, + Name: opDescribeNetworkInterfaceAttribute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &GetPasswordDataInput{} + input = &DescribeNetworkInterfaceAttributeInput{} } - output = &GetPasswordDataOutput{} + output = &DescribeNetworkInterfaceAttributeOutput{} req = c.newRequest(op, input, output) return } -// GetPasswordData API operation for Amazon Elastic Compute Cloud. -// -// Retrieves the encrypted administrator password for an instance running Windows. -// -// The Windows password is generated at boot if the EC2Config service plugin, -// Ec2SetPassword, is enabled. This usually only happens the first time an AMI -// is launched, and then Ec2SetPassword is automatically disabled. The password -// is not generated for rebundled AMIs unless Ec2SetPassword is enabled before -// bundling. -// -// The password is encrypted using the key pair that you specified when you -// launched the instance. You must provide the corresponding key pair file. +// DescribeNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. // -// Password generation and encryption takes a few moments. We recommend that -// you wait up to 15 minutes after launching an instance before trying to retrieve -// the generated password. +// Describes a network interface attribute. You can specify only one attribute +// at a time. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetPasswordData for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordData -func (c *EC2) GetPasswordData(input *GetPasswordDataInput) (*GetPasswordDataOutput, error) { - req, out := c.GetPasswordDataRequest(input) - err := req.Send() - return out, err +// API operation DescribeNetworkInterfaceAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttribute +func (c *EC2) DescribeNetworkInterfaceAttribute(input *DescribeNetworkInterfaceAttributeInput) (*DescribeNetworkInterfaceAttributeOutput, error) { + req, out := c.DescribeNetworkInterfaceAttributeRequest(input) + return out, req.Send() } -const opGetReservedInstancesExchangeQuote = "GetReservedInstancesExchangeQuote" +// DescribeNetworkInterfaceAttributeWithContext is the same as DescribeNetworkInterfaceAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeNetworkInterfaceAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNetworkInterfaceAttributeWithContext(ctx aws.Context, input *DescribeNetworkInterfaceAttributeInput, opts ...request.Option) (*DescribeNetworkInterfaceAttributeOutput, error) { + req, out := c.DescribeNetworkInterfaceAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// GetReservedInstancesExchangeQuoteRequest generates a "aws/request.Request" representing the -// client's request for the GetReservedInstancesExchangeQuote operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeNetworkInterfacePermissions = "DescribeNetworkInterfacePermissions" + +// DescribeNetworkInterfacePermissionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeNetworkInterfacePermissions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See GetReservedInstancesExchangeQuote for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the GetReservedInstancesExchangeQuote method directly -// instead. +// See DescribeNetworkInterfacePermissions for more information on using the DescribeNetworkInterfacePermissions +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the GetReservedInstancesExchangeQuoteRequest method. -// req, resp := client.GetReservedInstancesExchangeQuoteRequest(params) +// +// // Example sending a request using the DescribeNetworkInterfacePermissionsRequest method. +// req, resp := client.DescribeNetworkInterfacePermissionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuote -func (c *EC2) GetReservedInstancesExchangeQuoteRequest(input *GetReservedInstancesExchangeQuoteInput) (req *request.Request, output *GetReservedInstancesExchangeQuoteOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacePermissions +func (c *EC2) DescribeNetworkInterfacePermissionsRequest(input *DescribeNetworkInterfacePermissionsInput) (req *request.Request, output *DescribeNetworkInterfacePermissionsOutput) { op := &request.Operation{ - Name: opGetReservedInstancesExchangeQuote, + Name: opDescribeNetworkInterfacePermissions, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &GetReservedInstancesExchangeQuoteInput{} + input = &DescribeNetworkInterfacePermissionsInput{} } - output = &GetReservedInstancesExchangeQuoteOutput{} + output = &DescribeNetworkInterfacePermissionsOutput{} req = c.newRequest(op, input, output) return } -// GetReservedInstancesExchangeQuote API operation for Amazon Elastic Compute Cloud. +// DescribeNetworkInterfacePermissions API operation for Amazon Elastic Compute Cloud. // -// Returns details about the values and term of your specified Convertible Reserved -// Instances. When a target configuration is specified, it returns information -// about whether the exchange is valid and can be performed. +// Describes the permissions for your network interfaces. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation GetReservedInstancesExchangeQuote for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuote -func (c *EC2) GetReservedInstancesExchangeQuote(input *GetReservedInstancesExchangeQuoteInput) (*GetReservedInstancesExchangeQuoteOutput, error) { - req, out := c.GetReservedInstancesExchangeQuoteRequest(input) - err := req.Send() - return out, err +// API operation DescribeNetworkInterfacePermissions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacePermissions +func (c *EC2) DescribeNetworkInterfacePermissions(input *DescribeNetworkInterfacePermissionsInput) (*DescribeNetworkInterfacePermissionsOutput, error) { + req, out := c.DescribeNetworkInterfacePermissionsRequest(input) + return out, req.Send() } -const opImportImage = "ImportImage" +// DescribeNetworkInterfacePermissionsWithContext is the same as DescribeNetworkInterfacePermissions with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeNetworkInterfacePermissions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNetworkInterfacePermissionsWithContext(ctx aws.Context, input *DescribeNetworkInterfacePermissionsInput, opts ...request.Option) (*DescribeNetworkInterfacePermissionsOutput, error) { + req, out := c.DescribeNetworkInterfacePermissionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ImportImageRequest generates a "aws/request.Request" representing the -// client's request for the ImportImage operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeNetworkInterfacePermissionsPages iterates over the pages of a DescribeNetworkInterfacePermissions operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See ImportImage for usage and error information. +// See DescribeNetworkInterfacePermissions method for more information on how to use this operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ImportImage method directly -// instead. +// Note: This operation can generate multiple requests to a service. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// // Example iterating over at most 3 pages of a DescribeNetworkInterfacePermissions operation. +// pageNum := 0 +// err := client.DescribeNetworkInterfacePermissionsPages(params, +// func(page *ec2.DescribeNetworkInterfacePermissionsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// // Example sending a request using the ImportImageRequest method. -// req, resp := client.ImportImageRequest(params) +func (c *EC2) DescribeNetworkInterfacePermissionsPages(input *DescribeNetworkInterfacePermissionsInput, fn func(*DescribeNetworkInterfacePermissionsOutput, bool) bool) error { + return c.DescribeNetworkInterfacePermissionsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeNetworkInterfacePermissionsPagesWithContext same as DescribeNetworkInterfacePermissionsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNetworkInterfacePermissionsPagesWithContext(ctx aws.Context, input *DescribeNetworkInterfacePermissionsInput, fn func(*DescribeNetworkInterfacePermissionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeNetworkInterfacePermissionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeNetworkInterfacePermissionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeNetworkInterfacePermissionsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeNetworkInterfaces = "DescribeNetworkInterfaces" + +// DescribeNetworkInterfacesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeNetworkInterfaces operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeNetworkInterfaces for more information on using the DescribeNetworkInterfaces +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeNetworkInterfacesRequest method. +// req, resp := client.DescribeNetworkInterfacesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImage -func (c *EC2) ImportImageRequest(input *ImportImageInput) (req *request.Request, output *ImportImageOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaces +func (c *EC2) DescribeNetworkInterfacesRequest(input *DescribeNetworkInterfacesInput) (req *request.Request, output *DescribeNetworkInterfacesOutput) { op := &request.Operation{ - Name: opImportImage, + Name: opDescribeNetworkInterfaces, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ImportImageInput{} + input = &DescribeNetworkInterfacesInput{} } - output = &ImportImageOutput{} + output = &DescribeNetworkInterfacesOutput{} req = c.newRequest(op, input, output) return } -// ImportImage API operation for Amazon Elastic Compute Cloud. +// DescribeNetworkInterfaces API operation for Amazon Elastic Compute Cloud. // -// Import single or multi-volume disk images or EBS snapshots into an Amazon -// Machine Image (AMI). For more information, see Importing a VM as an Image -// Using VM Import/Export (http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html) -// in the VM Import/Export User Guide. +// Describes one or more of your network interfaces. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportImage for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImage -func (c *EC2) ImportImage(input *ImportImageInput) (*ImportImageOutput, error) { - req, out := c.ImportImageRequest(input) - err := req.Send() - return out, err +// API operation DescribeNetworkInterfaces for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaces +func (c *EC2) DescribeNetworkInterfaces(input *DescribeNetworkInterfacesInput) (*DescribeNetworkInterfacesOutput, error) { + req, out := c.DescribeNetworkInterfacesRequest(input) + return out, req.Send() } -const opImportInstance = "ImportInstance" +// DescribeNetworkInterfacesWithContext is the same as DescribeNetworkInterfaces with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeNetworkInterfaces for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNetworkInterfacesWithContext(ctx aws.Context, input *DescribeNetworkInterfacesInput, opts ...request.Option) (*DescribeNetworkInterfacesOutput, error) { + req, out := c.DescribeNetworkInterfacesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ImportInstanceRequest generates a "aws/request.Request" representing the -// client's request for the ImportInstance operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeNetworkInterfacesPages iterates over the pages of a DescribeNetworkInterfaces operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeNetworkInterfaces method for more information on how to use this operation. // -// See ImportInstance for usage and error information. +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ImportInstance method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeNetworkInterfaces operation. +// pageNum := 0 +// err := client.DescribeNetworkInterfacesPages(params, +// func(page *ec2.DescribeNetworkInterfacesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeNetworkInterfacesPages(input *DescribeNetworkInterfacesInput, fn func(*DescribeNetworkInterfacesOutput, bool) bool) error { + return c.DescribeNetworkInterfacesPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeNetworkInterfacesPagesWithContext same as DescribeNetworkInterfacesPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the ImportInstanceRequest method. -// req, resp := client.ImportInstanceRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeNetworkInterfacesPagesWithContext(ctx aws.Context, input *DescribeNetworkInterfacesInput, fn func(*DescribeNetworkInterfacesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeNetworkInterfacesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeNetworkInterfacesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeNetworkInterfacesOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribePlacementGroups = "DescribePlacementGroups" + +// DescribePlacementGroupsRequest generates a "aws/request.Request" representing the +// client's request for the DescribePlacementGroups operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribePlacementGroups for more information on using the DescribePlacementGroups +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribePlacementGroupsRequest method. +// req, resp := client.DescribePlacementGroupsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstance -func (c *EC2) ImportInstanceRequest(input *ImportInstanceInput) (req *request.Request, output *ImportInstanceOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroups +func (c *EC2) DescribePlacementGroupsRequest(input *DescribePlacementGroupsInput) (req *request.Request, output *DescribePlacementGroupsOutput) { op := &request.Operation{ - Name: opImportInstance, + Name: opDescribePlacementGroups, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &ImportInstanceInput{} + input = &DescribePlacementGroupsInput{} } - output = &ImportInstanceOutput{} + output = &DescribePlacementGroupsOutput{} req = c.newRequest(op, input, output) return } -// ImportInstance API operation for Amazon Elastic Compute Cloud. -// -// Creates an import instance task using metadata from the specified disk image. -// ImportInstance only supports single-volume VMs. To import multi-volume VMs, -// use ImportImage. For more information, see Importing a Virtual Machine Using -// the Amazon EC2 CLI (http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html). +// DescribePlacementGroups API operation for Amazon Elastic Compute Cloud. // -// For information about the import manifest referenced by this API action, -// see VM Import Manifest (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). +// Describes the specified placement groups or all of your placement groups. +// For more information, see Placement Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportInstance for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstance -func (c *EC2) ImportInstance(input *ImportInstanceInput) (*ImportInstanceOutput, error) { - req, out := c.ImportInstanceRequest(input) - err := req.Send() - return out, err +// API operation DescribePlacementGroups for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroups +func (c *EC2) DescribePlacementGroups(input *DescribePlacementGroupsInput) (*DescribePlacementGroupsOutput, error) { + req, out := c.DescribePlacementGroupsRequest(input) + return out, req.Send() } -const opImportKeyPair = "ImportKeyPair" +// DescribePlacementGroupsWithContext is the same as DescribePlacementGroups with the addition of +// the ability to pass a context and additional request options. +// +// See DescribePlacementGroups for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribePlacementGroupsWithContext(ctx aws.Context, input *DescribePlacementGroupsInput, opts ...request.Option) (*DescribePlacementGroupsOutput, error) { + req, out := c.DescribePlacementGroupsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ImportKeyPairRequest generates a "aws/request.Request" representing the -// client's request for the ImportKeyPair operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribePrefixLists = "DescribePrefixLists" + +// DescribePrefixListsRequest generates a "aws/request.Request" representing the +// client's request for the DescribePrefixLists operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ImportKeyPair for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ImportKeyPair method directly -// instead. +// See DescribePrefixLists for more information on using the DescribePrefixLists +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ImportKeyPairRequest method. -// req, resp := client.ImportKeyPairRequest(params) +// +// // Example sending a request using the DescribePrefixListsRequest method. +// req, resp := client.DescribePrefixListsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPair -func (c *EC2) ImportKeyPairRequest(input *ImportKeyPairInput) (req *request.Request, output *ImportKeyPairOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixLists +func (c *EC2) DescribePrefixListsRequest(input *DescribePrefixListsInput) (req *request.Request, output *DescribePrefixListsOutput) { op := &request.Operation{ - Name: opImportKeyPair, + Name: opDescribePrefixLists, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ImportKeyPairInput{} + input = &DescribePrefixListsInput{} } - output = &ImportKeyPairOutput{} + output = &DescribePrefixListsOutput{} req = c.newRequest(op, input, output) return } -// ImportKeyPair API operation for Amazon Elastic Compute Cloud. -// -// Imports the public key from an RSA key pair that you created with a third-party -// tool. Compare this with CreateKeyPair, in which AWS creates the key pair -// and gives the keys to you (AWS keeps a copy of the public key). With ImportKeyPair, -// you create the key pair and give AWS just the public key. The private key -// is never transferred between you and AWS. +// DescribePrefixLists API operation for Amazon Elastic Compute Cloud. // -// For more information about key pairs, see Key Pairs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes available AWS services in a prefix list format, which includes +// the prefix list name and prefix list ID of the service and the IP address +// range for the service. A prefix list ID is required for creating an outbound +// security group rule that allows traffic from a VPC to access an AWS service +// through a gateway VPC endpoint. Currently, the services that support this +// action are Amazon S3 and Amazon DynamoDB. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportKeyPair for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPair -func (c *EC2) ImportKeyPair(input *ImportKeyPairInput) (*ImportKeyPairOutput, error) { - req, out := c.ImportKeyPairRequest(input) - err := req.Send() - return out, err +// API operation DescribePrefixLists for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixLists +func (c *EC2) DescribePrefixLists(input *DescribePrefixListsInput) (*DescribePrefixListsOutput, error) { + req, out := c.DescribePrefixListsRequest(input) + return out, req.Send() } -const opImportSnapshot = "ImportSnapshot" +// DescribePrefixListsWithContext is the same as DescribePrefixLists with the addition of +// the ability to pass a context and additional request options. +// +// See DescribePrefixLists for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribePrefixListsWithContext(ctx aws.Context, input *DescribePrefixListsInput, opts ...request.Option) (*DescribePrefixListsOutput, error) { + req, out := c.DescribePrefixListsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ImportSnapshotRequest generates a "aws/request.Request" representing the -// client's request for the ImportSnapshot operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribePrefixListsPages iterates over the pages of a DescribePrefixLists operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribePrefixLists method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribePrefixLists operation. +// pageNum := 0 +// err := client.DescribePrefixListsPages(params, +// func(page *ec2.DescribePrefixListsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// See ImportSnapshot for usage and error information. +func (c *EC2) DescribePrefixListsPages(input *DescribePrefixListsInput, fn func(*DescribePrefixListsOutput, bool) bool) error { + return c.DescribePrefixListsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribePrefixListsPagesWithContext same as DescribePrefixListsPages except +// it takes a Context and allows setting request options on the pages. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ImportSnapshot method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribePrefixListsPagesWithContext(ctx aws.Context, input *DescribePrefixListsInput, fn func(*DescribePrefixListsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribePrefixListsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribePrefixListsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribePrefixListsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribePrincipalIdFormat = "DescribePrincipalIdFormat" + +// DescribePrincipalIdFormatRequest generates a "aws/request.Request" representing the +// client's request for the DescribePrincipalIdFormat operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// // Example sending a request using the ImportSnapshotRequest method. -// req, resp := client.ImportSnapshotRequest(params) +// See DescribePrincipalIdFormat for more information on using the DescribePrincipalIdFormat +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribePrincipalIdFormatRequest method. +// req, resp := client.DescribePrincipalIdFormatRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshot -func (c *EC2) ImportSnapshotRequest(input *ImportSnapshotInput) (req *request.Request, output *ImportSnapshotOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrincipalIdFormat +func (c *EC2) DescribePrincipalIdFormatRequest(input *DescribePrincipalIdFormatInput) (req *request.Request, output *DescribePrincipalIdFormatOutput) { op := &request.Operation{ - Name: opImportSnapshot, + Name: opDescribePrincipalIdFormat, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ImportSnapshotInput{} + input = &DescribePrincipalIdFormatInput{} } - output = &ImportSnapshotOutput{} + output = &DescribePrincipalIdFormatOutput{} req = c.newRequest(op, input, output) return } -// ImportSnapshot API operation for Amazon Elastic Compute Cloud. +// DescribePrincipalIdFormat API operation for Amazon Elastic Compute Cloud. // -// Imports a disk into an EBS snapshot. +// Describes the ID format settings for the root user and all IAM roles and +// IAM users that have explicitly specified a longer ID (17-character ID) preference. +// +// By default, all IAM roles and IAM users default to the same ID settings as +// the root user, unless they explicitly override the settings. This request +// is useful for identifying those IAM users and IAM roles that have overridden +// the default ID settings. +// +// The following resource types support longer IDs: bundle | conversion-task +// | customer-gateway | dhcp-options | elastic-ip-allocation | elastic-ip-association +// | export-task | flow-log | image | import-task | instance | internet-gateway +// | network-acl | network-acl-association | network-interface | network-interface-attachment +// | prefix-list | reservation | route-table | route-table-association | security-group +// | snapshot | subnet | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association +// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportSnapshot for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshot -func (c *EC2) ImportSnapshot(input *ImportSnapshotInput) (*ImportSnapshotOutput, error) { - req, out := c.ImportSnapshotRequest(input) - err := req.Send() - return out, err +// API operation DescribePrincipalIdFormat for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrincipalIdFormat +func (c *EC2) DescribePrincipalIdFormat(input *DescribePrincipalIdFormatInput) (*DescribePrincipalIdFormatOutput, error) { + req, out := c.DescribePrincipalIdFormatRequest(input) + return out, req.Send() } -const opImportVolume = "ImportVolume" +// DescribePrincipalIdFormatWithContext is the same as DescribePrincipalIdFormat with the addition of +// the ability to pass a context and additional request options. +// +// See DescribePrincipalIdFormat for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribePrincipalIdFormatWithContext(ctx aws.Context, input *DescribePrincipalIdFormatInput, opts ...request.Option) (*DescribePrincipalIdFormatOutput, error) { + req, out := c.DescribePrincipalIdFormatRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ImportVolumeRequest generates a "aws/request.Request" representing the -// client's request for the ImportVolume operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribePrincipalIdFormatPages iterates over the pages of a DescribePrincipalIdFormat operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribePrincipalIdFormat method for more information on how to use this operation. // -// See ImportVolume for usage and error information. +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ImportVolume method directly -// instead. +// // Example iterating over at most 3 pages of a DescribePrincipalIdFormat operation. +// pageNum := 0 +// err := client.DescribePrincipalIdFormatPages(params, +// func(page *ec2.DescribePrincipalIdFormatOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribePrincipalIdFormatPages(input *DescribePrincipalIdFormatInput, fn func(*DescribePrincipalIdFormatOutput, bool) bool) error { + return c.DescribePrincipalIdFormatPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribePrincipalIdFormatPagesWithContext same as DescribePrincipalIdFormatPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the ImportVolumeRequest method. -// req, resp := client.ImportVolumeRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribePrincipalIdFormatPagesWithContext(ctx aws.Context, input *DescribePrincipalIdFormatInput, fn func(*DescribePrincipalIdFormatOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribePrincipalIdFormatInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribePrincipalIdFormatRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribePrincipalIdFormatOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribePublicIpv4Pools = "DescribePublicIpv4Pools" + +// DescribePublicIpv4PoolsRequest generates a "aws/request.Request" representing the +// client's request for the DescribePublicIpv4Pools operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribePublicIpv4Pools for more information on using the DescribePublicIpv4Pools +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribePublicIpv4PoolsRequest method. +// req, resp := client.DescribePublicIpv4PoolsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolume -func (c *EC2) ImportVolumeRequest(input *ImportVolumeInput) (req *request.Request, output *ImportVolumeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePublicIpv4Pools +func (c *EC2) DescribePublicIpv4PoolsRequest(input *DescribePublicIpv4PoolsInput) (req *request.Request, output *DescribePublicIpv4PoolsOutput) { op := &request.Operation{ - Name: opImportVolume, + Name: opDescribePublicIpv4Pools, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ImportVolumeInput{} + input = &DescribePublicIpv4PoolsInput{} } - output = &ImportVolumeOutput{} + output = &DescribePublicIpv4PoolsOutput{} req = c.newRequest(op, input, output) return } -// ImportVolume API operation for Amazon Elastic Compute Cloud. -// -// Creates an import volume task using metadata from the specified disk image.For -// more information, see Importing Disks to Amazon EBS (http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/importing-your-volumes-into-amazon-ebs.html). +// DescribePublicIpv4Pools API operation for Amazon Elastic Compute Cloud. // -// For information about the import manifest referenced by this API action, -// see VM Import Manifest (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). +// Describes the specified IPv4 address pools. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ImportVolume for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolume -func (c *EC2) ImportVolume(input *ImportVolumeInput) (*ImportVolumeOutput, error) { - req, out := c.ImportVolumeRequest(input) - err := req.Send() - return out, err +// API operation DescribePublicIpv4Pools for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePublicIpv4Pools +func (c *EC2) DescribePublicIpv4Pools(input *DescribePublicIpv4PoolsInput) (*DescribePublicIpv4PoolsOutput, error) { + req, out := c.DescribePublicIpv4PoolsRequest(input) + return out, req.Send() } -const opModifyHosts = "ModifyHosts" - -// ModifyHostsRequest generates a "aws/request.Request" representing the -// client's request for the ModifyHosts operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribePublicIpv4PoolsWithContext is the same as DescribePublicIpv4Pools with the addition of +// the ability to pass a context and additional request options. // -// See ModifyHosts for usage and error information. +// See DescribePublicIpv4Pools for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyHosts method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribePublicIpv4PoolsWithContext(ctx aws.Context, input *DescribePublicIpv4PoolsInput, opts ...request.Option) (*DescribePublicIpv4PoolsOutput, error) { + req, out := c.DescribePublicIpv4PoolsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribePublicIpv4PoolsPages iterates over the pages of a DescribePublicIpv4Pools operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribePublicIpv4Pools method for more information on how to use this operation. // -// // Example sending a request using the ModifyHostsRequest method. -// req, resp := client.ModifyHostsRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribePublicIpv4Pools operation. +// pageNum := 0 +// err := client.DescribePublicIpv4PoolsPages(params, +// func(page *ec2.DescribePublicIpv4PoolsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHosts -func (c *EC2) ModifyHostsRequest(input *ModifyHostsInput) (req *request.Request, output *ModifyHostsOutput) { - op := &request.Operation{ - Name: opModifyHosts, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribePublicIpv4PoolsPages(input *DescribePublicIpv4PoolsInput, fn func(*DescribePublicIpv4PoolsOutput, bool) bool) error { + return c.DescribePublicIpv4PoolsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ModifyHostsInput{} +// DescribePublicIpv4PoolsPagesWithContext same as DescribePublicIpv4PoolsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribePublicIpv4PoolsPagesWithContext(ctx aws.Context, input *DescribePublicIpv4PoolsInput, fn func(*DescribePublicIpv4PoolsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribePublicIpv4PoolsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribePublicIpv4PoolsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ModifyHostsOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribePublicIpv4PoolsOutput), !p.HasNextPage()) { + break + } + } -// ModifyHosts API operation for Amazon Elastic Compute Cloud. -// -// Modify the auto-placement setting of a Dedicated Host. When auto-placement -// is enabled, AWS will place instances that you launch with a tenancy of host, -// but without targeting a specific host ID, onto any available Dedicated Host -// in your account which has auto-placement enabled. When auto-placement is -// disabled, you need to provide a host ID if you want the instance to launch -// onto a specific host. If no host ID is provided, the instance will be launched -// onto a suitable host which has auto-placement enabled. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyHosts for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHosts -func (c *EC2) ModifyHosts(input *ModifyHostsInput) (*ModifyHostsOutput, error) { - req, out := c.ModifyHostsRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opModifyIdFormat = "ModifyIdFormat" +const opDescribeRegions = "DescribeRegions" -// ModifyIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the ModifyIdFormat operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeRegionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeRegions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifyIdFormat for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyIdFormat method directly -// instead. +// See DescribeRegions for more information on using the DescribeRegions +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifyIdFormatRequest method. -// req, resp := client.ModifyIdFormatRequest(params) +// +// // Example sending a request using the DescribeRegionsRequest method. +// req, resp := client.DescribeRegionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormat -func (c *EC2) ModifyIdFormatRequest(input *ModifyIdFormatInput) (req *request.Request, output *ModifyIdFormatOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegions +func (c *EC2) DescribeRegionsRequest(input *DescribeRegionsInput) (req *request.Request, output *DescribeRegionsOutput) { op := &request.Operation{ - Name: opModifyIdFormat, + Name: opDescribeRegions, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &ModifyIdFormatInput{} + input = &DescribeRegionsInput{} } - output = &ModifyIdFormatOutput{} + output = &DescribeRegionsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ModifyIdFormat API operation for Amazon Elastic Compute Cloud. +// DescribeRegions API operation for Amazon Elastic Compute Cloud. // -// Modifies the ID format for the specified resource on a per-region basis. -// You can specify that resources should receive longer IDs (17-character IDs) -// when they are created. The following resource types support longer IDs: instance -// | reservation | snapshot | volume. +// Describes the Regions that are enabled for your account, or all Regions. // -// This setting applies to the IAM user who makes the request; it does not apply -// to the entire AWS account. By default, an IAM user defaults to the same settings -// as the root user. If you're using this action as the root user, then these -// settings apply to the entire account, unless an IAM user explicitly overrides -// these settings for themselves. For more information, see Resource IDs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) -// in the Amazon Elastic Compute Cloud User Guide. +// For a list of the Regions supported by Amazon EC2, see Regions and Endpoints +// (https://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region). // -// Resources created with longer IDs are visible to all IAM roles and users, -// regardless of these settings and provided that they have permission to use -// the relevant Describe command for the resource type. +// For information about enabling and disabling Regions for your account, see +// Managing AWS Regions (https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) +// in the AWS General Reference. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyIdFormat for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormat -func (c *EC2) ModifyIdFormat(input *ModifyIdFormatInput) (*ModifyIdFormatOutput, error) { - req, out := c.ModifyIdFormatRequest(input) - err := req.Send() - return out, err +// API operation DescribeRegions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegions +func (c *EC2) DescribeRegions(input *DescribeRegionsInput) (*DescribeRegionsOutput, error) { + req, out := c.DescribeRegionsRequest(input) + return out, req.Send() } -const opModifyIdentityIdFormat = "ModifyIdentityIdFormat" +// DescribeRegionsWithContext is the same as DescribeRegions with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeRegions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeRegionsWithContext(ctx aws.Context, input *DescribeRegionsInput, opts ...request.Option) (*DescribeRegionsOutput, error) { + req, out := c.DescribeRegionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ModifyIdentityIdFormatRequest generates a "aws/request.Request" representing the -// client's request for the ModifyIdentityIdFormat operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeReservedInstances = "DescribeReservedInstances" + +// DescribeReservedInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeReservedInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifyIdentityIdFormat for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyIdentityIdFormat method directly -// instead. +// See DescribeReservedInstances for more information on using the DescribeReservedInstances +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifyIdentityIdFormatRequest method. -// req, resp := client.ModifyIdentityIdFormatRequest(params) +// +// // Example sending a request using the DescribeReservedInstancesRequest method. +// req, resp := client.DescribeReservedInstancesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormat -func (c *EC2) ModifyIdentityIdFormatRequest(input *ModifyIdentityIdFormatInput) (req *request.Request, output *ModifyIdentityIdFormatOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstances +func (c *EC2) DescribeReservedInstancesRequest(input *DescribeReservedInstancesInput) (req *request.Request, output *DescribeReservedInstancesOutput) { op := &request.Operation{ - Name: opModifyIdentityIdFormat, + Name: opDescribeReservedInstances, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &ModifyIdentityIdFormatInput{} + input = &DescribeReservedInstancesInput{} } - output = &ModifyIdentityIdFormatOutput{} + output = &DescribeReservedInstancesOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ModifyIdentityIdFormat API operation for Amazon Elastic Compute Cloud. +// DescribeReservedInstances API operation for Amazon Elastic Compute Cloud. // -// Modifies the ID format of a resource for a specified IAM user, IAM role, -// or the root user for an account; or all IAM users, IAM roles, and the root -// user for an account. You can specify that resources should receive longer -// IDs (17-character IDs) when they are created. +// Describes one or more of the Reserved Instances that you purchased. // -// The following resource types support longer IDs: instance | reservation | -// snapshot | volume. For more information, see Resource IDs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) +// For more information about Reserved Instances, see Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html) // in the Amazon Elastic Compute Cloud User Guide. // -// This setting applies to the principal specified in the request; it does not -// apply to the principal that makes the request. -// -// Resources created with longer IDs are visible to all IAM roles and users, -// regardless of these settings and provided that they have permission to use -// the relevant Describe command for the resource type. -// // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyIdentityIdFormat for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormat -func (c *EC2) ModifyIdentityIdFormat(input *ModifyIdentityIdFormatInput) (*ModifyIdentityIdFormatOutput, error) { - req, out := c.ModifyIdentityIdFormatRequest(input) - err := req.Send() - return out, err +// API operation DescribeReservedInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstances +func (c *EC2) DescribeReservedInstances(input *DescribeReservedInstancesInput) (*DescribeReservedInstancesOutput, error) { + req, out := c.DescribeReservedInstancesRequest(input) + return out, req.Send() } -const opModifyImageAttribute = "ModifyImageAttribute" +// DescribeReservedInstancesWithContext is the same as DescribeReservedInstances with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeReservedInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeReservedInstancesWithContext(ctx aws.Context, input *DescribeReservedInstancesInput, opts ...request.Option) (*DescribeReservedInstancesOutput, error) { + req, out := c.DescribeReservedInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ModifyImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyImageAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeReservedInstancesListings = "DescribeReservedInstancesListings" + +// DescribeReservedInstancesListingsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeReservedInstancesListings operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifyImageAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyImageAttribute method directly -// instead. +// See DescribeReservedInstancesListings for more information on using the DescribeReservedInstancesListings +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifyImageAttributeRequest method. -// req, resp := client.ModifyImageAttributeRequest(params) +// +// // Example sending a request using the DescribeReservedInstancesListingsRequest method. +// req, resp := client.DescribeReservedInstancesListingsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttribute -func (c *EC2) ModifyImageAttributeRequest(input *ModifyImageAttributeInput) (req *request.Request, output *ModifyImageAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListings +func (c *EC2) DescribeReservedInstancesListingsRequest(input *DescribeReservedInstancesListingsInput) (req *request.Request, output *DescribeReservedInstancesListingsOutput) { op := &request.Operation{ - Name: opModifyImageAttribute, + Name: opDescribeReservedInstancesListings, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &ModifyImageAttributeInput{} + input = &DescribeReservedInstancesListingsInput{} } - output = &ModifyImageAttributeOutput{} + output = &DescribeReservedInstancesListingsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ModifyImageAttribute API operation for Amazon Elastic Compute Cloud. +// DescribeReservedInstancesListings API operation for Amazon Elastic Compute Cloud. // -// Modifies the specified attribute of the specified AMI. You can specify only -// one attribute at a time. +// Describes your account's Reserved Instance listings in the Reserved Instance +// Marketplace. // -// AWS Marketplace product codes cannot be modified. Images with an AWS Marketplace -// product code cannot be made public. +// The Reserved Instance Marketplace matches sellers who want to resell Reserved +// Instance capacity that they no longer need with buyers who want to purchase +// additional capacity. Reserved Instances bought and sold through the Reserved +// Instance Marketplace work like any other Reserved Instances. +// +// As a seller, you choose to list some or all of your Reserved Instances, and +// you specify the upfront price to receive for them. Your Reserved Instances +// are then listed in the Reserved Instance Marketplace and are available for +// purchase. +// +// As a buyer, you specify the configuration of the Reserved Instance to purchase, +// and the Marketplace matches what you're searching for with what's available. +// The Marketplace first sells the lowest priced Reserved Instances to you, +// and continues to sell available Reserved Instance listings to you until your +// demand is met. You are charged based on the total price of all of the listings +// that you purchase. // -// The SriovNetSupport enhanced networking attribute cannot be changed using -// this command. Instead, enable SriovNetSupport on an instance and create an -// AMI from the instance. This will result in an image with SriovNetSupport -// enabled. +// For more information, see Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyImageAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttribute -func (c *EC2) ModifyImageAttribute(input *ModifyImageAttributeInput) (*ModifyImageAttributeOutput, error) { - req, out := c.ModifyImageAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeReservedInstancesListings for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListings +func (c *EC2) DescribeReservedInstancesListings(input *DescribeReservedInstancesListingsInput) (*DescribeReservedInstancesListingsOutput, error) { + req, out := c.DescribeReservedInstancesListingsRequest(input) + return out, req.Send() } -const opModifyInstanceAttribute = "ModifyInstanceAttribute" +// DescribeReservedInstancesListingsWithContext is the same as DescribeReservedInstancesListings with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeReservedInstancesListings for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeReservedInstancesListingsWithContext(ctx aws.Context, input *DescribeReservedInstancesListingsInput, opts ...request.Option) (*DescribeReservedInstancesListingsOutput, error) { + req, out := c.DescribeReservedInstancesListingsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ModifyInstanceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyInstanceAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeReservedInstancesModifications = "DescribeReservedInstancesModifications" + +// DescribeReservedInstancesModificationsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeReservedInstancesModifications operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifyInstanceAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyInstanceAttribute method directly -// instead. +// See DescribeReservedInstancesModifications for more information on using the DescribeReservedInstancesModifications +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifyInstanceAttributeRequest method. -// req, resp := client.ModifyInstanceAttributeRequest(params) +// +// // Example sending a request using the DescribeReservedInstancesModificationsRequest method. +// req, resp := client.DescribeReservedInstancesModificationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttribute -func (c *EC2) ModifyInstanceAttributeRequest(input *ModifyInstanceAttributeInput) (req *request.Request, output *ModifyInstanceAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModifications +func (c *EC2) DescribeReservedInstancesModificationsRequest(input *DescribeReservedInstancesModificationsInput) (req *request.Request, output *DescribeReservedInstancesModificationsOutput) { op := &request.Operation{ - Name: opModifyInstanceAttribute, + Name: opDescribeReservedInstancesModifications, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "", + TruncationToken: "", + }, } if input == nil { - input = &ModifyInstanceAttributeInput{} + input = &DescribeReservedInstancesModificationsInput{} } - output = &ModifyInstanceAttributeOutput{} + output = &DescribeReservedInstancesModificationsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ModifyInstanceAttribute API operation for Amazon Elastic Compute Cloud. +// DescribeReservedInstancesModifications API operation for Amazon Elastic Compute Cloud. // -// Modifies the specified attribute of the specified instance. You can specify -// only one attribute at a time. +// Describes the modifications made to your Reserved Instances. If no parameter +// is specified, information about all your Reserved Instances modification +// requests is returned. If a modification ID is specified, only information +// about the specific modification is returned. // -// To modify some attributes, the instance must be stopped. For more information, -// see Modifying Attributes of a Stopped Instance (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingAttributesWhileInstanceStopped.html) +// For more information, see Modifying Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -12599,2848 +17598,3831 @@ func (c *EC2) ModifyInstanceAttributeRequest(input *ModifyInstanceAttributeInput // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyInstanceAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttribute -func (c *EC2) ModifyInstanceAttribute(input *ModifyInstanceAttributeInput) (*ModifyInstanceAttributeOutput, error) { - req, out := c.ModifyInstanceAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeReservedInstancesModifications for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModifications +func (c *EC2) DescribeReservedInstancesModifications(input *DescribeReservedInstancesModificationsInput) (*DescribeReservedInstancesModificationsOutput, error) { + req, out := c.DescribeReservedInstancesModificationsRequest(input) + return out, req.Send() } -const opModifyInstancePlacement = "ModifyInstancePlacement" +// DescribeReservedInstancesModificationsWithContext is the same as DescribeReservedInstancesModifications with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeReservedInstancesModifications for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeReservedInstancesModificationsWithContext(ctx aws.Context, input *DescribeReservedInstancesModificationsInput, opts ...request.Option) (*DescribeReservedInstancesModificationsOutput, error) { + req, out := c.DescribeReservedInstancesModificationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ModifyInstancePlacementRequest generates a "aws/request.Request" representing the -// client's request for the ModifyInstancePlacement operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeReservedInstancesModificationsPages iterates over the pages of a DescribeReservedInstancesModifications operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See ModifyInstancePlacement for usage and error information. +// See DescribeReservedInstancesModifications method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyInstancePlacement method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeReservedInstancesModifications operation. +// pageNum := 0 +// err := client.DescribeReservedInstancesModificationsPages(params, +// func(page *ec2.DescribeReservedInstancesModificationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeReservedInstancesModificationsPages(input *DescribeReservedInstancesModificationsInput, fn func(*DescribeReservedInstancesModificationsOutput, bool) bool) error { + return c.DescribeReservedInstancesModificationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeReservedInstancesModificationsPagesWithContext same as DescribeReservedInstancesModificationsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the ModifyInstancePlacementRequest method. -// req, resp := client.ModifyInstancePlacementRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeReservedInstancesModificationsPagesWithContext(ctx aws.Context, input *DescribeReservedInstancesModificationsInput, fn func(*DescribeReservedInstancesModificationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeReservedInstancesModificationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeReservedInstancesModificationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeReservedInstancesModificationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeReservedInstancesOfferings = "DescribeReservedInstancesOfferings" + +// DescribeReservedInstancesOfferingsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeReservedInstancesOfferings operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeReservedInstancesOfferings for more information on using the DescribeReservedInstancesOfferings +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeReservedInstancesOfferingsRequest method. +// req, resp := client.DescribeReservedInstancesOfferingsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacement -func (c *EC2) ModifyInstancePlacementRequest(input *ModifyInstancePlacementInput) (req *request.Request, output *ModifyInstancePlacementOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferings +func (c *EC2) DescribeReservedInstancesOfferingsRequest(input *DescribeReservedInstancesOfferingsInput) (req *request.Request, output *DescribeReservedInstancesOfferingsOutput) { op := &request.Operation{ - Name: opModifyInstancePlacement, + Name: opDescribeReservedInstancesOfferings, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ModifyInstancePlacementInput{} + input = &DescribeReservedInstancesOfferingsInput{} } - output = &ModifyInstancePlacementOutput{} + output = &DescribeReservedInstancesOfferingsOutput{} req = c.newRequest(op, input, output) return } -// ModifyInstancePlacement API operation for Amazon Elastic Compute Cloud. -// -// Set the instance affinity value for a specific stopped instance and modify -// the instance tenancy setting. -// -// Instance affinity is disabled by default. When instance affinity is host -// and it is not associated with a specific Dedicated Host, the next time it -// is launched it will automatically be associated with the host it lands on. -// This relationship will persist if the instance is stopped/started, or rebooted. +// DescribeReservedInstancesOfferings API operation for Amazon Elastic Compute Cloud. // -// You can modify the host ID associated with a stopped instance. If a stopped -// instance has a new host ID association, the instance will target that host -// when restarted. +// Describes Reserved Instance offerings that are available for purchase. With +// Reserved Instances, you purchase the right to launch instances for a period +// of time. During that time period, you do not receive insufficient capacity +// errors, and you pay a lower usage rate than the rate charged for On-Demand +// instances for the actual time used. // -// You can modify the tenancy of a stopped instance with a tenancy of host or -// dedicated. +// If you have listed your own Reserved Instances for sale in the Reserved Instance +// Marketplace, they will be excluded from these results. This is to ensure +// that you do not purchase your own Reserved Instances. // -// Affinity, hostID, and tenancy are not required parameters, but at least one -// of them must be specified in the request. Affinity and tenancy can be modified -// in the same request, but tenancy can only be modified on instances that are -// stopped. +// For more information, see Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyInstancePlacement for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacement -func (c *EC2) ModifyInstancePlacement(input *ModifyInstancePlacementInput) (*ModifyInstancePlacementOutput, error) { - req, out := c.ModifyInstancePlacementRequest(input) - err := req.Send() - return out, err +// API operation DescribeReservedInstancesOfferings for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferings +func (c *EC2) DescribeReservedInstancesOfferings(input *DescribeReservedInstancesOfferingsInput) (*DescribeReservedInstancesOfferingsOutput, error) { + req, out := c.DescribeReservedInstancesOfferingsRequest(input) + return out, req.Send() } -const opModifyNetworkInterfaceAttribute = "ModifyNetworkInterfaceAttribute" - -// ModifyNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyNetworkInterfaceAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeReservedInstancesOfferingsWithContext is the same as DescribeReservedInstancesOfferings with the addition of +// the ability to pass a context and additional request options. // -// See ModifyNetworkInterfaceAttribute for usage and error information. +// See DescribeReservedInstancesOfferings for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyNetworkInterfaceAttribute method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeReservedInstancesOfferingsWithContext(ctx aws.Context, input *DescribeReservedInstancesOfferingsInput, opts ...request.Option) (*DescribeReservedInstancesOfferingsOutput, error) { + req, out := c.DescribeReservedInstancesOfferingsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeReservedInstancesOfferingsPages iterates over the pages of a DescribeReservedInstancesOfferings operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeReservedInstancesOfferings method for more information on how to use this operation. // -// // Example sending a request using the ModifyNetworkInterfaceAttributeRequest method. -// req, resp := client.ModifyNetworkInterfaceAttributeRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeReservedInstancesOfferings operation. +// pageNum := 0 +// err := client.DescribeReservedInstancesOfferingsPages(params, +// func(page *ec2.DescribeReservedInstancesOfferingsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttribute -func (c *EC2) ModifyNetworkInterfaceAttributeRequest(input *ModifyNetworkInterfaceAttributeInput) (req *request.Request, output *ModifyNetworkInterfaceAttributeOutput) { - op := &request.Operation{ - Name: opModifyNetworkInterfaceAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeReservedInstancesOfferingsPages(input *DescribeReservedInstancesOfferingsInput, fn func(*DescribeReservedInstancesOfferingsOutput, bool) bool) error { + return c.DescribeReservedInstancesOfferingsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ModifyNetworkInterfaceAttributeInput{} +// DescribeReservedInstancesOfferingsPagesWithContext same as DescribeReservedInstancesOfferingsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeReservedInstancesOfferingsPagesWithContext(ctx aws.Context, input *DescribeReservedInstancesOfferingsInput, fn func(*DescribeReservedInstancesOfferingsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeReservedInstancesOfferingsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeReservedInstancesOfferingsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ModifyNetworkInterfaceAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeReservedInstancesOfferingsOutput), !p.HasNextPage()) { + break + } + } -// ModifyNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified network interface attribute. You can specify only -// one attribute at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyNetworkInterfaceAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttribute -func (c *EC2) ModifyNetworkInterfaceAttribute(input *ModifyNetworkInterfaceAttributeInput) (*ModifyNetworkInterfaceAttributeOutput, error) { - req, out := c.ModifyNetworkInterfaceAttributeRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opModifyReservedInstances = "ModifyReservedInstances" +const opDescribeRouteTables = "DescribeRouteTables" -// ModifyReservedInstancesRequest generates a "aws/request.Request" representing the -// client's request for the ModifyReservedInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeRouteTablesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeRouteTables operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifyReservedInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyReservedInstances method directly -// instead. +// See DescribeRouteTables for more information on using the DescribeRouteTables +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifyReservedInstancesRequest method. -// req, resp := client.ModifyReservedInstancesRequest(params) +// +// // Example sending a request using the DescribeRouteTablesRequest method. +// req, resp := client.DescribeRouteTablesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstances -func (c *EC2) ModifyReservedInstancesRequest(input *ModifyReservedInstancesInput) (req *request.Request, output *ModifyReservedInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTables +func (c *EC2) DescribeRouteTablesRequest(input *DescribeRouteTablesInput) (req *request.Request, output *DescribeRouteTablesOutput) { op := &request.Operation{ - Name: opModifyReservedInstances, + Name: opDescribeRouteTables, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ModifyReservedInstancesInput{} + input = &DescribeRouteTablesInput{} } - output = &ModifyReservedInstancesOutput{} + output = &DescribeRouteTablesOutput{} req = c.newRequest(op, input, output) return } -// ModifyReservedInstances API operation for Amazon Elastic Compute Cloud. +// DescribeRouteTables API operation for Amazon Elastic Compute Cloud. // -// Modifies the Availability Zone, instance count, instance type, or network -// platform (EC2-Classic or EC2-VPC) of your Standard Reserved Instances. The -// Reserved Instances to be modified must be identical, except for Availability -// Zone, network platform, and instance type. +// Describes one or more of your route tables. // -// For more information, see Modifying Reserved Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Each subnet in your VPC must be associated with a route table. If a subnet +// is not explicitly associated with any route table, it is implicitly associated +// with the main route table. This command does not return the subnet ID for +// implicit associations. +// +// For more information, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) +// in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyReservedInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstances -func (c *EC2) ModifyReservedInstances(input *ModifyReservedInstancesInput) (*ModifyReservedInstancesOutput, error) { - req, out := c.ModifyReservedInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeRouteTables for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTables +func (c *EC2) DescribeRouteTables(input *DescribeRouteTablesInput) (*DescribeRouteTablesOutput, error) { + req, out := c.DescribeRouteTablesRequest(input) + return out, req.Send() } -const opModifySnapshotAttribute = "ModifySnapshotAttribute" - -// ModifySnapshotAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifySnapshotAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeRouteTablesWithContext is the same as DescribeRouteTables with the addition of +// the ability to pass a context and additional request options. // -// See ModifySnapshotAttribute for usage and error information. +// See DescribeRouteTables for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifySnapshotAttribute method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeRouteTablesWithContext(ctx aws.Context, input *DescribeRouteTablesInput, opts ...request.Option) (*DescribeRouteTablesOutput, error) { + req, out := c.DescribeRouteTablesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeRouteTablesPages iterates over the pages of a DescribeRouteTables operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeRouteTables method for more information on how to use this operation. // -// // Example sending a request using the ModifySnapshotAttributeRequest method. -// req, resp := client.ModifySnapshotAttributeRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeRouteTables operation. +// pageNum := 0 +// err := client.DescribeRouteTablesPages(params, +// func(page *ec2.DescribeRouteTablesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttribute -func (c *EC2) ModifySnapshotAttributeRequest(input *ModifySnapshotAttributeInput) (req *request.Request, output *ModifySnapshotAttributeOutput) { - op := &request.Operation{ - Name: opModifySnapshotAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeRouteTablesPages(input *DescribeRouteTablesInput, fn func(*DescribeRouteTablesOutput, bool) bool) error { + return c.DescribeRouteTablesPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ModifySnapshotAttributeInput{} +// DescribeRouteTablesPagesWithContext same as DescribeRouteTablesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeRouteTablesPagesWithContext(ctx aws.Context, input *DescribeRouteTablesInput, fn func(*DescribeRouteTablesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeRouteTablesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeRouteTablesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ModifySnapshotAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeRouteTablesOutput), !p.HasNextPage()) { + break + } + } -// ModifySnapshotAttribute API operation for Amazon Elastic Compute Cloud. -// -// Adds or removes permission settings for the specified snapshot. You may add -// or remove specified AWS account IDs from a snapshot's list of create volume -// permissions, but you cannot do both in a single API call. If you need to -// both add and remove account IDs for a snapshot, you must use multiple API -// calls. -// -// Encrypted snapshots and snapshots with AWS Marketplace product codes cannot -// be made public. Snapshots encrypted with your default CMK cannot be shared -// with other accounts. -// -// For more information on modifying snapshot permissions, see Sharing Snapshots -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifySnapshotAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttribute -func (c *EC2) ModifySnapshotAttribute(input *ModifySnapshotAttributeInput) (*ModifySnapshotAttributeOutput, error) { - req, out := c.ModifySnapshotAttributeRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opModifySpotFleetRequest = "ModifySpotFleetRequest" +const opDescribeScheduledInstanceAvailability = "DescribeScheduledInstanceAvailability" -// ModifySpotFleetRequestRequest generates a "aws/request.Request" representing the -// client's request for the ModifySpotFleetRequest operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeScheduledInstanceAvailabilityRequest generates a "aws/request.Request" representing the +// client's request for the DescribeScheduledInstanceAvailability operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifySpotFleetRequest for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifySpotFleetRequest method directly -// instead. +// See DescribeScheduledInstanceAvailability for more information on using the DescribeScheduledInstanceAvailability +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifySpotFleetRequestRequest method. -// req, resp := client.ModifySpotFleetRequestRequest(params) +// +// // Example sending a request using the DescribeScheduledInstanceAvailabilityRequest method. +// req, resp := client.DescribeScheduledInstanceAvailabilityRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequest -func (c *EC2) ModifySpotFleetRequestRequest(input *ModifySpotFleetRequestInput) (req *request.Request, output *ModifySpotFleetRequestOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailability +func (c *EC2) DescribeScheduledInstanceAvailabilityRequest(input *DescribeScheduledInstanceAvailabilityInput) (req *request.Request, output *DescribeScheduledInstanceAvailabilityOutput) { op := &request.Operation{ - Name: opModifySpotFleetRequest, + Name: opDescribeScheduledInstanceAvailability, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ModifySpotFleetRequestInput{} + input = &DescribeScheduledInstanceAvailabilityInput{} } - output = &ModifySpotFleetRequestOutput{} + output = &DescribeScheduledInstanceAvailabilityOutput{} req = c.newRequest(op, input, output) return } -// ModifySpotFleetRequest API operation for Amazon Elastic Compute Cloud. -// -// Modifies the specified Spot fleet request. +// DescribeScheduledInstanceAvailability API operation for Amazon Elastic Compute Cloud. // -// While the Spot fleet request is being modified, it is in the modifying state. +// Finds available schedules that meet the specified criteria. // -// To scale up your Spot fleet, increase its target capacity. The Spot fleet -// launches the additional Spot instances according to the allocation strategy -// for the Spot fleet request. If the allocation strategy is lowestPrice, the -// Spot fleet launches instances using the Spot pool with the lowest price. -// If the allocation strategy is diversified, the Spot fleet distributes the -// instances across the Spot pools. +// You can search for an available schedule no more than 3 months in advance. +// You must meet the minimum required duration of 1,200 hours per year. For +// example, the minimum daily schedule is 4 hours, the minimum weekly schedule +// is 24 hours, and the minimum monthly schedule is 100 hours. // -// To scale down your Spot fleet, decrease its target capacity. First, the Spot -// fleet cancels any open bids that exceed the new target capacity. You can -// request that the Spot fleet terminate Spot instances until the size of the -// fleet no longer exceeds the new target capacity. If the allocation strategy -// is lowestPrice, the Spot fleet terminates the instances with the highest -// price per unit. If the allocation strategy is diversified, the Spot fleet -// terminates instances across the Spot pools. Alternatively, you can request -// that the Spot fleet keep the fleet at its current size, but not replace any -// Spot instances that are interrupted or that you terminate manually. +// After you find a schedule that meets your needs, call PurchaseScheduledInstances +// to purchase Scheduled Instances with that schedule. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifySpotFleetRequest for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequest -func (c *EC2) ModifySpotFleetRequest(input *ModifySpotFleetRequestInput) (*ModifySpotFleetRequestOutput, error) { - req, out := c.ModifySpotFleetRequestRequest(input) - err := req.Send() - return out, err +// API operation DescribeScheduledInstanceAvailability for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailability +func (c *EC2) DescribeScheduledInstanceAvailability(input *DescribeScheduledInstanceAvailabilityInput) (*DescribeScheduledInstanceAvailabilityOutput, error) { + req, out := c.DescribeScheduledInstanceAvailabilityRequest(input) + return out, req.Send() } -const opModifySubnetAttribute = "ModifySubnetAttribute" - -// ModifySubnetAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifySubnetAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeScheduledInstanceAvailabilityWithContext is the same as DescribeScheduledInstanceAvailability with the addition of +// the ability to pass a context and additional request options. // -// See ModifySubnetAttribute for usage and error information. +// See DescribeScheduledInstanceAvailability for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifySubnetAttribute method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeScheduledInstanceAvailabilityWithContext(ctx aws.Context, input *DescribeScheduledInstanceAvailabilityInput, opts ...request.Option) (*DescribeScheduledInstanceAvailabilityOutput, error) { + req, out := c.DescribeScheduledInstanceAvailabilityRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeScheduledInstanceAvailabilityPages iterates over the pages of a DescribeScheduledInstanceAvailability operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeScheduledInstanceAvailability method for more information on how to use this operation. // -// // Example sending a request using the ModifySubnetAttributeRequest method. -// req, resp := client.ModifySubnetAttributeRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeScheduledInstanceAvailability operation. +// pageNum := 0 +// err := client.DescribeScheduledInstanceAvailabilityPages(params, +// func(page *ec2.DescribeScheduledInstanceAvailabilityOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttribute -func (c *EC2) ModifySubnetAttributeRequest(input *ModifySubnetAttributeInput) (req *request.Request, output *ModifySubnetAttributeOutput) { - op := &request.Operation{ - Name: opModifySubnetAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeScheduledInstanceAvailabilityPages(input *DescribeScheduledInstanceAvailabilityInput, fn func(*DescribeScheduledInstanceAvailabilityOutput, bool) bool) error { + return c.DescribeScheduledInstanceAvailabilityPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ModifySubnetAttributeInput{} +// DescribeScheduledInstanceAvailabilityPagesWithContext same as DescribeScheduledInstanceAvailabilityPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeScheduledInstanceAvailabilityPagesWithContext(ctx aws.Context, input *DescribeScheduledInstanceAvailabilityInput, fn func(*DescribeScheduledInstanceAvailabilityOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeScheduledInstanceAvailabilityInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeScheduledInstanceAvailabilityRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ModifySubnetAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeScheduledInstanceAvailabilityOutput), !p.HasNextPage()) { + break + } + } -// ModifySubnetAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies a subnet attribute. You can only modify one attribute at a time. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifySubnetAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttribute -func (c *EC2) ModifySubnetAttribute(input *ModifySubnetAttributeInput) (*ModifySubnetAttributeOutput, error) { - req, out := c.ModifySubnetAttributeRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opModifyVolume = "ModifyVolume" +const opDescribeScheduledInstances = "DescribeScheduledInstances" -// ModifyVolumeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVolume operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeScheduledInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeScheduledInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifyVolume for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyVolume method directly -// instead. +// See DescribeScheduledInstances for more information on using the DescribeScheduledInstances +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifyVolumeRequest method. -// req, resp := client.ModifyVolumeRequest(params) +// +// // Example sending a request using the DescribeScheduledInstancesRequest method. +// req, resp := client.DescribeScheduledInstancesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolume -func (c *EC2) ModifyVolumeRequest(input *ModifyVolumeInput) (req *request.Request, output *ModifyVolumeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstances +func (c *EC2) DescribeScheduledInstancesRequest(input *DescribeScheduledInstancesInput) (req *request.Request, output *DescribeScheduledInstancesOutput) { op := &request.Operation{ - Name: opModifyVolume, + Name: opDescribeScheduledInstances, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ModifyVolumeInput{} + input = &DescribeScheduledInstancesInput{} } - output = &ModifyVolumeOutput{} + output = &DescribeScheduledInstancesOutput{} req = c.newRequest(op, input, output) return } -// ModifyVolume API operation for Amazon Elastic Compute Cloud. -// -// You can modify several parameters of an existing EBS volume, including volume -// size, volume type, and IOPS capacity. If your EBS volume is attached to a -// current-generation EC2 instance type, you may be able to apply these changes -// without stopping the instance or detaching the volume from it. For more information -// about modifying an EBS volume running Linux, see Modifying the Size, IOPS, -// or Type of an EBS Volume on Linux (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html). -// For more information about modifying an EBS volume running Windows, see Expanding -// the Storage Space of an EBS Volume on Windows (http://docs.aws.amazon.com/docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html). -// -// When you complete a resize operation on your volume, you need to extend the -// volume's file-system size to take advantage of the new storage capacity. -// For information about extending a Linux file system, see Extending a Linux -// File System (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#recognize-expanded-volume-linux). -// For information about extending a Windows file system, see Extending a Windows -// File System (http://docs.aws.amazon.com/http:/docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html#recognize-expanded-volume-windows). -// -// You can use CloudWatch Events to check the status of a modification to an -// EBS volume. For information about CloudWatch Events, see the Amazon CloudWatch -// Events User Guide (http://docs.aws.amazon.com/http:/docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html). -// You can also track the status of a modification using the DescribeVolumesModifications -// (http://docs.aws.amazon.com/http:/docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVolumesModifications.html) -// API. For information about tracking status changes using either method, see -// Monitoring Volume Modifications" (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#monitoring_mods). -// -// With previous-generation volumes and instance types, resizing an EBS volume -// may require detaching and reattaching the volume or stopping and restarting -// the instance. For more information about modifying an EBS volume running -// Linux, see Modifying the Size, IOPS, or Type of an EBS Volume on Linux (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html). -// For more information about modifying an EBS volume running Windows, see Modifying -// the Size, IOPS, or Type of an EBS Volume on Windows (http://docs.aws.amazon.com/docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html). +// DescribeScheduledInstances API operation for Amazon Elastic Compute Cloud. // -// If you reach the maximum volume modification rate per volume limit, you will -// need to wait at least six hours before applying further modifications to -// the affected EBS volume. +// Describes the specified Scheduled Instances or all your Scheduled Instances. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVolume for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolume -func (c *EC2) ModifyVolume(input *ModifyVolumeInput) (*ModifyVolumeOutput, error) { - req, out := c.ModifyVolumeRequest(input) - err := req.Send() - return out, err +// API operation DescribeScheduledInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstances +func (c *EC2) DescribeScheduledInstances(input *DescribeScheduledInstancesInput) (*DescribeScheduledInstancesOutput, error) { + req, out := c.DescribeScheduledInstancesRequest(input) + return out, req.Send() } -const opModifyVolumeAttribute = "ModifyVolumeAttribute" +// DescribeScheduledInstancesWithContext is the same as DescribeScheduledInstances with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeScheduledInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeScheduledInstancesWithContext(ctx aws.Context, input *DescribeScheduledInstancesInput, opts ...request.Option) (*DescribeScheduledInstancesOutput, error) { + req, out := c.DescribeScheduledInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ModifyVolumeAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVolumeAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeScheduledInstancesPages iterates over the pages of a DescribeScheduledInstances operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeScheduledInstances method for more information on how to use this operation. // -// See ModifyVolumeAttribute for usage and error information. +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyVolumeAttribute method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeScheduledInstances operation. +// pageNum := 0 +// err := client.DescribeScheduledInstancesPages(params, +// func(page *ec2.DescribeScheduledInstancesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeScheduledInstancesPages(input *DescribeScheduledInstancesInput, fn func(*DescribeScheduledInstancesOutput, bool) bool) error { + return c.DescribeScheduledInstancesPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeScheduledInstancesPagesWithContext same as DescribeScheduledInstancesPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the ModifyVolumeAttributeRequest method. -// req, resp := client.ModifyVolumeAttributeRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeScheduledInstancesPagesWithContext(ctx aws.Context, input *DescribeScheduledInstancesInput, fn func(*DescribeScheduledInstancesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeScheduledInstancesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeScheduledInstancesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeScheduledInstancesOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeSecurityGroupReferences = "DescribeSecurityGroupReferences" + +// DescribeSecurityGroupReferencesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSecurityGroupReferences operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeSecurityGroupReferences for more information on using the DescribeSecurityGroupReferences +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeSecurityGroupReferencesRequest method. +// req, resp := client.DescribeSecurityGroupReferencesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttribute -func (c *EC2) ModifyVolumeAttributeRequest(input *ModifyVolumeAttributeInput) (req *request.Request, output *ModifyVolumeAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferences +func (c *EC2) DescribeSecurityGroupReferencesRequest(input *DescribeSecurityGroupReferencesInput) (req *request.Request, output *DescribeSecurityGroupReferencesOutput) { op := &request.Operation{ - Name: opModifyVolumeAttribute, + Name: opDescribeSecurityGroupReferences, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &ModifyVolumeAttributeInput{} + input = &DescribeSecurityGroupReferencesInput{} } - output = &ModifyVolumeAttributeOutput{} + output = &DescribeSecurityGroupReferencesOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ModifyVolumeAttribute API operation for Amazon Elastic Compute Cloud. -// -// Modifies a volume attribute. -// -// By default, all I/O operations for the volume are suspended when the data -// on the volume is determined to be potentially inconsistent, to prevent undetectable, -// latent data corruption. The I/O access to the volume can be resumed by first -// enabling I/O access and then checking the data consistency on your volume. +// DescribeSecurityGroupReferences API operation for Amazon Elastic Compute Cloud. // -// You can change the default behavior to resume I/O operations. We recommend -// that you change this only for boot volumes or for volumes that are stateless -// or disposable. +// [VPC only] Describes the VPCs on the other side of a VPC peering connection +// that are referencing the security groups you've specified in this request. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVolumeAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttribute -func (c *EC2) ModifyVolumeAttribute(input *ModifyVolumeAttributeInput) (*ModifyVolumeAttributeOutput, error) { - req, out := c.ModifyVolumeAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeSecurityGroupReferences for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferences +func (c *EC2) DescribeSecurityGroupReferences(input *DescribeSecurityGroupReferencesInput) (*DescribeSecurityGroupReferencesOutput, error) { + req, out := c.DescribeSecurityGroupReferencesRequest(input) + return out, req.Send() } -const opModifyVpcAttribute = "ModifyVpcAttribute" +// DescribeSecurityGroupReferencesWithContext is the same as DescribeSecurityGroupReferences with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSecurityGroupReferences for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSecurityGroupReferencesWithContext(ctx aws.Context, input *DescribeSecurityGroupReferencesInput, opts ...request.Option) (*DescribeSecurityGroupReferencesOutput, error) { + req, out := c.DescribeSecurityGroupReferencesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ModifyVpcAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeSecurityGroups = "DescribeSecurityGroups" + +// DescribeSecurityGroupsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSecurityGroups operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifyVpcAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyVpcAttribute method directly -// instead. +// See DescribeSecurityGroups for more information on using the DescribeSecurityGroups +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifyVpcAttributeRequest method. -// req, resp := client.ModifyVpcAttributeRequest(params) +// +// // Example sending a request using the DescribeSecurityGroupsRequest method. +// req, resp := client.DescribeSecurityGroupsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttribute -func (c *EC2) ModifyVpcAttributeRequest(input *ModifyVpcAttributeInput) (req *request.Request, output *ModifyVpcAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroups +func (c *EC2) DescribeSecurityGroupsRequest(input *DescribeSecurityGroupsInput) (req *request.Request, output *DescribeSecurityGroupsOutput) { op := &request.Operation{ - Name: opModifyVpcAttribute, + Name: opDescribeSecurityGroups, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ModifyVpcAttributeInput{} + input = &DescribeSecurityGroupsInput{} } - output = &ModifyVpcAttributeOutput{} + output = &DescribeSecurityGroupsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ModifyVpcAttribute API operation for Amazon Elastic Compute Cloud. +// DescribeSecurityGroups API operation for Amazon Elastic Compute Cloud. // -// Modifies the specified attribute of the specified VPC. +// Describes the specified security groups or all of your security groups. +// +// A security group is for use with instances either in the EC2-Classic platform +// or in a specific VPC. For more information, see Amazon EC2 Security Groups +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html) +// in the Amazon Elastic Compute Cloud User Guide and Security Groups for Your +// VPC (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html) +// in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttribute -func (c *EC2) ModifyVpcAttribute(input *ModifyVpcAttributeInput) (*ModifyVpcAttributeOutput, error) { - req, out := c.ModifyVpcAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeSecurityGroups for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroups +func (c *EC2) DescribeSecurityGroups(input *DescribeSecurityGroupsInput) (*DescribeSecurityGroupsOutput, error) { + req, out := c.DescribeSecurityGroupsRequest(input) + return out, req.Send() } -const opModifyVpcEndpoint = "ModifyVpcEndpoint" +// DescribeSecurityGroupsWithContext is the same as DescribeSecurityGroups with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSecurityGroups for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSecurityGroupsWithContext(ctx aws.Context, input *DescribeSecurityGroupsInput, opts ...request.Option) (*DescribeSecurityGroupsOutput, error) { + req, out := c.DescribeSecurityGroupsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ModifyVpcEndpointRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcEndpoint operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeSecurityGroupsPages iterates over the pages of a DescribeSecurityGroups operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See ModifyVpcEndpoint for usage and error information. +// See DescribeSecurityGroups method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyVpcEndpoint method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeSecurityGroups operation. +// pageNum := 0 +// err := client.DescribeSecurityGroupsPages(params, +// func(page *ec2.DescribeSecurityGroupsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeSecurityGroupsPages(input *DescribeSecurityGroupsInput, fn func(*DescribeSecurityGroupsOutput, bool) bool) error { + return c.DescribeSecurityGroupsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeSecurityGroupsPagesWithContext same as DescribeSecurityGroupsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the ModifyVpcEndpointRequest method. -// req, resp := client.ModifyVpcEndpointRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSecurityGroupsPagesWithContext(ctx aws.Context, input *DescribeSecurityGroupsInput, fn func(*DescribeSecurityGroupsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeSecurityGroupsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSecurityGroupsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeSecurityGroupsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeSnapshotAttribute = "DescribeSnapshotAttribute" + +// DescribeSnapshotAttributeRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSnapshotAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeSnapshotAttribute for more information on using the DescribeSnapshotAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeSnapshotAttributeRequest method. +// req, resp := client.DescribeSnapshotAttributeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpoint -func (c *EC2) ModifyVpcEndpointRequest(input *ModifyVpcEndpointInput) (req *request.Request, output *ModifyVpcEndpointOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttribute +func (c *EC2) DescribeSnapshotAttributeRequest(input *DescribeSnapshotAttributeInput) (req *request.Request, output *DescribeSnapshotAttributeOutput) { op := &request.Operation{ - Name: opModifyVpcEndpoint, + Name: opDescribeSnapshotAttribute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &ModifyVpcEndpointInput{} + input = &DescribeSnapshotAttributeInput{} } - output = &ModifyVpcEndpointOutput{} + output = &DescribeSnapshotAttributeOutput{} req = c.newRequest(op, input, output) return } -// ModifyVpcEndpoint API operation for Amazon Elastic Compute Cloud. +// DescribeSnapshotAttribute API operation for Amazon Elastic Compute Cloud. +// +// Describes the specified attribute of the specified snapshot. You can specify +// only one attribute at a time. // -// Modifies attributes of a specified VPC endpoint. You can modify the policy -// associated with the endpoint, and you can add and remove route tables associated -// with the endpoint. +// For more information about EBS snapshots, see Amazon EBS Snapshots (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcEndpoint for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpoint -func (c *EC2) ModifyVpcEndpoint(input *ModifyVpcEndpointInput) (*ModifyVpcEndpointOutput, error) { - req, out := c.ModifyVpcEndpointRequest(input) - err := req.Send() - return out, err +// API operation DescribeSnapshotAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttribute +func (c *EC2) DescribeSnapshotAttribute(input *DescribeSnapshotAttributeInput) (*DescribeSnapshotAttributeOutput, error) { + req, out := c.DescribeSnapshotAttributeRequest(input) + return out, req.Send() } -const opModifyVpcPeeringConnectionOptions = "ModifyVpcPeeringConnectionOptions" +// DescribeSnapshotAttributeWithContext is the same as DescribeSnapshotAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSnapshotAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSnapshotAttributeWithContext(ctx aws.Context, input *DescribeSnapshotAttributeInput, opts ...request.Option) (*DescribeSnapshotAttributeOutput, error) { + req, out := c.DescribeSnapshotAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ModifyVpcPeeringConnectionOptionsRequest generates a "aws/request.Request" representing the -// client's request for the ModifyVpcPeeringConnectionOptions operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeSnapshots = "DescribeSnapshots" + +// DescribeSnapshotsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSnapshots operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ModifyVpcPeeringConnectionOptions for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ModifyVpcPeeringConnectionOptions method directly -// instead. +// See DescribeSnapshots for more information on using the DescribeSnapshots +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ModifyVpcPeeringConnectionOptionsRequest method. -// req, resp := client.ModifyVpcPeeringConnectionOptionsRequest(params) +// +// // Example sending a request using the DescribeSnapshotsRequest method. +// req, resp := client.DescribeSnapshotsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptions -func (c *EC2) ModifyVpcPeeringConnectionOptionsRequest(input *ModifyVpcPeeringConnectionOptionsInput) (req *request.Request, output *ModifyVpcPeeringConnectionOptionsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshots +func (c *EC2) DescribeSnapshotsRequest(input *DescribeSnapshotsInput) (req *request.Request, output *DescribeSnapshotsOutput) { op := &request.Operation{ - Name: opModifyVpcPeeringConnectionOptions, + Name: opDescribeSnapshots, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ModifyVpcPeeringConnectionOptionsInput{} + input = &DescribeSnapshotsInput{} } - output = &ModifyVpcPeeringConnectionOptionsOutput{} + output = &DescribeSnapshotsOutput{} req = c.newRequest(op, input, output) return } -// ModifyVpcPeeringConnectionOptions API operation for Amazon Elastic Compute Cloud. +// DescribeSnapshots API operation for Amazon Elastic Compute Cloud. // -// Modifies the VPC peering connection options on one side of a VPC peering -// connection. You can do the following: +// Describes the specified EBS snapshots available to you or all of the EBS +// snapshots available to you. // -// * Enable/disable communication over the peering connection between an -// EC2-Classic instance that's linked to your VPC (using ClassicLink) and -// instances in the peer VPC. +// The snapshots available to you include public snapshots, private snapshots +// that you own, and private snapshots owned by other AWS accounts for which +// you have explicit create volume permissions. // -// * Enable/disable communication over the peering connection between instances -// in your VPC and an EC2-Classic instance that's linked to the peer VPC. +// The create volume permissions fall into the following categories: // -// * Enable/disable a local VPC to resolve public DNS hostnames to private -// IP addresses when queried from instances in the peer VPC. +// * public: The owner of the snapshot granted create volume permissions +// for the snapshot to the all group. All AWS accounts have create volume +// permissions for these snapshots. // -// If the peered VPCs are in different accounts, each owner must initiate a -// separate request to modify the peering connection options, depending on whether -// their VPC was the requester or accepter for the VPC peering connection. If -// the peered VPCs are in the same account, you can modify the requester and -// accepter options in the same request. To confirm which VPC is the accepter -// and requester for a VPC peering connection, use the DescribeVpcPeeringConnections -// command. +// * explicit: The owner of the snapshot granted create volume permissions +// to a specific AWS account. +// +// * implicit: An AWS account has implicit create volume permissions for +// all snapshots it owns. +// +// The list of snapshots returned can be modified by specifying snapshot IDs, +// snapshot owners, or AWS accounts with create volume permissions. If no options +// are specified, Amazon EC2 returns all snapshots for which you have create +// volume permissions. +// +// If you specify one or more snapshot IDs, only snapshots that have the specified +// IDs are returned. If you specify an invalid snapshot ID, an error is returned. +// If you specify a snapshot ID for which you do not have access, it is not +// included in the returned results. +// +// If you specify one or more snapshot owners using the OwnerIds option, only +// snapshots from the specified owners and for which you have access are returned. +// The results can include the AWS account IDs of the specified owners, amazon +// for snapshots owned by Amazon, or self for snapshots that you own. +// +// If you specify a list of restorable users, only snapshots with create snapshot +// permissions for those users are returned. You can specify AWS account IDs +// (if you own the snapshots), self for snapshots for which you own or have +// explicit permissions, or all for public snapshots. +// +// If you are describing a long list of snapshots, you can paginate the output +// to make the list more manageable. The MaxResults parameter sets the maximum +// number of results returned in a single page. If the list of results exceeds +// your MaxResults value, then that number of results is returned along with +// a NextToken value that can be passed to a subsequent DescribeSnapshots request +// to retrieve the remaining results. +// +// For more information about EBS snapshots, see Amazon EBS Snapshots (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ModifyVpcPeeringConnectionOptions for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptions -func (c *EC2) ModifyVpcPeeringConnectionOptions(input *ModifyVpcPeeringConnectionOptionsInput) (*ModifyVpcPeeringConnectionOptionsOutput, error) { - req, out := c.ModifyVpcPeeringConnectionOptionsRequest(input) - err := req.Send() - return out, err +// API operation DescribeSnapshots for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshots +func (c *EC2) DescribeSnapshots(input *DescribeSnapshotsInput) (*DescribeSnapshotsOutput, error) { + req, out := c.DescribeSnapshotsRequest(input) + return out, req.Send() } -const opMonitorInstances = "MonitorInstances" +// DescribeSnapshotsWithContext is the same as DescribeSnapshots with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSnapshots for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSnapshotsWithContext(ctx aws.Context, input *DescribeSnapshotsInput, opts ...request.Option) (*DescribeSnapshotsOutput, error) { + req, out := c.DescribeSnapshotsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// MonitorInstancesRequest generates a "aws/request.Request" representing the -// client's request for the MonitorInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeSnapshotsPages iterates over the pages of a DescribeSnapshots operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See MonitorInstances for usage and error information. +// See DescribeSnapshots method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the MonitorInstances method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeSnapshots operation. +// pageNum := 0 +// err := client.DescribeSnapshotsPages(params, +// func(page *ec2.DescribeSnapshotsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeSnapshotsPages(input *DescribeSnapshotsInput, fn func(*DescribeSnapshotsOutput, bool) bool) error { + return c.DescribeSnapshotsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeSnapshotsPagesWithContext same as DescribeSnapshotsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the MonitorInstancesRequest method. -// req, resp := client.MonitorInstancesRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSnapshotsPagesWithContext(ctx aws.Context, input *DescribeSnapshotsInput, fn func(*DescribeSnapshotsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeSnapshotsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSnapshotsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeSnapshotsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeSpotDatafeedSubscription = "DescribeSpotDatafeedSubscription" + +// DescribeSpotDatafeedSubscriptionRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSpotDatafeedSubscription operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeSpotDatafeedSubscription for more information on using the DescribeSpotDatafeedSubscription +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeSpotDatafeedSubscriptionRequest method. +// req, resp := client.DescribeSpotDatafeedSubscriptionRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstances -func (c *EC2) MonitorInstancesRequest(input *MonitorInstancesInput) (req *request.Request, output *MonitorInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscription +func (c *EC2) DescribeSpotDatafeedSubscriptionRequest(input *DescribeSpotDatafeedSubscriptionInput) (req *request.Request, output *DescribeSpotDatafeedSubscriptionOutput) { op := &request.Operation{ - Name: opMonitorInstances, + Name: opDescribeSpotDatafeedSubscription, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &MonitorInstancesInput{} + input = &DescribeSpotDatafeedSubscriptionInput{} } - output = &MonitorInstancesOutput{} + output = &DescribeSpotDatafeedSubscriptionOutput{} req = c.newRequest(op, input, output) return } -// MonitorInstances API operation for Amazon Elastic Compute Cloud. -// -// Enables detailed monitoring for a running instance. Otherwise, basic monitoring -// is enabled. For more information, see Monitoring Your Instances and Volumes -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html) -// in the Amazon Elastic Compute Cloud User Guide. +// DescribeSpotDatafeedSubscription API operation for Amazon Elastic Compute Cloud. // -// To disable detailed monitoring, see . +// Describes the data feed for Spot Instances. For more information, see Spot +// Instance Data Feed (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html) +// in the Amazon EC2 User Guide for Linux Instances. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation MonitorInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstances -func (c *EC2) MonitorInstances(input *MonitorInstancesInput) (*MonitorInstancesOutput, error) { - req, out := c.MonitorInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeSpotDatafeedSubscription for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscription +func (c *EC2) DescribeSpotDatafeedSubscription(input *DescribeSpotDatafeedSubscriptionInput) (*DescribeSpotDatafeedSubscriptionOutput, error) { + req, out := c.DescribeSpotDatafeedSubscriptionRequest(input) + return out, req.Send() } -const opMoveAddressToVpc = "MoveAddressToVpc" +// DescribeSpotDatafeedSubscriptionWithContext is the same as DescribeSpotDatafeedSubscription with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSpotDatafeedSubscription for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotDatafeedSubscriptionWithContext(ctx aws.Context, input *DescribeSpotDatafeedSubscriptionInput, opts ...request.Option) (*DescribeSpotDatafeedSubscriptionOutput, error) { + req, out := c.DescribeSpotDatafeedSubscriptionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// MoveAddressToVpcRequest generates a "aws/request.Request" representing the -// client's request for the MoveAddressToVpc operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeSpotFleetInstances = "DescribeSpotFleetInstances" + +// DescribeSpotFleetInstancesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSpotFleetInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See MoveAddressToVpc for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the MoveAddressToVpc method directly -// instead. +// See DescribeSpotFleetInstances for more information on using the DescribeSpotFleetInstances +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the MoveAddressToVpcRequest method. -// req, resp := client.MoveAddressToVpcRequest(params) +// +// // Example sending a request using the DescribeSpotFleetInstancesRequest method. +// req, resp := client.DescribeSpotFleetInstancesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpc -func (c *EC2) MoveAddressToVpcRequest(input *MoveAddressToVpcInput) (req *request.Request, output *MoveAddressToVpcOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstances +func (c *EC2) DescribeSpotFleetInstancesRequest(input *DescribeSpotFleetInstancesInput) (req *request.Request, output *DescribeSpotFleetInstancesOutput) { op := &request.Operation{ - Name: opMoveAddressToVpc, + Name: opDescribeSpotFleetInstances, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &MoveAddressToVpcInput{} + input = &DescribeSpotFleetInstancesInput{} } - output = &MoveAddressToVpcOutput{} + output = &DescribeSpotFleetInstancesOutput{} req = c.newRequest(op, input, output) return } -// MoveAddressToVpc API operation for Amazon Elastic Compute Cloud. +// DescribeSpotFleetInstances API operation for Amazon Elastic Compute Cloud. // -// Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC -// platform. The Elastic IP address must be allocated to your account for more -// than 24 hours, and it must not be associated with an instance. After the -// Elastic IP address is moved, it is no longer available for use in the EC2-Classic -// platform, unless you move it back using the RestoreAddressToClassic request. -// You cannot move an Elastic IP address that was originally allocated for use -// in the EC2-VPC platform to the EC2-Classic platform. +// Describes the running instances for the specified Spot Fleet. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation MoveAddressToVpc for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpc -func (c *EC2) MoveAddressToVpc(input *MoveAddressToVpcInput) (*MoveAddressToVpcOutput, error) { - req, out := c.MoveAddressToVpcRequest(input) - err := req.Send() - return out, err +// API operation DescribeSpotFleetInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstances +func (c *EC2) DescribeSpotFleetInstances(input *DescribeSpotFleetInstancesInput) (*DescribeSpotFleetInstancesOutput, error) { + req, out := c.DescribeSpotFleetInstancesRequest(input) + return out, req.Send() } -const opPurchaseHostReservation = "PurchaseHostReservation" +// DescribeSpotFleetInstancesWithContext is the same as DescribeSpotFleetInstances with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSpotFleetInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotFleetInstancesWithContext(ctx aws.Context, input *DescribeSpotFleetInstancesInput, opts ...request.Option) (*DescribeSpotFleetInstancesOutput, error) { + req, out := c.DescribeSpotFleetInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PurchaseHostReservationRequest generates a "aws/request.Request" representing the -// client's request for the PurchaseHostReservation operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeSpotFleetRequestHistory = "DescribeSpotFleetRequestHistory" + +// DescribeSpotFleetRequestHistoryRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSpotFleetRequestHistory operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See PurchaseHostReservation for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the PurchaseHostReservation method directly -// instead. +// See DescribeSpotFleetRequestHistory for more information on using the DescribeSpotFleetRequestHistory +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the PurchaseHostReservationRequest method. -// req, resp := client.PurchaseHostReservationRequest(params) +// +// // Example sending a request using the DescribeSpotFleetRequestHistoryRequest method. +// req, resp := client.DescribeSpotFleetRequestHistoryRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservation -func (c *EC2) PurchaseHostReservationRequest(input *PurchaseHostReservationInput) (req *request.Request, output *PurchaseHostReservationOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistory +func (c *EC2) DescribeSpotFleetRequestHistoryRequest(input *DescribeSpotFleetRequestHistoryInput) (req *request.Request, output *DescribeSpotFleetRequestHistoryOutput) { op := &request.Operation{ - Name: opPurchaseHostReservation, + Name: opDescribeSpotFleetRequestHistory, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &PurchaseHostReservationInput{} + input = &DescribeSpotFleetRequestHistoryInput{} } - output = &PurchaseHostReservationOutput{} + output = &DescribeSpotFleetRequestHistoryOutput{} req = c.newRequest(op, input, output) return } -// PurchaseHostReservation API operation for Amazon Elastic Compute Cloud. +// DescribeSpotFleetRequestHistory API operation for Amazon Elastic Compute Cloud. // -// Purchase a reservation with configurations that match those of your Dedicated -// Host. You must have active Dedicated Hosts in your account before you purchase -// a reservation. This action results in the specified reservation being purchased -// and charged to your account. +// Describes the events for the specified Spot Fleet request during the specified +// time. +// +// Spot Fleet events are delayed by up to 30 seconds before they can be described. +// This ensures that you can query by the last evaluated time and not miss a +// recorded event. Spot Fleet events are available for 48 hours. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation PurchaseHostReservation for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservation -func (c *EC2) PurchaseHostReservation(input *PurchaseHostReservationInput) (*PurchaseHostReservationOutput, error) { - req, out := c.PurchaseHostReservationRequest(input) - err := req.Send() - return out, err +// API operation DescribeSpotFleetRequestHistory for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistory +func (c *EC2) DescribeSpotFleetRequestHistory(input *DescribeSpotFleetRequestHistoryInput) (*DescribeSpotFleetRequestHistoryOutput, error) { + req, out := c.DescribeSpotFleetRequestHistoryRequest(input) + return out, req.Send() } -const opPurchaseReservedInstancesOffering = "PurchaseReservedInstancesOffering" +// DescribeSpotFleetRequestHistoryWithContext is the same as DescribeSpotFleetRequestHistory with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSpotFleetRequestHistory for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotFleetRequestHistoryWithContext(ctx aws.Context, input *DescribeSpotFleetRequestHistoryInput, opts ...request.Option) (*DescribeSpotFleetRequestHistoryOutput, error) { + req, out := c.DescribeSpotFleetRequestHistoryRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PurchaseReservedInstancesOfferingRequest generates a "aws/request.Request" representing the -// client's request for the PurchaseReservedInstancesOffering operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeSpotFleetRequests = "DescribeSpotFleetRequests" + +// DescribeSpotFleetRequestsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSpotFleetRequests operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See PurchaseReservedInstancesOffering for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the PurchaseReservedInstancesOffering method directly -// instead. +// See DescribeSpotFleetRequests for more information on using the DescribeSpotFleetRequests +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the PurchaseReservedInstancesOfferingRequest method. -// req, resp := client.PurchaseReservedInstancesOfferingRequest(params) +// +// // Example sending a request using the DescribeSpotFleetRequestsRequest method. +// req, resp := client.DescribeSpotFleetRequestsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOffering -func (c *EC2) PurchaseReservedInstancesOfferingRequest(input *PurchaseReservedInstancesOfferingInput) (req *request.Request, output *PurchaseReservedInstancesOfferingOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequests +func (c *EC2) DescribeSpotFleetRequestsRequest(input *DescribeSpotFleetRequestsInput) (req *request.Request, output *DescribeSpotFleetRequestsOutput) { op := &request.Operation{ - Name: opPurchaseReservedInstancesOffering, + Name: opDescribeSpotFleetRequests, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &PurchaseReservedInstancesOfferingInput{} + input = &DescribeSpotFleetRequestsInput{} } - output = &PurchaseReservedInstancesOfferingOutput{} + output = &DescribeSpotFleetRequestsOutput{} req = c.newRequest(op, input, output) return } -// PurchaseReservedInstancesOffering API operation for Amazon Elastic Compute Cloud. -// -// Purchases a Reserved Instance for use with your account. With Reserved Instances, -// you pay a lower hourly rate compared to On-Demand instance pricing. +// DescribeSpotFleetRequests API operation for Amazon Elastic Compute Cloud. // -// Use DescribeReservedInstancesOfferings to get a list of Reserved Instance -// offerings that match your specifications. After you've purchased a Reserved -// Instance, you can check for your new Reserved Instance with DescribeReservedInstances. +// Describes your Spot Fleet requests. // -// For more information, see Reserved Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html) -// and Reserved Instance Marketplace (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Spot Fleet requests are deleted 48 hours after they are canceled and their +// instances are terminated. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation PurchaseReservedInstancesOffering for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOffering -func (c *EC2) PurchaseReservedInstancesOffering(input *PurchaseReservedInstancesOfferingInput) (*PurchaseReservedInstancesOfferingOutput, error) { - req, out := c.PurchaseReservedInstancesOfferingRequest(input) - err := req.Send() - return out, err +// API operation DescribeSpotFleetRequests for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequests +func (c *EC2) DescribeSpotFleetRequests(input *DescribeSpotFleetRequestsInput) (*DescribeSpotFleetRequestsOutput, error) { + req, out := c.DescribeSpotFleetRequestsRequest(input) + return out, req.Send() } -const opPurchaseScheduledInstances = "PurchaseScheduledInstances" +// DescribeSpotFleetRequestsWithContext is the same as DescribeSpotFleetRequests with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSpotFleetRequests for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotFleetRequestsWithContext(ctx aws.Context, input *DescribeSpotFleetRequestsInput, opts ...request.Option) (*DescribeSpotFleetRequestsOutput, error) { + req, out := c.DescribeSpotFleetRequestsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// PurchaseScheduledInstancesRequest generates a "aws/request.Request" representing the -// client's request for the PurchaseScheduledInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeSpotFleetRequestsPages iterates over the pages of a DescribeSpotFleetRequests operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeSpotFleetRequests method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeSpotFleetRequests operation. +// pageNum := 0 +// err := client.DescribeSpotFleetRequestsPages(params, +// func(page *ec2.DescribeSpotFleetRequestsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeSpotFleetRequestsPages(input *DescribeSpotFleetRequestsInput, fn func(*DescribeSpotFleetRequestsOutput, bool) bool) error { + return c.DescribeSpotFleetRequestsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeSpotFleetRequestsPagesWithContext same as DescribeSpotFleetRequestsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotFleetRequestsPagesWithContext(ctx aws.Context, input *DescribeSpotFleetRequestsInput, fn func(*DescribeSpotFleetRequestsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeSpotFleetRequestsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSpotFleetRequestsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeSpotFleetRequestsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeSpotInstanceRequests = "DescribeSpotInstanceRequests" + +// DescribeSpotInstanceRequestsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSpotInstanceRequests operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See PurchaseScheduledInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the PurchaseScheduledInstances method directly -// instead. +// See DescribeSpotInstanceRequests for more information on using the DescribeSpotInstanceRequests +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the PurchaseScheduledInstancesRequest method. -// req, resp := client.PurchaseScheduledInstancesRequest(params) +// +// // Example sending a request using the DescribeSpotInstanceRequestsRequest method. +// req, resp := client.DescribeSpotInstanceRequestsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstances -func (c *EC2) PurchaseScheduledInstancesRequest(input *PurchaseScheduledInstancesInput) (req *request.Request, output *PurchaseScheduledInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequests +func (c *EC2) DescribeSpotInstanceRequestsRequest(input *DescribeSpotInstanceRequestsInput) (req *request.Request, output *DescribeSpotInstanceRequestsOutput) { op := &request.Operation{ - Name: opPurchaseScheduledInstances, + Name: opDescribeSpotInstanceRequests, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &PurchaseScheduledInstancesInput{} + input = &DescribeSpotInstanceRequestsInput{} } - output = &PurchaseScheduledInstancesOutput{} + output = &DescribeSpotInstanceRequestsOutput{} req = c.newRequest(op, input, output) return } -// PurchaseScheduledInstances API operation for Amazon Elastic Compute Cloud. +// DescribeSpotInstanceRequests API operation for Amazon Elastic Compute Cloud. // -// Purchases one or more Scheduled Instances with the specified schedule. +// Describes the specified Spot Instance requests. // -// Scheduled Instances enable you to purchase Amazon EC2 compute capacity by -// the hour for a one-year term. Before you can purchase a Scheduled Instance, -// you must call DescribeScheduledInstanceAvailability to check for available -// schedules and obtain a purchase token. After you purchase a Scheduled Instance, -// you must call RunScheduledInstances during each scheduled time period. +// You can use DescribeSpotInstanceRequests to find a running Spot Instance +// by examining the response. If the status of the Spot Instance is fulfilled, +// the instance ID appears in the response and contains the identifier of the +// instance. Alternatively, you can use DescribeInstances with a filter to look +// for instances where the instance lifecycle is spot. // -// After you purchase a Scheduled Instance, you can't cancel, modify, or resell -// your purchase. +// We recommend that you set MaxResults to a value between 5 and 1000 to limit +// the number of results returned. This paginates the output, which makes the +// list more manageable and returns the results faster. If the list of results +// exceeds your MaxResults value, then that number of results is returned along +// with a NextToken value that can be passed to a subsequent DescribeSpotInstanceRequests +// request to retrieve the remaining results. +// +// Spot Instance requests are deleted four hours after they are canceled and +// their instances are terminated. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation PurchaseScheduledInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstances -func (c *EC2) PurchaseScheduledInstances(input *PurchaseScheduledInstancesInput) (*PurchaseScheduledInstancesOutput, error) { - req, out := c.PurchaseScheduledInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeSpotInstanceRequests for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequests +func (c *EC2) DescribeSpotInstanceRequests(input *DescribeSpotInstanceRequestsInput) (*DescribeSpotInstanceRequestsOutput, error) { + req, out := c.DescribeSpotInstanceRequestsRequest(input) + return out, req.Send() } -const opRebootInstances = "RebootInstances" +// DescribeSpotInstanceRequestsWithContext is the same as DescribeSpotInstanceRequests with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSpotInstanceRequests for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotInstanceRequestsWithContext(ctx aws.Context, input *DescribeSpotInstanceRequestsInput, opts ...request.Option) (*DescribeSpotInstanceRequestsOutput, error) { + req, out := c.DescribeSpotInstanceRequestsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// RebootInstancesRequest generates a "aws/request.Request" representing the -// client's request for the RebootInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeSpotInstanceRequestsPages iterates over the pages of a DescribeSpotInstanceRequests operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See RebootInstances for usage and error information. +// See DescribeSpotInstanceRequests method for more information on how to use this operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RebootInstances method directly -// instead. +// Note: This operation can generate multiple requests to a service. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// // Example iterating over at most 3 pages of a DescribeSpotInstanceRequests operation. +// pageNum := 0 +// err := client.DescribeSpotInstanceRequestsPages(params, +// func(page *ec2.DescribeSpotInstanceRequestsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// // Example sending a request using the RebootInstancesRequest method. -// req, resp := client.RebootInstancesRequest(params) +func (c *EC2) DescribeSpotInstanceRequestsPages(input *DescribeSpotInstanceRequestsInput, fn func(*DescribeSpotInstanceRequestsOutput, bool) bool) error { + return c.DescribeSpotInstanceRequestsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeSpotInstanceRequestsPagesWithContext same as DescribeSpotInstanceRequestsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotInstanceRequestsPagesWithContext(ctx aws.Context, input *DescribeSpotInstanceRequestsInput, fn func(*DescribeSpotInstanceRequestsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeSpotInstanceRequestsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSpotInstanceRequestsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeSpotInstanceRequestsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeSpotPriceHistory = "DescribeSpotPriceHistory" + +// DescribeSpotPriceHistoryRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSpotPriceHistory operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeSpotPriceHistory for more information on using the DescribeSpotPriceHistory +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeSpotPriceHistoryRequest method. +// req, resp := client.DescribeSpotPriceHistoryRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstances -func (c *EC2) RebootInstancesRequest(input *RebootInstancesInput) (req *request.Request, output *RebootInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistory +func (c *EC2) DescribeSpotPriceHistoryRequest(input *DescribeSpotPriceHistoryInput) (req *request.Request, output *DescribeSpotPriceHistoryOutput) { op := &request.Operation{ - Name: opRebootInstances, + Name: opDescribeSpotPriceHistory, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &RebootInstancesInput{} + input = &DescribeSpotPriceHistoryInput{} } - output = &RebootInstancesOutput{} + output = &DescribeSpotPriceHistoryOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// RebootInstances API operation for Amazon Elastic Compute Cloud. -// -// Requests a reboot of one or more instances. This operation is asynchronous; -// it only queues a request to reboot the specified instances. The operation -// succeeds if the instances are valid and belong to you. Requests to reboot -// terminated instances are ignored. +// DescribeSpotPriceHistory API operation for Amazon Elastic Compute Cloud. // -// If an instance does not cleanly shut down within four minutes, Amazon EC2 -// performs a hard reboot. +// Describes the Spot price history. For more information, see Spot Instance +// Pricing History (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html) +// in the Amazon EC2 User Guide for Linux Instances. // -// For more information about troubleshooting, see Getting Console Output and -// Rebooting Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html) -// in the Amazon Elastic Compute Cloud User Guide. +// When you specify a start and end time, this operation returns the prices +// of the instance types within the time range that you specified and the time +// when the price changed. The price is valid within the time period that you +// specified; the response merely indicates the last time that the price changed. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RebootInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstances -func (c *EC2) RebootInstances(input *RebootInstancesInput) (*RebootInstancesOutput, error) { - req, out := c.RebootInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeSpotPriceHistory for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistory +func (c *EC2) DescribeSpotPriceHistory(input *DescribeSpotPriceHistoryInput) (*DescribeSpotPriceHistoryOutput, error) { + req, out := c.DescribeSpotPriceHistoryRequest(input) + return out, req.Send() } -const opRegisterImage = "RegisterImage" +// DescribeSpotPriceHistoryWithContext is the same as DescribeSpotPriceHistory with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSpotPriceHistory for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotPriceHistoryWithContext(ctx aws.Context, input *DescribeSpotPriceHistoryInput, opts ...request.Option) (*DescribeSpotPriceHistoryOutput, error) { + req, out := c.DescribeSpotPriceHistoryRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// RegisterImageRequest generates a "aws/request.Request" representing the -// client's request for the RegisterImage operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeSpotPriceHistoryPages iterates over the pages of a DescribeSpotPriceHistory operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See RegisterImage for usage and error information. +// See DescribeSpotPriceHistory method for more information on how to use this operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RegisterImage method directly -// instead. +// Note: This operation can generate multiple requests to a service. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// // Example iterating over at most 3 pages of a DescribeSpotPriceHistory operation. +// pageNum := 0 +// err := client.DescribeSpotPriceHistoryPages(params, +// func(page *ec2.DescribeSpotPriceHistoryOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// // Example sending a request using the RegisterImageRequest method. -// req, resp := client.RegisterImageRequest(params) +func (c *EC2) DescribeSpotPriceHistoryPages(input *DescribeSpotPriceHistoryInput, fn func(*DescribeSpotPriceHistoryOutput, bool) bool) error { + return c.DescribeSpotPriceHistoryPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeSpotPriceHistoryPagesWithContext same as DescribeSpotPriceHistoryPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSpotPriceHistoryPagesWithContext(ctx aws.Context, input *DescribeSpotPriceHistoryInput, fn func(*DescribeSpotPriceHistoryOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeSpotPriceHistoryInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSpotPriceHistoryRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeSpotPriceHistoryOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeStaleSecurityGroups = "DescribeStaleSecurityGroups" + +// DescribeStaleSecurityGroupsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeStaleSecurityGroups operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeStaleSecurityGroups for more information on using the DescribeStaleSecurityGroups +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeStaleSecurityGroupsRequest method. +// req, resp := client.DescribeStaleSecurityGroupsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImage -func (c *EC2) RegisterImageRequest(input *RegisterImageInput) (req *request.Request, output *RegisterImageOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroups +func (c *EC2) DescribeStaleSecurityGroupsRequest(input *DescribeStaleSecurityGroupsInput) (req *request.Request, output *DescribeStaleSecurityGroupsOutput) { op := &request.Operation{ - Name: opRegisterImage, + Name: opDescribeStaleSecurityGroups, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &RegisterImageInput{} + input = &DescribeStaleSecurityGroupsInput{} } - output = &RegisterImageOutput{} + output = &DescribeStaleSecurityGroupsOutput{} req = c.newRequest(op, input, output) return } -// RegisterImage API operation for Amazon Elastic Compute Cloud. +// DescribeStaleSecurityGroups API operation for Amazon Elastic Compute Cloud. // -// Registers an AMI. When you're creating an AMI, this is the final step you -// must complete before you can launch an instance from the AMI. For more information -// about creating AMIs, see Creating Your Own AMIs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html) -// in the Amazon Elastic Compute Cloud User Guide. +// [VPC only] Describes the stale security group rules for security groups in +// a specified VPC. Rules are stale when they reference a deleted security group +// in a peer VPC, or a security group in a peer VPC for which the VPC peering +// connection has been deleted. // -// For Amazon EBS-backed instances, CreateImage creates and registers the AMI -// in a single request, so you don't have to register the AMI yourself. +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. // -// You can also use RegisterImage to create an Amazon EBS-backed Linux AMI from -// a snapshot of a root device volume. For more information, see Launching an -// Instance from a Snapshot (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_LaunchingInstanceFromSnapshot.html) -// in the Amazon Elastic Compute Cloud User Guide. +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeStaleSecurityGroups for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroups +func (c *EC2) DescribeStaleSecurityGroups(input *DescribeStaleSecurityGroupsInput) (*DescribeStaleSecurityGroupsOutput, error) { + req, out := c.DescribeStaleSecurityGroupsRequest(input) + return out, req.Send() +} + +// DescribeStaleSecurityGroupsWithContext is the same as DescribeStaleSecurityGroups with the addition of +// the ability to pass a context and additional request options. // -// Some Linux distributions, such as Red Hat Enterprise Linux (RHEL) and SUSE -// Linux Enterprise Server (SLES), use the EC2 billingProduct code associated -// with an AMI to verify subscription status for package updates. Creating an -// AMI from an EBS snapshot does not maintain this billing code, and subsequent -// instances launched from such an AMI will not be able to connect to package -// update infrastructure. +// See DescribeStaleSecurityGroups for details on how to use this API operation. // -// Similarly, although you can create a Windows AMI from a snapshot, you can't -// successfully launch an instance from the AMI. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeStaleSecurityGroupsWithContext(ctx aws.Context, input *DescribeStaleSecurityGroupsInput, opts ...request.Option) (*DescribeStaleSecurityGroupsOutput, error) { + req, out := c.DescribeStaleSecurityGroupsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeStaleSecurityGroupsPages iterates over the pages of a DescribeStaleSecurityGroups operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// To create Windows AMIs or to create AMIs for Linux operating systems that -// must retain AMI billing codes to work properly, see CreateImage. +// See DescribeStaleSecurityGroups method for more information on how to use this operation. // -// If needed, you can deregister an AMI at any time. Any modifications you make -// to an AMI backed by an instance store volume invalidates its registration. -// If you make changes to an image, deregister the previous image and register -// the new image. +// Note: This operation can generate multiple requests to a service. // -// You can't register an image where a secondary (non-root) snapshot has AWS -// Marketplace product codes. +// // Example iterating over at most 3 pages of a DescribeStaleSecurityGroups operation. +// pageNum := 0 +// err := client.DescribeStaleSecurityGroupsPages(params, +// func(page *ec2.DescribeStaleSecurityGroupsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. +func (c *EC2) DescribeStaleSecurityGroupsPages(input *DescribeStaleSecurityGroupsInput, fn func(*DescribeStaleSecurityGroupsOutput, bool) bool) error { + return c.DescribeStaleSecurityGroupsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeStaleSecurityGroupsPagesWithContext same as DescribeStaleSecurityGroupsPages except +// it takes a Context and allows setting request options on the pages. // -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RegisterImage for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImage -func (c *EC2) RegisterImage(input *RegisterImageInput) (*RegisterImageOutput, error) { - req, out := c.RegisterImageRequest(input) - err := req.Send() - return out, err +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeStaleSecurityGroupsPagesWithContext(ctx aws.Context, input *DescribeStaleSecurityGroupsInput, fn func(*DescribeStaleSecurityGroupsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeStaleSecurityGroupsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeStaleSecurityGroupsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeStaleSecurityGroupsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() } -const opRejectVpcPeeringConnection = "RejectVpcPeeringConnection" +const opDescribeSubnets = "DescribeSubnets" -// RejectVpcPeeringConnectionRequest generates a "aws/request.Request" representing the -// client's request for the RejectVpcPeeringConnection operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeSubnetsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSubnets operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See RejectVpcPeeringConnection for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RejectVpcPeeringConnection method directly -// instead. +// See DescribeSubnets for more information on using the DescribeSubnets +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the RejectVpcPeeringConnectionRequest method. -// req, resp := client.RejectVpcPeeringConnectionRequest(params) +// +// // Example sending a request using the DescribeSubnetsRequest method. +// req, resp := client.DescribeSubnetsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnection -func (c *EC2) RejectVpcPeeringConnectionRequest(input *RejectVpcPeeringConnectionInput) (req *request.Request, output *RejectVpcPeeringConnectionOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnets +func (c *EC2) DescribeSubnetsRequest(input *DescribeSubnetsInput) (req *request.Request, output *DescribeSubnetsOutput) { op := &request.Operation{ - Name: opRejectVpcPeeringConnection, + Name: opDescribeSubnets, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &RejectVpcPeeringConnectionInput{} + input = &DescribeSubnetsInput{} } - output = &RejectVpcPeeringConnectionOutput{} + output = &DescribeSubnetsOutput{} req = c.newRequest(op, input, output) return } -// RejectVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. +// DescribeSubnets API operation for Amazon Elastic Compute Cloud. // -// Rejects a VPC peering connection request. The VPC peering connection must -// be in the pending-acceptance state. Use the DescribeVpcPeeringConnections -// request to view your outstanding VPC peering connection requests. To delete -// an active VPC peering connection, or to delete a VPC peering connection request -// that you initiated, use DeleteVpcPeeringConnection. +// Describes one or more of your subnets. +// +// For more information, see Your VPC and Subnets (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html) +// in the Amazon Virtual Private Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RejectVpcPeeringConnection for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnection -func (c *EC2) RejectVpcPeeringConnection(input *RejectVpcPeeringConnectionInput) (*RejectVpcPeeringConnectionOutput, error) { - req, out := c.RejectVpcPeeringConnectionRequest(input) - err := req.Send() - return out, err +// API operation DescribeSubnets for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnets +func (c *EC2) DescribeSubnets(input *DescribeSubnetsInput) (*DescribeSubnetsOutput, error) { + req, out := c.DescribeSubnetsRequest(input) + return out, req.Send() } -const opReleaseAddress = "ReleaseAddress" +// DescribeSubnetsWithContext is the same as DescribeSubnets with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSubnets for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSubnetsWithContext(ctx aws.Context, input *DescribeSubnetsInput, opts ...request.Option) (*DescribeSubnetsOutput, error) { + req, out := c.DescribeSubnetsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ReleaseAddressRequest generates a "aws/request.Request" representing the -// client's request for the ReleaseAddress operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeSubnetsPages iterates over the pages of a DescribeSubnets operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See ReleaseAddress for usage and error information. +// See DescribeSubnets method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ReleaseAddress method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeSubnets operation. +// pageNum := 0 +// err := client.DescribeSubnetsPages(params, +// func(page *ec2.DescribeSubnetsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeSubnetsPages(input *DescribeSubnetsInput, fn func(*DescribeSubnetsOutput, bool) bool) error { + return c.DescribeSubnetsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeSubnetsPagesWithContext same as DescribeSubnetsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the ReleaseAddressRequest method. -// req, resp := client.ReleaseAddressRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeSubnetsPagesWithContext(ctx aws.Context, input *DescribeSubnetsInput, fn func(*DescribeSubnetsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeSubnetsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSubnetsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeSubnetsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeTags = "DescribeTags" + +// DescribeTagsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTags operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeTags for more information on using the DescribeTags +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeTagsRequest method. +// req, resp := client.DescribeTagsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddress -func (c *EC2) ReleaseAddressRequest(input *ReleaseAddressInput) (req *request.Request, output *ReleaseAddressOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTags +func (c *EC2) DescribeTagsRequest(input *DescribeTagsInput) (req *request.Request, output *DescribeTagsOutput) { op := &request.Operation{ - Name: opReleaseAddress, + Name: opDescribeTags, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ReleaseAddressInput{} + input = &DescribeTagsInput{} } - output = &ReleaseAddressOutput{} + output = &DescribeTagsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ReleaseAddress API operation for Amazon Elastic Compute Cloud. -// -// Releases the specified Elastic IP address. -// -// After releasing an Elastic IP address, it is released to the IP address pool -// and might be unavailable to you. Be sure to update your DNS records and any -// servers or devices that communicate with the address. If you attempt to release -// an Elastic IP address that you already released, you'll get an AuthFailure -// error if the address is already allocated to another AWS account. +// DescribeTags API operation for Amazon Elastic Compute Cloud. // -// [EC2-Classic, default VPC] Releasing an Elastic IP address automatically -// disassociates it from any instance that it's associated with. To disassociate -// an Elastic IP address without releasing it, use DisassociateAddress. +// Describes the specified tags for your EC2 resources. // -// [Nondefault VPC] You must use DisassociateAddress to disassociate the Elastic -// IP address before you try to release it. Otherwise, Amazon EC2 returns an -// error (InvalidIPAddress.InUse). +// For more information about tags, see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReleaseAddress for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddress -func (c *EC2) ReleaseAddress(input *ReleaseAddressInput) (*ReleaseAddressOutput, error) { - req, out := c.ReleaseAddressRequest(input) - err := req.Send() - return out, err +// API operation DescribeTags for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTags +func (c *EC2) DescribeTags(input *DescribeTagsInput) (*DescribeTagsOutput, error) { + req, out := c.DescribeTagsRequest(input) + return out, req.Send() } -const opReleaseHosts = "ReleaseHosts" +// DescribeTagsWithContext is the same as DescribeTags with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeTags for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTagsWithContext(ctx aws.Context, input *DescribeTagsInput, opts ...request.Option) (*DescribeTagsOutput, error) { + req, out := c.DescribeTagsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ReleaseHostsRequest generates a "aws/request.Request" representing the -// client's request for the ReleaseHosts operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTagsPages iterates over the pages of a DescribeTags operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeTags method for more information on how to use this operation. // -// See ReleaseHosts for usage and error information. +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ReleaseHosts method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeTags operation. +// pageNum := 0 +// err := client.DescribeTagsPages(params, +// func(page *ec2.DescribeTagsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeTagsPages(input *DescribeTagsInput, fn func(*DescribeTagsOutput, bool) bool) error { + return c.DescribeTagsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeTagsPagesWithContext same as DescribeTagsPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the ReleaseHostsRequest method. -// req, resp := client.ReleaseHostsRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTagsPagesWithContext(ctx aws.Context, input *DescribeTagsInput, fn func(*DescribeTagsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTagsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTagsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeTagsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeTrafficMirrorFilters = "DescribeTrafficMirrorFilters" + +// DescribeTrafficMirrorFiltersRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTrafficMirrorFilters operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeTrafficMirrorFilters for more information on using the DescribeTrafficMirrorFilters +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeTrafficMirrorFiltersRequest method. +// req, resp := client.DescribeTrafficMirrorFiltersRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHosts -func (c *EC2) ReleaseHostsRequest(input *ReleaseHostsInput) (req *request.Request, output *ReleaseHostsOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorFilters +func (c *EC2) DescribeTrafficMirrorFiltersRequest(input *DescribeTrafficMirrorFiltersInput) (req *request.Request, output *DescribeTrafficMirrorFiltersOutput) { op := &request.Operation{ - Name: opReleaseHosts, + Name: opDescribeTrafficMirrorFilters, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ReleaseHostsInput{} + input = &DescribeTrafficMirrorFiltersInput{} } - output = &ReleaseHostsOutput{} + output = &DescribeTrafficMirrorFiltersOutput{} req = c.newRequest(op, input, output) return } -// ReleaseHosts API operation for Amazon Elastic Compute Cloud. -// -// When you no longer want to use an On-Demand Dedicated Host it can be released. -// On-Demand billing is stopped and the host goes into released state. The host -// ID of Dedicated Hosts that have been released can no longer be specified -// in another request, e.g., ModifyHosts. You must stop or terminate all instances -// on a host before it can be released. -// -// When Dedicated Hosts are released, it make take some time for them to stop -// counting toward your limit and you may receive capacity errors when trying -// to allocate new Dedicated hosts. Try waiting a few minutes, and then try -// again. +// DescribeTrafficMirrorFilters API operation for Amazon Elastic Compute Cloud. // -// Released hosts will still appear in a DescribeHosts response. +// Describes one or more Traffic Mirror filters. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReleaseHosts for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHosts -func (c *EC2) ReleaseHosts(input *ReleaseHostsInput) (*ReleaseHostsOutput, error) { - req, out := c.ReleaseHostsRequest(input) - err := req.Send() - return out, err +// API operation DescribeTrafficMirrorFilters for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorFilters +func (c *EC2) DescribeTrafficMirrorFilters(input *DescribeTrafficMirrorFiltersInput) (*DescribeTrafficMirrorFiltersOutput, error) { + req, out := c.DescribeTrafficMirrorFiltersRequest(input) + return out, req.Send() } -const opReplaceIamInstanceProfileAssociation = "ReplaceIamInstanceProfileAssociation" +// DescribeTrafficMirrorFiltersWithContext is the same as DescribeTrafficMirrorFilters with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeTrafficMirrorFilters for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTrafficMirrorFiltersWithContext(ctx aws.Context, input *DescribeTrafficMirrorFiltersInput, opts ...request.Option) (*DescribeTrafficMirrorFiltersOutput, error) { + req, out := c.DescribeTrafficMirrorFiltersRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// ReplaceIamInstanceProfileAssociationRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceIamInstanceProfileAssociation operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTrafficMirrorFiltersPages iterates over the pages of a DescribeTrafficMirrorFilters operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeTrafficMirrorFilters method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. // -// See ReplaceIamInstanceProfileAssociation for usage and error information. +// // Example iterating over at most 3 pages of a DescribeTrafficMirrorFilters operation. +// pageNum := 0 +// err := client.DescribeTrafficMirrorFiltersPages(params, +// func(page *ec2.DescribeTrafficMirrorFiltersOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ReplaceIamInstanceProfileAssociation method directly -// instead. +func (c *EC2) DescribeTrafficMirrorFiltersPages(input *DescribeTrafficMirrorFiltersInput, fn func(*DescribeTrafficMirrorFiltersOutput, bool) bool) error { + return c.DescribeTrafficMirrorFiltersPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeTrafficMirrorFiltersPagesWithContext same as DescribeTrafficMirrorFiltersPages except +// it takes a Context and allows setting request options on the pages. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTrafficMirrorFiltersPagesWithContext(ctx aws.Context, input *DescribeTrafficMirrorFiltersInput, fn func(*DescribeTrafficMirrorFiltersOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTrafficMirrorFiltersInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTrafficMirrorFiltersRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeTrafficMirrorFiltersOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeTrafficMirrorSessions = "DescribeTrafficMirrorSessions" + +// DescribeTrafficMirrorSessionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTrafficMirrorSessions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// // Example sending a request using the ReplaceIamInstanceProfileAssociationRequest method. -// req, resp := client.ReplaceIamInstanceProfileAssociationRequest(params) +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeTrafficMirrorSessions for more information on using the DescribeTrafficMirrorSessions +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeTrafficMirrorSessionsRequest method. +// req, resp := client.DescribeTrafficMirrorSessionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociation -func (c *EC2) ReplaceIamInstanceProfileAssociationRequest(input *ReplaceIamInstanceProfileAssociationInput) (req *request.Request, output *ReplaceIamInstanceProfileAssociationOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorSessions +func (c *EC2) DescribeTrafficMirrorSessionsRequest(input *DescribeTrafficMirrorSessionsInput) (req *request.Request, output *DescribeTrafficMirrorSessionsOutput) { op := &request.Operation{ - Name: opReplaceIamInstanceProfileAssociation, + Name: opDescribeTrafficMirrorSessions, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ReplaceIamInstanceProfileAssociationInput{} + input = &DescribeTrafficMirrorSessionsInput{} } - output = &ReplaceIamInstanceProfileAssociationOutput{} + output = &DescribeTrafficMirrorSessionsOutput{} req = c.newRequest(op, input, output) return } -// ReplaceIamInstanceProfileAssociation API operation for Amazon Elastic Compute Cloud. -// -// Replaces an IAM instance profile for the specified running instance. You -// can use this action to change the IAM instance profile that's associated -// with an instance without having to disassociate the existing IAM instance -// profile first. +// DescribeTrafficMirrorSessions API operation for Amazon Elastic Compute Cloud. // -// Use DescribeIamInstanceProfileAssociations to get the association ID. +// Describes one or more Traffic Mirror sessions. By default, all Traffic Mirror +// sessions are described. Alternatively, you can filter the results. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceIamInstanceProfileAssociation for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociation -func (c *EC2) ReplaceIamInstanceProfileAssociation(input *ReplaceIamInstanceProfileAssociationInput) (*ReplaceIamInstanceProfileAssociationOutput, error) { - req, out := c.ReplaceIamInstanceProfileAssociationRequest(input) - err := req.Send() - return out, err +// API operation DescribeTrafficMirrorSessions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorSessions +func (c *EC2) DescribeTrafficMirrorSessions(input *DescribeTrafficMirrorSessionsInput) (*DescribeTrafficMirrorSessionsOutput, error) { + req, out := c.DescribeTrafficMirrorSessionsRequest(input) + return out, req.Send() } -const opReplaceNetworkAclAssociation = "ReplaceNetworkAclAssociation" - -// ReplaceNetworkAclAssociationRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceNetworkAclAssociation operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTrafficMirrorSessionsWithContext is the same as DescribeTrafficMirrorSessions with the addition of +// the ability to pass a context and additional request options. // -// See ReplaceNetworkAclAssociation for usage and error information. +// See DescribeTrafficMirrorSessions for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ReplaceNetworkAclAssociation method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTrafficMirrorSessionsWithContext(ctx aws.Context, input *DescribeTrafficMirrorSessionsInput, opts ...request.Option) (*DescribeTrafficMirrorSessionsOutput, error) { + req, out := c.DescribeTrafficMirrorSessionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeTrafficMirrorSessionsPages iterates over the pages of a DescribeTrafficMirrorSessions operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeTrafficMirrorSessions method for more information on how to use this operation. // -// // Example sending a request using the ReplaceNetworkAclAssociationRequest method. -// req, resp := client.ReplaceNetworkAclAssociationRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeTrafficMirrorSessions operation. +// pageNum := 0 +// err := client.DescribeTrafficMirrorSessionsPages(params, +// func(page *ec2.DescribeTrafficMirrorSessionsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociation -func (c *EC2) ReplaceNetworkAclAssociationRequest(input *ReplaceNetworkAclAssociationInput) (req *request.Request, output *ReplaceNetworkAclAssociationOutput) { - op := &request.Operation{ - Name: opReplaceNetworkAclAssociation, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeTrafficMirrorSessionsPages(input *DescribeTrafficMirrorSessionsInput, fn func(*DescribeTrafficMirrorSessionsOutput, bool) bool) error { + return c.DescribeTrafficMirrorSessionsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ReplaceNetworkAclAssociationInput{} +// DescribeTrafficMirrorSessionsPagesWithContext same as DescribeTrafficMirrorSessionsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTrafficMirrorSessionsPagesWithContext(ctx aws.Context, input *DescribeTrafficMirrorSessionsInput, fn func(*DescribeTrafficMirrorSessionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTrafficMirrorSessionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTrafficMirrorSessionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ReplaceNetworkAclAssociationOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeTrafficMirrorSessionsOutput), !p.HasNextPage()) { + break + } + } -// ReplaceNetworkAclAssociation API operation for Amazon Elastic Compute Cloud. -// -// Changes which network ACL a subnet is associated with. By default when you -// create a subnet, it's automatically associated with the default network ACL. -// For more information about network ACLs, see Network ACLs (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceNetworkAclAssociation for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociation -func (c *EC2) ReplaceNetworkAclAssociation(input *ReplaceNetworkAclAssociationInput) (*ReplaceNetworkAclAssociationOutput, error) { - req, out := c.ReplaceNetworkAclAssociationRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opReplaceNetworkAclEntry = "ReplaceNetworkAclEntry" +const opDescribeTrafficMirrorTargets = "DescribeTrafficMirrorTargets" -// ReplaceNetworkAclEntryRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceNetworkAclEntry operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTrafficMirrorTargetsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTrafficMirrorTargets operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ReplaceNetworkAclEntry for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ReplaceNetworkAclEntry method directly -// instead. +// See DescribeTrafficMirrorTargets for more information on using the DescribeTrafficMirrorTargets +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ReplaceNetworkAclEntryRequest method. -// req, resp := client.ReplaceNetworkAclEntryRequest(params) +// +// // Example sending a request using the DescribeTrafficMirrorTargetsRequest method. +// req, resp := client.DescribeTrafficMirrorTargetsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntry -func (c *EC2) ReplaceNetworkAclEntryRequest(input *ReplaceNetworkAclEntryInput) (req *request.Request, output *ReplaceNetworkAclEntryOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorTargets +func (c *EC2) DescribeTrafficMirrorTargetsRequest(input *DescribeTrafficMirrorTargetsInput) (req *request.Request, output *DescribeTrafficMirrorTargetsOutput) { op := &request.Operation{ - Name: opReplaceNetworkAclEntry, + Name: opDescribeTrafficMirrorTargets, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ReplaceNetworkAclEntryInput{} + input = &DescribeTrafficMirrorTargetsInput{} } - output = &ReplaceNetworkAclEntryOutput{} + output = &DescribeTrafficMirrorTargetsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ReplaceNetworkAclEntry API operation for Amazon Elastic Compute Cloud. +// DescribeTrafficMirrorTargets API operation for Amazon Elastic Compute Cloud. // -// Replaces an entry (rule) in a network ACL. For more information about network -// ACLs, see Network ACLs (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html) -// in the Amazon Virtual Private Cloud User Guide. +// Information about one or more Traffic Mirror targets. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceNetworkAclEntry for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntry -func (c *EC2) ReplaceNetworkAclEntry(input *ReplaceNetworkAclEntryInput) (*ReplaceNetworkAclEntryOutput, error) { - req, out := c.ReplaceNetworkAclEntryRequest(input) - err := req.Send() - return out, err +// API operation DescribeTrafficMirrorTargets for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorTargets +func (c *EC2) DescribeTrafficMirrorTargets(input *DescribeTrafficMirrorTargetsInput) (*DescribeTrafficMirrorTargetsOutput, error) { + req, out := c.DescribeTrafficMirrorTargetsRequest(input) + return out, req.Send() } -const opReplaceRoute = "ReplaceRoute" - -// ReplaceRouteRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceRoute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTrafficMirrorTargetsWithContext is the same as DescribeTrafficMirrorTargets with the addition of +// the ability to pass a context and additional request options. // -// See ReplaceRoute for usage and error information. +// See DescribeTrafficMirrorTargets for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ReplaceRoute method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTrafficMirrorTargetsWithContext(ctx aws.Context, input *DescribeTrafficMirrorTargetsInput, opts ...request.Option) (*DescribeTrafficMirrorTargetsOutput, error) { + req, out := c.DescribeTrafficMirrorTargetsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeTrafficMirrorTargetsPages iterates over the pages of a DescribeTrafficMirrorTargets operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeTrafficMirrorTargets method for more information on how to use this operation. // -// // Example sending a request using the ReplaceRouteRequest method. -// req, resp := client.ReplaceRouteRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeTrafficMirrorTargets operation. +// pageNum := 0 +// err := client.DescribeTrafficMirrorTargetsPages(params, +// func(page *ec2.DescribeTrafficMirrorTargetsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRoute -func (c *EC2) ReplaceRouteRequest(input *ReplaceRouteInput) (req *request.Request, output *ReplaceRouteOutput) { - op := &request.Operation{ - Name: opReplaceRoute, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeTrafficMirrorTargetsPages(input *DescribeTrafficMirrorTargetsInput, fn func(*DescribeTrafficMirrorTargetsOutput, bool) bool) error { + return c.DescribeTrafficMirrorTargetsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ReplaceRouteInput{} +// DescribeTrafficMirrorTargetsPagesWithContext same as DescribeTrafficMirrorTargetsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTrafficMirrorTargetsPagesWithContext(ctx aws.Context, input *DescribeTrafficMirrorTargetsInput, fn func(*DescribeTrafficMirrorTargetsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTrafficMirrorTargetsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTrafficMirrorTargetsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ReplaceRouteOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeTrafficMirrorTargetsOutput), !p.HasNextPage()) { + break + } + } -// ReplaceRoute API operation for Amazon Elastic Compute Cloud. -// -// Replaces an existing route within a route table in a VPC. You must provide -// only one of the following: Internet gateway or virtual private gateway, NAT -// instance, NAT gateway, VPC peering connection, network interface, or egress-only -// Internet gateway. -// -// For more information about route tables, see Route Tables (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceRoute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRoute -func (c *EC2) ReplaceRoute(input *ReplaceRouteInput) (*ReplaceRouteOutput, error) { - req, out := c.ReplaceRouteRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opReplaceRouteTableAssociation = "ReplaceRouteTableAssociation" +const opDescribeTransitGatewayAttachments = "DescribeTransitGatewayAttachments" -// ReplaceRouteTableAssociationRequest generates a "aws/request.Request" representing the -// client's request for the ReplaceRouteTableAssociation operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTransitGatewayAttachmentsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTransitGatewayAttachments operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ReplaceRouteTableAssociation for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ReplaceRouteTableAssociation method directly -// instead. +// See DescribeTransitGatewayAttachments for more information on using the DescribeTransitGatewayAttachments +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ReplaceRouteTableAssociationRequest method. -// req, resp := client.ReplaceRouteTableAssociationRequest(params) +// +// // Example sending a request using the DescribeTransitGatewayAttachmentsRequest method. +// req, resp := client.DescribeTransitGatewayAttachmentsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociation -func (c *EC2) ReplaceRouteTableAssociationRequest(input *ReplaceRouteTableAssociationInput) (req *request.Request, output *ReplaceRouteTableAssociationOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayAttachments +func (c *EC2) DescribeTransitGatewayAttachmentsRequest(input *DescribeTransitGatewayAttachmentsInput) (req *request.Request, output *DescribeTransitGatewayAttachmentsOutput) { op := &request.Operation{ - Name: opReplaceRouteTableAssociation, + Name: opDescribeTransitGatewayAttachments, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ReplaceRouteTableAssociationInput{} + input = &DescribeTransitGatewayAttachmentsInput{} } - output = &ReplaceRouteTableAssociationOutput{} + output = &DescribeTransitGatewayAttachmentsOutput{} req = c.newRequest(op, input, output) return } -// ReplaceRouteTableAssociation API operation for Amazon Elastic Compute Cloud. -// -// Changes the route table associated with a given subnet in a VPC. After the -// operation completes, the subnet uses the routes in the new route table it's -// associated with. For more information about route tables, see Route Tables -// (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html) -// in the Amazon Virtual Private Cloud User Guide. +// DescribeTransitGatewayAttachments API operation for Amazon Elastic Compute Cloud. // -// You can also use ReplaceRouteTableAssociation to change which table is the -// main route table in the VPC. You just specify the main route table's association -// ID and the route table to be the new main route table. +// Describes one or more attachments between resources and transit gateways. +// By default, all attachments are described. Alternatively, you can filter +// the results by attachment ID, attachment state, resource ID, or resource +// owner. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReplaceRouteTableAssociation for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociation -func (c *EC2) ReplaceRouteTableAssociation(input *ReplaceRouteTableAssociationInput) (*ReplaceRouteTableAssociationOutput, error) { - req, out := c.ReplaceRouteTableAssociationRequest(input) - err := req.Send() - return out, err +// API operation DescribeTransitGatewayAttachments for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayAttachments +func (c *EC2) DescribeTransitGatewayAttachments(input *DescribeTransitGatewayAttachmentsInput) (*DescribeTransitGatewayAttachmentsOutput, error) { + req, out := c.DescribeTransitGatewayAttachmentsRequest(input) + return out, req.Send() } -const opReportInstanceStatus = "ReportInstanceStatus" - -// ReportInstanceStatusRequest generates a "aws/request.Request" representing the -// client's request for the ReportInstanceStatus operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTransitGatewayAttachmentsWithContext is the same as DescribeTransitGatewayAttachments with the addition of +// the ability to pass a context and additional request options. // -// See ReportInstanceStatus for usage and error information. +// See DescribeTransitGatewayAttachments for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ReportInstanceStatus method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTransitGatewayAttachmentsWithContext(ctx aws.Context, input *DescribeTransitGatewayAttachmentsInput, opts ...request.Option) (*DescribeTransitGatewayAttachmentsOutput, error) { + req, out := c.DescribeTransitGatewayAttachmentsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeTransitGatewayAttachmentsPages iterates over the pages of a DescribeTransitGatewayAttachments operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeTransitGatewayAttachments method for more information on how to use this operation. // -// // Example sending a request using the ReportInstanceStatusRequest method. -// req, resp := client.ReportInstanceStatusRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeTransitGatewayAttachments operation. +// pageNum := 0 +// err := client.DescribeTransitGatewayAttachmentsPages(params, +// func(page *ec2.DescribeTransitGatewayAttachmentsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatus -func (c *EC2) ReportInstanceStatusRequest(input *ReportInstanceStatusInput) (req *request.Request, output *ReportInstanceStatusOutput) { - op := &request.Operation{ - Name: opReportInstanceStatus, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeTransitGatewayAttachmentsPages(input *DescribeTransitGatewayAttachmentsInput, fn func(*DescribeTransitGatewayAttachmentsOutput, bool) bool) error { + return c.DescribeTransitGatewayAttachmentsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ReportInstanceStatusInput{} +// DescribeTransitGatewayAttachmentsPagesWithContext same as DescribeTransitGatewayAttachmentsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTransitGatewayAttachmentsPagesWithContext(ctx aws.Context, input *DescribeTransitGatewayAttachmentsInput, fn func(*DescribeTransitGatewayAttachmentsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTransitGatewayAttachmentsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTransitGatewayAttachmentsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ReportInstanceStatusOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeTransitGatewayAttachmentsOutput), !p.HasNextPage()) { + break + } + } -// ReportInstanceStatus API operation for Amazon Elastic Compute Cloud. -// -// Submits feedback about the status of an instance. The instance must be in -// the running state. If your experience with the instance differs from the -// instance status returned by DescribeInstanceStatus, use ReportInstanceStatus -// to report your experience with the instance. Amazon EC2 collects this information -// to improve the accuracy of status checks. -// -// Use of this action does not change the value returned by DescribeInstanceStatus. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ReportInstanceStatus for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatus -func (c *EC2) ReportInstanceStatus(input *ReportInstanceStatusInput) (*ReportInstanceStatusOutput, error) { - req, out := c.ReportInstanceStatusRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opRequestSpotFleet = "RequestSpotFleet" +const opDescribeTransitGatewayRouteTables = "DescribeTransitGatewayRouteTables" -// RequestSpotFleetRequest generates a "aws/request.Request" representing the -// client's request for the RequestSpotFleet operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTransitGatewayRouteTablesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTransitGatewayRouteTables operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See RequestSpotFleet for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RequestSpotFleet method directly -// instead. +// See DescribeTransitGatewayRouteTables for more information on using the DescribeTransitGatewayRouteTables +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the RequestSpotFleetRequest method. -// req, resp := client.RequestSpotFleetRequest(params) +// +// // Example sending a request using the DescribeTransitGatewayRouteTablesRequest method. +// req, resp := client.DescribeTransitGatewayRouteTablesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleet -func (c *EC2) RequestSpotFleetRequest(input *RequestSpotFleetInput) (req *request.Request, output *RequestSpotFleetOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayRouteTables +func (c *EC2) DescribeTransitGatewayRouteTablesRequest(input *DescribeTransitGatewayRouteTablesInput) (req *request.Request, output *DescribeTransitGatewayRouteTablesOutput) { op := &request.Operation{ - Name: opRequestSpotFleet, + Name: opDescribeTransitGatewayRouteTables, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &RequestSpotFleetInput{} + input = &DescribeTransitGatewayRouteTablesInput{} } - output = &RequestSpotFleetOutput{} + output = &DescribeTransitGatewayRouteTablesOutput{} req = c.newRequest(op, input, output) return } -// RequestSpotFleet API operation for Amazon Elastic Compute Cloud. -// -// Creates a Spot fleet request. -// -// You can submit a single request that includes multiple launch specifications -// that vary by instance type, AMI, Availability Zone, or subnet. -// -// By default, the Spot fleet requests Spot instances in the Spot pool where -// the price per unit is the lowest. Each launch specification can include its -// own instance weighting that reflects the value of the instance type to your -// application workload. +// DescribeTransitGatewayRouteTables API operation for Amazon Elastic Compute Cloud. // -// Alternatively, you can specify that the Spot fleet distribute the target -// capacity across the Spot pools included in its launch specifications. By -// ensuring that the Spot instances in your Spot fleet are in different Spot -// pools, you can improve the availability of your fleet. -// -// For more information, see Spot Fleet Requests (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes one or more transit gateway route tables. By default, all transit +// gateway route tables are described. Alternatively, you can filter the results. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RequestSpotFleet for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleet -func (c *EC2) RequestSpotFleet(input *RequestSpotFleetInput) (*RequestSpotFleetOutput, error) { - req, out := c.RequestSpotFleetRequest(input) - err := req.Send() - return out, err +// API operation DescribeTransitGatewayRouteTables for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayRouteTables +func (c *EC2) DescribeTransitGatewayRouteTables(input *DescribeTransitGatewayRouteTablesInput) (*DescribeTransitGatewayRouteTablesOutput, error) { + req, out := c.DescribeTransitGatewayRouteTablesRequest(input) + return out, req.Send() } -const opRequestSpotInstances = "RequestSpotInstances" - -// RequestSpotInstancesRequest generates a "aws/request.Request" representing the -// client's request for the RequestSpotInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTransitGatewayRouteTablesWithContext is the same as DescribeTransitGatewayRouteTables with the addition of +// the ability to pass a context and additional request options. // -// See RequestSpotInstances for usage and error information. +// See DescribeTransitGatewayRouteTables for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RequestSpotInstances method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTransitGatewayRouteTablesWithContext(ctx aws.Context, input *DescribeTransitGatewayRouteTablesInput, opts ...request.Option) (*DescribeTransitGatewayRouteTablesOutput, error) { + req, out := c.DescribeTransitGatewayRouteTablesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeTransitGatewayRouteTablesPages iterates over the pages of a DescribeTransitGatewayRouteTables operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeTransitGatewayRouteTables method for more information on how to use this operation. // -// // Example sending a request using the RequestSpotInstancesRequest method. -// req, resp := client.RequestSpotInstancesRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeTransitGatewayRouteTables operation. +// pageNum := 0 +// err := client.DescribeTransitGatewayRouteTablesPages(params, +// func(page *ec2.DescribeTransitGatewayRouteTablesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstances -func (c *EC2) RequestSpotInstancesRequest(input *RequestSpotInstancesInput) (req *request.Request, output *RequestSpotInstancesOutput) { - op := &request.Operation{ - Name: opRequestSpotInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeTransitGatewayRouteTablesPages(input *DescribeTransitGatewayRouteTablesInput, fn func(*DescribeTransitGatewayRouteTablesOutput, bool) bool) error { + return c.DescribeTransitGatewayRouteTablesPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &RequestSpotInstancesInput{} +// DescribeTransitGatewayRouteTablesPagesWithContext same as DescribeTransitGatewayRouteTablesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTransitGatewayRouteTablesPagesWithContext(ctx aws.Context, input *DescribeTransitGatewayRouteTablesInput, fn func(*DescribeTransitGatewayRouteTablesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTransitGatewayRouteTablesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTransitGatewayRouteTablesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &RequestSpotInstancesOutput{} - req = c.newRequest(op, input, output) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeTransitGatewayRouteTablesOutput), !p.HasNextPage()) { + break + } + } -// RequestSpotInstances API operation for Amazon Elastic Compute Cloud. -// -// Creates a Spot instance request. Spot instances are instances that Amazon -// EC2 launches when the bid price that you specify exceeds the current Spot -// price. Amazon EC2 periodically sets the Spot price based on available Spot -// Instance capacity and current Spot instance requests. For more information, -// see Spot Instance Requests (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RequestSpotInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstances -func (c *EC2) RequestSpotInstances(input *RequestSpotInstancesInput) (*RequestSpotInstancesOutput, error) { - req, out := c.RequestSpotInstancesRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opResetImageAttribute = "ResetImageAttribute" +const opDescribeTransitGatewayVpcAttachments = "DescribeTransitGatewayVpcAttachments" -// ResetImageAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetImageAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTransitGatewayVpcAttachmentsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTransitGatewayVpcAttachments operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ResetImageAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ResetImageAttribute method directly -// instead. +// See DescribeTransitGatewayVpcAttachments for more information on using the DescribeTransitGatewayVpcAttachments +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ResetImageAttributeRequest method. -// req, resp := client.ResetImageAttributeRequest(params) +// +// // Example sending a request using the DescribeTransitGatewayVpcAttachmentsRequest method. +// req, resp := client.DescribeTransitGatewayVpcAttachmentsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttribute -func (c *EC2) ResetImageAttributeRequest(input *ResetImageAttributeInput) (req *request.Request, output *ResetImageAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayVpcAttachments +func (c *EC2) DescribeTransitGatewayVpcAttachmentsRequest(input *DescribeTransitGatewayVpcAttachmentsInput) (req *request.Request, output *DescribeTransitGatewayVpcAttachmentsOutput) { op := &request.Operation{ - Name: opResetImageAttribute, + Name: opDescribeTransitGatewayVpcAttachments, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ResetImageAttributeInput{} + input = &DescribeTransitGatewayVpcAttachmentsInput{} } - output = &ResetImageAttributeOutput{} + output = &DescribeTransitGatewayVpcAttachmentsOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ResetImageAttribute API operation for Amazon Elastic Compute Cloud. -// -// Resets an attribute of an AMI to its default value. +// DescribeTransitGatewayVpcAttachments API operation for Amazon Elastic Compute Cloud. // -// The productCodes attribute can't be reset. +// Describes one or more VPC attachments. By default, all VPC attachments are +// described. Alternatively, you can filter the results. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetImageAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttribute -func (c *EC2) ResetImageAttribute(input *ResetImageAttributeInput) (*ResetImageAttributeOutput, error) { - req, out := c.ResetImageAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeTransitGatewayVpcAttachments for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayVpcAttachments +func (c *EC2) DescribeTransitGatewayVpcAttachments(input *DescribeTransitGatewayVpcAttachmentsInput) (*DescribeTransitGatewayVpcAttachmentsOutput, error) { + req, out := c.DescribeTransitGatewayVpcAttachmentsRequest(input) + return out, req.Send() } -const opResetInstanceAttribute = "ResetInstanceAttribute" - -// ResetInstanceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetInstanceAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTransitGatewayVpcAttachmentsWithContext is the same as DescribeTransitGatewayVpcAttachments with the addition of +// the ability to pass a context and additional request options. // -// See ResetInstanceAttribute for usage and error information. +// See DescribeTransitGatewayVpcAttachments for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ResetInstanceAttribute method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTransitGatewayVpcAttachmentsWithContext(ctx aws.Context, input *DescribeTransitGatewayVpcAttachmentsInput, opts ...request.Option) (*DescribeTransitGatewayVpcAttachmentsOutput, error) { + req, out := c.DescribeTransitGatewayVpcAttachmentsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeTransitGatewayVpcAttachmentsPages iterates over the pages of a DescribeTransitGatewayVpcAttachments operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeTransitGatewayVpcAttachments method for more information on how to use this operation. // -// // Example sending a request using the ResetInstanceAttributeRequest method. -// req, resp := client.ResetInstanceAttributeRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeTransitGatewayVpcAttachments operation. +// pageNum := 0 +// err := client.DescribeTransitGatewayVpcAttachmentsPages(params, +// func(page *ec2.DescribeTransitGatewayVpcAttachmentsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttribute -func (c *EC2) ResetInstanceAttributeRequest(input *ResetInstanceAttributeInput) (req *request.Request, output *ResetInstanceAttributeOutput) { - op := &request.Operation{ - Name: opResetInstanceAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeTransitGatewayVpcAttachmentsPages(input *DescribeTransitGatewayVpcAttachmentsInput, fn func(*DescribeTransitGatewayVpcAttachmentsOutput, bool) bool) error { + return c.DescribeTransitGatewayVpcAttachmentsPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ResetInstanceAttributeInput{} +// DescribeTransitGatewayVpcAttachmentsPagesWithContext same as DescribeTransitGatewayVpcAttachmentsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTransitGatewayVpcAttachmentsPagesWithContext(ctx aws.Context, input *DescribeTransitGatewayVpcAttachmentsInput, fn func(*DescribeTransitGatewayVpcAttachmentsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTransitGatewayVpcAttachmentsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTransitGatewayVpcAttachmentsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ResetInstanceAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeTransitGatewayVpcAttachmentsOutput), !p.HasNextPage()) { + break + } + } -// ResetInstanceAttribute API operation for Amazon Elastic Compute Cloud. -// -// Resets an attribute of an instance to its default value. To reset the kernel -// or ramdisk, the instance must be in a stopped state. To reset the sourceDestCheck, -// the instance can be either running or stopped. -// -// The sourceDestCheck attribute controls whether source/destination checking -// is enabled. The default value is true, which means checking is enabled. This -// value must be false for a NAT instance to perform NAT. For more information, -// see NAT Instances (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) -// in the Amazon Virtual Private Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetInstanceAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttribute -func (c *EC2) ResetInstanceAttribute(input *ResetInstanceAttributeInput) (*ResetInstanceAttributeOutput, error) { - req, out := c.ResetInstanceAttributeRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opResetNetworkInterfaceAttribute = "ResetNetworkInterfaceAttribute" +const opDescribeTransitGateways = "DescribeTransitGateways" -// ResetNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetNetworkInterfaceAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTransitGatewaysRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTransitGateways operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See ResetNetworkInterfaceAttribute for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ResetNetworkInterfaceAttribute method directly -// instead. +// See DescribeTransitGateways for more information on using the DescribeTransitGateways +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the ResetNetworkInterfaceAttributeRequest method. -// req, resp := client.ResetNetworkInterfaceAttributeRequest(params) +// +// // Example sending a request using the DescribeTransitGatewaysRequest method. +// req, resp := client.DescribeTransitGatewaysRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttribute -func (c *EC2) ResetNetworkInterfaceAttributeRequest(input *ResetNetworkInterfaceAttributeInput) (req *request.Request, output *ResetNetworkInterfaceAttributeOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGateways +func (c *EC2) DescribeTransitGatewaysRequest(input *DescribeTransitGatewaysInput) (req *request.Request, output *DescribeTransitGatewaysOutput) { op := &request.Operation{ - Name: opResetNetworkInterfaceAttribute, + Name: opDescribeTransitGateways, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &ResetNetworkInterfaceAttributeInput{} + input = &DescribeTransitGatewaysInput{} } - output = &ResetNetworkInterfaceAttributeOutput{} + output = &DescribeTransitGatewaysOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// ResetNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. +// DescribeTransitGateways API operation for Amazon Elastic Compute Cloud. // -// Resets a network interface attribute. You can specify only one attribute -// at a time. +// Describes one or more transit gateways. By default, all transit gateways +// are described. Alternatively, you can filter the results. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetNetworkInterfaceAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttribute -func (c *EC2) ResetNetworkInterfaceAttribute(input *ResetNetworkInterfaceAttributeInput) (*ResetNetworkInterfaceAttributeOutput, error) { - req, out := c.ResetNetworkInterfaceAttributeRequest(input) - err := req.Send() - return out, err +// API operation DescribeTransitGateways for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGateways +func (c *EC2) DescribeTransitGateways(input *DescribeTransitGatewaysInput) (*DescribeTransitGatewaysOutput, error) { + req, out := c.DescribeTransitGatewaysRequest(input) + return out, req.Send() } -const opResetSnapshotAttribute = "ResetSnapshotAttribute" - -// ResetSnapshotAttributeRequest generates a "aws/request.Request" representing the -// client's request for the ResetSnapshotAttribute operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeTransitGatewaysWithContext is the same as DescribeTransitGateways with the addition of +// the ability to pass a context and additional request options. // -// See ResetSnapshotAttribute for usage and error information. +// See DescribeTransitGateways for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the ResetSnapshotAttribute method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTransitGatewaysWithContext(ctx aws.Context, input *DescribeTransitGatewaysInput, opts ...request.Option) (*DescribeTransitGatewaysOutput, error) { + req, out := c.DescribeTransitGatewaysRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeTransitGatewaysPages iterates over the pages of a DescribeTransitGateways operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeTransitGateways method for more information on how to use this operation. // -// // Example sending a request using the ResetSnapshotAttributeRequest method. -// req, resp := client.ResetSnapshotAttributeRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } +// // Example iterating over at most 3 pages of a DescribeTransitGateways operation. +// pageNum := 0 +// err := client.DescribeTransitGatewaysPages(params, +// func(page *ec2.DescribeTransitGatewaysOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttribute -func (c *EC2) ResetSnapshotAttributeRequest(input *ResetSnapshotAttributeInput) (req *request.Request, output *ResetSnapshotAttributeOutput) { - op := &request.Operation{ - Name: opResetSnapshotAttribute, - HTTPMethod: "POST", - HTTPPath: "/", - } +func (c *EC2) DescribeTransitGatewaysPages(input *DescribeTransitGatewaysInput, fn func(*DescribeTransitGatewaysOutput, bool) bool) error { + return c.DescribeTransitGatewaysPagesWithContext(aws.BackgroundContext(), input, fn) +} - if input == nil { - input = &ResetSnapshotAttributeInput{} +// DescribeTransitGatewaysPagesWithContext same as DescribeTransitGatewaysPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeTransitGatewaysPagesWithContext(ctx aws.Context, input *DescribeTransitGatewaysInput, fn func(*DescribeTransitGatewaysOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTransitGatewaysInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTransitGatewaysRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - output = &ResetSnapshotAttributeOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return -} + for p.Next() { + if !fn(p.Page().(*DescribeTransitGatewaysOutput), !p.HasNextPage()) { + break + } + } -// ResetSnapshotAttribute API operation for Amazon Elastic Compute Cloud. -// -// Resets permission settings for the specified snapshot. -// -// For more information on modifying snapshot permissions, see Sharing Snapshots -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation ResetSnapshotAttribute for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttribute -func (c *EC2) ResetSnapshotAttribute(input *ResetSnapshotAttributeInput) (*ResetSnapshotAttributeOutput, error) { - req, out := c.ResetSnapshotAttributeRequest(input) - err := req.Send() - return out, err + return p.Err() } -const opRestoreAddressToClassic = "RestoreAddressToClassic" +const opDescribeVolumeAttribute = "DescribeVolumeAttribute" -// RestoreAddressToClassicRequest generates a "aws/request.Request" representing the -// client's request for the RestoreAddressToClassic operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeVolumeAttributeRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVolumeAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See RestoreAddressToClassic for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RestoreAddressToClassic method directly -// instead. +// See DescribeVolumeAttribute for more information on using the DescribeVolumeAttribute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the RestoreAddressToClassicRequest method. -// req, resp := client.RestoreAddressToClassicRequest(params) +// +// // Example sending a request using the DescribeVolumeAttributeRequest method. +// req, resp := client.DescribeVolumeAttributeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassic -func (c *EC2) RestoreAddressToClassicRequest(input *RestoreAddressToClassicInput) (req *request.Request, output *RestoreAddressToClassicOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttribute +func (c *EC2) DescribeVolumeAttributeRequest(input *DescribeVolumeAttributeInput) (req *request.Request, output *DescribeVolumeAttributeOutput) { op := &request.Operation{ - Name: opRestoreAddressToClassic, + Name: opDescribeVolumeAttribute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &RestoreAddressToClassicInput{} + input = &DescribeVolumeAttributeInput{} } - output = &RestoreAddressToClassicOutput{} + output = &DescribeVolumeAttributeOutput{} req = c.newRequest(op, input, output) return } -// RestoreAddressToClassic API operation for Amazon Elastic Compute Cloud. +// DescribeVolumeAttribute API operation for Amazon Elastic Compute Cloud. // -// Restores an Elastic IP address that was previously moved to the EC2-VPC platform -// back to the EC2-Classic platform. You cannot move an Elastic IP address that -// was originally allocated for use in EC2-VPC. The Elastic IP address must -// not be associated with an instance or network interface. +// Describes the specified attribute of the specified volume. You can specify +// only one attribute at a time. +// +// For more information about EBS volumes, see Amazon EBS Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RestoreAddressToClassic for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassic -func (c *EC2) RestoreAddressToClassic(input *RestoreAddressToClassicInput) (*RestoreAddressToClassicOutput, error) { - req, out := c.RestoreAddressToClassicRequest(input) - err := req.Send() - return out, err +// API operation DescribeVolumeAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttribute +func (c *EC2) DescribeVolumeAttribute(input *DescribeVolumeAttributeInput) (*DescribeVolumeAttributeOutput, error) { + req, out := c.DescribeVolumeAttributeRequest(input) + return out, req.Send() } -const opRevokeSecurityGroupEgress = "RevokeSecurityGroupEgress" +// DescribeVolumeAttributeWithContext is the same as DescribeVolumeAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVolumeAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVolumeAttributeWithContext(ctx aws.Context, input *DescribeVolumeAttributeInput, opts ...request.Option) (*DescribeVolumeAttributeOutput, error) { + req, out := c.DescribeVolumeAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// RevokeSecurityGroupEgressRequest generates a "aws/request.Request" representing the -// client's request for the RevokeSecurityGroupEgress operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeVolumeStatus = "DescribeVolumeStatus" + +// DescribeVolumeStatusRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVolumeStatus operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See RevokeSecurityGroupEgress for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RevokeSecurityGroupEgress method directly -// instead. +// See DescribeVolumeStatus for more information on using the DescribeVolumeStatus +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the RevokeSecurityGroupEgressRequest method. -// req, resp := client.RevokeSecurityGroupEgressRequest(params) +// +// // Example sending a request using the DescribeVolumeStatusRequest method. +// req, resp := client.DescribeVolumeStatusRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgress -func (c *EC2) RevokeSecurityGroupEgressRequest(input *RevokeSecurityGroupEgressInput) (req *request.Request, output *RevokeSecurityGroupEgressOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatus +func (c *EC2) DescribeVolumeStatusRequest(input *DescribeVolumeStatusInput) (req *request.Request, output *DescribeVolumeStatusOutput) { op := &request.Operation{ - Name: opRevokeSecurityGroupEgress, + Name: opDescribeVolumeStatus, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &RevokeSecurityGroupEgressInput{} + input = &DescribeVolumeStatusInput{} } - output = &RevokeSecurityGroupEgressOutput{} + output = &DescribeVolumeStatusOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// RevokeSecurityGroupEgress API operation for Amazon Elastic Compute Cloud. +// DescribeVolumeStatus API operation for Amazon Elastic Compute Cloud. // -// [EC2-VPC only] Removes one or more egress rules from a security group for -// EC2-VPC. This action doesn't apply to security groups for use in EC2-Classic. -// The values that you specify in the revoke request (for example, ports) must -// match the existing rule's values for the rule to be revoked. +// Describes the status of the specified volumes. Volume status provides the +// result of the checks performed on your volumes to determine events that can +// impair the performance of your volumes. The performance of a volume can be +// affected if an issue occurs on the volume's underlying host. If the volume's +// underlying host experiences a power outage or system issue, after the system +// is restored, there could be data inconsistencies on the volume. Volume events +// notify you if this occurs. Volume actions notify you if any action needs +// to be taken in response to the event. // -// Each rule consists of the protocol and the IPv4 or IPv6 CIDR range or source -// security group. For the TCP and UDP protocols, you must also specify the -// destination port or range of ports. For the ICMP protocol, you must also -// specify the ICMP type and code. +// The DescribeVolumeStatus operation provides the following information about +// the specified volumes: // -// Rule changes are propagated to instances within the security group as quickly -// as possible. However, a small delay might occur. +// Status: Reflects the current status of the volume. The possible values are +// ok, impaired , warning, or insufficient-data. If all checks pass, the overall +// status of the volume is ok. If the check fails, the overall status is impaired. +// If the status is insufficient-data, then the checks may still be taking place +// on your volume at the time. We recommend that you retry the request. For +// more information about volume status, see Monitoring the Status of Your Volumes +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-status.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Events: Reflect the cause of a volume status and may require you to take +// action. For example, if your volume returns an impaired status, then the +// volume event might be potential-data-inconsistency. This means that your +// volume has been affected by an issue with the underlying host, has all I/O +// operations disabled, and may have inconsistent data. +// +// Actions: Reflect the actions you may have to take in response to an event. +// For example, if the status of the volume is impaired and the volume event +// shows potential-data-inconsistency, then the action shows enable-volume-io. +// This means that you may want to enable the I/O operations for the volume +// by calling the EnableVolumeIO action and then check the volume for data consistency. +// +// Volume status is based on the volume status checks, and does not reflect +// the volume state. Therefore, volume status does not indicate volumes in the +// error state (for example, when a volume is incapable of accepting I/O.) // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RevokeSecurityGroupEgress for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgress -func (c *EC2) RevokeSecurityGroupEgress(input *RevokeSecurityGroupEgressInput) (*RevokeSecurityGroupEgressOutput, error) { - req, out := c.RevokeSecurityGroupEgressRequest(input) - err := req.Send() - return out, err +// API operation DescribeVolumeStatus for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatus +func (c *EC2) DescribeVolumeStatus(input *DescribeVolumeStatusInput) (*DescribeVolumeStatusOutput, error) { + req, out := c.DescribeVolumeStatusRequest(input) + return out, req.Send() } -const opRevokeSecurityGroupIngress = "RevokeSecurityGroupIngress" +// DescribeVolumeStatusWithContext is the same as DescribeVolumeStatus with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVolumeStatus for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVolumeStatusWithContext(ctx aws.Context, input *DescribeVolumeStatusInput, opts ...request.Option) (*DescribeVolumeStatusOutput, error) { + req, out := c.DescribeVolumeStatusRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// RevokeSecurityGroupIngressRequest generates a "aws/request.Request" representing the -// client's request for the RevokeSecurityGroupIngress operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeVolumeStatusPages iterates over the pages of a DescribeVolumeStatus operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeVolumeStatus method for more information on how to use this operation. // -// See RevokeSecurityGroupIngress for usage and error information. +// Note: This operation can generate multiple requests to a service. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RevokeSecurityGroupIngress method directly -// instead. +// // Example iterating over at most 3 pages of a DescribeVolumeStatus operation. +// pageNum := 0 +// err := client.DescribeVolumeStatusPages(params, +// func(page *ec2.DescribeVolumeStatusOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +func (c *EC2) DescribeVolumeStatusPages(input *DescribeVolumeStatusInput, fn func(*DescribeVolumeStatusOutput, bool) bool) error { + return c.DescribeVolumeStatusPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVolumeStatusPagesWithContext same as DescribeVolumeStatusPages except +// it takes a Context and allows setting request options on the pages. // -// // Example sending a request using the RevokeSecurityGroupIngressRequest method. -// req, resp := client.RevokeSecurityGroupIngressRequest(params) +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVolumeStatusPagesWithContext(ctx aws.Context, input *DescribeVolumeStatusInput, fn func(*DescribeVolumeStatusOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVolumeStatusInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVolumeStatusRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVolumeStatusOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVolumes = "DescribeVolumes" + +// DescribeVolumesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVolumes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVolumes for more information on using the DescribeVolumes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVolumesRequest method. +// req, resp := client.DescribeVolumesRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngress -func (c *EC2) RevokeSecurityGroupIngressRequest(input *RevokeSecurityGroupIngressInput) (req *request.Request, output *RevokeSecurityGroupIngressOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumes +func (c *EC2) DescribeVolumesRequest(input *DescribeVolumesInput) (req *request.Request, output *DescribeVolumesOutput) { op := &request.Operation{ - Name: opRevokeSecurityGroupIngress, + Name: opDescribeVolumes, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &RevokeSecurityGroupIngressInput{} + input = &DescribeVolumesInput{} } - output = &RevokeSecurityGroupIngressOutput{} + output = &DescribeVolumesOutput{} req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) return } -// RevokeSecurityGroupIngress API operation for Amazon Elastic Compute Cloud. +// DescribeVolumes API operation for Amazon Elastic Compute Cloud. // -// Removes one or more ingress rules from a security group. The values that -// you specify in the revoke request (for example, ports) must match the existing -// rule's values for the rule to be removed. +// Describes the specified EBS volumes or all of your EBS volumes. // -// Each rule consists of the protocol and the CIDR range or source security -// group. For the TCP and UDP protocols, you must also specify the destination -// port or range of ports. For the ICMP protocol, you must also specify the -// ICMP type and code. +// If you are describing a long list of volumes, you can paginate the output +// to make the list more manageable. The MaxResults parameter sets the maximum +// number of results returned in a single page. If the list of results exceeds +// your MaxResults value, then that number of results is returned along with +// a NextToken value that can be passed to a subsequent DescribeVolumes request +// to retrieve the remaining results. // -// Rule changes are propagated to instances within the security group as quickly -// as possible. However, a small delay might occur. +// For more information about EBS volumes, see Amazon EBS Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html) +// in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RevokeSecurityGroupIngress for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngress -func (c *EC2) RevokeSecurityGroupIngress(input *RevokeSecurityGroupIngressInput) (*RevokeSecurityGroupIngressOutput, error) { - req, out := c.RevokeSecurityGroupIngressRequest(input) - err := req.Send() - return out, err +// API operation DescribeVolumes for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumes +func (c *EC2) DescribeVolumes(input *DescribeVolumesInput) (*DescribeVolumesOutput, error) { + req, out := c.DescribeVolumesRequest(input) + return out, req.Send() } -const opRunInstances = "RunInstances" +// DescribeVolumesWithContext is the same as DescribeVolumes with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVolumes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVolumesWithContext(ctx aws.Context, input *DescribeVolumesInput, opts ...request.Option) (*DescribeVolumesOutput, error) { + req, out := c.DescribeVolumesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// RunInstancesRequest generates a "aws/request.Request" representing the -// client's request for the RunInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeVolumesPages iterates over the pages of a DescribeVolumes operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeVolumes method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeVolumes operation. +// pageNum := 0 +// err := client.DescribeVolumesPages(params, +// func(page *ec2.DescribeVolumesOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeVolumesPages(input *DescribeVolumesInput, fn func(*DescribeVolumesOutput, bool) bool) error { + return c.DescribeVolumesPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVolumesPagesWithContext same as DescribeVolumesPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVolumesPagesWithContext(ctx aws.Context, input *DescribeVolumesInput, fn func(*DescribeVolumesOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVolumesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVolumesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVolumesOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVolumesModifications = "DescribeVolumesModifications" + +// DescribeVolumesModificationsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVolumesModifications operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See RunInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RunInstances method directly -// instead. +// See DescribeVolumesModifications for more information on using the DescribeVolumesModifications +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the RunInstancesRequest method. -// req, resp := client.RunInstancesRequest(params) +// +// // Example sending a request using the DescribeVolumesModificationsRequest method. +// req, resp := client.DescribeVolumesModificationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstances -func (c *EC2) RunInstancesRequest(input *RunInstancesInput) (req *request.Request, output *Reservation) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModifications +func (c *EC2) DescribeVolumesModificationsRequest(input *DescribeVolumesModificationsInput) (req *request.Request, output *DescribeVolumesModificationsOutput) { op := &request.Operation{ - Name: opRunInstances, + Name: opDescribeVolumesModifications, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &RunInstancesInput{} + input = &DescribeVolumesModificationsInput{} } - output = &Reservation{} + output = &DescribeVolumesModificationsOutput{} req = c.newRequest(op, input, output) return } -// RunInstances API operation for Amazon Elastic Compute Cloud. -// -// Launches the specified number of instances using an AMI for which you have -// permissions. -// -// You can specify a number of options, or leave the default options. The following -// rules apply: -// -// * [EC2-VPC] If you don't specify a subnet ID, we choose a default subnet -// from your default VPC for you. If you don't have a default VPC, you must -// specify a subnet ID in the request. +// DescribeVolumesModifications API operation for Amazon Elastic Compute Cloud. // -// * [EC2-Classic] If don't specify an Availability Zone, we choose one for -// you. +// Reports the current modification status of EBS volumes. // -// * Some instance types must be launched into a VPC. If you do not have -// a default VPC, or if you do not specify a subnet ID, the request fails. -// For more information, see Instance Types Available Only in a VPC (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html#vpc-only-instance-types). +// Current-generation EBS volumes support modification of attributes including +// type, size, and (for io1 volumes) IOPS provisioning while either attached +// to or detached from an instance. Following an action from the API or the +// console to modify a volume, the status of the modification may be modifying, +// optimizing, completed, or failed. If a volume has never been modified, then +// certain elements of the returned VolumeModification objects are null. // -// * [EC2-VPC] All instances have a network interface with a primary private -// IPv4 address. If you don't specify this address, we choose one from the -// IPv4 range of your subnet. +// You can also use CloudWatch Events to check the status of a modification +// to an EBS volume. For information about CloudWatch Events, see the Amazon +// CloudWatch Events User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/). +// For more information, see Monitoring Volume Modifications" (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#monitoring_mods) +// in the Amazon Elastic Compute Cloud User Guide. // -// * Not all instance types support IPv6 addresses. For more information, -// see Instance Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html). +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. // -// * If you don't specify a security group ID, we use the default security -// group. For more information, see Security Groups (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html). +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVolumesModifications for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModifications +func (c *EC2) DescribeVolumesModifications(input *DescribeVolumesModificationsInput) (*DescribeVolumesModificationsOutput, error) { + req, out := c.DescribeVolumesModificationsRequest(input) + return out, req.Send() +} + +// DescribeVolumesModificationsWithContext is the same as DescribeVolumesModifications with the addition of +// the ability to pass a context and additional request options. // -// * If any of the AMIs have a product code attached for which the user has -// not subscribed, the request fails. +// See DescribeVolumesModifications for details on how to use this API operation. // -// To ensure faster instance launches, break up large requests into smaller -// batches. For example, create 5 separate launch requests for 100 instances -// each instead of 1 launch request for 500 instances. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVolumesModificationsWithContext(ctx aws.Context, input *DescribeVolumesModificationsInput, opts ...request.Option) (*DescribeVolumesModificationsOutput, error) { + req, out := c.DescribeVolumesModificationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeVolumesModificationsPages iterates over the pages of a DescribeVolumesModifications operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// An instance is ready for you to use when it's in the running state. You can -// check the state of your instance using DescribeInstances. After launch, you -// can apply tags to your running instance (requires a resource ID). For more -// information, see CreateTags and Tagging Your Amazon EC2 Resources (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). +// See DescribeVolumesModifications method for more information on how to use this operation. // -// Linux instances have access to the public key of the key pair at boot. You -// can use this key to provide secure access to the instance. Amazon EC2 public -// images use this feature to provide secure access without passwords. For more -// information, see Key Pairs (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Note: This operation can generate multiple requests to a service. // -// For troubleshooting, see What To Do If An Instance Immediately Terminates -// (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html), -// and Troubleshooting Connecting to Your Instance (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html) -// in the Amazon Elastic Compute Cloud User Guide. +// // Example iterating over at most 3 pages of a DescribeVolumesModifications operation. +// pageNum := 0 +// err := client.DescribeVolumesModificationsPages(params, +// func(page *ec2.DescribeVolumesModificationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. +func (c *EC2) DescribeVolumesModificationsPages(input *DescribeVolumesModificationsInput, fn func(*DescribeVolumesModificationsOutput, bool) bool) error { + return c.DescribeVolumesModificationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVolumesModificationsPagesWithContext same as DescribeVolumesModificationsPages except +// it takes a Context and allows setting request options on the pages. // -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RunInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstances -func (c *EC2) RunInstances(input *RunInstancesInput) (*Reservation, error) { - req, out := c.RunInstancesRequest(input) - err := req.Send() - return out, err +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVolumesModificationsPagesWithContext(ctx aws.Context, input *DescribeVolumesModificationsInput, fn func(*DescribeVolumesModificationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVolumesModificationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVolumesModificationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVolumesModificationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() } -const opRunScheduledInstances = "RunScheduledInstances" +const opDescribeVpcAttribute = "DescribeVpcAttribute" -// RunScheduledInstancesRequest generates a "aws/request.Request" representing the -// client's request for the RunScheduledInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeVpcAttributeRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See RunScheduledInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the RunScheduledInstances method directly -// instead. +// See DescribeVpcAttribute for more information on using the DescribeVpcAttribute +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the RunScheduledInstancesRequest method. -// req, resp := client.RunScheduledInstancesRequest(params) +// +// // Example sending a request using the DescribeVpcAttributeRequest method. +// req, resp := client.DescribeVpcAttributeRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstances -func (c *EC2) RunScheduledInstancesRequest(input *RunScheduledInstancesInput) (req *request.Request, output *RunScheduledInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttribute +func (c *EC2) DescribeVpcAttributeRequest(input *DescribeVpcAttributeInput) (req *request.Request, output *DescribeVpcAttributeOutput) { op := &request.Operation{ - Name: opRunScheduledInstances, + Name: opDescribeVpcAttribute, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &RunScheduledInstancesInput{} + input = &DescribeVpcAttributeInput{} } - output = &RunScheduledInstancesOutput{} + output = &DescribeVpcAttributeOutput{} req = c.newRequest(op, input, output) return } -// RunScheduledInstances API operation for Amazon Elastic Compute Cloud. -// -// Launches the specified Scheduled Instances. -// -// Before you can launch a Scheduled Instance, you must purchase it and obtain -// an identifier using PurchaseScheduledInstances. +// DescribeVpcAttribute API operation for Amazon Elastic Compute Cloud. // -// You must launch a Scheduled Instance during its scheduled time period. You -// can't stop or reboot a Scheduled Instance, but you can terminate it as needed. -// If you terminate a Scheduled Instance before the current scheduled time period -// ends, you can launch it again after a few minutes. For more information, -// see Scheduled Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-scheduled-instances.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes the specified attribute of the specified VPC. You can specify only +// one attribute at a time. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation RunScheduledInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstances -func (c *EC2) RunScheduledInstances(input *RunScheduledInstancesInput) (*RunScheduledInstancesOutput, error) { - req, out := c.RunScheduledInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeVpcAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttribute +func (c *EC2) DescribeVpcAttribute(input *DescribeVpcAttributeInput) (*DescribeVpcAttributeOutput, error) { + req, out := c.DescribeVpcAttributeRequest(input) + return out, req.Send() } -const opStartInstances = "StartInstances" +// DescribeVpcAttributeWithContext is the same as DescribeVpcAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcAttributeWithContext(ctx aws.Context, input *DescribeVpcAttributeInput, opts ...request.Option) (*DescribeVpcAttributeOutput, error) { + req, out := c.DescribeVpcAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// StartInstancesRequest generates a "aws/request.Request" representing the -// client's request for the StartInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeVpcClassicLink = "DescribeVpcClassicLink" + +// DescribeVpcClassicLinkRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcClassicLink operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See StartInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the StartInstances method directly -// instead. +// See DescribeVpcClassicLink for more information on using the DescribeVpcClassicLink +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the StartInstancesRequest method. -// req, resp := client.StartInstancesRequest(params) +// +// // Example sending a request using the DescribeVpcClassicLinkRequest method. +// req, resp := client.DescribeVpcClassicLinkRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstances -func (c *EC2) StartInstancesRequest(input *StartInstancesInput) (req *request.Request, output *StartInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLink +func (c *EC2) DescribeVpcClassicLinkRequest(input *DescribeVpcClassicLinkInput) (req *request.Request, output *DescribeVpcClassicLinkOutput) { op := &request.Operation{ - Name: opStartInstances, + Name: opDescribeVpcClassicLink, HTTPMethod: "POST", HTTPPath: "/", } if input == nil { - input = &StartInstancesInput{} + input = &DescribeVpcClassicLinkInput{} } - output = &StartInstancesOutput{} + output = &DescribeVpcClassicLinkOutput{} req = c.newRequest(op, input, output) return } -// StartInstances API operation for Amazon Elastic Compute Cloud. -// -// Starts an Amazon EBS-backed AMI that you've previously stopped. -// -// Instances that use Amazon EBS volumes as their root devices can be quickly -// stopped and started. When an instance is stopped, the compute resources are -// released and you are not billed for hourly instance usage. However, your -// root partition Amazon EBS volume remains, continues to persist your data, -// and you are charged for Amazon EBS volume usage. You can restart your instance -// at any time. Each time you transition an instance from stopped to started, -// Amazon EC2 charges a full instance hour, even if transitions happen multiple -// times within a single hour. -// -// Before stopping an instance, make sure it is in a state from which it can -// be restarted. Stopping an instance does not preserve data stored in RAM. -// -// Performing this operation on an instance that uses an instance store as its -// root device returns an error. +// DescribeVpcClassicLink API operation for Amazon Elastic Compute Cloud. // -// For more information, see Stopping Instances (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html) -// in the Amazon Elastic Compute Cloud User Guide. +// Describes the ClassicLink status of one or more VPCs. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation StartInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstances -func (c *EC2) StartInstances(input *StartInstancesInput) (*StartInstancesOutput, error) { - req, out := c.StartInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeVpcClassicLink for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLink +func (c *EC2) DescribeVpcClassicLink(input *DescribeVpcClassicLinkInput) (*DescribeVpcClassicLinkOutput, error) { + req, out := c.DescribeVpcClassicLinkRequest(input) + return out, req.Send() } -const opStopInstances = "StopInstances" +// DescribeVpcClassicLinkWithContext is the same as DescribeVpcClassicLink with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcClassicLink for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcClassicLinkWithContext(ctx aws.Context, input *DescribeVpcClassicLinkInput, opts ...request.Option) (*DescribeVpcClassicLinkOutput, error) { + req, out := c.DescribeVpcClassicLinkRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// StopInstancesRequest generates a "aws/request.Request" representing the -// client's request for the StopInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +const opDescribeVpcClassicLinkDnsSupport = "DescribeVpcClassicLinkDnsSupport" + +// DescribeVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcClassicLinkDnsSupport operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See StopInstances for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the StopInstances method directly -// instead. +// See DescribeVpcClassicLinkDnsSupport for more information on using the DescribeVpcClassicLinkDnsSupport +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the StopInstancesRequest method. -// req, resp := client.StopInstancesRequest(params) +// +// // Example sending a request using the DescribeVpcClassicLinkDnsSupportRequest method. +// req, resp := client.DescribeVpcClassicLinkDnsSupportRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstances -func (c *EC2) StopInstancesRequest(input *StopInstancesInput) (req *request.Request, output *StopInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupport +func (c *EC2) DescribeVpcClassicLinkDnsSupportRequest(input *DescribeVpcClassicLinkDnsSupportInput) (req *request.Request, output *DescribeVpcClassicLinkDnsSupportOutput) { op := &request.Operation{ - Name: opStopInstances, + Name: opDescribeVpcClassicLinkDnsSupport, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &StopInstancesInput{} + input = &DescribeVpcClassicLinkDnsSupportInput{} } - output = &StopInstancesOutput{} + output = &DescribeVpcClassicLinkDnsSupportOutput{} req = c.newRequest(op, input, output) return } -// StopInstances API operation for Amazon Elastic Compute Cloud. -// -// Stops an Amazon EBS-backed instance. -// -// We don't charge hourly usage for a stopped instance, or data transfer fees; -// however, your root partition Amazon EBS volume remains, continues to persist -// your data, and you are charged for Amazon EBS volume usage. Each time you -// transition an instance from stopped to started, Amazon EC2 charges a full -// instance hour, even if transitions happen multiple times within a single -// hour. -// -// You can't start or stop Spot instances, and you can't stop instance store-backed -// instances. -// -// When you stop an instance, we shut it down. You can restart your instance -// at any time. Before stopping an instance, make sure it is in a state from -// which it can be restarted. Stopping an instance does not preserve data stored -// in RAM. -// -// Stopping an instance is different to rebooting or terminating it. For example, -// when you stop an instance, the root device and any other devices attached -// to the instance persist. When you terminate an instance, the root device -// and any other devices attached during the instance launch are automatically -// deleted. For more information about the differences between rebooting, stopping, -// and terminating instances, see Instance Lifecycle (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) -// in the Amazon Elastic Compute Cloud User Guide. +// DescribeVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. // -// When you stop an instance, we attempt to shut it down forcibly after a short -// while. If your instance appears stuck in the stopping state after a period -// of time, there may be an issue with the underlying host computer. For more -// information, see Troubleshooting Stopping Your Instance (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html) +// Describes the ClassicLink DNS support status of one or more VPCs. If enabled, +// the DNS hostname of a linked EC2-Classic instance resolves to its private +// IP address when addressed from an instance in the VPC to which it's linked. +// Similarly, the DNS hostname of an instance in a VPC resolves to its private +// IP address when addressed from a linked EC2-Classic instance. For more information, +// see ClassicLink (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) // in the Amazon Elastic Compute Cloud User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -15448,329 +21430,36933 @@ func (c *EC2) StopInstancesRequest(input *StopInstancesInput) (req *request.Requ // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation StopInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstances -func (c *EC2) StopInstances(input *StopInstancesInput) (*StopInstancesOutput, error) { - req, out := c.StopInstancesRequest(input) - err := req.Send() - return out, err +// API operation DescribeVpcClassicLinkDnsSupport for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupport +func (c *EC2) DescribeVpcClassicLinkDnsSupport(input *DescribeVpcClassicLinkDnsSupportInput) (*DescribeVpcClassicLinkDnsSupportOutput, error) { + req, out := c.DescribeVpcClassicLinkDnsSupportRequest(input) + return out, req.Send() } -const opTerminateInstances = "TerminateInstances" +// DescribeVpcClassicLinkDnsSupportWithContext is the same as DescribeVpcClassicLinkDnsSupport with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcClassicLinkDnsSupport for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcClassicLinkDnsSupportWithContext(ctx aws.Context, input *DescribeVpcClassicLinkDnsSupportInput, opts ...request.Option) (*DescribeVpcClassicLinkDnsSupportOutput, error) { + req, out := c.DescribeVpcClassicLinkDnsSupportRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} -// TerminateInstancesRequest generates a "aws/request.Request" representing the -// client's request for the TerminateInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeVpcClassicLinkDnsSupportPages iterates over the pages of a DescribeVpcClassicLinkDnsSupport operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// See TerminateInstances for usage and error information. +// See DescribeVpcClassicLinkDnsSupport method for more information on how to use this operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the TerminateInstances method directly -// instead. +// Note: This operation can generate multiple requests to a service. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// // Example iterating over at most 3 pages of a DescribeVpcClassicLinkDnsSupport operation. +// pageNum := 0 +// err := client.DescribeVpcClassicLinkDnsSupportPages(params, +// func(page *ec2.DescribeVpcClassicLinkDnsSupportOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) // -// // Example sending a request using the TerminateInstancesRequest method. -// req, resp := client.TerminateInstancesRequest(params) +func (c *EC2) DescribeVpcClassicLinkDnsSupportPages(input *DescribeVpcClassicLinkDnsSupportInput, fn func(*DescribeVpcClassicLinkDnsSupportOutput, bool) bool) error { + return c.DescribeVpcClassicLinkDnsSupportPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVpcClassicLinkDnsSupportPagesWithContext same as DescribeVpcClassicLinkDnsSupportPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcClassicLinkDnsSupportPagesWithContext(ctx aws.Context, input *DescribeVpcClassicLinkDnsSupportInput, fn func(*DescribeVpcClassicLinkDnsSupportOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVpcClassicLinkDnsSupportInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcClassicLinkDnsSupportRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVpcClassicLinkDnsSupportOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVpcEndpointConnectionNotifications = "DescribeVpcEndpointConnectionNotifications" + +// DescribeVpcEndpointConnectionNotificationsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcEndpointConnectionNotifications operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpcEndpointConnectionNotifications for more information on using the DescribeVpcEndpointConnectionNotifications +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpcEndpointConnectionNotificationsRequest method. +// req, resp := client.DescribeVpcEndpointConnectionNotificationsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstances -func (c *EC2) TerminateInstancesRequest(input *TerminateInstancesInput) (req *request.Request, output *TerminateInstancesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnectionNotifications +func (c *EC2) DescribeVpcEndpointConnectionNotificationsRequest(input *DescribeVpcEndpointConnectionNotificationsInput) (req *request.Request, output *DescribeVpcEndpointConnectionNotificationsOutput) { op := &request.Operation{ - Name: opTerminateInstances, + Name: opDescribeVpcEndpointConnectionNotifications, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &TerminateInstancesInput{} + input = &DescribeVpcEndpointConnectionNotificationsInput{} } - output = &TerminateInstancesOutput{} + output = &DescribeVpcEndpointConnectionNotificationsOutput{} req = c.newRequest(op, input, output) return } -// TerminateInstances API operation for Amazon Elastic Compute Cloud. +// DescribeVpcEndpointConnectionNotifications API operation for Amazon Elastic Compute Cloud. // -// Shuts down one or more instances. This operation is idempotent; if you terminate -// an instance more than once, each call succeeds. +// Describes the connection notifications for VPC endpoints and VPC endpoint +// services. // -// If you specify multiple instances and the request fails (for example, because -// of a single incorrect instance ID), none of the instances are terminated. +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. // -// Terminated instances remain visible after termination (for approximately -// one hour). +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpcEndpointConnectionNotifications for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnectionNotifications +func (c *EC2) DescribeVpcEndpointConnectionNotifications(input *DescribeVpcEndpointConnectionNotificationsInput) (*DescribeVpcEndpointConnectionNotificationsOutput, error) { + req, out := c.DescribeVpcEndpointConnectionNotificationsRequest(input) + return out, req.Send() +} + +// DescribeVpcEndpointConnectionNotificationsWithContext is the same as DescribeVpcEndpointConnectionNotifications with the addition of +// the ability to pass a context and additional request options. // -// By default, Amazon EC2 deletes all EBS volumes that were attached when the -// instance launched. Volumes attached after instance launch continue running. +// See DescribeVpcEndpointConnectionNotifications for details on how to use this API operation. // -// You can stop, start, and terminate EBS-backed instances. You can only terminate -// instance store-backed instances. What happens to an instance differs if you -// stop it or terminate it. For example, when you stop an instance, the root -// device and any other devices attached to the instance persist. When you terminate -// an instance, any attached EBS volumes with the DeleteOnTermination block -// device mapping parameter set to true are automatically deleted. For more -// information about the differences between stopping and terminating instances, -// see Instance Lifecycle (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) -// in the Amazon Elastic Compute Cloud User Guide. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointConnectionNotificationsWithContext(ctx aws.Context, input *DescribeVpcEndpointConnectionNotificationsInput, opts ...request.Option) (*DescribeVpcEndpointConnectionNotificationsOutput, error) { + req, out := c.DescribeVpcEndpointConnectionNotificationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeVpcEndpointConnectionNotificationsPages iterates over the pages of a DescribeVpcEndpointConnectionNotifications operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// For more information about troubleshooting, see Troubleshooting Terminating -// Your Instance (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html) -// in the Amazon Elastic Compute Cloud User Guide. +// See DescribeVpcEndpointConnectionNotifications method for more information on how to use this operation. // -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. +// Note: This operation can generate multiple requests to a service. // -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation TerminateInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstances -func (c *EC2) TerminateInstances(input *TerminateInstancesInput) (*TerminateInstancesOutput, error) { - req, out := c.TerminateInstancesRequest(input) - err := req.Send() - return out, err +// // Example iterating over at most 3 pages of a DescribeVpcEndpointConnectionNotifications operation. +// pageNum := 0 +// err := client.DescribeVpcEndpointConnectionNotificationsPages(params, +// func(page *ec2.DescribeVpcEndpointConnectionNotificationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeVpcEndpointConnectionNotificationsPages(input *DescribeVpcEndpointConnectionNotificationsInput, fn func(*DescribeVpcEndpointConnectionNotificationsOutput, bool) bool) error { + return c.DescribeVpcEndpointConnectionNotificationsPagesWithContext(aws.BackgroundContext(), input, fn) } -const opUnassignIpv6Addresses = "UnassignIpv6Addresses" +// DescribeVpcEndpointConnectionNotificationsPagesWithContext same as DescribeVpcEndpointConnectionNotificationsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointConnectionNotificationsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointConnectionNotificationsInput, fn func(*DescribeVpcEndpointConnectionNotificationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVpcEndpointConnectionNotificationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcEndpointConnectionNotificationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } -// UnassignIpv6AddressesRequest generates a "aws/request.Request" representing the -// client's request for the UnassignIpv6Addresses operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. + for p.Next() { + if !fn(p.Page().(*DescribeVpcEndpointConnectionNotificationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVpcEndpointConnections = "DescribeVpcEndpointConnections" + +// DescribeVpcEndpointConnectionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcEndpointConnections operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. // -// See UnassignIpv6Addresses for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the UnassignIpv6Addresses method directly -// instead. +// See DescribeVpcEndpointConnections for more information on using the DescribeVpcEndpointConnections +// API call, and error handling. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// // Example sending a request using the UnassignIpv6AddressesRequest method. -// req, resp := client.UnassignIpv6AddressesRequest(params) +// +// // Example sending a request using the DescribeVpcEndpointConnectionsRequest method. +// req, resp := client.DescribeVpcEndpointConnectionsRequest(params) // // err := req.Send() // if err == nil { // resp is now filled // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6Addresses -func (c *EC2) UnassignIpv6AddressesRequest(input *UnassignIpv6AddressesInput) (req *request.Request, output *UnassignIpv6AddressesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnections +func (c *EC2) DescribeVpcEndpointConnectionsRequest(input *DescribeVpcEndpointConnectionsInput) (req *request.Request, output *DescribeVpcEndpointConnectionsOutput) { op := &request.Operation{ - Name: opUnassignIpv6Addresses, + Name: opDescribeVpcEndpointConnections, HTTPMethod: "POST", HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, } if input == nil { - input = &UnassignIpv6AddressesInput{} + input = &DescribeVpcEndpointConnectionsInput{} } - output = &UnassignIpv6AddressesOutput{} + output = &DescribeVpcEndpointConnectionsOutput{} req = c.newRequest(op, input, output) return } -// UnassignIpv6Addresses API operation for Amazon Elastic Compute Cloud. +// DescribeVpcEndpointConnections API operation for Amazon Elastic Compute Cloud. // -// Unassigns one or more IPv6 addresses from a network interface. +// Describes the VPC endpoint connections to your VPC endpoint services, including +// any endpoints that are pending your acceptance. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about // the error. // // See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation UnassignIpv6Addresses for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6Addresses -func (c *EC2) UnassignIpv6Addresses(input *UnassignIpv6AddressesInput) (*UnassignIpv6AddressesOutput, error) { - req, out := c.UnassignIpv6AddressesRequest(input) - err := req.Send() - return out, err +// API operation DescribeVpcEndpointConnections for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnections +func (c *EC2) DescribeVpcEndpointConnections(input *DescribeVpcEndpointConnectionsInput) (*DescribeVpcEndpointConnectionsOutput, error) { + req, out := c.DescribeVpcEndpointConnectionsRequest(input) + return out, req.Send() } -const opUnassignPrivateIpAddresses = "UnassignPrivateIpAddresses" - -// UnassignPrivateIpAddressesRequest generates a "aws/request.Request" representing the -// client's request for the UnassignPrivateIpAddresses operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// DescribeVpcEndpointConnectionsWithContext is the same as DescribeVpcEndpointConnections with the addition of +// the ability to pass a context and additional request options. // -// See UnassignPrivateIpAddresses for usage and error information. +// See DescribeVpcEndpointConnections for details on how to use this API operation. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the UnassignPrivateIpAddresses method directly -// instead. +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointConnectionsWithContext(ctx aws.Context, input *DescribeVpcEndpointConnectionsInput, opts ...request.Option) (*DescribeVpcEndpointConnectionsOutput, error) { + req, out := c.DescribeVpcEndpointConnectionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeVpcEndpointConnectionsPages iterates over the pages of a DescribeVpcEndpointConnections operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. +// See DescribeVpcEndpointConnections method for more information on how to use this operation. // -// // Example sending a request using the UnassignPrivateIpAddressesRequest method. -// req, resp := client.UnassignPrivateIpAddressesRequest(params) +// Note: This operation can generate multiple requests to a service. // -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) +// // Example iterating over at most 3 pages of a DescribeVpcEndpointConnections operation. +// pageNum := 0 +// err := client.DescribeVpcEndpointConnectionsPages(params, +// func(page *ec2.DescribeVpcEndpointConnectionsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeVpcEndpointConnectionsPages(input *DescribeVpcEndpointConnectionsInput, fn func(*DescribeVpcEndpointConnectionsOutput, bool) bool) error { + return c.DescribeVpcEndpointConnectionsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVpcEndpointConnectionsPagesWithContext same as DescribeVpcEndpointConnectionsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointConnectionsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointConnectionsInput, fn func(*DescribeVpcEndpointConnectionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVpcEndpointConnectionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcEndpointConnectionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVpcEndpointConnectionsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVpcEndpointServiceConfigurations = "DescribeVpcEndpointServiceConfigurations" + +// DescribeVpcEndpointServiceConfigurationsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcEndpointServiceConfigurations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpcEndpointServiceConfigurations for more information on using the DescribeVpcEndpointServiceConfigurations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpcEndpointServiceConfigurationsRequest method. +// req, resp := client.DescribeVpcEndpointServiceConfigurationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddresses -func (c *EC2) UnassignPrivateIpAddressesRequest(input *UnassignPrivateIpAddressesInput) (req *request.Request, output *UnassignPrivateIpAddressesOutput) { +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServiceConfigurations +func (c *EC2) DescribeVpcEndpointServiceConfigurationsRequest(input *DescribeVpcEndpointServiceConfigurationsInput) (req *request.Request, output *DescribeVpcEndpointServiceConfigurationsOutput) { op := &request.Operation{ - Name: opUnassignPrivateIpAddresses, + Name: opDescribeVpcEndpointServiceConfigurations, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, + } + + if input == nil { + input = &DescribeVpcEndpointServiceConfigurationsInput{} + } + + output = &DescribeVpcEndpointServiceConfigurationsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeVpcEndpointServiceConfigurations API operation for Amazon Elastic Compute Cloud. +// +// Describes the VPC endpoint service configurations in your account (your services). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpcEndpointServiceConfigurations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServiceConfigurations +func (c *EC2) DescribeVpcEndpointServiceConfigurations(input *DescribeVpcEndpointServiceConfigurationsInput) (*DescribeVpcEndpointServiceConfigurationsOutput, error) { + req, out := c.DescribeVpcEndpointServiceConfigurationsRequest(input) + return out, req.Send() +} + +// DescribeVpcEndpointServiceConfigurationsWithContext is the same as DescribeVpcEndpointServiceConfigurations with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcEndpointServiceConfigurations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointServiceConfigurationsWithContext(ctx aws.Context, input *DescribeVpcEndpointServiceConfigurationsInput, opts ...request.Option) (*DescribeVpcEndpointServiceConfigurationsOutput, error) { + req, out := c.DescribeVpcEndpointServiceConfigurationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeVpcEndpointServiceConfigurationsPages iterates over the pages of a DescribeVpcEndpointServiceConfigurations operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeVpcEndpointServiceConfigurations method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeVpcEndpointServiceConfigurations operation. +// pageNum := 0 +// err := client.DescribeVpcEndpointServiceConfigurationsPages(params, +// func(page *ec2.DescribeVpcEndpointServiceConfigurationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeVpcEndpointServiceConfigurationsPages(input *DescribeVpcEndpointServiceConfigurationsInput, fn func(*DescribeVpcEndpointServiceConfigurationsOutput, bool) bool) error { + return c.DescribeVpcEndpointServiceConfigurationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVpcEndpointServiceConfigurationsPagesWithContext same as DescribeVpcEndpointServiceConfigurationsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointServiceConfigurationsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointServiceConfigurationsInput, fn func(*DescribeVpcEndpointServiceConfigurationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVpcEndpointServiceConfigurationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcEndpointServiceConfigurationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVpcEndpointServiceConfigurationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVpcEndpointServicePermissions = "DescribeVpcEndpointServicePermissions" + +// DescribeVpcEndpointServicePermissionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcEndpointServicePermissions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpcEndpointServicePermissions for more information on using the DescribeVpcEndpointServicePermissions +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpcEndpointServicePermissionsRequest method. +// req, resp := client.DescribeVpcEndpointServicePermissionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicePermissions +func (c *EC2) DescribeVpcEndpointServicePermissionsRequest(input *DescribeVpcEndpointServicePermissionsInput) (req *request.Request, output *DescribeVpcEndpointServicePermissionsOutput) { + op := &request.Operation{ + Name: opDescribeVpcEndpointServicePermissions, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, + } + + if input == nil { + input = &DescribeVpcEndpointServicePermissionsInput{} + } + + output = &DescribeVpcEndpointServicePermissionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeVpcEndpointServicePermissions API operation for Amazon Elastic Compute Cloud. +// +// Describes the principals (service consumers) that are permitted to discover +// your VPC endpoint service. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpcEndpointServicePermissions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicePermissions +func (c *EC2) DescribeVpcEndpointServicePermissions(input *DescribeVpcEndpointServicePermissionsInput) (*DescribeVpcEndpointServicePermissionsOutput, error) { + req, out := c.DescribeVpcEndpointServicePermissionsRequest(input) + return out, req.Send() +} + +// DescribeVpcEndpointServicePermissionsWithContext is the same as DescribeVpcEndpointServicePermissions with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcEndpointServicePermissions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointServicePermissionsWithContext(ctx aws.Context, input *DescribeVpcEndpointServicePermissionsInput, opts ...request.Option) (*DescribeVpcEndpointServicePermissionsOutput, error) { + req, out := c.DescribeVpcEndpointServicePermissionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeVpcEndpointServicePermissionsPages iterates over the pages of a DescribeVpcEndpointServicePermissions operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeVpcEndpointServicePermissions method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeVpcEndpointServicePermissions operation. +// pageNum := 0 +// err := client.DescribeVpcEndpointServicePermissionsPages(params, +// func(page *ec2.DescribeVpcEndpointServicePermissionsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeVpcEndpointServicePermissionsPages(input *DescribeVpcEndpointServicePermissionsInput, fn func(*DescribeVpcEndpointServicePermissionsOutput, bool) bool) error { + return c.DescribeVpcEndpointServicePermissionsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVpcEndpointServicePermissionsPagesWithContext same as DescribeVpcEndpointServicePermissionsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointServicePermissionsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointServicePermissionsInput, fn func(*DescribeVpcEndpointServicePermissionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVpcEndpointServicePermissionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcEndpointServicePermissionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVpcEndpointServicePermissionsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVpcEndpointServices = "DescribeVpcEndpointServices" + +// DescribeVpcEndpointServicesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcEndpointServices operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpcEndpointServices for more information on using the DescribeVpcEndpointServices +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpcEndpointServicesRequest method. +// req, resp := client.DescribeVpcEndpointServicesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServices +func (c *EC2) DescribeVpcEndpointServicesRequest(input *DescribeVpcEndpointServicesInput) (req *request.Request, output *DescribeVpcEndpointServicesOutput) { + op := &request.Operation{ + Name: opDescribeVpcEndpointServices, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeVpcEndpointServicesInput{} + } + + output = &DescribeVpcEndpointServicesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeVpcEndpointServices API operation for Amazon Elastic Compute Cloud. +// +// Describes available services to which you can create a VPC endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpcEndpointServices for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServices +func (c *EC2) DescribeVpcEndpointServices(input *DescribeVpcEndpointServicesInput) (*DescribeVpcEndpointServicesOutput, error) { + req, out := c.DescribeVpcEndpointServicesRequest(input) + return out, req.Send() +} + +// DescribeVpcEndpointServicesWithContext is the same as DescribeVpcEndpointServices with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcEndpointServices for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointServicesWithContext(ctx aws.Context, input *DescribeVpcEndpointServicesInput, opts ...request.Option) (*DescribeVpcEndpointServicesOutput, error) { + req, out := c.DescribeVpcEndpointServicesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeVpcEndpoints = "DescribeVpcEndpoints" + +// DescribeVpcEndpointsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcEndpoints operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpcEndpoints for more information on using the DescribeVpcEndpoints +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpcEndpointsRequest method. +// req, resp := client.DescribeVpcEndpointsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpoints +func (c *EC2) DescribeVpcEndpointsRequest(input *DescribeVpcEndpointsInput) (req *request.Request, output *DescribeVpcEndpointsOutput) { + op := &request.Operation{ + Name: opDescribeVpcEndpoints, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, + } + + if input == nil { + input = &DescribeVpcEndpointsInput{} + } + + output = &DescribeVpcEndpointsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeVpcEndpoints API operation for Amazon Elastic Compute Cloud. +// +// Describes one or more of your VPC endpoints. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpcEndpoints for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpoints +func (c *EC2) DescribeVpcEndpoints(input *DescribeVpcEndpointsInput) (*DescribeVpcEndpointsOutput, error) { + req, out := c.DescribeVpcEndpointsRequest(input) + return out, req.Send() +} + +// DescribeVpcEndpointsWithContext is the same as DescribeVpcEndpoints with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcEndpoints for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointsWithContext(ctx aws.Context, input *DescribeVpcEndpointsInput, opts ...request.Option) (*DescribeVpcEndpointsOutput, error) { + req, out := c.DescribeVpcEndpointsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeVpcEndpointsPages iterates over the pages of a DescribeVpcEndpoints operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeVpcEndpoints method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeVpcEndpoints operation. +// pageNum := 0 +// err := client.DescribeVpcEndpointsPages(params, +// func(page *ec2.DescribeVpcEndpointsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeVpcEndpointsPages(input *DescribeVpcEndpointsInput, fn func(*DescribeVpcEndpointsOutput, bool) bool) error { + return c.DescribeVpcEndpointsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVpcEndpointsPagesWithContext same as DescribeVpcEndpointsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcEndpointsPagesWithContext(ctx aws.Context, input *DescribeVpcEndpointsInput, fn func(*DescribeVpcEndpointsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVpcEndpointsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcEndpointsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVpcEndpointsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVpcPeeringConnections = "DescribeVpcPeeringConnections" + +// DescribeVpcPeeringConnectionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcPeeringConnections operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpcPeeringConnections for more information on using the DescribeVpcPeeringConnections +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpcPeeringConnectionsRequest method. +// req, resp := client.DescribeVpcPeeringConnectionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnections +func (c *EC2) DescribeVpcPeeringConnectionsRequest(input *DescribeVpcPeeringConnectionsInput) (req *request.Request, output *DescribeVpcPeeringConnectionsOutput) { + op := &request.Operation{ + Name: opDescribeVpcPeeringConnections, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, + } + + if input == nil { + input = &DescribeVpcPeeringConnectionsInput{} + } + + output = &DescribeVpcPeeringConnectionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeVpcPeeringConnections API operation for Amazon Elastic Compute Cloud. +// +// Describes one or more of your VPC peering connections. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpcPeeringConnections for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnections +func (c *EC2) DescribeVpcPeeringConnections(input *DescribeVpcPeeringConnectionsInput) (*DescribeVpcPeeringConnectionsOutput, error) { + req, out := c.DescribeVpcPeeringConnectionsRequest(input) + return out, req.Send() +} + +// DescribeVpcPeeringConnectionsWithContext is the same as DescribeVpcPeeringConnections with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcPeeringConnections for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcPeeringConnectionsWithContext(ctx aws.Context, input *DescribeVpcPeeringConnectionsInput, opts ...request.Option) (*DescribeVpcPeeringConnectionsOutput, error) { + req, out := c.DescribeVpcPeeringConnectionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeVpcPeeringConnectionsPages iterates over the pages of a DescribeVpcPeeringConnections operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeVpcPeeringConnections method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeVpcPeeringConnections operation. +// pageNum := 0 +// err := client.DescribeVpcPeeringConnectionsPages(params, +// func(page *ec2.DescribeVpcPeeringConnectionsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeVpcPeeringConnectionsPages(input *DescribeVpcPeeringConnectionsInput, fn func(*DescribeVpcPeeringConnectionsOutput, bool) bool) error { + return c.DescribeVpcPeeringConnectionsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVpcPeeringConnectionsPagesWithContext same as DescribeVpcPeeringConnectionsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcPeeringConnectionsPagesWithContext(ctx aws.Context, input *DescribeVpcPeeringConnectionsInput, fn func(*DescribeVpcPeeringConnectionsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVpcPeeringConnectionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcPeeringConnectionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVpcPeeringConnectionsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVpcs = "DescribeVpcs" + +// DescribeVpcsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpcs operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpcs for more information on using the DescribeVpcs +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpcsRequest method. +// req, resp := client.DescribeVpcsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcs +func (c *EC2) DescribeVpcsRequest(input *DescribeVpcsInput) (req *request.Request, output *DescribeVpcsOutput) { + op := &request.Operation{ + Name: opDescribeVpcs, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, + } + + if input == nil { + input = &DescribeVpcsInput{} + } + + output = &DescribeVpcsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeVpcs API operation for Amazon Elastic Compute Cloud. +// +// Describes one or more of your VPCs. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpcs for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcs +func (c *EC2) DescribeVpcs(input *DescribeVpcsInput) (*DescribeVpcsOutput, error) { + req, out := c.DescribeVpcsRequest(input) + return out, req.Send() +} + +// DescribeVpcsWithContext is the same as DescribeVpcs with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpcs for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcsWithContext(ctx aws.Context, input *DescribeVpcsInput, opts ...request.Option) (*DescribeVpcsOutput, error) { + req, out := c.DescribeVpcsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeVpcsPages iterates over the pages of a DescribeVpcs operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeVpcs method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeVpcs operation. +// pageNum := 0 +// err := client.DescribeVpcsPages(params, +// func(page *ec2.DescribeVpcsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) DescribeVpcsPages(input *DescribeVpcsInput, fn func(*DescribeVpcsOutput, bool) bool) error { + return c.DescribeVpcsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeVpcsPagesWithContext same as DescribeVpcsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpcsPagesWithContext(ctx aws.Context, input *DescribeVpcsInput, fn func(*DescribeVpcsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeVpcsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*DescribeVpcsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opDescribeVpnConnections = "DescribeVpnConnections" + +// DescribeVpnConnectionsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpnConnections operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpnConnections for more information on using the DescribeVpnConnections +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpnConnectionsRequest method. +// req, resp := client.DescribeVpnConnectionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnections +func (c *EC2) DescribeVpnConnectionsRequest(input *DescribeVpnConnectionsInput) (req *request.Request, output *DescribeVpnConnectionsOutput) { + op := &request.Operation{ + Name: opDescribeVpnConnections, HTTPMethod: "POST", HTTPPath: "/", } - if input == nil { - input = &UnassignPrivateIpAddressesInput{} - } + if input == nil { + input = &DescribeVpnConnectionsInput{} + } + + output = &DescribeVpnConnectionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeVpnConnections API operation for Amazon Elastic Compute Cloud. +// +// Describes one or more of your VPN connections. +// +// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) +// in the AWS Site-to-Site VPN User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpnConnections for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnections +func (c *EC2) DescribeVpnConnections(input *DescribeVpnConnectionsInput) (*DescribeVpnConnectionsOutput, error) { + req, out := c.DescribeVpnConnectionsRequest(input) + return out, req.Send() +} + +// DescribeVpnConnectionsWithContext is the same as DescribeVpnConnections with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpnConnections for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpnConnectionsWithContext(ctx aws.Context, input *DescribeVpnConnectionsInput, opts ...request.Option) (*DescribeVpnConnectionsOutput, error) { + req, out := c.DescribeVpnConnectionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeVpnGateways = "DescribeVpnGateways" + +// DescribeVpnGatewaysRequest generates a "aws/request.Request" representing the +// client's request for the DescribeVpnGateways operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeVpnGateways for more information on using the DescribeVpnGateways +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeVpnGatewaysRequest method. +// req, resp := client.DescribeVpnGatewaysRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGateways +func (c *EC2) DescribeVpnGatewaysRequest(input *DescribeVpnGatewaysInput) (req *request.Request, output *DescribeVpnGatewaysOutput) { + op := &request.Operation{ + Name: opDescribeVpnGateways, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeVpnGatewaysInput{} + } + + output = &DescribeVpnGatewaysOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeVpnGateways API operation for Amazon Elastic Compute Cloud. +// +// Describes one or more of your virtual private gateways. +// +// For more information, see AWS Site-to-Site VPN (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) +// in the AWS Site-to-Site VPN User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DescribeVpnGateways for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGateways +func (c *EC2) DescribeVpnGateways(input *DescribeVpnGatewaysInput) (*DescribeVpnGatewaysOutput, error) { + req, out := c.DescribeVpnGatewaysRequest(input) + return out, req.Send() +} + +// DescribeVpnGatewaysWithContext is the same as DescribeVpnGateways with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeVpnGateways for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DescribeVpnGatewaysWithContext(ctx aws.Context, input *DescribeVpnGatewaysInput, opts ...request.Option) (*DescribeVpnGatewaysOutput, error) { + req, out := c.DescribeVpnGatewaysRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDetachClassicLinkVpc = "DetachClassicLinkVpc" + +// DetachClassicLinkVpcRequest generates a "aws/request.Request" representing the +// client's request for the DetachClassicLinkVpc operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DetachClassicLinkVpc for more information on using the DetachClassicLinkVpc +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DetachClassicLinkVpcRequest method. +// req, resp := client.DetachClassicLinkVpcRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpc +func (c *EC2) DetachClassicLinkVpcRequest(input *DetachClassicLinkVpcInput) (req *request.Request, output *DetachClassicLinkVpcOutput) { + op := &request.Operation{ + Name: opDetachClassicLinkVpc, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DetachClassicLinkVpcInput{} + } + + output = &DetachClassicLinkVpcOutput{} + req = c.newRequest(op, input, output) + return +} + +// DetachClassicLinkVpc API operation for Amazon Elastic Compute Cloud. +// +// Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance +// has been unlinked, the VPC security groups are no longer associated with +// it. An instance is automatically unlinked from a VPC when it's stopped. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DetachClassicLinkVpc for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpc +func (c *EC2) DetachClassicLinkVpc(input *DetachClassicLinkVpcInput) (*DetachClassicLinkVpcOutput, error) { + req, out := c.DetachClassicLinkVpcRequest(input) + return out, req.Send() +} + +// DetachClassicLinkVpcWithContext is the same as DetachClassicLinkVpc with the addition of +// the ability to pass a context and additional request options. +// +// See DetachClassicLinkVpc for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DetachClassicLinkVpcWithContext(ctx aws.Context, input *DetachClassicLinkVpcInput, opts ...request.Option) (*DetachClassicLinkVpcOutput, error) { + req, out := c.DetachClassicLinkVpcRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDetachInternetGateway = "DetachInternetGateway" + +// DetachInternetGatewayRequest generates a "aws/request.Request" representing the +// client's request for the DetachInternetGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DetachInternetGateway for more information on using the DetachInternetGateway +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DetachInternetGatewayRequest method. +// req, resp := client.DetachInternetGatewayRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGateway +func (c *EC2) DetachInternetGatewayRequest(input *DetachInternetGatewayInput) (req *request.Request, output *DetachInternetGatewayOutput) { + op := &request.Operation{ + Name: opDetachInternetGateway, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DetachInternetGatewayInput{} + } + + output = &DetachInternetGatewayOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// DetachInternetGateway API operation for Amazon Elastic Compute Cloud. +// +// Detaches an internet gateway from a VPC, disabling connectivity between the +// internet and the VPC. The VPC must not contain any running instances with +// Elastic IP addresses or public IPv4 addresses. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DetachInternetGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGateway +func (c *EC2) DetachInternetGateway(input *DetachInternetGatewayInput) (*DetachInternetGatewayOutput, error) { + req, out := c.DetachInternetGatewayRequest(input) + return out, req.Send() +} + +// DetachInternetGatewayWithContext is the same as DetachInternetGateway with the addition of +// the ability to pass a context and additional request options. +// +// See DetachInternetGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DetachInternetGatewayWithContext(ctx aws.Context, input *DetachInternetGatewayInput, opts ...request.Option) (*DetachInternetGatewayOutput, error) { + req, out := c.DetachInternetGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDetachNetworkInterface = "DetachNetworkInterface" + +// DetachNetworkInterfaceRequest generates a "aws/request.Request" representing the +// client's request for the DetachNetworkInterface operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DetachNetworkInterface for more information on using the DetachNetworkInterface +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DetachNetworkInterfaceRequest method. +// req, resp := client.DetachNetworkInterfaceRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterface +func (c *EC2) DetachNetworkInterfaceRequest(input *DetachNetworkInterfaceInput) (req *request.Request, output *DetachNetworkInterfaceOutput) { + op := &request.Operation{ + Name: opDetachNetworkInterface, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DetachNetworkInterfaceInput{} + } + + output = &DetachNetworkInterfaceOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// DetachNetworkInterface API operation for Amazon Elastic Compute Cloud. +// +// Detaches a network interface from an instance. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DetachNetworkInterface for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterface +func (c *EC2) DetachNetworkInterface(input *DetachNetworkInterfaceInput) (*DetachNetworkInterfaceOutput, error) { + req, out := c.DetachNetworkInterfaceRequest(input) + return out, req.Send() +} + +// DetachNetworkInterfaceWithContext is the same as DetachNetworkInterface with the addition of +// the ability to pass a context and additional request options. +// +// See DetachNetworkInterface for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DetachNetworkInterfaceWithContext(ctx aws.Context, input *DetachNetworkInterfaceInput, opts ...request.Option) (*DetachNetworkInterfaceOutput, error) { + req, out := c.DetachNetworkInterfaceRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDetachVolume = "DetachVolume" + +// DetachVolumeRequest generates a "aws/request.Request" representing the +// client's request for the DetachVolume operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DetachVolume for more information on using the DetachVolume +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DetachVolumeRequest method. +// req, resp := client.DetachVolumeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVolume +func (c *EC2) DetachVolumeRequest(input *DetachVolumeInput) (req *request.Request, output *VolumeAttachment) { + op := &request.Operation{ + Name: opDetachVolume, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DetachVolumeInput{} + } + + output = &VolumeAttachment{} + req = c.newRequest(op, input, output) + return +} + +// DetachVolume API operation for Amazon Elastic Compute Cloud. +// +// Detaches an EBS volume from an instance. Make sure to unmount any file systems +// on the device within your operating system before detaching the volume. Failure +// to do so can result in the volume becoming stuck in the busy state while +// detaching. If this happens, detachment can be delayed indefinitely until +// you unmount the volume, force detachment, reboot the instance, or all three. +// If an EBS volume is the root device of an instance, it can't be detached +// while the instance is running. To detach the root volume, stop the instance +// first. +// +// When a volume with an AWS Marketplace product code is detached from an instance, +// the product code is no longer associated with the instance. +// +// For more information, see Detaching an Amazon EBS Volume (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DetachVolume for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVolume +func (c *EC2) DetachVolume(input *DetachVolumeInput) (*VolumeAttachment, error) { + req, out := c.DetachVolumeRequest(input) + return out, req.Send() +} + +// DetachVolumeWithContext is the same as DetachVolume with the addition of +// the ability to pass a context and additional request options. +// +// See DetachVolume for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DetachVolumeWithContext(ctx aws.Context, input *DetachVolumeInput, opts ...request.Option) (*VolumeAttachment, error) { + req, out := c.DetachVolumeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDetachVpnGateway = "DetachVpnGateway" + +// DetachVpnGatewayRequest generates a "aws/request.Request" representing the +// client's request for the DetachVpnGateway operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DetachVpnGateway for more information on using the DetachVpnGateway +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DetachVpnGatewayRequest method. +// req, resp := client.DetachVpnGatewayRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGateway +func (c *EC2) DetachVpnGatewayRequest(input *DetachVpnGatewayInput) (req *request.Request, output *DetachVpnGatewayOutput) { + op := &request.Operation{ + Name: opDetachVpnGateway, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DetachVpnGatewayInput{} + } + + output = &DetachVpnGatewayOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// DetachVpnGateway API operation for Amazon Elastic Compute Cloud. +// +// Detaches a virtual private gateway from a VPC. You do this if you're planning +// to turn off the VPC and not use it anymore. You can confirm a virtual private +// gateway has been completely detached from a VPC by describing the virtual +// private gateway (any attachments to the virtual private gateway are also +// described). +// +// You must wait for the attachment's state to switch to detached before you +// can delete the VPC or attach a different VPC to the virtual private gateway. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DetachVpnGateway for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGateway +func (c *EC2) DetachVpnGateway(input *DetachVpnGatewayInput) (*DetachVpnGatewayOutput, error) { + req, out := c.DetachVpnGatewayRequest(input) + return out, req.Send() +} + +// DetachVpnGatewayWithContext is the same as DetachVpnGateway with the addition of +// the ability to pass a context and additional request options. +// +// See DetachVpnGateway for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DetachVpnGatewayWithContext(ctx aws.Context, input *DetachVpnGatewayInput, opts ...request.Option) (*DetachVpnGatewayOutput, error) { + req, out := c.DetachVpnGatewayRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisableEbsEncryptionByDefault = "DisableEbsEncryptionByDefault" + +// DisableEbsEncryptionByDefaultRequest generates a "aws/request.Request" representing the +// client's request for the DisableEbsEncryptionByDefault operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisableEbsEncryptionByDefault for more information on using the DisableEbsEncryptionByDefault +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisableEbsEncryptionByDefaultRequest method. +// req, resp := client.DisableEbsEncryptionByDefaultRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableEbsEncryptionByDefault +func (c *EC2) DisableEbsEncryptionByDefaultRequest(input *DisableEbsEncryptionByDefaultInput) (req *request.Request, output *DisableEbsEncryptionByDefaultOutput) { + op := &request.Operation{ + Name: opDisableEbsEncryptionByDefault, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisableEbsEncryptionByDefaultInput{} + } + + output = &DisableEbsEncryptionByDefaultOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisableEbsEncryptionByDefault API operation for Amazon Elastic Compute Cloud. +// +// Disables EBS encryption by default for your account in the current Region. +// +// After you disable encryption by default, you can still create encrypted volumes +// by enabling encryption when you create each volume. +// +// Disabling encryption by default does not change the encryption status of +// your existing volumes. +// +// For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisableEbsEncryptionByDefault for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableEbsEncryptionByDefault +func (c *EC2) DisableEbsEncryptionByDefault(input *DisableEbsEncryptionByDefaultInput) (*DisableEbsEncryptionByDefaultOutput, error) { + req, out := c.DisableEbsEncryptionByDefaultRequest(input) + return out, req.Send() +} + +// DisableEbsEncryptionByDefaultWithContext is the same as DisableEbsEncryptionByDefault with the addition of +// the ability to pass a context and additional request options. +// +// See DisableEbsEncryptionByDefault for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisableEbsEncryptionByDefaultWithContext(ctx aws.Context, input *DisableEbsEncryptionByDefaultInput, opts ...request.Option) (*DisableEbsEncryptionByDefaultOutput, error) { + req, out := c.DisableEbsEncryptionByDefaultRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisableFastSnapshotRestores = "DisableFastSnapshotRestores" + +// DisableFastSnapshotRestoresRequest generates a "aws/request.Request" representing the +// client's request for the DisableFastSnapshotRestores operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisableFastSnapshotRestores for more information on using the DisableFastSnapshotRestores +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisableFastSnapshotRestoresRequest method. +// req, resp := client.DisableFastSnapshotRestoresRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestores +func (c *EC2) DisableFastSnapshotRestoresRequest(input *DisableFastSnapshotRestoresInput) (req *request.Request, output *DisableFastSnapshotRestoresOutput) { + op := &request.Operation{ + Name: opDisableFastSnapshotRestores, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisableFastSnapshotRestoresInput{} + } + + output = &DisableFastSnapshotRestoresOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisableFastSnapshotRestores API operation for Amazon Elastic Compute Cloud. +// +// Disables fast snapshot restores for the specified snapshots in the specified +// Availability Zones. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisableFastSnapshotRestores for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestores +func (c *EC2) DisableFastSnapshotRestores(input *DisableFastSnapshotRestoresInput) (*DisableFastSnapshotRestoresOutput, error) { + req, out := c.DisableFastSnapshotRestoresRequest(input) + return out, req.Send() +} + +// DisableFastSnapshotRestoresWithContext is the same as DisableFastSnapshotRestores with the addition of +// the ability to pass a context and additional request options. +// +// See DisableFastSnapshotRestores for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisableFastSnapshotRestoresWithContext(ctx aws.Context, input *DisableFastSnapshotRestoresInput, opts ...request.Option) (*DisableFastSnapshotRestoresOutput, error) { + req, out := c.DisableFastSnapshotRestoresRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisableTransitGatewayRouteTablePropagation = "DisableTransitGatewayRouteTablePropagation" + +// DisableTransitGatewayRouteTablePropagationRequest generates a "aws/request.Request" representing the +// client's request for the DisableTransitGatewayRouteTablePropagation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisableTransitGatewayRouteTablePropagation for more information on using the DisableTransitGatewayRouteTablePropagation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisableTransitGatewayRouteTablePropagationRequest method. +// req, resp := client.DisableTransitGatewayRouteTablePropagationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableTransitGatewayRouteTablePropagation +func (c *EC2) DisableTransitGatewayRouteTablePropagationRequest(input *DisableTransitGatewayRouteTablePropagationInput) (req *request.Request, output *DisableTransitGatewayRouteTablePropagationOutput) { + op := &request.Operation{ + Name: opDisableTransitGatewayRouteTablePropagation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisableTransitGatewayRouteTablePropagationInput{} + } + + output = &DisableTransitGatewayRouteTablePropagationOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisableTransitGatewayRouteTablePropagation API operation for Amazon Elastic Compute Cloud. +// +// Disables the specified resource attachment from propagating routes to the +// specified propagation route table. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisableTransitGatewayRouteTablePropagation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableTransitGatewayRouteTablePropagation +func (c *EC2) DisableTransitGatewayRouteTablePropagation(input *DisableTransitGatewayRouteTablePropagationInput) (*DisableTransitGatewayRouteTablePropagationOutput, error) { + req, out := c.DisableTransitGatewayRouteTablePropagationRequest(input) + return out, req.Send() +} + +// DisableTransitGatewayRouteTablePropagationWithContext is the same as DisableTransitGatewayRouteTablePropagation with the addition of +// the ability to pass a context and additional request options. +// +// See DisableTransitGatewayRouteTablePropagation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisableTransitGatewayRouteTablePropagationWithContext(ctx aws.Context, input *DisableTransitGatewayRouteTablePropagationInput, opts ...request.Option) (*DisableTransitGatewayRouteTablePropagationOutput, error) { + req, out := c.DisableTransitGatewayRouteTablePropagationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisableVgwRoutePropagation = "DisableVgwRoutePropagation" + +// DisableVgwRoutePropagationRequest generates a "aws/request.Request" representing the +// client's request for the DisableVgwRoutePropagation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisableVgwRoutePropagation for more information on using the DisableVgwRoutePropagation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisableVgwRoutePropagationRequest method. +// req, resp := client.DisableVgwRoutePropagationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagation +func (c *EC2) DisableVgwRoutePropagationRequest(input *DisableVgwRoutePropagationInput) (req *request.Request, output *DisableVgwRoutePropagationOutput) { + op := &request.Operation{ + Name: opDisableVgwRoutePropagation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisableVgwRoutePropagationInput{} + } + + output = &DisableVgwRoutePropagationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// DisableVgwRoutePropagation API operation for Amazon Elastic Compute Cloud. +// +// Disables a virtual private gateway (VGW) from propagating routes to a specified +// route table of a VPC. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisableVgwRoutePropagation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagation +func (c *EC2) DisableVgwRoutePropagation(input *DisableVgwRoutePropagationInput) (*DisableVgwRoutePropagationOutput, error) { + req, out := c.DisableVgwRoutePropagationRequest(input) + return out, req.Send() +} + +// DisableVgwRoutePropagationWithContext is the same as DisableVgwRoutePropagation with the addition of +// the ability to pass a context and additional request options. +// +// See DisableVgwRoutePropagation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisableVgwRoutePropagationWithContext(ctx aws.Context, input *DisableVgwRoutePropagationInput, opts ...request.Option) (*DisableVgwRoutePropagationOutput, error) { + req, out := c.DisableVgwRoutePropagationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisableVpcClassicLink = "DisableVpcClassicLink" + +// DisableVpcClassicLinkRequest generates a "aws/request.Request" representing the +// client's request for the DisableVpcClassicLink operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisableVpcClassicLink for more information on using the DisableVpcClassicLink +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisableVpcClassicLinkRequest method. +// req, resp := client.DisableVpcClassicLinkRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLink +func (c *EC2) DisableVpcClassicLinkRequest(input *DisableVpcClassicLinkInput) (req *request.Request, output *DisableVpcClassicLinkOutput) { + op := &request.Operation{ + Name: opDisableVpcClassicLink, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisableVpcClassicLinkInput{} + } + + output = &DisableVpcClassicLinkOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisableVpcClassicLink API operation for Amazon Elastic Compute Cloud. +// +// Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC +// that has EC2-Classic instances linked to it. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisableVpcClassicLink for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLink +func (c *EC2) DisableVpcClassicLink(input *DisableVpcClassicLinkInput) (*DisableVpcClassicLinkOutput, error) { + req, out := c.DisableVpcClassicLinkRequest(input) + return out, req.Send() +} + +// DisableVpcClassicLinkWithContext is the same as DisableVpcClassicLink with the addition of +// the ability to pass a context and additional request options. +// +// See DisableVpcClassicLink for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisableVpcClassicLinkWithContext(ctx aws.Context, input *DisableVpcClassicLinkInput, opts ...request.Option) (*DisableVpcClassicLinkOutput, error) { + req, out := c.DisableVpcClassicLinkRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisableVpcClassicLinkDnsSupport = "DisableVpcClassicLinkDnsSupport" + +// DisableVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the +// client's request for the DisableVpcClassicLinkDnsSupport operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisableVpcClassicLinkDnsSupport for more information on using the DisableVpcClassicLinkDnsSupport +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisableVpcClassicLinkDnsSupportRequest method. +// req, resp := client.DisableVpcClassicLinkDnsSupportRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupport +func (c *EC2) DisableVpcClassicLinkDnsSupportRequest(input *DisableVpcClassicLinkDnsSupportInput) (req *request.Request, output *DisableVpcClassicLinkDnsSupportOutput) { + op := &request.Operation{ + Name: opDisableVpcClassicLinkDnsSupport, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisableVpcClassicLinkDnsSupportInput{} + } + + output = &DisableVpcClassicLinkDnsSupportOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisableVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. +// +// Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve +// to public IP addresses when addressed between a linked EC2-Classic instance +// and instances in the VPC to which it's linked. For more information, see +// ClassicLink (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisableVpcClassicLinkDnsSupport for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupport +func (c *EC2) DisableVpcClassicLinkDnsSupport(input *DisableVpcClassicLinkDnsSupportInput) (*DisableVpcClassicLinkDnsSupportOutput, error) { + req, out := c.DisableVpcClassicLinkDnsSupportRequest(input) + return out, req.Send() +} + +// DisableVpcClassicLinkDnsSupportWithContext is the same as DisableVpcClassicLinkDnsSupport with the addition of +// the ability to pass a context and additional request options. +// +// See DisableVpcClassicLinkDnsSupport for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisableVpcClassicLinkDnsSupportWithContext(ctx aws.Context, input *DisableVpcClassicLinkDnsSupportInput, opts ...request.Option) (*DisableVpcClassicLinkDnsSupportOutput, error) { + req, out := c.DisableVpcClassicLinkDnsSupportRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisassociateAddress = "DisassociateAddress" + +// DisassociateAddressRequest generates a "aws/request.Request" representing the +// client's request for the DisassociateAddress operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisassociateAddress for more information on using the DisassociateAddress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisassociateAddressRequest method. +// req, resp := client.DisassociateAddressRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddress +func (c *EC2) DisassociateAddressRequest(input *DisassociateAddressInput) (req *request.Request, output *DisassociateAddressOutput) { + op := &request.Operation{ + Name: opDisassociateAddress, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisassociateAddressInput{} + } + + output = &DisassociateAddressOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// DisassociateAddress API operation for Amazon Elastic Compute Cloud. +// +// Disassociates an Elastic IP address from the instance or network interface +// it's associated with. +// +// An Elastic IP address is for use in either the EC2-Classic platform or in +// a VPC. For more information, see Elastic IP Addresses (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// This is an idempotent operation. If you perform the operation more than once, +// Amazon EC2 doesn't return an error. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisassociateAddress for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddress +func (c *EC2) DisassociateAddress(input *DisassociateAddressInput) (*DisassociateAddressOutput, error) { + req, out := c.DisassociateAddressRequest(input) + return out, req.Send() +} + +// DisassociateAddressWithContext is the same as DisassociateAddress with the addition of +// the ability to pass a context and additional request options. +// +// See DisassociateAddress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisassociateAddressWithContext(ctx aws.Context, input *DisassociateAddressInput, opts ...request.Option) (*DisassociateAddressOutput, error) { + req, out := c.DisassociateAddressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisassociateClientVpnTargetNetwork = "DisassociateClientVpnTargetNetwork" + +// DisassociateClientVpnTargetNetworkRequest generates a "aws/request.Request" representing the +// client's request for the DisassociateClientVpnTargetNetwork operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisassociateClientVpnTargetNetwork for more information on using the DisassociateClientVpnTargetNetwork +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisassociateClientVpnTargetNetworkRequest method. +// req, resp := client.DisassociateClientVpnTargetNetworkRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateClientVpnTargetNetwork +func (c *EC2) DisassociateClientVpnTargetNetworkRequest(input *DisassociateClientVpnTargetNetworkInput) (req *request.Request, output *DisassociateClientVpnTargetNetworkOutput) { + op := &request.Operation{ + Name: opDisassociateClientVpnTargetNetwork, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisassociateClientVpnTargetNetworkInput{} + } + + output = &DisassociateClientVpnTargetNetworkOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisassociateClientVpnTargetNetwork API operation for Amazon Elastic Compute Cloud. +// +// Disassociates a target network from the specified Client VPN endpoint. When +// you disassociate the last target network from a Client VPN, the following +// happens: +// +// * The route that was automatically added for the VPC is deleted +// +// * All active client connections are terminated +// +// * New client connections are disallowed +// +// * The Client VPN endpoint's status changes to pending-associate +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisassociateClientVpnTargetNetwork for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateClientVpnTargetNetwork +func (c *EC2) DisassociateClientVpnTargetNetwork(input *DisassociateClientVpnTargetNetworkInput) (*DisassociateClientVpnTargetNetworkOutput, error) { + req, out := c.DisassociateClientVpnTargetNetworkRequest(input) + return out, req.Send() +} + +// DisassociateClientVpnTargetNetworkWithContext is the same as DisassociateClientVpnTargetNetwork with the addition of +// the ability to pass a context and additional request options. +// +// See DisassociateClientVpnTargetNetwork for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisassociateClientVpnTargetNetworkWithContext(ctx aws.Context, input *DisassociateClientVpnTargetNetworkInput, opts ...request.Option) (*DisassociateClientVpnTargetNetworkOutput, error) { + req, out := c.DisassociateClientVpnTargetNetworkRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisassociateIamInstanceProfile = "DisassociateIamInstanceProfile" + +// DisassociateIamInstanceProfileRequest generates a "aws/request.Request" representing the +// client's request for the DisassociateIamInstanceProfile operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisassociateIamInstanceProfile for more information on using the DisassociateIamInstanceProfile +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisassociateIamInstanceProfileRequest method. +// req, resp := client.DisassociateIamInstanceProfileRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfile +func (c *EC2) DisassociateIamInstanceProfileRequest(input *DisassociateIamInstanceProfileInput) (req *request.Request, output *DisassociateIamInstanceProfileOutput) { + op := &request.Operation{ + Name: opDisassociateIamInstanceProfile, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisassociateIamInstanceProfileInput{} + } + + output = &DisassociateIamInstanceProfileOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisassociateIamInstanceProfile API operation for Amazon Elastic Compute Cloud. +// +// Disassociates an IAM instance profile from a running or stopped instance. +// +// Use DescribeIamInstanceProfileAssociations to get the association ID. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisassociateIamInstanceProfile for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfile +func (c *EC2) DisassociateIamInstanceProfile(input *DisassociateIamInstanceProfileInput) (*DisassociateIamInstanceProfileOutput, error) { + req, out := c.DisassociateIamInstanceProfileRequest(input) + return out, req.Send() +} + +// DisassociateIamInstanceProfileWithContext is the same as DisassociateIamInstanceProfile with the addition of +// the ability to pass a context and additional request options. +// +// See DisassociateIamInstanceProfile for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisassociateIamInstanceProfileWithContext(ctx aws.Context, input *DisassociateIamInstanceProfileInput, opts ...request.Option) (*DisassociateIamInstanceProfileOutput, error) { + req, out := c.DisassociateIamInstanceProfileRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisassociateRouteTable = "DisassociateRouteTable" + +// DisassociateRouteTableRequest generates a "aws/request.Request" representing the +// client's request for the DisassociateRouteTable operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisassociateRouteTable for more information on using the DisassociateRouteTable +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisassociateRouteTableRequest method. +// req, resp := client.DisassociateRouteTableRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTable +func (c *EC2) DisassociateRouteTableRequest(input *DisassociateRouteTableInput) (req *request.Request, output *DisassociateRouteTableOutput) { + op := &request.Operation{ + Name: opDisassociateRouteTable, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisassociateRouteTableInput{} + } + + output = &DisassociateRouteTableOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// DisassociateRouteTable API operation for Amazon Elastic Compute Cloud. +// +// Disassociates a subnet from a route table. +// +// After you perform this action, the subnet no longer uses the routes in the +// route table. Instead, it uses the routes in the VPC's main route table. For +// more information about route tables, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) +// in the Amazon Virtual Private Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisassociateRouteTable for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTable +func (c *EC2) DisassociateRouteTable(input *DisassociateRouteTableInput) (*DisassociateRouteTableOutput, error) { + req, out := c.DisassociateRouteTableRequest(input) + return out, req.Send() +} + +// DisassociateRouteTableWithContext is the same as DisassociateRouteTable with the addition of +// the ability to pass a context and additional request options. +// +// See DisassociateRouteTable for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisassociateRouteTableWithContext(ctx aws.Context, input *DisassociateRouteTableInput, opts ...request.Option) (*DisassociateRouteTableOutput, error) { + req, out := c.DisassociateRouteTableRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisassociateSubnetCidrBlock = "DisassociateSubnetCidrBlock" + +// DisassociateSubnetCidrBlockRequest generates a "aws/request.Request" representing the +// client's request for the DisassociateSubnetCidrBlock operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisassociateSubnetCidrBlock for more information on using the DisassociateSubnetCidrBlock +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisassociateSubnetCidrBlockRequest method. +// req, resp := client.DisassociateSubnetCidrBlockRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlock +func (c *EC2) DisassociateSubnetCidrBlockRequest(input *DisassociateSubnetCidrBlockInput) (req *request.Request, output *DisassociateSubnetCidrBlockOutput) { + op := &request.Operation{ + Name: opDisassociateSubnetCidrBlock, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisassociateSubnetCidrBlockInput{} + } + + output = &DisassociateSubnetCidrBlockOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisassociateSubnetCidrBlock API operation for Amazon Elastic Compute Cloud. +// +// Disassociates a CIDR block from a subnet. Currently, you can disassociate +// an IPv6 CIDR block only. You must detach or delete all gateways and resources +// that are associated with the CIDR block before you can disassociate it. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisassociateSubnetCidrBlock for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlock +func (c *EC2) DisassociateSubnetCidrBlock(input *DisassociateSubnetCidrBlockInput) (*DisassociateSubnetCidrBlockOutput, error) { + req, out := c.DisassociateSubnetCidrBlockRequest(input) + return out, req.Send() +} + +// DisassociateSubnetCidrBlockWithContext is the same as DisassociateSubnetCidrBlock with the addition of +// the ability to pass a context and additional request options. +// +// See DisassociateSubnetCidrBlock for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisassociateSubnetCidrBlockWithContext(ctx aws.Context, input *DisassociateSubnetCidrBlockInput, opts ...request.Option) (*DisassociateSubnetCidrBlockOutput, error) { + req, out := c.DisassociateSubnetCidrBlockRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisassociateTransitGatewayRouteTable = "DisassociateTransitGatewayRouteTable" + +// DisassociateTransitGatewayRouteTableRequest generates a "aws/request.Request" representing the +// client's request for the DisassociateTransitGatewayRouteTable operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisassociateTransitGatewayRouteTable for more information on using the DisassociateTransitGatewayRouteTable +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisassociateTransitGatewayRouteTableRequest method. +// req, resp := client.DisassociateTransitGatewayRouteTableRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayRouteTable +func (c *EC2) DisassociateTransitGatewayRouteTableRequest(input *DisassociateTransitGatewayRouteTableInput) (req *request.Request, output *DisassociateTransitGatewayRouteTableOutput) { + op := &request.Operation{ + Name: opDisassociateTransitGatewayRouteTable, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisassociateTransitGatewayRouteTableInput{} + } + + output = &DisassociateTransitGatewayRouteTableOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisassociateTransitGatewayRouteTable API operation for Amazon Elastic Compute Cloud. +// +// Disassociates a resource attachment from a transit gateway route table. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisassociateTransitGatewayRouteTable for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayRouteTable +func (c *EC2) DisassociateTransitGatewayRouteTable(input *DisassociateTransitGatewayRouteTableInput) (*DisassociateTransitGatewayRouteTableOutput, error) { + req, out := c.DisassociateTransitGatewayRouteTableRequest(input) + return out, req.Send() +} + +// DisassociateTransitGatewayRouteTableWithContext is the same as DisassociateTransitGatewayRouteTable with the addition of +// the ability to pass a context and additional request options. +// +// See DisassociateTransitGatewayRouteTable for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisassociateTransitGatewayRouteTableWithContext(ctx aws.Context, input *DisassociateTransitGatewayRouteTableInput, opts ...request.Option) (*DisassociateTransitGatewayRouteTableOutput, error) { + req, out := c.DisassociateTransitGatewayRouteTableRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDisassociateVpcCidrBlock = "DisassociateVpcCidrBlock" + +// DisassociateVpcCidrBlockRequest generates a "aws/request.Request" representing the +// client's request for the DisassociateVpcCidrBlock operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DisassociateVpcCidrBlock for more information on using the DisassociateVpcCidrBlock +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DisassociateVpcCidrBlockRequest method. +// req, resp := client.DisassociateVpcCidrBlockRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlock +func (c *EC2) DisassociateVpcCidrBlockRequest(input *DisassociateVpcCidrBlockInput) (req *request.Request, output *DisassociateVpcCidrBlockOutput) { + op := &request.Operation{ + Name: opDisassociateVpcCidrBlock, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DisassociateVpcCidrBlockInput{} + } + + output = &DisassociateVpcCidrBlockOutput{} + req = c.newRequest(op, input, output) + return +} + +// DisassociateVpcCidrBlock API operation for Amazon Elastic Compute Cloud. +// +// Disassociates a CIDR block from a VPC. To disassociate the CIDR block, you +// must specify its association ID. You can get the association ID by using +// DescribeVpcs. You must detach or delete all gateways and resources that are +// associated with the CIDR block before you can disassociate it. +// +// You cannot disassociate the CIDR block with which you originally created +// the VPC (the primary CIDR block). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation DisassociateVpcCidrBlock for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlock +func (c *EC2) DisassociateVpcCidrBlock(input *DisassociateVpcCidrBlockInput) (*DisassociateVpcCidrBlockOutput, error) { + req, out := c.DisassociateVpcCidrBlockRequest(input) + return out, req.Send() +} + +// DisassociateVpcCidrBlockWithContext is the same as DisassociateVpcCidrBlock with the addition of +// the ability to pass a context and additional request options. +// +// See DisassociateVpcCidrBlock for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) DisassociateVpcCidrBlockWithContext(ctx aws.Context, input *DisassociateVpcCidrBlockInput, opts ...request.Option) (*DisassociateVpcCidrBlockOutput, error) { + req, out := c.DisassociateVpcCidrBlockRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opEnableEbsEncryptionByDefault = "EnableEbsEncryptionByDefault" + +// EnableEbsEncryptionByDefaultRequest generates a "aws/request.Request" representing the +// client's request for the EnableEbsEncryptionByDefault operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See EnableEbsEncryptionByDefault for more information on using the EnableEbsEncryptionByDefault +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the EnableEbsEncryptionByDefaultRequest method. +// req, resp := client.EnableEbsEncryptionByDefaultRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableEbsEncryptionByDefault +func (c *EC2) EnableEbsEncryptionByDefaultRequest(input *EnableEbsEncryptionByDefaultInput) (req *request.Request, output *EnableEbsEncryptionByDefaultOutput) { + op := &request.Operation{ + Name: opEnableEbsEncryptionByDefault, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &EnableEbsEncryptionByDefaultInput{} + } + + output = &EnableEbsEncryptionByDefaultOutput{} + req = c.newRequest(op, input, output) + return +} + +// EnableEbsEncryptionByDefault API operation for Amazon Elastic Compute Cloud. +// +// Enables EBS encryption by default for your account in the current Region. +// +// After you enable encryption by default, the EBS volumes that you create are +// are always encrypted, either using the default CMK or the CMK that you specified +// when you created each volume. For more information, see Amazon EBS Encryption +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// You can specify the default CMK for encryption by default using ModifyEbsDefaultKmsKeyId +// or ResetEbsDefaultKmsKeyId. +// +// Enabling encryption by default has no effect on the encryption status of +// your existing volumes. +// +// After you enable encryption by default, you can no longer launch instances +// using instance types that do not support encryption. For more information, +// see Supported Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation EnableEbsEncryptionByDefault for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableEbsEncryptionByDefault +func (c *EC2) EnableEbsEncryptionByDefault(input *EnableEbsEncryptionByDefaultInput) (*EnableEbsEncryptionByDefaultOutput, error) { + req, out := c.EnableEbsEncryptionByDefaultRequest(input) + return out, req.Send() +} + +// EnableEbsEncryptionByDefaultWithContext is the same as EnableEbsEncryptionByDefault with the addition of +// the ability to pass a context and additional request options. +// +// See EnableEbsEncryptionByDefault for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) EnableEbsEncryptionByDefaultWithContext(ctx aws.Context, input *EnableEbsEncryptionByDefaultInput, opts ...request.Option) (*EnableEbsEncryptionByDefaultOutput, error) { + req, out := c.EnableEbsEncryptionByDefaultRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opEnableFastSnapshotRestores = "EnableFastSnapshotRestores" + +// EnableFastSnapshotRestoresRequest generates a "aws/request.Request" representing the +// client's request for the EnableFastSnapshotRestores operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See EnableFastSnapshotRestores for more information on using the EnableFastSnapshotRestores +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the EnableFastSnapshotRestoresRequest method. +// req, resp := client.EnableFastSnapshotRestoresRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestores +func (c *EC2) EnableFastSnapshotRestoresRequest(input *EnableFastSnapshotRestoresInput) (req *request.Request, output *EnableFastSnapshotRestoresOutput) { + op := &request.Operation{ + Name: opEnableFastSnapshotRestores, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &EnableFastSnapshotRestoresInput{} + } + + output = &EnableFastSnapshotRestoresOutput{} + req = c.newRequest(op, input, output) + return +} + +// EnableFastSnapshotRestores API operation for Amazon Elastic Compute Cloud. +// +// Enables fast snapshot restores for the specified snapshots in the specified +// Availability Zones. +// +// You get the full benefit of fast snapshot restores after they enter the enabled +// state. To get the current state of fast snapshot restores, use DescribeFastSnapshotRestores. +// To disable fast snapshot restores, use DisableFastSnapshotRestores. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation EnableFastSnapshotRestores for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestores +func (c *EC2) EnableFastSnapshotRestores(input *EnableFastSnapshotRestoresInput) (*EnableFastSnapshotRestoresOutput, error) { + req, out := c.EnableFastSnapshotRestoresRequest(input) + return out, req.Send() +} + +// EnableFastSnapshotRestoresWithContext is the same as EnableFastSnapshotRestores with the addition of +// the ability to pass a context and additional request options. +// +// See EnableFastSnapshotRestores for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) EnableFastSnapshotRestoresWithContext(ctx aws.Context, input *EnableFastSnapshotRestoresInput, opts ...request.Option) (*EnableFastSnapshotRestoresOutput, error) { + req, out := c.EnableFastSnapshotRestoresRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opEnableTransitGatewayRouteTablePropagation = "EnableTransitGatewayRouteTablePropagation" + +// EnableTransitGatewayRouteTablePropagationRequest generates a "aws/request.Request" representing the +// client's request for the EnableTransitGatewayRouteTablePropagation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See EnableTransitGatewayRouteTablePropagation for more information on using the EnableTransitGatewayRouteTablePropagation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the EnableTransitGatewayRouteTablePropagationRequest method. +// req, resp := client.EnableTransitGatewayRouteTablePropagationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableTransitGatewayRouteTablePropagation +func (c *EC2) EnableTransitGatewayRouteTablePropagationRequest(input *EnableTransitGatewayRouteTablePropagationInput) (req *request.Request, output *EnableTransitGatewayRouteTablePropagationOutput) { + op := &request.Operation{ + Name: opEnableTransitGatewayRouteTablePropagation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &EnableTransitGatewayRouteTablePropagationInput{} + } + + output = &EnableTransitGatewayRouteTablePropagationOutput{} + req = c.newRequest(op, input, output) + return +} + +// EnableTransitGatewayRouteTablePropagation API operation for Amazon Elastic Compute Cloud. +// +// Enables the specified attachment to propagate routes to the specified propagation +// route table. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation EnableTransitGatewayRouteTablePropagation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableTransitGatewayRouteTablePropagation +func (c *EC2) EnableTransitGatewayRouteTablePropagation(input *EnableTransitGatewayRouteTablePropagationInput) (*EnableTransitGatewayRouteTablePropagationOutput, error) { + req, out := c.EnableTransitGatewayRouteTablePropagationRequest(input) + return out, req.Send() +} + +// EnableTransitGatewayRouteTablePropagationWithContext is the same as EnableTransitGatewayRouteTablePropagation with the addition of +// the ability to pass a context and additional request options. +// +// See EnableTransitGatewayRouteTablePropagation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) EnableTransitGatewayRouteTablePropagationWithContext(ctx aws.Context, input *EnableTransitGatewayRouteTablePropagationInput, opts ...request.Option) (*EnableTransitGatewayRouteTablePropagationOutput, error) { + req, out := c.EnableTransitGatewayRouteTablePropagationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opEnableVgwRoutePropagation = "EnableVgwRoutePropagation" + +// EnableVgwRoutePropagationRequest generates a "aws/request.Request" representing the +// client's request for the EnableVgwRoutePropagation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See EnableVgwRoutePropagation for more information on using the EnableVgwRoutePropagation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the EnableVgwRoutePropagationRequest method. +// req, resp := client.EnableVgwRoutePropagationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagation +func (c *EC2) EnableVgwRoutePropagationRequest(input *EnableVgwRoutePropagationInput) (req *request.Request, output *EnableVgwRoutePropagationOutput) { + op := &request.Operation{ + Name: opEnableVgwRoutePropagation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &EnableVgwRoutePropagationInput{} + } + + output = &EnableVgwRoutePropagationOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// EnableVgwRoutePropagation API operation for Amazon Elastic Compute Cloud. +// +// Enables a virtual private gateway (VGW) to propagate routes to the specified +// route table of a VPC. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation EnableVgwRoutePropagation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagation +func (c *EC2) EnableVgwRoutePropagation(input *EnableVgwRoutePropagationInput) (*EnableVgwRoutePropagationOutput, error) { + req, out := c.EnableVgwRoutePropagationRequest(input) + return out, req.Send() +} + +// EnableVgwRoutePropagationWithContext is the same as EnableVgwRoutePropagation with the addition of +// the ability to pass a context and additional request options. +// +// See EnableVgwRoutePropagation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) EnableVgwRoutePropagationWithContext(ctx aws.Context, input *EnableVgwRoutePropagationInput, opts ...request.Option) (*EnableVgwRoutePropagationOutput, error) { + req, out := c.EnableVgwRoutePropagationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opEnableVolumeIO = "EnableVolumeIO" + +// EnableVolumeIORequest generates a "aws/request.Request" representing the +// client's request for the EnableVolumeIO operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See EnableVolumeIO for more information on using the EnableVolumeIO +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the EnableVolumeIORequest method. +// req, resp := client.EnableVolumeIORequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIO +func (c *EC2) EnableVolumeIORequest(input *EnableVolumeIOInput) (req *request.Request, output *EnableVolumeIOOutput) { + op := &request.Operation{ + Name: opEnableVolumeIO, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &EnableVolumeIOInput{} + } + + output = &EnableVolumeIOOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// EnableVolumeIO API operation for Amazon Elastic Compute Cloud. +// +// Enables I/O operations for a volume that had I/O operations disabled because +// the data on the volume was potentially inconsistent. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation EnableVolumeIO for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIO +func (c *EC2) EnableVolumeIO(input *EnableVolumeIOInput) (*EnableVolumeIOOutput, error) { + req, out := c.EnableVolumeIORequest(input) + return out, req.Send() +} + +// EnableVolumeIOWithContext is the same as EnableVolumeIO with the addition of +// the ability to pass a context and additional request options. +// +// See EnableVolumeIO for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) EnableVolumeIOWithContext(ctx aws.Context, input *EnableVolumeIOInput, opts ...request.Option) (*EnableVolumeIOOutput, error) { + req, out := c.EnableVolumeIORequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opEnableVpcClassicLink = "EnableVpcClassicLink" + +// EnableVpcClassicLinkRequest generates a "aws/request.Request" representing the +// client's request for the EnableVpcClassicLink operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See EnableVpcClassicLink for more information on using the EnableVpcClassicLink +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the EnableVpcClassicLinkRequest method. +// req, resp := client.EnableVpcClassicLinkRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLink +func (c *EC2) EnableVpcClassicLinkRequest(input *EnableVpcClassicLinkInput) (req *request.Request, output *EnableVpcClassicLinkOutput) { + op := &request.Operation{ + Name: opEnableVpcClassicLink, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &EnableVpcClassicLinkInput{} + } + + output = &EnableVpcClassicLinkOutput{} + req = c.newRequest(op, input, output) + return +} + +// EnableVpcClassicLink API operation for Amazon Elastic Compute Cloud. +// +// Enables a VPC for ClassicLink. You can then link EC2-Classic instances to +// your ClassicLink-enabled VPC to allow communication over private IP addresses. +// You cannot enable your VPC for ClassicLink if any of your VPC route tables +// have existing routes for address ranges within the 10.0.0.0/8 IP address +// range, excluding local routes for VPCs in the 10.0.0.0/16 and 10.1.0.0/16 +// IP address ranges. For more information, see ClassicLink (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation EnableVpcClassicLink for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLink +func (c *EC2) EnableVpcClassicLink(input *EnableVpcClassicLinkInput) (*EnableVpcClassicLinkOutput, error) { + req, out := c.EnableVpcClassicLinkRequest(input) + return out, req.Send() +} + +// EnableVpcClassicLinkWithContext is the same as EnableVpcClassicLink with the addition of +// the ability to pass a context and additional request options. +// +// See EnableVpcClassicLink for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) EnableVpcClassicLinkWithContext(ctx aws.Context, input *EnableVpcClassicLinkInput, opts ...request.Option) (*EnableVpcClassicLinkOutput, error) { + req, out := c.EnableVpcClassicLinkRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opEnableVpcClassicLinkDnsSupport = "EnableVpcClassicLinkDnsSupport" + +// EnableVpcClassicLinkDnsSupportRequest generates a "aws/request.Request" representing the +// client's request for the EnableVpcClassicLinkDnsSupport operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See EnableVpcClassicLinkDnsSupport for more information on using the EnableVpcClassicLinkDnsSupport +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the EnableVpcClassicLinkDnsSupportRequest method. +// req, resp := client.EnableVpcClassicLinkDnsSupportRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupport +func (c *EC2) EnableVpcClassicLinkDnsSupportRequest(input *EnableVpcClassicLinkDnsSupportInput) (req *request.Request, output *EnableVpcClassicLinkDnsSupportOutput) { + op := &request.Operation{ + Name: opEnableVpcClassicLinkDnsSupport, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &EnableVpcClassicLinkDnsSupportInput{} + } + + output = &EnableVpcClassicLinkDnsSupportOutput{} + req = c.newRequest(op, input, output) + return +} + +// EnableVpcClassicLinkDnsSupport API operation for Amazon Elastic Compute Cloud. +// +// Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, +// the DNS hostname of a linked EC2-Classic instance resolves to its private +// IP address when addressed from an instance in the VPC to which it's linked. +// Similarly, the DNS hostname of an instance in a VPC resolves to its private +// IP address when addressed from a linked EC2-Classic instance. For more information, +// see ClassicLink (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation EnableVpcClassicLinkDnsSupport for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupport +func (c *EC2) EnableVpcClassicLinkDnsSupport(input *EnableVpcClassicLinkDnsSupportInput) (*EnableVpcClassicLinkDnsSupportOutput, error) { + req, out := c.EnableVpcClassicLinkDnsSupportRequest(input) + return out, req.Send() +} + +// EnableVpcClassicLinkDnsSupportWithContext is the same as EnableVpcClassicLinkDnsSupport with the addition of +// the ability to pass a context and additional request options. +// +// See EnableVpcClassicLinkDnsSupport for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) EnableVpcClassicLinkDnsSupportWithContext(ctx aws.Context, input *EnableVpcClassicLinkDnsSupportInput, opts ...request.Option) (*EnableVpcClassicLinkDnsSupportOutput, error) { + req, out := c.EnableVpcClassicLinkDnsSupportRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opExportClientVpnClientCertificateRevocationList = "ExportClientVpnClientCertificateRevocationList" + +// ExportClientVpnClientCertificateRevocationListRequest generates a "aws/request.Request" representing the +// client's request for the ExportClientVpnClientCertificateRevocationList operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ExportClientVpnClientCertificateRevocationList for more information on using the ExportClientVpnClientCertificateRevocationList +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ExportClientVpnClientCertificateRevocationListRequest method. +// req, resp := client.ExportClientVpnClientCertificateRevocationListRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientCertificateRevocationList +func (c *EC2) ExportClientVpnClientCertificateRevocationListRequest(input *ExportClientVpnClientCertificateRevocationListInput) (req *request.Request, output *ExportClientVpnClientCertificateRevocationListOutput) { + op := &request.Operation{ + Name: opExportClientVpnClientCertificateRevocationList, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ExportClientVpnClientCertificateRevocationListInput{} + } + + output = &ExportClientVpnClientCertificateRevocationListOutput{} + req = c.newRequest(op, input, output) + return +} + +// ExportClientVpnClientCertificateRevocationList API operation for Amazon Elastic Compute Cloud. +// +// Downloads the client certificate revocation list for the specified Client +// VPN endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ExportClientVpnClientCertificateRevocationList for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientCertificateRevocationList +func (c *EC2) ExportClientVpnClientCertificateRevocationList(input *ExportClientVpnClientCertificateRevocationListInput) (*ExportClientVpnClientCertificateRevocationListOutput, error) { + req, out := c.ExportClientVpnClientCertificateRevocationListRequest(input) + return out, req.Send() +} + +// ExportClientVpnClientCertificateRevocationListWithContext is the same as ExportClientVpnClientCertificateRevocationList with the addition of +// the ability to pass a context and additional request options. +// +// See ExportClientVpnClientCertificateRevocationList for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ExportClientVpnClientCertificateRevocationListWithContext(ctx aws.Context, input *ExportClientVpnClientCertificateRevocationListInput, opts ...request.Option) (*ExportClientVpnClientCertificateRevocationListOutput, error) { + req, out := c.ExportClientVpnClientCertificateRevocationListRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opExportClientVpnClientConfiguration = "ExportClientVpnClientConfiguration" + +// ExportClientVpnClientConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the ExportClientVpnClientConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ExportClientVpnClientConfiguration for more information on using the ExportClientVpnClientConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ExportClientVpnClientConfigurationRequest method. +// req, resp := client.ExportClientVpnClientConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientConfiguration +func (c *EC2) ExportClientVpnClientConfigurationRequest(input *ExportClientVpnClientConfigurationInput) (req *request.Request, output *ExportClientVpnClientConfigurationOutput) { + op := &request.Operation{ + Name: opExportClientVpnClientConfiguration, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ExportClientVpnClientConfigurationInput{} + } + + output = &ExportClientVpnClientConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// ExportClientVpnClientConfiguration API operation for Amazon Elastic Compute Cloud. +// +// Downloads the contents of the Client VPN endpoint configuration file for +// the specified Client VPN endpoint. The Client VPN endpoint configuration +// file includes the Client VPN endpoint and certificate information clients +// need to establish a connection with the Client VPN endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ExportClientVpnClientConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientConfiguration +func (c *EC2) ExportClientVpnClientConfiguration(input *ExportClientVpnClientConfigurationInput) (*ExportClientVpnClientConfigurationOutput, error) { + req, out := c.ExportClientVpnClientConfigurationRequest(input) + return out, req.Send() +} + +// ExportClientVpnClientConfigurationWithContext is the same as ExportClientVpnClientConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See ExportClientVpnClientConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ExportClientVpnClientConfigurationWithContext(ctx aws.Context, input *ExportClientVpnClientConfigurationInput, opts ...request.Option) (*ExportClientVpnClientConfigurationOutput, error) { + req, out := c.ExportClientVpnClientConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opExportImage = "ExportImage" + +// ExportImageRequest generates a "aws/request.Request" representing the +// client's request for the ExportImage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ExportImage for more information on using the ExportImage +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ExportImageRequest method. +// req, resp := client.ExportImageRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportImage +func (c *EC2) ExportImageRequest(input *ExportImageInput) (req *request.Request, output *ExportImageOutput) { + op := &request.Operation{ + Name: opExportImage, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ExportImageInput{} + } + + output = &ExportImageOutput{} + req = c.newRequest(op, input, output) + return +} + +// ExportImage API operation for Amazon Elastic Compute Cloud. +// +// Exports an Amazon Machine Image (AMI) to a VM file. For more information, +// see Exporting a VM Directory from an Amazon Machine Image (AMI) (https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html) +// in the VM Import/Export User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ExportImage for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportImage +func (c *EC2) ExportImage(input *ExportImageInput) (*ExportImageOutput, error) { + req, out := c.ExportImageRequest(input) + return out, req.Send() +} + +// ExportImageWithContext is the same as ExportImage with the addition of +// the ability to pass a context and additional request options. +// +// See ExportImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ExportImageWithContext(ctx aws.Context, input *ExportImageInput, opts ...request.Option) (*ExportImageOutput, error) { + req, out := c.ExportImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opExportTransitGatewayRoutes = "ExportTransitGatewayRoutes" + +// ExportTransitGatewayRoutesRequest generates a "aws/request.Request" representing the +// client's request for the ExportTransitGatewayRoutes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ExportTransitGatewayRoutes for more information on using the ExportTransitGatewayRoutes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ExportTransitGatewayRoutesRequest method. +// req, resp := client.ExportTransitGatewayRoutesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTransitGatewayRoutes +func (c *EC2) ExportTransitGatewayRoutesRequest(input *ExportTransitGatewayRoutesInput) (req *request.Request, output *ExportTransitGatewayRoutesOutput) { + op := &request.Operation{ + Name: opExportTransitGatewayRoutes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ExportTransitGatewayRoutesInput{} + } + + output = &ExportTransitGatewayRoutesOutput{} + req = c.newRequest(op, input, output) + return +} + +// ExportTransitGatewayRoutes API operation for Amazon Elastic Compute Cloud. +// +// Exports routes from the specified transit gateway route table to the specified +// S3 bucket. By default, all routes are exported. Alternatively, you can filter +// by CIDR range. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ExportTransitGatewayRoutes for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTransitGatewayRoutes +func (c *EC2) ExportTransitGatewayRoutes(input *ExportTransitGatewayRoutesInput) (*ExportTransitGatewayRoutesOutput, error) { + req, out := c.ExportTransitGatewayRoutesRequest(input) + return out, req.Send() +} + +// ExportTransitGatewayRoutesWithContext is the same as ExportTransitGatewayRoutes with the addition of +// the ability to pass a context and additional request options. +// +// See ExportTransitGatewayRoutes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ExportTransitGatewayRoutesWithContext(ctx aws.Context, input *ExportTransitGatewayRoutesInput, opts ...request.Option) (*ExportTransitGatewayRoutesOutput, error) { + req, out := c.ExportTransitGatewayRoutesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetCapacityReservationUsage = "GetCapacityReservationUsage" + +// GetCapacityReservationUsageRequest generates a "aws/request.Request" representing the +// client's request for the GetCapacityReservationUsage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetCapacityReservationUsage for more information on using the GetCapacityReservationUsage +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetCapacityReservationUsageRequest method. +// req, resp := client.GetCapacityReservationUsageRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetCapacityReservationUsage +func (c *EC2) GetCapacityReservationUsageRequest(input *GetCapacityReservationUsageInput) (req *request.Request, output *GetCapacityReservationUsageOutput) { + op := &request.Operation{ + Name: opGetCapacityReservationUsage, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetCapacityReservationUsageInput{} + } + + output = &GetCapacityReservationUsageOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetCapacityReservationUsage API operation for Amazon Elastic Compute Cloud. +// +// Gets usage information about a Capacity Reservation. If the Capacity Reservation +// is shared, it shows usage information for the Capacity Reservation owner +// and each AWS account that is currently using the shared capacity. If the +// Capacity Reservation is not shared, it shows only the Capacity Reservation +// owner's usage. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetCapacityReservationUsage for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetCapacityReservationUsage +func (c *EC2) GetCapacityReservationUsage(input *GetCapacityReservationUsageInput) (*GetCapacityReservationUsageOutput, error) { + req, out := c.GetCapacityReservationUsageRequest(input) + return out, req.Send() +} + +// GetCapacityReservationUsageWithContext is the same as GetCapacityReservationUsage with the addition of +// the ability to pass a context and additional request options. +// +// See GetCapacityReservationUsage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetCapacityReservationUsageWithContext(ctx aws.Context, input *GetCapacityReservationUsageInput, opts ...request.Option) (*GetCapacityReservationUsageOutput, error) { + req, out := c.GetCapacityReservationUsageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetConsoleOutput = "GetConsoleOutput" + +// GetConsoleOutputRequest generates a "aws/request.Request" representing the +// client's request for the GetConsoleOutput operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetConsoleOutput for more information on using the GetConsoleOutput +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetConsoleOutputRequest method. +// req, resp := client.GetConsoleOutputRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutput +func (c *EC2) GetConsoleOutputRequest(input *GetConsoleOutputInput) (req *request.Request, output *GetConsoleOutputOutput) { + op := &request.Operation{ + Name: opGetConsoleOutput, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetConsoleOutputInput{} + } + + output = &GetConsoleOutputOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetConsoleOutput API operation for Amazon Elastic Compute Cloud. +// +// Gets the console output for the specified instance. For Linux instances, +// the instance console output displays the exact console output that would +// normally be displayed on a physical monitor attached to a computer. For Windows +// instances, the instance console output includes the last three system event +// log errors. +// +// By default, the console output returns buffered information that was posted +// shortly after an instance transition state (start, stop, reboot, or terminate). +// This information is available for at least one hour after the most recent +// post. Only the most recent 64 KB of console output is available. +// +// You can optionally retrieve the latest serial console output at any time +// during the instance lifecycle. This option is supported on instance types +// that use the Nitro hypervisor. +// +// For more information, see Instance Console Output (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html#instance-console-console-output) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetConsoleOutput for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutput +func (c *EC2) GetConsoleOutput(input *GetConsoleOutputInput) (*GetConsoleOutputOutput, error) { + req, out := c.GetConsoleOutputRequest(input) + return out, req.Send() +} + +// GetConsoleOutputWithContext is the same as GetConsoleOutput with the addition of +// the ability to pass a context and additional request options. +// +// See GetConsoleOutput for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetConsoleOutputWithContext(ctx aws.Context, input *GetConsoleOutputInput, opts ...request.Option) (*GetConsoleOutputOutput, error) { + req, out := c.GetConsoleOutputRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetConsoleScreenshot = "GetConsoleScreenshot" + +// GetConsoleScreenshotRequest generates a "aws/request.Request" representing the +// client's request for the GetConsoleScreenshot operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetConsoleScreenshot for more information on using the GetConsoleScreenshot +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetConsoleScreenshotRequest method. +// req, resp := client.GetConsoleScreenshotRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshot +func (c *EC2) GetConsoleScreenshotRequest(input *GetConsoleScreenshotInput) (req *request.Request, output *GetConsoleScreenshotOutput) { + op := &request.Operation{ + Name: opGetConsoleScreenshot, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetConsoleScreenshotInput{} + } + + output = &GetConsoleScreenshotOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetConsoleScreenshot API operation for Amazon Elastic Compute Cloud. +// +// Retrieve a JPG-format screenshot of a running instance to help with troubleshooting. +// +// The returned content is Base64-encoded. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetConsoleScreenshot for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshot +func (c *EC2) GetConsoleScreenshot(input *GetConsoleScreenshotInput) (*GetConsoleScreenshotOutput, error) { + req, out := c.GetConsoleScreenshotRequest(input) + return out, req.Send() +} + +// GetConsoleScreenshotWithContext is the same as GetConsoleScreenshot with the addition of +// the ability to pass a context and additional request options. +// +// See GetConsoleScreenshot for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetConsoleScreenshotWithContext(ctx aws.Context, input *GetConsoleScreenshotInput, opts ...request.Option) (*GetConsoleScreenshotOutput, error) { + req, out := c.GetConsoleScreenshotRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetEbsDefaultKmsKeyId = "GetEbsDefaultKmsKeyId" + +// GetEbsDefaultKmsKeyIdRequest generates a "aws/request.Request" representing the +// client's request for the GetEbsDefaultKmsKeyId operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetEbsDefaultKmsKeyId for more information on using the GetEbsDefaultKmsKeyId +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetEbsDefaultKmsKeyIdRequest method. +// req, resp := client.GetEbsDefaultKmsKeyIdRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsDefaultKmsKeyId +func (c *EC2) GetEbsDefaultKmsKeyIdRequest(input *GetEbsDefaultKmsKeyIdInput) (req *request.Request, output *GetEbsDefaultKmsKeyIdOutput) { + op := &request.Operation{ + Name: opGetEbsDefaultKmsKeyId, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetEbsDefaultKmsKeyIdInput{} + } + + output = &GetEbsDefaultKmsKeyIdOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetEbsDefaultKmsKeyId API operation for Amazon Elastic Compute Cloud. +// +// Describes the default customer master key (CMK) for EBS encryption by default +// for your account in this Region. You can change the default CMK for encryption +// by default using ModifyEbsDefaultKmsKeyId or ResetEbsDefaultKmsKeyId. +// +// For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetEbsDefaultKmsKeyId for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsDefaultKmsKeyId +func (c *EC2) GetEbsDefaultKmsKeyId(input *GetEbsDefaultKmsKeyIdInput) (*GetEbsDefaultKmsKeyIdOutput, error) { + req, out := c.GetEbsDefaultKmsKeyIdRequest(input) + return out, req.Send() +} + +// GetEbsDefaultKmsKeyIdWithContext is the same as GetEbsDefaultKmsKeyId with the addition of +// the ability to pass a context and additional request options. +// +// See GetEbsDefaultKmsKeyId for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetEbsDefaultKmsKeyIdWithContext(ctx aws.Context, input *GetEbsDefaultKmsKeyIdInput, opts ...request.Option) (*GetEbsDefaultKmsKeyIdOutput, error) { + req, out := c.GetEbsDefaultKmsKeyIdRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetEbsEncryptionByDefault = "GetEbsEncryptionByDefault" + +// GetEbsEncryptionByDefaultRequest generates a "aws/request.Request" representing the +// client's request for the GetEbsEncryptionByDefault operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetEbsEncryptionByDefault for more information on using the GetEbsEncryptionByDefault +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetEbsEncryptionByDefaultRequest method. +// req, resp := client.GetEbsEncryptionByDefaultRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsEncryptionByDefault +func (c *EC2) GetEbsEncryptionByDefaultRequest(input *GetEbsEncryptionByDefaultInput) (req *request.Request, output *GetEbsEncryptionByDefaultOutput) { + op := &request.Operation{ + Name: opGetEbsEncryptionByDefault, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetEbsEncryptionByDefaultInput{} + } + + output = &GetEbsEncryptionByDefaultOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetEbsEncryptionByDefault API operation for Amazon Elastic Compute Cloud. +// +// Describes whether EBS encryption by default is enabled for your account in +// the current Region. +// +// For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetEbsEncryptionByDefault for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsEncryptionByDefault +func (c *EC2) GetEbsEncryptionByDefault(input *GetEbsEncryptionByDefaultInput) (*GetEbsEncryptionByDefaultOutput, error) { + req, out := c.GetEbsEncryptionByDefaultRequest(input) + return out, req.Send() +} + +// GetEbsEncryptionByDefaultWithContext is the same as GetEbsEncryptionByDefault with the addition of +// the ability to pass a context and additional request options. +// +// See GetEbsEncryptionByDefault for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetEbsEncryptionByDefaultWithContext(ctx aws.Context, input *GetEbsEncryptionByDefaultInput, opts ...request.Option) (*GetEbsEncryptionByDefaultOutput, error) { + req, out := c.GetEbsEncryptionByDefaultRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetHostReservationPurchasePreview = "GetHostReservationPurchasePreview" + +// GetHostReservationPurchasePreviewRequest generates a "aws/request.Request" representing the +// client's request for the GetHostReservationPurchasePreview operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetHostReservationPurchasePreview for more information on using the GetHostReservationPurchasePreview +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetHostReservationPurchasePreviewRequest method. +// req, resp := client.GetHostReservationPurchasePreviewRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreview +func (c *EC2) GetHostReservationPurchasePreviewRequest(input *GetHostReservationPurchasePreviewInput) (req *request.Request, output *GetHostReservationPurchasePreviewOutput) { + op := &request.Operation{ + Name: opGetHostReservationPurchasePreview, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetHostReservationPurchasePreviewInput{} + } + + output = &GetHostReservationPurchasePreviewOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetHostReservationPurchasePreview API operation for Amazon Elastic Compute Cloud. +// +// Preview a reservation purchase with configurations that match those of your +// Dedicated Host. You must have active Dedicated Hosts in your account before +// you purchase a reservation. +// +// This is a preview of the PurchaseHostReservation action and does not result +// in the offering being purchased. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetHostReservationPurchasePreview for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreview +func (c *EC2) GetHostReservationPurchasePreview(input *GetHostReservationPurchasePreviewInput) (*GetHostReservationPurchasePreviewOutput, error) { + req, out := c.GetHostReservationPurchasePreviewRequest(input) + return out, req.Send() +} + +// GetHostReservationPurchasePreviewWithContext is the same as GetHostReservationPurchasePreview with the addition of +// the ability to pass a context and additional request options. +// +// See GetHostReservationPurchasePreview for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetHostReservationPurchasePreviewWithContext(ctx aws.Context, input *GetHostReservationPurchasePreviewInput, opts ...request.Option) (*GetHostReservationPurchasePreviewOutput, error) { + req, out := c.GetHostReservationPurchasePreviewRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetLaunchTemplateData = "GetLaunchTemplateData" + +// GetLaunchTemplateDataRequest generates a "aws/request.Request" representing the +// client's request for the GetLaunchTemplateData operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetLaunchTemplateData for more information on using the GetLaunchTemplateData +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetLaunchTemplateDataRequest method. +// req, resp := client.GetLaunchTemplateDataRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetLaunchTemplateData +func (c *EC2) GetLaunchTemplateDataRequest(input *GetLaunchTemplateDataInput) (req *request.Request, output *GetLaunchTemplateDataOutput) { + op := &request.Operation{ + Name: opGetLaunchTemplateData, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetLaunchTemplateDataInput{} + } + + output = &GetLaunchTemplateDataOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetLaunchTemplateData API operation for Amazon Elastic Compute Cloud. +// +// Retrieves the configuration data of the specified instance. You can use this +// data to create a launch template. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetLaunchTemplateData for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetLaunchTemplateData +func (c *EC2) GetLaunchTemplateData(input *GetLaunchTemplateDataInput) (*GetLaunchTemplateDataOutput, error) { + req, out := c.GetLaunchTemplateDataRequest(input) + return out, req.Send() +} + +// GetLaunchTemplateDataWithContext is the same as GetLaunchTemplateData with the addition of +// the ability to pass a context and additional request options. +// +// See GetLaunchTemplateData for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetLaunchTemplateDataWithContext(ctx aws.Context, input *GetLaunchTemplateDataInput, opts ...request.Option) (*GetLaunchTemplateDataOutput, error) { + req, out := c.GetLaunchTemplateDataRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetPasswordData = "GetPasswordData" + +// GetPasswordDataRequest generates a "aws/request.Request" representing the +// client's request for the GetPasswordData operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetPasswordData for more information on using the GetPasswordData +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetPasswordDataRequest method. +// req, resp := client.GetPasswordDataRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordData +func (c *EC2) GetPasswordDataRequest(input *GetPasswordDataInput) (req *request.Request, output *GetPasswordDataOutput) { + op := &request.Operation{ + Name: opGetPasswordData, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetPasswordDataInput{} + } + + output = &GetPasswordDataOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetPasswordData API operation for Amazon Elastic Compute Cloud. +// +// Retrieves the encrypted administrator password for a running Windows instance. +// +// The Windows password is generated at boot by the EC2Config service or EC2Launch +// scripts (Windows Server 2016 and later). This usually only happens the first +// time an instance is launched. For more information, see EC2Config (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html) +// and EC2Launch (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// For the EC2Config service, the password is not generated for rebundled AMIs +// unless Ec2SetPassword is enabled before bundling. +// +// The password is encrypted using the key pair that you specified when you +// launched the instance. You must provide the corresponding key pair file. +// +// When you launch an instance, password generation and encryption may take +// a few minutes. If you try to retrieve the password before it's available, +// the output returns an empty string. We recommend that you wait up to 15 minutes +// after launching an instance before trying to retrieve the generated password. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetPasswordData for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordData +func (c *EC2) GetPasswordData(input *GetPasswordDataInput) (*GetPasswordDataOutput, error) { + req, out := c.GetPasswordDataRequest(input) + return out, req.Send() +} + +// GetPasswordDataWithContext is the same as GetPasswordData with the addition of +// the ability to pass a context and additional request options. +// +// See GetPasswordData for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetPasswordDataWithContext(ctx aws.Context, input *GetPasswordDataInput, opts ...request.Option) (*GetPasswordDataOutput, error) { + req, out := c.GetPasswordDataRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetReservedInstancesExchangeQuote = "GetReservedInstancesExchangeQuote" + +// GetReservedInstancesExchangeQuoteRequest generates a "aws/request.Request" representing the +// client's request for the GetReservedInstancesExchangeQuote operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetReservedInstancesExchangeQuote for more information on using the GetReservedInstancesExchangeQuote +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetReservedInstancesExchangeQuoteRequest method. +// req, resp := client.GetReservedInstancesExchangeQuoteRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuote +func (c *EC2) GetReservedInstancesExchangeQuoteRequest(input *GetReservedInstancesExchangeQuoteInput) (req *request.Request, output *GetReservedInstancesExchangeQuoteOutput) { + op := &request.Operation{ + Name: opGetReservedInstancesExchangeQuote, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetReservedInstancesExchangeQuoteInput{} + } + + output = &GetReservedInstancesExchangeQuoteOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetReservedInstancesExchangeQuote API operation for Amazon Elastic Compute Cloud. +// +// Returns a quote and exchange information for exchanging one or more specified +// Convertible Reserved Instances for a new Convertible Reserved Instance. If +// the exchange cannot be performed, the reason is returned in the response. +// Use AcceptReservedInstancesExchangeQuote to perform the exchange. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetReservedInstancesExchangeQuote for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuote +func (c *EC2) GetReservedInstancesExchangeQuote(input *GetReservedInstancesExchangeQuoteInput) (*GetReservedInstancesExchangeQuoteOutput, error) { + req, out := c.GetReservedInstancesExchangeQuoteRequest(input) + return out, req.Send() +} + +// GetReservedInstancesExchangeQuoteWithContext is the same as GetReservedInstancesExchangeQuote with the addition of +// the ability to pass a context and additional request options. +// +// See GetReservedInstancesExchangeQuote for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetReservedInstancesExchangeQuoteWithContext(ctx aws.Context, input *GetReservedInstancesExchangeQuoteInput, opts ...request.Option) (*GetReservedInstancesExchangeQuoteOutput, error) { + req, out := c.GetReservedInstancesExchangeQuoteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetTransitGatewayAttachmentPropagations = "GetTransitGatewayAttachmentPropagations" + +// GetTransitGatewayAttachmentPropagationsRequest generates a "aws/request.Request" representing the +// client's request for the GetTransitGatewayAttachmentPropagations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetTransitGatewayAttachmentPropagations for more information on using the GetTransitGatewayAttachmentPropagations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetTransitGatewayAttachmentPropagationsRequest method. +// req, resp := client.GetTransitGatewayAttachmentPropagationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayAttachmentPropagations +func (c *EC2) GetTransitGatewayAttachmentPropagationsRequest(input *GetTransitGatewayAttachmentPropagationsInput) (req *request.Request, output *GetTransitGatewayAttachmentPropagationsOutput) { + op := &request.Operation{ + Name: opGetTransitGatewayAttachmentPropagations, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, + } + + if input == nil { + input = &GetTransitGatewayAttachmentPropagationsInput{} + } + + output = &GetTransitGatewayAttachmentPropagationsOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetTransitGatewayAttachmentPropagations API operation for Amazon Elastic Compute Cloud. +// +// Lists the route tables to which the specified resource attachment propagates +// routes. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetTransitGatewayAttachmentPropagations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayAttachmentPropagations +func (c *EC2) GetTransitGatewayAttachmentPropagations(input *GetTransitGatewayAttachmentPropagationsInput) (*GetTransitGatewayAttachmentPropagationsOutput, error) { + req, out := c.GetTransitGatewayAttachmentPropagationsRequest(input) + return out, req.Send() +} + +// GetTransitGatewayAttachmentPropagationsWithContext is the same as GetTransitGatewayAttachmentPropagations with the addition of +// the ability to pass a context and additional request options. +// +// See GetTransitGatewayAttachmentPropagations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetTransitGatewayAttachmentPropagationsWithContext(ctx aws.Context, input *GetTransitGatewayAttachmentPropagationsInput, opts ...request.Option) (*GetTransitGatewayAttachmentPropagationsOutput, error) { + req, out := c.GetTransitGatewayAttachmentPropagationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// GetTransitGatewayAttachmentPropagationsPages iterates over the pages of a GetTransitGatewayAttachmentPropagations operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See GetTransitGatewayAttachmentPropagations method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a GetTransitGatewayAttachmentPropagations operation. +// pageNum := 0 +// err := client.GetTransitGatewayAttachmentPropagationsPages(params, +// func(page *ec2.GetTransitGatewayAttachmentPropagationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) GetTransitGatewayAttachmentPropagationsPages(input *GetTransitGatewayAttachmentPropagationsInput, fn func(*GetTransitGatewayAttachmentPropagationsOutput, bool) bool) error { + return c.GetTransitGatewayAttachmentPropagationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// GetTransitGatewayAttachmentPropagationsPagesWithContext same as GetTransitGatewayAttachmentPropagationsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetTransitGatewayAttachmentPropagationsPagesWithContext(ctx aws.Context, input *GetTransitGatewayAttachmentPropagationsInput, fn func(*GetTransitGatewayAttachmentPropagationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *GetTransitGatewayAttachmentPropagationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.GetTransitGatewayAttachmentPropagationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*GetTransitGatewayAttachmentPropagationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opGetTransitGatewayRouteTableAssociations = "GetTransitGatewayRouteTableAssociations" + +// GetTransitGatewayRouteTableAssociationsRequest generates a "aws/request.Request" representing the +// client's request for the GetTransitGatewayRouteTableAssociations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetTransitGatewayRouteTableAssociations for more information on using the GetTransitGatewayRouteTableAssociations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetTransitGatewayRouteTableAssociationsRequest method. +// req, resp := client.GetTransitGatewayRouteTableAssociationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTableAssociations +func (c *EC2) GetTransitGatewayRouteTableAssociationsRequest(input *GetTransitGatewayRouteTableAssociationsInput) (req *request.Request, output *GetTransitGatewayRouteTableAssociationsOutput) { + op := &request.Operation{ + Name: opGetTransitGatewayRouteTableAssociations, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, + } + + if input == nil { + input = &GetTransitGatewayRouteTableAssociationsInput{} + } + + output = &GetTransitGatewayRouteTableAssociationsOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetTransitGatewayRouteTableAssociations API operation for Amazon Elastic Compute Cloud. +// +// Gets information about the associations for the specified transit gateway +// route table. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetTransitGatewayRouteTableAssociations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTableAssociations +func (c *EC2) GetTransitGatewayRouteTableAssociations(input *GetTransitGatewayRouteTableAssociationsInput) (*GetTransitGatewayRouteTableAssociationsOutput, error) { + req, out := c.GetTransitGatewayRouteTableAssociationsRequest(input) + return out, req.Send() +} + +// GetTransitGatewayRouteTableAssociationsWithContext is the same as GetTransitGatewayRouteTableAssociations with the addition of +// the ability to pass a context and additional request options. +// +// See GetTransitGatewayRouteTableAssociations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetTransitGatewayRouteTableAssociationsWithContext(ctx aws.Context, input *GetTransitGatewayRouteTableAssociationsInput, opts ...request.Option) (*GetTransitGatewayRouteTableAssociationsOutput, error) { + req, out := c.GetTransitGatewayRouteTableAssociationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// GetTransitGatewayRouteTableAssociationsPages iterates over the pages of a GetTransitGatewayRouteTableAssociations operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See GetTransitGatewayRouteTableAssociations method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a GetTransitGatewayRouteTableAssociations operation. +// pageNum := 0 +// err := client.GetTransitGatewayRouteTableAssociationsPages(params, +// func(page *ec2.GetTransitGatewayRouteTableAssociationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) GetTransitGatewayRouteTableAssociationsPages(input *GetTransitGatewayRouteTableAssociationsInput, fn func(*GetTransitGatewayRouteTableAssociationsOutput, bool) bool) error { + return c.GetTransitGatewayRouteTableAssociationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// GetTransitGatewayRouteTableAssociationsPagesWithContext same as GetTransitGatewayRouteTableAssociationsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetTransitGatewayRouteTableAssociationsPagesWithContext(ctx aws.Context, input *GetTransitGatewayRouteTableAssociationsInput, fn func(*GetTransitGatewayRouteTableAssociationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *GetTransitGatewayRouteTableAssociationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.GetTransitGatewayRouteTableAssociationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*GetTransitGatewayRouteTableAssociationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opGetTransitGatewayRouteTablePropagations = "GetTransitGatewayRouteTablePropagations" + +// GetTransitGatewayRouteTablePropagationsRequest generates a "aws/request.Request" representing the +// client's request for the GetTransitGatewayRouteTablePropagations operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetTransitGatewayRouteTablePropagations for more information on using the GetTransitGatewayRouteTablePropagations +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetTransitGatewayRouteTablePropagationsRequest method. +// req, resp := client.GetTransitGatewayRouteTablePropagationsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTablePropagations +func (c *EC2) GetTransitGatewayRouteTablePropagationsRequest(input *GetTransitGatewayRouteTablePropagationsInput) (req *request.Request, output *GetTransitGatewayRouteTablePropagationsOutput) { + op := &request.Operation{ + Name: opGetTransitGatewayRouteTablePropagations, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"NextToken"}, + OutputTokens: []string{"NextToken"}, + LimitToken: "MaxResults", + TruncationToken: "", + }, + } + + if input == nil { + input = &GetTransitGatewayRouteTablePropagationsInput{} + } + + output = &GetTransitGatewayRouteTablePropagationsOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetTransitGatewayRouteTablePropagations API operation for Amazon Elastic Compute Cloud. +// +// Gets information about the route table propagations for the specified transit +// gateway route table. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation GetTransitGatewayRouteTablePropagations for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTablePropagations +func (c *EC2) GetTransitGatewayRouteTablePropagations(input *GetTransitGatewayRouteTablePropagationsInput) (*GetTransitGatewayRouteTablePropagationsOutput, error) { + req, out := c.GetTransitGatewayRouteTablePropagationsRequest(input) + return out, req.Send() +} + +// GetTransitGatewayRouteTablePropagationsWithContext is the same as GetTransitGatewayRouteTablePropagations with the addition of +// the ability to pass a context and additional request options. +// +// See GetTransitGatewayRouteTablePropagations for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetTransitGatewayRouteTablePropagationsWithContext(ctx aws.Context, input *GetTransitGatewayRouteTablePropagationsInput, opts ...request.Option) (*GetTransitGatewayRouteTablePropagationsOutput, error) { + req, out := c.GetTransitGatewayRouteTablePropagationsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// GetTransitGatewayRouteTablePropagationsPages iterates over the pages of a GetTransitGatewayRouteTablePropagations operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See GetTransitGatewayRouteTablePropagations method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a GetTransitGatewayRouteTablePropagations operation. +// pageNum := 0 +// err := client.GetTransitGatewayRouteTablePropagationsPages(params, +// func(page *ec2.GetTransitGatewayRouteTablePropagationsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *EC2) GetTransitGatewayRouteTablePropagationsPages(input *GetTransitGatewayRouteTablePropagationsInput, fn func(*GetTransitGatewayRouteTablePropagationsOutput, bool) bool) error { + return c.GetTransitGatewayRouteTablePropagationsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// GetTransitGatewayRouteTablePropagationsPagesWithContext same as GetTransitGatewayRouteTablePropagationsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) GetTransitGatewayRouteTablePropagationsPagesWithContext(ctx aws.Context, input *GetTransitGatewayRouteTablePropagationsInput, fn func(*GetTransitGatewayRouteTablePropagationsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *GetTransitGatewayRouteTablePropagationsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.GetTransitGatewayRouteTablePropagationsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + for p.Next() { + if !fn(p.Page().(*GetTransitGatewayRouteTablePropagationsOutput), !p.HasNextPage()) { + break + } + } + + return p.Err() +} + +const opImportClientVpnClientCertificateRevocationList = "ImportClientVpnClientCertificateRevocationList" + +// ImportClientVpnClientCertificateRevocationListRequest generates a "aws/request.Request" representing the +// client's request for the ImportClientVpnClientCertificateRevocationList operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ImportClientVpnClientCertificateRevocationList for more information on using the ImportClientVpnClientCertificateRevocationList +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ImportClientVpnClientCertificateRevocationListRequest method. +// req, resp := client.ImportClientVpnClientCertificateRevocationListRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportClientVpnClientCertificateRevocationList +func (c *EC2) ImportClientVpnClientCertificateRevocationListRequest(input *ImportClientVpnClientCertificateRevocationListInput) (req *request.Request, output *ImportClientVpnClientCertificateRevocationListOutput) { + op := &request.Operation{ + Name: opImportClientVpnClientCertificateRevocationList, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ImportClientVpnClientCertificateRevocationListInput{} + } + + output = &ImportClientVpnClientCertificateRevocationListOutput{} + req = c.newRequest(op, input, output) + return +} + +// ImportClientVpnClientCertificateRevocationList API operation for Amazon Elastic Compute Cloud. +// +// Uploads a client certificate revocation list to the specified Client VPN +// endpoint. Uploading a client certificate revocation list overwrites the existing +// client certificate revocation list. +// +// Uploading a client certificate revocation list resets existing client connections. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ImportClientVpnClientCertificateRevocationList for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportClientVpnClientCertificateRevocationList +func (c *EC2) ImportClientVpnClientCertificateRevocationList(input *ImportClientVpnClientCertificateRevocationListInput) (*ImportClientVpnClientCertificateRevocationListOutput, error) { + req, out := c.ImportClientVpnClientCertificateRevocationListRequest(input) + return out, req.Send() +} + +// ImportClientVpnClientCertificateRevocationListWithContext is the same as ImportClientVpnClientCertificateRevocationList with the addition of +// the ability to pass a context and additional request options. +// +// See ImportClientVpnClientCertificateRevocationList for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ImportClientVpnClientCertificateRevocationListWithContext(ctx aws.Context, input *ImportClientVpnClientCertificateRevocationListInput, opts ...request.Option) (*ImportClientVpnClientCertificateRevocationListOutput, error) { + req, out := c.ImportClientVpnClientCertificateRevocationListRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opImportImage = "ImportImage" + +// ImportImageRequest generates a "aws/request.Request" representing the +// client's request for the ImportImage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ImportImage for more information on using the ImportImage +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ImportImageRequest method. +// req, resp := client.ImportImageRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImage +func (c *EC2) ImportImageRequest(input *ImportImageInput) (req *request.Request, output *ImportImageOutput) { + op := &request.Operation{ + Name: opImportImage, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ImportImageInput{} + } + + output = &ImportImageOutput{} + req = c.newRequest(op, input, output) + return +} + +// ImportImage API operation for Amazon Elastic Compute Cloud. +// +// Import single or multi-volume disk images or EBS snapshots into an Amazon +// Machine Image (AMI). For more information, see Importing a VM as an Image +// Using VM Import/Export (https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html) +// in the VM Import/Export User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ImportImage for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImage +func (c *EC2) ImportImage(input *ImportImageInput) (*ImportImageOutput, error) { + req, out := c.ImportImageRequest(input) + return out, req.Send() +} + +// ImportImageWithContext is the same as ImportImage with the addition of +// the ability to pass a context and additional request options. +// +// See ImportImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ImportImageWithContext(ctx aws.Context, input *ImportImageInput, opts ...request.Option) (*ImportImageOutput, error) { + req, out := c.ImportImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opImportInstance = "ImportInstance" + +// ImportInstanceRequest generates a "aws/request.Request" representing the +// client's request for the ImportInstance operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ImportInstance for more information on using the ImportInstance +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ImportInstanceRequest method. +// req, resp := client.ImportInstanceRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstance +func (c *EC2) ImportInstanceRequest(input *ImportInstanceInput) (req *request.Request, output *ImportInstanceOutput) { + op := &request.Operation{ + Name: opImportInstance, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ImportInstanceInput{} + } + + output = &ImportInstanceOutput{} + req = c.newRequest(op, input, output) + return +} + +// ImportInstance API operation for Amazon Elastic Compute Cloud. +// +// Creates an import instance task using metadata from the specified disk image. +// ImportInstance only supports single-volume VMs. To import multi-volume VMs, +// use ImportImage. For more information, see Importing a Virtual Machine Using +// the Amazon EC2 CLI (https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html). +// +// For information about the import manifest referenced by this API action, +// see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ImportInstance for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstance +func (c *EC2) ImportInstance(input *ImportInstanceInput) (*ImportInstanceOutput, error) { + req, out := c.ImportInstanceRequest(input) + return out, req.Send() +} + +// ImportInstanceWithContext is the same as ImportInstance with the addition of +// the ability to pass a context and additional request options. +// +// See ImportInstance for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ImportInstanceWithContext(ctx aws.Context, input *ImportInstanceInput, opts ...request.Option) (*ImportInstanceOutput, error) { + req, out := c.ImportInstanceRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opImportKeyPair = "ImportKeyPair" + +// ImportKeyPairRequest generates a "aws/request.Request" representing the +// client's request for the ImportKeyPair operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ImportKeyPair for more information on using the ImportKeyPair +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ImportKeyPairRequest method. +// req, resp := client.ImportKeyPairRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPair +func (c *EC2) ImportKeyPairRequest(input *ImportKeyPairInput) (req *request.Request, output *ImportKeyPairOutput) { + op := &request.Operation{ + Name: opImportKeyPair, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ImportKeyPairInput{} + } + + output = &ImportKeyPairOutput{} + req = c.newRequest(op, input, output) + return +} + +// ImportKeyPair API operation for Amazon Elastic Compute Cloud. +// +// Imports the public key from an RSA key pair that you created with a third-party +// tool. Compare this with CreateKeyPair, in which AWS creates the key pair +// and gives the keys to you (AWS keeps a copy of the public key). With ImportKeyPair, +// you create the key pair and give AWS just the public key. The private key +// is never transferred between you and AWS. +// +// For more information about key pairs, see Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ImportKeyPair for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPair +func (c *EC2) ImportKeyPair(input *ImportKeyPairInput) (*ImportKeyPairOutput, error) { + req, out := c.ImportKeyPairRequest(input) + return out, req.Send() +} + +// ImportKeyPairWithContext is the same as ImportKeyPair with the addition of +// the ability to pass a context and additional request options. +// +// See ImportKeyPair for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ImportKeyPairWithContext(ctx aws.Context, input *ImportKeyPairInput, opts ...request.Option) (*ImportKeyPairOutput, error) { + req, out := c.ImportKeyPairRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opImportSnapshot = "ImportSnapshot" + +// ImportSnapshotRequest generates a "aws/request.Request" representing the +// client's request for the ImportSnapshot operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ImportSnapshot for more information on using the ImportSnapshot +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ImportSnapshotRequest method. +// req, resp := client.ImportSnapshotRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshot +func (c *EC2) ImportSnapshotRequest(input *ImportSnapshotInput) (req *request.Request, output *ImportSnapshotOutput) { + op := &request.Operation{ + Name: opImportSnapshot, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ImportSnapshotInput{} + } + + output = &ImportSnapshotOutput{} + req = c.newRequest(op, input, output) + return +} + +// ImportSnapshot API operation for Amazon Elastic Compute Cloud. +// +// Imports a disk into an EBS snapshot. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ImportSnapshot for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshot +func (c *EC2) ImportSnapshot(input *ImportSnapshotInput) (*ImportSnapshotOutput, error) { + req, out := c.ImportSnapshotRequest(input) + return out, req.Send() +} + +// ImportSnapshotWithContext is the same as ImportSnapshot with the addition of +// the ability to pass a context and additional request options. +// +// See ImportSnapshot for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ImportSnapshotWithContext(ctx aws.Context, input *ImportSnapshotInput, opts ...request.Option) (*ImportSnapshotOutput, error) { + req, out := c.ImportSnapshotRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opImportVolume = "ImportVolume" + +// ImportVolumeRequest generates a "aws/request.Request" representing the +// client's request for the ImportVolume operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ImportVolume for more information on using the ImportVolume +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ImportVolumeRequest method. +// req, resp := client.ImportVolumeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolume +func (c *EC2) ImportVolumeRequest(input *ImportVolumeInput) (req *request.Request, output *ImportVolumeOutput) { + op := &request.Operation{ + Name: opImportVolume, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ImportVolumeInput{} + } + + output = &ImportVolumeOutput{} + req = c.newRequest(op, input, output) + return +} + +// ImportVolume API operation for Amazon Elastic Compute Cloud. +// +// Creates an import volume task using metadata from the specified disk image.For +// more information, see Importing Disks to Amazon EBS (https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/importing-your-volumes-into-amazon-ebs.html). +// +// For information about the import manifest referenced by this API action, +// see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ImportVolume for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolume +func (c *EC2) ImportVolume(input *ImportVolumeInput) (*ImportVolumeOutput, error) { + req, out := c.ImportVolumeRequest(input) + return out, req.Send() +} + +// ImportVolumeWithContext is the same as ImportVolume with the addition of +// the ability to pass a context and additional request options. +// +// See ImportVolume for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ImportVolumeWithContext(ctx aws.Context, input *ImportVolumeInput, opts ...request.Option) (*ImportVolumeOutput, error) { + req, out := c.ImportVolumeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyCapacityReservation = "ModifyCapacityReservation" + +// ModifyCapacityReservationRequest generates a "aws/request.Request" representing the +// client's request for the ModifyCapacityReservation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyCapacityReservation for more information on using the ModifyCapacityReservation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyCapacityReservationRequest method. +// req, resp := client.ModifyCapacityReservationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyCapacityReservation +func (c *EC2) ModifyCapacityReservationRequest(input *ModifyCapacityReservationInput) (req *request.Request, output *ModifyCapacityReservationOutput) { + op := &request.Operation{ + Name: opModifyCapacityReservation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyCapacityReservationInput{} + } + + output = &ModifyCapacityReservationOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyCapacityReservation API operation for Amazon Elastic Compute Cloud. +// +// Modifies a Capacity Reservation's capacity and the conditions under which +// it is to be released. You cannot change a Capacity Reservation's instance +// type, EBS optimization, instance store settings, platform, Availability Zone, +// or instance eligibility. If you need to modify any of these attributes, we +// recommend that you cancel the Capacity Reservation, and then create a new +// one with the required attributes. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyCapacityReservation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyCapacityReservation +func (c *EC2) ModifyCapacityReservation(input *ModifyCapacityReservationInput) (*ModifyCapacityReservationOutput, error) { + req, out := c.ModifyCapacityReservationRequest(input) + return out, req.Send() +} + +// ModifyCapacityReservationWithContext is the same as ModifyCapacityReservation with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyCapacityReservation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyCapacityReservationWithContext(ctx aws.Context, input *ModifyCapacityReservationInput, opts ...request.Option) (*ModifyCapacityReservationOutput, error) { + req, out := c.ModifyCapacityReservationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyClientVpnEndpoint = "ModifyClientVpnEndpoint" + +// ModifyClientVpnEndpointRequest generates a "aws/request.Request" representing the +// client's request for the ModifyClientVpnEndpoint operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyClientVpnEndpoint for more information on using the ModifyClientVpnEndpoint +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyClientVpnEndpointRequest method. +// req, resp := client.ModifyClientVpnEndpointRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyClientVpnEndpoint +func (c *EC2) ModifyClientVpnEndpointRequest(input *ModifyClientVpnEndpointInput) (req *request.Request, output *ModifyClientVpnEndpointOutput) { + op := &request.Operation{ + Name: opModifyClientVpnEndpoint, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyClientVpnEndpointInput{} + } + + output = &ModifyClientVpnEndpointOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyClientVpnEndpoint API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified Client VPN endpoint. You can only modify an endpoint's +// server certificate information, client connection logging information, DNS +// server, and description. Modifying the DNS server resets existing client +// connections. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyClientVpnEndpoint for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyClientVpnEndpoint +func (c *EC2) ModifyClientVpnEndpoint(input *ModifyClientVpnEndpointInput) (*ModifyClientVpnEndpointOutput, error) { + req, out := c.ModifyClientVpnEndpointRequest(input) + return out, req.Send() +} + +// ModifyClientVpnEndpointWithContext is the same as ModifyClientVpnEndpoint with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyClientVpnEndpoint for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyClientVpnEndpointWithContext(ctx aws.Context, input *ModifyClientVpnEndpointInput, opts ...request.Option) (*ModifyClientVpnEndpointOutput, error) { + req, out := c.ModifyClientVpnEndpointRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyEbsDefaultKmsKeyId = "ModifyEbsDefaultKmsKeyId" + +// ModifyEbsDefaultKmsKeyIdRequest generates a "aws/request.Request" representing the +// client's request for the ModifyEbsDefaultKmsKeyId operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyEbsDefaultKmsKeyId for more information on using the ModifyEbsDefaultKmsKeyId +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyEbsDefaultKmsKeyIdRequest method. +// req, resp := client.ModifyEbsDefaultKmsKeyIdRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyEbsDefaultKmsKeyId +func (c *EC2) ModifyEbsDefaultKmsKeyIdRequest(input *ModifyEbsDefaultKmsKeyIdInput) (req *request.Request, output *ModifyEbsDefaultKmsKeyIdOutput) { + op := &request.Operation{ + Name: opModifyEbsDefaultKmsKeyId, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyEbsDefaultKmsKeyIdInput{} + } + + output = &ModifyEbsDefaultKmsKeyIdOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyEbsDefaultKmsKeyId API operation for Amazon Elastic Compute Cloud. +// +// Changes the default customer master key (CMK) for EBS encryption by default +// for your account in this Region. +// +// AWS creates a unique AWS managed CMK in each Region for use with encryption +// by default. If you change the default CMK to a customer managed CMK, it is +// used instead of the AWS managed CMK. To reset the default CMK to the AWS +// managed CMK for EBS, use ResetEbsDefaultKmsKeyId. +// +// If you delete or disable the customer managed CMK that you specified for +// use with encryption by default, your instances will fail to launch. +// +// For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyEbsDefaultKmsKeyId for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyEbsDefaultKmsKeyId +func (c *EC2) ModifyEbsDefaultKmsKeyId(input *ModifyEbsDefaultKmsKeyIdInput) (*ModifyEbsDefaultKmsKeyIdOutput, error) { + req, out := c.ModifyEbsDefaultKmsKeyIdRequest(input) + return out, req.Send() +} + +// ModifyEbsDefaultKmsKeyIdWithContext is the same as ModifyEbsDefaultKmsKeyId with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyEbsDefaultKmsKeyId for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyEbsDefaultKmsKeyIdWithContext(ctx aws.Context, input *ModifyEbsDefaultKmsKeyIdInput, opts ...request.Option) (*ModifyEbsDefaultKmsKeyIdOutput, error) { + req, out := c.ModifyEbsDefaultKmsKeyIdRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyFleet = "ModifyFleet" + +// ModifyFleetRequest generates a "aws/request.Request" representing the +// client's request for the ModifyFleet operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyFleet for more information on using the ModifyFleet +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyFleetRequest method. +// req, resp := client.ModifyFleetRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFleet +func (c *EC2) ModifyFleetRequest(input *ModifyFleetInput) (req *request.Request, output *ModifyFleetOutput) { + op := &request.Operation{ + Name: opModifyFleet, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyFleetInput{} + } + + output = &ModifyFleetOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyFleet API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified EC2 Fleet. +// +// You can only modify an EC2 Fleet request of type maintain. +// +// While the EC2 Fleet is being modified, it is in the modifying state. +// +// To scale up your EC2 Fleet, increase its target capacity. The EC2 Fleet launches +// the additional Spot Instances according to the allocation strategy for the +// EC2 Fleet request. If the allocation strategy is lowest-price, the EC2 Fleet +// launches instances using the Spot Instance pool with the lowest price. If +// the allocation strategy is diversified, the EC2 Fleet distributes the instances +// across the Spot Instance pools. If the allocation strategy is capacity-optimized, +// EC2 Fleet launches instances from Spot Instance pools with optimal capacity +// for the number of instances that are launching. +// +// To scale down your EC2 Fleet, decrease its target capacity. First, the EC2 +// Fleet cancels any open requests that exceed the new target capacity. You +// can request that the EC2 Fleet terminate Spot Instances until the size of +// the fleet no longer exceeds the new target capacity. If the allocation strategy +// is lowest-price, the EC2 Fleet terminates the instances with the highest +// price per unit. If the allocation strategy is capacity-optimized, the EC2 +// Fleet terminates the instances in the Spot Instance pools that have the least +// available Spot Instance capacity. If the allocation strategy is diversified, +// the EC2 Fleet terminates instances across the Spot Instance pools. Alternatively, +// you can request that the EC2 Fleet keep the fleet at its current size, but +// not replace any Spot Instances that are interrupted or that you terminate +// manually. +// +// If you are finished with your EC2 Fleet for now, but will use it again later, +// you can set the target capacity to 0. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyFleet for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFleet +func (c *EC2) ModifyFleet(input *ModifyFleetInput) (*ModifyFleetOutput, error) { + req, out := c.ModifyFleetRequest(input) + return out, req.Send() +} + +// ModifyFleetWithContext is the same as ModifyFleet with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyFleet for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyFleetWithContext(ctx aws.Context, input *ModifyFleetInput, opts ...request.Option) (*ModifyFleetOutput, error) { + req, out := c.ModifyFleetRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyFpgaImageAttribute = "ModifyFpgaImageAttribute" + +// ModifyFpgaImageAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ModifyFpgaImageAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyFpgaImageAttribute for more information on using the ModifyFpgaImageAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyFpgaImageAttributeRequest method. +// req, resp := client.ModifyFpgaImageAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFpgaImageAttribute +func (c *EC2) ModifyFpgaImageAttributeRequest(input *ModifyFpgaImageAttributeInput) (req *request.Request, output *ModifyFpgaImageAttributeOutput) { + op := &request.Operation{ + Name: opModifyFpgaImageAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyFpgaImageAttributeInput{} + } + + output = &ModifyFpgaImageAttributeOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyFpgaImageAttribute API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified attribute of the specified Amazon FPGA Image (AFI). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyFpgaImageAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFpgaImageAttribute +func (c *EC2) ModifyFpgaImageAttribute(input *ModifyFpgaImageAttributeInput) (*ModifyFpgaImageAttributeOutput, error) { + req, out := c.ModifyFpgaImageAttributeRequest(input) + return out, req.Send() +} + +// ModifyFpgaImageAttributeWithContext is the same as ModifyFpgaImageAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyFpgaImageAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyFpgaImageAttributeWithContext(ctx aws.Context, input *ModifyFpgaImageAttributeInput, opts ...request.Option) (*ModifyFpgaImageAttributeOutput, error) { + req, out := c.ModifyFpgaImageAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyHosts = "ModifyHosts" + +// ModifyHostsRequest generates a "aws/request.Request" representing the +// client's request for the ModifyHosts operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyHosts for more information on using the ModifyHosts +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyHostsRequest method. +// req, resp := client.ModifyHostsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHosts +func (c *EC2) ModifyHostsRequest(input *ModifyHostsInput) (req *request.Request, output *ModifyHostsOutput) { + op := &request.Operation{ + Name: opModifyHosts, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyHostsInput{} + } + + output = &ModifyHostsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyHosts API operation for Amazon Elastic Compute Cloud. +// +// Modify the auto-placement setting of a Dedicated Host. When auto-placement +// is enabled, any instances that you launch with a tenancy of host but without +// a specific host ID are placed onto any available Dedicated Host in your account +// that has auto-placement enabled. When auto-placement is disabled, you need +// to provide a host ID to have the instance launch onto a specific host. If +// no host ID is provided, the instance is launched onto a suitable host with +// auto-placement enabled. +// +// You can also use this API action to modify a Dedicated Host to support either +// multiple instance types in an instance family, or to support a specific instance +// type only. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyHosts for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHosts +func (c *EC2) ModifyHosts(input *ModifyHostsInput) (*ModifyHostsOutput, error) { + req, out := c.ModifyHostsRequest(input) + return out, req.Send() +} + +// ModifyHostsWithContext is the same as ModifyHosts with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyHosts for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyHostsWithContext(ctx aws.Context, input *ModifyHostsInput, opts ...request.Option) (*ModifyHostsOutput, error) { + req, out := c.ModifyHostsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyIdFormat = "ModifyIdFormat" + +// ModifyIdFormatRequest generates a "aws/request.Request" representing the +// client's request for the ModifyIdFormat operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyIdFormat for more information on using the ModifyIdFormat +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyIdFormatRequest method. +// req, resp := client.ModifyIdFormatRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormat +func (c *EC2) ModifyIdFormatRequest(input *ModifyIdFormatInput) (req *request.Request, output *ModifyIdFormatOutput) { + op := &request.Operation{ + Name: opModifyIdFormat, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyIdFormatInput{} + } + + output = &ModifyIdFormatOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifyIdFormat API operation for Amazon Elastic Compute Cloud. +// +// Modifies the ID format for the specified resource on a per-Region basis. +// You can specify that resources should receive longer IDs (17-character IDs) +// when they are created. +// +// This request can only be used to modify longer ID settings for resource types +// that are within the opt-in period. Resources currently in their opt-in period +// include: bundle | conversion-task | customer-gateway | dhcp-options | elastic-ip-allocation +// | elastic-ip-association | export-task | flow-log | image | import-task | +// internet-gateway | network-acl | network-acl-association | network-interface +// | network-interface-attachment | prefix-list | route-table | route-table-association +// | security-group | subnet | subnet-cidr-block-association | vpc | vpc-cidr-block-association +// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. +// +// This setting applies to the IAM user who makes the request; it does not apply +// to the entire AWS account. By default, an IAM user defaults to the same settings +// as the root user. If you're using this action as the root user, then these +// settings apply to the entire account, unless an IAM user explicitly overrides +// these settings for themselves. For more information, see Resource IDs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Resources created with longer IDs are visible to all IAM roles and users, +// regardless of these settings and provided that they have permission to use +// the relevant Describe command for the resource type. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyIdFormat for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormat +func (c *EC2) ModifyIdFormat(input *ModifyIdFormatInput) (*ModifyIdFormatOutput, error) { + req, out := c.ModifyIdFormatRequest(input) + return out, req.Send() +} + +// ModifyIdFormatWithContext is the same as ModifyIdFormat with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyIdFormat for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyIdFormatWithContext(ctx aws.Context, input *ModifyIdFormatInput, opts ...request.Option) (*ModifyIdFormatOutput, error) { + req, out := c.ModifyIdFormatRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyIdentityIdFormat = "ModifyIdentityIdFormat" + +// ModifyIdentityIdFormatRequest generates a "aws/request.Request" representing the +// client's request for the ModifyIdentityIdFormat operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyIdentityIdFormat for more information on using the ModifyIdentityIdFormat +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyIdentityIdFormatRequest method. +// req, resp := client.ModifyIdentityIdFormatRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormat +func (c *EC2) ModifyIdentityIdFormatRequest(input *ModifyIdentityIdFormatInput) (req *request.Request, output *ModifyIdentityIdFormatOutput) { + op := &request.Operation{ + Name: opModifyIdentityIdFormat, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyIdentityIdFormatInput{} + } + + output = &ModifyIdentityIdFormatOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifyIdentityIdFormat API operation for Amazon Elastic Compute Cloud. +// +// Modifies the ID format of a resource for a specified IAM user, IAM role, +// or the root user for an account; or all IAM users, IAM roles, and the root +// user for an account. You can specify that resources should receive longer +// IDs (17-character IDs) when they are created. +// +// This request can only be used to modify longer ID settings for resource types +// that are within the opt-in period. Resources currently in their opt-in period +// include: bundle | conversion-task | customer-gateway | dhcp-options | elastic-ip-allocation +// | elastic-ip-association | export-task | flow-log | image | import-task | +// internet-gateway | network-acl | network-acl-association | network-interface +// | network-interface-attachment | prefix-list | route-table | route-table-association +// | security-group | subnet | subnet-cidr-block-association | vpc | vpc-cidr-block-association +// | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway. +// +// For more information, see Resource IDs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// This setting applies to the principal specified in the request; it does not +// apply to the principal that makes the request. +// +// Resources created with longer IDs are visible to all IAM roles and users, +// regardless of these settings and provided that they have permission to use +// the relevant Describe command for the resource type. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyIdentityIdFormat for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormat +func (c *EC2) ModifyIdentityIdFormat(input *ModifyIdentityIdFormatInput) (*ModifyIdentityIdFormatOutput, error) { + req, out := c.ModifyIdentityIdFormatRequest(input) + return out, req.Send() +} + +// ModifyIdentityIdFormatWithContext is the same as ModifyIdentityIdFormat with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyIdentityIdFormat for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyIdentityIdFormatWithContext(ctx aws.Context, input *ModifyIdentityIdFormatInput, opts ...request.Option) (*ModifyIdentityIdFormatOutput, error) { + req, out := c.ModifyIdentityIdFormatRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyImageAttribute = "ModifyImageAttribute" + +// ModifyImageAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ModifyImageAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyImageAttribute for more information on using the ModifyImageAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyImageAttributeRequest method. +// req, resp := client.ModifyImageAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttribute +func (c *EC2) ModifyImageAttributeRequest(input *ModifyImageAttributeInput) (req *request.Request, output *ModifyImageAttributeOutput) { + op := &request.Operation{ + Name: opModifyImageAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyImageAttributeInput{} + } + + output = &ModifyImageAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifyImageAttribute API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified attribute of the specified AMI. You can specify only +// one attribute at a time. You can use the Attribute parameter to specify the +// attribute or one of the following parameters: Description, LaunchPermission, +// or ProductCode. +// +// AWS Marketplace product codes cannot be modified. Images with an AWS Marketplace +// product code cannot be made public. +// +// To enable the SriovNetSupport enhanced networking attribute of an image, +// enable SriovNetSupport on an instance and create an AMI from the instance. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyImageAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttribute +func (c *EC2) ModifyImageAttribute(input *ModifyImageAttributeInput) (*ModifyImageAttributeOutput, error) { + req, out := c.ModifyImageAttributeRequest(input) + return out, req.Send() +} + +// ModifyImageAttributeWithContext is the same as ModifyImageAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyImageAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyImageAttributeWithContext(ctx aws.Context, input *ModifyImageAttributeInput, opts ...request.Option) (*ModifyImageAttributeOutput, error) { + req, out := c.ModifyImageAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyInstanceAttribute = "ModifyInstanceAttribute" + +// ModifyInstanceAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ModifyInstanceAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyInstanceAttribute for more information on using the ModifyInstanceAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyInstanceAttributeRequest method. +// req, resp := client.ModifyInstanceAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttribute +func (c *EC2) ModifyInstanceAttributeRequest(input *ModifyInstanceAttributeInput) (req *request.Request, output *ModifyInstanceAttributeOutput) { + op := &request.Operation{ + Name: opModifyInstanceAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyInstanceAttributeInput{} + } + + output = &ModifyInstanceAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifyInstanceAttribute API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified attribute of the specified instance. You can specify +// only one attribute at a time. +// +// Note: Using this action to change the security groups associated with an +// elastic network interface (ENI) attached to an instance in a VPC can result +// in an error if the instance has more than one ENI. To change the security +// groups associated with an ENI attached to an instance that has multiple ENIs, +// we recommend that you use the ModifyNetworkInterfaceAttribute action. +// +// To modify some attributes, the instance must be stopped. For more information, +// see Modifying Attributes of a Stopped Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingAttributesWhileInstanceStopped.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyInstanceAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttribute +func (c *EC2) ModifyInstanceAttribute(input *ModifyInstanceAttributeInput) (*ModifyInstanceAttributeOutput, error) { + req, out := c.ModifyInstanceAttributeRequest(input) + return out, req.Send() +} + +// ModifyInstanceAttributeWithContext is the same as ModifyInstanceAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyInstanceAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyInstanceAttributeWithContext(ctx aws.Context, input *ModifyInstanceAttributeInput, opts ...request.Option) (*ModifyInstanceAttributeOutput, error) { + req, out := c.ModifyInstanceAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyInstanceCapacityReservationAttributes = "ModifyInstanceCapacityReservationAttributes" + +// ModifyInstanceCapacityReservationAttributesRequest generates a "aws/request.Request" representing the +// client's request for the ModifyInstanceCapacityReservationAttributes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyInstanceCapacityReservationAttributes for more information on using the ModifyInstanceCapacityReservationAttributes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyInstanceCapacityReservationAttributesRequest method. +// req, resp := client.ModifyInstanceCapacityReservationAttributesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCapacityReservationAttributes +func (c *EC2) ModifyInstanceCapacityReservationAttributesRequest(input *ModifyInstanceCapacityReservationAttributesInput) (req *request.Request, output *ModifyInstanceCapacityReservationAttributesOutput) { + op := &request.Operation{ + Name: opModifyInstanceCapacityReservationAttributes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyInstanceCapacityReservationAttributesInput{} + } + + output = &ModifyInstanceCapacityReservationAttributesOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyInstanceCapacityReservationAttributes API operation for Amazon Elastic Compute Cloud. +// +// Modifies the Capacity Reservation settings for a stopped instance. Use this +// action to configure an instance to target a specific Capacity Reservation, +// run in any open Capacity Reservation with matching attributes, or run On-Demand +// Instance capacity. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyInstanceCapacityReservationAttributes for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCapacityReservationAttributes +func (c *EC2) ModifyInstanceCapacityReservationAttributes(input *ModifyInstanceCapacityReservationAttributesInput) (*ModifyInstanceCapacityReservationAttributesOutput, error) { + req, out := c.ModifyInstanceCapacityReservationAttributesRequest(input) + return out, req.Send() +} + +// ModifyInstanceCapacityReservationAttributesWithContext is the same as ModifyInstanceCapacityReservationAttributes with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyInstanceCapacityReservationAttributes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyInstanceCapacityReservationAttributesWithContext(ctx aws.Context, input *ModifyInstanceCapacityReservationAttributesInput, opts ...request.Option) (*ModifyInstanceCapacityReservationAttributesOutput, error) { + req, out := c.ModifyInstanceCapacityReservationAttributesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyInstanceCreditSpecification = "ModifyInstanceCreditSpecification" + +// ModifyInstanceCreditSpecificationRequest generates a "aws/request.Request" representing the +// client's request for the ModifyInstanceCreditSpecification operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyInstanceCreditSpecification for more information on using the ModifyInstanceCreditSpecification +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyInstanceCreditSpecificationRequest method. +// req, resp := client.ModifyInstanceCreditSpecificationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCreditSpecification +func (c *EC2) ModifyInstanceCreditSpecificationRequest(input *ModifyInstanceCreditSpecificationInput) (req *request.Request, output *ModifyInstanceCreditSpecificationOutput) { + op := &request.Operation{ + Name: opModifyInstanceCreditSpecification, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyInstanceCreditSpecificationInput{} + } + + output = &ModifyInstanceCreditSpecificationOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyInstanceCreditSpecification API operation for Amazon Elastic Compute Cloud. +// +// Modifies the credit option for CPU usage on a running or stopped T2 or T3 +// instance. The credit options are standard and unlimited. +// +// For more information, see Burstable Performance Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyInstanceCreditSpecification for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCreditSpecification +func (c *EC2) ModifyInstanceCreditSpecification(input *ModifyInstanceCreditSpecificationInput) (*ModifyInstanceCreditSpecificationOutput, error) { + req, out := c.ModifyInstanceCreditSpecificationRequest(input) + return out, req.Send() +} + +// ModifyInstanceCreditSpecificationWithContext is the same as ModifyInstanceCreditSpecification with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyInstanceCreditSpecification for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyInstanceCreditSpecificationWithContext(ctx aws.Context, input *ModifyInstanceCreditSpecificationInput, opts ...request.Option) (*ModifyInstanceCreditSpecificationOutput, error) { + req, out := c.ModifyInstanceCreditSpecificationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyInstanceEventStartTime = "ModifyInstanceEventStartTime" + +// ModifyInstanceEventStartTimeRequest generates a "aws/request.Request" representing the +// client's request for the ModifyInstanceEventStartTime operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyInstanceEventStartTime for more information on using the ModifyInstanceEventStartTime +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyInstanceEventStartTimeRequest method. +// req, resp := client.ModifyInstanceEventStartTimeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceEventStartTime +func (c *EC2) ModifyInstanceEventStartTimeRequest(input *ModifyInstanceEventStartTimeInput) (req *request.Request, output *ModifyInstanceEventStartTimeOutput) { + op := &request.Operation{ + Name: opModifyInstanceEventStartTime, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyInstanceEventStartTimeInput{} + } + + output = &ModifyInstanceEventStartTimeOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyInstanceEventStartTime API operation for Amazon Elastic Compute Cloud. +// +// Modifies the start time for a scheduled Amazon EC2 instance event. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyInstanceEventStartTime for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceEventStartTime +func (c *EC2) ModifyInstanceEventStartTime(input *ModifyInstanceEventStartTimeInput) (*ModifyInstanceEventStartTimeOutput, error) { + req, out := c.ModifyInstanceEventStartTimeRequest(input) + return out, req.Send() +} + +// ModifyInstanceEventStartTimeWithContext is the same as ModifyInstanceEventStartTime with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyInstanceEventStartTime for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyInstanceEventStartTimeWithContext(ctx aws.Context, input *ModifyInstanceEventStartTimeInput, opts ...request.Option) (*ModifyInstanceEventStartTimeOutput, error) { + req, out := c.ModifyInstanceEventStartTimeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyInstanceMetadataOptions = "ModifyInstanceMetadataOptions" + +// ModifyInstanceMetadataOptionsRequest generates a "aws/request.Request" representing the +// client's request for the ModifyInstanceMetadataOptions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyInstanceMetadataOptions for more information on using the ModifyInstanceMetadataOptions +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyInstanceMetadataOptionsRequest method. +// req, resp := client.ModifyInstanceMetadataOptionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMetadataOptions +func (c *EC2) ModifyInstanceMetadataOptionsRequest(input *ModifyInstanceMetadataOptionsInput) (req *request.Request, output *ModifyInstanceMetadataOptionsOutput) { + op := &request.Operation{ + Name: opModifyInstanceMetadataOptions, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyInstanceMetadataOptionsInput{} + } + + output = &ModifyInstanceMetadataOptionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyInstanceMetadataOptions API operation for Amazon Elastic Compute Cloud. +// +// Modify the instance metadata parameters on a running or stopped instance. +// When you modify the parameters on a stopped instance, they are applied when +// the instance is started. When you modify the parameters on a running instance, +// the API responds with a state of “pending”. After the parameter modifications +// are successfully applied to the instance, the state of the modifications +// changes from “pending” to “applied” in subsequent describe-instances +// API calls. For more information, see Instance Metadata and User Data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyInstanceMetadataOptions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMetadataOptions +func (c *EC2) ModifyInstanceMetadataOptions(input *ModifyInstanceMetadataOptionsInput) (*ModifyInstanceMetadataOptionsOutput, error) { + req, out := c.ModifyInstanceMetadataOptionsRequest(input) + return out, req.Send() +} + +// ModifyInstanceMetadataOptionsWithContext is the same as ModifyInstanceMetadataOptions with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyInstanceMetadataOptions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyInstanceMetadataOptionsWithContext(ctx aws.Context, input *ModifyInstanceMetadataOptionsInput, opts ...request.Option) (*ModifyInstanceMetadataOptionsOutput, error) { + req, out := c.ModifyInstanceMetadataOptionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyInstancePlacement = "ModifyInstancePlacement" + +// ModifyInstancePlacementRequest generates a "aws/request.Request" representing the +// client's request for the ModifyInstancePlacement operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyInstancePlacement for more information on using the ModifyInstancePlacement +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyInstancePlacementRequest method. +// req, resp := client.ModifyInstancePlacementRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacement +func (c *EC2) ModifyInstancePlacementRequest(input *ModifyInstancePlacementInput) (req *request.Request, output *ModifyInstancePlacementOutput) { + op := &request.Operation{ + Name: opModifyInstancePlacement, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyInstancePlacementInput{} + } + + output = &ModifyInstancePlacementOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyInstancePlacement API operation for Amazon Elastic Compute Cloud. +// +// Modifies the placement attributes for a specified instance. You can do the +// following: +// +// * Modify the affinity between an instance and a Dedicated Host (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html). +// When affinity is set to host and the instance is not associated with a +// specific Dedicated Host, the next time the instance is launched, it is +// automatically associated with the host on which it lands. If the instance +// is restarted or rebooted, this relationship persists. +// +// * Change the Dedicated Host with which an instance is associated. +// +// * Change the instance tenancy of an instance from host to dedicated, or +// from dedicated to host. +// +// * Move an instance to or from a placement group (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html). +// +// At least one attribute for affinity, host ID, tenancy, or placement group +// name must be specified in the request. Affinity and tenancy can be modified +// in the same request. +// +// To modify the host ID, tenancy, placement group, or partition for an instance, +// the instance must be in the stopped state. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyInstancePlacement for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacement +func (c *EC2) ModifyInstancePlacement(input *ModifyInstancePlacementInput) (*ModifyInstancePlacementOutput, error) { + req, out := c.ModifyInstancePlacementRequest(input) + return out, req.Send() +} + +// ModifyInstancePlacementWithContext is the same as ModifyInstancePlacement with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyInstancePlacement for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyInstancePlacementWithContext(ctx aws.Context, input *ModifyInstancePlacementInput, opts ...request.Option) (*ModifyInstancePlacementOutput, error) { + req, out := c.ModifyInstancePlacementRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyLaunchTemplate = "ModifyLaunchTemplate" + +// ModifyLaunchTemplateRequest generates a "aws/request.Request" representing the +// client's request for the ModifyLaunchTemplate operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyLaunchTemplate for more information on using the ModifyLaunchTemplate +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyLaunchTemplateRequest method. +// req, resp := client.ModifyLaunchTemplateRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyLaunchTemplate +func (c *EC2) ModifyLaunchTemplateRequest(input *ModifyLaunchTemplateInput) (req *request.Request, output *ModifyLaunchTemplateOutput) { + op := &request.Operation{ + Name: opModifyLaunchTemplate, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyLaunchTemplateInput{} + } + + output = &ModifyLaunchTemplateOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyLaunchTemplate API operation for Amazon Elastic Compute Cloud. +// +// Modifies a launch template. You can specify which version of the launch template +// to set as the default version. When launching an instance, the default version +// applies when a launch template version is not specified. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyLaunchTemplate for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyLaunchTemplate +func (c *EC2) ModifyLaunchTemplate(input *ModifyLaunchTemplateInput) (*ModifyLaunchTemplateOutput, error) { + req, out := c.ModifyLaunchTemplateRequest(input) + return out, req.Send() +} + +// ModifyLaunchTemplateWithContext is the same as ModifyLaunchTemplate with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyLaunchTemplate for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyLaunchTemplateWithContext(ctx aws.Context, input *ModifyLaunchTemplateInput, opts ...request.Option) (*ModifyLaunchTemplateOutput, error) { + req, out := c.ModifyLaunchTemplateRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyNetworkInterfaceAttribute = "ModifyNetworkInterfaceAttribute" + +// ModifyNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ModifyNetworkInterfaceAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyNetworkInterfaceAttribute for more information on using the ModifyNetworkInterfaceAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyNetworkInterfaceAttributeRequest method. +// req, resp := client.ModifyNetworkInterfaceAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttribute +func (c *EC2) ModifyNetworkInterfaceAttributeRequest(input *ModifyNetworkInterfaceAttributeInput) (req *request.Request, output *ModifyNetworkInterfaceAttributeOutput) { + op := &request.Operation{ + Name: opModifyNetworkInterfaceAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyNetworkInterfaceAttributeInput{} + } + + output = &ModifyNetworkInterfaceAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifyNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified network interface attribute. You can specify only +// one attribute at a time. You can use this action to attach and detach security +// groups from an existing EC2 instance. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyNetworkInterfaceAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttribute +func (c *EC2) ModifyNetworkInterfaceAttribute(input *ModifyNetworkInterfaceAttributeInput) (*ModifyNetworkInterfaceAttributeOutput, error) { + req, out := c.ModifyNetworkInterfaceAttributeRequest(input) + return out, req.Send() +} + +// ModifyNetworkInterfaceAttributeWithContext is the same as ModifyNetworkInterfaceAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyNetworkInterfaceAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyNetworkInterfaceAttributeWithContext(ctx aws.Context, input *ModifyNetworkInterfaceAttributeInput, opts ...request.Option) (*ModifyNetworkInterfaceAttributeOutput, error) { + req, out := c.ModifyNetworkInterfaceAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyReservedInstances = "ModifyReservedInstances" + +// ModifyReservedInstancesRequest generates a "aws/request.Request" representing the +// client's request for the ModifyReservedInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyReservedInstances for more information on using the ModifyReservedInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyReservedInstancesRequest method. +// req, resp := client.ModifyReservedInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstances +func (c *EC2) ModifyReservedInstancesRequest(input *ModifyReservedInstancesInput) (req *request.Request, output *ModifyReservedInstancesOutput) { + op := &request.Operation{ + Name: opModifyReservedInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyReservedInstancesInput{} + } + + output = &ModifyReservedInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyReservedInstances API operation for Amazon Elastic Compute Cloud. +// +// Modifies the Availability Zone, instance count, instance type, or network +// platform (EC2-Classic or EC2-VPC) of your Reserved Instances. The Reserved +// Instances to be modified must be identical, except for Availability Zone, +// network platform, and instance type. +// +// For more information, see Modifying Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyReservedInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstances +func (c *EC2) ModifyReservedInstances(input *ModifyReservedInstancesInput) (*ModifyReservedInstancesOutput, error) { + req, out := c.ModifyReservedInstancesRequest(input) + return out, req.Send() +} + +// ModifyReservedInstancesWithContext is the same as ModifyReservedInstances with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyReservedInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyReservedInstancesWithContext(ctx aws.Context, input *ModifyReservedInstancesInput, opts ...request.Option) (*ModifyReservedInstancesOutput, error) { + req, out := c.ModifyReservedInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifySnapshotAttribute = "ModifySnapshotAttribute" + +// ModifySnapshotAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ModifySnapshotAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifySnapshotAttribute for more information on using the ModifySnapshotAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifySnapshotAttributeRequest method. +// req, resp := client.ModifySnapshotAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttribute +func (c *EC2) ModifySnapshotAttributeRequest(input *ModifySnapshotAttributeInput) (req *request.Request, output *ModifySnapshotAttributeOutput) { + op := &request.Operation{ + Name: opModifySnapshotAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifySnapshotAttributeInput{} + } + + output = &ModifySnapshotAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifySnapshotAttribute API operation for Amazon Elastic Compute Cloud. +// +// Adds or removes permission settings for the specified snapshot. You may add +// or remove specified AWS account IDs from a snapshot's list of create volume +// permissions, but you cannot do both in a single operation. If you need to +// both add and remove account IDs for a snapshot, you must use multiple operations. +// You can make up to 500 modifications to a snapshot in a single operation. +// +// Encrypted snapshots and snapshots with AWS Marketplace product codes cannot +// be made public. Snapshots encrypted with your default CMK cannot be shared +// with other accounts. +// +// For more information about modifying snapshot permissions, see Sharing Snapshots +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifySnapshotAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttribute +func (c *EC2) ModifySnapshotAttribute(input *ModifySnapshotAttributeInput) (*ModifySnapshotAttributeOutput, error) { + req, out := c.ModifySnapshotAttributeRequest(input) + return out, req.Send() +} + +// ModifySnapshotAttributeWithContext is the same as ModifySnapshotAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ModifySnapshotAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifySnapshotAttributeWithContext(ctx aws.Context, input *ModifySnapshotAttributeInput, opts ...request.Option) (*ModifySnapshotAttributeOutput, error) { + req, out := c.ModifySnapshotAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifySpotFleetRequest = "ModifySpotFleetRequest" + +// ModifySpotFleetRequestRequest generates a "aws/request.Request" representing the +// client's request for the ModifySpotFleetRequest operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifySpotFleetRequest for more information on using the ModifySpotFleetRequest +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifySpotFleetRequestRequest method. +// req, resp := client.ModifySpotFleetRequestRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequest +func (c *EC2) ModifySpotFleetRequestRequest(input *ModifySpotFleetRequestInput) (req *request.Request, output *ModifySpotFleetRequestOutput) { + op := &request.Operation{ + Name: opModifySpotFleetRequest, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifySpotFleetRequestInput{} + } + + output = &ModifySpotFleetRequestOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifySpotFleetRequest API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified Spot Fleet request. +// +// You can only modify a Spot Fleet request of type maintain. +// +// While the Spot Fleet request is being modified, it is in the modifying state. +// +// To scale up your Spot Fleet, increase its target capacity. The Spot Fleet +// launches the additional Spot Instances according to the allocation strategy +// for the Spot Fleet request. If the allocation strategy is lowestPrice, the +// Spot Fleet launches instances using the Spot Instance pool with the lowest +// price. If the allocation strategy is diversified, the Spot Fleet distributes +// the instances across the Spot Instance pools. If the allocation strategy +// is capacityOptimized, Spot Fleet launches instances from Spot Instance pools +// with optimal capacity for the number of instances that are launching. +// +// To scale down your Spot Fleet, decrease its target capacity. First, the Spot +// Fleet cancels any open requests that exceed the new target capacity. You +// can request that the Spot Fleet terminate Spot Instances until the size of +// the fleet no longer exceeds the new target capacity. If the allocation strategy +// is lowestPrice, the Spot Fleet terminates the instances with the highest +// price per unit. If the allocation strategy is capacityOptimized, the Spot +// Fleet terminates the instances in the Spot Instance pools that have the least +// available Spot Instance capacity. If the allocation strategy is diversified, +// the Spot Fleet terminates instances across the Spot Instance pools. Alternatively, +// you can request that the Spot Fleet keep the fleet at its current size, but +// not replace any Spot Instances that are interrupted or that you terminate +// manually. +// +// If you are finished with your Spot Fleet for now, but will use it again later, +// you can set the target capacity to 0. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifySpotFleetRequest for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequest +func (c *EC2) ModifySpotFleetRequest(input *ModifySpotFleetRequestInput) (*ModifySpotFleetRequestOutput, error) { + req, out := c.ModifySpotFleetRequestRequest(input) + return out, req.Send() +} + +// ModifySpotFleetRequestWithContext is the same as ModifySpotFleetRequest with the addition of +// the ability to pass a context and additional request options. +// +// See ModifySpotFleetRequest for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifySpotFleetRequestWithContext(ctx aws.Context, input *ModifySpotFleetRequestInput, opts ...request.Option) (*ModifySpotFleetRequestOutput, error) { + req, out := c.ModifySpotFleetRequestRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifySubnetAttribute = "ModifySubnetAttribute" + +// ModifySubnetAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ModifySubnetAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifySubnetAttribute for more information on using the ModifySubnetAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifySubnetAttributeRequest method. +// req, resp := client.ModifySubnetAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttribute +func (c *EC2) ModifySubnetAttributeRequest(input *ModifySubnetAttributeInput) (req *request.Request, output *ModifySubnetAttributeOutput) { + op := &request.Operation{ + Name: opModifySubnetAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifySubnetAttributeInput{} + } + + output = &ModifySubnetAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifySubnetAttribute API operation for Amazon Elastic Compute Cloud. +// +// Modifies a subnet attribute. You can only modify one attribute at a time. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifySubnetAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttribute +func (c *EC2) ModifySubnetAttribute(input *ModifySubnetAttributeInput) (*ModifySubnetAttributeOutput, error) { + req, out := c.ModifySubnetAttributeRequest(input) + return out, req.Send() +} + +// ModifySubnetAttributeWithContext is the same as ModifySubnetAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ModifySubnetAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifySubnetAttributeWithContext(ctx aws.Context, input *ModifySubnetAttributeInput, opts ...request.Option) (*ModifySubnetAttributeOutput, error) { + req, out := c.ModifySubnetAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyTrafficMirrorFilterNetworkServices = "ModifyTrafficMirrorFilterNetworkServices" + +// ModifyTrafficMirrorFilterNetworkServicesRequest generates a "aws/request.Request" representing the +// client's request for the ModifyTrafficMirrorFilterNetworkServices operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyTrafficMirrorFilterNetworkServices for more information on using the ModifyTrafficMirrorFilterNetworkServices +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyTrafficMirrorFilterNetworkServicesRequest method. +// req, resp := client.ModifyTrafficMirrorFilterNetworkServicesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterNetworkServices +func (c *EC2) ModifyTrafficMirrorFilterNetworkServicesRequest(input *ModifyTrafficMirrorFilterNetworkServicesInput) (req *request.Request, output *ModifyTrafficMirrorFilterNetworkServicesOutput) { + op := &request.Operation{ + Name: opModifyTrafficMirrorFilterNetworkServices, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyTrafficMirrorFilterNetworkServicesInput{} + } + + output = &ModifyTrafficMirrorFilterNetworkServicesOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyTrafficMirrorFilterNetworkServices API operation for Amazon Elastic Compute Cloud. +// +// Allows or restricts mirroring network services. +// +// By default, Amazon DNS network services are not eligible for Traffic Mirror. +// Use AddNetworkServices to add network services to a Traffic Mirror filter. +// When a network service is added to the Traffic Mirror filter, all traffic +// related to that network service will be mirrored. When you no longer want +// to mirror network services, use RemoveNetworkServices to remove the network +// services from the Traffic Mirror filter. +// +// For information about filter rule properties, see Network Services (https://docs.aws.amazon.com/vpc/latest/mirroring/traffic-mirroring-considerations.html) +// in the Traffic Mirroring User Guide . +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyTrafficMirrorFilterNetworkServices for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterNetworkServices +func (c *EC2) ModifyTrafficMirrorFilterNetworkServices(input *ModifyTrafficMirrorFilterNetworkServicesInput) (*ModifyTrafficMirrorFilterNetworkServicesOutput, error) { + req, out := c.ModifyTrafficMirrorFilterNetworkServicesRequest(input) + return out, req.Send() +} + +// ModifyTrafficMirrorFilterNetworkServicesWithContext is the same as ModifyTrafficMirrorFilterNetworkServices with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyTrafficMirrorFilterNetworkServices for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyTrafficMirrorFilterNetworkServicesWithContext(ctx aws.Context, input *ModifyTrafficMirrorFilterNetworkServicesInput, opts ...request.Option) (*ModifyTrafficMirrorFilterNetworkServicesOutput, error) { + req, out := c.ModifyTrafficMirrorFilterNetworkServicesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyTrafficMirrorFilterRule = "ModifyTrafficMirrorFilterRule" + +// ModifyTrafficMirrorFilterRuleRequest generates a "aws/request.Request" representing the +// client's request for the ModifyTrafficMirrorFilterRule operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyTrafficMirrorFilterRule for more information on using the ModifyTrafficMirrorFilterRule +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyTrafficMirrorFilterRuleRequest method. +// req, resp := client.ModifyTrafficMirrorFilterRuleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterRule +func (c *EC2) ModifyTrafficMirrorFilterRuleRequest(input *ModifyTrafficMirrorFilterRuleInput) (req *request.Request, output *ModifyTrafficMirrorFilterRuleOutput) { + op := &request.Operation{ + Name: opModifyTrafficMirrorFilterRule, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyTrafficMirrorFilterRuleInput{} + } + + output = &ModifyTrafficMirrorFilterRuleOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyTrafficMirrorFilterRule API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified Traffic Mirror rule. +// +// DestinationCidrBlock and SourceCidrBlock must both be an IPv4 range or an +// IPv6 range. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyTrafficMirrorFilterRule for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterRule +func (c *EC2) ModifyTrafficMirrorFilterRule(input *ModifyTrafficMirrorFilterRuleInput) (*ModifyTrafficMirrorFilterRuleOutput, error) { + req, out := c.ModifyTrafficMirrorFilterRuleRequest(input) + return out, req.Send() +} + +// ModifyTrafficMirrorFilterRuleWithContext is the same as ModifyTrafficMirrorFilterRule with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyTrafficMirrorFilterRule for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyTrafficMirrorFilterRuleWithContext(ctx aws.Context, input *ModifyTrafficMirrorFilterRuleInput, opts ...request.Option) (*ModifyTrafficMirrorFilterRuleOutput, error) { + req, out := c.ModifyTrafficMirrorFilterRuleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyTrafficMirrorSession = "ModifyTrafficMirrorSession" + +// ModifyTrafficMirrorSessionRequest generates a "aws/request.Request" representing the +// client's request for the ModifyTrafficMirrorSession operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyTrafficMirrorSession for more information on using the ModifyTrafficMirrorSession +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyTrafficMirrorSessionRequest method. +// req, resp := client.ModifyTrafficMirrorSessionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorSession +func (c *EC2) ModifyTrafficMirrorSessionRequest(input *ModifyTrafficMirrorSessionInput) (req *request.Request, output *ModifyTrafficMirrorSessionOutput) { + op := &request.Operation{ + Name: opModifyTrafficMirrorSession, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyTrafficMirrorSessionInput{} + } + + output = &ModifyTrafficMirrorSessionOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyTrafficMirrorSession API operation for Amazon Elastic Compute Cloud. +// +// Modifies a Traffic Mirror session. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyTrafficMirrorSession for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorSession +func (c *EC2) ModifyTrafficMirrorSession(input *ModifyTrafficMirrorSessionInput) (*ModifyTrafficMirrorSessionOutput, error) { + req, out := c.ModifyTrafficMirrorSessionRequest(input) + return out, req.Send() +} + +// ModifyTrafficMirrorSessionWithContext is the same as ModifyTrafficMirrorSession with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyTrafficMirrorSession for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyTrafficMirrorSessionWithContext(ctx aws.Context, input *ModifyTrafficMirrorSessionInput, opts ...request.Option) (*ModifyTrafficMirrorSessionOutput, error) { + req, out := c.ModifyTrafficMirrorSessionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyTransitGatewayVpcAttachment = "ModifyTransitGatewayVpcAttachment" + +// ModifyTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the +// client's request for the ModifyTransitGatewayVpcAttachment operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyTransitGatewayVpcAttachment for more information on using the ModifyTransitGatewayVpcAttachment +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyTransitGatewayVpcAttachmentRequest method. +// req, resp := client.ModifyTransitGatewayVpcAttachmentRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayVpcAttachment +func (c *EC2) ModifyTransitGatewayVpcAttachmentRequest(input *ModifyTransitGatewayVpcAttachmentInput) (req *request.Request, output *ModifyTransitGatewayVpcAttachmentOutput) { + op := &request.Operation{ + Name: opModifyTransitGatewayVpcAttachment, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyTransitGatewayVpcAttachmentInput{} + } + + output = &ModifyTransitGatewayVpcAttachmentOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified VPC attachment. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyTransitGatewayVpcAttachment for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayVpcAttachment +func (c *EC2) ModifyTransitGatewayVpcAttachment(input *ModifyTransitGatewayVpcAttachmentInput) (*ModifyTransitGatewayVpcAttachmentOutput, error) { + req, out := c.ModifyTransitGatewayVpcAttachmentRequest(input) + return out, req.Send() +} + +// ModifyTransitGatewayVpcAttachmentWithContext is the same as ModifyTransitGatewayVpcAttachment with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyTransitGatewayVpcAttachment for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *ModifyTransitGatewayVpcAttachmentInput, opts ...request.Option) (*ModifyTransitGatewayVpcAttachmentOutput, error) { + req, out := c.ModifyTransitGatewayVpcAttachmentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVolume = "ModifyVolume" + +// ModifyVolumeRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVolume operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVolume for more information on using the ModifyVolume +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVolumeRequest method. +// req, resp := client.ModifyVolumeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolume +func (c *EC2) ModifyVolumeRequest(input *ModifyVolumeInput) (req *request.Request, output *ModifyVolumeOutput) { + op := &request.Operation{ + Name: opModifyVolume, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVolumeInput{} + } + + output = &ModifyVolumeOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVolume API operation for Amazon Elastic Compute Cloud. +// +// You can modify several parameters of an existing EBS volume, including volume +// size, volume type, and IOPS capacity. If your EBS volume is attached to a +// current-generation EC2 instance type, you may be able to apply these changes +// without stopping the instance or detaching the volume from it. For more information +// about modifying an EBS volume running Linux, see Modifying the Size, IOPS, +// or Type of an EBS Volume on Linux (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html). +// For more information about modifying an EBS volume running Windows, see Modifying +// the Size, IOPS, or Type of an EBS Volume on Windows (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html). +// +// When you complete a resize operation on your volume, you need to extend the +// volume's file-system size to take advantage of the new storage capacity. +// For information about extending a Linux file system, see Extending a Linux +// File System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#recognize-expanded-volume-linux). +// For information about extending a Windows file system, see Extending a Windows +// File System (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html#recognize-expanded-volume-windows). +// +// You can use CloudWatch Events to check the status of a modification to an +// EBS volume. For information about CloudWatch Events, see the Amazon CloudWatch +// Events User Guide (https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/). +// You can also track the status of a modification using DescribeVolumesModifications. +// For information about tracking status changes using either method, see Monitoring +// Volume Modifications (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#monitoring_mods). +// +// With previous-generation instance types, resizing an EBS volume may require +// detaching and reattaching the volume or stopping and restarting the instance. +// For more information, see Modifying the Size, IOPS, or Type of an EBS Volume +// on Linux (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html) +// and Modifying the Size, IOPS, or Type of an EBS Volume on Windows (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html). +// +// If you reach the maximum volume modification rate per volume limit, you will +// need to wait at least six hours before applying further modifications to +// the affected EBS volume. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVolume for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolume +func (c *EC2) ModifyVolume(input *ModifyVolumeInput) (*ModifyVolumeOutput, error) { + req, out := c.ModifyVolumeRequest(input) + return out, req.Send() +} + +// ModifyVolumeWithContext is the same as ModifyVolume with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVolume for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVolumeWithContext(ctx aws.Context, input *ModifyVolumeInput, opts ...request.Option) (*ModifyVolumeOutput, error) { + req, out := c.ModifyVolumeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVolumeAttribute = "ModifyVolumeAttribute" + +// ModifyVolumeAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVolumeAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVolumeAttribute for more information on using the ModifyVolumeAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVolumeAttributeRequest method. +// req, resp := client.ModifyVolumeAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttribute +func (c *EC2) ModifyVolumeAttributeRequest(input *ModifyVolumeAttributeInput) (req *request.Request, output *ModifyVolumeAttributeOutput) { + op := &request.Operation{ + Name: opModifyVolumeAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVolumeAttributeInput{} + } + + output = &ModifyVolumeAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifyVolumeAttribute API operation for Amazon Elastic Compute Cloud. +// +// Modifies a volume attribute. +// +// By default, all I/O operations for the volume are suspended when the data +// on the volume is determined to be potentially inconsistent, to prevent undetectable, +// latent data corruption. The I/O access to the volume can be resumed by first +// enabling I/O access and then checking the data consistency on your volume. +// +// You can change the default behavior to resume I/O operations. We recommend +// that you change this only for boot volumes or for volumes that are stateless +// or disposable. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVolumeAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttribute +func (c *EC2) ModifyVolumeAttribute(input *ModifyVolumeAttributeInput) (*ModifyVolumeAttributeOutput, error) { + req, out := c.ModifyVolumeAttributeRequest(input) + return out, req.Send() +} + +// ModifyVolumeAttributeWithContext is the same as ModifyVolumeAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVolumeAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVolumeAttributeWithContext(ctx aws.Context, input *ModifyVolumeAttributeInput, opts ...request.Option) (*ModifyVolumeAttributeOutput, error) { + req, out := c.ModifyVolumeAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpcAttribute = "ModifyVpcAttribute" + +// ModifyVpcAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpcAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpcAttribute for more information on using the ModifyVpcAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpcAttributeRequest method. +// req, resp := client.ModifyVpcAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttribute +func (c *EC2) ModifyVpcAttributeRequest(input *ModifyVpcAttributeInput) (req *request.Request, output *ModifyVpcAttributeOutput) { + op := &request.Operation{ + Name: opModifyVpcAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpcAttributeInput{} + } + + output = &ModifyVpcAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ModifyVpcAttribute API operation for Amazon Elastic Compute Cloud. +// +// Modifies the specified attribute of the specified VPC. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpcAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttribute +func (c *EC2) ModifyVpcAttribute(input *ModifyVpcAttributeInput) (*ModifyVpcAttributeOutput, error) { + req, out := c.ModifyVpcAttributeRequest(input) + return out, req.Send() +} + +// ModifyVpcAttributeWithContext is the same as ModifyVpcAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpcAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpcAttributeWithContext(ctx aws.Context, input *ModifyVpcAttributeInput, opts ...request.Option) (*ModifyVpcAttributeOutput, error) { + req, out := c.ModifyVpcAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpcEndpoint = "ModifyVpcEndpoint" + +// ModifyVpcEndpointRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpcEndpoint operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpcEndpoint for more information on using the ModifyVpcEndpoint +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpcEndpointRequest method. +// req, resp := client.ModifyVpcEndpointRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpoint +func (c *EC2) ModifyVpcEndpointRequest(input *ModifyVpcEndpointInput) (req *request.Request, output *ModifyVpcEndpointOutput) { + op := &request.Operation{ + Name: opModifyVpcEndpoint, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpcEndpointInput{} + } + + output = &ModifyVpcEndpointOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpcEndpoint API operation for Amazon Elastic Compute Cloud. +// +// Modifies attributes of a specified VPC endpoint. The attributes that you +// can modify depend on the type of VPC endpoint (interface or gateway). For +// more information, see VPC Endpoints (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) +// in the Amazon Virtual Private Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpcEndpoint for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpoint +func (c *EC2) ModifyVpcEndpoint(input *ModifyVpcEndpointInput) (*ModifyVpcEndpointOutput, error) { + req, out := c.ModifyVpcEndpointRequest(input) + return out, req.Send() +} + +// ModifyVpcEndpointWithContext is the same as ModifyVpcEndpoint with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpcEndpoint for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpcEndpointWithContext(ctx aws.Context, input *ModifyVpcEndpointInput, opts ...request.Option) (*ModifyVpcEndpointOutput, error) { + req, out := c.ModifyVpcEndpointRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpcEndpointConnectionNotification = "ModifyVpcEndpointConnectionNotification" + +// ModifyVpcEndpointConnectionNotificationRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpcEndpointConnectionNotification operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpcEndpointConnectionNotification for more information on using the ModifyVpcEndpointConnectionNotification +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpcEndpointConnectionNotificationRequest method. +// req, resp := client.ModifyVpcEndpointConnectionNotificationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointConnectionNotification +func (c *EC2) ModifyVpcEndpointConnectionNotificationRequest(input *ModifyVpcEndpointConnectionNotificationInput) (req *request.Request, output *ModifyVpcEndpointConnectionNotificationOutput) { + op := &request.Operation{ + Name: opModifyVpcEndpointConnectionNotification, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpcEndpointConnectionNotificationInput{} + } + + output = &ModifyVpcEndpointConnectionNotificationOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpcEndpointConnectionNotification API operation for Amazon Elastic Compute Cloud. +// +// Modifies a connection notification for VPC endpoint or VPC endpoint service. +// You can change the SNS topic for the notification, or the events for which +// to be notified. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpcEndpointConnectionNotification for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointConnectionNotification +func (c *EC2) ModifyVpcEndpointConnectionNotification(input *ModifyVpcEndpointConnectionNotificationInput) (*ModifyVpcEndpointConnectionNotificationOutput, error) { + req, out := c.ModifyVpcEndpointConnectionNotificationRequest(input) + return out, req.Send() +} + +// ModifyVpcEndpointConnectionNotificationWithContext is the same as ModifyVpcEndpointConnectionNotification with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpcEndpointConnectionNotification for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpcEndpointConnectionNotificationWithContext(ctx aws.Context, input *ModifyVpcEndpointConnectionNotificationInput, opts ...request.Option) (*ModifyVpcEndpointConnectionNotificationOutput, error) { + req, out := c.ModifyVpcEndpointConnectionNotificationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpcEndpointServiceConfiguration = "ModifyVpcEndpointServiceConfiguration" + +// ModifyVpcEndpointServiceConfigurationRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpcEndpointServiceConfiguration operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpcEndpointServiceConfiguration for more information on using the ModifyVpcEndpointServiceConfiguration +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpcEndpointServiceConfigurationRequest method. +// req, resp := client.ModifyVpcEndpointServiceConfigurationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServiceConfiguration +func (c *EC2) ModifyVpcEndpointServiceConfigurationRequest(input *ModifyVpcEndpointServiceConfigurationInput) (req *request.Request, output *ModifyVpcEndpointServiceConfigurationOutput) { + op := &request.Operation{ + Name: opModifyVpcEndpointServiceConfiguration, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpcEndpointServiceConfigurationInput{} + } + + output = &ModifyVpcEndpointServiceConfigurationOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpcEndpointServiceConfiguration API operation for Amazon Elastic Compute Cloud. +// +// Modifies the attributes of your VPC endpoint service configuration. You can +// change the Network Load Balancers for your service, and you can specify whether +// acceptance is required for requests to connect to your endpoint service through +// an interface VPC endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpcEndpointServiceConfiguration for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServiceConfiguration +func (c *EC2) ModifyVpcEndpointServiceConfiguration(input *ModifyVpcEndpointServiceConfigurationInput) (*ModifyVpcEndpointServiceConfigurationOutput, error) { + req, out := c.ModifyVpcEndpointServiceConfigurationRequest(input) + return out, req.Send() +} + +// ModifyVpcEndpointServiceConfigurationWithContext is the same as ModifyVpcEndpointServiceConfiguration with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpcEndpointServiceConfiguration for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpcEndpointServiceConfigurationWithContext(ctx aws.Context, input *ModifyVpcEndpointServiceConfigurationInput, opts ...request.Option) (*ModifyVpcEndpointServiceConfigurationOutput, error) { + req, out := c.ModifyVpcEndpointServiceConfigurationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpcEndpointServicePermissions = "ModifyVpcEndpointServicePermissions" + +// ModifyVpcEndpointServicePermissionsRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpcEndpointServicePermissions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpcEndpointServicePermissions for more information on using the ModifyVpcEndpointServicePermissions +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpcEndpointServicePermissionsRequest method. +// req, resp := client.ModifyVpcEndpointServicePermissionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServicePermissions +func (c *EC2) ModifyVpcEndpointServicePermissionsRequest(input *ModifyVpcEndpointServicePermissionsInput) (req *request.Request, output *ModifyVpcEndpointServicePermissionsOutput) { + op := &request.Operation{ + Name: opModifyVpcEndpointServicePermissions, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpcEndpointServicePermissionsInput{} + } + + output = &ModifyVpcEndpointServicePermissionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpcEndpointServicePermissions API operation for Amazon Elastic Compute Cloud. +// +// Modifies the permissions for your VPC endpoint service (https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html). +// You can add or remove permissions for service consumers (IAM users, IAM roles, +// and AWS accounts) to connect to your endpoint service. +// +// If you grant permissions to all principals, the service is public. Any users +// who know the name of a public service can send a request to attach an endpoint. +// If the service does not require manual approval, attachments are automatically +// approved. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpcEndpointServicePermissions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServicePermissions +func (c *EC2) ModifyVpcEndpointServicePermissions(input *ModifyVpcEndpointServicePermissionsInput) (*ModifyVpcEndpointServicePermissionsOutput, error) { + req, out := c.ModifyVpcEndpointServicePermissionsRequest(input) + return out, req.Send() +} + +// ModifyVpcEndpointServicePermissionsWithContext is the same as ModifyVpcEndpointServicePermissions with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpcEndpointServicePermissions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpcEndpointServicePermissionsWithContext(ctx aws.Context, input *ModifyVpcEndpointServicePermissionsInput, opts ...request.Option) (*ModifyVpcEndpointServicePermissionsOutput, error) { + req, out := c.ModifyVpcEndpointServicePermissionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpcPeeringConnectionOptions = "ModifyVpcPeeringConnectionOptions" + +// ModifyVpcPeeringConnectionOptionsRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpcPeeringConnectionOptions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpcPeeringConnectionOptions for more information on using the ModifyVpcPeeringConnectionOptions +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpcPeeringConnectionOptionsRequest method. +// req, resp := client.ModifyVpcPeeringConnectionOptionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptions +func (c *EC2) ModifyVpcPeeringConnectionOptionsRequest(input *ModifyVpcPeeringConnectionOptionsInput) (req *request.Request, output *ModifyVpcPeeringConnectionOptionsOutput) { + op := &request.Operation{ + Name: opModifyVpcPeeringConnectionOptions, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpcPeeringConnectionOptionsInput{} + } + + output = &ModifyVpcPeeringConnectionOptionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpcPeeringConnectionOptions API operation for Amazon Elastic Compute Cloud. +// +// Modifies the VPC peering connection options on one side of a VPC peering +// connection. You can do the following: +// +// * Enable/disable communication over the peering connection between an +// EC2-Classic instance that's linked to your VPC (using ClassicLink) and +// instances in the peer VPC. +// +// * Enable/disable communication over the peering connection between instances +// in your VPC and an EC2-Classic instance that's linked to the peer VPC. +// +// * Enable/disable the ability to resolve public DNS hostnames to private +// IP addresses when queried from instances in the peer VPC. +// +// If the peered VPCs are in the same AWS account, you can enable DNS resolution +// for queries from the local VPC. This ensures that queries from the local +// VPC resolve to private IP addresses in the peer VPC. This option is not available +// if the peered VPCs are in different AWS accounts or different Regions. For +// peered VPCs in different AWS accounts, each AWS account owner must initiate +// a separate request to modify the peering connection options. For inter-region +// peering connections, you must use the Region for the requester VPC to modify +// the requester VPC peering options and the Region for the accepter VPC to +// modify the accepter VPC peering options. To verify which VPCs are the accepter +// and the requester for a VPC peering connection, use the DescribeVpcPeeringConnections +// command. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpcPeeringConnectionOptions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptions +func (c *EC2) ModifyVpcPeeringConnectionOptions(input *ModifyVpcPeeringConnectionOptionsInput) (*ModifyVpcPeeringConnectionOptionsOutput, error) { + req, out := c.ModifyVpcPeeringConnectionOptionsRequest(input) + return out, req.Send() +} + +// ModifyVpcPeeringConnectionOptionsWithContext is the same as ModifyVpcPeeringConnectionOptions with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpcPeeringConnectionOptions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpcPeeringConnectionOptionsWithContext(ctx aws.Context, input *ModifyVpcPeeringConnectionOptionsInput, opts ...request.Option) (*ModifyVpcPeeringConnectionOptionsOutput, error) { + req, out := c.ModifyVpcPeeringConnectionOptionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpcTenancy = "ModifyVpcTenancy" + +// ModifyVpcTenancyRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpcTenancy operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpcTenancy for more information on using the ModifyVpcTenancy +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpcTenancyRequest method. +// req, resp := client.ModifyVpcTenancyRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcTenancy +func (c *EC2) ModifyVpcTenancyRequest(input *ModifyVpcTenancyInput) (req *request.Request, output *ModifyVpcTenancyOutput) { + op := &request.Operation{ + Name: opModifyVpcTenancy, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpcTenancyInput{} + } + + output = &ModifyVpcTenancyOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpcTenancy API operation for Amazon Elastic Compute Cloud. +// +// Modifies the instance tenancy attribute of the specified VPC. You can change +// the instance tenancy attribute of a VPC to default only. You cannot change +// the instance tenancy attribute to dedicated. +// +// After you modify the tenancy of the VPC, any new instances that you launch +// into the VPC have a tenancy of default, unless you specify otherwise during +// launch. The tenancy of any existing instances in the VPC is not affected. +// +// For more information, see Dedicated Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpcTenancy for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcTenancy +func (c *EC2) ModifyVpcTenancy(input *ModifyVpcTenancyInput) (*ModifyVpcTenancyOutput, error) { + req, out := c.ModifyVpcTenancyRequest(input) + return out, req.Send() +} + +// ModifyVpcTenancyWithContext is the same as ModifyVpcTenancy with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpcTenancy for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpcTenancyWithContext(ctx aws.Context, input *ModifyVpcTenancyInput, opts ...request.Option) (*ModifyVpcTenancyOutput, error) { + req, out := c.ModifyVpcTenancyRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpnConnection = "ModifyVpnConnection" + +// ModifyVpnConnectionRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpnConnection operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpnConnection for more information on using the ModifyVpnConnection +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpnConnectionRequest method. +// req, resp := client.ModifyVpnConnectionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnConnection +func (c *EC2) ModifyVpnConnectionRequest(input *ModifyVpnConnectionInput) (req *request.Request, output *ModifyVpnConnectionOutput) { + op := &request.Operation{ + Name: opModifyVpnConnection, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpnConnectionInput{} + } + + output = &ModifyVpnConnectionOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpnConnection API operation for Amazon Elastic Compute Cloud. +// +// Modifies the target gateway of an AWS Site-to-Site VPN connection. The following +// migration options are available: +// +// * An existing virtual private gateway to a new virtual private gateway +// +// * An existing virtual private gateway to a transit gateway +// +// * An existing transit gateway to a new transit gateway +// +// * An existing transit gateway to a virtual private gateway +// +// Before you perform the migration to the new gateway, you must configure the +// new gateway. Use CreateVpnGateway to create a virtual private gateway, or +// CreateTransitGateway to create a transit gateway. +// +// This step is required when you migrate from a virtual private gateway with +// static routes to a transit gateway. +// +// You must delete the static routes before you migrate to the new gateway. +// +// Keep a copy of the static route before you delete it. You will need to add +// back these routes to the transit gateway after the VPN connection migration +// is complete. +// +// After you migrate to the new gateway, you might need to modify your VPC route +// table. Use CreateRoute and DeleteRoute to make the changes described in VPN +// Gateway Target Modification Required VPC Route Table Updates (https://docs.aws.amazon.com/vpn/latest/s2svpn/modify-vpn-target.html#step-update-routing) +// in the AWS Site-to-Site VPN User Guide. +// +// When the new gateway is a transit gateway, modify the transit gateway route +// table to allow traffic between the VPC and the AWS Site-to-Site VPN connection. +// Use CreateTransitGatewayRoute to add the routes. +// +// If you deleted VPN static routes, you must add the static routes to the transit +// gateway route table. +// +// After you perform this operation, the AWS VPN endpoint's IP addresses on +// the AWS side and the tunnel options remain intact. Your s2slong; connection +// will be temporarily unavailable for approximately 10 minutes while we provision +// the new endpoints +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpnConnection for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnConnection +func (c *EC2) ModifyVpnConnection(input *ModifyVpnConnectionInput) (*ModifyVpnConnectionOutput, error) { + req, out := c.ModifyVpnConnectionRequest(input) + return out, req.Send() +} + +// ModifyVpnConnectionWithContext is the same as ModifyVpnConnection with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpnConnection for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpnConnectionWithContext(ctx aws.Context, input *ModifyVpnConnectionInput, opts ...request.Option) (*ModifyVpnConnectionOutput, error) { + req, out := c.ModifyVpnConnectionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpnTunnelCertificate = "ModifyVpnTunnelCertificate" + +// ModifyVpnTunnelCertificateRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpnTunnelCertificate operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpnTunnelCertificate for more information on using the ModifyVpnTunnelCertificate +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpnTunnelCertificateRequest method. +// req, resp := client.ModifyVpnTunnelCertificateRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelCertificate +func (c *EC2) ModifyVpnTunnelCertificateRequest(input *ModifyVpnTunnelCertificateInput) (req *request.Request, output *ModifyVpnTunnelCertificateOutput) { + op := &request.Operation{ + Name: opModifyVpnTunnelCertificate, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpnTunnelCertificateInput{} + } + + output = &ModifyVpnTunnelCertificateOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpnTunnelCertificate API operation for Amazon Elastic Compute Cloud. +// +// Modifies the VPN tunnel endpoint certificate. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpnTunnelCertificate for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelCertificate +func (c *EC2) ModifyVpnTunnelCertificate(input *ModifyVpnTunnelCertificateInput) (*ModifyVpnTunnelCertificateOutput, error) { + req, out := c.ModifyVpnTunnelCertificateRequest(input) + return out, req.Send() +} + +// ModifyVpnTunnelCertificateWithContext is the same as ModifyVpnTunnelCertificate with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpnTunnelCertificate for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpnTunnelCertificateWithContext(ctx aws.Context, input *ModifyVpnTunnelCertificateInput, opts ...request.Option) (*ModifyVpnTunnelCertificateOutput, error) { + req, out := c.ModifyVpnTunnelCertificateRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyVpnTunnelOptions = "ModifyVpnTunnelOptions" + +// ModifyVpnTunnelOptionsRequest generates a "aws/request.Request" representing the +// client's request for the ModifyVpnTunnelOptions operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyVpnTunnelOptions for more information on using the ModifyVpnTunnelOptions +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyVpnTunnelOptionsRequest method. +// req, resp := client.ModifyVpnTunnelOptionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelOptions +func (c *EC2) ModifyVpnTunnelOptionsRequest(input *ModifyVpnTunnelOptionsInput) (req *request.Request, output *ModifyVpnTunnelOptionsOutput) { + op := &request.Operation{ + Name: opModifyVpnTunnelOptions, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyVpnTunnelOptionsInput{} + } + + output = &ModifyVpnTunnelOptionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyVpnTunnelOptions API operation for Amazon Elastic Compute Cloud. +// +// Modifies the options for a VPN tunnel in an AWS Site-to-Site VPN connection. +// You can modify multiple options for a tunnel in a single request, but you +// can only modify one tunnel at a time. For more information, see Site-to-Site +// VPN Tunnel Options for Your Site-to-Site VPN Connection (https://docs.aws.amazon.com/vpn/latest/s2svpn/VPNTunnels.html) +// in the AWS Site-to-Site VPN User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ModifyVpnTunnelOptions for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelOptions +func (c *EC2) ModifyVpnTunnelOptions(input *ModifyVpnTunnelOptionsInput) (*ModifyVpnTunnelOptionsOutput, error) { + req, out := c.ModifyVpnTunnelOptionsRequest(input) + return out, req.Send() +} + +// ModifyVpnTunnelOptionsWithContext is the same as ModifyVpnTunnelOptions with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyVpnTunnelOptions for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ModifyVpnTunnelOptionsWithContext(ctx aws.Context, input *ModifyVpnTunnelOptionsInput, opts ...request.Option) (*ModifyVpnTunnelOptionsOutput, error) { + req, out := c.ModifyVpnTunnelOptionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opMonitorInstances = "MonitorInstances" + +// MonitorInstancesRequest generates a "aws/request.Request" representing the +// client's request for the MonitorInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See MonitorInstances for more information on using the MonitorInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the MonitorInstancesRequest method. +// req, resp := client.MonitorInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstances +func (c *EC2) MonitorInstancesRequest(input *MonitorInstancesInput) (req *request.Request, output *MonitorInstancesOutput) { + op := &request.Operation{ + Name: opMonitorInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &MonitorInstancesInput{} + } + + output = &MonitorInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// MonitorInstances API operation for Amazon Elastic Compute Cloud. +// +// Enables detailed monitoring for a running instance. Otherwise, basic monitoring +// is enabled. For more information, see Monitoring Your Instances and Volumes +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// To disable detailed monitoring, see . +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation MonitorInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstances +func (c *EC2) MonitorInstances(input *MonitorInstancesInput) (*MonitorInstancesOutput, error) { + req, out := c.MonitorInstancesRequest(input) + return out, req.Send() +} + +// MonitorInstancesWithContext is the same as MonitorInstances with the addition of +// the ability to pass a context and additional request options. +// +// See MonitorInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) MonitorInstancesWithContext(ctx aws.Context, input *MonitorInstancesInput, opts ...request.Option) (*MonitorInstancesOutput, error) { + req, out := c.MonitorInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opMoveAddressToVpc = "MoveAddressToVpc" + +// MoveAddressToVpcRequest generates a "aws/request.Request" representing the +// client's request for the MoveAddressToVpc operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See MoveAddressToVpc for more information on using the MoveAddressToVpc +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the MoveAddressToVpcRequest method. +// req, resp := client.MoveAddressToVpcRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpc +func (c *EC2) MoveAddressToVpcRequest(input *MoveAddressToVpcInput) (req *request.Request, output *MoveAddressToVpcOutput) { + op := &request.Operation{ + Name: opMoveAddressToVpc, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &MoveAddressToVpcInput{} + } + + output = &MoveAddressToVpcOutput{} + req = c.newRequest(op, input, output) + return +} + +// MoveAddressToVpc API operation for Amazon Elastic Compute Cloud. +// +// Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC +// platform. The Elastic IP address must be allocated to your account for more +// than 24 hours, and it must not be associated with an instance. After the +// Elastic IP address is moved, it is no longer available for use in the EC2-Classic +// platform, unless you move it back using the RestoreAddressToClassic request. +// You cannot move an Elastic IP address that was originally allocated for use +// in the EC2-VPC platform to the EC2-Classic platform. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation MoveAddressToVpc for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpc +func (c *EC2) MoveAddressToVpc(input *MoveAddressToVpcInput) (*MoveAddressToVpcOutput, error) { + req, out := c.MoveAddressToVpcRequest(input) + return out, req.Send() +} + +// MoveAddressToVpcWithContext is the same as MoveAddressToVpc with the addition of +// the ability to pass a context and additional request options. +// +// See MoveAddressToVpc for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) MoveAddressToVpcWithContext(ctx aws.Context, input *MoveAddressToVpcInput, opts ...request.Option) (*MoveAddressToVpcOutput, error) { + req, out := c.MoveAddressToVpcRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opProvisionByoipCidr = "ProvisionByoipCidr" + +// ProvisionByoipCidrRequest generates a "aws/request.Request" representing the +// client's request for the ProvisionByoipCidr operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ProvisionByoipCidr for more information on using the ProvisionByoipCidr +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ProvisionByoipCidrRequest method. +// req, resp := client.ProvisionByoipCidrRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionByoipCidr +func (c *EC2) ProvisionByoipCidrRequest(input *ProvisionByoipCidrInput) (req *request.Request, output *ProvisionByoipCidrOutput) { + op := &request.Operation{ + Name: opProvisionByoipCidr, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ProvisionByoipCidrInput{} + } + + output = &ProvisionByoipCidrOutput{} + req = c.newRequest(op, input, output) + return +} + +// ProvisionByoipCidr API operation for Amazon Elastic Compute Cloud. +// +// Provisions an address range for use with your AWS resources through bring +// your own IP addresses (BYOIP) and creates a corresponding address pool. After +// the address range is provisioned, it is ready to be advertised using AdvertiseByoipCidr. +// +// AWS verifies that you own the address range and are authorized to advertise +// it. You must ensure that the address range is registered to you and that +// you created an RPKI ROA to authorize Amazon ASNs 16509 and 14618 to advertise +// the address range. For more information, see Bring Your Own IP Addresses +// (BYOIP) (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Provisioning an address range is an asynchronous operation, so the call returns +// immediately, but the address range is not ready to use until its status changes +// from pending-provision to provisioned. To monitor the status of an address +// range, use DescribeByoipCidrs. To allocate an Elastic IP address from your +// address pool, use AllocateAddress with either the specific address from the +// address pool or the ID of the address pool. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ProvisionByoipCidr for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionByoipCidr +func (c *EC2) ProvisionByoipCidr(input *ProvisionByoipCidrInput) (*ProvisionByoipCidrOutput, error) { + req, out := c.ProvisionByoipCidrRequest(input) + return out, req.Send() +} + +// ProvisionByoipCidrWithContext is the same as ProvisionByoipCidr with the addition of +// the ability to pass a context and additional request options. +// +// See ProvisionByoipCidr for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ProvisionByoipCidrWithContext(ctx aws.Context, input *ProvisionByoipCidrInput, opts ...request.Option) (*ProvisionByoipCidrOutput, error) { + req, out := c.ProvisionByoipCidrRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPurchaseHostReservation = "PurchaseHostReservation" + +// PurchaseHostReservationRequest generates a "aws/request.Request" representing the +// client's request for the PurchaseHostReservation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PurchaseHostReservation for more information on using the PurchaseHostReservation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PurchaseHostReservationRequest method. +// req, resp := client.PurchaseHostReservationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservation +func (c *EC2) PurchaseHostReservationRequest(input *PurchaseHostReservationInput) (req *request.Request, output *PurchaseHostReservationOutput) { + op := &request.Operation{ + Name: opPurchaseHostReservation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &PurchaseHostReservationInput{} + } + + output = &PurchaseHostReservationOutput{} + req = c.newRequest(op, input, output) + return +} + +// PurchaseHostReservation API operation for Amazon Elastic Compute Cloud. +// +// Purchase a reservation with configurations that match those of your Dedicated +// Host. You must have active Dedicated Hosts in your account before you purchase +// a reservation. This action results in the specified reservation being purchased +// and charged to your account. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation PurchaseHostReservation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservation +func (c *EC2) PurchaseHostReservation(input *PurchaseHostReservationInput) (*PurchaseHostReservationOutput, error) { + req, out := c.PurchaseHostReservationRequest(input) + return out, req.Send() +} + +// PurchaseHostReservationWithContext is the same as PurchaseHostReservation with the addition of +// the ability to pass a context and additional request options. +// +// See PurchaseHostReservation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) PurchaseHostReservationWithContext(ctx aws.Context, input *PurchaseHostReservationInput, opts ...request.Option) (*PurchaseHostReservationOutput, error) { + req, out := c.PurchaseHostReservationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPurchaseReservedInstancesOffering = "PurchaseReservedInstancesOffering" + +// PurchaseReservedInstancesOfferingRequest generates a "aws/request.Request" representing the +// client's request for the PurchaseReservedInstancesOffering operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PurchaseReservedInstancesOffering for more information on using the PurchaseReservedInstancesOffering +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PurchaseReservedInstancesOfferingRequest method. +// req, resp := client.PurchaseReservedInstancesOfferingRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOffering +func (c *EC2) PurchaseReservedInstancesOfferingRequest(input *PurchaseReservedInstancesOfferingInput) (req *request.Request, output *PurchaseReservedInstancesOfferingOutput) { + op := &request.Operation{ + Name: opPurchaseReservedInstancesOffering, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &PurchaseReservedInstancesOfferingInput{} + } + + output = &PurchaseReservedInstancesOfferingOutput{} + req = c.newRequest(op, input, output) + return +} + +// PurchaseReservedInstancesOffering API operation for Amazon Elastic Compute Cloud. +// +// Purchases a Reserved Instance for use with your account. With Reserved Instances, +// you pay a lower hourly rate compared to On-Demand instance pricing. +// +// Use DescribeReservedInstancesOfferings to get a list of Reserved Instance +// offerings that match your specifications. After you've purchased a Reserved +// Instance, you can check for your new Reserved Instance with DescribeReservedInstances. +// +// To queue a purchase for a future date and time, specify a purchase time. +// If you do not specify a purchase time, the default is the current time. +// +// For more information, see Reserved Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html) +// and Reserved Instance Marketplace (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation PurchaseReservedInstancesOffering for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOffering +func (c *EC2) PurchaseReservedInstancesOffering(input *PurchaseReservedInstancesOfferingInput) (*PurchaseReservedInstancesOfferingOutput, error) { + req, out := c.PurchaseReservedInstancesOfferingRequest(input) + return out, req.Send() +} + +// PurchaseReservedInstancesOfferingWithContext is the same as PurchaseReservedInstancesOffering with the addition of +// the ability to pass a context and additional request options. +// +// See PurchaseReservedInstancesOffering for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) PurchaseReservedInstancesOfferingWithContext(ctx aws.Context, input *PurchaseReservedInstancesOfferingInput, opts ...request.Option) (*PurchaseReservedInstancesOfferingOutput, error) { + req, out := c.PurchaseReservedInstancesOfferingRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opPurchaseScheduledInstances = "PurchaseScheduledInstances" + +// PurchaseScheduledInstancesRequest generates a "aws/request.Request" representing the +// client's request for the PurchaseScheduledInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See PurchaseScheduledInstances for more information on using the PurchaseScheduledInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the PurchaseScheduledInstancesRequest method. +// req, resp := client.PurchaseScheduledInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstances +func (c *EC2) PurchaseScheduledInstancesRequest(input *PurchaseScheduledInstancesInput) (req *request.Request, output *PurchaseScheduledInstancesOutput) { + op := &request.Operation{ + Name: opPurchaseScheduledInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &PurchaseScheduledInstancesInput{} + } + + output = &PurchaseScheduledInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// PurchaseScheduledInstances API operation for Amazon Elastic Compute Cloud. +// +// Purchases the Scheduled Instances with the specified schedule. +// +// Scheduled Instances enable you to purchase Amazon EC2 compute capacity by +// the hour for a one-year term. Before you can purchase a Scheduled Instance, +// you must call DescribeScheduledInstanceAvailability to check for available +// schedules and obtain a purchase token. After you purchase a Scheduled Instance, +// you must call RunScheduledInstances during each scheduled time period. +// +// After you purchase a Scheduled Instance, you can't cancel, modify, or resell +// your purchase. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation PurchaseScheduledInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstances +func (c *EC2) PurchaseScheduledInstances(input *PurchaseScheduledInstancesInput) (*PurchaseScheduledInstancesOutput, error) { + req, out := c.PurchaseScheduledInstancesRequest(input) + return out, req.Send() +} + +// PurchaseScheduledInstancesWithContext is the same as PurchaseScheduledInstances with the addition of +// the ability to pass a context and additional request options. +// +// See PurchaseScheduledInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) PurchaseScheduledInstancesWithContext(ctx aws.Context, input *PurchaseScheduledInstancesInput, opts ...request.Option) (*PurchaseScheduledInstancesOutput, error) { + req, out := c.PurchaseScheduledInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRebootInstances = "RebootInstances" + +// RebootInstancesRequest generates a "aws/request.Request" representing the +// client's request for the RebootInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RebootInstances for more information on using the RebootInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RebootInstancesRequest method. +// req, resp := client.RebootInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstances +func (c *EC2) RebootInstancesRequest(input *RebootInstancesInput) (req *request.Request, output *RebootInstancesOutput) { + op := &request.Operation{ + Name: opRebootInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RebootInstancesInput{} + } + + output = &RebootInstancesOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// RebootInstances API operation for Amazon Elastic Compute Cloud. +// +// Requests a reboot of the specified instances. This operation is asynchronous; +// it only queues a request to reboot the specified instances. The operation +// succeeds if the instances are valid and belong to you. Requests to reboot +// terminated instances are ignored. +// +// If an instance does not cleanly shut down within four minutes, Amazon EC2 +// performs a hard reboot. +// +// For more information about troubleshooting, see Getting Console Output and +// Rebooting Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RebootInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstances +func (c *EC2) RebootInstances(input *RebootInstancesInput) (*RebootInstancesOutput, error) { + req, out := c.RebootInstancesRequest(input) + return out, req.Send() +} + +// RebootInstancesWithContext is the same as RebootInstances with the addition of +// the ability to pass a context and additional request options. +// +// See RebootInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RebootInstancesWithContext(ctx aws.Context, input *RebootInstancesInput, opts ...request.Option) (*RebootInstancesOutput, error) { + req, out := c.RebootInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRegisterImage = "RegisterImage" + +// RegisterImageRequest generates a "aws/request.Request" representing the +// client's request for the RegisterImage operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RegisterImage for more information on using the RegisterImage +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RegisterImageRequest method. +// req, resp := client.RegisterImageRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImage +func (c *EC2) RegisterImageRequest(input *RegisterImageInput) (req *request.Request, output *RegisterImageOutput) { + op := &request.Operation{ + Name: opRegisterImage, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RegisterImageInput{} + } + + output = &RegisterImageOutput{} + req = c.newRequest(op, input, output) + return +} + +// RegisterImage API operation for Amazon Elastic Compute Cloud. +// +// Registers an AMI. When you're creating an AMI, this is the final step you +// must complete before you can launch an instance from the AMI. For more information +// about creating AMIs, see Creating Your Own AMIs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// For Amazon EBS-backed instances, CreateImage creates and registers the AMI +// in a single request, so you don't have to register the AMI yourself. +// +// You can also use RegisterImage to create an Amazon EBS-backed Linux AMI from +// a snapshot of a root device volume. You specify the snapshot using the block +// device mapping. For more information, see Launching a Linux Instance from +// a Backup (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-launch-snapshot.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// You can't register an image where a secondary (non-root) snapshot has AWS +// Marketplace product codes. +// +// Windows and some Linux distributions, such as Red Hat Enterprise Linux (RHEL) +// and SUSE Linux Enterprise Server (SLES), use the EC2 billing product code +// associated with an AMI to verify the subscription status for package updates. +// To create a new AMI for operating systems that require a billing product +// code, do the following: +// +// Launch an instance from an existing AMI with that billing product code. +// +// Customize the instance. +// +// Create a new AMI from the instance using CreateImage to preserve the billing +// product code association. +// +// If you purchase a Reserved Instance to apply to an On-Demand Instance that +// was launched from an AMI with a billing product code, make sure that the +// Reserved Instance has the matching billing product code. If you purchase +// a Reserved Instance without the matching billing product code, the Reserved +// Instance will not be applied to the On-Demand Instance. +// +// If needed, you can deregister an AMI at any time. Any modifications you make +// to an AMI backed by an instance store volume invalidates its registration. +// If you make changes to an image, deregister the previous image and register +// the new image. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RegisterImage for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImage +func (c *EC2) RegisterImage(input *RegisterImageInput) (*RegisterImageOutput, error) { + req, out := c.RegisterImageRequest(input) + return out, req.Send() +} + +// RegisterImageWithContext is the same as RegisterImage with the addition of +// the ability to pass a context and additional request options. +// +// See RegisterImage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RegisterImageWithContext(ctx aws.Context, input *RegisterImageInput, opts ...request.Option) (*RegisterImageOutput, error) { + req, out := c.RegisterImageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRejectTransitGatewayVpcAttachment = "RejectTransitGatewayVpcAttachment" + +// RejectTransitGatewayVpcAttachmentRequest generates a "aws/request.Request" representing the +// client's request for the RejectTransitGatewayVpcAttachment operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RejectTransitGatewayVpcAttachment for more information on using the RejectTransitGatewayVpcAttachment +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RejectTransitGatewayVpcAttachmentRequest method. +// req, resp := client.RejectTransitGatewayVpcAttachmentRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayVpcAttachment +func (c *EC2) RejectTransitGatewayVpcAttachmentRequest(input *RejectTransitGatewayVpcAttachmentInput) (req *request.Request, output *RejectTransitGatewayVpcAttachmentOutput) { + op := &request.Operation{ + Name: opRejectTransitGatewayVpcAttachment, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RejectTransitGatewayVpcAttachmentInput{} + } + + output = &RejectTransitGatewayVpcAttachmentOutput{} + req = c.newRequest(op, input, output) + return +} + +// RejectTransitGatewayVpcAttachment API operation for Amazon Elastic Compute Cloud. +// +// Rejects a request to attach a VPC to a transit gateway. +// +// The VPC attachment must be in the pendingAcceptance state. Use DescribeTransitGatewayVpcAttachments +// to view your pending VPC attachment requests. Use AcceptTransitGatewayVpcAttachment +// to accept a VPC attachment request. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RejectTransitGatewayVpcAttachment for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayVpcAttachment +func (c *EC2) RejectTransitGatewayVpcAttachment(input *RejectTransitGatewayVpcAttachmentInput) (*RejectTransitGatewayVpcAttachmentOutput, error) { + req, out := c.RejectTransitGatewayVpcAttachmentRequest(input) + return out, req.Send() +} + +// RejectTransitGatewayVpcAttachmentWithContext is the same as RejectTransitGatewayVpcAttachment with the addition of +// the ability to pass a context and additional request options. +// +// See RejectTransitGatewayVpcAttachment for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RejectTransitGatewayVpcAttachmentWithContext(ctx aws.Context, input *RejectTransitGatewayVpcAttachmentInput, opts ...request.Option) (*RejectTransitGatewayVpcAttachmentOutput, error) { + req, out := c.RejectTransitGatewayVpcAttachmentRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRejectVpcEndpointConnections = "RejectVpcEndpointConnections" + +// RejectVpcEndpointConnectionsRequest generates a "aws/request.Request" representing the +// client's request for the RejectVpcEndpointConnections operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RejectVpcEndpointConnections for more information on using the RejectVpcEndpointConnections +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RejectVpcEndpointConnectionsRequest method. +// req, resp := client.RejectVpcEndpointConnectionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcEndpointConnections +func (c *EC2) RejectVpcEndpointConnectionsRequest(input *RejectVpcEndpointConnectionsInput) (req *request.Request, output *RejectVpcEndpointConnectionsOutput) { + op := &request.Operation{ + Name: opRejectVpcEndpointConnections, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RejectVpcEndpointConnectionsInput{} + } + + output = &RejectVpcEndpointConnectionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// RejectVpcEndpointConnections API operation for Amazon Elastic Compute Cloud. +// +// Rejects one or more VPC endpoint connection requests to your VPC endpoint +// service. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RejectVpcEndpointConnections for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcEndpointConnections +func (c *EC2) RejectVpcEndpointConnections(input *RejectVpcEndpointConnectionsInput) (*RejectVpcEndpointConnectionsOutput, error) { + req, out := c.RejectVpcEndpointConnectionsRequest(input) + return out, req.Send() +} + +// RejectVpcEndpointConnectionsWithContext is the same as RejectVpcEndpointConnections with the addition of +// the ability to pass a context and additional request options. +// +// See RejectVpcEndpointConnections for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RejectVpcEndpointConnectionsWithContext(ctx aws.Context, input *RejectVpcEndpointConnectionsInput, opts ...request.Option) (*RejectVpcEndpointConnectionsOutput, error) { + req, out := c.RejectVpcEndpointConnectionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRejectVpcPeeringConnection = "RejectVpcPeeringConnection" + +// RejectVpcPeeringConnectionRequest generates a "aws/request.Request" representing the +// client's request for the RejectVpcPeeringConnection operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RejectVpcPeeringConnection for more information on using the RejectVpcPeeringConnection +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RejectVpcPeeringConnectionRequest method. +// req, resp := client.RejectVpcPeeringConnectionRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnection +func (c *EC2) RejectVpcPeeringConnectionRequest(input *RejectVpcPeeringConnectionInput) (req *request.Request, output *RejectVpcPeeringConnectionOutput) { + op := &request.Operation{ + Name: opRejectVpcPeeringConnection, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RejectVpcPeeringConnectionInput{} + } + + output = &RejectVpcPeeringConnectionOutput{} + req = c.newRequest(op, input, output) + return +} + +// RejectVpcPeeringConnection API operation for Amazon Elastic Compute Cloud. +// +// Rejects a VPC peering connection request. The VPC peering connection must +// be in the pending-acceptance state. Use the DescribeVpcPeeringConnections +// request to view your outstanding VPC peering connection requests. To delete +// an active VPC peering connection, or to delete a VPC peering connection request +// that you initiated, use DeleteVpcPeeringConnection. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RejectVpcPeeringConnection for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnection +func (c *EC2) RejectVpcPeeringConnection(input *RejectVpcPeeringConnectionInput) (*RejectVpcPeeringConnectionOutput, error) { + req, out := c.RejectVpcPeeringConnectionRequest(input) + return out, req.Send() +} + +// RejectVpcPeeringConnectionWithContext is the same as RejectVpcPeeringConnection with the addition of +// the ability to pass a context and additional request options. +// +// See RejectVpcPeeringConnection for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RejectVpcPeeringConnectionWithContext(ctx aws.Context, input *RejectVpcPeeringConnectionInput, opts ...request.Option) (*RejectVpcPeeringConnectionOutput, error) { + req, out := c.RejectVpcPeeringConnectionRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReleaseAddress = "ReleaseAddress" + +// ReleaseAddressRequest generates a "aws/request.Request" representing the +// client's request for the ReleaseAddress operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReleaseAddress for more information on using the ReleaseAddress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReleaseAddressRequest method. +// req, resp := client.ReleaseAddressRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddress +func (c *EC2) ReleaseAddressRequest(input *ReleaseAddressInput) (req *request.Request, output *ReleaseAddressOutput) { + op := &request.Operation{ + Name: opReleaseAddress, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReleaseAddressInput{} + } + + output = &ReleaseAddressOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ReleaseAddress API operation for Amazon Elastic Compute Cloud. +// +// Releases the specified Elastic IP address. +// +// [EC2-Classic, default VPC] Releasing an Elastic IP address automatically +// disassociates it from any instance that it's associated with. To disassociate +// an Elastic IP address without releasing it, use DisassociateAddress. +// +// [Nondefault VPC] You must use DisassociateAddress to disassociate the Elastic +// IP address before you can release it. Otherwise, Amazon EC2 returns an error +// (InvalidIPAddress.InUse). +// +// After releasing an Elastic IP address, it is released to the IP address pool. +// Be sure to update your DNS records and any servers or devices that communicate +// with the address. If you attempt to release an Elastic IP address that you +// already released, you'll get an AuthFailure error if the address is already +// allocated to another AWS account. +// +// [EC2-VPC] After you release an Elastic IP address for use in a VPC, you might +// be able to recover it. For more information, see AllocateAddress. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReleaseAddress for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddress +func (c *EC2) ReleaseAddress(input *ReleaseAddressInput) (*ReleaseAddressOutput, error) { + req, out := c.ReleaseAddressRequest(input) + return out, req.Send() +} + +// ReleaseAddressWithContext is the same as ReleaseAddress with the addition of +// the ability to pass a context and additional request options. +// +// See ReleaseAddress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReleaseAddressWithContext(ctx aws.Context, input *ReleaseAddressInput, opts ...request.Option) (*ReleaseAddressOutput, error) { + req, out := c.ReleaseAddressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReleaseHosts = "ReleaseHosts" + +// ReleaseHostsRequest generates a "aws/request.Request" representing the +// client's request for the ReleaseHosts operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReleaseHosts for more information on using the ReleaseHosts +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReleaseHostsRequest method. +// req, resp := client.ReleaseHostsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHosts +func (c *EC2) ReleaseHostsRequest(input *ReleaseHostsInput) (req *request.Request, output *ReleaseHostsOutput) { + op := &request.Operation{ + Name: opReleaseHosts, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReleaseHostsInput{} + } + + output = &ReleaseHostsOutput{} + req = c.newRequest(op, input, output) + return +} + +// ReleaseHosts API operation for Amazon Elastic Compute Cloud. +// +// When you no longer want to use an On-Demand Dedicated Host it can be released. +// On-Demand billing is stopped and the host goes into released state. The host +// ID of Dedicated Hosts that have been released can no longer be specified +// in another request, for example, to modify the host. You must stop or terminate +// all instances on a host before it can be released. +// +// When Dedicated Hosts are released, it may take some time for them to stop +// counting toward your limit and you may receive capacity errors when trying +// to allocate new Dedicated Hosts. Wait a few minutes and then try again. +// +// Released hosts still appear in a DescribeHosts response. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReleaseHosts for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHosts +func (c *EC2) ReleaseHosts(input *ReleaseHostsInput) (*ReleaseHostsOutput, error) { + req, out := c.ReleaseHostsRequest(input) + return out, req.Send() +} + +// ReleaseHostsWithContext is the same as ReleaseHosts with the addition of +// the ability to pass a context and additional request options. +// +// See ReleaseHosts for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReleaseHostsWithContext(ctx aws.Context, input *ReleaseHostsInput, opts ...request.Option) (*ReleaseHostsOutput, error) { + req, out := c.ReleaseHostsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReplaceIamInstanceProfileAssociation = "ReplaceIamInstanceProfileAssociation" + +// ReplaceIamInstanceProfileAssociationRequest generates a "aws/request.Request" representing the +// client's request for the ReplaceIamInstanceProfileAssociation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReplaceIamInstanceProfileAssociation for more information on using the ReplaceIamInstanceProfileAssociation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReplaceIamInstanceProfileAssociationRequest method. +// req, resp := client.ReplaceIamInstanceProfileAssociationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociation +func (c *EC2) ReplaceIamInstanceProfileAssociationRequest(input *ReplaceIamInstanceProfileAssociationInput) (req *request.Request, output *ReplaceIamInstanceProfileAssociationOutput) { + op := &request.Operation{ + Name: opReplaceIamInstanceProfileAssociation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReplaceIamInstanceProfileAssociationInput{} + } + + output = &ReplaceIamInstanceProfileAssociationOutput{} + req = c.newRequest(op, input, output) + return +} + +// ReplaceIamInstanceProfileAssociation API operation for Amazon Elastic Compute Cloud. +// +// Replaces an IAM instance profile for the specified running instance. You +// can use this action to change the IAM instance profile that's associated +// with an instance without having to disassociate the existing IAM instance +// profile first. +// +// Use DescribeIamInstanceProfileAssociations to get the association ID. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReplaceIamInstanceProfileAssociation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociation +func (c *EC2) ReplaceIamInstanceProfileAssociation(input *ReplaceIamInstanceProfileAssociationInput) (*ReplaceIamInstanceProfileAssociationOutput, error) { + req, out := c.ReplaceIamInstanceProfileAssociationRequest(input) + return out, req.Send() +} + +// ReplaceIamInstanceProfileAssociationWithContext is the same as ReplaceIamInstanceProfileAssociation with the addition of +// the ability to pass a context and additional request options. +// +// See ReplaceIamInstanceProfileAssociation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReplaceIamInstanceProfileAssociationWithContext(ctx aws.Context, input *ReplaceIamInstanceProfileAssociationInput, opts ...request.Option) (*ReplaceIamInstanceProfileAssociationOutput, error) { + req, out := c.ReplaceIamInstanceProfileAssociationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReplaceNetworkAclAssociation = "ReplaceNetworkAclAssociation" + +// ReplaceNetworkAclAssociationRequest generates a "aws/request.Request" representing the +// client's request for the ReplaceNetworkAclAssociation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReplaceNetworkAclAssociation for more information on using the ReplaceNetworkAclAssociation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReplaceNetworkAclAssociationRequest method. +// req, resp := client.ReplaceNetworkAclAssociationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociation +func (c *EC2) ReplaceNetworkAclAssociationRequest(input *ReplaceNetworkAclAssociationInput) (req *request.Request, output *ReplaceNetworkAclAssociationOutput) { + op := &request.Operation{ + Name: opReplaceNetworkAclAssociation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReplaceNetworkAclAssociationInput{} + } + + output = &ReplaceNetworkAclAssociationOutput{} + req = c.newRequest(op, input, output) + return +} + +// ReplaceNetworkAclAssociation API operation for Amazon Elastic Compute Cloud. +// +// Changes which network ACL a subnet is associated with. By default when you +// create a subnet, it's automatically associated with the default network ACL. +// For more information, see Network ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) +// in the Amazon Virtual Private Cloud User Guide. +// +// This is an idempotent operation. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReplaceNetworkAclAssociation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociation +func (c *EC2) ReplaceNetworkAclAssociation(input *ReplaceNetworkAclAssociationInput) (*ReplaceNetworkAclAssociationOutput, error) { + req, out := c.ReplaceNetworkAclAssociationRequest(input) + return out, req.Send() +} + +// ReplaceNetworkAclAssociationWithContext is the same as ReplaceNetworkAclAssociation with the addition of +// the ability to pass a context and additional request options. +// +// See ReplaceNetworkAclAssociation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReplaceNetworkAclAssociationWithContext(ctx aws.Context, input *ReplaceNetworkAclAssociationInput, opts ...request.Option) (*ReplaceNetworkAclAssociationOutput, error) { + req, out := c.ReplaceNetworkAclAssociationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReplaceNetworkAclEntry = "ReplaceNetworkAclEntry" + +// ReplaceNetworkAclEntryRequest generates a "aws/request.Request" representing the +// client's request for the ReplaceNetworkAclEntry operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReplaceNetworkAclEntry for more information on using the ReplaceNetworkAclEntry +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReplaceNetworkAclEntryRequest method. +// req, resp := client.ReplaceNetworkAclEntryRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntry +func (c *EC2) ReplaceNetworkAclEntryRequest(input *ReplaceNetworkAclEntryInput) (req *request.Request, output *ReplaceNetworkAclEntryOutput) { + op := &request.Operation{ + Name: opReplaceNetworkAclEntry, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReplaceNetworkAclEntryInput{} + } + + output = &ReplaceNetworkAclEntryOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ReplaceNetworkAclEntry API operation for Amazon Elastic Compute Cloud. +// +// Replaces an entry (rule) in a network ACL. For more information, see Network +// ACLs (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html) in +// the Amazon Virtual Private Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReplaceNetworkAclEntry for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntry +func (c *EC2) ReplaceNetworkAclEntry(input *ReplaceNetworkAclEntryInput) (*ReplaceNetworkAclEntryOutput, error) { + req, out := c.ReplaceNetworkAclEntryRequest(input) + return out, req.Send() +} + +// ReplaceNetworkAclEntryWithContext is the same as ReplaceNetworkAclEntry with the addition of +// the ability to pass a context and additional request options. +// +// See ReplaceNetworkAclEntry for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReplaceNetworkAclEntryWithContext(ctx aws.Context, input *ReplaceNetworkAclEntryInput, opts ...request.Option) (*ReplaceNetworkAclEntryOutput, error) { + req, out := c.ReplaceNetworkAclEntryRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReplaceRoute = "ReplaceRoute" + +// ReplaceRouteRequest generates a "aws/request.Request" representing the +// client's request for the ReplaceRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReplaceRoute for more information on using the ReplaceRoute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReplaceRouteRequest method. +// req, resp := client.ReplaceRouteRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRoute +func (c *EC2) ReplaceRouteRequest(input *ReplaceRouteInput) (req *request.Request, output *ReplaceRouteOutput) { + op := &request.Operation{ + Name: opReplaceRoute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReplaceRouteInput{} + } + + output = &ReplaceRouteOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ReplaceRoute API operation for Amazon Elastic Compute Cloud. +// +// Replaces an existing route within a route table in a VPC. You must provide +// only one of the following: internet gateway or virtual private gateway, NAT +// instance, NAT gateway, VPC peering connection, network interface, or egress-only +// internet gateway. +// +// For more information, see Route Tables (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) +// in the Amazon Virtual Private Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReplaceRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRoute +func (c *EC2) ReplaceRoute(input *ReplaceRouteInput) (*ReplaceRouteOutput, error) { + req, out := c.ReplaceRouteRequest(input) + return out, req.Send() +} + +// ReplaceRouteWithContext is the same as ReplaceRoute with the addition of +// the ability to pass a context and additional request options. +// +// See ReplaceRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReplaceRouteWithContext(ctx aws.Context, input *ReplaceRouteInput, opts ...request.Option) (*ReplaceRouteOutput, error) { + req, out := c.ReplaceRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReplaceRouteTableAssociation = "ReplaceRouteTableAssociation" + +// ReplaceRouteTableAssociationRequest generates a "aws/request.Request" representing the +// client's request for the ReplaceRouteTableAssociation operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReplaceRouteTableAssociation for more information on using the ReplaceRouteTableAssociation +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReplaceRouteTableAssociationRequest method. +// req, resp := client.ReplaceRouteTableAssociationRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociation +func (c *EC2) ReplaceRouteTableAssociationRequest(input *ReplaceRouteTableAssociationInput) (req *request.Request, output *ReplaceRouteTableAssociationOutput) { + op := &request.Operation{ + Name: opReplaceRouteTableAssociation, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReplaceRouteTableAssociationInput{} + } + + output = &ReplaceRouteTableAssociationOutput{} + req = c.newRequest(op, input, output) + return +} + +// ReplaceRouteTableAssociation API operation for Amazon Elastic Compute Cloud. +// +// Changes the route table associated with a given subnet in a VPC. After the +// operation completes, the subnet uses the routes in the new route table it's +// associated with. For more information about route tables, see Route Tables +// (https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html) +// in the Amazon Virtual Private Cloud User Guide. +// +// You can also use ReplaceRouteTableAssociation to change which table is the +// main route table in the VPC. You just specify the main route table's association +// ID and the route table to be the new main route table. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReplaceRouteTableAssociation for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociation +func (c *EC2) ReplaceRouteTableAssociation(input *ReplaceRouteTableAssociationInput) (*ReplaceRouteTableAssociationOutput, error) { + req, out := c.ReplaceRouteTableAssociationRequest(input) + return out, req.Send() +} + +// ReplaceRouteTableAssociationWithContext is the same as ReplaceRouteTableAssociation with the addition of +// the ability to pass a context and additional request options. +// +// See ReplaceRouteTableAssociation for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReplaceRouteTableAssociationWithContext(ctx aws.Context, input *ReplaceRouteTableAssociationInput, opts ...request.Option) (*ReplaceRouteTableAssociationOutput, error) { + req, out := c.ReplaceRouteTableAssociationRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReplaceTransitGatewayRoute = "ReplaceTransitGatewayRoute" + +// ReplaceTransitGatewayRouteRequest generates a "aws/request.Request" representing the +// client's request for the ReplaceTransitGatewayRoute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReplaceTransitGatewayRoute for more information on using the ReplaceTransitGatewayRoute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReplaceTransitGatewayRouteRequest method. +// req, resp := client.ReplaceTransitGatewayRouteRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceTransitGatewayRoute +func (c *EC2) ReplaceTransitGatewayRouteRequest(input *ReplaceTransitGatewayRouteInput) (req *request.Request, output *ReplaceTransitGatewayRouteOutput) { + op := &request.Operation{ + Name: opReplaceTransitGatewayRoute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReplaceTransitGatewayRouteInput{} + } + + output = &ReplaceTransitGatewayRouteOutput{} + req = c.newRequest(op, input, output) + return +} + +// ReplaceTransitGatewayRoute API operation for Amazon Elastic Compute Cloud. +// +// Replaces the specified route in the specified transit gateway route table. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReplaceTransitGatewayRoute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceTransitGatewayRoute +func (c *EC2) ReplaceTransitGatewayRoute(input *ReplaceTransitGatewayRouteInput) (*ReplaceTransitGatewayRouteOutput, error) { + req, out := c.ReplaceTransitGatewayRouteRequest(input) + return out, req.Send() +} + +// ReplaceTransitGatewayRouteWithContext is the same as ReplaceTransitGatewayRoute with the addition of +// the ability to pass a context and additional request options. +// +// See ReplaceTransitGatewayRoute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReplaceTransitGatewayRouteWithContext(ctx aws.Context, input *ReplaceTransitGatewayRouteInput, opts ...request.Option) (*ReplaceTransitGatewayRouteOutput, error) { + req, out := c.ReplaceTransitGatewayRouteRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opReportInstanceStatus = "ReportInstanceStatus" + +// ReportInstanceStatusRequest generates a "aws/request.Request" representing the +// client's request for the ReportInstanceStatus operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ReportInstanceStatus for more information on using the ReportInstanceStatus +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ReportInstanceStatusRequest method. +// req, resp := client.ReportInstanceStatusRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatus +func (c *EC2) ReportInstanceStatusRequest(input *ReportInstanceStatusInput) (req *request.Request, output *ReportInstanceStatusOutput) { + op := &request.Operation{ + Name: opReportInstanceStatus, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ReportInstanceStatusInput{} + } + + output = &ReportInstanceStatusOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ReportInstanceStatus API operation for Amazon Elastic Compute Cloud. +// +// Submits feedback about the status of an instance. The instance must be in +// the running state. If your experience with the instance differs from the +// instance status returned by DescribeInstanceStatus, use ReportInstanceStatus +// to report your experience with the instance. Amazon EC2 collects this information +// to improve the accuracy of status checks. +// +// Use of this action does not change the value returned by DescribeInstanceStatus. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ReportInstanceStatus for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatus +func (c *EC2) ReportInstanceStatus(input *ReportInstanceStatusInput) (*ReportInstanceStatusOutput, error) { + req, out := c.ReportInstanceStatusRequest(input) + return out, req.Send() +} + +// ReportInstanceStatusWithContext is the same as ReportInstanceStatus with the addition of +// the ability to pass a context and additional request options. +// +// See ReportInstanceStatus for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ReportInstanceStatusWithContext(ctx aws.Context, input *ReportInstanceStatusInput, opts ...request.Option) (*ReportInstanceStatusOutput, error) { + req, out := c.ReportInstanceStatusRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRequestSpotFleet = "RequestSpotFleet" + +// RequestSpotFleetRequest generates a "aws/request.Request" representing the +// client's request for the RequestSpotFleet operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RequestSpotFleet for more information on using the RequestSpotFleet +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RequestSpotFleetRequest method. +// req, resp := client.RequestSpotFleetRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleet +func (c *EC2) RequestSpotFleetRequest(input *RequestSpotFleetInput) (req *request.Request, output *RequestSpotFleetOutput) { + op := &request.Operation{ + Name: opRequestSpotFleet, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RequestSpotFleetInput{} + } + + output = &RequestSpotFleetOutput{} + req = c.newRequest(op, input, output) + return +} + +// RequestSpotFleet API operation for Amazon Elastic Compute Cloud. +// +// Creates a Spot Fleet request. +// +// The Spot Fleet request specifies the total target capacity and the On-Demand +// target capacity. Amazon EC2 calculates the difference between the total capacity +// and On-Demand capacity, and launches the difference as Spot capacity. +// +// You can submit a single request that includes multiple launch specifications +// that vary by instance type, AMI, Availability Zone, or subnet. +// +// By default, the Spot Fleet requests Spot Instances in the Spot Instance pool +// where the price per unit is the lowest. Each launch specification can include +// its own instance weighting that reflects the value of the instance type to +// your application workload. +// +// Alternatively, you can specify that the Spot Fleet distribute the target +// capacity across the Spot pools included in its launch specifications. By +// ensuring that the Spot Instances in your Spot Fleet are in different Spot +// pools, you can improve the availability of your fleet. +// +// You can specify tags for the Spot Instances. You cannot tag other resource +// types in a Spot Fleet request because only the instance resource type is +// supported. +// +// For more information, see Spot Fleet Requests (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html) +// in the Amazon EC2 User Guide for Linux Instances. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RequestSpotFleet for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleet +func (c *EC2) RequestSpotFleet(input *RequestSpotFleetInput) (*RequestSpotFleetOutput, error) { + req, out := c.RequestSpotFleetRequest(input) + return out, req.Send() +} + +// RequestSpotFleetWithContext is the same as RequestSpotFleet with the addition of +// the ability to pass a context and additional request options. +// +// See RequestSpotFleet for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RequestSpotFleetWithContext(ctx aws.Context, input *RequestSpotFleetInput, opts ...request.Option) (*RequestSpotFleetOutput, error) { + req, out := c.RequestSpotFleetRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRequestSpotInstances = "RequestSpotInstances" + +// RequestSpotInstancesRequest generates a "aws/request.Request" representing the +// client's request for the RequestSpotInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RequestSpotInstances for more information on using the RequestSpotInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RequestSpotInstancesRequest method. +// req, resp := client.RequestSpotInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstances +func (c *EC2) RequestSpotInstancesRequest(input *RequestSpotInstancesInput) (req *request.Request, output *RequestSpotInstancesOutput) { + op := &request.Operation{ + Name: opRequestSpotInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RequestSpotInstancesInput{} + } + + output = &RequestSpotInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// RequestSpotInstances API operation for Amazon Elastic Compute Cloud. +// +// Creates a Spot Instance request. +// +// For more information, see Spot Instance Requests (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html) +// in the Amazon EC2 User Guide for Linux Instances. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RequestSpotInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstances +func (c *EC2) RequestSpotInstances(input *RequestSpotInstancesInput) (*RequestSpotInstancesOutput, error) { + req, out := c.RequestSpotInstancesRequest(input) + return out, req.Send() +} + +// RequestSpotInstancesWithContext is the same as RequestSpotInstances with the addition of +// the ability to pass a context and additional request options. +// +// See RequestSpotInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RequestSpotInstancesWithContext(ctx aws.Context, input *RequestSpotInstancesInput, opts ...request.Option) (*RequestSpotInstancesOutput, error) { + req, out := c.RequestSpotInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opResetEbsDefaultKmsKeyId = "ResetEbsDefaultKmsKeyId" + +// ResetEbsDefaultKmsKeyIdRequest generates a "aws/request.Request" representing the +// client's request for the ResetEbsDefaultKmsKeyId operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ResetEbsDefaultKmsKeyId for more information on using the ResetEbsDefaultKmsKeyId +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ResetEbsDefaultKmsKeyIdRequest method. +// req, resp := client.ResetEbsDefaultKmsKeyIdRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetEbsDefaultKmsKeyId +func (c *EC2) ResetEbsDefaultKmsKeyIdRequest(input *ResetEbsDefaultKmsKeyIdInput) (req *request.Request, output *ResetEbsDefaultKmsKeyIdOutput) { + op := &request.Operation{ + Name: opResetEbsDefaultKmsKeyId, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ResetEbsDefaultKmsKeyIdInput{} + } + + output = &ResetEbsDefaultKmsKeyIdOutput{} + req = c.newRequest(op, input, output) + return +} + +// ResetEbsDefaultKmsKeyId API operation for Amazon Elastic Compute Cloud. +// +// Resets the default customer master key (CMK) for EBS encryption for your +// account in this Region to the AWS managed CMK for EBS. +// +// After resetting the default CMK to the AWS managed CMK, you can continue +// to encrypt by a customer managed CMK by specifying it when you create the +// volume. For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ResetEbsDefaultKmsKeyId for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetEbsDefaultKmsKeyId +func (c *EC2) ResetEbsDefaultKmsKeyId(input *ResetEbsDefaultKmsKeyIdInput) (*ResetEbsDefaultKmsKeyIdOutput, error) { + req, out := c.ResetEbsDefaultKmsKeyIdRequest(input) + return out, req.Send() +} + +// ResetEbsDefaultKmsKeyIdWithContext is the same as ResetEbsDefaultKmsKeyId with the addition of +// the ability to pass a context and additional request options. +// +// See ResetEbsDefaultKmsKeyId for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ResetEbsDefaultKmsKeyIdWithContext(ctx aws.Context, input *ResetEbsDefaultKmsKeyIdInput, opts ...request.Option) (*ResetEbsDefaultKmsKeyIdOutput, error) { + req, out := c.ResetEbsDefaultKmsKeyIdRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opResetFpgaImageAttribute = "ResetFpgaImageAttribute" + +// ResetFpgaImageAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ResetFpgaImageAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ResetFpgaImageAttribute for more information on using the ResetFpgaImageAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ResetFpgaImageAttributeRequest method. +// req, resp := client.ResetFpgaImageAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetFpgaImageAttribute +func (c *EC2) ResetFpgaImageAttributeRequest(input *ResetFpgaImageAttributeInput) (req *request.Request, output *ResetFpgaImageAttributeOutput) { + op := &request.Operation{ + Name: opResetFpgaImageAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ResetFpgaImageAttributeInput{} + } + + output = &ResetFpgaImageAttributeOutput{} + req = c.newRequest(op, input, output) + return +} + +// ResetFpgaImageAttribute API operation for Amazon Elastic Compute Cloud. +// +// Resets the specified attribute of the specified Amazon FPGA Image (AFI) to +// its default value. You can only reset the load permission attribute. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ResetFpgaImageAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetFpgaImageAttribute +func (c *EC2) ResetFpgaImageAttribute(input *ResetFpgaImageAttributeInput) (*ResetFpgaImageAttributeOutput, error) { + req, out := c.ResetFpgaImageAttributeRequest(input) + return out, req.Send() +} + +// ResetFpgaImageAttributeWithContext is the same as ResetFpgaImageAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ResetFpgaImageAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ResetFpgaImageAttributeWithContext(ctx aws.Context, input *ResetFpgaImageAttributeInput, opts ...request.Option) (*ResetFpgaImageAttributeOutput, error) { + req, out := c.ResetFpgaImageAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opResetImageAttribute = "ResetImageAttribute" + +// ResetImageAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ResetImageAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ResetImageAttribute for more information on using the ResetImageAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ResetImageAttributeRequest method. +// req, resp := client.ResetImageAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttribute +func (c *EC2) ResetImageAttributeRequest(input *ResetImageAttributeInput) (req *request.Request, output *ResetImageAttributeOutput) { + op := &request.Operation{ + Name: opResetImageAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ResetImageAttributeInput{} + } + + output = &ResetImageAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ResetImageAttribute API operation for Amazon Elastic Compute Cloud. +// +// Resets an attribute of an AMI to its default value. +// +// The productCodes attribute can't be reset. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ResetImageAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttribute +func (c *EC2) ResetImageAttribute(input *ResetImageAttributeInput) (*ResetImageAttributeOutput, error) { + req, out := c.ResetImageAttributeRequest(input) + return out, req.Send() +} + +// ResetImageAttributeWithContext is the same as ResetImageAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ResetImageAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ResetImageAttributeWithContext(ctx aws.Context, input *ResetImageAttributeInput, opts ...request.Option) (*ResetImageAttributeOutput, error) { + req, out := c.ResetImageAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opResetInstanceAttribute = "ResetInstanceAttribute" + +// ResetInstanceAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ResetInstanceAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ResetInstanceAttribute for more information on using the ResetInstanceAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ResetInstanceAttributeRequest method. +// req, resp := client.ResetInstanceAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttribute +func (c *EC2) ResetInstanceAttributeRequest(input *ResetInstanceAttributeInput) (req *request.Request, output *ResetInstanceAttributeOutput) { + op := &request.Operation{ + Name: opResetInstanceAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ResetInstanceAttributeInput{} + } + + output = &ResetInstanceAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ResetInstanceAttribute API operation for Amazon Elastic Compute Cloud. +// +// Resets an attribute of an instance to its default value. To reset the kernel +// or ramdisk, the instance must be in a stopped state. To reset the sourceDestCheck, +// the instance can be either running or stopped. +// +// The sourceDestCheck attribute controls whether source/destination checking +// is enabled. The default value is true, which means checking is enabled. This +// value must be false for a NAT instance to perform NAT. For more information, +// see NAT Instances (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) +// in the Amazon Virtual Private Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ResetInstanceAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttribute +func (c *EC2) ResetInstanceAttribute(input *ResetInstanceAttributeInput) (*ResetInstanceAttributeOutput, error) { + req, out := c.ResetInstanceAttributeRequest(input) + return out, req.Send() +} + +// ResetInstanceAttributeWithContext is the same as ResetInstanceAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ResetInstanceAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ResetInstanceAttributeWithContext(ctx aws.Context, input *ResetInstanceAttributeInput, opts ...request.Option) (*ResetInstanceAttributeOutput, error) { + req, out := c.ResetInstanceAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opResetNetworkInterfaceAttribute = "ResetNetworkInterfaceAttribute" + +// ResetNetworkInterfaceAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ResetNetworkInterfaceAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ResetNetworkInterfaceAttribute for more information on using the ResetNetworkInterfaceAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ResetNetworkInterfaceAttributeRequest method. +// req, resp := client.ResetNetworkInterfaceAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttribute +func (c *EC2) ResetNetworkInterfaceAttributeRequest(input *ResetNetworkInterfaceAttributeInput) (req *request.Request, output *ResetNetworkInterfaceAttributeOutput) { + op := &request.Operation{ + Name: opResetNetworkInterfaceAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ResetNetworkInterfaceAttributeInput{} + } + + output = &ResetNetworkInterfaceAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ResetNetworkInterfaceAttribute API operation for Amazon Elastic Compute Cloud. +// +// Resets a network interface attribute. You can specify only one attribute +// at a time. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ResetNetworkInterfaceAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttribute +func (c *EC2) ResetNetworkInterfaceAttribute(input *ResetNetworkInterfaceAttributeInput) (*ResetNetworkInterfaceAttributeOutput, error) { + req, out := c.ResetNetworkInterfaceAttributeRequest(input) + return out, req.Send() +} + +// ResetNetworkInterfaceAttributeWithContext is the same as ResetNetworkInterfaceAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ResetNetworkInterfaceAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ResetNetworkInterfaceAttributeWithContext(ctx aws.Context, input *ResetNetworkInterfaceAttributeInput, opts ...request.Option) (*ResetNetworkInterfaceAttributeOutput, error) { + req, out := c.ResetNetworkInterfaceAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opResetSnapshotAttribute = "ResetSnapshotAttribute" + +// ResetSnapshotAttributeRequest generates a "aws/request.Request" representing the +// client's request for the ResetSnapshotAttribute operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ResetSnapshotAttribute for more information on using the ResetSnapshotAttribute +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ResetSnapshotAttributeRequest method. +// req, resp := client.ResetSnapshotAttributeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttribute +func (c *EC2) ResetSnapshotAttributeRequest(input *ResetSnapshotAttributeInput) (req *request.Request, output *ResetSnapshotAttributeOutput) { + op := &request.Operation{ + Name: opResetSnapshotAttribute, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ResetSnapshotAttributeInput{} + } + + output = &ResetSnapshotAttributeOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// ResetSnapshotAttribute API operation for Amazon Elastic Compute Cloud. +// +// Resets permission settings for the specified snapshot. +// +// For more information about modifying snapshot permissions, see Sharing Snapshots +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation ResetSnapshotAttribute for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttribute +func (c *EC2) ResetSnapshotAttribute(input *ResetSnapshotAttributeInput) (*ResetSnapshotAttributeOutput, error) { + req, out := c.ResetSnapshotAttributeRequest(input) + return out, req.Send() +} + +// ResetSnapshotAttributeWithContext is the same as ResetSnapshotAttribute with the addition of +// the ability to pass a context and additional request options. +// +// See ResetSnapshotAttribute for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) ResetSnapshotAttributeWithContext(ctx aws.Context, input *ResetSnapshotAttributeInput, opts ...request.Option) (*ResetSnapshotAttributeOutput, error) { + req, out := c.ResetSnapshotAttributeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRestoreAddressToClassic = "RestoreAddressToClassic" + +// RestoreAddressToClassicRequest generates a "aws/request.Request" representing the +// client's request for the RestoreAddressToClassic operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RestoreAddressToClassic for more information on using the RestoreAddressToClassic +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RestoreAddressToClassicRequest method. +// req, resp := client.RestoreAddressToClassicRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassic +func (c *EC2) RestoreAddressToClassicRequest(input *RestoreAddressToClassicInput) (req *request.Request, output *RestoreAddressToClassicOutput) { + op := &request.Operation{ + Name: opRestoreAddressToClassic, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RestoreAddressToClassicInput{} + } + + output = &RestoreAddressToClassicOutput{} + req = c.newRequest(op, input, output) + return +} + +// RestoreAddressToClassic API operation for Amazon Elastic Compute Cloud. +// +// Restores an Elastic IP address that was previously moved to the EC2-VPC platform +// back to the EC2-Classic platform. You cannot move an Elastic IP address that +// was originally allocated for use in EC2-VPC. The Elastic IP address must +// not be associated with an instance or network interface. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RestoreAddressToClassic for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassic +func (c *EC2) RestoreAddressToClassic(input *RestoreAddressToClassicInput) (*RestoreAddressToClassicOutput, error) { + req, out := c.RestoreAddressToClassicRequest(input) + return out, req.Send() +} + +// RestoreAddressToClassicWithContext is the same as RestoreAddressToClassic with the addition of +// the ability to pass a context and additional request options. +// +// See RestoreAddressToClassic for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RestoreAddressToClassicWithContext(ctx aws.Context, input *RestoreAddressToClassicInput, opts ...request.Option) (*RestoreAddressToClassicOutput, error) { + req, out := c.RestoreAddressToClassicRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRevokeClientVpnIngress = "RevokeClientVpnIngress" + +// RevokeClientVpnIngressRequest generates a "aws/request.Request" representing the +// client's request for the RevokeClientVpnIngress operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RevokeClientVpnIngress for more information on using the RevokeClientVpnIngress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RevokeClientVpnIngressRequest method. +// req, resp := client.RevokeClientVpnIngressRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeClientVpnIngress +func (c *EC2) RevokeClientVpnIngressRequest(input *RevokeClientVpnIngressInput) (req *request.Request, output *RevokeClientVpnIngressOutput) { + op := &request.Operation{ + Name: opRevokeClientVpnIngress, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RevokeClientVpnIngressInput{} + } + + output = &RevokeClientVpnIngressOutput{} + req = c.newRequest(op, input, output) + return +} + +// RevokeClientVpnIngress API operation for Amazon Elastic Compute Cloud. +// +// Removes an ingress authorization rule from a Client VPN endpoint. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RevokeClientVpnIngress for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeClientVpnIngress +func (c *EC2) RevokeClientVpnIngress(input *RevokeClientVpnIngressInput) (*RevokeClientVpnIngressOutput, error) { + req, out := c.RevokeClientVpnIngressRequest(input) + return out, req.Send() +} + +// RevokeClientVpnIngressWithContext is the same as RevokeClientVpnIngress with the addition of +// the ability to pass a context and additional request options. +// +// See RevokeClientVpnIngress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RevokeClientVpnIngressWithContext(ctx aws.Context, input *RevokeClientVpnIngressInput, opts ...request.Option) (*RevokeClientVpnIngressOutput, error) { + req, out := c.RevokeClientVpnIngressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRevokeSecurityGroupEgress = "RevokeSecurityGroupEgress" + +// RevokeSecurityGroupEgressRequest generates a "aws/request.Request" representing the +// client's request for the RevokeSecurityGroupEgress operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RevokeSecurityGroupEgress for more information on using the RevokeSecurityGroupEgress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RevokeSecurityGroupEgressRequest method. +// req, resp := client.RevokeSecurityGroupEgressRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgress +func (c *EC2) RevokeSecurityGroupEgressRequest(input *RevokeSecurityGroupEgressInput) (req *request.Request, output *RevokeSecurityGroupEgressOutput) { + op := &request.Operation{ + Name: opRevokeSecurityGroupEgress, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RevokeSecurityGroupEgressInput{} + } + + output = &RevokeSecurityGroupEgressOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// RevokeSecurityGroupEgress API operation for Amazon Elastic Compute Cloud. +// +// [VPC only] Removes the specified egress rules from a security group for EC2-VPC. +// This action doesn't apply to security groups for use in EC2-Classic. To remove +// a rule, the values that you specify (for example, ports) must match the existing +// rule's values exactly. +// +// Each rule consists of the protocol and the IPv4 or IPv6 CIDR range or source +// security group. For the TCP and UDP protocols, you must also specify the +// destination port or range of ports. For the ICMP protocol, you must also +// specify the ICMP type and code. If the security group rule has a description, +// you do not have to specify the description to revoke the rule. +// +// Rule changes are propagated to instances within the security group as quickly +// as possible. However, a small delay might occur. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RevokeSecurityGroupEgress for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgress +func (c *EC2) RevokeSecurityGroupEgress(input *RevokeSecurityGroupEgressInput) (*RevokeSecurityGroupEgressOutput, error) { + req, out := c.RevokeSecurityGroupEgressRequest(input) + return out, req.Send() +} + +// RevokeSecurityGroupEgressWithContext is the same as RevokeSecurityGroupEgress with the addition of +// the ability to pass a context and additional request options. +// +// See RevokeSecurityGroupEgress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RevokeSecurityGroupEgressWithContext(ctx aws.Context, input *RevokeSecurityGroupEgressInput, opts ...request.Option) (*RevokeSecurityGroupEgressOutput, error) { + req, out := c.RevokeSecurityGroupEgressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRevokeSecurityGroupIngress = "RevokeSecurityGroupIngress" + +// RevokeSecurityGroupIngressRequest generates a "aws/request.Request" representing the +// client's request for the RevokeSecurityGroupIngress operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RevokeSecurityGroupIngress for more information on using the RevokeSecurityGroupIngress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RevokeSecurityGroupIngressRequest method. +// req, resp := client.RevokeSecurityGroupIngressRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngress +func (c *EC2) RevokeSecurityGroupIngressRequest(input *RevokeSecurityGroupIngressInput) (req *request.Request, output *RevokeSecurityGroupIngressOutput) { + op := &request.Operation{ + Name: opRevokeSecurityGroupIngress, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RevokeSecurityGroupIngressInput{} + } + + output = &RevokeSecurityGroupIngressOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// RevokeSecurityGroupIngress API operation for Amazon Elastic Compute Cloud. +// +// Removes the specified ingress rules from a security group. To remove a rule, +// the values that you specify (for example, ports) must match the existing +// rule's values exactly. +// +// [EC2-Classic only] If the values you specify do not match the existing rule's +// values, no error is returned. Use DescribeSecurityGroups to verify that the +// rule has been removed. +// +// Each rule consists of the protocol and the CIDR range or source security +// group. For the TCP and UDP protocols, you must also specify the destination +// port or range of ports. For the ICMP protocol, you must also specify the +// ICMP type and code. If the security group rule has a description, you do +// not have to specify the description to revoke the rule. +// +// Rule changes are propagated to instances within the security group as quickly +// as possible. However, a small delay might occur. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RevokeSecurityGroupIngress for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngress +func (c *EC2) RevokeSecurityGroupIngress(input *RevokeSecurityGroupIngressInput) (*RevokeSecurityGroupIngressOutput, error) { + req, out := c.RevokeSecurityGroupIngressRequest(input) + return out, req.Send() +} + +// RevokeSecurityGroupIngressWithContext is the same as RevokeSecurityGroupIngress with the addition of +// the ability to pass a context and additional request options. +// +// See RevokeSecurityGroupIngress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RevokeSecurityGroupIngressWithContext(ctx aws.Context, input *RevokeSecurityGroupIngressInput, opts ...request.Option) (*RevokeSecurityGroupIngressOutput, error) { + req, out := c.RevokeSecurityGroupIngressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRunInstances = "RunInstances" + +// RunInstancesRequest generates a "aws/request.Request" representing the +// client's request for the RunInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RunInstances for more information on using the RunInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RunInstancesRequest method. +// req, resp := client.RunInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstances +func (c *EC2) RunInstancesRequest(input *RunInstancesInput) (req *request.Request, output *Reservation) { + op := &request.Operation{ + Name: opRunInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RunInstancesInput{} + } + + output = &Reservation{} + req = c.newRequest(op, input, output) + return +} + +// RunInstances API operation for Amazon Elastic Compute Cloud. +// +// Launches the specified number of instances using an AMI for which you have +// permissions. +// +// You can specify a number of options, or leave the default options. The following +// rules apply: +// +// * [EC2-VPC] If you don't specify a subnet ID, we choose a default subnet +// from your default VPC for you. If you don't have a default VPC, you must +// specify a subnet ID in the request. +// +// * [EC2-Classic] If don't specify an Availability Zone, we choose one for +// you. +// +// * Some instance types must be launched into a VPC. If you do not have +// a default VPC, or if you do not specify a subnet ID, the request fails. +// For more information, see Instance Types Available Only in a VPC (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html#vpc-only-instance-types). +// +// * [EC2-VPC] All instances have a network interface with a primary private +// IPv4 address. If you don't specify this address, we choose one from the +// IPv4 range of your subnet. +// +// * Not all instance types support IPv6 addresses. For more information, +// see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html). +// +// * If you don't specify a security group ID, we use the default security +// group. For more information, see Security Groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html). +// +// * If any of the AMIs have a product code attached for which the user has +// not subscribed, the request fails. +// +// You can create a launch template (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html), +// which is a resource that contains the parameters to launch an instance. When +// you launch an instance using RunInstances, you can specify the launch template +// instead of specifying the launch parameters. +// +// To ensure faster instance launches, break up large requests into smaller +// batches. For example, create five separate launch requests for 100 instances +// each instead of one launch request for 500 instances. +// +// An instance is ready for you to use when it's in the running state. You can +// check the state of your instance using DescribeInstances. You can tag instances +// and EBS volumes during launch, after launch, or both. For more information, +// see CreateTags and Tagging Your Amazon EC2 Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html). +// +// Linux instances have access to the public key of the key pair at boot. You +// can use this key to provide secure access to the instance. Amazon EC2 public +// images use this feature to provide secure access without passwords. For more +// information, see Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// For troubleshooting, see What To Do If An Instance Immediately Terminates +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html), +// and Troubleshooting Connecting to Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RunInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstances +func (c *EC2) RunInstances(input *RunInstancesInput) (*Reservation, error) { + req, out := c.RunInstancesRequest(input) + return out, req.Send() +} + +// RunInstancesWithContext is the same as RunInstances with the addition of +// the ability to pass a context and additional request options. +// +// See RunInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RunInstancesWithContext(ctx aws.Context, input *RunInstancesInput, opts ...request.Option) (*Reservation, error) { + req, out := c.RunInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRunScheduledInstances = "RunScheduledInstances" + +// RunScheduledInstancesRequest generates a "aws/request.Request" representing the +// client's request for the RunScheduledInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RunScheduledInstances for more information on using the RunScheduledInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RunScheduledInstancesRequest method. +// req, resp := client.RunScheduledInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstances +func (c *EC2) RunScheduledInstancesRequest(input *RunScheduledInstancesInput) (req *request.Request, output *RunScheduledInstancesOutput) { + op := &request.Operation{ + Name: opRunScheduledInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RunScheduledInstancesInput{} + } + + output = &RunScheduledInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// RunScheduledInstances API operation for Amazon Elastic Compute Cloud. +// +// Launches the specified Scheduled Instances. +// +// Before you can launch a Scheduled Instance, you must purchase it and obtain +// an identifier using PurchaseScheduledInstances. +// +// You must launch a Scheduled Instance during its scheduled time period. You +// can't stop or reboot a Scheduled Instance, but you can terminate it as needed. +// If you terminate a Scheduled Instance before the current scheduled time period +// ends, you can launch it again after a few minutes. For more information, +// see Scheduled Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-scheduled-instances.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation RunScheduledInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstances +func (c *EC2) RunScheduledInstances(input *RunScheduledInstancesInput) (*RunScheduledInstancesOutput, error) { + req, out := c.RunScheduledInstancesRequest(input) + return out, req.Send() +} + +// RunScheduledInstancesWithContext is the same as RunScheduledInstances with the addition of +// the ability to pass a context and additional request options. +// +// See RunScheduledInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) RunScheduledInstancesWithContext(ctx aws.Context, input *RunScheduledInstancesInput, opts ...request.Option) (*RunScheduledInstancesOutput, error) { + req, out := c.RunScheduledInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opSearchTransitGatewayRoutes = "SearchTransitGatewayRoutes" + +// SearchTransitGatewayRoutesRequest generates a "aws/request.Request" representing the +// client's request for the SearchTransitGatewayRoutes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See SearchTransitGatewayRoutes for more information on using the SearchTransitGatewayRoutes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the SearchTransitGatewayRoutesRequest method. +// req, resp := client.SearchTransitGatewayRoutesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchTransitGatewayRoutes +func (c *EC2) SearchTransitGatewayRoutesRequest(input *SearchTransitGatewayRoutesInput) (req *request.Request, output *SearchTransitGatewayRoutesOutput) { + op := &request.Operation{ + Name: opSearchTransitGatewayRoutes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &SearchTransitGatewayRoutesInput{} + } + + output = &SearchTransitGatewayRoutesOutput{} + req = c.newRequest(op, input, output) + return +} + +// SearchTransitGatewayRoutes API operation for Amazon Elastic Compute Cloud. +// +// Searches for routes in the specified transit gateway route table. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation SearchTransitGatewayRoutes for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchTransitGatewayRoutes +func (c *EC2) SearchTransitGatewayRoutes(input *SearchTransitGatewayRoutesInput) (*SearchTransitGatewayRoutesOutput, error) { + req, out := c.SearchTransitGatewayRoutesRequest(input) + return out, req.Send() +} + +// SearchTransitGatewayRoutesWithContext is the same as SearchTransitGatewayRoutes with the addition of +// the ability to pass a context and additional request options. +// +// See SearchTransitGatewayRoutes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) SearchTransitGatewayRoutesWithContext(ctx aws.Context, input *SearchTransitGatewayRoutesInput, opts ...request.Option) (*SearchTransitGatewayRoutesOutput, error) { + req, out := c.SearchTransitGatewayRoutesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opSendDiagnosticInterrupt = "SendDiagnosticInterrupt" + +// SendDiagnosticInterruptRequest generates a "aws/request.Request" representing the +// client's request for the SendDiagnosticInterrupt operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See SendDiagnosticInterrupt for more information on using the SendDiagnosticInterrupt +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the SendDiagnosticInterruptRequest method. +// req, resp := client.SendDiagnosticInterruptRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SendDiagnosticInterrupt +func (c *EC2) SendDiagnosticInterruptRequest(input *SendDiagnosticInterruptInput) (req *request.Request, output *SendDiagnosticInterruptOutput) { + op := &request.Operation{ + Name: opSendDiagnosticInterrupt, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &SendDiagnosticInterruptInput{} + } + + output = &SendDiagnosticInterruptOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// SendDiagnosticInterrupt API operation for Amazon Elastic Compute Cloud. +// +// Sends a diagnostic interrupt to the specified Amazon EC2 instance to trigger +// a kernel panic (on Linux instances), or a blue screen/stop error (on Windows +// instances). For instances based on Intel and AMD processors, the interrupt +// is received as a non-maskable interrupt (NMI). +// +// In general, the operating system crashes and reboots when a kernel panic +// or stop error is triggered. The operating system can also be configured to +// perform diagnostic tasks, such as generating a memory dump file, loading +// a secondary kernel, or obtaining a call trace. +// +// Before sending a diagnostic interrupt to your instance, ensure that its operating +// system is configured to perform the required diagnostic tasks. +// +// For more information about configuring your operating system to generate +// a crash dump when a kernel panic or stop error occurs, see Send a Diagnostic +// Interrupt (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html) +// (Linux instances) or Send a Diagnostic Interrupt (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/diagnostic-interrupt.html) +// (Windows instances). +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation SendDiagnosticInterrupt for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SendDiagnosticInterrupt +func (c *EC2) SendDiagnosticInterrupt(input *SendDiagnosticInterruptInput) (*SendDiagnosticInterruptOutput, error) { + req, out := c.SendDiagnosticInterruptRequest(input) + return out, req.Send() +} + +// SendDiagnosticInterruptWithContext is the same as SendDiagnosticInterrupt with the addition of +// the ability to pass a context and additional request options. +// +// See SendDiagnosticInterrupt for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) SendDiagnosticInterruptWithContext(ctx aws.Context, input *SendDiagnosticInterruptInput, opts ...request.Option) (*SendDiagnosticInterruptOutput, error) { + req, out := c.SendDiagnosticInterruptRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opStartInstances = "StartInstances" + +// StartInstancesRequest generates a "aws/request.Request" representing the +// client's request for the StartInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See StartInstances for more information on using the StartInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the StartInstancesRequest method. +// req, resp := client.StartInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstances +func (c *EC2) StartInstancesRequest(input *StartInstancesInput) (req *request.Request, output *StartInstancesOutput) { + op := &request.Operation{ + Name: opStartInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &StartInstancesInput{} + } + + output = &StartInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// StartInstances API operation for Amazon Elastic Compute Cloud. +// +// Starts an Amazon EBS-backed instance that you've previously stopped. +// +// Instances that use Amazon EBS volumes as their root devices can be quickly +// stopped and started. When an instance is stopped, the compute resources are +// released and you are not billed for instance usage. However, your root partition +// Amazon EBS volume remains and continues to persist your data, and you are +// charged for Amazon EBS volume usage. You can restart your instance at any +// time. Every time you start your Windows instance, Amazon EC2 charges you +// for a full instance hour. If you stop and restart your Windows instance, +// a new instance hour begins and Amazon EC2 charges you for another full instance +// hour even if you are still within the same 60-minute period when it was stopped. +// Every time you start your Linux instance, Amazon EC2 charges a one-minute +// minimum for instance usage, and thereafter charges per second for instance +// usage. +// +// Before stopping an instance, make sure it is in a state from which it can +// be restarted. Stopping an instance does not preserve data stored in RAM. +// +// Performing this operation on an instance that uses an instance store as its +// root device returns an error. +// +// For more information, see Stopping Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation StartInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstances +func (c *EC2) StartInstances(input *StartInstancesInput) (*StartInstancesOutput, error) { + req, out := c.StartInstancesRequest(input) + return out, req.Send() +} + +// StartInstancesWithContext is the same as StartInstances with the addition of +// the ability to pass a context and additional request options. +// +// See StartInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) StartInstancesWithContext(ctx aws.Context, input *StartInstancesInput, opts ...request.Option) (*StartInstancesOutput, error) { + req, out := c.StartInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opStopInstances = "StopInstances" + +// StopInstancesRequest generates a "aws/request.Request" representing the +// client's request for the StopInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See StopInstances for more information on using the StopInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the StopInstancesRequest method. +// req, resp := client.StopInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstances +func (c *EC2) StopInstancesRequest(input *StopInstancesInput) (req *request.Request, output *StopInstancesOutput) { + op := &request.Operation{ + Name: opStopInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &StopInstancesInput{} + } + + output = &StopInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// StopInstances API operation for Amazon Elastic Compute Cloud. +// +// Stops an Amazon EBS-backed instance. +// +// You can use the Stop action to hibernate an instance if the instance is enabled +// for hibernation (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#enabling-hibernation) +// and it meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). +// For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// We don't charge usage for a stopped instance, or data transfer fees; however, +// your root partition Amazon EBS volume remains and continues to persist your +// data, and you are charged for Amazon EBS volume usage. Every time you start +// your Windows instance, Amazon EC2 charges you for a full instance hour. If +// you stop and restart your Windows instance, a new instance hour begins and +// Amazon EC2 charges you for another full instance hour even if you are still +// within the same 60-minute period when it was stopped. Every time you start +// your Linux instance, Amazon EC2 charges a one-minute minimum for instance +// usage, and thereafter charges per second for instance usage. +// +// You can't start, stop, or hibernate Spot Instances, and you can't stop or +// hibernate instance store-backed instances. For information about using hibernation +// for Spot Instances, see Hibernating Interrupted Spot Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances) +// in the Amazon Elastic Compute Cloud User Guide. +// +// When you stop or hibernate an instance, we shut it down. You can restart +// your instance at any time. Before stopping or hibernating an instance, make +// sure it is in a state from which it can be restarted. Stopping an instance +// does not preserve data stored in RAM, but hibernating an instance does preserve +// data stored in RAM. If an instance cannot hibernate successfully, a normal +// shutdown occurs. +// +// Stopping and hibernating an instance is different to rebooting or terminating +// it. For example, when you stop or hibernate an instance, the root device +// and any other devices attached to the instance persist. When you terminate +// an instance, the root device and any other devices attached during the instance +// launch are automatically deleted. For more information about the differences +// between rebooting, stopping, hibernating, and terminating instances, see +// Instance Lifecycle (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// When you stop an instance, we attempt to shut it down forcibly after a short +// while. If your instance appears stuck in the stopping state after a period +// of time, there may be an issue with the underlying host computer. For more +// information, see Troubleshooting Stopping Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation StopInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstances +func (c *EC2) StopInstances(input *StopInstancesInput) (*StopInstancesOutput, error) { + req, out := c.StopInstancesRequest(input) + return out, req.Send() +} + +// StopInstancesWithContext is the same as StopInstances with the addition of +// the ability to pass a context and additional request options. +// +// See StopInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) StopInstancesWithContext(ctx aws.Context, input *StopInstancesInput, opts ...request.Option) (*StopInstancesOutput, error) { + req, out := c.StopInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opTerminateClientVpnConnections = "TerminateClientVpnConnections" + +// TerminateClientVpnConnectionsRequest generates a "aws/request.Request" representing the +// client's request for the TerminateClientVpnConnections operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See TerminateClientVpnConnections for more information on using the TerminateClientVpnConnections +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the TerminateClientVpnConnectionsRequest method. +// req, resp := client.TerminateClientVpnConnectionsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateClientVpnConnections +func (c *EC2) TerminateClientVpnConnectionsRequest(input *TerminateClientVpnConnectionsInput) (req *request.Request, output *TerminateClientVpnConnectionsOutput) { + op := &request.Operation{ + Name: opTerminateClientVpnConnections, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &TerminateClientVpnConnectionsInput{} + } + + output = &TerminateClientVpnConnectionsOutput{} + req = c.newRequest(op, input, output) + return +} + +// TerminateClientVpnConnections API operation for Amazon Elastic Compute Cloud. +// +// Terminates active Client VPN endpoint connections. This action can be used +// to terminate a specific client connection, or up to five connections established +// by a specific user. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation TerminateClientVpnConnections for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateClientVpnConnections +func (c *EC2) TerminateClientVpnConnections(input *TerminateClientVpnConnectionsInput) (*TerminateClientVpnConnectionsOutput, error) { + req, out := c.TerminateClientVpnConnectionsRequest(input) + return out, req.Send() +} + +// TerminateClientVpnConnectionsWithContext is the same as TerminateClientVpnConnections with the addition of +// the ability to pass a context and additional request options. +// +// See TerminateClientVpnConnections for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) TerminateClientVpnConnectionsWithContext(ctx aws.Context, input *TerminateClientVpnConnectionsInput, opts ...request.Option) (*TerminateClientVpnConnectionsOutput, error) { + req, out := c.TerminateClientVpnConnectionsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opTerminateInstances = "TerminateInstances" + +// TerminateInstancesRequest generates a "aws/request.Request" representing the +// client's request for the TerminateInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See TerminateInstances for more information on using the TerminateInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the TerminateInstancesRequest method. +// req, resp := client.TerminateInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstances +func (c *EC2) TerminateInstancesRequest(input *TerminateInstancesInput) (req *request.Request, output *TerminateInstancesOutput) { + op := &request.Operation{ + Name: opTerminateInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &TerminateInstancesInput{} + } + + output = &TerminateInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// TerminateInstances API operation for Amazon Elastic Compute Cloud. +// +// Shuts down the specified instances. This operation is idempotent; if you +// terminate an instance more than once, each call succeeds. +// +// If you specify multiple instances and the request fails (for example, because +// of a single incorrect instance ID), none of the instances are terminated. +// +// Terminated instances remain visible after termination (for approximately +// one hour). +// +// By default, Amazon EC2 deletes all EBS volumes that were attached when the +// instance launched. Volumes attached after instance launch continue running. +// +// You can stop, start, and terminate EBS-backed instances. You can only terminate +// instance store-backed instances. What happens to an instance differs if you +// stop it or terminate it. For example, when you stop an instance, the root +// device and any other devices attached to the instance persist. When you terminate +// an instance, any attached EBS volumes with the DeleteOnTermination block +// device mapping parameter set to true are automatically deleted. For more +// information about the differences between stopping and terminating instances, +// see Instance Lifecycle (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// For more information about troubleshooting, see Troubleshooting Terminating +// Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation TerminateInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstances +func (c *EC2) TerminateInstances(input *TerminateInstancesInput) (*TerminateInstancesOutput, error) { + req, out := c.TerminateInstancesRequest(input) + return out, req.Send() +} + +// TerminateInstancesWithContext is the same as TerminateInstances with the addition of +// the ability to pass a context and additional request options. +// +// See TerminateInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) TerminateInstancesWithContext(ctx aws.Context, input *TerminateInstancesInput, opts ...request.Option) (*TerminateInstancesOutput, error) { + req, out := c.TerminateInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opUnassignIpv6Addresses = "UnassignIpv6Addresses" + +// UnassignIpv6AddressesRequest generates a "aws/request.Request" representing the +// client's request for the UnassignIpv6Addresses operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See UnassignIpv6Addresses for more information on using the UnassignIpv6Addresses +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the UnassignIpv6AddressesRequest method. +// req, resp := client.UnassignIpv6AddressesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6Addresses +func (c *EC2) UnassignIpv6AddressesRequest(input *UnassignIpv6AddressesInput) (req *request.Request, output *UnassignIpv6AddressesOutput) { + op := &request.Operation{ + Name: opUnassignIpv6Addresses, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &UnassignIpv6AddressesInput{} + } + + output = &UnassignIpv6AddressesOutput{} + req = c.newRequest(op, input, output) + return +} + +// UnassignIpv6Addresses API operation for Amazon Elastic Compute Cloud. +// +// Unassigns one or more IPv6 addresses from a network interface. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation UnassignIpv6Addresses for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6Addresses +func (c *EC2) UnassignIpv6Addresses(input *UnassignIpv6AddressesInput) (*UnassignIpv6AddressesOutput, error) { + req, out := c.UnassignIpv6AddressesRequest(input) + return out, req.Send() +} + +// UnassignIpv6AddressesWithContext is the same as UnassignIpv6Addresses with the addition of +// the ability to pass a context and additional request options. +// +// See UnassignIpv6Addresses for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) UnassignIpv6AddressesWithContext(ctx aws.Context, input *UnassignIpv6AddressesInput, opts ...request.Option) (*UnassignIpv6AddressesOutput, error) { + req, out := c.UnassignIpv6AddressesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opUnassignPrivateIpAddresses = "UnassignPrivateIpAddresses" + +// UnassignPrivateIpAddressesRequest generates a "aws/request.Request" representing the +// client's request for the UnassignPrivateIpAddresses operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See UnassignPrivateIpAddresses for more information on using the UnassignPrivateIpAddresses +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the UnassignPrivateIpAddressesRequest method. +// req, resp := client.UnassignPrivateIpAddressesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddresses +func (c *EC2) UnassignPrivateIpAddressesRequest(input *UnassignPrivateIpAddressesInput) (req *request.Request, output *UnassignPrivateIpAddressesOutput) { + op := &request.Operation{ + Name: opUnassignPrivateIpAddresses, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &UnassignPrivateIpAddressesInput{} + } + + output = &UnassignPrivateIpAddressesOutput{} + req = c.newRequest(op, input, output) + req.Handlers.Unmarshal.Swap(ec2query.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler) + return +} + +// UnassignPrivateIpAddresses API operation for Amazon Elastic Compute Cloud. +// +// Unassigns one or more secondary private IP addresses from a network interface. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation UnassignPrivateIpAddresses for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddresses +func (c *EC2) UnassignPrivateIpAddresses(input *UnassignPrivateIpAddressesInput) (*UnassignPrivateIpAddressesOutput, error) { + req, out := c.UnassignPrivateIpAddressesRequest(input) + return out, req.Send() +} + +// UnassignPrivateIpAddressesWithContext is the same as UnassignPrivateIpAddresses with the addition of +// the ability to pass a context and additional request options. +// +// See UnassignPrivateIpAddresses for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) UnassignPrivateIpAddressesWithContext(ctx aws.Context, input *UnassignPrivateIpAddressesInput, opts ...request.Option) (*UnassignPrivateIpAddressesOutput, error) { + req, out := c.UnassignPrivateIpAddressesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opUnmonitorInstances = "UnmonitorInstances" + +// UnmonitorInstancesRequest generates a "aws/request.Request" representing the +// client's request for the UnmonitorInstances operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See UnmonitorInstances for more information on using the UnmonitorInstances +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the UnmonitorInstancesRequest method. +// req, resp := client.UnmonitorInstancesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstances +func (c *EC2) UnmonitorInstancesRequest(input *UnmonitorInstancesInput) (req *request.Request, output *UnmonitorInstancesOutput) { + op := &request.Operation{ + Name: opUnmonitorInstances, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &UnmonitorInstancesInput{} + } + + output = &UnmonitorInstancesOutput{} + req = c.newRequest(op, input, output) + return +} + +// UnmonitorInstances API operation for Amazon Elastic Compute Cloud. +// +// Disables detailed monitoring for a running instance. For more information, +// see Monitoring Your Instances and Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html) +// in the Amazon Elastic Compute Cloud User Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation UnmonitorInstances for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstances +func (c *EC2) UnmonitorInstances(input *UnmonitorInstancesInput) (*UnmonitorInstancesOutput, error) { + req, out := c.UnmonitorInstancesRequest(input) + return out, req.Send() +} + +// UnmonitorInstancesWithContext is the same as UnmonitorInstances with the addition of +// the ability to pass a context and additional request options. +// +// See UnmonitorInstances for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) UnmonitorInstancesWithContext(ctx aws.Context, input *UnmonitorInstancesInput, opts ...request.Option) (*UnmonitorInstancesOutput, error) { + req, out := c.UnmonitorInstancesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opUpdateSecurityGroupRuleDescriptionsEgress = "UpdateSecurityGroupRuleDescriptionsEgress" + +// UpdateSecurityGroupRuleDescriptionsEgressRequest generates a "aws/request.Request" representing the +// client's request for the UpdateSecurityGroupRuleDescriptionsEgress operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See UpdateSecurityGroupRuleDescriptionsEgress for more information on using the UpdateSecurityGroupRuleDescriptionsEgress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the UpdateSecurityGroupRuleDescriptionsEgressRequest method. +// req, resp := client.UpdateSecurityGroupRuleDescriptionsEgressRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsEgress +func (c *EC2) UpdateSecurityGroupRuleDescriptionsEgressRequest(input *UpdateSecurityGroupRuleDescriptionsEgressInput) (req *request.Request, output *UpdateSecurityGroupRuleDescriptionsEgressOutput) { + op := &request.Operation{ + Name: opUpdateSecurityGroupRuleDescriptionsEgress, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &UpdateSecurityGroupRuleDescriptionsEgressInput{} + } + + output = &UpdateSecurityGroupRuleDescriptionsEgressOutput{} + req = c.newRequest(op, input, output) + return +} + +// UpdateSecurityGroupRuleDescriptionsEgress API operation for Amazon Elastic Compute Cloud. +// +// [VPC only] Updates the description of an egress (outbound) security group +// rule. You can replace an existing description, or add a description to a +// rule that did not have one previously. +// +// You specify the description as part of the IP permissions structure. You +// can remove a description for a security group rule by omitting the description +// parameter in the request. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation UpdateSecurityGroupRuleDescriptionsEgress for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsEgress +func (c *EC2) UpdateSecurityGroupRuleDescriptionsEgress(input *UpdateSecurityGroupRuleDescriptionsEgressInput) (*UpdateSecurityGroupRuleDescriptionsEgressOutput, error) { + req, out := c.UpdateSecurityGroupRuleDescriptionsEgressRequest(input) + return out, req.Send() +} + +// UpdateSecurityGroupRuleDescriptionsEgressWithContext is the same as UpdateSecurityGroupRuleDescriptionsEgress with the addition of +// the ability to pass a context and additional request options. +// +// See UpdateSecurityGroupRuleDescriptionsEgress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) UpdateSecurityGroupRuleDescriptionsEgressWithContext(ctx aws.Context, input *UpdateSecurityGroupRuleDescriptionsEgressInput, opts ...request.Option) (*UpdateSecurityGroupRuleDescriptionsEgressOutput, error) { + req, out := c.UpdateSecurityGroupRuleDescriptionsEgressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opUpdateSecurityGroupRuleDescriptionsIngress = "UpdateSecurityGroupRuleDescriptionsIngress" + +// UpdateSecurityGroupRuleDescriptionsIngressRequest generates a "aws/request.Request" representing the +// client's request for the UpdateSecurityGroupRuleDescriptionsIngress operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See UpdateSecurityGroupRuleDescriptionsIngress for more information on using the UpdateSecurityGroupRuleDescriptionsIngress +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the UpdateSecurityGroupRuleDescriptionsIngressRequest method. +// req, resp := client.UpdateSecurityGroupRuleDescriptionsIngressRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsIngress +func (c *EC2) UpdateSecurityGroupRuleDescriptionsIngressRequest(input *UpdateSecurityGroupRuleDescriptionsIngressInput) (req *request.Request, output *UpdateSecurityGroupRuleDescriptionsIngressOutput) { + op := &request.Operation{ + Name: opUpdateSecurityGroupRuleDescriptionsIngress, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &UpdateSecurityGroupRuleDescriptionsIngressInput{} + } + + output = &UpdateSecurityGroupRuleDescriptionsIngressOutput{} + req = c.newRequest(op, input, output) + return +} + +// UpdateSecurityGroupRuleDescriptionsIngress API operation for Amazon Elastic Compute Cloud. +// +// Updates the description of an ingress (inbound) security group rule. You +// can replace an existing description, or add a description to a rule that +// did not have one previously. +// +// You specify the description as part of the IP permissions structure. You +// can remove a description for a security group rule by omitting the description +// parameter in the request. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation UpdateSecurityGroupRuleDescriptionsIngress for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsIngress +func (c *EC2) UpdateSecurityGroupRuleDescriptionsIngress(input *UpdateSecurityGroupRuleDescriptionsIngressInput) (*UpdateSecurityGroupRuleDescriptionsIngressOutput, error) { + req, out := c.UpdateSecurityGroupRuleDescriptionsIngressRequest(input) + return out, req.Send() +} + +// UpdateSecurityGroupRuleDescriptionsIngressWithContext is the same as UpdateSecurityGroupRuleDescriptionsIngress with the addition of +// the ability to pass a context and additional request options. +// +// See UpdateSecurityGroupRuleDescriptionsIngress for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) UpdateSecurityGroupRuleDescriptionsIngressWithContext(ctx aws.Context, input *UpdateSecurityGroupRuleDescriptionsIngressInput, opts ...request.Option) (*UpdateSecurityGroupRuleDescriptionsIngressOutput, error) { + req, out := c.UpdateSecurityGroupRuleDescriptionsIngressRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opWithdrawByoipCidr = "WithdrawByoipCidr" + +// WithdrawByoipCidrRequest generates a "aws/request.Request" representing the +// client's request for the WithdrawByoipCidr operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See WithdrawByoipCidr for more information on using the WithdrawByoipCidr +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the WithdrawByoipCidrRequest method. +// req, resp := client.WithdrawByoipCidrRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/WithdrawByoipCidr +func (c *EC2) WithdrawByoipCidrRequest(input *WithdrawByoipCidrInput) (req *request.Request, output *WithdrawByoipCidrOutput) { + op := &request.Operation{ + Name: opWithdrawByoipCidr, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &WithdrawByoipCidrInput{} + } + + output = &WithdrawByoipCidrOutput{} + req = c.newRequest(op, input, output) + return +} + +// WithdrawByoipCidr API operation for Amazon Elastic Compute Cloud. +// +// Stops advertising an IPv4 address range that is provisioned as an address +// pool. +// +// You can perform this operation at most once every 10 seconds, even if you +// specify different address ranges each time. +// +// It can take a few minutes before traffic to the specified addresses stops +// routing to AWS because of BGP propagation delays. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Amazon Elastic Compute Cloud's +// API operation WithdrawByoipCidr for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/WithdrawByoipCidr +func (c *EC2) WithdrawByoipCidr(input *WithdrawByoipCidrInput) (*WithdrawByoipCidrOutput, error) { + req, out := c.WithdrawByoipCidrRequest(input) + return out, req.Send() +} + +// WithdrawByoipCidrWithContext is the same as WithdrawByoipCidr with the addition of +// the ability to pass a context and additional request options. +// +// See WithdrawByoipCidr for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WithdrawByoipCidrWithContext(ctx aws.Context, input *WithdrawByoipCidrInput, opts ...request.Option) (*WithdrawByoipCidrOutput, error) { + req, out := c.WithdrawByoipCidrRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// Contains the parameters for accepting the quote. +type AcceptReservedInstancesExchangeQuoteInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IDs of the Convertible Reserved Instances to exchange for another Convertible + // Reserved Instance of the same or higher value. + // + // ReservedInstanceIds is a required field + ReservedInstanceIds []*string `locationName:"ReservedInstanceId" locationNameList:"ReservedInstanceId" type:"list" required:"true"` + + // The configuration of the target Convertible Reserved Instance to exchange + // for your current Convertible Reserved Instances. + TargetConfigurations []*TargetConfigurationRequest `locationName:"TargetConfiguration" locationNameList:"TargetConfigurationRequest" type:"list"` +} + +// String returns the string representation +func (s AcceptReservedInstancesExchangeQuoteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AcceptReservedInstancesExchangeQuoteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AcceptReservedInstancesExchangeQuoteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AcceptReservedInstancesExchangeQuoteInput"} + if s.ReservedInstanceIds == nil { + invalidParams.Add(request.NewErrParamRequired("ReservedInstanceIds")) + } + if s.TargetConfigurations != nil { + for i, v := range s.TargetConfigurations { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TargetConfigurations", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *AcceptReservedInstancesExchangeQuoteInput) SetDryRun(v bool) *AcceptReservedInstancesExchangeQuoteInput { + s.DryRun = &v + return s +} + +// SetReservedInstanceIds sets the ReservedInstanceIds field's value. +func (s *AcceptReservedInstancesExchangeQuoteInput) SetReservedInstanceIds(v []*string) *AcceptReservedInstancesExchangeQuoteInput { + s.ReservedInstanceIds = v + return s +} + +// SetTargetConfigurations sets the TargetConfigurations field's value. +func (s *AcceptReservedInstancesExchangeQuoteInput) SetTargetConfigurations(v []*TargetConfigurationRequest) *AcceptReservedInstancesExchangeQuoteInput { + s.TargetConfigurations = v + return s +} + +// The result of the exchange and whether it was successful. +type AcceptReservedInstancesExchangeQuoteOutput struct { + _ struct{} `type:"structure"` + + // The ID of the successful exchange. + ExchangeId *string `locationName:"exchangeId" type:"string"` +} + +// String returns the string representation +func (s AcceptReservedInstancesExchangeQuoteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AcceptReservedInstancesExchangeQuoteOutput) GoString() string { + return s.String() +} + +// SetExchangeId sets the ExchangeId field's value. +func (s *AcceptReservedInstancesExchangeQuoteOutput) SetExchangeId(v string) *AcceptReservedInstancesExchangeQuoteOutput { + s.ExchangeId = &v + return s +} + +type AcceptTransitGatewayVpcAttachmentInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the attachment. + // + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AcceptTransitGatewayVpcAttachmentInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AcceptTransitGatewayVpcAttachmentInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AcceptTransitGatewayVpcAttachmentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AcceptTransitGatewayVpcAttachmentInput"} + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *AcceptTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *AcceptTransitGatewayVpcAttachmentInput { + s.DryRun = &v + return s +} + +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *AcceptTransitGatewayVpcAttachmentInput) SetTransitGatewayAttachmentId(v string) *AcceptTransitGatewayVpcAttachmentInput { + s.TransitGatewayAttachmentId = &v + return s +} + +type AcceptTransitGatewayVpcAttachmentOutput struct { + _ struct{} `type:"structure"` + + // The VPC attachment. + TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` +} + +// String returns the string representation +func (s AcceptTransitGatewayVpcAttachmentOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AcceptTransitGatewayVpcAttachmentOutput) GoString() string { + return s.String() +} + +// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. +func (s *AcceptTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *AcceptTransitGatewayVpcAttachmentOutput { + s.TransitGatewayVpcAttachment = v + return s +} + +type AcceptVpcEndpointConnectionsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the endpoint service. + // + // ServiceId is a required field + ServiceId *string `type:"string" required:"true"` + + // The IDs of one or more interface VPC endpoints. + // + // VpcEndpointIds is a required field + VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s AcceptVpcEndpointConnectionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AcceptVpcEndpointConnectionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AcceptVpcEndpointConnectionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AcceptVpcEndpointConnectionsInput"} + if s.ServiceId == nil { + invalidParams.Add(request.NewErrParamRequired("ServiceId")) + } + if s.VpcEndpointIds == nil { + invalidParams.Add(request.NewErrParamRequired("VpcEndpointIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *AcceptVpcEndpointConnectionsInput) SetDryRun(v bool) *AcceptVpcEndpointConnectionsInput { + s.DryRun = &v + return s +} + +// SetServiceId sets the ServiceId field's value. +func (s *AcceptVpcEndpointConnectionsInput) SetServiceId(v string) *AcceptVpcEndpointConnectionsInput { + s.ServiceId = &v + return s +} + +// SetVpcEndpointIds sets the VpcEndpointIds field's value. +func (s *AcceptVpcEndpointConnectionsInput) SetVpcEndpointIds(v []*string) *AcceptVpcEndpointConnectionsInput { + s.VpcEndpointIds = v + return s +} + +type AcceptVpcEndpointConnectionsOutput struct { + _ struct{} `type:"structure"` + + // Information about the interface endpoints that were not accepted, if applicable. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s AcceptVpcEndpointConnectionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AcceptVpcEndpointConnectionsOutput) GoString() string { + return s.String() +} + +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *AcceptVpcEndpointConnectionsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *AcceptVpcEndpointConnectionsOutput { + s.Unsuccessful = v + return s +} + +type AcceptVpcPeeringConnectionInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the VPC peering connection. You must specify this parameter in + // the request. + VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` +} + +// String returns the string representation +func (s AcceptVpcPeeringConnectionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AcceptVpcPeeringConnectionInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *AcceptVpcPeeringConnectionInput) SetDryRun(v bool) *AcceptVpcPeeringConnectionInput { + s.DryRun = &v + return s +} + +// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. +func (s *AcceptVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *AcceptVpcPeeringConnectionInput { + s.VpcPeeringConnectionId = &v + return s +} + +type AcceptVpcPeeringConnectionOutput struct { + _ struct{} `type:"structure"` + + // Information about the VPC peering connection. + VpcPeeringConnection *VpcPeeringConnection `locationName:"vpcPeeringConnection" type:"structure"` +} + +// String returns the string representation +func (s AcceptVpcPeeringConnectionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AcceptVpcPeeringConnectionOutput) GoString() string { + return s.String() +} + +// SetVpcPeeringConnection sets the VpcPeeringConnection field's value. +func (s *AcceptVpcPeeringConnectionOutput) SetVpcPeeringConnection(v *VpcPeeringConnection) *AcceptVpcPeeringConnectionOutput { + s.VpcPeeringConnection = v + return s +} + +// Describes an account attribute. +type AccountAttribute struct { + _ struct{} `type:"structure"` + + // The name of the account attribute. + AttributeName *string `locationName:"attributeName" type:"string"` + + // The values for the account attribute. + AttributeValues []*AccountAttributeValue `locationName:"attributeValueSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s AccountAttribute) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AccountAttribute) GoString() string { + return s.String() +} + +// SetAttributeName sets the AttributeName field's value. +func (s *AccountAttribute) SetAttributeName(v string) *AccountAttribute { + s.AttributeName = &v + return s +} + +// SetAttributeValues sets the AttributeValues field's value. +func (s *AccountAttribute) SetAttributeValues(v []*AccountAttributeValue) *AccountAttribute { + s.AttributeValues = v + return s +} + +// Describes a value of an account attribute. +type AccountAttributeValue struct { + _ struct{} `type:"structure"` + + // The value of the attribute. + AttributeValue *string `locationName:"attributeValue" type:"string"` +} + +// String returns the string representation +func (s AccountAttributeValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AccountAttributeValue) GoString() string { + return s.String() +} + +// SetAttributeValue sets the AttributeValue field's value. +func (s *AccountAttributeValue) SetAttributeValue(v string) *AccountAttributeValue { + s.AttributeValue = &v + return s +} + +// Describes a running instance in a Spot Fleet. +type ActiveInstance struct { + _ struct{} `type:"structure"` + + // The health status of the instance. If the status of either the instance status + // check or the system status check is impaired, the health status of the instance + // is unhealthy. Otherwise, the health status is healthy. + InstanceHealth *string `locationName:"instanceHealth" type:"string" enum:"InstanceHealthStatus"` + + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` + + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string"` + + // The ID of the Spot Instance request. + SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` +} + +// String returns the string representation +func (s ActiveInstance) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ActiveInstance) GoString() string { + return s.String() +} + +// SetInstanceHealth sets the InstanceHealth field's value. +func (s *ActiveInstance) SetInstanceHealth(v string) *ActiveInstance { + s.InstanceHealth = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *ActiveInstance) SetInstanceId(v string) *ActiveInstance { + s.InstanceId = &v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *ActiveInstance) SetInstanceType(v string) *ActiveInstance { + s.InstanceType = &v + return s +} + +// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. +func (s *ActiveInstance) SetSpotInstanceRequestId(v string) *ActiveInstance { + s.SpotInstanceRequestId = &v + return s +} + +// Describes an Elastic IP address. +type Address struct { + _ struct{} `type:"structure"` + + // The ID representing the allocation of the address for use with EC2-VPC. + AllocationId *string `locationName:"allocationId" type:"string"` + + // The ID representing the association of the address with an instance in a + // VPC. + AssociationId *string `locationName:"associationId" type:"string"` + + // Indicates whether this Elastic IP address is for use with instances in EC2-Classic + // (standard) or instances in a VPC (vpc). + Domain *string `locationName:"domain" type:"string" enum:"DomainType"` + + // The ID of the instance that the address is associated with (if any). + InstanceId *string `locationName:"instanceId" type:"string"` + + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + + // The ID of the AWS account that owns the network interface. + NetworkInterfaceOwnerId *string `locationName:"networkInterfaceOwnerId" type:"string"` + + // The private IP address associated with the Elastic IP address. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + + // The Elastic IP address. + PublicIp *string `locationName:"publicIp" type:"string"` + + // The ID of an address pool. + PublicIpv4Pool *string `locationName:"publicIpv4Pool" type:"string"` + + // Any tags assigned to the Elastic IP address. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s Address) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Address) GoString() string { + return s.String() +} + +// SetAllocationId sets the AllocationId field's value. +func (s *Address) SetAllocationId(v string) *Address { + s.AllocationId = &v + return s +} + +// SetAssociationId sets the AssociationId field's value. +func (s *Address) SetAssociationId(v string) *Address { + s.AssociationId = &v + return s +} + +// SetDomain sets the Domain field's value. +func (s *Address) SetDomain(v string) *Address { + s.Domain = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *Address) SetInstanceId(v string) *Address { + s.InstanceId = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *Address) SetNetworkInterfaceId(v string) *Address { + s.NetworkInterfaceId = &v + return s +} + +// SetNetworkInterfaceOwnerId sets the NetworkInterfaceOwnerId field's value. +func (s *Address) SetNetworkInterfaceOwnerId(v string) *Address { + s.NetworkInterfaceOwnerId = &v + return s +} + +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *Address) SetPrivateIpAddress(v string) *Address { + s.PrivateIpAddress = &v + return s +} + +// SetPublicIp sets the PublicIp field's value. +func (s *Address) SetPublicIp(v string) *Address { + s.PublicIp = &v + return s +} + +// SetPublicIpv4Pool sets the PublicIpv4Pool field's value. +func (s *Address) SetPublicIpv4Pool(v string) *Address { + s.PublicIpv4Pool = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *Address) SetTags(v []*Tag) *Address { + s.Tags = v + return s +} + +type AdvertiseByoipCidrInput struct { + _ struct{} `type:"structure"` + + // The IPv4 address range, in CIDR notation. This must be the exact range that + // you provisioned. You can't advertise only a portion of the provisioned range. + // + // Cidr is a required field + Cidr *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s AdvertiseByoipCidrInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AdvertiseByoipCidrInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AdvertiseByoipCidrInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AdvertiseByoipCidrInput"} + if s.Cidr == nil { + invalidParams.Add(request.NewErrParamRequired("Cidr")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCidr sets the Cidr field's value. +func (s *AdvertiseByoipCidrInput) SetCidr(v string) *AdvertiseByoipCidrInput { + s.Cidr = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AdvertiseByoipCidrInput) SetDryRun(v bool) *AdvertiseByoipCidrInput { + s.DryRun = &v + return s +} + +type AdvertiseByoipCidrOutput struct { + _ struct{} `type:"structure"` + + // Information about the address range. + ByoipCidr *ByoipCidr `locationName:"byoipCidr" type:"structure"` +} + +// String returns the string representation +func (s AdvertiseByoipCidrOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AdvertiseByoipCidrOutput) GoString() string { + return s.String() +} + +// SetByoipCidr sets the ByoipCidr field's value. +func (s *AdvertiseByoipCidrOutput) SetByoipCidr(v *ByoipCidr) *AdvertiseByoipCidrOutput { + s.ByoipCidr = v + return s +} + +type AllocateAddressInput struct { + _ struct{} `type:"structure"` + + // [EC2-VPC] The Elastic IP address to recover or an IPv4 address from an address + // pool. + Address *string `type:"string"` + + // Set to vpc to allocate the address for use with instances in a VPC. + // + // Default: The address is for use with instances in EC2-Classic. + Domain *string `type:"string" enum:"DomainType"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of an address pool that you own. Use this parameter to let Amazon + // EC2 select an address from the address pool. To specify a specific address + // from the address pool, use the Address parameter instead. + PublicIpv4Pool *string `type:"string"` +} + +// String returns the string representation +func (s AllocateAddressInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AllocateAddressInput) GoString() string { + return s.String() +} + +// SetAddress sets the Address field's value. +func (s *AllocateAddressInput) SetAddress(v string) *AllocateAddressInput { + s.Address = &v + return s +} + +// SetDomain sets the Domain field's value. +func (s *AllocateAddressInput) SetDomain(v string) *AllocateAddressInput { + s.Domain = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AllocateAddressInput) SetDryRun(v bool) *AllocateAddressInput { + s.DryRun = &v + return s +} + +// SetPublicIpv4Pool sets the PublicIpv4Pool field's value. +func (s *AllocateAddressInput) SetPublicIpv4Pool(v string) *AllocateAddressInput { + s.PublicIpv4Pool = &v + return s +} + +type AllocateAddressOutput struct { + _ struct{} `type:"structure"` + + // [EC2-VPC] The ID that AWS assigns to represent the allocation of the Elastic + // IP address for use with instances in a VPC. + AllocationId *string `locationName:"allocationId" type:"string"` + + // Indicates whether this Elastic IP address is for use with instances in EC2-Classic + // (standard) or instances in a VPC (vpc). + Domain *string `locationName:"domain" type:"string" enum:"DomainType"` + + // The Elastic IP address. + PublicIp *string `locationName:"publicIp" type:"string"` + + // The ID of an address pool. + PublicIpv4Pool *string `locationName:"publicIpv4Pool" type:"string"` +} + +// String returns the string representation +func (s AllocateAddressOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AllocateAddressOutput) GoString() string { + return s.String() +} + +// SetAllocationId sets the AllocationId field's value. +func (s *AllocateAddressOutput) SetAllocationId(v string) *AllocateAddressOutput { + s.AllocationId = &v + return s +} + +// SetDomain sets the Domain field's value. +func (s *AllocateAddressOutput) SetDomain(v string) *AllocateAddressOutput { + s.Domain = &v + return s +} + +// SetPublicIp sets the PublicIp field's value. +func (s *AllocateAddressOutput) SetPublicIp(v string) *AllocateAddressOutput { + s.PublicIp = &v + return s +} + +// SetPublicIpv4Pool sets the PublicIpv4Pool field's value. +func (s *AllocateAddressOutput) SetPublicIpv4Pool(v string) *AllocateAddressOutput { + s.PublicIpv4Pool = &v + return s +} + +type AllocateHostsInput struct { + _ struct{} `type:"structure"` + + // Indicates whether the host accepts any untargeted instance launches that + // match its instance type configuration, or if it only accepts Host tenancy + // instance launches that specify its unique host ID. For more information, + // see Understanding Instance Placement and Host Affinity (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding) + // in the Amazon EC2 User Guide for Linux Instances. + // + // Default: on + AutoPlacement *string `locationName:"autoPlacement" type:"string" enum:"AutoPlacement"` + + // The Availability Zone in which to allocate the Dedicated Host. + // + // AvailabilityZone is a required field + AvailabilityZone *string `locationName:"availabilityZone" type:"string" required:"true"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` + + // Indicates whether to enable or disable host recovery for the Dedicated Host. + // Host recovery is disabled by default. For more information, see Host Recovery + // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html) + // in the Amazon Elastic Compute Cloud User Guide. + // + // Default: off + HostRecovery *string `type:"string" enum:"HostRecovery"` + + // Specifies the instance family to be supported by the Dedicated Hosts. If + // you specify an instance family, the Dedicated Hosts support multiple instance + // types within that instance family. + // + // If you want the Dedicated Hosts to support a specific instance type only, + // omit this parameter and specify InstanceType instead. You cannot specify + // InstanceFamily and InstanceType in the same request. + InstanceFamily *string `type:"string"` + + // Specifies the instance type to be supported by the Dedicated Hosts. If you + // specify an instance type, the Dedicated Hosts support instances of the specified + // instance type only. + // + // If you want the Dedicated Hosts to support multiple instance types in a specific + // instance family, omit this parameter and specify InstanceFamily instead. + // You cannot specify InstanceType and InstanceFamily in the same request. + InstanceType *string `locationName:"instanceType" type:"string"` + + // The number of Dedicated Hosts to allocate to your account with these parameters. + // + // Quantity is a required field + Quantity *int64 `locationName:"quantity" type:"integer" required:"true"` + + // The tags to apply to the Dedicated Host during creation. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s AllocateHostsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AllocateHostsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AllocateHostsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AllocateHostsInput"} + if s.AvailabilityZone == nil { + invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) + } + if s.Quantity == nil { + invalidParams.Add(request.NewErrParamRequired("Quantity")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAutoPlacement sets the AutoPlacement field's value. +func (s *AllocateHostsInput) SetAutoPlacement(v string) *AllocateHostsInput { + s.AutoPlacement = &v + return s +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *AllocateHostsInput) SetAvailabilityZone(v string) *AllocateHostsInput { + s.AvailabilityZone = &v + return s +} + +// SetClientToken sets the ClientToken field's value. +func (s *AllocateHostsInput) SetClientToken(v string) *AllocateHostsInput { + s.ClientToken = &v + return s +} + +// SetHostRecovery sets the HostRecovery field's value. +func (s *AllocateHostsInput) SetHostRecovery(v string) *AllocateHostsInput { + s.HostRecovery = &v + return s +} + +// SetInstanceFamily sets the InstanceFamily field's value. +func (s *AllocateHostsInput) SetInstanceFamily(v string) *AllocateHostsInput { + s.InstanceFamily = &v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *AllocateHostsInput) SetInstanceType(v string) *AllocateHostsInput { + s.InstanceType = &v + return s +} + +// SetQuantity sets the Quantity field's value. +func (s *AllocateHostsInput) SetQuantity(v int64) *AllocateHostsInput { + s.Quantity = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *AllocateHostsInput) SetTagSpecifications(v []*TagSpecification) *AllocateHostsInput { + s.TagSpecifications = v + return s +} + +// Contains the output of AllocateHosts. +type AllocateHostsOutput struct { + _ struct{} `type:"structure"` + + // The ID of the allocated Dedicated Host. This is used to launch an instance + // onto a specific host. + HostIds []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s AllocateHostsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AllocateHostsOutput) GoString() string { + return s.String() +} + +// SetHostIds sets the HostIds field's value. +func (s *AllocateHostsOutput) SetHostIds(v []*string) *AllocateHostsOutput { + s.HostIds = v + return s +} + +// Describes a principal. +type AllowedPrincipal struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the principal. + Principal *string `locationName:"principal" type:"string"` + + // The type of principal. + PrincipalType *string `locationName:"principalType" type:"string" enum:"PrincipalType"` +} + +// String returns the string representation +func (s AllowedPrincipal) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AllowedPrincipal) GoString() string { + return s.String() +} + +// SetPrincipal sets the Principal field's value. +func (s *AllowedPrincipal) SetPrincipal(v string) *AllowedPrincipal { + s.Principal = &v + return s +} + +// SetPrincipalType sets the PrincipalType field's value. +func (s *AllowedPrincipal) SetPrincipalType(v string) *AllowedPrincipal { + s.PrincipalType = &v + return s +} + +type ApplySecurityGroupsToClientVpnTargetNetworkInput struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN endpoint. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IDs of the security groups to apply to the associated target network. + // Up to 5 security groups can be applied to an associated target network. + // + // SecurityGroupIds is a required field + SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"item" type:"list" required:"true"` + + // The ID of the VPC in which the associated target network is located. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s ApplySecurityGroupsToClientVpnTargetNetworkInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ApplySecurityGroupsToClientVpnTargetNetworkInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ApplySecurityGroupsToClientVpnTargetNetworkInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.SecurityGroupIds == nil { + invalidParams.Add(request.NewErrParamRequired("SecurityGroupIds")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) SetClientVpnEndpointId(v string) *ApplySecurityGroupsToClientVpnTargetNetworkInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) SetDryRun(v bool) *ApplySecurityGroupsToClientVpnTargetNetworkInput { + s.DryRun = &v + return s +} + +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) SetSecurityGroupIds(v []*string) *ApplySecurityGroupsToClientVpnTargetNetworkInput { + s.SecurityGroupIds = v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *ApplySecurityGroupsToClientVpnTargetNetworkInput) SetVpcId(v string) *ApplySecurityGroupsToClientVpnTargetNetworkInput { + s.VpcId = &v + return s +} + +type ApplySecurityGroupsToClientVpnTargetNetworkOutput struct { + _ struct{} `type:"structure"` + + // The IDs of the applied security groups. + SecurityGroupIds []*string `locationName:"securityGroupIds" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s ApplySecurityGroupsToClientVpnTargetNetworkOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ApplySecurityGroupsToClientVpnTargetNetworkOutput) GoString() string { + return s.String() +} + +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *ApplySecurityGroupsToClientVpnTargetNetworkOutput) SetSecurityGroupIds(v []*string) *ApplySecurityGroupsToClientVpnTargetNetworkOutput { + s.SecurityGroupIds = v + return s +} + +type AssignIpv6AddressesInput struct { + _ struct{} `type:"structure"` + + // The number of IPv6 addresses to assign to the network interface. Amazon EC2 + // automatically selects the IPv6 addresses from the subnet range. You can't + // use this option if specifying specific IPv6 addresses. + Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` + + // One or more specific IPv6 addresses to be assigned to the network interface. + // You can't use this option if you're specifying a number of IPv6 addresses. + Ipv6Addresses []*string `locationName:"ipv6Addresses" locationNameList:"item" type:"list"` + + // The ID of the network interface. + // + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` +} + +// String returns the string representation +func (s AssignIpv6AddressesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssignIpv6AddressesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssignIpv6AddressesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssignIpv6AddressesInput"} + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetIpv6AddressCount sets the Ipv6AddressCount field's value. +func (s *AssignIpv6AddressesInput) SetIpv6AddressCount(v int64) *AssignIpv6AddressesInput { + s.Ipv6AddressCount = &v + return s +} + +// SetIpv6Addresses sets the Ipv6Addresses field's value. +func (s *AssignIpv6AddressesInput) SetIpv6Addresses(v []*string) *AssignIpv6AddressesInput { + s.Ipv6Addresses = v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *AssignIpv6AddressesInput) SetNetworkInterfaceId(v string) *AssignIpv6AddressesInput { + s.NetworkInterfaceId = &v + return s +} + +type AssignIpv6AddressesOutput struct { + _ struct{} `type:"structure"` + + // The IPv6 addresses assigned to the network interface. + AssignedIpv6Addresses []*string `locationName:"assignedIpv6Addresses" locationNameList:"item" type:"list"` + + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` +} + +// String returns the string representation +func (s AssignIpv6AddressesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssignIpv6AddressesOutput) GoString() string { + return s.String() +} + +// SetAssignedIpv6Addresses sets the AssignedIpv6Addresses field's value. +func (s *AssignIpv6AddressesOutput) SetAssignedIpv6Addresses(v []*string) *AssignIpv6AddressesOutput { + s.AssignedIpv6Addresses = v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *AssignIpv6AddressesOutput) SetNetworkInterfaceId(v string) *AssignIpv6AddressesOutput { + s.NetworkInterfaceId = &v + return s +} + +// Contains the parameters for AssignPrivateIpAddresses. +type AssignPrivateIpAddressesInput struct { + _ struct{} `type:"structure"` + + // Indicates whether to allow an IP address that is already assigned to another + // network interface or instance to be reassigned to the specified network interface. + AllowReassignment *bool `locationName:"allowReassignment" type:"boolean"` + + // The ID of the network interface. + // + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` + + // One or more IP addresses to be assigned as a secondary private IP address + // to the network interface. You can't specify this parameter when also specifying + // a number of secondary IP addresses. + // + // If you don't specify an IP address, Amazon EC2 automatically selects an IP + // address within the subnet range. + PrivateIpAddresses []*string `locationName:"privateIpAddress" locationNameList:"PrivateIpAddress" type:"list"` + + // The number of secondary IP addresses to assign to the network interface. + // You can't specify this parameter when also specifying private IP addresses. + SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` +} + +// String returns the string representation +func (s AssignPrivateIpAddressesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssignPrivateIpAddressesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssignPrivateIpAddressesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssignPrivateIpAddressesInput"} + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAllowReassignment sets the AllowReassignment field's value. +func (s *AssignPrivateIpAddressesInput) SetAllowReassignment(v bool) *AssignPrivateIpAddressesInput { + s.AllowReassignment = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *AssignPrivateIpAddressesInput) SetNetworkInterfaceId(v string) *AssignPrivateIpAddressesInput { + s.NetworkInterfaceId = &v + return s +} + +// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. +func (s *AssignPrivateIpAddressesInput) SetPrivateIpAddresses(v []*string) *AssignPrivateIpAddressesInput { + s.PrivateIpAddresses = v + return s +} + +// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. +func (s *AssignPrivateIpAddressesInput) SetSecondaryPrivateIpAddressCount(v int64) *AssignPrivateIpAddressesInput { + s.SecondaryPrivateIpAddressCount = &v + return s +} + +type AssignPrivateIpAddressesOutput struct { + _ struct{} `type:"structure"` + + // The private IP addresses assigned to the network interface. + AssignedPrivateIpAddresses []*AssignedPrivateIpAddress `locationName:"assignedPrivateIpAddressesSet" locationNameList:"item" type:"list"` + + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` +} + +// String returns the string representation +func (s AssignPrivateIpAddressesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssignPrivateIpAddressesOutput) GoString() string { + return s.String() +} + +// SetAssignedPrivateIpAddresses sets the AssignedPrivateIpAddresses field's value. +func (s *AssignPrivateIpAddressesOutput) SetAssignedPrivateIpAddresses(v []*AssignedPrivateIpAddress) *AssignPrivateIpAddressesOutput { + s.AssignedPrivateIpAddresses = v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *AssignPrivateIpAddressesOutput) SetNetworkInterfaceId(v string) *AssignPrivateIpAddressesOutput { + s.NetworkInterfaceId = &v + return s +} + +// Describes the private IP addresses assigned to a network interface. +type AssignedPrivateIpAddress struct { + _ struct{} `type:"structure"` + + // The private IP address assigned to the network interface. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` +} + +// String returns the string representation +func (s AssignedPrivateIpAddress) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssignedPrivateIpAddress) GoString() string { + return s.String() +} + +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *AssignedPrivateIpAddress) SetPrivateIpAddress(v string) *AssignedPrivateIpAddress { + s.PrivateIpAddress = &v + return s +} + +type AssociateAddressInput struct { + _ struct{} `type:"structure"` + + // [EC2-VPC] The allocation ID. This is required for EC2-VPC. + AllocationId *string `type:"string"` + + // [EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an Elastic + // IP address that is already associated with an instance or network interface + // to be reassociated with the specified instance or network interface. Otherwise, + // the operation fails. In a VPC in an EC2-VPC-only account, reassociation is + // automatic, therefore you can specify false to ensure the operation fails + // if the Elastic IP address is already associated with another resource. + AllowReassociation *bool `locationName:"allowReassociation" type:"boolean"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the instance. This is required for EC2-Classic. For EC2-VPC, you + // can specify either the instance ID or the network interface ID, but not both. + // The operation fails if you specify an instance ID unless exactly one network + // interface is attached. + InstanceId *string `type:"string"` + + // [EC2-VPC] The ID of the network interface. If the instance has more than + // one network interface, you must specify a network interface ID. + // + // For EC2-VPC, you can specify either the instance ID or the network interface + // ID, but not both. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + + // [EC2-VPC] The primary or secondary private IP address to associate with the + // Elastic IP address. If no private IP address is specified, the Elastic IP + // address is associated with the primary private IP address. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + + // The Elastic IP address to associate with the instance. This is required for + // EC2-Classic. + PublicIp *string `type:"string"` +} + +// String returns the string representation +func (s AssociateAddressInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateAddressInput) GoString() string { + return s.String() +} + +// SetAllocationId sets the AllocationId field's value. +func (s *AssociateAddressInput) SetAllocationId(v string) *AssociateAddressInput { + s.AllocationId = &v + return s +} + +// SetAllowReassociation sets the AllowReassociation field's value. +func (s *AssociateAddressInput) SetAllowReassociation(v bool) *AssociateAddressInput { + s.AllowReassociation = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AssociateAddressInput) SetDryRun(v bool) *AssociateAddressInput { + s.DryRun = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *AssociateAddressInput) SetInstanceId(v string) *AssociateAddressInput { + s.InstanceId = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *AssociateAddressInput) SetNetworkInterfaceId(v string) *AssociateAddressInput { + s.NetworkInterfaceId = &v + return s +} + +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *AssociateAddressInput) SetPrivateIpAddress(v string) *AssociateAddressInput { + s.PrivateIpAddress = &v + return s +} + +// SetPublicIp sets the PublicIp field's value. +func (s *AssociateAddressInput) SetPublicIp(v string) *AssociateAddressInput { + s.PublicIp = &v + return s +} + +type AssociateAddressOutput struct { + _ struct{} `type:"structure"` + + // [EC2-VPC] The ID that represents the association of the Elastic IP address + // with an instance. + AssociationId *string `locationName:"associationId" type:"string"` +} + +// String returns the string representation +func (s AssociateAddressOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateAddressOutput) GoString() string { + return s.String() +} + +// SetAssociationId sets the AssociationId field's value. +func (s *AssociateAddressOutput) SetAssociationId(v string) *AssociateAddressOutput { + s.AssociationId = &v + return s +} + +type AssociateClientVpnTargetNetworkInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // The ID of the Client VPN endpoint. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the subnet to associate with the Client VPN endpoint. + // + // SubnetId is a required field + SubnetId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AssociateClientVpnTargetNetworkInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateClientVpnTargetNetworkInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssociateClientVpnTargetNetworkInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssociateClientVpnTargetNetworkInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.SubnetId == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *AssociateClientVpnTargetNetworkInput) SetClientToken(v string) *AssociateClientVpnTargetNetworkInput { + s.ClientToken = &v + return s +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *AssociateClientVpnTargetNetworkInput) SetClientVpnEndpointId(v string) *AssociateClientVpnTargetNetworkInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AssociateClientVpnTargetNetworkInput) SetDryRun(v bool) *AssociateClientVpnTargetNetworkInput { + s.DryRun = &v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *AssociateClientVpnTargetNetworkInput) SetSubnetId(v string) *AssociateClientVpnTargetNetworkInput { + s.SubnetId = &v + return s +} + +type AssociateClientVpnTargetNetworkOutput struct { + _ struct{} `type:"structure"` + + // The unique ID of the target network association. + AssociationId *string `locationName:"associationId" type:"string"` + + // The current state of the target network association. + Status *AssociationStatus `locationName:"status" type:"structure"` +} + +// String returns the string representation +func (s AssociateClientVpnTargetNetworkOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateClientVpnTargetNetworkOutput) GoString() string { + return s.String() +} + +// SetAssociationId sets the AssociationId field's value. +func (s *AssociateClientVpnTargetNetworkOutput) SetAssociationId(v string) *AssociateClientVpnTargetNetworkOutput { + s.AssociationId = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *AssociateClientVpnTargetNetworkOutput) SetStatus(v *AssociationStatus) *AssociateClientVpnTargetNetworkOutput { + s.Status = v + return s +} + +type AssociateDhcpOptionsInput struct { + _ struct{} `type:"structure"` + + // The ID of the DHCP options set, or default to associate no DHCP options with + // the VPC. + // + // DhcpOptionsId is a required field + DhcpOptionsId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AssociateDhcpOptionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateDhcpOptionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssociateDhcpOptionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssociateDhcpOptionsInput"} + if s.DhcpOptionsId == nil { + invalidParams.Add(request.NewErrParamRequired("DhcpOptionsId")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDhcpOptionsId sets the DhcpOptionsId field's value. +func (s *AssociateDhcpOptionsInput) SetDhcpOptionsId(v string) *AssociateDhcpOptionsInput { + s.DhcpOptionsId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AssociateDhcpOptionsInput) SetDryRun(v bool) *AssociateDhcpOptionsInput { + s.DryRun = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *AssociateDhcpOptionsInput) SetVpcId(v string) *AssociateDhcpOptionsInput { + s.VpcId = &v + return s +} + +type AssociateDhcpOptionsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s AssociateDhcpOptionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateDhcpOptionsOutput) GoString() string { + return s.String() +} + +type AssociateIamInstanceProfileInput struct { + _ struct{} `type:"structure"` + + // The IAM instance profile. + // + // IamInstanceProfile is a required field + IamInstanceProfile *IamInstanceProfileSpecification `type:"structure" required:"true"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AssociateIamInstanceProfileInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateIamInstanceProfileInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssociateIamInstanceProfileInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssociateIamInstanceProfileInput"} + if s.IamInstanceProfile == nil { + invalidParams.Add(request.NewErrParamRequired("IamInstanceProfile")) + } + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *AssociateIamInstanceProfileInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *AssociateIamInstanceProfileInput { + s.IamInstanceProfile = v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *AssociateIamInstanceProfileInput) SetInstanceId(v string) *AssociateIamInstanceProfileInput { + s.InstanceId = &v + return s +} + +type AssociateIamInstanceProfileOutput struct { + _ struct{} `type:"structure"` + + // Information about the IAM instance profile association. + IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` +} + +// String returns the string representation +func (s AssociateIamInstanceProfileOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateIamInstanceProfileOutput) GoString() string { + return s.String() +} + +// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. +func (s *AssociateIamInstanceProfileOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *AssociateIamInstanceProfileOutput { + s.IamInstanceProfileAssociation = v + return s +} + +type AssociateRouteTableInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the route table. + // + // RouteTableId is a required field + RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` + + // The ID of the subnet. + // + // SubnetId is a required field + SubnetId *string `locationName:"subnetId" type:"string" required:"true"` +} + +// String returns the string representation +func (s AssociateRouteTableInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateRouteTableInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssociateRouteTableInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssociateRouteTableInput"} + if s.RouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("RouteTableId")) + } + if s.SubnetId == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *AssociateRouteTableInput) SetDryRun(v bool) *AssociateRouteTableInput { + s.DryRun = &v + return s +} + +// SetRouteTableId sets the RouteTableId field's value. +func (s *AssociateRouteTableInput) SetRouteTableId(v string) *AssociateRouteTableInput { + s.RouteTableId = &v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *AssociateRouteTableInput) SetSubnetId(v string) *AssociateRouteTableInput { + s.SubnetId = &v + return s +} + +type AssociateRouteTableOutput struct { + _ struct{} `type:"structure"` + + // The route table association ID. This ID is required for disassociating the + // route table. + AssociationId *string `locationName:"associationId" type:"string"` +} + +// String returns the string representation +func (s AssociateRouteTableOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateRouteTableOutput) GoString() string { + return s.String() +} + +// SetAssociationId sets the AssociationId field's value. +func (s *AssociateRouteTableOutput) SetAssociationId(v string) *AssociateRouteTableOutput { + s.AssociationId = &v + return s +} + +type AssociateSubnetCidrBlockInput struct { + _ struct{} `type:"structure"` + + // The IPv6 CIDR block for your subnet. The subnet must have a /64 prefix length. + // + // Ipv6CidrBlock is a required field + Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string" required:"true"` + + // The ID of your subnet. + // + // SubnetId is a required field + SubnetId *string `locationName:"subnetId" type:"string" required:"true"` +} + +// String returns the string representation +func (s AssociateSubnetCidrBlockInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateSubnetCidrBlockInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssociateSubnetCidrBlockInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssociateSubnetCidrBlockInput"} + if s.Ipv6CidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("Ipv6CidrBlock")) + } + if s.SubnetId == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. +func (s *AssociateSubnetCidrBlockInput) SetIpv6CidrBlock(v string) *AssociateSubnetCidrBlockInput { + s.Ipv6CidrBlock = &v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *AssociateSubnetCidrBlockInput) SetSubnetId(v string) *AssociateSubnetCidrBlockInput { + s.SubnetId = &v + return s +} + +type AssociateSubnetCidrBlockOutput struct { + _ struct{} `type:"structure"` + + // Information about the IPv6 CIDR block association. + Ipv6CidrBlockAssociation *SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` + + // The ID of the subnet. + SubnetId *string `locationName:"subnetId" type:"string"` +} + +// String returns the string representation +func (s AssociateSubnetCidrBlockOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateSubnetCidrBlockOutput) GoString() string { + return s.String() +} + +// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. +func (s *AssociateSubnetCidrBlockOutput) SetIpv6CidrBlockAssociation(v *SubnetIpv6CidrBlockAssociation) *AssociateSubnetCidrBlockOutput { + s.Ipv6CidrBlockAssociation = v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *AssociateSubnetCidrBlockOutput) SetSubnetId(v string) *AssociateSubnetCidrBlockOutput { + s.SubnetId = &v + return s +} + +type AssociateTransitGatewayRouteTableInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the attachment. + // + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` + + // The ID of the transit gateway route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AssociateTransitGatewayRouteTableInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateTransitGatewayRouteTableInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssociateTransitGatewayRouteTableInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssociateTransitGatewayRouteTableInput"} + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *AssociateTransitGatewayRouteTableInput) SetDryRun(v bool) *AssociateTransitGatewayRouteTableInput { + s.DryRun = &v + return s +} + +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *AssociateTransitGatewayRouteTableInput) SetTransitGatewayAttachmentId(v string) *AssociateTransitGatewayRouteTableInput { + s.TransitGatewayAttachmentId = &v + return s +} + +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *AssociateTransitGatewayRouteTableInput) SetTransitGatewayRouteTableId(v string) *AssociateTransitGatewayRouteTableInput { + s.TransitGatewayRouteTableId = &v + return s +} + +type AssociateTransitGatewayRouteTableOutput struct { + _ struct{} `type:"structure"` + + // The ID of the association. + Association *TransitGatewayAssociation `locationName:"association" type:"structure"` +} + +// String returns the string representation +func (s AssociateTransitGatewayRouteTableOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateTransitGatewayRouteTableOutput) GoString() string { + return s.String() +} + +// SetAssociation sets the Association field's value. +func (s *AssociateTransitGatewayRouteTableOutput) SetAssociation(v *TransitGatewayAssociation) *AssociateTransitGatewayRouteTableOutput { + s.Association = v + return s +} + +type AssociateVpcCidrBlockInput struct { + _ struct{} `type:"structure"` + + // Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for + // the VPC. You cannot specify the range of IPv6 addresses, or the size of the + // CIDR block. + AmazonProvidedIpv6CidrBlock *bool `locationName:"amazonProvidedIpv6CidrBlock" type:"boolean"` + + // An IPv4 CIDR block to associate with the VPC. + CidrBlock *string `type:"string"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` +} + +// String returns the string representation +func (s AssociateVpcCidrBlockInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateVpcCidrBlockInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AssociateVpcCidrBlockInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AssociateVpcCidrBlockInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAmazonProvidedIpv6CidrBlock sets the AmazonProvidedIpv6CidrBlock field's value. +func (s *AssociateVpcCidrBlockInput) SetAmazonProvidedIpv6CidrBlock(v bool) *AssociateVpcCidrBlockInput { + s.AmazonProvidedIpv6CidrBlock = &v + return s +} + +// SetCidrBlock sets the CidrBlock field's value. +func (s *AssociateVpcCidrBlockInput) SetCidrBlock(v string) *AssociateVpcCidrBlockInput { + s.CidrBlock = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *AssociateVpcCidrBlockInput) SetVpcId(v string) *AssociateVpcCidrBlockInput { + s.VpcId = &v + return s +} + +type AssociateVpcCidrBlockOutput struct { + _ struct{} `type:"structure"` + + // Information about the IPv4 CIDR block association. + CidrBlockAssociation *VpcCidrBlockAssociation `locationName:"cidrBlockAssociation" type:"structure"` + + // Information about the IPv6 CIDR block association. + Ipv6CidrBlockAssociation *VpcIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` + + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` +} + +// String returns the string representation +func (s AssociateVpcCidrBlockOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociateVpcCidrBlockOutput) GoString() string { + return s.String() +} + +// SetCidrBlockAssociation sets the CidrBlockAssociation field's value. +func (s *AssociateVpcCidrBlockOutput) SetCidrBlockAssociation(v *VpcCidrBlockAssociation) *AssociateVpcCidrBlockOutput { + s.CidrBlockAssociation = v + return s +} + +// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. +func (s *AssociateVpcCidrBlockOutput) SetIpv6CidrBlockAssociation(v *VpcIpv6CidrBlockAssociation) *AssociateVpcCidrBlockOutput { + s.Ipv6CidrBlockAssociation = v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *AssociateVpcCidrBlockOutput) SetVpcId(v string) *AssociateVpcCidrBlockOutput { + s.VpcId = &v + return s +} + +// Describes a target network that is associated with a Client VPN endpoint. +// A target network is a subnet in a VPC. +type AssociatedTargetNetwork struct { + _ struct{} `type:"structure"` + + // The ID of the subnet. + NetworkId *string `locationName:"networkId" type:"string"` + + // The target network type. + NetworkType *string `locationName:"networkType" type:"string" enum:"AssociatedNetworkType"` +} + +// String returns the string representation +func (s AssociatedTargetNetwork) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociatedTargetNetwork) GoString() string { + return s.String() +} + +// SetNetworkId sets the NetworkId field's value. +func (s *AssociatedTargetNetwork) SetNetworkId(v string) *AssociatedTargetNetwork { + s.NetworkId = &v + return s +} + +// SetNetworkType sets the NetworkType field's value. +func (s *AssociatedTargetNetwork) SetNetworkType(v string) *AssociatedTargetNetwork { + s.NetworkType = &v + return s +} + +// Describes the state of a target network association. +type AssociationStatus struct { + _ struct{} `type:"structure"` + + // The state of the target network association. + Code *string `locationName:"code" type:"string" enum:"AssociationStatusCode"` + + // A message about the status of the target network association, if applicable. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s AssociationStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AssociationStatus) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *AssociationStatus) SetCode(v string) *AssociationStatus { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *AssociationStatus) SetMessage(v string) *AssociationStatus { + s.Message = &v + return s +} + +type AttachClassicLinkVpcInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of one or more of the VPC's security groups. You cannot specify security + // groups from a different VPC. + // + // Groups is a required field + Groups []*string `locationName:"SecurityGroupId" locationNameList:"groupId" type:"list" required:"true"` + + // The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC. + // + // InstanceId is a required field + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + + // The ID of a ClassicLink-enabled VPC. + // + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` +} + +// String returns the string representation +func (s AttachClassicLinkVpcInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachClassicLinkVpcInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AttachClassicLinkVpcInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AttachClassicLinkVpcInput"} + if s.Groups == nil { + invalidParams.Add(request.NewErrParamRequired("Groups")) + } + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *AttachClassicLinkVpcInput) SetDryRun(v bool) *AttachClassicLinkVpcInput { + s.DryRun = &v + return s +} + +// SetGroups sets the Groups field's value. +func (s *AttachClassicLinkVpcInput) SetGroups(v []*string) *AttachClassicLinkVpcInput { + s.Groups = v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *AttachClassicLinkVpcInput) SetInstanceId(v string) *AttachClassicLinkVpcInput { + s.InstanceId = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *AttachClassicLinkVpcInput) SetVpcId(v string) *AttachClassicLinkVpcInput { + s.VpcId = &v + return s +} + +type AttachClassicLinkVpcOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s AttachClassicLinkVpcOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachClassicLinkVpcOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *AttachClassicLinkVpcOutput) SetReturn(v bool) *AttachClassicLinkVpcOutput { + s.Return = &v + return s +} + +type AttachInternetGatewayInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the internet gateway. + // + // InternetGatewayId is a required field + InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` +} + +// String returns the string representation +func (s AttachInternetGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachInternetGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AttachInternetGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AttachInternetGatewayInput"} + if s.InternetGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *AttachInternetGatewayInput) SetDryRun(v bool) *AttachInternetGatewayInput { + s.DryRun = &v + return s +} + +// SetInternetGatewayId sets the InternetGatewayId field's value. +func (s *AttachInternetGatewayInput) SetInternetGatewayId(v string) *AttachInternetGatewayInput { + s.InternetGatewayId = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *AttachInternetGatewayInput) SetVpcId(v string) *AttachInternetGatewayInput { + s.VpcId = &v + return s +} + +type AttachInternetGatewayOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s AttachInternetGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachInternetGatewayOutput) GoString() string { + return s.String() +} + +// Contains the parameters for AttachNetworkInterface. +type AttachNetworkInterfaceInput struct { + _ struct{} `type:"structure"` + + // The index of the device for the network interface attachment. + // + // DeviceIndex is a required field + DeviceIndex *int64 `locationName:"deviceIndex" type:"integer" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + + // The ID of the network interface. + // + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` +} + +// String returns the string representation +func (s AttachNetworkInterfaceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachNetworkInterfaceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AttachNetworkInterfaceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AttachNetworkInterfaceInput"} + if s.DeviceIndex == nil { + invalidParams.Add(request.NewErrParamRequired("DeviceIndex")) + } + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDeviceIndex sets the DeviceIndex field's value. +func (s *AttachNetworkInterfaceInput) SetDeviceIndex(v int64) *AttachNetworkInterfaceInput { + s.DeviceIndex = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AttachNetworkInterfaceInput) SetDryRun(v bool) *AttachNetworkInterfaceInput { + s.DryRun = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *AttachNetworkInterfaceInput) SetInstanceId(v string) *AttachNetworkInterfaceInput { + s.InstanceId = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *AttachNetworkInterfaceInput) SetNetworkInterfaceId(v string) *AttachNetworkInterfaceInput { + s.NetworkInterfaceId = &v + return s +} + +// Contains the output of AttachNetworkInterface. +type AttachNetworkInterfaceOutput struct { + _ struct{} `type:"structure"` + + // The ID of the network interface attachment. + AttachmentId *string `locationName:"attachmentId" type:"string"` +} + +// String returns the string representation +func (s AttachNetworkInterfaceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachNetworkInterfaceOutput) GoString() string { + return s.String() +} + +// SetAttachmentId sets the AttachmentId field's value. +func (s *AttachNetworkInterfaceOutput) SetAttachmentId(v string) *AttachNetworkInterfaceOutput { + s.AttachmentId = &v + return s +} + +type AttachVolumeInput struct { + _ struct{} `type:"structure"` + + // The device name (for example, /dev/sdh or xvdh). + // + // Device is a required field + Device *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` + + // The ID of the EBS volume. The volume and instance must be within the same + // Availability Zone. + // + // VolumeId is a required field + VolumeId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AttachVolumeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachVolumeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AttachVolumeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AttachVolumeInput"} + if s.Device == nil { + invalidParams.Add(request.NewErrParamRequired("Device")) + } + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + if s.VolumeId == nil { + invalidParams.Add(request.NewErrParamRequired("VolumeId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDevice sets the Device field's value. +func (s *AttachVolumeInput) SetDevice(v string) *AttachVolumeInput { + s.Device = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AttachVolumeInput) SetDryRun(v bool) *AttachVolumeInput { + s.DryRun = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *AttachVolumeInput) SetInstanceId(v string) *AttachVolumeInput { + s.InstanceId = &v + return s +} + +// SetVolumeId sets the VolumeId field's value. +func (s *AttachVolumeInput) SetVolumeId(v string) *AttachVolumeInput { + s.VolumeId = &v + return s +} + +// Contains the parameters for AttachVpnGateway. +type AttachVpnGatewayInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` + + // The ID of the virtual private gateway. + // + // VpnGatewayId is a required field + VpnGatewayId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AttachVpnGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachVpnGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AttachVpnGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AttachVpnGatewayInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + if s.VpnGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *AttachVpnGatewayInput) SetDryRun(v bool) *AttachVpnGatewayInput { + s.DryRun = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *AttachVpnGatewayInput) SetVpcId(v string) *AttachVpnGatewayInput { + s.VpcId = &v + return s +} + +// SetVpnGatewayId sets the VpnGatewayId field's value. +func (s *AttachVpnGatewayInput) SetVpnGatewayId(v string) *AttachVpnGatewayInput { + s.VpnGatewayId = &v + return s +} + +// Contains the output of AttachVpnGateway. +type AttachVpnGatewayOutput struct { + _ struct{} `type:"structure"` + + // Information about the attachment. + VpcAttachment *VpcAttachment `locationName:"attachment" type:"structure"` +} + +// String returns the string representation +func (s AttachVpnGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttachVpnGatewayOutput) GoString() string { + return s.String() +} + +// SetVpcAttachment sets the VpcAttachment field's value. +func (s *AttachVpnGatewayOutput) SetVpcAttachment(v *VpcAttachment) *AttachVpnGatewayOutput { + s.VpcAttachment = v + return s +} + +// Describes a value for a resource attribute that is a Boolean value. +type AttributeBooleanValue struct { + _ struct{} `type:"structure"` + + // The attribute value. The valid values are true or false. + Value *bool `locationName:"value" type:"boolean"` +} + +// String returns the string representation +func (s AttributeBooleanValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttributeBooleanValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *AttributeBooleanValue) SetValue(v bool) *AttributeBooleanValue { + s.Value = &v + return s +} + +// Describes a value for a resource attribute that is a String. +type AttributeValue struct { + _ struct{} `type:"structure"` + + // The attribute value. The value is case-sensitive. + Value *string `locationName:"value" type:"string"` +} + +// String returns the string representation +func (s AttributeValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AttributeValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *AttributeValue) SetValue(v string) *AttributeValue { + s.Value = &v + return s +} + +// Information about an authorization rule. +type AuthorizationRule struct { + _ struct{} `type:"structure"` + + // Indicates whether the authorization rule grants access to all clients. + AccessAll *bool `locationName:"accessAll" type:"boolean"` + + // The ID of the Client VPN endpoint with which the authorization rule is associated. + ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` + + // A brief description of the authorization rule. + Description *string `locationName:"description" type:"string"` + + // The IPv4 address range, in CIDR notation, of the network to which the authorization + // rule applies. + DestinationCidr *string `locationName:"destinationCidr" type:"string"` + + // The ID of the Active Directory group to which the authorization rule grants + // access. + GroupId *string `locationName:"groupId" type:"string"` + + // The current state of the authorization rule. + Status *ClientVpnAuthorizationRuleStatus `locationName:"status" type:"structure"` +} + +// String returns the string representation +func (s AuthorizationRule) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthorizationRule) GoString() string { + return s.String() +} + +// SetAccessAll sets the AccessAll field's value. +func (s *AuthorizationRule) SetAccessAll(v bool) *AuthorizationRule { + s.AccessAll = &v + return s +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *AuthorizationRule) SetClientVpnEndpointId(v string) *AuthorizationRule { + s.ClientVpnEndpointId = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *AuthorizationRule) SetDescription(v string) *AuthorizationRule { + s.Description = &v + return s +} + +// SetDestinationCidr sets the DestinationCidr field's value. +func (s *AuthorizationRule) SetDestinationCidr(v string) *AuthorizationRule { + s.DestinationCidr = &v + return s +} + +// SetGroupId sets the GroupId field's value. +func (s *AuthorizationRule) SetGroupId(v string) *AuthorizationRule { + s.GroupId = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *AuthorizationRule) SetStatus(v *ClientVpnAuthorizationRuleStatus) *AuthorizationRule { + s.Status = v + return s +} + +type AuthorizeClientVpnIngressInput struct { + _ struct{} `type:"structure"` + + // The ID of the Active Directory group to grant access. + AccessGroupId *string `type:"string"` + + // Indicates whether to grant access to all clients. Use true to grant all clients + // who successfully establish a VPN connection access to the network. + AuthorizeAllGroups *bool `type:"boolean"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // The ID of the Client VPN endpoint. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // A brief description of the authorization rule. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IPv4 address range, in CIDR notation, of the network for which access + // is being authorized. + // + // TargetNetworkCidr is a required field + TargetNetworkCidr *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AuthorizeClientVpnIngressInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthorizeClientVpnIngressInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AuthorizeClientVpnIngressInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AuthorizeClientVpnIngressInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.TargetNetworkCidr == nil { + invalidParams.Add(request.NewErrParamRequired("TargetNetworkCidr")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAccessGroupId sets the AccessGroupId field's value. +func (s *AuthorizeClientVpnIngressInput) SetAccessGroupId(v string) *AuthorizeClientVpnIngressInput { + s.AccessGroupId = &v + return s +} + +// SetAuthorizeAllGroups sets the AuthorizeAllGroups field's value. +func (s *AuthorizeClientVpnIngressInput) SetAuthorizeAllGroups(v bool) *AuthorizeClientVpnIngressInput { + s.AuthorizeAllGroups = &v + return s +} + +// SetClientToken sets the ClientToken field's value. +func (s *AuthorizeClientVpnIngressInput) SetClientToken(v string) *AuthorizeClientVpnIngressInput { + s.ClientToken = &v + return s +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *AuthorizeClientVpnIngressInput) SetClientVpnEndpointId(v string) *AuthorizeClientVpnIngressInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *AuthorizeClientVpnIngressInput) SetDescription(v string) *AuthorizeClientVpnIngressInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AuthorizeClientVpnIngressInput) SetDryRun(v bool) *AuthorizeClientVpnIngressInput { + s.DryRun = &v + return s +} + +// SetTargetNetworkCidr sets the TargetNetworkCidr field's value. +func (s *AuthorizeClientVpnIngressInput) SetTargetNetworkCidr(v string) *AuthorizeClientVpnIngressInput { + s.TargetNetworkCidr = &v + return s +} + +type AuthorizeClientVpnIngressOutput struct { + _ struct{} `type:"structure"` + + // The current state of the authorization rule. + Status *ClientVpnAuthorizationRuleStatus `locationName:"status" type:"structure"` +} + +// String returns the string representation +func (s AuthorizeClientVpnIngressOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthorizeClientVpnIngressOutput) GoString() string { + return s.String() +} + +// SetStatus sets the Status field's value. +func (s *AuthorizeClientVpnIngressOutput) SetStatus(v *ClientVpnAuthorizationRuleStatus) *AuthorizeClientVpnIngressOutput { + s.Status = v + return s +} + +type AuthorizeSecurityGroupEgressInput struct { + _ struct{} `type:"structure"` + + // Not supported. Use a set of IP permissions to specify the CIDR. + CidrIp *string `locationName:"cidrIp" type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // Not supported. Use a set of IP permissions to specify the port. + FromPort *int64 `locationName:"fromPort" type:"integer"` + + // The ID of the security group. + // + // GroupId is a required field + GroupId *string `locationName:"groupId" type:"string" required:"true"` + + // The sets of IP permissions. You can't specify a destination security group + // and a CIDR IP address range in the same set of permissions. + IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` + + // Not supported. Use a set of IP permissions to specify the protocol name or + // number. + IpProtocol *string `locationName:"ipProtocol" type:"string"` + + // Not supported. Use a set of IP permissions to specify a destination security + // group. + SourceSecurityGroupName *string `locationName:"sourceSecurityGroupName" type:"string"` + + // Not supported. Use a set of IP permissions to specify a destination security + // group. + SourceSecurityGroupOwnerId *string `locationName:"sourceSecurityGroupOwnerId" type:"string"` + + // Not supported. Use a set of IP permissions to specify the port. + ToPort *int64 `locationName:"toPort" type:"integer"` +} + +// String returns the string representation +func (s AuthorizeSecurityGroupEgressInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthorizeSecurityGroupEgressInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AuthorizeSecurityGroupEgressInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AuthorizeSecurityGroupEgressInput"} + if s.GroupId == nil { + invalidParams.Add(request.NewErrParamRequired("GroupId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCidrIp sets the CidrIp field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetCidrIp(v string) *AuthorizeSecurityGroupEgressInput { + s.CidrIp = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetDryRun(v bool) *AuthorizeSecurityGroupEgressInput { + s.DryRun = &v + return s +} + +// SetFromPort sets the FromPort field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetFromPort(v int64) *AuthorizeSecurityGroupEgressInput { + s.FromPort = &v + return s +} + +// SetGroupId sets the GroupId field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetGroupId(v string) *AuthorizeSecurityGroupEgressInput { + s.GroupId = &v + return s +} + +// SetIpPermissions sets the IpPermissions field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetIpPermissions(v []*IpPermission) *AuthorizeSecurityGroupEgressInput { + s.IpPermissions = v + return s +} + +// SetIpProtocol sets the IpProtocol field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetIpProtocol(v string) *AuthorizeSecurityGroupEgressInput { + s.IpProtocol = &v + return s +} + +// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetSourceSecurityGroupName(v string) *AuthorizeSecurityGroupEgressInput { + s.SourceSecurityGroupName = &v + return s +} + +// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetSourceSecurityGroupOwnerId(v string) *AuthorizeSecurityGroupEgressInput { + s.SourceSecurityGroupOwnerId = &v + return s +} + +// SetToPort sets the ToPort field's value. +func (s *AuthorizeSecurityGroupEgressInput) SetToPort(v int64) *AuthorizeSecurityGroupEgressInput { + s.ToPort = &v + return s +} + +type AuthorizeSecurityGroupEgressOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s AuthorizeSecurityGroupEgressOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthorizeSecurityGroupEgressOutput) GoString() string { + return s.String() +} + +type AuthorizeSecurityGroupIngressInput struct { + _ struct{} `type:"structure"` + + // The IPv4 address range, in CIDR format. You can't specify this parameter + // when specifying a source security group. To specify an IPv6 address range, + // use a set of IP permissions. + // + // Alternatively, use a set of IP permissions to specify multiple rules and + // a description for the rule. + CidrIp *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The start of port range for the TCP and UDP protocols, or an ICMP type number. + // For the ICMP type number, use -1 to specify all types. If you specify all + // ICMP types, you must specify all codes. + // + // Alternatively, use a set of IP permissions to specify multiple rules and + // a description for the rule. + FromPort *int64 `type:"integer"` + + // The ID of the security group. You must specify either the security group + // ID or the security group name in the request. For security groups in a nondefault + // VPC, you must specify the security group ID. + GroupId *string `type:"string"` + + // [EC2-Classic, default VPC] The name of the security group. You must specify + // either the security group ID or the security group name in the request. + GroupName *string `type:"string"` + + // The sets of IP permissions. + IpPermissions []*IpPermission `locationNameList:"item" type:"list"` + + // The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). + // To specify icmpv6, use a set of IP permissions. + // + // [VPC only] Use -1 to specify all protocols. If you specify -1 or a protocol + // other than tcp, udp, or icmp, traffic on all ports is allowed, regardless + // of any ports you specify. + // + // Alternatively, use a set of IP permissions to specify multiple rules and + // a description for the rule. + IpProtocol *string `type:"string"` + + // [EC2-Classic, default VPC] The name of the source security group. You can't + // specify this parameter in combination with the following parameters: the + // CIDR IP address range, the start of the port range, the IP protocol, and + // the end of the port range. Creates rules that grant full ICMP, UDP, and TCP + // access. To create a rule with a specific IP protocol and port range, use + // a set of IP permissions instead. For EC2-VPC, the source security group must + // be in the same VPC. + SourceSecurityGroupName *string `type:"string"` + + // [nondefault VPC] The AWS account ID for the source security group, if the + // source security group is in a different account. You can't specify this parameter + // in combination with the following parameters: the CIDR IP address range, + // the IP protocol, the start of the port range, and the end of the port range. + // Creates rules that grant full ICMP, UDP, and TCP access. To create a rule + // with a specific IP protocol and port range, use a set of IP permissions instead. + SourceSecurityGroupOwnerId *string `type:"string"` + + // The end of port range for the TCP and UDP protocols, or an ICMP code number. + // For the ICMP code number, use -1 to specify all codes. If you specify all + // ICMP types, you must specify all codes. + // + // Alternatively, use a set of IP permissions to specify multiple rules and + // a description for the rule. + ToPort *int64 `type:"integer"` +} + +// String returns the string representation +func (s AuthorizeSecurityGroupIngressInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthorizeSecurityGroupIngressInput) GoString() string { + return s.String() +} + +// SetCidrIp sets the CidrIp field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetCidrIp(v string) *AuthorizeSecurityGroupIngressInput { + s.CidrIp = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetDryRun(v bool) *AuthorizeSecurityGroupIngressInput { + s.DryRun = &v + return s +} + +// SetFromPort sets the FromPort field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetFromPort(v int64) *AuthorizeSecurityGroupIngressInput { + s.FromPort = &v + return s +} + +// SetGroupId sets the GroupId field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetGroupId(v string) *AuthorizeSecurityGroupIngressInput { + s.GroupId = &v + return s +} + +// SetGroupName sets the GroupName field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetGroupName(v string) *AuthorizeSecurityGroupIngressInput { + s.GroupName = &v + return s +} + +// SetIpPermissions sets the IpPermissions field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetIpPermissions(v []*IpPermission) *AuthorizeSecurityGroupIngressInput { + s.IpPermissions = v + return s +} + +// SetIpProtocol sets the IpProtocol field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetIpProtocol(v string) *AuthorizeSecurityGroupIngressInput { + s.IpProtocol = &v + return s +} + +// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetSourceSecurityGroupName(v string) *AuthorizeSecurityGroupIngressInput { + s.SourceSecurityGroupName = &v + return s +} + +// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetSourceSecurityGroupOwnerId(v string) *AuthorizeSecurityGroupIngressInput { + s.SourceSecurityGroupOwnerId = &v + return s +} + +// SetToPort sets the ToPort field's value. +func (s *AuthorizeSecurityGroupIngressInput) SetToPort(v int64) *AuthorizeSecurityGroupIngressInput { + s.ToPort = &v + return s +} + +type AuthorizeSecurityGroupIngressOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s AuthorizeSecurityGroupIngressOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthorizeSecurityGroupIngressOutput) GoString() string { + return s.String() +} + +// Describes an Availability Zone. +type AvailabilityZone struct { + _ struct{} `type:"structure"` + + // Any messages about the Availability Zone. + Messages []*AvailabilityZoneMessage `locationName:"messageSet" locationNameList:"item" type:"list"` + + // The name of the Region. + RegionName *string `locationName:"regionName" type:"string"` + + // The state of the Availability Zone. + State *string `locationName:"zoneState" type:"string" enum:"AvailabilityZoneState"` + + // The ID of the Availability Zone. + ZoneId *string `locationName:"zoneId" type:"string"` + + // The name of the Availability Zone. + ZoneName *string `locationName:"zoneName" type:"string"` +} + +// String returns the string representation +func (s AvailabilityZone) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AvailabilityZone) GoString() string { + return s.String() +} + +// SetMessages sets the Messages field's value. +func (s *AvailabilityZone) SetMessages(v []*AvailabilityZoneMessage) *AvailabilityZone { + s.Messages = v + return s +} + +// SetRegionName sets the RegionName field's value. +func (s *AvailabilityZone) SetRegionName(v string) *AvailabilityZone { + s.RegionName = &v + return s +} + +// SetState sets the State field's value. +func (s *AvailabilityZone) SetState(v string) *AvailabilityZone { + s.State = &v + return s +} + +// SetZoneId sets the ZoneId field's value. +func (s *AvailabilityZone) SetZoneId(v string) *AvailabilityZone { + s.ZoneId = &v + return s +} + +// SetZoneName sets the ZoneName field's value. +func (s *AvailabilityZone) SetZoneName(v string) *AvailabilityZone { + s.ZoneName = &v + return s +} + +// Describes a message about an Availability Zone. +type AvailabilityZoneMessage struct { + _ struct{} `type:"structure"` + + // The message about the Availability Zone. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s AvailabilityZoneMessage) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AvailabilityZoneMessage) GoString() string { + return s.String() +} + +// SetMessage sets the Message field's value. +func (s *AvailabilityZoneMessage) SetMessage(v string) *AvailabilityZoneMessage { + s.Message = &v + return s +} + +// The capacity information for instances that can be launched onto the Dedicated +// Host. +type AvailableCapacity struct { + _ struct{} `type:"structure"` + + // The number of instances that can be launched onto the Dedicated Host depending + // on the host's available capacity. For Dedicated Hosts that support multiple + // instance types, this parameter represents the number of instances for each + // instance size that is supported on the host. + AvailableInstanceCapacity []*InstanceCapacity `locationName:"availableInstanceCapacity" locationNameList:"item" type:"list"` + + // The number of vCPUs available for launching instances onto the Dedicated + // Host. + AvailableVCpus *int64 `locationName:"availableVCpus" type:"integer"` +} + +// String returns the string representation +func (s AvailableCapacity) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AvailableCapacity) GoString() string { + return s.String() +} + +// SetAvailableInstanceCapacity sets the AvailableInstanceCapacity field's value. +func (s *AvailableCapacity) SetAvailableInstanceCapacity(v []*InstanceCapacity) *AvailableCapacity { + s.AvailableInstanceCapacity = v + return s +} + +// SetAvailableVCpus sets the AvailableVCpus field's value. +func (s *AvailableCapacity) SetAvailableVCpus(v int64) *AvailableCapacity { + s.AvailableVCpus = &v + return s +} + +type BlobAttributeValue struct { + _ struct{} `type:"structure"` + + // Value is automatically base64 encoded/decoded by the SDK. + Value []byte `locationName:"value" type:"blob"` +} + +// String returns the string representation +func (s BlobAttributeValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s BlobAttributeValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *BlobAttributeValue) SetValue(v []byte) *BlobAttributeValue { + s.Value = v + return s +} + +// Describes a block device mapping. +type BlockDeviceMapping struct { + _ struct{} `type:"structure"` + + // The device name (for example, /dev/sdh or xvdh). + DeviceName *string `locationName:"deviceName" type:"string"` + + // Parameters used to automatically set up EBS volumes when the instance is + // launched. + Ebs *EbsBlockDevice `locationName:"ebs" type:"structure"` + + // Suppresses the specified device included in the block device mapping of the + // AMI. + NoDevice *string `locationName:"noDevice" type:"string"` + + // The virtual device name (ephemeralN). Instance store volumes are numbered + // starting from 0. An instance type with 2 available instance store volumes + // can specify mappings for ephemeral0 and ephemeral1. The number of available + // instance store volumes depends on the instance type. After you connect to + // the instance, you must mount the volume. + // + // NVMe instance store volumes are automatically enumerated and assigned a device + // name. Including them in your block device mapping has no effect. + // + // Constraints: For M3 instances, you must specify instance store volumes in + // the block device mapping for the instance. When you launch an M3 instance, + // we ignore any instance store volumes specified in the block device mapping + // for the AMI. + VirtualName *string `locationName:"virtualName" type:"string"` +} + +// String returns the string representation +func (s BlockDeviceMapping) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s BlockDeviceMapping) GoString() string { + return s.String() +} + +// SetDeviceName sets the DeviceName field's value. +func (s *BlockDeviceMapping) SetDeviceName(v string) *BlockDeviceMapping { + s.DeviceName = &v + return s +} + +// SetEbs sets the Ebs field's value. +func (s *BlockDeviceMapping) SetEbs(v *EbsBlockDevice) *BlockDeviceMapping { + s.Ebs = v + return s +} + +// SetNoDevice sets the NoDevice field's value. +func (s *BlockDeviceMapping) SetNoDevice(v string) *BlockDeviceMapping { + s.NoDevice = &v + return s +} + +// SetVirtualName sets the VirtualName field's value. +func (s *BlockDeviceMapping) SetVirtualName(v string) *BlockDeviceMapping { + s.VirtualName = &v + return s +} + +// Contains the parameters for BundleInstance. +type BundleInstanceInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the instance to bundle. + // + // Type: String + // + // Default: None + // + // Required: Yes + // + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` + + // The bucket in which to store the AMI. You can specify a bucket that you already + // own or a new bucket that Amazon EC2 creates on your behalf. If you specify + // a bucket that belongs to someone else, Amazon EC2 returns an error. + // + // Storage is a required field + Storage *Storage `type:"structure" required:"true"` +} + +// String returns the string representation +func (s BundleInstanceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s BundleInstanceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *BundleInstanceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "BundleInstanceInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + if s.Storage == nil { + invalidParams.Add(request.NewErrParamRequired("Storage")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *BundleInstanceInput) SetDryRun(v bool) *BundleInstanceInput { + s.DryRun = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *BundleInstanceInput) SetInstanceId(v string) *BundleInstanceInput { + s.InstanceId = &v + return s +} + +// SetStorage sets the Storage field's value. +func (s *BundleInstanceInput) SetStorage(v *Storage) *BundleInstanceInput { + s.Storage = v + return s +} + +// Contains the output of BundleInstance. +type BundleInstanceOutput struct { + _ struct{} `type:"structure"` + + // Information about the bundle task. + BundleTask *BundleTask `locationName:"bundleInstanceTask" type:"structure"` +} + +// String returns the string representation +func (s BundleInstanceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s BundleInstanceOutput) GoString() string { + return s.String() +} + +// SetBundleTask sets the BundleTask field's value. +func (s *BundleInstanceOutput) SetBundleTask(v *BundleTask) *BundleInstanceOutput { + s.BundleTask = v + return s +} + +// Describes a bundle task. +type BundleTask struct { + _ struct{} `type:"structure"` + + // The ID of the bundle task. + BundleId *string `locationName:"bundleId" type:"string"` + + // If the task fails, a description of the error. + BundleTaskError *BundleTaskError `locationName:"error" type:"structure"` + + // The ID of the instance associated with this bundle task. + InstanceId *string `locationName:"instanceId" type:"string"` + + // The level of task completion, as a percent (for example, 20%). + Progress *string `locationName:"progress" type:"string"` + + // The time this task started. + StartTime *time.Time `locationName:"startTime" type:"timestamp"` + + // The state of the task. + State *string `locationName:"state" type:"string" enum:"BundleTaskState"` + + // The Amazon S3 storage locations. + Storage *Storage `locationName:"storage" type:"structure"` + + // The time of the most recent update for the task. + UpdateTime *time.Time `locationName:"updateTime" type:"timestamp"` +} + +// String returns the string representation +func (s BundleTask) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s BundleTask) GoString() string { + return s.String() +} + +// SetBundleId sets the BundleId field's value. +func (s *BundleTask) SetBundleId(v string) *BundleTask { + s.BundleId = &v + return s +} + +// SetBundleTaskError sets the BundleTaskError field's value. +func (s *BundleTask) SetBundleTaskError(v *BundleTaskError) *BundleTask { + s.BundleTaskError = v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *BundleTask) SetInstanceId(v string) *BundleTask { + s.InstanceId = &v + return s +} + +// SetProgress sets the Progress field's value. +func (s *BundleTask) SetProgress(v string) *BundleTask { + s.Progress = &v + return s +} + +// SetStartTime sets the StartTime field's value. +func (s *BundleTask) SetStartTime(v time.Time) *BundleTask { + s.StartTime = &v + return s +} + +// SetState sets the State field's value. +func (s *BundleTask) SetState(v string) *BundleTask { + s.State = &v + return s +} + +// SetStorage sets the Storage field's value. +func (s *BundleTask) SetStorage(v *Storage) *BundleTask { + s.Storage = v + return s +} + +// SetUpdateTime sets the UpdateTime field's value. +func (s *BundleTask) SetUpdateTime(v time.Time) *BundleTask { + s.UpdateTime = &v + return s +} + +// Describes an error for BundleInstance. +type BundleTaskError struct { + _ struct{} `type:"structure"` + + // The error code. + Code *string `locationName:"code" type:"string"` + + // The error message. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s BundleTaskError) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s BundleTaskError) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *BundleTaskError) SetCode(v string) *BundleTaskError { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *BundleTaskError) SetMessage(v string) *BundleTaskError { + s.Message = &v + return s +} + +// Information about an address range that is provisioned for use with your +// AWS resources through bring your own IP addresses (BYOIP). +type ByoipCidr struct { + _ struct{} `type:"structure"` + + // The public IPv4 address range, in CIDR notation. + Cidr *string `locationName:"cidr" type:"string"` + + // The description of the address range. + Description *string `locationName:"description" type:"string"` + + // The state of the address pool. + State *string `locationName:"state" type:"string" enum:"ByoipCidrState"` + + // Upon success, contains the ID of the address pool. Otherwise, contains an + // error message. + StatusMessage *string `locationName:"statusMessage" type:"string"` +} + +// String returns the string representation +func (s ByoipCidr) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ByoipCidr) GoString() string { + return s.String() +} + +// SetCidr sets the Cidr field's value. +func (s *ByoipCidr) SetCidr(v string) *ByoipCidr { + s.Cidr = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *ByoipCidr) SetDescription(v string) *ByoipCidr { + s.Description = &v + return s +} + +// SetState sets the State field's value. +func (s *ByoipCidr) SetState(v string) *ByoipCidr { + s.State = &v + return s +} + +// SetStatusMessage sets the StatusMessage field's value. +func (s *ByoipCidr) SetStatusMessage(v string) *ByoipCidr { + s.StatusMessage = &v + return s +} + +// Contains the parameters for CancelBundleTask. +type CancelBundleTaskInput struct { + _ struct{} `type:"structure"` + + // The ID of the bundle task. + // + // BundleId is a required field + BundleId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s CancelBundleTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelBundleTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CancelBundleTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CancelBundleTaskInput"} + if s.BundleId == nil { + invalidParams.Add(request.NewErrParamRequired("BundleId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBundleId sets the BundleId field's value. +func (s *CancelBundleTaskInput) SetBundleId(v string) *CancelBundleTaskInput { + s.BundleId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CancelBundleTaskInput) SetDryRun(v bool) *CancelBundleTaskInput { + s.DryRun = &v + return s +} + +// Contains the output of CancelBundleTask. +type CancelBundleTaskOutput struct { + _ struct{} `type:"structure"` + + // Information about the bundle task. + BundleTask *BundleTask `locationName:"bundleInstanceTask" type:"structure"` +} + +// String returns the string representation +func (s CancelBundleTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelBundleTaskOutput) GoString() string { + return s.String() +} + +// SetBundleTask sets the BundleTask field's value. +func (s *CancelBundleTaskOutput) SetBundleTask(v *BundleTask) *CancelBundleTaskOutput { + s.BundleTask = v + return s +} + +type CancelCapacityReservationInput struct { + _ struct{} `type:"structure"` + + // The ID of the Capacity Reservation to be cancelled. + // + // CapacityReservationId is a required field + CapacityReservationId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s CancelCapacityReservationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelCapacityReservationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CancelCapacityReservationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CancelCapacityReservationInput"} + if s.CapacityReservationId == nil { + invalidParams.Add(request.NewErrParamRequired("CapacityReservationId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCapacityReservationId sets the CapacityReservationId field's value. +func (s *CancelCapacityReservationInput) SetCapacityReservationId(v string) *CancelCapacityReservationInput { + s.CapacityReservationId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CancelCapacityReservationInput) SetDryRun(v bool) *CancelCapacityReservationInput { + s.DryRun = &v + return s +} + +type CancelCapacityReservationOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s CancelCapacityReservationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelCapacityReservationOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *CancelCapacityReservationOutput) SetReturn(v bool) *CancelCapacityReservationOutput { + s.Return = &v + return s +} + +type CancelConversionTaskInput struct { + _ struct{} `type:"structure"` + + // The ID of the conversion task. + // + // ConversionTaskId is a required field + ConversionTaskId *string `locationName:"conversionTaskId" type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The reason for canceling the conversion task. + ReasonMessage *string `locationName:"reasonMessage" type:"string"` +} + +// String returns the string representation +func (s CancelConversionTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelConversionTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CancelConversionTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CancelConversionTaskInput"} + if s.ConversionTaskId == nil { + invalidParams.Add(request.NewErrParamRequired("ConversionTaskId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetConversionTaskId sets the ConversionTaskId field's value. +func (s *CancelConversionTaskInput) SetConversionTaskId(v string) *CancelConversionTaskInput { + s.ConversionTaskId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CancelConversionTaskInput) SetDryRun(v bool) *CancelConversionTaskInput { + s.DryRun = &v + return s +} + +// SetReasonMessage sets the ReasonMessage field's value. +func (s *CancelConversionTaskInput) SetReasonMessage(v string) *CancelConversionTaskInput { + s.ReasonMessage = &v + return s +} + +type CancelConversionTaskOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s CancelConversionTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelConversionTaskOutput) GoString() string { + return s.String() +} + +type CancelExportTaskInput struct { + _ struct{} `type:"structure"` + + // The ID of the export task. This is the ID returned by CreateInstanceExportTask. + // + // ExportTaskId is a required field + ExportTaskId *string `locationName:"exportTaskId" type:"string" required:"true"` +} + +// String returns the string representation +func (s CancelExportTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelExportTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CancelExportTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CancelExportTaskInput"} + if s.ExportTaskId == nil { + invalidParams.Add(request.NewErrParamRequired("ExportTaskId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetExportTaskId sets the ExportTaskId field's value. +func (s *CancelExportTaskInput) SetExportTaskId(v string) *CancelExportTaskInput { + s.ExportTaskId = &v + return s +} + +type CancelExportTaskOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s CancelExportTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelExportTaskOutput) GoString() string { + return s.String() +} + +type CancelImportTaskInput struct { + _ struct{} `type:"structure"` + + // The reason for canceling the task. + CancelReason *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the import image or import snapshot task to be canceled. + ImportTaskId *string `type:"string"` +} + +// String returns the string representation +func (s CancelImportTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelImportTaskInput) GoString() string { + return s.String() +} + +// SetCancelReason sets the CancelReason field's value. +func (s *CancelImportTaskInput) SetCancelReason(v string) *CancelImportTaskInput { + s.CancelReason = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CancelImportTaskInput) SetDryRun(v bool) *CancelImportTaskInput { + s.DryRun = &v + return s +} + +// SetImportTaskId sets the ImportTaskId field's value. +func (s *CancelImportTaskInput) SetImportTaskId(v string) *CancelImportTaskInput { + s.ImportTaskId = &v + return s +} + +type CancelImportTaskOutput struct { + _ struct{} `type:"structure"` + + // The ID of the task being canceled. + ImportTaskId *string `locationName:"importTaskId" type:"string"` + + // The current state of the task being canceled. + PreviousState *string `locationName:"previousState" type:"string"` + + // The current state of the task being canceled. + State *string `locationName:"state" type:"string"` +} + +// String returns the string representation +func (s CancelImportTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelImportTaskOutput) GoString() string { + return s.String() +} + +// SetImportTaskId sets the ImportTaskId field's value. +func (s *CancelImportTaskOutput) SetImportTaskId(v string) *CancelImportTaskOutput { + s.ImportTaskId = &v + return s +} + +// SetPreviousState sets the PreviousState field's value. +func (s *CancelImportTaskOutput) SetPreviousState(v string) *CancelImportTaskOutput { + s.PreviousState = &v + return s +} + +// SetState sets the State field's value. +func (s *CancelImportTaskOutput) SetState(v string) *CancelImportTaskOutput { + s.State = &v + return s +} + +// Contains the parameters for CancelReservedInstancesListing. +type CancelReservedInstancesListingInput struct { + _ struct{} `type:"structure"` + + // The ID of the Reserved Instance listing. + // + // ReservedInstancesListingId is a required field + ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string" required:"true"` +} + +// String returns the string representation +func (s CancelReservedInstancesListingInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelReservedInstancesListingInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CancelReservedInstancesListingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CancelReservedInstancesListingInput"} + if s.ReservedInstancesListingId == nil { + invalidParams.Add(request.NewErrParamRequired("ReservedInstancesListingId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. +func (s *CancelReservedInstancesListingInput) SetReservedInstancesListingId(v string) *CancelReservedInstancesListingInput { + s.ReservedInstancesListingId = &v + return s +} + +// Contains the output of CancelReservedInstancesListing. +type CancelReservedInstancesListingOutput struct { + _ struct{} `type:"structure"` + + // The Reserved Instance listing. + ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CancelReservedInstancesListingOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelReservedInstancesListingOutput) GoString() string { + return s.String() +} + +// SetReservedInstancesListings sets the ReservedInstancesListings field's value. +func (s *CancelReservedInstancesListingOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *CancelReservedInstancesListingOutput { + s.ReservedInstancesListings = v + return s +} + +// Describes a Spot Fleet error. +type CancelSpotFleetRequestsError struct { + _ struct{} `type:"structure"` + + // The error code. + Code *string `locationName:"code" type:"string" enum:"CancelBatchErrorCode"` + + // The description for the error code. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s CancelSpotFleetRequestsError) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelSpotFleetRequestsError) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *CancelSpotFleetRequestsError) SetCode(v string) *CancelSpotFleetRequestsError { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *CancelSpotFleetRequestsError) SetMessage(v string) *CancelSpotFleetRequestsError { + s.Message = &v + return s +} + +// Describes a Spot Fleet request that was not successfully canceled. +type CancelSpotFleetRequestsErrorItem struct { + _ struct{} `type:"structure"` + + // The error. + Error *CancelSpotFleetRequestsError `locationName:"error" type:"structure"` + + // The ID of the Spot Fleet request. + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` +} + +// String returns the string representation +func (s CancelSpotFleetRequestsErrorItem) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelSpotFleetRequestsErrorItem) GoString() string { + return s.String() +} + +// SetError sets the Error field's value. +func (s *CancelSpotFleetRequestsErrorItem) SetError(v *CancelSpotFleetRequestsError) *CancelSpotFleetRequestsErrorItem { + s.Error = v + return s +} + +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *CancelSpotFleetRequestsErrorItem) SetSpotFleetRequestId(v string) *CancelSpotFleetRequestsErrorItem { + s.SpotFleetRequestId = &v + return s +} + +// Contains the parameters for CancelSpotFleetRequests. +type CancelSpotFleetRequestsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The IDs of the Spot Fleet requests. + // + // SpotFleetRequestIds is a required field + SpotFleetRequestIds []*string `locationName:"spotFleetRequestId" locationNameList:"item" type:"list" required:"true"` + + // Indicates whether to terminate instances for a Spot Fleet request if it is + // canceled successfully. + // + // TerminateInstances is a required field + TerminateInstances *bool `locationName:"terminateInstances" type:"boolean" required:"true"` +} + +// String returns the string representation +func (s CancelSpotFleetRequestsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelSpotFleetRequestsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CancelSpotFleetRequestsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CancelSpotFleetRequestsInput"} + if s.SpotFleetRequestIds == nil { + invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestIds")) + } + if s.TerminateInstances == nil { + invalidParams.Add(request.NewErrParamRequired("TerminateInstances")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *CancelSpotFleetRequestsInput) SetDryRun(v bool) *CancelSpotFleetRequestsInput { + s.DryRun = &v + return s +} + +// SetSpotFleetRequestIds sets the SpotFleetRequestIds field's value. +func (s *CancelSpotFleetRequestsInput) SetSpotFleetRequestIds(v []*string) *CancelSpotFleetRequestsInput { + s.SpotFleetRequestIds = v + return s +} + +// SetTerminateInstances sets the TerminateInstances field's value. +func (s *CancelSpotFleetRequestsInput) SetTerminateInstances(v bool) *CancelSpotFleetRequestsInput { + s.TerminateInstances = &v + return s +} + +// Contains the output of CancelSpotFleetRequests. +type CancelSpotFleetRequestsOutput struct { + _ struct{} `type:"structure"` + + // Information about the Spot Fleet requests that are successfully canceled. + SuccessfulFleetRequests []*CancelSpotFleetRequestsSuccessItem `locationName:"successfulFleetRequestSet" locationNameList:"item" type:"list"` + + // Information about the Spot Fleet requests that are not successfully canceled. + UnsuccessfulFleetRequests []*CancelSpotFleetRequestsErrorItem `locationName:"unsuccessfulFleetRequestSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CancelSpotFleetRequestsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelSpotFleetRequestsOutput) GoString() string { + return s.String() +} + +// SetSuccessfulFleetRequests sets the SuccessfulFleetRequests field's value. +func (s *CancelSpotFleetRequestsOutput) SetSuccessfulFleetRequests(v []*CancelSpotFleetRequestsSuccessItem) *CancelSpotFleetRequestsOutput { + s.SuccessfulFleetRequests = v + return s +} + +// SetUnsuccessfulFleetRequests sets the UnsuccessfulFleetRequests field's value. +func (s *CancelSpotFleetRequestsOutput) SetUnsuccessfulFleetRequests(v []*CancelSpotFleetRequestsErrorItem) *CancelSpotFleetRequestsOutput { + s.UnsuccessfulFleetRequests = v + return s +} + +// Describes a Spot Fleet request that was successfully canceled. +type CancelSpotFleetRequestsSuccessItem struct { + _ struct{} `type:"structure"` + + // The current state of the Spot Fleet request. + CurrentSpotFleetRequestState *string `locationName:"currentSpotFleetRequestState" type:"string" enum:"BatchState"` + + // The previous state of the Spot Fleet request. + PreviousSpotFleetRequestState *string `locationName:"previousSpotFleetRequestState" type:"string" enum:"BatchState"` + + // The ID of the Spot Fleet request. + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` +} + +// String returns the string representation +func (s CancelSpotFleetRequestsSuccessItem) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelSpotFleetRequestsSuccessItem) GoString() string { + return s.String() +} + +// SetCurrentSpotFleetRequestState sets the CurrentSpotFleetRequestState field's value. +func (s *CancelSpotFleetRequestsSuccessItem) SetCurrentSpotFleetRequestState(v string) *CancelSpotFleetRequestsSuccessItem { + s.CurrentSpotFleetRequestState = &v + return s +} + +// SetPreviousSpotFleetRequestState sets the PreviousSpotFleetRequestState field's value. +func (s *CancelSpotFleetRequestsSuccessItem) SetPreviousSpotFleetRequestState(v string) *CancelSpotFleetRequestsSuccessItem { + s.PreviousSpotFleetRequestState = &v + return s +} + +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *CancelSpotFleetRequestsSuccessItem) SetSpotFleetRequestId(v string) *CancelSpotFleetRequestsSuccessItem { + s.SpotFleetRequestId = &v + return s +} + +// Contains the parameters for CancelSpotInstanceRequests. +type CancelSpotInstanceRequestsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more Spot Instance request IDs. + // + // SpotInstanceRequestIds is a required field + SpotInstanceRequestIds []*string `locationName:"SpotInstanceRequestId" locationNameList:"SpotInstanceRequestId" type:"list" required:"true"` +} + +// String returns the string representation +func (s CancelSpotInstanceRequestsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelSpotInstanceRequestsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CancelSpotInstanceRequestsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CancelSpotInstanceRequestsInput"} + if s.SpotInstanceRequestIds == nil { + invalidParams.Add(request.NewErrParamRequired("SpotInstanceRequestIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *CancelSpotInstanceRequestsInput) SetDryRun(v bool) *CancelSpotInstanceRequestsInput { + s.DryRun = &v + return s +} + +// SetSpotInstanceRequestIds sets the SpotInstanceRequestIds field's value. +func (s *CancelSpotInstanceRequestsInput) SetSpotInstanceRequestIds(v []*string) *CancelSpotInstanceRequestsInput { + s.SpotInstanceRequestIds = v + return s +} + +// Contains the output of CancelSpotInstanceRequests. +type CancelSpotInstanceRequestsOutput struct { + _ struct{} `type:"structure"` + + // One or more Spot Instance requests. + CancelledSpotInstanceRequests []*CancelledSpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CancelSpotInstanceRequestsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelSpotInstanceRequestsOutput) GoString() string { + return s.String() +} + +// SetCancelledSpotInstanceRequests sets the CancelledSpotInstanceRequests field's value. +func (s *CancelSpotInstanceRequestsOutput) SetCancelledSpotInstanceRequests(v []*CancelledSpotInstanceRequest) *CancelSpotInstanceRequestsOutput { + s.CancelledSpotInstanceRequests = v + return s +} + +// Describes a request to cancel a Spot Instance. +type CancelledSpotInstanceRequest struct { + _ struct{} `type:"structure"` + + // The ID of the Spot Instance request. + SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` + + // The state of the Spot Instance request. + State *string `locationName:"state" type:"string" enum:"CancelSpotInstanceRequestState"` +} + +// String returns the string representation +func (s CancelledSpotInstanceRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CancelledSpotInstanceRequest) GoString() string { + return s.String() +} + +// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. +func (s *CancelledSpotInstanceRequest) SetSpotInstanceRequestId(v string) *CancelledSpotInstanceRequest { + s.SpotInstanceRequestId = &v + return s +} + +// SetState sets the State field's value. +func (s *CancelledSpotInstanceRequest) SetState(v string) *CancelledSpotInstanceRequest { + s.State = &v + return s +} + +// Describes a Capacity Reservation. +type CapacityReservation struct { + _ struct{} `type:"structure"` + + // The Availability Zone in which the capacity is reserved. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + + // The Availability Zone ID of the Capacity Reservation. + AvailabilityZoneId *string `locationName:"availabilityZoneId" type:"string"` + + // The remaining capacity. Indicates the number of instances that can be launched + // in the Capacity Reservation. + AvailableInstanceCount *int64 `locationName:"availableInstanceCount" type:"integer"` + + // The Amazon Resource Name (ARN) of the Capacity Reservation. + CapacityReservationArn *string `locationName:"capacityReservationArn" type:"string"` + + // The ID of the Capacity Reservation. + CapacityReservationId *string `locationName:"capacityReservationId" type:"string"` + + // The date and time at which the Capacity Reservation was created. + CreateDate *time.Time `locationName:"createDate" type:"timestamp"` + + // Indicates whether the Capacity Reservation supports EBS-optimized instances. + // This optimization provides dedicated throughput to Amazon EBS and an optimized + // configuration stack to provide optimal I/O performance. This optimization + // isn't available with all instance types. Additional usage charges apply when + // using an EBS- optimized instance. + EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` + + // The date and time at which the Capacity Reservation expires. When a Capacity + // Reservation expires, the reserved capacity is released and you can no longer + // launch instances into it. The Capacity Reservation's state changes to expired + // when it reaches its end date and time. + EndDate *time.Time `locationName:"endDate" type:"timestamp"` + + // Indicates the way in which the Capacity Reservation ends. A Capacity Reservation + // can have one of the following end types: + // + // * unlimited - The Capacity Reservation remains active until you explicitly + // cancel it. + // + // * limited - The Capacity Reservation expires automatically at a specified + // date and time. + EndDateType *string `locationName:"endDateType" type:"string" enum:"EndDateType"` + + // Indicates whether the Capacity Reservation supports instances with temporary, + // block-level storage. + EphemeralStorage *bool `locationName:"ephemeralStorage" type:"boolean"` + + // Indicates the type of instance launches that the Capacity Reservation accepts. + // The options include: + // + // * open - The Capacity Reservation accepts all instances that have matching + // attributes (instance type, platform, and Availability Zone). Instances + // that have matching attributes launch into the Capacity Reservation automatically + // without specifying any additional parameters. + // + // * targeted - The Capacity Reservation only accepts instances that have + // matching attributes (instance type, platform, and Availability Zone), + // and explicitly target the Capacity Reservation. This ensures that only + // permitted instances can use the reserved capacity. + InstanceMatchCriteria *string `locationName:"instanceMatchCriteria" type:"string" enum:"InstanceMatchCriteria"` + + // The type of operating system for which the Capacity Reservation reserves + // capacity. + InstancePlatform *string `locationName:"instancePlatform" type:"string" enum:"CapacityReservationInstancePlatform"` + + // The type of instance for which the Capacity Reservation reserves capacity. + InstanceType *string `locationName:"instanceType" type:"string"` + + // The ID of the AWS account that owns the Capacity Reservation. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The current state of the Capacity Reservation. A Capacity Reservation can + // be in one of the following states: + // + // * active - The Capacity Reservation is active and the capacity is available + // for your use. + // + // * expired - The Capacity Reservation expired automatically at the date + // and time specified in your request. The reserved capacity is no longer + // available for your use. + // + // * cancelled - The Capacity Reservation was manually cancelled. The reserved + // capacity is no longer available for your use. + // + // * pending - The Capacity Reservation request was successful but the capacity + // provisioning is still pending. + // + // * failed - The Capacity Reservation request has failed. A request might + // fail due to invalid request parameters, capacity constraints, or instance + // limit constraints. Failed requests are retained for 60 minutes. + State *string `locationName:"state" type:"string" enum:"CapacityReservationState"` + + // Any tags assigned to the Capacity Reservation. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // Indicates the tenancy of the Capacity Reservation. A Capacity Reservation + // can have one of the following tenancy settings: + // + // * default - The Capacity Reservation is created on hardware that is shared + // with other AWS accounts. + // + // * dedicated - The Capacity Reservation is created on single-tenant hardware + // that is dedicated to a single AWS account. + Tenancy *string `locationName:"tenancy" type:"string" enum:"CapacityReservationTenancy"` + + // The total number of instances for which the Capacity Reservation reserves + // capacity. + TotalInstanceCount *int64 `locationName:"totalInstanceCount" type:"integer"` +} + +// String returns the string representation +func (s CapacityReservation) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CapacityReservation) GoString() string { + return s.String() +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *CapacityReservation) SetAvailabilityZone(v string) *CapacityReservation { + s.AvailabilityZone = &v + return s +} + +// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. +func (s *CapacityReservation) SetAvailabilityZoneId(v string) *CapacityReservation { + s.AvailabilityZoneId = &v + return s +} + +// SetAvailableInstanceCount sets the AvailableInstanceCount field's value. +func (s *CapacityReservation) SetAvailableInstanceCount(v int64) *CapacityReservation { + s.AvailableInstanceCount = &v + return s +} + +// SetCapacityReservationArn sets the CapacityReservationArn field's value. +func (s *CapacityReservation) SetCapacityReservationArn(v string) *CapacityReservation { + s.CapacityReservationArn = &v + return s +} + +// SetCapacityReservationId sets the CapacityReservationId field's value. +func (s *CapacityReservation) SetCapacityReservationId(v string) *CapacityReservation { + s.CapacityReservationId = &v + return s +} + +// SetCreateDate sets the CreateDate field's value. +func (s *CapacityReservation) SetCreateDate(v time.Time) *CapacityReservation { + s.CreateDate = &v + return s +} + +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *CapacityReservation) SetEbsOptimized(v bool) *CapacityReservation { + s.EbsOptimized = &v + return s +} + +// SetEndDate sets the EndDate field's value. +func (s *CapacityReservation) SetEndDate(v time.Time) *CapacityReservation { + s.EndDate = &v + return s +} + +// SetEndDateType sets the EndDateType field's value. +func (s *CapacityReservation) SetEndDateType(v string) *CapacityReservation { + s.EndDateType = &v + return s +} + +// SetEphemeralStorage sets the EphemeralStorage field's value. +func (s *CapacityReservation) SetEphemeralStorage(v bool) *CapacityReservation { + s.EphemeralStorage = &v + return s +} + +// SetInstanceMatchCriteria sets the InstanceMatchCriteria field's value. +func (s *CapacityReservation) SetInstanceMatchCriteria(v string) *CapacityReservation { + s.InstanceMatchCriteria = &v + return s +} + +// SetInstancePlatform sets the InstancePlatform field's value. +func (s *CapacityReservation) SetInstancePlatform(v string) *CapacityReservation { + s.InstancePlatform = &v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *CapacityReservation) SetInstanceType(v string) *CapacityReservation { + s.InstanceType = &v + return s +} + +// SetOwnerId sets the OwnerId field's value. +func (s *CapacityReservation) SetOwnerId(v string) *CapacityReservation { + s.OwnerId = &v + return s +} + +// SetState sets the State field's value. +func (s *CapacityReservation) SetState(v string) *CapacityReservation { + s.State = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *CapacityReservation) SetTags(v []*Tag) *CapacityReservation { + s.Tags = v + return s +} + +// SetTenancy sets the Tenancy field's value. +func (s *CapacityReservation) SetTenancy(v string) *CapacityReservation { + s.Tenancy = &v + return s +} + +// SetTotalInstanceCount sets the TotalInstanceCount field's value. +func (s *CapacityReservation) SetTotalInstanceCount(v int64) *CapacityReservation { + s.TotalInstanceCount = &v + return s +} + +// Describes an instance's Capacity Reservation targeting option. You can specify +// only one parameter at a time. If you specify CapacityReservationPreference +// and CapacityReservationTarget, the request fails. +// +// Use the CapacityReservationPreference parameter to configure the instance +// to run as an On-Demand Instance or to run in any open Capacity Reservation +// that has matching attributes (instance type, platform, Availability Zone). +// Use the CapacityReservationTarget parameter to explicitly target a specific +// Capacity Reservation. +type CapacityReservationSpecification struct { + _ struct{} `type:"structure"` + + // Indicates the instance's Capacity Reservation preferences. Possible preferences + // include: + // + // * open - The instance can run in any open Capacity Reservation that has + // matching attributes (instance type, platform, Availability Zone). + // + // * none - The instance avoids running in a Capacity Reservation even if + // one is available. The instance runs as an On-Demand Instance. + CapacityReservationPreference *string `type:"string" enum:"CapacityReservationPreference"` + + // Information about the target Capacity Reservation. + CapacityReservationTarget *CapacityReservationTarget `type:"structure"` +} + +// String returns the string representation +func (s CapacityReservationSpecification) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CapacityReservationSpecification) GoString() string { + return s.String() +} + +// SetCapacityReservationPreference sets the CapacityReservationPreference field's value. +func (s *CapacityReservationSpecification) SetCapacityReservationPreference(v string) *CapacityReservationSpecification { + s.CapacityReservationPreference = &v + return s +} + +// SetCapacityReservationTarget sets the CapacityReservationTarget field's value. +func (s *CapacityReservationSpecification) SetCapacityReservationTarget(v *CapacityReservationTarget) *CapacityReservationSpecification { + s.CapacityReservationTarget = v + return s +} + +// Describes the instance's Capacity Reservation targeting preferences. The +// action returns the capacityReservationPreference response element if the +// instance is configured to run in On-Demand capacity, or if it is configured +// in run in any open Capacity Reservation that has matching attributes (instance +// type, platform, Availability Zone). The action returns the capacityReservationTarget +// response element if the instance explicily targets a specific Capacity Reservation. +type CapacityReservationSpecificationResponse struct { + _ struct{} `type:"structure"` + + // Describes the instance's Capacity Reservation preferences. Possible preferences + // include: + // + // * open - The instance can run in any open Capacity Reservation that has + // matching attributes (instance type, platform, Availability Zone). + // + // * none - The instance avoids running in a Capacity Reservation even if + // one is available. The instance runs in On-Demand capacity. + CapacityReservationPreference *string `locationName:"capacityReservationPreference" type:"string" enum:"CapacityReservationPreference"` + + // Information about the targeted Capacity Reservation. + CapacityReservationTarget *CapacityReservationTargetResponse `locationName:"capacityReservationTarget" type:"structure"` +} + +// String returns the string representation +func (s CapacityReservationSpecificationResponse) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CapacityReservationSpecificationResponse) GoString() string { + return s.String() +} + +// SetCapacityReservationPreference sets the CapacityReservationPreference field's value. +func (s *CapacityReservationSpecificationResponse) SetCapacityReservationPreference(v string) *CapacityReservationSpecificationResponse { + s.CapacityReservationPreference = &v + return s +} + +// SetCapacityReservationTarget sets the CapacityReservationTarget field's value. +func (s *CapacityReservationSpecificationResponse) SetCapacityReservationTarget(v *CapacityReservationTargetResponse) *CapacityReservationSpecificationResponse { + s.CapacityReservationTarget = v + return s +} + +// Describes a target Capacity Reservation. +type CapacityReservationTarget struct { + _ struct{} `type:"structure"` + + // The ID of the Capacity Reservation. + CapacityReservationId *string `type:"string"` +} + +// String returns the string representation +func (s CapacityReservationTarget) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CapacityReservationTarget) GoString() string { + return s.String() +} + +// SetCapacityReservationId sets the CapacityReservationId field's value. +func (s *CapacityReservationTarget) SetCapacityReservationId(v string) *CapacityReservationTarget { + s.CapacityReservationId = &v + return s +} + +// Describes a target Capacity Reservation. +type CapacityReservationTargetResponse struct { + _ struct{} `type:"structure"` + + // The ID of the Capacity Reservation. + CapacityReservationId *string `locationName:"capacityReservationId" type:"string"` +} + +// String returns the string representation +func (s CapacityReservationTargetResponse) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CapacityReservationTargetResponse) GoString() string { + return s.String() +} + +// SetCapacityReservationId sets the CapacityReservationId field's value. +func (s *CapacityReservationTargetResponse) SetCapacityReservationId(v string) *CapacityReservationTargetResponse { + s.CapacityReservationId = &v + return s +} + +// Information about the client certificate used for authentication. +type CertificateAuthentication struct { + _ struct{} `type:"structure"` + + // The ARN of the client certificate. + ClientRootCertificateChain *string `locationName:"clientRootCertificateChain" type:"string"` +} + +// String returns the string representation +func (s CertificateAuthentication) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CertificateAuthentication) GoString() string { + return s.String() +} + +// SetClientRootCertificateChain sets the ClientRootCertificateChain field's value. +func (s *CertificateAuthentication) SetClientRootCertificateChain(v string) *CertificateAuthentication { + s.ClientRootCertificateChain = &v + return s +} + +// Information about the client certificate to be used for authentication. +type CertificateAuthenticationRequest struct { + _ struct{} `type:"structure"` + + // The ARN of the client certificate. The certificate must be signed by a certificate + // authority (CA) and it must be provisioned in AWS Certificate Manager (ACM). + ClientRootCertificateChainArn *string `type:"string"` +} + +// String returns the string representation +func (s CertificateAuthenticationRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CertificateAuthenticationRequest) GoString() string { + return s.String() +} + +// SetClientRootCertificateChainArn sets the ClientRootCertificateChainArn field's value. +func (s *CertificateAuthenticationRequest) SetClientRootCertificateChainArn(v string) *CertificateAuthenticationRequest { + s.ClientRootCertificateChainArn = &v + return s +} + +// Provides authorization for Amazon to bring a specific IP address range to +// a specific AWS account using bring your own IP addresses (BYOIP). For more +// information, see Prepare to Bring Your Address Range to Your AWS Account +// (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#prepare-for-byoip) +// in the Amazon Elastic Compute Cloud User Guide. +type CidrAuthorizationContext struct { + _ struct{} `type:"structure"` + + // The plain-text authorization message for the prefix and account. + // + // Message is a required field + Message *string `type:"string" required:"true"` + + // The signed authorization message for the prefix and account. + // + // Signature is a required field + Signature *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CidrAuthorizationContext) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CidrAuthorizationContext) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CidrAuthorizationContext) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CidrAuthorizationContext"} + if s.Message == nil { + invalidParams.Add(request.NewErrParamRequired("Message")) + } + if s.Signature == nil { + invalidParams.Add(request.NewErrParamRequired("Signature")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetMessage sets the Message field's value. +func (s *CidrAuthorizationContext) SetMessage(v string) *CidrAuthorizationContext { + s.Message = &v + return s +} + +// SetSignature sets the Signature field's value. +func (s *CidrAuthorizationContext) SetSignature(v string) *CidrAuthorizationContext { + s.Signature = &v + return s +} + +// Describes an IPv4 CIDR block. +type CidrBlock struct { + _ struct{} `type:"structure"` + + // The IPv4 CIDR block. + CidrBlock *string `locationName:"cidrBlock" type:"string"` +} + +// String returns the string representation +func (s CidrBlock) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CidrBlock) GoString() string { + return s.String() +} + +// SetCidrBlock sets the CidrBlock field's value. +func (s *CidrBlock) SetCidrBlock(v string) *CidrBlock { + s.CidrBlock = &v + return s +} + +// Describes the ClassicLink DNS support status of a VPC. +type ClassicLinkDnsSupport struct { + _ struct{} `type:"structure"` + + // Indicates whether ClassicLink DNS support is enabled for the VPC. + ClassicLinkDnsSupported *bool `locationName:"classicLinkDnsSupported" type:"boolean"` + + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` +} + +// String returns the string representation +func (s ClassicLinkDnsSupport) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClassicLinkDnsSupport) GoString() string { + return s.String() +} + +// SetClassicLinkDnsSupported sets the ClassicLinkDnsSupported field's value. +func (s *ClassicLinkDnsSupport) SetClassicLinkDnsSupported(v bool) *ClassicLinkDnsSupport { + s.ClassicLinkDnsSupported = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *ClassicLinkDnsSupport) SetVpcId(v string) *ClassicLinkDnsSupport { + s.VpcId = &v + return s +} + +// Describes a linked EC2-Classic instance. +type ClassicLinkInstance struct { + _ struct{} `type:"structure"` + + // A list of security groups. + Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` + + // Any tags assigned to the instance. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` +} + +// String returns the string representation +func (s ClassicLinkInstance) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClassicLinkInstance) GoString() string { + return s.String() +} + +// SetGroups sets the Groups field's value. +func (s *ClassicLinkInstance) SetGroups(v []*GroupIdentifier) *ClassicLinkInstance { + s.Groups = v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *ClassicLinkInstance) SetInstanceId(v string) *ClassicLinkInstance { + s.InstanceId = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *ClassicLinkInstance) SetTags(v []*Tag) *ClassicLinkInstance { + s.Tags = v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *ClassicLinkInstance) SetVpcId(v string) *ClassicLinkInstance { + s.VpcId = &v + return s +} + +// Describes a Classic Load Balancer. +type ClassicLoadBalancer struct { + _ struct{} `type:"structure"` + + // The name of the load balancer. + Name *string `locationName:"name" type:"string"` +} + +// String returns the string representation +func (s ClassicLoadBalancer) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClassicLoadBalancer) GoString() string { + return s.String() +} + +// SetName sets the Name field's value. +func (s *ClassicLoadBalancer) SetName(v string) *ClassicLoadBalancer { + s.Name = &v + return s +} + +// Describes the Classic Load Balancers to attach to a Spot Fleet. Spot Fleet +// registers the running Spot Instances with these Classic Load Balancers. +type ClassicLoadBalancersConfig struct { + _ struct{} `type:"structure"` + + // One or more Classic Load Balancers. + ClassicLoadBalancers []*ClassicLoadBalancer `locationName:"classicLoadBalancers" locationNameList:"item" min:"1" type:"list"` +} + +// String returns the string representation +func (s ClassicLoadBalancersConfig) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClassicLoadBalancersConfig) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ClassicLoadBalancersConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ClassicLoadBalancersConfig"} + if s.ClassicLoadBalancers != nil && len(s.ClassicLoadBalancers) < 1 { + invalidParams.Add(request.NewErrParamMinLen("ClassicLoadBalancers", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClassicLoadBalancers sets the ClassicLoadBalancers field's value. +func (s *ClassicLoadBalancersConfig) SetClassicLoadBalancers(v []*ClassicLoadBalancer) *ClassicLoadBalancersConfig { + s.ClassicLoadBalancers = v + return s +} + +// Describes the state of a client certificate revocation list. +type ClientCertificateRevocationListStatus struct { + _ struct{} `type:"structure"` + + // The state of the client certificate revocation list. + Code *string `locationName:"code" type:"string" enum:"ClientCertificateRevocationListStatusCode"` + + // A message about the status of the client certificate revocation list, if + // applicable. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s ClientCertificateRevocationListStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientCertificateRevocationListStatus) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *ClientCertificateRevocationListStatus) SetCode(v string) *ClientCertificateRevocationListStatus { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *ClientCertificateRevocationListStatus) SetMessage(v string) *ClientCertificateRevocationListStatus { + s.Message = &v + return s +} + +// Describes the client-specific data. +type ClientData struct { + _ struct{} `type:"structure"` + + // A user-defined comment about the disk upload. + Comment *string `type:"string"` + + // The time that the disk upload ends. + UploadEnd *time.Time `type:"timestamp"` + + // The size of the uploaded disk image, in GiB. + UploadSize *float64 `type:"double"` + + // The time that the disk upload starts. + UploadStart *time.Time `type:"timestamp"` +} + +// String returns the string representation +func (s ClientData) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientData) GoString() string { + return s.String() +} + +// SetComment sets the Comment field's value. +func (s *ClientData) SetComment(v string) *ClientData { + s.Comment = &v + return s +} + +// SetUploadEnd sets the UploadEnd field's value. +func (s *ClientData) SetUploadEnd(v time.Time) *ClientData { + s.UploadEnd = &v + return s +} + +// SetUploadSize sets the UploadSize field's value. +func (s *ClientData) SetUploadSize(v float64) *ClientData { + s.UploadSize = &v + return s +} + +// SetUploadStart sets the UploadStart field's value. +func (s *ClientData) SetUploadStart(v time.Time) *ClientData { + s.UploadStart = &v + return s +} + +// Describes the authentication methods used by a Client VPN endpoint. Client +// VPN supports Active Directory and mutual authentication. For more information, +// see Authentication (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/authentication-authrization.html#client-authentication) +// in the AWS Client VPN Administrator Guide. +type ClientVpnAuthentication struct { + _ struct{} `type:"structure"` + + // Information about the Active Directory, if applicable. + ActiveDirectory *DirectoryServiceAuthentication `locationName:"activeDirectory" type:"structure"` + + // Information about the authentication certificates, if applicable. + MutualAuthentication *CertificateAuthentication `locationName:"mutualAuthentication" type:"structure"` + + // The authentication type used. + Type *string `locationName:"type" type:"string" enum:"ClientVpnAuthenticationType"` +} + +// String returns the string representation +func (s ClientVpnAuthentication) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnAuthentication) GoString() string { + return s.String() +} + +// SetActiveDirectory sets the ActiveDirectory field's value. +func (s *ClientVpnAuthentication) SetActiveDirectory(v *DirectoryServiceAuthentication) *ClientVpnAuthentication { + s.ActiveDirectory = v + return s +} + +// SetMutualAuthentication sets the MutualAuthentication field's value. +func (s *ClientVpnAuthentication) SetMutualAuthentication(v *CertificateAuthentication) *ClientVpnAuthentication { + s.MutualAuthentication = v + return s +} + +// SetType sets the Type field's value. +func (s *ClientVpnAuthentication) SetType(v string) *ClientVpnAuthentication { + s.Type = &v + return s +} + +// Describes the authentication method to be used by a Client VPN endpoint. +// Client VPN supports Active Directory and mutual authentication. For more +// information, see Authentication (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/authentication-authrization.html#client-authentication) +// in the AWS Client VPN Administrator Guide. +type ClientVpnAuthenticationRequest struct { + _ struct{} `type:"structure"` + + // Information about the Active Directory to be used, if applicable. You must + // provide this information if Type is directory-service-authentication. + ActiveDirectory *DirectoryServiceAuthenticationRequest `type:"structure"` + + // Information about the authentication certificates to be used, if applicable. + // You must provide this information if Type is certificate-authentication. + MutualAuthentication *CertificateAuthenticationRequest `type:"structure"` + + // The type of client authentication to be used. Specify certificate-authentication + // to use certificate-based authentication, or directory-service-authentication + // to use Active Directory authentication. + Type *string `type:"string" enum:"ClientVpnAuthenticationType"` +} + +// String returns the string representation +func (s ClientVpnAuthenticationRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnAuthenticationRequest) GoString() string { + return s.String() +} + +// SetActiveDirectory sets the ActiveDirectory field's value. +func (s *ClientVpnAuthenticationRequest) SetActiveDirectory(v *DirectoryServiceAuthenticationRequest) *ClientVpnAuthenticationRequest { + s.ActiveDirectory = v + return s +} + +// SetMutualAuthentication sets the MutualAuthentication field's value. +func (s *ClientVpnAuthenticationRequest) SetMutualAuthentication(v *CertificateAuthenticationRequest) *ClientVpnAuthenticationRequest { + s.MutualAuthentication = v + return s +} + +// SetType sets the Type field's value. +func (s *ClientVpnAuthenticationRequest) SetType(v string) *ClientVpnAuthenticationRequest { + s.Type = &v + return s +} + +// Describes the state of an authorization rule. +type ClientVpnAuthorizationRuleStatus struct { + _ struct{} `type:"structure"` + + // The state of the authorization rule. + Code *string `locationName:"code" type:"string" enum:"ClientVpnAuthorizationRuleStatusCode"` + + // A message about the status of the authorization rule, if applicable. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s ClientVpnAuthorizationRuleStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnAuthorizationRuleStatus) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *ClientVpnAuthorizationRuleStatus) SetCode(v string) *ClientVpnAuthorizationRuleStatus { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *ClientVpnAuthorizationRuleStatus) SetMessage(v string) *ClientVpnAuthorizationRuleStatus { + s.Message = &v + return s +} + +// Describes a client connection. +type ClientVpnConnection struct { + _ struct{} `type:"structure"` + + // The IP address of the client. + ClientIp *string `locationName:"clientIp" type:"string"` + + // The ID of the Client VPN endpoint to which the client is connected. + ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` + + // The common name associated with the client. This is either the name of the + // client certificate, or the Active Directory user name. + CommonName *string `locationName:"commonName" type:"string"` + + // The date and time the client connection was terminated. + ConnectionEndTime *string `locationName:"connectionEndTime" type:"string"` + + // The date and time the client connection was established. + ConnectionEstablishedTime *string `locationName:"connectionEstablishedTime" type:"string"` + + // The ID of the client connection. + ConnectionId *string `locationName:"connectionId" type:"string"` + + // The number of bytes received by the client. + EgressBytes *string `locationName:"egressBytes" type:"string"` + + // The number of packets received by the client. + EgressPackets *string `locationName:"egressPackets" type:"string"` + + // The number of bytes sent by the client. + IngressBytes *string `locationName:"ingressBytes" type:"string"` + + // The number of packets sent by the client. + IngressPackets *string `locationName:"ingressPackets" type:"string"` + + // The current state of the client connection. + Status *ClientVpnConnectionStatus `locationName:"status" type:"structure"` + + // The current date and time. + Timestamp *string `locationName:"timestamp" type:"string"` + + // The username of the client who established the client connection. This information + // is only provided if Active Directory client authentication is used. + Username *string `locationName:"username" type:"string"` +} + +// String returns the string representation +func (s ClientVpnConnection) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnConnection) GoString() string { + return s.String() +} + +// SetClientIp sets the ClientIp field's value. +func (s *ClientVpnConnection) SetClientIp(v string) *ClientVpnConnection { + s.ClientIp = &v + return s +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *ClientVpnConnection) SetClientVpnEndpointId(v string) *ClientVpnConnection { + s.ClientVpnEndpointId = &v + return s +} + +// SetCommonName sets the CommonName field's value. +func (s *ClientVpnConnection) SetCommonName(v string) *ClientVpnConnection { + s.CommonName = &v + return s +} + +// SetConnectionEndTime sets the ConnectionEndTime field's value. +func (s *ClientVpnConnection) SetConnectionEndTime(v string) *ClientVpnConnection { + s.ConnectionEndTime = &v + return s +} + +// SetConnectionEstablishedTime sets the ConnectionEstablishedTime field's value. +func (s *ClientVpnConnection) SetConnectionEstablishedTime(v string) *ClientVpnConnection { + s.ConnectionEstablishedTime = &v + return s +} + +// SetConnectionId sets the ConnectionId field's value. +func (s *ClientVpnConnection) SetConnectionId(v string) *ClientVpnConnection { + s.ConnectionId = &v + return s +} + +// SetEgressBytes sets the EgressBytes field's value. +func (s *ClientVpnConnection) SetEgressBytes(v string) *ClientVpnConnection { + s.EgressBytes = &v + return s +} + +// SetEgressPackets sets the EgressPackets field's value. +func (s *ClientVpnConnection) SetEgressPackets(v string) *ClientVpnConnection { + s.EgressPackets = &v + return s +} + +// SetIngressBytes sets the IngressBytes field's value. +func (s *ClientVpnConnection) SetIngressBytes(v string) *ClientVpnConnection { + s.IngressBytes = &v + return s +} + +// SetIngressPackets sets the IngressPackets field's value. +func (s *ClientVpnConnection) SetIngressPackets(v string) *ClientVpnConnection { + s.IngressPackets = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *ClientVpnConnection) SetStatus(v *ClientVpnConnectionStatus) *ClientVpnConnection { + s.Status = v + return s +} + +// SetTimestamp sets the Timestamp field's value. +func (s *ClientVpnConnection) SetTimestamp(v string) *ClientVpnConnection { + s.Timestamp = &v + return s +} + +// SetUsername sets the Username field's value. +func (s *ClientVpnConnection) SetUsername(v string) *ClientVpnConnection { + s.Username = &v + return s +} + +// Describes the status of a client connection. +type ClientVpnConnectionStatus struct { + _ struct{} `type:"structure"` + + // The state of the client connection. + Code *string `locationName:"code" type:"string" enum:"ClientVpnConnectionStatusCode"` + + // A message about the status of the client connection, if applicable. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s ClientVpnConnectionStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnConnectionStatus) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *ClientVpnConnectionStatus) SetCode(v string) *ClientVpnConnectionStatus { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *ClientVpnConnectionStatus) SetMessage(v string) *ClientVpnConnectionStatus { + s.Message = &v + return s +} + +// Describes a Client VPN endpoint. +type ClientVpnEndpoint struct { + _ struct{} `type:"structure"` + + // Information about the associated target networks. A target network is a subnet + // in a VPC. + // + // Deprecated: This property is deprecated. To view the target networks associated with a Client VPN endpoint, call DescribeClientVpnTargetNetworks and inspect the clientVpnTargetNetworks response element. + AssociatedTargetNetworks []*AssociatedTargetNetwork `locationName:"associatedTargetNetwork" locationNameList:"item" deprecated:"true" type:"list"` + + // Information about the authentication method used by the Client VPN endpoint. + AuthenticationOptions []*ClientVpnAuthentication `locationName:"authenticationOptions" locationNameList:"item" type:"list"` + + // The IPv4 address range, in CIDR notation, from which client IP addresses + // are assigned. + ClientCidrBlock *string `locationName:"clientCidrBlock" type:"string"` + + // The ID of the Client VPN endpoint. + ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` + + // Information about the client connection logging options for the Client VPN + // endpoint. + ConnectionLogOptions *ConnectionLogResponseOptions `locationName:"connectionLogOptions" type:"structure"` + + // The date and time the Client VPN endpoint was created. + CreationTime *string `locationName:"creationTime" type:"string"` + + // The date and time the Client VPN endpoint was deleted, if applicable. + DeletionTime *string `locationName:"deletionTime" type:"string"` + + // A brief description of the endpoint. + Description *string `locationName:"description" type:"string"` + + // The DNS name to be used by clients when connecting to the Client VPN endpoint. + DnsName *string `locationName:"dnsName" type:"string"` + + // Information about the DNS servers to be used for DNS resolution. + DnsServers []*string `locationName:"dnsServer" locationNameList:"item" type:"list"` + + // The ARN of the server certificate. + ServerCertificateArn *string `locationName:"serverCertificateArn" type:"string"` + + // Indicates whether split-tunnel is enabled in the AWS Client VPN endpoint. + // + // For information about split-tunnel VPN endpoints, see Split-Tunnel AWS Client + // VPN Endpoint (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html) + // in the AWS Client VPN Administrator Guide. + SplitTunnel *bool `locationName:"splitTunnel" type:"boolean"` + + // The current state of the Client VPN endpoint. + Status *ClientVpnEndpointStatus `locationName:"status" type:"structure"` + + // Any tags assigned to the Client VPN endpoint. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The transport protocol used by the Client VPN endpoint. + TransportProtocol *string `locationName:"transportProtocol" type:"string" enum:"TransportProtocol"` + + // The protocol used by the VPN session. + VpnProtocol *string `locationName:"vpnProtocol" type:"string" enum:"VpnProtocol"` +} + +// String returns the string representation +func (s ClientVpnEndpoint) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnEndpoint) GoString() string { + return s.String() +} + +// SetAssociatedTargetNetworks sets the AssociatedTargetNetworks field's value. +func (s *ClientVpnEndpoint) SetAssociatedTargetNetworks(v []*AssociatedTargetNetwork) *ClientVpnEndpoint { + s.AssociatedTargetNetworks = v + return s +} + +// SetAuthenticationOptions sets the AuthenticationOptions field's value. +func (s *ClientVpnEndpoint) SetAuthenticationOptions(v []*ClientVpnAuthentication) *ClientVpnEndpoint { + s.AuthenticationOptions = v + return s +} + +// SetClientCidrBlock sets the ClientCidrBlock field's value. +func (s *ClientVpnEndpoint) SetClientCidrBlock(v string) *ClientVpnEndpoint { + s.ClientCidrBlock = &v + return s +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *ClientVpnEndpoint) SetClientVpnEndpointId(v string) *ClientVpnEndpoint { + s.ClientVpnEndpointId = &v + return s +} + +// SetConnectionLogOptions sets the ConnectionLogOptions field's value. +func (s *ClientVpnEndpoint) SetConnectionLogOptions(v *ConnectionLogResponseOptions) *ClientVpnEndpoint { + s.ConnectionLogOptions = v + return s +} + +// SetCreationTime sets the CreationTime field's value. +func (s *ClientVpnEndpoint) SetCreationTime(v string) *ClientVpnEndpoint { + s.CreationTime = &v + return s +} + +// SetDeletionTime sets the DeletionTime field's value. +func (s *ClientVpnEndpoint) SetDeletionTime(v string) *ClientVpnEndpoint { + s.DeletionTime = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *ClientVpnEndpoint) SetDescription(v string) *ClientVpnEndpoint { + s.Description = &v + return s +} + +// SetDnsName sets the DnsName field's value. +func (s *ClientVpnEndpoint) SetDnsName(v string) *ClientVpnEndpoint { + s.DnsName = &v + return s +} + +// SetDnsServers sets the DnsServers field's value. +func (s *ClientVpnEndpoint) SetDnsServers(v []*string) *ClientVpnEndpoint { + s.DnsServers = v + return s +} + +// SetServerCertificateArn sets the ServerCertificateArn field's value. +func (s *ClientVpnEndpoint) SetServerCertificateArn(v string) *ClientVpnEndpoint { + s.ServerCertificateArn = &v + return s +} + +// SetSplitTunnel sets the SplitTunnel field's value. +func (s *ClientVpnEndpoint) SetSplitTunnel(v bool) *ClientVpnEndpoint { + s.SplitTunnel = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *ClientVpnEndpoint) SetStatus(v *ClientVpnEndpointStatus) *ClientVpnEndpoint { + s.Status = v + return s +} + +// SetTags sets the Tags field's value. +func (s *ClientVpnEndpoint) SetTags(v []*Tag) *ClientVpnEndpoint { + s.Tags = v + return s +} + +// SetTransportProtocol sets the TransportProtocol field's value. +func (s *ClientVpnEndpoint) SetTransportProtocol(v string) *ClientVpnEndpoint { + s.TransportProtocol = &v + return s +} + +// SetVpnProtocol sets the VpnProtocol field's value. +func (s *ClientVpnEndpoint) SetVpnProtocol(v string) *ClientVpnEndpoint { + s.VpnProtocol = &v + return s +} + +// Describes the state of a Client VPN endpoint. +type ClientVpnEndpointStatus struct { + _ struct{} `type:"structure"` + + // The state of the Client VPN endpoint. Possible states include: + // + // * pending-associate - The Client VPN endpoint has been created but no + // target networks have been associated. The Client VPN endpoint cannot accept + // connections. + // + // * available - The Client VPN endpoint has been created and a target network + // has been associated. The Client VPN endpoint can accept connections. + // + // * deleting - The Client VPN endpoint is being deleted. The Client VPN + // endpoint cannot accept connections. + // + // * deleted - The Client VPN endpoint has been deleted. The Client VPN endpoint + // cannot accept connections. + Code *string `locationName:"code" type:"string" enum:"ClientVpnEndpointStatusCode"` + + // A message about the status of the Client VPN endpoint. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s ClientVpnEndpointStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnEndpointStatus) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *ClientVpnEndpointStatus) SetCode(v string) *ClientVpnEndpointStatus { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *ClientVpnEndpointStatus) SetMessage(v string) *ClientVpnEndpointStatus { + s.Message = &v + return s +} + +// Information about a Client VPN endpoint route. +type ClientVpnRoute struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN endpoint with which the route is associated. + ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` + + // A brief description of the route. + Description *string `locationName:"description" type:"string"` + + // The IPv4 address range, in CIDR notation, of the route destination. + DestinationCidr *string `locationName:"destinationCidr" type:"string"` + + // Indicates how the route was associated with the Client VPN endpoint. associate + // indicates that the route was automatically added when the target network + // was associated with the Client VPN endpoint. add-route indicates that the + // route was manually added using the CreateClientVpnRoute action. + Origin *string `locationName:"origin" type:"string"` + + // The current state of the route. + Status *ClientVpnRouteStatus `locationName:"status" type:"structure"` + + // The ID of the subnet through which traffic is routed. + TargetSubnet *string `locationName:"targetSubnet" type:"string"` + + // The route type. + Type *string `locationName:"type" type:"string"` +} + +// String returns the string representation +func (s ClientVpnRoute) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnRoute) GoString() string { + return s.String() +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *ClientVpnRoute) SetClientVpnEndpointId(v string) *ClientVpnRoute { + s.ClientVpnEndpointId = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *ClientVpnRoute) SetDescription(v string) *ClientVpnRoute { + s.Description = &v + return s +} + +// SetDestinationCidr sets the DestinationCidr field's value. +func (s *ClientVpnRoute) SetDestinationCidr(v string) *ClientVpnRoute { + s.DestinationCidr = &v + return s +} + +// SetOrigin sets the Origin field's value. +func (s *ClientVpnRoute) SetOrigin(v string) *ClientVpnRoute { + s.Origin = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *ClientVpnRoute) SetStatus(v *ClientVpnRouteStatus) *ClientVpnRoute { + s.Status = v + return s +} + +// SetTargetSubnet sets the TargetSubnet field's value. +func (s *ClientVpnRoute) SetTargetSubnet(v string) *ClientVpnRoute { + s.TargetSubnet = &v + return s +} + +// SetType sets the Type field's value. +func (s *ClientVpnRoute) SetType(v string) *ClientVpnRoute { + s.Type = &v + return s +} + +// Describes the state of a Client VPN endpoint route. +type ClientVpnRouteStatus struct { + _ struct{} `type:"structure"` + + // The state of the Client VPN endpoint route. + Code *string `locationName:"code" type:"string" enum:"ClientVpnRouteStatusCode"` + + // A message about the status of the Client VPN endpoint route, if applicable. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s ClientVpnRouteStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ClientVpnRouteStatus) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *ClientVpnRouteStatus) SetCode(v string) *ClientVpnRouteStatus { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *ClientVpnRouteStatus) SetMessage(v string) *ClientVpnRouteStatus { + s.Message = &v + return s +} + +type ConfirmProductInstanceInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` + + // The product code. This must be a product code that you own. + // + // ProductCode is a required field + ProductCode *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s ConfirmProductInstanceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ConfirmProductInstanceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ConfirmProductInstanceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ConfirmProductInstanceInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + if s.ProductCode == nil { + invalidParams.Add(request.NewErrParamRequired("ProductCode")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *ConfirmProductInstanceInput) SetDryRun(v bool) *ConfirmProductInstanceInput { + s.DryRun = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *ConfirmProductInstanceInput) SetInstanceId(v string) *ConfirmProductInstanceInput { + s.InstanceId = &v + return s +} + +// SetProductCode sets the ProductCode field's value. +func (s *ConfirmProductInstanceInput) SetProductCode(v string) *ConfirmProductInstanceInput { + s.ProductCode = &v + return s +} + +type ConfirmProductInstanceOutput struct { + _ struct{} `type:"structure"` + + // The AWS account ID of the instance owner. This is only present if the product + // code is attached to the instance. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The return value of the request. Returns true if the specified product code + // is owned by the requester and associated with the specified instance. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s ConfirmProductInstanceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ConfirmProductInstanceOutput) GoString() string { + return s.String() +} + +// SetOwnerId sets the OwnerId field's value. +func (s *ConfirmProductInstanceOutput) SetOwnerId(v string) *ConfirmProductInstanceOutput { + s.OwnerId = &v + return s +} + +// SetReturn sets the Return field's value. +func (s *ConfirmProductInstanceOutput) SetReturn(v bool) *ConfirmProductInstanceOutput { + s.Return = &v + return s +} + +// Describes the client connection logging options for the Client VPN endpoint. +type ConnectionLogOptions struct { + _ struct{} `type:"structure"` + + // The name of the CloudWatch Logs log group. + CloudwatchLogGroup *string `type:"string"` + + // The name of the CloudWatch Logs log stream to which the connection data is + // published. + CloudwatchLogStream *string `type:"string"` + + // Indicates whether connection logging is enabled. + Enabled *bool `type:"boolean"` +} + +// String returns the string representation +func (s ConnectionLogOptions) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ConnectionLogOptions) GoString() string { + return s.String() +} + +// SetCloudwatchLogGroup sets the CloudwatchLogGroup field's value. +func (s *ConnectionLogOptions) SetCloudwatchLogGroup(v string) *ConnectionLogOptions { + s.CloudwatchLogGroup = &v + return s +} + +// SetCloudwatchLogStream sets the CloudwatchLogStream field's value. +func (s *ConnectionLogOptions) SetCloudwatchLogStream(v string) *ConnectionLogOptions { + s.CloudwatchLogStream = &v + return s +} + +// SetEnabled sets the Enabled field's value. +func (s *ConnectionLogOptions) SetEnabled(v bool) *ConnectionLogOptions { + s.Enabled = &v + return s +} + +// Information about the client connection logging options for a Client VPN +// endpoint. +type ConnectionLogResponseOptions struct { + _ struct{} `type:"structure"` + + // The name of the Amazon CloudWatch Logs log group to which connection logging + // data is published. + CloudwatchLogGroup *string `type:"string"` + + // The name of the Amazon CloudWatch Logs log stream to which connection logging + // data is published. + CloudwatchLogStream *string `type:"string"` + + // Indicates whether client connection logging is enabled for the Client VPN + // endpoint. + Enabled *bool `type:"boolean"` +} + +// String returns the string representation +func (s ConnectionLogResponseOptions) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ConnectionLogResponseOptions) GoString() string { + return s.String() +} + +// SetCloudwatchLogGroup sets the CloudwatchLogGroup field's value. +func (s *ConnectionLogResponseOptions) SetCloudwatchLogGroup(v string) *ConnectionLogResponseOptions { + s.CloudwatchLogGroup = &v + return s +} + +// SetCloudwatchLogStream sets the CloudwatchLogStream field's value. +func (s *ConnectionLogResponseOptions) SetCloudwatchLogStream(v string) *ConnectionLogResponseOptions { + s.CloudwatchLogStream = &v + return s +} + +// SetEnabled sets the Enabled field's value. +func (s *ConnectionLogResponseOptions) SetEnabled(v bool) *ConnectionLogResponseOptions { + s.Enabled = &v + return s +} + +// Describes a connection notification for a VPC endpoint or VPC endpoint service. +type ConnectionNotification struct { + _ struct{} `type:"structure"` + + // The events for the notification. Valid values are Accept, Connect, Delete, + // and Reject. + ConnectionEvents []*string `locationName:"connectionEvents" locationNameList:"item" type:"list"` + + // The ARN of the SNS topic for the notification. + ConnectionNotificationArn *string `locationName:"connectionNotificationArn" type:"string"` + + // The ID of the notification. + ConnectionNotificationId *string `locationName:"connectionNotificationId" type:"string"` + + // The state of the notification. + ConnectionNotificationState *string `locationName:"connectionNotificationState" type:"string" enum:"ConnectionNotificationState"` + + // The type of notification. + ConnectionNotificationType *string `locationName:"connectionNotificationType" type:"string" enum:"ConnectionNotificationType"` + + // The ID of the endpoint service. + ServiceId *string `locationName:"serviceId" type:"string"` + + // The ID of the VPC endpoint. + VpcEndpointId *string `locationName:"vpcEndpointId" type:"string"` +} + +// String returns the string representation +func (s ConnectionNotification) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ConnectionNotification) GoString() string { + return s.String() +} + +// SetConnectionEvents sets the ConnectionEvents field's value. +func (s *ConnectionNotification) SetConnectionEvents(v []*string) *ConnectionNotification { + s.ConnectionEvents = v + return s +} + +// SetConnectionNotificationArn sets the ConnectionNotificationArn field's value. +func (s *ConnectionNotification) SetConnectionNotificationArn(v string) *ConnectionNotification { + s.ConnectionNotificationArn = &v + return s +} + +// SetConnectionNotificationId sets the ConnectionNotificationId field's value. +func (s *ConnectionNotification) SetConnectionNotificationId(v string) *ConnectionNotification { + s.ConnectionNotificationId = &v + return s +} + +// SetConnectionNotificationState sets the ConnectionNotificationState field's value. +func (s *ConnectionNotification) SetConnectionNotificationState(v string) *ConnectionNotification { + s.ConnectionNotificationState = &v + return s +} + +// SetConnectionNotificationType sets the ConnectionNotificationType field's value. +func (s *ConnectionNotification) SetConnectionNotificationType(v string) *ConnectionNotification { + s.ConnectionNotificationType = &v + return s +} + +// SetServiceId sets the ServiceId field's value. +func (s *ConnectionNotification) SetServiceId(v string) *ConnectionNotification { + s.ServiceId = &v + return s +} + +// SetVpcEndpointId sets the VpcEndpointId field's value. +func (s *ConnectionNotification) SetVpcEndpointId(v string) *ConnectionNotification { + s.VpcEndpointId = &v + return s +} + +// Describes a conversion task. +type ConversionTask struct { + _ struct{} `type:"structure"` + + // The ID of the conversion task. + ConversionTaskId *string `locationName:"conversionTaskId" type:"string"` + + // The time when the task expires. If the upload isn't complete before the expiration + // time, we automatically cancel the task. + ExpirationTime *string `locationName:"expirationTime" type:"string"` + + // If the task is for importing an instance, this contains information about + // the import instance task. + ImportInstance *ImportInstanceTaskDetails `locationName:"importInstance" type:"structure"` + + // If the task is for importing a volume, this contains information about the + // import volume task. + ImportVolume *ImportVolumeTaskDetails `locationName:"importVolume" type:"structure"` + + // The state of the conversion task. + State *string `locationName:"state" type:"string" enum:"ConversionTaskState"` + + // The status message related to the conversion task. + StatusMessage *string `locationName:"statusMessage" type:"string"` + + // Any tags assigned to the task. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s ConversionTask) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ConversionTask) GoString() string { + return s.String() +} + +// SetConversionTaskId sets the ConversionTaskId field's value. +func (s *ConversionTask) SetConversionTaskId(v string) *ConversionTask { + s.ConversionTaskId = &v + return s +} + +// SetExpirationTime sets the ExpirationTime field's value. +func (s *ConversionTask) SetExpirationTime(v string) *ConversionTask { + s.ExpirationTime = &v + return s +} + +// SetImportInstance sets the ImportInstance field's value. +func (s *ConversionTask) SetImportInstance(v *ImportInstanceTaskDetails) *ConversionTask { + s.ImportInstance = v + return s +} + +// SetImportVolume sets the ImportVolume field's value. +func (s *ConversionTask) SetImportVolume(v *ImportVolumeTaskDetails) *ConversionTask { + s.ImportVolume = v + return s +} + +// SetState sets the State field's value. +func (s *ConversionTask) SetState(v string) *ConversionTask { + s.State = &v + return s +} + +// SetStatusMessage sets the StatusMessage field's value. +func (s *ConversionTask) SetStatusMessage(v string) *ConversionTask { + s.StatusMessage = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *ConversionTask) SetTags(v []*Tag) *ConversionTask { + s.Tags = v + return s +} + +type CopyFpgaImageInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // The description for the new AFI. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The name for the new AFI. The default is the name of the source AFI. + Name *string `type:"string"` + + // The ID of the source AFI. + // + // SourceFpgaImageId is a required field + SourceFpgaImageId *string `type:"string" required:"true"` + + // The Region that contains the source AFI. + // + // SourceRegion is a required field + SourceRegion *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CopyFpgaImageInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopyFpgaImageInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CopyFpgaImageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CopyFpgaImageInput"} + if s.SourceFpgaImageId == nil { + invalidParams.Add(request.NewErrParamRequired("SourceFpgaImageId")) + } + if s.SourceRegion == nil { + invalidParams.Add(request.NewErrParamRequired("SourceRegion")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CopyFpgaImageInput) SetClientToken(v string) *CopyFpgaImageInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CopyFpgaImageInput) SetDescription(v string) *CopyFpgaImageInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CopyFpgaImageInput) SetDryRun(v bool) *CopyFpgaImageInput { + s.DryRun = &v + return s +} + +// SetName sets the Name field's value. +func (s *CopyFpgaImageInput) SetName(v string) *CopyFpgaImageInput { + s.Name = &v + return s +} + +// SetSourceFpgaImageId sets the SourceFpgaImageId field's value. +func (s *CopyFpgaImageInput) SetSourceFpgaImageId(v string) *CopyFpgaImageInput { + s.SourceFpgaImageId = &v + return s +} + +// SetSourceRegion sets the SourceRegion field's value. +func (s *CopyFpgaImageInput) SetSourceRegion(v string) *CopyFpgaImageInput { + s.SourceRegion = &v + return s +} + +type CopyFpgaImageOutput struct { + _ struct{} `type:"structure"` + + // The ID of the new AFI. + FpgaImageId *string `locationName:"fpgaImageId" type:"string"` +} + +// String returns the string representation +func (s CopyFpgaImageOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopyFpgaImageOutput) GoString() string { + return s.String() +} + +// SetFpgaImageId sets the FpgaImageId field's value. +func (s *CopyFpgaImageOutput) SetFpgaImageId(v string) *CopyFpgaImageOutput { + s.FpgaImageId = &v + return s +} + +// Contains the parameters for CopyImage. +type CopyImageInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure idempotency of the + // request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) + // in the Amazon Elastic Compute Cloud User Guide. + ClientToken *string `type:"string"` + + // A description for the new AMI in the destination Region. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // Specifies whether the destination snapshots of the copied image should be + // encrypted. You can encrypt a copy of an unencrypted snapshot, but you cannot + // create an unencrypted copy of an encrypted snapshot. The default CMK for + // EBS is used unless you specify a non-default AWS Key Management Service (AWS + // KMS) CMK using KmsKeyId. For more information, see Amazon EBS Encryption + // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) + // in the Amazon Elastic Compute Cloud User Guide. + Encrypted *bool `locationName:"encrypted" type:"boolean"` + + // An identifier for the AWS Key Management Service (AWS KMS) customer master + // key (CMK) to use when creating the encrypted volume. This parameter is only + // required if you want to use a non-default CMK; if this parameter is not specified, + // the default CMK for EBS is used. If a KmsKeyId is specified, the Encrypted + // flag must also be set. + // + // To specify a CMK, use its key ID, Amazon Resource Name (ARN), alias name, + // or alias ARN. When using an alias name, prefix it with "alias/". For example: + // + // * Key ID: 1234abcd-12ab-34cd-56ef-1234567890ab + // + // * Key ARN: arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab + // + // * Alias name: alias/ExampleAlias + // + // * Alias ARN: arn:aws:kms:us-east-2:111122223333:alias/ExampleAlias + // + // AWS parses KmsKeyId asynchronously, meaning that the action you call may + // appear to complete even though you provided an invalid identifier. This action + // will eventually report failure. + // + // The specified CMK must exist in the Region that the snapshot is being copied + // to. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + + // The name of the new AMI in the destination Region. + // + // Name is a required field + Name *string `type:"string" required:"true"` + + // The ID of the AMI to copy. + // + // SourceImageId is a required field + SourceImageId *string `type:"string" required:"true"` + + // The name of the Region that contains the AMI to copy. + // + // SourceRegion is a required field + SourceRegion *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CopyImageInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopyImageInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CopyImageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CopyImageInput"} + if s.Name == nil { + invalidParams.Add(request.NewErrParamRequired("Name")) + } + if s.SourceImageId == nil { + invalidParams.Add(request.NewErrParamRequired("SourceImageId")) + } + if s.SourceRegion == nil { + invalidParams.Add(request.NewErrParamRequired("SourceRegion")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CopyImageInput) SetClientToken(v string) *CopyImageInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CopyImageInput) SetDescription(v string) *CopyImageInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CopyImageInput) SetDryRun(v bool) *CopyImageInput { + s.DryRun = &v + return s +} + +// SetEncrypted sets the Encrypted field's value. +func (s *CopyImageInput) SetEncrypted(v bool) *CopyImageInput { + s.Encrypted = &v + return s +} + +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *CopyImageInput) SetKmsKeyId(v string) *CopyImageInput { + s.KmsKeyId = &v + return s +} + +// SetName sets the Name field's value. +func (s *CopyImageInput) SetName(v string) *CopyImageInput { + s.Name = &v + return s +} + +// SetSourceImageId sets the SourceImageId field's value. +func (s *CopyImageInput) SetSourceImageId(v string) *CopyImageInput { + s.SourceImageId = &v + return s +} + +// SetSourceRegion sets the SourceRegion field's value. +func (s *CopyImageInput) SetSourceRegion(v string) *CopyImageInput { + s.SourceRegion = &v + return s +} + +// Contains the output of CopyImage. +type CopyImageOutput struct { + _ struct{} `type:"structure"` + + // The ID of the new AMI. + ImageId *string `locationName:"imageId" type:"string"` +} + +// String returns the string representation +func (s CopyImageOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopyImageOutput) GoString() string { + return s.String() +} + +// SetImageId sets the ImageId field's value. +func (s *CopyImageOutput) SetImageId(v string) *CopyImageOutput { + s.ImageId = &v + return s +} + +type CopySnapshotInput struct { + _ struct{} `type:"structure"` + + // A description for the EBS snapshot. + Description *string `type:"string"` + + // The destination Region to use in the PresignedUrl parameter of a snapshot + // copy operation. This parameter is only valid for specifying the destination + // Region in a PresignedUrl parameter, where it is required. + // + // The snapshot copy is sent to the regional endpoint that you sent the HTTP + // request to (for example, ec2.us-east-1.amazonaws.com). With the AWS CLI, + // this is specified using the --region parameter or the default Region in your + // AWS configuration file. + DestinationRegion *string `locationName:"destinationRegion" type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // To encrypt a copy of an unencrypted snapshot if encryption by default is + // not enabled, enable encryption using this parameter. Otherwise, omit this + // parameter. Encrypted snapshots are encrypted, even if you omit this parameter + // and encryption by default is not enabled. You cannot set this parameter to + // false. For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) + // in the Amazon Elastic Compute Cloud User Guide. + Encrypted *bool `locationName:"encrypted" type:"boolean"` + + // The identifier of the AWS Key Management Service (AWS KMS) customer master + // key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, + // your AWS managed CMK for EBS is used. If KmsKeyId is specified, the encrypted + // state must be true. + // + // You can specify the CMK using any of the following: + // + // * Key ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab. + // + // * Key alias. For example, alias/ExampleAlias. + // + // * Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. + // + // * Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. + // + // AWS authenticates the CMK asynchronously. Therefore, if you specify an ID, + // alias, or ARN that is not valid, the action can appear to complete, but eventually + // fails. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + + // When you copy an encrypted source snapshot using the Amazon EC2 Query API, + // you must supply a pre-signed URL. This parameter is optional for unencrypted + // snapshots. For more information, see Query Requests (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html). + // + // The PresignedUrl should use the snapshot source endpoint, the CopySnapshot + // action, and include the SourceRegion, SourceSnapshotId, and DestinationRegion + // parameters. The PresignedUrl must be signed using AWS Signature Version 4. + // Because EBS snapshots are stored in Amazon S3, the signing algorithm for + // this parameter uses the same logic that is described in Authenticating Requests + // by Using Query Parameters (AWS Signature Version 4) (https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html) + // in the Amazon Simple Storage Service API Reference. An invalid or improperly + // signed PresignedUrl will cause the copy operation to fail asynchronously, + // and the snapshot will move to an error state. + PresignedUrl *string `locationName:"presignedUrl" type:"string"` + + // The ID of the Region that contains the snapshot to be copied. + // + // SourceRegion is a required field + SourceRegion *string `type:"string" required:"true"` + + // The ID of the EBS snapshot to copy. + // + // SourceSnapshotId is a required field + SourceSnapshotId *string `type:"string" required:"true"` + + // The tags to apply to the new snapshot. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CopySnapshotInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopySnapshotInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CopySnapshotInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CopySnapshotInput"} + if s.SourceRegion == nil { + invalidParams.Add(request.NewErrParamRequired("SourceRegion")) + } + if s.SourceSnapshotId == nil { + invalidParams.Add(request.NewErrParamRequired("SourceSnapshotId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDescription sets the Description field's value. +func (s *CopySnapshotInput) SetDescription(v string) *CopySnapshotInput { + s.Description = &v + return s +} + +// SetDestinationRegion sets the DestinationRegion field's value. +func (s *CopySnapshotInput) SetDestinationRegion(v string) *CopySnapshotInput { + s.DestinationRegion = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CopySnapshotInput) SetDryRun(v bool) *CopySnapshotInput { + s.DryRun = &v + return s +} + +// SetEncrypted sets the Encrypted field's value. +func (s *CopySnapshotInput) SetEncrypted(v bool) *CopySnapshotInput { + s.Encrypted = &v + return s +} + +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *CopySnapshotInput) SetKmsKeyId(v string) *CopySnapshotInput { + s.KmsKeyId = &v + return s +} + +// SetPresignedUrl sets the PresignedUrl field's value. +func (s *CopySnapshotInput) SetPresignedUrl(v string) *CopySnapshotInput { + s.PresignedUrl = &v + return s +} + +// SetSourceRegion sets the SourceRegion field's value. +func (s *CopySnapshotInput) SetSourceRegion(v string) *CopySnapshotInput { + s.SourceRegion = &v + return s +} + +// SetSourceSnapshotId sets the SourceSnapshotId field's value. +func (s *CopySnapshotInput) SetSourceSnapshotId(v string) *CopySnapshotInput { + s.SourceSnapshotId = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CopySnapshotInput) SetTagSpecifications(v []*TagSpecification) *CopySnapshotInput { + s.TagSpecifications = v + return s +} + +type CopySnapshotOutput struct { + _ struct{} `type:"structure"` + + // The ID of the new snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` + + // Any tags applied to the new snapshot. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CopySnapshotOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CopySnapshotOutput) GoString() string { + return s.String() +} + +// SetSnapshotId sets the SnapshotId field's value. +func (s *CopySnapshotOutput) SetSnapshotId(v string) *CopySnapshotOutput { + s.SnapshotId = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *CopySnapshotOutput) SetTags(v []*Tag) *CopySnapshotOutput { + s.Tags = v + return s +} + +// The CPU options for the instance. +type CpuOptions struct { + _ struct{} `type:"structure"` + + // The number of CPU cores for the instance. + CoreCount *int64 `locationName:"coreCount" type:"integer"` + + // The number of threads per CPU core. + ThreadsPerCore *int64 `locationName:"threadsPerCore" type:"integer"` +} + +// String returns the string representation +func (s CpuOptions) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CpuOptions) GoString() string { + return s.String() +} + +// SetCoreCount sets the CoreCount field's value. +func (s *CpuOptions) SetCoreCount(v int64) *CpuOptions { + s.CoreCount = &v + return s +} + +// SetThreadsPerCore sets the ThreadsPerCore field's value. +func (s *CpuOptions) SetThreadsPerCore(v int64) *CpuOptions { + s.ThreadsPerCore = &v + return s +} + +// The CPU options for the instance. Both the core count and threads per core +// must be specified in the request. +type CpuOptionsRequest struct { + _ struct{} `type:"structure"` + + // The number of CPU cores for the instance. + CoreCount *int64 `type:"integer"` + + // The number of threads per CPU core. To disable multithreading for the instance, + // specify a value of 1. Otherwise, specify the default value of 2. + ThreadsPerCore *int64 `type:"integer"` +} + +// String returns the string representation +func (s CpuOptionsRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CpuOptionsRequest) GoString() string { + return s.String() +} + +// SetCoreCount sets the CoreCount field's value. +func (s *CpuOptionsRequest) SetCoreCount(v int64) *CpuOptionsRequest { + s.CoreCount = &v + return s +} + +// SetThreadsPerCore sets the ThreadsPerCore field's value. +func (s *CpuOptionsRequest) SetThreadsPerCore(v int64) *CpuOptionsRequest { + s.ThreadsPerCore = &v + return s +} + +type CreateCapacityReservationInput struct { + _ struct{} `type:"structure"` + + // The Availability Zone in which to create the Capacity Reservation. + AvailabilityZone *string `type:"string"` + + // The ID of the Availability Zone in which to create the Capacity Reservation. + AvailabilityZoneId *string `type:"string"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + // + // Constraint: Maximum 64 ASCII characters. + ClientToken *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // Indicates whether the Capacity Reservation supports EBS-optimized instances. + // This optimization provides dedicated throughput to Amazon EBS and an optimized + // configuration stack to provide optimal I/O performance. This optimization + // isn't available with all instance types. Additional usage charges apply when + // using an EBS- optimized instance. + EbsOptimized *bool `type:"boolean"` + + // The date and time at which the Capacity Reservation expires. When a Capacity + // Reservation expires, the reserved capacity is released and you can no longer + // launch instances into it. The Capacity Reservation's state changes to expired + // when it reaches its end date and time. + // + // You must provide an EndDate value if EndDateType is limited. Omit EndDate + // if EndDateType is unlimited. + // + // If the EndDateType is limited, the Capacity Reservation is cancelled within + // an hour from the specified time. For example, if you specify 5/31/2019, 13:30:55, + // the Capacity Reservation is guaranteed to end between 13:30:55 and 14:30:55 + // on 5/31/2019. + EndDate *time.Time `type:"timestamp"` + + // Indicates the way in which the Capacity Reservation ends. A Capacity Reservation + // can have one of the following end types: + // + // * unlimited - The Capacity Reservation remains active until you explicitly + // cancel it. Do not provide an EndDate if the EndDateType is unlimited. + // + // * limited - The Capacity Reservation expires automatically at a specified + // date and time. You must provide an EndDate value if the EndDateType value + // is limited. + EndDateType *string `type:"string" enum:"EndDateType"` + + // Indicates whether the Capacity Reservation supports instances with temporary, + // block-level storage. + EphemeralStorage *bool `type:"boolean"` + + // The number of instances for which to reserve capacity. + // + // InstanceCount is a required field + InstanceCount *int64 `type:"integer" required:"true"` + + // Indicates the type of instance launches that the Capacity Reservation accepts. + // The options include: + // + // * open - The Capacity Reservation automatically matches all instances + // that have matching attributes (instance type, platform, and Availability + // Zone). Instances that have matching attributes run in the Capacity Reservation + // automatically without specifying any additional parameters. + // + // * targeted - The Capacity Reservation only accepts instances that have + // matching attributes (instance type, platform, and Availability Zone), + // and explicitly target the Capacity Reservation. This ensures that only + // permitted instances can use the reserved capacity. + // + // Default: open + InstanceMatchCriteria *string `type:"string" enum:"InstanceMatchCriteria"` + + // The type of operating system for which to reserve capacity. + // + // InstancePlatform is a required field + InstancePlatform *string `type:"string" required:"true" enum:"CapacityReservationInstancePlatform"` + + // The instance type for which to reserve capacity. For more information, see + // Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) + // in the Amazon Elastic Compute Cloud User Guide. + // + // InstanceType is a required field + InstanceType *string `type:"string" required:"true"` + + // The tags to apply to the Capacity Reservation during launch. + TagSpecifications []*TagSpecification `locationNameList:"item" type:"list"` + + // Indicates the tenancy of the Capacity Reservation. A Capacity Reservation + // can have one of the following tenancy settings: + // + // * default - The Capacity Reservation is created on hardware that is shared + // with other AWS accounts. + // + // * dedicated - The Capacity Reservation is created on single-tenant hardware + // that is dedicated to a single AWS account. + Tenancy *string `type:"string" enum:"CapacityReservationTenancy"` +} + +// String returns the string representation +func (s CreateCapacityReservationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateCapacityReservationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateCapacityReservationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateCapacityReservationInput"} + if s.InstanceCount == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceCount")) + } + if s.InstancePlatform == nil { + invalidParams.Add(request.NewErrParamRequired("InstancePlatform")) + } + if s.InstanceType == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceType")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *CreateCapacityReservationInput) SetAvailabilityZone(v string) *CreateCapacityReservationInput { + s.AvailabilityZone = &v + return s +} + +// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. +func (s *CreateCapacityReservationInput) SetAvailabilityZoneId(v string) *CreateCapacityReservationInput { + s.AvailabilityZoneId = &v + return s +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateCapacityReservationInput) SetClientToken(v string) *CreateCapacityReservationInput { + s.ClientToken = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateCapacityReservationInput) SetDryRun(v bool) *CreateCapacityReservationInput { + s.DryRun = &v + return s +} + +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *CreateCapacityReservationInput) SetEbsOptimized(v bool) *CreateCapacityReservationInput { + s.EbsOptimized = &v + return s +} + +// SetEndDate sets the EndDate field's value. +func (s *CreateCapacityReservationInput) SetEndDate(v time.Time) *CreateCapacityReservationInput { + s.EndDate = &v + return s +} + +// SetEndDateType sets the EndDateType field's value. +func (s *CreateCapacityReservationInput) SetEndDateType(v string) *CreateCapacityReservationInput { + s.EndDateType = &v + return s +} + +// SetEphemeralStorage sets the EphemeralStorage field's value. +func (s *CreateCapacityReservationInput) SetEphemeralStorage(v bool) *CreateCapacityReservationInput { + s.EphemeralStorage = &v + return s +} + +// SetInstanceCount sets the InstanceCount field's value. +func (s *CreateCapacityReservationInput) SetInstanceCount(v int64) *CreateCapacityReservationInput { + s.InstanceCount = &v + return s +} + +// SetInstanceMatchCriteria sets the InstanceMatchCriteria field's value. +func (s *CreateCapacityReservationInput) SetInstanceMatchCriteria(v string) *CreateCapacityReservationInput { + s.InstanceMatchCriteria = &v + return s +} + +// SetInstancePlatform sets the InstancePlatform field's value. +func (s *CreateCapacityReservationInput) SetInstancePlatform(v string) *CreateCapacityReservationInput { + s.InstancePlatform = &v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *CreateCapacityReservationInput) SetInstanceType(v string) *CreateCapacityReservationInput { + s.InstanceType = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateCapacityReservationInput) SetTagSpecifications(v []*TagSpecification) *CreateCapacityReservationInput { + s.TagSpecifications = v + return s +} + +// SetTenancy sets the Tenancy field's value. +func (s *CreateCapacityReservationInput) SetTenancy(v string) *CreateCapacityReservationInput { + s.Tenancy = &v + return s +} + +type CreateCapacityReservationOutput struct { + _ struct{} `type:"structure"` + + // Information about the Capacity Reservation. + CapacityReservation *CapacityReservation `locationName:"capacityReservation" type:"structure"` +} + +// String returns the string representation +func (s CreateCapacityReservationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateCapacityReservationOutput) GoString() string { + return s.String() +} + +// SetCapacityReservation sets the CapacityReservation field's value. +func (s *CreateCapacityReservationOutput) SetCapacityReservation(v *CapacityReservation) *CreateCapacityReservationOutput { + s.CapacityReservation = v + return s +} + +type CreateClientVpnEndpointInput struct { + _ struct{} `type:"structure"` + + // Information about the authentication method to be used to authenticate clients. + // + // AuthenticationOptions is a required field + AuthenticationOptions []*ClientVpnAuthenticationRequest `locationName:"Authentication" type:"list" required:"true"` + + // The IPv4 address range, in CIDR notation, from which to assign client IP + // addresses. The address range cannot overlap with the local CIDR of the VPC + // in which the associated subnet is located, or the routes that you add manually. + // The address range cannot be changed after the Client VPN endpoint has been + // created. The CIDR block should be /22 or greater. + // + // ClientCidrBlock is a required field + ClientCidrBlock *string `type:"string" required:"true"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // Information about the client connection logging options. + // + // If you enable client connection logging, data about client connections is + // sent to a Cloudwatch Logs log stream. The following information is logged: + // + // * Client connection requests + // + // * Client connection results (successful and unsuccessful) + // + // * Reasons for unsuccessful client connection requests + // + // * Client connection termination time + // + // ConnectionLogOptions is a required field + ConnectionLogOptions *ConnectionLogOptions `type:"structure" required:"true"` + + // A brief description of the Client VPN endpoint. + Description *string `type:"string"` + + // Information about the DNS servers to be used for DNS resolution. A Client + // VPN endpoint can have up to two DNS servers. If no DNS server is specified, + // the DNS address configured on the device is used for the DNS server. + DnsServers []*string `locationNameList:"item" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ARN of the server certificate. For more information, see the AWS Certificate + // Manager User Guide (https://docs.aws.amazon.com/acm/latest/userguide/). + // + // ServerCertificateArn is a required field + ServerCertificateArn *string `type:"string" required:"true"` + + // Indicates whether split-tunnel is enabled on the AWS Client VPN endpoint. + // + // By default, split-tunnel on a VPN endpoint is disabled. + // + // For information about split-tunnel VPN endpoints, see Split-Tunnel AWS Client + // VPN Endpoint (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html) + // in the AWS Client VPN Administrator Guide. + SplitTunnel *bool `type:"boolean"` + + // The tags to apply to the Client VPN endpoint during creation. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` + + // The transport protocol to be used by the VPN session. + // + // Default value: udp + TransportProtocol *string `type:"string" enum:"TransportProtocol"` +} + +// String returns the string representation +func (s CreateClientVpnEndpointInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateClientVpnEndpointInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateClientVpnEndpointInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateClientVpnEndpointInput"} + if s.AuthenticationOptions == nil { + invalidParams.Add(request.NewErrParamRequired("AuthenticationOptions")) + } + if s.ClientCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("ClientCidrBlock")) + } + if s.ConnectionLogOptions == nil { + invalidParams.Add(request.NewErrParamRequired("ConnectionLogOptions")) + } + if s.ServerCertificateArn == nil { + invalidParams.Add(request.NewErrParamRequired("ServerCertificateArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAuthenticationOptions sets the AuthenticationOptions field's value. +func (s *CreateClientVpnEndpointInput) SetAuthenticationOptions(v []*ClientVpnAuthenticationRequest) *CreateClientVpnEndpointInput { + s.AuthenticationOptions = v + return s +} + +// SetClientCidrBlock sets the ClientCidrBlock field's value. +func (s *CreateClientVpnEndpointInput) SetClientCidrBlock(v string) *CreateClientVpnEndpointInput { + s.ClientCidrBlock = &v + return s +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateClientVpnEndpointInput) SetClientToken(v string) *CreateClientVpnEndpointInput { + s.ClientToken = &v + return s +} + +// SetConnectionLogOptions sets the ConnectionLogOptions field's value. +func (s *CreateClientVpnEndpointInput) SetConnectionLogOptions(v *ConnectionLogOptions) *CreateClientVpnEndpointInput { + s.ConnectionLogOptions = v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateClientVpnEndpointInput) SetDescription(v string) *CreateClientVpnEndpointInput { + s.Description = &v + return s +} + +// SetDnsServers sets the DnsServers field's value. +func (s *CreateClientVpnEndpointInput) SetDnsServers(v []*string) *CreateClientVpnEndpointInput { + s.DnsServers = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateClientVpnEndpointInput) SetDryRun(v bool) *CreateClientVpnEndpointInput { + s.DryRun = &v + return s +} + +// SetServerCertificateArn sets the ServerCertificateArn field's value. +func (s *CreateClientVpnEndpointInput) SetServerCertificateArn(v string) *CreateClientVpnEndpointInput { + s.ServerCertificateArn = &v + return s +} + +// SetSplitTunnel sets the SplitTunnel field's value. +func (s *CreateClientVpnEndpointInput) SetSplitTunnel(v bool) *CreateClientVpnEndpointInput { + s.SplitTunnel = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateClientVpnEndpointInput) SetTagSpecifications(v []*TagSpecification) *CreateClientVpnEndpointInput { + s.TagSpecifications = v + return s +} + +// SetTransportProtocol sets the TransportProtocol field's value. +func (s *CreateClientVpnEndpointInput) SetTransportProtocol(v string) *CreateClientVpnEndpointInput { + s.TransportProtocol = &v + return s +} + +type CreateClientVpnEndpointOutput struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN endpoint. + ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` + + // The DNS name to be used by clients when establishing their VPN session. + DnsName *string `locationName:"dnsName" type:"string"` + + // The current state of the Client VPN endpoint. + Status *ClientVpnEndpointStatus `locationName:"status" type:"structure"` +} + +// String returns the string representation +func (s CreateClientVpnEndpointOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateClientVpnEndpointOutput) GoString() string { + return s.String() +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *CreateClientVpnEndpointOutput) SetClientVpnEndpointId(v string) *CreateClientVpnEndpointOutput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDnsName sets the DnsName field's value. +func (s *CreateClientVpnEndpointOutput) SetDnsName(v string) *CreateClientVpnEndpointOutput { + s.DnsName = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *CreateClientVpnEndpointOutput) SetStatus(v *ClientVpnEndpointStatus) *CreateClientVpnEndpointOutput { + s.Status = v + return s +} + +type CreateClientVpnRouteInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // The ID of the Client VPN endpoint to which to add the route. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // A brief description of the route. + Description *string `type:"string"` + + // The IPv4 address range, in CIDR notation, of the route destination. For example: + // + // * To add a route for Internet access, enter 0.0.0.0/0 + // + // * To add a route for a peered VPC, enter the peered VPC's IPv4 CIDR range + // + // * To add a route for an on-premises network, enter the AWS Site-to-Site + // VPN connection's IPv4 CIDR range + // + // Route address ranges cannot overlap with the CIDR range specified for client + // allocation. + // + // DestinationCidrBlock is a required field + DestinationCidrBlock *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the subnet through which you want to route traffic. The specified + // subnet must be an existing target network of the Client VPN endpoint. + // + // TargetVpcSubnetId is a required field + TargetVpcSubnetId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateClientVpnRouteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateClientVpnRouteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateClientVpnRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateClientVpnRouteInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.DestinationCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) + } + if s.TargetVpcSubnetId == nil { + invalidParams.Add(request.NewErrParamRequired("TargetVpcSubnetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateClientVpnRouteInput) SetClientToken(v string) *CreateClientVpnRouteInput { + s.ClientToken = &v + return s +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *CreateClientVpnRouteInput) SetClientVpnEndpointId(v string) *CreateClientVpnRouteInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateClientVpnRouteInput) SetDescription(v string) *CreateClientVpnRouteInput { + s.Description = &v + return s +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *CreateClientVpnRouteInput) SetDestinationCidrBlock(v string) *CreateClientVpnRouteInput { + s.DestinationCidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateClientVpnRouteInput) SetDryRun(v bool) *CreateClientVpnRouteInput { + s.DryRun = &v + return s +} + +// SetTargetVpcSubnetId sets the TargetVpcSubnetId field's value. +func (s *CreateClientVpnRouteInput) SetTargetVpcSubnetId(v string) *CreateClientVpnRouteInput { + s.TargetVpcSubnetId = &v + return s +} + +type CreateClientVpnRouteOutput struct { + _ struct{} `type:"structure"` + + // The current state of the route. + Status *ClientVpnRouteStatus `locationName:"status" type:"structure"` +} + +// String returns the string representation +func (s CreateClientVpnRouteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateClientVpnRouteOutput) GoString() string { + return s.String() +} + +// SetStatus sets the Status field's value. +func (s *CreateClientVpnRouteOutput) SetStatus(v *ClientVpnRouteStatus) *CreateClientVpnRouteOutput { + s.Status = v + return s +} + +// Contains the parameters for CreateCustomerGateway. +type CreateCustomerGatewayInput struct { + _ struct{} `type:"structure"` + + // For devices that support BGP, the customer gateway's BGP ASN. + // + // Default: 65000 + // + // BgpAsn is a required field + BgpAsn *int64 `type:"integer" required:"true"` + + // The Amazon Resource Name (ARN) for the customer gateway certificate. + CertificateArn *string `type:"string"` + + // A name for the customer gateway device. + // + // Length Constraints: Up to 255 characters. + DeviceName *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The Internet-routable IP address for the customer gateway's outside interface. + // The address must be static. + PublicIp *string `locationName:"IpAddress" type:"string"` + + // The type of VPN connection that this customer gateway supports (ipsec.1). + // + // Type is a required field + Type *string `type:"string" required:"true" enum:"GatewayType"` +} + +// String returns the string representation +func (s CreateCustomerGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateCustomerGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateCustomerGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateCustomerGatewayInput"} + if s.BgpAsn == nil { + invalidParams.Add(request.NewErrParamRequired("BgpAsn")) + } + if s.Type == nil { + invalidParams.Add(request.NewErrParamRequired("Type")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBgpAsn sets the BgpAsn field's value. +func (s *CreateCustomerGatewayInput) SetBgpAsn(v int64) *CreateCustomerGatewayInput { + s.BgpAsn = &v + return s +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *CreateCustomerGatewayInput) SetCertificateArn(v string) *CreateCustomerGatewayInput { + s.CertificateArn = &v + return s +} + +// SetDeviceName sets the DeviceName field's value. +func (s *CreateCustomerGatewayInput) SetDeviceName(v string) *CreateCustomerGatewayInput { + s.DeviceName = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateCustomerGatewayInput) SetDryRun(v bool) *CreateCustomerGatewayInput { + s.DryRun = &v + return s +} + +// SetPublicIp sets the PublicIp field's value. +func (s *CreateCustomerGatewayInput) SetPublicIp(v string) *CreateCustomerGatewayInput { + s.PublicIp = &v + return s +} + +// SetType sets the Type field's value. +func (s *CreateCustomerGatewayInput) SetType(v string) *CreateCustomerGatewayInput { + s.Type = &v + return s +} + +// Contains the output of CreateCustomerGateway. +type CreateCustomerGatewayOutput struct { + _ struct{} `type:"structure"` + + // Information about the customer gateway. + CustomerGateway *CustomerGateway `locationName:"customerGateway" type:"structure"` +} + +// String returns the string representation +func (s CreateCustomerGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateCustomerGatewayOutput) GoString() string { + return s.String() +} + +// SetCustomerGateway sets the CustomerGateway field's value. +func (s *CreateCustomerGatewayOutput) SetCustomerGateway(v *CustomerGateway) *CreateCustomerGatewayOutput { + s.CustomerGateway = v + return s +} + +type CreateDefaultSubnetInput struct { + _ struct{} `type:"structure"` + + // The Availability Zone in which to create the default subnet. + // + // AvailabilityZone is a required field + AvailabilityZone *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s CreateDefaultSubnetInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateDefaultSubnetInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateDefaultSubnetInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateDefaultSubnetInput"} + if s.AvailabilityZone == nil { + invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *CreateDefaultSubnetInput) SetAvailabilityZone(v string) *CreateDefaultSubnetInput { + s.AvailabilityZone = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateDefaultSubnetInput) SetDryRun(v bool) *CreateDefaultSubnetInput { + s.DryRun = &v + return s +} + +type CreateDefaultSubnetOutput struct { + _ struct{} `type:"structure"` + + // Information about the subnet. + Subnet *Subnet `locationName:"subnet" type:"structure"` +} + +// String returns the string representation +func (s CreateDefaultSubnetOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateDefaultSubnetOutput) GoString() string { + return s.String() +} + +// SetSubnet sets the Subnet field's value. +func (s *CreateDefaultSubnetOutput) SetSubnet(v *Subnet) *CreateDefaultSubnetOutput { + s.Subnet = v + return s +} + +type CreateDefaultVpcInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s CreateDefaultVpcInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateDefaultVpcInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateDefaultVpcInput) SetDryRun(v bool) *CreateDefaultVpcInput { + s.DryRun = &v + return s +} + +type CreateDefaultVpcOutput struct { + _ struct{} `type:"structure"` + + // Information about the VPC. + Vpc *Vpc `locationName:"vpc" type:"structure"` +} + +// String returns the string representation +func (s CreateDefaultVpcOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateDefaultVpcOutput) GoString() string { + return s.String() +} + +// SetVpc sets the Vpc field's value. +func (s *CreateDefaultVpcOutput) SetVpc(v *Vpc) *CreateDefaultVpcOutput { + s.Vpc = v + return s +} + +type CreateDhcpOptionsInput struct { + _ struct{} `type:"structure"` + + // A DHCP configuration option. + // + // DhcpConfigurations is a required field + DhcpConfigurations []*NewDhcpConfiguration `locationName:"dhcpConfiguration" locationNameList:"item" type:"list" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s CreateDhcpOptionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateDhcpOptionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateDhcpOptionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateDhcpOptionsInput"} + if s.DhcpConfigurations == nil { + invalidParams.Add(request.NewErrParamRequired("DhcpConfigurations")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDhcpConfigurations sets the DhcpConfigurations field's value. +func (s *CreateDhcpOptionsInput) SetDhcpConfigurations(v []*NewDhcpConfiguration) *CreateDhcpOptionsInput { + s.DhcpConfigurations = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateDhcpOptionsInput) SetDryRun(v bool) *CreateDhcpOptionsInput { + s.DryRun = &v + return s +} + +type CreateDhcpOptionsOutput struct { + _ struct{} `type:"structure"` + + // A set of DHCP options. + DhcpOptions *DhcpOptions `locationName:"dhcpOptions" type:"structure"` +} + +// String returns the string representation +func (s CreateDhcpOptionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateDhcpOptionsOutput) GoString() string { + return s.String() +} + +// SetDhcpOptions sets the DhcpOptions field's value. +func (s *CreateDhcpOptionsOutput) SetDhcpOptions(v *DhcpOptions) *CreateDhcpOptionsOutput { + s.DhcpOptions = v + return s +} + +type CreateEgressOnlyInternetGatewayInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the VPC for which to create the egress-only internet gateway. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateEgressOnlyInternetGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateEgressOnlyInternetGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateEgressOnlyInternetGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateEgressOnlyInternetGatewayInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateEgressOnlyInternetGatewayInput) SetClientToken(v string) *CreateEgressOnlyInternetGatewayInput { + s.ClientToken = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateEgressOnlyInternetGatewayInput) SetDryRun(v bool) *CreateEgressOnlyInternetGatewayInput { + s.DryRun = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateEgressOnlyInternetGatewayInput) SetVpcId(v string) *CreateEgressOnlyInternetGatewayInput { + s.VpcId = &v + return s +} + +type CreateEgressOnlyInternetGatewayOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. + ClientToken *string `locationName:"clientToken" type:"string"` + + // Information about the egress-only internet gateway. + EgressOnlyInternetGateway *EgressOnlyInternetGateway `locationName:"egressOnlyInternetGateway" type:"structure"` +} + +// String returns the string representation +func (s CreateEgressOnlyInternetGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateEgressOnlyInternetGatewayOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateEgressOnlyInternetGatewayOutput) SetClientToken(v string) *CreateEgressOnlyInternetGatewayOutput { + s.ClientToken = &v + return s +} + +// SetEgressOnlyInternetGateway sets the EgressOnlyInternetGateway field's value. +func (s *CreateEgressOnlyInternetGatewayOutput) SetEgressOnlyInternetGateway(v *EgressOnlyInternetGateway) *CreateEgressOnlyInternetGatewayOutput { + s.EgressOnlyInternetGateway = v + return s +} + +// Describes the instances that could not be launched by the fleet. +type CreateFleetError struct { + _ struct{} `type:"structure"` + + // The error code that indicates why the instance could not be launched. For + // more information about error codes, see Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html). + ErrorCode *string `locationName:"errorCode" type:"string"` + + // The error message that describes why the instance could not be launched. + // For more information about error messages, see ee Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html). + ErrorMessage *string `locationName:"errorMessage" type:"string"` + + // The launch templates and overrides that were used for launching the instances. + // Any parameters that you specify in the Overrides override the same parameters + // in the launch template. + LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse `locationName:"launchTemplateAndOverrides" type:"structure"` + + // Indicates if the instance that could not be launched was a Spot Instance + // or On-Demand Instance. + Lifecycle *string `locationName:"lifecycle" type:"string" enum:"InstanceLifecycle"` +} + +// String returns the string representation +func (s CreateFleetError) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateFleetError) GoString() string { + return s.String() +} + +// SetErrorCode sets the ErrorCode field's value. +func (s *CreateFleetError) SetErrorCode(v string) *CreateFleetError { + s.ErrorCode = &v + return s +} + +// SetErrorMessage sets the ErrorMessage field's value. +func (s *CreateFleetError) SetErrorMessage(v string) *CreateFleetError { + s.ErrorMessage = &v + return s +} + +// SetLaunchTemplateAndOverrides sets the LaunchTemplateAndOverrides field's value. +func (s *CreateFleetError) SetLaunchTemplateAndOverrides(v *LaunchTemplateAndOverridesResponse) *CreateFleetError { + s.LaunchTemplateAndOverrides = v + return s +} + +// SetLifecycle sets the Lifecycle field's value. +func (s *CreateFleetError) SetLifecycle(v string) *CreateFleetError { + s.Lifecycle = &v + return s +} + +type CreateFleetInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // Indicates whether running instances should be terminated if the total target + // capacity of the EC2 Fleet is decreased below the current size of the EC2 + // Fleet. + ExcessCapacityTerminationPolicy *string `type:"string" enum:"FleetExcessCapacityTerminationPolicy"` + + // The configuration for the EC2 Fleet. + // + // LaunchTemplateConfigs is a required field + LaunchTemplateConfigs []*FleetLaunchTemplateConfigRequest `locationNameList:"item" type:"list" required:"true"` + + // Describes the configuration of On-Demand Instances in an EC2 Fleet. + OnDemandOptions *OnDemandOptionsRequest `type:"structure"` + + // Indicates whether EC2 Fleet should replace unhealthy instances. + ReplaceUnhealthyInstances *bool `type:"boolean"` + + // Describes the configuration of Spot Instances in an EC2 Fleet. + SpotOptions *SpotOptionsRequest `type:"structure"` + + // The key-value pair for tagging the EC2 Fleet request on creation. The value + // for ResourceType must be fleet, otherwise the fleet request fails. To tag + // instances at launch, specify the tags in the launch template (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template). + // For information about tagging after launch, see Tagging Your Resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources). + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` + + // The number of units to request. + // + // TargetCapacitySpecification is a required field + TargetCapacitySpecification *TargetCapacitySpecificationRequest `type:"structure" required:"true"` + + // Indicates whether running instances should be terminated when the EC2 Fleet + // expires. + TerminateInstancesWithExpiration *bool `type:"boolean"` + + // The type of the request. By default, the EC2 Fleet places an asynchronous + // request for your desired capacity, and maintains it by replenishing interrupted + // Spot Instances (maintain). A value of instant places a synchronous one-time + // request, and returns errors for any instances that could not be launched. + // A value of request places an asynchronous one-time request without maintaining + // capacity or submitting requests in alternative capacity pools if capacity + // is unavailable. For more information, see EC2 Fleet Request Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-configuration-strategies.html#ec2-fleet-request-type) + // in the Amazon Elastic Compute Cloud User Guide. + Type *string `type:"string" enum:"FleetType"` + + // The start date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // The default is to start fulfilling the request immediately. + ValidFrom *time.Time `type:"timestamp"` + + // The end date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // At this point, no new EC2 Fleet requests are placed or able to fulfill the + // request. If no value is specified, the request remains until you cancel it. + ValidUntil *time.Time `type:"timestamp"` +} + +// String returns the string representation +func (s CreateFleetInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateFleetInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateFleetInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateFleetInput"} + if s.LaunchTemplateConfigs == nil { + invalidParams.Add(request.NewErrParamRequired("LaunchTemplateConfigs")) + } + if s.TargetCapacitySpecification == nil { + invalidParams.Add(request.NewErrParamRequired("TargetCapacitySpecification")) + } + if s.LaunchTemplateConfigs != nil { + for i, v := range s.LaunchTemplateConfigs { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "LaunchTemplateConfigs", i), err.(request.ErrInvalidParams)) + } + } + } + if s.TargetCapacitySpecification != nil { + if err := s.TargetCapacitySpecification.Validate(); err != nil { + invalidParams.AddNested("TargetCapacitySpecification", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateFleetInput) SetClientToken(v string) *CreateFleetInput { + s.ClientToken = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateFleetInput) SetDryRun(v bool) *CreateFleetInput { + s.DryRun = &v + return s +} + +// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. +func (s *CreateFleetInput) SetExcessCapacityTerminationPolicy(v string) *CreateFleetInput { + s.ExcessCapacityTerminationPolicy = &v + return s +} + +// SetLaunchTemplateConfigs sets the LaunchTemplateConfigs field's value. +func (s *CreateFleetInput) SetLaunchTemplateConfigs(v []*FleetLaunchTemplateConfigRequest) *CreateFleetInput { + s.LaunchTemplateConfigs = v + return s +} + +// SetOnDemandOptions sets the OnDemandOptions field's value. +func (s *CreateFleetInput) SetOnDemandOptions(v *OnDemandOptionsRequest) *CreateFleetInput { + s.OnDemandOptions = v + return s +} + +// SetReplaceUnhealthyInstances sets the ReplaceUnhealthyInstances field's value. +func (s *CreateFleetInput) SetReplaceUnhealthyInstances(v bool) *CreateFleetInput { + s.ReplaceUnhealthyInstances = &v + return s +} + +// SetSpotOptions sets the SpotOptions field's value. +func (s *CreateFleetInput) SetSpotOptions(v *SpotOptionsRequest) *CreateFleetInput { + s.SpotOptions = v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateFleetInput) SetTagSpecifications(v []*TagSpecification) *CreateFleetInput { + s.TagSpecifications = v + return s +} + +// SetTargetCapacitySpecification sets the TargetCapacitySpecification field's value. +func (s *CreateFleetInput) SetTargetCapacitySpecification(v *TargetCapacitySpecificationRequest) *CreateFleetInput { + s.TargetCapacitySpecification = v + return s +} + +// SetTerminateInstancesWithExpiration sets the TerminateInstancesWithExpiration field's value. +func (s *CreateFleetInput) SetTerminateInstancesWithExpiration(v bool) *CreateFleetInput { + s.TerminateInstancesWithExpiration = &v + return s +} + +// SetType sets the Type field's value. +func (s *CreateFleetInput) SetType(v string) *CreateFleetInput { + s.Type = &v + return s +} + +// SetValidFrom sets the ValidFrom field's value. +func (s *CreateFleetInput) SetValidFrom(v time.Time) *CreateFleetInput { + s.ValidFrom = &v + return s +} + +// SetValidUntil sets the ValidUntil field's value. +func (s *CreateFleetInput) SetValidUntil(v time.Time) *CreateFleetInput { + s.ValidUntil = &v + return s +} + +// Describes the instances that were launched by the fleet. +type CreateFleetInstance struct { + _ struct{} `type:"structure"` + + // The IDs of the instances. + InstanceIds []*string `locationName:"instanceIds" locationNameList:"item" type:"list"` + + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + + // The launch templates and overrides that were used for launching the instances. + // Any parameters that you specify in the Overrides override the same parameters + // in the launch template. + LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse `locationName:"launchTemplateAndOverrides" type:"structure"` + + // Indicates if the instance that was launched is a Spot Instance or On-Demand + // Instance. + Lifecycle *string `locationName:"lifecycle" type:"string" enum:"InstanceLifecycle"` + + // The value is Windows for Windows instances; otherwise blank. + Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` +} + +// String returns the string representation +func (s CreateFleetInstance) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateFleetInstance) GoString() string { + return s.String() +} + +// SetInstanceIds sets the InstanceIds field's value. +func (s *CreateFleetInstance) SetInstanceIds(v []*string) *CreateFleetInstance { + s.InstanceIds = v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *CreateFleetInstance) SetInstanceType(v string) *CreateFleetInstance { + s.InstanceType = &v + return s +} + +// SetLaunchTemplateAndOverrides sets the LaunchTemplateAndOverrides field's value. +func (s *CreateFleetInstance) SetLaunchTemplateAndOverrides(v *LaunchTemplateAndOverridesResponse) *CreateFleetInstance { + s.LaunchTemplateAndOverrides = v + return s +} + +// SetLifecycle sets the Lifecycle field's value. +func (s *CreateFleetInstance) SetLifecycle(v string) *CreateFleetInstance { + s.Lifecycle = &v + return s +} + +// SetPlatform sets the Platform field's value. +func (s *CreateFleetInstance) SetPlatform(v string) *CreateFleetInstance { + s.Platform = &v + return s +} + +type CreateFleetOutput struct { + _ struct{} `type:"structure"` + + // Information about the instances that could not be launched by the fleet. + // Valid only when Type is set to instant. + Errors []*CreateFleetError `locationName:"errorSet" locationNameList:"item" type:"list"` + + // The ID of the EC2 Fleet. + FleetId *string `locationName:"fleetId" type:"string"` + + // Information about the instances that were launched by the fleet. Valid only + // when Type is set to instant. + Instances []*CreateFleetInstance `locationName:"fleetInstanceSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateFleetOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateFleetOutput) GoString() string { + return s.String() +} + +// SetErrors sets the Errors field's value. +func (s *CreateFleetOutput) SetErrors(v []*CreateFleetError) *CreateFleetOutput { + s.Errors = v + return s +} + +// SetFleetId sets the FleetId field's value. +func (s *CreateFleetOutput) SetFleetId(v string) *CreateFleetOutput { + s.FleetId = &v + return s +} + +// SetInstances sets the Instances field's value. +func (s *CreateFleetOutput) SetInstances(v []*CreateFleetInstance) *CreateFleetOutput { + s.Instances = v + return s +} + +type CreateFlowLogsInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // The ARN for the IAM role that permits Amazon EC2 to publish flow logs to + // a CloudWatch Logs log group in your account. + // + // If you specify LogDestinationType as s3, do not specify DeliverLogsPermissionArn + // or LogGroupName. + DeliverLogsPermissionArn *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // Specifies the destination to which the flow log data is to be published. + // Flow log data can be published to a CloudWatch Logs log group or an Amazon + // S3 bucket. The value specified for this parameter depends on the value specified + // for LogDestinationType. + // + // If LogDestinationType is not specified or cloud-watch-logs, specify the Amazon + // Resource Name (ARN) of the CloudWatch Logs log group. + // + // If LogDestinationType is s3, specify the ARN of the Amazon S3 bucket. You + // can also specify a subfolder in the bucket. To specify a subfolder in the + // bucket, use the following ARN format: bucket_ARN/subfolder_name/. For example, + // to specify a subfolder named my-logs in a bucket named my-bucket, use the + // following ARN: arn:aws:s3:::my-bucket/my-logs/. You cannot use AWSLogs as + // a subfolder name. This is a reserved term. + LogDestination *string `type:"string"` + + // Specifies the type of destination to which the flow log data is to be published. + // Flow log data can be published to CloudWatch Logs or Amazon S3. To publish + // flow log data to CloudWatch Logs, specify cloud-watch-logs. To publish flow + // log data to Amazon S3, specify s3. + // + // If you specify LogDestinationType as s3, do not specify DeliverLogsPermissionArn + // or LogGroupName. + // + // Default: cloud-watch-logs + LogDestinationType *string `type:"string" enum:"LogDestinationType"` + + // The fields to include in the flow log record, in the order in which they + // should appear. For a list of available fields, see Flow Log Records (https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records). + // If you omit this parameter, the flow log is created using the default format. + // If you specify this parameter, you must specify at least one field. + // + // Specify the fields using the ${field-id} format, separated by spaces. For + // the AWS CLI, use single quotation marks (' ') to surround the parameter value. + // + // Only applicable to flow logs that are published to an Amazon S3 bucket. + LogFormat *string `type:"string"` + + // The name of a new or existing CloudWatch Logs log group where Amazon EC2 + // publishes your flow logs. + // + // If you specify LogDestinationType as s3, do not specify DeliverLogsPermissionArn + // or LogGroupName. + LogGroupName *string `type:"string"` + + // The ID of the subnet, network interface, or VPC for which you want to create + // a flow log. + // + // Constraints: Maximum of 1000 resources + // + // ResourceIds is a required field + ResourceIds []*string `locationName:"ResourceId" locationNameList:"item" type:"list" required:"true"` + + // The type of resource for which to create the flow log. For example, if you + // specified a VPC ID for the ResourceId property, specify VPC for this property. + // + // ResourceType is a required field + ResourceType *string `type:"string" required:"true" enum:"FlowLogsResourceType"` + + // The type of traffic to log. You can log traffic that the resource accepts + // or rejects, or all traffic. + // + // TrafficType is a required field + TrafficType *string `type:"string" required:"true" enum:"TrafficType"` +} + +// String returns the string representation +func (s CreateFlowLogsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateFlowLogsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateFlowLogsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateFlowLogsInput"} + if s.ResourceIds == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceIds")) + } + if s.ResourceType == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceType")) + } + if s.TrafficType == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficType")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateFlowLogsInput) SetClientToken(v string) *CreateFlowLogsInput { + s.ClientToken = &v + return s +} + +// SetDeliverLogsPermissionArn sets the DeliverLogsPermissionArn field's value. +func (s *CreateFlowLogsInput) SetDeliverLogsPermissionArn(v string) *CreateFlowLogsInput { + s.DeliverLogsPermissionArn = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateFlowLogsInput) SetDryRun(v bool) *CreateFlowLogsInput { + s.DryRun = &v + return s +} + +// SetLogDestination sets the LogDestination field's value. +func (s *CreateFlowLogsInput) SetLogDestination(v string) *CreateFlowLogsInput { + s.LogDestination = &v + return s +} + +// SetLogDestinationType sets the LogDestinationType field's value. +func (s *CreateFlowLogsInput) SetLogDestinationType(v string) *CreateFlowLogsInput { + s.LogDestinationType = &v + return s +} + +// SetLogFormat sets the LogFormat field's value. +func (s *CreateFlowLogsInput) SetLogFormat(v string) *CreateFlowLogsInput { + s.LogFormat = &v + return s +} + +// SetLogGroupName sets the LogGroupName field's value. +func (s *CreateFlowLogsInput) SetLogGroupName(v string) *CreateFlowLogsInput { + s.LogGroupName = &v + return s +} + +// SetResourceIds sets the ResourceIds field's value. +func (s *CreateFlowLogsInput) SetResourceIds(v []*string) *CreateFlowLogsInput { + s.ResourceIds = v + return s +} + +// SetResourceType sets the ResourceType field's value. +func (s *CreateFlowLogsInput) SetResourceType(v string) *CreateFlowLogsInput { + s.ResourceType = &v + return s +} + +// SetTrafficType sets the TrafficType field's value. +func (s *CreateFlowLogsInput) SetTrafficType(v string) *CreateFlowLogsInput { + s.TrafficType = &v + return s +} + +type CreateFlowLogsOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. + ClientToken *string `locationName:"clientToken" type:"string"` + + // The IDs of the flow logs. + FlowLogIds []*string `locationName:"flowLogIdSet" locationNameList:"item" type:"list"` + + // Information about the flow logs that could not be created successfully. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateFlowLogsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateFlowLogsOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateFlowLogsOutput) SetClientToken(v string) *CreateFlowLogsOutput { + s.ClientToken = &v + return s +} + +// SetFlowLogIds sets the FlowLogIds field's value. +func (s *CreateFlowLogsOutput) SetFlowLogIds(v []*string) *CreateFlowLogsOutput { + s.FlowLogIds = v + return s +} + +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *CreateFlowLogsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *CreateFlowLogsOutput { + s.Unsuccessful = v + return s +} + +type CreateFpgaImageInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // A description for the AFI. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The location of the encrypted design checkpoint in Amazon S3. The input must + // be a tarball. + // + // InputStorageLocation is a required field + InputStorageLocation *StorageLocation `type:"structure" required:"true"` + + // The location in Amazon S3 for the output logs. + LogsStorageLocation *StorageLocation `type:"structure"` + + // A name for the AFI. + Name *string `type:"string"` + + // The tags to apply to the FPGA image during creation. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateFpgaImageInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateFpgaImageInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateFpgaImageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateFpgaImageInput"} + if s.InputStorageLocation == nil { + invalidParams.Add(request.NewErrParamRequired("InputStorageLocation")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateFpgaImageInput) SetClientToken(v string) *CreateFpgaImageInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateFpgaImageInput) SetDescription(v string) *CreateFpgaImageInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateFpgaImageInput) SetDryRun(v bool) *CreateFpgaImageInput { + s.DryRun = &v + return s +} + +// SetInputStorageLocation sets the InputStorageLocation field's value. +func (s *CreateFpgaImageInput) SetInputStorageLocation(v *StorageLocation) *CreateFpgaImageInput { + s.InputStorageLocation = v + return s +} + +// SetLogsStorageLocation sets the LogsStorageLocation field's value. +func (s *CreateFpgaImageInput) SetLogsStorageLocation(v *StorageLocation) *CreateFpgaImageInput { + s.LogsStorageLocation = v + return s +} + +// SetName sets the Name field's value. +func (s *CreateFpgaImageInput) SetName(v string) *CreateFpgaImageInput { + s.Name = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateFpgaImageInput) SetTagSpecifications(v []*TagSpecification) *CreateFpgaImageInput { + s.TagSpecifications = v + return s +} + +type CreateFpgaImageOutput struct { + _ struct{} `type:"structure"` + + // The global FPGA image identifier (AGFI ID). + FpgaImageGlobalId *string `locationName:"fpgaImageGlobalId" type:"string"` + + // The FPGA image identifier (AFI ID). + FpgaImageId *string `locationName:"fpgaImageId" type:"string"` +} + +// String returns the string representation +func (s CreateFpgaImageOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateFpgaImageOutput) GoString() string { + return s.String() +} + +// SetFpgaImageGlobalId sets the FpgaImageGlobalId field's value. +func (s *CreateFpgaImageOutput) SetFpgaImageGlobalId(v string) *CreateFpgaImageOutput { + s.FpgaImageGlobalId = &v + return s +} + +// SetFpgaImageId sets the FpgaImageId field's value. +func (s *CreateFpgaImageOutput) SetFpgaImageId(v string) *CreateFpgaImageOutput { + s.FpgaImageId = &v + return s +} + +type CreateImageInput struct { + _ struct{} `type:"structure"` + + // The block device mappings. This parameter cannot be used to modify the encryption + // status of existing volumes or snapshots. To create an AMI with encrypted + // snapshots, use the CopyImage action. + BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` + + // A description for the new image. + Description *string `locationName:"description" type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + + // A name for the new image. + // + // Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets + // ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), + // at-signs (@), or underscores(_) + // + // Name is a required field + Name *string `locationName:"name" type:"string" required:"true"` + + // By default, Amazon EC2 attempts to shut down and reboot the instance before + // creating the image. If the 'No Reboot' option is set, Amazon EC2 doesn't + // shut down the instance before creating the image. When this option is used, + // file system integrity on the created image can't be guaranteed. + NoReboot *bool `locationName:"noReboot" type:"boolean"` +} + +// String returns the string representation +func (s CreateImageInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateImageInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateImageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateImageInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + if s.Name == nil { + invalidParams.Add(request.NewErrParamRequired("Name")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *CreateImageInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *CreateImageInput { + s.BlockDeviceMappings = v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateImageInput) SetDescription(v string) *CreateImageInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateImageInput) SetDryRun(v bool) *CreateImageInput { + s.DryRun = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *CreateImageInput) SetInstanceId(v string) *CreateImageInput { + s.InstanceId = &v + return s +} + +// SetName sets the Name field's value. +func (s *CreateImageInput) SetName(v string) *CreateImageInput { + s.Name = &v + return s +} + +// SetNoReboot sets the NoReboot field's value. +func (s *CreateImageInput) SetNoReboot(v bool) *CreateImageInput { + s.NoReboot = &v + return s +} + +type CreateImageOutput struct { + _ struct{} `type:"structure"` + + // The ID of the new AMI. + ImageId *string `locationName:"imageId" type:"string"` +} + +// String returns the string representation +func (s CreateImageOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateImageOutput) GoString() string { + return s.String() +} + +// SetImageId sets the ImageId field's value. +func (s *CreateImageOutput) SetImageId(v string) *CreateImageOutput { + s.ImageId = &v + return s +} + +type CreateInstanceExportTaskInput struct { + _ struct{} `type:"structure"` + + // A description for the conversion task or the resource being exported. The + // maximum length is 255 bytes. + Description *string `locationName:"description" type:"string"` + + // The format and location for an instance export task. + ExportToS3Task *ExportToS3TaskSpecification `locationName:"exportToS3" type:"structure"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + + // The target virtualization environment. + TargetEnvironment *string `locationName:"targetEnvironment" type:"string" enum:"ExportEnvironment"` +} + +// String returns the string representation +func (s CreateInstanceExportTaskInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateInstanceExportTaskInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateInstanceExportTaskInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateInstanceExportTaskInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDescription sets the Description field's value. +func (s *CreateInstanceExportTaskInput) SetDescription(v string) *CreateInstanceExportTaskInput { + s.Description = &v + return s +} + +// SetExportToS3Task sets the ExportToS3Task field's value. +func (s *CreateInstanceExportTaskInput) SetExportToS3Task(v *ExportToS3TaskSpecification) *CreateInstanceExportTaskInput { + s.ExportToS3Task = v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *CreateInstanceExportTaskInput) SetInstanceId(v string) *CreateInstanceExportTaskInput { + s.InstanceId = &v + return s +} + +// SetTargetEnvironment sets the TargetEnvironment field's value. +func (s *CreateInstanceExportTaskInput) SetTargetEnvironment(v string) *CreateInstanceExportTaskInput { + s.TargetEnvironment = &v + return s +} + +type CreateInstanceExportTaskOutput struct { + _ struct{} `type:"structure"` + + // Information about the instance export task. + ExportTask *ExportTask `locationName:"exportTask" type:"structure"` +} + +// String returns the string representation +func (s CreateInstanceExportTaskOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateInstanceExportTaskOutput) GoString() string { + return s.String() +} + +// SetExportTask sets the ExportTask field's value. +func (s *CreateInstanceExportTaskOutput) SetExportTask(v *ExportTask) *CreateInstanceExportTaskOutput { + s.ExportTask = v + return s +} + +type CreateInternetGatewayInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s CreateInternetGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateInternetGatewayInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateInternetGatewayInput) SetDryRun(v bool) *CreateInternetGatewayInput { + s.DryRun = &v + return s +} + +type CreateInternetGatewayOutput struct { + _ struct{} `type:"structure"` + + // Information about the internet gateway. + InternetGateway *InternetGateway `locationName:"internetGateway" type:"structure"` +} + +// String returns the string representation +func (s CreateInternetGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateInternetGatewayOutput) GoString() string { + return s.String() +} + +// SetInternetGateway sets the InternetGateway field's value. +func (s *CreateInternetGatewayOutput) SetInternetGateway(v *InternetGateway) *CreateInternetGatewayOutput { + s.InternetGateway = v + return s +} + +type CreateKeyPairInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // A unique name for the key pair. + // + // Constraints: Up to 255 ASCII characters + // + // KeyName is a required field + KeyName *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateKeyPairInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateKeyPairInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateKeyPairInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateKeyPairInput"} + if s.KeyName == nil { + invalidParams.Add(request.NewErrParamRequired("KeyName")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateKeyPairInput) SetDryRun(v bool) *CreateKeyPairInput { + s.DryRun = &v + return s +} + +// SetKeyName sets the KeyName field's value. +func (s *CreateKeyPairInput) SetKeyName(v string) *CreateKeyPairInput { + s.KeyName = &v + return s +} + +// Describes a key pair. +type CreateKeyPairOutput struct { + _ struct{} `type:"structure"` + + // The SHA-1 digest of the DER encoded private key. + KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` + + // An unencrypted PEM encoded RSA private key. + KeyMaterial *string `locationName:"keyMaterial" type:"string" sensitive:"true"` + + // The name of the key pair. + KeyName *string `locationName:"keyName" type:"string"` +} + +// String returns the string representation +func (s CreateKeyPairOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateKeyPairOutput) GoString() string { + return s.String() +} + +// SetKeyFingerprint sets the KeyFingerprint field's value. +func (s *CreateKeyPairOutput) SetKeyFingerprint(v string) *CreateKeyPairOutput { + s.KeyFingerprint = &v + return s +} + +// SetKeyMaterial sets the KeyMaterial field's value. +func (s *CreateKeyPairOutput) SetKeyMaterial(v string) *CreateKeyPairOutput { + s.KeyMaterial = &v + return s +} + +// SetKeyName sets the KeyName field's value. +func (s *CreateKeyPairOutput) SetKeyName(v string) *CreateKeyPairOutput { + s.KeyName = &v + return s +} + +type CreateLaunchTemplateInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + // + // Constraint: Maximum 128 ASCII characters. + ClientToken *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The information for the launch template. + // + // LaunchTemplateData is a required field + LaunchTemplateData *RequestLaunchTemplateData `type:"structure" required:"true"` + + // A name for the launch template. + // + // LaunchTemplateName is a required field + LaunchTemplateName *string `min:"3" type:"string" required:"true"` + + // The tags to apply to the launch template during creation. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` + + // A description for the first version of the launch template. + VersionDescription *string `type:"string"` +} + +// String returns the string representation +func (s CreateLaunchTemplateInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateLaunchTemplateInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateLaunchTemplateInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateLaunchTemplateInput"} + if s.LaunchTemplateData == nil { + invalidParams.Add(request.NewErrParamRequired("LaunchTemplateData")) + } + if s.LaunchTemplateName == nil { + invalidParams.Add(request.NewErrParamRequired("LaunchTemplateName")) + } + if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { + invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) + } + if s.LaunchTemplateData != nil { + if err := s.LaunchTemplateData.Validate(); err != nil { + invalidParams.AddNested("LaunchTemplateData", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateLaunchTemplateInput) SetClientToken(v string) *CreateLaunchTemplateInput { + s.ClientToken = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateLaunchTemplateInput) SetDryRun(v bool) *CreateLaunchTemplateInput { + s.DryRun = &v + return s +} + +// SetLaunchTemplateData sets the LaunchTemplateData field's value. +func (s *CreateLaunchTemplateInput) SetLaunchTemplateData(v *RequestLaunchTemplateData) *CreateLaunchTemplateInput { + s.LaunchTemplateData = v + return s +} + +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *CreateLaunchTemplateInput) SetLaunchTemplateName(v string) *CreateLaunchTemplateInput { + s.LaunchTemplateName = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateLaunchTemplateInput) SetTagSpecifications(v []*TagSpecification) *CreateLaunchTemplateInput { + s.TagSpecifications = v + return s +} + +// SetVersionDescription sets the VersionDescription field's value. +func (s *CreateLaunchTemplateInput) SetVersionDescription(v string) *CreateLaunchTemplateInput { + s.VersionDescription = &v + return s +} + +type CreateLaunchTemplateOutput struct { + _ struct{} `type:"structure"` + + // Information about the launch template. + LaunchTemplate *LaunchTemplate `locationName:"launchTemplate" type:"structure"` +} + +// String returns the string representation +func (s CreateLaunchTemplateOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateLaunchTemplateOutput) GoString() string { + return s.String() +} + +// SetLaunchTemplate sets the LaunchTemplate field's value. +func (s *CreateLaunchTemplateOutput) SetLaunchTemplate(v *LaunchTemplate) *CreateLaunchTemplateOutput { + s.LaunchTemplate = v + return s +} + +type CreateLaunchTemplateVersionInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + // + // Constraint: Maximum 128 ASCII characters. + ClientToken *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The information for the launch template. + // + // LaunchTemplateData is a required field + LaunchTemplateData *RequestLaunchTemplateData `type:"structure" required:"true"` + + // The ID of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateId *string `type:"string"` + + // The name of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateName *string `min:"3" type:"string"` + + // The version number of the launch template version on which to base the new + // version. The new version inherits the same launch parameters as the source + // version, except for parameters that you specify in LaunchTemplateData. Snapshots + // applied to the block device mapping are ignored when creating a new version + // unless they are explicitly included. + SourceVersion *string `type:"string"` + + // A description for the version of the launch template. + VersionDescription *string `type:"string"` +} + +// String returns the string representation +func (s CreateLaunchTemplateVersionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateLaunchTemplateVersionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateLaunchTemplateVersionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateLaunchTemplateVersionInput"} + if s.LaunchTemplateData == nil { + invalidParams.Add(request.NewErrParamRequired("LaunchTemplateData")) + } + if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { + invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) + } + if s.LaunchTemplateData != nil { + if err := s.LaunchTemplateData.Validate(); err != nil { + invalidParams.AddNested("LaunchTemplateData", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateLaunchTemplateVersionInput) SetClientToken(v string) *CreateLaunchTemplateVersionInput { + s.ClientToken = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateLaunchTemplateVersionInput) SetDryRun(v bool) *CreateLaunchTemplateVersionInput { + s.DryRun = &v + return s +} + +// SetLaunchTemplateData sets the LaunchTemplateData field's value. +func (s *CreateLaunchTemplateVersionInput) SetLaunchTemplateData(v *RequestLaunchTemplateData) *CreateLaunchTemplateVersionInput { + s.LaunchTemplateData = v + return s +} + +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *CreateLaunchTemplateVersionInput) SetLaunchTemplateId(v string) *CreateLaunchTemplateVersionInput { + s.LaunchTemplateId = &v + return s +} + +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *CreateLaunchTemplateVersionInput) SetLaunchTemplateName(v string) *CreateLaunchTemplateVersionInput { + s.LaunchTemplateName = &v + return s +} + +// SetSourceVersion sets the SourceVersion field's value. +func (s *CreateLaunchTemplateVersionInput) SetSourceVersion(v string) *CreateLaunchTemplateVersionInput { + s.SourceVersion = &v + return s +} + +// SetVersionDescription sets the VersionDescription field's value. +func (s *CreateLaunchTemplateVersionInput) SetVersionDescription(v string) *CreateLaunchTemplateVersionInput { + s.VersionDescription = &v + return s +} + +type CreateLaunchTemplateVersionOutput struct { + _ struct{} `type:"structure"` + + // Information about the launch template version. + LaunchTemplateVersion *LaunchTemplateVersion `locationName:"launchTemplateVersion" type:"structure"` +} + +// String returns the string representation +func (s CreateLaunchTemplateVersionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateLaunchTemplateVersionOutput) GoString() string { + return s.String() +} + +// SetLaunchTemplateVersion sets the LaunchTemplateVersion field's value. +func (s *CreateLaunchTemplateVersionOutput) SetLaunchTemplateVersion(v *LaunchTemplateVersion) *CreateLaunchTemplateVersionOutput { + s.LaunchTemplateVersion = v + return s +} + +type CreateNatGatewayInput struct { + _ struct{} `type:"structure"` + + // The allocation ID of an Elastic IP address to associate with the NAT gateway. + // If the Elastic IP address is associated with another resource, you must first + // disassociate it. + // + // AllocationId is a required field + AllocationId *string `type:"string" required:"true"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + // + // Constraint: Maximum 64 ASCII characters. + ClientToken *string `type:"string"` + + // The subnet in which to create the NAT gateway. + // + // SubnetId is a required field + SubnetId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateNatGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNatGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateNatGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateNatGatewayInput"} + if s.AllocationId == nil { + invalidParams.Add(request.NewErrParamRequired("AllocationId")) + } + if s.SubnetId == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAllocationId sets the AllocationId field's value. +func (s *CreateNatGatewayInput) SetAllocationId(v string) *CreateNatGatewayInput { + s.AllocationId = &v + return s +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateNatGatewayInput) SetClientToken(v string) *CreateNatGatewayInput { + s.ClientToken = &v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *CreateNatGatewayInput) SetSubnetId(v string) *CreateNatGatewayInput { + s.SubnetId = &v + return s +} + +type CreateNatGatewayOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier to ensure the idempotency of the request. + // Only returned if a client token was provided in the request. + ClientToken *string `locationName:"clientToken" type:"string"` + + // Information about the NAT gateway. + NatGateway *NatGateway `locationName:"natGateway" type:"structure"` +} + +// String returns the string representation +func (s CreateNatGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNatGatewayOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateNatGatewayOutput) SetClientToken(v string) *CreateNatGatewayOutput { + s.ClientToken = &v + return s +} + +// SetNatGateway sets the NatGateway field's value. +func (s *CreateNatGatewayOutput) SetNatGateway(v *NatGateway) *CreateNatGatewayOutput { + s.NatGateway = v + return s +} + +type CreateNetworkAclEntryInput struct { + _ struct{} `type:"structure"` + + // The IPv4 network range to allow or deny, in CIDR notation (for example 172.16.0.0/24). + CidrBlock *string `locationName:"cidrBlock" type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // Indicates whether this is an egress rule (rule is applied to traffic leaving + // the subnet). + // + // Egress is a required field + Egress *bool `locationName:"egress" type:"boolean" required:"true"` + + // ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol + // 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block. + IcmpTypeCode *IcmpTypeCode `locationName:"Icmp" type:"structure"` + + // The IPv6 network range to allow or deny, in CIDR notation (for example 2001:db8:1234:1a00::/64). + Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` + + // The ID of the network ACL. + // + // NetworkAclId is a required field + NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` + + // TCP or UDP protocols: The range of ports the rule applies to. Required if + // specifying protocol 6 (TCP) or 17 (UDP). + PortRange *PortRange `locationName:"portRange" type:"structure"` + + // The protocol number. A value of "-1" means all protocols. If you specify + // "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), + // traffic on all ports is allowed, regardless of any ports or ICMP types or + // codes that you specify. If you specify protocol "58" (ICMPv6) and specify + // an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless + // of any that you specify. If you specify protocol "58" (ICMPv6) and specify + // an IPv6 CIDR block, you must specify an ICMP type and code. + // + // Protocol is a required field + Protocol *string `locationName:"protocol" type:"string" required:"true"` + + // Indicates whether to allow or deny the traffic that matches the rule. + // + // RuleAction is a required field + RuleAction *string `locationName:"ruleAction" type:"string" required:"true" enum:"RuleAction"` + + // The rule number for the entry (for example, 100). ACL entries are processed + // in ascending order by rule number. + // + // Constraints: Positive integer from 1 to 32766. The range 32767 to 65535 is + // reserved for internal use. + // + // RuleNumber is a required field + RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` +} + +// String returns the string representation +func (s CreateNetworkAclEntryInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNetworkAclEntryInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateNetworkAclEntryInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateNetworkAclEntryInput"} + if s.Egress == nil { + invalidParams.Add(request.NewErrParamRequired("Egress")) + } + if s.NetworkAclId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) + } + if s.Protocol == nil { + invalidParams.Add(request.NewErrParamRequired("Protocol")) + } + if s.RuleAction == nil { + invalidParams.Add(request.NewErrParamRequired("RuleAction")) + } + if s.RuleNumber == nil { + invalidParams.Add(request.NewErrParamRequired("RuleNumber")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCidrBlock sets the CidrBlock field's value. +func (s *CreateNetworkAclEntryInput) SetCidrBlock(v string) *CreateNetworkAclEntryInput { + s.CidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateNetworkAclEntryInput) SetDryRun(v bool) *CreateNetworkAclEntryInput { + s.DryRun = &v + return s +} + +// SetEgress sets the Egress field's value. +func (s *CreateNetworkAclEntryInput) SetEgress(v bool) *CreateNetworkAclEntryInput { + s.Egress = &v + return s +} + +// SetIcmpTypeCode sets the IcmpTypeCode field's value. +func (s *CreateNetworkAclEntryInput) SetIcmpTypeCode(v *IcmpTypeCode) *CreateNetworkAclEntryInput { + s.IcmpTypeCode = v + return s +} + +// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. +func (s *CreateNetworkAclEntryInput) SetIpv6CidrBlock(v string) *CreateNetworkAclEntryInput { + s.Ipv6CidrBlock = &v + return s +} + +// SetNetworkAclId sets the NetworkAclId field's value. +func (s *CreateNetworkAclEntryInput) SetNetworkAclId(v string) *CreateNetworkAclEntryInput { + s.NetworkAclId = &v + return s +} + +// SetPortRange sets the PortRange field's value. +func (s *CreateNetworkAclEntryInput) SetPortRange(v *PortRange) *CreateNetworkAclEntryInput { + s.PortRange = v + return s +} + +// SetProtocol sets the Protocol field's value. +func (s *CreateNetworkAclEntryInput) SetProtocol(v string) *CreateNetworkAclEntryInput { + s.Protocol = &v + return s +} + +// SetRuleAction sets the RuleAction field's value. +func (s *CreateNetworkAclEntryInput) SetRuleAction(v string) *CreateNetworkAclEntryInput { + s.RuleAction = &v + return s +} + +// SetRuleNumber sets the RuleNumber field's value. +func (s *CreateNetworkAclEntryInput) SetRuleNumber(v int64) *CreateNetworkAclEntryInput { + s.RuleNumber = &v + return s +} + +type CreateNetworkAclEntryOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s CreateNetworkAclEntryOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNetworkAclEntryOutput) GoString() string { + return s.String() +} + +type CreateNetworkAclInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateNetworkAclInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNetworkAclInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateNetworkAclInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateNetworkAclInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateNetworkAclInput) SetDryRun(v bool) *CreateNetworkAclInput { + s.DryRun = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateNetworkAclInput) SetVpcId(v string) *CreateNetworkAclInput { + s.VpcId = &v + return s +} + +type CreateNetworkAclOutput struct { + _ struct{} `type:"structure"` + + // Information about the network ACL. + NetworkAcl *NetworkAcl `locationName:"networkAcl" type:"structure"` +} + +// String returns the string representation +func (s CreateNetworkAclOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNetworkAclOutput) GoString() string { + return s.String() +} + +// SetNetworkAcl sets the NetworkAcl field's value. +func (s *CreateNetworkAclOutput) SetNetworkAcl(v *NetworkAcl) *CreateNetworkAclOutput { + s.NetworkAcl = v + return s +} + +// Contains the parameters for CreateNetworkInterface. +type CreateNetworkInterfaceInput struct { + _ struct{} `type:"structure"` + + // A description for the network interface. + Description *string `locationName:"description" type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The IDs of one or more security groups. + Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + + // Indicates the type of network interface. To create an Elastic Fabric Adapter + // (EFA), specify efa. For more information, see Elastic Fabric Adapter (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) + // in the Amazon Elastic Compute Cloud User Guide. + InterfaceType *string `type:"string" enum:"NetworkInterfaceCreationType"` + + // The number of IPv6 addresses to assign to a network interface. Amazon EC2 + // automatically selects the IPv6 addresses from the subnet range. You can't + // use this option if specifying specific IPv6 addresses. If your subnet has + // the AssignIpv6AddressOnCreation attribute set to true, you can specify 0 + // to override this setting. + Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` + + // One or more specific IPv6 addresses from the IPv6 CIDR block range of your + // subnet. You can't use this option if you're specifying a number of IPv6 addresses. + Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6Addresses" locationNameList:"item" type:"list"` + + // The primary private IPv4 address of the network interface. If you don't specify + // an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR + // range. If you specify an IP address, you cannot indicate any IP addresses + // specified in privateIpAddresses as primary (only one IP address can be designated + // as primary). + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + + // One or more private IPv4 addresses. + PrivateIpAddresses []*PrivateIpAddressSpecification `locationName:"privateIpAddresses" locationNameList:"item" type:"list"` + + // The number of secondary private IPv4 addresses to assign to a network interface. + // When you specify a number of secondary IPv4 addresses, Amazon EC2 selects + // these IP addresses within the subnet's IPv4 CIDR range. You can't specify + // this option and specify more than one private IP address using privateIpAddresses. + // + // The number of IP addresses you can assign to a network interface varies by + // instance type. For more information, see IP Addresses Per ENI Per Instance + // Type (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) + // in the Amazon Virtual Private Cloud User Guide. + SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` + + // The ID of the subnet to associate with the network interface. + // + // SubnetId is a required field + SubnetId *string `locationName:"subnetId" type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateNetworkInterfaceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNetworkInterfaceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateNetworkInterfaceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateNetworkInterfaceInput"} + if s.SubnetId == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDescription sets the Description field's value. +func (s *CreateNetworkInterfaceInput) SetDescription(v string) *CreateNetworkInterfaceInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateNetworkInterfaceInput) SetDryRun(v bool) *CreateNetworkInterfaceInput { + s.DryRun = &v + return s +} + +// SetGroups sets the Groups field's value. +func (s *CreateNetworkInterfaceInput) SetGroups(v []*string) *CreateNetworkInterfaceInput { + s.Groups = v + return s +} + +// SetInterfaceType sets the InterfaceType field's value. +func (s *CreateNetworkInterfaceInput) SetInterfaceType(v string) *CreateNetworkInterfaceInput { + s.InterfaceType = &v + return s +} + +// SetIpv6AddressCount sets the Ipv6AddressCount field's value. +func (s *CreateNetworkInterfaceInput) SetIpv6AddressCount(v int64) *CreateNetworkInterfaceInput { + s.Ipv6AddressCount = &v + return s +} + +// SetIpv6Addresses sets the Ipv6Addresses field's value. +func (s *CreateNetworkInterfaceInput) SetIpv6Addresses(v []*InstanceIpv6Address) *CreateNetworkInterfaceInput { + s.Ipv6Addresses = v + return s +} + +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *CreateNetworkInterfaceInput) SetPrivateIpAddress(v string) *CreateNetworkInterfaceInput { + s.PrivateIpAddress = &v + return s +} + +// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. +func (s *CreateNetworkInterfaceInput) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *CreateNetworkInterfaceInput { + s.PrivateIpAddresses = v + return s +} + +// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. +func (s *CreateNetworkInterfaceInput) SetSecondaryPrivateIpAddressCount(v int64) *CreateNetworkInterfaceInput { + s.SecondaryPrivateIpAddressCount = &v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *CreateNetworkInterfaceInput) SetSubnetId(v string) *CreateNetworkInterfaceInput { + s.SubnetId = &v + return s +} + +// Contains the output of CreateNetworkInterface. +type CreateNetworkInterfaceOutput struct { + _ struct{} `type:"structure"` + + // Information about the network interface. + NetworkInterface *NetworkInterface `locationName:"networkInterface" type:"structure"` +} + +// String returns the string representation +func (s CreateNetworkInterfaceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNetworkInterfaceOutput) GoString() string { + return s.String() +} + +// SetNetworkInterface sets the NetworkInterface field's value. +func (s *CreateNetworkInterfaceOutput) SetNetworkInterface(v *NetworkInterface) *CreateNetworkInterfaceOutput { + s.NetworkInterface = v + return s +} + +// Contains the parameters for CreateNetworkInterfacePermission. +type CreateNetworkInterfacePermissionInput struct { + _ struct{} `type:"structure"` + + // The AWS account ID. + AwsAccountId *string `type:"string"` + + // The AWS service. Currently not supported. + AwsService *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the network interface. + // + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `type:"string" required:"true"` + + // The type of permission to grant. + // + // Permission is a required field + Permission *string `type:"string" required:"true" enum:"InterfacePermissionType"` +} + +// String returns the string representation +func (s CreateNetworkInterfacePermissionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNetworkInterfacePermissionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateNetworkInterfacePermissionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateNetworkInterfacePermissionInput"} + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) + } + if s.Permission == nil { + invalidParams.Add(request.NewErrParamRequired("Permission")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAwsAccountId sets the AwsAccountId field's value. +func (s *CreateNetworkInterfacePermissionInput) SetAwsAccountId(v string) *CreateNetworkInterfacePermissionInput { + s.AwsAccountId = &v + return s +} + +// SetAwsService sets the AwsService field's value. +func (s *CreateNetworkInterfacePermissionInput) SetAwsService(v string) *CreateNetworkInterfacePermissionInput { + s.AwsService = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateNetworkInterfacePermissionInput) SetDryRun(v bool) *CreateNetworkInterfacePermissionInput { + s.DryRun = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *CreateNetworkInterfacePermissionInput) SetNetworkInterfaceId(v string) *CreateNetworkInterfacePermissionInput { + s.NetworkInterfaceId = &v + return s +} + +// SetPermission sets the Permission field's value. +func (s *CreateNetworkInterfacePermissionInput) SetPermission(v string) *CreateNetworkInterfacePermissionInput { + s.Permission = &v + return s +} + +// Contains the output of CreateNetworkInterfacePermission. +type CreateNetworkInterfacePermissionOutput struct { + _ struct{} `type:"structure"` + + // Information about the permission for the network interface. + InterfacePermission *NetworkInterfacePermission `locationName:"interfacePermission" type:"structure"` +} + +// String returns the string representation +func (s CreateNetworkInterfacePermissionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateNetworkInterfacePermissionOutput) GoString() string { + return s.String() +} + +// SetInterfacePermission sets the InterfacePermission field's value. +func (s *CreateNetworkInterfacePermissionOutput) SetInterfacePermission(v *NetworkInterfacePermission) *CreateNetworkInterfacePermissionOutput { + s.InterfacePermission = v + return s +} + +type CreatePlacementGroupInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // A name for the placement group. Must be unique within the scope of your account + // for the Region. + // + // Constraints: Up to 255 ASCII characters + GroupName *string `locationName:"groupName" type:"string"` + + // The number of partitions. Valid only when Strategy is set to partition. + PartitionCount *int64 `type:"integer"` + + // The placement strategy. + Strategy *string `locationName:"strategy" type:"string" enum:"PlacementStrategy"` +} + +// String returns the string representation +func (s CreatePlacementGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreatePlacementGroupInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *CreatePlacementGroupInput) SetDryRun(v bool) *CreatePlacementGroupInput { + s.DryRun = &v + return s +} + +// SetGroupName sets the GroupName field's value. +func (s *CreatePlacementGroupInput) SetGroupName(v string) *CreatePlacementGroupInput { + s.GroupName = &v + return s +} + +// SetPartitionCount sets the PartitionCount field's value. +func (s *CreatePlacementGroupInput) SetPartitionCount(v int64) *CreatePlacementGroupInput { + s.PartitionCount = &v + return s +} + +// SetStrategy sets the Strategy field's value. +func (s *CreatePlacementGroupInput) SetStrategy(v string) *CreatePlacementGroupInput { + s.Strategy = &v + return s +} + +type CreatePlacementGroupOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s CreatePlacementGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreatePlacementGroupOutput) GoString() string { + return s.String() +} + +// Contains the parameters for CreateReservedInstancesListing. +type CreateReservedInstancesListingInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure idempotency of your + // listings. This helps avoid duplicate listings. For more information, see + // Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + // + // ClientToken is a required field + ClientToken *string `locationName:"clientToken" type:"string" required:"true"` + + // The number of instances that are a part of a Reserved Instance account to + // be listed in the Reserved Instance Marketplace. This number should be less + // than or equal to the instance count associated with the Reserved Instance + // ID specified in this call. + // + // InstanceCount is a required field + InstanceCount *int64 `locationName:"instanceCount" type:"integer" required:"true"` + + // A list specifying the price of the Standard Reserved Instance for each month + // remaining in the Reserved Instance term. + // + // PriceSchedules is a required field + PriceSchedules []*PriceScheduleSpecification `locationName:"priceSchedules" locationNameList:"item" type:"list" required:"true"` + + // The ID of the active Standard Reserved Instance. + // + // ReservedInstancesId is a required field + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateReservedInstancesListingInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateReservedInstancesListingInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateReservedInstancesListingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateReservedInstancesListingInput"} + if s.ClientToken == nil { + invalidParams.Add(request.NewErrParamRequired("ClientToken")) + } + if s.InstanceCount == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceCount")) + } + if s.PriceSchedules == nil { + invalidParams.Add(request.NewErrParamRequired("PriceSchedules")) + } + if s.ReservedInstancesId == nil { + invalidParams.Add(request.NewErrParamRequired("ReservedInstancesId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateReservedInstancesListingInput) SetClientToken(v string) *CreateReservedInstancesListingInput { + s.ClientToken = &v + return s +} + +// SetInstanceCount sets the InstanceCount field's value. +func (s *CreateReservedInstancesListingInput) SetInstanceCount(v int64) *CreateReservedInstancesListingInput { + s.InstanceCount = &v + return s +} + +// SetPriceSchedules sets the PriceSchedules field's value. +func (s *CreateReservedInstancesListingInput) SetPriceSchedules(v []*PriceScheduleSpecification) *CreateReservedInstancesListingInput { + s.PriceSchedules = v + return s +} + +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *CreateReservedInstancesListingInput) SetReservedInstancesId(v string) *CreateReservedInstancesListingInput { + s.ReservedInstancesId = &v + return s +} + +// Contains the output of CreateReservedInstancesListing. +type CreateReservedInstancesListingOutput struct { + _ struct{} `type:"structure"` + + // Information about the Standard Reserved Instance listing. + ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateReservedInstancesListingOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateReservedInstancesListingOutput) GoString() string { + return s.String() +} + +// SetReservedInstancesListings sets the ReservedInstancesListings field's value. +func (s *CreateReservedInstancesListingOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *CreateReservedInstancesListingOutput { + s.ReservedInstancesListings = v + return s +} + +type CreateRouteInput struct { + _ struct{} `type:"structure"` + + // The IPv4 CIDR address block used for the destination match. Routing decisions + // are based on the most specific match. + DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` + + // The IPv6 CIDR block used for the destination match. Routing decisions are + // based on the most specific match. + DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // [IPv6 traffic only] The ID of an egress-only internet gateway. + EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` + + // The ID of an internet gateway or virtual private gateway attached to your + // VPC. + GatewayId *string `locationName:"gatewayId" type:"string"` + + // The ID of a NAT instance in your VPC. The operation fails if you specify + // an instance ID unless exactly one network interface is attached. + InstanceId *string `locationName:"instanceId" type:"string"` + + // [IPv4 traffic only] The ID of a NAT gateway. + NatGatewayId *string `locationName:"natGatewayId" type:"string"` + + // The ID of a network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + + // The ID of the route table for the route. + // + // RouteTableId is a required field + RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` + + // The ID of a transit gateway. + TransitGatewayId *string `type:"string"` + + // The ID of a VPC peering connection. + VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` +} + +// String returns the string representation +func (s CreateRouteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateRouteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateRouteInput"} + if s.RouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("RouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *CreateRouteInput) SetDestinationCidrBlock(v string) *CreateRouteInput { + s.DestinationCidrBlock = &v + return s +} + +// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. +func (s *CreateRouteInput) SetDestinationIpv6CidrBlock(v string) *CreateRouteInput { + s.DestinationIpv6CidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateRouteInput) SetDryRun(v bool) *CreateRouteInput { + s.DryRun = &v + return s +} + +// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. +func (s *CreateRouteInput) SetEgressOnlyInternetGatewayId(v string) *CreateRouteInput { + s.EgressOnlyInternetGatewayId = &v + return s +} + +// SetGatewayId sets the GatewayId field's value. +func (s *CreateRouteInput) SetGatewayId(v string) *CreateRouteInput { + s.GatewayId = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *CreateRouteInput) SetInstanceId(v string) *CreateRouteInput { + s.InstanceId = &v + return s +} + +// SetNatGatewayId sets the NatGatewayId field's value. +func (s *CreateRouteInput) SetNatGatewayId(v string) *CreateRouteInput { + s.NatGatewayId = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *CreateRouteInput) SetNetworkInterfaceId(v string) *CreateRouteInput { + s.NetworkInterfaceId = &v + return s +} + +// SetRouteTableId sets the RouteTableId field's value. +func (s *CreateRouteInput) SetRouteTableId(v string) *CreateRouteInput { + s.RouteTableId = &v + return s +} + +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *CreateRouteInput) SetTransitGatewayId(v string) *CreateRouteInput { + s.TransitGatewayId = &v + return s +} + +// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. +func (s *CreateRouteInput) SetVpcPeeringConnectionId(v string) *CreateRouteInput { + s.VpcPeeringConnectionId = &v + return s +} + +type CreateRouteOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s CreateRouteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateRouteOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *CreateRouteOutput) SetReturn(v bool) *CreateRouteOutput { + s.Return = &v + return s +} + +type CreateRouteTableInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateRouteTableInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateRouteTableInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateRouteTableInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateRouteTableInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateRouteTableInput) SetDryRun(v bool) *CreateRouteTableInput { + s.DryRun = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateRouteTableInput) SetVpcId(v string) *CreateRouteTableInput { + s.VpcId = &v + return s +} + +type CreateRouteTableOutput struct { + _ struct{} `type:"structure"` + + // Information about the route table. + RouteTable *RouteTable `locationName:"routeTable" type:"structure"` +} + +// String returns the string representation +func (s CreateRouteTableOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateRouteTableOutput) GoString() string { + return s.String() +} + +// SetRouteTable sets the RouteTable field's value. +func (s *CreateRouteTableOutput) SetRouteTable(v *RouteTable) *CreateRouteTableOutput { + s.RouteTable = v + return s +} + +type CreateSecurityGroupInput struct { + _ struct{} `type:"structure"` + + // A description for the security group. This is informational only. + // + // Constraints: Up to 255 characters in length + // + // Constraints for EC2-Classic: ASCII characters + // + // Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* + // + // Description is a required field + Description *string `locationName:"GroupDescription" type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The name of the security group. + // + // Constraints: Up to 255 characters in length. Cannot start with sg-. + // + // Constraints for EC2-Classic: ASCII characters + // + // Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* + // + // GroupName is a required field + GroupName *string `type:"string" required:"true"` + + // [EC2-VPC] The ID of the VPC. Required for EC2-VPC. + VpcId *string `type:"string"` +} + +// String returns the string representation +func (s CreateSecurityGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSecurityGroupInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateSecurityGroupInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateSecurityGroupInput"} + if s.Description == nil { + invalidParams.Add(request.NewErrParamRequired("Description")) + } + if s.GroupName == nil { + invalidParams.Add(request.NewErrParamRequired("GroupName")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDescription sets the Description field's value. +func (s *CreateSecurityGroupInput) SetDescription(v string) *CreateSecurityGroupInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateSecurityGroupInput) SetDryRun(v bool) *CreateSecurityGroupInput { + s.DryRun = &v + return s +} + +// SetGroupName sets the GroupName field's value. +func (s *CreateSecurityGroupInput) SetGroupName(v string) *CreateSecurityGroupInput { + s.GroupName = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateSecurityGroupInput) SetVpcId(v string) *CreateSecurityGroupInput { + s.VpcId = &v + return s +} + +type CreateSecurityGroupOutput struct { + _ struct{} `type:"structure"` + + // The ID of the security group. + GroupId *string `locationName:"groupId" type:"string"` +} + +// String returns the string representation +func (s CreateSecurityGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSecurityGroupOutput) GoString() string { + return s.String() +} + +// SetGroupId sets the GroupId field's value. +func (s *CreateSecurityGroupOutput) SetGroupId(v string) *CreateSecurityGroupOutput { + s.GroupId = &v + return s +} + +type CreateSnapshotInput struct { + _ struct{} `type:"structure"` + + // A description for the snapshot. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The tags to apply to the snapshot during creation. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` + + // The ID of the EBS volume. + // + // VolumeId is a required field + VolumeId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateSnapshotInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSnapshotInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateSnapshotInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateSnapshotInput"} + if s.VolumeId == nil { + invalidParams.Add(request.NewErrParamRequired("VolumeId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDescription sets the Description field's value. +func (s *CreateSnapshotInput) SetDescription(v string) *CreateSnapshotInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateSnapshotInput) SetDryRun(v bool) *CreateSnapshotInput { + s.DryRun = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateSnapshotInput) SetTagSpecifications(v []*TagSpecification) *CreateSnapshotInput { + s.TagSpecifications = v + return s +} + +// SetVolumeId sets the VolumeId field's value. +func (s *CreateSnapshotInput) SetVolumeId(v string) *CreateSnapshotInput { + s.VolumeId = &v + return s +} + +type CreateSnapshotsInput struct { + _ struct{} `type:"structure"` + + // Copies the tags from the specified volume to corresponding snapshot. + CopyTagsFromSource *string `type:"string" enum:"CopyTagsFromSource"` + + // A description propagated to every snapshot specified by the instance. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The instance to specify which volumes should be included in the snapshots. + // + // InstanceSpecification is a required field + InstanceSpecification *InstanceSpecification `type:"structure" required:"true"` + + // Tags to apply to every snapshot specified by the instance. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateSnapshotsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSnapshotsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateSnapshotsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateSnapshotsInput"} + if s.InstanceSpecification == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceSpecification")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCopyTagsFromSource sets the CopyTagsFromSource field's value. +func (s *CreateSnapshotsInput) SetCopyTagsFromSource(v string) *CreateSnapshotsInput { + s.CopyTagsFromSource = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateSnapshotsInput) SetDescription(v string) *CreateSnapshotsInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateSnapshotsInput) SetDryRun(v bool) *CreateSnapshotsInput { + s.DryRun = &v + return s +} + +// SetInstanceSpecification sets the InstanceSpecification field's value. +func (s *CreateSnapshotsInput) SetInstanceSpecification(v *InstanceSpecification) *CreateSnapshotsInput { + s.InstanceSpecification = v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateSnapshotsInput) SetTagSpecifications(v []*TagSpecification) *CreateSnapshotsInput { + s.TagSpecifications = v + return s +} + +type CreateSnapshotsOutput struct { + _ struct{} `type:"structure"` + + // List of snapshots. + Snapshots []*SnapshotInfo `locationName:"snapshotSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateSnapshotsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSnapshotsOutput) GoString() string { + return s.String() +} + +// SetSnapshots sets the Snapshots field's value. +func (s *CreateSnapshotsOutput) SetSnapshots(v []*SnapshotInfo) *CreateSnapshotsOutput { + s.Snapshots = v + return s +} + +// Contains the parameters for CreateSpotDatafeedSubscription. +type CreateSpotDatafeedSubscriptionInput struct { + _ struct{} `type:"structure"` + + // The Amazon S3 bucket in which to store the Spot Instance data feed. + // + // Bucket is a required field + Bucket *string `locationName:"bucket" type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // A prefix for the data feed file names. + Prefix *string `locationName:"prefix" type:"string"` +} + +// String returns the string representation +func (s CreateSpotDatafeedSubscriptionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSpotDatafeedSubscriptionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateSpotDatafeedSubscriptionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateSpotDatafeedSubscriptionInput"} + if s.Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("Bucket")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBucket sets the Bucket field's value. +func (s *CreateSpotDatafeedSubscriptionInput) SetBucket(v string) *CreateSpotDatafeedSubscriptionInput { + s.Bucket = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateSpotDatafeedSubscriptionInput) SetDryRun(v bool) *CreateSpotDatafeedSubscriptionInput { + s.DryRun = &v + return s +} + +// SetPrefix sets the Prefix field's value. +func (s *CreateSpotDatafeedSubscriptionInput) SetPrefix(v string) *CreateSpotDatafeedSubscriptionInput { + s.Prefix = &v + return s +} + +// Contains the output of CreateSpotDatafeedSubscription. +type CreateSpotDatafeedSubscriptionOutput struct { + _ struct{} `type:"structure"` + + // The Spot Instance data feed subscription. + SpotDatafeedSubscription *SpotDatafeedSubscription `locationName:"spotDatafeedSubscription" type:"structure"` +} + +// String returns the string representation +func (s CreateSpotDatafeedSubscriptionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSpotDatafeedSubscriptionOutput) GoString() string { + return s.String() +} + +// SetSpotDatafeedSubscription sets the SpotDatafeedSubscription field's value. +func (s *CreateSpotDatafeedSubscriptionOutput) SetSpotDatafeedSubscription(v *SpotDatafeedSubscription) *CreateSpotDatafeedSubscriptionOutput { + s.SpotDatafeedSubscription = v + return s +} + +type CreateSubnetInput struct { + _ struct{} `type:"structure"` + + // The Availability Zone for the subnet. + // + // Default: AWS selects one for you. If you create more than one subnet in your + // VPC, we may not necessarily select a different zone for each subnet. + AvailabilityZone *string `type:"string"` + + // The AZ ID of the subnet. + AvailabilityZoneId *string `type:"string"` + + // The IPv4 network range for the subnet, in CIDR notation. For example, 10.0.0.0/24. + // + // CidrBlock is a required field + CidrBlock *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The IPv6 network range for the subnet, in CIDR notation. The subnet size + // must use a /64 prefix length. + Ipv6CidrBlock *string `type:"string"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateSubnetInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSubnetInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateSubnetInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateSubnetInput"} + if s.CidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("CidrBlock")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *CreateSubnetInput) SetAvailabilityZone(v string) *CreateSubnetInput { + s.AvailabilityZone = &v + return s +} + +// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. +func (s *CreateSubnetInput) SetAvailabilityZoneId(v string) *CreateSubnetInput { + s.AvailabilityZoneId = &v + return s +} + +// SetCidrBlock sets the CidrBlock field's value. +func (s *CreateSubnetInput) SetCidrBlock(v string) *CreateSubnetInput { + s.CidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateSubnetInput) SetDryRun(v bool) *CreateSubnetInput { + s.DryRun = &v + return s +} + +// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. +func (s *CreateSubnetInput) SetIpv6CidrBlock(v string) *CreateSubnetInput { + s.Ipv6CidrBlock = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateSubnetInput) SetVpcId(v string) *CreateSubnetInput { + s.VpcId = &v + return s +} + +type CreateSubnetOutput struct { + _ struct{} `type:"structure"` + + // Information about the subnet. + Subnet *Subnet `locationName:"subnet" type:"structure"` +} + +// String returns the string representation +func (s CreateSubnetOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateSubnetOutput) GoString() string { + return s.String() +} + +// SetSubnet sets the Subnet field's value. +func (s *CreateSubnetOutput) SetSubnet(v *Subnet) *CreateSubnetOutput { + s.Subnet = v + return s +} + +type CreateTagsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The IDs of the resources, separated by spaces. + // + // Constraints: Up to 1000 resource IDs. We recommend breaking up this request + // into smaller batches. + // + // Resources is a required field + Resources []*string `locationName:"ResourceId" type:"list" required:"true"` + + // The tags. The value parameter is required, but if you don't want the tag + // to have a value, specify the parameter with no value, and we set the value + // to an empty string. + // + // Tags is a required field + Tags []*Tag `locationName:"Tag" locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s CreateTagsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTagsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateTagsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateTagsInput"} + if s.Resources == nil { + invalidParams.Add(request.NewErrParamRequired("Resources")) + } + if s.Tags == nil { + invalidParams.Add(request.NewErrParamRequired("Tags")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTagsInput) SetDryRun(v bool) *CreateTagsInput { + s.DryRun = &v + return s +} + +// SetResources sets the Resources field's value. +func (s *CreateTagsInput) SetResources(v []*string) *CreateTagsInput { + s.Resources = v + return s +} + +// SetTags sets the Tags field's value. +func (s *CreateTagsInput) SetTags(v []*Tag) *CreateTagsInput { + s.Tags = v + return s +} + +type CreateTagsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s CreateTagsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTagsOutput) GoString() string { + return s.String() +} + +type CreateTrafficMirrorFilterInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // The description of the Traffic Mirror filter. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The tags to assign to a Traffic Mirror filter. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateTrafficMirrorFilterInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTrafficMirrorFilterInput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateTrafficMirrorFilterInput) SetClientToken(v string) *CreateTrafficMirrorFilterInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateTrafficMirrorFilterInput) SetDescription(v string) *CreateTrafficMirrorFilterInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTrafficMirrorFilterInput) SetDryRun(v bool) *CreateTrafficMirrorFilterInput { + s.DryRun = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateTrafficMirrorFilterInput) SetTagSpecifications(v []*TagSpecification) *CreateTrafficMirrorFilterInput { + s.TagSpecifications = v + return s +} + +type CreateTrafficMirrorFilterOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` + + // Information about the Traffic Mirror filter. + TrafficMirrorFilter *TrafficMirrorFilter `locationName:"trafficMirrorFilter" type:"structure"` +} + +// String returns the string representation +func (s CreateTrafficMirrorFilterOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTrafficMirrorFilterOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateTrafficMirrorFilterOutput) SetClientToken(v string) *CreateTrafficMirrorFilterOutput { + s.ClientToken = &v + return s +} + +// SetTrafficMirrorFilter sets the TrafficMirrorFilter field's value. +func (s *CreateTrafficMirrorFilterOutput) SetTrafficMirrorFilter(v *TrafficMirrorFilter) *CreateTrafficMirrorFilterOutput { + s.TrafficMirrorFilter = v + return s +} + +type CreateTrafficMirrorFilterRuleInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // The description of the Traffic Mirror rule. + Description *string `type:"string"` + + // The destination CIDR block to assign to the Traffic Mirror rule. + // + // DestinationCidrBlock is a required field + DestinationCidrBlock *string `type:"string" required:"true"` + + // The destination port range. + DestinationPortRange *TrafficMirrorPortRangeRequest `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The protocol, for example UDP, to assign to the Traffic Mirror rule. + // + // For information about the protocol value, see Protocol Numbers (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) + // on the Internet Assigned Numbers Authority (IANA) website. + Protocol *int64 `type:"integer"` + + // The action to take (accept | reject) on the filtered traffic. + // + // RuleAction is a required field + RuleAction *string `type:"string" required:"true" enum:"TrafficMirrorRuleAction"` + + // The number of the Traffic Mirror rule. This number must be unique for each + // Traffic Mirror rule in a given direction. The rules are processed in ascending + // order by rule number. + // + // RuleNumber is a required field + RuleNumber *int64 `type:"integer" required:"true"` + + // The source CIDR block to assign to the Traffic Mirror rule. + // + // SourceCidrBlock is a required field + SourceCidrBlock *string `type:"string" required:"true"` + + // The source port range. + SourcePortRange *TrafficMirrorPortRangeRequest `type:"structure"` + + // The type of traffic (ingress | egress). + // + // TrafficDirection is a required field + TrafficDirection *string `type:"string" required:"true" enum:"TrafficDirection"` + + // The ID of the filter that this rule is associated with. + // + // TrafficMirrorFilterId is a required field + TrafficMirrorFilterId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateTrafficMirrorFilterRuleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTrafficMirrorFilterRuleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateTrafficMirrorFilterRuleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateTrafficMirrorFilterRuleInput"} + if s.DestinationCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) + } + if s.RuleAction == nil { + invalidParams.Add(request.NewErrParamRequired("RuleAction")) + } + if s.RuleNumber == nil { + invalidParams.Add(request.NewErrParamRequired("RuleNumber")) + } + if s.SourceCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("SourceCidrBlock")) + } + if s.TrafficDirection == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficDirection")) + } + if s.TrafficMirrorFilterId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetClientToken(v string) *CreateTrafficMirrorFilterRuleInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetDescription(v string) *CreateTrafficMirrorFilterRuleInput { + s.Description = &v + return s +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetDestinationCidrBlock(v string) *CreateTrafficMirrorFilterRuleInput { + s.DestinationCidrBlock = &v + return s +} + +// SetDestinationPortRange sets the DestinationPortRange field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetDestinationPortRange(v *TrafficMirrorPortRangeRequest) *CreateTrafficMirrorFilterRuleInput { + s.DestinationPortRange = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetDryRun(v bool) *CreateTrafficMirrorFilterRuleInput { + s.DryRun = &v + return s +} + +// SetProtocol sets the Protocol field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetProtocol(v int64) *CreateTrafficMirrorFilterRuleInput { + s.Protocol = &v + return s +} + +// SetRuleAction sets the RuleAction field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetRuleAction(v string) *CreateTrafficMirrorFilterRuleInput { + s.RuleAction = &v + return s +} + +// SetRuleNumber sets the RuleNumber field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetRuleNumber(v int64) *CreateTrafficMirrorFilterRuleInput { + s.RuleNumber = &v + return s +} + +// SetSourceCidrBlock sets the SourceCidrBlock field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetSourceCidrBlock(v string) *CreateTrafficMirrorFilterRuleInput { + s.SourceCidrBlock = &v + return s +} + +// SetSourcePortRange sets the SourcePortRange field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetSourcePortRange(v *TrafficMirrorPortRangeRequest) *CreateTrafficMirrorFilterRuleInput { + s.SourcePortRange = v + return s +} + +// SetTrafficDirection sets the TrafficDirection field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetTrafficDirection(v string) *CreateTrafficMirrorFilterRuleInput { + s.TrafficDirection = &v + return s +} + +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *CreateTrafficMirrorFilterRuleInput) SetTrafficMirrorFilterId(v string) *CreateTrafficMirrorFilterRuleInput { + s.TrafficMirrorFilterId = &v + return s +} + +type CreateTrafficMirrorFilterRuleOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` + + // The Traffic Mirror rule. + TrafficMirrorFilterRule *TrafficMirrorFilterRule `locationName:"trafficMirrorFilterRule" type:"structure"` +} + +// String returns the string representation +func (s CreateTrafficMirrorFilterRuleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTrafficMirrorFilterRuleOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateTrafficMirrorFilterRuleOutput) SetClientToken(v string) *CreateTrafficMirrorFilterRuleOutput { + s.ClientToken = &v + return s +} + +// SetTrafficMirrorFilterRule sets the TrafficMirrorFilterRule field's value. +func (s *CreateTrafficMirrorFilterRuleOutput) SetTrafficMirrorFilterRule(v *TrafficMirrorFilterRule) *CreateTrafficMirrorFilterRuleOutput { + s.TrafficMirrorFilterRule = v + return s +} + +type CreateTrafficMirrorSessionInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // The description of the Traffic Mirror session. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the source network interface. + // + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `type:"string" required:"true"` + + // The number of bytes in each packet to mirror. These are bytes after the VXLAN + // header. Do not specify this parameter when you want to mirror the entire + // packet. To mirror a subset of the packet, set this to the length (in bytes) + // that you want to mirror. For example, if you set this value to 100, then + // the first 100 bytes that meet the filter criteria are copied to the target. + // + // If you do not want to mirror the entire packet, use the PacketLength parameter + // to specify the number of bytes in each packet to mirror. + PacketLength *int64 `type:"integer"` + + // The session number determines the order in which sessions are evaluated when + // an interface is used by multiple sessions. The first session with a matching + // filter is the one that mirrors the packets. + // + // Valid values are 1-32766. + // + // SessionNumber is a required field + SessionNumber *int64 `type:"integer" required:"true"` + + // The tags to assign to a Traffic Mirror session. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` + + // The ID of the Traffic Mirror filter. + // + // TrafficMirrorFilterId is a required field + TrafficMirrorFilterId *string `type:"string" required:"true"` + + // The ID of the Traffic Mirror target. + // + // TrafficMirrorTargetId is a required field + TrafficMirrorTargetId *string `type:"string" required:"true"` + + // The VXLAN ID for the Traffic Mirror session. For more information about the + // VXLAN protocol, see RFC 7348 (https://tools.ietf.org/html/rfc7348). If you + // do not specify a VirtualNetworkId, an account-wide unique id is chosen at + // random. + VirtualNetworkId *int64 `type:"integer"` +} + +// String returns the string representation +func (s CreateTrafficMirrorSessionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTrafficMirrorSessionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateTrafficMirrorSessionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateTrafficMirrorSessionInput"} + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) + } + if s.SessionNumber == nil { + invalidParams.Add(request.NewErrParamRequired("SessionNumber")) + } + if s.TrafficMirrorFilterId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterId")) + } + if s.TrafficMirrorTargetId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorTargetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateTrafficMirrorSessionInput) SetClientToken(v string) *CreateTrafficMirrorSessionInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateTrafficMirrorSessionInput) SetDescription(v string) *CreateTrafficMirrorSessionInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTrafficMirrorSessionInput) SetDryRun(v bool) *CreateTrafficMirrorSessionInput { + s.DryRun = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *CreateTrafficMirrorSessionInput) SetNetworkInterfaceId(v string) *CreateTrafficMirrorSessionInput { + s.NetworkInterfaceId = &v + return s +} + +// SetPacketLength sets the PacketLength field's value. +func (s *CreateTrafficMirrorSessionInput) SetPacketLength(v int64) *CreateTrafficMirrorSessionInput { + s.PacketLength = &v + return s +} + +// SetSessionNumber sets the SessionNumber field's value. +func (s *CreateTrafficMirrorSessionInput) SetSessionNumber(v int64) *CreateTrafficMirrorSessionInput { + s.SessionNumber = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateTrafficMirrorSessionInput) SetTagSpecifications(v []*TagSpecification) *CreateTrafficMirrorSessionInput { + s.TagSpecifications = v + return s +} + +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *CreateTrafficMirrorSessionInput) SetTrafficMirrorFilterId(v string) *CreateTrafficMirrorSessionInput { + s.TrafficMirrorFilterId = &v + return s +} + +// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. +func (s *CreateTrafficMirrorSessionInput) SetTrafficMirrorTargetId(v string) *CreateTrafficMirrorSessionInput { + s.TrafficMirrorTargetId = &v + return s +} + +// SetVirtualNetworkId sets the VirtualNetworkId field's value. +func (s *CreateTrafficMirrorSessionInput) SetVirtualNetworkId(v int64) *CreateTrafficMirrorSessionInput { + s.VirtualNetworkId = &v + return s +} + +type CreateTrafficMirrorSessionOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` + + // Information about the Traffic Mirror session. + TrafficMirrorSession *TrafficMirrorSession `locationName:"trafficMirrorSession" type:"structure"` +} + +// String returns the string representation +func (s CreateTrafficMirrorSessionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTrafficMirrorSessionOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateTrafficMirrorSessionOutput) SetClientToken(v string) *CreateTrafficMirrorSessionOutput { + s.ClientToken = &v + return s +} + +// SetTrafficMirrorSession sets the TrafficMirrorSession field's value. +func (s *CreateTrafficMirrorSessionOutput) SetTrafficMirrorSession(v *TrafficMirrorSession) *CreateTrafficMirrorSessionOutput { + s.TrafficMirrorSession = v + return s +} + +type CreateTrafficMirrorTargetInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // The description of the Traffic Mirror target. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The network interface ID that is associated with the target. + NetworkInterfaceId *string `type:"string"` + + // The Amazon Resource Name (ARN) of the Network Load Balancer that is associated + // with the target. + NetworkLoadBalancerArn *string `type:"string"` + + // The tags to assign to the Traffic Mirror target. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateTrafficMirrorTargetInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTrafficMirrorTargetInput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateTrafficMirrorTargetInput) SetClientToken(v string) *CreateTrafficMirrorTargetInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *CreateTrafficMirrorTargetInput) SetDescription(v string) *CreateTrafficMirrorTargetInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTrafficMirrorTargetInput) SetDryRun(v bool) *CreateTrafficMirrorTargetInput { + s.DryRun = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *CreateTrafficMirrorTargetInput) SetNetworkInterfaceId(v string) *CreateTrafficMirrorTargetInput { + s.NetworkInterfaceId = &v + return s +} + +// SetNetworkLoadBalancerArn sets the NetworkLoadBalancerArn field's value. +func (s *CreateTrafficMirrorTargetInput) SetNetworkLoadBalancerArn(v string) *CreateTrafficMirrorTargetInput { + s.NetworkLoadBalancerArn = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateTrafficMirrorTargetInput) SetTagSpecifications(v []*TagSpecification) *CreateTrafficMirrorTargetInput { + s.TagSpecifications = v + return s +} + +type CreateTrafficMirrorTargetOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` + + // Information about the Traffic Mirror target. + TrafficMirrorTarget *TrafficMirrorTarget `locationName:"trafficMirrorTarget" type:"structure"` +} + +// String returns the string representation +func (s CreateTrafficMirrorTargetOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTrafficMirrorTargetOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateTrafficMirrorTargetOutput) SetClientToken(v string) *CreateTrafficMirrorTargetOutput { + s.ClientToken = &v + return s +} + +// SetTrafficMirrorTarget sets the TrafficMirrorTarget field's value. +func (s *CreateTrafficMirrorTargetOutput) SetTrafficMirrorTarget(v *TrafficMirrorTarget) *CreateTrafficMirrorTargetOutput { + s.TrafficMirrorTarget = v + return s +} + +type CreateTransitGatewayInput struct { + _ struct{} `type:"structure"` + + // A description of the transit gateway. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The transit gateway options. + Options *TransitGatewayRequestOptions `type:"structure"` + + // The tags to apply to the transit gateway. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateTransitGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayInput) GoString() string { + return s.String() +} + +// SetDescription sets the Description field's value. +func (s *CreateTransitGatewayInput) SetDescription(v string) *CreateTransitGatewayInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTransitGatewayInput) SetDryRun(v bool) *CreateTransitGatewayInput { + s.DryRun = &v + return s +} + +// SetOptions sets the Options field's value. +func (s *CreateTransitGatewayInput) SetOptions(v *TransitGatewayRequestOptions) *CreateTransitGatewayInput { + s.Options = v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateTransitGatewayInput) SetTagSpecifications(v []*TagSpecification) *CreateTransitGatewayInput { + s.TagSpecifications = v + return s +} + +type CreateTransitGatewayOutput struct { + _ struct{} `type:"structure"` + + // Information about the transit gateway. + TransitGateway *TransitGateway `locationName:"transitGateway" type:"structure"` +} + +// String returns the string representation +func (s CreateTransitGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayOutput) GoString() string { + return s.String() +} + +// SetTransitGateway sets the TransitGateway field's value. +func (s *CreateTransitGatewayOutput) SetTransitGateway(v *TransitGateway) *CreateTransitGatewayOutput { + s.TransitGateway = v + return s +} + +type CreateTransitGatewayRouteInput struct { + _ struct{} `type:"structure"` + + // Indicates whether to drop traffic that matches this route. + Blackhole *bool `type:"boolean"` + + // The CIDR range used for destination matches. Routing decisions are based + // on the most specific match. + // + // DestinationCidrBlock is a required field + DestinationCidrBlock *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the attachment. + TransitGatewayAttachmentId *string `type:"string"` + + // The ID of the transit gateway route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateTransitGatewayRouteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayRouteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateTransitGatewayRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateTransitGatewayRouteInput"} + if s.DestinationCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBlackhole sets the Blackhole field's value. +func (s *CreateTransitGatewayRouteInput) SetBlackhole(v bool) *CreateTransitGatewayRouteInput { + s.Blackhole = &v + return s +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *CreateTransitGatewayRouteInput) SetDestinationCidrBlock(v string) *CreateTransitGatewayRouteInput { + s.DestinationCidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTransitGatewayRouteInput) SetDryRun(v bool) *CreateTransitGatewayRouteInput { + s.DryRun = &v + return s +} + +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *CreateTransitGatewayRouteInput) SetTransitGatewayAttachmentId(v string) *CreateTransitGatewayRouteInput { + s.TransitGatewayAttachmentId = &v + return s +} + +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *CreateTransitGatewayRouteInput) SetTransitGatewayRouteTableId(v string) *CreateTransitGatewayRouteInput { + s.TransitGatewayRouteTableId = &v + return s +} + +type CreateTransitGatewayRouteOutput struct { + _ struct{} `type:"structure"` + + // Information about the route. + Route *TransitGatewayRoute `locationName:"route" type:"structure"` +} + +// String returns the string representation +func (s CreateTransitGatewayRouteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayRouteOutput) GoString() string { + return s.String() +} + +// SetRoute sets the Route field's value. +func (s *CreateTransitGatewayRouteOutput) SetRoute(v *TransitGatewayRoute) *CreateTransitGatewayRouteOutput { + s.Route = v + return s +} + +type CreateTransitGatewayRouteTableInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The tags to apply to the transit gateway route table. + TagSpecifications []*TagSpecification `locationNameList:"item" type:"list"` + + // The ID of the transit gateway. + // + // TransitGatewayId is a required field + TransitGatewayId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateTransitGatewayRouteTableInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayRouteTableInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateTransitGatewayRouteTableInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateTransitGatewayRouteTableInput"} + if s.TransitGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTransitGatewayRouteTableInput) SetDryRun(v bool) *CreateTransitGatewayRouteTableInput { + s.DryRun = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateTransitGatewayRouteTableInput) SetTagSpecifications(v []*TagSpecification) *CreateTransitGatewayRouteTableInput { + s.TagSpecifications = v + return s +} + +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *CreateTransitGatewayRouteTableInput) SetTransitGatewayId(v string) *CreateTransitGatewayRouteTableInput { + s.TransitGatewayId = &v + return s +} + +type CreateTransitGatewayRouteTableOutput struct { + _ struct{} `type:"structure"` + + // Information about the transit gateway route table. + TransitGatewayRouteTable *TransitGatewayRouteTable `locationName:"transitGatewayRouteTable" type:"structure"` +} + +// String returns the string representation +func (s CreateTransitGatewayRouteTableOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayRouteTableOutput) GoString() string { + return s.String() +} + +// SetTransitGatewayRouteTable sets the TransitGatewayRouteTable field's value. +func (s *CreateTransitGatewayRouteTableOutput) SetTransitGatewayRouteTable(v *TransitGatewayRouteTable) *CreateTransitGatewayRouteTableOutput { + s.TransitGatewayRouteTable = v + return s +} + +type CreateTransitGatewayVpcAttachmentInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The VPC attachment options. + Options *CreateTransitGatewayVpcAttachmentRequestOptions `type:"structure"` + + // The IDs of one or more subnets. You can specify only one subnet per Availability + // Zone. You must specify at least one subnet, but we recommend that you specify + // two subnets for better availability. The transit gateway uses one IP address + // from each specified subnet. + // + // SubnetIds is a required field + SubnetIds []*string `locationNameList:"item" type:"list" required:"true"` + + // The tags to apply to the VPC attachment. + TagSpecifications []*TagSpecification `locationNameList:"item" type:"list"` + + // The ID of the transit gateway. + // + // TransitGatewayId is a required field + TransitGatewayId *string `type:"string" required:"true"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateTransitGatewayVpcAttachmentInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayVpcAttachmentInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateTransitGatewayVpcAttachmentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateTransitGatewayVpcAttachmentInput"} + if s.SubnetIds == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetIds")) + } + if s.TransitGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayId")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *CreateTransitGatewayVpcAttachmentInput { + s.DryRun = &v + return s +} + +// SetOptions sets the Options field's value. +func (s *CreateTransitGatewayVpcAttachmentInput) SetOptions(v *CreateTransitGatewayVpcAttachmentRequestOptions) *CreateTransitGatewayVpcAttachmentInput { + s.Options = v + return s +} + +// SetSubnetIds sets the SubnetIds field's value. +func (s *CreateTransitGatewayVpcAttachmentInput) SetSubnetIds(v []*string) *CreateTransitGatewayVpcAttachmentInput { + s.SubnetIds = v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateTransitGatewayVpcAttachmentInput) SetTagSpecifications(v []*TagSpecification) *CreateTransitGatewayVpcAttachmentInput { + s.TagSpecifications = v + return s +} + +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *CreateTransitGatewayVpcAttachmentInput) SetTransitGatewayId(v string) *CreateTransitGatewayVpcAttachmentInput { + s.TransitGatewayId = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateTransitGatewayVpcAttachmentInput) SetVpcId(v string) *CreateTransitGatewayVpcAttachmentInput { + s.VpcId = &v + return s +} + +type CreateTransitGatewayVpcAttachmentOutput struct { + _ struct{} `type:"structure"` + + // Information about the VPC attachment. + TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` +} + +// String returns the string representation +func (s CreateTransitGatewayVpcAttachmentOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayVpcAttachmentOutput) GoString() string { + return s.String() +} + +// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. +func (s *CreateTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *CreateTransitGatewayVpcAttachmentOutput { + s.TransitGatewayVpcAttachment = v + return s +} + +// Describes the options for a VPC attachment. +type CreateTransitGatewayVpcAttachmentRequestOptions struct { + _ struct{} `type:"structure"` + + // Enable or disable DNS support. The default is enable. + DnsSupport *string `type:"string" enum:"DnsSupportValue"` + + // Enable or disable IPv6 support. The default is enable. + Ipv6Support *string `type:"string" enum:"Ipv6SupportValue"` +} + +// String returns the string representation +func (s CreateTransitGatewayVpcAttachmentRequestOptions) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTransitGatewayVpcAttachmentRequestOptions) GoString() string { + return s.String() +} + +// SetDnsSupport sets the DnsSupport field's value. +func (s *CreateTransitGatewayVpcAttachmentRequestOptions) SetDnsSupport(v string) *CreateTransitGatewayVpcAttachmentRequestOptions { + s.DnsSupport = &v + return s +} + +// SetIpv6Support sets the Ipv6Support field's value. +func (s *CreateTransitGatewayVpcAttachmentRequestOptions) SetIpv6Support(v string) *CreateTransitGatewayVpcAttachmentRequestOptions { + s.Ipv6Support = &v + return s +} + +type CreateVolumeInput struct { + _ struct{} `type:"structure"` + + // The Availability Zone in which to create the volume. + // + // AvailabilityZone is a required field + AvailabilityZone *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // Specifies whether the volume should be encrypted. The effect of setting the + // encryption state to true depends on the volume origin (new or from a snapshot), + // starting encryption state, ownership, and whether encryption by default is + // enabled. For more information, see Encryption by Default (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default) + // in the Amazon Elastic Compute Cloud User Guide. + // + // Encrypted Amazon EBS volumes must be attached to instances that support Amazon + // EBS encryption. For more information, see Supported Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances). + Encrypted *bool `locationName:"encrypted" type:"boolean"` + + // The number of I/O operations per second (IOPS) to provision for the volume, + // with a maximum ratio of 50 IOPS/GiB. Range is 100 to 64,000 IOPS for volumes + // in most Regions. Maximum IOPS of 64,000 is guaranteed only on Nitro-based + // instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). + // Other instance families guarantee performance up to 32,000 IOPS. For more + // information, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) + // in the Amazon Elastic Compute Cloud User Guide. + // + // This parameter is valid only for Provisioned IOPS SSD (io1) volumes. + Iops *int64 `type:"integer"` + + // The identifier of the AWS Key Management Service (AWS KMS) customer master + // key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, + // your AWS managed CMK for EBS is used. If KmsKeyId is specified, the encrypted + // state must be true. + // + // You can specify the CMK using any of the following: + // + // * Key ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab. + // + // * Key alias. For example, alias/ExampleAlias. + // + // * Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. + // + // * Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. + // + // AWS authenticates the CMK asynchronously. Therefore, if you specify an ID, + // alias, or ARN that is not valid, the action can appear to complete, but eventually + // fails. + KmsKeyId *string `type:"string"` + + // The size of the volume, in GiBs. + // + // Constraints: 1-16,384 for gp2, 4-16,384 for io1, 500-16,384 for st1, 500-16,384 + // for sc1, and 1-1,024 for standard. If you specify a snapshot, the volume + // size must be equal to or larger than the snapshot size. + // + // Default: If you're creating the volume from a snapshot and don't specify + // a volume size, the default is the snapshot size. + // + // At least one of Size or SnapshotId is required. + Size *int64 `type:"integer"` + + // The snapshot from which to create the volume. + // + // At least one of Size or SnapshotId are required. + SnapshotId *string `type:"string"` + + // The tags to apply to the volume during creation. + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` + + // The volume type. This can be gp2 for General Purpose SSD, io1 for Provisioned + // IOPS SSD, st1 for Throughput Optimized HDD, sc1 for Cold HDD, or standard + // for Magnetic volumes. + // + // Default: gp2 + VolumeType *string `type:"string" enum:"VolumeType"` +} + +// String returns the string representation +func (s CreateVolumeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVolumeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateVolumeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateVolumeInput"} + if s.AvailabilityZone == nil { + invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *CreateVolumeInput) SetAvailabilityZone(v string) *CreateVolumeInput { + s.AvailabilityZone = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateVolumeInput) SetDryRun(v bool) *CreateVolumeInput { + s.DryRun = &v + return s +} + +// SetEncrypted sets the Encrypted field's value. +func (s *CreateVolumeInput) SetEncrypted(v bool) *CreateVolumeInput { + s.Encrypted = &v + return s +} + +// SetIops sets the Iops field's value. +func (s *CreateVolumeInput) SetIops(v int64) *CreateVolumeInput { + s.Iops = &v + return s +} + +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *CreateVolumeInput) SetKmsKeyId(v string) *CreateVolumeInput { + s.KmsKeyId = &v + return s +} + +// SetSize sets the Size field's value. +func (s *CreateVolumeInput) SetSize(v int64) *CreateVolumeInput { + s.Size = &v + return s +} + +// SetSnapshotId sets the SnapshotId field's value. +func (s *CreateVolumeInput) SetSnapshotId(v string) *CreateVolumeInput { + s.SnapshotId = &v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *CreateVolumeInput) SetTagSpecifications(v []*TagSpecification) *CreateVolumeInput { + s.TagSpecifications = v + return s +} + +// SetVolumeType sets the VolumeType field's value. +func (s *CreateVolumeInput) SetVolumeType(v string) *CreateVolumeInput { + s.VolumeType = &v + return s +} + +// Describes the user or group to be added or removed from the list of create +// volume permissions for a volume. +type CreateVolumePermission struct { + _ struct{} `type:"structure"` + + // The group to be added or removed. The possible value is all. + Group *string `locationName:"group" type:"string" enum:"PermissionGroup"` + + // The AWS account ID to be added or removed. + UserId *string `locationName:"userId" type:"string"` +} + +// String returns the string representation +func (s CreateVolumePermission) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVolumePermission) GoString() string { + return s.String() +} + +// SetGroup sets the Group field's value. +func (s *CreateVolumePermission) SetGroup(v string) *CreateVolumePermission { + s.Group = &v + return s +} + +// SetUserId sets the UserId field's value. +func (s *CreateVolumePermission) SetUserId(v string) *CreateVolumePermission { + s.UserId = &v + return s +} + +// Describes modifications to the list of create volume permissions for a volume. +type CreateVolumePermissionModifications struct { + _ struct{} `type:"structure"` + + // Adds the specified AWS account ID or group to the list. + Add []*CreateVolumePermission `locationNameList:"item" type:"list"` + + // Removes the specified AWS account ID or group from the list. + Remove []*CreateVolumePermission `locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s CreateVolumePermissionModifications) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVolumePermissionModifications) GoString() string { + return s.String() +} + +// SetAdd sets the Add field's value. +func (s *CreateVolumePermissionModifications) SetAdd(v []*CreateVolumePermission) *CreateVolumePermissionModifications { + s.Add = v + return s +} + +// SetRemove sets the Remove field's value. +func (s *CreateVolumePermissionModifications) SetRemove(v []*CreateVolumePermission) *CreateVolumePermissionModifications { + s.Remove = v + return s +} + +type CreateVpcEndpointConnectionNotificationInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // One or more endpoint events for which to receive notifications. Valid values + // are Accept, Connect, Delete, and Reject. + // + // ConnectionEvents is a required field + ConnectionEvents []*string `locationNameList:"item" type:"list" required:"true"` + + // The ARN of the SNS topic for the notifications. + // + // ConnectionNotificationArn is a required field + ConnectionNotificationArn *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the endpoint service. + ServiceId *string `type:"string"` + + // The ID of the endpoint. + VpcEndpointId *string `type:"string"` +} + +// String returns the string representation +func (s CreateVpcEndpointConnectionNotificationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcEndpointConnectionNotificationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateVpcEndpointConnectionNotificationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateVpcEndpointConnectionNotificationInput"} + if s.ConnectionEvents == nil { + invalidParams.Add(request.NewErrParamRequired("ConnectionEvents")) + } + if s.ConnectionNotificationArn == nil { + invalidParams.Add(request.NewErrParamRequired("ConnectionNotificationArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateVpcEndpointConnectionNotificationInput) SetClientToken(v string) *CreateVpcEndpointConnectionNotificationInput { + s.ClientToken = &v + return s +} + +// SetConnectionEvents sets the ConnectionEvents field's value. +func (s *CreateVpcEndpointConnectionNotificationInput) SetConnectionEvents(v []*string) *CreateVpcEndpointConnectionNotificationInput { + s.ConnectionEvents = v + return s +} + +// SetConnectionNotificationArn sets the ConnectionNotificationArn field's value. +func (s *CreateVpcEndpointConnectionNotificationInput) SetConnectionNotificationArn(v string) *CreateVpcEndpointConnectionNotificationInput { + s.ConnectionNotificationArn = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateVpcEndpointConnectionNotificationInput) SetDryRun(v bool) *CreateVpcEndpointConnectionNotificationInput { + s.DryRun = &v + return s +} + +// SetServiceId sets the ServiceId field's value. +func (s *CreateVpcEndpointConnectionNotificationInput) SetServiceId(v string) *CreateVpcEndpointConnectionNotificationInput { + s.ServiceId = &v + return s +} + +// SetVpcEndpointId sets the VpcEndpointId field's value. +func (s *CreateVpcEndpointConnectionNotificationInput) SetVpcEndpointId(v string) *CreateVpcEndpointConnectionNotificationInput { + s.VpcEndpointId = &v + return s +} + +type CreateVpcEndpointConnectionNotificationOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. + ClientToken *string `locationName:"clientToken" type:"string"` + + // Information about the notification. + ConnectionNotification *ConnectionNotification `locationName:"connectionNotification" type:"structure"` +} + +// String returns the string representation +func (s CreateVpcEndpointConnectionNotificationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcEndpointConnectionNotificationOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateVpcEndpointConnectionNotificationOutput) SetClientToken(v string) *CreateVpcEndpointConnectionNotificationOutput { + s.ClientToken = &v + return s +} + +// SetConnectionNotification sets the ConnectionNotification field's value. +func (s *CreateVpcEndpointConnectionNotificationOutput) SetConnectionNotification(v *ConnectionNotification) *CreateVpcEndpointConnectionNotificationOutput { + s.ConnectionNotification = v + return s +} + +// Contains the parameters for CreateVpcEndpoint. +type CreateVpcEndpointInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // A policy to attach to the endpoint that controls access to the service. The + // policy must be in valid JSON format. If this parameter is not specified, + // we attach a default policy that allows full access to the service. + PolicyDocument *string `type:"string"` + + // (Interface endpoint) Indicate whether to associate a private hosted zone + // with the specified VPC. The private hosted zone contains a record set for + // the default public DNS name for the service for the Region (for example, + // kinesis.us-east-1.amazonaws.com) which resolves to the private IP addresses + // of the endpoint network interfaces in the VPC. This enables you to make requests + // to the default public DNS name for the service instead of the public DNS + // names that are automatically generated by the VPC endpoint service. + // + // To use a private hosted zone, you must set the following VPC attributes to + // true: enableDnsHostnames and enableDnsSupport. Use ModifyVpcAttribute to + // set the VPC attributes. + // + // Default: true + PrivateDnsEnabled *bool `type:"boolean"` + + // (Gateway endpoint) One or more route table IDs. + RouteTableIds []*string `locationName:"RouteTableId" locationNameList:"item" type:"list"` + + // (Interface endpoint) The ID of one or more security groups to associate with + // the endpoint network interface. + SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"item" type:"list"` + + // The service name. To get a list of available services, use the DescribeVpcEndpointServices + // request, or get the name from the service provider. + // + // ServiceName is a required field + ServiceName *string `type:"string" required:"true"` + + // (Interface endpoint) The ID of one or more subnets in which to create an + // endpoint network interface. + SubnetIds []*string `locationName:"SubnetId" locationNameList:"item" type:"list"` + + // The type of endpoint. + // + // Default: Gateway + VpcEndpointType *string `type:"string" enum:"VpcEndpointType"` + + // The ID of the VPC in which the endpoint will be used. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateVpcEndpointInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcEndpointInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateVpcEndpointInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateVpcEndpointInput"} + if s.ServiceName == nil { + invalidParams.Add(request.NewErrParamRequired("ServiceName")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateVpcEndpointInput) SetClientToken(v string) *CreateVpcEndpointInput { + s.ClientToken = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateVpcEndpointInput) SetDryRun(v bool) *CreateVpcEndpointInput { + s.DryRun = &v + return s +} + +// SetPolicyDocument sets the PolicyDocument field's value. +func (s *CreateVpcEndpointInput) SetPolicyDocument(v string) *CreateVpcEndpointInput { + s.PolicyDocument = &v + return s +} + +// SetPrivateDnsEnabled sets the PrivateDnsEnabled field's value. +func (s *CreateVpcEndpointInput) SetPrivateDnsEnabled(v bool) *CreateVpcEndpointInput { + s.PrivateDnsEnabled = &v + return s +} + +// SetRouteTableIds sets the RouteTableIds field's value. +func (s *CreateVpcEndpointInput) SetRouteTableIds(v []*string) *CreateVpcEndpointInput { + s.RouteTableIds = v + return s +} + +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *CreateVpcEndpointInput) SetSecurityGroupIds(v []*string) *CreateVpcEndpointInput { + s.SecurityGroupIds = v + return s +} + +// SetServiceName sets the ServiceName field's value. +func (s *CreateVpcEndpointInput) SetServiceName(v string) *CreateVpcEndpointInput { + s.ServiceName = &v + return s +} + +// SetSubnetIds sets the SubnetIds field's value. +func (s *CreateVpcEndpointInput) SetSubnetIds(v []*string) *CreateVpcEndpointInput { + s.SubnetIds = v + return s +} + +// SetVpcEndpointType sets the VpcEndpointType field's value. +func (s *CreateVpcEndpointInput) SetVpcEndpointType(v string) *CreateVpcEndpointInput { + s.VpcEndpointType = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateVpcEndpointInput) SetVpcId(v string) *CreateVpcEndpointInput { + s.VpcId = &v + return s +} + +// Contains the output of CreateVpcEndpoint. +type CreateVpcEndpointOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. + ClientToken *string `locationName:"clientToken" type:"string"` + + // Information about the endpoint. + VpcEndpoint *VpcEndpoint `locationName:"vpcEndpoint" type:"structure"` +} + +// String returns the string representation +func (s CreateVpcEndpointOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcEndpointOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateVpcEndpointOutput) SetClientToken(v string) *CreateVpcEndpointOutput { + s.ClientToken = &v + return s +} + +// SetVpcEndpoint sets the VpcEndpoint field's value. +func (s *CreateVpcEndpointOutput) SetVpcEndpoint(v *VpcEndpoint) *CreateVpcEndpointOutput { + s.VpcEndpoint = v + return s +} + +type CreateVpcEndpointServiceConfigurationInput struct { + _ struct{} `type:"structure"` + + // Indicate whether requests from service consumers to create an endpoint to + // your service must be accepted. To accept a request, use AcceptVpcEndpointConnections. + AcceptanceRequired *bool `type:"boolean"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The Amazon Resource Names (ARNs) of one or more Network Load Balancers for + // your service. + // + // NetworkLoadBalancerArns is a required field + NetworkLoadBalancerArns []*string `locationName:"NetworkLoadBalancerArn" locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s CreateVpcEndpointServiceConfigurationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcEndpointServiceConfigurationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateVpcEndpointServiceConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateVpcEndpointServiceConfigurationInput"} + if s.NetworkLoadBalancerArns == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkLoadBalancerArns")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAcceptanceRequired sets the AcceptanceRequired field's value. +func (s *CreateVpcEndpointServiceConfigurationInput) SetAcceptanceRequired(v bool) *CreateVpcEndpointServiceConfigurationInput { + s.AcceptanceRequired = &v + return s +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateVpcEndpointServiceConfigurationInput) SetClientToken(v string) *CreateVpcEndpointServiceConfigurationInput { + s.ClientToken = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateVpcEndpointServiceConfigurationInput) SetDryRun(v bool) *CreateVpcEndpointServiceConfigurationInput { + s.DryRun = &v + return s +} + +// SetNetworkLoadBalancerArns sets the NetworkLoadBalancerArns field's value. +func (s *CreateVpcEndpointServiceConfigurationInput) SetNetworkLoadBalancerArns(v []*string) *CreateVpcEndpointServiceConfigurationInput { + s.NetworkLoadBalancerArns = v + return s +} + +type CreateVpcEndpointServiceConfigurationOutput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. + ClientToken *string `locationName:"clientToken" type:"string"` + + // Information about the service configuration. + ServiceConfiguration *ServiceConfiguration `locationName:"serviceConfiguration" type:"structure"` +} + +// String returns the string representation +func (s CreateVpcEndpointServiceConfigurationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcEndpointServiceConfigurationOutput) GoString() string { + return s.String() +} + +// SetClientToken sets the ClientToken field's value. +func (s *CreateVpcEndpointServiceConfigurationOutput) SetClientToken(v string) *CreateVpcEndpointServiceConfigurationOutput { + s.ClientToken = &v + return s +} + +// SetServiceConfiguration sets the ServiceConfiguration field's value. +func (s *CreateVpcEndpointServiceConfigurationOutput) SetServiceConfiguration(v *ServiceConfiguration) *CreateVpcEndpointServiceConfigurationOutput { + s.ServiceConfiguration = v + return s +} + +type CreateVpcInput struct { + _ struct{} `type:"structure"` + + // Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for + // the VPC. You cannot specify the range of IP addresses, or the size of the + // CIDR block. + AmazonProvidedIpv6CidrBlock *bool `locationName:"amazonProvidedIpv6CidrBlock" type:"boolean"` + + // The IPv4 network range for the VPC, in CIDR notation. For example, 10.0.0.0/16. + // + // CidrBlock is a required field + CidrBlock *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The tenancy options for instances launched into the VPC. For default, instances + // are launched with shared tenancy by default. You can launch instances with + // any tenancy into a shared tenancy VPC. For dedicated, instances are launched + // as dedicated tenancy instances by default. You can only launch instances + // with a tenancy of dedicated or host into a dedicated tenancy VPC. + // + // Important: The host value cannot be used with this parameter. Use the default + // or dedicated values only. + // + // Default: default + InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` +} + +// String returns the string representation +func (s CreateVpcInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateVpcInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateVpcInput"} + if s.CidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("CidrBlock")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAmazonProvidedIpv6CidrBlock sets the AmazonProvidedIpv6CidrBlock field's value. +func (s *CreateVpcInput) SetAmazonProvidedIpv6CidrBlock(v bool) *CreateVpcInput { + s.AmazonProvidedIpv6CidrBlock = &v + return s +} + +// SetCidrBlock sets the CidrBlock field's value. +func (s *CreateVpcInput) SetCidrBlock(v string) *CreateVpcInput { + s.CidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateVpcInput) SetDryRun(v bool) *CreateVpcInput { + s.DryRun = &v + return s +} + +// SetInstanceTenancy sets the InstanceTenancy field's value. +func (s *CreateVpcInput) SetInstanceTenancy(v string) *CreateVpcInput { + s.InstanceTenancy = &v + return s +} + +type CreateVpcOutput struct { + _ struct{} `type:"structure"` + + // Information about the VPC. + Vpc *Vpc `locationName:"vpc" type:"structure"` +} + +// String returns the string representation +func (s CreateVpcOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcOutput) GoString() string { + return s.String() +} + +// SetVpc sets the Vpc field's value. +func (s *CreateVpcOutput) SetVpc(v *Vpc) *CreateVpcOutput { + s.Vpc = v + return s +} + +type CreateVpcPeeringConnectionInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The AWS account ID of the owner of the accepter VPC. + // + // Default: Your AWS account ID + PeerOwnerId *string `locationName:"peerOwnerId" type:"string"` + + // The Region code for the accepter VPC, if the accepter VPC is located in a + // Region other than the Region in which you make the request. + // + // Default: The Region in which you make the request. + PeerRegion *string `type:"string"` + + // The ID of the VPC with which you are creating the VPC peering connection. + // You must specify this parameter in the request. + PeerVpcId *string `locationName:"peerVpcId" type:"string"` + + // The ID of the requester VPC. You must specify this parameter in the request. + VpcId *string `locationName:"vpcId" type:"string"` +} + +// String returns the string representation +func (s CreateVpcPeeringConnectionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcPeeringConnectionInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateVpcPeeringConnectionInput) SetDryRun(v bool) *CreateVpcPeeringConnectionInput { + s.DryRun = &v + return s +} + +// SetPeerOwnerId sets the PeerOwnerId field's value. +func (s *CreateVpcPeeringConnectionInput) SetPeerOwnerId(v string) *CreateVpcPeeringConnectionInput { + s.PeerOwnerId = &v + return s +} + +// SetPeerRegion sets the PeerRegion field's value. +func (s *CreateVpcPeeringConnectionInput) SetPeerRegion(v string) *CreateVpcPeeringConnectionInput { + s.PeerRegion = &v + return s +} + +// SetPeerVpcId sets the PeerVpcId field's value. +func (s *CreateVpcPeeringConnectionInput) SetPeerVpcId(v string) *CreateVpcPeeringConnectionInput { + s.PeerVpcId = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateVpcPeeringConnectionInput) SetVpcId(v string) *CreateVpcPeeringConnectionInput { + s.VpcId = &v + return s +} + +type CreateVpcPeeringConnectionOutput struct { + _ struct{} `type:"structure"` + + // Information about the VPC peering connection. + VpcPeeringConnection *VpcPeeringConnection `locationName:"vpcPeeringConnection" type:"structure"` +} + +// String returns the string representation +func (s CreateVpcPeeringConnectionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpcPeeringConnectionOutput) GoString() string { + return s.String() +} + +// SetVpcPeeringConnection sets the VpcPeeringConnection field's value. +func (s *CreateVpcPeeringConnectionOutput) SetVpcPeeringConnection(v *VpcPeeringConnection) *CreateVpcPeeringConnectionOutput { + s.VpcPeeringConnection = v + return s +} + +// Contains the parameters for CreateVpnConnection. +type CreateVpnConnectionInput struct { + _ struct{} `type:"structure"` + + // The ID of the customer gateway. + // + // CustomerGatewayId is a required field + CustomerGatewayId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The options for the VPN connection. + Options *VpnConnectionOptionsSpecification `locationName:"options" type:"structure"` + + // The ID of the transit gateway. If you specify a transit gateway, you cannot + // specify a virtual private gateway. + TransitGatewayId *string `type:"string"` + + // The type of VPN connection (ipsec.1). + // + // Type is a required field + Type *string `type:"string" required:"true"` + + // The ID of the virtual private gateway. If you specify a virtual private gateway, + // you cannot specify a transit gateway. + VpnGatewayId *string `type:"string"` +} + +// String returns the string representation +func (s CreateVpnConnectionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpnConnectionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateVpnConnectionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateVpnConnectionInput"} + if s.CustomerGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("CustomerGatewayId")) + } + if s.Type == nil { + invalidParams.Add(request.NewErrParamRequired("Type")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCustomerGatewayId sets the CustomerGatewayId field's value. +func (s *CreateVpnConnectionInput) SetCustomerGatewayId(v string) *CreateVpnConnectionInput { + s.CustomerGatewayId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateVpnConnectionInput) SetDryRun(v bool) *CreateVpnConnectionInput { + s.DryRun = &v + return s +} + +// SetOptions sets the Options field's value. +func (s *CreateVpnConnectionInput) SetOptions(v *VpnConnectionOptionsSpecification) *CreateVpnConnectionInput { + s.Options = v + return s +} + +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *CreateVpnConnectionInput) SetTransitGatewayId(v string) *CreateVpnConnectionInput { + s.TransitGatewayId = &v + return s +} + +// SetType sets the Type field's value. +func (s *CreateVpnConnectionInput) SetType(v string) *CreateVpnConnectionInput { + s.Type = &v + return s +} + +// SetVpnGatewayId sets the VpnGatewayId field's value. +func (s *CreateVpnConnectionInput) SetVpnGatewayId(v string) *CreateVpnConnectionInput { + s.VpnGatewayId = &v + return s +} + +// Contains the output of CreateVpnConnection. +type CreateVpnConnectionOutput struct { + _ struct{} `type:"structure"` + + // Information about the VPN connection. + VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` +} + +// String returns the string representation +func (s CreateVpnConnectionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpnConnectionOutput) GoString() string { + return s.String() +} + +// SetVpnConnection sets the VpnConnection field's value. +func (s *CreateVpnConnectionOutput) SetVpnConnection(v *VpnConnection) *CreateVpnConnectionOutput { + s.VpnConnection = v + return s +} + +// Contains the parameters for CreateVpnConnectionRoute. +type CreateVpnConnectionRouteInput struct { + _ struct{} `type:"structure"` + + // The CIDR block associated with the local subnet of the customer network. + // + // DestinationCidrBlock is a required field + DestinationCidrBlock *string `type:"string" required:"true"` + + // The ID of the VPN connection. + // + // VpnConnectionId is a required field + VpnConnectionId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateVpnConnectionRouteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpnConnectionRouteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateVpnConnectionRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateVpnConnectionRouteInput"} + if s.DestinationCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) + } + if s.VpnConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *CreateVpnConnectionRouteInput) SetDestinationCidrBlock(v string) *CreateVpnConnectionRouteInput { + s.DestinationCidrBlock = &v + return s +} + +// SetVpnConnectionId sets the VpnConnectionId field's value. +func (s *CreateVpnConnectionRouteInput) SetVpnConnectionId(v string) *CreateVpnConnectionRouteInput { + s.VpnConnectionId = &v + return s +} + +type CreateVpnConnectionRouteOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s CreateVpnConnectionRouteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpnConnectionRouteOutput) GoString() string { + return s.String() +} + +// Contains the parameters for CreateVpnGateway. +type CreateVpnGatewayInput struct { + _ struct{} `type:"structure"` + + // A private Autonomous System Number (ASN) for the Amazon side of a BGP session. + // If you're using a 16-bit ASN, it must be in the 64512 to 65534 range. If + // you're using a 32-bit ASN, it must be in the 4200000000 to 4294967294 range. + // + // Default: 64512 + AmazonSideAsn *int64 `type:"long"` + + // The Availability Zone for the virtual private gateway. + AvailabilityZone *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The type of VPN connection this virtual private gateway supports. + // + // Type is a required field + Type *string `type:"string" required:"true" enum:"GatewayType"` +} + +// String returns the string representation +func (s CreateVpnGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpnGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateVpnGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateVpnGatewayInput"} + if s.Type == nil { + invalidParams.Add(request.NewErrParamRequired("Type")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAmazonSideAsn sets the AmazonSideAsn field's value. +func (s *CreateVpnGatewayInput) SetAmazonSideAsn(v int64) *CreateVpnGatewayInput { + s.AmazonSideAsn = &v + return s +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *CreateVpnGatewayInput) SetAvailabilityZone(v string) *CreateVpnGatewayInput { + s.AvailabilityZone = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *CreateVpnGatewayInput) SetDryRun(v bool) *CreateVpnGatewayInput { + s.DryRun = &v + return s +} + +// SetType sets the Type field's value. +func (s *CreateVpnGatewayInput) SetType(v string) *CreateVpnGatewayInput { + s.Type = &v + return s +} + +// Contains the output of CreateVpnGateway. +type CreateVpnGatewayOutput struct { + _ struct{} `type:"structure"` + + // Information about the virtual private gateway. + VpnGateway *VpnGateway `locationName:"vpnGateway" type:"structure"` +} + +// String returns the string representation +func (s CreateVpnGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateVpnGatewayOutput) GoString() string { + return s.String() +} + +// SetVpnGateway sets the VpnGateway field's value. +func (s *CreateVpnGatewayOutput) SetVpnGateway(v *VpnGateway) *CreateVpnGatewayOutput { + s.VpnGateway = v + return s +} + +// Describes the credit option for CPU usage of a T2 or T3 instance. +type CreditSpecification struct { + _ struct{} `type:"structure"` + + // The credit option for CPU usage of a T2 or T3 instance. Valid values are + // standard and unlimited. + CpuCredits *string `locationName:"cpuCredits" type:"string"` +} + +// String returns the string representation +func (s CreditSpecification) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreditSpecification) GoString() string { + return s.String() +} + +// SetCpuCredits sets the CpuCredits field's value. +func (s *CreditSpecification) SetCpuCredits(v string) *CreditSpecification { + s.CpuCredits = &v + return s +} + +// The credit option for CPU usage of a T2 or T3 instance. +type CreditSpecificationRequest struct { + _ struct{} `type:"structure"` + + // The credit option for CPU usage of a T2 or T3 instance. Valid values are + // standard and unlimited. + // + // CpuCredits is a required field + CpuCredits *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreditSpecificationRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreditSpecificationRequest) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreditSpecificationRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreditSpecificationRequest"} + if s.CpuCredits == nil { + invalidParams.Add(request.NewErrParamRequired("CpuCredits")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCpuCredits sets the CpuCredits field's value. +func (s *CreditSpecificationRequest) SetCpuCredits(v string) *CreditSpecificationRequest { + s.CpuCredits = &v + return s +} + +// Describes a customer gateway. +type CustomerGateway struct { + _ struct{} `type:"structure"` + + // The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number + // (ASN). + BgpAsn *string `locationName:"bgpAsn" type:"string"` + + // The Amazon Resource Name (ARN) for the customer gateway certificate. + CertificateArn *string `locationName:"certificateArn" type:"string"` + + // The ID of the customer gateway. + CustomerGatewayId *string `locationName:"customerGatewayId" type:"string"` + + // The name of customer gateway device. + DeviceName *string `locationName:"deviceName" type:"string"` + + // The Internet-routable IP address of the customer gateway's outside interface. + IpAddress *string `locationName:"ipAddress" type:"string"` + + // The current state of the customer gateway (pending | available | deleting + // | deleted). + State *string `locationName:"state" type:"string"` + + // Any tags assigned to the customer gateway. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The type of VPN connection the customer gateway supports (ipsec.1). + Type *string `locationName:"type" type:"string"` +} + +// String returns the string representation +func (s CustomerGateway) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CustomerGateway) GoString() string { + return s.String() +} + +// SetBgpAsn sets the BgpAsn field's value. +func (s *CustomerGateway) SetBgpAsn(v string) *CustomerGateway { + s.BgpAsn = &v + return s +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *CustomerGateway) SetCertificateArn(v string) *CustomerGateway { + s.CertificateArn = &v + return s +} + +// SetCustomerGatewayId sets the CustomerGatewayId field's value. +func (s *CustomerGateway) SetCustomerGatewayId(v string) *CustomerGateway { + s.CustomerGatewayId = &v + return s +} + +// SetDeviceName sets the DeviceName field's value. +func (s *CustomerGateway) SetDeviceName(v string) *CustomerGateway { + s.DeviceName = &v + return s +} + +// SetIpAddress sets the IpAddress field's value. +func (s *CustomerGateway) SetIpAddress(v string) *CustomerGateway { + s.IpAddress = &v + return s +} + +// SetState sets the State field's value. +func (s *CustomerGateway) SetState(v string) *CustomerGateway { + s.State = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *CustomerGateway) SetTags(v []*Tag) *CustomerGateway { + s.Tags = v + return s +} + +// SetType sets the Type field's value. +func (s *CustomerGateway) SetType(v string) *CustomerGateway { + s.Type = &v + return s +} + +type DeleteClientVpnEndpointInput struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN to be deleted. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s DeleteClientVpnEndpointInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteClientVpnEndpointInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteClientVpnEndpointInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteClientVpnEndpointInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *DeleteClientVpnEndpointInput) SetClientVpnEndpointId(v string) *DeleteClientVpnEndpointInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteClientVpnEndpointInput) SetDryRun(v bool) *DeleteClientVpnEndpointInput { + s.DryRun = &v + return s +} + +type DeleteClientVpnEndpointOutput struct { + _ struct{} `type:"structure"` + + // The current state of the Client VPN endpoint. + Status *ClientVpnEndpointStatus `locationName:"status" type:"structure"` +} + +// String returns the string representation +func (s DeleteClientVpnEndpointOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteClientVpnEndpointOutput) GoString() string { + return s.String() +} + +// SetStatus sets the Status field's value. +func (s *DeleteClientVpnEndpointOutput) SetStatus(v *ClientVpnEndpointStatus) *DeleteClientVpnEndpointOutput { + s.Status = v + return s +} + +type DeleteClientVpnRouteInput struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN endpoint from which the route is to be deleted. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // The IPv4 address range, in CIDR notation, of the route to be deleted. + // + // DestinationCidrBlock is a required field + DestinationCidrBlock *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the target subnet used by the route. + TargetVpcSubnetId *string `type:"string"` +} + +// String returns the string representation +func (s DeleteClientVpnRouteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteClientVpnRouteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteClientVpnRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteClientVpnRouteInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.DestinationCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *DeleteClientVpnRouteInput) SetClientVpnEndpointId(v string) *DeleteClientVpnRouteInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *DeleteClientVpnRouteInput) SetDestinationCidrBlock(v string) *DeleteClientVpnRouteInput { + s.DestinationCidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteClientVpnRouteInput) SetDryRun(v bool) *DeleteClientVpnRouteInput { + s.DryRun = &v + return s +} + +// SetTargetVpcSubnetId sets the TargetVpcSubnetId field's value. +func (s *DeleteClientVpnRouteInput) SetTargetVpcSubnetId(v string) *DeleteClientVpnRouteInput { + s.TargetVpcSubnetId = &v + return s +} + +type DeleteClientVpnRouteOutput struct { + _ struct{} `type:"structure"` + + // The current state of the route. + Status *ClientVpnRouteStatus `locationName:"status" type:"structure"` +} + +// String returns the string representation +func (s DeleteClientVpnRouteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteClientVpnRouteOutput) GoString() string { + return s.String() +} + +// SetStatus sets the Status field's value. +func (s *DeleteClientVpnRouteOutput) SetStatus(v *ClientVpnRouteStatus) *DeleteClientVpnRouteOutput { + s.Status = v + return s +} + +// Contains the parameters for DeleteCustomerGateway. +type DeleteCustomerGatewayInput struct { + _ struct{} `type:"structure"` + + // The ID of the customer gateway. + // + // CustomerGatewayId is a required field + CustomerGatewayId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s DeleteCustomerGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteCustomerGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteCustomerGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteCustomerGatewayInput"} + if s.CustomerGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("CustomerGatewayId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCustomerGatewayId sets the CustomerGatewayId field's value. +func (s *DeleteCustomerGatewayInput) SetCustomerGatewayId(v string) *DeleteCustomerGatewayInput { + s.CustomerGatewayId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteCustomerGatewayInput) SetDryRun(v bool) *DeleteCustomerGatewayInput { + s.DryRun = &v + return s +} + +type DeleteCustomerGatewayOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteCustomerGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteCustomerGatewayOutput) GoString() string { + return s.String() +} + +type DeleteDhcpOptionsInput struct { + _ struct{} `type:"structure"` + + // The ID of the DHCP options set. + // + // DhcpOptionsId is a required field + DhcpOptionsId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s DeleteDhcpOptionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteDhcpOptionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteDhcpOptionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteDhcpOptionsInput"} + if s.DhcpOptionsId == nil { + invalidParams.Add(request.NewErrParamRequired("DhcpOptionsId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDhcpOptionsId sets the DhcpOptionsId field's value. +func (s *DeleteDhcpOptionsInput) SetDhcpOptionsId(v string) *DeleteDhcpOptionsInput { + s.DhcpOptionsId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteDhcpOptionsInput) SetDryRun(v bool) *DeleteDhcpOptionsInput { + s.DryRun = &v + return s +} + +type DeleteDhcpOptionsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteDhcpOptionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteDhcpOptionsOutput) GoString() string { + return s.String() +} + +type DeleteEgressOnlyInternetGatewayInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the egress-only internet gateway. + // + // EgressOnlyInternetGatewayId is a required field + EgressOnlyInternetGatewayId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteEgressOnlyInternetGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteEgressOnlyInternetGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteEgressOnlyInternetGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteEgressOnlyInternetGatewayInput"} + if s.EgressOnlyInternetGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("EgressOnlyInternetGatewayId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteEgressOnlyInternetGatewayInput) SetDryRun(v bool) *DeleteEgressOnlyInternetGatewayInput { + s.DryRun = &v + return s +} + +// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. +func (s *DeleteEgressOnlyInternetGatewayInput) SetEgressOnlyInternetGatewayId(v string) *DeleteEgressOnlyInternetGatewayInput { + s.EgressOnlyInternetGatewayId = &v + return s +} + +type DeleteEgressOnlyInternetGatewayOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + ReturnCode *bool `locationName:"returnCode" type:"boolean"` +} + +// String returns the string representation +func (s DeleteEgressOnlyInternetGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteEgressOnlyInternetGatewayOutput) GoString() string { + return s.String() +} + +// SetReturnCode sets the ReturnCode field's value. +func (s *DeleteEgressOnlyInternetGatewayOutput) SetReturnCode(v bool) *DeleteEgressOnlyInternetGatewayOutput { + s.ReturnCode = &v + return s +} + +// Describes an EC2 Fleet error. +type DeleteFleetError struct { + _ struct{} `type:"structure"` + + // The error code. + Code *string `locationName:"code" type:"string" enum:"DeleteFleetErrorCode"` + + // The description for the error code. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s DeleteFleetError) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFleetError) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *DeleteFleetError) SetCode(v string) *DeleteFleetError { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *DeleteFleetError) SetMessage(v string) *DeleteFleetError { + s.Message = &v + return s +} + +// Describes an EC2 Fleet that was not successfully deleted. +type DeleteFleetErrorItem struct { + _ struct{} `type:"structure"` + + // The error. + Error *DeleteFleetError `locationName:"error" type:"structure"` + + // The ID of the EC2 Fleet. + FleetId *string `locationName:"fleetId" type:"string"` +} + +// String returns the string representation +func (s DeleteFleetErrorItem) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFleetErrorItem) GoString() string { + return s.String() +} + +// SetError sets the Error field's value. +func (s *DeleteFleetErrorItem) SetError(v *DeleteFleetError) *DeleteFleetErrorItem { + s.Error = v + return s +} + +// SetFleetId sets the FleetId field's value. +func (s *DeleteFleetErrorItem) SetFleetId(v string) *DeleteFleetErrorItem { + s.FleetId = &v + return s +} + +// Describes an EC2 Fleet that was successfully deleted. +type DeleteFleetSuccessItem struct { + _ struct{} `type:"structure"` + + // The current state of the EC2 Fleet. + CurrentFleetState *string `locationName:"currentFleetState" type:"string" enum:"FleetStateCode"` + + // The ID of the EC2 Fleet. + FleetId *string `locationName:"fleetId" type:"string"` + + // The previous state of the EC2 Fleet. + PreviousFleetState *string `locationName:"previousFleetState" type:"string" enum:"FleetStateCode"` +} + +// String returns the string representation +func (s DeleteFleetSuccessItem) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFleetSuccessItem) GoString() string { + return s.String() +} + +// SetCurrentFleetState sets the CurrentFleetState field's value. +func (s *DeleteFleetSuccessItem) SetCurrentFleetState(v string) *DeleteFleetSuccessItem { + s.CurrentFleetState = &v + return s +} + +// SetFleetId sets the FleetId field's value. +func (s *DeleteFleetSuccessItem) SetFleetId(v string) *DeleteFleetSuccessItem { + s.FleetId = &v + return s +} + +// SetPreviousFleetState sets the PreviousFleetState field's value. +func (s *DeleteFleetSuccessItem) SetPreviousFleetState(v string) *DeleteFleetSuccessItem { + s.PreviousFleetState = &v + return s +} + +type DeleteFleetsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IDs of the EC2 Fleets. + // + // FleetIds is a required field + FleetIds []*string `locationName:"FleetId" type:"list" required:"true"` + + // Indicates whether to terminate instances for an EC2 Fleet if it is deleted + // successfully. + // + // TerminateInstances is a required field + TerminateInstances *bool `type:"boolean" required:"true"` +} + +// String returns the string representation +func (s DeleteFleetsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFleetsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteFleetsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteFleetsInput"} + if s.FleetIds == nil { + invalidParams.Add(request.NewErrParamRequired("FleetIds")) + } + if s.TerminateInstances == nil { + invalidParams.Add(request.NewErrParamRequired("TerminateInstances")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteFleetsInput) SetDryRun(v bool) *DeleteFleetsInput { + s.DryRun = &v + return s +} + +// SetFleetIds sets the FleetIds field's value. +func (s *DeleteFleetsInput) SetFleetIds(v []*string) *DeleteFleetsInput { + s.FleetIds = v + return s +} + +// SetTerminateInstances sets the TerminateInstances field's value. +func (s *DeleteFleetsInput) SetTerminateInstances(v bool) *DeleteFleetsInput { + s.TerminateInstances = &v + return s +} + +type DeleteFleetsOutput struct { + _ struct{} `type:"structure"` + + // Information about the EC2 Fleets that are successfully deleted. + SuccessfulFleetDeletions []*DeleteFleetSuccessItem `locationName:"successfulFleetDeletionSet" locationNameList:"item" type:"list"` + + // Information about the EC2 Fleets that are not successfully deleted. + UnsuccessfulFleetDeletions []*DeleteFleetErrorItem `locationName:"unsuccessfulFleetDeletionSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DeleteFleetsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFleetsOutput) GoString() string { + return s.String() +} + +// SetSuccessfulFleetDeletions sets the SuccessfulFleetDeletions field's value. +func (s *DeleteFleetsOutput) SetSuccessfulFleetDeletions(v []*DeleteFleetSuccessItem) *DeleteFleetsOutput { + s.SuccessfulFleetDeletions = v + return s +} + +// SetUnsuccessfulFleetDeletions sets the UnsuccessfulFleetDeletions field's value. +func (s *DeleteFleetsOutput) SetUnsuccessfulFleetDeletions(v []*DeleteFleetErrorItem) *DeleteFleetsOutput { + s.UnsuccessfulFleetDeletions = v + return s +} + +type DeleteFlowLogsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more flow log IDs. + // + // Constraint: Maximum of 1000 flow log IDs. + // + // FlowLogIds is a required field + FlowLogIds []*string `locationName:"FlowLogId" locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s DeleteFlowLogsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFlowLogsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteFlowLogsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteFlowLogsInput"} + if s.FlowLogIds == nil { + invalidParams.Add(request.NewErrParamRequired("FlowLogIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteFlowLogsInput) SetDryRun(v bool) *DeleteFlowLogsInput { + s.DryRun = &v + return s +} + +// SetFlowLogIds sets the FlowLogIds field's value. +func (s *DeleteFlowLogsInput) SetFlowLogIds(v []*string) *DeleteFlowLogsInput { + s.FlowLogIds = v + return s +} + +type DeleteFlowLogsOutput struct { + _ struct{} `type:"structure"` + + // Information about the flow logs that could not be deleted successfully. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DeleteFlowLogsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFlowLogsOutput) GoString() string { + return s.String() +} + +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *DeleteFlowLogsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteFlowLogsOutput { + s.Unsuccessful = v + return s +} + +type DeleteFpgaImageInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the AFI. + // + // FpgaImageId is a required field + FpgaImageId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteFpgaImageInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFpgaImageInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteFpgaImageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteFpgaImageInput"} + if s.FpgaImageId == nil { + invalidParams.Add(request.NewErrParamRequired("FpgaImageId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteFpgaImageInput) SetDryRun(v bool) *DeleteFpgaImageInput { + s.DryRun = &v + return s +} + +// SetFpgaImageId sets the FpgaImageId field's value. +func (s *DeleteFpgaImageInput) SetFpgaImageId(v string) *DeleteFpgaImageInput { + s.FpgaImageId = &v + return s +} + +type DeleteFpgaImageOutput struct { + _ struct{} `type:"structure"` + + // Is true if the request succeeds, and an error otherwise. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s DeleteFpgaImageOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteFpgaImageOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *DeleteFpgaImageOutput) SetReturn(v bool) *DeleteFpgaImageOutput { + s.Return = &v + return s +} + +type DeleteInternetGatewayInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the internet gateway. + // + // InternetGatewayId is a required field + InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteInternetGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteInternetGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteInternetGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteInternetGatewayInput"} + if s.InternetGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteInternetGatewayInput) SetDryRun(v bool) *DeleteInternetGatewayInput { + s.DryRun = &v + return s +} + +// SetInternetGatewayId sets the InternetGatewayId field's value. +func (s *DeleteInternetGatewayInput) SetInternetGatewayId(v string) *DeleteInternetGatewayInput { + s.InternetGatewayId = &v + return s +} + +type DeleteInternetGatewayOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteInternetGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteInternetGatewayOutput) GoString() string { + return s.String() +} + +type DeleteKeyPairInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The name of the key pair. + // + // KeyName is a required field + KeyName *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteKeyPairInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteKeyPairInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteKeyPairInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteKeyPairInput"} + if s.KeyName == nil { + invalidParams.Add(request.NewErrParamRequired("KeyName")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteKeyPairInput) SetDryRun(v bool) *DeleteKeyPairInput { + s.DryRun = &v + return s +} + +// SetKeyName sets the KeyName field's value. +func (s *DeleteKeyPairInput) SetKeyName(v string) *DeleteKeyPairInput { + s.KeyName = &v + return s +} + +type DeleteKeyPairOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteKeyPairOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteKeyPairOutput) GoString() string { + return s.String() +} + +type DeleteLaunchTemplateInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateId *string `type:"string"` + + // The name of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateName *string `min:"3" type:"string"` +} + +// String returns the string representation +func (s DeleteLaunchTemplateInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLaunchTemplateInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteLaunchTemplateInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteLaunchTemplateInput"} + if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { + invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteLaunchTemplateInput) SetDryRun(v bool) *DeleteLaunchTemplateInput { + s.DryRun = &v + return s +} + +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *DeleteLaunchTemplateInput) SetLaunchTemplateId(v string) *DeleteLaunchTemplateInput { + s.LaunchTemplateId = &v + return s +} + +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *DeleteLaunchTemplateInput) SetLaunchTemplateName(v string) *DeleteLaunchTemplateInput { + s.LaunchTemplateName = &v + return s +} + +type DeleteLaunchTemplateOutput struct { + _ struct{} `type:"structure"` + + // Information about the launch template. + LaunchTemplate *LaunchTemplate `locationName:"launchTemplate" type:"structure"` +} + +// String returns the string representation +func (s DeleteLaunchTemplateOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLaunchTemplateOutput) GoString() string { + return s.String() +} + +// SetLaunchTemplate sets the LaunchTemplate field's value. +func (s *DeleteLaunchTemplateOutput) SetLaunchTemplate(v *LaunchTemplate) *DeleteLaunchTemplateOutput { + s.LaunchTemplate = v + return s +} + +type DeleteLaunchTemplateVersionsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateId *string `type:"string"` + + // The name of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateName *string `min:"3" type:"string"` + + // The version numbers of one or more launch template versions to delete. + // + // Versions is a required field + Versions []*string `locationName:"LaunchTemplateVersion" locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s DeleteLaunchTemplateVersionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLaunchTemplateVersionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteLaunchTemplateVersionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteLaunchTemplateVersionsInput"} + if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { + invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) + } + if s.Versions == nil { + invalidParams.Add(request.NewErrParamRequired("Versions")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteLaunchTemplateVersionsInput) SetDryRun(v bool) *DeleteLaunchTemplateVersionsInput { + s.DryRun = &v + return s +} + +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *DeleteLaunchTemplateVersionsInput) SetLaunchTemplateId(v string) *DeleteLaunchTemplateVersionsInput { + s.LaunchTemplateId = &v + return s +} + +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *DeleteLaunchTemplateVersionsInput) SetLaunchTemplateName(v string) *DeleteLaunchTemplateVersionsInput { + s.LaunchTemplateName = &v + return s +} + +// SetVersions sets the Versions field's value. +func (s *DeleteLaunchTemplateVersionsInput) SetVersions(v []*string) *DeleteLaunchTemplateVersionsInput { + s.Versions = v + return s +} + +type DeleteLaunchTemplateVersionsOutput struct { + _ struct{} `type:"structure"` + + // Information about the launch template versions that were successfully deleted. + SuccessfullyDeletedLaunchTemplateVersions []*DeleteLaunchTemplateVersionsResponseSuccessItem `locationName:"successfullyDeletedLaunchTemplateVersionSet" locationNameList:"item" type:"list"` + + // Information about the launch template versions that could not be deleted. + UnsuccessfullyDeletedLaunchTemplateVersions []*DeleteLaunchTemplateVersionsResponseErrorItem `locationName:"unsuccessfullyDeletedLaunchTemplateVersionSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DeleteLaunchTemplateVersionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLaunchTemplateVersionsOutput) GoString() string { + return s.String() +} + +// SetSuccessfullyDeletedLaunchTemplateVersions sets the SuccessfullyDeletedLaunchTemplateVersions field's value. +func (s *DeleteLaunchTemplateVersionsOutput) SetSuccessfullyDeletedLaunchTemplateVersions(v []*DeleteLaunchTemplateVersionsResponseSuccessItem) *DeleteLaunchTemplateVersionsOutput { + s.SuccessfullyDeletedLaunchTemplateVersions = v + return s +} + +// SetUnsuccessfullyDeletedLaunchTemplateVersions sets the UnsuccessfullyDeletedLaunchTemplateVersions field's value. +func (s *DeleteLaunchTemplateVersionsOutput) SetUnsuccessfullyDeletedLaunchTemplateVersions(v []*DeleteLaunchTemplateVersionsResponseErrorItem) *DeleteLaunchTemplateVersionsOutput { + s.UnsuccessfullyDeletedLaunchTemplateVersions = v + return s +} + +// Describes a launch template version that could not be deleted. +type DeleteLaunchTemplateVersionsResponseErrorItem struct { + _ struct{} `type:"structure"` + + // The ID of the launch template. + LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` + + // The name of the launch template. + LaunchTemplateName *string `locationName:"launchTemplateName" type:"string"` + + // Information about the error. + ResponseError *ResponseError `locationName:"responseError" type:"structure"` + + // The version number of the launch template. + VersionNumber *int64 `locationName:"versionNumber" type:"long"` +} + +// String returns the string representation +func (s DeleteLaunchTemplateVersionsResponseErrorItem) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLaunchTemplateVersionsResponseErrorItem) GoString() string { + return s.String() +} + +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *DeleteLaunchTemplateVersionsResponseErrorItem) SetLaunchTemplateId(v string) *DeleteLaunchTemplateVersionsResponseErrorItem { + s.LaunchTemplateId = &v + return s +} + +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *DeleteLaunchTemplateVersionsResponseErrorItem) SetLaunchTemplateName(v string) *DeleteLaunchTemplateVersionsResponseErrorItem { + s.LaunchTemplateName = &v + return s +} + +// SetResponseError sets the ResponseError field's value. +func (s *DeleteLaunchTemplateVersionsResponseErrorItem) SetResponseError(v *ResponseError) *DeleteLaunchTemplateVersionsResponseErrorItem { + s.ResponseError = v + return s +} + +// SetVersionNumber sets the VersionNumber field's value. +func (s *DeleteLaunchTemplateVersionsResponseErrorItem) SetVersionNumber(v int64) *DeleteLaunchTemplateVersionsResponseErrorItem { + s.VersionNumber = &v + return s +} + +// Describes a launch template version that was successfully deleted. +type DeleteLaunchTemplateVersionsResponseSuccessItem struct { + _ struct{} `type:"structure"` + + // The ID of the launch template. + LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` + + // The name of the launch template. + LaunchTemplateName *string `locationName:"launchTemplateName" type:"string"` + + // The version number of the launch template. + VersionNumber *int64 `locationName:"versionNumber" type:"long"` +} + +// String returns the string representation +func (s DeleteLaunchTemplateVersionsResponseSuccessItem) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLaunchTemplateVersionsResponseSuccessItem) GoString() string { + return s.String() +} + +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *DeleteLaunchTemplateVersionsResponseSuccessItem) SetLaunchTemplateId(v string) *DeleteLaunchTemplateVersionsResponseSuccessItem { + s.LaunchTemplateId = &v + return s +} + +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *DeleteLaunchTemplateVersionsResponseSuccessItem) SetLaunchTemplateName(v string) *DeleteLaunchTemplateVersionsResponseSuccessItem { + s.LaunchTemplateName = &v + return s +} + +// SetVersionNumber sets the VersionNumber field's value. +func (s *DeleteLaunchTemplateVersionsResponseSuccessItem) SetVersionNumber(v int64) *DeleteLaunchTemplateVersionsResponseSuccessItem { + s.VersionNumber = &v + return s +} + +type DeleteNatGatewayInput struct { + _ struct{} `type:"structure"` + + // The ID of the NAT gateway. + // + // NatGatewayId is a required field + NatGatewayId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteNatGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNatGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteNatGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteNatGatewayInput"} + if s.NatGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("NatGatewayId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetNatGatewayId sets the NatGatewayId field's value. +func (s *DeleteNatGatewayInput) SetNatGatewayId(v string) *DeleteNatGatewayInput { + s.NatGatewayId = &v + return s +} + +type DeleteNatGatewayOutput struct { + _ struct{} `type:"structure"` + + // The ID of the NAT gateway. + NatGatewayId *string `locationName:"natGatewayId" type:"string"` +} + +// String returns the string representation +func (s DeleteNatGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNatGatewayOutput) GoString() string { + return s.String() +} + +// SetNatGatewayId sets the NatGatewayId field's value. +func (s *DeleteNatGatewayOutput) SetNatGatewayId(v string) *DeleteNatGatewayOutput { + s.NatGatewayId = &v + return s +} + +type DeleteNetworkAclEntryInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // Indicates whether the rule is an egress rule. + // + // Egress is a required field + Egress *bool `locationName:"egress" type:"boolean" required:"true"` + + // The ID of the network ACL. + // + // NetworkAclId is a required field + NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` + + // The rule number of the entry to delete. + // + // RuleNumber is a required field + RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` +} + +// String returns the string representation +func (s DeleteNetworkAclEntryInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNetworkAclEntryInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteNetworkAclEntryInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkAclEntryInput"} + if s.Egress == nil { + invalidParams.Add(request.NewErrParamRequired("Egress")) + } + if s.NetworkAclId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) + } + if s.RuleNumber == nil { + invalidParams.Add(request.NewErrParamRequired("RuleNumber")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteNetworkAclEntryInput) SetDryRun(v bool) *DeleteNetworkAclEntryInput { + s.DryRun = &v + return s +} + +// SetEgress sets the Egress field's value. +func (s *DeleteNetworkAclEntryInput) SetEgress(v bool) *DeleteNetworkAclEntryInput { + s.Egress = &v + return s +} + +// SetNetworkAclId sets the NetworkAclId field's value. +func (s *DeleteNetworkAclEntryInput) SetNetworkAclId(v string) *DeleteNetworkAclEntryInput { + s.NetworkAclId = &v + return s +} + +// SetRuleNumber sets the RuleNumber field's value. +func (s *DeleteNetworkAclEntryInput) SetRuleNumber(v int64) *DeleteNetworkAclEntryInput { + s.RuleNumber = &v + return s +} + +type DeleteNetworkAclEntryOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteNetworkAclEntryOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNetworkAclEntryOutput) GoString() string { + return s.String() +} + +type DeleteNetworkAclInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the network ACL. + // + // NetworkAclId is a required field + NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteNetworkAclInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNetworkAclInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteNetworkAclInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkAclInput"} + if s.NetworkAclId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteNetworkAclInput) SetDryRun(v bool) *DeleteNetworkAclInput { + s.DryRun = &v + return s +} + +// SetNetworkAclId sets the NetworkAclId field's value. +func (s *DeleteNetworkAclInput) SetNetworkAclId(v string) *DeleteNetworkAclInput { + s.NetworkAclId = &v + return s +} + +type DeleteNetworkAclOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteNetworkAclOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNetworkAclOutput) GoString() string { + return s.String() +} + +// Contains the parameters for DeleteNetworkInterface. +type DeleteNetworkInterfaceInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the network interface. + // + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteNetworkInterfaceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNetworkInterfaceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteNetworkInterfaceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkInterfaceInput"} + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteNetworkInterfaceInput) SetDryRun(v bool) *DeleteNetworkInterfaceInput { + s.DryRun = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *DeleteNetworkInterfaceInput) SetNetworkInterfaceId(v string) *DeleteNetworkInterfaceInput { + s.NetworkInterfaceId = &v + return s +} + +type DeleteNetworkInterfaceOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteNetworkInterfaceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNetworkInterfaceOutput) GoString() string { + return s.String() +} + +// Contains the parameters for DeleteNetworkInterfacePermission. +type DeleteNetworkInterfacePermissionInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // Specify true to remove the permission even if the network interface is attached + // to an instance. + Force *bool `type:"boolean"` + + // The ID of the network interface permission. + // + // NetworkInterfacePermissionId is a required field + NetworkInterfacePermissionId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteNetworkInterfacePermissionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNetworkInterfacePermissionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteNetworkInterfacePermissionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkInterfacePermissionInput"} + if s.NetworkInterfacePermissionId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfacePermissionId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteNetworkInterfacePermissionInput) SetDryRun(v bool) *DeleteNetworkInterfacePermissionInput { + s.DryRun = &v + return s +} + +// SetForce sets the Force field's value. +func (s *DeleteNetworkInterfacePermissionInput) SetForce(v bool) *DeleteNetworkInterfacePermissionInput { + s.Force = &v + return s +} + +// SetNetworkInterfacePermissionId sets the NetworkInterfacePermissionId field's value. +func (s *DeleteNetworkInterfacePermissionInput) SetNetworkInterfacePermissionId(v string) *DeleteNetworkInterfacePermissionInput { + s.NetworkInterfacePermissionId = &v + return s +} + +// Contains the output for DeleteNetworkInterfacePermission. +type DeleteNetworkInterfacePermissionOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds, otherwise returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s DeleteNetworkInterfacePermissionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteNetworkInterfacePermissionOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *DeleteNetworkInterfacePermissionOutput) SetReturn(v bool) *DeleteNetworkInterfacePermissionOutput { + s.Return = &v + return s +} + +type DeletePlacementGroupInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The name of the placement group. + // + // GroupName is a required field + GroupName *string `locationName:"groupName" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeletePlacementGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeletePlacementGroupInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeletePlacementGroupInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeletePlacementGroupInput"} + if s.GroupName == nil { + invalidParams.Add(request.NewErrParamRequired("GroupName")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeletePlacementGroupInput) SetDryRun(v bool) *DeletePlacementGroupInput { + s.DryRun = &v + return s +} + +// SetGroupName sets the GroupName field's value. +func (s *DeletePlacementGroupInput) SetGroupName(v string) *DeletePlacementGroupInput { + s.GroupName = &v + return s +} + +type DeletePlacementGroupOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeletePlacementGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeletePlacementGroupOutput) GoString() string { + return s.String() +} + +// Describes the error for a Reserved Instance whose queued purchase could not +// be deleted. +type DeleteQueuedReservedInstancesError struct { + _ struct{} `type:"structure"` + + // The error code. + Code *string `locationName:"code" type:"string" enum:"DeleteQueuedReservedInstancesErrorCode"` + + // The error message. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s DeleteQueuedReservedInstancesError) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteQueuedReservedInstancesError) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *DeleteQueuedReservedInstancesError) SetCode(v string) *DeleteQueuedReservedInstancesError { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *DeleteQueuedReservedInstancesError) SetMessage(v string) *DeleteQueuedReservedInstancesError { + s.Message = &v + return s +} + +type DeleteQueuedReservedInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IDs of the Reserved Instances. + // + // ReservedInstancesIds is a required field + ReservedInstancesIds []*string `locationName:"ReservedInstancesId" locationNameList:"item" min:"1" type:"list" required:"true"` +} + +// String returns the string representation +func (s DeleteQueuedReservedInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteQueuedReservedInstancesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteQueuedReservedInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteQueuedReservedInstancesInput"} + if s.ReservedInstancesIds == nil { + invalidParams.Add(request.NewErrParamRequired("ReservedInstancesIds")) + } + if s.ReservedInstancesIds != nil && len(s.ReservedInstancesIds) < 1 { + invalidParams.Add(request.NewErrParamMinLen("ReservedInstancesIds", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteQueuedReservedInstancesInput) SetDryRun(v bool) *DeleteQueuedReservedInstancesInput { + s.DryRun = &v + return s +} + +// SetReservedInstancesIds sets the ReservedInstancesIds field's value. +func (s *DeleteQueuedReservedInstancesInput) SetReservedInstancesIds(v []*string) *DeleteQueuedReservedInstancesInput { + s.ReservedInstancesIds = v + return s +} + +type DeleteQueuedReservedInstancesOutput struct { + _ struct{} `type:"structure"` + + // Information about the queued purchases that could not be deleted. + FailedQueuedPurchaseDeletions []*FailedQueuedPurchaseDeletion `locationName:"failedQueuedPurchaseDeletionSet" locationNameList:"item" type:"list"` + + // Information about the queued purchases that were successfully deleted. + SuccessfulQueuedPurchaseDeletions []*SuccessfulQueuedPurchaseDeletion `locationName:"successfulQueuedPurchaseDeletionSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DeleteQueuedReservedInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteQueuedReservedInstancesOutput) GoString() string { + return s.String() +} + +// SetFailedQueuedPurchaseDeletions sets the FailedQueuedPurchaseDeletions field's value. +func (s *DeleteQueuedReservedInstancesOutput) SetFailedQueuedPurchaseDeletions(v []*FailedQueuedPurchaseDeletion) *DeleteQueuedReservedInstancesOutput { + s.FailedQueuedPurchaseDeletions = v + return s +} + +// SetSuccessfulQueuedPurchaseDeletions sets the SuccessfulQueuedPurchaseDeletions field's value. +func (s *DeleteQueuedReservedInstancesOutput) SetSuccessfulQueuedPurchaseDeletions(v []*SuccessfulQueuedPurchaseDeletion) *DeleteQueuedReservedInstancesOutput { + s.SuccessfulQueuedPurchaseDeletions = v + return s +} + +type DeleteRouteInput struct { + _ struct{} `type:"structure"` + + // The IPv4 CIDR range for the route. The value you specify must match the CIDR + // for the route exactly. + DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` + + // The IPv6 CIDR range for the route. The value you specify must match the CIDR + // for the route exactly. + DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the route table. + // + // RouteTableId is a required field + RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteRouteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteRouteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteRouteInput"} + if s.RouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("RouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *DeleteRouteInput) SetDestinationCidrBlock(v string) *DeleteRouteInput { + s.DestinationCidrBlock = &v + return s +} + +// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. +func (s *DeleteRouteInput) SetDestinationIpv6CidrBlock(v string) *DeleteRouteInput { + s.DestinationIpv6CidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteRouteInput) SetDryRun(v bool) *DeleteRouteInput { + s.DryRun = &v + return s +} + +// SetRouteTableId sets the RouteTableId field's value. +func (s *DeleteRouteInput) SetRouteTableId(v string) *DeleteRouteInput { + s.RouteTableId = &v + return s +} + +type DeleteRouteOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteRouteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteRouteOutput) GoString() string { + return s.String() +} + +type DeleteRouteTableInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the route table. + // + // RouteTableId is a required field + RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteRouteTableInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteRouteTableInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteRouteTableInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteRouteTableInput"} + if s.RouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("RouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteRouteTableInput) SetDryRun(v bool) *DeleteRouteTableInput { + s.DryRun = &v + return s +} + +// SetRouteTableId sets the RouteTableId field's value. +func (s *DeleteRouteTableInput) SetRouteTableId(v string) *DeleteRouteTableInput { + s.RouteTableId = &v + return s +} + +type DeleteRouteTableOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteRouteTableOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteRouteTableOutput) GoString() string { + return s.String() +} + +type DeleteSecurityGroupInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the security group. Required for a nondefault VPC. + GroupId *string `type:"string"` + + // [EC2-Classic, default VPC] The name of the security group. You can specify + // either the security group name or the security group ID. + GroupName *string `type:"string"` +} + +// String returns the string representation +func (s DeleteSecurityGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteSecurityGroupInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteSecurityGroupInput) SetDryRun(v bool) *DeleteSecurityGroupInput { + s.DryRun = &v + return s +} + +// SetGroupId sets the GroupId field's value. +func (s *DeleteSecurityGroupInput) SetGroupId(v string) *DeleteSecurityGroupInput { + s.GroupId = &v + return s +} + +// SetGroupName sets the GroupName field's value. +func (s *DeleteSecurityGroupInput) SetGroupName(v string) *DeleteSecurityGroupInput { + s.GroupName = &v + return s +} + +type DeleteSecurityGroupOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteSecurityGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteSecurityGroupOutput) GoString() string { + return s.String() +} + +type DeleteSnapshotInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the EBS snapshot. + // + // SnapshotId is a required field + SnapshotId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteSnapshotInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteSnapshotInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteSnapshotInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteSnapshotInput"} + if s.SnapshotId == nil { + invalidParams.Add(request.NewErrParamRequired("SnapshotId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteSnapshotInput) SetDryRun(v bool) *DeleteSnapshotInput { + s.DryRun = &v + return s +} + +// SetSnapshotId sets the SnapshotId field's value. +func (s *DeleteSnapshotInput) SetSnapshotId(v string) *DeleteSnapshotInput { + s.SnapshotId = &v + return s +} + +type DeleteSnapshotOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteSnapshotOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteSnapshotOutput) GoString() string { + return s.String() +} + +// Contains the parameters for DeleteSpotDatafeedSubscription. +type DeleteSpotDatafeedSubscriptionInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s DeleteSpotDatafeedSubscriptionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteSpotDatafeedSubscriptionInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteSpotDatafeedSubscriptionInput) SetDryRun(v bool) *DeleteSpotDatafeedSubscriptionInput { + s.DryRun = &v + return s +} + +type DeleteSpotDatafeedSubscriptionOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteSpotDatafeedSubscriptionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteSpotDatafeedSubscriptionOutput) GoString() string { + return s.String() +} + +type DeleteSubnetInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the subnet. + // + // SubnetId is a required field + SubnetId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteSubnetInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteSubnetInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteSubnetInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteSubnetInput"} + if s.SubnetId == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteSubnetInput) SetDryRun(v bool) *DeleteSubnetInput { + s.DryRun = &v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *DeleteSubnetInput) SetSubnetId(v string) *DeleteSubnetInput { + s.SubnetId = &v + return s +} + +type DeleteSubnetOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteSubnetOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteSubnetOutput) GoString() string { + return s.String() +} + +type DeleteTagsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The IDs of the resources, separated by spaces. + // + // Constraints: Up to 1000 resource IDs. We recommend breaking up this request + // into smaller batches. + // + // Resources is a required field + Resources []*string `locationName:"resourceId" type:"list" required:"true"` + + // The tags to delete. Specify a tag key and an optional tag value to delete + // specific tags. If you specify a tag key without a tag value, we delete any + // tag with this key regardless of its value. If you specify a tag key with + // an empty string as the tag value, we delete the tag only if its value is + // an empty string. + // + // If you omit this parameter, we delete all user-defined tags for the specified + // resources. We do not delete AWS-generated tags (tags that have the aws: prefix). + Tags []*Tag `locationName:"tag" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DeleteTagsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTagsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTagsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTagsInput"} + if s.Resources == nil { + invalidParams.Add(request.NewErrParamRequired("Resources")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTagsInput) SetDryRun(v bool) *DeleteTagsInput { + s.DryRun = &v + return s +} + +// SetResources sets the Resources field's value. +func (s *DeleteTagsInput) SetResources(v []*string) *DeleteTagsInput { + s.Resources = v + return s +} + +// SetTags sets the Tags field's value. +func (s *DeleteTagsInput) SetTags(v []*Tag) *DeleteTagsInput { + s.Tags = v + return s +} + +type DeleteTagsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteTagsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTagsOutput) GoString() string { + return s.String() +} + +type DeleteTrafficMirrorFilterInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the Traffic Mirror filter. + // + // TrafficMirrorFilterId is a required field + TrafficMirrorFilterId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTrafficMirrorFilterInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTrafficMirrorFilterInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTrafficMirrorFilterInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTrafficMirrorFilterInput"} + if s.TrafficMirrorFilterId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTrafficMirrorFilterInput) SetDryRun(v bool) *DeleteTrafficMirrorFilterInput { + s.DryRun = &v + return s +} + +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *DeleteTrafficMirrorFilterInput) SetTrafficMirrorFilterId(v string) *DeleteTrafficMirrorFilterInput { + s.TrafficMirrorFilterId = &v + return s +} + +type DeleteTrafficMirrorFilterOutput struct { + _ struct{} `type:"structure"` + + // The ID of the Traffic Mirror filter. + TrafficMirrorFilterId *string `locationName:"trafficMirrorFilterId" type:"string"` +} + +// String returns the string representation +func (s DeleteTrafficMirrorFilterOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTrafficMirrorFilterOutput) GoString() string { + return s.String() +} + +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *DeleteTrafficMirrorFilterOutput) SetTrafficMirrorFilterId(v string) *DeleteTrafficMirrorFilterOutput { + s.TrafficMirrorFilterId = &v + return s +} + +type DeleteTrafficMirrorFilterRuleInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the Traffic Mirror rule. + // + // TrafficMirrorFilterRuleId is a required field + TrafficMirrorFilterRuleId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTrafficMirrorFilterRuleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTrafficMirrorFilterRuleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTrafficMirrorFilterRuleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTrafficMirrorFilterRuleInput"} + if s.TrafficMirrorFilterRuleId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterRuleId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTrafficMirrorFilterRuleInput) SetDryRun(v bool) *DeleteTrafficMirrorFilterRuleInput { + s.DryRun = &v + return s +} + +// SetTrafficMirrorFilterRuleId sets the TrafficMirrorFilterRuleId field's value. +func (s *DeleteTrafficMirrorFilterRuleInput) SetTrafficMirrorFilterRuleId(v string) *DeleteTrafficMirrorFilterRuleInput { + s.TrafficMirrorFilterRuleId = &v + return s +} + +type DeleteTrafficMirrorFilterRuleOutput struct { + _ struct{} `type:"structure"` + + // The ID of the deleted Traffic Mirror rule. + TrafficMirrorFilterRuleId *string `locationName:"trafficMirrorFilterRuleId" type:"string"` +} + +// String returns the string representation +func (s DeleteTrafficMirrorFilterRuleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTrafficMirrorFilterRuleOutput) GoString() string { + return s.String() +} + +// SetTrafficMirrorFilterRuleId sets the TrafficMirrorFilterRuleId field's value. +func (s *DeleteTrafficMirrorFilterRuleOutput) SetTrafficMirrorFilterRuleId(v string) *DeleteTrafficMirrorFilterRuleOutput { + s.TrafficMirrorFilterRuleId = &v + return s +} + +type DeleteTrafficMirrorSessionInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the Traffic Mirror session. + // + // TrafficMirrorSessionId is a required field + TrafficMirrorSessionId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTrafficMirrorSessionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTrafficMirrorSessionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTrafficMirrorSessionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTrafficMirrorSessionInput"} + if s.TrafficMirrorSessionId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorSessionId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTrafficMirrorSessionInput) SetDryRun(v bool) *DeleteTrafficMirrorSessionInput { + s.DryRun = &v + return s +} + +// SetTrafficMirrorSessionId sets the TrafficMirrorSessionId field's value. +func (s *DeleteTrafficMirrorSessionInput) SetTrafficMirrorSessionId(v string) *DeleteTrafficMirrorSessionInput { + s.TrafficMirrorSessionId = &v + return s +} + +type DeleteTrafficMirrorSessionOutput struct { + _ struct{} `type:"structure"` + + // The ID of the deleted Traffic Mirror session. + TrafficMirrorSessionId *string `locationName:"trafficMirrorSessionId" type:"string"` +} + +// String returns the string representation +func (s DeleteTrafficMirrorSessionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTrafficMirrorSessionOutput) GoString() string { + return s.String() +} + +// SetTrafficMirrorSessionId sets the TrafficMirrorSessionId field's value. +func (s *DeleteTrafficMirrorSessionOutput) SetTrafficMirrorSessionId(v string) *DeleteTrafficMirrorSessionOutput { + s.TrafficMirrorSessionId = &v + return s +} + +type DeleteTrafficMirrorTargetInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the Traffic Mirror target. + // + // TrafficMirrorTargetId is a required field + TrafficMirrorTargetId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTrafficMirrorTargetInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTrafficMirrorTargetInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTrafficMirrorTargetInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTrafficMirrorTargetInput"} + if s.TrafficMirrorTargetId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorTargetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTrafficMirrorTargetInput) SetDryRun(v bool) *DeleteTrafficMirrorTargetInput { + s.DryRun = &v + return s +} + +// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. +func (s *DeleteTrafficMirrorTargetInput) SetTrafficMirrorTargetId(v string) *DeleteTrafficMirrorTargetInput { + s.TrafficMirrorTargetId = &v + return s +} + +type DeleteTrafficMirrorTargetOutput struct { + _ struct{} `type:"structure"` + + // The ID of the deleted Traffic Mirror target. + TrafficMirrorTargetId *string `locationName:"trafficMirrorTargetId" type:"string"` +} + +// String returns the string representation +func (s DeleteTrafficMirrorTargetOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTrafficMirrorTargetOutput) GoString() string { + return s.String() +} + +// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. +func (s *DeleteTrafficMirrorTargetOutput) SetTrafficMirrorTargetId(v string) *DeleteTrafficMirrorTargetOutput { + s.TrafficMirrorTargetId = &v + return s +} + +type DeleteTransitGatewayInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the transit gateway. + // + // TransitGatewayId is a required field + TransitGatewayId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTransitGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTransitGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTransitGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTransitGatewayInput"} + if s.TransitGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTransitGatewayInput) SetDryRun(v bool) *DeleteTransitGatewayInput { + s.DryRun = &v + return s +} + +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *DeleteTransitGatewayInput) SetTransitGatewayId(v string) *DeleteTransitGatewayInput { + s.TransitGatewayId = &v + return s +} + +type DeleteTransitGatewayOutput struct { + _ struct{} `type:"structure"` + + // Information about the deleted transit gateway. + TransitGateway *TransitGateway `locationName:"transitGateway" type:"structure"` +} + +// String returns the string representation +func (s DeleteTransitGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTransitGatewayOutput) GoString() string { + return s.String() +} + +// SetTransitGateway sets the TransitGateway field's value. +func (s *DeleteTransitGatewayOutput) SetTransitGateway(v *TransitGateway) *DeleteTransitGatewayOutput { + s.TransitGateway = v + return s +} + +type DeleteTransitGatewayRouteInput struct { + _ struct{} `type:"structure"` + + // The CIDR range for the route. This must match the CIDR for the route exactly. + // + // DestinationCidrBlock is a required field + DestinationCidrBlock *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the transit gateway route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTransitGatewayRouteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTransitGatewayRouteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTransitGatewayRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTransitGatewayRouteInput"} + if s.DestinationCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *DeleteTransitGatewayRouteInput) SetDestinationCidrBlock(v string) *DeleteTransitGatewayRouteInput { + s.DestinationCidrBlock = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTransitGatewayRouteInput) SetDryRun(v bool) *DeleteTransitGatewayRouteInput { + s.DryRun = &v + return s +} + +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *DeleteTransitGatewayRouteInput) SetTransitGatewayRouteTableId(v string) *DeleteTransitGatewayRouteInput { + s.TransitGatewayRouteTableId = &v + return s +} + +type DeleteTransitGatewayRouteOutput struct { + _ struct{} `type:"structure"` + + // Information about the route. + Route *TransitGatewayRoute `locationName:"route" type:"structure"` +} + +// String returns the string representation +func (s DeleteTransitGatewayRouteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTransitGatewayRouteOutput) GoString() string { + return s.String() +} + +// SetRoute sets the Route field's value. +func (s *DeleteTransitGatewayRouteOutput) SetRoute(v *TransitGatewayRoute) *DeleteTransitGatewayRouteOutput { + s.Route = v + return s +} + +type DeleteTransitGatewayRouteTableInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the transit gateway route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTransitGatewayRouteTableInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTransitGatewayRouteTableInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTransitGatewayRouteTableInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTransitGatewayRouteTableInput"} + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTransitGatewayRouteTableInput) SetDryRun(v bool) *DeleteTransitGatewayRouteTableInput { + s.DryRun = &v + return s +} + +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *DeleteTransitGatewayRouteTableInput) SetTransitGatewayRouteTableId(v string) *DeleteTransitGatewayRouteTableInput { + s.TransitGatewayRouteTableId = &v + return s +} + +type DeleteTransitGatewayRouteTableOutput struct { + _ struct{} `type:"structure"` + + // Information about the deleted transit gateway route table. + TransitGatewayRouteTable *TransitGatewayRouteTable `locationName:"transitGatewayRouteTable" type:"structure"` +} + +// String returns the string representation +func (s DeleteTransitGatewayRouteTableOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTransitGatewayRouteTableOutput) GoString() string { + return s.String() +} + +// SetTransitGatewayRouteTable sets the TransitGatewayRouteTable field's value. +func (s *DeleteTransitGatewayRouteTableOutput) SetTransitGatewayRouteTable(v *TransitGatewayRouteTable) *DeleteTransitGatewayRouteTableOutput { + s.TransitGatewayRouteTable = v + return s +} + +type DeleteTransitGatewayVpcAttachmentInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the attachment. + // + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTransitGatewayVpcAttachmentInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTransitGatewayVpcAttachmentInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTransitGatewayVpcAttachmentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTransitGatewayVpcAttachmentInput"} + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *DeleteTransitGatewayVpcAttachmentInput { + s.DryRun = &v + return s +} + +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *DeleteTransitGatewayVpcAttachmentInput) SetTransitGatewayAttachmentId(v string) *DeleteTransitGatewayVpcAttachmentInput { + s.TransitGatewayAttachmentId = &v + return s +} + +type DeleteTransitGatewayVpcAttachmentOutput struct { + _ struct{} `type:"structure"` + + // Information about the deleted VPC attachment. + TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` +} + +// String returns the string representation +func (s DeleteTransitGatewayVpcAttachmentOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTransitGatewayVpcAttachmentOutput) GoString() string { + return s.String() +} + +// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. +func (s *DeleteTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *DeleteTransitGatewayVpcAttachmentOutput { + s.TransitGatewayVpcAttachment = v + return s +} + +type DeleteVolumeInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the volume. + // + // VolumeId is a required field + VolumeId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteVolumeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVolumeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVolumeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVolumeInput"} + if s.VolumeId == nil { + invalidParams.Add(request.NewErrParamRequired("VolumeId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteVolumeInput) SetDryRun(v bool) *DeleteVolumeInput { + s.DryRun = &v + return s +} + +// SetVolumeId sets the VolumeId field's value. +func (s *DeleteVolumeInput) SetVolumeId(v string) *DeleteVolumeInput { + s.VolumeId = &v + return s +} + +type DeleteVolumeOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteVolumeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVolumeOutput) GoString() string { + return s.String() +} + +type DeleteVpcEndpointConnectionNotificationsInput struct { + _ struct{} `type:"structure"` + + // One or more notification IDs. + // + // ConnectionNotificationIds is a required field + ConnectionNotificationIds []*string `locationName:"ConnectionNotificationId" locationNameList:"item" type:"list" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s DeleteVpcEndpointConnectionNotificationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcEndpointConnectionNotificationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVpcEndpointConnectionNotificationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVpcEndpointConnectionNotificationsInput"} + if s.ConnectionNotificationIds == nil { + invalidParams.Add(request.NewErrParamRequired("ConnectionNotificationIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetConnectionNotificationIds sets the ConnectionNotificationIds field's value. +func (s *DeleteVpcEndpointConnectionNotificationsInput) SetConnectionNotificationIds(v []*string) *DeleteVpcEndpointConnectionNotificationsInput { + s.ConnectionNotificationIds = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteVpcEndpointConnectionNotificationsInput) SetDryRun(v bool) *DeleteVpcEndpointConnectionNotificationsInput { + s.DryRun = &v + return s +} + +type DeleteVpcEndpointConnectionNotificationsOutput struct { + _ struct{} `type:"structure"` + + // Information about the notifications that could not be deleted successfully. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DeleteVpcEndpointConnectionNotificationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcEndpointConnectionNotificationsOutput) GoString() string { + return s.String() +} + +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *DeleteVpcEndpointConnectionNotificationsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteVpcEndpointConnectionNotificationsOutput { + s.Unsuccessful = v + return s +} + +type DeleteVpcEndpointServiceConfigurationsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IDs of one or more services. + // + // ServiceIds is a required field + ServiceIds []*string `locationName:"ServiceId" locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s DeleteVpcEndpointServiceConfigurationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcEndpointServiceConfigurationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVpcEndpointServiceConfigurationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVpcEndpointServiceConfigurationsInput"} + if s.ServiceIds == nil { + invalidParams.Add(request.NewErrParamRequired("ServiceIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteVpcEndpointServiceConfigurationsInput) SetDryRun(v bool) *DeleteVpcEndpointServiceConfigurationsInput { + s.DryRun = &v + return s +} + +// SetServiceIds sets the ServiceIds field's value. +func (s *DeleteVpcEndpointServiceConfigurationsInput) SetServiceIds(v []*string) *DeleteVpcEndpointServiceConfigurationsInput { + s.ServiceIds = v + return s +} + +type DeleteVpcEndpointServiceConfigurationsOutput struct { + _ struct{} `type:"structure"` + + // Information about the service configurations that were not deleted, if applicable. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DeleteVpcEndpointServiceConfigurationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcEndpointServiceConfigurationsOutput) GoString() string { + return s.String() +} + +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *DeleteVpcEndpointServiceConfigurationsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteVpcEndpointServiceConfigurationsOutput { + s.Unsuccessful = v + return s +} + +// Contains the parameters for DeleteVpcEndpoints. +type DeleteVpcEndpointsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more VPC endpoint IDs. + // + // VpcEndpointIds is a required field + VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s DeleteVpcEndpointsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcEndpointsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVpcEndpointsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVpcEndpointsInput"} + if s.VpcEndpointIds == nil { + invalidParams.Add(request.NewErrParamRequired("VpcEndpointIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteVpcEndpointsInput) SetDryRun(v bool) *DeleteVpcEndpointsInput { + s.DryRun = &v + return s +} + +// SetVpcEndpointIds sets the VpcEndpointIds field's value. +func (s *DeleteVpcEndpointsInput) SetVpcEndpointIds(v []*string) *DeleteVpcEndpointsInput { + s.VpcEndpointIds = v + return s +} + +// Contains the output of DeleteVpcEndpoints. +type DeleteVpcEndpointsOutput struct { + _ struct{} `type:"structure"` + + // Information about the VPC endpoints that were not successfully deleted. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DeleteVpcEndpointsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcEndpointsOutput) GoString() string { + return s.String() +} + +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *DeleteVpcEndpointsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteVpcEndpointsOutput { + s.Unsuccessful = v + return s +} + +type DeleteVpcInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteVpcInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVpcInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVpcInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteVpcInput) SetDryRun(v bool) *DeleteVpcInput { + s.DryRun = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *DeleteVpcInput) SetVpcId(v string) *DeleteVpcInput { + s.VpcId = &v + return s +} + +type DeleteVpcOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteVpcOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcOutput) GoString() string { + return s.String() +} + +type DeleteVpcPeeringConnectionInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the VPC peering connection. + // + // VpcPeeringConnectionId is a required field + VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteVpcPeeringConnectionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcPeeringConnectionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVpcPeeringConnectionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVpcPeeringConnectionInput"} + if s.VpcPeeringConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteVpcPeeringConnectionInput) SetDryRun(v bool) *DeleteVpcPeeringConnectionInput { + s.DryRun = &v + return s +} + +// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. +func (s *DeleteVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *DeleteVpcPeeringConnectionInput { + s.VpcPeeringConnectionId = &v + return s +} + +type DeleteVpcPeeringConnectionOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s DeleteVpcPeeringConnectionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpcPeeringConnectionOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *DeleteVpcPeeringConnectionOutput) SetReturn(v bool) *DeleteVpcPeeringConnectionOutput { + s.Return = &v + return s +} + +// Contains the parameters for DeleteVpnConnection. +type DeleteVpnConnectionInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the VPN connection. + // + // VpnConnectionId is a required field + VpnConnectionId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteVpnConnectionInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpnConnectionInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVpnConnectionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVpnConnectionInput"} + if s.VpnConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteVpnConnectionInput) SetDryRun(v bool) *DeleteVpnConnectionInput { + s.DryRun = &v + return s +} + +// SetVpnConnectionId sets the VpnConnectionId field's value. +func (s *DeleteVpnConnectionInput) SetVpnConnectionId(v string) *DeleteVpnConnectionInput { + s.VpnConnectionId = &v + return s +} + +type DeleteVpnConnectionOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteVpnConnectionOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpnConnectionOutput) GoString() string { + return s.String() +} + +// Contains the parameters for DeleteVpnConnectionRoute. +type DeleteVpnConnectionRouteInput struct { + _ struct{} `type:"structure"` + + // The CIDR block associated with the local subnet of the customer network. + // + // DestinationCidrBlock is a required field + DestinationCidrBlock *string `type:"string" required:"true"` + + // The ID of the VPN connection. + // + // VpnConnectionId is a required field + VpnConnectionId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteVpnConnectionRouteInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpnConnectionRouteInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVpnConnectionRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVpnConnectionRouteInput"} + if s.DestinationCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) + } + if s.VpnConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *DeleteVpnConnectionRouteInput) SetDestinationCidrBlock(v string) *DeleteVpnConnectionRouteInput { + s.DestinationCidrBlock = &v + return s +} + +// SetVpnConnectionId sets the VpnConnectionId field's value. +func (s *DeleteVpnConnectionRouteInput) SetVpnConnectionId(v string) *DeleteVpnConnectionRouteInput { + s.VpnConnectionId = &v + return s +} + +type DeleteVpnConnectionRouteOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteVpnConnectionRouteOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpnConnectionRouteOutput) GoString() string { + return s.String() +} + +// Contains the parameters for DeleteVpnGateway. +type DeleteVpnGatewayInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the virtual private gateway. + // + // VpnGatewayId is a required field + VpnGatewayId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteVpnGatewayInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpnGatewayInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteVpnGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteVpnGatewayInput"} + if s.VpnGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeleteVpnGatewayInput) SetDryRun(v bool) *DeleteVpnGatewayInput { + s.DryRun = &v + return s +} + +// SetVpnGatewayId sets the VpnGatewayId field's value. +func (s *DeleteVpnGatewayInput) SetVpnGatewayId(v string) *DeleteVpnGatewayInput { + s.VpnGatewayId = &v + return s +} + +type DeleteVpnGatewayOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteVpnGatewayOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteVpnGatewayOutput) GoString() string { + return s.String() +} + +type DeprovisionByoipCidrInput struct { + _ struct{} `type:"structure"` + + // The public IPv4 address range, in CIDR notation. The prefix must be the same + // prefix that you specified when you provisioned the address range. + // + // Cidr is a required field + Cidr *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s DeprovisionByoipCidrInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeprovisionByoipCidrInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeprovisionByoipCidrInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeprovisionByoipCidrInput"} + if s.Cidr == nil { + invalidParams.Add(request.NewErrParamRequired("Cidr")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCidr sets the Cidr field's value. +func (s *DeprovisionByoipCidrInput) SetCidr(v string) *DeprovisionByoipCidrInput { + s.Cidr = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DeprovisionByoipCidrInput) SetDryRun(v bool) *DeprovisionByoipCidrInput { + s.DryRun = &v + return s +} + +type DeprovisionByoipCidrOutput struct { + _ struct{} `type:"structure"` + + // Information about the address range. + ByoipCidr *ByoipCidr `locationName:"byoipCidr" type:"structure"` +} + +// String returns the string representation +func (s DeprovisionByoipCidrOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeprovisionByoipCidrOutput) GoString() string { + return s.String() +} + +// SetByoipCidr sets the ByoipCidr field's value. +func (s *DeprovisionByoipCidrOutput) SetByoipCidr(v *ByoipCidr) *DeprovisionByoipCidrOutput { + s.ByoipCidr = v + return s +} + +// Contains the parameters for DeregisterImage. +type DeregisterImageInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the AMI. + // + // ImageId is a required field + ImageId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeregisterImageInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeregisterImageInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeregisterImageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeregisterImageInput"} + if s.ImageId == nil { + invalidParams.Add(request.NewErrParamRequired("ImageId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DeregisterImageInput) SetDryRun(v bool) *DeregisterImageInput { + s.DryRun = &v + return s +} + +// SetImageId sets the ImageId field's value. +func (s *DeregisterImageInput) SetImageId(v string) *DeregisterImageInput { + s.ImageId = &v + return s +} + +type DeregisterImageOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeregisterImageOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeregisterImageOutput) GoString() string { + return s.String() +} + +type DescribeAccountAttributesInput struct { + _ struct{} `type:"structure"` + + // The account attribute names. + AttributeNames []*string `locationName:"attributeName" locationNameList:"attributeName" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s DescribeAccountAttributesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAccountAttributesInput) GoString() string { + return s.String() +} + +// SetAttributeNames sets the AttributeNames field's value. +func (s *DescribeAccountAttributesInput) SetAttributeNames(v []*string) *DescribeAccountAttributesInput { + s.AttributeNames = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeAccountAttributesInput) SetDryRun(v bool) *DescribeAccountAttributesInput { + s.DryRun = &v + return s +} + +type DescribeAccountAttributesOutput struct { + _ struct{} `type:"structure"` + + // Information about the account attributes. + AccountAttributes []*AccountAttribute `locationName:"accountAttributeSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeAccountAttributesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAccountAttributesOutput) GoString() string { + return s.String() +} + +// SetAccountAttributes sets the AccountAttributes field's value. +func (s *DescribeAccountAttributesOutput) SetAccountAttributes(v []*AccountAttribute) *DescribeAccountAttributesOutput { + s.AccountAttributes = v + return s +} + +type DescribeAddressesInput struct { + _ struct{} `type:"structure"` + + // [EC2-VPC] Information about the allocation IDs. + AllocationIds []*string `locationName:"AllocationId" locationNameList:"AllocationId" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. Filter names and values are case-sensitive. + // + // * allocation-id - [EC2-VPC] The allocation ID for the address. + // + // * association-id - [EC2-VPC] The association ID for the address. + // + // * domain - Indicates whether the address is for use in EC2-Classic (standard) + // or in a VPC (vpc). + // + // * instance-id - The ID of the instance the address is associated with, + // if any. + // + // * network-interface-id - [EC2-VPC] The ID of the network interface that + // the address is associated with, if any. + // + // * network-interface-owner-id - The AWS account ID of the owner. + // + // * private-ip-address - [EC2-VPC] The private IP address associated with + // the Elastic IP address. + // + // * public-ip - The Elastic IP address. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // One or more Elastic IP addresses. + // + // Default: Describes all your Elastic IP addresses. + PublicIps []*string `locationName:"PublicIp" locationNameList:"PublicIp" type:"list"` +} + +// String returns the string representation +func (s DescribeAddressesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAddressesInput) GoString() string { + return s.String() +} + +// SetAllocationIds sets the AllocationIds field's value. +func (s *DescribeAddressesInput) SetAllocationIds(v []*string) *DescribeAddressesInput { + s.AllocationIds = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeAddressesInput) SetDryRun(v bool) *DescribeAddressesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeAddressesInput) SetFilters(v []*Filter) *DescribeAddressesInput { + s.Filters = v + return s +} + +// SetPublicIps sets the PublicIps field's value. +func (s *DescribeAddressesInput) SetPublicIps(v []*string) *DescribeAddressesInput { + s.PublicIps = v + return s +} + +type DescribeAddressesOutput struct { + _ struct{} `type:"structure"` + + // Information about the Elastic IP addresses. + Addresses []*Address `locationName:"addressesSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeAddressesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAddressesOutput) GoString() string { + return s.String() +} + +// SetAddresses sets the Addresses field's value. +func (s *DescribeAddressesOutput) SetAddresses(v []*Address) *DescribeAddressesOutput { + s.Addresses = v + return s +} + +type DescribeAggregateIdFormatInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s DescribeAggregateIdFormatInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAggregateIdFormatInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeAggregateIdFormatInput) SetDryRun(v bool) *DescribeAggregateIdFormatInput { + s.DryRun = &v + return s +} + +type DescribeAggregateIdFormatOutput struct { + _ struct{} `type:"structure"` + + // Information about each resource's ID format. + Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` + + // Indicates whether all resource types in the Region are configured to use + // longer IDs. This value is only true if all users are configured to use longer + // IDs for all resources types in the Region. + UseLongIdsAggregated *bool `locationName:"useLongIdsAggregated" type:"boolean"` +} + +// String returns the string representation +func (s DescribeAggregateIdFormatOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAggregateIdFormatOutput) GoString() string { + return s.String() +} + +// SetStatuses sets the Statuses field's value. +func (s *DescribeAggregateIdFormatOutput) SetStatuses(v []*IdFormat) *DescribeAggregateIdFormatOutput { + s.Statuses = v + return s +} + +// SetUseLongIdsAggregated sets the UseLongIdsAggregated field's value. +func (s *DescribeAggregateIdFormatOutput) SetUseLongIdsAggregated(v bool) *DescribeAggregateIdFormatOutput { + s.UseLongIdsAggregated = &v + return s +} + +type DescribeAvailabilityZonesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. + // + // * message - Information about the Availability Zone. + // + // * region-name - The name of the Region for the Availability Zone (for + // example, us-east-1). + // + // * state - The state of the Availability Zone (available | information + // | impaired | unavailable). + // + // * zone-id - The ID of the Availability Zone (for example, use1-az1). + // + // * zone-name - The name of the Availability Zone (for example, us-east-1a). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The IDs of the Availability Zones. + ZoneIds []*string `locationName:"ZoneId" locationNameList:"ZoneId" type:"list"` + + // The names of the Availability Zones. + ZoneNames []*string `locationName:"ZoneName" locationNameList:"ZoneName" type:"list"` +} + +// String returns the string representation +func (s DescribeAvailabilityZonesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAvailabilityZonesInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeAvailabilityZonesInput) SetDryRun(v bool) *DescribeAvailabilityZonesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeAvailabilityZonesInput) SetFilters(v []*Filter) *DescribeAvailabilityZonesInput { + s.Filters = v + return s +} + +// SetZoneIds sets the ZoneIds field's value. +func (s *DescribeAvailabilityZonesInput) SetZoneIds(v []*string) *DescribeAvailabilityZonesInput { + s.ZoneIds = v + return s +} + +// SetZoneNames sets the ZoneNames field's value. +func (s *DescribeAvailabilityZonesInput) SetZoneNames(v []*string) *DescribeAvailabilityZonesInput { + s.ZoneNames = v + return s +} + +type DescribeAvailabilityZonesOutput struct { + _ struct{} `type:"structure"` + + // Information about the Availability Zones. + AvailabilityZones []*AvailabilityZone `locationName:"availabilityZoneInfo" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeAvailabilityZonesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAvailabilityZonesOutput) GoString() string { + return s.String() +} + +// SetAvailabilityZones sets the AvailabilityZones field's value. +func (s *DescribeAvailabilityZonesOutput) SetAvailabilityZones(v []*AvailabilityZone) *DescribeAvailabilityZonesOutput { + s.AvailabilityZones = v + return s +} + +type DescribeBundleTasksInput struct { + _ struct{} `type:"structure"` + + // The bundle task IDs. + // + // Default: Describes all your bundle tasks. + BundleIds []*string `locationName:"BundleId" locationNameList:"BundleId" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. + // + // * bundle-id - The ID of the bundle task. + // + // * error-code - If the task failed, the error code returned. + // + // * error-message - If the task failed, the error message returned. + // + // * instance-id - The ID of the instance. + // + // * progress - The level of task completion, as a percentage (for example, + // 20%). + // + // * s3-bucket - The Amazon S3 bucket to store the AMI. + // + // * s3-prefix - The beginning of the AMI name. + // + // * start-time - The time the task started (for example, 2013-09-15T17:15:20.000Z). + // + // * state - The state of the task (pending | waiting-for-shutdown | bundling + // | storing | cancelling | complete | failed). + // + // * update-time - The time of the most recent update for the task. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` +} + +// String returns the string representation +func (s DescribeBundleTasksInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeBundleTasksInput) GoString() string { + return s.String() +} + +// SetBundleIds sets the BundleIds field's value. +func (s *DescribeBundleTasksInput) SetBundleIds(v []*string) *DescribeBundleTasksInput { + s.BundleIds = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeBundleTasksInput) SetDryRun(v bool) *DescribeBundleTasksInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeBundleTasksInput) SetFilters(v []*Filter) *DescribeBundleTasksInput { + s.Filters = v + return s +} + +type DescribeBundleTasksOutput struct { + _ struct{} `type:"structure"` + + // Information about the bundle tasks. + BundleTasks []*BundleTask `locationName:"bundleInstanceTasksSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeBundleTasksOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeBundleTasksOutput) GoString() string { + return s.String() +} + +// SetBundleTasks sets the BundleTasks field's value. +func (s *DescribeBundleTasksOutput) SetBundleTasks(v []*BundleTask) *DescribeBundleTasksOutput { + s.BundleTasks = v + return s +} + +type DescribeByoipCidrsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + // + // MaxResults is a required field + MaxResults *int64 `min:"1" type:"integer" required:"true"` + + // The token for the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeByoipCidrsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeByoipCidrsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeByoipCidrsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeByoipCidrsInput"} + if s.MaxResults == nil { + invalidParams.Add(request.NewErrParamRequired("MaxResults")) + } + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeByoipCidrsInput) SetDryRun(v bool) *DescribeByoipCidrsInput { + s.DryRun = &v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeByoipCidrsInput) SetMaxResults(v int64) *DescribeByoipCidrsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeByoipCidrsInput) SetNextToken(v string) *DescribeByoipCidrsInput { + s.NextToken = &v + return s +} + +type DescribeByoipCidrsOutput struct { + _ struct{} `type:"structure"` + + // Information about your address ranges. + ByoipCidrs []*ByoipCidr `locationName:"byoipCidrSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeByoipCidrsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeByoipCidrsOutput) GoString() string { + return s.String() +} + +// SetByoipCidrs sets the ByoipCidrs field's value. +func (s *DescribeByoipCidrsOutput) SetByoipCidrs(v []*ByoipCidr) *DescribeByoipCidrsOutput { + s.ByoipCidrs = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeByoipCidrsOutput) SetNextToken(v string) *DescribeByoipCidrsOutput { + s.NextToken = &v + return s +} + +type DescribeCapacityReservationsInput struct { + _ struct{} `type:"structure"` + + // The ID of the Capacity Reservation. + CapacityReservationIds []*string `locationName:"CapacityReservationId" locationNameList:"item" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the returned + // nextToken value. + MaxResults *int64 `min:"1" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeCapacityReservationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeCapacityReservationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeCapacityReservationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeCapacityReservationsInput"} + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCapacityReservationIds sets the CapacityReservationIds field's value. +func (s *DescribeCapacityReservationsInput) SetCapacityReservationIds(v []*string) *DescribeCapacityReservationsInput { + s.CapacityReservationIds = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeCapacityReservationsInput) SetDryRun(v bool) *DescribeCapacityReservationsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeCapacityReservationsInput) SetFilters(v []*Filter) *DescribeCapacityReservationsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeCapacityReservationsInput) SetMaxResults(v int64) *DescribeCapacityReservationsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeCapacityReservationsInput) SetNextToken(v string) *DescribeCapacityReservationsInput { + s.NextToken = &v + return s +} + +type DescribeCapacityReservationsOutput struct { + _ struct{} `type:"structure"` + + // Information about the Capacity Reservations. + CapacityReservations []*CapacityReservation `locationName:"capacityReservationSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeCapacityReservationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeCapacityReservationsOutput) GoString() string { + return s.String() +} + +// SetCapacityReservations sets the CapacityReservations field's value. +func (s *DescribeCapacityReservationsOutput) SetCapacityReservations(v []*CapacityReservation) *DescribeCapacityReservationsOutput { + s.CapacityReservations = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeCapacityReservationsOutput) SetNextToken(v string) *DescribeCapacityReservationsOutput { + s.NextToken = &v + return s +} + +type DescribeClassicLinkInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * group-id - The ID of a VPC security group that's associated with the + // instance. + // + // * instance-id - The ID of the instance. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * vpc-id - The ID of the VPC to which the instance is linked. vpc-id - + // The ID of the VPC that the instance is linked to. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // One or more instance IDs. Must be instances linked to a VPC through ClassicLink. + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + // + // Constraint: If the value is greater than 1000, we return only 1000 items. + MaxResults *int64 `locationName:"maxResults" min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeClassicLinkInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClassicLinkInstancesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeClassicLinkInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeClassicLinkInstancesInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeClassicLinkInstancesInput) SetDryRun(v bool) *DescribeClassicLinkInstancesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeClassicLinkInstancesInput) SetFilters(v []*Filter) *DescribeClassicLinkInstancesInput { + s.Filters = v + return s +} + +// SetInstanceIds sets the InstanceIds field's value. +func (s *DescribeClassicLinkInstancesInput) SetInstanceIds(v []*string) *DescribeClassicLinkInstancesInput { + s.InstanceIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeClassicLinkInstancesInput) SetMaxResults(v int64) *DescribeClassicLinkInstancesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClassicLinkInstancesInput) SetNextToken(v string) *DescribeClassicLinkInstancesInput { + s.NextToken = &v + return s +} + +type DescribeClassicLinkInstancesOutput struct { + _ struct{} `type:"structure"` + + // Information about one or more linked EC2-Classic instances. + Instances []*ClassicLinkInstance `locationName:"instancesSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeClassicLinkInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClassicLinkInstancesOutput) GoString() string { + return s.String() +} + +// SetInstances sets the Instances field's value. +func (s *DescribeClassicLinkInstancesOutput) SetInstances(v []*ClassicLinkInstance) *DescribeClassicLinkInstancesOutput { + s.Instances = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClassicLinkInstancesOutput) SetNextToken(v string) *DescribeClassicLinkInstancesOutput { + s.NextToken = &v + return s +} + +type DescribeClientVpnAuthorizationRulesInput struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN endpoint. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. Filter names and values are case-sensitive. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the nextToken + // value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnAuthorizationRulesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnAuthorizationRulesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeClientVpnAuthorizationRulesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnAuthorizationRulesInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *DescribeClientVpnAuthorizationRulesInput) SetClientVpnEndpointId(v string) *DescribeClientVpnAuthorizationRulesInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeClientVpnAuthorizationRulesInput) SetDryRun(v bool) *DescribeClientVpnAuthorizationRulesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeClientVpnAuthorizationRulesInput) SetFilters(v []*Filter) *DescribeClientVpnAuthorizationRulesInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeClientVpnAuthorizationRulesInput) SetMaxResults(v int64) *DescribeClientVpnAuthorizationRulesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnAuthorizationRulesInput) SetNextToken(v string) *DescribeClientVpnAuthorizationRulesInput { + s.NextToken = &v + return s +} + +type DescribeClientVpnAuthorizationRulesOutput struct { + _ struct{} `type:"structure"` + + // Information about the authorization rules. + AuthorizationRules []*AuthorizationRule `locationName:"authorizationRule" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnAuthorizationRulesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnAuthorizationRulesOutput) GoString() string { + return s.String() +} + +// SetAuthorizationRules sets the AuthorizationRules field's value. +func (s *DescribeClientVpnAuthorizationRulesOutput) SetAuthorizationRules(v []*AuthorizationRule) *DescribeClientVpnAuthorizationRulesOutput { + s.AuthorizationRules = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnAuthorizationRulesOutput) SetNextToken(v string) *DescribeClientVpnAuthorizationRulesOutput { + s.NextToken = &v + return s +} + +type DescribeClientVpnConnectionsInput struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN endpoint. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. Filter names and values are case-sensitive. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the nextToken + // value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnConnectionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnConnectionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeClientVpnConnectionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnConnectionsInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *DescribeClientVpnConnectionsInput) SetClientVpnEndpointId(v string) *DescribeClientVpnConnectionsInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeClientVpnConnectionsInput) SetDryRun(v bool) *DescribeClientVpnConnectionsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeClientVpnConnectionsInput) SetFilters(v []*Filter) *DescribeClientVpnConnectionsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeClientVpnConnectionsInput) SetMaxResults(v int64) *DescribeClientVpnConnectionsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnConnectionsInput) SetNextToken(v string) *DescribeClientVpnConnectionsInput { + s.NextToken = &v + return s +} + +type DescribeClientVpnConnectionsOutput struct { + _ struct{} `type:"structure"` + + // Information about the active and terminated client connections. + Connections []*ClientVpnConnection `locationName:"connections" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnConnectionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnConnectionsOutput) GoString() string { + return s.String() +} + +// SetConnections sets the Connections field's value. +func (s *DescribeClientVpnConnectionsOutput) SetConnections(v []*ClientVpnConnection) *DescribeClientVpnConnectionsOutput { + s.Connections = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnConnectionsOutput) SetNextToken(v string) *DescribeClientVpnConnectionsOutput { + s.NextToken = &v + return s +} + +type DescribeClientVpnEndpointsInput struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN endpoint. + ClientVpnEndpointIds []*string `locationName:"ClientVpnEndpointId" locationNameList:"item" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. Filter names and values are case-sensitive. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the nextToken + // value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnEndpointsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnEndpointsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeClientVpnEndpointsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnEndpointsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientVpnEndpointIds sets the ClientVpnEndpointIds field's value. +func (s *DescribeClientVpnEndpointsInput) SetClientVpnEndpointIds(v []*string) *DescribeClientVpnEndpointsInput { + s.ClientVpnEndpointIds = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeClientVpnEndpointsInput) SetDryRun(v bool) *DescribeClientVpnEndpointsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeClientVpnEndpointsInput) SetFilters(v []*Filter) *DescribeClientVpnEndpointsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeClientVpnEndpointsInput) SetMaxResults(v int64) *DescribeClientVpnEndpointsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnEndpointsInput) SetNextToken(v string) *DescribeClientVpnEndpointsInput { + s.NextToken = &v + return s +} + +type DescribeClientVpnEndpointsOutput struct { + _ struct{} `type:"structure"` + + // Information about the Client VPN endpoints. + ClientVpnEndpoints []*ClientVpnEndpoint `locationName:"clientVpnEndpoint" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnEndpointsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnEndpointsOutput) GoString() string { + return s.String() +} + +// SetClientVpnEndpoints sets the ClientVpnEndpoints field's value. +func (s *DescribeClientVpnEndpointsOutput) SetClientVpnEndpoints(v []*ClientVpnEndpoint) *DescribeClientVpnEndpointsOutput { + s.ClientVpnEndpoints = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnEndpointsOutput) SetNextToken(v string) *DescribeClientVpnEndpointsOutput { + s.NextToken = &v + return s +} + +type DescribeClientVpnRoutesInput struct { + _ struct{} `type:"structure"` + + // The ID of the Client VPN endpoint. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. Filter names and values are case-sensitive. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the nextToken + // value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnRoutesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnRoutesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeClientVpnRoutesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnRoutesInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *DescribeClientVpnRoutesInput) SetClientVpnEndpointId(v string) *DescribeClientVpnRoutesInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeClientVpnRoutesInput) SetDryRun(v bool) *DescribeClientVpnRoutesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeClientVpnRoutesInput) SetFilters(v []*Filter) *DescribeClientVpnRoutesInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeClientVpnRoutesInput) SetMaxResults(v int64) *DescribeClientVpnRoutesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnRoutesInput) SetNextToken(v string) *DescribeClientVpnRoutesInput { + s.NextToken = &v + return s +} + +type DescribeClientVpnRoutesOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the Client VPN endpoint routes. + Routes []*ClientVpnRoute `locationName:"routes" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeClientVpnRoutesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnRoutesOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnRoutesOutput) SetNextToken(v string) *DescribeClientVpnRoutesOutput { + s.NextToken = &v + return s +} + +// SetRoutes sets the Routes field's value. +func (s *DescribeClientVpnRoutesOutput) SetRoutes(v []*ClientVpnRoute) *DescribeClientVpnRoutesOutput { + s.Routes = v + return s +} + +type DescribeClientVpnTargetNetworksInput struct { + _ struct{} `type:"structure"` + + // The IDs of the target network associations. + AssociationIds []*string `locationNameList:"item" type:"list"` + + // The ID of the Client VPN endpoint. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. Filter names and values are case-sensitive. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the nextToken + // value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnTargetNetworksInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnTargetNetworksInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeClientVpnTargetNetworksInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeClientVpnTargetNetworksInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAssociationIds sets the AssociationIds field's value. +func (s *DescribeClientVpnTargetNetworksInput) SetAssociationIds(v []*string) *DescribeClientVpnTargetNetworksInput { + s.AssociationIds = v + return s +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *DescribeClientVpnTargetNetworksInput) SetClientVpnEndpointId(v string) *DescribeClientVpnTargetNetworksInput { + s.ClientVpnEndpointId = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeClientVpnTargetNetworksInput) SetDryRun(v bool) *DescribeClientVpnTargetNetworksInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeClientVpnTargetNetworksInput) SetFilters(v []*Filter) *DescribeClientVpnTargetNetworksInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeClientVpnTargetNetworksInput) SetMaxResults(v int64) *DescribeClientVpnTargetNetworksInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnTargetNetworksInput) SetNextToken(v string) *DescribeClientVpnTargetNetworksInput { + s.NextToken = &v + return s +} + +type DescribeClientVpnTargetNetworksOutput struct { + _ struct{} `type:"structure"` + + // Information about the associated target networks. + ClientVpnTargetNetworks []*TargetNetwork `locationName:"clientVpnTargetNetworks" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeClientVpnTargetNetworksOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeClientVpnTargetNetworksOutput) GoString() string { + return s.String() +} + +// SetClientVpnTargetNetworks sets the ClientVpnTargetNetworks field's value. +func (s *DescribeClientVpnTargetNetworksOutput) SetClientVpnTargetNetworks(v []*TargetNetwork) *DescribeClientVpnTargetNetworksOutput { + s.ClientVpnTargetNetworks = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeClientVpnTargetNetworksOutput) SetNextToken(v string) *DescribeClientVpnTargetNetworksOutput { + s.NextToken = &v + return s +} + +type DescribeConversionTasksInput struct { + _ struct{} `type:"structure"` + + // The conversion task IDs. + ConversionTaskIds []*string `locationName:"conversionTaskId" locationNameList:"item" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s DescribeConversionTasksInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeConversionTasksInput) GoString() string { + return s.String() +} + +// SetConversionTaskIds sets the ConversionTaskIds field's value. +func (s *DescribeConversionTasksInput) SetConversionTaskIds(v []*string) *DescribeConversionTasksInput { + s.ConversionTaskIds = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeConversionTasksInput) SetDryRun(v bool) *DescribeConversionTasksInput { + s.DryRun = &v + return s +} + +type DescribeConversionTasksOutput struct { + _ struct{} `type:"structure"` + + // Information about the conversion tasks. + ConversionTasks []*ConversionTask `locationName:"conversionTasks" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeConversionTasksOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeConversionTasksOutput) GoString() string { + return s.String() +} + +// SetConversionTasks sets the ConversionTasks field's value. +func (s *DescribeConversionTasksOutput) SetConversionTasks(v []*ConversionTask) *DescribeConversionTasksOutput { + s.ConversionTasks = v + return s +} + +// Contains the parameters for DescribeCustomerGateways. +type DescribeCustomerGatewaysInput struct { + _ struct{} `type:"structure"` + + // One or more customer gateway IDs. + // + // Default: Describes all your customer gateways. + CustomerGatewayIds []*string `locationName:"CustomerGatewayId" locationNameList:"CustomerGatewayId" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * bgp-asn - The customer gateway's Border Gateway Protocol (BGP) Autonomous + // System Number (ASN). + // + // * customer-gateway-id - The ID of the customer gateway. + // + // * ip-address - The IP address of the customer gateway's Internet-routable + // external interface. + // + // * state - The state of the customer gateway (pending | available | deleting + // | deleted). + // + // * type - The type of customer gateway. Currently, the only supported type + // is ipsec.1. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` +} + +// String returns the string representation +func (s DescribeCustomerGatewaysInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeCustomerGatewaysInput) GoString() string { + return s.String() +} + +// SetCustomerGatewayIds sets the CustomerGatewayIds field's value. +func (s *DescribeCustomerGatewaysInput) SetCustomerGatewayIds(v []*string) *DescribeCustomerGatewaysInput { + s.CustomerGatewayIds = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeCustomerGatewaysInput) SetDryRun(v bool) *DescribeCustomerGatewaysInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeCustomerGatewaysInput) SetFilters(v []*Filter) *DescribeCustomerGatewaysInput { + s.Filters = v + return s +} + +// Contains the output of DescribeCustomerGateways. +type DescribeCustomerGatewaysOutput struct { + _ struct{} `type:"structure"` + + // Information about one or more customer gateways. + CustomerGateways []*CustomerGateway `locationName:"customerGatewaySet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeCustomerGatewaysOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeCustomerGatewaysOutput) GoString() string { + return s.String() +} + +// SetCustomerGateways sets the CustomerGateways field's value. +func (s *DescribeCustomerGatewaysOutput) SetCustomerGateways(v []*CustomerGateway) *DescribeCustomerGatewaysOutput { + s.CustomerGateways = v + return s +} + +type DescribeDhcpOptionsInput struct { + _ struct{} `type:"structure"` + + // The IDs of one or more DHCP options sets. + // + // Default: Describes all your DHCP options sets. + DhcpOptionsIds []*string `locationName:"DhcpOptionsId" locationNameList:"DhcpOptionsId" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * dhcp-options-id - The ID of a DHCP options set. + // + // * key - The key for one of the options (for example, domain-name). + // + // * value - The value for one of the options. + // + // * owner-id - The ID of the AWS account that owns the DHCP options set. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeDhcpOptionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeDhcpOptionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeDhcpOptionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeDhcpOptionsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDhcpOptionsIds sets the DhcpOptionsIds field's value. +func (s *DescribeDhcpOptionsInput) SetDhcpOptionsIds(v []*string) *DescribeDhcpOptionsInput { + s.DhcpOptionsIds = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeDhcpOptionsInput) SetDryRun(v bool) *DescribeDhcpOptionsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeDhcpOptionsInput) SetFilters(v []*Filter) *DescribeDhcpOptionsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeDhcpOptionsInput) SetMaxResults(v int64) *DescribeDhcpOptionsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeDhcpOptionsInput) SetNextToken(v string) *DescribeDhcpOptionsInput { + s.NextToken = &v + return s +} + +type DescribeDhcpOptionsOutput struct { + _ struct{} `type:"structure"` + + // Information about one or more DHCP options sets. + DhcpOptions []*DhcpOptions `locationName:"dhcpOptionsSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeDhcpOptionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeDhcpOptionsOutput) GoString() string { + return s.String() +} + +// SetDhcpOptions sets the DhcpOptions field's value. +func (s *DescribeDhcpOptionsOutput) SetDhcpOptions(v []*DhcpOptions) *DescribeDhcpOptionsOutput { + s.DhcpOptions = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeDhcpOptionsOutput) SetNextToken(v string) *DescribeDhcpOptionsOutput { + s.NextToken = &v + return s +} + +type DescribeEgressOnlyInternetGatewaysInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more egress-only internet gateway IDs. + EgressOnlyInternetGatewayIds []*string `locationName:"EgressOnlyInternetGatewayId" locationNameList:"item" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeEgressOnlyInternetGatewaysInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeEgressOnlyInternetGatewaysInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeEgressOnlyInternetGatewaysInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeEgressOnlyInternetGatewaysInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeEgressOnlyInternetGatewaysInput) SetDryRun(v bool) *DescribeEgressOnlyInternetGatewaysInput { + s.DryRun = &v + return s +} + +// SetEgressOnlyInternetGatewayIds sets the EgressOnlyInternetGatewayIds field's value. +func (s *DescribeEgressOnlyInternetGatewaysInput) SetEgressOnlyInternetGatewayIds(v []*string) *DescribeEgressOnlyInternetGatewaysInput { + s.EgressOnlyInternetGatewayIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeEgressOnlyInternetGatewaysInput) SetMaxResults(v int64) *DescribeEgressOnlyInternetGatewaysInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeEgressOnlyInternetGatewaysInput) SetNextToken(v string) *DescribeEgressOnlyInternetGatewaysInput { + s.NextToken = &v + return s +} + +type DescribeEgressOnlyInternetGatewaysOutput struct { + _ struct{} `type:"structure"` + + // Information about the egress-only internet gateways. + EgressOnlyInternetGateways []*EgressOnlyInternetGateway `locationName:"egressOnlyInternetGatewaySet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeEgressOnlyInternetGatewaysOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeEgressOnlyInternetGatewaysOutput) GoString() string { + return s.String() +} + +// SetEgressOnlyInternetGateways sets the EgressOnlyInternetGateways field's value. +func (s *DescribeEgressOnlyInternetGatewaysOutput) SetEgressOnlyInternetGateways(v []*EgressOnlyInternetGateway) *DescribeEgressOnlyInternetGatewaysOutput { + s.EgressOnlyInternetGateways = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeEgressOnlyInternetGatewaysOutput) SetNextToken(v string) *DescribeEgressOnlyInternetGatewaysOutput { + s.NextToken = &v + return s +} + +type DescribeElasticGpusInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The Elastic Graphics accelerator IDs. + ElasticGpuIds []*string `locationName:"ElasticGpuId" locationNameList:"item" type:"list"` + + // The filters. + // + // * availability-zone - The Availability Zone in which the Elastic Graphics + // accelerator resides. + // + // * elastic-gpu-health - The status of the Elastic Graphics accelerator + // (OK | IMPAIRED). + // + // * elastic-gpu-state - The state of the Elastic Graphics accelerator (ATTACHED). + // + // * elastic-gpu-type - The type of Elastic Graphics accelerator; for example, + // eg1.medium. + // + // * instance-id - The ID of the instance to which the Elastic Graphics accelerator + // is associated. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. This + // value can be between 5 and 1000. + MaxResults *int64 `min:"10" type:"integer"` + + // The token to request the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeElasticGpusInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeElasticGpusInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeElasticGpusInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeElasticGpusInput"} + if s.MaxResults != nil && *s.MaxResults < 10 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 10)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeElasticGpusInput) SetDryRun(v bool) *DescribeElasticGpusInput { + s.DryRun = &v + return s +} + +// SetElasticGpuIds sets the ElasticGpuIds field's value. +func (s *DescribeElasticGpusInput) SetElasticGpuIds(v []*string) *DescribeElasticGpusInput { + s.ElasticGpuIds = v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeElasticGpusInput) SetFilters(v []*Filter) *DescribeElasticGpusInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeElasticGpusInput) SetMaxResults(v int64) *DescribeElasticGpusInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeElasticGpusInput) SetNextToken(v string) *DescribeElasticGpusInput { + s.NextToken = &v + return s +} + +type DescribeElasticGpusOutput struct { + _ struct{} `type:"structure"` + + // Information about the Elastic Graphics accelerators. + ElasticGpuSet []*ElasticGpus `locationName:"elasticGpuSet" locationNameList:"item" type:"list"` + + // The total number of items to return. If the total number of items available + // is more than the value specified in max-items then a Next-Token will be provided + // in the output that you can use to resume pagination. + MaxResults *int64 `locationName:"maxResults" type:"integer"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeElasticGpusOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeElasticGpusOutput) GoString() string { + return s.String() +} + +// SetElasticGpuSet sets the ElasticGpuSet field's value. +func (s *DescribeElasticGpusOutput) SetElasticGpuSet(v []*ElasticGpus) *DescribeElasticGpusOutput { + s.ElasticGpuSet = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeElasticGpusOutput) SetMaxResults(v int64) *DescribeElasticGpusOutput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeElasticGpusOutput) SetNextToken(v string) *DescribeElasticGpusOutput { + s.NextToken = &v + return s +} + +type DescribeExportImageTasksInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IDs of the export image tasks. + ExportImageTaskIds []*string `locationName:"ExportImageTaskId" locationNameList:"ExportImageTaskId" type:"list"` + + // Filter tasks using the task-state filter and one of the following values: + // active, completed, deleting, or deleted. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return in a single call. + MaxResults *int64 `min:"1" type:"integer"` + + // A token that indicates the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeExportImageTasksInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeExportImageTasksInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeExportImageTasksInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeExportImageTasksInput"} + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeExportImageTasksInput) SetDryRun(v bool) *DescribeExportImageTasksInput { + s.DryRun = &v + return s +} + +// SetExportImageTaskIds sets the ExportImageTaskIds field's value. +func (s *DescribeExportImageTasksInput) SetExportImageTaskIds(v []*string) *DescribeExportImageTasksInput { + s.ExportImageTaskIds = v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeExportImageTasksInput) SetFilters(v []*Filter) *DescribeExportImageTasksInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeExportImageTasksInput) SetMaxResults(v int64) *DescribeExportImageTasksInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeExportImageTasksInput) SetNextToken(v string) *DescribeExportImageTasksInput { + s.NextToken = &v + return s +} + +type DescribeExportImageTasksOutput struct { + _ struct{} `type:"structure"` + + // Information about the export image tasks. + ExportImageTasks []*ExportImageTask `locationName:"exportImageTaskSet" locationNameList:"item" type:"list"` + + // The token to use to get the next page of results. This value is null when + // there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeExportImageTasksOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeExportImageTasksOutput) GoString() string { + return s.String() +} + +// SetExportImageTasks sets the ExportImageTasks field's value. +func (s *DescribeExportImageTasksOutput) SetExportImageTasks(v []*ExportImageTask) *DescribeExportImageTasksOutput { + s.ExportImageTasks = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeExportImageTasksOutput) SetNextToken(v string) *DescribeExportImageTasksOutput { + s.NextToken = &v + return s +} + +type DescribeExportTasksInput struct { + _ struct{} `type:"structure"` + + // The export task IDs. + ExportTaskIds []*string `locationName:"exportTaskId" locationNameList:"ExportTaskId" type:"list"` +} + +// String returns the string representation +func (s DescribeExportTasksInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeExportTasksInput) GoString() string { + return s.String() +} + +// SetExportTaskIds sets the ExportTaskIds field's value. +func (s *DescribeExportTasksInput) SetExportTaskIds(v []*string) *DescribeExportTasksInput { + s.ExportTaskIds = v + return s +} + +type DescribeExportTasksOutput struct { + _ struct{} `type:"structure"` + + // Information about the export tasks. + ExportTasks []*ExportTask `locationName:"exportTaskSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeExportTasksOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeExportTasksOutput) GoString() string { + return s.String() +} + +// SetExportTasks sets the ExportTasks field's value. +func (s *DescribeExportTasksOutput) SetExportTasks(v []*ExportTask) *DescribeExportTasksOutput { + s.ExportTasks = v + return s +} + +// Describes fast snapshot restores for a snapshot. +type DescribeFastSnapshotRestoreSuccessItem struct { + _ struct{} `type:"structure"` + + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + + // The time at which fast snapshot restores entered the disabled state. + DisabledTime *time.Time `locationName:"disabledTime" type:"timestamp"` + + // The time at which fast snapshot restores entered the disabling state. + DisablingTime *time.Time `locationName:"disablingTime" type:"timestamp"` + + // The time at which fast snapshot restores entered the enabled state. + EnabledTime *time.Time `locationName:"enabledTime" type:"timestamp"` + + // The time at which fast snapshot restores entered the enabling state. + EnablingTime *time.Time `locationName:"enablingTime" type:"timestamp"` + + // The time at which fast snapshot restores entered the optimizing state. + OptimizingTime *time.Time `locationName:"optimizingTime" type:"timestamp"` + + // The alias of the snapshot owner. + OwnerAlias *string `locationName:"ownerAlias" type:"string"` + + // The ID of the AWS account that owns the snapshot. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The ID of the snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` + + // The state of fast snapshot restores. + State *string `locationName:"state" type:"string" enum:"FastSnapshotRestoreStateCode"` + + // The reason for the state transition. The possible values are as follows: + // + // * Client.UserInitiated - The state successfully transitioned to enabling + // or disabling. + // + // * Client.UserInitiated - Lifecycle state transition - The state successfully + // transitioned to optimizing, enabled, or disabled. + StateTransitionReason *string `locationName:"stateTransitionReason" type:"string"` +} + +// String returns the string representation +func (s DescribeFastSnapshotRestoreSuccessItem) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFastSnapshotRestoreSuccessItem) GoString() string { + return s.String() +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetAvailabilityZone(v string) *DescribeFastSnapshotRestoreSuccessItem { + s.AvailabilityZone = &v + return s +} + +// SetDisabledTime sets the DisabledTime field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetDisabledTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { + s.DisabledTime = &v + return s +} + +// SetDisablingTime sets the DisablingTime field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetDisablingTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { + s.DisablingTime = &v + return s +} + +// SetEnabledTime sets the EnabledTime field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetEnabledTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { + s.EnabledTime = &v + return s +} + +// SetEnablingTime sets the EnablingTime field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetEnablingTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { + s.EnablingTime = &v + return s +} + +// SetOptimizingTime sets the OptimizingTime field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetOptimizingTime(v time.Time) *DescribeFastSnapshotRestoreSuccessItem { + s.OptimizingTime = &v + return s +} + +// SetOwnerAlias sets the OwnerAlias field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetOwnerAlias(v string) *DescribeFastSnapshotRestoreSuccessItem { + s.OwnerAlias = &v + return s +} + +// SetOwnerId sets the OwnerId field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetOwnerId(v string) *DescribeFastSnapshotRestoreSuccessItem { + s.OwnerId = &v + return s +} + +// SetSnapshotId sets the SnapshotId field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetSnapshotId(v string) *DescribeFastSnapshotRestoreSuccessItem { + s.SnapshotId = &v + return s +} + +// SetState sets the State field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetState(v string) *DescribeFastSnapshotRestoreSuccessItem { + s.State = &v + return s +} + +// SetStateTransitionReason sets the StateTransitionReason field's value. +func (s *DescribeFastSnapshotRestoreSuccessItem) SetStateTransitionReason(v string) *DescribeFastSnapshotRestoreSuccessItem { + s.StateTransitionReason = &v + return s +} + +type DescribeFastSnapshotRestoresInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The filters. The possible values are: + // + // * availability-zone: The Availability Zone of the snapshot. + // + // * owner-id: The ID of the AWS account that owns the snapshot. + // + // * snapshot-id: The ID of the snapshot. + // + // * state: The state of fast snapshot restores for the snapshot (enabling + // | optimizing | enabled | disabling | disabled). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeFastSnapshotRestoresInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFastSnapshotRestoresInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeFastSnapshotRestoresInput) SetDryRun(v bool) *DescribeFastSnapshotRestoresInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeFastSnapshotRestoresInput) SetFilters(v []*Filter) *DescribeFastSnapshotRestoresInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeFastSnapshotRestoresInput) SetMaxResults(v int64) *DescribeFastSnapshotRestoresInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFastSnapshotRestoresInput) SetNextToken(v string) *DescribeFastSnapshotRestoresInput { + s.NextToken = &v + return s +} + +type DescribeFastSnapshotRestoresOutput struct { + _ struct{} `type:"structure"` + + // Information about the state of fast snapshot restores. + FastSnapshotRestores []*DescribeFastSnapshotRestoreSuccessItem `locationName:"fastSnapshotRestoreSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeFastSnapshotRestoresOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFastSnapshotRestoresOutput) GoString() string { + return s.String() +} + +// SetFastSnapshotRestores sets the FastSnapshotRestores field's value. +func (s *DescribeFastSnapshotRestoresOutput) SetFastSnapshotRestores(v []*DescribeFastSnapshotRestoreSuccessItem) *DescribeFastSnapshotRestoresOutput { + s.FastSnapshotRestores = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFastSnapshotRestoresOutput) SetNextToken(v string) *DescribeFastSnapshotRestoresOutput { + s.NextToken = &v + return s +} + +// Describes the instances that could not be launched by the fleet. +type DescribeFleetError struct { + _ struct{} `type:"structure"` + + // The error code that indicates why the instance could not be launched. For + // more information about error codes, see Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html). + ErrorCode *string `locationName:"errorCode" type:"string"` + + // The error message that describes why the instance could not be launched. + // For more information about error messages, see ee Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html). + ErrorMessage *string `locationName:"errorMessage" type:"string"` + + // The launch templates and overrides that were used for launching the instances. + // Any parameters that you specify in the Overrides override the same parameters + // in the launch template. + LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse `locationName:"launchTemplateAndOverrides" type:"structure"` + + // Indicates if the instance that could not be launched was a Spot Instance + // or On-Demand Instance. + Lifecycle *string `locationName:"lifecycle" type:"string" enum:"InstanceLifecycle"` +} + +// String returns the string representation +func (s DescribeFleetError) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFleetError) GoString() string { + return s.String() +} + +// SetErrorCode sets the ErrorCode field's value. +func (s *DescribeFleetError) SetErrorCode(v string) *DescribeFleetError { + s.ErrorCode = &v + return s +} + +// SetErrorMessage sets the ErrorMessage field's value. +func (s *DescribeFleetError) SetErrorMessage(v string) *DescribeFleetError { + s.ErrorMessage = &v + return s +} + +// SetLaunchTemplateAndOverrides sets the LaunchTemplateAndOverrides field's value. +func (s *DescribeFleetError) SetLaunchTemplateAndOverrides(v *LaunchTemplateAndOverridesResponse) *DescribeFleetError { + s.LaunchTemplateAndOverrides = v + return s +} + +// SetLifecycle sets the Lifecycle field's value. +func (s *DescribeFleetError) SetLifecycle(v string) *DescribeFleetError { + s.Lifecycle = &v + return s +} + +type DescribeFleetHistoryInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The type of events to describe. By default, all events are described. + EventType *string `type:"string" enum:"FleetEventType"` + + // The ID of the EC2 Fleet. + // + // FleetId is a required field + FleetId *string `type:"string" required:"true"` + + // The maximum number of results to return in a single call. Specify a value + // between 1 and 1000. The default value is 1000. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `type:"integer"` + + // The token for the next set of results. + NextToken *string `type:"string"` + + // The start date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // + // StartTime is a required field + StartTime *time.Time `type:"timestamp" required:"true"` +} + +// String returns the string representation +func (s DescribeFleetHistoryInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFleetHistoryInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeFleetHistoryInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeFleetHistoryInput"} + if s.FleetId == nil { + invalidParams.Add(request.NewErrParamRequired("FleetId")) + } + if s.StartTime == nil { + invalidParams.Add(request.NewErrParamRequired("StartTime")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeFleetHistoryInput) SetDryRun(v bool) *DescribeFleetHistoryInput { + s.DryRun = &v + return s +} + +// SetEventType sets the EventType field's value. +func (s *DescribeFleetHistoryInput) SetEventType(v string) *DescribeFleetHistoryInput { + s.EventType = &v + return s +} + +// SetFleetId sets the FleetId field's value. +func (s *DescribeFleetHistoryInput) SetFleetId(v string) *DescribeFleetHistoryInput { + s.FleetId = &v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeFleetHistoryInput) SetMaxResults(v int64) *DescribeFleetHistoryInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFleetHistoryInput) SetNextToken(v string) *DescribeFleetHistoryInput { + s.NextToken = &v + return s +} + +// SetStartTime sets the StartTime field's value. +func (s *DescribeFleetHistoryInput) SetStartTime(v time.Time) *DescribeFleetHistoryInput { + s.StartTime = &v + return s +} + +type DescribeFleetHistoryOutput struct { + _ struct{} `type:"structure"` + + // The ID of the EC Fleet. + FleetId *string `locationName:"fleetId" type:"string"` + + // Information about the events in the history of the EC2 Fleet. + HistoryRecords []*HistoryRecordEntry `locationName:"historyRecordSet" locationNameList:"item" type:"list"` + + // The last date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // All records up to this time were retrieved. + // + // If nextToken indicates that there are more results, this value is not present. + LastEvaluatedTime *time.Time `locationName:"lastEvaluatedTime" type:"timestamp"` + + // The token for the next set of results. + NextToken *string `locationName:"nextToken" type:"string"` + + // The start date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + StartTime *time.Time `locationName:"startTime" type:"timestamp"` +} + +// String returns the string representation +func (s DescribeFleetHistoryOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFleetHistoryOutput) GoString() string { + return s.String() +} + +// SetFleetId sets the FleetId field's value. +func (s *DescribeFleetHistoryOutput) SetFleetId(v string) *DescribeFleetHistoryOutput { + s.FleetId = &v + return s +} + +// SetHistoryRecords sets the HistoryRecords field's value. +func (s *DescribeFleetHistoryOutput) SetHistoryRecords(v []*HistoryRecordEntry) *DescribeFleetHistoryOutput { + s.HistoryRecords = v + return s +} + +// SetLastEvaluatedTime sets the LastEvaluatedTime field's value. +func (s *DescribeFleetHistoryOutput) SetLastEvaluatedTime(v time.Time) *DescribeFleetHistoryOutput { + s.LastEvaluatedTime = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFleetHistoryOutput) SetNextToken(v string) *DescribeFleetHistoryOutput { + s.NextToken = &v + return s +} + +// SetStartTime sets the StartTime field's value. +func (s *DescribeFleetHistoryOutput) SetStartTime(v time.Time) *DescribeFleetHistoryOutput { + s.StartTime = &v + return s +} + +type DescribeFleetInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The filters. + // + // * instance-type - The instance type. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The ID of the EC2 Fleet. + // + // FleetId is a required field + FleetId *string `type:"string" required:"true"` + + // The maximum number of results to return in a single call. Specify a value + // between 1 and 1000. The default value is 1000. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `type:"integer"` + + // The token for the next set of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeFleetInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFleetInstancesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeFleetInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeFleetInstancesInput"} + if s.FleetId == nil { + invalidParams.Add(request.NewErrParamRequired("FleetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeFleetInstancesInput) SetDryRun(v bool) *DescribeFleetInstancesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeFleetInstancesInput) SetFilters(v []*Filter) *DescribeFleetInstancesInput { + s.Filters = v + return s +} + +// SetFleetId sets the FleetId field's value. +func (s *DescribeFleetInstancesInput) SetFleetId(v string) *DescribeFleetInstancesInput { + s.FleetId = &v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeFleetInstancesInput) SetMaxResults(v int64) *DescribeFleetInstancesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFleetInstancesInput) SetNextToken(v string) *DescribeFleetInstancesInput { + s.NextToken = &v + return s +} + +type DescribeFleetInstancesOutput struct { + _ struct{} `type:"structure"` + + // The running instances. This list is refreshed periodically and might be out + // of date. + ActiveInstances []*ActiveInstance `locationName:"activeInstanceSet" locationNameList:"item" type:"list"` + + // The ID of the EC2 Fleet. + FleetId *string `locationName:"fleetId" type:"string"` + + // The token for the next set of results. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeFleetInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFleetInstancesOutput) GoString() string { + return s.String() +} + +// SetActiveInstances sets the ActiveInstances field's value. +func (s *DescribeFleetInstancesOutput) SetActiveInstances(v []*ActiveInstance) *DescribeFleetInstancesOutput { + s.ActiveInstances = v + return s +} + +// SetFleetId sets the FleetId field's value. +func (s *DescribeFleetInstancesOutput) SetFleetId(v string) *DescribeFleetInstancesOutput { + s.FleetId = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFleetInstancesOutput) SetNextToken(v string) *DescribeFleetInstancesOutput { + s.NextToken = &v + return s +} + +type DescribeFleetsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The filters. + // + // * activity-status - The progress of the EC2 Fleet ( error | pending-fulfillment + // | pending-termination | fulfilled). + // + // * excess-capacity-termination-policy - Indicates whether to terminate + // running instances if the target capacity is decreased below the current + // EC2 Fleet size (true | false). + // + // * fleet-state - The state of the EC2 Fleet (submitted | active | deleted + // | failed | deleted-running | deleted-terminating | modifying). + // + // * replace-unhealthy-instances - Indicates whether EC2 Fleet should replace + // unhealthy instances (true | false). + // + // * type - The type of request (instant | request | maintain). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The ID of the EC2 Fleets. + FleetIds []*string `locationName:"FleetId" type:"list"` + + // The maximum number of results to return in a single call. Specify a value + // between 1 and 1000. The default value is 1000. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `type:"integer"` + + // The token for the next set of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeFleetsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFleetsInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeFleetsInput) SetDryRun(v bool) *DescribeFleetsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeFleetsInput) SetFilters(v []*Filter) *DescribeFleetsInput { + s.Filters = v + return s +} + +// SetFleetIds sets the FleetIds field's value. +func (s *DescribeFleetsInput) SetFleetIds(v []*string) *DescribeFleetsInput { + s.FleetIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeFleetsInput) SetMaxResults(v int64) *DescribeFleetsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFleetsInput) SetNextToken(v string) *DescribeFleetsInput { + s.NextToken = &v + return s +} + +// Describes the instances that were launched by the fleet. +type DescribeFleetsInstances struct { + _ struct{} `type:"structure"` + + // The IDs of the instances. + InstanceIds []*string `locationName:"instanceIds" locationNameList:"item" type:"list"` + + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + + // The launch templates and overrides that were used for launching the instances. + // Any parameters that you specify in the Overrides override the same parameters + // in the launch template. + LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse `locationName:"launchTemplateAndOverrides" type:"structure"` + + // Indicates if the instance that was launched is a Spot Instance or On-Demand + // Instance. + Lifecycle *string `locationName:"lifecycle" type:"string" enum:"InstanceLifecycle"` + + // The value is Windows for Windows instances; otherwise blank. + Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` +} + +// String returns the string representation +func (s DescribeFleetsInstances) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFleetsInstances) GoString() string { + return s.String() +} + +// SetInstanceIds sets the InstanceIds field's value. +func (s *DescribeFleetsInstances) SetInstanceIds(v []*string) *DescribeFleetsInstances { + s.InstanceIds = v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *DescribeFleetsInstances) SetInstanceType(v string) *DescribeFleetsInstances { + s.InstanceType = &v + return s +} + +// SetLaunchTemplateAndOverrides sets the LaunchTemplateAndOverrides field's value. +func (s *DescribeFleetsInstances) SetLaunchTemplateAndOverrides(v *LaunchTemplateAndOverridesResponse) *DescribeFleetsInstances { + s.LaunchTemplateAndOverrides = v + return s +} + +// SetLifecycle sets the Lifecycle field's value. +func (s *DescribeFleetsInstances) SetLifecycle(v string) *DescribeFleetsInstances { + s.Lifecycle = &v + return s +} + +// SetPlatform sets the Platform field's value. +func (s *DescribeFleetsInstances) SetPlatform(v string) *DescribeFleetsInstances { + s.Platform = &v + return s +} + +type DescribeFleetsOutput struct { + _ struct{} `type:"structure"` + + // Information about the EC2 Fleets. + Fleets []*FleetData `locationName:"fleetSet" locationNameList:"item" type:"list"` + + // The token for the next set of results. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeFleetsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFleetsOutput) GoString() string { + return s.String() +} + +// SetFleets sets the Fleets field's value. +func (s *DescribeFleetsOutput) SetFleets(v []*FleetData) *DescribeFleetsOutput { + s.Fleets = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFleetsOutput) SetNextToken(v string) *DescribeFleetsOutput { + s.NextToken = &v + return s +} + +type DescribeFlowLogsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. + // + // * deliver-log-status - The status of the logs delivery (SUCCESS | FAILED). + // + // * log-destination-type - The type of destination to which the flow log + // publishes data. Possible destination types include cloud-watch-logs and + // S3. + // + // * flow-log-id - The ID of the flow log. + // + // * log-group-name - The name of the log group. + // + // * resource-id - The ID of the VPC, subnet, or network interface. + // + // * traffic-type - The type of traffic (ACCEPT | REJECT | ALL). + Filter []*Filter `locationNameList:"Filter" type:"list"` + + // One or more flow log IDs. + // + // Constraint: Maximum of 1000 flow log IDs. + FlowLogIds []*string `locationName:"FlowLogId" locationNameList:"item" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeFlowLogsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFlowLogsInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeFlowLogsInput) SetDryRun(v bool) *DescribeFlowLogsInput { + s.DryRun = &v + return s +} + +// SetFilter sets the Filter field's value. +func (s *DescribeFlowLogsInput) SetFilter(v []*Filter) *DescribeFlowLogsInput { + s.Filter = v + return s +} + +// SetFlowLogIds sets the FlowLogIds field's value. +func (s *DescribeFlowLogsInput) SetFlowLogIds(v []*string) *DescribeFlowLogsInput { + s.FlowLogIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeFlowLogsInput) SetMaxResults(v int64) *DescribeFlowLogsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFlowLogsInput) SetNextToken(v string) *DescribeFlowLogsInput { + s.NextToken = &v + return s +} + +type DescribeFlowLogsOutput struct { + _ struct{} `type:"structure"` + + // Information about the flow logs. + FlowLogs []*FlowLog `locationName:"flowLogSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeFlowLogsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFlowLogsOutput) GoString() string { + return s.String() +} + +// SetFlowLogs sets the FlowLogs field's value. +func (s *DescribeFlowLogsOutput) SetFlowLogs(v []*FlowLog) *DescribeFlowLogsOutput { + s.FlowLogs = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFlowLogsOutput) SetNextToken(v string) *DescribeFlowLogsOutput { + s.NextToken = &v + return s +} + +type DescribeFpgaImageAttributeInput struct { + _ struct{} `type:"structure"` + + // The AFI attribute. + // + // Attribute is a required field + Attribute *string `type:"string" required:"true" enum:"FpgaImageAttributeName"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the AFI. + // + // FpgaImageId is a required field + FpgaImageId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeFpgaImageAttributeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFpgaImageAttributeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeFpgaImageAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeFpgaImageAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) + } + if s.FpgaImageId == nil { + invalidParams.Add(request.NewErrParamRequired("FpgaImageId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttribute sets the Attribute field's value. +func (s *DescribeFpgaImageAttributeInput) SetAttribute(v string) *DescribeFpgaImageAttributeInput { + s.Attribute = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeFpgaImageAttributeInput) SetDryRun(v bool) *DescribeFpgaImageAttributeInput { + s.DryRun = &v + return s +} + +// SetFpgaImageId sets the FpgaImageId field's value. +func (s *DescribeFpgaImageAttributeInput) SetFpgaImageId(v string) *DescribeFpgaImageAttributeInput { + s.FpgaImageId = &v + return s +} + +type DescribeFpgaImageAttributeOutput struct { + _ struct{} `type:"structure"` + + // Information about the attribute. + FpgaImageAttribute *FpgaImageAttribute `locationName:"fpgaImageAttribute" type:"structure"` +} + +// String returns the string representation +func (s DescribeFpgaImageAttributeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFpgaImageAttributeOutput) GoString() string { + return s.String() +} + +// SetFpgaImageAttribute sets the FpgaImageAttribute field's value. +func (s *DescribeFpgaImageAttributeOutput) SetFpgaImageAttribute(v *FpgaImageAttribute) *DescribeFpgaImageAttributeOutput { + s.FpgaImageAttribute = v + return s +} + +type DescribeFpgaImagesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The filters. + // + // * create-time - The creation time of the AFI. + // + // * fpga-image-id - The FPGA image identifier (AFI ID). + // + // * fpga-image-global-id - The global FPGA image identifier (AGFI ID). + // + // * name - The name of the AFI. + // + // * owner-id - The AWS account ID of the AFI owner. + // + // * product-code - The product code. + // + // * shell-version - The version of the AWS Shell that was used to create + // the bitstream. + // + // * state - The state of the AFI (pending | failed | available | unavailable). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * update-time - The time of the most recent update. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The AFI IDs. + FpgaImageIds []*string `locationName:"FpgaImageId" locationNameList:"item" type:"list"` + + // The maximum number of results to return in a single call. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` + + // Filters the AFI by owner. Specify an AWS account ID, self (owner is the sender + // of the request), or an AWS owner alias (valid values are amazon | aws-marketplace). + Owners []*string `locationName:"Owner" locationNameList:"Owner" type:"list"` +} + +// String returns the string representation +func (s DescribeFpgaImagesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFpgaImagesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeFpgaImagesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeFpgaImagesInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeFpgaImagesInput) SetDryRun(v bool) *DescribeFpgaImagesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeFpgaImagesInput) SetFilters(v []*Filter) *DescribeFpgaImagesInput { + s.Filters = v + return s +} + +// SetFpgaImageIds sets the FpgaImageIds field's value. +func (s *DescribeFpgaImagesInput) SetFpgaImageIds(v []*string) *DescribeFpgaImagesInput { + s.FpgaImageIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeFpgaImagesInput) SetMaxResults(v int64) *DescribeFpgaImagesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFpgaImagesInput) SetNextToken(v string) *DescribeFpgaImagesInput { + s.NextToken = &v + return s +} + +// SetOwners sets the Owners field's value. +func (s *DescribeFpgaImagesInput) SetOwners(v []*string) *DescribeFpgaImagesInput { + s.Owners = v + return s +} + +type DescribeFpgaImagesOutput struct { + _ struct{} `type:"structure"` + + // Information about the FPGA images. + FpgaImages []*FpgaImage `locationName:"fpgaImageSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeFpgaImagesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeFpgaImagesOutput) GoString() string { + return s.String() +} + +// SetFpgaImages sets the FpgaImages field's value. +func (s *DescribeFpgaImagesOutput) SetFpgaImages(v []*FpgaImage) *DescribeFpgaImagesOutput { + s.FpgaImages = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeFpgaImagesOutput) SetNextToken(v string) *DescribeFpgaImagesOutput { + s.NextToken = &v + return s +} + +type DescribeHostReservationOfferingsInput struct { + _ struct{} `type:"structure"` + + // The filters. + // + // * instance-family - The instance family of the offering (for example, + // m4). + // + // * payment-option - The payment option (NoUpfront | PartialUpfront | AllUpfront). + Filter []*Filter `locationNameList:"Filter" type:"list"` + + // This is the maximum duration of the reservation to purchase, specified in + // seconds. Reservations are available in one-year and three-year terms. The + // number of seconds specified must be the number of seconds in a year (365x24x60x60) + // times one of the supported durations (1 or 3). For example, specify 94608000 + // for three years. + MaxDuration *int64 `type:"integer"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the returned + // nextToken value. This value can be between 5 and 500. If maxResults is given + // a larger value than 500, you receive an error. + MaxResults *int64 `min:"5" type:"integer"` + + // This is the minimum duration of the reservation you'd like to purchase, specified + // in seconds. Reservations are available in one-year and three-year terms. + // The number of seconds specified must be the number of seconds in a year (365x24x60x60) + // times one of the supported durations (1 or 3). For example, specify 31536000 + // for one year. + MinDuration *int64 `type:"integer"` + + // The token to use to retrieve the next page of results. + NextToken *string `type:"string"` + + // The ID of the reservation offering. + OfferingId *string `type:"string"` +} + +// String returns the string representation +func (s DescribeHostReservationOfferingsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeHostReservationOfferingsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeHostReservationOfferingsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeHostReservationOfferingsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilter sets the Filter field's value. +func (s *DescribeHostReservationOfferingsInput) SetFilter(v []*Filter) *DescribeHostReservationOfferingsInput { + s.Filter = v + return s +} + +// SetMaxDuration sets the MaxDuration field's value. +func (s *DescribeHostReservationOfferingsInput) SetMaxDuration(v int64) *DescribeHostReservationOfferingsInput { + s.MaxDuration = &v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeHostReservationOfferingsInput) SetMaxResults(v int64) *DescribeHostReservationOfferingsInput { + s.MaxResults = &v + return s +} + +// SetMinDuration sets the MinDuration field's value. +func (s *DescribeHostReservationOfferingsInput) SetMinDuration(v int64) *DescribeHostReservationOfferingsInput { + s.MinDuration = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeHostReservationOfferingsInput) SetNextToken(v string) *DescribeHostReservationOfferingsInput { + s.NextToken = &v + return s +} + +// SetOfferingId sets the OfferingId field's value. +func (s *DescribeHostReservationOfferingsInput) SetOfferingId(v string) *DescribeHostReservationOfferingsInput { + s.OfferingId = &v + return s +} + +type DescribeHostReservationOfferingsOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the offerings. + OfferingSet []*HostOffering `locationName:"offeringSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeHostReservationOfferingsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeHostReservationOfferingsOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeHostReservationOfferingsOutput) SetNextToken(v string) *DescribeHostReservationOfferingsOutput { + s.NextToken = &v + return s +} + +// SetOfferingSet sets the OfferingSet field's value. +func (s *DescribeHostReservationOfferingsOutput) SetOfferingSet(v []*HostOffering) *DescribeHostReservationOfferingsOutput { + s.OfferingSet = v + return s +} + +type DescribeHostReservationsInput struct { + _ struct{} `type:"structure"` + + // The filters. + // + // * instance-family - The instance family (for example, m4). + // + // * payment-option - The payment option (NoUpfront | PartialUpfront | AllUpfront). + // + // * state - The state of the reservation (payment-pending | payment-failed + // | active | retired). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filter []*Filter `locationNameList:"Filter" type:"list"` + + // The host reservation IDs. + HostReservationIdSet []*string `locationNameList:"item" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the returned + // nextToken value. This value can be between 5 and 500. If maxResults is given + // a larger value than 500, you receive an error. + MaxResults *int64 `type:"integer"` + + // The token to use to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeHostReservationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeHostReservationsInput) GoString() string { + return s.String() +} + +// SetFilter sets the Filter field's value. +func (s *DescribeHostReservationsInput) SetFilter(v []*Filter) *DescribeHostReservationsInput { + s.Filter = v + return s +} + +// SetHostReservationIdSet sets the HostReservationIdSet field's value. +func (s *DescribeHostReservationsInput) SetHostReservationIdSet(v []*string) *DescribeHostReservationsInput { + s.HostReservationIdSet = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeHostReservationsInput) SetMaxResults(v int64) *DescribeHostReservationsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeHostReservationsInput) SetNextToken(v string) *DescribeHostReservationsInput { + s.NextToken = &v + return s +} + +type DescribeHostReservationsOutput struct { + _ struct{} `type:"structure"` + + // Details about the reservation's configuration. + HostReservationSet []*HostReservation `locationName:"hostReservationSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeHostReservationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeHostReservationsOutput) GoString() string { + return s.String() +} + +// SetHostReservationSet sets the HostReservationSet field's value. +func (s *DescribeHostReservationsOutput) SetHostReservationSet(v []*HostReservation) *DescribeHostReservationsOutput { + s.HostReservationSet = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeHostReservationsOutput) SetNextToken(v string) *DescribeHostReservationsOutput { + s.NextToken = &v + return s +} + +type DescribeHostsInput struct { + _ struct{} `type:"structure"` + + // The filters. + // + // * auto-placement - Whether auto-placement is enabled or disabled (on | + // off). + // + // * availability-zone - The Availability Zone of the host. + // + // * client-token - The idempotency token that you provided when you allocated + // the host. + // + // * host-reservation-id - The ID of the reservation assigned to this host. + // + // * instance-type - The instance type size that the Dedicated Host is configured + // to support. + // + // * state - The allocation state of the Dedicated Host (available | under-assessment + // | permanent-failure | released | released-permanent-failure). + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filter []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` + + // The IDs of the Dedicated Hosts. The IDs are used for targeted instance launches. + HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the returned + // nextToken value. This value can be between 5 and 500. If maxResults is given + // a larger value than 500, you receive an error. + // + // You cannot specify this parameter and the host IDs parameter in the same + // request. + MaxResults *int64 `locationName:"maxResults" type:"integer"` + + // The token to use to retrieve the next page of results. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeHostsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeHostsInput) GoString() string { + return s.String() +} + +// SetFilter sets the Filter field's value. +func (s *DescribeHostsInput) SetFilter(v []*Filter) *DescribeHostsInput { + s.Filter = v + return s +} + +// SetHostIds sets the HostIds field's value. +func (s *DescribeHostsInput) SetHostIds(v []*string) *DescribeHostsInput { + s.HostIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeHostsInput) SetMaxResults(v int64) *DescribeHostsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeHostsInput) SetNextToken(v string) *DescribeHostsInput { + s.NextToken = &v + return s +} + +type DescribeHostsOutput struct { + _ struct{} `type:"structure"` + + // Information about the Dedicated Hosts. + Hosts []*Host `locationName:"hostSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeHostsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeHostsOutput) GoString() string { + return s.String() +} + +// SetHosts sets the Hosts field's value. +func (s *DescribeHostsOutput) SetHosts(v []*Host) *DescribeHostsOutput { + s.Hosts = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeHostsOutput) SetNextToken(v string) *DescribeHostsOutput { + s.NextToken = &v + return s +} + +type DescribeIamInstanceProfileAssociationsInput struct { + _ struct{} `type:"structure"` + + // The IAM instance profile associations. + AssociationIds []*string `locationName:"AssociationId" locationNameList:"AssociationId" type:"list"` + + // The filters. + // + // * instance-id - The ID of the instance. + // + // * state - The state of the association (associating | associated | disassociating + // | disassociated). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to request the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeIamInstanceProfileAssociationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeIamInstanceProfileAssociationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeIamInstanceProfileAssociationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeIamInstanceProfileAssociationsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAssociationIds sets the AssociationIds field's value. +func (s *DescribeIamInstanceProfileAssociationsInput) SetAssociationIds(v []*string) *DescribeIamInstanceProfileAssociationsInput { + s.AssociationIds = v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeIamInstanceProfileAssociationsInput) SetFilters(v []*Filter) *DescribeIamInstanceProfileAssociationsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeIamInstanceProfileAssociationsInput) SetMaxResults(v int64) *DescribeIamInstanceProfileAssociationsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeIamInstanceProfileAssociationsInput) SetNextToken(v string) *DescribeIamInstanceProfileAssociationsInput { + s.NextToken = &v + return s +} + +type DescribeIamInstanceProfileAssociationsOutput struct { + _ struct{} `type:"structure"` + + // Information about the IAM instance profile associations. + IamInstanceProfileAssociations []*IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociationSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeIamInstanceProfileAssociationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeIamInstanceProfileAssociationsOutput) GoString() string { + return s.String() +} + +// SetIamInstanceProfileAssociations sets the IamInstanceProfileAssociations field's value. +func (s *DescribeIamInstanceProfileAssociationsOutput) SetIamInstanceProfileAssociations(v []*IamInstanceProfileAssociation) *DescribeIamInstanceProfileAssociationsOutput { + s.IamInstanceProfileAssociations = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeIamInstanceProfileAssociationsOutput) SetNextToken(v string) *DescribeIamInstanceProfileAssociationsOutput { + s.NextToken = &v + return s +} + +type DescribeIdFormatInput struct { + _ struct{} `type:"structure"` + + // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options + // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log + // | image | import-task | instance | internet-gateway | network-acl | network-acl-association + // | network-interface | network-interface-attachment | prefix-list | reservation + // | route-table | route-table-association | security-group | snapshot | subnet + // | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association + // | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway + Resource *string `type:"string"` +} + +// String returns the string representation +func (s DescribeIdFormatInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeIdFormatInput) GoString() string { + return s.String() +} + +// SetResource sets the Resource field's value. +func (s *DescribeIdFormatInput) SetResource(v string) *DescribeIdFormatInput { + s.Resource = &v + return s +} + +type DescribeIdFormatOutput struct { + _ struct{} `type:"structure"` + + // Information about the ID format for the resource. + Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeIdFormatOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeIdFormatOutput) GoString() string { + return s.String() +} + +// SetStatuses sets the Statuses field's value. +func (s *DescribeIdFormatOutput) SetStatuses(v []*IdFormat) *DescribeIdFormatOutput { + s.Statuses = v + return s +} + +type DescribeIdentityIdFormatInput struct { + _ struct{} `type:"structure"` + + // The ARN of the principal, which can be an IAM role, IAM user, or the root + // user. + // + // PrincipalArn is a required field + PrincipalArn *string `locationName:"principalArn" type:"string" required:"true"` + + // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options + // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log + // | image | import-task | instance | internet-gateway | network-acl | network-acl-association + // | network-interface | network-interface-attachment | prefix-list | reservation + // | route-table | route-table-association | security-group | snapshot | subnet + // | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association + // | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway + Resource *string `locationName:"resource" type:"string"` +} + +// String returns the string representation +func (s DescribeIdentityIdFormatInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeIdentityIdFormatInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeIdentityIdFormatInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeIdentityIdFormatInput"} + if s.PrincipalArn == nil { + invalidParams.Add(request.NewErrParamRequired("PrincipalArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetPrincipalArn sets the PrincipalArn field's value. +func (s *DescribeIdentityIdFormatInput) SetPrincipalArn(v string) *DescribeIdentityIdFormatInput { + s.PrincipalArn = &v + return s +} + +// SetResource sets the Resource field's value. +func (s *DescribeIdentityIdFormatInput) SetResource(v string) *DescribeIdentityIdFormatInput { + s.Resource = &v + return s +} + +type DescribeIdentityIdFormatOutput struct { + _ struct{} `type:"structure"` + + // Information about the ID format for the resources. + Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeIdentityIdFormatOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeIdentityIdFormatOutput) GoString() string { + return s.String() +} + +// SetStatuses sets the Statuses field's value. +func (s *DescribeIdentityIdFormatOutput) SetStatuses(v []*IdFormat) *DescribeIdentityIdFormatOutput { + s.Statuses = v + return s +} + +// Contains the parameters for DescribeImageAttribute. +type DescribeImageAttributeInput struct { + _ struct{} `type:"structure"` + + // The AMI attribute. + // + // Note: Depending on your account privileges, the blockDeviceMapping attribute + // may return a Client.AuthFailure error. If this happens, use DescribeImages + // to get information about the block device mapping for the AMI. + // + // Attribute is a required field + Attribute *string `type:"string" required:"true" enum:"ImageAttributeName"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the AMI. + // + // ImageId is a required field + ImageId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeImageAttributeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeImageAttributeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeImageAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeImageAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) + } + if s.ImageId == nil { + invalidParams.Add(request.NewErrParamRequired("ImageId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttribute sets the Attribute field's value. +func (s *DescribeImageAttributeInput) SetAttribute(v string) *DescribeImageAttributeInput { + s.Attribute = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeImageAttributeInput) SetDryRun(v bool) *DescribeImageAttributeInput { + s.DryRun = &v + return s +} + +// SetImageId sets the ImageId field's value. +func (s *DescribeImageAttributeInput) SetImageId(v string) *DescribeImageAttributeInput { + s.ImageId = &v + return s +} + +// Describes an image attribute. +type DescribeImageAttributeOutput struct { + _ struct{} `type:"structure"` + + // The block device mapping entries. + BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` + + // A description for the AMI. + Description *AttributeValue `locationName:"description" type:"structure"` + + // The ID of the AMI. + ImageId *string `locationName:"imageId" type:"string"` + + // The kernel ID. + KernelId *AttributeValue `locationName:"kernel" type:"structure"` + + // The launch permissions. + LaunchPermissions []*LaunchPermission `locationName:"launchPermission" locationNameList:"item" type:"list"` + + // The product codes. + ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + + // The RAM disk ID. + RamdiskId *AttributeValue `locationName:"ramdisk" type:"structure"` + + // Indicates whether enhanced networking with the Intel 82599 Virtual Function + // interface is enabled. + SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` +} + +// String returns the string representation +func (s DescribeImageAttributeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeImageAttributeOutput) GoString() string { + return s.String() +} + +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *DescribeImageAttributeOutput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *DescribeImageAttributeOutput { + s.BlockDeviceMappings = v + return s +} + +// SetDescription sets the Description field's value. +func (s *DescribeImageAttributeOutput) SetDescription(v *AttributeValue) *DescribeImageAttributeOutput { + s.Description = v + return s +} + +// SetImageId sets the ImageId field's value. +func (s *DescribeImageAttributeOutput) SetImageId(v string) *DescribeImageAttributeOutput { + s.ImageId = &v + return s +} + +// SetKernelId sets the KernelId field's value. +func (s *DescribeImageAttributeOutput) SetKernelId(v *AttributeValue) *DescribeImageAttributeOutput { + s.KernelId = v + return s +} + +// SetLaunchPermissions sets the LaunchPermissions field's value. +func (s *DescribeImageAttributeOutput) SetLaunchPermissions(v []*LaunchPermission) *DescribeImageAttributeOutput { + s.LaunchPermissions = v + return s +} + +// SetProductCodes sets the ProductCodes field's value. +func (s *DescribeImageAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeImageAttributeOutput { + s.ProductCodes = v + return s +} + +// SetRamdiskId sets the RamdiskId field's value. +func (s *DescribeImageAttributeOutput) SetRamdiskId(v *AttributeValue) *DescribeImageAttributeOutput { + s.RamdiskId = v + return s +} + +// SetSriovNetSupport sets the SriovNetSupport field's value. +func (s *DescribeImageAttributeOutput) SetSriovNetSupport(v *AttributeValue) *DescribeImageAttributeOutput { + s.SriovNetSupport = v + return s +} + +type DescribeImagesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // Scopes the images by users with explicit launch permissions. Specify an AWS + // account ID, self (the sender of the request), or all (public AMIs). + ExecutableUsers []*string `locationName:"ExecutableBy" locationNameList:"ExecutableBy" type:"list"` + + // The filters. + // + // * architecture - The image architecture (i386 | x86_64 | arm64). + // + // * block-device-mapping.delete-on-termination - A Boolean value that indicates + // whether the Amazon EBS volume is deleted on instance termination. + // + // * block-device-mapping.device-name - The device name specified in the + // block device mapping (for example, /dev/sdh or xvdh). + // + // * block-device-mapping.snapshot-id - The ID of the snapshot used for the + // EBS volume. + // + // * block-device-mapping.volume-size - The volume size of the EBS volume, + // in GiB. + // + // * block-device-mapping.volume-type - The volume type of the EBS volume + // (gp2 | io1 | st1 | sc1 | standard). + // + // * block-device-mapping.encrypted - A Boolean that indicates whether the + // EBS volume is encrypted. + // + // * description - The description of the image (provided during image creation). + // + // * ena-support - A Boolean that indicates whether enhanced networking with + // ENA is enabled. + // + // * hypervisor - The hypervisor type (ovm | xen). + // + // * image-id - The ID of the image. + // + // * image-type - The image type (machine | kernel | ramdisk). + // + // * is-public - A Boolean that indicates whether the image is public. + // + // * kernel-id - The kernel ID. + // + // * manifest-location - The location of the image manifest. + // + // * name - The name of the AMI (provided during image creation). + // + // * owner-alias - String value from an Amazon-maintained list (amazon | + // aws-marketplace | microsoft) of snapshot owners. Not to be confused with + // the user-configured AWS account alias, which is set from the IAM console. + // + // * owner-id - The AWS account ID of the image owner. + // + // * platform - The platform. To only list Windows-based AMIs, use windows. + // + // * product-code - The product code. + // + // * product-code.type - The type of the product code (devpay | marketplace). + // + // * ramdisk-id - The RAM disk ID. + // + // * root-device-name - The device name of the root device volume (for example, + // /dev/sda1). + // + // * root-device-type - The type of the root device volume (ebs | instance-store). + // + // * state - The state of the image (available | pending | failed). + // + // * state-reason-code - The reason code for the state change. + // + // * state-reason-message - The message for the state change. + // + // * sriov-net-support - A value of simple indicates that enhanced networking + // with the Intel 82599 VF interface is enabled. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * virtualization-type - The virtualization type (paravirtual | hvm). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The image IDs. + // + // Default: Describes all images available to you. + ImageIds []*string `locationName:"ImageId" locationNameList:"ImageId" type:"list"` + + // Filters the images by the owner. Specify an AWS account ID, self (owner is + // the sender of the request), or an AWS owner alias (valid values are amazon + // | aws-marketplace | microsoft). Omitting this option returns all images for + // which you have launch permissions, regardless of ownership. + Owners []*string `locationName:"Owner" locationNameList:"Owner" type:"list"` +} + +// String returns the string representation +func (s DescribeImagesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeImagesInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeImagesInput) SetDryRun(v bool) *DescribeImagesInput { + s.DryRun = &v + return s +} + +// SetExecutableUsers sets the ExecutableUsers field's value. +func (s *DescribeImagesInput) SetExecutableUsers(v []*string) *DescribeImagesInput { + s.ExecutableUsers = v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeImagesInput) SetFilters(v []*Filter) *DescribeImagesInput { + s.Filters = v + return s +} + +// SetImageIds sets the ImageIds field's value. +func (s *DescribeImagesInput) SetImageIds(v []*string) *DescribeImagesInput { + s.ImageIds = v + return s +} + +// SetOwners sets the Owners field's value. +func (s *DescribeImagesInput) SetOwners(v []*string) *DescribeImagesInput { + s.Owners = v + return s +} + +type DescribeImagesOutput struct { + _ struct{} `type:"structure"` + + // Information about the images. + Images []*Image `locationName:"imagesSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeImagesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeImagesOutput) GoString() string { + return s.String() +} + +// SetImages sets the Images field's value. +func (s *DescribeImagesOutput) SetImages(v []*Image) *DescribeImagesOutput { + s.Images = v + return s +} + +type DescribeImportImageTasksInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // Filter tasks using the task-state filter and one of the following values: + // active, completed, deleting, or deleted. + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // The IDs of the import image tasks. + ImportTaskIds []*string `locationName:"ImportTaskId" locationNameList:"ImportTaskId" type:"list"` + + // The maximum number of results to return in a single call. + MaxResults *int64 `type:"integer"` + + // A token that indicates the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeImportImageTasksInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeImportImageTasksInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeImportImageTasksInput) SetDryRun(v bool) *DescribeImportImageTasksInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeImportImageTasksInput) SetFilters(v []*Filter) *DescribeImportImageTasksInput { + s.Filters = v + return s +} + +// SetImportTaskIds sets the ImportTaskIds field's value. +func (s *DescribeImportImageTasksInput) SetImportTaskIds(v []*string) *DescribeImportImageTasksInput { + s.ImportTaskIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeImportImageTasksInput) SetMaxResults(v int64) *DescribeImportImageTasksInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeImportImageTasksInput) SetNextToken(v string) *DescribeImportImageTasksInput { + s.NextToken = &v + return s +} + +type DescribeImportImageTasksOutput struct { + _ struct{} `type:"structure"` + + // A list of zero or more import image tasks that are currently active or were + // completed or canceled in the previous 7 days. + ImportImageTasks []*ImportImageTask `locationName:"importImageTaskSet" locationNameList:"item" type:"list"` + + // The token to use to get the next page of results. This value is null when + // there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeImportImageTasksOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeImportImageTasksOutput) GoString() string { + return s.String() +} + +// SetImportImageTasks sets the ImportImageTasks field's value. +func (s *DescribeImportImageTasksOutput) SetImportImageTasks(v []*ImportImageTask) *DescribeImportImageTasksOutput { + s.ImportImageTasks = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeImportImageTasksOutput) SetNextToken(v string) *DescribeImportImageTasksOutput { + s.NextToken = &v + return s +} + +type DescribeImportSnapshotTasksInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The filters. + Filters []*Filter `locationNameList:"Filter" type:"list"` + + // A list of import snapshot task IDs. + ImportTaskIds []*string `locationName:"ImportTaskId" locationNameList:"ImportTaskId" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. + MaxResults *int64 `type:"integer"` + + // A token that indicates the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeImportSnapshotTasksInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeImportSnapshotTasksInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeImportSnapshotTasksInput) SetDryRun(v bool) *DescribeImportSnapshotTasksInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeImportSnapshotTasksInput) SetFilters(v []*Filter) *DescribeImportSnapshotTasksInput { + s.Filters = v + return s +} + +// SetImportTaskIds sets the ImportTaskIds field's value. +func (s *DescribeImportSnapshotTasksInput) SetImportTaskIds(v []*string) *DescribeImportSnapshotTasksInput { + s.ImportTaskIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeImportSnapshotTasksInput) SetMaxResults(v int64) *DescribeImportSnapshotTasksInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeImportSnapshotTasksInput) SetNextToken(v string) *DescribeImportSnapshotTasksInput { + s.NextToken = &v + return s +} + +type DescribeImportSnapshotTasksOutput struct { + _ struct{} `type:"structure"` + + // A list of zero or more import snapshot tasks that are currently active or + // were completed or canceled in the previous 7 days. + ImportSnapshotTasks []*ImportSnapshotTask `locationName:"importSnapshotTaskSet" locationNameList:"item" type:"list"` + + // The token to use to get the next page of results. This value is null when + // there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeImportSnapshotTasksOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeImportSnapshotTasksOutput) GoString() string { + return s.String() +} + +// SetImportSnapshotTasks sets the ImportSnapshotTasks field's value. +func (s *DescribeImportSnapshotTasksOutput) SetImportSnapshotTasks(v []*ImportSnapshotTask) *DescribeImportSnapshotTasksOutput { + s.ImportSnapshotTasks = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeImportSnapshotTasksOutput) SetNextToken(v string) *DescribeImportSnapshotTasksOutput { + s.NextToken = &v + return s +} + +type DescribeInstanceAttributeInput struct { + _ struct{} `type:"structure"` + + // The instance attribute. + // + // Note: The enaSupport attribute is not supported at this time. + // + // Attribute is a required field + Attribute *string `locationName:"attribute" type:"string" required:"true" enum:"InstanceAttributeName"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeInstanceAttributeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceAttributeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeInstanceAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) + } + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttribute sets the Attribute field's value. +func (s *DescribeInstanceAttributeInput) SetAttribute(v string) *DescribeInstanceAttributeInput { + s.Attribute = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeInstanceAttributeInput) SetDryRun(v bool) *DescribeInstanceAttributeInput { + s.DryRun = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *DescribeInstanceAttributeInput) SetInstanceId(v string) *DescribeInstanceAttributeInput { + s.InstanceId = &v + return s +} + +// Describes an instance attribute. +type DescribeInstanceAttributeOutput struct { + _ struct{} `type:"structure"` + + // The block device mapping of the instance. + BlockDeviceMappings []*InstanceBlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` + + // If the value is true, you can't terminate the instance through the Amazon + // EC2 console, CLI, or API; otherwise, you can. + DisableApiTermination *AttributeBooleanValue `locationName:"disableApiTermination" type:"structure"` + + // Indicates whether the instance is optimized for Amazon EBS I/O. + EbsOptimized *AttributeBooleanValue `locationName:"ebsOptimized" type:"structure"` + + // Indicates whether enhanced networking with ENA is enabled. + EnaSupport *AttributeBooleanValue `locationName:"enaSupport" type:"structure"` + + // The security groups associated with the instance. + Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` + + // Indicates whether an instance stops or terminates when you initiate shutdown + // from the instance (using the operating system command for system shutdown). + InstanceInitiatedShutdownBehavior *AttributeValue `locationName:"instanceInitiatedShutdownBehavior" type:"structure"` + + // The instance type. + InstanceType *AttributeValue `locationName:"instanceType" type:"structure"` + + // The kernel ID. + KernelId *AttributeValue `locationName:"kernel" type:"structure"` + + // A list of product codes. + ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + + // The RAM disk ID. + RamdiskId *AttributeValue `locationName:"ramdisk" type:"structure"` + + // The device name of the root device volume (for example, /dev/sda1). + RootDeviceName *AttributeValue `locationName:"rootDeviceName" type:"structure"` + + // Indicates whether source/destination checking is enabled. A value of true + // means that checking is enabled, and false means that checking is disabled. + // This value must be false for a NAT instance to perform NAT. + SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` + + // Indicates whether enhanced networking with the Intel 82599 Virtual Function + // interface is enabled. + SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` + + // The user data. + UserData *AttributeValue `locationName:"userData" type:"structure"` +} + +// String returns the string representation +func (s DescribeInstanceAttributeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceAttributeOutput) GoString() string { + return s.String() +} + +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *DescribeInstanceAttributeOutput) SetBlockDeviceMappings(v []*InstanceBlockDeviceMapping) *DescribeInstanceAttributeOutput { + s.BlockDeviceMappings = v + return s +} + +// SetDisableApiTermination sets the DisableApiTermination field's value. +func (s *DescribeInstanceAttributeOutput) SetDisableApiTermination(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { + s.DisableApiTermination = v + return s +} + +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *DescribeInstanceAttributeOutput) SetEbsOptimized(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { + s.EbsOptimized = v + return s +} + +// SetEnaSupport sets the EnaSupport field's value. +func (s *DescribeInstanceAttributeOutput) SetEnaSupport(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { + s.EnaSupport = v + return s +} + +// SetGroups sets the Groups field's value. +func (s *DescribeInstanceAttributeOutput) SetGroups(v []*GroupIdentifier) *DescribeInstanceAttributeOutput { + s.Groups = v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *DescribeInstanceAttributeOutput) SetInstanceId(v string) *DescribeInstanceAttributeOutput { + s.InstanceId = &v + return s +} + +// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. +func (s *DescribeInstanceAttributeOutput) SetInstanceInitiatedShutdownBehavior(v *AttributeValue) *DescribeInstanceAttributeOutput { + s.InstanceInitiatedShutdownBehavior = v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *DescribeInstanceAttributeOutput) SetInstanceType(v *AttributeValue) *DescribeInstanceAttributeOutput { + s.InstanceType = v + return s +} + +// SetKernelId sets the KernelId field's value. +func (s *DescribeInstanceAttributeOutput) SetKernelId(v *AttributeValue) *DescribeInstanceAttributeOutput { + s.KernelId = v + return s +} + +// SetProductCodes sets the ProductCodes field's value. +func (s *DescribeInstanceAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeInstanceAttributeOutput { + s.ProductCodes = v + return s +} + +// SetRamdiskId sets the RamdiskId field's value. +func (s *DescribeInstanceAttributeOutput) SetRamdiskId(v *AttributeValue) *DescribeInstanceAttributeOutput { + s.RamdiskId = v + return s +} + +// SetRootDeviceName sets the RootDeviceName field's value. +func (s *DescribeInstanceAttributeOutput) SetRootDeviceName(v *AttributeValue) *DescribeInstanceAttributeOutput { + s.RootDeviceName = v + return s +} + +// SetSourceDestCheck sets the SourceDestCheck field's value. +func (s *DescribeInstanceAttributeOutput) SetSourceDestCheck(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { + s.SourceDestCheck = v + return s +} + +// SetSriovNetSupport sets the SriovNetSupport field's value. +func (s *DescribeInstanceAttributeOutput) SetSriovNetSupport(v *AttributeValue) *DescribeInstanceAttributeOutput { + s.SriovNetSupport = v + return s +} + +// SetUserData sets the UserData field's value. +func (s *DescribeInstanceAttributeOutput) SetUserData(v *AttributeValue) *DescribeInstanceAttributeOutput { + s.UserData = v + return s +} + +type DescribeInstanceCreditSpecificationsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The filters. + // + // * instance-id - The ID of the instance. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The instance IDs. + // + // Default: Describes all your instances. + // + // Constraints: Maximum 1000 explicitly specified instance IDs. + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. This + // value can be between 5 and 1000. You cannot specify this parameter and the + // instance IDs parameter in the same call. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeInstanceCreditSpecificationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceCreditSpecificationsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeInstanceCreditSpecificationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceCreditSpecificationsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeInstanceCreditSpecificationsInput) SetDryRun(v bool) *DescribeInstanceCreditSpecificationsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeInstanceCreditSpecificationsInput) SetFilters(v []*Filter) *DescribeInstanceCreditSpecificationsInput { + s.Filters = v + return s +} + +// SetInstanceIds sets the InstanceIds field's value. +func (s *DescribeInstanceCreditSpecificationsInput) SetInstanceIds(v []*string) *DescribeInstanceCreditSpecificationsInput { + s.InstanceIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeInstanceCreditSpecificationsInput) SetMaxResults(v int64) *DescribeInstanceCreditSpecificationsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstanceCreditSpecificationsInput) SetNextToken(v string) *DescribeInstanceCreditSpecificationsInput { + s.NextToken = &v + return s +} + +type DescribeInstanceCreditSpecificationsOutput struct { + _ struct{} `type:"structure"` + + // Information about the credit option for CPU usage of an instance. + InstanceCreditSpecifications []*InstanceCreditSpecification `locationName:"instanceCreditSpecificationSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeInstanceCreditSpecificationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceCreditSpecificationsOutput) GoString() string { + return s.String() +} + +// SetInstanceCreditSpecifications sets the InstanceCreditSpecifications field's value. +func (s *DescribeInstanceCreditSpecificationsOutput) SetInstanceCreditSpecifications(v []*InstanceCreditSpecification) *DescribeInstanceCreditSpecificationsOutput { + s.InstanceCreditSpecifications = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstanceCreditSpecificationsOutput) SetNextToken(v string) *DescribeInstanceCreditSpecificationsOutput { + s.NextToken = &v + return s +} + +type DescribeInstanceStatusInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. + // + // * availability-zone - The Availability Zone of the instance. + // + // * event.code - The code for the scheduled event (instance-reboot | system-reboot + // | system-maintenance | instance-retirement | instance-stop). + // + // * event.description - A description of the event. + // + // * event.instance-event-id - The ID of the event whose date and time you + // are modifying. + // + // * event.not-after - The latest end time for the scheduled event (for example, + // 2014-09-15T17:15:20.000Z). + // + // * event.not-before - The earliest start time for the scheduled event (for + // example, 2014-09-15T17:15:20.000Z). + // + // * event.not-before-deadline - The deadline for starting the event (for + // example, 2014-09-15T17:15:20.000Z). + // + // * instance-state-code - The code for the instance state, as a 16-bit unsigned + // integer. The high byte is used for internal purposes and should be ignored. + // The low byte is set based on the state represented. The valid values are + // 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), + // and 80 (stopped). + // + // * instance-state-name - The state of the instance (pending | running | + // shutting-down | terminated | stopping | stopped). + // + // * instance-status.reachability - Filters on instance status where the + // name is reachability (passed | failed | initializing | insufficient-data). + // + // * instance-status.status - The status of the instance (ok | impaired | + // initializing | insufficient-data | not-applicable). + // + // * system-status.reachability - Filters on system status where the name + // is reachability (passed | failed | initializing | insufficient-data). + // + // * system-status.status - The system status of the instance (ok | impaired + // | initializing | insufficient-data | not-applicable). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // When true, includes the health status for all instances. When false, includes + // the health status for running instances only. + // + // Default: false + IncludeAllInstances *bool `locationName:"includeAllInstances" type:"boolean"` + + // The instance IDs. + // + // Default: Describes all your instances. + // + // Constraints: Maximum 100 explicitly specified instance IDs. + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. This + // value can be between 5 and 1000. You cannot specify this parameter and the + // instance IDs parameter in the same call. + MaxResults *int64 `type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeInstanceStatusInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceStatusInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeInstanceStatusInput) SetDryRun(v bool) *DescribeInstanceStatusInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeInstanceStatusInput) SetFilters(v []*Filter) *DescribeInstanceStatusInput { + s.Filters = v + return s +} + +// SetIncludeAllInstances sets the IncludeAllInstances field's value. +func (s *DescribeInstanceStatusInput) SetIncludeAllInstances(v bool) *DescribeInstanceStatusInput { + s.IncludeAllInstances = &v + return s +} + +// SetInstanceIds sets the InstanceIds field's value. +func (s *DescribeInstanceStatusInput) SetInstanceIds(v []*string) *DescribeInstanceStatusInput { + s.InstanceIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeInstanceStatusInput) SetMaxResults(v int64) *DescribeInstanceStatusInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstanceStatusInput) SetNextToken(v string) *DescribeInstanceStatusInput { + s.NextToken = &v + return s +} + +type DescribeInstanceStatusOutput struct { + _ struct{} `type:"structure"` + + // Information about the status of the instances. + InstanceStatuses []*InstanceStatus `locationName:"instanceStatusSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeInstanceStatusOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceStatusOutput) GoString() string { + return s.String() +} + +// SetInstanceStatuses sets the InstanceStatuses field's value. +func (s *DescribeInstanceStatusOutput) SetInstanceStatuses(v []*InstanceStatus) *DescribeInstanceStatusOutput { + s.InstanceStatuses = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstanceStatusOutput) SetNextToken(v string) *DescribeInstanceStatusOutput { + s.NextToken = &v + return s +} + +type DescribeInstanceTypeOfferingsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. Filter names and values are case-sensitive. + // + // * location - This depends on the location type. For example, if the location + // type is region (default), the location is the Region code (for example, + // us-east-2.) + // + // * instance-type - The instance type. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The location type. + LocationType *string `type:"string" enum:"LocationType"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the next + // token value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeInstanceTypeOfferingsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceTypeOfferingsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeInstanceTypeOfferingsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceTypeOfferingsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeInstanceTypeOfferingsInput) SetDryRun(v bool) *DescribeInstanceTypeOfferingsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeInstanceTypeOfferingsInput) SetFilters(v []*Filter) *DescribeInstanceTypeOfferingsInput { + s.Filters = v + return s +} + +// SetLocationType sets the LocationType field's value. +func (s *DescribeInstanceTypeOfferingsInput) SetLocationType(v string) *DescribeInstanceTypeOfferingsInput { + s.LocationType = &v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeInstanceTypeOfferingsInput) SetMaxResults(v int64) *DescribeInstanceTypeOfferingsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstanceTypeOfferingsInput) SetNextToken(v string) *DescribeInstanceTypeOfferingsInput { + s.NextToken = &v + return s +} + +type DescribeInstanceTypeOfferingsOutput struct { + _ struct{} `type:"structure"` + + // The instance types offered. + InstanceTypeOfferings []*InstanceTypeOffering `locationName:"instanceTypeOfferingSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeInstanceTypeOfferingsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceTypeOfferingsOutput) GoString() string { + return s.String() +} + +// SetInstanceTypeOfferings sets the InstanceTypeOfferings field's value. +func (s *DescribeInstanceTypeOfferingsOutput) SetInstanceTypeOfferings(v []*InstanceTypeOffering) *DescribeInstanceTypeOfferingsOutput { + s.InstanceTypeOfferings = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstanceTypeOfferingsOutput) SetNextToken(v string) *DescribeInstanceTypeOfferingsOutput { + s.NextToken = &v + return s +} + +type DescribeInstanceTypesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. Filter names and values are case-sensitive. + // + // * auto-recovery-supported - Indicates whether auto recovery is supported. + // (true | false) + // + // * bare-metal - Indicates whether it is a bare metal instance type. (true + // | false) + // + // * burstable-performance-supported - Indicates whether it is a burstable + // performance instance type. (true | false) + // + // * current-generation - Indicates whether this instance type is the latest + // generation instance type of an instance family. (true | false) + // + // * ebs-info.ebs-optimized-support - Indicates whether the instance type + // is EBS-optimized. (true | false) + // + // * ebs-info.encryption-support - Indicates whether EBS encryption is supported. + // (true | false) + // + // * free-tier-eligible - Indicates whether the instance type is eligible + // to use in the free tier. (true | false) + // + // * hibernation-supported - Indicates whether On-Demand hibernation is supported. + // (true | false) + // + // * hypervisor - The hypervisor used. (nitro | xen) + // + // * instance-storage-info.disk.count - The number of local disks. + // + // * instance-storage-info.disk.size-in-gb - The storage size of each instance + // storage disk, in GB. + // + // * instance-storage-info.disk.type - The storage technology for the local + // instance storage disks. (hdd | ssd) + // + // * instance-storage-info.total-size-in-gb - The total amount of storage + // available from all local instance storage, in GB. + // + // * instance-storage-supported - Indicates whether the instance type has + // local instance storage. (true | false) + // + // * memory-info.size-in-mib - The memory size. + // + // * network-info.ena-support - Indicates whether Elastic Network Adapter + // (ENA) is supported or required. (required | supported | unsupported) + // + // * network-info.ipv4-addresses-per-interface - The maximum number of private + // IPv4 addresses per network interface. + // + // * network-info.ipv6-addresses-per-interface - The maximum number of private + // IPv6 addresses per network interface. + // + // * network-info.ipv6-supported - Indicates whether the instance type supports + // IPv6. (true | false) + // + // * network-info.maximum-network-interfaces - The maximum number of network + // interfaces per instance. + // + // * network-info.network-performance - Describes the network performance. + // + // * processor-info.sustained-clock-speed-in-ghz - The CPU clock speed, in + // GHz. + // + // * vcpu-info.default-cores - The default number of cores for the instance + // type. + // + // * vcpu-info.default-threads-per-core - The default number of threads per + // cores for the instance type. + // + // * vcpu-info.default-vcpus - The default number of vCPUs for the instance + // type. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The instance types. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) + // in the Amazon Elastic Compute Cloud User Guide. + InstanceTypes []*string `locationName:"InstanceType" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the next + // token value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeInstanceTypesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceTypesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeInstanceTypesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceTypesInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeInstanceTypesInput) SetDryRun(v bool) *DescribeInstanceTypesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeInstanceTypesInput) SetFilters(v []*Filter) *DescribeInstanceTypesInput { + s.Filters = v + return s +} + +// SetInstanceTypes sets the InstanceTypes field's value. +func (s *DescribeInstanceTypesInput) SetInstanceTypes(v []*string) *DescribeInstanceTypesInput { + s.InstanceTypes = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeInstanceTypesInput) SetMaxResults(v int64) *DescribeInstanceTypesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstanceTypesInput) SetNextToken(v string) *DescribeInstanceTypesInput { + s.NextToken = &v + return s +} + +type DescribeInstanceTypesOutput struct { + _ struct{} `type:"structure"` + + // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) + // in the Amazon Elastic Compute Cloud User Guide. + InstanceTypes []*InstanceTypeInfo `locationName:"instanceTypeSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeInstanceTypesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstanceTypesOutput) GoString() string { + return s.String() +} + +// SetInstanceTypes sets the InstanceTypes field's value. +func (s *DescribeInstanceTypesOutput) SetInstanceTypes(v []*InstanceTypeInfo) *DescribeInstanceTypesOutput { + s.InstanceTypes = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstanceTypesOutput) SetNextToken(v string) *DescribeInstanceTypesOutput { + s.NextToken = &v + return s +} + +type DescribeInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. + // + // * affinity - The affinity setting for an instance running on a Dedicated + // Host (default | host). + // + // * architecture - The instance architecture (i386 | x86_64 | arm64). + // + // * availability-zone - The Availability Zone of the instance. + // + // * block-device-mapping.attach-time - The attach time for an EBS volume + // mapped to the instance, for example, 2010-09-15T17:15:20.000Z. + // + // * block-device-mapping.delete-on-termination - A Boolean that indicates + // whether the EBS volume is deleted on instance termination. + // + // * block-device-mapping.device-name - The device name specified in the + // block device mapping (for example, /dev/sdh or xvdh). + // + // * block-device-mapping.status - The status for the EBS volume (attaching + // | attached | detaching | detached). + // + // * block-device-mapping.volume-id - The volume ID of the EBS volume. + // + // * client-token - The idempotency token you provided when you launched + // the instance. + // + // * dns-name - The public DNS name of the instance. + // + // * group-id - The ID of the security group for the instance. EC2-Classic + // only. + // + // * group-name - The name of the security group for the instance. EC2-Classic + // only. + // + // * hibernation-options.configured - A Boolean that indicates whether the + // instance is enabled for hibernation. A value of true means that the instance + // is enabled for hibernation. + // + // * host-id - The ID of the Dedicated Host on which the instance is running, + // if applicable. + // + // * hypervisor - The hypervisor type of the instance (ovm | xen). + // + // * iam-instance-profile.arn - The instance profile associated with the + // instance. Specified as an ARN. image-id - The ID of the image used to + // launch the instance. + // + // * instance-id - The ID of the instance. + // + // * instance-lifecycle - Indicates whether this is a Spot Instance or a + // Scheduled Instance (spot | scheduled). + // + // * instance-state-code - The state of the instance, as a 16-bit unsigned + // integer. The high byte is used for internal purposes and should be ignored. + // The low byte is set based on the state represented. The valid values are: + // 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), + // and 80 (stopped). + // + // * instance-state-name - The state of the instance (pending | running | + // shutting-down | terminated | stopping | stopped). + // + // * instance-type - The type of instance (for example, t2.micro). + // + // * instance.group-id - The ID of the security group for the instance. + // + // * instance.group-name - The name of the security group for the instance. + // + // * ip-address - The public IPv4 address of the instance. + // + // * kernel-id - The kernel ID. + // + // * key-name - The name of the key pair used when the instance was launched. + // + // * launch-index - When launching multiple instances, this is the index + // for the instance in the launch group (for example, 0, 1, 2, and so on). + // + // * launch-time - The time when the instance was launched. + // + // * metadata-http-tokens - The metadata request authorization state (optional + // | required) + // + // * metadata-http-put-response-hop-limit - The http metadata request put + // response hop limit (integer, possible values 1 to 64) + // + // * metadata-http-endpoint - Enable or disable metadata access on http endpoint + // (enabled | disabled) + // + // * monitoring-state - Indicates whether detailed monitoring is enabled + // (disabled | enabled). + // + // * network-interface.addresses.private-ip-address - The private IPv4 address + // associated with the network interface. + // + // * network-interface.addresses.primary - Specifies whether the IPv4 address + // of the network interface is the primary private IPv4 address. + // + // * network-interface.addresses.association.public-ip - The ID of the association + // of an Elastic IP address (IPv4) with a network interface. + // + // * network-interface.addresses.association.ip-owner-id - The owner ID of + // the private IPv4 address associated with the network interface. + // + // * network-interface.association.public-ip - The address of the Elastic + // IP address (IPv4) bound to the network interface. + // + // * network-interface.association.ip-owner-id - The owner of the Elastic + // IP address (IPv4) associated with the network interface. + // + // * network-interface.association.allocation-id - The allocation ID returned + // when you allocated the Elastic IP address (IPv4) for your network interface. + // + // * network-interface.association.association-id - The association ID returned + // when the network interface was associated with an IPv4 address. + // + // * network-interface.attachment.attachment-id - The ID of the interface + // attachment. + // + // * network-interface.attachment.instance-id - The ID of the instance to + // which the network interface is attached. + // + // * network-interface.attachment.instance-owner-id - The owner ID of the + // instance to which the network interface is attached. + // + // * network-interface.attachment.device-index - The device index to which + // the network interface is attached. + // + // * network-interface.attachment.status - The status of the attachment (attaching + // | attached | detaching | detached). + // + // * network-interface.attachment.attach-time - The time that the network + // interface was attached to an instance. + // + // * network-interface.attachment.delete-on-termination - Specifies whether + // the attachment is deleted when an instance is terminated. + // + // * network-interface.availability-zone - The Availability Zone for the + // network interface. + // + // * network-interface.description - The description of the network interface. + // + // * network-interface.group-id - The ID of a security group associated with + // the network interface. + // + // * network-interface.group-name - The name of a security group associated + // with the network interface. + // + // * network-interface.ipv6-addresses.ipv6-address - The IPv6 address associated + // with the network interface. + // + // * network-interface.mac-address - The MAC address of the network interface. + // + // * network-interface.network-interface-id - The ID of the network interface. + // + // * network-interface.owner-id - The ID of the owner of the network interface. + // + // * network-interface.private-dns-name - The private DNS name of the network + // interface. + // + // * network-interface.requester-id - The requester ID for the network interface. + // + // * network-interface.requester-managed - Indicates whether the network + // interface is being managed by AWS. + // + // * network-interface.status - The status of the network interface (available) + // | in-use). + // + // * network-interface.source-dest-check - Whether the network interface + // performs source/destination checking. A value of true means that checking + // is enabled, and false means that checking is disabled. The value must + // be false for the network interface to perform network address translation + // (NAT) in your VPC. + // + // * network-interface.subnet-id - The ID of the subnet for the network interface. + // + // * network-interface.vpc-id - The ID of the VPC for the network interface. + // + // * owner-id - The AWS account ID of the instance owner. + // + // * placement-group-name - The name of the placement group for the instance. + // + // * placement-partition-number - The partition in which the instance is + // located. + // + // * platform - The platform. To list only Windows instances, use windows. + // + // * private-dns-name - The private IPv4 DNS name of the instance. + // + // * private-ip-address - The private IPv4 address of the instance. + // + // * product-code - The product code associated with the AMI used to launch + // the instance. + // + // * product-code.type - The type of product code (devpay | marketplace). + // + // * ramdisk-id - The RAM disk ID. + // + // * reason - The reason for the current state of the instance (for example, + // shows "User Initiated [date]" when you stop or terminate the instance). + // Similar to the state-reason-code filter. + // + // * requester-id - The ID of the entity that launched the instance on your + // behalf (for example, AWS Management Console, Auto Scaling, and so on). + // + // * reservation-id - The ID of the instance's reservation. A reservation + // ID is created any time you launch an instance. A reservation ID has a + // one-to-one relationship with an instance launch request, but can be associated + // with more than one instance if you launch multiple instances using the + // same launch request. For example, if you launch one instance, you get + // one reservation ID. If you launch ten instances using the same launch + // request, you also get one reservation ID. + // + // * root-device-name - The device name of the root device volume (for example, + // /dev/sda1). + // + // * root-device-type - The type of the root device volume (ebs | instance-store). + // + // * source-dest-check - Indicates whether the instance performs source/destination + // checking. A value of true means that checking is enabled, and false means + // that checking is disabled. The value must be false for the instance to + // perform network address translation (NAT) in your VPC. + // + // * spot-instance-request-id - The ID of the Spot Instance request. + // + // * state-reason-code - The reason code for the state change. + // + // * state-reason-message - A message that describes the state change. + // + // * subnet-id - The ID of the subnet for the instance. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources that have a tag with a specific key, regardless + // of the tag value. + // + // * tenancy - The tenancy of an instance (dedicated | default | host). + // + // * virtualization-type - The virtualization type of the instance (paravirtual + // | hvm). + // + // * vpc-id - The ID of the VPC that the instance is running in. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The instance IDs. + // + // Default: Describes all your instances. + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. This + // value can be between 5 and 1000. You cannot specify this parameter and the + // instance IDs parameter in the same call. + MaxResults *int64 `locationName:"maxResults" type:"integer"` + + // The token to request the next page of results. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstancesInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeInstancesInput) SetDryRun(v bool) *DescribeInstancesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeInstancesInput) SetFilters(v []*Filter) *DescribeInstancesInput { + s.Filters = v + return s +} + +// SetInstanceIds sets the InstanceIds field's value. +func (s *DescribeInstancesInput) SetInstanceIds(v []*string) *DescribeInstancesInput { + s.InstanceIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeInstancesInput) SetMaxResults(v int64) *DescribeInstancesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstancesInput) SetNextToken(v string) *DescribeInstancesInput { + s.NextToken = &v + return s +} + +type DescribeInstancesOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the reservations. + Reservations []*Reservation `locationName:"reservationSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInstancesOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInstancesOutput) SetNextToken(v string) *DescribeInstancesOutput { + s.NextToken = &v + return s +} + +// SetReservations sets the Reservations field's value. +func (s *DescribeInstancesOutput) SetReservations(v []*Reservation) *DescribeInstancesOutput { + s.Reservations = v + return s +} + +type DescribeInternetGatewaysInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * attachment.state - The current state of the attachment between the gateway + // and the VPC (available). Present only if a VPC is attached. + // + // * attachment.vpc-id - The ID of an attached VPC. + // + // * internet-gateway-id - The ID of the Internet gateway. + // + // * owner-id - The ID of the AWS account that owns the internet gateway. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // One or more internet gateway IDs. + // + // Default: Describes all your internet gateways. + InternetGatewayIds []*string `locationName:"internetGatewayId" locationNameList:"item" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeInternetGatewaysInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInternetGatewaysInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeInternetGatewaysInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeInternetGatewaysInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeInternetGatewaysInput) SetDryRun(v bool) *DescribeInternetGatewaysInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeInternetGatewaysInput) SetFilters(v []*Filter) *DescribeInternetGatewaysInput { + s.Filters = v + return s +} + +// SetInternetGatewayIds sets the InternetGatewayIds field's value. +func (s *DescribeInternetGatewaysInput) SetInternetGatewayIds(v []*string) *DescribeInternetGatewaysInput { + s.InternetGatewayIds = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeInternetGatewaysInput) SetMaxResults(v int64) *DescribeInternetGatewaysInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInternetGatewaysInput) SetNextToken(v string) *DescribeInternetGatewaysInput { + s.NextToken = &v + return s +} + +type DescribeInternetGatewaysOutput struct { + _ struct{} `type:"structure"` + + // Information about one or more internet gateways. + InternetGateways []*InternetGateway `locationName:"internetGatewaySet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeInternetGatewaysOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeInternetGatewaysOutput) GoString() string { + return s.String() +} + +// SetInternetGateways sets the InternetGateways field's value. +func (s *DescribeInternetGatewaysOutput) SetInternetGateways(v []*InternetGateway) *DescribeInternetGatewaysOutput { + s.InternetGateways = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeInternetGatewaysOutput) SetNextToken(v string) *DescribeInternetGatewaysOutput { + s.NextToken = &v + return s +} + +type DescribeKeyPairsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. + // + // * fingerprint - The fingerprint of the key pair. + // + // * key-name - The name of the key pair. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The key pair names. + // + // Default: Describes all your key pairs. + KeyNames []*string `locationName:"KeyName" locationNameList:"KeyName" type:"list"` +} + +// String returns the string representation +func (s DescribeKeyPairsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeKeyPairsInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeKeyPairsInput) SetDryRun(v bool) *DescribeKeyPairsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeKeyPairsInput) SetFilters(v []*Filter) *DescribeKeyPairsInput { + s.Filters = v + return s +} + +// SetKeyNames sets the KeyNames field's value. +func (s *DescribeKeyPairsInput) SetKeyNames(v []*string) *DescribeKeyPairsInput { + s.KeyNames = v + return s +} + +type DescribeKeyPairsOutput struct { + _ struct{} `type:"structure"` + + // Information about the key pairs. + KeyPairs []*KeyPairInfo `locationName:"keySet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeKeyPairsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeKeyPairsOutput) GoString() string { + return s.String() +} + +// SetKeyPairs sets the KeyPairs field's value. +func (s *DescribeKeyPairsOutput) SetKeyPairs(v []*KeyPairInfo) *DescribeKeyPairsOutput { + s.KeyPairs = v + return s +} + +type DescribeLaunchTemplateVersionsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. + // + // * create-time - The time the launch template version was created. + // + // * ebs-optimized - A boolean that indicates whether the instance is optimized + // for Amazon EBS I/O. + // + // * iam-instance-profile - The ARN of the IAM instance profile. + // + // * image-id - The ID of the AMI. + // + // * instance-type - The instance type. + // + // * is-default-version - A boolean that indicates whether the launch template + // version is the default version. + // + // * kernel-id - The kernel ID. + // + // * ram-disk-id - The RAM disk ID. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The ID of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateId *string `type:"string"` + + // The name of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateName *string `min:"3" type:"string"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. This + // value can be between 1 and 200. + MaxResults *int64 `type:"integer"` + + // The version number up to which to describe launch template versions. + MaxVersion *string `type:"string"` + + // The version number after which to describe launch template versions. + MinVersion *string `type:"string"` + + // The token to request the next page of results. + NextToken *string `type:"string"` + + // One or more versions of the launch template. + Versions []*string `locationName:"LaunchTemplateVersion" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeLaunchTemplateVersionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeLaunchTemplateVersionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeLaunchTemplateVersionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeLaunchTemplateVersionsInput"} + if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { + invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetDryRun(v bool) *DescribeLaunchTemplateVersionsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetFilters(v []*Filter) *DescribeLaunchTemplateVersionsInput { + s.Filters = v + return s +} + +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetLaunchTemplateId(v string) *DescribeLaunchTemplateVersionsInput { + s.LaunchTemplateId = &v + return s +} + +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetLaunchTemplateName(v string) *DescribeLaunchTemplateVersionsInput { + s.LaunchTemplateName = &v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetMaxResults(v int64) *DescribeLaunchTemplateVersionsInput { + s.MaxResults = &v + return s +} + +// SetMaxVersion sets the MaxVersion field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetMaxVersion(v string) *DescribeLaunchTemplateVersionsInput { + s.MaxVersion = &v + return s +} + +// SetMinVersion sets the MinVersion field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetMinVersion(v string) *DescribeLaunchTemplateVersionsInput { + s.MinVersion = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetNextToken(v string) *DescribeLaunchTemplateVersionsInput { + s.NextToken = &v + return s +} + +// SetVersions sets the Versions field's value. +func (s *DescribeLaunchTemplateVersionsInput) SetVersions(v []*string) *DescribeLaunchTemplateVersionsInput { + s.Versions = v + return s +} + +type DescribeLaunchTemplateVersionsOutput struct { + _ struct{} `type:"structure"` + + // Information about the launch template versions. + LaunchTemplateVersions []*LaunchTemplateVersion `locationName:"launchTemplateVersionSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeLaunchTemplateVersionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeLaunchTemplateVersionsOutput) GoString() string { + return s.String() +} + +// SetLaunchTemplateVersions sets the LaunchTemplateVersions field's value. +func (s *DescribeLaunchTemplateVersionsOutput) SetLaunchTemplateVersions(v []*LaunchTemplateVersion) *DescribeLaunchTemplateVersionsOutput { + s.LaunchTemplateVersions = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeLaunchTemplateVersionsOutput) SetNextToken(v string) *DescribeLaunchTemplateVersionsOutput { + s.NextToken = &v + return s +} + +type DescribeLaunchTemplatesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. + // + // * create-time - The time the launch template was created. + // + // * launch-template-name - The name of the launch template. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // One or more launch template IDs. + LaunchTemplateIds []*string `locationName:"LaunchTemplateId" locationNameList:"item" type:"list"` + + // One or more launch template names. + LaunchTemplateNames []*string `locationName:"LaunchTemplateName" locationNameList:"item" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. This + // value can be between 1 and 200. + MaxResults *int64 `min:"1" type:"integer"` + + // The token to request the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeLaunchTemplatesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeLaunchTemplatesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeLaunchTemplatesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeLaunchTemplatesInput"} + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeLaunchTemplatesInput) SetDryRun(v bool) *DescribeLaunchTemplatesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeLaunchTemplatesInput) SetFilters(v []*Filter) *DescribeLaunchTemplatesInput { + s.Filters = v + return s +} + +// SetLaunchTemplateIds sets the LaunchTemplateIds field's value. +func (s *DescribeLaunchTemplatesInput) SetLaunchTemplateIds(v []*string) *DescribeLaunchTemplatesInput { + s.LaunchTemplateIds = v + return s +} + +// SetLaunchTemplateNames sets the LaunchTemplateNames field's value. +func (s *DescribeLaunchTemplatesInput) SetLaunchTemplateNames(v []*string) *DescribeLaunchTemplatesInput { + s.LaunchTemplateNames = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeLaunchTemplatesInput) SetMaxResults(v int64) *DescribeLaunchTemplatesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeLaunchTemplatesInput) SetNextToken(v string) *DescribeLaunchTemplatesInput { + s.NextToken = &v + return s +} + +type DescribeLaunchTemplatesOutput struct { + _ struct{} `type:"structure"` + + // Information about the launch templates. + LaunchTemplates []*LaunchTemplate `locationName:"launchTemplates" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeLaunchTemplatesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeLaunchTemplatesOutput) GoString() string { + return s.String() +} + +// SetLaunchTemplates sets the LaunchTemplates field's value. +func (s *DescribeLaunchTemplatesOutput) SetLaunchTemplates(v []*LaunchTemplate) *DescribeLaunchTemplatesOutput { + s.LaunchTemplates = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeLaunchTemplatesOutput) SetNextToken(v string) *DescribeLaunchTemplatesOutput { + s.NextToken = &v + return s +} + +type DescribeMovingAddressesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * moving-status - The status of the Elastic IP address (MovingToVpc | + // RestoringToClassic). + Filters []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results of the initial request can be seen by sending another + // request with the returned NextToken value. This value can be between 5 and + // 1000; if MaxResults is given a value outside of this range, an error is returned. + // + // Default: If no value is provided, the default is 1000. + MaxResults *int64 `locationName:"maxResults" min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `locationName:"nextToken" type:"string"` + + // One or more Elastic IP addresses. + PublicIps []*string `locationName:"publicIp" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeMovingAddressesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeMovingAddressesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeMovingAddressesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeMovingAddressesInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeMovingAddressesInput) SetDryRun(v bool) *DescribeMovingAddressesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeMovingAddressesInput) SetFilters(v []*Filter) *DescribeMovingAddressesInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeMovingAddressesInput) SetMaxResults(v int64) *DescribeMovingAddressesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeMovingAddressesInput) SetNextToken(v string) *DescribeMovingAddressesInput { + s.NextToken = &v + return s +} + +// SetPublicIps sets the PublicIps field's value. +func (s *DescribeMovingAddressesInput) SetPublicIps(v []*string) *DescribeMovingAddressesInput { + s.PublicIps = v + return s +} + +type DescribeMovingAddressesOutput struct { + _ struct{} `type:"structure"` + + // The status for each Elastic IP address. + MovingAddressStatuses []*MovingAddressStatus `locationName:"movingAddressStatusSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeMovingAddressesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeMovingAddressesOutput) GoString() string { + return s.String() +} + +// SetMovingAddressStatuses sets the MovingAddressStatuses field's value. +func (s *DescribeMovingAddressesOutput) SetMovingAddressStatuses(v []*MovingAddressStatus) *DescribeMovingAddressesOutput { + s.MovingAddressStatuses = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeMovingAddressesOutput) SetNextToken(v string) *DescribeMovingAddressesOutput { + s.NextToken = &v + return s +} + +type DescribeNatGatewaysInput struct { + _ struct{} `type:"structure"` + + // One or more filters. + // + // * nat-gateway-id - The ID of the NAT gateway. + // + // * state - The state of the NAT gateway (pending | failed | available | + // deleting | deleted). + // + // * subnet-id - The ID of the subnet in which the NAT gateway resides. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * vpc-id - The ID of the VPC in which the NAT gateway resides. + Filter []*Filter `locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // One or more NAT gateway IDs. + NatGatewayIds []*string `locationName:"NatGatewayId" locationNameList:"item" type:"list"` + + // The token for the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeNatGatewaysInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNatGatewaysInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeNatGatewaysInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeNatGatewaysInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilter sets the Filter field's value. +func (s *DescribeNatGatewaysInput) SetFilter(v []*Filter) *DescribeNatGatewaysInput { + s.Filter = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeNatGatewaysInput) SetMaxResults(v int64) *DescribeNatGatewaysInput { + s.MaxResults = &v + return s +} + +// SetNatGatewayIds sets the NatGatewayIds field's value. +func (s *DescribeNatGatewaysInput) SetNatGatewayIds(v []*string) *DescribeNatGatewaysInput { + s.NatGatewayIds = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeNatGatewaysInput) SetNextToken(v string) *DescribeNatGatewaysInput { + s.NextToken = &v + return s +} + +type DescribeNatGatewaysOutput struct { + _ struct{} `type:"structure"` + + // Information about the NAT gateways. + NatGateways []*NatGateway `locationName:"natGatewaySet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeNatGatewaysOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNatGatewaysOutput) GoString() string { + return s.String() +} + +// SetNatGateways sets the NatGateways field's value. +func (s *DescribeNatGatewaysOutput) SetNatGateways(v []*NatGateway) *DescribeNatGatewaysOutput { + s.NatGateways = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeNatGatewaysOutput) SetNextToken(v string) *DescribeNatGatewaysOutput { + s.NextToken = &v + return s +} + +type DescribeNetworkAclsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * association.association-id - The ID of an association ID for the ACL. + // + // * association.network-acl-id - The ID of the network ACL involved in the + // association. + // + // * association.subnet-id - The ID of the subnet involved in the association. + // + // * default - Indicates whether the ACL is the default network ACL for the + // VPC. + // + // * entry.cidr - The IPv4 CIDR range specified in the entry. + // + // * entry.icmp.code - The ICMP code specified in the entry, if any. + // + // * entry.icmp.type - The ICMP type specified in the entry, if any. + // + // * entry.ipv6-cidr - The IPv6 CIDR range specified in the entry. + // + // * entry.port-range.from - The start of the port range specified in the + // entry. + // + // * entry.port-range.to - The end of the port range specified in the entry. + // + // * entry.protocol - The protocol specified in the entry (tcp | udp | icmp + // or a protocol number). + // + // * entry.rule-action - Allows or denies the matching traffic (allow | deny). + // + // * entry.rule-number - The number of an entry (in other words, rule) in + // the set of ACL entries. + // + // * network-acl-id - The ID of the network ACL. + // + // * owner-id - The ID of the AWS account that owns the network ACL. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * vpc-id - The ID of the VPC for the network ACL. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // One or more network ACL IDs. + // + // Default: Describes all your network ACLs. + NetworkAclIds []*string `locationName:"NetworkAclId" locationNameList:"item" type:"list"` + + // The token for the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeNetworkAclsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNetworkAclsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeNetworkAclsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkAclsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeNetworkAclsInput) SetDryRun(v bool) *DescribeNetworkAclsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeNetworkAclsInput) SetFilters(v []*Filter) *DescribeNetworkAclsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeNetworkAclsInput) SetMaxResults(v int64) *DescribeNetworkAclsInput { + s.MaxResults = &v + return s +} + +// SetNetworkAclIds sets the NetworkAclIds field's value. +func (s *DescribeNetworkAclsInput) SetNetworkAclIds(v []*string) *DescribeNetworkAclsInput { + s.NetworkAclIds = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeNetworkAclsInput) SetNextToken(v string) *DescribeNetworkAclsInput { + s.NextToken = &v + return s +} + +type DescribeNetworkAclsOutput struct { + _ struct{} `type:"structure"` + + // Information about one or more network ACLs. + NetworkAcls []*NetworkAcl `locationName:"networkAclSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeNetworkAclsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNetworkAclsOutput) GoString() string { + return s.String() +} + +// SetNetworkAcls sets the NetworkAcls field's value. +func (s *DescribeNetworkAclsOutput) SetNetworkAcls(v []*NetworkAcl) *DescribeNetworkAclsOutput { + s.NetworkAcls = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeNetworkAclsOutput) SetNextToken(v string) *DescribeNetworkAclsOutput { + s.NextToken = &v + return s +} + +// Contains the parameters for DescribeNetworkInterfaceAttribute. +type DescribeNetworkInterfaceAttributeInput struct { + _ struct{} `type:"structure"` + + // The attribute of the network interface. This parameter is required. + Attribute *string `locationName:"attribute" type:"string" enum:"NetworkInterfaceAttribute"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the network interface. + // + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeNetworkInterfaceAttributeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNetworkInterfaceAttributeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeNetworkInterfaceAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkInterfaceAttributeInput"} + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttribute sets the Attribute field's value. +func (s *DescribeNetworkInterfaceAttributeInput) SetAttribute(v string) *DescribeNetworkInterfaceAttributeInput { + s.Attribute = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeNetworkInterfaceAttributeInput) SetDryRun(v bool) *DescribeNetworkInterfaceAttributeInput { + s.DryRun = &v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *DescribeNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *DescribeNetworkInterfaceAttributeInput { + s.NetworkInterfaceId = &v + return s +} + +// Contains the output of DescribeNetworkInterfaceAttribute. +type DescribeNetworkInterfaceAttributeOutput struct { + _ struct{} `type:"structure"` + + // The attachment (if any) of the network interface. + Attachment *NetworkInterfaceAttachment `locationName:"attachment" type:"structure"` + + // The description of the network interface. + Description *AttributeValue `locationName:"description" type:"structure"` + + // The security groups associated with the network interface. + Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + + // Indicates whether source/destination checking is enabled. + SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` +} + +// String returns the string representation +func (s DescribeNetworkInterfaceAttributeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNetworkInterfaceAttributeOutput) GoString() string { + return s.String() +} + +// SetAttachment sets the Attachment field's value. +func (s *DescribeNetworkInterfaceAttributeOutput) SetAttachment(v *NetworkInterfaceAttachment) *DescribeNetworkInterfaceAttributeOutput { + s.Attachment = v + return s +} + +// SetDescription sets the Description field's value. +func (s *DescribeNetworkInterfaceAttributeOutput) SetDescription(v *AttributeValue) *DescribeNetworkInterfaceAttributeOutput { + s.Description = v + return s +} + +// SetGroups sets the Groups field's value. +func (s *DescribeNetworkInterfaceAttributeOutput) SetGroups(v []*GroupIdentifier) *DescribeNetworkInterfaceAttributeOutput { + s.Groups = v + return s +} + +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *DescribeNetworkInterfaceAttributeOutput) SetNetworkInterfaceId(v string) *DescribeNetworkInterfaceAttributeOutput { + s.NetworkInterfaceId = &v + return s +} + +// SetSourceDestCheck sets the SourceDestCheck field's value. +func (s *DescribeNetworkInterfaceAttributeOutput) SetSourceDestCheck(v *AttributeBooleanValue) *DescribeNetworkInterfaceAttributeOutput { + s.SourceDestCheck = v + return s +} + +// Contains the parameters for DescribeNetworkInterfacePermissions. +type DescribeNetworkInterfacePermissionsInput struct { + _ struct{} `type:"structure"` + + // One or more filters. + // + // * network-interface-permission.network-interface-permission-id - The ID + // of the permission. + // + // * network-interface-permission.network-interface-id - The ID of the network + // interface. + // + // * network-interface-permission.aws-account-id - The AWS account ID. + // + // * network-interface-permission.aws-service - The AWS service. + // + // * network-interface-permission.permission - The type of permission (INSTANCE-ATTACH + // | EIP-ASSOCIATE). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. If + // this parameter is not specified, up to 50 results are returned by default. + MaxResults *int64 `min:"5" type:"integer"` + + // One or more network interface permission IDs. + NetworkInterfacePermissionIds []*string `locationName:"NetworkInterfacePermissionId" type:"list"` + + // The token to request the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeNetworkInterfacePermissionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNetworkInterfacePermissionsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeNetworkInterfacePermissionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkInterfacePermissionsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetFilters sets the Filters field's value. +func (s *DescribeNetworkInterfacePermissionsInput) SetFilters(v []*Filter) *DescribeNetworkInterfacePermissionsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeNetworkInterfacePermissionsInput) SetMaxResults(v int64) *DescribeNetworkInterfacePermissionsInput { + s.MaxResults = &v + return s +} + +// SetNetworkInterfacePermissionIds sets the NetworkInterfacePermissionIds field's value. +func (s *DescribeNetworkInterfacePermissionsInput) SetNetworkInterfacePermissionIds(v []*string) *DescribeNetworkInterfacePermissionsInput { + s.NetworkInterfacePermissionIds = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeNetworkInterfacePermissionsInput) SetNextToken(v string) *DescribeNetworkInterfacePermissionsInput { + s.NextToken = &v + return s +} + +// Contains the output for DescribeNetworkInterfacePermissions. +type DescribeNetworkInterfacePermissionsOutput struct { + _ struct{} `type:"structure"` + + // The network interface permissions. + NetworkInterfacePermissions []*NetworkInterfacePermission `locationName:"networkInterfacePermissions" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeNetworkInterfacePermissionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNetworkInterfacePermissionsOutput) GoString() string { + return s.String() +} + +// SetNetworkInterfacePermissions sets the NetworkInterfacePermissions field's value. +func (s *DescribeNetworkInterfacePermissionsOutput) SetNetworkInterfacePermissions(v []*NetworkInterfacePermission) *DescribeNetworkInterfacePermissionsOutput { + s.NetworkInterfacePermissions = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeNetworkInterfacePermissionsOutput) SetNextToken(v string) *DescribeNetworkInterfacePermissionsOutput { + s.NextToken = &v + return s +} + +// Contains the parameters for DescribeNetworkInterfaces. +type DescribeNetworkInterfacesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * addresses.private-ip-address - The private IPv4 addresses associated + // with the network interface. + // + // * addresses.primary - Whether the private IPv4 address is the primary + // IP address associated with the network interface. + // + // * addresses.association.public-ip - The association ID returned when the + // network interface was associated with the Elastic IP address (IPv4). + // + // * addresses.association.owner-id - The owner ID of the addresses associated + // with the network interface. + // + // * association.association-id - The association ID returned when the network + // interface was associated with an IPv4 address. + // + // * association.allocation-id - The allocation ID returned when you allocated + // the Elastic IP address (IPv4) for your network interface. + // + // * association.ip-owner-id - The owner of the Elastic IP address (IPv4) + // associated with the network interface. + // + // * association.public-ip - The address of the Elastic IP address (IPv4) + // bound to the network interface. + // + // * association.public-dns-name - The public DNS name for the network interface + // (IPv4). + // + // * attachment.attachment-id - The ID of the interface attachment. + // + // * attachment.attach-time - The time that the network interface was attached + // to an instance. + // + // * attachment.delete-on-termination - Indicates whether the attachment + // is deleted when an instance is terminated. + // + // * attachment.device-index - The device index to which the network interface + // is attached. + // + // * attachment.instance-id - The ID of the instance to which the network + // interface is attached. + // + // * attachment.instance-owner-id - The owner ID of the instance to which + // the network interface is attached. + // + // * attachment.nat-gateway-id - The ID of the NAT gateway to which the network + // interface is attached. + // + // * attachment.status - The status of the attachment (attaching | attached + // | detaching | detached). + // + // * availability-zone - The Availability Zone of the network interface. + // + // * description - The description of the network interface. + // + // * group-id - The ID of a security group associated with the network interface. + // + // * group-name - The name of a security group associated with the network + // interface. + // + // * ipv6-addresses.ipv6-address - An IPv6 address associated with the network + // interface. + // + // * mac-address - The MAC address of the network interface. + // + // * network-interface-id - The ID of the network interface. + // + // * owner-id - The AWS account ID of the network interface owner. + // + // * private-ip-address - The private IPv4 address or addresses of the network + // interface. + // + // * private-dns-name - The private DNS name of the network interface (IPv4). + // + // * requester-id - The ID of the entity that launched the instance on your + // behalf (for example, AWS Management Console, Auto Scaling, and so on). + // + // * requester-managed - Indicates whether the network interface is being + // managed by an AWS service (for example, AWS Management Console, Auto Scaling, + // and so on). + // + // * source-dest-check - Indicates whether the network interface performs + // source/destination checking. A value of true means checking is enabled, + // and false means checking is disabled. The value must be false for the + // network interface to perform network address translation (NAT) in your + // VPC. + // + // * status - The status of the network interface. If the network interface + // is not attached to an instance, the status is available; if a network + // interface is attached to an instance the status is in-use. + // + // * subnet-id - The ID of the subnet for the network interface. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * vpc-id - The ID of the VPC for the network interface. + Filters []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` + + // The maximum number of items to return for this request. The request returns + // a token that you can specify in a subsequent call to get the next set of + // results. + MaxResults *int64 `min:"5" type:"integer"` + + // One or more network interface IDs. + // + // Default: Describes all your network interfaces. + NetworkInterfaceIds []*string `locationName:"NetworkInterfaceId" locationNameList:"item" type:"list"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeNetworkInterfacesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNetworkInterfacesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeNetworkInterfacesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkInterfacesInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeNetworkInterfacesInput) SetDryRun(v bool) *DescribeNetworkInterfacesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeNetworkInterfacesInput) SetFilters(v []*Filter) *DescribeNetworkInterfacesInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeNetworkInterfacesInput) SetMaxResults(v int64) *DescribeNetworkInterfacesInput { + s.MaxResults = &v + return s +} + +// SetNetworkInterfaceIds sets the NetworkInterfaceIds field's value. +func (s *DescribeNetworkInterfacesInput) SetNetworkInterfaceIds(v []*string) *DescribeNetworkInterfacesInput { + s.NetworkInterfaceIds = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeNetworkInterfacesInput) SetNextToken(v string) *DescribeNetworkInterfacesInput { + s.NextToken = &v + return s +} + +// Contains the output of DescribeNetworkInterfaces. +type DescribeNetworkInterfacesOutput struct { + _ struct{} `type:"structure"` + + // Information about one or more network interfaces. + NetworkInterfaces []*NetworkInterface `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` +} + +// String returns the string representation +func (s DescribeNetworkInterfacesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeNetworkInterfacesOutput) GoString() string { + return s.String() +} + +// SetNetworkInterfaces sets the NetworkInterfaces field's value. +func (s *DescribeNetworkInterfacesOutput) SetNetworkInterfaces(v []*NetworkInterface) *DescribeNetworkInterfacesOutput { + s.NetworkInterfaces = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeNetworkInterfacesOutput) SetNextToken(v string) *DescribeNetworkInterfacesOutput { + s.NextToken = &v + return s +} + +type DescribePlacementGroupsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. + // + // * group-name - The name of the placement group. + // + // * state - The state of the placement group (pending | available | deleting + // | deleted). + // + // * strategy - The strategy of the placement group (cluster | spread | partition). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The names of the placement groups. + // + // Default: Describes all your placement groups, or only those otherwise specified. + GroupNames []*string `locationName:"groupName" type:"list"` +} + +// String returns the string representation +func (s DescribePlacementGroupsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribePlacementGroupsInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribePlacementGroupsInput) SetDryRun(v bool) *DescribePlacementGroupsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribePlacementGroupsInput) SetFilters(v []*Filter) *DescribePlacementGroupsInput { + s.Filters = v + return s +} + +// SetGroupNames sets the GroupNames field's value. +func (s *DescribePlacementGroupsInput) SetGroupNames(v []*string) *DescribePlacementGroupsInput { + s.GroupNames = v + return s +} + +type DescribePlacementGroupsOutput struct { + _ struct{} `type:"structure"` + + // Information about the placement groups. + PlacementGroups []*PlacementGroup `locationName:"placementGroupSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribePlacementGroupsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribePlacementGroupsOutput) GoString() string { + return s.String() +} + +// SetPlacementGroups sets the PlacementGroups field's value. +func (s *DescribePlacementGroupsOutput) SetPlacementGroups(v []*PlacementGroup) *DescribePlacementGroupsOutput { + s.PlacementGroups = v + return s +} + +type DescribePrefixListsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. + // + // * prefix-list-id: The ID of a prefix list. + // + // * prefix-list-name: The name of a prefix list. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // One or more prefix list IDs. + PrefixListIds []*string `locationName:"PrefixListId" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribePrefixListsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribePrefixListsInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribePrefixListsInput) SetDryRun(v bool) *DescribePrefixListsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribePrefixListsInput) SetFilters(v []*Filter) *DescribePrefixListsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribePrefixListsInput) SetMaxResults(v int64) *DescribePrefixListsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribePrefixListsInput) SetNextToken(v string) *DescribePrefixListsInput { + s.NextToken = &v + return s +} + +// SetPrefixListIds sets the PrefixListIds field's value. +func (s *DescribePrefixListsInput) SetPrefixListIds(v []*string) *DescribePrefixListsInput { + s.PrefixListIds = v + return s +} + +type DescribePrefixListsOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // All available prefix lists. + PrefixLists []*PrefixList `locationName:"prefixListSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribePrefixListsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribePrefixListsOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribePrefixListsOutput) SetNextToken(v string) *DescribePrefixListsOutput { + s.NextToken = &v + return s +} + +// SetPrefixLists sets the PrefixLists field's value. +func (s *DescribePrefixListsOutput) SetPrefixLists(v []*PrefixList) *DescribePrefixListsOutput { + s.PrefixLists = v + return s +} + +type DescribePrincipalIdFormatInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another call with the returned NextToken value. + MaxResults *int64 `min:"1" type:"integer"` + + // The token to request the next page of results. + NextToken *string `type:"string"` + + // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options + // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log + // | image | import-task | instance | internet-gateway | network-acl | network-acl-association + // | network-interface | network-interface-attachment | prefix-list | reservation + // | route-table | route-table-association | security-group | snapshot | subnet + // | subnet-cidr-block-association | volume | vpc | vpc-cidr-block-association + // | vpc-endpoint | vpc-peering-connection | vpn-connection | vpn-gateway + Resources []*string `locationName:"Resource" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribePrincipalIdFormatInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribePrincipalIdFormatInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribePrincipalIdFormatInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribePrincipalIdFormatInput"} + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribePrincipalIdFormatInput) SetDryRun(v bool) *DescribePrincipalIdFormatInput { + s.DryRun = &v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribePrincipalIdFormatInput) SetMaxResults(v int64) *DescribePrincipalIdFormatInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribePrincipalIdFormatInput) SetNextToken(v string) *DescribePrincipalIdFormatInput { + s.NextToken = &v + return s +} + +// SetResources sets the Resources field's value. +func (s *DescribePrincipalIdFormatInput) SetResources(v []*string) *DescribePrincipalIdFormatInput { + s.Resources = v + return s +} + +type DescribePrincipalIdFormatOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the ID format settings for the ARN. + Principals []*PrincipalIdFormat `locationName:"principalSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribePrincipalIdFormatOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribePrincipalIdFormatOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribePrincipalIdFormatOutput) SetNextToken(v string) *DescribePrincipalIdFormatOutput { + s.NextToken = &v + return s +} + +// SetPrincipals sets the Principals field's value. +func (s *DescribePrincipalIdFormatOutput) SetPrincipals(v []*PrincipalIdFormat) *DescribePrincipalIdFormatOutput { + s.Principals = v + return s +} + +type DescribePublicIpv4PoolsInput struct { + _ struct{} `type:"structure"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"1" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // The IDs of the address pools. + PoolIds []*string `locationName:"PoolId" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribePublicIpv4PoolsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribePublicIpv4PoolsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribePublicIpv4PoolsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribePublicIpv4PoolsInput"} + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribePublicIpv4PoolsInput) SetMaxResults(v int64) *DescribePublicIpv4PoolsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribePublicIpv4PoolsInput) SetNextToken(v string) *DescribePublicIpv4PoolsInput { + s.NextToken = &v + return s +} + +// SetPoolIds sets the PoolIds field's value. +func (s *DescribePublicIpv4PoolsInput) SetPoolIds(v []*string) *DescribePublicIpv4PoolsInput { + s.PoolIds = v + return s +} + +type DescribePublicIpv4PoolsOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the address pools. + PublicIpv4Pools []*PublicIpv4Pool `locationName:"publicIpv4PoolSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribePublicIpv4PoolsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribePublicIpv4PoolsOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribePublicIpv4PoolsOutput) SetNextToken(v string) *DescribePublicIpv4PoolsOutput { + s.NextToken = &v + return s +} + +// SetPublicIpv4Pools sets the PublicIpv4Pools field's value. +func (s *DescribePublicIpv4PoolsOutput) SetPublicIpv4Pools(v []*PublicIpv4Pool) *DescribePublicIpv4PoolsOutput { + s.PublicIpv4Pools = v + return s +} + +type DescribeRegionsInput struct { + _ struct{} `type:"structure"` + + // Indicates whether to display all Regions, including Regions that are disabled + // for your account. + AllRegions *bool `type:"boolean"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. + // + // * endpoint - The endpoint of the Region (for example, ec2.us-east-1.amazonaws.com). + // + // * opt-in-status - The opt-in status of the Region (opt-in-not-required + // | opted-in | not-opted-in). + // + // * region-name - The name of the Region (for example, us-east-1). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The names of the Regions. You can specify any Regions, whether they are enabled + // and disabled for your account. + RegionNames []*string `locationName:"RegionName" locationNameList:"RegionName" type:"list"` +} + +// String returns the string representation +func (s DescribeRegionsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeRegionsInput) GoString() string { + return s.String() +} + +// SetAllRegions sets the AllRegions field's value. +func (s *DescribeRegionsInput) SetAllRegions(v bool) *DescribeRegionsInput { + s.AllRegions = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeRegionsInput) SetDryRun(v bool) *DescribeRegionsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeRegionsInput) SetFilters(v []*Filter) *DescribeRegionsInput { + s.Filters = v + return s +} + +// SetRegionNames sets the RegionNames field's value. +func (s *DescribeRegionsInput) SetRegionNames(v []*string) *DescribeRegionsInput { + s.RegionNames = v + return s +} + +type DescribeRegionsOutput struct { + _ struct{} `type:"structure"` + + // Information about the Regions. + Regions []*Region `locationName:"regionInfo" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeRegionsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeRegionsOutput) GoString() string { + return s.String() +} + +// SetRegions sets the Regions field's value. +func (s *DescribeRegionsOutput) SetRegions(v []*Region) *DescribeRegionsOutput { + s.Regions = v + return s +} + +// Contains the parameters for DescribeReservedInstances. +type DescribeReservedInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * availability-zone - The Availability Zone where the Reserved Instance + // can be used. + // + // * duration - The duration of the Reserved Instance (one year or three + // years), in seconds (31536000 | 94608000). + // + // * end - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z). + // + // * fixed-price - The purchase price of the Reserved Instance (for example, + // 9800.0). + // + // * instance-type - The instance type that is covered by the reservation. + // + // * scope - The scope of the Reserved Instance (Region or Availability Zone). + // + // * product-description - The Reserved Instance product platform description. + // Instances that include (Amazon VPC) in the product platform description + // will only be displayed to EC2-Classic account holders and are for use + // with Amazon VPC (Linux/UNIX | Linux/UNIX (Amazon VPC) | SUSE Linux | SUSE + // Linux (Amazon VPC) | Red Hat Enterprise Linux | Red Hat Enterprise Linux + // (Amazon VPC) | Windows | Windows (Amazon VPC) | Windows with SQL Server + // Standard | Windows with SQL Server Standard (Amazon VPC) | Windows with + // SQL Server Web | Windows with SQL Server Web (Amazon VPC) | Windows with + // SQL Server Enterprise | Windows with SQL Server Enterprise (Amazon VPC)). + // + // * reserved-instances-id - The ID of the Reserved Instance. + // + // * start - The time at which the Reserved Instance purchase request was + // placed (for example, 2014-08-07T11:54:42.000Z). + // + // * state - The state of the Reserved Instance (payment-pending | active + // | payment-failed | retired). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * usage-price - The usage price of the Reserved Instance, per hour (for + // example, 0.84). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // Describes whether the Reserved Instance is Standard or Convertible. + OfferingClass *string `type:"string" enum:"OfferingClassType"` + + // The Reserved Instance offering type. If you are using tools that predate + // the 2011-11-01 API version, you only have access to the Medium Utilization + // Reserved Instance offering type. + OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` + + // One or more Reserved Instance IDs. + // + // Default: Describes all your Reserved Instances, or only those otherwise specified. + ReservedInstancesIds []*string `locationName:"ReservedInstancesId" locationNameList:"ReservedInstancesId" type:"list"` +} + +// String returns the string representation +func (s DescribeReservedInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReservedInstancesInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeReservedInstancesInput) SetDryRun(v bool) *DescribeReservedInstancesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeReservedInstancesInput) SetFilters(v []*Filter) *DescribeReservedInstancesInput { + s.Filters = v + return s +} + +// SetOfferingClass sets the OfferingClass field's value. +func (s *DescribeReservedInstancesInput) SetOfferingClass(v string) *DescribeReservedInstancesInput { + s.OfferingClass = &v + return s +} + +// SetOfferingType sets the OfferingType field's value. +func (s *DescribeReservedInstancesInput) SetOfferingType(v string) *DescribeReservedInstancesInput { + s.OfferingType = &v + return s +} + +// SetReservedInstancesIds sets the ReservedInstancesIds field's value. +func (s *DescribeReservedInstancesInput) SetReservedInstancesIds(v []*string) *DescribeReservedInstancesInput { + s.ReservedInstancesIds = v + return s +} + +// Contains the parameters for DescribeReservedInstancesListings. +type DescribeReservedInstancesListingsInput struct { + _ struct{} `type:"structure"` + + // One or more filters. + // + // * reserved-instances-id - The ID of the Reserved Instances. + // + // * reserved-instances-listing-id - The ID of the Reserved Instances listing. + // + // * status - The status of the Reserved Instance listing (pending | active + // | cancelled | closed). + // + // * status-message - The reason for the status. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // One or more Reserved Instance IDs. + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` + + // One or more Reserved Instance listing IDs. + ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string"` +} + +// String returns the string representation +func (s DescribeReservedInstancesListingsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReservedInstancesListingsInput) GoString() string { + return s.String() +} + +// SetFilters sets the Filters field's value. +func (s *DescribeReservedInstancesListingsInput) SetFilters(v []*Filter) *DescribeReservedInstancesListingsInput { + s.Filters = v + return s +} + +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *DescribeReservedInstancesListingsInput) SetReservedInstancesId(v string) *DescribeReservedInstancesListingsInput { + s.ReservedInstancesId = &v + return s +} + +// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. +func (s *DescribeReservedInstancesListingsInput) SetReservedInstancesListingId(v string) *DescribeReservedInstancesListingsInput { + s.ReservedInstancesListingId = &v + return s +} + +// Contains the output of DescribeReservedInstancesListings. +type DescribeReservedInstancesListingsOutput struct { + _ struct{} `type:"structure"` + + // Information about the Reserved Instance listing. + ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeReservedInstancesListingsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReservedInstancesListingsOutput) GoString() string { + return s.String() +} + +// SetReservedInstancesListings sets the ReservedInstancesListings field's value. +func (s *DescribeReservedInstancesListingsOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *DescribeReservedInstancesListingsOutput { + s.ReservedInstancesListings = v + return s +} + +// Contains the parameters for DescribeReservedInstancesModifications. +type DescribeReservedInstancesModificationsInput struct { + _ struct{} `type:"structure"` + + // One or more filters. + // + // * client-token - The idempotency token for the modification request. + // + // * create-date - The time when the modification request was created. + // + // * effective-date - The time when the modification becomes effective. + // + // * modification-result.reserved-instances-id - The ID for the Reserved + // Instances created as part of the modification request. This ID is only + // available when the status of the modification is fulfilled. + // + // * modification-result.target-configuration.availability-zone - The Availability + // Zone for the new Reserved Instances. + // + // * modification-result.target-configuration.instance-count - The number + // of new Reserved Instances. + // + // * modification-result.target-configuration.instance-type - The instance + // type of the new Reserved Instances. + // + // * modification-result.target-configuration.platform - The network platform + // of the new Reserved Instances (EC2-Classic | EC2-VPC). + // + // * reserved-instances-id - The ID of the Reserved Instances modified. + // + // * reserved-instances-modification-id - The ID of the modification request. + // + // * status - The status of the Reserved Instances modification request (processing + // | fulfilled | failed). + // + // * status-message - The reason for the status. + // + // * update-date - The time when the modification request was last updated. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The token to retrieve the next page of results. + NextToken *string `locationName:"nextToken" type:"string"` + + // IDs for the submitted modification request. + ReservedInstancesModificationIds []*string `locationName:"ReservedInstancesModificationId" locationNameList:"ReservedInstancesModificationId" type:"list"` +} + +// String returns the string representation +func (s DescribeReservedInstancesModificationsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReservedInstancesModificationsInput) GoString() string { + return s.String() +} + +// SetFilters sets the Filters field's value. +func (s *DescribeReservedInstancesModificationsInput) SetFilters(v []*Filter) *DescribeReservedInstancesModificationsInput { + s.Filters = v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeReservedInstancesModificationsInput) SetNextToken(v string) *DescribeReservedInstancesModificationsInput { + s.NextToken = &v + return s +} + +// SetReservedInstancesModificationIds sets the ReservedInstancesModificationIds field's value. +func (s *DescribeReservedInstancesModificationsInput) SetReservedInstancesModificationIds(v []*string) *DescribeReservedInstancesModificationsInput { + s.ReservedInstancesModificationIds = v + return s +} + +// Contains the output of DescribeReservedInstancesModifications. +type DescribeReservedInstancesModificationsOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // The Reserved Instance modification information. + ReservedInstancesModifications []*ReservedInstancesModification `locationName:"reservedInstancesModificationsSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeReservedInstancesModificationsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReservedInstancesModificationsOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeReservedInstancesModificationsOutput) SetNextToken(v string) *DescribeReservedInstancesModificationsOutput { + s.NextToken = &v + return s +} + +// SetReservedInstancesModifications sets the ReservedInstancesModifications field's value. +func (s *DescribeReservedInstancesModificationsOutput) SetReservedInstancesModifications(v []*ReservedInstancesModification) *DescribeReservedInstancesModificationsOutput { + s.ReservedInstancesModifications = v + return s +} + +// Contains the parameters for DescribeReservedInstancesOfferings. +type DescribeReservedInstancesOfferingsInput struct { + _ struct{} `type:"structure"` + + // The Availability Zone in which the Reserved Instance can be used. + AvailabilityZone *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * availability-zone - The Availability Zone where the Reserved Instance + // can be used. + // + // * duration - The duration of the Reserved Instance (for example, one year + // or three years), in seconds (31536000 | 94608000). + // + // * fixed-price - The purchase price of the Reserved Instance (for example, + // 9800.0). + // + // * instance-type - The instance type that is covered by the reservation. + // + // * marketplace - Set to true to show only Reserved Instance Marketplace + // offerings. When this filter is not used, which is the default behavior, + // all offerings from both AWS and the Reserved Instance Marketplace are + // listed. + // + // * product-description - The Reserved Instance product platform description. + // Instances that include (Amazon VPC) in the product platform description + // will only be displayed to EC2-Classic account holders and are for use + // with Amazon VPC. (Linux/UNIX | Linux/UNIX (Amazon VPC) | SUSE Linux | + // SUSE Linux (Amazon VPC) | Red Hat Enterprise Linux | Red Hat Enterprise + // Linux (Amazon VPC) | Windows | Windows (Amazon VPC) | Windows with SQL + // Server Standard | Windows with SQL Server Standard (Amazon VPC) | Windows + // with SQL Server Web | Windows with SQL Server Web (Amazon VPC) | Windows + // with SQL Server Enterprise | Windows with SQL Server Enterprise (Amazon + // VPC)) + // + // * reserved-instances-offering-id - The Reserved Instances offering ID. + // + // * scope - The scope of the Reserved Instance (Availability Zone or Region). + // + // * usage-price - The usage price of the Reserved Instance, per hour (for + // example, 0.84). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // Include Reserved Instance Marketplace offerings in the response. + IncludeMarketplace *bool `type:"boolean"` + + // The tenancy of the instances covered by the reservation. A Reserved Instance + // with a tenancy of dedicated is applied to instances that run in a VPC on + // single-tenant hardware (i.e., Dedicated Instances). + // + // Important: The host value cannot be used with this parameter. Use the default + // or dedicated values only. + // + // Default: default + InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` + + // The instance type that the reservation will cover (for example, m1.small). + // For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) + // in the Amazon Elastic Compute Cloud User Guide. + InstanceType *string `type:"string" enum:"InstanceType"` + + // The maximum duration (in seconds) to filter when searching for offerings. + // + // Default: 94608000 (3 years) + MaxDuration *int64 `type:"long"` + + // The maximum number of instances to filter when searching for offerings. + // + // Default: 20 + MaxInstanceCount *int64 `type:"integer"` + + // The maximum number of results to return for the request in a single page. + // The remaining results of the initial request can be seen by sending another + // request with the returned NextToken value. The maximum is 100. + // + // Default: 100 + MaxResults *int64 `locationName:"maxResults" type:"integer"` + + // The minimum duration (in seconds) to filter when searching for offerings. + // + // Default: 2592000 (1 month) + MinDuration *int64 `type:"long"` + + // The token to retrieve the next page of results. + NextToken *string `locationName:"nextToken" type:"string"` + + // The offering class of the Reserved Instance. Can be standard or convertible. + OfferingClass *string `type:"string" enum:"OfferingClassType"` + + // The Reserved Instance offering type. If you are using tools that predate + // the 2011-11-01 API version, you only have access to the Medium Utilization + // Reserved Instance offering type. + OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` + + // The Reserved Instance product platform description. Instances that include + // (Amazon VPC) in the description are for use with Amazon VPC. + ProductDescription *string `type:"string" enum:"RIProductDescription"` + + // One or more Reserved Instances offering IDs. + ReservedInstancesOfferingIds []*string `locationName:"ReservedInstancesOfferingId" type:"list"` +} + +// String returns the string representation +func (s DescribeReservedInstancesOfferingsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReservedInstancesOfferingsInput) GoString() string { + return s.String() +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetAvailabilityZone(v string) *DescribeReservedInstancesOfferingsInput { + s.AvailabilityZone = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetDryRun(v bool) *DescribeReservedInstancesOfferingsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetFilters(v []*Filter) *DescribeReservedInstancesOfferingsInput { + s.Filters = v + return s +} + +// SetIncludeMarketplace sets the IncludeMarketplace field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetIncludeMarketplace(v bool) *DescribeReservedInstancesOfferingsInput { + s.IncludeMarketplace = &v + return s +} + +// SetInstanceTenancy sets the InstanceTenancy field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetInstanceTenancy(v string) *DescribeReservedInstancesOfferingsInput { + s.InstanceTenancy = &v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetInstanceType(v string) *DescribeReservedInstancesOfferingsInput { + s.InstanceType = &v + return s +} + +// SetMaxDuration sets the MaxDuration field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetMaxDuration(v int64) *DescribeReservedInstancesOfferingsInput { + s.MaxDuration = &v + return s +} + +// SetMaxInstanceCount sets the MaxInstanceCount field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetMaxInstanceCount(v int64) *DescribeReservedInstancesOfferingsInput { + s.MaxInstanceCount = &v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetMaxResults(v int64) *DescribeReservedInstancesOfferingsInput { + s.MaxResults = &v + return s +} + +// SetMinDuration sets the MinDuration field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetMinDuration(v int64) *DescribeReservedInstancesOfferingsInput { + s.MinDuration = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetNextToken(v string) *DescribeReservedInstancesOfferingsInput { + s.NextToken = &v + return s +} + +// SetOfferingClass sets the OfferingClass field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetOfferingClass(v string) *DescribeReservedInstancesOfferingsInput { + s.OfferingClass = &v + return s +} + +// SetOfferingType sets the OfferingType field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetOfferingType(v string) *DescribeReservedInstancesOfferingsInput { + s.OfferingType = &v + return s +} + +// SetProductDescription sets the ProductDescription field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetProductDescription(v string) *DescribeReservedInstancesOfferingsInput { + s.ProductDescription = &v + return s +} + +// SetReservedInstancesOfferingIds sets the ReservedInstancesOfferingIds field's value. +func (s *DescribeReservedInstancesOfferingsInput) SetReservedInstancesOfferingIds(v []*string) *DescribeReservedInstancesOfferingsInput { + s.ReservedInstancesOfferingIds = v + return s +} + +// Contains the output of DescribeReservedInstancesOfferings. +type DescribeReservedInstancesOfferingsOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // A list of Reserved Instances offerings. + ReservedInstancesOfferings []*ReservedInstancesOffering `locationName:"reservedInstancesOfferingsSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeReservedInstancesOfferingsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReservedInstancesOfferingsOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeReservedInstancesOfferingsOutput) SetNextToken(v string) *DescribeReservedInstancesOfferingsOutput { + s.NextToken = &v + return s +} + +// SetReservedInstancesOfferings sets the ReservedInstancesOfferings field's value. +func (s *DescribeReservedInstancesOfferingsOutput) SetReservedInstancesOfferings(v []*ReservedInstancesOffering) *DescribeReservedInstancesOfferingsOutput { + s.ReservedInstancesOfferings = v + return s +} + +// Contains the output for DescribeReservedInstances. +type DescribeReservedInstancesOutput struct { + _ struct{} `type:"structure"` + + // A list of Reserved Instances. + ReservedInstances []*ReservedInstances `locationName:"reservedInstancesSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeReservedInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeReservedInstancesOutput) GoString() string { + return s.String() +} + +// SetReservedInstances sets the ReservedInstances field's value. +func (s *DescribeReservedInstancesOutput) SetReservedInstances(v []*ReservedInstances) *DescribeReservedInstancesOutput { + s.ReservedInstances = v + return s +} + +type DescribeRouteTablesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * association.route-table-association-id - The ID of an association ID + // for the route table. + // + // * association.route-table-id - The ID of the route table involved in the + // association. + // + // * association.subnet-id - The ID of the subnet involved in the association. + // + // * association.main - Indicates whether the route table is the main route + // table for the VPC (true | false). Route tables that do not have an association + // ID are not returned in the response. + // + // * owner-id - The ID of the AWS account that owns the route table. + // + // * route-table-id - The ID of the route table. + // + // * route.destination-cidr-block - The IPv4 CIDR range specified in a route + // in the table. + // + // * route.destination-ipv6-cidr-block - The IPv6 CIDR range specified in + // a route in the route table. + // + // * route.destination-prefix-list-id - The ID (prefix) of the AWS service + // specified in a route in the table. + // + // * route.egress-only-internet-gateway-id - The ID of an egress-only Internet + // gateway specified in a route in the route table. + // + // * route.gateway-id - The ID of a gateway specified in a route in the table. + // + // * route.instance-id - The ID of an instance specified in a route in the + // table. + // + // * route.nat-gateway-id - The ID of a NAT gateway. + // + // * route.transit-gateway-id - The ID of a transit gateway. + // + // * route.origin - Describes how the route was created. CreateRouteTable + // indicates that the route was automatically created when the route table + // was created; CreateRoute indicates that the route was manually added to + // the route table; EnableVgwRoutePropagation indicates that the route was + // propagated by route propagation. + // + // * route.state - The state of a route in the route table (active | blackhole). + // The blackhole state indicates that the route's target isn't available + // (for example, the specified gateway isn't attached to the VPC, the specified + // NAT instance has been terminated, and so on). + // + // * route.vpc-peering-connection-id - The ID of a VPC peering connection + // specified in a route in the table. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * transit-gateway-id - The ID of a transit gateway. + // + // * vpc-id - The ID of the VPC for the route table. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // One or more route table IDs. + // + // Default: Describes all your route tables. + RouteTableIds []*string `locationName:"RouteTableId" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeRouteTablesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeRouteTablesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeRouteTablesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeRouteTablesInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeRouteTablesInput) SetDryRun(v bool) *DescribeRouteTablesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeRouteTablesInput) SetFilters(v []*Filter) *DescribeRouteTablesInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeRouteTablesInput) SetMaxResults(v int64) *DescribeRouteTablesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeRouteTablesInput) SetNextToken(v string) *DescribeRouteTablesInput { + s.NextToken = &v + return s +} + +// SetRouteTableIds sets the RouteTableIds field's value. +func (s *DescribeRouteTablesInput) SetRouteTableIds(v []*string) *DescribeRouteTablesInput { + s.RouteTableIds = v + return s +} + +// Contains the output of DescribeRouteTables. +type DescribeRouteTablesOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about one or more route tables. + RouteTables []*RouteTable `locationName:"routeTableSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeRouteTablesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeRouteTablesOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeRouteTablesOutput) SetNextToken(v string) *DescribeRouteTablesOutput { + s.NextToken = &v + return s +} + +// SetRouteTables sets the RouteTables field's value. +func (s *DescribeRouteTablesOutput) SetRouteTables(v []*RouteTable) *DescribeRouteTablesOutput { + s.RouteTables = v + return s +} + +// Contains the parameters for DescribeScheduledInstanceAvailability. +type DescribeScheduledInstanceAvailabilityInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The filters. + // + // * availability-zone - The Availability Zone (for example, us-west-2a). + // + // * instance-type - The instance type (for example, c4.large). + // + // * network-platform - The network platform (EC2-Classic or EC2-VPC). + // + // * platform - The platform (Linux/UNIX or Windows). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The time period for the first schedule to start. + // + // FirstSlotStartTimeRange is a required field + FirstSlotStartTimeRange *SlotDateTimeRangeRequest `type:"structure" required:"true"` + + // The maximum number of results to return in a single call. This value can + // be between 5 and 300. The default value is 300. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The maximum available duration, in hours. This value must be greater than + // MinSlotDurationInHours and less than 1,720. + MaxSlotDurationInHours *int64 `type:"integer"` + + // The minimum available duration, in hours. The minimum required duration is + // 1,200 hours per year. For example, the minimum daily schedule is 4 hours, + // the minimum weekly schedule is 24 hours, and the minimum monthly schedule + // is 100 hours. + MinSlotDurationInHours *int64 `type:"integer"` + + // The token for the next set of results. + NextToken *string `type:"string"` + + // The schedule recurrence. + // + // Recurrence is a required field + Recurrence *ScheduledInstanceRecurrenceRequest `type:"structure" required:"true"` +} + +// String returns the string representation +func (s DescribeScheduledInstanceAvailabilityInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeScheduledInstanceAvailabilityInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeScheduledInstanceAvailabilityInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeScheduledInstanceAvailabilityInput"} + if s.FirstSlotStartTimeRange == nil { + invalidParams.Add(request.NewErrParamRequired("FirstSlotStartTimeRange")) + } + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + if s.Recurrence == nil { + invalidParams.Add(request.NewErrParamRequired("Recurrence")) + } + if s.FirstSlotStartTimeRange != nil { + if err := s.FirstSlotStartTimeRange.Validate(); err != nil { + invalidParams.AddNested("FirstSlotStartTimeRange", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeScheduledInstanceAvailabilityInput) SetDryRun(v bool) *DescribeScheduledInstanceAvailabilityInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeScheduledInstanceAvailabilityInput) SetFilters(v []*Filter) *DescribeScheduledInstanceAvailabilityInput { + s.Filters = v + return s +} + +// SetFirstSlotStartTimeRange sets the FirstSlotStartTimeRange field's value. +func (s *DescribeScheduledInstanceAvailabilityInput) SetFirstSlotStartTimeRange(v *SlotDateTimeRangeRequest) *DescribeScheduledInstanceAvailabilityInput { + s.FirstSlotStartTimeRange = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeScheduledInstanceAvailabilityInput) SetMaxResults(v int64) *DescribeScheduledInstanceAvailabilityInput { + s.MaxResults = &v + return s +} + +// SetMaxSlotDurationInHours sets the MaxSlotDurationInHours field's value. +func (s *DescribeScheduledInstanceAvailabilityInput) SetMaxSlotDurationInHours(v int64) *DescribeScheduledInstanceAvailabilityInput { + s.MaxSlotDurationInHours = &v + return s +} + +// SetMinSlotDurationInHours sets the MinSlotDurationInHours field's value. +func (s *DescribeScheduledInstanceAvailabilityInput) SetMinSlotDurationInHours(v int64) *DescribeScheduledInstanceAvailabilityInput { + s.MinSlotDurationInHours = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeScheduledInstanceAvailabilityInput) SetNextToken(v string) *DescribeScheduledInstanceAvailabilityInput { + s.NextToken = &v + return s +} + +// SetRecurrence sets the Recurrence field's value. +func (s *DescribeScheduledInstanceAvailabilityInput) SetRecurrence(v *ScheduledInstanceRecurrenceRequest) *DescribeScheduledInstanceAvailabilityInput { + s.Recurrence = v + return s +} + +// Contains the output of DescribeScheduledInstanceAvailability. +type DescribeScheduledInstanceAvailabilityOutput struct { + _ struct{} `type:"structure"` + + // The token required to retrieve the next set of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the available Scheduled Instances. + ScheduledInstanceAvailabilitySet []*ScheduledInstanceAvailability `locationName:"scheduledInstanceAvailabilitySet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeScheduledInstanceAvailabilityOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeScheduledInstanceAvailabilityOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeScheduledInstanceAvailabilityOutput) SetNextToken(v string) *DescribeScheduledInstanceAvailabilityOutput { + s.NextToken = &v + return s +} + +// SetScheduledInstanceAvailabilitySet sets the ScheduledInstanceAvailabilitySet field's value. +func (s *DescribeScheduledInstanceAvailabilityOutput) SetScheduledInstanceAvailabilitySet(v []*ScheduledInstanceAvailability) *DescribeScheduledInstanceAvailabilityOutput { + s.ScheduledInstanceAvailabilitySet = v + return s +} + +// Contains the parameters for DescribeScheduledInstances. +type DescribeScheduledInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The filters. + // + // * availability-zone - The Availability Zone (for example, us-west-2a). + // + // * instance-type - The instance type (for example, c4.large). + // + // * network-platform - The network platform (EC2-Classic or EC2-VPC). + // + // * platform - The platform (Linux/UNIX or Windows). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return in a single call. This value can + // be between 5 and 300. The default value is 100. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `type:"integer"` + + // The token for the next set of results. + NextToken *string `type:"string"` + + // The Scheduled Instance IDs. + ScheduledInstanceIds []*string `locationName:"ScheduledInstanceId" locationNameList:"ScheduledInstanceId" type:"list"` + + // The time period for the first schedule to start. + SlotStartTimeRange *SlotStartTimeRangeRequest `type:"structure"` +} + +// String returns the string representation +func (s DescribeScheduledInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeScheduledInstancesInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeScheduledInstancesInput) SetDryRun(v bool) *DescribeScheduledInstancesInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeScheduledInstancesInput) SetFilters(v []*Filter) *DescribeScheduledInstancesInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeScheduledInstancesInput) SetMaxResults(v int64) *DescribeScheduledInstancesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeScheduledInstancesInput) SetNextToken(v string) *DescribeScheduledInstancesInput { + s.NextToken = &v + return s +} + +// SetScheduledInstanceIds sets the ScheduledInstanceIds field's value. +func (s *DescribeScheduledInstancesInput) SetScheduledInstanceIds(v []*string) *DescribeScheduledInstancesInput { + s.ScheduledInstanceIds = v + return s +} + +// SetSlotStartTimeRange sets the SlotStartTimeRange field's value. +func (s *DescribeScheduledInstancesInput) SetSlotStartTimeRange(v *SlotStartTimeRangeRequest) *DescribeScheduledInstancesInput { + s.SlotStartTimeRange = v + return s +} + +// Contains the output of DescribeScheduledInstances. +type DescribeScheduledInstancesOutput struct { + _ struct{} `type:"structure"` + + // The token required to retrieve the next set of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the Scheduled Instances. + ScheduledInstanceSet []*ScheduledInstance `locationName:"scheduledInstanceSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeScheduledInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeScheduledInstancesOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeScheduledInstancesOutput) SetNextToken(v string) *DescribeScheduledInstancesOutput { + s.NextToken = &v + return s +} + +// SetScheduledInstanceSet sets the ScheduledInstanceSet field's value. +func (s *DescribeScheduledInstancesOutput) SetScheduledInstanceSet(v []*ScheduledInstance) *DescribeScheduledInstancesOutput { + s.ScheduledInstanceSet = v + return s +} + +type DescribeSecurityGroupReferencesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IDs of the security groups in your account. + // + // GroupId is a required field + GroupId []*string `locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s DescribeSecurityGroupReferencesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSecurityGroupReferencesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeSecurityGroupReferencesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeSecurityGroupReferencesInput"} + if s.GroupId == nil { + invalidParams.Add(request.NewErrParamRequired("GroupId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeSecurityGroupReferencesInput) SetDryRun(v bool) *DescribeSecurityGroupReferencesInput { + s.DryRun = &v + return s +} + +// SetGroupId sets the GroupId field's value. +func (s *DescribeSecurityGroupReferencesInput) SetGroupId(v []*string) *DescribeSecurityGroupReferencesInput { + s.GroupId = v + return s +} + +type DescribeSecurityGroupReferencesOutput struct { + _ struct{} `type:"structure"` + + // Information about the VPCs with the referencing security groups. + SecurityGroupReferenceSet []*SecurityGroupReference `locationName:"securityGroupReferenceSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeSecurityGroupReferencesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSecurityGroupReferencesOutput) GoString() string { + return s.String() +} + +// SetSecurityGroupReferenceSet sets the SecurityGroupReferenceSet field's value. +func (s *DescribeSecurityGroupReferencesOutput) SetSecurityGroupReferenceSet(v []*SecurityGroupReference) *DescribeSecurityGroupReferencesOutput { + s.SecurityGroupReferenceSet = v + return s +} + +type DescribeSecurityGroupsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. If using multiple filters for rules, the results include security + // groups for which any combination of rules - not necessarily a single rule + // - match all filters. + // + // * description - The description of the security group. + // + // * egress.ip-permission.cidr - An IPv4 CIDR block for an outbound security + // group rule. + // + // * egress.ip-permission.from-port - For an outbound rule, the start of + // port range for the TCP and UDP protocols, or an ICMP type number. + // + // * egress.ip-permission.group-id - The ID of a security group that has + // been referenced in an outbound security group rule. + // + // * egress.ip-permission.group-name - The name of a security group that + // has been referenced in an outbound security group rule. + // + // * egress.ip-permission.ipv6-cidr - An IPv6 CIDR block for an outbound + // security group rule. + // + // * egress.ip-permission.prefix-list-id - The ID (prefix) of the AWS service + // to which a security group rule allows outbound access. + // + // * egress.ip-permission.protocol - The IP protocol for an outbound security + // group rule (tcp | udp | icmp or a protocol number). + // + // * egress.ip-permission.to-port - For an outbound rule, the end of port + // range for the TCP and UDP protocols, or an ICMP code. + // + // * egress.ip-permission.user-id - The ID of an AWS account that has been + // referenced in an outbound security group rule. + // + // * group-id - The ID of the security group. + // + // * group-name - The name of the security group. + // + // * ip-permission.cidr - An IPv4 CIDR block for an inbound security group + // rule. + // + // * ip-permission.from-port - For an inbound rule, the start of port range + // for the TCP and UDP protocols, or an ICMP type number. + // + // * ip-permission.group-id - The ID of a security group that has been referenced + // in an inbound security group rule. + // + // * ip-permission.group-name - The name of a security group that has been + // referenced in an inbound security group rule. + // + // * ip-permission.ipv6-cidr - An IPv6 CIDR block for an inbound security + // group rule. + // + // * ip-permission.prefix-list-id - The ID (prefix) of the AWS service from + // which a security group rule allows inbound access. + // + // * ip-permission.protocol - The IP protocol for an inbound security group + // rule (tcp | udp | icmp or a protocol number). + // + // * ip-permission.to-port - For an inbound rule, the end of port range for + // the TCP and UDP protocols, or an ICMP code. + // + // * ip-permission.user-id - The ID of an AWS account that has been referenced + // in an inbound security group rule. + // + // * owner-id - The AWS account ID of the owner of the security group. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * vpc-id - The ID of the VPC specified when the security group was created. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The IDs of the security groups. Required for security groups in a nondefault + // VPC. + // + // Default: Describes all your security groups. + GroupIds []*string `locationName:"GroupId" locationNameList:"groupId" type:"list"` + + // [EC2-Classic and default VPC only] The names of the security groups. You + // can specify either the security group name or the security group ID. For + // security groups in a nondefault VPC, use the group-name filter to describe + // security groups by name. + // + // Default: Describes all your security groups. + GroupNames []*string `locationName:"GroupName" locationNameList:"GroupName" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another request with the returned NextToken value. + // This value can be between 5 and 1000. If this parameter is not specified, + // then all results are returned. + MaxResults *int64 `min:"5" type:"integer"` + + // The token to request the next page of results. + NextToken *string `type:"string"` +} + +// String returns the string representation +func (s DescribeSecurityGroupsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSecurityGroupsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeSecurityGroupsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeSecurityGroupsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeSecurityGroupsInput) SetDryRun(v bool) *DescribeSecurityGroupsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeSecurityGroupsInput) SetFilters(v []*Filter) *DescribeSecurityGroupsInput { + s.Filters = v + return s +} + +// SetGroupIds sets the GroupIds field's value. +func (s *DescribeSecurityGroupsInput) SetGroupIds(v []*string) *DescribeSecurityGroupsInput { + s.GroupIds = v + return s +} + +// SetGroupNames sets the GroupNames field's value. +func (s *DescribeSecurityGroupsInput) SetGroupNames(v []*string) *DescribeSecurityGroupsInput { + s.GroupNames = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeSecurityGroupsInput) SetMaxResults(v int64) *DescribeSecurityGroupsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeSecurityGroupsInput) SetNextToken(v string) *DescribeSecurityGroupsInput { + s.NextToken = &v + return s +} + +type DescribeSecurityGroupsOutput struct { + _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the security groups. + SecurityGroups []*SecurityGroup `locationName:"securityGroupInfo" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeSecurityGroupsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSecurityGroupsOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeSecurityGroupsOutput) SetNextToken(v string) *DescribeSecurityGroupsOutput { + s.NextToken = &v + return s +} + +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *DescribeSecurityGroupsOutput) SetSecurityGroups(v []*SecurityGroup) *DescribeSecurityGroupsOutput { + s.SecurityGroups = v + return s +} + +type DescribeSnapshotAttributeInput struct { + _ struct{} `type:"structure"` + + // The snapshot attribute you would like to view. + // + // Attribute is a required field + Attribute *string `type:"string" required:"true" enum:"SnapshotAttributeName"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the EBS snapshot. + // + // SnapshotId is a required field + SnapshotId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeSnapshotAttributeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSnapshotAttributeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeSnapshotAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeSnapshotAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) + } + if s.SnapshotId == nil { + invalidParams.Add(request.NewErrParamRequired("SnapshotId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttribute sets the Attribute field's value. +func (s *DescribeSnapshotAttributeInput) SetAttribute(v string) *DescribeSnapshotAttributeInput { + s.Attribute = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeSnapshotAttributeInput) SetDryRun(v bool) *DescribeSnapshotAttributeInput { + s.DryRun = &v + return s +} + +// SetSnapshotId sets the SnapshotId field's value. +func (s *DescribeSnapshotAttributeInput) SetSnapshotId(v string) *DescribeSnapshotAttributeInput { + s.SnapshotId = &v + return s +} + +type DescribeSnapshotAttributeOutput struct { + _ struct{} `type:"structure"` + + // The users and groups that have the permissions for creating volumes from + // the snapshot. + CreateVolumePermissions []*CreateVolumePermission `locationName:"createVolumePermission" locationNameList:"item" type:"list"` + + // The product codes. + ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + + // The ID of the EBS snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` +} + +// String returns the string representation +func (s DescribeSnapshotAttributeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSnapshotAttributeOutput) GoString() string { + return s.String() +} + +// SetCreateVolumePermissions sets the CreateVolumePermissions field's value. +func (s *DescribeSnapshotAttributeOutput) SetCreateVolumePermissions(v []*CreateVolumePermission) *DescribeSnapshotAttributeOutput { + s.CreateVolumePermissions = v + return s +} + +// SetProductCodes sets the ProductCodes field's value. +func (s *DescribeSnapshotAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeSnapshotAttributeOutput { + s.ProductCodes = v + return s +} + +// SetSnapshotId sets the SnapshotId field's value. +func (s *DescribeSnapshotAttributeOutput) SetSnapshotId(v string) *DescribeSnapshotAttributeOutput { + s.SnapshotId = &v + return s +} + +type DescribeSnapshotsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The filters. + // + // * description - A description of the snapshot. + // + // * encrypted - Indicates whether the snapshot is encrypted (true | false) + // + // * owner-alias - Value from an Amazon-maintained list (amazon | self | + // all | aws-marketplace | microsoft) of snapshot owners. Not to be confused + // with the user-configured AWS account alias, which is set from the IAM + // console. + // + // * owner-id - The ID of the AWS account that owns the snapshot. + // + // * progress - The progress of the snapshot, as a percentage (for example, + // 80%). + // + // * snapshot-id - The snapshot ID. + // + // * start-time - The time stamp when the snapshot was initiated. + // + // * status - The status of the snapshot (pending | completed | error). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * volume-id - The ID of the volume the snapshot is for. + // + // * volume-size - The size of the volume, in GiB. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of snapshot results returned by DescribeSnapshots in paginated + // output. When this parameter is used, DescribeSnapshots only returns MaxResults + // results in a single page along with a NextToken response element. The remaining + // results of the initial request can be seen by sending another DescribeSnapshots + // request with the returned NextToken value. This value can be between 5 and + // 1000; if MaxResults is given a value larger than 1000, only 1000 results + // are returned. If this parameter is not used, then DescribeSnapshots returns + // all results. You cannot specify this parameter and the snapshot IDs parameter + // in the same request. + MaxResults *int64 `type:"integer"` + + // The NextToken value returned from a previous paginated DescribeSnapshots + // request where MaxResults was used and the results exceeded the value of that + // parameter. Pagination continues from the end of the previous results that + // returned the NextToken value. This value is null when there are no more results + // to return. + NextToken *string `type:"string"` + + // Describes the snapshots owned by these owners. + OwnerIds []*string `locationName:"Owner" locationNameList:"Owner" type:"list"` + + // The IDs of the AWS accounts that can create volumes from the snapshot. + RestorableByUserIds []*string `locationName:"RestorableBy" type:"list"` + + // The snapshot IDs. + // + // Default: Describes the snapshots for which you have create volume permissions. + SnapshotIds []*string `locationName:"SnapshotId" locationNameList:"SnapshotId" type:"list"` +} + +// String returns the string representation +func (s DescribeSnapshotsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSnapshotsInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeSnapshotsInput) SetDryRun(v bool) *DescribeSnapshotsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeSnapshotsInput) SetFilters(v []*Filter) *DescribeSnapshotsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeSnapshotsInput) SetMaxResults(v int64) *DescribeSnapshotsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeSnapshotsInput) SetNextToken(v string) *DescribeSnapshotsInput { + s.NextToken = &v + return s +} + +// SetOwnerIds sets the OwnerIds field's value. +func (s *DescribeSnapshotsInput) SetOwnerIds(v []*string) *DescribeSnapshotsInput { + s.OwnerIds = v + return s +} + +// SetRestorableByUserIds sets the RestorableByUserIds field's value. +func (s *DescribeSnapshotsInput) SetRestorableByUserIds(v []*string) *DescribeSnapshotsInput { + s.RestorableByUserIds = v + return s +} + +// SetSnapshotIds sets the SnapshotIds field's value. +func (s *DescribeSnapshotsInput) SetSnapshotIds(v []*string) *DescribeSnapshotsInput { + s.SnapshotIds = v + return s +} + +type DescribeSnapshotsOutput struct { + _ struct{} `type:"structure"` + + // The NextToken value to include in a future DescribeSnapshots request. When + // the results of a DescribeSnapshots request exceed MaxResults, this value + // can be used to retrieve the next page of results. This value is null when + // there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the snapshots. + Snapshots []*Snapshot `locationName:"snapshotSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeSnapshotsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSnapshotsOutput) GoString() string { + return s.String() +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeSnapshotsOutput) SetNextToken(v string) *DescribeSnapshotsOutput { + s.NextToken = &v + return s +} + +// SetSnapshots sets the Snapshots field's value. +func (s *DescribeSnapshotsOutput) SetSnapshots(v []*Snapshot) *DescribeSnapshotsOutput { + s.Snapshots = v + return s +} + +// Contains the parameters for DescribeSpotDatafeedSubscription. +type DescribeSpotDatafeedSubscriptionInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` +} + +// String returns the string representation +func (s DescribeSpotDatafeedSubscriptionInput) String() string { + return awsutil.Prettify(s) +} - output = &UnassignPrivateIpAddressesOutput{} - req = c.newRequest(op, input, output) - req.Handlers.Unmarshal.Remove(ec2query.UnmarshalHandler) - req.Handlers.Unmarshal.PushBackNamed(protocol.UnmarshalDiscardBodyHandler) - return +// GoString returns the string representation +func (s DescribeSpotDatafeedSubscriptionInput) GoString() string { + return s.String() } -// UnassignPrivateIpAddresses API operation for Amazon Elastic Compute Cloud. -// -// Unassigns one or more secondary private IP addresses from a network interface. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation UnassignPrivateIpAddresses for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddresses -func (c *EC2) UnassignPrivateIpAddresses(input *UnassignPrivateIpAddressesInput) (*UnassignPrivateIpAddressesOutput, error) { - req, out := c.UnassignPrivateIpAddressesRequest(input) - err := req.Send() - return out, err +// SetDryRun sets the DryRun field's value. +func (s *DescribeSpotDatafeedSubscriptionInput) SetDryRun(v bool) *DescribeSpotDatafeedSubscriptionInput { + s.DryRun = &v + return s } -const opUnmonitorInstances = "UnmonitorInstances" +// Contains the output of DescribeSpotDatafeedSubscription. +type DescribeSpotDatafeedSubscriptionOutput struct { + _ struct{} `type:"structure"` -// UnmonitorInstancesRequest generates a "aws/request.Request" representing the -// client's request for the UnmonitorInstances operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. -// -// See UnmonitorInstances for usage and error information. -// -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the UnmonitorInstances method directly -// instead. -// -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. -// -// // Example sending a request using the UnmonitorInstancesRequest method. -// req, resp := client.UnmonitorInstancesRequest(params) -// -// err := req.Send() -// if err == nil { // resp is now filled -// fmt.Println(resp) -// } -// -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstances -func (c *EC2) UnmonitorInstancesRequest(input *UnmonitorInstancesInput) (req *request.Request, output *UnmonitorInstancesOutput) { - op := &request.Operation{ - Name: opUnmonitorInstances, - HTTPMethod: "POST", - HTTPPath: "/", - } + // The Spot Instance data feed subscription. + SpotDatafeedSubscription *SpotDatafeedSubscription `locationName:"spotDatafeedSubscription" type:"structure"` +} - if input == nil { - input = &UnmonitorInstancesInput{} - } +// String returns the string representation +func (s DescribeSpotDatafeedSubscriptionOutput) String() string { + return awsutil.Prettify(s) +} - output = &UnmonitorInstancesOutput{} - req = c.newRequest(op, input, output) - return +// GoString returns the string representation +func (s DescribeSpotDatafeedSubscriptionOutput) GoString() string { + return s.String() } -// UnmonitorInstances API operation for Amazon Elastic Compute Cloud. -// -// Disables detailed monitoring for a running instance. For more information, -// see Monitoring Your Instances and Volumes (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html) -// in the Amazon Elastic Compute Cloud User Guide. -// -// Returns awserr.Error for service API and SDK errors. Use runtime type assertions -// with awserr.Error's Code and Message methods to get detailed information about -// the error. -// -// See the AWS API reference guide for Amazon Elastic Compute Cloud's -// API operation UnmonitorInstances for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstances -func (c *EC2) UnmonitorInstances(input *UnmonitorInstancesInput) (*UnmonitorInstancesOutput, error) { - req, out := c.UnmonitorInstancesRequest(input) - err := req.Send() - return out, err +// SetSpotDatafeedSubscription sets the SpotDatafeedSubscription field's value. +func (s *DescribeSpotDatafeedSubscriptionOutput) SetSpotDatafeedSubscription(v *SpotDatafeedSubscription) *DescribeSpotDatafeedSubscriptionOutput { + s.SpotDatafeedSubscription = v + return s } -// Contains the parameters for accepting the quote. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuoteRequest -type AcceptReservedInstancesExchangeQuoteInput struct { +// Contains the parameters for DescribeSpotFleetInstances. +type DescribeSpotFleetInstancesInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The IDs of the Convertible Reserved Instances to exchange for other Convertible - // Reserved Instances of the same or higher value. - // - // ReservedInstanceIds is a required field - ReservedInstanceIds []*string `locationName:"ReservedInstanceId" locationNameList:"ReservedInstanceId" type:"list" required:"true"` + // The maximum number of results to return in a single call. Specify a value + // between 1 and 1000. The default value is 1000. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"` - // The configurations of the Convertible Reserved Instance offerings that you - // are purchasing in this exchange. - TargetConfigurations []*TargetConfigurationRequest `locationName:"TargetConfiguration" locationNameList:"TargetConfigurationRequest" type:"list"` + // The token for the next set of results. + NextToken *string `locationName:"nextToken" type:"string"` + + // The ID of the Spot Fleet request. + // + // SpotFleetRequestId is a required field + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` } // String returns the string representation -func (s AcceptReservedInstancesExchangeQuoteInput) String() string { +func (s DescribeSpotFleetInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AcceptReservedInstancesExchangeQuoteInput) GoString() string { +func (s DescribeSpotFleetInstancesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AcceptReservedInstancesExchangeQuoteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AcceptReservedInstancesExchangeQuoteInput"} - if s.ReservedInstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstanceIds")) +func (s *DescribeSpotFleetInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeSpotFleetInstancesInput"} + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) } - if s.TargetConfigurations != nil { - for i, v := range s.TargetConfigurations { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TargetConfigurations", i), err.(request.ErrInvalidParams)) - } - } + if s.SpotFleetRequestId == nil { + invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) } if invalidParams.Len() > 0 { @@ -15780,51 +58366,75 @@ func (s *AcceptReservedInstancesExchangeQuoteInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *AcceptReservedInstancesExchangeQuoteInput) SetDryRun(v bool) *AcceptReservedInstancesExchangeQuoteInput { +func (s *DescribeSpotFleetInstancesInput) SetDryRun(v bool) *DescribeSpotFleetInstancesInput { s.DryRun = &v return s } -// SetReservedInstanceIds sets the ReservedInstanceIds field's value. -func (s *AcceptReservedInstancesExchangeQuoteInput) SetReservedInstanceIds(v []*string) *AcceptReservedInstancesExchangeQuoteInput { - s.ReservedInstanceIds = v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeSpotFleetInstancesInput) SetMaxResults(v int64) *DescribeSpotFleetInstancesInput { + s.MaxResults = &v return s } -// SetTargetConfigurations sets the TargetConfigurations field's value. -func (s *AcceptReservedInstancesExchangeQuoteInput) SetTargetConfigurations(v []*TargetConfigurationRequest) *AcceptReservedInstancesExchangeQuoteInput { - s.TargetConfigurations = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotFleetInstancesInput) SetNextToken(v string) *DescribeSpotFleetInstancesInput { + s.NextToken = &v return s } -// The result of the exchange and whether it was successful. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuoteResult -type AcceptReservedInstancesExchangeQuoteOutput struct { +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *DescribeSpotFleetInstancesInput) SetSpotFleetRequestId(v string) *DescribeSpotFleetInstancesInput { + s.SpotFleetRequestId = &v + return s +} + +// Contains the output of DescribeSpotFleetInstances. +type DescribeSpotFleetInstancesOutput struct { _ struct{} `type:"structure"` - // The ID of the successful exchange. - ExchangeId *string `locationName:"exchangeId" type:"string"` + // The running instances. This list is refreshed periodically and might be out + // of date. + ActiveInstances []*ActiveInstance `locationName:"activeInstanceSet" locationNameList:"item" type:"list"` + + // The token required to retrieve the next set of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // The ID of the Spot Fleet request. + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` } // String returns the string representation -func (s AcceptReservedInstancesExchangeQuoteOutput) String() string { +func (s DescribeSpotFleetInstancesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AcceptReservedInstancesExchangeQuoteOutput) GoString() string { +func (s DescribeSpotFleetInstancesOutput) GoString() string { return s.String() } -// SetExchangeId sets the ExchangeId field's value. -func (s *AcceptReservedInstancesExchangeQuoteOutput) SetExchangeId(v string) *AcceptReservedInstancesExchangeQuoteOutput { - s.ExchangeId = &v +// SetActiveInstances sets the ActiveInstances field's value. +func (s *DescribeSpotFleetInstancesOutput) SetActiveInstances(v []*ActiveInstance) *DescribeSpotFleetInstancesOutput { + s.ActiveInstances = v return s } -// Contains the parameters for AcceptVpcPeeringConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnectionRequest -type AcceptVpcPeeringConnectionInput struct { +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotFleetInstancesOutput) SetNextToken(v string) *DescribeSpotFleetInstancesOutput { + s.NextToken = &v + return s +} + +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *DescribeSpotFleetInstancesOutput) SetSpotFleetRequestId(v string) *DescribeSpotFleetInstancesOutput { + s.SpotFleetRequestId = &v + return s +} + +// Contains the parameters for DescribeSpotFleetRequestHistory. +type DescribeSpotFleetRequestHistoryInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -15833,401 +58443,650 @@ type AcceptVpcPeeringConnectionInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` + // The type of events to describe. By default, all events are described. + EventType *string `locationName:"eventType" type:"string" enum:"EventType"` + + // The maximum number of results to return in a single call. Specify a value + // between 1 and 1000. The default value is 1000. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `locationName:"maxResults" min:"1" type:"integer"` + + // The token for the next set of results. + NextToken *string `locationName:"nextToken" type:"string"` + + // The ID of the Spot Fleet request. + // + // SpotFleetRequestId is a required field + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + + // The starting date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // + // StartTime is a required field + StartTime *time.Time `locationName:"startTime" type:"timestamp" required:"true"` } // String returns the string representation -func (s AcceptVpcPeeringConnectionInput) String() string { +func (s DescribeSpotFleetRequestHistoryInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AcceptVpcPeeringConnectionInput) GoString() string { +func (s DescribeSpotFleetRequestHistoryInput) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeSpotFleetRequestHistoryInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeSpotFleetRequestHistoryInput"} + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) + } + if s.SpotFleetRequestId == nil { + invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) + } + if s.StartTime == nil { + invalidParams.Add(request.NewErrParamRequired("StartTime")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + // SetDryRun sets the DryRun field's value. -func (s *AcceptVpcPeeringConnectionInput) SetDryRun(v bool) *AcceptVpcPeeringConnectionInput { +func (s *DescribeSpotFleetRequestHistoryInput) SetDryRun(v bool) *DescribeSpotFleetRequestHistoryInput { s.DryRun = &v return s } -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *AcceptVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *AcceptVpcPeeringConnectionInput { - s.VpcPeeringConnectionId = &v +// SetEventType sets the EventType field's value. +func (s *DescribeSpotFleetRequestHistoryInput) SetEventType(v string) *DescribeSpotFleetRequestHistoryInput { + s.EventType = &v return s } -// Contains the output of AcceptVpcPeeringConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnectionResult -type AcceptVpcPeeringConnectionOutput struct { +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeSpotFleetRequestHistoryInput) SetMaxResults(v int64) *DescribeSpotFleetRequestHistoryInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotFleetRequestHistoryInput) SetNextToken(v string) *DescribeSpotFleetRequestHistoryInput { + s.NextToken = &v + return s +} + +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *DescribeSpotFleetRequestHistoryInput) SetSpotFleetRequestId(v string) *DescribeSpotFleetRequestHistoryInput { + s.SpotFleetRequestId = &v + return s +} + +// SetStartTime sets the StartTime field's value. +func (s *DescribeSpotFleetRequestHistoryInput) SetStartTime(v time.Time) *DescribeSpotFleetRequestHistoryInput { + s.StartTime = &v + return s +} + +// Contains the output of DescribeSpotFleetRequestHistory. +type DescribeSpotFleetRequestHistoryOutput struct { _ struct{} `type:"structure"` - // Information about the VPC peering connection. - VpcPeeringConnection *VpcPeeringConnection `locationName:"vpcPeeringConnection" type:"structure"` + // Information about the events in the history of the Spot Fleet request. + HistoryRecords []*HistoryRecord `locationName:"historyRecordSet" locationNameList:"item" type:"list"` + + // The last date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // All records up to this time were retrieved. + // + // If nextToken indicates that there are more results, this value is not present. + LastEvaluatedTime *time.Time `locationName:"lastEvaluatedTime" type:"timestamp"` + + // The token required to retrieve the next set of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // The ID of the Spot Fleet request. + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` + + // The starting date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + StartTime *time.Time `locationName:"startTime" type:"timestamp"` } // String returns the string representation -func (s AcceptVpcPeeringConnectionOutput) String() string { +func (s DescribeSpotFleetRequestHistoryOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AcceptVpcPeeringConnectionOutput) GoString() string { +func (s DescribeSpotFleetRequestHistoryOutput) GoString() string { return s.String() } -// SetVpcPeeringConnection sets the VpcPeeringConnection field's value. -func (s *AcceptVpcPeeringConnectionOutput) SetVpcPeeringConnection(v *VpcPeeringConnection) *AcceptVpcPeeringConnectionOutput { - s.VpcPeeringConnection = v +// SetHistoryRecords sets the HistoryRecords field's value. +func (s *DescribeSpotFleetRequestHistoryOutput) SetHistoryRecords(v []*HistoryRecord) *DescribeSpotFleetRequestHistoryOutput { + s.HistoryRecords = v return s } -// Describes an account attribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AccountAttribute -type AccountAttribute struct { +// SetLastEvaluatedTime sets the LastEvaluatedTime field's value. +func (s *DescribeSpotFleetRequestHistoryOutput) SetLastEvaluatedTime(v time.Time) *DescribeSpotFleetRequestHistoryOutput { + s.LastEvaluatedTime = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotFleetRequestHistoryOutput) SetNextToken(v string) *DescribeSpotFleetRequestHistoryOutput { + s.NextToken = &v + return s +} + +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *DescribeSpotFleetRequestHistoryOutput) SetSpotFleetRequestId(v string) *DescribeSpotFleetRequestHistoryOutput { + s.SpotFleetRequestId = &v + return s +} + +// SetStartTime sets the StartTime field's value. +func (s *DescribeSpotFleetRequestHistoryOutput) SetStartTime(v time.Time) *DescribeSpotFleetRequestHistoryOutput { + s.StartTime = &v + return s +} + +// Contains the parameters for DescribeSpotFleetRequests. +type DescribeSpotFleetRequestsInput struct { _ struct{} `type:"structure"` - // The name of the account attribute. - AttributeName *string `locationName:"attributeName" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // One or more values for the account attribute. - AttributeValues []*AccountAttributeValue `locationName:"attributeValueSet" locationNameList:"item" type:"list"` + // The maximum number of results to return in a single call. Specify a value + // between 1 and 1000. The default value is 1000. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `locationName:"maxResults" type:"integer"` + + // The token for the next set of results. + NextToken *string `locationName:"nextToken" type:"string"` + + // The IDs of the Spot Fleet requests. + SpotFleetRequestIds []*string `locationName:"spotFleetRequestId" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AccountAttribute) String() string { +func (s DescribeSpotFleetRequestsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AccountAttribute) GoString() string { +func (s DescribeSpotFleetRequestsInput) GoString() string { return s.String() } -// SetAttributeName sets the AttributeName field's value. -func (s *AccountAttribute) SetAttributeName(v string) *AccountAttribute { - s.AttributeName = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeSpotFleetRequestsInput) SetDryRun(v bool) *DescribeSpotFleetRequestsInput { + s.DryRun = &v return s } -// SetAttributeValues sets the AttributeValues field's value. -func (s *AccountAttribute) SetAttributeValues(v []*AccountAttributeValue) *AccountAttribute { - s.AttributeValues = v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeSpotFleetRequestsInput) SetMaxResults(v int64) *DescribeSpotFleetRequestsInput { + s.MaxResults = &v return s } -// Describes a value of an account attribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AccountAttributeValue -type AccountAttributeValue struct { +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotFleetRequestsInput) SetNextToken(v string) *DescribeSpotFleetRequestsInput { + s.NextToken = &v + return s +} + +// SetSpotFleetRequestIds sets the SpotFleetRequestIds field's value. +func (s *DescribeSpotFleetRequestsInput) SetSpotFleetRequestIds(v []*string) *DescribeSpotFleetRequestsInput { + s.SpotFleetRequestIds = v + return s +} + +// Contains the output of DescribeSpotFleetRequests. +type DescribeSpotFleetRequestsOutput struct { _ struct{} `type:"structure"` - // The value of the attribute. - AttributeValue *string `locationName:"attributeValue" type:"string"` + // The token required to retrieve the next set of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the configuration of your Spot Fleet. + SpotFleetRequestConfigs []*SpotFleetRequestConfig `locationName:"spotFleetRequestConfigSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AccountAttributeValue) String() string { +func (s DescribeSpotFleetRequestsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AccountAttributeValue) GoString() string { +func (s DescribeSpotFleetRequestsOutput) GoString() string { return s.String() } -// SetAttributeValue sets the AttributeValue field's value. -func (s *AccountAttributeValue) SetAttributeValue(v string) *AccountAttributeValue { - s.AttributeValue = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotFleetRequestsOutput) SetNextToken(v string) *DescribeSpotFleetRequestsOutput { + s.NextToken = &v + return s +} + +// SetSpotFleetRequestConfigs sets the SpotFleetRequestConfigs field's value. +func (s *DescribeSpotFleetRequestsOutput) SetSpotFleetRequestConfigs(v []*SpotFleetRequestConfig) *DescribeSpotFleetRequestsOutput { + s.SpotFleetRequestConfigs = v + return s +} + +// Contains the parameters for DescribeSpotInstanceRequests. +type DescribeSpotInstanceRequestsInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * availability-zone-group - The Availability Zone group. + // + // * create-time - The time stamp when the Spot Instance request was created. + // + // * fault-code - The fault code related to the request. + // + // * fault-message - The fault message related to the request. + // + // * instance-id - The ID of the instance that fulfilled the request. + // + // * launch-group - The Spot Instance launch group. + // + // * launch.block-device-mapping.delete-on-termination - Indicates whether + // the EBS volume is deleted on instance termination. + // + // * launch.block-device-mapping.device-name - The device name for the volume + // in the block device mapping (for example, /dev/sdh or xvdh). + // + // * launch.block-device-mapping.snapshot-id - The ID of the snapshot for + // the EBS volume. + // + // * launch.block-device-mapping.volume-size - The size of the EBS volume, + // in GiB. + // + // * launch.block-device-mapping.volume-type - The type of EBS volume: gp2 + // for General Purpose SSD, io1 for Provisioned IOPS SSD, st1 for Throughput + // Optimized HDD, sc1for Cold HDD, or standard for Magnetic. + // + // * launch.group-id - The ID of the security group for the instance. + // + // * launch.group-name - The name of the security group for the instance. + // + // * launch.image-id - The ID of the AMI. + // + // * launch.instance-type - The type of instance (for example, m3.medium). + // + // * launch.kernel-id - The kernel ID. + // + // * launch.key-name - The name of the key pair the instance launched with. + // + // * launch.monitoring-enabled - Whether detailed monitoring is enabled for + // the Spot Instance. + // + // * launch.ramdisk-id - The RAM disk ID. + // + // * launched-availability-zone - The Availability Zone in which the request + // is launched. + // + // * network-interface.addresses.primary - Indicates whether the IP address + // is the primary private IP address. + // + // * network-interface.delete-on-termination - Indicates whether the network + // interface is deleted when the instance is terminated. + // + // * network-interface.description - A description of the network interface. + // + // * network-interface.device-index - The index of the device for the network + // interface attachment on the instance. + // + // * network-interface.group-id - The ID of the security group associated + // with the network interface. + // + // * network-interface.network-interface-id - The ID of the network interface. + // + // * network-interface.private-ip-address - The primary private IP address + // of the network interface. + // + // * network-interface.subnet-id - The ID of the subnet for the instance. + // + // * product-description - The product description associated with the instance + // (Linux/UNIX | Windows). + // + // * spot-instance-request-id - The Spot Instance request ID. + // + // * spot-price - The maximum hourly price for any Spot Instance launched + // to fulfill the request. + // + // * state - The state of the Spot Instance request (open | active | closed + // | cancelled | failed). Spot request status information can help you track + // your Amazon EC2 Spot Instance requests. For more information, see Spot + // Request Status (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html) + // in the Amazon EC2 User Guide for Linux Instances. + // + // * status-code - The short code describing the most recent evaluation of + // your Spot Instance request. + // + // * status-message - The message explaining the status of the Spot Instance + // request. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * type - The type of Spot Instance request (one-time | persistent). + // + // * valid-from - The start date of the request. + // + // * valid-until - The end date of the request. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return in a single call. Specify a value + // between 5 and 1000. To retrieve the remaining results, make another call + // with the returned NextToken value. + MaxResults *int64 `type:"integer"` + + // The token to request the next set of results. This value is null when there + // are no more results to return. + NextToken *string `type:"string"` + + // One or more Spot Instance request IDs. + SpotInstanceRequestIds []*string `locationName:"SpotInstanceRequestId" locationNameList:"SpotInstanceRequestId" type:"list"` +} + +// String returns the string representation +func (s DescribeSpotInstanceRequestsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSpotInstanceRequestsInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeSpotInstanceRequestsInput) SetDryRun(v bool) *DescribeSpotInstanceRequestsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeSpotInstanceRequestsInput) SetFilters(v []*Filter) *DescribeSpotInstanceRequestsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeSpotInstanceRequestsInput) SetMaxResults(v int64) *DescribeSpotInstanceRequestsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotInstanceRequestsInput) SetNextToken(v string) *DescribeSpotInstanceRequestsInput { + s.NextToken = &v + return s +} + +// SetSpotInstanceRequestIds sets the SpotInstanceRequestIds field's value. +func (s *DescribeSpotInstanceRequestsInput) SetSpotInstanceRequestIds(v []*string) *DescribeSpotInstanceRequestsInput { + s.SpotInstanceRequestIds = v return s } -// Describes a running instance in a Spot fleet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ActiveInstance -type ActiveInstance struct { +// Contains the output of DescribeSpotInstanceRequests. +type DescribeSpotInstanceRequestsOutput struct { _ struct{} `type:"structure"` - // The health status of the instance. If the status of both the instance status - // check and the system status check is impaired, the health status of the instance - // is unhealthy. Otherwise, the health status is healthy. - InstanceHealth *string `locationName:"instanceHealth" type:"string" enum:"InstanceHealthStatus"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string"` + // The token to use to retrieve the next set of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` - // The ID of the Spot instance request. - SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` + // One or more Spot Instance requests. + SpotInstanceRequests []*SpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s ActiveInstance) String() string { +func (s DescribeSpotInstanceRequestsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ActiveInstance) GoString() string { +func (s DescribeSpotInstanceRequestsOutput) GoString() string { return s.String() } -// SetInstanceHealth sets the InstanceHealth field's value. -func (s *ActiveInstance) SetInstanceHealth(v string) *ActiveInstance { - s.InstanceHealth = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *ActiveInstance) SetInstanceId(v string) *ActiveInstance { - s.InstanceId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *ActiveInstance) SetInstanceType(v string) *ActiveInstance { - s.InstanceType = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotInstanceRequestsOutput) SetNextToken(v string) *DescribeSpotInstanceRequestsOutput { + s.NextToken = &v return s } -// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. -func (s *ActiveInstance) SetSpotInstanceRequestId(v string) *ActiveInstance { - s.SpotInstanceRequestId = &v +// SetSpotInstanceRequests sets the SpotInstanceRequests field's value. +func (s *DescribeSpotInstanceRequestsOutput) SetSpotInstanceRequests(v []*SpotInstanceRequest) *DescribeSpotInstanceRequestsOutput { + s.SpotInstanceRequests = v return s } -// Describes an Elastic IP address. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Address -type Address struct { +// Contains the parameters for DescribeSpotPriceHistory. +type DescribeSpotPriceHistoryInput struct { _ struct{} `type:"structure"` - // The ID representing the allocation of the address for use with EC2-VPC. - AllocationId *string `locationName:"allocationId" type:"string"` + // Filters the results by the specified Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The ID representing the association of the address with an instance in a - // VPC. - AssociationId *string `locationName:"associationId" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // Indicates whether this Elastic IP address is for use with instances in EC2-Classic - // (standard) or instances in a VPC (vpc). - Domain *string `locationName:"domain" type:"string" enum:"DomainType"` + // The date and time, up to the current date, from which to stop retrieving + // the price history data, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + EndTime *time.Time `locationName:"endTime" type:"timestamp"` - // The ID of the instance that the address is associated with (if any). - InstanceId *string `locationName:"instanceId" type:"string"` + // One or more filters. + // + // * availability-zone - The Availability Zone for which prices should be + // returned. + // + // * instance-type - The type of instance (for example, m3.medium). + // + // * product-description - The product description for the Spot price (Linux/UNIX + // | SUSE Linux | Windows | Linux/UNIX (Amazon VPC) | SUSE Linux (Amazon + // VPC) | Windows (Amazon VPC)). + // + // * spot-price - The Spot price. The value must match exactly (or use wildcards; + // greater than or less than comparison is not supported). + // + // * timestamp - The time stamp of the Spot price history, in UTC format + // (for example, YYYY-MM-DDTHH:MM:SSZ). You can use wildcards (* and ?). + // Greater than or less than comparison is not supported. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + // Filters the results by the specified instance types. + InstanceTypes []*string `locationName:"InstanceType" type:"list"` - // The ID of the AWS account that owns the network interface. - NetworkInterfaceOwnerId *string `locationName:"networkInterfaceOwnerId" type:"string"` + // The maximum number of results to return in a single call. Specify a value + // between 1 and 1000. The default value is 1000. To retrieve the remaining + // results, make another call with the returned NextToken value. + MaxResults *int64 `locationName:"maxResults" type:"integer"` - // The private IP address associated with the Elastic IP address. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + // The token for the next set of results. + NextToken *string `locationName:"nextToken" type:"string"` - // The Elastic IP address. - PublicIp *string `locationName:"publicIp" type:"string"` + // Filters the results by the specified basic product descriptions. + ProductDescriptions []*string `locationName:"ProductDescription" type:"list"` + + // The date and time, up to the past 90 days, from which to start retrieving + // the price history data, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + StartTime *time.Time `locationName:"startTime" type:"timestamp"` } // String returns the string representation -func (s Address) String() string { +func (s DescribeSpotPriceHistoryInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Address) GoString() string { +func (s DescribeSpotPriceHistoryInput) GoString() string { return s.String() } -// SetAllocationId sets the AllocationId field's value. -func (s *Address) SetAllocationId(v string) *Address { - s.AllocationId = &v - return s -} - -// SetAssociationId sets the AssociationId field's value. -func (s *Address) SetAssociationId(v string) *Address { - s.AssociationId = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *DescribeSpotPriceHistoryInput) SetAvailabilityZone(v string) *DescribeSpotPriceHistoryInput { + s.AvailabilityZone = &v return s } -// SetDomain sets the Domain field's value. -func (s *Address) SetDomain(v string) *Address { - s.Domain = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeSpotPriceHistoryInput) SetDryRun(v bool) *DescribeSpotPriceHistoryInput { + s.DryRun = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *Address) SetInstanceId(v string) *Address { - s.InstanceId = &v +// SetEndTime sets the EndTime field's value. +func (s *DescribeSpotPriceHistoryInput) SetEndTime(v time.Time) *DescribeSpotPriceHistoryInput { + s.EndTime = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *Address) SetNetworkInterfaceId(v string) *Address { - s.NetworkInterfaceId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeSpotPriceHistoryInput) SetFilters(v []*Filter) *DescribeSpotPriceHistoryInput { + s.Filters = v return s } -// SetNetworkInterfaceOwnerId sets the NetworkInterfaceOwnerId field's value. -func (s *Address) SetNetworkInterfaceOwnerId(v string) *Address { - s.NetworkInterfaceOwnerId = &v +// SetInstanceTypes sets the InstanceTypes field's value. +func (s *DescribeSpotPriceHistoryInput) SetInstanceTypes(v []*string) *DescribeSpotPriceHistoryInput { + s.InstanceTypes = v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *Address) SetPrivateIpAddress(v string) *Address { - s.PrivateIpAddress = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeSpotPriceHistoryInput) SetMaxResults(v int64) *DescribeSpotPriceHistoryInput { + s.MaxResults = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *Address) SetPublicIp(v string) *Address { - s.PublicIp = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotPriceHistoryInput) SetNextToken(v string) *DescribeSpotPriceHistoryInput { + s.NextToken = &v return s } -// Contains the parameters for AllocateAddress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddressRequest -type AllocateAddressInput struct { - _ struct{} `type:"structure"` - - // Set to vpc to allocate the address for use with instances in a VPC. - // - // Default: The address is for use with instances in EC2-Classic. - Domain *string `type:"string" enum:"DomainType"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} - -// String returns the string representation -func (s AllocateAddressInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AllocateAddressInput) GoString() string { - return s.String() -} - -// SetDomain sets the Domain field's value. -func (s *AllocateAddressInput) SetDomain(v string) *AllocateAddressInput { - s.Domain = &v +// SetProductDescriptions sets the ProductDescriptions field's value. +func (s *DescribeSpotPriceHistoryInput) SetProductDescriptions(v []*string) *DescribeSpotPriceHistoryInput { + s.ProductDescriptions = v return s } -// SetDryRun sets the DryRun field's value. -func (s *AllocateAddressInput) SetDryRun(v bool) *AllocateAddressInput { - s.DryRun = &v +// SetStartTime sets the StartTime field's value. +func (s *DescribeSpotPriceHistoryInput) SetStartTime(v time.Time) *DescribeSpotPriceHistoryInput { + s.StartTime = &v return s } -// Contains the output of AllocateAddress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddressResult -type AllocateAddressOutput struct { +// Contains the output of DescribeSpotPriceHistory. +type DescribeSpotPriceHistoryOutput struct { _ struct{} `type:"structure"` - // [EC2-VPC] The ID that AWS assigns to represent the allocation of the Elastic - // IP address for use with instances in a VPC. - AllocationId *string `locationName:"allocationId" type:"string"` - - // Indicates whether this Elastic IP address is for use with instances in EC2-Classic - // (standard) or instances in a VPC (vpc). - Domain *string `locationName:"domain" type:"string" enum:"DomainType"` + // The token required to retrieve the next set of results. This value is null + // or an empty string when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` - // The Elastic IP address. - PublicIp *string `locationName:"publicIp" type:"string"` + // The historical Spot prices. + SpotPriceHistory []*SpotPrice `locationName:"spotPriceHistorySet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AllocateAddressOutput) String() string { +func (s DescribeSpotPriceHistoryOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AllocateAddressOutput) GoString() string { +func (s DescribeSpotPriceHistoryOutput) GoString() string { return s.String() } -// SetAllocationId sets the AllocationId field's value. -func (s *AllocateAddressOutput) SetAllocationId(v string) *AllocateAddressOutput { - s.AllocationId = &v - return s -} - -// SetDomain sets the Domain field's value. -func (s *AllocateAddressOutput) SetDomain(v string) *AllocateAddressOutput { - s.Domain = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeSpotPriceHistoryOutput) SetNextToken(v string) *DescribeSpotPriceHistoryOutput { + s.NextToken = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *AllocateAddressOutput) SetPublicIp(v string) *AllocateAddressOutput { - s.PublicIp = &v +// SetSpotPriceHistory sets the SpotPriceHistory field's value. +func (s *DescribeSpotPriceHistoryOutput) SetSpotPriceHistory(v []*SpotPrice) *DescribeSpotPriceHistoryOutput { + s.SpotPriceHistory = v return s } -// Contains the parameters for AllocateHosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHostsRequest -type AllocateHostsInput struct { +type DescribeStaleSecurityGroupsInput struct { _ struct{} `type:"structure"` - // This is enabled by default. This property allows instances to be automatically - // placed onto available Dedicated Hosts, when you are launching instances without - // specifying a host ID. - // - // Default: Enabled - AutoPlacement *string `locationName:"autoPlacement" type:"string" enum:"AutoPlacement"` - - // The Availability Zone for the Dedicated Hosts. - // - // AvailabilityZone is a required field - AvailabilityZone *string `locationName:"availabilityZone" type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // Unique, case-sensitive identifier you provide to ensure idempotency of the - // request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) - // in the Amazon Elastic Compute Cloud User Guide. - ClientToken *string `locationName:"clientToken" type:"string"` + // The maximum number of items to return for this request. The request returns + // a token that you can specify in a subsequent call to get the next set of + // results. + MaxResults *int64 `min:"5" type:"integer"` - // Specify the instance type that you want your Dedicated Hosts to be configured - // for. When you specify the instance type, that is the only instance type that - // you can launch onto that host. - // - // InstanceType is a required field - InstanceType *string `locationName:"instanceType" type:"string" required:"true"` + // The token for the next set of items to return. (You received this token from + // a prior call.) + NextToken *string `min:"1" type:"string"` - // The number of Dedicated Hosts you want to allocate to your account with these - // parameters. + // The ID of the VPC. // - // Quantity is a required field - Quantity *int64 `locationName:"quantity" type:"integer" required:"true"` + // VpcId is a required field + VpcId *string `type:"string" required:"true"` } // String returns the string representation -func (s AllocateHostsInput) String() string { +func (s DescribeStaleSecurityGroupsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AllocateHostsInput) GoString() string { +func (s DescribeStaleSecurityGroupsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AllocateHostsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AllocateHostsInput"} - if s.AvailabilityZone == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) +func (s *DescribeStaleSecurityGroupsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeStaleSecurityGroupsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } - if s.InstanceType == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceType")) + if s.NextToken != nil && len(*s.NextToken) < 1 { + invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) } - if s.Quantity == nil { - invalidParams.Add(request.NewErrParamRequired("Quantity")) + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) } if invalidParams.Len() > 0 { @@ -16236,96 +59095,148 @@ func (s *AllocateHostsInput) Validate() error { return nil } -// SetAutoPlacement sets the AutoPlacement field's value. -func (s *AllocateHostsInput) SetAutoPlacement(v string) *AllocateHostsInput { - s.AutoPlacement = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *AllocateHostsInput) SetAvailabilityZone(v string) *AllocateHostsInput { - s.AvailabilityZone = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeStaleSecurityGroupsInput) SetDryRun(v bool) *DescribeStaleSecurityGroupsInput { + s.DryRun = &v return s } -// SetClientToken sets the ClientToken field's value. -func (s *AllocateHostsInput) SetClientToken(v string) *AllocateHostsInput { - s.ClientToken = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeStaleSecurityGroupsInput) SetMaxResults(v int64) *DescribeStaleSecurityGroupsInput { + s.MaxResults = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *AllocateHostsInput) SetInstanceType(v string) *AllocateHostsInput { - s.InstanceType = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeStaleSecurityGroupsInput) SetNextToken(v string) *DescribeStaleSecurityGroupsInput { + s.NextToken = &v return s } -// SetQuantity sets the Quantity field's value. -func (s *AllocateHostsInput) SetQuantity(v int64) *AllocateHostsInput { - s.Quantity = &v +// SetVpcId sets the VpcId field's value. +func (s *DescribeStaleSecurityGroupsInput) SetVpcId(v string) *DescribeStaleSecurityGroupsInput { + s.VpcId = &v return s } -// Contains the output of AllocateHosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHostsResult -type AllocateHostsOutput struct { +type DescribeStaleSecurityGroupsOutput struct { _ struct{} `type:"structure"` - // The ID of the allocated Dedicated Host. This is used when you want to launch - // an instance onto a specific host. - HostIds []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` + // The token to use when requesting the next set of items. If there are no additional + // items to return, the string is empty. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the stale security groups. + StaleSecurityGroupSet []*StaleSecurityGroup `locationName:"staleSecurityGroupSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AllocateHostsOutput) String() string { +func (s DescribeStaleSecurityGroupsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AllocateHostsOutput) GoString() string { +func (s DescribeStaleSecurityGroupsOutput) GoString() string { return s.String() } -// SetHostIds sets the HostIds field's value. -func (s *AllocateHostsOutput) SetHostIds(v []*string) *AllocateHostsOutput { - s.HostIds = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeStaleSecurityGroupsOutput) SetNextToken(v string) *DescribeStaleSecurityGroupsOutput { + s.NextToken = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6AddressesRequest -type AssignIpv6AddressesInput struct { +// SetStaleSecurityGroupSet sets the StaleSecurityGroupSet field's value. +func (s *DescribeStaleSecurityGroupsOutput) SetStaleSecurityGroupSet(v []*StaleSecurityGroup) *DescribeStaleSecurityGroupsOutput { + s.StaleSecurityGroupSet = v + return s +} + +type DescribeSubnetsInput struct { _ struct{} `type:"structure"` - // The number of IPv6 addresses to assign to the network interface. Amazon EC2 - // automatically selects the IPv6 addresses from the subnet range. You can't - // use this option if specifying specific IPv6 addresses. - Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // One or more specific IPv6 addresses to be assigned to the network interface. - // You can't use this option if you're specifying a number of IPv6 addresses. - Ipv6Addresses []*string `locationName:"ipv6Addresses" locationNameList:"item" type:"list"` + // One or more filters. + // + // * availability-zone - The Availability Zone for the subnet. You can also + // use availabilityZone as the filter name. + // + // * availability-zone-id - The ID of the Availability Zone for the subnet. + // You can also use availabilityZoneId as the filter name. + // + // * available-ip-address-count - The number of IPv4 addresses in the subnet + // that are available. + // + // * cidr-block - The IPv4 CIDR block of the subnet. The CIDR block you specify + // must exactly match the subnet's CIDR block for information to be returned + // for the subnet. You can also use cidr or cidrBlock as the filter names. + // + // * default-for-az - Indicates whether this is the default subnet for the + // Availability Zone. You can also use defaultForAz as the filter name. + // + // * ipv6-cidr-block-association.ipv6-cidr-block - An IPv6 CIDR block associated + // with the subnet. + // + // * ipv6-cidr-block-association.association-id - An association ID for an + // IPv6 CIDR block associated with the subnet. + // + // * ipv6-cidr-block-association.state - The state of an IPv6 CIDR block + // associated with the subnet. + // + // * owner-id - The ID of the AWS account that owns the subnet. + // + // * state - The state of the subnet (pending | available). + // + // * subnet-arn - The Amazon Resource Name (ARN) of the subnet. + // + // * subnet-id - The ID of the subnet. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * vpc-id - The ID of the VPC for the subnet. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The ID of the network interface. + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // One or more subnet IDs. // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` + // Default: Describes all your subnets. + SubnetIds []*string `locationName:"SubnetId" locationNameList:"SubnetId" type:"list"` } // String returns the string representation -func (s AssignIpv6AddressesInput) String() string { +func (s DescribeSubnetsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssignIpv6AddressesInput) GoString() string { +func (s DescribeSubnetsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AssignIpv6AddressesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssignIpv6AddressesInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) +func (s *DescribeSubnetsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeSubnetsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } if invalidParams.Len() > 0 { @@ -16334,306 +59245,343 @@ func (s *AssignIpv6AddressesInput) Validate() error { return nil } -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *AssignIpv6AddressesInput) SetIpv6AddressCount(v int64) *AssignIpv6AddressesInput { - s.Ipv6AddressCount = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeSubnetsInput) SetDryRun(v bool) *DescribeSubnetsInput { + s.DryRun = &v return s } -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *AssignIpv6AddressesInput) SetIpv6Addresses(v []*string) *AssignIpv6AddressesInput { - s.Ipv6Addresses = v +// SetFilters sets the Filters field's value. +func (s *DescribeSubnetsInput) SetFilters(v []*Filter) *DescribeSubnetsInput { + s.Filters = v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssignIpv6AddressesInput) SetNetworkInterfaceId(v string) *AssignIpv6AddressesInput { - s.NetworkInterfaceId = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeSubnetsInput) SetMaxResults(v int64) *DescribeSubnetsInput { + s.MaxResults = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6AddressesResult -type AssignIpv6AddressesOutput struct { +// SetNextToken sets the NextToken field's value. +func (s *DescribeSubnetsInput) SetNextToken(v string) *DescribeSubnetsInput { + s.NextToken = &v + return s +} + +// SetSubnetIds sets the SubnetIds field's value. +func (s *DescribeSubnetsInput) SetSubnetIds(v []*string) *DescribeSubnetsInput { + s.SubnetIds = v + return s +} + +type DescribeSubnetsOutput struct { _ struct{} `type:"structure"` - // The IPv6 addresses assigned to the network interface. - AssignedIpv6Addresses []*string `locationName:"assignedIpv6Addresses" locationNameList:"item" type:"list"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + // Information about one or more subnets. + Subnets []*Subnet `locationName:"subnetSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssignIpv6AddressesOutput) String() string { +func (s DescribeSubnetsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssignIpv6AddressesOutput) GoString() string { +func (s DescribeSubnetsOutput) GoString() string { return s.String() } -// SetAssignedIpv6Addresses sets the AssignedIpv6Addresses field's value. -func (s *AssignIpv6AddressesOutput) SetAssignedIpv6Addresses(v []*string) *AssignIpv6AddressesOutput { - s.AssignedIpv6Addresses = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeSubnetsOutput) SetNextToken(v string) *DescribeSubnetsOutput { + s.NextToken = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssignIpv6AddressesOutput) SetNetworkInterfaceId(v string) *AssignIpv6AddressesOutput { - s.NetworkInterfaceId = &v +// SetSubnets sets the Subnets field's value. +func (s *DescribeSubnetsOutput) SetSubnets(v []*Subnet) *DescribeSubnetsOutput { + s.Subnets = v return s } -// Contains the parameters for AssignPrivateIpAddresses. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddressesRequest -type AssignPrivateIpAddressesInput struct { +type DescribeTagsInput struct { _ struct{} `type:"structure"` - // Indicates whether to allow an IP address that is already assigned to another - // network interface or instance to be reassigned to the specified network interface. - AllowReassignment *bool `locationName:"allowReassignment" type:"boolean"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the network interface. + // The filters. // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` - - // One or more IP addresses to be assigned as a secondary private IP address - // to the network interface. You can't specify this parameter when also specifying - // a number of secondary IP addresses. + // * key - The tag key. // - // If you don't specify an IP address, Amazon EC2 automatically selects an IP - // address within the subnet range. - PrivateIpAddresses []*string `locationName:"privateIpAddress" locationNameList:"PrivateIpAddress" type:"list"` + // * resource-id - The ID of the resource. + // + // * resource-type - The resource type (customer-gateway | dedicated-host + // | dhcp-options | elastic-ip | fleet | fpga-image | image | instance | + // host-reservation | internet-gateway | launch-template | natgateway | network-acl + // | network-interface | reserved-instances | route-table | security-group + // | snapshot | spot-instances-request | subnet | volume | vpc | vpc-peering-connection + // | vpn-connection | vpn-gateway). + // + // * tag: - The key/value combination of the tag. For example, specify + // "tag:Owner" for the filter name and "TeamA" for the filter value to find + // resources with the tag "Owner=TeamA". + // + // * value - The tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The number of secondary IP addresses to assign to the network interface. - // You can't specify this parameter when also specifying private IP addresses. - SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` + // The maximum number of results to return in a single call. This value can + // be between 5 and 1000. To retrieve the remaining results, make another call + // with the returned NextToken value. + MaxResults *int64 `locationName:"maxResults" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `locationName:"nextToken" type:"string"` } // String returns the string representation -func (s AssignPrivateIpAddressesInput) String() string { +func (s DescribeTagsInput) String() string { return awsutil.Prettify(s) } -// GoString returns the string representation -func (s AssignPrivateIpAddressesInput) GoString() string { - return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *AssignPrivateIpAddressesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssignPrivateIpAddressesInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAllowReassignment sets the AllowReassignment field's value. -func (s *AssignPrivateIpAddressesInput) SetAllowReassignment(v bool) *AssignPrivateIpAddressesInput { - s.AllowReassignment = &v +// GoString returns the string representation +func (s DescribeTagsInput) GoString() string { + return s.String() +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeTagsInput) SetDryRun(v bool) *DescribeTagsInput { + s.DryRun = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssignPrivateIpAddressesInput) SetNetworkInterfaceId(v string) *AssignPrivateIpAddressesInput { - s.NetworkInterfaceId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeTagsInput) SetFilters(v []*Filter) *DescribeTagsInput { + s.Filters = v return s } -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *AssignPrivateIpAddressesInput) SetPrivateIpAddresses(v []*string) *AssignPrivateIpAddressesInput { - s.PrivateIpAddresses = v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeTagsInput) SetMaxResults(v int64) *DescribeTagsInput { + s.MaxResults = &v return s } -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *AssignPrivateIpAddressesInput) SetSecondaryPrivateIpAddressCount(v int64) *AssignPrivateIpAddressesInput { - s.SecondaryPrivateIpAddressCount = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTagsInput) SetNextToken(v string) *DescribeTagsInput { + s.NextToken = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddressesOutput -type AssignPrivateIpAddressesOutput struct { +type DescribeTagsOutput struct { _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // The tags. + Tags []*TagDescription `locationName:"tagSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssignPrivateIpAddressesOutput) String() string { +func (s DescribeTagsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssignPrivateIpAddressesOutput) GoString() string { +func (s DescribeTagsOutput) GoString() string { return s.String() } -// Contains the parameters for AssociateAddress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddressRequest -type AssociateAddressInput struct { - _ struct{} `type:"structure"` +// SetNextToken sets the NextToken field's value. +func (s *DescribeTagsOutput) SetNextToken(v string) *DescribeTagsOutput { + s.NextToken = &v + return s +} - // [EC2-VPC] The allocation ID. This is required for EC2-VPC. - AllocationId *string `type:"string"` +// SetTags sets the Tags field's value. +func (s *DescribeTagsOutput) SetTags(v []*TagDescription) *DescribeTagsOutput { + s.Tags = v + return s +} - // [EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an Elastic - // IP address that is already associated with an instance or network interface - // to be reassociated with the specified instance or network interface. Otherwise, - // the operation fails. In a VPC in an EC2-VPC-only account, reassociation is - // automatic, therefore you can specify false to ensure the operation fails - // if the Elastic IP address is already associated with another resource. - AllowReassociation *bool `locationName:"allowReassociation" type:"boolean"` +type DescribeTrafficMirrorFiltersInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the instance. This is required for EC2-Classic. For EC2-VPC, you - // can specify either the instance ID or the network interface ID, but not both. - // The operation fails if you specify an instance ID unless exactly one network - // interface is attached. - InstanceId *string `type:"string"` + // One or more filters. The possible values are: + // + // * description: The Traffic Mirror filter description. + // + // * traffic-mirror-filter-id: The ID of the Traffic Mirror filter. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // [EC2-VPC] The ID of the network interface. If the instance has more than - // one network interface, you must specify a network interface ID. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` - // [EC2-VPC] The primary or secondary private IP address to associate with the - // Elastic IP address. If no private IP address is specified, the Elastic IP - // address is associated with the primary private IP address. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + // The token for the next page of results. + NextToken *string `type:"string"` - // The Elastic IP address. This is required for EC2-Classic. - PublicIp *string `type:"string"` + // The ID of the Traffic Mirror filter. + TrafficMirrorFilterIds []*string `locationName:"TrafficMirrorFilterId" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateAddressInput) String() string { +func (s DescribeTrafficMirrorFiltersInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateAddressInput) GoString() string { +func (s DescribeTrafficMirrorFiltersInput) GoString() string { return s.String() } -// SetAllocationId sets the AllocationId field's value. -func (s *AssociateAddressInput) SetAllocationId(v string) *AssociateAddressInput { - s.AllocationId = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeTrafficMirrorFiltersInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTrafficMirrorFiltersInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } -// SetAllowReassociation sets the AllowReassociation field's value. -func (s *AssociateAddressInput) SetAllowReassociation(v bool) *AssociateAddressInput { - s.AllowReassociation = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } // SetDryRun sets the DryRun field's value. -func (s *AssociateAddressInput) SetDryRun(v bool) *AssociateAddressInput { +func (s *DescribeTrafficMirrorFiltersInput) SetDryRun(v bool) *DescribeTrafficMirrorFiltersInput { s.DryRun = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *AssociateAddressInput) SetInstanceId(v string) *AssociateAddressInput { - s.InstanceId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeTrafficMirrorFiltersInput) SetFilters(v []*Filter) *DescribeTrafficMirrorFiltersInput { + s.Filters = v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AssociateAddressInput) SetNetworkInterfaceId(v string) *AssociateAddressInput { - s.NetworkInterfaceId = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeTrafficMirrorFiltersInput) SetMaxResults(v int64) *DescribeTrafficMirrorFiltersInput { + s.MaxResults = &v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *AssociateAddressInput) SetPrivateIpAddress(v string) *AssociateAddressInput { - s.PrivateIpAddress = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTrafficMirrorFiltersInput) SetNextToken(v string) *DescribeTrafficMirrorFiltersInput { + s.NextToken = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *AssociateAddressInput) SetPublicIp(v string) *AssociateAddressInput { - s.PublicIp = &v +// SetTrafficMirrorFilterIds sets the TrafficMirrorFilterIds field's value. +func (s *DescribeTrafficMirrorFiltersInput) SetTrafficMirrorFilterIds(v []*string) *DescribeTrafficMirrorFiltersInput { + s.TrafficMirrorFilterIds = v return s } -// Contains the output of AssociateAddress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddressResult -type AssociateAddressOutput struct { +type DescribeTrafficMirrorFiltersOutput struct { _ struct{} `type:"structure"` - // [EC2-VPC] The ID that represents the association of the Elastic IP address - // with an instance. - AssociationId *string `locationName:"associationId" type:"string"` + // The token to use to retrieve the next page of results. The value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about one or more Traffic Mirror filters. + TrafficMirrorFilters []*TrafficMirrorFilter `locationName:"trafficMirrorFilterSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateAddressOutput) String() string { +func (s DescribeTrafficMirrorFiltersOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateAddressOutput) GoString() string { +func (s DescribeTrafficMirrorFiltersOutput) GoString() string { return s.String() } -// SetAssociationId sets the AssociationId field's value. -func (s *AssociateAddressOutput) SetAssociationId(v string) *AssociateAddressOutput { - s.AssociationId = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTrafficMirrorFiltersOutput) SetNextToken(v string) *DescribeTrafficMirrorFiltersOutput { + s.NextToken = &v return s } -// Contains the parameters for AssociateDhcpOptions. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptionsRequest -type AssociateDhcpOptionsInput struct { - _ struct{} `type:"structure"` +// SetTrafficMirrorFilters sets the TrafficMirrorFilters field's value. +func (s *DescribeTrafficMirrorFiltersOutput) SetTrafficMirrorFilters(v []*TrafficMirrorFilter) *DescribeTrafficMirrorFiltersOutput { + s.TrafficMirrorFilters = v + return s +} - // The ID of the DHCP options set, or default to associate no DHCP options with - // the VPC. - // - // DhcpOptionsId is a required field - DhcpOptionsId *string `type:"string" required:"true"` +type DescribeTrafficMirrorSessionsInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the VPC. + // One or more filters. The possible values are: // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` + // * description: The Traffic Mirror session description. + // + // * network-interface-id: The ID of the Traffic Mirror session network interface. + // + // * owner-id: The ID of the account that owns the Traffic Mirror session. + // + // * packet-length: The assigned number of packets to mirror. + // + // * session-number: The assigned session number. + // + // * traffic-mirror-filter-id: The ID of the Traffic Mirror filter. + // + // * traffic-mirror-session-id: The ID of the Traffic Mirror session. + // + // * traffic-mirror-target-id: The ID of the Traffic Mirror target. + // + // * virtual-network-id: The virtual network ID of the Traffic Mirror session. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // The ID of the Traffic Mirror session. + TrafficMirrorSessionIds []*string `locationName:"TrafficMirrorSessionId" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateDhcpOptionsInput) String() string { +func (s DescribeTrafficMirrorSessionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateDhcpOptionsInput) GoString() string { +func (s DescribeTrafficMirrorSessionsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateDhcpOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateDhcpOptionsInput"} - if s.DhcpOptionsId == nil { - invalidParams.Add(request.NewErrParamRequired("DhcpOptionsId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) +func (s *DescribeTrafficMirrorSessionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTrafficMirrorSessionsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } if invalidParams.Len() > 0 { @@ -16642,72 +59590,119 @@ func (s *AssociateDhcpOptionsInput) Validate() error { return nil } -// SetDhcpOptionsId sets the DhcpOptionsId field's value. -func (s *AssociateDhcpOptionsInput) SetDhcpOptionsId(v string) *AssociateDhcpOptionsInput { - s.DhcpOptionsId = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeTrafficMirrorSessionsInput) SetDryRun(v bool) *DescribeTrafficMirrorSessionsInput { + s.DryRun = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *AssociateDhcpOptionsInput) SetDryRun(v bool) *AssociateDhcpOptionsInput { - s.DryRun = &v +// SetFilters sets the Filters field's value. +func (s *DescribeTrafficMirrorSessionsInput) SetFilters(v []*Filter) *DescribeTrafficMirrorSessionsInput { + s.Filters = v return s } -// SetVpcId sets the VpcId field's value. -func (s *AssociateDhcpOptionsInput) SetVpcId(v string) *AssociateDhcpOptionsInput { - s.VpcId = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeTrafficMirrorSessionsInput) SetMaxResults(v int64) *DescribeTrafficMirrorSessionsInput { + s.MaxResults = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptionsOutput -type AssociateDhcpOptionsOutput struct { +// SetNextToken sets the NextToken field's value. +func (s *DescribeTrafficMirrorSessionsInput) SetNextToken(v string) *DescribeTrafficMirrorSessionsInput { + s.NextToken = &v + return s +} + +// SetTrafficMirrorSessionIds sets the TrafficMirrorSessionIds field's value. +func (s *DescribeTrafficMirrorSessionsInput) SetTrafficMirrorSessionIds(v []*string) *DescribeTrafficMirrorSessionsInput { + s.TrafficMirrorSessionIds = v + return s +} + +type DescribeTrafficMirrorSessionsOutput struct { _ struct{} `type:"structure"` + + // The token to use to retrieve the next page of results. The value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Describes one or more Traffic Mirror sessions. By default, all Traffic Mirror + // sessions are described. Alternatively, you can filter the results. + TrafficMirrorSessions []*TrafficMirrorSession `locationName:"trafficMirrorSessionSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateDhcpOptionsOutput) String() string { +func (s DescribeTrafficMirrorSessionsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateDhcpOptionsOutput) GoString() string { +func (s DescribeTrafficMirrorSessionsOutput) GoString() string { return s.String() } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfileRequest -type AssociateIamInstanceProfileInput struct { +// SetNextToken sets the NextToken field's value. +func (s *DescribeTrafficMirrorSessionsOutput) SetNextToken(v string) *DescribeTrafficMirrorSessionsOutput { + s.NextToken = &v + return s +} + +// SetTrafficMirrorSessions sets the TrafficMirrorSessions field's value. +func (s *DescribeTrafficMirrorSessionsOutput) SetTrafficMirrorSessions(v []*TrafficMirrorSession) *DescribeTrafficMirrorSessionsOutput { + s.TrafficMirrorSessions = v + return s +} + +type DescribeTrafficMirrorTargetsInput struct { _ struct{} `type:"structure"` - // The IAM instance profile. - // - // IamInstanceProfile is a required field - IamInstanceProfile *IamInstanceProfileSpecification `type:"structure" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The ID of the instance. + // One or more filters. The possible values are: // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` + // * description: The Traffic Mirror target description. + // + // * network-interface-id: The ID of the Traffic Mirror session network interface. + // + // * network-load-balancer-arn: The Amazon Resource Name (ARN) of the Network + // Load Balancer that is associated with the session. + // + // * owner-id: The ID of the account that owns the Traffic Mirror session. + // + // * traffic-mirror-target-id: The ID of the Traffic Mirror target. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // The ID of the Traffic Mirror targets. + TrafficMirrorTargetIds []*string `locationName:"TrafficMirrorTargetId" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateIamInstanceProfileInput) String() string { +func (s DescribeTrafficMirrorTargetsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateIamInstanceProfileInput) GoString() string { +func (s DescribeTrafficMirrorTargetsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateIamInstanceProfileInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateIamInstanceProfileInput"} - if s.IamInstanceProfile == nil { - invalidParams.Add(request.NewErrParamRequired("IamInstanceProfile")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) +func (s *DescribeTrafficMirrorTargetsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTrafficMirrorTargetsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } if invalidParams.Len() > 0 { @@ -16716,82 +59711,130 @@ func (s *AssociateIamInstanceProfileInput) Validate() error { return nil } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *AssociateIamInstanceProfileInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *AssociateIamInstanceProfileInput { - s.IamInstanceProfile = v +// SetDryRun sets the DryRun field's value. +func (s *DescribeTrafficMirrorTargetsInput) SetDryRun(v bool) *DescribeTrafficMirrorTargetsInput { + s.DryRun = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *AssociateIamInstanceProfileInput) SetInstanceId(v string) *AssociateIamInstanceProfileInput { - s.InstanceId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeTrafficMirrorTargetsInput) SetFilters(v []*Filter) *DescribeTrafficMirrorTargetsInput { + s.Filters = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfileResult -type AssociateIamInstanceProfileOutput struct { +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeTrafficMirrorTargetsInput) SetMaxResults(v int64) *DescribeTrafficMirrorTargetsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeTrafficMirrorTargetsInput) SetNextToken(v string) *DescribeTrafficMirrorTargetsInput { + s.NextToken = &v + return s +} + +// SetTrafficMirrorTargetIds sets the TrafficMirrorTargetIds field's value. +func (s *DescribeTrafficMirrorTargetsInput) SetTrafficMirrorTargetIds(v []*string) *DescribeTrafficMirrorTargetsInput { + s.TrafficMirrorTargetIds = v + return s +} + +type DescribeTrafficMirrorTargetsOutput struct { _ struct{} `type:"structure"` - // Information about the IAM instance profile association. - IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` + // The token to use to retrieve the next page of results. The value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about one or more Traffic Mirror targets. + TrafficMirrorTargets []*TrafficMirrorTarget `locationName:"trafficMirrorTargetSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateIamInstanceProfileOutput) String() string { +func (s DescribeTrafficMirrorTargetsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateIamInstanceProfileOutput) GoString() string { +func (s DescribeTrafficMirrorTargetsOutput) GoString() string { return s.String() } -// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. -func (s *AssociateIamInstanceProfileOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *AssociateIamInstanceProfileOutput { - s.IamInstanceProfileAssociation = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTrafficMirrorTargetsOutput) SetNextToken(v string) *DescribeTrafficMirrorTargetsOutput { + s.NextToken = &v return s } -// Contains the parameters for AssociateRouteTable. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTableRequest -type AssociateRouteTableInput struct { +// SetTrafficMirrorTargets sets the TrafficMirrorTargets field's value. +func (s *DescribeTrafficMirrorTargetsOutput) SetTrafficMirrorTargets(v []*TrafficMirrorTarget) *DescribeTrafficMirrorTargetsOutput { + s.TrafficMirrorTargets = v + return s +} + +type DescribeTransitGatewayAttachmentsInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the route table. + // One or more filters. The possible values are: // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` - - // The ID of the subnet. + // * association.state - The state of the association (associating | associated + // | disassociating). // - // SubnetId is a required field - SubnetId *string `locationName:"subnetId" type:"string" required:"true"` + // * association.transit-gateway-route-table-id - The ID of the route table + // for the transit gateway. + // + // * resource-id - The ID of the resource. + // + // * resource-owner-id - The ID of the AWS account that owns the resource. + // + // * resource-type - The resource type (vpc | vpn). + // + // * state - The state of the attachment (available | deleted | deleting + // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected + // | rejecting). + // + // * transit-gateway-attachment-id - The ID of the attachment. + // + // * transit-gateway-id - The ID of the transit gateway. + // + // * transit-gateway-owner-id - The ID of the AWS account that owns the transit + // gateway. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // The IDs of the attachments. + TransitGatewayAttachmentIds []*string `type:"list"` } // String returns the string representation -func (s AssociateRouteTableInput) String() string { +func (s DescribeTransitGatewayAttachmentsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateRouteTableInput) GoString() string { +func (s DescribeTransitGatewayAttachmentsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateRouteTableInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) +func (s *DescribeTransitGatewayAttachmentsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTransitGatewayAttachmentsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } if invalidParams.Len() > 0 { @@ -16801,81 +59844,121 @@ func (s *AssociateRouteTableInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *AssociateRouteTableInput) SetDryRun(v bool) *AssociateRouteTableInput { +func (s *DescribeTransitGatewayAttachmentsInput) SetDryRun(v bool) *DescribeTransitGatewayAttachmentsInput { s.DryRun = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *AssociateRouteTableInput) SetRouteTableId(v string) *AssociateRouteTableInput { - s.RouteTableId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeTransitGatewayAttachmentsInput) SetFilters(v []*Filter) *DescribeTransitGatewayAttachmentsInput { + s.Filters = v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *AssociateRouteTableInput) SetSubnetId(v string) *AssociateRouteTableInput { - s.SubnetId = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeTransitGatewayAttachmentsInput) SetMaxResults(v int64) *DescribeTransitGatewayAttachmentsInput { + s.MaxResults = &v return s } -// Contains the output of AssociateRouteTable. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTableResult -type AssociateRouteTableOutput struct { +// SetNextToken sets the NextToken field's value. +func (s *DescribeTransitGatewayAttachmentsInput) SetNextToken(v string) *DescribeTransitGatewayAttachmentsInput { + s.NextToken = &v + return s +} + +// SetTransitGatewayAttachmentIds sets the TransitGatewayAttachmentIds field's value. +func (s *DescribeTransitGatewayAttachmentsInput) SetTransitGatewayAttachmentIds(v []*string) *DescribeTransitGatewayAttachmentsInput { + s.TransitGatewayAttachmentIds = v + return s +} + +type DescribeTransitGatewayAttachmentsOutput struct { _ struct{} `type:"structure"` - // The route table association ID (needed to disassociate the route table). - AssociationId *string `locationName:"associationId" type:"string"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the attachments. + TransitGatewayAttachments []*TransitGatewayAttachment `locationName:"transitGatewayAttachments" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateRouteTableOutput) String() string { +func (s DescribeTransitGatewayAttachmentsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateRouteTableOutput) GoString() string { +func (s DescribeTransitGatewayAttachmentsOutput) GoString() string { return s.String() } -// SetAssociationId sets the AssociationId field's value. -func (s *AssociateRouteTableOutput) SetAssociationId(v string) *AssociateRouteTableOutput { - s.AssociationId = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTransitGatewayAttachmentsOutput) SetNextToken(v string) *DescribeTransitGatewayAttachmentsOutput { + s.NextToken = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlockRequest -type AssociateSubnetCidrBlockInput struct { +// SetTransitGatewayAttachments sets the TransitGatewayAttachments field's value. +func (s *DescribeTransitGatewayAttachmentsOutput) SetTransitGatewayAttachments(v []*TransitGatewayAttachment) *DescribeTransitGatewayAttachmentsOutput { + s.TransitGatewayAttachments = v + return s +} + +type DescribeTransitGatewayRouteTablesInput struct { _ struct{} `type:"structure"` - // The IPv6 CIDR block for your subnet. The subnet must have a /64 prefix length. - // - // Ipv6CidrBlock is a required field - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The ID of your subnet. + // One or more filters. The possible values are: // - // SubnetId is a required field - SubnetId *string `locationName:"subnetId" type:"string" required:"true"` + // * default-association-route-table - Indicates whether this is the default + // association route table for the transit gateway (true | false). + // + // * default-propagation-route-table - Indicates whether this is the default + // propagation route table for the transit gateway (true | false). + // + // * state - The state of the attachment (available | deleted | deleting + // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected + // | rejecting). + // + // * transit-gateway-id - The ID of the transit gateway. + // + // * transit-gateway-route-table-id - The ID of the transit gateway route + // table. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // The IDs of the transit gateway route tables. + TransitGatewayRouteTableIds []*string `locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateSubnetCidrBlockInput) String() string { +func (s DescribeTransitGatewayRouteTablesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateSubnetCidrBlockInput) GoString() string { +func (s DescribeTransitGatewayRouteTablesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateSubnetCidrBlockInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateSubnetCidrBlockInput"} - if s.Ipv6CidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("Ipv6CidrBlock")) - } - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) +func (s *DescribeTransitGatewayRouteTablesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTransitGatewayRouteTablesInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } if invalidParams.Len() > 0 { @@ -16884,81 +59967,117 @@ func (s *AssociateSubnetCidrBlockInput) Validate() error { return nil } -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *AssociateSubnetCidrBlockInput) SetIpv6CidrBlock(v string) *AssociateSubnetCidrBlockInput { - s.Ipv6CidrBlock = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeTransitGatewayRouteTablesInput) SetDryRun(v bool) *DescribeTransitGatewayRouteTablesInput { + s.DryRun = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *AssociateSubnetCidrBlockInput) SetSubnetId(v string) *AssociateSubnetCidrBlockInput { - s.SubnetId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeTransitGatewayRouteTablesInput) SetFilters(v []*Filter) *DescribeTransitGatewayRouteTablesInput { + s.Filters = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlockResult -type AssociateSubnetCidrBlockOutput struct { +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeTransitGatewayRouteTablesInput) SetMaxResults(v int64) *DescribeTransitGatewayRouteTablesInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeTransitGatewayRouteTablesInput) SetNextToken(v string) *DescribeTransitGatewayRouteTablesInput { + s.NextToken = &v + return s +} + +// SetTransitGatewayRouteTableIds sets the TransitGatewayRouteTableIds field's value. +func (s *DescribeTransitGatewayRouteTablesInput) SetTransitGatewayRouteTableIds(v []*string) *DescribeTransitGatewayRouteTablesInput { + s.TransitGatewayRouteTableIds = v + return s +} + +type DescribeTransitGatewayRouteTablesOutput struct { _ struct{} `type:"structure"` - // Information about the IPv6 CIDR block association. - Ipv6CidrBlockAssociation *SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` + // Information about the transit gateway route tables. + TransitGatewayRouteTables []*TransitGatewayRouteTable `locationName:"transitGatewayRouteTables" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateSubnetCidrBlockOutput) String() string { +func (s DescribeTransitGatewayRouteTablesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateSubnetCidrBlockOutput) GoString() string { +func (s DescribeTransitGatewayRouteTablesOutput) GoString() string { return s.String() } -// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. -func (s *AssociateSubnetCidrBlockOutput) SetIpv6CidrBlockAssociation(v *SubnetIpv6CidrBlockAssociation) *AssociateSubnetCidrBlockOutput { - s.Ipv6CidrBlockAssociation = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTransitGatewayRouteTablesOutput) SetNextToken(v string) *DescribeTransitGatewayRouteTablesOutput { + s.NextToken = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *AssociateSubnetCidrBlockOutput) SetSubnetId(v string) *AssociateSubnetCidrBlockOutput { - s.SubnetId = &v +// SetTransitGatewayRouteTables sets the TransitGatewayRouteTables field's value. +func (s *DescribeTransitGatewayRouteTablesOutput) SetTransitGatewayRouteTables(v []*TransitGatewayRouteTable) *DescribeTransitGatewayRouteTablesOutput { + s.TransitGatewayRouteTables = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlockRequest -type AssociateVpcCidrBlockInput struct { +type DescribeTransitGatewayVpcAttachmentsInput struct { _ struct{} `type:"structure"` - // Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for - // the VPC. You cannot specify the range of IPv6 addresses, or the size of the - // CIDR block. - AmazonProvidedIpv6CidrBlock *bool `locationName:"amazonProvidedIpv6CidrBlock" type:"boolean"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The ID of the VPC. + // One or more filters. The possible values are: // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // * state - The state of the attachment (available | deleted | deleting + // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected + // | rejecting). + // + // * transit-gateway-attachment-id - The ID of the attachment. + // + // * transit-gateway-id - The ID of the transit gateway. + // + // * vpc-id - The ID of the VPC. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // The IDs of the attachments. + TransitGatewayAttachmentIds []*string `type:"list"` } // String returns the string representation -func (s AssociateVpcCidrBlockInput) String() string { +func (s DescribeTransitGatewayVpcAttachmentsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateVpcCidrBlockInput) GoString() string { +func (s DescribeTransitGatewayVpcAttachmentsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AssociateVpcCidrBlockInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AssociateVpcCidrBlockInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) +func (s *DescribeTransitGatewayVpcAttachmentsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTransitGatewayVpcAttachmentsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } if invalidParams.Len() > 0 { @@ -16967,100 +60086,141 @@ func (s *AssociateVpcCidrBlockInput) Validate() error { return nil } -// SetAmazonProvidedIpv6CidrBlock sets the AmazonProvidedIpv6CidrBlock field's value. -func (s *AssociateVpcCidrBlockInput) SetAmazonProvidedIpv6CidrBlock(v bool) *AssociateVpcCidrBlockInput { - s.AmazonProvidedIpv6CidrBlock = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeTransitGatewayVpcAttachmentsInput) SetDryRun(v bool) *DescribeTransitGatewayVpcAttachmentsInput { + s.DryRun = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *AssociateVpcCidrBlockInput) SetVpcId(v string) *AssociateVpcCidrBlockInput { - s.VpcId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeTransitGatewayVpcAttachmentsInput) SetFilters(v []*Filter) *DescribeTransitGatewayVpcAttachmentsInput { + s.Filters = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlockResult -type AssociateVpcCidrBlockOutput struct { +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeTransitGatewayVpcAttachmentsInput) SetMaxResults(v int64) *DescribeTransitGatewayVpcAttachmentsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeTransitGatewayVpcAttachmentsInput) SetNextToken(v string) *DescribeTransitGatewayVpcAttachmentsInput { + s.NextToken = &v + return s +} + +// SetTransitGatewayAttachmentIds sets the TransitGatewayAttachmentIds field's value. +func (s *DescribeTransitGatewayVpcAttachmentsInput) SetTransitGatewayAttachmentIds(v []*string) *DescribeTransitGatewayVpcAttachmentsInput { + s.TransitGatewayAttachmentIds = v + return s +} + +type DescribeTransitGatewayVpcAttachmentsOutput struct { _ struct{} `type:"structure"` - // Information about the IPv6 CIDR block association. - Ipv6CidrBlockAssociation *VpcIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` + // Information about the VPC attachments. + TransitGatewayVpcAttachments []*TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachments" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AssociateVpcCidrBlockOutput) String() string { +func (s DescribeTransitGatewayVpcAttachmentsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AssociateVpcCidrBlockOutput) GoString() string { +func (s DescribeTransitGatewayVpcAttachmentsOutput) GoString() string { return s.String() } -// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. -func (s *AssociateVpcCidrBlockOutput) SetIpv6CidrBlockAssociation(v *VpcIpv6CidrBlockAssociation) *AssociateVpcCidrBlockOutput { - s.Ipv6CidrBlockAssociation = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTransitGatewayVpcAttachmentsOutput) SetNextToken(v string) *DescribeTransitGatewayVpcAttachmentsOutput { + s.NextToken = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *AssociateVpcCidrBlockOutput) SetVpcId(v string) *AssociateVpcCidrBlockOutput { - s.VpcId = &v +// SetTransitGatewayVpcAttachments sets the TransitGatewayVpcAttachments field's value. +func (s *DescribeTransitGatewayVpcAttachmentsOutput) SetTransitGatewayVpcAttachments(v []*TransitGatewayVpcAttachment) *DescribeTransitGatewayVpcAttachmentsOutput { + s.TransitGatewayVpcAttachments = v return s } -// Contains the parameters for AttachClassicLinkVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpcRequest -type AttachClassicLinkVpcInput struct { +type DescribeTransitGatewaysInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of one or more of the VPC's security groups. You cannot specify security - // groups from a different VPC. + // One or more filters. The possible values are: + // + // * options.propagation-default-route-table-id - The ID of the default propagation + // route table. + // + // * options.amazon-side-asn - The private ASN for the Amazon side of a BGP + // session. + // + // * options.association-default-route-table-id - The ID of the default association + // route table. + // + // * options.auto-accept-shared-attachments - Indicates whether there is + // automatic acceptance of attachment requests (enable | disable). // - // Groups is a required field - Groups []*string `locationName:"SecurityGroupId" locationNameList:"groupId" type:"list" required:"true"` - - // The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC. + // * options.default-route-table-association - Indicates whether resource + // attachments are automatically associated with the default association + // route table (enable | disable). // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // The ID of a ClassicLink-enabled VPC. + // * options.default-route-table-propagation - Indicates whether resource + // attachments automatically propagate routes to the default propagation + // route table (enable | disable). // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // * options.dns-support - Indicates whether DNS support is enabled (enable + // | disable). + // + // * options.vpn-ecmp-support - Indicates whether Equal Cost Multipath Protocol + // support is enabled (enable | disable). + // + // * owner-id - The ID of the AWS account that owns the transit gateway. + // + // * state - The state of the attachment (available | deleted | deleting + // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected + // | rejecting). + // + // * transit-gateway-id - The ID of the transit gateway. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // The IDs of the transit gateways. + TransitGatewayIds []*string `locationNameList:"item" type:"list"` } // String returns the string representation -func (s AttachClassicLinkVpcInput) String() string { +func (s DescribeTransitGatewaysInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttachClassicLinkVpcInput) GoString() string { +func (s DescribeTransitGatewaysInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AttachClassicLinkVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachClassicLinkVpcInput"} - if s.Groups == nil { - invalidParams.Add(request.NewErrParamRequired("Groups")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) +func (s *DescribeTransitGatewaysInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTransitGatewaysInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } if invalidParams.Len() > 0 { @@ -17070,94 +60230,106 @@ func (s *AttachClassicLinkVpcInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *AttachClassicLinkVpcInput) SetDryRun(v bool) *AttachClassicLinkVpcInput { +func (s *DescribeTransitGatewaysInput) SetDryRun(v bool) *DescribeTransitGatewaysInput { s.DryRun = &v return s } -// SetGroups sets the Groups field's value. -func (s *AttachClassicLinkVpcInput) SetGroups(v []*string) *AttachClassicLinkVpcInput { - s.Groups = v +// SetFilters sets the Filters field's value. +func (s *DescribeTransitGatewaysInput) SetFilters(v []*Filter) *DescribeTransitGatewaysInput { + s.Filters = v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *AttachClassicLinkVpcInput) SetInstanceId(v string) *AttachClassicLinkVpcInput { - s.InstanceId = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeTransitGatewaysInput) SetMaxResults(v int64) *DescribeTransitGatewaysInput { + s.MaxResults = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *AttachClassicLinkVpcInput) SetVpcId(v string) *AttachClassicLinkVpcInput { - s.VpcId = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTransitGatewaysInput) SetNextToken(v string) *DescribeTransitGatewaysInput { + s.NextToken = &v return s } -// Contains the output of AttachClassicLinkVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpcResult -type AttachClassicLinkVpcOutput struct { +// SetTransitGatewayIds sets the TransitGatewayIds field's value. +func (s *DescribeTransitGatewaysInput) SetTransitGatewayIds(v []*string) *DescribeTransitGatewaysInput { + s.TransitGatewayIds = v + return s +} + +type DescribeTransitGatewaysOutput struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the transit gateways. + TransitGateways []*TransitGateway `locationName:"transitGatewaySet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AttachClassicLinkVpcOutput) String() string { +func (s DescribeTransitGatewaysOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttachClassicLinkVpcOutput) GoString() string { +func (s DescribeTransitGatewaysOutput) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *AttachClassicLinkVpcOutput) SetReturn(v bool) *AttachClassicLinkVpcOutput { - s.Return = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeTransitGatewaysOutput) SetNextToken(v string) *DescribeTransitGatewaysOutput { + s.NextToken = &v return s } -// Contains the parameters for AttachInternetGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGatewayRequest -type AttachInternetGatewayInput struct { +// SetTransitGateways sets the TransitGateways field's value. +func (s *DescribeTransitGatewaysOutput) SetTransitGateways(v []*TransitGateway) *DescribeTransitGatewaysOutput { + s.TransitGateways = v + return s +} + +type DescribeVolumeAttributeInput struct { _ struct{} `type:"structure"` + // The attribute of the volume. This parameter is required. + // + // Attribute is a required field + Attribute *string `type:"string" required:"true" enum:"VolumeAttributeName"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the Internet gateway. - // - // InternetGatewayId is a required field - InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` - - // The ID of the VPC. + // The ID of the volume. // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // VolumeId is a required field + VolumeId *string `type:"string" required:"true"` } // String returns the string representation -func (s AttachInternetGatewayInput) String() string { +func (s DescribeVolumeAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttachInternetGatewayInput) GoString() string { +func (s DescribeVolumeAttributeInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AttachInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachInternetGatewayInput"} - if s.InternetGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) +func (s *DescribeVolumeAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeVolumeAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) + if s.VolumeId == nil { + invalidParams.Add(request.NewErrParamRequired("VolumeId")) } if invalidParams.Len() > 0 { @@ -17166,48 +60338,67 @@ func (s *AttachInternetGatewayInput) Validate() error { return nil } -// SetDryRun sets the DryRun field's value. -func (s *AttachInternetGatewayInput) SetDryRun(v bool) *AttachInternetGatewayInput { - s.DryRun = &v +// SetAttribute sets the Attribute field's value. +func (s *DescribeVolumeAttributeInput) SetAttribute(v string) *DescribeVolumeAttributeInput { + s.Attribute = &v return s } -// SetInternetGatewayId sets the InternetGatewayId field's value. -func (s *AttachInternetGatewayInput) SetInternetGatewayId(v string) *AttachInternetGatewayInput { - s.InternetGatewayId = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeVolumeAttributeInput) SetDryRun(v bool) *DescribeVolumeAttributeInput { + s.DryRun = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *AttachInternetGatewayInput) SetVpcId(v string) *AttachInternetGatewayInput { - s.VpcId = &v +// SetVolumeId sets the VolumeId field's value. +func (s *DescribeVolumeAttributeInput) SetVolumeId(v string) *DescribeVolumeAttributeInput { + s.VolumeId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGatewayOutput -type AttachInternetGatewayOutput struct { +type DescribeVolumeAttributeOutput struct { _ struct{} `type:"structure"` + + // The state of autoEnableIO attribute. + AutoEnableIO *AttributeBooleanValue `locationName:"autoEnableIO" type:"structure"` + + // A list of product codes. + ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + + // The ID of the volume. + VolumeId *string `locationName:"volumeId" type:"string"` } // String returns the string representation -func (s AttachInternetGatewayOutput) String() string { +func (s DescribeVolumeAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttachInternetGatewayOutput) GoString() string { +func (s DescribeVolumeAttributeOutput) GoString() string { return s.String() } -// Contains the parameters for AttachNetworkInterface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterfaceRequest -type AttachNetworkInterfaceInput struct { - _ struct{} `type:"structure"` +// SetAutoEnableIO sets the AutoEnableIO field's value. +func (s *DescribeVolumeAttributeOutput) SetAutoEnableIO(v *AttributeBooleanValue) *DescribeVolumeAttributeOutput { + s.AutoEnableIO = v + return s +} - // The index of the device for the network interface attachment. - // - // DeviceIndex is a required field - DeviceIndex *int64 `locationName:"deviceIndex" type:"integer" required:"true"` +// SetProductCodes sets the ProductCodes field's value. +func (s *DescribeVolumeAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeVolumeAttributeOutput { + s.ProductCodes = v + return s +} + +// SetVolumeId sets the VolumeId field's value. +func (s *DescribeVolumeAttributeOutput) SetVolumeId(v string) *DescribeVolumeAttributeOutput { + s.VolumeId = &v + return s +} + +type DescribeVolumeStatusInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have @@ -17215,104 +60406,136 @@ type AttachNetworkInterfaceInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the instance. + // The filters. // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + // * action.code - The action code for the event (for example, enable-volume-io). + // + // * action.description - A description of the action. + // + // * action.event-id - The event ID associated with the action. + // + // * availability-zone - The Availability Zone of the instance. + // + // * event.description - A description of the event. + // + // * event.event-id - The event ID. + // + // * event.event-type - The event type (for io-enabled: passed | failed; + // for io-performance: io-performance:degraded | io-performance:severely-degraded + // | io-performance:stalled). + // + // * event.not-after - The latest end time for the event. + // + // * event.not-before - The earliest start time for the event. + // + // * volume-status.details-name - The cause for volume-status.status (io-enabled + // | io-performance). + // + // * volume-status.details-status - The status of volume-status.details-name + // (for io-enabled: passed | failed; for io-performance: normal | degraded + // | severely-degraded | stalled). + // + // * volume-status.status - The status of the volume (ok | impaired | warning + // | insufficient-data). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The ID of the network interface. + // The maximum number of volume results returned by DescribeVolumeStatus in + // paginated output. When this parameter is used, the request only returns MaxResults + // results in a single page along with a NextToken response element. The remaining + // results of the initial request can be seen by sending another request with + // the returned NextToken value. This value can be between 5 and 1000; if MaxResults + // is given a value larger than 1000, only 1000 results are returned. If this + // parameter is not used, then DescribeVolumeStatus returns all results. You + // cannot specify this parameter and the volume IDs parameter in the same request. + MaxResults *int64 `type:"integer"` + + // The NextToken value to include in a future DescribeVolumeStatus request. + // When the results of the request exceed MaxResults, this value can be used + // to retrieve the next page of results. This value is null when there are no + // more results to return. + NextToken *string `type:"string"` + + // The IDs of the volumes. // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` + // Default: Describes all your volumes. + VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` } // String returns the string representation -func (s AttachNetworkInterfaceInput) String() string { +func (s DescribeVolumeStatusInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttachNetworkInterfaceInput) GoString() string { +func (s DescribeVolumeStatusInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *AttachNetworkInterfaceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachNetworkInterfaceInput"} - if s.DeviceIndex == nil { - invalidParams.Add(request.NewErrParamRequired("DeviceIndex")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetDryRun sets the DryRun field's value. +func (s *DescribeVolumeStatusInput) SetDryRun(v bool) *DescribeVolumeStatusInput { + s.DryRun = &v + return s } -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *AttachNetworkInterfaceInput) SetDeviceIndex(v int64) *AttachNetworkInterfaceInput { - s.DeviceIndex = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVolumeStatusInput) SetFilters(v []*Filter) *DescribeVolumeStatusInput { + s.Filters = v return s } -// SetDryRun sets the DryRun field's value. -func (s *AttachNetworkInterfaceInput) SetDryRun(v bool) *AttachNetworkInterfaceInput { - s.DryRun = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVolumeStatusInput) SetMaxResults(v int64) *DescribeVolumeStatusInput { + s.MaxResults = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *AttachNetworkInterfaceInput) SetInstanceId(v string) *AttachNetworkInterfaceInput { - s.InstanceId = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVolumeStatusInput) SetNextToken(v string) *DescribeVolumeStatusInput { + s.NextToken = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *AttachNetworkInterfaceInput) SetNetworkInterfaceId(v string) *AttachNetworkInterfaceInput { - s.NetworkInterfaceId = &v +// SetVolumeIds sets the VolumeIds field's value. +func (s *DescribeVolumeStatusInput) SetVolumeIds(v []*string) *DescribeVolumeStatusInput { + s.VolumeIds = v return s } -// Contains the output of AttachNetworkInterface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterfaceResult -type AttachNetworkInterfaceOutput struct { +type DescribeVolumeStatusOutput struct { _ struct{} `type:"structure"` - // The ID of the network interface attachment. - AttachmentId *string `locationName:"attachmentId" type:"string"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the status of the volumes. + VolumeStatuses []*VolumeStatusItem `locationName:"volumeStatusSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AttachNetworkInterfaceOutput) String() string { +func (s DescribeVolumeStatusOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttachNetworkInterfaceOutput) GoString() string { +func (s DescribeVolumeStatusOutput) GoString() string { return s.String() } -// SetAttachmentId sets the AttachmentId field's value. -func (s *AttachNetworkInterfaceOutput) SetAttachmentId(v string) *AttachNetworkInterfaceOutput { - s.AttachmentId = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVolumeStatusOutput) SetNextToken(v string) *DescribeVolumeStatusOutput { + s.NextToken = &v return s } -// Contains the parameters for AttachVolume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVolumeRequest -type AttachVolumeInput struct { - _ struct{} `type:"structure"` +// SetVolumeStatuses sets the VolumeStatuses field's value. +func (s *DescribeVolumeStatusOutput) SetVolumeStatuses(v []*VolumeStatusItem) *DescribeVolumeStatusOutput { + s.VolumeStatuses = v + return s +} - // The device name to expose to the instance (for example, /dev/sdh or xvdh). - // - // Device is a required field - Device *string `type:"string" required:"true"` +type DescribeVolumesInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have @@ -17320,220 +60543,251 @@ type AttachVolumeInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the instance. + // The filters. // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` - - // The ID of the EBS volume. The volume and instance must be within the same - // Availability Zone. + // * attachment.attach-time - The time stamp when the attachment initiated. // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` + // * attachment.delete-on-termination - Whether the volume is deleted on + // instance termination. + // + // * attachment.device - The device name specified in the block device mapping + // (for example, /dev/sda1). + // + // * attachment.instance-id - The ID of the instance the volume is attached + // to. + // + // * attachment.status - The attachment state (attaching | attached | detaching). + // + // * availability-zone - The Availability Zone in which the volume was created. + // + // * create-time - The time stamp when the volume was created. + // + // * encrypted - Indicates whether the volume is encrypted (true | false) + // + // * size - The size of the volume, in GiB. + // + // * snapshot-id - The snapshot from which the volume was created. + // + // * status - The status of the volume (creating | available | in-use | deleting + // | deleted | error). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * volume-id - The volume ID. + // + // * volume-type - The Amazon EBS volume type. This can be gp2 for General + // Purpose SSD, io1 for Provisioned IOPS SSD, st1 for Throughput Optimized + // HDD, sc1 for Cold HDD, or standard for Magnetic volumes. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of volume results returned by DescribeVolumes in paginated + // output. When this parameter is used, DescribeVolumes only returns MaxResults + // results in a single page along with a NextToken response element. The remaining + // results of the initial request can be seen by sending another DescribeVolumes + // request with the returned NextToken value. This value can be between 5 and + // 500; if MaxResults is given a value larger than 500, only 500 results are + // returned. If this parameter is not used, then DescribeVolumes returns all + // results. You cannot specify this parameter and the volume IDs parameter in + // the same request. + MaxResults *int64 `locationName:"maxResults" type:"integer"` + + // The NextToken value returned from a previous paginated DescribeVolumes request + // where MaxResults was used and the results exceeded the value of that parameter. + // Pagination continues from the end of the previous results that returned the + // NextToken value. This value is null when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // The volume IDs. + VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` } // String returns the string representation -func (s AttachVolumeInput) String() string { +func (s DescribeVolumesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttachVolumeInput) GoString() string { +func (s DescribeVolumesInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *AttachVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachVolumeInput"} - if s.Device == nil { - invalidParams.Add(request.NewErrParamRequired("Device")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetDryRun sets the DryRun field's value. +func (s *DescribeVolumesInput) SetDryRun(v bool) *DescribeVolumesInput { + s.DryRun = &v + return s } -// SetDevice sets the Device field's value. -func (s *AttachVolumeInput) SetDevice(v string) *AttachVolumeInput { - s.Device = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVolumesInput) SetFilters(v []*Filter) *DescribeVolumesInput { + s.Filters = v return s } -// SetDryRun sets the DryRun field's value. -func (s *AttachVolumeInput) SetDryRun(v bool) *AttachVolumeInput { - s.DryRun = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVolumesInput) SetMaxResults(v int64) *DescribeVolumesInput { + s.MaxResults = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *AttachVolumeInput) SetInstanceId(v string) *AttachVolumeInput { - s.InstanceId = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVolumesInput) SetNextToken(v string) *DescribeVolumesInput { + s.NextToken = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *AttachVolumeInput) SetVolumeId(v string) *AttachVolumeInput { - s.VolumeId = &v +// SetVolumeIds sets the VolumeIds field's value. +func (s *DescribeVolumesInput) SetVolumeIds(v []*string) *DescribeVolumesInput { + s.VolumeIds = v return s } -// Contains the parameters for AttachVpnGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGatewayRequest -type AttachVpnGatewayInput struct { +type DescribeVolumesModificationsInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` + // The filters. Supported filters: volume-id, modification-state, target-size, + // target-iops, target-volume-type, original-size, original-iops, original-volume-type, + // start-time. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The ID of the virtual private gateway. - // - // VpnGatewayId is a required field - VpnGatewayId *string `type:"string" required:"true"` + // The maximum number of results (up to a limit of 500) to be returned in a + // paginated request. + MaxResults *int64 `type:"integer"` + + // The nextToken value returned by a previous paginated request. + NextToken *string `type:"string"` + + // The IDs of the volumes for which in-progress modifications will be described. + VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` } // String returns the string representation -func (s AttachVpnGatewayInput) String() string { +func (s DescribeVolumesModificationsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttachVpnGatewayInput) GoString() string { +func (s DescribeVolumesModificationsInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *AttachVpnGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AttachVpnGatewayInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - if s.VpnGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - // SetDryRun sets the DryRun field's value. -func (s *AttachVpnGatewayInput) SetDryRun(v bool) *AttachVpnGatewayInput { +func (s *DescribeVolumesModificationsInput) SetDryRun(v bool) *DescribeVolumesModificationsInput { s.DryRun = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *AttachVpnGatewayInput) SetVpcId(v string) *AttachVpnGatewayInput { - s.VpcId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVolumesModificationsInput) SetFilters(v []*Filter) *DescribeVolumesModificationsInput { + s.Filters = v return s } -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *AttachVpnGatewayInput) SetVpnGatewayId(v string) *AttachVpnGatewayInput { - s.VpnGatewayId = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVolumesModificationsInput) SetMaxResults(v int64) *DescribeVolumesModificationsInput { + s.MaxResults = &v return s } -// Contains the output of AttachVpnGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGatewayResult -type AttachVpnGatewayOutput struct { - _ struct{} `type:"structure"` - - // Information about the attachment. - VpcAttachment *VpcAttachment `locationName:"attachment" type:"structure"` -} - -// String returns the string representation -func (s AttachVpnGatewayOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s AttachVpnGatewayOutput) GoString() string { - return s.String() +// SetNextToken sets the NextToken field's value. +func (s *DescribeVolumesModificationsInput) SetNextToken(v string) *DescribeVolumesModificationsInput { + s.NextToken = &v + return s } -// SetVpcAttachment sets the VpcAttachment field's value. -func (s *AttachVpnGatewayOutput) SetVpcAttachment(v *VpcAttachment) *AttachVpnGatewayOutput { - s.VpcAttachment = v +// SetVolumeIds sets the VolumeIds field's value. +func (s *DescribeVolumesModificationsInput) SetVolumeIds(v []*string) *DescribeVolumesModificationsInput { + s.VolumeIds = v return s } -// Describes a value for a resource attribute that is a Boolean value. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttributeBooleanValue -type AttributeBooleanValue struct { +type DescribeVolumesModificationsOutput struct { _ struct{} `type:"structure"` - // The attribute value. The valid values are true or false. - Value *bool `locationName:"value" type:"boolean"` + // Token for pagination, null if there are no more results + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the volume modifications. + VolumesModifications []*VolumeModification `locationName:"volumeModificationSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AttributeBooleanValue) String() string { +func (s DescribeVolumesModificationsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttributeBooleanValue) GoString() string { +func (s DescribeVolumesModificationsOutput) GoString() string { return s.String() } -// SetValue sets the Value field's value. -func (s *AttributeBooleanValue) SetValue(v bool) *AttributeBooleanValue { - s.Value = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVolumesModificationsOutput) SetNextToken(v string) *DescribeVolumesModificationsOutput { + s.NextToken = &v return s } -// Describes a value for a resource attribute that is a String. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttributeValue -type AttributeValue struct { +// SetVolumesModifications sets the VolumesModifications field's value. +func (s *DescribeVolumesModificationsOutput) SetVolumesModifications(v []*VolumeModification) *DescribeVolumesModificationsOutput { + s.VolumesModifications = v + return s +} + +type DescribeVolumesOutput struct { _ struct{} `type:"structure"` - // The attribute value. Note that the value is case-sensitive. - Value *string `locationName:"value" type:"string"` + // The NextToken value to include in a future DescribeVolumes request. When + // the results of a DescribeVolumes request exceed MaxResults, this value can + // be used to retrieve the next page of results. This value is null when there + // are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the volumes. + Volumes []*Volume `locationName:"volumeSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AttributeValue) String() string { +func (s DescribeVolumesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AttributeValue) GoString() string { +func (s DescribeVolumesOutput) GoString() string { return s.String() } -// SetValue sets the Value field's value. -func (s *AttributeValue) SetValue(v string) *AttributeValue { - s.Value = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVolumesOutput) SetNextToken(v string) *DescribeVolumesOutput { + s.NextToken = &v return s } -// Contains the parameters for AuthorizeSecurityGroupEgress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgressRequest -type AuthorizeSecurityGroupEgressInput struct { +// SetVolumes sets the Volumes field's value. +func (s *DescribeVolumesOutput) SetVolumes(v []*Volume) *DescribeVolumesOutput { + s.Volumes = v + return s +} + +type DescribeVpcAttributeInput struct { _ struct{} `type:"structure"` - // The CIDR IPv4 address range. We recommend that you specify the CIDR range - // in a set of IP permissions instead. - CidrIp *string `locationName:"cidrIp" type:"string"` + // The VPC attribute. + // + // Attribute is a required field + Attribute *string `type:"string" required:"true" enum:"VpcAttributeName"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have @@ -17541,53 +60795,30 @@ type AuthorizeSecurityGroupEgressInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The start of port range for the TCP and UDP protocols, or an ICMP type number. - // We recommend that you specify the port range in a set of IP permissions instead. - FromPort *int64 `locationName:"fromPort" type:"integer"` - - // The ID of the security group. + // The ID of the VPC. // - // GroupId is a required field - GroupId *string `locationName:"groupId" type:"string" required:"true"` - - // A set of IP permissions. You can't specify a destination security group and - // a CIDR IP address range. - IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` - - // The IP protocol name or number. We recommend that you specify the protocol - // in a set of IP permissions instead. - IpProtocol *string `locationName:"ipProtocol" type:"string"` - - // The name of a destination security group. To authorize outbound access to - // a destination security group, we recommend that you use a set of IP permissions - // instead. - SourceSecurityGroupName *string `locationName:"sourceSecurityGroupName" type:"string"` - - // The AWS account number for a destination security group. To authorize outbound - // access to a destination security group, we recommend that you use a set of - // IP permissions instead. - SourceSecurityGroupOwnerId *string `locationName:"sourceSecurityGroupOwnerId" type:"string"` - - // The end of port range for the TCP and UDP protocols, or an ICMP type number. - // We recommend that you specify the port range in a set of IP permissions instead. - ToPort *int64 `locationName:"toPort" type:"integer"` + // VpcId is a required field + VpcId *string `type:"string" required:"true"` } // String returns the string representation -func (s AuthorizeSecurityGroupEgressInput) String() string { +func (s DescribeVpcAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AuthorizeSecurityGroupEgressInput) GoString() string { +func (s DescribeVpcAttributeInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *AuthorizeSecurityGroupEgressInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "AuthorizeSecurityGroupEgressInput"} - if s.GroupId == nil { - invalidParams.Add(request.NewErrParamRequired("GroupId")) +func (s *DescribeVpcAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeVpcAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) } if invalidParams.Len() > 0 { @@ -17596,670 +60827,612 @@ func (s *AuthorizeSecurityGroupEgressInput) Validate() error { return nil } -// SetCidrIp sets the CidrIp field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetCidrIp(v string) *AuthorizeSecurityGroupEgressInput { - s.CidrIp = &v +// SetAttribute sets the Attribute field's value. +func (s *DescribeVpcAttributeInput) SetAttribute(v string) *DescribeVpcAttributeInput { + s.Attribute = &v return s } // SetDryRun sets the DryRun field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetDryRun(v bool) *AuthorizeSecurityGroupEgressInput { +func (s *DescribeVpcAttributeInput) SetDryRun(v bool) *DescribeVpcAttributeInput { s.DryRun = &v return s } -// SetFromPort sets the FromPort field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetFromPort(v int64) *AuthorizeSecurityGroupEgressInput { - s.FromPort = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetGroupId(v string) *AuthorizeSecurityGroupEgressInput { - s.GroupId = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetIpPermissions(v []*IpPermission) *AuthorizeSecurityGroupEgressInput { - s.IpPermissions = v - return s -} - -// SetIpProtocol sets the IpProtocol field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetIpProtocol(v string) *AuthorizeSecurityGroupEgressInput { - s.IpProtocol = &v +// SetVpcId sets the VpcId field's value. +func (s *DescribeVpcAttributeInput) SetVpcId(v string) *DescribeVpcAttributeInput { + s.VpcId = &v return s } -// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetSourceSecurityGroupName(v string) *AuthorizeSecurityGroupEgressInput { - s.SourceSecurityGroupName = &v - return s -} +type DescribeVpcAttributeOutput struct { + _ struct{} `type:"structure"` -// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetSourceSecurityGroupOwnerId(v string) *AuthorizeSecurityGroupEgressInput { - s.SourceSecurityGroupOwnerId = &v - return s -} + // Indicates whether the instances launched in the VPC get DNS hostnames. If + // this attribute is true, instances in the VPC get DNS hostnames; otherwise, + // they do not. + EnableDnsHostnames *AttributeBooleanValue `locationName:"enableDnsHostnames" type:"structure"` -// SetToPort sets the ToPort field's value. -func (s *AuthorizeSecurityGroupEgressInput) SetToPort(v int64) *AuthorizeSecurityGroupEgressInput { - s.ToPort = &v - return s -} + // Indicates whether DNS resolution is enabled for the VPC. If this attribute + // is true, the Amazon DNS server resolves DNS hostnames for your instances + // to their corresponding IP addresses; otherwise, it does not. + EnableDnsSupport *AttributeBooleanValue `locationName:"enableDnsSupport" type:"structure"` -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgressOutput -type AuthorizeSecurityGroupEgressOutput struct { - _ struct{} `type:"structure"` + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s AuthorizeSecurityGroupEgressOutput) String() string { +func (s DescribeVpcAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AuthorizeSecurityGroupEgressOutput) GoString() string { +func (s DescribeVpcAttributeOutput) GoString() string { return s.String() } -// Contains the parameters for AuthorizeSecurityGroupIngress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngressRequest -type AuthorizeSecurityGroupIngressInput struct { - _ struct{} `type:"structure"` - - // The CIDR IPv4 address range. You can't specify this parameter when specifying - // a source security group. - CidrIp *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 - // type number. For the ICMP/ICMPv6 type number, use -1 to specify all types. - FromPort *int64 `type:"integer"` - - // The ID of the security group. Required for a nondefault VPC. - GroupId *string `type:"string"` +// SetEnableDnsHostnames sets the EnableDnsHostnames field's value. +func (s *DescribeVpcAttributeOutput) SetEnableDnsHostnames(v *AttributeBooleanValue) *DescribeVpcAttributeOutput { + s.EnableDnsHostnames = v + return s +} - // [EC2-Classic, default VPC] The name of the security group. - GroupName *string `type:"string"` +// SetEnableDnsSupport sets the EnableDnsSupport field's value. +func (s *DescribeVpcAttributeOutput) SetEnableDnsSupport(v *AttributeBooleanValue) *DescribeVpcAttributeOutput { + s.EnableDnsSupport = v + return s +} - // A set of IP permissions. Can be used to specify multiple rules in a single - // command. - IpPermissions []*IpPermission `locationNameList:"item" type:"list"` +// SetVpcId sets the VpcId field's value. +func (s *DescribeVpcAttributeOutput) SetVpcId(v string) *DescribeVpcAttributeOutput { + s.VpcId = &v + return s +} - // The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). - // (VPC only) Use -1 to specify all protocols. If you specify -1, or a protocol - // number other than tcp, udp, icmp, or 58 (ICMPv6), traffic on all ports is - // allowed, regardless of any ports you specify. For tcp, udp, and icmp, you - // must specify a port range. For protocol 58 (ICMPv6), you can optionally specify - // a port range; if you don't, traffic for all types and codes is allowed. - IpProtocol *string `type:"string"` +type DescribeVpcClassicLinkDnsSupportInput struct { + _ struct{} `type:"structure"` - // [EC2-Classic, default VPC] The name of the source security group. You can't - // specify this parameter in combination with the following parameters: the - // CIDR IP address range, the start of the port range, the IP protocol, and - // the end of the port range. Creates rules that grant full ICMP, UDP, and TCP - // access. To create a rule with a specific IP protocol and port range, use - // a set of IP permissions instead. For EC2-VPC, the source security group must - // be in the same VPC. - SourceSecurityGroupName *string `type:"string"` + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `locationName:"maxResults" min:"5" type:"integer"` - // [EC2-Classic] The AWS account number for the source security group, if the - // source security group is in a different account. You can't specify this parameter - // in combination with the following parameters: the CIDR IP address range, - // the IP protocol, the start of the port range, and the end of the port range. - // Creates rules that grant full ICMP, UDP, and TCP access. To create a rule - // with a specific IP protocol and port range, use a set of IP permissions instead. - SourceSecurityGroupOwnerId *string `type:"string"` + // The token for the next page of results. + NextToken *string `locationName:"nextToken" min:"1" type:"string"` - // The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code - // number. For the ICMP/ICMPv6 code number, use -1 to specify all codes. - ToPort *int64 `type:"integer"` + // One or more VPC IDs. + VpcIds []*string `locationNameList:"VpcId" type:"list"` } // String returns the string representation -func (s AuthorizeSecurityGroupIngressInput) String() string { +func (s DescribeVpcClassicLinkDnsSupportInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AuthorizeSecurityGroupIngressInput) GoString() string { +func (s DescribeVpcClassicLinkDnsSupportInput) GoString() string { return s.String() } -// SetCidrIp sets the CidrIp field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetCidrIp(v string) *AuthorizeSecurityGroupIngressInput { - s.CidrIp = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetDryRun(v bool) *AuthorizeSecurityGroupIngressInput { - s.DryRun = &v - return s -} - -// SetFromPort sets the FromPort field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetFromPort(v int64) *AuthorizeSecurityGroupIngressInput { - s.FromPort = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetGroupId(v string) *AuthorizeSecurityGroupIngressInput { - s.GroupId = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeVpcClassicLinkDnsSupportInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeVpcClassicLinkDnsSupportInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + if s.NextToken != nil && len(*s.NextToken) < 1 { + invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) + } -// SetGroupName sets the GroupName field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetGroupName(v string) *AuthorizeSecurityGroupIngressInput { - s.GroupName = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetIpPermissions sets the IpPermissions field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetIpPermissions(v []*IpPermission) *AuthorizeSecurityGroupIngressInput { - s.IpPermissions = v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcClassicLinkDnsSupportInput) SetMaxResults(v int64) *DescribeVpcClassicLinkDnsSupportInput { + s.MaxResults = &v return s } -// SetIpProtocol sets the IpProtocol field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetIpProtocol(v string) *AuthorizeSecurityGroupIngressInput { - s.IpProtocol = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcClassicLinkDnsSupportInput) SetNextToken(v string) *DescribeVpcClassicLinkDnsSupportInput { + s.NextToken = &v return s } -// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetSourceSecurityGroupName(v string) *AuthorizeSecurityGroupIngressInput { - s.SourceSecurityGroupName = &v +// SetVpcIds sets the VpcIds field's value. +func (s *DescribeVpcClassicLinkDnsSupportInput) SetVpcIds(v []*string) *DescribeVpcClassicLinkDnsSupportInput { + s.VpcIds = v return s } -// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetSourceSecurityGroupOwnerId(v string) *AuthorizeSecurityGroupIngressInput { - s.SourceSecurityGroupOwnerId = &v - return s -} +type DescribeVpcClassicLinkDnsSupportOutput struct { + _ struct{} `type:"structure"` -// SetToPort sets the ToPort field's value. -func (s *AuthorizeSecurityGroupIngressInput) SetToPort(v int64) *AuthorizeSecurityGroupIngressInput { - s.ToPort = &v - return s -} + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" min:"1" type:"string"` -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngressOutput -type AuthorizeSecurityGroupIngressOutput struct { - _ struct{} `type:"structure"` + // Information about the ClassicLink DNS support status of the VPCs. + Vpcs []*ClassicLinkDnsSupport `locationName:"vpcs" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AuthorizeSecurityGroupIngressOutput) String() string { +func (s DescribeVpcClassicLinkDnsSupportOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AuthorizeSecurityGroupIngressOutput) GoString() string { +func (s DescribeVpcClassicLinkDnsSupportOutput) GoString() string { return s.String() } -// Describes an Availability Zone. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AvailabilityZone -type AvailabilityZone struct { - _ struct{} `type:"structure"` +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcClassicLinkDnsSupportOutput) SetNextToken(v string) *DescribeVpcClassicLinkDnsSupportOutput { + s.NextToken = &v + return s +} - // Any messages about the Availability Zone. - Messages []*AvailabilityZoneMessage `locationName:"messageSet" locationNameList:"item" type:"list"` +// SetVpcs sets the Vpcs field's value. +func (s *DescribeVpcClassicLinkDnsSupportOutput) SetVpcs(v []*ClassicLinkDnsSupport) *DescribeVpcClassicLinkDnsSupportOutput { + s.Vpcs = v + return s +} - // The name of the region. - RegionName *string `locationName:"regionName" type:"string"` +type DescribeVpcClassicLinkInput struct { + _ struct{} `type:"structure"` - // The state of the Availability Zone. - State *string `locationName:"zoneState" type:"string" enum:"AvailabilityZoneState"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The name of the Availability Zone. - ZoneName *string `locationName:"zoneName" type:"string"` + // One or more filters. + // + // * is-classic-link-enabled - Whether the VPC is enabled for ClassicLink + // (true | false). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // One or more VPCs for which you want to describe the ClassicLink status. + VpcIds []*string `locationName:"VpcId" locationNameList:"VpcId" type:"list"` } // String returns the string representation -func (s AvailabilityZone) String() string { +func (s DescribeVpcClassicLinkInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AvailabilityZone) GoString() string { +func (s DescribeVpcClassicLinkInput) GoString() string { return s.String() } -// SetMessages sets the Messages field's value. -func (s *AvailabilityZone) SetMessages(v []*AvailabilityZoneMessage) *AvailabilityZone { - s.Messages = v - return s -} - -// SetRegionName sets the RegionName field's value. -func (s *AvailabilityZone) SetRegionName(v string) *AvailabilityZone { - s.RegionName = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeVpcClassicLinkInput) SetDryRun(v bool) *DescribeVpcClassicLinkInput { + s.DryRun = &v return s } -// SetState sets the State field's value. -func (s *AvailabilityZone) SetState(v string) *AvailabilityZone { - s.State = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVpcClassicLinkInput) SetFilters(v []*Filter) *DescribeVpcClassicLinkInput { + s.Filters = v return s } -// SetZoneName sets the ZoneName field's value. -func (s *AvailabilityZone) SetZoneName(v string) *AvailabilityZone { - s.ZoneName = &v +// SetVpcIds sets the VpcIds field's value. +func (s *DescribeVpcClassicLinkInput) SetVpcIds(v []*string) *DescribeVpcClassicLinkInput { + s.VpcIds = v return s } -// Describes a message about an Availability Zone. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AvailabilityZoneMessage -type AvailabilityZoneMessage struct { +type DescribeVpcClassicLinkOutput struct { _ struct{} `type:"structure"` - // The message about the Availability Zone. - Message *string `locationName:"message" type:"string"` + // The ClassicLink status of one or more VPCs. + Vpcs []*VpcClassicLink `locationName:"vpcSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s AvailabilityZoneMessage) String() string { +func (s DescribeVpcClassicLinkOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AvailabilityZoneMessage) GoString() string { +func (s DescribeVpcClassicLinkOutput) GoString() string { return s.String() } -// SetMessage sets the Message field's value. -func (s *AvailabilityZoneMessage) SetMessage(v string) *AvailabilityZoneMessage { - s.Message = &v +// SetVpcs sets the Vpcs field's value. +func (s *DescribeVpcClassicLinkOutput) SetVpcs(v []*VpcClassicLink) *DescribeVpcClassicLinkOutput { + s.Vpcs = v return s } -// The capacity information for instances launched onto the Dedicated Host. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AvailableCapacity -type AvailableCapacity struct { +type DescribeVpcEndpointConnectionNotificationsInput struct { _ struct{} `type:"structure"` - // The total number of instances that the Dedicated Host supports. - AvailableInstanceCapacity []*InstanceCapacity `locationName:"availableInstanceCapacity" locationNameList:"item" type:"list"` + // The ID of the notification. + ConnectionNotificationId *string `type:"string"` - // The number of vCPUs available on the Dedicated Host. - AvailableVCpus *int64 `locationName:"availableVCpus" type:"integer"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // One or more filters. + // + // * connection-notification-arn - The ARN of SNS topic for the notification. + // + // * connection-notification-id - The ID of the notification. + // + // * connection-notification-state - The state of the notification (Enabled + // | Disabled). + // + // * connection-notification-type - The type of notification (Topic). + // + // * service-id - The ID of the endpoint service. + // + // * vpc-endpoint-id - The ID of the VPC endpoint. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return in a single call. To retrieve the + // remaining results, make another request with the returned NextToken value. + MaxResults *int64 `type:"integer"` + + // The token to request the next page of results. + NextToken *string `type:"string"` } // String returns the string representation -func (s AvailableCapacity) String() string { +func (s DescribeVpcEndpointConnectionNotificationsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s AvailableCapacity) GoString() string { +func (s DescribeVpcEndpointConnectionNotificationsInput) GoString() string { return s.String() } -// SetAvailableInstanceCapacity sets the AvailableInstanceCapacity field's value. -func (s *AvailableCapacity) SetAvailableInstanceCapacity(v []*InstanceCapacity) *AvailableCapacity { - s.AvailableInstanceCapacity = v +// SetConnectionNotificationId sets the ConnectionNotificationId field's value. +func (s *DescribeVpcEndpointConnectionNotificationsInput) SetConnectionNotificationId(v string) *DescribeVpcEndpointConnectionNotificationsInput { + s.ConnectionNotificationId = &v return s } -// SetAvailableVCpus sets the AvailableVCpus field's value. -func (s *AvailableCapacity) SetAvailableVCpus(v int64) *AvailableCapacity { - s.AvailableVCpus = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeVpcEndpointConnectionNotificationsInput) SetDryRun(v bool) *DescribeVpcEndpointConnectionNotificationsInput { + s.DryRun = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BlobAttributeValue -type BlobAttributeValue struct { - _ struct{} `type:"structure"` - - // Value is automatically base64 encoded/decoded by the SDK. - Value []byte `locationName:"value" type:"blob"` -} - -// String returns the string representation -func (s BlobAttributeValue) String() string { - return awsutil.Prettify(s) +// SetFilters sets the Filters field's value. +func (s *DescribeVpcEndpointConnectionNotificationsInput) SetFilters(v []*Filter) *DescribeVpcEndpointConnectionNotificationsInput { + s.Filters = v + return s } -// GoString returns the string representation -func (s BlobAttributeValue) GoString() string { - return s.String() +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcEndpointConnectionNotificationsInput) SetMaxResults(v int64) *DescribeVpcEndpointConnectionNotificationsInput { + s.MaxResults = &v + return s } -// SetValue sets the Value field's value. -func (s *BlobAttributeValue) SetValue(v []byte) *BlobAttributeValue { - s.Value = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointConnectionNotificationsInput) SetNextToken(v string) *DescribeVpcEndpointConnectionNotificationsInput { + s.NextToken = &v return s } -// Describes a block device mapping. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BlockDeviceMapping -type BlockDeviceMapping struct { +type DescribeVpcEndpointConnectionNotificationsOutput struct { _ struct{} `type:"structure"` - // The device name exposed to the instance (for example, /dev/sdh or xvdh). - DeviceName *string `locationName:"deviceName" type:"string"` - - // Parameters used to automatically set up EBS volumes when the instance is - // launched. - Ebs *EbsBlockDevice `locationName:"ebs" type:"structure"` - - // Suppresses the specified device included in the block device mapping of the - // AMI. - NoDevice *string `locationName:"noDevice" type:"string"` + // One or more notifications. + ConnectionNotificationSet []*ConnectionNotification `locationName:"connectionNotificationSet" locationNameList:"item" type:"list"` - // The virtual device name (ephemeralN). Instance store volumes are numbered - // starting from 0. An instance type with 2 available instance store volumes - // can specify mappings for ephemeral0 and ephemeral1.The number of available - // instance store volumes depends on the instance type. After you connect to - // the instance, you must mount the volume. - // - // Constraints: For M3 instances, you must specify instance store volumes in - // the block device mapping for the instance. When you launch an M3 instance, - // we ignore any instance store volumes specified in the block device mapping - // for the AMI. - VirtualName *string `locationName:"virtualName" type:"string"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` } // String returns the string representation -func (s BlockDeviceMapping) String() string { +func (s DescribeVpcEndpointConnectionNotificationsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s BlockDeviceMapping) GoString() string { +func (s DescribeVpcEndpointConnectionNotificationsOutput) GoString() string { return s.String() } -// SetDeviceName sets the DeviceName field's value. -func (s *BlockDeviceMapping) SetDeviceName(v string) *BlockDeviceMapping { - s.DeviceName = &v - return s -} - -// SetEbs sets the Ebs field's value. -func (s *BlockDeviceMapping) SetEbs(v *EbsBlockDevice) *BlockDeviceMapping { - s.Ebs = v - return s -} - -// SetNoDevice sets the NoDevice field's value. -func (s *BlockDeviceMapping) SetNoDevice(v string) *BlockDeviceMapping { - s.NoDevice = &v +// SetConnectionNotificationSet sets the ConnectionNotificationSet field's value. +func (s *DescribeVpcEndpointConnectionNotificationsOutput) SetConnectionNotificationSet(v []*ConnectionNotification) *DescribeVpcEndpointConnectionNotificationsOutput { + s.ConnectionNotificationSet = v return s } -// SetVirtualName sets the VirtualName field's value. -func (s *BlockDeviceMapping) SetVirtualName(v string) *BlockDeviceMapping { - s.VirtualName = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointConnectionNotificationsOutput) SetNextToken(v string) *DescribeVpcEndpointConnectionNotificationsOutput { + s.NextToken = &v return s } -// Contains the parameters for BundleInstance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstanceRequest -type BundleInstanceInput struct { +type DescribeVpcEndpointConnectionsInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the instance to bundle. + // One or more filters. // - // Type: String + // * service-id - The ID of the service. // - // Default: None + // * vpc-endpoint-owner - The AWS account number of the owner of the endpoint. // - // Required: Yes + // * vpc-endpoint-state - The state of the endpoint (pendingAcceptance | + // pending | available | deleting | deleted | rejected | failed). // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` + // * vpc-endpoint-id - The ID of the endpoint. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The bucket in which to store the AMI. You can specify a bucket that you already - // own or a new bucket that Amazon EC2 creates on your behalf. If you specify - // a bucket that belongs to someone else, Amazon EC2 returns an error. - // - // Storage is a required field - Storage *Storage `type:"structure" required:"true"` + // The maximum number of results to return for the request in a single page. + // The remaining results of the initial request can be seen by sending another + // request with the returned NextToken value. This value can be between 5 and + // 1000; if MaxResults is given a value larger than 1000, only 1000 results + // are returned. + MaxResults *int64 `type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` } // String returns the string representation -func (s BundleInstanceInput) String() string { +func (s DescribeVpcEndpointConnectionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s BundleInstanceInput) GoString() string { +func (s DescribeVpcEndpointConnectionsInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *BundleInstanceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "BundleInstanceInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.Storage == nil { - invalidParams.Add(request.NewErrParamRequired("Storage")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - // SetDryRun sets the DryRun field's value. -func (s *BundleInstanceInput) SetDryRun(v bool) *BundleInstanceInput { +func (s *DescribeVpcEndpointConnectionsInput) SetDryRun(v bool) *DescribeVpcEndpointConnectionsInput { s.DryRun = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *BundleInstanceInput) SetInstanceId(v string) *BundleInstanceInput { - s.InstanceId = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVpcEndpointConnectionsInput) SetFilters(v []*Filter) *DescribeVpcEndpointConnectionsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcEndpointConnectionsInput) SetMaxResults(v int64) *DescribeVpcEndpointConnectionsInput { + s.MaxResults = &v return s } -// SetStorage sets the Storage field's value. -func (s *BundleInstanceInput) SetStorage(v *Storage) *BundleInstanceInput { - s.Storage = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointConnectionsInput) SetNextToken(v string) *DescribeVpcEndpointConnectionsInput { + s.NextToken = &v return s } -// Contains the output of BundleInstance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstanceResult -type BundleInstanceOutput struct { +type DescribeVpcEndpointConnectionsOutput struct { _ struct{} `type:"structure"` - // Information about the bundle task. - BundleTask *BundleTask `locationName:"bundleInstanceTask" type:"structure"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about one or more VPC endpoint connections. + VpcEndpointConnections []*VpcEndpointConnection `locationName:"vpcEndpointConnectionSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s BundleInstanceOutput) String() string { +func (s DescribeVpcEndpointConnectionsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s BundleInstanceOutput) GoString() string { +func (s DescribeVpcEndpointConnectionsOutput) GoString() string { return s.String() } -// SetBundleTask sets the BundleTask field's value. -func (s *BundleInstanceOutput) SetBundleTask(v *BundleTask) *BundleInstanceOutput { - s.BundleTask = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointConnectionsOutput) SetNextToken(v string) *DescribeVpcEndpointConnectionsOutput { + s.NextToken = &v return s } -// Describes a bundle task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleTask -type BundleTask struct { - _ struct{} `type:"structure"` - - // The ID of the bundle task. - BundleId *string `locationName:"bundleId" type:"string"` - - // If the task fails, a description of the error. - BundleTaskError *BundleTaskError `locationName:"error" type:"structure"` +// SetVpcEndpointConnections sets the VpcEndpointConnections field's value. +func (s *DescribeVpcEndpointConnectionsOutput) SetVpcEndpointConnections(v []*VpcEndpointConnection) *DescribeVpcEndpointConnectionsOutput { + s.VpcEndpointConnections = v + return s +} - // The ID of the instance associated with this bundle task. - InstanceId *string `locationName:"instanceId" type:"string"` +type DescribeVpcEndpointServiceConfigurationsInput struct { + _ struct{} `type:"structure"` - // The level of task completion, as a percent (for example, 20%). - Progress *string `locationName:"progress" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The time this task started. - StartTime *time.Time `locationName:"startTime" type:"timestamp" timestampFormat:"iso8601"` + // One or more filters. + // + // * service-name - The name of the service. + // + // * service-id - The ID of the service. + // + // * service-state - The state of the service (Pending | Available | Deleting + // | Deleted | Failed). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The state of the task. - State *string `locationName:"state" type:"string" enum:"BundleTaskState"` + // The maximum number of results to return for the request in a single page. + // The remaining results of the initial request can be seen by sending another + // request with the returned NextToken value. This value can be between 5 and + // 1000; if MaxResults is given a value larger than 1000, only 1000 results + // are returned. + MaxResults *int64 `type:"integer"` - // The Amazon S3 storage locations. - Storage *Storage `locationName:"storage" type:"structure"` + // The token to retrieve the next page of results. + NextToken *string `type:"string"` - // The time of the most recent update for the task. - UpdateTime *time.Time `locationName:"updateTime" type:"timestamp" timestampFormat:"iso8601"` + // The IDs of one or more services. + ServiceIds []*string `locationName:"ServiceId" locationNameList:"item" type:"list"` } // String returns the string representation -func (s BundleTask) String() string { +func (s DescribeVpcEndpointServiceConfigurationsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s BundleTask) GoString() string { +func (s DescribeVpcEndpointServiceConfigurationsInput) GoString() string { return s.String() } -// SetBundleId sets the BundleId field's value. -func (s *BundleTask) SetBundleId(v string) *BundleTask { - s.BundleId = &v - return s -} - -// SetBundleTaskError sets the BundleTaskError field's value. -func (s *BundleTask) SetBundleTaskError(v *BundleTaskError) *BundleTask { - s.BundleTaskError = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *BundleTask) SetInstanceId(v string) *BundleTask { - s.InstanceId = &v - return s -} - -// SetProgress sets the Progress field's value. -func (s *BundleTask) SetProgress(v string) *BundleTask { - s.Progress = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeVpcEndpointServiceConfigurationsInput) SetDryRun(v bool) *DescribeVpcEndpointServiceConfigurationsInput { + s.DryRun = &v return s } -// SetStartTime sets the StartTime field's value. -func (s *BundleTask) SetStartTime(v time.Time) *BundleTask { - s.StartTime = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVpcEndpointServiceConfigurationsInput) SetFilters(v []*Filter) *DescribeVpcEndpointServiceConfigurationsInput { + s.Filters = v return s } -// SetState sets the State field's value. -func (s *BundleTask) SetState(v string) *BundleTask { - s.State = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcEndpointServiceConfigurationsInput) SetMaxResults(v int64) *DescribeVpcEndpointServiceConfigurationsInput { + s.MaxResults = &v return s } -// SetStorage sets the Storage field's value. -func (s *BundleTask) SetStorage(v *Storage) *BundleTask { - s.Storage = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointServiceConfigurationsInput) SetNextToken(v string) *DescribeVpcEndpointServiceConfigurationsInput { + s.NextToken = &v return s } -// SetUpdateTime sets the UpdateTime field's value. -func (s *BundleTask) SetUpdateTime(v time.Time) *BundleTask { - s.UpdateTime = &v +// SetServiceIds sets the ServiceIds field's value. +func (s *DescribeVpcEndpointServiceConfigurationsInput) SetServiceIds(v []*string) *DescribeVpcEndpointServiceConfigurationsInput { + s.ServiceIds = v return s } -// Describes an error for BundleInstance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleTaskError -type BundleTaskError struct { +type DescribeVpcEndpointServiceConfigurationsOutput struct { _ struct{} `type:"structure"` - // The error code. - Code *string `locationName:"code" type:"string"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` - // The error message. - Message *string `locationName:"message" type:"string"` + // Information about one or more services. + ServiceConfigurations []*ServiceConfiguration `locationName:"serviceConfigurationSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s BundleTaskError) String() string { +func (s DescribeVpcEndpointServiceConfigurationsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s BundleTaskError) GoString() string { +func (s DescribeVpcEndpointServiceConfigurationsOutput) GoString() string { return s.String() } -// SetCode sets the Code field's value. -func (s *BundleTaskError) SetCode(v string) *BundleTaskError { - s.Code = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointServiceConfigurationsOutput) SetNextToken(v string) *DescribeVpcEndpointServiceConfigurationsOutput { + s.NextToken = &v return s } -// SetMessage sets the Message field's value. -func (s *BundleTaskError) SetMessage(v string) *BundleTaskError { - s.Message = &v +// SetServiceConfigurations sets the ServiceConfigurations field's value. +func (s *DescribeVpcEndpointServiceConfigurationsOutput) SetServiceConfigurations(v []*ServiceConfiguration) *DescribeVpcEndpointServiceConfigurationsOutput { + s.ServiceConfigurations = v return s } -// Contains the parameters for CancelBundleTask. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTaskRequest -type CancelBundleTaskInput struct { +type DescribeVpcEndpointServicePermissionsInput struct { _ struct{} `type:"structure"` - // The ID of the bundle task. - // - // BundleId is a required field - BundleId *string `type:"string" required:"true"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` + + // One or more filters. + // + // * principal - The ARN of the principal. + // + // * principal-type - The principal type (All | Service | OrganizationUnit + // | Account | User | Role). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return for the request in a single page. + // The remaining results of the initial request can be seen by sending another + // request with the returned NextToken value. This value can be between 5 and + // 1000; if MaxResults is given a value larger than 1000, only 1000 results + // are returned. + MaxResults *int64 `type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` + + // The ID of the service. + // + // ServiceId is a required field + ServiceId *string `type:"string" required:"true"` } // String returns the string representation -func (s CancelBundleTaskInput) String() string { +func (s DescribeVpcEndpointServicePermissionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelBundleTaskInput) GoString() string { +func (s DescribeVpcEndpointServicePermissionsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CancelBundleTaskInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelBundleTaskInput"} - if s.BundleId == nil { - invalidParams.Add(request.NewErrParamRequired("BundleId")) +func (s *DescribeVpcEndpointServicePermissionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeVpcEndpointServicePermissionsInput"} + if s.ServiceId == nil { + invalidParams.Add(request.NewErrParamRequired("ServiceId")) } if invalidParams.Len() > 0 { @@ -18268,289 +61441,388 @@ func (s *CancelBundleTaskInput) Validate() error { return nil } -// SetBundleId sets the BundleId field's value. -func (s *CancelBundleTaskInput) SetBundleId(v string) *CancelBundleTaskInput { - s.BundleId = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeVpcEndpointServicePermissionsInput) SetDryRun(v bool) *DescribeVpcEndpointServicePermissionsInput { + s.DryRun = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CancelBundleTaskInput) SetDryRun(v bool) *CancelBundleTaskInput { - s.DryRun = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVpcEndpointServicePermissionsInput) SetFilters(v []*Filter) *DescribeVpcEndpointServicePermissionsInput { + s.Filters = v return s } -// Contains the output of CancelBundleTask. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTaskResult -type CancelBundleTaskOutput struct { +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcEndpointServicePermissionsInput) SetMaxResults(v int64) *DescribeVpcEndpointServicePermissionsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointServicePermissionsInput) SetNextToken(v string) *DescribeVpcEndpointServicePermissionsInput { + s.NextToken = &v + return s +} + +// SetServiceId sets the ServiceId field's value. +func (s *DescribeVpcEndpointServicePermissionsInput) SetServiceId(v string) *DescribeVpcEndpointServicePermissionsInput { + s.ServiceId = &v + return s +} + +type DescribeVpcEndpointServicePermissionsOutput struct { _ struct{} `type:"structure"` - // Information about the bundle task. - BundleTask *BundleTask `locationName:"bundleInstanceTask" type:"structure"` + // Information about one or more allowed principals. + AllowedPrincipals []*AllowedPrincipal `locationName:"allowedPrincipals" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` } // String returns the string representation -func (s CancelBundleTaskOutput) String() string { +func (s DescribeVpcEndpointServicePermissionsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelBundleTaskOutput) GoString() string { +func (s DescribeVpcEndpointServicePermissionsOutput) GoString() string { return s.String() } -// SetBundleTask sets the BundleTask field's value. -func (s *CancelBundleTaskOutput) SetBundleTask(v *BundleTask) *CancelBundleTaskOutput { - s.BundleTask = v +// SetAllowedPrincipals sets the AllowedPrincipals field's value. +func (s *DescribeVpcEndpointServicePermissionsOutput) SetAllowedPrincipals(v []*AllowedPrincipal) *DescribeVpcEndpointServicePermissionsOutput { + s.AllowedPrincipals = v return s } -// Contains the parameters for CancelConversionTask. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionRequest -type CancelConversionTaskInput struct { - _ struct{} `type:"structure"` +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointServicePermissionsOutput) SetNextToken(v string) *DescribeVpcEndpointServicePermissionsOutput { + s.NextToken = &v + return s +} - // The ID of the conversion task. - // - // ConversionTaskId is a required field - ConversionTaskId *string `locationName:"conversionTaskId" type:"string" required:"true"` +// Contains the parameters for DescribeVpcEndpointServices. +type DescribeVpcEndpointServicesInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The reason for canceling the conversion task. - ReasonMessage *string `locationName:"reasonMessage" type:"string"` + // One or more filters. + // + // * service-name: The name of the service. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of items to return for this request. The request returns + // a token that you can specify in a subsequent call to get the next set of + // results. + // + // Constraint: If the value is greater than 1000, we return only 1000 items. + MaxResults *int64 `type:"integer"` + + // The token for the next set of items to return. (You received this token from + // a prior call.) + NextToken *string `type:"string"` + + // One or more service names. + ServiceNames []*string `locationName:"ServiceName" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CancelConversionTaskInput) String() string { +func (s DescribeVpcEndpointServicesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelConversionTaskInput) GoString() string { +func (s DescribeVpcEndpointServicesInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelConversionTaskInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelConversionTaskInput"} - if s.ConversionTaskId == nil { - invalidParams.Add(request.NewErrParamRequired("ConversionTaskId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetConversionTaskId sets the ConversionTaskId field's value. -func (s *CancelConversionTaskInput) SetConversionTaskId(v string) *CancelConversionTaskInput { - s.ConversionTaskId = &v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *CancelConversionTaskInput) SetDryRun(v bool) *CancelConversionTaskInput { +func (s *DescribeVpcEndpointServicesInput) SetDryRun(v bool) *DescribeVpcEndpointServicesInput { s.DryRun = &v return s } -// SetReasonMessage sets the ReasonMessage field's value. -func (s *CancelConversionTaskInput) SetReasonMessage(v string) *CancelConversionTaskInput { - s.ReasonMessage = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVpcEndpointServicesInput) SetFilters(v []*Filter) *DescribeVpcEndpointServicesInput { + s.Filters = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionTaskOutput -type CancelConversionTaskOutput struct { - _ struct{} `type:"structure"` +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcEndpointServicesInput) SetMaxResults(v int64) *DescribeVpcEndpointServicesInput { + s.MaxResults = &v + return s } -// String returns the string representation -func (s CancelConversionTaskOutput) String() string { - return awsutil.Prettify(s) +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointServicesInput) SetNextToken(v string) *DescribeVpcEndpointServicesInput { + s.NextToken = &v + return s } -// GoString returns the string representation -func (s CancelConversionTaskOutput) GoString() string { - return s.String() +// SetServiceNames sets the ServiceNames field's value. +func (s *DescribeVpcEndpointServicesInput) SetServiceNames(v []*string) *DescribeVpcEndpointServicesInput { + s.ServiceNames = v + return s } -// Contains the parameters for CancelExportTask. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTaskRequest -type CancelExportTaskInput struct { +// Contains the output of DescribeVpcEndpointServices. +type DescribeVpcEndpointServicesOutput struct { _ struct{} `type:"structure"` - // The ID of the export task. This is the ID returned by CreateInstanceExportTask. - // - // ExportTaskId is a required field - ExportTaskId *string `locationName:"exportTaskId" type:"string" required:"true"` + // The token to use when requesting the next set of items. If there are no additional + // items to return, the string is empty. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the service. + ServiceDetails []*ServiceDetail `locationName:"serviceDetailSet" locationNameList:"item" type:"list"` + + // A list of supported services. + ServiceNames []*string `locationName:"serviceNameSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CancelExportTaskInput) String() string { +func (s DescribeVpcEndpointServicesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelExportTaskInput) GoString() string { +func (s DescribeVpcEndpointServicesOutput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelExportTaskInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelExportTaskInput"} - if s.ExportTaskId == nil { - invalidParams.Add(request.NewErrParamRequired("ExportTaskId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetExportTaskId sets the ExportTaskId field's value. -func (s *CancelExportTaskInput) SetExportTaskId(v string) *CancelExportTaskInput { - s.ExportTaskId = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointServicesOutput) SetNextToken(v string) *DescribeVpcEndpointServicesOutput { + s.NextToken = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTaskOutput -type CancelExportTaskOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CancelExportTaskOutput) String() string { - return awsutil.Prettify(s) +// SetServiceDetails sets the ServiceDetails field's value. +func (s *DescribeVpcEndpointServicesOutput) SetServiceDetails(v []*ServiceDetail) *DescribeVpcEndpointServicesOutput { + s.ServiceDetails = v + return s } -// GoString returns the string representation -func (s CancelExportTaskOutput) GoString() string { - return s.String() +// SetServiceNames sets the ServiceNames field's value. +func (s *DescribeVpcEndpointServicesOutput) SetServiceNames(v []*string) *DescribeVpcEndpointServicesOutput { + s.ServiceNames = v + return s } -// Contains the parameters for CancelImportTask. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTaskRequest -type CancelImportTaskInput struct { +// Contains the parameters for DescribeVpcEndpoints. +type DescribeVpcEndpointsInput struct { _ struct{} `type:"structure"` - // The reason for canceling the task. - CancelReason *string `type:"string"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `type:"boolean"` - // The ID of the import image or import snapshot task to be canceled. - ImportTaskId *string `type:"string"` + // One or more filters. + // + // * service-name: The name of the service. + // + // * vpc-id: The ID of the VPC in which the endpoint resides. + // + // * vpc-endpoint-id: The ID of the endpoint. + // + // * vpc-endpoint-state - The state of the endpoint (pendingAcceptance | + // pending | available | deleting | deleted | rejected | failed). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of items to return for this request. The request returns + // a token that you can specify in a subsequent call to get the next set of + // results. + // + // Constraint: If the value is greater than 1000, we return only 1000 items. + MaxResults *int64 `type:"integer"` + + // The token for the next set of items to return. (You received this token from + // a prior call.) + NextToken *string `type:"string"` + + // One or more endpoint IDs. + VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CancelImportTaskInput) String() string { +func (s DescribeVpcEndpointsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelImportTaskInput) GoString() string { +func (s DescribeVpcEndpointsInput) GoString() string { return s.String() } -// SetCancelReason sets the CancelReason field's value. -func (s *CancelImportTaskInput) SetCancelReason(v string) *CancelImportTaskInput { - s.CancelReason = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeVpcEndpointsInput) SetDryRun(v bool) *DescribeVpcEndpointsInput { + s.DryRun = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CancelImportTaskInput) SetDryRun(v bool) *CancelImportTaskInput { - s.DryRun = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVpcEndpointsInput) SetFilters(v []*Filter) *DescribeVpcEndpointsInput { + s.Filters = v return s } -// SetImportTaskId sets the ImportTaskId field's value. -func (s *CancelImportTaskInput) SetImportTaskId(v string) *CancelImportTaskInput { - s.ImportTaskId = &v +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcEndpointsInput) SetMaxResults(v int64) *DescribeVpcEndpointsInput { + s.MaxResults = &v return s } -// Contains the output for CancelImportTask. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTaskResult -type CancelImportTaskOutput struct { - _ struct{} `type:"structure"` +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointsInput) SetNextToken(v string) *DescribeVpcEndpointsInput { + s.NextToken = &v + return s +} - // The ID of the task being canceled. - ImportTaskId *string `locationName:"importTaskId" type:"string"` +// SetVpcEndpointIds sets the VpcEndpointIds field's value. +func (s *DescribeVpcEndpointsInput) SetVpcEndpointIds(v []*string) *DescribeVpcEndpointsInput { + s.VpcEndpointIds = v + return s +} - // The current state of the task being canceled. - PreviousState *string `locationName:"previousState" type:"string"` +// Contains the output of DescribeVpcEndpoints. +type DescribeVpcEndpointsOutput struct { + _ struct{} `type:"structure"` - // The current state of the task being canceled. - State *string `locationName:"state" type:"string"` + // The token to use when requesting the next set of items. If there are no additional + // items to return, the string is empty. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the endpoints. + VpcEndpoints []*VpcEndpoint `locationName:"vpcEndpointSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CancelImportTaskOutput) String() string { +func (s DescribeVpcEndpointsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelImportTaskOutput) GoString() string { +func (s DescribeVpcEndpointsOutput) GoString() string { return s.String() } -// SetImportTaskId sets the ImportTaskId field's value. -func (s *CancelImportTaskOutput) SetImportTaskId(v string) *CancelImportTaskOutput { - s.ImportTaskId = &v - return s -} - -// SetPreviousState sets the PreviousState field's value. -func (s *CancelImportTaskOutput) SetPreviousState(v string) *CancelImportTaskOutput { - s.PreviousState = &v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcEndpointsOutput) SetNextToken(v string) *DescribeVpcEndpointsOutput { + s.NextToken = &v return s } -// SetState sets the State field's value. -func (s *CancelImportTaskOutput) SetState(v string) *CancelImportTaskOutput { - s.State = &v +// SetVpcEndpoints sets the VpcEndpoints field's value. +func (s *DescribeVpcEndpointsOutput) SetVpcEndpoints(v []*VpcEndpoint) *DescribeVpcEndpointsOutput { + s.VpcEndpoints = v return s } -// Contains the parameters for CancelReservedInstancesListing. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListingRequest -type CancelReservedInstancesListingInput struct { +type DescribeVpcPeeringConnectionsInput struct { _ struct{} `type:"structure"` - // The ID of the Reserved Instance listing. + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. // - // ReservedInstancesListingId is a required field - ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string" required:"true"` + // * accepter-vpc-info.cidr-block - The IPv4 CIDR block of the accepter VPC. + // + // * accepter-vpc-info.owner-id - The AWS account ID of the owner of the + // accepter VPC. + // + // * accepter-vpc-info.vpc-id - The ID of the accepter VPC. + // + // * expiration-time - The expiration date and time for the VPC peering connection. + // + // * requester-vpc-info.cidr-block - The IPv4 CIDR block of the requester's + // VPC. + // + // * requester-vpc-info.owner-id - The AWS account ID of the owner of the + // requester VPC. + // + // * requester-vpc-info.vpc-id - The ID of the requester VPC. + // + // * status-code - The status of the VPC peering connection (pending-acceptance + // | failed | expired | provisioning | active | deleting | deleted | rejected). + // + // * status-message - A message that provides more information about the + // status of the VPC peering connection, if applicable. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * vpc-peering-connection-id - The ID of the VPC peering connection. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // One or more VPC peering connection IDs. + // + // Default: Describes all your VPC peering connections. + VpcPeeringConnectionIds []*string `locationName:"VpcPeeringConnectionId" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CancelReservedInstancesListingInput) String() string { +func (s DescribeVpcPeeringConnectionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelReservedInstancesListingInput) GoString() string { +func (s DescribeVpcPeeringConnectionsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CancelReservedInstancesListingInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelReservedInstancesListingInput"} - if s.ReservedInstancesListingId == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesListingId")) +func (s *DescribeVpcPeeringConnectionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeVpcPeeringConnectionsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) } if invalidParams.Len() > 0 { @@ -18559,116 +61831,225 @@ func (s *CancelReservedInstancesListingInput) Validate() error { return nil } -// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. -func (s *CancelReservedInstancesListingInput) SetReservedInstancesListingId(v string) *CancelReservedInstancesListingInput { - s.ReservedInstancesListingId = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeVpcPeeringConnectionsInput) SetDryRun(v bool) *DescribeVpcPeeringConnectionsInput { + s.DryRun = &v + return s +} + +// SetFilters sets the Filters field's value. +func (s *DescribeVpcPeeringConnectionsInput) SetFilters(v []*Filter) *DescribeVpcPeeringConnectionsInput { + s.Filters = v + return s +} + +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcPeeringConnectionsInput) SetMaxResults(v int64) *DescribeVpcPeeringConnectionsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcPeeringConnectionsInput) SetNextToken(v string) *DescribeVpcPeeringConnectionsInput { + s.NextToken = &v + return s +} + +// SetVpcPeeringConnectionIds sets the VpcPeeringConnectionIds field's value. +func (s *DescribeVpcPeeringConnectionsInput) SetVpcPeeringConnectionIds(v []*string) *DescribeVpcPeeringConnectionsInput { + s.VpcPeeringConnectionIds = v return s } -// Contains the output of CancelReservedInstancesListing. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListingResult -type CancelReservedInstancesListingOutput struct { +type DescribeVpcPeeringConnectionsOutput struct { _ struct{} `type:"structure"` - // The Reserved Instance listing. - ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the VPC peering connections. + VpcPeeringConnections []*VpcPeeringConnection `locationName:"vpcPeeringConnectionSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CancelReservedInstancesListingOutput) String() string { +func (s DescribeVpcPeeringConnectionsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelReservedInstancesListingOutput) GoString() string { +func (s DescribeVpcPeeringConnectionsOutput) GoString() string { return s.String() } -// SetReservedInstancesListings sets the ReservedInstancesListings field's value. -func (s *CancelReservedInstancesListingOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *CancelReservedInstancesListingOutput { - s.ReservedInstancesListings = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcPeeringConnectionsOutput) SetNextToken(v string) *DescribeVpcPeeringConnectionsOutput { + s.NextToken = &v return s } -// Describes a Spot fleet error. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsError -type CancelSpotFleetRequestsError struct { +// SetVpcPeeringConnections sets the VpcPeeringConnections field's value. +func (s *DescribeVpcPeeringConnectionsOutput) SetVpcPeeringConnections(v []*VpcPeeringConnection) *DescribeVpcPeeringConnectionsOutput { + s.VpcPeeringConnections = v + return s +} + +type DescribeVpcsInput struct { _ struct{} `type:"structure"` - // The error code. + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // One or more filters. + // + // * cidr - The primary IPv4 CIDR block of the VPC. The CIDR block you specify + // must exactly match the VPC's CIDR block for information to be returned + // for the VPC. Must contain the slash followed by one or two digits (for + // example, /28). + // + // * cidr-block-association.cidr-block - An IPv4 CIDR block associated with + // the VPC. + // + // * cidr-block-association.association-id - The association ID for an IPv4 + // CIDR block associated with the VPC. + // + // * cidr-block-association.state - The state of an IPv4 CIDR block associated + // with the VPC. + // + // * dhcp-options-id - The ID of a set of DHCP options. + // + // * ipv6-cidr-block-association.ipv6-cidr-block - An IPv6 CIDR block associated + // with the VPC. + // + // * ipv6-cidr-block-association.association-id - The association ID for + // an IPv6 CIDR block associated with the VPC. + // + // * ipv6-cidr-block-association.state - The state of an IPv6 CIDR block + // associated with the VPC. + // + // * isDefault - Indicates whether the VPC is the default VPC. + // + // * owner-id - The ID of the AWS account that owns the VPC. // - // Code is a required field - Code *string `locationName:"code" type:"string" required:"true" enum:"CancelBatchErrorCode"` + // * state - The state of the VPC (pending | available). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * vpc-id - The ID of the VPC. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The description for the error code. + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // One or more VPC IDs. // - // Message is a required field - Message *string `locationName:"message" type:"string" required:"true"` + // Default: Describes all your VPCs. + VpcIds []*string `locationName:"VpcId" locationNameList:"VpcId" type:"list"` } // String returns the string representation -func (s CancelSpotFleetRequestsError) String() string { +func (s DescribeVpcsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelSpotFleetRequestsError) GoString() string { +func (s DescribeVpcsInput) GoString() string { return s.String() } -// SetCode sets the Code field's value. -func (s *CancelSpotFleetRequestsError) SetCode(v string) *CancelSpotFleetRequestsError { - s.Code = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeVpcsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeVpcsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *DescribeVpcsInput) SetDryRun(v bool) *DescribeVpcsInput { + s.DryRun = &v return s } -// SetMessage sets the Message field's value. -func (s *CancelSpotFleetRequestsError) SetMessage(v string) *CancelSpotFleetRequestsError { - s.Message = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVpcsInput) SetFilters(v []*Filter) *DescribeVpcsInput { + s.Filters = v return s } -// Describes a Spot fleet request that was not successfully canceled. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsErrorItem -type CancelSpotFleetRequestsErrorItem struct { +// SetMaxResults sets the MaxResults field's value. +func (s *DescribeVpcsInput) SetMaxResults(v int64) *DescribeVpcsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcsInput) SetNextToken(v string) *DescribeVpcsInput { + s.NextToken = &v + return s +} + +// SetVpcIds sets the VpcIds field's value. +func (s *DescribeVpcsInput) SetVpcIds(v []*string) *DescribeVpcsInput { + s.VpcIds = v + return s +} + +type DescribeVpcsOutput struct { _ struct{} `type:"structure"` - // The error. - // - // Error is a required field - Error *CancelSpotFleetRequestsError `locationName:"error" type:"structure" required:"true"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` - // The ID of the Spot fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + // Information about one or more VPCs. + Vpcs []*Vpc `locationName:"vpcSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CancelSpotFleetRequestsErrorItem) String() string { +func (s DescribeVpcsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelSpotFleetRequestsErrorItem) GoString() string { +func (s DescribeVpcsOutput) GoString() string { return s.String() } -// SetError sets the Error field's value. -func (s *CancelSpotFleetRequestsErrorItem) SetError(v *CancelSpotFleetRequestsError) *CancelSpotFleetRequestsErrorItem { - s.Error = v +// SetNextToken sets the NextToken field's value. +func (s *DescribeVpcsOutput) SetNextToken(v string) *DescribeVpcsOutput { + s.NextToken = &v return s } -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *CancelSpotFleetRequestsErrorItem) SetSpotFleetRequestId(v string) *CancelSpotFleetRequestsErrorItem { - s.SpotFleetRequestId = &v +// SetVpcs sets the Vpcs field's value. +func (s *DescribeVpcsOutput) SetVpcs(v []*Vpc) *DescribeVpcsOutput { + s.Vpcs = v return s } -// Contains the parameters for CancelSpotFleetRequests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsRequest -type CancelSpotFleetRequestsInput struct { +// Contains the parameters for DescribeVpnConnections. +type DescribeVpnConnectionsInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -18677,148 +62058,208 @@ type CancelSpotFleetRequestsInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The IDs of the Spot fleet requests. + // One or more filters. // - // SpotFleetRequestIds is a required field - SpotFleetRequestIds []*string `locationName:"spotFleetRequestId" locationNameList:"item" type:"list" required:"true"` + // * customer-gateway-configuration - The configuration information for the + // customer gateway. + // + // * customer-gateway-id - The ID of a customer gateway associated with the + // VPN connection. + // + // * state - The state of the VPN connection (pending | available | deleting + // | deleted). + // + // * option.static-routes-only - Indicates whether the connection has static + // routes only. Used for devices that do not support Border Gateway Protocol + // (BGP). + // + // * route.destination-cidr-block - The destination CIDR block. This corresponds + // to the subnet used in a customer data center. + // + // * bgp-asn - The BGP Autonomous System Number (ASN) associated with a BGP + // device. + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. + // + // * type - The type of VPN connection. Currently the only supported type + // is ipsec.1. + // + // * vpn-connection-id - The ID of the VPN connection. + // + // * vpn-gateway-id - The ID of a virtual private gateway associated with + // the VPN connection. + // + // * transit-gateway-id - The ID of a transit gateway associated with the + // VPN connection. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // Indicates whether to terminate instances for a Spot fleet request if it is - // canceled successfully. + // One or more VPN connection IDs. // - // TerminateInstances is a required field - TerminateInstances *bool `locationName:"terminateInstances" type:"boolean" required:"true"` + // Default: Describes your VPN connections. + VpnConnectionIds []*string `locationName:"VpnConnectionId" locationNameList:"VpnConnectionId" type:"list"` } // String returns the string representation -func (s CancelSpotFleetRequestsInput) String() string { +func (s DescribeVpnConnectionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelSpotFleetRequestsInput) GoString() string { +func (s DescribeVpnConnectionsInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CancelSpotFleetRequestsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelSpotFleetRequestsInput"} - if s.SpotFleetRequestIds == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestIds")) - } - if s.TerminateInstances == nil { - invalidParams.Add(request.NewErrParamRequired("TerminateInstances")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - // SetDryRun sets the DryRun field's value. -func (s *CancelSpotFleetRequestsInput) SetDryRun(v bool) *CancelSpotFleetRequestsInput { +func (s *DescribeVpnConnectionsInput) SetDryRun(v bool) *DescribeVpnConnectionsInput { s.DryRun = &v return s } -// SetSpotFleetRequestIds sets the SpotFleetRequestIds field's value. -func (s *CancelSpotFleetRequestsInput) SetSpotFleetRequestIds(v []*string) *CancelSpotFleetRequestsInput { - s.SpotFleetRequestIds = v +// SetFilters sets the Filters field's value. +func (s *DescribeVpnConnectionsInput) SetFilters(v []*Filter) *DescribeVpnConnectionsInput { + s.Filters = v return s } -// SetTerminateInstances sets the TerminateInstances field's value. -func (s *CancelSpotFleetRequestsInput) SetTerminateInstances(v bool) *CancelSpotFleetRequestsInput { - s.TerminateInstances = &v +// SetVpnConnectionIds sets the VpnConnectionIds field's value. +func (s *DescribeVpnConnectionsInput) SetVpnConnectionIds(v []*string) *DescribeVpnConnectionsInput { + s.VpnConnectionIds = v return s } -// Contains the output of CancelSpotFleetRequests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsResponse -type CancelSpotFleetRequestsOutput struct { +// Contains the output of DescribeVpnConnections. +type DescribeVpnConnectionsOutput struct { _ struct{} `type:"structure"` - // Information about the Spot fleet requests that are successfully canceled. - SuccessfulFleetRequests []*CancelSpotFleetRequestsSuccessItem `locationName:"successfulFleetRequestSet" locationNameList:"item" type:"list"` - - // Information about the Spot fleet requests that are not successfully canceled. - UnsuccessfulFleetRequests []*CancelSpotFleetRequestsErrorItem `locationName:"unsuccessfulFleetRequestSet" locationNameList:"item" type:"list"` + // Information about one or more VPN connections. + VpnConnections []*VpnConnection `locationName:"vpnConnectionSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CancelSpotFleetRequestsOutput) String() string { +func (s DescribeVpnConnectionsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelSpotFleetRequestsOutput) GoString() string { +func (s DescribeVpnConnectionsOutput) GoString() string { return s.String() } -// SetSuccessfulFleetRequests sets the SuccessfulFleetRequests field's value. -func (s *CancelSpotFleetRequestsOutput) SetSuccessfulFleetRequests(v []*CancelSpotFleetRequestsSuccessItem) *CancelSpotFleetRequestsOutput { - s.SuccessfulFleetRequests = v - return s -} - -// SetUnsuccessfulFleetRequests sets the UnsuccessfulFleetRequests field's value. -func (s *CancelSpotFleetRequestsOutput) SetUnsuccessfulFleetRequests(v []*CancelSpotFleetRequestsErrorItem) *CancelSpotFleetRequestsOutput { - s.UnsuccessfulFleetRequests = v +// SetVpnConnections sets the VpnConnections field's value. +func (s *DescribeVpnConnectionsOutput) SetVpnConnections(v []*VpnConnection) *DescribeVpnConnectionsOutput { + s.VpnConnections = v return s } -// Describes a Spot fleet request that was successfully canceled. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsSuccessItem -type CancelSpotFleetRequestsSuccessItem struct { +// Contains the parameters for DescribeVpnGateways. +type DescribeVpnGatewaysInput struct { _ struct{} `type:"structure"` - // The current state of the Spot fleet request. - // - // CurrentSpotFleetRequestState is a required field - CurrentSpotFleetRequestState *string `locationName:"currentSpotFleetRequestState" type:"string" required:"true" enum:"BatchState"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The previous state of the Spot fleet request. + // One or more filters. + // + // * amazon-side-asn - The Autonomous System Number (ASN) for the Amazon + // side of the gateway. + // + // * attachment.state - The current state of the attachment between the gateway + // and the VPC (attaching | attached | detaching | detached). + // + // * attachment.vpc-id - The ID of an attached VPC. + // + // * availability-zone - The Availability Zone for the virtual private gateway + // (if applicable). + // + // * state - The state of the virtual private gateway (pending | available + // | deleting | deleted). + // + // * tag: - The key/value combination of a tag assigned to the resource. + // Use the tag key in the filter name and the tag value as the filter value. + // For example, to find all resources that have a tag with the key Owner + // and the value TeamA, specify tag:Owner for the filter name and TeamA for + // the filter value. + // + // * tag-key - The key of a tag assigned to the resource. Use this filter + // to find all resources assigned a tag with a specific key, regardless of + // the tag value. // - // PreviousSpotFleetRequestState is a required field - PreviousSpotFleetRequestState *string `locationName:"previousSpotFleetRequestState" type:"string" required:"true" enum:"BatchState"` + // * type - The type of virtual private gateway. Currently the only supported + // type is ipsec.1. + // + // * vpn-gateway-id - The ID of the virtual private gateway. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The ID of the Spot fleet request. + // One or more virtual private gateway IDs. // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + // Default: Describes all your virtual private gateways. + VpnGatewayIds []*string `locationName:"VpnGatewayId" locationNameList:"VpnGatewayId" type:"list"` } // String returns the string representation -func (s CancelSpotFleetRequestsSuccessItem) String() string { +func (s DescribeVpnGatewaysInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelSpotFleetRequestsSuccessItem) GoString() string { +func (s DescribeVpnGatewaysInput) GoString() string { return s.String() } -// SetCurrentSpotFleetRequestState sets the CurrentSpotFleetRequestState field's value. -func (s *CancelSpotFleetRequestsSuccessItem) SetCurrentSpotFleetRequestState(v string) *CancelSpotFleetRequestsSuccessItem { - s.CurrentSpotFleetRequestState = &v +// SetDryRun sets the DryRun field's value. +func (s *DescribeVpnGatewaysInput) SetDryRun(v bool) *DescribeVpnGatewaysInput { + s.DryRun = &v return s } -// SetPreviousSpotFleetRequestState sets the PreviousSpotFleetRequestState field's value. -func (s *CancelSpotFleetRequestsSuccessItem) SetPreviousSpotFleetRequestState(v string) *CancelSpotFleetRequestsSuccessItem { - s.PreviousSpotFleetRequestState = &v +// SetFilters sets the Filters field's value. +func (s *DescribeVpnGatewaysInput) SetFilters(v []*Filter) *DescribeVpnGatewaysInput { + s.Filters = v return s } -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *CancelSpotFleetRequestsSuccessItem) SetSpotFleetRequestId(v string) *CancelSpotFleetRequestsSuccessItem { - s.SpotFleetRequestId = &v +// SetVpnGatewayIds sets the VpnGatewayIds field's value. +func (s *DescribeVpnGatewaysInput) SetVpnGatewayIds(v []*string) *DescribeVpnGatewaysInput { + s.VpnGatewayIds = v return s } -// Contains the parameters for CancelSpotInstanceRequests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequestsRequest -type CancelSpotInstanceRequestsInput struct { +// Contains the output of DescribeVpnGateways. +type DescribeVpnGatewaysOutput struct { + _ struct{} `type:"structure"` + + // Information about one or more virtual private gateways. + VpnGateways []*VpnGateway `locationName:"vpnGatewaySet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s DescribeVpnGatewaysOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeVpnGatewaysOutput) GoString() string { + return s.String() +} + +// SetVpnGateways sets the VpnGateways field's value. +func (s *DescribeVpnGatewaysOutput) SetVpnGateways(v []*VpnGateway) *DescribeVpnGatewaysOutput { + s.VpnGateways = v + return s +} + +type DetachClassicLinkVpcInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -18827,27 +62268,35 @@ type CancelSpotInstanceRequestsInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // One or more Spot instance request IDs. + // The ID of the instance to unlink from the VPC. + // + // InstanceId is a required field + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + + // The ID of the VPC to which the instance is linked. // - // SpotInstanceRequestIds is a required field - SpotInstanceRequestIds []*string `locationName:"SpotInstanceRequestId" locationNameList:"SpotInstanceRequestId" type:"list" required:"true"` + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` } // String returns the string representation -func (s CancelSpotInstanceRequestsInput) String() string { +func (s DetachClassicLinkVpcInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelSpotInstanceRequestsInput) GoString() string { +func (s DetachClassicLinkVpcInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CancelSpotInstanceRequestsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CancelSpotInstanceRequestsInput"} - if s.SpotInstanceRequestIds == nil { - invalidParams.Add(request.NewErrParamRequired("SpotInstanceRequestIds")) +func (s *DetachClassicLinkVpcInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DetachClassicLinkVpcInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) } if invalidParams.Len() > 0 { @@ -18857,217 +62306,296 @@ func (s *CancelSpotInstanceRequestsInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *CancelSpotInstanceRequestsInput) SetDryRun(v bool) *CancelSpotInstanceRequestsInput { +func (s *DetachClassicLinkVpcInput) SetDryRun(v bool) *DetachClassicLinkVpcInput { s.DryRun = &v return s } -// SetSpotInstanceRequestIds sets the SpotInstanceRequestIds field's value. -func (s *CancelSpotInstanceRequestsInput) SetSpotInstanceRequestIds(v []*string) *CancelSpotInstanceRequestsInput { - s.SpotInstanceRequestIds = v +// SetInstanceId sets the InstanceId field's value. +func (s *DetachClassicLinkVpcInput) SetInstanceId(v string) *DetachClassicLinkVpcInput { + s.InstanceId = &v return s } -// Contains the output of CancelSpotInstanceRequests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequestsResult -type CancelSpotInstanceRequestsOutput struct { +// SetVpcId sets the VpcId field's value. +func (s *DetachClassicLinkVpcInput) SetVpcId(v string) *DetachClassicLinkVpcInput { + s.VpcId = &v + return s +} + +type DetachClassicLinkVpcOutput struct { _ struct{} `type:"structure"` - // One or more Spot instance requests. - CancelledSpotInstanceRequests []*CancelledSpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s CancelSpotInstanceRequestsOutput) String() string { +func (s DetachClassicLinkVpcOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelSpotInstanceRequestsOutput) GoString() string { +func (s DetachClassicLinkVpcOutput) GoString() string { return s.String() } -// SetCancelledSpotInstanceRequests sets the CancelledSpotInstanceRequests field's value. -func (s *CancelSpotInstanceRequestsOutput) SetCancelledSpotInstanceRequests(v []*CancelledSpotInstanceRequest) *CancelSpotInstanceRequestsOutput { - s.CancelledSpotInstanceRequests = v +// SetReturn sets the Return field's value. +func (s *DetachClassicLinkVpcOutput) SetReturn(v bool) *DetachClassicLinkVpcOutput { + s.Return = &v return s } -// Describes a request to cancel a Spot instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelledSpotInstanceRequest -type CancelledSpotInstanceRequest struct { +type DetachInternetGatewayInput struct { _ struct{} `type:"structure"` - // The ID of the Spot instance request. - SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The state of the Spot instance request. - State *string `locationName:"state" type:"string" enum:"CancelSpotInstanceRequestState"` + // The ID of the internet gateway. + // + // InternetGatewayId is a required field + InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` } // String returns the string representation -func (s CancelledSpotInstanceRequest) String() string { +func (s DetachInternetGatewayInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CancelledSpotInstanceRequest) GoString() string { +func (s DetachInternetGatewayInput) GoString() string { return s.String() } -// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. -func (s *CancelledSpotInstanceRequest) SetSpotInstanceRequestId(v string) *CancelledSpotInstanceRequest { - s.SpotInstanceRequestId = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *DetachInternetGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DetachInternetGatewayInput"} + if s.InternetGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetState sets the State field's value. -func (s *CancelledSpotInstanceRequest) SetState(v string) *CancelledSpotInstanceRequest { - s.State = &v +// SetDryRun sets the DryRun field's value. +func (s *DetachInternetGatewayInput) SetDryRun(v bool) *DetachInternetGatewayInput { + s.DryRun = &v return s } -// Describes the ClassicLink DNS support status of a VPC. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClassicLinkDnsSupport -type ClassicLinkDnsSupport struct { - _ struct{} `type:"structure"` +// SetInternetGatewayId sets the InternetGatewayId field's value. +func (s *DetachInternetGatewayInput) SetInternetGatewayId(v string) *DetachInternetGatewayInput { + s.InternetGatewayId = &v + return s +} - // Indicates whether ClassicLink DNS support is enabled for the VPC. - ClassicLinkDnsSupported *bool `locationName:"classicLinkDnsSupported" type:"boolean"` +// SetVpcId sets the VpcId field's value. +func (s *DetachInternetGatewayInput) SetVpcId(v string) *DetachInternetGatewayInput { + s.VpcId = &v + return s +} - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` +type DetachInternetGatewayOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s ClassicLinkDnsSupport) String() string { +func (s DetachInternetGatewayOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ClassicLinkDnsSupport) GoString() string { +func (s DetachInternetGatewayOutput) GoString() string { return s.String() } -// SetClassicLinkDnsSupported sets the ClassicLinkDnsSupported field's value. -func (s *ClassicLinkDnsSupport) SetClassicLinkDnsSupported(v bool) *ClassicLinkDnsSupport { - s.ClassicLinkDnsSupported = &v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *ClassicLinkDnsSupport) SetVpcId(v string) *ClassicLinkDnsSupport { - s.VpcId = &v - return s -} - -// Describes a linked EC2-Classic instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClassicLinkInstance -type ClassicLinkInstance struct { +// Contains the parameters for DetachNetworkInterface. +type DetachNetworkInterfaceInput struct { _ struct{} `type:"structure"` - // A list of security groups. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` + // The ID of the attachment. + // + // AttachmentId is a required field + AttachmentId *string `locationName:"attachmentId" type:"string" required:"true"` - // Any tags assigned to the instance. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` + // Specifies whether to force a detachment. + // + // * Use the Force parameter only as a last resort to detach a network interface + // from a failed instance. + // + // * If you use the Force parameter to detach a network interface, you might + // not be able to attach a different network interface to the same index + // on the instance without first stopping and starting the instance. + // + // * If you force the detachment of a network interface, the instance metadata + // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) + // might not get updated. This means that the attributes associated with + // the detached network interface might still be visible. The instance metadata + // will get updated when you stop and start the instance. + Force *bool `locationName:"force" type:"boolean"` } // String returns the string representation -func (s ClassicLinkInstance) String() string { +func (s DetachNetworkInterfaceInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ClassicLinkInstance) GoString() string { +func (s DetachNetworkInterfaceInput) GoString() string { return s.String() } -// SetGroups sets the Groups field's value. -func (s *ClassicLinkInstance) SetGroups(v []*GroupIdentifier) *ClassicLinkInstance { - s.Groups = v +// Validate inspects the fields of the type to determine if they are valid. +func (s *DetachNetworkInterfaceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DetachNetworkInterfaceInput"} + if s.AttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("AttachmentId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttachmentId sets the AttachmentId field's value. +func (s *DetachNetworkInterfaceInput) SetAttachmentId(v string) *DetachNetworkInterfaceInput { + s.AttachmentId = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *ClassicLinkInstance) SetInstanceId(v string) *ClassicLinkInstance { - s.InstanceId = &v +// SetDryRun sets the DryRun field's value. +func (s *DetachNetworkInterfaceInput) SetDryRun(v bool) *DetachNetworkInterfaceInput { + s.DryRun = &v return s } -// SetTags sets the Tags field's value. -func (s *ClassicLinkInstance) SetTags(v []*Tag) *ClassicLinkInstance { - s.Tags = v +// SetForce sets the Force field's value. +func (s *DetachNetworkInterfaceInput) SetForce(v bool) *DetachNetworkInterfaceInput { + s.Force = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *ClassicLinkInstance) SetVpcId(v string) *ClassicLinkInstance { - s.VpcId = &v - return s +type DetachNetworkInterfaceOutput struct { + _ struct{} `type:"structure"` } -// Describes the client-specific data. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientData -type ClientData struct { +// String returns the string representation +func (s DetachNetworkInterfaceOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DetachNetworkInterfaceOutput) GoString() string { + return s.String() +} + +type DetachVolumeInput struct { _ struct{} `type:"structure"` - // A user-defined comment about the disk upload. - Comment *string `type:"string"` + // The device name. + Device *string `type:"string"` - // The time that the disk upload ends. - UploadEnd *time.Time `type:"timestamp" timestampFormat:"iso8601"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The size of the uploaded disk image, in GiB. - UploadSize *float64 `type:"double"` + // Forces detachment if the previous detachment attempt did not occur cleanly + // (for example, logging into an instance, unmounting the volume, and detaching + // normally). This option can lead to data loss or a corrupted file system. + // Use this option only as a last resort to detach a volume from a failed instance. + // The instance won't have an opportunity to flush file system caches or file + // system metadata. If you use this option, you must perform file system check + // and repair procedures. + Force *bool `type:"boolean"` - // The time that the disk upload starts. - UploadStart *time.Time `type:"timestamp" timestampFormat:"iso8601"` + // The ID of the instance. + InstanceId *string `type:"string"` + + // The ID of the volume. + // + // VolumeId is a required field + VolumeId *string `type:"string" required:"true"` } // String returns the string representation -func (s ClientData) String() string { +func (s DetachVolumeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ClientData) GoString() string { +func (s DetachVolumeInput) GoString() string { return s.String() } -// SetComment sets the Comment field's value. -func (s *ClientData) SetComment(v string) *ClientData { - s.Comment = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *DetachVolumeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DetachVolumeInput"} + if s.VolumeId == nil { + invalidParams.Add(request.NewErrParamRequired("VolumeId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDevice sets the Device field's value. +func (s *DetachVolumeInput) SetDevice(v string) *DetachVolumeInput { + s.Device = &v return s } -// SetUploadEnd sets the UploadEnd field's value. -func (s *ClientData) SetUploadEnd(v time.Time) *ClientData { - s.UploadEnd = &v +// SetDryRun sets the DryRun field's value. +func (s *DetachVolumeInput) SetDryRun(v bool) *DetachVolumeInput { + s.DryRun = &v return s } -// SetUploadSize sets the UploadSize field's value. -func (s *ClientData) SetUploadSize(v float64) *ClientData { - s.UploadSize = &v +// SetForce sets the Force field's value. +func (s *DetachVolumeInput) SetForce(v bool) *DetachVolumeInput { + s.Force = &v return s } -// SetUploadStart sets the UploadStart field's value. -func (s *ClientData) SetUploadStart(v time.Time) *ClientData { - s.UploadStart = &v +// SetInstanceId sets the InstanceId field's value. +func (s *DetachVolumeInput) SetInstanceId(v string) *DetachVolumeInput { + s.InstanceId = &v return s } -// Contains the parameters for ConfirmProductInstance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstanceRequest -type ConfirmProductInstanceInput struct { +// SetVolumeId sets the VolumeId field's value. +func (s *DetachVolumeInput) SetVolumeId(v string) *DetachVolumeInput { + s.VolumeId = &v + return s +} + +// Contains the parameters for DetachVpnGateway. +type DetachVpnGatewayInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -19076,35 +62604,35 @@ type ConfirmProductInstanceInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the instance. + // The ID of the VPC. // - // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` + // VpcId is a required field + VpcId *string `type:"string" required:"true"` - // The product code. This must be a product code that you own. + // The ID of the virtual private gateway. // - // ProductCode is a required field - ProductCode *string `type:"string" required:"true"` + // VpnGatewayId is a required field + VpnGatewayId *string `type:"string" required:"true"` } // String returns the string representation -func (s ConfirmProductInstanceInput) String() string { +func (s DetachVpnGatewayInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ConfirmProductInstanceInput) GoString() string { +func (s DetachVpnGatewayInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ConfirmProductInstanceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ConfirmProductInstanceInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) +func (s *DetachVpnGatewayInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DetachVpnGatewayInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) } - if s.ProductCode == nil { - invalidParams.Add(request.NewErrParamRequired("ProductCode")) + if s.VpnGatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) } if invalidParams.Len() > 0 { @@ -19114,517 +62642,477 @@ func (s *ConfirmProductInstanceInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *ConfirmProductInstanceInput) SetDryRun(v bool) *ConfirmProductInstanceInput { +func (s *DetachVpnGatewayInput) SetDryRun(v bool) *DetachVpnGatewayInput { s.DryRun = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *ConfirmProductInstanceInput) SetInstanceId(v string) *ConfirmProductInstanceInput { - s.InstanceId = &v +// SetVpcId sets the VpcId field's value. +func (s *DetachVpnGatewayInput) SetVpcId(v string) *DetachVpnGatewayInput { + s.VpcId = &v return s } -// SetProductCode sets the ProductCode field's value. -func (s *ConfirmProductInstanceInput) SetProductCode(v string) *ConfirmProductInstanceInput { - s.ProductCode = &v +// SetVpnGatewayId sets the VpnGatewayId field's value. +func (s *DetachVpnGatewayInput) SetVpnGatewayId(v string) *DetachVpnGatewayInput { + s.VpnGatewayId = &v return s } -// Contains the output of ConfirmProductInstance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstanceResult -type ConfirmProductInstanceOutput struct { +type DetachVpnGatewayOutput struct { _ struct{} `type:"structure"` +} - // The AWS account ID of the instance owner. This is only present if the product - // code is attached to the instance. - OwnerId *string `locationName:"ownerId" type:"string"` +// String returns the string representation +func (s DetachVpnGatewayOutput) String() string { + return awsutil.Prettify(s) +} - // The return value of the request. Returns true if the specified product code - // is owned by the requester and associated with the specified instance. - Return *bool `locationName:"return" type:"boolean"` +// GoString returns the string representation +func (s DetachVpnGatewayOutput) GoString() string { + return s.String() +} + +// Describes a DHCP configuration option. +type DhcpConfiguration struct { + _ struct{} `type:"structure"` + + // The name of a DHCP option. + Key *string `locationName:"key" type:"string"` + + // One or more values for the DHCP option. + Values []*AttributeValue `locationName:"valueSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s ConfirmProductInstanceOutput) String() string { +func (s DhcpConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ConfirmProductInstanceOutput) GoString() string { +func (s DhcpConfiguration) GoString() string { return s.String() } -// SetOwnerId sets the OwnerId field's value. -func (s *ConfirmProductInstanceOutput) SetOwnerId(v string) *ConfirmProductInstanceOutput { - s.OwnerId = &v +// SetKey sets the Key field's value. +func (s *DhcpConfiguration) SetKey(v string) *DhcpConfiguration { + s.Key = &v return s } -// SetReturn sets the Return field's value. -func (s *ConfirmProductInstanceOutput) SetReturn(v bool) *ConfirmProductInstanceOutput { - s.Return = &v +// SetValues sets the Values field's value. +func (s *DhcpConfiguration) SetValues(v []*AttributeValue) *DhcpConfiguration { + s.Values = v return s } -// Describes a conversion task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConversionTask -type ConversionTask struct { +// Describes a set of DHCP options. +type DhcpOptions struct { _ struct{} `type:"structure"` - // The ID of the conversion task. - // - // ConversionTaskId is a required field - ConversionTaskId *string `locationName:"conversionTaskId" type:"string" required:"true"` - - // The time when the task expires. If the upload isn't complete before the expiration - // time, we automatically cancel the task. - ExpirationTime *string `locationName:"expirationTime" type:"string"` - - // If the task is for importing an instance, this contains information about - // the import instance task. - ImportInstance *ImportInstanceTaskDetails `locationName:"importInstance" type:"structure"` - - // If the task is for importing a volume, this contains information about the - // import volume task. - ImportVolume *ImportVolumeTaskDetails `locationName:"importVolume" type:"structure"` + // One or more DHCP options in the set. + DhcpConfigurations []*DhcpConfiguration `locationName:"dhcpConfigurationSet" locationNameList:"item" type:"list"` - // The state of the conversion task. - // - // State is a required field - State *string `locationName:"state" type:"string" required:"true" enum:"ConversionTaskState"` + // The ID of the set of DHCP options. + DhcpOptionsId *string `locationName:"dhcpOptionsId" type:"string"` - // The status message related to the conversion task. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // The ID of the AWS account that owns the DHCP options set. + OwnerId *string `locationName:"ownerId" type:"string"` - // Any tags assigned to the task. + // Any tags assigned to the DHCP options set. Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s ConversionTask) String() string { +func (s DhcpOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ConversionTask) GoString() string { +func (s DhcpOptions) GoString() string { return s.String() } -// SetConversionTaskId sets the ConversionTaskId field's value. -func (s *ConversionTask) SetConversionTaskId(v string) *ConversionTask { - s.ConversionTaskId = &v +// SetDhcpConfigurations sets the DhcpConfigurations field's value. +func (s *DhcpOptions) SetDhcpConfigurations(v []*DhcpConfiguration) *DhcpOptions { + s.DhcpConfigurations = v return s } -// SetExpirationTime sets the ExpirationTime field's value. -func (s *ConversionTask) SetExpirationTime(v string) *ConversionTask { - s.ExpirationTime = &v +// SetDhcpOptionsId sets the DhcpOptionsId field's value. +func (s *DhcpOptions) SetDhcpOptionsId(v string) *DhcpOptions { + s.DhcpOptionsId = &v return s } -// SetImportInstance sets the ImportInstance field's value. -func (s *ConversionTask) SetImportInstance(v *ImportInstanceTaskDetails) *ConversionTask { - s.ImportInstance = v +// SetOwnerId sets the OwnerId field's value. +func (s *DhcpOptions) SetOwnerId(v string) *DhcpOptions { + s.OwnerId = &v return s } -// SetImportVolume sets the ImportVolume field's value. -func (s *ConversionTask) SetImportVolume(v *ImportVolumeTaskDetails) *ConversionTask { - s.ImportVolume = v +// SetTags sets the Tags field's value. +func (s *DhcpOptions) SetTags(v []*Tag) *DhcpOptions { + s.Tags = v return s } -// SetState sets the State field's value. -func (s *ConversionTask) SetState(v string) *ConversionTask { - s.State = &v - return s +// Describes an Active Directory. +type DirectoryServiceAuthentication struct { + _ struct{} `type:"structure"` + + // The ID of the Active Directory used for authentication. + DirectoryId *string `locationName:"directoryId" type:"string"` } -// SetStatusMessage sets the StatusMessage field's value. -func (s *ConversionTask) SetStatusMessage(v string) *ConversionTask { - s.StatusMessage = &v - return s +// String returns the string representation +func (s DirectoryServiceAuthentication) String() string { + return awsutil.Prettify(s) } -// SetTags sets the Tags field's value. -func (s *ConversionTask) SetTags(v []*Tag) *ConversionTask { - s.Tags = v +// GoString returns the string representation +func (s DirectoryServiceAuthentication) GoString() string { + return s.String() +} + +// SetDirectoryId sets the DirectoryId field's value. +func (s *DirectoryServiceAuthentication) SetDirectoryId(v string) *DirectoryServiceAuthentication { + s.DirectoryId = &v return s } -// Contains the parameters for CopyImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImageRequest -type CopyImageInput struct { +// Describes the Active Directory to be used for client authentication. +type DirectoryServiceAuthenticationRequest struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier you provide to ensure idempotency of the - // request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) - // in the Amazon Elastic Compute Cloud User Guide. - ClientToken *string `type:"string"` + // The ID of the Active Directory to be used for authentication. + DirectoryId *string `type:"string"` +} - // A description for the new AMI in the destination region. - Description *string `type:"string"` +// String returns the string representation +func (s DirectoryServiceAuthenticationRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DirectoryServiceAuthenticationRequest) GoString() string { + return s.String() +} + +// SetDirectoryId sets the DirectoryId field's value. +func (s *DirectoryServiceAuthenticationRequest) SetDirectoryId(v string) *DirectoryServiceAuthenticationRequest { + s.DirectoryId = &v + return s +} + +type DisableEbsEncryptionByDefaultInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` +} - // Specifies whether the destination snapshots of the copied image should be - // encrypted. The default CMK for EBS is used unless a non-default AWS Key Management - // Service (AWS KMS) CMK is specified with KmsKeyId. For more information, see - // Amazon EBS Encryption (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) - // in the Amazon Elastic Compute Cloud User Guide. - Encrypted *bool `locationName:"encrypted" type:"boolean"` +// String returns the string representation +func (s DisableEbsEncryptionByDefaultInput) String() string { + return awsutil.Prettify(s) +} - // The full ARN of the AWS Key Management Service (AWS KMS) CMK to use when - // encrypting the snapshots of an image during a copy operation. This parameter - // is only required if you want to use a non-default CMK; if this parameter - // is not specified, the default CMK for EBS is used. The ARN contains the arn:aws:kms - // namespace, followed by the region of the CMK, the AWS account ID of the CMK - // owner, the key namespace, and then the CMK ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. - // The specified CMK must exist in the region that the snapshot is being copied - // to. If a KmsKeyId is specified, the Encrypted flag must also be set. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` +// GoString returns the string representation +func (s DisableEbsEncryptionByDefaultInput) GoString() string { + return s.String() +} - // The name of the new AMI in the destination region. - // - // Name is a required field - Name *string `type:"string" required:"true"` +// SetDryRun sets the DryRun field's value. +func (s *DisableEbsEncryptionByDefaultInput) SetDryRun(v bool) *DisableEbsEncryptionByDefaultInput { + s.DryRun = &v + return s +} - // The ID of the AMI to copy. - // - // SourceImageId is a required field - SourceImageId *string `type:"string" required:"true"` +type DisableEbsEncryptionByDefaultOutput struct { + _ struct{} `type:"structure"` - // The name of the region that contains the AMI to copy. - // - // SourceRegion is a required field - SourceRegion *string `type:"string" required:"true"` + // The updated status of encryption by default. + EbsEncryptionByDefault *bool `locationName:"ebsEncryptionByDefault" type:"boolean"` } // String returns the string representation -func (s CopyImageInput) String() string { +func (s DisableEbsEncryptionByDefaultOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CopyImageInput) GoString() string { +func (s DisableEbsEncryptionByDefaultOutput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CopyImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CopyImageInput"} - if s.Name == nil { - invalidParams.Add(request.NewErrParamRequired("Name")) - } - if s.SourceImageId == nil { - invalidParams.Add(request.NewErrParamRequired("SourceImageId")) - } - if s.SourceRegion == nil { - invalidParams.Add(request.NewErrParamRequired("SourceRegion")) - } +// SetEbsEncryptionByDefault sets the EbsEncryptionByDefault field's value. +func (s *DisableEbsEncryptionByDefaultOutput) SetEbsEncryptionByDefault(v bool) *DisableEbsEncryptionByDefaultOutput { + s.EbsEncryptionByDefault = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// Contains information about the errors that occurred when disabling fast snapshot +// restores. +type DisableFastSnapshotRestoreErrorItem struct { + _ struct{} `type:"structure"` + + // The errors. + FastSnapshotRestoreStateErrors []*DisableFastSnapshotRestoreStateErrorItem `locationName:"fastSnapshotRestoreStateErrorSet" locationNameList:"item" type:"list"` + + // The ID of the snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` } -// SetClientToken sets the ClientToken field's value. -func (s *CopyImageInput) SetClientToken(v string) *CopyImageInput { - s.ClientToken = &v - return s +// String returns the string representation +func (s DisableFastSnapshotRestoreErrorItem) String() string { + return awsutil.Prettify(s) } -// SetDescription sets the Description field's value. -func (s *CopyImageInput) SetDescription(v string) *CopyImageInput { - s.Description = &v - return s +// GoString returns the string representation +func (s DisableFastSnapshotRestoreErrorItem) GoString() string { + return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *CopyImageInput) SetDryRun(v bool) *CopyImageInput { - s.DryRun = &v +// SetFastSnapshotRestoreStateErrors sets the FastSnapshotRestoreStateErrors field's value. +func (s *DisableFastSnapshotRestoreErrorItem) SetFastSnapshotRestoreStateErrors(v []*DisableFastSnapshotRestoreStateErrorItem) *DisableFastSnapshotRestoreErrorItem { + s.FastSnapshotRestoreStateErrors = v return s } -// SetEncrypted sets the Encrypted field's value. -func (s *CopyImageInput) SetEncrypted(v bool) *CopyImageInput { - s.Encrypted = &v +// SetSnapshotId sets the SnapshotId field's value. +func (s *DisableFastSnapshotRestoreErrorItem) SetSnapshotId(v string) *DisableFastSnapshotRestoreErrorItem { + s.SnapshotId = &v return s } -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *CopyImageInput) SetKmsKeyId(v string) *CopyImageInput { - s.KmsKeyId = &v - return s +// Describes an error that occurred when disabling fast snapshot restores. +type DisableFastSnapshotRestoreStateError struct { + _ struct{} `type:"structure"` + + // The error code. + Code *string `locationName:"code" type:"string"` + + // The error message. + Message *string `locationName:"message" type:"string"` } -// SetName sets the Name field's value. -func (s *CopyImageInput) SetName(v string) *CopyImageInput { - s.Name = &v - return s +// String returns the string representation +func (s DisableFastSnapshotRestoreStateError) String() string { + return awsutil.Prettify(s) } -// SetSourceImageId sets the SourceImageId field's value. -func (s *CopyImageInput) SetSourceImageId(v string) *CopyImageInput { - s.SourceImageId = &v +// GoString returns the string representation +func (s DisableFastSnapshotRestoreStateError) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *DisableFastSnapshotRestoreStateError) SetCode(v string) *DisableFastSnapshotRestoreStateError { + s.Code = &v return s } -// SetSourceRegion sets the SourceRegion field's value. -func (s *CopyImageInput) SetSourceRegion(v string) *CopyImageInput { - s.SourceRegion = &v +// SetMessage sets the Message field's value. +func (s *DisableFastSnapshotRestoreStateError) SetMessage(v string) *DisableFastSnapshotRestoreStateError { + s.Message = &v return s } -// Contains the output of CopyImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImageResult -type CopyImageOutput struct { +// Contains information about an error that occurred when disabling fast snapshot +// restores. +type DisableFastSnapshotRestoreStateErrorItem struct { _ struct{} `type:"structure"` - // The ID of the new AMI. - ImageId *string `locationName:"imageId" type:"string"` + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + + // The error. + Error *DisableFastSnapshotRestoreStateError `locationName:"error" type:"structure"` } // String returns the string representation -func (s CopyImageOutput) String() string { +func (s DisableFastSnapshotRestoreStateErrorItem) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CopyImageOutput) GoString() string { +func (s DisableFastSnapshotRestoreStateErrorItem) GoString() string { return s.String() } -// SetImageId sets the ImageId field's value. -func (s *CopyImageOutput) SetImageId(v string) *CopyImageOutput { - s.ImageId = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *DisableFastSnapshotRestoreStateErrorItem) SetAvailabilityZone(v string) *DisableFastSnapshotRestoreStateErrorItem { + s.AvailabilityZone = &v return s } -// Contains the parameters for CopySnapshot. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshotRequest -type CopySnapshotInput struct { +// SetError sets the Error field's value. +func (s *DisableFastSnapshotRestoreStateErrorItem) SetError(v *DisableFastSnapshotRestoreStateError) *DisableFastSnapshotRestoreStateErrorItem { + s.Error = v + return s +} + +// Describes fast snapshot restores that were successfully disabled. +type DisableFastSnapshotRestoreSuccessItem struct { _ struct{} `type:"structure"` - // A description for the EBS snapshot. - Description *string `type:"string"` + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The destination region to use in the PresignedUrl parameter of a snapshot - // copy operation. This parameter is only valid for specifying the destination - // region in a PresignedUrl parameter, where it is required. - // - // CopySnapshot sends the snapshot copy to the regional endpoint that you send - // the HTTP request to, such as ec2.us-east-1.amazonaws.com (in the AWS CLI, - // this is specified with the --region parameter or the default region in your - // AWS configuration file). - DestinationRegion *string `locationName:"destinationRegion" type:"string"` + // The time at which fast snapshot restores entered the disabled state. + DisabledTime *time.Time `locationName:"disabledTime" type:"timestamp"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The time at which fast snapshot restores entered the disabling state. + DisablingTime *time.Time `locationName:"disablingTime" type:"timestamp"` - // Specifies whether the destination snapshot should be encrypted. You can encrypt - // a copy of an unencrypted snapshot using this flag, but you cannot use it - // to create an unencrypted copy from an encrypted snapshot. Your default CMK - // for EBS is used unless a non-default AWS Key Management Service (AWS KMS) - // CMK is specified with KmsKeyId. For more information, see Amazon EBS Encryption - // (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) in - // the Amazon Elastic Compute Cloud User Guide. - Encrypted *bool `locationName:"encrypted" type:"boolean"` + // The time at which fast snapshot restores entered the enabled state. + EnabledTime *time.Time `locationName:"enabledTime" type:"timestamp"` - // The full ARN of the AWS Key Management Service (AWS KMS) CMK to use when - // creating the snapshot copy. This parameter is only required if you want to - // use a non-default CMK; if this parameter is not specified, the default CMK - // for EBS is used. The ARN contains the arn:aws:kms namespace, followed by - // the region of the CMK, the AWS account ID of the CMK owner, the key namespace, - // and then the CMK ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. - // The specified CMK must exist in the region that the snapshot is being copied - // to. If a KmsKeyId is specified, the Encrypted flag must also be set. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + // The time at which fast snapshot restores entered the enabling state. + EnablingTime *time.Time `locationName:"enablingTime" type:"timestamp"` - // The pre-signed URL that facilitates copying an encrypted snapshot. This parameter - // is only required when copying an encrypted snapshot with the Amazon EC2 Query - // API; it is available as an optional parameter in all other cases. The PresignedUrl - // should use the snapshot source endpoint, the CopySnapshot action, and include - // the SourceRegion, SourceSnapshotId, and DestinationRegion parameters. The - // PresignedUrl must be signed using AWS Signature Version 4. Because EBS snapshots - // are stored in Amazon S3, the signing algorithm for this parameter uses the - // same logic that is described in Authenticating Requests by Using Query Parameters - // (AWS Signature Version 4) (http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html) - // in the Amazon Simple Storage Service API Reference. An invalid or improperly - // signed PresignedUrl will cause the copy operation to fail asynchronously, - // and the snapshot will move to an error state. - PresignedUrl *string `locationName:"presignedUrl" type:"string"` + // The time at which fast snapshot restores entered the optimizing state. + OptimizingTime *time.Time `locationName:"optimizingTime" type:"timestamp"` - // The ID of the region that contains the snapshot to be copied. - // - // SourceRegion is a required field - SourceRegion *string `type:"string" required:"true"` + // The alias of the snapshot owner. + OwnerAlias *string `locationName:"ownerAlias" type:"string"` - // The ID of the EBS snapshot to copy. + // The ID of the AWS account that owns the snapshot. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The ID of the snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` + + // The state of fast snapshot restores for the snapshot. + State *string `locationName:"state" type:"string" enum:"FastSnapshotRestoreStateCode"` + + // The reason for the state transition. The possible values are as follows: // - // SourceSnapshotId is a required field - SourceSnapshotId *string `type:"string" required:"true"` + // * Client.UserInitiated - The state successfully transitioned to enabling + // or disabling. + // + // * Client.UserInitiated - Lifecycle state transition - The state successfully + // transitioned to optimizing, enabled, or disabled. + StateTransitionReason *string `locationName:"stateTransitionReason" type:"string"` } // String returns the string representation -func (s CopySnapshotInput) String() string { +func (s DisableFastSnapshotRestoreSuccessItem) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CopySnapshotInput) GoString() string { +func (s DisableFastSnapshotRestoreSuccessItem) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CopySnapshotInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CopySnapshotInput"} - if s.SourceRegion == nil { - invalidParams.Add(request.NewErrParamRequired("SourceRegion")) - } - if s.SourceSnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SourceSnapshotId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *CopySnapshotInput) SetDescription(v string) *CopySnapshotInput { - s.Description = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetAvailabilityZone(v string) *DisableFastSnapshotRestoreSuccessItem { + s.AvailabilityZone = &v return s } -// SetDestinationRegion sets the DestinationRegion field's value. -func (s *CopySnapshotInput) SetDestinationRegion(v string) *CopySnapshotInput { - s.DestinationRegion = &v +// SetDisabledTime sets the DisabledTime field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetDisabledTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { + s.DisabledTime = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CopySnapshotInput) SetDryRun(v bool) *CopySnapshotInput { - s.DryRun = &v +// SetDisablingTime sets the DisablingTime field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetDisablingTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { + s.DisablingTime = &v return s } -// SetEncrypted sets the Encrypted field's value. -func (s *CopySnapshotInput) SetEncrypted(v bool) *CopySnapshotInput { - s.Encrypted = &v +// SetEnabledTime sets the EnabledTime field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetEnabledTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { + s.EnabledTime = &v return s } -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *CopySnapshotInput) SetKmsKeyId(v string) *CopySnapshotInput { - s.KmsKeyId = &v +// SetEnablingTime sets the EnablingTime field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetEnablingTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { + s.EnablingTime = &v return s } -// SetPresignedUrl sets the PresignedUrl field's value. -func (s *CopySnapshotInput) SetPresignedUrl(v string) *CopySnapshotInput { - s.PresignedUrl = &v +// SetOptimizingTime sets the OptimizingTime field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetOptimizingTime(v time.Time) *DisableFastSnapshotRestoreSuccessItem { + s.OptimizingTime = &v return s } -// SetSourceRegion sets the SourceRegion field's value. -func (s *CopySnapshotInput) SetSourceRegion(v string) *CopySnapshotInput { - s.SourceRegion = &v +// SetOwnerAlias sets the OwnerAlias field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetOwnerAlias(v string) *DisableFastSnapshotRestoreSuccessItem { + s.OwnerAlias = &v return s } -// SetSourceSnapshotId sets the SourceSnapshotId field's value. -func (s *CopySnapshotInput) SetSourceSnapshotId(v string) *CopySnapshotInput { - s.SourceSnapshotId = &v +// SetOwnerId sets the OwnerId field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetOwnerId(v string) *DisableFastSnapshotRestoreSuccessItem { + s.OwnerId = &v return s } -// Contains the output of CopySnapshot. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshotResult -type CopySnapshotOutput struct { - _ struct{} `type:"structure"` - - // The ID of the new snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` -} - -// String returns the string representation -func (s CopySnapshotOutput) String() string { - return awsutil.Prettify(s) +// SetSnapshotId sets the SnapshotId field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetSnapshotId(v string) *DisableFastSnapshotRestoreSuccessItem { + s.SnapshotId = &v + return s } -// GoString returns the string representation -func (s CopySnapshotOutput) GoString() string { - return s.String() +// SetState sets the State field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetState(v string) *DisableFastSnapshotRestoreSuccessItem { + s.State = &v + return s } -// SetSnapshotId sets the SnapshotId field's value. -func (s *CopySnapshotOutput) SetSnapshotId(v string) *CopySnapshotOutput { - s.SnapshotId = &v +// SetStateTransitionReason sets the StateTransitionReason field's value. +func (s *DisableFastSnapshotRestoreSuccessItem) SetStateTransitionReason(v string) *DisableFastSnapshotRestoreSuccessItem { + s.StateTransitionReason = &v return s } -// Contains the parameters for CreateCustomerGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGatewayRequest -type CreateCustomerGatewayInput struct { +type DisableFastSnapshotRestoresInput struct { _ struct{} `type:"structure"` - // For devices that support BGP, the customer gateway's BGP ASN. - // - // Default: 65000 + // One or more Availability Zones. For example, us-east-2a. // - // BgpAsn is a required field - BgpAsn *int64 `type:"integer" required:"true"` + // AvailabilityZones is a required field + AvailabilityZones []*string `locationName:"AvailabilityZone" locationNameList:"AvailabilityZone" type:"list" required:"true"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The Internet-routable IP address for the customer gateway's outside interface. - // The address must be static. - // - // PublicIp is a required field - PublicIp *string `locationName:"IpAddress" type:"string" required:"true"` + DryRun *bool `type:"boolean"` - // The type of VPN connection that this customer gateway supports (ipsec.1). + // The IDs of one or more snapshots. For example, snap-1234567890abcdef0. // - // Type is a required field - Type *string `type:"string" required:"true" enum:"GatewayType"` + // SourceSnapshotIds is a required field + SourceSnapshotIds []*string `locationName:"SourceSnapshotId" locationNameList:"SnapshotId" type:"list" required:"true"` } // String returns the string representation -func (s CreateCustomerGatewayInput) String() string { +func (s DisableFastSnapshotRestoresInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateCustomerGatewayInput) GoString() string { +func (s DisableFastSnapshotRestoresInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateCustomerGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateCustomerGatewayInput"} - if s.BgpAsn == nil { - invalidParams.Add(request.NewErrParamRequired("BgpAsn")) - } - if s.PublicIp == nil { - invalidParams.Add(request.NewErrParamRequired("PublicIp")) +func (s *DisableFastSnapshotRestoresInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisableFastSnapshotRestoresInput"} + if s.AvailabilityZones == nil { + invalidParams.Add(request.NewErrParamRequired("AvailabilityZones")) } - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) + if s.SourceSnapshotIds == nil { + invalidParams.Add(request.NewErrParamRequired("SourceSnapshotIds")) } if invalidParams.Len() > 0 { @@ -19633,87 +63121,96 @@ func (s *CreateCustomerGatewayInput) Validate() error { return nil } -// SetBgpAsn sets the BgpAsn field's value. -func (s *CreateCustomerGatewayInput) SetBgpAsn(v int64) *CreateCustomerGatewayInput { - s.BgpAsn = &v +// SetAvailabilityZones sets the AvailabilityZones field's value. +func (s *DisableFastSnapshotRestoresInput) SetAvailabilityZones(v []*string) *DisableFastSnapshotRestoresInput { + s.AvailabilityZones = v return s } // SetDryRun sets the DryRun field's value. -func (s *CreateCustomerGatewayInput) SetDryRun(v bool) *CreateCustomerGatewayInput { +func (s *DisableFastSnapshotRestoresInput) SetDryRun(v bool) *DisableFastSnapshotRestoresInput { s.DryRun = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *CreateCustomerGatewayInput) SetPublicIp(v string) *CreateCustomerGatewayInput { - s.PublicIp = &v - return s -} - -// SetType sets the Type field's value. -func (s *CreateCustomerGatewayInput) SetType(v string) *CreateCustomerGatewayInput { - s.Type = &v +// SetSourceSnapshotIds sets the SourceSnapshotIds field's value. +func (s *DisableFastSnapshotRestoresInput) SetSourceSnapshotIds(v []*string) *DisableFastSnapshotRestoresInput { + s.SourceSnapshotIds = v return s } -// Contains the output of CreateCustomerGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGatewayResult -type CreateCustomerGatewayOutput struct { +type DisableFastSnapshotRestoresOutput struct { _ struct{} `type:"structure"` - // Information about the customer gateway. - CustomerGateway *CustomerGateway `locationName:"customerGateway" type:"structure"` + // Information about the snapshots for which fast snapshot restores were successfully + // disabled. + Successful []*DisableFastSnapshotRestoreSuccessItem `locationName:"successful" locationNameList:"item" type:"list"` + + // Information about the snapshots for which fast snapshot restores could not + // be disabled. + Unsuccessful []*DisableFastSnapshotRestoreErrorItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CreateCustomerGatewayOutput) String() string { +func (s DisableFastSnapshotRestoresOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateCustomerGatewayOutput) GoString() string { +func (s DisableFastSnapshotRestoresOutput) GoString() string { return s.String() } -// SetCustomerGateway sets the CustomerGateway field's value. -func (s *CreateCustomerGatewayOutput) SetCustomerGateway(v *CustomerGateway) *CreateCustomerGatewayOutput { - s.CustomerGateway = v +// SetSuccessful sets the Successful field's value. +func (s *DisableFastSnapshotRestoresOutput) SetSuccessful(v []*DisableFastSnapshotRestoreSuccessItem) *DisableFastSnapshotRestoresOutput { + s.Successful = v return s } -// Contains the parameters for CreateDhcpOptions. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptionsRequest -type CreateDhcpOptionsInput struct { - _ struct{} `type:"structure"` +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *DisableFastSnapshotRestoresOutput) SetUnsuccessful(v []*DisableFastSnapshotRestoreErrorItem) *DisableFastSnapshotRestoresOutput { + s.Unsuccessful = v + return s +} - // A DHCP configuration option. - // - // DhcpConfigurations is a required field - DhcpConfigurations []*NewDhcpConfiguration `locationName:"dhcpConfiguration" locationNameList:"item" type:"list" required:"true"` +type DisableTransitGatewayRouteTablePropagationInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` + + // The ID of the attachment. + // + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` + + // The ID of the propagation route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s CreateDhcpOptionsInput) String() string { +func (s DisableTransitGatewayRouteTablePropagationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateDhcpOptionsInput) GoString() string { +func (s DisableTransitGatewayRouteTablePropagationInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateDhcpOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateDhcpOptionsInput"} - if s.DhcpConfigurations == nil { - invalidParams.Add(request.NewErrParamRequired("DhcpConfigurations")) +func (s *DisableTransitGatewayRouteTablePropagationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisableTransitGatewayRouteTablePropagationInput"} + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) } if invalidParams.Len() > 0 { @@ -19722,78 +63219,80 @@ func (s *CreateDhcpOptionsInput) Validate() error { return nil } -// SetDhcpConfigurations sets the DhcpConfigurations field's value. -func (s *CreateDhcpOptionsInput) SetDhcpConfigurations(v []*NewDhcpConfiguration) *CreateDhcpOptionsInput { - s.DhcpConfigurations = v +// SetDryRun sets the DryRun field's value. +func (s *DisableTransitGatewayRouteTablePropagationInput) SetDryRun(v bool) *DisableTransitGatewayRouteTablePropagationInput { + s.DryRun = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateDhcpOptionsInput) SetDryRun(v bool) *CreateDhcpOptionsInput { - s.DryRun = &v +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *DisableTransitGatewayRouteTablePropagationInput) SetTransitGatewayAttachmentId(v string) *DisableTransitGatewayRouteTablePropagationInput { + s.TransitGatewayAttachmentId = &v return s } -// Contains the output of CreateDhcpOptions. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptionsResult -type CreateDhcpOptionsOutput struct { +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *DisableTransitGatewayRouteTablePropagationInput) SetTransitGatewayRouteTableId(v string) *DisableTransitGatewayRouteTablePropagationInput { + s.TransitGatewayRouteTableId = &v + return s +} + +type DisableTransitGatewayRouteTablePropagationOutput struct { _ struct{} `type:"structure"` - // A set of DHCP options. - DhcpOptions *DhcpOptions `locationName:"dhcpOptions" type:"structure"` + // Information about route propagation. + Propagation *TransitGatewayPropagation `locationName:"propagation" type:"structure"` } // String returns the string representation -func (s CreateDhcpOptionsOutput) String() string { +func (s DisableTransitGatewayRouteTablePropagationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateDhcpOptionsOutput) GoString() string { +func (s DisableTransitGatewayRouteTablePropagationOutput) GoString() string { return s.String() } -// SetDhcpOptions sets the DhcpOptions field's value. -func (s *CreateDhcpOptionsOutput) SetDhcpOptions(v *DhcpOptions) *CreateDhcpOptionsOutput { - s.DhcpOptions = v +// SetPropagation sets the Propagation field's value. +func (s *DisableTransitGatewayRouteTablePropagationOutput) SetPropagation(v *TransitGatewayPropagation) *DisableTransitGatewayRouteTablePropagationOutput { + s.Propagation = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGatewayRequest -type CreateEgressOnlyInternetGatewayInput struct { +// Contains the parameters for DisableVgwRoutePropagation. +type DisableVgwRoutePropagationInput struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // The ID of the virtual private gateway. + // + // GatewayId is a required field + GatewayId *string `type:"string" required:"true"` - // The ID of the VPC for which to create the egress-only Internet gateway. + // The ID of the route table. // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` + // RouteTableId is a required field + RouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s CreateEgressOnlyInternetGatewayInput) String() string { +func (s DisableVgwRoutePropagationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateEgressOnlyInternetGatewayInput) GoString() string { +func (s DisableVgwRoutePropagationInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateEgressOnlyInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateEgressOnlyInternetGatewayInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) +func (s *DisableVgwRoutePropagationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisableVgwRoutePropagationInput"} + if s.GatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("GatewayId")) + } + if s.RouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("RouteTableId")) } if invalidParams.Len() > 0 { @@ -19802,123 +63301,108 @@ func (s *CreateEgressOnlyInternetGatewayInput) Validate() error { return nil } -// SetClientToken sets the ClientToken field's value. -func (s *CreateEgressOnlyInternetGatewayInput) SetClientToken(v string) *CreateEgressOnlyInternetGatewayInput { - s.ClientToken = &v +// SetGatewayId sets the GatewayId field's value. +func (s *DisableVgwRoutePropagationInput) SetGatewayId(v string) *DisableVgwRoutePropagationInput { + s.GatewayId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateEgressOnlyInternetGatewayInput) SetDryRun(v bool) *CreateEgressOnlyInternetGatewayInput { - s.DryRun = &v +// SetRouteTableId sets the RouteTableId field's value. +func (s *DisableVgwRoutePropagationInput) SetRouteTableId(v string) *DisableVgwRoutePropagationInput { + s.RouteTableId = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *CreateEgressOnlyInternetGatewayInput) SetVpcId(v string) *CreateEgressOnlyInternetGatewayInput { - s.VpcId = &v - return s +type DisableVgwRoutePropagationOutput struct { + _ struct{} `type:"structure"` } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGatewayResult -type CreateEgressOnlyInternetGatewayOutput struct { - _ struct{} `type:"structure"` +// String returns the string representation +func (s DisableVgwRoutePropagationOutput) String() string { + return awsutil.Prettify(s) +} - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. - ClientToken *string `locationName:"clientToken" type:"string"` +// GoString returns the string representation +func (s DisableVgwRoutePropagationOutput) GoString() string { + return s.String() +} - // Information about the egress-only Internet gateway. - EgressOnlyInternetGateway *EgressOnlyInternetGateway `locationName:"egressOnlyInternetGateway" type:"structure"` +type DisableVpcClassicLinkDnsSupportInput struct { + _ struct{} `type:"structure"` + + // The ID of the VPC. + VpcId *string `type:"string"` } // String returns the string representation -func (s CreateEgressOnlyInternetGatewayOutput) String() string { +func (s DisableVpcClassicLinkDnsSupportInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateEgressOnlyInternetGatewayOutput) GoString() string { +func (s DisableVpcClassicLinkDnsSupportInput) GoString() string { return s.String() } -// SetClientToken sets the ClientToken field's value. -func (s *CreateEgressOnlyInternetGatewayOutput) SetClientToken(v string) *CreateEgressOnlyInternetGatewayOutput { - s.ClientToken = &v - return s -} - -// SetEgressOnlyInternetGateway sets the EgressOnlyInternetGateway field's value. -func (s *CreateEgressOnlyInternetGatewayOutput) SetEgressOnlyInternetGateway(v *EgressOnlyInternetGateway) *CreateEgressOnlyInternetGatewayOutput { - s.EgressOnlyInternetGateway = v +// SetVpcId sets the VpcId field's value. +func (s *DisableVpcClassicLinkDnsSupportInput) SetVpcId(v string) *DisableVpcClassicLinkDnsSupportInput { + s.VpcId = &v return s } -// Contains the parameters for CreateFlowLogs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogsRequest -type CreateFlowLogsInput struct { +type DisableVpcClassicLinkDnsSupportOutput struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` +} - // The ARN for the IAM role that's used to post flow logs to a CloudWatch Logs - // log group. - // - // DeliverLogsPermissionArn is a required field - DeliverLogsPermissionArn *string `type:"string" required:"true"` +// String returns the string representation +func (s DisableVpcClassicLinkDnsSupportOutput) String() string { + return awsutil.Prettify(s) +} - // The name of the CloudWatch log group. - // - // LogGroupName is a required field - LogGroupName *string `type:"string" required:"true"` +// GoString returns the string representation +func (s DisableVpcClassicLinkDnsSupportOutput) GoString() string { + return s.String() +} - // One or more subnet, network interface, or VPC IDs. - // - // Constraints: Maximum of 1000 resources - // - // ResourceIds is a required field - ResourceIds []*string `locationName:"ResourceId" locationNameList:"item" type:"list" required:"true"` +// SetReturn sets the Return field's value. +func (s *DisableVpcClassicLinkDnsSupportOutput) SetReturn(v bool) *DisableVpcClassicLinkDnsSupportOutput { + s.Return = &v + return s +} - // The type of resource on which to create the flow log. - // - // ResourceType is a required field - ResourceType *string `type:"string" required:"true" enum:"FlowLogsResourceType"` +type DisableVpcClassicLinkInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The type of traffic to log. + // The ID of the VPC. // - // TrafficType is a required field - TrafficType *string `type:"string" required:"true" enum:"TrafficType"` + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` } // String returns the string representation -func (s CreateFlowLogsInput) String() string { +func (s DisableVpcClassicLinkInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateFlowLogsInput) GoString() string { +func (s DisableVpcClassicLinkInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateFlowLogsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateFlowLogsInput"} - if s.DeliverLogsPermissionArn == nil { - invalidParams.Add(request.NewErrParamRequired("DeliverLogsPermissionArn")) - } - if s.LogGroupName == nil { - invalidParams.Add(request.NewErrParamRequired("LogGroupName")) - } - if s.ResourceIds == nil { - invalidParams.Add(request.NewErrParamRequired("ResourceIds")) - } - if s.ResourceType == nil { - invalidParams.Add(request.NewErrParamRequired("ResourceType")) - } - if s.TrafficType == nil { - invalidParams.Add(request.NewErrParamRequired("TrafficType")) +func (s *DisableVpcClassicLinkInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisableVpcClassicLinkInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) } if invalidParams.Len() > 0 { @@ -19927,142 +63411,137 @@ func (s *CreateFlowLogsInput) Validate() error { return nil } -// SetClientToken sets the ClientToken field's value. -func (s *CreateFlowLogsInput) SetClientToken(v string) *CreateFlowLogsInput { - s.ClientToken = &v +// SetDryRun sets the DryRun field's value. +func (s *DisableVpcClassicLinkInput) SetDryRun(v bool) *DisableVpcClassicLinkInput { + s.DryRun = &v return s } -// SetDeliverLogsPermissionArn sets the DeliverLogsPermissionArn field's value. -func (s *CreateFlowLogsInput) SetDeliverLogsPermissionArn(v string) *CreateFlowLogsInput { - s.DeliverLogsPermissionArn = &v +// SetVpcId sets the VpcId field's value. +func (s *DisableVpcClassicLinkInput) SetVpcId(v string) *DisableVpcClassicLinkInput { + s.VpcId = &v return s } -// SetLogGroupName sets the LogGroupName field's value. -func (s *CreateFlowLogsInput) SetLogGroupName(v string) *CreateFlowLogsInput { - s.LogGroupName = &v - return s +type DisableVpcClassicLinkOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` } -// SetResourceIds sets the ResourceIds field's value. -func (s *CreateFlowLogsInput) SetResourceIds(v []*string) *CreateFlowLogsInput { - s.ResourceIds = v - return s +// String returns the string representation +func (s DisableVpcClassicLinkOutput) String() string { + return awsutil.Prettify(s) } -// SetResourceType sets the ResourceType field's value. -func (s *CreateFlowLogsInput) SetResourceType(v string) *CreateFlowLogsInput { - s.ResourceType = &v - return s +// GoString returns the string representation +func (s DisableVpcClassicLinkOutput) GoString() string { + return s.String() } -// SetTrafficType sets the TrafficType field's value. -func (s *CreateFlowLogsInput) SetTrafficType(v string) *CreateFlowLogsInput { - s.TrafficType = &v +// SetReturn sets the Return field's value. +func (s *DisableVpcClassicLinkOutput) SetReturn(v bool) *DisableVpcClassicLinkOutput { + s.Return = &v return s } -// Contains the output of CreateFlowLogs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogsResult -type CreateFlowLogsOutput struct { +type DisassociateAddressInput struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. - ClientToken *string `locationName:"clientToken" type:"string"` + // [EC2-VPC] The association ID. Required for EC2-VPC. + AssociationId *string `type:"string"` - // The IDs of the flow logs. - FlowLogIds []*string `locationName:"flowLogIdSet" locationNameList:"item" type:"list"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // Information about the flow logs that could not be created successfully. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` + // [EC2-Classic] The Elastic IP address. Required for EC2-Classic. + PublicIp *string `type:"string"` } // String returns the string representation -func (s CreateFlowLogsOutput) String() string { +func (s DisassociateAddressInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateFlowLogsOutput) GoString() string { +func (s DisassociateAddressInput) GoString() string { return s.String() } -// SetClientToken sets the ClientToken field's value. -func (s *CreateFlowLogsOutput) SetClientToken(v string) *CreateFlowLogsOutput { - s.ClientToken = &v +// SetAssociationId sets the AssociationId field's value. +func (s *DisassociateAddressInput) SetAssociationId(v string) *DisassociateAddressInput { + s.AssociationId = &v return s } -// SetFlowLogIds sets the FlowLogIds field's value. -func (s *CreateFlowLogsOutput) SetFlowLogIds(v []*string) *CreateFlowLogsOutput { - s.FlowLogIds = v +// SetDryRun sets the DryRun field's value. +func (s *DisassociateAddressInput) SetDryRun(v bool) *DisassociateAddressInput { + s.DryRun = &v return s } -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *CreateFlowLogsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *CreateFlowLogsOutput { - s.Unsuccessful = v +// SetPublicIp sets the PublicIp field's value. +func (s *DisassociateAddressInput) SetPublicIp(v string) *DisassociateAddressInput { + s.PublicIp = &v return s } -// Contains the parameters for CreateImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImageRequest -type CreateImageInput struct { +type DisassociateAddressOutput struct { _ struct{} `type:"structure"` +} - // Information about one or more block device mappings. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` +// String returns the string representation +func (s DisassociateAddressOutput) String() string { + return awsutil.Prettify(s) +} - // A description for the new image. - Description *string `locationName:"description" type:"string"` +// GoString returns the string representation +func (s DisassociateAddressOutput) GoString() string { + return s.String() +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +type DisassociateClientVpnTargetNetworkInput struct { + _ struct{} `type:"structure"` - // The ID of the instance. + // The ID of the target network association. // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + // AssociationId is a required field + AssociationId *string `type:"string" required:"true"` - // A name for the new image. - // - // Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets - // ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), - // at-signs (@), or underscores(_) + // The ID of the Client VPN endpoint from which to disassociate the target network. // - // Name is a required field - Name *string `locationName:"name" type:"string" required:"true"` + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` - // By default, Amazon EC2 attempts to shut down and reboot the instance before - // creating the image. If the 'No Reboot' option is set, Amazon EC2 doesn't - // shut down the instance before creating the image. When this option is used, - // file system integrity on the created image can't be guaranteed. - NoReboot *bool `locationName:"noReboot" type:"boolean"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s CreateImageInput) String() string { +func (s DisassociateClientVpnTargetNetworkInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateImageInput) GoString() string { +func (s DisassociateClientVpnTargetNetworkInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateImageInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) +func (s *DisassociateClientVpnTargetNetworkInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisassociateClientVpnTargetNetworkInput"} + if s.AssociationId == nil { + invalidParams.Add(request.NewErrParamRequired("AssociationId")) } - if s.Name == nil { - invalidParams.Add(request.NewErrParamRequired("Name")) + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) } if invalidParams.Len() > 0 { @@ -20071,103 +63550,80 @@ func (s *CreateImageInput) Validate() error { return nil } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *CreateImageInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *CreateImageInput { - s.BlockDeviceMappings = v +// SetAssociationId sets the AssociationId field's value. +func (s *DisassociateClientVpnTargetNetworkInput) SetAssociationId(v string) *DisassociateClientVpnTargetNetworkInput { + s.AssociationId = &v return s } -// SetDescription sets the Description field's value. -func (s *CreateImageInput) SetDescription(v string) *CreateImageInput { - s.Description = &v +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *DisassociateClientVpnTargetNetworkInput) SetClientVpnEndpointId(v string) *DisassociateClientVpnTargetNetworkInput { + s.ClientVpnEndpointId = &v return s } // SetDryRun sets the DryRun field's value. -func (s *CreateImageInput) SetDryRun(v bool) *CreateImageInput { +func (s *DisassociateClientVpnTargetNetworkInput) SetDryRun(v bool) *DisassociateClientVpnTargetNetworkInput { s.DryRun = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *CreateImageInput) SetInstanceId(v string) *CreateImageInput { - s.InstanceId = &v - return s -} - -// SetName sets the Name field's value. -func (s *CreateImageInput) SetName(v string) *CreateImageInput { - s.Name = &v - return s -} - -// SetNoReboot sets the NoReboot field's value. -func (s *CreateImageInput) SetNoReboot(v bool) *CreateImageInput { - s.NoReboot = &v - return s -} - -// Contains the output of CreateImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImageResult -type CreateImageOutput struct { +type DisassociateClientVpnTargetNetworkOutput struct { _ struct{} `type:"structure"` - // The ID of the new AMI. - ImageId *string `locationName:"imageId" type:"string"` + // The ID of the target network association. + AssociationId *string `locationName:"associationId" type:"string"` + + // The current state of the target network association. + Status *AssociationStatus `locationName:"status" type:"structure"` } // String returns the string representation -func (s CreateImageOutput) String() string { +func (s DisassociateClientVpnTargetNetworkOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateImageOutput) GoString() string { +func (s DisassociateClientVpnTargetNetworkOutput) GoString() string { return s.String() } -// SetImageId sets the ImageId field's value. -func (s *CreateImageOutput) SetImageId(v string) *CreateImageOutput { - s.ImageId = &v +// SetAssociationId sets the AssociationId field's value. +func (s *DisassociateClientVpnTargetNetworkOutput) SetAssociationId(v string) *DisassociateClientVpnTargetNetworkOutput { + s.AssociationId = &v return s } -// Contains the parameters for CreateInstanceExportTask. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTaskRequest -type CreateInstanceExportTaskInput struct { - _ struct{} `type:"structure"` - - // A description for the conversion task or the resource being exported. The - // maximum length is 255 bytes. - Description *string `locationName:"description" type:"string"` +// SetStatus sets the Status field's value. +func (s *DisassociateClientVpnTargetNetworkOutput) SetStatus(v *AssociationStatus) *DisassociateClientVpnTargetNetworkOutput { + s.Status = v + return s +} - // The format and location for an instance export task. - ExportToS3Task *ExportToS3TaskSpecification `locationName:"exportToS3" type:"structure"` +type DisassociateIamInstanceProfileInput struct { + _ struct{} `type:"structure"` - // The ID of the instance. + // The ID of the IAM instance profile association. // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` - - // The target virtualization environment. - TargetEnvironment *string `locationName:"targetEnvironment" type:"string" enum:"ExportEnvironment"` + // AssociationId is a required field + AssociationId *string `type:"string" required:"true"` } // String returns the string representation -func (s CreateInstanceExportTaskInput) String() string { +func (s DisassociateIamInstanceProfileInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateInstanceExportTaskInput) GoString() string { +func (s DisassociateIamInstanceProfileInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateInstanceExportTaskInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateInstanceExportTaskInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) +func (s *DisassociateIamInstanceProfileInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisassociateIamInstanceProfileInput"} + if s.AssociationId == nil { + invalidParams.Add(request.NewErrParamRequired("AssociationId")) } if invalidParams.Len() > 0 { @@ -20176,60 +63632,44 @@ func (s *CreateInstanceExportTaskInput) Validate() error { return nil } -// SetDescription sets the Description field's value. -func (s *CreateInstanceExportTaskInput) SetDescription(v string) *CreateInstanceExportTaskInput { - s.Description = &v - return s -} - -// SetExportToS3Task sets the ExportToS3Task field's value. -func (s *CreateInstanceExportTaskInput) SetExportToS3Task(v *ExportToS3TaskSpecification) *CreateInstanceExportTaskInput { - s.ExportToS3Task = v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *CreateInstanceExportTaskInput) SetInstanceId(v string) *CreateInstanceExportTaskInput { - s.InstanceId = &v - return s -} - -// SetTargetEnvironment sets the TargetEnvironment field's value. -func (s *CreateInstanceExportTaskInput) SetTargetEnvironment(v string) *CreateInstanceExportTaskInput { - s.TargetEnvironment = &v +// SetAssociationId sets the AssociationId field's value. +func (s *DisassociateIamInstanceProfileInput) SetAssociationId(v string) *DisassociateIamInstanceProfileInput { + s.AssociationId = &v return s } -// Contains the output for CreateInstanceExportTask. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTaskResult -type CreateInstanceExportTaskOutput struct { +type DisassociateIamInstanceProfileOutput struct { _ struct{} `type:"structure"` - // Information about the instance export task. - ExportTask *ExportTask `locationName:"exportTask" type:"structure"` + // Information about the IAM instance profile association. + IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` } // String returns the string representation -func (s CreateInstanceExportTaskOutput) String() string { +func (s DisassociateIamInstanceProfileOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateInstanceExportTaskOutput) GoString() string { +func (s DisassociateIamInstanceProfileOutput) GoString() string { return s.String() } -// SetExportTask sets the ExportTask field's value. -func (s *CreateInstanceExportTaskOutput) SetExportTask(v *ExportTask) *CreateInstanceExportTaskOutput { - s.ExportTask = v +// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. +func (s *DisassociateIamInstanceProfileOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *DisassociateIamInstanceProfileOutput { + s.IamInstanceProfileAssociation = v return s } -// Contains the parameters for CreateInternetGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGatewayRequest -type CreateInternetGatewayInput struct { +type DisassociateRouteTableInput struct { _ struct{} `type:"structure"` + // The association ID representing the current association between the route + // table and subnet. + // + // AssociationId is a required field + AssociationId *string `locationName:"associationId" type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, @@ -20238,80 +63678,78 @@ type CreateInternetGatewayInput struct { } // String returns the string representation -func (s CreateInternetGatewayInput) String() string { +func (s DisassociateRouteTableInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateInternetGatewayInput) GoString() string { +func (s DisassociateRouteTableInput) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *DisassociateRouteTableInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisassociateRouteTableInput"} + if s.AssociationId == nil { + invalidParams.Add(request.NewErrParamRequired("AssociationId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAssociationId sets the AssociationId field's value. +func (s *DisassociateRouteTableInput) SetAssociationId(v string) *DisassociateRouteTableInput { + s.AssociationId = &v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *CreateInternetGatewayInput) SetDryRun(v bool) *CreateInternetGatewayInput { +func (s *DisassociateRouteTableInput) SetDryRun(v bool) *DisassociateRouteTableInput { s.DryRun = &v return s } -// Contains the output of CreateInternetGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGatewayResult -type CreateInternetGatewayOutput struct { +type DisassociateRouteTableOutput struct { _ struct{} `type:"structure"` - - // Information about the Internet gateway. - InternetGateway *InternetGateway `locationName:"internetGateway" type:"structure"` } // String returns the string representation -func (s CreateInternetGatewayOutput) String() string { +func (s DisassociateRouteTableOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateInternetGatewayOutput) GoString() string { +func (s DisassociateRouteTableOutput) GoString() string { return s.String() } -// SetInternetGateway sets the InternetGateway field's value. -func (s *CreateInternetGatewayOutput) SetInternetGateway(v *InternetGateway) *CreateInternetGatewayOutput { - s.InternetGateway = v - return s -} - -// Contains the parameters for CreateKeyPair. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateKeyPairRequest -type CreateKeyPairInput struct { +type DisassociateSubnetCidrBlockInput struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // A unique name for the key pair. - // - // Constraints: Up to 255 ASCII characters + // The association ID for the CIDR block. // - // KeyName is a required field - KeyName *string `type:"string" required:"true"` + // AssociationId is a required field + AssociationId *string `locationName:"associationId" type:"string" required:"true"` } // String returns the string representation -func (s CreateKeyPairInput) String() string { +func (s DisassociateSubnetCidrBlockInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateKeyPairInput) GoString() string { +func (s DisassociateSubnetCidrBlockInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateKeyPairInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateKeyPairInput"} - if s.KeyName == nil { - invalidParams.Add(request.NewErrParamRequired("KeyName")) +func (s *DisassociateSubnetCidrBlockInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisassociateSubnetCidrBlockInput"} + if s.AssociationId == nil { + invalidParams.Add(request.NewErrParamRequired("AssociationId")) } if invalidParams.Len() > 0 { @@ -20320,103 +63758,82 @@ func (s *CreateKeyPairInput) Validate() error { return nil } -// SetDryRun sets the DryRun field's value. -func (s *CreateKeyPairInput) SetDryRun(v bool) *CreateKeyPairInput { - s.DryRun = &v - return s -} - -// SetKeyName sets the KeyName field's value. -func (s *CreateKeyPairInput) SetKeyName(v string) *CreateKeyPairInput { - s.KeyName = &v +// SetAssociationId sets the AssociationId field's value. +func (s *DisassociateSubnetCidrBlockInput) SetAssociationId(v string) *DisassociateSubnetCidrBlockInput { + s.AssociationId = &v return s } -// Describes a key pair. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/KeyPair -type CreateKeyPairOutput struct { +type DisassociateSubnetCidrBlockOutput struct { _ struct{} `type:"structure"` - // The SHA-1 digest of the DER encoded private key. - KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` - - // An unencrypted PEM encoded RSA private key. - KeyMaterial *string `locationName:"keyMaterial" type:"string"` + // Information about the IPv6 CIDR block association. + Ipv6CidrBlockAssociation *SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` + // The ID of the subnet. + SubnetId *string `locationName:"subnetId" type:"string"` } // String returns the string representation -func (s CreateKeyPairOutput) String() string { +func (s DisassociateSubnetCidrBlockOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateKeyPairOutput) GoString() string { +func (s DisassociateSubnetCidrBlockOutput) GoString() string { return s.String() } -// SetKeyFingerprint sets the KeyFingerprint field's value. -func (s *CreateKeyPairOutput) SetKeyFingerprint(v string) *CreateKeyPairOutput { - s.KeyFingerprint = &v - return s -} - -// SetKeyMaterial sets the KeyMaterial field's value. -func (s *CreateKeyPairOutput) SetKeyMaterial(v string) *CreateKeyPairOutput { - s.KeyMaterial = &v +// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. +func (s *DisassociateSubnetCidrBlockOutput) SetIpv6CidrBlockAssociation(v *SubnetIpv6CidrBlockAssociation) *DisassociateSubnetCidrBlockOutput { + s.Ipv6CidrBlockAssociation = v return s } -// SetKeyName sets the KeyName field's value. -func (s *CreateKeyPairOutput) SetKeyName(v string) *CreateKeyPairOutput { - s.KeyName = &v +// SetSubnetId sets the SubnetId field's value. +func (s *DisassociateSubnetCidrBlockOutput) SetSubnetId(v string) *DisassociateSubnetCidrBlockOutput { + s.SubnetId = &v return s } -// Contains the parameters for CreateNatGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGatewayRequest -type CreateNatGatewayInput struct { +type DisassociateTransitGatewayRouteTableInput struct { _ struct{} `type:"structure"` - // The allocation ID of an Elastic IP address to associate with the NAT gateway. - // If the Elastic IP address is associated with another resource, you must first - // disassociate it. - // - // AllocationId is a required field - AllocationId *string `type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + // The ID of the attachment. // - // Constraint: Maximum 64 ASCII characters. - ClientToken *string `type:"string"` + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` - // The subnet in which to create the NAT gateway. + // The ID of the transit gateway route table. // - // SubnetId is a required field - SubnetId *string `type:"string" required:"true"` + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s CreateNatGatewayInput) String() string { +func (s DisassociateTransitGatewayRouteTableInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateNatGatewayInput) GoString() string { +func (s DisassociateTransitGatewayRouteTableInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNatGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNatGatewayInput"} - if s.AllocationId == nil { - invalidParams.Add(request.NewErrParamRequired("AllocationId")) +func (s *DisassociateTransitGatewayRouteTableInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisassociateTransitGatewayRouteTableInput"} + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) } - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) } if invalidParams.Len() > 0 { @@ -20425,147 +63842,71 @@ func (s *CreateNatGatewayInput) Validate() error { return nil } -// SetAllocationId sets the AllocationId field's value. -func (s *CreateNatGatewayInput) SetAllocationId(v string) *CreateNatGatewayInput { - s.AllocationId = &v +// SetDryRun sets the DryRun field's value. +func (s *DisassociateTransitGatewayRouteTableInput) SetDryRun(v bool) *DisassociateTransitGatewayRouteTableInput { + s.DryRun = &v return s } -// SetClientToken sets the ClientToken field's value. -func (s *CreateNatGatewayInput) SetClientToken(v string) *CreateNatGatewayInput { - s.ClientToken = &v +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *DisassociateTransitGatewayRouteTableInput) SetTransitGatewayAttachmentId(v string) *DisassociateTransitGatewayRouteTableInput { + s.TransitGatewayAttachmentId = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *CreateNatGatewayInput) SetSubnetId(v string) *CreateNatGatewayInput { - s.SubnetId = &v +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *DisassociateTransitGatewayRouteTableInput) SetTransitGatewayRouteTableId(v string) *DisassociateTransitGatewayRouteTableInput { + s.TransitGatewayRouteTableId = &v return s } -// Contains the output of CreateNatGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGatewayResult -type CreateNatGatewayOutput struct { +type DisassociateTransitGatewayRouteTableOutput struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier to ensure the idempotency of the request. - // Only returned if a client token was provided in the request. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the NAT gateway. - NatGateway *NatGateway `locationName:"natGateway" type:"structure"` + // Information about the association. + Association *TransitGatewayAssociation `locationName:"association" type:"structure"` } // String returns the string representation -func (s CreateNatGatewayOutput) String() string { +func (s DisassociateTransitGatewayRouteTableOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateNatGatewayOutput) GoString() string { +func (s DisassociateTransitGatewayRouteTableOutput) GoString() string { return s.String() } -// SetClientToken sets the ClientToken field's value. -func (s *CreateNatGatewayOutput) SetClientToken(v string) *CreateNatGatewayOutput { - s.ClientToken = &v - return s -} - -// SetNatGateway sets the NatGateway field's value. -func (s *CreateNatGatewayOutput) SetNatGateway(v *NatGateway) *CreateNatGatewayOutput { - s.NatGateway = v +// SetAssociation sets the Association field's value. +func (s *DisassociateTransitGatewayRouteTableOutput) SetAssociation(v *TransitGatewayAssociation) *DisassociateTransitGatewayRouteTableOutput { + s.Association = v return s } -// Contains the parameters for CreateNetworkAclEntry. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntryRequest -type CreateNetworkAclEntryInput struct { +type DisassociateVpcCidrBlockInput struct { _ struct{} `type:"structure"` - // The IPv4 network range to allow or deny, in CIDR notation (for example 172.16.0.0/24). - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Indicates whether this is an egress rule (rule is applied to traffic leaving - // the subnet). - // - // Egress is a required field - Egress *bool `locationName:"egress" type:"boolean" required:"true"` - - // ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying the - // ICMP protocol, or protocol 58 (ICMPv6) with an IPv6 CIDR block. - IcmpTypeCode *IcmpTypeCode `locationName:"Icmp" type:"structure"` - - // The IPv6 network range to allow or deny, in CIDR notation (for example 2001:db8:1234:1a00::/64). - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` - - // The ID of the network ACL. - // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` - - // TCP or UDP protocols: The range of ports the rule applies to. - PortRange *PortRange `locationName:"portRange" type:"structure"` - - // The protocol. A value of -1 or all means all protocols. If you specify all, - // -1, or a protocol number other than tcp, udp, or icmp, traffic on all ports - // is allowed, regardless of any ports or ICMP types or codes you specify. If - // you specify protocol 58 (ICMPv6) and specify an IPv4 CIDR block, traffic - // for all ICMP types and codes allowed, regardless of any that you specify. - // If you specify protocol 58 (ICMPv6) and specify an IPv6 CIDR block, you must - // specify an ICMP type and code. - // - // Protocol is a required field - Protocol *string `locationName:"protocol" type:"string" required:"true"` - - // Indicates whether to allow or deny the traffic that matches the rule. - // - // RuleAction is a required field - RuleAction *string `locationName:"ruleAction" type:"string" required:"true" enum:"RuleAction"` - - // The rule number for the entry (for example, 100). ACL entries are processed - // in ascending order by rule number. - // - // Constraints: Positive integer from 1 to 32766. The range 32767 to 65535 is - // reserved for internal use. + // The association ID for the CIDR block. // - // RuleNumber is a required field - RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` + // AssociationId is a required field + AssociationId *string `locationName:"associationId" type:"string" required:"true"` } // String returns the string representation -func (s CreateNetworkAclEntryInput) String() string { +func (s DisassociateVpcCidrBlockInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateNetworkAclEntryInput) GoString() string { +func (s DisassociateVpcCidrBlockInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNetworkAclEntryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNetworkAclEntryInput"} - if s.Egress == nil { - invalidParams.Add(request.NewErrParamRequired("Egress")) - } - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } - if s.Protocol == nil { - invalidParams.Add(request.NewErrParamRequired("Protocol")) - } - if s.RuleAction == nil { - invalidParams.Add(request.NewErrParamRequired("RuleAction")) - } - if s.RuleNumber == nil { - invalidParams.Add(request.NewErrParamRequired("RuleNumber")) +func (s *DisassociateVpcCidrBlockInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DisassociateVpcCidrBlockInput"} + if s.AssociationId == nil { + invalidParams.Add(request.NewErrParamRequired("AssociationId")) } if invalidParams.Len() > 0 { @@ -20574,113 +63915,89 @@ func (s *CreateNetworkAclEntryInput) Validate() error { return nil } -// SetCidrBlock sets the CidrBlock field's value. -func (s *CreateNetworkAclEntryInput) SetCidrBlock(v string) *CreateNetworkAclEntryInput { - s.CidrBlock = &v +// SetAssociationId sets the AssociationId field's value. +func (s *DisassociateVpcCidrBlockInput) SetAssociationId(v string) *DisassociateVpcCidrBlockInput { + s.AssociationId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateNetworkAclEntryInput) SetDryRun(v bool) *CreateNetworkAclEntryInput { - s.DryRun = &v - return s -} +type DisassociateVpcCidrBlockOutput struct { + _ struct{} `type:"structure"` -// SetEgress sets the Egress field's value. -func (s *CreateNetworkAclEntryInput) SetEgress(v bool) *CreateNetworkAclEntryInput { - s.Egress = &v - return s -} + // Information about the IPv4 CIDR block association. + CidrBlockAssociation *VpcCidrBlockAssociation `locationName:"cidrBlockAssociation" type:"structure"` -// SetIcmpTypeCode sets the IcmpTypeCode field's value. -func (s *CreateNetworkAclEntryInput) SetIcmpTypeCode(v *IcmpTypeCode) *CreateNetworkAclEntryInput { - s.IcmpTypeCode = v - return s -} + // Information about the IPv6 CIDR block association. + Ipv6CidrBlockAssociation *VpcIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *CreateNetworkAclEntryInput) SetIpv6CidrBlock(v string) *CreateNetworkAclEntryInput { - s.Ipv6CidrBlock = &v - return s + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` } -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *CreateNetworkAclEntryInput) SetNetworkAclId(v string) *CreateNetworkAclEntryInput { - s.NetworkAclId = &v - return s +// String returns the string representation +func (s DisassociateVpcCidrBlockOutput) String() string { + return awsutil.Prettify(s) } -// SetPortRange sets the PortRange field's value. -func (s *CreateNetworkAclEntryInput) SetPortRange(v *PortRange) *CreateNetworkAclEntryInput { - s.PortRange = v - return s +// GoString returns the string representation +func (s DisassociateVpcCidrBlockOutput) GoString() string { + return s.String() } -// SetProtocol sets the Protocol field's value. -func (s *CreateNetworkAclEntryInput) SetProtocol(v string) *CreateNetworkAclEntryInput { - s.Protocol = &v +// SetCidrBlockAssociation sets the CidrBlockAssociation field's value. +func (s *DisassociateVpcCidrBlockOutput) SetCidrBlockAssociation(v *VpcCidrBlockAssociation) *DisassociateVpcCidrBlockOutput { + s.CidrBlockAssociation = v return s } -// SetRuleAction sets the RuleAction field's value. -func (s *CreateNetworkAclEntryInput) SetRuleAction(v string) *CreateNetworkAclEntryInput { - s.RuleAction = &v +// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. +func (s *DisassociateVpcCidrBlockOutput) SetIpv6CidrBlockAssociation(v *VpcIpv6CidrBlockAssociation) *DisassociateVpcCidrBlockOutput { + s.Ipv6CidrBlockAssociation = v return s } -// SetRuleNumber sets the RuleNumber field's value. -func (s *CreateNetworkAclEntryInput) SetRuleNumber(v int64) *CreateNetworkAclEntryInput { - s.RuleNumber = &v +// SetVpcId sets the VpcId field's value. +func (s *DisassociateVpcCidrBlockOutput) SetVpcId(v string) *DisassociateVpcCidrBlockOutput { + s.VpcId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntryOutput -type CreateNetworkAclEntryOutput struct { +// Describes a disk image. +type DiskImage struct { _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s CreateNetworkAclEntryOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s CreateNetworkAclEntryOutput) GoString() string { - return s.String() -} -// Contains the parameters for CreateNetworkAcl. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclRequest -type CreateNetworkAclInput struct { - _ struct{} `type:"structure"` + // A description of the disk image. + Description *string `type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // Information about the disk image. + Image *DiskImageDetail `type:"structure"` - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // Information about the volume. + Volume *VolumeDetail `type:"structure"` } // String returns the string representation -func (s CreateNetworkAclInput) String() string { +func (s DiskImage) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateNetworkAclInput) GoString() string { +func (s DiskImage) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNetworkAclInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNetworkAclInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) +func (s *DiskImage) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DiskImage"} + if s.Image != nil { + if err := s.Image.Validate(); err != nil { + invalidParams.AddNested("Image", err.(request.ErrInvalidParams)) + } + } + if s.Volume != nil { + if err := s.Volume.Validate(); err != nil { + invalidParams.AddNested("Volume", err.(request.ErrInvalidParams)) + } } if invalidParams.Len() > 0 { @@ -20689,123 +64006,130 @@ func (s *CreateNetworkAclInput) Validate() error { return nil } -// SetDryRun sets the DryRun field's value. -func (s *CreateNetworkAclInput) SetDryRun(v bool) *CreateNetworkAclInput { - s.DryRun = &v +// SetDescription sets the Description field's value. +func (s *DiskImage) SetDescription(v string) *DiskImage { + s.Description = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *CreateNetworkAclInput) SetVpcId(v string) *CreateNetworkAclInput { - s.VpcId = &v +// SetImage sets the Image field's value. +func (s *DiskImage) SetImage(v *DiskImageDetail) *DiskImage { + s.Image = v return s } -// Contains the output of CreateNetworkAcl. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclResult -type CreateNetworkAclOutput struct { +// SetVolume sets the Volume field's value. +func (s *DiskImage) SetVolume(v *VolumeDetail) *DiskImage { + s.Volume = v + return s +} + +// Describes a disk image. +type DiskImageDescription struct { _ struct{} `type:"structure"` - // Information about the network ACL. - NetworkAcl *NetworkAcl `locationName:"networkAcl" type:"structure"` + // The checksum computed for the disk image. + Checksum *string `locationName:"checksum" type:"string"` + + // The disk image format. + Format *string `locationName:"format" type:"string" enum:"DiskImageFormat"` + + // A presigned URL for the import manifest stored in Amazon S3. For information + // about creating a presigned URL for an Amazon S3 object, read the "Query String + // Request Authentication Alternative" section of the Authenticating REST Requests + // (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) + // topic in the Amazon Simple Storage Service Developer Guide. + // + // For information about the import manifest referenced by this API action, + // see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). + ImportManifestUrl *string `locationName:"importManifestUrl" type:"string"` + + // The size of the disk image, in GiB. + Size *int64 `locationName:"size" type:"long"` } // String returns the string representation -func (s CreateNetworkAclOutput) String() string { +func (s DiskImageDescription) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateNetworkAclOutput) GoString() string { +func (s DiskImageDescription) GoString() string { return s.String() } -// SetNetworkAcl sets the NetworkAcl field's value. -func (s *CreateNetworkAclOutput) SetNetworkAcl(v *NetworkAcl) *CreateNetworkAclOutput { - s.NetworkAcl = v +// SetChecksum sets the Checksum field's value. +func (s *DiskImageDescription) SetChecksum(v string) *DiskImageDescription { + s.Checksum = &v return s } -// Contains the parameters for CreateNetworkInterface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfaceRequest -type CreateNetworkInterfaceInput struct { - _ struct{} `type:"structure"` - - // A description for the network interface. - Description *string `locationName:"description" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IDs of one or more security groups. - Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` +// SetFormat sets the Format field's value. +func (s *DiskImageDescription) SetFormat(v string) *DiskImageDescription { + s.Format = &v + return s +} - // The number of IPv6 addresses to assign to a network interface. Amazon EC2 - // automatically selects the IPv6 addresses from the subnet range. You can't - // use this option if specifying specific IPv6 addresses. If your subnet has - // the AssignIpv6AddressOnCreation attribute set to true, you can specify 0 - // to override this setting. - Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` +// SetImportManifestUrl sets the ImportManifestUrl field's value. +func (s *DiskImageDescription) SetImportManifestUrl(v string) *DiskImageDescription { + s.ImportManifestUrl = &v + return s +} - // One or more specific IPv6 addresses from the IPv6 CIDR block range of your - // subnet. You can't use this option if you're specifying a number of IPv6 addresses. - Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6Addresses" locationNameList:"item" type:"list"` +// SetSize sets the Size field's value. +func (s *DiskImageDescription) SetSize(v int64) *DiskImageDescription { + s.Size = &v + return s +} - // The primary private IPv4 address of the network interface. If you don't specify - // an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR - // range. If you specify an IP address, you cannot indicate any IP addresses - // specified in privateIpAddresses as primary (only one IP address can be designated - // as primary). - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` +// Describes a disk image. +type DiskImageDetail struct { + _ struct{} `type:"structure"` - // One or more private IPv4 addresses. - PrivateIpAddresses []*PrivateIpAddressSpecification `locationName:"privateIpAddresses" locationNameList:"item" type:"list"` + // The size of the disk image, in GiB. + // + // Bytes is a required field + Bytes *int64 `locationName:"bytes" type:"long" required:"true"` - // The number of secondary private IPv4 addresses to assign to a network interface. - // When you specify a number of secondary IPv4 addresses, Amazon EC2 selects - // these IP addresses within the subnet's IPv4 CIDR range. You can't specify - // this option and specify more than one private IP address using privateIpAddresses. + // The disk image format. // - // The number of IP addresses you can assign to a network interface varies by - // instance type. For more information, see IP Addresses Per ENI Per Instance - // Type (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI) - // in the Amazon Virtual Private Cloud User Guide. - SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` + // Format is a required field + Format *string `locationName:"format" type:"string" required:"true" enum:"DiskImageFormat"` - // The ID of the subnet to associate with the network interface. + // A presigned URL for the import manifest stored in Amazon S3 and presented + // here as an Amazon S3 presigned URL. For information about creating a presigned + // URL for an Amazon S3 object, read the "Query String Request Authentication + // Alternative" section of the Authenticating REST Requests (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) + // topic in the Amazon Simple Storage Service Developer Guide. // - // SubnetId is a required field - SubnetId *string `locationName:"subnetId" type:"string" required:"true"` + // For information about the import manifest referenced by this API action, + // see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). + // + // ImportManifestUrl is a required field + ImportManifestUrl *string `locationName:"importManifestUrl" type:"string" required:"true"` } // String returns the string representation -func (s CreateNetworkInterfaceInput) String() string { +func (s DiskImageDetail) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateNetworkInterfaceInput) GoString() string { +func (s DiskImageDetail) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateNetworkInterfaceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateNetworkInterfaceInput"} - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) +func (s *DiskImageDetail) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DiskImageDetail"} + if s.Bytes == nil { + invalidParams.Add(request.NewErrParamRequired("Bytes")) } - if s.PrivateIpAddresses != nil { - for i, v := range s.PrivateIpAddresses { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PrivateIpAddresses", i), err.(request.ErrInvalidParams)) - } - } + if s.Format == nil { + invalidParams.Add(request.NewErrParamRequired("Format")) + } + if s.ImportManifestUrl == nil { + invalidParams.Add(request.NewErrParamRequired("ImportManifestUrl")) } if invalidParams.Len() > 0 { @@ -20814,719 +64138,679 @@ func (s *CreateNetworkInterfaceInput) Validate() error { return nil } -// SetDescription sets the Description field's value. -func (s *CreateNetworkInterfaceInput) SetDescription(v string) *CreateNetworkInterfaceInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateNetworkInterfaceInput) SetDryRun(v bool) *CreateNetworkInterfaceInput { - s.DryRun = &v +// SetBytes sets the Bytes field's value. +func (s *DiskImageDetail) SetBytes(v int64) *DiskImageDetail { + s.Bytes = &v return s } -// SetGroups sets the Groups field's value. -func (s *CreateNetworkInterfaceInput) SetGroups(v []*string) *CreateNetworkInterfaceInput { - s.Groups = v +// SetFormat sets the Format field's value. +func (s *DiskImageDetail) SetFormat(v string) *DiskImageDetail { + s.Format = &v return s } -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *CreateNetworkInterfaceInput) SetIpv6AddressCount(v int64) *CreateNetworkInterfaceInput { - s.Ipv6AddressCount = &v +// SetImportManifestUrl sets the ImportManifestUrl field's value. +func (s *DiskImageDetail) SetImportManifestUrl(v string) *DiskImageDetail { + s.ImportManifestUrl = &v return s } -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *CreateNetworkInterfaceInput) SetIpv6Addresses(v []*InstanceIpv6Address) *CreateNetworkInterfaceInput { - s.Ipv6Addresses = v - return s +// Describes a disk image volume. +type DiskImageVolumeDescription struct { + _ struct{} `type:"structure"` + + // The volume identifier. + Id *string `locationName:"id" type:"string"` + + // The size of the volume, in GiB. + Size *int64 `locationName:"size" type:"long"` } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *CreateNetworkInterfaceInput) SetPrivateIpAddress(v string) *CreateNetworkInterfaceInput { - s.PrivateIpAddress = &v - return s +// String returns the string representation +func (s DiskImageVolumeDescription) String() string { + return awsutil.Prettify(s) } -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *CreateNetworkInterfaceInput) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *CreateNetworkInterfaceInput { - s.PrivateIpAddresses = v - return s +// GoString returns the string representation +func (s DiskImageVolumeDescription) GoString() string { + return s.String() } -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *CreateNetworkInterfaceInput) SetSecondaryPrivateIpAddressCount(v int64) *CreateNetworkInterfaceInput { - s.SecondaryPrivateIpAddressCount = &v +// SetId sets the Id field's value. +func (s *DiskImageVolumeDescription) SetId(v string) *DiskImageVolumeDescription { + s.Id = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *CreateNetworkInterfaceInput) SetSubnetId(v string) *CreateNetworkInterfaceInput { - s.SubnetId = &v +// SetSize sets the Size field's value. +func (s *DiskImageVolumeDescription) SetSize(v int64) *DiskImageVolumeDescription { + s.Size = &v return s } -// Contains the output of CreateNetworkInterface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfaceResult -type CreateNetworkInterfaceOutput struct { +// Describes the disk. +type DiskInfo struct { _ struct{} `type:"structure"` - // Information about the network interface. - NetworkInterface *NetworkInterface `locationName:"networkInterface" type:"structure"` + // The number of disks with this configuration. + Count *int64 `locationName:"count" type:"integer"` + + // The size of the disk in GiB. + SizeInGB *int64 `locationName:"sizeInGB" type:"long"` + + // The type of disk. + Type *string `locationName:"type" type:"string" enum:"DiskType"` } // String returns the string representation -func (s CreateNetworkInterfaceOutput) String() string { +func (s DiskInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateNetworkInterfaceOutput) GoString() string { +func (s DiskInfo) GoString() string { return s.String() } -// SetNetworkInterface sets the NetworkInterface field's value. -func (s *CreateNetworkInterfaceOutput) SetNetworkInterface(v *NetworkInterface) *CreateNetworkInterfaceOutput { - s.NetworkInterface = v +// SetCount sets the Count field's value. +func (s *DiskInfo) SetCount(v int64) *DiskInfo { + s.Count = &v return s } -// Contains the parameters for CreatePlacementGroup. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroupRequest -type CreatePlacementGroupInput struct { - _ struct{} `type:"structure"` +// SetSizeInGB sets the SizeInGB field's value. +func (s *DiskInfo) SetSizeInGB(v int64) *DiskInfo { + s.SizeInGB = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetType sets the Type field's value. +func (s *DiskInfo) SetType(v string) *DiskInfo { + s.Type = &v + return s +} - // A name for the placement group. - // - // Constraints: Up to 255 ASCII characters - // - // GroupName is a required field - GroupName *string `locationName:"groupName" type:"string" required:"true"` +// Describes a DNS entry. +type DnsEntry struct { + _ struct{} `type:"structure"` - // The placement strategy. - // - // Strategy is a required field - Strategy *string `locationName:"strategy" type:"string" required:"true" enum:"PlacementStrategy"` + // The DNS name. + DnsName *string `locationName:"dnsName" type:"string"` + + // The ID of the private hosted zone. + HostedZoneId *string `locationName:"hostedZoneId" type:"string"` } // String returns the string representation -func (s CreatePlacementGroupInput) String() string { +func (s DnsEntry) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreatePlacementGroupInput) GoString() string { +func (s DnsEntry) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreatePlacementGroupInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreatePlacementGroupInput"} - if s.GroupName == nil { - invalidParams.Add(request.NewErrParamRequired("GroupName")) - } - if s.Strategy == nil { - invalidParams.Add(request.NewErrParamRequired("Strategy")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CreatePlacementGroupInput) SetDryRun(v bool) *CreatePlacementGroupInput { - s.DryRun = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *CreatePlacementGroupInput) SetGroupName(v string) *CreatePlacementGroupInput { - s.GroupName = &v +// SetDnsName sets the DnsName field's value. +func (s *DnsEntry) SetDnsName(v string) *DnsEntry { + s.DnsName = &v return s } -// SetStrategy sets the Strategy field's value. -func (s *CreatePlacementGroupInput) SetStrategy(v string) *CreatePlacementGroupInput { - s.Strategy = &v +// SetHostedZoneId sets the HostedZoneId field's value. +func (s *DnsEntry) SetHostedZoneId(v string) *DnsEntry { + s.HostedZoneId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroupOutput -type CreatePlacementGroupOutput struct { +// Information about the DNS server to be used. +type DnsServersOptionsModifyStructure struct { _ struct{} `type:"structure"` + + // The IPv4 address range, in CIDR notation, of the DNS servers to be used. + // You can specify up to two DNS servers. Ensure that the DNS servers can be + // reached by the clients. The specified values overwrite the existing values. + CustomDnsServers []*string `locationNameList:"item" type:"list"` + + // Indicates whether DNS servers should be used. Specify False to delete the + // existing DNS servers. + Enabled *bool `type:"boolean"` } // String returns the string representation -func (s CreatePlacementGroupOutput) String() string { +func (s DnsServersOptionsModifyStructure) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreatePlacementGroupOutput) GoString() string { +func (s DnsServersOptionsModifyStructure) GoString() string { return s.String() } -// Contains the parameters for CreateReservedInstancesListing. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListingRequest -type CreateReservedInstancesListingInput struct { +// SetCustomDnsServers sets the CustomDnsServers field's value. +func (s *DnsServersOptionsModifyStructure) SetCustomDnsServers(v []*string) *DnsServersOptionsModifyStructure { + s.CustomDnsServers = v + return s +} + +// SetEnabled sets the Enabled field's value. +func (s *DnsServersOptionsModifyStructure) SetEnabled(v bool) *DnsServersOptionsModifyStructure { + s.Enabled = &v + return s +} + +// Describes a block device for an EBS volume. +type EbsBlockDevice struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier you provide to ensure idempotency of your - // listings. This helps avoid duplicate listings. For more information, see - // Ensuring Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + // Indicates whether the EBS volume is deleted on instance termination. For + // more information, see Preserving Amazon EBS Volumes on Instance Termination + // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination) + // in the Amazon Elastic Compute Cloud User Guide. + DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` + + // Indicates whether the encryption state of an EBS volume is changed while + // being restored from a backing snapshot. The effect of setting the encryption + // state to true depends on the volume origin (new or from a snapshot), starting + // encryption state, ownership, and whether encryption by default is enabled. + // For more information, see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-parameters) + // in the Amazon Elastic Compute Cloud User Guide. // - // ClientToken is a required field - ClientToken *string `locationName:"clientToken" type:"string" required:"true"` + // In no case can you remove encryption from an encrypted volume. + // + // Encrypted volumes can only be attached to instances that support Amazon EBS + // encryption. For more information, see Supported Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances). + Encrypted *bool `locationName:"encrypted" type:"boolean"` - // The number of instances that are a part of a Reserved Instance account to - // be listed in the Reserved Instance Marketplace. This number should be less - // than or equal to the instance count associated with the Reserved Instance - // ID specified in this call. + // The number of I/O operations per second (IOPS) that the volume supports. + // For io1 volumes, this represents the number of IOPS that are provisioned + // for the volume. For gp2 volumes, this represents the baseline performance + // of the volume and the rate at which the volume accumulates I/O credits for + // bursting. For more information, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) + // in the Amazon Elastic Compute Cloud User Guide. // - // InstanceCount is a required field - InstanceCount *int64 `locationName:"instanceCount" type:"integer" required:"true"` + // Constraints: Range is 100-16,000 IOPS for gp2 volumes and 100 to 64,000IOPS + // for io1 volumes in most Regions. Maximum io1 IOPS of 64,000 is guaranteed + // only on Nitro-based instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). + // Other instance families guarantee performance up to 32,000 IOPS. For more + // information, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) + // in the Amazon Elastic Compute Cloud User Guide. + // + // Condition: This parameter is required for requests to create io1 volumes; + // it is not used in requests to create gp2, st1, sc1, or standard volumes. + Iops *int64 `locationName:"iops" type:"integer"` - // A list specifying the price of the Standard Reserved Instance for each month - // remaining in the Reserved Instance term. + // Identifier (key ID, key alias, ID ARN, or alias ARN) for a customer managed + // CMK under which the EBS volume is encrypted. // - // PriceSchedules is a required field - PriceSchedules []*PriceScheduleSpecification `locationName:"priceSchedules" locationNameList:"item" type:"list" required:"true"` + // This parameter is only supported on BlockDeviceMapping objects called by + // RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html), + // RequestSpotFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html), + // and RequestSpotInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html). + KmsKeyId *string `type:"string"` - // The ID of the active Standard Reserved Instance. + // The ID of the snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` + + // The size of the volume, in GiB. // - // ReservedInstancesId is a required field - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string" required:"true"` + // Default: If you're creating the volume from a snapshot and don't specify + // a volume size, the default is the snapshot size. + // + // Constraints: 1-16384 for General Purpose SSD (gp2), 4-16384 for Provisioned + // IOPS SSD (io1), 500-16384 for Throughput Optimized HDD (st1), 500-16384 for + // Cold HDD (sc1), and 1-1024 for Magnetic (standard) volumes. If you specify + // a snapshot, the volume size must be equal to or larger than the snapshot + // size. + VolumeSize *int64 `locationName:"volumeSize" type:"integer"` + + // The volume type. If you set the type to io1, you must also specify the IOPS + // that the volume supports. + // + // Default: gp2 + VolumeType *string `locationName:"volumeType" type:"string" enum:"VolumeType"` } // String returns the string representation -func (s CreateReservedInstancesListingInput) String() string { +func (s EbsBlockDevice) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateReservedInstancesListingInput) GoString() string { +func (s EbsBlockDevice) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateReservedInstancesListingInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateReservedInstancesListingInput"} - if s.ClientToken == nil { - invalidParams.Add(request.NewErrParamRequired("ClientToken")) - } - if s.InstanceCount == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceCount")) - } - if s.PriceSchedules == nil { - invalidParams.Add(request.NewErrParamRequired("PriceSchedules")) - } - if s.ReservedInstancesId == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesId")) - } +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *EbsBlockDevice) SetDeleteOnTermination(v bool) *EbsBlockDevice { + s.DeleteOnTermination = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetEncrypted sets the Encrypted field's value. +func (s *EbsBlockDevice) SetEncrypted(v bool) *EbsBlockDevice { + s.Encrypted = &v + return s } -// SetClientToken sets the ClientToken field's value. -func (s *CreateReservedInstancesListingInput) SetClientToken(v string) *CreateReservedInstancesListingInput { - s.ClientToken = &v +// SetIops sets the Iops field's value. +func (s *EbsBlockDevice) SetIops(v int64) *EbsBlockDevice { + s.Iops = &v return s } -// SetInstanceCount sets the InstanceCount field's value. -func (s *CreateReservedInstancesListingInput) SetInstanceCount(v int64) *CreateReservedInstancesListingInput { - s.InstanceCount = &v +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *EbsBlockDevice) SetKmsKeyId(v string) *EbsBlockDevice { + s.KmsKeyId = &v return s } -// SetPriceSchedules sets the PriceSchedules field's value. -func (s *CreateReservedInstancesListingInput) SetPriceSchedules(v []*PriceScheduleSpecification) *CreateReservedInstancesListingInput { - s.PriceSchedules = v +// SetSnapshotId sets the SnapshotId field's value. +func (s *EbsBlockDevice) SetSnapshotId(v string) *EbsBlockDevice { + s.SnapshotId = &v return s } -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *CreateReservedInstancesListingInput) SetReservedInstancesId(v string) *CreateReservedInstancesListingInput { - s.ReservedInstancesId = &v +// SetVolumeSize sets the VolumeSize field's value. +func (s *EbsBlockDevice) SetVolumeSize(v int64) *EbsBlockDevice { + s.VolumeSize = &v return s } -// Contains the output of CreateReservedInstancesListing. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListingResult -type CreateReservedInstancesListingOutput struct { +// SetVolumeType sets the VolumeType field's value. +func (s *EbsBlockDevice) SetVolumeType(v string) *EbsBlockDevice { + s.VolumeType = &v + return s +} + +// Describes the Amazon EBS features supported by the instance type. +type EbsInfo struct { _ struct{} `type:"structure"` - // Information about the Standard Reserved Instance listing. - ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` + // Indicates that the instance type is Amazon EBS-optimized. For more information, + // see Amazon EBS-Optimized Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html) + // in Amazon EC2 User Guide for Linux Instances. + EbsOptimizedSupport *string `locationName:"ebsOptimizedSupport" type:"string" enum:"EbsOptimizedSupport"` + + // Indicates whether Amazon EBS encryption is supported. + EncryptionSupport *string `locationName:"encryptionSupport" type:"string" enum:"EbsEncryptionSupport"` } // String returns the string representation -func (s CreateReservedInstancesListingOutput) String() string { +func (s EbsInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateReservedInstancesListingOutput) GoString() string { +func (s EbsInfo) GoString() string { return s.String() } -// SetReservedInstancesListings sets the ReservedInstancesListings field's value. -func (s *CreateReservedInstancesListingOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *CreateReservedInstancesListingOutput { - s.ReservedInstancesListings = v +// SetEbsOptimizedSupport sets the EbsOptimizedSupport field's value. +func (s *EbsInfo) SetEbsOptimizedSupport(v string) *EbsInfo { + s.EbsOptimizedSupport = &v return s } -// Contains the parameters for CreateRoute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteRequest -type CreateRouteInput struct { - _ struct{} `type:"structure"` - - // The IPv4 CIDR address block used for the destination match. Routing decisions - // are based on the most specific match. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The IPv6 CIDR block used for the destination match. Routing decisions are - // based on the most specific match. - DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // [IPv6 traffic only] The ID of an egress-only Internet gateway. - EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` - - // The ID of an Internet gateway or virtual private gateway attached to your - // VPC. - GatewayId *string `locationName:"gatewayId" type:"string"` +// SetEncryptionSupport sets the EncryptionSupport field's value. +func (s *EbsInfo) SetEncryptionSupport(v string) *EbsInfo { + s.EncryptionSupport = &v + return s +} - // The ID of a NAT instance in your VPC. The operation fails if you specify - // an instance ID unless exactly one network interface is attached. - InstanceId *string `locationName:"instanceId" type:"string"` +// Describes a parameter used to set up an EBS volume in a block device mapping. +type EbsInstanceBlockDevice struct { + _ struct{} `type:"structure"` - // [IPv4 traffic only] The ID of a NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` + // The time stamp when the attachment initiated. + AttachTime *time.Time `locationName:"attachTime" type:"timestamp"` - // The ID of a network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + // Indicates whether the volume is deleted on instance termination. + DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - // The ID of the route table for the route. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` + // The attachment state. + Status *string `locationName:"status" type:"string" enum:"AttachmentStatus"` - // The ID of a VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` + // The ID of the EBS volume. + VolumeId *string `locationName:"volumeId" type:"string"` } // String returns the string representation -func (s CreateRouteInput) String() string { +func (s EbsInstanceBlockDevice) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateRouteInput) GoString() string { +func (s EbsInstanceBlockDevice) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateRouteInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *CreateRouteInput) SetDestinationCidrBlock(v string) *CreateRouteInput { - s.DestinationCidrBlock = &v +// SetAttachTime sets the AttachTime field's value. +func (s *EbsInstanceBlockDevice) SetAttachTime(v time.Time) *EbsInstanceBlockDevice { + s.AttachTime = &v return s } -// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. -func (s *CreateRouteInput) SetDestinationIpv6CidrBlock(v string) *CreateRouteInput { - s.DestinationIpv6CidrBlock = &v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *EbsInstanceBlockDevice) SetDeleteOnTermination(v bool) *EbsInstanceBlockDevice { + s.DeleteOnTermination = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateRouteInput) SetDryRun(v bool) *CreateRouteInput { - s.DryRun = &v +// SetStatus sets the Status field's value. +func (s *EbsInstanceBlockDevice) SetStatus(v string) *EbsInstanceBlockDevice { + s.Status = &v return s } -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *CreateRouteInput) SetEgressOnlyInternetGatewayId(v string) *CreateRouteInput { - s.EgressOnlyInternetGatewayId = &v +// SetVolumeId sets the VolumeId field's value. +func (s *EbsInstanceBlockDevice) SetVolumeId(v string) *EbsInstanceBlockDevice { + s.VolumeId = &v return s } -// SetGatewayId sets the GatewayId field's value. -func (s *CreateRouteInput) SetGatewayId(v string) *CreateRouteInput { - s.GatewayId = &v - return s -} +// Describes information used to set up an EBS volume specified in a block device +// mapping. +type EbsInstanceBlockDeviceSpecification struct { + _ struct{} `type:"structure"` -// SetInstanceId sets the InstanceId field's value. -func (s *CreateRouteInput) SetInstanceId(v string) *CreateRouteInput { - s.InstanceId = &v - return s + // Indicates whether the volume is deleted on instance termination. + DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` + + // The ID of the EBS volume. + VolumeId *string `locationName:"volumeId" type:"string"` } -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *CreateRouteInput) SetNatGatewayId(v string) *CreateRouteInput { - s.NatGatewayId = &v - return s +// String returns the string representation +func (s EbsInstanceBlockDeviceSpecification) String() string { + return awsutil.Prettify(s) } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *CreateRouteInput) SetNetworkInterfaceId(v string) *CreateRouteInput { - s.NetworkInterfaceId = &v - return s +// GoString returns the string representation +func (s EbsInstanceBlockDeviceSpecification) GoString() string { + return s.String() } -// SetRouteTableId sets the RouteTableId field's value. -func (s *CreateRouteInput) SetRouteTableId(v string) *CreateRouteInput { - s.RouteTableId = &v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *EbsInstanceBlockDeviceSpecification) SetDeleteOnTermination(v bool) *EbsInstanceBlockDeviceSpecification { + s.DeleteOnTermination = &v return s } -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *CreateRouteInput) SetVpcPeeringConnectionId(v string) *CreateRouteInput { - s.VpcPeeringConnectionId = &v +// SetVolumeId sets the VolumeId field's value. +func (s *EbsInstanceBlockDeviceSpecification) SetVolumeId(v string) *EbsInstanceBlockDeviceSpecification { + s.VolumeId = &v return s } -// Contains the output of CreateRoute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteResult -type CreateRouteOutput struct { +// Describes an egress-only internet gateway. +type EgressOnlyInternetGateway struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` + // Information about the attachment of the egress-only internet gateway. + Attachments []*InternetGatewayAttachment `locationName:"attachmentSet" locationNameList:"item" type:"list"` + + // The ID of the egress-only internet gateway. + EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` } // String returns the string representation -func (s CreateRouteOutput) String() string { +func (s EgressOnlyInternetGateway) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateRouteOutput) GoString() string { +func (s EgressOnlyInternetGateway) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *CreateRouteOutput) SetReturn(v bool) *CreateRouteOutput { - s.Return = &v +// SetAttachments sets the Attachments field's value. +func (s *EgressOnlyInternetGateway) SetAttachments(v []*InternetGatewayAttachment) *EgressOnlyInternetGateway { + s.Attachments = v return s } -// Contains the parameters for CreateRouteTable. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTableRequest -type CreateRouteTableInput struct { +// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. +func (s *EgressOnlyInternetGateway) SetEgressOnlyInternetGatewayId(v string) *EgressOnlyInternetGateway { + s.EgressOnlyInternetGatewayId = &v + return s +} + +// Describes the association between an instance and an Elastic Graphics accelerator. +type ElasticGpuAssociation struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ID of the association. + ElasticGpuAssociationId *string `locationName:"elasticGpuAssociationId" type:"string"` - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // The state of the association between the instance and the Elastic Graphics + // accelerator. + ElasticGpuAssociationState *string `locationName:"elasticGpuAssociationState" type:"string"` + + // The time the Elastic Graphics accelerator was associated with the instance. + ElasticGpuAssociationTime *string `locationName:"elasticGpuAssociationTime" type:"string"` + + // The ID of the Elastic Graphics accelerator. + ElasticGpuId *string `locationName:"elasticGpuId" type:"string"` } // String returns the string representation -func (s CreateRouteTableInput) String() string { +func (s ElasticGpuAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateRouteTableInput) GoString() string { +func (s ElasticGpuAssociation) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateRouteTableInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } +// SetElasticGpuAssociationId sets the ElasticGpuAssociationId field's value. +func (s *ElasticGpuAssociation) SetElasticGpuAssociationId(v string) *ElasticGpuAssociation { + s.ElasticGpuAssociationId = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetElasticGpuAssociationState sets the ElasticGpuAssociationState field's value. +func (s *ElasticGpuAssociation) SetElasticGpuAssociationState(v string) *ElasticGpuAssociation { + s.ElasticGpuAssociationState = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateRouteTableInput) SetDryRun(v bool) *CreateRouteTableInput { - s.DryRun = &v +// SetElasticGpuAssociationTime sets the ElasticGpuAssociationTime field's value. +func (s *ElasticGpuAssociation) SetElasticGpuAssociationTime(v string) *ElasticGpuAssociation { + s.ElasticGpuAssociationTime = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *CreateRouteTableInput) SetVpcId(v string) *CreateRouteTableInput { - s.VpcId = &v +// SetElasticGpuId sets the ElasticGpuId field's value. +func (s *ElasticGpuAssociation) SetElasticGpuId(v string) *ElasticGpuAssociation { + s.ElasticGpuId = &v return s } -// Contains the output of CreateRouteTable. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTableResult -type CreateRouteTableOutput struct { +// Describes the status of an Elastic Graphics accelerator. +type ElasticGpuHealth struct { _ struct{} `type:"structure"` - // Information about the route table. - RouteTable *RouteTable `locationName:"routeTable" type:"structure"` + // The health status. + Status *string `locationName:"status" type:"string" enum:"ElasticGpuStatus"` } // String returns the string representation -func (s CreateRouteTableOutput) String() string { +func (s ElasticGpuHealth) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateRouteTableOutput) GoString() string { +func (s ElasticGpuHealth) GoString() string { return s.String() } -// SetRouteTable sets the RouteTable field's value. -func (s *CreateRouteTableOutput) SetRouteTable(v *RouteTable) *CreateRouteTableOutput { - s.RouteTable = v +// SetStatus sets the Status field's value. +func (s *ElasticGpuHealth) SetStatus(v string) *ElasticGpuHealth { + s.Status = &v return s } -// Contains the parameters for CreateSecurityGroup. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroupRequest -type CreateSecurityGroupInput struct { +// A specification for an Elastic Graphics accelerator. +type ElasticGpuSpecification struct { _ struct{} `type:"structure"` - // A description for the security group. This is informational only. - // - // Constraints: Up to 255 characters in length - // - // Constraints for EC2-Classic: ASCII characters - // - // Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* - // - // Description is a required field - Description *string `locationName:"GroupDescription" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The name of the security group. - // - // Constraints: Up to 255 characters in length + // The type of Elastic Graphics accelerator. // - // Constraints for EC2-Classic: ASCII characters - // - // Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$* - // - // GroupName is a required field - GroupName *string `type:"string" required:"true"` - - // [EC2-VPC] The ID of the VPC. Required for EC2-VPC. - VpcId *string `type:"string"` + // Type is a required field + Type *string `type:"string" required:"true"` } // String returns the string representation -func (s CreateSecurityGroupInput) String() string { +func (s ElasticGpuSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateSecurityGroupInput) GoString() string { +func (s ElasticGpuSpecification) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSecurityGroupInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSecurityGroupInput"} - if s.Description == nil { - invalidParams.Add(request.NewErrParamRequired("Description")) - } - if s.GroupName == nil { - invalidParams.Add(request.NewErrParamRequired("GroupName")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDescription sets the Description field's value. -func (s *CreateSecurityGroupInput) SetDescription(v string) *CreateSecurityGroupInput { - s.Description = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateSecurityGroupInput) SetDryRun(v bool) *CreateSecurityGroupInput { - s.DryRun = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ElasticGpuSpecification) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ElasticGpuSpecification"} + if s.Type == nil { + invalidParams.Add(request.NewErrParamRequired("Type")) + } -// SetGroupName sets the GroupName field's value. -func (s *CreateSecurityGroupInput) SetGroupName(v string) *CreateSecurityGroupInput { - s.GroupName = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetVpcId sets the VpcId field's value. -func (s *CreateSecurityGroupInput) SetVpcId(v string) *CreateSecurityGroupInput { - s.VpcId = &v +// SetType sets the Type field's value. +func (s *ElasticGpuSpecification) SetType(v string) *ElasticGpuSpecification { + s.Type = &v return s } -// Contains the output of CreateSecurityGroup. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroupResult -type CreateSecurityGroupOutput struct { +// Describes an elastic GPU. +type ElasticGpuSpecificationResponse struct { _ struct{} `type:"structure"` - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` + // The elastic GPU type. + Type *string `locationName:"type" type:"string"` } // String returns the string representation -func (s CreateSecurityGroupOutput) String() string { +func (s ElasticGpuSpecificationResponse) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateSecurityGroupOutput) GoString() string { +func (s ElasticGpuSpecificationResponse) GoString() string { return s.String() } -// SetGroupId sets the GroupId field's value. -func (s *CreateSecurityGroupOutput) SetGroupId(v string) *CreateSecurityGroupOutput { - s.GroupId = &v +// SetType sets the Type field's value. +func (s *ElasticGpuSpecificationResponse) SetType(v string) *ElasticGpuSpecificationResponse { + s.Type = &v return s } -// Contains the parameters for CreateSnapshot. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshotRequest -type CreateSnapshotInput struct { +// Describes an Elastic Graphics accelerator. +type ElasticGpus struct { _ struct{} `type:"structure"` - // A description for the snapshot. - Description *string `type:"string"` + // The Availability Zone in the which the Elastic Graphics accelerator resides. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The status of the Elastic Graphics accelerator. + ElasticGpuHealth *ElasticGpuHealth `locationName:"elasticGpuHealth" type:"structure"` - // The ID of the EBS volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` + // The ID of the Elastic Graphics accelerator. + ElasticGpuId *string `locationName:"elasticGpuId" type:"string"` + + // The state of the Elastic Graphics accelerator. + ElasticGpuState *string `locationName:"elasticGpuState" type:"string" enum:"ElasticGpuState"` + + // The type of Elastic Graphics accelerator. + ElasticGpuType *string `locationName:"elasticGpuType" type:"string"` + + // The ID of the instance to which the Elastic Graphics accelerator is attached. + InstanceId *string `locationName:"instanceId" type:"string"` } // String returns the string representation -func (s CreateSnapshotInput) String() string { +func (s ElasticGpus) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateSnapshotInput) GoString() string { +func (s ElasticGpus) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSnapshotInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSnapshotInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ElasticGpus) SetAvailabilityZone(v string) *ElasticGpus { + s.AvailabilityZone = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetElasticGpuHealth sets the ElasticGpuHealth field's value. +func (s *ElasticGpus) SetElasticGpuHealth(v *ElasticGpuHealth) *ElasticGpus { + s.ElasticGpuHealth = v + return s } -// SetDescription sets the Description field's value. -func (s *CreateSnapshotInput) SetDescription(v string) *CreateSnapshotInput { - s.Description = &v +// SetElasticGpuId sets the ElasticGpuId field's value. +func (s *ElasticGpus) SetElasticGpuId(v string) *ElasticGpus { + s.ElasticGpuId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateSnapshotInput) SetDryRun(v bool) *CreateSnapshotInput { - s.DryRun = &v +// SetElasticGpuState sets the ElasticGpuState field's value. +func (s *ElasticGpus) SetElasticGpuState(v string) *ElasticGpus { + s.ElasticGpuState = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *CreateSnapshotInput) SetVolumeId(v string) *CreateSnapshotInput { - s.VolumeId = &v +// SetElasticGpuType sets the ElasticGpuType field's value. +func (s *ElasticGpus) SetElasticGpuType(v string) *ElasticGpus { + s.ElasticGpuType = &v return s } -// Contains the parameters for CreateSpotDatafeedSubscription. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscriptionRequest -type CreateSpotDatafeedSubscriptionInput struct { +// SetInstanceId sets the InstanceId field's value. +func (s *ElasticGpus) SetInstanceId(v string) *ElasticGpus { + s.InstanceId = &v + return s +} + +// Describes an elastic inference accelerator. +type ElasticInferenceAccelerator struct { _ struct{} `type:"structure"` - // The Amazon S3 bucket in which to store the Spot instance data feed. + // The type of elastic inference accelerator. The possible values are eia1.small, + // eia1.medium, and eia1.large. // - // Bucket is a required field - Bucket *string `locationName:"bucket" type:"string" required:"true"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // A prefix for the data feed file names. - Prefix *string `locationName:"prefix" type:"string"` + // Type is a required field + Type *string `type:"string" required:"true"` } // String returns the string representation -func (s CreateSpotDatafeedSubscriptionInput) String() string { +func (s ElasticInferenceAccelerator) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateSpotDatafeedSubscriptionInput) GoString() string { +func (s ElasticInferenceAccelerator) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSpotDatafeedSubscriptionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSpotDatafeedSubscriptionInput"} - if s.Bucket == nil { - invalidParams.Add(request.NewErrParamRequired("Bucket")) +func (s *ElasticInferenceAccelerator) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ElasticInferenceAccelerator"} + if s.Type == nil { + invalidParams.Add(request.NewErrParamRequired("Type")) } if invalidParams.Len() > 0 { @@ -21535,505 +64819,471 @@ func (s *CreateSpotDatafeedSubscriptionInput) Validate() error { return nil } -// SetBucket sets the Bucket field's value. -func (s *CreateSpotDatafeedSubscriptionInput) SetBucket(v string) *CreateSpotDatafeedSubscriptionInput { - s.Bucket = &v +// SetType sets the Type field's value. +func (s *ElasticInferenceAccelerator) SetType(v string) *ElasticInferenceAccelerator { + s.Type = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateSpotDatafeedSubscriptionInput) SetDryRun(v bool) *CreateSpotDatafeedSubscriptionInput { - s.DryRun = &v - return s -} +// Describes the association between an instance and an elastic inference accelerator. +type ElasticInferenceAcceleratorAssociation struct { + _ struct{} `type:"structure"` -// SetPrefix sets the Prefix field's value. -func (s *CreateSpotDatafeedSubscriptionInput) SetPrefix(v string) *CreateSpotDatafeedSubscriptionInput { - s.Prefix = &v - return s -} + // The Amazon Resource Name (ARN) of the elastic inference accelerator. + ElasticInferenceAcceleratorArn *string `locationName:"elasticInferenceAcceleratorArn" type:"string"` -// Contains the output of CreateSpotDatafeedSubscription. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscriptionResult -type CreateSpotDatafeedSubscriptionOutput struct { - _ struct{} `type:"structure"` + // The ID of the association. + ElasticInferenceAcceleratorAssociationId *string `locationName:"elasticInferenceAcceleratorAssociationId" type:"string"` - // The Spot instance data feed subscription. - SpotDatafeedSubscription *SpotDatafeedSubscription `locationName:"spotDatafeedSubscription" type:"structure"` + // The state of the elastic inference accelerator. + ElasticInferenceAcceleratorAssociationState *string `locationName:"elasticInferenceAcceleratorAssociationState" type:"string"` + + // The time at which the elastic inference accelerator is associated with an + // instance. + ElasticInferenceAcceleratorAssociationTime *time.Time `locationName:"elasticInferenceAcceleratorAssociationTime" type:"timestamp"` } // String returns the string representation -func (s CreateSpotDatafeedSubscriptionOutput) String() string { +func (s ElasticInferenceAcceleratorAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateSpotDatafeedSubscriptionOutput) GoString() string { +func (s ElasticInferenceAcceleratorAssociation) GoString() string { return s.String() } -// SetSpotDatafeedSubscription sets the SpotDatafeedSubscription field's value. -func (s *CreateSpotDatafeedSubscriptionOutput) SetSpotDatafeedSubscription(v *SpotDatafeedSubscription) *CreateSpotDatafeedSubscriptionOutput { - s.SpotDatafeedSubscription = v +// SetElasticInferenceAcceleratorArn sets the ElasticInferenceAcceleratorArn field's value. +func (s *ElasticInferenceAcceleratorAssociation) SetElasticInferenceAcceleratorArn(v string) *ElasticInferenceAcceleratorAssociation { + s.ElasticInferenceAcceleratorArn = &v return s } -// Contains the parameters for CreateSubnet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnetRequest -type CreateSubnetInput struct { - _ struct{} `type:"structure"` +// SetElasticInferenceAcceleratorAssociationId sets the ElasticInferenceAcceleratorAssociationId field's value. +func (s *ElasticInferenceAcceleratorAssociation) SetElasticInferenceAcceleratorAssociationId(v string) *ElasticInferenceAcceleratorAssociation { + s.ElasticInferenceAcceleratorAssociationId = &v + return s +} - // The Availability Zone for the subnet. - // - // Default: AWS selects one for you. If you create more than one subnet in your - // VPC, we may not necessarily select a different zone for each subnet. - AvailabilityZone *string `type:"string"` +// SetElasticInferenceAcceleratorAssociationState sets the ElasticInferenceAcceleratorAssociationState field's value. +func (s *ElasticInferenceAcceleratorAssociation) SetElasticInferenceAcceleratorAssociationState(v string) *ElasticInferenceAcceleratorAssociation { + s.ElasticInferenceAcceleratorAssociationState = &v + return s +} - // The IPv4 network range for the subnet, in CIDR notation. For example, 10.0.0.0/24. - // - // CidrBlock is a required field - CidrBlock *string `type:"string" required:"true"` +// SetElasticInferenceAcceleratorAssociationTime sets the ElasticInferenceAcceleratorAssociationTime field's value. +func (s *ElasticInferenceAcceleratorAssociation) SetElasticInferenceAcceleratorAssociationTime(v time.Time) *ElasticInferenceAcceleratorAssociation { + s.ElasticInferenceAcceleratorAssociationTime = &v + return s +} + +type EnableEbsEncryptionByDefaultInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The IPv6 network range for the subnet, in CIDR notation. The subnet size - // must use a /64 prefix length. - Ipv6CidrBlock *string `type:"string"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s CreateSubnetInput) String() string { +func (s EnableEbsEncryptionByDefaultInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateSubnetInput) GoString() string { +func (s EnableEbsEncryptionByDefaultInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateSubnetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateSubnetInput"} - if s.CidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("CidrBlock")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CreateSubnetInput) SetAvailabilityZone(v string) *CreateSubnetInput { - s.AvailabilityZone = &v +// SetDryRun sets the DryRun field's value. +func (s *EnableEbsEncryptionByDefaultInput) SetDryRun(v bool) *EnableEbsEncryptionByDefaultInput { + s.DryRun = &v return s } -// SetCidrBlock sets the CidrBlock field's value. -func (s *CreateSubnetInput) SetCidrBlock(v string) *CreateSubnetInput { - s.CidrBlock = &v - return s +type EnableEbsEncryptionByDefaultOutput struct { + _ struct{} `type:"structure"` + + // The updated status of encryption by default. + EbsEncryptionByDefault *bool `locationName:"ebsEncryptionByDefault" type:"boolean"` } -// SetDryRun sets the DryRun field's value. -func (s *CreateSubnetInput) SetDryRun(v bool) *CreateSubnetInput { - s.DryRun = &v - return s +// String returns the string representation +func (s EnableEbsEncryptionByDefaultOutput) String() string { + return awsutil.Prettify(s) } -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *CreateSubnetInput) SetIpv6CidrBlock(v string) *CreateSubnetInput { - s.Ipv6CidrBlock = &v - return s +// GoString returns the string representation +func (s EnableEbsEncryptionByDefaultOutput) GoString() string { + return s.String() } -// SetVpcId sets the VpcId field's value. -func (s *CreateSubnetInput) SetVpcId(v string) *CreateSubnetInput { - s.VpcId = &v +// SetEbsEncryptionByDefault sets the EbsEncryptionByDefault field's value. +func (s *EnableEbsEncryptionByDefaultOutput) SetEbsEncryptionByDefault(v bool) *EnableEbsEncryptionByDefaultOutput { + s.EbsEncryptionByDefault = &v return s } -// Contains the output of CreateSubnet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnetResult -type CreateSubnetOutput struct { +// Contains information about the errors that occurred when enabling fast snapshot +// restores. +type EnableFastSnapshotRestoreErrorItem struct { _ struct{} `type:"structure"` - // Information about the subnet. - Subnet *Subnet `locationName:"subnet" type:"structure"` + // The errors. + FastSnapshotRestoreStateErrors []*EnableFastSnapshotRestoreStateErrorItem `locationName:"fastSnapshotRestoreStateErrorSet" locationNameList:"item" type:"list"` + + // The ID of the snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` } // String returns the string representation -func (s CreateSubnetOutput) String() string { +func (s EnableFastSnapshotRestoreErrorItem) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateSubnetOutput) GoString() string { +func (s EnableFastSnapshotRestoreErrorItem) GoString() string { return s.String() } -// SetSubnet sets the Subnet field's value. -func (s *CreateSubnetOutput) SetSubnet(v *Subnet) *CreateSubnetOutput { - s.Subnet = v +// SetFastSnapshotRestoreStateErrors sets the FastSnapshotRestoreStateErrors field's value. +func (s *EnableFastSnapshotRestoreErrorItem) SetFastSnapshotRestoreStateErrors(v []*EnableFastSnapshotRestoreStateErrorItem) *EnableFastSnapshotRestoreErrorItem { + s.FastSnapshotRestoreStateErrors = v return s } -// Contains the parameters for CreateTags. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTagsRequest -type CreateTagsInput struct { - _ struct{} `type:"structure"` +// SetSnapshotId sets the SnapshotId field's value. +func (s *EnableFastSnapshotRestoreErrorItem) SetSnapshotId(v string) *EnableFastSnapshotRestoreErrorItem { + s.SnapshotId = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// Describes an error that occurred when enabling fast snapshot restores. +type EnableFastSnapshotRestoreStateError struct { + _ struct{} `type:"structure"` - // The IDs of one or more resources to tag. For example, ami-1a2b3c4d. - // - // Resources is a required field - Resources []*string `locationName:"ResourceId" type:"list" required:"true"` + // The error code. + Code *string `locationName:"code" type:"string"` - // One or more tags. The value parameter is required, but if you don't want - // the tag to have a value, specify the parameter with no value, and we set - // the value to an empty string. - // - // Tags is a required field - Tags []*Tag `locationName:"Tag" locationNameList:"item" type:"list" required:"true"` + // The error message. + Message *string `locationName:"message" type:"string"` } // String returns the string representation -func (s CreateTagsInput) String() string { +func (s EnableFastSnapshotRestoreStateError) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateTagsInput) GoString() string { +func (s EnableFastSnapshotRestoreStateError) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateTagsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateTagsInput"} - if s.Resources == nil { - invalidParams.Add(request.NewErrParamRequired("Resources")) - } - if s.Tags == nil { - invalidParams.Add(request.NewErrParamRequired("Tags")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *CreateTagsInput) SetDryRun(v bool) *CreateTagsInput { - s.DryRun = &v - return s -} - -// SetResources sets the Resources field's value. -func (s *CreateTagsInput) SetResources(v []*string) *CreateTagsInput { - s.Resources = v +// SetCode sets the Code field's value. +func (s *EnableFastSnapshotRestoreStateError) SetCode(v string) *EnableFastSnapshotRestoreStateError { + s.Code = &v return s } -// SetTags sets the Tags field's value. -func (s *CreateTagsInput) SetTags(v []*Tag) *CreateTagsInput { - s.Tags = v +// SetMessage sets the Message field's value. +func (s *EnableFastSnapshotRestoreStateError) SetMessage(v string) *EnableFastSnapshotRestoreStateError { + s.Message = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTagsOutput -type CreateTagsOutput struct { +// Contains information about an error that occurred when enabling fast snapshot +// restores. +type EnableFastSnapshotRestoreStateErrorItem struct { _ struct{} `type:"structure"` + + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + + // The error. + Error *EnableFastSnapshotRestoreStateError `locationName:"error" type:"structure"` } // String returns the string representation -func (s CreateTagsOutput) String() string { +func (s EnableFastSnapshotRestoreStateErrorItem) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateTagsOutput) GoString() string { +func (s EnableFastSnapshotRestoreStateErrorItem) GoString() string { return s.String() } -// Contains the parameters for CreateVolume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolumeRequest -type CreateVolumeInput struct { +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *EnableFastSnapshotRestoreStateErrorItem) SetAvailabilityZone(v string) *EnableFastSnapshotRestoreStateErrorItem { + s.AvailabilityZone = &v + return s +} + +// SetError sets the Error field's value. +func (s *EnableFastSnapshotRestoreStateErrorItem) SetError(v *EnableFastSnapshotRestoreStateError) *EnableFastSnapshotRestoreStateErrorItem { + s.Error = v + return s +} + +// Describes fast snapshot restores that were successfully enabled. +type EnableFastSnapshotRestoreSuccessItem struct { _ struct{} `type:"structure"` - // The Availability Zone in which to create the volume. Use DescribeAvailabilityZones - // to list the Availability Zones that are currently available to you. - // - // AvailabilityZone is a required field - AvailabilityZone *string `type:"string" required:"true"` + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The time at which fast snapshot restores entered the disabled state. + DisabledTime *time.Time `locationName:"disabledTime" type:"timestamp"` - // Specifies whether the volume should be encrypted. Encrypted Amazon EBS volumes - // may only be attached to instances that support Amazon EBS encryption. Volumes - // that are created from encrypted snapshots are automatically encrypted. There - // is no way to create an encrypted volume from an unencrypted snapshot or vice - // versa. If your AMI uses encrypted volumes, you can only launch it on supported - // instance types. For more information, see Amazon EBS Encryption (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) - // in the Amazon Elastic Compute Cloud User Guide. - Encrypted *bool `locationName:"encrypted" type:"boolean"` + // The time at which fast snapshot restores entered the disabling state. + DisablingTime *time.Time `locationName:"disablingTime" type:"timestamp"` - // Only valid for Provisioned IOPS SSD volumes. The number of I/O operations - // per second (IOPS) to provision for the volume, with a maximum ratio of 50 - // IOPS/GiB. - // - // Constraint: Range is 100 to 20000 for Provisioned IOPS SSD volumes - Iops *int64 `type:"integer"` + // The time at which fast snapshot restores entered the enabled state. + EnabledTime *time.Time `locationName:"enabledTime" type:"timestamp"` - // The full ARN of the AWS Key Management Service (AWS KMS) customer master - // key (CMK) to use when creating the encrypted volume. This parameter is only - // required if you want to use a non-default CMK; if this parameter is not specified, - // the default CMK for EBS is used. The ARN contains the arn:aws:kms namespace, - // followed by the region of the CMK, the AWS account ID of the CMK owner, the - // key namespace, and then the CMK ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. - // If a KmsKeyId is specified, the Encrypted flag must also be set. - KmsKeyId *string `type:"string"` + // The time at which fast snapshot restores entered the enabling state. + EnablingTime *time.Time `locationName:"enablingTime" type:"timestamp"` - // The size of the volume, in GiBs. - // - // Constraints: 1-16384 for gp2, 4-16384 for io1, 500-16384 for st1, 500-16384 - // for sc1, and 1-1024 for standard. If you specify a snapshot, the volume size - // must be equal to or larger than the snapshot size. - // - // Default: If you're creating the volume from a snapshot and don't specify - // a volume size, the default is the snapshot size. - Size *int64 `type:"integer"` + // The time at which fast snapshot restores entered the optimizing state. + OptimizingTime *time.Time `locationName:"optimizingTime" type:"timestamp"` - // The snapshot from which to create the volume. - SnapshotId *string `type:"string"` + // The alias of the snapshot owner. + OwnerAlias *string `locationName:"ownerAlias" type:"string"` - // The volume type. This can be gp2 for General Purpose SSD, io1 for Provisioned - // IOPS SSD, st1 for Throughput Optimized HDD, sc1 for Cold HDD, or standard - // for Magnetic volumes. + // The ID of the AWS account that owns the snapshot. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The ID of the snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` + + // The state of fast snapshot restores. + State *string `locationName:"state" type:"string" enum:"FastSnapshotRestoreStateCode"` + + // The reason for the state transition. The possible values are as follows: // - // Default: standard - VolumeType *string `type:"string" enum:"VolumeType"` + // * Client.UserInitiated - The state successfully transitioned to enabling + // or disabling. + // + // * Client.UserInitiated - Lifecycle state transition - The state successfully + // transitioned to optimizing, enabled, or disabled. + StateTransitionReason *string `locationName:"stateTransitionReason" type:"string"` } // String returns the string representation -func (s CreateVolumeInput) String() string { +func (s EnableFastSnapshotRestoreSuccessItem) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVolumeInput) GoString() string { +func (s EnableFastSnapshotRestoreSuccessItem) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVolumeInput"} - if s.AvailabilityZone == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) - } +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetAvailabilityZone(v string) *EnableFastSnapshotRestoreSuccessItem { + s.AvailabilityZone = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetDisabledTime sets the DisabledTime field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetDisabledTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { + s.DisabledTime = &v + return s } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CreateVolumeInput) SetAvailabilityZone(v string) *CreateVolumeInput { - s.AvailabilityZone = &v +// SetDisablingTime sets the DisablingTime field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetDisablingTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { + s.DisablingTime = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateVolumeInput) SetDryRun(v bool) *CreateVolumeInput { - s.DryRun = &v +// SetEnabledTime sets the EnabledTime field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetEnabledTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { + s.EnabledTime = &v return s } -// SetEncrypted sets the Encrypted field's value. -func (s *CreateVolumeInput) SetEncrypted(v bool) *CreateVolumeInput { - s.Encrypted = &v +// SetEnablingTime sets the EnablingTime field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetEnablingTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { + s.EnablingTime = &v return s } -// SetIops sets the Iops field's value. -func (s *CreateVolumeInput) SetIops(v int64) *CreateVolumeInput { - s.Iops = &v +// SetOptimizingTime sets the OptimizingTime field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetOptimizingTime(v time.Time) *EnableFastSnapshotRestoreSuccessItem { + s.OptimizingTime = &v return s } -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *CreateVolumeInput) SetKmsKeyId(v string) *CreateVolumeInput { - s.KmsKeyId = &v +// SetOwnerAlias sets the OwnerAlias field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetOwnerAlias(v string) *EnableFastSnapshotRestoreSuccessItem { + s.OwnerAlias = &v return s } -// SetSize sets the Size field's value. -func (s *CreateVolumeInput) SetSize(v int64) *CreateVolumeInput { - s.Size = &v +// SetOwnerId sets the OwnerId field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetOwnerId(v string) *EnableFastSnapshotRestoreSuccessItem { + s.OwnerId = &v return s } // SetSnapshotId sets the SnapshotId field's value. -func (s *CreateVolumeInput) SetSnapshotId(v string) *CreateVolumeInput { +func (s *EnableFastSnapshotRestoreSuccessItem) SetSnapshotId(v string) *EnableFastSnapshotRestoreSuccessItem { s.SnapshotId = &v return s } -// SetVolumeType sets the VolumeType field's value. -func (s *CreateVolumeInput) SetVolumeType(v string) *CreateVolumeInput { - s.VolumeType = &v +// SetState sets the State field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetState(v string) *EnableFastSnapshotRestoreSuccessItem { + s.State = &v return s } -// Describes the user or group to be added or removed from the permissions for -// a volume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolumePermission -type CreateVolumePermission struct { +// SetStateTransitionReason sets the StateTransitionReason field's value. +func (s *EnableFastSnapshotRestoreSuccessItem) SetStateTransitionReason(v string) *EnableFastSnapshotRestoreSuccessItem { + s.StateTransitionReason = &v + return s +} + +type EnableFastSnapshotRestoresInput struct { _ struct{} `type:"structure"` - // The specific group that is to be added or removed from a volume's list of - // create volume permissions. - Group *string `locationName:"group" type:"string" enum:"PermissionGroup"` + // One or more Availability Zones. For example, us-east-2a. + // + // AvailabilityZones is a required field + AvailabilityZones []*string `locationName:"AvailabilityZone" locationNameList:"AvailabilityZone" type:"list" required:"true"` - // The specific AWS account ID that is to be added or removed from a volume's - // list of create volume permissions. - UserId *string `locationName:"userId" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The IDs of one or more snapshots. For example, snap-1234567890abcdef0. You + // can specify a snapshot that was shared with you from another AWS account. + // + // SourceSnapshotIds is a required field + SourceSnapshotIds []*string `locationName:"SourceSnapshotId" locationNameList:"SnapshotId" type:"list" required:"true"` } // String returns the string representation -func (s CreateVolumePermission) String() string { +func (s EnableFastSnapshotRestoresInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVolumePermission) GoString() string { +func (s EnableFastSnapshotRestoresInput) GoString() string { return s.String() } -// SetGroup sets the Group field's value. -func (s *CreateVolumePermission) SetGroup(v string) *CreateVolumePermission { - s.Group = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *EnableFastSnapshotRestoresInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "EnableFastSnapshotRestoresInput"} + if s.AvailabilityZones == nil { + invalidParams.Add(request.NewErrParamRequired("AvailabilityZones")) + } + if s.SourceSnapshotIds == nil { + invalidParams.Add(request.NewErrParamRequired("SourceSnapshotIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAvailabilityZones sets the AvailabilityZones field's value. +func (s *EnableFastSnapshotRestoresInput) SetAvailabilityZones(v []*string) *EnableFastSnapshotRestoresInput { + s.AvailabilityZones = v return s } -// SetUserId sets the UserId field's value. -func (s *CreateVolumePermission) SetUserId(v string) *CreateVolumePermission { - s.UserId = &v +// SetDryRun sets the DryRun field's value. +func (s *EnableFastSnapshotRestoresInput) SetDryRun(v bool) *EnableFastSnapshotRestoresInput { + s.DryRun = &v return s } -// Describes modifications to the permissions for a volume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolumePermissionModifications -type CreateVolumePermissionModifications struct { +// SetSourceSnapshotIds sets the SourceSnapshotIds field's value. +func (s *EnableFastSnapshotRestoresInput) SetSourceSnapshotIds(v []*string) *EnableFastSnapshotRestoresInput { + s.SourceSnapshotIds = v + return s +} + +type EnableFastSnapshotRestoresOutput struct { _ struct{} `type:"structure"` - // Adds a specific AWS account ID or group to a volume's list of create volume - // permissions. - Add []*CreateVolumePermission `locationNameList:"item" type:"list"` + // Information about the snapshots for which fast snapshot restores were successfully + // enabled. + Successful []*EnableFastSnapshotRestoreSuccessItem `locationName:"successful" locationNameList:"item" type:"list"` - // Removes a specific AWS account ID or group from a volume's list of create - // volume permissions. - Remove []*CreateVolumePermission `locationNameList:"item" type:"list"` + // Information about the snapshots for which fast snapshot restores could not + // be enabled. + Unsuccessful []*EnableFastSnapshotRestoreErrorItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` } // String returns the string representation -func (s CreateVolumePermissionModifications) String() string { +func (s EnableFastSnapshotRestoresOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVolumePermissionModifications) GoString() string { +func (s EnableFastSnapshotRestoresOutput) GoString() string { return s.String() } -// SetAdd sets the Add field's value. -func (s *CreateVolumePermissionModifications) SetAdd(v []*CreateVolumePermission) *CreateVolumePermissionModifications { - s.Add = v +// SetSuccessful sets the Successful field's value. +func (s *EnableFastSnapshotRestoresOutput) SetSuccessful(v []*EnableFastSnapshotRestoreSuccessItem) *EnableFastSnapshotRestoresOutput { + s.Successful = v return s } -// SetRemove sets the Remove field's value. -func (s *CreateVolumePermissionModifications) SetRemove(v []*CreateVolumePermission) *CreateVolumePermissionModifications { - s.Remove = v +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *EnableFastSnapshotRestoresOutput) SetUnsuccessful(v []*EnableFastSnapshotRestoreErrorItem) *EnableFastSnapshotRestoresOutput { + s.Unsuccessful = v return s } -// Contains the parameters for CreateVpcEndpoint. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointRequest -type CreateVpcEndpointInput struct { +type EnableTransitGatewayRouteTablePropagationInput struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `type:"boolean"` - // A policy to attach to the endpoint that controls access to the service. The - // policy must be in valid JSON format. If this parameter is not specified, - // we attach a default policy that allows full access to the service. - PolicyDocument *string `type:"string"` - - // One or more route table IDs. - RouteTableIds []*string `locationName:"RouteTableId" locationNameList:"item" type:"list"` - - // The AWS service name, in the form com.amazonaws.region.service. To get a - // list of available services, use the DescribeVpcEndpointServices request. + // The ID of the attachment. // - // ServiceName is a required field - ServiceName *string `type:"string" required:"true"` + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` - // The ID of the VPC in which the endpoint will be used. + // The ID of the propagation route table. // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s CreateVpcEndpointInput) String() string { +func (s EnableTransitGatewayRouteTablePropagationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpcEndpointInput) GoString() string { +func (s EnableTransitGatewayRouteTablePropagationInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpcEndpointInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpcEndpointInput"} - if s.ServiceName == nil { - invalidParams.Add(request.NewErrParamRequired("ServiceName")) +func (s *EnableTransitGatewayRouteTablePropagationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "EnableTransitGatewayRouteTablePropagationInput"} + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) } if invalidParams.Len() > 0 { @@ -22042,126 +65292,147 @@ func (s *CreateVpcEndpointInput) Validate() error { return nil } -// SetClientToken sets the ClientToken field's value. -func (s *CreateVpcEndpointInput) SetClientToken(v string) *CreateVpcEndpointInput { - s.ClientToken = &v +// SetDryRun sets the DryRun field's value. +func (s *EnableTransitGatewayRouteTablePropagationInput) SetDryRun(v bool) *EnableTransitGatewayRouteTablePropagationInput { + s.DryRun = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *CreateVpcEndpointInput) SetDryRun(v bool) *CreateVpcEndpointInput { - s.DryRun = &v +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *EnableTransitGatewayRouteTablePropagationInput) SetTransitGatewayAttachmentId(v string) *EnableTransitGatewayRouteTablePropagationInput { + s.TransitGatewayAttachmentId = &v return s } -// SetPolicyDocument sets the PolicyDocument field's value. -func (s *CreateVpcEndpointInput) SetPolicyDocument(v string) *CreateVpcEndpointInput { - s.PolicyDocument = &v +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *EnableTransitGatewayRouteTablePropagationInput) SetTransitGatewayRouteTableId(v string) *EnableTransitGatewayRouteTablePropagationInput { + s.TransitGatewayRouteTableId = &v return s } -// SetRouteTableIds sets the RouteTableIds field's value. -func (s *CreateVpcEndpointInput) SetRouteTableIds(v []*string) *CreateVpcEndpointInput { - s.RouteTableIds = v +type EnableTransitGatewayRouteTablePropagationOutput struct { + _ struct{} `type:"structure"` + + // Information about route propagation. + Propagation *TransitGatewayPropagation `locationName:"propagation" type:"structure"` +} + +// String returns the string representation +func (s EnableTransitGatewayRouteTablePropagationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s EnableTransitGatewayRouteTablePropagationOutput) GoString() string { + return s.String() +} + +// SetPropagation sets the Propagation field's value. +func (s *EnableTransitGatewayRouteTablePropagationOutput) SetPropagation(v *TransitGatewayPropagation) *EnableTransitGatewayRouteTablePropagationOutput { + s.Propagation = v return s } -// SetServiceName sets the ServiceName field's value. -func (s *CreateVpcEndpointInput) SetServiceName(v string) *CreateVpcEndpointInput { - s.ServiceName = &v +// Contains the parameters for EnableVgwRoutePropagation. +type EnableVgwRoutePropagationInput struct { + _ struct{} `type:"structure"` + + // The ID of the virtual private gateway that is attached to a VPC. The virtual + // private gateway must be attached to the same VPC that the routing tables + // are associated with. + // + // GatewayId is a required field + GatewayId *string `type:"string" required:"true"` + + // The ID of the route table. The routing table must be associated with the + // same VPC that the virtual private gateway is attached to. + // + // RouteTableId is a required field + RouteTableId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s EnableVgwRoutePropagationInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s EnableVgwRoutePropagationInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *EnableVgwRoutePropagationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "EnableVgwRoutePropagationInput"} + if s.GatewayId == nil { + invalidParams.Add(request.NewErrParamRequired("GatewayId")) + } + if s.RouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("RouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetGatewayId sets the GatewayId field's value. +func (s *EnableVgwRoutePropagationInput) SetGatewayId(v string) *EnableVgwRoutePropagationInput { + s.GatewayId = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *CreateVpcEndpointInput) SetVpcId(v string) *CreateVpcEndpointInput { - s.VpcId = &v +// SetRouteTableId sets the RouteTableId field's value. +func (s *EnableVgwRoutePropagationInput) SetRouteTableId(v string) *EnableVgwRoutePropagationInput { + s.RouteTableId = &v return s } -// Contains the output of CreateVpcEndpoint. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointResult -type CreateVpcEndpointOutput struct { +type EnableVgwRoutePropagationOutput struct { _ struct{} `type:"structure"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Information about the endpoint. - VpcEndpoint *VpcEndpoint `locationName:"vpcEndpoint" type:"structure"` } // String returns the string representation -func (s CreateVpcEndpointOutput) String() string { +func (s EnableVgwRoutePropagationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpcEndpointOutput) GoString() string { +func (s EnableVgwRoutePropagationOutput) GoString() string { return s.String() } -// SetClientToken sets the ClientToken field's value. -func (s *CreateVpcEndpointOutput) SetClientToken(v string) *CreateVpcEndpointOutput { - s.ClientToken = &v - return s -} - -// SetVpcEndpoint sets the VpcEndpoint field's value. -func (s *CreateVpcEndpointOutput) SetVpcEndpoint(v *VpcEndpoint) *CreateVpcEndpointOutput { - s.VpcEndpoint = v - return s -} - -// Contains the parameters for CreateVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcRequest -type CreateVpcInput struct { +type EnableVolumeIOInput struct { _ struct{} `type:"structure"` - // Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for - // the VPC. You cannot specify the range of IP addresses, or the size of the - // CIDR block. - AmazonProvidedIpv6CidrBlock *bool `locationName:"amazonProvidedIpv6CidrBlock" type:"boolean"` - - // The IPv4 network range for the VPC, in CIDR notation. For example, 10.0.0.0/16. - // - // CidrBlock is a required field - CidrBlock *string `type:"string" required:"true"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The tenancy options for instances launched into the VPC. For default, instances - // are launched with shared tenancy by default. You can launch instances with - // any tenancy into a shared tenancy VPC. For dedicated, instances are launched - // as dedicated tenancy instances by default. You can only launch instances - // with a tenancy of dedicated or host into a dedicated tenancy VPC. - // - // Important: The host value cannot be used with this parameter. Use the default - // or dedicated values only. + // The ID of the volume. // - // Default: default - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` + // VolumeId is a required field + VolumeId *string `locationName:"volumeId" type:"string" required:"true"` } // String returns the string representation -func (s CreateVpcInput) String() string { +func (s EnableVolumeIOInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpcInput) GoString() string { +func (s EnableVolumeIOInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpcInput"} - if s.CidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("CidrBlock")) +func (s *EnableVolumeIOInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "EnableVolumeIOInput"} + if s.VolumeId == nil { + invalidParams.Add(request.NewErrParamRequired("VolumeId")) } if invalidParams.Len() > 0 { @@ -22170,192 +65441,108 @@ func (s *CreateVpcInput) Validate() error { return nil } -// SetAmazonProvidedIpv6CidrBlock sets the AmazonProvidedIpv6CidrBlock field's value. -func (s *CreateVpcInput) SetAmazonProvidedIpv6CidrBlock(v bool) *CreateVpcInput { - s.AmazonProvidedIpv6CidrBlock = &v - return s -} - -// SetCidrBlock sets the CidrBlock field's value. -func (s *CreateVpcInput) SetCidrBlock(v string) *CreateVpcInput { - s.CidrBlock = &v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *CreateVpcInput) SetDryRun(v bool) *CreateVpcInput { +func (s *EnableVolumeIOInput) SetDryRun(v bool) *EnableVolumeIOInput { s.DryRun = &v return s } -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *CreateVpcInput) SetInstanceTenancy(v string) *CreateVpcInput { - s.InstanceTenancy = &v +// SetVolumeId sets the VolumeId field's value. +func (s *EnableVolumeIOInput) SetVolumeId(v string) *EnableVolumeIOInput { + s.VolumeId = &v return s } -// Contains the output of CreateVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcResult -type CreateVpcOutput struct { +type EnableVolumeIOOutput struct { _ struct{} `type:"structure"` - - // Information about the VPC. - Vpc *Vpc `locationName:"vpc" type:"structure"` } // String returns the string representation -func (s CreateVpcOutput) String() string { +func (s EnableVolumeIOOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpcOutput) GoString() string { +func (s EnableVolumeIOOutput) GoString() string { return s.String() } -// SetVpc sets the Vpc field's value. -func (s *CreateVpcOutput) SetVpc(v *Vpc) *CreateVpcOutput { - s.Vpc = v - return s -} - -// Contains the parameters for CreateVpcPeeringConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnectionRequest -type CreateVpcPeeringConnectionInput struct { +type EnableVpcClassicLinkDnsSupportInput struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The AWS account ID of the owner of the peer VPC. - // - // Default: Your AWS account ID - PeerOwnerId *string `locationName:"peerOwnerId" type:"string"` - - // The ID of the VPC with which you are creating the VPC peering connection. - PeerVpcId *string `locationName:"peerVpcId" type:"string"` - - // The ID of the requester VPC. - VpcId *string `locationName:"vpcId" type:"string"` + // The ID of the VPC. + VpcId *string `type:"string"` } // String returns the string representation -func (s CreateVpcPeeringConnectionInput) String() string { +func (s EnableVpcClassicLinkDnsSupportInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpcPeeringConnectionInput) GoString() string { +func (s EnableVpcClassicLinkDnsSupportInput) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *CreateVpcPeeringConnectionInput) SetDryRun(v bool) *CreateVpcPeeringConnectionInput { - s.DryRun = &v - return s -} - -// SetPeerOwnerId sets the PeerOwnerId field's value. -func (s *CreateVpcPeeringConnectionInput) SetPeerOwnerId(v string) *CreateVpcPeeringConnectionInput { - s.PeerOwnerId = &v - return s -} - -// SetPeerVpcId sets the PeerVpcId field's value. -func (s *CreateVpcPeeringConnectionInput) SetPeerVpcId(v string) *CreateVpcPeeringConnectionInput { - s.PeerVpcId = &v - return s -} - // SetVpcId sets the VpcId field's value. -func (s *CreateVpcPeeringConnectionInput) SetVpcId(v string) *CreateVpcPeeringConnectionInput { +func (s *EnableVpcClassicLinkDnsSupportInput) SetVpcId(v string) *EnableVpcClassicLinkDnsSupportInput { s.VpcId = &v return s } -// Contains the output of CreateVpcPeeringConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnectionResult -type CreateVpcPeeringConnectionOutput struct { +type EnableVpcClassicLinkDnsSupportOutput struct { _ struct{} `type:"structure"` - // Information about the VPC peering connection. - VpcPeeringConnection *VpcPeeringConnection `locationName:"vpcPeeringConnection" type:"structure"` + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s CreateVpcPeeringConnectionOutput) String() string { +func (s EnableVpcClassicLinkDnsSupportOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpcPeeringConnectionOutput) GoString() string { +func (s EnableVpcClassicLinkDnsSupportOutput) GoString() string { return s.String() } -// SetVpcPeeringConnection sets the VpcPeeringConnection field's value. -func (s *CreateVpcPeeringConnectionOutput) SetVpcPeeringConnection(v *VpcPeeringConnection) *CreateVpcPeeringConnectionOutput { - s.VpcPeeringConnection = v +// SetReturn sets the Return field's value. +func (s *EnableVpcClassicLinkDnsSupportOutput) SetReturn(v bool) *EnableVpcClassicLinkDnsSupportOutput { + s.Return = &v return s } -// Contains the parameters for CreateVpnConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRequest -type CreateVpnConnectionInput struct { +type EnableVpcClassicLinkInput struct { _ struct{} `type:"structure"` - // The ID of the customer gateway. - // - // CustomerGatewayId is a required field - CustomerGatewayId *string `type:"string" required:"true"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // Indicates whether the VPN connection requires static routes. If you are creating - // a VPN connection for a device that does not support BGP, you must specify - // true. - // - // Default: false - Options *VpnConnectionOptionsSpecification `locationName:"options" type:"structure"` - - // The type of VPN connection (ipsec.1). - // - // Type is a required field - Type *string `type:"string" required:"true"` - - // The ID of the virtual private gateway. + // The ID of the VPC. // - // VpnGatewayId is a required field - VpnGatewayId *string `type:"string" required:"true"` + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` } // String returns the string representation -func (s CreateVpnConnectionInput) String() string { +func (s EnableVpcClassicLinkInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpnConnectionInput) GoString() string { +func (s EnableVpcClassicLinkInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpnConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpnConnectionInput"} - if s.CustomerGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("CustomerGatewayId")) - } - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) - } - if s.VpnGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) +func (s *EnableVpcClassicLinkInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "EnableVpcClassicLinkInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) } if invalidParams.Len() > 0 { @@ -22364,95 +65551,176 @@ func (s *CreateVpnConnectionInput) Validate() error { return nil } -// SetCustomerGatewayId sets the CustomerGatewayId field's value. -func (s *CreateVpnConnectionInput) SetCustomerGatewayId(v string) *CreateVpnConnectionInput { - s.CustomerGatewayId = &v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *CreateVpnConnectionInput) SetDryRun(v bool) *CreateVpnConnectionInput { +func (s *EnableVpcClassicLinkInput) SetDryRun(v bool) *EnableVpcClassicLinkInput { s.DryRun = &v return s } -// SetOptions sets the Options field's value. -func (s *CreateVpnConnectionInput) SetOptions(v *VpnConnectionOptionsSpecification) *CreateVpnConnectionInput { - s.Options = v +// SetVpcId sets the VpcId field's value. +func (s *EnableVpcClassicLinkInput) SetVpcId(v string) *EnableVpcClassicLinkInput { + s.VpcId = &v return s } -// SetType sets the Type field's value. -func (s *CreateVpnConnectionInput) SetType(v string) *CreateVpnConnectionInput { - s.Type = &v - return s +type EnableVpcClassicLinkOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` } -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *CreateVpnConnectionInput) SetVpnGatewayId(v string) *CreateVpnConnectionInput { - s.VpnGatewayId = &v +// String returns the string representation +func (s EnableVpcClassicLinkOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s EnableVpcClassicLinkOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *EnableVpcClassicLinkOutput) SetReturn(v bool) *EnableVpcClassicLinkOutput { + s.Return = &v return s } -// Contains the output of CreateVpnConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionResult -type CreateVpnConnectionOutput struct { +// Describes an EC2 Fleet or Spot Fleet event. +type EventInformation struct { _ struct{} `type:"structure"` - // Information about the VPN connection. - VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` + // The description of the event. + EventDescription *string `locationName:"eventDescription" type:"string"` + + // The event. + // + // The following are the error events: + // + // * iamFleetRoleInvalid - The EC2 Fleet or Spot Fleet did not have the required + // permissions either to launch or terminate an instance. + // + // * spotFleetRequestConfigurationInvalid - The configuration is not valid. + // For more information, see the description of the event. + // + // * spotInstanceCountLimitExceeded - You've reached the limit on the number + // of Spot Instances that you can launch. + // + // The following are the fleetRequestChange events: + // + // * active - The EC2 Fleet or Spot Fleet request has been validated and + // Amazon EC2 is attempting to maintain the target number of running Spot + // Instances. + // + // * cancelled - The EC2 Fleet or Spot Fleet request is canceled and has + // no running Spot Instances. The EC2 Fleet or Spot Fleet will be deleted + // two days after its instances were terminated. + // + // * cancelled_running - The EC2 Fleet or Spot Fleet request is canceled + // and does not launch additional Spot Instances. Existing Spot Instances + // continue to run until they are interrupted or terminated. + // + // * cancelled_terminating - The EC2 Fleet or Spot Fleet request is canceled + // and its Spot Instances are terminating. + // + // * expired - The EC2 Fleet or Spot Fleet request has expired. A subsequent + // event indicates that the instances were terminated, if the request was + // created with TerminateInstancesWithExpiration set. + // + // * modify_in_progress - A request to modify the EC2 Fleet or Spot Fleet + // request was accepted and is in progress. + // + // * modify_successful - The EC2 Fleet or Spot Fleet request was modified. + // + // * price_update - The price for a launch configuration was adjusted because + // it was too high. This change is permanent. + // + // * submitted - The EC2 Fleet or Spot Fleet request is being evaluated and + // Amazon EC2 is preparing to launch the target number of Spot Instances. + // + // The following are the instanceChange events: + // + // * launched - A request was fulfilled and a new instance was launched. + // + // * terminated - An instance was terminated by the user. + // + // The following are the Information events: + // + // * launchSpecTemporarilyBlacklisted - The configuration is not valid and + // several attempts to launch instances have failed. For more information, + // see the description of the event. + // + // * launchSpecUnusable - The price in a launch specification is not valid + // because it is below the Spot price or the Spot price is above the On-Demand + // price. + // + // * fleetProgressHalted - The price in every launch specification is not + // valid. A launch specification might become valid if the Spot price changes. + EventSubType *string `locationName:"eventSubType" type:"string"` + + // The ID of the instance. This information is available only for instanceChange + // events. + InstanceId *string `locationName:"instanceId" type:"string"` } // String returns the string representation -func (s CreateVpnConnectionOutput) String() string { +func (s EventInformation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpnConnectionOutput) GoString() string { +func (s EventInformation) GoString() string { return s.String() } -// SetVpnConnection sets the VpnConnection field's value. -func (s *CreateVpnConnectionOutput) SetVpnConnection(v *VpnConnection) *CreateVpnConnectionOutput { - s.VpnConnection = v +// SetEventDescription sets the EventDescription field's value. +func (s *EventInformation) SetEventDescription(v string) *EventInformation { + s.EventDescription = &v return s } -// Contains the parameters for CreateVpnConnectionRoute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRouteRequest -type CreateVpnConnectionRouteInput struct { +// SetEventSubType sets the EventSubType field's value. +func (s *EventInformation) SetEventSubType(v string) *EventInformation { + s.EventSubType = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *EventInformation) SetInstanceId(v string) *EventInformation { + s.InstanceId = &v + return s +} + +type ExportClientVpnClientCertificateRevocationListInput struct { _ struct{} `type:"structure"` - // The CIDR block associated with the local subnet of the customer network. + // The ID of the Client VPN endpoint. // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` - // The ID of the VPN connection. - // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s CreateVpnConnectionRouteInput) String() string { +func (s ExportClientVpnClientCertificateRevocationListInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpnConnectionRouteInput) GoString() string { +func (s ExportClientVpnClientCertificateRevocationListInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpnConnectionRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpnConnectionRouteInput"} - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) +func (s *ExportClientVpnClientCertificateRevocationListInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ExportClientVpnClientCertificateRevocationListInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) } if invalidParams.Len() > 0 { @@ -22461,68 +65729,80 @@ func (s *CreateVpnConnectionRouteInput) Validate() error { return nil } -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *CreateVpnConnectionRouteInput) SetDestinationCidrBlock(v string) *CreateVpnConnectionRouteInput { - s.DestinationCidrBlock = &v +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *ExportClientVpnClientCertificateRevocationListInput) SetClientVpnEndpointId(v string) *ExportClientVpnClientCertificateRevocationListInput { + s.ClientVpnEndpointId = &v return s } -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *CreateVpnConnectionRouteInput) SetVpnConnectionId(v string) *CreateVpnConnectionRouteInput { - s.VpnConnectionId = &v +// SetDryRun sets the DryRun field's value. +func (s *ExportClientVpnClientCertificateRevocationListInput) SetDryRun(v bool) *ExportClientVpnClientCertificateRevocationListInput { + s.DryRun = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRouteOutput -type CreateVpnConnectionRouteOutput struct { +type ExportClientVpnClientCertificateRevocationListOutput struct { _ struct{} `type:"structure"` + + // Information about the client certificate revocation list. + CertificateRevocationList *string `locationName:"certificateRevocationList" type:"string"` + + // The current state of the client certificate revocation list. + Status *ClientCertificateRevocationListStatus `locationName:"status" type:"structure"` } // String returns the string representation -func (s CreateVpnConnectionRouteOutput) String() string { +func (s ExportClientVpnClientCertificateRevocationListOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpnConnectionRouteOutput) GoString() string { +func (s ExportClientVpnClientCertificateRevocationListOutput) GoString() string { return s.String() } -// Contains the parameters for CreateVpnGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGatewayRequest -type CreateVpnGatewayInput struct { +// SetCertificateRevocationList sets the CertificateRevocationList field's value. +func (s *ExportClientVpnClientCertificateRevocationListOutput) SetCertificateRevocationList(v string) *ExportClientVpnClientCertificateRevocationListOutput { + s.CertificateRevocationList = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *ExportClientVpnClientCertificateRevocationListOutput) SetStatus(v *ClientCertificateRevocationListStatus) *ExportClientVpnClientCertificateRevocationListOutput { + s.Status = v + return s +} + +type ExportClientVpnClientConfigurationInput struct { _ struct{} `type:"structure"` - // The Availability Zone for the virtual private gateway. - AvailabilityZone *string `type:"string"` + // The ID of the Client VPN endpoint. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The type of VPN connection this virtual private gateway supports. - // - // Type is a required field - Type *string `type:"string" required:"true" enum:"GatewayType"` + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s CreateVpnGatewayInput) String() string { +func (s ExportClientVpnClientConfigurationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpnGatewayInput) GoString() string { +func (s ExportClientVpnClientConfigurationInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *CreateVpnGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "CreateVpnGatewayInput"} - if s.Type == nil { - invalidParams.Add(request.NewErrParamRequired("Type")) +func (s *ExportClientVpnClientConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ExportClientVpnClientConfigurationInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) } if invalidParams.Len() > 0 { @@ -22531,356 +65811,460 @@ func (s *CreateVpnGatewayInput) Validate() error { return nil } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *CreateVpnGatewayInput) SetAvailabilityZone(v string) *CreateVpnGatewayInput { - s.AvailabilityZone = &v +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *ExportClientVpnClientConfigurationInput) SetClientVpnEndpointId(v string) *ExportClientVpnClientConfigurationInput { + s.ClientVpnEndpointId = &v return s } // SetDryRun sets the DryRun field's value. -func (s *CreateVpnGatewayInput) SetDryRun(v bool) *CreateVpnGatewayInput { +func (s *ExportClientVpnClientConfigurationInput) SetDryRun(v bool) *ExportClientVpnClientConfigurationInput { s.DryRun = &v return s } -// SetType sets the Type field's value. -func (s *CreateVpnGatewayInput) SetType(v string) *CreateVpnGatewayInput { - s.Type = &v - return s -} - -// Contains the output of CreateVpnGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGatewayResult -type CreateVpnGatewayOutput struct { +type ExportClientVpnClientConfigurationOutput struct { _ struct{} `type:"structure"` - // Information about the virtual private gateway. - VpnGateway *VpnGateway `locationName:"vpnGateway" type:"structure"` + // The contents of the Client VPN endpoint configuration file. + ClientConfiguration *string `locationName:"clientConfiguration" type:"string"` } // String returns the string representation -func (s CreateVpnGatewayOutput) String() string { +func (s ExportClientVpnClientConfigurationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CreateVpnGatewayOutput) GoString() string { +func (s ExportClientVpnClientConfigurationOutput) GoString() string { return s.String() } -// SetVpnGateway sets the VpnGateway field's value. -func (s *CreateVpnGatewayOutput) SetVpnGateway(v *VpnGateway) *CreateVpnGatewayOutput { - s.VpnGateway = v +// SetClientConfiguration sets the ClientConfiguration field's value. +func (s *ExportClientVpnClientConfigurationOutput) SetClientConfiguration(v string) *ExportClientVpnClientConfigurationOutput { + s.ClientConfiguration = &v return s } -// Describes a customer gateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CustomerGateway -type CustomerGateway struct { +type ExportImageInput struct { _ struct{} `type:"structure"` - // The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number - // (ASN). - BgpAsn *string `locationName:"bgpAsn" type:"string"` + // Token to enable idempotency for export image requests. + ClientToken *string `type:"string" idempotencyToken:"true"` - // The ID of the customer gateway. - CustomerGatewayId *string `locationName:"customerGatewayId" type:"string"` + // A description of the image being exported. The maximum length is 255 bytes. + Description *string `type:"string"` - // The Internet-routable IP address of the customer gateway's outside interface. - IpAddress *string `locationName:"ipAddress" type:"string"` + // The disk image format. + // + // DiskImageFormat is a required field + DiskImageFormat *string `type:"string" required:"true" enum:"DiskImageFormat"` - // The current state of the customer gateway (pending | available | deleting - // | deleted). - State *string `locationName:"state" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // Any tags assigned to the customer gateway. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The ID of the image. + // + // ImageId is a required field + ImageId *string `type:"string" required:"true"` - // The type of VPN connection the customer gateway supports (ipsec.1). - Type *string `locationName:"type" type:"string"` + // The name of the role that grants VM Import/Export permission to export images + // to your S3 bucket. If this parameter is not specified, the default role is + // named 'vmimport'. + RoleName *string `type:"string"` + + // Information about the destination S3 bucket. The bucket must exist and grant + // WRITE and READ_ACP permissions to the AWS account vm-import-export@amazon.com. + // + // S3ExportLocation is a required field + S3ExportLocation *ExportTaskS3LocationRequest `type:"structure" required:"true"` } // String returns the string representation -func (s CustomerGateway) String() string { +func (s ExportImageInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s CustomerGateway) GoString() string { +func (s ExportImageInput) GoString() string { return s.String() } -// SetBgpAsn sets the BgpAsn field's value. -func (s *CustomerGateway) SetBgpAsn(v string) *CustomerGateway { - s.BgpAsn = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ExportImageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ExportImageInput"} + if s.DiskImageFormat == nil { + invalidParams.Add(request.NewErrParamRequired("DiskImageFormat")) + } + if s.ImageId == nil { + invalidParams.Add(request.NewErrParamRequired("ImageId")) + } + if s.S3ExportLocation == nil { + invalidParams.Add(request.NewErrParamRequired("S3ExportLocation")) + } + if s.S3ExportLocation != nil { + if err := s.S3ExportLocation.Validate(); err != nil { + invalidParams.AddNested("S3ExportLocation", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *ExportImageInput) SetClientToken(v string) *ExportImageInput { + s.ClientToken = &v return s } -// SetCustomerGatewayId sets the CustomerGatewayId field's value. -func (s *CustomerGateway) SetCustomerGatewayId(v string) *CustomerGateway { - s.CustomerGatewayId = &v +// SetDescription sets the Description field's value. +func (s *ExportImageInput) SetDescription(v string) *ExportImageInput { + s.Description = &v return s } -// SetIpAddress sets the IpAddress field's value. -func (s *CustomerGateway) SetIpAddress(v string) *CustomerGateway { - s.IpAddress = &v +// SetDiskImageFormat sets the DiskImageFormat field's value. +func (s *ExportImageInput) SetDiskImageFormat(v string) *ExportImageInput { + s.DiskImageFormat = &v return s } -// SetState sets the State field's value. -func (s *CustomerGateway) SetState(v string) *CustomerGateway { - s.State = &v +// SetDryRun sets the DryRun field's value. +func (s *ExportImageInput) SetDryRun(v bool) *ExportImageInput { + s.DryRun = &v return s } -// SetTags sets the Tags field's value. -func (s *CustomerGateway) SetTags(v []*Tag) *CustomerGateway { - s.Tags = v +// SetImageId sets the ImageId field's value. +func (s *ExportImageInput) SetImageId(v string) *ExportImageInput { + s.ImageId = &v return s } -// SetType sets the Type field's value. -func (s *CustomerGateway) SetType(v string) *CustomerGateway { - s.Type = &v +// SetRoleName sets the RoleName field's value. +func (s *ExportImageInput) SetRoleName(v string) *ExportImageInput { + s.RoleName = &v return s } -// Contains the parameters for DeleteCustomerGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGatewayRequest -type DeleteCustomerGatewayInput struct { +// SetS3ExportLocation sets the S3ExportLocation field's value. +func (s *ExportImageInput) SetS3ExportLocation(v *ExportTaskS3LocationRequest) *ExportImageInput { + s.S3ExportLocation = v + return s +} + +type ExportImageOutput struct { _ struct{} `type:"structure"` - // The ID of the customer gateway. - // - // CustomerGatewayId is a required field - CustomerGatewayId *string `type:"string" required:"true"` + // A description of the image being exported. + Description *string `locationName:"description" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The disk image format for the exported image. + DiskImageFormat *string `locationName:"diskImageFormat" type:"string" enum:"DiskImageFormat"` + + // The ID of the export image task. + ExportImageTaskId *string `locationName:"exportImageTaskId" type:"string"` + + // The ID of the image. + ImageId *string `locationName:"imageId" type:"string"` + + // The percent complete of the export image task. + Progress *string `locationName:"progress" type:"string"` + + // The name of the role that grants VM Import/Export permission to export images + // to your S3 bucket. + RoleName *string `locationName:"roleName" type:"string"` + + // Information about the destination S3 bucket. + S3ExportLocation *ExportTaskS3Location `locationName:"s3ExportLocation" type:"structure"` + + // The status of the export image task. The possible values are active, completed, + // deleting, and deleted. + Status *string `locationName:"status" type:"string"` + + // The status message for the export image task. + StatusMessage *string `locationName:"statusMessage" type:"string"` } // String returns the string representation -func (s DeleteCustomerGatewayInput) String() string { +func (s ExportImageOutput) String() string { return awsutil.Prettify(s) } -// GoString returns the string representation -func (s DeleteCustomerGatewayInput) GoString() string { - return s.String() +// GoString returns the string representation +func (s ExportImageOutput) GoString() string { + return s.String() +} + +// SetDescription sets the Description field's value. +func (s *ExportImageOutput) SetDescription(v string) *ExportImageOutput { + s.Description = &v + return s +} + +// SetDiskImageFormat sets the DiskImageFormat field's value. +func (s *ExportImageOutput) SetDiskImageFormat(v string) *ExportImageOutput { + s.DiskImageFormat = &v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteCustomerGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteCustomerGatewayInput"} - if s.CustomerGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("CustomerGatewayId")) - } +// SetExportImageTaskId sets the ExportImageTaskId field's value. +func (s *ExportImageOutput) SetExportImageTaskId(v string) *ExportImageOutput { + s.ExportImageTaskId = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetImageId sets the ImageId field's value. +func (s *ExportImageOutput) SetImageId(v string) *ExportImageOutput { + s.ImageId = &v + return s } -// SetCustomerGatewayId sets the CustomerGatewayId field's value. -func (s *DeleteCustomerGatewayInput) SetCustomerGatewayId(v string) *DeleteCustomerGatewayInput { - s.CustomerGatewayId = &v +// SetProgress sets the Progress field's value. +func (s *ExportImageOutput) SetProgress(v string) *ExportImageOutput { + s.Progress = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteCustomerGatewayInput) SetDryRun(v bool) *DeleteCustomerGatewayInput { - s.DryRun = &v +// SetRoleName sets the RoleName field's value. +func (s *ExportImageOutput) SetRoleName(v string) *ExportImageOutput { + s.RoleName = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGatewayOutput -type DeleteCustomerGatewayOutput struct { - _ struct{} `type:"structure"` +// SetS3ExportLocation sets the S3ExportLocation field's value. +func (s *ExportImageOutput) SetS3ExportLocation(v *ExportTaskS3Location) *ExportImageOutput { + s.S3ExportLocation = v + return s } -// String returns the string representation -func (s DeleteCustomerGatewayOutput) String() string { - return awsutil.Prettify(s) +// SetStatus sets the Status field's value. +func (s *ExportImageOutput) SetStatus(v string) *ExportImageOutput { + s.Status = &v + return s } -// GoString returns the string representation -func (s DeleteCustomerGatewayOutput) GoString() string { - return s.String() +// SetStatusMessage sets the StatusMessage field's value. +func (s *ExportImageOutput) SetStatusMessage(v string) *ExportImageOutput { + s.StatusMessage = &v + return s } -// Contains the parameters for DeleteDhcpOptions. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptionsRequest -type DeleteDhcpOptionsInput struct { +// Describes an export image task. +type ExportImageTask struct { _ struct{} `type:"structure"` - // The ID of the DHCP options set. - // - // DhcpOptionsId is a required field - DhcpOptionsId *string `type:"string" required:"true"` + // A description of the image being exported. + Description *string `locationName:"description" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ID of the export image task. + ExportImageTaskId *string `locationName:"exportImageTaskId" type:"string"` + + // The ID of the image. + ImageId *string `locationName:"imageId" type:"string"` + + // The percent complete of the export image task. + Progress *string `locationName:"progress" type:"string"` + + // Information about the destination S3 bucket. + S3ExportLocation *ExportTaskS3Location `locationName:"s3ExportLocation" type:"structure"` + + // The status of the export image task. The possible values are active, completed, + // deleting, and deleted. + Status *string `locationName:"status" type:"string"` + + // The status message for the export image task. + StatusMessage *string `locationName:"statusMessage" type:"string"` } // String returns the string representation -func (s DeleteDhcpOptionsInput) String() string { +func (s ExportImageTask) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteDhcpOptionsInput) GoString() string { +func (s ExportImageTask) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteDhcpOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteDhcpOptionsInput"} - if s.DhcpOptionsId == nil { - invalidParams.Add(request.NewErrParamRequired("DhcpOptionsId")) - } +// SetDescription sets the Description field's value. +func (s *ExportImageTask) SetDescription(v string) *ExportImageTask { + s.Description = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetExportImageTaskId sets the ExportImageTaskId field's value. +func (s *ExportImageTask) SetExportImageTaskId(v string) *ExportImageTask { + s.ExportImageTaskId = &v + return s } -// SetDhcpOptionsId sets the DhcpOptionsId field's value. -func (s *DeleteDhcpOptionsInput) SetDhcpOptionsId(v string) *DeleteDhcpOptionsInput { - s.DhcpOptionsId = &v +// SetImageId sets the ImageId field's value. +func (s *ExportImageTask) SetImageId(v string) *ExportImageTask { + s.ImageId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteDhcpOptionsInput) SetDryRun(v bool) *DeleteDhcpOptionsInput { - s.DryRun = &v +// SetProgress sets the Progress field's value. +func (s *ExportImageTask) SetProgress(v string) *ExportImageTask { + s.Progress = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptionsOutput -type DeleteDhcpOptionsOutput struct { - _ struct{} `type:"structure"` +// SetS3ExportLocation sets the S3ExportLocation field's value. +func (s *ExportImageTask) SetS3ExportLocation(v *ExportTaskS3Location) *ExportImageTask { + s.S3ExportLocation = v + return s } -// String returns the string representation -func (s DeleteDhcpOptionsOutput) String() string { - return awsutil.Prettify(s) +// SetStatus sets the Status field's value. +func (s *ExportImageTask) SetStatus(v string) *ExportImageTask { + s.Status = &v + return s } -// GoString returns the string representation -func (s DeleteDhcpOptionsOutput) GoString() string { - return s.String() +// SetStatusMessage sets the StatusMessage field's value. +func (s *ExportImageTask) SetStatusMessage(v string) *ExportImageTask { + s.StatusMessage = &v + return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGatewayRequest -type DeleteEgressOnlyInternetGatewayInput struct { +// Describes an instance export task. +type ExportTask struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // A description of the resource being exported. + Description *string `locationName:"description" type:"string"` - // The ID of the egress-only Internet gateway. - // - // EgressOnlyInternetGatewayId is a required field - EgressOnlyInternetGatewayId *string `type:"string" required:"true"` + // The ID of the export task. + ExportTaskId *string `locationName:"exportTaskId" type:"string"` + + // Information about the export task. + ExportToS3Task *ExportToS3Task `locationName:"exportToS3" type:"structure"` + + // Information about the instance to export. + InstanceExportDetails *InstanceExportDetails `locationName:"instanceExport" type:"structure"` + + // The state of the export task. + State *string `locationName:"state" type:"string" enum:"ExportTaskState"` + + // The status message related to the export task. + StatusMessage *string `locationName:"statusMessage" type:"string"` } // String returns the string representation -func (s DeleteEgressOnlyInternetGatewayInput) String() string { +func (s ExportTask) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteEgressOnlyInternetGatewayInput) GoString() string { +func (s ExportTask) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteEgressOnlyInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteEgressOnlyInternetGatewayInput"} - if s.EgressOnlyInternetGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("EgressOnlyInternetGatewayId")) - } +// SetDescription sets the Description field's value. +func (s *ExportTask) SetDescription(v string) *ExportTask { + s.Description = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetExportTaskId sets the ExportTaskId field's value. +func (s *ExportTask) SetExportTaskId(v string) *ExportTask { + s.ExportTaskId = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteEgressOnlyInternetGatewayInput) SetDryRun(v bool) *DeleteEgressOnlyInternetGatewayInput { - s.DryRun = &v +// SetExportToS3Task sets the ExportToS3Task field's value. +func (s *ExportTask) SetExportToS3Task(v *ExportToS3Task) *ExportTask { + s.ExportToS3Task = v return s } -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *DeleteEgressOnlyInternetGatewayInput) SetEgressOnlyInternetGatewayId(v string) *DeleteEgressOnlyInternetGatewayInput { - s.EgressOnlyInternetGatewayId = &v +// SetInstanceExportDetails sets the InstanceExportDetails field's value. +func (s *ExportTask) SetInstanceExportDetails(v *InstanceExportDetails) *ExportTask { + s.InstanceExportDetails = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGatewayResult -type DeleteEgressOnlyInternetGatewayOutput struct { +// SetState sets the State field's value. +func (s *ExportTask) SetState(v string) *ExportTask { + s.State = &v + return s +} + +// SetStatusMessage sets the StatusMessage field's value. +func (s *ExportTask) SetStatusMessage(v string) *ExportTask { + s.StatusMessage = &v + return s +} + +// Describes the destination for an export image task. +type ExportTaskS3Location struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. - ReturnCode *bool `locationName:"returnCode" type:"boolean"` + // The destination S3 bucket. + S3Bucket *string `locationName:"s3Bucket" type:"string"` + + // The prefix (logical hierarchy) in the bucket. + S3Prefix *string `locationName:"s3Prefix" type:"string"` } // String returns the string representation -func (s DeleteEgressOnlyInternetGatewayOutput) String() string { +func (s ExportTaskS3Location) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteEgressOnlyInternetGatewayOutput) GoString() string { +func (s ExportTaskS3Location) GoString() string { return s.String() } -// SetReturnCode sets the ReturnCode field's value. -func (s *DeleteEgressOnlyInternetGatewayOutput) SetReturnCode(v bool) *DeleteEgressOnlyInternetGatewayOutput { - s.ReturnCode = &v +// SetS3Bucket sets the S3Bucket field's value. +func (s *ExportTaskS3Location) SetS3Bucket(v string) *ExportTaskS3Location { + s.S3Bucket = &v return s } -// Contains the parameters for DeleteFlowLogs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogsRequest -type DeleteFlowLogsInput struct { +// SetS3Prefix sets the S3Prefix field's value. +func (s *ExportTaskS3Location) SetS3Prefix(v string) *ExportTaskS3Location { + s.S3Prefix = &v + return s +} + +// Describes the destination for an export image task. +type ExportTaskS3LocationRequest struct { _ struct{} `type:"structure"` - // One or more flow log IDs. + // The destination S3 bucket. // - // FlowLogIds is a required field - FlowLogIds []*string `locationName:"FlowLogId" locationNameList:"item" type:"list" required:"true"` + // S3Bucket is a required field + S3Bucket *string `type:"string" required:"true"` + + // The prefix (logical hierarchy) in the bucket. + S3Prefix *string `type:"string"` } // String returns the string representation -func (s DeleteFlowLogsInput) String() string { +func (s ExportTaskS3LocationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteFlowLogsInput) GoString() string { +func (s ExportTaskS3LocationRequest) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteFlowLogsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteFlowLogsInput"} - if s.FlowLogIds == nil { - invalidParams.Add(request.NewErrParamRequired("FlowLogIds")) +func (s *ExportTaskS3LocationRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ExportTaskS3LocationRequest"} + if s.S3Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("S3Bucket")) } if invalidParams.Len() > 0 { @@ -22889,136 +66273,192 @@ func (s *DeleteFlowLogsInput) Validate() error { return nil } -// SetFlowLogIds sets the FlowLogIds field's value. -func (s *DeleteFlowLogsInput) SetFlowLogIds(v []*string) *DeleteFlowLogsInput { - s.FlowLogIds = v +// SetS3Bucket sets the S3Bucket field's value. +func (s *ExportTaskS3LocationRequest) SetS3Bucket(v string) *ExportTaskS3LocationRequest { + s.S3Bucket = &v return s } -// Contains the output of DeleteFlowLogs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogsResult -type DeleteFlowLogsOutput struct { +// SetS3Prefix sets the S3Prefix field's value. +func (s *ExportTaskS3LocationRequest) SetS3Prefix(v string) *ExportTaskS3LocationRequest { + s.S3Prefix = &v + return s +} + +// Describes the format and location for an instance export task. +type ExportToS3Task struct { _ struct{} `type:"structure"` - // Information about the flow logs that could not be deleted successfully. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` + // The container format used to combine disk images with metadata (such as OVF). + // If absent, only the disk image is exported. + ContainerFormat *string `locationName:"containerFormat" type:"string" enum:"ContainerFormat"` + + // The format for the exported image. + DiskImageFormat *string `locationName:"diskImageFormat" type:"string" enum:"DiskImageFormat"` + + // The S3 bucket for the destination image. The destination bucket must exist + // and grant WRITE and READ_ACP permissions to the AWS account vm-import-export@amazon.com. + S3Bucket *string `locationName:"s3Bucket" type:"string"` + + // The encryption key for your S3 bucket. + S3Key *string `locationName:"s3Key" type:"string"` } // String returns the string representation -func (s DeleteFlowLogsOutput) String() string { +func (s ExportToS3Task) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteFlowLogsOutput) GoString() string { +func (s ExportToS3Task) GoString() string { return s.String() } -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *DeleteFlowLogsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteFlowLogsOutput { - s.Unsuccessful = v +// SetContainerFormat sets the ContainerFormat field's value. +func (s *ExportToS3Task) SetContainerFormat(v string) *ExportToS3Task { + s.ContainerFormat = &v return s } -// Contains the parameters for DeleteInternetGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGatewayRequest -type DeleteInternetGatewayInput struct { +// SetDiskImageFormat sets the DiskImageFormat field's value. +func (s *ExportToS3Task) SetDiskImageFormat(v string) *ExportToS3Task { + s.DiskImageFormat = &v + return s +} + +// SetS3Bucket sets the S3Bucket field's value. +func (s *ExportToS3Task) SetS3Bucket(v string) *ExportToS3Task { + s.S3Bucket = &v + return s +} + +// SetS3Key sets the S3Key field's value. +func (s *ExportToS3Task) SetS3Key(v string) *ExportToS3Task { + s.S3Key = &v + return s +} + +// Describes an instance export task. +type ExportToS3TaskSpecification struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The container format used to combine disk images with metadata (such as OVF). + // If absent, only the disk image is exported. + ContainerFormat *string `locationName:"containerFormat" type:"string" enum:"ContainerFormat"` - // The ID of the Internet gateway. - // - // InternetGatewayId is a required field - InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` + // The format for the exported image. + DiskImageFormat *string `locationName:"diskImageFormat" type:"string" enum:"DiskImageFormat"` + + // The S3 bucket for the destination image. The destination bucket must exist + // and grant WRITE and READ_ACP permissions to the AWS account vm-import-export@amazon.com. + S3Bucket *string `locationName:"s3Bucket" type:"string"` + + // The image is written to a single object in the S3 bucket at the S3 key s3prefix + // + exportTaskId + '.' + diskImageFormat. + S3Prefix *string `locationName:"s3Prefix" type:"string"` } // String returns the string representation -func (s DeleteInternetGatewayInput) String() string { +func (s ExportToS3TaskSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteInternetGatewayInput) GoString() string { +func (s ExportToS3TaskSpecification) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteInternetGatewayInput"} - if s.InternetGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteInternetGatewayInput) SetDryRun(v bool) *DeleteInternetGatewayInput { - s.DryRun = &v +// SetContainerFormat sets the ContainerFormat field's value. +func (s *ExportToS3TaskSpecification) SetContainerFormat(v string) *ExportToS3TaskSpecification { + s.ContainerFormat = &v return s } -// SetInternetGatewayId sets the InternetGatewayId field's value. -func (s *DeleteInternetGatewayInput) SetInternetGatewayId(v string) *DeleteInternetGatewayInput { - s.InternetGatewayId = &v +// SetDiskImageFormat sets the DiskImageFormat field's value. +func (s *ExportToS3TaskSpecification) SetDiskImageFormat(v string) *ExportToS3TaskSpecification { + s.DiskImageFormat = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGatewayOutput -type DeleteInternetGatewayOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteInternetGatewayOutput) String() string { - return awsutil.Prettify(s) +// SetS3Bucket sets the S3Bucket field's value. +func (s *ExportToS3TaskSpecification) SetS3Bucket(v string) *ExportToS3TaskSpecification { + s.S3Bucket = &v + return s } -// GoString returns the string representation -func (s DeleteInternetGatewayOutput) GoString() string { - return s.String() +// SetS3Prefix sets the S3Prefix field's value. +func (s *ExportToS3TaskSpecification) SetS3Prefix(v string) *ExportToS3TaskSpecification { + s.S3Prefix = &v + return s } -// Contains the parameters for DeleteKeyPair. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPairRequest -type DeleteKeyPairInput struct { +type ExportTransitGatewayRoutesInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The name of the key pair. + // One or more filters. The possible values are: // - // KeyName is a required field - KeyName *string `type:"string" required:"true"` + // * attachment.transit-gateway-attachment-id - The id of the transit gateway + // attachment. + // + // * attachment.resource-id - The resource id of the transit gateway attachment. + // + // * route-search.exact-match - The exact match of the specified filter. + // + // * route-search.longest-prefix-match - The longest prefix that matches + // the route. + // + // * route-search.subnet-of-match - The routes with a subnet that match the + // specified CIDR filter. + // + // * route-search.supernet-of-match - The routes with a CIDR that encompass + // the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 + // routes in your route table and you specify supernet-of-match as 10.0.1.0/30, + // then the result returns 10.0.1.0/29. + // + // * state - The state of the attachment (available | deleted | deleting + // | failed | modifying | pendingAcceptance | pending | rollingBack | rejected + // | rejecting). + // + // * transit-gateway-route-destination-cidr-block - The CIDR range. + // + // * type - The type of route (active | blackhole). + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The name of the S3 bucket. + // + // S3Bucket is a required field + S3Bucket *string `type:"string" required:"true"` + + // The ID of the route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s DeleteKeyPairInput) String() string { +func (s ExportTransitGatewayRoutesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteKeyPairInput) GoString() string { +func (s ExportTransitGatewayRoutesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteKeyPairInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteKeyPairInput"} - if s.KeyName == nil { - invalidParams.Add(request.NewErrParamRequired("KeyName")) +func (s *ExportTransitGatewayRoutesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ExportTransitGatewayRoutesInput"} + if s.S3Bucket == nil { + invalidParams.Add(request.NewErrParamRequired("S3Bucket")) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) } if invalidParams.Len() > 0 { @@ -23028,358 +66468,428 @@ func (s *DeleteKeyPairInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *DeleteKeyPairInput) SetDryRun(v bool) *DeleteKeyPairInput { +func (s *ExportTransitGatewayRoutesInput) SetDryRun(v bool) *ExportTransitGatewayRoutesInput { s.DryRun = &v return s } -// SetKeyName sets the KeyName field's value. -func (s *DeleteKeyPairInput) SetKeyName(v string) *DeleteKeyPairInput { - s.KeyName = &v +// SetFilters sets the Filters field's value. +func (s *ExportTransitGatewayRoutesInput) SetFilters(v []*Filter) *ExportTransitGatewayRoutesInput { + s.Filters = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPairOutput -type DeleteKeyPairOutput struct { +// SetS3Bucket sets the S3Bucket field's value. +func (s *ExportTransitGatewayRoutesInput) SetS3Bucket(v string) *ExportTransitGatewayRoutesInput { + s.S3Bucket = &v + return s +} + +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *ExportTransitGatewayRoutesInput) SetTransitGatewayRouteTableId(v string) *ExportTransitGatewayRoutesInput { + s.TransitGatewayRouteTableId = &v + return s +} + +type ExportTransitGatewayRoutesOutput struct { _ struct{} `type:"structure"` + + // The URL of the exported file in Amazon S3. For example, s3://bucket_name/VPCTransitGateway/TransitGatewayRouteTables/file_name. + S3Location *string `locationName:"s3Location" type:"string"` } // String returns the string representation -func (s DeleteKeyPairOutput) String() string { +func (s ExportTransitGatewayRoutesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteKeyPairOutput) GoString() string { +func (s ExportTransitGatewayRoutesOutput) GoString() string { return s.String() } -// Contains the parameters for DeleteNatGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGatewayRequest -type DeleteNatGatewayInput struct { +// SetS3Location sets the S3Location field's value. +func (s *ExportTransitGatewayRoutesOutput) SetS3Location(v string) *ExportTransitGatewayRoutesOutput { + s.S3Location = &v + return s +} + +// Describes a Reserved Instance whose queued purchase was not deleted. +type FailedQueuedPurchaseDeletion struct { _ struct{} `type:"structure"` - // The ID of the NAT gateway. - // - // NatGatewayId is a required field - NatGatewayId *string `type:"string" required:"true"` + // The error. + Error *DeleteQueuedReservedInstancesError `locationName:"error" type:"structure"` + + // The ID of the Reserved Instance. + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` } // String returns the string representation -func (s DeleteNatGatewayInput) String() string { +func (s FailedQueuedPurchaseDeletion) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteNatGatewayInput) GoString() string { +func (s FailedQueuedPurchaseDeletion) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNatGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNatGatewayInput"} - if s.NatGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("NatGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetError sets the Error field's value. +func (s *FailedQueuedPurchaseDeletion) SetError(v *DeleteQueuedReservedInstancesError) *FailedQueuedPurchaseDeletion { + s.Error = v + return s } -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *DeleteNatGatewayInput) SetNatGatewayId(v string) *DeleteNatGatewayInput { - s.NatGatewayId = &v +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *FailedQueuedPurchaseDeletion) SetReservedInstancesId(v string) *FailedQueuedPurchaseDeletion { + s.ReservedInstancesId = &v return s } -// Contains the output of DeleteNatGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGatewayResult -type DeleteNatGatewayOutput struct { +// A filter name and value pair that is used to return a more specific list +// of results from a describe operation. Filters can be used to match a set +// of resources by specific criteria, such as tags, attributes, or IDs. The +// filters supported by a describe operation are documented with the describe +// operation. For example: +// +// * DescribeAvailabilityZones +// +// * DescribeImages +// +// * DescribeInstances +// +// * DescribeKeyPairs +// +// * DescribeSecurityGroups +// +// * DescribeSnapshots +// +// * DescribeSubnets +// +// * DescribeTags +// +// * DescribeVolumes +// +// * DescribeVpcs +type Filter struct { _ struct{} `type:"structure"` - // The ID of the NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` + // The name of the filter. Filter names are case-sensitive. + Name *string `type:"string"` + + // The filter values. Filter values are case-sensitive. + Values []*string `locationName:"Value" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DeleteNatGatewayOutput) String() string { +func (s Filter) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteNatGatewayOutput) GoString() string { +func (s Filter) GoString() string { return s.String() } -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *DeleteNatGatewayOutput) SetNatGatewayId(v string) *DeleteNatGatewayOutput { - s.NatGatewayId = &v +// SetName sets the Name field's value. +func (s *Filter) SetName(v string) *Filter { + s.Name = &v return s } -// Contains the parameters for DeleteNetworkAclEntry. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntryRequest -type DeleteNetworkAclEntryInput struct { +// SetValues sets the Values field's value. +func (s *Filter) SetValues(v []*string) *Filter { + s.Values = v + return s +} + +// Describes an EC2 Fleet. +type FleetData struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The progress of the EC2 Fleet. If there is an error, the status is error. + // After all requests are placed, the status is pending_fulfillment. If the + // size of the EC2 Fleet is equal to or greater than its target capacity, the + // status is fulfilled. If the size of the EC2 Fleet is decreased, the status + // is pending_termination while instances are terminating. + ActivityStatus *string `locationName:"activityStatus" type:"string" enum:"FleetActivityStatus"` - // Indicates whether the rule is an egress rule. + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). // - // Egress is a required field - Egress *bool `locationName:"egress" type:"boolean" required:"true"` + // Constraints: Maximum 64 ASCII characters + ClientToken *string `locationName:"clientToken" type:"string"` - // The ID of the network ACL. - // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` + // The creation date and time of the EC2 Fleet. + CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - // The rule number of the entry to delete. - // - // RuleNumber is a required field - RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` -} + // Information about the instances that could not be launched by the fleet. + // Valid only when Type is set to instant. + Errors []*DescribeFleetError `locationName:"errorSet" locationNameList:"item" type:"list"` -// String returns the string representation -func (s DeleteNetworkAclEntryInput) String() string { - return awsutil.Prettify(s) -} + // Indicates whether running instances should be terminated if the target capacity + // of the EC2 Fleet is decreased below the current size of the EC2 Fleet. + ExcessCapacityTerminationPolicy *string `locationName:"excessCapacityTerminationPolicy" type:"string" enum:"FleetExcessCapacityTerminationPolicy"` -// GoString returns the string representation -func (s DeleteNetworkAclEntryInput) GoString() string { - return s.String() -} + // The ID of the EC2 Fleet. + FleetId *string `locationName:"fleetId" type:"string"` -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNetworkAclEntryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkAclEntryInput"} - if s.Egress == nil { - invalidParams.Add(request.NewErrParamRequired("Egress")) - } - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } - if s.RuleNumber == nil { - invalidParams.Add(request.NewErrParamRequired("RuleNumber")) - } + // The state of the EC2 Fleet. + FleetState *string `locationName:"fleetState" type:"string" enum:"FleetStateCode"` - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} + // The number of units fulfilled by this request compared to the set target + // capacity. + FulfilledCapacity *float64 `locationName:"fulfilledCapacity" type:"double"` + + // The number of units fulfilled by this request compared to the set target + // On-Demand capacity. + FulfilledOnDemandCapacity *float64 `locationName:"fulfilledOnDemandCapacity" type:"double"` + + // Information about the instances that were launched by the fleet. Valid only + // when Type is set to instant. + Instances []*DescribeFleetsInstances `locationName:"fleetInstanceSet" locationNameList:"item" type:"list"` + + // The launch template and overrides. + LaunchTemplateConfigs []*FleetLaunchTemplateConfig `locationName:"launchTemplateConfigs" locationNameList:"item" type:"list"` + + // The allocation strategy of On-Demand Instances in an EC2 Fleet. + OnDemandOptions *OnDemandOptions `locationName:"onDemandOptions" type:"structure"` + + // Indicates whether EC2 Fleet should replace unhealthy instances. + ReplaceUnhealthyInstances *bool `locationName:"replaceUnhealthyInstances" type:"boolean"` + + // The configuration of Spot Instances in an EC2 Fleet. + SpotOptions *SpotOptions `locationName:"spotOptions" type:"structure"` + + // The tags for an EC2 Fleet resource. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` -// SetDryRun sets the DryRun field's value. -func (s *DeleteNetworkAclEntryInput) SetDryRun(v bool) *DeleteNetworkAclEntryInput { - s.DryRun = &v - return s -} + // The number of units to request. You can choose to set the target capacity + // in terms of instances or a performance characteristic that is important to + // your application workload, such as vCPUs, memory, or I/O. If the request + // type is maintain, you can specify a target capacity of 0 and add capacity + // later. + TargetCapacitySpecification *TargetCapacitySpecification `locationName:"targetCapacitySpecification" type:"structure"` -// SetEgress sets the Egress field's value. -func (s *DeleteNetworkAclEntryInput) SetEgress(v bool) *DeleteNetworkAclEntryInput { - s.Egress = &v - return s -} + // Indicates whether running instances should be terminated when the EC2 Fleet + // expires. + TerminateInstancesWithExpiration *bool `locationName:"terminateInstancesWithExpiration" type:"boolean"` -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *DeleteNetworkAclEntryInput) SetNetworkAclId(v string) *DeleteNetworkAclEntryInput { - s.NetworkAclId = &v - return s -} + // The type of request. Indicates whether the EC2 Fleet only requests the target + // capacity, or also attempts to maintain it. If you request a certain target + // capacity, EC2 Fleet only places the required requests; it does not attempt + // to replenish instances if capacity is diminished, and does not submit requests + // in alternative capacity pools if capacity is unavailable. To maintain a certain + // target capacity, EC2 Fleet places the required requests to meet this target + // capacity. It also automatically replenishes any interrupted Spot Instances. + // Default: maintain. + Type *string `locationName:"type" type:"string" enum:"FleetType"` -// SetRuleNumber sets the RuleNumber field's value. -func (s *DeleteNetworkAclEntryInput) SetRuleNumber(v int64) *DeleteNetworkAclEntryInput { - s.RuleNumber = &v - return s -} + // The start date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // The default is to start fulfilling the request immediately. + ValidFrom *time.Time `locationName:"validFrom" type:"timestamp"` -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntryOutput -type DeleteNetworkAclEntryOutput struct { - _ struct{} `type:"structure"` + // The end date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // At this point, no new instance requests are placed or able to fulfill the + // request. The default end date is 7 days from the current date. + ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` } // String returns the string representation -func (s DeleteNetworkAclEntryOutput) String() string { +func (s FleetData) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteNetworkAclEntryOutput) GoString() string { +func (s FleetData) GoString() string { return s.String() } -// Contains the parameters for DeleteNetworkAcl. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclRequest -type DeleteNetworkAclInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetActivityStatus sets the ActivityStatus field's value. +func (s *FleetData) SetActivityStatus(v string) *FleetData { + s.ActivityStatus = &v + return s +} - // The ID of the network ACL. - // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` +// SetClientToken sets the ClientToken field's value. +func (s *FleetData) SetClientToken(v string) *FleetData { + s.ClientToken = &v + return s } -// String returns the string representation -func (s DeleteNetworkAclInput) String() string { - return awsutil.Prettify(s) +// SetCreateTime sets the CreateTime field's value. +func (s *FleetData) SetCreateTime(v time.Time) *FleetData { + s.CreateTime = &v + return s } -// GoString returns the string representation -func (s DeleteNetworkAclInput) GoString() string { - return s.String() +// SetErrors sets the Errors field's value. +func (s *FleetData) SetErrors(v []*DescribeFleetError) *FleetData { + s.Errors = v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNetworkAclInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkAclInput"} - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } +// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. +func (s *FleetData) SetExcessCapacityTerminationPolicy(v string) *FleetData { + s.ExcessCapacityTerminationPolicy = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetFleetId sets the FleetId field's value. +func (s *FleetData) SetFleetId(v string) *FleetData { + s.FleetId = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteNetworkAclInput) SetDryRun(v bool) *DeleteNetworkAclInput { - s.DryRun = &v +// SetFleetState sets the FleetState field's value. +func (s *FleetData) SetFleetState(v string) *FleetData { + s.FleetState = &v return s } -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *DeleteNetworkAclInput) SetNetworkAclId(v string) *DeleteNetworkAclInput { - s.NetworkAclId = &v +// SetFulfilledCapacity sets the FulfilledCapacity field's value. +func (s *FleetData) SetFulfilledCapacity(v float64) *FleetData { + s.FulfilledCapacity = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclOutput -type DeleteNetworkAclOutput struct { - _ struct{} `type:"structure"` +// SetFulfilledOnDemandCapacity sets the FulfilledOnDemandCapacity field's value. +func (s *FleetData) SetFulfilledOnDemandCapacity(v float64) *FleetData { + s.FulfilledOnDemandCapacity = &v + return s } -// String returns the string representation -func (s DeleteNetworkAclOutput) String() string { - return awsutil.Prettify(s) +// SetInstances sets the Instances field's value. +func (s *FleetData) SetInstances(v []*DescribeFleetsInstances) *FleetData { + s.Instances = v + return s } -// GoString returns the string representation -func (s DeleteNetworkAclOutput) GoString() string { - return s.String() +// SetLaunchTemplateConfigs sets the LaunchTemplateConfigs field's value. +func (s *FleetData) SetLaunchTemplateConfigs(v []*FleetLaunchTemplateConfig) *FleetData { + s.LaunchTemplateConfigs = v + return s } -// Contains the parameters for DeleteNetworkInterface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfaceRequest -type DeleteNetworkInterfaceInput struct { - _ struct{} `type:"structure"` +// SetOnDemandOptions sets the OnDemandOptions field's value. +func (s *FleetData) SetOnDemandOptions(v *OnDemandOptions) *FleetData { + s.OnDemandOptions = v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetReplaceUnhealthyInstances sets the ReplaceUnhealthyInstances field's value. +func (s *FleetData) SetReplaceUnhealthyInstances(v bool) *FleetData { + s.ReplaceUnhealthyInstances = &v + return s +} - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` +// SetSpotOptions sets the SpotOptions field's value. +func (s *FleetData) SetSpotOptions(v *SpotOptions) *FleetData { + s.SpotOptions = v + return s } -// String returns the string representation -func (s DeleteNetworkInterfaceInput) String() string { - return awsutil.Prettify(s) +// SetTags sets the Tags field's value. +func (s *FleetData) SetTags(v []*Tag) *FleetData { + s.Tags = v + return s } -// GoString returns the string representation -func (s DeleteNetworkInterfaceInput) GoString() string { - return s.String() +// SetTargetCapacitySpecification sets the TargetCapacitySpecification field's value. +func (s *FleetData) SetTargetCapacitySpecification(v *TargetCapacitySpecification) *FleetData { + s.TargetCapacitySpecification = v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteNetworkInterfaceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteNetworkInterfaceInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } +// SetTerminateInstancesWithExpiration sets the TerminateInstancesWithExpiration field's value. +func (s *FleetData) SetTerminateInstancesWithExpiration(v bool) *FleetData { + s.TerminateInstancesWithExpiration = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetType sets the Type field's value. +func (s *FleetData) SetType(v string) *FleetData { + s.Type = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteNetworkInterfaceInput) SetDryRun(v bool) *DeleteNetworkInterfaceInput { - s.DryRun = &v +// SetValidFrom sets the ValidFrom field's value. +func (s *FleetData) SetValidFrom(v time.Time) *FleetData { + s.ValidFrom = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *DeleteNetworkInterfaceInput) SetNetworkInterfaceId(v string) *DeleteNetworkInterfaceInput { - s.NetworkInterfaceId = &v +// SetValidUntil sets the ValidUntil field's value. +func (s *FleetData) SetValidUntil(v time.Time) *FleetData { + s.ValidUntil = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfaceOutput -type DeleteNetworkInterfaceOutput struct { +// Describes a launch template and overrides. +type FleetLaunchTemplateConfig struct { _ struct{} `type:"structure"` + + // The launch template. + LaunchTemplateSpecification *FleetLaunchTemplateSpecification `locationName:"launchTemplateSpecification" type:"structure"` + + // Any parameters that you specify override the same parameters in the launch + // template. + Overrides []*FleetLaunchTemplateOverrides `locationName:"overrides" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DeleteNetworkInterfaceOutput) String() string { +func (s FleetLaunchTemplateConfig) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteNetworkInterfaceOutput) GoString() string { +func (s FleetLaunchTemplateConfig) GoString() string { return s.String() } -// Contains the parameters for DeletePlacementGroup. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroupRequest -type DeletePlacementGroupInput struct { +// SetLaunchTemplateSpecification sets the LaunchTemplateSpecification field's value. +func (s *FleetLaunchTemplateConfig) SetLaunchTemplateSpecification(v *FleetLaunchTemplateSpecification) *FleetLaunchTemplateConfig { + s.LaunchTemplateSpecification = v + return s +} + +// SetOverrides sets the Overrides field's value. +func (s *FleetLaunchTemplateConfig) SetOverrides(v []*FleetLaunchTemplateOverrides) *FleetLaunchTemplateConfig { + s.Overrides = v + return s +} + +// Describes a launch template and overrides. +type FleetLaunchTemplateConfigRequest struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The launch template to use. You must specify either the launch template ID + // or launch template name in the request. + LaunchTemplateSpecification *FleetLaunchTemplateSpecificationRequest `type:"structure"` - // The name of the placement group. - // - // GroupName is a required field - GroupName *string `locationName:"groupName" type:"string" required:"true"` + // Any parameters that you specify override the same parameters in the launch + // template. + Overrides []*FleetLaunchTemplateOverridesRequest `locationNameList:"item" type:"list"` } // String returns the string representation -func (s DeletePlacementGroupInput) String() string { +func (s FleetLaunchTemplateConfigRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeletePlacementGroupInput) GoString() string { +func (s FleetLaunchTemplateConfigRequest) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DeletePlacementGroupInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeletePlacementGroupInput"} - if s.GroupName == nil { - invalidParams.Add(request.NewErrParamRequired("GroupName")) +func (s *FleetLaunchTemplateConfigRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "FleetLaunchTemplateConfigRequest"} + if s.LaunchTemplateSpecification != nil { + if err := s.LaunchTemplateSpecification.Validate(); err != nil { + invalidParams.AddNested("LaunchTemplateSpecification", err.(request.ErrInvalidParams)) + } } if invalidParams.Len() > 0 { @@ -23388,281 +66898,272 @@ func (s *DeletePlacementGroupInput) Validate() error { return nil } -// SetDryRun sets the DryRun field's value. -func (s *DeletePlacementGroupInput) SetDryRun(v bool) *DeletePlacementGroupInput { - s.DryRun = &v +// SetLaunchTemplateSpecification sets the LaunchTemplateSpecification field's value. +func (s *FleetLaunchTemplateConfigRequest) SetLaunchTemplateSpecification(v *FleetLaunchTemplateSpecificationRequest) *FleetLaunchTemplateConfigRequest { + s.LaunchTemplateSpecification = v return s } -// SetGroupName sets the GroupName field's value. -func (s *DeletePlacementGroupInput) SetGroupName(v string) *DeletePlacementGroupInput { - s.GroupName = &v +// SetOverrides sets the Overrides field's value. +func (s *FleetLaunchTemplateConfigRequest) SetOverrides(v []*FleetLaunchTemplateOverridesRequest) *FleetLaunchTemplateConfigRequest { + s.Overrides = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroupOutput -type DeletePlacementGroupOutput struct { +// Describes overrides for a launch template. +type FleetLaunchTemplateOverrides struct { _ struct{} `type:"structure"` -} -// String returns the string representation -func (s DeletePlacementGroupOutput) String() string { - return awsutil.Prettify(s) -} + // The Availability Zone in which to launch the instances. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` -// GoString returns the string representation -func (s DeletePlacementGroupOutput) GoString() string { - return s.String() -} + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` -// Contains the parameters for DeleteRoute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteRequest -type DeleteRouteInput struct { - _ struct{} `type:"structure"` + // The maximum price per unit hour that you are willing to pay for a Spot Instance. + MaxPrice *string `locationName:"maxPrice" type:"string"` - // The IPv4 CIDR range for the route. The value you specify must match the CIDR - // for the route exactly. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` + // The location where the instance launched, if applicable. + Placement *PlacementResponse `locationName:"placement" type:"structure"` - // The IPv6 CIDR range for the route. The value you specify must match the CIDR - // for the route exactly. - DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` + // The priority for the launch template override. If AllocationStrategy is set + // to prioritized, EC2 Fleet uses priority to determine which launch template + // override to use first in fulfilling On-Demand capacity. The highest priority + // is launched first. Valid values are whole numbers starting at 0. The lower + // the number, the higher the priority. If no number is set, the override has + // the lowest priority. + Priority *float64 `locationName:"priority" type:"double"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ID of the subnet in which to launch the instances. + SubnetId *string `locationName:"subnetId" type:"string"` - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` + // The number of units provided by the specified instance type. + WeightedCapacity *float64 `locationName:"weightedCapacity" type:"double"` } // String returns the string representation -func (s DeleteRouteInput) String() string { +func (s FleetLaunchTemplateOverrides) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteRouteInput) GoString() string { +func (s FleetLaunchTemplateOverrides) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteRouteInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *DeleteRouteInput) SetDestinationCidrBlock(v string) *DeleteRouteInput { - s.DestinationCidrBlock = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *FleetLaunchTemplateOverrides) SetAvailabilityZone(v string) *FleetLaunchTemplateOverrides { + s.AvailabilityZone = &v return s } -// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. -func (s *DeleteRouteInput) SetDestinationIpv6CidrBlock(v string) *DeleteRouteInput { - s.DestinationIpv6CidrBlock = &v +// SetInstanceType sets the InstanceType field's value. +func (s *FleetLaunchTemplateOverrides) SetInstanceType(v string) *FleetLaunchTemplateOverrides { + s.InstanceType = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteRouteInput) SetDryRun(v bool) *DeleteRouteInput { - s.DryRun = &v +// SetMaxPrice sets the MaxPrice field's value. +func (s *FleetLaunchTemplateOverrides) SetMaxPrice(v string) *FleetLaunchTemplateOverrides { + s.MaxPrice = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *DeleteRouteInput) SetRouteTableId(v string) *DeleteRouteInput { - s.RouteTableId = &v +// SetPlacement sets the Placement field's value. +func (s *FleetLaunchTemplateOverrides) SetPlacement(v *PlacementResponse) *FleetLaunchTemplateOverrides { + s.Placement = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteOutput -type DeleteRouteOutput struct { - _ struct{} `type:"structure"` +// SetPriority sets the Priority field's value. +func (s *FleetLaunchTemplateOverrides) SetPriority(v float64) *FleetLaunchTemplateOverrides { + s.Priority = &v + return s } -// String returns the string representation -func (s DeleteRouteOutput) String() string { - return awsutil.Prettify(s) +// SetSubnetId sets the SubnetId field's value. +func (s *FleetLaunchTemplateOverrides) SetSubnetId(v string) *FleetLaunchTemplateOverrides { + s.SubnetId = &v + return s } -// GoString returns the string representation -func (s DeleteRouteOutput) GoString() string { - return s.String() +// SetWeightedCapacity sets the WeightedCapacity field's value. +func (s *FleetLaunchTemplateOverrides) SetWeightedCapacity(v float64) *FleetLaunchTemplateOverrides { + s.WeightedCapacity = &v + return s } -// Contains the parameters for DeleteRouteTable. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTableRequest -type DeleteRouteTableInput struct { +// Describes overrides for a launch template. +type FleetLaunchTemplateOverridesRequest struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The Availability Zone in which to launch the instances. + AvailabilityZone *string `type:"string"` - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` + // The instance type. + InstanceType *string `type:"string" enum:"InstanceType"` + + // The maximum price per unit hour that you are willing to pay for a Spot Instance. + MaxPrice *string `type:"string"` + + // The location where the instance launched, if applicable. + Placement *Placement `type:"structure"` + + // The priority for the launch template override. If AllocationStrategy is set + // to prioritized, EC2 Fleet uses priority to determine which launch template + // override to use first in fulfilling On-Demand capacity. The highest priority + // is launched first. Valid values are whole numbers starting at 0. The lower + // the number, the higher the priority. If no number is set, the launch template + // override has the lowest priority. + Priority *float64 `type:"double"` + + // The ID of the subnet in which to launch the instances. + SubnetId *string `type:"string"` + + // The number of units provided by the specified instance type. + WeightedCapacity *float64 `type:"double"` } // String returns the string representation -func (s DeleteRouteTableInput) String() string { +func (s FleetLaunchTemplateOverridesRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteRouteTableInput) GoString() string { +func (s FleetLaunchTemplateOverridesRequest) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteRouteTableInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *FleetLaunchTemplateOverridesRequest) SetAvailabilityZone(v string) *FleetLaunchTemplateOverridesRequest { + s.AvailabilityZone = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetInstanceType sets the InstanceType field's value. +func (s *FleetLaunchTemplateOverridesRequest) SetInstanceType(v string) *FleetLaunchTemplateOverridesRequest { + s.InstanceType = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteRouteTableInput) SetDryRun(v bool) *DeleteRouteTableInput { - s.DryRun = &v +// SetMaxPrice sets the MaxPrice field's value. +func (s *FleetLaunchTemplateOverridesRequest) SetMaxPrice(v string) *FleetLaunchTemplateOverridesRequest { + s.MaxPrice = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *DeleteRouteTableInput) SetRouteTableId(v string) *DeleteRouteTableInput { - s.RouteTableId = &v +// SetPlacement sets the Placement field's value. +func (s *FleetLaunchTemplateOverridesRequest) SetPlacement(v *Placement) *FleetLaunchTemplateOverridesRequest { + s.Placement = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTableOutput -type DeleteRouteTableOutput struct { - _ struct{} `type:"structure"` +// SetPriority sets the Priority field's value. +func (s *FleetLaunchTemplateOverridesRequest) SetPriority(v float64) *FleetLaunchTemplateOverridesRequest { + s.Priority = &v + return s } -// String returns the string representation -func (s DeleteRouteTableOutput) String() string { - return awsutil.Prettify(s) +// SetSubnetId sets the SubnetId field's value. +func (s *FleetLaunchTemplateOverridesRequest) SetSubnetId(v string) *FleetLaunchTemplateOverridesRequest { + s.SubnetId = &v + return s } -// GoString returns the string representation -func (s DeleteRouteTableOutput) GoString() string { - return s.String() +// SetWeightedCapacity sets the WeightedCapacity field's value. +func (s *FleetLaunchTemplateOverridesRequest) SetWeightedCapacity(v float64) *FleetLaunchTemplateOverridesRequest { + s.WeightedCapacity = &v + return s } -// Contains the parameters for DeleteSecurityGroup. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroupRequest -type DeleteSecurityGroupInput struct { +// Describes a launch template. +type FleetLaunchTemplateSpecification struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ID of the launch template. You must specify either a template ID or a + // template name. + LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` - // The ID of the security group. Required for a nondefault VPC. - GroupId *string `type:"string"` + // The name of the launch template. You must specify either a template name + // or a template ID. + LaunchTemplateName *string `locationName:"launchTemplateName" min:"3" type:"string"` - // [EC2-Classic, default VPC] The name of the security group. You can specify - // either the security group name or the security group ID. - GroupName *string `type:"string"` + // The version number of the launch template. You must specify a version number. + Version *string `locationName:"version" type:"string"` } // String returns the string representation -func (s DeleteSecurityGroupInput) String() string { +func (s FleetLaunchTemplateSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteSecurityGroupInput) GoString() string { +func (s FleetLaunchTemplateSpecification) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DeleteSecurityGroupInput) SetDryRun(v bool) *DeleteSecurityGroupInput { - s.DryRun = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *FleetLaunchTemplateSpecification) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "FleetLaunchTemplateSpecification"} + if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { + invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) + } -// SetGroupId sets the GroupId field's value. -func (s *DeleteSecurityGroupInput) SetGroupId(v string) *DeleteSecurityGroupInput { - s.GroupId = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetGroupName sets the GroupName field's value. -func (s *DeleteSecurityGroupInput) SetGroupName(v string) *DeleteSecurityGroupInput { - s.GroupName = &v +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *FleetLaunchTemplateSpecification) SetLaunchTemplateId(v string) *FleetLaunchTemplateSpecification { + s.LaunchTemplateId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroupOutput -type DeleteSecurityGroupOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DeleteSecurityGroupOutput) String() string { - return awsutil.Prettify(s) +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *FleetLaunchTemplateSpecification) SetLaunchTemplateName(v string) *FleetLaunchTemplateSpecification { + s.LaunchTemplateName = &v + return s } -// GoString returns the string representation -func (s DeleteSecurityGroupOutput) GoString() string { - return s.String() +// SetVersion sets the Version field's value. +func (s *FleetLaunchTemplateSpecification) SetVersion(v string) *FleetLaunchTemplateSpecification { + s.Version = &v + return s } -// Contains the parameters for DeleteSnapshot. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshotRequest -type DeleteSnapshotInput struct { +// The launch template to use. You must specify either the launch template ID +// or launch template name in the request. +type FleetLaunchTemplateSpecificationRequest struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ID of the launch template. + LaunchTemplateId *string `type:"string"` - // The ID of the EBS snapshot. - // - // SnapshotId is a required field - SnapshotId *string `type:"string" required:"true"` + // The name of the launch template. + LaunchTemplateName *string `min:"3" type:"string"` + + // The version number of the launch template. Note: This is a required parameter + // and will be updated soon. + Version *string `type:"string"` } // String returns the string representation -func (s DeleteSnapshotInput) String() string { +func (s FleetLaunchTemplateSpecificationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteSnapshotInput) GoString() string { +func (s FleetLaunchTemplateSpecificationRequest) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteSnapshotInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteSnapshotInput"} - if s.SnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SnapshotId")) +func (s *FleetLaunchTemplateSpecificationRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "FleetLaunchTemplateSpecificationRequest"} + if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { + invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) } if invalidParams.Len() > 0 { @@ -23671,542 +67172,561 @@ func (s *DeleteSnapshotInput) Validate() error { return nil } -// SetDryRun sets the DryRun field's value. -func (s *DeleteSnapshotInput) SetDryRun(v bool) *DeleteSnapshotInput { - s.DryRun = &v +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *FleetLaunchTemplateSpecificationRequest) SetLaunchTemplateId(v string) *FleetLaunchTemplateSpecificationRequest { + s.LaunchTemplateId = &v return s } -// SetSnapshotId sets the SnapshotId field's value. -func (s *DeleteSnapshotInput) SetSnapshotId(v string) *DeleteSnapshotInput { - s.SnapshotId = &v +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *FleetLaunchTemplateSpecificationRequest) SetLaunchTemplateName(v string) *FleetLaunchTemplateSpecificationRequest { + s.LaunchTemplateName = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshotOutput -type DeleteSnapshotOutput struct { - _ struct{} `type:"structure"` +// SetVersion sets the Version field's value. +func (s *FleetLaunchTemplateSpecificationRequest) SetVersion(v string) *FleetLaunchTemplateSpecificationRequest { + s.Version = &v + return s } -// String returns the string representation -func (s DeleteSnapshotOutput) String() string { - return awsutil.Prettify(s) -} +// Describes a flow log. +type FlowLog struct { + _ struct{} `type:"structure"` -// GoString returns the string representation -func (s DeleteSnapshotOutput) GoString() string { - return s.String() -} + // The date and time the flow log was created. + CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` -// Contains the parameters for DeleteSpotDatafeedSubscription. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscriptionRequest -type DeleteSpotDatafeedSubscriptionInput struct { - _ struct{} `type:"structure"` + // Information about the error that occurred. Rate limited indicates that CloudWatch + // Logs throttling has been applied for one or more network interfaces, or that + // you've reached the limit on the number of log groups that you can create. + // Access error indicates that the IAM role associated with the flow log does + // not have sufficient permissions to publish to CloudWatch Logs. Unknown error + // indicates an internal error. + DeliverLogsErrorMessage *string `locationName:"deliverLogsErrorMessage" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` -} + // The ARN of the IAM role that posts logs to CloudWatch Logs. + DeliverLogsPermissionArn *string `locationName:"deliverLogsPermissionArn" type:"string"` -// String returns the string representation -func (s DeleteSpotDatafeedSubscriptionInput) String() string { - return awsutil.Prettify(s) -} + // The status of the logs delivery (SUCCESS | FAILED). + DeliverLogsStatus *string `locationName:"deliverLogsStatus" type:"string"` -// GoString returns the string representation -func (s DeleteSpotDatafeedSubscriptionInput) GoString() string { - return s.String() -} + // The flow log ID. + FlowLogId *string `locationName:"flowLogId" type:"string"` -// SetDryRun sets the DryRun field's value. -func (s *DeleteSpotDatafeedSubscriptionInput) SetDryRun(v bool) *DeleteSpotDatafeedSubscriptionInput { - s.DryRun = &v - return s -} + // The status of the flow log (ACTIVE). + FlowLogStatus *string `locationName:"flowLogStatus" type:"string"` -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscriptionOutput -type DeleteSpotDatafeedSubscriptionOutput struct { - _ struct{} `type:"structure"` + // Specifies the destination to which the flow log data is published. Flow log + // data can be published to an CloudWatch Logs log group or an Amazon S3 bucket. + // If the flow log publishes to CloudWatch Logs, this element indicates the + // Amazon Resource Name (ARN) of the CloudWatch Logs log group to which the + // data is published. If the flow log publishes to Amazon S3, this element indicates + // the ARN of the Amazon S3 bucket to which the data is published. + LogDestination *string `locationName:"logDestination" type:"string"` + + // Specifies the type of destination to which the flow log data is published. + // Flow log data can be published to CloudWatch Logs or Amazon S3. + LogDestinationType *string `locationName:"logDestinationType" type:"string" enum:"LogDestinationType"` + + // The format of the flow log record. + LogFormat *string `locationName:"logFormat" type:"string"` + + // The name of the flow log group. + LogGroupName *string `locationName:"logGroupName" type:"string"` + + // The ID of the resource on which the flow log was created. + ResourceId *string `locationName:"resourceId" type:"string"` + + // The type of traffic captured for the flow log. + TrafficType *string `locationName:"trafficType" type:"string" enum:"TrafficType"` } // String returns the string representation -func (s DeleteSpotDatafeedSubscriptionOutput) String() string { +func (s FlowLog) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteSpotDatafeedSubscriptionOutput) GoString() string { +func (s FlowLog) GoString() string { return s.String() } -// Contains the parameters for DeleteSubnet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnetRequest -type DeleteSubnetInput struct { - _ struct{} `type:"structure"` +// SetCreationTime sets the CreationTime field's value. +func (s *FlowLog) SetCreationTime(v time.Time) *FlowLog { + s.CreationTime = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetDeliverLogsErrorMessage sets the DeliverLogsErrorMessage field's value. +func (s *FlowLog) SetDeliverLogsErrorMessage(v string) *FlowLog { + s.DeliverLogsErrorMessage = &v + return s +} - // The ID of the subnet. - // - // SubnetId is a required field - SubnetId *string `type:"string" required:"true"` +// SetDeliverLogsPermissionArn sets the DeliverLogsPermissionArn field's value. +func (s *FlowLog) SetDeliverLogsPermissionArn(v string) *FlowLog { + s.DeliverLogsPermissionArn = &v + return s } -// String returns the string representation -func (s DeleteSubnetInput) String() string { - return awsutil.Prettify(s) +// SetDeliverLogsStatus sets the DeliverLogsStatus field's value. +func (s *FlowLog) SetDeliverLogsStatus(v string) *FlowLog { + s.DeliverLogsStatus = &v + return s } -// GoString returns the string representation -func (s DeleteSubnetInput) GoString() string { - return s.String() +// SetFlowLogId sets the FlowLogId field's value. +func (s *FlowLog) SetFlowLogId(v string) *FlowLog { + s.FlowLogId = &v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteSubnetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteSubnetInput"} - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) - } +// SetFlowLogStatus sets the FlowLogStatus field's value. +func (s *FlowLog) SetFlowLogStatus(v string) *FlowLog { + s.FlowLogStatus = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetLogDestination sets the LogDestination field's value. +func (s *FlowLog) SetLogDestination(v string) *FlowLog { + s.LogDestination = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteSubnetInput) SetDryRun(v bool) *DeleteSubnetInput { - s.DryRun = &v +// SetLogDestinationType sets the LogDestinationType field's value. +func (s *FlowLog) SetLogDestinationType(v string) *FlowLog { + s.LogDestinationType = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *DeleteSubnetInput) SetSubnetId(v string) *DeleteSubnetInput { - s.SubnetId = &v +// SetLogFormat sets the LogFormat field's value. +func (s *FlowLog) SetLogFormat(v string) *FlowLog { + s.LogFormat = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnetOutput -type DeleteSubnetOutput struct { - _ struct{} `type:"structure"` +// SetLogGroupName sets the LogGroupName field's value. +func (s *FlowLog) SetLogGroupName(v string) *FlowLog { + s.LogGroupName = &v + return s } -// String returns the string representation -func (s DeleteSubnetOutput) String() string { - return awsutil.Prettify(s) +// SetResourceId sets the ResourceId field's value. +func (s *FlowLog) SetResourceId(v string) *FlowLog { + s.ResourceId = &v + return s } -// GoString returns the string representation -func (s DeleteSubnetOutput) GoString() string { - return s.String() +// SetTrafficType sets the TrafficType field's value. +func (s *FlowLog) SetTrafficType(v string) *FlowLog { + s.TrafficType = &v + return s } -// Contains the parameters for DeleteTags. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTagsRequest -type DeleteTagsInput struct { +// Describes the FPGA accelerator for the instance type. +type FpgaDeviceInfo struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The count of FPGA accelerators for the instance type. + Count *int64 `locationName:"count" type:"integer"` - // The ID of the resource. For example, ami-1a2b3c4d. You can specify more than - // one resource ID. - // - // Resources is a required field - Resources []*string `locationName:"resourceId" type:"list" required:"true"` + // The manufacturer of the FPGA accelerator. + Manufacturer *string `locationName:"manufacturer" type:"string"` - // One or more tags to delete. If you omit the value parameter, we delete the - // tag regardless of its value. If you specify this parameter with an empty - // string as the value, we delete the key only if its value is an empty string. - Tags []*Tag `locationName:"tag" locationNameList:"item" type:"list"` + // Describes the memory for the FPGA accelerator for the instance type. + MemoryInfo *FpgaDeviceMemoryInfo `locationName:"memoryInfo" type:"structure"` + + // The name of the FPGA accelerator. + Name *string `locationName:"name" type:"string"` } // String returns the string representation -func (s DeleteTagsInput) String() string { +func (s FpgaDeviceInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteTagsInput) GoString() string { +func (s FpgaDeviceInfo) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteTagsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteTagsInput"} - if s.Resources == nil { - invalidParams.Add(request.NewErrParamRequired("Resources")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCount sets the Count field's value. +func (s *FpgaDeviceInfo) SetCount(v int64) *FpgaDeviceInfo { + s.Count = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteTagsInput) SetDryRun(v bool) *DeleteTagsInput { - s.DryRun = &v +// SetManufacturer sets the Manufacturer field's value. +func (s *FpgaDeviceInfo) SetManufacturer(v string) *FpgaDeviceInfo { + s.Manufacturer = &v return s } -// SetResources sets the Resources field's value. -func (s *DeleteTagsInput) SetResources(v []*string) *DeleteTagsInput { - s.Resources = v +// SetMemoryInfo sets the MemoryInfo field's value. +func (s *FpgaDeviceInfo) SetMemoryInfo(v *FpgaDeviceMemoryInfo) *FpgaDeviceInfo { + s.MemoryInfo = v return s } -// SetTags sets the Tags field's value. -func (s *DeleteTagsInput) SetTags(v []*Tag) *DeleteTagsInput { - s.Tags = v +// SetName sets the Name field's value. +func (s *FpgaDeviceInfo) SetName(v string) *FpgaDeviceInfo { + s.Name = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTagsOutput -type DeleteTagsOutput struct { +// Describes the memory for the FPGA accelerator for the instance type. +type FpgaDeviceMemoryInfo struct { _ struct{} `type:"structure"` + + // The size (in MiB) for the memory available to the FPGA accelerator. + SizeInMiB *int64 `locationName:"sizeInMiB" type:"integer"` } // String returns the string representation -func (s DeleteTagsOutput) String() string { +func (s FpgaDeviceMemoryInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteTagsOutput) GoString() string { +func (s FpgaDeviceMemoryInfo) GoString() string { return s.String() } -// Contains the parameters for DeleteVolume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolumeRequest -type DeleteVolumeInput struct { +// SetSizeInMiB sets the SizeInMiB field's value. +func (s *FpgaDeviceMemoryInfo) SetSizeInMiB(v int64) *FpgaDeviceMemoryInfo { + s.SizeInMiB = &v + return s +} + +// Describes an Amazon FPGA image (AFI). +type FpgaImage struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The date and time the AFI was created. + CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - // The ID of the volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` + // Indicates whether data retention support is enabled for the AFI. + DataRetentionSupport *bool `locationName:"dataRetentionSupport" type:"boolean"` + + // The description of the AFI. + Description *string `locationName:"description" type:"string"` + + // The global FPGA image identifier (AGFI ID). + FpgaImageGlobalId *string `locationName:"fpgaImageGlobalId" type:"string"` + + // The FPGA image identifier (AFI ID). + FpgaImageId *string `locationName:"fpgaImageId" type:"string"` + + // The name of the AFI. + Name *string `locationName:"name" type:"string"` + + // The alias of the AFI owner. Possible values include self, amazon, and aws-marketplace. + OwnerAlias *string `locationName:"ownerAlias" type:"string"` + + // The AWS account ID of the AFI owner. + OwnerId *string `locationName:"ownerId" type:"string"` + + // Information about the PCI bus. + PciId *PciId `locationName:"pciId" type:"structure"` + + // The product codes for the AFI. + ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + + // Indicates whether the AFI is public. + Public *bool `locationName:"public" type:"boolean"` + + // The version of the AWS Shell that was used to create the bitstream. + ShellVersion *string `locationName:"shellVersion" type:"string"` + + // Information about the state of the AFI. + State *FpgaImageState `locationName:"state" type:"structure"` + + // Any tags assigned to the AFI. + Tags []*Tag `locationName:"tags" locationNameList:"item" type:"list"` + + // The time of the most recent update to the AFI. + UpdateTime *time.Time `locationName:"updateTime" type:"timestamp"` } // String returns the string representation -func (s DeleteVolumeInput) String() string { +func (s FpgaImage) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteVolumeInput) GoString() string { +func (s FpgaImage) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVolumeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVolumeInput) SetDryRun(v bool) *DeleteVolumeInput { - s.DryRun = &v +// SetCreateTime sets the CreateTime field's value. +func (s *FpgaImage) SetCreateTime(v time.Time) *FpgaImage { + s.CreateTime = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *DeleteVolumeInput) SetVolumeId(v string) *DeleteVolumeInput { - s.VolumeId = &v +// SetDataRetentionSupport sets the DataRetentionSupport field's value. +func (s *FpgaImage) SetDataRetentionSupport(v bool) *FpgaImage { + s.DataRetentionSupport = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolumeOutput -type DeleteVolumeOutput struct { - _ struct{} `type:"structure"` +// SetDescription sets the Description field's value. +func (s *FpgaImage) SetDescription(v string) *FpgaImage { + s.Description = &v + return s } -// String returns the string representation -func (s DeleteVolumeOutput) String() string { - return awsutil.Prettify(s) +// SetFpgaImageGlobalId sets the FpgaImageGlobalId field's value. +func (s *FpgaImage) SetFpgaImageGlobalId(v string) *FpgaImage { + s.FpgaImageGlobalId = &v + return s } -// GoString returns the string representation -func (s DeleteVolumeOutput) GoString() string { - return s.String() +// SetFpgaImageId sets the FpgaImageId field's value. +func (s *FpgaImage) SetFpgaImageId(v string) *FpgaImage { + s.FpgaImageId = &v + return s } -// Contains the parameters for DeleteVpcEndpoints. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointsRequest -type DeleteVpcEndpointsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more endpoint IDs. - // - // VpcEndpointIds is a required field - VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list" required:"true"` +// SetName sets the Name field's value. +func (s *FpgaImage) SetName(v string) *FpgaImage { + s.Name = &v + return s } -// String returns the string representation -func (s DeleteVpcEndpointsInput) String() string { - return awsutil.Prettify(s) +// SetOwnerAlias sets the OwnerAlias field's value. +func (s *FpgaImage) SetOwnerAlias(v string) *FpgaImage { + s.OwnerAlias = &v + return s } -// GoString returns the string representation -func (s DeleteVpcEndpointsInput) GoString() string { - return s.String() +// SetOwnerId sets the OwnerId field's value. +func (s *FpgaImage) SetOwnerId(v string) *FpgaImage { + s.OwnerId = &v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpcEndpointsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpcEndpointsInput"} - if s.VpcEndpointIds == nil { - invalidParams.Add(request.NewErrParamRequired("VpcEndpointIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetPciId sets the PciId field's value. +func (s *FpgaImage) SetPciId(v *PciId) *FpgaImage { + s.PciId = v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpcEndpointsInput) SetDryRun(v bool) *DeleteVpcEndpointsInput { - s.DryRun = &v +// SetProductCodes sets the ProductCodes field's value. +func (s *FpgaImage) SetProductCodes(v []*ProductCode) *FpgaImage { + s.ProductCodes = v return s } -// SetVpcEndpointIds sets the VpcEndpointIds field's value. -func (s *DeleteVpcEndpointsInput) SetVpcEndpointIds(v []*string) *DeleteVpcEndpointsInput { - s.VpcEndpointIds = v +// SetPublic sets the Public field's value. +func (s *FpgaImage) SetPublic(v bool) *FpgaImage { + s.Public = &v return s } -// Contains the output of DeleteVpcEndpoints. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointsResult -type DeleteVpcEndpointsOutput struct { - _ struct{} `type:"structure"` - - // Information about the endpoints that were not successfully deleted. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` +// SetShellVersion sets the ShellVersion field's value. +func (s *FpgaImage) SetShellVersion(v string) *FpgaImage { + s.ShellVersion = &v + return s } -// String returns the string representation -func (s DeleteVpcEndpointsOutput) String() string { - return awsutil.Prettify(s) +// SetState sets the State field's value. +func (s *FpgaImage) SetState(v *FpgaImageState) *FpgaImage { + s.State = v + return s } -// GoString returns the string representation -func (s DeleteVpcEndpointsOutput) GoString() string { - return s.String() +// SetTags sets the Tags field's value. +func (s *FpgaImage) SetTags(v []*Tag) *FpgaImage { + s.Tags = v + return s } -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *DeleteVpcEndpointsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *DeleteVpcEndpointsOutput { - s.Unsuccessful = v +// SetUpdateTime sets the UpdateTime field's value. +func (s *FpgaImage) SetUpdateTime(v time.Time) *FpgaImage { + s.UpdateTime = &v return s } -// Contains the parameters for DeleteVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcRequest -type DeleteVpcInput struct { +// Describes an Amazon FPGA image (AFI) attribute. +type FpgaImageAttribute struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The description of the AFI. + Description *string `locationName:"description" type:"string"` - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` + // The ID of the AFI. + FpgaImageId *string `locationName:"fpgaImageId" type:"string"` + + // The load permissions. + LoadPermissions []*LoadPermission `locationName:"loadPermissions" locationNameList:"item" type:"list"` + + // The name of the AFI. + Name *string `locationName:"name" type:"string"` + + // The product codes. + ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DeleteVpcInput) String() string { +func (s FpgaImageAttribute) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteVpcInput) GoString() string { +func (s FpgaImageAttribute) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpcInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpcInput) SetDryRun(v bool) *DeleteVpcInput { - s.DryRun = &v +// SetDescription sets the Description field's value. +func (s *FpgaImageAttribute) SetDescription(v string) *FpgaImageAttribute { + s.Description = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *DeleteVpcInput) SetVpcId(v string) *DeleteVpcInput { - s.VpcId = &v +// SetFpgaImageId sets the FpgaImageId field's value. +func (s *FpgaImageAttribute) SetFpgaImageId(v string) *FpgaImageAttribute { + s.FpgaImageId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcOutput -type DeleteVpcOutput struct { - _ struct{} `type:"structure"` +// SetLoadPermissions sets the LoadPermissions field's value. +func (s *FpgaImageAttribute) SetLoadPermissions(v []*LoadPermission) *FpgaImageAttribute { + s.LoadPermissions = v + return s } -// String returns the string representation -func (s DeleteVpcOutput) String() string { - return awsutil.Prettify(s) +// SetName sets the Name field's value. +func (s *FpgaImageAttribute) SetName(v string) *FpgaImageAttribute { + s.Name = &v + return s } -// GoString returns the string representation -func (s DeleteVpcOutput) GoString() string { - return s.String() +// SetProductCodes sets the ProductCodes field's value. +func (s *FpgaImageAttribute) SetProductCodes(v []*ProductCode) *FpgaImageAttribute { + s.ProductCodes = v + return s } -// Contains the parameters for DeleteVpcPeeringConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnectionRequest -type DeleteVpcPeeringConnectionInput struct { +// Describes the state of the bitstream generation process for an Amazon FPGA +// image (AFI). +type FpgaImageState struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC peering connection. + // The state. The following are the possible values: // - // VpcPeeringConnectionId is a required field - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string" required:"true"` + // * pending - AFI bitstream generation is in progress. + // + // * available - The AFI is available for use. + // + // * failed - AFI bitstream generation failed. + // + // * unavailable - The AFI is no longer available for use. + Code *string `locationName:"code" type:"string" enum:"FpgaImageStateCode"` + + // If the state is failed, this is the error message. + Message *string `locationName:"message" type:"string"` } // String returns the string representation -func (s DeleteVpcPeeringConnectionInput) String() string { +func (s FpgaImageState) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteVpcPeeringConnectionInput) GoString() string { +func (s FpgaImageState) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpcPeeringConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpcPeeringConnectionInput"} - if s.VpcPeeringConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DeleteVpcPeeringConnectionInput) SetDryRun(v bool) *DeleteVpcPeeringConnectionInput { - s.DryRun = &v +// SetCode sets the Code field's value. +func (s *FpgaImageState) SetCode(v string) *FpgaImageState { + s.Code = &v return s } -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *DeleteVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *DeleteVpcPeeringConnectionInput { - s.VpcPeeringConnectionId = &v +// SetMessage sets the Message field's value. +func (s *FpgaImageState) SetMessage(v string) *FpgaImageState { + s.Message = &v return s } -// Contains the output of DeleteVpcPeeringConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnectionResult -type DeleteVpcPeeringConnectionOutput struct { +// Describes the FPGAs for the instance type. +type FpgaInfo struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` + // Describes the FPGAs for the instance type. + Fpgas []*FpgaDeviceInfo `locationName:"fpgas" locationNameList:"item" type:"list"` + + // The total memory of all FPGA accelerators for the instance type. + TotalFpgaMemoryInMiB *int64 `locationName:"totalFpgaMemoryInMiB" type:"integer"` } // String returns the string representation -func (s DeleteVpcPeeringConnectionOutput) String() string { +func (s FpgaInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteVpcPeeringConnectionOutput) GoString() string { +func (s FpgaInfo) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *DeleteVpcPeeringConnectionOutput) SetReturn(v bool) *DeleteVpcPeeringConnectionOutput { - s.Return = &v +// SetFpgas sets the Fpgas field's value. +func (s *FpgaInfo) SetFpgas(v []*FpgaDeviceInfo) *FpgaInfo { + s.Fpgas = v return s } -// Contains the parameters for DeleteVpnConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRequest -type DeleteVpnConnectionInput struct { +// SetTotalFpgaMemoryInMiB sets the TotalFpgaMemoryInMiB field's value. +func (s *FpgaInfo) SetTotalFpgaMemoryInMiB(v int64) *FpgaInfo { + s.TotalFpgaMemoryInMiB = &v + return s +} + +type GetCapacityReservationUsageInput struct { _ struct{} `type:"structure"` + // The ID of the Capacity Reservation. + // + // CapacityReservationId is a required field + CapacityReservationId *string `type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the VPN connection. + // The maximum number of results to return for the request in a single page. + // The remaining results can be seen by sending another request with the returned + // nextToken value. // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` + // Valid range: Minimum value of 1. Maximum value of 1000. + MaxResults *int64 `min:"1" type:"integer"` + + // The token to retrieve the next page of results. + NextToken *string `type:"string"` } // String returns the string representation -func (s DeleteVpnConnectionInput) String() string { +func (s GetCapacityReservationUsageInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteVpnConnectionInput) GoString() string { +func (s GetCapacityReservationUsageInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpnConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpnConnectionInput"} - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) +func (s *GetCapacityReservationUsageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetCapacityReservationUsageInput"} + if s.CapacityReservationId == nil { + invalidParams.Add(request.NewErrParamRequired("CapacityReservationId")) + } + if s.MaxResults != nil && *s.MaxResults < 1 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 1)) } if invalidParams.Len() > 0 { @@ -24215,105 +67735,128 @@ func (s *DeleteVpnConnectionInput) Validate() error { return nil } +// SetCapacityReservationId sets the CapacityReservationId field's value. +func (s *GetCapacityReservationUsageInput) SetCapacityReservationId(v string) *GetCapacityReservationUsageInput { + s.CapacityReservationId = &v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *DeleteVpnConnectionInput) SetDryRun(v bool) *DeleteVpnConnectionInput { +func (s *GetCapacityReservationUsageInput) SetDryRun(v bool) *GetCapacityReservationUsageInput { s.DryRun = &v return s } -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *DeleteVpnConnectionInput) SetVpnConnectionId(v string) *DeleteVpnConnectionInput { - s.VpnConnectionId = &v +// SetMaxResults sets the MaxResults field's value. +func (s *GetCapacityReservationUsageInput) SetMaxResults(v int64) *GetCapacityReservationUsageInput { + s.MaxResults = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionOutput -type DeleteVpnConnectionOutput struct { - _ struct{} `type:"structure"` +// SetNextToken sets the NextToken field's value. +func (s *GetCapacityReservationUsageInput) SetNextToken(v string) *GetCapacityReservationUsageInput { + s.NextToken = &v + return s } -// String returns the string representation -func (s DeleteVpnConnectionOutput) String() string { - return awsutil.Prettify(s) -} +type GetCapacityReservationUsageOutput struct { + _ struct{} `type:"structure"` -// GoString returns the string representation -func (s DeleteVpnConnectionOutput) GoString() string { - return s.String() -} + // The remaining capacity. Indicates the number of instances that can be launched + // in the Capacity Reservation. + AvailableInstanceCount *int64 `locationName:"availableInstanceCount" type:"integer"` -// Contains the parameters for DeleteVpnConnectionRoute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRouteRequest -type DeleteVpnConnectionRouteInput struct { - _ struct{} `type:"structure"` + // The ID of the Capacity Reservation. + CapacityReservationId *string `locationName:"capacityReservationId" type:"string"` - // The CIDR block associated with the local subnet of the customer network. - // - // DestinationCidrBlock is a required field - DestinationCidrBlock *string `type:"string" required:"true"` + // The type of instance for which the Capacity Reservation reserves capacity. + InstanceType *string `locationName:"instanceType" type:"string"` - // The ID of the VPN connection. + // Information about the Capacity Reservation usage. + InstanceUsages []*InstanceUsage `locationName:"instanceUsageSet" locationNameList:"item" type:"list"` + + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // The current state of the Capacity Reservation. A Capacity Reservation can + // be in one of the following states: // - // VpnConnectionId is a required field - VpnConnectionId *string `type:"string" required:"true"` + // * active - The Capacity Reservation is active and the capacity is available + // for your use. + // + // * expired - The Capacity Reservation expired automatically at the date + // and time specified in your request. The reserved capacity is no longer + // available for your use. + // + // * cancelled - The Capacity Reservation was manually cancelled. The reserved + // capacity is no longer available for your use. + // + // * pending - The Capacity Reservation request was successful but the capacity + // provisioning is still pending. + // + // * failed - The Capacity Reservation request has failed. A request might + // fail due to invalid request parameters, capacity constraints, or instance + // limit constraints. Failed requests are retained for 60 minutes. + State *string `locationName:"state" type:"string" enum:"CapacityReservationState"` + + // The number of instances for which the Capacity Reservation reserves capacity. + TotalInstanceCount *int64 `locationName:"totalInstanceCount" type:"integer"` } // String returns the string representation -func (s DeleteVpnConnectionRouteInput) String() string { +func (s GetCapacityReservationUsageOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteVpnConnectionRouteInput) GoString() string { +func (s GetCapacityReservationUsageOutput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpnConnectionRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpnConnectionRouteInput"} - if s.DestinationCidrBlock == nil { - invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) - } - if s.VpnConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) - } +// SetAvailableInstanceCount sets the AvailableInstanceCount field's value. +func (s *GetCapacityReservationUsageOutput) SetAvailableInstanceCount(v int64) *GetCapacityReservationUsageOutput { + s.AvailableInstanceCount = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCapacityReservationId sets the CapacityReservationId field's value. +func (s *GetCapacityReservationUsageOutput) SetCapacityReservationId(v string) *GetCapacityReservationUsageOutput { + s.CapacityReservationId = &v + return s } -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *DeleteVpnConnectionRouteInput) SetDestinationCidrBlock(v string) *DeleteVpnConnectionRouteInput { - s.DestinationCidrBlock = &v +// SetInstanceType sets the InstanceType field's value. +func (s *GetCapacityReservationUsageOutput) SetInstanceType(v string) *GetCapacityReservationUsageOutput { + s.InstanceType = &v return s } -// SetVpnConnectionId sets the VpnConnectionId field's value. -func (s *DeleteVpnConnectionRouteInput) SetVpnConnectionId(v string) *DeleteVpnConnectionRouteInput { - s.VpnConnectionId = &v +// SetInstanceUsages sets the InstanceUsages field's value. +func (s *GetCapacityReservationUsageOutput) SetInstanceUsages(v []*InstanceUsage) *GetCapacityReservationUsageOutput { + s.InstanceUsages = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRouteOutput -type DeleteVpnConnectionRouteOutput struct { - _ struct{} `type:"structure"` +// SetNextToken sets the NextToken field's value. +func (s *GetCapacityReservationUsageOutput) SetNextToken(v string) *GetCapacityReservationUsageOutput { + s.NextToken = &v + return s } -// String returns the string representation -func (s DeleteVpnConnectionRouteOutput) String() string { - return awsutil.Prettify(s) +// SetState sets the State field's value. +func (s *GetCapacityReservationUsageOutput) SetState(v string) *GetCapacityReservationUsageOutput { + s.State = &v + return s } -// GoString returns the string representation -func (s DeleteVpnConnectionRouteOutput) GoString() string { - return s.String() +// SetTotalInstanceCount sets the TotalInstanceCount field's value. +func (s *GetCapacityReservationUsageOutput) SetTotalInstanceCount(v int64) *GetCapacityReservationUsageOutput { + s.TotalInstanceCount = &v + return s } -// Contains the parameters for DeleteVpnGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGatewayRequest -type DeleteVpnGatewayInput struct { +type GetConsoleOutputInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -24322,27 +67865,32 @@ type DeleteVpnGatewayInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the virtual private gateway. + // The ID of the instance. // - // VpnGatewayId is a required field - VpnGatewayId *string `type:"string" required:"true"` + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` + + // When enabled, retrieves the latest console output for the instance. + // + // Default: disabled (false) + Latest *bool `type:"boolean"` } // String returns the string representation -func (s DeleteVpnGatewayInput) String() string { +func (s GetConsoleOutputInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteVpnGatewayInput) GoString() string { +func (s GetConsoleOutputInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DeleteVpnGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeleteVpnGatewayInput"} - if s.VpnGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) +func (s *GetConsoleOutputInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetConsoleOutputInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) } if invalidParams.Len() > 0 { @@ -24352,64 +67900,99 @@ func (s *DeleteVpnGatewayInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *DeleteVpnGatewayInput) SetDryRun(v bool) *DeleteVpnGatewayInput { +func (s *GetConsoleOutputInput) SetDryRun(v bool) *GetConsoleOutputInput { s.DryRun = &v return s } -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *DeleteVpnGatewayInput) SetVpnGatewayId(v string) *DeleteVpnGatewayInput { - s.VpnGatewayId = &v +// SetInstanceId sets the InstanceId field's value. +func (s *GetConsoleOutputInput) SetInstanceId(v string) *GetConsoleOutputInput { + s.InstanceId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGatewayOutput -type DeleteVpnGatewayOutput struct { +// SetLatest sets the Latest field's value. +func (s *GetConsoleOutputInput) SetLatest(v bool) *GetConsoleOutputInput { + s.Latest = &v + return s +} + +type GetConsoleOutputOutput struct { _ struct{} `type:"structure"` + + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` + + // The console output, base64-encoded. If you are using a command line tool, + // the tool decodes the output for you. + Output *string `locationName:"output" type:"string"` + + // The time at which the output was last updated. + Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` } // String returns the string representation -func (s DeleteVpnGatewayOutput) String() string { +func (s GetConsoleOutputOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeleteVpnGatewayOutput) GoString() string { +func (s GetConsoleOutputOutput) GoString() string { return s.String() } -// Contains the parameters for DeregisterImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImageRequest -type DeregisterImageInput struct { +// SetInstanceId sets the InstanceId field's value. +func (s *GetConsoleOutputOutput) SetInstanceId(v string) *GetConsoleOutputOutput { + s.InstanceId = &v + return s +} + +// SetOutput sets the Output field's value. +func (s *GetConsoleOutputOutput) SetOutput(v string) *GetConsoleOutputOutput { + s.Output = &v + return s +} + +// SetTimestamp sets the Timestamp field's value. +func (s *GetConsoleOutputOutput) SetTimestamp(v time.Time) *GetConsoleOutputOutput { + s.Timestamp = &v + return s +} + +type GetConsoleScreenshotInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the AMI. + // The ID of the instance. // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` + + // When set to true, acts as keystroke input and wakes up an instance that's + // in standby or "sleep" mode. + WakeUp *bool `type:"boolean"` } // String returns the string representation -func (s DeregisterImageInput) String() string { +func (s GetConsoleScreenshotInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeregisterImageInput) GoString() string { +func (s GetConsoleScreenshotInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DeregisterImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DeregisterImageInput"} - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) +func (s *GetConsoleScreenshotInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetConsoleScreenshotInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) } if invalidParams.Len() > 0 { @@ -24419,377 +68002,331 @@ func (s *DeregisterImageInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *DeregisterImageInput) SetDryRun(v bool) *DeregisterImageInput { +func (s *GetConsoleScreenshotInput) SetDryRun(v bool) *GetConsoleScreenshotInput { s.DryRun = &v return s } -// SetImageId sets the ImageId field's value. -func (s *DeregisterImageInput) SetImageId(v string) *DeregisterImageInput { - s.ImageId = &v +// SetInstanceId sets the InstanceId field's value. +func (s *GetConsoleScreenshotInput) SetInstanceId(v string) *GetConsoleScreenshotInput { + s.InstanceId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImageOutput -type DeregisterImageOutput struct { +// SetWakeUp sets the WakeUp field's value. +func (s *GetConsoleScreenshotInput) SetWakeUp(v bool) *GetConsoleScreenshotInput { + s.WakeUp = &v + return s +} + +type GetConsoleScreenshotOutput struct { _ struct{} `type:"structure"` + + // The data that comprises the image. + ImageData *string `locationName:"imageData" type:"string"` + + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` } // String returns the string representation -func (s DeregisterImageOutput) String() string { +func (s GetConsoleScreenshotOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DeregisterImageOutput) GoString() string { +func (s GetConsoleScreenshotOutput) GoString() string { return s.String() } -// Contains the parameters for DescribeAccountAttributes. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributesRequest -type DescribeAccountAttributesInput struct { - _ struct{} `type:"structure"` +// SetImageData sets the ImageData field's value. +func (s *GetConsoleScreenshotOutput) SetImageData(v string) *GetConsoleScreenshotOutput { + s.ImageData = &v + return s +} - // One or more account attribute names. - AttributeNames []*string `locationName:"attributeName" locationNameList:"attributeName" type:"list"` +// SetInstanceId sets the InstanceId field's value. +func (s *GetConsoleScreenshotOutput) SetInstanceId(v string) *GetConsoleScreenshotOutput { + s.InstanceId = &v + return s +} + +type GetEbsDefaultKmsKeyIdInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s DescribeAccountAttributesInput) String() string { +func (s GetEbsDefaultKmsKeyIdInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeAccountAttributesInput) GoString() string { +func (s GetEbsDefaultKmsKeyIdInput) GoString() string { return s.String() } -// SetAttributeNames sets the AttributeNames field's value. -func (s *DescribeAccountAttributesInput) SetAttributeNames(v []*string) *DescribeAccountAttributesInput { - s.AttributeNames = v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *DescribeAccountAttributesInput) SetDryRun(v bool) *DescribeAccountAttributesInput { +func (s *GetEbsDefaultKmsKeyIdInput) SetDryRun(v bool) *GetEbsDefaultKmsKeyIdInput { s.DryRun = &v return s } -// Contains the output of DescribeAccountAttributes. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributesResult -type DescribeAccountAttributesOutput struct { +type GetEbsDefaultKmsKeyIdOutput struct { _ struct{} `type:"structure"` - // Information about one or more account attributes. - AccountAttributes []*AccountAttribute `locationName:"accountAttributeSet" locationNameList:"item" type:"list"` + // The Amazon Resource Name (ARN) of the default CMK for encryption by default. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` } // String returns the string representation -func (s DescribeAccountAttributesOutput) String() string { +func (s GetEbsDefaultKmsKeyIdOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeAccountAttributesOutput) GoString() string { +func (s GetEbsDefaultKmsKeyIdOutput) GoString() string { return s.String() } -// SetAccountAttributes sets the AccountAttributes field's value. -func (s *DescribeAccountAttributesOutput) SetAccountAttributes(v []*AccountAttribute) *DescribeAccountAttributesOutput { - s.AccountAttributes = v +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *GetEbsDefaultKmsKeyIdOutput) SetKmsKeyId(v string) *GetEbsDefaultKmsKeyIdOutput { + s.KmsKeyId = &v return s } -// Contains the parameters for DescribeAddresses. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddressesRequest -type DescribeAddressesInput struct { +type GetEbsEncryptionByDefaultInput struct { _ struct{} `type:"structure"` - // [EC2-VPC] One or more allocation IDs. - // - // Default: Describes all your Elastic IP addresses. - AllocationIds []*string `locationName:"AllocationId" locationNameList:"AllocationId" type:"list"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. Filter names and values are case-sensitive. - // - // * allocation-id - [EC2-VPC] The allocation ID for the address. - // - // * association-id - [EC2-VPC] The association ID for the address. - // - // * domain - Indicates whether the address is for use in EC2-Classic (standard) - // or in a VPC (vpc). - // - // * instance-id - The ID of the instance the address is associated with, - // if any. - // - // * network-interface-id - [EC2-VPC] The ID of the network interface that - // the address is associated with, if any. - // - // * network-interface-owner-id - The AWS account ID of the owner. - // - // * private-ip-address - [EC2-VPC] The private IP address associated with - // the Elastic IP address. - // - // * public-ip - The Elastic IP address. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // [EC2-Classic] One or more Elastic IP addresses. - // - // Default: Describes all your Elastic IP addresses. - PublicIps []*string `locationName:"PublicIp" locationNameList:"PublicIp" type:"list"` + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s DescribeAddressesInput) String() string { +func (s GetEbsEncryptionByDefaultInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeAddressesInput) GoString() string { +func (s GetEbsEncryptionByDefaultInput) GoString() string { return s.String() } -// SetAllocationIds sets the AllocationIds field's value. -func (s *DescribeAddressesInput) SetAllocationIds(v []*string) *DescribeAddressesInput { - s.AllocationIds = v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *DescribeAddressesInput) SetDryRun(v bool) *DescribeAddressesInput { +func (s *GetEbsEncryptionByDefaultInput) SetDryRun(v bool) *GetEbsEncryptionByDefaultInput { s.DryRun = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeAddressesInput) SetFilters(v []*Filter) *DescribeAddressesInput { - s.Filters = v - return s -} - -// SetPublicIps sets the PublicIps field's value. -func (s *DescribeAddressesInput) SetPublicIps(v []*string) *DescribeAddressesInput { - s.PublicIps = v - return s -} - -// Contains the output of DescribeAddresses. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddressesResult -type DescribeAddressesOutput struct { +type GetEbsEncryptionByDefaultOutput struct { _ struct{} `type:"structure"` - // Information about one or more Elastic IP addresses. - Addresses []*Address `locationName:"addressesSet" locationNameList:"item" type:"list"` + // Indicates whether encryption by default is enabled. + EbsEncryptionByDefault *bool `locationName:"ebsEncryptionByDefault" type:"boolean"` } // String returns the string representation -func (s DescribeAddressesOutput) String() string { +func (s GetEbsEncryptionByDefaultOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeAddressesOutput) GoString() string { +func (s GetEbsEncryptionByDefaultOutput) GoString() string { return s.String() } -// SetAddresses sets the Addresses field's value. -func (s *DescribeAddressesOutput) SetAddresses(v []*Address) *DescribeAddressesOutput { - s.Addresses = v +// SetEbsEncryptionByDefault sets the EbsEncryptionByDefault field's value. +func (s *GetEbsEncryptionByDefaultOutput) SetEbsEncryptionByDefault(v bool) *GetEbsEncryptionByDefaultOutput { + s.EbsEncryptionByDefault = &v return s } -// Contains the parameters for DescribeAvailabilityZones. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZonesRequest -type DescribeAvailabilityZonesInput struct { +type GetHostReservationPurchasePreviewInput struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. + // The IDs of the Dedicated Hosts with which the reservation is associated. // - // * message - Information about the Availability Zone. - // - // * region-name - The name of the region for the Availability Zone (for - // example, us-east-1). - // - // * state - The state of the Availability Zone (available | information - // | impaired | unavailable). - // - // * zone-name - The name of the Availability Zone (for example, us-east-1a). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // HostIdSet is a required field + HostIdSet []*string `locationNameList:"item" type:"list" required:"true"` - // The names of one or more Availability Zones. - ZoneNames []*string `locationName:"ZoneName" locationNameList:"ZoneName" type:"list"` + // The offering ID of the reservation. + // + // OfferingId is a required field + OfferingId *string `type:"string" required:"true"` } // String returns the string representation -func (s DescribeAvailabilityZonesInput) String() string { +func (s GetHostReservationPurchasePreviewInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeAvailabilityZonesInput) GoString() string { +func (s GetHostReservationPurchasePreviewInput) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeAvailabilityZonesInput) SetDryRun(v bool) *DescribeAvailabilityZonesInput { - s.DryRun = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetHostReservationPurchasePreviewInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetHostReservationPurchasePreviewInput"} + if s.HostIdSet == nil { + invalidParams.Add(request.NewErrParamRequired("HostIdSet")) + } + if s.OfferingId == nil { + invalidParams.Add(request.NewErrParamRequired("OfferingId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetFilters sets the Filters field's value. -func (s *DescribeAvailabilityZonesInput) SetFilters(v []*Filter) *DescribeAvailabilityZonesInput { - s.Filters = v +// SetHostIdSet sets the HostIdSet field's value. +func (s *GetHostReservationPurchasePreviewInput) SetHostIdSet(v []*string) *GetHostReservationPurchasePreviewInput { + s.HostIdSet = v return s } -// SetZoneNames sets the ZoneNames field's value. -func (s *DescribeAvailabilityZonesInput) SetZoneNames(v []*string) *DescribeAvailabilityZonesInput { - s.ZoneNames = v +// SetOfferingId sets the OfferingId field's value. +func (s *GetHostReservationPurchasePreviewInput) SetOfferingId(v string) *GetHostReservationPurchasePreviewInput { + s.OfferingId = &v return s } -// Contains the output of DescribeAvailabiltyZones. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZonesResult -type DescribeAvailabilityZonesOutput struct { +type GetHostReservationPurchasePreviewOutput struct { _ struct{} `type:"structure"` - // Information about one or more Availability Zones. - AvailabilityZones []*AvailabilityZone `locationName:"availabilityZoneInfo" locationNameList:"item" type:"list"` + // The currency in which the totalUpfrontPrice and totalHourlyPrice amounts + // are specified. At this time, the only supported currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` + + // The purchase information of the Dedicated Host reservation and the Dedicated + // Hosts associated with it. + Purchase []*Purchase `locationName:"purchase" locationNameList:"item" type:"list"` + + // The potential total hourly price of the reservation per hour. + TotalHourlyPrice *string `locationName:"totalHourlyPrice" type:"string"` + + // The potential total upfront price. This is billed immediately. + TotalUpfrontPrice *string `locationName:"totalUpfrontPrice" type:"string"` } // String returns the string representation -func (s DescribeAvailabilityZonesOutput) String() string { +func (s GetHostReservationPurchasePreviewOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeAvailabilityZonesOutput) GoString() string { +func (s GetHostReservationPurchasePreviewOutput) GoString() string { return s.String() } -// SetAvailabilityZones sets the AvailabilityZones field's value. -func (s *DescribeAvailabilityZonesOutput) SetAvailabilityZones(v []*AvailabilityZone) *DescribeAvailabilityZonesOutput { - s.AvailabilityZones = v +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *GetHostReservationPurchasePreviewOutput) SetCurrencyCode(v string) *GetHostReservationPurchasePreviewOutput { + s.CurrencyCode = &v return s } -// Contains the parameters for DescribeBundleTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasksRequest -type DescribeBundleTasksInput struct { - _ struct{} `type:"structure"` +// SetPurchase sets the Purchase field's value. +func (s *GetHostReservationPurchasePreviewOutput) SetPurchase(v []*Purchase) *GetHostReservationPurchasePreviewOutput { + s.Purchase = v + return s +} - // One or more bundle task IDs. - // - // Default: Describes all your bundle tasks. - BundleIds []*string `locationName:"BundleId" locationNameList:"BundleId" type:"list"` +// SetTotalHourlyPrice sets the TotalHourlyPrice field's value. +func (s *GetHostReservationPurchasePreviewOutput) SetTotalHourlyPrice(v string) *GetHostReservationPurchasePreviewOutput { + s.TotalHourlyPrice = &v + return s +} + +// SetTotalUpfrontPrice sets the TotalUpfrontPrice field's value. +func (s *GetHostReservationPurchasePreviewOutput) SetTotalUpfrontPrice(v string) *GetHostReservationPurchasePreviewOutput { + s.TotalUpfrontPrice = &v + return s +} + +type GetLaunchTemplateDataInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // One or more filters. - // - // * bundle-id - The ID of the bundle task. - // - // * error-code - If the task failed, the error code returned. - // - // * error-message - If the task failed, the error message returned. - // - // * instance-id - The ID of the instance. - // - // * progress - The level of task completion, as a percentage (for example, - // 20%). - // - // * s3-bucket - The Amazon S3 bucket to store the AMI. - // - // * s3-prefix - The beginning of the AMI name. - // - // * start-time - The time the task started (for example, 2013-09-15T17:15:20.000Z). - // - // * state - The state of the task (pending | waiting-for-shutdown | bundling - // | storing | cancelling | complete | failed). + // The ID of the instance. // - // * update-time - The time of the most recent update for the task. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` } // String returns the string representation -func (s DescribeBundleTasksInput) String() string { +func (s GetLaunchTemplateDataInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeBundleTasksInput) GoString() string { +func (s GetLaunchTemplateDataInput) GoString() string { return s.String() } -// SetBundleIds sets the BundleIds field's value. -func (s *DescribeBundleTasksInput) SetBundleIds(v []*string) *DescribeBundleTasksInput { - s.BundleIds = v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetLaunchTemplateDataInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetLaunchTemplateDataInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } // SetDryRun sets the DryRun field's value. -func (s *DescribeBundleTasksInput) SetDryRun(v bool) *DescribeBundleTasksInput { +func (s *GetLaunchTemplateDataInput) SetDryRun(v bool) *GetLaunchTemplateDataInput { s.DryRun = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeBundleTasksInput) SetFilters(v []*Filter) *DescribeBundleTasksInput { - s.Filters = v +// SetInstanceId sets the InstanceId field's value. +func (s *GetLaunchTemplateDataInput) SetInstanceId(v string) *GetLaunchTemplateDataInput { + s.InstanceId = &v return s } -// Contains the output of DescribeBundleTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasksResult -type DescribeBundleTasksOutput struct { +type GetLaunchTemplateDataOutput struct { _ struct{} `type:"structure"` - // Information about one or more bundle tasks. - BundleTasks []*BundleTask `locationName:"bundleInstanceTasksSet" locationNameList:"item" type:"list"` + // The instance data. + LaunchTemplateData *ResponseLaunchTemplateData `locationName:"launchTemplateData" type:"structure"` } // String returns the string representation -func (s DescribeBundleTasksOutput) String() string { +func (s GetLaunchTemplateDataOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeBundleTasksOutput) GoString() string { +func (s GetLaunchTemplateDataOutput) GoString() string { return s.String() } -// SetBundleTasks sets the BundleTasks field's value. -func (s *DescribeBundleTasksOutput) SetBundleTasks(v []*BundleTask) *DescribeBundleTasksOutput { - s.BundleTasks = v +// SetLaunchTemplateData sets the LaunchTemplateData field's value. +func (s *GetLaunchTemplateDataOutput) SetLaunchTemplateData(v *ResponseLaunchTemplateData) *GetLaunchTemplateDataOutput { + s.LaunchTemplateData = v return s } -// Contains the parameters for DescribeClassicLinkInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstancesRequest -type DescribeClassicLinkInstancesInput struct { +type GetPasswordDataInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -24798,383 +68335,374 @@ type DescribeClassicLinkInstancesInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // One or more filters. - // - // * group-id - The ID of a VPC security group that's associated with the - // instance. - // - // * instance-id - The ID of the instance. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * vpc-id - The ID of the VPC that the instance is linked to. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more instance IDs. Must be instances linked to a VPC through ClassicLink. - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results of the initial request can be seen by sending another - // request with the returned NextToken value. This value can be between 5 and - // 1000; if MaxResults is given a value larger than 1000, only 1000 results - // are returned. You cannot specify this parameter and the instance IDs parameter - // in the same request. + // The ID of the Windows instance. // - // Constraint: If the value is greater than 1000, we return only 1000 items. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The token to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` } // String returns the string representation -func (s DescribeClassicLinkInstancesInput) String() string { +func (s GetPasswordDataInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeClassicLinkInstancesInput) GoString() string { +func (s GetPasswordDataInput) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeClassicLinkInstancesInput) SetDryRun(v bool) *DescribeClassicLinkInstancesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeClassicLinkInstancesInput) SetFilters(v []*Filter) *DescribeClassicLinkInstancesInput { - s.Filters = v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetPasswordDataInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetPasswordDataInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } -// SetInstanceIds sets the InstanceIds field's value. -func (s *DescribeClassicLinkInstancesInput) SetInstanceIds(v []*string) *DescribeClassicLinkInstancesInput { - s.InstanceIds = v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeClassicLinkInstancesInput) SetMaxResults(v int64) *DescribeClassicLinkInstancesInput { - s.MaxResults = &v +// SetDryRun sets the DryRun field's value. +func (s *GetPasswordDataInput) SetDryRun(v bool) *GetPasswordDataInput { + s.DryRun = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeClassicLinkInstancesInput) SetNextToken(v string) *DescribeClassicLinkInstancesInput { - s.NextToken = &v +// SetInstanceId sets the InstanceId field's value. +func (s *GetPasswordDataInput) SetInstanceId(v string) *GetPasswordDataInput { + s.InstanceId = &v return s } -// Contains the output of DescribeClassicLinkInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstancesResult -type DescribeClassicLinkInstancesOutput struct { +type GetPasswordDataOutput struct { _ struct{} `type:"structure"` - // Information about one or more linked EC2-Classic instances. - Instances []*ClassicLinkInstance `locationName:"instancesSet" locationNameList:"item" type:"list"` + // The ID of the Windows instance. + InstanceId *string `locationName:"instanceId" type:"string"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The password of the instance. Returns an empty string if the password is + // not available. + PasswordData *string `locationName:"passwordData" type:"string"` + + // The time the data was last updated. + Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` } // String returns the string representation -func (s DescribeClassicLinkInstancesOutput) String() string { +func (s GetPasswordDataOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeClassicLinkInstancesOutput) GoString() string { +func (s GetPasswordDataOutput) GoString() string { return s.String() } -// SetInstances sets the Instances field's value. -func (s *DescribeClassicLinkInstancesOutput) SetInstances(v []*ClassicLinkInstance) *DescribeClassicLinkInstancesOutput { - s.Instances = v +// SetInstanceId sets the InstanceId field's value. +func (s *GetPasswordDataOutput) SetInstanceId(v string) *GetPasswordDataOutput { + s.InstanceId = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeClassicLinkInstancesOutput) SetNextToken(v string) *DescribeClassicLinkInstancesOutput { - s.NextToken = &v +// SetPasswordData sets the PasswordData field's value. +func (s *GetPasswordDataOutput) SetPasswordData(v string) *GetPasswordDataOutput { + s.PasswordData = &v return s } -// Contains the parameters for DescribeConversionTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasksRequest -type DescribeConversionTasksInput struct { - _ struct{} `type:"structure"` +// SetTimestamp sets the Timestamp field's value. +func (s *GetPasswordDataOutput) SetTimestamp(v time.Time) *GetPasswordDataOutput { + s.Timestamp = &v + return s +} - // One or more conversion task IDs. - ConversionTaskIds []*string `locationName:"conversionTaskId" locationNameList:"item" type:"list"` +// Contains the parameters for GetReservedInstanceExchangeQuote. +type GetReservedInstancesExchangeQuoteInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` + + // The IDs of the Convertible Reserved Instances to exchange. + // + // ReservedInstanceIds is a required field + ReservedInstanceIds []*string `locationName:"ReservedInstanceId" locationNameList:"ReservedInstanceId" type:"list" required:"true"` + + // The configuration of the target Convertible Reserved Instance to exchange + // for your current Convertible Reserved Instances. + TargetConfigurations []*TargetConfigurationRequest `locationName:"TargetConfiguration" locationNameList:"TargetConfigurationRequest" type:"list"` } // String returns the string representation -func (s DescribeConversionTasksInput) String() string { +func (s GetReservedInstancesExchangeQuoteInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeConversionTasksInput) GoString() string { +func (s GetReservedInstancesExchangeQuoteInput) GoString() string { return s.String() } -// SetConversionTaskIds sets the ConversionTaskIds field's value. -func (s *DescribeConversionTasksInput) SetConversionTaskIds(v []*string) *DescribeConversionTasksInput { - s.ConversionTaskIds = v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetReservedInstancesExchangeQuoteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetReservedInstancesExchangeQuoteInput"} + if s.ReservedInstanceIds == nil { + invalidParams.Add(request.NewErrParamRequired("ReservedInstanceIds")) + } + if s.TargetConfigurations != nil { + for i, v := range s.TargetConfigurations { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TargetConfigurations", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } // SetDryRun sets the DryRun field's value. -func (s *DescribeConversionTasksInput) SetDryRun(v bool) *DescribeConversionTasksInput { +func (s *GetReservedInstancesExchangeQuoteInput) SetDryRun(v bool) *GetReservedInstancesExchangeQuoteInput { s.DryRun = &v return s } -// Contains the output for DescribeConversionTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasksResult -type DescribeConversionTasksOutput struct { - _ struct{} `type:"structure"` - - // Information about the conversion tasks. - ConversionTasks []*ConversionTask `locationName:"conversionTasks" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeConversionTasksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeConversionTasksOutput) GoString() string { - return s.String() +// SetReservedInstanceIds sets the ReservedInstanceIds field's value. +func (s *GetReservedInstancesExchangeQuoteInput) SetReservedInstanceIds(v []*string) *GetReservedInstancesExchangeQuoteInput { + s.ReservedInstanceIds = v + return s } -// SetConversionTasks sets the ConversionTasks field's value. -func (s *DescribeConversionTasksOutput) SetConversionTasks(v []*ConversionTask) *DescribeConversionTasksOutput { - s.ConversionTasks = v +// SetTargetConfigurations sets the TargetConfigurations field's value. +func (s *GetReservedInstancesExchangeQuoteInput) SetTargetConfigurations(v []*TargetConfigurationRequest) *GetReservedInstancesExchangeQuoteInput { + s.TargetConfigurations = v return s } -// Contains the parameters for DescribeCustomerGateways. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGatewaysRequest -type DescribeCustomerGatewaysInput struct { +// Contains the output of GetReservedInstancesExchangeQuote. +type GetReservedInstancesExchangeQuoteOutput struct { _ struct{} `type:"structure"` - // One or more customer gateway IDs. - // - // Default: Describes all your customer gateways. - CustomerGatewayIds []*string `locationName:"CustomerGatewayId" locationNameList:"CustomerGatewayId" type:"list"` + // The currency of the transaction. + CurrencyCode *string `locationName:"currencyCode" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // If true, the exchange is valid. If false, the exchange cannot be completed. + IsValidExchange *bool `locationName:"isValidExchange" type:"boolean"` - // One or more filters. - // - // * bgp-asn - The customer gateway's Border Gateway Protocol (BGP) Autonomous - // System Number (ASN). - // - // * customer-gateway-id - The ID of the customer gateway. - // - // * ip-address - The IP address of the customer gateway's Internet-routable - // external interface. - // - // * state - The state of the customer gateway (pending | available | deleting - // | deleted). - // - // * type - The type of customer gateway. Currently, the only supported type - // is ipsec.1. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // The new end date of the reservation term. + OutputReservedInstancesWillExpireAt *time.Time `locationName:"outputReservedInstancesWillExpireAt" type:"timestamp"` + + // The total true upfront charge for the exchange. + PaymentDue *string `locationName:"paymentDue" type:"string"` + + // The cost associated with the Reserved Instance. + ReservedInstanceValueRollup *ReservationValue `locationName:"reservedInstanceValueRollup" type:"structure"` + + // The configuration of your Convertible Reserved Instances. + ReservedInstanceValueSet []*ReservedInstanceReservationValue `locationName:"reservedInstanceValueSet" locationNameList:"item" type:"list"` + + // The cost associated with the Reserved Instance. + TargetConfigurationValueRollup *ReservationValue `locationName:"targetConfigurationValueRollup" type:"structure"` + + // The values of the target Convertible Reserved Instances. + TargetConfigurationValueSet []*TargetReservationValue `locationName:"targetConfigurationValueSet" locationNameList:"item" type:"list"` + + // Describes the reason why the exchange cannot be completed. + ValidationFailureReason *string `locationName:"validationFailureReason" type:"string"` } // String returns the string representation -func (s DescribeCustomerGatewaysInput) String() string { +func (s GetReservedInstancesExchangeQuoteOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeCustomerGatewaysInput) GoString() string { +func (s GetReservedInstancesExchangeQuoteOutput) GoString() string { return s.String() } -// SetCustomerGatewayIds sets the CustomerGatewayIds field's value. -func (s *DescribeCustomerGatewaysInput) SetCustomerGatewayIds(v []*string) *DescribeCustomerGatewaysInput { - s.CustomerGatewayIds = v +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetCurrencyCode(v string) *GetReservedInstancesExchangeQuoteOutput { + s.CurrencyCode = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeCustomerGatewaysInput) SetDryRun(v bool) *DescribeCustomerGatewaysInput { - s.DryRun = &v +// SetIsValidExchange sets the IsValidExchange field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetIsValidExchange(v bool) *GetReservedInstancesExchangeQuoteOutput { + s.IsValidExchange = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeCustomerGatewaysInput) SetFilters(v []*Filter) *DescribeCustomerGatewaysInput { - s.Filters = v +// SetOutputReservedInstancesWillExpireAt sets the OutputReservedInstancesWillExpireAt field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetOutputReservedInstancesWillExpireAt(v time.Time) *GetReservedInstancesExchangeQuoteOutput { + s.OutputReservedInstancesWillExpireAt = &v return s } -// Contains the output of DescribeCustomerGateways. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGatewaysResult -type DescribeCustomerGatewaysOutput struct { - _ struct{} `type:"structure"` +// SetPaymentDue sets the PaymentDue field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetPaymentDue(v string) *GetReservedInstancesExchangeQuoteOutput { + s.PaymentDue = &v + return s +} - // Information about one or more customer gateways. - CustomerGateways []*CustomerGateway `locationName:"customerGatewaySet" locationNameList:"item" type:"list"` +// SetReservedInstanceValueRollup sets the ReservedInstanceValueRollup field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetReservedInstanceValueRollup(v *ReservationValue) *GetReservedInstancesExchangeQuoteOutput { + s.ReservedInstanceValueRollup = v + return s } -// String returns the string representation -func (s DescribeCustomerGatewaysOutput) String() string { - return awsutil.Prettify(s) +// SetReservedInstanceValueSet sets the ReservedInstanceValueSet field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetReservedInstanceValueSet(v []*ReservedInstanceReservationValue) *GetReservedInstancesExchangeQuoteOutput { + s.ReservedInstanceValueSet = v + return s } -// GoString returns the string representation -func (s DescribeCustomerGatewaysOutput) GoString() string { - return s.String() +// SetTargetConfigurationValueRollup sets the TargetConfigurationValueRollup field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetTargetConfigurationValueRollup(v *ReservationValue) *GetReservedInstancesExchangeQuoteOutput { + s.TargetConfigurationValueRollup = v + return s } -// SetCustomerGateways sets the CustomerGateways field's value. -func (s *DescribeCustomerGatewaysOutput) SetCustomerGateways(v []*CustomerGateway) *DescribeCustomerGatewaysOutput { - s.CustomerGateways = v +// SetTargetConfigurationValueSet sets the TargetConfigurationValueSet field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetTargetConfigurationValueSet(v []*TargetReservationValue) *GetReservedInstancesExchangeQuoteOutput { + s.TargetConfigurationValueSet = v return s } -// Contains the parameters for DescribeDhcpOptions. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptionsRequest -type DescribeDhcpOptionsInput struct { - _ struct{} `type:"structure"` +// SetValidationFailureReason sets the ValidationFailureReason field's value. +func (s *GetReservedInstancesExchangeQuoteOutput) SetValidationFailureReason(v string) *GetReservedInstancesExchangeQuoteOutput { + s.ValidationFailureReason = &v + return s +} - // The IDs of one or more DHCP options sets. - // - // Default: Describes all your DHCP options sets. - DhcpOptionsIds []*string `locationName:"DhcpOptionsId" locationNameList:"DhcpOptionsId" type:"list"` +type GetTransitGatewayAttachmentPropagationsInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // One or more filters. - // - // * dhcp-options-id - The ID of a set of DHCP options. - // - // * key - The key for one of the options (for example, domain-name). - // - // * value - The value for one of the options. + // One or more filters. The possible values are: // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. + // * transit-gateway-route-table-id - The ID of the transit gateway route + // table. Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` + + // The token for the next page of results. + NextToken *string `type:"string"` + + // The ID of the attachment. + // + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` } // String returns the string representation -func (s DescribeDhcpOptionsInput) String() string { +func (s GetTransitGatewayAttachmentPropagationsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeDhcpOptionsInput) GoString() string { +func (s GetTransitGatewayAttachmentPropagationsInput) GoString() string { return s.String() } -// SetDhcpOptionsIds sets the DhcpOptionsIds field's value. -func (s *DescribeDhcpOptionsInput) SetDhcpOptionsIds(v []*string) *DescribeDhcpOptionsInput { - s.DhcpOptionsIds = v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetTransitGatewayAttachmentPropagationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetTransitGatewayAttachmentPropagationsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } // SetDryRun sets the DryRun field's value. -func (s *DescribeDhcpOptionsInput) SetDryRun(v bool) *DescribeDhcpOptionsInput { +func (s *GetTransitGatewayAttachmentPropagationsInput) SetDryRun(v bool) *GetTransitGatewayAttachmentPropagationsInput { s.DryRun = &v return s } // SetFilters sets the Filters field's value. -func (s *DescribeDhcpOptionsInput) SetFilters(v []*Filter) *DescribeDhcpOptionsInput { +func (s *GetTransitGatewayAttachmentPropagationsInput) SetFilters(v []*Filter) *GetTransitGatewayAttachmentPropagationsInput { s.Filters = v return s } -// Contains the output of DescribeDhcpOptions. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptionsResult -type DescribeDhcpOptionsOutput struct { +// SetMaxResults sets the MaxResults field's value. +func (s *GetTransitGatewayAttachmentPropagationsInput) SetMaxResults(v int64) *GetTransitGatewayAttachmentPropagationsInput { + s.MaxResults = &v + return s +} + +// SetNextToken sets the NextToken field's value. +func (s *GetTransitGatewayAttachmentPropagationsInput) SetNextToken(v string) *GetTransitGatewayAttachmentPropagationsInput { + s.NextToken = &v + return s +} + +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *GetTransitGatewayAttachmentPropagationsInput) SetTransitGatewayAttachmentId(v string) *GetTransitGatewayAttachmentPropagationsInput { + s.TransitGatewayAttachmentId = &v + return s +} + +type GetTransitGatewayAttachmentPropagationsOutput struct { _ struct{} `type:"structure"` - // Information about one or more DHCP options sets. - DhcpOptions []*DhcpOptions `locationName:"dhcpOptionsSet" locationNameList:"item" type:"list"` + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. + NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the propagation route tables. + TransitGatewayAttachmentPropagations []*TransitGatewayAttachmentPropagation `locationName:"transitGatewayAttachmentPropagations" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeDhcpOptionsOutput) String() string { +func (s GetTransitGatewayAttachmentPropagationsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeDhcpOptionsOutput) GoString() string { +func (s GetTransitGatewayAttachmentPropagationsOutput) GoString() string { return s.String() } -// SetDhcpOptions sets the DhcpOptions field's value. -func (s *DescribeDhcpOptionsOutput) SetDhcpOptions(v []*DhcpOptions) *DescribeDhcpOptionsOutput { - s.DhcpOptions = v +// SetNextToken sets the NextToken field's value. +func (s *GetTransitGatewayAttachmentPropagationsOutput) SetNextToken(v string) *GetTransitGatewayAttachmentPropagationsOutput { + s.NextToken = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGatewaysRequest -type DescribeEgressOnlyInternetGatewaysInput struct { +// SetTransitGatewayAttachmentPropagations sets the TransitGatewayAttachmentPropagations field's value. +func (s *GetTransitGatewayAttachmentPropagationsOutput) SetTransitGatewayAttachmentPropagations(v []*TransitGatewayAttachmentPropagation) *GetTransitGatewayAttachmentPropagationsOutput { + s.TransitGatewayAttachmentPropagations = v + return s +} + +type GetTransitGatewayRouteTableAssociationsInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -25183,2587 +68711,2585 @@ type DescribeEgressOnlyInternetGatewaysInput struct { // it is UnauthorizedOperation. DryRun *bool `type:"boolean"` - // One or more egress-only Internet gateway IDs. - EgressOnlyInternetGatewayIds []*string `locationName:"EgressOnlyInternetGatewayId" locationNameList:"item" type:"list"` + // One or more filters. The possible values are: + // + // * resource-id - The ID of the resource. + // + // * resource-type - The resource type (vpc | vpn). + // + // * transit-gateway-attachment-id - The ID of the attachment. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // NextToken value. This value can be between 5 and 1000; if MaxResults is given - // a value larger than 1000, only 1000 results are returned. - MaxResults *int64 `type:"integer"` + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` - // The token to retrieve the next page of results. + // The token for the next page of results. NextToken *string `type:"string"` + + // The ID of the transit gateway route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s DescribeEgressOnlyInternetGatewaysInput) String() string { +func (s GetTransitGatewayRouteTableAssociationsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeEgressOnlyInternetGatewaysInput) GoString() string { +func (s GetTransitGatewayRouteTableAssociationsInput) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetTransitGatewayRouteTableAssociationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetTransitGatewayRouteTableAssociationsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + // SetDryRun sets the DryRun field's value. -func (s *DescribeEgressOnlyInternetGatewaysInput) SetDryRun(v bool) *DescribeEgressOnlyInternetGatewaysInput { +func (s *GetTransitGatewayRouteTableAssociationsInput) SetDryRun(v bool) *GetTransitGatewayRouteTableAssociationsInput { s.DryRun = &v return s } -// SetEgressOnlyInternetGatewayIds sets the EgressOnlyInternetGatewayIds field's value. -func (s *DescribeEgressOnlyInternetGatewaysInput) SetEgressOnlyInternetGatewayIds(v []*string) *DescribeEgressOnlyInternetGatewaysInput { - s.EgressOnlyInternetGatewayIds = v +// SetFilters sets the Filters field's value. +func (s *GetTransitGatewayRouteTableAssociationsInput) SetFilters(v []*Filter) *GetTransitGatewayRouteTableAssociationsInput { + s.Filters = v return s } // SetMaxResults sets the MaxResults field's value. -func (s *DescribeEgressOnlyInternetGatewaysInput) SetMaxResults(v int64) *DescribeEgressOnlyInternetGatewaysInput { +func (s *GetTransitGatewayRouteTableAssociationsInput) SetMaxResults(v int64) *GetTransitGatewayRouteTableAssociationsInput { s.MaxResults = &v return s } // SetNextToken sets the NextToken field's value. -func (s *DescribeEgressOnlyInternetGatewaysInput) SetNextToken(v string) *DescribeEgressOnlyInternetGatewaysInput { +func (s *GetTransitGatewayRouteTableAssociationsInput) SetNextToken(v string) *GetTransitGatewayRouteTableAssociationsInput { s.NextToken = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGatewaysResult -type DescribeEgressOnlyInternetGatewaysOutput struct { +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *GetTransitGatewayRouteTableAssociationsInput) SetTransitGatewayRouteTableId(v string) *GetTransitGatewayRouteTableAssociationsInput { + s.TransitGatewayRouteTableId = &v + return s +} + +type GetTransitGatewayRouteTableAssociationsOutput struct { _ struct{} `type:"structure"` - // Information about the egress-only Internet gateways. - EgressOnlyInternetGateways []*EgressOnlyInternetGateway `locationName:"egressOnlyInternetGatewaySet" locationNameList:"item" type:"list"` + // Information about the associations. + Associations []*TransitGatewayRouteTableAssociation `locationName:"associations" locationNameList:"item" type:"list"` - // The token to use to retrieve the next page of results. + // The token to use to retrieve the next page of results. This value is null + // when there are no more results to return. NextToken *string `locationName:"nextToken" type:"string"` } // String returns the string representation -func (s DescribeEgressOnlyInternetGatewaysOutput) String() string { +func (s GetTransitGatewayRouteTableAssociationsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeEgressOnlyInternetGatewaysOutput) GoString() string { +func (s GetTransitGatewayRouteTableAssociationsOutput) GoString() string { return s.String() } -// SetEgressOnlyInternetGateways sets the EgressOnlyInternetGateways field's value. -func (s *DescribeEgressOnlyInternetGatewaysOutput) SetEgressOnlyInternetGateways(v []*EgressOnlyInternetGateway) *DescribeEgressOnlyInternetGatewaysOutput { - s.EgressOnlyInternetGateways = v +// SetAssociations sets the Associations field's value. +func (s *GetTransitGatewayRouteTableAssociationsOutput) SetAssociations(v []*TransitGatewayRouteTableAssociation) *GetTransitGatewayRouteTableAssociationsOutput { + s.Associations = v return s } // SetNextToken sets the NextToken field's value. -func (s *DescribeEgressOnlyInternetGatewaysOutput) SetNextToken(v string) *DescribeEgressOnlyInternetGatewaysOutput { +func (s *GetTransitGatewayRouteTableAssociationsOutput) SetNextToken(v string) *GetTransitGatewayRouteTableAssociationsOutput { s.NextToken = &v return s } -// Contains the parameters for DescribeExportTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasksRequest -type DescribeExportTasksInput struct { - _ struct{} `type:"structure"` - - // One or more export task IDs. - ExportTaskIds []*string `locationName:"exportTaskId" locationNameList:"ExportTaskId" type:"list"` -} - -// String returns the string representation -func (s DescribeExportTasksInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeExportTasksInput) GoString() string { - return s.String() -} - -// SetExportTaskIds sets the ExportTaskIds field's value. -func (s *DescribeExportTasksInput) SetExportTaskIds(v []*string) *DescribeExportTasksInput { - s.ExportTaskIds = v - return s -} - -// Contains the output for DescribeExportTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasksResult -type DescribeExportTasksOutput struct { +type GetTransitGatewayRouteTablePropagationsInput struct { _ struct{} `type:"structure"` - // Information about the export tasks. - ExportTasks []*ExportTask `locationName:"exportTaskSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeExportTasksOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeExportTasksOutput) GoString() string { - return s.String() -} - -// SetExportTasks sets the ExportTasks field's value. -func (s *DescribeExportTasksOutput) SetExportTasks(v []*ExportTask) *DescribeExportTasksOutput { - s.ExportTasks = v - return s -} - -// Contains the parameters for DescribeFlowLogs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogsRequest -type DescribeFlowLogsInput struct { - _ struct{} `type:"structure"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // One or more filters. - // - // * deliver-log-status - The status of the logs delivery (SUCCESS | FAILED). - // - // * flow-log-id - The ID of the flow log. + // One or more filters. The possible values are: // - // * log-group-name - The name of the log group. + // * resource-id - The ID of the resource. // - // * resource-id - The ID of the VPC, subnet, or network interface. + // * resource-type - The resource type (vpc | vpn). // - // * traffic-type - The type of traffic (ACCEPT | REJECT | ALL) - Filter []*Filter `locationNameList:"Filter" type:"list"` - - // One or more flow log IDs. - FlowLogIds []*string `locationName:"FlowLogId" locationNameList:"item" type:"list"` + // * transit-gateway-attachment-id - The ID of the attachment. + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // NextToken value. This value can be between 5 and 1000; if MaxResults is given - // a value larger than 1000, only 1000 results are returned. You cannot specify - // this parameter and the flow log IDs parameter in the same request. - MaxResults *int64 `type:"integer"` + // The maximum number of results to return with a single call. To retrieve the + // remaining results, make another call with the returned nextToken value. + MaxResults *int64 `min:"5" type:"integer"` - // The token to retrieve the next page of results. + // The token for the next page of results. NextToken *string `type:"string"` + + // The ID of the transit gateway route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s DescribeFlowLogsInput) String() string { +func (s GetTransitGatewayRouteTablePropagationsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeFlowLogsInput) GoString() string { +func (s GetTransitGatewayRouteTablePropagationsInput) GoString() string { return s.String() } -// SetFilter sets the Filter field's value. -func (s *DescribeFlowLogsInput) SetFilter(v []*Filter) *DescribeFlowLogsInput { - s.Filter = v +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetTransitGatewayRouteTablePropagationsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetTransitGatewayRouteTablePropagationsInput"} + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *GetTransitGatewayRouteTablePropagationsInput) SetDryRun(v bool) *GetTransitGatewayRouteTablePropagationsInput { + s.DryRun = &v return s } -// SetFlowLogIds sets the FlowLogIds field's value. -func (s *DescribeFlowLogsInput) SetFlowLogIds(v []*string) *DescribeFlowLogsInput { - s.FlowLogIds = v +// SetFilters sets the Filters field's value. +func (s *GetTransitGatewayRouteTablePropagationsInput) SetFilters(v []*Filter) *GetTransitGatewayRouteTablePropagationsInput { + s.Filters = v return s } // SetMaxResults sets the MaxResults field's value. -func (s *DescribeFlowLogsInput) SetMaxResults(v int64) *DescribeFlowLogsInput { +func (s *GetTransitGatewayRouteTablePropagationsInput) SetMaxResults(v int64) *GetTransitGatewayRouteTablePropagationsInput { s.MaxResults = &v return s } // SetNextToken sets the NextToken field's value. -func (s *DescribeFlowLogsInput) SetNextToken(v string) *DescribeFlowLogsInput { +func (s *GetTransitGatewayRouteTablePropagationsInput) SetNextToken(v string) *GetTransitGatewayRouteTablePropagationsInput { s.NextToken = &v return s } -// Contains the output of DescribeFlowLogs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogsResult -type DescribeFlowLogsOutput struct { - _ struct{} `type:"structure"` +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *GetTransitGatewayRouteTablePropagationsInput) SetTransitGatewayRouteTableId(v string) *GetTransitGatewayRouteTablePropagationsInput { + s.TransitGatewayRouteTableId = &v + return s +} - // Information about the flow logs. - FlowLogs []*FlowLog `locationName:"flowLogSet" locationNameList:"item" type:"list"` +type GetTransitGatewayRouteTablePropagationsOutput struct { + _ struct{} `type:"structure"` // The token to use to retrieve the next page of results. This value is null // when there are no more results to return. NextToken *string `locationName:"nextToken" type:"string"` + + // Information about the route table propagations. + TransitGatewayRouteTablePropagations []*TransitGatewayRouteTablePropagation `locationName:"transitGatewayRouteTablePropagations" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeFlowLogsOutput) String() string { +func (s GetTransitGatewayRouteTablePropagationsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeFlowLogsOutput) GoString() string { +func (s GetTransitGatewayRouteTablePropagationsOutput) GoString() string { return s.String() } -// SetFlowLogs sets the FlowLogs field's value. -func (s *DescribeFlowLogsOutput) SetFlowLogs(v []*FlowLog) *DescribeFlowLogsOutput { - s.FlowLogs = v +// SetNextToken sets the NextToken field's value. +func (s *GetTransitGatewayRouteTablePropagationsOutput) SetNextToken(v string) *GetTransitGatewayRouteTablePropagationsOutput { + s.NextToken = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeFlowLogsOutput) SetNextToken(v string) *DescribeFlowLogsOutput { - s.NextToken = &v +// SetTransitGatewayRouteTablePropagations sets the TransitGatewayRouteTablePropagations field's value. +func (s *GetTransitGatewayRouteTablePropagationsOutput) SetTransitGatewayRouteTablePropagations(v []*TransitGatewayRouteTablePropagation) *GetTransitGatewayRouteTablePropagationsOutput { + s.TransitGatewayRouteTablePropagations = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferingsRequest -type DescribeHostReservationOfferingsInput struct { +// Describes the GPU accelerators for the instance type. +type GpuDeviceInfo struct { _ struct{} `type:"structure"` - // One or more filters. - // - // * instance-family - The instance family of the offering (e.g., m4). - // - // * payment-option - The payment option (NoUpfront | PartialUpfront | AllUpfront). - Filter []*Filter `locationNameList:"Filter" type:"list"` - - // This is the maximum duration of the reservation you'd like to purchase, specified - // in seconds. Reservations are available in one-year and three-year terms. - // The number of seconds specified must be the number of seconds in a year (365x24x60x60) - // times one of the supported durations (1 or 3). For example, specify 94608000 - // for three years. - MaxDuration *int64 `type:"integer"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // nextToken value. This value can be between 5 and 500; if maxResults is given - // a larger value than 500, you will receive an error. - MaxResults *int64 `type:"integer"` + // The number of GPUs for the instance type. + Count *int64 `locationName:"count" type:"integer"` - // This is the minimum duration of the reservation you'd like to purchase, specified - // in seconds. Reservations are available in one-year and three-year terms. - // The number of seconds specified must be the number of seconds in a year (365x24x60x60) - // times one of the supported durations (1 or 3). For example, specify 31536000 - // for one year. - MinDuration *int64 `type:"integer"` + // The manufacturer of the GPU accelerator. + Manufacturer *string `locationName:"manufacturer" type:"string"` - // The token to use to retrieve the next page of results. - NextToken *string `type:"string"` + // Describes the memory available to the GPU accelerator. + MemoryInfo *GpuDeviceMemoryInfo `locationName:"memoryInfo" type:"structure"` - // The ID of the reservation offering. - OfferingId *string `type:"string"` + // The name of the GPU accelerator. + Name *string `locationName:"name" type:"string"` } // String returns the string representation -func (s DescribeHostReservationOfferingsInput) String() string { +func (s GpuDeviceInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeHostReservationOfferingsInput) GoString() string { +func (s GpuDeviceInfo) GoString() string { return s.String() } -// SetFilter sets the Filter field's value. -func (s *DescribeHostReservationOfferingsInput) SetFilter(v []*Filter) *DescribeHostReservationOfferingsInput { - s.Filter = v +// SetCount sets the Count field's value. +func (s *GpuDeviceInfo) SetCount(v int64) *GpuDeviceInfo { + s.Count = &v return s } -// SetMaxDuration sets the MaxDuration field's value. -func (s *DescribeHostReservationOfferingsInput) SetMaxDuration(v int64) *DescribeHostReservationOfferingsInput { - s.MaxDuration = &v +// SetManufacturer sets the Manufacturer field's value. +func (s *GpuDeviceInfo) SetManufacturer(v string) *GpuDeviceInfo { + s.Manufacturer = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeHostReservationOfferingsInput) SetMaxResults(v int64) *DescribeHostReservationOfferingsInput { - s.MaxResults = &v +// SetMemoryInfo sets the MemoryInfo field's value. +func (s *GpuDeviceInfo) SetMemoryInfo(v *GpuDeviceMemoryInfo) *GpuDeviceInfo { + s.MemoryInfo = v return s } -// SetMinDuration sets the MinDuration field's value. -func (s *DescribeHostReservationOfferingsInput) SetMinDuration(v int64) *DescribeHostReservationOfferingsInput { - s.MinDuration = &v +// SetName sets the Name field's value. +func (s *GpuDeviceInfo) SetName(v string) *GpuDeviceInfo { + s.Name = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostReservationOfferingsInput) SetNextToken(v string) *DescribeHostReservationOfferingsInput { - s.NextToken = &v - return s +// Describes the memory available to the GPU accelerator. +type GpuDeviceMemoryInfo struct { + _ struct{} `type:"structure"` + + // The size (in MiB) for the memory available to the GPU accelerator. + SizeInMiB *int64 `locationName:"sizeInMiB" type:"integer"` } -// SetOfferingId sets the OfferingId field's value. -func (s *DescribeHostReservationOfferingsInput) SetOfferingId(v string) *DescribeHostReservationOfferingsInput { - s.OfferingId = &v +// String returns the string representation +func (s GpuDeviceMemoryInfo) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GpuDeviceMemoryInfo) GoString() string { + return s.String() +} + +// SetSizeInMiB sets the SizeInMiB field's value. +func (s *GpuDeviceMemoryInfo) SetSizeInMiB(v int64) *GpuDeviceMemoryInfo { + s.SizeInMiB = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferingsResult -type DescribeHostReservationOfferingsOutput struct { +// Describes the GPU accelerators for the instance type. +type GpuInfo struct { _ struct{} `type:"structure"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // Describes the GPU accelerators for the instance type. + Gpus []*GpuDeviceInfo `locationName:"gpus" locationNameList:"item" type:"list"` - // Information about the offerings. - OfferingSet []*HostOffering `locationName:"offeringSet" type:"list"` + // The total size of the memory for the GPU accelerators for the instance type. + TotalGpuMemoryInMiB *int64 `locationName:"totalGpuMemoryInMiB" type:"integer"` } // String returns the string representation -func (s DescribeHostReservationOfferingsOutput) String() string { +func (s GpuInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeHostReservationOfferingsOutput) GoString() string { +func (s GpuInfo) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostReservationOfferingsOutput) SetNextToken(v string) *DescribeHostReservationOfferingsOutput { - s.NextToken = &v +// SetGpus sets the Gpus field's value. +func (s *GpuInfo) SetGpus(v []*GpuDeviceInfo) *GpuInfo { + s.Gpus = v return s } -// SetOfferingSet sets the OfferingSet field's value. -func (s *DescribeHostReservationOfferingsOutput) SetOfferingSet(v []*HostOffering) *DescribeHostReservationOfferingsOutput { - s.OfferingSet = v +// SetTotalGpuMemoryInMiB sets the TotalGpuMemoryInMiB field's value. +func (s *GpuInfo) SetTotalGpuMemoryInMiB(v int64) *GpuInfo { + s.TotalGpuMemoryInMiB = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationsRequest -type DescribeHostReservationsInput struct { +// Describes a security group. +type GroupIdentifier struct { _ struct{} `type:"structure"` - // One or more filters. - // - // * instance-family - The instance family (e.g., m4). - // - // * payment-option - The payment option (NoUpfront | PartialUpfront | AllUpfront). - // - // * state - The state of the reservation (payment-pending | payment-failed - // | active | retired). - Filter []*Filter `locationNameList:"Filter" type:"list"` - - // One or more host reservation IDs. - HostReservationIdSet []*string `locationNameList:"item" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // nextToken value. This value can be between 5 and 500; if maxResults is given - // a larger value than 500, you will receive an error. - MaxResults *int64 `type:"integer"` + // The ID of the security group. + GroupId *string `locationName:"groupId" type:"string"` - // The token to use to retrieve the next page of results. - NextToken *string `type:"string"` + // The name of the security group. + GroupName *string `locationName:"groupName" type:"string"` } // String returns the string representation -func (s DescribeHostReservationsInput) String() string { +func (s GroupIdentifier) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeHostReservationsInput) GoString() string { +func (s GroupIdentifier) GoString() string { return s.String() } -// SetFilter sets the Filter field's value. -func (s *DescribeHostReservationsInput) SetFilter(v []*Filter) *DescribeHostReservationsInput { - s.Filter = v +// SetGroupId sets the GroupId field's value. +func (s *GroupIdentifier) SetGroupId(v string) *GroupIdentifier { + s.GroupId = &v return s } -// SetHostReservationIdSet sets the HostReservationIdSet field's value. -func (s *DescribeHostReservationsInput) SetHostReservationIdSet(v []*string) *DescribeHostReservationsInput { - s.HostReservationIdSet = v +// SetGroupName sets the GroupName field's value. +func (s *GroupIdentifier) SetGroupName(v string) *GroupIdentifier { + s.GroupName = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeHostReservationsInput) SetMaxResults(v int64) *DescribeHostReservationsInput { - s.MaxResults = &v - return s +// Indicates whether your instance is configured for hibernation. This parameter +// is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). +// For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) +// in the Amazon Elastic Compute Cloud User Guide. +type HibernationOptions struct { + _ struct{} `type:"structure"` + + // If this parameter is set to true, your instance is enabled for hibernation; + // otherwise, it is not enabled for hibernation. + Configured *bool `locationName:"configured" type:"boolean"` } -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostReservationsInput) SetNextToken(v string) *DescribeHostReservationsInput { - s.NextToken = &v +// String returns the string representation +func (s HibernationOptions) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s HibernationOptions) GoString() string { + return s.String() +} + +// SetConfigured sets the Configured field's value. +func (s *HibernationOptions) SetConfigured(v bool) *HibernationOptions { + s.Configured = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationsResult -type DescribeHostReservationsOutput struct { +// Indicates whether your instance is configured for hibernation. This parameter +// is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). +// For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) +// in the Amazon Elastic Compute Cloud User Guide. +type HibernationOptionsRequest struct { _ struct{} `type:"structure"` - // Details about the reservation's configuration. - HostReservationSet []*HostReservation `locationName:"hostReservationSet" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // If you set this parameter to true, your instance is enabled for hibernation. + // + // Default: false + Configured *bool `type:"boolean"` } // String returns the string representation -func (s DescribeHostReservationsOutput) String() string { +func (s HibernationOptionsRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeHostReservationsOutput) GoString() string { +func (s HibernationOptionsRequest) GoString() string { return s.String() } -// SetHostReservationSet sets the HostReservationSet field's value. -func (s *DescribeHostReservationsOutput) SetHostReservationSet(v []*HostReservation) *DescribeHostReservationsOutput { - s.HostReservationSet = v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostReservationsOutput) SetNextToken(v string) *DescribeHostReservationsOutput { - s.NextToken = &v +// SetConfigured sets the Configured field's value. +func (s *HibernationOptionsRequest) SetConfigured(v bool) *HibernationOptionsRequest { + s.Configured = &v return s } -// Contains the parameters for DescribeHosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostsRequest -type DescribeHostsInput struct { +// Describes an event in the history of the Spot Fleet request. +type HistoryRecord struct { _ struct{} `type:"structure"` - // One or more filters. - // - // * instance-type - The instance type size that the Dedicated Host is configured - // to support. - // - // * auto-placement - Whether auto-placement is enabled or disabled (on | - // off). + // Information about the event. + EventInformation *EventInformation `locationName:"eventInformation" type:"structure"` + + // The event type. // - // * host-reservation-id - The ID of the reservation assigned to this host. + // * error - An error with the Spot Fleet request. // - // * client-token - The idempotency token you provided when you launched - // the instance + // * fleetRequestChange - A change in the status or configuration of the + // Spot Fleet request. // - // * state- The allocation state of the Dedicated Host (available | under-assessment - // | permanent-failure | released | released-permanent-failure). + // * instanceChange - An instance was launched or terminated. // - // * availability-zone - The Availability Zone of the host. - Filter []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` - - // The IDs of the Dedicated Hosts. The IDs are used for targeted instance launches. - HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list"` - - // The maximum number of results to return for the request in a single page. - // The remaining results can be seen by sending another request with the returned - // nextToken value. This value can be between 5 and 500; if maxResults is given - // a larger value than 500, you will receive an error. You cannot specify this - // parameter and the host IDs parameter in the same request. - MaxResults *int64 `locationName:"maxResults" type:"integer"` + // * Information - An informational event. + EventType *string `locationName:"eventType" type:"string" enum:"EventType"` - // The token to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` + // The date and time of the event, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` } // String returns the string representation -func (s DescribeHostsInput) String() string { +func (s HistoryRecord) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeHostsInput) GoString() string { +func (s HistoryRecord) GoString() string { return s.String() } -// SetFilter sets the Filter field's value. -func (s *DescribeHostsInput) SetFilter(v []*Filter) *DescribeHostsInput { - s.Filter = v - return s -} - -// SetHostIds sets the HostIds field's value. -func (s *DescribeHostsInput) SetHostIds(v []*string) *DescribeHostsInput { - s.HostIds = v +// SetEventInformation sets the EventInformation field's value. +func (s *HistoryRecord) SetEventInformation(v *EventInformation) *HistoryRecord { + s.EventInformation = v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeHostsInput) SetMaxResults(v int64) *DescribeHostsInput { - s.MaxResults = &v +// SetEventType sets the EventType field's value. +func (s *HistoryRecord) SetEventType(v string) *HistoryRecord { + s.EventType = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostsInput) SetNextToken(v string) *DescribeHostsInput { - s.NextToken = &v +// SetTimestamp sets the Timestamp field's value. +func (s *HistoryRecord) SetTimestamp(v time.Time) *HistoryRecord { + s.Timestamp = &v return s } -// Contains the output of DescribeHosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostsResult -type DescribeHostsOutput struct { +// Describes an event in the history of an EC2 Fleet. +type HistoryRecordEntry struct { _ struct{} `type:"structure"` - // Information about the Dedicated Hosts. - Hosts []*Host `locationName:"hostSet" locationNameList:"item" type:"list"` + // Information about the event. + EventInformation *EventInformation `locationName:"eventInformation" type:"structure"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The event type. + EventType *string `locationName:"eventType" type:"string" enum:"FleetEventType"` + + // The date and time of the event, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` } // String returns the string representation -func (s DescribeHostsOutput) String() string { +func (s HistoryRecordEntry) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeHostsOutput) GoString() string { +func (s HistoryRecordEntry) GoString() string { return s.String() } -// SetHosts sets the Hosts field's value. -func (s *DescribeHostsOutput) SetHosts(v []*Host) *DescribeHostsOutput { - s.Hosts = v +// SetEventInformation sets the EventInformation field's value. +func (s *HistoryRecordEntry) SetEventInformation(v *EventInformation) *HistoryRecordEntry { + s.EventInformation = v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeHostsOutput) SetNextToken(v string) *DescribeHostsOutput { - s.NextToken = &v +// SetEventType sets the EventType field's value. +func (s *HistoryRecordEntry) SetEventType(v string) *HistoryRecordEntry { + s.EventType = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociationsRequest -type DescribeIamInstanceProfileAssociationsInput struct { +// SetTimestamp sets the Timestamp field's value. +func (s *HistoryRecordEntry) SetTimestamp(v time.Time) *HistoryRecordEntry { + s.Timestamp = &v + return s +} + +// Describes the properties of the Dedicated Host. +type Host struct { _ struct{} `type:"structure"` - // One or more IAM instance profile associations. - AssociationIds []*string `locationName:"AssociationId" locationNameList:"AssociationId" type:"list"` + // The time that the Dedicated Host was allocated. + AllocationTime *time.Time `locationName:"allocationTime" type:"timestamp"` - // One or more filters. - // - // * instance-id - The ID of the instance. - // - // * state - The state of the association (associating | associated | disassociating - // | disassociated). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // Indicates whether the Dedicated Host supports multiple instance types of + // the same instance family, or a specific instance type only. one indicates + // that the Dedicated Host supports multiple instance types in the instance + // family. off indicates that the Dedicated Host supports a single instance + // type only. + AllowsMultipleInstanceTypes *string `locationName:"allowsMultipleInstanceTypes" type:"string" enum:"AllowsMultipleInstanceTypes"` - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. - MaxResults *int64 `min:"5" type:"integer"` + // Whether auto-placement is on or off. + AutoPlacement *string `locationName:"autoPlacement" type:"string" enum:"AutoPlacement"` - // The token to request the next page of results. - NextToken *string `min:"1" type:"string"` + // The Availability Zone of the Dedicated Host. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + + // The ID of the Availability Zone in which the Dedicated Host is allocated. + AvailabilityZoneId *string `locationName:"availabilityZoneId" type:"string"` + + // Information about the instances running on the Dedicated Host. + AvailableCapacity *AvailableCapacity `locationName:"availableCapacity" type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` + + // The ID of the Dedicated Host. + HostId *string `locationName:"hostId" type:"string"` + + // The hardware specifications of the Dedicated Host. + HostProperties *HostProperties `locationName:"hostProperties" type:"structure"` + + // Indicates whether host recovery is enabled or disabled for the Dedicated + // Host. + HostRecovery *string `locationName:"hostRecovery" type:"string" enum:"HostRecovery"` + + // The reservation ID of the Dedicated Host. This returns a null response if + // the Dedicated Host doesn't have an associated reservation. + HostReservationId *string `locationName:"hostReservationId" type:"string"` + + // The IDs and instance type that are currently running on the Dedicated Host. + Instances []*HostInstance `locationName:"instances" locationNameList:"item" type:"list"` + + // The ID of the AWS account that owns the Dedicated Host. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The time that the Dedicated Host was released. + ReleaseTime *time.Time `locationName:"releaseTime" type:"timestamp"` + + // The Dedicated Host's state. + State *string `locationName:"state" type:"string" enum:"AllocationState"` + + // Any tags assigned to the Dedicated Host. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeIamInstanceProfileAssociationsInput) String() string { +func (s Host) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeIamInstanceProfileAssociationsInput) GoString() string { +func (s Host) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeIamInstanceProfileAssociationsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeIamInstanceProfileAssociationsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.NextToken != nil && len(*s.NextToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationIds sets the AssociationIds field's value. -func (s *DescribeIamInstanceProfileAssociationsInput) SetAssociationIds(v []*string) *DescribeIamInstanceProfileAssociationsInput { - s.AssociationIds = v +// SetAllocationTime sets the AllocationTime field's value. +func (s *Host) SetAllocationTime(v time.Time) *Host { + s.AllocationTime = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeIamInstanceProfileAssociationsInput) SetFilters(v []*Filter) *DescribeIamInstanceProfileAssociationsInput { - s.Filters = v +// SetAllowsMultipleInstanceTypes sets the AllowsMultipleInstanceTypes field's value. +func (s *Host) SetAllowsMultipleInstanceTypes(v string) *Host { + s.AllowsMultipleInstanceTypes = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeIamInstanceProfileAssociationsInput) SetMaxResults(v int64) *DescribeIamInstanceProfileAssociationsInput { - s.MaxResults = &v +// SetAutoPlacement sets the AutoPlacement field's value. +func (s *Host) SetAutoPlacement(v string) *Host { + s.AutoPlacement = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeIamInstanceProfileAssociationsInput) SetNextToken(v string) *DescribeIamInstanceProfileAssociationsInput { - s.NextToken = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *Host) SetAvailabilityZone(v string) *Host { + s.AvailabilityZone = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociationsResult -type DescribeIamInstanceProfileAssociationsOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more IAM instance profile associations. - IamInstanceProfileAssociations []*IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociationSet" locationNameList:"item" type:"list"` - - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" min:"1" type:"string"` -} - -// String returns the string representation -func (s DescribeIamInstanceProfileAssociationsOutput) String() string { - return awsutil.Prettify(s) +// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. +func (s *Host) SetAvailabilityZoneId(v string) *Host { + s.AvailabilityZoneId = &v + return s } -// GoString returns the string representation -func (s DescribeIamInstanceProfileAssociationsOutput) GoString() string { - return s.String() +// SetAvailableCapacity sets the AvailableCapacity field's value. +func (s *Host) SetAvailableCapacity(v *AvailableCapacity) *Host { + s.AvailableCapacity = v + return s } -// SetIamInstanceProfileAssociations sets the IamInstanceProfileAssociations field's value. -func (s *DescribeIamInstanceProfileAssociationsOutput) SetIamInstanceProfileAssociations(v []*IamInstanceProfileAssociation) *DescribeIamInstanceProfileAssociationsOutput { - s.IamInstanceProfileAssociations = v +// SetClientToken sets the ClientToken field's value. +func (s *Host) SetClientToken(v string) *Host { + s.ClientToken = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeIamInstanceProfileAssociationsOutput) SetNextToken(v string) *DescribeIamInstanceProfileAssociationsOutput { - s.NextToken = &v +// SetHostId sets the HostId field's value. +func (s *Host) SetHostId(v string) *Host { + s.HostId = &v return s } -// Contains the parameters for DescribeIdFormat. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormatRequest -type DescribeIdFormatInput struct { - _ struct{} `type:"structure"` - - // The type of resource: instance | reservation | snapshot | volume - Resource *string `type:"string"` +// SetHostProperties sets the HostProperties field's value. +func (s *Host) SetHostProperties(v *HostProperties) *Host { + s.HostProperties = v + return s } -// String returns the string representation -func (s DescribeIdFormatInput) String() string { - return awsutil.Prettify(s) +// SetHostRecovery sets the HostRecovery field's value. +func (s *Host) SetHostRecovery(v string) *Host { + s.HostRecovery = &v + return s } -// GoString returns the string representation -func (s DescribeIdFormatInput) GoString() string { - return s.String() +// SetHostReservationId sets the HostReservationId field's value. +func (s *Host) SetHostReservationId(v string) *Host { + s.HostReservationId = &v + return s } -// SetResource sets the Resource field's value. -func (s *DescribeIdFormatInput) SetResource(v string) *DescribeIdFormatInput { - s.Resource = &v +// SetInstances sets the Instances field's value. +func (s *Host) SetInstances(v []*HostInstance) *Host { + s.Instances = v return s } -// Contains the output of DescribeIdFormat. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormatResult -type DescribeIdFormatOutput struct { - _ struct{} `type:"structure"` - - // Information about the ID format for the resource. - Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` +// SetOwnerId sets the OwnerId field's value. +func (s *Host) SetOwnerId(v string) *Host { + s.OwnerId = &v + return s } -// String returns the string representation -func (s DescribeIdFormatOutput) String() string { - return awsutil.Prettify(s) +// SetReleaseTime sets the ReleaseTime field's value. +func (s *Host) SetReleaseTime(v time.Time) *Host { + s.ReleaseTime = &v + return s } -// GoString returns the string representation -func (s DescribeIdFormatOutput) GoString() string { - return s.String() +// SetState sets the State field's value. +func (s *Host) SetState(v string) *Host { + s.State = &v + return s } -// SetStatuses sets the Statuses field's value. -func (s *DescribeIdFormatOutput) SetStatuses(v []*IdFormat) *DescribeIdFormatOutput { - s.Statuses = v +// SetTags sets the Tags field's value. +func (s *Host) SetTags(v []*Tag) *Host { + s.Tags = v return s } -// Contains the parameters for DescribeIdentityIdFormat. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormatRequest -type DescribeIdentityIdFormatInput struct { +// Describes an instance running on a Dedicated Host. +type HostInstance struct { _ struct{} `type:"structure"` - // The ARN of the principal, which can be an IAM role, IAM user, or the root - // user. - // - // PrincipalArn is a required field - PrincipalArn *string `locationName:"principalArn" type:"string" required:"true"` + // The ID of instance that is running on the Dedicated Host. + InstanceId *string `locationName:"instanceId" type:"string"` - // The type of resource: instance | reservation | snapshot | volume - Resource *string `locationName:"resource" type:"string"` + // The instance type (for example, m3.medium) of the running instance. + InstanceType *string `locationName:"instanceType" type:"string"` + + // The ID of the AWS account that owns the instance. + OwnerId *string `locationName:"ownerId" type:"string"` } // String returns the string representation -func (s DescribeIdentityIdFormatInput) String() string { +func (s HostInstance) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeIdentityIdFormatInput) GoString() string { +func (s HostInstance) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeIdentityIdFormatInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeIdentityIdFormatInput"} - if s.PrincipalArn == nil { - invalidParams.Add(request.NewErrParamRequired("PrincipalArn")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetInstanceId sets the InstanceId field's value. +func (s *HostInstance) SetInstanceId(v string) *HostInstance { + s.InstanceId = &v + return s } -// SetPrincipalArn sets the PrincipalArn field's value. -func (s *DescribeIdentityIdFormatInput) SetPrincipalArn(v string) *DescribeIdentityIdFormatInput { - s.PrincipalArn = &v +// SetInstanceType sets the InstanceType field's value. +func (s *HostInstance) SetInstanceType(v string) *HostInstance { + s.InstanceType = &v return s } -// SetResource sets the Resource field's value. -func (s *DescribeIdentityIdFormatInput) SetResource(v string) *DescribeIdentityIdFormatInput { - s.Resource = &v +// SetOwnerId sets the OwnerId field's value. +func (s *HostInstance) SetOwnerId(v string) *HostInstance { + s.OwnerId = &v return s } -// Contains the output of DescribeIdentityIdFormat. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormatResult -type DescribeIdentityIdFormatOutput struct { +// Details about the Dedicated Host Reservation offering. +type HostOffering struct { _ struct{} `type:"structure"` - // Information about the ID format for the resources. - Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s DescribeIdentityIdFormatOutput) String() string { - return awsutil.Prettify(s) -} + // The currency of the offering. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` -// GoString returns the string representation -func (s DescribeIdentityIdFormatOutput) GoString() string { - return s.String() -} + // The duration of the offering (in seconds). + Duration *int64 `locationName:"duration" type:"integer"` -// SetStatuses sets the Statuses field's value. -func (s *DescribeIdentityIdFormatOutput) SetStatuses(v []*IdFormat) *DescribeIdentityIdFormatOutput { - s.Statuses = v - return s -} + // The hourly price of the offering. + HourlyPrice *string `locationName:"hourlyPrice" type:"string"` -// Contains the parameters for DescribeImageAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageAttributeRequest -type DescribeImageAttributeInput struct { - _ struct{} `type:"structure"` + // The instance family of the offering. + InstanceFamily *string `locationName:"instanceFamily" type:"string"` - // The AMI attribute. - // - // Note: Depending on your account privileges, the blockDeviceMapping attribute - // may return a Client.AuthFailure error. If this happens, use DescribeImages - // to get information about the block device mapping for the AMI. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"ImageAttributeName"` + // The ID of the offering. + OfferingId *string `locationName:"offeringId" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The available payment option. + PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` - // The ID of the AMI. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` + // The upfront price of the offering. Does not apply to No Upfront offerings. + UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` } // String returns the string representation -func (s DescribeImageAttributeInput) String() string { +func (s HostOffering) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeImageAttributeInput) GoString() string { +func (s HostOffering) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeImageAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *HostOffering) SetCurrencyCode(v string) *HostOffering { + s.CurrencyCode = &v + return s } -// SetAttribute sets the Attribute field's value. -func (s *DescribeImageAttributeInput) SetAttribute(v string) *DescribeImageAttributeInput { - s.Attribute = &v +// SetDuration sets the Duration field's value. +func (s *HostOffering) SetDuration(v int64) *HostOffering { + s.Duration = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeImageAttributeInput) SetDryRun(v bool) *DescribeImageAttributeInput { - s.DryRun = &v +// SetHourlyPrice sets the HourlyPrice field's value. +func (s *HostOffering) SetHourlyPrice(v string) *HostOffering { + s.HourlyPrice = &v return s } -// SetImageId sets the ImageId field's value. -func (s *DescribeImageAttributeInput) SetImageId(v string) *DescribeImageAttributeInput { - s.ImageId = &v +// SetInstanceFamily sets the InstanceFamily field's value. +func (s *HostOffering) SetInstanceFamily(v string) *HostOffering { + s.InstanceFamily = &v return s } -// Describes an image attribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageAttribute -type DescribeImageAttributeOutput struct { - _ struct{} `type:"structure"` +// SetOfferingId sets the OfferingId field's value. +func (s *HostOffering) SetOfferingId(v string) *HostOffering { + s.OfferingId = &v + return s +} - // One or more block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` +// SetPaymentOption sets the PaymentOption field's value. +func (s *HostOffering) SetPaymentOption(v string) *HostOffering { + s.PaymentOption = &v + return s +} - // A description for the AMI. - Description *AttributeValue `locationName:"description" type:"structure"` +// SetUpfrontPrice sets the UpfrontPrice field's value. +func (s *HostOffering) SetUpfrontPrice(v string) *HostOffering { + s.UpfrontPrice = &v + return s +} - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` +// Describes the properties of a Dedicated Host. +type HostProperties struct { + _ struct{} `type:"structure"` - // The kernel ID. - KernelId *AttributeValue `locationName:"kernel" type:"structure"` + // The number of cores on the Dedicated Host. + Cores *int64 `locationName:"cores" type:"integer"` - // One or more launch permissions. - LaunchPermissions []*LaunchPermission `locationName:"launchPermission" locationNameList:"item" type:"list"` + // The instance family supported by the Dedicated Host. For example, m5. + InstanceFamily *string `locationName:"instanceFamily" type:"string"` - // One or more product codes. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + // The instance type supported by the Dedicated Host. For example, m5.large. + // If the host supports multiple instance types, no instanceType is returned. + InstanceType *string `locationName:"instanceType" type:"string"` - // The RAM disk ID. - RamdiskId *AttributeValue `locationName:"ramdisk" type:"structure"` + // The number of sockets on the Dedicated Host. + Sockets *int64 `locationName:"sockets" type:"integer"` - // Indicates whether enhanced networking with the Intel 82599 Virtual Function - // interface is enabled. - SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` + // The total number of vCPUs on the Dedicated Host. + TotalVCpus *int64 `locationName:"totalVCpus" type:"integer"` } // String returns the string representation -func (s DescribeImageAttributeOutput) String() string { +func (s HostProperties) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeImageAttributeOutput) GoString() string { +func (s HostProperties) GoString() string { return s.String() } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *DescribeImageAttributeOutput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *DescribeImageAttributeOutput { - s.BlockDeviceMappings = v - return s -} - -// SetDescription sets the Description field's value. -func (s *DescribeImageAttributeOutput) SetDescription(v *AttributeValue) *DescribeImageAttributeOutput { - s.Description = v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *DescribeImageAttributeOutput) SetImageId(v string) *DescribeImageAttributeOutput { - s.ImageId = &v - return s -} - -// SetKernelId sets the KernelId field's value. -func (s *DescribeImageAttributeOutput) SetKernelId(v *AttributeValue) *DescribeImageAttributeOutput { - s.KernelId = v +// SetCores sets the Cores field's value. +func (s *HostProperties) SetCores(v int64) *HostProperties { + s.Cores = &v return s } -// SetLaunchPermissions sets the LaunchPermissions field's value. -func (s *DescribeImageAttributeOutput) SetLaunchPermissions(v []*LaunchPermission) *DescribeImageAttributeOutput { - s.LaunchPermissions = v +// SetInstanceFamily sets the InstanceFamily field's value. +func (s *HostProperties) SetInstanceFamily(v string) *HostProperties { + s.InstanceFamily = &v return s } -// SetProductCodes sets the ProductCodes field's value. -func (s *DescribeImageAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeImageAttributeOutput { - s.ProductCodes = v +// SetInstanceType sets the InstanceType field's value. +func (s *HostProperties) SetInstanceType(v string) *HostProperties { + s.InstanceType = &v return s } -// SetRamdiskId sets the RamdiskId field's value. -func (s *DescribeImageAttributeOutput) SetRamdiskId(v *AttributeValue) *DescribeImageAttributeOutput { - s.RamdiskId = v +// SetSockets sets the Sockets field's value. +func (s *HostProperties) SetSockets(v int64) *HostProperties { + s.Sockets = &v return s } -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *DescribeImageAttributeOutput) SetSriovNetSupport(v *AttributeValue) *DescribeImageAttributeOutput { - s.SriovNetSupport = v +// SetTotalVCpus sets the TotalVCpus field's value. +func (s *HostProperties) SetTotalVCpus(v int64) *HostProperties { + s.TotalVCpus = &v return s } -// Contains the parameters for DescribeImages. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImagesRequest -type DescribeImagesInput struct { +// Details about the Dedicated Host Reservation and associated Dedicated Hosts. +type HostReservation struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // Scopes the images by users with explicit launch permissions. Specify an AWS - // account ID, self (the sender of the request), or all (public AMIs). - ExecutableUsers []*string `locationName:"ExecutableBy" locationNameList:"ExecutableBy" type:"list"` - - // One or more filters. - // - // * architecture - The image architecture (i386 | x86_64). - // - // * block-device-mapping.delete-on-termination - A Boolean value that indicates - // whether the Amazon EBS volume is deleted on instance termination. - // - // * block-device-mapping.device-name - The device name for the EBS volume - // (for example, /dev/sdh). - // - // * block-device-mapping.snapshot-id - The ID of the snapshot used for the - // EBS volume. - // - // * block-device-mapping.volume-size - The volume size of the EBS volume, - // in GiB. - // - // * block-device-mapping.volume-type - The volume type of the EBS volume - // (gp2 | io1 | st1 | sc1 | standard). - // - // * description - The description of the image (provided during image creation). - // - // * ena-support - A Boolean that indicates whether enhanced networking with - // ENA is enabled. - // - // * hypervisor - The hypervisor type (ovm | xen). - // - // * image-id - The ID of the image. - // - // * image-type - The image type (machine | kernel | ramdisk). - // - // * is-public - A Boolean that indicates whether the image is public. - // - // * kernel-id - The kernel ID. - // - // * manifest-location - The location of the image manifest. - // - // * name - The name of the AMI (provided during image creation). - // - // * owner-alias - String value from an Amazon-maintained list (amazon | - // aws-marketplace | microsoft) of snapshot owners. Not to be confused with - // the user-configured AWS account alias, which is set from the IAM console. - // - // * owner-id - The AWS account ID of the image owner. - // - // * platform - The platform. To only list Windows-based AMIs, use windows. - // - // * product-code - The product code. - // - // * product-code.type - The type of the product code (devpay | marketplace). - // - // * ramdisk-id - The RAM disk ID. - // - // * root-device-name - The name of the root device volume (for example, - // /dev/sda1). - // - // * root-device-type - The type of the root device volume (ebs | instance-store). - // - // * state - The state of the image (available | pending | failed). - // - // * state-reason-code - The reason code for the state change. - // - // * state-reason-message - The message for the state change. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * virtualization-type - The virtualization type (paravirtual | hvm). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // The number of Dedicated Hosts the reservation is associated with. + Count *int64 `locationName:"count" type:"integer"` - // One or more image IDs. - // - // Default: Describes all images available to you. - ImageIds []*string `locationName:"ImageId" locationNameList:"ImageId" type:"list"` + // The currency in which the upfrontPrice and hourlyPrice amounts are specified. + // At this time, the only supported currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - // Filters the images by the owner. Specify an AWS account ID, self (owner is - // the sender of the request), or an AWS owner alias (valid values are amazon - // | aws-marketplace | microsoft). Omitting this option returns all images for - // which you have launch permissions, regardless of ownership. - Owners []*string `locationName:"Owner" locationNameList:"Owner" type:"list"` + // The length of the reservation's term, specified in seconds. Can be 31536000 + // (1 year) | 94608000 (3 years). + Duration *int64 `locationName:"duration" type:"integer"` + + // The date and time that the reservation ends. + End *time.Time `locationName:"end" type:"timestamp"` + + // The IDs of the Dedicated Hosts associated with the reservation. + HostIdSet []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` + + // The ID of the reservation that specifies the associated Dedicated Hosts. + HostReservationId *string `locationName:"hostReservationId" type:"string"` + + // The hourly price of the reservation. + HourlyPrice *string `locationName:"hourlyPrice" type:"string"` + + // The instance family of the Dedicated Host Reservation. The instance family + // on the Dedicated Host must be the same in order for it to benefit from the + // reservation. + InstanceFamily *string `locationName:"instanceFamily" type:"string"` + + // The ID of the reservation. This remains the same regardless of which Dedicated + // Hosts are associated with it. + OfferingId *string `locationName:"offeringId" type:"string"` + + // The payment option selected for this reservation. + PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` + + // The date and time that the reservation started. + Start *time.Time `locationName:"start" type:"timestamp"` + + // The state of the reservation. + State *string `locationName:"state" type:"string" enum:"ReservationState"` + + // Any tags assigned to the Dedicated Host Reservation. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The upfront price of the reservation. + UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` } // String returns the string representation -func (s DescribeImagesInput) String() string { +func (s HostReservation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeImagesInput) GoString() string { +func (s HostReservation) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeImagesInput) SetDryRun(v bool) *DescribeImagesInput { - s.DryRun = &v +// SetCount sets the Count field's value. +func (s *HostReservation) SetCount(v int64) *HostReservation { + s.Count = &v return s } -// SetExecutableUsers sets the ExecutableUsers field's value. -func (s *DescribeImagesInput) SetExecutableUsers(v []*string) *DescribeImagesInput { - s.ExecutableUsers = v +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *HostReservation) SetCurrencyCode(v string) *HostReservation { + s.CurrencyCode = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeImagesInput) SetFilters(v []*Filter) *DescribeImagesInput { - s.Filters = v +// SetDuration sets the Duration field's value. +func (s *HostReservation) SetDuration(v int64) *HostReservation { + s.Duration = &v return s } -// SetImageIds sets the ImageIds field's value. -func (s *DescribeImagesInput) SetImageIds(v []*string) *DescribeImagesInput { - s.ImageIds = v +// SetEnd sets the End field's value. +func (s *HostReservation) SetEnd(v time.Time) *HostReservation { + s.End = &v return s } -// SetOwners sets the Owners field's value. -func (s *DescribeImagesInput) SetOwners(v []*string) *DescribeImagesInput { - s.Owners = v +// SetHostIdSet sets the HostIdSet field's value. +func (s *HostReservation) SetHostIdSet(v []*string) *HostReservation { + s.HostIdSet = v return s } -// Contains the output of DescribeImages. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImagesResult -type DescribeImagesOutput struct { - _ struct{} `type:"structure"` +// SetHostReservationId sets the HostReservationId field's value. +func (s *HostReservation) SetHostReservationId(v string) *HostReservation { + s.HostReservationId = &v + return s +} - // Information about one or more images. - Images []*Image `locationName:"imagesSet" locationNameList:"item" type:"list"` +// SetHourlyPrice sets the HourlyPrice field's value. +func (s *HostReservation) SetHourlyPrice(v string) *HostReservation { + s.HourlyPrice = &v + return s } -// String returns the string representation -func (s DescribeImagesOutput) String() string { - return awsutil.Prettify(s) +// SetInstanceFamily sets the InstanceFamily field's value. +func (s *HostReservation) SetInstanceFamily(v string) *HostReservation { + s.InstanceFamily = &v + return s } -// GoString returns the string representation -func (s DescribeImagesOutput) GoString() string { - return s.String() +// SetOfferingId sets the OfferingId field's value. +func (s *HostReservation) SetOfferingId(v string) *HostReservation { + s.OfferingId = &v + return s } -// SetImages sets the Images field's value. -func (s *DescribeImagesOutput) SetImages(v []*Image) *DescribeImagesOutput { - s.Images = v +// SetPaymentOption sets the PaymentOption field's value. +func (s *HostReservation) SetPaymentOption(v string) *HostReservation { + s.PaymentOption = &v return s } -// Contains the parameters for DescribeImportImageTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasksRequest -type DescribeImportImageTasksInput struct { - _ struct{} `type:"structure"` +// SetStart sets the Start field's value. +func (s *HostReservation) SetStart(v time.Time) *HostReservation { + s.Start = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` +// SetState sets the State field's value. +func (s *HostReservation) SetState(v string) *HostReservation { + s.State = &v + return s +} - // Filter tasks using the task-state filter and one of the following values: - // active, completed, deleting, deleted. - Filters []*Filter `locationNameList:"Filter" type:"list"` +// SetTags sets the Tags field's value. +func (s *HostReservation) SetTags(v []*Tag) *HostReservation { + s.Tags = v + return s +} - // A list of import image task IDs. - ImportTaskIds []*string `locationName:"ImportTaskId" locationNameList:"ImportTaskId" type:"list"` +// SetUpfrontPrice sets the UpfrontPrice field's value. +func (s *HostReservation) SetUpfrontPrice(v string) *HostReservation { + s.UpfrontPrice = &v + return s +} - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` +// The internet key exchange (IKE) version permitted for the VPN tunnel. +type IKEVersionsListValue struct { + _ struct{} `type:"structure"` - // A token that indicates the next page of results. - NextToken *string `type:"string"` + // The IKE version. + Value *string `locationName:"value" type:"string"` } // String returns the string representation -func (s DescribeImportImageTasksInput) String() string { +func (s IKEVersionsListValue) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeImportImageTasksInput) GoString() string { +func (s IKEVersionsListValue) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeImportImageTasksInput) SetDryRun(v bool) *DescribeImportImageTasksInput { - s.DryRun = &v +// SetValue sets the Value field's value. +func (s *IKEVersionsListValue) SetValue(v string) *IKEVersionsListValue { + s.Value = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeImportImageTasksInput) SetFilters(v []*Filter) *DescribeImportImageTasksInput { - s.Filters = v - return s +// The IKE version that is permitted for the VPN tunnel. +type IKEVersionsRequestListValue struct { + _ struct{} `type:"structure"` + + // The IKE version. + Value *string `type:"string"` } -// SetImportTaskIds sets the ImportTaskIds field's value. -func (s *DescribeImportImageTasksInput) SetImportTaskIds(v []*string) *DescribeImportImageTasksInput { - s.ImportTaskIds = v - return s +// String returns the string representation +func (s IKEVersionsRequestListValue) String() string { + return awsutil.Prettify(s) } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeImportImageTasksInput) SetMaxResults(v int64) *DescribeImportImageTasksInput { - s.MaxResults = &v - return s +// GoString returns the string representation +func (s IKEVersionsRequestListValue) GoString() string { + return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeImportImageTasksInput) SetNextToken(v string) *DescribeImportImageTasksInput { - s.NextToken = &v +// SetValue sets the Value field's value. +func (s *IKEVersionsRequestListValue) SetValue(v string) *IKEVersionsRequestListValue { + s.Value = &v return s } -// Contains the output for DescribeImportImageTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasksResult -type DescribeImportImageTasksOutput struct { +// Describes an IAM instance profile. +type IamInstanceProfile struct { _ struct{} `type:"structure"` - // A list of zero or more import image tasks that are currently active or were - // completed or canceled in the previous 7 days. - ImportImageTasks []*ImportImageTask `locationName:"importImageTaskSet" locationNameList:"item" type:"list"` + // The Amazon Resource Name (ARN) of the instance profile. + Arn *string `locationName:"arn" type:"string"` - // The token to use to get the next page of results. This value is null when - // there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The ID of the instance profile. + Id *string `locationName:"id" type:"string"` } // String returns the string representation -func (s DescribeImportImageTasksOutput) String() string { +func (s IamInstanceProfile) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeImportImageTasksOutput) GoString() string { +func (s IamInstanceProfile) GoString() string { return s.String() } -// SetImportImageTasks sets the ImportImageTasks field's value. -func (s *DescribeImportImageTasksOutput) SetImportImageTasks(v []*ImportImageTask) *DescribeImportImageTasksOutput { - s.ImportImageTasks = v +// SetArn sets the Arn field's value. +func (s *IamInstanceProfile) SetArn(v string) *IamInstanceProfile { + s.Arn = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeImportImageTasksOutput) SetNextToken(v string) *DescribeImportImageTasksOutput { - s.NextToken = &v +// SetId sets the Id field's value. +func (s *IamInstanceProfile) SetId(v string) *IamInstanceProfile { + s.Id = &v return s } -// Contains the parameters for DescribeImportSnapshotTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasksRequest -type DescribeImportSnapshotTasksInput struct { +// Describes an association between an IAM instance profile and an instance. +type IamInstanceProfileAssociation struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // The ID of the association. + AssociationId *string `locationName:"associationId" type:"string"` - // One or more filters. - Filters []*Filter `locationNameList:"Filter" type:"list"` + // The IAM instance profile. + IamInstanceProfile *IamInstanceProfile `locationName:"iamInstanceProfile" type:"structure"` - // A list of import snapshot task IDs. - ImportTaskIds []*string `locationName:"ImportTaskId" locationNameList:"ImportTaskId" type:"list"` + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` + // The state of the association. + State *string `locationName:"state" type:"string" enum:"IamInstanceProfileAssociationState"` - // A token that indicates the next page of results. - NextToken *string `type:"string"` + // The time the IAM instance profile was associated with the instance. + Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` } // String returns the string representation -func (s DescribeImportSnapshotTasksInput) String() string { +func (s IamInstanceProfileAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeImportSnapshotTasksInput) GoString() string { +func (s IamInstanceProfileAssociation) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeImportSnapshotTasksInput) SetDryRun(v bool) *DescribeImportSnapshotTasksInput { - s.DryRun = &v +// SetAssociationId sets the AssociationId field's value. +func (s *IamInstanceProfileAssociation) SetAssociationId(v string) *IamInstanceProfileAssociation { + s.AssociationId = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeImportSnapshotTasksInput) SetFilters(v []*Filter) *DescribeImportSnapshotTasksInput { - s.Filters = v +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *IamInstanceProfileAssociation) SetIamInstanceProfile(v *IamInstanceProfile) *IamInstanceProfileAssociation { + s.IamInstanceProfile = v return s } -// SetImportTaskIds sets the ImportTaskIds field's value. -func (s *DescribeImportSnapshotTasksInput) SetImportTaskIds(v []*string) *DescribeImportSnapshotTasksInput { - s.ImportTaskIds = v +// SetInstanceId sets the InstanceId field's value. +func (s *IamInstanceProfileAssociation) SetInstanceId(v string) *IamInstanceProfileAssociation { + s.InstanceId = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeImportSnapshotTasksInput) SetMaxResults(v int64) *DescribeImportSnapshotTasksInput { - s.MaxResults = &v +// SetState sets the State field's value. +func (s *IamInstanceProfileAssociation) SetState(v string) *IamInstanceProfileAssociation { + s.State = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeImportSnapshotTasksInput) SetNextToken(v string) *DescribeImportSnapshotTasksInput { - s.NextToken = &v +// SetTimestamp sets the Timestamp field's value. +func (s *IamInstanceProfileAssociation) SetTimestamp(v time.Time) *IamInstanceProfileAssociation { + s.Timestamp = &v return s } -// Contains the output for DescribeImportSnapshotTasks. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasksResult -type DescribeImportSnapshotTasksOutput struct { +// Describes an IAM instance profile. +type IamInstanceProfileSpecification struct { _ struct{} `type:"structure"` - // A list of zero or more import snapshot tasks that are currently active or - // were completed or canceled in the previous 7 days. - ImportSnapshotTasks []*ImportSnapshotTask `locationName:"importSnapshotTaskSet" locationNameList:"item" type:"list"` + // The Amazon Resource Name (ARN) of the instance profile. + Arn *string `locationName:"arn" type:"string"` - // The token to use to get the next page of results. This value is null when - // there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The name of the instance profile. + Name *string `locationName:"name" type:"string"` } // String returns the string representation -func (s DescribeImportSnapshotTasksOutput) String() string { +func (s IamInstanceProfileSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeImportSnapshotTasksOutput) GoString() string { +func (s IamInstanceProfileSpecification) GoString() string { return s.String() } -// SetImportSnapshotTasks sets the ImportSnapshotTasks field's value. -func (s *DescribeImportSnapshotTasksOutput) SetImportSnapshotTasks(v []*ImportSnapshotTask) *DescribeImportSnapshotTasksOutput { - s.ImportSnapshotTasks = v +// SetArn sets the Arn field's value. +func (s *IamInstanceProfileSpecification) SetArn(v string) *IamInstanceProfileSpecification { + s.Arn = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeImportSnapshotTasksOutput) SetNextToken(v string) *DescribeImportSnapshotTasksOutput { - s.NextToken = &v +// SetName sets the Name field's value. +func (s *IamInstanceProfileSpecification) SetName(v string) *IamInstanceProfileSpecification { + s.Name = &v return s } -// Contains the parameters for DescribeInstanceAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceAttributeRequest -type DescribeInstanceAttributeInput struct { +// Describes the ICMP type and code. +type IcmpTypeCode struct { _ struct{} `type:"structure"` - // The instance attribute. - // - // Note: The enaSupport attribute is not supported at this time. - // - // Attribute is a required field - Attribute *string `locationName:"attribute" type:"string" required:"true" enum:"InstanceAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ICMP code. A value of -1 means all codes for the specified ICMP type. + Code *int64 `locationName:"code" type:"integer"` - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + // The ICMP type. A value of -1 means all types. + Type *int64 `locationName:"type" type:"integer"` } // String returns the string representation -func (s DescribeInstanceAttributeInput) String() string { +func (s IcmpTypeCode) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeInstanceAttributeInput) GoString() string { +func (s IcmpTypeCode) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeInstanceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeInstanceAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } +// SetCode sets the Code field's value. +func (s *IcmpTypeCode) SetCode(v int64) *IcmpTypeCode { + s.Code = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetType sets the Type field's value. +func (s *IcmpTypeCode) SetType(v int64) *IcmpTypeCode { + s.Type = &v + return s } -// SetAttribute sets the Attribute field's value. -func (s *DescribeInstanceAttributeInput) SetAttribute(v string) *DescribeInstanceAttributeInput { - s.Attribute = &v +// Describes the ID format for a resource. +type IdFormat struct { + _ struct{} `type:"structure"` + + // The date in UTC at which you are permanently switched over to using longer + // IDs. If a deadline is not yet available for this resource type, this field + // is not returned. + Deadline *time.Time `locationName:"deadline" type:"timestamp"` + + // The type of resource. + Resource *string `locationName:"resource" type:"string"` + + // Indicates whether longer IDs (17-character IDs) are enabled for the resource. + UseLongIds *bool `locationName:"useLongIds" type:"boolean"` +} + +// String returns the string representation +func (s IdFormat) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s IdFormat) GoString() string { + return s.String() +} + +// SetDeadline sets the Deadline field's value. +func (s *IdFormat) SetDeadline(v time.Time) *IdFormat { + s.Deadline = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeInstanceAttributeInput) SetDryRun(v bool) *DescribeInstanceAttributeInput { - s.DryRun = &v +// SetResource sets the Resource field's value. +func (s *IdFormat) SetResource(v string) *IdFormat { + s.Resource = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *DescribeInstanceAttributeInput) SetInstanceId(v string) *DescribeInstanceAttributeInput { - s.InstanceId = &v +// SetUseLongIds sets the UseLongIds field's value. +func (s *IdFormat) SetUseLongIds(v bool) *IdFormat { + s.UseLongIds = &v return s } -// Describes an instance attribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceAttribute -type DescribeInstanceAttributeOutput struct { +// Describes an image. +type Image struct { _ struct{} `type:"structure"` - // The block device mapping of the instance. - BlockDeviceMappings []*InstanceBlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` + // The architecture of the image. + Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` - // If the value is true, you can't terminate the instance through the Amazon - // EC2 console, CLI, or API; otherwise, you can. - DisableApiTermination *AttributeBooleanValue `locationName:"disableApiTermination" type:"structure"` + // Any block device mapping entries. + BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - // Indicates whether the instance is optimized for EBS I/O. - EbsOptimized *AttributeBooleanValue `locationName:"ebsOptimized" type:"structure"` + // The date and time the image was created. + CreationDate *string `locationName:"creationDate" type:"string"` - // Indicates whether enhanced networking with ENA is enabled. - EnaSupport *AttributeBooleanValue `locationName:"enaSupport" type:"structure"` + // The description of the AMI that was provided during image creation. + Description *string `locationName:"description" type:"string"` - // The security groups associated with the instance. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + // Specifies whether enhanced networking with ENA is enabled. + EnaSupport *bool `locationName:"enaSupport" type:"boolean"` - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` + // The hypervisor type of the image. + Hypervisor *string `locationName:"hypervisor" type:"string" enum:"HypervisorType"` - // Indicates whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - InstanceInitiatedShutdownBehavior *AttributeValue `locationName:"instanceInitiatedShutdownBehavior" type:"structure"` + // The ID of the AMI. + ImageId *string `locationName:"imageId" type:"string"` - // The instance type. - InstanceType *AttributeValue `locationName:"instanceType" type:"structure"` + // The location of the AMI. + ImageLocation *string `locationName:"imageLocation" type:"string"` - // The kernel ID. - KernelId *AttributeValue `locationName:"kernel" type:"structure"` + // The AWS account alias (for example, amazon, self) or the AWS account ID of + // the AMI owner. + ImageOwnerAlias *string `locationName:"imageOwnerAlias" type:"string"` - // A list of product codes. + // The type of image. + ImageType *string `locationName:"imageType" type:"string" enum:"ImageTypeValues"` + + // The kernel associated with the image, if any. Only applicable for machine + // images. + KernelId *string `locationName:"kernelId" type:"string"` + + // The name of the AMI that was provided during image creation. + Name *string `locationName:"name" type:"string"` + + // The AWS account ID of the image owner. + OwnerId *string `locationName:"imageOwnerId" type:"string"` + + // This value is set to windows for Windows AMIs; otherwise, it is blank. + Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` + + // Any product codes associated with the AMI. ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - // The RAM disk ID. - RamdiskId *AttributeValue `locationName:"ramdisk" type:"structure"` + // Indicates whether the image has public launch permissions. The value is true + // if this image has public launch permissions or false if it has only implicit + // and explicit launch permissions. + Public *bool `locationName:"isPublic" type:"boolean"` - // The name of the root device (for example, /dev/sda1 or /dev/xvda). - RootDeviceName *AttributeValue `locationName:"rootDeviceName" type:"structure"` + // The RAM disk associated with the image, if any. Only applicable for machine + // images. + RamdiskId *string `locationName:"ramdiskId" type:"string"` - // Indicates whether source/destination checking is enabled. A value of true - // means checking is enabled, and false means checking is disabled. This value - // must be false for a NAT instance to perform NAT. - SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` + // The device name of the root device volume (for example, /dev/sda1). + RootDeviceName *string `locationName:"rootDeviceName" type:"string"` - // Indicates whether enhanced networking with the Intel 82599 Virtual Function + // The type of root device used by the AMI. The AMI can use an EBS volume or + // an instance store volume. + RootDeviceType *string `locationName:"rootDeviceType" type:"string" enum:"DeviceType"` + + // Specifies whether enhanced networking with the Intel 82599 Virtual Function // interface is enabled. - SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` + SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` - // The user data. - UserData *AttributeValue `locationName:"userData" type:"structure"` + // The current state of the AMI. If the state is available, the image is successfully + // registered and can be used to launch an instance. + State *string `locationName:"imageState" type:"string" enum:"ImageState"` + + // The reason for the state change. + StateReason *StateReason `locationName:"stateReason" type:"structure"` + + // Any tags assigned to the image. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The type of virtualization of the AMI. + VirtualizationType *string `locationName:"virtualizationType" type:"string" enum:"VirtualizationType"` +} + +// String returns the string representation +func (s Image) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Image) GoString() string { + return s.String() +} + +// SetArchitecture sets the Architecture field's value. +func (s *Image) SetArchitecture(v string) *Image { + s.Architecture = &v + return s +} + +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *Image) SetBlockDeviceMappings(v []*BlockDeviceMapping) *Image { + s.BlockDeviceMappings = v + return s +} + +// SetCreationDate sets the CreationDate field's value. +func (s *Image) SetCreationDate(v string) *Image { + s.CreationDate = &v + return s } -// String returns the string representation -func (s DescribeInstanceAttributeOutput) String() string { - return awsutil.Prettify(s) +// SetDescription sets the Description field's value. +func (s *Image) SetDescription(v string) *Image { + s.Description = &v + return s } -// GoString returns the string representation -func (s DescribeInstanceAttributeOutput) GoString() string { - return s.String() +// SetEnaSupport sets the EnaSupport field's value. +func (s *Image) SetEnaSupport(v bool) *Image { + s.EnaSupport = &v + return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *DescribeInstanceAttributeOutput) SetBlockDeviceMappings(v []*InstanceBlockDeviceMapping) *DescribeInstanceAttributeOutput { - s.BlockDeviceMappings = v +// SetHypervisor sets the Hypervisor field's value. +func (s *Image) SetHypervisor(v string) *Image { + s.Hypervisor = &v return s } -// SetDisableApiTermination sets the DisableApiTermination field's value. -func (s *DescribeInstanceAttributeOutput) SetDisableApiTermination(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { - s.DisableApiTermination = v +// SetImageId sets the ImageId field's value. +func (s *Image) SetImageId(v string) *Image { + s.ImageId = &v return s } -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *DescribeInstanceAttributeOutput) SetEbsOptimized(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { - s.EbsOptimized = v +// SetImageLocation sets the ImageLocation field's value. +func (s *Image) SetImageLocation(v string) *Image { + s.ImageLocation = &v return s } -// SetEnaSupport sets the EnaSupport field's value. -func (s *DescribeInstanceAttributeOutput) SetEnaSupport(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { - s.EnaSupport = v +// SetImageOwnerAlias sets the ImageOwnerAlias field's value. +func (s *Image) SetImageOwnerAlias(v string) *Image { + s.ImageOwnerAlias = &v return s } -// SetGroups sets the Groups field's value. -func (s *DescribeInstanceAttributeOutput) SetGroups(v []*GroupIdentifier) *DescribeInstanceAttributeOutput { - s.Groups = v +// SetImageType sets the ImageType field's value. +func (s *Image) SetImageType(v string) *Image { + s.ImageType = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *DescribeInstanceAttributeOutput) SetInstanceId(v string) *DescribeInstanceAttributeOutput { - s.InstanceId = &v +// SetKernelId sets the KernelId field's value. +func (s *Image) SetKernelId(v string) *Image { + s.KernelId = &v return s } -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *DescribeInstanceAttributeOutput) SetInstanceInitiatedShutdownBehavior(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.InstanceInitiatedShutdownBehavior = v +// SetName sets the Name field's value. +func (s *Image) SetName(v string) *Image { + s.Name = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *DescribeInstanceAttributeOutput) SetInstanceType(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.InstanceType = v +// SetOwnerId sets the OwnerId field's value. +func (s *Image) SetOwnerId(v string) *Image { + s.OwnerId = &v return s } -// SetKernelId sets the KernelId field's value. -func (s *DescribeInstanceAttributeOutput) SetKernelId(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.KernelId = v +// SetPlatform sets the Platform field's value. +func (s *Image) SetPlatform(v string) *Image { + s.Platform = &v return s } // SetProductCodes sets the ProductCodes field's value. -func (s *DescribeInstanceAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeInstanceAttributeOutput { +func (s *Image) SetProductCodes(v []*ProductCode) *Image { s.ProductCodes = v return s } +// SetPublic sets the Public field's value. +func (s *Image) SetPublic(v bool) *Image { + s.Public = &v + return s +} + // SetRamdiskId sets the RamdiskId field's value. -func (s *DescribeInstanceAttributeOutput) SetRamdiskId(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.RamdiskId = v +func (s *Image) SetRamdiskId(v string) *Image { + s.RamdiskId = &v return s } // SetRootDeviceName sets the RootDeviceName field's value. -func (s *DescribeInstanceAttributeOutput) SetRootDeviceName(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.RootDeviceName = v +func (s *Image) SetRootDeviceName(v string) *Image { + s.RootDeviceName = &v return s } -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *DescribeInstanceAttributeOutput) SetSourceDestCheck(v *AttributeBooleanValue) *DescribeInstanceAttributeOutput { - s.SourceDestCheck = v +// SetRootDeviceType sets the RootDeviceType field's value. +func (s *Image) SetRootDeviceType(v string) *Image { + s.RootDeviceType = &v return s } // SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *DescribeInstanceAttributeOutput) SetSriovNetSupport(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.SriovNetSupport = v +func (s *Image) SetSriovNetSupport(v string) *Image { + s.SriovNetSupport = &v return s } -// SetUserData sets the UserData field's value. -func (s *DescribeInstanceAttributeOutput) SetUserData(v *AttributeValue) *DescribeInstanceAttributeOutput { - s.UserData = v +// SetState sets the State field's value. +func (s *Image) SetState(v string) *Image { + s.State = &v return s } -// Contains the parameters for DescribeInstanceStatus. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatusRequest -type DescribeInstanceStatusInput struct { +// SetStateReason sets the StateReason field's value. +func (s *Image) SetStateReason(v *StateReason) *Image { + s.StateReason = v + return s +} + +// SetTags sets the Tags field's value. +func (s *Image) SetTags(v []*Tag) *Image { + s.Tags = v + return s +} + +// SetVirtualizationType sets the VirtualizationType field's value. +func (s *Image) SetVirtualizationType(v string) *Image { + s.VirtualizationType = &v + return s +} + +// Describes the disk container object for an import image task. +type ImageDiskContainer struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The description of the disk image. + Description *string `type:"string"` - // One or more filters. - // - // * availability-zone - The Availability Zone of the instance. - // - // * event.code - The code for the scheduled event (instance-reboot | system-reboot - // | system-maintenance | instance-retirement | instance-stop). - // - // * event.description - A description of the event. - // - // * event.not-after - The latest end time for the scheduled event (for example, - // 2014-09-15T17:15:20.000Z). - // - // * event.not-before - The earliest start time for the scheduled event (for - // example, 2014-09-15T17:15:20.000Z). - // - // * instance-state-code - The code for the instance state, as a 16-bit unsigned - // integer. The high byte is an opaque internal value and should be ignored. - // The low byte is set based on the state represented. The valid values are - // 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), - // and 80 (stopped). - // - // * instance-state-name - The state of the instance (pending | running | - // shutting-down | terminated | stopping | stopped). - // - // * instance-status.reachability - Filters on instance status where the - // name is reachability (passed | failed | initializing | insufficient-data). - // - // * instance-status.status - The status of the instance (ok | impaired | - // initializing | insufficient-data | not-applicable). - // - // * system-status.reachability - Filters on system status where the name - // is reachability (passed | failed | initializing | insufficient-data). - // - // * system-status.status - The system status of the instance (ok | impaired - // | initializing | insufficient-data | not-applicable). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // The block device mapping for the disk. + DeviceName *string `type:"string"` - // When true, includes the health status for all instances. When false, includes - // the health status for running instances only. + // The format of the disk image being imported. // - // Default: false - IncludeAllInstances *bool `locationName:"includeAllInstances" type:"boolean"` + // Valid values: VHD | VMDK | OVA + Format *string `type:"string"` - // One or more instance IDs. - // - // Default: Describes all your instances. - // - // Constraints: Maximum 100 explicitly specified instance IDs. - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` + // The ID of the EBS snapshot to be used for importing the snapshot. + SnapshotId *string `type:"string"` - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. This - // value can be between 5 and 1000. You cannot specify this parameter and the - // instance IDs parameter in the same call. - MaxResults *int64 `type:"integer"` + // The URL to the Amazon S3-based disk image being imported. The URL can either + // be a https URL (https://..) or an Amazon S3 URL (s3://..) + Url *string `type:"string"` - // The token to retrieve the next page of results. - NextToken *string `type:"string"` + // The S3 bucket for the disk image. + UserBucket *UserBucket `type:"structure"` } // String returns the string representation -func (s DescribeInstanceStatusInput) String() string { +func (s ImageDiskContainer) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeInstanceStatusInput) GoString() string { +func (s ImageDiskContainer) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeInstanceStatusInput) SetDryRun(v bool) *DescribeInstanceStatusInput { - s.DryRun = &v +// SetDescription sets the Description field's value. +func (s *ImageDiskContainer) SetDescription(v string) *ImageDiskContainer { + s.Description = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeInstanceStatusInput) SetFilters(v []*Filter) *DescribeInstanceStatusInput { - s.Filters = v +// SetDeviceName sets the DeviceName field's value. +func (s *ImageDiskContainer) SetDeviceName(v string) *ImageDiskContainer { + s.DeviceName = &v return s } -// SetIncludeAllInstances sets the IncludeAllInstances field's value. -func (s *DescribeInstanceStatusInput) SetIncludeAllInstances(v bool) *DescribeInstanceStatusInput { - s.IncludeAllInstances = &v +// SetFormat sets the Format field's value. +func (s *ImageDiskContainer) SetFormat(v string) *ImageDiskContainer { + s.Format = &v return s } -// SetInstanceIds sets the InstanceIds field's value. -func (s *DescribeInstanceStatusInput) SetInstanceIds(v []*string) *DescribeInstanceStatusInput { - s.InstanceIds = v +// SetSnapshotId sets the SnapshotId field's value. +func (s *ImageDiskContainer) SetSnapshotId(v string) *ImageDiskContainer { + s.SnapshotId = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeInstanceStatusInput) SetMaxResults(v int64) *DescribeInstanceStatusInput { - s.MaxResults = &v +// SetUrl sets the Url field's value. +func (s *ImageDiskContainer) SetUrl(v string) *ImageDiskContainer { + s.Url = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceStatusInput) SetNextToken(v string) *DescribeInstanceStatusInput { - s.NextToken = &v +// SetUserBucket sets the UserBucket field's value. +func (s *ImageDiskContainer) SetUserBucket(v *UserBucket) *ImageDiskContainer { + s.UserBucket = v return s } -// Contains the output of DescribeInstanceStatus. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatusResult -type DescribeInstanceStatusOutput struct { +type ImportClientVpnClientCertificateRevocationListInput struct { _ struct{} `type:"structure"` - // One or more instance status descriptions. - InstanceStatuses []*InstanceStatus `locationName:"instanceStatusSet" locationNameList:"item" type:"list"` + // The client certificate revocation list file. For more information, see Generate + // a Client Certificate Revocation List (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate) + // in the AWS Client VPN Administrator Guide. + // + // CertificateRevocationList is a required field + CertificateRevocationList *string `type:"string" required:"true"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The ID of the Client VPN endpoint to which the client certificate revocation + // list applies. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s DescribeInstanceStatusOutput) String() string { +func (s ImportClientVpnClientCertificateRevocationListInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeInstanceStatusOutput) GoString() string { +func (s ImportClientVpnClientCertificateRevocationListInput) GoString() string { return s.String() } -// SetInstanceStatuses sets the InstanceStatuses field's value. -func (s *DescribeInstanceStatusOutput) SetInstanceStatuses(v []*InstanceStatus) *DescribeInstanceStatusOutput { - s.InstanceStatuses = v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ImportClientVpnClientCertificateRevocationListInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ImportClientVpnClientCertificateRevocationListInput"} + if s.CertificateRevocationList == nil { + invalidParams.Add(request.NewErrParamRequired("CertificateRevocationList")) + } + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificateRevocationList sets the CertificateRevocationList field's value. +func (s *ImportClientVpnClientCertificateRevocationListInput) SetCertificateRevocationList(v string) *ImportClientVpnClientCertificateRevocationListInput { + s.CertificateRevocationList = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstanceStatusOutput) SetNextToken(v string) *DescribeInstanceStatusOutput { - s.NextToken = &v +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *ImportClientVpnClientCertificateRevocationListInput) SetClientVpnEndpointId(v string) *ImportClientVpnClientCertificateRevocationListInput { + s.ClientVpnEndpointId = &v return s } -// Contains the parameters for DescribeInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstancesRequest -type DescribeInstancesInput struct { +// SetDryRun sets the DryRun field's value. +func (s *ImportClientVpnClientCertificateRevocationListInput) SetDryRun(v bool) *ImportClientVpnClientCertificateRevocationListInput { + s.DryRun = &v + return s +} + +type ImportClientVpnClientCertificateRevocationListOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s ImportClientVpnClientCertificateRevocationListOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ImportClientVpnClientCertificateRevocationListOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *ImportClientVpnClientCertificateRevocationListOutput) SetReturn(v bool) *ImportClientVpnClientCertificateRevocationListOutput { + s.Return = &v + return s +} + +type ImportImageInput struct { _ struct{} `type:"structure"` + // The architecture of the virtual machine. + // + // Valid values: i386 | x86_64 | arm64 + Architecture *string `type:"string"` + + // The client-specific data. + ClientData *ClientData `type:"structure"` + + // The token to enable idempotency for VM import requests. + ClientToken *string `type:"string"` + + // A description string for the import image task. + Description *string `type:"string"` + + // Information about the disk containers. + DiskContainers []*ImageDiskContainer `locationName:"DiskContainer" locationNameList:"item" type:"list"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // One or more filters. - // - // * affinity - The affinity setting for an instance running on a Dedicated - // Host (default | host). - // - // * architecture - The instance architecture (i386 | x86_64). - // - // * association.public-ip - The address of the Elastic IP address (IPv4) - // bound to the network interface. - // - // * association.ip-owner-id - The owner of the Elastic IP address (IPv4) - // associated with the network interface. - // - // * association.allocation-id - The allocation ID returned when you allocated - // the Elastic IP address (IPv4) for your network interface. - // - // * association.association-id - The association ID returned when the network - // interface was associated with an IPv4 address. - // - // * availability-zone - The Availability Zone of the instance. - // - // * block-device-mapping.attach-time - The attach time for an EBS volume - // mapped to the instance, for example, 2010-09-15T17:15:20.000Z. - // - // * block-device-mapping.delete-on-termination - A Boolean that indicates - // whether the EBS volume is deleted on instance termination. - // - // * block-device-mapping.device-name - The device name for the EBS volume - // (for example, /dev/sdh or xvdh). - // - // * block-device-mapping.status - The status for the EBS volume (attaching - // | attached | detaching | detached). - // - // * block-device-mapping.volume-id - The volume ID of the EBS volume. - // - // * client-token - The idempotency token you provided when you launched - // the instance. - // - // * dns-name - The public DNS name of the instance. - // - // * group-id - The ID of the security group for the instance. EC2-Classic - // only. - // - // * group-name - The name of the security group for the instance. EC2-Classic - // only. - // - // * host-id - The ID of the Dedicated Host on which the instance is running, - // if applicable. - // - // * hypervisor - The hypervisor type of the instance (ovm | xen). - // - // * iam-instance-profile.arn - The instance profile associated with the - // instance. Specified as an ARN. - // - // * image-id - The ID of the image used to launch the instance. - // - // * instance-id - The ID of the instance. - // - // * instance-lifecycle - Indicates whether this is a Spot Instance or a - // Scheduled Instance (spot | scheduled). - // - // * instance-state-code - The state of the instance, as a 16-bit unsigned - // integer. The high byte is an opaque internal value and should be ignored. - // The low byte is set based on the state represented. The valid values are: - // 0 (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), - // and 80 (stopped). - // - // * instance-state-name - The state of the instance (pending | running | - // shutting-down | terminated | stopping | stopped). - // - // * instance-type - The type of instance (for example, t2.micro). - // - // * instance.group-id - The ID of the security group for the instance. - // - // * instance.group-name - The name of the security group for the instance. - // - // - // * ip-address - The public IPv4 address of the instance. - // - // * kernel-id - The kernel ID. - // - // * key-name - The name of the key pair used when the instance was launched. - // - // * launch-index - When launching multiple instances, this is the index - // for the instance in the launch group (for example, 0, 1, 2, and so on). - // - // - // * launch-time - The time when the instance was launched. - // - // * monitoring-state - Indicates whether detailed monitoring is enabled - // (disabled | enabled). - // - // * network-interface.addresses.private-ip-address - The private IPv4 address - // associated with the network interface. - // - // * network-interface.addresses.primary - Specifies whether the IPv4 address - // of the network interface is the primary private IPv4 address. - // - // * network-interface.addresses.association.public-ip - The ID of the association - // of an Elastic IP address (IPv4) with a network interface. - // - // * network-interface.addresses.association.ip-owner-id - The owner ID of - // the private IPv4 address associated with the network interface. - // - // * network-interface.attachment.attachment-id - The ID of the interface - // attachment. - // - // * network-interface.attachment.instance-id - The ID of the instance to - // which the network interface is attached. - // - // * network-interface.attachment.instance-owner-id - The owner ID of the - // instance to which the network interface is attached. - // - // * network-interface.attachment.device-index - The device index to which - // the network interface is attached. - // - // * network-interface.attachment.status - The status of the attachment (attaching - // | attached | detaching | detached). - // - // * network-interface.attachment.attach-time - The time that the network - // interface was attached to an instance. - // - // * network-interface.attachment.delete-on-termination - Specifies whether - // the attachment is deleted when an instance is terminated. - // - // * network-interface.availability-zone - The Availability Zone for the - // network interface. - // - // * network-interface.description - The description of the network interface. - // - // * network-interface.group-id - The ID of a security group associated with - // the network interface. - // - // * network-interface.group-name - The name of a security group associated - // with the network interface. - // - // * network-interface.ipv6-addresses.ipv6-address - The IPv6 address associated - // with the network interface. - // - // * network-interface.mac-address - The MAC address of the network interface. - // - // * network-interface.network-interface-id - The ID of the network interface. - // - // * network-interface.owner-id - The ID of the owner of the network interface. - // - // * network-interface.private-dns-name - The private DNS name of the network - // interface. - // - // * network-interface.requester-id - The requester ID for the network interface. - // - // * network-interface.requester-managed - Indicates whether the network - // interface is being managed by AWS. - // - // * network-interface.status - The status of the network interface (available) - // | in-use). - // - // * network-interface.source-dest-check - Whether the network interface - // performs source/destination checking. A value of true means checking is - // enabled, and false means checking is disabled. The value must be false - // for the network interface to perform network address translation (NAT) - // in your VPC. - // - // * network-interface.subnet-id - The ID of the subnet for the network interface. - // - // * network-interface.vpc-id - The ID of the VPC for the network interface. - // - // * owner-id - The AWS account ID of the instance owner. - // - // * placement-group-name - The name of the placement group for the instance. - // - // * platform - The platform. Use windows if you have Windows instances; - // otherwise, leave blank. - // - // * private-dns-name - The private IPv4 DNS name of the instance. - // - // * private-ip-address - The private IPv4 address of the instance. - // - // * product-code - The product code associated with the AMI used to launch - // the instance. - // - // * product-code.type - The type of product code (devpay | marketplace). - // - // * ramdisk-id - The RAM disk ID. - // - // * reason - The reason for the current state of the instance (for example, - // shows "User Initiated [date]" when you stop or terminate the instance). - // Similar to the state-reason-code filter. - // - // * requester-id - The ID of the entity that launched the instance on your - // behalf (for example, AWS Management Console, Auto Scaling, and so on). - // - // * reservation-id - The ID of the instance's reservation. A reservation - // ID is created any time you launch an instance. A reservation ID has a - // one-to-one relationship with an instance launch request, but can be associated - // with more than one instance if you launch multiple instances using the - // same launch request. For example, if you launch one instance, you'll get - // one reservation ID. If you launch ten instances using the same launch - // request, you'll also get one reservation ID. - // - // * root-device-name - The name of the root device for the instance (for - // example, /dev/sda1 or /dev/xvda). - // - // * root-device-type - The type of root device that the instance uses (ebs - // | instance-store). - // - // * source-dest-check - Indicates whether the instance performs source/destination - // checking. A value of true means that checking is enabled, and false means - // checking is disabled. The value must be false for the instance to perform - // network address translation (NAT) in your VPC. - // - // * spot-instance-request-id - The ID of the Spot instance request. - // - // * state-reason-code - The reason code for the state change. - // - // * state-reason-message - A message that describes the state change. + // Specifies whether the destination AMI of the imported image should be encrypted. + // The default CMK for EBS is used unless you specify a non-default AWS Key + // Management Service (AWS KMS) CMK using KmsKeyId. For more information, see + // Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) + // in the Amazon Elastic Compute Cloud User Guide. + Encrypted *bool `type:"boolean"` + + // The target hypervisor platform. // - // * subnet-id - The ID of the subnet for the instance. + // Valid values: xen + Hypervisor *string `type:"string"` + + // An identifier for the AWS Key Management Service (AWS KMS) customer master + // key (CMK) to use when creating the encrypted AMI. This parameter is only + // required if you want to use a non-default CMK; if this parameter is not specified, + // the default CMK for EBS is used. If a KmsKeyId is specified, the Encrypted + // flag must also be set. // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. + // The CMK identifier may be provided in any of the following formats: // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. + // * Key ID // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. + // * Key alias. The alias ARN contains the arn:aws:kms namespace, followed + // by the Region of the CMK, the AWS account ID of the CMK owner, the alias + // namespace, and then the CMK alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. // - // * tenancy - The tenancy of an instance (dedicated | default | host). + // * ARN using key ID. The ID ARN contains the arn:aws:kms namespace, followed + // by the Region of the CMK, the AWS account ID of the CMK owner, the key + // namespace, and then the CMK ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. // - // * virtualization-type - The virtualization type of the instance (paravirtual - // | hvm). + // * ARN using key alias. The alias ARN contains the arn:aws:kms namespace, + // followed by the Region of the CMK, the AWS account ID of the CMK owner, + // the alias namespace, and then the CMK alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. // - // * vpc-id - The ID of the VPC that the instance is running in. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // AWS parses KmsKeyId asynchronously, meaning that the action you call may + // appear to complete even though you provided an invalid identifier. This action + // will eventually report failure. + // + // The specified CMK must exist in the Region that the AMI is being copied to. + KmsKeyId *string `type:"string"` - // One or more instance IDs. + // The ARNs of the license configurations. + LicenseSpecifications []*ImportImageLicenseConfigurationRequest `locationNameList:"item" type:"list"` + + // The license type to be used for the Amazon Machine Image (AMI) after importing. // - // Default: Describes all your instances. - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list"` + // By default, we detect the source-system operating system (OS) and apply the + // appropriate license. Specify AWS to replace the source-system license with + // an AWS license, if appropriate. Specify BYOL to retain the source-system + // license, if appropriate. + // + // To use BYOL, you must have existing licenses with rights to use these licenses + // in a third party cloud, such as AWS. For more information, see Prerequisites + // (https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image) + // in the VM Import/Export User Guide. + LicenseType *string `type:"string"` - // The maximum number of results to return in a single call. To retrieve the - // remaining results, make another call with the returned NextToken value. This - // value can be between 5 and 1000. You cannot specify this parameter and the - // instance IDs parameter or tag filters in the same call. - MaxResults *int64 `locationName:"maxResults" type:"integer"` + // The operating system of the virtual machine. + // + // Valid values: Windows | Linux + Platform *string `type:"string"` - // The token to request the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` + // The name of the role to use when not using the default role, 'vmimport'. + RoleName *string `type:"string"` } // String returns the string representation -func (s DescribeInstancesInput) String() string { +func (s ImportImageInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeInstancesInput) GoString() string { +func (s ImportImageInput) GoString() string { return s.String() } +// SetArchitecture sets the Architecture field's value. +func (s *ImportImageInput) SetArchitecture(v string) *ImportImageInput { + s.Architecture = &v + return s +} + +// SetClientData sets the ClientData field's value. +func (s *ImportImageInput) SetClientData(v *ClientData) *ImportImageInput { + s.ClientData = v + return s +} + +// SetClientToken sets the ClientToken field's value. +func (s *ImportImageInput) SetClientToken(v string) *ImportImageInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *ImportImageInput) SetDescription(v string) *ImportImageInput { + s.Description = &v + return s +} + +// SetDiskContainers sets the DiskContainers field's value. +func (s *ImportImageInput) SetDiskContainers(v []*ImageDiskContainer) *ImportImageInput { + s.DiskContainers = v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *DescribeInstancesInput) SetDryRun(v bool) *DescribeInstancesInput { +func (s *ImportImageInput) SetDryRun(v bool) *ImportImageInput { s.DryRun = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeInstancesInput) SetFilters(v []*Filter) *DescribeInstancesInput { - s.Filters = v +// SetEncrypted sets the Encrypted field's value. +func (s *ImportImageInput) SetEncrypted(v bool) *ImportImageInput { + s.Encrypted = &v return s } -// SetInstanceIds sets the InstanceIds field's value. -func (s *DescribeInstancesInput) SetInstanceIds(v []*string) *DescribeInstancesInput { - s.InstanceIds = v +// SetHypervisor sets the Hypervisor field's value. +func (s *ImportImageInput) SetHypervisor(v string) *ImportImageInput { + s.Hypervisor = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeInstancesInput) SetMaxResults(v int64) *DescribeInstancesInput { - s.MaxResults = &v +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *ImportImageInput) SetKmsKeyId(v string) *ImportImageInput { + s.KmsKeyId = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstancesInput) SetNextToken(v string) *DescribeInstancesInput { - s.NextToken = &v +// SetLicenseSpecifications sets the LicenseSpecifications field's value. +func (s *ImportImageInput) SetLicenseSpecifications(v []*ImportImageLicenseConfigurationRequest) *ImportImageInput { + s.LicenseSpecifications = v return s } -// Contains the output of DescribeInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstancesResult -type DescribeInstancesOutput struct { - _ struct{} `type:"structure"` +// SetLicenseType sets the LicenseType field's value. +func (s *ImportImageInput) SetLicenseType(v string) *ImportImageInput { + s.LicenseType = &v + return s +} - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` +// SetPlatform sets the Platform field's value. +func (s *ImportImageInput) SetPlatform(v string) *ImportImageInput { + s.Platform = &v + return s +} - // Zero or more reservations. - Reservations []*Reservation `locationName:"reservationSet" locationNameList:"item" type:"list"` +// SetRoleName sets the RoleName field's value. +func (s *ImportImageInput) SetRoleName(v string) *ImportImageInput { + s.RoleName = &v + return s +} + +// The request information of license configurations. +type ImportImageLicenseConfigurationRequest struct { + _ struct{} `type:"structure"` + + // The ARN of a license configuration. + LicenseConfigurationArn *string `type:"string"` } // String returns the string representation -func (s DescribeInstancesOutput) String() string { +func (s ImportImageLicenseConfigurationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeInstancesOutput) GoString() string { +func (s ImportImageLicenseConfigurationRequest) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeInstancesOutput) SetNextToken(v string) *DescribeInstancesOutput { - s.NextToken = &v +// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. +func (s *ImportImageLicenseConfigurationRequest) SetLicenseConfigurationArn(v string) *ImportImageLicenseConfigurationRequest { + s.LicenseConfigurationArn = &v return s } -// SetReservations sets the Reservations field's value. -func (s *DescribeInstancesOutput) SetReservations(v []*Reservation) *DescribeInstancesOutput { - s.Reservations = v +// The response information of license configurations. +type ImportImageLicenseConfigurationResponse struct { + _ struct{} `type:"structure"` + + // The ARN of a license configuration. + LicenseConfigurationArn *string `locationName:"licenseConfigurationArn" type:"string"` +} + +// String returns the string representation +func (s ImportImageLicenseConfigurationResponse) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ImportImageLicenseConfigurationResponse) GoString() string { + return s.String() +} + +// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. +func (s *ImportImageLicenseConfigurationResponse) SetLicenseConfigurationArn(v string) *ImportImageLicenseConfigurationResponse { + s.LicenseConfigurationArn = &v return s } -// Contains the parameters for DescribeInternetGateways. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGatewaysRequest -type DescribeInternetGatewaysInput struct { +type ImportImageOutput struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The architecture of the virtual machine. + Architecture *string `locationName:"architecture" type:"string"` - // One or more filters. - // - // * attachment.state - The current state of the attachment between the gateway - // and the VPC (available). Present only if a VPC is attached. - // - // * attachment.vpc-id - The ID of an attached VPC. - // - // * internet-gateway-id - The ID of the Internet gateway. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // A description of the import task. + Description *string `locationName:"description" type:"string"` - // One or more Internet gateway IDs. - // - // Default: Describes all your Internet gateways. - InternetGatewayIds []*string `locationName:"internetGatewayId" locationNameList:"item" type:"list"` + // Indicates whether the AMI is encypted. + Encrypted *bool `locationName:"encrypted" type:"boolean"` + + // The target hypervisor of the import task. + Hypervisor *string `locationName:"hypervisor" type:"string"` + + // The ID of the Amazon Machine Image (AMI) created by the import task. + ImageId *string `locationName:"imageId" type:"string"` + + // The task ID of the import image task. + ImportTaskId *string `locationName:"importTaskId" type:"string"` + + // The identifier for the AWS Key Management Service (AWS KMS) customer master + // key (CMK) that was used to create the encrypted AMI. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + + // The ARNs of the license configurations. + LicenseSpecifications []*ImportImageLicenseConfigurationResponse `locationName:"licenseSpecifications" locationNameList:"item" type:"list"` + + // The license type of the virtual machine. + LicenseType *string `locationName:"licenseType" type:"string"` + + // The operating system of the virtual machine. + Platform *string `locationName:"platform" type:"string"` + + // The progress of the task. + Progress *string `locationName:"progress" type:"string"` + + // Information about the snapshots. + SnapshotDetails []*SnapshotDetail `locationName:"snapshotDetailSet" locationNameList:"item" type:"list"` + + // A brief status of the task. + Status *string `locationName:"status" type:"string"` + + // A detailed status message of the import task. + StatusMessage *string `locationName:"statusMessage" type:"string"` } // String returns the string representation -func (s DescribeInternetGatewaysInput) String() string { +func (s ImportImageOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeInternetGatewaysInput) GoString() string { +func (s ImportImageOutput) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeInternetGatewaysInput) SetDryRun(v bool) *DescribeInternetGatewaysInput { - s.DryRun = &v +// SetArchitecture sets the Architecture field's value. +func (s *ImportImageOutput) SetArchitecture(v string) *ImportImageOutput { + s.Architecture = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeInternetGatewaysInput) SetFilters(v []*Filter) *DescribeInternetGatewaysInput { - s.Filters = v +// SetDescription sets the Description field's value. +func (s *ImportImageOutput) SetDescription(v string) *ImportImageOutput { + s.Description = &v return s } -// SetInternetGatewayIds sets the InternetGatewayIds field's value. -func (s *DescribeInternetGatewaysInput) SetInternetGatewayIds(v []*string) *DescribeInternetGatewaysInput { - s.InternetGatewayIds = v +// SetEncrypted sets the Encrypted field's value. +func (s *ImportImageOutput) SetEncrypted(v bool) *ImportImageOutput { + s.Encrypted = &v return s } -// Contains the output of DescribeInternetGateways. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGatewaysResult -type DescribeInternetGatewaysOutput struct { - _ struct{} `type:"structure"` +// SetHypervisor sets the Hypervisor field's value. +func (s *ImportImageOutput) SetHypervisor(v string) *ImportImageOutput { + s.Hypervisor = &v + return s +} - // Information about one or more Internet gateways. - InternetGateways []*InternetGateway `locationName:"internetGatewaySet" locationNameList:"item" type:"list"` +// SetImageId sets the ImageId field's value. +func (s *ImportImageOutput) SetImageId(v string) *ImportImageOutput { + s.ImageId = &v + return s } -// String returns the string representation -func (s DescribeInternetGatewaysOutput) String() string { - return awsutil.Prettify(s) +// SetImportTaskId sets the ImportTaskId field's value. +func (s *ImportImageOutput) SetImportTaskId(v string) *ImportImageOutput { + s.ImportTaskId = &v + return s } -// GoString returns the string representation -func (s DescribeInternetGatewaysOutput) GoString() string { - return s.String() +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *ImportImageOutput) SetKmsKeyId(v string) *ImportImageOutput { + s.KmsKeyId = &v + return s } -// SetInternetGateways sets the InternetGateways field's value. -func (s *DescribeInternetGatewaysOutput) SetInternetGateways(v []*InternetGateway) *DescribeInternetGatewaysOutput { - s.InternetGateways = v +// SetLicenseSpecifications sets the LicenseSpecifications field's value. +func (s *ImportImageOutput) SetLicenseSpecifications(v []*ImportImageLicenseConfigurationResponse) *ImportImageOutput { + s.LicenseSpecifications = v return s } -// Contains the parameters for DescribeKeyPairs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairsRequest -type DescribeKeyPairsInput struct { - _ struct{} `type:"structure"` +// SetLicenseType sets the LicenseType field's value. +func (s *ImportImageOutput) SetLicenseType(v string) *ImportImageOutput { + s.LicenseType = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetPlatform sets the Platform field's value. +func (s *ImportImageOutput) SetPlatform(v string) *ImportImageOutput { + s.Platform = &v + return s +} - // One or more filters. - // - // * fingerprint - The fingerprint of the key pair. +// SetProgress sets the Progress field's value. +func (s *ImportImageOutput) SetProgress(v string) *ImportImageOutput { + s.Progress = &v + return s +} + +// SetSnapshotDetails sets the SnapshotDetails field's value. +func (s *ImportImageOutput) SetSnapshotDetails(v []*SnapshotDetail) *ImportImageOutput { + s.SnapshotDetails = v + return s +} + +// SetStatus sets the Status field's value. +func (s *ImportImageOutput) SetStatus(v string) *ImportImageOutput { + s.Status = &v + return s +} + +// SetStatusMessage sets the StatusMessage field's value. +func (s *ImportImageOutput) SetStatusMessage(v string) *ImportImageOutput { + s.StatusMessage = &v + return s +} + +// Describes an import image task. +type ImportImageTask struct { + _ struct{} `type:"structure"` + + // The architecture of the virtual machine. // - // * key-name - The name of the key pair. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // Valid values: i386 | x86_64 | arm64 + Architecture *string `locationName:"architecture" type:"string"` + + // A description of the import task. + Description *string `locationName:"description" type:"string"` - // One or more key pair names. + // Indicates whether the image is encrypted. + Encrypted *bool `locationName:"encrypted" type:"boolean"` + + // The target hypervisor for the import task. // - // Default: Describes all your key pairs. - KeyNames []*string `locationName:"KeyName" locationNameList:"KeyName" type:"list"` + // Valid values: xen + Hypervisor *string `locationName:"hypervisor" type:"string"` + + // The ID of the Amazon Machine Image (AMI) of the imported virtual machine. + ImageId *string `locationName:"imageId" type:"string"` + + // The ID of the import image task. + ImportTaskId *string `locationName:"importTaskId" type:"string"` + + // The identifier for the AWS Key Management Service (AWS KMS) customer master + // key (CMK) that was used to create the encrypted image. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + + // The ARNs of the license configurations associated to the import image task. + LicenseSpecifications []*ImportImageLicenseConfigurationResponse `locationName:"licenseSpecifications" locationNameList:"item" type:"list"` + + // The license type of the virtual machine. + LicenseType *string `locationName:"licenseType" type:"string"` + + // The description string for the import image task. + Platform *string `locationName:"platform" type:"string"` + + // The percentage of progress of the import image task. + Progress *string `locationName:"progress" type:"string"` + + // Information about the snapshots. + SnapshotDetails []*SnapshotDetail `locationName:"snapshotDetailSet" locationNameList:"item" type:"list"` + + // A brief status for the import image task. + Status *string `locationName:"status" type:"string"` + + // A descriptive status message for the import image task. + StatusMessage *string `locationName:"statusMessage" type:"string"` } // String returns the string representation -func (s DescribeKeyPairsInput) String() string { +func (s ImportImageTask) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeKeyPairsInput) GoString() string { +func (s ImportImageTask) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeKeyPairsInput) SetDryRun(v bool) *DescribeKeyPairsInput { - s.DryRun = &v +// SetArchitecture sets the Architecture field's value. +func (s *ImportImageTask) SetArchitecture(v string) *ImportImageTask { + s.Architecture = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeKeyPairsInput) SetFilters(v []*Filter) *DescribeKeyPairsInput { - s.Filters = v +// SetDescription sets the Description field's value. +func (s *ImportImageTask) SetDescription(v string) *ImportImageTask { + s.Description = &v return s } -// SetKeyNames sets the KeyNames field's value. -func (s *DescribeKeyPairsInput) SetKeyNames(v []*string) *DescribeKeyPairsInput { - s.KeyNames = v +// SetEncrypted sets the Encrypted field's value. +func (s *ImportImageTask) SetEncrypted(v bool) *ImportImageTask { + s.Encrypted = &v return s } -// Contains the output of DescribeKeyPairs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairsResult -type DescribeKeyPairsOutput struct { - _ struct{} `type:"structure"` +// SetHypervisor sets the Hypervisor field's value. +func (s *ImportImageTask) SetHypervisor(v string) *ImportImageTask { + s.Hypervisor = &v + return s +} - // Information about one or more key pairs. - KeyPairs []*KeyPairInfo `locationName:"keySet" locationNameList:"item" type:"list"` +// SetImageId sets the ImageId field's value. +func (s *ImportImageTask) SetImageId(v string) *ImportImageTask { + s.ImageId = &v + return s } -// String returns the string representation -func (s DescribeKeyPairsOutput) String() string { - return awsutil.Prettify(s) +// SetImportTaskId sets the ImportTaskId field's value. +func (s *ImportImageTask) SetImportTaskId(v string) *ImportImageTask { + s.ImportTaskId = &v + return s } -// GoString returns the string representation -func (s DescribeKeyPairsOutput) GoString() string { - return s.String() +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *ImportImageTask) SetKmsKeyId(v string) *ImportImageTask { + s.KmsKeyId = &v + return s } -// SetKeyPairs sets the KeyPairs field's value. -func (s *DescribeKeyPairsOutput) SetKeyPairs(v []*KeyPairInfo) *DescribeKeyPairsOutput { - s.KeyPairs = v +// SetLicenseSpecifications sets the LicenseSpecifications field's value. +func (s *ImportImageTask) SetLicenseSpecifications(v []*ImportImageLicenseConfigurationResponse) *ImportImageTask { + s.LicenseSpecifications = v return s } -// Contains the parameters for DescribeMovingAddresses. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddressesRequest -type DescribeMovingAddressesInput struct { +// SetLicenseType sets the LicenseType field's value. +func (s *ImportImageTask) SetLicenseType(v string) *ImportImageTask { + s.LicenseType = &v + return s +} + +// SetPlatform sets the Platform field's value. +func (s *ImportImageTask) SetPlatform(v string) *ImportImageTask { + s.Platform = &v + return s +} + +// SetProgress sets the Progress field's value. +func (s *ImportImageTask) SetProgress(v string) *ImportImageTask { + s.Progress = &v + return s +} + +// SetSnapshotDetails sets the SnapshotDetails field's value. +func (s *ImportImageTask) SetSnapshotDetails(v []*SnapshotDetail) *ImportImageTask { + s.SnapshotDetails = v + return s +} + +// SetStatus sets the Status field's value. +func (s *ImportImageTask) SetStatus(v string) *ImportImageTask { + s.Status = &v + return s +} + +// SetStatusMessage sets the StatusMessage field's value. +func (s *ImportImageTask) SetStatusMessage(v string) *ImportImageTask { + s.StatusMessage = &v + return s +} + +type ImportInstanceInput struct { _ struct{} `type:"structure"` + // A description for the instance being imported. + Description *string `locationName:"description" type:"string"` + + // The disk image. + DiskImages []*DiskImage `locationName:"diskImage" type:"list"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // One or more filters. - // - // * moving-status - The status of the Elastic IP address (MovingToVpc | - // RestoringToClassic). - Filters []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` + // The launch specification. + LaunchSpecification *ImportInstanceLaunchSpecification `locationName:"launchSpecification" type:"structure"` - // The maximum number of results to return for the request in a single page. - // The remaining results of the initial request can be seen by sending another - // request with the returned NextToken value. This value can be between 5 and - // 1000; if MaxResults is given a value outside of this range, an error is returned. + // The instance operating system. // - // Default: If no value is provided, the default is 1000. - MaxResults *int64 `locationName:"maxResults" type:"integer"` + // Platform is a required field + Platform *string `locationName:"platform" type:"string" required:"true" enum:"PlatformValues"` +} + +// String returns the string representation +func (s ImportInstanceInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ImportInstanceInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ImportInstanceInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ImportInstanceInput"} + if s.Platform == nil { + invalidParams.Add(request.NewErrParamRequired("Platform")) + } + if s.DiskImages != nil { + for i, v := range s.DiskImages { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "DiskImages", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDescription sets the Description field's value. +func (s *ImportInstanceInput) SetDescription(v string) *ImportInstanceInput { + s.Description = &v + return s +} + +// SetDiskImages sets the DiskImages field's value. +func (s *ImportInstanceInput) SetDiskImages(v []*DiskImage) *ImportInstanceInput { + s.DiskImages = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *ImportInstanceInput) SetDryRun(v bool) *ImportInstanceInput { + s.DryRun = &v + return s +} + +// SetLaunchSpecification sets the LaunchSpecification field's value. +func (s *ImportInstanceInput) SetLaunchSpecification(v *ImportInstanceLaunchSpecification) *ImportInstanceInput { + s.LaunchSpecification = v + return s +} + +// SetPlatform sets the Platform field's value. +func (s *ImportInstanceInput) SetPlatform(v string) *ImportInstanceInput { + s.Platform = &v + return s +} + +// Describes the launch specification for VM import. +type ImportInstanceLaunchSpecification struct { + _ struct{} `type:"structure"` + + // Reserved. + AdditionalInfo *string `locationName:"additionalInfo" type:"string"` + + // The architecture of the instance. + Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` + + // The security group IDs. + GroupIds []*string `locationName:"GroupId" locationNameList:"SecurityGroupId" type:"list"` + + // The security group names. + GroupNames []*string `locationName:"GroupName" locationNameList:"SecurityGroup" type:"list"` + + // Indicates whether an instance stops or terminates when you initiate shutdown + // from the instance (using the operating system command for system shutdown). + InstanceInitiatedShutdownBehavior *string `locationName:"instanceInitiatedShutdownBehavior" type:"string" enum:"ShutdownBehavior"` + + // The instance type. For more information about the instance types that you + // can import, see Instance Types (https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#vmimport-instance-types) + // in the VM Import/Export User Guide. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + + // Indicates whether monitoring is enabled. + Monitoring *bool `locationName:"monitoring" type:"boolean"` - // The token to use to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` + // The placement information for the instance. + Placement *Placement `locationName:"placement" type:"structure"` - // One or more Elastic IP addresses. - PublicIps []*string `locationName:"publicIp" locationNameList:"item" type:"list"` + // [EC2-VPC] An available IP address from the IP address range of the subnet. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + + // [EC2-VPC] The ID of the subnet in which to launch the instance. + SubnetId *string `locationName:"subnetId" type:"string"` + + // The Base64-encoded user data to make available to the instance. + UserData *UserData `locationName:"userData" type:"structure" sensitive:"true"` } // String returns the string representation -func (s DescribeMovingAddressesInput) String() string { +func (s ImportInstanceLaunchSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeMovingAddressesInput) GoString() string { +func (s ImportInstanceLaunchSpecification) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeMovingAddressesInput) SetDryRun(v bool) *DescribeMovingAddressesInput { - s.DryRun = &v +// SetAdditionalInfo sets the AdditionalInfo field's value. +func (s *ImportInstanceLaunchSpecification) SetAdditionalInfo(v string) *ImportInstanceLaunchSpecification { + s.AdditionalInfo = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeMovingAddressesInput) SetFilters(v []*Filter) *DescribeMovingAddressesInput { - s.Filters = v +// SetArchitecture sets the Architecture field's value. +func (s *ImportInstanceLaunchSpecification) SetArchitecture(v string) *ImportInstanceLaunchSpecification { + s.Architecture = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeMovingAddressesInput) SetMaxResults(v int64) *DescribeMovingAddressesInput { - s.MaxResults = &v +// SetGroupIds sets the GroupIds field's value. +func (s *ImportInstanceLaunchSpecification) SetGroupIds(v []*string) *ImportInstanceLaunchSpecification { + s.GroupIds = v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeMovingAddressesInput) SetNextToken(v string) *DescribeMovingAddressesInput { - s.NextToken = &v +// SetGroupNames sets the GroupNames field's value. +func (s *ImportInstanceLaunchSpecification) SetGroupNames(v []*string) *ImportInstanceLaunchSpecification { + s.GroupNames = v return s } -// SetPublicIps sets the PublicIps field's value. -func (s *DescribeMovingAddressesInput) SetPublicIps(v []*string) *DescribeMovingAddressesInput { - s.PublicIps = v +// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. +func (s *ImportInstanceLaunchSpecification) SetInstanceInitiatedShutdownBehavior(v string) *ImportInstanceLaunchSpecification { + s.InstanceInitiatedShutdownBehavior = &v return s } -// Contains the output of DescribeMovingAddresses. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddressesResult -type DescribeMovingAddressesOutput struct { - _ struct{} `type:"structure"` - - // The status for each Elastic IP address. - MovingAddressStatuses []*MovingAddressStatus `locationName:"movingAddressStatusSet" locationNameList:"item" type:"list"` +// SetInstanceType sets the InstanceType field's value. +func (s *ImportInstanceLaunchSpecification) SetInstanceType(v string) *ImportInstanceLaunchSpecification { + s.InstanceType = &v + return s +} - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` +// SetMonitoring sets the Monitoring field's value. +func (s *ImportInstanceLaunchSpecification) SetMonitoring(v bool) *ImportInstanceLaunchSpecification { + s.Monitoring = &v + return s } -// String returns the string representation -func (s DescribeMovingAddressesOutput) String() string { - return awsutil.Prettify(s) +// SetPlacement sets the Placement field's value. +func (s *ImportInstanceLaunchSpecification) SetPlacement(v *Placement) *ImportInstanceLaunchSpecification { + s.Placement = v + return s } -// GoString returns the string representation -func (s DescribeMovingAddressesOutput) GoString() string { - return s.String() +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *ImportInstanceLaunchSpecification) SetPrivateIpAddress(v string) *ImportInstanceLaunchSpecification { + s.PrivateIpAddress = &v + return s } -// SetMovingAddressStatuses sets the MovingAddressStatuses field's value. -func (s *DescribeMovingAddressesOutput) SetMovingAddressStatuses(v []*MovingAddressStatus) *DescribeMovingAddressesOutput { - s.MovingAddressStatuses = v +// SetSubnetId sets the SubnetId field's value. +func (s *ImportInstanceLaunchSpecification) SetSubnetId(v string) *ImportInstanceLaunchSpecification { + s.SubnetId = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeMovingAddressesOutput) SetNextToken(v string) *DescribeMovingAddressesOutput { - s.NextToken = &v +// SetUserData sets the UserData field's value. +func (s *ImportInstanceLaunchSpecification) SetUserData(v *UserData) *ImportInstanceLaunchSpecification { + s.UserData = v return s } -// Contains the parameters for DescribeNatGateways. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGatewaysRequest -type DescribeNatGatewaysInput struct { +type ImportInstanceOutput struct { _ struct{} `type:"structure"` - // One or more filters. - // - // * nat-gateway-id - The ID of the NAT gateway. - // - // * state - The state of the NAT gateway (pending | failed | available | - // deleting | deleted). - // - // * subnet-id - The ID of the subnet in which the NAT gateway resides. - // - // * vpc-id - The ID of the VPC in which the NAT gateway resides. - Filter []*Filter `locationNameList:"Filter" type:"list"` - - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - // - // Constraint: If the value specified is greater than 1000, we return only 1000 - // items. - MaxResults *int64 `type:"integer"` - - // One or more NAT gateway IDs. - NatGatewayIds []*string `locationName:"NatGatewayId" locationNameList:"item" type:"list"` - - // The token to retrieve the next page of results. - NextToken *string `type:"string"` + // Information about the conversion task. + ConversionTask *ConversionTask `locationName:"conversionTask" type:"structure"` } // String returns the string representation -func (s DescribeNatGatewaysInput) String() string { +func (s ImportInstanceOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeNatGatewaysInput) GoString() string { +func (s ImportInstanceOutput) GoString() string { return s.String() } -// SetFilter sets the Filter field's value. -func (s *DescribeNatGatewaysInput) SetFilter(v []*Filter) *DescribeNatGatewaysInput { - s.Filter = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeNatGatewaysInput) SetMaxResults(v int64) *DescribeNatGatewaysInput { - s.MaxResults = &v +// SetConversionTask sets the ConversionTask field's value. +func (s *ImportInstanceOutput) SetConversionTask(v *ConversionTask) *ImportInstanceOutput { + s.ConversionTask = v return s } -// SetNatGatewayIds sets the NatGatewayIds field's value. -func (s *DescribeNatGatewaysInput) SetNatGatewayIds(v []*string) *DescribeNatGatewaysInput { - s.NatGatewayIds = v - return s -} +// Describes an import instance task. +type ImportInstanceTaskDetails struct { + _ struct{} `type:"structure"` -// SetNextToken sets the NextToken field's value. -func (s *DescribeNatGatewaysInput) SetNextToken(v string) *DescribeNatGatewaysInput { - s.NextToken = &v - return s -} + // A description of the task. + Description *string `locationName:"description" type:"string"` -// Contains the output of DescribeNatGateways. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGatewaysResult -type DescribeNatGatewaysOutput struct { - _ struct{} `type:"structure"` + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` - // Information about the NAT gateways. - NatGateways []*NatGateway `locationName:"natGatewaySet" locationNameList:"item" type:"list"` + // The instance operating system. + Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The volumes. + Volumes []*ImportInstanceVolumeDetailItem `locationName:"volumes" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeNatGatewaysOutput) String() string { +func (s ImportInstanceTaskDetails) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeNatGatewaysOutput) GoString() string { +func (s ImportInstanceTaskDetails) GoString() string { return s.String() } -// SetNatGateways sets the NatGateways field's value. -func (s *DescribeNatGatewaysOutput) SetNatGateways(v []*NatGateway) *DescribeNatGatewaysOutput { - s.NatGateways = v +// SetDescription sets the Description field's value. +func (s *ImportInstanceTaskDetails) SetDescription(v string) *ImportInstanceTaskDetails { + s.Description = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeNatGatewaysOutput) SetNextToken(v string) *DescribeNatGatewaysOutput { - s.NextToken = &v +// SetInstanceId sets the InstanceId field's value. +func (s *ImportInstanceTaskDetails) SetInstanceId(v string) *ImportInstanceTaskDetails { + s.InstanceId = &v return s } -// Contains the parameters for DescribeNetworkAcls. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAclsRequest -type DescribeNetworkAclsInput struct { +// SetPlatform sets the Platform field's value. +func (s *ImportInstanceTaskDetails) SetPlatform(v string) *ImportInstanceTaskDetails { + s.Platform = &v + return s +} + +// SetVolumes sets the Volumes field's value. +func (s *ImportInstanceTaskDetails) SetVolumes(v []*ImportInstanceVolumeDetailItem) *ImportInstanceTaskDetails { + s.Volumes = v + return s +} + +// Describes an import volume task. +type ImportInstanceVolumeDetailItem struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The Availability Zone where the resulting instance will reside. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // One or more filters. - // - // * association.association-id - The ID of an association ID for the ACL. - // - // * association.network-acl-id - The ID of the network ACL involved in the - // association. - // - // * association.subnet-id - The ID of the subnet involved in the association. - // - // * default - Indicates whether the ACL is the default network ACL for the - // VPC. - // - // * entry.cidr - The IPv4 CIDR range specified in the entry. - // - // * entry.egress - Indicates whether the entry applies to egress traffic. - // - // * entry.icmp.code - The ICMP code specified in the entry, if any. - // - // * entry.icmp.type - The ICMP type specified in the entry, if any. - // - // * entry.ipv6-cidr - The IPv6 CIDR range specified in the entry. - // - // * entry.port-range.from - The start of the port range specified in the - // entry. - // - // * entry.port-range.to - The end of the port range specified in the entry. - // - // - // * entry.protocol - The protocol specified in the entry (tcp | udp | icmp - // or a protocol number). - // - // * entry.rule-action - Allows or denies the matching traffic (allow | deny). - // - // * entry.rule-number - The number of an entry (in other words, rule) in - // the ACL's set of entries. - // - // * network-acl-id - The ID of the network ACL. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * vpc-id - The ID of the VPC for the network ACL. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // The number of bytes converted so far. + BytesConverted *int64 `locationName:"bytesConverted" type:"long"` - // One or more network ACL IDs. - // - // Default: Describes all your network ACLs. - NetworkAclIds []*string `locationName:"NetworkAclId" locationNameList:"item" type:"list"` + // A description of the task. + Description *string `locationName:"description" type:"string"` + + // The image. + Image *DiskImageDescription `locationName:"image" type:"structure"` + + // The status of the import of this particular disk image. + Status *string `locationName:"status" type:"string"` + + // The status information or errors related to the disk image. + StatusMessage *string `locationName:"statusMessage" type:"string"` + + // The volume. + Volume *DiskImageVolumeDescription `locationName:"volume" type:"structure"` } // String returns the string representation -func (s DescribeNetworkAclsInput) String() string { +func (s ImportInstanceVolumeDetailItem) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeNetworkAclsInput) GoString() string { +func (s ImportInstanceVolumeDetailItem) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeNetworkAclsInput) SetDryRun(v bool) *DescribeNetworkAclsInput { - s.DryRun = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ImportInstanceVolumeDetailItem) SetAvailabilityZone(v string) *ImportInstanceVolumeDetailItem { + s.AvailabilityZone = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeNetworkAclsInput) SetFilters(v []*Filter) *DescribeNetworkAclsInput { - s.Filters = v +// SetBytesConverted sets the BytesConverted field's value. +func (s *ImportInstanceVolumeDetailItem) SetBytesConverted(v int64) *ImportInstanceVolumeDetailItem { + s.BytesConverted = &v return s } -// SetNetworkAclIds sets the NetworkAclIds field's value. -func (s *DescribeNetworkAclsInput) SetNetworkAclIds(v []*string) *DescribeNetworkAclsInput { - s.NetworkAclIds = v +// SetDescription sets the Description field's value. +func (s *ImportInstanceVolumeDetailItem) SetDescription(v string) *ImportInstanceVolumeDetailItem { + s.Description = &v return s } -// Contains the output of DescribeNetworkAcls. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAclsResult -type DescribeNetworkAclsOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more network ACLs. - NetworkAcls []*NetworkAcl `locationName:"networkAclSet" locationNameList:"item" type:"list"` +// SetImage sets the Image field's value. +func (s *ImportInstanceVolumeDetailItem) SetImage(v *DiskImageDescription) *ImportInstanceVolumeDetailItem { + s.Image = v + return s } -// String returns the string representation -func (s DescribeNetworkAclsOutput) String() string { - return awsutil.Prettify(s) +// SetStatus sets the Status field's value. +func (s *ImportInstanceVolumeDetailItem) SetStatus(v string) *ImportInstanceVolumeDetailItem { + s.Status = &v + return s } -// GoString returns the string representation -func (s DescribeNetworkAclsOutput) GoString() string { - return s.String() +// SetStatusMessage sets the StatusMessage field's value. +func (s *ImportInstanceVolumeDetailItem) SetStatusMessage(v string) *ImportInstanceVolumeDetailItem { + s.StatusMessage = &v + return s } -// SetNetworkAcls sets the NetworkAcls field's value. -func (s *DescribeNetworkAclsOutput) SetNetworkAcls(v []*NetworkAcl) *DescribeNetworkAclsOutput { - s.NetworkAcls = v +// SetVolume sets the Volume field's value. +func (s *ImportInstanceVolumeDetailItem) SetVolume(v *DiskImageVolumeDescription) *ImportInstanceVolumeDetailItem { + s.Volume = v return s } -// Contains the parameters for DescribeNetworkInterfaceAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttributeRequest -type DescribeNetworkInterfaceAttributeInput struct { +type ImportKeyPairInput struct { _ struct{} `type:"structure"` - // The attribute of the network interface. - Attribute *string `locationName:"attribute" type:"string" enum:"NetworkInterfaceAttribute"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the network interface. + // A unique name for the key pair. // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` + // KeyName is a required field + KeyName *string `locationName:"keyName" type:"string" required:"true"` + + // The public key. For API calls, the text must be base64-encoded. For command + // line tools, base64 encoding is performed for you. + // + // PublicKeyMaterial is automatically base64 encoded/decoded by the SDK. + // + // PublicKeyMaterial is a required field + PublicKeyMaterial []byte `locationName:"publicKeyMaterial" type:"blob" required:"true"` } // String returns the string representation -func (s DescribeNetworkInterfaceAttributeInput) String() string { +func (s ImportKeyPairInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeNetworkInterfaceAttributeInput) GoString() string { +func (s ImportKeyPairInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeNetworkInterfaceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeNetworkInterfaceAttributeInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) +func (s *ImportKeyPairInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ImportKeyPairInput"} + if s.KeyName == nil { + invalidParams.Add(request.NewErrParamRequired("KeyName")) + } + if s.PublicKeyMaterial == nil { + invalidParams.Add(request.NewErrParamRequired("PublicKeyMaterial")) } if invalidParams.Len() > 0 { @@ -27772,5628 +71298,4945 @@ func (s *DescribeNetworkInterfaceAttributeInput) Validate() error { return nil } -// SetAttribute sets the Attribute field's value. -func (s *DescribeNetworkInterfaceAttributeInput) SetAttribute(v string) *DescribeNetworkInterfaceAttributeInput { - s.Attribute = &v +// SetDryRun sets the DryRun field's value. +func (s *ImportKeyPairInput) SetDryRun(v bool) *ImportKeyPairInput { + s.DryRun = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeNetworkInterfaceAttributeInput) SetDryRun(v bool) *DescribeNetworkInterfaceAttributeInput { - s.DryRun = &v +// SetKeyName sets the KeyName field's value. +func (s *ImportKeyPairInput) SetKeyName(v string) *ImportKeyPairInput { + s.KeyName = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *DescribeNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *DescribeNetworkInterfaceAttributeInput { - s.NetworkInterfaceId = &v +// SetPublicKeyMaterial sets the PublicKeyMaterial field's value. +func (s *ImportKeyPairInput) SetPublicKeyMaterial(v []byte) *ImportKeyPairInput { + s.PublicKeyMaterial = v return s } -// Contains the output of DescribeNetworkInterfaceAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttributeResult -type DescribeNetworkInterfaceAttributeOutput struct { +type ImportKeyPairOutput struct { _ struct{} `type:"structure"` - // The attachment (if any) of the network interface. - Attachment *NetworkInterfaceAttachment `locationName:"attachment" type:"structure"` - - // The description of the network interface. - Description *AttributeValue `locationName:"description" type:"structure"` - - // The security groups associated with the network interface. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + // The MD5 public key fingerprint as specified in section 4 of RFC 4716. + KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` - // Indicates whether source/destination checking is enabled. - SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` + // The key pair name you provided. + KeyName *string `locationName:"keyName" type:"string"` } // String returns the string representation -func (s DescribeNetworkInterfaceAttributeOutput) String() string { +func (s ImportKeyPairOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeNetworkInterfaceAttributeOutput) GoString() string { +func (s ImportKeyPairOutput) GoString() string { return s.String() } -// SetAttachment sets the Attachment field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetAttachment(v *NetworkInterfaceAttachment) *DescribeNetworkInterfaceAttributeOutput { - s.Attachment = v +// SetKeyFingerprint sets the KeyFingerprint field's value. +func (s *ImportKeyPairOutput) SetKeyFingerprint(v string) *ImportKeyPairOutput { + s.KeyFingerprint = &v return s } -// SetDescription sets the Description field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetDescription(v *AttributeValue) *DescribeNetworkInterfaceAttributeOutput { - s.Description = v +// SetKeyName sets the KeyName field's value. +func (s *ImportKeyPairOutput) SetKeyName(v string) *ImportKeyPairOutput { + s.KeyName = &v return s } -// SetGroups sets the Groups field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetGroups(v []*GroupIdentifier) *DescribeNetworkInterfaceAttributeOutput { - s.Groups = v - return s -} +type ImportSnapshotInput struct { + _ struct{} `type:"structure"` -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetNetworkInterfaceId(v string) *DescribeNetworkInterfaceAttributeOutput { - s.NetworkInterfaceId = &v - return s -} + // The client-specific data. + ClientData *ClientData `type:"structure"` -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *DescribeNetworkInterfaceAttributeOutput) SetSourceDestCheck(v *AttributeBooleanValue) *DescribeNetworkInterfaceAttributeOutput { - s.SourceDestCheck = v - return s -} + // Token to enable idempotency for VM import requests. + ClientToken *string `type:"string"` -// Contains the parameters for DescribeNetworkInterfaces. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacesRequest -type DescribeNetworkInterfacesInput struct { - _ struct{} `type:"structure"` + // The description string for the import snapshot task. + Description *string `type:"string"` + + // Information about the disk container. + DiskContainer *SnapshotDiskContainer `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // One or more filters. - // - // * addresses.private-ip-address - The private IPv4 addresses associated - // with the network interface. - // - // * addresses.primary - Whether the private IPv4 address is the primary - // IP address associated with the network interface. - // - // * addresses.association.public-ip - The association ID returned when the - // network interface was associated with the Elastic IP address (IPv4). - // - // * addresses.association.owner-id - The owner ID of the addresses associated - // with the network interface. - // - // * association.association-id - The association ID returned when the network - // interface was associated with an IPv4 address. - // - // * association.allocation-id - The allocation ID returned when you allocated - // the Elastic IP address (IPv4) for your network interface. - // - // * association.ip-owner-id - The owner of the Elastic IP address (IPv4) - // associated with the network interface. - // - // * association.public-ip - The address of the Elastic IP address (IPv4) - // bound to the network interface. - // - // * association.public-dns-name - The public DNS name for the network interface - // (IPv4). - // - // * attachment.attachment-id - The ID of the interface attachment. - // - // * attachment.attach.time - The time that the network interface was attached - // to an instance. - // - // * attachment.delete-on-termination - Indicates whether the attachment - // is deleted when an instance is terminated. - // - // * attachment.device-index - The device index to which the network interface - // is attached. - // - // * attachment.instance-id - The ID of the instance to which the network - // interface is attached. - // - // * attachment.instance-owner-id - The owner ID of the instance to which - // the network interface is attached. - // - // * attachment.nat-gateway-id - The ID of the NAT gateway to which the network - // interface is attached. - // - // * attachment.status - The status of the attachment (attaching | attached - // | detaching | detached). - // - // * availability-zone - The Availability Zone of the network interface. - // - // * description - The description of the network interface. - // - // * group-id - The ID of a security group associated with the network interface. - // - // * group-name - The name of a security group associated with the network - // interface. - // - // * ipv6-addresses.ipv6-address - An IPv6 address associated with the network - // interface. - // - // * mac-address - The MAC address of the network interface. - // - // * network-interface-id - The ID of the network interface. - // - // * owner-id - The AWS account ID of the network interface owner. - // - // * private-ip-address - The private IPv4 address or addresses of the network - // interface. - // - // * private-dns-name - The private DNS name of the network interface (IPv4). - // - // * requester-id - The ID of the entity that launched the instance on your - // behalf (for example, AWS Management Console, Auto Scaling, and so on). - // - // * requester-managed - Indicates whether the network interface is being - // managed by an AWS service (for example, AWS Management Console, Auto Scaling, - // and so on). - // - // * source-desk-check - Indicates whether the network interface performs - // source/destination checking. A value of true means checking is enabled, - // and false means checking is disabled. The value must be false for the - // network interface to perform network address translation (NAT) in your - // VPC. + // Specifies whether the destination snapshot of the imported image should be + // encrypted. The default CMK for EBS is used unless you specify a non-default + // AWS Key Management Service (AWS KMS) CMK using KmsKeyId. For more information, + // see Amazon EBS Encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html) + // in the Amazon Elastic Compute Cloud User Guide. + Encrypted *bool `type:"boolean"` + + // An identifier for the AWS Key Management Service (AWS KMS) customer master + // key (CMK) to use when creating the encrypted snapshot. This parameter is + // only required if you want to use a non-default CMK; if this parameter is + // not specified, the default CMK for EBS is used. If a KmsKeyId is specified, + // the Encrypted flag must also be set. // - // * status - The status of the network interface. If the network interface - // is not attached to an instance, the status is available; if a network - // interface is attached to an instance the status is in-use. + // The CMK identifier may be provided in any of the following formats: // - // * subnet-id - The ID of the subnet for the network interface. + // * Key ID // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. + // * Key alias. The alias ARN contains the arn:aws:kms namespace, followed + // by the Region of the CMK, the AWS account ID of the CMK owner, the alias + // namespace, and then the CMK alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. + // * ARN using key ID. The ID ARN contains the arn:aws:kms namespace, followed + // by the Region of the CMK, the AWS account ID of the CMK owner, the key + // namespace, and then the CMK ID. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. + // * ARN using key alias. The alias ARN contains the arn:aws:kms namespace, + // followed by the Region of the CMK, the AWS account ID of the CMK owner, + // the alias namespace, and then the CMK alias. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. // - // * vpc-id - The ID of the VPC for the network interface. - Filters []*Filter `locationName:"filter" locationNameList:"Filter" type:"list"` - - // One or more network interface IDs. + // AWS parses KmsKeyId asynchronously, meaning that the action you call may + // appear to complete even though you provided an invalid identifier. This action + // will eventually report failure. // - // Default: Describes all your network interfaces. - NetworkInterfaceIds []*string `locationName:"NetworkInterfaceId" locationNameList:"item" type:"list"` + // The specified CMK must exist in the Region that the snapshot is being copied + // to. + KmsKeyId *string `type:"string"` + + // The name of the role to use when not using the default role, 'vmimport'. + RoleName *string `type:"string"` } // String returns the string representation -func (s DescribeNetworkInterfacesInput) String() string { +func (s ImportSnapshotInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeNetworkInterfacesInput) GoString() string { +func (s ImportSnapshotInput) GoString() string { return s.String() } +// SetClientData sets the ClientData field's value. +func (s *ImportSnapshotInput) SetClientData(v *ClientData) *ImportSnapshotInput { + s.ClientData = v + return s +} + +// SetClientToken sets the ClientToken field's value. +func (s *ImportSnapshotInput) SetClientToken(v string) *ImportSnapshotInput { + s.ClientToken = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *ImportSnapshotInput) SetDescription(v string) *ImportSnapshotInput { + s.Description = &v + return s +} + +// SetDiskContainer sets the DiskContainer field's value. +func (s *ImportSnapshotInput) SetDiskContainer(v *SnapshotDiskContainer) *ImportSnapshotInput { + s.DiskContainer = v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *DescribeNetworkInterfacesInput) SetDryRun(v bool) *DescribeNetworkInterfacesInput { +func (s *ImportSnapshotInput) SetDryRun(v bool) *ImportSnapshotInput { s.DryRun = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeNetworkInterfacesInput) SetFilters(v []*Filter) *DescribeNetworkInterfacesInput { - s.Filters = v +// SetEncrypted sets the Encrypted field's value. +func (s *ImportSnapshotInput) SetEncrypted(v bool) *ImportSnapshotInput { + s.Encrypted = &v return s } -// SetNetworkInterfaceIds sets the NetworkInterfaceIds field's value. -func (s *DescribeNetworkInterfacesInput) SetNetworkInterfaceIds(v []*string) *DescribeNetworkInterfacesInput { - s.NetworkInterfaceIds = v +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *ImportSnapshotInput) SetKmsKeyId(v string) *ImportSnapshotInput { + s.KmsKeyId = &v return s } -// Contains the output of DescribeNetworkInterfaces. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacesResult -type DescribeNetworkInterfacesOutput struct { +// SetRoleName sets the RoleName field's value. +func (s *ImportSnapshotInput) SetRoleName(v string) *ImportSnapshotInput { + s.RoleName = &v + return s +} + +type ImportSnapshotOutput struct { _ struct{} `type:"structure"` - // Information about one or more network interfaces. - NetworkInterfaces []*NetworkInterface `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` + // A description of the import snapshot task. + Description *string `locationName:"description" type:"string"` + + // The ID of the import snapshot task. + ImportTaskId *string `locationName:"importTaskId" type:"string"` + + // Information about the import snapshot task. + SnapshotTaskDetail *SnapshotTaskDetail `locationName:"snapshotTaskDetail" type:"structure"` } // String returns the string representation -func (s DescribeNetworkInterfacesOutput) String() string { +func (s ImportSnapshotOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeNetworkInterfacesOutput) GoString() string { +func (s ImportSnapshotOutput) GoString() string { return s.String() } -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *DescribeNetworkInterfacesOutput) SetNetworkInterfaces(v []*NetworkInterface) *DescribeNetworkInterfacesOutput { - s.NetworkInterfaces = v +// SetDescription sets the Description field's value. +func (s *ImportSnapshotOutput) SetDescription(v string) *ImportSnapshotOutput { + s.Description = &v return s } -// Contains the parameters for DescribePlacementGroups. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroupsRequest -type DescribePlacementGroupsInput struct { +// SetImportTaskId sets the ImportTaskId field's value. +func (s *ImportSnapshotOutput) SetImportTaskId(v string) *ImportSnapshotOutput { + s.ImportTaskId = &v + return s +} + +// SetSnapshotTaskDetail sets the SnapshotTaskDetail field's value. +func (s *ImportSnapshotOutput) SetSnapshotTaskDetail(v *SnapshotTaskDetail) *ImportSnapshotOutput { + s.SnapshotTaskDetail = v + return s +} + +// Describes an import snapshot task. +type ImportSnapshotTask struct { + _ struct{} `type:"structure"` + + // A description of the import snapshot task. + Description *string `locationName:"description" type:"string"` + + // The ID of the import snapshot task. + ImportTaskId *string `locationName:"importTaskId" type:"string"` + + // Describes an import snapshot task. + SnapshotTaskDetail *SnapshotTaskDetail `locationName:"snapshotTaskDetail" type:"structure"` +} + +// String returns the string representation +func (s ImportSnapshotTask) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ImportSnapshotTask) GoString() string { + return s.String() +} + +// SetDescription sets the Description field's value. +func (s *ImportSnapshotTask) SetDescription(v string) *ImportSnapshotTask { + s.Description = &v + return s +} + +// SetImportTaskId sets the ImportTaskId field's value. +func (s *ImportSnapshotTask) SetImportTaskId(v string) *ImportSnapshotTask { + s.ImportTaskId = &v + return s +} + +// SetSnapshotTaskDetail sets the SnapshotTaskDetail field's value. +func (s *ImportSnapshotTask) SetSnapshotTaskDetail(v *SnapshotTaskDetail) *ImportSnapshotTask { + s.SnapshotTaskDetail = v + return s +} + +type ImportVolumeInput struct { _ struct{} `type:"structure"` + // The Availability Zone for the resulting EBS volume. + // + // AvailabilityZone is a required field + AvailabilityZone *string `locationName:"availabilityZone" type:"string" required:"true"` + + // A description of the volume. + Description *string `locationName:"description" type:"string"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // One or more filters. - // - // * group-name - The name of the placement group. - // - // * state - The state of the placement group (pending | available | deleting - // | deleted). + // The disk image. // - // * strategy - The strategy of the placement group (cluster). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // Image is a required field + Image *DiskImageDetail `locationName:"image" type:"structure" required:"true"` - // One or more placement group names. + // The volume size. // - // Default: Describes all your placement groups, or only those otherwise specified. - GroupNames []*string `locationName:"groupName" type:"list"` + // Volume is a required field + Volume *VolumeDetail `locationName:"volume" type:"structure" required:"true"` } // String returns the string representation -func (s DescribePlacementGroupsInput) String() string { +func (s ImportVolumeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribePlacementGroupsInput) GoString() string { +func (s ImportVolumeInput) GoString() string { return s.String() } +// Validate inspects the fields of the type to determine if they are valid. +func (s *ImportVolumeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ImportVolumeInput"} + if s.AvailabilityZone == nil { + invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) + } + if s.Image == nil { + invalidParams.Add(request.NewErrParamRequired("Image")) + } + if s.Volume == nil { + invalidParams.Add(request.NewErrParamRequired("Volume")) + } + if s.Image != nil { + if err := s.Image.Validate(); err != nil { + invalidParams.AddNested("Image", err.(request.ErrInvalidParams)) + } + } + if s.Volume != nil { + if err := s.Volume.Validate(); err != nil { + invalidParams.AddNested("Volume", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ImportVolumeInput) SetAvailabilityZone(v string) *ImportVolumeInput { + s.AvailabilityZone = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *ImportVolumeInput) SetDescription(v string) *ImportVolumeInput { + s.Description = &v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *DescribePlacementGroupsInput) SetDryRun(v bool) *DescribePlacementGroupsInput { +func (s *ImportVolumeInput) SetDryRun(v bool) *ImportVolumeInput { s.DryRun = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribePlacementGroupsInput) SetFilters(v []*Filter) *DescribePlacementGroupsInput { - s.Filters = v +// SetImage sets the Image field's value. +func (s *ImportVolumeInput) SetImage(v *DiskImageDetail) *ImportVolumeInput { + s.Image = v return s } -// SetGroupNames sets the GroupNames field's value. -func (s *DescribePlacementGroupsInput) SetGroupNames(v []*string) *DescribePlacementGroupsInput { - s.GroupNames = v +// SetVolume sets the Volume field's value. +func (s *ImportVolumeInput) SetVolume(v *VolumeDetail) *ImportVolumeInput { + s.Volume = v return s } -// Contains the output of DescribePlacementGroups. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroupsResult -type DescribePlacementGroupsOutput struct { +type ImportVolumeOutput struct { _ struct{} `type:"structure"` - // One or more placement groups. - PlacementGroups []*PlacementGroup `locationName:"placementGroupSet" locationNameList:"item" type:"list"` + // Information about the conversion task. + ConversionTask *ConversionTask `locationName:"conversionTask" type:"structure"` } // String returns the string representation -func (s DescribePlacementGroupsOutput) String() string { +func (s ImportVolumeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribePlacementGroupsOutput) GoString() string { +func (s ImportVolumeOutput) GoString() string { return s.String() } -// SetPlacementGroups sets the PlacementGroups field's value. -func (s *DescribePlacementGroupsOutput) SetPlacementGroups(v []*PlacementGroup) *DescribePlacementGroupsOutput { - s.PlacementGroups = v +// SetConversionTask sets the ConversionTask field's value. +func (s *ImportVolumeOutput) SetConversionTask(v *ConversionTask) *ImportVolumeOutput { + s.ConversionTask = v return s } -// Contains the parameters for DescribePrefixLists. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixListsRequest -type DescribePrefixListsInput struct { +// Describes an import volume task. +type ImportVolumeTaskDetails struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // The Availability Zone where the resulting volume will reside. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // One or more filters. - // - // * prefix-list-id: The ID of a prefix list. - // - // * prefix-list-name: The name of a prefix list. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // The number of bytes converted so far. + BytesConverted *int64 `locationName:"bytesConverted" type:"long"` - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - // - // Constraint: If the value specified is greater than 1000, we return only 1000 - // items. - MaxResults *int64 `type:"integer"` + // The description you provided when starting the import volume task. + Description *string `locationName:"description" type:"string"` - // The token for the next set of items to return. (You received this token from - // a prior call.) - NextToken *string `type:"string"` + // The image. + Image *DiskImageDescription `locationName:"image" type:"structure"` - // One or more prefix list IDs. - PrefixListIds []*string `locationName:"PrefixListId" locationNameList:"item" type:"list"` + // The volume. + Volume *DiskImageVolumeDescription `locationName:"volume" type:"structure"` } // String returns the string representation -func (s DescribePrefixListsInput) String() string { +func (s ImportVolumeTaskDetails) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribePrefixListsInput) GoString() string { +func (s ImportVolumeTaskDetails) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribePrefixListsInput) SetDryRun(v bool) *DescribePrefixListsInput { - s.DryRun = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ImportVolumeTaskDetails) SetAvailabilityZone(v string) *ImportVolumeTaskDetails { + s.AvailabilityZone = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribePrefixListsInput) SetFilters(v []*Filter) *DescribePrefixListsInput { - s.Filters = v +// SetBytesConverted sets the BytesConverted field's value. +func (s *ImportVolumeTaskDetails) SetBytesConverted(v int64) *ImportVolumeTaskDetails { + s.BytesConverted = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribePrefixListsInput) SetMaxResults(v int64) *DescribePrefixListsInput { - s.MaxResults = &v +// SetDescription sets the Description field's value. +func (s *ImportVolumeTaskDetails) SetDescription(v string) *ImportVolumeTaskDetails { + s.Description = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribePrefixListsInput) SetNextToken(v string) *DescribePrefixListsInput { - s.NextToken = &v +// SetImage sets the Image field's value. +func (s *ImportVolumeTaskDetails) SetImage(v *DiskImageDescription) *ImportVolumeTaskDetails { + s.Image = v return s } -// SetPrefixListIds sets the PrefixListIds field's value. -func (s *DescribePrefixListsInput) SetPrefixListIds(v []*string) *DescribePrefixListsInput { - s.PrefixListIds = v +// SetVolume sets the Volume field's value. +func (s *ImportVolumeTaskDetails) SetVolume(v *DiskImageVolumeDescription) *ImportVolumeTaskDetails { + s.Volume = v return s } -// Contains the output of DescribePrefixLists. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixListsResult -type DescribePrefixListsOutput struct { +// Describes an instance. +type Instance struct { _ struct{} `type:"structure"` - // The token to use when requesting the next set of items. If there are no additional - // items to return, the string is empty. - NextToken *string `locationName:"nextToken" type:"string"` + // The AMI launch index, which can be used to find this instance in the launch + // group. + AmiLaunchIndex *int64 `locationName:"amiLaunchIndex" type:"integer"` - // All available prefix lists. - PrefixLists []*PrefixList `locationName:"prefixListSet" locationNameList:"item" type:"list"` + // The architecture of the image. + Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` + + // Any block device mapping entries for the instance. + BlockDeviceMappings []*InstanceBlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` + + // The ID of the Capacity Reservation. + CapacityReservationId *string `locationName:"capacityReservationId" type:"string"` + + // Information about the Capacity Reservation targeting option. + CapacityReservationSpecification *CapacityReservationSpecificationResponse `locationName:"capacityReservationSpecification" type:"structure"` + + // The idempotency token you provided when you launched the instance, if applicable. + ClientToken *string `locationName:"clientToken" type:"string"` + + // The CPU options for the instance. + CpuOptions *CpuOptions `locationName:"cpuOptions" type:"structure"` + + // Indicates whether the instance is optimized for Amazon EBS I/O. This optimization + // provides dedicated throughput to Amazon EBS and an optimized configuration + // stack to provide optimal I/O performance. This optimization isn't available + // with all instance types. Additional usage charges apply when using an EBS + // Optimized instance. + EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` + + // The Elastic GPU associated with the instance. + ElasticGpuAssociations []*ElasticGpuAssociation `locationName:"elasticGpuAssociationSet" locationNameList:"item" type:"list"` + + // The elastic inference accelerator associated with the instance. + ElasticInferenceAcceleratorAssociations []*ElasticInferenceAcceleratorAssociation `locationName:"elasticInferenceAcceleratorAssociationSet" locationNameList:"item" type:"list"` + + // Specifies whether enhanced networking with ENA is enabled. + EnaSupport *bool `locationName:"enaSupport" type:"boolean"` + + // Indicates whether the instance is enabled for hibernation. + HibernationOptions *HibernationOptions `locationName:"hibernationOptions" type:"structure"` + + // The hypervisor type of the instance. + Hypervisor *string `locationName:"hypervisor" type:"string" enum:"HypervisorType"` + + // The IAM instance profile associated with the instance, if applicable. + IamInstanceProfile *IamInstanceProfile `locationName:"iamInstanceProfile" type:"structure"` + + // The ID of the AMI used to launch the instance. + ImageId *string `locationName:"imageId" type:"string"` + + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` + + // Indicates whether this is a Spot Instance or a Scheduled Instance. + InstanceLifecycle *string `locationName:"instanceLifecycle" type:"string" enum:"InstanceLifecycleType"` + + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + + // The kernel associated with this instance, if applicable. + KernelId *string `locationName:"kernelId" type:"string"` + + // The name of the key pair, if this instance was launched with an associated + // key pair. + KeyName *string `locationName:"keyName" type:"string"` + + // The time the instance was launched. + LaunchTime *time.Time `locationName:"launchTime" type:"timestamp"` + + // The license configurations. + Licenses []*LicenseConfiguration `locationName:"licenseSet" locationNameList:"item" type:"list"` + + // The metadata options for the instance. + MetadataOptions *InstanceMetadataOptionsResponse `locationName:"metadataOptions" type:"structure"` + + // The monitoring for the instance. + Monitoring *Monitoring `locationName:"monitoring" type:"structure"` + + // [EC2-VPC] The network interfaces for the instance. + NetworkInterfaces []*InstanceNetworkInterface `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` + + // The location where the instance launched, if applicable. + Placement *Placement `locationName:"placement" type:"structure"` + + // The value is Windows for Windows instances; otherwise blank. + Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` + + // (IPv4 only) The private DNS hostname name assigned to the instance. This + // DNS hostname can only be used inside the Amazon EC2 network. This name is + // not available until the instance enters the running state. + // + // [EC2-VPC] The Amazon-provided DNS server resolves Amazon-provided private + // DNS hostnames if you've enabled DNS resolution and DNS hostnames in your + // VPC. If you are not using the Amazon-provided DNS server in your VPC, your + // custom domain name servers must resolve the hostname as appropriate. + PrivateDnsName *string `locationName:"privateDnsName" type:"string"` + + // The private IPv4 address assigned to the instance. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + + // The product codes attached to this instance, if applicable. + ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + + // (IPv4 only) The public DNS name assigned to the instance. This name is not + // available until the instance enters the running state. For EC2-VPC, this + // name is only available if you've enabled DNS hostnames for your VPC. + PublicDnsName *string `locationName:"dnsName" type:"string"` + + // The public IPv4 address assigned to the instance, if applicable. + PublicIpAddress *string `locationName:"ipAddress" type:"string"` + + // The RAM disk associated with this instance, if applicable. + RamdiskId *string `locationName:"ramdiskId" type:"string"` + + // The device name of the root device volume (for example, /dev/sda1). + RootDeviceName *string `locationName:"rootDeviceName" type:"string"` + + // The root device type used by the AMI. The AMI can use an EBS volume or an + // instance store volume. + RootDeviceType *string `locationName:"rootDeviceType" type:"string" enum:"DeviceType"` + + // The security groups for the instance. + SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + + // Specifies whether to enable an instance launched in a VPC to perform NAT. + // This controls whether source/destination checking is enabled on the instance. + // A value of true means that checking is enabled, and false means that checking + // is disabled. The value must be false for the instance to perform NAT. For + // more information, see NAT Instances (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) + // in the Amazon Virtual Private Cloud User Guide. + SourceDestCheck *bool `locationName:"sourceDestCheck" type:"boolean"` + + // If the request is a Spot Instance request, the ID of the request. + SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` + + // Specifies whether enhanced networking with the Intel 82599 Virtual Function + // interface is enabled. + SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` + + // The current state of the instance. + State *InstanceState `locationName:"instanceState" type:"structure"` + + // The reason for the most recent state transition. + StateReason *StateReason `locationName:"stateReason" type:"structure"` + + // The reason for the most recent state transition. This might be an empty string. + StateTransitionReason *string `locationName:"reason" type:"string"` + + // [EC2-VPC] The ID of the subnet in which the instance is running. + SubnetId *string `locationName:"subnetId" type:"string"` + + // Any tags assigned to the instance. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The virtualization type of the instance. + VirtualizationType *string `locationName:"virtualizationType" type:"string" enum:"VirtualizationType"` + + // [EC2-VPC] The ID of the VPC in which the instance is running. + VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s DescribePrefixListsOutput) String() string { +func (s Instance) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribePrefixListsOutput) GoString() string { +func (s Instance) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribePrefixListsOutput) SetNextToken(v string) *DescribePrefixListsOutput { - s.NextToken = &v +// SetAmiLaunchIndex sets the AmiLaunchIndex field's value. +func (s *Instance) SetAmiLaunchIndex(v int64) *Instance { + s.AmiLaunchIndex = &v return s } -// SetPrefixLists sets the PrefixLists field's value. -func (s *DescribePrefixListsOutput) SetPrefixLists(v []*PrefixList) *DescribePrefixListsOutput { - s.PrefixLists = v +// SetArchitecture sets the Architecture field's value. +func (s *Instance) SetArchitecture(v string) *Instance { + s.Architecture = &v return s } -// Contains the parameters for DescribeRegions. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegionsRequest -type DescribeRegionsInput struct { - _ struct{} `type:"structure"` +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *Instance) SetBlockDeviceMappings(v []*InstanceBlockDeviceMapping) *Instance { + s.BlockDeviceMappings = v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetCapacityReservationId sets the CapacityReservationId field's value. +func (s *Instance) SetCapacityReservationId(v string) *Instance { + s.CapacityReservationId = &v + return s +} - // One or more filters. - // - // * endpoint - The endpoint of the region (for example, ec2.us-east-1.amazonaws.com). - // - // * region-name - The name of the region (for example, us-east-1). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` +// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. +func (s *Instance) SetCapacityReservationSpecification(v *CapacityReservationSpecificationResponse) *Instance { + s.CapacityReservationSpecification = v + return s +} - // The names of one or more regions. - RegionNames []*string `locationName:"RegionName" locationNameList:"RegionName" type:"list"` +// SetClientToken sets the ClientToken field's value. +func (s *Instance) SetClientToken(v string) *Instance { + s.ClientToken = &v + return s } -// String returns the string representation -func (s DescribeRegionsInput) String() string { - return awsutil.Prettify(s) +// SetCpuOptions sets the CpuOptions field's value. +func (s *Instance) SetCpuOptions(v *CpuOptions) *Instance { + s.CpuOptions = v + return s } -// GoString returns the string representation -func (s DescribeRegionsInput) GoString() string { - return s.String() +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *Instance) SetEbsOptimized(v bool) *Instance { + s.EbsOptimized = &v + return s +} + +// SetElasticGpuAssociations sets the ElasticGpuAssociations field's value. +func (s *Instance) SetElasticGpuAssociations(v []*ElasticGpuAssociation) *Instance { + s.ElasticGpuAssociations = v + return s +} + +// SetElasticInferenceAcceleratorAssociations sets the ElasticInferenceAcceleratorAssociations field's value. +func (s *Instance) SetElasticInferenceAcceleratorAssociations(v []*ElasticInferenceAcceleratorAssociation) *Instance { + s.ElasticInferenceAcceleratorAssociations = v + return s +} + +// SetEnaSupport sets the EnaSupport field's value. +func (s *Instance) SetEnaSupport(v bool) *Instance { + s.EnaSupport = &v + return s +} + +// SetHibernationOptions sets the HibernationOptions field's value. +func (s *Instance) SetHibernationOptions(v *HibernationOptions) *Instance { + s.HibernationOptions = v + return s +} + +// SetHypervisor sets the Hypervisor field's value. +func (s *Instance) SetHypervisor(v string) *Instance { + s.Hypervisor = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeRegionsInput) SetDryRun(v bool) *DescribeRegionsInput { - s.DryRun = &v +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *Instance) SetIamInstanceProfile(v *IamInstanceProfile) *Instance { + s.IamInstanceProfile = v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeRegionsInput) SetFilters(v []*Filter) *DescribeRegionsInput { - s.Filters = v +// SetImageId sets the ImageId field's value. +func (s *Instance) SetImageId(v string) *Instance { + s.ImageId = &v return s } -// SetRegionNames sets the RegionNames field's value. -func (s *DescribeRegionsInput) SetRegionNames(v []*string) *DescribeRegionsInput { - s.RegionNames = v +// SetInstanceId sets the InstanceId field's value. +func (s *Instance) SetInstanceId(v string) *Instance { + s.InstanceId = &v return s } -// Contains the output of DescribeRegions. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegionsResult -type DescribeRegionsOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more regions. - Regions []*Region `locationName:"regionInfo" locationNameList:"item" type:"list"` +// SetInstanceLifecycle sets the InstanceLifecycle field's value. +func (s *Instance) SetInstanceLifecycle(v string) *Instance { + s.InstanceLifecycle = &v + return s } -// String returns the string representation -func (s DescribeRegionsOutput) String() string { - return awsutil.Prettify(s) +// SetInstanceType sets the InstanceType field's value. +func (s *Instance) SetInstanceType(v string) *Instance { + s.InstanceType = &v + return s } -// GoString returns the string representation -func (s DescribeRegionsOutput) GoString() string { - return s.String() +// SetKernelId sets the KernelId field's value. +func (s *Instance) SetKernelId(v string) *Instance { + s.KernelId = &v + return s } -// SetRegions sets the Regions field's value. -func (s *DescribeRegionsOutput) SetRegions(v []*Region) *DescribeRegionsOutput { - s.Regions = v +// SetKeyName sets the KeyName field's value. +func (s *Instance) SetKeyName(v string) *Instance { + s.KeyName = &v return s } -// Contains the parameters for DescribeReservedInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesRequest -type DescribeReservedInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * availability-zone - The Availability Zone where the Reserved Instance - // can be used. - // - // * duration - The duration of the Reserved Instance (one year or three - // years), in seconds (31536000 | 94608000). - // - // * end - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z). - // - // * fixed-price - The purchase price of the Reserved Instance (for example, - // 9800.0). - // - // * instance-type - The instance type that is covered by the reservation. - // - // * scope - The scope of the Reserved Instance (Region or Availability Zone). - // - // * product-description - The Reserved Instance product platform description. - // Instances that include (Amazon VPC) in the product platform description - // will only be displayed to EC2-Classic account holders and are for use - // with Amazon VPC (Linux/UNIX | Linux/UNIX (Amazon VPC) | SUSE Linux | SUSE - // Linux (Amazon VPC) | Red Hat Enterprise Linux | Red Hat Enterprise Linux - // (Amazon VPC) | Windows | Windows (Amazon VPC) | Windows with SQL Server - // Standard | Windows with SQL Server Standard (Amazon VPC) | Windows with - // SQL Server Web | Windows with SQL Server Web (Amazon VPC) | Windows with - // SQL Server Enterprise | Windows with SQL Server Enterprise (Amazon VPC)). - // - // * reserved-instances-id - The ID of the Reserved Instance. - // - // * start - The time at which the Reserved Instance purchase request was - // placed (for example, 2014-08-07T11:54:42.000Z). - // - // * state - The state of the Reserved Instance (payment-pending | active - // | payment-failed | retired). - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * usage-price - The usage price of the Reserved Instance, per hour (for - // example, 0.84). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // Describes whether the Reserved Instance is Standard or Convertible. - OfferingClass *string `type:"string" enum:"OfferingClassType"` - - // The Reserved Instance offering type. If you are using tools that predate - // the 2011-11-01 API version, you only have access to the Medium Utilization - // Reserved Instance offering type. - OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` - - // One or more Reserved Instance IDs. - // - // Default: Describes all your Reserved Instances, or only those otherwise specified. - ReservedInstancesIds []*string `locationName:"ReservedInstancesId" locationNameList:"ReservedInstancesId" type:"list"` +// SetLaunchTime sets the LaunchTime field's value. +func (s *Instance) SetLaunchTime(v time.Time) *Instance { + s.LaunchTime = &v + return s } -// String returns the string representation -func (s DescribeReservedInstancesInput) String() string { - return awsutil.Prettify(s) +// SetLicenses sets the Licenses field's value. +func (s *Instance) SetLicenses(v []*LicenseConfiguration) *Instance { + s.Licenses = v + return s } -// GoString returns the string representation -func (s DescribeReservedInstancesInput) GoString() string { - return s.String() +// SetMetadataOptions sets the MetadataOptions field's value. +func (s *Instance) SetMetadataOptions(v *InstanceMetadataOptionsResponse) *Instance { + s.MetadataOptions = v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeReservedInstancesInput) SetDryRun(v bool) *DescribeReservedInstancesInput { - s.DryRun = &v +// SetMonitoring sets the Monitoring field's value. +func (s *Instance) SetMonitoring(v *Monitoring) *Instance { + s.Monitoring = v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeReservedInstancesInput) SetFilters(v []*Filter) *DescribeReservedInstancesInput { - s.Filters = v +// SetNetworkInterfaces sets the NetworkInterfaces field's value. +func (s *Instance) SetNetworkInterfaces(v []*InstanceNetworkInterface) *Instance { + s.NetworkInterfaces = v return s } -// SetOfferingClass sets the OfferingClass field's value. -func (s *DescribeReservedInstancesInput) SetOfferingClass(v string) *DescribeReservedInstancesInput { - s.OfferingClass = &v +// SetPlacement sets the Placement field's value. +func (s *Instance) SetPlacement(v *Placement) *Instance { + s.Placement = v return s } -// SetOfferingType sets the OfferingType field's value. -func (s *DescribeReservedInstancesInput) SetOfferingType(v string) *DescribeReservedInstancesInput { - s.OfferingType = &v +// SetPlatform sets the Platform field's value. +func (s *Instance) SetPlatform(v string) *Instance { + s.Platform = &v return s } -// SetReservedInstancesIds sets the ReservedInstancesIds field's value. -func (s *DescribeReservedInstancesInput) SetReservedInstancesIds(v []*string) *DescribeReservedInstancesInput { - s.ReservedInstancesIds = v +// SetPrivateDnsName sets the PrivateDnsName field's value. +func (s *Instance) SetPrivateDnsName(v string) *Instance { + s.PrivateDnsName = &v return s } -// Contains the parameters for DescribeReservedInstancesListings. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListingsRequest -type DescribeReservedInstancesListingsInput struct { - _ struct{} `type:"structure"` - - // One or more filters. - // - // * reserved-instances-id - The ID of the Reserved Instances. - // - // * reserved-instances-listing-id - The ID of the Reserved Instances listing. - // - // * status - The status of the Reserved Instance listing (pending | active - // | cancelled | closed). - // - // * status-message - The reason for the status. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more Reserved Instance IDs. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` - - // One or more Reserved Instance listing IDs. - ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string"` +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *Instance) SetPrivateIpAddress(v string) *Instance { + s.PrivateIpAddress = &v + return s } -// String returns the string representation -func (s DescribeReservedInstancesListingsInput) String() string { - return awsutil.Prettify(s) +// SetProductCodes sets the ProductCodes field's value. +func (s *Instance) SetProductCodes(v []*ProductCode) *Instance { + s.ProductCodes = v + return s } -// GoString returns the string representation -func (s DescribeReservedInstancesListingsInput) GoString() string { - return s.String() +// SetPublicDnsName sets the PublicDnsName field's value. +func (s *Instance) SetPublicDnsName(v string) *Instance { + s.PublicDnsName = &v + return s } -// SetFilters sets the Filters field's value. -func (s *DescribeReservedInstancesListingsInput) SetFilters(v []*Filter) *DescribeReservedInstancesListingsInput { - s.Filters = v +// SetPublicIpAddress sets the PublicIpAddress field's value. +func (s *Instance) SetPublicIpAddress(v string) *Instance { + s.PublicIpAddress = &v return s } -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *DescribeReservedInstancesListingsInput) SetReservedInstancesId(v string) *DescribeReservedInstancesListingsInput { - s.ReservedInstancesId = &v +// SetRamdiskId sets the RamdiskId field's value. +func (s *Instance) SetRamdiskId(v string) *Instance { + s.RamdiskId = &v return s } -// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. -func (s *DescribeReservedInstancesListingsInput) SetReservedInstancesListingId(v string) *DescribeReservedInstancesListingsInput { - s.ReservedInstancesListingId = &v +// SetRootDeviceName sets the RootDeviceName field's value. +func (s *Instance) SetRootDeviceName(v string) *Instance { + s.RootDeviceName = &v return s } -// Contains the output of DescribeReservedInstancesListings. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListingsResult -type DescribeReservedInstancesListingsOutput struct { - _ struct{} `type:"structure"` - - // Information about the Reserved Instance listing. - ReservedInstancesListings []*ReservedInstancesListing `locationName:"reservedInstancesListingsSet" locationNameList:"item" type:"list"` +// SetRootDeviceType sets the RootDeviceType field's value. +func (s *Instance) SetRootDeviceType(v string) *Instance { + s.RootDeviceType = &v + return s } -// String returns the string representation -func (s DescribeReservedInstancesListingsOutput) String() string { - return awsutil.Prettify(s) +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *Instance) SetSecurityGroups(v []*GroupIdentifier) *Instance { + s.SecurityGroups = v + return s } -// GoString returns the string representation -func (s DescribeReservedInstancesListingsOutput) GoString() string { - return s.String() +// SetSourceDestCheck sets the SourceDestCheck field's value. +func (s *Instance) SetSourceDestCheck(v bool) *Instance { + s.SourceDestCheck = &v + return s } -// SetReservedInstancesListings sets the ReservedInstancesListings field's value. -func (s *DescribeReservedInstancesListingsOutput) SetReservedInstancesListings(v []*ReservedInstancesListing) *DescribeReservedInstancesListingsOutput { - s.ReservedInstancesListings = v +// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. +func (s *Instance) SetSpotInstanceRequestId(v string) *Instance { + s.SpotInstanceRequestId = &v return s } -// Contains the parameters for DescribeReservedInstancesModifications. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModificationsRequest -type DescribeReservedInstancesModificationsInput struct { - _ struct{} `type:"structure"` - - // One or more filters. - // - // * client-token - The idempotency token for the modification request. - // - // * create-date - The time when the modification request was created. - // - // * effective-date - The time when the modification becomes effective. - // - // * modification-result.reserved-instances-id - The ID for the Reserved - // Instances created as part of the modification request. This ID is only - // available when the status of the modification is fulfilled. - // - // * modification-result.target-configuration.availability-zone - The Availability - // Zone for the new Reserved Instances. - // - // * modification-result.target-configuration.instance-count - The number - // of new Reserved Instances. - // - // * modification-result.target-configuration.instance-type - The instance - // type of the new Reserved Instances. - // - // * modification-result.target-configuration.platform - The network platform - // of the new Reserved Instances (EC2-Classic | EC2-VPC). - // - // * reserved-instances-id - The ID of the Reserved Instances modified. - // - // * reserved-instances-modification-id - The ID of the modification request. - // - // * status - The status of the Reserved Instances modification request (processing - // | fulfilled | failed). - // - // * status-message - The reason for the status. - // - // * update-date - The time when the modification request was last updated. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` +// SetSriovNetSupport sets the SriovNetSupport field's value. +func (s *Instance) SetSriovNetSupport(v string) *Instance { + s.SriovNetSupport = &v + return s +} - // The token to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` +// SetState sets the State field's value. +func (s *Instance) SetState(v *InstanceState) *Instance { + s.State = v + return s +} - // IDs for the submitted modification request. - ReservedInstancesModificationIds []*string `locationName:"ReservedInstancesModificationId" locationNameList:"ReservedInstancesModificationId" type:"list"` +// SetStateReason sets the StateReason field's value. +func (s *Instance) SetStateReason(v *StateReason) *Instance { + s.StateReason = v + return s } -// String returns the string representation -func (s DescribeReservedInstancesModificationsInput) String() string { - return awsutil.Prettify(s) +// SetStateTransitionReason sets the StateTransitionReason field's value. +func (s *Instance) SetStateTransitionReason(v string) *Instance { + s.StateTransitionReason = &v + return s } -// GoString returns the string representation -func (s DescribeReservedInstancesModificationsInput) GoString() string { - return s.String() +// SetSubnetId sets the SubnetId field's value. +func (s *Instance) SetSubnetId(v string) *Instance { + s.SubnetId = &v + return s } -// SetFilters sets the Filters field's value. -func (s *DescribeReservedInstancesModificationsInput) SetFilters(v []*Filter) *DescribeReservedInstancesModificationsInput { - s.Filters = v +// SetTags sets the Tags field's value. +func (s *Instance) SetTags(v []*Tag) *Instance { + s.Tags = v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeReservedInstancesModificationsInput) SetNextToken(v string) *DescribeReservedInstancesModificationsInput { - s.NextToken = &v +// SetVirtualizationType sets the VirtualizationType field's value. +func (s *Instance) SetVirtualizationType(v string) *Instance { + s.VirtualizationType = &v return s } -// SetReservedInstancesModificationIds sets the ReservedInstancesModificationIds field's value. -func (s *DescribeReservedInstancesModificationsInput) SetReservedInstancesModificationIds(v []*string) *DescribeReservedInstancesModificationsInput { - s.ReservedInstancesModificationIds = v +// SetVpcId sets the VpcId field's value. +func (s *Instance) SetVpcId(v string) *Instance { + s.VpcId = &v return s } -// Contains the output of DescribeReservedInstancesModifications. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModificationsResult -type DescribeReservedInstancesModificationsOutput struct { +// Describes a block device mapping. +type InstanceBlockDeviceMapping struct { _ struct{} `type:"structure"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The device name (for example, /dev/sdh or xvdh). + DeviceName *string `locationName:"deviceName" type:"string"` - // The Reserved Instance modification information. - ReservedInstancesModifications []*ReservedInstancesModification `locationName:"reservedInstancesModificationsSet" locationNameList:"item" type:"list"` + // Parameters used to automatically set up EBS volumes when the instance is + // launched. + Ebs *EbsInstanceBlockDevice `locationName:"ebs" type:"structure"` } // String returns the string representation -func (s DescribeReservedInstancesModificationsOutput) String() string { +func (s InstanceBlockDeviceMapping) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeReservedInstancesModificationsOutput) GoString() string { +func (s InstanceBlockDeviceMapping) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeReservedInstancesModificationsOutput) SetNextToken(v string) *DescribeReservedInstancesModificationsOutput { - s.NextToken = &v +// SetDeviceName sets the DeviceName field's value. +func (s *InstanceBlockDeviceMapping) SetDeviceName(v string) *InstanceBlockDeviceMapping { + s.DeviceName = &v return s } -// SetReservedInstancesModifications sets the ReservedInstancesModifications field's value. -func (s *DescribeReservedInstancesModificationsOutput) SetReservedInstancesModifications(v []*ReservedInstancesModification) *DescribeReservedInstancesModificationsOutput { - s.ReservedInstancesModifications = v +// SetEbs sets the Ebs field's value. +func (s *InstanceBlockDeviceMapping) SetEbs(v *EbsInstanceBlockDevice) *InstanceBlockDeviceMapping { + s.Ebs = v return s } -// Contains the parameters for DescribeReservedInstancesOfferings. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferingsRequest -type DescribeReservedInstancesOfferingsInput struct { +// Describes a block device mapping entry. +type InstanceBlockDeviceMappingSpecification struct { _ struct{} `type:"structure"` - // The Availability Zone in which the Reserved Instance can be used. - AvailabilityZone *string `type:"string"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * availability-zone - The Availability Zone where the Reserved Instance - // can be used. - // - // * duration - The duration of the Reserved Instance (for example, one year - // or three years), in seconds (31536000 | 94608000). - // - // * fixed-price - The purchase price of the Reserved Instance (for example, - // 9800.0). - // - // * instance-type - The instance type that is covered by the reservation. - // - // * marketplace - Set to true to show only Reserved Instance Marketplace - // offerings. When this filter is not used, which is the default behavior, - // all offerings from both AWS and the Reserved Instance Marketplace are - // listed. - // - // * product-description - The Reserved Instance product platform description. - // Instances that include (Amazon VPC) in the product platform description - // will only be displayed to EC2-Classic account holders and are for use - // with Amazon VPC. (Linux/UNIX | Linux/UNIX (Amazon VPC) | SUSE Linux | - // SUSE Linux (Amazon VPC) | Red Hat Enterprise Linux | Red Hat Enterprise - // Linux (Amazon VPC) | Windows | Windows (Amazon VPC) | Windows with SQL - // Server Standard | Windows with SQL Server Standard (Amazon VPC) | Windows - // with SQL Server Web | Windows with SQL Server Web (Amazon VPC) | Windows - // with SQL Server Enterprise | Windows with SQL Server Enterprise (Amazon - // VPC)) - // - // * reserved-instances-offering-id - The Reserved Instances offering ID. - // - // * scope - The scope of the Reserved Instance (Availability Zone or Region). - // - // * usage-price - The usage price of the Reserved Instance, per hour (for - // example, 0.84). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // Include Reserved Instance Marketplace offerings in the response. - IncludeMarketplace *bool `type:"boolean"` - - // The tenancy of the instances covered by the reservation. A Reserved Instance - // with a tenancy of dedicated is applied to instances that run in a VPC on - // single-tenant hardware (i.e., Dedicated Instances). - // - // Default: default - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` - - // The instance type that the reservation will cover (for example, m1.small). - // For more information, see Instance Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - InstanceType *string `type:"string" enum:"InstanceType"` - - // The maximum duration (in seconds) to filter when searching for offerings. - // - // Default: 94608000 (3 years) - MaxDuration *int64 `type:"long"` - - // The maximum number of instances to filter when searching for offerings. - // - // Default: 20 - MaxInstanceCount *int64 `type:"integer"` - - // The maximum number of results to return for the request in a single page. - // The remaining results of the initial request can be seen by sending another - // request with the returned NextToken value. The maximum is 100. - // - // Default: 100 - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The minimum duration (in seconds) to filter when searching for offerings. - // - // Default: 2592000 (1 month) - MinDuration *int64 `type:"long"` - - // The token to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` - - // The offering class of the Reserved Instance. Can be standard or convertible. - OfferingClass *string `type:"string" enum:"OfferingClassType"` + // The device name (for example, /dev/sdh or xvdh). + DeviceName *string `locationName:"deviceName" type:"string"` - // The Reserved Instance offering type. If you are using tools that predate - // the 2011-11-01 API version, you only have access to the Medium Utilization - // Reserved Instance offering type. - OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` + // Parameters used to automatically set up EBS volumes when the instance is + // launched. + Ebs *EbsInstanceBlockDeviceSpecification `locationName:"ebs" type:"structure"` - // The Reserved Instance product platform description. Instances that include - // (Amazon VPC) in the description are for use with Amazon VPC. - ProductDescription *string `type:"string" enum:"RIProductDescription"` + // suppress the specified device included in the block device mapping. + NoDevice *string `locationName:"noDevice" type:"string"` - // One or more Reserved Instances offering IDs. - ReservedInstancesOfferingIds []*string `locationName:"ReservedInstancesOfferingId" type:"list"` + // The virtual device name. + VirtualName *string `locationName:"virtualName" type:"string"` } // String returns the string representation -func (s DescribeReservedInstancesOfferingsInput) String() string { +func (s InstanceBlockDeviceMappingSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeReservedInstancesOfferingsInput) GoString() string { +func (s InstanceBlockDeviceMappingSpecification) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetAvailabilityZone(v string) *DescribeReservedInstancesOfferingsInput { - s.AvailabilityZone = &v +// SetDeviceName sets the DeviceName field's value. +func (s *InstanceBlockDeviceMappingSpecification) SetDeviceName(v string) *InstanceBlockDeviceMappingSpecification { + s.DeviceName = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetDryRun(v bool) *DescribeReservedInstancesOfferingsInput { - s.DryRun = &v +// SetEbs sets the Ebs field's value. +func (s *InstanceBlockDeviceMappingSpecification) SetEbs(v *EbsInstanceBlockDeviceSpecification) *InstanceBlockDeviceMappingSpecification { + s.Ebs = v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetFilters(v []*Filter) *DescribeReservedInstancesOfferingsInput { - s.Filters = v +// SetNoDevice sets the NoDevice field's value. +func (s *InstanceBlockDeviceMappingSpecification) SetNoDevice(v string) *InstanceBlockDeviceMappingSpecification { + s.NoDevice = &v return s } -// SetIncludeMarketplace sets the IncludeMarketplace field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetIncludeMarketplace(v bool) *DescribeReservedInstancesOfferingsInput { - s.IncludeMarketplace = &v +// SetVirtualName sets the VirtualName field's value. +func (s *InstanceBlockDeviceMappingSpecification) SetVirtualName(v string) *InstanceBlockDeviceMappingSpecification { + s.VirtualName = &v return s } -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetInstanceTenancy(v string) *DescribeReservedInstancesOfferingsInput { - s.InstanceTenancy = &v +// Information about the number of instances that can be launched onto the Dedicated +// Host. +type InstanceCapacity struct { + _ struct{} `type:"structure"` + + // The number of instances that can be launched onto the Dedicated Host based + // on the host's available capacity. + AvailableCapacity *int64 `locationName:"availableCapacity" type:"integer"` + + // The instance type supported by the Dedicated Host. + InstanceType *string `locationName:"instanceType" type:"string"` + + // The total number of instances that can be launched onto the Dedicated Host + // if there are no instances running on it. + TotalCapacity *int64 `locationName:"totalCapacity" type:"integer"` +} + +// String returns the string representation +func (s InstanceCapacity) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InstanceCapacity) GoString() string { + return s.String() +} + +// SetAvailableCapacity sets the AvailableCapacity field's value. +func (s *InstanceCapacity) SetAvailableCapacity(v int64) *InstanceCapacity { + s.AvailableCapacity = &v return s } // SetInstanceType sets the InstanceType field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetInstanceType(v string) *DescribeReservedInstancesOfferingsInput { +func (s *InstanceCapacity) SetInstanceType(v string) *InstanceCapacity { s.InstanceType = &v return s } -// SetMaxDuration sets the MaxDuration field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetMaxDuration(v int64) *DescribeReservedInstancesOfferingsInput { - s.MaxDuration = &v - return s -} - -// SetMaxInstanceCount sets the MaxInstanceCount field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetMaxInstanceCount(v int64) *DescribeReservedInstancesOfferingsInput { - s.MaxInstanceCount = &v +// SetTotalCapacity sets the TotalCapacity field's value. +func (s *InstanceCapacity) SetTotalCapacity(v int64) *InstanceCapacity { + s.TotalCapacity = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetMaxResults(v int64) *DescribeReservedInstancesOfferingsInput { - s.MaxResults = &v - return s -} +// Describes a Reserved Instance listing state. +type InstanceCount struct { + _ struct{} `type:"structure"` -// SetMinDuration sets the MinDuration field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetMinDuration(v int64) *DescribeReservedInstancesOfferingsInput { - s.MinDuration = &v - return s -} + // The number of listed Reserved Instances in the state specified by the state. + InstanceCount *int64 `locationName:"instanceCount" type:"integer"` -// SetNextToken sets the NextToken field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetNextToken(v string) *DescribeReservedInstancesOfferingsInput { - s.NextToken = &v - return s + // The states of the listed Reserved Instances. + State *string `locationName:"state" type:"string" enum:"ListingState"` } -// SetOfferingClass sets the OfferingClass field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetOfferingClass(v string) *DescribeReservedInstancesOfferingsInput { - s.OfferingClass = &v - return s +// String returns the string representation +func (s InstanceCount) String() string { + return awsutil.Prettify(s) } -// SetOfferingType sets the OfferingType field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetOfferingType(v string) *DescribeReservedInstancesOfferingsInput { - s.OfferingType = &v - return s +// GoString returns the string representation +func (s InstanceCount) GoString() string { + return s.String() } -// SetProductDescription sets the ProductDescription field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetProductDescription(v string) *DescribeReservedInstancesOfferingsInput { - s.ProductDescription = &v +// SetInstanceCount sets the InstanceCount field's value. +func (s *InstanceCount) SetInstanceCount(v int64) *InstanceCount { + s.InstanceCount = &v return s } -// SetReservedInstancesOfferingIds sets the ReservedInstancesOfferingIds field's value. -func (s *DescribeReservedInstancesOfferingsInput) SetReservedInstancesOfferingIds(v []*string) *DescribeReservedInstancesOfferingsInput { - s.ReservedInstancesOfferingIds = v +// SetState sets the State field's value. +func (s *InstanceCount) SetState(v string) *InstanceCount { + s.State = &v return s } -// Contains the output of DescribeReservedInstancesOfferings. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferingsResult -type DescribeReservedInstancesOfferingsOutput struct { +// Describes the credit option for CPU usage of a T2 or T3 instance. +type InstanceCreditSpecification struct { _ struct{} `type:"structure"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The credit option for CPU usage of the instance. Valid values are standard + // and unlimited. + CpuCredits *string `locationName:"cpuCredits" type:"string"` - // A list of Reserved Instances offerings. - ReservedInstancesOfferings []*ReservedInstancesOffering `locationName:"reservedInstancesOfferingsSet" locationNameList:"item" type:"list"` + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` } // String returns the string representation -func (s DescribeReservedInstancesOfferingsOutput) String() string { +func (s InstanceCreditSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeReservedInstancesOfferingsOutput) GoString() string { +func (s InstanceCreditSpecification) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeReservedInstancesOfferingsOutput) SetNextToken(v string) *DescribeReservedInstancesOfferingsOutput { - s.NextToken = &v +// SetCpuCredits sets the CpuCredits field's value. +func (s *InstanceCreditSpecification) SetCpuCredits(v string) *InstanceCreditSpecification { + s.CpuCredits = &v return s } -// SetReservedInstancesOfferings sets the ReservedInstancesOfferings field's value. -func (s *DescribeReservedInstancesOfferingsOutput) SetReservedInstancesOfferings(v []*ReservedInstancesOffering) *DescribeReservedInstancesOfferingsOutput { - s.ReservedInstancesOfferings = v +// SetInstanceId sets the InstanceId field's value. +func (s *InstanceCreditSpecification) SetInstanceId(v string) *InstanceCreditSpecification { + s.InstanceId = &v return s } -// Contains the output for DescribeReservedInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesResult -type DescribeReservedInstancesOutput struct { +// Describes the credit option for CPU usage of a T2 or T3 instance. +type InstanceCreditSpecificationRequest struct { _ struct{} `type:"structure"` - // A list of Reserved Instances. - ReservedInstances []*ReservedInstances `locationName:"reservedInstancesSet" locationNameList:"item" type:"list"` + // The credit option for CPU usage of the instance. Valid values are standard + // and unlimited. + CpuCredits *string `type:"string"` + + // The ID of the instance. + InstanceId *string `type:"string"` } // String returns the string representation -func (s DescribeReservedInstancesOutput) String() string { +func (s InstanceCreditSpecificationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeReservedInstancesOutput) GoString() string { +func (s InstanceCreditSpecificationRequest) GoString() string { return s.String() } -// SetReservedInstances sets the ReservedInstances field's value. -func (s *DescribeReservedInstancesOutput) SetReservedInstances(v []*ReservedInstances) *DescribeReservedInstancesOutput { - s.ReservedInstances = v +// SetCpuCredits sets the CpuCredits field's value. +func (s *InstanceCreditSpecificationRequest) SetCpuCredits(v string) *InstanceCreditSpecificationRequest { + s.CpuCredits = &v return s } -// Contains the parameters for DescribeRouteTables. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTablesRequest -type DescribeRouteTablesInput struct { - _ struct{} `type:"structure"` +// SetInstanceId sets the InstanceId field's value. +func (s *InstanceCreditSpecificationRequest) SetInstanceId(v string) *InstanceCreditSpecificationRequest { + s.InstanceId = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// Describes an instance to export. +type InstanceExportDetails struct { + _ struct{} `type:"structure"` - // One or more filters. - // - // * association.route-table-association-id - The ID of an association ID - // for the route table. - // - // * association.route-table-id - The ID of the route table involved in the - // association. - // - // * association.subnet-id - The ID of the subnet involved in the association. - // - // * association.main - Indicates whether the route table is the main route - // table for the VPC (true | false). - // - // * route-table-id - The ID of the route table. - // - // * route.destination-cidr-block - The IPv4 CIDR range specified in a route - // in the table. - // - // * route.destination-ipv6-cidr-block - The IPv6 CIDR range specified in - // a route in the route table. - // - // * route.destination-prefix-list-id - The ID (prefix) of the AWS service - // specified in a route in the table. - // - // * route.egress-only-internet-gateway-id - The ID of an egress-only Internet - // gateway specified in a route in the route table. - // - // * route.gateway-id - The ID of a gateway specified in a route in the table. - // - // * route.instance-id - The ID of an instance specified in a route in the - // table. - // - // * route.nat-gateway-id - The ID of a NAT gateway. - // - // * route.origin - Describes how the route was created. CreateRouteTable - // indicates that the route was automatically created when the route table - // was created; CreateRoute indicates that the route was manually added to - // the route table; EnableVgwRoutePropagation indicates that the route was - // propagated by route propagation. - // - // * route.state - The state of a route in the route table (active | blackhole). - // The blackhole state indicates that the route's target isn't available - // (for example, the specified gateway isn't attached to the VPC, the specified - // NAT instance has been terminated, and so on). - // - // * route.vpc-peering-connection-id - The ID of a VPC peering connection - // specified in a route in the table. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * vpc-id - The ID of the VPC for the route table. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // The ID of the resource being exported. + InstanceId *string `locationName:"instanceId" type:"string"` - // One or more route table IDs. - // - // Default: Describes all your route tables. - RouteTableIds []*string `locationName:"RouteTableId" locationNameList:"item" type:"list"` + // The target virtualization environment. + TargetEnvironment *string `locationName:"targetEnvironment" type:"string" enum:"ExportEnvironment"` } // String returns the string representation -func (s DescribeRouteTablesInput) String() string { +func (s InstanceExportDetails) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeRouteTablesInput) GoString() string { +func (s InstanceExportDetails) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeRouteTablesInput) SetDryRun(v bool) *DescribeRouteTablesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeRouteTablesInput) SetFilters(v []*Filter) *DescribeRouteTablesInput { - s.Filters = v +// SetInstanceId sets the InstanceId field's value. +func (s *InstanceExportDetails) SetInstanceId(v string) *InstanceExportDetails { + s.InstanceId = &v return s } -// SetRouteTableIds sets the RouteTableIds field's value. -func (s *DescribeRouteTablesInput) SetRouteTableIds(v []*string) *DescribeRouteTablesInput { - s.RouteTableIds = v +// SetTargetEnvironment sets the TargetEnvironment field's value. +func (s *InstanceExportDetails) SetTargetEnvironment(v string) *InstanceExportDetails { + s.TargetEnvironment = &v return s } -// Contains the output of DescribeRouteTables. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTablesResult -type DescribeRouteTablesOutput struct { +// Describes an IPv6 address. +type InstanceIpv6Address struct { _ struct{} `type:"structure"` - // Information about one or more route tables. - RouteTables []*RouteTable `locationName:"routeTableSet" locationNameList:"item" type:"list"` + // The IPv6 address. + Ipv6Address *string `locationName:"ipv6Address" type:"string"` } // String returns the string representation -func (s DescribeRouteTablesOutput) String() string { +func (s InstanceIpv6Address) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeRouteTablesOutput) GoString() string { +func (s InstanceIpv6Address) GoString() string { return s.String() } -// SetRouteTables sets the RouteTables field's value. -func (s *DescribeRouteTablesOutput) SetRouteTables(v []*RouteTable) *DescribeRouteTablesOutput { - s.RouteTables = v +// SetIpv6Address sets the Ipv6Address field's value. +func (s *InstanceIpv6Address) SetIpv6Address(v string) *InstanceIpv6Address { + s.Ipv6Address = &v return s } -// Contains the parameters for DescribeScheduledInstanceAvailability. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailabilityRequest -type DescribeScheduledInstanceAvailabilityInput struct { +// Describes an IPv6 address. +type InstanceIpv6AddressRequest struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * availability-zone - The Availability Zone (for example, us-west-2a). - // - // * instance-type - The instance type (for example, c4.large). - // - // * network-platform - The network platform (EC2-Classic or EC2-VPC). - // - // * platform - The platform (Linux/UNIX or Windows). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The time period for the first schedule to start. - // - // FirstSlotStartTimeRange is a required field - FirstSlotStartTimeRange *SlotDateTimeRangeRequest `type:"structure" required:"true"` - - // The maximum number of results to return in a single call. This value can - // be between 5 and 300. The default value is 300. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` - - // The maximum available duration, in hours. This value must be greater than - // MinSlotDurationInHours and less than 1,720. - MaxSlotDurationInHours *int64 `type:"integer"` - - // The minimum available duration, in hours. The minimum required duration is - // 1,200 hours per year. For example, the minimum daily schedule is 4 hours, - // the minimum weekly schedule is 24 hours, and the minimum monthly schedule - // is 100 hours. - MinSlotDurationInHours *int64 `type:"integer"` - - // The token for the next set of results. - NextToken *string `type:"string"` - - // The schedule recurrence. - // - // Recurrence is a required field - Recurrence *ScheduledInstanceRecurrenceRequest `type:"structure" required:"true"` + // The IPv6 address. + Ipv6Address *string `type:"string"` } // String returns the string representation -func (s DescribeScheduledInstanceAvailabilityInput) String() string { +func (s InstanceIpv6AddressRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeScheduledInstanceAvailabilityInput) GoString() string { +func (s InstanceIpv6AddressRequest) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeScheduledInstanceAvailabilityInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeScheduledInstanceAvailabilityInput"} - if s.FirstSlotStartTimeRange == nil { - invalidParams.Add(request.NewErrParamRequired("FirstSlotStartTimeRange")) - } - if s.Recurrence == nil { - invalidParams.Add(request.NewErrParamRequired("Recurrence")) - } - if s.FirstSlotStartTimeRange != nil { - if err := s.FirstSlotStartTimeRange.Validate(); err != nil { - invalidParams.AddNested("FirstSlotStartTimeRange", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetDryRun(v bool) *DescribeScheduledInstanceAvailabilityInput { - s.DryRun = &v +// SetIpv6Address sets the Ipv6Address field's value. +func (s *InstanceIpv6AddressRequest) SetIpv6Address(v string) *InstanceIpv6AddressRequest { + s.Ipv6Address = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetFilters(v []*Filter) *DescribeScheduledInstanceAvailabilityInput { - s.Filters = v - return s -} +// Describes the market (purchasing) option for the instances. +type InstanceMarketOptionsRequest struct { + _ struct{} `type:"structure"` -// SetFirstSlotStartTimeRange sets the FirstSlotStartTimeRange field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetFirstSlotStartTimeRange(v *SlotDateTimeRangeRequest) *DescribeScheduledInstanceAvailabilityInput { - s.FirstSlotStartTimeRange = v - return s -} + // The market type. + MarketType *string `type:"string" enum:"MarketType"` -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetMaxResults(v int64) *DescribeScheduledInstanceAvailabilityInput { - s.MaxResults = &v - return s + // The options for Spot Instances. + SpotOptions *SpotMarketOptions `type:"structure"` } -// SetMaxSlotDurationInHours sets the MaxSlotDurationInHours field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetMaxSlotDurationInHours(v int64) *DescribeScheduledInstanceAvailabilityInput { - s.MaxSlotDurationInHours = &v - return s +// String returns the string representation +func (s InstanceMarketOptionsRequest) String() string { + return awsutil.Prettify(s) } -// SetMinSlotDurationInHours sets the MinSlotDurationInHours field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetMinSlotDurationInHours(v int64) *DescribeScheduledInstanceAvailabilityInput { - s.MinSlotDurationInHours = &v - return s +// GoString returns the string representation +func (s InstanceMarketOptionsRequest) GoString() string { + return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetNextToken(v string) *DescribeScheduledInstanceAvailabilityInput { - s.NextToken = &v +// SetMarketType sets the MarketType field's value. +func (s *InstanceMarketOptionsRequest) SetMarketType(v string) *InstanceMarketOptionsRequest { + s.MarketType = &v return s } -// SetRecurrence sets the Recurrence field's value. -func (s *DescribeScheduledInstanceAvailabilityInput) SetRecurrence(v *ScheduledInstanceRecurrenceRequest) *DescribeScheduledInstanceAvailabilityInput { - s.Recurrence = v +// SetSpotOptions sets the SpotOptions field's value. +func (s *InstanceMarketOptionsRequest) SetSpotOptions(v *SpotMarketOptions) *InstanceMarketOptionsRequest { + s.SpotOptions = v return s } -// Contains the output of DescribeScheduledInstanceAvailability. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailabilityResult -type DescribeScheduledInstanceAvailabilityOutput struct { +// The metadata options for the instance. +type InstanceMetadataOptionsRequest struct { _ struct{} `type:"structure"` - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // This parameter enables or disables the HTTP metadata endpoint on your instances. + // If the parameter is not specified, the default state is enabled. + // + // If you specify a value of disabled, you will not be able to access your instance + // metadata. + HttpEndpoint *string `type:"string" enum:"InstanceMetadataEndpointState"` - // Information about the available Scheduled Instances. - ScheduledInstanceAvailabilitySet []*ScheduledInstanceAvailability `locationName:"scheduledInstanceAvailabilitySet" locationNameList:"item" type:"list"` + // The desired HTTP PUT response hop limit for instance metadata requests. The + // larger the number, the further instance metadata requests can travel. + // + // Default: 1 + // + // Possible values: Integers from 1 to 64 + HttpPutResponseHopLimit *int64 `type:"integer"` + + // The state of token usage for your instance metadata requests. If the parameter + // is not specified in the request, the default state is optional. + // + // If the state is optional, you can choose to retrieve instance metadata with + // or without a signed token header on your request. If you retrieve the IAM + // role credentials without a token, the version 1.0 role credentials are returned. + // If you retrieve the IAM role credentials using a valid signed token, the + // version 2.0 role credentials are returned. + // + // If the state is required, you must send a signed token header with any instance + // metadata retrieval requests. In this state, retrieving the IAM role credentials + // always returns the version 2.0 credentials; the version 1.0 credentials are + // not available. + HttpTokens *string `type:"string" enum:"HttpTokensState"` } // String returns the string representation -func (s DescribeScheduledInstanceAvailabilityOutput) String() string { +func (s InstanceMetadataOptionsRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeScheduledInstanceAvailabilityOutput) GoString() string { +func (s InstanceMetadataOptionsRequest) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeScheduledInstanceAvailabilityOutput) SetNextToken(v string) *DescribeScheduledInstanceAvailabilityOutput { - s.NextToken = &v +// SetHttpEndpoint sets the HttpEndpoint field's value. +func (s *InstanceMetadataOptionsRequest) SetHttpEndpoint(v string) *InstanceMetadataOptionsRequest { + s.HttpEndpoint = &v return s } -// SetScheduledInstanceAvailabilitySet sets the ScheduledInstanceAvailabilitySet field's value. -func (s *DescribeScheduledInstanceAvailabilityOutput) SetScheduledInstanceAvailabilitySet(v []*ScheduledInstanceAvailability) *DescribeScheduledInstanceAvailabilityOutput { - s.ScheduledInstanceAvailabilitySet = v +// SetHttpPutResponseHopLimit sets the HttpPutResponseHopLimit field's value. +func (s *InstanceMetadataOptionsRequest) SetHttpPutResponseHopLimit(v int64) *InstanceMetadataOptionsRequest { + s.HttpPutResponseHopLimit = &v return s } -// Contains the parameters for DescribeScheduledInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstancesRequest -type DescribeScheduledInstancesInput struct { +// SetHttpTokens sets the HttpTokens field's value. +func (s *InstanceMetadataOptionsRequest) SetHttpTokens(v string) *InstanceMetadataOptionsRequest { + s.HttpTokens = &v + return s +} + +// The metadata options for the instance. +type InstanceMetadataOptionsResponse struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // This parameter enables or disables the HTTP metadata endpoint on your instances. + // If the parameter is not specified, the default state is enabled. + // + // If you specify a value of disabled, you will not be able to access your instance + // metadata. + HttpEndpoint *string `locationName:"httpEndpoint" type:"string" enum:"InstanceMetadataEndpointState"` - // One or more filters. + // The desired HTTP PUT response hop limit for instance metadata requests. The + // larger the number, the further instance metadata requests can travel. // - // * availability-zone - The Availability Zone (for example, us-west-2a). + // Default: 1 // - // * instance-type - The instance type (for example, c4.large). + // Possible values: Integers from 1 to 64 + HttpPutResponseHopLimit *int64 `locationName:"httpPutResponseHopLimit" type:"integer"` + + // The state of token usage for your instance metadata requests. If the parameter + // is not specified in the request, the default state is optional. // - // * network-platform - The network platform (EC2-Classic or EC2-VPC). + // If the state is optional, you can choose to retrieve instance metadata with + // or without a signed token header on your request. If you retrieve the IAM + // role credentials without a token, the version 1.0 role credentials are returned. + // If you retrieve the IAM role credentials using a valid signed token, the + // version 2.0 role credentials are returned. // - // * platform - The platform (Linux/UNIX or Windows). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of results to return in a single call. This value can - // be between 5 and 300. The default value is 100. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `type:"integer"` + // If the state is required, you must send a signed token header with any instance + // metadata retrieval requests. In this state, retrieving the IAM role credential + // always returns the version 2.0 credentials; the version 1.0 credentials are + // not available. + HttpTokens *string `locationName:"httpTokens" type:"string" enum:"HttpTokensState"` - // The token for the next set of results. - NextToken *string `type:"string"` - - // One or more Scheduled Instance IDs. - ScheduledInstanceIds []*string `locationName:"ScheduledInstanceId" locationNameList:"ScheduledInstanceId" type:"list"` - - // The time period for the first schedule to start. - SlotStartTimeRange *SlotStartTimeRangeRequest `type:"structure"` + // The state of the metadata option changes. + // + // pending - The metadata options are being updated and the instance is not + // ready to process metadata traffic with the new selection. + // + // applied - The metadata options have been successfully applied on the instance. + State *string `locationName:"state" type:"string" enum:"InstanceMetadataOptionsState"` } // String returns the string representation -func (s DescribeScheduledInstancesInput) String() string { +func (s InstanceMetadataOptionsResponse) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeScheduledInstancesInput) GoString() string { +func (s InstanceMetadataOptionsResponse) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeScheduledInstancesInput) SetDryRun(v bool) *DescribeScheduledInstancesInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeScheduledInstancesInput) SetFilters(v []*Filter) *DescribeScheduledInstancesInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeScheduledInstancesInput) SetMaxResults(v int64) *DescribeScheduledInstancesInput { - s.MaxResults = &v +// SetHttpEndpoint sets the HttpEndpoint field's value. +func (s *InstanceMetadataOptionsResponse) SetHttpEndpoint(v string) *InstanceMetadataOptionsResponse { + s.HttpEndpoint = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeScheduledInstancesInput) SetNextToken(v string) *DescribeScheduledInstancesInput { - s.NextToken = &v +// SetHttpPutResponseHopLimit sets the HttpPutResponseHopLimit field's value. +func (s *InstanceMetadataOptionsResponse) SetHttpPutResponseHopLimit(v int64) *InstanceMetadataOptionsResponse { + s.HttpPutResponseHopLimit = &v return s } -// SetScheduledInstanceIds sets the ScheduledInstanceIds field's value. -func (s *DescribeScheduledInstancesInput) SetScheduledInstanceIds(v []*string) *DescribeScheduledInstancesInput { - s.ScheduledInstanceIds = v +// SetHttpTokens sets the HttpTokens field's value. +func (s *InstanceMetadataOptionsResponse) SetHttpTokens(v string) *InstanceMetadataOptionsResponse { + s.HttpTokens = &v return s } -// SetSlotStartTimeRange sets the SlotStartTimeRange field's value. -func (s *DescribeScheduledInstancesInput) SetSlotStartTimeRange(v *SlotStartTimeRangeRequest) *DescribeScheduledInstancesInput { - s.SlotStartTimeRange = v +// SetState sets the State field's value. +func (s *InstanceMetadataOptionsResponse) SetState(v string) *InstanceMetadataOptionsResponse { + s.State = &v return s } -// Contains the output of DescribeScheduledInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstancesResult -type DescribeScheduledInstancesOutput struct { +// Describes the monitoring of an instance. +type InstanceMonitoring struct { _ struct{} `type:"structure"` - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` - // Information about the Scheduled Instances. - ScheduledInstanceSet []*ScheduledInstance `locationName:"scheduledInstanceSet" locationNameList:"item" type:"list"` + // The monitoring for the instance. + Monitoring *Monitoring `locationName:"monitoring" type:"structure"` } // String returns the string representation -func (s DescribeScheduledInstancesOutput) String() string { +func (s InstanceMonitoring) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeScheduledInstancesOutput) GoString() string { +func (s InstanceMonitoring) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeScheduledInstancesOutput) SetNextToken(v string) *DescribeScheduledInstancesOutput { - s.NextToken = &v +// SetInstanceId sets the InstanceId field's value. +func (s *InstanceMonitoring) SetInstanceId(v string) *InstanceMonitoring { + s.InstanceId = &v return s } -// SetScheduledInstanceSet sets the ScheduledInstanceSet field's value. -func (s *DescribeScheduledInstancesOutput) SetScheduledInstanceSet(v []*ScheduledInstance) *DescribeScheduledInstancesOutput { - s.ScheduledInstanceSet = v +// SetMonitoring sets the Monitoring field's value. +func (s *InstanceMonitoring) SetMonitoring(v *Monitoring) *InstanceMonitoring { + s.Monitoring = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferencesRequest -type DescribeSecurityGroupReferencesInput struct { +// Describes a network interface. +type InstanceNetworkInterface struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the operation, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // The association information for an Elastic IPv4 associated with the network + // interface. + Association *InstanceNetworkInterfaceAssociation `locationName:"association" type:"structure"` + + // The network interface attachment. + Attachment *InstanceNetworkInterfaceAttachment `locationName:"attachment" type:"structure"` + + // The description. + Description *string `locationName:"description" type:"string"` + + // One or more security groups. + Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - // One or more security group IDs in your account. + // Describes the type of network interface. // - // GroupId is a required field - GroupId []*string `locationNameList:"item" type:"list" required:"true"` -} + // Valid values: interface | efa + InterfaceType *string `locationName:"interfaceType" type:"string"` -// String returns the string representation -func (s DescribeSecurityGroupReferencesInput) String() string { - return awsutil.Prettify(s) -} + // One or more IPv6 addresses associated with the network interface. + Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6AddressesSet" locationNameList:"item" type:"list"` -// GoString returns the string representation -func (s DescribeSecurityGroupReferencesInput) GoString() string { - return s.String() -} + // The MAC address. + MacAddress *string `locationName:"macAddress" type:"string"` -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSecurityGroupReferencesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSecurityGroupReferencesInput"} - if s.GroupId == nil { - invalidParams.Add(request.NewErrParamRequired("GroupId")) - } + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} + // The ID of the AWS account that created the network interface. + OwnerId *string `locationName:"ownerId" type:"string"` -// SetDryRun sets the DryRun field's value. -func (s *DescribeSecurityGroupReferencesInput) SetDryRun(v bool) *DescribeSecurityGroupReferencesInput { - s.DryRun = &v - return s -} + // The private DNS name. + PrivateDnsName *string `locationName:"privateDnsName" type:"string"` -// SetGroupId sets the GroupId field's value. -func (s *DescribeSecurityGroupReferencesInput) SetGroupId(v []*string) *DescribeSecurityGroupReferencesInput { - s.GroupId = v - return s -} + // The IPv4 address of the network interface within the subnet. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferencesResult -type DescribeSecurityGroupReferencesOutput struct { - _ struct{} `type:"structure"` + // One or more private IPv4 addresses associated with the network interface. + PrivateIpAddresses []*InstancePrivateIpAddress `locationName:"privateIpAddressesSet" locationNameList:"item" type:"list"` - // Information about the VPCs with the referencing security groups. - SecurityGroupReferenceSet []*SecurityGroupReference `locationName:"securityGroupReferenceSet" locationNameList:"item" type:"list"` + // Indicates whether to validate network traffic to or from this network interface. + SourceDestCheck *bool `locationName:"sourceDestCheck" type:"boolean"` + + // The status of the network interface. + Status *string `locationName:"status" type:"string" enum:"NetworkInterfaceStatus"` + + // The ID of the subnet. + SubnetId *string `locationName:"subnetId" type:"string"` + + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s DescribeSecurityGroupReferencesOutput) String() string { +func (s InstanceNetworkInterface) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSecurityGroupReferencesOutput) GoString() string { +func (s InstanceNetworkInterface) GoString() string { return s.String() } -// SetSecurityGroupReferenceSet sets the SecurityGroupReferenceSet field's value. -func (s *DescribeSecurityGroupReferencesOutput) SetSecurityGroupReferenceSet(v []*SecurityGroupReference) *DescribeSecurityGroupReferencesOutput { - s.SecurityGroupReferenceSet = v +// SetAssociation sets the Association field's value. +func (s *InstanceNetworkInterface) SetAssociation(v *InstanceNetworkInterfaceAssociation) *InstanceNetworkInterface { + s.Association = v return s } -// Contains the parameters for DescribeSecurityGroups. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupsRequest -type DescribeSecurityGroupsInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetAttachment sets the Attachment field's value. +func (s *InstanceNetworkInterface) SetAttachment(v *InstanceNetworkInterfaceAttachment) *InstanceNetworkInterface { + s.Attachment = v + return s +} - // One or more filters. If using multiple filters for rules, the results include - // security groups for which any combination of rules - not necessarily a single - // rule - match all filters. - // - // * description - The description of the security group. - // - // * egress.ip-permission.prefix-list-id - The ID (prefix) of the AWS service - // to which the security group allows access. - // - // * group-id - The ID of the security group. - // - // * group-name - The name of the security group. - // - // * ip-permission.cidr - An IPv4 CIDR range that has been granted permission - // in a security group rule. - // - // * ip-permission.from-port - The start of port range for the TCP and UDP - // protocols, or an ICMP type number. - // - // * ip-permission.group-id - The ID of a security group that has been granted - // permission. - // - // * ip-permission.group-name - The name of a security group that has been - // granted permission. - // - // * ip-permission.ipv6-cidr - An IPv6 CIDR range that has been granted permission - // in a security group rule. - // - // * ip-permission.protocol - The IP protocol for the permission (tcp | udp - // | icmp or a protocol number). - // - // * ip-permission.to-port - The end of port range for the TCP and UDP protocols, - // or an ICMP code. - // - // * ip-permission.user-id - The ID of an AWS account that has been granted - // permission. - // - // * owner-id - The AWS account ID of the owner of the security group. - // - // * tag-key - The key of a tag assigned to the security group. - // - // * tag-value - The value of a tag assigned to the security group. - // - // * vpc-id - The ID of the VPC specified when the security group was created. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` +// SetDescription sets the Description field's value. +func (s *InstanceNetworkInterface) SetDescription(v string) *InstanceNetworkInterface { + s.Description = &v + return s +} - // One or more security group IDs. Required for security groups in a nondefault - // VPC. - // - // Default: Describes all your security groups. - GroupIds []*string `locationName:"GroupId" locationNameList:"groupId" type:"list"` +// SetGroups sets the Groups field's value. +func (s *InstanceNetworkInterface) SetGroups(v []*GroupIdentifier) *InstanceNetworkInterface { + s.Groups = v + return s +} - // [EC2-Classic and default VPC only] One or more security group names. You - // can specify either the security group name or the security group ID. For - // security groups in a nondefault VPC, use the group-name filter to describe - // security groups by name. - // - // Default: Describes all your security groups. - GroupNames []*string `locationName:"GroupName" locationNameList:"GroupName" type:"list"` +// SetInterfaceType sets the InterfaceType field's value. +func (s *InstanceNetworkInterface) SetInterfaceType(v string) *InstanceNetworkInterface { + s.InterfaceType = &v + return s } -// String returns the string representation -func (s DescribeSecurityGroupsInput) String() string { - return awsutil.Prettify(s) +// SetIpv6Addresses sets the Ipv6Addresses field's value. +func (s *InstanceNetworkInterface) SetIpv6Addresses(v []*InstanceIpv6Address) *InstanceNetworkInterface { + s.Ipv6Addresses = v + return s } -// GoString returns the string representation -func (s DescribeSecurityGroupsInput) GoString() string { - return s.String() +// SetMacAddress sets the MacAddress field's value. +func (s *InstanceNetworkInterface) SetMacAddress(v string) *InstanceNetworkInterface { + s.MacAddress = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSecurityGroupsInput) SetDryRun(v bool) *DescribeSecurityGroupsInput { - s.DryRun = &v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *InstanceNetworkInterface) SetNetworkInterfaceId(v string) *InstanceNetworkInterface { + s.NetworkInterfaceId = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeSecurityGroupsInput) SetFilters(v []*Filter) *DescribeSecurityGroupsInput { - s.Filters = v +// SetOwnerId sets the OwnerId field's value. +func (s *InstanceNetworkInterface) SetOwnerId(v string) *InstanceNetworkInterface { + s.OwnerId = &v return s } -// SetGroupIds sets the GroupIds field's value. -func (s *DescribeSecurityGroupsInput) SetGroupIds(v []*string) *DescribeSecurityGroupsInput { - s.GroupIds = v +// SetPrivateDnsName sets the PrivateDnsName field's value. +func (s *InstanceNetworkInterface) SetPrivateDnsName(v string) *InstanceNetworkInterface { + s.PrivateDnsName = &v return s } -// SetGroupNames sets the GroupNames field's value. -func (s *DescribeSecurityGroupsInput) SetGroupNames(v []*string) *DescribeSecurityGroupsInput { - s.GroupNames = v +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *InstanceNetworkInterface) SetPrivateIpAddress(v string) *InstanceNetworkInterface { + s.PrivateIpAddress = &v return s } -// Contains the output of DescribeSecurityGroups. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupsResult -type DescribeSecurityGroupsOutput struct { - _ struct{} `type:"structure"` +// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. +func (s *InstanceNetworkInterface) SetPrivateIpAddresses(v []*InstancePrivateIpAddress) *InstanceNetworkInterface { + s.PrivateIpAddresses = v + return s +} - // Information about one or more security groups. - SecurityGroups []*SecurityGroup `locationName:"securityGroupInfo" locationNameList:"item" type:"list"` +// SetSourceDestCheck sets the SourceDestCheck field's value. +func (s *InstanceNetworkInterface) SetSourceDestCheck(v bool) *InstanceNetworkInterface { + s.SourceDestCheck = &v + return s } -// String returns the string representation -func (s DescribeSecurityGroupsOutput) String() string { - return awsutil.Prettify(s) +// SetStatus sets the Status field's value. +func (s *InstanceNetworkInterface) SetStatus(v string) *InstanceNetworkInterface { + s.Status = &v + return s } -// GoString returns the string representation -func (s DescribeSecurityGroupsOutput) GoString() string { - return s.String() +// SetSubnetId sets the SubnetId field's value. +func (s *InstanceNetworkInterface) SetSubnetId(v string) *InstanceNetworkInterface { + s.SubnetId = &v + return s } -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *DescribeSecurityGroupsOutput) SetSecurityGroups(v []*SecurityGroup) *DescribeSecurityGroupsOutput { - s.SecurityGroups = v +// SetVpcId sets the VpcId field's value. +func (s *InstanceNetworkInterface) SetVpcId(v string) *InstanceNetworkInterface { + s.VpcId = &v return s } -// Contains the parameters for DescribeSnapshotAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttributeRequest -type DescribeSnapshotAttributeInput struct { +// Describes association information for an Elastic IP address (IPv4). +type InstanceNetworkInterfaceAssociation struct { _ struct{} `type:"structure"` - // The snapshot attribute you would like to view. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"SnapshotAttributeName"` + // The ID of the owner of the Elastic IP address. + IpOwnerId *string `locationName:"ipOwnerId" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The public DNS name. + PublicDnsName *string `locationName:"publicDnsName" type:"string"` - // The ID of the EBS snapshot. - // - // SnapshotId is a required field - SnapshotId *string `type:"string" required:"true"` + // The public IP address or Elastic IP address bound to the network interface. + PublicIp *string `locationName:"publicIp" type:"string"` } // String returns the string representation -func (s DescribeSnapshotAttributeInput) String() string { +func (s InstanceNetworkInterfaceAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSnapshotAttributeInput) GoString() string { +func (s InstanceNetworkInterfaceAssociation) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSnapshotAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSnapshotAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.SnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SnapshotId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeSnapshotAttributeInput) SetAttribute(v string) *DescribeSnapshotAttributeInput { - s.Attribute = &v +// SetIpOwnerId sets the IpOwnerId field's value. +func (s *InstanceNetworkInterfaceAssociation) SetIpOwnerId(v string) *InstanceNetworkInterfaceAssociation { + s.IpOwnerId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSnapshotAttributeInput) SetDryRun(v bool) *DescribeSnapshotAttributeInput { - s.DryRun = &v +// SetPublicDnsName sets the PublicDnsName field's value. +func (s *InstanceNetworkInterfaceAssociation) SetPublicDnsName(v string) *InstanceNetworkInterfaceAssociation { + s.PublicDnsName = &v return s } -// SetSnapshotId sets the SnapshotId field's value. -func (s *DescribeSnapshotAttributeInput) SetSnapshotId(v string) *DescribeSnapshotAttributeInput { - s.SnapshotId = &v +// SetPublicIp sets the PublicIp field's value. +func (s *InstanceNetworkInterfaceAssociation) SetPublicIp(v string) *InstanceNetworkInterfaceAssociation { + s.PublicIp = &v return s } -// Contains the output of DescribeSnapshotAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttributeResult -type DescribeSnapshotAttributeOutput struct { +// Describes a network interface attachment. +type InstanceNetworkInterfaceAttachment struct { _ struct{} `type:"structure"` - // A list of permissions for creating volumes from the snapshot. - CreateVolumePermissions []*CreateVolumePermission `locationName:"createVolumePermission" locationNameList:"item" type:"list"` + // The time stamp when the attachment initiated. + AttachTime *time.Time `locationName:"attachTime" type:"timestamp"` - // A list of product codes. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + // The ID of the network interface attachment. + AttachmentId *string `locationName:"attachmentId" type:"string"` - // The ID of the EBS snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` + // Indicates whether the network interface is deleted when the instance is terminated. + DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` + + // The index of the device on the instance for the network interface attachment. + DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` + + // The attachment state. + Status *string `locationName:"status" type:"string" enum:"AttachmentStatus"` } // String returns the string representation -func (s DescribeSnapshotAttributeOutput) String() string { +func (s InstanceNetworkInterfaceAttachment) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSnapshotAttributeOutput) GoString() string { +func (s InstanceNetworkInterfaceAttachment) GoString() string { return s.String() } -// SetCreateVolumePermissions sets the CreateVolumePermissions field's value. -func (s *DescribeSnapshotAttributeOutput) SetCreateVolumePermissions(v []*CreateVolumePermission) *DescribeSnapshotAttributeOutput { - s.CreateVolumePermissions = v +// SetAttachTime sets the AttachTime field's value. +func (s *InstanceNetworkInterfaceAttachment) SetAttachTime(v time.Time) *InstanceNetworkInterfaceAttachment { + s.AttachTime = &v return s } -// SetProductCodes sets the ProductCodes field's value. -func (s *DescribeSnapshotAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeSnapshotAttributeOutput { - s.ProductCodes = v +// SetAttachmentId sets the AttachmentId field's value. +func (s *InstanceNetworkInterfaceAttachment) SetAttachmentId(v string) *InstanceNetworkInterfaceAttachment { + s.AttachmentId = &v return s } -// SetSnapshotId sets the SnapshotId field's value. -func (s *DescribeSnapshotAttributeOutput) SetSnapshotId(v string) *DescribeSnapshotAttributeOutput { - s.SnapshotId = &v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *InstanceNetworkInterfaceAttachment) SetDeleteOnTermination(v bool) *InstanceNetworkInterfaceAttachment { + s.DeleteOnTermination = &v return s } -// Contains the parameters for DescribeSnapshots. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotsRequest -type DescribeSnapshotsInput struct { +// SetDeviceIndex sets the DeviceIndex field's value. +func (s *InstanceNetworkInterfaceAttachment) SetDeviceIndex(v int64) *InstanceNetworkInterfaceAttachment { + s.DeviceIndex = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *InstanceNetworkInterfaceAttachment) SetStatus(v string) *InstanceNetworkInterfaceAttachment { + s.Status = &v + return s +} + +// Describes a network interface. +type InstanceNetworkInterfaceSpecification struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // Indicates whether to assign a public IPv4 address to an instance you launch + // in a VPC. The public IP address can only be assigned to a network interface + // for eth0, and can only be assigned to a new network interface, not an existing + // one. You cannot specify more than one network interface in the request. If + // launching into a default subnet, the default value is true. + AssociatePublicIpAddress *bool `locationName:"associatePublicIpAddress" type:"boolean"` - // One or more filters. - // - // * description - A description of the snapshot. - // - // * owner-alias - Value from an Amazon-maintained list (amazon | aws-marketplace - // | microsoft) of snapshot owners. Not to be confused with the user-configured - // AWS account alias, which is set from the IAM consolew. - // - // * owner-id - The ID of the AWS account that owns the snapshot. - // - // * progress - The progress of the snapshot, as a percentage (for example, - // 80%). - // - // * snapshot-id - The snapshot ID. - // - // * start-time - The time stamp when the snapshot was initiated. - // - // * status - The status of the snapshot (pending | completed | error). - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. + // If set to true, the interface is deleted when the instance is terminated. + // You can specify true only if creating a new network interface when launching + // an instance. + DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` + + // The description of the network interface. Applies only if creating a network + // interface when launching an instance. + Description *string `locationName:"description" type:"string"` + + // The position of the network interface in the attachment order. A primary + // network interface has a device index of 0. // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. + // If you specify a network interface when launching an instance, you must specify + // the device index. + DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` + + // The IDs of the security groups for the network interface. Applies only if + // creating a network interface when launching an instance. + Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + + // The type of network interface. To create an Elastic Fabric Adapter (EFA), + // specify efa. For more information, see Elastic Fabric Adapter (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) + // in the Amazon Elastic Compute Cloud User Guide. // - // * volume-id - The ID of the volume the snapshot is for. + // If you are not creating an EFA, specify interface or omit this parameter. // - // * volume-size - The size of the volume, in GiB. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // Valid values: interface | efa + InterfaceType *string `type:"string"` - // The maximum number of snapshot results returned by DescribeSnapshots in paginated - // output. When this parameter is used, DescribeSnapshots only returns MaxResults - // results in a single page along with a NextToken response element. The remaining - // results of the initial request can be seen by sending another DescribeSnapshots - // request with the returned NextToken value. This value can be between 5 and - // 1000; if MaxResults is given a value larger than 1000, only 1000 results - // are returned. If this parameter is not used, then DescribeSnapshots returns - // all results. You cannot specify this parameter and the snapshot IDs parameter - // in the same request. - MaxResults *int64 `type:"integer"` + // A number of IPv6 addresses to assign to the network interface. Amazon EC2 + // chooses the IPv6 addresses from the range of the subnet. You cannot specify + // this option and the option to assign specific IPv6 addresses in the same + // request. You can specify this option if you've specified a minimum number + // of instances to launch. + Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` - // The NextToken value returned from a previous paginated DescribeSnapshots - // request where MaxResults was used and the results exceeded the value of that - // parameter. Pagination continues from the end of the previous results that - // returned the NextToken value. This value is null when there are no more results - // to return. - NextToken *string `type:"string"` + // One or more IPv6 addresses to assign to the network interface. You cannot + // specify this option and the option to assign a number of IPv6 addresses in + // the same request. You cannot specify this option if you've specified a minimum + // number of instances to launch. + Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6AddressesSet" queryName:"Ipv6Addresses" locationNameList:"item" type:"list"` - // Returns the snapshots owned by the specified owner. Multiple owners can be - // specified. - OwnerIds []*string `locationName:"Owner" locationNameList:"Owner" type:"list"` + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - // One or more AWS accounts IDs that can create volumes from the snapshot. - RestorableByUserIds []*string `locationName:"RestorableBy" type:"list"` + // The private IPv4 address of the network interface. Applies only if creating + // a network interface when launching an instance. You cannot specify this option + // if you're launching more than one instance in a RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) + // request. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - // One or more snapshot IDs. - // - // Default: Describes snapshots for which you have launch permissions. - SnapshotIds []*string `locationName:"SnapshotId" locationNameList:"SnapshotId" type:"list"` + // One or more private IPv4 addresses to assign to the network interface. Only + // one private IPv4 address can be designated as primary. You cannot specify + // this option if you're launching more than one instance in a RunInstances + // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) + // request. + PrivateIpAddresses []*PrivateIpAddressSpecification `locationName:"privateIpAddressesSet" queryName:"PrivateIpAddresses" locationNameList:"item" type:"list"` + + // The number of secondary private IPv4 addresses. You can't specify this option + // and specify more than one private IP address using the private IP addresses + // option. You cannot specify this option if you're launching more than one + // instance in a RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) + // request. + SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` + + // The ID of the subnet associated with the network interface. Applies only + // if creating a network interface when launching an instance. + SubnetId *string `locationName:"subnetId" type:"string"` } // String returns the string representation -func (s DescribeSnapshotsInput) String() string { +func (s InstanceNetworkInterfaceSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSnapshotsInput) GoString() string { +func (s InstanceNetworkInterfaceSpecification) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSnapshotsInput) SetDryRun(v bool) *DescribeSnapshotsInput { - s.DryRun = &v +// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. +func (s *InstanceNetworkInterfaceSpecification) SetAssociatePublicIpAddress(v bool) *InstanceNetworkInterfaceSpecification { + s.AssociatePublicIpAddress = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeSnapshotsInput) SetFilters(v []*Filter) *DescribeSnapshotsInput { - s.Filters = v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *InstanceNetworkInterfaceSpecification) SetDeleteOnTermination(v bool) *InstanceNetworkInterfaceSpecification { + s.DeleteOnTermination = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSnapshotsInput) SetMaxResults(v int64) *DescribeSnapshotsInput { - s.MaxResults = &v +// SetDescription sets the Description field's value. +func (s *InstanceNetworkInterfaceSpecification) SetDescription(v string) *InstanceNetworkInterfaceSpecification { + s.Description = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSnapshotsInput) SetNextToken(v string) *DescribeSnapshotsInput { - s.NextToken = &v +// SetDeviceIndex sets the DeviceIndex field's value. +func (s *InstanceNetworkInterfaceSpecification) SetDeviceIndex(v int64) *InstanceNetworkInterfaceSpecification { + s.DeviceIndex = &v return s } -// SetOwnerIds sets the OwnerIds field's value. -func (s *DescribeSnapshotsInput) SetOwnerIds(v []*string) *DescribeSnapshotsInput { - s.OwnerIds = v +// SetGroups sets the Groups field's value. +func (s *InstanceNetworkInterfaceSpecification) SetGroups(v []*string) *InstanceNetworkInterfaceSpecification { + s.Groups = v return s } -// SetRestorableByUserIds sets the RestorableByUserIds field's value. -func (s *DescribeSnapshotsInput) SetRestorableByUserIds(v []*string) *DescribeSnapshotsInput { - s.RestorableByUserIds = v +// SetInterfaceType sets the InterfaceType field's value. +func (s *InstanceNetworkInterfaceSpecification) SetInterfaceType(v string) *InstanceNetworkInterfaceSpecification { + s.InterfaceType = &v return s } -// SetSnapshotIds sets the SnapshotIds field's value. -func (s *DescribeSnapshotsInput) SetSnapshotIds(v []*string) *DescribeSnapshotsInput { - s.SnapshotIds = v +// SetIpv6AddressCount sets the Ipv6AddressCount field's value. +func (s *InstanceNetworkInterfaceSpecification) SetIpv6AddressCount(v int64) *InstanceNetworkInterfaceSpecification { + s.Ipv6AddressCount = &v return s } -// Contains the output of DescribeSnapshots. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotsResult -type DescribeSnapshotsOutput struct { - _ struct{} `type:"structure"` - - // The NextToken value to include in a future DescribeSnapshots request. When - // the results of a DescribeSnapshots request exceed MaxResults, this value - // can be used to retrieve the next page of results. This value is null when - // there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` +// SetIpv6Addresses sets the Ipv6Addresses field's value. +func (s *InstanceNetworkInterfaceSpecification) SetIpv6Addresses(v []*InstanceIpv6Address) *InstanceNetworkInterfaceSpecification { + s.Ipv6Addresses = v + return s +} - // Information about the snapshots. - Snapshots []*Snapshot `locationName:"snapshotSet" locationNameList:"item" type:"list"` +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *InstanceNetworkInterfaceSpecification) SetNetworkInterfaceId(v string) *InstanceNetworkInterfaceSpecification { + s.NetworkInterfaceId = &v + return s } -// String returns the string representation -func (s DescribeSnapshotsOutput) String() string { - return awsutil.Prettify(s) +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *InstanceNetworkInterfaceSpecification) SetPrivateIpAddress(v string) *InstanceNetworkInterfaceSpecification { + s.PrivateIpAddress = &v + return s } -// GoString returns the string representation -func (s DescribeSnapshotsOutput) GoString() string { - return s.String() +// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. +func (s *InstanceNetworkInterfaceSpecification) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *InstanceNetworkInterfaceSpecification { + s.PrivateIpAddresses = v + return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSnapshotsOutput) SetNextToken(v string) *DescribeSnapshotsOutput { - s.NextToken = &v +// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. +func (s *InstanceNetworkInterfaceSpecification) SetSecondaryPrivateIpAddressCount(v int64) *InstanceNetworkInterfaceSpecification { + s.SecondaryPrivateIpAddressCount = &v return s } -// SetSnapshots sets the Snapshots field's value. -func (s *DescribeSnapshotsOutput) SetSnapshots(v []*Snapshot) *DescribeSnapshotsOutput { - s.Snapshots = v +// SetSubnetId sets the SubnetId field's value. +func (s *InstanceNetworkInterfaceSpecification) SetSubnetId(v string) *InstanceNetworkInterfaceSpecification { + s.SubnetId = &v return s } -// Contains the parameters for DescribeSpotDatafeedSubscription. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscriptionRequest -type DescribeSpotDatafeedSubscriptionInput struct { +// Describes a private IPv4 address. +type InstancePrivateIpAddress struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The association information for an Elastic IP address for the network interface. + Association *InstanceNetworkInterfaceAssociation `locationName:"association" type:"structure"` + + // Indicates whether this IPv4 address is the primary private IP address of + // the network interface. + Primary *bool `locationName:"primary" type:"boolean"` + + // The private IPv4 DNS name. + PrivateDnsName *string `locationName:"privateDnsName" type:"string"` + + // The private IPv4 address of the network interface. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` } // String returns the string representation -func (s DescribeSpotDatafeedSubscriptionInput) String() string { +func (s InstancePrivateIpAddress) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotDatafeedSubscriptionInput) GoString() string { +func (s InstancePrivateIpAddress) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotDatafeedSubscriptionInput) SetDryRun(v bool) *DescribeSpotDatafeedSubscriptionInput { - s.DryRun = &v +// SetAssociation sets the Association field's value. +func (s *InstancePrivateIpAddress) SetAssociation(v *InstanceNetworkInterfaceAssociation) *InstancePrivateIpAddress { + s.Association = v return s } -// Contains the output of DescribeSpotDatafeedSubscription. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscriptionResult -type DescribeSpotDatafeedSubscriptionOutput struct { - _ struct{} `type:"structure"` - - // The Spot instance data feed subscription. - SpotDatafeedSubscription *SpotDatafeedSubscription `locationName:"spotDatafeedSubscription" type:"structure"` -} - -// String returns the string representation -func (s DescribeSpotDatafeedSubscriptionOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeSpotDatafeedSubscriptionOutput) GoString() string { - return s.String() +// SetPrimary sets the Primary field's value. +func (s *InstancePrivateIpAddress) SetPrimary(v bool) *InstancePrivateIpAddress { + s.Primary = &v + return s } -// SetSpotDatafeedSubscription sets the SpotDatafeedSubscription field's value. -func (s *DescribeSpotDatafeedSubscriptionOutput) SetSpotDatafeedSubscription(v *SpotDatafeedSubscription) *DescribeSpotDatafeedSubscriptionOutput { - s.SpotDatafeedSubscription = v +// SetPrivateDnsName sets the PrivateDnsName field's value. +func (s *InstancePrivateIpAddress) SetPrivateDnsName(v string) *InstancePrivateIpAddress { + s.PrivateDnsName = &v return s } -// Contains the parameters for DescribeSpotFleetInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstancesRequest -type DescribeSpotFleetInstancesInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *InstancePrivateIpAddress) SetPrivateIpAddress(v string) *InstancePrivateIpAddress { + s.PrivateIpAddress = &v + return s +} - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" type:"integer"` +// The instance details to specify which volumes should be snapshotted. +type InstanceSpecification struct { + _ struct{} `type:"structure"` - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` + // Excludes the root volume from being snapshotted. + ExcludeBootVolume *bool `type:"boolean"` - // The ID of the Spot fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + // The instance to specify which volumes should be snapshotted. + InstanceId *string `type:"string"` } // String returns the string representation -func (s DescribeSpotFleetInstancesInput) String() string { +func (s InstanceSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotFleetInstancesInput) GoString() string { +func (s InstanceSpecification) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSpotFleetInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSpotFleetInstancesInput"} - if s.SpotFleetRequestId == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetExcludeBootVolume sets the ExcludeBootVolume field's value. +func (s *InstanceSpecification) SetExcludeBootVolume(v bool) *InstanceSpecification { + s.ExcludeBootVolume = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotFleetInstancesInput) SetDryRun(v bool) *DescribeSpotFleetInstancesInput { - s.DryRun = &v +// SetInstanceId sets the InstanceId field's value. +func (s *InstanceSpecification) SetInstanceId(v string) *InstanceSpecification { + s.InstanceId = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotFleetInstancesInput) SetMaxResults(v int64) *DescribeSpotFleetInstancesInput { - s.MaxResults = &v - return s +// Describes the current state of an instance. +type InstanceState struct { + _ struct{} `type:"structure"` + + // The state of the instance as a 16-bit unsigned integer. + // + // The high byte is all of the bits between 2^8 and (2^16)-1, which equals decimal + // values between 256 and 65,535. These numerical values are used for internal + // purposes and should be ignored. + // + // The low byte is all of the bits between 2^0 and (2^8)-1, which equals decimal + // values between 0 and 255. + // + // The valid values for instance-state-code will all be in the range of the + // low byte and they are: + // + // * 0 : pending + // + // * 16 : running + // + // * 32 : shutting-down + // + // * 48 : terminated + // + // * 64 : stopping + // + // * 80 : stopped + // + // You can ignore the high byte value by zeroing out all of the bits above 2^8 + // or 256 in decimal. + Code *int64 `locationName:"code" type:"integer"` + + // The current state of the instance. + Name *string `locationName:"name" type:"string" enum:"InstanceStateName"` } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetInstancesInput) SetNextToken(v string) *DescribeSpotFleetInstancesInput { - s.NextToken = &v +// String returns the string representation +func (s InstanceState) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s InstanceState) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *InstanceState) SetCode(v int64) *InstanceState { + s.Code = &v return s } -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *DescribeSpotFleetInstancesInput) SetSpotFleetRequestId(v string) *DescribeSpotFleetInstancesInput { - s.SpotFleetRequestId = &v +// SetName sets the Name field's value. +func (s *InstanceState) SetName(v string) *InstanceState { + s.Name = &v return s } -// Contains the output of DescribeSpotFleetInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstancesResponse -type DescribeSpotFleetInstancesOutput struct { +// Describes an instance state change. +type InstanceStateChange struct { _ struct{} `type:"structure"` - // The running instances. Note that this list is refreshed periodically and - // might be out of date. - // - // ActiveInstances is a required field - ActiveInstances []*ActiveInstance `locationName:"activeInstanceSet" locationNameList:"item" type:"list" required:"true"` + // The current state of the instance. + CurrentState *InstanceState `locationName:"currentState" type:"structure"` - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` - // The ID of the Spot fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + // The previous state of the instance. + PreviousState *InstanceState `locationName:"previousState" type:"structure"` } // String returns the string representation -func (s DescribeSpotFleetInstancesOutput) String() string { +func (s InstanceStateChange) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotFleetInstancesOutput) GoString() string { +func (s InstanceStateChange) GoString() string { return s.String() } -// SetActiveInstances sets the ActiveInstances field's value. -func (s *DescribeSpotFleetInstancesOutput) SetActiveInstances(v []*ActiveInstance) *DescribeSpotFleetInstancesOutput { - s.ActiveInstances = v +// SetCurrentState sets the CurrentState field's value. +func (s *InstanceStateChange) SetCurrentState(v *InstanceState) *InstanceStateChange { + s.CurrentState = v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetInstancesOutput) SetNextToken(v string) *DescribeSpotFleetInstancesOutput { - s.NextToken = &v +// SetInstanceId sets the InstanceId field's value. +func (s *InstanceStateChange) SetInstanceId(v string) *InstanceStateChange { + s.InstanceId = &v return s } -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *DescribeSpotFleetInstancesOutput) SetSpotFleetRequestId(v string) *DescribeSpotFleetInstancesOutput { - s.SpotFleetRequestId = &v +// SetPreviousState sets the PreviousState field's value. +func (s *InstanceStateChange) SetPreviousState(v *InstanceState) *InstanceStateChange { + s.PreviousState = v return s } -// Contains the parameters for DescribeSpotFleetRequestHistory. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistoryRequest -type DescribeSpotFleetRequestHistoryInput struct { +// Describes the status of an instance. +type InstanceStatus struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The Availability Zone of the instance. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The type of events to describe. By default, all events are described. - EventType *string `locationName:"eventType" type:"string" enum:"EventType"` + // Any scheduled events associated with the instance. + Events []*InstanceStatusEvent `locationName:"eventsSet" locationNameList:"item" type:"list"` - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" type:"integer"` + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` + // The intended state of the instance. DescribeInstanceStatus requires that + // an instance be in the running state. + InstanceState *InstanceState `locationName:"instanceState" type:"structure"` - // The ID of the Spot fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + // Reports impaired functionality that stems from issues internal to the instance, + // such as impaired reachability. + InstanceStatus *InstanceStatusSummary `locationName:"instanceStatus" type:"structure"` - // The starting date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // - // StartTime is a required field - StartTime *time.Time `locationName:"startTime" type:"timestamp" timestampFormat:"iso8601" required:"true"` + // Reports impaired functionality that stems from issues related to the systems + // that support an instance, such as hardware failures and network connectivity + // problems. + SystemStatus *InstanceStatusSummary `locationName:"systemStatus" type:"structure"` } // String returns the string representation -func (s DescribeSpotFleetRequestHistoryInput) String() string { +func (s InstanceStatus) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotFleetRequestHistoryInput) GoString() string { +func (s InstanceStatus) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeSpotFleetRequestHistoryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeSpotFleetRequestHistoryInput"} - if s.SpotFleetRequestId == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) - } - if s.StartTime == nil { - invalidParams.Add(request.NewErrParamRequired("StartTime")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetDryRun(v bool) *DescribeSpotFleetRequestHistoryInput { - s.DryRun = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *InstanceStatus) SetAvailabilityZone(v string) *InstanceStatus { + s.AvailabilityZone = &v return s } -// SetEventType sets the EventType field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetEventType(v string) *DescribeSpotFleetRequestHistoryInput { - s.EventType = &v +// SetEvents sets the Events field's value. +func (s *InstanceStatus) SetEvents(v []*InstanceStatusEvent) *InstanceStatus { + s.Events = v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetMaxResults(v int64) *DescribeSpotFleetRequestHistoryInput { - s.MaxResults = &v +// SetInstanceId sets the InstanceId field's value. +func (s *InstanceStatus) SetInstanceId(v string) *InstanceStatus { + s.InstanceId = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetNextToken(v string) *DescribeSpotFleetRequestHistoryInput { - s.NextToken = &v +// SetInstanceState sets the InstanceState field's value. +func (s *InstanceStatus) SetInstanceState(v *InstanceState) *InstanceStatus { + s.InstanceState = v return s } -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetSpotFleetRequestId(v string) *DescribeSpotFleetRequestHistoryInput { - s.SpotFleetRequestId = &v +// SetInstanceStatus sets the InstanceStatus field's value. +func (s *InstanceStatus) SetInstanceStatus(v *InstanceStatusSummary) *InstanceStatus { + s.InstanceStatus = v return s } -// SetStartTime sets the StartTime field's value. -func (s *DescribeSpotFleetRequestHistoryInput) SetStartTime(v time.Time) *DescribeSpotFleetRequestHistoryInput { - s.StartTime = &v +// SetSystemStatus sets the SystemStatus field's value. +func (s *InstanceStatus) SetSystemStatus(v *InstanceStatusSummary) *InstanceStatus { + s.SystemStatus = v return s } -// Contains the output of DescribeSpotFleetRequestHistory. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistoryResponse -type DescribeSpotFleetRequestHistoryOutput struct { +// Describes the instance status. +type InstanceStatusDetails struct { _ struct{} `type:"structure"` - // Information about the events in the history of the Spot fleet request. - // - // HistoryRecords is a required field - HistoryRecords []*HistoryRecord `locationName:"historyRecordSet" locationNameList:"item" type:"list" required:"true"` - - // The last date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // All records up to this time were retrieved. - // - // If nextToken indicates that there are more results, this value is not present. - // - // LastEvaluatedTime is a required field - LastEvaluatedTime *time.Time `locationName:"lastEvaluatedTime" type:"timestamp" timestampFormat:"iso8601" required:"true"` - - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The time when a status check failed. For an instance that was launched and + // impaired, this is the time when the instance was launched. + ImpairedSince *time.Time `locationName:"impairedSince" type:"timestamp"` - // The ID of the Spot fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + // The type of instance status. + Name *string `locationName:"name" type:"string" enum:"StatusName"` - // The starting date and time for the events, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // - // StartTime is a required field - StartTime *time.Time `locationName:"startTime" type:"timestamp" timestampFormat:"iso8601" required:"true"` + // The status. + Status *string `locationName:"status" type:"string" enum:"StatusType"` } // String returns the string representation -func (s DescribeSpotFleetRequestHistoryOutput) String() string { +func (s InstanceStatusDetails) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotFleetRequestHistoryOutput) GoString() string { +func (s InstanceStatusDetails) GoString() string { return s.String() } -// SetHistoryRecords sets the HistoryRecords field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetHistoryRecords(v []*HistoryRecord) *DescribeSpotFleetRequestHistoryOutput { - s.HistoryRecords = v +// SetImpairedSince sets the ImpairedSince field's value. +func (s *InstanceStatusDetails) SetImpairedSince(v time.Time) *InstanceStatusDetails { + s.ImpairedSince = &v return s } -// SetLastEvaluatedTime sets the LastEvaluatedTime field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetLastEvaluatedTime(v time.Time) *DescribeSpotFleetRequestHistoryOutput { - s.LastEvaluatedTime = &v +// SetName sets the Name field's value. +func (s *InstanceStatusDetails) SetName(v string) *InstanceStatusDetails { + s.Name = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetNextToken(v string) *DescribeSpotFleetRequestHistoryOutput { - s.NextToken = &v +// SetStatus sets the Status field's value. +func (s *InstanceStatusDetails) SetStatus(v string) *InstanceStatusDetails { + s.Status = &v return s } -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetSpotFleetRequestId(v string) *DescribeSpotFleetRequestHistoryOutput { - s.SpotFleetRequestId = &v - return s -} +// Describes a scheduled event for an instance. +type InstanceStatusEvent struct { + _ struct{} `type:"structure"` -// SetStartTime sets the StartTime field's value. -func (s *DescribeSpotFleetRequestHistoryOutput) SetStartTime(v time.Time) *DescribeSpotFleetRequestHistoryOutput { - s.StartTime = &v - return s -} + // The event code. + Code *string `locationName:"code" type:"string" enum:"EventCode"` -// Contains the parameters for DescribeSpotFleetRequests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestsRequest -type DescribeSpotFleetRequestsInput struct { - _ struct{} `type:"structure"` + // A description of the event. + // + // After a scheduled event is completed, it can still be described for up to + // a week. If the event has been completed, this description starts with the + // following text: [Completed]. + Description *string `locationName:"description" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ID of the event. + InstanceEventId *string `locationName:"instanceEventId" type:"string"` - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" type:"integer"` + // The latest scheduled end time for the event. + NotAfter *time.Time `locationName:"notAfter" type:"timestamp"` - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` + // The earliest scheduled start time for the event. + NotBefore *time.Time `locationName:"notBefore" type:"timestamp"` - // The IDs of the Spot fleet requests. - SpotFleetRequestIds []*string `locationName:"spotFleetRequestId" locationNameList:"item" type:"list"` + // The deadline for starting the event. + NotBeforeDeadline *time.Time `locationName:"notBeforeDeadline" type:"timestamp"` } // String returns the string representation -func (s DescribeSpotFleetRequestsInput) String() string { +func (s InstanceStatusEvent) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotFleetRequestsInput) GoString() string { +func (s InstanceStatusEvent) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotFleetRequestsInput) SetDryRun(v bool) *DescribeSpotFleetRequestsInput { - s.DryRun = &v +// SetCode sets the Code field's value. +func (s *InstanceStatusEvent) SetCode(v string) *InstanceStatusEvent { + s.Code = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotFleetRequestsInput) SetMaxResults(v int64) *DescribeSpotFleetRequestsInput { - s.MaxResults = &v +// SetDescription sets the Description field's value. +func (s *InstanceStatusEvent) SetDescription(v string) *InstanceStatusEvent { + s.Description = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetRequestsInput) SetNextToken(v string) *DescribeSpotFleetRequestsInput { - s.NextToken = &v +// SetInstanceEventId sets the InstanceEventId field's value. +func (s *InstanceStatusEvent) SetInstanceEventId(v string) *InstanceStatusEvent { + s.InstanceEventId = &v return s } -// SetSpotFleetRequestIds sets the SpotFleetRequestIds field's value. -func (s *DescribeSpotFleetRequestsInput) SetSpotFleetRequestIds(v []*string) *DescribeSpotFleetRequestsInput { - s.SpotFleetRequestIds = v +// SetNotAfter sets the NotAfter field's value. +func (s *InstanceStatusEvent) SetNotAfter(v time.Time) *InstanceStatusEvent { + s.NotAfter = &v return s } -// Contains the output of DescribeSpotFleetRequests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestsResponse -type DescribeSpotFleetRequestsOutput struct { +// SetNotBefore sets the NotBefore field's value. +func (s *InstanceStatusEvent) SetNotBefore(v time.Time) *InstanceStatusEvent { + s.NotBefore = &v + return s +} + +// SetNotBeforeDeadline sets the NotBeforeDeadline field's value. +func (s *InstanceStatusEvent) SetNotBeforeDeadline(v time.Time) *InstanceStatusEvent { + s.NotBeforeDeadline = &v + return s +} + +// Describes the status of an instance. +type InstanceStatusSummary struct { _ struct{} `type:"structure"` - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The system instance health or application instance health. + Details []*InstanceStatusDetails `locationName:"details" locationNameList:"item" type:"list"` - // Information about the configuration of your Spot fleet. - // - // SpotFleetRequestConfigs is a required field - SpotFleetRequestConfigs []*SpotFleetRequestConfig `locationName:"spotFleetRequestConfigSet" locationNameList:"item" type:"list" required:"true"` + // The status. + Status *string `locationName:"status" type:"string" enum:"SummaryStatus"` } // String returns the string representation -func (s DescribeSpotFleetRequestsOutput) String() string { +func (s InstanceStatusSummary) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotFleetRequestsOutput) GoString() string { +func (s InstanceStatusSummary) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotFleetRequestsOutput) SetNextToken(v string) *DescribeSpotFleetRequestsOutput { - s.NextToken = &v +// SetDetails sets the Details field's value. +func (s *InstanceStatusSummary) SetDetails(v []*InstanceStatusDetails) *InstanceStatusSummary { + s.Details = v return s } -// SetSpotFleetRequestConfigs sets the SpotFleetRequestConfigs field's value. -func (s *DescribeSpotFleetRequestsOutput) SetSpotFleetRequestConfigs(v []*SpotFleetRequestConfig) *DescribeSpotFleetRequestsOutput { - s.SpotFleetRequestConfigs = v +// SetStatus sets the Status field's value. +func (s *InstanceStatusSummary) SetStatus(v string) *InstanceStatusSummary { + s.Status = &v return s } -// Contains the parameters for DescribeSpotInstanceRequests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequestsRequest -type DescribeSpotInstanceRequestsInput struct { +// Describes the disks that are available for the instance type. +type InstanceStorageInfo struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * availability-zone-group - The Availability Zone group. - // - // * create-time - The time stamp when the Spot instance request was created. - // - // * fault-code - The fault code related to the request. - // - // * fault-message - The fault message related to the request. - // - // * instance-id - The ID of the instance that fulfilled the request. - // - // * launch-group - The Spot instance launch group. - // - // * launch.block-device-mapping.delete-on-termination - Indicates whether - // the Amazon EBS volume is deleted on instance termination. - // - // * launch.block-device-mapping.device-name - The device name for the Amazon - // EBS volume (for example, /dev/sdh). - // - // * launch.block-device-mapping.snapshot-id - The ID of the snapshot used - // for the Amazon EBS volume. - // - // * launch.block-device-mapping.volume-size - The size of the Amazon EBS - // volume, in GiB. - // - // * launch.block-device-mapping.volume-type - The type of the Amazon EBS - // volume: gp2 for General Purpose SSD, io1 for Provisioned IOPS SSD, st1 - // for Throughput Optimized HDD, sc1for Cold HDD, or standard for Magnetic. - // - // * launch.group-id - The security group for the instance. - // - // * launch.image-id - The ID of the AMI. - // - // * launch.instance-type - The type of instance (for example, m3.medium). - // - // * launch.kernel-id - The kernel ID. - // - // * launch.key-name - The name of the key pair the instance launched with. - // - // * launch.monitoring-enabled - Whether monitoring is enabled for the Spot - // instance. - // - // * launch.ramdisk-id - The RAM disk ID. - // - // * network-interface.network-interface-id - The ID of the network interface. - // - // * network-interface.device-index - The index of the device for the network - // interface attachment on the instance. - // - // * network-interface.subnet-id - The ID of the subnet for the instance. - // - // * network-interface.description - A description of the network interface. - // - // * network-interface.private-ip-address - The primary private IP address - // of the network interface. - // - // * network-interface.delete-on-termination - Indicates whether the network - // interface is deleted when the instance is terminated. - // - // * network-interface.group-id - The ID of the security group associated - // with the network interface. - // - // * network-interface.group-name - The name of the security group associated - // with the network interface. - // - // * network-interface.addresses.primary - Indicates whether the IP address - // is the primary private IP address. - // - // * product-description - The product description associated with the instance - // (Linux/UNIX | Windows). - // - // * spot-instance-request-id - The Spot instance request ID. - // - // * spot-price - The maximum hourly price for any Spot instance launched - // to fulfill the request. - // - // * state - The state of the Spot instance request (open | active | closed - // | cancelled | failed). Spot bid status information can help you track - // your Amazon EC2 Spot instance requests. For more information, see Spot - // Bid Status (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // * status-code - The short code describing the most recent evaluation of - // your Spot instance request. - // - // * status-message - The message explaining the status of the Spot instance - // request. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * type - The type of Spot instance request (one-time | persistent). - // - // * launched-availability-zone - The Availability Zone in which the bid - // is launched. - // - // * valid-from - The start date of the request. - // - // * valid-until - The end date of the request. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // Array describing the disks that are available for the instance type. + Disks []*DiskInfo `locationName:"disks" locationNameList:"item" type:"list"` - // One or more Spot instance request IDs. - SpotInstanceRequestIds []*string `locationName:"SpotInstanceRequestId" locationNameList:"SpotInstanceRequestId" type:"list"` + // The total size of the disks, in GiB. + TotalSizeInGB *int64 `locationName:"totalSizeInGB" type:"long"` } // String returns the string representation -func (s DescribeSpotInstanceRequestsInput) String() string { +func (s InstanceStorageInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotInstanceRequestsInput) GoString() string { +func (s InstanceStorageInfo) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotInstanceRequestsInput) SetDryRun(v bool) *DescribeSpotInstanceRequestsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeSpotInstanceRequestsInput) SetFilters(v []*Filter) *DescribeSpotInstanceRequestsInput { - s.Filters = v +// SetDisks sets the Disks field's value. +func (s *InstanceStorageInfo) SetDisks(v []*DiskInfo) *InstanceStorageInfo { + s.Disks = v return s } -// SetSpotInstanceRequestIds sets the SpotInstanceRequestIds field's value. -func (s *DescribeSpotInstanceRequestsInput) SetSpotInstanceRequestIds(v []*string) *DescribeSpotInstanceRequestsInput { - s.SpotInstanceRequestIds = v +// SetTotalSizeInGB sets the TotalSizeInGB field's value. +func (s *InstanceStorageInfo) SetTotalSizeInGB(v int64) *InstanceStorageInfo { + s.TotalSizeInGB = &v return s } -// Contains the output of DescribeSpotInstanceRequests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequestsResult -type DescribeSpotInstanceRequestsOutput struct { +// Describes the instance type. +type InstanceTypeInfo struct { _ struct{} `type:"structure"` - // One or more Spot instance requests. - SpotInstanceRequests []*SpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` -} + // Indicates whether auto recovery is supported. + AutoRecoverySupported *bool `locationName:"autoRecoverySupported" type:"boolean"` -// String returns the string representation -func (s DescribeSpotInstanceRequestsOutput) String() string { - return awsutil.Prettify(s) -} + // Indicates whether the instance is bare metal. + BareMetal *bool `locationName:"bareMetal" type:"boolean"` -// GoString returns the string representation -func (s DescribeSpotInstanceRequestsOutput) GoString() string { - return s.String() -} + // Indicates whether the instance type is a burstable performance instance type. + BurstablePerformanceSupported *bool `locationName:"burstablePerformanceSupported" type:"boolean"` -// SetSpotInstanceRequests sets the SpotInstanceRequests field's value. -func (s *DescribeSpotInstanceRequestsOutput) SetSpotInstanceRequests(v []*SpotInstanceRequest) *DescribeSpotInstanceRequestsOutput { - s.SpotInstanceRequests = v - return s -} + // Indicates whether the instance type is a current generation. + CurrentGeneration *bool `locationName:"currentGeneration" type:"boolean"` -// Contains the parameters for DescribeSpotPriceHistory. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistoryRequest -type DescribeSpotPriceHistoryInput struct { - _ struct{} `type:"structure"` + // Indicates whether Dedicated Hosts are supported on the instance type. + DedicatedHostsSupported *bool `locationName:"dedicatedHostsSupported" type:"boolean"` - // Filters the results by the specified Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + // Describes the Amazon EBS settings for the instance type. + EbsInfo *EbsInfo `locationName:"ebsInfo" type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // Describes the FPGA accelerator settings for the instance type. + FpgaInfo *FpgaInfo `locationName:"fpgaInfo" type:"structure"` - // The date and time, up to the current date, from which to stop retrieving - // the price history data, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - EndTime *time.Time `locationName:"endTime" type:"timestamp" timestampFormat:"iso8601"` + // Indicates whether the instance type is eligible for the free tier. + FreeTierEligible *bool `locationName:"freeTierEligible" type:"boolean"` - // One or more filters. - // - // * availability-zone - The Availability Zone for which prices should be - // returned. - // - // * instance-type - The type of instance (for example, m3.medium). - // - // * product-description - The product description for the Spot price (Linux/UNIX - // | SUSE Linux | Windows | Linux/UNIX (Amazon VPC) | SUSE Linux (Amazon - // VPC) | Windows (Amazon VPC)). - // - // * spot-price - The Spot price. The value must match exactly (or use wildcards; - // greater than or less than comparison is not supported). - // - // * timestamp - The timestamp of the Spot price history, in UTC format (for - // example, YYYY-MM-DDTHH:MM:SSZ). You can use wildcards (* and ?). Greater - // than or less than comparison is not supported. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // Describes the GPU accelerator settings for the instance type. + GpuInfo *GpuInfo `locationName:"gpuInfo" type:"structure"` + + // Indicates whether On-Demand hibernation is supported. + HibernationSupported *bool `locationName:"hibernationSupported" type:"boolean"` + + // Indicates the hypervisor used for the instance type. + Hypervisor *string `locationName:"hypervisor" type:"string" enum:"InstanceTypeHypervisor"` + + // Describes the disks for the instance type. + InstanceStorageInfo *InstanceStorageInfo `locationName:"instanceStorageInfo" type:"structure"` + + // Indicates whether instance storage is supported. + InstanceStorageSupported *bool `locationName:"instanceStorageSupported" type:"boolean"` - // Filters the results by the specified instance types. Note that T2 and HS1 - // instance types are not supported. - InstanceTypes []*string `locationName:"InstanceType" type:"list"` + // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) + // in the Amazon Elastic Compute Cloud User Guide. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - // The maximum number of results to return in a single call. Specify a value - // between 1 and 1000. The default value is 1000. To retrieve the remaining - // results, make another call with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" type:"integer"` + // Describes the memory for the instance type. + MemoryInfo *MemoryInfo `locationName:"memoryInfo" type:"structure"` - // The token for the next set of results. - NextToken *string `locationName:"nextToken" type:"string"` + // Describes the network settings for the instance type. + NetworkInfo *NetworkInfo `locationName:"networkInfo" type:"structure"` - // Filters the results by the specified basic product descriptions. - ProductDescriptions []*string `locationName:"ProductDescription" type:"list"` + // Describes the placement group settings for the instance type. + PlacementGroupInfo *PlacementGroupInfo `locationName:"placementGroupInfo" type:"structure"` - // The date and time, up to the past 90 days, from which to start retrieving - // the price history data, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - StartTime *time.Time `locationName:"startTime" type:"timestamp" timestampFormat:"iso8601"` + // Describes the processor. + ProcessorInfo *ProcessorInfo `locationName:"processorInfo" type:"structure"` + + // Indicates the supported root devices. + SupportedRootDevices []*string `locationName:"supportedRootDevices" locationNameList:"item" type:"list"` + + // Indicates whether the instance type is offered for spot or On-Demand. + SupportedUsageClasses []*string `locationName:"supportedUsageClasses" locationNameList:"item" type:"list"` + + // Describes the vCPU configurations for the instance type. + VCpuInfo *VCpuInfo `locationName:"vCpuInfo" type:"structure"` } // String returns the string representation -func (s DescribeSpotPriceHistoryInput) String() string { +func (s InstanceTypeInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSpotPriceHistoryInput) GoString() string { +func (s InstanceTypeInfo) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *DescribeSpotPriceHistoryInput) SetAvailabilityZone(v string) *DescribeSpotPriceHistoryInput { - s.AvailabilityZone = &v +// SetAutoRecoverySupported sets the AutoRecoverySupported field's value. +func (s *InstanceTypeInfo) SetAutoRecoverySupported(v bool) *InstanceTypeInfo { + s.AutoRecoverySupported = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSpotPriceHistoryInput) SetDryRun(v bool) *DescribeSpotPriceHistoryInput { - s.DryRun = &v +// SetBareMetal sets the BareMetal field's value. +func (s *InstanceTypeInfo) SetBareMetal(v bool) *InstanceTypeInfo { + s.BareMetal = &v return s } -// SetEndTime sets the EndTime field's value. -func (s *DescribeSpotPriceHistoryInput) SetEndTime(v time.Time) *DescribeSpotPriceHistoryInput { - s.EndTime = &v +// SetBurstablePerformanceSupported sets the BurstablePerformanceSupported field's value. +func (s *InstanceTypeInfo) SetBurstablePerformanceSupported(v bool) *InstanceTypeInfo { + s.BurstablePerformanceSupported = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeSpotPriceHistoryInput) SetFilters(v []*Filter) *DescribeSpotPriceHistoryInput { - s.Filters = v +// SetCurrentGeneration sets the CurrentGeneration field's value. +func (s *InstanceTypeInfo) SetCurrentGeneration(v bool) *InstanceTypeInfo { + s.CurrentGeneration = &v return s } -// SetInstanceTypes sets the InstanceTypes field's value. -func (s *DescribeSpotPriceHistoryInput) SetInstanceTypes(v []*string) *DescribeSpotPriceHistoryInput { - s.InstanceTypes = v +// SetDedicatedHostsSupported sets the DedicatedHostsSupported field's value. +func (s *InstanceTypeInfo) SetDedicatedHostsSupported(v bool) *InstanceTypeInfo { + s.DedicatedHostsSupported = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeSpotPriceHistoryInput) SetMaxResults(v int64) *DescribeSpotPriceHistoryInput { - s.MaxResults = &v +// SetEbsInfo sets the EbsInfo field's value. +func (s *InstanceTypeInfo) SetEbsInfo(v *EbsInfo) *InstanceTypeInfo { + s.EbsInfo = v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotPriceHistoryInput) SetNextToken(v string) *DescribeSpotPriceHistoryInput { - s.NextToken = &v +// SetFpgaInfo sets the FpgaInfo field's value. +func (s *InstanceTypeInfo) SetFpgaInfo(v *FpgaInfo) *InstanceTypeInfo { + s.FpgaInfo = v return s } -// SetProductDescriptions sets the ProductDescriptions field's value. -func (s *DescribeSpotPriceHistoryInput) SetProductDescriptions(v []*string) *DescribeSpotPriceHistoryInput { - s.ProductDescriptions = v +// SetFreeTierEligible sets the FreeTierEligible field's value. +func (s *InstanceTypeInfo) SetFreeTierEligible(v bool) *InstanceTypeInfo { + s.FreeTierEligible = &v return s } -// SetStartTime sets the StartTime field's value. -func (s *DescribeSpotPriceHistoryInput) SetStartTime(v time.Time) *DescribeSpotPriceHistoryInput { - s.StartTime = &v +// SetGpuInfo sets the GpuInfo field's value. +func (s *InstanceTypeInfo) SetGpuInfo(v *GpuInfo) *InstanceTypeInfo { + s.GpuInfo = v return s } -// Contains the output of DescribeSpotPriceHistory. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistoryResult -type DescribeSpotPriceHistoryOutput struct { - _ struct{} `type:"structure"` +// SetHibernationSupported sets the HibernationSupported field's value. +func (s *InstanceTypeInfo) SetHibernationSupported(v bool) *InstanceTypeInfo { + s.HibernationSupported = &v + return s +} - // The token required to retrieve the next set of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` +// SetHypervisor sets the Hypervisor field's value. +func (s *InstanceTypeInfo) SetHypervisor(v string) *InstanceTypeInfo { + s.Hypervisor = &v + return s +} - // The historical Spot prices. - SpotPriceHistory []*SpotPrice `locationName:"spotPriceHistorySet" locationNameList:"item" type:"list"` +// SetInstanceStorageInfo sets the InstanceStorageInfo field's value. +func (s *InstanceTypeInfo) SetInstanceStorageInfo(v *InstanceStorageInfo) *InstanceTypeInfo { + s.InstanceStorageInfo = v + return s } -// String returns the string representation -func (s DescribeSpotPriceHistoryOutput) String() string { - return awsutil.Prettify(s) +// SetInstanceStorageSupported sets the InstanceStorageSupported field's value. +func (s *InstanceTypeInfo) SetInstanceStorageSupported(v bool) *InstanceTypeInfo { + s.InstanceStorageSupported = &v + return s } -// GoString returns the string representation -func (s DescribeSpotPriceHistoryOutput) GoString() string { - return s.String() +// SetInstanceType sets the InstanceType field's value. +func (s *InstanceTypeInfo) SetInstanceType(v string) *InstanceTypeInfo { + s.InstanceType = &v + return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeSpotPriceHistoryOutput) SetNextToken(v string) *DescribeSpotPriceHistoryOutput { - s.NextToken = &v +// SetMemoryInfo sets the MemoryInfo field's value. +func (s *InstanceTypeInfo) SetMemoryInfo(v *MemoryInfo) *InstanceTypeInfo { + s.MemoryInfo = v return s } -// SetSpotPriceHistory sets the SpotPriceHistory field's value. -func (s *DescribeSpotPriceHistoryOutput) SetSpotPriceHistory(v []*SpotPrice) *DescribeSpotPriceHistoryOutput { - s.SpotPriceHistory = v +// SetNetworkInfo sets the NetworkInfo field's value. +func (s *InstanceTypeInfo) SetNetworkInfo(v *NetworkInfo) *InstanceTypeInfo { + s.NetworkInfo = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroupsRequest -type DescribeStaleSecurityGroupsInput struct { - _ struct{} `type:"structure"` +// SetPlacementGroupInfo sets the PlacementGroupInfo field's value. +func (s *InstanceTypeInfo) SetPlacementGroupInfo(v *PlacementGroupInfo) *InstanceTypeInfo { + s.PlacementGroupInfo = v + return s +} - // Checks whether you have the required permissions for the operation, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` +// SetProcessorInfo sets the ProcessorInfo field's value. +func (s *InstanceTypeInfo) SetProcessorInfo(v *ProcessorInfo) *InstanceTypeInfo { + s.ProcessorInfo = v + return s +} - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - MaxResults *int64 `min:"5" type:"integer"` +// SetSupportedRootDevices sets the SupportedRootDevices field's value. +func (s *InstanceTypeInfo) SetSupportedRootDevices(v []*string) *InstanceTypeInfo { + s.SupportedRootDevices = v + return s +} - // The token for the next set of items to return. (You received this token from - // a prior call.) - NextToken *string `min:"1" type:"string"` +// SetSupportedUsageClasses sets the SupportedUsageClasses field's value. +func (s *InstanceTypeInfo) SetSupportedUsageClasses(v []*string) *InstanceTypeInfo { + s.SupportedUsageClasses = v + return s +} - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` +// SetVCpuInfo sets the VCpuInfo field's value. +func (s *InstanceTypeInfo) SetVCpuInfo(v *VCpuInfo) *InstanceTypeInfo { + s.VCpuInfo = v + return s +} + +// The instance types offered. +type InstanceTypeOffering struct { + _ struct{} `type:"structure"` + + // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) + // in the Amazon Elastic Compute Cloud User Guide. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + + // The identifier for the location. This depends on the location type. For example, + // if the location type is region, the location is the Region code (for example, + // us-east-2.) + Location *string `locationName:"location" type:"string"` + + // The location type. + LocationType *string `locationName:"locationType" type:"string" enum:"LocationType"` } // String returns the string representation -func (s DescribeStaleSecurityGroupsInput) String() string { +func (s InstanceTypeOffering) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeStaleSecurityGroupsInput) GoString() string { +func (s InstanceTypeOffering) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeStaleSecurityGroupsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeStaleSecurityGroupsInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.NextToken != nil && len(*s.NextToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeStaleSecurityGroupsInput) SetDryRun(v bool) *DescribeStaleSecurityGroupsInput { - s.DryRun = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeStaleSecurityGroupsInput) SetMaxResults(v int64) *DescribeStaleSecurityGroupsInput { - s.MaxResults = &v +// SetInstanceType sets the InstanceType field's value. +func (s *InstanceTypeOffering) SetInstanceType(v string) *InstanceTypeOffering { + s.InstanceType = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeStaleSecurityGroupsInput) SetNextToken(v string) *DescribeStaleSecurityGroupsInput { - s.NextToken = &v +// SetLocation sets the Location field's value. +func (s *InstanceTypeOffering) SetLocation(v string) *InstanceTypeOffering { + s.Location = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *DescribeStaleSecurityGroupsInput) SetVpcId(v string) *DescribeStaleSecurityGroupsInput { - s.VpcId = &v +// SetLocationType sets the LocationType field's value. +func (s *InstanceTypeOffering) SetLocationType(v string) *InstanceTypeOffering { + s.LocationType = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroupsResult -type DescribeStaleSecurityGroupsOutput struct { +// Information about the Capacity Reservation usage. +type InstanceUsage struct { _ struct{} `type:"structure"` - // The token to use when requesting the next set of items. If there are no additional - // items to return, the string is empty. - NextToken *string `locationName:"nextToken" type:"string"` + // The ID of the AWS account that is making use of the Capacity Reservation. + AccountId *string `locationName:"accountId" type:"string"` - // Information about the stale security groups. - StaleSecurityGroupSet []*StaleSecurityGroup `locationName:"staleSecurityGroupSet" locationNameList:"item" type:"list"` + // The number of instances the AWS account currently has in the Capacity Reservation. + UsedInstanceCount *int64 `locationName:"usedInstanceCount" type:"integer"` } // String returns the string representation -func (s DescribeStaleSecurityGroupsOutput) String() string { +func (s InstanceUsage) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeStaleSecurityGroupsOutput) GoString() string { +func (s InstanceUsage) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeStaleSecurityGroupsOutput) SetNextToken(v string) *DescribeStaleSecurityGroupsOutput { - s.NextToken = &v +// SetAccountId sets the AccountId field's value. +func (s *InstanceUsage) SetAccountId(v string) *InstanceUsage { + s.AccountId = &v return s } -// SetStaleSecurityGroupSet sets the StaleSecurityGroupSet field's value. -func (s *DescribeStaleSecurityGroupsOutput) SetStaleSecurityGroupSet(v []*StaleSecurityGroup) *DescribeStaleSecurityGroupsOutput { - s.StaleSecurityGroupSet = v +// SetUsedInstanceCount sets the UsedInstanceCount field's value. +func (s *InstanceUsage) SetUsedInstanceCount(v int64) *InstanceUsage { + s.UsedInstanceCount = &v return s } -// Contains the parameters for DescribeSubnets. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnetsRequest -type DescribeSubnetsInput struct { +// Describes an internet gateway. +type InternetGateway struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // Any VPCs attached to the internet gateway. + Attachments []*InternetGatewayAttachment `locationName:"attachmentSet" locationNameList:"item" type:"list"` - // One or more filters. - // - // * availabilityZone - The Availability Zone for the subnet. You can also - // use availability-zone as the filter name. - // - // * available-ip-address-count - The number of IPv4 addresses in the subnet - // that are available. - // - // * cidrBlock - The IPv4 CIDR block of the subnet. The CIDR block you specify - // must exactly match the subnet's CIDR block for information to be returned - // for the subnet. You can also use cidr or cidr-block as the filter names. - // - // * defaultForAz - Indicates whether this is the default subnet for the - // Availability Zone. You can also use default-for-az as the filter name. - // - // * ipv6-cidr-block-association.ipv6-cidr-block - An IPv6 CIDR block associated - // with the subnet. - // - // * ipv6-cidr-block-association.association-id - An association ID for an - // IPv6 CIDR block associated with the subnet. - // - // * ipv6-cidr-block-association.state - The state of an IPv6 CIDR block - // associated with the subnet. - // - // * state - The state of the subnet (pending | available). - // - // * subnet-id - The ID of the subnet. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * vpc-id - The ID of the VPC for the subnet. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // The ID of the internet gateway. + InternetGatewayId *string `locationName:"internetGatewayId" type:"string"` - // One or more subnet IDs. - // - // Default: Describes all your subnets. - SubnetIds []*string `locationName:"SubnetId" locationNameList:"SubnetId" type:"list"` + // The ID of the AWS account that owns the internet gateway. + OwnerId *string `locationName:"ownerId" type:"string"` + + // Any tags assigned to the internet gateway. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeSubnetsInput) String() string { +func (s InternetGateway) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSubnetsInput) GoString() string { +func (s InternetGateway) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeSubnetsInput) SetDryRun(v bool) *DescribeSubnetsInput { - s.DryRun = &v +// SetAttachments sets the Attachments field's value. +func (s *InternetGateway) SetAttachments(v []*InternetGatewayAttachment) *InternetGateway { + s.Attachments = v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeSubnetsInput) SetFilters(v []*Filter) *DescribeSubnetsInput { - s.Filters = v +// SetInternetGatewayId sets the InternetGatewayId field's value. +func (s *InternetGateway) SetInternetGatewayId(v string) *InternetGateway { + s.InternetGatewayId = &v return s } -// SetSubnetIds sets the SubnetIds field's value. -func (s *DescribeSubnetsInput) SetSubnetIds(v []*string) *DescribeSubnetsInput { - s.SubnetIds = v +// SetOwnerId sets the OwnerId field's value. +func (s *InternetGateway) SetOwnerId(v string) *InternetGateway { + s.OwnerId = &v return s } -// Contains the output of DescribeSubnets. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnetsResult -type DescribeSubnetsOutput struct { +// SetTags sets the Tags field's value. +func (s *InternetGateway) SetTags(v []*Tag) *InternetGateway { + s.Tags = v + return s +} + +// Describes the attachment of a VPC to an internet gateway or an egress-only +// internet gateway. +type InternetGatewayAttachment struct { _ struct{} `type:"structure"` - // Information about one or more subnets. - Subnets []*Subnet `locationName:"subnetSet" locationNameList:"item" type:"list"` + // The current state of the attachment. For an internet gateway, the state is + // available when attached to a VPC; otherwise, this value is not returned. + State *string `locationName:"state" type:"string" enum:"AttachmentStatus"` + + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s DescribeSubnetsOutput) String() string { +func (s InternetGatewayAttachment) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeSubnetsOutput) GoString() string { +func (s InternetGatewayAttachment) GoString() string { return s.String() } -// SetSubnets sets the Subnets field's value. -func (s *DescribeSubnetsOutput) SetSubnets(v []*Subnet) *DescribeSubnetsOutput { - s.Subnets = v +// SetState sets the State field's value. +func (s *InternetGatewayAttachment) SetState(v string) *InternetGatewayAttachment { + s.State = &v return s } -// Contains the parameters for DescribeTags. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTagsRequest -type DescribeTagsInput struct { +// SetVpcId sets the VpcId field's value. +func (s *InternetGatewayAttachment) SetVpcId(v string) *InternetGatewayAttachment { + s.VpcId = &v + return s +} + +// Describes a set of permissions for a security group rule. +type IpPermission struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 + // type number. A value of -1 indicates all ICMP/ICMPv6 types. If you specify + // all ICMP/ICMPv6 types, you must specify all codes. + FromPort *int64 `locationName:"fromPort" type:"integer"` - // One or more filters. - // - // * key - The tag key. + // The IP protocol name (tcp, udp, icmp, icmpv6) or number (see Protocol Numbers + // (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). // - // * resource-id - The resource ID. - // - // * resource-type - The resource type (customer-gateway | dhcp-options | - // image | instance | internet-gateway | network-acl | network-interface - // | reserved-instances | route-table | security-group | snapshot | spot-instances-request - // | subnet | volume | vpc | vpn-connection | vpn-gateway). - // - // * value - The tag value. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // [VPC only] Use -1 to specify all protocols. When authorizing security group + // rules, specifying -1 or a protocol number other than tcp, udp, icmp, or icmpv6 + // allows traffic on all ports, regardless of any port range you specify. For + // tcp, udp, and icmp, you must specify a port range. For icmpv6, the port range + // is optional; if you omit the port range, traffic for all types and codes + // is allowed. + IpProtocol *string `locationName:"ipProtocol" type:"string"` - // The maximum number of results to return in a single call. This value can - // be between 5 and 1000. To retrieve the remaining results, make another call - // with the returned NextToken value. - MaxResults *int64 `locationName:"maxResults" type:"integer"` + // The IPv4 ranges. + IpRanges []*IpRange `locationName:"ipRanges" locationNameList:"item" type:"list"` - // The token to retrieve the next page of results. - NextToken *string `locationName:"nextToken" type:"string"` + // [VPC only] The IPv6 ranges. + Ipv6Ranges []*Ipv6Range `locationName:"ipv6Ranges" locationNameList:"item" type:"list"` + + // [VPC only] The prefix list IDs for an AWS service. With outbound rules, this + // is the AWS service to access through a VPC endpoint from instances associated + // with the security group. + PrefixListIds []*PrefixListId `locationName:"prefixListIds" locationNameList:"item" type:"list"` + + // The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code. + // A value of -1 indicates all ICMP/ICMPv6 codes. If you specify all ICMP/ICMPv6 + // types, you must specify all codes. + ToPort *int64 `locationName:"toPort" type:"integer"` + + // The security group and AWS account ID pairs. + UserIdGroupPairs []*UserIdGroupPair `locationName:"groups" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeTagsInput) String() string { +func (s IpPermission) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeTagsInput) GoString() string { +func (s IpPermission) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeTagsInput) SetDryRun(v bool) *DescribeTagsInput { - s.DryRun = &v +// SetFromPort sets the FromPort field's value. +func (s *IpPermission) SetFromPort(v int64) *IpPermission { + s.FromPort = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeTagsInput) SetFilters(v []*Filter) *DescribeTagsInput { - s.Filters = v +// SetIpProtocol sets the IpProtocol field's value. +func (s *IpPermission) SetIpProtocol(v string) *IpPermission { + s.IpProtocol = &v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeTagsInput) SetMaxResults(v int64) *DescribeTagsInput { - s.MaxResults = &v +// SetIpRanges sets the IpRanges field's value. +func (s *IpPermission) SetIpRanges(v []*IpRange) *IpPermission { + s.IpRanges = v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeTagsInput) SetNextToken(v string) *DescribeTagsInput { - s.NextToken = &v +// SetIpv6Ranges sets the Ipv6Ranges field's value. +func (s *IpPermission) SetIpv6Ranges(v []*Ipv6Range) *IpPermission { + s.Ipv6Ranges = v return s } -// Contains the output of DescribeTags. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTagsResult -type DescribeTagsOutput struct { +// SetPrefixListIds sets the PrefixListIds field's value. +func (s *IpPermission) SetPrefixListIds(v []*PrefixListId) *IpPermission { + s.PrefixListIds = v + return s +} + +// SetToPort sets the ToPort field's value. +func (s *IpPermission) SetToPort(v int64) *IpPermission { + s.ToPort = &v + return s +} + +// SetUserIdGroupPairs sets the UserIdGroupPairs field's value. +func (s *IpPermission) SetUserIdGroupPairs(v []*UserIdGroupPair) *IpPermission { + s.UserIdGroupPairs = v + return s +} + +// Describes an IPv4 range. +type IpRange struct { _ struct{} `type:"structure"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return.. - NextToken *string `locationName:"nextToken" type:"string"` + // The IPv4 CIDR range. You can either specify a CIDR range or a source security + // group, not both. To specify a single IPv4 address, use the /32 prefix length. + CidrIp *string `locationName:"cidrIp" type:"string"` - // A list of tags. - Tags []*TagDescription `locationName:"tagSet" locationNameList:"item" type:"list"` + // A description for the security group rule that references this IPv4 address + // range. + // + // Constraints: Up to 255 characters in length. Allowed characters are a-z, + // A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* + Description *string `locationName:"description" type:"string"` } // String returns the string representation -func (s DescribeTagsOutput) String() string { +func (s IpRange) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeTagsOutput) GoString() string { +func (s IpRange) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeTagsOutput) SetNextToken(v string) *DescribeTagsOutput { - s.NextToken = &v +// SetCidrIp sets the CidrIp field's value. +func (s *IpRange) SetCidrIp(v string) *IpRange { + s.CidrIp = &v return s } -// SetTags sets the Tags field's value. -func (s *DescribeTagsOutput) SetTags(v []*TagDescription) *DescribeTagsOutput { - s.Tags = v +// SetDescription sets the Description field's value. +func (s *IpRange) SetDescription(v string) *IpRange { + s.Description = &v return s } -// Contains the parameters for DescribeVolumeAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttributeRequest -type DescribeVolumeAttributeInput struct { +// Describes an IPv6 CIDR block. +type Ipv6CidrBlock struct { _ struct{} `type:"structure"` - // The instance attribute. - Attribute *string `type:"string" enum:"VolumeAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the volume. - // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` + // The IPv6 CIDR block. + Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` } // String returns the string representation -func (s DescribeVolumeAttributeInput) String() string { +func (s Ipv6CidrBlock) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVolumeAttributeInput) GoString() string { +func (s Ipv6CidrBlock) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVolumeAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVolumeAttributeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeVolumeAttributeInput) SetAttribute(v string) *DescribeVolumeAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *DescribeVolumeAttributeInput) SetDryRun(v bool) *DescribeVolumeAttributeInput { - s.DryRun = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *DescribeVolumeAttributeInput) SetVolumeId(v string) *DescribeVolumeAttributeInput { - s.VolumeId = &v +// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. +func (s *Ipv6CidrBlock) SetIpv6CidrBlock(v string) *Ipv6CidrBlock { + s.Ipv6CidrBlock = &v return s } -// Contains the output of DescribeVolumeAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttributeResult -type DescribeVolumeAttributeOutput struct { +// [EC2-VPC only] Describes an IPv6 range. +type Ipv6Range struct { _ struct{} `type:"structure"` - // The state of autoEnableIO attribute. - AutoEnableIO *AttributeBooleanValue `locationName:"autoEnableIO" type:"structure"` - - // A list of product codes. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` + // The IPv6 CIDR range. You can either specify a CIDR range or a source security + // group, not both. To specify a single IPv6 address, use the /128 prefix length. + CidrIpv6 *string `locationName:"cidrIpv6" type:"string"` - // The ID of the volume. - VolumeId *string `locationName:"volumeId" type:"string"` + // A description for the security group rule that references this IPv6 address + // range. + // + // Constraints: Up to 255 characters in length. Allowed characters are a-z, + // A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* + Description *string `locationName:"description" type:"string"` } // String returns the string representation -func (s DescribeVolumeAttributeOutput) String() string { +func (s Ipv6Range) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVolumeAttributeOutput) GoString() string { +func (s Ipv6Range) GoString() string { return s.String() } -// SetAutoEnableIO sets the AutoEnableIO field's value. -func (s *DescribeVolumeAttributeOutput) SetAutoEnableIO(v *AttributeBooleanValue) *DescribeVolumeAttributeOutput { - s.AutoEnableIO = v - return s -} - -// SetProductCodes sets the ProductCodes field's value. -func (s *DescribeVolumeAttributeOutput) SetProductCodes(v []*ProductCode) *DescribeVolumeAttributeOutput { - s.ProductCodes = v +// SetCidrIpv6 sets the CidrIpv6 field's value. +func (s *Ipv6Range) SetCidrIpv6(v string) *Ipv6Range { + s.CidrIpv6 = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *DescribeVolumeAttributeOutput) SetVolumeId(v string) *DescribeVolumeAttributeOutput { - s.VolumeId = &v +// SetDescription sets the Description field's value. +func (s *Ipv6Range) SetDescription(v string) *Ipv6Range { + s.Description = &v return s } -// Contains the parameters for DescribeVolumeStatus. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatusRequest -type DescribeVolumeStatusInput struct { +// Describes a key pair. +type KeyPairInfo struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * action.code - The action code for the event (for example, enable-volume-io). - // - // * action.description - A description of the action. - // - // * action.event-id - The event ID associated with the action. - // - // * availability-zone - The Availability Zone of the instance. - // - // * event.description - A description of the event. - // - // * event.event-id - The event ID. - // - // * event.event-type - The event type (for io-enabled: passed | failed; - // for io-performance: io-performance:degraded | io-performance:severely-degraded - // | io-performance:stalled). - // - // * event.not-after - The latest end time for the event. - // - // * event.not-before - The earliest start time for the event. - // - // * volume-status.details-name - The cause for volume-status.status (io-enabled - // | io-performance). - // - // * volume-status.details-status - The status of volume-status.details-name - // (for io-enabled: passed | failed; for io-performance: normal | degraded - // | severely-degraded | stalled). - // - // * volume-status.status - The status of the volume (ok | impaired | warning - // | insufficient-data). - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of volume results returned by DescribeVolumeStatus in - // paginated output. When this parameter is used, the request only returns MaxResults - // results in a single page along with a NextToken response element. The remaining - // results of the initial request can be seen by sending another request with - // the returned NextToken value. This value can be between 5 and 1000; if MaxResults - // is given a value larger than 1000, only 1000 results are returned. If this - // parameter is not used, then DescribeVolumeStatus returns all results. You - // cannot specify this parameter and the volume IDs parameter in the same request. - MaxResults *int64 `type:"integer"` - - // The NextToken value to include in a future DescribeVolumeStatus request. - // When the results of the request exceed MaxResults, this value can be used - // to retrieve the next page of results. This value is null when there are no - // more results to return. - NextToken *string `type:"string"` - - // One or more volume IDs. - // - // Default: Describes all your volumes. - VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` + // If you used CreateKeyPair to create the key pair, this is the SHA-1 digest + // of the DER encoded private key. If you used ImportKeyPair to provide AWS + // the public key, this is the MD5 public key fingerprint as specified in section + // 4 of RFC4716. + KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` + + // The name of the key pair. + KeyName *string `locationName:"keyName" type:"string"` } // String returns the string representation -func (s DescribeVolumeStatusInput) String() string { +func (s KeyPairInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVolumeStatusInput) GoString() string { +func (s KeyPairInfo) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVolumeStatusInput) SetDryRun(v bool) *DescribeVolumeStatusInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVolumeStatusInput) SetFilters(v []*Filter) *DescribeVolumeStatusInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVolumeStatusInput) SetMaxResults(v int64) *DescribeVolumeStatusInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumeStatusInput) SetNextToken(v string) *DescribeVolumeStatusInput { - s.NextToken = &v +// SetKeyFingerprint sets the KeyFingerprint field's value. +func (s *KeyPairInfo) SetKeyFingerprint(v string) *KeyPairInfo { + s.KeyFingerprint = &v return s } -// SetVolumeIds sets the VolumeIds field's value. -func (s *DescribeVolumeStatusInput) SetVolumeIds(v []*string) *DescribeVolumeStatusInput { - s.VolumeIds = v +// SetKeyName sets the KeyName field's value. +func (s *KeyPairInfo) SetKeyName(v string) *KeyPairInfo { + s.KeyName = &v return s } -// Contains the output of DescribeVolumeStatus. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatusResult -type DescribeVolumeStatusOutput struct { +// Describes a launch permission. +type LaunchPermission struct { _ struct{} `type:"structure"` - // The token to use to retrieve the next page of results. This value is null - // when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The name of the group. + Group *string `locationName:"group" type:"string" enum:"PermissionGroup"` - // A list of volumes. - VolumeStatuses []*VolumeStatusItem `locationName:"volumeStatusSet" locationNameList:"item" type:"list"` + // The AWS account ID. + UserId *string `locationName:"userId" type:"string"` } // String returns the string representation -func (s DescribeVolumeStatusOutput) String() string { +func (s LaunchPermission) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVolumeStatusOutput) GoString() string { +func (s LaunchPermission) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumeStatusOutput) SetNextToken(v string) *DescribeVolumeStatusOutput { - s.NextToken = &v +// SetGroup sets the Group field's value. +func (s *LaunchPermission) SetGroup(v string) *LaunchPermission { + s.Group = &v return s } -// SetVolumeStatuses sets the VolumeStatuses field's value. -func (s *DescribeVolumeStatusOutput) SetVolumeStatuses(v []*VolumeStatusItem) *DescribeVolumeStatusOutput { - s.VolumeStatuses = v +// SetUserId sets the UserId field's value. +func (s *LaunchPermission) SetUserId(v string) *LaunchPermission { + s.UserId = &v return s } -// Contains the parameters for DescribeVolumes. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesRequest -type DescribeVolumesInput struct { +// Describes a launch permission modification. +type LaunchPermissionModifications struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * attachment.attach-time - The time stamp when the attachment initiated. - // - // * attachment.delete-on-termination - Whether the volume is deleted on - // instance termination. - // - // * attachment.device - The device name that is exposed to the instance - // (for example, /dev/sda1). - // - // * attachment.instance-id - The ID of the instance the volume is attached - // to. - // - // * attachment.status - The attachment state (attaching | attached | detaching - // | detached). - // - // * availability-zone - The Availability Zone in which the volume was created. - // - // * create-time - The time stamp when the volume was created. - // - // * encrypted - The encryption status of the volume. - // - // * size - The size of the volume, in GiB. - // - // * snapshot-id - The snapshot from which the volume was created. - // - // * status - The status of the volume (creating | available | in-use | deleting - // | deleted | error). - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * volume-id - The volume ID. - // - // * volume-type - The Amazon EBS volume type. This can be gp2 for General - // Purpose SSD, io1 for Provisioned IOPS SSD, st1 for Throughput Optimized - // HDD, sc1 for Cold HDD, or standard for Magnetic volumes. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of volume results returned by DescribeVolumes in paginated - // output. When this parameter is used, DescribeVolumes only returns MaxResults - // results in a single page along with a NextToken response element. The remaining - // results of the initial request can be seen by sending another DescribeVolumes - // request with the returned NextToken value. This value can be between 5 and - // 500; if MaxResults is given a value larger than 500, only 500 results are - // returned. If this parameter is not used, then DescribeVolumes returns all - // results. You cannot specify this parameter and the volume IDs parameter in - // the same request. - MaxResults *int64 `locationName:"maxResults" type:"integer"` - - // The NextToken value returned from a previous paginated DescribeVolumes request - // where MaxResults was used and the results exceeded the value of that parameter. - // Pagination continues from the end of the previous results that returned the - // NextToken value. This value is null when there are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` + // The AWS account ID to add to the list of launch permissions for the AMI. + Add []*LaunchPermission `locationNameList:"item" type:"list"` - // One or more volume IDs. - VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` + // The AWS account ID to remove from the list of launch permissions for the + // AMI. + Remove []*LaunchPermission `locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeVolumesInput) String() string { +func (s LaunchPermissionModifications) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVolumesInput) GoString() string { +func (s LaunchPermissionModifications) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVolumesInput) SetDryRun(v bool) *DescribeVolumesInput { - s.DryRun = &v +// SetAdd sets the Add field's value. +func (s *LaunchPermissionModifications) SetAdd(v []*LaunchPermission) *LaunchPermissionModifications { + s.Add = v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeVolumesInput) SetFilters(v []*Filter) *DescribeVolumesInput { - s.Filters = v +// SetRemove sets the Remove field's value. +func (s *LaunchPermissionModifications) SetRemove(v []*LaunchPermission) *LaunchPermissionModifications { + s.Remove = v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVolumesInput) SetMaxResults(v int64) *DescribeVolumesInput { - s.MaxResults = &v - return s -} +// Describes the launch specification for an instance. +type LaunchSpecification struct { + _ struct{} `type:"structure"` -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumesInput) SetNextToken(v string) *DescribeVolumesInput { - s.NextToken = &v - return s -} + // Deprecated. + AddressingType *string `locationName:"addressingType" type:"string"` -// SetVolumeIds sets the VolumeIds field's value. -func (s *DescribeVolumesInput) SetVolumeIds(v []*string) *DescribeVolumesInput { - s.VolumeIds = v - return s -} + // One or more block device mapping entries. + BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModificationsRequest -type DescribeVolumesModificationsInput struct { - _ struct{} `type:"structure"` + // Indicates whether the instance is optimized for EBS I/O. This optimization + // provides dedicated throughput to Amazon EBS and an optimized configuration + // stack to provide optimal EBS I/O performance. This optimization isn't available + // with all instance types. Additional usage charges apply when using an EBS + // Optimized instance. + // + // Default: false + EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // The IAM instance profile. + IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - // One or more filters. Supported filters: volume-id, modification-state, target-size, - // target-iops, target-volume-type, original-size, original-iops, original-volume-type, - // start-time. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // The ID of the AMI. + ImageId *string `locationName:"imageId" type:"string"` - // The maximum number of results (up to a limit of 500) to be returned in a - // paginated request. - MaxResults *int64 `type:"integer"` + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - // The nextToken value returned by a previous paginated request. - NextToken *string `type:"string"` + // The ID of the kernel. + KernelId *string `locationName:"kernelId" type:"string"` - // One or more volume IDs for which in-progress modifications will be described. - VolumeIds []*string `locationName:"VolumeId" locationNameList:"VolumeId" type:"list"` + // The name of the key pair. + KeyName *string `locationName:"keyName" type:"string"` + + // Describes the monitoring of an instance. + Monitoring *RunInstancesMonitoringEnabled `locationName:"monitoring" type:"structure"` + + // One or more network interfaces. If you specify a network interface, you must + // specify subnet IDs and security group IDs using the network interface. + NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` + + // The placement information for the instance. + Placement *SpotPlacement `locationName:"placement" type:"structure"` + + // The ID of the RAM disk. + RamdiskId *string `locationName:"ramdiskId" type:"string"` + + // One or more security groups. When requesting instances in a VPC, you must + // specify the IDs of the security groups. When requesting instances in EC2-Classic, + // you can specify the names or the IDs of the security groups. + SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + + // The ID of the subnet in which to launch the instance. + SubnetId *string `locationName:"subnetId" type:"string"` + + // The Base64-encoded user data for the instance. + UserData *string `locationName:"userData" type:"string"` } // String returns the string representation -func (s DescribeVolumesModificationsInput) String() string { +func (s LaunchSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVolumesModificationsInput) GoString() string { +func (s LaunchSpecification) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVolumesModificationsInput) SetDryRun(v bool) *DescribeVolumesModificationsInput { - s.DryRun = &v +// SetAddressingType sets the AddressingType field's value. +func (s *LaunchSpecification) SetAddressingType(v string) *LaunchSpecification { + s.AddressingType = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeVolumesModificationsInput) SetFilters(v []*Filter) *DescribeVolumesModificationsInput { - s.Filters = v +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *LaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *LaunchSpecification { + s.BlockDeviceMappings = v return s } -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVolumesModificationsInput) SetMaxResults(v int64) *DescribeVolumesModificationsInput { - s.MaxResults = &v +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *LaunchSpecification) SetEbsOptimized(v bool) *LaunchSpecification { + s.EbsOptimized = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumesModificationsInput) SetNextToken(v string) *DescribeVolumesModificationsInput { - s.NextToken = &v +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *LaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *LaunchSpecification { + s.IamInstanceProfile = v return s } -// SetVolumeIds sets the VolumeIds field's value. -func (s *DescribeVolumesModificationsInput) SetVolumeIds(v []*string) *DescribeVolumesModificationsInput { - s.VolumeIds = v +// SetImageId sets the ImageId field's value. +func (s *LaunchSpecification) SetImageId(v string) *LaunchSpecification { + s.ImageId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModificationsResult -type DescribeVolumesModificationsOutput struct { - _ struct{} `type:"structure"` - - // Token for pagination, null if there are no more results - NextToken *string `locationName:"nextToken" type:"string"` - - // A list of returned VolumeModification objects. - VolumesModifications []*VolumeModification `locationName:"volumeModificationSet" locationNameList:"item" type:"list"` +// SetInstanceType sets the InstanceType field's value. +func (s *LaunchSpecification) SetInstanceType(v string) *LaunchSpecification { + s.InstanceType = &v + return s } -// String returns the string representation -func (s DescribeVolumesModificationsOutput) String() string { - return awsutil.Prettify(s) +// SetKernelId sets the KernelId field's value. +func (s *LaunchSpecification) SetKernelId(v string) *LaunchSpecification { + s.KernelId = &v + return s } -// GoString returns the string representation -func (s DescribeVolumesModificationsOutput) GoString() string { - return s.String() +// SetKeyName sets the KeyName field's value. +func (s *LaunchSpecification) SetKeyName(v string) *LaunchSpecification { + s.KeyName = &v + return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumesModificationsOutput) SetNextToken(v string) *DescribeVolumesModificationsOutput { - s.NextToken = &v +// SetMonitoring sets the Monitoring field's value. +func (s *LaunchSpecification) SetMonitoring(v *RunInstancesMonitoringEnabled) *LaunchSpecification { + s.Monitoring = v return s } -// SetVolumesModifications sets the VolumesModifications field's value. -func (s *DescribeVolumesModificationsOutput) SetVolumesModifications(v []*VolumeModification) *DescribeVolumesModificationsOutput { - s.VolumesModifications = v +// SetNetworkInterfaces sets the NetworkInterfaces field's value. +func (s *LaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *LaunchSpecification { + s.NetworkInterfaces = v return s } -// Contains the output of DescribeVolumes. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesResult -type DescribeVolumesOutput struct { - _ struct{} `type:"structure"` - - // The NextToken value to include in a future DescribeVolumes request. When - // the results of a DescribeVolumes request exceed MaxResults, this value can - // be used to retrieve the next page of results. This value is null when there - // are no more results to return. - NextToken *string `locationName:"nextToken" type:"string"` - - // Information about the volumes. - Volumes []*Volume `locationName:"volumeSet" locationNameList:"item" type:"list"` +// SetPlacement sets the Placement field's value. +func (s *LaunchSpecification) SetPlacement(v *SpotPlacement) *LaunchSpecification { + s.Placement = v + return s } -// String returns the string representation -func (s DescribeVolumesOutput) String() string { - return awsutil.Prettify(s) +// SetRamdiskId sets the RamdiskId field's value. +func (s *LaunchSpecification) SetRamdiskId(v string) *LaunchSpecification { + s.RamdiskId = &v + return s } -// GoString returns the string representation -func (s DescribeVolumesOutput) GoString() string { - return s.String() +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *LaunchSpecification) SetSecurityGroups(v []*GroupIdentifier) *LaunchSpecification { + s.SecurityGroups = v + return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeVolumesOutput) SetNextToken(v string) *DescribeVolumesOutput { - s.NextToken = &v +// SetSubnetId sets the SubnetId field's value. +func (s *LaunchSpecification) SetSubnetId(v string) *LaunchSpecification { + s.SubnetId = &v return s } -// SetVolumes sets the Volumes field's value. -func (s *DescribeVolumesOutput) SetVolumes(v []*Volume) *DescribeVolumesOutput { - s.Volumes = v +// SetUserData sets the UserData field's value. +func (s *LaunchSpecification) SetUserData(v string) *LaunchSpecification { + s.UserData = &v return s } -// Contains the parameters for DescribeVpcAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttributeRequest -type DescribeVpcAttributeInput struct { +// Describes a launch template. +type LaunchTemplate struct { _ struct{} `type:"structure"` - // The VPC attribute. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"VpcAttributeName"` + // The time launch template was created. + CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The principal that created the launch template. + CreatedBy *string `locationName:"createdBy" type:"string"` - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` + // The version number of the default version of the launch template. + DefaultVersionNumber *int64 `locationName:"defaultVersionNumber" type:"long"` + + // The version number of the latest version of the launch template. + LatestVersionNumber *int64 `locationName:"latestVersionNumber" type:"long"` + + // The ID of the launch template. + LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` + + // The name of the launch template. + LaunchTemplateName *string `locationName:"launchTemplateName" min:"3" type:"string"` + + // The tags for the launch template. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeVpcAttributeInput) String() string { +func (s LaunchTemplate) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcAttributeInput) GoString() string { +func (s LaunchTemplate) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVpcAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVpcAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *DescribeVpcAttributeInput) SetAttribute(v string) *DescribeVpcAttributeInput { - s.Attribute = &v +// SetCreateTime sets the CreateTime field's value. +func (s *LaunchTemplate) SetCreateTime(v time.Time) *LaunchTemplate { + s.CreateTime = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcAttributeInput) SetDryRun(v bool) *DescribeVpcAttributeInput { - s.DryRun = &v +// SetCreatedBy sets the CreatedBy field's value. +func (s *LaunchTemplate) SetCreatedBy(v string) *LaunchTemplate { + s.CreatedBy = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *DescribeVpcAttributeInput) SetVpcId(v string) *DescribeVpcAttributeInput { - s.VpcId = &v +// SetDefaultVersionNumber sets the DefaultVersionNumber field's value. +func (s *LaunchTemplate) SetDefaultVersionNumber(v int64) *LaunchTemplate { + s.DefaultVersionNumber = &v return s } -// Contains the output of DescribeVpcAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttributeResult -type DescribeVpcAttributeOutput struct { - _ struct{} `type:"structure"` - - // Indicates whether the instances launched in the VPC get DNS hostnames. If - // this attribute is true, instances in the VPC get DNS hostnames; otherwise, - // they do not. - EnableDnsHostnames *AttributeBooleanValue `locationName:"enableDnsHostnames" type:"structure"` - - // Indicates whether DNS resolution is enabled for the VPC. If this attribute - // is true, the Amazon DNS server resolves DNS hostnames for your instances - // to their corresponding IP addresses; otherwise, it does not. - EnableDnsSupport *AttributeBooleanValue `locationName:"enableDnsSupport" type:"structure"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` -} - -// String returns the string representation -func (s DescribeVpcAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s DescribeVpcAttributeOutput) GoString() string { - return s.String() +// SetLatestVersionNumber sets the LatestVersionNumber field's value. +func (s *LaunchTemplate) SetLatestVersionNumber(v int64) *LaunchTemplate { + s.LatestVersionNumber = &v + return s } -// SetEnableDnsHostnames sets the EnableDnsHostnames field's value. -func (s *DescribeVpcAttributeOutput) SetEnableDnsHostnames(v *AttributeBooleanValue) *DescribeVpcAttributeOutput { - s.EnableDnsHostnames = v +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *LaunchTemplate) SetLaunchTemplateId(v string) *LaunchTemplate { + s.LaunchTemplateId = &v return s } -// SetEnableDnsSupport sets the EnableDnsSupport field's value. -func (s *DescribeVpcAttributeOutput) SetEnableDnsSupport(v *AttributeBooleanValue) *DescribeVpcAttributeOutput { - s.EnableDnsSupport = v +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *LaunchTemplate) SetLaunchTemplateName(v string) *LaunchTemplate { + s.LaunchTemplateName = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *DescribeVpcAttributeOutput) SetVpcId(v string) *DescribeVpcAttributeOutput { - s.VpcId = &v +// SetTags sets the Tags field's value. +func (s *LaunchTemplate) SetTags(v []*Tag) *LaunchTemplate { + s.Tags = v return s } -// Contains the parameters for DescribeVpcClassicLinkDnsSupport. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupportRequest -type DescribeVpcClassicLinkDnsSupportInput struct { +// Describes a launch template and overrides. +type LaunchTemplateAndOverridesResponse struct { _ struct{} `type:"structure"` - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - MaxResults *int64 `locationName:"maxResults" min:"5" type:"integer"` - - // The token for the next set of items to return. (You received this token from - // a prior call.) - NextToken *string `locationName:"nextToken" min:"1" type:"string"` + // The launch template. + LaunchTemplateSpecification *FleetLaunchTemplateSpecification `locationName:"launchTemplateSpecification" type:"structure"` - // One or more VPC IDs. - VpcIds []*string `locationNameList:"VpcId" type:"list"` + // Any parameters that you specify override the same parameters in the launch + // template. + Overrides *FleetLaunchTemplateOverrides `locationName:"overrides" type:"structure"` } // String returns the string representation -func (s DescribeVpcClassicLinkDnsSupportInput) String() string { +func (s LaunchTemplateAndOverridesResponse) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcClassicLinkDnsSupportInput) GoString() string { +func (s LaunchTemplateAndOverridesResponse) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DescribeVpcClassicLinkDnsSupportInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DescribeVpcClassicLinkDnsSupportInput"} - if s.MaxResults != nil && *s.MaxResults < 5 { - invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) - } - if s.NextToken != nil && len(*s.NextToken) < 1 { - invalidParams.Add(request.NewErrParamMinLen("NextToken", 1)) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcClassicLinkDnsSupportInput) SetMaxResults(v int64) *DescribeVpcClassicLinkDnsSupportInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcClassicLinkDnsSupportInput) SetNextToken(v string) *DescribeVpcClassicLinkDnsSupportInput { - s.NextToken = &v +// SetLaunchTemplateSpecification sets the LaunchTemplateSpecification field's value. +func (s *LaunchTemplateAndOverridesResponse) SetLaunchTemplateSpecification(v *FleetLaunchTemplateSpecification) *LaunchTemplateAndOverridesResponse { + s.LaunchTemplateSpecification = v return s } -// SetVpcIds sets the VpcIds field's value. -func (s *DescribeVpcClassicLinkDnsSupportInput) SetVpcIds(v []*string) *DescribeVpcClassicLinkDnsSupportInput { - s.VpcIds = v +// SetOverrides sets the Overrides field's value. +func (s *LaunchTemplateAndOverridesResponse) SetOverrides(v *FleetLaunchTemplateOverrides) *LaunchTemplateAndOverridesResponse { + s.Overrides = v return s } -// Contains the output of DescribeVpcClassicLinkDnsSupport. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupportResult -type DescribeVpcClassicLinkDnsSupportOutput struct { +// Describes a block device mapping. +type LaunchTemplateBlockDeviceMapping struct { _ struct{} `type:"structure"` - // The token to use when requesting the next set of items. - NextToken *string `locationName:"nextToken" min:"1" type:"string"` + // The device name. + DeviceName *string `locationName:"deviceName" type:"string"` - // Information about the ClassicLink DNS support status of the VPCs. - Vpcs []*ClassicLinkDnsSupport `locationName:"vpcs" locationNameList:"item" type:"list"` + // Information about the block device for an EBS volume. + Ebs *LaunchTemplateEbsBlockDevice `locationName:"ebs" type:"structure"` + + // Suppresses the specified device included in the block device mapping of the + // AMI. + NoDevice *string `locationName:"noDevice" type:"string"` + + // The virtual device name (ephemeralN). + VirtualName *string `locationName:"virtualName" type:"string"` } // String returns the string representation -func (s DescribeVpcClassicLinkDnsSupportOutput) String() string { +func (s LaunchTemplateBlockDeviceMapping) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcClassicLinkDnsSupportOutput) GoString() string { +func (s LaunchTemplateBlockDeviceMapping) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcClassicLinkDnsSupportOutput) SetNextToken(v string) *DescribeVpcClassicLinkDnsSupportOutput { - s.NextToken = &v +// SetDeviceName sets the DeviceName field's value. +func (s *LaunchTemplateBlockDeviceMapping) SetDeviceName(v string) *LaunchTemplateBlockDeviceMapping { + s.DeviceName = &v return s } -// SetVpcs sets the Vpcs field's value. -func (s *DescribeVpcClassicLinkDnsSupportOutput) SetVpcs(v []*ClassicLinkDnsSupport) *DescribeVpcClassicLinkDnsSupportOutput { - s.Vpcs = v +// SetEbs sets the Ebs field's value. +func (s *LaunchTemplateBlockDeviceMapping) SetEbs(v *LaunchTemplateEbsBlockDevice) *LaunchTemplateBlockDeviceMapping { + s.Ebs = v return s } -// Contains the parameters for DescribeVpcClassicLink. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkRequest -type DescribeVpcClassicLinkInput struct { - _ struct{} `type:"structure"` +// SetNoDevice sets the NoDevice field's value. +func (s *LaunchTemplateBlockDeviceMapping) SetNoDevice(v string) *LaunchTemplateBlockDeviceMapping { + s.NoDevice = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetVirtualName sets the VirtualName field's value. +func (s *LaunchTemplateBlockDeviceMapping) SetVirtualName(v string) *LaunchTemplateBlockDeviceMapping { + s.VirtualName = &v + return s +} - // One or more filters. - // - // * is-classic-link-enabled - Whether the VPC is enabled for ClassicLink - // (true | false). - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` +// Describes a block device mapping. +type LaunchTemplateBlockDeviceMappingRequest struct { + _ struct{} `type:"structure"` + + // The device name (for example, /dev/sdh or xvdh). + DeviceName *string `type:"string"` - // One or more VPCs for which you want to describe the ClassicLink status. - VpcIds []*string `locationName:"VpcId" locationNameList:"VpcId" type:"list"` + // Parameters used to automatically set up EBS volumes when the instance is + // launched. + Ebs *LaunchTemplateEbsBlockDeviceRequest `type:"structure"` + + // Suppresses the specified device included in the block device mapping of the + // AMI. + NoDevice *string `type:"string"` + + // The virtual device name (ephemeralN). Instance store volumes are numbered + // starting from 0. An instance type with 2 available instance store volumes + // can specify mappings for ephemeral0 and ephemeral1. The number of available + // instance store volumes depends on the instance type. After you connect to + // the instance, you must mount the volume. + VirtualName *string `type:"string"` } // String returns the string representation -func (s DescribeVpcClassicLinkInput) String() string { +func (s LaunchTemplateBlockDeviceMappingRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcClassicLinkInput) GoString() string { +func (s LaunchTemplateBlockDeviceMappingRequest) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcClassicLinkInput) SetDryRun(v bool) *DescribeVpcClassicLinkInput { - s.DryRun = &v +// SetDeviceName sets the DeviceName field's value. +func (s *LaunchTemplateBlockDeviceMappingRequest) SetDeviceName(v string) *LaunchTemplateBlockDeviceMappingRequest { + s.DeviceName = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeVpcClassicLinkInput) SetFilters(v []*Filter) *DescribeVpcClassicLinkInput { - s.Filters = v +// SetEbs sets the Ebs field's value. +func (s *LaunchTemplateBlockDeviceMappingRequest) SetEbs(v *LaunchTemplateEbsBlockDeviceRequest) *LaunchTemplateBlockDeviceMappingRequest { + s.Ebs = v return s } -// SetVpcIds sets the VpcIds field's value. -func (s *DescribeVpcClassicLinkInput) SetVpcIds(v []*string) *DescribeVpcClassicLinkInput { - s.VpcIds = v +// SetNoDevice sets the NoDevice field's value. +func (s *LaunchTemplateBlockDeviceMappingRequest) SetNoDevice(v string) *LaunchTemplateBlockDeviceMappingRequest { + s.NoDevice = &v return s } -// Contains the output of DescribeVpcClassicLink. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkResult -type DescribeVpcClassicLinkOutput struct { +// SetVirtualName sets the VirtualName field's value. +func (s *LaunchTemplateBlockDeviceMappingRequest) SetVirtualName(v string) *LaunchTemplateBlockDeviceMappingRequest { + s.VirtualName = &v + return s +} + +// Describes an instance's Capacity Reservation targeting option. You can specify +// only one option at a time. Use the CapacityReservationPreference parameter +// to configure the instance to run in On-Demand capacity or to run in any open +// Capacity Reservation that has matching attributes (instance type, platform, +// Availability Zone). Use the CapacityReservationTarget parameter to explicitly +// target a specific Capacity Reservation. +type LaunchTemplateCapacityReservationSpecificationRequest struct { _ struct{} `type:"structure"` - // The ClassicLink status of one or more VPCs. - Vpcs []*VpcClassicLink `locationName:"vpcSet" locationNameList:"item" type:"list"` + // Indicates the instance's Capacity Reservation preferences. Possible preferences + // include: + // + // * open - The instance can run in any open Capacity Reservation that has + // matching attributes (instance type, platform, Availability Zone). + // + // * none - The instance avoids running in a Capacity Reservation even if + // one is available. The instance runs in On-Demand capacity. + CapacityReservationPreference *string `type:"string" enum:"CapacityReservationPreference"` + + // Information about the target Capacity Reservation. + CapacityReservationTarget *CapacityReservationTarget `type:"structure"` } // String returns the string representation -func (s DescribeVpcClassicLinkOutput) String() string { +func (s LaunchTemplateCapacityReservationSpecificationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcClassicLinkOutput) GoString() string { +func (s LaunchTemplateCapacityReservationSpecificationRequest) GoString() string { return s.String() } -// SetVpcs sets the Vpcs field's value. -func (s *DescribeVpcClassicLinkOutput) SetVpcs(v []*VpcClassicLink) *DescribeVpcClassicLinkOutput { - s.Vpcs = v +// SetCapacityReservationPreference sets the CapacityReservationPreference field's value. +func (s *LaunchTemplateCapacityReservationSpecificationRequest) SetCapacityReservationPreference(v string) *LaunchTemplateCapacityReservationSpecificationRequest { + s.CapacityReservationPreference = &v return s } -// Contains the parameters for DescribeVpcEndpointServices. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicesRequest -type DescribeVpcEndpointServicesInput struct { - _ struct{} `type:"structure"` +// SetCapacityReservationTarget sets the CapacityReservationTarget field's value. +func (s *LaunchTemplateCapacityReservationSpecificationRequest) SetCapacityReservationTarget(v *CapacityReservationTarget) *LaunchTemplateCapacityReservationSpecificationRequest { + s.CapacityReservationTarget = v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` +// Information about the Capacity Reservation targeting option. +type LaunchTemplateCapacityReservationSpecificationResponse struct { + _ struct{} `type:"structure"` - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. + // Indicates the instance's Capacity Reservation preferences. Possible preferences + // include: // - // Constraint: If the value is greater than 1000, we return only 1000 items. - MaxResults *int64 `type:"integer"` + // * open - The instance can run in any open Capacity Reservation that has + // matching attributes (instance type, platform, Availability Zone). + // + // * none - The instance avoids running in a Capacity Reservation even if + // one is available. The instance runs in On-Demand capacity. + CapacityReservationPreference *string `locationName:"capacityReservationPreference" type:"string" enum:"CapacityReservationPreference"` - // The token for the next set of items to return. (You received this token from - // a prior call.) - NextToken *string `type:"string"` + // Information about the target Capacity Reservation. + CapacityReservationTarget *CapacityReservationTargetResponse `locationName:"capacityReservationTarget" type:"structure"` } // String returns the string representation -func (s DescribeVpcEndpointServicesInput) String() string { +func (s LaunchTemplateCapacityReservationSpecificationResponse) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcEndpointServicesInput) GoString() string { +func (s LaunchTemplateCapacityReservationSpecificationResponse) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcEndpointServicesInput) SetDryRun(v bool) *DescribeVpcEndpointServicesInput { - s.DryRun = &v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcEndpointServicesInput) SetMaxResults(v int64) *DescribeVpcEndpointServicesInput { - s.MaxResults = &v +// SetCapacityReservationPreference sets the CapacityReservationPreference field's value. +func (s *LaunchTemplateCapacityReservationSpecificationResponse) SetCapacityReservationPreference(v string) *LaunchTemplateCapacityReservationSpecificationResponse { + s.CapacityReservationPreference = &v return s } -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointServicesInput) SetNextToken(v string) *DescribeVpcEndpointServicesInput { - s.NextToken = &v +// SetCapacityReservationTarget sets the CapacityReservationTarget field's value. +func (s *LaunchTemplateCapacityReservationSpecificationResponse) SetCapacityReservationTarget(v *CapacityReservationTargetResponse) *LaunchTemplateCapacityReservationSpecificationResponse { + s.CapacityReservationTarget = v return s } -// Contains the output of DescribeVpcEndpointServices. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicesResult -type DescribeVpcEndpointServicesOutput struct { +// Describes a launch template and overrides. +type LaunchTemplateConfig struct { _ struct{} `type:"structure"` - // The token to use when requesting the next set of items. If there are no additional - // items to return, the string is empty. - NextToken *string `locationName:"nextToken" type:"string"` + // The launch template. + LaunchTemplateSpecification *FleetLaunchTemplateSpecification `locationName:"launchTemplateSpecification" type:"structure"` - // A list of supported AWS services. - ServiceNames []*string `locationName:"serviceNameSet" locationNameList:"item" type:"list"` + // Any parameters that you specify override the same parameters in the launch + // template. + Overrides []*LaunchTemplateOverrides `locationName:"overrides" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DescribeVpcEndpointServicesOutput) String() string { +func (s LaunchTemplateConfig) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcEndpointServicesOutput) GoString() string { +func (s LaunchTemplateConfig) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointServicesOutput) SetNextToken(v string) *DescribeVpcEndpointServicesOutput { - s.NextToken = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *LaunchTemplateConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LaunchTemplateConfig"} + if s.LaunchTemplateSpecification != nil { + if err := s.LaunchTemplateSpecification.Validate(); err != nil { + invalidParams.AddNested("LaunchTemplateSpecification", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLaunchTemplateSpecification sets the LaunchTemplateSpecification field's value. +func (s *LaunchTemplateConfig) SetLaunchTemplateSpecification(v *FleetLaunchTemplateSpecification) *LaunchTemplateConfig { + s.LaunchTemplateSpecification = v return s } -// SetServiceNames sets the ServiceNames field's value. -func (s *DescribeVpcEndpointServicesOutput) SetServiceNames(v []*string) *DescribeVpcEndpointServicesOutput { - s.ServiceNames = v +// SetOverrides sets the Overrides field's value. +func (s *LaunchTemplateConfig) SetOverrides(v []*LaunchTemplateOverrides) *LaunchTemplateConfig { + s.Overrides = v return s } -// Contains the parameters for DescribeVpcEndpoints. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointsRequest -type DescribeVpcEndpointsInput struct { +// The CPU options for the instance. +type LaunchTemplateCpuOptions struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // One or more filters. - // - // * service-name: The name of the AWS service. - // - // * vpc-id: The ID of the VPC in which the endpoint resides. - // - // * vpc-endpoint-id: The ID of the endpoint. - // - // * vpc-endpoint-state: The state of the endpoint. (pending | available - // | deleting | deleted) - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // The maximum number of items to return for this request. The request returns - // a token that you can specify in a subsequent call to get the next set of - // results. - // - // Constraint: If the value is greater than 1000, we return only 1000 items. - MaxResults *int64 `type:"integer"` - - // The token for the next set of items to return. (You received this token from - // a prior call.) - NextToken *string `type:"string"` + // The number of CPU cores for the instance. + CoreCount *int64 `locationName:"coreCount" type:"integer"` - // One or more endpoint IDs. - VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list"` + // The number of threads per CPU core. + ThreadsPerCore *int64 `locationName:"threadsPerCore" type:"integer"` } // String returns the string representation -func (s DescribeVpcEndpointsInput) String() string { +func (s LaunchTemplateCpuOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcEndpointsInput) GoString() string { +func (s LaunchTemplateCpuOptions) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcEndpointsInput) SetDryRun(v bool) *DescribeVpcEndpointsInput { - s.DryRun = &v - return s -} - -// SetFilters sets the Filters field's value. -func (s *DescribeVpcEndpointsInput) SetFilters(v []*Filter) *DescribeVpcEndpointsInput { - s.Filters = v - return s -} - -// SetMaxResults sets the MaxResults field's value. -func (s *DescribeVpcEndpointsInput) SetMaxResults(v int64) *DescribeVpcEndpointsInput { - s.MaxResults = &v - return s -} - -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointsInput) SetNextToken(v string) *DescribeVpcEndpointsInput { - s.NextToken = &v +// SetCoreCount sets the CoreCount field's value. +func (s *LaunchTemplateCpuOptions) SetCoreCount(v int64) *LaunchTemplateCpuOptions { + s.CoreCount = &v return s } -// SetVpcEndpointIds sets the VpcEndpointIds field's value. -func (s *DescribeVpcEndpointsInput) SetVpcEndpointIds(v []*string) *DescribeVpcEndpointsInput { - s.VpcEndpointIds = v +// SetThreadsPerCore sets the ThreadsPerCore field's value. +func (s *LaunchTemplateCpuOptions) SetThreadsPerCore(v int64) *LaunchTemplateCpuOptions { + s.ThreadsPerCore = &v return s } -// Contains the output of DescribeVpcEndpoints. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointsResult -type DescribeVpcEndpointsOutput struct { +// The CPU options for the instance. Both the core count and threads per core +// must be specified in the request. +type LaunchTemplateCpuOptionsRequest struct { _ struct{} `type:"structure"` - // The token to use when requesting the next set of items. If there are no additional - // items to return, the string is empty. - NextToken *string `locationName:"nextToken" type:"string"` + // The number of CPU cores for the instance. + CoreCount *int64 `type:"integer"` - // Information about the endpoints. - VpcEndpoints []*VpcEndpoint `locationName:"vpcEndpointSet" locationNameList:"item" type:"list"` + // The number of threads per CPU core. To disable multithreading for the instance, + // specify a value of 1. Otherwise, specify the default value of 2. + ThreadsPerCore *int64 `type:"integer"` } // String returns the string representation -func (s DescribeVpcEndpointsOutput) String() string { +func (s LaunchTemplateCpuOptionsRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcEndpointsOutput) GoString() string { +func (s LaunchTemplateCpuOptionsRequest) GoString() string { return s.String() } -// SetNextToken sets the NextToken field's value. -func (s *DescribeVpcEndpointsOutput) SetNextToken(v string) *DescribeVpcEndpointsOutput { - s.NextToken = &v +// SetCoreCount sets the CoreCount field's value. +func (s *LaunchTemplateCpuOptionsRequest) SetCoreCount(v int64) *LaunchTemplateCpuOptionsRequest { + s.CoreCount = &v return s } -// SetVpcEndpoints sets the VpcEndpoints field's value. -func (s *DescribeVpcEndpointsOutput) SetVpcEndpoints(v []*VpcEndpoint) *DescribeVpcEndpointsOutput { - s.VpcEndpoints = v +// SetThreadsPerCore sets the ThreadsPerCore field's value. +func (s *LaunchTemplateCpuOptionsRequest) SetThreadsPerCore(v int64) *LaunchTemplateCpuOptionsRequest { + s.ThreadsPerCore = &v return s } -// Contains the parameters for DescribeVpcPeeringConnections. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnectionsRequest -type DescribeVpcPeeringConnectionsInput struct { +// Describes a block device for an EBS volume. +type LaunchTemplateEbsBlockDevice struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // Indicates whether the EBS volume is deleted on instance termination. + DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - // One or more filters. - // - // * accepter-vpc-info.cidr-block - The IPv4 CIDR block of the peer VPC. - // - // * accepter-vpc-info.owner-id - The AWS account ID of the owner of the - // peer VPC. - // - // * accepter-vpc-info.vpc-id - The ID of the peer VPC. - // - // * expiration-time - The expiration date and time for the VPC peering connection. - // - // * requester-vpc-info.cidr-block - The IPv4 CIDR block of the requester's - // VPC. - // - // * requester-vpc-info.owner-id - The AWS account ID of the owner of the - // requester VPC. - // - // * requester-vpc-info.vpc-id - The ID of the requester VPC. - // - // * status-code - The status of the VPC peering connection (pending-acceptance - // | failed | expired | provisioning | active | deleted | rejected). - // - // * status-message - A message that provides more information about the - // status of the VPC peering connection, if applicable. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * vpc-peering-connection-id - The ID of the VPC peering connection. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // Indicates whether the EBS volume is encrypted. + Encrypted *bool `locationName:"encrypted" type:"boolean"` - // One or more VPC peering connection IDs. - // - // Default: Describes all your VPC peering connections. - VpcPeeringConnectionIds []*string `locationName:"VpcPeeringConnectionId" locationNameList:"item" type:"list"` + // The number of I/O operations per second (IOPS) that the volume supports. + Iops *int64 `locationName:"iops" type:"integer"` + + // The ARN of the AWS Key Management Service (AWS KMS) CMK used for encryption. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + + // The ID of the snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` + + // The size of the volume, in GiB. + VolumeSize *int64 `locationName:"volumeSize" type:"integer"` + + // The volume type. + VolumeType *string `locationName:"volumeType" type:"string" enum:"VolumeType"` } // String returns the string representation -func (s DescribeVpcPeeringConnectionsInput) String() string { +func (s LaunchTemplateEbsBlockDevice) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcPeeringConnectionsInput) GoString() string { +func (s LaunchTemplateEbsBlockDevice) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcPeeringConnectionsInput) SetDryRun(v bool) *DescribeVpcPeeringConnectionsInput { - s.DryRun = &v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *LaunchTemplateEbsBlockDevice) SetDeleteOnTermination(v bool) *LaunchTemplateEbsBlockDevice { + s.DeleteOnTermination = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeVpcPeeringConnectionsInput) SetFilters(v []*Filter) *DescribeVpcPeeringConnectionsInput { - s.Filters = v +// SetEncrypted sets the Encrypted field's value. +func (s *LaunchTemplateEbsBlockDevice) SetEncrypted(v bool) *LaunchTemplateEbsBlockDevice { + s.Encrypted = &v return s } -// SetVpcPeeringConnectionIds sets the VpcPeeringConnectionIds field's value. -func (s *DescribeVpcPeeringConnectionsInput) SetVpcPeeringConnectionIds(v []*string) *DescribeVpcPeeringConnectionsInput { - s.VpcPeeringConnectionIds = v +// SetIops sets the Iops field's value. +func (s *LaunchTemplateEbsBlockDevice) SetIops(v int64) *LaunchTemplateEbsBlockDevice { + s.Iops = &v return s } -// Contains the output of DescribeVpcPeeringConnections. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnectionsResult -type DescribeVpcPeeringConnectionsOutput struct { - _ struct{} `type:"structure"` - - // Information about the VPC peering connections. - VpcPeeringConnections []*VpcPeeringConnection `locationName:"vpcPeeringConnectionSet" locationNameList:"item" type:"list"` +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *LaunchTemplateEbsBlockDevice) SetKmsKeyId(v string) *LaunchTemplateEbsBlockDevice { + s.KmsKeyId = &v + return s } -// String returns the string representation -func (s DescribeVpcPeeringConnectionsOutput) String() string { - return awsutil.Prettify(s) +// SetSnapshotId sets the SnapshotId field's value. +func (s *LaunchTemplateEbsBlockDevice) SetSnapshotId(v string) *LaunchTemplateEbsBlockDevice { + s.SnapshotId = &v + return s } -// GoString returns the string representation -func (s DescribeVpcPeeringConnectionsOutput) GoString() string { - return s.String() +// SetVolumeSize sets the VolumeSize field's value. +func (s *LaunchTemplateEbsBlockDevice) SetVolumeSize(v int64) *LaunchTemplateEbsBlockDevice { + s.VolumeSize = &v + return s } -// SetVpcPeeringConnections sets the VpcPeeringConnections field's value. -func (s *DescribeVpcPeeringConnectionsOutput) SetVpcPeeringConnections(v []*VpcPeeringConnection) *DescribeVpcPeeringConnectionsOutput { - s.VpcPeeringConnections = v +// SetVolumeType sets the VolumeType field's value. +func (s *LaunchTemplateEbsBlockDevice) SetVolumeType(v string) *LaunchTemplateEbsBlockDevice { + s.VolumeType = &v return s } -// Contains the parameters for DescribeVpcs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcsRequest -type DescribeVpcsInput struct { +// The parameters for a block device for an EBS volume. +type LaunchTemplateEbsBlockDeviceRequest struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // Indicates whether the EBS volume is deleted on instance termination. + DeleteOnTermination *bool `type:"boolean"` - // One or more filters. - // - // * cidr - The IPv4 CIDR block of the VPC. The CIDR block you specify must - // exactly match the VPC's CIDR block for information to be returned for - // the VPC. Must contain the slash followed by one or two digits (for example, - // /28). - // - // * dhcp-options-id - The ID of a set of DHCP options. - // - // * ipv6-cidr-block-association.ipv6-cidr-block - An IPv6 CIDR block associated - // with the VPC. - // - // * ipv6-cidr-block-association.association-id - The association ID for - // an IPv6 CIDR block associated with the VPC. - // - // * ipv6-cidr-block-association.state - The state of an IPv6 CIDR block - // associated with the VPC. - // - // * isDefault - Indicates whether the VPC is the default VPC. - // - // * state - The state of the VPC (pending | available). - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. + // Indicates whether the EBS volume is encrypted. Encrypted volumes can only + // be attached to instances that support Amazon EBS encryption. If you are creating + // a volume from a snapshot, you can't specify an encryption value. + Encrypted *bool `type:"boolean"` + + // The number of I/O operations per second (IOPS) that the volume supports. + // For io1, this represents the number of IOPS that are provisioned for the + // volume. For gp2, this represents the baseline performance of the volume and + // the rate at which the volume accumulates I/O credits for bursting. For more + // information about General Purpose SSD baseline performance, I/O credits, + // and bursting, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) + // in the Amazon Elastic Compute Cloud User Guide. // - // * vpc-id - The ID of the VPC. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` + // Condition: This parameter is required for requests to create io1 volumes; + // it is not used in requests to create gp2, st1, sc1, or standard volumes. + Iops *int64 `type:"integer"` - // One or more VPC IDs. + // The ARN of the AWS Key Management Service (AWS KMS) CMK used for encryption. + KmsKeyId *string `type:"string"` + + // The ID of the snapshot. + SnapshotId *string `type:"string"` + + // The size of the volume, in GiB. // - // Default: Describes all your VPCs. - VpcIds []*string `locationName:"VpcId" locationNameList:"VpcId" type:"list"` + // Default: If you're creating the volume from a snapshot and don't specify + // a volume size, the default is the snapshot size. + VolumeSize *int64 `type:"integer"` + + // The volume type. + VolumeType *string `type:"string" enum:"VolumeType"` } // String returns the string representation -func (s DescribeVpcsInput) String() string { +func (s LaunchTemplateEbsBlockDeviceRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpcsInput) GoString() string { +func (s LaunchTemplateEbsBlockDeviceRequest) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpcsInput) SetDryRun(v bool) *DescribeVpcsInput { - s.DryRun = &v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *LaunchTemplateEbsBlockDeviceRequest) SetDeleteOnTermination(v bool) *LaunchTemplateEbsBlockDeviceRequest { + s.DeleteOnTermination = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeVpcsInput) SetFilters(v []*Filter) *DescribeVpcsInput { - s.Filters = v +// SetEncrypted sets the Encrypted field's value. +func (s *LaunchTemplateEbsBlockDeviceRequest) SetEncrypted(v bool) *LaunchTemplateEbsBlockDeviceRequest { + s.Encrypted = &v return s } -// SetVpcIds sets the VpcIds field's value. -func (s *DescribeVpcsInput) SetVpcIds(v []*string) *DescribeVpcsInput { - s.VpcIds = v +// SetIops sets the Iops field's value. +func (s *LaunchTemplateEbsBlockDeviceRequest) SetIops(v int64) *LaunchTemplateEbsBlockDeviceRequest { + s.Iops = &v return s } -// Contains the output of DescribeVpcs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcsResult -type DescribeVpcsOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more VPCs. - Vpcs []*Vpc `locationName:"vpcSet" locationNameList:"item" type:"list"` +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *LaunchTemplateEbsBlockDeviceRequest) SetKmsKeyId(v string) *LaunchTemplateEbsBlockDeviceRequest { + s.KmsKeyId = &v + return s } -// String returns the string representation -func (s DescribeVpcsOutput) String() string { - return awsutil.Prettify(s) +// SetSnapshotId sets the SnapshotId field's value. +func (s *LaunchTemplateEbsBlockDeviceRequest) SetSnapshotId(v string) *LaunchTemplateEbsBlockDeviceRequest { + s.SnapshotId = &v + return s } -// GoString returns the string representation -func (s DescribeVpcsOutput) GoString() string { - return s.String() +// SetVolumeSize sets the VolumeSize field's value. +func (s *LaunchTemplateEbsBlockDeviceRequest) SetVolumeSize(v int64) *LaunchTemplateEbsBlockDeviceRequest { + s.VolumeSize = &v + return s } -// SetVpcs sets the Vpcs field's value. -func (s *DescribeVpcsOutput) SetVpcs(v []*Vpc) *DescribeVpcsOutput { - s.Vpcs = v +// SetVolumeType sets the VolumeType field's value. +func (s *LaunchTemplateEbsBlockDeviceRequest) SetVolumeType(v string) *LaunchTemplateEbsBlockDeviceRequest { + s.VolumeType = &v return s } -// Contains the parameters for DescribeVpnConnections. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnectionsRequest -type DescribeVpnConnectionsInput struct { +// Describes an elastic inference accelerator. +type LaunchTemplateElasticInferenceAccelerator struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * customer-gateway-configuration - The configuration information for the - // customer gateway. - // - // * customer-gateway-id - The ID of a customer gateway associated with the - // VPN connection. - // - // * state - The state of the VPN connection (pending | available | deleting - // | deleted). - // - // * option.static-routes-only - Indicates whether the connection has static - // routes only. Used for devices that do not support Border Gateway Protocol - // (BGP). - // - // * route.destination-cidr-block - The destination CIDR block. This corresponds - // to the subnet used in a customer data center. - // - // * bgp-asn - The BGP Autonomous System Number (ASN) associated with a BGP - // device. - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * type - The type of VPN connection. Currently the only supported type - // is ipsec.1. - // - // * vpn-connection-id - The ID of the VPN connection. - // - // * vpn-gateway-id - The ID of a virtual private gateway associated with - // the VPN connection. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more VPN connection IDs. + // The type of elastic inference accelerator. The possible values are eia1.medium, + // eia1.large, and eia1.xlarge. // - // Default: Describes your VPN connections. - VpnConnectionIds []*string `locationName:"VpnConnectionId" locationNameList:"VpnConnectionId" type:"list"` + // Type is a required field + Type *string `type:"string" required:"true"` } // String returns the string representation -func (s DescribeVpnConnectionsInput) String() string { +func (s LaunchTemplateElasticInferenceAccelerator) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpnConnectionsInput) GoString() string { +func (s LaunchTemplateElasticInferenceAccelerator) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpnConnectionsInput) SetDryRun(v bool) *DescribeVpnConnectionsInput { - s.DryRun = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *LaunchTemplateElasticInferenceAccelerator) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LaunchTemplateElasticInferenceAccelerator"} + if s.Type == nil { + invalidParams.Add(request.NewErrParamRequired("Type")) + } -// SetFilters sets the Filters field's value. -func (s *DescribeVpnConnectionsInput) SetFilters(v []*Filter) *DescribeVpnConnectionsInput { - s.Filters = v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetVpnConnectionIds sets the VpnConnectionIds field's value. -func (s *DescribeVpnConnectionsInput) SetVpnConnectionIds(v []*string) *DescribeVpnConnectionsInput { - s.VpnConnectionIds = v +// SetType sets the Type field's value. +func (s *LaunchTemplateElasticInferenceAccelerator) SetType(v string) *LaunchTemplateElasticInferenceAccelerator { + s.Type = &v return s } -// Contains the output of DescribeVpnConnections. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnectionsResult -type DescribeVpnConnectionsOutput struct { +// Describes an elastic inference accelerator. +type LaunchTemplateElasticInferenceAcceleratorResponse struct { _ struct{} `type:"structure"` - // Information about one or more VPN connections. - VpnConnections []*VpnConnection `locationName:"vpnConnectionSet" locationNameList:"item" type:"list"` + // The type of elastic inference accelerator. The possible values are eia1.medium, + // eia1.large, and eia1.xlarge. + Type *string `locationName:"type" type:"string"` } // String returns the string representation -func (s DescribeVpnConnectionsOutput) String() string { +func (s LaunchTemplateElasticInferenceAcceleratorResponse) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpnConnectionsOutput) GoString() string { +func (s LaunchTemplateElasticInferenceAcceleratorResponse) GoString() string { return s.String() } -// SetVpnConnections sets the VpnConnections field's value. -func (s *DescribeVpnConnectionsOutput) SetVpnConnections(v []*VpnConnection) *DescribeVpnConnectionsOutput { - s.VpnConnections = v +// SetType sets the Type field's value. +func (s *LaunchTemplateElasticInferenceAcceleratorResponse) SetType(v string) *LaunchTemplateElasticInferenceAcceleratorResponse { + s.Type = &v return s } -// Contains the parameters for DescribeVpnGateways. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGatewaysRequest -type DescribeVpnGatewaysInput struct { +// Indicates whether an instance is configured for hibernation. +type LaunchTemplateHibernationOptions struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // One or more filters. - // - // * attachment.state - The current state of the attachment between the gateway - // and the VPC (attaching | attached | detaching | detached). - // - // * attachment.vpc-id - The ID of an attached VPC. - // - // * availability-zone - The Availability Zone for the virtual private gateway - // (if applicable). - // - // * state - The state of the virtual private gateway (pending | available - // | deleting | deleted). - // - // * tag:key=value - The key/value combination of a tag assigned to the resource. - // Specify the key of the tag in the filter name and the value of the tag - // in the filter value. For example, for the tag Purpose=X, specify tag:Purpose - // for the filter name and X for the filter value. - // - // * tag-key - The key of a tag assigned to the resource. This filter is - // independent of the tag-value filter. For example, if you use both the - // filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources - // assigned both the tag key Purpose (regardless of what the tag's value - // is), and the tag value X (regardless of what the tag's key is). If you - // want to list only resources where Purpose is X, see the tag:key=value - // filter. - // - // * tag-value - The value of a tag assigned to the resource. This filter - // is independent of the tag-key filter. - // - // * type - The type of virtual private gateway. Currently the only supported - // type is ipsec.1. - // - // * vpn-gateway-id - The ID of the virtual private gateway. - Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list"` - - // One or more virtual private gateway IDs. - // - // Default: Describes all your virtual private gateways. - VpnGatewayIds []*string `locationName:"VpnGatewayId" locationNameList:"VpnGatewayId" type:"list"` + // If this parameter is set to true, the instance is enabled for hibernation; + // otherwise, it is not enabled for hibernation. + Configured *bool `locationName:"configured" type:"boolean"` } // String returns the string representation -func (s DescribeVpnGatewaysInput) String() string { +func (s LaunchTemplateHibernationOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpnGatewaysInput) GoString() string { +func (s LaunchTemplateHibernationOptions) GoString() string { return s.String() } -// SetDryRun sets the DryRun field's value. -func (s *DescribeVpnGatewaysInput) SetDryRun(v bool) *DescribeVpnGatewaysInput { - s.DryRun = &v +// SetConfigured sets the Configured field's value. +func (s *LaunchTemplateHibernationOptions) SetConfigured(v bool) *LaunchTemplateHibernationOptions { + s.Configured = &v return s } -// SetFilters sets the Filters field's value. -func (s *DescribeVpnGatewaysInput) SetFilters(v []*Filter) *DescribeVpnGatewaysInput { - s.Filters = v - return s +// Indicates whether the instance is configured for hibernation. This parameter +// is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). +type LaunchTemplateHibernationOptionsRequest struct { + _ struct{} `type:"structure"` + + // If you set this parameter to true, the instance is enabled for hibernation. + // + // Default: false + Configured *bool `type:"boolean"` } -// SetVpnGatewayIds sets the VpnGatewayIds field's value. -func (s *DescribeVpnGatewaysInput) SetVpnGatewayIds(v []*string) *DescribeVpnGatewaysInput { - s.VpnGatewayIds = v +// String returns the string representation +func (s LaunchTemplateHibernationOptionsRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LaunchTemplateHibernationOptionsRequest) GoString() string { + return s.String() +} + +// SetConfigured sets the Configured field's value. +func (s *LaunchTemplateHibernationOptionsRequest) SetConfigured(v bool) *LaunchTemplateHibernationOptionsRequest { + s.Configured = &v return s } -// Contains the output of DescribeVpnGateways. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGatewaysResult -type DescribeVpnGatewaysOutput struct { +// Describes an IAM instance profile. +type LaunchTemplateIamInstanceProfileSpecification struct { _ struct{} `type:"structure"` - // Information about one or more virtual private gateways. - VpnGateways []*VpnGateway `locationName:"vpnGatewaySet" locationNameList:"item" type:"list"` + // The Amazon Resource Name (ARN) of the instance profile. + Arn *string `locationName:"arn" type:"string"` + + // The name of the instance profile. + Name *string `locationName:"name" type:"string"` } // String returns the string representation -func (s DescribeVpnGatewaysOutput) String() string { +func (s LaunchTemplateIamInstanceProfileSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DescribeVpnGatewaysOutput) GoString() string { +func (s LaunchTemplateIamInstanceProfileSpecification) GoString() string { return s.String() } -// SetVpnGateways sets the VpnGateways field's value. -func (s *DescribeVpnGatewaysOutput) SetVpnGateways(v []*VpnGateway) *DescribeVpnGatewaysOutput { - s.VpnGateways = v +// SetArn sets the Arn field's value. +func (s *LaunchTemplateIamInstanceProfileSpecification) SetArn(v string) *LaunchTemplateIamInstanceProfileSpecification { + s.Arn = &v return s } -// Contains the parameters for DetachClassicLinkVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpcRequest -type DetachClassicLinkVpcInput struct { - _ struct{} `type:"structure"` +// SetName sets the Name field's value. +func (s *LaunchTemplateIamInstanceProfileSpecification) SetName(v string) *LaunchTemplateIamInstanceProfileSpecification { + s.Name = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// An IAM instance profile. +type LaunchTemplateIamInstanceProfileSpecificationRequest struct { + _ struct{} `type:"structure"` - // The ID of the instance to unlink from the VPC. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + // The Amazon Resource Name (ARN) of the instance profile. + Arn *string `type:"string"` - // The ID of the VPC to which the instance is linked. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // The name of the instance profile. + Name *string `type:"string"` } // String returns the string representation -func (s DetachClassicLinkVpcInput) String() string { +func (s LaunchTemplateIamInstanceProfileSpecificationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DetachClassicLinkVpcInput) GoString() string { +func (s LaunchTemplateIamInstanceProfileSpecificationRequest) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachClassicLinkVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachClassicLinkVpcInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DetachClassicLinkVpcInput) SetDryRun(v bool) *DetachClassicLinkVpcInput { - s.DryRun = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *DetachClassicLinkVpcInput) SetInstanceId(v string) *DetachClassicLinkVpcInput { - s.InstanceId = &v +// SetArn sets the Arn field's value. +func (s *LaunchTemplateIamInstanceProfileSpecificationRequest) SetArn(v string) *LaunchTemplateIamInstanceProfileSpecificationRequest { + s.Arn = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *DetachClassicLinkVpcInput) SetVpcId(v string) *DetachClassicLinkVpcInput { - s.VpcId = &v +// SetName sets the Name field's value. +func (s *LaunchTemplateIamInstanceProfileSpecificationRequest) SetName(v string) *LaunchTemplateIamInstanceProfileSpecificationRequest { + s.Name = &v return s } -// Contains the output of DetachClassicLinkVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpcResult -type DetachClassicLinkVpcOutput struct { +// The market (purchasing) option for the instances. +type LaunchTemplateInstanceMarketOptions struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` + // The market type. + MarketType *string `locationName:"marketType" type:"string" enum:"MarketType"` + + // The options for Spot Instances. + SpotOptions *LaunchTemplateSpotMarketOptions `locationName:"spotOptions" type:"structure"` } // String returns the string representation -func (s DetachClassicLinkVpcOutput) String() string { +func (s LaunchTemplateInstanceMarketOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DetachClassicLinkVpcOutput) GoString() string { +func (s LaunchTemplateInstanceMarketOptions) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *DetachClassicLinkVpcOutput) SetReturn(v bool) *DetachClassicLinkVpcOutput { - s.Return = &v +// SetMarketType sets the MarketType field's value. +func (s *LaunchTemplateInstanceMarketOptions) SetMarketType(v string) *LaunchTemplateInstanceMarketOptions { + s.MarketType = &v return s } -// Contains the parameters for DetachInternetGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGatewayRequest -type DetachInternetGatewayInput struct { - _ struct{} `type:"structure"` +// SetSpotOptions sets the SpotOptions field's value. +func (s *LaunchTemplateInstanceMarketOptions) SetSpotOptions(v *LaunchTemplateSpotMarketOptions) *LaunchTemplateInstanceMarketOptions { + s.SpotOptions = v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// The market (purchasing) option for the instances. +type LaunchTemplateInstanceMarketOptionsRequest struct { + _ struct{} `type:"structure"` - // The ID of the Internet gateway. - // - // InternetGatewayId is a required field - InternetGatewayId *string `locationName:"internetGatewayId" type:"string" required:"true"` + // The market type. + MarketType *string `type:"string" enum:"MarketType"` - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // The options for Spot Instances. + SpotOptions *LaunchTemplateSpotMarketOptionsRequest `type:"structure"` } // String returns the string representation -func (s DetachInternetGatewayInput) String() string { +func (s LaunchTemplateInstanceMarketOptionsRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DetachInternetGatewayInput) GoString() string { +func (s LaunchTemplateInstanceMarketOptionsRequest) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachInternetGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachInternetGatewayInput"} - if s.InternetGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("InternetGatewayId")) - } - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *DetachInternetGatewayInput) SetDryRun(v bool) *DetachInternetGatewayInput { - s.DryRun = &v - return s -} - -// SetInternetGatewayId sets the InternetGatewayId field's value. -func (s *DetachInternetGatewayInput) SetInternetGatewayId(v string) *DetachInternetGatewayInput { - s.InternetGatewayId = &v +// SetMarketType sets the MarketType field's value. +func (s *LaunchTemplateInstanceMarketOptionsRequest) SetMarketType(v string) *LaunchTemplateInstanceMarketOptionsRequest { + s.MarketType = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *DetachInternetGatewayInput) SetVpcId(v string) *DetachInternetGatewayInput { - s.VpcId = &v +// SetSpotOptions sets the SpotOptions field's value. +func (s *LaunchTemplateInstanceMarketOptionsRequest) SetSpotOptions(v *LaunchTemplateSpotMarketOptionsRequest) *LaunchTemplateInstanceMarketOptionsRequest { + s.SpotOptions = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGatewayOutput -type DetachInternetGatewayOutput struct { +// Describes a network interface. +type LaunchTemplateInstanceNetworkInterfaceSpecification struct { _ struct{} `type:"structure"` + + // Indicates whether to associate a public IPv4 address with eth0 for a new + // network interface. + AssociatePublicIpAddress *bool `locationName:"associatePublicIpAddress" type:"boolean"` + + // Indicates whether the network interface is deleted when the instance is terminated. + DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` + + // A description for the network interface. + Description *string `locationName:"description" type:"string"` + + // The device index for the network interface attachment. + DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` + + // The IDs of one or more security groups. + Groups []*string `locationName:"groupSet" locationNameList:"groupId" type:"list"` + + // The type of network interface. + InterfaceType *string `locationName:"interfaceType" type:"string"` + + // The number of IPv6 addresses for the network interface. + Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` + + // The IPv6 addresses for the network interface. + Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6AddressesSet" locationNameList:"item" type:"list"` + + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + + // The primary private IPv4 address of the network interface. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + + // One or more private IPv4 addresses. + PrivateIpAddresses []*PrivateIpAddressSpecification `locationName:"privateIpAddressesSet" locationNameList:"item" type:"list"` + + // The number of secondary private IPv4 addresses for the network interface. + SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` + + // The ID of the subnet for the network interface. + SubnetId *string `locationName:"subnetId" type:"string"` } // String returns the string representation -func (s DetachInternetGatewayOutput) String() string { +func (s LaunchTemplateInstanceNetworkInterfaceSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DetachInternetGatewayOutput) GoString() string { +func (s LaunchTemplateInstanceNetworkInterfaceSpecification) GoString() string { return s.String() } -// Contains the parameters for DetachNetworkInterface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterfaceRequest -type DetachNetworkInterfaceInput struct { - _ struct{} `type:"structure"` - - // The ID of the attachment. - // - // AttachmentId is a required field - AttachmentId *string `locationName:"attachmentId" type:"string" required:"true"` +// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetAssociatePublicIpAddress(v bool) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.AssociatePublicIpAddress = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetDeleteOnTermination(v bool) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.DeleteOnTermination = &v + return s +} - // Specifies whether to force a detachment. - Force *bool `locationName:"force" type:"boolean"` +// SetDescription sets the Description field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetDescription(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.Description = &v + return s } -// String returns the string representation -func (s DetachNetworkInterfaceInput) String() string { - return awsutil.Prettify(s) +// SetDeviceIndex sets the DeviceIndex field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetDeviceIndex(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.DeviceIndex = &v + return s } -// GoString returns the string representation -func (s DetachNetworkInterfaceInput) GoString() string { - return s.String() +// SetGroups sets the Groups field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetGroups(v []*string) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.Groups = v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachNetworkInterfaceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachNetworkInterfaceInput"} - if s.AttachmentId == nil { - invalidParams.Add(request.NewErrParamRequired("AttachmentId")) - } +// SetInterfaceType sets the InterfaceType field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetInterfaceType(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.InterfaceType = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetIpv6AddressCount sets the Ipv6AddressCount field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetIpv6AddressCount(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.Ipv6AddressCount = &v + return s } -// SetAttachmentId sets the AttachmentId field's value. -func (s *DetachNetworkInterfaceInput) SetAttachmentId(v string) *DetachNetworkInterfaceInput { - s.AttachmentId = &v +// SetIpv6Addresses sets the Ipv6Addresses field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetIpv6Addresses(v []*InstanceIpv6Address) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.Ipv6Addresses = v return s } -// SetDryRun sets the DryRun field's value. -func (s *DetachNetworkInterfaceInput) SetDryRun(v bool) *DetachNetworkInterfaceInput { - s.DryRun = &v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetNetworkInterfaceId(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.NetworkInterfaceId = &v return s } -// SetForce sets the Force field's value. -func (s *DetachNetworkInterfaceInput) SetForce(v bool) *DetachNetworkInterfaceInput { - s.Force = &v +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetPrivateIpAddress(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.PrivateIpAddress = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterfaceOutput -type DetachNetworkInterfaceOutput struct { - _ struct{} `type:"structure"` +// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.PrivateIpAddresses = v + return s } -// String returns the string representation -func (s DetachNetworkInterfaceOutput) String() string { - return awsutil.Prettify(s) +// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetSecondaryPrivateIpAddressCount(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.SecondaryPrivateIpAddressCount = &v + return s } -// GoString returns the string representation -func (s DetachNetworkInterfaceOutput) GoString() string { - return s.String() +// SetSubnetId sets the SubnetId field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecification) SetSubnetId(v string) *LaunchTemplateInstanceNetworkInterfaceSpecification { + s.SubnetId = &v + return s } -// Contains the parameters for DetachVolume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVolumeRequest -type DetachVolumeInput struct { +// The parameters for a network interface. +type LaunchTemplateInstanceNetworkInterfaceSpecificationRequest struct { _ struct{} `type:"structure"` - // The device name. - Device *string `type:"string"` + // Associates a public IPv4 address with eth0 for a new network interface. + AssociatePublicIpAddress *bool `type:"boolean"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // Indicates whether the network interface is deleted when the instance is terminated. + DeleteOnTermination *bool `type:"boolean"` - // Forces detachment if the previous detachment attempt did not occur cleanly - // (for example, logging into an instance, unmounting the volume, and detaching - // normally). This option can lead to data loss or a corrupted file system. - // Use this option only as a last resort to detach a volume from a failed instance. - // The instance won't have an opportunity to flush file system caches or file - // system metadata. If you use this option, you must perform file system check - // and repair procedures. - Force *bool `type:"boolean"` + // A description for the network interface. + Description *string `type:"string"` - // The ID of the instance. - InstanceId *string `type:"string"` + // The device index for the network interface attachment. + DeviceIndex *int64 `type:"integer"` - // The ID of the volume. + // The IDs of one or more security groups. + Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + + // The type of network interface. To create an Elastic Fabric Adapter (EFA), + // specify efa. For more information, see Elastic Fabric Adapter (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) + // in the Amazon Elastic Compute Cloud User Guide. // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` + // If you are not creating an EFA, specify interface or omit this parameter. + // + // Valid values: interface | efa + InterfaceType *string `type:"string"` + + // The number of IPv6 addresses to assign to a network interface. Amazon EC2 + // automatically selects the IPv6 addresses from the subnet range. You can't + // use this option if specifying specific IPv6 addresses. + Ipv6AddressCount *int64 `type:"integer"` + + // One or more specific IPv6 addresses from the IPv6 CIDR block range of your + // subnet. You can't use this option if you're specifying a number of IPv6 addresses. + Ipv6Addresses []*InstanceIpv6AddressRequest `locationNameList:"InstanceIpv6Address" type:"list"` + + // The ID of the network interface. + NetworkInterfaceId *string `type:"string"` + + // The primary private IPv4 address of the network interface. + PrivateIpAddress *string `type:"string"` + + // One or more private IPv4 addresses. + PrivateIpAddresses []*PrivateIpAddressSpecification `locationNameList:"item" type:"list"` + + // The number of secondary private IPv4 addresses to assign to a network interface. + SecondaryPrivateIpAddressCount *int64 `type:"integer"` + + // The ID of the subnet for the network interface. + SubnetId *string `type:"string"` } // String returns the string representation -func (s DetachVolumeInput) String() string { +func (s LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DetachVolumeInput) GoString() string { +func (s LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachVolumeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetAssociatePublicIpAddress(v bool) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.AssociatePublicIpAddress = &v + return s } -// SetDevice sets the Device field's value. -func (s *DetachVolumeInput) SetDevice(v string) *DetachVolumeInput { - s.Device = &v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetDeleteOnTermination(v bool) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.DeleteOnTermination = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DetachVolumeInput) SetDryRun(v bool) *DetachVolumeInput { - s.DryRun = &v +// SetDescription sets the Description field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetDescription(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.Description = &v return s } -// SetForce sets the Force field's value. -func (s *DetachVolumeInput) SetForce(v bool) *DetachVolumeInput { - s.Force = &v +// SetDeviceIndex sets the DeviceIndex field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetDeviceIndex(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.DeviceIndex = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *DetachVolumeInput) SetInstanceId(v string) *DetachVolumeInput { - s.InstanceId = &v +// SetGroups sets the Groups field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetGroups(v []*string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.Groups = v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *DetachVolumeInput) SetVolumeId(v string) *DetachVolumeInput { - s.VolumeId = &v +// SetInterfaceType sets the InterfaceType field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetInterfaceType(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.InterfaceType = &v return s } -// Contains the parameters for DetachVpnGateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGatewayRequest -type DetachVpnGatewayInput struct { - _ struct{} `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the VPC. - // - // VpcId is a required field - VpcId *string `type:"string" required:"true"` - - // The ID of the virtual private gateway. - // - // VpnGatewayId is a required field - VpnGatewayId *string `type:"string" required:"true"` +// SetIpv6AddressCount sets the Ipv6AddressCount field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetIpv6AddressCount(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.Ipv6AddressCount = &v + return s } -// String returns the string representation -func (s DetachVpnGatewayInput) String() string { - return awsutil.Prettify(s) +// SetIpv6Addresses sets the Ipv6Addresses field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetIpv6Addresses(v []*InstanceIpv6AddressRequest) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.Ipv6Addresses = v + return s } -// GoString returns the string representation -func (s DetachVpnGatewayInput) GoString() string { - return s.String() +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetNetworkInterfaceId(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.NetworkInterfaceId = &v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DetachVpnGatewayInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DetachVpnGatewayInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - if s.VpnGatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("VpnGatewayId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetPrivateIpAddress(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.PrivateIpAddress = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DetachVpnGatewayInput) SetDryRun(v bool) *DetachVpnGatewayInput { - s.DryRun = &v +// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.PrivateIpAddresses = v return s } -// SetVpcId sets the VpcId field's value. -func (s *DetachVpnGatewayInput) SetVpcId(v string) *DetachVpnGatewayInput { - s.VpcId = &v +// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetSecondaryPrivateIpAddressCount(v int64) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.SecondaryPrivateIpAddressCount = &v return s } -// SetVpnGatewayId sets the VpnGatewayId field's value. -func (s *DetachVpnGatewayInput) SetVpnGatewayId(v string) *DetachVpnGatewayInput { - s.VpnGatewayId = &v +// SetSubnetId sets the SubnetId field's value. +func (s *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) SetSubnetId(v string) *LaunchTemplateInstanceNetworkInterfaceSpecificationRequest { + s.SubnetId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGatewayOutput -type DetachVpnGatewayOutput struct { +// Describes a license configuration. +type LaunchTemplateLicenseConfiguration struct { _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the license configuration. + LicenseConfigurationArn *string `locationName:"licenseConfigurationArn" type:"string"` } // String returns the string representation -func (s DetachVpnGatewayOutput) String() string { +func (s LaunchTemplateLicenseConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DetachVpnGatewayOutput) GoString() string { +func (s LaunchTemplateLicenseConfiguration) GoString() string { return s.String() } -// Describes a DHCP configuration option. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DhcpConfiguration -type DhcpConfiguration struct { - _ struct{} `type:"structure"` +// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. +func (s *LaunchTemplateLicenseConfiguration) SetLicenseConfigurationArn(v string) *LaunchTemplateLicenseConfiguration { + s.LicenseConfigurationArn = &v + return s +} - // The name of a DHCP option. - Key *string `locationName:"key" type:"string"` +// Describes a license configuration. +type LaunchTemplateLicenseConfigurationRequest struct { + _ struct{} `type:"structure"` - // One or more values for the DHCP option. - Values []*AttributeValue `locationName:"valueSet" locationNameList:"item" type:"list"` + // The Amazon Resource Name (ARN) of the license configuration. + LicenseConfigurationArn *string `type:"string"` } // String returns the string representation -func (s DhcpConfiguration) String() string { +func (s LaunchTemplateLicenseConfigurationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DhcpConfiguration) GoString() string { +func (s LaunchTemplateLicenseConfigurationRequest) GoString() string { return s.String() } -// SetKey sets the Key field's value. -func (s *DhcpConfiguration) SetKey(v string) *DhcpConfiguration { - s.Key = &v - return s -} - -// SetValues sets the Values field's value. -func (s *DhcpConfiguration) SetValues(v []*AttributeValue) *DhcpConfiguration { - s.Values = v +// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. +func (s *LaunchTemplateLicenseConfigurationRequest) SetLicenseConfigurationArn(v string) *LaunchTemplateLicenseConfigurationRequest { + s.LicenseConfigurationArn = &v return s } -// Describes a set of DHCP options. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DhcpOptions -type DhcpOptions struct { +// Describes overrides for a launch template. +type LaunchTemplateOverrides struct { _ struct{} `type:"structure"` - // One or more DHCP options in the set. - DhcpConfigurations []*DhcpConfiguration `locationName:"dhcpConfigurationSet" locationNameList:"item" type:"list"` + // The Availability Zone in which to launch the instances. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The ID of the set of DHCP options. - DhcpOptionsId *string `locationName:"dhcpOptionsId" type:"string"` + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - // Any tags assigned to the DHCP options set. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The priority for the launch template override. If OnDemandAllocationStrategy + // is set to prioritized, Spot Fleet uses priority to determine which launch + // template override to use first in fulfilling On-Demand capacity. The highest + // priority is launched first. Valid values are whole numbers starting at 0. + // The lower the number, the higher the priority. If no number is set, the launch + // template override has the lowest priority. + Priority *float64 `locationName:"priority" type:"double"` + + // The maximum price per unit hour that you are willing to pay for a Spot Instance. + SpotPrice *string `locationName:"spotPrice" type:"string"` + + // The ID of the subnet in which to launch the instances. + SubnetId *string `locationName:"subnetId" type:"string"` + + // The number of units provided by the specified instance type. + WeightedCapacity *float64 `locationName:"weightedCapacity" type:"double"` } // String returns the string representation -func (s DhcpOptions) String() string { +func (s LaunchTemplateOverrides) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DhcpOptions) GoString() string { +func (s LaunchTemplateOverrides) GoString() string { return s.String() } -// SetDhcpConfigurations sets the DhcpConfigurations field's value. -func (s *DhcpOptions) SetDhcpConfigurations(v []*DhcpConfiguration) *DhcpOptions { - s.DhcpConfigurations = v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *LaunchTemplateOverrides) SetAvailabilityZone(v string) *LaunchTemplateOverrides { + s.AvailabilityZone = &v return s } -// SetDhcpOptionsId sets the DhcpOptionsId field's value. -func (s *DhcpOptions) SetDhcpOptionsId(v string) *DhcpOptions { - s.DhcpOptionsId = &v +// SetInstanceType sets the InstanceType field's value. +func (s *LaunchTemplateOverrides) SetInstanceType(v string) *LaunchTemplateOverrides { + s.InstanceType = &v return s } -// SetTags sets the Tags field's value. -func (s *DhcpOptions) SetTags(v []*Tag) *DhcpOptions { - s.Tags = v +// SetPriority sets the Priority field's value. +func (s *LaunchTemplateOverrides) SetPriority(v float64) *LaunchTemplateOverrides { + s.Priority = &v return s } -// Contains the parameters for DisableVgwRoutePropagation. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagationRequest -type DisableVgwRoutePropagationInput struct { +// SetSpotPrice sets the SpotPrice field's value. +func (s *LaunchTemplateOverrides) SetSpotPrice(v string) *LaunchTemplateOverrides { + s.SpotPrice = &v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *LaunchTemplateOverrides) SetSubnetId(v string) *LaunchTemplateOverrides { + s.SubnetId = &v + return s +} + +// SetWeightedCapacity sets the WeightedCapacity field's value. +func (s *LaunchTemplateOverrides) SetWeightedCapacity(v float64) *LaunchTemplateOverrides { + s.WeightedCapacity = &v + return s +} + +// Describes the placement of an instance. +type LaunchTemplatePlacement struct { _ struct{} `type:"structure"` - // The ID of the virtual private gateway. - // - // GatewayId is a required field - GatewayId *string `type:"string" required:"true"` + // The affinity setting for the instance on the Dedicated Host. + Affinity *string `locationName:"affinity" type:"string"` - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `type:"string" required:"true"` + // The Availability Zone of the instance. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + + // The name of the placement group for the instance. + GroupName *string `locationName:"groupName" type:"string"` + + // The ID of the Dedicated Host for the instance. + HostId *string `locationName:"hostId" type:"string"` + + // Reserved for future use. + SpreadDomain *string `locationName:"spreadDomain" type:"string"` + + // The tenancy of the instance (if the instance is running in a VPC). An instance + // with a tenancy of dedicated runs on single-tenant hardware. + Tenancy *string `locationName:"tenancy" type:"string" enum:"Tenancy"` } // String returns the string representation -func (s DisableVgwRoutePropagationInput) String() string { +func (s LaunchTemplatePlacement) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisableVgwRoutePropagationInput) GoString() string { +func (s LaunchTemplatePlacement) GoString() string { return s.String() -} - -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisableVgwRoutePropagationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisableVgwRoutePropagationInput"} - if s.GatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("GatewayId")) - } - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetAffinity sets the Affinity field's value. +func (s *LaunchTemplatePlacement) SetAffinity(v string) *LaunchTemplatePlacement { + s.Affinity = &v + return s } -// SetGatewayId sets the GatewayId field's value. -func (s *DisableVgwRoutePropagationInput) SetGatewayId(v string) *DisableVgwRoutePropagationInput { - s.GatewayId = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *LaunchTemplatePlacement) SetAvailabilityZone(v string) *LaunchTemplatePlacement { + s.AvailabilityZone = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *DisableVgwRoutePropagationInput) SetRouteTableId(v string) *DisableVgwRoutePropagationInput { - s.RouteTableId = &v +// SetGroupName sets the GroupName field's value. +func (s *LaunchTemplatePlacement) SetGroupName(v string) *LaunchTemplatePlacement { + s.GroupName = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagationOutput -type DisableVgwRoutePropagationOutput struct { - _ struct{} `type:"structure"` +// SetHostId sets the HostId field's value. +func (s *LaunchTemplatePlacement) SetHostId(v string) *LaunchTemplatePlacement { + s.HostId = &v + return s } -// String returns the string representation -func (s DisableVgwRoutePropagationOutput) String() string { - return awsutil.Prettify(s) +// SetSpreadDomain sets the SpreadDomain field's value. +func (s *LaunchTemplatePlacement) SetSpreadDomain(v string) *LaunchTemplatePlacement { + s.SpreadDomain = &v + return s } -// GoString returns the string representation -func (s DisableVgwRoutePropagationOutput) GoString() string { - return s.String() +// SetTenancy sets the Tenancy field's value. +func (s *LaunchTemplatePlacement) SetTenancy(v string) *LaunchTemplatePlacement { + s.Tenancy = &v + return s } -// Contains the parameters for DisableVpcClassicLinkDnsSupport. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupportRequest -type DisableVpcClassicLinkDnsSupportInput struct { +// Describes the placement of an instance. +type LaunchTemplatePlacementRequest struct { _ struct{} `type:"structure"` - // The ID of the VPC. - VpcId *string `type:"string"` + // The affinity setting for an instance on a Dedicated Host. + Affinity *string `type:"string"` + + // The Availability Zone for the instance. + AvailabilityZone *string `type:"string"` + + // The name of the placement group for the instance. + GroupName *string `type:"string"` + + // The ID of the Dedicated Host for the instance. + HostId *string `type:"string"` + + // Reserved for future use. + SpreadDomain *string `type:"string"` + + // The tenancy of the instance (if the instance is running in a VPC). An instance + // with a tenancy of dedicated runs on single-tenant hardware. + Tenancy *string `type:"string" enum:"Tenancy"` } // String returns the string representation -func (s DisableVpcClassicLinkDnsSupportInput) String() string { +func (s LaunchTemplatePlacementRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisableVpcClassicLinkDnsSupportInput) GoString() string { +func (s LaunchTemplatePlacementRequest) GoString() string { return s.String() } -// SetVpcId sets the VpcId field's value. -func (s *DisableVpcClassicLinkDnsSupportInput) SetVpcId(v string) *DisableVpcClassicLinkDnsSupportInput { - s.VpcId = &v +// SetAffinity sets the Affinity field's value. +func (s *LaunchTemplatePlacementRequest) SetAffinity(v string) *LaunchTemplatePlacementRequest { + s.Affinity = &v return s } -// Contains the output of DisableVpcClassicLinkDnsSupport. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupportResult -type DisableVpcClassicLinkDnsSupportOutput struct { - _ struct{} `type:"structure"` +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *LaunchTemplatePlacementRequest) SetAvailabilityZone(v string) *LaunchTemplatePlacementRequest { + s.AvailabilityZone = &v + return s +} - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` +// SetGroupName sets the GroupName field's value. +func (s *LaunchTemplatePlacementRequest) SetGroupName(v string) *LaunchTemplatePlacementRequest { + s.GroupName = &v + return s } -// String returns the string representation -func (s DisableVpcClassicLinkDnsSupportOutput) String() string { - return awsutil.Prettify(s) +// SetHostId sets the HostId field's value. +func (s *LaunchTemplatePlacementRequest) SetHostId(v string) *LaunchTemplatePlacementRequest { + s.HostId = &v + return s } -// GoString returns the string representation -func (s DisableVpcClassicLinkDnsSupportOutput) GoString() string { - return s.String() +// SetSpreadDomain sets the SpreadDomain field's value. +func (s *LaunchTemplatePlacementRequest) SetSpreadDomain(v string) *LaunchTemplatePlacementRequest { + s.SpreadDomain = &v + return s } -// SetReturn sets the Return field's value. -func (s *DisableVpcClassicLinkDnsSupportOutput) SetReturn(v bool) *DisableVpcClassicLinkDnsSupportOutput { - s.Return = &v +// SetTenancy sets the Tenancy field's value. +func (s *LaunchTemplatePlacementRequest) SetTenancy(v string) *LaunchTemplatePlacementRequest { + s.Tenancy = &v return s } -// Contains the parameters for DisableVpcClassicLink. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkRequest -type DisableVpcClassicLinkInput struct { +// The launch template to use. You must specify either the launch template ID +// or launch template name in the request, but not both. +type LaunchTemplateSpecification struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ID of the launch template. + LaunchTemplateId *string `type:"string"` - // The ID of the VPC. + // The name of the launch template. + LaunchTemplateName *string `type:"string"` + + // The version number of the launch template. // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // Default: The default version for the launch template. + Version *string `type:"string"` } // String returns the string representation -func (s DisableVpcClassicLinkInput) String() string { +func (s LaunchTemplateSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisableVpcClassicLinkInput) GoString() string { +func (s LaunchTemplateSpecification) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisableVpcClassicLinkInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisableVpcClassicLinkInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *LaunchTemplateSpecification) SetLaunchTemplateId(v string) *LaunchTemplateSpecification { + s.LaunchTemplateId = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *DisableVpcClassicLinkInput) SetDryRun(v bool) *DisableVpcClassicLinkInput { - s.DryRun = &v +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *LaunchTemplateSpecification) SetLaunchTemplateName(v string) *LaunchTemplateSpecification { + s.LaunchTemplateName = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *DisableVpcClassicLinkInput) SetVpcId(v string) *DisableVpcClassicLinkInput { - s.VpcId = &v +// SetVersion sets the Version field's value. +func (s *LaunchTemplateSpecification) SetVersion(v string) *LaunchTemplateSpecification { + s.Version = &v return s } -// Contains the output of DisableVpcClassicLink. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkResult -type DisableVpcClassicLinkOutput struct { +// The options for Spot Instances. +type LaunchTemplateSpotMarketOptions struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` + // The required duration for the Spot Instances (also known as Spot blocks), + // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, + // or 360). + BlockDurationMinutes *int64 `locationName:"blockDurationMinutes" type:"integer"` + + // The behavior when a Spot Instance is interrupted. + InstanceInterruptionBehavior *string `locationName:"instanceInterruptionBehavior" type:"string" enum:"InstanceInterruptionBehavior"` + + // The maximum hourly price you're willing to pay for the Spot Instances. + MaxPrice *string `locationName:"maxPrice" type:"string"` + + // The Spot Instance request type. + SpotInstanceType *string `locationName:"spotInstanceType" type:"string" enum:"SpotInstanceType"` + + // The end date of the request. For a one-time request, the request remains + // active until all instances launch, the request is canceled, or this date + // is reached. If the request is persistent, it remains active until it is canceled + // or this date and time is reached. + ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` } // String returns the string representation -func (s DisableVpcClassicLinkOutput) String() string { +func (s LaunchTemplateSpotMarketOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisableVpcClassicLinkOutput) GoString() string { +func (s LaunchTemplateSpotMarketOptions) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *DisableVpcClassicLinkOutput) SetReturn(v bool) *DisableVpcClassicLinkOutput { - s.Return = &v +// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. +func (s *LaunchTemplateSpotMarketOptions) SetBlockDurationMinutes(v int64) *LaunchTemplateSpotMarketOptions { + s.BlockDurationMinutes = &v return s } -// Contains the parameters for DisassociateAddress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddressRequest -type DisassociateAddressInput struct { +// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. +func (s *LaunchTemplateSpotMarketOptions) SetInstanceInterruptionBehavior(v string) *LaunchTemplateSpotMarketOptions { + s.InstanceInterruptionBehavior = &v + return s +} + +// SetMaxPrice sets the MaxPrice field's value. +func (s *LaunchTemplateSpotMarketOptions) SetMaxPrice(v string) *LaunchTemplateSpotMarketOptions { + s.MaxPrice = &v + return s +} + +// SetSpotInstanceType sets the SpotInstanceType field's value. +func (s *LaunchTemplateSpotMarketOptions) SetSpotInstanceType(v string) *LaunchTemplateSpotMarketOptions { + s.SpotInstanceType = &v + return s +} + +// SetValidUntil sets the ValidUntil field's value. +func (s *LaunchTemplateSpotMarketOptions) SetValidUntil(v time.Time) *LaunchTemplateSpotMarketOptions { + s.ValidUntil = &v + return s +} + +// The options for Spot Instances. +type LaunchTemplateSpotMarketOptionsRequest struct { _ struct{} `type:"structure"` - // [EC2-VPC] The association ID. Required for EC2-VPC. - AssociationId *string `type:"string"` + // The required duration for the Spot Instances (also known as Spot blocks), + // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, + // or 360). + BlockDurationMinutes *int64 `type:"integer"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The behavior when a Spot Instance is interrupted. The default is terminate. + InstanceInterruptionBehavior *string `type:"string" enum:"InstanceInterruptionBehavior"` - // [EC2-Classic] The Elastic IP address. Required for EC2-Classic. - PublicIp *string `type:"string"` + // The maximum hourly price you're willing to pay for the Spot Instances. + MaxPrice *string `type:"string"` + + // The Spot Instance request type. + SpotInstanceType *string `type:"string" enum:"SpotInstanceType"` + + // The end date of the request. For a one-time request, the request remains + // active until all instances launch, the request is canceled, or this date + // is reached. If the request is persistent, it remains active until it is canceled + // or this date and time is reached. The default end date is 7 days from the + // current date. + ValidUntil *time.Time `type:"timestamp"` } // String returns the string representation -func (s DisassociateAddressInput) String() string { +func (s LaunchTemplateSpotMarketOptionsRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisassociateAddressInput) GoString() string { +func (s LaunchTemplateSpotMarketOptionsRequest) GoString() string { return s.String() } -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateAddressInput) SetAssociationId(v string) *DisassociateAddressInput { - s.AssociationId = &v +// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. +func (s *LaunchTemplateSpotMarketOptionsRequest) SetBlockDurationMinutes(v int64) *LaunchTemplateSpotMarketOptionsRequest { + s.BlockDurationMinutes = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DisassociateAddressInput) SetDryRun(v bool) *DisassociateAddressInput { - s.DryRun = &v +// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. +func (s *LaunchTemplateSpotMarketOptionsRequest) SetInstanceInterruptionBehavior(v string) *LaunchTemplateSpotMarketOptionsRequest { + s.InstanceInterruptionBehavior = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *DisassociateAddressInput) SetPublicIp(v string) *DisassociateAddressInput { - s.PublicIp = &v +// SetMaxPrice sets the MaxPrice field's value. +func (s *LaunchTemplateSpotMarketOptionsRequest) SetMaxPrice(v string) *LaunchTemplateSpotMarketOptionsRequest { + s.MaxPrice = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddressOutput -type DisassociateAddressOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s DisassociateAddressOutput) String() string { - return awsutil.Prettify(s) +// SetSpotInstanceType sets the SpotInstanceType field's value. +func (s *LaunchTemplateSpotMarketOptionsRequest) SetSpotInstanceType(v string) *LaunchTemplateSpotMarketOptionsRequest { + s.SpotInstanceType = &v + return s } -// GoString returns the string representation -func (s DisassociateAddressOutput) GoString() string { - return s.String() +// SetValidUntil sets the ValidUntil field's value. +func (s *LaunchTemplateSpotMarketOptionsRequest) SetValidUntil(v time.Time) *LaunchTemplateSpotMarketOptionsRequest { + s.ValidUntil = &v + return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfileRequest -type DisassociateIamInstanceProfileInput struct { +// The tag specification for the launch template. +type LaunchTemplateTagSpecification struct { _ struct{} `type:"structure"` - // The ID of the IAM instance profile association. - // - // AssociationId is a required field - AssociationId *string `type:"string" required:"true"` + // The type of resource. + ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` + + // The tags for the resource. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DisassociateIamInstanceProfileInput) String() string { +func (s LaunchTemplateTagSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisassociateIamInstanceProfileInput) GoString() string { +func (s LaunchTemplateTagSpecification) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateIamInstanceProfileInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateIamInstanceProfileInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetResourceType sets the ResourceType field's value. +func (s *LaunchTemplateTagSpecification) SetResourceType(v string) *LaunchTemplateTagSpecification { + s.ResourceType = &v + return s } -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateIamInstanceProfileInput) SetAssociationId(v string) *DisassociateIamInstanceProfileInput { - s.AssociationId = &v +// SetTags sets the Tags field's value. +func (s *LaunchTemplateTagSpecification) SetTags(v []*Tag) *LaunchTemplateTagSpecification { + s.Tags = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfileResult -type DisassociateIamInstanceProfileOutput struct { +// The tags specification for the launch template. +type LaunchTemplateTagSpecificationRequest struct { _ struct{} `type:"structure"` - // Information about the IAM instance profile association. - IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` + // The type of resource to tag. Currently, the resource types that support tagging + // on creation are instance and volume. To tag a resource after it has been + // created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). + ResourceType *string `type:"string" enum:"ResourceType"` + + // The tags to apply to the resource. + Tags []*Tag `locationName:"Tag" locationNameList:"item" type:"list"` } // String returns the string representation -func (s DisassociateIamInstanceProfileOutput) String() string { +func (s LaunchTemplateTagSpecificationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisassociateIamInstanceProfileOutput) GoString() string { +func (s LaunchTemplateTagSpecificationRequest) GoString() string { return s.String() } -// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. -func (s *DisassociateIamInstanceProfileOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *DisassociateIamInstanceProfileOutput { - s.IamInstanceProfileAssociation = v +// SetResourceType sets the ResourceType field's value. +func (s *LaunchTemplateTagSpecificationRequest) SetResourceType(v string) *LaunchTemplateTagSpecificationRequest { + s.ResourceType = &v return s } -// Contains the parameters for DisassociateRouteTable. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTableRequest -type DisassociateRouteTableInput struct { +// SetTags sets the Tags field's value. +func (s *LaunchTemplateTagSpecificationRequest) SetTags(v []*Tag) *LaunchTemplateTagSpecificationRequest { + s.Tags = v + return s +} + +// Describes a launch template version. +type LaunchTemplateVersion struct { _ struct{} `type:"structure"` - // The association ID representing the current association between the route - // table and subnet. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` + // The time the version was created. + CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The principal that created the version. + CreatedBy *string `locationName:"createdBy" type:"string"` + + // Indicates whether the version is the default version. + DefaultVersion *bool `locationName:"defaultVersion" type:"boolean"` + + // Information about the launch template. + LaunchTemplateData *ResponseLaunchTemplateData `locationName:"launchTemplateData" type:"structure"` + + // The ID of the launch template. + LaunchTemplateId *string `locationName:"launchTemplateId" type:"string"` + + // The name of the launch template. + LaunchTemplateName *string `locationName:"launchTemplateName" min:"3" type:"string"` + + // The description for the version. + VersionDescription *string `locationName:"versionDescription" type:"string"` + + // The version number. + VersionNumber *int64 `locationName:"versionNumber" type:"long"` } // String returns the string representation -func (s DisassociateRouteTableInput) String() string { +func (s LaunchTemplateVersion) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisassociateRouteTableInput) GoString() string { +func (s LaunchTemplateVersion) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateRouteTableInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateRouteTableInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } +// SetCreateTime sets the CreateTime field's value. +func (s *LaunchTemplateVersion) SetCreateTime(v time.Time) *LaunchTemplateVersion { + s.CreateTime = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCreatedBy sets the CreatedBy field's value. +func (s *LaunchTemplateVersion) SetCreatedBy(v string) *LaunchTemplateVersion { + s.CreatedBy = &v + return s } -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateRouteTableInput) SetAssociationId(v string) *DisassociateRouteTableInput { - s.AssociationId = &v +// SetDefaultVersion sets the DefaultVersion field's value. +func (s *LaunchTemplateVersion) SetDefaultVersion(v bool) *LaunchTemplateVersion { + s.DefaultVersion = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *DisassociateRouteTableInput) SetDryRun(v bool) *DisassociateRouteTableInput { - s.DryRun = &v +// SetLaunchTemplateData sets the LaunchTemplateData field's value. +func (s *LaunchTemplateVersion) SetLaunchTemplateData(v *ResponseLaunchTemplateData) *LaunchTemplateVersion { + s.LaunchTemplateData = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTableOutput -type DisassociateRouteTableOutput struct { - _ struct{} `type:"structure"` +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *LaunchTemplateVersion) SetLaunchTemplateId(v string) *LaunchTemplateVersion { + s.LaunchTemplateId = &v + return s } -// String returns the string representation -func (s DisassociateRouteTableOutput) String() string { - return awsutil.Prettify(s) +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *LaunchTemplateVersion) SetLaunchTemplateName(v string) *LaunchTemplateVersion { + s.LaunchTemplateName = &v + return s } -// GoString returns the string representation -func (s DisassociateRouteTableOutput) GoString() string { - return s.String() +// SetVersionDescription sets the VersionDescription field's value. +func (s *LaunchTemplateVersion) SetVersionDescription(v string) *LaunchTemplateVersion { + s.VersionDescription = &v + return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlockRequest -type DisassociateSubnetCidrBlockInput struct { +// SetVersionNumber sets the VersionNumber field's value. +func (s *LaunchTemplateVersion) SetVersionNumber(v int64) *LaunchTemplateVersion { + s.VersionNumber = &v + return s +} + +// Describes the monitoring for the instance. +type LaunchTemplatesMonitoring struct { _ struct{} `type:"structure"` - // The association ID for the CIDR block. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` + // Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring + // is enabled. + Enabled *bool `locationName:"enabled" type:"boolean"` } // String returns the string representation -func (s DisassociateSubnetCidrBlockInput) String() string { +func (s LaunchTemplatesMonitoring) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisassociateSubnetCidrBlockInput) GoString() string { +func (s LaunchTemplatesMonitoring) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateSubnetCidrBlockInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateSubnetCidrBlockInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateSubnetCidrBlockInput) SetAssociationId(v string) *DisassociateSubnetCidrBlockInput { - s.AssociationId = &v +// SetEnabled sets the Enabled field's value. +func (s *LaunchTemplatesMonitoring) SetEnabled(v bool) *LaunchTemplatesMonitoring { + s.Enabled = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlockResult -type DisassociateSubnetCidrBlockOutput struct { +// Describes the monitoring for the instance. +type LaunchTemplatesMonitoringRequest struct { _ struct{} `type:"structure"` - // Information about the IPv6 CIDR block association. - Ipv6CidrBlockAssociation *SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` - - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` + // Specify true to enable detailed monitoring. Otherwise, basic monitoring is + // enabled. + Enabled *bool `type:"boolean"` } // String returns the string representation -func (s DisassociateSubnetCidrBlockOutput) String() string { +func (s LaunchTemplatesMonitoringRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisassociateSubnetCidrBlockOutput) GoString() string { +func (s LaunchTemplatesMonitoringRequest) GoString() string { return s.String() } -// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. -func (s *DisassociateSubnetCidrBlockOutput) SetIpv6CidrBlockAssociation(v *SubnetIpv6CidrBlockAssociation) *DisassociateSubnetCidrBlockOutput { - s.Ipv6CidrBlockAssociation = v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *DisassociateSubnetCidrBlockOutput) SetSubnetId(v string) *DisassociateSubnetCidrBlockOutput { - s.SubnetId = &v +// SetEnabled sets the Enabled field's value. +func (s *LaunchTemplatesMonitoringRequest) SetEnabled(v bool) *LaunchTemplatesMonitoringRequest { + s.Enabled = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlockRequest -type DisassociateVpcCidrBlockInput struct { +// Describes a license configuration. +type LicenseConfiguration struct { _ struct{} `type:"structure"` - // The association ID for the CIDR block. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` + // The Amazon Resource Name (ARN) of the license configuration. + LicenseConfigurationArn *string `locationName:"licenseConfigurationArn" type:"string"` } // String returns the string representation -func (s DisassociateVpcCidrBlockInput) String() string { +func (s LicenseConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisassociateVpcCidrBlockInput) GoString() string { +func (s LicenseConfiguration) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DisassociateVpcCidrBlockInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DisassociateVpcCidrBlockInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociationId sets the AssociationId field's value. -func (s *DisassociateVpcCidrBlockInput) SetAssociationId(v string) *DisassociateVpcCidrBlockInput { - s.AssociationId = &v +// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. +func (s *LicenseConfiguration) SetLicenseConfigurationArn(v string) *LicenseConfiguration { + s.LicenseConfigurationArn = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlockResult -type DisassociateVpcCidrBlockOutput struct { +// Describes a license configuration. +type LicenseConfigurationRequest struct { _ struct{} `type:"structure"` - // Information about the IPv6 CIDR block association. - Ipv6CidrBlockAssociation *VpcIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociation" type:"structure"` - - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` + // The Amazon Resource Name (ARN) of the license configuration. + LicenseConfigurationArn *string `type:"string"` } // String returns the string representation -func (s DisassociateVpcCidrBlockOutput) String() string { +func (s LicenseConfigurationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DisassociateVpcCidrBlockOutput) GoString() string { +func (s LicenseConfigurationRequest) GoString() string { return s.String() } -// SetIpv6CidrBlockAssociation sets the Ipv6CidrBlockAssociation field's value. -func (s *DisassociateVpcCidrBlockOutput) SetIpv6CidrBlockAssociation(v *VpcIpv6CidrBlockAssociation) *DisassociateVpcCidrBlockOutput { - s.Ipv6CidrBlockAssociation = v - return s -} - -// SetVpcId sets the VpcId field's value. -func (s *DisassociateVpcCidrBlockOutput) SetVpcId(v string) *DisassociateVpcCidrBlockOutput { - s.VpcId = &v +// SetLicenseConfigurationArn sets the LicenseConfigurationArn field's value. +func (s *LicenseConfigurationRequest) SetLicenseConfigurationArn(v string) *LicenseConfigurationRequest { + s.LicenseConfigurationArn = &v return s } -// Describes a disk image. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskImage -type DiskImage struct { +// Describes the Classic Load Balancers and target groups to attach to a Spot +// Fleet request. +type LoadBalancersConfig struct { _ struct{} `type:"structure"` - // A description of the disk image. - Description *string `type:"string"` - - // Information about the disk image. - Image *DiskImageDetail `type:"structure"` + // The Classic Load Balancers. + ClassicLoadBalancersConfig *ClassicLoadBalancersConfig `locationName:"classicLoadBalancersConfig" type:"structure"` - // Information about the volume. - Volume *VolumeDetail `type:"structure"` + // The target groups. + TargetGroupsConfig *TargetGroupsConfig `locationName:"targetGroupsConfig" type:"structure"` } // String returns the string representation -func (s DiskImage) String() string { +func (s LoadBalancersConfig) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DiskImage) GoString() string { +func (s LoadBalancersConfig) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *DiskImage) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DiskImage"} - if s.Image != nil { - if err := s.Image.Validate(); err != nil { - invalidParams.AddNested("Image", err.(request.ErrInvalidParams)) +func (s *LoadBalancersConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "LoadBalancersConfig"} + if s.ClassicLoadBalancersConfig != nil { + if err := s.ClassicLoadBalancersConfig.Validate(); err != nil { + invalidParams.AddNested("ClassicLoadBalancersConfig", err.(request.ErrInvalidParams)) } } - if s.Volume != nil { - if err := s.Volume.Validate(); err != nil { - invalidParams.AddNested("Volume", err.(request.ErrInvalidParams)) + if s.TargetGroupsConfig != nil { + if err := s.TargetGroupsConfig.Validate(); err != nil { + invalidParams.AddNested("TargetGroupsConfig", err.(request.ErrInvalidParams)) } } @@ -33403,449 +76246,440 @@ func (s *DiskImage) Validate() error { return nil } -// SetDescription sets the Description field's value. -func (s *DiskImage) SetDescription(v string) *DiskImage { - s.Description = &v - return s -} - -// SetImage sets the Image field's value. -func (s *DiskImage) SetImage(v *DiskImageDetail) *DiskImage { - s.Image = v +// SetClassicLoadBalancersConfig sets the ClassicLoadBalancersConfig field's value. +func (s *LoadBalancersConfig) SetClassicLoadBalancersConfig(v *ClassicLoadBalancersConfig) *LoadBalancersConfig { + s.ClassicLoadBalancersConfig = v return s } -// SetVolume sets the Volume field's value. -func (s *DiskImage) SetVolume(v *VolumeDetail) *DiskImage { - s.Volume = v +// SetTargetGroupsConfig sets the TargetGroupsConfig field's value. +func (s *LoadBalancersConfig) SetTargetGroupsConfig(v *TargetGroupsConfig) *LoadBalancersConfig { + s.TargetGroupsConfig = v return s } -// Describes a disk image. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskImageDescription -type DiskImageDescription struct { +// Describes a load permission. +type LoadPermission struct { _ struct{} `type:"structure"` - // The checksum computed for the disk image. - Checksum *string `locationName:"checksum" type:"string"` - - // The disk image format. - // - // Format is a required field - Format *string `locationName:"format" type:"string" required:"true" enum:"DiskImageFormat"` - - // A presigned URL for the import manifest stored in Amazon S3. For information - // about creating a presigned URL for an Amazon S3 object, read the "Query String - // Request Authentication Alternative" section of the Authenticating REST Requests - // (http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) - // topic in the Amazon Simple Storage Service Developer Guide. - // - // For information about the import manifest referenced by this API action, - // see VM Import Manifest (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). - // - // ImportManifestUrl is a required field - ImportManifestUrl *string `locationName:"importManifestUrl" type:"string" required:"true"` + // The name of the group. + Group *string `locationName:"group" type:"string" enum:"PermissionGroup"` - // The size of the disk image, in GiB. - // - // Size is a required field - Size *int64 `locationName:"size" type:"long" required:"true"` + // The AWS account ID. + UserId *string `locationName:"userId" type:"string"` } // String returns the string representation -func (s DiskImageDescription) String() string { +func (s LoadPermission) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DiskImageDescription) GoString() string { +func (s LoadPermission) GoString() string { return s.String() } -// SetChecksum sets the Checksum field's value. -func (s *DiskImageDescription) SetChecksum(v string) *DiskImageDescription { - s.Checksum = &v - return s -} - -// SetFormat sets the Format field's value. -func (s *DiskImageDescription) SetFormat(v string) *DiskImageDescription { - s.Format = &v - return s -} - -// SetImportManifestUrl sets the ImportManifestUrl field's value. -func (s *DiskImageDescription) SetImportManifestUrl(v string) *DiskImageDescription { - s.ImportManifestUrl = &v +// SetGroup sets the Group field's value. +func (s *LoadPermission) SetGroup(v string) *LoadPermission { + s.Group = &v return s } -// SetSize sets the Size field's value. -func (s *DiskImageDescription) SetSize(v int64) *DiskImageDescription { - s.Size = &v +// SetUserId sets the UserId field's value. +func (s *LoadPermission) SetUserId(v string) *LoadPermission { + s.UserId = &v return s } -// Describes a disk image. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskImageDetail -type DiskImageDetail struct { +// Describes modifications to the load permissions of an Amazon FPGA image (AFI). +type LoadPermissionModifications struct { _ struct{} `type:"structure"` - // The size of the disk image, in GiB. - // - // Bytes is a required field - Bytes *int64 `locationName:"bytes" type:"long" required:"true"` - - // The disk image format. - // - // Format is a required field - Format *string `locationName:"format" type:"string" required:"true" enum:"DiskImageFormat"` + // The load permissions to add. + Add []*LoadPermissionRequest `locationNameList:"item" type:"list"` - // A presigned URL for the import manifest stored in Amazon S3 and presented - // here as an Amazon S3 presigned URL. For information about creating a presigned - // URL for an Amazon S3 object, read the "Query String Request Authentication - // Alternative" section of the Authenticating REST Requests (http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) - // topic in the Amazon Simple Storage Service Developer Guide. - // - // For information about the import manifest referenced by this API action, - // see VM Import Manifest (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html). - // - // ImportManifestUrl is a required field - ImportManifestUrl *string `locationName:"importManifestUrl" type:"string" required:"true"` + // The load permissions to remove. + Remove []*LoadPermissionRequest `locationNameList:"item" type:"list"` } // String returns the string representation -func (s DiskImageDetail) String() string { +func (s LoadPermissionModifications) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DiskImageDetail) GoString() string { +func (s LoadPermissionModifications) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *DiskImageDetail) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "DiskImageDetail"} - if s.Bytes == nil { - invalidParams.Add(request.NewErrParamRequired("Bytes")) - } - if s.Format == nil { - invalidParams.Add(request.NewErrParamRequired("Format")) - } - if s.ImportManifestUrl == nil { - invalidParams.Add(request.NewErrParamRequired("ImportManifestUrl")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetBytes sets the Bytes field's value. -func (s *DiskImageDetail) SetBytes(v int64) *DiskImageDetail { - s.Bytes = &v - return s -} - -// SetFormat sets the Format field's value. -func (s *DiskImageDetail) SetFormat(v string) *DiskImageDetail { - s.Format = &v +// SetAdd sets the Add field's value. +func (s *LoadPermissionModifications) SetAdd(v []*LoadPermissionRequest) *LoadPermissionModifications { + s.Add = v return s } -// SetImportManifestUrl sets the ImportManifestUrl field's value. -func (s *DiskImageDetail) SetImportManifestUrl(v string) *DiskImageDetail { - s.ImportManifestUrl = &v +// SetRemove sets the Remove field's value. +func (s *LoadPermissionModifications) SetRemove(v []*LoadPermissionRequest) *LoadPermissionModifications { + s.Remove = v return s } -// Describes a disk image volume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskImageVolumeDescription -type DiskImageVolumeDescription struct { +// Describes a load permission. +type LoadPermissionRequest struct { _ struct{} `type:"structure"` - // The volume identifier. - // - // Id is a required field - Id *string `locationName:"id" type:"string" required:"true"` + // The name of the group. + Group *string `type:"string" enum:"PermissionGroup"` - // The size of the volume, in GiB. - Size *int64 `locationName:"size" type:"long"` + // The AWS account ID. + UserId *string `type:"string"` } // String returns the string representation -func (s DiskImageVolumeDescription) String() string { +func (s LoadPermissionRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s DiskImageVolumeDescription) GoString() string { +func (s LoadPermissionRequest) GoString() string { return s.String() } -// SetId sets the Id field's value. -func (s *DiskImageVolumeDescription) SetId(v string) *DiskImageVolumeDescription { - s.Id = &v +// SetGroup sets the Group field's value. +func (s *LoadPermissionRequest) SetGroup(v string) *LoadPermissionRequest { + s.Group = &v return s } -// SetSize sets the Size field's value. -func (s *DiskImageVolumeDescription) SetSize(v int64) *DiskImageVolumeDescription { - s.Size = &v +// SetUserId sets the UserId field's value. +func (s *LoadPermissionRequest) SetUserId(v string) *LoadPermissionRequest { + s.UserId = &v return s } -// Describes a block device for an EBS volume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsBlockDevice -type EbsBlockDevice struct { +// Describes the memory for the instance type. +type MemoryInfo struct { _ struct{} `type:"structure"` - // Indicates whether the EBS volume is deleted on instance termination. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` + // Size of the memory, in MiB. + SizeInMiB *int64 `locationName:"sizeInMiB" type:"long"` +} - // Indicates whether the EBS volume is encrypted. Encrypted Amazon EBS volumes - // may only be attached to instances that support Amazon EBS encryption. - Encrypted *bool `locationName:"encrypted" type:"boolean"` +// String returns the string representation +func (s MemoryInfo) String() string { + return awsutil.Prettify(s) +} - // The number of I/O operations per second (IOPS) that the volume supports. - // For io1, this represents the number of IOPS that are provisioned for the - // volume. For gp2, this represents the baseline performance of the volume and - // the rate at which the volume accumulates I/O credits for bursting. For more - // information about General Purpose SSD baseline performance, I/O credits, - // and bursting, see Amazon EBS Volume Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Constraint: Range is 100-20000 IOPS for io1 volumes and 100-10000 IOPS for - // gp2 volumes. +// GoString returns the string representation +func (s MemoryInfo) GoString() string { + return s.String() +} + +// SetSizeInMiB sets the SizeInMiB field's value. +func (s *MemoryInfo) SetSizeInMiB(v int64) *MemoryInfo { + s.SizeInMiB = &v + return s +} + +type ModifyCapacityReservationInput struct { + _ struct{} `type:"structure"` + + // The ID of the Capacity Reservation. // - // Condition: This parameter is required for requests to create io1 volumes; - // it is not used in requests to create gp2, st1, sc1, or standard volumes. - Iops *int64 `locationName:"iops" type:"integer"` + // CapacityReservationId is a required field + CapacityReservationId *string `type:"string" required:"true"` - // The ID of the snapshot. - SnapshotId *string `locationName:"snapshotId" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The size of the volume, in GiB. + // The date and time at which the Capacity Reservation expires. When a Capacity + // Reservation expires, the reserved capacity is released and you can no longer + // launch instances into it. The Capacity Reservation's state changes to expired + // when it reaches its end date and time. // - // Constraints: 1-16384 for General Purpose SSD (gp2), 4-16384 for Provisioned - // IOPS SSD (io1), 500-16384 for Throughput Optimized HDD (st1), 500-16384 for - // Cold HDD (sc1), and 1-1024 for Magnetic (standard) volumes. If you specify - // a snapshot, the volume size must be equal to or larger than the snapshot - // size. + // The Capacity Reservation is cancelled within an hour from the specified time. + // For example, if you specify 5/31/2019, 13:30:55, the Capacity Reservation + // is guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019. // - // Default: If you're creating the volume from a snapshot and don't specify - // a volume size, the default is the snapshot size. - VolumeSize *int64 `locationName:"volumeSize" type:"integer"` + // You must provide an EndDate value if EndDateType is limited. Omit EndDate + // if EndDateType is unlimited. + EndDate *time.Time `type:"timestamp"` - // The volume type: gp2, io1, st1, sc1, or standard. + // Indicates the way in which the Capacity Reservation ends. A Capacity Reservation + // can have one of the following end types: // - // Default: standard - VolumeType *string `locationName:"volumeType" type:"string" enum:"VolumeType"` + // * unlimited - The Capacity Reservation remains active until you explicitly + // cancel it. Do not provide an EndDate value if EndDateType is unlimited. + // + // * limited - The Capacity Reservation expires automatically at a specified + // date and time. You must provide an EndDate value if EndDateType is limited. + EndDateType *string `type:"string" enum:"EndDateType"` + + // The number of instances for which to reserve capacity. + InstanceCount *int64 `type:"integer"` } // String returns the string representation -func (s EbsBlockDevice) String() string { +func (s ModifyCapacityReservationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EbsBlockDevice) GoString() string { +func (s ModifyCapacityReservationInput) GoString() string { return s.String() } -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *EbsBlockDevice) SetDeleteOnTermination(v bool) *EbsBlockDevice { - s.DeleteOnTermination = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyCapacityReservationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyCapacityReservationInput"} + if s.CapacityReservationId == nil { + invalidParams.Add(request.NewErrParamRequired("CapacityReservationId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCapacityReservationId sets the CapacityReservationId field's value. +func (s *ModifyCapacityReservationInput) SetCapacityReservationId(v string) *ModifyCapacityReservationInput { + s.CapacityReservationId = &v return s } -// SetEncrypted sets the Encrypted field's value. -func (s *EbsBlockDevice) SetEncrypted(v bool) *EbsBlockDevice { - s.Encrypted = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyCapacityReservationInput) SetDryRun(v bool) *ModifyCapacityReservationInput { + s.DryRun = &v return s } -// SetIops sets the Iops field's value. -func (s *EbsBlockDevice) SetIops(v int64) *EbsBlockDevice { - s.Iops = &v +// SetEndDate sets the EndDate field's value. +func (s *ModifyCapacityReservationInput) SetEndDate(v time.Time) *ModifyCapacityReservationInput { + s.EndDate = &v return s } -// SetSnapshotId sets the SnapshotId field's value. -func (s *EbsBlockDevice) SetSnapshotId(v string) *EbsBlockDevice { - s.SnapshotId = &v +// SetEndDateType sets the EndDateType field's value. +func (s *ModifyCapacityReservationInput) SetEndDateType(v string) *ModifyCapacityReservationInput { + s.EndDateType = &v return s } -// SetVolumeSize sets the VolumeSize field's value. -func (s *EbsBlockDevice) SetVolumeSize(v int64) *EbsBlockDevice { - s.VolumeSize = &v +// SetInstanceCount sets the InstanceCount field's value. +func (s *ModifyCapacityReservationInput) SetInstanceCount(v int64) *ModifyCapacityReservationInput { + s.InstanceCount = &v return s } -// SetVolumeType sets the VolumeType field's value. -func (s *EbsBlockDevice) SetVolumeType(v string) *EbsBlockDevice { - s.VolumeType = &v +type ModifyCapacityReservationOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s ModifyCapacityReservationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyCapacityReservationOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *ModifyCapacityReservationOutput) SetReturn(v bool) *ModifyCapacityReservationOutput { + s.Return = &v return s } -// Describes a parameter used to set up an EBS volume in a block device mapping. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsInstanceBlockDevice -type EbsInstanceBlockDevice struct { +type ModifyClientVpnEndpointInput struct { _ struct{} `type:"structure"` - // The time stamp when the attachment initiated. - AttachTime *time.Time `locationName:"attachTime" type:"timestamp" timestampFormat:"iso8601"` + // The ID of the Client VPN endpoint to modify. + // + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` - // Indicates whether the volume is deleted on instance termination. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` + // Information about the client connection logging options. + // + // If you enable client connection logging, data about client connections is + // sent to a Cloudwatch Logs log stream. The following information is logged: + // + // * Client connection requests + // + // * Client connection results (successful and unsuccessful) + // + // * Reasons for unsuccessful client connection requests + // + // * Client connection termination time + ConnectionLogOptions *ConnectionLogOptions `type:"structure"` - // The attachment state. - Status *string `locationName:"status" type:"string" enum:"AttachmentStatus"` + // A brief description of the Client VPN endpoint. + Description *string `type:"string"` - // The ID of the EBS volume. - VolumeId *string `locationName:"volumeId" type:"string"` + // Information about the DNS servers to be used by Client VPN connections. A + // Client VPN endpoint can have up to two DNS servers. + DnsServers *DnsServersOptionsModifyStructure `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ARN of the server certificate to be used. The server certificate must + // be provisioned in AWS Certificate Manager (ACM). + ServerCertificateArn *string `type:"string"` + + // Indicates whether the VPN is split-tunnel. + // + // For information about split-tunnel VPN endpoints, see Split-Tunnel AWS Client + // VPN Endpoint (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html) + // in the AWS Client VPN Administrator Guide. + SplitTunnel *bool `type:"boolean"` } // String returns the string representation -func (s EbsInstanceBlockDevice) String() string { +func (s ModifyClientVpnEndpointInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EbsInstanceBlockDevice) GoString() string { +func (s ModifyClientVpnEndpointInput) GoString() string { return s.String() } -// SetAttachTime sets the AttachTime field's value. -func (s *EbsInstanceBlockDevice) SetAttachTime(v time.Time) *EbsInstanceBlockDevice { - s.AttachTime = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyClientVpnEndpointInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyClientVpnEndpointInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *EbsInstanceBlockDevice) SetDeleteOnTermination(v bool) *EbsInstanceBlockDevice { - s.DeleteOnTermination = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetStatus sets the Status field's value. -func (s *EbsInstanceBlockDevice) SetStatus(v string) *EbsInstanceBlockDevice { - s.Status = &v +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *ModifyClientVpnEndpointInput) SetClientVpnEndpointId(v string) *ModifyClientVpnEndpointInput { + s.ClientVpnEndpointId = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *EbsInstanceBlockDevice) SetVolumeId(v string) *EbsInstanceBlockDevice { - s.VolumeId = &v +// SetConnectionLogOptions sets the ConnectionLogOptions field's value. +func (s *ModifyClientVpnEndpointInput) SetConnectionLogOptions(v *ConnectionLogOptions) *ModifyClientVpnEndpointInput { + s.ConnectionLogOptions = v return s } -// Describes information used to set up an EBS volume specified in a block device -// mapping. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsInstanceBlockDeviceSpecification -type EbsInstanceBlockDeviceSpecification struct { - _ struct{} `type:"structure"` - - // Indicates whether the volume is deleted on instance termination. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // The ID of the EBS volume. - VolumeId *string `locationName:"volumeId" type:"string"` +// SetDescription sets the Description field's value. +func (s *ModifyClientVpnEndpointInput) SetDescription(v string) *ModifyClientVpnEndpointInput { + s.Description = &v + return s } -// String returns the string representation -func (s EbsInstanceBlockDeviceSpecification) String() string { - return awsutil.Prettify(s) +// SetDnsServers sets the DnsServers field's value. +func (s *ModifyClientVpnEndpointInput) SetDnsServers(v *DnsServersOptionsModifyStructure) *ModifyClientVpnEndpointInput { + s.DnsServers = v + return s } -// GoString returns the string representation -func (s EbsInstanceBlockDeviceSpecification) GoString() string { - return s.String() +// SetDryRun sets the DryRun field's value. +func (s *ModifyClientVpnEndpointInput) SetDryRun(v bool) *ModifyClientVpnEndpointInput { + s.DryRun = &v + return s } -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *EbsInstanceBlockDeviceSpecification) SetDeleteOnTermination(v bool) *EbsInstanceBlockDeviceSpecification { - s.DeleteOnTermination = &v +// SetServerCertificateArn sets the ServerCertificateArn field's value. +func (s *ModifyClientVpnEndpointInput) SetServerCertificateArn(v string) *ModifyClientVpnEndpointInput { + s.ServerCertificateArn = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *EbsInstanceBlockDeviceSpecification) SetVolumeId(v string) *EbsInstanceBlockDeviceSpecification { - s.VolumeId = &v +// SetSplitTunnel sets the SplitTunnel field's value. +func (s *ModifyClientVpnEndpointInput) SetSplitTunnel(v bool) *ModifyClientVpnEndpointInput { + s.SplitTunnel = &v return s } -// Describes an egress-only Internet gateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EgressOnlyInternetGateway -type EgressOnlyInternetGateway struct { +type ModifyClientVpnEndpointOutput struct { _ struct{} `type:"structure"` - // Information about the attachment of the egress-only Internet gateway. - Attachments []*InternetGatewayAttachment `locationName:"attachmentSet" locationNameList:"item" type:"list"` - - // The ID of the egress-only Internet gateway. - EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s EgressOnlyInternetGateway) String() string { +func (s ModifyClientVpnEndpointOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EgressOnlyInternetGateway) GoString() string { +func (s ModifyClientVpnEndpointOutput) GoString() string { return s.String() } -// SetAttachments sets the Attachments field's value. -func (s *EgressOnlyInternetGateway) SetAttachments(v []*InternetGatewayAttachment) *EgressOnlyInternetGateway { - s.Attachments = v - return s -} - -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *EgressOnlyInternetGateway) SetEgressOnlyInternetGatewayId(v string) *EgressOnlyInternetGateway { - s.EgressOnlyInternetGatewayId = &v +// SetReturn sets the Return field's value. +func (s *ModifyClientVpnEndpointOutput) SetReturn(v bool) *ModifyClientVpnEndpointOutput { + s.Return = &v return s } -// Contains the parameters for EnableVgwRoutePropagation. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagationRequest -type EnableVgwRoutePropagationInput struct { +type ModifyEbsDefaultKmsKeyIdInput struct { _ struct{} `type:"structure"` - // The ID of the virtual private gateway. - // - // GatewayId is a required field - GatewayId *string `type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The ID of the route table. + // The identifier of the AWS Key Management Service (AWS KMS) customer master + // key (CMK) to use for Amazon EBS encryption. If this parameter is not specified, + // your AWS managed CMK for EBS is used. If KmsKeyId is specified, the encrypted + // state must be true. // - // RouteTableId is a required field - RouteTableId *string `type:"string" required:"true"` + // You can specify the CMK using any of the following: + // + // * Key ID. For example, key/1234abcd-12ab-34cd-56ef-1234567890ab. + // + // * Key alias. For example, alias/ExampleAlias. + // + // * Key ARN. For example, arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef. + // + // * Alias ARN. For example, arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias. + // + // AWS authenticates the CMK asynchronously. Therefore, if you specify an ID, + // alias, or ARN that is not valid, the action can appear to complete, but eventually + // fails. + // + // KmsKeyId is a required field + KmsKeyId *string `type:"string" required:"true"` } // String returns the string representation -func (s EnableVgwRoutePropagationInput) String() string { +func (s ModifyEbsDefaultKmsKeyIdInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EnableVgwRoutePropagationInput) GoString() string { +func (s ModifyEbsDefaultKmsKeyIdInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *EnableVgwRoutePropagationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "EnableVgwRoutePropagationInput"} - if s.GatewayId == nil { - invalidParams.Add(request.NewErrParamRequired("GatewayId")) - } - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) +func (s *ModifyEbsDefaultKmsKeyIdInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyEbsDefaultKmsKeyIdInput"} + if s.KmsKeyId == nil { + invalidParams.Add(request.NewErrParamRequired("KmsKeyId")) } if invalidParams.Len() > 0 { @@ -33854,65 +76688,89 @@ func (s *EnableVgwRoutePropagationInput) Validate() error { return nil } -// SetGatewayId sets the GatewayId field's value. -func (s *EnableVgwRoutePropagationInput) SetGatewayId(v string) *EnableVgwRoutePropagationInput { - s.GatewayId = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyEbsDefaultKmsKeyIdInput) SetDryRun(v bool) *ModifyEbsDefaultKmsKeyIdInput { + s.DryRun = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *EnableVgwRoutePropagationInput) SetRouteTableId(v string) *EnableVgwRoutePropagationInput { - s.RouteTableId = &v +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *ModifyEbsDefaultKmsKeyIdInput) SetKmsKeyId(v string) *ModifyEbsDefaultKmsKeyIdInput { + s.KmsKeyId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagationOutput -type EnableVgwRoutePropagationOutput struct { +type ModifyEbsDefaultKmsKeyIdOutput struct { _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the default CMK for encryption by default. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` } // String returns the string representation -func (s EnableVgwRoutePropagationOutput) String() string { +func (s ModifyEbsDefaultKmsKeyIdOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EnableVgwRoutePropagationOutput) GoString() string { +func (s ModifyEbsDefaultKmsKeyIdOutput) GoString() string { return s.String() } -// Contains the parameters for EnableVolumeIO. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIORequest -type EnableVolumeIOInput struct { +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *ModifyEbsDefaultKmsKeyIdOutput) SetKmsKeyId(v string) *ModifyEbsDefaultKmsKeyIdOutput { + s.KmsKeyId = &v + return s +} + +type ModifyFleetInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the volume. + // Indicates whether running instances should be terminated if the total target + // capacity of the EC2 Fleet is decreased below the current size of the EC2 + // Fleet. + ExcessCapacityTerminationPolicy *string `type:"string" enum:"FleetExcessCapacityTerminationPolicy"` + + // The ID of the EC2 Fleet. // - // VolumeId is a required field - VolumeId *string `locationName:"volumeId" type:"string" required:"true"` + // FleetId is a required field + FleetId *string `type:"string" required:"true"` + + // The size of the EC2 Fleet. + // + // TargetCapacitySpecification is a required field + TargetCapacitySpecification *TargetCapacitySpecificationRequest `type:"structure" required:"true"` } // String returns the string representation -func (s EnableVolumeIOInput) String() string { +func (s ModifyFleetInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EnableVolumeIOInput) GoString() string { +func (s ModifyFleetInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *EnableVolumeIOInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "EnableVolumeIOInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) +func (s *ModifyFleetInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyFleetInput"} + if s.FleetId == nil { + invalidParams.Add(request.NewErrParamRequired("FleetId")) + } + if s.TargetCapacitySpecification == nil { + invalidParams.Add(request.NewErrParamRequired("TargetCapacitySpecification")) + } + if s.TargetCapacitySpecification != nil { + if err := s.TargetCapacitySpecification.Validate(); err != nil { + invalidParams.AddNested("TargetCapacitySpecification", err.(request.ErrInvalidParams)) + } } if invalidParams.Len() > 0 { @@ -33922,114 +76780,109 @@ func (s *EnableVolumeIOInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *EnableVolumeIOInput) SetDryRun(v bool) *EnableVolumeIOInput { +func (s *ModifyFleetInput) SetDryRun(v bool) *ModifyFleetInput { s.DryRun = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *EnableVolumeIOInput) SetVolumeId(v string) *EnableVolumeIOInput { - s.VolumeId = &v +// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. +func (s *ModifyFleetInput) SetExcessCapacityTerminationPolicy(v string) *ModifyFleetInput { + s.ExcessCapacityTerminationPolicy = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIOOutput -type EnableVolumeIOOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s EnableVolumeIOOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVolumeIOOutput) GoString() string { - return s.String() -} - -// Contains the parameters for EnableVpcClassicLinkDnsSupport. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupportRequest -type EnableVpcClassicLinkDnsSupportInput struct { - _ struct{} `type:"structure"` - - // The ID of the VPC. - VpcId *string `type:"string"` -} - -// String returns the string representation -func (s EnableVpcClassicLinkDnsSupportInput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s EnableVpcClassicLinkDnsSupportInput) GoString() string { - return s.String() +// SetFleetId sets the FleetId field's value. +func (s *ModifyFleetInput) SetFleetId(v string) *ModifyFleetInput { + s.FleetId = &v + return s } -// SetVpcId sets the VpcId field's value. -func (s *EnableVpcClassicLinkDnsSupportInput) SetVpcId(v string) *EnableVpcClassicLinkDnsSupportInput { - s.VpcId = &v +// SetTargetCapacitySpecification sets the TargetCapacitySpecification field's value. +func (s *ModifyFleetInput) SetTargetCapacitySpecification(v *TargetCapacitySpecificationRequest) *ModifyFleetInput { + s.TargetCapacitySpecification = v return s } -// Contains the output of EnableVpcClassicLinkDnsSupport. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupportResult -type EnableVpcClassicLinkDnsSupportOutput struct { +type ModifyFleetOutput struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. + // Is true if the request succeeds, and an error otherwise. Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s EnableVpcClassicLinkDnsSupportOutput) String() string { +func (s ModifyFleetOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EnableVpcClassicLinkDnsSupportOutput) GoString() string { +func (s ModifyFleetOutput) GoString() string { return s.String() } // SetReturn sets the Return field's value. -func (s *EnableVpcClassicLinkDnsSupportOutput) SetReturn(v bool) *EnableVpcClassicLinkDnsSupportOutput { +func (s *ModifyFleetOutput) SetReturn(v bool) *ModifyFleetOutput { s.Return = &v return s } -// Contains the parameters for EnableVpcClassicLink. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkRequest -type EnableVpcClassicLinkInput struct { +type ModifyFpgaImageAttributeInput struct { _ struct{} `type:"structure"` + // The name of the attribute. + Attribute *string `type:"string" enum:"FpgaImageAttributeName"` + + // A description for the AFI. + Description *string `type:"string"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the VPC. + // The ID of the AFI. // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // FpgaImageId is a required field + FpgaImageId *string `type:"string" required:"true"` + + // The load permission for the AFI. + LoadPermission *LoadPermissionModifications `type:"structure"` + + // A name for the AFI. + Name *string `type:"string"` + + // The operation type. + OperationType *string `type:"string" enum:"OperationType"` + + // The product codes. After you add a product code to an AFI, it can't be removed. + // This parameter is valid only when modifying the productCodes attribute. + ProductCodes []*string `locationName:"ProductCode" locationNameList:"ProductCode" type:"list"` + + // The user groups. This parameter is valid only when modifying the loadPermission + // attribute. + UserGroups []*string `locationName:"UserGroup" locationNameList:"UserGroup" type:"list"` + + // The AWS account IDs. This parameter is valid only when modifying the loadPermission + // attribute. + UserIds []*string `locationName:"UserId" locationNameList:"UserId" type:"list"` } // String returns the string representation -func (s EnableVpcClassicLinkInput) String() string { +func (s ModifyFpgaImageAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EnableVpcClassicLinkInput) GoString() string { +func (s ModifyFpgaImageAttributeInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *EnableVpcClassicLinkInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "EnableVpcClassicLinkInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) +func (s *ModifyFpgaImageAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyFpgaImageAttributeInput"} + if s.FpgaImageId == nil { + invalidParams.Add(request.NewErrParamRequired("FpgaImageId")) } if invalidParams.Len() > 0 { @@ -34038,485 +76891,628 @@ func (s *EnableVpcClassicLinkInput) Validate() error { return nil } +// SetAttribute sets the Attribute field's value. +func (s *ModifyFpgaImageAttributeInput) SetAttribute(v string) *ModifyFpgaImageAttributeInput { + s.Attribute = &v + return s +} + +// SetDescription sets the Description field's value. +func (s *ModifyFpgaImageAttributeInput) SetDescription(v string) *ModifyFpgaImageAttributeInput { + s.Description = &v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *EnableVpcClassicLinkInput) SetDryRun(v bool) *EnableVpcClassicLinkInput { +func (s *ModifyFpgaImageAttributeInput) SetDryRun(v bool) *ModifyFpgaImageAttributeInput { s.DryRun = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *EnableVpcClassicLinkInput) SetVpcId(v string) *EnableVpcClassicLinkInput { - s.VpcId = &v +// SetFpgaImageId sets the FpgaImageId field's value. +func (s *ModifyFpgaImageAttributeInput) SetFpgaImageId(v string) *ModifyFpgaImageAttributeInput { + s.FpgaImageId = &v return s } -// Contains the output of EnableVpcClassicLink. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkResult -type EnableVpcClassicLinkOutput struct { +// SetLoadPermission sets the LoadPermission field's value. +func (s *ModifyFpgaImageAttributeInput) SetLoadPermission(v *LoadPermissionModifications) *ModifyFpgaImageAttributeInput { + s.LoadPermission = v + return s +} + +// SetName sets the Name field's value. +func (s *ModifyFpgaImageAttributeInput) SetName(v string) *ModifyFpgaImageAttributeInput { + s.Name = &v + return s +} + +// SetOperationType sets the OperationType field's value. +func (s *ModifyFpgaImageAttributeInput) SetOperationType(v string) *ModifyFpgaImageAttributeInput { + s.OperationType = &v + return s +} + +// SetProductCodes sets the ProductCodes field's value. +func (s *ModifyFpgaImageAttributeInput) SetProductCodes(v []*string) *ModifyFpgaImageAttributeInput { + s.ProductCodes = v + return s +} + +// SetUserGroups sets the UserGroups field's value. +func (s *ModifyFpgaImageAttributeInput) SetUserGroups(v []*string) *ModifyFpgaImageAttributeInput { + s.UserGroups = v + return s +} + +// SetUserIds sets the UserIds field's value. +func (s *ModifyFpgaImageAttributeInput) SetUserIds(v []*string) *ModifyFpgaImageAttributeInput { + s.UserIds = v + return s +} + +type ModifyFpgaImageAttributeOutput struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` + // Information about the attribute. + FpgaImageAttribute *FpgaImageAttribute `locationName:"fpgaImageAttribute" type:"structure"` } // String returns the string representation -func (s EnableVpcClassicLinkOutput) String() string { +func (s ModifyFpgaImageAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EnableVpcClassicLinkOutput) GoString() string { +func (s ModifyFpgaImageAttributeOutput) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *EnableVpcClassicLinkOutput) SetReturn(v bool) *EnableVpcClassicLinkOutput { - s.Return = &v +// SetFpgaImageAttribute sets the FpgaImageAttribute field's value. +func (s *ModifyFpgaImageAttributeOutput) SetFpgaImageAttribute(v *FpgaImageAttribute) *ModifyFpgaImageAttributeOutput { + s.FpgaImageAttribute = v return s } -// Describes a Spot fleet event. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EventInformation -type EventInformation struct { +type ModifyHostsInput struct { _ struct{} `type:"structure"` - // The description of the event. - EventDescription *string `locationName:"eventDescription" type:"string"` + // Specify whether to enable or disable auto-placement. + AutoPlacement *string `locationName:"autoPlacement" type:"string" enum:"AutoPlacement"` - // The event. - // - // The following are the error events. - // - // * iamFleetRoleInvalid - The Spot fleet did not have the required permissions - // either to launch or terminate an instance. + // The IDs of the Dedicated Hosts to modify. // - // * launchSpecTemporarilyBlacklisted - The configuration is not valid and - // several attempts to launch instances have failed. For more information, - // see the description of the event. - // - // * spotFleetRequestConfigurationInvalid - The configuration is not valid. - // For more information, see the description of the event. - // - // * spotInstanceCountLimitExceeded - You've reached the limit on the number - // of Spot instances that you can launch. - // - // The following are the fleetRequestChange events. - // - // * active - The Spot fleet has been validated and Amazon EC2 is attempting - // to maintain the target number of running Spot instances. - // - // * cancelled - The Spot fleet is canceled and has no running Spot instances. - // The Spot fleet will be deleted two days after its instances were terminated. - // - // * cancelled_running - The Spot fleet is canceled and will not launch additional - // Spot instances, but its existing Spot instances continue to run until - // they are interrupted or terminated. - // - // * cancelled_terminating - The Spot fleet is canceled and its Spot instances - // are terminating. - // - // * expired - The Spot fleet request has expired. A subsequent event indicates - // that the instances were terminated, if the request was created with TerminateInstancesWithExpiration - // set. - // - // * modify_in_progress - A request to modify the Spot fleet request was - // accepted and is in progress. - // - // * modify_successful - The Spot fleet request was modified. - // - // * price_update - The bid price for a launch configuration was adjusted - // because it was too high. This change is permanent. - // - // * submitted - The Spot fleet request is being evaluated and Amazon EC2 - // is preparing to launch the target number of Spot instances. - // - // The following are the instanceChange events. - // - // * launched - A bid was fulfilled and a new instance was launched. + // HostIds is a required field + HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list" required:"true"` + + // Indicates whether to enable or disable host recovery for the Dedicated Host. + // For more information, see Host Recovery (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html) + // in the Amazon Elastic Compute Cloud User Guide. + HostRecovery *string `type:"string" enum:"HostRecovery"` + + // Specifies the instance family to be supported by the Dedicated Host. Specify + // this parameter to modify a Dedicated Host to support multiple instance types + // within its current instance family. // - // * terminated - An instance was terminated by the user. - EventSubType *string `locationName:"eventSubType" type:"string"` + // If you want to modify a Dedicated Host to support a specific instance type + // only, omit this parameter and specify InstanceType instead. You cannot specify + // InstanceFamily and InstanceType in the same request. + InstanceFamily *string `type:"string"` - // The ID of the instance. This information is available only for instanceChange - // events. - InstanceId *string `locationName:"instanceId" type:"string"` + // Specifies the instance type to be supported by the Dedicated Host. Specify + // this parameter to modify a Dedicated Host to support only a specific instance + // type. + // + // If you want to modify a Dedicated Host to support multiple instance types + // in its current instance family, omit this parameter and specify InstanceFamily + // instead. You cannot specify InstanceType and InstanceFamily in the same request. + InstanceType *string `type:"string"` } // String returns the string representation -func (s EventInformation) String() string { +func (s ModifyHostsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s EventInformation) GoString() string { +func (s ModifyHostsInput) GoString() string { return s.String() } -// SetEventDescription sets the EventDescription field's value. -func (s *EventInformation) SetEventDescription(v string) *EventInformation { - s.EventDescription = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyHostsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyHostsInput"} + if s.HostIds == nil { + invalidParams.Add(request.NewErrParamRequired("HostIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetEventSubType sets the EventSubType field's value. -func (s *EventInformation) SetEventSubType(v string) *EventInformation { - s.EventSubType = &v +// SetAutoPlacement sets the AutoPlacement field's value. +func (s *ModifyHostsInput) SetAutoPlacement(v string) *ModifyHostsInput { + s.AutoPlacement = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *EventInformation) SetInstanceId(v string) *EventInformation { - s.InstanceId = &v +// SetHostIds sets the HostIds field's value. +func (s *ModifyHostsInput) SetHostIds(v []*string) *ModifyHostsInput { + s.HostIds = v return s } -// Describes an instance export task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTask -type ExportTask struct { - _ struct{} `type:"structure"` - - // A description of the resource being exported. - Description *string `locationName:"description" type:"string"` +// SetHostRecovery sets the HostRecovery field's value. +func (s *ModifyHostsInput) SetHostRecovery(v string) *ModifyHostsInput { + s.HostRecovery = &v + return s +} - // The ID of the export task. - ExportTaskId *string `locationName:"exportTaskId" type:"string"` +// SetInstanceFamily sets the InstanceFamily field's value. +func (s *ModifyHostsInput) SetInstanceFamily(v string) *ModifyHostsInput { + s.InstanceFamily = &v + return s +} - // Information about the export task. - ExportToS3Task *ExportToS3Task `locationName:"exportToS3" type:"structure"` +// SetInstanceType sets the InstanceType field's value. +func (s *ModifyHostsInput) SetInstanceType(v string) *ModifyHostsInput { + s.InstanceType = &v + return s +} - // Information about the instance to export. - InstanceExportDetails *InstanceExportDetails `locationName:"instanceExport" type:"structure"` +type ModifyHostsOutput struct { + _ struct{} `type:"structure"` - // The state of the export task. - State *string `locationName:"state" type:"string" enum:"ExportTaskState"` + // The IDs of the Dedicated Hosts that were successfully modified. + Successful []*string `locationName:"successful" locationNameList:"item" type:"list"` - // The status message related to the export task. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // The IDs of the Dedicated Hosts that could not be modified. Check whether + // the setting you requested can be used. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` } // String returns the string representation -func (s ExportTask) String() string { +func (s ModifyHostsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ExportTask) GoString() string { +func (s ModifyHostsOutput) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *ExportTask) SetDescription(v string) *ExportTask { - s.Description = &v - return s -} - -// SetExportTaskId sets the ExportTaskId field's value. -func (s *ExportTask) SetExportTaskId(v string) *ExportTask { - s.ExportTaskId = &v - return s -} - -// SetExportToS3Task sets the ExportToS3Task field's value. -func (s *ExportTask) SetExportToS3Task(v *ExportToS3Task) *ExportTask { - s.ExportToS3Task = v - return s -} - -// SetInstanceExportDetails sets the InstanceExportDetails field's value. -func (s *ExportTask) SetInstanceExportDetails(v *InstanceExportDetails) *ExportTask { - s.InstanceExportDetails = v - return s -} - -// SetState sets the State field's value. -func (s *ExportTask) SetState(v string) *ExportTask { - s.State = &v +// SetSuccessful sets the Successful field's value. +func (s *ModifyHostsOutput) SetSuccessful(v []*string) *ModifyHostsOutput { + s.Successful = v return s } -// SetStatusMessage sets the StatusMessage field's value. -func (s *ExportTask) SetStatusMessage(v string) *ExportTask { - s.StatusMessage = &v +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *ModifyHostsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *ModifyHostsOutput { + s.Unsuccessful = v return s } -// Describes the format and location for an instance export task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportToS3Task -type ExportToS3Task struct { +type ModifyIdFormatInput struct { _ struct{} `type:"structure"` - // The container format used to combine disk images with metadata (such as OVF). - // If absent, only the disk image is exported. - ContainerFormat *string `locationName:"containerFormat" type:"string" enum:"ContainerFormat"` - - // The format for the exported image. - DiskImageFormat *string `locationName:"diskImageFormat" type:"string" enum:"DiskImageFormat"` - - // The S3 bucket for the destination image. The destination bucket must exist - // and grant WRITE and READ_ACP permissions to the AWS account vm-import-export@amazon.com. - S3Bucket *string `locationName:"s3Bucket" type:"string"` + // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options + // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log + // | image | import-task | internet-gateway | network-acl | network-acl-association + // | network-interface | network-interface-attachment | prefix-list | route-table + // | route-table-association | security-group | subnet | subnet-cidr-block-association + // | vpc | vpc-cidr-block-association | vpc-endpoint | vpc-peering-connection + // | vpn-connection | vpn-gateway. + // + // Alternatively, use the all-current option to include all resource types that + // are currently within their opt-in period for longer IDs. + // + // Resource is a required field + Resource *string `type:"string" required:"true"` - // The encryption key for your S3 bucket. - S3Key *string `locationName:"s3Key" type:"string"` + // Indicate whether the resource should use longer IDs (17-character IDs). + // + // UseLongIds is a required field + UseLongIds *bool `type:"boolean" required:"true"` } // String returns the string representation -func (s ExportToS3Task) String() string { +func (s ModifyIdFormatInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ExportToS3Task) GoString() string { +func (s ModifyIdFormatInput) GoString() string { return s.String() } -// SetContainerFormat sets the ContainerFormat field's value. -func (s *ExportToS3Task) SetContainerFormat(v string) *ExportToS3Task { - s.ContainerFormat = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyIdFormatInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyIdFormatInput"} + if s.Resource == nil { + invalidParams.Add(request.NewErrParamRequired("Resource")) + } + if s.UseLongIds == nil { + invalidParams.Add(request.NewErrParamRequired("UseLongIds")) + } -// SetDiskImageFormat sets the DiskImageFormat field's value. -func (s *ExportToS3Task) SetDiskImageFormat(v string) *ExportToS3Task { - s.DiskImageFormat = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetS3Bucket sets the S3Bucket field's value. -func (s *ExportToS3Task) SetS3Bucket(v string) *ExportToS3Task { - s.S3Bucket = &v +// SetResource sets the Resource field's value. +func (s *ModifyIdFormatInput) SetResource(v string) *ModifyIdFormatInput { + s.Resource = &v return s } -// SetS3Key sets the S3Key field's value. -func (s *ExportToS3Task) SetS3Key(v string) *ExportToS3Task { - s.S3Key = &v +// SetUseLongIds sets the UseLongIds field's value. +func (s *ModifyIdFormatInput) SetUseLongIds(v bool) *ModifyIdFormatInput { + s.UseLongIds = &v return s } -// Describes an instance export task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportToS3TaskSpecification -type ExportToS3TaskSpecification struct { +type ModifyIdFormatOutput struct { _ struct{} `type:"structure"` +} - // The container format used to combine disk images with metadata (such as OVF). - // If absent, only the disk image is exported. - ContainerFormat *string `locationName:"containerFormat" type:"string" enum:"ContainerFormat"` +// String returns the string representation +func (s ModifyIdFormatOutput) String() string { + return awsutil.Prettify(s) +} - // The format for the exported image. - DiskImageFormat *string `locationName:"diskImageFormat" type:"string" enum:"DiskImageFormat"` +// GoString returns the string representation +func (s ModifyIdFormatOutput) GoString() string { + return s.String() +} - // The S3 bucket for the destination image. The destination bucket must exist - // and grant WRITE and READ_ACP permissions to the AWS account vm-import-export@amazon.com. - S3Bucket *string `locationName:"s3Bucket" type:"string"` +type ModifyIdentityIdFormatInput struct { + _ struct{} `type:"structure"` - // The image is written to a single object in the S3 bucket at the S3 key s3prefix - // + exportTaskId + '.' + diskImageFormat. - S3Prefix *string `locationName:"s3Prefix" type:"string"` + // The ARN of the principal, which can be an IAM user, IAM role, or the root + // user. Specify all to modify the ID format for all IAM users, IAM roles, and + // the root user of the account. + // + // PrincipalArn is a required field + PrincipalArn *string `locationName:"principalArn" type:"string" required:"true"` + + // The type of resource: bundle | conversion-task | customer-gateway | dhcp-options + // | elastic-ip-allocation | elastic-ip-association | export-task | flow-log + // | image | import-task | internet-gateway | network-acl | network-acl-association + // | network-interface | network-interface-attachment | prefix-list | route-table + // | route-table-association | security-group | subnet | subnet-cidr-block-association + // | vpc | vpc-cidr-block-association | vpc-endpoint | vpc-peering-connection + // | vpn-connection | vpn-gateway. + // + // Alternatively, use the all-current option to include all resource types that + // are currently within their opt-in period for longer IDs. + // + // Resource is a required field + Resource *string `locationName:"resource" type:"string" required:"true"` + + // Indicates whether the resource should use longer IDs (17-character IDs) + // + // UseLongIds is a required field + UseLongIds *bool `locationName:"useLongIds" type:"boolean" required:"true"` } // String returns the string representation -func (s ExportToS3TaskSpecification) String() string { +func (s ModifyIdentityIdFormatInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ExportToS3TaskSpecification) GoString() string { +func (s ModifyIdentityIdFormatInput) GoString() string { return s.String() } -// SetContainerFormat sets the ContainerFormat field's value. -func (s *ExportToS3TaskSpecification) SetContainerFormat(v string) *ExportToS3TaskSpecification { - s.ContainerFormat = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyIdentityIdFormatInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyIdentityIdFormatInput"} + if s.PrincipalArn == nil { + invalidParams.Add(request.NewErrParamRequired("PrincipalArn")) + } + if s.Resource == nil { + invalidParams.Add(request.NewErrParamRequired("Resource")) + } + if s.UseLongIds == nil { + invalidParams.Add(request.NewErrParamRequired("UseLongIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetDiskImageFormat sets the DiskImageFormat field's value. -func (s *ExportToS3TaskSpecification) SetDiskImageFormat(v string) *ExportToS3TaskSpecification { - s.DiskImageFormat = &v +// SetPrincipalArn sets the PrincipalArn field's value. +func (s *ModifyIdentityIdFormatInput) SetPrincipalArn(v string) *ModifyIdentityIdFormatInput { + s.PrincipalArn = &v return s } -// SetS3Bucket sets the S3Bucket field's value. -func (s *ExportToS3TaskSpecification) SetS3Bucket(v string) *ExportToS3TaskSpecification { - s.S3Bucket = &v +// SetResource sets the Resource field's value. +func (s *ModifyIdentityIdFormatInput) SetResource(v string) *ModifyIdentityIdFormatInput { + s.Resource = &v return s } -// SetS3Prefix sets the S3Prefix field's value. -func (s *ExportToS3TaskSpecification) SetS3Prefix(v string) *ExportToS3TaskSpecification { - s.S3Prefix = &v +// SetUseLongIds sets the UseLongIds field's value. +func (s *ModifyIdentityIdFormatInput) SetUseLongIds(v bool) *ModifyIdentityIdFormatInput { + s.UseLongIds = &v return s } -// A filter name and value pair that is used to return a more specific list -// of results. Filters can be used to match a set of resources by various criteria, -// such as tags, attributes, or IDs. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Filter -type Filter struct { +type ModifyIdentityIdFormatOutput struct { _ struct{} `type:"structure"` - - // The name of the filter. Filter names are case-sensitive. - Name *string `type:"string"` - - // One or more filter values. Filter values are case-sensitive. - Values []*string `locationName:"Value" locationNameList:"item" type:"list"` } // String returns the string representation -func (s Filter) String() string { +func (s ModifyIdentityIdFormatOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Filter) GoString() string { +func (s ModifyIdentityIdFormatOutput) GoString() string { return s.String() } -// SetName sets the Name field's value. -func (s *Filter) SetName(v string) *Filter { - s.Name = &v - return s -} - -// SetValues sets the Values field's value. -func (s *Filter) SetValues(v []*string) *Filter { - s.Values = v - return s -} - -// Describes a flow log. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FlowLog -type FlowLog struct { +// Contains the parameters for ModifyImageAttribute. +type ModifyImageAttributeInput struct { _ struct{} `type:"structure"` - // The date and time the flow log was created. - CreationTime *time.Time `locationName:"creationTime" type:"timestamp" timestampFormat:"iso8601"` + // The name of the attribute to modify. The valid values are description, launchPermission, + // and productCodes. + Attribute *string `type:"string"` - // Information about the error that occurred. Rate limited indicates that CloudWatch - // logs throttling has been applied for one or more network interfaces, or that - // you've reached the limit on the number of CloudWatch Logs log groups that - // you can create. Access error indicates that the IAM role associated with - // the flow log does not have sufficient permissions to publish to CloudWatch - // Logs. Unknown error indicates an internal error. - DeliverLogsErrorMessage *string `locationName:"deliverLogsErrorMessage" type:"string"` + // A new description for the AMI. + Description *AttributeValue `type:"structure"` - // The ARN of the IAM role that posts logs to CloudWatch Logs. - DeliverLogsPermissionArn *string `locationName:"deliverLogsPermissionArn" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The status of the logs delivery (SUCCESS | FAILED). - DeliverLogsStatus *string `locationName:"deliverLogsStatus" type:"string"` + // The ID of the AMI. + // + // ImageId is a required field + ImageId *string `type:"string" required:"true"` - // The flow log ID. - FlowLogId *string `locationName:"flowLogId" type:"string"` + // A new launch permission for the AMI. + LaunchPermission *LaunchPermissionModifications `type:"structure"` - // The status of the flow log (ACTIVE). - FlowLogStatus *string `locationName:"flowLogStatus" type:"string"` + // The operation type. This parameter can be used only when the Attribute parameter + // is launchPermission. + OperationType *string `type:"string" enum:"OperationType"` - // The name of the flow log group. - LogGroupName *string `locationName:"logGroupName" type:"string"` + // The DevPay product codes. After you add a product code to an AMI, it can't + // be removed. + ProductCodes []*string `locationName:"ProductCode" locationNameList:"ProductCode" type:"list"` - // The ID of the resource on which the flow log was created. - ResourceId *string `locationName:"resourceId" type:"string"` + // The user groups. This parameter can be used only when the Attribute parameter + // is launchPermission. + UserGroups []*string `locationName:"UserGroup" locationNameList:"UserGroup" type:"list"` - // The type of traffic captured for the flow log. - TrafficType *string `locationName:"trafficType" type:"string" enum:"TrafficType"` + // The AWS account IDs. This parameter can be used only when the Attribute parameter + // is launchPermission. + UserIds []*string `locationName:"UserId" locationNameList:"UserId" type:"list"` + + // The value of the attribute being modified. This parameter can be used only + // when the Attribute parameter is description or productCodes. + Value *string `type:"string"` } // String returns the string representation -func (s FlowLog) String() string { +func (s ModifyImageAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s FlowLog) GoString() string { +func (s ModifyImageAttributeInput) GoString() string { return s.String() } -// SetCreationTime sets the CreationTime field's value. -func (s *FlowLog) SetCreationTime(v time.Time) *FlowLog { - s.CreationTime = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyImageAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyImageAttributeInput"} + if s.ImageId == nil { + invalidParams.Add(request.NewErrParamRequired("ImageId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttribute sets the Attribute field's value. +func (s *ModifyImageAttributeInput) SetAttribute(v string) *ModifyImageAttributeInput { + s.Attribute = &v return s } -// SetDeliverLogsErrorMessage sets the DeliverLogsErrorMessage field's value. -func (s *FlowLog) SetDeliverLogsErrorMessage(v string) *FlowLog { - s.DeliverLogsErrorMessage = &v +// SetDescription sets the Description field's value. +func (s *ModifyImageAttributeInput) SetDescription(v *AttributeValue) *ModifyImageAttributeInput { + s.Description = v return s } -// SetDeliverLogsPermissionArn sets the DeliverLogsPermissionArn field's value. -func (s *FlowLog) SetDeliverLogsPermissionArn(v string) *FlowLog { - s.DeliverLogsPermissionArn = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyImageAttributeInput) SetDryRun(v bool) *ModifyImageAttributeInput { + s.DryRun = &v return s } -// SetDeliverLogsStatus sets the DeliverLogsStatus field's value. -func (s *FlowLog) SetDeliverLogsStatus(v string) *FlowLog { - s.DeliverLogsStatus = &v +// SetImageId sets the ImageId field's value. +func (s *ModifyImageAttributeInput) SetImageId(v string) *ModifyImageAttributeInput { + s.ImageId = &v return s } -// SetFlowLogId sets the FlowLogId field's value. -func (s *FlowLog) SetFlowLogId(v string) *FlowLog { - s.FlowLogId = &v +// SetLaunchPermission sets the LaunchPermission field's value. +func (s *ModifyImageAttributeInput) SetLaunchPermission(v *LaunchPermissionModifications) *ModifyImageAttributeInput { + s.LaunchPermission = v return s } -// SetFlowLogStatus sets the FlowLogStatus field's value. -func (s *FlowLog) SetFlowLogStatus(v string) *FlowLog { - s.FlowLogStatus = &v +// SetOperationType sets the OperationType field's value. +func (s *ModifyImageAttributeInput) SetOperationType(v string) *ModifyImageAttributeInput { + s.OperationType = &v return s } -// SetLogGroupName sets the LogGroupName field's value. -func (s *FlowLog) SetLogGroupName(v string) *FlowLog { - s.LogGroupName = &v +// SetProductCodes sets the ProductCodes field's value. +func (s *ModifyImageAttributeInput) SetProductCodes(v []*string) *ModifyImageAttributeInput { + s.ProductCodes = v return s } -// SetResourceId sets the ResourceId field's value. -func (s *FlowLog) SetResourceId(v string) *FlowLog { - s.ResourceId = &v +// SetUserGroups sets the UserGroups field's value. +func (s *ModifyImageAttributeInput) SetUserGroups(v []*string) *ModifyImageAttributeInput { + s.UserGroups = v return s } -// SetTrafficType sets the TrafficType field's value. -func (s *FlowLog) SetTrafficType(v string) *FlowLog { - s.TrafficType = &v +// SetUserIds sets the UserIds field's value. +func (s *ModifyImageAttributeInput) SetUserIds(v []*string) *ModifyImageAttributeInput { + s.UserIds = v return s } -// Contains the parameters for GetConsoleOutput. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutputRequest -type GetConsoleOutputInput struct { +// SetValue sets the Value field's value. +func (s *ModifyImageAttributeInput) SetValue(v string) *ModifyImageAttributeInput { + s.Value = &v + return s +} + +type ModifyImageAttributeOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s ModifyImageAttributeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyImageAttributeOutput) GoString() string { + return s.String() +} + +type ModifyInstanceAttributeInput struct { _ struct{} `type:"structure"` + // The name of the attribute. + Attribute *string `locationName:"attribute" type:"string" enum:"InstanceAttributeName"` + + // Modifies the DeleteOnTermination attribute for volumes that are currently + // attached. The volume must be owned by the caller. If no value is specified + // for DeleteOnTermination, the default is true and the volume is deleted when + // the instance is terminated. + // + // To add instance store volumes to an Amazon EBS-backed instance, you must + // add them when you launch the instance. For more information, see Updating + // the Block Device Mapping when Launching an Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM) + // in the Amazon Elastic Compute Cloud User Guide. + BlockDeviceMappings []*InstanceBlockDeviceMappingSpecification `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` + + // If the value is true, you can't terminate the instance using the Amazon EC2 + // console, CLI, or API; otherwise, you can. You cannot use this parameter for + // Spot Instances. + DisableApiTermination *AttributeBooleanValue `locationName:"disableApiTermination" type:"structure"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` + // Specifies whether the instance is optimized for Amazon EBS I/O. This optimization + // provides dedicated throughput to Amazon EBS and an optimized configuration + // stack to provide optimal EBS I/O performance. This optimization isn't available + // with all instance types. Additional usage charges apply when using an EBS + // Optimized instance. + EbsOptimized *AttributeBooleanValue `locationName:"ebsOptimized" type:"structure"` + + // Set to true to enable enhanced networking with ENA for the instance. + // + // This option is supported only for HVM instances. Specifying this option with + // a PV instance can make it unreachable. + EnaSupport *AttributeBooleanValue `locationName:"enaSupport" type:"structure"` + + // [EC2-VPC] Changes the security groups of the instance. You must specify at + // least one security group, even if it's just the default security group for + // the VPC. You must specify the security group ID, not the security group name. + Groups []*string `locationName:"GroupId" locationNameList:"groupId" type:"list"` + // The ID of the instance. // // InstanceId is a required field - InstanceId *string `type:"string" required:"true"` + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + + // Specifies whether an instance stops or terminates when you initiate shutdown + // from the instance (using the operating system command for system shutdown). + InstanceInitiatedShutdownBehavior *AttributeValue `locationName:"instanceInitiatedShutdownBehavior" type:"structure"` + + // Changes the instance type to the specified value. For more information, see + // Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html). + // If the instance type is not valid, the error returned is InvalidInstanceAttributeValue. + InstanceType *AttributeValue `locationName:"instanceType" type:"structure"` + + // Changes the instance's kernel to the specified value. We recommend that you + // use PV-GRUB instead of kernels and RAM disks. For more information, see PV-GRUB + // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html). + Kernel *AttributeValue `locationName:"kernel" type:"structure"` + + // Changes the instance's RAM disk to the specified value. We recommend that + // you use PV-GRUB instead of kernels and RAM disks. For more information, see + // PV-GRUB (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html). + Ramdisk *AttributeValue `locationName:"ramdisk" type:"structure"` + + // Specifies whether source/destination checking is enabled. A value of true + // means that checking is enabled, and false means that checking is disabled. + // This value must be false for a NAT instance to perform NAT. + SourceDestCheck *AttributeBooleanValue `type:"structure"` + + // Set to simple to enable enhanced networking with the Intel 82599 Virtual + // Function interface for the instance. + // + // There is no way to disable enhanced networking with the Intel 82599 Virtual + // Function interface at this time. + // + // This option is supported only for HVM instances. Specifying this option with + // a PV instance can make it unreachable. + SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` + + // Changes the instance's user data to the specified value. If you are using + // an AWS SDK or command line tool, base64-encoding is performed for you, and + // you can load the text from a file. Otherwise, you must provide base64-encoded + // text. + UserData *BlobAttributeValue `locationName:"userData" type:"structure"` + + // A new value for the attribute. Use only with the kernel, ramdisk, userData, + // disableApiTermination, or instanceInitiatedShutdownBehavior attribute. + Value *string `locationName:"value" type:"string"` } // String returns the string representation -func (s GetConsoleOutputInput) String() string { +func (s ModifyInstanceAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetConsoleOutputInput) GoString() string { +func (s ModifyInstanceAttributeInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *GetConsoleOutputInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetConsoleOutputInput"} +func (s *ModifyInstanceAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceAttributeInput"} if s.InstanceId == nil { invalidParams.Add(request.NewErrParamRequired("InstanceId")) } @@ -34527,96 +77523,152 @@ func (s *GetConsoleOutputInput) Validate() error { return nil } +// SetAttribute sets the Attribute field's value. +func (s *ModifyInstanceAttributeInput) SetAttribute(v string) *ModifyInstanceAttributeInput { + s.Attribute = &v + return s +} + +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *ModifyInstanceAttributeInput) SetBlockDeviceMappings(v []*InstanceBlockDeviceMappingSpecification) *ModifyInstanceAttributeInput { + s.BlockDeviceMappings = v + return s +} + +// SetDisableApiTermination sets the DisableApiTermination field's value. +func (s *ModifyInstanceAttributeInput) SetDisableApiTermination(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { + s.DisableApiTermination = v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *GetConsoleOutputInput) SetDryRun(v bool) *GetConsoleOutputInput { +func (s *ModifyInstanceAttributeInput) SetDryRun(v bool) *ModifyInstanceAttributeInput { s.DryRun = &v return s } +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *ModifyInstanceAttributeInput) SetEbsOptimized(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { + s.EbsOptimized = v + return s +} + +// SetEnaSupport sets the EnaSupport field's value. +func (s *ModifyInstanceAttributeInput) SetEnaSupport(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { + s.EnaSupport = v + return s +} + +// SetGroups sets the Groups field's value. +func (s *ModifyInstanceAttributeInput) SetGroups(v []*string) *ModifyInstanceAttributeInput { + s.Groups = v + return s +} + // SetInstanceId sets the InstanceId field's value. -func (s *GetConsoleOutputInput) SetInstanceId(v string) *GetConsoleOutputInput { +func (s *ModifyInstanceAttributeInput) SetInstanceId(v string) *ModifyInstanceAttributeInput { s.InstanceId = &v return s } -// Contains the output of GetConsoleOutput. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutputResult -type GetConsoleOutputOutput struct { - _ struct{} `type:"structure"` +// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. +func (s *ModifyInstanceAttributeInput) SetInstanceInitiatedShutdownBehavior(v *AttributeValue) *ModifyInstanceAttributeInput { + s.InstanceInitiatedShutdownBehavior = v + return s +} - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` +// SetInstanceType sets the InstanceType field's value. +func (s *ModifyInstanceAttributeInput) SetInstanceType(v *AttributeValue) *ModifyInstanceAttributeInput { + s.InstanceType = v + return s +} - // The console output, Base64-encoded. If using a command line tool, the tool - // decodes the output for you. - Output *string `locationName:"output" type:"string"` +// SetKernel sets the Kernel field's value. +func (s *ModifyInstanceAttributeInput) SetKernel(v *AttributeValue) *ModifyInstanceAttributeInput { + s.Kernel = v + return s +} + +// SetRamdisk sets the Ramdisk field's value. +func (s *ModifyInstanceAttributeInput) SetRamdisk(v *AttributeValue) *ModifyInstanceAttributeInput { + s.Ramdisk = v + return s +} + +// SetSourceDestCheck sets the SourceDestCheck field's value. +func (s *ModifyInstanceAttributeInput) SetSourceDestCheck(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { + s.SourceDestCheck = v + return s +} + +// SetSriovNetSupport sets the SriovNetSupport field's value. +func (s *ModifyInstanceAttributeInput) SetSriovNetSupport(v *AttributeValue) *ModifyInstanceAttributeInput { + s.SriovNetSupport = v + return s +} + +// SetUserData sets the UserData field's value. +func (s *ModifyInstanceAttributeInput) SetUserData(v *BlobAttributeValue) *ModifyInstanceAttributeInput { + s.UserData = v + return s +} + +// SetValue sets the Value field's value. +func (s *ModifyInstanceAttributeInput) SetValue(v string) *ModifyInstanceAttributeInput { + s.Value = &v + return s +} - // The time the output was last updated. - Timestamp *time.Time `locationName:"timestamp" type:"timestamp" timestampFormat:"iso8601"` +type ModifyInstanceAttributeOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s GetConsoleOutputOutput) String() string { +func (s ModifyInstanceAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetConsoleOutputOutput) GoString() string { +func (s ModifyInstanceAttributeOutput) GoString() string { return s.String() } -// SetInstanceId sets the InstanceId field's value. -func (s *GetConsoleOutputOutput) SetInstanceId(v string) *GetConsoleOutputOutput { - s.InstanceId = &v - return s -} - -// SetOutput sets the Output field's value. -func (s *GetConsoleOutputOutput) SetOutput(v string) *GetConsoleOutputOutput { - s.Output = &v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *GetConsoleOutputOutput) SetTimestamp(v time.Time) *GetConsoleOutputOutput { - s.Timestamp = &v - return s -} - -// Contains the parameters for the request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshotRequest -type GetConsoleScreenshotInput struct { +type ModifyInstanceCapacityReservationAttributesInput struct { _ struct{} `type:"structure"` + // Information about the Capacity Reservation targeting option. + // + // CapacityReservationSpecification is a required field + CapacityReservationSpecification *CapacityReservationSpecification `type:"structure" required:"true"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `type:"boolean"` - // The ID of the instance. + // The ID of the instance to be modified. // // InstanceId is a required field InstanceId *string `type:"string" required:"true"` - - // When set to true, acts as keystroke input and wakes up an instance that's - // in standby or "sleep" mode. - WakeUp *bool `type:"boolean"` } // String returns the string representation -func (s GetConsoleScreenshotInput) String() string { +func (s ModifyInstanceCapacityReservationAttributesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetConsoleScreenshotInput) GoString() string { +func (s ModifyInstanceCapacityReservationAttributesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *GetConsoleScreenshotInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetConsoleScreenshotInput"} +func (s *ModifyInstanceCapacityReservationAttributesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceCapacityReservationAttributesInput"} + if s.CapacityReservationSpecification == nil { + invalidParams.Add(request.NewErrParamRequired("CapacityReservationSpecification")) + } if s.InstanceId == nil { invalidParams.Add(request.NewErrParamRequired("InstanceId")) } @@ -34627,92 +77679,82 @@ func (s *GetConsoleScreenshotInput) Validate() error { return nil } +// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. +func (s *ModifyInstanceCapacityReservationAttributesInput) SetCapacityReservationSpecification(v *CapacityReservationSpecification) *ModifyInstanceCapacityReservationAttributesInput { + s.CapacityReservationSpecification = v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *GetConsoleScreenshotInput) SetDryRun(v bool) *GetConsoleScreenshotInput { +func (s *ModifyInstanceCapacityReservationAttributesInput) SetDryRun(v bool) *ModifyInstanceCapacityReservationAttributesInput { s.DryRun = &v return s } // SetInstanceId sets the InstanceId field's value. -func (s *GetConsoleScreenshotInput) SetInstanceId(v string) *GetConsoleScreenshotInput { +func (s *ModifyInstanceCapacityReservationAttributesInput) SetInstanceId(v string) *ModifyInstanceCapacityReservationAttributesInput { s.InstanceId = &v return s } -// SetWakeUp sets the WakeUp field's value. -func (s *GetConsoleScreenshotInput) SetWakeUp(v bool) *GetConsoleScreenshotInput { - s.WakeUp = &v - return s -} - -// Contains the output of the request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshotResult -type GetConsoleScreenshotOutput struct { +type ModifyInstanceCapacityReservationAttributesOutput struct { _ struct{} `type:"structure"` - // The data that comprises the image. - ImageData *string `locationName:"imageData" type:"string"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s GetConsoleScreenshotOutput) String() string { +func (s ModifyInstanceCapacityReservationAttributesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetConsoleScreenshotOutput) GoString() string { +func (s ModifyInstanceCapacityReservationAttributesOutput) GoString() string { return s.String() } -// SetImageData sets the ImageData field's value. -func (s *GetConsoleScreenshotOutput) SetImageData(v string) *GetConsoleScreenshotOutput { - s.ImageData = &v - return s -} - -// SetInstanceId sets the InstanceId field's value. -func (s *GetConsoleScreenshotOutput) SetInstanceId(v string) *GetConsoleScreenshotOutput { - s.InstanceId = &v +// SetReturn sets the Return field's value. +func (s *ModifyInstanceCapacityReservationAttributesOutput) SetReturn(v bool) *ModifyInstanceCapacityReservationAttributesOutput { + s.Return = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreviewRequest -type GetHostReservationPurchasePreviewInput struct { +type ModifyInstanceCreditSpecificationInput struct { _ struct{} `type:"structure"` - // The ID/s of the Dedicated Host/s that the reservation will be associated - // with. - // - // HostIdSet is a required field - HostIdSet []*string `locationNameList:"item" type:"list" required:"true"` + // A unique, case-sensitive token that you provide to ensure idempotency of + // your modification request. For more information, see Ensuring Idempotency + // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` - // The offering ID of the reservation. + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // Information about the credit option for CPU usage. // - // OfferingId is a required field - OfferingId *string `type:"string" required:"true"` + // InstanceCreditSpecifications is a required field + InstanceCreditSpecifications []*InstanceCreditSpecificationRequest `locationName:"InstanceCreditSpecification" locationNameList:"item" type:"list" required:"true"` } // String returns the string representation -func (s GetHostReservationPurchasePreviewInput) String() string { +func (s ModifyInstanceCreditSpecificationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetHostReservationPurchasePreviewInput) GoString() string { +func (s ModifyInstanceCreditSpecificationInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *GetHostReservationPurchasePreviewInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetHostReservationPurchasePreviewInput"} - if s.HostIdSet == nil { - invalidParams.Add(request.NewErrParamRequired("HostIdSet")) - } - if s.OfferingId == nil { - invalidParams.Add(request.NewErrParamRequired("OfferingId")) +func (s *ModifyInstanceCreditSpecificationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceCreditSpecificationInput"} + if s.InstanceCreditSpecifications == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceCreditSpecifications")) } if invalidParams.Len() > 0 { @@ -34721,104 +77763,105 @@ func (s *GetHostReservationPurchasePreviewInput) Validate() error { return nil } -// SetHostIdSet sets the HostIdSet field's value. -func (s *GetHostReservationPurchasePreviewInput) SetHostIdSet(v []*string) *GetHostReservationPurchasePreviewInput { - s.HostIdSet = v +// SetClientToken sets the ClientToken field's value. +func (s *ModifyInstanceCreditSpecificationInput) SetClientToken(v string) *ModifyInstanceCreditSpecificationInput { + s.ClientToken = &v return s } -// SetOfferingId sets the OfferingId field's value. -func (s *GetHostReservationPurchasePreviewInput) SetOfferingId(v string) *GetHostReservationPurchasePreviewInput { - s.OfferingId = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyInstanceCreditSpecificationInput) SetDryRun(v bool) *ModifyInstanceCreditSpecificationInput { + s.DryRun = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreviewResult -type GetHostReservationPurchasePreviewOutput struct { - _ struct{} `type:"structure"` - - // The currency in which the totalUpfrontPrice and totalHourlyPrice amounts - // are specified. At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` +// SetInstanceCreditSpecifications sets the InstanceCreditSpecifications field's value. +func (s *ModifyInstanceCreditSpecificationInput) SetInstanceCreditSpecifications(v []*InstanceCreditSpecificationRequest) *ModifyInstanceCreditSpecificationInput { + s.InstanceCreditSpecifications = v + return s +} - // The purchase information of the Dedicated Host Reservation and the Dedicated - // Hosts associated with it. - Purchase []*Purchase `locationName:"purchase" type:"list"` +type ModifyInstanceCreditSpecificationOutput struct { + _ struct{} `type:"structure"` - // The potential total hourly price of the reservation per hour. - TotalHourlyPrice *string `locationName:"totalHourlyPrice" type:"string"` + // Information about the instances whose credit option for CPU usage was successfully + // modified. + SuccessfulInstanceCreditSpecifications []*SuccessfulInstanceCreditSpecificationItem `locationName:"successfulInstanceCreditSpecificationSet" locationNameList:"item" type:"list"` - // The potential total upfront price. This is billed immediately. - TotalUpfrontPrice *string `locationName:"totalUpfrontPrice" type:"string"` + // Information about the instances whose credit option for CPU usage was not + // modified. + UnsuccessfulInstanceCreditSpecifications []*UnsuccessfulInstanceCreditSpecificationItem `locationName:"unsuccessfulInstanceCreditSpecificationSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s GetHostReservationPurchasePreviewOutput) String() string { +func (s ModifyInstanceCreditSpecificationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetHostReservationPurchasePreviewOutput) GoString() string { +func (s ModifyInstanceCreditSpecificationOutput) GoString() string { return s.String() } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *GetHostReservationPurchasePreviewOutput) SetCurrencyCode(v string) *GetHostReservationPurchasePreviewOutput { - s.CurrencyCode = &v - return s -} - -// SetPurchase sets the Purchase field's value. -func (s *GetHostReservationPurchasePreviewOutput) SetPurchase(v []*Purchase) *GetHostReservationPurchasePreviewOutput { - s.Purchase = v - return s -} - -// SetTotalHourlyPrice sets the TotalHourlyPrice field's value. -func (s *GetHostReservationPurchasePreviewOutput) SetTotalHourlyPrice(v string) *GetHostReservationPurchasePreviewOutput { - s.TotalHourlyPrice = &v +// SetSuccessfulInstanceCreditSpecifications sets the SuccessfulInstanceCreditSpecifications field's value. +func (s *ModifyInstanceCreditSpecificationOutput) SetSuccessfulInstanceCreditSpecifications(v []*SuccessfulInstanceCreditSpecificationItem) *ModifyInstanceCreditSpecificationOutput { + s.SuccessfulInstanceCreditSpecifications = v return s } -// SetTotalUpfrontPrice sets the TotalUpfrontPrice field's value. -func (s *GetHostReservationPurchasePreviewOutput) SetTotalUpfrontPrice(v string) *GetHostReservationPurchasePreviewOutput { - s.TotalUpfrontPrice = &v +// SetUnsuccessfulInstanceCreditSpecifications sets the UnsuccessfulInstanceCreditSpecifications field's value. +func (s *ModifyInstanceCreditSpecificationOutput) SetUnsuccessfulInstanceCreditSpecifications(v []*UnsuccessfulInstanceCreditSpecificationItem) *ModifyInstanceCreditSpecificationOutput { + s.UnsuccessfulInstanceCreditSpecifications = v return s } -// Contains the parameters for GetPasswordData. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordDataRequest -type GetPasswordDataInput struct { +type ModifyInstanceEventStartTimeInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the Windows instance. + // The ID of the event whose date and time you are modifying. + // + // InstanceEventId is a required field + InstanceEventId *string `type:"string" required:"true"` + + // The ID of the instance with the scheduled event. // // InstanceId is a required field InstanceId *string `type:"string" required:"true"` + + // The new date and time when the event will take place. + // + // NotBefore is a required field + NotBefore *time.Time `type:"timestamp" required:"true"` } // String returns the string representation -func (s GetPasswordDataInput) String() string { +func (s ModifyInstanceEventStartTimeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetPasswordDataInput) GoString() string { +func (s ModifyInstanceEventStartTimeInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *GetPasswordDataInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetPasswordDataInput"} +func (s *ModifyInstanceEventStartTimeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceEventStartTimeInput"} + if s.InstanceEventId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceEventId")) + } if s.InstanceId == nil { invalidParams.Add(request.NewErrParamRequired("InstanceId")) } + if s.NotBefore == nil { + invalidParams.Add(request.NewErrParamRequired("NotBefore")) + } if invalidParams.Len() > 0 { return invalidParams @@ -34827,63 +77870,53 @@ func (s *GetPasswordDataInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *GetPasswordDataInput) SetDryRun(v bool) *GetPasswordDataInput { +func (s *ModifyInstanceEventStartTimeInput) SetDryRun(v bool) *ModifyInstanceEventStartTimeInput { s.DryRun = &v return s } +// SetInstanceEventId sets the InstanceEventId field's value. +func (s *ModifyInstanceEventStartTimeInput) SetInstanceEventId(v string) *ModifyInstanceEventStartTimeInput { + s.InstanceEventId = &v + return s +} + // SetInstanceId sets the InstanceId field's value. -func (s *GetPasswordDataInput) SetInstanceId(v string) *GetPasswordDataInput { +func (s *ModifyInstanceEventStartTimeInput) SetInstanceId(v string) *ModifyInstanceEventStartTimeInput { s.InstanceId = &v return s } -// Contains the output of GetPasswordData. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordDataResult -type GetPasswordDataOutput struct { - _ struct{} `type:"structure"` - - // The ID of the Windows instance. - InstanceId *string `locationName:"instanceId" type:"string"` +// SetNotBefore sets the NotBefore field's value. +func (s *ModifyInstanceEventStartTimeInput) SetNotBefore(v time.Time) *ModifyInstanceEventStartTimeInput { + s.NotBefore = &v + return s +} - // The password of the instance. - PasswordData *string `locationName:"passwordData" type:"string"` +type ModifyInstanceEventStartTimeOutput struct { + _ struct{} `type:"structure"` - // The time the data was last updated. - Timestamp *time.Time `locationName:"timestamp" type:"timestamp" timestampFormat:"iso8601"` + // Describes a scheduled event for an instance. + Event *InstanceStatusEvent `locationName:"event" type:"structure"` } // String returns the string representation -func (s GetPasswordDataOutput) String() string { +func (s ModifyInstanceEventStartTimeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetPasswordDataOutput) GoString() string { +func (s ModifyInstanceEventStartTimeOutput) GoString() string { return s.String() } -// SetInstanceId sets the InstanceId field's value. -func (s *GetPasswordDataOutput) SetInstanceId(v string) *GetPasswordDataOutput { - s.InstanceId = &v - return s -} - -// SetPasswordData sets the PasswordData field's value. -func (s *GetPasswordDataOutput) SetPasswordData(v string) *GetPasswordDataOutput { - s.PasswordData = &v - return s -} - -// SetTimestamp sets the Timestamp field's value. -func (s *GetPasswordDataOutput) SetTimestamp(v time.Time) *GetPasswordDataOutput { - s.Timestamp = &v +// SetEvent sets the Event field's value. +func (s *ModifyInstanceEventStartTimeOutput) SetEvent(v *InstanceStatusEvent) *ModifyInstanceEventStartTimeOutput { + s.Event = v return s } -// Contains the parameters for GetReservedInstanceExchangeQuote. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuoteRequest -type GetReservedInstancesExchangeQuoteInput struct { +type ModifyInstanceMetadataOptionsInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -34892,41 +77925,56 @@ type GetReservedInstancesExchangeQuoteInput struct { // it is UnauthorizedOperation. DryRun *bool `type:"boolean"` - // The IDs of the Convertible Reserved Instances to exchange. + // This parameter enables or disables the HTTP metadata endpoint on your instances. + // If the parameter is not specified, the existing state is maintained. // - // ReservedInstanceIds is a required field - ReservedInstanceIds []*string `locationName:"ReservedInstanceId" locationNameList:"ReservedInstanceId" type:"list" required:"true"` + // If you specify a value of disabled, you will not be able to access your instance + // metadata. + HttpEndpoint *string `type:"string" enum:"InstanceMetadataEndpointState"` - // The configuration requirements of the Convertible Reserved Instances to exchange - // for your current Convertible Reserved Instances. - TargetConfigurations []*TargetConfigurationRequest `locationName:"TargetConfiguration" locationNameList:"TargetConfigurationRequest" type:"list"` + // The desired HTTP PUT response hop limit for instance metadata requests. The + // larger the number, the further instance metadata requests can travel. If + // no parameter is specified, the existing state is maintained. + // + // Possible values: Integers from 1 to 64 + HttpPutResponseHopLimit *int64 `type:"integer"` + + // The state of token usage for your instance metadata requests. If the parameter + // is not specified in the request, the default state is optional. + // + // If the state is optional, you can choose to retrieve instance metadata with + // or without a signed token header on your request. If you retrieve the IAM + // role credentials without a token, the version 1.0 role credentials are returned. + // If you retrieve the IAM role credentials using a valid signed token, the + // version 2.0 role credentials are returned. + // + // If the state is required, you must send a signed token header with any instance + // metadata retrieval requests. In this state, retrieving the IAM role credential + // always returns the version 2.0 credentials; the version 1.0 credentials are + // not available. + HttpTokens *string `type:"string" enum:"HttpTokensState"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` } // String returns the string representation -func (s GetReservedInstancesExchangeQuoteInput) String() string { +func (s ModifyInstanceMetadataOptionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetReservedInstancesExchangeQuoteInput) GoString() string { +func (s ModifyInstanceMetadataOptionsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *GetReservedInstancesExchangeQuoteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "GetReservedInstancesExchangeQuoteInput"} - if s.ReservedInstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstanceIds")) - } - if s.TargetConfigurations != nil { - for i, v := range s.TargetConfigurations { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "TargetConfigurations", i), err.(request.ErrInvalidParams)) - } - } +func (s *ModifyInstanceMetadataOptionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceMetadataOptionsInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) } if invalidParams.Len() > 0 { @@ -34936,1541 +77984,1601 @@ func (s *GetReservedInstancesExchangeQuoteInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *GetReservedInstancesExchangeQuoteInput) SetDryRun(v bool) *GetReservedInstancesExchangeQuoteInput { +func (s *ModifyInstanceMetadataOptionsInput) SetDryRun(v bool) *ModifyInstanceMetadataOptionsInput { s.DryRun = &v return s } -// SetReservedInstanceIds sets the ReservedInstanceIds field's value. -func (s *GetReservedInstancesExchangeQuoteInput) SetReservedInstanceIds(v []*string) *GetReservedInstancesExchangeQuoteInput { - s.ReservedInstanceIds = v +// SetHttpEndpoint sets the HttpEndpoint field's value. +func (s *ModifyInstanceMetadataOptionsInput) SetHttpEndpoint(v string) *ModifyInstanceMetadataOptionsInput { + s.HttpEndpoint = &v return s } -// SetTargetConfigurations sets the TargetConfigurations field's value. -func (s *GetReservedInstancesExchangeQuoteInput) SetTargetConfigurations(v []*TargetConfigurationRequest) *GetReservedInstancesExchangeQuoteInput { - s.TargetConfigurations = v +// SetHttpPutResponseHopLimit sets the HttpPutResponseHopLimit field's value. +func (s *ModifyInstanceMetadataOptionsInput) SetHttpPutResponseHopLimit(v int64) *ModifyInstanceMetadataOptionsInput { + s.HttpPutResponseHopLimit = &v return s } -// Contains the output of GetReservedInstancesExchangeQuote. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuoteResult -type GetReservedInstancesExchangeQuoteOutput struct { +// SetHttpTokens sets the HttpTokens field's value. +func (s *ModifyInstanceMetadataOptionsInput) SetHttpTokens(v string) *ModifyInstanceMetadataOptionsInput { + s.HttpTokens = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *ModifyInstanceMetadataOptionsInput) SetInstanceId(v string) *ModifyInstanceMetadataOptionsInput { + s.InstanceId = &v + return s +} + +type ModifyInstanceMetadataOptionsOutput struct { _ struct{} `type:"structure"` - // The currency of the transaction. - CurrencyCode *string `locationName:"currencyCode" type:"string"` + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` - // If true, the exchange is valid. If false, the exchange cannot be completed. - IsValidExchange *bool `locationName:"isValidExchange" type:"boolean"` + // The metadata options for the instance. + InstanceMetadataOptions *InstanceMetadataOptionsResponse `locationName:"instanceMetadataOptions" type:"structure"` +} - // The new end date of the reservation term. - OutputReservedInstancesWillExpireAt *time.Time `locationName:"outputReservedInstancesWillExpireAt" type:"timestamp" timestampFormat:"iso8601"` +// String returns the string representation +func (s ModifyInstanceMetadataOptionsOutput) String() string { + return awsutil.Prettify(s) +} - // The total true upfront charge for the exchange. - PaymentDue *string `locationName:"paymentDue" type:"string"` +// GoString returns the string representation +func (s ModifyInstanceMetadataOptionsOutput) GoString() string { + return s.String() +} - // The cost associated with the Reserved Instance. - ReservedInstanceValueRollup *ReservationValue `locationName:"reservedInstanceValueRollup" type:"structure"` +// SetInstanceId sets the InstanceId field's value. +func (s *ModifyInstanceMetadataOptionsOutput) SetInstanceId(v string) *ModifyInstanceMetadataOptionsOutput { + s.InstanceId = &v + return s +} - // The configuration of your Convertible Reserved Instances. - ReservedInstanceValueSet []*ReservedInstanceReservationValue `locationName:"reservedInstanceValueSet" locationNameList:"item" type:"list"` +// SetInstanceMetadataOptions sets the InstanceMetadataOptions field's value. +func (s *ModifyInstanceMetadataOptionsOutput) SetInstanceMetadataOptions(v *InstanceMetadataOptionsResponse) *ModifyInstanceMetadataOptionsOutput { + s.InstanceMetadataOptions = v + return s +} - // The cost associated with the Reserved Instance. - TargetConfigurationValueRollup *ReservationValue `locationName:"targetConfigurationValueRollup" type:"structure"` +type ModifyInstancePlacementInput struct { + _ struct{} `type:"structure"` - // The values of the target Convertible Reserved Instances. - TargetConfigurationValueSet []*TargetReservationValue `locationName:"targetConfigurationValueSet" locationNameList:"item" type:"list"` + // The affinity setting for the instance. + Affinity *string `locationName:"affinity" type:"string" enum:"Affinity"` - // Describes the reason why the exchange cannot be completed. - ValidationFailureReason *string `locationName:"validationFailureReason" type:"string"` + // The name of the placement group in which to place the instance. For spread + // placement groups, the instance must have a tenancy of default. For cluster + // and partition placement groups, the instance must have a tenancy of default + // or dedicated. + // + // To remove an instance from a placement group, specify an empty string (""). + GroupName *string `type:"string"` + + // The ID of the Dedicated Host with which to associate the instance. + HostId *string `locationName:"hostId" type:"string"` + + // The ID of the instance that you are modifying. + // + // InstanceId is a required field + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + + // Reserved for future use. + PartitionNumber *int64 `type:"integer"` + + // The tenancy for the instance. + Tenancy *string `locationName:"tenancy" type:"string" enum:"HostTenancy"` } // String returns the string representation -func (s GetReservedInstancesExchangeQuoteOutput) String() string { +func (s ModifyInstancePlacementInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GetReservedInstancesExchangeQuoteOutput) GoString() string { +func (s ModifyInstancePlacementInput) GoString() string { return s.String() } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetCurrencyCode(v string) *GetReservedInstancesExchangeQuoteOutput { - s.CurrencyCode = &v - return s -} - -// SetIsValidExchange sets the IsValidExchange field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetIsValidExchange(v bool) *GetReservedInstancesExchangeQuoteOutput { - s.IsValidExchange = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyInstancePlacementInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyInstancePlacementInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } -// SetOutputReservedInstancesWillExpireAt sets the OutputReservedInstancesWillExpireAt field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetOutputReservedInstancesWillExpireAt(v time.Time) *GetReservedInstancesExchangeQuoteOutput { - s.OutputReservedInstancesWillExpireAt = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetPaymentDue sets the PaymentDue field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetPaymentDue(v string) *GetReservedInstancesExchangeQuoteOutput { - s.PaymentDue = &v +// SetAffinity sets the Affinity field's value. +func (s *ModifyInstancePlacementInput) SetAffinity(v string) *ModifyInstancePlacementInput { + s.Affinity = &v return s } -// SetReservedInstanceValueRollup sets the ReservedInstanceValueRollup field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetReservedInstanceValueRollup(v *ReservationValue) *GetReservedInstancesExchangeQuoteOutput { - s.ReservedInstanceValueRollup = v +// SetGroupName sets the GroupName field's value. +func (s *ModifyInstancePlacementInput) SetGroupName(v string) *ModifyInstancePlacementInput { + s.GroupName = &v return s } -// SetReservedInstanceValueSet sets the ReservedInstanceValueSet field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetReservedInstanceValueSet(v []*ReservedInstanceReservationValue) *GetReservedInstancesExchangeQuoteOutput { - s.ReservedInstanceValueSet = v +// SetHostId sets the HostId field's value. +func (s *ModifyInstancePlacementInput) SetHostId(v string) *ModifyInstancePlacementInput { + s.HostId = &v return s } -// SetTargetConfigurationValueRollup sets the TargetConfigurationValueRollup field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetTargetConfigurationValueRollup(v *ReservationValue) *GetReservedInstancesExchangeQuoteOutput { - s.TargetConfigurationValueRollup = v +// SetInstanceId sets the InstanceId field's value. +func (s *ModifyInstancePlacementInput) SetInstanceId(v string) *ModifyInstancePlacementInput { + s.InstanceId = &v return s } -// SetTargetConfigurationValueSet sets the TargetConfigurationValueSet field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetTargetConfigurationValueSet(v []*TargetReservationValue) *GetReservedInstancesExchangeQuoteOutput { - s.TargetConfigurationValueSet = v +// SetPartitionNumber sets the PartitionNumber field's value. +func (s *ModifyInstancePlacementInput) SetPartitionNumber(v int64) *ModifyInstancePlacementInput { + s.PartitionNumber = &v return s } -// SetValidationFailureReason sets the ValidationFailureReason field's value. -func (s *GetReservedInstancesExchangeQuoteOutput) SetValidationFailureReason(v string) *GetReservedInstancesExchangeQuoteOutput { - s.ValidationFailureReason = &v +// SetTenancy sets the Tenancy field's value. +func (s *ModifyInstancePlacementInput) SetTenancy(v string) *ModifyInstancePlacementInput { + s.Tenancy = &v return s } -// Describes a security group. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GroupIdentifier -type GroupIdentifier struct { +type ModifyInstancePlacementOutput struct { _ struct{} `type:"structure"` - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` - - // The name of the security group. - GroupName *string `locationName:"groupName" type:"string"` + // Is true if the request succeeds, and an error otherwise. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s GroupIdentifier) String() string { +func (s ModifyInstancePlacementOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s GroupIdentifier) GoString() string { +func (s ModifyInstancePlacementOutput) GoString() string { return s.String() } -// SetGroupId sets the GroupId field's value. -func (s *GroupIdentifier) SetGroupId(v string) *GroupIdentifier { - s.GroupId = &v - return s -} - -// SetGroupName sets the GroupName field's value. -func (s *GroupIdentifier) SetGroupName(v string) *GroupIdentifier { - s.GroupName = &v +// SetReturn sets the Return field's value. +func (s *ModifyInstancePlacementOutput) SetReturn(v bool) *ModifyInstancePlacementOutput { + s.Return = &v return s } -// Describes an event in the history of the Spot fleet request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HistoryRecord -type HistoryRecord struct { +type ModifyLaunchTemplateInput struct { _ struct{} `type:"structure"` - // Information about the event. + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). // - // EventInformation is a required field - EventInformation *EventInformation `locationName:"eventInformation" type:"structure" required:"true"` + // Constraint: Maximum 128 ASCII characters. + ClientToken *string `type:"string"` - // The event type. - // - // * error - Indicates an error with the Spot fleet request. - // - // * fleetRequestChange - Indicates a change in the status or configuration - // of the Spot fleet request. - // - // * instanceChange - Indicates that an instance was launched or terminated. - // - // EventType is a required field - EventType *string `locationName:"eventType" type:"string" required:"true" enum:"EventType"` + // The version number of the launch template to set as the default version. + DefaultVersion *string `locationName:"SetDefaultVersion" type:"string"` - // The date and time of the event, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // - // Timestamp is a required field - Timestamp *time.Time `locationName:"timestamp" type:"timestamp" timestampFormat:"iso8601" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateId *string `type:"string"` + + // The name of the launch template. You must specify either the launch template + // ID or launch template name in the request. + LaunchTemplateName *string `min:"3" type:"string"` } // String returns the string representation -func (s HistoryRecord) String() string { +func (s ModifyLaunchTemplateInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HistoryRecord) GoString() string { +func (s ModifyLaunchTemplateInput) GoString() string { return s.String() } -// SetEventInformation sets the EventInformation field's value. -func (s *HistoryRecord) SetEventInformation(v *EventInformation) *HistoryRecord { - s.EventInformation = v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyLaunchTemplateInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyLaunchTemplateInput"} + if s.LaunchTemplateName != nil && len(*s.LaunchTemplateName) < 3 { + invalidParams.Add(request.NewErrParamMinLen("LaunchTemplateName", 3)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *ModifyLaunchTemplateInput) SetClientToken(v string) *ModifyLaunchTemplateInput { + s.ClientToken = &v return s } -// SetEventType sets the EventType field's value. -func (s *HistoryRecord) SetEventType(v string) *HistoryRecord { - s.EventType = &v +// SetDefaultVersion sets the DefaultVersion field's value. +func (s *ModifyLaunchTemplateInput) SetDefaultVersion(v string) *ModifyLaunchTemplateInput { + s.DefaultVersion = &v return s } -// SetTimestamp sets the Timestamp field's value. -func (s *HistoryRecord) SetTimestamp(v time.Time) *HistoryRecord { - s.Timestamp = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyLaunchTemplateInput) SetDryRun(v bool) *ModifyLaunchTemplateInput { + s.DryRun = &v return s } -// Describes the properties of the Dedicated Host. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Host -type Host struct { +// SetLaunchTemplateId sets the LaunchTemplateId field's value. +func (s *ModifyLaunchTemplateInput) SetLaunchTemplateId(v string) *ModifyLaunchTemplateInput { + s.LaunchTemplateId = &v + return s +} + +// SetLaunchTemplateName sets the LaunchTemplateName field's value. +func (s *ModifyLaunchTemplateInput) SetLaunchTemplateName(v string) *ModifyLaunchTemplateInput { + s.LaunchTemplateName = &v + return s +} + +type ModifyLaunchTemplateOutput struct { _ struct{} `type:"structure"` - // Whether auto-placement is on or off. - AutoPlacement *string `locationName:"autoPlacement" type:"string" enum:"AutoPlacement"` + // Information about the launch template. + LaunchTemplate *LaunchTemplate `locationName:"launchTemplate" type:"structure"` +} - // The Availability Zone of the Dedicated Host. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` +// String returns the string representation +func (s ModifyLaunchTemplateOutput) String() string { + return awsutil.Prettify(s) +} - // The number of new instances that can be launched onto the Dedicated Host. - AvailableCapacity *AvailableCapacity `locationName:"availableCapacity" type:"structure"` +// GoString returns the string representation +func (s ModifyLaunchTemplateOutput) GoString() string { + return s.String() +} - // Unique, case-sensitive identifier you provide to ensure idempotency of the - // request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) - // in the Amazon Elastic Compute Cloud User Guide. - ClientToken *string `locationName:"clientToken" type:"string"` +// SetLaunchTemplate sets the LaunchTemplate field's value. +func (s *ModifyLaunchTemplateOutput) SetLaunchTemplate(v *LaunchTemplate) *ModifyLaunchTemplateOutput { + s.LaunchTemplate = v + return s +} - // The ID of the Dedicated Host. - HostId *string `locationName:"hostId" type:"string"` +// Contains the parameters for ModifyNetworkInterfaceAttribute. +type ModifyNetworkInterfaceAttributeInput struct { + _ struct{} `type:"structure"` - // The hardware specifications of the Dedicated Host. - HostProperties *HostProperties `locationName:"hostProperties" type:"structure"` + // Information about the interface attachment. If modifying the 'delete on termination' + // attribute, you must specify the ID of the interface attachment. + Attachment *NetworkInterfaceAttachmentChanges `locationName:"attachment" type:"structure"` - // The reservation ID of the Dedicated Host. This returns a null response if - // the Dedicated Host doesn't have an associated reservation. - HostReservationId *string `locationName:"hostReservationId" type:"string"` + // A description for the network interface. + Description *AttributeValue `locationName:"description" type:"structure"` - // The IDs and instance type that are currently running on the Dedicated Host. - Instances []*HostInstance `locationName:"instances" locationNameList:"item" type:"list"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The Dedicated Host's state. - State *string `locationName:"state" type:"string" enum:"AllocationState"` + // Changes the security groups for the network interface. The new set of groups + // you specify replaces the current set. You must specify at least one group, + // even if it's just the default security group in the VPC. You must specify + // the ID of the security group, not the name. + Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + + // The ID of the network interface. + // + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` + + // Indicates whether source/destination checking is enabled. A value of true + // means checking is enabled, and false means checking is disabled. This value + // must be false for a NAT instance to perform NAT. For more information, see + // NAT Instances (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) + // in the Amazon Virtual Private Cloud User Guide. + SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` } // String returns the string representation -func (s Host) String() string { +func (s ModifyNetworkInterfaceAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Host) GoString() string { +func (s ModifyNetworkInterfaceAttributeInput) GoString() string { return s.String() } -// SetAutoPlacement sets the AutoPlacement field's value. -func (s *Host) SetAutoPlacement(v string) *Host { - s.AutoPlacement = &v - return s -} - -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *Host) SetAvailabilityZone(v string) *Host { - s.AvailabilityZone = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyNetworkInterfaceAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyNetworkInterfaceAttributeInput"} + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) + } -// SetAvailableCapacity sets the AvailableCapacity field's value. -func (s *Host) SetAvailableCapacity(v *AvailableCapacity) *Host { - s.AvailableCapacity = v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetClientToken sets the ClientToken field's value. -func (s *Host) SetClientToken(v string) *Host { - s.ClientToken = &v +// SetAttachment sets the Attachment field's value. +func (s *ModifyNetworkInterfaceAttributeInput) SetAttachment(v *NetworkInterfaceAttachmentChanges) *ModifyNetworkInterfaceAttributeInput { + s.Attachment = v return s } -// SetHostId sets the HostId field's value. -func (s *Host) SetHostId(v string) *Host { - s.HostId = &v +// SetDescription sets the Description field's value. +func (s *ModifyNetworkInterfaceAttributeInput) SetDescription(v *AttributeValue) *ModifyNetworkInterfaceAttributeInput { + s.Description = v return s } -// SetHostProperties sets the HostProperties field's value. -func (s *Host) SetHostProperties(v *HostProperties) *Host { - s.HostProperties = v +// SetDryRun sets the DryRun field's value. +func (s *ModifyNetworkInterfaceAttributeInput) SetDryRun(v bool) *ModifyNetworkInterfaceAttributeInput { + s.DryRun = &v return s } -// SetHostReservationId sets the HostReservationId field's value. -func (s *Host) SetHostReservationId(v string) *Host { - s.HostReservationId = &v +// SetGroups sets the Groups field's value. +func (s *ModifyNetworkInterfaceAttributeInput) SetGroups(v []*string) *ModifyNetworkInterfaceAttributeInput { + s.Groups = v return s } -// SetInstances sets the Instances field's value. -func (s *Host) SetInstances(v []*HostInstance) *Host { - s.Instances = v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *ModifyNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *ModifyNetworkInterfaceAttributeInput { + s.NetworkInterfaceId = &v return s } -// SetState sets the State field's value. -func (s *Host) SetState(v string) *Host { - s.State = &v +// SetSourceDestCheck sets the SourceDestCheck field's value. +func (s *ModifyNetworkInterfaceAttributeInput) SetSourceDestCheck(v *AttributeBooleanValue) *ModifyNetworkInterfaceAttributeInput { + s.SourceDestCheck = v return s } -// Describes an instance running on a Dedicated Host. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HostInstance -type HostInstance struct { +type ModifyNetworkInterfaceAttributeOutput struct { _ struct{} `type:"structure"` - - // the IDs of instances that are running on the Dedicated Host. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The instance type size (for example, m3.medium) of the running instance. - InstanceType *string `locationName:"instanceType" type:"string"` } // String returns the string representation -func (s HostInstance) String() string { +func (s ModifyNetworkInterfaceAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HostInstance) GoString() string { +func (s ModifyNetworkInterfaceAttributeOutput) GoString() string { return s.String() } -// SetInstanceId sets the InstanceId field's value. -func (s *HostInstance) SetInstanceId(v string) *HostInstance { - s.InstanceId = &v - return s -} - -// SetInstanceType sets the InstanceType field's value. -func (s *HostInstance) SetInstanceType(v string) *HostInstance { - s.InstanceType = &v - return s -} - -// Details about the Dedicated Host Reservation offering. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HostOffering -type HostOffering struct { +// Contains the parameters for ModifyReservedInstances. +type ModifyReservedInstancesInput struct { _ struct{} `type:"structure"` - // The currency of the offering. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The duration of the offering (in seconds). - Duration *int64 `locationName:"duration" type:"integer"` - - // The hourly price of the offering. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - - // The instance family of the offering. - InstanceFamily *string `locationName:"instanceFamily" type:"string"` - - // The ID of the offering. - OfferingId *string `locationName:"offeringId" type:"string"` + // A unique, case-sensitive token you provide to ensure idempotency of your + // modification request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` - // The available payment option. - PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` + // The IDs of the Reserved Instances to modify. + // + // ReservedInstancesIds is a required field + ReservedInstancesIds []*string `locationName:"ReservedInstancesId" locationNameList:"ReservedInstancesId" type:"list" required:"true"` - // The upfront price of the offering. Does not apply to No Upfront offerings. - UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` + // The configuration settings for the Reserved Instances to modify. + // + // TargetConfigurations is a required field + TargetConfigurations []*ReservedInstancesConfiguration `locationName:"ReservedInstancesConfigurationSetItemType" locationNameList:"item" type:"list" required:"true"` } // String returns the string representation -func (s HostOffering) String() string { +func (s ModifyReservedInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HostOffering) GoString() string { +func (s ModifyReservedInstancesInput) GoString() string { return s.String() } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *HostOffering) SetCurrencyCode(v string) *HostOffering { - s.CurrencyCode = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyReservedInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyReservedInstancesInput"} + if s.ReservedInstancesIds == nil { + invalidParams.Add(request.NewErrParamRequired("ReservedInstancesIds")) + } + if s.TargetConfigurations == nil { + invalidParams.Add(request.NewErrParamRequired("TargetConfigurations")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetDuration sets the Duration field's value. -func (s *HostOffering) SetDuration(v int64) *HostOffering { - s.Duration = &v +// SetClientToken sets the ClientToken field's value. +func (s *ModifyReservedInstancesInput) SetClientToken(v string) *ModifyReservedInstancesInput { + s.ClientToken = &v return s } -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *HostOffering) SetHourlyPrice(v string) *HostOffering { - s.HourlyPrice = &v +// SetReservedInstancesIds sets the ReservedInstancesIds field's value. +func (s *ModifyReservedInstancesInput) SetReservedInstancesIds(v []*string) *ModifyReservedInstancesInput { + s.ReservedInstancesIds = v return s } -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *HostOffering) SetInstanceFamily(v string) *HostOffering { - s.InstanceFamily = &v +// SetTargetConfigurations sets the TargetConfigurations field's value. +func (s *ModifyReservedInstancesInput) SetTargetConfigurations(v []*ReservedInstancesConfiguration) *ModifyReservedInstancesInput { + s.TargetConfigurations = v return s } -// SetOfferingId sets the OfferingId field's value. -func (s *HostOffering) SetOfferingId(v string) *HostOffering { - s.OfferingId = &v - return s +// Contains the output of ModifyReservedInstances. +type ModifyReservedInstancesOutput struct { + _ struct{} `type:"structure"` + + // The ID for the modification. + ReservedInstancesModificationId *string `locationName:"reservedInstancesModificationId" type:"string"` } -// SetPaymentOption sets the PaymentOption field's value. -func (s *HostOffering) SetPaymentOption(v string) *HostOffering { - s.PaymentOption = &v - return s +// String returns the string representation +func (s ModifyReservedInstancesOutput) String() string { + return awsutil.Prettify(s) } -// SetUpfrontPrice sets the UpfrontPrice field's value. -func (s *HostOffering) SetUpfrontPrice(v string) *HostOffering { - s.UpfrontPrice = &v +// GoString returns the string representation +func (s ModifyReservedInstancesOutput) GoString() string { + return s.String() +} + +// SetReservedInstancesModificationId sets the ReservedInstancesModificationId field's value. +func (s *ModifyReservedInstancesOutput) SetReservedInstancesModificationId(v string) *ModifyReservedInstancesOutput { + s.ReservedInstancesModificationId = &v return s } -// Describes properties of a Dedicated Host. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HostProperties -type HostProperties struct { +type ModifySnapshotAttributeInput struct { _ struct{} `type:"structure"` - // The number of cores on the Dedicated Host. - Cores *int64 `locationName:"cores" type:"integer"` + // The snapshot attribute to modify. Only volume creation permissions can be + // modified. + Attribute *string `type:"string" enum:"SnapshotAttributeName"` - // The instance type size that the Dedicated Host supports (for example, m3.medium). - InstanceType *string `locationName:"instanceType" type:"string"` + // A JSON representation of the snapshot attribute modification. + CreateVolumePermission *CreateVolumePermissionModifications `type:"structure"` - // The number of sockets on the Dedicated Host. - Sockets *int64 `locationName:"sockets" type:"integer"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The number of vCPUs on the Dedicated Host. - TotalVCpus *int64 `locationName:"totalVCpus" type:"integer"` + // The group to modify for the snapshot. + GroupNames []*string `locationName:"UserGroup" locationNameList:"GroupName" type:"list"` + + // The type of operation to perform to the attribute. + OperationType *string `type:"string" enum:"OperationType"` + + // The ID of the snapshot. + // + // SnapshotId is a required field + SnapshotId *string `type:"string" required:"true"` + + // The account ID to modify for the snapshot. + UserIds []*string `locationName:"UserId" locationNameList:"UserId" type:"list"` } // String returns the string representation -func (s HostProperties) String() string { +func (s ModifySnapshotAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HostProperties) GoString() string { +func (s ModifySnapshotAttributeInput) GoString() string { return s.String() } -// SetCores sets the Cores field's value. -func (s *HostProperties) SetCores(v int64) *HostProperties { - s.Cores = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifySnapshotAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifySnapshotAttributeInput"} + if s.SnapshotId == nil { + invalidParams.Add(request.NewErrParamRequired("SnapshotId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetInstanceType sets the InstanceType field's value. -func (s *HostProperties) SetInstanceType(v string) *HostProperties { - s.InstanceType = &v +// SetAttribute sets the Attribute field's value. +func (s *ModifySnapshotAttributeInput) SetAttribute(v string) *ModifySnapshotAttributeInput { + s.Attribute = &v return s } -// SetSockets sets the Sockets field's value. -func (s *HostProperties) SetSockets(v int64) *HostProperties { - s.Sockets = &v +// SetCreateVolumePermission sets the CreateVolumePermission field's value. +func (s *ModifySnapshotAttributeInput) SetCreateVolumePermission(v *CreateVolumePermissionModifications) *ModifySnapshotAttributeInput { + s.CreateVolumePermission = v return s } -// SetTotalVCpus sets the TotalVCpus field's value. -func (s *HostProperties) SetTotalVCpus(v int64) *HostProperties { - s.TotalVCpus = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifySnapshotAttributeInput) SetDryRun(v bool) *ModifySnapshotAttributeInput { + s.DryRun = &v return s } -// Details about the Dedicated Host Reservation and associated Dedicated Hosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HostReservation -type HostReservation struct { - _ struct{} `type:"structure"` - - // The number of Dedicated Hosts the reservation is associated with. - Count *int64 `locationName:"count" type:"integer"` - - // The currency in which the upfrontPrice and hourlyPrice amounts are specified. - // At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The length of the reservation's term, specified in seconds. Can be 31536000 - // (1 year) | 94608000 (3 years). - Duration *int64 `locationName:"duration" type:"integer"` - - // The date and time that the reservation ends. - End *time.Time `locationName:"end" type:"timestamp" timestampFormat:"iso8601"` - - // The IDs of the Dedicated Hosts associated with the reservation. - HostIdSet []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` - - // The ID of the reservation that specifies the associated Dedicated Hosts. - HostReservationId *string `locationName:"hostReservationId" type:"string"` - - // The hourly price of the reservation. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - - // The instance family of the Dedicated Host Reservation. The instance family - // on the Dedicated Host must be the same in order for it to benefit from the - // reservation. - InstanceFamily *string `locationName:"instanceFamily" type:"string"` - - // The ID of the reservation. This remains the same regardless of which Dedicated - // Hosts are associated with it. - OfferingId *string `locationName:"offeringId" type:"string"` +// SetGroupNames sets the GroupNames field's value. +func (s *ModifySnapshotAttributeInput) SetGroupNames(v []*string) *ModifySnapshotAttributeInput { + s.GroupNames = v + return s +} - // The payment option selected for this reservation. - PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` +// SetOperationType sets the OperationType field's value. +func (s *ModifySnapshotAttributeInput) SetOperationType(v string) *ModifySnapshotAttributeInput { + s.OperationType = &v + return s +} - // The date and time that the reservation started. - Start *time.Time `locationName:"start" type:"timestamp" timestampFormat:"iso8601"` +// SetSnapshotId sets the SnapshotId field's value. +func (s *ModifySnapshotAttributeInput) SetSnapshotId(v string) *ModifySnapshotAttributeInput { + s.SnapshotId = &v + return s +} - // The state of the reservation. - State *string `locationName:"state" type:"string" enum:"ReservationState"` +// SetUserIds sets the UserIds field's value. +func (s *ModifySnapshotAttributeInput) SetUserIds(v []*string) *ModifySnapshotAttributeInput { + s.UserIds = v + return s +} - // The upfront price of the reservation. - UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` +type ModifySnapshotAttributeOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s HostReservation) String() string { +func (s ModifySnapshotAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s HostReservation) GoString() string { +func (s ModifySnapshotAttributeOutput) GoString() string { return s.String() } -// SetCount sets the Count field's value. -func (s *HostReservation) SetCount(v int64) *HostReservation { - s.Count = &v - return s -} +// Contains the parameters for ModifySpotFleetRequest. +type ModifySpotFleetRequestInput struct { + _ struct{} `type:"structure"` -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *HostReservation) SetCurrencyCode(v string) *HostReservation { - s.CurrencyCode = &v - return s -} + // Indicates whether running Spot Instances should be terminated if the target + // capacity of the Spot Fleet request is decreased below the current size of + // the Spot Fleet. + ExcessCapacityTerminationPolicy *string `locationName:"excessCapacityTerminationPolicy" type:"string" enum:"ExcessCapacityTerminationPolicy"` -// SetDuration sets the Duration field's value. -func (s *HostReservation) SetDuration(v int64) *HostReservation { - s.Duration = &v - return s -} + // The number of On-Demand Instances in the fleet. + OnDemandTargetCapacity *int64 `type:"integer"` -// SetEnd sets the End field's value. -func (s *HostReservation) SetEnd(v time.Time) *HostReservation { - s.End = &v - return s -} + // The ID of the Spot Fleet request. + // + // SpotFleetRequestId is a required field + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` -// SetHostIdSet sets the HostIdSet field's value. -func (s *HostReservation) SetHostIdSet(v []*string) *HostReservation { - s.HostIdSet = v - return s + // The size of the fleet. + TargetCapacity *int64 `locationName:"targetCapacity" type:"integer"` } -// SetHostReservationId sets the HostReservationId field's value. -func (s *HostReservation) SetHostReservationId(v string) *HostReservation { - s.HostReservationId = &v - return s +// String returns the string representation +func (s ModifySpotFleetRequestInput) String() string { + return awsutil.Prettify(s) } -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *HostReservation) SetHourlyPrice(v string) *HostReservation { - s.HourlyPrice = &v - return s +// GoString returns the string representation +func (s ModifySpotFleetRequestInput) GoString() string { + return s.String() } -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *HostReservation) SetInstanceFamily(v string) *HostReservation { - s.InstanceFamily = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifySpotFleetRequestInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifySpotFleetRequestInput"} + if s.SpotFleetRequestId == nil { + invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) + } -// SetOfferingId sets the OfferingId field's value. -func (s *HostReservation) SetOfferingId(v string) *HostReservation { - s.OfferingId = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetPaymentOption sets the PaymentOption field's value. -func (s *HostReservation) SetPaymentOption(v string) *HostReservation { - s.PaymentOption = &v +// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. +func (s *ModifySpotFleetRequestInput) SetExcessCapacityTerminationPolicy(v string) *ModifySpotFleetRequestInput { + s.ExcessCapacityTerminationPolicy = &v return s } -// SetStart sets the Start field's value. -func (s *HostReservation) SetStart(v time.Time) *HostReservation { - s.Start = &v +// SetOnDemandTargetCapacity sets the OnDemandTargetCapacity field's value. +func (s *ModifySpotFleetRequestInput) SetOnDemandTargetCapacity(v int64) *ModifySpotFleetRequestInput { + s.OnDemandTargetCapacity = &v return s } -// SetState sets the State field's value. -func (s *HostReservation) SetState(v string) *HostReservation { - s.State = &v +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *ModifySpotFleetRequestInput) SetSpotFleetRequestId(v string) *ModifySpotFleetRequestInput { + s.SpotFleetRequestId = &v return s } -// SetUpfrontPrice sets the UpfrontPrice field's value. -func (s *HostReservation) SetUpfrontPrice(v string) *HostReservation { - s.UpfrontPrice = &v +// SetTargetCapacity sets the TargetCapacity field's value. +func (s *ModifySpotFleetRequestInput) SetTargetCapacity(v int64) *ModifySpotFleetRequestInput { + s.TargetCapacity = &v return s } -// Describes an IAM instance profile. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IamInstanceProfile -type IamInstanceProfile struct { +// Contains the output of ModifySpotFleetRequest. +type ModifySpotFleetRequestOutput struct { _ struct{} `type:"structure"` - // The Amazon Resource Name (ARN) of the instance profile. - Arn *string `locationName:"arn" type:"string"` - - // The ID of the instance profile. - Id *string `locationName:"id" type:"string"` + // Is true if the request succeeds, and an error otherwise. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s IamInstanceProfile) String() string { +func (s ModifySpotFleetRequestOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s IamInstanceProfile) GoString() string { +func (s ModifySpotFleetRequestOutput) GoString() string { return s.String() } -// SetArn sets the Arn field's value. -func (s *IamInstanceProfile) SetArn(v string) *IamInstanceProfile { - s.Arn = &v - return s -} - -// SetId sets the Id field's value. -func (s *IamInstanceProfile) SetId(v string) *IamInstanceProfile { - s.Id = &v +// SetReturn sets the Return field's value. +func (s *ModifySpotFleetRequestOutput) SetReturn(v bool) *ModifySpotFleetRequestOutput { + s.Return = &v return s } -// Describes an association between an IAM instance profile and an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IamInstanceProfileAssociation -type IamInstanceProfileAssociation struct { +type ModifySubnetAttributeInput struct { _ struct{} `type:"structure"` - // The ID of the association. - AssociationId *string `locationName:"associationId" type:"string"` - - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfile `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` + // Specify true to indicate that network interfaces created in the specified + // subnet should be assigned an IPv6 address. This includes a network interface + // that's created when launching an instance into the subnet (the instance therefore + // receives an IPv6 address). + // + // If you enable the IPv6 addressing feature for your subnet, your network interface + // or instance only receives an IPv6 address if it's created using version 2016-11-15 + // or later of the Amazon EC2 API. + AssignIpv6AddressOnCreation *AttributeBooleanValue `type:"structure"` - // The state of the association. - State *string `locationName:"state" type:"string" enum:"IamInstanceProfileAssociationState"` + // Specify true to indicate that ENIs attached to instances created in the specified + // subnet should be assigned a public IPv4 address. + MapPublicIpOnLaunch *AttributeBooleanValue `type:"structure"` - // The time the IAM instance profile was associated with the instance. - Timestamp *time.Time `locationName:"timestamp" type:"timestamp" timestampFormat:"iso8601"` + // The ID of the subnet. + // + // SubnetId is a required field + SubnetId *string `locationName:"subnetId" type:"string" required:"true"` } // String returns the string representation -func (s IamInstanceProfileAssociation) String() string { +func (s ModifySubnetAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s IamInstanceProfileAssociation) GoString() string { +func (s ModifySubnetAttributeInput) GoString() string { return s.String() } -// SetAssociationId sets the AssociationId field's value. -func (s *IamInstanceProfileAssociation) SetAssociationId(v string) *IamInstanceProfileAssociation { - s.AssociationId = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifySubnetAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifySubnetAttributeInput"} + if s.SubnetId == nil { + invalidParams.Add(request.NewErrParamRequired("SubnetId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *IamInstanceProfileAssociation) SetIamInstanceProfile(v *IamInstanceProfile) *IamInstanceProfileAssociation { - s.IamInstanceProfile = v +// SetAssignIpv6AddressOnCreation sets the AssignIpv6AddressOnCreation field's value. +func (s *ModifySubnetAttributeInput) SetAssignIpv6AddressOnCreation(v *AttributeBooleanValue) *ModifySubnetAttributeInput { + s.AssignIpv6AddressOnCreation = v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *IamInstanceProfileAssociation) SetInstanceId(v string) *IamInstanceProfileAssociation { - s.InstanceId = &v +// SetMapPublicIpOnLaunch sets the MapPublicIpOnLaunch field's value. +func (s *ModifySubnetAttributeInput) SetMapPublicIpOnLaunch(v *AttributeBooleanValue) *ModifySubnetAttributeInput { + s.MapPublicIpOnLaunch = v return s } -// SetState sets the State field's value. -func (s *IamInstanceProfileAssociation) SetState(v string) *IamInstanceProfileAssociation { - s.State = &v +// SetSubnetId sets the SubnetId field's value. +func (s *ModifySubnetAttributeInput) SetSubnetId(v string) *ModifySubnetAttributeInput { + s.SubnetId = &v return s } -// SetTimestamp sets the Timestamp field's value. -func (s *IamInstanceProfileAssociation) SetTimestamp(v time.Time) *IamInstanceProfileAssociation { - s.Timestamp = &v - return s +type ModifySubnetAttributeOutput struct { + _ struct{} `type:"structure"` } -// Describes an IAM instance profile. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IamInstanceProfileSpecification -type IamInstanceProfileSpecification struct { +// String returns the string representation +func (s ModifySubnetAttributeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifySubnetAttributeOutput) GoString() string { + return s.String() +} + +type ModifyTrafficMirrorFilterNetworkServicesInput struct { _ struct{} `type:"structure"` - // The Amazon Resource Name (ARN) of the instance profile. - Arn *string `locationName:"arn" type:"string"` + // The network service, for example Amazon DNS, that you want to mirror. + AddNetworkServices []*string `locationName:"AddNetworkService" locationNameList:"item" type:"list"` - // The name of the instance profile. - Name *string `locationName:"name" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The network service, for example Amazon DNS, that you no longer want to mirror. + RemoveNetworkServices []*string `locationName:"RemoveNetworkService" locationNameList:"item" type:"list"` + + // The ID of the Traffic Mirror filter. + // + // TrafficMirrorFilterId is a required field + TrafficMirrorFilterId *string `type:"string" required:"true"` } // String returns the string representation -func (s IamInstanceProfileSpecification) String() string { +func (s ModifyTrafficMirrorFilterNetworkServicesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s IamInstanceProfileSpecification) GoString() string { +func (s ModifyTrafficMirrorFilterNetworkServicesInput) GoString() string { return s.String() } -// SetArn sets the Arn field's value. -func (s *IamInstanceProfileSpecification) SetArn(v string) *IamInstanceProfileSpecification { - s.Arn = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyTrafficMirrorFilterNetworkServicesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyTrafficMirrorFilterNetworkServicesInput"} + if s.TrafficMirrorFilterId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAddNetworkServices sets the AddNetworkServices field's value. +func (s *ModifyTrafficMirrorFilterNetworkServicesInput) SetAddNetworkServices(v []*string) *ModifyTrafficMirrorFilterNetworkServicesInput { + s.AddNetworkServices = v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *ModifyTrafficMirrorFilterNetworkServicesInput) SetDryRun(v bool) *ModifyTrafficMirrorFilterNetworkServicesInput { + s.DryRun = &v + return s +} + +// SetRemoveNetworkServices sets the RemoveNetworkServices field's value. +func (s *ModifyTrafficMirrorFilterNetworkServicesInput) SetRemoveNetworkServices(v []*string) *ModifyTrafficMirrorFilterNetworkServicesInput { + s.RemoveNetworkServices = v return s } -// SetName sets the Name field's value. -func (s *IamInstanceProfileSpecification) SetName(v string) *IamInstanceProfileSpecification { - s.Name = &v +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *ModifyTrafficMirrorFilterNetworkServicesInput) SetTrafficMirrorFilterId(v string) *ModifyTrafficMirrorFilterNetworkServicesInput { + s.TrafficMirrorFilterId = &v return s } -// Describes the ICMP type and code. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IcmpTypeCode -type IcmpTypeCode struct { +type ModifyTrafficMirrorFilterNetworkServicesOutput struct { _ struct{} `type:"structure"` - // The ICMP code. A value of -1 means all codes for the specified ICMP type. - Code *int64 `locationName:"code" type:"integer"` - - // The ICMP type. A value of -1 means all types. - Type *int64 `locationName:"type" type:"integer"` + // The Traffic Mirror filter that the network service is associated with. + TrafficMirrorFilter *TrafficMirrorFilter `locationName:"trafficMirrorFilter" type:"structure"` } // String returns the string representation -func (s IcmpTypeCode) String() string { +func (s ModifyTrafficMirrorFilterNetworkServicesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s IcmpTypeCode) GoString() string { +func (s ModifyTrafficMirrorFilterNetworkServicesOutput) GoString() string { return s.String() } -// SetCode sets the Code field's value. -func (s *IcmpTypeCode) SetCode(v int64) *IcmpTypeCode { - s.Code = &v - return s -} - -// SetType sets the Type field's value. -func (s *IcmpTypeCode) SetType(v int64) *IcmpTypeCode { - s.Type = &v +// SetTrafficMirrorFilter sets the TrafficMirrorFilter field's value. +func (s *ModifyTrafficMirrorFilterNetworkServicesOutput) SetTrafficMirrorFilter(v *TrafficMirrorFilter) *ModifyTrafficMirrorFilterNetworkServicesOutput { + s.TrafficMirrorFilter = v return s } -// Describes the ID format for a resource. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IdFormat -type IdFormat struct { +type ModifyTrafficMirrorFilterRuleInput struct { _ struct{} `type:"structure"` - // The date in UTC at which you are permanently switched over to using longer - // IDs. If a deadline is not yet available for this resource type, this field - // is not returned. - Deadline *time.Time `locationName:"deadline" type:"timestamp" timestampFormat:"iso8601"` + // The description to assign to the Traffic Mirror rule. + Description *string `type:"string"` - // The type of resource. - Resource *string `locationName:"resource" type:"string"` + // The destination CIDR block to assign to the Traffic Mirror rule. + DestinationCidrBlock *string `type:"string"` - // Indicates whether longer IDs (17-character IDs) are enabled for the resource. - UseLongIds *bool `locationName:"useLongIds" type:"boolean"` + // The destination ports that are associated with the Traffic Mirror rule. + DestinationPortRange *TrafficMirrorPortRangeRequest `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The protocol, for example TCP, to assign to the Traffic Mirror rule. + Protocol *int64 `type:"integer"` + + // The properties that you want to remove from the Traffic Mirror filter rule. + // + // When you remove a property from a Traffic Mirror filter rule, the property + // is set to the default. + RemoveFields []*string `locationName:"RemoveField" type:"list"` + + // The action to assign to the rule. + RuleAction *string `type:"string" enum:"TrafficMirrorRuleAction"` + + // The number of the Traffic Mirror rule. This number must be unique for each + // Traffic Mirror rule in a given direction. The rules are processed in ascending + // order by rule number. + RuleNumber *int64 `type:"integer"` + + // The source CIDR block to assign to the Traffic Mirror rule. + SourceCidrBlock *string `type:"string"` + + // The port range to assign to the Traffic Mirror rule. + SourcePortRange *TrafficMirrorPortRangeRequest `type:"structure"` + + // The type of traffic (ingress | egress) to assign to the rule. + TrafficDirection *string `type:"string" enum:"TrafficDirection"` + + // The ID of the Traffic Mirror rule. + // + // TrafficMirrorFilterRuleId is a required field + TrafficMirrorFilterRuleId *string `type:"string" required:"true"` } // String returns the string representation -func (s IdFormat) String() string { +func (s ModifyTrafficMirrorFilterRuleInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s IdFormat) GoString() string { +func (s ModifyTrafficMirrorFilterRuleInput) GoString() string { return s.String() } -// SetDeadline sets the Deadline field's value. -func (s *IdFormat) SetDeadline(v time.Time) *IdFormat { - s.Deadline = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyTrafficMirrorFilterRuleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyTrafficMirrorFilterRuleInput"} + if s.TrafficMirrorFilterRuleId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorFilterRuleId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetResource sets the Resource field's value. -func (s *IdFormat) SetResource(v string) *IdFormat { - s.Resource = &v +// SetDescription sets the Description field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetDescription(v string) *ModifyTrafficMirrorFilterRuleInput { + s.Description = &v return s } -// SetUseLongIds sets the UseLongIds field's value. -func (s *IdFormat) SetUseLongIds(v bool) *IdFormat { - s.UseLongIds = &v +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetDestinationCidrBlock(v string) *ModifyTrafficMirrorFilterRuleInput { + s.DestinationCidrBlock = &v return s } -// Describes an image. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Image -type Image struct { - _ struct{} `type:"structure"` +// SetDestinationPortRange sets the DestinationPortRange field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetDestinationPortRange(v *TrafficMirrorPortRangeRequest) *ModifyTrafficMirrorFilterRuleInput { + s.DestinationPortRange = v + return s +} - // The architecture of the image. - Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` +// SetDryRun sets the DryRun field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetDryRun(v bool) *ModifyTrafficMirrorFilterRuleInput { + s.DryRun = &v + return s +} - // Any block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` +// SetProtocol sets the Protocol field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetProtocol(v int64) *ModifyTrafficMirrorFilterRuleInput { + s.Protocol = &v + return s +} - // The date and time the image was created. - CreationDate *string `locationName:"creationDate" type:"string"` +// SetRemoveFields sets the RemoveFields field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetRemoveFields(v []*string) *ModifyTrafficMirrorFilterRuleInput { + s.RemoveFields = v + return s +} - // The description of the AMI that was provided during image creation. - Description *string `locationName:"description" type:"string"` +// SetRuleAction sets the RuleAction field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetRuleAction(v string) *ModifyTrafficMirrorFilterRuleInput { + s.RuleAction = &v + return s +} - // Specifies whether enhanced networking with ENA is enabled. - EnaSupport *bool `locationName:"enaSupport" type:"boolean"` +// SetRuleNumber sets the RuleNumber field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetRuleNumber(v int64) *ModifyTrafficMirrorFilterRuleInput { + s.RuleNumber = &v + return s +} - // The hypervisor type of the image. - Hypervisor *string `locationName:"hypervisor" type:"string" enum:"HypervisorType"` +// SetSourceCidrBlock sets the SourceCidrBlock field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetSourceCidrBlock(v string) *ModifyTrafficMirrorFilterRuleInput { + s.SourceCidrBlock = &v + return s +} - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` +// SetSourcePortRange sets the SourcePortRange field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetSourcePortRange(v *TrafficMirrorPortRangeRequest) *ModifyTrafficMirrorFilterRuleInput { + s.SourcePortRange = v + return s +} - // The location of the AMI. - ImageLocation *string `locationName:"imageLocation" type:"string"` +// SetTrafficDirection sets the TrafficDirection field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetTrafficDirection(v string) *ModifyTrafficMirrorFilterRuleInput { + s.TrafficDirection = &v + return s +} - // The AWS account alias (for example, amazon, self) or the AWS account ID of - // the AMI owner. - ImageOwnerAlias *string `locationName:"imageOwnerAlias" type:"string"` +// SetTrafficMirrorFilterRuleId sets the TrafficMirrorFilterRuleId field's value. +func (s *ModifyTrafficMirrorFilterRuleInput) SetTrafficMirrorFilterRuleId(v string) *ModifyTrafficMirrorFilterRuleInput { + s.TrafficMirrorFilterRuleId = &v + return s +} - // The type of image. - ImageType *string `locationName:"imageType" type:"string" enum:"ImageTypeValues"` +type ModifyTrafficMirrorFilterRuleOutput struct { + _ struct{} `type:"structure"` - // The kernel associated with the image, if any. Only applicable for machine - // images. - KernelId *string `locationName:"kernelId" type:"string"` + // Modifies a Traffic Mirror rule. + TrafficMirrorFilterRule *TrafficMirrorFilterRule `locationName:"trafficMirrorFilterRule" type:"structure"` +} - // The name of the AMI that was provided during image creation. - Name *string `locationName:"name" type:"string"` +// String returns the string representation +func (s ModifyTrafficMirrorFilterRuleOutput) String() string { + return awsutil.Prettify(s) +} - // The AWS account ID of the image owner. - OwnerId *string `locationName:"imageOwnerId" type:"string"` +// GoString returns the string representation +func (s ModifyTrafficMirrorFilterRuleOutput) GoString() string { + return s.String() +} - // The value is Windows for Windows AMIs; otherwise blank. - Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` +// SetTrafficMirrorFilterRule sets the TrafficMirrorFilterRule field's value. +func (s *ModifyTrafficMirrorFilterRuleOutput) SetTrafficMirrorFilterRule(v *TrafficMirrorFilterRule) *ModifyTrafficMirrorFilterRuleOutput { + s.TrafficMirrorFilterRule = v + return s +} - // Any product codes associated with the AMI. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` +type ModifyTrafficMirrorSessionInput struct { + _ struct{} `type:"structure"` - // Indicates whether the image has public launch permissions. The value is true - // if this image has public launch permissions or false if it has only implicit - // and explicit launch permissions. - Public *bool `locationName:"isPublic" type:"boolean"` + // The description to assign to the Traffic Mirror session. + Description *string `type:"string"` - // The RAM disk associated with the image, if any. Only applicable for machine - // images. - RamdiskId *string `locationName:"ramdiskId" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The device name of the root device (for example, /dev/sda1 or /dev/xvda). - RootDeviceName *string `locationName:"rootDeviceName" type:"string"` + // The number of bytes in each packet to mirror. These are bytes after the VXLAN + // header. To mirror a subset, set this to the length (in bytes) to mirror. + // For example, if you set this value to 100, then the first 100 bytes that + // meet the filter criteria are copied to the target. Do not specify this parameter + // when you want to mirror the entire packet. + PacketLength *int64 `type:"integer"` - // The type of root device used by the AMI. The AMI can use an EBS volume or - // an instance store volume. - RootDeviceType *string `locationName:"rootDeviceType" type:"string" enum:"DeviceType"` + // The properties that you want to remove from the Traffic Mirror session. + // + // When you remove a property from a Traffic Mirror session, the property is + // set to the default. + RemoveFields []*string `locationName:"RemoveField" type:"list"` - // Specifies whether enhanced networking with the Intel 82599 Virtual Function - // interface is enabled. - SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` + // The session number determines the order in which sessions are evaluated when + // an interface is used by multiple sessions. The first session with a matching + // filter is the one that mirrors the packets. + // + // Valid values are 1-32766. + SessionNumber *int64 `type:"integer"` - // The current state of the AMI. If the state is available, the image is successfully - // registered and can be used to launch an instance. - State *string `locationName:"imageState" type:"string" enum:"ImageState"` + // The ID of the Traffic Mirror filter. + TrafficMirrorFilterId *string `type:"string"` - // The reason for the state change. - StateReason *StateReason `locationName:"stateReason" type:"structure"` + // The ID of the Traffic Mirror session. + // + // TrafficMirrorSessionId is a required field + TrafficMirrorSessionId *string `type:"string" required:"true"` - // Any tags assigned to the image. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The Traffic Mirror target. The target must be in the same VPC as the source, + // or have a VPC peering connection with the source. + TrafficMirrorTargetId *string `type:"string"` - // The type of virtualization of the AMI. - VirtualizationType *string `locationName:"virtualizationType" type:"string" enum:"VirtualizationType"` + // The virtual network ID of the Traffic Mirror session. + VirtualNetworkId *int64 `type:"integer"` } // String returns the string representation -func (s Image) String() string { +func (s ModifyTrafficMirrorSessionInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Image) GoString() string { +func (s ModifyTrafficMirrorSessionInput) GoString() string { return s.String() } -// SetArchitecture sets the Architecture field's value. -func (s *Image) SetArchitecture(v string) *Image { - s.Architecture = &v - return s -} - -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *Image) SetBlockDeviceMappings(v []*BlockDeviceMapping) *Image { - s.BlockDeviceMappings = v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyTrafficMirrorSessionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyTrafficMirrorSessionInput"} + if s.TrafficMirrorSessionId == nil { + invalidParams.Add(request.NewErrParamRequired("TrafficMirrorSessionId")) + } -// SetCreationDate sets the CreationDate field's value. -func (s *Image) SetCreationDate(v string) *Image { - s.CreationDate = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } // SetDescription sets the Description field's value. -func (s *Image) SetDescription(v string) *Image { +func (s *ModifyTrafficMirrorSessionInput) SetDescription(v string) *ModifyTrafficMirrorSessionInput { s.Description = &v return s } -// SetEnaSupport sets the EnaSupport field's value. -func (s *Image) SetEnaSupport(v bool) *Image { - s.EnaSupport = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyTrafficMirrorSessionInput) SetDryRun(v bool) *ModifyTrafficMirrorSessionInput { + s.DryRun = &v return s } -// SetHypervisor sets the Hypervisor field's value. -func (s *Image) SetHypervisor(v string) *Image { - s.Hypervisor = &v +// SetPacketLength sets the PacketLength field's value. +func (s *ModifyTrafficMirrorSessionInput) SetPacketLength(v int64) *ModifyTrafficMirrorSessionInput { + s.PacketLength = &v return s } -// SetImageId sets the ImageId field's value. -func (s *Image) SetImageId(v string) *Image { - s.ImageId = &v +// SetRemoveFields sets the RemoveFields field's value. +func (s *ModifyTrafficMirrorSessionInput) SetRemoveFields(v []*string) *ModifyTrafficMirrorSessionInput { + s.RemoveFields = v return s } -// SetImageLocation sets the ImageLocation field's value. -func (s *Image) SetImageLocation(v string) *Image { - s.ImageLocation = &v +// SetSessionNumber sets the SessionNumber field's value. +func (s *ModifyTrafficMirrorSessionInput) SetSessionNumber(v int64) *ModifyTrafficMirrorSessionInput { + s.SessionNumber = &v return s } -// SetImageOwnerAlias sets the ImageOwnerAlias field's value. -func (s *Image) SetImageOwnerAlias(v string) *Image { - s.ImageOwnerAlias = &v +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *ModifyTrafficMirrorSessionInput) SetTrafficMirrorFilterId(v string) *ModifyTrafficMirrorSessionInput { + s.TrafficMirrorFilterId = &v return s } -// SetImageType sets the ImageType field's value. -func (s *Image) SetImageType(v string) *Image { - s.ImageType = &v +// SetTrafficMirrorSessionId sets the TrafficMirrorSessionId field's value. +func (s *ModifyTrafficMirrorSessionInput) SetTrafficMirrorSessionId(v string) *ModifyTrafficMirrorSessionInput { + s.TrafficMirrorSessionId = &v return s } -// SetKernelId sets the KernelId field's value. -func (s *Image) SetKernelId(v string) *Image { - s.KernelId = &v +// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. +func (s *ModifyTrafficMirrorSessionInput) SetTrafficMirrorTargetId(v string) *ModifyTrafficMirrorSessionInput { + s.TrafficMirrorTargetId = &v return s } -// SetName sets the Name field's value. -func (s *Image) SetName(v string) *Image { - s.Name = &v +// SetVirtualNetworkId sets the VirtualNetworkId field's value. +func (s *ModifyTrafficMirrorSessionInput) SetVirtualNetworkId(v int64) *ModifyTrafficMirrorSessionInput { + s.VirtualNetworkId = &v return s } -// SetOwnerId sets the OwnerId field's value. -func (s *Image) SetOwnerId(v string) *Image { - s.OwnerId = &v - return s +type ModifyTrafficMirrorSessionOutput struct { + _ struct{} `type:"structure"` + + // Information about the Traffic Mirror session. + TrafficMirrorSession *TrafficMirrorSession `locationName:"trafficMirrorSession" type:"structure"` } -// SetPlatform sets the Platform field's value. -func (s *Image) SetPlatform(v string) *Image { - s.Platform = &v - return s +// String returns the string representation +func (s ModifyTrafficMirrorSessionOutput) String() string { + return awsutil.Prettify(s) } -// SetProductCodes sets the ProductCodes field's value. -func (s *Image) SetProductCodes(v []*ProductCode) *Image { - s.ProductCodes = v - return s +// GoString returns the string representation +func (s ModifyTrafficMirrorSessionOutput) GoString() string { + return s.String() } -// SetPublic sets the Public field's value. -func (s *Image) SetPublic(v bool) *Image { - s.Public = &v +// SetTrafficMirrorSession sets the TrafficMirrorSession field's value. +func (s *ModifyTrafficMirrorSessionOutput) SetTrafficMirrorSession(v *TrafficMirrorSession) *ModifyTrafficMirrorSessionOutput { + s.TrafficMirrorSession = v return s } -// SetRamdiskId sets the RamdiskId field's value. -func (s *Image) SetRamdiskId(v string) *Image { - s.RamdiskId = &v - return s +type ModifyTransitGatewayVpcAttachmentInput struct { + _ struct{} `type:"structure"` + + // The IDs of one or more subnets to add. You can specify at most one subnet + // per Availability Zone. + AddSubnetIds []*string `locationNameList:"item" type:"list"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The new VPC attachment options. + Options *ModifyTransitGatewayVpcAttachmentRequestOptions `type:"structure"` + + // The IDs of one or more subnets to remove. + RemoveSubnetIds []*string `locationNameList:"item" type:"list"` + + // The ID of the attachment. + // + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` } -// SetRootDeviceName sets the RootDeviceName field's value. -func (s *Image) SetRootDeviceName(v string) *Image { - s.RootDeviceName = &v - return s +// String returns the string representation +func (s ModifyTransitGatewayVpcAttachmentInput) String() string { + return awsutil.Prettify(s) } -// SetRootDeviceType sets the RootDeviceType field's value. -func (s *Image) SetRootDeviceType(v string) *Image { - s.RootDeviceType = &v - return s +// GoString returns the string representation +func (s ModifyTransitGatewayVpcAttachmentInput) GoString() string { + return s.String() } -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *Image) SetSriovNetSupport(v string) *Image { - s.SriovNetSupport = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyTransitGatewayVpcAttachmentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyTransitGatewayVpcAttachmentInput"} + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAddSubnetIds sets the AddSubnetIds field's value. +func (s *ModifyTransitGatewayVpcAttachmentInput) SetAddSubnetIds(v []*string) *ModifyTransitGatewayVpcAttachmentInput { + s.AddSubnetIds = v return s } -// SetState sets the State field's value. -func (s *Image) SetState(v string) *Image { - s.State = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *ModifyTransitGatewayVpcAttachmentInput { + s.DryRun = &v return s } -// SetStateReason sets the StateReason field's value. -func (s *Image) SetStateReason(v *StateReason) *Image { - s.StateReason = v +// SetOptions sets the Options field's value. +func (s *ModifyTransitGatewayVpcAttachmentInput) SetOptions(v *ModifyTransitGatewayVpcAttachmentRequestOptions) *ModifyTransitGatewayVpcAttachmentInput { + s.Options = v return s } -// SetTags sets the Tags field's value. -func (s *Image) SetTags(v []*Tag) *Image { - s.Tags = v +// SetRemoveSubnetIds sets the RemoveSubnetIds field's value. +func (s *ModifyTransitGatewayVpcAttachmentInput) SetRemoveSubnetIds(v []*string) *ModifyTransitGatewayVpcAttachmentInput { + s.RemoveSubnetIds = v return s } -// SetVirtualizationType sets the VirtualizationType field's value. -func (s *Image) SetVirtualizationType(v string) *Image { - s.VirtualizationType = &v +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *ModifyTransitGatewayVpcAttachmentInput) SetTransitGatewayAttachmentId(v string) *ModifyTransitGatewayVpcAttachmentInput { + s.TransitGatewayAttachmentId = &v return s } -// Describes the disk container object for an import image task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageDiskContainer -type ImageDiskContainer struct { +type ModifyTransitGatewayVpcAttachmentOutput struct { _ struct{} `type:"structure"` - // The description of the disk image. - Description *string `type:"string"` - - // The block device mapping for the disk. - DeviceName *string `type:"string"` - - // The format of the disk image being imported. - // - // Valid values: RAW | VHD | VMDK | OVA - Format *string `type:"string"` - - // The ID of the EBS snapshot to be used for importing the snapshot. - SnapshotId *string `type:"string"` - - // The URL to the Amazon S3-based disk image being imported. The URL can either - // be a https URL (https://..) or an Amazon S3 URL (s3://..) - Url *string `type:"string"` - - // The S3 bucket for the disk image. - UserBucket *UserBucket `type:"structure"` + // Information about the modified attachment. + TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` } // String returns the string representation -func (s ImageDiskContainer) String() string { +func (s ModifyTransitGatewayVpcAttachmentOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImageDiskContainer) GoString() string { +func (s ModifyTransitGatewayVpcAttachmentOutput) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *ImageDiskContainer) SetDescription(v string) *ImageDiskContainer { - s.Description = &v +// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. +func (s *ModifyTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *ModifyTransitGatewayVpcAttachmentOutput { + s.TransitGatewayVpcAttachment = v return s } -// SetDeviceName sets the DeviceName field's value. -func (s *ImageDiskContainer) SetDeviceName(v string) *ImageDiskContainer { - s.DeviceName = &v - return s +// Describes the options for a VPC attachment. +type ModifyTransitGatewayVpcAttachmentRequestOptions struct { + _ struct{} `type:"structure"` + + // Enable or disable DNS support. The default is enable. + DnsSupport *string `type:"string" enum:"DnsSupportValue"` + + // Enable or disable IPv6 support. The default is enable. + Ipv6Support *string `type:"string" enum:"Ipv6SupportValue"` } -// SetFormat sets the Format field's value. -func (s *ImageDiskContainer) SetFormat(v string) *ImageDiskContainer { - s.Format = &v - return s +// String returns the string representation +func (s ModifyTransitGatewayVpcAttachmentRequestOptions) String() string { + return awsutil.Prettify(s) } -// SetSnapshotId sets the SnapshotId field's value. -func (s *ImageDiskContainer) SetSnapshotId(v string) *ImageDiskContainer { - s.SnapshotId = &v - return s +// GoString returns the string representation +func (s ModifyTransitGatewayVpcAttachmentRequestOptions) GoString() string { + return s.String() } -// SetUrl sets the Url field's value. -func (s *ImageDiskContainer) SetUrl(v string) *ImageDiskContainer { - s.Url = &v +// SetDnsSupport sets the DnsSupport field's value. +func (s *ModifyTransitGatewayVpcAttachmentRequestOptions) SetDnsSupport(v string) *ModifyTransitGatewayVpcAttachmentRequestOptions { + s.DnsSupport = &v return s } -// SetUserBucket sets the UserBucket field's value. -func (s *ImageDiskContainer) SetUserBucket(v *UserBucket) *ImageDiskContainer { - s.UserBucket = v +// SetIpv6Support sets the Ipv6Support field's value. +func (s *ModifyTransitGatewayVpcAttachmentRequestOptions) SetIpv6Support(v string) *ModifyTransitGatewayVpcAttachmentRequestOptions { + s.Ipv6Support = &v return s } -// Contains the parameters for ImportImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImageRequest -type ImportImageInput struct { +type ModifyVolumeAttributeInput struct { _ struct{} `type:"structure"` - // The architecture of the virtual machine. - // - // Valid values: i386 | x86_64 - Architecture *string `type:"string"` - - // The client-specific data. - ClientData *ClientData `type:"structure"` - - // The token to enable idempotency for VM import requests. - ClientToken *string `type:"string"` - - // A description string for the import image task. - Description *string `type:"string"` - - // Information about the disk containers. - DiskContainers []*ImageDiskContainer `locationName:"DiskContainer" locationNameList:"item" type:"list"` + // Indicates whether the volume should be auto-enabled for I/O operations. + AutoEnableIO *AttributeBooleanValue `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // The target hypervisor platform. - // - // Valid values: xen - Hypervisor *string `type:"string"` - - // The license type to be used for the Amazon Machine Image (AMI) after importing. - // - // Note: You may only use BYOL if you have existing licenses with rights to - // use these licenses in a third party cloud like AWS. For more information, - // see Prerequisites (http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image) - // in the VM Import/Export User Guide. - // - // Valid values: AWS | BYOL - LicenseType *string `type:"string"` + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The operating system of the virtual machine. + // The ID of the volume. // - // Valid values: Windows | Linux - Platform *string `type:"string"` - - // The name of the role to use when not using the default role, 'vmimport'. - RoleName *string `type:"string"` + // VolumeId is a required field + VolumeId *string `type:"string" required:"true"` } // String returns the string representation -func (s ImportImageInput) String() string { +func (s ModifyVolumeAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportImageInput) GoString() string { +func (s ModifyVolumeAttributeInput) GoString() string { return s.String() } -// SetArchitecture sets the Architecture field's value. -func (s *ImportImageInput) SetArchitecture(v string) *ImportImageInput { - s.Architecture = &v - return s -} - -// SetClientData sets the ClientData field's value. -func (s *ImportImageInput) SetClientData(v *ClientData) *ImportImageInput { - s.ClientData = v - return s -} - -// SetClientToken sets the ClientToken field's value. -func (s *ImportImageInput) SetClientToken(v string) *ImportImageInput { - s.ClientToken = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVolumeAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVolumeAttributeInput"} + if s.VolumeId == nil { + invalidParams.Add(request.NewErrParamRequired("VolumeId")) + } -// SetDescription sets the Description field's value. -func (s *ImportImageInput) SetDescription(v string) *ImportImageInput { - s.Description = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetDiskContainers sets the DiskContainers field's value. -func (s *ImportImageInput) SetDiskContainers(v []*ImageDiskContainer) *ImportImageInput { - s.DiskContainers = v +// SetAutoEnableIO sets the AutoEnableIO field's value. +func (s *ModifyVolumeAttributeInput) SetAutoEnableIO(v *AttributeBooleanValue) *ModifyVolumeAttributeInput { + s.AutoEnableIO = v return s } // SetDryRun sets the DryRun field's value. -func (s *ImportImageInput) SetDryRun(v bool) *ImportImageInput { +func (s *ModifyVolumeAttributeInput) SetDryRun(v bool) *ModifyVolumeAttributeInput { s.DryRun = &v return s } -// SetHypervisor sets the Hypervisor field's value. -func (s *ImportImageInput) SetHypervisor(v string) *ImportImageInput { - s.Hypervisor = &v +// SetVolumeId sets the VolumeId field's value. +func (s *ModifyVolumeAttributeInput) SetVolumeId(v string) *ModifyVolumeAttributeInput { + s.VolumeId = &v return s } -// SetLicenseType sets the LicenseType field's value. -func (s *ImportImageInput) SetLicenseType(v string) *ImportImageInput { - s.LicenseType = &v - return s +type ModifyVolumeAttributeOutput struct { + _ struct{} `type:"structure"` } -// SetPlatform sets the Platform field's value. -func (s *ImportImageInput) SetPlatform(v string) *ImportImageInput { - s.Platform = &v - return s +// String returns the string representation +func (s ModifyVolumeAttributeOutput) String() string { + return awsutil.Prettify(s) } -// SetRoleName sets the RoleName field's value. -func (s *ImportImageInput) SetRoleName(v string) *ImportImageInput { - s.RoleName = &v - return s +// GoString returns the string representation +func (s ModifyVolumeAttributeOutput) GoString() string { + return s.String() } -// Contains the output for ImportImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImageResult -type ImportImageOutput struct { +type ModifyVolumeInput struct { _ struct{} `type:"structure"` - // The architecture of the virtual machine. - Architecture *string `locationName:"architecture" type:"string"` - - // A description of the import task. - Description *string `locationName:"description" type:"string"` - - // The target hypervisor of the import task. - Hypervisor *string `locationName:"hypervisor" type:"string"` - - // The ID of the Amazon Machine Image (AMI) created by the import task. - ImageId *string `locationName:"imageId" type:"string"` - - // The task ID of the import image task. - ImportTaskId *string `locationName:"importTaskId" type:"string"` - - // The license type of the virtual machine. - LicenseType *string `locationName:"licenseType" type:"string"` - - // The operating system of the virtual machine. - Platform *string `locationName:"platform" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The progress of the task. - Progress *string `locationName:"progress" type:"string"` + // The target IOPS rate of the volume. + // + // This is only valid for Provisioned IOPS SSD (io1) volumes. For more information, + // see Provisioned IOPS SSD (io1) Volumes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_piops). + // + // Default: If no IOPS value is specified, the existing value is retained. + Iops *int64 `type:"integer"` - // Information about the snapshots. - SnapshotDetails []*SnapshotDetail `locationName:"snapshotDetailSet" locationNameList:"item" type:"list"` + // The target size of the volume, in GiB. The target volume size must be greater + // than or equal to than the existing size of the volume. For information about + // available EBS volume sizes, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html). + // + // Default: If no size is specified, the existing size is retained. + Size *int64 `type:"integer"` - // A brief status of the task. - Status *string `locationName:"status" type:"string"` + // The ID of the volume. + // + // VolumeId is a required field + VolumeId *string `type:"string" required:"true"` - // A detailed status message of the import task. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // The target EBS volume type of the volume. + // + // Default: If no type is specified, the existing type is retained. + VolumeType *string `type:"string" enum:"VolumeType"` } // String returns the string representation -func (s ImportImageOutput) String() string { +func (s ModifyVolumeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportImageOutput) GoString() string { +func (s ModifyVolumeInput) GoString() string { return s.String() } -// SetArchitecture sets the Architecture field's value. -func (s *ImportImageOutput) SetArchitecture(v string) *ImportImageOutput { - s.Architecture = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVolumeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVolumeInput"} + if s.VolumeId == nil { + invalidParams.Add(request.NewErrParamRequired("VolumeId")) + } -// SetDescription sets the Description field's value. -func (s *ImportImageOutput) SetDescription(v string) *ImportImageOutput { - s.Description = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetHypervisor sets the Hypervisor field's value. -func (s *ImportImageOutput) SetHypervisor(v string) *ImportImageOutput { - s.Hypervisor = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyVolumeInput) SetDryRun(v bool) *ModifyVolumeInput { + s.DryRun = &v return s } -// SetImageId sets the ImageId field's value. -func (s *ImportImageOutput) SetImageId(v string) *ImportImageOutput { - s.ImageId = &v +// SetIops sets the Iops field's value. +func (s *ModifyVolumeInput) SetIops(v int64) *ModifyVolumeInput { + s.Iops = &v return s } -// SetImportTaskId sets the ImportTaskId field's value. -func (s *ImportImageOutput) SetImportTaskId(v string) *ImportImageOutput { - s.ImportTaskId = &v +// SetSize sets the Size field's value. +func (s *ModifyVolumeInput) SetSize(v int64) *ModifyVolumeInput { + s.Size = &v return s } -// SetLicenseType sets the LicenseType field's value. -func (s *ImportImageOutput) SetLicenseType(v string) *ImportImageOutput { - s.LicenseType = &v +// SetVolumeId sets the VolumeId field's value. +func (s *ModifyVolumeInput) SetVolumeId(v string) *ModifyVolumeInput { + s.VolumeId = &v return s } -// SetPlatform sets the Platform field's value. -func (s *ImportImageOutput) SetPlatform(v string) *ImportImageOutput { - s.Platform = &v +// SetVolumeType sets the VolumeType field's value. +func (s *ModifyVolumeInput) SetVolumeType(v string) *ModifyVolumeInput { + s.VolumeType = &v return s } -// SetProgress sets the Progress field's value. -func (s *ImportImageOutput) SetProgress(v string) *ImportImageOutput { - s.Progress = &v - return s +type ModifyVolumeOutput struct { + _ struct{} `type:"structure"` + + // Information about the volume modification. + VolumeModification *VolumeModification `locationName:"volumeModification" type:"structure"` } -// SetSnapshotDetails sets the SnapshotDetails field's value. -func (s *ImportImageOutput) SetSnapshotDetails(v []*SnapshotDetail) *ImportImageOutput { - s.SnapshotDetails = v - return s +// String returns the string representation +func (s ModifyVolumeOutput) String() string { + return awsutil.Prettify(s) } -// SetStatus sets the Status field's value. -func (s *ImportImageOutput) SetStatus(v string) *ImportImageOutput { - s.Status = &v - return s +// GoString returns the string representation +func (s ModifyVolumeOutput) GoString() string { + return s.String() } -// SetStatusMessage sets the StatusMessage field's value. -func (s *ImportImageOutput) SetStatusMessage(v string) *ImportImageOutput { - s.StatusMessage = &v +// SetVolumeModification sets the VolumeModification field's value. +func (s *ModifyVolumeOutput) SetVolumeModification(v *VolumeModification) *ModifyVolumeOutput { + s.VolumeModification = v return s } -// Describes an import image task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImageTask -type ImportImageTask struct { +type ModifyVpcAttributeInput struct { _ struct{} `type:"structure"` - // The architecture of the virtual machine. + // Indicates whether the instances launched in the VPC get DNS hostnames. If + // enabled, instances in the VPC get DNS hostnames; otherwise, they do not. // - // Valid values: i386 | x86_64 - Architecture *string `locationName:"architecture" type:"string"` - - // A description of the import task. - Description *string `locationName:"description" type:"string"` + // You cannot modify the DNS resolution and DNS hostnames attributes in the + // same request. Use separate requests for each attribute. You can only enable + // DNS hostnames if you've enabled DNS support. + EnableDnsHostnames *AttributeBooleanValue `type:"structure"` - // The target hypervisor for the import task. + // Indicates whether the DNS resolution is supported for the VPC. If enabled, + // queries to the Amazon provided DNS server at the 169.254.169.253 IP address, + // or the reserved IP address at the base of the VPC network range "plus two" + // succeed. If disabled, the Amazon provided DNS service in the VPC that resolves + // public DNS hostnames to IP addresses is not enabled. // - // Valid values: xen - Hypervisor *string `locationName:"hypervisor" type:"string"` - - // The ID of the Amazon Machine Image (AMI) of the imported virtual machine. - ImageId *string `locationName:"imageId" type:"string"` - - // The ID of the import image task. - ImportTaskId *string `locationName:"importTaskId" type:"string"` - - // The license type of the virtual machine. - LicenseType *string `locationName:"licenseType" type:"string"` - - // The description string for the import image task. - Platform *string `locationName:"platform" type:"string"` - - // The percentage of progress of the import image task. - Progress *string `locationName:"progress" type:"string"` - - // Information about the snapshots. - SnapshotDetails []*SnapshotDetail `locationName:"snapshotDetailSet" locationNameList:"item" type:"list"` - - // A brief status for the import image task. - Status *string `locationName:"status" type:"string"` + // You cannot modify the DNS resolution and DNS hostnames attributes in the + // same request. Use separate requests for each attribute. + EnableDnsSupport *AttributeBooleanValue `type:"structure"` - // A descriptive status message for the import image task. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `locationName:"vpcId" type:"string" required:"true"` } // String returns the string representation -func (s ImportImageTask) String() string { +func (s ModifyVpcAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportImageTask) GoString() string { +func (s ModifyVpcAttributeInput) GoString() string { return s.String() } -// SetArchitecture sets the Architecture field's value. -func (s *ImportImageTask) SetArchitecture(v string) *ImportImageTask { - s.Architecture = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportImageTask) SetDescription(v string) *ImportImageTask { - s.Description = &v - return s -} - -// SetHypervisor sets the Hypervisor field's value. -func (s *ImportImageTask) SetHypervisor(v string) *ImportImageTask { - s.Hypervisor = &v - return s -} - -// SetImageId sets the ImageId field's value. -func (s *ImportImageTask) SetImageId(v string) *ImportImageTask { - s.ImageId = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVpcAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpcAttributeInput"} + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } -// SetImportTaskId sets the ImportTaskId field's value. -func (s *ImportImageTask) SetImportTaskId(v string) *ImportImageTask { - s.ImportTaskId = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetLicenseType sets the LicenseType field's value. -func (s *ImportImageTask) SetLicenseType(v string) *ImportImageTask { - s.LicenseType = &v +// SetEnableDnsHostnames sets the EnableDnsHostnames field's value. +func (s *ModifyVpcAttributeInput) SetEnableDnsHostnames(v *AttributeBooleanValue) *ModifyVpcAttributeInput { + s.EnableDnsHostnames = v return s } -// SetPlatform sets the Platform field's value. -func (s *ImportImageTask) SetPlatform(v string) *ImportImageTask { - s.Platform = &v +// SetEnableDnsSupport sets the EnableDnsSupport field's value. +func (s *ModifyVpcAttributeInput) SetEnableDnsSupport(v *AttributeBooleanValue) *ModifyVpcAttributeInput { + s.EnableDnsSupport = v return s } -// SetProgress sets the Progress field's value. -func (s *ImportImageTask) SetProgress(v string) *ImportImageTask { - s.Progress = &v +// SetVpcId sets the VpcId field's value. +func (s *ModifyVpcAttributeInput) SetVpcId(v string) *ModifyVpcAttributeInput { + s.VpcId = &v return s } -// SetSnapshotDetails sets the SnapshotDetails field's value. -func (s *ImportImageTask) SetSnapshotDetails(v []*SnapshotDetail) *ImportImageTask { - s.SnapshotDetails = v - return s +type ModifyVpcAttributeOutput struct { + _ struct{} `type:"structure"` } -// SetStatus sets the Status field's value. -func (s *ImportImageTask) SetStatus(v string) *ImportImageTask { - s.Status = &v - return s +// String returns the string representation +func (s ModifyVpcAttributeOutput) String() string { + return awsutil.Prettify(s) } -// SetStatusMessage sets the StatusMessage field's value. -func (s *ImportImageTask) SetStatusMessage(v string) *ImportImageTask { - s.StatusMessage = &v - return s +// GoString returns the string representation +func (s ModifyVpcAttributeOutput) GoString() string { + return s.String() } -// Contains the parameters for ImportInstance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceRequest -type ImportInstanceInput struct { +type ModifyVpcEndpointConnectionNotificationInput struct { _ struct{} `type:"structure"` - // A description for the instance being imported. - Description *string `locationName:"description" type:"string"` + // One or more events for the endpoint. Valid values are Accept, Connect, Delete, + // and Reject. + ConnectionEvents []*string `locationNameList:"item" type:"list"` - // The disk image. - DiskImages []*DiskImage `locationName:"diskImage" type:"list"` + // The ARN for the SNS topic for the notification. + ConnectionNotificationArn *string `type:"string"` + + // The ID of the notification. + // + // ConnectionNotificationId is a required field + ConnectionNotificationId *string `type:"string" required:"true"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The launch specification. - LaunchSpecification *ImportInstanceLaunchSpecification `locationName:"launchSpecification" type:"structure"` - - // The instance operating system. - // - // Platform is a required field - Platform *string `locationName:"platform" type:"string" required:"true" enum:"PlatformValues"` + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s ImportInstanceInput) String() string { +func (s ModifyVpcEndpointConnectionNotificationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportInstanceInput) GoString() string { +func (s ModifyVpcEndpointConnectionNotificationInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ImportInstanceInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ImportInstanceInput"} - if s.Platform == nil { - invalidParams.Add(request.NewErrParamRequired("Platform")) - } - if s.DiskImages != nil { - for i, v := range s.DiskImages { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "DiskImages", i), err.(request.ErrInvalidParams)) - } - } +func (s *ModifyVpcEndpointConnectionNotificationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointConnectionNotificationInput"} + if s.ConnectionNotificationId == nil { + invalidParams.Add(request.NewErrParamRequired("ConnectionNotificationId")) } if invalidParams.Len() > 0 { @@ -36479,367 +79587,445 @@ func (s *ImportInstanceInput) Validate() error { return nil } -// SetDescription sets the Description field's value. -func (s *ImportInstanceInput) SetDescription(v string) *ImportInstanceInput { - s.Description = &v +// SetConnectionEvents sets the ConnectionEvents field's value. +func (s *ModifyVpcEndpointConnectionNotificationInput) SetConnectionEvents(v []*string) *ModifyVpcEndpointConnectionNotificationInput { + s.ConnectionEvents = v return s } -// SetDiskImages sets the DiskImages field's value. -func (s *ImportInstanceInput) SetDiskImages(v []*DiskImage) *ImportInstanceInput { - s.DiskImages = v +// SetConnectionNotificationArn sets the ConnectionNotificationArn field's value. +func (s *ModifyVpcEndpointConnectionNotificationInput) SetConnectionNotificationArn(v string) *ModifyVpcEndpointConnectionNotificationInput { + s.ConnectionNotificationArn = &v + return s +} + +// SetConnectionNotificationId sets the ConnectionNotificationId field's value. +func (s *ModifyVpcEndpointConnectionNotificationInput) SetConnectionNotificationId(v string) *ModifyVpcEndpointConnectionNotificationInput { + s.ConnectionNotificationId = &v return s } // SetDryRun sets the DryRun field's value. -func (s *ImportInstanceInput) SetDryRun(v bool) *ImportInstanceInput { +func (s *ModifyVpcEndpointConnectionNotificationInput) SetDryRun(v bool) *ModifyVpcEndpointConnectionNotificationInput { s.DryRun = &v return s } -// SetLaunchSpecification sets the LaunchSpecification field's value. -func (s *ImportInstanceInput) SetLaunchSpecification(v *ImportInstanceLaunchSpecification) *ImportInstanceInput { - s.LaunchSpecification = v - return s +type ModifyVpcEndpointConnectionNotificationOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + ReturnValue *bool `locationName:"return" type:"boolean"` } -// SetPlatform sets the Platform field's value. -func (s *ImportInstanceInput) SetPlatform(v string) *ImportInstanceInput { - s.Platform = &v +// String returns the string representation +func (s ModifyVpcEndpointConnectionNotificationOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyVpcEndpointConnectionNotificationOutput) GoString() string { + return s.String() +} + +// SetReturnValue sets the ReturnValue field's value. +func (s *ModifyVpcEndpointConnectionNotificationOutput) SetReturnValue(v bool) *ModifyVpcEndpointConnectionNotificationOutput { + s.ReturnValue = &v return s } -// Describes the launch specification for VM import. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceLaunchSpecification -type ImportInstanceLaunchSpecification struct { +// Contains the parameters for ModifyVpcEndpoint. +type ModifyVpcEndpointInput struct { _ struct{} `type:"structure"` - // Reserved. - AdditionalInfo *string `locationName:"additionalInfo" type:"string"` + // (Gateway endpoint) One or more route tables IDs to associate with the endpoint. + AddRouteTableIds []*string `locationName:"AddRouteTableId" locationNameList:"item" type:"list"` - // The architecture of the instance. - Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` + // (Interface endpoint) One or more security group IDs to associate with the + // network interface. + AddSecurityGroupIds []*string `locationName:"AddSecurityGroupId" locationNameList:"item" type:"list"` - // One or more security group IDs. - GroupIds []*string `locationName:"GroupId" locationNameList:"SecurityGroupId" type:"list"` + // (Interface endpoint) One or more subnet IDs in which to serve the endpoint. + AddSubnetIds []*string `locationName:"AddSubnetId" locationNameList:"item" type:"list"` - // One or more security group names. - GroupNames []*string `locationName:"GroupName" locationNameList:"SecurityGroup" type:"list"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // Indicates whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - InstanceInitiatedShutdownBehavior *string `locationName:"instanceInitiatedShutdownBehavior" type:"string" enum:"ShutdownBehavior"` + // A policy to attach to the endpoint that controls access to the service. The + // policy must be in valid JSON format. + PolicyDocument *string `type:"string"` - // The instance type. For more information about the instance types that you - // can import, see Instance Types (http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#vmimport-instance-types) - // in the VM Import/Export User Guide. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + // (Interface endpoint) Indicate whether a private hosted zone is associated + // with the VPC. + PrivateDnsEnabled *bool `type:"boolean"` - // Indicates whether monitoring is enabled. - Monitoring *bool `locationName:"monitoring" type:"boolean"` + // (Gateway endpoint) One or more route table IDs to disassociate from the endpoint. + RemoveRouteTableIds []*string `locationName:"RemoveRouteTableId" locationNameList:"item" type:"list"` - // The placement information for the instance. - Placement *Placement `locationName:"placement" type:"structure"` + // (Interface endpoint) One or more security group IDs to disassociate from + // the network interface. + RemoveSecurityGroupIds []*string `locationName:"RemoveSecurityGroupId" locationNameList:"item" type:"list"` - // [EC2-VPC] An available IP address from the IP address range of the subnet. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + // (Interface endpoint) One or more subnets IDs in which to remove the endpoint. + RemoveSubnetIds []*string `locationName:"RemoveSubnetId" locationNameList:"item" type:"list"` - // [EC2-VPC] The ID of the subnet in which to launch the instance. - SubnetId *string `locationName:"subnetId" type:"string"` + // (Gateway endpoint) Specify true to reset the policy document to the default + // policy. The default policy allows full access to the service. + ResetPolicy *bool `type:"boolean"` - // The user data to make available to the instance. If you are using an AWS - // SDK or command line tool, Base64-encoding is performed for you, and you can - // load the text from a file. Otherwise, you must provide Base64-encoded text. - UserData *UserData `locationName:"userData" type:"structure"` + // The ID of the endpoint. + // + // VpcEndpointId is a required field + VpcEndpointId *string `type:"string" required:"true"` } // String returns the string representation -func (s ImportInstanceLaunchSpecification) String() string { +func (s ModifyVpcEndpointInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportInstanceLaunchSpecification) GoString() string { +func (s ModifyVpcEndpointInput) GoString() string { return s.String() } -// SetAdditionalInfo sets the AdditionalInfo field's value. -func (s *ImportInstanceLaunchSpecification) SetAdditionalInfo(v string) *ImportInstanceLaunchSpecification { - s.AdditionalInfo = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVpcEndpointInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointInput"} + if s.VpcEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcEndpointId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAddRouteTableIds sets the AddRouteTableIds field's value. +func (s *ModifyVpcEndpointInput) SetAddRouteTableIds(v []*string) *ModifyVpcEndpointInput { + s.AddRouteTableIds = v return s } -// SetArchitecture sets the Architecture field's value. -func (s *ImportInstanceLaunchSpecification) SetArchitecture(v string) *ImportInstanceLaunchSpecification { - s.Architecture = &v +// SetAddSecurityGroupIds sets the AddSecurityGroupIds field's value. +func (s *ModifyVpcEndpointInput) SetAddSecurityGroupIds(v []*string) *ModifyVpcEndpointInput { + s.AddSecurityGroupIds = v return s } -// SetGroupIds sets the GroupIds field's value. -func (s *ImportInstanceLaunchSpecification) SetGroupIds(v []*string) *ImportInstanceLaunchSpecification { - s.GroupIds = v +// SetAddSubnetIds sets the AddSubnetIds field's value. +func (s *ModifyVpcEndpointInput) SetAddSubnetIds(v []*string) *ModifyVpcEndpointInput { + s.AddSubnetIds = v return s } -// SetGroupNames sets the GroupNames field's value. -func (s *ImportInstanceLaunchSpecification) SetGroupNames(v []*string) *ImportInstanceLaunchSpecification { - s.GroupNames = v +// SetDryRun sets the DryRun field's value. +func (s *ModifyVpcEndpointInput) SetDryRun(v bool) *ModifyVpcEndpointInput { + s.DryRun = &v return s } -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *ImportInstanceLaunchSpecification) SetInstanceInitiatedShutdownBehavior(v string) *ImportInstanceLaunchSpecification { - s.InstanceInitiatedShutdownBehavior = &v +// SetPolicyDocument sets the PolicyDocument field's value. +func (s *ModifyVpcEndpointInput) SetPolicyDocument(v string) *ModifyVpcEndpointInput { + s.PolicyDocument = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *ImportInstanceLaunchSpecification) SetInstanceType(v string) *ImportInstanceLaunchSpecification { - s.InstanceType = &v +// SetPrivateDnsEnabled sets the PrivateDnsEnabled field's value. +func (s *ModifyVpcEndpointInput) SetPrivateDnsEnabled(v bool) *ModifyVpcEndpointInput { + s.PrivateDnsEnabled = &v return s } -// SetMonitoring sets the Monitoring field's value. -func (s *ImportInstanceLaunchSpecification) SetMonitoring(v bool) *ImportInstanceLaunchSpecification { - s.Monitoring = &v +// SetRemoveRouteTableIds sets the RemoveRouteTableIds field's value. +func (s *ModifyVpcEndpointInput) SetRemoveRouteTableIds(v []*string) *ModifyVpcEndpointInput { + s.RemoveRouteTableIds = v return s } -// SetPlacement sets the Placement field's value. -func (s *ImportInstanceLaunchSpecification) SetPlacement(v *Placement) *ImportInstanceLaunchSpecification { - s.Placement = v +// SetRemoveSecurityGroupIds sets the RemoveSecurityGroupIds field's value. +func (s *ModifyVpcEndpointInput) SetRemoveSecurityGroupIds(v []*string) *ModifyVpcEndpointInput { + s.RemoveSecurityGroupIds = v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *ImportInstanceLaunchSpecification) SetPrivateIpAddress(v string) *ImportInstanceLaunchSpecification { - s.PrivateIpAddress = &v +// SetRemoveSubnetIds sets the RemoveSubnetIds field's value. +func (s *ModifyVpcEndpointInput) SetRemoveSubnetIds(v []*string) *ModifyVpcEndpointInput { + s.RemoveSubnetIds = v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *ImportInstanceLaunchSpecification) SetSubnetId(v string) *ImportInstanceLaunchSpecification { - s.SubnetId = &v +// SetResetPolicy sets the ResetPolicy field's value. +func (s *ModifyVpcEndpointInput) SetResetPolicy(v bool) *ModifyVpcEndpointInput { + s.ResetPolicy = &v return s } -// SetUserData sets the UserData field's value. -func (s *ImportInstanceLaunchSpecification) SetUserData(v *UserData) *ImportInstanceLaunchSpecification { - s.UserData = v +// SetVpcEndpointId sets the VpcEndpointId field's value. +func (s *ModifyVpcEndpointInput) SetVpcEndpointId(v string) *ModifyVpcEndpointInput { + s.VpcEndpointId = &v return s } -// Contains the output for ImportInstance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceResult -type ImportInstanceOutput struct { +type ModifyVpcEndpointOutput struct { _ struct{} `type:"structure"` - // Information about the conversion task. - ConversionTask *ConversionTask `locationName:"conversionTask" type:"structure"` + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s ImportInstanceOutput) String() string { +func (s ModifyVpcEndpointOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportInstanceOutput) GoString() string { +func (s ModifyVpcEndpointOutput) GoString() string { return s.String() } -// SetConversionTask sets the ConversionTask field's value. -func (s *ImportInstanceOutput) SetConversionTask(v *ConversionTask) *ImportInstanceOutput { - s.ConversionTask = v +// SetReturn sets the Return field's value. +func (s *ModifyVpcEndpointOutput) SetReturn(v bool) *ModifyVpcEndpointOutput { + s.Return = &v return s } -// Describes an import instance task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceTaskDetails -type ImportInstanceTaskDetails struct { +type ModifyVpcEndpointServiceConfigurationInput struct { _ struct{} `type:"structure"` - // A description of the task. - Description *string `locationName:"description" type:"string"` + // Indicate whether requests to create an endpoint to your service must be accepted. + AcceptanceRequired *bool `type:"boolean"` - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` + // The Amazon Resource Names (ARNs) of Network Load Balancers to add to your + // service configuration. + AddNetworkLoadBalancerArns []*string `locationName:"AddNetworkLoadBalancerArn" locationNameList:"item" type:"list"` - // The instance operating system. - Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // One or more volumes. + // The Amazon Resource Names (ARNs) of Network Load Balancers to remove from + // your service configuration. + RemoveNetworkLoadBalancerArns []*string `locationName:"RemoveNetworkLoadBalancerArn" locationNameList:"item" type:"list"` + + // The ID of the service. // - // Volumes is a required field - Volumes []*ImportInstanceVolumeDetailItem `locationName:"volumes" locationNameList:"item" type:"list" required:"true"` + // ServiceId is a required field + ServiceId *string `type:"string" required:"true"` } // String returns the string representation -func (s ImportInstanceTaskDetails) String() string { +func (s ModifyVpcEndpointServiceConfigurationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportInstanceTaskDetails) GoString() string { +func (s ModifyVpcEndpointServiceConfigurationInput) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *ImportInstanceTaskDetails) SetDescription(v string) *ImportInstanceTaskDetails { - s.Description = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVpcEndpointServiceConfigurationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointServiceConfigurationInput"} + if s.ServiceId == nil { + invalidParams.Add(request.NewErrParamRequired("ServiceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAcceptanceRequired sets the AcceptanceRequired field's value. +func (s *ModifyVpcEndpointServiceConfigurationInput) SetAcceptanceRequired(v bool) *ModifyVpcEndpointServiceConfigurationInput { + s.AcceptanceRequired = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *ImportInstanceTaskDetails) SetInstanceId(v string) *ImportInstanceTaskDetails { - s.InstanceId = &v +// SetAddNetworkLoadBalancerArns sets the AddNetworkLoadBalancerArns field's value. +func (s *ModifyVpcEndpointServiceConfigurationInput) SetAddNetworkLoadBalancerArns(v []*string) *ModifyVpcEndpointServiceConfigurationInput { + s.AddNetworkLoadBalancerArns = v return s } -// SetPlatform sets the Platform field's value. -func (s *ImportInstanceTaskDetails) SetPlatform(v string) *ImportInstanceTaskDetails { - s.Platform = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyVpcEndpointServiceConfigurationInput) SetDryRun(v bool) *ModifyVpcEndpointServiceConfigurationInput { + s.DryRun = &v return s } -// SetVolumes sets the Volumes field's value. -func (s *ImportInstanceTaskDetails) SetVolumes(v []*ImportInstanceVolumeDetailItem) *ImportInstanceTaskDetails { - s.Volumes = v +// SetRemoveNetworkLoadBalancerArns sets the RemoveNetworkLoadBalancerArns field's value. +func (s *ModifyVpcEndpointServiceConfigurationInput) SetRemoveNetworkLoadBalancerArns(v []*string) *ModifyVpcEndpointServiceConfigurationInput { + s.RemoveNetworkLoadBalancerArns = v return s } -// Describes an import volume task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceVolumeDetailItem -type ImportInstanceVolumeDetailItem struct { +// SetServiceId sets the ServiceId field's value. +func (s *ModifyVpcEndpointServiceConfigurationInput) SetServiceId(v string) *ModifyVpcEndpointServiceConfigurationInput { + s.ServiceId = &v + return s +} + +type ModifyVpcEndpointServiceConfigurationOutput struct { _ struct{} `type:"structure"` - // The Availability Zone where the resulting instance will reside. - // - // AvailabilityZone is a required field - AvailabilityZone *string `locationName:"availabilityZone" type:"string" required:"true"` + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` +} - // The number of bytes converted so far. - // - // BytesConverted is a required field - BytesConverted *int64 `locationName:"bytesConverted" type:"long" required:"true"` +// String returns the string representation +func (s ModifyVpcEndpointServiceConfigurationOutput) String() string { + return awsutil.Prettify(s) +} - // A description of the task. - Description *string `locationName:"description" type:"string"` +// GoString returns the string representation +func (s ModifyVpcEndpointServiceConfigurationOutput) GoString() string { + return s.String() +} - // The image. - // - // Image is a required field - Image *DiskImageDescription `locationName:"image" type:"structure" required:"true"` +// SetReturn sets the Return field's value. +func (s *ModifyVpcEndpointServiceConfigurationOutput) SetReturn(v bool) *ModifyVpcEndpointServiceConfigurationOutput { + s.Return = &v + return s +} - // The status of the import of this particular disk image. - // - // Status is a required field - Status *string `locationName:"status" type:"string" required:"true"` +type ModifyVpcEndpointServicePermissionsInput struct { + _ struct{} `type:"structure"` - // The status information or errors related to the disk image. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // The Amazon Resource Names (ARN) of one or more principals. Permissions are + // granted to the principals in this list. To grant permissions to all principals, + // specify an asterisk (*). + AddAllowedPrincipals []*string `locationNameList:"item" type:"list"` - // The volume. + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The Amazon Resource Names (ARN) of one or more principals. Permissions are + // revoked for principals in this list. + RemoveAllowedPrincipals []*string `locationNameList:"item" type:"list"` + + // The ID of the service. // - // Volume is a required field - Volume *DiskImageVolumeDescription `locationName:"volume" type:"structure" required:"true"` + // ServiceId is a required field + ServiceId *string `type:"string" required:"true"` } // String returns the string representation -func (s ImportInstanceVolumeDetailItem) String() string { +func (s ModifyVpcEndpointServicePermissionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportInstanceVolumeDetailItem) GoString() string { +func (s ModifyVpcEndpointServicePermissionsInput) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ImportInstanceVolumeDetailItem) SetAvailabilityZone(v string) *ImportInstanceVolumeDetailItem { - s.AvailabilityZone = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVpcEndpointServicePermissionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointServicePermissionsInput"} + if s.ServiceId == nil { + invalidParams.Add(request.NewErrParamRequired("ServiceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAddAllowedPrincipals sets the AddAllowedPrincipals field's value. +func (s *ModifyVpcEndpointServicePermissionsInput) SetAddAllowedPrincipals(v []*string) *ModifyVpcEndpointServicePermissionsInput { + s.AddAllowedPrincipals = v return s } -// SetBytesConverted sets the BytesConverted field's value. -func (s *ImportInstanceVolumeDetailItem) SetBytesConverted(v int64) *ImportInstanceVolumeDetailItem { - s.BytesConverted = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyVpcEndpointServicePermissionsInput) SetDryRun(v bool) *ModifyVpcEndpointServicePermissionsInput { + s.DryRun = &v return s } -// SetDescription sets the Description field's value. -func (s *ImportInstanceVolumeDetailItem) SetDescription(v string) *ImportInstanceVolumeDetailItem { - s.Description = &v +// SetRemoveAllowedPrincipals sets the RemoveAllowedPrincipals field's value. +func (s *ModifyVpcEndpointServicePermissionsInput) SetRemoveAllowedPrincipals(v []*string) *ModifyVpcEndpointServicePermissionsInput { + s.RemoveAllowedPrincipals = v return s } -// SetImage sets the Image field's value. -func (s *ImportInstanceVolumeDetailItem) SetImage(v *DiskImageDescription) *ImportInstanceVolumeDetailItem { - s.Image = v +// SetServiceId sets the ServiceId field's value. +func (s *ModifyVpcEndpointServicePermissionsInput) SetServiceId(v string) *ModifyVpcEndpointServicePermissionsInput { + s.ServiceId = &v return s } -// SetStatus sets the Status field's value. -func (s *ImportInstanceVolumeDetailItem) SetStatus(v string) *ImportInstanceVolumeDetailItem { - s.Status = &v - return s +type ModifyVpcEndpointServicePermissionsOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + ReturnValue *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s ModifyVpcEndpointServicePermissionsOutput) String() string { + return awsutil.Prettify(s) } -// SetStatusMessage sets the StatusMessage field's value. -func (s *ImportInstanceVolumeDetailItem) SetStatusMessage(v string) *ImportInstanceVolumeDetailItem { - s.StatusMessage = &v - return s +// GoString returns the string representation +func (s ModifyVpcEndpointServicePermissionsOutput) GoString() string { + return s.String() } -// SetVolume sets the Volume field's value. -func (s *ImportInstanceVolumeDetailItem) SetVolume(v *DiskImageVolumeDescription) *ImportInstanceVolumeDetailItem { - s.Volume = v +// SetReturnValue sets the ReturnValue field's value. +func (s *ModifyVpcEndpointServicePermissionsOutput) SetReturnValue(v bool) *ModifyVpcEndpointServicePermissionsOutput { + s.ReturnValue = &v return s } -// Contains the parameters for ImportKeyPair. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPairRequest -type ImportKeyPairInput struct { +type ModifyVpcPeeringConnectionOptionsInput struct { _ struct{} `type:"structure"` + // The VPC peering connection options for the accepter VPC. + AccepterPeeringConnectionOptions *PeeringConnectionOptionsRequest `type:"structure"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // A unique name for the key pair. - // - // KeyName is a required field - KeyName *string `locationName:"keyName" type:"string" required:"true"` + // The VPC peering connection options for the requester VPC. + RequesterPeeringConnectionOptions *PeeringConnectionOptionsRequest `type:"structure"` - // The public key. For API calls, the text must be base64-encoded. For command - // line tools, base64 encoding is performed for you. - // - // PublicKeyMaterial is automatically base64 encoded/decoded by the SDK. + // The ID of the VPC peering connection. // - // PublicKeyMaterial is a required field - PublicKeyMaterial []byte `locationName:"publicKeyMaterial" type:"blob" required:"true"` + // VpcPeeringConnectionId is a required field + VpcPeeringConnectionId *string `type:"string" required:"true"` } // String returns the string representation -func (s ImportKeyPairInput) String() string { +func (s ModifyVpcPeeringConnectionOptionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportKeyPairInput) GoString() string { +func (s ModifyVpcPeeringConnectionOptionsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ImportKeyPairInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ImportKeyPairInput"} - if s.KeyName == nil { - invalidParams.Add(request.NewErrParamRequired("KeyName")) - } - if s.PublicKeyMaterial == nil { - invalidParams.Add(request.NewErrParamRequired("PublicKeyMaterial")) +func (s *ModifyVpcPeeringConnectionOptionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpcPeeringConnectionOptionsInput"} + if s.VpcPeeringConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) } if invalidParams.Len() > 0 { @@ -36848,278 +80034,287 @@ func (s *ImportKeyPairInput) Validate() error { return nil } +// SetAccepterPeeringConnectionOptions sets the AccepterPeeringConnectionOptions field's value. +func (s *ModifyVpcPeeringConnectionOptionsInput) SetAccepterPeeringConnectionOptions(v *PeeringConnectionOptionsRequest) *ModifyVpcPeeringConnectionOptionsInput { + s.AccepterPeeringConnectionOptions = v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *ImportKeyPairInput) SetDryRun(v bool) *ImportKeyPairInput { +func (s *ModifyVpcPeeringConnectionOptionsInput) SetDryRun(v bool) *ModifyVpcPeeringConnectionOptionsInput { s.DryRun = &v return s } -// SetKeyName sets the KeyName field's value. -func (s *ImportKeyPairInput) SetKeyName(v string) *ImportKeyPairInput { - s.KeyName = &v +// SetRequesterPeeringConnectionOptions sets the RequesterPeeringConnectionOptions field's value. +func (s *ModifyVpcPeeringConnectionOptionsInput) SetRequesterPeeringConnectionOptions(v *PeeringConnectionOptionsRequest) *ModifyVpcPeeringConnectionOptionsInput { + s.RequesterPeeringConnectionOptions = v return s } -// SetPublicKeyMaterial sets the PublicKeyMaterial field's value. -func (s *ImportKeyPairInput) SetPublicKeyMaterial(v []byte) *ImportKeyPairInput { - s.PublicKeyMaterial = v +// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. +func (s *ModifyVpcPeeringConnectionOptionsInput) SetVpcPeeringConnectionId(v string) *ModifyVpcPeeringConnectionOptionsInput { + s.VpcPeeringConnectionId = &v return s } -// Contains the output of ImportKeyPair. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPairResult -type ImportKeyPairOutput struct { +type ModifyVpcPeeringConnectionOptionsOutput struct { _ struct{} `type:"structure"` - // The MD5 public key fingerprint as specified in section 4 of RFC 4716. - KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` + // Information about the VPC peering connection options for the accepter VPC. + AccepterPeeringConnectionOptions *PeeringConnectionOptions `locationName:"accepterPeeringConnectionOptions" type:"structure"` - // The key pair name you provided. - KeyName *string `locationName:"keyName" type:"string"` + // Information about the VPC peering connection options for the requester VPC. + RequesterPeeringConnectionOptions *PeeringConnectionOptions `locationName:"requesterPeeringConnectionOptions" type:"structure"` } // String returns the string representation -func (s ImportKeyPairOutput) String() string { +func (s ModifyVpcPeeringConnectionOptionsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportKeyPairOutput) GoString() string { +func (s ModifyVpcPeeringConnectionOptionsOutput) GoString() string { return s.String() } -// SetKeyFingerprint sets the KeyFingerprint field's value. -func (s *ImportKeyPairOutput) SetKeyFingerprint(v string) *ImportKeyPairOutput { - s.KeyFingerprint = &v +// SetAccepterPeeringConnectionOptions sets the AccepterPeeringConnectionOptions field's value. +func (s *ModifyVpcPeeringConnectionOptionsOutput) SetAccepterPeeringConnectionOptions(v *PeeringConnectionOptions) *ModifyVpcPeeringConnectionOptionsOutput { + s.AccepterPeeringConnectionOptions = v return s } -// SetKeyName sets the KeyName field's value. -func (s *ImportKeyPairOutput) SetKeyName(v string) *ImportKeyPairOutput { - s.KeyName = &v +// SetRequesterPeeringConnectionOptions sets the RequesterPeeringConnectionOptions field's value. +func (s *ModifyVpcPeeringConnectionOptionsOutput) SetRequesterPeeringConnectionOptions(v *PeeringConnectionOptions) *ModifyVpcPeeringConnectionOptionsOutput { + s.RequesterPeeringConnectionOptions = v return s } -// Contains the parameters for ImportSnapshot. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshotRequest -type ImportSnapshotInput struct { +type ModifyVpcTenancyInput struct { _ struct{} `type:"structure"` - // The client-specific data. - ClientData *ClientData `type:"structure"` - - // Token to enable idempotency for VM import requests. - ClientToken *string `type:"string"` - - // The description string for the import snapshot task. - Description *string `type:"string"` - - // Information about the disk container. - DiskContainer *SnapshotDiskContainer `type:"structure"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `type:"boolean"` - // The name of the role to use when not using the default role, 'vmimport'. - RoleName *string `type:"string"` + // The instance tenancy attribute for the VPC. + // + // InstanceTenancy is a required field + InstanceTenancy *string `type:"string" required:"true" enum:"VpcTenancy"` + + // The ID of the VPC. + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` } // String returns the string representation -func (s ImportSnapshotInput) String() string { +func (s ModifyVpcTenancyInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportSnapshotInput) GoString() string { +func (s ModifyVpcTenancyInput) GoString() string { return s.String() } -// SetClientData sets the ClientData field's value. -func (s *ImportSnapshotInput) SetClientData(v *ClientData) *ImportSnapshotInput { - s.ClientData = v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVpcTenancyInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpcTenancyInput"} + if s.InstanceTenancy == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceTenancy")) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetClientToken sets the ClientToken field's value. -func (s *ImportSnapshotInput) SetClientToken(v string) *ImportSnapshotInput { - s.ClientToken = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyVpcTenancyInput) SetDryRun(v bool) *ModifyVpcTenancyInput { + s.DryRun = &v return s } -// SetDescription sets the Description field's value. -func (s *ImportSnapshotInput) SetDescription(v string) *ImportSnapshotInput { - s.Description = &v +// SetInstanceTenancy sets the InstanceTenancy field's value. +func (s *ModifyVpcTenancyInput) SetInstanceTenancy(v string) *ModifyVpcTenancyInput { + s.InstanceTenancy = &v return s } -// SetDiskContainer sets the DiskContainer field's value. -func (s *ImportSnapshotInput) SetDiskContainer(v *SnapshotDiskContainer) *ImportSnapshotInput { - s.DiskContainer = v +// SetVpcId sets the VpcId field's value. +func (s *ModifyVpcTenancyInput) SetVpcId(v string) *ModifyVpcTenancyInput { + s.VpcId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *ImportSnapshotInput) SetDryRun(v bool) *ImportSnapshotInput { - s.DryRun = &v - return s +type ModifyVpcTenancyOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, returns an error. + ReturnValue *bool `locationName:"return" type:"boolean"` } -// SetRoleName sets the RoleName field's value. -func (s *ImportSnapshotInput) SetRoleName(v string) *ImportSnapshotInput { - s.RoleName = &v +// String returns the string representation +func (s ModifyVpcTenancyOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyVpcTenancyOutput) GoString() string { + return s.String() +} + +// SetReturnValue sets the ReturnValue field's value. +func (s *ModifyVpcTenancyOutput) SetReturnValue(v bool) *ModifyVpcTenancyOutput { + s.ReturnValue = &v return s } -// Contains the output for ImportSnapshot. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshotResult -type ImportSnapshotOutput struct { +type ModifyVpnConnectionInput struct { _ struct{} `type:"structure"` - // A description of the import snapshot task. - Description *string `locationName:"description" type:"string"` + // The ID of the customer gateway at your end of the VPN connection. + CustomerGatewayId *string `type:"string"` - // The ID of the import snapshot task. - ImportTaskId *string `locationName:"importTaskId" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // Information about the import snapshot task. - SnapshotTaskDetail *SnapshotTaskDetail `locationName:"snapshotTaskDetail" type:"structure"` + // The ID of the transit gateway. + TransitGatewayId *string `type:"string"` + + // The ID of the VPN connection. + // + // VpnConnectionId is a required field + VpnConnectionId *string `type:"string" required:"true"` + + // The ID of the virtual private gateway at the AWS side of the VPN connection. + VpnGatewayId *string `type:"string"` } // String returns the string representation -func (s ImportSnapshotOutput) String() string { +func (s ModifyVpnConnectionInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportSnapshotOutput) GoString() string { +func (s ModifyVpnConnectionInput) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *ImportSnapshotOutput) SetDescription(v string) *ImportSnapshotOutput { - s.Description = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVpnConnectionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpnConnectionInput"} + if s.VpnConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCustomerGatewayId sets the CustomerGatewayId field's value. +func (s *ModifyVpnConnectionInput) SetCustomerGatewayId(v string) *ModifyVpnConnectionInput { + s.CustomerGatewayId = &v return s } -// SetImportTaskId sets the ImportTaskId field's value. -func (s *ImportSnapshotOutput) SetImportTaskId(v string) *ImportSnapshotOutput { - s.ImportTaskId = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyVpnConnectionInput) SetDryRun(v bool) *ModifyVpnConnectionInput { + s.DryRun = &v return s } -// SetSnapshotTaskDetail sets the SnapshotTaskDetail field's value. -func (s *ImportSnapshotOutput) SetSnapshotTaskDetail(v *SnapshotTaskDetail) *ImportSnapshotOutput { - s.SnapshotTaskDetail = v +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *ModifyVpnConnectionInput) SetTransitGatewayId(v string) *ModifyVpnConnectionInput { + s.TransitGatewayId = &v return s } -// Describes an import snapshot task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshotTask -type ImportSnapshotTask struct { - _ struct{} `type:"structure"` +// SetVpnConnectionId sets the VpnConnectionId field's value. +func (s *ModifyVpnConnectionInput) SetVpnConnectionId(v string) *ModifyVpnConnectionInput { + s.VpnConnectionId = &v + return s +} - // A description of the import snapshot task. - Description *string `locationName:"description" type:"string"` +// SetVpnGatewayId sets the VpnGatewayId field's value. +func (s *ModifyVpnConnectionInput) SetVpnGatewayId(v string) *ModifyVpnConnectionInput { + s.VpnGatewayId = &v + return s +} - // The ID of the import snapshot task. - ImportTaskId *string `locationName:"importTaskId" type:"string"` +type ModifyVpnConnectionOutput struct { + _ struct{} `type:"structure"` - // Describes an import snapshot task. - SnapshotTaskDetail *SnapshotTaskDetail `locationName:"snapshotTaskDetail" type:"structure"` + // Describes a VPN connection. + VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` } // String returns the string representation -func (s ImportSnapshotTask) String() string { +func (s ModifyVpnConnectionOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportSnapshotTask) GoString() string { +func (s ModifyVpnConnectionOutput) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *ImportSnapshotTask) SetDescription(v string) *ImportSnapshotTask { - s.Description = &v - return s -} - -// SetImportTaskId sets the ImportTaskId field's value. -func (s *ImportSnapshotTask) SetImportTaskId(v string) *ImportSnapshotTask { - s.ImportTaskId = &v - return s -} - -// SetSnapshotTaskDetail sets the SnapshotTaskDetail field's value. -func (s *ImportSnapshotTask) SetSnapshotTaskDetail(v *SnapshotTaskDetail) *ImportSnapshotTask { - s.SnapshotTaskDetail = v +// SetVpnConnection sets the VpnConnection field's value. +func (s *ModifyVpnConnectionOutput) SetVpnConnection(v *VpnConnection) *ModifyVpnConnectionOutput { + s.VpnConnection = v return s } -// Contains the parameters for ImportVolume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolumeRequest -type ImportVolumeInput struct { +type ModifyVpnTunnelCertificateInput struct { _ struct{} `type:"structure"` - // The Availability Zone for the resulting EBS volume. - // - // AvailabilityZone is a required field - AvailabilityZone *string `locationName:"availabilityZone" type:"string" required:"true"` - - // A description of the volume. - Description *string `locationName:"description" type:"string"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The disk image. + // The ID of the AWS Site-to-Site VPN connection. // - // Image is a required field - Image *DiskImageDetail `locationName:"image" type:"structure" required:"true"` + // VpnConnectionId is a required field + VpnConnectionId *string `type:"string" required:"true"` - // The volume size. + // The external IP address of the VPN tunnel. // - // Volume is a required field - Volume *VolumeDetail `locationName:"volume" type:"structure" required:"true"` + // VpnTunnelOutsideIpAddress is a required field + VpnTunnelOutsideIpAddress *string `type:"string" required:"true"` } // String returns the string representation -func (s ImportVolumeInput) String() string { +func (s ModifyVpnTunnelCertificateInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportVolumeInput) GoString() string { +func (s ModifyVpnTunnelCertificateInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ImportVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ImportVolumeInput"} - if s.AvailabilityZone == nil { - invalidParams.Add(request.NewErrParamRequired("AvailabilityZone")) - } - if s.Image == nil { - invalidParams.Add(request.NewErrParamRequired("Image")) - } - if s.Volume == nil { - invalidParams.Add(request.NewErrParamRequired("Volume")) - } - if s.Image != nil { - if err := s.Image.Validate(); err != nil { - invalidParams.AddNested("Image", err.(request.ErrInvalidParams)) - } +func (s *ModifyVpnTunnelCertificateInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpnTunnelCertificateInput"} + if s.VpnConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) } - if s.Volume != nil { - if err := s.Volume.Validate(); err != nil { - invalidParams.AddNested("Volume", err.(request.ErrInvalidParams)) - } + if s.VpnTunnelOutsideIpAddress == nil { + invalidParams.Add(request.NewErrParamRequired("VpnTunnelOutsideIpAddress")) } if invalidParams.Len() > 0 { @@ -37128,788 +80323,1093 @@ func (s *ImportVolumeInput) Validate() error { return nil } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ImportVolumeInput) SetAvailabilityZone(v string) *ImportVolumeInput { - s.AvailabilityZone = &v - return s -} - -// SetDescription sets the Description field's value. -func (s *ImportVolumeInput) SetDescription(v string) *ImportVolumeInput { - s.Description = &v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *ImportVolumeInput) SetDryRun(v bool) *ImportVolumeInput { +func (s *ModifyVpnTunnelCertificateInput) SetDryRun(v bool) *ModifyVpnTunnelCertificateInput { s.DryRun = &v return s } -// SetImage sets the Image field's value. -func (s *ImportVolumeInput) SetImage(v *DiskImageDetail) *ImportVolumeInput { - s.Image = v +// SetVpnConnectionId sets the VpnConnectionId field's value. +func (s *ModifyVpnTunnelCertificateInput) SetVpnConnectionId(v string) *ModifyVpnTunnelCertificateInput { + s.VpnConnectionId = &v return s } -// SetVolume sets the Volume field's value. -func (s *ImportVolumeInput) SetVolume(v *VolumeDetail) *ImportVolumeInput { - s.Volume = v +// SetVpnTunnelOutsideIpAddress sets the VpnTunnelOutsideIpAddress field's value. +func (s *ModifyVpnTunnelCertificateInput) SetVpnTunnelOutsideIpAddress(v string) *ModifyVpnTunnelCertificateInput { + s.VpnTunnelOutsideIpAddress = &v return s } -// Contains the output for ImportVolume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolumeResult -type ImportVolumeOutput struct { +type ModifyVpnTunnelCertificateOutput struct { _ struct{} `type:"structure"` - // Information about the conversion task. - ConversionTask *ConversionTask `locationName:"conversionTask" type:"structure"` + // Describes a VPN connection. + VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` } // String returns the string representation -func (s ImportVolumeOutput) String() string { +func (s ModifyVpnTunnelCertificateOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportVolumeOutput) GoString() string { +func (s ModifyVpnTunnelCertificateOutput) GoString() string { return s.String() } -// SetConversionTask sets the ConversionTask field's value. -func (s *ImportVolumeOutput) SetConversionTask(v *ConversionTask) *ImportVolumeOutput { - s.ConversionTask = v +// SetVpnConnection sets the VpnConnection field's value. +func (s *ModifyVpnTunnelCertificateOutput) SetVpnConnection(v *VpnConnection) *ModifyVpnTunnelCertificateOutput { + s.VpnConnection = v return s } -// Describes an import volume task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolumeTaskDetails -type ImportVolumeTaskDetails struct { +type ModifyVpnTunnelOptionsInput struct { _ struct{} `type:"structure"` - // The Availability Zone where the resulting volume will reside. - // - // AvailabilityZone is a required field - AvailabilityZone *string `locationName:"availabilityZone" type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The number of bytes converted so far. + // The tunnel options to modify. // - // BytesConverted is a required field - BytesConverted *int64 `locationName:"bytesConverted" type:"long" required:"true"` - - // The description you provided when starting the import volume task. - Description *string `locationName:"description" type:"string"` + // TunnelOptions is a required field + TunnelOptions *ModifyVpnTunnelOptionsSpecification `type:"structure" required:"true"` - // The image. + // The ID of the AWS Site-to-Site VPN connection. // - // Image is a required field - Image *DiskImageDescription `locationName:"image" type:"structure" required:"true"` + // VpnConnectionId is a required field + VpnConnectionId *string `type:"string" required:"true"` - // The volume. + // The external IP address of the VPN tunnel. // - // Volume is a required field - Volume *DiskImageVolumeDescription `locationName:"volume" type:"structure" required:"true"` + // VpnTunnelOutsideIpAddress is a required field + VpnTunnelOutsideIpAddress *string `type:"string" required:"true"` } // String returns the string representation -func (s ImportVolumeTaskDetails) String() string { +func (s ModifyVpnTunnelOptionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ImportVolumeTaskDetails) GoString() string { +func (s ModifyVpnTunnelOptionsInput) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ImportVolumeTaskDetails) SetAvailabilityZone(v string) *ImportVolumeTaskDetails { - s.AvailabilityZone = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyVpnTunnelOptionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyVpnTunnelOptionsInput"} + if s.TunnelOptions == nil { + invalidParams.Add(request.NewErrParamRequired("TunnelOptions")) + } + if s.VpnConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpnConnectionId")) + } + if s.VpnTunnelOutsideIpAddress == nil { + invalidParams.Add(request.NewErrParamRequired("VpnTunnelOutsideIpAddress")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetBytesConverted sets the BytesConverted field's value. -func (s *ImportVolumeTaskDetails) SetBytesConverted(v int64) *ImportVolumeTaskDetails { - s.BytesConverted = &v +// SetDryRun sets the DryRun field's value. +func (s *ModifyVpnTunnelOptionsInput) SetDryRun(v bool) *ModifyVpnTunnelOptionsInput { + s.DryRun = &v return s } -// SetDescription sets the Description field's value. -func (s *ImportVolumeTaskDetails) SetDescription(v string) *ImportVolumeTaskDetails { - s.Description = &v +// SetTunnelOptions sets the TunnelOptions field's value. +func (s *ModifyVpnTunnelOptionsInput) SetTunnelOptions(v *ModifyVpnTunnelOptionsSpecification) *ModifyVpnTunnelOptionsInput { + s.TunnelOptions = v return s } -// SetImage sets the Image field's value. -func (s *ImportVolumeTaskDetails) SetImage(v *DiskImageDescription) *ImportVolumeTaskDetails { - s.Image = v +// SetVpnConnectionId sets the VpnConnectionId field's value. +func (s *ModifyVpnTunnelOptionsInput) SetVpnConnectionId(v string) *ModifyVpnTunnelOptionsInput { + s.VpnConnectionId = &v return s } -// SetVolume sets the Volume field's value. -func (s *ImportVolumeTaskDetails) SetVolume(v *DiskImageVolumeDescription) *ImportVolumeTaskDetails { - s.Volume = v +// SetVpnTunnelOutsideIpAddress sets the VpnTunnelOutsideIpAddress field's value. +func (s *ModifyVpnTunnelOptionsInput) SetVpnTunnelOutsideIpAddress(v string) *ModifyVpnTunnelOptionsInput { + s.VpnTunnelOutsideIpAddress = &v return s } -// Describes an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Instance -type Instance struct { +type ModifyVpnTunnelOptionsOutput struct { _ struct{} `type:"structure"` - // The AMI launch index, which can be used to find this instance in the launch - // group. - AmiLaunchIndex *int64 `locationName:"amiLaunchIndex" type:"integer"` - - // The architecture of the image. - Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` - - // Any block device mapping entries for the instance. - BlockDeviceMappings []*InstanceBlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // The idempotency token you provided when you launched the instance, if applicable. - ClientToken *string `locationName:"clientToken" type:"string"` - - // Indicates whether the instance is optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // Specifies whether enhanced networking with ENA is enabled. - EnaSupport *bool `locationName:"enaSupport" type:"boolean"` - - // The hypervisor type of the instance. - Hypervisor *string `locationName:"hypervisor" type:"string" enum:"HypervisorType"` - - // The IAM instance profile associated with the instance, if applicable. - IamInstanceProfile *IamInstanceProfile `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI used to launch the instance. - ImageId *string `locationName:"imageId" type:"string"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // Indicates whether this is a Spot instance or a Scheduled Instance. - InstanceLifecycle *string `locationName:"instanceLifecycle" type:"string" enum:"InstanceLifecycleType"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The kernel associated with this instance, if applicable. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the key pair, if this instance was launched with an associated - // key pair. - KeyName *string `locationName:"keyName" type:"string"` - - // The time the instance was launched. - LaunchTime *time.Time `locationName:"launchTime" type:"timestamp" timestampFormat:"iso8601"` + // Describes a VPN connection. + VpnConnection *VpnConnection `locationName:"vpnConnection" type:"structure"` +} - // The monitoring for the instance. - Monitoring *Monitoring `locationName:"monitoring" type:"structure"` +// String returns the string representation +func (s ModifyVpnTunnelOptionsOutput) String() string { + return awsutil.Prettify(s) +} - // [EC2-VPC] One or more network interfaces for the instance. - NetworkInterfaces []*InstanceNetworkInterface `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` +// GoString returns the string representation +func (s ModifyVpnTunnelOptionsOutput) GoString() string { + return s.String() +} - // The location where the instance launched, if applicable. - Placement *Placement `locationName:"placement" type:"structure"` +// SetVpnConnection sets the VpnConnection field's value. +func (s *ModifyVpnTunnelOptionsOutput) SetVpnConnection(v *VpnConnection) *ModifyVpnTunnelOptionsOutput { + s.VpnConnection = v + return s +} - // The value is Windows for Windows instances; otherwise blank. - Platform *string `locationName:"platform" type:"string" enum:"PlatformValues"` +// The AWS Site-to-Site VPN tunnel options to modify. +type ModifyVpnTunnelOptionsSpecification struct { + _ struct{} `type:"structure"` - // (IPv4 only) The private DNS hostname name assigned to the instance. This - // DNS hostname can only be used inside the Amazon EC2 network. This name is - // not available until the instance enters the running state. + // The number of seconds after which a DPD timeout occurs. // - // [EC2-VPC] The Amazon-provided DNS server will resolve Amazon-provided private - // DNS hostnames if you've enabled DNS resolution and DNS hostnames in your - // VPC. If you are not using the Amazon-provided DNS server in your VPC, your - // custom domain name servers must resolve the hostname as appropriate. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - - // The private IPv4 address assigned to the instance. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - - // The product codes attached to this instance, if applicable. - ProductCodes []*ProductCode `locationName:"productCodes" locationNameList:"item" type:"list"` - - // (IPv4 only) The public DNS name assigned to the instance. This name is not - // available until the instance enters the running state. For EC2-VPC, this - // name is only available if you've enabled DNS hostnames for your VPC. - PublicDnsName *string `locationName:"dnsName" type:"string"` - - // The public IPv4 address assigned to the instance, if applicable. - PublicIpAddress *string `locationName:"ipAddress" type:"string"` - - // The RAM disk associated with this instance, if applicable. - RamdiskId *string `locationName:"ramdiskId" type:"string"` + // Constraints: A value between 0 and 30. + // + // Default: 30 + DPDTimeoutSeconds *int64 `type:"integer"` - // The root device name (for example, /dev/sda1 or /dev/xvda). - RootDeviceName *string `locationName:"rootDeviceName" type:"string"` + // The IKE versions that are permitted for the VPN tunnel. + // + // Valid values: ikev1 | ikev2 + IKEVersions []*IKEVersionsRequestListValue `locationName:"IKEVersion" locationNameList:"item" type:"list"` - // The root device type used by the AMI. The AMI can use an EBS volume or an - // instance store volume. - RootDeviceType *string `locationName:"rootDeviceType" type:"string" enum:"DeviceType"` + // One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel + // for phase 1 IKE negotiations. + // + // Valid values: 2 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 + Phase1DHGroupNumbers []*Phase1DHGroupNumbersRequestListValue `locationName:"Phase1DHGroupNumber" locationNameList:"item" type:"list"` - // One or more security groups for the instance. - SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + // One or more encryption algorithms that are permitted for the VPN tunnel for + // phase 1 IKE negotiations. + // + // Valid values: AES128 | AES256 + Phase1EncryptionAlgorithms []*Phase1EncryptionAlgorithmsRequestListValue `locationName:"Phase1EncryptionAlgorithm" locationNameList:"item" type:"list"` - // Specifies whether to enable an instance launched in a VPC to perform NAT. - // This controls whether source/destination checking is enabled on the instance. - // A value of true means checking is enabled, and false means checking is disabled. - // The value must be false for the instance to perform NAT. For more information, - // see NAT Instances (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) - // in the Amazon Virtual Private Cloud User Guide. - SourceDestCheck *bool `locationName:"sourceDestCheck" type:"boolean"` + // One or more integrity algorithms that are permitted for the VPN tunnel for + // phase 1 IKE negotiations. + // + // Valid values: SHA1 | SHA2-256 + Phase1IntegrityAlgorithms []*Phase1IntegrityAlgorithmsRequestListValue `locationName:"Phase1IntegrityAlgorithm" locationNameList:"item" type:"list"` - // If the request is a Spot instance request, the ID of the request. - SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` + // The lifetime for phase 1 of the IKE negotiation, in seconds. + // + // Constraints: A value between 900 and 28,800. + // + // Default: 28800 + Phase1LifetimeSeconds *int64 `type:"integer"` - // Specifies whether enhanced networking with the Intel 82599 Virtual Function - // interface is enabled. - SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` + // One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel + // for phase 2 IKE negotiations. + // + // Valid values: 2 | 5 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 + Phase2DHGroupNumbers []*Phase2DHGroupNumbersRequestListValue `locationName:"Phase2DHGroupNumber" locationNameList:"item" type:"list"` - // The current state of the instance. - State *InstanceState `locationName:"instanceState" type:"structure"` + // One or more encryption algorithms that are permitted for the VPN tunnel for + // phase 2 IKE negotiations. + // + // Valid values: AES128 | AES256 + Phase2EncryptionAlgorithms []*Phase2EncryptionAlgorithmsRequestListValue `locationName:"Phase2EncryptionAlgorithm" locationNameList:"item" type:"list"` - // The reason for the most recent state transition. - StateReason *StateReason `locationName:"stateReason" type:"structure"` + // One or more integrity algorithms that are permitted for the VPN tunnel for + // phase 2 IKE negotiations. + // + // Valid values: SHA1 | SHA2-256 + Phase2IntegrityAlgorithms []*Phase2IntegrityAlgorithmsRequestListValue `locationName:"Phase2IntegrityAlgorithm" locationNameList:"item" type:"list"` - // The reason for the most recent state transition. This might be an empty string. - StateTransitionReason *string `locationName:"reason" type:"string"` + // The lifetime for phase 2 of the IKE negotiation, in seconds. + // + // Constraints: A value between 900 and 3,600. The value must be less than the + // value for Phase1LifetimeSeconds. + // + // Default: 3600 + Phase2LifetimeSeconds *int64 `type:"integer"` - // [EC2-VPC] The ID of the subnet in which the instance is running. - SubnetId *string `locationName:"subnetId" type:"string"` + // The pre-shared key (PSK) to establish initial authentication between the + // virtual private gateway and the customer gateway. + // + // Constraints: Allowed characters are alphanumeric characters, periods (.), + // and underscores (_). Must be between 8 and 64 characters in length and cannot + // start with zero (0). + PreSharedKey *string `type:"string"` - // Any tags assigned to the instance. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The percentage of the rekey window (determined by RekeyMarginTimeSeconds) + // during which the rekey time is randomly selected. + // + // Constraints: A value between 0 and 100. + // + // Default: 100 + RekeyFuzzPercentage *int64 `type:"integer"` - // The virtualization type of the instance. - VirtualizationType *string `locationName:"virtualizationType" type:"string" enum:"VirtualizationType"` + // The margin time, in seconds, before the phase 2 lifetime expires, during + // which the AWS side of the VPN connection performs an IKE rekey. The exact + // time of the rekey is randomly selected based on the value for RekeyFuzzPercentage. + // + // Constraints: A value between 60 and half of Phase2LifetimeSeconds. + // + // Default: 540 + RekeyMarginTimeSeconds *int64 `type:"integer"` - // [EC2-VPC] The ID of the VPC in which the instance is running. - VpcId *string `locationName:"vpcId" type:"string"` + // The number of packets in an IKE replay window. + // + // Constraints: A value between 64 and 2048. + // + // Default: 1024 + ReplayWindowSize *int64 `type:"integer"` + + // The range of inside IP addresses for the tunnel. Any specified CIDR blocks + // must be unique across all VPN connections that use the same virtual private + // gateway. + // + // Constraints: A size /30 CIDR block from the 169.254.0.0/16 range. The following + // CIDR blocks are reserved and cannot be used: + // + // * 169.254.0.0/30 + // + // * 169.254.1.0/30 + // + // * 169.254.2.0/30 + // + // * 169.254.3.0/30 + // + // * 169.254.4.0/30 + // + // * 169.254.5.0/30 + // + // * 169.254.169.252/30 + TunnelInsideCidr *string `type:"string"` } // String returns the string representation -func (s Instance) String() string { +func (s ModifyVpnTunnelOptionsSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Instance) GoString() string { +func (s ModifyVpnTunnelOptionsSpecification) GoString() string { return s.String() } -// SetAmiLaunchIndex sets the AmiLaunchIndex field's value. -func (s *Instance) SetAmiLaunchIndex(v int64) *Instance { - s.AmiLaunchIndex = &v +// SetDPDTimeoutSeconds sets the DPDTimeoutSeconds field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetDPDTimeoutSeconds(v int64) *ModifyVpnTunnelOptionsSpecification { + s.DPDTimeoutSeconds = &v return s } -// SetArchitecture sets the Architecture field's value. -func (s *Instance) SetArchitecture(v string) *Instance { - s.Architecture = &v +// SetIKEVersions sets the IKEVersions field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetIKEVersions(v []*IKEVersionsRequestListValue) *ModifyVpnTunnelOptionsSpecification { + s.IKEVersions = v return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *Instance) SetBlockDeviceMappings(v []*InstanceBlockDeviceMapping) *Instance { - s.BlockDeviceMappings = v +// SetPhase1DHGroupNumbers sets the Phase1DHGroupNumbers field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPhase1DHGroupNumbers(v []*Phase1DHGroupNumbersRequestListValue) *ModifyVpnTunnelOptionsSpecification { + s.Phase1DHGroupNumbers = v return s } -// SetClientToken sets the ClientToken field's value. -func (s *Instance) SetClientToken(v string) *Instance { - s.ClientToken = &v +// SetPhase1EncryptionAlgorithms sets the Phase1EncryptionAlgorithms field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPhase1EncryptionAlgorithms(v []*Phase1EncryptionAlgorithmsRequestListValue) *ModifyVpnTunnelOptionsSpecification { + s.Phase1EncryptionAlgorithms = v return s } -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *Instance) SetEbsOptimized(v bool) *Instance { - s.EbsOptimized = &v +// SetPhase1IntegrityAlgorithms sets the Phase1IntegrityAlgorithms field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPhase1IntegrityAlgorithms(v []*Phase1IntegrityAlgorithmsRequestListValue) *ModifyVpnTunnelOptionsSpecification { + s.Phase1IntegrityAlgorithms = v return s } -// SetEnaSupport sets the EnaSupport field's value. -func (s *Instance) SetEnaSupport(v bool) *Instance { - s.EnaSupport = &v +// SetPhase1LifetimeSeconds sets the Phase1LifetimeSeconds field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPhase1LifetimeSeconds(v int64) *ModifyVpnTunnelOptionsSpecification { + s.Phase1LifetimeSeconds = &v return s } -// SetHypervisor sets the Hypervisor field's value. -func (s *Instance) SetHypervisor(v string) *Instance { - s.Hypervisor = &v +// SetPhase2DHGroupNumbers sets the Phase2DHGroupNumbers field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPhase2DHGroupNumbers(v []*Phase2DHGroupNumbersRequestListValue) *ModifyVpnTunnelOptionsSpecification { + s.Phase2DHGroupNumbers = v return s } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *Instance) SetIamInstanceProfile(v *IamInstanceProfile) *Instance { - s.IamInstanceProfile = v +// SetPhase2EncryptionAlgorithms sets the Phase2EncryptionAlgorithms field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPhase2EncryptionAlgorithms(v []*Phase2EncryptionAlgorithmsRequestListValue) *ModifyVpnTunnelOptionsSpecification { + s.Phase2EncryptionAlgorithms = v return s } -// SetImageId sets the ImageId field's value. -func (s *Instance) SetImageId(v string) *Instance { - s.ImageId = &v +// SetPhase2IntegrityAlgorithms sets the Phase2IntegrityAlgorithms field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPhase2IntegrityAlgorithms(v []*Phase2IntegrityAlgorithmsRequestListValue) *ModifyVpnTunnelOptionsSpecification { + s.Phase2IntegrityAlgorithms = v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *Instance) SetInstanceId(v string) *Instance { - s.InstanceId = &v +// SetPhase2LifetimeSeconds sets the Phase2LifetimeSeconds field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPhase2LifetimeSeconds(v int64) *ModifyVpnTunnelOptionsSpecification { + s.Phase2LifetimeSeconds = &v return s } -// SetInstanceLifecycle sets the InstanceLifecycle field's value. -func (s *Instance) SetInstanceLifecycle(v string) *Instance { - s.InstanceLifecycle = &v +// SetPreSharedKey sets the PreSharedKey field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetPreSharedKey(v string) *ModifyVpnTunnelOptionsSpecification { + s.PreSharedKey = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *Instance) SetInstanceType(v string) *Instance { - s.InstanceType = &v +// SetRekeyFuzzPercentage sets the RekeyFuzzPercentage field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetRekeyFuzzPercentage(v int64) *ModifyVpnTunnelOptionsSpecification { + s.RekeyFuzzPercentage = &v return s } -// SetKernelId sets the KernelId field's value. -func (s *Instance) SetKernelId(v string) *Instance { - s.KernelId = &v +// SetRekeyMarginTimeSeconds sets the RekeyMarginTimeSeconds field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetRekeyMarginTimeSeconds(v int64) *ModifyVpnTunnelOptionsSpecification { + s.RekeyMarginTimeSeconds = &v return s } -// SetKeyName sets the KeyName field's value. -func (s *Instance) SetKeyName(v string) *Instance { - s.KeyName = &v +// SetReplayWindowSize sets the ReplayWindowSize field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetReplayWindowSize(v int64) *ModifyVpnTunnelOptionsSpecification { + s.ReplayWindowSize = &v return s } -// SetLaunchTime sets the LaunchTime field's value. -func (s *Instance) SetLaunchTime(v time.Time) *Instance { - s.LaunchTime = &v +// SetTunnelInsideCidr sets the TunnelInsideCidr field's value. +func (s *ModifyVpnTunnelOptionsSpecification) SetTunnelInsideCidr(v string) *ModifyVpnTunnelOptionsSpecification { + s.TunnelInsideCidr = &v return s } -// SetMonitoring sets the Monitoring field's value. -func (s *Instance) SetMonitoring(v *Monitoring) *Instance { - s.Monitoring = v - return s +type MonitorInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The IDs of the instances. + // + // InstanceIds is a required field + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` } -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *Instance) SetNetworkInterfaces(v []*InstanceNetworkInterface) *Instance { - s.NetworkInterfaces = v +// String returns the string representation +func (s MonitorInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s MonitorInstancesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *MonitorInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "MonitorInstancesInput"} + if s.InstanceIds == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *MonitorInstancesInput) SetDryRun(v bool) *MonitorInstancesInput { + s.DryRun = &v return s } -// SetPlacement sets the Placement field's value. -func (s *Instance) SetPlacement(v *Placement) *Instance { - s.Placement = v +// SetInstanceIds sets the InstanceIds field's value. +func (s *MonitorInstancesInput) SetInstanceIds(v []*string) *MonitorInstancesInput { + s.InstanceIds = v return s } -// SetPlatform sets the Platform field's value. -func (s *Instance) SetPlatform(v string) *Instance { - s.Platform = &v +type MonitorInstancesOutput struct { + _ struct{} `type:"structure"` + + // The monitoring information. + InstanceMonitorings []*InstanceMonitoring `locationName:"instancesSet" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s MonitorInstancesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s MonitorInstancesOutput) GoString() string { + return s.String() +} + +// SetInstanceMonitorings sets the InstanceMonitorings field's value. +func (s *MonitorInstancesOutput) SetInstanceMonitorings(v []*InstanceMonitoring) *MonitorInstancesOutput { + s.InstanceMonitorings = v return s } -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *Instance) SetPrivateDnsName(v string) *Instance { - s.PrivateDnsName = &v +// Describes the monitoring of an instance. +type Monitoring struct { + _ struct{} `type:"structure"` + + // Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring + // is enabled. + State *string `locationName:"state" type:"string" enum:"MonitoringState"` +} + +// String returns the string representation +func (s Monitoring) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Monitoring) GoString() string { + return s.String() +} + +// SetState sets the State field's value. +func (s *Monitoring) SetState(v string) *Monitoring { + s.State = &v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *Instance) SetPrivateIpAddress(v string) *Instance { - s.PrivateIpAddress = &v +type MoveAddressToVpcInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The Elastic IP address. + // + // PublicIp is a required field + PublicIp *string `locationName:"publicIp" type:"string" required:"true"` +} + +// String returns the string representation +func (s MoveAddressToVpcInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s MoveAddressToVpcInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *MoveAddressToVpcInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "MoveAddressToVpcInput"} + if s.PublicIp == nil { + invalidParams.Add(request.NewErrParamRequired("PublicIp")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *MoveAddressToVpcInput) SetDryRun(v bool) *MoveAddressToVpcInput { + s.DryRun = &v return s } -// SetProductCodes sets the ProductCodes field's value. -func (s *Instance) SetProductCodes(v []*ProductCode) *Instance { - s.ProductCodes = v +// SetPublicIp sets the PublicIp field's value. +func (s *MoveAddressToVpcInput) SetPublicIp(v string) *MoveAddressToVpcInput { + s.PublicIp = &v return s } -// SetPublicDnsName sets the PublicDnsName field's value. -func (s *Instance) SetPublicDnsName(v string) *Instance { - s.PublicDnsName = &v +type MoveAddressToVpcOutput struct { + _ struct{} `type:"structure"` + + // The allocation ID for the Elastic IP address. + AllocationId *string `locationName:"allocationId" type:"string"` + + // The status of the move of the IP address. + Status *string `locationName:"status" type:"string" enum:"Status"` +} + +// String returns the string representation +func (s MoveAddressToVpcOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s MoveAddressToVpcOutput) GoString() string { + return s.String() +} + +// SetAllocationId sets the AllocationId field's value. +func (s *MoveAddressToVpcOutput) SetAllocationId(v string) *MoveAddressToVpcOutput { + s.AllocationId = &v return s } -// SetPublicIpAddress sets the PublicIpAddress field's value. -func (s *Instance) SetPublicIpAddress(v string) *Instance { - s.PublicIpAddress = &v +// SetStatus sets the Status field's value. +func (s *MoveAddressToVpcOutput) SetStatus(v string) *MoveAddressToVpcOutput { + s.Status = &v return s } -// SetRamdiskId sets the RamdiskId field's value. -func (s *Instance) SetRamdiskId(v string) *Instance { - s.RamdiskId = &v +// Describes the status of a moving Elastic IP address. +type MovingAddressStatus struct { + _ struct{} `type:"structure"` + + // The status of the Elastic IP address that's being moved to the EC2-VPC platform, + // or restored to the EC2-Classic platform. + MoveStatus *string `locationName:"moveStatus" type:"string" enum:"MoveStatus"` + + // The Elastic IP address. + PublicIp *string `locationName:"publicIp" type:"string"` +} + +// String returns the string representation +func (s MovingAddressStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s MovingAddressStatus) GoString() string { + return s.String() +} + +// SetMoveStatus sets the MoveStatus field's value. +func (s *MovingAddressStatus) SetMoveStatus(v string) *MovingAddressStatus { + s.MoveStatus = &v return s } -// SetRootDeviceName sets the RootDeviceName field's value. -func (s *Instance) SetRootDeviceName(v string) *Instance { - s.RootDeviceName = &v +// SetPublicIp sets the PublicIp field's value. +func (s *MovingAddressStatus) SetPublicIp(v string) *MovingAddressStatus { + s.PublicIp = &v return s } -// SetRootDeviceType sets the RootDeviceType field's value. -func (s *Instance) SetRootDeviceType(v string) *Instance { - s.RootDeviceType = &v +// Describes a NAT gateway. +type NatGateway struct { + _ struct{} `type:"structure"` + + // The date and time the NAT gateway was created. + CreateTime *time.Time `locationName:"createTime" type:"timestamp"` + + // The date and time the NAT gateway was deleted, if applicable. + DeleteTime *time.Time `locationName:"deleteTime" type:"timestamp"` + + // If the NAT gateway could not be created, specifies the error code for the + // failure. (InsufficientFreeAddressesInSubnet | Gateway.NotAttached | InvalidAllocationID.NotFound + // | Resource.AlreadyAssociated | InternalError | InvalidSubnetID.NotFound) + FailureCode *string `locationName:"failureCode" type:"string"` + + // If the NAT gateway could not be created, specifies the error message for + // the failure, that corresponds to the error code. + // + // * For InsufficientFreeAddressesInSubnet: "Subnet has insufficient free + // addresses to create this NAT gateway" + // + // * For Gateway.NotAttached: "Network vpc-xxxxxxxx has no Internet gateway + // attached" + // + // * For InvalidAllocationID.NotFound: "Elastic IP address eipalloc-xxxxxxxx + // could not be associated with this NAT gateway" + // + // * For Resource.AlreadyAssociated: "Elastic IP address eipalloc-xxxxxxxx + // is already associated" + // + // * For InternalError: "Network interface eni-xxxxxxxx, created and used + // internally by this NAT gateway is in an invalid state. Please try again." + // + // * For InvalidSubnetID.NotFound: "The specified subnet subnet-xxxxxxxx + // does not exist or could not be found." + FailureMessage *string `locationName:"failureMessage" type:"string"` + + // Information about the IP addresses and network interface associated with + // the NAT gateway. + NatGatewayAddresses []*NatGatewayAddress `locationName:"natGatewayAddressSet" locationNameList:"item" type:"list"` + + // The ID of the NAT gateway. + NatGatewayId *string `locationName:"natGatewayId" type:"string"` + + // Reserved. If you need to sustain traffic greater than the documented limits + // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), + // contact us through the Support Center (https://console.aws.amazon.com/support/home?). + ProvisionedBandwidth *ProvisionedBandwidth `locationName:"provisionedBandwidth" type:"structure"` + + // The state of the NAT gateway. + // + // * pending: The NAT gateway is being created and is not ready to process + // traffic. + // + // * failed: The NAT gateway could not be created. Check the failureCode + // and failureMessage fields for the reason. + // + // * available: The NAT gateway is able to process traffic. This status remains + // until you delete the NAT gateway, and does not indicate the health of + // the NAT gateway. + // + // * deleting: The NAT gateway is in the process of being terminated and + // may still be processing traffic. + // + // * deleted: The NAT gateway has been terminated and is no longer processing + // traffic. + State *string `locationName:"state" type:"string" enum:"NatGatewayState"` + + // The ID of the subnet in which the NAT gateway is located. + SubnetId *string `locationName:"subnetId" type:"string"` + + // The tags for the NAT gateway. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the VPC in which the NAT gateway is located. + VpcId *string `locationName:"vpcId" type:"string"` +} + +// String returns the string representation +func (s NatGateway) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s NatGateway) GoString() string { + return s.String() +} + +// SetCreateTime sets the CreateTime field's value. +func (s *NatGateway) SetCreateTime(v time.Time) *NatGateway { + s.CreateTime = &v return s } -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *Instance) SetSecurityGroups(v []*GroupIdentifier) *Instance { - s.SecurityGroups = v +// SetDeleteTime sets the DeleteTime field's value. +func (s *NatGateway) SetDeleteTime(v time.Time) *NatGateway { + s.DeleteTime = &v return s } -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *Instance) SetSourceDestCheck(v bool) *Instance { - s.SourceDestCheck = &v +// SetFailureCode sets the FailureCode field's value. +func (s *NatGateway) SetFailureCode(v string) *NatGateway { + s.FailureCode = &v return s } -// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. -func (s *Instance) SetSpotInstanceRequestId(v string) *Instance { - s.SpotInstanceRequestId = &v +// SetFailureMessage sets the FailureMessage field's value. +func (s *NatGateway) SetFailureMessage(v string) *NatGateway { + s.FailureMessage = &v return s } -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *Instance) SetSriovNetSupport(v string) *Instance { - s.SriovNetSupport = &v +// SetNatGatewayAddresses sets the NatGatewayAddresses field's value. +func (s *NatGateway) SetNatGatewayAddresses(v []*NatGatewayAddress) *NatGateway { + s.NatGatewayAddresses = v return s } -// SetState sets the State field's value. -func (s *Instance) SetState(v *InstanceState) *Instance { - s.State = v +// SetNatGatewayId sets the NatGatewayId field's value. +func (s *NatGateway) SetNatGatewayId(v string) *NatGateway { + s.NatGatewayId = &v return s } -// SetStateReason sets the StateReason field's value. -func (s *Instance) SetStateReason(v *StateReason) *Instance { - s.StateReason = v +// SetProvisionedBandwidth sets the ProvisionedBandwidth field's value. +func (s *NatGateway) SetProvisionedBandwidth(v *ProvisionedBandwidth) *NatGateway { + s.ProvisionedBandwidth = v return s } -// SetStateTransitionReason sets the StateTransitionReason field's value. -func (s *Instance) SetStateTransitionReason(v string) *Instance { - s.StateTransitionReason = &v +// SetState sets the State field's value. +func (s *NatGateway) SetState(v string) *NatGateway { + s.State = &v return s } // SetSubnetId sets the SubnetId field's value. -func (s *Instance) SetSubnetId(v string) *Instance { +func (s *NatGateway) SetSubnetId(v string) *NatGateway { s.SubnetId = &v return s } // SetTags sets the Tags field's value. -func (s *Instance) SetTags(v []*Tag) *Instance { +func (s *NatGateway) SetTags(v []*Tag) *NatGateway { s.Tags = v return s } -// SetVirtualizationType sets the VirtualizationType field's value. -func (s *Instance) SetVirtualizationType(v string) *Instance { - s.VirtualizationType = &v - return s -} - // SetVpcId sets the VpcId field's value. -func (s *Instance) SetVpcId(v string) *Instance { +func (s *NatGateway) SetVpcId(v string) *NatGateway { s.VpcId = &v return s } -// Describes a block device mapping. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceBlockDeviceMapping -type InstanceBlockDeviceMapping struct { +// Describes the IP addresses and network interface associated with a NAT gateway. +type NatGatewayAddress struct { _ struct{} `type:"structure"` - // The device name exposed to the instance (for example, /dev/sdh or xvdh). - DeviceName *string `locationName:"deviceName" type:"string"` + // The allocation ID of the Elastic IP address that's associated with the NAT + // gateway. + AllocationId *string `locationName:"allocationId" type:"string"` - // Parameters used to automatically set up EBS volumes when the instance is - // launched. - Ebs *EbsInstanceBlockDevice `locationName:"ebs" type:"structure"` + // The ID of the network interface associated with the NAT gateway. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + + // The private IP address associated with the Elastic IP address. + PrivateIp *string `locationName:"privateIp" type:"string"` + + // The Elastic IP address associated with the NAT gateway. + PublicIp *string `locationName:"publicIp" type:"string"` } // String returns the string representation -func (s InstanceBlockDeviceMapping) String() string { +func (s NatGatewayAddress) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceBlockDeviceMapping) GoString() string { +func (s NatGatewayAddress) GoString() string { return s.String() } -// SetDeviceName sets the DeviceName field's value. -func (s *InstanceBlockDeviceMapping) SetDeviceName(v string) *InstanceBlockDeviceMapping { - s.DeviceName = &v +// SetAllocationId sets the AllocationId field's value. +func (s *NatGatewayAddress) SetAllocationId(v string) *NatGatewayAddress { + s.AllocationId = &v return s } -// SetEbs sets the Ebs field's value. -func (s *InstanceBlockDeviceMapping) SetEbs(v *EbsInstanceBlockDevice) *InstanceBlockDeviceMapping { - s.Ebs = v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *NatGatewayAddress) SetNetworkInterfaceId(v string) *NatGatewayAddress { + s.NetworkInterfaceId = &v return s } -// Describes a block device mapping entry. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceBlockDeviceMappingSpecification -type InstanceBlockDeviceMappingSpecification struct { +// SetPrivateIp sets the PrivateIp field's value. +func (s *NatGatewayAddress) SetPrivateIp(v string) *NatGatewayAddress { + s.PrivateIp = &v + return s +} + +// SetPublicIp sets the PublicIp field's value. +func (s *NatGatewayAddress) SetPublicIp(v string) *NatGatewayAddress { + s.PublicIp = &v + return s +} + +// Describes a network ACL. +type NetworkAcl struct { _ struct{} `type:"structure"` - // The device name exposed to the instance (for example, /dev/sdh or xvdh). - DeviceName *string `locationName:"deviceName" type:"string"` + // Any associations between the network ACL and one or more subnets + Associations []*NetworkAclAssociation `locationName:"associationSet" locationNameList:"item" type:"list"` - // Parameters used to automatically set up EBS volumes when the instance is - // launched. - Ebs *EbsInstanceBlockDeviceSpecification `locationName:"ebs" type:"structure"` + // One or more entries (rules) in the network ACL. + Entries []*NetworkAclEntry `locationName:"entrySet" locationNameList:"item" type:"list"` - // suppress the specified device included in the block device mapping. - NoDevice *string `locationName:"noDevice" type:"string"` + // Indicates whether this is the default network ACL for the VPC. + IsDefault *bool `locationName:"default" type:"boolean"` - // The virtual device name. - VirtualName *string `locationName:"virtualName" type:"string"` + // The ID of the network ACL. + NetworkAclId *string `locationName:"networkAclId" type:"string"` + + // The ID of the AWS account that owns the network ACL. + OwnerId *string `locationName:"ownerId" type:"string"` + + // Any tags assigned to the network ACL. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the VPC for the network ACL. + VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s InstanceBlockDeviceMappingSpecification) String() string { +func (s NetworkAcl) String() string { return awsutil.Prettify(s) } -// GoString returns the string representation -func (s InstanceBlockDeviceMappingSpecification) GoString() string { - return s.String() +// GoString returns the string representation +func (s NetworkAcl) GoString() string { + return s.String() +} + +// SetAssociations sets the Associations field's value. +func (s *NetworkAcl) SetAssociations(v []*NetworkAclAssociation) *NetworkAcl { + s.Associations = v + return s +} + +// SetEntries sets the Entries field's value. +func (s *NetworkAcl) SetEntries(v []*NetworkAclEntry) *NetworkAcl { + s.Entries = v + return s +} + +// SetIsDefault sets the IsDefault field's value. +func (s *NetworkAcl) SetIsDefault(v bool) *NetworkAcl { + s.IsDefault = &v + return s } -// SetDeviceName sets the DeviceName field's value. -func (s *InstanceBlockDeviceMappingSpecification) SetDeviceName(v string) *InstanceBlockDeviceMappingSpecification { - s.DeviceName = &v +// SetNetworkAclId sets the NetworkAclId field's value. +func (s *NetworkAcl) SetNetworkAclId(v string) *NetworkAcl { + s.NetworkAclId = &v return s } -// SetEbs sets the Ebs field's value. -func (s *InstanceBlockDeviceMappingSpecification) SetEbs(v *EbsInstanceBlockDeviceSpecification) *InstanceBlockDeviceMappingSpecification { - s.Ebs = v +// SetOwnerId sets the OwnerId field's value. +func (s *NetworkAcl) SetOwnerId(v string) *NetworkAcl { + s.OwnerId = &v return s } -// SetNoDevice sets the NoDevice field's value. -func (s *InstanceBlockDeviceMappingSpecification) SetNoDevice(v string) *InstanceBlockDeviceMappingSpecification { - s.NoDevice = &v +// SetTags sets the Tags field's value. +func (s *NetworkAcl) SetTags(v []*Tag) *NetworkAcl { + s.Tags = v return s } -// SetVirtualName sets the VirtualName field's value. -func (s *InstanceBlockDeviceMappingSpecification) SetVirtualName(v string) *InstanceBlockDeviceMappingSpecification { - s.VirtualName = &v +// SetVpcId sets the VpcId field's value. +func (s *NetworkAcl) SetVpcId(v string) *NetworkAcl { + s.VpcId = &v return s } -// Information about the instance type that the Dedicated Host supports. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceCapacity -type InstanceCapacity struct { +// Describes an association between a network ACL and a subnet. +type NetworkAclAssociation struct { _ struct{} `type:"structure"` - // The number of instances that can still be launched onto the Dedicated Host. - AvailableCapacity *int64 `locationName:"availableCapacity" type:"integer"` + // The ID of the association between a network ACL and a subnet. + NetworkAclAssociationId *string `locationName:"networkAclAssociationId" type:"string"` - // The instance type size supported by the Dedicated Host. - InstanceType *string `locationName:"instanceType" type:"string"` + // The ID of the network ACL. + NetworkAclId *string `locationName:"networkAclId" type:"string"` - // The total number of instances that can be launched onto the Dedicated Host. - TotalCapacity *int64 `locationName:"totalCapacity" type:"integer"` + // The ID of the subnet. + SubnetId *string `locationName:"subnetId" type:"string"` } // String returns the string representation -func (s InstanceCapacity) String() string { +func (s NetworkAclAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceCapacity) GoString() string { +func (s NetworkAclAssociation) GoString() string { return s.String() } -// SetAvailableCapacity sets the AvailableCapacity field's value. -func (s *InstanceCapacity) SetAvailableCapacity(v int64) *InstanceCapacity { - s.AvailableCapacity = &v +// SetNetworkAclAssociationId sets the NetworkAclAssociationId field's value. +func (s *NetworkAclAssociation) SetNetworkAclAssociationId(v string) *NetworkAclAssociation { + s.NetworkAclAssociationId = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *InstanceCapacity) SetInstanceType(v string) *InstanceCapacity { - s.InstanceType = &v +// SetNetworkAclId sets the NetworkAclId field's value. +func (s *NetworkAclAssociation) SetNetworkAclId(v string) *NetworkAclAssociation { + s.NetworkAclId = &v return s } -// SetTotalCapacity sets the TotalCapacity field's value. -func (s *InstanceCapacity) SetTotalCapacity(v int64) *InstanceCapacity { - s.TotalCapacity = &v +// SetSubnetId sets the SubnetId field's value. +func (s *NetworkAclAssociation) SetSubnetId(v string) *NetworkAclAssociation { + s.SubnetId = &v return s } -// Describes a Reserved Instance listing state. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceCount -type InstanceCount struct { +// Describes an entry in a network ACL. +type NetworkAclEntry struct { _ struct{} `type:"structure"` - // The number of listed Reserved Instances in the state specified by the state. - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` + // The IPv4 network range to allow or deny, in CIDR notation. + CidrBlock *string `locationName:"cidrBlock" type:"string"` - // The states of the listed Reserved Instances. - State *string `locationName:"state" type:"string" enum:"ListingState"` + // Indicates whether the rule is an egress rule (applied to traffic leaving + // the subnet). + Egress *bool `locationName:"egress" type:"boolean"` + + // ICMP protocol: The ICMP type and code. + IcmpTypeCode *IcmpTypeCode `locationName:"icmpTypeCode" type:"structure"` + + // The IPv6 network range to allow or deny, in CIDR notation. + Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` + + // TCP or UDP protocols: The range of ports the rule applies to. + PortRange *PortRange `locationName:"portRange" type:"structure"` + + // The protocol number. A value of "-1" means all protocols. + Protocol *string `locationName:"protocol" type:"string"` + + // Indicates whether to allow or deny the traffic that matches the rule. + RuleAction *string `locationName:"ruleAction" type:"string" enum:"RuleAction"` + + // The rule number for the entry. ACL entries are processed in ascending order + // by rule number. + RuleNumber *int64 `locationName:"ruleNumber" type:"integer"` } // String returns the string representation -func (s InstanceCount) String() string { +func (s NetworkAclEntry) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceCount) GoString() string { +func (s NetworkAclEntry) GoString() string { return s.String() } -// SetInstanceCount sets the InstanceCount field's value. -func (s *InstanceCount) SetInstanceCount(v int64) *InstanceCount { - s.InstanceCount = &v +// SetCidrBlock sets the CidrBlock field's value. +func (s *NetworkAclEntry) SetCidrBlock(v string) *NetworkAclEntry { + s.CidrBlock = &v return s } -// SetState sets the State field's value. -func (s *InstanceCount) SetState(v string) *InstanceCount { - s.State = &v +// SetEgress sets the Egress field's value. +func (s *NetworkAclEntry) SetEgress(v bool) *NetworkAclEntry { + s.Egress = &v return s } -// Describes an instance to export. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceExportDetails -type InstanceExportDetails struct { - _ struct{} `type:"structure"` - - // The ID of the resource being exported. - InstanceId *string `locationName:"instanceId" type:"string"` +// SetIcmpTypeCode sets the IcmpTypeCode field's value. +func (s *NetworkAclEntry) SetIcmpTypeCode(v *IcmpTypeCode) *NetworkAclEntry { + s.IcmpTypeCode = v + return s +} - // The target virtualization environment. - TargetEnvironment *string `locationName:"targetEnvironment" type:"string" enum:"ExportEnvironment"` +// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. +func (s *NetworkAclEntry) SetIpv6CidrBlock(v string) *NetworkAclEntry { + s.Ipv6CidrBlock = &v + return s } -// String returns the string representation -func (s InstanceExportDetails) String() string { - return awsutil.Prettify(s) +// SetPortRange sets the PortRange field's value. +func (s *NetworkAclEntry) SetPortRange(v *PortRange) *NetworkAclEntry { + s.PortRange = v + return s } -// GoString returns the string representation -func (s InstanceExportDetails) GoString() string { - return s.String() +// SetProtocol sets the Protocol field's value. +func (s *NetworkAclEntry) SetProtocol(v string) *NetworkAclEntry { + s.Protocol = &v + return s } -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceExportDetails) SetInstanceId(v string) *InstanceExportDetails { - s.InstanceId = &v +// SetRuleAction sets the RuleAction field's value. +func (s *NetworkAclEntry) SetRuleAction(v string) *NetworkAclEntry { + s.RuleAction = &v return s } -// SetTargetEnvironment sets the TargetEnvironment field's value. -func (s *InstanceExportDetails) SetTargetEnvironment(v string) *InstanceExportDetails { - s.TargetEnvironment = &v +// SetRuleNumber sets the RuleNumber field's value. +func (s *NetworkAclEntry) SetRuleNumber(v int64) *NetworkAclEntry { + s.RuleNumber = &v return s } -// Describes an IPv6 address. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceIpv6Address -type InstanceIpv6Address struct { +// Describes the networking features of the instance type. +type NetworkInfo struct { _ struct{} `type:"structure"` - // The IPv6 address. - Ipv6Address *string `locationName:"ipv6Address" type:"string"` + // Indicates whether Elastic Network Adapter (ENA) is supported. + EnaSupport *string `locationName:"enaSupport" type:"string" enum:"EnaSupport"` + + // The maximum number of IPv4 addresses per network interface. + Ipv4AddressesPerInterface *int64 `locationName:"ipv4AddressesPerInterface" type:"integer"` + + // The maximum number of IPv6 addresses per network interface. + Ipv6AddressesPerInterface *int64 `locationName:"ipv6AddressesPerInterface" type:"integer"` + + // Indicates whether IPv6 is supported. + Ipv6Supported *bool `locationName:"ipv6Supported" type:"boolean"` + + // The maximum number of network interfaces for the instance type. + MaximumNetworkInterfaces *int64 `locationName:"maximumNetworkInterfaces" type:"integer"` + + // Describes the network performance. + NetworkPerformance *string `locationName:"networkPerformance" type:"string"` } // String returns the string representation -func (s InstanceIpv6Address) String() string { +func (s NetworkInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceIpv6Address) GoString() string { +func (s NetworkInfo) GoString() string { return s.String() } -// SetIpv6Address sets the Ipv6Address field's value. -func (s *InstanceIpv6Address) SetIpv6Address(v string) *InstanceIpv6Address { - s.Ipv6Address = &v +// SetEnaSupport sets the EnaSupport field's value. +func (s *NetworkInfo) SetEnaSupport(v string) *NetworkInfo { + s.EnaSupport = &v return s } -// Describes the monitoring of an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceMonitoring -type InstanceMonitoring struct { - _ struct{} `type:"structure"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The monitoring for the instance. - Monitoring *Monitoring `locationName:"monitoring" type:"structure"` +// SetIpv4AddressesPerInterface sets the Ipv4AddressesPerInterface field's value. +func (s *NetworkInfo) SetIpv4AddressesPerInterface(v int64) *NetworkInfo { + s.Ipv4AddressesPerInterface = &v + return s } -// String returns the string representation -func (s InstanceMonitoring) String() string { - return awsutil.Prettify(s) +// SetIpv6AddressesPerInterface sets the Ipv6AddressesPerInterface field's value. +func (s *NetworkInfo) SetIpv6AddressesPerInterface(v int64) *NetworkInfo { + s.Ipv6AddressesPerInterface = &v + return s } -// GoString returns the string representation -func (s InstanceMonitoring) GoString() string { - return s.String() +// SetIpv6Supported sets the Ipv6Supported field's value. +func (s *NetworkInfo) SetIpv6Supported(v bool) *NetworkInfo { + s.Ipv6Supported = &v + return s } -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceMonitoring) SetInstanceId(v string) *InstanceMonitoring { - s.InstanceId = &v +// SetMaximumNetworkInterfaces sets the MaximumNetworkInterfaces field's value. +func (s *NetworkInfo) SetMaximumNetworkInterfaces(v int64) *NetworkInfo { + s.MaximumNetworkInterfaces = &v return s } -// SetMonitoring sets the Monitoring field's value. -func (s *InstanceMonitoring) SetMonitoring(v *Monitoring) *InstanceMonitoring { - s.Monitoring = v +// SetNetworkPerformance sets the NetworkPerformance field's value. +func (s *NetworkInfo) SetNetworkPerformance(v string) *NetworkInfo { + s.NetworkPerformance = &v return s } // Describes a network interface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkInterface -type InstanceNetworkInterface struct { +type NetworkInterface struct { _ struct{} `type:"structure"` - // The association information for an Elastic IPv4 associated with the network - // interface. - Association *InstanceNetworkInterfaceAssociation `locationName:"association" type:"structure"` + // The association information for an Elastic IP address (IPv4) associated with + // the network interface. + Association *NetworkInterfaceAssociation `locationName:"association" type:"structure"` // The network interface attachment. - Attachment *InstanceNetworkInterfaceAttachment `locationName:"attachment" type:"structure"` + Attachment *NetworkInterfaceAttachment `locationName:"attachment" type:"structure"` - // The description. + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + + // A description. Description *string `locationName:"description" type:"string"` - // One or more security groups. + // Any security groups for the network interface. Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - // One or more IPv6 addresses associated with the network interface. - Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6AddressesSet" locationNameList:"item" type:"list"` + // The type of network interface. + InterfaceType *string `locationName:"interfaceType" type:"string" enum:"NetworkInterfaceType"` + + // The IPv6 addresses associated with the network interface. + Ipv6Addresses []*NetworkInterfaceIpv6Address `locationName:"ipv6AddressesSet" locationNameList:"item" type:"list"` // The MAC address. MacAddress *string `locationName:"macAddress" type:"string"` @@ -37917,7 +81417,7 @@ type InstanceNetworkInterface struct { // The ID of the network interface. NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - // The ID of the AWS account that created the network interface. + // The AWS account ID of the owner of the network interface. OwnerId *string `locationName:"ownerId" type:"string"` // The private DNS name. @@ -37926,10 +81426,17 @@ type InstanceNetworkInterface struct { // The IPv4 address of the network interface within the subnet. PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - // One or more private IPv4 addresses associated with the network interface. - PrivateIpAddresses []*InstancePrivateIpAddress `locationName:"privateIpAddressesSet" locationNameList:"item" type:"list"` + // The private IPv4 addresses associated with the network interface. + PrivateIpAddresses []*NetworkInterfacePrivateIpAddress `locationName:"privateIpAddressesSet" locationNameList:"item" type:"list"` - // Indicates whether to validate network traffic to or from this network interface. + // The ID of the entity that launched the instance on your behalf (for example, + // AWS Management Console or Auto Scaling). + RequesterId *string `locationName:"requesterId" type:"string"` + + // Indicates whether the network interface is being managed by AWS. + RequesterManaged *bool `locationName:"requesterManaged" type:"boolean"` + + // Indicates whether traffic to or from the instance is validated. SourceDestCheck *bool `locationName:"sourceDestCheck" type:"boolean"` // The status of the network interface. @@ -37938,160 +81445,209 @@ type InstanceNetworkInterface struct { // The ID of the subnet. SubnetId *string `locationName:"subnetId" type:"string"` + // Any tags assigned to the network interface. + TagSet []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The ID of the VPC. VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s InstanceNetworkInterface) String() string { +func (s NetworkInterface) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceNetworkInterface) GoString() string { +func (s NetworkInterface) GoString() string { return s.String() } // SetAssociation sets the Association field's value. -func (s *InstanceNetworkInterface) SetAssociation(v *InstanceNetworkInterfaceAssociation) *InstanceNetworkInterface { +func (s *NetworkInterface) SetAssociation(v *NetworkInterfaceAssociation) *NetworkInterface { s.Association = v return s } // SetAttachment sets the Attachment field's value. -func (s *InstanceNetworkInterface) SetAttachment(v *InstanceNetworkInterfaceAttachment) *InstanceNetworkInterface { +func (s *NetworkInterface) SetAttachment(v *NetworkInterfaceAttachment) *NetworkInterface { s.Attachment = v return s } +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *NetworkInterface) SetAvailabilityZone(v string) *NetworkInterface { + s.AvailabilityZone = &v + return s +} + // SetDescription sets the Description field's value. -func (s *InstanceNetworkInterface) SetDescription(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetDescription(v string) *NetworkInterface { s.Description = &v return s } // SetGroups sets the Groups field's value. -func (s *InstanceNetworkInterface) SetGroups(v []*GroupIdentifier) *InstanceNetworkInterface { +func (s *NetworkInterface) SetGroups(v []*GroupIdentifier) *NetworkInterface { s.Groups = v return s } +// SetInterfaceType sets the InterfaceType field's value. +func (s *NetworkInterface) SetInterfaceType(v string) *NetworkInterface { + s.InterfaceType = &v + return s +} + // SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *InstanceNetworkInterface) SetIpv6Addresses(v []*InstanceIpv6Address) *InstanceNetworkInterface { +func (s *NetworkInterface) SetIpv6Addresses(v []*NetworkInterfaceIpv6Address) *NetworkInterface { s.Ipv6Addresses = v return s } // SetMacAddress sets the MacAddress field's value. -func (s *InstanceNetworkInterface) SetMacAddress(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetMacAddress(v string) *NetworkInterface { s.MacAddress = &v return s } // SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *InstanceNetworkInterface) SetNetworkInterfaceId(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetNetworkInterfaceId(v string) *NetworkInterface { s.NetworkInterfaceId = &v return s } // SetOwnerId sets the OwnerId field's value. -func (s *InstanceNetworkInterface) SetOwnerId(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetOwnerId(v string) *NetworkInterface { s.OwnerId = &v return s } // SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *InstanceNetworkInterface) SetPrivateDnsName(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetPrivateDnsName(v string) *NetworkInterface { s.PrivateDnsName = &v return s } // SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *InstanceNetworkInterface) SetPrivateIpAddress(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetPrivateIpAddress(v string) *NetworkInterface { s.PrivateIpAddress = &v return s } // SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *InstanceNetworkInterface) SetPrivateIpAddresses(v []*InstancePrivateIpAddress) *InstanceNetworkInterface { +func (s *NetworkInterface) SetPrivateIpAddresses(v []*NetworkInterfacePrivateIpAddress) *NetworkInterface { s.PrivateIpAddresses = v return s } +// SetRequesterId sets the RequesterId field's value. +func (s *NetworkInterface) SetRequesterId(v string) *NetworkInterface { + s.RequesterId = &v + return s +} + +// SetRequesterManaged sets the RequesterManaged field's value. +func (s *NetworkInterface) SetRequesterManaged(v bool) *NetworkInterface { + s.RequesterManaged = &v + return s +} + // SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *InstanceNetworkInterface) SetSourceDestCheck(v bool) *InstanceNetworkInterface { +func (s *NetworkInterface) SetSourceDestCheck(v bool) *NetworkInterface { s.SourceDestCheck = &v return s } // SetStatus sets the Status field's value. -func (s *InstanceNetworkInterface) SetStatus(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetStatus(v string) *NetworkInterface { s.Status = &v return s } // SetSubnetId sets the SubnetId field's value. -func (s *InstanceNetworkInterface) SetSubnetId(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetSubnetId(v string) *NetworkInterface { s.SubnetId = &v return s } +// SetTagSet sets the TagSet field's value. +func (s *NetworkInterface) SetTagSet(v []*Tag) *NetworkInterface { + s.TagSet = v + return s +} + // SetVpcId sets the VpcId field's value. -func (s *InstanceNetworkInterface) SetVpcId(v string) *InstanceNetworkInterface { +func (s *NetworkInterface) SetVpcId(v string) *NetworkInterface { s.VpcId = &v return s } -// Describes association information for an Elastic IP address (IPv4). -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkInterfaceAssociation -type InstanceNetworkInterfaceAssociation struct { +// Describes association information for an Elastic IP address (IPv4 only). +type NetworkInterfaceAssociation struct { _ struct{} `type:"structure"` - // The ID of the owner of the Elastic IP address. + // The allocation ID. + AllocationId *string `locationName:"allocationId" type:"string"` + + // The association ID. + AssociationId *string `locationName:"associationId" type:"string"` + + // The ID of the Elastic IP address owner. IpOwnerId *string `locationName:"ipOwnerId" type:"string"` // The public DNS name. PublicDnsName *string `locationName:"publicDnsName" type:"string"` - // The public IP address or Elastic IP address bound to the network interface. + // The address of the Elastic IP address bound to the network interface. PublicIp *string `locationName:"publicIp" type:"string"` } // String returns the string representation -func (s InstanceNetworkInterfaceAssociation) String() string { +func (s NetworkInterfaceAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceNetworkInterfaceAssociation) GoString() string { +func (s NetworkInterfaceAssociation) GoString() string { return s.String() } +// SetAllocationId sets the AllocationId field's value. +func (s *NetworkInterfaceAssociation) SetAllocationId(v string) *NetworkInterfaceAssociation { + s.AllocationId = &v + return s +} + +// SetAssociationId sets the AssociationId field's value. +func (s *NetworkInterfaceAssociation) SetAssociationId(v string) *NetworkInterfaceAssociation { + s.AssociationId = &v + return s +} + // SetIpOwnerId sets the IpOwnerId field's value. -func (s *InstanceNetworkInterfaceAssociation) SetIpOwnerId(v string) *InstanceNetworkInterfaceAssociation { +func (s *NetworkInterfaceAssociation) SetIpOwnerId(v string) *NetworkInterfaceAssociation { s.IpOwnerId = &v return s } // SetPublicDnsName sets the PublicDnsName field's value. -func (s *InstanceNetworkInterfaceAssociation) SetPublicDnsName(v string) *InstanceNetworkInterfaceAssociation { +func (s *NetworkInterfaceAssociation) SetPublicDnsName(v string) *NetworkInterfaceAssociation { s.PublicDnsName = &v return s } // SetPublicIp sets the PublicIp field's value. -func (s *InstanceNetworkInterfaceAssociation) SetPublicIp(v string) *InstanceNetworkInterfaceAssociation { +func (s *NetworkInterfaceAssociation) SetPublicIp(v string) *NetworkInterfaceAssociation { s.PublicIp = &v return s } // Describes a network interface attachment. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkInterfaceAttachment -type InstanceNetworkInterfaceAttachment struct { +type NetworkInterfaceAttachment struct { _ struct{} `type:"structure"` - // The time stamp when the attachment initiated. - AttachTime *time.Time `locationName:"attachTime" type:"timestamp" timestampFormat:"iso8601"` + // The timestamp indicating when the attachment initiated. + AttachTime *time.Time `locationName:"attachTime" type:"timestamp"` // The ID of the network interface attachment. AttachmentId *string `locationName:"attachmentId" type:"string"` @@ -38099,1293 +81655,1520 @@ type InstanceNetworkInterfaceAttachment struct { // Indicates whether the network interface is deleted when the instance is terminated. DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - // The index of the device on the instance for the network interface attachment. + // The device index of the network interface attachment on the instance. DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` + + // The AWS account ID of the owner of the instance. + InstanceOwnerId *string `locationName:"instanceOwnerId" type:"string"` + // The attachment state. Status *string `locationName:"status" type:"string" enum:"AttachmentStatus"` } // String returns the string representation -func (s InstanceNetworkInterfaceAttachment) String() string { +func (s NetworkInterfaceAttachment) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceNetworkInterfaceAttachment) GoString() string { +func (s NetworkInterfaceAttachment) GoString() string { return s.String() } // SetAttachTime sets the AttachTime field's value. -func (s *InstanceNetworkInterfaceAttachment) SetAttachTime(v time.Time) *InstanceNetworkInterfaceAttachment { +func (s *NetworkInterfaceAttachment) SetAttachTime(v time.Time) *NetworkInterfaceAttachment { s.AttachTime = &v return s } // SetAttachmentId sets the AttachmentId field's value. -func (s *InstanceNetworkInterfaceAttachment) SetAttachmentId(v string) *InstanceNetworkInterfaceAttachment { +func (s *NetworkInterfaceAttachment) SetAttachmentId(v string) *NetworkInterfaceAttachment { s.AttachmentId = &v return s } // SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *InstanceNetworkInterfaceAttachment) SetDeleteOnTermination(v bool) *InstanceNetworkInterfaceAttachment { +func (s *NetworkInterfaceAttachment) SetDeleteOnTermination(v bool) *NetworkInterfaceAttachment { s.DeleteOnTermination = &v return s } // SetDeviceIndex sets the DeviceIndex field's value. -func (s *InstanceNetworkInterfaceAttachment) SetDeviceIndex(v int64) *InstanceNetworkInterfaceAttachment { +func (s *NetworkInterfaceAttachment) SetDeviceIndex(v int64) *NetworkInterfaceAttachment { s.DeviceIndex = &v return s } +// SetInstanceId sets the InstanceId field's value. +func (s *NetworkInterfaceAttachment) SetInstanceId(v string) *NetworkInterfaceAttachment { + s.InstanceId = &v + return s +} + +// SetInstanceOwnerId sets the InstanceOwnerId field's value. +func (s *NetworkInterfaceAttachment) SetInstanceOwnerId(v string) *NetworkInterfaceAttachment { + s.InstanceOwnerId = &v + return s +} + // SetStatus sets the Status field's value. -func (s *InstanceNetworkInterfaceAttachment) SetStatus(v string) *InstanceNetworkInterfaceAttachment { +func (s *NetworkInterfaceAttachment) SetStatus(v string) *NetworkInterfaceAttachment { s.Status = &v return s } -// Describes a network interface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkInterfaceSpecification -type InstanceNetworkInterfaceSpecification struct { +// Describes an attachment change. +type NetworkInterfaceAttachmentChanges struct { _ struct{} `type:"structure"` - // Indicates whether to assign a public IPv4 address to an instance you launch - // in a VPC. The public IP address can only be assigned to a network interface - // for eth0, and can only be assigned to a new network interface, not an existing - // one. You cannot specify more than one network interface in the request. If - // launching into a default subnet, the default value is true. - AssociatePublicIpAddress *bool `locationName:"associatePublicIpAddress" type:"boolean"` + // The ID of the network interface attachment. + AttachmentId *string `locationName:"attachmentId" type:"string"` - // If set to true, the interface is deleted when the instance is terminated. - // You can specify true only if creating a new network interface when launching - // an instance. + // Indicates whether the network interface is deleted when the instance is terminated. DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` +} - // The description of the network interface. Applies only if creating a network - // interface when launching an instance. - Description *string `locationName:"description" type:"string"` - - // The index of the device on the instance for the network interface attachment. - // If you are specifying a network interface in a RunInstances request, you - // must provide the device index. - DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` - - // The IDs of the security groups for the network interface. Applies only if - // creating a network interface when launching an instance. - Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // A number of IPv6 addresses to assign to the network interface. Amazon EC2 - // chooses the IPv6 addresses from the range of the subnet. You cannot specify - // this option and the option to assign specific IPv6 addresses in the same - // request. You can specify this option if you've specified a minimum number - // of instances to launch. - Ipv6AddressCount *int64 `locationName:"ipv6AddressCount" type:"integer"` - - // One or more IPv6 addresses to assign to the network interface. You cannot - // specify this option and the option to assign a number of IPv6 addresses in - // the same request. You cannot specify this option if you've specified a minimum - // number of instances to launch. - Ipv6Addresses []*InstanceIpv6Address `locationName:"ipv6AddressesSet" queryName:"Ipv6Addresses" locationNameList:"item" type:"list"` +// String returns the string representation +func (s NetworkInterfaceAttachmentChanges) String() string { + return awsutil.Prettify(s) +} - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` +// GoString returns the string representation +func (s NetworkInterfaceAttachmentChanges) GoString() string { + return s.String() +} - // The private IPv4 address of the network interface. Applies only if creating - // a network interface when launching an instance. You cannot specify this option - // if you're launching more than one instance in a RunInstances request. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` +// SetAttachmentId sets the AttachmentId field's value. +func (s *NetworkInterfaceAttachmentChanges) SetAttachmentId(v string) *NetworkInterfaceAttachmentChanges { + s.AttachmentId = &v + return s +} - // One or more private IPv4 addresses to assign to the network interface. Only - // one private IPv4 address can be designated as primary. You cannot specify - // this option if you're launching more than one instance in a RunInstances - // request. - PrivateIpAddresses []*PrivateIpAddressSpecification `locationName:"privateIpAddressesSet" queryName:"PrivateIpAddresses" locationNameList:"item" type:"list"` +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *NetworkInterfaceAttachmentChanges) SetDeleteOnTermination(v bool) *NetworkInterfaceAttachmentChanges { + s.DeleteOnTermination = &v + return s +} - // The number of secondary private IPv4 addresses. You can't specify this option - // and specify more than one private IP address using the private IP addresses - // option. You cannot specify this option if you're launching more than one - // instance in a RunInstances request. - SecondaryPrivateIpAddressCount *int64 `locationName:"secondaryPrivateIpAddressCount" type:"integer"` +// Describes an IPv6 address associated with a network interface. +type NetworkInterfaceIpv6Address struct { + _ struct{} `type:"structure"` - // The ID of the subnet associated with the network string. Applies only if - // creating a network interface when launching an instance. - SubnetId *string `locationName:"subnetId" type:"string"` + // The IPv6 address. + Ipv6Address *string `locationName:"ipv6Address" type:"string"` } // String returns the string representation -func (s InstanceNetworkInterfaceSpecification) String() string { +func (s NetworkInterfaceIpv6Address) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceNetworkInterfaceSpecification) GoString() string { +func (s NetworkInterfaceIpv6Address) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *InstanceNetworkInterfaceSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "InstanceNetworkInterfaceSpecification"} - if s.PrivateIpAddresses != nil { - for i, v := range s.PrivateIpAddresses { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PrivateIpAddresses", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. -func (s *InstanceNetworkInterfaceSpecification) SetAssociatePublicIpAddress(v bool) *InstanceNetworkInterfaceSpecification { - s.AssociatePublicIpAddress = &v +// SetIpv6Address sets the Ipv6Address field's value. +func (s *NetworkInterfaceIpv6Address) SetIpv6Address(v string) *NetworkInterfaceIpv6Address { + s.Ipv6Address = &v return s } -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *InstanceNetworkInterfaceSpecification) SetDeleteOnTermination(v bool) *InstanceNetworkInterfaceSpecification { - s.DeleteOnTermination = &v - return s -} +// Describes a permission for a network interface. +type NetworkInterfacePermission struct { + _ struct{} `type:"structure"` -// SetDescription sets the Description field's value. -func (s *InstanceNetworkInterfaceSpecification) SetDescription(v string) *InstanceNetworkInterfaceSpecification { - s.Description = &v - return s + // The AWS account ID. + AwsAccountId *string `locationName:"awsAccountId" type:"string"` + + // The AWS service. + AwsService *string `locationName:"awsService" type:"string"` + + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + + // The ID of the network interface permission. + NetworkInterfacePermissionId *string `locationName:"networkInterfacePermissionId" type:"string"` + + // The type of permission. + Permission *string `locationName:"permission" type:"string" enum:"InterfacePermissionType"` + + // Information about the state of the permission. + PermissionState *NetworkInterfacePermissionState `locationName:"permissionState" type:"structure"` } -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *InstanceNetworkInterfaceSpecification) SetDeviceIndex(v int64) *InstanceNetworkInterfaceSpecification { - s.DeviceIndex = &v - return s +// String returns the string representation +func (s NetworkInterfacePermission) String() string { + return awsutil.Prettify(s) } -// SetGroups sets the Groups field's value. -func (s *InstanceNetworkInterfaceSpecification) SetGroups(v []*string) *InstanceNetworkInterfaceSpecification { - s.Groups = v - return s +// GoString returns the string representation +func (s NetworkInterfacePermission) GoString() string { + return s.String() } -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *InstanceNetworkInterfaceSpecification) SetIpv6AddressCount(v int64) *InstanceNetworkInterfaceSpecification { - s.Ipv6AddressCount = &v +// SetAwsAccountId sets the AwsAccountId field's value. +func (s *NetworkInterfacePermission) SetAwsAccountId(v string) *NetworkInterfacePermission { + s.AwsAccountId = &v return s } -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *InstanceNetworkInterfaceSpecification) SetIpv6Addresses(v []*InstanceIpv6Address) *InstanceNetworkInterfaceSpecification { - s.Ipv6Addresses = v +// SetAwsService sets the AwsService field's value. +func (s *NetworkInterfacePermission) SetAwsService(v string) *NetworkInterfacePermission { + s.AwsService = &v return s } // SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *InstanceNetworkInterfaceSpecification) SetNetworkInterfaceId(v string) *InstanceNetworkInterfaceSpecification { +func (s *NetworkInterfacePermission) SetNetworkInterfaceId(v string) *NetworkInterfacePermission { s.NetworkInterfaceId = &v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *InstanceNetworkInterfaceSpecification) SetPrivateIpAddress(v string) *InstanceNetworkInterfaceSpecification { - s.PrivateIpAddress = &v +// SetNetworkInterfacePermissionId sets the NetworkInterfacePermissionId field's value. +func (s *NetworkInterfacePermission) SetNetworkInterfacePermissionId(v string) *NetworkInterfacePermission { + s.NetworkInterfacePermissionId = &v return s } -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *InstanceNetworkInterfaceSpecification) SetPrivateIpAddresses(v []*PrivateIpAddressSpecification) *InstanceNetworkInterfaceSpecification { - s.PrivateIpAddresses = v +// SetPermission sets the Permission field's value. +func (s *NetworkInterfacePermission) SetPermission(v string) *NetworkInterfacePermission { + s.Permission = &v return s } -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *InstanceNetworkInterfaceSpecification) SetSecondaryPrivateIpAddressCount(v int64) *InstanceNetworkInterfaceSpecification { - s.SecondaryPrivateIpAddressCount = &v +// SetPermissionState sets the PermissionState field's value. +func (s *NetworkInterfacePermission) SetPermissionState(v *NetworkInterfacePermissionState) *NetworkInterfacePermission { + s.PermissionState = v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *InstanceNetworkInterfaceSpecification) SetSubnetId(v string) *InstanceNetworkInterfaceSpecification { - s.SubnetId = &v +// Describes the state of a network interface permission. +type NetworkInterfacePermissionState struct { + _ struct{} `type:"structure"` + + // The state of the permission. + State *string `locationName:"state" type:"string" enum:"NetworkInterfacePermissionStateCode"` + + // A status message, if applicable. + StatusMessage *string `locationName:"statusMessage" type:"string"` +} + +// String returns the string representation +func (s NetworkInterfacePermissionState) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s NetworkInterfacePermissionState) GoString() string { + return s.String() +} + +// SetState sets the State field's value. +func (s *NetworkInterfacePermissionState) SetState(v string) *NetworkInterfacePermissionState { + s.State = &v return s } -// Describes a private IPv4 address. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstancePrivateIpAddress -type InstancePrivateIpAddress struct { +// SetStatusMessage sets the StatusMessage field's value. +func (s *NetworkInterfacePermissionState) SetStatusMessage(v string) *NetworkInterfacePermissionState { + s.StatusMessage = &v + return s +} + +// Describes the private IPv4 address of a network interface. +type NetworkInterfacePrivateIpAddress struct { _ struct{} `type:"structure"` - // The association information for an Elastic IP address for the network interface. - Association *InstanceNetworkInterfaceAssociation `locationName:"association" type:"structure"` + // The association information for an Elastic IP address (IPv4) associated with + // the network interface. + Association *NetworkInterfaceAssociation `locationName:"association" type:"structure"` - // Indicates whether this IPv4 address is the primary private IP address of + // Indicates whether this IPv4 address is the primary private IPv4 address of // the network interface. Primary *bool `locationName:"primary" type:"boolean"` - // The private IPv4 DNS name. + // The private DNS name. PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - // The private IPv4 address of the network interface. + // The private IPv4 address. PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` } // String returns the string representation -func (s InstancePrivateIpAddress) String() string { +func (s NetworkInterfacePrivateIpAddress) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstancePrivateIpAddress) GoString() string { +func (s NetworkInterfacePrivateIpAddress) GoString() string { return s.String() } // SetAssociation sets the Association field's value. -func (s *InstancePrivateIpAddress) SetAssociation(v *InstanceNetworkInterfaceAssociation) *InstancePrivateIpAddress { +func (s *NetworkInterfacePrivateIpAddress) SetAssociation(v *NetworkInterfaceAssociation) *NetworkInterfacePrivateIpAddress { s.Association = v return s } // SetPrimary sets the Primary field's value. -func (s *InstancePrivateIpAddress) SetPrimary(v bool) *InstancePrivateIpAddress { +func (s *NetworkInterfacePrivateIpAddress) SetPrimary(v bool) *NetworkInterfacePrivateIpAddress { s.Primary = &v return s } // SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *InstancePrivateIpAddress) SetPrivateDnsName(v string) *InstancePrivateIpAddress { +func (s *NetworkInterfacePrivateIpAddress) SetPrivateDnsName(v string) *NetworkInterfacePrivateIpAddress { s.PrivateDnsName = &v return s } // SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *InstancePrivateIpAddress) SetPrivateIpAddress(v string) *InstancePrivateIpAddress { +func (s *NetworkInterfacePrivateIpAddress) SetPrivateIpAddress(v string) *NetworkInterfacePrivateIpAddress { s.PrivateIpAddress = &v return s } -// Describes the current state of an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceState -type InstanceState struct { +type NewDhcpConfiguration struct { _ struct{} `type:"structure"` - // The low byte represents the state. The high byte is an opaque internal value - // and should be ignored. - // - // * 0 : pending - // - // * 16 : running - // - // * 32 : shutting-down - // - // * 48 : terminated - // - // * 64 : stopping - // - // * 80 : stopped - Code *int64 `locationName:"code" type:"integer"` + Key *string `locationName:"key" type:"string"` - // The current state of the instance. - Name *string `locationName:"name" type:"string" enum:"InstanceStateName"` + Values []*string `locationName:"Value" locationNameList:"item" type:"list"` } // String returns the string representation -func (s InstanceState) String() string { +func (s NewDhcpConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceState) GoString() string { +func (s NewDhcpConfiguration) GoString() string { return s.String() } -// SetCode sets the Code field's value. -func (s *InstanceState) SetCode(v int64) *InstanceState { - s.Code = &v +// SetKey sets the Key field's value. +func (s *NewDhcpConfiguration) SetKey(v string) *NewDhcpConfiguration { + s.Key = &v return s } -// SetName sets the Name field's value. -func (s *InstanceState) SetName(v string) *InstanceState { - s.Name = &v +// SetValues sets the Values field's value. +func (s *NewDhcpConfiguration) SetValues(v []*string) *NewDhcpConfiguration { + s.Values = v return s } -// Describes an instance state change. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStateChange -type InstanceStateChange struct { +// Describes the configuration of On-Demand Instances in an EC2 Fleet. +type OnDemandOptions struct { _ struct{} `type:"structure"` - // The current state of the instance. - CurrentState *InstanceState `locationName:"currentState" type:"structure"` + // The order of the launch template overrides to use in fulfilling On-Demand + // capacity. If you specify lowest-price, EC2 Fleet uses price to determine + // the order, launching the lowest price first. If you specify prioritized, + // EC2 Fleet uses the priority that you assigned to each launch template override, + // launching the highest priority first. If you do not specify a value, EC2 + // Fleet defaults to lowest-price. + AllocationStrategy *string `locationName:"allocationStrategy" type:"string" enum:"FleetOnDemandAllocationStrategy"` - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` + // The maximum amount per hour for On-Demand Instances that you're willing to + // pay. + MaxTotalPrice *string `locationName:"maxTotalPrice" type:"string"` - // The previous state of the instance. - PreviousState *InstanceState `locationName:"previousState" type:"structure"` + // The minimum target capacity for On-Demand Instances in the fleet. If the + // minimum target capacity is not reached, the fleet launches no instances. + MinTargetCapacity *int64 `locationName:"minTargetCapacity" type:"integer"` + + // Indicates that the fleet launches all On-Demand Instances into a single Availability + // Zone. + SingleAvailabilityZone *bool `locationName:"singleAvailabilityZone" type:"boolean"` + + // Indicates that the fleet uses a single instance type to launch all On-Demand + // Instances in the fleet. + SingleInstanceType *bool `locationName:"singleInstanceType" type:"boolean"` } // String returns the string representation -func (s InstanceStateChange) String() string { +func (s OnDemandOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceStateChange) GoString() string { +func (s OnDemandOptions) GoString() string { return s.String() } -// SetCurrentState sets the CurrentState field's value. -func (s *InstanceStateChange) SetCurrentState(v *InstanceState) *InstanceStateChange { - s.CurrentState = v +// SetAllocationStrategy sets the AllocationStrategy field's value. +func (s *OnDemandOptions) SetAllocationStrategy(v string) *OnDemandOptions { + s.AllocationStrategy = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceStateChange) SetInstanceId(v string) *InstanceStateChange { - s.InstanceId = &v +// SetMaxTotalPrice sets the MaxTotalPrice field's value. +func (s *OnDemandOptions) SetMaxTotalPrice(v string) *OnDemandOptions { + s.MaxTotalPrice = &v return s } -// SetPreviousState sets the PreviousState field's value. -func (s *InstanceStateChange) SetPreviousState(v *InstanceState) *InstanceStateChange { - s.PreviousState = v +// SetMinTargetCapacity sets the MinTargetCapacity field's value. +func (s *OnDemandOptions) SetMinTargetCapacity(v int64) *OnDemandOptions { + s.MinTargetCapacity = &v return s } -// Describes the status of an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStatus -type InstanceStatus struct { - _ struct{} `type:"structure"` +// SetSingleAvailabilityZone sets the SingleAvailabilityZone field's value. +func (s *OnDemandOptions) SetSingleAvailabilityZone(v bool) *OnDemandOptions { + s.SingleAvailabilityZone = &v + return s +} - // The Availability Zone of the instance. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` +// SetSingleInstanceType sets the SingleInstanceType field's value. +func (s *OnDemandOptions) SetSingleInstanceType(v bool) *OnDemandOptions { + s.SingleInstanceType = &v + return s +} - // Any scheduled events associated with the instance. - Events []*InstanceStatusEvent `locationName:"eventsSet" locationNameList:"item" type:"list"` +// Describes the configuration of On-Demand Instances in an EC2 Fleet. +type OnDemandOptionsRequest struct { + _ struct{} `type:"structure"` - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` + // The order of the launch template overrides to use in fulfilling On-Demand + // capacity. If you specify lowest-price, EC2 Fleet uses price to determine + // the order, launching the lowest price first. If you specify prioritized, + // EC2 Fleet uses the priority that you assigned to each launch template override, + // launching the highest priority first. If you do not specify a value, EC2 + // Fleet defaults to lowest-price. + AllocationStrategy *string `type:"string" enum:"FleetOnDemandAllocationStrategy"` - // The intended state of the instance. DescribeInstanceStatus requires that - // an instance be in the running state. - InstanceState *InstanceState `locationName:"instanceState" type:"structure"` + // The maximum amount per hour for On-Demand Instances that you're willing to + // pay. + MaxTotalPrice *string `type:"string"` - // Reports impaired functionality that stems from issues internal to the instance, - // such as impaired reachability. - InstanceStatus *InstanceStatusSummary `locationName:"instanceStatus" type:"structure"` + // The minimum target capacity for On-Demand Instances in the fleet. If the + // minimum target capacity is not reached, the fleet launches no instances. + MinTargetCapacity *int64 `type:"integer"` - // Reports impaired functionality that stems from issues related to the systems - // that support an instance, such as hardware failures and network connectivity - // problems. - SystemStatus *InstanceStatusSummary `locationName:"systemStatus" type:"structure"` + // Indicates that the fleet launches all On-Demand Instances into a single Availability + // Zone. + SingleAvailabilityZone *bool `type:"boolean"` + + // Indicates that the fleet uses a single instance type to launch all On-Demand + // Instances in the fleet. + SingleInstanceType *bool `type:"boolean"` } // String returns the string representation -func (s InstanceStatus) String() string { +func (s OnDemandOptionsRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceStatus) GoString() string { +func (s OnDemandOptionsRequest) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *InstanceStatus) SetAvailabilityZone(v string) *InstanceStatus { - s.AvailabilityZone = &v +// SetAllocationStrategy sets the AllocationStrategy field's value. +func (s *OnDemandOptionsRequest) SetAllocationStrategy(v string) *OnDemandOptionsRequest { + s.AllocationStrategy = &v return s } -// SetEvents sets the Events field's value. -func (s *InstanceStatus) SetEvents(v []*InstanceStatusEvent) *InstanceStatus { - s.Events = v +// SetMaxTotalPrice sets the MaxTotalPrice field's value. +func (s *OnDemandOptionsRequest) SetMaxTotalPrice(v string) *OnDemandOptionsRequest { + s.MaxTotalPrice = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *InstanceStatus) SetInstanceId(v string) *InstanceStatus { - s.InstanceId = &v +// SetMinTargetCapacity sets the MinTargetCapacity field's value. +func (s *OnDemandOptionsRequest) SetMinTargetCapacity(v int64) *OnDemandOptionsRequest { + s.MinTargetCapacity = &v return s } -// SetInstanceState sets the InstanceState field's value. -func (s *InstanceStatus) SetInstanceState(v *InstanceState) *InstanceStatus { - s.InstanceState = v +// SetSingleAvailabilityZone sets the SingleAvailabilityZone field's value. +func (s *OnDemandOptionsRequest) SetSingleAvailabilityZone(v bool) *OnDemandOptionsRequest { + s.SingleAvailabilityZone = &v return s } -// SetInstanceStatus sets the InstanceStatus field's value. -func (s *InstanceStatus) SetInstanceStatus(v *InstanceStatusSummary) *InstanceStatus { - s.InstanceStatus = v +// SetSingleInstanceType sets the SingleInstanceType field's value. +func (s *OnDemandOptionsRequest) SetSingleInstanceType(v bool) *OnDemandOptionsRequest { + s.SingleInstanceType = &v return s } -// SetSystemStatus sets the SystemStatus field's value. -func (s *InstanceStatus) SetSystemStatus(v *InstanceStatusSummary) *InstanceStatus { - s.SystemStatus = v +// Describes the data that identifies an Amazon FPGA image (AFI) on the PCI +// bus. +type PciId struct { + _ struct{} `type:"structure"` + + // The ID of the device. + DeviceId *string `type:"string"` + + // The ID of the subsystem. + SubsystemId *string `type:"string"` + + // The ID of the vendor for the subsystem. + SubsystemVendorId *string `type:"string"` + + // The ID of the vendor. + VendorId *string `type:"string"` +} + +// String returns the string representation +func (s PciId) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s PciId) GoString() string { + return s.String() +} + +// SetDeviceId sets the DeviceId field's value. +func (s *PciId) SetDeviceId(v string) *PciId { + s.DeviceId = &v return s } -// Describes the instance status. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStatusDetails -type InstanceStatusDetails struct { +// SetSubsystemId sets the SubsystemId field's value. +func (s *PciId) SetSubsystemId(v string) *PciId { + s.SubsystemId = &v + return s +} + +// SetSubsystemVendorId sets the SubsystemVendorId field's value. +func (s *PciId) SetSubsystemVendorId(v string) *PciId { + s.SubsystemVendorId = &v + return s +} + +// SetVendorId sets the VendorId field's value. +func (s *PciId) SetVendorId(v string) *PciId { + s.VendorId = &v + return s +} + +// Describes the VPC peering connection options. +type PeeringConnectionOptions struct { _ struct{} `type:"structure"` - // The time when a status check failed. For an instance that was launched and - // impaired, this is the time when the instance was launched. - ImpairedSince *time.Time `locationName:"impairedSince" type:"timestamp" timestampFormat:"iso8601"` + // If true, the public DNS hostnames of instances in the specified VPC resolve + // to private IP addresses when queried from instances in the peer VPC. + AllowDnsResolutionFromRemoteVpc *bool `locationName:"allowDnsResolutionFromRemoteVpc" type:"boolean"` - // The type of instance status. - Name *string `locationName:"name" type:"string" enum:"StatusName"` + // If true, enables outbound communication from an EC2-Classic instance that's + // linked to a local VPC using ClassicLink to instances in a peer VPC. + AllowEgressFromLocalClassicLinkToRemoteVpc *bool `locationName:"allowEgressFromLocalClassicLinkToRemoteVpc" type:"boolean"` - // The status. - Status *string `locationName:"status" type:"string" enum:"StatusType"` + // If true, enables outbound communication from instances in a local VPC to + // an EC2-Classic instance that's linked to a peer VPC using ClassicLink. + AllowEgressFromLocalVpcToRemoteClassicLink *bool `locationName:"allowEgressFromLocalVpcToRemoteClassicLink" type:"boolean"` } // String returns the string representation -func (s InstanceStatusDetails) String() string { +func (s PeeringConnectionOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceStatusDetails) GoString() string { +func (s PeeringConnectionOptions) GoString() string { return s.String() } -// SetImpairedSince sets the ImpairedSince field's value. -func (s *InstanceStatusDetails) SetImpairedSince(v time.Time) *InstanceStatusDetails { - s.ImpairedSince = &v +// SetAllowDnsResolutionFromRemoteVpc sets the AllowDnsResolutionFromRemoteVpc field's value. +func (s *PeeringConnectionOptions) SetAllowDnsResolutionFromRemoteVpc(v bool) *PeeringConnectionOptions { + s.AllowDnsResolutionFromRemoteVpc = &v return s } -// SetName sets the Name field's value. -func (s *InstanceStatusDetails) SetName(v string) *InstanceStatusDetails { - s.Name = &v +// SetAllowEgressFromLocalClassicLinkToRemoteVpc sets the AllowEgressFromLocalClassicLinkToRemoteVpc field's value. +func (s *PeeringConnectionOptions) SetAllowEgressFromLocalClassicLinkToRemoteVpc(v bool) *PeeringConnectionOptions { + s.AllowEgressFromLocalClassicLinkToRemoteVpc = &v return s } -// SetStatus sets the Status field's value. -func (s *InstanceStatusDetails) SetStatus(v string) *InstanceStatusDetails { - s.Status = &v +// SetAllowEgressFromLocalVpcToRemoteClassicLink sets the AllowEgressFromLocalVpcToRemoteClassicLink field's value. +func (s *PeeringConnectionOptions) SetAllowEgressFromLocalVpcToRemoteClassicLink(v bool) *PeeringConnectionOptions { + s.AllowEgressFromLocalVpcToRemoteClassicLink = &v return s } -// Describes a scheduled event for an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStatusEvent -type InstanceStatusEvent struct { +// The VPC peering connection options. +type PeeringConnectionOptionsRequest struct { _ struct{} `type:"structure"` - // The event code. - Code *string `locationName:"code" type:"string" enum:"EventCode"` - - // A description of the event. - // - // After a scheduled event is completed, it can still be described for up to - // a week. If the event has been completed, this description starts with the - // following text: [Completed]. - Description *string `locationName:"description" type:"string"` + // If true, enables a local VPC to resolve public DNS hostnames to private IP + // addresses when queried from instances in the peer VPC. + AllowDnsResolutionFromRemoteVpc *bool `type:"boolean"` - // The latest scheduled end time for the event. - NotAfter *time.Time `locationName:"notAfter" type:"timestamp" timestampFormat:"iso8601"` + // If true, enables outbound communication from an EC2-Classic instance that's + // linked to a local VPC using ClassicLink to instances in a peer VPC. + AllowEgressFromLocalClassicLinkToRemoteVpc *bool `type:"boolean"` - // The earliest scheduled start time for the event. - NotBefore *time.Time `locationName:"notBefore" type:"timestamp" timestampFormat:"iso8601"` + // If true, enables outbound communication from instances in a local VPC to + // an EC2-Classic instance that's linked to a peer VPC using ClassicLink. + AllowEgressFromLocalVpcToRemoteClassicLink *bool `type:"boolean"` } // String returns the string representation -func (s InstanceStatusEvent) String() string { +func (s PeeringConnectionOptionsRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceStatusEvent) GoString() string { +func (s PeeringConnectionOptionsRequest) GoString() string { return s.String() } -// SetCode sets the Code field's value. -func (s *InstanceStatusEvent) SetCode(v string) *InstanceStatusEvent { - s.Code = &v +// SetAllowDnsResolutionFromRemoteVpc sets the AllowDnsResolutionFromRemoteVpc field's value. +func (s *PeeringConnectionOptionsRequest) SetAllowDnsResolutionFromRemoteVpc(v bool) *PeeringConnectionOptionsRequest { + s.AllowDnsResolutionFromRemoteVpc = &v return s } -// SetDescription sets the Description field's value. -func (s *InstanceStatusEvent) SetDescription(v string) *InstanceStatusEvent { - s.Description = &v +// SetAllowEgressFromLocalClassicLinkToRemoteVpc sets the AllowEgressFromLocalClassicLinkToRemoteVpc field's value. +func (s *PeeringConnectionOptionsRequest) SetAllowEgressFromLocalClassicLinkToRemoteVpc(v bool) *PeeringConnectionOptionsRequest { + s.AllowEgressFromLocalClassicLinkToRemoteVpc = &v return s } -// SetNotAfter sets the NotAfter field's value. -func (s *InstanceStatusEvent) SetNotAfter(v time.Time) *InstanceStatusEvent { - s.NotAfter = &v +// SetAllowEgressFromLocalVpcToRemoteClassicLink sets the AllowEgressFromLocalVpcToRemoteClassicLink field's value. +func (s *PeeringConnectionOptionsRequest) SetAllowEgressFromLocalVpcToRemoteClassicLink(v bool) *PeeringConnectionOptionsRequest { + s.AllowEgressFromLocalVpcToRemoteClassicLink = &v return s } -// SetNotBefore sets the NotBefore field's value. -func (s *InstanceStatusEvent) SetNotBefore(v time.Time) *InstanceStatusEvent { - s.NotBefore = &v +// The Diffie-Hellmann group number for phase 1 IKE negotiations. +type Phase1DHGroupNumbersListValue struct { + _ struct{} `type:"structure"` + + // The Diffie-Hellmann group number. + Value *int64 `locationName:"value" type:"integer"` +} + +// String returns the string representation +func (s Phase1DHGroupNumbersListValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Phase1DHGroupNumbersListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase1DHGroupNumbersListValue) SetValue(v int64) *Phase1DHGroupNumbersListValue { + s.Value = &v return s } -// Describes the status of an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStatusSummary -type InstanceStatusSummary struct { +// Specifies a Diffie-Hellman group number for the VPN tunnel for phase 1 IKE +// negotiations. +type Phase1DHGroupNumbersRequestListValue struct { _ struct{} `type:"structure"` - // The system instance health or application instance health. - Details []*InstanceStatusDetails `locationName:"details" locationNameList:"item" type:"list"` + // The Diffie-Hellmann group number. + Value *int64 `type:"integer"` +} - // The status. - Status *string `locationName:"status" type:"string" enum:"SummaryStatus"` +// String returns the string representation +func (s Phase1DHGroupNumbersRequestListValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Phase1DHGroupNumbersRequestListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase1DHGroupNumbersRequestListValue) SetValue(v int64) *Phase1DHGroupNumbersRequestListValue { + s.Value = &v + return s +} + +// The encryption algorithm for phase 1 IKE negotiations. +type Phase1EncryptionAlgorithmsListValue struct { + _ struct{} `type:"structure"` + + // The value for the encryption algorithm. + Value *string `locationName:"value" type:"string"` } // String returns the string representation -func (s InstanceStatusSummary) String() string { +func (s Phase1EncryptionAlgorithmsListValue) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InstanceStatusSummary) GoString() string { +func (s Phase1EncryptionAlgorithmsListValue) GoString() string { return s.String() } -// SetDetails sets the Details field's value. -func (s *InstanceStatusSummary) SetDetails(v []*InstanceStatusDetails) *InstanceStatusSummary { - s.Details = v +// SetValue sets the Value field's value. +func (s *Phase1EncryptionAlgorithmsListValue) SetValue(v string) *Phase1EncryptionAlgorithmsListValue { + s.Value = &v return s } -// SetStatus sets the Status field's value. -func (s *InstanceStatusSummary) SetStatus(v string) *InstanceStatusSummary { - s.Status = &v +// Specifies the encryption algorithm for the VPN tunnel for phase 1 IKE negotiations. +type Phase1EncryptionAlgorithmsRequestListValue struct { + _ struct{} `type:"structure"` + + // The value for the encryption algorithm. + Value *string `type:"string"` +} + +// String returns the string representation +func (s Phase1EncryptionAlgorithmsRequestListValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Phase1EncryptionAlgorithmsRequestListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase1EncryptionAlgorithmsRequestListValue) SetValue(v string) *Phase1EncryptionAlgorithmsRequestListValue { + s.Value = &v return s } -// Describes an Internet gateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InternetGateway -type InternetGateway struct { +// The integrity algorithm for phase 1 IKE negotiations. +type Phase1IntegrityAlgorithmsListValue struct { _ struct{} `type:"structure"` - // Any VPCs attached to the Internet gateway. - Attachments []*InternetGatewayAttachment `locationName:"attachmentSet" locationNameList:"item" type:"list"` + // The value for the integrity algorithm. + Value *string `locationName:"value" type:"string"` +} - // The ID of the Internet gateway. - InternetGatewayId *string `locationName:"internetGatewayId" type:"string"` +// String returns the string representation +func (s Phase1IntegrityAlgorithmsListValue) String() string { + return awsutil.Prettify(s) +} - // Any tags assigned to the Internet gateway. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` +// GoString returns the string representation +func (s Phase1IntegrityAlgorithmsListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase1IntegrityAlgorithmsListValue) SetValue(v string) *Phase1IntegrityAlgorithmsListValue { + s.Value = &v + return s +} + +// Specifies the integrity algorithm for the VPN tunnel for phase 1 IKE negotiations. +type Phase1IntegrityAlgorithmsRequestListValue struct { + _ struct{} `type:"structure"` + + // The value for the integrity algorithm. + Value *string `type:"string"` } // String returns the string representation -func (s InternetGateway) String() string { +func (s Phase1IntegrityAlgorithmsRequestListValue) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InternetGateway) GoString() string { +func (s Phase1IntegrityAlgorithmsRequestListValue) GoString() string { return s.String() } -// SetAttachments sets the Attachments field's value. -func (s *InternetGateway) SetAttachments(v []*InternetGatewayAttachment) *InternetGateway { - s.Attachments = v +// SetValue sets the Value field's value. +func (s *Phase1IntegrityAlgorithmsRequestListValue) SetValue(v string) *Phase1IntegrityAlgorithmsRequestListValue { + s.Value = &v return s } -// SetInternetGatewayId sets the InternetGatewayId field's value. -func (s *InternetGateway) SetInternetGatewayId(v string) *InternetGateway { - s.InternetGatewayId = &v +// The Diffie-Hellmann group number for phase 2 IKE negotiations. +type Phase2DHGroupNumbersListValue struct { + _ struct{} `type:"structure"` + + // The Diffie-Hellmann group number. + Value *int64 `locationName:"value" type:"integer"` +} + +// String returns the string representation +func (s Phase2DHGroupNumbersListValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Phase2DHGroupNumbersListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase2DHGroupNumbersListValue) SetValue(v int64) *Phase2DHGroupNumbersListValue { + s.Value = &v return s } -// SetTags sets the Tags field's value. -func (s *InternetGateway) SetTags(v []*Tag) *InternetGateway { - s.Tags = v +// Specifies a Diffie-Hellman group number for the VPN tunnel for phase 2 IKE +// negotiations. +type Phase2DHGroupNumbersRequestListValue struct { + _ struct{} `type:"structure"` + + // The Diffie-Hellmann group number. + Value *int64 `type:"integer"` +} + +// String returns the string representation +func (s Phase2DHGroupNumbersRequestListValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Phase2DHGroupNumbersRequestListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase2DHGroupNumbersRequestListValue) SetValue(v int64) *Phase2DHGroupNumbersRequestListValue { + s.Value = &v return s } -// Describes the attachment of a VPC to an Internet gateway or an egress-only -// Internet gateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InternetGatewayAttachment -type InternetGatewayAttachment struct { +// The encryption algorithm for phase 2 IKE negotiations. +type Phase2EncryptionAlgorithmsListValue struct { _ struct{} `type:"structure"` - // The current state of the attachment. - State *string `locationName:"state" type:"string" enum:"AttachmentStatus"` + // The encryption algorithm. + Value *string `locationName:"value" type:"string"` +} - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` +// String returns the string representation +func (s Phase2EncryptionAlgorithmsListValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Phase2EncryptionAlgorithmsListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase2EncryptionAlgorithmsListValue) SetValue(v string) *Phase2EncryptionAlgorithmsListValue { + s.Value = &v + return s +} + +// Specifies the encryption algorithm for the VPN tunnel for phase 2 IKE negotiations. +type Phase2EncryptionAlgorithmsRequestListValue struct { + _ struct{} `type:"structure"` + + // The encryption algorithm. + Value *string `type:"string"` } // String returns the string representation -func (s InternetGatewayAttachment) String() string { +func (s Phase2EncryptionAlgorithmsRequestListValue) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s InternetGatewayAttachment) GoString() string { +func (s Phase2EncryptionAlgorithmsRequestListValue) GoString() string { return s.String() } -// SetState sets the State field's value. -func (s *InternetGatewayAttachment) SetState(v string) *InternetGatewayAttachment { - s.State = &v +// SetValue sets the Value field's value. +func (s *Phase2EncryptionAlgorithmsRequestListValue) SetValue(v string) *Phase2EncryptionAlgorithmsRequestListValue { + s.Value = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *InternetGatewayAttachment) SetVpcId(v string) *InternetGatewayAttachment { - s.VpcId = &v +// The integrity algorithm for phase 2 IKE negotiations. +type Phase2IntegrityAlgorithmsListValue struct { + _ struct{} `type:"structure"` + + // The integrity algorithm. + Value *string `locationName:"value" type:"string"` +} + +// String returns the string representation +func (s Phase2IntegrityAlgorithmsListValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Phase2IntegrityAlgorithmsListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase2IntegrityAlgorithmsListValue) SetValue(v string) *Phase2IntegrityAlgorithmsListValue { + s.Value = &v return s } -// Describes a security group rule. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpPermission -type IpPermission struct { +// Specifies the integrity algorithm for the VPN tunnel for phase 2 IKE negotiations. +type Phase2IntegrityAlgorithmsRequestListValue struct { _ struct{} `type:"structure"` - // The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 - // type number. A value of -1 indicates all ICMP/ICMPv6 types. - FromPort *int64 `locationName:"fromPort" type:"integer"` + // The integrity algorithm. + Value *string `type:"string"` +} - // The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). +// String returns the string representation +func (s Phase2IntegrityAlgorithmsRequestListValue) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Phase2IntegrityAlgorithmsRequestListValue) GoString() string { + return s.String() +} + +// SetValue sets the Value field's value. +func (s *Phase2IntegrityAlgorithmsRequestListValue) SetValue(v string) *Phase2IntegrityAlgorithmsRequestListValue { + s.Value = &v + return s +} + +// Describes the placement of an instance. +type Placement struct { + _ struct{} `type:"structure"` + + // The affinity setting for the instance on the Dedicated Host. This parameter + // is not supported for the ImportInstance command. + Affinity *string `locationName:"affinity" type:"string"` + + // The Availability Zone of the instance. // - // [EC2-VPC only] Use -1 to specify all protocols. When authorizing security - // group rules, specifying -1 or a protocol number other than tcp, udp, icmp, - // or 58 (ICMPv6) allows traffic on all ports, regardless of any port range - // you specify. For tcp, udp, and icmp, you must specify a port range. For 58 - // (ICMPv6), you can optionally specify a port range; if you don't, traffic - // for all types and codes is allowed when authorizing rules. - IpProtocol *string `locationName:"ipProtocol" type:"string"` + // If not specified, an Availability Zone will be automatically chosen for you + // based on the load balancing criteria for the Region. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // One or more IPv4 ranges. - IpRanges []*IpRange `locationName:"ipRanges" locationNameList:"item" type:"list"` + // The name of the placement group the instance is in. + GroupName *string `locationName:"groupName" type:"string"` - // [EC2-VPC only] One or more IPv6 ranges. - Ipv6Ranges []*Ipv6Range `locationName:"ipv6Ranges" locationNameList:"item" type:"list"` + // The ID of the Dedicated Host on which the instance resides. This parameter + // is not supported for the ImportInstance command. + HostId *string `locationName:"hostId" type:"string"` - // (Valid for AuthorizeSecurityGroupEgress, RevokeSecurityGroupEgress and DescribeSecurityGroups - // only) One or more prefix list IDs for an AWS service. In an AuthorizeSecurityGroupEgress - // request, this is the AWS service that you want to access through a VPC endpoint - // from instances associated with the security group. - PrefixListIds []*PrefixListId `locationName:"prefixListIds" locationNameList:"item" type:"list"` + // The number of the partition the instance is in. Valid only if the placement + // group strategy is set to partition. + PartitionNumber *int64 `locationName:"partitionNumber" type:"integer"` - // The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code. - // A value of -1 indicates all ICMP/ICMPv6 codes for the specified ICMP type. - ToPort *int64 `locationName:"toPort" type:"integer"` + // Reserved for future use. + SpreadDomain *string `locationName:"spreadDomain" type:"string"` - // One or more security group and AWS account ID pairs. - UserIdGroupPairs []*UserIdGroupPair `locationName:"groups" locationNameList:"item" type:"list"` + // The tenancy of the instance (if the instance is running in a VPC). An instance + // with a tenancy of dedicated runs on single-tenant hardware. The host tenancy + // is not supported for the ImportInstance command. + Tenancy *string `locationName:"tenancy" type:"string" enum:"Tenancy"` } // String returns the string representation -func (s IpPermission) String() string { +func (s Placement) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s IpPermission) GoString() string { +func (s Placement) GoString() string { return s.String() } -// SetFromPort sets the FromPort field's value. -func (s *IpPermission) SetFromPort(v int64) *IpPermission { - s.FromPort = &v +// SetAffinity sets the Affinity field's value. +func (s *Placement) SetAffinity(v string) *Placement { + s.Affinity = &v return s } -// SetIpProtocol sets the IpProtocol field's value. -func (s *IpPermission) SetIpProtocol(v string) *IpPermission { - s.IpProtocol = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *Placement) SetAvailabilityZone(v string) *Placement { + s.AvailabilityZone = &v return s } -// SetIpRanges sets the IpRanges field's value. -func (s *IpPermission) SetIpRanges(v []*IpRange) *IpPermission { - s.IpRanges = v +// SetGroupName sets the GroupName field's value. +func (s *Placement) SetGroupName(v string) *Placement { + s.GroupName = &v return s } -// SetIpv6Ranges sets the Ipv6Ranges field's value. -func (s *IpPermission) SetIpv6Ranges(v []*Ipv6Range) *IpPermission { - s.Ipv6Ranges = v +// SetHostId sets the HostId field's value. +func (s *Placement) SetHostId(v string) *Placement { + s.HostId = &v return s } -// SetPrefixListIds sets the PrefixListIds field's value. -func (s *IpPermission) SetPrefixListIds(v []*PrefixListId) *IpPermission { - s.PrefixListIds = v +// SetPartitionNumber sets the PartitionNumber field's value. +func (s *Placement) SetPartitionNumber(v int64) *Placement { + s.PartitionNumber = &v return s } -// SetToPort sets the ToPort field's value. -func (s *IpPermission) SetToPort(v int64) *IpPermission { - s.ToPort = &v +// SetSpreadDomain sets the SpreadDomain field's value. +func (s *Placement) SetSpreadDomain(v string) *Placement { + s.SpreadDomain = &v return s } -// SetUserIdGroupPairs sets the UserIdGroupPairs field's value. -func (s *IpPermission) SetUserIdGroupPairs(v []*UserIdGroupPair) *IpPermission { - s.UserIdGroupPairs = v +// SetTenancy sets the Tenancy field's value. +func (s *Placement) SetTenancy(v string) *Placement { + s.Tenancy = &v return s } -// Describes an IPv4 range. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpRange -type IpRange struct { +// Describes a placement group. +type PlacementGroup struct { _ struct{} `type:"structure"` - // The IPv4 CIDR range. You can either specify a CIDR range or a source security - // group, not both. To specify a single IPv4 address, use the /32 prefix. - CidrIp *string `locationName:"cidrIp" type:"string"` + // The name of the placement group. + GroupName *string `locationName:"groupName" type:"string"` + + // The number of partitions. Valid only if strategy is set to partition. + PartitionCount *int64 `locationName:"partitionCount" type:"integer"` + + // The state of the placement group. + State *string `locationName:"state" type:"string" enum:"PlacementGroupState"` + + // The placement strategy. + Strategy *string `locationName:"strategy" type:"string" enum:"PlacementStrategy"` } // String returns the string representation -func (s IpRange) String() string { +func (s PlacementGroup) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s IpRange) GoString() string { +func (s PlacementGroup) GoString() string { return s.String() } -// SetCidrIp sets the CidrIp field's value. -func (s *IpRange) SetCidrIp(v string) *IpRange { - s.CidrIp = &v +// SetGroupName sets the GroupName field's value. +func (s *PlacementGroup) SetGroupName(v string) *PlacementGroup { + s.GroupName = &v return s } -// Describes an IPv6 CIDR block. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6CidrBlock -type Ipv6CidrBlock struct { +// SetPartitionCount sets the PartitionCount field's value. +func (s *PlacementGroup) SetPartitionCount(v int64) *PlacementGroup { + s.PartitionCount = &v + return s +} + +// SetState sets the State field's value. +func (s *PlacementGroup) SetState(v string) *PlacementGroup { + s.State = &v + return s +} + +// SetStrategy sets the Strategy field's value. +func (s *PlacementGroup) SetStrategy(v string) *PlacementGroup { + s.Strategy = &v + return s +} + +// Describes the placement group support of the instance type. +type PlacementGroupInfo struct { _ struct{} `type:"structure"` - // The IPv6 CIDR block. - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` + // A list of supported placement groups types. + SupportedStrategies []*string `locationName:"supportedStrategies" locationNameList:"item" type:"list"` } // String returns the string representation -func (s Ipv6CidrBlock) String() string { +func (s PlacementGroupInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Ipv6CidrBlock) GoString() string { +func (s PlacementGroupInfo) GoString() string { return s.String() } -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *Ipv6CidrBlock) SetIpv6CidrBlock(v string) *Ipv6CidrBlock { - s.Ipv6CidrBlock = &v +// SetSupportedStrategies sets the SupportedStrategies field's value. +func (s *PlacementGroupInfo) SetSupportedStrategies(v []*string) *PlacementGroupInfo { + s.SupportedStrategies = v return s } -// [EC2-VPC only] Describes an IPv6 range. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6Range -type Ipv6Range struct { +// Describes the placement of an instance. +type PlacementResponse struct { _ struct{} `type:"structure"` - // The IPv6 CIDR range. You can either specify a CIDR range or a source security - // group, not both. To specify a single IPv6 address, use the /128 prefix. - CidrIpv6 *string `locationName:"cidrIpv6" type:"string"` + // The name of the placement group the instance is in. + GroupName *string `locationName:"groupName" type:"string"` } // String returns the string representation -func (s Ipv6Range) String() string { +func (s PlacementResponse) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Ipv6Range) GoString() string { +func (s PlacementResponse) GoString() string { return s.String() } -// SetCidrIpv6 sets the CidrIpv6 field's value. -func (s *Ipv6Range) SetCidrIpv6(v string) *Ipv6Range { - s.CidrIpv6 = &v +// SetGroupName sets the GroupName field's value. +func (s *PlacementResponse) SetGroupName(v string) *PlacementResponse { + s.GroupName = &v return s } -// Describes a key pair. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/KeyPairInfo -type KeyPairInfo struct { +// Describes a range of ports. +type PortRange struct { _ struct{} `type:"structure"` - // If you used CreateKeyPair to create the key pair, this is the SHA-1 digest - // of the DER encoded private key. If you used ImportKeyPair to provide AWS - // the public key, this is the MD5 public key fingerprint as specified in section - // 4 of RFC4716. - KeyFingerprint *string `locationName:"keyFingerprint" type:"string"` + // The first port in the range. + From *int64 `locationName:"from" type:"integer"` - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` + // The last port in the range. + To *int64 `locationName:"to" type:"integer"` } // String returns the string representation -func (s KeyPairInfo) String() string { +func (s PortRange) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s KeyPairInfo) GoString() string { +func (s PortRange) GoString() string { return s.String() } -// SetKeyFingerprint sets the KeyFingerprint field's value. -func (s *KeyPairInfo) SetKeyFingerprint(v string) *KeyPairInfo { - s.KeyFingerprint = &v +// SetFrom sets the From field's value. +func (s *PortRange) SetFrom(v int64) *PortRange { + s.From = &v return s } -// SetKeyName sets the KeyName field's value. -func (s *KeyPairInfo) SetKeyName(v string) *KeyPairInfo { - s.KeyName = &v +// SetTo sets the To field's value. +func (s *PortRange) SetTo(v int64) *PortRange { + s.To = &v return s } -// Describes a launch permission. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchPermission -type LaunchPermission struct { +// Describes prefixes for AWS services. +type PrefixList struct { _ struct{} `type:"structure"` - // The name of the group. - Group *string `locationName:"group" type:"string" enum:"PermissionGroup"` + // The IP address range of the AWS service. + Cidrs []*string `locationName:"cidrSet" locationNameList:"item" type:"list"` - // The AWS account ID. - UserId *string `locationName:"userId" type:"string"` + // The ID of the prefix. + PrefixListId *string `locationName:"prefixListId" type:"string"` + + // The name of the prefix. + PrefixListName *string `locationName:"prefixListName" type:"string"` } // String returns the string representation -func (s LaunchPermission) String() string { +func (s PrefixList) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s LaunchPermission) GoString() string { +func (s PrefixList) GoString() string { return s.String() } -// SetGroup sets the Group field's value. -func (s *LaunchPermission) SetGroup(v string) *LaunchPermission { - s.Group = &v +// SetCidrs sets the Cidrs field's value. +func (s *PrefixList) SetCidrs(v []*string) *PrefixList { + s.Cidrs = v return s } -// SetUserId sets the UserId field's value. -func (s *LaunchPermission) SetUserId(v string) *LaunchPermission { - s.UserId = &v +// SetPrefixListId sets the PrefixListId field's value. +func (s *PrefixList) SetPrefixListId(v string) *PrefixList { + s.PrefixListId = &v return s } -// Describes a launch permission modification. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchPermissionModifications -type LaunchPermissionModifications struct { +// SetPrefixListName sets the PrefixListName field's value. +func (s *PrefixList) SetPrefixListName(v string) *PrefixList { + s.PrefixListName = &v + return s +} + +// Describes a prefix list ID. +type PrefixListId struct { _ struct{} `type:"structure"` - // The AWS account ID to add to the list of launch permissions for the AMI. - Add []*LaunchPermission `locationNameList:"item" type:"list"` + // A description for the security group rule that references this prefix list + // ID. + // + // Constraints: Up to 255 characters in length. Allowed characters are a-z, + // A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* + Description *string `locationName:"description" type:"string"` - // The AWS account ID to remove from the list of launch permissions for the - // AMI. - Remove []*LaunchPermission `locationNameList:"item" type:"list"` + // The ID of the prefix. + PrefixListId *string `locationName:"prefixListId" type:"string"` } // String returns the string representation -func (s LaunchPermissionModifications) String() string { +func (s PrefixListId) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s LaunchPermissionModifications) GoString() string { +func (s PrefixListId) GoString() string { return s.String() } -// SetAdd sets the Add field's value. -func (s *LaunchPermissionModifications) SetAdd(v []*LaunchPermission) *LaunchPermissionModifications { - s.Add = v +// SetDescription sets the Description field's value. +func (s *PrefixListId) SetDescription(v string) *PrefixListId { + s.Description = &v return s } -// SetRemove sets the Remove field's value. -func (s *LaunchPermissionModifications) SetRemove(v []*LaunchPermission) *LaunchPermissionModifications { - s.Remove = v +// SetPrefixListId sets the PrefixListId field's value. +func (s *PrefixListId) SetPrefixListId(v string) *PrefixListId { + s.PrefixListId = &v return s } -// Describes the launch specification for an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchSpecification -type LaunchSpecification struct { +// Describes the price for a Reserved Instance. +type PriceSchedule struct { _ struct{} `type:"structure"` - // Deprecated. - AddressingType *string `locationName:"addressingType" type:"string"` - - // One or more block device mapping entries. + // The current price schedule, as determined by the term remaining for the Reserved + // Instance in the listing. // - // Although you can specify encrypted EBS volumes in this block device mapping - // for your Spot Instances, these volumes are not encrypted. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` + // A specific price schedule is always in effect, but only one price schedule + // can be active at any time. Take, for example, a Reserved Instance listing + // that has five months remaining in its term. When you specify price schedules + // for five months and two months, this means that schedule 1, covering the + // first three months of the remaining term, will be active during months 5, + // 4, and 3. Then schedule 2, covering the last two months of the term, will + // be active for months 2 and 1. + Active *bool `locationName:"active" type:"boolean"` - // Indicates whether the instance is optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - // - // Default: false - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` + // The currency for transacting the Reserved Instance resale. At this time, + // the only supported currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` + // The fixed price for the term. + Price *float64 `locationName:"price" type:"double"` - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` + // The number of months remaining in the reservation. For example, 2 is the + // second to the last month before the capacity reservation expires. + Term *int64 `locationName:"term" type:"long"` +} - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` +// String returns the string representation +func (s PriceSchedule) String() string { + return awsutil.Prettify(s) +} - // The ID of the kernel. - KernelId *string `locationName:"kernelId" type:"string"` +// GoString returns the string representation +func (s PriceSchedule) GoString() string { + return s.String() +} - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` +// SetActive sets the Active field's value. +func (s *PriceSchedule) SetActive(v bool) *PriceSchedule { + s.Active = &v + return s +} - // Describes the monitoring of an instance. - Monitoring *RunInstancesMonitoringEnabled `locationName:"monitoring" type:"structure"` +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *PriceSchedule) SetCurrencyCode(v string) *PriceSchedule { + s.CurrencyCode = &v + return s +} - // One or more network interfaces. If you specify a network interface, you must - // specify subnet IDs and security group IDs using the network interface. - NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` +// SetPrice sets the Price field's value. +func (s *PriceSchedule) SetPrice(v float64) *PriceSchedule { + s.Price = &v + return s +} - // The placement information for the instance. - Placement *SpotPlacement `locationName:"placement" type:"structure"` +// SetTerm sets the Term field's value. +func (s *PriceSchedule) SetTerm(v int64) *PriceSchedule { + s.Term = &v + return s +} - // The ID of the RAM disk. - RamdiskId *string `locationName:"ramdiskId" type:"string"` +// Describes the price for a Reserved Instance. +type PriceScheduleSpecification struct { + _ struct{} `type:"structure"` - // One or more security groups. When requesting instances in a VPC, you must - // specify the IDs of the security groups. When requesting instances in EC2-Classic, - // you can specify the names or the IDs of the security groups. - SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + // The currency for transacting the Reserved Instance resale. At this time, + // the only supported currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - // The ID of the subnet in which to launch the instance. - SubnetId *string `locationName:"subnetId" type:"string"` + // The fixed price for the term. + Price *float64 `locationName:"price" type:"double"` - // The user data to make available to the instances. If you are using an AWS - // SDK or command line tool, Base64-encoding is performed for you, and you can - // load the text from a file. Otherwise, you must provide Base64-encoded text. - UserData *string `locationName:"userData" type:"string"` + // The number of months remaining in the reservation. For example, 2 is the + // second to the last month before the capacity reservation expires. + Term *int64 `locationName:"term" type:"long"` } // String returns the string representation -func (s LaunchSpecification) String() string { +func (s PriceScheduleSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s LaunchSpecification) GoString() string { +func (s PriceScheduleSpecification) GoString() string { return s.String() } -// SetAddressingType sets the AddressingType field's value. -func (s *LaunchSpecification) SetAddressingType(v string) *LaunchSpecification { - s.AddressingType = &v +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *PriceScheduleSpecification) SetCurrencyCode(v string) *PriceScheduleSpecification { + s.CurrencyCode = &v return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *LaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *LaunchSpecification { - s.BlockDeviceMappings = v +// SetPrice sets the Price field's value. +func (s *PriceScheduleSpecification) SetPrice(v float64) *PriceScheduleSpecification { + s.Price = &v return s } -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *LaunchSpecification) SetEbsOptimized(v bool) *LaunchSpecification { - s.EbsOptimized = &v +// SetTerm sets the Term field's value. +func (s *PriceScheduleSpecification) SetTerm(v int64) *PriceScheduleSpecification { + s.Term = &v return s } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *LaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *LaunchSpecification { - s.IamInstanceProfile = v - return s -} +// Describes a Reserved Instance offering. +type PricingDetail struct { + _ struct{} `type:"structure"` -// SetImageId sets the ImageId field's value. -func (s *LaunchSpecification) SetImageId(v string) *LaunchSpecification { - s.ImageId = &v - return s -} + // The number of reservations available for the price. + Count *int64 `locationName:"count" type:"integer"` -// SetInstanceType sets the InstanceType field's value. -func (s *LaunchSpecification) SetInstanceType(v string) *LaunchSpecification { - s.InstanceType = &v - return s + // The price per instance. + Price *float64 `locationName:"price" type:"double"` } -// SetKernelId sets the KernelId field's value. -func (s *LaunchSpecification) SetKernelId(v string) *LaunchSpecification { - s.KernelId = &v - return s +// String returns the string representation +func (s PricingDetail) String() string { + return awsutil.Prettify(s) } -// SetKeyName sets the KeyName field's value. -func (s *LaunchSpecification) SetKeyName(v string) *LaunchSpecification { - s.KeyName = &v - return s +// GoString returns the string representation +func (s PricingDetail) GoString() string { + return s.String() } -// SetMonitoring sets the Monitoring field's value. -func (s *LaunchSpecification) SetMonitoring(v *RunInstancesMonitoringEnabled) *LaunchSpecification { - s.Monitoring = v +// SetCount sets the Count field's value. +func (s *PricingDetail) SetCount(v int64) *PricingDetail { + s.Count = &v return s } -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *LaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *LaunchSpecification { - s.NetworkInterfaces = v +// SetPrice sets the Price field's value. +func (s *PricingDetail) SetPrice(v float64) *PricingDetail { + s.Price = &v return s } -// SetPlacement sets the Placement field's value. -func (s *LaunchSpecification) SetPlacement(v *SpotPlacement) *LaunchSpecification { - s.Placement = v - return s +// PrincipalIdFormat description +type PrincipalIdFormat struct { + _ struct{} `type:"structure"` + + // PrincipalIdFormatARN description + Arn *string `locationName:"arn" type:"string"` + + // PrincipalIdFormatStatuses description + Statuses []*IdFormat `locationName:"statusSet" locationNameList:"item" type:"list"` } -// SetRamdiskId sets the RamdiskId field's value. -func (s *LaunchSpecification) SetRamdiskId(v string) *LaunchSpecification { - s.RamdiskId = &v - return s +// String returns the string representation +func (s PrincipalIdFormat) String() string { + return awsutil.Prettify(s) } -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *LaunchSpecification) SetSecurityGroups(v []*GroupIdentifier) *LaunchSpecification { - s.SecurityGroups = v - return s +// GoString returns the string representation +func (s PrincipalIdFormat) GoString() string { + return s.String() } -// SetSubnetId sets the SubnetId field's value. -func (s *LaunchSpecification) SetSubnetId(v string) *LaunchSpecification { - s.SubnetId = &v +// SetArn sets the Arn field's value. +func (s *PrincipalIdFormat) SetArn(v string) *PrincipalIdFormat { + s.Arn = &v return s } -// SetUserData sets the UserData field's value. -func (s *LaunchSpecification) SetUserData(v string) *LaunchSpecification { - s.UserData = &v +// SetStatuses sets the Statuses field's value. +func (s *PrincipalIdFormat) SetStatuses(v []*IdFormat) *PrincipalIdFormat { + s.Statuses = v return s } -// Contains the parameters for ModifyHosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHostsRequest -type ModifyHostsInput struct { +// Describes a secondary private IPv4 address for a network interface. +type PrivateIpAddressSpecification struct { _ struct{} `type:"structure"` - // Specify whether to enable or disable auto-placement. - // - // AutoPlacement is a required field - AutoPlacement *string `locationName:"autoPlacement" type:"string" required:"true" enum:"AutoPlacement"` + // Indicates whether the private IPv4 address is the primary private IPv4 address. + // Only one IPv4 address can be designated as primary. + Primary *bool `locationName:"primary" type:"boolean"` - // The host IDs of the Dedicated Hosts you want to modify. - // - // HostIds is a required field - HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list" required:"true"` + // The private IPv4 addresses. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` } // String returns the string representation -func (s ModifyHostsInput) String() string { +func (s PrivateIpAddressSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyHostsInput) GoString() string { +func (s PrivateIpAddressSpecification) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyHostsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyHostsInput"} - if s.AutoPlacement == nil { - invalidParams.Add(request.NewErrParamRequired("AutoPlacement")) - } - if s.HostIds == nil { - invalidParams.Add(request.NewErrParamRequired("HostIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAutoPlacement sets the AutoPlacement field's value. -func (s *ModifyHostsInput) SetAutoPlacement(v string) *ModifyHostsInput { - s.AutoPlacement = &v +// SetPrimary sets the Primary field's value. +func (s *PrivateIpAddressSpecification) SetPrimary(v bool) *PrivateIpAddressSpecification { + s.Primary = &v return s } -// SetHostIds sets the HostIds field's value. -func (s *ModifyHostsInput) SetHostIds(v []*string) *ModifyHostsInput { - s.HostIds = v +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *PrivateIpAddressSpecification) SetPrivateIpAddress(v string) *PrivateIpAddressSpecification { + s.PrivateIpAddress = &v return s } -// Contains the output of ModifyHosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHostsResult -type ModifyHostsOutput struct { +// Describes the processor used by the instance type. +type ProcessorInfo struct { _ struct{} `type:"structure"` - // The IDs of the Dedicated Hosts that were successfully modified. - Successful []*string `locationName:"successful" locationNameList:"item" type:"list"` + // A list of architectures supported by the instance type. + SupportedArchitectures []*string `locationName:"supportedArchitectures" locationNameList:"item" type:"list"` - // The IDs of the Dedicated Hosts that could not be modified. Check whether - // the setting you requested can be used. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` + // The speed of the processor, in GHz. + SustainedClockSpeedInGhz *float64 `locationName:"sustainedClockSpeedInGhz" type:"double"` } // String returns the string representation -func (s ModifyHostsOutput) String() string { +func (s ProcessorInfo) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyHostsOutput) GoString() string { +func (s ProcessorInfo) GoString() string { return s.String() } -// SetSuccessful sets the Successful field's value. -func (s *ModifyHostsOutput) SetSuccessful(v []*string) *ModifyHostsOutput { - s.Successful = v +// SetSupportedArchitectures sets the SupportedArchitectures field's value. +func (s *ProcessorInfo) SetSupportedArchitectures(v []*string) *ProcessorInfo { + s.SupportedArchitectures = v return s } -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *ModifyHostsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *ModifyHostsOutput { - s.Unsuccessful = v +// SetSustainedClockSpeedInGhz sets the SustainedClockSpeedInGhz field's value. +func (s *ProcessorInfo) SetSustainedClockSpeedInGhz(v float64) *ProcessorInfo { + s.SustainedClockSpeedInGhz = &v return s } -// Contains the parameters of ModifyIdFormat. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormatRequest -type ModifyIdFormatInput struct { +// Describes a product code. +type ProductCode struct { _ struct{} `type:"structure"` - // The type of resource: instance | reservation | snapshot | volume - // - // Resource is a required field - Resource *string `type:"string" required:"true"` + // The product code. + ProductCodeId *string `locationName:"productCode" type:"string"` - // Indicate whether the resource should use longer IDs (17-character IDs). - // - // UseLongIds is a required field - UseLongIds *bool `type:"boolean" required:"true"` + // The type of product code. + ProductCodeType *string `locationName:"type" type:"string" enum:"ProductCodeValues"` } // String returns the string representation -func (s ModifyIdFormatInput) String() string { +func (s ProductCode) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyIdFormatInput) GoString() string { +func (s ProductCode) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyIdFormatInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyIdFormatInput"} - if s.Resource == nil { - invalidParams.Add(request.NewErrParamRequired("Resource")) - } - if s.UseLongIds == nil { - invalidParams.Add(request.NewErrParamRequired("UseLongIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetResource sets the Resource field's value. -func (s *ModifyIdFormatInput) SetResource(v string) *ModifyIdFormatInput { - s.Resource = &v +// SetProductCodeId sets the ProductCodeId field's value. +func (s *ProductCode) SetProductCodeId(v string) *ProductCode { + s.ProductCodeId = &v return s } -// SetUseLongIds sets the UseLongIds field's value. -func (s *ModifyIdFormatInput) SetUseLongIds(v bool) *ModifyIdFormatInput { - s.UseLongIds = &v +// SetProductCodeType sets the ProductCodeType field's value. +func (s *ProductCode) SetProductCodeType(v string) *ProductCode { + s.ProductCodeType = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormatOutput -type ModifyIdFormatOutput struct { +// Describes a virtual private gateway propagating route. +type PropagatingVgw struct { _ struct{} `type:"structure"` + + // The ID of the virtual private gateway. + GatewayId *string `locationName:"gatewayId" type:"string"` } // String returns the string representation -func (s ModifyIdFormatOutput) String() string { +func (s PropagatingVgw) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyIdFormatOutput) GoString() string { +func (s PropagatingVgw) GoString() string { return s.String() } -// Contains the parameters of ModifyIdentityIdFormat. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormatRequest -type ModifyIdentityIdFormatInput struct { - _ struct{} `type:"structure"` +// SetGatewayId sets the GatewayId field's value. +func (s *PropagatingVgw) SetGatewayId(v string) *PropagatingVgw { + s.GatewayId = &v + return s +} - // The ARN of the principal, which can be an IAM user, IAM role, or the root - // user. Specify all to modify the ID format for all IAM users, IAM roles, and - // the root user of the account. - // - // PrincipalArn is a required field - PrincipalArn *string `locationName:"principalArn" type:"string" required:"true"` +type ProvisionByoipCidrInput struct { + _ struct{} `type:"structure"` - // The type of resource: instance | reservation | snapshot | volume + // The public IPv4 address range, in CIDR notation. The most specific prefix + // that you can specify is /24. The address range cannot overlap with another + // address range that you've brought to this or another Region. // - // Resource is a required field - Resource *string `locationName:"resource" type:"string" required:"true"` + // Cidr is a required field + Cidr *string `type:"string" required:"true"` - // Indicates whether the resource should use longer IDs (17-character IDs) - // - // UseLongIds is a required field - UseLongIds *bool `locationName:"useLongIds" type:"boolean" required:"true"` + // A signed document that proves that you are authorized to bring the specified + // IP address range to Amazon using BYOIP. + CidrAuthorizationContext *CidrAuthorizationContext `type:"structure"` + + // A description for the address range and the address pool. + Description *string `type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` } // String returns the string representation -func (s ModifyIdentityIdFormatInput) String() string { +func (s ProvisionByoipCidrInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyIdentityIdFormatInput) GoString() string { +func (s ProvisionByoipCidrInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyIdentityIdFormatInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyIdentityIdFormatInput"} - if s.PrincipalArn == nil { - invalidParams.Add(request.NewErrParamRequired("PrincipalArn")) - } - if s.Resource == nil { - invalidParams.Add(request.NewErrParamRequired("Resource")) - } - if s.UseLongIds == nil { - invalidParams.Add(request.NewErrParamRequired("UseLongIds")) +func (s *ProvisionByoipCidrInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ProvisionByoipCidrInput"} + if s.Cidr == nil { + invalidParams.Add(request.NewErrParamRequired("Cidr")) + } + if s.CidrAuthorizationContext != nil { + if err := s.CidrAuthorizationContext.Validate(); err != nil { + invalidParams.AddNested("CidrAuthorizationContext", err.(request.ErrInvalidParams)) + } } if invalidParams.Len() > 0 { @@ -39394,517 +83177,528 @@ func (s *ModifyIdentityIdFormatInput) Validate() error { return nil } -// SetPrincipalArn sets the PrincipalArn field's value. -func (s *ModifyIdentityIdFormatInput) SetPrincipalArn(v string) *ModifyIdentityIdFormatInput { - s.PrincipalArn = &v +// SetCidr sets the Cidr field's value. +func (s *ProvisionByoipCidrInput) SetCidr(v string) *ProvisionByoipCidrInput { + s.Cidr = &v return s } -// SetResource sets the Resource field's value. -func (s *ModifyIdentityIdFormatInput) SetResource(v string) *ModifyIdentityIdFormatInput { - s.Resource = &v +// SetCidrAuthorizationContext sets the CidrAuthorizationContext field's value. +func (s *ProvisionByoipCidrInput) SetCidrAuthorizationContext(v *CidrAuthorizationContext) *ProvisionByoipCidrInput { + s.CidrAuthorizationContext = v return s } -// SetUseLongIds sets the UseLongIds field's value. -func (s *ModifyIdentityIdFormatInput) SetUseLongIds(v bool) *ModifyIdentityIdFormatInput { - s.UseLongIds = &v +// SetDescription sets the Description field's value. +func (s *ProvisionByoipCidrInput) SetDescription(v string) *ProvisionByoipCidrInput { + s.Description = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormatOutput -type ModifyIdentityIdFormatOutput struct { +// SetDryRun sets the DryRun field's value. +func (s *ProvisionByoipCidrInput) SetDryRun(v bool) *ProvisionByoipCidrInput { + s.DryRun = &v + return s +} + +type ProvisionByoipCidrOutput struct { _ struct{} `type:"structure"` + + // Information about the address pool. + ByoipCidr *ByoipCidr `locationName:"byoipCidr" type:"structure"` } // String returns the string representation -func (s ModifyIdentityIdFormatOutput) String() string { +func (s ProvisionByoipCidrOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyIdentityIdFormatOutput) GoString() string { +func (s ProvisionByoipCidrOutput) GoString() string { return s.String() } -// Contains the parameters for ModifyImageAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttributeRequest -type ModifyImageAttributeInput struct { - _ struct{} `type:"structure"` - - // The name of the attribute to modify. - Attribute *string `type:"string"` - - // A description for the AMI. - Description *AttributeValue `type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the AMI. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` +// SetByoipCidr sets the ByoipCidr field's value. +func (s *ProvisionByoipCidrOutput) SetByoipCidr(v *ByoipCidr) *ProvisionByoipCidrOutput { + s.ByoipCidr = v + return s +} - // A launch permission modification. - LaunchPermission *LaunchPermissionModifications `type:"structure"` +// Reserved. If you need to sustain traffic greater than the documented limits +// (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), +// contact us through the Support Center (https://console.aws.amazon.com/support/home?). +type ProvisionedBandwidth struct { + _ struct{} `type:"structure"` - // The operation type. - OperationType *string `type:"string" enum:"OperationType"` + // Reserved. If you need to sustain traffic greater than the documented limits + // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), + // contact us through the Support Center (https://console.aws.amazon.com/support/home?). + ProvisionTime *time.Time `locationName:"provisionTime" type:"timestamp"` - // One or more product codes. After you add a product code to an AMI, it can't - // be removed. This is only valid when modifying the productCodes attribute. - ProductCodes []*string `locationName:"ProductCode" locationNameList:"ProductCode" type:"list"` + // Reserved. If you need to sustain traffic greater than the documented limits + // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), + // contact us through the Support Center (https://console.aws.amazon.com/support/home?). + Provisioned *string `locationName:"provisioned" type:"string"` - // One or more user groups. This is only valid when modifying the launchPermission - // attribute. - UserGroups []*string `locationName:"UserGroup" locationNameList:"UserGroup" type:"list"` + // Reserved. If you need to sustain traffic greater than the documented limits + // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), + // contact us through the Support Center (https://console.aws.amazon.com/support/home?). + RequestTime *time.Time `locationName:"requestTime" type:"timestamp"` - // One or more AWS account IDs. This is only valid when modifying the launchPermission - // attribute. - UserIds []*string `locationName:"UserId" locationNameList:"UserId" type:"list"` + // Reserved. If you need to sustain traffic greater than the documented limits + // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), + // contact us through the Support Center (https://console.aws.amazon.com/support/home?). + Requested *string `locationName:"requested" type:"string"` - // The value of the attribute being modified. This is only valid when modifying - // the description attribute. - Value *string `type:"string"` + // Reserved. If you need to sustain traffic greater than the documented limits + // (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html), + // contact us through the Support Center (https://console.aws.amazon.com/support/home?). + Status *string `locationName:"status" type:"string"` } // String returns the string representation -func (s ModifyImageAttributeInput) String() string { +func (s ProvisionedBandwidth) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyImageAttributeInput) GoString() string { +func (s ProvisionedBandwidth) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyImageAttributeInput"} - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetProvisionTime sets the ProvisionTime field's value. +func (s *ProvisionedBandwidth) SetProvisionTime(v time.Time) *ProvisionedBandwidth { + s.ProvisionTime = &v + return s } -// SetAttribute sets the Attribute field's value. -func (s *ModifyImageAttributeInput) SetAttribute(v string) *ModifyImageAttributeInput { - s.Attribute = &v +// SetProvisioned sets the Provisioned field's value. +func (s *ProvisionedBandwidth) SetProvisioned(v string) *ProvisionedBandwidth { + s.Provisioned = &v return s } -// SetDescription sets the Description field's value. -func (s *ModifyImageAttributeInput) SetDescription(v *AttributeValue) *ModifyImageAttributeInput { - s.Description = v +// SetRequestTime sets the RequestTime field's value. +func (s *ProvisionedBandwidth) SetRequestTime(v time.Time) *ProvisionedBandwidth { + s.RequestTime = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *ModifyImageAttributeInput) SetDryRun(v bool) *ModifyImageAttributeInput { - s.DryRun = &v +// SetRequested sets the Requested field's value. +func (s *ProvisionedBandwidth) SetRequested(v string) *ProvisionedBandwidth { + s.Requested = &v return s } -// SetImageId sets the ImageId field's value. -func (s *ModifyImageAttributeInput) SetImageId(v string) *ModifyImageAttributeInput { - s.ImageId = &v +// SetStatus sets the Status field's value. +func (s *ProvisionedBandwidth) SetStatus(v string) *ProvisionedBandwidth { + s.Status = &v return s } -// SetLaunchPermission sets the LaunchPermission field's value. -func (s *ModifyImageAttributeInput) SetLaunchPermission(v *LaunchPermissionModifications) *ModifyImageAttributeInput { - s.LaunchPermission = v - return s +// Describes an address pool. +type PublicIpv4Pool struct { + _ struct{} `type:"structure"` + + // A description of the address pool. + Description *string `locationName:"description" type:"string"` + + // The address ranges. + PoolAddressRanges []*PublicIpv4PoolRange `locationName:"poolAddressRangeSet" locationNameList:"item" type:"list"` + + // The ID of the IPv4 address pool. + PoolId *string `locationName:"poolId" type:"string"` + + // The total number of addresses. + TotalAddressCount *int64 `locationName:"totalAddressCount" type:"integer"` + + // The total number of available addresses. + TotalAvailableAddressCount *int64 `locationName:"totalAvailableAddressCount" type:"integer"` } -// SetOperationType sets the OperationType field's value. -func (s *ModifyImageAttributeInput) SetOperationType(v string) *ModifyImageAttributeInput { - s.OperationType = &v +// String returns the string representation +func (s PublicIpv4Pool) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s PublicIpv4Pool) GoString() string { + return s.String() +} + +// SetDescription sets the Description field's value. +func (s *PublicIpv4Pool) SetDescription(v string) *PublicIpv4Pool { + s.Description = &v return s } -// SetProductCodes sets the ProductCodes field's value. -func (s *ModifyImageAttributeInput) SetProductCodes(v []*string) *ModifyImageAttributeInput { - s.ProductCodes = v +// SetPoolAddressRanges sets the PoolAddressRanges field's value. +func (s *PublicIpv4Pool) SetPoolAddressRanges(v []*PublicIpv4PoolRange) *PublicIpv4Pool { + s.PoolAddressRanges = v return s } -// SetUserGroups sets the UserGroups field's value. -func (s *ModifyImageAttributeInput) SetUserGroups(v []*string) *ModifyImageAttributeInput { - s.UserGroups = v +// SetPoolId sets the PoolId field's value. +func (s *PublicIpv4Pool) SetPoolId(v string) *PublicIpv4Pool { + s.PoolId = &v return s } -// SetUserIds sets the UserIds field's value. -func (s *ModifyImageAttributeInput) SetUserIds(v []*string) *ModifyImageAttributeInput { - s.UserIds = v +// SetTotalAddressCount sets the TotalAddressCount field's value. +func (s *PublicIpv4Pool) SetTotalAddressCount(v int64) *PublicIpv4Pool { + s.TotalAddressCount = &v return s } -// SetValue sets the Value field's value. -func (s *ModifyImageAttributeInput) SetValue(v string) *ModifyImageAttributeInput { - s.Value = &v +// SetTotalAvailableAddressCount sets the TotalAvailableAddressCount field's value. +func (s *PublicIpv4Pool) SetTotalAvailableAddressCount(v int64) *PublicIpv4Pool { + s.TotalAvailableAddressCount = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttributeOutput -type ModifyImageAttributeOutput struct { +// Describes an address range of an IPv4 address pool. +type PublicIpv4PoolRange struct { _ struct{} `type:"structure"` + + // The number of addresses in the range. + AddressCount *int64 `locationName:"addressCount" type:"integer"` + + // The number of available addresses in the range. + AvailableAddressCount *int64 `locationName:"availableAddressCount" type:"integer"` + + // The first IP address in the range. + FirstAddress *string `locationName:"firstAddress" type:"string"` + + // The last IP address in the range. + LastAddress *string `locationName:"lastAddress" type:"string"` } // String returns the string representation -func (s ModifyImageAttributeOutput) String() string { +func (s PublicIpv4PoolRange) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyImageAttributeOutput) GoString() string { +func (s PublicIpv4PoolRange) GoString() string { return s.String() } -// Contains the parameters for ModifyInstanceAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttributeRequest -type ModifyInstanceAttributeInput struct { - _ struct{} `type:"structure"` - - // The name of the attribute. - Attribute *string `locationName:"attribute" type:"string" enum:"InstanceAttributeName"` - - // Modifies the DeleteOnTermination attribute for volumes that are currently - // attached. The volume must be owned by the caller. If no value is specified - // for DeleteOnTermination, the default is true and the volume is deleted when - // the instance is terminated. - // - // To add instance store volumes to an Amazon EBS-backed instance, you must - // add them when you launch the instance. For more information, see Updating - // the Block Device Mapping when Launching an Instance (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM) - // in the Amazon Elastic Compute Cloud User Guide. - BlockDeviceMappings []*InstanceBlockDeviceMappingSpecification `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // If the value is true, you can't terminate the instance using the Amazon EC2 - // console, CLI, or API; otherwise, you can. You cannot use this paramater for - // Spot Instances. - DisableApiTermination *AttributeBooleanValue `locationName:"disableApiTermination" type:"structure"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetAddressCount sets the AddressCount field's value. +func (s *PublicIpv4PoolRange) SetAddressCount(v int64) *PublicIpv4PoolRange { + s.AddressCount = &v + return s +} - // Specifies whether the instance is optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - EbsOptimized *AttributeBooleanValue `locationName:"ebsOptimized" type:"structure"` +// SetAvailableAddressCount sets the AvailableAddressCount field's value. +func (s *PublicIpv4PoolRange) SetAvailableAddressCount(v int64) *PublicIpv4PoolRange { + s.AvailableAddressCount = &v + return s +} - // Set to true to enable enhanced networking with ENA for the instance. - // - // This option is supported only for HVM instances. Specifying this option with - // a PV instance can make it unreachable. - EnaSupport *AttributeBooleanValue `locationName:"enaSupport" type:"structure"` +// SetFirstAddress sets the FirstAddress field's value. +func (s *PublicIpv4PoolRange) SetFirstAddress(v string) *PublicIpv4PoolRange { + s.FirstAddress = &v + return s +} - // [EC2-VPC] Changes the security groups of the instance. You must specify at - // least one security group, even if it's just the default security group for - // the VPC. You must specify the security group ID, not the security group name. - Groups []*string `locationName:"GroupId" locationNameList:"groupId" type:"list"` +// SetLastAddress sets the LastAddress field's value. +func (s *PublicIpv4PoolRange) SetLastAddress(v string) *PublicIpv4PoolRange { + s.LastAddress = &v + return s +} - // The ID of the instance. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` +// Describes the result of the purchase. +type Purchase struct { + _ struct{} `type:"structure"` - // Specifies whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - InstanceInitiatedShutdownBehavior *AttributeValue `locationName:"instanceInitiatedShutdownBehavior" type:"structure"` + // The currency in which the UpfrontPrice and HourlyPrice amounts are specified. + // At this time, the only supported currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - // Changes the instance type to the specified value. For more information, see - // Instance Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html). - // If the instance type is not valid, the error returned is InvalidInstanceAttributeValue. - InstanceType *AttributeValue `locationName:"instanceType" type:"structure"` + // The duration of the reservation's term in seconds. + Duration *int64 `locationName:"duration" type:"integer"` - // Changes the instance's kernel to the specified value. We recommend that you - // use PV-GRUB instead of kernels and RAM disks. For more information, see PV-GRUB - // (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html). - Kernel *AttributeValue `locationName:"kernel" type:"structure"` + // The IDs of the Dedicated Hosts associated with the reservation. + HostIdSet []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` - // Changes the instance's RAM disk to the specified value. We recommend that - // you use PV-GRUB instead of kernels and RAM disks. For more information, see - // PV-GRUB (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html). - Ramdisk *AttributeValue `locationName:"ramdisk" type:"structure"` + // The ID of the reservation. + HostReservationId *string `locationName:"hostReservationId" type:"string"` - // Specifies whether source/destination checking is enabled. A value of true - // means that checking is enabled, and false means checking is disabled. This - // value must be false for a NAT instance to perform NAT. - SourceDestCheck *AttributeBooleanValue `type:"structure"` + // The hourly price of the reservation per hour. + HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - // Set to simple to enable enhanced networking with the Intel 82599 Virtual - // Function interface for the instance. - // - // There is no way to disable enhanced networking with the Intel 82599 Virtual - // Function interface at this time. - // - // This option is supported only for HVM instances. Specifying this option with - // a PV instance can make it unreachable. - SriovNetSupport *AttributeValue `locationName:"sriovNetSupport" type:"structure"` + // The instance family on the Dedicated Host that the reservation can be associated + // with. + InstanceFamily *string `locationName:"instanceFamily" type:"string"` - // Changes the instance's user data to the specified value. If you are using - // an AWS SDK or command line tool, Base64-encoding is performed for you, and - // you can load the text from a file. Otherwise, you must provide Base64-encoded - // text. - UserData *BlobAttributeValue `locationName:"userData" type:"structure"` + // The payment option for the reservation. + PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` - // A new value for the attribute. Use only with the kernel, ramdisk, userData, - // disableApiTermination, or instanceInitiatedShutdownBehavior attribute. - Value *string `locationName:"value" type:"string"` + // The upfront price of the reservation. + UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` } // String returns the string representation -func (s ModifyInstanceAttributeInput) String() string { +func (s Purchase) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyInstanceAttributeInput) GoString() string { +func (s Purchase) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyInstanceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyInstanceAttributeInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *Purchase) SetCurrencyCode(v string) *Purchase { + s.CurrencyCode = &v + return s } -// SetAttribute sets the Attribute field's value. -func (s *ModifyInstanceAttributeInput) SetAttribute(v string) *ModifyInstanceAttributeInput { - s.Attribute = &v +// SetDuration sets the Duration field's value. +func (s *Purchase) SetDuration(v int64) *Purchase { + s.Duration = &v return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *ModifyInstanceAttributeInput) SetBlockDeviceMappings(v []*InstanceBlockDeviceMappingSpecification) *ModifyInstanceAttributeInput { - s.BlockDeviceMappings = v +// SetHostIdSet sets the HostIdSet field's value. +func (s *Purchase) SetHostIdSet(v []*string) *Purchase { + s.HostIdSet = v return s } -// SetDisableApiTermination sets the DisableApiTermination field's value. -func (s *ModifyInstanceAttributeInput) SetDisableApiTermination(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { - s.DisableApiTermination = v +// SetHostReservationId sets the HostReservationId field's value. +func (s *Purchase) SetHostReservationId(v string) *Purchase { + s.HostReservationId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *ModifyInstanceAttributeInput) SetDryRun(v bool) *ModifyInstanceAttributeInput { - s.DryRun = &v +// SetHourlyPrice sets the HourlyPrice field's value. +func (s *Purchase) SetHourlyPrice(v string) *Purchase { + s.HourlyPrice = &v return s } -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *ModifyInstanceAttributeInput) SetEbsOptimized(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { - s.EbsOptimized = v +// SetInstanceFamily sets the InstanceFamily field's value. +func (s *Purchase) SetInstanceFamily(v string) *Purchase { + s.InstanceFamily = &v return s } -// SetEnaSupport sets the EnaSupport field's value. -func (s *ModifyInstanceAttributeInput) SetEnaSupport(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { - s.EnaSupport = v +// SetPaymentOption sets the PaymentOption field's value. +func (s *Purchase) SetPaymentOption(v string) *Purchase { + s.PaymentOption = &v return s } -// SetGroups sets the Groups field's value. -func (s *ModifyInstanceAttributeInput) SetGroups(v []*string) *ModifyInstanceAttributeInput { - s.Groups = v +// SetUpfrontPrice sets the UpfrontPrice field's value. +func (s *Purchase) SetUpfrontPrice(v string) *Purchase { + s.UpfrontPrice = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *ModifyInstanceAttributeInput) SetInstanceId(v string) *ModifyInstanceAttributeInput { - s.InstanceId = &v - return s +type PurchaseHostReservationInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string"` + + // The currency in which the totalUpfrontPrice, LimitPrice, and totalHourlyPrice + // amounts are specified. At this time, the only supported currency is USD. + CurrencyCode *string `type:"string" enum:"CurrencyCodeValues"` + + // The IDs of the Dedicated Hosts with which the reservation will be associated. + // + // HostIdSet is a required field + HostIdSet []*string `locationNameList:"item" type:"list" required:"true"` + + // The specified limit is checked against the total upfront cost of the reservation + // (calculated as the offering's upfront cost multiplied by the host count). + // If the total upfront cost is greater than the specified price limit, the + // request fails. This is used to ensure that the purchase does not exceed the + // expected upfront cost of the purchase. At this time, the only supported currency + // is USD. For example, to indicate a limit price of USD 100, specify 100.00. + LimitPrice *string `type:"string"` + + // The ID of the offering. + // + // OfferingId is a required field + OfferingId *string `type:"string" required:"true"` } -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *ModifyInstanceAttributeInput) SetInstanceInitiatedShutdownBehavior(v *AttributeValue) *ModifyInstanceAttributeInput { - s.InstanceInitiatedShutdownBehavior = v - return s +// String returns the string representation +func (s PurchaseHostReservationInput) String() string { + return awsutil.Prettify(s) } -// SetInstanceType sets the InstanceType field's value. -func (s *ModifyInstanceAttributeInput) SetInstanceType(v *AttributeValue) *ModifyInstanceAttributeInput { - s.InstanceType = v - return s +// GoString returns the string representation +func (s PurchaseHostReservationInput) GoString() string { + return s.String() } -// SetKernel sets the Kernel field's value. -func (s *ModifyInstanceAttributeInput) SetKernel(v *AttributeValue) *ModifyInstanceAttributeInput { - s.Kernel = v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *PurchaseHostReservationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PurchaseHostReservationInput"} + if s.HostIdSet == nil { + invalidParams.Add(request.NewErrParamRequired("HostIdSet")) + } + if s.OfferingId == nil { + invalidParams.Add(request.NewErrParamRequired("OfferingId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetRamdisk sets the Ramdisk field's value. -func (s *ModifyInstanceAttributeInput) SetRamdisk(v *AttributeValue) *ModifyInstanceAttributeInput { - s.Ramdisk = v +// SetClientToken sets the ClientToken field's value. +func (s *PurchaseHostReservationInput) SetClientToken(v string) *PurchaseHostReservationInput { + s.ClientToken = &v return s } -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *ModifyInstanceAttributeInput) SetSourceDestCheck(v *AttributeBooleanValue) *ModifyInstanceAttributeInput { - s.SourceDestCheck = v +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *PurchaseHostReservationInput) SetCurrencyCode(v string) *PurchaseHostReservationInput { + s.CurrencyCode = &v return s } -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *ModifyInstanceAttributeInput) SetSriovNetSupport(v *AttributeValue) *ModifyInstanceAttributeInput { - s.SriovNetSupport = v +// SetHostIdSet sets the HostIdSet field's value. +func (s *PurchaseHostReservationInput) SetHostIdSet(v []*string) *PurchaseHostReservationInput { + s.HostIdSet = v return s } -// SetUserData sets the UserData field's value. -func (s *ModifyInstanceAttributeInput) SetUserData(v *BlobAttributeValue) *ModifyInstanceAttributeInput { - s.UserData = v +// SetLimitPrice sets the LimitPrice field's value. +func (s *PurchaseHostReservationInput) SetLimitPrice(v string) *PurchaseHostReservationInput { + s.LimitPrice = &v return s } -// SetValue sets the Value field's value. -func (s *ModifyInstanceAttributeInput) SetValue(v string) *ModifyInstanceAttributeInput { - s.Value = &v +// SetOfferingId sets the OfferingId field's value. +func (s *PurchaseHostReservationInput) SetOfferingId(v string) *PurchaseHostReservationInput { + s.OfferingId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttributeOutput -type ModifyInstanceAttributeOutput struct { +type PurchaseHostReservationOutput struct { _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ModifyInstanceAttributeOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s ModifyInstanceAttributeOutput) GoString() string { - return s.String() -} -// Contains the parameters for ModifyInstancePlacement. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacementRequest -type ModifyInstancePlacementInput struct { - _ struct{} `type:"structure"` + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` - // The new affinity setting for the instance. - Affinity *string `locationName:"affinity" type:"string" enum:"Affinity"` + // The currency in which the totalUpfrontPrice and totalHourlyPrice amounts + // are specified. At this time, the only supported currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - // The ID of the Dedicated Host that the instance will have affinity with. - HostId *string `locationName:"hostId" type:"string"` + // Describes the details of the purchase. + Purchase []*Purchase `locationName:"purchase" locationNameList:"item" type:"list"` - // The ID of the instance that you are modifying. - // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + // The total hourly price of the reservation calculated per hour. + TotalHourlyPrice *string `locationName:"totalHourlyPrice" type:"string"` - // The tenancy of the instance that you are modifying. - Tenancy *string `locationName:"tenancy" type:"string" enum:"HostTenancy"` + // The total amount charged to your account when you purchase the reservation. + TotalUpfrontPrice *string `locationName:"totalUpfrontPrice" type:"string"` } // String returns the string representation -func (s ModifyInstancePlacementInput) String() string { +func (s PurchaseHostReservationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyInstancePlacementInput) GoString() string { +func (s PurchaseHostReservationOutput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyInstancePlacementInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyInstancePlacementInput"} - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetClientToken sets the ClientToken field's value. +func (s *PurchaseHostReservationOutput) SetClientToken(v string) *PurchaseHostReservationOutput { + s.ClientToken = &v + return s } -// SetAffinity sets the Affinity field's value. -func (s *ModifyInstancePlacementInput) SetAffinity(v string) *ModifyInstancePlacementInput { - s.Affinity = &v +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *PurchaseHostReservationOutput) SetCurrencyCode(v string) *PurchaseHostReservationOutput { + s.CurrencyCode = &v return s } -// SetHostId sets the HostId field's value. -func (s *ModifyInstancePlacementInput) SetHostId(v string) *ModifyInstancePlacementInput { - s.HostId = &v +// SetPurchase sets the Purchase field's value. +func (s *PurchaseHostReservationOutput) SetPurchase(v []*Purchase) *PurchaseHostReservationOutput { + s.Purchase = v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *ModifyInstancePlacementInput) SetInstanceId(v string) *ModifyInstancePlacementInput { - s.InstanceId = &v +// SetTotalHourlyPrice sets the TotalHourlyPrice field's value. +func (s *PurchaseHostReservationOutput) SetTotalHourlyPrice(v string) *PurchaseHostReservationOutput { + s.TotalHourlyPrice = &v return s } -// SetTenancy sets the Tenancy field's value. -func (s *ModifyInstancePlacementInput) SetTenancy(v string) *ModifyInstancePlacementInput { - s.Tenancy = &v +// SetTotalUpfrontPrice sets the TotalUpfrontPrice field's value. +func (s *PurchaseHostReservationOutput) SetTotalUpfrontPrice(v string) *PurchaseHostReservationOutput { + s.TotalUpfrontPrice = &v return s } -// Contains the output of ModifyInstancePlacement. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacementResult -type ModifyInstancePlacementOutput struct { +// Describes a request to purchase Scheduled Instances. +type PurchaseRequest struct { _ struct{} `type:"structure"` - // Is true if the request succeeds, and an error otherwise. - Return *bool `locationName:"return" type:"boolean"` + // The number of instances. + // + // InstanceCount is a required field + InstanceCount *int64 `type:"integer" required:"true"` + + // The purchase token. + // + // PurchaseToken is a required field + PurchaseToken *string `type:"string" required:"true"` } // String returns the string representation -func (s ModifyInstancePlacementOutput) String() string { +func (s PurchaseRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyInstancePlacementOutput) GoString() string { +func (s PurchaseRequest) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *ModifyInstancePlacementOutput) SetReturn(v bool) *ModifyInstancePlacementOutput { - s.Return = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *PurchaseRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PurchaseRequest"} + if s.InstanceCount == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceCount")) + } + if s.PurchaseToken == nil { + invalidParams.Add(request.NewErrParamRequired("PurchaseToken")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// Contains the parameters for ModifyNetworkInterfaceAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttributeRequest -type ModifyNetworkInterfaceAttributeInput struct { - _ struct{} `type:"structure"` +// SetInstanceCount sets the InstanceCount field's value. +func (s *PurchaseRequest) SetInstanceCount(v int64) *PurchaseRequest { + s.InstanceCount = &v + return s +} - // Information about the interface attachment. If modifying the 'delete on termination' - // attribute, you must specify the ID of the interface attachment. - Attachment *NetworkInterfaceAttachmentChanges `locationName:"attachment" type:"structure"` +// SetPurchaseToken sets the PurchaseToken field's value. +func (s *PurchaseRequest) SetPurchaseToken(v string) *PurchaseRequest { + s.PurchaseToken = &v + return s +} - // A description for the network interface. - Description *AttributeValue `locationName:"description" type:"structure"` +// Contains the parameters for PurchaseReservedInstancesOffering. +type PurchaseReservedInstancesOfferingInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have @@ -39912,40 +83706,44 @@ type ModifyNetworkInterfaceAttributeInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // Changes the security groups for the network interface. The new set of groups - // you specify replaces the current set. You must specify at least one group, - // even if it's just the default security group in the VPC. You must specify - // the ID of the security group, not the name. - Groups []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - - // The ID of the network interface. + // The number of Reserved Instances to purchase. // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` + // InstanceCount is a required field + InstanceCount *int64 `type:"integer" required:"true"` - // Indicates whether source/destination checking is enabled. A value of true - // means checking is enabled, and false means checking is disabled. This value - // must be false for a NAT instance to perform NAT. For more information, see - // NAT Instances (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html) - // in the Amazon Virtual Private Cloud User Guide. - SourceDestCheck *AttributeBooleanValue `locationName:"sourceDestCheck" type:"structure"` + // Specified for Reserved Instance Marketplace offerings to limit the total + // order and ensure that the Reserved Instances are not purchased at unexpected + // prices. + LimitPrice *ReservedInstanceLimitPrice `locationName:"limitPrice" type:"structure"` + + // The time at which to purchase the Reserved Instance, in UTC format (for example, + // YYYY-MM-DDTHH:MM:SSZ). + PurchaseTime *time.Time `type:"timestamp"` + + // The ID of the Reserved Instance offering to purchase. + // + // ReservedInstancesOfferingId is a required field + ReservedInstancesOfferingId *string `type:"string" required:"true"` } // String returns the string representation -func (s ModifyNetworkInterfaceAttributeInput) String() string { +func (s PurchaseReservedInstancesOfferingInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyNetworkInterfaceAttributeInput) GoString() string { +func (s PurchaseReservedInstancesOfferingInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyNetworkInterfaceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyNetworkInterfaceAttributeInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) +func (s *PurchaseReservedInstancesOfferingInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PurchaseReservedInstancesOfferingInput"} + if s.InstanceCount == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceCount")) + } + if s.ReservedInstancesOfferingId == nil { + invalidParams.Add(request.NewErrParamRequired("ReservedInstancesOfferingId")) } if invalidParams.Len() > 0 { @@ -39954,95 +83752,108 @@ func (s *ModifyNetworkInterfaceAttributeInput) Validate() error { return nil } -// SetAttachment sets the Attachment field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetAttachment(v *NetworkInterfaceAttachmentChanges) *ModifyNetworkInterfaceAttributeInput { - s.Attachment = v - return s -} - -// SetDescription sets the Description field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetDescription(v *AttributeValue) *ModifyNetworkInterfaceAttributeInput { - s.Description = v +// SetDryRun sets the DryRun field's value. +func (s *PurchaseReservedInstancesOfferingInput) SetDryRun(v bool) *PurchaseReservedInstancesOfferingInput { + s.DryRun = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetDryRun(v bool) *ModifyNetworkInterfaceAttributeInput { - s.DryRun = &v +// SetInstanceCount sets the InstanceCount field's value. +func (s *PurchaseReservedInstancesOfferingInput) SetInstanceCount(v int64) *PurchaseReservedInstancesOfferingInput { + s.InstanceCount = &v return s } -// SetGroups sets the Groups field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetGroups(v []*string) *ModifyNetworkInterfaceAttributeInput { - s.Groups = v +// SetLimitPrice sets the LimitPrice field's value. +func (s *PurchaseReservedInstancesOfferingInput) SetLimitPrice(v *ReservedInstanceLimitPrice) *PurchaseReservedInstancesOfferingInput { + s.LimitPrice = v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *ModifyNetworkInterfaceAttributeInput { - s.NetworkInterfaceId = &v +// SetPurchaseTime sets the PurchaseTime field's value. +func (s *PurchaseReservedInstancesOfferingInput) SetPurchaseTime(v time.Time) *PurchaseReservedInstancesOfferingInput { + s.PurchaseTime = &v return s } -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *ModifyNetworkInterfaceAttributeInput) SetSourceDestCheck(v *AttributeBooleanValue) *ModifyNetworkInterfaceAttributeInput { - s.SourceDestCheck = v +// SetReservedInstancesOfferingId sets the ReservedInstancesOfferingId field's value. +func (s *PurchaseReservedInstancesOfferingInput) SetReservedInstancesOfferingId(v string) *PurchaseReservedInstancesOfferingInput { + s.ReservedInstancesOfferingId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttributeOutput -type ModifyNetworkInterfaceAttributeOutput struct { +// Contains the output of PurchaseReservedInstancesOffering. +type PurchaseReservedInstancesOfferingOutput struct { _ struct{} `type:"structure"` + + // The IDs of the purchased Reserved Instances. + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` } // String returns the string representation -func (s ModifyNetworkInterfaceAttributeOutput) String() string { +func (s PurchaseReservedInstancesOfferingOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyNetworkInterfaceAttributeOutput) GoString() string { +func (s PurchaseReservedInstancesOfferingOutput) GoString() string { return s.String() } -// Contains the parameters for ModifyReservedInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstancesRequest -type ModifyReservedInstancesInput struct { +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *PurchaseReservedInstancesOfferingOutput) SetReservedInstancesId(v string) *PurchaseReservedInstancesOfferingOutput { + s.ReservedInstancesId = &v + return s +} + +// Contains the parameters for PurchaseScheduledInstances. +type PurchaseScheduledInstancesInput struct { _ struct{} `type:"structure"` - // A unique, case-sensitive token you provide to ensure idempotency of your - // modification request. For more information, see Ensuring Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` + // Unique, case-sensitive identifier that ensures the idempotency of the request. + // For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` - // The IDs of the Reserved Instances to modify. - // - // ReservedInstancesIds is a required field - ReservedInstancesIds []*string `locationName:"ReservedInstancesId" locationNameList:"ReservedInstancesId" type:"list" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The configuration settings for the Reserved Instances to modify. + // The purchase requests. // - // TargetConfigurations is a required field - TargetConfigurations []*ReservedInstancesConfiguration `locationName:"ReservedInstancesConfigurationSetItemType" locationNameList:"item" type:"list" required:"true"` + // PurchaseRequests is a required field + PurchaseRequests []*PurchaseRequest `locationName:"PurchaseRequest" locationNameList:"PurchaseRequest" min:"1" type:"list" required:"true"` } // String returns the string representation -func (s ModifyReservedInstancesInput) String() string { +func (s PurchaseScheduledInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyReservedInstancesInput) GoString() string { +func (s PurchaseScheduledInstancesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyReservedInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyReservedInstancesInput"} - if s.ReservedInstancesIds == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesIds")) +func (s *PurchaseScheduledInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PurchaseScheduledInstancesInput"} + if s.PurchaseRequests == nil { + invalidParams.Add(request.NewErrParamRequired("PurchaseRequests")) } - if s.TargetConfigurations == nil { - invalidParams.Add(request.NewErrParamRequired("TargetConfigurations")) + if s.PurchaseRequests != nil && len(s.PurchaseRequests) < 1 { + invalidParams.Add(request.NewErrParamMinLen("PurchaseRequests", 1)) + } + if s.PurchaseRequests != nil { + for i, v := range s.PurchaseRequests { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PurchaseRequests", i), err.(request.ErrInvalidParams)) + } + } } if invalidParams.Len() > 0 { @@ -40052,97 +83863,77 @@ func (s *ModifyReservedInstancesInput) Validate() error { } // SetClientToken sets the ClientToken field's value. -func (s *ModifyReservedInstancesInput) SetClientToken(v string) *ModifyReservedInstancesInput { +func (s *PurchaseScheduledInstancesInput) SetClientToken(v string) *PurchaseScheduledInstancesInput { s.ClientToken = &v return s } -// SetReservedInstancesIds sets the ReservedInstancesIds field's value. -func (s *ModifyReservedInstancesInput) SetReservedInstancesIds(v []*string) *ModifyReservedInstancesInput { - s.ReservedInstancesIds = v +// SetDryRun sets the DryRun field's value. +func (s *PurchaseScheduledInstancesInput) SetDryRun(v bool) *PurchaseScheduledInstancesInput { + s.DryRun = &v return s } -// SetTargetConfigurations sets the TargetConfigurations field's value. -func (s *ModifyReservedInstancesInput) SetTargetConfigurations(v []*ReservedInstancesConfiguration) *ModifyReservedInstancesInput { - s.TargetConfigurations = v +// SetPurchaseRequests sets the PurchaseRequests field's value. +func (s *PurchaseScheduledInstancesInput) SetPurchaseRequests(v []*PurchaseRequest) *PurchaseScheduledInstancesInput { + s.PurchaseRequests = v return s } -// Contains the output of ModifyReservedInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstancesResult -type ModifyReservedInstancesOutput struct { +// Contains the output of PurchaseScheduledInstances. +type PurchaseScheduledInstancesOutput struct { _ struct{} `type:"structure"` - // The ID for the modification. - ReservedInstancesModificationId *string `locationName:"reservedInstancesModificationId" type:"string"` + // Information about the Scheduled Instances. + ScheduledInstanceSet []*ScheduledInstance `locationName:"scheduledInstanceSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s ModifyReservedInstancesOutput) String() string { +func (s PurchaseScheduledInstancesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyReservedInstancesOutput) GoString() string { +func (s PurchaseScheduledInstancesOutput) GoString() string { return s.String() } -// SetReservedInstancesModificationId sets the ReservedInstancesModificationId field's value. -func (s *ModifyReservedInstancesOutput) SetReservedInstancesModificationId(v string) *ModifyReservedInstancesOutput { - s.ReservedInstancesModificationId = &v +// SetScheduledInstanceSet sets the ScheduledInstanceSet field's value. +func (s *PurchaseScheduledInstancesOutput) SetScheduledInstanceSet(v []*ScheduledInstance) *PurchaseScheduledInstancesOutput { + s.ScheduledInstanceSet = v return s } -// Contains the parameters for ModifySnapshotAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttributeRequest -type ModifySnapshotAttributeInput struct { +type RebootInstancesInput struct { _ struct{} `type:"structure"` - // The snapshot attribute to modify. - // - // Only volume creation permissions may be modified at the customer level. - Attribute *string `type:"string" enum:"SnapshotAttributeName"` - - // A JSON representation of the snapshot attribute modification. - CreateVolumePermission *CreateVolumePermissionModifications `type:"structure"` - // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The group to modify for the snapshot. - GroupNames []*string `locationName:"UserGroup" locationNameList:"GroupName" type:"list"` - - // The type of operation to perform to the attribute. - OperationType *string `type:"string" enum:"OperationType"` - - // The ID of the snapshot. + // The instance IDs. // - // SnapshotId is a required field - SnapshotId *string `type:"string" required:"true"` - - // The account ID to modify for the snapshot. - UserIds []*string `locationName:"UserId" locationNameList:"UserId" type:"list"` + // InstanceIds is a required field + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` } // String returns the string representation -func (s ModifySnapshotAttributeInput) String() string { +func (s RebootInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifySnapshotAttributeInput) GoString() string { +func (s RebootInstancesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifySnapshotAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifySnapshotAttributeInput"} - if s.SnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SnapshotId")) +func (s *RebootInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RebootInstancesInput"} + if s.InstanceIds == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceIds")) } if invalidParams.Len() > 0 { @@ -40151,190 +83942,197 @@ func (s *ModifySnapshotAttributeInput) Validate() error { return nil } -// SetAttribute sets the Attribute field's value. -func (s *ModifySnapshotAttributeInput) SetAttribute(v string) *ModifySnapshotAttributeInput { - s.Attribute = &v - return s -} - -// SetCreateVolumePermission sets the CreateVolumePermission field's value. -func (s *ModifySnapshotAttributeInput) SetCreateVolumePermission(v *CreateVolumePermissionModifications) *ModifySnapshotAttributeInput { - s.CreateVolumePermission = v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *ModifySnapshotAttributeInput) SetDryRun(v bool) *ModifySnapshotAttributeInput { +func (s *RebootInstancesInput) SetDryRun(v bool) *RebootInstancesInput { s.DryRun = &v return s } -// SetGroupNames sets the GroupNames field's value. -func (s *ModifySnapshotAttributeInput) SetGroupNames(v []*string) *ModifySnapshotAttributeInput { - s.GroupNames = v - return s -} - -// SetOperationType sets the OperationType field's value. -func (s *ModifySnapshotAttributeInput) SetOperationType(v string) *ModifySnapshotAttributeInput { - s.OperationType = &v - return s -} - -// SetSnapshotId sets the SnapshotId field's value. -func (s *ModifySnapshotAttributeInput) SetSnapshotId(v string) *ModifySnapshotAttributeInput { - s.SnapshotId = &v - return s -} - -// SetUserIds sets the UserIds field's value. -func (s *ModifySnapshotAttributeInput) SetUserIds(v []*string) *ModifySnapshotAttributeInput { - s.UserIds = v +// SetInstanceIds sets the InstanceIds field's value. +func (s *RebootInstancesInput) SetInstanceIds(v []*string) *RebootInstancesInput { + s.InstanceIds = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttributeOutput -type ModifySnapshotAttributeOutput struct { +type RebootInstancesOutput struct { _ struct{} `type:"structure"` } // String returns the string representation -func (s ModifySnapshotAttributeOutput) String() string { +func (s RebootInstancesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifySnapshotAttributeOutput) GoString() string { +func (s RebootInstancesOutput) GoString() string { return s.String() } -// Contains the parameters for ModifySpotFleetRequest. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequestRequest -type ModifySpotFleetRequestInput struct { +// Describes a recurring charge. +type RecurringCharge struct { _ struct{} `type:"structure"` - // Indicates whether running Spot instances should be terminated if the target - // capacity of the Spot fleet request is decreased below the current size of - // the Spot fleet. - ExcessCapacityTerminationPolicy *string `locationName:"excessCapacityTerminationPolicy" type:"string" enum:"ExcessCapacityTerminationPolicy"` - - // The ID of the Spot fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + // The amount of the recurring charge. + Amount *float64 `locationName:"amount" type:"double"` - // The size of the fleet. - TargetCapacity *int64 `locationName:"targetCapacity" type:"integer"` + // The frequency of the recurring charge. + Frequency *string `locationName:"frequency" type:"string" enum:"RecurringChargeFrequency"` } // String returns the string representation -func (s ModifySpotFleetRequestInput) String() string { +func (s RecurringCharge) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifySpotFleetRequestInput) GoString() string { +func (s RecurringCharge) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifySpotFleetRequestInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifySpotFleetRequestInput"} - if s.SpotFleetRequestId == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. -func (s *ModifySpotFleetRequestInput) SetExcessCapacityTerminationPolicy(v string) *ModifySpotFleetRequestInput { - s.ExcessCapacityTerminationPolicy = &v - return s -} - -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *ModifySpotFleetRequestInput) SetSpotFleetRequestId(v string) *ModifySpotFleetRequestInput { - s.SpotFleetRequestId = &v +// SetAmount sets the Amount field's value. +func (s *RecurringCharge) SetAmount(v float64) *RecurringCharge { + s.Amount = &v return s } -// SetTargetCapacity sets the TargetCapacity field's value. -func (s *ModifySpotFleetRequestInput) SetTargetCapacity(v int64) *ModifySpotFleetRequestInput { - s.TargetCapacity = &v +// SetFrequency sets the Frequency field's value. +func (s *RecurringCharge) SetFrequency(v string) *RecurringCharge { + s.Frequency = &v return s } -// Contains the output of ModifySpotFleetRequest. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequestResponse -type ModifySpotFleetRequestOutput struct { +// Describes a Region. +type Region struct { _ struct{} `type:"structure"` - // Is true if the request succeeds, and an error otherwise. - Return *bool `locationName:"return" type:"boolean"` + // The Region service endpoint. + Endpoint *string `locationName:"regionEndpoint" type:"string"` + + // The Region opt-in status. The possible values are opt-in-not-required, opted-in, + // and not-opted-in. + OptInStatus *string `locationName:"optInStatus" type:"string"` + + // The name of the Region. + RegionName *string `locationName:"regionName" type:"string"` } // String returns the string representation -func (s ModifySpotFleetRequestOutput) String() string { +func (s Region) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifySpotFleetRequestOutput) GoString() string { +func (s Region) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *ModifySpotFleetRequestOutput) SetReturn(v bool) *ModifySpotFleetRequestOutput { - s.Return = &v +// SetEndpoint sets the Endpoint field's value. +func (s *Region) SetEndpoint(v string) *Region { + s.Endpoint = &v return s } -// Contains the parameters for ModifySubnetAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttributeRequest -type ModifySubnetAttributeInput struct { +// SetOptInStatus sets the OptInStatus field's value. +func (s *Region) SetOptInStatus(v string) *Region { + s.OptInStatus = &v + return s +} + +// SetRegionName sets the RegionName field's value. +func (s *Region) SetRegionName(v string) *Region { + s.RegionName = &v + return s +} + +// Contains the parameters for RegisterImage. +type RegisterImageInput struct { _ struct{} `type:"structure"` - // Specify true to indicate that network interfaces created in the specified - // subnet should be assigned an IPv6 address. This includes a network interface - // that's created when launching an instance into the subnet (the instance therefore - // receives an IPv6 address). + // The architecture of the AMI. // - // If you enable the IPv6 addressing feature for your subnet, your network interface - // or instance only receives an IPv6 address if it's created using version 2016-11-15 - // or later of the Amazon EC2 API. - AssignIpv6AddressOnCreation *AttributeBooleanValue `type:"structure"` + // Default: For Amazon EBS-backed AMIs, i386. For instance store-backed AMIs, + // the architecture specified in the manifest file. + Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` - // Specify true to indicate that network interfaces created in the specified - // subnet should be assigned a public IPv4 address. This includes a network - // interface that's created when launching an instance into the subnet (the - // instance therefore receives a public IPv4 address). - MapPublicIpOnLaunch *AttributeBooleanValue `type:"structure"` + // The billing product codes. Your account must be authorized to specify billing + // product codes. Otherwise, you can use the AWS Marketplace to bill for the + // use of an AMI. + BillingProducts []*string `locationName:"BillingProduct" locationNameList:"item" type:"list"` - // The ID of the subnet. + // The block device mapping entries. + BlockDeviceMappings []*BlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` + + // A description for your AMI. + Description *string `locationName:"description" type:"string"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // Set to true to enable enhanced networking with ENA for the AMI and any instances + // that you launch from the AMI. // - // SubnetId is a required field - SubnetId *string `locationName:"subnetId" type:"string" required:"true"` + // This option is supported only for HVM AMIs. Specifying this option with a + // PV AMI can make instances launched from the AMI unreachable. + EnaSupport *bool `locationName:"enaSupport" type:"boolean"` + + // The full path to your AMI manifest in Amazon S3 storage. The specified bucket + // must have the aws-exec-read canned access control list (ACL) to ensure that + // it can be accessed by Amazon EC2. For more information, see Canned ACLs (https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) + // in the Amazon S3 Service Developer Guide. + ImageLocation *string `type:"string"` + + // The ID of the kernel. + KernelId *string `locationName:"kernelId" type:"string"` + + // A name for your AMI. + // + // Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets + // ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), + // at-signs (@), or underscores(_) + // + // Name is a required field + Name *string `locationName:"name" type:"string" required:"true"` + + // The ID of the RAM disk. + RamdiskId *string `locationName:"ramdiskId" type:"string"` + + // The device name of the root device volume (for example, /dev/sda1). + RootDeviceName *string `locationName:"rootDeviceName" type:"string"` + + // Set to simple to enable enhanced networking with the Intel 82599 Virtual + // Function interface for the AMI and any instances that you launch from the + // AMI. + // + // There is no way to disable sriovNetSupport at this time. + // + // This option is supported only for HVM AMIs. Specifying this option with a + // PV AMI can make instances launched from the AMI unreachable. + SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` + + // The type of virtualization (hvm | paravirtual). + // + // Default: paravirtual + VirtualizationType *string `locationName:"virtualizationType" type:"string"` } // String returns the string representation -func (s ModifySubnetAttributeInput) String() string { +func (s RegisterImageInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifySubnetAttributeInput) GoString() string { +func (s RegisterImageInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifySubnetAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifySubnetAttributeInput"} - if s.SubnetId == nil { - invalidParams.Add(request.NewErrParamRequired("SubnetId")) +func (s *RegisterImageInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RegisterImageInput"} + if s.Name == nil { + invalidParams.Add(request.NewErrParamRequired("Name")) } if invalidParams.Len() > 0 { @@ -40343,74 +84141,138 @@ func (s *ModifySubnetAttributeInput) Validate() error { return nil } -// SetAssignIpv6AddressOnCreation sets the AssignIpv6AddressOnCreation field's value. -func (s *ModifySubnetAttributeInput) SetAssignIpv6AddressOnCreation(v *AttributeBooleanValue) *ModifySubnetAttributeInput { - s.AssignIpv6AddressOnCreation = v +// SetArchitecture sets the Architecture field's value. +func (s *RegisterImageInput) SetArchitecture(v string) *RegisterImageInput { + s.Architecture = &v + return s +} + +// SetBillingProducts sets the BillingProducts field's value. +func (s *RegisterImageInput) SetBillingProducts(v []*string) *RegisterImageInput { + s.BillingProducts = v + return s +} + +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *RegisterImageInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RegisterImageInput { + s.BlockDeviceMappings = v + return s +} + +// SetDescription sets the Description field's value. +func (s *RegisterImageInput) SetDescription(v string) *RegisterImageInput { + s.Description = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *RegisterImageInput) SetDryRun(v bool) *RegisterImageInput { + s.DryRun = &v + return s +} + +// SetEnaSupport sets the EnaSupport field's value. +func (s *RegisterImageInput) SetEnaSupport(v bool) *RegisterImageInput { + s.EnaSupport = &v + return s +} + +// SetImageLocation sets the ImageLocation field's value. +func (s *RegisterImageInput) SetImageLocation(v string) *RegisterImageInput { + s.ImageLocation = &v + return s +} + +// SetKernelId sets the KernelId field's value. +func (s *RegisterImageInput) SetKernelId(v string) *RegisterImageInput { + s.KernelId = &v + return s +} + +// SetName sets the Name field's value. +func (s *RegisterImageInput) SetName(v string) *RegisterImageInput { + s.Name = &v + return s +} + +// SetRamdiskId sets the RamdiskId field's value. +func (s *RegisterImageInput) SetRamdiskId(v string) *RegisterImageInput { + s.RamdiskId = &v + return s +} + +// SetRootDeviceName sets the RootDeviceName field's value. +func (s *RegisterImageInput) SetRootDeviceName(v string) *RegisterImageInput { + s.RootDeviceName = &v return s } -// SetMapPublicIpOnLaunch sets the MapPublicIpOnLaunch field's value. -func (s *ModifySubnetAttributeInput) SetMapPublicIpOnLaunch(v *AttributeBooleanValue) *ModifySubnetAttributeInput { - s.MapPublicIpOnLaunch = v +// SetSriovNetSupport sets the SriovNetSupport field's value. +func (s *RegisterImageInput) SetSriovNetSupport(v string) *RegisterImageInput { + s.SriovNetSupport = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *ModifySubnetAttributeInput) SetSubnetId(v string) *ModifySubnetAttributeInput { - s.SubnetId = &v +// SetVirtualizationType sets the VirtualizationType field's value. +func (s *RegisterImageInput) SetVirtualizationType(v string) *RegisterImageInput { + s.VirtualizationType = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttributeOutput -type ModifySubnetAttributeOutput struct { +// Contains the output of RegisterImage. +type RegisterImageOutput struct { _ struct{} `type:"structure"` + + // The ID of the newly registered AMI. + ImageId *string `locationName:"imageId" type:"string"` } // String returns the string representation -func (s ModifySubnetAttributeOutput) String() string { +func (s RegisterImageOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifySubnetAttributeOutput) GoString() string { +func (s RegisterImageOutput) GoString() string { return s.String() } -// Contains the parameters for ModifyVolumeAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttributeRequest -type ModifyVolumeAttributeInput struct { - _ struct{} `type:"structure"` +// SetImageId sets the ImageId field's value. +func (s *RegisterImageOutput) SetImageId(v string) *RegisterImageOutput { + s.ImageId = &v + return s +} - // Indicates whether the volume should be auto-enabled for I/O operations. - AutoEnableIO *AttributeBooleanValue `type:"structure"` +type RejectTransitGatewayVpcAttachmentInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the volume. + // The ID of the attachment. // - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` + // TransitGatewayAttachmentId is a required field + TransitGatewayAttachmentId *string `type:"string" required:"true"` } // String returns the string representation -func (s ModifyVolumeAttributeInput) String() string { +func (s RejectTransitGatewayVpcAttachmentInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVolumeAttributeInput) GoString() string { +func (s RejectTransitGatewayVpcAttachmentInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVolumeAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVolumeAttributeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) +func (s *RejectTransitGatewayVpcAttachmentInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RejectTransitGatewayVpcAttachmentInput"} + if s.TransitGatewayAttachmentId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayAttachmentId")) } if invalidParams.Len() > 0 { @@ -40419,41 +84281,42 @@ func (s *ModifyVolumeAttributeInput) Validate() error { return nil } -// SetAutoEnableIO sets the AutoEnableIO field's value. -func (s *ModifyVolumeAttributeInput) SetAutoEnableIO(v *AttributeBooleanValue) *ModifyVolumeAttributeInput { - s.AutoEnableIO = v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *ModifyVolumeAttributeInput) SetDryRun(v bool) *ModifyVolumeAttributeInput { +func (s *RejectTransitGatewayVpcAttachmentInput) SetDryRun(v bool) *RejectTransitGatewayVpcAttachmentInput { s.DryRun = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *ModifyVolumeAttributeInput) SetVolumeId(v string) *ModifyVolumeAttributeInput { - s.VolumeId = &v +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *RejectTransitGatewayVpcAttachmentInput) SetTransitGatewayAttachmentId(v string) *RejectTransitGatewayVpcAttachmentInput { + s.TransitGatewayAttachmentId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttributeOutput -type ModifyVolumeAttributeOutput struct { +type RejectTransitGatewayVpcAttachmentOutput struct { _ struct{} `type:"structure"` + + // Information about the attachment. + TransitGatewayVpcAttachment *TransitGatewayVpcAttachment `locationName:"transitGatewayVpcAttachment" type:"structure"` } // String returns the string representation -func (s ModifyVolumeAttributeOutput) String() string { +func (s RejectTransitGatewayVpcAttachmentOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVolumeAttributeOutput) GoString() string { +func (s RejectTransitGatewayVpcAttachmentOutput) GoString() string { return s.String() } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeRequest -type ModifyVolumeInput struct { +// SetTransitGatewayVpcAttachment sets the TransitGatewayVpcAttachment field's value. +func (s *RejectTransitGatewayVpcAttachmentOutput) SetTransitGatewayVpcAttachment(v *TransitGatewayVpcAttachment) *RejectTransitGatewayVpcAttachmentOutput { + s.TransitGatewayVpcAttachment = v + return s +} + +type RejectVpcEndpointConnectionsInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -40462,48 +84325,35 @@ type ModifyVolumeInput struct { // it is UnauthorizedOperation. DryRun *bool `type:"boolean"` - // Target IOPS rate of the volume to be modified. - // - // Only valid for Provisioned IOPS SSD (io1) volumes. For more information about - // io1 IOPS configuration, see http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_piops - // (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_piops). - Iops *int64 `type:"integer"` - - // Target size in GiB of the volume to be modified. Target volume size must - // be greater than or equal to than the existing size of the volume. For information - // about available EBS volume sizes, see http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html - // (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html). + // The ID of the service. // - // Default: If no size is specified, the existing size is retained. - Size *int64 `type:"integer"` - - // VolumeId is a required field - VolumeId *string `type:"string" required:"true"` + // ServiceId is a required field + ServiceId *string `type:"string" required:"true"` - // Target EBS volume type of the volume to be modified - // - // Valid values are io1 | gp2 | sc1 | st1 + // The IDs of one or more VPC endpoints. // - // The API does not support modifications for volume type standard. You also - // cannot change the type of a volume to standard. - VolumeType *string `type:"string" enum:"VolumeType"` + // VpcEndpointIds is a required field + VpcEndpointIds []*string `locationName:"VpcEndpointId" locationNameList:"item" type:"list" required:"true"` } // String returns the string representation -func (s ModifyVolumeInput) String() string { +func (s RejectVpcEndpointConnectionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVolumeInput) GoString() string { +func (s RejectVpcEndpointConnectionsInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVolumeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVolumeInput"} - if s.VolumeId == nil { - invalidParams.Add(request.NewErrParamRequired("VolumeId")) +func (s *RejectVpcEndpointConnectionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RejectVpcEndpointConnectionsInput"} + if s.ServiceId == nil { + invalidParams.Add(request.NewErrParamRequired("ServiceId")) + } + if s.VpcEndpointIds == nil { + invalidParams.Add(request.NewErrParamRequired("VpcEndpointIds")) } if invalidParams.Len() > 0 { @@ -40513,103 +84363,76 @@ func (s *ModifyVolumeInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *ModifyVolumeInput) SetDryRun(v bool) *ModifyVolumeInput { +func (s *RejectVpcEndpointConnectionsInput) SetDryRun(v bool) *RejectVpcEndpointConnectionsInput { s.DryRun = &v return s } -// SetIops sets the Iops field's value. -func (s *ModifyVolumeInput) SetIops(v int64) *ModifyVolumeInput { - s.Iops = &v - return s -} - -// SetSize sets the Size field's value. -func (s *ModifyVolumeInput) SetSize(v int64) *ModifyVolumeInput { - s.Size = &v - return s -} - -// SetVolumeId sets the VolumeId field's value. -func (s *ModifyVolumeInput) SetVolumeId(v string) *ModifyVolumeInput { - s.VolumeId = &v +// SetServiceId sets the ServiceId field's value. +func (s *RejectVpcEndpointConnectionsInput) SetServiceId(v string) *RejectVpcEndpointConnectionsInput { + s.ServiceId = &v return s } -// SetVolumeType sets the VolumeType field's value. -func (s *ModifyVolumeInput) SetVolumeType(v string) *ModifyVolumeInput { - s.VolumeType = &v +// SetVpcEndpointIds sets the VpcEndpointIds field's value. +func (s *RejectVpcEndpointConnectionsInput) SetVpcEndpointIds(v []*string) *RejectVpcEndpointConnectionsInput { + s.VpcEndpointIds = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeResult -type ModifyVolumeOutput struct { +type RejectVpcEndpointConnectionsOutput struct { _ struct{} `type:"structure"` - // A VolumeModification object. - VolumeModification *VolumeModification `locationName:"volumeModification" type:"structure"` + // Information about the endpoints that were not rejected, if applicable. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` } // String returns the string representation -func (s ModifyVolumeOutput) String() string { +func (s RejectVpcEndpointConnectionsOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVolumeOutput) GoString() string { +func (s RejectVpcEndpointConnectionsOutput) GoString() string { return s.String() } -// SetVolumeModification sets the VolumeModification field's value. -func (s *ModifyVolumeOutput) SetVolumeModification(v *VolumeModification) *ModifyVolumeOutput { - s.VolumeModification = v +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *RejectVpcEndpointConnectionsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *RejectVpcEndpointConnectionsOutput { + s.Unsuccessful = v return s } -// Contains the parameters for ModifyVpcAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttributeRequest -type ModifyVpcAttributeInput struct { +type RejectVpcPeeringConnectionInput struct { _ struct{} `type:"structure"` - // Indicates whether the instances launched in the VPC get DNS hostnames. If - // enabled, instances in the VPC get DNS hostnames; otherwise, they do not. - // - // You cannot modify the DNS resolution and DNS hostnames attributes in the - // same request. Use separate requests for each attribute. You can only enable - // DNS hostnames if you've enabled DNS support. - EnableDnsHostnames *AttributeBooleanValue `type:"structure"` - - // Indicates whether the DNS resolution is supported for the VPC. If enabled, - // queries to the Amazon provided DNS server at the 169.254.169.253 IP address, - // or the reserved IP address at the base of the VPC network range "plus two" - // will succeed. If disabled, the Amazon provided DNS service in the VPC that - // resolves public DNS hostnames to IP addresses is not enabled. - // - // You cannot modify the DNS resolution and DNS hostnames attributes in the - // same request. Use separate requests for each attribute. - EnableDnsSupport *AttributeBooleanValue `type:"structure"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the VPC. + // The ID of the VPC peering connection. // - // VpcId is a required field - VpcId *string `locationName:"vpcId" type:"string" required:"true"` + // VpcPeeringConnectionId is a required field + VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string" required:"true"` } // String returns the string representation -func (s ModifyVpcAttributeInput) String() string { +func (s RejectVpcPeeringConnectionInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVpcAttributeInput) GoString() string { +func (s RejectVpcPeeringConnectionInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcAttributeInput"} - if s.VpcId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcId")) +func (s *RejectVpcPeeringConnectionInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RejectVpcPeeringConnectionInput"} + if s.VpcPeeringConnectionId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) } if invalidParams.Len() > 0 { @@ -40618,191 +84441,202 @@ func (s *ModifyVpcAttributeInput) Validate() error { return nil } -// SetEnableDnsHostnames sets the EnableDnsHostnames field's value. -func (s *ModifyVpcAttributeInput) SetEnableDnsHostnames(v *AttributeBooleanValue) *ModifyVpcAttributeInput { - s.EnableDnsHostnames = v - return s -} - -// SetEnableDnsSupport sets the EnableDnsSupport field's value. -func (s *ModifyVpcAttributeInput) SetEnableDnsSupport(v *AttributeBooleanValue) *ModifyVpcAttributeInput { - s.EnableDnsSupport = v +// SetDryRun sets the DryRun field's value. +func (s *RejectVpcPeeringConnectionInput) SetDryRun(v bool) *RejectVpcPeeringConnectionInput { + s.DryRun = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *ModifyVpcAttributeInput) SetVpcId(v string) *ModifyVpcAttributeInput { - s.VpcId = &v +// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. +func (s *RejectVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *RejectVpcPeeringConnectionInput { + s.VpcPeeringConnectionId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttributeOutput -type ModifyVpcAttributeOutput struct { +type RejectVpcPeeringConnectionOutput struct { _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, it returns an error. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s ModifyVpcAttributeOutput) String() string { +func (s RejectVpcPeeringConnectionOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVpcAttributeOutput) GoString() string { +func (s RejectVpcPeeringConnectionOutput) GoString() string { return s.String() } -// Contains the parameters for ModifyVpcEndpoint. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointRequest -type ModifyVpcEndpointInput struct { +// SetReturn sets the Return field's value. +func (s *RejectVpcPeeringConnectionOutput) SetReturn(v bool) *RejectVpcPeeringConnectionOutput { + s.Return = &v + return s +} + +type ReleaseAddressInput struct { _ struct{} `type:"structure"` - // One or more route tables IDs to associate with the endpoint. - AddRouteTableIds []*string `locationName:"AddRouteTableId" locationNameList:"item" type:"list"` + // [EC2-VPC] The allocation ID. Required for EC2-VPC. + AllocationId *string `type:"string"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` - - // A policy document to attach to the endpoint. The policy must be in valid - // JSON format. - PolicyDocument *string `type:"string"` - - // One or more route table IDs to disassociate from the endpoint. - RemoveRouteTableIds []*string `locationName:"RemoveRouteTableId" locationNameList:"item" type:"list"` - - // Specify true to reset the policy document to the default policy. The default - // policy allows access to the service. - ResetPolicy *bool `type:"boolean"` + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the endpoint. - // - // VpcEndpointId is a required field - VpcEndpointId *string `type:"string" required:"true"` + // [EC2-Classic] The Elastic IP address. Required for EC2-Classic. + PublicIp *string `type:"string"` } // String returns the string representation -func (s ModifyVpcEndpointInput) String() string { +func (s ReleaseAddressInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVpcEndpointInput) GoString() string { +func (s ReleaseAddressInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcEndpointInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcEndpointInput"} - if s.VpcEndpointId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcEndpointId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAddRouteTableIds sets the AddRouteTableIds field's value. -func (s *ModifyVpcEndpointInput) SetAddRouteTableIds(v []*string) *ModifyVpcEndpointInput { - s.AddRouteTableIds = v +// SetAllocationId sets the AllocationId field's value. +func (s *ReleaseAddressInput) SetAllocationId(v string) *ReleaseAddressInput { + s.AllocationId = &v return s } // SetDryRun sets the DryRun field's value. -func (s *ModifyVpcEndpointInput) SetDryRun(v bool) *ModifyVpcEndpointInput { +func (s *ReleaseAddressInput) SetDryRun(v bool) *ReleaseAddressInput { s.DryRun = &v return s } -// SetPolicyDocument sets the PolicyDocument field's value. -func (s *ModifyVpcEndpointInput) SetPolicyDocument(v string) *ModifyVpcEndpointInput { - s.PolicyDocument = &v +// SetPublicIp sets the PublicIp field's value. +func (s *ReleaseAddressInput) SetPublicIp(v string) *ReleaseAddressInput { + s.PublicIp = &v return s } -// SetRemoveRouteTableIds sets the RemoveRouteTableIds field's value. -func (s *ModifyVpcEndpointInput) SetRemoveRouteTableIds(v []*string) *ModifyVpcEndpointInput { - s.RemoveRouteTableIds = v - return s +type ReleaseAddressOutput struct { + _ struct{} `type:"structure"` } -// SetResetPolicy sets the ResetPolicy field's value. -func (s *ModifyVpcEndpointInput) SetResetPolicy(v bool) *ModifyVpcEndpointInput { - s.ResetPolicy = &v - return s +// String returns the string representation +func (s ReleaseAddressOutput) String() string { + return awsutil.Prettify(s) } -// SetVpcEndpointId sets the VpcEndpointId field's value. -func (s *ModifyVpcEndpointInput) SetVpcEndpointId(v string) *ModifyVpcEndpointInput { - s.VpcEndpointId = &v - return s +// GoString returns the string representation +func (s ReleaseAddressOutput) GoString() string { + return s.String() } -// Contains the output of ModifyVpcEndpoint. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointResult -type ModifyVpcEndpointOutput struct { +type ReleaseHostsInput struct { _ struct{} `type:"structure"` - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` + // The IDs of the Dedicated Hosts to release. + // + // HostIds is a required field + HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list" required:"true"` } // String returns the string representation -func (s ModifyVpcEndpointOutput) String() string { +func (s ReleaseHostsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVpcEndpointOutput) GoString() string { +func (s ReleaseHostsInput) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *ModifyVpcEndpointOutput) SetReturn(v bool) *ModifyVpcEndpointOutput { - s.Return = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReleaseHostsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReleaseHostsInput"} + if s.HostIds == nil { + invalidParams.Add(request.NewErrParamRequired("HostIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetHostIds sets the HostIds field's value. +func (s *ReleaseHostsInput) SetHostIds(v []*string) *ReleaseHostsInput { + s.HostIds = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptionsRequest -type ModifyVpcPeeringConnectionOptionsInput struct { +type ReleaseHostsOutput struct { _ struct{} `type:"structure"` - // The VPC peering connection options for the accepter VPC. - AccepterPeeringConnectionOptions *PeeringConnectionOptionsRequest `type:"structure"` + // The IDs of the Dedicated Hosts that were successfully released. + Successful []*string `locationName:"successful" locationNameList:"item" type:"list"` - // Checks whether you have the required permissions for the operation, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // The IDs of the Dedicated Hosts that could not be released, including an error + // message. + Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` +} - // The VPC peering connection options for the requester VPC. - RequesterPeeringConnectionOptions *PeeringConnectionOptionsRequest `type:"structure"` +// String returns the string representation +func (s ReleaseHostsOutput) String() string { + return awsutil.Prettify(s) +} - // The ID of the VPC peering connection. +// GoString returns the string representation +func (s ReleaseHostsOutput) GoString() string { + return s.String() +} + +// SetSuccessful sets the Successful field's value. +func (s *ReleaseHostsOutput) SetSuccessful(v []*string) *ReleaseHostsOutput { + s.Successful = v + return s +} + +// SetUnsuccessful sets the Unsuccessful field's value. +func (s *ReleaseHostsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *ReleaseHostsOutput { + s.Unsuccessful = v + return s +} + +type ReplaceIamInstanceProfileAssociationInput struct { + _ struct{} `type:"structure"` + + // The ID of the existing IAM instance profile association. // - // VpcPeeringConnectionId is a required field - VpcPeeringConnectionId *string `type:"string" required:"true"` + // AssociationId is a required field + AssociationId *string `type:"string" required:"true"` + + // The IAM instance profile. + // + // IamInstanceProfile is a required field + IamInstanceProfile *IamInstanceProfileSpecification `type:"structure" required:"true"` } // String returns the string representation -func (s ModifyVpcPeeringConnectionOptionsInput) String() string { +func (s ReplaceIamInstanceProfileAssociationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVpcPeeringConnectionOptionsInput) GoString() string { +func (s ReplaceIamInstanceProfileAssociationInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ModifyVpcPeeringConnectionOptionsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ModifyVpcPeeringConnectionOptionsInput"} - if s.VpcPeeringConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) +func (s *ReplaceIamInstanceProfileAssociationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplaceIamInstanceProfileAssociationInput"} + if s.AssociationId == nil { + invalidParams.Add(request.NewErrParamRequired("AssociationId")) + } + if s.IamInstanceProfile == nil { + invalidParams.Add(request.NewErrParamRequired("IamInstanceProfile")) } if invalidParams.Len() > 0 { @@ -40811,95 +84645,80 @@ func (s *ModifyVpcPeeringConnectionOptionsInput) Validate() error { return nil } -// SetAccepterPeeringConnectionOptions sets the AccepterPeeringConnectionOptions field's value. -func (s *ModifyVpcPeeringConnectionOptionsInput) SetAccepterPeeringConnectionOptions(v *PeeringConnectionOptionsRequest) *ModifyVpcPeeringConnectionOptionsInput { - s.AccepterPeeringConnectionOptions = v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ModifyVpcPeeringConnectionOptionsInput) SetDryRun(v bool) *ModifyVpcPeeringConnectionOptionsInput { - s.DryRun = &v - return s -} - -// SetRequesterPeeringConnectionOptions sets the RequesterPeeringConnectionOptions field's value. -func (s *ModifyVpcPeeringConnectionOptionsInput) SetRequesterPeeringConnectionOptions(v *PeeringConnectionOptionsRequest) *ModifyVpcPeeringConnectionOptionsInput { - s.RequesterPeeringConnectionOptions = v +// SetAssociationId sets the AssociationId field's value. +func (s *ReplaceIamInstanceProfileAssociationInput) SetAssociationId(v string) *ReplaceIamInstanceProfileAssociationInput { + s.AssociationId = &v return s } -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *ModifyVpcPeeringConnectionOptionsInput) SetVpcPeeringConnectionId(v string) *ModifyVpcPeeringConnectionOptionsInput { - s.VpcPeeringConnectionId = &v +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *ReplaceIamInstanceProfileAssociationInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *ReplaceIamInstanceProfileAssociationInput { + s.IamInstanceProfile = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptionsResult -type ModifyVpcPeeringConnectionOptionsOutput struct { +type ReplaceIamInstanceProfileAssociationOutput struct { _ struct{} `type:"structure"` - // Information about the VPC peering connection options for the accepter VPC. - AccepterPeeringConnectionOptions *PeeringConnectionOptions `locationName:"accepterPeeringConnectionOptions" type:"structure"` - - // Information about the VPC peering connection options for the requester VPC. - RequesterPeeringConnectionOptions *PeeringConnectionOptions `locationName:"requesterPeeringConnectionOptions" type:"structure"` + // Information about the IAM instance profile association. + IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` } // String returns the string representation -func (s ModifyVpcPeeringConnectionOptionsOutput) String() string { +func (s ReplaceIamInstanceProfileAssociationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ModifyVpcPeeringConnectionOptionsOutput) GoString() string { +func (s ReplaceIamInstanceProfileAssociationOutput) GoString() string { return s.String() } -// SetAccepterPeeringConnectionOptions sets the AccepterPeeringConnectionOptions field's value. -func (s *ModifyVpcPeeringConnectionOptionsOutput) SetAccepterPeeringConnectionOptions(v *PeeringConnectionOptions) *ModifyVpcPeeringConnectionOptionsOutput { - s.AccepterPeeringConnectionOptions = v - return s -} - -// SetRequesterPeeringConnectionOptions sets the RequesterPeeringConnectionOptions field's value. -func (s *ModifyVpcPeeringConnectionOptionsOutput) SetRequesterPeeringConnectionOptions(v *PeeringConnectionOptions) *ModifyVpcPeeringConnectionOptionsOutput { - s.RequesterPeeringConnectionOptions = v +// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. +func (s *ReplaceIamInstanceProfileAssociationOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *ReplaceIamInstanceProfileAssociationOutput { + s.IamInstanceProfileAssociation = v return s } -// Contains the parameters for MonitorInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstancesRequest -type MonitorInstancesInput struct { +type ReplaceNetworkAclAssociationInput struct { _ struct{} `type:"structure"` + // The ID of the current association between the original network ACL and the + // subnet. + // + // AssociationId is a required field + AssociationId *string `locationName:"associationId" type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // One or more instance IDs. + // The ID of the new network ACL to associate with the subnet. // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` + // NetworkAclId is a required field + NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` } // String returns the string representation -func (s MonitorInstancesInput) String() string { +func (s ReplaceNetworkAclAssociationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s MonitorInstancesInput) GoString() string { +func (s ReplaceNetworkAclAssociationInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *MonitorInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "MonitorInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) +func (s *ReplaceNetworkAclAssociationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplaceNetworkAclAssociationInput"} + if s.AssociationId == nil { + invalidParams.Add(request.NewErrParamRequired("AssociationId")) + } + if s.NetworkAclId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) } if invalidParams.Len() > 0 { @@ -40908,101 +84727,131 @@ func (s *MonitorInstancesInput) Validate() error { return nil } +// SetAssociationId sets the AssociationId field's value. +func (s *ReplaceNetworkAclAssociationInput) SetAssociationId(v string) *ReplaceNetworkAclAssociationInput { + s.AssociationId = &v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *MonitorInstancesInput) SetDryRun(v bool) *MonitorInstancesInput { +func (s *ReplaceNetworkAclAssociationInput) SetDryRun(v bool) *ReplaceNetworkAclAssociationInput { s.DryRun = &v return s } -// SetInstanceIds sets the InstanceIds field's value. -func (s *MonitorInstancesInput) SetInstanceIds(v []*string) *MonitorInstancesInput { - s.InstanceIds = v +// SetNetworkAclId sets the NetworkAclId field's value. +func (s *ReplaceNetworkAclAssociationInput) SetNetworkAclId(v string) *ReplaceNetworkAclAssociationInput { + s.NetworkAclId = &v return s } -// Contains the output of MonitorInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstancesResult -type MonitorInstancesOutput struct { +type ReplaceNetworkAclAssociationOutput struct { _ struct{} `type:"structure"` - // The monitoring information. - InstanceMonitorings []*InstanceMonitoring `locationName:"instancesSet" locationNameList:"item" type:"list"` + // The ID of the new association. + NewAssociationId *string `locationName:"newAssociationId" type:"string"` } // String returns the string representation -func (s MonitorInstancesOutput) String() string { +func (s ReplaceNetworkAclAssociationOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s MonitorInstancesOutput) GoString() string { +func (s ReplaceNetworkAclAssociationOutput) GoString() string { return s.String() } -// SetInstanceMonitorings sets the InstanceMonitorings field's value. -func (s *MonitorInstancesOutput) SetInstanceMonitorings(v []*InstanceMonitoring) *MonitorInstancesOutput { - s.InstanceMonitorings = v +// SetNewAssociationId sets the NewAssociationId field's value. +func (s *ReplaceNetworkAclAssociationOutput) SetNewAssociationId(v string) *ReplaceNetworkAclAssociationOutput { + s.NewAssociationId = &v return s } -// Describes the monitoring of an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Monitoring -type Monitoring struct { +type ReplaceNetworkAclEntryInput struct { _ struct{} `type:"structure"` - // Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring - // is enabled. - State *string `locationName:"state" type:"string" enum:"MonitoringState"` -} + // The IPv4 network range to allow or deny, in CIDR notation (for example 172.16.0.0/24). + CidrBlock *string `locationName:"cidrBlock" type:"string"` -// String returns the string representation -func (s Monitoring) String() string { - return awsutil.Prettify(s) -} + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` -// GoString returns the string representation -func (s Monitoring) GoString() string { - return s.String() -} + // Indicates whether to replace the egress rule. + // + // Default: If no value is specified, we replace the ingress rule. + // + // Egress is a required field + Egress *bool `locationName:"egress" type:"boolean" required:"true"` -// SetState sets the State field's value. -func (s *Monitoring) SetState(v string) *Monitoring { - s.State = &v - return s -} + // ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying protocol + // 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block. + IcmpTypeCode *IcmpTypeCode `locationName:"Icmp" type:"structure"` + + // The IPv6 network range to allow or deny, in CIDR notation (for example 2001:bd8:1234:1a00::/64). + Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` + + // The ID of the ACL. + // + // NetworkAclId is a required field + NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` -// Contains the parameters for MoveAddressToVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpcRequest -type MoveAddressToVpcInput struct { - _ struct{} `type:"structure"` + // TCP or UDP protocols: The range of ports the rule applies to. Required if + // specifying protocol 6 (TCP) or 17 (UDP). + PortRange *PortRange `locationName:"portRange" type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The protocol number. A value of "-1" means all protocols. If you specify + // "-1" or a protocol number other than "6" (TCP), "17" (UDP), or "1" (ICMP), + // traffic on all ports is allowed, regardless of any ports or ICMP types or + // codes that you specify. If you specify protocol "58" (ICMPv6) and specify + // an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless + // of any that you specify. If you specify protocol "58" (ICMPv6) and specify + // an IPv6 CIDR block, you must specify an ICMP type and code. + // + // Protocol is a required field + Protocol *string `locationName:"protocol" type:"string" required:"true"` - // The Elastic IP address. + // Indicates whether to allow or deny the traffic that matches the rule. // - // PublicIp is a required field - PublicIp *string `locationName:"publicIp" type:"string" required:"true"` + // RuleAction is a required field + RuleAction *string `locationName:"ruleAction" type:"string" required:"true" enum:"RuleAction"` + + // The rule number of the entry to replace. + // + // RuleNumber is a required field + RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` } // String returns the string representation -func (s MoveAddressToVpcInput) String() string { +func (s ReplaceNetworkAclEntryInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s MoveAddressToVpcInput) GoString() string { +func (s ReplaceNetworkAclEntryInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *MoveAddressToVpcInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "MoveAddressToVpcInput"} - if s.PublicIp == nil { - invalidParams.Add(request.NewErrParamRequired("PublicIp")) +func (s *ReplaceNetworkAclEntryInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplaceNetworkAclEntryInput"} + if s.Egress == nil { + invalidParams.Add(request.NewErrParamRequired("Egress")) + } + if s.NetworkAclId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) + } + if s.Protocol == nil { + invalidParams.Add(request.NewErrParamRequired("Protocol")) + } + if s.RuleAction == nil { + invalidParams.Add(request.NewErrParamRequired("RuleAction")) + } + if s.RuleNumber == nil { + invalidParams.Add(request.NewErrParamRequired("RuleNumber")) } if invalidParams.Len() > 0 { @@ -41011,2129 +84860,2290 @@ func (s *MoveAddressToVpcInput) Validate() error { return nil } +// SetCidrBlock sets the CidrBlock field's value. +func (s *ReplaceNetworkAclEntryInput) SetCidrBlock(v string) *ReplaceNetworkAclEntryInput { + s.CidrBlock = &v + return s +} + // SetDryRun sets the DryRun field's value. -func (s *MoveAddressToVpcInput) SetDryRun(v bool) *MoveAddressToVpcInput { +func (s *ReplaceNetworkAclEntryInput) SetDryRun(v bool) *ReplaceNetworkAclEntryInput { s.DryRun = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *MoveAddressToVpcInput) SetPublicIp(v string) *MoveAddressToVpcInput { - s.PublicIp = &v +// SetEgress sets the Egress field's value. +func (s *ReplaceNetworkAclEntryInput) SetEgress(v bool) *ReplaceNetworkAclEntryInput { + s.Egress = &v return s } -// Contains the output of MoveAddressToVpc. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpcResult -type MoveAddressToVpcOutput struct { - _ struct{} `type:"structure"` +// SetIcmpTypeCode sets the IcmpTypeCode field's value. +func (s *ReplaceNetworkAclEntryInput) SetIcmpTypeCode(v *IcmpTypeCode) *ReplaceNetworkAclEntryInput { + s.IcmpTypeCode = v + return s +} - // The allocation ID for the Elastic IP address. - AllocationId *string `locationName:"allocationId" type:"string"` +// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. +func (s *ReplaceNetworkAclEntryInput) SetIpv6CidrBlock(v string) *ReplaceNetworkAclEntryInput { + s.Ipv6CidrBlock = &v + return s +} - // The status of the move of the IP address. - Status *string `locationName:"status" type:"string" enum:"Status"` +// SetNetworkAclId sets the NetworkAclId field's value. +func (s *ReplaceNetworkAclEntryInput) SetNetworkAclId(v string) *ReplaceNetworkAclEntryInput { + s.NetworkAclId = &v + return s } -// String returns the string representation -func (s MoveAddressToVpcOutput) String() string { - return awsutil.Prettify(s) +// SetPortRange sets the PortRange field's value. +func (s *ReplaceNetworkAclEntryInput) SetPortRange(v *PortRange) *ReplaceNetworkAclEntryInput { + s.PortRange = v + return s } -// GoString returns the string representation -func (s MoveAddressToVpcOutput) GoString() string { - return s.String() +// SetProtocol sets the Protocol field's value. +func (s *ReplaceNetworkAclEntryInput) SetProtocol(v string) *ReplaceNetworkAclEntryInput { + s.Protocol = &v + return s } -// SetAllocationId sets the AllocationId field's value. -func (s *MoveAddressToVpcOutput) SetAllocationId(v string) *MoveAddressToVpcOutput { - s.AllocationId = &v +// SetRuleAction sets the RuleAction field's value. +func (s *ReplaceNetworkAclEntryInput) SetRuleAction(v string) *ReplaceNetworkAclEntryInput { + s.RuleAction = &v return s } -// SetStatus sets the Status field's value. -func (s *MoveAddressToVpcOutput) SetStatus(v string) *MoveAddressToVpcOutput { - s.Status = &v +// SetRuleNumber sets the RuleNumber field's value. +func (s *ReplaceNetworkAclEntryInput) SetRuleNumber(v int64) *ReplaceNetworkAclEntryInput { + s.RuleNumber = &v return s } -// Describes the status of a moving Elastic IP address. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MovingAddressStatus -type MovingAddressStatus struct { +type ReplaceNetworkAclEntryOutput struct { _ struct{} `type:"structure"` - - // The status of the Elastic IP address that's being moved to the EC2-VPC platform, - // or restored to the EC2-Classic platform. - MoveStatus *string `locationName:"moveStatus" type:"string" enum:"MoveStatus"` - - // The Elastic IP address. - PublicIp *string `locationName:"publicIp" type:"string"` } // String returns the string representation -func (s MovingAddressStatus) String() string { +func (s ReplaceNetworkAclEntryOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s MovingAddressStatus) GoString() string { +func (s ReplaceNetworkAclEntryOutput) GoString() string { return s.String() } -// SetMoveStatus sets the MoveStatus field's value. -func (s *MovingAddressStatus) SetMoveStatus(v string) *MovingAddressStatus { - s.MoveStatus = &v - return s -} - -// SetPublicIp sets the PublicIp field's value. -func (s *MovingAddressStatus) SetPublicIp(v string) *MovingAddressStatus { - s.PublicIp = &v - return s -} - -// Describes a NAT gateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NatGateway -type NatGateway struct { +type ReplaceRouteInput struct { _ struct{} `type:"structure"` - // The date and time the NAT gateway was created. - CreateTime *time.Time `locationName:"createTime" type:"timestamp" timestampFormat:"iso8601"` + // The IPv4 CIDR address block used for the destination match. The value that + // you provide must match the CIDR of an existing route in the table. + DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - // The date and time the NAT gateway was deleted, if applicable. - DeleteTime *time.Time `locationName:"deleteTime" type:"timestamp" timestampFormat:"iso8601"` + // The IPv6 CIDR address block used for the destination match. The value that + // you provide must match the CIDR of an existing route in the table. + DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` - // If the NAT gateway could not be created, specifies the error code for the - // failure. (InsufficientFreeAddressesInSubnet | Gateway.NotAttached | InvalidAllocationID.NotFound - // | Resource.AlreadyAssociated | InternalError | InvalidSubnetID.NotFound) - FailureCode *string `locationName:"failureCode" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // If the NAT gateway could not be created, specifies the error message for - // the failure, that corresponds to the error code. - // - // * For InsufficientFreeAddressesInSubnet: "Subnet has insufficient free - // addresses to create this NAT gateway" - // - // * For Gateway.NotAttached: "Network vpc-xxxxxxxx has no Internet gateway - // attached" - // - // * For InvalidAllocationID.NotFound: "Elastic IP address eipalloc-xxxxxxxx - // could not be associated with this NAT gateway" - // - // * For Resource.AlreadyAssociated: "Elastic IP address eipalloc-xxxxxxxx - // is already associated" - // - // * For InternalError: "Network interface eni-xxxxxxxx, created and used - // internally by this NAT gateway is in an invalid state. Please try again." - // - // * For InvalidSubnetID.NotFound: "The specified subnet subnet-xxxxxxxx - // does not exist or could not be found." - FailureMessage *string `locationName:"failureMessage" type:"string"` + // [IPv6 traffic only] The ID of an egress-only internet gateway. + EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` - // Information about the IP addresses and network interface associated with - // the NAT gateway. - NatGatewayAddresses []*NatGatewayAddress `locationName:"natGatewayAddressSet" locationNameList:"item" type:"list"` + // The ID of an internet gateway or virtual private gateway. + GatewayId *string `locationName:"gatewayId" type:"string"` - // The ID of the NAT gateway. + // The ID of a NAT instance in your VPC. + InstanceId *string `locationName:"instanceId" type:"string"` + + // [IPv4 traffic only] The ID of a NAT gateway. NatGatewayId *string `locationName:"natGatewayId" type:"string"` - // Reserved. If you need to sustain traffic greater than the documented limits - // (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - ProvisionedBandwidth *ProvisionedBandwidth `locationName:"provisionedBandwidth" type:"structure"` + // The ID of a network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - // The state of the NAT gateway. - // - // * pending: The NAT gateway is being created and is not ready to process - // traffic. - // - // * failed: The NAT gateway could not be created. Check the failureCode - // and failureMessage fields for the reason. - // - // * available: The NAT gateway is able to process traffic. This status remains - // until you delete the NAT gateway, and does not indicate the health of - // the NAT gateway. - // - // * deleting: The NAT gateway is in the process of being terminated and - // may still be processing traffic. + // The ID of the route table. // - // * deleted: The NAT gateway has been terminated and is no longer processing - // traffic. - State *string `locationName:"state" type:"string" enum:"NatGatewayState"` + // RouteTableId is a required field + RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` - // The ID of the subnet in which the NAT gateway is located. - SubnetId *string `locationName:"subnetId" type:"string"` + // The ID of a transit gateway. + TransitGatewayId *string `type:"string"` - // The ID of the VPC in which the NAT gateway is located. - VpcId *string `locationName:"vpcId" type:"string"` + // The ID of a VPC peering connection. + VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` } // String returns the string representation -func (s NatGateway) String() string { +func (s ReplaceRouteInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NatGateway) GoString() string { +func (s ReplaceRouteInput) GoString() string { return s.String() } -// SetCreateTime sets the CreateTime field's value. -func (s *NatGateway) SetCreateTime(v time.Time) *NatGateway { - s.CreateTime = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReplaceRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplaceRouteInput"} + if s.RouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("RouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *ReplaceRouteInput) SetDestinationCidrBlock(v string) *ReplaceRouteInput { + s.DestinationCidrBlock = &v return s } -// SetDeleteTime sets the DeleteTime field's value. -func (s *NatGateway) SetDeleteTime(v time.Time) *NatGateway { - s.DeleteTime = &v +// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. +func (s *ReplaceRouteInput) SetDestinationIpv6CidrBlock(v string) *ReplaceRouteInput { + s.DestinationIpv6CidrBlock = &v return s } -// SetFailureCode sets the FailureCode field's value. -func (s *NatGateway) SetFailureCode(v string) *NatGateway { - s.FailureCode = &v +// SetDryRun sets the DryRun field's value. +func (s *ReplaceRouteInput) SetDryRun(v bool) *ReplaceRouteInput { + s.DryRun = &v return s } -// SetFailureMessage sets the FailureMessage field's value. -func (s *NatGateway) SetFailureMessage(v string) *NatGateway { - s.FailureMessage = &v +// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. +func (s *ReplaceRouteInput) SetEgressOnlyInternetGatewayId(v string) *ReplaceRouteInput { + s.EgressOnlyInternetGatewayId = &v return s } -// SetNatGatewayAddresses sets the NatGatewayAddresses field's value. -func (s *NatGateway) SetNatGatewayAddresses(v []*NatGatewayAddress) *NatGateway { - s.NatGatewayAddresses = v +// SetGatewayId sets the GatewayId field's value. +func (s *ReplaceRouteInput) SetGatewayId(v string) *ReplaceRouteInput { + s.GatewayId = &v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *ReplaceRouteInput) SetInstanceId(v string) *ReplaceRouteInput { + s.InstanceId = &v return s } // SetNatGatewayId sets the NatGatewayId field's value. -func (s *NatGateway) SetNatGatewayId(v string) *NatGateway { +func (s *ReplaceRouteInput) SetNatGatewayId(v string) *ReplaceRouteInput { s.NatGatewayId = &v return s } -// SetProvisionedBandwidth sets the ProvisionedBandwidth field's value. -func (s *NatGateway) SetProvisionedBandwidth(v *ProvisionedBandwidth) *NatGateway { - s.ProvisionedBandwidth = v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *ReplaceRouteInput) SetNetworkInterfaceId(v string) *ReplaceRouteInput { + s.NetworkInterfaceId = &v return s } -// SetState sets the State field's value. -func (s *NatGateway) SetState(v string) *NatGateway { - s.State = &v +// SetRouteTableId sets the RouteTableId field's value. +func (s *ReplaceRouteInput) SetRouteTableId(v string) *ReplaceRouteInput { + s.RouteTableId = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *NatGateway) SetSubnetId(v string) *NatGateway { - s.SubnetId = &v +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *ReplaceRouteInput) SetTransitGatewayId(v string) *ReplaceRouteInput { + s.TransitGatewayId = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *NatGateway) SetVpcId(v string) *NatGateway { - s.VpcId = &v +// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. +func (s *ReplaceRouteInput) SetVpcPeeringConnectionId(v string) *ReplaceRouteInput { + s.VpcPeeringConnectionId = &v return s } -// Describes the IP addresses and network interface associated with a NAT gateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NatGatewayAddress -type NatGatewayAddress struct { +type ReplaceRouteOutput struct { _ struct{} `type:"structure"` +} - // The allocation ID of the Elastic IP address that's associated with the NAT - // gateway. - AllocationId *string `locationName:"allocationId" type:"string"` +// String returns the string representation +func (s ReplaceRouteOutput) String() string { + return awsutil.Prettify(s) +} - // The ID of the network interface associated with the NAT gateway. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` +// GoString returns the string representation +func (s ReplaceRouteOutput) GoString() string { + return s.String() +} - // The private IP address associated with the Elastic IP address. - PrivateIp *string `locationName:"privateIp" type:"string"` +type ReplaceRouteTableAssociationInput struct { + _ struct{} `type:"structure"` - // The Elastic IP address associated with the NAT gateway. - PublicIp *string `locationName:"publicIp" type:"string"` + // The association ID. + // + // AssociationId is a required field + AssociationId *string `locationName:"associationId" type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the new route table to associate with the subnet. + // + // RouteTableId is a required field + RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` } // String returns the string representation -func (s NatGatewayAddress) String() string { +func (s ReplaceRouteTableAssociationInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NatGatewayAddress) GoString() string { +func (s ReplaceRouteTableAssociationInput) GoString() string { return s.String() } -// SetAllocationId sets the AllocationId field's value. -func (s *NatGatewayAddress) SetAllocationId(v string) *NatGatewayAddress { - s.AllocationId = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReplaceRouteTableAssociationInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplaceRouteTableAssociationInput"} + if s.AssociationId == nil { + invalidParams.Add(request.NewErrParamRequired("AssociationId")) + } + if s.RouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("RouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *NatGatewayAddress) SetNetworkInterfaceId(v string) *NatGatewayAddress { - s.NetworkInterfaceId = &v +// SetAssociationId sets the AssociationId field's value. +func (s *ReplaceRouteTableAssociationInput) SetAssociationId(v string) *ReplaceRouteTableAssociationInput { + s.AssociationId = &v return s } -// SetPrivateIp sets the PrivateIp field's value. -func (s *NatGatewayAddress) SetPrivateIp(v string) *NatGatewayAddress { - s.PrivateIp = &v +// SetDryRun sets the DryRun field's value. +func (s *ReplaceRouteTableAssociationInput) SetDryRun(v bool) *ReplaceRouteTableAssociationInput { + s.DryRun = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *NatGatewayAddress) SetPublicIp(v string) *NatGatewayAddress { - s.PublicIp = &v +// SetRouteTableId sets the RouteTableId field's value. +func (s *ReplaceRouteTableAssociationInput) SetRouteTableId(v string) *ReplaceRouteTableAssociationInput { + s.RouteTableId = &v return s } -// Describes a network ACL. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkAcl -type NetworkAcl struct { +type ReplaceRouteTableAssociationOutput struct { _ struct{} `type:"structure"` - // Any associations between the network ACL and one or more subnets - Associations []*NetworkAclAssociation `locationName:"associationSet" locationNameList:"item" type:"list"` + // The ID of the new association. + NewAssociationId *string `locationName:"newAssociationId" type:"string"` +} - // One or more entries (rules) in the network ACL. - Entries []*NetworkAclEntry `locationName:"entrySet" locationNameList:"item" type:"list"` +// String returns the string representation +func (s ReplaceRouteTableAssociationOutput) String() string { + return awsutil.Prettify(s) +} - // Indicates whether this is the default network ACL for the VPC. - IsDefault *bool `locationName:"default" type:"boolean"` +// GoString returns the string representation +func (s ReplaceRouteTableAssociationOutput) GoString() string { + return s.String() +} - // The ID of the network ACL. - NetworkAclId *string `locationName:"networkAclId" type:"string"` +// SetNewAssociationId sets the NewAssociationId field's value. +func (s *ReplaceRouteTableAssociationOutput) SetNewAssociationId(v string) *ReplaceRouteTableAssociationOutput { + s.NewAssociationId = &v + return s +} - // Any tags assigned to the network ACL. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` +type ReplaceTransitGatewayRouteInput struct { + _ struct{} `type:"structure"` - // The ID of the VPC for the network ACL. - VpcId *string `locationName:"vpcId" type:"string"` + // Indicates whether traffic matching this route is to be dropped. + Blackhole *bool `type:"boolean"` + + // The CIDR range used for the destination match. Routing decisions are based + // on the most specific match. + // + // DestinationCidrBlock is a required field + DestinationCidrBlock *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the attachment. + TransitGatewayAttachmentId *string `type:"string"` + + // The ID of the route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s NetworkAcl) String() string { +func (s ReplaceTransitGatewayRouteInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NetworkAcl) GoString() string { +func (s ReplaceTransitGatewayRouteInput) GoString() string { return s.String() } -// SetAssociations sets the Associations field's value. -func (s *NetworkAcl) SetAssociations(v []*NetworkAclAssociation) *NetworkAcl { - s.Associations = v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReplaceTransitGatewayRouteInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReplaceTransitGatewayRouteInput"} + if s.DestinationCidrBlock == nil { + invalidParams.Add(request.NewErrParamRequired("DestinationCidrBlock")) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetEntries sets the Entries field's value. -func (s *NetworkAcl) SetEntries(v []*NetworkAclEntry) *NetworkAcl { - s.Entries = v +// SetBlackhole sets the Blackhole field's value. +func (s *ReplaceTransitGatewayRouteInput) SetBlackhole(v bool) *ReplaceTransitGatewayRouteInput { + s.Blackhole = &v return s } -// SetIsDefault sets the IsDefault field's value. -func (s *NetworkAcl) SetIsDefault(v bool) *NetworkAcl { - s.IsDefault = &v +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *ReplaceTransitGatewayRouteInput) SetDestinationCidrBlock(v string) *ReplaceTransitGatewayRouteInput { + s.DestinationCidrBlock = &v return s } -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *NetworkAcl) SetNetworkAclId(v string) *NetworkAcl { - s.NetworkAclId = &v +// SetDryRun sets the DryRun field's value. +func (s *ReplaceTransitGatewayRouteInput) SetDryRun(v bool) *ReplaceTransitGatewayRouteInput { + s.DryRun = &v return s } -// SetTags sets the Tags field's value. -func (s *NetworkAcl) SetTags(v []*Tag) *NetworkAcl { - s.Tags = v +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *ReplaceTransitGatewayRouteInput) SetTransitGatewayAttachmentId(v string) *ReplaceTransitGatewayRouteInput { + s.TransitGatewayAttachmentId = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *NetworkAcl) SetVpcId(v string) *NetworkAcl { - s.VpcId = &v +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *ReplaceTransitGatewayRouteInput) SetTransitGatewayRouteTableId(v string) *ReplaceTransitGatewayRouteInput { + s.TransitGatewayRouteTableId = &v return s } -// Describes an association between a network ACL and a subnet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkAclAssociation -type NetworkAclAssociation struct { +type ReplaceTransitGatewayRouteOutput struct { _ struct{} `type:"structure"` - // The ID of the association between a network ACL and a subnet. - NetworkAclAssociationId *string `locationName:"networkAclAssociationId" type:"string"` - - // The ID of the network ACL. - NetworkAclId *string `locationName:"networkAclId" type:"string"` - - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` + // Information about the modified route. + Route *TransitGatewayRoute `locationName:"route" type:"structure"` } // String returns the string representation -func (s NetworkAclAssociation) String() string { +func (s ReplaceTransitGatewayRouteOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NetworkAclAssociation) GoString() string { +func (s ReplaceTransitGatewayRouteOutput) GoString() string { return s.String() } -// SetNetworkAclAssociationId sets the NetworkAclAssociationId field's value. -func (s *NetworkAclAssociation) SetNetworkAclAssociationId(v string) *NetworkAclAssociation { - s.NetworkAclAssociationId = &v - return s -} - -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *NetworkAclAssociation) SetNetworkAclId(v string) *NetworkAclAssociation { - s.NetworkAclId = &v - return s -} - -// SetSubnetId sets the SubnetId field's value. -func (s *NetworkAclAssociation) SetSubnetId(v string) *NetworkAclAssociation { - s.SubnetId = &v +// SetRoute sets the Route field's value. +func (s *ReplaceTransitGatewayRouteOutput) SetRoute(v *TransitGatewayRoute) *ReplaceTransitGatewayRouteOutput { + s.Route = v return s } -// Describes an entry in a network ACL. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkAclEntry -type NetworkAclEntry struct { +type ReportInstanceStatusInput struct { _ struct{} `type:"structure"` - // The IPv4 network range to allow or deny, in CIDR notation. - CidrBlock *string `locationName:"cidrBlock" type:"string"` - - // Indicates whether the rule is an egress rule (applied to traffic leaving - // the subnet). - Egress *bool `locationName:"egress" type:"boolean"` + // Descriptive text about the health state of your instance. + Description *string `locationName:"description" type:"string"` - // ICMP protocol: The ICMP type and code. - IcmpTypeCode *IcmpTypeCode `locationName:"icmpTypeCode" type:"structure"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The IPv6 network range to allow or deny, in CIDR notation. - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` + // The time at which the reported instance health state ended. + EndTime *time.Time `locationName:"endTime" type:"timestamp"` - // TCP or UDP protocols: The range of ports the rule applies to. - PortRange *PortRange `locationName:"portRange" type:"structure"` + // The instances. + // + // Instances is a required field + Instances []*string `locationName:"instanceId" locationNameList:"InstanceId" type:"list" required:"true"` - // The protocol. A value of -1 means all protocols. - Protocol *string `locationName:"protocol" type:"string"` + // The reason codes that describe the health state of your instance. + // + // * instance-stuck-in-state: My instance is stuck in a state. + // + // * unresponsive: My instance is unresponsive. + // + // * not-accepting-credentials: My instance is not accepting my credentials. + // + // * password-not-available: A password is not available for my instance. + // + // * performance-network: My instance is experiencing performance problems + // that I believe are network related. + // + // * performance-instance-store: My instance is experiencing performance + // problems that I believe are related to the instance stores. + // + // * performance-ebs-volume: My instance is experiencing performance problems + // that I believe are related to an EBS volume. + // + // * performance-other: My instance is experiencing performance problems. + // + // * other: [explain using the description parameter] + // + // ReasonCodes is a required field + ReasonCodes []*string `locationName:"reasonCode" locationNameList:"item" type:"list" required:"true"` - // Indicates whether to allow or deny the traffic that matches the rule. - RuleAction *string `locationName:"ruleAction" type:"string" enum:"RuleAction"` + // The time at which the reported instance health state began. + StartTime *time.Time `locationName:"startTime" type:"timestamp"` - // The rule number for the entry. ACL entries are processed in ascending order - // by rule number. - RuleNumber *int64 `locationName:"ruleNumber" type:"integer"` + // The status of all instances listed. + // + // Status is a required field + Status *string `locationName:"status" type:"string" required:"true" enum:"ReportStatusType"` } // String returns the string representation -func (s NetworkAclEntry) String() string { +func (s ReportInstanceStatusInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NetworkAclEntry) GoString() string { +func (s ReportInstanceStatusInput) GoString() string { return s.String() } -// SetCidrBlock sets the CidrBlock field's value. -func (s *NetworkAclEntry) SetCidrBlock(v string) *NetworkAclEntry { - s.CidrBlock = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *ReportInstanceStatusInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ReportInstanceStatusInput"} + if s.Instances == nil { + invalidParams.Add(request.NewErrParamRequired("Instances")) + } + if s.ReasonCodes == nil { + invalidParams.Add(request.NewErrParamRequired("ReasonCodes")) + } + if s.Status == nil { + invalidParams.Add(request.NewErrParamRequired("Status")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetEgress sets the Egress field's value. -func (s *NetworkAclEntry) SetEgress(v bool) *NetworkAclEntry { - s.Egress = &v +// SetDescription sets the Description field's value. +func (s *ReportInstanceStatusInput) SetDescription(v string) *ReportInstanceStatusInput { + s.Description = &v return s } -// SetIcmpTypeCode sets the IcmpTypeCode field's value. -func (s *NetworkAclEntry) SetIcmpTypeCode(v *IcmpTypeCode) *NetworkAclEntry { - s.IcmpTypeCode = v +// SetDryRun sets the DryRun field's value. +func (s *ReportInstanceStatusInput) SetDryRun(v bool) *ReportInstanceStatusInput { + s.DryRun = &v return s } -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *NetworkAclEntry) SetIpv6CidrBlock(v string) *NetworkAclEntry { - s.Ipv6CidrBlock = &v +// SetEndTime sets the EndTime field's value. +func (s *ReportInstanceStatusInput) SetEndTime(v time.Time) *ReportInstanceStatusInput { + s.EndTime = &v return s } -// SetPortRange sets the PortRange field's value. -func (s *NetworkAclEntry) SetPortRange(v *PortRange) *NetworkAclEntry { - s.PortRange = v +// SetInstances sets the Instances field's value. +func (s *ReportInstanceStatusInput) SetInstances(v []*string) *ReportInstanceStatusInput { + s.Instances = v return s } -// SetProtocol sets the Protocol field's value. -func (s *NetworkAclEntry) SetProtocol(v string) *NetworkAclEntry { - s.Protocol = &v +// SetReasonCodes sets the ReasonCodes field's value. +func (s *ReportInstanceStatusInput) SetReasonCodes(v []*string) *ReportInstanceStatusInput { + s.ReasonCodes = v return s } -// SetRuleAction sets the RuleAction field's value. -func (s *NetworkAclEntry) SetRuleAction(v string) *NetworkAclEntry { - s.RuleAction = &v +// SetStartTime sets the StartTime field's value. +func (s *ReportInstanceStatusInput) SetStartTime(v time.Time) *ReportInstanceStatusInput { + s.StartTime = &v return s } -// SetRuleNumber sets the RuleNumber field's value. -func (s *NetworkAclEntry) SetRuleNumber(v int64) *NetworkAclEntry { - s.RuleNumber = &v +// SetStatus sets the Status field's value. +func (s *ReportInstanceStatusInput) SetStatus(v string) *ReportInstanceStatusInput { + s.Status = &v return s } -// Describes a network interface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterface -type NetworkInterface struct { +type ReportInstanceStatusOutput struct { _ struct{} `type:"structure"` +} - // The association information for an Elastic IP address (IPv4) associated with - // the network interface. - Association *NetworkInterfaceAssociation `locationName:"association" type:"structure"` +// String returns the string representation +func (s ReportInstanceStatusOutput) String() string { + return awsutil.Prettify(s) +} - // The network interface attachment. - Attachment *NetworkInterfaceAttachment `locationName:"attachment" type:"structure"` +// GoString returns the string representation +func (s ReportInstanceStatusOutput) GoString() string { + return s.String() +} - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` +// The information to include in the launch template. +type RequestLaunchTemplateData struct { + _ struct{} `type:"structure"` - // A description. - Description *string `locationName:"description" type:"string"` + // The block device mapping. + // + // Supplying both a snapshot ID and an encryption value as arguments for block-device + // mapping results in an error. This is because only blank volumes can be encrypted + // on start, and these are not created from a snapshot. If a snapshot is the + // basis for the volume, it contains data by definition and its encryption status + // cannot be changed using this action. + BlockDeviceMappings []*LaunchTemplateBlockDeviceMappingRequest `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - // Any security groups for the network interface. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + // The Capacity Reservation targeting option. If you do not specify this parameter, + // the instance's Capacity Reservation preference defaults to open, which enables + // it to run in any open Capacity Reservation that has matching attributes (instance + // type, platform, Availability Zone). + CapacityReservationSpecification *LaunchTemplateCapacityReservationSpecificationRequest `type:"structure"` - // The type of interface. - InterfaceType *string `locationName:"interfaceType" type:"string" enum:"NetworkInterfaceType"` + // The CPU options for the instance. For more information, see Optimizing CPU + // Options (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) + // in the Amazon Elastic Compute Cloud User Guide. + CpuOptions *LaunchTemplateCpuOptionsRequest `type:"structure"` - // The IPv6 addresses associated with the network interface. - Ipv6Addresses []*NetworkInterfaceIpv6Address `locationName:"ipv6AddressesSet" locationNameList:"item" type:"list"` + // The credit option for CPU usage of the instance. Valid for T2 or T3 instances + // only. + CreditSpecification *CreditSpecificationRequest `type:"structure"` - // The MAC address. - MacAddress *string `locationName:"macAddress" type:"string"` + // If you set this parameter to true, you can't terminate the instance using + // the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute + // after launch, use ModifyInstanceAttribute (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html). + // Alternatively, if you set InstanceInitiatedShutdownBehavior to terminate, + // you can terminate the instance by running the shutdown command from the instance. + DisableApiTermination *bool `type:"boolean"` - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + // Indicates whether the instance is optimized for Amazon EBS I/O. This optimization + // provides dedicated throughput to Amazon EBS and an optimized configuration + // stack to provide optimal Amazon EBS I/O performance. This optimization isn't + // available with all instance types. Additional usage charges apply when using + // an EBS-optimized instance. + EbsOptimized *bool `type:"boolean"` - // The AWS account ID of the owner of the network interface. - OwnerId *string `locationName:"ownerId" type:"string"` + // An elastic GPU to associate with the instance. + ElasticGpuSpecifications []*ElasticGpuSpecification `locationName:"ElasticGpuSpecification" locationNameList:"ElasticGpuSpecification" type:"list"` - // The private DNS name. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` + // The elastic inference accelerator for the instance. + ElasticInferenceAccelerators []*LaunchTemplateElasticInferenceAccelerator `locationName:"ElasticInferenceAccelerator" locationNameList:"item" type:"list"` - // The IPv4 address of the network interface within the subnet. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + // Indicates whether an instance is enabled for hibernation. This parameter + // is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites). + // For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) + // in the Amazon Elastic Compute Cloud User Guide. + HibernationOptions *LaunchTemplateHibernationOptionsRequest `type:"structure"` - // The private IPv4 addresses associated with the network interface. - PrivateIpAddresses []*NetworkInterfacePrivateIpAddress `locationName:"privateIpAddressesSet" locationNameList:"item" type:"list"` + // The IAM instance profile. + IamInstanceProfile *LaunchTemplateIamInstanceProfileSpecificationRequest `type:"structure"` - // The ID of the entity that launched the instance on your behalf (for example, - // AWS Management Console or Auto Scaling). - RequesterId *string `locationName:"requesterId" type:"string"` + // The ID of the AMI. + ImageId *string `type:"string"` - // Indicates whether the network interface is being managed by AWS. - RequesterManaged *bool `locationName:"requesterManaged" type:"boolean"` + // Indicates whether an instance stops or terminates when you initiate shutdown + // from the instance (using the operating system command for system shutdown). + // + // Default: stop + InstanceInitiatedShutdownBehavior *string `type:"string" enum:"ShutdownBehavior"` - // Indicates whether traffic to or from the instance is validated. - SourceDestCheck *bool `locationName:"sourceDestCheck" type:"boolean"` + // The market (purchasing) option for the instances. + InstanceMarketOptions *LaunchTemplateInstanceMarketOptionsRequest `type:"structure"` - // The status of the network interface. - Status *string `locationName:"status" type:"string" enum:"NetworkInterfaceStatus"` + // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) + // in the Amazon Elastic Compute Cloud User Guide. + InstanceType *string `type:"string" enum:"InstanceType"` - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` + // The ID of the kernel. + // + // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more + // information, see User Provided Kernels (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) + // in the Amazon Elastic Compute Cloud User Guide. + KernelId *string `type:"string"` - // Any tags assigned to the network interface. - TagSet []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The name of the key pair. You can create a key pair using CreateKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html) + // or ImportKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html). + // + // If you do not specify a key pair, you can't connect to the instance unless + // you choose an AMI that is configured to allow users another way to log in. + KeyName *string `type:"string"` - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` + // The license configurations. + LicenseSpecifications []*LaunchTemplateLicenseConfigurationRequest `locationName:"LicenseSpecification" locationNameList:"item" type:"list"` + + // The monitoring for the instance. + Monitoring *LaunchTemplatesMonitoringRequest `type:"structure"` + + // One or more network interfaces. If you specify a network interface, you must + // specify any security groups and subnets as part of the network interface. + NetworkInterfaces []*LaunchTemplateInstanceNetworkInterfaceSpecificationRequest `locationName:"NetworkInterface" locationNameList:"InstanceNetworkInterfaceSpecification" type:"list"` + + // The placement for the instance. + Placement *LaunchTemplatePlacementRequest `type:"structure"` + + // The ID of the RAM disk. + // + // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more + // information, see User Provided Kernels (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) + // in the Amazon Elastic Compute Cloud User Guide. + RamDiskId *string `type:"string"` + + // One or more security group IDs. You can create a security group using CreateSecurityGroup + // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html). + // You cannot specify both a security group ID and security name in the same + // request. + SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + + // [EC2-Classic, default VPC] One or more security group names. For a nondefault + // VPC, you must use security group IDs instead. You cannot specify both a security + // group ID and security name in the same request. + SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"SecurityGroup" type:"list"` + + // The tags to apply to the resources during launch. You can only tag instances + // and volumes on launch. The specified tags are applied to all instances or + // volumes that are created during launch. To tag a resource after it has been + // created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). + TagSpecifications []*LaunchTemplateTagSpecificationRequest `locationName:"TagSpecification" locationNameList:"LaunchTemplateTagSpecificationRequest" type:"list"` + + // The Base64-encoded user data to make available to the instance. For more + // information, see Running Commands on Your Linux Instance at Launch (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) + // (Linux) and Adding User Data (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data) + // (Windows). + UserData *string `type:"string"` } // String returns the string representation -func (s NetworkInterface) String() string { +func (s RequestLaunchTemplateData) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NetworkInterface) GoString() string { +func (s RequestLaunchTemplateData) GoString() string { return s.String() } -// SetAssociation sets the Association field's value. -func (s *NetworkInterface) SetAssociation(v *NetworkInterfaceAssociation) *NetworkInterface { - s.Association = v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *RequestLaunchTemplateData) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RequestLaunchTemplateData"} + if s.CreditSpecification != nil { + if err := s.CreditSpecification.Validate(); err != nil { + invalidParams.AddNested("CreditSpecification", err.(request.ErrInvalidParams)) + } + } + if s.ElasticGpuSpecifications != nil { + for i, v := range s.ElasticGpuSpecifications { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ElasticGpuSpecifications", i), err.(request.ErrInvalidParams)) + } + } + } + if s.ElasticInferenceAccelerators != nil { + for i, v := range s.ElasticInferenceAccelerators { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ElasticInferenceAccelerators", i), err.(request.ErrInvalidParams)) + } + } + } -// SetAttachment sets the Attachment field's value. -func (s *NetworkInterface) SetAttachment(v *NetworkInterfaceAttachment) *NetworkInterface { - s.Attachment = v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *NetworkInterface) SetAvailabilityZone(v string) *NetworkInterface { - s.AvailabilityZone = &v +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *RequestLaunchTemplateData) SetBlockDeviceMappings(v []*LaunchTemplateBlockDeviceMappingRequest) *RequestLaunchTemplateData { + s.BlockDeviceMappings = v return s } -// SetDescription sets the Description field's value. -func (s *NetworkInterface) SetDescription(v string) *NetworkInterface { - s.Description = &v +// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. +func (s *RequestLaunchTemplateData) SetCapacityReservationSpecification(v *LaunchTemplateCapacityReservationSpecificationRequest) *RequestLaunchTemplateData { + s.CapacityReservationSpecification = v return s } -// SetGroups sets the Groups field's value. -func (s *NetworkInterface) SetGroups(v []*GroupIdentifier) *NetworkInterface { - s.Groups = v +// SetCpuOptions sets the CpuOptions field's value. +func (s *RequestLaunchTemplateData) SetCpuOptions(v *LaunchTemplateCpuOptionsRequest) *RequestLaunchTemplateData { + s.CpuOptions = v return s } -// SetInterfaceType sets the InterfaceType field's value. -func (s *NetworkInterface) SetInterfaceType(v string) *NetworkInterface { - s.InterfaceType = &v +// SetCreditSpecification sets the CreditSpecification field's value. +func (s *RequestLaunchTemplateData) SetCreditSpecification(v *CreditSpecificationRequest) *RequestLaunchTemplateData { + s.CreditSpecification = v return s } -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *NetworkInterface) SetIpv6Addresses(v []*NetworkInterfaceIpv6Address) *NetworkInterface { - s.Ipv6Addresses = v +// SetDisableApiTermination sets the DisableApiTermination field's value. +func (s *RequestLaunchTemplateData) SetDisableApiTermination(v bool) *RequestLaunchTemplateData { + s.DisableApiTermination = &v return s } -// SetMacAddress sets the MacAddress field's value. -func (s *NetworkInterface) SetMacAddress(v string) *NetworkInterface { - s.MacAddress = &v +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *RequestLaunchTemplateData) SetEbsOptimized(v bool) *RequestLaunchTemplateData { + s.EbsOptimized = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *NetworkInterface) SetNetworkInterfaceId(v string) *NetworkInterface { - s.NetworkInterfaceId = &v +// SetElasticGpuSpecifications sets the ElasticGpuSpecifications field's value. +func (s *RequestLaunchTemplateData) SetElasticGpuSpecifications(v []*ElasticGpuSpecification) *RequestLaunchTemplateData { + s.ElasticGpuSpecifications = v return s } -// SetOwnerId sets the OwnerId field's value. -func (s *NetworkInterface) SetOwnerId(v string) *NetworkInterface { - s.OwnerId = &v +// SetElasticInferenceAccelerators sets the ElasticInferenceAccelerators field's value. +func (s *RequestLaunchTemplateData) SetElasticInferenceAccelerators(v []*LaunchTemplateElasticInferenceAccelerator) *RequestLaunchTemplateData { + s.ElasticInferenceAccelerators = v return s } -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *NetworkInterface) SetPrivateDnsName(v string) *NetworkInterface { - s.PrivateDnsName = &v +// SetHibernationOptions sets the HibernationOptions field's value. +func (s *RequestLaunchTemplateData) SetHibernationOptions(v *LaunchTemplateHibernationOptionsRequest) *RequestLaunchTemplateData { + s.HibernationOptions = v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *NetworkInterface) SetPrivateIpAddress(v string) *NetworkInterface { - s.PrivateIpAddress = &v +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *RequestLaunchTemplateData) SetIamInstanceProfile(v *LaunchTemplateIamInstanceProfileSpecificationRequest) *RequestLaunchTemplateData { + s.IamInstanceProfile = v return s } -// SetPrivateIpAddresses sets the PrivateIpAddresses field's value. -func (s *NetworkInterface) SetPrivateIpAddresses(v []*NetworkInterfacePrivateIpAddress) *NetworkInterface { - s.PrivateIpAddresses = v +// SetImageId sets the ImageId field's value. +func (s *RequestLaunchTemplateData) SetImageId(v string) *RequestLaunchTemplateData { + s.ImageId = &v return s } -// SetRequesterId sets the RequesterId field's value. -func (s *NetworkInterface) SetRequesterId(v string) *NetworkInterface { - s.RequesterId = &v +// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. +func (s *RequestLaunchTemplateData) SetInstanceInitiatedShutdownBehavior(v string) *RequestLaunchTemplateData { + s.InstanceInitiatedShutdownBehavior = &v return s } -// SetRequesterManaged sets the RequesterManaged field's value. -func (s *NetworkInterface) SetRequesterManaged(v bool) *NetworkInterface { - s.RequesterManaged = &v +// SetInstanceMarketOptions sets the InstanceMarketOptions field's value. +func (s *RequestLaunchTemplateData) SetInstanceMarketOptions(v *LaunchTemplateInstanceMarketOptionsRequest) *RequestLaunchTemplateData { + s.InstanceMarketOptions = v return s } -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *NetworkInterface) SetSourceDestCheck(v bool) *NetworkInterface { - s.SourceDestCheck = &v +// SetInstanceType sets the InstanceType field's value. +func (s *RequestLaunchTemplateData) SetInstanceType(v string) *RequestLaunchTemplateData { + s.InstanceType = &v return s } -// SetStatus sets the Status field's value. -func (s *NetworkInterface) SetStatus(v string) *NetworkInterface { - s.Status = &v +// SetKernelId sets the KernelId field's value. +func (s *RequestLaunchTemplateData) SetKernelId(v string) *RequestLaunchTemplateData { + s.KernelId = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *NetworkInterface) SetSubnetId(v string) *NetworkInterface { - s.SubnetId = &v +// SetKeyName sets the KeyName field's value. +func (s *RequestLaunchTemplateData) SetKeyName(v string) *RequestLaunchTemplateData { + s.KeyName = &v return s } -// SetTagSet sets the TagSet field's value. -func (s *NetworkInterface) SetTagSet(v []*Tag) *NetworkInterface { - s.TagSet = v +// SetLicenseSpecifications sets the LicenseSpecifications field's value. +func (s *RequestLaunchTemplateData) SetLicenseSpecifications(v []*LaunchTemplateLicenseConfigurationRequest) *RequestLaunchTemplateData { + s.LicenseSpecifications = v return s } -// SetVpcId sets the VpcId field's value. -func (s *NetworkInterface) SetVpcId(v string) *NetworkInterface { - s.VpcId = &v +// SetMonitoring sets the Monitoring field's value. +func (s *RequestLaunchTemplateData) SetMonitoring(v *LaunchTemplatesMonitoringRequest) *RequestLaunchTemplateData { + s.Monitoring = v return s } -// Describes association information for an Elastic IP address (IPv4 only). -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceAssociation -type NetworkInterfaceAssociation struct { - _ struct{} `type:"structure"` - - // The allocation ID. - AllocationId *string `locationName:"allocationId" type:"string"` - - // The association ID. - AssociationId *string `locationName:"associationId" type:"string"` - - // The ID of the Elastic IP address owner. - IpOwnerId *string `locationName:"ipOwnerId" type:"string"` - - // The public DNS name. - PublicDnsName *string `locationName:"publicDnsName" type:"string"` - - // The address of the Elastic IP address bound to the network interface. - PublicIp *string `locationName:"publicIp" type:"string"` -} - -// String returns the string representation -func (s NetworkInterfaceAssociation) String() string { - return awsutil.Prettify(s) +// SetNetworkInterfaces sets the NetworkInterfaces field's value. +func (s *RequestLaunchTemplateData) SetNetworkInterfaces(v []*LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) *RequestLaunchTemplateData { + s.NetworkInterfaces = v + return s } -// GoString returns the string representation -func (s NetworkInterfaceAssociation) GoString() string { - return s.String() +// SetPlacement sets the Placement field's value. +func (s *RequestLaunchTemplateData) SetPlacement(v *LaunchTemplatePlacementRequest) *RequestLaunchTemplateData { + s.Placement = v + return s } -// SetAllocationId sets the AllocationId field's value. -func (s *NetworkInterfaceAssociation) SetAllocationId(v string) *NetworkInterfaceAssociation { - s.AllocationId = &v +// SetRamDiskId sets the RamDiskId field's value. +func (s *RequestLaunchTemplateData) SetRamDiskId(v string) *RequestLaunchTemplateData { + s.RamDiskId = &v return s } -// SetAssociationId sets the AssociationId field's value. -func (s *NetworkInterfaceAssociation) SetAssociationId(v string) *NetworkInterfaceAssociation { - s.AssociationId = &v +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *RequestLaunchTemplateData) SetSecurityGroupIds(v []*string) *RequestLaunchTemplateData { + s.SecurityGroupIds = v return s } -// SetIpOwnerId sets the IpOwnerId field's value. -func (s *NetworkInterfaceAssociation) SetIpOwnerId(v string) *NetworkInterfaceAssociation { - s.IpOwnerId = &v +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *RequestLaunchTemplateData) SetSecurityGroups(v []*string) *RequestLaunchTemplateData { + s.SecurityGroups = v return s } -// SetPublicDnsName sets the PublicDnsName field's value. -func (s *NetworkInterfaceAssociation) SetPublicDnsName(v string) *NetworkInterfaceAssociation { - s.PublicDnsName = &v +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *RequestLaunchTemplateData) SetTagSpecifications(v []*LaunchTemplateTagSpecificationRequest) *RequestLaunchTemplateData { + s.TagSpecifications = v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *NetworkInterfaceAssociation) SetPublicIp(v string) *NetworkInterfaceAssociation { - s.PublicIp = &v +// SetUserData sets the UserData field's value. +func (s *RequestLaunchTemplateData) SetUserData(v string) *RequestLaunchTemplateData { + s.UserData = &v return s } -// Describes a network interface attachment. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceAttachment -type NetworkInterfaceAttachment struct { +// Contains the parameters for RequestSpotFleet. +type RequestSpotFleetInput struct { _ struct{} `type:"structure"` - // The timestamp indicating when the attachment initiated. - AttachTime *time.Time `locationName:"attachTime" type:"timestamp" timestampFormat:"iso8601"` - - // The ID of the network interface attachment. - AttachmentId *string `locationName:"attachmentId" type:"string"` - - // Indicates whether the network interface is deleted when the instance is terminated. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` - - // The device index of the network interface attachment on the instance. - DeviceIndex *int64 `locationName:"deviceIndex" type:"integer"` - - // The ID of the instance. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The AWS account ID of the owner of the instance. - InstanceOwnerId *string `locationName:"instanceOwnerId" type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The attachment state. - Status *string `locationName:"status" type:"string" enum:"AttachmentStatus"` + // The configuration for the Spot Fleet request. + // + // SpotFleetRequestConfig is a required field + SpotFleetRequestConfig *SpotFleetRequestConfigData `locationName:"spotFleetRequestConfig" type:"structure" required:"true"` } // String returns the string representation -func (s NetworkInterfaceAttachment) String() string { +func (s RequestSpotFleetInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NetworkInterfaceAttachment) GoString() string { +func (s RequestSpotFleetInput) GoString() string { return s.String() } -// SetAttachTime sets the AttachTime field's value. -func (s *NetworkInterfaceAttachment) SetAttachTime(v time.Time) *NetworkInterfaceAttachment { - s.AttachTime = &v - return s -} - -// SetAttachmentId sets the AttachmentId field's value. -func (s *NetworkInterfaceAttachment) SetAttachmentId(v string) *NetworkInterfaceAttachment { - s.AttachmentId = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *NetworkInterfaceAttachment) SetDeleteOnTermination(v bool) *NetworkInterfaceAttachment { - s.DeleteOnTermination = &v - return s -} - -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *NetworkInterfaceAttachment) SetDeviceIndex(v int64) *NetworkInterfaceAttachment { - s.DeviceIndex = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *RequestSpotFleetInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RequestSpotFleetInput"} + if s.SpotFleetRequestConfig == nil { + invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestConfig")) + } + if s.SpotFleetRequestConfig != nil { + if err := s.SpotFleetRequestConfig.Validate(); err != nil { + invalidParams.AddNested("SpotFleetRequestConfig", err.(request.ErrInvalidParams)) + } + } -// SetInstanceId sets the InstanceId field's value. -func (s *NetworkInterfaceAttachment) SetInstanceId(v string) *NetworkInterfaceAttachment { - s.InstanceId = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetInstanceOwnerId sets the InstanceOwnerId field's value. -func (s *NetworkInterfaceAttachment) SetInstanceOwnerId(v string) *NetworkInterfaceAttachment { - s.InstanceOwnerId = &v +// SetDryRun sets the DryRun field's value. +func (s *RequestSpotFleetInput) SetDryRun(v bool) *RequestSpotFleetInput { + s.DryRun = &v return s } -// SetStatus sets the Status field's value. -func (s *NetworkInterfaceAttachment) SetStatus(v string) *NetworkInterfaceAttachment { - s.Status = &v +// SetSpotFleetRequestConfig sets the SpotFleetRequestConfig field's value. +func (s *RequestSpotFleetInput) SetSpotFleetRequestConfig(v *SpotFleetRequestConfigData) *RequestSpotFleetInput { + s.SpotFleetRequestConfig = v return s } -// Describes an attachment change. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceAttachmentChanges -type NetworkInterfaceAttachmentChanges struct { +// Contains the output of RequestSpotFleet. +type RequestSpotFleetOutput struct { _ struct{} `type:"structure"` - // The ID of the network interface attachment. - AttachmentId *string `locationName:"attachmentId" type:"string"` - - // Indicates whether the network interface is deleted when the instance is terminated. - DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` + // The ID of the Spot Fleet request. + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` } // String returns the string representation -func (s NetworkInterfaceAttachmentChanges) String() string { +func (s RequestSpotFleetOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NetworkInterfaceAttachmentChanges) GoString() string { +func (s RequestSpotFleetOutput) GoString() string { return s.String() } -// SetAttachmentId sets the AttachmentId field's value. -func (s *NetworkInterfaceAttachmentChanges) SetAttachmentId(v string) *NetworkInterfaceAttachmentChanges { - s.AttachmentId = &v - return s -} - -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *NetworkInterfaceAttachmentChanges) SetDeleteOnTermination(v bool) *NetworkInterfaceAttachmentChanges { - s.DeleteOnTermination = &v +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *RequestSpotFleetOutput) SetSpotFleetRequestId(v string) *RequestSpotFleetOutput { + s.SpotFleetRequestId = &v return s } -// Describes an IPv6 address associated with a network interface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceIpv6Address -type NetworkInterfaceIpv6Address struct { +// Contains the parameters for RequestSpotInstances. +type RequestSpotInstancesInput struct { _ struct{} `type:"structure"` - // The IPv6 address. - Ipv6Address *string `locationName:"ipv6Address" type:"string"` -} + // The user-specified name for a logical grouping of requests. + // + // When you specify an Availability Zone group in a Spot Instance request, all + // Spot Instances in the request are launched in the same Availability Zone. + // Instance proximity is maintained with this parameter, but the choice of Availability + // Zone is not. The group applies only to requests for Spot Instances of the + // same instance type. Any additional Spot Instance requests that are specified + // with the same Availability Zone group name are launched in that same Availability + // Zone, as long as at least one instance from the group is still active. + // + // If there is no active instance running in the Availability Zone group that + // you specify for a new Spot Instance request (all instances are terminated, + // the request is expired, or the maximum price you specified falls below current + // Spot price), then Amazon EC2 launches the instance in any Availability Zone + // where the constraint can be met. Consequently, the subsequent set of Spot + // Instances could be placed in a different zone from the original request, + // even if you specified the same Availability Zone group. + // + // Default: Instances are launched in any available Availability Zone. + AvailabilityZoneGroup *string `locationName:"availabilityZoneGroup" type:"string"` -// String returns the string representation -func (s NetworkInterfaceIpv6Address) String() string { - return awsutil.Prettify(s) -} + // The required duration for the Spot Instances (also known as Spot blocks), + // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, + // or 360). + // + // The duration period starts as soon as your Spot Instance receives its instance + // ID. At the end of the duration period, Amazon EC2 marks the Spot Instance + // for termination and provides a Spot Instance termination notice, which gives + // the instance a two-minute warning before it terminates. + // + // You can't specify an Availability Zone group or a launch group if you specify + // a duration. + BlockDurationMinutes *int64 `locationName:"blockDurationMinutes" type:"integer"` -// GoString returns the string representation -func (s NetworkInterfaceIpv6Address) GoString() string { - return s.String() -} + // Unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. For more information, see How to Ensure Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) + // in the Amazon EC2 User Guide for Linux Instances. + ClientToken *string `locationName:"clientToken" type:"string"` -// SetIpv6Address sets the Ipv6Address field's value. -func (s *NetworkInterfaceIpv6Address) SetIpv6Address(v string) *NetworkInterfaceIpv6Address { - s.Ipv6Address = &v - return s -} + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The maximum number of Spot Instances to launch. + // + // Default: 1 + InstanceCount *int64 `locationName:"instanceCount" type:"integer"` + + // The behavior when a Spot Instance is interrupted. The default is terminate. + InstanceInterruptionBehavior *string `type:"string" enum:"InstanceInterruptionBehavior"` -// Describes the private IPv4 address of a network interface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfacePrivateIpAddress -type NetworkInterfacePrivateIpAddress struct { - _ struct{} `type:"structure"` + // The instance launch group. Launch groups are Spot Instances that launch together + // and terminate together. + // + // Default: Instances are launched and terminated individually + LaunchGroup *string `locationName:"launchGroup" type:"string"` - // The association information for an Elastic IP address (IPv4) associated with - // the network interface. - Association *NetworkInterfaceAssociation `locationName:"association" type:"structure"` + // The launch specification. + LaunchSpecification *RequestSpotLaunchSpecification `type:"structure"` - // Indicates whether this IPv4 address is the primary private IPv4 address of - // the network interface. - Primary *bool `locationName:"primary" type:"boolean"` + // The maximum price per hour that you are willing to pay for a Spot Instance. + // The default is the On-Demand price. + SpotPrice *string `locationName:"spotPrice" type:"string"` - // The private DNS name. - PrivateDnsName *string `locationName:"privateDnsName" type:"string"` + // The Spot Instance request type. + // + // Default: one-time + Type *string `locationName:"type" type:"string" enum:"SpotInstanceType"` - // The private IPv4 address. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + // The start date of the request. If this is a one-time request, the request + // becomes active at this date and time and remains active until all instances + // launch, the request expires, or the request is canceled. If the request is + // persistent, the request becomes active at this date and time and remains + // active until it expires or is canceled. + // + // The specified start date and time cannot be equal to the current date and + // time. You must specify a start date and time that occurs after the current + // date and time. + ValidFrom *time.Time `locationName:"validFrom" type:"timestamp"` + + // The end date of the request. If this is a one-time request, the request remains + // active until all instances launch, the request is canceled, or this date + // is reached. If the request is persistent, it remains active until it is canceled + // or this date is reached. The default end date is 7 days from the current + // date. + ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` } // String returns the string representation -func (s NetworkInterfacePrivateIpAddress) String() string { +func (s RequestSpotInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s NetworkInterfacePrivateIpAddress) GoString() string { +func (s RequestSpotInstancesInput) GoString() string { return s.String() } -// SetAssociation sets the Association field's value. -func (s *NetworkInterfacePrivateIpAddress) SetAssociation(v *NetworkInterfaceAssociation) *NetworkInterfacePrivateIpAddress { - s.Association = v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *RequestSpotInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RequestSpotInstancesInput"} + if s.LaunchSpecification != nil { + if err := s.LaunchSpecification.Validate(); err != nil { + invalidParams.AddNested("LaunchSpecification", err.(request.ErrInvalidParams)) + } + } -// SetPrimary sets the Primary field's value. -func (s *NetworkInterfacePrivateIpAddress) SetPrimary(v bool) *NetworkInterfacePrivateIpAddress { - s.Primary = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetPrivateDnsName sets the PrivateDnsName field's value. -func (s *NetworkInterfacePrivateIpAddress) SetPrivateDnsName(v string) *NetworkInterfacePrivateIpAddress { - s.PrivateDnsName = &v +// SetAvailabilityZoneGroup sets the AvailabilityZoneGroup field's value. +func (s *RequestSpotInstancesInput) SetAvailabilityZoneGroup(v string) *RequestSpotInstancesInput { + s.AvailabilityZoneGroup = &v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *NetworkInterfacePrivateIpAddress) SetPrivateIpAddress(v string) *NetworkInterfacePrivateIpAddress { - s.PrivateIpAddress = &v +// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. +func (s *RequestSpotInstancesInput) SetBlockDurationMinutes(v int64) *RequestSpotInstancesInput { + s.BlockDurationMinutes = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NewDhcpConfiguration -type NewDhcpConfiguration struct { - _ struct{} `type:"structure"` - - Key *string `locationName:"key" type:"string"` - - Values []*string `locationName:"Value" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s NewDhcpConfiguration) String() string { - return awsutil.Prettify(s) +// SetClientToken sets the ClientToken field's value. +func (s *RequestSpotInstancesInput) SetClientToken(v string) *RequestSpotInstancesInput { + s.ClientToken = &v + return s } -// GoString returns the string representation -func (s NewDhcpConfiguration) GoString() string { - return s.String() +// SetDryRun sets the DryRun field's value. +func (s *RequestSpotInstancesInput) SetDryRun(v bool) *RequestSpotInstancesInput { + s.DryRun = &v + return s } -// SetKey sets the Key field's value. -func (s *NewDhcpConfiguration) SetKey(v string) *NewDhcpConfiguration { - s.Key = &v +// SetInstanceCount sets the InstanceCount field's value. +func (s *RequestSpotInstancesInput) SetInstanceCount(v int64) *RequestSpotInstancesInput { + s.InstanceCount = &v return s } -// SetValues sets the Values field's value. -func (s *NewDhcpConfiguration) SetValues(v []*string) *NewDhcpConfiguration { - s.Values = v +// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. +func (s *RequestSpotInstancesInput) SetInstanceInterruptionBehavior(v string) *RequestSpotInstancesInput { + s.InstanceInterruptionBehavior = &v return s } -// Describes the VPC peering connection options. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PeeringConnectionOptions -type PeeringConnectionOptions struct { - _ struct{} `type:"structure"` - - // If true, enables a local VPC to resolve public DNS hostnames to private IP - // addresses when queried from instances in the peer VPC. - AllowDnsResolutionFromRemoteVpc *bool `locationName:"allowDnsResolutionFromRemoteVpc" type:"boolean"` - - // If true, enables outbound communication from an EC2-Classic instance that's - // linked to a local VPC via ClassicLink to instances in a peer VPC. - AllowEgressFromLocalClassicLinkToRemoteVpc *bool `locationName:"allowEgressFromLocalClassicLinkToRemoteVpc" type:"boolean"` - - // If true, enables outbound communication from instances in a local VPC to - // an EC2-Classic instance that's linked to a peer VPC via ClassicLink. - AllowEgressFromLocalVpcToRemoteClassicLink *bool `locationName:"allowEgressFromLocalVpcToRemoteClassicLink" type:"boolean"` +// SetLaunchGroup sets the LaunchGroup field's value. +func (s *RequestSpotInstancesInput) SetLaunchGroup(v string) *RequestSpotInstancesInput { + s.LaunchGroup = &v + return s } -// String returns the string representation -func (s PeeringConnectionOptions) String() string { - return awsutil.Prettify(s) +// SetLaunchSpecification sets the LaunchSpecification field's value. +func (s *RequestSpotInstancesInput) SetLaunchSpecification(v *RequestSpotLaunchSpecification) *RequestSpotInstancesInput { + s.LaunchSpecification = v + return s } -// GoString returns the string representation -func (s PeeringConnectionOptions) GoString() string { - return s.String() +// SetSpotPrice sets the SpotPrice field's value. +func (s *RequestSpotInstancesInput) SetSpotPrice(v string) *RequestSpotInstancesInput { + s.SpotPrice = &v + return s } -// SetAllowDnsResolutionFromRemoteVpc sets the AllowDnsResolutionFromRemoteVpc field's value. -func (s *PeeringConnectionOptions) SetAllowDnsResolutionFromRemoteVpc(v bool) *PeeringConnectionOptions { - s.AllowDnsResolutionFromRemoteVpc = &v +// SetType sets the Type field's value. +func (s *RequestSpotInstancesInput) SetType(v string) *RequestSpotInstancesInput { + s.Type = &v return s } -// SetAllowEgressFromLocalClassicLinkToRemoteVpc sets the AllowEgressFromLocalClassicLinkToRemoteVpc field's value. -func (s *PeeringConnectionOptions) SetAllowEgressFromLocalClassicLinkToRemoteVpc(v bool) *PeeringConnectionOptions { - s.AllowEgressFromLocalClassicLinkToRemoteVpc = &v +// SetValidFrom sets the ValidFrom field's value. +func (s *RequestSpotInstancesInput) SetValidFrom(v time.Time) *RequestSpotInstancesInput { + s.ValidFrom = &v return s } -// SetAllowEgressFromLocalVpcToRemoteClassicLink sets the AllowEgressFromLocalVpcToRemoteClassicLink field's value. -func (s *PeeringConnectionOptions) SetAllowEgressFromLocalVpcToRemoteClassicLink(v bool) *PeeringConnectionOptions { - s.AllowEgressFromLocalVpcToRemoteClassicLink = &v +// SetValidUntil sets the ValidUntil field's value. +func (s *RequestSpotInstancesInput) SetValidUntil(v time.Time) *RequestSpotInstancesInput { + s.ValidUntil = &v return s } -// The VPC peering connection options. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PeeringConnectionOptionsRequest -type PeeringConnectionOptionsRequest struct { +// Contains the output of RequestSpotInstances. +type RequestSpotInstancesOutput struct { _ struct{} `type:"structure"` - // If true, enables a local VPC to resolve public DNS hostnames to private IP - // addresses when queried from instances in the peer VPC. - AllowDnsResolutionFromRemoteVpc *bool `type:"boolean"` - - // If true, enables outbound communication from an EC2-Classic instance that's - // linked to a local VPC via ClassicLink to instances in a peer VPC. - AllowEgressFromLocalClassicLinkToRemoteVpc *bool `type:"boolean"` - - // If true, enables outbound communication from instances in a local VPC to - // an EC2-Classic instance that's linked to a peer VPC via ClassicLink. - AllowEgressFromLocalVpcToRemoteClassicLink *bool `type:"boolean"` + // One or more Spot Instance requests. + SpotInstanceRequests []*SpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s PeeringConnectionOptionsRequest) String() string { +func (s RequestSpotInstancesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PeeringConnectionOptionsRequest) GoString() string { +func (s RequestSpotInstancesOutput) GoString() string { return s.String() } -// SetAllowDnsResolutionFromRemoteVpc sets the AllowDnsResolutionFromRemoteVpc field's value. -func (s *PeeringConnectionOptionsRequest) SetAllowDnsResolutionFromRemoteVpc(v bool) *PeeringConnectionOptionsRequest { - s.AllowDnsResolutionFromRemoteVpc = &v - return s -} - -// SetAllowEgressFromLocalClassicLinkToRemoteVpc sets the AllowEgressFromLocalClassicLinkToRemoteVpc field's value. -func (s *PeeringConnectionOptionsRequest) SetAllowEgressFromLocalClassicLinkToRemoteVpc(v bool) *PeeringConnectionOptionsRequest { - s.AllowEgressFromLocalClassicLinkToRemoteVpc = &v - return s -} - -// SetAllowEgressFromLocalVpcToRemoteClassicLink sets the AllowEgressFromLocalVpcToRemoteClassicLink field's value. -func (s *PeeringConnectionOptionsRequest) SetAllowEgressFromLocalVpcToRemoteClassicLink(v bool) *PeeringConnectionOptionsRequest { - s.AllowEgressFromLocalVpcToRemoteClassicLink = &v +// SetSpotInstanceRequests sets the SpotInstanceRequests field's value. +func (s *RequestSpotInstancesOutput) SetSpotInstanceRequests(v []*SpotInstanceRequest) *RequestSpotInstancesOutput { + s.SpotInstanceRequests = v return s } -// Describes the placement of an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Placement -type Placement struct { +// Describes the launch specification for an instance. +type RequestSpotLaunchSpecification struct { _ struct{} `type:"structure"` - // The affinity setting for the instance on the Dedicated Host. This parameter - // is not supported for the ImportInstance command. - Affinity *string `locationName:"affinity" type:"string"` + // Deprecated. + AddressingType *string `locationName:"addressingType" type:"string"` - // The Availability Zone of the instance. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + // One or more block device mapping entries. You can't specify both a snapshot + // ID and an encryption value. This is because only blank volumes can be encrypted + // on creation. If a snapshot is the basis for a volume, it is not blank and + // its encryption status is used for the volume encryption status. + BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - // The name of the placement group the instance is in (for cluster compute instances). - GroupName *string `locationName:"groupName" type:"string"` + // Indicates whether the instance is optimized for EBS I/O. This optimization + // provides dedicated throughput to Amazon EBS and an optimized configuration + // stack to provide optimal EBS I/O performance. This optimization isn't available + // with all instance types. Additional usage charges apply when using an EBS + // Optimized instance. + // + // Default: false + EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - // The ID of the Dedicated Host on which the instance resides. This parameter - // is not supported for the ImportInstance command. - HostId *string `locationName:"hostId" type:"string"` + // The IAM instance profile. + IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - // The tenancy of the instance (if the instance is running in a VPC). An instance - // with a tenancy of dedicated runs on single-tenant hardware. The host tenancy - // is not supported for the ImportInstance command. - Tenancy *string `locationName:"tenancy" type:"string" enum:"Tenancy"` -} + // The ID of the AMI. + ImageId *string `locationName:"imageId" type:"string"` -// String returns the string representation -func (s Placement) String() string { - return awsutil.Prettify(s) -} + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` -// GoString returns the string representation -func (s Placement) GoString() string { - return s.String() -} + // The ID of the kernel. + KernelId *string `locationName:"kernelId" type:"string"` -// SetAffinity sets the Affinity field's value. -func (s *Placement) SetAffinity(v string) *Placement { - s.Affinity = &v - return s -} + // The name of the key pair. + KeyName *string `locationName:"keyName" type:"string"` -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *Placement) SetAvailabilityZone(v string) *Placement { - s.AvailabilityZone = &v - return s -} + // Indicates whether basic or detailed monitoring is enabled for the instance. + // + // Default: Disabled + Monitoring *RunInstancesMonitoringEnabled `locationName:"monitoring" type:"structure"` -// SetGroupName sets the GroupName field's value. -func (s *Placement) SetGroupName(v string) *Placement { - s.GroupName = &v - return s -} + // One or more network interfaces. If you specify a network interface, you must + // specify subnet IDs and security group IDs using the network interface. + NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"NetworkInterface" locationNameList:"item" type:"list"` -// SetHostId sets the HostId field's value. -func (s *Placement) SetHostId(v string) *Placement { - s.HostId = &v - return s -} + // The placement information for the instance. + Placement *SpotPlacement `locationName:"placement" type:"structure"` -// SetTenancy sets the Tenancy field's value. -func (s *Placement) SetTenancy(v string) *Placement { - s.Tenancy = &v - return s -} + // The ID of the RAM disk. + RamdiskId *string `locationName:"ramdiskId" type:"string"` -// Describes a placement group. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PlacementGroup -type PlacementGroup struct { - _ struct{} `type:"structure"` + // One or more security group IDs. + SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"item" type:"list"` - // The name of the placement group. - GroupName *string `locationName:"groupName" type:"string"` + // One or more security groups. When requesting instances in a VPC, you must + // specify the IDs of the security groups. When requesting instances in EC2-Classic, + // you can specify the names or the IDs of the security groups. + SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"item" type:"list"` - // The state of the placement group. - State *string `locationName:"state" type:"string" enum:"PlacementGroupState"` + // The IDs of the subnets in which to launch the instance. To specify multiple + // subnets, separate them using commas; for example, "subnet-1234abcdeexample1, + // subnet-0987cdef6example2". + SubnetId *string `locationName:"subnetId" type:"string"` - // The placement strategy. - Strategy *string `locationName:"strategy" type:"string" enum:"PlacementStrategy"` + // The Base64-encoded user data for the instance. User data is limited to 16 + // KB. + UserData *string `locationName:"userData" type:"string"` } // String returns the string representation -func (s PlacementGroup) String() string { +func (s RequestSpotLaunchSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PlacementGroup) GoString() string { +func (s RequestSpotLaunchSpecification) GoString() string { return s.String() } -// SetGroupName sets the GroupName field's value. -func (s *PlacementGroup) SetGroupName(v string) *PlacementGroup { - s.GroupName = &v - return s -} +// Validate inspects the fields of the type to determine if they are valid. +func (s *RequestSpotLaunchSpecification) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RequestSpotLaunchSpecification"} + if s.Monitoring != nil { + if err := s.Monitoring.Validate(); err != nil { + invalidParams.AddNested("Monitoring", err.(request.ErrInvalidParams)) + } + } -// SetState sets the State field's value. -func (s *PlacementGroup) SetState(v string) *PlacementGroup { - s.State = &v - return s + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetStrategy sets the Strategy field's value. -func (s *PlacementGroup) SetStrategy(v string) *PlacementGroup { - s.Strategy = &v +// SetAddressingType sets the AddressingType field's value. +func (s *RequestSpotLaunchSpecification) SetAddressingType(v string) *RequestSpotLaunchSpecification { + s.AddressingType = &v return s } -// Describes a range of ports. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PortRange -type PortRange struct { - _ struct{} `type:"structure"` - - // The first port in the range. - From *int64 `locationName:"from" type:"integer"` - - // The last port in the range. - To *int64 `locationName:"to" type:"integer"` +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *RequestSpotLaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RequestSpotLaunchSpecification { + s.BlockDeviceMappings = v + return s } -// String returns the string representation -func (s PortRange) String() string { - return awsutil.Prettify(s) +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *RequestSpotLaunchSpecification) SetEbsOptimized(v bool) *RequestSpotLaunchSpecification { + s.EbsOptimized = &v + return s } -// GoString returns the string representation -func (s PortRange) GoString() string { - return s.String() +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *RequestSpotLaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *RequestSpotLaunchSpecification { + s.IamInstanceProfile = v + return s } -// SetFrom sets the From field's value. -func (s *PortRange) SetFrom(v int64) *PortRange { - s.From = &v +// SetImageId sets the ImageId field's value. +func (s *RequestSpotLaunchSpecification) SetImageId(v string) *RequestSpotLaunchSpecification { + s.ImageId = &v return s } -// SetTo sets the To field's value. -func (s *PortRange) SetTo(v int64) *PortRange { - s.To = &v +// SetInstanceType sets the InstanceType field's value. +func (s *RequestSpotLaunchSpecification) SetInstanceType(v string) *RequestSpotLaunchSpecification { + s.InstanceType = &v return s } -// Describes prefixes for AWS services. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrefixList -type PrefixList struct { - _ struct{} `type:"structure"` - - // The IP address range of the AWS service. - Cidrs []*string `locationName:"cidrSet" locationNameList:"item" type:"list"` - - // The ID of the prefix. - PrefixListId *string `locationName:"prefixListId" type:"string"` - - // The name of the prefix. - PrefixListName *string `locationName:"prefixListName" type:"string"` +// SetKernelId sets the KernelId field's value. +func (s *RequestSpotLaunchSpecification) SetKernelId(v string) *RequestSpotLaunchSpecification { + s.KernelId = &v + return s } -// String returns the string representation -func (s PrefixList) String() string { - return awsutil.Prettify(s) +// SetKeyName sets the KeyName field's value. +func (s *RequestSpotLaunchSpecification) SetKeyName(v string) *RequestSpotLaunchSpecification { + s.KeyName = &v + return s } -// GoString returns the string representation -func (s PrefixList) GoString() string { - return s.String() +// SetMonitoring sets the Monitoring field's value. +func (s *RequestSpotLaunchSpecification) SetMonitoring(v *RunInstancesMonitoringEnabled) *RequestSpotLaunchSpecification { + s.Monitoring = v + return s } -// SetCidrs sets the Cidrs field's value. -func (s *PrefixList) SetCidrs(v []*string) *PrefixList { - s.Cidrs = v +// SetNetworkInterfaces sets the NetworkInterfaces field's value. +func (s *RequestSpotLaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *RequestSpotLaunchSpecification { + s.NetworkInterfaces = v return s } -// SetPrefixListId sets the PrefixListId field's value. -func (s *PrefixList) SetPrefixListId(v string) *PrefixList { - s.PrefixListId = &v +// SetPlacement sets the Placement field's value. +func (s *RequestSpotLaunchSpecification) SetPlacement(v *SpotPlacement) *RequestSpotLaunchSpecification { + s.Placement = v return s } -// SetPrefixListName sets the PrefixListName field's value. -func (s *PrefixList) SetPrefixListName(v string) *PrefixList { - s.PrefixListName = &v +// SetRamdiskId sets the RamdiskId field's value. +func (s *RequestSpotLaunchSpecification) SetRamdiskId(v string) *RequestSpotLaunchSpecification { + s.RamdiskId = &v return s } -// The ID of the prefix. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrefixListId -type PrefixListId struct { - _ struct{} `type:"structure"` - - // The ID of the prefix. - PrefixListId *string `locationName:"prefixListId" type:"string"` +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *RequestSpotLaunchSpecification) SetSecurityGroupIds(v []*string) *RequestSpotLaunchSpecification { + s.SecurityGroupIds = v + return s } -// String returns the string representation -func (s PrefixListId) String() string { - return awsutil.Prettify(s) +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *RequestSpotLaunchSpecification) SetSecurityGroups(v []*string) *RequestSpotLaunchSpecification { + s.SecurityGroups = v + return s } -// GoString returns the string representation -func (s PrefixListId) GoString() string { - return s.String() +// SetSubnetId sets the SubnetId field's value. +func (s *RequestSpotLaunchSpecification) SetSubnetId(v string) *RequestSpotLaunchSpecification { + s.SubnetId = &v + return s } -// SetPrefixListId sets the PrefixListId field's value. -func (s *PrefixListId) SetPrefixListId(v string) *PrefixListId { - s.PrefixListId = &v +// SetUserData sets the UserData field's value. +func (s *RequestSpotLaunchSpecification) SetUserData(v string) *RequestSpotLaunchSpecification { + s.UserData = &v return s } -// Describes the price for a Reserved Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PriceSchedule -type PriceSchedule struct { +// Describes a reservation. +type Reservation struct { _ struct{} `type:"structure"` - // The current price schedule, as determined by the term remaining for the Reserved - // Instance in the listing. - // - // A specific price schedule is always in effect, but only one price schedule - // can be active at any time. Take, for example, a Reserved Instance listing - // that has five months remaining in its term. When you specify price schedules - // for five months and two months, this means that schedule 1, covering the - // first three months of the remaining term, will be active during months 5, - // 4, and 3. Then schedule 2, covering the last two months of the term, will - // be active for months 2 and 1. - Active *bool `locationName:"active" type:"boolean"` + // [EC2-Classic only] The security groups. + Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - // The currency for transacting the Reserved Instance resale. At this time, - // the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` + // The instances. + Instances []*Instance `locationName:"instancesSet" locationNameList:"item" type:"list"` - // The fixed price for the term. - Price *float64 `locationName:"price" type:"double"` + // The ID of the AWS account that owns the reservation. + OwnerId *string `locationName:"ownerId" type:"string"` - // The number of months remaining in the reservation. For example, 2 is the - // second to the last month before the capacity reservation expires. - Term *int64 `locationName:"term" type:"long"` + // The ID of the requester that launched the instances on your behalf (for example, + // AWS Management Console or Auto Scaling). + RequesterId *string `locationName:"requesterId" type:"string"` + + // The ID of the reservation. + ReservationId *string `locationName:"reservationId" type:"string"` } // String returns the string representation -func (s PriceSchedule) String() string { +func (s Reservation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PriceSchedule) GoString() string { +func (s Reservation) GoString() string { return s.String() } -// SetActive sets the Active field's value. -func (s *PriceSchedule) SetActive(v bool) *PriceSchedule { - s.Active = &v +// SetGroups sets the Groups field's value. +func (s *Reservation) SetGroups(v []*GroupIdentifier) *Reservation { + s.Groups = v return s } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *PriceSchedule) SetCurrencyCode(v string) *PriceSchedule { - s.CurrencyCode = &v +// SetInstances sets the Instances field's value. +func (s *Reservation) SetInstances(v []*Instance) *Reservation { + s.Instances = v return s } -// SetPrice sets the Price field's value. -func (s *PriceSchedule) SetPrice(v float64) *PriceSchedule { - s.Price = &v +// SetOwnerId sets the OwnerId field's value. +func (s *Reservation) SetOwnerId(v string) *Reservation { + s.OwnerId = &v return s } -// SetTerm sets the Term field's value. -func (s *PriceSchedule) SetTerm(v int64) *PriceSchedule { - s.Term = &v +// SetRequesterId sets the RequesterId field's value. +func (s *Reservation) SetRequesterId(v string) *Reservation { + s.RequesterId = &v return s } -// Describes the price for a Reserved Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PriceScheduleSpecification -type PriceScheduleSpecification struct { +// SetReservationId sets the ReservationId field's value. +func (s *Reservation) SetReservationId(v string) *Reservation { + s.ReservationId = &v + return s +} + +// The cost associated with the Reserved Instance. +type ReservationValue struct { _ struct{} `type:"structure"` - // The currency for transacting the Reserved Instance resale. At this time, - // the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` + // The hourly rate of the reservation. + HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - // The fixed price for the term. - Price *float64 `locationName:"price" type:"double"` + // The balance of the total value (the sum of remainingUpfrontValue + hourlyPrice + // * number of hours remaining). + RemainingTotalValue *string `locationName:"remainingTotalValue" type:"string"` - // The number of months remaining in the reservation. For example, 2 is the - // second to the last month before the capacity reservation expires. - Term *int64 `locationName:"term" type:"long"` + // The remaining upfront cost of the reservation. + RemainingUpfrontValue *string `locationName:"remainingUpfrontValue" type:"string"` } // String returns the string representation -func (s PriceScheduleSpecification) String() string { +func (s ReservationValue) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PriceScheduleSpecification) GoString() string { +func (s ReservationValue) GoString() string { return s.String() } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *PriceScheduleSpecification) SetCurrencyCode(v string) *PriceScheduleSpecification { - s.CurrencyCode = &v +// SetHourlyPrice sets the HourlyPrice field's value. +func (s *ReservationValue) SetHourlyPrice(v string) *ReservationValue { + s.HourlyPrice = &v return s } -// SetPrice sets the Price field's value. -func (s *PriceScheduleSpecification) SetPrice(v float64) *PriceScheduleSpecification { - s.Price = &v +// SetRemainingTotalValue sets the RemainingTotalValue field's value. +func (s *ReservationValue) SetRemainingTotalValue(v string) *ReservationValue { + s.RemainingTotalValue = &v return s } -// SetTerm sets the Term field's value. -func (s *PriceScheduleSpecification) SetTerm(v int64) *PriceScheduleSpecification { - s.Term = &v +// SetRemainingUpfrontValue sets the RemainingUpfrontValue field's value. +func (s *ReservationValue) SetRemainingUpfrontValue(v string) *ReservationValue { + s.RemainingUpfrontValue = &v return s } -// Describes a Reserved Instance offering. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PricingDetail -type PricingDetail struct { +// Describes the limit price of a Reserved Instance offering. +type ReservedInstanceLimitPrice struct { _ struct{} `type:"structure"` - // The number of reservations available for the price. - Count *int64 `locationName:"count" type:"integer"` + // Used for Reserved Instance Marketplace offerings. Specifies the limit price + // on the total order (instanceCount * price). + Amount *float64 `locationName:"amount" type:"double"` - // The price per instance. - Price *float64 `locationName:"price" type:"double"` + // The currency in which the limitPrice amount is specified. At this time, the + // only supported currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` } // String returns the string representation -func (s PricingDetail) String() string { +func (s ReservedInstanceLimitPrice) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PricingDetail) GoString() string { +func (s ReservedInstanceLimitPrice) GoString() string { return s.String() } -// SetCount sets the Count field's value. -func (s *PricingDetail) SetCount(v int64) *PricingDetail { - s.Count = &v +// SetAmount sets the Amount field's value. +func (s *ReservedInstanceLimitPrice) SetAmount(v float64) *ReservedInstanceLimitPrice { + s.Amount = &v return s } -// SetPrice sets the Price field's value. -func (s *PricingDetail) SetPrice(v float64) *PricingDetail { - s.Price = &v +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *ReservedInstanceLimitPrice) SetCurrencyCode(v string) *ReservedInstanceLimitPrice { + s.CurrencyCode = &v return s } -// Describes a secondary private IPv4 address for a network interface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrivateIpAddressSpecification -type PrivateIpAddressSpecification struct { +// The total value of the Convertible Reserved Instance. +type ReservedInstanceReservationValue struct { _ struct{} `type:"structure"` - // Indicates whether the private IPv4 address is the primary private IPv4 address. - // Only one IPv4 address can be designated as primary. - Primary *bool `locationName:"primary" type:"boolean"` + // The total value of the Convertible Reserved Instance that you are exchanging. + ReservationValue *ReservationValue `locationName:"reservationValue" type:"structure"` - // The private IPv4 addresses. - // - // PrivateIpAddress is a required field - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string" required:"true"` + // The ID of the Convertible Reserved Instance that you are exchanging. + ReservedInstanceId *string `locationName:"reservedInstanceId" type:"string"` } // String returns the string representation -func (s PrivateIpAddressSpecification) String() string { +func (s ReservedInstanceReservationValue) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PrivateIpAddressSpecification) GoString() string { +func (s ReservedInstanceReservationValue) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *PrivateIpAddressSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PrivateIpAddressSpecification"} - if s.PrivateIpAddress == nil { - invalidParams.Add(request.NewErrParamRequired("PrivateIpAddress")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetPrimary sets the Primary field's value. -func (s *PrivateIpAddressSpecification) SetPrimary(v bool) *PrivateIpAddressSpecification { - s.Primary = &v +// SetReservationValue sets the ReservationValue field's value. +func (s *ReservedInstanceReservationValue) SetReservationValue(v *ReservationValue) *ReservedInstanceReservationValue { + s.ReservationValue = v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *PrivateIpAddressSpecification) SetPrivateIpAddress(v string) *PrivateIpAddressSpecification { - s.PrivateIpAddress = &v +// SetReservedInstanceId sets the ReservedInstanceId field's value. +func (s *ReservedInstanceReservationValue) SetReservedInstanceId(v string) *ReservedInstanceReservationValue { + s.ReservedInstanceId = &v return s } -// Describes a product code. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProductCode -type ProductCode struct { +// Describes a Reserved Instance. +type ReservedInstances struct { _ struct{} `type:"structure"` - // The product code. - ProductCodeId *string `locationName:"productCode" type:"string"` + // The Availability Zone in which the Reserved Instance can be used. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The type of product code. - ProductCodeType *string `locationName:"type" type:"string" enum:"ProductCodeValues"` + // The currency of the Reserved Instance. It's specified using ISO 4217 standard + // currency codes. At this time, the only supported currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` + + // The duration of the Reserved Instance, in seconds. + Duration *int64 `locationName:"duration" type:"long"` + + // The time when the Reserved Instance expires. + End *time.Time `locationName:"end" type:"timestamp"` + + // The purchase price of the Reserved Instance. + FixedPrice *float64 `locationName:"fixedPrice" type:"float"` + + // The number of reservations purchased. + InstanceCount *int64 `locationName:"instanceCount" type:"integer"` + + // The tenancy of the instance. + InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` + + // The instance type on which the Reserved Instance can be used. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + + // The offering class of the Reserved Instance. + OfferingClass *string `locationName:"offeringClass" type:"string" enum:"OfferingClassType"` + + // The Reserved Instance offering type. + OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` + + // The Reserved Instance product platform description. + ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` + + // The recurring charge tag assigned to the resource. + RecurringCharges []*RecurringCharge `locationName:"recurringCharges" locationNameList:"item" type:"list"` + + // The ID of the Reserved Instance. + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` + + // The scope of the Reserved Instance. + Scope *string `locationName:"scope" type:"string" enum:"scope"` + + // The date and time the Reserved Instance started. + Start *time.Time `locationName:"start" type:"timestamp"` + + // The state of the Reserved Instance purchase. + State *string `locationName:"state" type:"string" enum:"ReservedInstanceState"` + + // Any tags assigned to the resource. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The usage price of the Reserved Instance, per hour. + UsagePrice *float64 `locationName:"usagePrice" type:"float"` } // String returns the string representation -func (s ProductCode) String() string { +func (s ReservedInstances) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ProductCode) GoString() string { +func (s ReservedInstances) GoString() string { return s.String() } -// SetProductCodeId sets the ProductCodeId field's value. -func (s *ProductCode) SetProductCodeId(v string) *ProductCode { - s.ProductCodeId = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ReservedInstances) SetAvailabilityZone(v string) *ReservedInstances { + s.AvailabilityZone = &v return s } -// SetProductCodeType sets the ProductCodeType field's value. -func (s *ProductCode) SetProductCodeType(v string) *ProductCode { - s.ProductCodeType = &v +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *ReservedInstances) SetCurrencyCode(v string) *ReservedInstances { + s.CurrencyCode = &v return s } -// Describes a virtual private gateway propagating route. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PropagatingVgw -type PropagatingVgw struct { - _ struct{} `type:"structure"` - - // The ID of the virtual private gateway (VGW). - GatewayId *string `locationName:"gatewayId" type:"string"` +// SetDuration sets the Duration field's value. +func (s *ReservedInstances) SetDuration(v int64) *ReservedInstances { + s.Duration = &v + return s } -// String returns the string representation -func (s PropagatingVgw) String() string { - return awsutil.Prettify(s) +// SetEnd sets the End field's value. +func (s *ReservedInstances) SetEnd(v time.Time) *ReservedInstances { + s.End = &v + return s } -// GoString returns the string representation -func (s PropagatingVgw) GoString() string { - return s.String() +// SetFixedPrice sets the FixedPrice field's value. +func (s *ReservedInstances) SetFixedPrice(v float64) *ReservedInstances { + s.FixedPrice = &v + return s } -// SetGatewayId sets the GatewayId field's value. -func (s *PropagatingVgw) SetGatewayId(v string) *PropagatingVgw { - s.GatewayId = &v +// SetInstanceCount sets the InstanceCount field's value. +func (s *ReservedInstances) SetInstanceCount(v int64) *ReservedInstances { + s.InstanceCount = &v return s } -// Reserved. If you need to sustain traffic greater than the documented limits -// (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html), -// contact us through the Support Center (https://console.aws.amazon.com/support/home?). -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionedBandwidth -type ProvisionedBandwidth struct { - _ struct{} `type:"structure"` - - // Reserved. If you need to sustain traffic greater than the documented limits - // (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - ProvisionTime *time.Time `locationName:"provisionTime" type:"timestamp" timestampFormat:"iso8601"` +// SetInstanceTenancy sets the InstanceTenancy field's value. +func (s *ReservedInstances) SetInstanceTenancy(v string) *ReservedInstances { + s.InstanceTenancy = &v + return s +} - // Reserved. If you need to sustain traffic greater than the documented limits - // (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - Provisioned *string `locationName:"provisioned" type:"string"` +// SetInstanceType sets the InstanceType field's value. +func (s *ReservedInstances) SetInstanceType(v string) *ReservedInstances { + s.InstanceType = &v + return s +} - // Reserved. If you need to sustain traffic greater than the documented limits - // (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - RequestTime *time.Time `locationName:"requestTime" type:"timestamp" timestampFormat:"iso8601"` +// SetOfferingClass sets the OfferingClass field's value. +func (s *ReservedInstances) SetOfferingClass(v string) *ReservedInstances { + s.OfferingClass = &v + return s +} - // Reserved. If you need to sustain traffic greater than the documented limits - // (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - Requested *string `locationName:"requested" type:"string"` +// SetOfferingType sets the OfferingType field's value. +func (s *ReservedInstances) SetOfferingType(v string) *ReservedInstances { + s.OfferingType = &v + return s +} - // Reserved. If you need to sustain traffic greater than the documented limits - // (http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html), - // contact us through the Support Center (https://console.aws.amazon.com/support/home?). - Status *string `locationName:"status" type:"string"` +// SetProductDescription sets the ProductDescription field's value. +func (s *ReservedInstances) SetProductDescription(v string) *ReservedInstances { + s.ProductDescription = &v + return s } -// String returns the string representation -func (s ProvisionedBandwidth) String() string { - return awsutil.Prettify(s) +// SetRecurringCharges sets the RecurringCharges field's value. +func (s *ReservedInstances) SetRecurringCharges(v []*RecurringCharge) *ReservedInstances { + s.RecurringCharges = v + return s } -// GoString returns the string representation -func (s ProvisionedBandwidth) GoString() string { - return s.String() +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *ReservedInstances) SetReservedInstancesId(v string) *ReservedInstances { + s.ReservedInstancesId = &v + return s } -// SetProvisionTime sets the ProvisionTime field's value. -func (s *ProvisionedBandwidth) SetProvisionTime(v time.Time) *ProvisionedBandwidth { - s.ProvisionTime = &v +// SetScope sets the Scope field's value. +func (s *ReservedInstances) SetScope(v string) *ReservedInstances { + s.Scope = &v return s } -// SetProvisioned sets the Provisioned field's value. -func (s *ProvisionedBandwidth) SetProvisioned(v string) *ProvisionedBandwidth { - s.Provisioned = &v +// SetStart sets the Start field's value. +func (s *ReservedInstances) SetStart(v time.Time) *ReservedInstances { + s.Start = &v return s } -// SetRequestTime sets the RequestTime field's value. -func (s *ProvisionedBandwidth) SetRequestTime(v time.Time) *ProvisionedBandwidth { - s.RequestTime = &v +// SetState sets the State field's value. +func (s *ReservedInstances) SetState(v string) *ReservedInstances { + s.State = &v return s } -// SetRequested sets the Requested field's value. -func (s *ProvisionedBandwidth) SetRequested(v string) *ProvisionedBandwidth { - s.Requested = &v +// SetTags sets the Tags field's value. +func (s *ReservedInstances) SetTags(v []*Tag) *ReservedInstances { + s.Tags = v return s } -// SetStatus sets the Status field's value. -func (s *ProvisionedBandwidth) SetStatus(v string) *ProvisionedBandwidth { - s.Status = &v +// SetUsagePrice sets the UsagePrice field's value. +func (s *ReservedInstances) SetUsagePrice(v float64) *ReservedInstances { + s.UsagePrice = &v return s } -// Describes the result of the purchase. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Purchase -type Purchase struct { +// Describes the configuration settings for the modified Reserved Instances. +type ReservedInstancesConfiguration struct { _ struct{} `type:"structure"` - // The currency in which the UpfrontPrice and HourlyPrice amounts are specified. - // At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The duration of the reservation's term in seconds. - Duration *int64 `locationName:"duration" type:"integer"` - - // The IDs of the Dedicated Hosts associated with the reservation. - HostIdSet []*string `locationName:"hostIdSet" locationNameList:"item" type:"list"` - - // The ID of the reservation. - HostReservationId *string `locationName:"hostReservationId" type:"string"` + // The Availability Zone for the modified Reserved Instances. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The hourly price of the reservation per hour. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` + // The number of modified Reserved Instances. + // + // This is a required field for a request. + InstanceCount *int64 `locationName:"instanceCount" type:"integer"` - // The instance family on the Dedicated Host that the reservation can be associated - // with. - InstanceFamily *string `locationName:"instanceFamily" type:"string"` + // The instance type for the modified Reserved Instances. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - // The payment option for the reservation. - PaymentOption *string `locationName:"paymentOption" type:"string" enum:"PaymentOption"` + // The network platform of the modified Reserved Instances, which is either + // EC2-Classic or EC2-VPC. + Platform *string `locationName:"platform" type:"string"` - // The upfront price of the reservation. - UpfrontPrice *string `locationName:"upfrontPrice" type:"string"` + // Whether the Reserved Instance is applied to instances in a Region or instances + // in a specific Availability Zone. + Scope *string `locationName:"scope" type:"string" enum:"scope"` } // String returns the string representation -func (s Purchase) String() string { +func (s ReservedInstancesConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Purchase) GoString() string { +func (s ReservedInstancesConfiguration) GoString() string { return s.String() } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *Purchase) SetCurrencyCode(v string) *Purchase { - s.CurrencyCode = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ReservedInstancesConfiguration) SetAvailabilityZone(v string) *ReservedInstancesConfiguration { + s.AvailabilityZone = &v return s } -// SetDuration sets the Duration field's value. -func (s *Purchase) SetDuration(v int64) *Purchase { - s.Duration = &v +// SetInstanceCount sets the InstanceCount field's value. +func (s *ReservedInstancesConfiguration) SetInstanceCount(v int64) *ReservedInstancesConfiguration { + s.InstanceCount = &v return s } -// SetHostIdSet sets the HostIdSet field's value. -func (s *Purchase) SetHostIdSet(v []*string) *Purchase { - s.HostIdSet = v +// SetInstanceType sets the InstanceType field's value. +func (s *ReservedInstancesConfiguration) SetInstanceType(v string) *ReservedInstancesConfiguration { + s.InstanceType = &v return s } -// SetHostReservationId sets the HostReservationId field's value. -func (s *Purchase) SetHostReservationId(v string) *Purchase { - s.HostReservationId = &v +// SetPlatform sets the Platform field's value. +func (s *ReservedInstancesConfiguration) SetPlatform(v string) *ReservedInstancesConfiguration { + s.Platform = &v return s } -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *Purchase) SetHourlyPrice(v string) *Purchase { - s.HourlyPrice = &v +// SetScope sets the Scope field's value. +func (s *ReservedInstancesConfiguration) SetScope(v string) *ReservedInstancesConfiguration { + s.Scope = &v return s } -// SetInstanceFamily sets the InstanceFamily field's value. -func (s *Purchase) SetInstanceFamily(v string) *Purchase { - s.InstanceFamily = &v - return s +// Describes the ID of a Reserved Instance. +type ReservedInstancesId struct { + _ struct{} `type:"structure"` + + // The ID of the Reserved Instance. + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` } -// SetPaymentOption sets the PaymentOption field's value. -func (s *Purchase) SetPaymentOption(v string) *Purchase { - s.PaymentOption = &v - return s +// String returns the string representation +func (s ReservedInstancesId) String() string { + return awsutil.Prettify(s) } -// SetUpfrontPrice sets the UpfrontPrice field's value. -func (s *Purchase) SetUpfrontPrice(v string) *Purchase { - s.UpfrontPrice = &v +// GoString returns the string representation +func (s ReservedInstancesId) GoString() string { + return s.String() +} + +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *ReservedInstancesId) SetReservedInstancesId(v string) *ReservedInstancesId { + s.ReservedInstancesId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservationRequest -type PurchaseHostReservationInput struct { +// Describes a Reserved Instance listing. +type ReservedInstancesListing struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier you provide to ensure idempotency of the - // request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) - // in the Amazon Elastic Compute Cloud User Guide. - ClientToken *string `type:"string"` + // A unique, case-sensitive key supplied by the client to ensure that the request + // is idempotent. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` - // The currency in which the totalUpfrontPrice, LimitPrice, and totalHourlyPrice - // amounts are specified. At this time, the only supported currency is USD. - CurrencyCode *string `type:"string" enum:"CurrencyCodeValues"` + // The time the listing was created. + CreateDate *time.Time `locationName:"createDate" type:"timestamp"` - // The ID/s of the Dedicated Host/s that the reservation will be associated - // with. - // - // HostIdSet is a required field - HostIdSet []*string `locationNameList:"item" type:"list" required:"true"` + // The number of instances in this state. + InstanceCounts []*InstanceCount `locationName:"instanceCounts" locationNameList:"item" type:"list"` - // The specified limit is checked against the total upfront cost of the reservation - // (calculated as the offering's upfront cost multiplied by the host count). - // If the total upfront cost is greater than the specified price limit, the - // request will fail. This is used to ensure that the purchase does not exceed - // the expected upfront cost of the purchase. At this time, the only supported - // currency is USD. For example, to indicate a limit price of USD 100, specify - // 100.00. - LimitPrice *string `type:"string"` + // The price of the Reserved Instance listing. + PriceSchedules []*PriceSchedule `locationName:"priceSchedules" locationNameList:"item" type:"list"` - // The ID of the offering. - // - // OfferingId is a required field - OfferingId *string `type:"string" required:"true"` + // The ID of the Reserved Instance. + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` + + // The ID of the Reserved Instance listing. + ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string"` + + // The status of the Reserved Instance listing. + Status *string `locationName:"status" type:"string" enum:"ListingStatus"` + + // The reason for the current status of the Reserved Instance listing. The response + // can be blank. + StatusMessage *string `locationName:"statusMessage" type:"string"` + + // Any tags assigned to the resource. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The last modified timestamp of the listing. + UpdateDate *time.Time `locationName:"updateDate" type:"timestamp"` } // String returns the string representation -func (s PurchaseHostReservationInput) String() string { +func (s ReservedInstancesListing) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PurchaseHostReservationInput) GoString() string { +func (s ReservedInstancesListing) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *PurchaseHostReservationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PurchaseHostReservationInput"} - if s.HostIdSet == nil { - invalidParams.Add(request.NewErrParamRequired("HostIdSet")) - } - if s.OfferingId == nil { - invalidParams.Add(request.NewErrParamRequired("OfferingId")) - } +// SetClientToken sets the ClientToken field's value. +func (s *ReservedInstancesListing) SetClientToken(v string) *ReservedInstancesListing { + s.ClientToken = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCreateDate sets the CreateDate field's value. +func (s *ReservedInstancesListing) SetCreateDate(v time.Time) *ReservedInstancesListing { + s.CreateDate = &v + return s } -// SetClientToken sets the ClientToken field's value. -func (s *PurchaseHostReservationInput) SetClientToken(v string) *PurchaseHostReservationInput { - s.ClientToken = &v +// SetInstanceCounts sets the InstanceCounts field's value. +func (s *ReservedInstancesListing) SetInstanceCounts(v []*InstanceCount) *ReservedInstancesListing { + s.InstanceCounts = v return s } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *PurchaseHostReservationInput) SetCurrencyCode(v string) *PurchaseHostReservationInput { - s.CurrencyCode = &v +// SetPriceSchedules sets the PriceSchedules field's value. +func (s *ReservedInstancesListing) SetPriceSchedules(v []*PriceSchedule) *ReservedInstancesListing { + s.PriceSchedules = v return s } -// SetHostIdSet sets the HostIdSet field's value. -func (s *PurchaseHostReservationInput) SetHostIdSet(v []*string) *PurchaseHostReservationInput { - s.HostIdSet = v +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *ReservedInstancesListing) SetReservedInstancesId(v string) *ReservedInstancesListing { + s.ReservedInstancesId = &v return s } -// SetLimitPrice sets the LimitPrice field's value. -func (s *PurchaseHostReservationInput) SetLimitPrice(v string) *PurchaseHostReservationInput { - s.LimitPrice = &v +// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. +func (s *ReservedInstancesListing) SetReservedInstancesListingId(v string) *ReservedInstancesListing { + s.ReservedInstancesListingId = &v return s } -// SetOfferingId sets the OfferingId field's value. -func (s *PurchaseHostReservationInput) SetOfferingId(v string) *PurchaseHostReservationInput { - s.OfferingId = &v +// SetStatus sets the Status field's value. +func (s *ReservedInstancesListing) SetStatus(v string) *ReservedInstancesListing { + s.Status = &v + return s +} + +// SetStatusMessage sets the StatusMessage field's value. +func (s *ReservedInstancesListing) SetStatusMessage(v string) *ReservedInstancesListing { + s.StatusMessage = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *ReservedInstancesListing) SetTags(v []*Tag) *ReservedInstancesListing { + s.Tags = v + return s +} + +// SetUpdateDate sets the UpdateDate field's value. +func (s *ReservedInstancesListing) SetUpdateDate(v time.Time) *ReservedInstancesListing { + s.UpdateDate = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservationResult -type PurchaseHostReservationOutput struct { - _ struct{} `type:"structure"` +// Describes a Reserved Instance modification. +type ReservedInstancesModification struct { + _ struct{} `type:"structure"` + + // A unique, case-sensitive key supplied by the client to ensure that the request + // is idempotent. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` + + // The time when the modification request was created. + CreateDate *time.Time `locationName:"createDate" type:"timestamp"` + + // The time for the modification to become effective. + EffectiveDate *time.Time `locationName:"effectiveDate" type:"timestamp"` - // Unique, case-sensitive identifier you provide to ensure idempotency of the - // request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) - // in the Amazon Elastic Compute Cloud User Guide - ClientToken *string `locationName:"clientToken" type:"string"` + // Contains target configurations along with their corresponding new Reserved + // Instance IDs. + ModificationResults []*ReservedInstancesModificationResult `locationName:"modificationResultSet" locationNameList:"item" type:"list"` - // The currency in which the totalUpfrontPrice and totalHourlyPrice amounts - // are specified. At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` + // The IDs of one or more Reserved Instances. + ReservedInstancesIds []*ReservedInstancesId `locationName:"reservedInstancesSet" locationNameList:"item" type:"list"` - // Describes the details of the purchase. - Purchase []*Purchase `locationName:"purchase" type:"list"` + // A unique ID for the Reserved Instance modification. + ReservedInstancesModificationId *string `locationName:"reservedInstancesModificationId" type:"string"` - // The total hourly price of the reservation calculated per hour. - TotalHourlyPrice *string `locationName:"totalHourlyPrice" type:"string"` + // The status of the Reserved Instances modification request. + Status *string `locationName:"status" type:"string"` - // The total amount that will be charged to your account when you purchase the - // reservation. - TotalUpfrontPrice *string `locationName:"totalUpfrontPrice" type:"string"` + // The reason for the status. + StatusMessage *string `locationName:"statusMessage" type:"string"` + + // The time when the modification request was last updated. + UpdateDate *time.Time `locationName:"updateDate" type:"timestamp"` } // String returns the string representation -func (s PurchaseHostReservationOutput) String() string { +func (s ReservedInstancesModification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PurchaseHostReservationOutput) GoString() string { +func (s ReservedInstancesModification) GoString() string { return s.String() } // SetClientToken sets the ClientToken field's value. -func (s *PurchaseHostReservationOutput) SetClientToken(v string) *PurchaseHostReservationOutput { +func (s *ReservedInstancesModification) SetClientToken(v string) *ReservedInstancesModification { s.ClientToken = &v return s } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *PurchaseHostReservationOutput) SetCurrencyCode(v string) *PurchaseHostReservationOutput { - s.CurrencyCode = &v +// SetCreateDate sets the CreateDate field's value. +func (s *ReservedInstancesModification) SetCreateDate(v time.Time) *ReservedInstancesModification { + s.CreateDate = &v return s } -// SetPurchase sets the Purchase field's value. -func (s *PurchaseHostReservationOutput) SetPurchase(v []*Purchase) *PurchaseHostReservationOutput { - s.Purchase = v +// SetEffectiveDate sets the EffectiveDate field's value. +func (s *ReservedInstancesModification) SetEffectiveDate(v time.Time) *ReservedInstancesModification { + s.EffectiveDate = &v return s } -// SetTotalHourlyPrice sets the TotalHourlyPrice field's value. -func (s *PurchaseHostReservationOutput) SetTotalHourlyPrice(v string) *PurchaseHostReservationOutput { - s.TotalHourlyPrice = &v +// SetModificationResults sets the ModificationResults field's value. +func (s *ReservedInstancesModification) SetModificationResults(v []*ReservedInstancesModificationResult) *ReservedInstancesModification { + s.ModificationResults = v return s } -// SetTotalUpfrontPrice sets the TotalUpfrontPrice field's value. -func (s *PurchaseHostReservationOutput) SetTotalUpfrontPrice(v string) *PurchaseHostReservationOutput { - s.TotalUpfrontPrice = &v +// SetReservedInstancesIds sets the ReservedInstancesIds field's value. +func (s *ReservedInstancesModification) SetReservedInstancesIds(v []*ReservedInstancesId) *ReservedInstancesModification { + s.ReservedInstancesIds = v return s } -// Describes a request to purchase Scheduled Instances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseRequest -type PurchaseRequest struct { +// SetReservedInstancesModificationId sets the ReservedInstancesModificationId field's value. +func (s *ReservedInstancesModification) SetReservedInstancesModificationId(v string) *ReservedInstancesModification { + s.ReservedInstancesModificationId = &v + return s +} + +// SetStatus sets the Status field's value. +func (s *ReservedInstancesModification) SetStatus(v string) *ReservedInstancesModification { + s.Status = &v + return s +} + +// SetStatusMessage sets the StatusMessage field's value. +func (s *ReservedInstancesModification) SetStatusMessage(v string) *ReservedInstancesModification { + s.StatusMessage = &v + return s +} + +// SetUpdateDate sets the UpdateDate field's value. +func (s *ReservedInstancesModification) SetUpdateDate(v time.Time) *ReservedInstancesModification { + s.UpdateDate = &v + return s +} + +// Describes the modification request/s. +type ReservedInstancesModificationResult struct { _ struct{} `type:"structure"` - // The number of instances. - // - // InstanceCount is a required field - InstanceCount *int64 `type:"integer" required:"true"` + // The ID for the Reserved Instances that were created as part of the modification + // request. This field is only available when the modification is fulfilled. + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` - // The purchase token. - // - // PurchaseToken is a required field - PurchaseToken *string `type:"string" required:"true"` + // The target Reserved Instances configurations supplied as part of the modification + // request. + TargetConfiguration *ReservedInstancesConfiguration `locationName:"targetConfiguration" type:"structure"` } // String returns the string representation -func (s PurchaseRequest) String() string { +func (s ReservedInstancesModificationResult) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PurchaseRequest) GoString() string { +func (s ReservedInstancesModificationResult) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *PurchaseRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PurchaseRequest"} - if s.InstanceCount == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceCount")) - } - if s.PurchaseToken == nil { - invalidParams.Add(request.NewErrParamRequired("PurchaseToken")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetInstanceCount sets the InstanceCount field's value. -func (s *PurchaseRequest) SetInstanceCount(v int64) *PurchaseRequest { - s.InstanceCount = &v +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *ReservedInstancesModificationResult) SetReservedInstancesId(v string) *ReservedInstancesModificationResult { + s.ReservedInstancesId = &v return s } -// SetPurchaseToken sets the PurchaseToken field's value. -func (s *PurchaseRequest) SetPurchaseToken(v string) *PurchaseRequest { - s.PurchaseToken = &v +// SetTargetConfiguration sets the TargetConfiguration field's value. +func (s *ReservedInstancesModificationResult) SetTargetConfiguration(v *ReservedInstancesConfiguration) *ReservedInstancesModificationResult { + s.TargetConfiguration = v return s } -// Contains the parameters for PurchaseReservedInstancesOffering. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOfferingRequest -type PurchaseReservedInstancesOfferingInput struct { +// Describes a Reserved Instance offering. +type ReservedInstancesOffering struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The Availability Zone in which the Reserved Instance can be used. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The number of Reserved Instances to purchase. - // - // InstanceCount is a required field - InstanceCount *int64 `type:"integer" required:"true"` + // The currency of the Reserved Instance offering you are purchasing. It's specified + // using ISO 4217 standard currency codes. At this time, the only supported + // currency is USD. + CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - // Specified for Reserved Instance Marketplace offerings to limit the total - // order and ensure that the Reserved Instances are not purchased at unexpected - // prices. - LimitPrice *ReservedInstanceLimitPrice `locationName:"limitPrice" type:"structure"` + // The duration of the Reserved Instance, in seconds. + Duration *int64 `locationName:"duration" type:"long"` - // The ID of the Reserved Instance offering to purchase. - // - // ReservedInstancesOfferingId is a required field - ReservedInstancesOfferingId *string `type:"string" required:"true"` + // The purchase price of the Reserved Instance. + FixedPrice *float64 `locationName:"fixedPrice" type:"float"` + + // The tenancy of the instance. + InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` + + // The instance type on which the Reserved Instance can be used. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + + // Indicates whether the offering is available through the Reserved Instance + // Marketplace (resale) or AWS. If it's a Reserved Instance Marketplace offering, + // this is true. + Marketplace *bool `locationName:"marketplace" type:"boolean"` + + // If convertible it can be exchanged for Reserved Instances of the same or + // higher monetary value, with different configurations. If standard, it is + // not possible to perform an exchange. + OfferingClass *string `locationName:"offeringClass" type:"string" enum:"OfferingClassType"` + + // The Reserved Instance offering type. + OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` + + // The pricing details of the Reserved Instance offering. + PricingDetails []*PricingDetail `locationName:"pricingDetailsSet" locationNameList:"item" type:"list"` + + // The Reserved Instance product platform description. + ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` + + // The recurring charge tag assigned to the resource. + RecurringCharges []*RecurringCharge `locationName:"recurringCharges" locationNameList:"item" type:"list"` + + // The ID of the Reserved Instance offering. This is the offering ID used in + // GetReservedInstancesExchangeQuote to confirm that an exchange can be made. + ReservedInstancesOfferingId *string `locationName:"reservedInstancesOfferingId" type:"string"` + + // Whether the Reserved Instance is applied to instances in a Region or an Availability + // Zone. + Scope *string `locationName:"scope" type:"string" enum:"scope"` + + // The usage price of the Reserved Instance, per hour. + UsagePrice *float64 `locationName:"usagePrice" type:"float"` } // String returns the string representation -func (s PurchaseReservedInstancesOfferingInput) String() string { +func (s ReservedInstancesOffering) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PurchaseReservedInstancesOfferingInput) GoString() string { +func (s ReservedInstancesOffering) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *PurchaseReservedInstancesOfferingInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PurchaseReservedInstancesOfferingInput"} - if s.InstanceCount == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceCount")) - } - if s.ReservedInstancesOfferingId == nil { - invalidParams.Add(request.NewErrParamRequired("ReservedInstancesOfferingId")) - } +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ReservedInstancesOffering) SetAvailabilityZone(v string) *ReservedInstancesOffering { + s.AvailabilityZone = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCurrencyCode sets the CurrencyCode field's value. +func (s *ReservedInstancesOffering) SetCurrencyCode(v string) *ReservedInstancesOffering { + s.CurrencyCode = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetDryRun(v bool) *PurchaseReservedInstancesOfferingInput { - s.DryRun = &v +// SetDuration sets the Duration field's value. +func (s *ReservedInstancesOffering) SetDuration(v int64) *ReservedInstancesOffering { + s.Duration = &v return s } -// SetInstanceCount sets the InstanceCount field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetInstanceCount(v int64) *PurchaseReservedInstancesOfferingInput { - s.InstanceCount = &v +// SetFixedPrice sets the FixedPrice field's value. +func (s *ReservedInstancesOffering) SetFixedPrice(v float64) *ReservedInstancesOffering { + s.FixedPrice = &v return s } -// SetLimitPrice sets the LimitPrice field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetLimitPrice(v *ReservedInstanceLimitPrice) *PurchaseReservedInstancesOfferingInput { - s.LimitPrice = v +// SetInstanceTenancy sets the InstanceTenancy field's value. +func (s *ReservedInstancesOffering) SetInstanceTenancy(v string) *ReservedInstancesOffering { + s.InstanceTenancy = &v return s } -// SetReservedInstancesOfferingId sets the ReservedInstancesOfferingId field's value. -func (s *PurchaseReservedInstancesOfferingInput) SetReservedInstancesOfferingId(v string) *PurchaseReservedInstancesOfferingInput { - s.ReservedInstancesOfferingId = &v +// SetInstanceType sets the InstanceType field's value. +func (s *ReservedInstancesOffering) SetInstanceType(v string) *ReservedInstancesOffering { + s.InstanceType = &v return s } -// Contains the output of PurchaseReservedInstancesOffering. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOfferingResult -type PurchaseReservedInstancesOfferingOutput struct { - _ struct{} `type:"structure"` +// SetMarketplace sets the Marketplace field's value. +func (s *ReservedInstancesOffering) SetMarketplace(v bool) *ReservedInstancesOffering { + s.Marketplace = &v + return s +} - // The IDs of the purchased Reserved Instances. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` +// SetOfferingClass sets the OfferingClass field's value. +func (s *ReservedInstancesOffering) SetOfferingClass(v string) *ReservedInstancesOffering { + s.OfferingClass = &v + return s } -// String returns the string representation -func (s PurchaseReservedInstancesOfferingOutput) String() string { - return awsutil.Prettify(s) +// SetOfferingType sets the OfferingType field's value. +func (s *ReservedInstancesOffering) SetOfferingType(v string) *ReservedInstancesOffering { + s.OfferingType = &v + return s } -// GoString returns the string representation -func (s PurchaseReservedInstancesOfferingOutput) GoString() string { - return s.String() +// SetPricingDetails sets the PricingDetails field's value. +func (s *ReservedInstancesOffering) SetPricingDetails(v []*PricingDetail) *ReservedInstancesOffering { + s.PricingDetails = v + return s } -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *PurchaseReservedInstancesOfferingOutput) SetReservedInstancesId(v string) *PurchaseReservedInstancesOfferingOutput { - s.ReservedInstancesId = &v +// SetProductDescription sets the ProductDescription field's value. +func (s *ReservedInstancesOffering) SetProductDescription(v string) *ReservedInstancesOffering { + s.ProductDescription = &v return s } -// Contains the parameters for PurchaseScheduledInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstancesRequest -type PurchaseScheduledInstancesInput struct { - _ struct{} `type:"structure"` +// SetRecurringCharges sets the RecurringCharges field's value. +func (s *ReservedInstancesOffering) SetRecurringCharges(v []*RecurringCharge) *ReservedInstancesOffering { + s.RecurringCharges = v + return s +} - // Unique, case-sensitive identifier that ensures the idempotency of the request. - // For more information, see Ensuring Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` +// SetReservedInstancesOfferingId sets the ReservedInstancesOfferingId field's value. +func (s *ReservedInstancesOffering) SetReservedInstancesOfferingId(v string) *ReservedInstancesOffering { + s.ReservedInstancesOfferingId = &v + return s +} + +// SetScope sets the Scope field's value. +func (s *ReservedInstancesOffering) SetScope(v string) *ReservedInstancesOffering { + s.Scope = &v + return s +} + +// SetUsagePrice sets the UsagePrice field's value. +func (s *ReservedInstancesOffering) SetUsagePrice(v float64) *ReservedInstancesOffering { + s.UsagePrice = &v + return s +} + +type ResetEbsDefaultKmsKeyIdInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. DryRun *bool `type:"boolean"` - - // One or more purchase requests. - // - // PurchaseRequests is a required field - PurchaseRequests []*PurchaseRequest `locationName:"PurchaseRequest" locationNameList:"PurchaseRequest" min:"1" type:"list" required:"true"` } // String returns the string representation -func (s PurchaseScheduledInstancesInput) String() string { +func (s ResetEbsDefaultKmsKeyIdInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PurchaseScheduledInstancesInput) GoString() string { +func (s ResetEbsDefaultKmsKeyIdInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *PurchaseScheduledInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "PurchaseScheduledInstancesInput"} - if s.PurchaseRequests == nil { - invalidParams.Add(request.NewErrParamRequired("PurchaseRequests")) - } - if s.PurchaseRequests != nil && len(s.PurchaseRequests) < 1 { - invalidParams.Add(request.NewErrParamMinLen("PurchaseRequests", 1)) - } - if s.PurchaseRequests != nil { - for i, v := range s.PurchaseRequests { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PurchaseRequests", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetClientToken sets the ClientToken field's value. -func (s *PurchaseScheduledInstancesInput) SetClientToken(v string) *PurchaseScheduledInstancesInput { - s.ClientToken = &v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *PurchaseScheduledInstancesInput) SetDryRun(v bool) *PurchaseScheduledInstancesInput { +func (s *ResetEbsDefaultKmsKeyIdInput) SetDryRun(v bool) *ResetEbsDefaultKmsKeyIdInput { s.DryRun = &v return s } -// SetPurchaseRequests sets the PurchaseRequests field's value. -func (s *PurchaseScheduledInstancesInput) SetPurchaseRequests(v []*PurchaseRequest) *PurchaseScheduledInstancesInput { - s.PurchaseRequests = v - return s -} - -// Contains the output of PurchaseScheduledInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstancesResult -type PurchaseScheduledInstancesOutput struct { +type ResetEbsDefaultKmsKeyIdOutput struct { _ struct{} `type:"structure"` - // Information about the Scheduled Instances. - ScheduledInstanceSet []*ScheduledInstance `locationName:"scheduledInstanceSet" locationNameList:"item" type:"list"` + // The Amazon Resource Name (ARN) of the default CMK for EBS encryption by default. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` } // String returns the string representation -func (s PurchaseScheduledInstancesOutput) String() string { +func (s ResetEbsDefaultKmsKeyIdOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s PurchaseScheduledInstancesOutput) GoString() string { +func (s ResetEbsDefaultKmsKeyIdOutput) GoString() string { return s.String() } -// SetScheduledInstanceSet sets the ScheduledInstanceSet field's value. -func (s *PurchaseScheduledInstancesOutput) SetScheduledInstanceSet(v []*ScheduledInstance) *PurchaseScheduledInstancesOutput { - s.ScheduledInstanceSet = v +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *ResetEbsDefaultKmsKeyIdOutput) SetKmsKeyId(v string) *ResetEbsDefaultKmsKeyIdOutput { + s.KmsKeyId = &v return s } -// Contains the parameters for RebootInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstancesRequest -type RebootInstancesInput struct { +type ResetFpgaImageAttributeInput struct { _ struct{} `type:"structure"` + // The attribute. + Attribute *string `type:"string" enum:"ResetFpgaImageAttributeName"` + // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // One or more instance IDs. + // The ID of the AFI. // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` + // FpgaImageId is a required field + FpgaImageId *string `type:"string" required:"true"` } // String returns the string representation -func (s RebootInstancesInput) String() string { +func (s ResetFpgaImageAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RebootInstancesInput) GoString() string { +func (s ResetFpgaImageAttributeInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *RebootInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RebootInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) +func (s *ResetFpgaImageAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ResetFpgaImageAttributeInput"} + if s.FpgaImageId == nil { + invalidParams.Add(request.NewErrParamRequired("FpgaImageId")) } if invalidParams.Len() > 0 { @@ -43142,117 +87152,56 @@ func (s *RebootInstancesInput) Validate() error { return nil } -// SetDryRun sets the DryRun field's value. -func (s *RebootInstancesInput) SetDryRun(v bool) *RebootInstancesInput { - s.DryRun = &v - return s -} - -// SetInstanceIds sets the InstanceIds field's value. -func (s *RebootInstancesInput) SetInstanceIds(v []*string) *RebootInstancesInput { - s.InstanceIds = v +// SetAttribute sets the Attribute field's value. +func (s *ResetFpgaImageAttributeInput) SetAttribute(v string) *ResetFpgaImageAttributeInput { + s.Attribute = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstancesOutput -type RebootInstancesOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s RebootInstancesOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RebootInstancesOutput) GoString() string { - return s.String() -} - -// Describes a recurring charge. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RecurringCharge -type RecurringCharge struct { - _ struct{} `type:"structure"` - - // The amount of the recurring charge. - Amount *float64 `locationName:"amount" type:"double"` - - // The frequency of the recurring charge. - Frequency *string `locationName:"frequency" type:"string" enum:"RecurringChargeFrequency"` -} - -// String returns the string representation -func (s RecurringCharge) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RecurringCharge) GoString() string { - return s.String() -} - -// SetAmount sets the Amount field's value. -func (s *RecurringCharge) SetAmount(v float64) *RecurringCharge { - s.Amount = &v +// SetDryRun sets the DryRun field's value. +func (s *ResetFpgaImageAttributeInput) SetDryRun(v bool) *ResetFpgaImageAttributeInput { + s.DryRun = &v return s } -// SetFrequency sets the Frequency field's value. -func (s *RecurringCharge) SetFrequency(v string) *RecurringCharge { - s.Frequency = &v +// SetFpgaImageId sets the FpgaImageId field's value. +func (s *ResetFpgaImageAttributeInput) SetFpgaImageId(v string) *ResetFpgaImageAttributeInput { + s.FpgaImageId = &v return s } -// Describes a region. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Region -type Region struct { +type ResetFpgaImageAttributeOutput struct { _ struct{} `type:"structure"` - // The region service endpoint. - Endpoint *string `locationName:"regionEndpoint" type:"string"` - - // The name of the region. - RegionName *string `locationName:"regionName" type:"string"` + // Is true if the request succeeds, and an error otherwise. + Return *bool `locationName:"return" type:"boolean"` } // String returns the string representation -func (s Region) String() string { +func (s ResetFpgaImageAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Region) GoString() string { +func (s ResetFpgaImageAttributeOutput) GoString() string { return s.String() } -// SetEndpoint sets the Endpoint field's value. -func (s *Region) SetEndpoint(v string) *Region { - s.Endpoint = &v - return s -} - -// SetRegionName sets the RegionName field's value. -func (s *Region) SetRegionName(v string) *Region { - s.RegionName = &v +// SetReturn sets the Return field's value. +func (s *ResetFpgaImageAttributeOutput) SetReturn(v bool) *ResetFpgaImageAttributeOutput { + s.Return = &v return s } -// Contains the parameters for RegisterImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImageRequest -type RegisterImageInput struct { +// Contains the parameters for ResetImageAttribute. +type ResetImageAttributeInput struct { _ struct{} `type:"structure"` - // The architecture of the AMI. + // The attribute to reset (currently you can only reset the launch permission + // attribute). // - // Default: For Amazon EBS-backed AMIs, i386. For instance store-backed AMIs, - // the architecture specified in the manifest file. - Architecture *string `locationName:"architecture" type:"string" enum:"ArchitectureValues"` - - // One or more block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - - // A description for your AMI. - Description *string `locationName:"description" type:"string"` + // Attribute is a required field + Attribute *string `type:"string" required:"true" enum:"ResetImageAttributeName"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have @@ -43260,65 +87209,30 @@ type RegisterImageInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // Set to true to enable enhanced networking with ENA for the AMI and any instances - // that you launch from the AMI. - // - // This option is supported only for HVM AMIs. Specifying this option with a - // PV AMI can make instances launched from the AMI unreachable. - EnaSupport *bool `locationName:"enaSupport" type:"boolean"` - - // The full path to your AMI manifest in Amazon S3 storage. - ImageLocation *string `type:"string"` - - // The ID of the kernel. - KernelId *string `locationName:"kernelId" type:"string"` - - // A name for your AMI. - // - // Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets - // ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), - // at-signs (@), or underscores(_) - // - // Name is a required field - Name *string `locationName:"name" type:"string" required:"true"` - - // The ID of the RAM disk. - RamdiskId *string `locationName:"ramdiskId" type:"string"` - - // The name of the root device (for example, /dev/sda1, or /dev/xvda). - RootDeviceName *string `locationName:"rootDeviceName" type:"string"` - - // Set to simple to enable enhanced networking with the Intel 82599 Virtual - // Function interface for the AMI and any instances that you launch from the - // AMI. - // - // There is no way to disable sriovNetSupport at this time. - // - // This option is supported only for HVM AMIs. Specifying this option with a - // PV AMI can make instances launched from the AMI unreachable. - SriovNetSupport *string `locationName:"sriovNetSupport" type:"string"` - - // The type of virtualization. + // The ID of the AMI. // - // Default: paravirtual - VirtualizationType *string `locationName:"virtualizationType" type:"string"` + // ImageId is a required field + ImageId *string `type:"string" required:"true"` } // String returns the string representation -func (s RegisterImageInput) String() string { +func (s ResetImageAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RegisterImageInput) GoString() string { +func (s ResetImageAttributeInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *RegisterImageInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RegisterImageInput"} - if s.Name == nil { - invalidParams.Add(request.NewErrParamRequired("Name")) +func (s *ResetImageAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ResetImageAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) + } + if s.ImageId == nil { + invalidParams.Add(request.NewErrParamRequired("ImageId")) } if invalidParams.Len() > 0 { @@ -43327,106 +87241,121 @@ func (s *RegisterImageInput) Validate() error { return nil } -// SetArchitecture sets the Architecture field's value. -func (s *RegisterImageInput) SetArchitecture(v string) *RegisterImageInput { - s.Architecture = &v +// SetAttribute sets the Attribute field's value. +func (s *ResetImageAttributeInput) SetAttribute(v string) *ResetImageAttributeInput { + s.Attribute = &v return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *RegisterImageInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RegisterImageInput { - s.BlockDeviceMappings = v +// SetDryRun sets the DryRun field's value. +func (s *ResetImageAttributeInput) SetDryRun(v bool) *ResetImageAttributeInput { + s.DryRun = &v return s } -// SetDescription sets the Description field's value. -func (s *RegisterImageInput) SetDescription(v string) *RegisterImageInput { - s.Description = &v +// SetImageId sets the ImageId field's value. +func (s *ResetImageAttributeInput) SetImageId(v string) *ResetImageAttributeInput { + s.ImageId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *RegisterImageInput) SetDryRun(v bool) *RegisterImageInput { - s.DryRun = &v - return s +type ResetImageAttributeOutput struct { + _ struct{} `type:"structure"` } -// SetEnaSupport sets the EnaSupport field's value. -func (s *RegisterImageInput) SetEnaSupport(v bool) *RegisterImageInput { - s.EnaSupport = &v - return s +// String returns the string representation +func (s ResetImageAttributeOutput) String() string { + return awsutil.Prettify(s) } -// SetImageLocation sets the ImageLocation field's value. -func (s *RegisterImageInput) SetImageLocation(v string) *RegisterImageInput { - s.ImageLocation = &v - return s +// GoString returns the string representation +func (s ResetImageAttributeOutput) GoString() string { + return s.String() } -// SetKernelId sets the KernelId field's value. -func (s *RegisterImageInput) SetKernelId(v string) *RegisterImageInput { - s.KernelId = &v - return s +type ResetInstanceAttributeInput struct { + _ struct{} `type:"structure"` + + // The attribute to reset. + // + // You can only reset the following attributes: kernel | ramdisk | sourceDestCheck. + // To change an instance attribute, use ModifyInstanceAttribute. + // + // Attribute is a required field + Attribute *string `locationName:"attribute" type:"string" required:"true" enum:"InstanceAttributeName"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The ID of the instance. + // + // InstanceId is a required field + InstanceId *string `locationName:"instanceId" type:"string" required:"true"` } -// SetName sets the Name field's value. -func (s *RegisterImageInput) SetName(v string) *RegisterImageInput { - s.Name = &v - return s +// String returns the string representation +func (s ResetInstanceAttributeInput) String() string { + return awsutil.Prettify(s) } -// SetRamdiskId sets the RamdiskId field's value. -func (s *RegisterImageInput) SetRamdiskId(v string) *RegisterImageInput { - s.RamdiskId = &v - return s +// GoString returns the string representation +func (s ResetInstanceAttributeInput) GoString() string { + return s.String() } -// SetRootDeviceName sets the RootDeviceName field's value. -func (s *RegisterImageInput) SetRootDeviceName(v string) *RegisterImageInput { - s.RootDeviceName = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ResetInstanceAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ResetInstanceAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) + } + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttribute sets the Attribute field's value. +func (s *ResetInstanceAttributeInput) SetAttribute(v string) *ResetInstanceAttributeInput { + s.Attribute = &v return s } -// SetSriovNetSupport sets the SriovNetSupport field's value. -func (s *RegisterImageInput) SetSriovNetSupport(v string) *RegisterImageInput { - s.SriovNetSupport = &v +// SetDryRun sets the DryRun field's value. +func (s *ResetInstanceAttributeInput) SetDryRun(v bool) *ResetInstanceAttributeInput { + s.DryRun = &v return s } -// SetVirtualizationType sets the VirtualizationType field's value. -func (s *RegisterImageInput) SetVirtualizationType(v string) *RegisterImageInput { - s.VirtualizationType = &v +// SetInstanceId sets the InstanceId field's value. +func (s *ResetInstanceAttributeInput) SetInstanceId(v string) *ResetInstanceAttributeInput { + s.InstanceId = &v return s } -// Contains the output of RegisterImage. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImageResult -type RegisterImageOutput struct { +type ResetInstanceAttributeOutput struct { _ struct{} `type:"structure"` - - // The ID of the newly registered AMI. - ImageId *string `locationName:"imageId" type:"string"` } // String returns the string representation -func (s RegisterImageOutput) String() string { +func (s ResetInstanceAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RegisterImageOutput) GoString() string { +func (s ResetInstanceAttributeOutput) GoString() string { return s.String() } -// SetImageId sets the ImageId field's value. -func (s *RegisterImageOutput) SetImageId(v string) *RegisterImageOutput { - s.ImageId = &v - return s -} - -// Contains the parameters for RejectVpcPeeringConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnectionRequest -type RejectVpcPeeringConnectionInput struct { +// Contains the parameters for ResetNetworkInterfaceAttribute. +type ResetNetworkInterfaceAttributeInput struct { _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without @@ -43435,27 +87364,30 @@ type RejectVpcPeeringConnectionInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // The ID of the VPC peering connection. + // The ID of the network interface. // - // VpcPeeringConnectionId is a required field - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string" required:"true"` + // NetworkInterfaceId is a required field + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` + + // The source/destination checking attribute. Resets the value to true. + SourceDestCheck *string `locationName:"sourceDestCheck" type:"string"` } // String returns the string representation -func (s RejectVpcPeeringConnectionInput) String() string { +func (s ResetNetworkInterfaceAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RejectVpcPeeringConnectionInput) GoString() string { +func (s ResetNetworkInterfaceAttributeInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *RejectVpcPeeringConnectionInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RejectVpcPeeringConnectionInput"} - if s.VpcPeeringConnectionId == nil { - invalidParams.Add(request.NewErrParamRequired("VpcPeeringConnectionId")) +func (s *ResetNetworkInterfaceAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ResetNetworkInterfaceAttributeInput"} + if s.NetworkInterfaceId == nil { + invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) } if invalidParams.Len() > 0 { @@ -43465,49 +87397,45 @@ func (s *RejectVpcPeeringConnectionInput) Validate() error { } // SetDryRun sets the DryRun field's value. -func (s *RejectVpcPeeringConnectionInput) SetDryRun(v bool) *RejectVpcPeeringConnectionInput { +func (s *ResetNetworkInterfaceAttributeInput) SetDryRun(v bool) *ResetNetworkInterfaceAttributeInput { s.DryRun = &v return s } -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *RejectVpcPeeringConnectionInput) SetVpcPeeringConnectionId(v string) *RejectVpcPeeringConnectionInput { - s.VpcPeeringConnectionId = &v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *ResetNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *ResetNetworkInterfaceAttributeInput { + s.NetworkInterfaceId = &v return s } -// Contains the output of RejectVpcPeeringConnection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnectionResult -type RejectVpcPeeringConnectionOutput struct { - _ struct{} `type:"structure"` +// SetSourceDestCheck sets the SourceDestCheck field's value. +func (s *ResetNetworkInterfaceAttributeInput) SetSourceDestCheck(v string) *ResetNetworkInterfaceAttributeInput { + s.SourceDestCheck = &v + return s +} - // Returns true if the request succeeds; otherwise, it returns an error. - Return *bool `locationName:"return" type:"boolean"` +type ResetNetworkInterfaceAttributeOutput struct { + _ struct{} `type:"structure"` } // String returns the string representation -func (s RejectVpcPeeringConnectionOutput) String() string { +func (s ResetNetworkInterfaceAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RejectVpcPeeringConnectionOutput) GoString() string { +func (s ResetNetworkInterfaceAttributeOutput) GoString() string { return s.String() } -// SetReturn sets the Return field's value. -func (s *RejectVpcPeeringConnectionOutput) SetReturn(v bool) *RejectVpcPeeringConnectionOutput { - s.Return = &v - return s -} - -// Contains the parameters for ReleaseAddress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddressRequest -type ReleaseAddressInput struct { +type ResetSnapshotAttributeInput struct { _ struct{} `type:"structure"` - // [EC2-VPC] The allocation ID. Required for EC2-VPC. - AllocationId *string `type:"string"` + // The attribute to reset. Currently, only the attribute for permission to create + // volumes can be reset. + // + // Attribute is a required field + Attribute *string `type:"string" required:"true" enum:"SnapshotAttributeName"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have @@ -43515,161 +87443,380 @@ type ReleaseAddressInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // [EC2-Classic] The Elastic IP address. Required for EC2-Classic. - PublicIp *string `type:"string"` + // The ID of the snapshot. + // + // SnapshotId is a required field + SnapshotId *string `type:"string" required:"true"` } // String returns the string representation -func (s ReleaseAddressInput) String() string { +func (s ResetSnapshotAttributeInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReleaseAddressInput) GoString() string { +func (s ResetSnapshotAttributeInput) GoString() string { return s.String() } -// SetAllocationId sets the AllocationId field's value. -func (s *ReleaseAddressInput) SetAllocationId(v string) *ReleaseAddressInput { - s.AllocationId = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ResetSnapshotAttributeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ResetSnapshotAttributeInput"} + if s.Attribute == nil { + invalidParams.Add(request.NewErrParamRequired("Attribute")) + } + if s.SnapshotId == nil { + invalidParams.Add(request.NewErrParamRequired("SnapshotId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttribute sets the Attribute field's value. +func (s *ResetSnapshotAttributeInput) SetAttribute(v string) *ResetSnapshotAttributeInput { + s.Attribute = &v return s } // SetDryRun sets the DryRun field's value. -func (s *ReleaseAddressInput) SetDryRun(v bool) *ReleaseAddressInput { +func (s *ResetSnapshotAttributeInput) SetDryRun(v bool) *ResetSnapshotAttributeInput { s.DryRun = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *ReleaseAddressInput) SetPublicIp(v string) *ReleaseAddressInput { - s.PublicIp = &v +// SetSnapshotId sets the SnapshotId field's value. +func (s *ResetSnapshotAttributeInput) SetSnapshotId(v string) *ResetSnapshotAttributeInput { + s.SnapshotId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddressOutput -type ReleaseAddressOutput struct { +type ResetSnapshotAttributeOutput struct { _ struct{} `type:"structure"` } // String returns the string representation -func (s ReleaseAddressOutput) String() string { +func (s ResetSnapshotAttributeOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReleaseAddressOutput) GoString() string { +func (s ResetSnapshotAttributeOutput) GoString() string { return s.String() } -// Contains the parameters for ReleaseHosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHostsRequest -type ReleaseHostsInput struct { +// Describes the error that's returned when you cannot delete a launch template +// version. +type ResponseError struct { _ struct{} `type:"structure"` - // The IDs of the Dedicated Hosts you want to release. - // - // HostIds is a required field - HostIds []*string `locationName:"hostId" locationNameList:"item" type:"list" required:"true"` + // The error code. + Code *string `locationName:"code" type:"string" enum:"LaunchTemplateErrorCode"` + + // The error message, if applicable. + Message *string `locationName:"message" type:"string"` } // String returns the string representation -func (s ReleaseHostsInput) String() string { +func (s ResponseError) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReleaseHostsInput) GoString() string { +func (s ResponseError) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReleaseHostsInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReleaseHostsInput"} - if s.HostIds == nil { - invalidParams.Add(request.NewErrParamRequired("HostIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCode sets the Code field's value. +func (s *ResponseError) SetCode(v string) *ResponseError { + s.Code = &v + return s } -// SetHostIds sets the HostIds field's value. -func (s *ReleaseHostsInput) SetHostIds(v []*string) *ReleaseHostsInput { - s.HostIds = v +// SetMessage sets the Message field's value. +func (s *ResponseError) SetMessage(v string) *ResponseError { + s.Message = &v return s } -// Contains the output of ReleaseHosts. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHostsResult -type ReleaseHostsOutput struct { +// The information for a launch template. +type ResponseLaunchTemplateData struct { _ struct{} `type:"structure"` - // The IDs of the Dedicated Hosts that were successfully released. - Successful []*string `locationName:"successful" locationNameList:"item" type:"list"` + // The block device mappings. + BlockDeviceMappings []*LaunchTemplateBlockDeviceMapping `locationName:"blockDeviceMappingSet" locationNameList:"item" type:"list"` - // The IDs of the Dedicated Hosts that could not be released, including an error - // message. - Unsuccessful []*UnsuccessfulItem `locationName:"unsuccessful" locationNameList:"item" type:"list"` + // Information about the Capacity Reservation targeting option. + CapacityReservationSpecification *LaunchTemplateCapacityReservationSpecificationResponse `locationName:"capacityReservationSpecification" type:"structure"` + + // The CPU options for the instance. For more information, see Optimizing CPU + // Options (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) + // in the Amazon Elastic Compute Cloud User Guide. + CpuOptions *LaunchTemplateCpuOptions `locationName:"cpuOptions" type:"structure"` + + // The credit option for CPU usage of the instance. + CreditSpecification *CreditSpecification `locationName:"creditSpecification" type:"structure"` + + // If set to true, indicates that the instance cannot be terminated using the + // Amazon EC2 console, command line tool, or API. + DisableApiTermination *bool `locationName:"disableApiTermination" type:"boolean"` + + // Indicates whether the instance is optimized for Amazon EBS I/O. + EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` + + // The elastic GPU specification. + ElasticGpuSpecifications []*ElasticGpuSpecificationResponse `locationName:"elasticGpuSpecificationSet" locationNameList:"item" type:"list"` + + // The elastic inference accelerator for the instance. + ElasticInferenceAccelerators []*LaunchTemplateElasticInferenceAcceleratorResponse `locationName:"elasticInferenceAcceleratorSet" locationNameList:"item" type:"list"` + + // Indicates whether an instance is configured for hibernation. For more information, + // see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) + // in the Amazon Elastic Compute Cloud User Guide. + HibernationOptions *LaunchTemplateHibernationOptions `locationName:"hibernationOptions" type:"structure"` + + // The IAM instance profile. + IamInstanceProfile *LaunchTemplateIamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` + + // The ID of the AMI that was used to launch the instance. + ImageId *string `locationName:"imageId" type:"string"` + + // Indicates whether an instance stops or terminates when you initiate shutdown + // from the instance (using the operating system command for system shutdown). + InstanceInitiatedShutdownBehavior *string `locationName:"instanceInitiatedShutdownBehavior" type:"string" enum:"ShutdownBehavior"` + + // The market (purchasing) option for the instances. + InstanceMarketOptions *LaunchTemplateInstanceMarketOptions `locationName:"instanceMarketOptions" type:"structure"` + + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + + // The ID of the kernel, if applicable. + KernelId *string `locationName:"kernelId" type:"string"` + + // The name of the key pair. + KeyName *string `locationName:"keyName" type:"string"` + + // The license configurations. + LicenseSpecifications []*LaunchTemplateLicenseConfiguration `locationName:"licenseSet" locationNameList:"item" type:"list"` + + // The monitoring for the instance. + Monitoring *LaunchTemplatesMonitoring `locationName:"monitoring" type:"structure"` + + // The network interfaces. + NetworkInterfaces []*LaunchTemplateInstanceNetworkInterfaceSpecification `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` + + // The placement of the instance. + Placement *LaunchTemplatePlacement `locationName:"placement" type:"structure"` + + // The ID of the RAM disk, if applicable. + RamDiskId *string `locationName:"ramDiskId" type:"string"` + + // The security group IDs. + SecurityGroupIds []*string `locationName:"securityGroupIdSet" locationNameList:"item" type:"list"` + + // The security group names. + SecurityGroups []*string `locationName:"securityGroupSet" locationNameList:"item" type:"list"` + + // The tags. + TagSpecifications []*LaunchTemplateTagSpecification `locationName:"tagSpecificationSet" locationNameList:"item" type:"list"` + + // The user data for the instance. + UserData *string `locationName:"userData" type:"string"` } // String returns the string representation -func (s ReleaseHostsOutput) String() string { +func (s ResponseLaunchTemplateData) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReleaseHostsOutput) GoString() string { +func (s ResponseLaunchTemplateData) GoString() string { return s.String() } -// SetSuccessful sets the Successful field's value. -func (s *ReleaseHostsOutput) SetSuccessful(v []*string) *ReleaseHostsOutput { - s.Successful = v +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *ResponseLaunchTemplateData) SetBlockDeviceMappings(v []*LaunchTemplateBlockDeviceMapping) *ResponseLaunchTemplateData { + s.BlockDeviceMappings = v return s } -// SetUnsuccessful sets the Unsuccessful field's value. -func (s *ReleaseHostsOutput) SetUnsuccessful(v []*UnsuccessfulItem) *ReleaseHostsOutput { - s.Unsuccessful = v +// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. +func (s *ResponseLaunchTemplateData) SetCapacityReservationSpecification(v *LaunchTemplateCapacityReservationSpecificationResponse) *ResponseLaunchTemplateData { + s.CapacityReservationSpecification = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociationRequest -type ReplaceIamInstanceProfileAssociationInput struct { +// SetCpuOptions sets the CpuOptions field's value. +func (s *ResponseLaunchTemplateData) SetCpuOptions(v *LaunchTemplateCpuOptions) *ResponseLaunchTemplateData { + s.CpuOptions = v + return s +} + +// SetCreditSpecification sets the CreditSpecification field's value. +func (s *ResponseLaunchTemplateData) SetCreditSpecification(v *CreditSpecification) *ResponseLaunchTemplateData { + s.CreditSpecification = v + return s +} + +// SetDisableApiTermination sets the DisableApiTermination field's value. +func (s *ResponseLaunchTemplateData) SetDisableApiTermination(v bool) *ResponseLaunchTemplateData { + s.DisableApiTermination = &v + return s +} + +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *ResponseLaunchTemplateData) SetEbsOptimized(v bool) *ResponseLaunchTemplateData { + s.EbsOptimized = &v + return s +} + +// SetElasticGpuSpecifications sets the ElasticGpuSpecifications field's value. +func (s *ResponseLaunchTemplateData) SetElasticGpuSpecifications(v []*ElasticGpuSpecificationResponse) *ResponseLaunchTemplateData { + s.ElasticGpuSpecifications = v + return s +} + +// SetElasticInferenceAccelerators sets the ElasticInferenceAccelerators field's value. +func (s *ResponseLaunchTemplateData) SetElasticInferenceAccelerators(v []*LaunchTemplateElasticInferenceAcceleratorResponse) *ResponseLaunchTemplateData { + s.ElasticInferenceAccelerators = v + return s +} + +// SetHibernationOptions sets the HibernationOptions field's value. +func (s *ResponseLaunchTemplateData) SetHibernationOptions(v *LaunchTemplateHibernationOptions) *ResponseLaunchTemplateData { + s.HibernationOptions = v + return s +} + +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *ResponseLaunchTemplateData) SetIamInstanceProfile(v *LaunchTemplateIamInstanceProfileSpecification) *ResponseLaunchTemplateData { + s.IamInstanceProfile = v + return s +} + +// SetImageId sets the ImageId field's value. +func (s *ResponseLaunchTemplateData) SetImageId(v string) *ResponseLaunchTemplateData { + s.ImageId = &v + return s +} + +// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. +func (s *ResponseLaunchTemplateData) SetInstanceInitiatedShutdownBehavior(v string) *ResponseLaunchTemplateData { + s.InstanceInitiatedShutdownBehavior = &v + return s +} + +// SetInstanceMarketOptions sets the InstanceMarketOptions field's value. +func (s *ResponseLaunchTemplateData) SetInstanceMarketOptions(v *LaunchTemplateInstanceMarketOptions) *ResponseLaunchTemplateData { + s.InstanceMarketOptions = v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *ResponseLaunchTemplateData) SetInstanceType(v string) *ResponseLaunchTemplateData { + s.InstanceType = &v + return s +} + +// SetKernelId sets the KernelId field's value. +func (s *ResponseLaunchTemplateData) SetKernelId(v string) *ResponseLaunchTemplateData { + s.KernelId = &v + return s +} + +// SetKeyName sets the KeyName field's value. +func (s *ResponseLaunchTemplateData) SetKeyName(v string) *ResponseLaunchTemplateData { + s.KeyName = &v + return s +} + +// SetLicenseSpecifications sets the LicenseSpecifications field's value. +func (s *ResponseLaunchTemplateData) SetLicenseSpecifications(v []*LaunchTemplateLicenseConfiguration) *ResponseLaunchTemplateData { + s.LicenseSpecifications = v + return s +} + +// SetMonitoring sets the Monitoring field's value. +func (s *ResponseLaunchTemplateData) SetMonitoring(v *LaunchTemplatesMonitoring) *ResponseLaunchTemplateData { + s.Monitoring = v + return s +} + +// SetNetworkInterfaces sets the NetworkInterfaces field's value. +func (s *ResponseLaunchTemplateData) SetNetworkInterfaces(v []*LaunchTemplateInstanceNetworkInterfaceSpecification) *ResponseLaunchTemplateData { + s.NetworkInterfaces = v + return s +} + +// SetPlacement sets the Placement field's value. +func (s *ResponseLaunchTemplateData) SetPlacement(v *LaunchTemplatePlacement) *ResponseLaunchTemplateData { + s.Placement = v + return s +} + +// SetRamDiskId sets the RamDiskId field's value. +func (s *ResponseLaunchTemplateData) SetRamDiskId(v string) *ResponseLaunchTemplateData { + s.RamDiskId = &v + return s +} + +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *ResponseLaunchTemplateData) SetSecurityGroupIds(v []*string) *ResponseLaunchTemplateData { + s.SecurityGroupIds = v + return s +} + +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *ResponseLaunchTemplateData) SetSecurityGroups(v []*string) *ResponseLaunchTemplateData { + s.SecurityGroups = v + return s +} + +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *ResponseLaunchTemplateData) SetTagSpecifications(v []*LaunchTemplateTagSpecification) *ResponseLaunchTemplateData { + s.TagSpecifications = v + return s +} + +// SetUserData sets the UserData field's value. +func (s *ResponseLaunchTemplateData) SetUserData(v string) *ResponseLaunchTemplateData { + s.UserData = &v + return s +} + +type RestoreAddressToClassicInput struct { _ struct{} `type:"structure"` - // The ID of the existing IAM instance profile association. - // - // AssociationId is a required field - AssociationId *string `type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The IAM instance profile. + // The Elastic IP address. // - // IamInstanceProfile is a required field - IamInstanceProfile *IamInstanceProfileSpecification `type:"structure" required:"true"` + // PublicIp is a required field + PublicIp *string `locationName:"publicIp" type:"string" required:"true"` } // String returns the string representation -func (s ReplaceIamInstanceProfileAssociationInput) String() string { +func (s RestoreAddressToClassicInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceIamInstanceProfileAssociationInput) GoString() string { +func (s RestoreAddressToClassicInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceIamInstanceProfileAssociationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceIamInstanceProfileAssociationInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - if s.IamInstanceProfile == nil { - invalidParams.Add(request.NewErrParamRequired("IamInstanceProfile")) +func (s *RestoreAddressToClassicInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RestoreAddressToClassicInput"} + if s.PublicIp == nil { + invalidParams.Add(request.NewErrParamRequired("PublicIp")) } if invalidParams.Len() > 0 { @@ -43678,83 +87825,95 @@ func (s *ReplaceIamInstanceProfileAssociationInput) Validate() error { return nil } -// SetAssociationId sets the AssociationId field's value. -func (s *ReplaceIamInstanceProfileAssociationInput) SetAssociationId(v string) *ReplaceIamInstanceProfileAssociationInput { - s.AssociationId = &v +// SetDryRun sets the DryRun field's value. +func (s *RestoreAddressToClassicInput) SetDryRun(v bool) *RestoreAddressToClassicInput { + s.DryRun = &v return s } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *ReplaceIamInstanceProfileAssociationInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *ReplaceIamInstanceProfileAssociationInput { - s.IamInstanceProfile = v +// SetPublicIp sets the PublicIp field's value. +func (s *RestoreAddressToClassicInput) SetPublicIp(v string) *RestoreAddressToClassicInput { + s.PublicIp = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociationResult -type ReplaceIamInstanceProfileAssociationOutput struct { +type RestoreAddressToClassicOutput struct { _ struct{} `type:"structure"` - // Information about the IAM instance profile association. - IamInstanceProfileAssociation *IamInstanceProfileAssociation `locationName:"iamInstanceProfileAssociation" type:"structure"` + // The Elastic IP address. + PublicIp *string `locationName:"publicIp" type:"string"` + + // The move status for the IP address. + Status *string `locationName:"status" type:"string" enum:"Status"` } // String returns the string representation -func (s ReplaceIamInstanceProfileAssociationOutput) String() string { +func (s RestoreAddressToClassicOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceIamInstanceProfileAssociationOutput) GoString() string { +func (s RestoreAddressToClassicOutput) GoString() string { return s.String() } -// SetIamInstanceProfileAssociation sets the IamInstanceProfileAssociation field's value. -func (s *ReplaceIamInstanceProfileAssociationOutput) SetIamInstanceProfileAssociation(v *IamInstanceProfileAssociation) *ReplaceIamInstanceProfileAssociationOutput { - s.IamInstanceProfileAssociation = v +// SetPublicIp sets the PublicIp field's value. +func (s *RestoreAddressToClassicOutput) SetPublicIp(v string) *RestoreAddressToClassicOutput { + s.PublicIp = &v return s } -// Contains the parameters for ReplaceNetworkAclAssociation. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociationRequest -type ReplaceNetworkAclAssociationInput struct { +// SetStatus sets the Status field's value. +func (s *RestoreAddressToClassicOutput) SetStatus(v string) *RestoreAddressToClassicOutput { + s.Status = &v + return s +} + +type RevokeClientVpnIngressInput struct { _ struct{} `type:"structure"` - // The ID of the current association between the original network ACL and the - // subnet. + // The ID of the Active Directory group for which to revoke access. + AccessGroupId *string `type:"string"` + + // The ID of the Client VPN endpoint with which the authorization rule is associated. // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the new network ACL to associate with the subnet. + // Indicates whether access should be revoked for all clients. + RevokeAllGroups *bool `type:"boolean"` + + // The IPv4 address range, in CIDR notation, of the network for which access + // is being removed. // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` + // TargetNetworkCidr is a required field + TargetNetworkCidr *string `type:"string" required:"true"` } // String returns the string representation -func (s ReplaceNetworkAclAssociationInput) String() string { +func (s RevokeClientVpnIngressInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceNetworkAclAssociationInput) GoString() string { +func (s RevokeClientVpnIngressInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceNetworkAclAssociationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceNetworkAclAssociationInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) +func (s *RevokeClientVpnIngressInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RevokeClientVpnIngressInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) } - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) + if s.TargetNetworkCidr == nil { + invalidParams.Add(request.NewErrParamRequired("TargetNetworkCidr")) } if invalidParams.Len() > 0 { @@ -43763,56 +87922,64 @@ func (s *ReplaceNetworkAclAssociationInput) Validate() error { return nil } -// SetAssociationId sets the AssociationId field's value. -func (s *ReplaceNetworkAclAssociationInput) SetAssociationId(v string) *ReplaceNetworkAclAssociationInput { - s.AssociationId = &v +// SetAccessGroupId sets the AccessGroupId field's value. +func (s *RevokeClientVpnIngressInput) SetAccessGroupId(v string) *RevokeClientVpnIngressInput { + s.AccessGroupId = &v + return s +} + +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *RevokeClientVpnIngressInput) SetClientVpnEndpointId(v string) *RevokeClientVpnIngressInput { + s.ClientVpnEndpointId = &v return s } // SetDryRun sets the DryRun field's value. -func (s *ReplaceNetworkAclAssociationInput) SetDryRun(v bool) *ReplaceNetworkAclAssociationInput { +func (s *RevokeClientVpnIngressInput) SetDryRun(v bool) *RevokeClientVpnIngressInput { s.DryRun = &v return s } -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *ReplaceNetworkAclAssociationInput) SetNetworkAclId(v string) *ReplaceNetworkAclAssociationInput { - s.NetworkAclId = &v +// SetRevokeAllGroups sets the RevokeAllGroups field's value. +func (s *RevokeClientVpnIngressInput) SetRevokeAllGroups(v bool) *RevokeClientVpnIngressInput { + s.RevokeAllGroups = &v return s } -// Contains the output of ReplaceNetworkAclAssociation. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociationResult -type ReplaceNetworkAclAssociationOutput struct { +// SetTargetNetworkCidr sets the TargetNetworkCidr field's value. +func (s *RevokeClientVpnIngressInput) SetTargetNetworkCidr(v string) *RevokeClientVpnIngressInput { + s.TargetNetworkCidr = &v + return s +} + +type RevokeClientVpnIngressOutput struct { _ struct{} `type:"structure"` - // The ID of the new association. - NewAssociationId *string `locationName:"newAssociationId" type:"string"` + // The current state of the authorization rule. + Status *ClientVpnAuthorizationRuleStatus `locationName:"status" type:"structure"` } // String returns the string representation -func (s ReplaceNetworkAclAssociationOutput) String() string { +func (s RevokeClientVpnIngressOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceNetworkAclAssociationOutput) GoString() string { +func (s RevokeClientVpnIngressOutput) GoString() string { return s.String() } -// SetNewAssociationId sets the NewAssociationId field's value. -func (s *ReplaceNetworkAclAssociationOutput) SetNewAssociationId(v string) *ReplaceNetworkAclAssociationOutput { - s.NewAssociationId = &v +// SetStatus sets the Status field's value. +func (s *RevokeClientVpnIngressOutput) SetStatus(v *ClientVpnAuthorizationRuleStatus) *RevokeClientVpnIngressOutput { + s.Status = v return s } -// Contains the parameters for ReplaceNetworkAclEntry. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntryRequest -type ReplaceNetworkAclEntryInput struct { +type RevokeSecurityGroupEgressInput struct { _ struct{} `type:"structure"` - // The IPv4 network range to allow or deny, in CIDR notation (for example 172.16.0.0/24). - CidrBlock *string `locationName:"cidrBlock" type:"string"` + // Not supported. Use a set of IP permissions to specify the CIDR. + CidrIp *string `locationName:"cidrIp" type:"string"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have @@ -43820,78 +87987,49 @@ type ReplaceNetworkAclEntryInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // Indicates whether to replace the egress rule. - // - // Default: If no value is specified, we replace the ingress rule. - // - // Egress is a required field - Egress *bool `locationName:"egress" type:"boolean" required:"true"` - - // ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying the - // ICMP (1) protocol, or protocol 58 (ICMPv6) with an IPv6 CIDR block. - IcmpTypeCode *IcmpTypeCode `locationName:"Icmp" type:"structure"` - - // The IPv6 network range to allow or deny, in CIDR notation (for example 2001:bd8:1234:1a00::/64). - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` + // Not supported. Use a set of IP permissions to specify the port. + FromPort *int64 `locationName:"fromPort" type:"integer"` - // The ID of the ACL. + // The ID of the security group. // - // NetworkAclId is a required field - NetworkAclId *string `locationName:"networkAclId" type:"string" required:"true"` + // GroupId is a required field + GroupId *string `locationName:"groupId" type:"string" required:"true"` - // TCP or UDP protocols: The range of ports the rule applies to. Required if - // specifying TCP (6) or UDP (17) for the protocol. - PortRange *PortRange `locationName:"portRange" type:"structure"` + // The sets of IP permissions. You can't specify a destination security group + // and a CIDR IP address range in the same set of permissions. + IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` - // The IP protocol. You can specify all or -1 to mean all protocols. If you - // specify all, -1, or a protocol number other than tcp, udp, or icmp, traffic - // on all ports is allowed, regardless of any ports or ICMP types or codes you - // specify. If you specify protocol 58 (ICMPv6) and specify an IPv4 CIDR block, - // traffic for all ICMP types and codes allowed, regardless of any that you - // specify. If you specify protocol 58 (ICMPv6) and specify an IPv6 CIDR block, - // you must specify an ICMP type and code. - // - // Protocol is a required field - Protocol *string `locationName:"protocol" type:"string" required:"true"` + // Not supported. Use a set of IP permissions to specify the protocol name or + // number. + IpProtocol *string `locationName:"ipProtocol" type:"string"` - // Indicates whether to allow or deny the traffic that matches the rule. - // - // RuleAction is a required field - RuleAction *string `locationName:"ruleAction" type:"string" required:"true" enum:"RuleAction"` + // Not supported. Use a set of IP permissions to specify a destination security + // group. + SourceSecurityGroupName *string `locationName:"sourceSecurityGroupName" type:"string"` - // The rule number of the entry to replace. - // - // RuleNumber is a required field - RuleNumber *int64 `locationName:"ruleNumber" type:"integer" required:"true"` + // Not supported. Use a set of IP permissions to specify a destination security + // group. + SourceSecurityGroupOwnerId *string `locationName:"sourceSecurityGroupOwnerId" type:"string"` + + // Not supported. Use a set of IP permissions to specify the port. + ToPort *int64 `locationName:"toPort" type:"integer"` } // String returns the string representation -func (s ReplaceNetworkAclEntryInput) String() string { +func (s RevokeSecurityGroupEgressInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceNetworkAclEntryInput) GoString() string { +func (s RevokeSecurityGroupEgressInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceNetworkAclEntryInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceNetworkAclEntryInput"} - if s.Egress == nil { - invalidParams.Add(request.NewErrParamRequired("Egress")) - } - if s.NetworkAclId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkAclId")) - } - if s.Protocol == nil { - invalidParams.Add(request.NewErrParamRequired("Protocol")) - } - if s.RuleAction == nil { - invalidParams.Add(request.NewErrParamRequired("RuleAction")) - } - if s.RuleNumber == nil { - invalidParams.Add(request.NewErrParamRequired("RuleNumber")) +func (s *RevokeSecurityGroupEgressInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RevokeSecurityGroupEgressInput"} + if s.GroupId == nil { + invalidParams.Add(request.NewErrParamRequired("GroupId")) } if invalidParams.Len() > 0 { @@ -43900,93 +88038,80 @@ func (s *ReplaceNetworkAclEntryInput) Validate() error { return nil } -// SetCidrBlock sets the CidrBlock field's value. -func (s *ReplaceNetworkAclEntryInput) SetCidrBlock(v string) *ReplaceNetworkAclEntryInput { - s.CidrBlock = &v +// SetCidrIp sets the CidrIp field's value. +func (s *RevokeSecurityGroupEgressInput) SetCidrIp(v string) *RevokeSecurityGroupEgressInput { + s.CidrIp = &v return s } // SetDryRun sets the DryRun field's value. -func (s *ReplaceNetworkAclEntryInput) SetDryRun(v bool) *ReplaceNetworkAclEntryInput { +func (s *RevokeSecurityGroupEgressInput) SetDryRun(v bool) *RevokeSecurityGroupEgressInput { s.DryRun = &v return s } -// SetEgress sets the Egress field's value. -func (s *ReplaceNetworkAclEntryInput) SetEgress(v bool) *ReplaceNetworkAclEntryInput { - s.Egress = &v - return s -} - -// SetIcmpTypeCode sets the IcmpTypeCode field's value. -func (s *ReplaceNetworkAclEntryInput) SetIcmpTypeCode(v *IcmpTypeCode) *ReplaceNetworkAclEntryInput { - s.IcmpTypeCode = v +// SetFromPort sets the FromPort field's value. +func (s *RevokeSecurityGroupEgressInput) SetFromPort(v int64) *RevokeSecurityGroupEgressInput { + s.FromPort = &v return s } -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *ReplaceNetworkAclEntryInput) SetIpv6CidrBlock(v string) *ReplaceNetworkAclEntryInput { - s.Ipv6CidrBlock = &v +// SetGroupId sets the GroupId field's value. +func (s *RevokeSecurityGroupEgressInput) SetGroupId(v string) *RevokeSecurityGroupEgressInput { + s.GroupId = &v return s } -// SetNetworkAclId sets the NetworkAclId field's value. -func (s *ReplaceNetworkAclEntryInput) SetNetworkAclId(v string) *ReplaceNetworkAclEntryInput { - s.NetworkAclId = &v +// SetIpPermissions sets the IpPermissions field's value. +func (s *RevokeSecurityGroupEgressInput) SetIpPermissions(v []*IpPermission) *RevokeSecurityGroupEgressInput { + s.IpPermissions = v return s } -// SetPortRange sets the PortRange field's value. -func (s *ReplaceNetworkAclEntryInput) SetPortRange(v *PortRange) *ReplaceNetworkAclEntryInput { - s.PortRange = v +// SetIpProtocol sets the IpProtocol field's value. +func (s *RevokeSecurityGroupEgressInput) SetIpProtocol(v string) *RevokeSecurityGroupEgressInput { + s.IpProtocol = &v return s } -// SetProtocol sets the Protocol field's value. -func (s *ReplaceNetworkAclEntryInput) SetProtocol(v string) *ReplaceNetworkAclEntryInput { - s.Protocol = &v +// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. +func (s *RevokeSecurityGroupEgressInput) SetSourceSecurityGroupName(v string) *RevokeSecurityGroupEgressInput { + s.SourceSecurityGroupName = &v return s } -// SetRuleAction sets the RuleAction field's value. -func (s *ReplaceNetworkAclEntryInput) SetRuleAction(v string) *ReplaceNetworkAclEntryInput { - s.RuleAction = &v +// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. +func (s *RevokeSecurityGroupEgressInput) SetSourceSecurityGroupOwnerId(v string) *RevokeSecurityGroupEgressInput { + s.SourceSecurityGroupOwnerId = &v return s } -// SetRuleNumber sets the RuleNumber field's value. -func (s *ReplaceNetworkAclEntryInput) SetRuleNumber(v int64) *ReplaceNetworkAclEntryInput { - s.RuleNumber = &v +// SetToPort sets the ToPort field's value. +func (s *RevokeSecurityGroupEgressInput) SetToPort(v int64) *RevokeSecurityGroupEgressInput { + s.ToPort = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntryOutput -type ReplaceNetworkAclEntryOutput struct { +type RevokeSecurityGroupEgressOutput struct { _ struct{} `type:"structure"` } // String returns the string representation -func (s ReplaceNetworkAclEntryOutput) String() string { +func (s RevokeSecurityGroupEgressOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceNetworkAclEntryOutput) GoString() string { +func (s RevokeSecurityGroupEgressOutput) GoString() string { return s.String() } -// Contains the parameters for ReplaceRoute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteRequest -type ReplaceRouteInput struct { +type RevokeSecurityGroupIngressInput struct { _ struct{} `type:"structure"` - // The IPv4 CIDR address block used for the destination match. The value you - // provide must match the CIDR of an existing route in the table. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The IPv6 CIDR address block used for the destination match. The value you - // provide must match the CIDR of an existing route in the table. - DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` + // The CIDR IP address range. You can't specify this parameter when specifying + // a source security group. + CidrIp *string `type:"string"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have @@ -43994,558 +88119,688 @@ type ReplaceRouteInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // [IPv6 traffic only] The ID of an egress-only Internet gateway. - EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` + // The start of port range for the TCP and UDP protocols, or an ICMP type number. + // For the ICMP type number, use -1 to specify all ICMP types. + FromPort *int64 `type:"integer"` - // The ID of an Internet gateway or virtual private gateway. - GatewayId *string `locationName:"gatewayId" type:"string"` + // The ID of the security group. You must specify either the security group + // ID or the security group name in the request. For security groups in a nondefault + // VPC, you must specify the security group ID. + GroupId *string `type:"string"` - // The ID of a NAT instance in your VPC. - InstanceId *string `locationName:"instanceId" type:"string"` + // [EC2-Classic, default VPC] The name of the security group. You must specify + // either the security group ID or the security group name in the request. + GroupName *string `type:"string"` - // [IPv4 traffic only] The ID of a NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` + // The sets of IP permissions. You can't specify a source security group and + // a CIDR IP address range in the same set of permissions. + IpPermissions []*IpPermission `locationNameList:"item" type:"list"` - // The ID of a network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + // The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). + // Use -1 to specify all. + IpProtocol *string `type:"string"` - // The ID of the route table. - // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` + // [EC2-Classic, default VPC] The name of the source security group. You can't + // specify this parameter in combination with the following parameters: the + // CIDR IP address range, the start of the port range, the IP protocol, and + // the end of the port range. For EC2-VPC, the source security group must be + // in the same VPC. To revoke a specific rule for an IP protocol and port range, + // use a set of IP permissions instead. + SourceSecurityGroupName *string `type:"string"` - // The ID of a VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` + // [EC2-Classic] The AWS account ID of the source security group, if the source + // security group is in a different account. You can't specify this parameter + // in combination with the following parameters: the CIDR IP address range, + // the IP protocol, the start of the port range, and the end of the port range. + // To revoke a specific rule for an IP protocol and port range, use a set of + // IP permissions instead. + SourceSecurityGroupOwnerId *string `type:"string"` + + // The end of port range for the TCP and UDP protocols, or an ICMP code number. + // For the ICMP code number, use -1 to specify all ICMP codes for the ICMP type. + ToPort *int64 `type:"integer"` } // String returns the string representation -func (s ReplaceRouteInput) String() string { +func (s RevokeSecurityGroupIngressInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceRouteInput) GoString() string { +func (s RevokeSecurityGroupIngressInput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceRouteInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceRouteInput"} - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *ReplaceRouteInput) SetDestinationCidrBlock(v string) *ReplaceRouteInput { - s.DestinationCidrBlock = &v +// SetCidrIp sets the CidrIp field's value. +func (s *RevokeSecurityGroupIngressInput) SetCidrIp(v string) *RevokeSecurityGroupIngressInput { + s.CidrIp = &v return s } -// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. -func (s *ReplaceRouteInput) SetDestinationIpv6CidrBlock(v string) *ReplaceRouteInput { - s.DestinationIpv6CidrBlock = &v +// SetDryRun sets the DryRun field's value. +func (s *RevokeSecurityGroupIngressInput) SetDryRun(v bool) *RevokeSecurityGroupIngressInput { + s.DryRun = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *ReplaceRouteInput) SetDryRun(v bool) *ReplaceRouteInput { - s.DryRun = &v +// SetFromPort sets the FromPort field's value. +func (s *RevokeSecurityGroupIngressInput) SetFromPort(v int64) *RevokeSecurityGroupIngressInput { + s.FromPort = &v return s } -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *ReplaceRouteInput) SetEgressOnlyInternetGatewayId(v string) *ReplaceRouteInput { - s.EgressOnlyInternetGatewayId = &v +// SetGroupId sets the GroupId field's value. +func (s *RevokeSecurityGroupIngressInput) SetGroupId(v string) *RevokeSecurityGroupIngressInput { + s.GroupId = &v return s } -// SetGatewayId sets the GatewayId field's value. -func (s *ReplaceRouteInput) SetGatewayId(v string) *ReplaceRouteInput { - s.GatewayId = &v +// SetGroupName sets the GroupName field's value. +func (s *RevokeSecurityGroupIngressInput) SetGroupName(v string) *RevokeSecurityGroupIngressInput { + s.GroupName = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *ReplaceRouteInput) SetInstanceId(v string) *ReplaceRouteInput { - s.InstanceId = &v +// SetIpPermissions sets the IpPermissions field's value. +func (s *RevokeSecurityGroupIngressInput) SetIpPermissions(v []*IpPermission) *RevokeSecurityGroupIngressInput { + s.IpPermissions = v return s } -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *ReplaceRouteInput) SetNatGatewayId(v string) *ReplaceRouteInput { - s.NatGatewayId = &v +// SetIpProtocol sets the IpProtocol field's value. +func (s *RevokeSecurityGroupIngressInput) SetIpProtocol(v string) *RevokeSecurityGroupIngressInput { + s.IpProtocol = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *ReplaceRouteInput) SetNetworkInterfaceId(v string) *ReplaceRouteInput { - s.NetworkInterfaceId = &v +// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. +func (s *RevokeSecurityGroupIngressInput) SetSourceSecurityGroupName(v string) *RevokeSecurityGroupIngressInput { + s.SourceSecurityGroupName = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *ReplaceRouteInput) SetRouteTableId(v string) *ReplaceRouteInput { - s.RouteTableId = &v +// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. +func (s *RevokeSecurityGroupIngressInput) SetSourceSecurityGroupOwnerId(v string) *RevokeSecurityGroupIngressInput { + s.SourceSecurityGroupOwnerId = &v return s } -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *ReplaceRouteInput) SetVpcPeeringConnectionId(v string) *ReplaceRouteInput { - s.VpcPeeringConnectionId = &v +// SetToPort sets the ToPort field's value. +func (s *RevokeSecurityGroupIngressInput) SetToPort(v int64) *RevokeSecurityGroupIngressInput { + s.ToPort = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteOutput -type ReplaceRouteOutput struct { +type RevokeSecurityGroupIngressOutput struct { _ struct{} `type:"structure"` } // String returns the string representation -func (s ReplaceRouteOutput) String() string { +func (s RevokeSecurityGroupIngressOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceRouteOutput) GoString() string { +func (s RevokeSecurityGroupIngressOutput) GoString() string { return s.String() } -// Contains the parameters for ReplaceRouteTableAssociation. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociationRequest -type ReplaceRouteTableAssociationInput struct { +// Describes a route in a route table. +type Route struct { _ struct{} `type:"structure"` - // The association ID. - // - // AssociationId is a required field - AssociationId *string `locationName:"associationId" type:"string" required:"true"` + // The IPv4 CIDR block used for the destination match. + DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The IPv6 CIDR block used for the destination match. + DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` - // The ID of the new route table to associate with the subnet. + // The prefix of the AWS service. + DestinationPrefixListId *string `locationName:"destinationPrefixListId" type:"string"` + + // The ID of the egress-only internet gateway. + EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` + + // The ID of a gateway attached to your VPC. + GatewayId *string `locationName:"gatewayId" type:"string"` + + // The ID of a NAT instance in your VPC. + InstanceId *string `locationName:"instanceId" type:"string"` + + // The AWS account ID of the owner of the instance. + InstanceOwnerId *string `locationName:"instanceOwnerId" type:"string"` + + // The ID of a NAT gateway. + NatGatewayId *string `locationName:"natGatewayId" type:"string"` + + // The ID of the network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + + // Describes how the route was created. // - // RouteTableId is a required field - RouteTableId *string `locationName:"routeTableId" type:"string" required:"true"` + // * CreateRouteTable - The route was automatically created when the route + // table was created. + // + // * CreateRoute - The route was manually added to the route table. + // + // * EnableVgwRoutePropagation - The route was propagated by route propagation. + Origin *string `locationName:"origin" type:"string" enum:"RouteOrigin"` + + // The state of the route. The blackhole state indicates that the route's target + // isn't available (for example, the specified gateway isn't attached to the + // VPC, or the specified NAT instance has been terminated). + State *string `locationName:"state" type:"string" enum:"RouteState"` + + // The ID of a transit gateway. + TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` + + // The ID of a VPC peering connection. + VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` } // String returns the string representation -func (s ReplaceRouteTableAssociationInput) String() string { +func (s Route) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReplaceRouteTableAssociationInput) GoString() string { +func (s Route) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReplaceRouteTableAssociationInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReplaceRouteTableAssociationInput"} - if s.AssociationId == nil { - invalidParams.Add(request.NewErrParamRequired("AssociationId")) - } - if s.RouteTableId == nil { - invalidParams.Add(request.NewErrParamRequired("RouteTableId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *Route) SetDestinationCidrBlock(v string) *Route { + s.DestinationCidrBlock = &v + return s } -// SetAssociationId sets the AssociationId field's value. -func (s *ReplaceRouteTableAssociationInput) SetAssociationId(v string) *ReplaceRouteTableAssociationInput { - s.AssociationId = &v +// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. +func (s *Route) SetDestinationIpv6CidrBlock(v string) *Route { + s.DestinationIpv6CidrBlock = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *ReplaceRouteTableAssociationInput) SetDryRun(v bool) *ReplaceRouteTableAssociationInput { - s.DryRun = &v +// SetDestinationPrefixListId sets the DestinationPrefixListId field's value. +func (s *Route) SetDestinationPrefixListId(v string) *Route { + s.DestinationPrefixListId = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *ReplaceRouteTableAssociationInput) SetRouteTableId(v string) *ReplaceRouteTableAssociationInput { - s.RouteTableId = &v +// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. +func (s *Route) SetEgressOnlyInternetGatewayId(v string) *Route { + s.EgressOnlyInternetGatewayId = &v return s } -// Contains the output of ReplaceRouteTableAssociation. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociationResult -type ReplaceRouteTableAssociationOutput struct { - _ struct{} `type:"structure"` +// SetGatewayId sets the GatewayId field's value. +func (s *Route) SetGatewayId(v string) *Route { + s.GatewayId = &v + return s +} - // The ID of the new association. - NewAssociationId *string `locationName:"newAssociationId" type:"string"` +// SetInstanceId sets the InstanceId field's value. +func (s *Route) SetInstanceId(v string) *Route { + s.InstanceId = &v + return s } -// String returns the string representation -func (s ReplaceRouteTableAssociationOutput) String() string { - return awsutil.Prettify(s) +// SetInstanceOwnerId sets the InstanceOwnerId field's value. +func (s *Route) SetInstanceOwnerId(v string) *Route { + s.InstanceOwnerId = &v + return s } -// GoString returns the string representation -func (s ReplaceRouteTableAssociationOutput) GoString() string { - return s.String() +// SetNatGatewayId sets the NatGatewayId field's value. +func (s *Route) SetNatGatewayId(v string) *Route { + s.NatGatewayId = &v + return s } -// SetNewAssociationId sets the NewAssociationId field's value. -func (s *ReplaceRouteTableAssociationOutput) SetNewAssociationId(v string) *ReplaceRouteTableAssociationOutput { - s.NewAssociationId = &v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *Route) SetNetworkInterfaceId(v string) *Route { + s.NetworkInterfaceId = &v return s } -// Contains the parameters for ReportInstanceStatus. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatusRequest -type ReportInstanceStatusInput struct { - _ struct{} `type:"structure"` +// SetOrigin sets the Origin field's value. +func (s *Route) SetOrigin(v string) *Route { + s.Origin = &v + return s +} - // Descriptive text about the health state of your instance. - Description *string `locationName:"description" type:"string"` +// SetState sets the State field's value. +func (s *Route) SetState(v string) *Route { + s.State = &v + return s +} - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *Route) SetTransitGatewayId(v string) *Route { + s.TransitGatewayId = &v + return s +} - // The time at which the reported instance health state ended. - EndTime *time.Time `locationName:"endTime" type:"timestamp" timestampFormat:"iso8601"` +// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. +func (s *Route) SetVpcPeeringConnectionId(v string) *Route { + s.VpcPeeringConnectionId = &v + return s +} - // One or more instances. - // - // Instances is a required field - Instances []*string `locationName:"instanceId" locationNameList:"InstanceId" type:"list" required:"true"` +// Describes a route table. +type RouteTable struct { + _ struct{} `type:"structure"` - // One or more reason codes that describes the health state of your instance. - // - // * instance-stuck-in-state: My instance is stuck in a state. - // - // * unresponsive: My instance is unresponsive. - // - // * not-accepting-credentials: My instance is not accepting my credentials. - // - // * password-not-available: A password is not available for my instance. - // - // * performance-network: My instance is experiencing performance problems - // which I believe are network related. - // - // * performance-instance-store: My instance is experiencing performance - // problems which I believe are related to the instance stores. - // - // * performance-ebs-volume: My instance is experiencing performance problems - // which I believe are related to an EBS volume. - // - // * performance-other: My instance is experiencing performance problems. - // - // * other: [explain using the description parameter] - // - // ReasonCodes is a required field - ReasonCodes []*string `locationName:"reasonCode" locationNameList:"item" type:"list" required:"true"` + // The associations between the route table and one or more subnets. + Associations []*RouteTableAssociation `locationName:"associationSet" locationNameList:"item" type:"list"` - // The time at which the reported instance health state began. - StartTime *time.Time `locationName:"startTime" type:"timestamp" timestampFormat:"iso8601"` + // The ID of the AWS account that owns the route table. + OwnerId *string `locationName:"ownerId" type:"string"` - // The status of all instances listed. - // - // Status is a required field - Status *string `locationName:"status" type:"string" required:"true" enum:"ReportStatusType"` -} + // Any virtual private gateway (VGW) propagating routes. + PropagatingVgws []*PropagatingVgw `locationName:"propagatingVgwSet" locationNameList:"item" type:"list"` -// String returns the string representation -func (s ReportInstanceStatusInput) String() string { - return awsutil.Prettify(s) -} + // The ID of the route table. + RouteTableId *string `locationName:"routeTableId" type:"string"` -// GoString returns the string representation -func (s ReportInstanceStatusInput) GoString() string { - return s.String() -} + // The routes in the route table. + Routes []*Route `locationName:"routeSet" locationNameList:"item" type:"list"` -// Validate inspects the fields of the type to determine if they are valid. -func (s *ReportInstanceStatusInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ReportInstanceStatusInput"} - if s.Instances == nil { - invalidParams.Add(request.NewErrParamRequired("Instances")) - } - if s.ReasonCodes == nil { - invalidParams.Add(request.NewErrParamRequired("ReasonCodes")) - } - if s.Status == nil { - invalidParams.Add(request.NewErrParamRequired("Status")) - } + // Any tags assigned to the route table. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - if invalidParams.Len() > 0 { - return invalidParams - } - return nil + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` } -// SetDescription sets the Description field's value. -func (s *ReportInstanceStatusInput) SetDescription(v string) *ReportInstanceStatusInput { - s.Description = &v - return s +// String returns the string representation +func (s RouteTable) String() string { + return awsutil.Prettify(s) } -// SetDryRun sets the DryRun field's value. -func (s *ReportInstanceStatusInput) SetDryRun(v bool) *ReportInstanceStatusInput { - s.DryRun = &v - return s +// GoString returns the string representation +func (s RouteTable) GoString() string { + return s.String() } -// SetEndTime sets the EndTime field's value. -func (s *ReportInstanceStatusInput) SetEndTime(v time.Time) *ReportInstanceStatusInput { - s.EndTime = &v +// SetAssociations sets the Associations field's value. +func (s *RouteTable) SetAssociations(v []*RouteTableAssociation) *RouteTable { + s.Associations = v return s } -// SetInstances sets the Instances field's value. -func (s *ReportInstanceStatusInput) SetInstances(v []*string) *ReportInstanceStatusInput { - s.Instances = v +// SetOwnerId sets the OwnerId field's value. +func (s *RouteTable) SetOwnerId(v string) *RouteTable { + s.OwnerId = &v return s } -// SetReasonCodes sets the ReasonCodes field's value. -func (s *ReportInstanceStatusInput) SetReasonCodes(v []*string) *ReportInstanceStatusInput { - s.ReasonCodes = v +// SetPropagatingVgws sets the PropagatingVgws field's value. +func (s *RouteTable) SetPropagatingVgws(v []*PropagatingVgw) *RouteTable { + s.PropagatingVgws = v return s } -// SetStartTime sets the StartTime field's value. -func (s *ReportInstanceStatusInput) SetStartTime(v time.Time) *ReportInstanceStatusInput { - s.StartTime = &v +// SetRouteTableId sets the RouteTableId field's value. +func (s *RouteTable) SetRouteTableId(v string) *RouteTable { + s.RouteTableId = &v return s } -// SetStatus sets the Status field's value. -func (s *ReportInstanceStatusInput) SetStatus(v string) *ReportInstanceStatusInput { - s.Status = &v +// SetRoutes sets the Routes field's value. +func (s *RouteTable) SetRoutes(v []*Route) *RouteTable { + s.Routes = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatusOutput -type ReportInstanceStatusOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ReportInstanceStatusOutput) String() string { - return awsutil.Prettify(s) +// SetTags sets the Tags field's value. +func (s *RouteTable) SetTags(v []*Tag) *RouteTable { + s.Tags = v + return s } -// GoString returns the string representation -func (s ReportInstanceStatusOutput) GoString() string { - return s.String() +// SetVpcId sets the VpcId field's value. +func (s *RouteTable) SetVpcId(v string) *RouteTable { + s.VpcId = &v + return s } -// Contains the parameters for RequestSpotFleet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleetRequest -type RequestSpotFleetInput struct { +// Describes an association between a route table and a subnet. +type RouteTableAssociation struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // Indicates whether this is the main route table. + Main *bool `locationName:"main" type:"boolean"` - // The configuration for the Spot fleet request. - // - // SpotFleetRequestConfig is a required field - SpotFleetRequestConfig *SpotFleetRequestConfigData `locationName:"spotFleetRequestConfig" type:"structure" required:"true"` + // The ID of the association between a route table and a subnet. + RouteTableAssociationId *string `locationName:"routeTableAssociationId" type:"string"` + + // The ID of the route table. + RouteTableId *string `locationName:"routeTableId" type:"string"` + + // The ID of the subnet. A subnet ID is not returned for an implicit association. + SubnetId *string `locationName:"subnetId" type:"string"` } // String returns the string representation -func (s RequestSpotFleetInput) String() string { +func (s RouteTableAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RequestSpotFleetInput) GoString() string { +func (s RouteTableAssociation) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *RequestSpotFleetInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RequestSpotFleetInput"} - if s.SpotFleetRequestConfig == nil { - invalidParams.Add(request.NewErrParamRequired("SpotFleetRequestConfig")) - } - if s.SpotFleetRequestConfig != nil { - if err := s.SpotFleetRequestConfig.Validate(); err != nil { - invalidParams.AddNested("SpotFleetRequestConfig", err.(request.ErrInvalidParams)) - } - } +// SetMain sets the Main field's value. +func (s *RouteTableAssociation) SetMain(v bool) *RouteTableAssociation { + s.Main = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetRouteTableAssociationId sets the RouteTableAssociationId field's value. +func (s *RouteTableAssociation) SetRouteTableAssociationId(v string) *RouteTableAssociation { + s.RouteTableAssociationId = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *RequestSpotFleetInput) SetDryRun(v bool) *RequestSpotFleetInput { - s.DryRun = &v +// SetRouteTableId sets the RouteTableId field's value. +func (s *RouteTableAssociation) SetRouteTableId(v string) *RouteTableAssociation { + s.RouteTableId = &v return s } -// SetSpotFleetRequestConfig sets the SpotFleetRequestConfig field's value. -func (s *RequestSpotFleetInput) SetSpotFleetRequestConfig(v *SpotFleetRequestConfigData) *RequestSpotFleetInput { - s.SpotFleetRequestConfig = v +// SetSubnetId sets the SubnetId field's value. +func (s *RouteTableAssociation) SetSubnetId(v string) *RouteTableAssociation { + s.SubnetId = &v return s } -// Contains the output of RequestSpotFleet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleetResponse -type RequestSpotFleetOutput struct { +type RunInstancesInput struct { _ struct{} `type:"structure"` - // The ID of the Spot fleet request. + // Reserved. + AdditionalInfo *string `locationName:"additionalInfo" type:"string"` + + // The block device mapping entries. + BlockDeviceMappings []*BlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` + + // Information about the Capacity Reservation targeting option. If you do not + // specify this parameter, the instance's Capacity Reservation preference defaults + // to open, which enables it to run in any open Capacity Reservation that has + // matching attributes (instance type, platform, Availability Zone). + CapacityReservationSpecification *CapacityReservationSpecification `type:"structure"` + + // Unique, case-sensitive identifier you provide to ensure the idempotency of + // the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` -} + // Constraints: Maximum 64 ASCII characters + ClientToken *string `locationName:"clientToken" type:"string"` -// String returns the string representation -func (s RequestSpotFleetOutput) String() string { - return awsutil.Prettify(s) -} + // The CPU options for the instance. For more information, see Optimizing CPU + // Options (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html) + // in the Amazon Elastic Compute Cloud User Guide. + CpuOptions *CpuOptionsRequest `type:"structure"` -// GoString returns the string representation -func (s RequestSpotFleetOutput) GoString() string { - return s.String() -} + // The credit option for CPU usage of the T2 or T3 instance. Valid values are + // standard and unlimited. To change this attribute after launch, use ModifyInstanceCreditSpecification + // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html). + // For more information, see Burstable Performance Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html) + // in the Amazon Elastic Compute Cloud User Guide. + // + // Default: standard (T2 instances) or unlimited (T3 instances) + CreditSpecification *CreditSpecificationRequest `type:"structure"` -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *RequestSpotFleetOutput) SetSpotFleetRequestId(v string) *RequestSpotFleetOutput { - s.SpotFleetRequestId = &v - return s -} + // If you set this parameter to true, you can't terminate the instance using + // the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute + // after launch, use ModifyInstanceAttribute (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html). + // Alternatively, if you set InstanceInitiatedShutdownBehavior to terminate, + // you can terminate the instance by running the shutdown command from the instance. + // + // Default: false + DisableApiTermination *bool `locationName:"disableApiTermination" type:"boolean"` -// Contains the parameters for RequestSpotInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstancesRequest -type RequestSpotInstancesInput struct { - _ struct{} `type:"structure"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` - // The user-specified name for a logical grouping of bids. + // Indicates whether the instance is optimized for Amazon EBS I/O. This optimization + // provides dedicated throughput to Amazon EBS and an optimized configuration + // stack to provide optimal Amazon EBS I/O performance. This optimization isn't + // available with all instance types. Additional usage charges apply when using + // an EBS-optimized instance. // - // When you specify an Availability Zone group in a Spot Instance request, all - // Spot instances in the request are launched in the same Availability Zone. - // Instance proximity is maintained with this parameter, but the choice of Availability - // Zone is not. The group applies only to bids for Spot Instances of the same - // instance type. Any additional Spot instance requests that are specified with - // the same Availability Zone group name are launched in that same Availability - // Zone, as long as at least one instance from the group is still active. + // Default: false + EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` + + // An elastic GPU to associate with the instance. An Elastic GPU is a GPU resource + // that you can attach to your Windows instance to accelerate the graphics performance + // of your applications. For more information, see Amazon EC2 Elastic GPUs (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html) + // in the Amazon Elastic Compute Cloud User Guide. + ElasticGpuSpecification []*ElasticGpuSpecification `locationNameList:"item" type:"list"` + + // An elastic inference accelerator to associate with the instance. Elastic + // inference accelerators are a resource you can attach to your Amazon EC2 instances + // to accelerate your Deep Learning (DL) inference workloads. + ElasticInferenceAccelerators []*ElasticInferenceAccelerator `locationName:"ElasticInferenceAccelerator" locationNameList:"item" type:"list"` + + // Indicates whether an instance is enabled for hibernation. For more information, + // see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) + // in the Amazon Elastic Compute Cloud User Guide. + HibernationOptions *HibernationOptionsRequest `type:"structure"` + + // The IAM instance profile. + IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` + + // The ID of the AMI. An AMI ID is required to launch an instance and must be + // specified here or in a launch template. + ImageId *string `type:"string"` + + // Indicates whether an instance stops or terminates when you initiate shutdown + // from the instance (using the operating system command for system shutdown). // - // If there is no active instance running in the Availability Zone group that - // you specify for a new Spot instance request (all instances are terminated, - // the bid is expired, or the bid falls below current market), then Amazon EC2 - // launches the instance in any Availability Zone where the constraint can be - // met. Consequently, the subsequent set of Spot instances could be placed in - // a different zone from the original request, even if you specified the same - // Availability Zone group. + // Default: stop + InstanceInitiatedShutdownBehavior *string `locationName:"instanceInitiatedShutdownBehavior" type:"string" enum:"ShutdownBehavior"` + + // The market (purchasing) option for the instances. // - // Default: Instances are launched in any available Availability Zone. - AvailabilityZoneGroup *string `locationName:"availabilityZoneGroup" type:"string"` + // For RunInstances, persistent Spot Instance requests are only supported when + // InstanceInterruptionBehavior is set to either hibernate or stop. + InstanceMarketOptions *InstanceMarketOptionsRequest `type:"structure"` - // The required duration for the Spot instances (also known as Spot blocks), - // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, - // or 360). + // The instance type. For more information, see Instance Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) + // in the Amazon Elastic Compute Cloud User Guide. // - // The duration period starts as soon as your Spot instance receives its instance - // ID. At the end of the duration period, Amazon EC2 marks the Spot instance - // for termination and provides a Spot instance termination notice, which gives - // the instance a two-minute warning before it terminates. + // Default: m1.small + InstanceType *string `type:"string" enum:"InstanceType"` + + // [EC2-VPC] The number of IPv6 addresses to associate with the primary network + // interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. + // You cannot specify this option and the option to assign specific IPv6 addresses + // in the same request. You can specify this option if you've specified a minimum + // number of instances to launch. // - // Note that you can't specify an Availability Zone group or a launch group - // if you specify a duration. - BlockDurationMinutes *int64 `locationName:"blockDurationMinutes" type:"integer"` + // You cannot specify this option and the network interfaces option in the same + // request. + Ipv6AddressCount *int64 `type:"integer"` - // Unique, case-sensitive identifier that you provide to ensure the idempotency - // of the request. For more information, see How to Ensure Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html) + // [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with + // the primary network interface. You cannot specify this option and the option + // to assign a number of IPv6 addresses in the same request. You cannot specify + // this option if you've specified a minimum number of instances to launch. + // + // You cannot specify this option and the network interfaces option in the same + // request. + Ipv6Addresses []*InstanceIpv6Address `locationName:"Ipv6Address" locationNameList:"item" type:"list"` + + // The ID of the kernel. + // + // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more + // information, see PV-GRUB (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) // in the Amazon Elastic Compute Cloud User Guide. - ClientToken *string `locationName:"clientToken" type:"string"` + KernelId *string `type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The name of the key pair. You can create a key pair using CreateKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html) + // or ImportKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html). + // + // If you do not specify a key pair, you can't connect to the instance unless + // you choose an AMI that is configured to allow users another way to log in. + KeyName *string `type:"string"` + + // The launch template to use to launch the instances. Any parameters that you + // specify in RunInstances override the same parameters in the launch template. + // You can specify either the name or ID of a launch template, but not both. + LaunchTemplate *LaunchTemplateSpecification `type:"structure"` - // The maximum number of Spot instances to launch. + // The license configurations. + LicenseSpecifications []*LicenseConfigurationRequest `locationName:"LicenseSpecification" locationNameList:"item" type:"list"` + + // The maximum number of instances to launch. If you specify more instances + // than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches + // the largest possible number of instances above MinCount. // - // Default: 1 - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` + // Constraints: Between 1 and the maximum number you're allowed for the specified + // instance type. For more information about the default limits, and how to + // request an increase, see How many instances can I run in Amazon EC2 (http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2) + // in the Amazon EC2 FAQ. + // + // MaxCount is a required field + MaxCount *int64 `type:"integer" required:"true"` - // The instance launch group. Launch groups are Spot instances that launch together - // and terminate together. + // The metadata options for the instance. For more information, see Instance + // Metadata and User Data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html). + MetadataOptions *InstanceMetadataOptionsRequest `type:"structure"` + + // The minimum number of instances to launch. If you specify a minimum that + // is more instances than Amazon EC2 can launch in the target Availability Zone, + // Amazon EC2 launches no instances. // - // Default: Instances are launched and terminated individually - LaunchGroup *string `locationName:"launchGroup" type:"string"` + // Constraints: Between 1 and the maximum number you're allowed for the specified + // instance type. For more information about the default limits, and how to + // request an increase, see How many instances can I run in Amazon EC2 (http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2) + // in the Amazon EC2 General FAQ. + // + // MinCount is a required field + MinCount *int64 `type:"integer" required:"true"` - // Describes the launch specification for an instance. - LaunchSpecification *RequestSpotLaunchSpecification `type:"structure"` + // Specifies whether detailed monitoring is enabled for the instance. + Monitoring *RunInstancesMonitoringEnabled `type:"structure"` - // The maximum hourly price (bid) for any Spot instance launched to fulfill - // the request. + // The network interfaces to associate with the instance. If you specify a network + // interface, you must specify any security groups and subnets as part of the + // network interface. + NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterface" locationNameList:"item" type:"list"` + + // The placement for the instance. + Placement *Placement `type:"structure"` + + // [EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 + // address range of the subnet. + // + // Only one private IP address can be designated as primary. You can't specify + // this option if you've specified the option to designate a private IP address + // as the primary IP address in a network interface specification. You cannot + // specify this option if you're launching more than one instance in the request. // - // SpotPrice is a required field - SpotPrice *string `locationName:"spotPrice" type:"string" required:"true"` + // You cannot specify this option and the network interfaces option in the same + // request. + PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` - // The Spot instance request type. + // The ID of the RAM disk to select. Some kernels require additional drivers + // at launch. Check the kernel requirements for information about whether you + // need to specify a RAM disk. To find kernel requirements, go to the AWS Resource + // Center and search for the kernel ID. // - // Default: one-time - Type *string `locationName:"type" type:"string" enum:"SpotInstanceType"` + // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more + // information, see PV-GRUB (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) + // in the Amazon Elastic Compute Cloud User Guide. + RamdiskId *string `type:"string"` - // The start date of the request. If this is a one-time request, the request - // becomes active at this date and time and remains active until all instances - // launch, the request expires, or the request is canceled. If the request is - // persistent, the request becomes active at this date and time and remains - // active until it expires or is canceled. + // The IDs of the security groups. You can create a security group using CreateSecurityGroup + // (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html). // - // Default: The request is effective indefinitely. - ValidFrom *time.Time `locationName:"validFrom" type:"timestamp" timestampFormat:"iso8601"` + // If you specify a network interface, you must specify any security groups + // as part of the network interface. + SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` - // The end date of the request. If this is a one-time request, the request remains - // active until all instances launch, the request is canceled, or this date - // is reached. If the request is persistent, it remains active until it is canceled - // or this date and time is reached. + // [EC2-Classic, default VPC] The names of the security groups. For a nondefault + // VPC, you must use security group IDs instead. + // + // If you specify a network interface, you must specify any security groups + // as part of the network interface. + // + // Default: Amazon EC2 uses the default security group. + SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"SecurityGroup" type:"list"` + + // [EC2-VPC] The ID of the subnet to launch the instance into. // - // Default: The request is effective indefinitely. - ValidUntil *time.Time `locationName:"validUntil" type:"timestamp" timestampFormat:"iso8601"` + // If you specify a network interface, you must specify any subnets as part + // of the network interface. + SubnetId *string `type:"string"` + + // The tags to apply to the resources during launch. You can only tag instances + // and volumes on launch. The specified tags are applied to all instances or + // volumes that are created during launch. To tag a resource after it has been + // created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). + TagSpecifications []*TagSpecification `locationName:"TagSpecification" locationNameList:"item" type:"list"` + + // The user data to make available to the instance. For more information, see + // Running Commands on Your Linux Instance at Launch (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) + // (Linux) and Adding User Data (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data) + // (Windows). If you are using a command line tool, base64-encoding is performed + // for you, and you can load the text from a file. Otherwise, you must provide + // base64-encoded text. User data is limited to 16 KB. + UserData *string `type:"string"` } // String returns the string representation -func (s RequestSpotInstancesInput) String() string { +func (s RunInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RequestSpotInstancesInput) GoString() string { +func (s RunInstancesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *RequestSpotInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RequestSpotInstancesInput"} - if s.SpotPrice == nil { - invalidParams.Add(request.NewErrParamRequired("SpotPrice")) +func (s *RunInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RunInstancesInput"} + if s.MaxCount == nil { + invalidParams.Add(request.NewErrParamRequired("MaxCount")) } - if s.LaunchSpecification != nil { - if err := s.LaunchSpecification.Validate(); err != nil { - invalidParams.AddNested("LaunchSpecification", err.(request.ErrInvalidParams)) + if s.MinCount == nil { + invalidParams.Add(request.NewErrParamRequired("MinCount")) + } + if s.CreditSpecification != nil { + if err := s.CreditSpecification.Validate(); err != nil { + invalidParams.AddNested("CreditSpecification", err.(request.ErrInvalidParams)) + } + } + if s.ElasticGpuSpecification != nil { + for i, v := range s.ElasticGpuSpecification { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ElasticGpuSpecification", i), err.(request.ErrInvalidParams)) + } + } + } + if s.ElasticInferenceAccelerators != nil { + for i, v := range s.ElasticInferenceAccelerators { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "ElasticInferenceAccelerators", i), err.(request.ErrInvalidParams)) + } + } + } + if s.Monitoring != nil { + if err := s.Monitoring.Validate(); err != nil { + invalidParams.AddNested("Monitoring", err.(request.ErrInvalidParams)) } } @@ -44555,1262 +88810,1520 @@ func (s *RequestSpotInstancesInput) Validate() error { return nil } -// SetAvailabilityZoneGroup sets the AvailabilityZoneGroup field's value. -func (s *RequestSpotInstancesInput) SetAvailabilityZoneGroup(v string) *RequestSpotInstancesInput { - s.AvailabilityZoneGroup = &v +// SetAdditionalInfo sets the AdditionalInfo field's value. +func (s *RunInstancesInput) SetAdditionalInfo(v string) *RunInstancesInput { + s.AdditionalInfo = &v return s } -// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. -func (s *RequestSpotInstancesInput) SetBlockDurationMinutes(v int64) *RequestSpotInstancesInput { - s.BlockDurationMinutes = &v +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *RunInstancesInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RunInstancesInput { + s.BlockDeviceMappings = v return s } -// SetClientToken sets the ClientToken field's value. -func (s *RequestSpotInstancesInput) SetClientToken(v string) *RequestSpotInstancesInput { - s.ClientToken = &v +// SetCapacityReservationSpecification sets the CapacityReservationSpecification field's value. +func (s *RunInstancesInput) SetCapacityReservationSpecification(v *CapacityReservationSpecification) *RunInstancesInput { + s.CapacityReservationSpecification = v return s } -// SetDryRun sets the DryRun field's value. -func (s *RequestSpotInstancesInput) SetDryRun(v bool) *RequestSpotInstancesInput { - s.DryRun = &v +// SetClientToken sets the ClientToken field's value. +func (s *RunInstancesInput) SetClientToken(v string) *RunInstancesInput { + s.ClientToken = &v return s } -// SetInstanceCount sets the InstanceCount field's value. -func (s *RequestSpotInstancesInput) SetInstanceCount(v int64) *RequestSpotInstancesInput { - s.InstanceCount = &v +// SetCpuOptions sets the CpuOptions field's value. +func (s *RunInstancesInput) SetCpuOptions(v *CpuOptionsRequest) *RunInstancesInput { + s.CpuOptions = v return s } -// SetLaunchGroup sets the LaunchGroup field's value. -func (s *RequestSpotInstancesInput) SetLaunchGroup(v string) *RequestSpotInstancesInput { - s.LaunchGroup = &v +// SetCreditSpecification sets the CreditSpecification field's value. +func (s *RunInstancesInput) SetCreditSpecification(v *CreditSpecificationRequest) *RunInstancesInput { + s.CreditSpecification = v return s } -// SetLaunchSpecification sets the LaunchSpecification field's value. -func (s *RequestSpotInstancesInput) SetLaunchSpecification(v *RequestSpotLaunchSpecification) *RequestSpotInstancesInput { - s.LaunchSpecification = v +// SetDisableApiTermination sets the DisableApiTermination field's value. +func (s *RunInstancesInput) SetDisableApiTermination(v bool) *RunInstancesInput { + s.DisableApiTermination = &v return s } -// SetSpotPrice sets the SpotPrice field's value. -func (s *RequestSpotInstancesInput) SetSpotPrice(v string) *RequestSpotInstancesInput { - s.SpotPrice = &v +// SetDryRun sets the DryRun field's value. +func (s *RunInstancesInput) SetDryRun(v bool) *RunInstancesInput { + s.DryRun = &v return s } -// SetType sets the Type field's value. -func (s *RequestSpotInstancesInput) SetType(v string) *RequestSpotInstancesInput { - s.Type = &v +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *RunInstancesInput) SetEbsOptimized(v bool) *RunInstancesInput { + s.EbsOptimized = &v return s } -// SetValidFrom sets the ValidFrom field's value. -func (s *RequestSpotInstancesInput) SetValidFrom(v time.Time) *RequestSpotInstancesInput { - s.ValidFrom = &v +// SetElasticGpuSpecification sets the ElasticGpuSpecification field's value. +func (s *RunInstancesInput) SetElasticGpuSpecification(v []*ElasticGpuSpecification) *RunInstancesInput { + s.ElasticGpuSpecification = v return s } -// SetValidUntil sets the ValidUntil field's value. -func (s *RequestSpotInstancesInput) SetValidUntil(v time.Time) *RequestSpotInstancesInput { - s.ValidUntil = &v +// SetElasticInferenceAccelerators sets the ElasticInferenceAccelerators field's value. +func (s *RunInstancesInput) SetElasticInferenceAccelerators(v []*ElasticInferenceAccelerator) *RunInstancesInput { + s.ElasticInferenceAccelerators = v return s } -// Contains the output of RequestSpotInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstancesResult -type RequestSpotInstancesOutput struct { - _ struct{} `type:"structure"` - - // One or more Spot instance requests. - SpotInstanceRequests []*SpotInstanceRequest `locationName:"spotInstanceRequestSet" locationNameList:"item" type:"list"` -} - -// String returns the string representation -func (s RequestSpotInstancesOutput) String() string { - return awsutil.Prettify(s) +// SetHibernationOptions sets the HibernationOptions field's value. +func (s *RunInstancesInput) SetHibernationOptions(v *HibernationOptionsRequest) *RunInstancesInput { + s.HibernationOptions = v + return s } -// GoString returns the string representation -func (s RequestSpotInstancesOutput) GoString() string { - return s.String() +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *RunInstancesInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *RunInstancesInput { + s.IamInstanceProfile = v + return s } -// SetSpotInstanceRequests sets the SpotInstanceRequests field's value. -func (s *RequestSpotInstancesOutput) SetSpotInstanceRequests(v []*SpotInstanceRequest) *RequestSpotInstancesOutput { - s.SpotInstanceRequests = v +// SetImageId sets the ImageId field's value. +func (s *RunInstancesInput) SetImageId(v string) *RunInstancesInput { + s.ImageId = &v return s } -// Describes the launch specification for an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotLaunchSpecification -type RequestSpotLaunchSpecification struct { - _ struct{} `type:"structure"` - - // Deprecated. - AddressingType *string `locationName:"addressingType" type:"string"` - - // One or more block device mapping entries. - // - // Although you can specify encrypted EBS volumes in this block device mapping - // for your Spot Instances, these volumes are not encrypted. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // Indicates whether the instance is optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - // - // Default: false - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` - - // The instance type. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The ID of the kernel. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` - - // Describes the monitoring of an instance. - Monitoring *RunInstancesMonitoringEnabled `locationName:"monitoring" type:"structure"` - - // One or more network interfaces. If you specify a network interface, you must - // specify subnet IDs and security group IDs using the network interface. - NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"NetworkInterface" locationNameList:"item" type:"list"` - - // The placement information for the instance. - Placement *SpotPlacement `locationName:"placement" type:"structure"` - - // The ID of the RAM disk. - RamdiskId *string `locationName:"ramdiskId" type:"string"` - - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"item" type:"list"` - - SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"item" type:"list"` - - // The ID of the subnet in which to launch the instance. - SubnetId *string `locationName:"subnetId" type:"string"` - - // The user data to make available to the instances. If you are using an AWS - // SDK or command line tool, Base64-encoding is performed for you, and you can - // load the text from a file. Otherwise, you must provide Base64-encoded text. - UserData *string `locationName:"userData" type:"string"` +// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. +func (s *RunInstancesInput) SetInstanceInitiatedShutdownBehavior(v string) *RunInstancesInput { + s.InstanceInitiatedShutdownBehavior = &v + return s } -// String returns the string representation -func (s RequestSpotLaunchSpecification) String() string { - return awsutil.Prettify(s) +// SetInstanceMarketOptions sets the InstanceMarketOptions field's value. +func (s *RunInstancesInput) SetInstanceMarketOptions(v *InstanceMarketOptionsRequest) *RunInstancesInput { + s.InstanceMarketOptions = v + return s } -// GoString returns the string representation -func (s RequestSpotLaunchSpecification) GoString() string { - return s.String() +// SetInstanceType sets the InstanceType field's value. +func (s *RunInstancesInput) SetInstanceType(v string) *RunInstancesInput { + s.InstanceType = &v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *RequestSpotLaunchSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RequestSpotLaunchSpecification"} - if s.Monitoring != nil { - if err := s.Monitoring.Validate(); err != nil { - invalidParams.AddNested("Monitoring", err.(request.ErrInvalidParams)) - } - } - if s.NetworkInterfaces != nil { - for i, v := range s.NetworkInterfaces { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "NetworkInterfaces", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetIpv6AddressCount sets the Ipv6AddressCount field's value. +func (s *RunInstancesInput) SetIpv6AddressCount(v int64) *RunInstancesInput { + s.Ipv6AddressCount = &v + return s } -// SetAddressingType sets the AddressingType field's value. -func (s *RequestSpotLaunchSpecification) SetAddressingType(v string) *RequestSpotLaunchSpecification { - s.AddressingType = &v +// SetIpv6Addresses sets the Ipv6Addresses field's value. +func (s *RunInstancesInput) SetIpv6Addresses(v []*InstanceIpv6Address) *RunInstancesInput { + s.Ipv6Addresses = v return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *RequestSpotLaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RequestSpotLaunchSpecification { - s.BlockDeviceMappings = v +// SetKernelId sets the KernelId field's value. +func (s *RunInstancesInput) SetKernelId(v string) *RunInstancesInput { + s.KernelId = &v return s } -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *RequestSpotLaunchSpecification) SetEbsOptimized(v bool) *RequestSpotLaunchSpecification { - s.EbsOptimized = &v +// SetKeyName sets the KeyName field's value. +func (s *RunInstancesInput) SetKeyName(v string) *RunInstancesInput { + s.KeyName = &v return s } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *RequestSpotLaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *RequestSpotLaunchSpecification { - s.IamInstanceProfile = v +// SetLaunchTemplate sets the LaunchTemplate field's value. +func (s *RunInstancesInput) SetLaunchTemplate(v *LaunchTemplateSpecification) *RunInstancesInput { + s.LaunchTemplate = v return s } -// SetImageId sets the ImageId field's value. -func (s *RequestSpotLaunchSpecification) SetImageId(v string) *RequestSpotLaunchSpecification { - s.ImageId = &v +// SetLicenseSpecifications sets the LicenseSpecifications field's value. +func (s *RunInstancesInput) SetLicenseSpecifications(v []*LicenseConfigurationRequest) *RunInstancesInput { + s.LicenseSpecifications = v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *RequestSpotLaunchSpecification) SetInstanceType(v string) *RequestSpotLaunchSpecification { - s.InstanceType = &v +// SetMaxCount sets the MaxCount field's value. +func (s *RunInstancesInput) SetMaxCount(v int64) *RunInstancesInput { + s.MaxCount = &v return s } -// SetKernelId sets the KernelId field's value. -func (s *RequestSpotLaunchSpecification) SetKernelId(v string) *RequestSpotLaunchSpecification { - s.KernelId = &v +// SetMetadataOptions sets the MetadataOptions field's value. +func (s *RunInstancesInput) SetMetadataOptions(v *InstanceMetadataOptionsRequest) *RunInstancesInput { + s.MetadataOptions = v return s } -// SetKeyName sets the KeyName field's value. -func (s *RequestSpotLaunchSpecification) SetKeyName(v string) *RequestSpotLaunchSpecification { - s.KeyName = &v +// SetMinCount sets the MinCount field's value. +func (s *RunInstancesInput) SetMinCount(v int64) *RunInstancesInput { + s.MinCount = &v return s } // SetMonitoring sets the Monitoring field's value. -func (s *RequestSpotLaunchSpecification) SetMonitoring(v *RunInstancesMonitoringEnabled) *RequestSpotLaunchSpecification { +func (s *RunInstancesInput) SetMonitoring(v *RunInstancesMonitoringEnabled) *RunInstancesInput { s.Monitoring = v return s } // SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *RequestSpotLaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *RequestSpotLaunchSpecification { +func (s *RunInstancesInput) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *RunInstancesInput { s.NetworkInterfaces = v return s } // SetPlacement sets the Placement field's value. -func (s *RequestSpotLaunchSpecification) SetPlacement(v *SpotPlacement) *RequestSpotLaunchSpecification { +func (s *RunInstancesInput) SetPlacement(v *Placement) *RunInstancesInput { s.Placement = v return s } +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *RunInstancesInput) SetPrivateIpAddress(v string) *RunInstancesInput { + s.PrivateIpAddress = &v + return s +} + // SetRamdiskId sets the RamdiskId field's value. -func (s *RequestSpotLaunchSpecification) SetRamdiskId(v string) *RequestSpotLaunchSpecification { +func (s *RunInstancesInput) SetRamdiskId(v string) *RunInstancesInput { s.RamdiskId = &v return s } // SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *RequestSpotLaunchSpecification) SetSecurityGroupIds(v []*string) *RequestSpotLaunchSpecification { +func (s *RunInstancesInput) SetSecurityGroupIds(v []*string) *RunInstancesInput { s.SecurityGroupIds = v return s } // SetSecurityGroups sets the SecurityGroups field's value. -func (s *RequestSpotLaunchSpecification) SetSecurityGroups(v []*string) *RequestSpotLaunchSpecification { +func (s *RunInstancesInput) SetSecurityGroups(v []*string) *RunInstancesInput { s.SecurityGroups = v return s } // SetSubnetId sets the SubnetId field's value. -func (s *RequestSpotLaunchSpecification) SetSubnetId(v string) *RequestSpotLaunchSpecification { +func (s *RunInstancesInput) SetSubnetId(v string) *RunInstancesInput { s.SubnetId = &v return s } +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *RunInstancesInput) SetTagSpecifications(v []*TagSpecification) *RunInstancesInput { + s.TagSpecifications = v + return s +} + // SetUserData sets the UserData field's value. -func (s *RequestSpotLaunchSpecification) SetUserData(v string) *RequestSpotLaunchSpecification { +func (s *RunInstancesInput) SetUserData(v string) *RunInstancesInput { s.UserData = &v return s } -// Describes a reservation. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Reservation -type Reservation struct { +// Describes the monitoring of an instance. +type RunInstancesMonitoringEnabled struct { _ struct{} `type:"structure"` - // [EC2-Classic only] One or more security groups. - Groups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + // Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring + // is enabled. + // + // Enabled is a required field + Enabled *bool `locationName:"enabled" type:"boolean" required:"true"` +} - // One or more instances. - Instances []*Instance `locationName:"instancesSet" locationNameList:"item" type:"list"` +// String returns the string representation +func (s RunInstancesMonitoringEnabled) String() string { + return awsutil.Prettify(s) +} - // The ID of the AWS account that owns the reservation. - OwnerId *string `locationName:"ownerId" type:"string"` +// GoString returns the string representation +func (s RunInstancesMonitoringEnabled) GoString() string { + return s.String() +} - // The ID of the requester that launched the instances on your behalf (for example, - // AWS Management Console or Auto Scaling). - RequesterId *string `locationName:"requesterId" type:"string"` +// Validate inspects the fields of the type to determine if they are valid. +func (s *RunInstancesMonitoringEnabled) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RunInstancesMonitoringEnabled"} + if s.Enabled == nil { + invalidParams.Add(request.NewErrParamRequired("Enabled")) + } - // The ID of the reservation. - ReservationId *string `locationName:"reservationId" type:"string"` + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetEnabled sets the Enabled field's value. +func (s *RunInstancesMonitoringEnabled) SetEnabled(v bool) *RunInstancesMonitoringEnabled { + s.Enabled = &v + return s +} + +// Contains the parameters for RunScheduledInstances. +type RunScheduledInstancesInput struct { + _ struct{} `type:"structure"` + + // Unique, case-sensitive identifier that ensures the idempotency of the request. + // For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `type:"string" idempotencyToken:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The number of instances. + // + // Default: 1 + InstanceCount *int64 `type:"integer"` + + // The launch specification. You must match the instance type, Availability + // Zone, network, and platform of the schedule that you purchased. + // + // LaunchSpecification is a required field + LaunchSpecification *ScheduledInstancesLaunchSpecification `type:"structure" required:"true"` + + // The Scheduled Instance ID. + // + // ScheduledInstanceId is a required field + ScheduledInstanceId *string `type:"string" required:"true"` } // String returns the string representation -func (s Reservation) String() string { +func (s RunScheduledInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Reservation) GoString() string { +func (s RunScheduledInstancesInput) GoString() string { return s.String() } -// SetGroups sets the Groups field's value. -func (s *Reservation) SetGroups(v []*GroupIdentifier) *Reservation { - s.Groups = v +// Validate inspects the fields of the type to determine if they are valid. +func (s *RunScheduledInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RunScheduledInstancesInput"} + if s.LaunchSpecification == nil { + invalidParams.Add(request.NewErrParamRequired("LaunchSpecification")) + } + if s.ScheduledInstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("ScheduledInstanceId")) + } + if s.LaunchSpecification != nil { + if err := s.LaunchSpecification.Validate(); err != nil { + invalidParams.AddNested("LaunchSpecification", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetClientToken sets the ClientToken field's value. +func (s *RunScheduledInstancesInput) SetClientToken(v string) *RunScheduledInstancesInput { + s.ClientToken = &v return s } -// SetInstances sets the Instances field's value. -func (s *Reservation) SetInstances(v []*Instance) *Reservation { - s.Instances = v +// SetDryRun sets the DryRun field's value. +func (s *RunScheduledInstancesInput) SetDryRun(v bool) *RunScheduledInstancesInput { + s.DryRun = &v return s } -// SetOwnerId sets the OwnerId field's value. -func (s *Reservation) SetOwnerId(v string) *Reservation { - s.OwnerId = &v +// SetInstanceCount sets the InstanceCount field's value. +func (s *RunScheduledInstancesInput) SetInstanceCount(v int64) *RunScheduledInstancesInput { + s.InstanceCount = &v return s } -// SetRequesterId sets the RequesterId field's value. -func (s *Reservation) SetRequesterId(v string) *Reservation { - s.RequesterId = &v +// SetLaunchSpecification sets the LaunchSpecification field's value. +func (s *RunScheduledInstancesInput) SetLaunchSpecification(v *ScheduledInstancesLaunchSpecification) *RunScheduledInstancesInput { + s.LaunchSpecification = v return s } -// SetReservationId sets the ReservationId field's value. -func (s *Reservation) SetReservationId(v string) *Reservation { - s.ReservationId = &v +// SetScheduledInstanceId sets the ScheduledInstanceId field's value. +func (s *RunScheduledInstancesInput) SetScheduledInstanceId(v string) *RunScheduledInstancesInput { + s.ScheduledInstanceId = &v return s } -// The cost associated with the Reserved Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservationValue -type ReservationValue struct { +// Contains the output of RunScheduledInstances. +type RunScheduledInstancesOutput struct { _ struct{} `type:"structure"` - // The hourly rate of the reservation. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` + // The IDs of the newly launched instances. + InstanceIdSet []*string `locationName:"instanceIdSet" locationNameList:"item" type:"list"` +} - // The balance of the total value (the sum of remainingUpfrontValue + hourlyPrice - // * number of hours remaining). - RemainingTotalValue *string `locationName:"remainingTotalValue" type:"string"` +// String returns the string representation +func (s RunScheduledInstancesOutput) String() string { + return awsutil.Prettify(s) +} - // The remaining upfront cost of the reservation. - RemainingUpfrontValue *string `locationName:"remainingUpfrontValue" type:"string"` +// GoString returns the string representation +func (s RunScheduledInstancesOutput) GoString() string { + return s.String() +} + +// SetInstanceIdSet sets the InstanceIdSet field's value. +func (s *RunScheduledInstancesOutput) SetInstanceIdSet(v []*string) *RunScheduledInstancesOutput { + s.InstanceIdSet = v + return s +} + +// Describes the storage parameters for S3 and S3 buckets for an instance store-backed +// AMI. +type S3Storage struct { + _ struct{} `type:"structure"` + + // The access key ID of the owner of the bucket. Before you specify a value + // for your access key ID, review and follow the guidance in Best Practices + // for Managing AWS Access Keys (https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html). + AWSAccessKeyId *string `type:"string"` + + // The bucket in which to store the AMI. You can specify a bucket that you already + // own or a new bucket that Amazon EC2 creates on your behalf. If you specify + // a bucket that belongs to someone else, Amazon EC2 returns an error. + Bucket *string `locationName:"bucket" type:"string"` + + // The beginning of the file name of the AMI. + Prefix *string `locationName:"prefix" type:"string"` + + // An Amazon S3 upload policy that gives Amazon EC2 permission to upload items + // into Amazon S3 on your behalf. + // + // UploadPolicy is automatically base64 encoded/decoded by the SDK. + UploadPolicy []byte `locationName:"uploadPolicy" type:"blob"` + + // The signature of the JSON document. + UploadPolicySignature *string `locationName:"uploadPolicySignature" type:"string"` } // String returns the string representation -func (s ReservationValue) String() string { +func (s S3Storage) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservationValue) GoString() string { +func (s S3Storage) GoString() string { return s.String() } -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *ReservationValue) SetHourlyPrice(v string) *ReservationValue { - s.HourlyPrice = &v +// SetAWSAccessKeyId sets the AWSAccessKeyId field's value. +func (s *S3Storage) SetAWSAccessKeyId(v string) *S3Storage { + s.AWSAccessKeyId = &v return s } -// SetRemainingTotalValue sets the RemainingTotalValue field's value. -func (s *ReservationValue) SetRemainingTotalValue(v string) *ReservationValue { - s.RemainingTotalValue = &v +// SetBucket sets the Bucket field's value. +func (s *S3Storage) SetBucket(v string) *S3Storage { + s.Bucket = &v return s } -// SetRemainingUpfrontValue sets the RemainingUpfrontValue field's value. -func (s *ReservationValue) SetRemainingUpfrontValue(v string) *ReservationValue { - s.RemainingUpfrontValue = &v +// SetPrefix sets the Prefix field's value. +func (s *S3Storage) SetPrefix(v string) *S3Storage { + s.Prefix = &v return s } -// Describes the limit price of a Reserved Instance offering. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstanceLimitPrice -type ReservedInstanceLimitPrice struct { +// SetUploadPolicy sets the UploadPolicy field's value. +func (s *S3Storage) SetUploadPolicy(v []byte) *S3Storage { + s.UploadPolicy = v + return s +} + +// SetUploadPolicySignature sets the UploadPolicySignature field's value. +func (s *S3Storage) SetUploadPolicySignature(v string) *S3Storage { + s.UploadPolicySignature = &v + return s +} + +// Describes a Scheduled Instance. +type ScheduledInstance struct { _ struct{} `type:"structure"` - // Used for Reserved Instance Marketplace offerings. Specifies the limit price - // on the total order (instanceCount * price). - Amount *float64 `locationName:"amount" type:"double"` + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The currency in which the limitPrice amount is specified. At this time, the - // only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` + // The date when the Scheduled Instance was purchased. + CreateDate *time.Time `locationName:"createDate" type:"timestamp"` + + // The hourly price for a single instance. + HourlyPrice *string `locationName:"hourlyPrice" type:"string"` + + // The number of instances. + InstanceCount *int64 `locationName:"instanceCount" type:"integer"` + + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string"` + + // The network platform (EC2-Classic or EC2-VPC). + NetworkPlatform *string `locationName:"networkPlatform" type:"string"` + + // The time for the next schedule to start. + NextSlotStartTime *time.Time `locationName:"nextSlotStartTime" type:"timestamp"` + + // The platform (Linux/UNIX or Windows). + Platform *string `locationName:"platform" type:"string"` + + // The time that the previous schedule ended or will end. + PreviousSlotEndTime *time.Time `locationName:"previousSlotEndTime" type:"timestamp"` + + // The schedule recurrence. + Recurrence *ScheduledInstanceRecurrence `locationName:"recurrence" type:"structure"` + + // The Scheduled Instance ID. + ScheduledInstanceId *string `locationName:"scheduledInstanceId" type:"string"` + + // The number of hours in the schedule. + SlotDurationInHours *int64 `locationName:"slotDurationInHours" type:"integer"` + + // The end date for the Scheduled Instance. + TermEndDate *time.Time `locationName:"termEndDate" type:"timestamp"` + + // The start date for the Scheduled Instance. + TermStartDate *time.Time `locationName:"termStartDate" type:"timestamp"` + + // The total number of hours for a single instance for the entire term. + TotalScheduledInstanceHours *int64 `locationName:"totalScheduledInstanceHours" type:"integer"` } // String returns the string representation -func (s ReservedInstanceLimitPrice) String() string { +func (s ScheduledInstance) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservedInstanceLimitPrice) GoString() string { +func (s ScheduledInstance) GoString() string { return s.String() } -// SetAmount sets the Amount field's value. -func (s *ReservedInstanceLimitPrice) SetAmount(v float64) *ReservedInstanceLimitPrice { - s.Amount = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ScheduledInstance) SetAvailabilityZone(v string) *ScheduledInstance { + s.AvailabilityZone = &v return s } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *ReservedInstanceLimitPrice) SetCurrencyCode(v string) *ReservedInstanceLimitPrice { - s.CurrencyCode = &v +// SetCreateDate sets the CreateDate field's value. +func (s *ScheduledInstance) SetCreateDate(v time.Time) *ScheduledInstance { + s.CreateDate = &v return s } -// The total value of the Convertible Reserved Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstanceReservationValue -type ReservedInstanceReservationValue struct { - _ struct{} `type:"structure"` +// SetHourlyPrice sets the HourlyPrice field's value. +func (s *ScheduledInstance) SetHourlyPrice(v string) *ScheduledInstance { + s.HourlyPrice = &v + return s +} - // The total value of the Convertible Reserved Instance that you are exchanging. - ReservationValue *ReservationValue `locationName:"reservationValue" type:"structure"` +// SetInstanceCount sets the InstanceCount field's value. +func (s *ScheduledInstance) SetInstanceCount(v int64) *ScheduledInstance { + s.InstanceCount = &v + return s +} - // The ID of the Convertible Reserved Instance that you are exchanging. - ReservedInstanceId *string `locationName:"reservedInstanceId" type:"string"` +// SetInstanceType sets the InstanceType field's value. +func (s *ScheduledInstance) SetInstanceType(v string) *ScheduledInstance { + s.InstanceType = &v + return s } -// String returns the string representation -func (s ReservedInstanceReservationValue) String() string { - return awsutil.Prettify(s) +// SetNetworkPlatform sets the NetworkPlatform field's value. +func (s *ScheduledInstance) SetNetworkPlatform(v string) *ScheduledInstance { + s.NetworkPlatform = &v + return s } -// GoString returns the string representation -func (s ReservedInstanceReservationValue) GoString() string { - return s.String() +// SetNextSlotStartTime sets the NextSlotStartTime field's value. +func (s *ScheduledInstance) SetNextSlotStartTime(v time.Time) *ScheduledInstance { + s.NextSlotStartTime = &v + return s } -// SetReservationValue sets the ReservationValue field's value. -func (s *ReservedInstanceReservationValue) SetReservationValue(v *ReservationValue) *ReservedInstanceReservationValue { - s.ReservationValue = v +// SetPlatform sets the Platform field's value. +func (s *ScheduledInstance) SetPlatform(v string) *ScheduledInstance { + s.Platform = &v return s } -// SetReservedInstanceId sets the ReservedInstanceId field's value. -func (s *ReservedInstanceReservationValue) SetReservedInstanceId(v string) *ReservedInstanceReservationValue { - s.ReservedInstanceId = &v +// SetPreviousSlotEndTime sets the PreviousSlotEndTime field's value. +func (s *ScheduledInstance) SetPreviousSlotEndTime(v time.Time) *ScheduledInstance { + s.PreviousSlotEndTime = &v return s } -// Describes a Reserved Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstances -type ReservedInstances struct { - _ struct{} `type:"structure"` +// SetRecurrence sets the Recurrence field's value. +func (s *ScheduledInstance) SetRecurrence(v *ScheduledInstanceRecurrence) *ScheduledInstance { + s.Recurrence = v + return s +} - // The Availability Zone in which the Reserved Instance can be used. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` +// SetScheduledInstanceId sets the ScheduledInstanceId field's value. +func (s *ScheduledInstance) SetScheduledInstanceId(v string) *ScheduledInstance { + s.ScheduledInstanceId = &v + return s +} - // The currency of the Reserved Instance. It's specified using ISO 4217 standard - // currency codes. At this time, the only supported currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` +// SetSlotDurationInHours sets the SlotDurationInHours field's value. +func (s *ScheduledInstance) SetSlotDurationInHours(v int64) *ScheduledInstance { + s.SlotDurationInHours = &v + return s +} - // The duration of the Reserved Instance, in seconds. - Duration *int64 `locationName:"duration" type:"long"` +// SetTermEndDate sets the TermEndDate field's value. +func (s *ScheduledInstance) SetTermEndDate(v time.Time) *ScheduledInstance { + s.TermEndDate = &v + return s +} - // The time when the Reserved Instance expires. - End *time.Time `locationName:"end" type:"timestamp" timestampFormat:"iso8601"` +// SetTermStartDate sets the TermStartDate field's value. +func (s *ScheduledInstance) SetTermStartDate(v time.Time) *ScheduledInstance { + s.TermStartDate = &v + return s +} - // The purchase price of the Reserved Instance. - FixedPrice *float64 `locationName:"fixedPrice" type:"float"` +// SetTotalScheduledInstanceHours sets the TotalScheduledInstanceHours field's value. +func (s *ScheduledInstance) SetTotalScheduledInstanceHours(v int64) *ScheduledInstance { + s.TotalScheduledInstanceHours = &v + return s +} - // The number of reservations purchased. - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` +// Describes a schedule that is available for your Scheduled Instances. +type ScheduledInstanceAvailability struct { + _ struct{} `type:"structure"` - // The tenancy of the instance. - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The instance type on which the Reserved Instance can be used. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + // The number of available instances. + AvailableInstanceCount *int64 `locationName:"availableInstanceCount" type:"integer"` - // The offering class of the Reserved Instance. - OfferingClass *string `locationName:"offeringClass" type:"string" enum:"OfferingClassType"` + // The time period for the first schedule to start. + FirstSlotStartTime *time.Time `locationName:"firstSlotStartTime" type:"timestamp"` - // The Reserved Instance offering type. - OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` + // The hourly price for a single instance. + HourlyPrice *string `locationName:"hourlyPrice" type:"string"` - // The Reserved Instance product platform description. - ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` + // The instance type. You can specify one of the C3, C4, M4, or R3 instance + // types. + InstanceType *string `locationName:"instanceType" type:"string"` - // The recurring charge tag assigned to the resource. - RecurringCharges []*RecurringCharge `locationName:"recurringCharges" locationNameList:"item" type:"list"` + // The maximum term. The only possible value is 365 days. + MaxTermDurationInDays *int64 `locationName:"maxTermDurationInDays" type:"integer"` - // The ID of the Reserved Instance. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` + // The minimum term. The only possible value is 365 days. + MinTermDurationInDays *int64 `locationName:"minTermDurationInDays" type:"integer"` - // The scope of the Reserved Instance. - Scope *string `locationName:"scope" type:"string" enum:"scope"` + // The network platform (EC2-Classic or EC2-VPC). + NetworkPlatform *string `locationName:"networkPlatform" type:"string"` - // The date and time the Reserved Instance started. - Start *time.Time `locationName:"start" type:"timestamp" timestampFormat:"iso8601"` + // The platform (Linux/UNIX or Windows). + Platform *string `locationName:"platform" type:"string"` - // The state of the Reserved Instance purchase. - State *string `locationName:"state" type:"string" enum:"ReservedInstanceState"` + // The purchase token. This token expires in two hours. + PurchaseToken *string `locationName:"purchaseToken" type:"string"` - // Any tags assigned to the resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The schedule recurrence. + Recurrence *ScheduledInstanceRecurrence `locationName:"recurrence" type:"structure"` - // The usage price of the Reserved Instance, per hour. - UsagePrice *float64 `locationName:"usagePrice" type:"float"` + // The number of hours in the schedule. + SlotDurationInHours *int64 `locationName:"slotDurationInHours" type:"integer"` + + // The total number of hours for a single instance for the entire term. + TotalScheduledInstanceHours *int64 `locationName:"totalScheduledInstanceHours" type:"integer"` } // String returns the string representation -func (s ReservedInstances) String() string { +func (s ScheduledInstanceAvailability) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservedInstances) GoString() string { +func (s ScheduledInstanceAvailability) GoString() string { return s.String() } // SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ReservedInstances) SetAvailabilityZone(v string) *ReservedInstances { +func (s *ScheduledInstanceAvailability) SetAvailabilityZone(v string) *ScheduledInstanceAvailability { s.AvailabilityZone = &v return s } -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *ReservedInstances) SetCurrencyCode(v string) *ReservedInstances { - s.CurrencyCode = &v +// SetAvailableInstanceCount sets the AvailableInstanceCount field's value. +func (s *ScheduledInstanceAvailability) SetAvailableInstanceCount(v int64) *ScheduledInstanceAvailability { + s.AvailableInstanceCount = &v + return s +} + +// SetFirstSlotStartTime sets the FirstSlotStartTime field's value. +func (s *ScheduledInstanceAvailability) SetFirstSlotStartTime(v time.Time) *ScheduledInstanceAvailability { + s.FirstSlotStartTime = &v + return s +} + +// SetHourlyPrice sets the HourlyPrice field's value. +func (s *ScheduledInstanceAvailability) SetHourlyPrice(v string) *ScheduledInstanceAvailability { + s.HourlyPrice = &v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *ScheduledInstanceAvailability) SetInstanceType(v string) *ScheduledInstanceAvailability { + s.InstanceType = &v return s } -// SetDuration sets the Duration field's value. -func (s *ReservedInstances) SetDuration(v int64) *ReservedInstances { - s.Duration = &v +// SetMaxTermDurationInDays sets the MaxTermDurationInDays field's value. +func (s *ScheduledInstanceAvailability) SetMaxTermDurationInDays(v int64) *ScheduledInstanceAvailability { + s.MaxTermDurationInDays = &v return s } -// SetEnd sets the End field's value. -func (s *ReservedInstances) SetEnd(v time.Time) *ReservedInstances { - s.End = &v +// SetMinTermDurationInDays sets the MinTermDurationInDays field's value. +func (s *ScheduledInstanceAvailability) SetMinTermDurationInDays(v int64) *ScheduledInstanceAvailability { + s.MinTermDurationInDays = &v return s } -// SetFixedPrice sets the FixedPrice field's value. -func (s *ReservedInstances) SetFixedPrice(v float64) *ReservedInstances { - s.FixedPrice = &v +// SetNetworkPlatform sets the NetworkPlatform field's value. +func (s *ScheduledInstanceAvailability) SetNetworkPlatform(v string) *ScheduledInstanceAvailability { + s.NetworkPlatform = &v return s } -// SetInstanceCount sets the InstanceCount field's value. -func (s *ReservedInstances) SetInstanceCount(v int64) *ReservedInstances { - s.InstanceCount = &v +// SetPlatform sets the Platform field's value. +func (s *ScheduledInstanceAvailability) SetPlatform(v string) *ScheduledInstanceAvailability { + s.Platform = &v return s } -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *ReservedInstances) SetInstanceTenancy(v string) *ReservedInstances { - s.InstanceTenancy = &v +// SetPurchaseToken sets the PurchaseToken field's value. +func (s *ScheduledInstanceAvailability) SetPurchaseToken(v string) *ScheduledInstanceAvailability { + s.PurchaseToken = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *ReservedInstances) SetInstanceType(v string) *ReservedInstances { - s.InstanceType = &v +// SetRecurrence sets the Recurrence field's value. +func (s *ScheduledInstanceAvailability) SetRecurrence(v *ScheduledInstanceRecurrence) *ScheduledInstanceAvailability { + s.Recurrence = v return s } -// SetOfferingClass sets the OfferingClass field's value. -func (s *ReservedInstances) SetOfferingClass(v string) *ReservedInstances { - s.OfferingClass = &v +// SetSlotDurationInHours sets the SlotDurationInHours field's value. +func (s *ScheduledInstanceAvailability) SetSlotDurationInHours(v int64) *ScheduledInstanceAvailability { + s.SlotDurationInHours = &v return s } -// SetOfferingType sets the OfferingType field's value. -func (s *ReservedInstances) SetOfferingType(v string) *ReservedInstances { - s.OfferingType = &v +// SetTotalScheduledInstanceHours sets the TotalScheduledInstanceHours field's value. +func (s *ScheduledInstanceAvailability) SetTotalScheduledInstanceHours(v int64) *ScheduledInstanceAvailability { + s.TotalScheduledInstanceHours = &v return s } -// SetProductDescription sets the ProductDescription field's value. -func (s *ReservedInstances) SetProductDescription(v string) *ReservedInstances { - s.ProductDescription = &v - return s +// Describes the recurring schedule for a Scheduled Instance. +type ScheduledInstanceRecurrence struct { + _ struct{} `type:"structure"` + + // The frequency (Daily, Weekly, or Monthly). + Frequency *string `locationName:"frequency" type:"string"` + + // The interval quantity. The interval unit depends on the value of frequency. + // For example, every 2 weeks or every 2 months. + Interval *int64 `locationName:"interval" type:"integer"` + + // The days. For a monthly schedule, this is one or more days of the month (1-31). + // For a weekly schedule, this is one or more days of the week (1-7, where 1 + // is Sunday). + OccurrenceDaySet []*int64 `locationName:"occurrenceDaySet" locationNameList:"item" type:"list"` + + // Indicates whether the occurrence is relative to the end of the specified + // week or month. + OccurrenceRelativeToEnd *bool `locationName:"occurrenceRelativeToEnd" type:"boolean"` + + // The unit for occurrenceDaySet (DayOfWeek or DayOfMonth). + OccurrenceUnit *string `locationName:"occurrenceUnit" type:"string"` } -// SetRecurringCharges sets the RecurringCharges field's value. -func (s *ReservedInstances) SetRecurringCharges(v []*RecurringCharge) *ReservedInstances { - s.RecurringCharges = v - return s +// String returns the string representation +func (s ScheduledInstanceRecurrence) String() string { + return awsutil.Prettify(s) } -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *ReservedInstances) SetReservedInstancesId(v string) *ReservedInstances { - s.ReservedInstancesId = &v - return s +// GoString returns the string representation +func (s ScheduledInstanceRecurrence) GoString() string { + return s.String() } -// SetScope sets the Scope field's value. -func (s *ReservedInstances) SetScope(v string) *ReservedInstances { - s.Scope = &v +// SetFrequency sets the Frequency field's value. +func (s *ScheduledInstanceRecurrence) SetFrequency(v string) *ScheduledInstanceRecurrence { + s.Frequency = &v return s } -// SetStart sets the Start field's value. -func (s *ReservedInstances) SetStart(v time.Time) *ReservedInstances { - s.Start = &v +// SetInterval sets the Interval field's value. +func (s *ScheduledInstanceRecurrence) SetInterval(v int64) *ScheduledInstanceRecurrence { + s.Interval = &v return s } -// SetState sets the State field's value. -func (s *ReservedInstances) SetState(v string) *ReservedInstances { - s.State = &v +// SetOccurrenceDaySet sets the OccurrenceDaySet field's value. +func (s *ScheduledInstanceRecurrence) SetOccurrenceDaySet(v []*int64) *ScheduledInstanceRecurrence { + s.OccurrenceDaySet = v return s } -// SetTags sets the Tags field's value. -func (s *ReservedInstances) SetTags(v []*Tag) *ReservedInstances { - s.Tags = v +// SetOccurrenceRelativeToEnd sets the OccurrenceRelativeToEnd field's value. +func (s *ScheduledInstanceRecurrence) SetOccurrenceRelativeToEnd(v bool) *ScheduledInstanceRecurrence { + s.OccurrenceRelativeToEnd = &v return s } -// SetUsagePrice sets the UsagePrice field's value. -func (s *ReservedInstances) SetUsagePrice(v float64) *ReservedInstances { - s.UsagePrice = &v +// SetOccurrenceUnit sets the OccurrenceUnit field's value. +func (s *ScheduledInstanceRecurrence) SetOccurrenceUnit(v string) *ScheduledInstanceRecurrence { + s.OccurrenceUnit = &v return s } -// Describes the configuration settings for the modified Reserved Instances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesConfiguration -type ReservedInstancesConfiguration struct { +// Describes the recurring schedule for a Scheduled Instance. +type ScheduledInstanceRecurrenceRequest struct { _ struct{} `type:"structure"` - // The Availability Zone for the modified Reserved Instances. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + // The frequency (Daily, Weekly, or Monthly). + Frequency *string `type:"string"` - // The number of modified Reserved Instances. - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` + // The interval quantity. The interval unit depends on the value of Frequency. + // For example, every 2 weeks or every 2 months. + Interval *int64 `type:"integer"` - // The instance type for the modified Reserved Instances. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + // The days. For a monthly schedule, this is one or more days of the month (1-31). + // For a weekly schedule, this is one or more days of the week (1-7, where 1 + // is Sunday). You can't specify this value with a daily schedule. If the occurrence + // is relative to the end of the month, you can specify only a single day. + OccurrenceDays []*int64 `locationName:"OccurrenceDay" locationNameList:"OccurenceDay" type:"list"` - // The network platform of the modified Reserved Instances, which is either - // EC2-Classic or EC2-VPC. - Platform *string `locationName:"platform" type:"string"` + // Indicates whether the occurrence is relative to the end of the specified + // week or month. You can't specify this value with a daily schedule. + OccurrenceRelativeToEnd *bool `type:"boolean"` - // Whether the Reserved Instance is applied to instances in a region or instances - // in a specific Availability Zone. - Scope *string `locationName:"scope" type:"string" enum:"scope"` + // The unit for OccurrenceDays (DayOfWeek or DayOfMonth). This value is required + // for a monthly schedule. You can't specify DayOfWeek with a weekly schedule. + // You can't specify this value with a daily schedule. + OccurrenceUnit *string `type:"string"` } // String returns the string representation -func (s ReservedInstancesConfiguration) String() string { +func (s ScheduledInstanceRecurrenceRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservedInstancesConfiguration) GoString() string { +func (s ScheduledInstanceRecurrenceRequest) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ReservedInstancesConfiguration) SetAvailabilityZone(v string) *ReservedInstancesConfiguration { - s.AvailabilityZone = &v +// SetFrequency sets the Frequency field's value. +func (s *ScheduledInstanceRecurrenceRequest) SetFrequency(v string) *ScheduledInstanceRecurrenceRequest { + s.Frequency = &v return s } -// SetInstanceCount sets the InstanceCount field's value. -func (s *ReservedInstancesConfiguration) SetInstanceCount(v int64) *ReservedInstancesConfiguration { - s.InstanceCount = &v +// SetInterval sets the Interval field's value. +func (s *ScheduledInstanceRecurrenceRequest) SetInterval(v int64) *ScheduledInstanceRecurrenceRequest { + s.Interval = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *ReservedInstancesConfiguration) SetInstanceType(v string) *ReservedInstancesConfiguration { - s.InstanceType = &v +// SetOccurrenceDays sets the OccurrenceDays field's value. +func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceDays(v []*int64) *ScheduledInstanceRecurrenceRequest { + s.OccurrenceDays = v return s } -// SetPlatform sets the Platform field's value. -func (s *ReservedInstancesConfiguration) SetPlatform(v string) *ReservedInstancesConfiguration { - s.Platform = &v +// SetOccurrenceRelativeToEnd sets the OccurrenceRelativeToEnd field's value. +func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceRelativeToEnd(v bool) *ScheduledInstanceRecurrenceRequest { + s.OccurrenceRelativeToEnd = &v return s } -// SetScope sets the Scope field's value. -func (s *ReservedInstancesConfiguration) SetScope(v string) *ReservedInstancesConfiguration { - s.Scope = &v +// SetOccurrenceUnit sets the OccurrenceUnit field's value. +func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceUnit(v string) *ScheduledInstanceRecurrenceRequest { + s.OccurrenceUnit = &v return s } -// Describes the ID of a Reserved Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesId -type ReservedInstancesId struct { +// Describes a block device mapping for a Scheduled Instance. +type ScheduledInstancesBlockDeviceMapping struct { _ struct{} `type:"structure"` - // The ID of the Reserved Instance. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` + // The device name (for example, /dev/sdh or xvdh). + DeviceName *string `type:"string"` + + // Parameters used to set up EBS volumes automatically when the instance is + // launched. + Ebs *ScheduledInstancesEbs `type:"structure"` + + // Suppresses the specified device included in the block device mapping of the + // AMI. + NoDevice *string `type:"string"` + + // The virtual device name (ephemeralN). Instance store volumes are numbered + // starting from 0. An instance type with two available instance store volumes + // can specify mappings for ephemeral0 and ephemeral1. The number of available + // instance store volumes depends on the instance type. After you connect to + // the instance, you must mount the volume. + // + // Constraints: For M3 instances, you must specify instance store volumes in + // the block device mapping for the instance. When you launch an M3 instance, + // we ignore any instance store volumes specified in the block device mapping + // for the AMI. + VirtualName *string `type:"string"` } // String returns the string representation -func (s ReservedInstancesId) String() string { +func (s ScheduledInstancesBlockDeviceMapping) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservedInstancesId) GoString() string { +func (s ScheduledInstancesBlockDeviceMapping) GoString() string { return s.String() } -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *ReservedInstancesId) SetReservedInstancesId(v string) *ReservedInstancesId { - s.ReservedInstancesId = &v +// SetDeviceName sets the DeviceName field's value. +func (s *ScheduledInstancesBlockDeviceMapping) SetDeviceName(v string) *ScheduledInstancesBlockDeviceMapping { + s.DeviceName = &v return s } -// Describes a Reserved Instance listing. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesListing -type ReservedInstancesListing struct { - _ struct{} `type:"structure"` - - // A unique, case-sensitive key supplied by the client to ensure that the request - // is idempotent. For more information, see Ensuring Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` +// SetEbs sets the Ebs field's value. +func (s *ScheduledInstancesBlockDeviceMapping) SetEbs(v *ScheduledInstancesEbs) *ScheduledInstancesBlockDeviceMapping { + s.Ebs = v + return s +} - // The time the listing was created. - CreateDate *time.Time `locationName:"createDate" type:"timestamp" timestampFormat:"iso8601"` +// SetNoDevice sets the NoDevice field's value. +func (s *ScheduledInstancesBlockDeviceMapping) SetNoDevice(v string) *ScheduledInstancesBlockDeviceMapping { + s.NoDevice = &v + return s +} - // The number of instances in this state. - InstanceCounts []*InstanceCount `locationName:"instanceCounts" locationNameList:"item" type:"list"` +// SetVirtualName sets the VirtualName field's value. +func (s *ScheduledInstancesBlockDeviceMapping) SetVirtualName(v string) *ScheduledInstancesBlockDeviceMapping { + s.VirtualName = &v + return s +} - // The price of the Reserved Instance listing. - PriceSchedules []*PriceSchedule `locationName:"priceSchedules" locationNameList:"item" type:"list"` +// Describes an EBS volume for a Scheduled Instance. +type ScheduledInstancesEbs struct { + _ struct{} `type:"structure"` - // The ID of the Reserved Instance. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` + // Indicates whether the volume is deleted on instance termination. + DeleteOnTermination *bool `type:"boolean"` - // The ID of the Reserved Instance listing. - ReservedInstancesListingId *string `locationName:"reservedInstancesListingId" type:"string"` + // Indicates whether the volume is encrypted. You can attached encrypted volumes + // only to instances that support them. + Encrypted *bool `type:"boolean"` - // The status of the Reserved Instance listing. - Status *string `locationName:"status" type:"string" enum:"ListingStatus"` + // The number of I/O operations per second (IOPS) that the volume supports. + // For io1 volumes, this represents the number of IOPS that are provisioned + // for the volume. For gp2 volumes, this represents the baseline performance + // of the volume and the rate at which the volume accumulates I/O credits for + // bursting. For more information about gp2 baseline performance, I/O credits, + // and bursting, see Amazon EBS Volume Types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) + // in the Amazon Elastic Compute Cloud User Guide. + // + // Constraint: Range is 100-20000 IOPS for io1 volumes and 100-10000 IOPS for + // gp2 volumes. + // + // Condition: This parameter is required for requests to create io1volumes; + // it is not used in requests to create gp2, st1, sc1, or standard volumes. + Iops *int64 `type:"integer"` - // The reason for the current status of the Reserved Instance listing. The response - // can be blank. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // The ID of the snapshot. + SnapshotId *string `type:"string"` - // Any tags assigned to the resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The size of the volume, in GiB. + // + // Default: If you're creating the volume from a snapshot and don't specify + // a volume size, the default is the snapshot size. + VolumeSize *int64 `type:"integer"` - // The last modified timestamp of the listing. - UpdateDate *time.Time `locationName:"updateDate" type:"timestamp" timestampFormat:"iso8601"` + // The volume type. gp2 for General Purpose SSD, io1 for Provisioned IOPS SSD, + // Throughput Optimized HDD for st1, Cold HDD for sc1, or standard for Magnetic. + // + // Default: gp2 + VolumeType *string `type:"string"` } // String returns the string representation -func (s ReservedInstancesListing) String() string { +func (s ScheduledInstancesEbs) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservedInstancesListing) GoString() string { +func (s ScheduledInstancesEbs) GoString() string { return s.String() } -// SetClientToken sets the ClientToken field's value. -func (s *ReservedInstancesListing) SetClientToken(v string) *ReservedInstancesListing { - s.ClientToken = &v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *ScheduledInstancesEbs) SetDeleteOnTermination(v bool) *ScheduledInstancesEbs { + s.DeleteOnTermination = &v return s } -// SetCreateDate sets the CreateDate field's value. -func (s *ReservedInstancesListing) SetCreateDate(v time.Time) *ReservedInstancesListing { - s.CreateDate = &v +// SetEncrypted sets the Encrypted field's value. +func (s *ScheduledInstancesEbs) SetEncrypted(v bool) *ScheduledInstancesEbs { + s.Encrypted = &v return s } -// SetInstanceCounts sets the InstanceCounts field's value. -func (s *ReservedInstancesListing) SetInstanceCounts(v []*InstanceCount) *ReservedInstancesListing { - s.InstanceCounts = v +// SetIops sets the Iops field's value. +func (s *ScheduledInstancesEbs) SetIops(v int64) *ScheduledInstancesEbs { + s.Iops = &v return s } -// SetPriceSchedules sets the PriceSchedules field's value. -func (s *ReservedInstancesListing) SetPriceSchedules(v []*PriceSchedule) *ReservedInstancesListing { - s.PriceSchedules = v +// SetSnapshotId sets the SnapshotId field's value. +func (s *ScheduledInstancesEbs) SetSnapshotId(v string) *ScheduledInstancesEbs { + s.SnapshotId = &v return s } -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *ReservedInstancesListing) SetReservedInstancesId(v string) *ReservedInstancesListing { - s.ReservedInstancesId = &v +// SetVolumeSize sets the VolumeSize field's value. +func (s *ScheduledInstancesEbs) SetVolumeSize(v int64) *ScheduledInstancesEbs { + s.VolumeSize = &v return s } -// SetReservedInstancesListingId sets the ReservedInstancesListingId field's value. -func (s *ReservedInstancesListing) SetReservedInstancesListingId(v string) *ReservedInstancesListing { - s.ReservedInstancesListingId = &v +// SetVolumeType sets the VolumeType field's value. +func (s *ScheduledInstancesEbs) SetVolumeType(v string) *ScheduledInstancesEbs { + s.VolumeType = &v return s } -// SetStatus sets the Status field's value. -func (s *ReservedInstancesListing) SetStatus(v string) *ReservedInstancesListing { - s.Status = &v - return s +// Describes an IAM instance profile for a Scheduled Instance. +type ScheduledInstancesIamInstanceProfile struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN). + Arn *string `type:"string"` + + // The name. + Name *string `type:"string"` } -// SetStatusMessage sets the StatusMessage field's value. -func (s *ReservedInstancesListing) SetStatusMessage(v string) *ReservedInstancesListing { - s.StatusMessage = &v +// String returns the string representation +func (s ScheduledInstancesIamInstanceProfile) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ScheduledInstancesIamInstanceProfile) GoString() string { + return s.String() +} + +// SetArn sets the Arn field's value. +func (s *ScheduledInstancesIamInstanceProfile) SetArn(v string) *ScheduledInstancesIamInstanceProfile { + s.Arn = &v return s } -// SetTags sets the Tags field's value. -func (s *ReservedInstancesListing) SetTags(v []*Tag) *ReservedInstancesListing { - s.Tags = v +// SetName sets the Name field's value. +func (s *ScheduledInstancesIamInstanceProfile) SetName(v string) *ScheduledInstancesIamInstanceProfile { + s.Name = &v return s } -// SetUpdateDate sets the UpdateDate field's value. -func (s *ReservedInstancesListing) SetUpdateDate(v time.Time) *ReservedInstancesListing { - s.UpdateDate = &v +// Describes an IPv6 address. +type ScheduledInstancesIpv6Address struct { + _ struct{} `type:"structure"` + + // The IPv6 address. + Ipv6Address *string `type:"string"` +} + +// String returns the string representation +func (s ScheduledInstancesIpv6Address) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ScheduledInstancesIpv6Address) GoString() string { + return s.String() +} + +// SetIpv6Address sets the Ipv6Address field's value. +func (s *ScheduledInstancesIpv6Address) SetIpv6Address(v string) *ScheduledInstancesIpv6Address { + s.Ipv6Address = &v return s } -// Describes a Reserved Instance modification. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesModification -type ReservedInstancesModification struct { +// Describes the launch specification for a Scheduled Instance. +// +// If you are launching the Scheduled Instance in EC2-VPC, you must specify +// the ID of the subnet. You can specify the subnet using either SubnetId or +// NetworkInterface. +type ScheduledInstancesLaunchSpecification struct { _ struct{} `type:"structure"` - // A unique, case-sensitive key supplied by the client to ensure that the request - // is idempotent. For more information, see Ensuring Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` + // The block device mapping entries. + BlockDeviceMappings []*ScheduledInstancesBlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - // The time when the modification request was created. - CreateDate *time.Time `locationName:"createDate" type:"timestamp" timestampFormat:"iso8601"` + // Indicates whether the instances are optimized for EBS I/O. This optimization + // provides dedicated throughput to Amazon EBS and an optimized configuration + // stack to provide optimal EBS I/O performance. This optimization isn't available + // with all instance types. Additional usage charges apply when using an EBS-optimized + // instance. + // + // Default: false + EbsOptimized *bool `type:"boolean"` - // The time for the modification to become effective. - EffectiveDate *time.Time `locationName:"effectiveDate" type:"timestamp" timestampFormat:"iso8601"` + // The IAM instance profile. + IamInstanceProfile *ScheduledInstancesIamInstanceProfile `type:"structure"` - // Contains target configurations along with their corresponding new Reserved - // Instance IDs. - ModificationResults []*ReservedInstancesModificationResult `locationName:"modificationResultSet" locationNameList:"item" type:"list"` + // The ID of the Amazon Machine Image (AMI). + // + // ImageId is a required field + ImageId *string `type:"string" required:"true"` - // The IDs of one or more Reserved Instances. - ReservedInstancesIds []*ReservedInstancesId `locationName:"reservedInstancesSet" locationNameList:"item" type:"list"` + // The instance type. + InstanceType *string `type:"string"` - // A unique ID for the Reserved Instance modification. - ReservedInstancesModificationId *string `locationName:"reservedInstancesModificationId" type:"string"` + // The ID of the kernel. + KernelId *string `type:"string"` - // The status of the Reserved Instances modification request. - Status *string `locationName:"status" type:"string"` + // The name of the key pair. + KeyName *string `type:"string"` - // The reason for the status. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // Enable or disable monitoring for the instances. + Monitoring *ScheduledInstancesMonitoring `type:"structure"` - // The time when the modification request was last updated. - UpdateDate *time.Time `locationName:"updateDate" type:"timestamp" timestampFormat:"iso8601"` + // The network interfaces. + NetworkInterfaces []*ScheduledInstancesNetworkInterface `locationName:"NetworkInterface" locationNameList:"NetworkInterface" type:"list"` + + // The placement information. + Placement *ScheduledInstancesPlacement `type:"structure"` + + // The ID of the RAM disk. + RamdiskId *string `type:"string"` + + // The IDs of the security groups. + SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + + // The ID of the subnet in which to launch the instances. + SubnetId *string `type:"string"` + + // The base64-encoded MIME user data. + UserData *string `type:"string"` } // String returns the string representation -func (s ReservedInstancesModification) String() string { +func (s ScheduledInstancesLaunchSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservedInstancesModification) GoString() string { +func (s ScheduledInstancesLaunchSpecification) GoString() string { return s.String() } -// SetClientToken sets the ClientToken field's value. -func (s *ReservedInstancesModification) SetClientToken(v string) *ReservedInstancesModification { - s.ClientToken = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *ScheduledInstancesLaunchSpecification) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ScheduledInstancesLaunchSpecification"} + if s.ImageId == nil { + invalidParams.Add(request.NewErrParamRequired("ImageId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *ScheduledInstancesLaunchSpecification) SetBlockDeviceMappings(v []*ScheduledInstancesBlockDeviceMapping) *ScheduledInstancesLaunchSpecification { + s.BlockDeviceMappings = v return s } -// SetCreateDate sets the CreateDate field's value. -func (s *ReservedInstancesModification) SetCreateDate(v time.Time) *ReservedInstancesModification { - s.CreateDate = &v +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *ScheduledInstancesLaunchSpecification) SetEbsOptimized(v bool) *ScheduledInstancesLaunchSpecification { + s.EbsOptimized = &v + return s +} + +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *ScheduledInstancesLaunchSpecification) SetIamInstanceProfile(v *ScheduledInstancesIamInstanceProfile) *ScheduledInstancesLaunchSpecification { + s.IamInstanceProfile = v + return s +} + +// SetImageId sets the ImageId field's value. +func (s *ScheduledInstancesLaunchSpecification) SetImageId(v string) *ScheduledInstancesLaunchSpecification { + s.ImageId = &v + return s +} + +// SetInstanceType sets the InstanceType field's value. +func (s *ScheduledInstancesLaunchSpecification) SetInstanceType(v string) *ScheduledInstancesLaunchSpecification { + s.InstanceType = &v + return s +} + +// SetKernelId sets the KernelId field's value. +func (s *ScheduledInstancesLaunchSpecification) SetKernelId(v string) *ScheduledInstancesLaunchSpecification { + s.KernelId = &v + return s +} + +// SetKeyName sets the KeyName field's value. +func (s *ScheduledInstancesLaunchSpecification) SetKeyName(v string) *ScheduledInstancesLaunchSpecification { + s.KeyName = &v return s } -// SetEffectiveDate sets the EffectiveDate field's value. -func (s *ReservedInstancesModification) SetEffectiveDate(v time.Time) *ReservedInstancesModification { - s.EffectiveDate = &v +// SetMonitoring sets the Monitoring field's value. +func (s *ScheduledInstancesLaunchSpecification) SetMonitoring(v *ScheduledInstancesMonitoring) *ScheduledInstancesLaunchSpecification { + s.Monitoring = v return s } -// SetModificationResults sets the ModificationResults field's value. -func (s *ReservedInstancesModification) SetModificationResults(v []*ReservedInstancesModificationResult) *ReservedInstancesModification { - s.ModificationResults = v +// SetNetworkInterfaces sets the NetworkInterfaces field's value. +func (s *ScheduledInstancesLaunchSpecification) SetNetworkInterfaces(v []*ScheduledInstancesNetworkInterface) *ScheduledInstancesLaunchSpecification { + s.NetworkInterfaces = v return s } -// SetReservedInstancesIds sets the ReservedInstancesIds field's value. -func (s *ReservedInstancesModification) SetReservedInstancesIds(v []*ReservedInstancesId) *ReservedInstancesModification { - s.ReservedInstancesIds = v +// SetPlacement sets the Placement field's value. +func (s *ScheduledInstancesLaunchSpecification) SetPlacement(v *ScheduledInstancesPlacement) *ScheduledInstancesLaunchSpecification { + s.Placement = v return s } -// SetReservedInstancesModificationId sets the ReservedInstancesModificationId field's value. -func (s *ReservedInstancesModification) SetReservedInstancesModificationId(v string) *ReservedInstancesModification { - s.ReservedInstancesModificationId = &v +// SetRamdiskId sets the RamdiskId field's value. +func (s *ScheduledInstancesLaunchSpecification) SetRamdiskId(v string) *ScheduledInstancesLaunchSpecification { + s.RamdiskId = &v return s } -// SetStatus sets the Status field's value. -func (s *ReservedInstancesModification) SetStatus(v string) *ReservedInstancesModification { - s.Status = &v +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *ScheduledInstancesLaunchSpecification) SetSecurityGroupIds(v []*string) *ScheduledInstancesLaunchSpecification { + s.SecurityGroupIds = v return s } -// SetStatusMessage sets the StatusMessage field's value. -func (s *ReservedInstancesModification) SetStatusMessage(v string) *ReservedInstancesModification { - s.StatusMessage = &v +// SetSubnetId sets the SubnetId field's value. +func (s *ScheduledInstancesLaunchSpecification) SetSubnetId(v string) *ScheduledInstancesLaunchSpecification { + s.SubnetId = &v return s } -// SetUpdateDate sets the UpdateDate field's value. -func (s *ReservedInstancesModification) SetUpdateDate(v time.Time) *ReservedInstancesModification { - s.UpdateDate = &v +// SetUserData sets the UserData field's value. +func (s *ScheduledInstancesLaunchSpecification) SetUserData(v string) *ScheduledInstancesLaunchSpecification { + s.UserData = &v return s } -// Describes the modification request/s. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesModificationResult -type ReservedInstancesModificationResult struct { +// Describes whether monitoring is enabled for a Scheduled Instance. +type ScheduledInstancesMonitoring struct { _ struct{} `type:"structure"` - // The ID for the Reserved Instances that were created as part of the modification - // request. This field is only available when the modification is fulfilled. - ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` - - // The target Reserved Instances configurations supplied as part of the modification - // request. - TargetConfiguration *ReservedInstancesConfiguration `locationName:"targetConfiguration" type:"structure"` + // Indicates whether monitoring is enabled. + Enabled *bool `type:"boolean"` } // String returns the string representation -func (s ReservedInstancesModificationResult) String() string { +func (s ScheduledInstancesMonitoring) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservedInstancesModificationResult) GoString() string { +func (s ScheduledInstancesMonitoring) GoString() string { return s.String() } -// SetReservedInstancesId sets the ReservedInstancesId field's value. -func (s *ReservedInstancesModificationResult) SetReservedInstancesId(v string) *ReservedInstancesModificationResult { - s.ReservedInstancesId = &v - return s -} - -// SetTargetConfiguration sets the TargetConfiguration field's value. -func (s *ReservedInstancesModificationResult) SetTargetConfiguration(v *ReservedInstancesConfiguration) *ReservedInstancesModificationResult { - s.TargetConfiguration = v +// SetEnabled sets the Enabled field's value. +func (s *ScheduledInstancesMonitoring) SetEnabled(v bool) *ScheduledInstancesMonitoring { + s.Enabled = &v return s } -// Describes a Reserved Instance offering. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesOffering -type ReservedInstancesOffering struct { +// Describes a network interface for a Scheduled Instance. +type ScheduledInstancesNetworkInterface struct { _ struct{} `type:"structure"` - // The Availability Zone in which the Reserved Instance can be used. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The currency of the Reserved Instance offering you are purchasing. It's specified - // using ISO 4217 standard currency codes. At this time, the only supported - // currency is USD. - CurrencyCode *string `locationName:"currencyCode" type:"string" enum:"CurrencyCodeValues"` - - // The duration of the Reserved Instance, in seconds. - Duration *int64 `locationName:"duration" type:"long"` - - // The purchase price of the Reserved Instance. - FixedPrice *float64 `locationName:"fixedPrice" type:"float"` + // Indicates whether to assign a public IPv4 address to instances launched in + // a VPC. The public IPv4 address can only be assigned to a network interface + // for eth0, and can only be assigned to a new network interface, not an existing + // one. You cannot specify more than one network interface in the request. If + // launching into a default subnet, the default value is true. + AssociatePublicIpAddress *bool `type:"boolean"` - // The tenancy of the instance. - InstanceTenancy *string `locationName:"instanceTenancy" type:"string" enum:"Tenancy"` + // Indicates whether to delete the interface when the instance is terminated. + DeleteOnTermination *bool `type:"boolean"` - // The instance type on which the Reserved Instance can be used. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + // The description. + Description *string `type:"string"` - // Indicates whether the offering is available through the Reserved Instance - // Marketplace (resale) or AWS. If it's a Reserved Instance Marketplace offering, - // this is true. - Marketplace *bool `locationName:"marketplace" type:"boolean"` + // The index of the device for the network interface attachment. + DeviceIndex *int64 `type:"integer"` - // If convertible it can be exchanged for Reserved Instances of the same or - // higher monetary value, with different configurations. If standard, it is - // not possible to perform an exchange. - OfferingClass *string `locationName:"offeringClass" type:"string" enum:"OfferingClassType"` + // The IDs of the security groups. + Groups []*string `locationName:"Group" locationNameList:"SecurityGroupId" type:"list"` - // The Reserved Instance offering type. - OfferingType *string `locationName:"offeringType" type:"string" enum:"OfferingTypeValues"` + // The number of IPv6 addresses to assign to the network interface. The IPv6 + // addresses are automatically selected from the subnet range. + Ipv6AddressCount *int64 `type:"integer"` - // The pricing details of the Reserved Instance offering. - PricingDetails []*PricingDetail `locationName:"pricingDetailsSet" locationNameList:"item" type:"list"` + // The specific IPv6 addresses from the subnet range. + Ipv6Addresses []*ScheduledInstancesIpv6Address `locationName:"Ipv6Address" locationNameList:"Ipv6Address" type:"list"` - // The Reserved Instance product platform description. - ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` + // The ID of the network interface. + NetworkInterfaceId *string `type:"string"` - // The recurring charge tag assigned to the resource. - RecurringCharges []*RecurringCharge `locationName:"recurringCharges" locationNameList:"item" type:"list"` + // The IPv4 address of the network interface within the subnet. + PrivateIpAddress *string `type:"string"` - // The ID of the Reserved Instance offering. This is the offering ID used in - // GetReservedInstancesExchangeQuote to confirm that an exchange can be made. - ReservedInstancesOfferingId *string `locationName:"reservedInstancesOfferingId" type:"string"` + // The private IPv4 addresses. + PrivateIpAddressConfigs []*ScheduledInstancesPrivateIpAddressConfig `locationName:"PrivateIpAddressConfig" locationNameList:"PrivateIpAddressConfigSet" type:"list"` - // Whether the Reserved Instance is applied to instances in a region or an Availability - // Zone. - Scope *string `locationName:"scope" type:"string" enum:"scope"` + // The number of secondary private IPv4 addresses. + SecondaryPrivateIpAddressCount *int64 `type:"integer"` - // The usage price of the Reserved Instance, per hour. - UsagePrice *float64 `locationName:"usagePrice" type:"float"` + // The ID of the subnet. + SubnetId *string `type:"string"` } // String returns the string representation -func (s ReservedInstancesOffering) String() string { +func (s ScheduledInstancesNetworkInterface) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ReservedInstancesOffering) GoString() string { +func (s ScheduledInstancesNetworkInterface) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ReservedInstancesOffering) SetAvailabilityZone(v string) *ReservedInstancesOffering { - s.AvailabilityZone = &v - return s -} - -// SetCurrencyCode sets the CurrencyCode field's value. -func (s *ReservedInstancesOffering) SetCurrencyCode(v string) *ReservedInstancesOffering { - s.CurrencyCode = &v - return s -} - -// SetDuration sets the Duration field's value. -func (s *ReservedInstancesOffering) SetDuration(v int64) *ReservedInstancesOffering { - s.Duration = &v - return s -} - -// SetFixedPrice sets the FixedPrice field's value. -func (s *ReservedInstancesOffering) SetFixedPrice(v float64) *ReservedInstancesOffering { - s.FixedPrice = &v +// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. +func (s *ScheduledInstancesNetworkInterface) SetAssociatePublicIpAddress(v bool) *ScheduledInstancesNetworkInterface { + s.AssociatePublicIpAddress = &v return s } -// SetInstanceTenancy sets the InstanceTenancy field's value. -func (s *ReservedInstancesOffering) SetInstanceTenancy(v string) *ReservedInstancesOffering { - s.InstanceTenancy = &v +// SetDeleteOnTermination sets the DeleteOnTermination field's value. +func (s *ScheduledInstancesNetworkInterface) SetDeleteOnTermination(v bool) *ScheduledInstancesNetworkInterface { + s.DeleteOnTermination = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *ReservedInstancesOffering) SetInstanceType(v string) *ReservedInstancesOffering { - s.InstanceType = &v +// SetDescription sets the Description field's value. +func (s *ScheduledInstancesNetworkInterface) SetDescription(v string) *ScheduledInstancesNetworkInterface { + s.Description = &v return s } -// SetMarketplace sets the Marketplace field's value. -func (s *ReservedInstancesOffering) SetMarketplace(v bool) *ReservedInstancesOffering { - s.Marketplace = &v +// SetDeviceIndex sets the DeviceIndex field's value. +func (s *ScheduledInstancesNetworkInterface) SetDeviceIndex(v int64) *ScheduledInstancesNetworkInterface { + s.DeviceIndex = &v return s } -// SetOfferingClass sets the OfferingClass field's value. -func (s *ReservedInstancesOffering) SetOfferingClass(v string) *ReservedInstancesOffering { - s.OfferingClass = &v +// SetGroups sets the Groups field's value. +func (s *ScheduledInstancesNetworkInterface) SetGroups(v []*string) *ScheduledInstancesNetworkInterface { + s.Groups = v return s } -// SetOfferingType sets the OfferingType field's value. -func (s *ReservedInstancesOffering) SetOfferingType(v string) *ReservedInstancesOffering { - s.OfferingType = &v +// SetIpv6AddressCount sets the Ipv6AddressCount field's value. +func (s *ScheduledInstancesNetworkInterface) SetIpv6AddressCount(v int64) *ScheduledInstancesNetworkInterface { + s.Ipv6AddressCount = &v return s } -// SetPricingDetails sets the PricingDetails field's value. -func (s *ReservedInstancesOffering) SetPricingDetails(v []*PricingDetail) *ReservedInstancesOffering { - s.PricingDetails = v +// SetIpv6Addresses sets the Ipv6Addresses field's value. +func (s *ScheduledInstancesNetworkInterface) SetIpv6Addresses(v []*ScheduledInstancesIpv6Address) *ScheduledInstancesNetworkInterface { + s.Ipv6Addresses = v return s } -// SetProductDescription sets the ProductDescription field's value. -func (s *ReservedInstancesOffering) SetProductDescription(v string) *ReservedInstancesOffering { - s.ProductDescription = &v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *ScheduledInstancesNetworkInterface) SetNetworkInterfaceId(v string) *ScheduledInstancesNetworkInterface { + s.NetworkInterfaceId = &v return s } -// SetRecurringCharges sets the RecurringCharges field's value. -func (s *ReservedInstancesOffering) SetRecurringCharges(v []*RecurringCharge) *ReservedInstancesOffering { - s.RecurringCharges = v +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *ScheduledInstancesNetworkInterface) SetPrivateIpAddress(v string) *ScheduledInstancesNetworkInterface { + s.PrivateIpAddress = &v return s } -// SetReservedInstancesOfferingId sets the ReservedInstancesOfferingId field's value. -func (s *ReservedInstancesOffering) SetReservedInstancesOfferingId(v string) *ReservedInstancesOffering { - s.ReservedInstancesOfferingId = &v +// SetPrivateIpAddressConfigs sets the PrivateIpAddressConfigs field's value. +func (s *ScheduledInstancesNetworkInterface) SetPrivateIpAddressConfigs(v []*ScheduledInstancesPrivateIpAddressConfig) *ScheduledInstancesNetworkInterface { + s.PrivateIpAddressConfigs = v return s } -// SetScope sets the Scope field's value. -func (s *ReservedInstancesOffering) SetScope(v string) *ReservedInstancesOffering { - s.Scope = &v +// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. +func (s *ScheduledInstancesNetworkInterface) SetSecondaryPrivateIpAddressCount(v int64) *ScheduledInstancesNetworkInterface { + s.SecondaryPrivateIpAddressCount = &v return s } -// SetUsagePrice sets the UsagePrice field's value. -func (s *ReservedInstancesOffering) SetUsagePrice(v float64) *ReservedInstancesOffering { - s.UsagePrice = &v +// SetSubnetId sets the SubnetId field's value. +func (s *ScheduledInstancesNetworkInterface) SetSubnetId(v string) *ScheduledInstancesNetworkInterface { + s.SubnetId = &v return s } -// Contains the parameters for ResetImageAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttributeRequest -type ResetImageAttributeInput struct { +// Describes the placement for a Scheduled Instance. +type ScheduledInstancesPlacement struct { _ struct{} `type:"structure"` - // The attribute to reset (currently you can only reset the launch permission - // attribute). - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"ResetImageAttributeName"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The Availability Zone. + AvailabilityZone *string `type:"string"` - // The ID of the AMI. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` + // The name of the placement group. + GroupName *string `type:"string"` } // String returns the string representation -func (s ResetImageAttributeInput) String() string { +func (s ScheduledInstancesPlacement) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ResetImageAttributeInput) GoString() string { +func (s ScheduledInstancesPlacement) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ResetImageAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetImageAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAttribute sets the Attribute field's value. -func (s *ResetImageAttributeInput) SetAttribute(v string) *ResetImageAttributeInput { - s.Attribute = &v - return s -} - -// SetDryRun sets the DryRun field's value. -func (s *ResetImageAttributeInput) SetDryRun(v bool) *ResetImageAttributeInput { - s.DryRun = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *ScheduledInstancesPlacement) SetAvailabilityZone(v string) *ScheduledInstancesPlacement { + s.AvailabilityZone = &v return s } -// SetImageId sets the ImageId field's value. -func (s *ResetImageAttributeInput) SetImageId(v string) *ResetImageAttributeInput { - s.ImageId = &v +// SetGroupName sets the GroupName field's value. +func (s *ScheduledInstancesPlacement) SetGroupName(v string) *ScheduledInstancesPlacement { + s.GroupName = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttributeOutput -type ResetImageAttributeOutput struct { +// Describes a private IPv4 address for a Scheduled Instance. +type ScheduledInstancesPrivateIpAddressConfig struct { _ struct{} `type:"structure"` + + // Indicates whether this is a primary IPv4 address. Otherwise, this is a secondary + // IPv4 address. + Primary *bool `type:"boolean"` + + // The IPv4 address. + PrivateIpAddress *string `type:"string"` } // String returns the string representation -func (s ResetImageAttributeOutput) String() string { +func (s ScheduledInstancesPrivateIpAddressConfig) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ResetImageAttributeOutput) GoString() string { +func (s ScheduledInstancesPrivateIpAddressConfig) GoString() string { return s.String() } -// Contains the parameters for ResetInstanceAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttributeRequest -type ResetInstanceAttributeInput struct { - _ struct{} `type:"structure"` +// SetPrimary sets the Primary field's value. +func (s *ScheduledInstancesPrivateIpAddressConfig) SetPrimary(v bool) *ScheduledInstancesPrivateIpAddressConfig { + s.Primary = &v + return s +} - // The attribute to reset. - // - // You can only reset the following attributes: kernel | ramdisk | sourceDestCheck. - // To change an instance attribute, use ModifyInstanceAttribute. - // - // Attribute is a required field - Attribute *string `locationName:"attribute" type:"string" required:"true" enum:"InstanceAttributeName"` +// SetPrivateIpAddress sets the PrivateIpAddress field's value. +func (s *ScheduledInstancesPrivateIpAddressConfig) SetPrivateIpAddress(v string) *ScheduledInstancesPrivateIpAddressConfig { + s.PrivateIpAddress = &v + return s +} + +type SearchTransitGatewayRoutesInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + DryRun *bool `type:"boolean"` - // The ID of the instance. + // One or more filters. The possible values are: // - // InstanceId is a required field - InstanceId *string `locationName:"instanceId" type:"string" required:"true"` + // * attachment.transit-gateway-attachment-id- The id of the transit gateway + // attachment. + // + // * attachment.resource-id - The resource id of the transit gateway attachment. + // + // * attachment.resource-type - The attachment resource type (vpc | vpn). + // + // * route-search.exact-match - The exact match of the specified filter. + // + // * route-search.longest-prefix-match - The longest prefix that matches + // the route. + // + // * route-search.subnet-of-match - The routes with a subnet that match the + // specified CIDR filter. + // + // * route-search.supernet-of-match - The routes with a CIDR that encompass + // the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 + // routes in your route table and you specify supernet-of-match as 10.0.1.0/30, + // then the result returns 10.0.1.0/29. + // + // * state - The state of the route (active | blackhole). + // + // * type - The type of route (propagated | static). + // + // Filters is a required field + Filters []*Filter `locationName:"Filter" locationNameList:"Filter" type:"list" required:"true"` + + // The maximum number of routes to return. + MaxResults *int64 `min:"5" type:"integer"` + + // The ID of the transit gateway route table. + // + // TransitGatewayRouteTableId is a required field + TransitGatewayRouteTableId *string `type:"string" required:"true"` } // String returns the string representation -func (s ResetInstanceAttributeInput) String() string { +func (s SearchTransitGatewayRoutesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ResetInstanceAttributeInput) GoString() string { +func (s SearchTransitGatewayRoutesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *ResetInstanceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetInstanceAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) +func (s *SearchTransitGatewayRoutesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SearchTransitGatewayRoutesInput"} + if s.Filters == nil { + invalidParams.Add(request.NewErrParamRequired("Filters")) } - if s.InstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceId")) + if s.MaxResults != nil && *s.MaxResults < 5 { + invalidParams.Add(request.NewErrParamMinValue("MaxResults", 5)) + } + if s.TransitGatewayRouteTableId == nil { + invalidParams.Add(request.NewErrParamRequired("TransitGatewayRouteTableId")) } if invalidParams.Len() > 0 { @@ -45819,345 +90332,254 @@ func (s *ResetInstanceAttributeInput) Validate() error { return nil } -// SetAttribute sets the Attribute field's value. -func (s *ResetInstanceAttributeInput) SetAttribute(v string) *ResetInstanceAttributeInput { - s.Attribute = &v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *ResetInstanceAttributeInput) SetDryRun(v bool) *ResetInstanceAttributeInput { +func (s *SearchTransitGatewayRoutesInput) SetDryRun(v bool) *SearchTransitGatewayRoutesInput { s.DryRun = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *ResetInstanceAttributeInput) SetInstanceId(v string) *ResetInstanceAttributeInput { - s.InstanceId = &v +// SetFilters sets the Filters field's value. +func (s *SearchTransitGatewayRoutesInput) SetFilters(v []*Filter) *SearchTransitGatewayRoutesInput { + s.Filters = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttributeOutput -type ResetInstanceAttributeOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s ResetInstanceAttributeOutput) String() string { - return awsutil.Prettify(s) +// SetMaxResults sets the MaxResults field's value. +func (s *SearchTransitGatewayRoutesInput) SetMaxResults(v int64) *SearchTransitGatewayRoutesInput { + s.MaxResults = &v + return s } -// GoString returns the string representation -func (s ResetInstanceAttributeOutput) GoString() string { - return s.String() +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *SearchTransitGatewayRoutesInput) SetTransitGatewayRouteTableId(v string) *SearchTransitGatewayRoutesInput { + s.TransitGatewayRouteTableId = &v + return s } -// Contains the parameters for ResetNetworkInterfaceAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttributeRequest -type ResetNetworkInterfaceAttributeInput struct { +type SearchTransitGatewayRoutesOutput struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The ID of the network interface. - // - // NetworkInterfaceId is a required field - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string" required:"true"` + // Indicates whether there are additional routes available. + AdditionalRoutesAvailable *bool `locationName:"additionalRoutesAvailable" type:"boolean"` - // The source/destination checking attribute. Resets the value to true. - SourceDestCheck *string `locationName:"sourceDestCheck" type:"string"` + // Information about the routes. + Routes []*TransitGatewayRoute `locationName:"routeSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s ResetNetworkInterfaceAttributeInput) String() string { +func (s SearchTransitGatewayRoutesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ResetNetworkInterfaceAttributeInput) GoString() string { +func (s SearchTransitGatewayRoutesOutput) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ResetNetworkInterfaceAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetNetworkInterfaceAttributeInput"} - if s.NetworkInterfaceId == nil { - invalidParams.Add(request.NewErrParamRequired("NetworkInterfaceId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *ResetNetworkInterfaceAttributeInput) SetDryRun(v bool) *ResetNetworkInterfaceAttributeInput { - s.DryRun = &v - return s -} - -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *ResetNetworkInterfaceAttributeInput) SetNetworkInterfaceId(v string) *ResetNetworkInterfaceAttributeInput { - s.NetworkInterfaceId = &v +// SetAdditionalRoutesAvailable sets the AdditionalRoutesAvailable field's value. +func (s *SearchTransitGatewayRoutesOutput) SetAdditionalRoutesAvailable(v bool) *SearchTransitGatewayRoutesOutput { + s.AdditionalRoutesAvailable = &v return s } -// SetSourceDestCheck sets the SourceDestCheck field's value. -func (s *ResetNetworkInterfaceAttributeInput) SetSourceDestCheck(v string) *ResetNetworkInterfaceAttributeInput { - s.SourceDestCheck = &v +// SetRoutes sets the Routes field's value. +func (s *SearchTransitGatewayRoutesOutput) SetRoutes(v []*TransitGatewayRoute) *SearchTransitGatewayRoutesOutput { + s.Routes = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttributeOutput -type ResetNetworkInterfaceAttributeOutput struct { +// Describes a security group +type SecurityGroup struct { _ struct{} `type:"structure"` -} -// String returns the string representation -func (s ResetNetworkInterfaceAttributeOutput) String() string { - return awsutil.Prettify(s) -} + // A description of the security group. + Description *string `locationName:"groupDescription" type:"string"` -// GoString returns the string representation -func (s ResetNetworkInterfaceAttributeOutput) GoString() string { - return s.String() -} + // The ID of the security group. + GroupId *string `locationName:"groupId" type:"string"` -// Contains the parameters for ResetSnapshotAttribute. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttributeRequest -type ResetSnapshotAttributeInput struct { - _ struct{} `type:"structure"` + // The name of the security group. + GroupName *string `locationName:"groupName" type:"string"` - // The attribute to reset. Currently, only the attribute for permission to create - // volumes can be reset. - // - // Attribute is a required field - Attribute *string `type:"string" required:"true" enum:"SnapshotAttributeName"` + // The inbound rules associated with the security group. + IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // [VPC only] The outbound rules associated with the security group. + IpPermissionsEgress []*IpPermission `locationName:"ipPermissionsEgress" locationNameList:"item" type:"list"` - // The ID of the snapshot. - // - // SnapshotId is a required field - SnapshotId *string `type:"string" required:"true"` + // The AWS account ID of the owner of the security group. + OwnerId *string `locationName:"ownerId" type:"string"` + + // Any tags assigned to the security group. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // [VPC only] The ID of the VPC for the security group. + VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s ResetSnapshotAttributeInput) String() string { +func (s SecurityGroup) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ResetSnapshotAttributeInput) GoString() string { +func (s SecurityGroup) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ResetSnapshotAttributeInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ResetSnapshotAttributeInput"} - if s.Attribute == nil { - invalidParams.Add(request.NewErrParamRequired("Attribute")) - } - if s.SnapshotId == nil { - invalidParams.Add(request.NewErrParamRequired("SnapshotId")) - } +// SetDescription sets the Description field's value. +func (s *SecurityGroup) SetDescription(v string) *SecurityGroup { + s.Description = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetGroupId sets the GroupId field's value. +func (s *SecurityGroup) SetGroupId(v string) *SecurityGroup { + s.GroupId = &v + return s } -// SetAttribute sets the Attribute field's value. -func (s *ResetSnapshotAttributeInput) SetAttribute(v string) *ResetSnapshotAttributeInput { - s.Attribute = &v +// SetGroupName sets the GroupName field's value. +func (s *SecurityGroup) SetGroupName(v string) *SecurityGroup { + s.GroupName = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *ResetSnapshotAttributeInput) SetDryRun(v bool) *ResetSnapshotAttributeInput { - s.DryRun = &v +// SetIpPermissions sets the IpPermissions field's value. +func (s *SecurityGroup) SetIpPermissions(v []*IpPermission) *SecurityGroup { + s.IpPermissions = v return s } -// SetSnapshotId sets the SnapshotId field's value. -func (s *ResetSnapshotAttributeInput) SetSnapshotId(v string) *ResetSnapshotAttributeInput { - s.SnapshotId = &v +// SetIpPermissionsEgress sets the IpPermissionsEgress field's value. +func (s *SecurityGroup) SetIpPermissionsEgress(v []*IpPermission) *SecurityGroup { + s.IpPermissionsEgress = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttributeOutput -type ResetSnapshotAttributeOutput struct { - _ struct{} `type:"structure"` +// SetOwnerId sets the OwnerId field's value. +func (s *SecurityGroup) SetOwnerId(v string) *SecurityGroup { + s.OwnerId = &v + return s } -// String returns the string representation -func (s ResetSnapshotAttributeOutput) String() string { - return awsutil.Prettify(s) +// SetTags sets the Tags field's value. +func (s *SecurityGroup) SetTags(v []*Tag) *SecurityGroup { + s.Tags = v + return s } -// GoString returns the string representation -func (s ResetSnapshotAttributeOutput) GoString() string { - return s.String() +// SetVpcId sets the VpcId field's value. +func (s *SecurityGroup) SetVpcId(v string) *SecurityGroup { + s.VpcId = &v + return s } -// Contains the parameters for RestoreAddressToClassic. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassicRequest -type RestoreAddressToClassicInput struct { +// Describes a security group. +type SecurityGroupIdentifier struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The ID of the security group. + GroupId *string `locationName:"groupId" type:"string"` - // The Elastic IP address. - // - // PublicIp is a required field - PublicIp *string `locationName:"publicIp" type:"string" required:"true"` + // The name of the security group. + GroupName *string `locationName:"groupName" type:"string"` } // String returns the string representation -func (s RestoreAddressToClassicInput) String() string { +func (s SecurityGroupIdentifier) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RestoreAddressToClassicInput) GoString() string { +func (s SecurityGroupIdentifier) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *RestoreAddressToClassicInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RestoreAddressToClassicInput"} - if s.PublicIp == nil { - invalidParams.Add(request.NewErrParamRequired("PublicIp")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetDryRun sets the DryRun field's value. -func (s *RestoreAddressToClassicInput) SetDryRun(v bool) *RestoreAddressToClassicInput { - s.DryRun = &v +// SetGroupId sets the GroupId field's value. +func (s *SecurityGroupIdentifier) SetGroupId(v string) *SecurityGroupIdentifier { + s.GroupId = &v return s } -// SetPublicIp sets the PublicIp field's value. -func (s *RestoreAddressToClassicInput) SetPublicIp(v string) *RestoreAddressToClassicInput { - s.PublicIp = &v +// SetGroupName sets the GroupName field's value. +func (s *SecurityGroupIdentifier) SetGroupName(v string) *SecurityGroupIdentifier { + s.GroupName = &v return s } -// Contains the output of RestoreAddressToClassic. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassicResult -type RestoreAddressToClassicOutput struct { +// Describes a VPC with a security group that references your security group. +type SecurityGroupReference struct { _ struct{} `type:"structure"` - // The Elastic IP address. - PublicIp *string `locationName:"publicIp" type:"string"` + // The ID of your security group. + GroupId *string `locationName:"groupId" type:"string"` - // The move status for the IP address. - Status *string `locationName:"status" type:"string" enum:"Status"` + // The ID of the VPC with the referencing security group. + ReferencingVpcId *string `locationName:"referencingVpcId" type:"string"` + + // The ID of the VPC peering connection. + VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` } // String returns the string representation -func (s RestoreAddressToClassicOutput) String() string { +func (s SecurityGroupReference) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RestoreAddressToClassicOutput) GoString() string { +func (s SecurityGroupReference) GoString() string { return s.String() } -// SetPublicIp sets the PublicIp field's value. -func (s *RestoreAddressToClassicOutput) SetPublicIp(v string) *RestoreAddressToClassicOutput { - s.PublicIp = &v +// SetGroupId sets the GroupId field's value. +func (s *SecurityGroupReference) SetGroupId(v string) *SecurityGroupReference { + s.GroupId = &v return s } -// SetStatus sets the Status field's value. -func (s *RestoreAddressToClassicOutput) SetStatus(v string) *RestoreAddressToClassicOutput { - s.Status = &v +// SetReferencingVpcId sets the ReferencingVpcId field's value. +func (s *SecurityGroupReference) SetReferencingVpcId(v string) *SecurityGroupReference { + s.ReferencingVpcId = &v return s } -// Contains the parameters for RevokeSecurityGroupEgress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgressRequest -type RevokeSecurityGroupEgressInput struct { - _ struct{} `type:"structure"` +// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. +func (s *SecurityGroupReference) SetVpcPeeringConnectionId(v string) *SecurityGroupReference { + s.VpcPeeringConnectionId = &v + return s +} - // The CIDR IP address range. We recommend that you specify the CIDR range in - // a set of IP permissions instead. - CidrIp *string `locationName:"cidrIp" type:"string"` +type SendDiagnosticInterruptInput struct { + _ struct{} `type:"structure"` // Checks whether you have the required permissions for the action, without // actually making the request, and provides an error response. If you have // the required permissions, the error response is DryRunOperation. Otherwise, // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` - - // The start of port range for the TCP and UDP protocols, or an ICMP type number. - // We recommend that you specify the port range in a set of IP permissions instead. - FromPort *int64 `locationName:"fromPort" type:"integer"` + DryRun *bool `type:"boolean"` - // The ID of the security group. + // The ID of the instance. // - // GroupId is a required field - GroupId *string `locationName:"groupId" type:"string" required:"true"` - - // A set of IP permissions. You can't specify a destination security group and - // a CIDR IP address range. - IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` - - // The IP protocol name or number. We recommend that you specify the protocol - // in a set of IP permissions instead. - IpProtocol *string `locationName:"ipProtocol" type:"string"` - - // The name of a destination security group. To revoke outbound access to a - // destination security group, we recommend that you use a set of IP permissions - // instead. - SourceSecurityGroupName *string `locationName:"sourceSecurityGroupName" type:"string"` - - // The AWS account number for a destination security group. To revoke outbound - // access to a destination security group, we recommend that you use a set of - // IP permissions instead. - SourceSecurityGroupOwnerId *string `locationName:"sourceSecurityGroupOwnerId" type:"string"` - - // The end of port range for the TCP and UDP protocols, or an ICMP type number. - // We recommend that you specify the port range in a set of IP permissions instead. - ToPort *int64 `locationName:"toPort" type:"integer"` + // InstanceId is a required field + InstanceId *string `type:"string" required:"true"` } // String returns the string representation -func (s RevokeSecurityGroupEgressInput) String() string { +func (s SendDiagnosticInterruptInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RevokeSecurityGroupEgressInput) GoString() string { +func (s SendDiagnosticInterruptInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *RevokeSecurityGroupEgressInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RevokeSecurityGroupEgressInput"} - if s.GroupId == nil { - invalidParams.Add(request.NewErrParamRequired("GroupId")) +func (s *SendDiagnosticInterruptInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SendDiagnosticInterruptInput"} + if s.InstanceId == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceId")) } if invalidParams.Len() > 0 { @@ -46166,2881 +90588,3335 @@ func (s *RevokeSecurityGroupEgressInput) Validate() error { return nil } -// SetCidrIp sets the CidrIp field's value. -func (s *RevokeSecurityGroupEgressInput) SetCidrIp(v string) *RevokeSecurityGroupEgressInput { - s.CidrIp = &v - return s -} - // SetDryRun sets the DryRun field's value. -func (s *RevokeSecurityGroupEgressInput) SetDryRun(v bool) *RevokeSecurityGroupEgressInput { +func (s *SendDiagnosticInterruptInput) SetDryRun(v bool) *SendDiagnosticInterruptInput { s.DryRun = &v return s } -// SetFromPort sets the FromPort field's value. -func (s *RevokeSecurityGroupEgressInput) SetFromPort(v int64) *RevokeSecurityGroupEgressInput { - s.FromPort = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *RevokeSecurityGroupEgressInput) SetGroupId(v string) *RevokeSecurityGroupEgressInput { - s.GroupId = &v - return s -} - -// SetIpPermissions sets the IpPermissions field's value. -func (s *RevokeSecurityGroupEgressInput) SetIpPermissions(v []*IpPermission) *RevokeSecurityGroupEgressInput { - s.IpPermissions = v - return s -} - -// SetIpProtocol sets the IpProtocol field's value. -func (s *RevokeSecurityGroupEgressInput) SetIpProtocol(v string) *RevokeSecurityGroupEgressInput { - s.IpProtocol = &v - return s -} - -// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. -func (s *RevokeSecurityGroupEgressInput) SetSourceSecurityGroupName(v string) *RevokeSecurityGroupEgressInput { - s.SourceSecurityGroupName = &v - return s -} - -// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. -func (s *RevokeSecurityGroupEgressInput) SetSourceSecurityGroupOwnerId(v string) *RevokeSecurityGroupEgressInput { - s.SourceSecurityGroupOwnerId = &v - return s -} - -// SetToPort sets the ToPort field's value. -func (s *RevokeSecurityGroupEgressInput) SetToPort(v int64) *RevokeSecurityGroupEgressInput { - s.ToPort = &v +// SetInstanceId sets the InstanceId field's value. +func (s *SendDiagnosticInterruptInput) SetInstanceId(v string) *SendDiagnosticInterruptInput { + s.InstanceId = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgressOutput -type RevokeSecurityGroupEgressOutput struct { +type SendDiagnosticInterruptOutput struct { _ struct{} `type:"structure"` } // String returns the string representation -func (s RevokeSecurityGroupEgressOutput) String() string { +func (s SendDiagnosticInterruptOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RevokeSecurityGroupEgressOutput) GoString() string { +func (s SendDiagnosticInterruptOutput) GoString() string { return s.String() } -// Contains the parameters for RevokeSecurityGroupIngress. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngressRequest -type RevokeSecurityGroupIngressInput struct { +// Describes a service configuration for a VPC endpoint service. +type ServiceConfiguration struct { _ struct{} `type:"structure"` - // The CIDR IP address range. You can't specify this parameter when specifying - // a source security group. - CidrIp *string `type:"string"` + // Indicates whether requests from other AWS accounts to create an endpoint + // to the service must first be accepted. + AcceptanceRequired *bool `locationName:"acceptanceRequired" type:"boolean"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // In the Availability Zones in which the service is available. + AvailabilityZones []*string `locationName:"availabilityZoneSet" locationNameList:"item" type:"list"` - // The start of port range for the TCP and UDP protocols, or an ICMP type number. - // For the ICMP type number, use -1 to specify all ICMP types. - FromPort *int64 `type:"integer"` + // The DNS names for the service. + BaseEndpointDnsNames []*string `locationName:"baseEndpointDnsNameSet" locationNameList:"item" type:"list"` - // The ID of the security group. Required for a security group in a nondefault - // VPC. - GroupId *string `type:"string"` + // Indicates whether the service manages it's VPC endpoints. Management of the + // service VPC endpoints using the VPC endpoint API is restricted. + ManagesVpcEndpoints *bool `locationName:"managesVpcEndpoints" type:"boolean"` - // [EC2-Classic, default VPC] The name of the security group. - GroupName *string `type:"string"` + // The Amazon Resource Names (ARNs) of the Network Load Balancers for the service. + NetworkLoadBalancerArns []*string `locationName:"networkLoadBalancerArnSet" locationNameList:"item" type:"list"` - // A set of IP permissions. You can't specify a source security group and a - // CIDR IP address range. - IpPermissions []*IpPermission `locationNameList:"item" type:"list"` + // The private DNS name for the service. + PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - // The IP protocol name (tcp, udp, icmp) or number (see Protocol Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)). - // Use -1 to specify all. - IpProtocol *string `type:"string"` + // The ID of the service. + ServiceId *string `locationName:"serviceId" type:"string"` - // [EC2-Classic, default VPC] The name of the source security group. You can't - // specify this parameter in combination with the following parameters: the - // CIDR IP address range, the start of the port range, the IP protocol, and - // the end of the port range. For EC2-VPC, the source security group must be - // in the same VPC. To revoke a specific rule for an IP protocol and port range, - // use a set of IP permissions instead. - SourceSecurityGroupName *string `type:"string"` + // The name of the service. + ServiceName *string `locationName:"serviceName" type:"string"` - // [EC2-Classic] The AWS account ID of the source security group, if the source - // security group is in a different account. You can't specify this parameter - // in combination with the following parameters: the CIDR IP address range, - // the IP protocol, the start of the port range, and the end of the port range. - // To revoke a specific rule for an IP protocol and port range, use a set of - // IP permissions instead. - SourceSecurityGroupOwnerId *string `type:"string"` + // The service state. + ServiceState *string `locationName:"serviceState" type:"string" enum:"ServiceState"` - // The end of port range for the TCP and UDP protocols, or an ICMP code number. - // For the ICMP code number, use -1 to specify all ICMP codes for the ICMP type. - ToPort *int64 `type:"integer"` + // The type of service. + ServiceType []*ServiceTypeDetail `locationName:"serviceType" locationNameList:"item" type:"list"` + + // Any tags assigned to the service. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s RevokeSecurityGroupIngressInput) String() string { +func (s ServiceConfiguration) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RevokeSecurityGroupIngressInput) GoString() string { +func (s ServiceConfiguration) GoString() string { return s.String() } -// SetCidrIp sets the CidrIp field's value. -func (s *RevokeSecurityGroupIngressInput) SetCidrIp(v string) *RevokeSecurityGroupIngressInput { - s.CidrIp = &v +// SetAcceptanceRequired sets the AcceptanceRequired field's value. +func (s *ServiceConfiguration) SetAcceptanceRequired(v bool) *ServiceConfiguration { + s.AcceptanceRequired = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *RevokeSecurityGroupIngressInput) SetDryRun(v bool) *RevokeSecurityGroupIngressInput { - s.DryRun = &v +// SetAvailabilityZones sets the AvailabilityZones field's value. +func (s *ServiceConfiguration) SetAvailabilityZones(v []*string) *ServiceConfiguration { + s.AvailabilityZones = v return s } -// SetFromPort sets the FromPort field's value. -func (s *RevokeSecurityGroupIngressInput) SetFromPort(v int64) *RevokeSecurityGroupIngressInput { - s.FromPort = &v +// SetBaseEndpointDnsNames sets the BaseEndpointDnsNames field's value. +func (s *ServiceConfiguration) SetBaseEndpointDnsNames(v []*string) *ServiceConfiguration { + s.BaseEndpointDnsNames = v return s } -// SetGroupId sets the GroupId field's value. -func (s *RevokeSecurityGroupIngressInput) SetGroupId(v string) *RevokeSecurityGroupIngressInput { - s.GroupId = &v +// SetManagesVpcEndpoints sets the ManagesVpcEndpoints field's value. +func (s *ServiceConfiguration) SetManagesVpcEndpoints(v bool) *ServiceConfiguration { + s.ManagesVpcEndpoints = &v return s } -// SetGroupName sets the GroupName field's value. -func (s *RevokeSecurityGroupIngressInput) SetGroupName(v string) *RevokeSecurityGroupIngressInput { - s.GroupName = &v +// SetNetworkLoadBalancerArns sets the NetworkLoadBalancerArns field's value. +func (s *ServiceConfiguration) SetNetworkLoadBalancerArns(v []*string) *ServiceConfiguration { + s.NetworkLoadBalancerArns = v return s } -// SetIpPermissions sets the IpPermissions field's value. -func (s *RevokeSecurityGroupIngressInput) SetIpPermissions(v []*IpPermission) *RevokeSecurityGroupIngressInput { - s.IpPermissions = v +// SetPrivateDnsName sets the PrivateDnsName field's value. +func (s *ServiceConfiguration) SetPrivateDnsName(v string) *ServiceConfiguration { + s.PrivateDnsName = &v return s } -// SetIpProtocol sets the IpProtocol field's value. -func (s *RevokeSecurityGroupIngressInput) SetIpProtocol(v string) *RevokeSecurityGroupIngressInput { - s.IpProtocol = &v +// SetServiceId sets the ServiceId field's value. +func (s *ServiceConfiguration) SetServiceId(v string) *ServiceConfiguration { + s.ServiceId = &v return s } -// SetSourceSecurityGroupName sets the SourceSecurityGroupName field's value. -func (s *RevokeSecurityGroupIngressInput) SetSourceSecurityGroupName(v string) *RevokeSecurityGroupIngressInput { - s.SourceSecurityGroupName = &v +// SetServiceName sets the ServiceName field's value. +func (s *ServiceConfiguration) SetServiceName(v string) *ServiceConfiguration { + s.ServiceName = &v return s } -// SetSourceSecurityGroupOwnerId sets the SourceSecurityGroupOwnerId field's value. -func (s *RevokeSecurityGroupIngressInput) SetSourceSecurityGroupOwnerId(v string) *RevokeSecurityGroupIngressInput { - s.SourceSecurityGroupOwnerId = &v +// SetServiceState sets the ServiceState field's value. +func (s *ServiceConfiguration) SetServiceState(v string) *ServiceConfiguration { + s.ServiceState = &v return s } -// SetToPort sets the ToPort field's value. -func (s *RevokeSecurityGroupIngressInput) SetToPort(v int64) *RevokeSecurityGroupIngressInput { - s.ToPort = &v +// SetServiceType sets the ServiceType field's value. +func (s *ServiceConfiguration) SetServiceType(v []*ServiceTypeDetail) *ServiceConfiguration { + s.ServiceType = v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngressOutput -type RevokeSecurityGroupIngressOutput struct { - _ struct{} `type:"structure"` -} - -// String returns the string representation -func (s RevokeSecurityGroupIngressOutput) String() string { - return awsutil.Prettify(s) -} - -// GoString returns the string representation -func (s RevokeSecurityGroupIngressOutput) GoString() string { - return s.String() +// SetTags sets the Tags field's value. +func (s *ServiceConfiguration) SetTags(v []*Tag) *ServiceConfiguration { + s.Tags = v + return s } -// Describes a route in a route table. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Route -type Route struct { +// Describes a VPC endpoint service. +type ServiceDetail struct { _ struct{} `type:"structure"` - // The IPv4 CIDR block used for the destination match. - DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - - // The IPv6 CIDR block used for the destination match. - DestinationIpv6CidrBlock *string `locationName:"destinationIpv6CidrBlock" type:"string"` + // Indicates whether VPC endpoint connection requests to the service must be + // accepted by the service owner. + AcceptanceRequired *bool `locationName:"acceptanceRequired" type:"boolean"` - // The prefix of the AWS service. - DestinationPrefixListId *string `locationName:"destinationPrefixListId" type:"string"` + // The Availability Zones in which the service is available. + AvailabilityZones []*string `locationName:"availabilityZoneSet" locationNameList:"item" type:"list"` - // The ID of the egress-only Internet gateway. - EgressOnlyInternetGatewayId *string `locationName:"egressOnlyInternetGatewayId" type:"string"` + // The DNS names for the service. + BaseEndpointDnsNames []*string `locationName:"baseEndpointDnsNameSet" locationNameList:"item" type:"list"` - // The ID of a gateway attached to your VPC. - GatewayId *string `locationName:"gatewayId" type:"string"` + // Indicates whether the service manages it's VPC endpoints. Management of the + // service VPC endpoints using the VPC endpoint API is restricted. + ManagesVpcEndpoints *bool `locationName:"managesVpcEndpoints" type:"boolean"` - // The ID of a NAT instance in your VPC. - InstanceId *string `locationName:"instanceId" type:"string"` + // The AWS account ID of the service owner. + Owner *string `locationName:"owner" type:"string"` - // The AWS account ID of the owner of the instance. - InstanceOwnerId *string `locationName:"instanceOwnerId" type:"string"` + // The private DNS name for the service. + PrivateDnsName *string `locationName:"privateDnsName" type:"string"` - // The ID of a NAT gateway. - NatGatewayId *string `locationName:"natGatewayId" type:"string"` + // The ID of the endpoint service. + ServiceId *string `locationName:"serviceId" type:"string"` - // The ID of the network interface. - NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` + // The Amazon Resource Name (ARN) of the service. + ServiceName *string `locationName:"serviceName" type:"string"` - // Describes how the route was created. - // - // * CreateRouteTable - The route was automatically created when the route - // table was created. - // - // * CreateRoute - The route was manually added to the route table. - // - // * EnableVgwRoutePropagation - The route was propagated by route propagation. - Origin *string `locationName:"origin" type:"string" enum:"RouteOrigin"` + // The type of service. + ServiceType []*ServiceTypeDetail `locationName:"serviceType" locationNameList:"item" type:"list"` - // The state of the route. The blackhole state indicates that the route's target - // isn't available (for example, the specified gateway isn't attached to the - // VPC, or the specified NAT instance has been terminated). - State *string `locationName:"state" type:"string" enum:"RouteState"` + // Any tags assigned to the service. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - // The ID of the VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` + // Indicates whether the service supports endpoint policies. + VpcEndpointPolicySupported *bool `locationName:"vpcEndpointPolicySupported" type:"boolean"` } // String returns the string representation -func (s Route) String() string { +func (s ServiceDetail) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Route) GoString() string { +func (s ServiceDetail) GoString() string { return s.String() } -// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. -func (s *Route) SetDestinationCidrBlock(v string) *Route { - s.DestinationCidrBlock = &v - return s -} - -// SetDestinationIpv6CidrBlock sets the DestinationIpv6CidrBlock field's value. -func (s *Route) SetDestinationIpv6CidrBlock(v string) *Route { - s.DestinationIpv6CidrBlock = &v +// SetAcceptanceRequired sets the AcceptanceRequired field's value. +func (s *ServiceDetail) SetAcceptanceRequired(v bool) *ServiceDetail { + s.AcceptanceRequired = &v return s } -// SetDestinationPrefixListId sets the DestinationPrefixListId field's value. -func (s *Route) SetDestinationPrefixListId(v string) *Route { - s.DestinationPrefixListId = &v +// SetAvailabilityZones sets the AvailabilityZones field's value. +func (s *ServiceDetail) SetAvailabilityZones(v []*string) *ServiceDetail { + s.AvailabilityZones = v return s } -// SetEgressOnlyInternetGatewayId sets the EgressOnlyInternetGatewayId field's value. -func (s *Route) SetEgressOnlyInternetGatewayId(v string) *Route { - s.EgressOnlyInternetGatewayId = &v +// SetBaseEndpointDnsNames sets the BaseEndpointDnsNames field's value. +func (s *ServiceDetail) SetBaseEndpointDnsNames(v []*string) *ServiceDetail { + s.BaseEndpointDnsNames = v return s } -// SetGatewayId sets the GatewayId field's value. -func (s *Route) SetGatewayId(v string) *Route { - s.GatewayId = &v +// SetManagesVpcEndpoints sets the ManagesVpcEndpoints field's value. +func (s *ServiceDetail) SetManagesVpcEndpoints(v bool) *ServiceDetail { + s.ManagesVpcEndpoints = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *Route) SetInstanceId(v string) *Route { - s.InstanceId = &v +// SetOwner sets the Owner field's value. +func (s *ServiceDetail) SetOwner(v string) *ServiceDetail { + s.Owner = &v return s } -// SetInstanceOwnerId sets the InstanceOwnerId field's value. -func (s *Route) SetInstanceOwnerId(v string) *Route { - s.InstanceOwnerId = &v +// SetPrivateDnsName sets the PrivateDnsName field's value. +func (s *ServiceDetail) SetPrivateDnsName(v string) *ServiceDetail { + s.PrivateDnsName = &v return s } -// SetNatGatewayId sets the NatGatewayId field's value. -func (s *Route) SetNatGatewayId(v string) *Route { - s.NatGatewayId = &v +// SetServiceId sets the ServiceId field's value. +func (s *ServiceDetail) SetServiceId(v string) *ServiceDetail { + s.ServiceId = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *Route) SetNetworkInterfaceId(v string) *Route { - s.NetworkInterfaceId = &v +// SetServiceName sets the ServiceName field's value. +func (s *ServiceDetail) SetServiceName(v string) *ServiceDetail { + s.ServiceName = &v return s } -// SetOrigin sets the Origin field's value. -func (s *Route) SetOrigin(v string) *Route { - s.Origin = &v +// SetServiceType sets the ServiceType field's value. +func (s *ServiceDetail) SetServiceType(v []*ServiceTypeDetail) *ServiceDetail { + s.ServiceType = v return s } -// SetState sets the State field's value. -func (s *Route) SetState(v string) *Route { - s.State = &v +// SetTags sets the Tags field's value. +func (s *ServiceDetail) SetTags(v []*Tag) *ServiceDetail { + s.Tags = v return s } -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *Route) SetVpcPeeringConnectionId(v string) *Route { - s.VpcPeeringConnectionId = &v +// SetVpcEndpointPolicySupported sets the VpcEndpointPolicySupported field's value. +func (s *ServiceDetail) SetVpcEndpointPolicySupported(v bool) *ServiceDetail { + s.VpcEndpointPolicySupported = &v return s } -// Describes a route table. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteTable -type RouteTable struct { +// Describes the type of service for a VPC endpoint. +type ServiceTypeDetail struct { _ struct{} `type:"structure"` - // The associations between the route table and one or more subnets. - Associations []*RouteTableAssociation `locationName:"associationSet" locationNameList:"item" type:"list"` + // The type of service. + ServiceType *string `locationName:"serviceType" type:"string" enum:"ServiceType"` +} - // Any virtual private gateway (VGW) propagating routes. - PropagatingVgws []*PropagatingVgw `locationName:"propagatingVgwSet" locationNameList:"item" type:"list"` +// String returns the string representation +func (s ServiceTypeDetail) String() string { + return awsutil.Prettify(s) +} - // The ID of the route table. - RouteTableId *string `locationName:"routeTableId" type:"string"` +// GoString returns the string representation +func (s ServiceTypeDetail) GoString() string { + return s.String() +} - // The routes in the route table. - Routes []*Route `locationName:"routeSet" locationNameList:"item" type:"list"` +// SetServiceType sets the ServiceType field's value. +func (s *ServiceTypeDetail) SetServiceType(v string) *ServiceTypeDetail { + s.ServiceType = &v + return s +} - // Any tags assigned to the route table. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` +// Describes the time period for a Scheduled Instance to start its first schedule. +// The time period must span less than one day. +type SlotDateTimeRangeRequest struct { + _ struct{} `type:"structure"` - // The ID of the VPC. - VpcId *string `locationName:"vpcId" type:"string"` + // The earliest date and time, in UTC, for the Scheduled Instance to start. + // + // EarliestTime is a required field + EarliestTime *time.Time `type:"timestamp" required:"true"` + + // The latest date and time, in UTC, for the Scheduled Instance to start. This + // value must be later than or equal to the earliest date and at most three + // months in the future. + // + // LatestTime is a required field + LatestTime *time.Time `type:"timestamp" required:"true"` } // String returns the string representation -func (s RouteTable) String() string { +func (s SlotDateTimeRangeRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RouteTable) GoString() string { +func (s SlotDateTimeRangeRequest) GoString() string { return s.String() } -// SetAssociations sets the Associations field's value. -func (s *RouteTable) SetAssociations(v []*RouteTableAssociation) *RouteTable { - s.Associations = v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *SlotDateTimeRangeRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SlotDateTimeRangeRequest"} + if s.EarliestTime == nil { + invalidParams.Add(request.NewErrParamRequired("EarliestTime")) + } + if s.LatestTime == nil { + invalidParams.Add(request.NewErrParamRequired("LatestTime")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetPropagatingVgws sets the PropagatingVgws field's value. -func (s *RouteTable) SetPropagatingVgws(v []*PropagatingVgw) *RouteTable { - s.PropagatingVgws = v +// SetEarliestTime sets the EarliestTime field's value. +func (s *SlotDateTimeRangeRequest) SetEarliestTime(v time.Time) *SlotDateTimeRangeRequest { + s.EarliestTime = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *RouteTable) SetRouteTableId(v string) *RouteTable { - s.RouteTableId = &v +// SetLatestTime sets the LatestTime field's value. +func (s *SlotDateTimeRangeRequest) SetLatestTime(v time.Time) *SlotDateTimeRangeRequest { + s.LatestTime = &v return s } -// SetRoutes sets the Routes field's value. -func (s *RouteTable) SetRoutes(v []*Route) *RouteTable { - s.Routes = v - return s +// Describes the time period for a Scheduled Instance to start its first schedule. +type SlotStartTimeRangeRequest struct { + _ struct{} `type:"structure"` + + // The earliest date and time, in UTC, for the Scheduled Instance to start. + EarliestTime *time.Time `type:"timestamp"` + + // The latest date and time, in UTC, for the Scheduled Instance to start. + LatestTime *time.Time `type:"timestamp"` } -// SetTags sets the Tags field's value. -func (s *RouteTable) SetTags(v []*Tag) *RouteTable { - s.Tags = v +// String returns the string representation +func (s SlotStartTimeRangeRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SlotStartTimeRangeRequest) GoString() string { + return s.String() +} + +// SetEarliestTime sets the EarliestTime field's value. +func (s *SlotStartTimeRangeRequest) SetEarliestTime(v time.Time) *SlotStartTimeRangeRequest { + s.EarliestTime = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *RouteTable) SetVpcId(v string) *RouteTable { - s.VpcId = &v +// SetLatestTime sets the LatestTime field's value. +func (s *SlotStartTimeRangeRequest) SetLatestTime(v time.Time) *SlotStartTimeRangeRequest { + s.LatestTime = &v return s } -// Describes an association between a route table and a subnet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteTableAssociation -type RouteTableAssociation struct { +// Describes a snapshot. +type Snapshot struct { _ struct{} `type:"structure"` - // Indicates whether this is the main route table. - Main *bool `locationName:"main" type:"boolean"` + // The data encryption key identifier for the snapshot. This value is a unique + // identifier that corresponds to the data encryption key that was used to encrypt + // the original volume or snapshot copy. Because data encryption keys are inherited + // by volumes created from snapshots, and vice versa, if snapshots share the + // same data encryption key identifier, then they belong to the same volume/snapshot + // lineage. This parameter is only returned by DescribeSnapshots. + DataEncryptionKeyId *string `locationName:"dataEncryptionKeyId" type:"string"` + + // The description for the snapshot. + Description *string `locationName:"description" type:"string"` + + // Indicates whether the snapshot is encrypted. + Encrypted *bool `locationName:"encrypted" type:"boolean"` + + // The Amazon Resource Name (ARN) of the AWS Key Management Service (AWS KMS) + // customer master key (CMK) that was used to protect the volume encryption + // key for the parent volume. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + + // Value from an Amazon-maintained list (amazon | self | all | aws-marketplace + // | microsoft) of snapshot owners. Not to be confused with the user-configured + // AWS account alias, which is set from the IAM console. + OwnerAlias *string `locationName:"ownerAlias" type:"string"` + + // The AWS account ID of the EBS snapshot owner. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The progress of the snapshot, as a percentage. + Progress *string `locationName:"progress" type:"string"` + + // The ID of the snapshot. Each snapshot receives a unique identifier when it + // is created. + SnapshotId *string `locationName:"snapshotId" type:"string"` + + // The time stamp when the snapshot was initiated. + StartTime *time.Time `locationName:"startTime" type:"timestamp"` + + // The snapshot state. + State *string `locationName:"status" type:"string" enum:"SnapshotState"` + + // Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy + // operation fails (for example, if the proper AWS Key Management Service (AWS + // KMS) permissions are not obtained) this field displays error state details + // to help you diagnose why the error occurred. This parameter is only returned + // by DescribeSnapshots. + StateMessage *string `locationName:"statusMessage" type:"string"` - // The ID of the association between a route table and a subnet. - RouteTableAssociationId *string `locationName:"routeTableAssociationId" type:"string"` + // Any tags assigned to the snapshot. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - // The ID of the route table. - RouteTableId *string `locationName:"routeTableId" type:"string"` + // The ID of the volume that was used to create the snapshot. Snapshots created + // by the CopySnapshot action have an arbitrary volume ID that should not be + // used for any purpose. + VolumeId *string `locationName:"volumeId" type:"string"` - // The ID of the subnet. A subnet ID is not returned for an implicit association. - SubnetId *string `locationName:"subnetId" type:"string"` + // The size of the volume, in GiB. + VolumeSize *int64 `locationName:"volumeSize" type:"integer"` } // String returns the string representation -func (s RouteTableAssociation) String() string { +func (s Snapshot) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RouteTableAssociation) GoString() string { +func (s Snapshot) GoString() string { return s.String() } -// SetMain sets the Main field's value. -func (s *RouteTableAssociation) SetMain(v bool) *RouteTableAssociation { - s.Main = &v +// SetDataEncryptionKeyId sets the DataEncryptionKeyId field's value. +func (s *Snapshot) SetDataEncryptionKeyId(v string) *Snapshot { + s.DataEncryptionKeyId = &v return s } -// SetRouteTableAssociationId sets the RouteTableAssociationId field's value. -func (s *RouteTableAssociation) SetRouteTableAssociationId(v string) *RouteTableAssociation { - s.RouteTableAssociationId = &v +// SetDescription sets the Description field's value. +func (s *Snapshot) SetDescription(v string) *Snapshot { + s.Description = &v return s } -// SetRouteTableId sets the RouteTableId field's value. -func (s *RouteTableAssociation) SetRouteTableId(v string) *RouteTableAssociation { - s.RouteTableId = &v +// SetEncrypted sets the Encrypted field's value. +func (s *Snapshot) SetEncrypted(v bool) *Snapshot { + s.Encrypted = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *RouteTableAssociation) SetSubnetId(v string) *RouteTableAssociation { - s.SubnetId = &v +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *Snapshot) SetKmsKeyId(v string) *Snapshot { + s.KmsKeyId = &v return s } -// Contains the parameters for RunInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstancesRequest -type RunInstancesInput struct { - _ struct{} `type:"structure"` - - // Reserved. - AdditionalInfo *string `locationName:"additionalInfo" type:"string"` - - // The block device mapping. - // - // Supplying both a snapshot ID and an encryption value as arguments for block-device - // mapping results in an error. This is because only blank volumes can be encrypted - // on start, and these are not created from a snapshot. If a snapshot is the - // basis for the volume, it contains data by definition and its encryption status - // cannot be changed using this action. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` - - // Unique, case-sensitive identifier you provide to ensure the idempotency of - // the request. For more information, see Ensuring Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - // - // Constraints: Maximum 64 ASCII characters - ClientToken *string `locationName:"clientToken" type:"string"` - - // If you set this parameter to true, you can't terminate the instance using - // the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute - // to false after launch, use ModifyInstanceAttribute. Alternatively, if you - // set InstanceInitiatedShutdownBehavior to terminate, you can terminate the - // instance by running the shutdown command from the instance. - // - // Default: false - DisableApiTermination *bool `locationName:"disableApiTermination" type:"boolean"` - - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` +// SetOwnerAlias sets the OwnerAlias field's value. +func (s *Snapshot) SetOwnerAlias(v string) *Snapshot { + s.OwnerAlias = &v + return s +} - // Indicates whether the instance is optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS-optimized - // instance. - // - // Default: false - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` +// SetOwnerId sets the OwnerId field's value. +func (s *Snapshot) SetOwnerId(v string) *Snapshot { + s.OwnerId = &v + return s +} - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` +// SetProgress sets the Progress field's value. +func (s *Snapshot) SetProgress(v string) *Snapshot { + s.Progress = &v + return s +} - // The ID of the AMI, which you can get by calling DescribeImages. - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` +// SetSnapshotId sets the SnapshotId field's value. +func (s *Snapshot) SetSnapshotId(v string) *Snapshot { + s.SnapshotId = &v + return s +} - // Indicates whether an instance stops or terminates when you initiate shutdown - // from the instance (using the operating system command for system shutdown). - // - // Default: stop - InstanceInitiatedShutdownBehavior *string `locationName:"instanceInitiatedShutdownBehavior" type:"string" enum:"ShutdownBehavior"` +// SetStartTime sets the StartTime field's value. +func (s *Snapshot) SetStartTime(v time.Time) *Snapshot { + s.StartTime = &v + return s +} - // The instance type. For more information, see Instance Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Default: m1.small - InstanceType *string `type:"string" enum:"InstanceType"` +// SetState sets the State field's value. +func (s *Snapshot) SetState(v string) *Snapshot { + s.State = &v + return s +} - // [EC2-VPC] A number of IPv6 addresses to associate with the primary network - // interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. - // You cannot specify this option and the option to assign specific IPv6 addresses - // in the same request. You can specify this option if you've specified a minimum - // number of instances to launch. - Ipv6AddressCount *int64 `type:"integer"` +// SetStateMessage sets the StateMessage field's value. +func (s *Snapshot) SetStateMessage(v string) *Snapshot { + s.StateMessage = &v + return s +} - // [EC2-VPC] Specify one or more IPv6 addresses from the range of the subnet - // to associate with the primary network interface. You cannot specify this - // option and the option to assign a number of IPv6 addresses in the same request. - // You cannot specify this option if you've specified a minimum number of instances - // to launch. - Ipv6Addresses []*InstanceIpv6Address `locationName:"Ipv6Address" locationNameList:"item" type:"list"` +// SetTags sets the Tags field's value. +func (s *Snapshot) SetTags(v []*Tag) *Snapshot { + s.Tags = v + return s +} - // The ID of the kernel. - // - // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more - // information, see PV-GRUB (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) - // in the Amazon Elastic Compute Cloud User Guide. - KernelId *string `type:"string"` +// SetVolumeId sets the VolumeId field's value. +func (s *Snapshot) SetVolumeId(v string) *Snapshot { + s.VolumeId = &v + return s +} - // The name of the key pair. You can create a key pair using CreateKeyPair or - // ImportKeyPair. - // - // If you do not specify a key pair, you can't connect to the instance unless - // you choose an AMI that is configured to allow users another way to log in. - KeyName *string `type:"string"` +// SetVolumeSize sets the VolumeSize field's value. +func (s *Snapshot) SetVolumeSize(v int64) *Snapshot { + s.VolumeSize = &v + return s +} - // The maximum number of instances to launch. If you specify more instances - // than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches - // the largest possible number of instances above MinCount. - // - // Constraints: Between 1 and the maximum number you're allowed for the specified - // instance type. For more information about the default limits, and how to - // request an increase, see How many instances can I run in Amazon EC2 (http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2) - // in the Amazon EC2 FAQ. - // - // MaxCount is a required field - MaxCount *int64 `type:"integer" required:"true"` +// Describes the snapshot created from the imported disk. +type SnapshotDetail struct { + _ struct{} `type:"structure"` - // The minimum number of instances to launch. If you specify a minimum that - // is more instances than Amazon EC2 can launch in the target Availability Zone, - // Amazon EC2 launches no instances. - // - // Constraints: Between 1 and the maximum number you're allowed for the specified - // instance type. For more information about the default limits, and how to - // request an increase, see How many instances can I run in Amazon EC2 (http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2) - // in the Amazon EC2 General FAQ. - // - // MinCount is a required field - MinCount *int64 `type:"integer" required:"true"` + // A description for the snapshot. + Description *string `locationName:"description" type:"string"` - // The monitoring for the instance. - Monitoring *RunInstancesMonitoringEnabled `type:"structure"` + // The block device mapping for the snapshot. + DeviceName *string `locationName:"deviceName" type:"string"` - // One or more network interfaces. - NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterface" locationNameList:"item" type:"list"` + // The size of the disk in the snapshot, in GiB. + DiskImageSize *float64 `locationName:"diskImageSize" type:"double"` - // The placement for the instance. - Placement *Placement `type:"structure"` + // The format of the disk image from which the snapshot is created. + Format *string `locationName:"format" type:"string"` - // [EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 - // address range of the subnet. - // - // Only one private IP address can be designated as primary. You can't specify - // this option if you've specified the option to designate a private IP address - // as the primary IP address in a network interface specification. You cannot - // specify this option if you're launching more than one instance in the request. - PrivateIpAddress *string `locationName:"privateIpAddress" type:"string"` + // The percentage of progress for the task. + Progress *string `locationName:"progress" type:"string"` - // The ID of the RAM disk. - // - // We recommend that you use PV-GRUB instead of kernels and RAM disks. For more - // information, see PV-GRUB (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html) - // in the Amazon Elastic Compute Cloud User Guide. - RamdiskId *string `type:"string"` + // The snapshot ID of the disk being imported. + SnapshotId *string `locationName:"snapshotId" type:"string"` - // One or more security group IDs. You can create a security group using CreateSecurityGroup. - // - // Default: Amazon EC2 uses the default security group. - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` + // A brief status of the snapshot creation. + Status *string `locationName:"status" type:"string"` - // [EC2-Classic, default VPC] One or more security group names. For a nondefault - // VPC, you must use security group IDs instead. - // - // Default: Amazon EC2 uses the default security group. - SecurityGroups []*string `locationName:"SecurityGroup" locationNameList:"SecurityGroup" type:"list"` + // A detailed status message for the snapshot creation. + StatusMessage *string `locationName:"statusMessage" type:"string"` - // [EC2-VPC] The ID of the subnet to launch the instance into. - SubnetId *string `type:"string"` + // The URL used to access the disk image. + Url *string `locationName:"url" type:"string"` - // The user data to make available to the instance. For more information, see - // Running Commands on Your Linux Instance at Launch (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html) - // (Linux) and Adding User Data (http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data) - // (Windows). If you are using an AWS SDK or command line tool, Base64-encoding - // is performed for you, and you can load the text from a file. Otherwise, you - // must provide Base64-encoded text. - UserData *string `type:"string"` + // The S3 bucket for the disk image. + UserBucket *UserBucketDetails `locationName:"userBucket" type:"structure"` } // String returns the string representation -func (s RunInstancesInput) String() string { +func (s SnapshotDetail) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RunInstancesInput) GoString() string { +func (s SnapshotDetail) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *RunInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RunInstancesInput"} - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - if s.MaxCount == nil { - invalidParams.Add(request.NewErrParamRequired("MaxCount")) - } - if s.MinCount == nil { - invalidParams.Add(request.NewErrParamRequired("MinCount")) - } - if s.Monitoring != nil { - if err := s.Monitoring.Validate(); err != nil { - invalidParams.AddNested("Monitoring", err.(request.ErrInvalidParams)) - } - } - if s.NetworkInterfaces != nil { - for i, v := range s.NetworkInterfaces { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "NetworkInterfaces", i), err.(request.ErrInvalidParams)) - } - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetAdditionalInfo sets the AdditionalInfo field's value. -func (s *RunInstancesInput) SetAdditionalInfo(v string) *RunInstancesInput { - s.AdditionalInfo = &v +// SetDescription sets the Description field's value. +func (s *SnapshotDetail) SetDescription(v string) *SnapshotDetail { + s.Description = &v return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *RunInstancesInput) SetBlockDeviceMappings(v []*BlockDeviceMapping) *RunInstancesInput { - s.BlockDeviceMappings = v +// SetDeviceName sets the DeviceName field's value. +func (s *SnapshotDetail) SetDeviceName(v string) *SnapshotDetail { + s.DeviceName = &v return s } -// SetClientToken sets the ClientToken field's value. -func (s *RunInstancesInput) SetClientToken(v string) *RunInstancesInput { - s.ClientToken = &v +// SetDiskImageSize sets the DiskImageSize field's value. +func (s *SnapshotDetail) SetDiskImageSize(v float64) *SnapshotDetail { + s.DiskImageSize = &v return s } -// SetDisableApiTermination sets the DisableApiTermination field's value. -func (s *RunInstancesInput) SetDisableApiTermination(v bool) *RunInstancesInput { - s.DisableApiTermination = &v +// SetFormat sets the Format field's value. +func (s *SnapshotDetail) SetFormat(v string) *SnapshotDetail { + s.Format = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *RunInstancesInput) SetDryRun(v bool) *RunInstancesInput { - s.DryRun = &v +// SetProgress sets the Progress field's value. +func (s *SnapshotDetail) SetProgress(v string) *SnapshotDetail { + s.Progress = &v return s } -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *RunInstancesInput) SetEbsOptimized(v bool) *RunInstancesInput { - s.EbsOptimized = &v +// SetSnapshotId sets the SnapshotId field's value. +func (s *SnapshotDetail) SetSnapshotId(v string) *SnapshotDetail { + s.SnapshotId = &v return s } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *RunInstancesInput) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *RunInstancesInput { - s.IamInstanceProfile = v +// SetStatus sets the Status field's value. +func (s *SnapshotDetail) SetStatus(v string) *SnapshotDetail { + s.Status = &v return s } -// SetImageId sets the ImageId field's value. -func (s *RunInstancesInput) SetImageId(v string) *RunInstancesInput { - s.ImageId = &v +// SetStatusMessage sets the StatusMessage field's value. +func (s *SnapshotDetail) SetStatusMessage(v string) *SnapshotDetail { + s.StatusMessage = &v return s } -// SetInstanceInitiatedShutdownBehavior sets the InstanceInitiatedShutdownBehavior field's value. -func (s *RunInstancesInput) SetInstanceInitiatedShutdownBehavior(v string) *RunInstancesInput { - s.InstanceInitiatedShutdownBehavior = &v +// SetUrl sets the Url field's value. +func (s *SnapshotDetail) SetUrl(v string) *SnapshotDetail { + s.Url = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *RunInstancesInput) SetInstanceType(v string) *RunInstancesInput { - s.InstanceType = &v +// SetUserBucket sets the UserBucket field's value. +func (s *SnapshotDetail) SetUserBucket(v *UserBucketDetails) *SnapshotDetail { + s.UserBucket = v return s } -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *RunInstancesInput) SetIpv6AddressCount(v int64) *RunInstancesInput { - s.Ipv6AddressCount = &v - return s +// The disk container object for the import snapshot request. +type SnapshotDiskContainer struct { + _ struct{} `type:"structure"` + + // The description of the disk image being imported. + Description *string `type:"string"` + + // The format of the disk image being imported. + // + // Valid values: VHD | VMDK + Format *string `type:"string"` + + // The URL to the Amazon S3-based disk image being imported. It can either be + // a https URL (https://..) or an Amazon S3 URL (s3://..). + Url *string `type:"string"` + + // The S3 bucket for the disk image. + UserBucket *UserBucket `type:"structure"` } -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *RunInstancesInput) SetIpv6Addresses(v []*InstanceIpv6Address) *RunInstancesInput { - s.Ipv6Addresses = v - return s +// String returns the string representation +func (s SnapshotDiskContainer) String() string { + return awsutil.Prettify(s) } -// SetKernelId sets the KernelId field's value. -func (s *RunInstancesInput) SetKernelId(v string) *RunInstancesInput { - s.KernelId = &v - return s +// GoString returns the string representation +func (s SnapshotDiskContainer) GoString() string { + return s.String() } -// SetKeyName sets the KeyName field's value. -func (s *RunInstancesInput) SetKeyName(v string) *RunInstancesInput { - s.KeyName = &v +// SetDescription sets the Description field's value. +func (s *SnapshotDiskContainer) SetDescription(v string) *SnapshotDiskContainer { + s.Description = &v return s } -// SetMaxCount sets the MaxCount field's value. -func (s *RunInstancesInput) SetMaxCount(v int64) *RunInstancesInput { - s.MaxCount = &v +// SetFormat sets the Format field's value. +func (s *SnapshotDiskContainer) SetFormat(v string) *SnapshotDiskContainer { + s.Format = &v return s } -// SetMinCount sets the MinCount field's value. -func (s *RunInstancesInput) SetMinCount(v int64) *RunInstancesInput { - s.MinCount = &v +// SetUrl sets the Url field's value. +func (s *SnapshotDiskContainer) SetUrl(v string) *SnapshotDiskContainer { + s.Url = &v return s } -// SetMonitoring sets the Monitoring field's value. -func (s *RunInstancesInput) SetMonitoring(v *RunInstancesMonitoringEnabled) *RunInstancesInput { - s.Monitoring = v +// SetUserBucket sets the UserBucket field's value. +func (s *SnapshotDiskContainer) SetUserBucket(v *UserBucket) *SnapshotDiskContainer { + s.UserBucket = v return s } -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *RunInstancesInput) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *RunInstancesInput { - s.NetworkInterfaces = v - return s +// Information about a snapshot. +type SnapshotInfo struct { + _ struct{} `type:"structure"` + + // Description specified by the CreateSnapshotRequest that has been applied + // to all snapshots. + Description *string `locationName:"description" type:"string"` + + // Indicates whether the snapshot is encrypted. + Encrypted *bool `locationName:"encrypted" type:"boolean"` + + // Account id used when creating this snapshot. + OwnerId *string `locationName:"ownerId" type:"string"` + + // Progress this snapshot has made towards completing. + Progress *string `locationName:"progress" type:"string"` + + // Snapshot id that can be used to describe this snapshot. + SnapshotId *string `locationName:"snapshotId" type:"string"` + + // Time this snapshot was started. This is the same for all snapshots initiated + // by the same request. + StartTime *time.Time `locationName:"startTime" type:"timestamp"` + + // Current state of the snapshot. + State *string `locationName:"state" type:"string" enum:"SnapshotState"` + + // Tags associated with this snapshot. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // Source volume from which this snapshot was created. + VolumeId *string `locationName:"volumeId" type:"string"` + + // Size of the volume from which this snapshot was created. + VolumeSize *int64 `locationName:"volumeSize" type:"integer"` } -// SetPlacement sets the Placement field's value. -func (s *RunInstancesInput) SetPlacement(v *Placement) *RunInstancesInput { - s.Placement = v - return s +// String returns the string representation +func (s SnapshotInfo) String() string { + return awsutil.Prettify(s) } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *RunInstancesInput) SetPrivateIpAddress(v string) *RunInstancesInput { - s.PrivateIpAddress = &v - return s +// GoString returns the string representation +func (s SnapshotInfo) GoString() string { + return s.String() } -// SetRamdiskId sets the RamdiskId field's value. -func (s *RunInstancesInput) SetRamdiskId(v string) *RunInstancesInput { - s.RamdiskId = &v +// SetDescription sets the Description field's value. +func (s *SnapshotInfo) SetDescription(v string) *SnapshotInfo { + s.Description = &v return s } -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *RunInstancesInput) SetSecurityGroupIds(v []*string) *RunInstancesInput { - s.SecurityGroupIds = v +// SetEncrypted sets the Encrypted field's value. +func (s *SnapshotInfo) SetEncrypted(v bool) *SnapshotInfo { + s.Encrypted = &v return s } -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *RunInstancesInput) SetSecurityGroups(v []*string) *RunInstancesInput { - s.SecurityGroups = v +// SetOwnerId sets the OwnerId field's value. +func (s *SnapshotInfo) SetOwnerId(v string) *SnapshotInfo { + s.OwnerId = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *RunInstancesInput) SetSubnetId(v string) *RunInstancesInput { - s.SubnetId = &v +// SetProgress sets the Progress field's value. +func (s *SnapshotInfo) SetProgress(v string) *SnapshotInfo { + s.Progress = &v return s } -// SetUserData sets the UserData field's value. -func (s *RunInstancesInput) SetUserData(v string) *RunInstancesInput { - s.UserData = &v +// SetSnapshotId sets the SnapshotId field's value. +func (s *SnapshotInfo) SetSnapshotId(v string) *SnapshotInfo { + s.SnapshotId = &v return s } -// Describes the monitoring of an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstancesMonitoringEnabled -type RunInstancesMonitoringEnabled struct { - _ struct{} `type:"structure"` - - // Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring - // is enabled. - // - // Enabled is a required field - Enabled *bool `locationName:"enabled" type:"boolean" required:"true"` +// SetStartTime sets the StartTime field's value. +func (s *SnapshotInfo) SetStartTime(v time.Time) *SnapshotInfo { + s.StartTime = &v + return s } -// String returns the string representation -func (s RunInstancesMonitoringEnabled) String() string { - return awsutil.Prettify(s) +// SetState sets the State field's value. +func (s *SnapshotInfo) SetState(v string) *SnapshotInfo { + s.State = &v + return s } -// GoString returns the string representation -func (s RunInstancesMonitoringEnabled) GoString() string { - return s.String() +// SetTags sets the Tags field's value. +func (s *SnapshotInfo) SetTags(v []*Tag) *SnapshotInfo { + s.Tags = v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *RunInstancesMonitoringEnabled) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RunInstancesMonitoringEnabled"} - if s.Enabled == nil { - invalidParams.Add(request.NewErrParamRequired("Enabled")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetVolumeId sets the VolumeId field's value. +func (s *SnapshotInfo) SetVolumeId(v string) *SnapshotInfo { + s.VolumeId = &v + return s } -// SetEnabled sets the Enabled field's value. -func (s *RunInstancesMonitoringEnabled) SetEnabled(v bool) *RunInstancesMonitoringEnabled { - s.Enabled = &v +// SetVolumeSize sets the VolumeSize field's value. +func (s *SnapshotInfo) SetVolumeSize(v int64) *SnapshotInfo { + s.VolumeSize = &v return s } -// Contains the parameters for RunScheduledInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstancesRequest -type RunScheduledInstancesInput struct { +// Details about the import snapshot task. +type SnapshotTaskDetail struct { _ struct{} `type:"structure"` - // Unique, case-sensitive identifier that ensures the idempotency of the request. - // For more information, see Ensuring Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `type:"string" idempotencyToken:"true"` + // The description of the snapshot. + Description *string `locationName:"description" type:"string"` + + // The size of the disk in the snapshot, in GiB. + DiskImageSize *float64 `locationName:"diskImageSize" type:"double"` + + // Indicates whether the snapshot is encrypted. + Encrypted *bool `locationName:"encrypted" type:"boolean"` + + // The format of the disk image from which the snapshot is created. + Format *string `locationName:"format" type:"string"` + + // The identifier for the AWS Key Management Service (AWS KMS) customer master + // key (CMK) that was used to create the encrypted snapshot. + KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + + // The percentage of completion for the import snapshot task. + Progress *string `locationName:"progress" type:"string"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `type:"boolean"` + // The snapshot ID of the disk being imported. + SnapshotId *string `locationName:"snapshotId" type:"string"` - // The number of instances. - // - // Default: 1 - InstanceCount *int64 `type:"integer"` + // A brief status for the import snapshot task. + Status *string `locationName:"status" type:"string"` - // The launch specification. You must match the instance type, Availability - // Zone, network, and platform of the schedule that you purchased. - // - // LaunchSpecification is a required field - LaunchSpecification *ScheduledInstancesLaunchSpecification `type:"structure" required:"true"` + // A detailed status message for the import snapshot task. + StatusMessage *string `locationName:"statusMessage" type:"string"` - // The Scheduled Instance ID. - // - // ScheduledInstanceId is a required field - ScheduledInstanceId *string `type:"string" required:"true"` + // The URL of the disk image from which the snapshot is created. + Url *string `locationName:"url" type:"string"` + + // The S3 bucket for the disk image. + UserBucket *UserBucketDetails `locationName:"userBucket" type:"structure"` } // String returns the string representation -func (s RunScheduledInstancesInput) String() string { +func (s SnapshotTaskDetail) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s RunScheduledInstancesInput) GoString() string { +func (s SnapshotTaskDetail) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *RunScheduledInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "RunScheduledInstancesInput"} - if s.LaunchSpecification == nil { - invalidParams.Add(request.NewErrParamRequired("LaunchSpecification")) - } - if s.ScheduledInstanceId == nil { - invalidParams.Add(request.NewErrParamRequired("ScheduledInstanceId")) - } - if s.LaunchSpecification != nil { - if err := s.LaunchSpecification.Validate(); err != nil { - invalidParams.AddNested("LaunchSpecification", err.(request.ErrInvalidParams)) - } - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetDescription sets the Description field's value. +func (s *SnapshotTaskDetail) SetDescription(v string) *SnapshotTaskDetail { + s.Description = &v + return s } -// SetClientToken sets the ClientToken field's value. -func (s *RunScheduledInstancesInput) SetClientToken(v string) *RunScheduledInstancesInput { - s.ClientToken = &v +// SetDiskImageSize sets the DiskImageSize field's value. +func (s *SnapshotTaskDetail) SetDiskImageSize(v float64) *SnapshotTaskDetail { + s.DiskImageSize = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *RunScheduledInstancesInput) SetDryRun(v bool) *RunScheduledInstancesInput { - s.DryRun = &v +// SetEncrypted sets the Encrypted field's value. +func (s *SnapshotTaskDetail) SetEncrypted(v bool) *SnapshotTaskDetail { + s.Encrypted = &v return s } -// SetInstanceCount sets the InstanceCount field's value. -func (s *RunScheduledInstancesInput) SetInstanceCount(v int64) *RunScheduledInstancesInput { - s.InstanceCount = &v +// SetFormat sets the Format field's value. +func (s *SnapshotTaskDetail) SetFormat(v string) *SnapshotTaskDetail { + s.Format = &v return s } -// SetLaunchSpecification sets the LaunchSpecification field's value. -func (s *RunScheduledInstancesInput) SetLaunchSpecification(v *ScheduledInstancesLaunchSpecification) *RunScheduledInstancesInput { - s.LaunchSpecification = v +// SetKmsKeyId sets the KmsKeyId field's value. +func (s *SnapshotTaskDetail) SetKmsKeyId(v string) *SnapshotTaskDetail { + s.KmsKeyId = &v return s } -// SetScheduledInstanceId sets the ScheduledInstanceId field's value. -func (s *RunScheduledInstancesInput) SetScheduledInstanceId(v string) *RunScheduledInstancesInput { - s.ScheduledInstanceId = &v +// SetProgress sets the Progress field's value. +func (s *SnapshotTaskDetail) SetProgress(v string) *SnapshotTaskDetail { + s.Progress = &v return s } -// Contains the output of RunScheduledInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstancesResult -type RunScheduledInstancesOutput struct { - _ struct{} `type:"structure"` +// SetSnapshotId sets the SnapshotId field's value. +func (s *SnapshotTaskDetail) SetSnapshotId(v string) *SnapshotTaskDetail { + s.SnapshotId = &v + return s +} - // The IDs of the newly launched instances. - InstanceIdSet []*string `locationName:"instanceIdSet" locationNameList:"item" type:"list"` +// SetStatus sets the Status field's value. +func (s *SnapshotTaskDetail) SetStatus(v string) *SnapshotTaskDetail { + s.Status = &v + return s } -// String returns the string representation -func (s RunScheduledInstancesOutput) String() string { - return awsutil.Prettify(s) +// SetStatusMessage sets the StatusMessage field's value. +func (s *SnapshotTaskDetail) SetStatusMessage(v string) *SnapshotTaskDetail { + s.StatusMessage = &v + return s } -// GoString returns the string representation -func (s RunScheduledInstancesOutput) GoString() string { - return s.String() +// SetUrl sets the Url field's value. +func (s *SnapshotTaskDetail) SetUrl(v string) *SnapshotTaskDetail { + s.Url = &v + return s } -// SetInstanceIdSet sets the InstanceIdSet field's value. -func (s *RunScheduledInstancesOutput) SetInstanceIdSet(v []*string) *RunScheduledInstancesOutput { - s.InstanceIdSet = v +// SetUserBucket sets the UserBucket field's value. +func (s *SnapshotTaskDetail) SetUserBucket(v *UserBucketDetails) *SnapshotTaskDetail { + s.UserBucket = v return s } -// Describes the storage parameters for S3 and S3 buckets for an instance store-backed -// AMI. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/S3Storage -type S3Storage struct { +// Describes the data feed for a Spot Instance. +type SpotDatafeedSubscription struct { _ struct{} `type:"structure"` - // The access key ID of the owner of the bucket. Before you specify a value - // for your access key ID, review and follow the guidance in Best Practices - // for Managing AWS Access Keys (http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html). - AWSAccessKeyId *string `type:"string"` - - // The bucket in which to store the AMI. You can specify a bucket that you already - // own or a new bucket that Amazon EC2 creates on your behalf. If you specify - // a bucket that belongs to someone else, Amazon EC2 returns an error. + // The Amazon S3 bucket where the Spot Instance data feed is located. Bucket *string `locationName:"bucket" type:"string"` - // The beginning of the file name of the AMI. - Prefix *string `locationName:"prefix" type:"string"` + // The fault codes for the Spot Instance request, if any. + Fault *SpotInstanceStateFault `locationName:"fault" type:"structure"` - // An Amazon S3 upload policy that gives Amazon EC2 permission to upload items - // into Amazon S3 on your behalf. - // - // UploadPolicy is automatically base64 encoded/decoded by the SDK. - UploadPolicy []byte `locationName:"uploadPolicy" type:"blob"` + // The AWS account ID of the account. + OwnerId *string `locationName:"ownerId" type:"string"` - // The signature of the JSON document. - UploadPolicySignature *string `locationName:"uploadPolicySignature" type:"string"` + // The prefix that is prepended to data feed files. + Prefix *string `locationName:"prefix" type:"string"` + + // The state of the Spot Instance data feed subscription. + State *string `locationName:"state" type:"string" enum:"DatafeedSubscriptionState"` } // String returns the string representation -func (s S3Storage) String() string { +func (s SpotDatafeedSubscription) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s S3Storage) GoString() string { +func (s SpotDatafeedSubscription) GoString() string { return s.String() } -// SetAWSAccessKeyId sets the AWSAccessKeyId field's value. -func (s *S3Storage) SetAWSAccessKeyId(v string) *S3Storage { - s.AWSAccessKeyId = &v +// SetBucket sets the Bucket field's value. +func (s *SpotDatafeedSubscription) SetBucket(v string) *SpotDatafeedSubscription { + s.Bucket = &v return s } -// SetBucket sets the Bucket field's value. -func (s *S3Storage) SetBucket(v string) *S3Storage { - s.Bucket = &v +// SetFault sets the Fault field's value. +func (s *SpotDatafeedSubscription) SetFault(v *SpotInstanceStateFault) *SpotDatafeedSubscription { + s.Fault = v return s } -// SetPrefix sets the Prefix field's value. -func (s *S3Storage) SetPrefix(v string) *S3Storage { - s.Prefix = &v +// SetOwnerId sets the OwnerId field's value. +func (s *SpotDatafeedSubscription) SetOwnerId(v string) *SpotDatafeedSubscription { + s.OwnerId = &v return s } -// SetUploadPolicy sets the UploadPolicy field's value. -func (s *S3Storage) SetUploadPolicy(v []byte) *S3Storage { - s.UploadPolicy = v +// SetPrefix sets the Prefix field's value. +func (s *SpotDatafeedSubscription) SetPrefix(v string) *SpotDatafeedSubscription { + s.Prefix = &v return s } -// SetUploadPolicySignature sets the UploadPolicySignature field's value. -func (s *S3Storage) SetUploadPolicySignature(v string) *S3Storage { - s.UploadPolicySignature = &v +// SetState sets the State field's value. +func (s *SpotDatafeedSubscription) SetState(v string) *SpotDatafeedSubscription { + s.State = &v return s } -// Describes a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstance -type ScheduledInstance struct { +// Describes the launch specification for one or more Spot Instances. If you +// include On-Demand capacity in your fleet request, you can't use SpotFleetLaunchSpecification; +// you must use LaunchTemplateConfig (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html). +type SpotFleetLaunchSpecification struct { _ struct{} `type:"structure"` - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + // Deprecated. + AddressingType *string `locationName:"addressingType" type:"string"` - // The date when the Scheduled Instance was purchased. - CreateDate *time.Time `locationName:"createDate" type:"timestamp" timestampFormat:"iso8601"` + // One or more block devices that are mapped to the Spot Instances. You can't + // specify both a snapshot ID and an encryption value. This is because only + // blank volumes can be encrypted on creation. If a snapshot is the basis for + // a volume, it is not blank and its encryption status is used for the volume + // encryption status. + BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - // The hourly price for a single instance. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` + // Indicates whether the instances are optimized for EBS I/O. This optimization + // provides dedicated throughput to Amazon EBS and an optimized configuration + // stack to provide optimal EBS I/O performance. This optimization isn't available + // with all instance types. Additional usage charges apply when using an EBS + // Optimized instance. + // + // Default: false + EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - // The number of instances. - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` + // The IAM instance profile. + IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` + + // The ID of the AMI. + ImageId *string `locationName:"imageId" type:"string"` // The instance type. - InstanceType *string `locationName:"instanceType" type:"string"` + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - // The network platform (EC2-Classic or EC2-VPC). - NetworkPlatform *string `locationName:"networkPlatform" type:"string"` + // The ID of the kernel. + KernelId *string `locationName:"kernelId" type:"string"` - // The time for the next schedule to start. - NextSlotStartTime *time.Time `locationName:"nextSlotStartTime" type:"timestamp" timestampFormat:"iso8601"` + // The name of the key pair. + KeyName *string `locationName:"keyName" type:"string"` - // The platform (Linux/UNIX or Windows). - Platform *string `locationName:"platform" type:"string"` + // Enable or disable monitoring for the instances. + Monitoring *SpotFleetMonitoring `locationName:"monitoring" type:"structure"` - // The time that the previous schedule ended or will end. - PreviousSlotEndTime *time.Time `locationName:"previousSlotEndTime" type:"timestamp" timestampFormat:"iso8601"` + // One or more network interfaces. If you specify a network interface, you must + // specify subnet IDs and security group IDs using the network interface. + NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` - // The schedule recurrence. - Recurrence *ScheduledInstanceRecurrence `locationName:"recurrence" type:"structure"` + // The placement information. + Placement *SpotPlacement `locationName:"placement" type:"structure"` - // The Scheduled Instance ID. - ScheduledInstanceId *string `locationName:"scheduledInstanceId" type:"string"` + // The ID of the RAM disk. Some kernels require additional drivers at launch. + // Check the kernel requirements for information about whether you need to specify + // a RAM disk. To find kernel requirements, refer to the AWS Resource Center + // and search for the kernel ID. + RamdiskId *string `locationName:"ramdiskId" type:"string"` - // The number of hours in the schedule. - SlotDurationInHours *int64 `locationName:"slotDurationInHours" type:"integer"` + // One or more security groups. When requesting instances in a VPC, you must + // specify the IDs of the security groups. When requesting instances in EC2-Classic, + // you can specify the names or the IDs of the security groups. + SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` - // The end date for the Scheduled Instance. - TermEndDate *time.Time `locationName:"termEndDate" type:"timestamp" timestampFormat:"iso8601"` + // The maximum price per unit hour that you are willing to pay for a Spot Instance. + // If this value is not specified, the default is the Spot price specified for + // the fleet. To determine the Spot price per unit hour, divide the Spot price + // by the value of WeightedCapacity. + SpotPrice *string `locationName:"spotPrice" type:"string"` - // The start date for the Scheduled Instance. - TermStartDate *time.Time `locationName:"termStartDate" type:"timestamp" timestampFormat:"iso8601"` + // The IDs of the subnets in which to launch the instances. To specify multiple + // subnets, separate them using commas; for example, "subnet-1234abcdeexample1, + // subnet-0987cdef6example2". + SubnetId *string `locationName:"subnetId" type:"string"` - // The total number of hours for a single instance for the entire term. - TotalScheduledInstanceHours *int64 `locationName:"totalScheduledInstanceHours" type:"integer"` + // The tags to apply during creation. + TagSpecifications []*SpotFleetTagSpecification `locationName:"tagSpecificationSet" locationNameList:"item" type:"list"` + + // The Base64-encoded user data that instances use when starting up. + UserData *string `locationName:"userData" type:"string"` + + // The number of units provided by the specified instance type. These are the + // same units that you chose to set the target capacity in terms of instances, + // or a performance characteristic such as vCPUs, memory, or I/O. + // + // If the target capacity divided by this value is not a whole number, Amazon + // EC2 rounds the number of instances to the next whole number. If this value + // is not specified, the default is 1. + WeightedCapacity *float64 `locationName:"weightedCapacity" type:"double"` } // String returns the string representation -func (s ScheduledInstance) String() string { +func (s SpotFleetLaunchSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstance) GoString() string { +func (s SpotFleetLaunchSpecification) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ScheduledInstance) SetAvailabilityZone(v string) *ScheduledInstance { - s.AvailabilityZone = &v +// SetAddressingType sets the AddressingType field's value. +func (s *SpotFleetLaunchSpecification) SetAddressingType(v string) *SpotFleetLaunchSpecification { + s.AddressingType = &v return s } -// SetCreateDate sets the CreateDate field's value. -func (s *ScheduledInstance) SetCreateDate(v time.Time) *ScheduledInstance { - s.CreateDate = &v +// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. +func (s *SpotFleetLaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *SpotFleetLaunchSpecification { + s.BlockDeviceMappings = v return s } -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *ScheduledInstance) SetHourlyPrice(v string) *ScheduledInstance { - s.HourlyPrice = &v +// SetEbsOptimized sets the EbsOptimized field's value. +func (s *SpotFleetLaunchSpecification) SetEbsOptimized(v bool) *SpotFleetLaunchSpecification { + s.EbsOptimized = &v return s } -// SetInstanceCount sets the InstanceCount field's value. -func (s *ScheduledInstance) SetInstanceCount(v int64) *ScheduledInstance { - s.InstanceCount = &v +// SetIamInstanceProfile sets the IamInstanceProfile field's value. +func (s *SpotFleetLaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *SpotFleetLaunchSpecification { + s.IamInstanceProfile = v + return s +} + +// SetImageId sets the ImageId field's value. +func (s *SpotFleetLaunchSpecification) SetImageId(v string) *SpotFleetLaunchSpecification { + s.ImageId = &v return s } // SetInstanceType sets the InstanceType field's value. -func (s *ScheduledInstance) SetInstanceType(v string) *ScheduledInstance { +func (s *SpotFleetLaunchSpecification) SetInstanceType(v string) *SpotFleetLaunchSpecification { s.InstanceType = &v return s } -// SetNetworkPlatform sets the NetworkPlatform field's value. -func (s *ScheduledInstance) SetNetworkPlatform(v string) *ScheduledInstance { - s.NetworkPlatform = &v +// SetKernelId sets the KernelId field's value. +func (s *SpotFleetLaunchSpecification) SetKernelId(v string) *SpotFleetLaunchSpecification { + s.KernelId = &v return s } -// SetNextSlotStartTime sets the NextSlotStartTime field's value. -func (s *ScheduledInstance) SetNextSlotStartTime(v time.Time) *ScheduledInstance { - s.NextSlotStartTime = &v +// SetKeyName sets the KeyName field's value. +func (s *SpotFleetLaunchSpecification) SetKeyName(v string) *SpotFleetLaunchSpecification { + s.KeyName = &v return s } -// SetPlatform sets the Platform field's value. -func (s *ScheduledInstance) SetPlatform(v string) *ScheduledInstance { - s.Platform = &v +// SetMonitoring sets the Monitoring field's value. +func (s *SpotFleetLaunchSpecification) SetMonitoring(v *SpotFleetMonitoring) *SpotFleetLaunchSpecification { + s.Monitoring = v return s } -// SetPreviousSlotEndTime sets the PreviousSlotEndTime field's value. -func (s *ScheduledInstance) SetPreviousSlotEndTime(v time.Time) *ScheduledInstance { - s.PreviousSlotEndTime = &v +// SetNetworkInterfaces sets the NetworkInterfaces field's value. +func (s *SpotFleetLaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *SpotFleetLaunchSpecification { + s.NetworkInterfaces = v return s } -// SetRecurrence sets the Recurrence field's value. -func (s *ScheduledInstance) SetRecurrence(v *ScheduledInstanceRecurrence) *ScheduledInstance { - s.Recurrence = v +// SetPlacement sets the Placement field's value. +func (s *SpotFleetLaunchSpecification) SetPlacement(v *SpotPlacement) *SpotFleetLaunchSpecification { + s.Placement = v return s } -// SetScheduledInstanceId sets the ScheduledInstanceId field's value. -func (s *ScheduledInstance) SetScheduledInstanceId(v string) *ScheduledInstance { - s.ScheduledInstanceId = &v +// SetRamdiskId sets the RamdiskId field's value. +func (s *SpotFleetLaunchSpecification) SetRamdiskId(v string) *SpotFleetLaunchSpecification { + s.RamdiskId = &v return s } -// SetSlotDurationInHours sets the SlotDurationInHours field's value. -func (s *ScheduledInstance) SetSlotDurationInHours(v int64) *ScheduledInstance { - s.SlotDurationInHours = &v +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *SpotFleetLaunchSpecification) SetSecurityGroups(v []*GroupIdentifier) *SpotFleetLaunchSpecification { + s.SecurityGroups = v return s } -// SetTermEndDate sets the TermEndDate field's value. -func (s *ScheduledInstance) SetTermEndDate(v time.Time) *ScheduledInstance { - s.TermEndDate = &v +// SetSpotPrice sets the SpotPrice field's value. +func (s *SpotFleetLaunchSpecification) SetSpotPrice(v string) *SpotFleetLaunchSpecification { + s.SpotPrice = &v return s } -// SetTermStartDate sets the TermStartDate field's value. -func (s *ScheduledInstance) SetTermStartDate(v time.Time) *ScheduledInstance { - s.TermStartDate = &v +// SetSubnetId sets the SubnetId field's value. +func (s *SpotFleetLaunchSpecification) SetSubnetId(v string) *SpotFleetLaunchSpecification { + s.SubnetId = &v return s } -// SetTotalScheduledInstanceHours sets the TotalScheduledInstanceHours field's value. -func (s *ScheduledInstance) SetTotalScheduledInstanceHours(v int64) *ScheduledInstance { - s.TotalScheduledInstanceHours = &v +// SetTagSpecifications sets the TagSpecifications field's value. +func (s *SpotFleetLaunchSpecification) SetTagSpecifications(v []*SpotFleetTagSpecification) *SpotFleetLaunchSpecification { + s.TagSpecifications = v return s } -// Describes a schedule that is available for your Scheduled Instances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstanceAvailability -type ScheduledInstanceAvailability struct { +// SetUserData sets the UserData field's value. +func (s *SpotFleetLaunchSpecification) SetUserData(v string) *SpotFleetLaunchSpecification { + s.UserData = &v + return s +} + +// SetWeightedCapacity sets the WeightedCapacity field's value. +func (s *SpotFleetLaunchSpecification) SetWeightedCapacity(v float64) *SpotFleetLaunchSpecification { + s.WeightedCapacity = &v + return s +} + +// Describes whether monitoring is enabled. +type SpotFleetMonitoring struct { _ struct{} `type:"structure"` - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + // Enables monitoring for the instance. + // + // Default: false + Enabled *bool `locationName:"enabled" type:"boolean"` +} - // The number of available instances. - AvailableInstanceCount *int64 `locationName:"availableInstanceCount" type:"integer"` +// String returns the string representation +func (s SpotFleetMonitoring) String() string { + return awsutil.Prettify(s) +} - // The time period for the first schedule to start. - FirstSlotStartTime *time.Time `locationName:"firstSlotStartTime" type:"timestamp" timestampFormat:"iso8601"` +// GoString returns the string representation +func (s SpotFleetMonitoring) GoString() string { + return s.String() +} - // The hourly price for a single instance. - HourlyPrice *string `locationName:"hourlyPrice" type:"string"` +// SetEnabled sets the Enabled field's value. +func (s *SpotFleetMonitoring) SetEnabled(v bool) *SpotFleetMonitoring { + s.Enabled = &v + return s +} - // The instance type. You can specify one of the C3, C4, M4, or R3 instance - // types. - InstanceType *string `locationName:"instanceType" type:"string"` +// Describes a Spot Fleet request. +type SpotFleetRequestConfig struct { + _ struct{} `type:"structure"` - // The maximum term. The only possible value is 365 days. - MaxTermDurationInDays *int64 `locationName:"maxTermDurationInDays" type:"integer"` + // The progress of the Spot Fleet request. If there is an error, the status + // is error. After all requests are placed, the status is pending_fulfillment. + // If the size of the fleet is equal to or greater than its target capacity, + // the status is fulfilled. If the size of the fleet is decreased, the status + // is pending_termination while Spot Instances are terminating. + ActivityStatus *string `locationName:"activityStatus" type:"string" enum:"ActivityStatus"` - // The minimum term. The only possible value is 365 days. - MinTermDurationInDays *int64 `locationName:"minTermDurationInDays" type:"integer"` + // The creation date and time of the request. + CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - // The network platform (EC2-Classic or EC2-VPC). - NetworkPlatform *string `locationName:"networkPlatform" type:"string"` + // The configuration of the Spot Fleet request. + SpotFleetRequestConfig *SpotFleetRequestConfigData `locationName:"spotFleetRequestConfig" type:"structure"` - // The platform (Linux/UNIX or Windows). - Platform *string `locationName:"platform" type:"string"` + // The ID of the Spot Fleet request. + SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string"` - // The purchase token. This token expires in two hours. - PurchaseToken *string `locationName:"purchaseToken" type:"string"` + // The state of the Spot Fleet request. + SpotFleetRequestState *string `locationName:"spotFleetRequestState" type:"string" enum:"BatchState"` +} - // The schedule recurrence. - Recurrence *ScheduledInstanceRecurrence `locationName:"recurrence" type:"structure"` +// String returns the string representation +func (s SpotFleetRequestConfig) String() string { + return awsutil.Prettify(s) +} - // The number of hours in the schedule. - SlotDurationInHours *int64 `locationName:"slotDurationInHours" type:"integer"` +// GoString returns the string representation +func (s SpotFleetRequestConfig) GoString() string { + return s.String() +} - // The total number of hours for a single instance for the entire term. - TotalScheduledInstanceHours *int64 `locationName:"totalScheduledInstanceHours" type:"integer"` +// SetActivityStatus sets the ActivityStatus field's value. +func (s *SpotFleetRequestConfig) SetActivityStatus(v string) *SpotFleetRequestConfig { + s.ActivityStatus = &v + return s +} + +// SetCreateTime sets the CreateTime field's value. +func (s *SpotFleetRequestConfig) SetCreateTime(v time.Time) *SpotFleetRequestConfig { + s.CreateTime = &v + return s +} + +// SetSpotFleetRequestConfig sets the SpotFleetRequestConfig field's value. +func (s *SpotFleetRequestConfig) SetSpotFleetRequestConfig(v *SpotFleetRequestConfigData) *SpotFleetRequestConfig { + s.SpotFleetRequestConfig = v + return s +} + +// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. +func (s *SpotFleetRequestConfig) SetSpotFleetRequestId(v string) *SpotFleetRequestConfig { + s.SpotFleetRequestId = &v + return s +} + +// SetSpotFleetRequestState sets the SpotFleetRequestState field's value. +func (s *SpotFleetRequestConfig) SetSpotFleetRequestState(v string) *SpotFleetRequestConfig { + s.SpotFleetRequestState = &v + return s +} + +// Describes the configuration of a Spot Fleet request. +type SpotFleetRequestConfigData struct { + _ struct{} `type:"structure"` + + // Indicates how to allocate the target Spot Instance capacity across the Spot + // Instance pools specified by the Spot Fleet request. + // + // If the allocation strategy is lowestPrice, Spot Fleet launches instances + // from the Spot Instance pools with the lowest price. This is the default allocation + // strategy. + // + // If the allocation strategy is diversified, Spot Fleet launches instances + // from all the Spot Instance pools that you specify. + // + // If the allocation strategy is capacityOptimized, Spot Fleet launches instances + // from Spot Instance pools with optimal capacity for the number of instances + // that are launching. + AllocationStrategy *string `locationName:"allocationStrategy" type:"string" enum:"AllocationStrategy"` + + // A unique, case-sensitive identifier that you provide to ensure the idempotency + // of your listings. This helps to avoid duplicate listings. For more information, + // see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). + ClientToken *string `locationName:"clientToken" type:"string"` + + // Indicates whether running Spot Instances should be terminated if you decrease + // the target capacity of the Spot Fleet request below the current size of the + // Spot Fleet. + ExcessCapacityTerminationPolicy *string `locationName:"excessCapacityTerminationPolicy" type:"string" enum:"ExcessCapacityTerminationPolicy"` + + // The number of units fulfilled by this request compared to the set target + // capacity. You cannot set this value. + FulfilledCapacity *float64 `locationName:"fulfilledCapacity" type:"double"` + + // The Amazon Resource Name (ARN) of an AWS Identity and Access Management (IAM) + // role that grants the Spot Fleet the permission to request, launch, terminate, + // and tag instances on your behalf. For more information, see Spot Fleet Prerequisites + // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html#spot-fleet-prerequisites) + // in the Amazon EC2 User Guide for Linux Instances. Spot Fleet can terminate + // Spot Instances on your behalf when you cancel its Spot Fleet request using + // CancelSpotFleetRequests or when the Spot Fleet request expires, if you set + // TerminateInstancesWithExpiration. + // + // IamFleetRole is a required field + IamFleetRole *string `locationName:"iamFleetRole" type:"string" required:"true"` + + // The behavior when a Spot Instance is interrupted. The default is terminate. + InstanceInterruptionBehavior *string `locationName:"instanceInterruptionBehavior" type:"string" enum:"InstanceInterruptionBehavior"` + + // The number of Spot pools across which to allocate your target Spot capacity. + // Valid only when Spot AllocationStrategy is set to lowest-price. Spot Fleet + // selects the cheapest Spot pools and evenly allocates your target Spot capacity + // across the number of Spot pools that you specify. + InstancePoolsToUseCount *int64 `locationName:"instancePoolsToUseCount" type:"integer"` + + // The launch specifications for the Spot Fleet request. If you specify LaunchSpecifications, + // you can't specify LaunchTemplateConfigs. If you include On-Demand capacity + // in your request, you must use LaunchTemplateConfigs. + LaunchSpecifications []*SpotFleetLaunchSpecification `locationName:"launchSpecifications" locationNameList:"item" type:"list"` + + // The launch template and overrides. If you specify LaunchTemplateConfigs, + // you can't specify LaunchSpecifications. If you include On-Demand capacity + // in your request, you must use LaunchTemplateConfigs. + LaunchTemplateConfigs []*LaunchTemplateConfig `locationName:"launchTemplateConfigs" locationNameList:"item" type:"list"` + + // One or more Classic Load Balancers and target groups to attach to the Spot + // Fleet request. Spot Fleet registers the running Spot Instances with the specified + // Classic Load Balancers and target groups. + // + // With Network Load Balancers, Spot Fleet cannot register instances that have + // the following instance types: C1, CC1, CC2, CG1, CG2, CR1, CS1, G1, G2, HI1, + // HS1, M1, M2, M3, and T1. + LoadBalancersConfig *LoadBalancersConfig `locationName:"loadBalancersConfig" type:"structure"` + + // The order of the launch template overrides to use in fulfilling On-Demand + // capacity. If you specify lowestPrice, Spot Fleet uses price to determine + // the order, launching the lowest price first. If you specify prioritized, + // Spot Fleet uses the priority that you assign to each Spot Fleet launch template + // override, launching the highest priority first. If you do not specify a value, + // Spot Fleet defaults to lowestPrice. + OnDemandAllocationStrategy *string `locationName:"onDemandAllocationStrategy" type:"string" enum:"OnDemandAllocationStrategy"` + + // The number of On-Demand units fulfilled by this request compared to the set + // target On-Demand capacity. + OnDemandFulfilledCapacity *float64 `locationName:"onDemandFulfilledCapacity" type:"double"` + + // The maximum amount per hour for On-Demand Instances that you're willing to + // pay. You can use the onDemandMaxTotalPrice parameter, the spotMaxTotalPrice + // parameter, or both parameters to ensure that your fleet cost does not exceed + // your budget. If you set a maximum price per hour for the On-Demand Instances + // and Spot Instances in your request, Spot Fleet will launch instances until + // it reaches the maximum amount you're willing to pay. When the maximum amount + // you're willing to pay is reached, the fleet stops launching instances even + // if it hasn’t met the target capacity. + OnDemandMaxTotalPrice *string `locationName:"onDemandMaxTotalPrice" type:"string"` + + // The number of On-Demand units to request. You can choose to set the target + // capacity in terms of instances or a performance characteristic that is important + // to your application workload, such as vCPUs, memory, or I/O. If the request + // type is maintain, you can specify a target capacity of 0 and add capacity + // later. + OnDemandTargetCapacity *int64 `locationName:"onDemandTargetCapacity" type:"integer"` + + // Indicates whether Spot Fleet should replace unhealthy instances. + ReplaceUnhealthyInstances *bool `locationName:"replaceUnhealthyInstances" type:"boolean"` + + // The maximum amount per hour for Spot Instances that you're willing to pay. + // You can use the spotdMaxTotalPrice parameter, the onDemandMaxTotalPrice parameter, + // or both parameters to ensure that your fleet cost does not exceed your budget. + // If you set a maximum price per hour for the On-Demand Instances and Spot + // Instances in your request, Spot Fleet will launch instances until it reaches + // the maximum amount you're willing to pay. When the maximum amount you're + // willing to pay is reached, the fleet stops launching instances even if it + // hasn’t met the target capacity. + SpotMaxTotalPrice *string `locationName:"spotMaxTotalPrice" type:"string"` + + // The maximum price per unit hour that you are willing to pay for a Spot Instance. + // The default is the On-Demand price. + SpotPrice *string `locationName:"spotPrice" type:"string"` + + // The number of units to request for the Spot Fleet. You can choose to set + // the target capacity in terms of instances or a performance characteristic + // that is important to your application workload, such as vCPUs, memory, or + // I/O. If the request type is maintain, you can specify a target capacity of + // 0 and add capacity later. + // + // TargetCapacity is a required field + TargetCapacity *int64 `locationName:"targetCapacity" type:"integer" required:"true"` + + // Indicates whether running Spot Instances are terminated when the Spot Fleet + // request expires. + TerminateInstancesWithExpiration *bool `locationName:"terminateInstancesWithExpiration" type:"boolean"` + + // The type of request. Indicates whether the Spot Fleet only requests the target + // capacity or also attempts to maintain it. When this value is request, the + // Spot Fleet only places the required requests. It does not attempt to replenish + // Spot Instances if capacity is diminished, nor does it submit requests in + // alternative Spot pools if capacity is not available. When this value is maintain, + // the Spot Fleet maintains the target capacity. The Spot Fleet places the required + // requests to meet capacity and automatically replenishes any interrupted instances. + // Default: maintain. instant is listed but is not used by Spot Fleet. + Type *string `locationName:"type" type:"string" enum:"FleetType"` + + // The start date and time of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ). + // By default, Amazon EC2 starts fulfilling the request immediately. + ValidFrom *time.Time `locationName:"validFrom" type:"timestamp"` + + // The end date and time of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ). + // After the end date and time, no new Spot Instance requests are placed or + // able to fulfill the request. If no value is specified, the Spot Fleet request + // remains until you cancel it. + ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` } // String returns the string representation -func (s ScheduledInstanceAvailability) String() string { +func (s SpotFleetRequestConfigData) String() string { return awsutil.Prettify(s) } -// GoString returns the string representation -func (s ScheduledInstanceAvailability) GoString() string { - return s.String() +// GoString returns the string representation +func (s SpotFleetRequestConfigData) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *SpotFleetRequestConfigData) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SpotFleetRequestConfigData"} + if s.IamFleetRole == nil { + invalidParams.Add(request.NewErrParamRequired("IamFleetRole")) + } + if s.TargetCapacity == nil { + invalidParams.Add(request.NewErrParamRequired("TargetCapacity")) + } + if s.LaunchTemplateConfigs != nil { + for i, v := range s.LaunchTemplateConfigs { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "LaunchTemplateConfigs", i), err.(request.ErrInvalidParams)) + } + } + } + if s.LoadBalancersConfig != nil { + if err := s.LoadBalancersConfig.Validate(); err != nil { + invalidParams.AddNested("LoadBalancersConfig", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAllocationStrategy sets the AllocationStrategy field's value. +func (s *SpotFleetRequestConfigData) SetAllocationStrategy(v string) *SpotFleetRequestConfigData { + s.AllocationStrategy = &v + return s } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ScheduledInstanceAvailability) SetAvailabilityZone(v string) *ScheduledInstanceAvailability { - s.AvailabilityZone = &v +// SetClientToken sets the ClientToken field's value. +func (s *SpotFleetRequestConfigData) SetClientToken(v string) *SpotFleetRequestConfigData { + s.ClientToken = &v return s } -// SetAvailableInstanceCount sets the AvailableInstanceCount field's value. -func (s *ScheduledInstanceAvailability) SetAvailableInstanceCount(v int64) *ScheduledInstanceAvailability { - s.AvailableInstanceCount = &v +// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. +func (s *SpotFleetRequestConfigData) SetExcessCapacityTerminationPolicy(v string) *SpotFleetRequestConfigData { + s.ExcessCapacityTerminationPolicy = &v return s } -// SetFirstSlotStartTime sets the FirstSlotStartTime field's value. -func (s *ScheduledInstanceAvailability) SetFirstSlotStartTime(v time.Time) *ScheduledInstanceAvailability { - s.FirstSlotStartTime = &v +// SetFulfilledCapacity sets the FulfilledCapacity field's value. +func (s *SpotFleetRequestConfigData) SetFulfilledCapacity(v float64) *SpotFleetRequestConfigData { + s.FulfilledCapacity = &v return s } -// SetHourlyPrice sets the HourlyPrice field's value. -func (s *ScheduledInstanceAvailability) SetHourlyPrice(v string) *ScheduledInstanceAvailability { - s.HourlyPrice = &v +// SetIamFleetRole sets the IamFleetRole field's value. +func (s *SpotFleetRequestConfigData) SetIamFleetRole(v string) *SpotFleetRequestConfigData { + s.IamFleetRole = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *ScheduledInstanceAvailability) SetInstanceType(v string) *ScheduledInstanceAvailability { - s.InstanceType = &v +// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. +func (s *SpotFleetRequestConfigData) SetInstanceInterruptionBehavior(v string) *SpotFleetRequestConfigData { + s.InstanceInterruptionBehavior = &v return s } -// SetMaxTermDurationInDays sets the MaxTermDurationInDays field's value. -func (s *ScheduledInstanceAvailability) SetMaxTermDurationInDays(v int64) *ScheduledInstanceAvailability { - s.MaxTermDurationInDays = &v +// SetInstancePoolsToUseCount sets the InstancePoolsToUseCount field's value. +func (s *SpotFleetRequestConfigData) SetInstancePoolsToUseCount(v int64) *SpotFleetRequestConfigData { + s.InstancePoolsToUseCount = &v return s } -// SetMinTermDurationInDays sets the MinTermDurationInDays field's value. -func (s *ScheduledInstanceAvailability) SetMinTermDurationInDays(v int64) *ScheduledInstanceAvailability { - s.MinTermDurationInDays = &v +// SetLaunchSpecifications sets the LaunchSpecifications field's value. +func (s *SpotFleetRequestConfigData) SetLaunchSpecifications(v []*SpotFleetLaunchSpecification) *SpotFleetRequestConfigData { + s.LaunchSpecifications = v return s } -// SetNetworkPlatform sets the NetworkPlatform field's value. -func (s *ScheduledInstanceAvailability) SetNetworkPlatform(v string) *ScheduledInstanceAvailability { - s.NetworkPlatform = &v +// SetLaunchTemplateConfigs sets the LaunchTemplateConfigs field's value. +func (s *SpotFleetRequestConfigData) SetLaunchTemplateConfigs(v []*LaunchTemplateConfig) *SpotFleetRequestConfigData { + s.LaunchTemplateConfigs = v return s } -// SetPlatform sets the Platform field's value. -func (s *ScheduledInstanceAvailability) SetPlatform(v string) *ScheduledInstanceAvailability { - s.Platform = &v +// SetLoadBalancersConfig sets the LoadBalancersConfig field's value. +func (s *SpotFleetRequestConfigData) SetLoadBalancersConfig(v *LoadBalancersConfig) *SpotFleetRequestConfigData { + s.LoadBalancersConfig = v return s } -// SetPurchaseToken sets the PurchaseToken field's value. -func (s *ScheduledInstanceAvailability) SetPurchaseToken(v string) *ScheduledInstanceAvailability { - s.PurchaseToken = &v +// SetOnDemandAllocationStrategy sets the OnDemandAllocationStrategy field's value. +func (s *SpotFleetRequestConfigData) SetOnDemandAllocationStrategy(v string) *SpotFleetRequestConfigData { + s.OnDemandAllocationStrategy = &v return s } -// SetRecurrence sets the Recurrence field's value. -func (s *ScheduledInstanceAvailability) SetRecurrence(v *ScheduledInstanceRecurrence) *ScheduledInstanceAvailability { - s.Recurrence = v +// SetOnDemandFulfilledCapacity sets the OnDemandFulfilledCapacity field's value. +func (s *SpotFleetRequestConfigData) SetOnDemandFulfilledCapacity(v float64) *SpotFleetRequestConfigData { + s.OnDemandFulfilledCapacity = &v return s } -// SetSlotDurationInHours sets the SlotDurationInHours field's value. -func (s *ScheduledInstanceAvailability) SetSlotDurationInHours(v int64) *ScheduledInstanceAvailability { - s.SlotDurationInHours = &v +// SetOnDemandMaxTotalPrice sets the OnDemandMaxTotalPrice field's value. +func (s *SpotFleetRequestConfigData) SetOnDemandMaxTotalPrice(v string) *SpotFleetRequestConfigData { + s.OnDemandMaxTotalPrice = &v return s } -// SetTotalScheduledInstanceHours sets the TotalScheduledInstanceHours field's value. -func (s *ScheduledInstanceAvailability) SetTotalScheduledInstanceHours(v int64) *ScheduledInstanceAvailability { - s.TotalScheduledInstanceHours = &v +// SetOnDemandTargetCapacity sets the OnDemandTargetCapacity field's value. +func (s *SpotFleetRequestConfigData) SetOnDemandTargetCapacity(v int64) *SpotFleetRequestConfigData { + s.OnDemandTargetCapacity = &v return s } -// Describes the recurring schedule for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstanceRecurrence -type ScheduledInstanceRecurrence struct { - _ struct{} `type:"structure"` - - // The frequency (Daily, Weekly, or Monthly). - Frequency *string `locationName:"frequency" type:"string"` - - // The interval quantity. The interval unit depends on the value of frequency. - // For example, every 2 weeks or every 2 months. - Interval *int64 `locationName:"interval" type:"integer"` - - // The days. For a monthly schedule, this is one or more days of the month (1-31). - // For a weekly schedule, this is one or more days of the week (1-7, where 1 - // is Sunday). - OccurrenceDaySet []*int64 `locationName:"occurrenceDaySet" locationNameList:"item" type:"list"` - - // Indicates whether the occurrence is relative to the end of the specified - // week or month. - OccurrenceRelativeToEnd *bool `locationName:"occurrenceRelativeToEnd" type:"boolean"` - - // The unit for occurrenceDaySet (DayOfWeek or DayOfMonth). - OccurrenceUnit *string `locationName:"occurrenceUnit" type:"string"` +// SetReplaceUnhealthyInstances sets the ReplaceUnhealthyInstances field's value. +func (s *SpotFleetRequestConfigData) SetReplaceUnhealthyInstances(v bool) *SpotFleetRequestConfigData { + s.ReplaceUnhealthyInstances = &v + return s } -// String returns the string representation -func (s ScheduledInstanceRecurrence) String() string { - return awsutil.Prettify(s) +// SetSpotMaxTotalPrice sets the SpotMaxTotalPrice field's value. +func (s *SpotFleetRequestConfigData) SetSpotMaxTotalPrice(v string) *SpotFleetRequestConfigData { + s.SpotMaxTotalPrice = &v + return s } -// GoString returns the string representation -func (s ScheduledInstanceRecurrence) GoString() string { - return s.String() +// SetSpotPrice sets the SpotPrice field's value. +func (s *SpotFleetRequestConfigData) SetSpotPrice(v string) *SpotFleetRequestConfigData { + s.SpotPrice = &v + return s } -// SetFrequency sets the Frequency field's value. -func (s *ScheduledInstanceRecurrence) SetFrequency(v string) *ScheduledInstanceRecurrence { - s.Frequency = &v +// SetTargetCapacity sets the TargetCapacity field's value. +func (s *SpotFleetRequestConfigData) SetTargetCapacity(v int64) *SpotFleetRequestConfigData { + s.TargetCapacity = &v return s } -// SetInterval sets the Interval field's value. -func (s *ScheduledInstanceRecurrence) SetInterval(v int64) *ScheduledInstanceRecurrence { - s.Interval = &v +// SetTerminateInstancesWithExpiration sets the TerminateInstancesWithExpiration field's value. +func (s *SpotFleetRequestConfigData) SetTerminateInstancesWithExpiration(v bool) *SpotFleetRequestConfigData { + s.TerminateInstancesWithExpiration = &v return s } -// SetOccurrenceDaySet sets the OccurrenceDaySet field's value. -func (s *ScheduledInstanceRecurrence) SetOccurrenceDaySet(v []*int64) *ScheduledInstanceRecurrence { - s.OccurrenceDaySet = v +// SetType sets the Type field's value. +func (s *SpotFleetRequestConfigData) SetType(v string) *SpotFleetRequestConfigData { + s.Type = &v return s } -// SetOccurrenceRelativeToEnd sets the OccurrenceRelativeToEnd field's value. -func (s *ScheduledInstanceRecurrence) SetOccurrenceRelativeToEnd(v bool) *ScheduledInstanceRecurrence { - s.OccurrenceRelativeToEnd = &v +// SetValidFrom sets the ValidFrom field's value. +func (s *SpotFleetRequestConfigData) SetValidFrom(v time.Time) *SpotFleetRequestConfigData { + s.ValidFrom = &v return s } -// SetOccurrenceUnit sets the OccurrenceUnit field's value. -func (s *ScheduledInstanceRecurrence) SetOccurrenceUnit(v string) *ScheduledInstanceRecurrence { - s.OccurrenceUnit = &v +// SetValidUntil sets the ValidUntil field's value. +func (s *SpotFleetRequestConfigData) SetValidUntil(v time.Time) *SpotFleetRequestConfigData { + s.ValidUntil = &v return s } -// Describes the recurring schedule for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstanceRecurrenceRequest -type ScheduledInstanceRecurrenceRequest struct { +// The tags for a Spot Fleet resource. +type SpotFleetTagSpecification struct { _ struct{} `type:"structure"` - // The frequency (Daily, Weekly, or Monthly). - Frequency *string `type:"string"` - - // The interval quantity. The interval unit depends on the value of Frequency. - // For example, every 2 weeks or every 2 months. - Interval *int64 `type:"integer"` - - // The days. For a monthly schedule, this is one or more days of the month (1-31). - // For a weekly schedule, this is one or more days of the week (1-7, where 1 - // is Sunday). You can't specify this value with a daily schedule. If the occurrence - // is relative to the end of the month, you can specify only a single day. - OccurrenceDays []*int64 `locationName:"OccurrenceDay" locationNameList:"OccurenceDay" type:"list"` - - // Indicates whether the occurrence is relative to the end of the specified - // week or month. You can't specify this value with a daily schedule. - OccurrenceRelativeToEnd *bool `type:"boolean"` + // The type of resource. Currently, the only resource type that is supported + // is instance. + ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` - // The unit for OccurrenceDays (DayOfWeek or DayOfMonth). This value is required - // for a monthly schedule. You can't specify DayOfWeek with a weekly schedule. - // You can't specify this value with a daily schedule. - OccurrenceUnit *string `type:"string"` + // The tags. + Tags []*Tag `locationName:"tag" locationNameList:"item" type:"list"` } // String returns the string representation -func (s ScheduledInstanceRecurrenceRequest) String() string { +func (s SpotFleetTagSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstanceRecurrenceRequest) GoString() string { +func (s SpotFleetTagSpecification) GoString() string { return s.String() } -// SetFrequency sets the Frequency field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetFrequency(v string) *ScheduledInstanceRecurrenceRequest { - s.Frequency = &v +// SetResourceType sets the ResourceType field's value. +func (s *SpotFleetTagSpecification) SetResourceType(v string) *SpotFleetTagSpecification { + s.ResourceType = &v return s } -// SetInterval sets the Interval field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetInterval(v int64) *ScheduledInstanceRecurrenceRequest { - s.Interval = &v +// SetTags sets the Tags field's value. +func (s *SpotFleetTagSpecification) SetTags(v []*Tag) *SpotFleetTagSpecification { + s.Tags = v return s } -// SetOccurrenceDays sets the OccurrenceDays field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceDays(v []*int64) *ScheduledInstanceRecurrenceRequest { - s.OccurrenceDays = v - return s -} +// Describes a Spot Instance request. +type SpotInstanceRequest struct { + _ struct{} `type:"structure"` -// SetOccurrenceRelativeToEnd sets the OccurrenceRelativeToEnd field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceRelativeToEnd(v bool) *ScheduledInstanceRecurrenceRequest { - s.OccurrenceRelativeToEnd = &v - return s -} + // If you specified a duration and your Spot Instance request was fulfilled, + // this is the fixed hourly price in effect for the Spot Instance while it runs. + ActualBlockHourlyPrice *string `locationName:"actualBlockHourlyPrice" type:"string"` -// SetOccurrenceUnit sets the OccurrenceUnit field's value. -func (s *ScheduledInstanceRecurrenceRequest) SetOccurrenceUnit(v string) *ScheduledInstanceRecurrenceRequest { - s.OccurrenceUnit = &v - return s -} + // The Availability Zone group. If you specify the same Availability Zone group + // for all Spot Instance requests, all Spot Instances are launched in the same + // Availability Zone. + AvailabilityZoneGroup *string `locationName:"availabilityZoneGroup" type:"string"` -// Describes a block device mapping for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesBlockDeviceMapping -type ScheduledInstancesBlockDeviceMapping struct { - _ struct{} `type:"structure"` + // The duration for the Spot Instance, in minutes. + BlockDurationMinutes *int64 `locationName:"blockDurationMinutes" type:"integer"` - // The device name exposed to the instance (for example, /dev/sdh or xvdh). - DeviceName *string `type:"string"` + // The date and time when the Spot Instance request was created, in UTC format + // (for example, YYYY-MM-DDTHH:MM:SSZ). + CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - // Parameters used to set up EBS volumes automatically when the instance is - // launched. - Ebs *ScheduledInstancesEbs `type:"structure"` + // The fault codes for the Spot Instance request, if any. + Fault *SpotInstanceStateFault `locationName:"fault" type:"structure"` - // Suppresses the specified device included in the block device mapping of the - // AMI. - NoDevice *string `type:"string"` + // The instance ID, if an instance has been launched to fulfill the Spot Instance + // request. + InstanceId *string `locationName:"instanceId" type:"string"` - // The virtual device name (ephemeralN). Instance store volumes are numbered - // starting from 0. An instance type with two available instance store volumes - // can specify mappings for ephemeral0 and ephemeral1.The number of available - // instance store volumes depends on the instance type. After you connect to - // the instance, you must mount the volume. - // - // Constraints: For M3 instances, you must specify instance store volumes in - // the block device mapping for the instance. When you launch an M3 instance, - // we ignore any instance store volumes specified in the block device mapping - // for the AMI. - VirtualName *string `type:"string"` + // The behavior when a Spot Instance is interrupted. + InstanceInterruptionBehavior *string `locationName:"instanceInterruptionBehavior" type:"string" enum:"InstanceInterruptionBehavior"` + + // The instance launch group. Launch groups are Spot Instances that launch together + // and terminate together. + LaunchGroup *string `locationName:"launchGroup" type:"string"` + + // Additional information for launching instances. + LaunchSpecification *LaunchSpecification `locationName:"launchSpecification" type:"structure"` + + // The Availability Zone in which the request is launched. + LaunchedAvailabilityZone *string `locationName:"launchedAvailabilityZone" type:"string"` + + // The product description associated with the Spot Instance. + ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` + + // The ID of the Spot Instance request. + SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` + + // The maximum price per hour that you are willing to pay for a Spot Instance. + SpotPrice *string `locationName:"spotPrice" type:"string"` + + // The state of the Spot Instance request. Spot status information helps track + // your Spot Instance requests. For more information, see Spot Status (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html) + // in the Amazon EC2 User Guide for Linux Instances. + State *string `locationName:"state" type:"string" enum:"SpotInstanceState"` + + // The status code and status message describing the Spot Instance request. + Status *SpotInstanceStatus `locationName:"status" type:"structure"` + + // Any tags assigned to the resource. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The Spot Instance request type. + Type *string `locationName:"type" type:"string" enum:"SpotInstanceType"` + + // The start date of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // The request becomes active at this date and time. + ValidFrom *time.Time `locationName:"validFrom" type:"timestamp"` + + // The end date of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + // If this is a one-time request, it remains active until all instances launch, + // the request is canceled, or this date is reached. If the request is persistent, + // it remains active until it is canceled or this date is reached. The default + // end date is 7 days from the current date. + ValidUntil *time.Time `locationName:"validUntil" type:"timestamp"` } // String returns the string representation -func (s ScheduledInstancesBlockDeviceMapping) String() string { +func (s SpotInstanceRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstancesBlockDeviceMapping) GoString() string { +func (s SpotInstanceRequest) GoString() string { return s.String() } -// SetDeviceName sets the DeviceName field's value. -func (s *ScheduledInstancesBlockDeviceMapping) SetDeviceName(v string) *ScheduledInstancesBlockDeviceMapping { - s.DeviceName = &v +// SetActualBlockHourlyPrice sets the ActualBlockHourlyPrice field's value. +func (s *SpotInstanceRequest) SetActualBlockHourlyPrice(v string) *SpotInstanceRequest { + s.ActualBlockHourlyPrice = &v return s } -// SetEbs sets the Ebs field's value. -func (s *ScheduledInstancesBlockDeviceMapping) SetEbs(v *ScheduledInstancesEbs) *ScheduledInstancesBlockDeviceMapping { - s.Ebs = v +// SetAvailabilityZoneGroup sets the AvailabilityZoneGroup field's value. +func (s *SpotInstanceRequest) SetAvailabilityZoneGroup(v string) *SpotInstanceRequest { + s.AvailabilityZoneGroup = &v return s } -// SetNoDevice sets the NoDevice field's value. -func (s *ScheduledInstancesBlockDeviceMapping) SetNoDevice(v string) *ScheduledInstancesBlockDeviceMapping { - s.NoDevice = &v +// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. +func (s *SpotInstanceRequest) SetBlockDurationMinutes(v int64) *SpotInstanceRequest { + s.BlockDurationMinutes = &v return s } -// SetVirtualName sets the VirtualName field's value. -func (s *ScheduledInstancesBlockDeviceMapping) SetVirtualName(v string) *ScheduledInstancesBlockDeviceMapping { - s.VirtualName = &v +// SetCreateTime sets the CreateTime field's value. +func (s *SpotInstanceRequest) SetCreateTime(v time.Time) *SpotInstanceRequest { + s.CreateTime = &v return s } -// Describes an EBS volume for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesEbs -type ScheduledInstancesEbs struct { - _ struct{} `type:"structure"` +// SetFault sets the Fault field's value. +func (s *SpotInstanceRequest) SetFault(v *SpotInstanceStateFault) *SpotInstanceRequest { + s.Fault = v + return s +} - // Indicates whether the volume is deleted on instance termination. - DeleteOnTermination *bool `type:"boolean"` +// SetInstanceId sets the InstanceId field's value. +func (s *SpotInstanceRequest) SetInstanceId(v string) *SpotInstanceRequest { + s.InstanceId = &v + return s +} - // Indicates whether the volume is encrypted. You can attached encrypted volumes - // only to instances that support them. - Encrypted *bool `type:"boolean"` +// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. +func (s *SpotInstanceRequest) SetInstanceInterruptionBehavior(v string) *SpotInstanceRequest { + s.InstanceInterruptionBehavior = &v + return s +} - // The number of I/O operations per second (IOPS) that the volume supports. - // For io1 volumes, this represents the number of IOPS that are provisioned - // for the volume. For gp2 volumes, this represents the baseline performance - // of the volume and the rate at which the volume accumulates I/O credits for - // bursting. For more information about gp2 baseline performance, I/O credits, - // and bursting, see Amazon EBS Volume Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) - // in the Amazon Elastic Compute Cloud User Guide. - // - // Constraint: Range is 100-20000 IOPS for io1 volumes and 100-10000 IOPS for - // gp2 volumes. - // - // Condition: This parameter is required for requests to create io1volumes; - // it is not used in requests to create gp2, st1, sc1, or standard volumes. - Iops *int64 `type:"integer"` +// SetLaunchGroup sets the LaunchGroup field's value. +func (s *SpotInstanceRequest) SetLaunchGroup(v string) *SpotInstanceRequest { + s.LaunchGroup = &v + return s +} - // The ID of the snapshot. - SnapshotId *string `type:"string"` +// SetLaunchSpecification sets the LaunchSpecification field's value. +func (s *SpotInstanceRequest) SetLaunchSpecification(v *LaunchSpecification) *SpotInstanceRequest { + s.LaunchSpecification = v + return s +} - // The size of the volume, in GiB. - // - // Default: If you're creating the volume from a snapshot and don't specify - // a volume size, the default is the snapshot size. - VolumeSize *int64 `type:"integer"` +// SetLaunchedAvailabilityZone sets the LaunchedAvailabilityZone field's value. +func (s *SpotInstanceRequest) SetLaunchedAvailabilityZone(v string) *SpotInstanceRequest { + s.LaunchedAvailabilityZone = &v + return s +} - // The volume type. gp2 for General Purpose SSD, io1 for Provisioned IOPS SSD, - // Throughput Optimized HDD for st1, Cold HDD for sc1, or standard for Magnetic. - // - // Default: standard - VolumeType *string `type:"string"` +// SetProductDescription sets the ProductDescription field's value. +func (s *SpotInstanceRequest) SetProductDescription(v string) *SpotInstanceRequest { + s.ProductDescription = &v + return s } -// String returns the string representation -func (s ScheduledInstancesEbs) String() string { - return awsutil.Prettify(s) +// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. +func (s *SpotInstanceRequest) SetSpotInstanceRequestId(v string) *SpotInstanceRequest { + s.SpotInstanceRequestId = &v + return s } -// GoString returns the string representation -func (s ScheduledInstancesEbs) GoString() string { - return s.String() +// SetSpotPrice sets the SpotPrice field's value. +func (s *SpotInstanceRequest) SetSpotPrice(v string) *SpotInstanceRequest { + s.SpotPrice = &v + return s } -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *ScheduledInstancesEbs) SetDeleteOnTermination(v bool) *ScheduledInstancesEbs { - s.DeleteOnTermination = &v +// SetState sets the State field's value. +func (s *SpotInstanceRequest) SetState(v string) *SpotInstanceRequest { + s.State = &v return s } -// SetEncrypted sets the Encrypted field's value. -func (s *ScheduledInstancesEbs) SetEncrypted(v bool) *ScheduledInstancesEbs { - s.Encrypted = &v +// SetStatus sets the Status field's value. +func (s *SpotInstanceRequest) SetStatus(v *SpotInstanceStatus) *SpotInstanceRequest { + s.Status = v return s } -// SetIops sets the Iops field's value. -func (s *ScheduledInstancesEbs) SetIops(v int64) *ScheduledInstancesEbs { - s.Iops = &v +// SetTags sets the Tags field's value. +func (s *SpotInstanceRequest) SetTags(v []*Tag) *SpotInstanceRequest { + s.Tags = v return s } -// SetSnapshotId sets the SnapshotId field's value. -func (s *ScheduledInstancesEbs) SetSnapshotId(v string) *ScheduledInstancesEbs { - s.SnapshotId = &v +// SetType sets the Type field's value. +func (s *SpotInstanceRequest) SetType(v string) *SpotInstanceRequest { + s.Type = &v return s } -// SetVolumeSize sets the VolumeSize field's value. -func (s *ScheduledInstancesEbs) SetVolumeSize(v int64) *ScheduledInstancesEbs { - s.VolumeSize = &v +// SetValidFrom sets the ValidFrom field's value. +func (s *SpotInstanceRequest) SetValidFrom(v time.Time) *SpotInstanceRequest { + s.ValidFrom = &v return s } -// SetVolumeType sets the VolumeType field's value. -func (s *ScheduledInstancesEbs) SetVolumeType(v string) *ScheduledInstancesEbs { - s.VolumeType = &v +// SetValidUntil sets the ValidUntil field's value. +func (s *SpotInstanceRequest) SetValidUntil(v time.Time) *SpotInstanceRequest { + s.ValidUntil = &v return s } -// Describes an IAM instance profile for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesIamInstanceProfile -type ScheduledInstancesIamInstanceProfile struct { +// Describes a Spot Instance state change. +type SpotInstanceStateFault struct { _ struct{} `type:"structure"` - // The Amazon Resource Name (ARN). - Arn *string `type:"string"` + // The reason code for the Spot Instance state change. + Code *string `locationName:"code" type:"string"` - // The name. - Name *string `type:"string"` + // The message for the Spot Instance state change. + Message *string `locationName:"message" type:"string"` } // String returns the string representation -func (s ScheduledInstancesIamInstanceProfile) String() string { +func (s SpotInstanceStateFault) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstancesIamInstanceProfile) GoString() string { +func (s SpotInstanceStateFault) GoString() string { return s.String() } -// SetArn sets the Arn field's value. -func (s *ScheduledInstancesIamInstanceProfile) SetArn(v string) *ScheduledInstancesIamInstanceProfile { - s.Arn = &v +// SetCode sets the Code field's value. +func (s *SpotInstanceStateFault) SetCode(v string) *SpotInstanceStateFault { + s.Code = &v return s } -// SetName sets the Name field's value. -func (s *ScheduledInstancesIamInstanceProfile) SetName(v string) *ScheduledInstancesIamInstanceProfile { - s.Name = &v +// SetMessage sets the Message field's value. +func (s *SpotInstanceStateFault) SetMessage(v string) *SpotInstanceStateFault { + s.Message = &v return s } -// Describes an IPv6 address. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesIpv6Address -type ScheduledInstancesIpv6Address struct { +// Describes the status of a Spot Instance request. +type SpotInstanceStatus struct { _ struct{} `type:"structure"` - // The IPv6 address. - Ipv6Address *string `type:"string"` + // The status code. For a list of status codes, see Spot Status Codes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html#spot-instance-bid-status-understand) + // in the Amazon EC2 User Guide for Linux Instances. + Code *string `locationName:"code" type:"string"` + + // The description for the status code. + Message *string `locationName:"message" type:"string"` + + // The date and time of the most recent status update, in UTC format (for example, + // YYYY-MM-DDTHH:MM:SSZ). + UpdateTime *time.Time `locationName:"updateTime" type:"timestamp"` } // String returns the string representation -func (s ScheduledInstancesIpv6Address) String() string { +func (s SpotInstanceStatus) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstancesIpv6Address) GoString() string { +func (s SpotInstanceStatus) GoString() string { return s.String() } -// SetIpv6Address sets the Ipv6Address field's value. -func (s *ScheduledInstancesIpv6Address) SetIpv6Address(v string) *ScheduledInstancesIpv6Address { - s.Ipv6Address = &v +// SetCode sets the Code field's value. +func (s *SpotInstanceStatus) SetCode(v string) *SpotInstanceStatus { + s.Code = &v return s } -// Describes the launch specification for a Scheduled Instance. -// -// If you are launching the Scheduled Instance in EC2-VPC, you must specify -// the ID of the subnet. You can specify the subnet using either SubnetId or -// NetworkInterface. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesLaunchSpecification -type ScheduledInstancesLaunchSpecification struct { +// SetMessage sets the Message field's value. +func (s *SpotInstanceStatus) SetMessage(v string) *SpotInstanceStatus { + s.Message = &v + return s +} + +// SetUpdateTime sets the UpdateTime field's value. +func (s *SpotInstanceStatus) SetUpdateTime(v time.Time) *SpotInstanceStatus { + s.UpdateTime = &v + return s +} + +// The options for Spot Instances. +type SpotMarketOptions struct { _ struct{} `type:"structure"` - // One or more block device mapping entries. - BlockDeviceMappings []*ScheduledInstancesBlockDeviceMapping `locationName:"BlockDeviceMapping" locationNameList:"BlockDeviceMapping" type:"list"` + // The required duration for the Spot Instances (also known as Spot blocks), + // in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, + // or 360). + BlockDurationMinutes *int64 `type:"integer"` - // Indicates whether the instances are optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS-optimized - // instance. - // - // Default: false - EbsOptimized *bool `type:"boolean"` + // The behavior when a Spot Instance is interrupted. The default is terminate. + InstanceInterruptionBehavior *string `type:"string" enum:"InstanceInterruptionBehavior"` - // The IAM instance profile. - IamInstanceProfile *ScheduledInstancesIamInstanceProfile `type:"structure"` + // The maximum hourly price you're willing to pay for the Spot Instances. The + // default is the On-Demand price. + MaxPrice *string `type:"string"` - // The ID of the Amazon Machine Image (AMI). - // - // ImageId is a required field - ImageId *string `type:"string" required:"true"` + // The Spot Instance request type. For RunInstances, persistent Spot Instance + // requests are only supported when InstanceInterruptionBehavior is set to either + // hibernate or stop. + SpotInstanceType *string `type:"string" enum:"SpotInstanceType"` - // The instance type. - InstanceType *string `type:"string"` + // The end date of the request. For a one-time request, the request remains + // active until all instances launch, the request is canceled, or this date + // is reached. If the request is persistent, it remains active until it is canceled + // or this date and time is reached. The default end date is 7 days from the + // current date. + ValidUntil *time.Time `type:"timestamp"` +} - // The ID of the kernel. - KernelId *string `type:"string"` +// String returns the string representation +func (s SpotMarketOptions) String() string { + return awsutil.Prettify(s) +} - // The name of the key pair. - KeyName *string `type:"string"` +// GoString returns the string representation +func (s SpotMarketOptions) GoString() string { + return s.String() +} - // Enable or disable monitoring for the instances. - Monitoring *ScheduledInstancesMonitoring `type:"structure"` +// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. +func (s *SpotMarketOptions) SetBlockDurationMinutes(v int64) *SpotMarketOptions { + s.BlockDurationMinutes = &v + return s +} - // One or more network interfaces. - NetworkInterfaces []*ScheduledInstancesNetworkInterface `locationName:"NetworkInterface" locationNameList:"NetworkInterface" type:"list"` +// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. +func (s *SpotMarketOptions) SetInstanceInterruptionBehavior(v string) *SpotMarketOptions { + s.InstanceInterruptionBehavior = &v + return s +} - // The placement information. - Placement *ScheduledInstancesPlacement `type:"structure"` +// SetMaxPrice sets the MaxPrice field's value. +func (s *SpotMarketOptions) SetMaxPrice(v string) *SpotMarketOptions { + s.MaxPrice = &v + return s +} - // The ID of the RAM disk. - RamdiskId *string `type:"string"` +// SetSpotInstanceType sets the SpotInstanceType field's value. +func (s *SpotMarketOptions) SetSpotInstanceType(v string) *SpotMarketOptions { + s.SpotInstanceType = &v + return s +} - // The IDs of one or more security groups. - SecurityGroupIds []*string `locationName:"SecurityGroupId" locationNameList:"SecurityGroupId" type:"list"` +// SetValidUntil sets the ValidUntil field's value. +func (s *SpotMarketOptions) SetValidUntil(v time.Time) *SpotMarketOptions { + s.ValidUntil = &v + return s +} + +// Describes the configuration of Spot Instances in an EC2 Fleet. +type SpotOptions struct { + _ struct{} `type:"structure"` + + // Indicates how to allocate the target Spot Instance capacity across the Spot + // Instance pools specified by the EC2 Fleet. + // + // If the allocation strategy is lowest-price, EC2 Fleet launches instances + // from the Spot Instance pools with the lowest price. This is the default allocation + // strategy. + // + // If the allocation strategy is diversified, EC2 Fleet launches instances from + // all the Spot Instance pools that you specify. + // + // If the allocation strategy is capacity-optimized, EC2 Fleet launches instances + // from Spot Instance pools with optimal capacity for the number of instances + // that are launching. + AllocationStrategy *string `locationName:"allocationStrategy" type:"string" enum:"SpotAllocationStrategy"` + + // The behavior when a Spot Instance is interrupted. The default is terminate. + InstanceInterruptionBehavior *string `locationName:"instanceInterruptionBehavior" type:"string" enum:"SpotInstanceInterruptionBehavior"` + + // The number of Spot pools across which to allocate your target Spot capacity. + // Valid only when AllocationStrategy is set to lowest-price. EC2 Fleet selects + // the cheapest Spot pools and evenly allocates your target Spot capacity across + // the number of Spot pools that you specify. + InstancePoolsToUseCount *int64 `locationName:"instancePoolsToUseCount" type:"integer"` + + // The maximum amount per hour for Spot Instances that you're willing to pay. + MaxTotalPrice *string `locationName:"maxTotalPrice" type:"string"` + + // The minimum target capacity for Spot Instances in the fleet. If the minimum + // target capacity is not reached, the fleet launches no instances. + MinTargetCapacity *int64 `locationName:"minTargetCapacity" type:"integer"` - // The ID of the subnet in which to launch the instances. - SubnetId *string `type:"string"` + // Indicates that the fleet launches all Spot Instances into a single Availability + // Zone. + SingleAvailabilityZone *bool `locationName:"singleAvailabilityZone" type:"boolean"` - // The base64-encoded MIME user data. - UserData *string `type:"string"` + // Indicates that the fleet uses a single instance type to launch all Spot Instances + // in the fleet. + SingleInstanceType *bool `locationName:"singleInstanceType" type:"boolean"` } // String returns the string representation -func (s ScheduledInstancesLaunchSpecification) String() string { +func (s SpotOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstancesLaunchSpecification) GoString() string { +func (s SpotOptions) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *ScheduledInstancesLaunchSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "ScheduledInstancesLaunchSpecification"} - if s.ImageId == nil { - invalidParams.Add(request.NewErrParamRequired("ImageId")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetAllocationStrategy sets the AllocationStrategy field's value. +func (s *SpotOptions) SetAllocationStrategy(v string) *SpotOptions { + s.AllocationStrategy = &v + return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *ScheduledInstancesLaunchSpecification) SetBlockDeviceMappings(v []*ScheduledInstancesBlockDeviceMapping) *ScheduledInstancesLaunchSpecification { - s.BlockDeviceMappings = v +// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. +func (s *SpotOptions) SetInstanceInterruptionBehavior(v string) *SpotOptions { + s.InstanceInterruptionBehavior = &v return s } -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *ScheduledInstancesLaunchSpecification) SetEbsOptimized(v bool) *ScheduledInstancesLaunchSpecification { - s.EbsOptimized = &v +// SetInstancePoolsToUseCount sets the InstancePoolsToUseCount field's value. +func (s *SpotOptions) SetInstancePoolsToUseCount(v int64) *SpotOptions { + s.InstancePoolsToUseCount = &v return s } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *ScheduledInstancesLaunchSpecification) SetIamInstanceProfile(v *ScheduledInstancesIamInstanceProfile) *ScheduledInstancesLaunchSpecification { - s.IamInstanceProfile = v +// SetMaxTotalPrice sets the MaxTotalPrice field's value. +func (s *SpotOptions) SetMaxTotalPrice(v string) *SpotOptions { + s.MaxTotalPrice = &v return s } -// SetImageId sets the ImageId field's value. -func (s *ScheduledInstancesLaunchSpecification) SetImageId(v string) *ScheduledInstancesLaunchSpecification { - s.ImageId = &v +// SetMinTargetCapacity sets the MinTargetCapacity field's value. +func (s *SpotOptions) SetMinTargetCapacity(v int64) *SpotOptions { + s.MinTargetCapacity = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *ScheduledInstancesLaunchSpecification) SetInstanceType(v string) *ScheduledInstancesLaunchSpecification { - s.InstanceType = &v +// SetSingleAvailabilityZone sets the SingleAvailabilityZone field's value. +func (s *SpotOptions) SetSingleAvailabilityZone(v bool) *SpotOptions { + s.SingleAvailabilityZone = &v return s } -// SetKernelId sets the KernelId field's value. -func (s *ScheduledInstancesLaunchSpecification) SetKernelId(v string) *ScheduledInstancesLaunchSpecification { - s.KernelId = &v +// SetSingleInstanceType sets the SingleInstanceType field's value. +func (s *SpotOptions) SetSingleInstanceType(v bool) *SpotOptions { + s.SingleInstanceType = &v return s } -// SetKeyName sets the KeyName field's value. -func (s *ScheduledInstancesLaunchSpecification) SetKeyName(v string) *ScheduledInstancesLaunchSpecification { - s.KeyName = &v - return s +// Describes the configuration of Spot Instances in an EC2 Fleet request. +type SpotOptionsRequest struct { + _ struct{} `type:"structure"` + + // Indicates how to allocate the target Spot Instance capacity across the Spot + // Instance pools specified by the EC2 Fleet. + // + // If the allocation strategy is lowest-price, EC2 Fleet launches instances + // from the Spot Instance pools with the lowest price. This is the default allocation + // strategy. + // + // If the allocation strategy is diversified, EC2 Fleet launches instances from + // all the Spot Instance pools that you specify. + // + // If the allocation strategy is capacity-optimized, EC2 Fleet launches instances + // from Spot Instance pools with optimal capacity for the number of instances + // that are launching. + AllocationStrategy *string `type:"string" enum:"SpotAllocationStrategy"` + + // The behavior when a Spot Instance is interrupted. The default is terminate. + InstanceInterruptionBehavior *string `type:"string" enum:"SpotInstanceInterruptionBehavior"` + + // The number of Spot pools across which to allocate your target Spot capacity. + // Valid only when Spot AllocationStrategy is set to lowest-price. EC2 Fleet + // selects the cheapest Spot pools and evenly allocates your target Spot capacity + // across the number of Spot pools that you specify. + InstancePoolsToUseCount *int64 `type:"integer"` + + // The maximum amount per hour for Spot Instances that you're willing to pay. + MaxTotalPrice *string `type:"string"` + + // The minimum target capacity for Spot Instances in the fleet. If the minimum + // target capacity is not reached, the fleet launches no instances. + MinTargetCapacity *int64 `type:"integer"` + + // Indicates that the fleet launches all Spot Instances into a single Availability + // Zone. + SingleAvailabilityZone *bool `type:"boolean"` + + // Indicates that the fleet uses a single instance type to launch all Spot Instances + // in the fleet. + SingleInstanceType *bool `type:"boolean"` } -// SetMonitoring sets the Monitoring field's value. -func (s *ScheduledInstancesLaunchSpecification) SetMonitoring(v *ScheduledInstancesMonitoring) *ScheduledInstancesLaunchSpecification { - s.Monitoring = v +// String returns the string representation +func (s SpotOptionsRequest) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SpotOptionsRequest) GoString() string { + return s.String() +} + +// SetAllocationStrategy sets the AllocationStrategy field's value. +func (s *SpotOptionsRequest) SetAllocationStrategy(v string) *SpotOptionsRequest { + s.AllocationStrategy = &v return s } -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *ScheduledInstancesLaunchSpecification) SetNetworkInterfaces(v []*ScheduledInstancesNetworkInterface) *ScheduledInstancesLaunchSpecification { - s.NetworkInterfaces = v +// SetInstanceInterruptionBehavior sets the InstanceInterruptionBehavior field's value. +func (s *SpotOptionsRequest) SetInstanceInterruptionBehavior(v string) *SpotOptionsRequest { + s.InstanceInterruptionBehavior = &v return s } -// SetPlacement sets the Placement field's value. -func (s *ScheduledInstancesLaunchSpecification) SetPlacement(v *ScheduledInstancesPlacement) *ScheduledInstancesLaunchSpecification { - s.Placement = v +// SetInstancePoolsToUseCount sets the InstancePoolsToUseCount field's value. +func (s *SpotOptionsRequest) SetInstancePoolsToUseCount(v int64) *SpotOptionsRequest { + s.InstancePoolsToUseCount = &v return s } -// SetRamdiskId sets the RamdiskId field's value. -func (s *ScheduledInstancesLaunchSpecification) SetRamdiskId(v string) *ScheduledInstancesLaunchSpecification { - s.RamdiskId = &v +// SetMaxTotalPrice sets the MaxTotalPrice field's value. +func (s *SpotOptionsRequest) SetMaxTotalPrice(v string) *SpotOptionsRequest { + s.MaxTotalPrice = &v return s } -// SetSecurityGroupIds sets the SecurityGroupIds field's value. -func (s *ScheduledInstancesLaunchSpecification) SetSecurityGroupIds(v []*string) *ScheduledInstancesLaunchSpecification { - s.SecurityGroupIds = v +// SetMinTargetCapacity sets the MinTargetCapacity field's value. +func (s *SpotOptionsRequest) SetMinTargetCapacity(v int64) *SpotOptionsRequest { + s.MinTargetCapacity = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *ScheduledInstancesLaunchSpecification) SetSubnetId(v string) *ScheduledInstancesLaunchSpecification { - s.SubnetId = &v +// SetSingleAvailabilityZone sets the SingleAvailabilityZone field's value. +func (s *SpotOptionsRequest) SetSingleAvailabilityZone(v bool) *SpotOptionsRequest { + s.SingleAvailabilityZone = &v return s } -// SetUserData sets the UserData field's value. -func (s *ScheduledInstancesLaunchSpecification) SetUserData(v string) *ScheduledInstancesLaunchSpecification { - s.UserData = &v +// SetSingleInstanceType sets the SingleInstanceType field's value. +func (s *SpotOptionsRequest) SetSingleInstanceType(v bool) *SpotOptionsRequest { + s.SingleInstanceType = &v return s } -// Describes whether monitoring is enabled for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesMonitoring -type ScheduledInstancesMonitoring struct { +// Describes Spot Instance placement. +type SpotPlacement struct { _ struct{} `type:"structure"` - // Indicates whether monitoring is enabled. - Enabled *bool `type:"boolean"` + // The Availability Zone. + // + // [Spot Fleet only] To specify multiple Availability Zones, separate them using + // commas; for example, "us-west-2a, us-west-2b". + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + + // The name of the placement group. + GroupName *string `locationName:"groupName" type:"string"` + + // The tenancy of the instance (if the instance is running in a VPC). An instance + // with a tenancy of dedicated runs on single-tenant hardware. The host tenancy + // is not supported for Spot Instances. + Tenancy *string `locationName:"tenancy" type:"string" enum:"Tenancy"` } // String returns the string representation -func (s ScheduledInstancesMonitoring) String() string { +func (s SpotPlacement) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstancesMonitoring) GoString() string { +func (s SpotPlacement) GoString() string { return s.String() } -// SetEnabled sets the Enabled field's value. -func (s *ScheduledInstancesMonitoring) SetEnabled(v bool) *ScheduledInstancesMonitoring { - s.Enabled = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *SpotPlacement) SetAvailabilityZone(v string) *SpotPlacement { + s.AvailabilityZone = &v return s } -// Describes a network interface for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesNetworkInterface -type ScheduledInstancesNetworkInterface struct { - _ struct{} `type:"structure"` - - // Indicates whether to assign a public IPv4 address to instances launched in - // a VPC. The public IPv4 address can only be assigned to a network interface - // for eth0, and can only be assigned to a new network interface, not an existing - // one. You cannot specify more than one network interface in the request. If - // launching into a default subnet, the default value is true. - AssociatePublicIpAddress *bool `type:"boolean"` - - // Indicates whether to delete the interface when the instance is terminated. - DeleteOnTermination *bool `type:"boolean"` - - // The description. - Description *string `type:"string"` - - // The index of the device for the network interface attachment. - DeviceIndex *int64 `type:"integer"` - - // The IDs of one or more security groups. - Groups []*string `locationName:"Group" locationNameList:"SecurityGroupId" type:"list"` +// SetGroupName sets the GroupName field's value. +func (s *SpotPlacement) SetGroupName(v string) *SpotPlacement { + s.GroupName = &v + return s +} - // The number of IPv6 addresses to assign to the network interface. The IPv6 - // addresses are automatically selected from the subnet range. - Ipv6AddressCount *int64 `type:"integer"` +// SetTenancy sets the Tenancy field's value. +func (s *SpotPlacement) SetTenancy(v string) *SpotPlacement { + s.Tenancy = &v + return s +} - // One or more specific IPv6 addresses from the subnet range. - Ipv6Addresses []*ScheduledInstancesIpv6Address `locationName:"Ipv6Address" locationNameList:"Ipv6Address" type:"list"` +// Describes the maximum price per hour that you are willing to pay for a Spot +// Instance. +type SpotPrice struct { + _ struct{} `type:"structure"` - // The ID of the network interface. - NetworkInterfaceId *string `type:"string"` + // The Availability Zone. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // The IPv4 address of the network interface within the subnet. - PrivateIpAddress *string `type:"string"` + // The instance type. + InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - // The private IPv4 addresses. - PrivateIpAddressConfigs []*ScheduledInstancesPrivateIpAddressConfig `locationName:"PrivateIpAddressConfig" locationNameList:"PrivateIpAddressConfigSet" type:"list"` + // A general description of the AMI. + ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` - // The number of secondary private IPv4 addresses. - SecondaryPrivateIpAddressCount *int64 `type:"integer"` + // The maximum price per hour that you are willing to pay for a Spot Instance. + SpotPrice *string `locationName:"spotPrice" type:"string"` - // The ID of the subnet. - SubnetId *string `type:"string"` + // The date and time the request was created, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). + Timestamp *time.Time `locationName:"timestamp" type:"timestamp"` } // String returns the string representation -func (s ScheduledInstancesNetworkInterface) String() string { +func (s SpotPrice) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstancesNetworkInterface) GoString() string { +func (s SpotPrice) GoString() string { return s.String() } -// SetAssociatePublicIpAddress sets the AssociatePublicIpAddress field's value. -func (s *ScheduledInstancesNetworkInterface) SetAssociatePublicIpAddress(v bool) *ScheduledInstancesNetworkInterface { - s.AssociatePublicIpAddress = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *SpotPrice) SetAvailabilityZone(v string) *SpotPrice { + s.AvailabilityZone = &v return s } -// SetDeleteOnTermination sets the DeleteOnTermination field's value. -func (s *ScheduledInstancesNetworkInterface) SetDeleteOnTermination(v bool) *ScheduledInstancesNetworkInterface { - s.DeleteOnTermination = &v +// SetInstanceType sets the InstanceType field's value. +func (s *SpotPrice) SetInstanceType(v string) *SpotPrice { + s.InstanceType = &v return s } -// SetDescription sets the Description field's value. -func (s *ScheduledInstancesNetworkInterface) SetDescription(v string) *ScheduledInstancesNetworkInterface { - s.Description = &v +// SetProductDescription sets the ProductDescription field's value. +func (s *SpotPrice) SetProductDescription(v string) *SpotPrice { + s.ProductDescription = &v return s } -// SetDeviceIndex sets the DeviceIndex field's value. -func (s *ScheduledInstancesNetworkInterface) SetDeviceIndex(v int64) *ScheduledInstancesNetworkInterface { - s.DeviceIndex = &v +// SetSpotPrice sets the SpotPrice field's value. +func (s *SpotPrice) SetSpotPrice(v string) *SpotPrice { + s.SpotPrice = &v return s } -// SetGroups sets the Groups field's value. -func (s *ScheduledInstancesNetworkInterface) SetGroups(v []*string) *ScheduledInstancesNetworkInterface { - s.Groups = v +// SetTimestamp sets the Timestamp field's value. +func (s *SpotPrice) SetTimestamp(v time.Time) *SpotPrice { + s.Timestamp = &v return s } -// SetIpv6AddressCount sets the Ipv6AddressCount field's value. -func (s *ScheduledInstancesNetworkInterface) SetIpv6AddressCount(v int64) *ScheduledInstancesNetworkInterface { - s.Ipv6AddressCount = &v - return s +// Describes a stale rule in a security group. +type StaleIpPermission struct { + _ struct{} `type:"structure"` + + // The start of the port range for the TCP and UDP protocols, or an ICMP type + // number. A value of -1 indicates all ICMP types. + FromPort *int64 `locationName:"fromPort" type:"integer"` + + // The IP protocol name (for tcp, udp, and icmp) or number (see Protocol Numbers) + // (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). + IpProtocol *string `locationName:"ipProtocol" type:"string"` + + // The IP ranges. Not applicable for stale security group rules. + IpRanges []*string `locationName:"ipRanges" locationNameList:"item" type:"list"` + + // The prefix list IDs for an AWS service. Not applicable for stale security + // group rules. + PrefixListIds []*string `locationName:"prefixListIds" locationNameList:"item" type:"list"` + + // The end of the port range for the TCP and UDP protocols, or an ICMP type + // number. A value of -1 indicates all ICMP types. + ToPort *int64 `locationName:"toPort" type:"integer"` + + // The security group pairs. Returns the ID of the referenced security group + // and VPC, and the ID and status of the VPC peering connection. + UserIdGroupPairs []*UserIdGroupPair `locationName:"groups" locationNameList:"item" type:"list"` } -// SetIpv6Addresses sets the Ipv6Addresses field's value. -func (s *ScheduledInstancesNetworkInterface) SetIpv6Addresses(v []*ScheduledInstancesIpv6Address) *ScheduledInstancesNetworkInterface { - s.Ipv6Addresses = v +// String returns the string representation +func (s StaleIpPermission) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s StaleIpPermission) GoString() string { + return s.String() +} + +// SetFromPort sets the FromPort field's value. +func (s *StaleIpPermission) SetFromPort(v int64) *StaleIpPermission { + s.FromPort = &v return s } -// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. -func (s *ScheduledInstancesNetworkInterface) SetNetworkInterfaceId(v string) *ScheduledInstancesNetworkInterface { - s.NetworkInterfaceId = &v +// SetIpProtocol sets the IpProtocol field's value. +func (s *StaleIpPermission) SetIpProtocol(v string) *StaleIpPermission { + s.IpProtocol = &v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *ScheduledInstancesNetworkInterface) SetPrivateIpAddress(v string) *ScheduledInstancesNetworkInterface { - s.PrivateIpAddress = &v +// SetIpRanges sets the IpRanges field's value. +func (s *StaleIpPermission) SetIpRanges(v []*string) *StaleIpPermission { + s.IpRanges = v return s } -// SetPrivateIpAddressConfigs sets the PrivateIpAddressConfigs field's value. -func (s *ScheduledInstancesNetworkInterface) SetPrivateIpAddressConfigs(v []*ScheduledInstancesPrivateIpAddressConfig) *ScheduledInstancesNetworkInterface { - s.PrivateIpAddressConfigs = v +// SetPrefixListIds sets the PrefixListIds field's value. +func (s *StaleIpPermission) SetPrefixListIds(v []*string) *StaleIpPermission { + s.PrefixListIds = v return s } -// SetSecondaryPrivateIpAddressCount sets the SecondaryPrivateIpAddressCount field's value. -func (s *ScheduledInstancesNetworkInterface) SetSecondaryPrivateIpAddressCount(v int64) *ScheduledInstancesNetworkInterface { - s.SecondaryPrivateIpAddressCount = &v +// SetToPort sets the ToPort field's value. +func (s *StaleIpPermission) SetToPort(v int64) *StaleIpPermission { + s.ToPort = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *ScheduledInstancesNetworkInterface) SetSubnetId(v string) *ScheduledInstancesNetworkInterface { - s.SubnetId = &v +// SetUserIdGroupPairs sets the UserIdGroupPairs field's value. +func (s *StaleIpPermission) SetUserIdGroupPairs(v []*UserIdGroupPair) *StaleIpPermission { + s.UserIdGroupPairs = v return s } -// Describes the placement for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesPlacement -type ScheduledInstancesPlacement struct { +// Describes a stale security group (a security group that contains stale rules). +type StaleSecurityGroup struct { _ struct{} `type:"structure"` - // The Availability Zone. - AvailabilityZone *string `type:"string"` + // The description of the security group. + Description *string `locationName:"description" type:"string"` - // The name of the placement group. - GroupName *string `type:"string"` + // The ID of the security group. + GroupId *string `locationName:"groupId" type:"string"` + + // The name of the security group. + GroupName *string `locationName:"groupName" type:"string"` + + // Information about the stale inbound rules in the security group. + StaleIpPermissions []*StaleIpPermission `locationName:"staleIpPermissions" locationNameList:"item" type:"list"` + + // Information about the stale outbound rules in the security group. + StaleIpPermissionsEgress []*StaleIpPermission `locationName:"staleIpPermissionsEgress" locationNameList:"item" type:"list"` + + // The ID of the VPC for the security group. + VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s ScheduledInstancesPlacement) String() string { +func (s StaleSecurityGroup) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstancesPlacement) GoString() string { +func (s StaleSecurityGroup) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *ScheduledInstancesPlacement) SetAvailabilityZone(v string) *ScheduledInstancesPlacement { - s.AvailabilityZone = &v +// SetDescription sets the Description field's value. +func (s *StaleSecurityGroup) SetDescription(v string) *StaleSecurityGroup { + s.Description = &v + return s +} + +// SetGroupId sets the GroupId field's value. +func (s *StaleSecurityGroup) SetGroupId(v string) *StaleSecurityGroup { + s.GroupId = &v return s } // SetGroupName sets the GroupName field's value. -func (s *ScheduledInstancesPlacement) SetGroupName(v string) *ScheduledInstancesPlacement { +func (s *StaleSecurityGroup) SetGroupName(v string) *StaleSecurityGroup { s.GroupName = &v return s } -// Describes a private IPv4 address for a Scheduled Instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesPrivateIpAddressConfig -type ScheduledInstancesPrivateIpAddressConfig struct { +// SetStaleIpPermissions sets the StaleIpPermissions field's value. +func (s *StaleSecurityGroup) SetStaleIpPermissions(v []*StaleIpPermission) *StaleSecurityGroup { + s.StaleIpPermissions = v + return s +} + +// SetStaleIpPermissionsEgress sets the StaleIpPermissionsEgress field's value. +func (s *StaleSecurityGroup) SetStaleIpPermissionsEgress(v []*StaleIpPermission) *StaleSecurityGroup { + s.StaleIpPermissionsEgress = v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *StaleSecurityGroup) SetVpcId(v string) *StaleSecurityGroup { + s.VpcId = &v + return s +} + +type StartInstancesInput struct { _ struct{} `type:"structure"` - // Indicates whether this is a primary IPv4 address. Otherwise, this is a secondary - // IPv4 address. - Primary *bool `type:"boolean"` + // Reserved. + AdditionalInfo *string `locationName:"additionalInfo" type:"string"` - // The IPv4 address. - PrivateIpAddress *string `type:"string"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The IDs of the instances. + // + // InstanceIds is a required field + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` } // String returns the string representation -func (s ScheduledInstancesPrivateIpAddressConfig) String() string { +func (s StartInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s ScheduledInstancesPrivateIpAddressConfig) GoString() string { +func (s StartInstancesInput) GoString() string { return s.String() } -// SetPrimary sets the Primary field's value. -func (s *ScheduledInstancesPrivateIpAddressConfig) SetPrimary(v bool) *ScheduledInstancesPrivateIpAddressConfig { - s.Primary = &v +// Validate inspects the fields of the type to determine if they are valid. +func (s *StartInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "StartInstancesInput"} + if s.InstanceIds == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAdditionalInfo sets the AdditionalInfo field's value. +func (s *StartInstancesInput) SetAdditionalInfo(v string) *StartInstancesInput { + s.AdditionalInfo = &v return s } -// SetPrivateIpAddress sets the PrivateIpAddress field's value. -func (s *ScheduledInstancesPrivateIpAddressConfig) SetPrivateIpAddress(v string) *ScheduledInstancesPrivateIpAddressConfig { - s.PrivateIpAddress = &v +// SetDryRun sets the DryRun field's value. +func (s *StartInstancesInput) SetDryRun(v bool) *StartInstancesInput { + s.DryRun = &v return s } -// Describes a security group -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroup -type SecurityGroup struct { - _ struct{} `type:"structure"` +// SetInstanceIds sets the InstanceIds field's value. +func (s *StartInstancesInput) SetInstanceIds(v []*string) *StartInstancesInput { + s.InstanceIds = v + return s +} - // A description of the security group. - Description *string `locationName:"groupDescription" type:"string"` +type StartInstancesOutput struct { + _ struct{} `type:"structure"` - // The ID of the security group. - GroupId *string `locationName:"groupId" type:"string"` + // Information about the started instances. + StartingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` +} - // The name of the security group. - GroupName *string `locationName:"groupName" type:"string"` +// String returns the string representation +func (s StartInstancesOutput) String() string { + return awsutil.Prettify(s) +} - // One or more inbound rules associated with the security group. - IpPermissions []*IpPermission `locationName:"ipPermissions" locationNameList:"item" type:"list"` +// GoString returns the string representation +func (s StartInstancesOutput) GoString() string { + return s.String() +} - // [EC2-VPC] One or more outbound rules associated with the security group. - IpPermissionsEgress []*IpPermission `locationName:"ipPermissionsEgress" locationNameList:"item" type:"list"` +// SetStartingInstances sets the StartingInstances field's value. +func (s *StartInstancesOutput) SetStartingInstances(v []*InstanceStateChange) *StartInstancesOutput { + s.StartingInstances = v + return s +} - // The AWS account ID of the owner of the security group. - OwnerId *string `locationName:"ownerId" type:"string"` +// Describes a state change. +type StateReason struct { + _ struct{} `type:"structure"` - // Any tags assigned to the security group. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The reason code for the state change. + Code *string `locationName:"code" type:"string"` - // [EC2-VPC] The ID of the VPC for the security group. - VpcId *string `locationName:"vpcId" type:"string"` + // The message for the state change. + // + // * Server.InsufficientInstanceCapacity: There was insufficient capacity + // available to satisfy the launch request. + // + // * Server.InternalError: An internal error caused the instance to terminate + // during launch. + // + // * Server.ScheduledStop: The instance was stopped due to a scheduled retirement. + // + // * Server.SpotInstanceShutdown: The instance was stopped because the number + // of Spot requests with a maximum price equal to or higher than the Spot + // price exceeded available capacity or because of an increase in the Spot + // price. + // + // * Server.SpotInstanceTermination: The instance was terminated because + // the number of Spot requests with a maximum price equal to or higher than + // the Spot price exceeded available capacity or because of an increase in + // the Spot price. + // + // * Client.InstanceInitiatedShutdown: The instance was shut down using the + // shutdown -h command from the instance. + // + // * Client.InstanceTerminated: The instance was terminated or rebooted during + // AMI creation. + // + // * Client.InternalError: A client error caused the instance to terminate + // during launch. + // + // * Client.InvalidSnapshot.NotFound: The specified snapshot was not found. + // + // * Client.UserInitiatedHibernate: Hibernation was initiated on the instance. + // + // * Client.UserInitiatedShutdown: The instance was shut down using the Amazon + // EC2 API. + // + // * Client.VolumeLimitExceeded: The limit on the number of EBS volumes or + // total storage was exceeded. Decrease usage or request an increase in your + // account limits. + Message *string `locationName:"message" type:"string"` } // String returns the string representation -func (s SecurityGroup) String() string { +func (s StateReason) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SecurityGroup) GoString() string { +func (s StateReason) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *SecurityGroup) SetDescription(v string) *SecurityGroup { - s.Description = &v +// SetCode sets the Code field's value. +func (s *StateReason) SetCode(v string) *StateReason { + s.Code = &v return s } -// SetGroupId sets the GroupId field's value. -func (s *SecurityGroup) SetGroupId(v string) *SecurityGroup { - s.GroupId = &v +// SetMessage sets the Message field's value. +func (s *StateReason) SetMessage(v string) *StateReason { + s.Message = &v return s } -// SetGroupName sets the GroupName field's value. -func (s *SecurityGroup) SetGroupName(v string) *SecurityGroup { - s.GroupName = &v - return s +type StopInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // Forces the instances to stop. The instances do not have an opportunity to + // flush file system caches or file system metadata. If you use this option, + // you must perform file system check and repair procedures. This option is + // not recommended for Windows instances. + // + // Default: false + Force *bool `locationName:"force" type:"boolean"` + + // Hibernates the instance if the instance was enabled for hibernation at launch. + // If the instance cannot hibernate successfully, a normal shutdown occurs. + // For more information, see Hibernate Your Instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) + // in the Amazon Elastic Compute Cloud User Guide. + // + // Default: false + Hibernate *bool `type:"boolean"` + + // The IDs of the instances. + // + // InstanceIds is a required field + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` } -// SetIpPermissions sets the IpPermissions field's value. -func (s *SecurityGroup) SetIpPermissions(v []*IpPermission) *SecurityGroup { - s.IpPermissions = v - return s +// String returns the string representation +func (s StopInstancesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s StopInstancesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *StopInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "StopInstancesInput"} + if s.InstanceIds == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceIds")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetIpPermissionsEgress sets the IpPermissionsEgress field's value. -func (s *SecurityGroup) SetIpPermissionsEgress(v []*IpPermission) *SecurityGroup { - s.IpPermissionsEgress = v +// SetDryRun sets the DryRun field's value. +func (s *StopInstancesInput) SetDryRun(v bool) *StopInstancesInput { + s.DryRun = &v return s } -// SetOwnerId sets the OwnerId field's value. -func (s *SecurityGroup) SetOwnerId(v string) *SecurityGroup { - s.OwnerId = &v +// SetForce sets the Force field's value. +func (s *StopInstancesInput) SetForce(v bool) *StopInstancesInput { + s.Force = &v return s } -// SetTags sets the Tags field's value. -func (s *SecurityGroup) SetTags(v []*Tag) *SecurityGroup { - s.Tags = v +// SetHibernate sets the Hibernate field's value. +func (s *StopInstancesInput) SetHibernate(v bool) *StopInstancesInput { + s.Hibernate = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *SecurityGroup) SetVpcId(v string) *SecurityGroup { - s.VpcId = &v +// SetInstanceIds sets the InstanceIds field's value. +func (s *StopInstancesInput) SetInstanceIds(v []*string) *StopInstancesInput { + s.InstanceIds = v return s } -// Describes a VPC with a security group that references your security group. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupReference -type SecurityGroupReference struct { +type StopInstancesOutput struct { _ struct{} `type:"structure"` - // The ID of your security group. - // - // GroupId is a required field - GroupId *string `locationName:"groupId" type:"string" required:"true"` - - // The ID of the VPC with the referencing security group. - // - // ReferencingVpcId is a required field - ReferencingVpcId *string `locationName:"referencingVpcId" type:"string" required:"true"` - - // The ID of the VPC peering connection. - VpcPeeringConnectionId *string `locationName:"vpcPeeringConnectionId" type:"string"` + // Information about the stopped instances. + StoppingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` } // String returns the string representation -func (s SecurityGroupReference) String() string { +func (s StopInstancesOutput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SecurityGroupReference) GoString() string { +func (s StopInstancesOutput) GoString() string { return s.String() } -// SetGroupId sets the GroupId field's value. -func (s *SecurityGroupReference) SetGroupId(v string) *SecurityGroupReference { - s.GroupId = &v - return s -} - -// SetReferencingVpcId sets the ReferencingVpcId field's value. -func (s *SecurityGroupReference) SetReferencingVpcId(v string) *SecurityGroupReference { - s.ReferencingVpcId = &v - return s -} - -// SetVpcPeeringConnectionId sets the VpcPeeringConnectionId field's value. -func (s *SecurityGroupReference) SetVpcPeeringConnectionId(v string) *SecurityGroupReference { - s.VpcPeeringConnectionId = &v +// SetStoppingInstances sets the StoppingInstances field's value. +func (s *StopInstancesOutput) SetStoppingInstances(v []*InstanceStateChange) *StopInstancesOutput { + s.StoppingInstances = v return s } -// Describes the time period for a Scheduled Instance to start its first schedule. -// The time period must span less than one day. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SlotDateTimeRangeRequest -type SlotDateTimeRangeRequest struct { +// Describes the storage location for an instance store-backed AMI. +type Storage struct { _ struct{} `type:"structure"` - // The earliest date and time, in UTC, for the Scheduled Instance to start. - // - // EarliestTime is a required field - EarliestTime *time.Time `type:"timestamp" timestampFormat:"iso8601" required:"true"` - - // The latest date and time, in UTC, for the Scheduled Instance to start. This - // value must be later than or equal to the earliest date and at most three - // months in the future. - // - // LatestTime is a required field - LatestTime *time.Time `type:"timestamp" timestampFormat:"iso8601" required:"true"` + // An Amazon S3 storage location. + S3 *S3Storage `type:"structure"` } // String returns the string representation -func (s SlotDateTimeRangeRequest) String() string { +func (s Storage) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SlotDateTimeRangeRequest) GoString() string { +func (s Storage) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *SlotDateTimeRangeRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "SlotDateTimeRangeRequest"} - if s.EarliestTime == nil { - invalidParams.Add(request.NewErrParamRequired("EarliestTime")) - } - if s.LatestTime == nil { - invalidParams.Add(request.NewErrParamRequired("LatestTime")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil -} - -// SetEarliestTime sets the EarliestTime field's value. -func (s *SlotDateTimeRangeRequest) SetEarliestTime(v time.Time) *SlotDateTimeRangeRequest { - s.EarliestTime = &v - return s -} - -// SetLatestTime sets the LatestTime field's value. -func (s *SlotDateTimeRangeRequest) SetLatestTime(v time.Time) *SlotDateTimeRangeRequest { - s.LatestTime = &v +// SetS3 sets the S3 field's value. +func (s *Storage) SetS3(v *S3Storage) *Storage { + s.S3 = v return s } -// Describes the time period for a Scheduled Instance to start its first schedule. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SlotStartTimeRangeRequest -type SlotStartTimeRangeRequest struct { +// Describes a storage location in Amazon S3. +type StorageLocation struct { _ struct{} `type:"structure"` - // The earliest date and time, in UTC, for the Scheduled Instance to start. - EarliestTime *time.Time `type:"timestamp" timestampFormat:"iso8601"` + // The name of the S3 bucket. + Bucket *string `type:"string"` - // The latest date and time, in UTC, for the Scheduled Instance to start. - LatestTime *time.Time `type:"timestamp" timestampFormat:"iso8601"` + // The key. + Key *string `type:"string"` } // String returns the string representation -func (s SlotStartTimeRangeRequest) String() string { +func (s StorageLocation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SlotStartTimeRangeRequest) GoString() string { +func (s StorageLocation) GoString() string { return s.String() } -// SetEarliestTime sets the EarliestTime field's value. -func (s *SlotStartTimeRangeRequest) SetEarliestTime(v time.Time) *SlotStartTimeRangeRequest { - s.EarliestTime = &v +// SetBucket sets the Bucket field's value. +func (s *StorageLocation) SetBucket(v string) *StorageLocation { + s.Bucket = &v return s } -// SetLatestTime sets the LatestTime field's value. -func (s *SlotStartTimeRangeRequest) SetLatestTime(v time.Time) *SlotStartTimeRangeRequest { - s.LatestTime = &v +// SetKey sets the Key field's value. +func (s *StorageLocation) SetKey(v string) *StorageLocation { + s.Key = &v return s } -// Describes a snapshot. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Snapshot -type Snapshot struct { +// Describes a subnet. +type Subnet struct { _ struct{} `type:"structure"` - // The data encryption key identifier for the snapshot. This value is a unique - // identifier that corresponds to the data encryption key that was used to encrypt - // the original volume or snapshot copy. Because data encryption keys are inherited - // by volumes created from snapshots, and vice versa, if snapshots share the - // same data encryption key identifier, then they belong to the same volume/snapshot - // lineage. This parameter is only returned by the DescribeSnapshots API operation. - DataEncryptionKeyId *string `locationName:"dataEncryptionKeyId" type:"string"` + // Indicates whether a network interface created in this subnet (including a + // network interface created by RunInstances) receives an IPv6 address. + AssignIpv6AddressOnCreation *bool `locationName:"assignIpv6AddressOnCreation" type:"boolean"` - // The description for the snapshot. - Description *string `locationName:"description" type:"string"` + // The Availability Zone of the subnet. + AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - // Indicates whether the snapshot is encrypted. - Encrypted *bool `locationName:"encrypted" type:"boolean"` + // The AZ ID of the subnet. + AvailabilityZoneId *string `locationName:"availabilityZoneId" type:"string"` - // The full ARN of the AWS Key Management Service (AWS KMS) customer master - // key (CMK) that was used to protect the volume encryption key for the parent - // volume. - KmsKeyId *string `locationName:"kmsKeyId" type:"string"` + // The number of unused private IPv4 addresses in the subnet. The IPv4 addresses + // for any stopped instances are considered unavailable. + AvailableIpAddressCount *int64 `locationName:"availableIpAddressCount" type:"integer"` - // Value from an Amazon-maintained list (amazon | aws-marketplace | microsoft) - // of snapshot owners. Not to be confused with the user-configured AWS account - // alias, which is set from the IAM console. - OwnerAlias *string `locationName:"ownerAlias" type:"string"` + // The IPv4 CIDR block assigned to the subnet. + CidrBlock *string `locationName:"cidrBlock" type:"string"` - // The AWS account ID of the EBS snapshot owner. - OwnerId *string `locationName:"ownerId" type:"string"` + // Indicates whether this is the default subnet for the Availability Zone. + DefaultForAz *bool `locationName:"defaultForAz" type:"boolean"` - // The progress of the snapshot, as a percentage. - Progress *string `locationName:"progress" type:"string"` + // Information about the IPv6 CIDR blocks associated with the subnet. + Ipv6CidrBlockAssociationSet []*SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociationSet" locationNameList:"item" type:"list"` - // The ID of the snapshot. Each snapshot receives a unique identifier when it - // is created. - SnapshotId *string `locationName:"snapshotId" type:"string"` + // Indicates whether instances launched in this subnet receive a public IPv4 + // address. + MapPublicIpOnLaunch *bool `locationName:"mapPublicIpOnLaunch" type:"boolean"` - // The time stamp when the snapshot was initiated. - StartTime *time.Time `locationName:"startTime" type:"timestamp" timestampFormat:"iso8601"` + // The ID of the AWS account that owns the subnet. + OwnerId *string `locationName:"ownerId" type:"string"` - // The snapshot state. - State *string `locationName:"status" type:"string" enum:"SnapshotState"` + // The current state of the subnet. + State *string `locationName:"state" type:"string" enum:"SubnetState"` - // Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy - // operation fails (for example, if the proper AWS Key Management Service (AWS - // KMS) permissions are not obtained) this field displays error state details - // to help you diagnose why the error occurred. This parameter is only returned - // by the DescribeSnapshots API operation. - StateMessage *string `locationName:"statusMessage" type:"string"` + // The Amazon Resource Name (ARN) of the subnet. + SubnetArn *string `locationName:"subnetArn" type:"string"` - // Any tags assigned to the snapshot. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The ID of the subnet. + SubnetId *string `locationName:"subnetId" type:"string"` - // The ID of the volume that was used to create the snapshot. Snapshots created - // by the CopySnapshot action have an arbitrary volume ID that should not be - // used for any purpose. - VolumeId *string `locationName:"volumeId" type:"string"` + // Any tags assigned to the subnet. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` - // The size of the volume, in GiB. - VolumeSize *int64 `locationName:"volumeSize" type:"integer"` + // The ID of the VPC the subnet is in. + VpcId *string `locationName:"vpcId" type:"string"` } // String returns the string representation -func (s Snapshot) String() string { +func (s Subnet) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Snapshot) GoString() string { +func (s Subnet) GoString() string { return s.String() } -// SetDataEncryptionKeyId sets the DataEncryptionKeyId field's value. -func (s *Snapshot) SetDataEncryptionKeyId(v string) *Snapshot { - s.DataEncryptionKeyId = &v +// SetAssignIpv6AddressOnCreation sets the AssignIpv6AddressOnCreation field's value. +func (s *Subnet) SetAssignIpv6AddressOnCreation(v bool) *Subnet { + s.AssignIpv6AddressOnCreation = &v return s } -// SetDescription sets the Description field's value. -func (s *Snapshot) SetDescription(v string) *Snapshot { - s.Description = &v +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *Subnet) SetAvailabilityZone(v string) *Subnet { + s.AvailabilityZone = &v return s } -// SetEncrypted sets the Encrypted field's value. -func (s *Snapshot) SetEncrypted(v bool) *Snapshot { - s.Encrypted = &v +// SetAvailabilityZoneId sets the AvailabilityZoneId field's value. +func (s *Subnet) SetAvailabilityZoneId(v string) *Subnet { + s.AvailabilityZoneId = &v return s } -// SetKmsKeyId sets the KmsKeyId field's value. -func (s *Snapshot) SetKmsKeyId(v string) *Snapshot { - s.KmsKeyId = &v +// SetAvailableIpAddressCount sets the AvailableIpAddressCount field's value. +func (s *Subnet) SetAvailableIpAddressCount(v int64) *Subnet { + s.AvailableIpAddressCount = &v return s } -// SetOwnerAlias sets the OwnerAlias field's value. -func (s *Snapshot) SetOwnerAlias(v string) *Snapshot { - s.OwnerAlias = &v +// SetCidrBlock sets the CidrBlock field's value. +func (s *Subnet) SetCidrBlock(v string) *Subnet { + s.CidrBlock = &v return s } -// SetOwnerId sets the OwnerId field's value. -func (s *Snapshot) SetOwnerId(v string) *Snapshot { - s.OwnerId = &v +// SetDefaultForAz sets the DefaultForAz field's value. +func (s *Subnet) SetDefaultForAz(v bool) *Subnet { + s.DefaultForAz = &v return s } -// SetProgress sets the Progress field's value. -func (s *Snapshot) SetProgress(v string) *Snapshot { - s.Progress = &v +// SetIpv6CidrBlockAssociationSet sets the Ipv6CidrBlockAssociationSet field's value. +func (s *Subnet) SetIpv6CidrBlockAssociationSet(v []*SubnetIpv6CidrBlockAssociation) *Subnet { + s.Ipv6CidrBlockAssociationSet = v return s } -// SetSnapshotId sets the SnapshotId field's value. -func (s *Snapshot) SetSnapshotId(v string) *Snapshot { - s.SnapshotId = &v +// SetMapPublicIpOnLaunch sets the MapPublicIpOnLaunch field's value. +func (s *Subnet) SetMapPublicIpOnLaunch(v bool) *Subnet { + s.MapPublicIpOnLaunch = &v return s } -// SetStartTime sets the StartTime field's value. -func (s *Snapshot) SetStartTime(v time.Time) *Snapshot { - s.StartTime = &v +// SetOwnerId sets the OwnerId field's value. +func (s *Subnet) SetOwnerId(v string) *Subnet { + s.OwnerId = &v return s } // SetState sets the State field's value. -func (s *Snapshot) SetState(v string) *Snapshot { +func (s *Subnet) SetState(v string) *Subnet { s.State = &v return s } -// SetStateMessage sets the StateMessage field's value. -func (s *Snapshot) SetStateMessage(v string) *Snapshot { - s.StateMessage = &v +// SetSubnetArn sets the SubnetArn field's value. +func (s *Subnet) SetSubnetArn(v string) *Subnet { + s.SubnetArn = &v return s } -// SetTags sets the Tags field's value. -func (s *Snapshot) SetTags(v []*Tag) *Snapshot { - s.Tags = v +// SetSubnetId sets the SubnetId field's value. +func (s *Subnet) SetSubnetId(v string) *Subnet { + s.SubnetId = &v return s } -// SetVolumeId sets the VolumeId field's value. -func (s *Snapshot) SetVolumeId(v string) *Snapshot { - s.VolumeId = &v +// SetTags sets the Tags field's value. +func (s *Subnet) SetTags(v []*Tag) *Subnet { + s.Tags = v return s } -// SetVolumeSize sets the VolumeSize field's value. -func (s *Snapshot) SetVolumeSize(v int64) *Snapshot { - s.VolumeSize = &v +// SetVpcId sets the VpcId field's value. +func (s *Subnet) SetVpcId(v string) *Subnet { + s.VpcId = &v return s } -// Describes the snapshot created from the imported disk. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotDetail -type SnapshotDetail struct { +// Describes the state of a CIDR block. +type SubnetCidrBlockState struct { _ struct{} `type:"structure"` - // A description for the snapshot. - Description *string `locationName:"description" type:"string"` + // The state of a CIDR block. + State *string `locationName:"state" type:"string" enum:"SubnetCidrBlockStateCode"` - // The block device mapping for the snapshot. - DeviceName *string `locationName:"deviceName" type:"string"` + // A message about the status of the CIDR block, if applicable. + StatusMessage *string `locationName:"statusMessage" type:"string"` +} - // The size of the disk in the snapshot, in GiB. - DiskImageSize *float64 `locationName:"diskImageSize" type:"double"` +// String returns the string representation +func (s SubnetCidrBlockState) String() string { + return awsutil.Prettify(s) +} - // The format of the disk image from which the snapshot is created. - Format *string `locationName:"format" type:"string"` +// GoString returns the string representation +func (s SubnetCidrBlockState) GoString() string { + return s.String() +} - // The percentage of progress for the task. - Progress *string `locationName:"progress" type:"string"` +// SetState sets the State field's value. +func (s *SubnetCidrBlockState) SetState(v string) *SubnetCidrBlockState { + s.State = &v + return s +} - // The snapshot ID of the disk being imported. - SnapshotId *string `locationName:"snapshotId" type:"string"` +// SetStatusMessage sets the StatusMessage field's value. +func (s *SubnetCidrBlockState) SetStatusMessage(v string) *SubnetCidrBlockState { + s.StatusMessage = &v + return s +} - // A brief status of the snapshot creation. - Status *string `locationName:"status" type:"string"` +// Describes an IPv6 CIDR block associated with a subnet. +type SubnetIpv6CidrBlockAssociation struct { + _ struct{} `type:"structure"` - // A detailed status message for the snapshot creation. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // The association ID for the CIDR block. + AssociationId *string `locationName:"associationId" type:"string"` - // The URL used to access the disk image. - Url *string `locationName:"url" type:"string"` + // The IPv6 CIDR block. + Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` - // The S3 bucket for the disk image. - UserBucket *UserBucketDetails `locationName:"userBucket" type:"structure"` + // Information about the state of the CIDR block. + Ipv6CidrBlockState *SubnetCidrBlockState `locationName:"ipv6CidrBlockState" type:"structure"` } // String returns the string representation -func (s SnapshotDetail) String() string { +func (s SubnetIpv6CidrBlockAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SnapshotDetail) GoString() string { +func (s SubnetIpv6CidrBlockAssociation) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *SnapshotDetail) SetDescription(v string) *SnapshotDetail { - s.Description = &v +// SetAssociationId sets the AssociationId field's value. +func (s *SubnetIpv6CidrBlockAssociation) SetAssociationId(v string) *SubnetIpv6CidrBlockAssociation { + s.AssociationId = &v return s } -// SetDeviceName sets the DeviceName field's value. -func (s *SnapshotDetail) SetDeviceName(v string) *SnapshotDetail { - s.DeviceName = &v +// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. +func (s *SubnetIpv6CidrBlockAssociation) SetIpv6CidrBlock(v string) *SubnetIpv6CidrBlockAssociation { + s.Ipv6CidrBlock = &v return s } -// SetDiskImageSize sets the DiskImageSize field's value. -func (s *SnapshotDetail) SetDiskImageSize(v float64) *SnapshotDetail { - s.DiskImageSize = &v +// SetIpv6CidrBlockState sets the Ipv6CidrBlockState field's value. +func (s *SubnetIpv6CidrBlockAssociation) SetIpv6CidrBlockState(v *SubnetCidrBlockState) *SubnetIpv6CidrBlockAssociation { + s.Ipv6CidrBlockState = v return s } -// SetFormat sets the Format field's value. -func (s *SnapshotDetail) SetFormat(v string) *SnapshotDetail { - s.Format = &v - return s +// Describes the T2 or T3 instance whose credit option for CPU usage was successfully +// modified. +type SuccessfulInstanceCreditSpecificationItem struct { + _ struct{} `type:"structure"` + + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` } -// SetProgress sets the Progress field's value. -func (s *SnapshotDetail) SetProgress(v string) *SnapshotDetail { - s.Progress = &v - return s +// String returns the string representation +func (s SuccessfulInstanceCreditSpecificationItem) String() string { + return awsutil.Prettify(s) } -// SetSnapshotId sets the SnapshotId field's value. -func (s *SnapshotDetail) SetSnapshotId(v string) *SnapshotDetail { - s.SnapshotId = &v - return s +// GoString returns the string representation +func (s SuccessfulInstanceCreditSpecificationItem) GoString() string { + return s.String() } -// SetStatus sets the Status field's value. -func (s *SnapshotDetail) SetStatus(v string) *SnapshotDetail { - s.Status = &v +// SetInstanceId sets the InstanceId field's value. +func (s *SuccessfulInstanceCreditSpecificationItem) SetInstanceId(v string) *SuccessfulInstanceCreditSpecificationItem { + s.InstanceId = &v return s } -// SetStatusMessage sets the StatusMessage field's value. -func (s *SnapshotDetail) SetStatusMessage(v string) *SnapshotDetail { - s.StatusMessage = &v +// Describes a Reserved Instance whose queued purchase was successfully deleted. +type SuccessfulQueuedPurchaseDeletion struct { + _ struct{} `type:"structure"` + + // The ID of the Reserved Instance. + ReservedInstancesId *string `locationName:"reservedInstancesId" type:"string"` +} + +// String returns the string representation +func (s SuccessfulQueuedPurchaseDeletion) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SuccessfulQueuedPurchaseDeletion) GoString() string { + return s.String() +} + +// SetReservedInstancesId sets the ReservedInstancesId field's value. +func (s *SuccessfulQueuedPurchaseDeletion) SetReservedInstancesId(v string) *SuccessfulQueuedPurchaseDeletion { + s.ReservedInstancesId = &v return s } -// SetUrl sets the Url field's value. -func (s *SnapshotDetail) SetUrl(v string) *SnapshotDetail { - s.Url = &v +// Describes a tag. +type Tag struct { + _ struct{} `type:"structure"` + + // The key of the tag. + // + // Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode + // characters. May not begin with aws:. + Key *string `locationName:"key" type:"string"` + + // The value of the tag. + // + // Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode + // characters. + Value *string `locationName:"value" type:"string"` +} + +// String returns the string representation +func (s Tag) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Tag) GoString() string { + return s.String() +} + +// SetKey sets the Key field's value. +func (s *Tag) SetKey(v string) *Tag { + s.Key = &v return s } -// SetUserBucket sets the UserBucket field's value. -func (s *SnapshotDetail) SetUserBucket(v *UserBucketDetails) *SnapshotDetail { - s.UserBucket = v +// SetValue sets the Value field's value. +func (s *Tag) SetValue(v string) *Tag { + s.Value = &v return s } -// The disk container object for the import snapshot request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotDiskContainer -type SnapshotDiskContainer struct { +// Describes a tag. +type TagDescription struct { _ struct{} `type:"structure"` - // The description of the disk image being imported. - Description *string `type:"string"` + // The tag key. + Key *string `locationName:"key" type:"string"` - // The format of the disk image being imported. - // - // Valid values: RAW | VHD | VMDK | OVA - Format *string `type:"string"` + // The ID of the resource. + ResourceId *string `locationName:"resourceId" type:"string"` - // The URL to the Amazon S3-based disk image being imported. It can either be - // a https URL (https://..) or an Amazon S3 URL (s3://..). - Url *string `type:"string"` + // The resource type. + ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` - // The S3 bucket for the disk image. - UserBucket *UserBucket `type:"structure"` + // The tag value. + Value *string `locationName:"value" type:"string"` } // String returns the string representation -func (s SnapshotDiskContainer) String() string { +func (s TagDescription) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SnapshotDiskContainer) GoString() string { +func (s TagDescription) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *SnapshotDiskContainer) SetDescription(v string) *SnapshotDiskContainer { - s.Description = &v +// SetKey sets the Key field's value. +func (s *TagDescription) SetKey(v string) *TagDescription { + s.Key = &v return s } -// SetFormat sets the Format field's value. -func (s *SnapshotDiskContainer) SetFormat(v string) *SnapshotDiskContainer { - s.Format = &v +// SetResourceId sets the ResourceId field's value. +func (s *TagDescription) SetResourceId(v string) *TagDescription { + s.ResourceId = &v return s } -// SetUrl sets the Url field's value. -func (s *SnapshotDiskContainer) SetUrl(v string) *SnapshotDiskContainer { - s.Url = &v +// SetResourceType sets the ResourceType field's value. +func (s *TagDescription) SetResourceType(v string) *TagDescription { + s.ResourceType = &v return s } -// SetUserBucket sets the UserBucket field's value. -func (s *SnapshotDiskContainer) SetUserBucket(v *UserBucket) *SnapshotDiskContainer { - s.UserBucket = v +// SetValue sets the Value field's value. +func (s *TagDescription) SetValue(v string) *TagDescription { + s.Value = &v return s } -// Details about the import snapshot task. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotTaskDetail -type SnapshotTaskDetail struct { +// The tags to apply to a resource when the resource is being created. +type TagSpecification struct { _ struct{} `type:"structure"` - // The description of the snapshot. - Description *string `locationName:"description" type:"string"` - - // The size of the disk in the snapshot, in GiB. - DiskImageSize *float64 `locationName:"diskImageSize" type:"double"` - - // The format of the disk image from which the snapshot is created. - Format *string `locationName:"format" type:"string"` - - // The percentage of completion for the import snapshot task. - Progress *string `locationName:"progress" type:"string"` - - // The snapshot ID of the disk being imported. - SnapshotId *string `locationName:"snapshotId" type:"string"` - - // A brief status for the import snapshot task. - Status *string `locationName:"status" type:"string"` - - // A detailed status message for the import snapshot task. - StatusMessage *string `locationName:"statusMessage" type:"string"` - - // The URL of the disk image from which the snapshot is created. - Url *string `locationName:"url" type:"string"` + // The type of resource to tag. Currently, the resource types that support tagging + // on creation are: capacity-reservation | client-vpn-endpoint | dedicated-host + // | fleet | fpga-image | instance | launch-template | snapshot | traffic-mirror-filter + // | traffic-mirror-session | traffic-mirror-target | transit-gateway | transit-gateway-attachment + // | transit-gateway-route-table | volume. + // + // To tag a resource after it has been created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html). + ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` - // The S3 bucket for the disk image. - UserBucket *UserBucketDetails `locationName:"userBucket" type:"structure"` + // The tags to apply to the resource. + Tags []*Tag `locationName:"Tag" locationNameList:"item" type:"list"` } // String returns the string representation -func (s SnapshotTaskDetail) String() string { +func (s TagSpecification) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SnapshotTaskDetail) GoString() string { +func (s TagSpecification) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *SnapshotTaskDetail) SetDescription(v string) *SnapshotTaskDetail { - s.Description = &v - return s -} - -// SetDiskImageSize sets the DiskImageSize field's value. -func (s *SnapshotTaskDetail) SetDiskImageSize(v float64) *SnapshotTaskDetail { - s.DiskImageSize = &v +// SetResourceType sets the ResourceType field's value. +func (s *TagSpecification) SetResourceType(v string) *TagSpecification { + s.ResourceType = &v return s } -// SetFormat sets the Format field's value. -func (s *SnapshotTaskDetail) SetFormat(v string) *SnapshotTaskDetail { - s.Format = &v +// SetTags sets the Tags field's value. +func (s *TagSpecification) SetTags(v []*Tag) *TagSpecification { + s.Tags = v return s } -// SetProgress sets the Progress field's value. -func (s *SnapshotTaskDetail) SetProgress(v string) *SnapshotTaskDetail { - s.Progress = &v - return s +// The number of units to request. You can choose to set the target capacity +// in terms of instances or a performance characteristic that is important to +// your application workload, such as vCPUs, memory, or I/O. If the request +// type is maintain, you can specify a target capacity of 0 and add capacity +// later. +// +// You can use the On-Demand Instance MaxTotalPrice parameter, the Spot Instance +// MaxTotalPrice, or both to ensure your fleet cost does not exceed your budget. +// If you set a maximum price per hour for the On-Demand Instances and Spot +// Instances in your request, EC2 Fleet will launch instances until it reaches +// the maximum amount you're willing to pay. When the maximum amount you're +// willing to pay is reached, the fleet stops launching instances even if it +// hasn’t met the target capacity. The MaxTotalPrice parameters are located +// in and +type TargetCapacitySpecification struct { + _ struct{} `type:"structure"` + + // The default TotalTargetCapacity, which is either Spot or On-Demand. + DefaultTargetCapacityType *string `locationName:"defaultTargetCapacityType" type:"string" enum:"DefaultTargetCapacityType"` + + // The number of On-Demand units to request. If you specify a target capacity + // for Spot units, you cannot specify a target capacity for On-Demand units. + OnDemandTargetCapacity *int64 `locationName:"onDemandTargetCapacity" type:"integer"` + + // The maximum number of Spot units to launch. If you specify a target capacity + // for On-Demand units, you cannot specify a target capacity for Spot units. + SpotTargetCapacity *int64 `locationName:"spotTargetCapacity" type:"integer"` + + // The number of units to request, filled using DefaultTargetCapacityType. + TotalTargetCapacity *int64 `locationName:"totalTargetCapacity" type:"integer"` } -// SetSnapshotId sets the SnapshotId field's value. -func (s *SnapshotTaskDetail) SetSnapshotId(v string) *SnapshotTaskDetail { - s.SnapshotId = &v - return s +// String returns the string representation +func (s TargetCapacitySpecification) String() string { + return awsutil.Prettify(s) } -// SetStatus sets the Status field's value. -func (s *SnapshotTaskDetail) SetStatus(v string) *SnapshotTaskDetail { - s.Status = &v +// GoString returns the string representation +func (s TargetCapacitySpecification) GoString() string { + return s.String() +} + +// SetDefaultTargetCapacityType sets the DefaultTargetCapacityType field's value. +func (s *TargetCapacitySpecification) SetDefaultTargetCapacityType(v string) *TargetCapacitySpecification { + s.DefaultTargetCapacityType = &v return s } -// SetStatusMessage sets the StatusMessage field's value. -func (s *SnapshotTaskDetail) SetStatusMessage(v string) *SnapshotTaskDetail { - s.StatusMessage = &v +// SetOnDemandTargetCapacity sets the OnDemandTargetCapacity field's value. +func (s *TargetCapacitySpecification) SetOnDemandTargetCapacity(v int64) *TargetCapacitySpecification { + s.OnDemandTargetCapacity = &v return s } -// SetUrl sets the Url field's value. -func (s *SnapshotTaskDetail) SetUrl(v string) *SnapshotTaskDetail { - s.Url = &v +// SetSpotTargetCapacity sets the SpotTargetCapacity field's value. +func (s *TargetCapacitySpecification) SetSpotTargetCapacity(v int64) *TargetCapacitySpecification { + s.SpotTargetCapacity = &v return s } -// SetUserBucket sets the UserBucket field's value. -func (s *SnapshotTaskDetail) SetUserBucket(v *UserBucketDetails) *SnapshotTaskDetail { - s.UserBucket = v +// SetTotalTargetCapacity sets the TotalTargetCapacity field's value. +func (s *TargetCapacitySpecification) SetTotalTargetCapacity(v int64) *TargetCapacitySpecification { + s.TotalTargetCapacity = &v return s } -// Describes the data feed for a Spot instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotDatafeedSubscription -type SpotDatafeedSubscription struct { +// The number of units to request. You can choose to set the target capacity +// as the number of instances. Or you can set the target capacity to a performance +// characteristic that is important to your application workload, such as vCPUs, +// memory, or I/O. If the request type is maintain, you can specify a target +// capacity of 0 and add capacity later. +// +// You can use the On-Demand Instance MaxTotalPrice parameter, the Spot Instance +// MaxTotalPrice parameter, or both parameters to ensure that your fleet cost +// does not exceed your budget. If you set a maximum price per hour for the +// On-Demand Instances and Spot Instances in your request, EC2 Fleet will launch +// instances until it reaches the maximum amount you're willing to pay. When +// the maximum amount you're willing to pay is reached, the fleet stops launching +// instances even if it hasn’t met the target capacity. The MaxTotalPrice +// parameters are located in and . +type TargetCapacitySpecificationRequest struct { _ struct{} `type:"structure"` - // The Amazon S3 bucket where the Spot instance data feed is located. - Bucket *string `locationName:"bucket" type:"string"` - - // The fault codes for the Spot instance request, if any. - Fault *SpotInstanceStateFault `locationName:"fault" type:"structure"` + // The default TotalTargetCapacity, which is either Spot or On-Demand. + DefaultTargetCapacityType *string `type:"string" enum:"DefaultTargetCapacityType"` - // The AWS account ID of the account. - OwnerId *string `locationName:"ownerId" type:"string"` + // The number of On-Demand units to request. + OnDemandTargetCapacity *int64 `type:"integer"` - // The prefix that is prepended to data feed files. - Prefix *string `locationName:"prefix" type:"string"` + // The number of Spot units to request. + SpotTargetCapacity *int64 `type:"integer"` - // The state of the Spot instance data feed subscription. - State *string `locationName:"state" type:"string" enum:"DatafeedSubscriptionState"` + // The number of units to request, filled using DefaultTargetCapacityType. + // + // TotalTargetCapacity is a required field + TotalTargetCapacity *int64 `type:"integer" required:"true"` } // String returns the string representation -func (s SpotDatafeedSubscription) String() string { +func (s TargetCapacitySpecificationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotDatafeedSubscription) GoString() string { +func (s TargetCapacitySpecificationRequest) GoString() string { return s.String() } -// SetBucket sets the Bucket field's value. -func (s *SpotDatafeedSubscription) SetBucket(v string) *SpotDatafeedSubscription { - s.Bucket = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *TargetCapacitySpecificationRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TargetCapacitySpecificationRequest"} + if s.TotalTargetCapacity == nil { + invalidParams.Add(request.NewErrParamRequired("TotalTargetCapacity")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetFault sets the Fault field's value. -func (s *SpotDatafeedSubscription) SetFault(v *SpotInstanceStateFault) *SpotDatafeedSubscription { - s.Fault = v +// SetDefaultTargetCapacityType sets the DefaultTargetCapacityType field's value. +func (s *TargetCapacitySpecificationRequest) SetDefaultTargetCapacityType(v string) *TargetCapacitySpecificationRequest { + s.DefaultTargetCapacityType = &v return s } -// SetOwnerId sets the OwnerId field's value. -func (s *SpotDatafeedSubscription) SetOwnerId(v string) *SpotDatafeedSubscription { - s.OwnerId = &v +// SetOnDemandTargetCapacity sets the OnDemandTargetCapacity field's value. +func (s *TargetCapacitySpecificationRequest) SetOnDemandTargetCapacity(v int64) *TargetCapacitySpecificationRequest { + s.OnDemandTargetCapacity = &v return s } -// SetPrefix sets the Prefix field's value. -func (s *SpotDatafeedSubscription) SetPrefix(v string) *SpotDatafeedSubscription { - s.Prefix = &v +// SetSpotTargetCapacity sets the SpotTargetCapacity field's value. +func (s *TargetCapacitySpecificationRequest) SetSpotTargetCapacity(v int64) *TargetCapacitySpecificationRequest { + s.SpotTargetCapacity = &v return s } -// SetState sets the State field's value. -func (s *SpotDatafeedSubscription) SetState(v string) *SpotDatafeedSubscription { - s.State = &v +// SetTotalTargetCapacity sets the TotalTargetCapacity field's value. +func (s *TargetCapacitySpecificationRequest) SetTotalTargetCapacity(v int64) *TargetCapacitySpecificationRequest { + s.TotalTargetCapacity = &v return s } -// Describes the launch specification for one or more Spot instances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetLaunchSpecification -type SpotFleetLaunchSpecification struct { +// Information about the Convertible Reserved Instance offering. +type TargetConfiguration struct { _ struct{} `type:"structure"` - // Deprecated. - AddressingType *string `locationName:"addressingType" type:"string"` - - // One or more block device mapping entries. - BlockDeviceMappings []*BlockDeviceMapping `locationName:"blockDeviceMapping" locationNameList:"item" type:"list"` - - // Indicates whether the instances are optimized for EBS I/O. This optimization - // provides dedicated throughput to Amazon EBS and an optimized configuration - // stack to provide optimal EBS I/O performance. This optimization isn't available - // with all instance types. Additional usage charges apply when using an EBS - // Optimized instance. - // - // Default: false - EbsOptimized *bool `locationName:"ebsOptimized" type:"boolean"` - - // The IAM instance profile. - IamInstanceProfile *IamInstanceProfileSpecification `locationName:"iamInstanceProfile" type:"structure"` - - // The ID of the AMI. - ImageId *string `locationName:"imageId" type:"string"` - - // The instance type. Note that T2 and HS1 instance types are not supported. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` - - // The ID of the kernel. - KernelId *string `locationName:"kernelId" type:"string"` - - // The name of the key pair. - KeyName *string `locationName:"keyName" type:"string"` - - // Enable or disable monitoring for the instances. - Monitoring *SpotFleetMonitoring `locationName:"monitoring" type:"structure"` + // The number of instances the Convertible Reserved Instance offering can be + // applied to. This parameter is reserved and cannot be specified in a request + InstanceCount *int64 `locationName:"instanceCount" type:"integer"` - // One or more network interfaces. If you specify a network interface, you must - // specify subnet IDs and security group IDs using the network interface. - NetworkInterfaces []*InstanceNetworkInterfaceSpecification `locationName:"networkInterfaceSet" locationNameList:"item" type:"list"` + // The ID of the Convertible Reserved Instance offering. + OfferingId *string `locationName:"offeringId" type:"string"` +} - // The placement information. - Placement *SpotPlacement `locationName:"placement" type:"structure"` +// String returns the string representation +func (s TargetConfiguration) String() string { + return awsutil.Prettify(s) +} - // The ID of the RAM disk. - RamdiskId *string `locationName:"ramdiskId" type:"string"` +// GoString returns the string representation +func (s TargetConfiguration) GoString() string { + return s.String() +} - // One or more security groups. When requesting instances in a VPC, you must - // specify the IDs of the security groups. When requesting instances in EC2-Classic, - // you can specify the names or the IDs of the security groups. - SecurityGroups []*GroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` +// SetInstanceCount sets the InstanceCount field's value. +func (s *TargetConfiguration) SetInstanceCount(v int64) *TargetConfiguration { + s.InstanceCount = &v + return s +} - // The bid price per unit hour for the specified instance type. If this value - // is not specified, the default is the Spot bid price specified for the fleet. - // To determine the bid price per unit hour, divide the Spot bid price by the - // value of WeightedCapacity. - SpotPrice *string `locationName:"spotPrice" type:"string"` +// SetOfferingId sets the OfferingId field's value. +func (s *TargetConfiguration) SetOfferingId(v string) *TargetConfiguration { + s.OfferingId = &v + return s +} - // The ID of the subnet in which to launch the instances. To specify multiple - // subnets, separate them using commas; for example, "subnet-a61dafcf, subnet-65ea5f08". - SubnetId *string `locationName:"subnetId" type:"string"` +// Details about the target configuration. +type TargetConfigurationRequest struct { + _ struct{} `type:"structure"` - // The user data to make available to the instances. If you are using an AWS - // SDK or command line tool, Base64-encoding is performed for you, and you can - // load the text from a file. Otherwise, you must provide Base64-encoded text. - UserData *string `locationName:"userData" type:"string"` + // The number of instances the Covertible Reserved Instance offering can be + // applied to. This parameter is reserved and cannot be specified in a request + InstanceCount *int64 `type:"integer"` - // The number of units provided by the specified instance type. These are the - // same units that you chose to set the target capacity in terms (instances - // or a performance characteristic such as vCPUs, memory, or I/O). + // The Convertible Reserved Instance offering ID. // - // If the target capacity divided by this value is not a whole number, we round - // the number of instances to the next whole number. If this value is not specified, - // the default is 1. - WeightedCapacity *float64 `locationName:"weightedCapacity" type:"double"` + // OfferingId is a required field + OfferingId *string `type:"string" required:"true"` } // String returns the string representation -func (s SpotFleetLaunchSpecification) String() string { +func (s TargetConfigurationRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotFleetLaunchSpecification) GoString() string { +func (s TargetConfigurationRequest) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *SpotFleetLaunchSpecification) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "SpotFleetLaunchSpecification"} - if s.NetworkInterfaces != nil { - for i, v := range s.NetworkInterfaces { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "NetworkInterfaces", i), err.(request.ErrInvalidParams)) - } - } +func (s *TargetConfigurationRequest) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TargetConfigurationRequest"} + if s.OfferingId == nil { + invalidParams.Add(request.NewErrParamRequired("OfferingId")) } if invalidParams.Len() > 0 { @@ -49049,319 +93925,371 @@ func (s *SpotFleetLaunchSpecification) Validate() error { return nil } -// SetAddressingType sets the AddressingType field's value. -func (s *SpotFleetLaunchSpecification) SetAddressingType(v string) *SpotFleetLaunchSpecification { - s.AddressingType = &v +// SetInstanceCount sets the InstanceCount field's value. +func (s *TargetConfigurationRequest) SetInstanceCount(v int64) *TargetConfigurationRequest { + s.InstanceCount = &v return s } -// SetBlockDeviceMappings sets the BlockDeviceMappings field's value. -func (s *SpotFleetLaunchSpecification) SetBlockDeviceMappings(v []*BlockDeviceMapping) *SpotFleetLaunchSpecification { - s.BlockDeviceMappings = v +// SetOfferingId sets the OfferingId field's value. +func (s *TargetConfigurationRequest) SetOfferingId(v string) *TargetConfigurationRequest { + s.OfferingId = &v return s } -// SetEbsOptimized sets the EbsOptimized field's value. -func (s *SpotFleetLaunchSpecification) SetEbsOptimized(v bool) *SpotFleetLaunchSpecification { - s.EbsOptimized = &v - return s +// Describes a load balancer target group. +type TargetGroup struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the target group. + Arn *string `locationName:"arn" type:"string"` } -// SetIamInstanceProfile sets the IamInstanceProfile field's value. -func (s *SpotFleetLaunchSpecification) SetIamInstanceProfile(v *IamInstanceProfileSpecification) *SpotFleetLaunchSpecification { - s.IamInstanceProfile = v - return s +// String returns the string representation +func (s TargetGroup) String() string { + return awsutil.Prettify(s) } -// SetImageId sets the ImageId field's value. -func (s *SpotFleetLaunchSpecification) SetImageId(v string) *SpotFleetLaunchSpecification { - s.ImageId = &v - return s +// GoString returns the string representation +func (s TargetGroup) GoString() string { + return s.String() } -// SetInstanceType sets the InstanceType field's value. -func (s *SpotFleetLaunchSpecification) SetInstanceType(v string) *SpotFleetLaunchSpecification { - s.InstanceType = &v +// SetArn sets the Arn field's value. +func (s *TargetGroup) SetArn(v string) *TargetGroup { + s.Arn = &v return s } -// SetKernelId sets the KernelId field's value. -func (s *SpotFleetLaunchSpecification) SetKernelId(v string) *SpotFleetLaunchSpecification { - s.KernelId = &v - return s +// Describes the target groups to attach to a Spot Fleet. Spot Fleet registers +// the running Spot Instances with these target groups. +type TargetGroupsConfig struct { + _ struct{} `type:"structure"` + + // One or more target groups. + TargetGroups []*TargetGroup `locationName:"targetGroups" locationNameList:"item" min:"1" type:"list"` } -// SetKeyName sets the KeyName field's value. -func (s *SpotFleetLaunchSpecification) SetKeyName(v string) *SpotFleetLaunchSpecification { - s.KeyName = &v - return s +// String returns the string representation +func (s TargetGroupsConfig) String() string { + return awsutil.Prettify(s) } -// SetMonitoring sets the Monitoring field's value. -func (s *SpotFleetLaunchSpecification) SetMonitoring(v *SpotFleetMonitoring) *SpotFleetLaunchSpecification { - s.Monitoring = v - return s +// GoString returns the string representation +func (s TargetGroupsConfig) GoString() string { + return s.String() } -// SetNetworkInterfaces sets the NetworkInterfaces field's value. -func (s *SpotFleetLaunchSpecification) SetNetworkInterfaces(v []*InstanceNetworkInterfaceSpecification) *SpotFleetLaunchSpecification { - s.NetworkInterfaces = v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *TargetGroupsConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TargetGroupsConfig"} + if s.TargetGroups != nil && len(s.TargetGroups) < 1 { + invalidParams.Add(request.NewErrParamMinLen("TargetGroups", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetPlacement sets the Placement field's value. -func (s *SpotFleetLaunchSpecification) SetPlacement(v *SpotPlacement) *SpotFleetLaunchSpecification { - s.Placement = v +// SetTargetGroups sets the TargetGroups field's value. +func (s *TargetGroupsConfig) SetTargetGroups(v []*TargetGroup) *TargetGroupsConfig { + s.TargetGroups = v return s } -// SetRamdiskId sets the RamdiskId field's value. -func (s *SpotFleetLaunchSpecification) SetRamdiskId(v string) *SpotFleetLaunchSpecification { - s.RamdiskId = &v +// Describes a target network associated with a Client VPN endpoint. +type TargetNetwork struct { + _ struct{} `type:"structure"` + + // The ID of the association. + AssociationId *string `locationName:"associationId" type:"string"` + + // The ID of the Client VPN endpoint with which the target network is associated. + ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` + + // The IDs of the security groups applied to the target network association. + SecurityGroups []*string `locationName:"securityGroups" locationNameList:"item" type:"list"` + + // The current state of the target network association. + Status *AssociationStatus `locationName:"status" type:"structure"` + + // The ID of the subnet specified as the target network. + TargetNetworkId *string `locationName:"targetNetworkId" type:"string"` + + // The ID of the VPC in which the target network (subnet) is located. + VpcId *string `locationName:"vpcId" type:"string"` +} + +// String returns the string representation +func (s TargetNetwork) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TargetNetwork) GoString() string { + return s.String() +} + +// SetAssociationId sets the AssociationId field's value. +func (s *TargetNetwork) SetAssociationId(v string) *TargetNetwork { + s.AssociationId = &v return s } -// SetSecurityGroups sets the SecurityGroups field's value. -func (s *SpotFleetLaunchSpecification) SetSecurityGroups(v []*GroupIdentifier) *SpotFleetLaunchSpecification { - s.SecurityGroups = v +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *TargetNetwork) SetClientVpnEndpointId(v string) *TargetNetwork { + s.ClientVpnEndpointId = &v return s } -// SetSpotPrice sets the SpotPrice field's value. -func (s *SpotFleetLaunchSpecification) SetSpotPrice(v string) *SpotFleetLaunchSpecification { - s.SpotPrice = &v +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *TargetNetwork) SetSecurityGroups(v []*string) *TargetNetwork { + s.SecurityGroups = v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *SpotFleetLaunchSpecification) SetSubnetId(v string) *SpotFleetLaunchSpecification { - s.SubnetId = &v +// SetStatus sets the Status field's value. +func (s *TargetNetwork) SetStatus(v *AssociationStatus) *TargetNetwork { + s.Status = v return s } -// SetUserData sets the UserData field's value. -func (s *SpotFleetLaunchSpecification) SetUserData(v string) *SpotFleetLaunchSpecification { - s.UserData = &v +// SetTargetNetworkId sets the TargetNetworkId field's value. +func (s *TargetNetwork) SetTargetNetworkId(v string) *TargetNetwork { + s.TargetNetworkId = &v return s } -// SetWeightedCapacity sets the WeightedCapacity field's value. -func (s *SpotFleetLaunchSpecification) SetWeightedCapacity(v float64) *SpotFleetLaunchSpecification { - s.WeightedCapacity = &v +// SetVpcId sets the VpcId field's value. +func (s *TargetNetwork) SetVpcId(v string) *TargetNetwork { + s.VpcId = &v return s } -// Describes whether monitoring is enabled. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetMonitoring -type SpotFleetMonitoring struct { +// The total value of the new Convertible Reserved Instances. +type TargetReservationValue struct { _ struct{} `type:"structure"` - // Enables monitoring for the instance. - // - // Default: false - Enabled *bool `locationName:"enabled" type:"boolean"` + // The total value of the Convertible Reserved Instances that make up the exchange. + // This is the sum of the list value, remaining upfront price, and additional + // upfront cost of the exchange. + ReservationValue *ReservationValue `locationName:"reservationValue" type:"structure"` + + // The configuration of the Convertible Reserved Instances that make up the + // exchange. + TargetConfiguration *TargetConfiguration `locationName:"targetConfiguration" type:"structure"` } // String returns the string representation -func (s SpotFleetMonitoring) String() string { +func (s TargetReservationValue) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotFleetMonitoring) GoString() string { +func (s TargetReservationValue) GoString() string { return s.String() } -// SetEnabled sets the Enabled field's value. -func (s *SpotFleetMonitoring) SetEnabled(v bool) *SpotFleetMonitoring { - s.Enabled = &v +// SetReservationValue sets the ReservationValue field's value. +func (s *TargetReservationValue) SetReservationValue(v *ReservationValue) *TargetReservationValue { + s.ReservationValue = v return s } -// Describes a Spot fleet request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetRequestConfig -type SpotFleetRequestConfig struct { - _ struct{} `type:"structure"` +// SetTargetConfiguration sets the TargetConfiguration field's value. +func (s *TargetReservationValue) SetTargetConfiguration(v *TargetConfiguration) *TargetReservationValue { + s.TargetConfiguration = v + return s +} - // The progress of the Spot fleet request. If there is an error, the status - // is error. After all bids are placed, the status is pending_fulfillment. If - // the size of the fleet is equal to or greater than its target capacity, the - // status is fulfilled. If the size of the fleet is decreased, the status is - // pending_termination while Spot instances are terminating. - ActivityStatus *string `locationName:"activityStatus" type:"string" enum:"ActivityStatus"` +type TerminateClientVpnConnectionsInput struct { + _ struct{} `type:"structure"` - // The creation date and time of the request. + // The ID of the Client VPN endpoint to which the client is connected. // - // CreateTime is a required field - CreateTime *time.Time `locationName:"createTime" type:"timestamp" timestampFormat:"iso8601" required:"true"` + // ClientVpnEndpointId is a required field + ClientVpnEndpointId *string `type:"string" required:"true"` - // Information about the configuration of the Spot fleet request. - // - // SpotFleetRequestConfig is a required field - SpotFleetRequestConfig *SpotFleetRequestConfigData `locationName:"spotFleetRequestConfig" type:"structure" required:"true"` + // The ID of the client connection to be terminated. + ConnectionId *string `type:"string"` - // The ID of the Spot fleet request. - // - // SpotFleetRequestId is a required field - SpotFleetRequestId *string `locationName:"spotFleetRequestId" type:"string" required:"true"` + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` - // The state of the Spot fleet request. - // - // SpotFleetRequestState is a required field - SpotFleetRequestState *string `locationName:"spotFleetRequestState" type:"string" required:"true" enum:"BatchState"` + // The name of the user who initiated the connection. Use this option to terminate + // all active connections for the specified user. This option can only be used + // if the user has established up to five connections. + Username *string `type:"string"` } // String returns the string representation -func (s SpotFleetRequestConfig) String() string { +func (s TerminateClientVpnConnectionsInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotFleetRequestConfig) GoString() string { +func (s TerminateClientVpnConnectionsInput) GoString() string { return s.String() } -// SetActivityStatus sets the ActivityStatus field's value. -func (s *SpotFleetRequestConfig) SetActivityStatus(v string) *SpotFleetRequestConfig { - s.ActivityStatus = &v - return s +// Validate inspects the fields of the type to determine if they are valid. +func (s *TerminateClientVpnConnectionsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TerminateClientVpnConnectionsInput"} + if s.ClientVpnEndpointId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientVpnEndpointId")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil } -// SetCreateTime sets the CreateTime field's value. -func (s *SpotFleetRequestConfig) SetCreateTime(v time.Time) *SpotFleetRequestConfig { - s.CreateTime = &v +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *TerminateClientVpnConnectionsInput) SetClientVpnEndpointId(v string) *TerminateClientVpnConnectionsInput { + s.ClientVpnEndpointId = &v return s } -// SetSpotFleetRequestConfig sets the SpotFleetRequestConfig field's value. -func (s *SpotFleetRequestConfig) SetSpotFleetRequestConfig(v *SpotFleetRequestConfigData) *SpotFleetRequestConfig { - s.SpotFleetRequestConfig = v +// SetConnectionId sets the ConnectionId field's value. +func (s *TerminateClientVpnConnectionsInput) SetConnectionId(v string) *TerminateClientVpnConnectionsInput { + s.ConnectionId = &v return s } -// SetSpotFleetRequestId sets the SpotFleetRequestId field's value. -func (s *SpotFleetRequestConfig) SetSpotFleetRequestId(v string) *SpotFleetRequestConfig { - s.SpotFleetRequestId = &v +// SetDryRun sets the DryRun field's value. +func (s *TerminateClientVpnConnectionsInput) SetDryRun(v bool) *TerminateClientVpnConnectionsInput { + s.DryRun = &v return s } -// SetSpotFleetRequestState sets the SpotFleetRequestState field's value. -func (s *SpotFleetRequestConfig) SetSpotFleetRequestState(v string) *SpotFleetRequestConfig { - s.SpotFleetRequestState = &v +// SetUsername sets the Username field's value. +func (s *TerminateClientVpnConnectionsInput) SetUsername(v string) *TerminateClientVpnConnectionsInput { + s.Username = &v return s } -// Describes the configuration of a Spot fleet request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetRequestConfigData -type SpotFleetRequestConfigData struct { +type TerminateClientVpnConnectionsOutput struct { _ struct{} `type:"structure"` - // Indicates how to allocate the target capacity across the Spot pools specified - // by the Spot fleet request. The default is lowestPrice. - AllocationStrategy *string `locationName:"allocationStrategy" type:"string" enum:"AllocationStrategy"` + // The ID of the Client VPN endpoint. + ClientVpnEndpointId *string `locationName:"clientVpnEndpointId" type:"string"` - // A unique, case-sensitive identifier you provide to ensure idempotency of - // your listings. This helps avoid duplicate listings. For more information, - // see Ensuring Idempotency (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html). - ClientToken *string `locationName:"clientToken" type:"string"` + // The current state of the client connections. + ConnectionStatuses []*TerminateConnectionStatus `locationName:"connectionStatuses" locationNameList:"item" type:"list"` - // Indicates whether running Spot instances should be terminated if the target - // capacity of the Spot fleet request is decreased below the current size of - // the Spot fleet. - ExcessCapacityTerminationPolicy *string `locationName:"excessCapacityTerminationPolicy" type:"string" enum:"ExcessCapacityTerminationPolicy"` + // The user who established the terminated client connections. + Username *string `locationName:"username" type:"string"` +} - // The number of units fulfilled by this request compared to the set target - // capacity. - FulfilledCapacity *float64 `locationName:"fulfilledCapacity" type:"double"` +// String returns the string representation +func (s TerminateClientVpnConnectionsOutput) String() string { + return awsutil.Prettify(s) +} - // Grants the Spot fleet permission to terminate Spot instances on your behalf - // when you cancel its Spot fleet request using CancelSpotFleetRequests or when - // the Spot fleet request expires, if you set terminateInstancesWithExpiration. - // - // IamFleetRole is a required field - IamFleetRole *string `locationName:"iamFleetRole" type:"string" required:"true"` +// GoString returns the string representation +func (s TerminateClientVpnConnectionsOutput) GoString() string { + return s.String() +} - // Information about the launch specifications for the Spot fleet request. - // - // LaunchSpecifications is a required field - LaunchSpecifications []*SpotFleetLaunchSpecification `locationName:"launchSpecifications" locationNameList:"item" min:"1" type:"list" required:"true"` +// SetClientVpnEndpointId sets the ClientVpnEndpointId field's value. +func (s *TerminateClientVpnConnectionsOutput) SetClientVpnEndpointId(v string) *TerminateClientVpnConnectionsOutput { + s.ClientVpnEndpointId = &v + return s +} - // Indicates whether Spot fleet should replace unhealthy instances. - ReplaceUnhealthyInstances *bool `locationName:"replaceUnhealthyInstances" type:"boolean"` +// SetConnectionStatuses sets the ConnectionStatuses field's value. +func (s *TerminateClientVpnConnectionsOutput) SetConnectionStatuses(v []*TerminateConnectionStatus) *TerminateClientVpnConnectionsOutput { + s.ConnectionStatuses = v + return s +} - // The bid price per unit hour. - // - // SpotPrice is a required field - SpotPrice *string `locationName:"spotPrice" type:"string" required:"true"` +// SetUsername sets the Username field's value. +func (s *TerminateClientVpnConnectionsOutput) SetUsername(v string) *TerminateClientVpnConnectionsOutput { + s.Username = &v + return s +} - // The number of units to request. You can choose to set the target capacity - // in terms of instances or a performance characteristic that is important to - // your application workload, such as vCPUs, memory, or I/O. - // - // TargetCapacity is a required field - TargetCapacity *int64 `locationName:"targetCapacity" type:"integer" required:"true"` +// Information about a terminated Client VPN endpoint client connection. +type TerminateConnectionStatus struct { + _ struct{} `type:"structure"` - // Indicates whether running Spot instances should be terminated when the Spot - // fleet request expires. - TerminateInstancesWithExpiration *bool `locationName:"terminateInstancesWithExpiration" type:"boolean"` + // The ID of the client connection. + ConnectionId *string `locationName:"connectionId" type:"string"` - // The type of request. Indicates whether the fleet will only request the target - // capacity or also attempt to maintain it. When you request a certain target - // capacity, the fleet will only place the required bids. It will not attempt - // to replenish Spot instances if capacity is diminished, nor will it submit - // bids in alternative Spot pools if capacity is not available. When you want - // to maintain a certain target capacity, fleet will place the required bids - // to meet this target capacity. It will also automatically replenish any interrupted - // instances. Default: maintain. - Type *string `locationName:"type" type:"string" enum:"FleetType"` + // A message about the status of the client connection, if applicable. + CurrentStatus *ClientVpnConnectionStatus `locationName:"currentStatus" type:"structure"` - // The start date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // The default is to start fulfilling the request immediately. - ValidFrom *time.Time `locationName:"validFrom" type:"timestamp" timestampFormat:"iso8601"` + // The state of the client connection. + PreviousStatus *ClientVpnConnectionStatus `locationName:"previousStatus" type:"structure"` +} - // The end date and time of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // At this point, no new Spot instance requests are placed or enabled to fulfill - // the request. - ValidUntil *time.Time `locationName:"validUntil" type:"timestamp" timestampFormat:"iso8601"` +// String returns the string representation +func (s TerminateConnectionStatus) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TerminateConnectionStatus) GoString() string { + return s.String() +} + +// SetConnectionId sets the ConnectionId field's value. +func (s *TerminateConnectionStatus) SetConnectionId(v string) *TerminateConnectionStatus { + s.ConnectionId = &v + return s +} + +// SetCurrentStatus sets the CurrentStatus field's value. +func (s *TerminateConnectionStatus) SetCurrentStatus(v *ClientVpnConnectionStatus) *TerminateConnectionStatus { + s.CurrentStatus = v + return s +} + +// SetPreviousStatus sets the PreviousStatus field's value. +func (s *TerminateConnectionStatus) SetPreviousStatus(v *ClientVpnConnectionStatus) *TerminateConnectionStatus { + s.PreviousStatus = v + return s +} + +type TerminateInstancesInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `locationName:"dryRun" type:"boolean"` + + // The IDs of the instances. + // + // Constraints: Up to 1000 instance IDs. We recommend breaking up this request + // into smaller batches. + // + // InstanceIds is a required field + InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` } // String returns the string representation -func (s SpotFleetRequestConfigData) String() string { +func (s TerminateInstancesInput) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotFleetRequestConfigData) GoString() string { +func (s TerminateInstancesInput) GoString() string { return s.String() } // Validate inspects the fields of the type to determine if they are valid. -func (s *SpotFleetRequestConfigData) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "SpotFleetRequestConfigData"} - if s.IamFleetRole == nil { - invalidParams.Add(request.NewErrParamRequired("IamFleetRole")) - } - if s.LaunchSpecifications == nil { - invalidParams.Add(request.NewErrParamRequired("LaunchSpecifications")) - } - if s.LaunchSpecifications != nil && len(s.LaunchSpecifications) < 1 { - invalidParams.Add(request.NewErrParamMinLen("LaunchSpecifications", 1)) - } - if s.SpotPrice == nil { - invalidParams.Add(request.NewErrParamRequired("SpotPrice")) - } - if s.TargetCapacity == nil { - invalidParams.Add(request.NewErrParamRequired("TargetCapacity")) - } - if s.LaunchSpecifications != nil { - for i, v := range s.LaunchSpecifications { - if v == nil { - continue - } - if err := v.Validate(); err != nil { - invalidParams.AddNested(fmt.Sprintf("%s[%v]", "LaunchSpecifications", i), err.(request.ErrInvalidParams)) - } - } +func (s *TerminateInstancesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TerminateInstancesInput"} + if s.InstanceIds == nil { + invalidParams.Add(request.NewErrParamRequired("InstanceIds")) } if invalidParams.Len() > 0 { @@ -49370,1364 +94298,1599 @@ func (s *SpotFleetRequestConfigData) Validate() error { return nil } -// SetAllocationStrategy sets the AllocationStrategy field's value. -func (s *SpotFleetRequestConfigData) SetAllocationStrategy(v string) *SpotFleetRequestConfigData { - s.AllocationStrategy = &v +// SetDryRun sets the DryRun field's value. +func (s *TerminateInstancesInput) SetDryRun(v bool) *TerminateInstancesInput { + s.DryRun = &v return s } -// SetClientToken sets the ClientToken field's value. -func (s *SpotFleetRequestConfigData) SetClientToken(v string) *SpotFleetRequestConfigData { - s.ClientToken = &v +// SetInstanceIds sets the InstanceIds field's value. +func (s *TerminateInstancesInput) SetInstanceIds(v []*string) *TerminateInstancesInput { + s.InstanceIds = v return s } -// SetExcessCapacityTerminationPolicy sets the ExcessCapacityTerminationPolicy field's value. -func (s *SpotFleetRequestConfigData) SetExcessCapacityTerminationPolicy(v string) *SpotFleetRequestConfigData { - s.ExcessCapacityTerminationPolicy = &v - return s +type TerminateInstancesOutput struct { + _ struct{} `type:"structure"` + + // Information about the terminated instances. + TerminatingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` } -// SetFulfilledCapacity sets the FulfilledCapacity field's value. -func (s *SpotFleetRequestConfigData) SetFulfilledCapacity(v float64) *SpotFleetRequestConfigData { - s.FulfilledCapacity = &v - return s +// String returns the string representation +func (s TerminateInstancesOutput) String() string { + return awsutil.Prettify(s) } -// SetIamFleetRole sets the IamFleetRole field's value. -func (s *SpotFleetRequestConfigData) SetIamFleetRole(v string) *SpotFleetRequestConfigData { - s.IamFleetRole = &v - return s +// GoString returns the string representation +func (s TerminateInstancesOutput) GoString() string { + return s.String() } -// SetLaunchSpecifications sets the LaunchSpecifications field's value. -func (s *SpotFleetRequestConfigData) SetLaunchSpecifications(v []*SpotFleetLaunchSpecification) *SpotFleetRequestConfigData { - s.LaunchSpecifications = v +// SetTerminatingInstances sets the TerminatingInstances field's value. +func (s *TerminateInstancesOutput) SetTerminatingInstances(v []*InstanceStateChange) *TerminateInstancesOutput { + s.TerminatingInstances = v return s } -// SetReplaceUnhealthyInstances sets the ReplaceUnhealthyInstances field's value. -func (s *SpotFleetRequestConfigData) SetReplaceUnhealthyInstances(v bool) *SpotFleetRequestConfigData { - s.ReplaceUnhealthyInstances = &v - return s +// Describes the Traffic Mirror filter. +type TrafficMirrorFilter struct { + _ struct{} `type:"structure"` + + // The description of the Traffic Mirror filter. + Description *string `locationName:"description" type:"string"` + + // Information about the egress rules that are associated with the Traffic Mirror + // filter. + EgressFilterRules []*TrafficMirrorFilterRule `locationName:"egressFilterRuleSet" locationNameList:"item" type:"list"` + + // Information about the ingress rules that are associated with the Traffic + // Mirror filter. + IngressFilterRules []*TrafficMirrorFilterRule `locationName:"ingressFilterRuleSet" locationNameList:"item" type:"list"` + + // The network service traffic that is associated with the Traffic Mirror filter. + NetworkServices []*string `locationName:"networkServiceSet" locationNameList:"item" type:"list"` + + // The tags assigned to the Traffic Mirror filter. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the Traffic Mirror filter. + TrafficMirrorFilterId *string `locationName:"trafficMirrorFilterId" type:"string"` +} + +// String returns the string representation +func (s TrafficMirrorFilter) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TrafficMirrorFilter) GoString() string { + return s.String() } -// SetSpotPrice sets the SpotPrice field's value. -func (s *SpotFleetRequestConfigData) SetSpotPrice(v string) *SpotFleetRequestConfigData { - s.SpotPrice = &v +// SetDescription sets the Description field's value. +func (s *TrafficMirrorFilter) SetDescription(v string) *TrafficMirrorFilter { + s.Description = &v return s } -// SetTargetCapacity sets the TargetCapacity field's value. -func (s *SpotFleetRequestConfigData) SetTargetCapacity(v int64) *SpotFleetRequestConfigData { - s.TargetCapacity = &v +// SetEgressFilterRules sets the EgressFilterRules field's value. +func (s *TrafficMirrorFilter) SetEgressFilterRules(v []*TrafficMirrorFilterRule) *TrafficMirrorFilter { + s.EgressFilterRules = v return s } -// SetTerminateInstancesWithExpiration sets the TerminateInstancesWithExpiration field's value. -func (s *SpotFleetRequestConfigData) SetTerminateInstancesWithExpiration(v bool) *SpotFleetRequestConfigData { - s.TerminateInstancesWithExpiration = &v +// SetIngressFilterRules sets the IngressFilterRules field's value. +func (s *TrafficMirrorFilter) SetIngressFilterRules(v []*TrafficMirrorFilterRule) *TrafficMirrorFilter { + s.IngressFilterRules = v return s } -// SetType sets the Type field's value. -func (s *SpotFleetRequestConfigData) SetType(v string) *SpotFleetRequestConfigData { - s.Type = &v +// SetNetworkServices sets the NetworkServices field's value. +func (s *TrafficMirrorFilter) SetNetworkServices(v []*string) *TrafficMirrorFilter { + s.NetworkServices = v return s } -// SetValidFrom sets the ValidFrom field's value. -func (s *SpotFleetRequestConfigData) SetValidFrom(v time.Time) *SpotFleetRequestConfigData { - s.ValidFrom = &v +// SetTags sets the Tags field's value. +func (s *TrafficMirrorFilter) SetTags(v []*Tag) *TrafficMirrorFilter { + s.Tags = v return s } -// SetValidUntil sets the ValidUntil field's value. -func (s *SpotFleetRequestConfigData) SetValidUntil(v time.Time) *SpotFleetRequestConfigData { - s.ValidUntil = &v +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *TrafficMirrorFilter) SetTrafficMirrorFilterId(v string) *TrafficMirrorFilter { + s.TrafficMirrorFilterId = &v return s } -// Describes a Spot instance request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotInstanceRequest -type SpotInstanceRequest struct { +// Describes the Traffic Mirror rule. +type TrafficMirrorFilterRule struct { _ struct{} `type:"structure"` - // If you specified a duration and your Spot instance request was fulfilled, - // this is the fixed hourly price in effect for the Spot instance while it runs. - ActualBlockHourlyPrice *string `locationName:"actualBlockHourlyPrice" type:"string"` - - // The Availability Zone group. If you specify the same Availability Zone group - // for all Spot instance requests, all Spot instances are launched in the same - // Availability Zone. - AvailabilityZoneGroup *string `locationName:"availabilityZoneGroup" type:"string"` - - // The duration for the Spot instance, in minutes. - BlockDurationMinutes *int64 `locationName:"blockDurationMinutes" type:"integer"` - - // The date and time when the Spot instance request was created, in UTC format - // (for example, YYYY-MM-DDTHH:MM:SSZ). - CreateTime *time.Time `locationName:"createTime" type:"timestamp" timestampFormat:"iso8601"` - - // The fault codes for the Spot instance request, if any. - Fault *SpotInstanceStateFault `locationName:"fault" type:"structure"` - - // The instance ID, if an instance has been launched to fulfill the Spot instance - // request. - InstanceId *string `locationName:"instanceId" type:"string"` - - // The instance launch group. Launch groups are Spot instances that launch together - // and terminate together. - LaunchGroup *string `locationName:"launchGroup" type:"string"` - - // Additional information for launching instances. - LaunchSpecification *LaunchSpecification `locationName:"launchSpecification" type:"structure"` + // The description of the Traffic Mirror rule. + Description *string `locationName:"description" type:"string"` - // The Availability Zone in which the bid is launched. - LaunchedAvailabilityZone *string `locationName:"launchedAvailabilityZone" type:"string"` + // The destination CIDR block assigned to the Traffic Mirror rule. + DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` - // The product description associated with the Spot instance. - ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` + // The destination port range assigned to the Traffic Mirror rule. + DestinationPortRange *TrafficMirrorPortRange `locationName:"destinationPortRange" type:"structure"` - // The ID of the Spot instance request. - SpotInstanceRequestId *string `locationName:"spotInstanceRequestId" type:"string"` + // The protocol assigned to the Traffic Mirror rule. + Protocol *int64 `locationName:"protocol" type:"integer"` - // The maximum hourly price (bid) for the Spot instance launched to fulfill - // the request. - SpotPrice *string `locationName:"spotPrice" type:"string"` + // The action assigned to the Traffic Mirror rule. + RuleAction *string `locationName:"ruleAction" type:"string" enum:"TrafficMirrorRuleAction"` - // The state of the Spot instance request. Spot bid status information can help - // you track your Spot instance requests. For more information, see Spot Bid - // Status (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html) - // in the Amazon Elastic Compute Cloud User Guide. - State *string `locationName:"state" type:"string" enum:"SpotInstanceState"` + // The rule number of the Traffic Mirror rule. + RuleNumber *int64 `locationName:"ruleNumber" type:"integer"` - // The status code and status message describing the Spot instance request. - Status *SpotInstanceStatus `locationName:"status" type:"structure"` + // The source CIDR block assigned to the Traffic Mirror rule. + SourceCidrBlock *string `locationName:"sourceCidrBlock" type:"string"` - // Any tags assigned to the resource. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The source port range assigned to the Traffic Mirror rule. + SourcePortRange *TrafficMirrorPortRange `locationName:"sourcePortRange" type:"structure"` - // The Spot instance request type. - Type *string `locationName:"type" type:"string" enum:"SpotInstanceType"` + // The traffic direction assigned to the Traffic Mirror rule. + TrafficDirection *string `locationName:"trafficDirection" type:"string" enum:"TrafficDirection"` - // The start date of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // The request becomes active at this date and time. - ValidFrom *time.Time `locationName:"validFrom" type:"timestamp" timestampFormat:"iso8601"` + // The ID of the Traffic Mirror filter that the rule is associated with. + TrafficMirrorFilterId *string `locationName:"trafficMirrorFilterId" type:"string"` - // The end date of the request, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - // If this is a one-time request, it remains active until all instances launch, - // the request is canceled, or this date is reached. If the request is persistent, - // it remains active until it is canceled or this date is reached. - ValidUntil *time.Time `locationName:"validUntil" type:"timestamp" timestampFormat:"iso8601"` + // The ID of the Traffic Mirror rule. + TrafficMirrorFilterRuleId *string `locationName:"trafficMirrorFilterRuleId" type:"string"` } // String returns the string representation -func (s SpotInstanceRequest) String() string { +func (s TrafficMirrorFilterRule) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotInstanceRequest) GoString() string { +func (s TrafficMirrorFilterRule) GoString() string { return s.String() } -// SetActualBlockHourlyPrice sets the ActualBlockHourlyPrice field's value. -func (s *SpotInstanceRequest) SetActualBlockHourlyPrice(v string) *SpotInstanceRequest { - s.ActualBlockHourlyPrice = &v +// SetDescription sets the Description field's value. +func (s *TrafficMirrorFilterRule) SetDescription(v string) *TrafficMirrorFilterRule { + s.Description = &v return s } -// SetAvailabilityZoneGroup sets the AvailabilityZoneGroup field's value. -func (s *SpotInstanceRequest) SetAvailabilityZoneGroup(v string) *SpotInstanceRequest { - s.AvailabilityZoneGroup = &v +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *TrafficMirrorFilterRule) SetDestinationCidrBlock(v string) *TrafficMirrorFilterRule { + s.DestinationCidrBlock = &v return s } -// SetBlockDurationMinutes sets the BlockDurationMinutes field's value. -func (s *SpotInstanceRequest) SetBlockDurationMinutes(v int64) *SpotInstanceRequest { - s.BlockDurationMinutes = &v +// SetDestinationPortRange sets the DestinationPortRange field's value. +func (s *TrafficMirrorFilterRule) SetDestinationPortRange(v *TrafficMirrorPortRange) *TrafficMirrorFilterRule { + s.DestinationPortRange = v return s } -// SetCreateTime sets the CreateTime field's value. -func (s *SpotInstanceRequest) SetCreateTime(v time.Time) *SpotInstanceRequest { - s.CreateTime = &v +// SetProtocol sets the Protocol field's value. +func (s *TrafficMirrorFilterRule) SetProtocol(v int64) *TrafficMirrorFilterRule { + s.Protocol = &v return s } -// SetFault sets the Fault field's value. -func (s *SpotInstanceRequest) SetFault(v *SpotInstanceStateFault) *SpotInstanceRequest { - s.Fault = v +// SetRuleAction sets the RuleAction field's value. +func (s *TrafficMirrorFilterRule) SetRuleAction(v string) *TrafficMirrorFilterRule { + s.RuleAction = &v return s } -// SetInstanceId sets the InstanceId field's value. -func (s *SpotInstanceRequest) SetInstanceId(v string) *SpotInstanceRequest { - s.InstanceId = &v +// SetRuleNumber sets the RuleNumber field's value. +func (s *TrafficMirrorFilterRule) SetRuleNumber(v int64) *TrafficMirrorFilterRule { + s.RuleNumber = &v return s } -// SetLaunchGroup sets the LaunchGroup field's value. -func (s *SpotInstanceRequest) SetLaunchGroup(v string) *SpotInstanceRequest { - s.LaunchGroup = &v +// SetSourceCidrBlock sets the SourceCidrBlock field's value. +func (s *TrafficMirrorFilterRule) SetSourceCidrBlock(v string) *TrafficMirrorFilterRule { + s.SourceCidrBlock = &v return s } -// SetLaunchSpecification sets the LaunchSpecification field's value. -func (s *SpotInstanceRequest) SetLaunchSpecification(v *LaunchSpecification) *SpotInstanceRequest { - s.LaunchSpecification = v +// SetSourcePortRange sets the SourcePortRange field's value. +func (s *TrafficMirrorFilterRule) SetSourcePortRange(v *TrafficMirrorPortRange) *TrafficMirrorFilterRule { + s.SourcePortRange = v return s } -// SetLaunchedAvailabilityZone sets the LaunchedAvailabilityZone field's value. -func (s *SpotInstanceRequest) SetLaunchedAvailabilityZone(v string) *SpotInstanceRequest { - s.LaunchedAvailabilityZone = &v +// SetTrafficDirection sets the TrafficDirection field's value. +func (s *TrafficMirrorFilterRule) SetTrafficDirection(v string) *TrafficMirrorFilterRule { + s.TrafficDirection = &v return s } -// SetProductDescription sets the ProductDescription field's value. -func (s *SpotInstanceRequest) SetProductDescription(v string) *SpotInstanceRequest { - s.ProductDescription = &v +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *TrafficMirrorFilterRule) SetTrafficMirrorFilterId(v string) *TrafficMirrorFilterRule { + s.TrafficMirrorFilterId = &v return s } -// SetSpotInstanceRequestId sets the SpotInstanceRequestId field's value. -func (s *SpotInstanceRequest) SetSpotInstanceRequestId(v string) *SpotInstanceRequest { - s.SpotInstanceRequestId = &v +// SetTrafficMirrorFilterRuleId sets the TrafficMirrorFilterRuleId field's value. +func (s *TrafficMirrorFilterRule) SetTrafficMirrorFilterRuleId(v string) *TrafficMirrorFilterRule { + s.TrafficMirrorFilterRuleId = &v return s } -// SetSpotPrice sets the SpotPrice field's value. -func (s *SpotInstanceRequest) SetSpotPrice(v string) *SpotInstanceRequest { - s.SpotPrice = &v - return s -} +// Describes the Traffic Mirror port range. +type TrafficMirrorPortRange struct { + _ struct{} `type:"structure"` -// SetState sets the State field's value. -func (s *SpotInstanceRequest) SetState(v string) *SpotInstanceRequest { - s.State = &v - return s -} + // The start of the Traffic Mirror port range. This applies to the TCP and UDP + // protocols. + FromPort *int64 `locationName:"fromPort" type:"integer"` -// SetStatus sets the Status field's value. -func (s *SpotInstanceRequest) SetStatus(v *SpotInstanceStatus) *SpotInstanceRequest { - s.Status = v - return s + // The end of the Traffic Mirror port range. This applies to the TCP and UDP + // protocols. + ToPort *int64 `locationName:"toPort" type:"integer"` } -// SetTags sets the Tags field's value. -func (s *SpotInstanceRequest) SetTags(v []*Tag) *SpotInstanceRequest { - s.Tags = v - return s +// String returns the string representation +func (s TrafficMirrorPortRange) String() string { + return awsutil.Prettify(s) } -// SetType sets the Type field's value. -func (s *SpotInstanceRequest) SetType(v string) *SpotInstanceRequest { - s.Type = &v - return s +// GoString returns the string representation +func (s TrafficMirrorPortRange) GoString() string { + return s.String() } -// SetValidFrom sets the ValidFrom field's value. -func (s *SpotInstanceRequest) SetValidFrom(v time.Time) *SpotInstanceRequest { - s.ValidFrom = &v +// SetFromPort sets the FromPort field's value. +func (s *TrafficMirrorPortRange) SetFromPort(v int64) *TrafficMirrorPortRange { + s.FromPort = &v return s } -// SetValidUntil sets the ValidUntil field's value. -func (s *SpotInstanceRequest) SetValidUntil(v time.Time) *SpotInstanceRequest { - s.ValidUntil = &v +// SetToPort sets the ToPort field's value. +func (s *TrafficMirrorPortRange) SetToPort(v int64) *TrafficMirrorPortRange { + s.ToPort = &v return s } -// Describes a Spot instance state change. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotInstanceStateFault -type SpotInstanceStateFault struct { +// Information about the Traffic Mirror filter rule port range. +type TrafficMirrorPortRangeRequest struct { _ struct{} `type:"structure"` - // The reason code for the Spot instance state change. - Code *string `locationName:"code" type:"string"` + // The first port in the Traffic Mirror port range. This applies to the TCP + // and UDP protocols. + FromPort *int64 `type:"integer"` - // The message for the Spot instance state change. - Message *string `locationName:"message" type:"string"` + // The last port in the Traffic Mirror port range. This applies to the TCP and + // UDP protocols. + ToPort *int64 `type:"integer"` } // String returns the string representation -func (s SpotInstanceStateFault) String() string { +func (s TrafficMirrorPortRangeRequest) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotInstanceStateFault) GoString() string { +func (s TrafficMirrorPortRangeRequest) GoString() string { return s.String() } -// SetCode sets the Code field's value. -func (s *SpotInstanceStateFault) SetCode(v string) *SpotInstanceStateFault { - s.Code = &v +// SetFromPort sets the FromPort field's value. +func (s *TrafficMirrorPortRangeRequest) SetFromPort(v int64) *TrafficMirrorPortRangeRequest { + s.FromPort = &v return s } -// SetMessage sets the Message field's value. -func (s *SpotInstanceStateFault) SetMessage(v string) *SpotInstanceStateFault { - s.Message = &v +// SetToPort sets the ToPort field's value. +func (s *TrafficMirrorPortRangeRequest) SetToPort(v int64) *TrafficMirrorPortRangeRequest { + s.ToPort = &v return s } -// Describes the status of a Spot instance request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotInstanceStatus -type SpotInstanceStatus struct { +// Describes a Traffic Mirror session. +type TrafficMirrorSession struct { _ struct{} `type:"structure"` - // The status code. For a list of status codes, see Spot Bid Status Codes (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html#spot-instance-bid-status-understand) - // in the Amazon Elastic Compute Cloud User Guide. - Code *string `locationName:"code" type:"string"` + // The description of the Traffic Mirror session. + Description *string `locationName:"description" type:"string"` - // The description for the status code. - Message *string `locationName:"message" type:"string"` + // The ID of the Traffic Mirror session's network interface. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - // The date and time of the most recent status update, in UTC format (for example, - // YYYY-MM-DDTHH:MM:SSZ). - UpdateTime *time.Time `locationName:"updateTime" type:"timestamp" timestampFormat:"iso8601"` + // The ID of the account that owns the Traffic Mirror session. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The number of bytes in each packet to mirror. These are the bytes after the + // VXLAN header. To mirror a subset, set this to the length (in bytes) to mirror. + // For example, if you set this value to 100, then the first 100 bytes that + // meet the filter criteria are copied to the target. Do not specify this parameter + // when you want to mirror the entire packet + PacketLength *int64 `locationName:"packetLength" type:"integer"` + + // The session number determines the order in which sessions are evaluated when + // an interface is used by multiple sessions. The first session with a matching + // filter is the one that mirrors the packets. + // + // Valid values are 1-32766. + SessionNumber *int64 `locationName:"sessionNumber" type:"integer"` + + // The tags assigned to the Traffic Mirror session. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the Traffic Mirror filter. + TrafficMirrorFilterId *string `locationName:"trafficMirrorFilterId" type:"string"` + + // The ID for the Traffic Mirror session. + TrafficMirrorSessionId *string `locationName:"trafficMirrorSessionId" type:"string"` + + // The ID of the Traffic Mirror target. + TrafficMirrorTargetId *string `locationName:"trafficMirrorTargetId" type:"string"` + + // The virtual network ID associated with the Traffic Mirror session. + VirtualNetworkId *int64 `locationName:"virtualNetworkId" type:"integer"` } // String returns the string representation -func (s SpotInstanceStatus) String() string { +func (s TrafficMirrorSession) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotInstanceStatus) GoString() string { +func (s TrafficMirrorSession) GoString() string { return s.String() } -// SetCode sets the Code field's value. -func (s *SpotInstanceStatus) SetCode(v string) *SpotInstanceStatus { - s.Code = &v +// SetDescription sets the Description field's value. +func (s *TrafficMirrorSession) SetDescription(v string) *TrafficMirrorSession { + s.Description = &v return s } -// SetMessage sets the Message field's value. -func (s *SpotInstanceStatus) SetMessage(v string) *SpotInstanceStatus { - s.Message = &v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *TrafficMirrorSession) SetNetworkInterfaceId(v string) *TrafficMirrorSession { + s.NetworkInterfaceId = &v return s } -// SetUpdateTime sets the UpdateTime field's value. -func (s *SpotInstanceStatus) SetUpdateTime(v time.Time) *SpotInstanceStatus { - s.UpdateTime = &v +// SetOwnerId sets the OwnerId field's value. +func (s *TrafficMirrorSession) SetOwnerId(v string) *TrafficMirrorSession { + s.OwnerId = &v return s } -// Describes Spot instance placement. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotPlacement -type SpotPlacement struct { - _ struct{} `type:"structure"` - - // The Availability Zone. - // - // [Spot fleet only] To specify multiple Availability Zones, separate them using - // commas; for example, "us-west-2a, us-west-2b". - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` - - // The name of the placement group (for cluster instances). - GroupName *string `locationName:"groupName" type:"string"` +// SetPacketLength sets the PacketLength field's value. +func (s *TrafficMirrorSession) SetPacketLength(v int64) *TrafficMirrorSession { + s.PacketLength = &v + return s +} - // The tenancy of the instance (if the instance is running in a VPC). An instance - // with a tenancy of dedicated runs on single-tenant hardware. The host tenancy - // is not supported for Spot instances. - Tenancy *string `locationName:"tenancy" type:"string" enum:"Tenancy"` +// SetSessionNumber sets the SessionNumber field's value. +func (s *TrafficMirrorSession) SetSessionNumber(v int64) *TrafficMirrorSession { + s.SessionNumber = &v + return s } -// String returns the string representation -func (s SpotPlacement) String() string { - return awsutil.Prettify(s) +// SetTags sets the Tags field's value. +func (s *TrafficMirrorSession) SetTags(v []*Tag) *TrafficMirrorSession { + s.Tags = v + return s } -// GoString returns the string representation -func (s SpotPlacement) GoString() string { - return s.String() +// SetTrafficMirrorFilterId sets the TrafficMirrorFilterId field's value. +func (s *TrafficMirrorSession) SetTrafficMirrorFilterId(v string) *TrafficMirrorSession { + s.TrafficMirrorFilterId = &v + return s } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *SpotPlacement) SetAvailabilityZone(v string) *SpotPlacement { - s.AvailabilityZone = &v +// SetTrafficMirrorSessionId sets the TrafficMirrorSessionId field's value. +func (s *TrafficMirrorSession) SetTrafficMirrorSessionId(v string) *TrafficMirrorSession { + s.TrafficMirrorSessionId = &v return s } -// SetGroupName sets the GroupName field's value. -func (s *SpotPlacement) SetGroupName(v string) *SpotPlacement { - s.GroupName = &v +// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. +func (s *TrafficMirrorSession) SetTrafficMirrorTargetId(v string) *TrafficMirrorSession { + s.TrafficMirrorTargetId = &v return s } -// SetTenancy sets the Tenancy field's value. -func (s *SpotPlacement) SetTenancy(v string) *SpotPlacement { - s.Tenancy = &v +// SetVirtualNetworkId sets the VirtualNetworkId field's value. +func (s *TrafficMirrorSession) SetVirtualNetworkId(v int64) *TrafficMirrorSession { + s.VirtualNetworkId = &v return s } -// Describes the maximum hourly price (bid) for any Spot instance launched to -// fulfill the request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotPrice -type SpotPrice struct { +// Describes a Traffic Mirror target. +type TrafficMirrorTarget struct { _ struct{} `type:"structure"` - // The Availability Zone. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` + // Information about the Traffic Mirror target. + Description *string `locationName:"description" type:"string"` - // The instance type. Note that T2 and HS1 instance types are not supported. - InstanceType *string `locationName:"instanceType" type:"string" enum:"InstanceType"` + // The network interface ID that is attached to the target. + NetworkInterfaceId *string `locationName:"networkInterfaceId" type:"string"` - // A general description of the AMI. - ProductDescription *string `locationName:"productDescription" type:"string" enum:"RIProductDescription"` + // The Amazon Resource Name (ARN) of the Network Load Balancer. + NetworkLoadBalancerArn *string `locationName:"networkLoadBalancerArn" type:"string"` - // The maximum price (bid) that you are willing to pay for a Spot instance. - SpotPrice *string `locationName:"spotPrice" type:"string"` + // The ID of the account that owns the Traffic Mirror target. + OwnerId *string `locationName:"ownerId" type:"string"` - // The date and time the request was created, in UTC format (for example, YYYY-MM-DDTHH:MM:SSZ). - Timestamp *time.Time `locationName:"timestamp" type:"timestamp" timestampFormat:"iso8601"` + // The tags assigned to the Traffic Mirror target. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the Traffic Mirror target. + TrafficMirrorTargetId *string `locationName:"trafficMirrorTargetId" type:"string"` + + // The type of Traffic Mirror target. + Type *string `locationName:"type" type:"string" enum:"TrafficMirrorTargetType"` } // String returns the string representation -func (s SpotPrice) String() string { +func (s TrafficMirrorTarget) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SpotPrice) GoString() string { +func (s TrafficMirrorTarget) GoString() string { return s.String() } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *SpotPrice) SetAvailabilityZone(v string) *SpotPrice { - s.AvailabilityZone = &v +// SetDescription sets the Description field's value. +func (s *TrafficMirrorTarget) SetDescription(v string) *TrafficMirrorTarget { + s.Description = &v return s } -// SetInstanceType sets the InstanceType field's value. -func (s *SpotPrice) SetInstanceType(v string) *SpotPrice { - s.InstanceType = &v +// SetNetworkInterfaceId sets the NetworkInterfaceId field's value. +func (s *TrafficMirrorTarget) SetNetworkInterfaceId(v string) *TrafficMirrorTarget { + s.NetworkInterfaceId = &v return s } -// SetProductDescription sets the ProductDescription field's value. -func (s *SpotPrice) SetProductDescription(v string) *SpotPrice { - s.ProductDescription = &v +// SetNetworkLoadBalancerArn sets the NetworkLoadBalancerArn field's value. +func (s *TrafficMirrorTarget) SetNetworkLoadBalancerArn(v string) *TrafficMirrorTarget { + s.NetworkLoadBalancerArn = &v return s } -// SetSpotPrice sets the SpotPrice field's value. -func (s *SpotPrice) SetSpotPrice(v string) *SpotPrice { - s.SpotPrice = &v +// SetOwnerId sets the OwnerId field's value. +func (s *TrafficMirrorTarget) SetOwnerId(v string) *TrafficMirrorTarget { + s.OwnerId = &v return s } -// SetTimestamp sets the Timestamp field's value. -func (s *SpotPrice) SetTimestamp(v time.Time) *SpotPrice { - s.Timestamp = &v +// SetTags sets the Tags field's value. +func (s *TrafficMirrorTarget) SetTags(v []*Tag) *TrafficMirrorTarget { + s.Tags = v return s } -// Describes a stale rule in a security group. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StaleIpPermission -type StaleIpPermission struct { +// SetTrafficMirrorTargetId sets the TrafficMirrorTargetId field's value. +func (s *TrafficMirrorTarget) SetTrafficMirrorTargetId(v string) *TrafficMirrorTarget { + s.TrafficMirrorTargetId = &v + return s +} + +// SetType sets the Type field's value. +func (s *TrafficMirrorTarget) SetType(v string) *TrafficMirrorTarget { + s.Type = &v + return s +} + +// Describes a transit gateway. +type TransitGateway struct { _ struct{} `type:"structure"` - // The start of the port range for the TCP and UDP protocols, or an ICMP type - // number. A value of -1 indicates all ICMP types. - FromPort *int64 `locationName:"fromPort" type:"integer"` + // The creation time. + CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - // The IP protocol name (for tcp, udp, and icmp) or number (see Protocol Numbers) - // (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml). - IpProtocol *string `locationName:"ipProtocol" type:"string"` + // The description of the transit gateway. + Description *string `locationName:"description" type:"string"` - // One or more IP ranges. Not applicable for stale security group rules. - IpRanges []*string `locationName:"ipRanges" locationNameList:"item" type:"list"` + // The transit gateway options. + Options *TransitGatewayOptions `locationName:"options" type:"structure"` - // One or more prefix list IDs for an AWS service. Not applicable for stale - // security group rules. - PrefixListIds []*string `locationName:"prefixListIds" locationNameList:"item" type:"list"` + // The ID of the AWS account ID that owns the transit gateway. + OwnerId *string `locationName:"ownerId" type:"string"` - // The end of the port range for the TCP and UDP protocols, or an ICMP type - // number. A value of -1 indicates all ICMP types. - ToPort *int64 `locationName:"toPort" type:"integer"` + // The state of the transit gateway. + State *string `locationName:"state" type:"string" enum:"TransitGatewayState"` - // One or more security group pairs. Returns the ID of the referenced security - // group and VPC, and the ID and status of the VPC peering connection. - UserIdGroupPairs []*UserIdGroupPair `locationName:"groups" locationNameList:"item" type:"list"` + // The tags for the transit gateway. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The Amazon Resource Name (ARN) of the transit gateway. + TransitGatewayArn *string `locationName:"transitGatewayArn" type:"string"` + + // The ID of the transit gateway. + TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` } // String returns the string representation -func (s StaleIpPermission) String() string { +func (s TransitGateway) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s StaleIpPermission) GoString() string { +func (s TransitGateway) GoString() string { return s.String() } -// SetFromPort sets the FromPort field's value. -func (s *StaleIpPermission) SetFromPort(v int64) *StaleIpPermission { - s.FromPort = &v +// SetCreationTime sets the CreationTime field's value. +func (s *TransitGateway) SetCreationTime(v time.Time) *TransitGateway { + s.CreationTime = &v return s } -// SetIpProtocol sets the IpProtocol field's value. -func (s *StaleIpPermission) SetIpProtocol(v string) *StaleIpPermission { - s.IpProtocol = &v +// SetDescription sets the Description field's value. +func (s *TransitGateway) SetDescription(v string) *TransitGateway { + s.Description = &v return s } -// SetIpRanges sets the IpRanges field's value. -func (s *StaleIpPermission) SetIpRanges(v []*string) *StaleIpPermission { - s.IpRanges = v +// SetOptions sets the Options field's value. +func (s *TransitGateway) SetOptions(v *TransitGatewayOptions) *TransitGateway { + s.Options = v return s } -// SetPrefixListIds sets the PrefixListIds field's value. -func (s *StaleIpPermission) SetPrefixListIds(v []*string) *StaleIpPermission { - s.PrefixListIds = v +// SetOwnerId sets the OwnerId field's value. +func (s *TransitGateway) SetOwnerId(v string) *TransitGateway { + s.OwnerId = &v return s } -// SetToPort sets the ToPort field's value. -func (s *StaleIpPermission) SetToPort(v int64) *StaleIpPermission { - s.ToPort = &v +// SetState sets the State field's value. +func (s *TransitGateway) SetState(v string) *TransitGateway { + s.State = &v return s } -// SetUserIdGroupPairs sets the UserIdGroupPairs field's value. -func (s *StaleIpPermission) SetUserIdGroupPairs(v []*UserIdGroupPair) *StaleIpPermission { - s.UserIdGroupPairs = v +// SetTags sets the Tags field's value. +func (s *TransitGateway) SetTags(v []*Tag) *TransitGateway { + s.Tags = v return s } -// Describes a stale security group (a security group that contains stale rules). -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StaleSecurityGroup -type StaleSecurityGroup struct { - _ struct{} `type:"structure"` +// SetTransitGatewayArn sets the TransitGatewayArn field's value. +func (s *TransitGateway) SetTransitGatewayArn(v string) *TransitGateway { + s.TransitGatewayArn = &v + return s +} - // The description of the security group. - Description *string `locationName:"description" type:"string"` +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *TransitGateway) SetTransitGatewayId(v string) *TransitGateway { + s.TransitGatewayId = &v + return s +} - // The ID of the security group. - // - // GroupId is a required field - GroupId *string `locationName:"groupId" type:"string" required:"true"` +// Describes an association between a resource attachment and a transit gateway +// route table. +type TransitGatewayAssociation struct { + _ struct{} `type:"structure"` - // The name of the security group. - GroupName *string `locationName:"groupName" type:"string"` + // The ID of the resource. + ResourceId *string `locationName:"resourceId" type:"string"` - // Information about the stale inbound rules in the security group. - StaleIpPermissions []*StaleIpPermission `locationName:"staleIpPermissions" locationNameList:"item" type:"list"` + // The resource type. + ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` - // Information about the stale outbound rules in the security group. - StaleIpPermissionsEgress []*StaleIpPermission `locationName:"staleIpPermissionsEgress" locationNameList:"item" type:"list"` + // The state of the association. + State *string `locationName:"state" type:"string" enum:"TransitGatewayAssociationState"` - // The ID of the VPC for the security group. - VpcId *string `locationName:"vpcId" type:"string"` + // The ID of the attachment. + TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` + + // The ID of the transit gateway route table. + TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` } // String returns the string representation -func (s StaleSecurityGroup) String() string { +func (s TransitGatewayAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s StaleSecurityGroup) GoString() string { +func (s TransitGatewayAssociation) GoString() string { return s.String() } -// SetDescription sets the Description field's value. -func (s *StaleSecurityGroup) SetDescription(v string) *StaleSecurityGroup { - s.Description = &v - return s -} - -// SetGroupId sets the GroupId field's value. -func (s *StaleSecurityGroup) SetGroupId(v string) *StaleSecurityGroup { - s.GroupId = &v +// SetResourceId sets the ResourceId field's value. +func (s *TransitGatewayAssociation) SetResourceId(v string) *TransitGatewayAssociation { + s.ResourceId = &v return s } -// SetGroupName sets the GroupName field's value. -func (s *StaleSecurityGroup) SetGroupName(v string) *StaleSecurityGroup { - s.GroupName = &v +// SetResourceType sets the ResourceType field's value. +func (s *TransitGatewayAssociation) SetResourceType(v string) *TransitGatewayAssociation { + s.ResourceType = &v return s } -// SetStaleIpPermissions sets the StaleIpPermissions field's value. -func (s *StaleSecurityGroup) SetStaleIpPermissions(v []*StaleIpPermission) *StaleSecurityGroup { - s.StaleIpPermissions = v +// SetState sets the State field's value. +func (s *TransitGatewayAssociation) SetState(v string) *TransitGatewayAssociation { + s.State = &v return s } -// SetStaleIpPermissionsEgress sets the StaleIpPermissionsEgress field's value. -func (s *StaleSecurityGroup) SetStaleIpPermissionsEgress(v []*StaleIpPermission) *StaleSecurityGroup { - s.StaleIpPermissionsEgress = v +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *TransitGatewayAssociation) SetTransitGatewayAttachmentId(v string) *TransitGatewayAssociation { + s.TransitGatewayAttachmentId = &v return s } -// SetVpcId sets the VpcId field's value. -func (s *StaleSecurityGroup) SetVpcId(v string) *StaleSecurityGroup { - s.VpcId = &v +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *TransitGatewayAssociation) SetTransitGatewayRouteTableId(v string) *TransitGatewayAssociation { + s.TransitGatewayRouteTableId = &v return s } -// Contains the parameters for StartInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstancesRequest -type StartInstancesInput struct { +// Describes an attachment between a resource and a transit gateway. +type TransitGatewayAttachment struct { _ struct{} `type:"structure"` - // Reserved. - AdditionalInfo *string `locationName:"additionalInfo" type:"string"` + // The association. + Association *TransitGatewayAttachmentAssociation `locationName:"association" type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The creation time. + CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - // One or more instance IDs. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` + // The ID of the resource. + ResourceId *string `locationName:"resourceId" type:"string"` + + // The ID of the AWS account that owns the resource. + ResourceOwnerId *string `locationName:"resourceOwnerId" type:"string"` + + // The resource type. + ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` + + // The attachment state. + State *string `locationName:"state" type:"string" enum:"TransitGatewayAttachmentState"` + + // The tags for the attachment. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the attachment. + TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` + + // The ID of the transit gateway. + TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` + + // The ID of the AWS account that owns the transit gateway. + TransitGatewayOwnerId *string `locationName:"transitGatewayOwnerId" type:"string"` } // String returns the string representation -func (s StartInstancesInput) String() string { +func (s TransitGatewayAttachment) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s StartInstancesInput) GoString() string { +func (s TransitGatewayAttachment) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *StartInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "StartInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } +// SetAssociation sets the Association field's value. +func (s *TransitGatewayAttachment) SetAssociation(v *TransitGatewayAttachmentAssociation) *TransitGatewayAttachment { + s.Association = v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetCreationTime sets the CreationTime field's value. +func (s *TransitGatewayAttachment) SetCreationTime(v time.Time) *TransitGatewayAttachment { + s.CreationTime = &v + return s } -// SetAdditionalInfo sets the AdditionalInfo field's value. -func (s *StartInstancesInput) SetAdditionalInfo(v string) *StartInstancesInput { - s.AdditionalInfo = &v +// SetResourceId sets the ResourceId field's value. +func (s *TransitGatewayAttachment) SetResourceId(v string) *TransitGatewayAttachment { + s.ResourceId = &v return s } -// SetDryRun sets the DryRun field's value. -func (s *StartInstancesInput) SetDryRun(v bool) *StartInstancesInput { - s.DryRun = &v +// SetResourceOwnerId sets the ResourceOwnerId field's value. +func (s *TransitGatewayAttachment) SetResourceOwnerId(v string) *TransitGatewayAttachment { + s.ResourceOwnerId = &v return s } -// SetInstanceIds sets the InstanceIds field's value. -func (s *StartInstancesInput) SetInstanceIds(v []*string) *StartInstancesInput { - s.InstanceIds = v +// SetResourceType sets the ResourceType field's value. +func (s *TransitGatewayAttachment) SetResourceType(v string) *TransitGatewayAttachment { + s.ResourceType = &v return s } -// Contains the output of StartInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstancesResult -type StartInstancesOutput struct { +// SetState sets the State field's value. +func (s *TransitGatewayAttachment) SetState(v string) *TransitGatewayAttachment { + s.State = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *TransitGatewayAttachment) SetTags(v []*Tag) *TransitGatewayAttachment { + s.Tags = v + return s +} + +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *TransitGatewayAttachment) SetTransitGatewayAttachmentId(v string) *TransitGatewayAttachment { + s.TransitGatewayAttachmentId = &v + return s +} + +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *TransitGatewayAttachment) SetTransitGatewayId(v string) *TransitGatewayAttachment { + s.TransitGatewayId = &v + return s +} + +// SetTransitGatewayOwnerId sets the TransitGatewayOwnerId field's value. +func (s *TransitGatewayAttachment) SetTransitGatewayOwnerId(v string) *TransitGatewayAttachment { + s.TransitGatewayOwnerId = &v + return s +} + +// Describes an association. +type TransitGatewayAttachmentAssociation struct { _ struct{} `type:"structure"` - // Information about one or more started instances. - StartingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` + // The state of the association. + State *string `locationName:"state" type:"string" enum:"TransitGatewayAssociationState"` + + // The ID of the route table for the transit gateway. + TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` } // String returns the string representation -func (s StartInstancesOutput) String() string { +func (s TransitGatewayAttachmentAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s StartInstancesOutput) GoString() string { +func (s TransitGatewayAttachmentAssociation) GoString() string { return s.String() } -// SetStartingInstances sets the StartingInstances field's value. -func (s *StartInstancesOutput) SetStartingInstances(v []*InstanceStateChange) *StartInstancesOutput { - s.StartingInstances = v +// SetState sets the State field's value. +func (s *TransitGatewayAttachmentAssociation) SetState(v string) *TransitGatewayAttachmentAssociation { + s.State = &v return s } -// Describes a state change. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StateReason -type StateReason struct { - _ struct{} `type:"structure"` - - // The reason code for the state change. - Code *string `locationName:"code" type:"string"` - - // The message for the state change. - // - // * Server.InsufficientInstanceCapacity: There was insufficient instance - // capacity to satisfy the launch request. - // - // * Server.InternalError: An internal error occurred during instance launch, - // resulting in termination. - // - // * Server.ScheduledStop: The instance was stopped due to a scheduled retirement. - // - // * Server.SpotInstanceTermination: A Spot instance was terminated due to - // an increase in the market price. - // - // * Client.InternalError: A client error caused the instance to terminate - // on launch. - // - // * Client.InstanceInitiatedShutdown: The instance was shut down using the - // shutdown -h command from the instance. - // - // * Client.UserInitiatedShutdown: The instance was shut down using the Amazon - // EC2 API. - // - // * Client.VolumeLimitExceeded: The limit on the number of EBS volumes or - // total storage was exceeded. Decrease usage or request an increase in your - // limits. - // - // * Client.InvalidSnapshot.NotFound: The specified snapshot was not found. - Message *string `locationName:"message" type:"string"` +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *TransitGatewayAttachmentAssociation) SetTransitGatewayRouteTableId(v string) *TransitGatewayAttachmentAssociation { + s.TransitGatewayRouteTableId = &v + return s +} + +// Describes a propagation route table. +type TransitGatewayAttachmentPropagation struct { + _ struct{} `type:"structure"` + + // The state of the propagation route table. + State *string `locationName:"state" type:"string" enum:"TransitGatewayPropagationState"` + + // The ID of the propagation route table. + TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` } // String returns the string representation -func (s StateReason) String() string { +func (s TransitGatewayAttachmentPropagation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s StateReason) GoString() string { +func (s TransitGatewayAttachmentPropagation) GoString() string { return s.String() } -// SetCode sets the Code field's value. -func (s *StateReason) SetCode(v string) *StateReason { - s.Code = &v +// SetState sets the State field's value. +func (s *TransitGatewayAttachmentPropagation) SetState(v string) *TransitGatewayAttachmentPropagation { + s.State = &v return s } -// SetMessage sets the Message field's value. -func (s *StateReason) SetMessage(v string) *StateReason { - s.Message = &v +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *TransitGatewayAttachmentPropagation) SetTransitGatewayRouteTableId(v string) *TransitGatewayAttachmentPropagation { + s.TransitGatewayRouteTableId = &v return s } -// Contains the parameters for StopInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstancesRequest -type StopInstancesInput struct { +// Describes the options for a transit gateway. +type TransitGatewayOptions struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // A private Autonomous System Number (ASN) for the Amazon side of a BGP session. + // The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 + // for 32-bit ASNs. + AmazonSideAsn *int64 `locationName:"amazonSideAsn" type:"long"` - // Forces the instances to stop. The instances do not have an opportunity to - // flush file system caches or file system metadata. If you use this option, - // you must perform file system check and repair procedures. This option is - // not recommended for Windows instances. - // - // Default: false - Force *bool `locationName:"force" type:"boolean"` + // The ID of the default association route table. + AssociationDefaultRouteTableId *string `locationName:"associationDefaultRouteTableId" type:"string"` - // One or more instance IDs. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` + // Indicates whether attachment requests are automatically accepted. + AutoAcceptSharedAttachments *string `locationName:"autoAcceptSharedAttachments" type:"string" enum:"AutoAcceptSharedAttachmentsValue"` + + // Indicates whether resource attachments are automatically associated with + // the default association route table. + DefaultRouteTableAssociation *string `locationName:"defaultRouteTableAssociation" type:"string" enum:"DefaultRouteTableAssociationValue"` + + // Indicates whether resource attachments automatically propagate routes to + // the default propagation route table. + DefaultRouteTablePropagation *string `locationName:"defaultRouteTablePropagation" type:"string" enum:"DefaultRouteTablePropagationValue"` + + // Indicates whether DNS support is enabled. + DnsSupport *string `locationName:"dnsSupport" type:"string" enum:"DnsSupportValue"` + + // The ID of the default propagation route table. + PropagationDefaultRouteTableId *string `locationName:"propagationDefaultRouteTableId" type:"string"` + + // Indicates whether Equal Cost Multipath Protocol support is enabled. + VpnEcmpSupport *string `locationName:"vpnEcmpSupport" type:"string" enum:"VpnEcmpSupportValue"` } // String returns the string representation -func (s StopInstancesInput) String() string { +func (s TransitGatewayOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s StopInstancesInput) GoString() string { +func (s TransitGatewayOptions) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *StopInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "StopInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } - - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetAmazonSideAsn sets the AmazonSideAsn field's value. +func (s *TransitGatewayOptions) SetAmazonSideAsn(v int64) *TransitGatewayOptions { + s.AmazonSideAsn = &v + return s } -// SetDryRun sets the DryRun field's value. -func (s *StopInstancesInput) SetDryRun(v bool) *StopInstancesInput { - s.DryRun = &v +// SetAssociationDefaultRouteTableId sets the AssociationDefaultRouteTableId field's value. +func (s *TransitGatewayOptions) SetAssociationDefaultRouteTableId(v string) *TransitGatewayOptions { + s.AssociationDefaultRouteTableId = &v return s } -// SetForce sets the Force field's value. -func (s *StopInstancesInput) SetForce(v bool) *StopInstancesInput { - s.Force = &v +// SetAutoAcceptSharedAttachments sets the AutoAcceptSharedAttachments field's value. +func (s *TransitGatewayOptions) SetAutoAcceptSharedAttachments(v string) *TransitGatewayOptions { + s.AutoAcceptSharedAttachments = &v return s } -// SetInstanceIds sets the InstanceIds field's value. -func (s *StopInstancesInput) SetInstanceIds(v []*string) *StopInstancesInput { - s.InstanceIds = v +// SetDefaultRouteTableAssociation sets the DefaultRouteTableAssociation field's value. +func (s *TransitGatewayOptions) SetDefaultRouteTableAssociation(v string) *TransitGatewayOptions { + s.DefaultRouteTableAssociation = &v return s } -// Contains the output of StopInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstancesResult -type StopInstancesOutput struct { - _ struct{} `type:"structure"` - - // Information about one or more stopped instances. - StoppingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` +// SetDefaultRouteTablePropagation sets the DefaultRouteTablePropagation field's value. +func (s *TransitGatewayOptions) SetDefaultRouteTablePropagation(v string) *TransitGatewayOptions { + s.DefaultRouteTablePropagation = &v + return s } -// String returns the string representation -func (s StopInstancesOutput) String() string { - return awsutil.Prettify(s) +// SetDnsSupport sets the DnsSupport field's value. +func (s *TransitGatewayOptions) SetDnsSupport(v string) *TransitGatewayOptions { + s.DnsSupport = &v + return s } -// GoString returns the string representation -func (s StopInstancesOutput) GoString() string { - return s.String() +// SetPropagationDefaultRouteTableId sets the PropagationDefaultRouteTableId field's value. +func (s *TransitGatewayOptions) SetPropagationDefaultRouteTableId(v string) *TransitGatewayOptions { + s.PropagationDefaultRouteTableId = &v + return s } -// SetStoppingInstances sets the StoppingInstances field's value. -func (s *StopInstancesOutput) SetStoppingInstances(v []*InstanceStateChange) *StopInstancesOutput { - s.StoppingInstances = v +// SetVpnEcmpSupport sets the VpnEcmpSupport field's value. +func (s *TransitGatewayOptions) SetVpnEcmpSupport(v string) *TransitGatewayOptions { + s.VpnEcmpSupport = &v return s } -// Describes the storage location for an instance store-backed AMI. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Storage -type Storage struct { +// Describes route propagation. +type TransitGatewayPropagation struct { _ struct{} `type:"structure"` - // An Amazon S3 storage location. - S3 *S3Storage `type:"structure"` + // The ID of the resource. + ResourceId *string `locationName:"resourceId" type:"string"` + + // The resource type. + ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` + + // The state. + State *string `locationName:"state" type:"string" enum:"TransitGatewayPropagationState"` + + // The ID of the attachment. + TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` + + // The ID of the transit gateway route table. + TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` } // String returns the string representation -func (s Storage) String() string { +func (s TransitGatewayPropagation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Storage) GoString() string { +func (s TransitGatewayPropagation) GoString() string { return s.String() } -// SetS3 sets the S3 field's value. -func (s *Storage) SetS3(v *S3Storage) *Storage { - s.S3 = v +// SetResourceId sets the ResourceId field's value. +func (s *TransitGatewayPropagation) SetResourceId(v string) *TransitGatewayPropagation { + s.ResourceId = &v return s } -// Describes a subnet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Subnet -type Subnet struct { - _ struct{} `type:"structure"` - - // Indicates whether a network interface created in this subnet (including a - // network interface created by RunInstances) receives an IPv6 address. - AssignIpv6AddressOnCreation *bool `locationName:"assignIpv6AddressOnCreation" type:"boolean"` +// SetResourceType sets the ResourceType field's value. +func (s *TransitGatewayPropagation) SetResourceType(v string) *TransitGatewayPropagation { + s.ResourceType = &v + return s +} - // The Availability Zone of the subnet. - AvailabilityZone *string `locationName:"availabilityZone" type:"string"` +// SetState sets the State field's value. +func (s *TransitGatewayPropagation) SetState(v string) *TransitGatewayPropagation { + s.State = &v + return s +} - // The number of unused private IPv4 addresses in the subnet. Note that the - // IPv4 addresses for any stopped instances are considered unavailable. - AvailableIpAddressCount *int64 `locationName:"availableIpAddressCount" type:"integer"` +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *TransitGatewayPropagation) SetTransitGatewayAttachmentId(v string) *TransitGatewayPropagation { + s.TransitGatewayAttachmentId = &v + return s +} - // The IPv4 CIDR block assigned to the subnet. - CidrBlock *string `locationName:"cidrBlock" type:"string"` +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *TransitGatewayPropagation) SetTransitGatewayRouteTableId(v string) *TransitGatewayPropagation { + s.TransitGatewayRouteTableId = &v + return s +} - // Indicates whether this is the default subnet for the Availability Zone. - DefaultForAz *bool `locationName:"defaultForAz" type:"boolean"` +// Describes the options for a transit gateway. +type TransitGatewayRequestOptions struct { + _ struct{} `type:"structure"` - // Information about the IPv6 CIDR blocks associated with the subnet. - Ipv6CidrBlockAssociationSet []*SubnetIpv6CidrBlockAssociation `locationName:"ipv6CidrBlockAssociationSet" locationNameList:"item" type:"list"` + // A private Autonomous System Number (ASN) for the Amazon side of a BGP session. + // The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 + // for 32-bit ASNs. + AmazonSideAsn *int64 `type:"long"` - // Indicates whether instances launched in this subnet receive a public IPv4 - // address. - MapPublicIpOnLaunch *bool `locationName:"mapPublicIpOnLaunch" type:"boolean"` + // Enable or disable automatic acceptance of attachment requests. The default + // is disable. + AutoAcceptSharedAttachments *string `type:"string" enum:"AutoAcceptSharedAttachmentsValue"` - // The current state of the subnet. - State *string `locationName:"state" type:"string" enum:"SubnetState"` + // Enable or disable automatic association with the default association route + // table. The default is enable. + DefaultRouteTableAssociation *string `type:"string" enum:"DefaultRouteTableAssociationValue"` - // The ID of the subnet. - SubnetId *string `locationName:"subnetId" type:"string"` + // Enable or disable automatic propagation of routes to the default propagation + // route table. The default is enable. + DefaultRouteTablePropagation *string `type:"string" enum:"DefaultRouteTablePropagationValue"` - // Any tags assigned to the subnet. - Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // Enable or disable DNS support. + DnsSupport *string `type:"string" enum:"DnsSupportValue"` - // The ID of the VPC the subnet is in. - VpcId *string `locationName:"vpcId" type:"string"` + // Enable or disable Equal Cost Multipath Protocol support. + VpnEcmpSupport *string `type:"string" enum:"VpnEcmpSupportValue"` } // String returns the string representation -func (s Subnet) String() string { +func (s TransitGatewayRequestOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Subnet) GoString() string { +func (s TransitGatewayRequestOptions) GoString() string { return s.String() } -// SetAssignIpv6AddressOnCreation sets the AssignIpv6AddressOnCreation field's value. -func (s *Subnet) SetAssignIpv6AddressOnCreation(v bool) *Subnet { - s.AssignIpv6AddressOnCreation = &v +// SetAmazonSideAsn sets the AmazonSideAsn field's value. +func (s *TransitGatewayRequestOptions) SetAmazonSideAsn(v int64) *TransitGatewayRequestOptions { + s.AmazonSideAsn = &v return s } -// SetAvailabilityZone sets the AvailabilityZone field's value. -func (s *Subnet) SetAvailabilityZone(v string) *Subnet { - s.AvailabilityZone = &v +// SetAutoAcceptSharedAttachments sets the AutoAcceptSharedAttachments field's value. +func (s *TransitGatewayRequestOptions) SetAutoAcceptSharedAttachments(v string) *TransitGatewayRequestOptions { + s.AutoAcceptSharedAttachments = &v return s } -// SetAvailableIpAddressCount sets the AvailableIpAddressCount field's value. -func (s *Subnet) SetAvailableIpAddressCount(v int64) *Subnet { - s.AvailableIpAddressCount = &v +// SetDefaultRouteTableAssociation sets the DefaultRouteTableAssociation field's value. +func (s *TransitGatewayRequestOptions) SetDefaultRouteTableAssociation(v string) *TransitGatewayRequestOptions { + s.DefaultRouteTableAssociation = &v return s } -// SetCidrBlock sets the CidrBlock field's value. -func (s *Subnet) SetCidrBlock(v string) *Subnet { - s.CidrBlock = &v +// SetDefaultRouteTablePropagation sets the DefaultRouteTablePropagation field's value. +func (s *TransitGatewayRequestOptions) SetDefaultRouteTablePropagation(v string) *TransitGatewayRequestOptions { + s.DefaultRouteTablePropagation = &v return s } -// SetDefaultForAz sets the DefaultForAz field's value. -func (s *Subnet) SetDefaultForAz(v bool) *Subnet { - s.DefaultForAz = &v +// SetDnsSupport sets the DnsSupport field's value. +func (s *TransitGatewayRequestOptions) SetDnsSupport(v string) *TransitGatewayRequestOptions { + s.DnsSupport = &v return s } -// SetIpv6CidrBlockAssociationSet sets the Ipv6CidrBlockAssociationSet field's value. -func (s *Subnet) SetIpv6CidrBlockAssociationSet(v []*SubnetIpv6CidrBlockAssociation) *Subnet { - s.Ipv6CidrBlockAssociationSet = v +// SetVpnEcmpSupport sets the VpnEcmpSupport field's value. +func (s *TransitGatewayRequestOptions) SetVpnEcmpSupport(v string) *TransitGatewayRequestOptions { + s.VpnEcmpSupport = &v return s } -// SetMapPublicIpOnLaunch sets the MapPublicIpOnLaunch field's value. -func (s *Subnet) SetMapPublicIpOnLaunch(v bool) *Subnet { - s.MapPublicIpOnLaunch = &v - return s +// Describes a route for a transit gateway route table. +type TransitGatewayRoute struct { + _ struct{} `type:"structure"` + + // The CIDR block used for destination matches. + DestinationCidrBlock *string `locationName:"destinationCidrBlock" type:"string"` + + // The state of the route. + State *string `locationName:"state" type:"string" enum:"TransitGatewayRouteState"` + + // The attachments. + TransitGatewayAttachments []*TransitGatewayRouteAttachment `locationName:"transitGatewayAttachments" locationNameList:"item" type:"list"` + + // The route type. + Type *string `locationName:"type" type:"string" enum:"TransitGatewayRouteType"` } -// SetState sets the State field's value. -func (s *Subnet) SetState(v string) *Subnet { - s.State = &v +// String returns the string representation +func (s TransitGatewayRoute) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TransitGatewayRoute) GoString() string { + return s.String() +} + +// SetDestinationCidrBlock sets the DestinationCidrBlock field's value. +func (s *TransitGatewayRoute) SetDestinationCidrBlock(v string) *TransitGatewayRoute { + s.DestinationCidrBlock = &v return s } -// SetSubnetId sets the SubnetId field's value. -func (s *Subnet) SetSubnetId(v string) *Subnet { - s.SubnetId = &v +// SetState sets the State field's value. +func (s *TransitGatewayRoute) SetState(v string) *TransitGatewayRoute { + s.State = &v return s } -// SetTags sets the Tags field's value. -func (s *Subnet) SetTags(v []*Tag) *Subnet { - s.Tags = v +// SetTransitGatewayAttachments sets the TransitGatewayAttachments field's value. +func (s *TransitGatewayRoute) SetTransitGatewayAttachments(v []*TransitGatewayRouteAttachment) *TransitGatewayRoute { + s.TransitGatewayAttachments = v return s } -// SetVpcId sets the VpcId field's value. -func (s *Subnet) SetVpcId(v string) *Subnet { - s.VpcId = &v +// SetType sets the Type field's value. +func (s *TransitGatewayRoute) SetType(v string) *TransitGatewayRoute { + s.Type = &v return s } -// Describes the state of a CIDR block. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SubnetCidrBlockState -type SubnetCidrBlockState struct { +// Describes a route attachment. +type TransitGatewayRouteAttachment struct { _ struct{} `type:"structure"` - // The state of a CIDR block. - State *string `locationName:"state" type:"string" enum:"SubnetCidrBlockStateCode"` + // The ID of the resource. + ResourceId *string `locationName:"resourceId" type:"string"` - // A message about the status of the CIDR block, if applicable. - StatusMessage *string `locationName:"statusMessage" type:"string"` + // The resource type. + ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` + + // The ID of the attachment. + TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` } // String returns the string representation -func (s SubnetCidrBlockState) String() string { +func (s TransitGatewayRouteAttachment) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SubnetCidrBlockState) GoString() string { +func (s TransitGatewayRouteAttachment) GoString() string { return s.String() } -// SetState sets the State field's value. -func (s *SubnetCidrBlockState) SetState(v string) *SubnetCidrBlockState { - s.State = &v +// SetResourceId sets the ResourceId field's value. +func (s *TransitGatewayRouteAttachment) SetResourceId(v string) *TransitGatewayRouteAttachment { + s.ResourceId = &v return s } -// SetStatusMessage sets the StatusMessage field's value. -func (s *SubnetCidrBlockState) SetStatusMessage(v string) *SubnetCidrBlockState { - s.StatusMessage = &v +// SetResourceType sets the ResourceType field's value. +func (s *TransitGatewayRouteAttachment) SetResourceType(v string) *TransitGatewayRouteAttachment { + s.ResourceType = &v return s } -// Describes an IPv6 CIDR block associated with a subnet. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SubnetIpv6CidrBlockAssociation -type SubnetIpv6CidrBlockAssociation struct { +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *TransitGatewayRouteAttachment) SetTransitGatewayAttachmentId(v string) *TransitGatewayRouteAttachment { + s.TransitGatewayAttachmentId = &v + return s +} + +// Describes a transit gateway route table. +type TransitGatewayRouteTable struct { _ struct{} `type:"structure"` - // The association ID for the CIDR block. - AssociationId *string `locationName:"associationId" type:"string"` + // The creation time. + CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - // The IPv6 CIDR block. - Ipv6CidrBlock *string `locationName:"ipv6CidrBlock" type:"string"` + // Indicates whether this is the default association route table for the transit + // gateway. + DefaultAssociationRouteTable *bool `locationName:"defaultAssociationRouteTable" type:"boolean"` - // Information about the state of the CIDR block. - Ipv6CidrBlockState *SubnetCidrBlockState `locationName:"ipv6CidrBlockState" type:"structure"` + // Indicates whether this is the default propagation route table for the transit + // gateway. + DefaultPropagationRouteTable *bool `locationName:"defaultPropagationRouteTable" type:"boolean"` + + // The state of the transit gateway route table. + State *string `locationName:"state" type:"string" enum:"TransitGatewayRouteTableState"` + + // Any tags assigned to the route table. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the transit gateway. + TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` + + // The ID of the transit gateway route table. + TransitGatewayRouteTableId *string `locationName:"transitGatewayRouteTableId" type:"string"` } // String returns the string representation -func (s SubnetIpv6CidrBlockAssociation) String() string { +func (s TransitGatewayRouteTable) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s SubnetIpv6CidrBlockAssociation) GoString() string { +func (s TransitGatewayRouteTable) GoString() string { return s.String() } -// SetAssociationId sets the AssociationId field's value. -func (s *SubnetIpv6CidrBlockAssociation) SetAssociationId(v string) *SubnetIpv6CidrBlockAssociation { - s.AssociationId = &v +// SetCreationTime sets the CreationTime field's value. +func (s *TransitGatewayRouteTable) SetCreationTime(v time.Time) *TransitGatewayRouteTable { + s.CreationTime = &v return s } -// SetIpv6CidrBlock sets the Ipv6CidrBlock field's value. -func (s *SubnetIpv6CidrBlockAssociation) SetIpv6CidrBlock(v string) *SubnetIpv6CidrBlockAssociation { - s.Ipv6CidrBlock = &v +// SetDefaultAssociationRouteTable sets the DefaultAssociationRouteTable field's value. +func (s *TransitGatewayRouteTable) SetDefaultAssociationRouteTable(v bool) *TransitGatewayRouteTable { + s.DefaultAssociationRouteTable = &v return s } -// SetIpv6CidrBlockState sets the Ipv6CidrBlockState field's value. -func (s *SubnetIpv6CidrBlockAssociation) SetIpv6CidrBlockState(v *SubnetCidrBlockState) *SubnetIpv6CidrBlockAssociation { - s.Ipv6CidrBlockState = v +// SetDefaultPropagationRouteTable sets the DefaultPropagationRouteTable field's value. +func (s *TransitGatewayRouteTable) SetDefaultPropagationRouteTable(v bool) *TransitGatewayRouteTable { + s.DefaultPropagationRouteTable = &v return s } -// Describes a tag. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Tag -type Tag struct { +// SetState sets the State field's value. +func (s *TransitGatewayRouteTable) SetState(v string) *TransitGatewayRouteTable { + s.State = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *TransitGatewayRouteTable) SetTags(v []*Tag) *TransitGatewayRouteTable { + s.Tags = v + return s +} + +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *TransitGatewayRouteTable) SetTransitGatewayId(v string) *TransitGatewayRouteTable { + s.TransitGatewayId = &v + return s +} + +// SetTransitGatewayRouteTableId sets the TransitGatewayRouteTableId field's value. +func (s *TransitGatewayRouteTable) SetTransitGatewayRouteTableId(v string) *TransitGatewayRouteTable { + s.TransitGatewayRouteTableId = &v + return s +} + +// Describes an association between a route table and a resource attachment. +type TransitGatewayRouteTableAssociation struct { _ struct{} `type:"structure"` - // The key of the tag. - // - // Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode - // characters. May not begin with aws: - Key *string `locationName:"key" type:"string"` + // The ID of the resource. + ResourceId *string `locationName:"resourceId" type:"string"` - // The value of the tag. - // - // Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode - // characters. - Value *string `locationName:"value" type:"string"` + // The resource type. + ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` + + // The state of the association. + State *string `locationName:"state" type:"string" enum:"TransitGatewayAssociationState"` + + // The ID of the attachment. + TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` } // String returns the string representation -func (s Tag) String() string { +func (s TransitGatewayRouteTableAssociation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s Tag) GoString() string { +func (s TransitGatewayRouteTableAssociation) GoString() string { return s.String() } -// SetKey sets the Key field's value. -func (s *Tag) SetKey(v string) *Tag { - s.Key = &v +// SetResourceId sets the ResourceId field's value. +func (s *TransitGatewayRouteTableAssociation) SetResourceId(v string) *TransitGatewayRouteTableAssociation { + s.ResourceId = &v return s } -// SetValue sets the Value field's value. -func (s *Tag) SetValue(v string) *Tag { - s.Value = &v +// SetResourceType sets the ResourceType field's value. +func (s *TransitGatewayRouteTableAssociation) SetResourceType(v string) *TransitGatewayRouteTableAssociation { + s.ResourceType = &v return s } -// Describes a tag. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TagDescription -type TagDescription struct { - _ struct{} `type:"structure"` +// SetState sets the State field's value. +func (s *TransitGatewayRouteTableAssociation) SetState(v string) *TransitGatewayRouteTableAssociation { + s.State = &v + return s +} - // The tag key. - Key *string `locationName:"key" type:"string"` +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *TransitGatewayRouteTableAssociation) SetTransitGatewayAttachmentId(v string) *TransitGatewayRouteTableAssociation { + s.TransitGatewayAttachmentId = &v + return s +} + +// Describes a route table propagation. +type TransitGatewayRouteTablePropagation struct { + _ struct{} `type:"structure"` - // The ID of the resource. For example, ami-1a2b3c4d. + // The ID of the resource. ResourceId *string `locationName:"resourceId" type:"string"` - // The resource type. - ResourceType *string `locationName:"resourceType" type:"string" enum:"ResourceType"` + // The type of resource. + ResourceType *string `locationName:"resourceType" type:"string" enum:"TransitGatewayAttachmentResourceType"` - // The tag value. - Value *string `locationName:"value" type:"string"` + // The state of the resource. + State *string `locationName:"state" type:"string" enum:"TransitGatewayPropagationState"` + + // The ID of the attachment. + TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` } // String returns the string representation -func (s TagDescription) String() string { +func (s TransitGatewayRouteTablePropagation) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s TagDescription) GoString() string { +func (s TransitGatewayRouteTablePropagation) GoString() string { return s.String() } -// SetKey sets the Key field's value. -func (s *TagDescription) SetKey(v string) *TagDescription { - s.Key = &v - return s -} - // SetResourceId sets the ResourceId field's value. -func (s *TagDescription) SetResourceId(v string) *TagDescription { +func (s *TransitGatewayRouteTablePropagation) SetResourceId(v string) *TransitGatewayRouteTablePropagation { s.ResourceId = &v return s } // SetResourceType sets the ResourceType field's value. -func (s *TagDescription) SetResourceType(v string) *TagDescription { +func (s *TransitGatewayRouteTablePropagation) SetResourceType(v string) *TransitGatewayRouteTablePropagation { s.ResourceType = &v return s } -// SetValue sets the Value field's value. -func (s *TagDescription) SetValue(v string) *TagDescription { - s.Value = &v +// SetState sets the State field's value. +func (s *TransitGatewayRouteTablePropagation) SetState(v string) *TransitGatewayRouteTablePropagation { + s.State = &v return s } -// Information about the Convertible Reserved Instance offering. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetConfiguration -type TargetConfiguration struct { +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *TransitGatewayRouteTablePropagation) SetTransitGatewayAttachmentId(v string) *TransitGatewayRouteTablePropagation { + s.TransitGatewayAttachmentId = &v + return s +} + +// Describes a VPC attachment. +type TransitGatewayVpcAttachment struct { _ struct{} `type:"structure"` - // The number of instances the Convertible Reserved Instance offering can be - // applied to. This parameter is reserved and cannot be specified in a request - InstanceCount *int64 `locationName:"instanceCount" type:"integer"` + // The creation time. + CreationTime *time.Time `locationName:"creationTime" type:"timestamp"` - // The ID of the Convertible Reserved Instance offering. - OfferingId *string `locationName:"offeringId" type:"string"` + // The VPC attachment options. + Options *TransitGatewayVpcAttachmentOptions `locationName:"options" type:"structure"` + + // The state of the VPC attachment. + State *string `locationName:"state" type:"string" enum:"TransitGatewayAttachmentState"` + + // The IDs of the subnets. + SubnetIds []*string `locationName:"subnetIds" locationNameList:"item" type:"list"` + + // The tags for the VPC attachment. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + + // The ID of the attachment. + TransitGatewayAttachmentId *string `locationName:"transitGatewayAttachmentId" type:"string"` + + // The ID of the transit gateway. + TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` + + // The ID of the VPC. + VpcId *string `locationName:"vpcId" type:"string"` + + // The ID of the AWS account that owns the VPC. + VpcOwnerId *string `locationName:"vpcOwnerId" type:"string"` } // String returns the string representation -func (s TargetConfiguration) String() string { +func (s TransitGatewayVpcAttachment) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s TargetConfiguration) GoString() string { +func (s TransitGatewayVpcAttachment) GoString() string { return s.String() } -// SetInstanceCount sets the InstanceCount field's value. -func (s *TargetConfiguration) SetInstanceCount(v int64) *TargetConfiguration { - s.InstanceCount = &v +// SetCreationTime sets the CreationTime field's value. +func (s *TransitGatewayVpcAttachment) SetCreationTime(v time.Time) *TransitGatewayVpcAttachment { + s.CreationTime = &v return s } -// SetOfferingId sets the OfferingId field's value. -func (s *TargetConfiguration) SetOfferingId(v string) *TargetConfiguration { - s.OfferingId = &v +// SetOptions sets the Options field's value. +func (s *TransitGatewayVpcAttachment) SetOptions(v *TransitGatewayVpcAttachmentOptions) *TransitGatewayVpcAttachment { + s.Options = v return s } -// Details about the target configuration. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetConfigurationRequest -type TargetConfigurationRequest struct { - _ struct{} `type:"structure"` - - // The number of instances the Covertible Reserved Instance offering can be - // applied to. This parameter is reserved and cannot be specified in a request - InstanceCount *int64 `type:"integer"` - - // The Convertible Reserved Instance offering ID. - // - // OfferingId is a required field - OfferingId *string `type:"string" required:"true"` +// SetState sets the State field's value. +func (s *TransitGatewayVpcAttachment) SetState(v string) *TransitGatewayVpcAttachment { + s.State = &v + return s } -// String returns the string representation -func (s TargetConfigurationRequest) String() string { - return awsutil.Prettify(s) +// SetSubnetIds sets the SubnetIds field's value. +func (s *TransitGatewayVpcAttachment) SetSubnetIds(v []*string) *TransitGatewayVpcAttachment { + s.SubnetIds = v + return s } -// GoString returns the string representation -func (s TargetConfigurationRequest) GoString() string { - return s.String() +// SetTags sets the Tags field's value. +func (s *TransitGatewayVpcAttachment) SetTags(v []*Tag) *TransitGatewayVpcAttachment { + s.Tags = v + return s } -// Validate inspects the fields of the type to determine if they are valid. -func (s *TargetConfigurationRequest) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "TargetConfigurationRequest"} - if s.OfferingId == nil { - invalidParams.Add(request.NewErrParamRequired("OfferingId")) - } +// SetTransitGatewayAttachmentId sets the TransitGatewayAttachmentId field's value. +func (s *TransitGatewayVpcAttachment) SetTransitGatewayAttachmentId(v string) *TransitGatewayVpcAttachment { + s.TransitGatewayAttachmentId = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *TransitGatewayVpcAttachment) SetTransitGatewayId(v string) *TransitGatewayVpcAttachment { + s.TransitGatewayId = &v + return s } -// SetInstanceCount sets the InstanceCount field's value. -func (s *TargetConfigurationRequest) SetInstanceCount(v int64) *TargetConfigurationRequest { - s.InstanceCount = &v +// SetVpcId sets the VpcId field's value. +func (s *TransitGatewayVpcAttachment) SetVpcId(v string) *TransitGatewayVpcAttachment { + s.VpcId = &v return s } -// SetOfferingId sets the OfferingId field's value. -func (s *TargetConfigurationRequest) SetOfferingId(v string) *TargetConfigurationRequest { - s.OfferingId = &v +// SetVpcOwnerId sets the VpcOwnerId field's value. +func (s *TransitGatewayVpcAttachment) SetVpcOwnerId(v string) *TransitGatewayVpcAttachment { + s.VpcOwnerId = &v return s } -// The total value of the new Convertible Reserved Instances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetReservationValue -type TargetReservationValue struct { +// Describes the VPC attachment options. +type TransitGatewayVpcAttachmentOptions struct { _ struct{} `type:"structure"` - // The total value of the Convertible Reserved Instances that make up the exchange. - // This is the sum of the list value, remaining upfront price, and additional - // upfront cost of the exchange. - ReservationValue *ReservationValue `locationName:"reservationValue" type:"structure"` + // Indicates whether DNS support is enabled. + DnsSupport *string `locationName:"dnsSupport" type:"string" enum:"DnsSupportValue"` - // The configuration of the Convertible Reserved Instances that make up the - // exchange. - TargetConfiguration *TargetConfiguration `locationName:"targetConfiguration" type:"structure"` + // Indicates whether IPv6 support is enabled. + Ipv6Support *string `locationName:"ipv6Support" type:"string" enum:"Ipv6SupportValue"` } // String returns the string representation -func (s TargetReservationValue) String() string { +func (s TransitGatewayVpcAttachmentOptions) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s TargetReservationValue) GoString() string { +func (s TransitGatewayVpcAttachmentOptions) GoString() string { return s.String() } -// SetReservationValue sets the ReservationValue field's value. -func (s *TargetReservationValue) SetReservationValue(v *ReservationValue) *TargetReservationValue { - s.ReservationValue = v +// SetDnsSupport sets the DnsSupport field's value. +func (s *TransitGatewayVpcAttachmentOptions) SetDnsSupport(v string) *TransitGatewayVpcAttachmentOptions { + s.DnsSupport = &v return s } -// SetTargetConfiguration sets the TargetConfiguration field's value. -func (s *TargetReservationValue) SetTargetConfiguration(v *TargetConfiguration) *TargetReservationValue { - s.TargetConfiguration = v +// SetIpv6Support sets the Ipv6Support field's value. +func (s *TransitGatewayVpcAttachmentOptions) SetIpv6Support(v string) *TransitGatewayVpcAttachmentOptions { + s.Ipv6Support = &v return s } -// Contains the parameters for TerminateInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstancesRequest -type TerminateInstancesInput struct { +// The VPN tunnel options. +type TunnelOption struct { _ struct{} `type:"structure"` - // Checks whether you have the required permissions for the action, without - // actually making the request, and provides an error response. If you have - // the required permissions, the error response is DryRunOperation. Otherwise, - // it is UnauthorizedOperation. - DryRun *bool `locationName:"dryRun" type:"boolean"` + // The number of seconds after which a DPD timeout occurs. + DpdTimeoutSeconds *int64 `locationName:"dpdTimeoutSeconds" type:"integer"` - // One or more instance IDs. - // - // Constraints: Up to 1000 instance IDs. We recommend breaking up this request - // into smaller batches. - // - // InstanceIds is a required field - InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` + // The IKE versions that are permitted for the VPN tunnel. + IkeVersions []*IKEVersionsListValue `locationName:"ikeVersionSet" locationNameList:"item" type:"list"` + + // The external IP address of the VPN tunnel. + OutsideIpAddress *string `locationName:"outsideIpAddress" type:"string"` + + // The permitted Diffie-Hellman group numbers for the VPN tunnel for phase 1 + // IKE negotiations. + Phase1DHGroupNumbers []*Phase1DHGroupNumbersListValue `locationName:"phase1DHGroupNumberSet" locationNameList:"item" type:"list"` + + // The permitted encryption algorithms for the VPN tunnel for phase 1 IKE negotiations. + Phase1EncryptionAlgorithms []*Phase1EncryptionAlgorithmsListValue `locationName:"phase1EncryptionAlgorithmSet" locationNameList:"item" type:"list"` + + // The permitted integrity algorithms for the VPN tunnel for phase 1 IKE negotiations. + Phase1IntegrityAlgorithms []*Phase1IntegrityAlgorithmsListValue `locationName:"phase1IntegrityAlgorithmSet" locationNameList:"item" type:"list"` + + // The lifetime for phase 1 of the IKE negotiation, in seconds. + Phase1LifetimeSeconds *int64 `locationName:"phase1LifetimeSeconds" type:"integer"` + + // The permitted Diffie-Hellman group numbers for the VPN tunnel for phase 2 + // IKE negotiations. + Phase2DHGroupNumbers []*Phase2DHGroupNumbersListValue `locationName:"phase2DHGroupNumberSet" locationNameList:"item" type:"list"` + + // The permitted encryption algorithms for the VPN tunnel for phase 2 IKE negotiations. + Phase2EncryptionAlgorithms []*Phase2EncryptionAlgorithmsListValue `locationName:"phase2EncryptionAlgorithmSet" locationNameList:"item" type:"list"` + + // The permitted integrity algorithms for the VPN tunnel for phase 2 IKE negotiations. + Phase2IntegrityAlgorithms []*Phase2IntegrityAlgorithmsListValue `locationName:"phase2IntegrityAlgorithmSet" locationNameList:"item" type:"list"` + + // The lifetime for phase 2 of the IKE negotiation, in seconds. + Phase2LifetimeSeconds *int64 `locationName:"phase2LifetimeSeconds" type:"integer"` + + // The pre-shared key (PSK) to establish initial authentication between the + // virtual private gateway and the customer gateway. + PreSharedKey *string `locationName:"preSharedKey" type:"string"` + + // The percentage of the rekey window determined by RekeyMarginTimeSeconds during + // which the rekey time is randomly selected. + RekeyFuzzPercentage *int64 `locationName:"rekeyFuzzPercentage" type:"integer"` + + // The margin time, in seconds, before the phase 2 lifetime expires, during + // which the AWS side of the VPN connection performs an IKE rekey. + RekeyMarginTimeSeconds *int64 `locationName:"rekeyMarginTimeSeconds" type:"integer"` + + // The number of packets in an IKE replay window. + ReplayWindowSize *int64 `locationName:"replayWindowSize" type:"integer"` + + // The range of inside IP addresses for the tunnel. + TunnelInsideCidr *string `locationName:"tunnelInsideCidr" type:"string"` } // String returns the string representation -func (s TerminateInstancesInput) String() string { +func (s TunnelOption) String() string { return awsutil.Prettify(s) } // GoString returns the string representation -func (s TerminateInstancesInput) GoString() string { +func (s TunnelOption) GoString() string { return s.String() } -// Validate inspects the fields of the type to determine if they are valid. -func (s *TerminateInstancesInput) Validate() error { - invalidParams := request.ErrInvalidParams{Context: "TerminateInstancesInput"} - if s.InstanceIds == nil { - invalidParams.Add(request.NewErrParamRequired("InstanceIds")) - } +// SetDpdTimeoutSeconds sets the DpdTimeoutSeconds field's value. +func (s *TunnelOption) SetDpdTimeoutSeconds(v int64) *TunnelOption { + s.DpdTimeoutSeconds = &v + return s +} - if invalidParams.Len() > 0 { - return invalidParams - } - return nil +// SetIkeVersions sets the IkeVersions field's value. +func (s *TunnelOption) SetIkeVersions(v []*IKEVersionsListValue) *TunnelOption { + s.IkeVersions = v + return s } -// SetDryRun sets the DryRun field's value. -func (s *TerminateInstancesInput) SetDryRun(v bool) *TerminateInstancesInput { - s.DryRun = &v +// SetOutsideIpAddress sets the OutsideIpAddress field's value. +func (s *TunnelOption) SetOutsideIpAddress(v string) *TunnelOption { + s.OutsideIpAddress = &v return s } -// SetInstanceIds sets the InstanceIds field's value. -func (s *TerminateInstancesInput) SetInstanceIds(v []*string) *TerminateInstancesInput { - s.InstanceIds = v +// SetPhase1DHGroupNumbers sets the Phase1DHGroupNumbers field's value. +func (s *TunnelOption) SetPhase1DHGroupNumbers(v []*Phase1DHGroupNumbersListValue) *TunnelOption { + s.Phase1DHGroupNumbers = v return s } -// Contains the output of TerminateInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstancesResult -type TerminateInstancesOutput struct { - _ struct{} `type:"structure"` +// SetPhase1EncryptionAlgorithms sets the Phase1EncryptionAlgorithms field's value. +func (s *TunnelOption) SetPhase1EncryptionAlgorithms(v []*Phase1EncryptionAlgorithmsListValue) *TunnelOption { + s.Phase1EncryptionAlgorithms = v + return s +} - // Information about one or more terminated instances. - TerminatingInstances []*InstanceStateChange `locationName:"instancesSet" locationNameList:"item" type:"list"` +// SetPhase1IntegrityAlgorithms sets the Phase1IntegrityAlgorithms field's value. +func (s *TunnelOption) SetPhase1IntegrityAlgorithms(v []*Phase1IntegrityAlgorithmsListValue) *TunnelOption { + s.Phase1IntegrityAlgorithms = v + return s } -// String returns the string representation -func (s TerminateInstancesOutput) String() string { - return awsutil.Prettify(s) +// SetPhase1LifetimeSeconds sets the Phase1LifetimeSeconds field's value. +func (s *TunnelOption) SetPhase1LifetimeSeconds(v int64) *TunnelOption { + s.Phase1LifetimeSeconds = &v + return s } -// GoString returns the string representation -func (s TerminateInstancesOutput) GoString() string { - return s.String() +// SetPhase2DHGroupNumbers sets the Phase2DHGroupNumbers field's value. +func (s *TunnelOption) SetPhase2DHGroupNumbers(v []*Phase2DHGroupNumbersListValue) *TunnelOption { + s.Phase2DHGroupNumbers = v + return s } -// SetTerminatingInstances sets the TerminatingInstances field's value. -func (s *TerminateInstancesOutput) SetTerminatingInstances(v []*InstanceStateChange) *TerminateInstancesOutput { - s.TerminatingInstances = v +// SetPhase2EncryptionAlgorithms sets the Phase2EncryptionAlgorithms field's value. +func (s *TunnelOption) SetPhase2EncryptionAlgorithms(v []*Phase2EncryptionAlgorithmsListValue) *TunnelOption { + s.Phase2EncryptionAlgorithms = v + return s +} + +// SetPhase2IntegrityAlgorithms sets the Phase2IntegrityAlgorithms field's value. +func (s *TunnelOption) SetPhase2IntegrityAlgorithms(v []*Phase2IntegrityAlgorithmsListValue) *TunnelOption { + s.Phase2IntegrityAlgorithms = v + return s +} + +// SetPhase2LifetimeSeconds sets the Phase2LifetimeSeconds field's value. +func (s *TunnelOption) SetPhase2LifetimeSeconds(v int64) *TunnelOption { + s.Phase2LifetimeSeconds = &v + return s +} + +// SetPreSharedKey sets the PreSharedKey field's value. +func (s *TunnelOption) SetPreSharedKey(v string) *TunnelOption { + s.PreSharedKey = &v + return s +} + +// SetRekeyFuzzPercentage sets the RekeyFuzzPercentage field's value. +func (s *TunnelOption) SetRekeyFuzzPercentage(v int64) *TunnelOption { + s.RekeyFuzzPercentage = &v + return s +} + +// SetRekeyMarginTimeSeconds sets the RekeyMarginTimeSeconds field's value. +func (s *TunnelOption) SetRekeyMarginTimeSeconds(v int64) *TunnelOption { + s.RekeyMarginTimeSeconds = &v + return s +} + +// SetReplayWindowSize sets the ReplayWindowSize field's value. +func (s *TunnelOption) SetReplayWindowSize(v int64) *TunnelOption { + s.ReplayWindowSize = &v + return s +} + +// SetTunnelInsideCidr sets the TunnelInsideCidr field's value. +func (s *TunnelOption) SetTunnelInsideCidr(v string) *TunnelOption { + s.TunnelInsideCidr = &v return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6AddressesRequest type UnassignIpv6AddressesInput struct { _ struct{} `type:"structure"` @@ -50780,7 +95943,6 @@ func (s *UnassignIpv6AddressesInput) SetNetworkInterfaceId(v string) *UnassignIp return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6AddressesResult type UnassignIpv6AddressesOutput struct { _ struct{} `type:"structure"` @@ -50814,7 +95976,6 @@ func (s *UnassignIpv6AddressesOutput) SetUnassignedIpv6Addresses(v []*string) *U } // Contains the parameters for UnassignPrivateIpAddresses. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddressesRequest type UnassignPrivateIpAddressesInput struct { _ struct{} `type:"structure"` @@ -50868,7 +96029,6 @@ func (s *UnassignPrivateIpAddressesInput) SetPrivateIpAddresses(v []*string) *Un return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddressesOutput type UnassignPrivateIpAddressesOutput struct { _ struct{} `type:"structure"` } @@ -50883,8 +96043,6 @@ func (s UnassignPrivateIpAddressesOutput) GoString() string { return s.String() } -// Contains the parameters for UnmonitorInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstancesRequest type UnmonitorInstancesInput struct { _ struct{} `type:"structure"` @@ -50894,7 +96052,7 @@ type UnmonitorInstancesInput struct { // it is UnauthorizedOperation. DryRun *bool `locationName:"dryRun" type:"boolean"` - // One or more instance IDs. + // The IDs of the instances. // // InstanceIds is a required field InstanceIds []*string `locationName:"InstanceId" locationNameList:"InstanceId" type:"list" required:"true"` @@ -50935,8 +96093,6 @@ func (s *UnmonitorInstancesInput) SetInstanceIds(v []*string) *UnmonitorInstance return s } -// Contains the output of UnmonitorInstances. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstancesResult type UnmonitorInstancesOutput struct { _ struct{} `type:"structure"` @@ -50960,15 +96116,81 @@ func (s *UnmonitorInstancesOutput) SetInstanceMonitorings(v []*InstanceMonitorin return s } +// Describes the T2 or T3 instance whose credit option for CPU usage was not +// modified. +type UnsuccessfulInstanceCreditSpecificationItem struct { + _ struct{} `type:"structure"` + + // The applicable error for the T2 or T3 instance whose credit option for CPU + // usage was not modified. + Error *UnsuccessfulInstanceCreditSpecificationItemError `locationName:"error" type:"structure"` + + // The ID of the instance. + InstanceId *string `locationName:"instanceId" type:"string"` +} + +// String returns the string representation +func (s UnsuccessfulInstanceCreditSpecificationItem) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s UnsuccessfulInstanceCreditSpecificationItem) GoString() string { + return s.String() +} + +// SetError sets the Error field's value. +func (s *UnsuccessfulInstanceCreditSpecificationItem) SetError(v *UnsuccessfulInstanceCreditSpecificationItemError) *UnsuccessfulInstanceCreditSpecificationItem { + s.Error = v + return s +} + +// SetInstanceId sets the InstanceId field's value. +func (s *UnsuccessfulInstanceCreditSpecificationItem) SetInstanceId(v string) *UnsuccessfulInstanceCreditSpecificationItem { + s.InstanceId = &v + return s +} + +// Information about the error for the T2 or T3 instance whose credit option +// for CPU usage was not modified. +type UnsuccessfulInstanceCreditSpecificationItemError struct { + _ struct{} `type:"structure"` + + // The error code. + Code *string `locationName:"code" type:"string" enum:"UnsuccessfulInstanceCreditSpecificationErrorCode"` + + // The applicable error message. + Message *string `locationName:"message" type:"string"` +} + +// String returns the string representation +func (s UnsuccessfulInstanceCreditSpecificationItemError) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s UnsuccessfulInstanceCreditSpecificationItemError) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *UnsuccessfulInstanceCreditSpecificationItemError) SetCode(v string) *UnsuccessfulInstanceCreditSpecificationItemError { + s.Code = &v + return s +} + +// SetMessage sets the Message field's value. +func (s *UnsuccessfulInstanceCreditSpecificationItemError) SetMessage(v string) *UnsuccessfulInstanceCreditSpecificationItemError { + s.Message = &v + return s +} + // Information about items that were not successfully processed in a batch call. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnsuccessfulItem type UnsuccessfulItem struct { _ struct{} `type:"structure"` // Information about the error. - // - // Error is a required field - Error *UnsuccessfulItemError `locationName:"error" type:"structure" required:"true"` + Error *UnsuccessfulItemError `locationName:"error" type:"structure"` // The ID of the resource. ResourceId *string `locationName:"resourceId" type:"string"` @@ -50997,20 +96219,15 @@ func (s *UnsuccessfulItem) SetResourceId(v string) *UnsuccessfulItem { } // Information about the error that occurred. For more information about errors, -// see Error Codes (http://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html). -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnsuccessfulItemError +// see Error Codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html). type UnsuccessfulItemError struct { _ struct{} `type:"structure"` // The error code. - // - // Code is a required field - Code *string `locationName:"code" type:"string" required:"true"` + Code *string `locationName:"code" type:"string"` // The error message accompanying the error code. - // - // Message is a required field - Message *string `locationName:"message" type:"string" required:"true"` + Message *string `locationName:"message" type:"string"` } // String returns the string representation @@ -51035,8 +96252,195 @@ func (s *UnsuccessfulItemError) SetMessage(v string) *UnsuccessfulItemError { return s } +type UpdateSecurityGroupRuleDescriptionsEgressInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the security group. You must specify either the security group + // ID or the security group name in the request. For security groups in a nondefault + // VPC, you must specify the security group ID. + GroupId *string `type:"string"` + + // [Default VPC] The name of the security group. You must specify either the + // security group ID or the security group name in the request. + GroupName *string `type:"string"` + + // The IP permissions for the security group rule. + // + // IpPermissions is a required field + IpPermissions []*IpPermission `locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s UpdateSecurityGroupRuleDescriptionsEgressInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s UpdateSecurityGroupRuleDescriptionsEgressInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "UpdateSecurityGroupRuleDescriptionsEgressInput"} + if s.IpPermissions == nil { + invalidParams.Add(request.NewErrParamRequired("IpPermissions")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) SetDryRun(v bool) *UpdateSecurityGroupRuleDescriptionsEgressInput { + s.DryRun = &v + return s +} + +// SetGroupId sets the GroupId field's value. +func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) SetGroupId(v string) *UpdateSecurityGroupRuleDescriptionsEgressInput { + s.GroupId = &v + return s +} + +// SetGroupName sets the GroupName field's value. +func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) SetGroupName(v string) *UpdateSecurityGroupRuleDescriptionsEgressInput { + s.GroupName = &v + return s +} + +// SetIpPermissions sets the IpPermissions field's value. +func (s *UpdateSecurityGroupRuleDescriptionsEgressInput) SetIpPermissions(v []*IpPermission) *UpdateSecurityGroupRuleDescriptionsEgressInput { + s.IpPermissions = v + return s +} + +type UpdateSecurityGroupRuleDescriptionsEgressOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s UpdateSecurityGroupRuleDescriptionsEgressOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s UpdateSecurityGroupRuleDescriptionsEgressOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *UpdateSecurityGroupRuleDescriptionsEgressOutput) SetReturn(v bool) *UpdateSecurityGroupRuleDescriptionsEgressOutput { + s.Return = &v + return s +} + +type UpdateSecurityGroupRuleDescriptionsIngressInput struct { + _ struct{} `type:"structure"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` + + // The ID of the security group. You must specify either the security group + // ID or the security group name in the request. For security groups in a nondefault + // VPC, you must specify the security group ID. + GroupId *string `type:"string"` + + // [EC2-Classic, default VPC] The name of the security group. You must specify + // either the security group ID or the security group name in the request. + GroupName *string `type:"string"` + + // The IP permissions for the security group rule. + // + // IpPermissions is a required field + IpPermissions []*IpPermission `locationNameList:"item" type:"list" required:"true"` +} + +// String returns the string representation +func (s UpdateSecurityGroupRuleDescriptionsIngressInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s UpdateSecurityGroupRuleDescriptionsIngressInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "UpdateSecurityGroupRuleDescriptionsIngressInput"} + if s.IpPermissions == nil { + invalidParams.Add(request.NewErrParamRequired("IpPermissions")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetDryRun sets the DryRun field's value. +func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) SetDryRun(v bool) *UpdateSecurityGroupRuleDescriptionsIngressInput { + s.DryRun = &v + return s +} + +// SetGroupId sets the GroupId field's value. +func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) SetGroupId(v string) *UpdateSecurityGroupRuleDescriptionsIngressInput { + s.GroupId = &v + return s +} + +// SetGroupName sets the GroupName field's value. +func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) SetGroupName(v string) *UpdateSecurityGroupRuleDescriptionsIngressInput { + s.GroupName = &v + return s +} + +// SetIpPermissions sets the IpPermissions field's value. +func (s *UpdateSecurityGroupRuleDescriptionsIngressInput) SetIpPermissions(v []*IpPermission) *UpdateSecurityGroupRuleDescriptionsIngressInput { + s.IpPermissions = v + return s +} + +type UpdateSecurityGroupRuleDescriptionsIngressOutput struct { + _ struct{} `type:"structure"` + + // Returns true if the request succeeds; otherwise, returns an error. + Return *bool `locationName:"return" type:"boolean"` +} + +// String returns the string representation +func (s UpdateSecurityGroupRuleDescriptionsIngressOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s UpdateSecurityGroupRuleDescriptionsIngressOutput) GoString() string { + return s.String() +} + +// SetReturn sets the Return field's value. +func (s *UpdateSecurityGroupRuleDescriptionsIngressOutput) SetReturn(v bool) *UpdateSecurityGroupRuleDescriptionsIngressOutput { + s.Return = &v + return s +} + // Describes the S3 bucket for the disk image. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UserBucket type UserBucket struct { _ struct{} `type:"structure"` @@ -51070,7 +96474,6 @@ func (s *UserBucket) SetS3Key(v string) *UserBucket { } // Describes the S3 bucket for the disk image. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UserBucketDetails type UserBucketDetails struct { _ struct{} `type:"structure"` @@ -51104,9 +96507,8 @@ func (s *UserBucketDetails) SetS3Key(v string) *UserBucketDetails { } // Describes the user data for an instance. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UserData type UserData struct { - _ struct{} `type:"structure"` + _ struct{} `type:"structure" sensitive:"true"` // The user data. If you are using an AWS SDK or command line tool, Base64-encoding // is performed for you, and you can load the text from a file. Otherwise, you @@ -51131,23 +96533,35 @@ func (s *UserData) SetData(v string) *UserData { } // Describes a security group and AWS account ID pair. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UserIdGroupPair type UserIdGroupPair struct { _ struct{} `type:"structure"` + // A description for the security group rule that references this user ID group + // pair. + // + // Constraints: Up to 255 characters in length. Allowed characters are a-z, + // A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$* + Description *string `locationName:"description" type:"string"` + // The ID of the security group. GroupId *string `locationName:"groupId" type:"string"` // The name of the security group. In a request, use this parameter for a security // group in EC2-Classic or a default VPC only. For a security group in a nondefault // VPC, use the security group ID. + // + // For a referenced security group in another VPC, this value is not returned + // if the referenced security group is deleted. GroupName *string `locationName:"groupName" type:"string"` // The status of a VPC peering connection, if applicable. PeeringStatus *string `locationName:"peeringStatus" type:"string"` - // The ID of an AWS account. For a referenced security group in another VPC, - // the account ID of the referenced security group is returned. + // The ID of an AWS account. + // + // For a referenced security group in another VPC, the account ID of the referenced + // security group is returned in the response. If the referenced security group + // is deleted, this value is not returned. // // [EC2-Classic] Required when adding or removing rules that reference a security // group in another AWS account. @@ -51170,6 +96584,12 @@ func (s UserIdGroupPair) GoString() string { return s.String() } +// SetDescription sets the Description field's value. +func (s *UserIdGroupPair) SetDescription(v string) *UserIdGroupPair { + s.Description = &v + return s +} + // SetGroupId sets the GroupId field's value. func (s *UserIdGroupPair) SetGroupId(v string) *UserIdGroupPair { s.GroupId = &v @@ -51206,16 +96626,80 @@ func (s *UserIdGroupPair) SetVpcPeeringConnectionId(v string) *UserIdGroupPair { return s } +// Describes the vCPU configurations for the instance type. +type VCpuInfo struct { + _ struct{} `type:"structure"` + + // The default number of cores for the instance type. + DefaultCores *int64 `locationName:"defaultCores" type:"integer"` + + // The default number of threads per core for the instance type. + DefaultThreadsPerCore *int64 `locationName:"defaultThreadsPerCore" type:"integer"` + + // The default number of vCPUs for the instance type. + DefaultVCpus *int64 `locationName:"defaultVCpus" type:"integer"` + + // List of the valid number of cores that can be configured for the instance + // type. + ValidCores []*int64 `locationName:"validCores" locationNameList:"item" type:"list"` + + // List of the valid number of threads per core that can be configured for the + // instance type. + ValidThreadsPerCore []*int64 `locationName:"validThreadsPerCore" locationNameList:"item" type:"list"` +} + +// String returns the string representation +func (s VCpuInfo) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s VCpuInfo) GoString() string { + return s.String() +} + +// SetDefaultCores sets the DefaultCores field's value. +func (s *VCpuInfo) SetDefaultCores(v int64) *VCpuInfo { + s.DefaultCores = &v + return s +} + +// SetDefaultThreadsPerCore sets the DefaultThreadsPerCore field's value. +func (s *VCpuInfo) SetDefaultThreadsPerCore(v int64) *VCpuInfo { + s.DefaultThreadsPerCore = &v + return s +} + +// SetDefaultVCpus sets the DefaultVCpus field's value. +func (s *VCpuInfo) SetDefaultVCpus(v int64) *VCpuInfo { + s.DefaultVCpus = &v + return s +} + +// SetValidCores sets the ValidCores field's value. +func (s *VCpuInfo) SetValidCores(v []*int64) *VCpuInfo { + s.ValidCores = v + return s +} + +// SetValidThreadsPerCore sets the ValidThreadsPerCore field's value. +func (s *VCpuInfo) SetValidThreadsPerCore(v []*int64) *VCpuInfo { + s.ValidThreadsPerCore = v + return s +} + // Describes telemetry for a VPN tunnel. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VgwTelemetry type VgwTelemetry struct { _ struct{} `type:"structure"` // The number of accepted routes. AcceptedRouteCount *int64 `locationName:"acceptedRouteCount" type:"integer"` + // The Amazon Resource Name (ARN) of the VPN tunnel endpoint certificate. + CertificateArn *string `locationName:"certificateArn" type:"string"` + // The date and time of the last change in status. - LastStatusChange *time.Time `locationName:"lastStatusChange" type:"timestamp" timestampFormat:"iso8601"` + LastStatusChange *time.Time `locationName:"lastStatusChange" type:"timestamp"` // The Internet-routable IP address of the virtual private gateway's outside // interface. @@ -51244,6 +96728,12 @@ func (s *VgwTelemetry) SetAcceptedRouteCount(v int64) *VgwTelemetry { return s } +// SetCertificateArn sets the CertificateArn field's value. +func (s *VgwTelemetry) SetCertificateArn(v string) *VgwTelemetry { + s.CertificateArn = &v + return s +} + // SetLastStatusChange sets the LastStatusChange field's value. func (s *VgwTelemetry) SetLastStatusChange(v time.Time) *VgwTelemetry { s.LastStatusChange = &v @@ -51269,7 +96759,6 @@ func (s *VgwTelemetry) SetStatusMessage(v string) *VgwTelemetry { } // Describes a volume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Volume type Volume struct { _ struct{} `type:"structure"` @@ -51280,28 +96769,34 @@ type Volume struct { AvailabilityZone *string `locationName:"availabilityZone" type:"string"` // The time stamp when volume creation was initiated. - CreateTime *time.Time `locationName:"createTime" type:"timestamp" timestampFormat:"iso8601"` + CreateTime *time.Time `locationName:"createTime" type:"timestamp"` - // Indicates whether the volume will be encrypted. + // Indicates whether the volume is encrypted. Encrypted *bool `locationName:"encrypted" type:"boolean"` + // Indicates whether the volume was created using fast snapshot restore. + FastRestored *bool `locationName:"fastRestored" type:"boolean"` + // The number of I/O operations per second (IOPS) that the volume supports. // For Provisioned IOPS SSD volumes, this represents the number of IOPS that // are provisioned for the volume. For General Purpose SSD volumes, this represents // the baseline performance of the volume and the rate at which the volume accumulates - // I/O credits for bursting. For more information on General Purpose SSD baseline - // performance, I/O credits, and bursting, see Amazon EBS Volume Types (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) + // I/O credits for bursting. For more information, see Amazon EBS Volume Types + // (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) // in the Amazon Elastic Compute Cloud User Guide. // - // Constraint: Range is 100-20000 IOPS for io1 volumes and 100-10000 IOPS for - // gp2 volumes. + // Constraints: Range is 100-16,000 IOPS for gp2 volumes and 100 to 64,000IOPS + // for io1 volumes, in most Regions. The maximum IOPS for io1 of 64,000 is guaranteed + // only on Nitro-based instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances). + // Other instance families guarantee performance up to 32,000 IOPS. // // Condition: This parameter is required for requests to create io1 volumes; // it is not used in requests to create gp2, st1, sc1, or standard volumes. Iops *int64 `locationName:"iops" type:"integer"` - // The full ARN of the AWS Key Management Service (AWS KMS) customer master - // key (CMK) that was used to protect the volume encryption key for the volume. + // The Amazon Resource Name (ARN) of the AWS Key Management Service (AWS KMS) + // customer master key (CMK) that was used to protect the volume encryption + // key for the volume. KmsKeyId *string `locationName:"kmsKeyId" type:"string"` // The size of the volume, in GiBs. @@ -51359,6 +96854,12 @@ func (s *Volume) SetEncrypted(v bool) *Volume { return s } +// SetFastRestored sets the FastRestored field's value. +func (s *Volume) SetFastRestored(v bool) *Volume { + s.FastRestored = &v + return s +} + // SetIops sets the Iops field's value. func (s *Volume) SetIops(v int64) *Volume { s.Iops = &v @@ -51408,12 +96909,11 @@ func (s *Volume) SetVolumeType(v string) *Volume { } // Describes volume attachment details. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeAttachment type VolumeAttachment struct { _ struct{} `type:"structure"` // The time stamp when the attachment initiated. - AttachTime *time.Time `locationName:"attachTime" type:"timestamp" timestampFormat:"iso8601"` + AttachTime *time.Time `locationName:"attachTime" type:"timestamp"` // Indicates whether the EBS volume is deleted on instance termination. DeleteOnTermination *bool `locationName:"deleteOnTermination" type:"boolean"` @@ -51478,7 +96978,6 @@ func (s *VolumeAttachment) SetVolumeId(v string) *VolumeAttachment { } // Describes an EBS volume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeDetail type VolumeDetail struct { _ struct{} `type:"structure"` @@ -51520,45 +97019,44 @@ func (s *VolumeDetail) SetSize(v int64) *VolumeDetail { // Describes the modification status of an EBS volume. // // If the volume has never been modified, some element values will be null. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeModification type VolumeModification struct { _ struct{} `type:"structure"` - // Modification completion or failure time. - EndTime *time.Time `locationName:"endTime" type:"timestamp" timestampFormat:"iso8601"` + // The modification completion or failure time. + EndTime *time.Time `locationName:"endTime" type:"timestamp"` - // Current state of modification. Possible values are modifying | optimizing - // | complete | failed. Modification state is null for unmodified volumes. + // The current modification state. The modification state is null for unmodified + // volumes. ModificationState *string `locationName:"modificationState" type:"string" enum:"VolumeModificationState"` - // Original IOPS rate of the volume being modified. + // The original IOPS rate of the volume. OriginalIops *int64 `locationName:"originalIops" type:"integer"` - // Original size of the volume being modified. + // The original size of the volume. OriginalSize *int64 `locationName:"originalSize" type:"integer"` - // Original EBS volume type of the volume being modified. + // The original EBS volume type of the volume. OriginalVolumeType *string `locationName:"originalVolumeType" type:"string" enum:"VolumeType"` - // Modification progress from 0 to 100%. + // The modification progress, from 0 to 100 percent complete. Progress *int64 `locationName:"progress" type:"long"` - // Modification start time - StartTime *time.Time `locationName:"startTime" type:"timestamp" timestampFormat:"iso8601"` + // The modification start time. + StartTime *time.Time `locationName:"startTime" type:"timestamp"` - // Generic status message on modification progress or failure. + // A status message about the modification progress or failure. StatusMessage *string `locationName:"statusMessage" type:"string"` - // Target IOPS rate of the volume being modified. + // The target IOPS rate of the volume. TargetIops *int64 `locationName:"targetIops" type:"integer"` - // Target size of the volume being modified. + // The target size of the volume, in GiB. TargetSize *int64 `locationName:"targetSize" type:"integer"` - // Target EBS volume type of the volume being modified. + // The target EBS volume type of the volume. TargetVolumeType *string `locationName:"targetVolumeType" type:"string" enum:"VolumeType"` - // ID of the volume being modified. + // The ID of the volume. VolumeId *string `locationName:"volumeId" type:"string"` } @@ -51645,7 +97143,6 @@ func (s *VolumeModification) SetVolumeId(v string) *VolumeModification { } // Describes a volume status operation code. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusAction type VolumeStatusAction struct { _ struct{} `type:"structure"` @@ -51697,7 +97194,6 @@ func (s *VolumeStatusAction) SetEventType(v string) *VolumeStatusAction { } // Describes a volume status. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusDetails type VolumeStatusDetails struct { _ struct{} `type:"structure"` @@ -51731,7 +97227,6 @@ func (s *VolumeStatusDetails) SetStatus(v string) *VolumeStatusDetails { } // Describes a volume status event. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusEvent type VolumeStatusEvent struct { _ struct{} `type:"structure"` @@ -51745,10 +97240,10 @@ type VolumeStatusEvent struct { EventType *string `locationName:"eventType" type:"string"` // The latest end time of the event. - NotAfter *time.Time `locationName:"notAfter" type:"timestamp" timestampFormat:"iso8601"` + NotAfter *time.Time `locationName:"notAfter" type:"timestamp"` // The earliest start time of the event. - NotBefore *time.Time `locationName:"notBefore" type:"timestamp" timestampFormat:"iso8601"` + NotBefore *time.Time `locationName:"notBefore" type:"timestamp"` } // String returns the string representation @@ -51792,7 +97287,6 @@ func (s *VolumeStatusEvent) SetNotBefore(v time.Time) *VolumeStatusEvent { } // Describes the status of a volume. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusInfo type VolumeStatusInfo struct { _ struct{} `type:"structure"` @@ -51826,7 +97320,6 @@ func (s *VolumeStatusInfo) SetStatus(v string) *VolumeStatusInfo { } // Describes the volume status. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusItem type VolumeStatusItem struct { _ struct{} `type:"structure"` @@ -51887,13 +97380,15 @@ func (s *VolumeStatusItem) SetVolumeStatus(v *VolumeStatusInfo) *VolumeStatusIte } // Describes a VPC. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Vpc type Vpc struct { _ struct{} `type:"structure"` - // The IPv4 CIDR block for the VPC. + // The primary IPv4 CIDR block for the VPC. CidrBlock *string `locationName:"cidrBlock" type:"string"` + // Information about the IPv4 CIDR blocks associated with the VPC. + CidrBlockAssociationSet []*VpcCidrBlockAssociation `locationName:"cidrBlockAssociationSet" locationNameList:"item" type:"list"` + // The ID of the set of DHCP options you've associated with the VPC (or default // if the default options are associated with the VPC). DhcpOptionsId *string `locationName:"dhcpOptionsId" type:"string"` @@ -51907,6 +97402,9 @@ type Vpc struct { // Indicates whether the VPC is the default VPC. IsDefault *bool `locationName:"isDefault" type:"boolean"` + // The ID of the AWS account that owns the VPC. + OwnerId *string `locationName:"ownerId" type:"string"` + // The current state of the VPC. State *string `locationName:"state" type:"string" enum:"VpcState"` @@ -51933,6 +97431,12 @@ func (s *Vpc) SetCidrBlock(v string) *Vpc { return s } +// SetCidrBlockAssociationSet sets the CidrBlockAssociationSet field's value. +func (s *Vpc) SetCidrBlockAssociationSet(v []*VpcCidrBlockAssociation) *Vpc { + s.CidrBlockAssociationSet = v + return s +} + // SetDhcpOptionsId sets the DhcpOptionsId field's value. func (s *Vpc) SetDhcpOptionsId(v string) *Vpc { s.DhcpOptionsId = &v @@ -51957,6 +97461,12 @@ func (s *Vpc) SetIsDefault(v bool) *Vpc { return s } +// SetOwnerId sets the OwnerId field's value. +func (s *Vpc) SetOwnerId(v string) *Vpc { + s.OwnerId = &v + return s +} + // SetState sets the State field's value. func (s *Vpc) SetState(v string) *Vpc { s.State = &v @@ -51976,7 +97486,6 @@ func (s *Vpc) SetVpcId(v string) *Vpc { } // Describes an attachment between a virtual private gateway and a VPC. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcAttachment type VpcAttachment struct { _ struct{} `type:"structure"` @@ -52009,8 +97518,49 @@ func (s *VpcAttachment) SetVpcId(v string) *VpcAttachment { return s } +// Describes an IPv4 CIDR block associated with a VPC. +type VpcCidrBlockAssociation struct { + _ struct{} `type:"structure"` + + // The association ID for the IPv4 CIDR block. + AssociationId *string `locationName:"associationId" type:"string"` + + // The IPv4 CIDR block. + CidrBlock *string `locationName:"cidrBlock" type:"string"` + + // Information about the state of the CIDR block. + CidrBlockState *VpcCidrBlockState `locationName:"cidrBlockState" type:"structure"` +} + +// String returns the string representation +func (s VpcCidrBlockAssociation) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s VpcCidrBlockAssociation) GoString() string { + return s.String() +} + +// SetAssociationId sets the AssociationId field's value. +func (s *VpcCidrBlockAssociation) SetAssociationId(v string) *VpcCidrBlockAssociation { + s.AssociationId = &v + return s +} + +// SetCidrBlock sets the CidrBlock field's value. +func (s *VpcCidrBlockAssociation) SetCidrBlock(v string) *VpcCidrBlockAssociation { + s.CidrBlock = &v + return s +} + +// SetCidrBlockState sets the CidrBlockState field's value. +func (s *VpcCidrBlockAssociation) SetCidrBlockState(v *VpcCidrBlockState) *VpcCidrBlockAssociation { + s.CidrBlockState = v + return s +} + // Describes the state of a CIDR block. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcCidrBlockState type VpcCidrBlockState struct { _ struct{} `type:"structure"` @@ -52044,7 +97594,6 @@ func (s *VpcCidrBlockState) SetStatusMessage(v string) *VpcCidrBlockState { } // Describes whether a VPC is enabled for ClassicLink. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcClassicLink type VpcClassicLink struct { _ struct{} `type:"structure"` @@ -52087,28 +97636,56 @@ func (s *VpcClassicLink) SetVpcId(v string) *VpcClassicLink { } // Describes a VPC endpoint. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcEndpoint type VpcEndpoint struct { _ struct{} `type:"structure"` // The date and time the VPC endpoint was created. - CreationTimestamp *time.Time `locationName:"creationTimestamp" type:"timestamp" timestampFormat:"iso8601"` + CreationTimestamp *time.Time `locationName:"creationTimestamp" type:"timestamp"` - // The policy document associated with the endpoint. + // (Interface endpoint) The DNS entries for the endpoint. + DnsEntries []*DnsEntry `locationName:"dnsEntrySet" locationNameList:"item" type:"list"` + + // (Interface endpoint) Information about the security groups associated with + // the network interface. + Groups []*SecurityGroupIdentifier `locationName:"groupSet" locationNameList:"item" type:"list"` + + // (Interface endpoint) One or more network interfaces for the endpoint. + NetworkInterfaceIds []*string `locationName:"networkInterfaceIdSet" locationNameList:"item" type:"list"` + + // The ID of the AWS account that owns the VPC endpoint. + OwnerId *string `locationName:"ownerId" type:"string"` + + // The policy document associated with the endpoint, if applicable. PolicyDocument *string `locationName:"policyDocument" type:"string"` - // One or more route tables associated with the endpoint. + // (Interface endpoint) Indicates whether the VPC is associated with a private + // hosted zone. + PrivateDnsEnabled *bool `locationName:"privateDnsEnabled" type:"boolean"` + + // Indicates whether the VPC endpoint is being managed by its service. + RequesterManaged *bool `locationName:"requesterManaged" type:"boolean"` + + // (Gateway endpoint) One or more route tables associated with the endpoint. RouteTableIds []*string `locationName:"routeTableIdSet" locationNameList:"item" type:"list"` - // The name of the AWS service to which the endpoint is associated. + // The name of the service to which the endpoint is associated. ServiceName *string `locationName:"serviceName" type:"string"` // The state of the VPC endpoint. State *string `locationName:"state" type:"string" enum:"State"` + // (Interface endpoint) One or more subnets in which the endpoint is located. + SubnetIds []*string `locationName:"subnetIdSet" locationNameList:"item" type:"list"` + + // Any tags assigned to the VPC endpoint. + Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The ID of the VPC endpoint. VpcEndpointId *string `locationName:"vpcEndpointId" type:"string"` + // The type of endpoint. + VpcEndpointType *string `locationName:"vpcEndpointType" type:"string" enum:"VpcEndpointType"` + // The ID of the VPC to which the endpoint is associated. VpcId *string `locationName:"vpcId" type:"string"` } @@ -52129,12 +97706,48 @@ func (s *VpcEndpoint) SetCreationTimestamp(v time.Time) *VpcEndpoint { return s } +// SetDnsEntries sets the DnsEntries field's value. +func (s *VpcEndpoint) SetDnsEntries(v []*DnsEntry) *VpcEndpoint { + s.DnsEntries = v + return s +} + +// SetGroups sets the Groups field's value. +func (s *VpcEndpoint) SetGroups(v []*SecurityGroupIdentifier) *VpcEndpoint { + s.Groups = v + return s +} + +// SetNetworkInterfaceIds sets the NetworkInterfaceIds field's value. +func (s *VpcEndpoint) SetNetworkInterfaceIds(v []*string) *VpcEndpoint { + s.NetworkInterfaceIds = v + return s +} + +// SetOwnerId sets the OwnerId field's value. +func (s *VpcEndpoint) SetOwnerId(v string) *VpcEndpoint { + s.OwnerId = &v + return s +} + // SetPolicyDocument sets the PolicyDocument field's value. func (s *VpcEndpoint) SetPolicyDocument(v string) *VpcEndpoint { s.PolicyDocument = &v return s } +// SetPrivateDnsEnabled sets the PrivateDnsEnabled field's value. +func (s *VpcEndpoint) SetPrivateDnsEnabled(v bool) *VpcEndpoint { + s.PrivateDnsEnabled = &v + return s +} + +// SetRequesterManaged sets the RequesterManaged field's value. +func (s *VpcEndpoint) SetRequesterManaged(v bool) *VpcEndpoint { + s.RequesterManaged = &v + return s +} + // SetRouteTableIds sets the RouteTableIds field's value. func (s *VpcEndpoint) SetRouteTableIds(v []*string) *VpcEndpoint { s.RouteTableIds = v @@ -52153,20 +97766,115 @@ func (s *VpcEndpoint) SetState(v string) *VpcEndpoint { return s } +// SetSubnetIds sets the SubnetIds field's value. +func (s *VpcEndpoint) SetSubnetIds(v []*string) *VpcEndpoint { + s.SubnetIds = v + return s +} + +// SetTags sets the Tags field's value. +func (s *VpcEndpoint) SetTags(v []*Tag) *VpcEndpoint { + s.Tags = v + return s +} + // SetVpcEndpointId sets the VpcEndpointId field's value. func (s *VpcEndpoint) SetVpcEndpointId(v string) *VpcEndpoint { s.VpcEndpointId = &v return s } +// SetVpcEndpointType sets the VpcEndpointType field's value. +func (s *VpcEndpoint) SetVpcEndpointType(v string) *VpcEndpoint { + s.VpcEndpointType = &v + return s +} + // SetVpcId sets the VpcId field's value. func (s *VpcEndpoint) SetVpcId(v string) *VpcEndpoint { s.VpcId = &v return s } +// Describes a VPC endpoint connection to a service. +type VpcEndpointConnection struct { + _ struct{} `type:"structure"` + + // The date and time the VPC endpoint was created. + CreationTimestamp *time.Time `locationName:"creationTimestamp" type:"timestamp"` + + // The DNS entries for the VPC endpoint. + DnsEntries []*DnsEntry `locationName:"dnsEntrySet" locationNameList:"item" type:"list"` + + // The Amazon Resource Names (ARNs) of the network load balancers for the service. + NetworkLoadBalancerArns []*string `locationName:"networkLoadBalancerArnSet" locationNameList:"item" type:"list"` + + // The ID of the service to which the endpoint is connected. + ServiceId *string `locationName:"serviceId" type:"string"` + + // The ID of the VPC endpoint. + VpcEndpointId *string `locationName:"vpcEndpointId" type:"string"` + + // The AWS account ID of the owner of the VPC endpoint. + VpcEndpointOwner *string `locationName:"vpcEndpointOwner" type:"string"` + + // The state of the VPC endpoint. + VpcEndpointState *string `locationName:"vpcEndpointState" type:"string" enum:"State"` +} + +// String returns the string representation +func (s VpcEndpointConnection) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s VpcEndpointConnection) GoString() string { + return s.String() +} + +// SetCreationTimestamp sets the CreationTimestamp field's value. +func (s *VpcEndpointConnection) SetCreationTimestamp(v time.Time) *VpcEndpointConnection { + s.CreationTimestamp = &v + return s +} + +// SetDnsEntries sets the DnsEntries field's value. +func (s *VpcEndpointConnection) SetDnsEntries(v []*DnsEntry) *VpcEndpointConnection { + s.DnsEntries = v + return s +} + +// SetNetworkLoadBalancerArns sets the NetworkLoadBalancerArns field's value. +func (s *VpcEndpointConnection) SetNetworkLoadBalancerArns(v []*string) *VpcEndpointConnection { + s.NetworkLoadBalancerArns = v + return s +} + +// SetServiceId sets the ServiceId field's value. +func (s *VpcEndpointConnection) SetServiceId(v string) *VpcEndpointConnection { + s.ServiceId = &v + return s +} + +// SetVpcEndpointId sets the VpcEndpointId field's value. +func (s *VpcEndpointConnection) SetVpcEndpointId(v string) *VpcEndpointConnection { + s.VpcEndpointId = &v + return s +} + +// SetVpcEndpointOwner sets the VpcEndpointOwner field's value. +func (s *VpcEndpointConnection) SetVpcEndpointOwner(v string) *VpcEndpointConnection { + s.VpcEndpointOwner = &v + return s +} + +// SetVpcEndpointState sets the VpcEndpointState field's value. +func (s *VpcEndpointConnection) SetVpcEndpointState(v string) *VpcEndpointConnection { + s.VpcEndpointState = &v + return s +} + // Describes an IPv6 CIDR block associated with a VPC. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcIpv6CidrBlockAssociation type VpcIpv6CidrBlockAssociation struct { _ struct{} `type:"structure"` @@ -52209,19 +97917,18 @@ func (s *VpcIpv6CidrBlockAssociation) SetIpv6CidrBlockState(v *VpcCidrBlockState } // Describes a VPC peering connection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcPeeringConnection type VpcPeeringConnection struct { _ struct{} `type:"structure"` - // Information about the accepter VPC. CIDR block information is not returned - // when creating a VPC peering connection, or when describing a VPC peering - // connection that's in the initiating-request or pending-acceptance state. + // Information about the accepter VPC. CIDR block information is only returned + // when describing an active VPC peering connection. AccepterVpcInfo *VpcPeeringConnectionVpcInfo `locationName:"accepterVpcInfo" type:"structure"` // The time that an unaccepted VPC peering connection will expire. - ExpirationTime *time.Time `locationName:"expirationTime" type:"timestamp" timestampFormat:"iso8601"` + ExpirationTime *time.Time `locationName:"expirationTime" type:"timestamp"` - // Information about the requester VPC. + // Information about the requester VPC. CIDR block information is only returned + // when describing an active VPC peering connection. RequesterVpcInfo *VpcPeeringConnectionVpcInfo `locationName:"requesterVpcInfo" type:"structure"` // The status of the VPC peering connection. @@ -52281,7 +97988,6 @@ func (s *VpcPeeringConnection) SetVpcPeeringConnectionId(v string) *VpcPeeringCo } // Describes the VPC peering connection options. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcPeeringConnectionOptionsDescription type VpcPeeringConnectionOptionsDescription struct { _ struct{} `type:"structure"` @@ -52327,7 +98033,6 @@ func (s *VpcPeeringConnectionOptionsDescription) SetAllowEgressFromLocalVpcToRem } // Describes the status of a VPC peering connection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcPeeringConnectionStateReason type VpcPeeringConnectionStateReason struct { _ struct{} `type:"structure"` @@ -52361,13 +98066,15 @@ func (s *VpcPeeringConnectionStateReason) SetMessage(v string) *VpcPeeringConnec } // Describes a VPC in a VPC peering connection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcPeeringConnectionVpcInfo type VpcPeeringConnectionVpcInfo struct { _ struct{} `type:"structure"` // The IPv4 CIDR block for the VPC. CidrBlock *string `locationName:"cidrBlock" type:"string"` + // Information about the IPv4 CIDR blocks for the VPC. + CidrBlockSet []*CidrBlock `locationName:"cidrBlockSet" locationNameList:"item" type:"list"` + // The IPv6 CIDR block for the VPC. Ipv6CidrBlockSet []*Ipv6CidrBlock `locationName:"ipv6CidrBlockSet" locationNameList:"item" type:"list"` @@ -52378,6 +98085,9 @@ type VpcPeeringConnectionVpcInfo struct { // requester VPC. PeeringOptions *VpcPeeringConnectionOptionsDescription `locationName:"peeringOptions" type:"structure"` + // The Region in which the VPC is located. + Region *string `locationName:"region" type:"string"` + // The ID of the VPC. VpcId *string `locationName:"vpcId" type:"string"` } @@ -52398,6 +98108,12 @@ func (s *VpcPeeringConnectionVpcInfo) SetCidrBlock(v string) *VpcPeeringConnecti return s } +// SetCidrBlockSet sets the CidrBlockSet field's value. +func (s *VpcPeeringConnectionVpcInfo) SetCidrBlockSet(v []*CidrBlock) *VpcPeeringConnectionVpcInfo { + s.CidrBlockSet = v + return s +} + // SetIpv6CidrBlockSet sets the Ipv6CidrBlockSet field's value. func (s *VpcPeeringConnectionVpcInfo) SetIpv6CidrBlockSet(v []*Ipv6CidrBlock) *VpcPeeringConnectionVpcInfo { s.Ipv6CidrBlockSet = v @@ -52416,6 +98132,12 @@ func (s *VpcPeeringConnectionVpcInfo) SetPeeringOptions(v *VpcPeeringConnectionO return s } +// SetRegion sets the Region field's value. +func (s *VpcPeeringConnectionVpcInfo) SetRegion(v string) *VpcPeeringConnectionVpcInfo { + s.Region = &v + return s +} + // SetVpcId sets the VpcId field's value. func (s *VpcPeeringConnectionVpcInfo) SetVpcId(v string) *VpcPeeringConnectionVpcInfo { s.VpcId = &v @@ -52423,10 +98145,13 @@ func (s *VpcPeeringConnectionVpcInfo) SetVpcId(v string) *VpcPeeringConnectionVp } // Describes a VPN connection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnConnection type VpnConnection struct { _ struct{} `type:"structure"` + // The category of the VPN connection. A value of VPN indicates an AWS VPN connection. + // A value of VPN-Classic indicates an AWS Classic VPN connection. + Category *string `locationName:"category" type:"string"` + // The configuration information for the VPN connection's customer gateway (in // the native XML format). This element is always present in the CreateVpnConnection // response; however, it's present in the DescribeVpnConnections response only @@ -52448,6 +98173,9 @@ type VpnConnection struct { // Any tags assigned to the VPN connection. Tags []*Tag `locationName:"tagSet" locationNameList:"item" type:"list"` + // The ID of the transit gateway associated with the VPN connection. + TransitGatewayId *string `locationName:"transitGatewayId" type:"string"` + // The type of VPN connection. Type *string `locationName:"type" type:"string" enum:"GatewayType"` @@ -52471,6 +98199,12 @@ func (s VpnConnection) GoString() string { return s.String() } +// SetCategory sets the Category field's value. +func (s *VpnConnection) SetCategory(v string) *VpnConnection { + s.Category = &v + return s +} + // SetCustomerGatewayConfiguration sets the CustomerGatewayConfiguration field's value. func (s *VpnConnection) SetCustomerGatewayConfiguration(v string) *VpnConnection { s.CustomerGatewayConfiguration = &v @@ -52507,6 +98241,12 @@ func (s *VpnConnection) SetTags(v []*Tag) *VpnConnection { return s } +// SetTransitGatewayId sets the TransitGatewayId field's value. +func (s *VpnConnection) SetTransitGatewayId(v string) *VpnConnection { + s.TransitGatewayId = &v + return s +} + // SetType sets the Type field's value. func (s *VpnConnection) SetType(v string) *VpnConnection { s.Type = &v @@ -52532,13 +98272,15 @@ func (s *VpnConnection) SetVpnGatewayId(v string) *VpnConnection { } // Describes VPN connection options. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnConnectionOptions type VpnConnectionOptions struct { _ struct{} `type:"structure"` // Indicates whether the VPN connection uses static routes only. Static routes // must be used for devices that don't support BGP. StaticRoutesOnly *bool `locationName:"staticRoutesOnly" type:"boolean"` + + // Indicates the VPN tunnel options. + TunnelOptions []*TunnelOption `locationName:"tunnelOptionSet" locationNameList:"item" type:"list"` } // String returns the string representation @@ -52557,14 +98299,25 @@ func (s *VpnConnectionOptions) SetStaticRoutesOnly(v bool) *VpnConnectionOptions return s } +// SetTunnelOptions sets the TunnelOptions field's value. +func (s *VpnConnectionOptions) SetTunnelOptions(v []*TunnelOption) *VpnConnectionOptions { + s.TunnelOptions = v + return s +} + // Describes VPN connection options. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnConnectionOptionsSpecification type VpnConnectionOptionsSpecification struct { _ struct{} `type:"structure"` - // Indicates whether the VPN connection uses static routes only. Static routes - // must be used for devices that don't support BGP. + // Indicate whether the VPN connection uses static routes only. If you are creating + // a VPN connection for a device that does not support BGP, you must specify + // true. Use CreateVpnConnectionRoute to create a static route. + // + // Default: false StaticRoutesOnly *bool `locationName:"staticRoutesOnly" type:"boolean"` + + // The tunnel options for the VPN connection. + TunnelOptions []*VpnTunnelOptionsSpecification `type:"list"` } // String returns the string representation @@ -52583,11 +98336,19 @@ func (s *VpnConnectionOptionsSpecification) SetStaticRoutesOnly(v bool) *VpnConn return s } +// SetTunnelOptions sets the TunnelOptions field's value. +func (s *VpnConnectionOptionsSpecification) SetTunnelOptions(v []*VpnTunnelOptionsSpecification) *VpnConnectionOptionsSpecification { + s.TunnelOptions = v + return s +} + // Describes a virtual private gateway. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnGateway type VpnGateway struct { _ struct{} `type:"structure"` + // The private Autonomous System Number (ASN) for the Amazon side of a BGP session. + AmazonSideAsn *int64 `locationName:"amazonSideAsn" type:"long"` + // The Availability Zone where the virtual private gateway was created, if applicable. // This field may be empty or not returned. AvailabilityZone *string `locationName:"availabilityZone" type:"string"` @@ -52618,6 +98379,12 @@ func (s VpnGateway) GoString() string { return s.String() } +// SetAmazonSideAsn sets the AmazonSideAsn field's value. +func (s *VpnGateway) SetAmazonSideAsn(v int64) *VpnGateway { + s.AmazonSideAsn = &v + return s +} + // SetAvailabilityZone sets the AvailabilityZone field's value. func (s *VpnGateway) SetAvailabilityZone(v string) *VpnGateway { s.AvailabilityZone = &v @@ -52655,7 +98422,6 @@ func (s *VpnGateway) SetVpnGatewayId(v string) *VpnGateway { } // Describes a static route for a VPN connection. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnStaticRoute type VpnStaticRoute struct { _ struct{} `type:"structure"` @@ -52697,6 +98463,301 @@ func (s *VpnStaticRoute) SetState(v string) *VpnStaticRoute { return s } +// The tunnel options for a VPN connection. +type VpnTunnelOptionsSpecification struct { + _ struct{} `type:"structure"` + + // The number of seconds after which a DPD timeout occurs. + // + // Constraints: A value between 0 and 30. + // + // Default: 30 + DPDTimeoutSeconds *int64 `type:"integer"` + + // The IKE versions that are permitted for the VPN tunnel. + // + // Valid values: ikev1 | ikev2 + IKEVersions []*IKEVersionsRequestListValue `locationName:"IKEVersion" locationNameList:"item" type:"list"` + + // One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel + // for phase 1 IKE negotiations. + // + // Valid values: 2 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 + Phase1DHGroupNumbers []*Phase1DHGroupNumbersRequestListValue `locationName:"Phase1DHGroupNumber" locationNameList:"item" type:"list"` + + // One or more encryption algorithms that are permitted for the VPN tunnel for + // phase 1 IKE negotiations. + // + // Valid values: AES128 | AES256 + Phase1EncryptionAlgorithms []*Phase1EncryptionAlgorithmsRequestListValue `locationName:"Phase1EncryptionAlgorithm" locationNameList:"item" type:"list"` + + // One or more integrity algorithms that are permitted for the VPN tunnel for + // phase 1 IKE negotiations. + // + // Valid values: SHA1 | SHA2-256 + Phase1IntegrityAlgorithms []*Phase1IntegrityAlgorithmsRequestListValue `locationName:"Phase1IntegrityAlgorithm" locationNameList:"item" type:"list"` + + // The lifetime for phase 1 of the IKE negotiation, in seconds. + // + // Constraints: A value between 900 and 28,800. + // + // Default: 28800 + Phase1LifetimeSeconds *int64 `type:"integer"` + + // One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel + // for phase 2 IKE negotiations. + // + // Valid values: 2 | 5 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 + Phase2DHGroupNumbers []*Phase2DHGroupNumbersRequestListValue `locationName:"Phase2DHGroupNumber" locationNameList:"item" type:"list"` + + // One or more encryption algorithms that are permitted for the VPN tunnel for + // phase 2 IKE negotiations. + // + // Valid values: AES128 | AES256 + Phase2EncryptionAlgorithms []*Phase2EncryptionAlgorithmsRequestListValue `locationName:"Phase2EncryptionAlgorithm" locationNameList:"item" type:"list"` + + // One or more integrity algorithms that are permitted for the VPN tunnel for + // phase 2 IKE negotiations. + // + // Valid values: SHA1 | SHA2-256 + Phase2IntegrityAlgorithms []*Phase2IntegrityAlgorithmsRequestListValue `locationName:"Phase2IntegrityAlgorithm" locationNameList:"item" type:"list"` + + // The lifetime for phase 2 of the IKE negotiation, in seconds. + // + // Constraints: A value between 900 and 3,600. The value must be less than the + // value for Phase1LifetimeSeconds. + // + // Default: 3600 + Phase2LifetimeSeconds *int64 `type:"integer"` + + // The pre-shared key (PSK) to establish initial authentication between the + // virtual private gateway and customer gateway. + // + // Constraints: Allowed characters are alphanumeric characters, periods (.), + // and underscores (_). Must be between 8 and 64 characters in length and cannot + // start with zero (0). + PreSharedKey *string `type:"string"` + + // The percentage of the rekey window (determined by RekeyMarginTimeSeconds) + // during which the rekey time is randomly selected. + // + // Constraints: A value between 0 and 100. + // + // Default: 100 + RekeyFuzzPercentage *int64 `type:"integer"` + + // The margin time, in seconds, before the phase 2 lifetime expires, during + // which the AWS side of the VPN connection performs an IKE rekey. The exact + // time of the rekey is randomly selected based on the value for RekeyFuzzPercentage. + // + // Constraints: A value between 60 and half of Phase2LifetimeSeconds. + // + // Default: 540 + RekeyMarginTimeSeconds *int64 `type:"integer"` + + // The number of packets in an IKE replay window. + // + // Constraints: A value between 64 and 2048. + // + // Default: 1024 + ReplayWindowSize *int64 `type:"integer"` + + // The range of inside IP addresses for the tunnel. Any specified CIDR blocks + // must be unique across all VPN connections that use the same virtual private + // gateway. + // + // Constraints: A size /30 CIDR block from the 169.254.0.0/16 range. The following + // CIDR blocks are reserved and cannot be used: + // + // * 169.254.0.0/30 + // + // * 169.254.1.0/30 + // + // * 169.254.2.0/30 + // + // * 169.254.3.0/30 + // + // * 169.254.4.0/30 + // + // * 169.254.5.0/30 + // + // * 169.254.169.252/30 + TunnelInsideCidr *string `type:"string"` +} + +// String returns the string representation +func (s VpnTunnelOptionsSpecification) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s VpnTunnelOptionsSpecification) GoString() string { + return s.String() +} + +// SetDPDTimeoutSeconds sets the DPDTimeoutSeconds field's value. +func (s *VpnTunnelOptionsSpecification) SetDPDTimeoutSeconds(v int64) *VpnTunnelOptionsSpecification { + s.DPDTimeoutSeconds = &v + return s +} + +// SetIKEVersions sets the IKEVersions field's value. +func (s *VpnTunnelOptionsSpecification) SetIKEVersions(v []*IKEVersionsRequestListValue) *VpnTunnelOptionsSpecification { + s.IKEVersions = v + return s +} + +// SetPhase1DHGroupNumbers sets the Phase1DHGroupNumbers field's value. +func (s *VpnTunnelOptionsSpecification) SetPhase1DHGroupNumbers(v []*Phase1DHGroupNumbersRequestListValue) *VpnTunnelOptionsSpecification { + s.Phase1DHGroupNumbers = v + return s +} + +// SetPhase1EncryptionAlgorithms sets the Phase1EncryptionAlgorithms field's value. +func (s *VpnTunnelOptionsSpecification) SetPhase1EncryptionAlgorithms(v []*Phase1EncryptionAlgorithmsRequestListValue) *VpnTunnelOptionsSpecification { + s.Phase1EncryptionAlgorithms = v + return s +} + +// SetPhase1IntegrityAlgorithms sets the Phase1IntegrityAlgorithms field's value. +func (s *VpnTunnelOptionsSpecification) SetPhase1IntegrityAlgorithms(v []*Phase1IntegrityAlgorithmsRequestListValue) *VpnTunnelOptionsSpecification { + s.Phase1IntegrityAlgorithms = v + return s +} + +// SetPhase1LifetimeSeconds sets the Phase1LifetimeSeconds field's value. +func (s *VpnTunnelOptionsSpecification) SetPhase1LifetimeSeconds(v int64) *VpnTunnelOptionsSpecification { + s.Phase1LifetimeSeconds = &v + return s +} + +// SetPhase2DHGroupNumbers sets the Phase2DHGroupNumbers field's value. +func (s *VpnTunnelOptionsSpecification) SetPhase2DHGroupNumbers(v []*Phase2DHGroupNumbersRequestListValue) *VpnTunnelOptionsSpecification { + s.Phase2DHGroupNumbers = v + return s +} + +// SetPhase2EncryptionAlgorithms sets the Phase2EncryptionAlgorithms field's value. +func (s *VpnTunnelOptionsSpecification) SetPhase2EncryptionAlgorithms(v []*Phase2EncryptionAlgorithmsRequestListValue) *VpnTunnelOptionsSpecification { + s.Phase2EncryptionAlgorithms = v + return s +} + +// SetPhase2IntegrityAlgorithms sets the Phase2IntegrityAlgorithms field's value. +func (s *VpnTunnelOptionsSpecification) SetPhase2IntegrityAlgorithms(v []*Phase2IntegrityAlgorithmsRequestListValue) *VpnTunnelOptionsSpecification { + s.Phase2IntegrityAlgorithms = v + return s +} + +// SetPhase2LifetimeSeconds sets the Phase2LifetimeSeconds field's value. +func (s *VpnTunnelOptionsSpecification) SetPhase2LifetimeSeconds(v int64) *VpnTunnelOptionsSpecification { + s.Phase2LifetimeSeconds = &v + return s +} + +// SetPreSharedKey sets the PreSharedKey field's value. +func (s *VpnTunnelOptionsSpecification) SetPreSharedKey(v string) *VpnTunnelOptionsSpecification { + s.PreSharedKey = &v + return s +} + +// SetRekeyFuzzPercentage sets the RekeyFuzzPercentage field's value. +func (s *VpnTunnelOptionsSpecification) SetRekeyFuzzPercentage(v int64) *VpnTunnelOptionsSpecification { + s.RekeyFuzzPercentage = &v + return s +} + +// SetRekeyMarginTimeSeconds sets the RekeyMarginTimeSeconds field's value. +func (s *VpnTunnelOptionsSpecification) SetRekeyMarginTimeSeconds(v int64) *VpnTunnelOptionsSpecification { + s.RekeyMarginTimeSeconds = &v + return s +} + +// SetReplayWindowSize sets the ReplayWindowSize field's value. +func (s *VpnTunnelOptionsSpecification) SetReplayWindowSize(v int64) *VpnTunnelOptionsSpecification { + s.ReplayWindowSize = &v + return s +} + +// SetTunnelInsideCidr sets the TunnelInsideCidr field's value. +func (s *VpnTunnelOptionsSpecification) SetTunnelInsideCidr(v string) *VpnTunnelOptionsSpecification { + s.TunnelInsideCidr = &v + return s +} + +type WithdrawByoipCidrInput struct { + _ struct{} `type:"structure"` + + // The public IPv4 address range, in CIDR notation. + // + // Cidr is a required field + Cidr *string `type:"string" required:"true"` + + // Checks whether you have the required permissions for the action, without + // actually making the request, and provides an error response. If you have + // the required permissions, the error response is DryRunOperation. Otherwise, + // it is UnauthorizedOperation. + DryRun *bool `type:"boolean"` +} + +// String returns the string representation +func (s WithdrawByoipCidrInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s WithdrawByoipCidrInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *WithdrawByoipCidrInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "WithdrawByoipCidrInput"} + if s.Cidr == nil { + invalidParams.Add(request.NewErrParamRequired("Cidr")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCidr sets the Cidr field's value. +func (s *WithdrawByoipCidrInput) SetCidr(v string) *WithdrawByoipCidrInput { + s.Cidr = &v + return s +} + +// SetDryRun sets the DryRun field's value. +func (s *WithdrawByoipCidrInput) SetDryRun(v bool) *WithdrawByoipCidrInput { + s.DryRun = &v + return s +} + +type WithdrawByoipCidrOutput struct { + _ struct{} `type:"structure"` + + // Information about the address pool. + ByoipCidr *ByoipCidr `locationName:"byoipCidr" type:"structure"` +} + +// String returns the string representation +func (s WithdrawByoipCidrOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s WithdrawByoipCidrOutput) GoString() string { + return s.String() +} + +// SetByoipCidr sets the ByoipCidr field's value. +func (s *WithdrawByoipCidrOutput) SetByoipCidr(v *ByoipCidr) *WithdrawByoipCidrOutput { + s.ByoipCidr = v + return s +} + const ( // AccountAttributeNameSupportedPlatforms is a AccountAttributeName enum value AccountAttributeNameSupportedPlatforms = "supported-platforms" @@ -52742,6 +98803,9 @@ const ( // AllocationStateReleasedPermanentFailure is a AllocationState enum value AllocationStateReleasedPermanentFailure = "released-permanent-failure" + + // AllocationStatePending is a AllocationState enum value + AllocationStatePending = "pending" ) const ( @@ -52750,6 +98814,28 @@ const ( // AllocationStrategyDiversified is a AllocationStrategy enum value AllocationStrategyDiversified = "diversified" + + // AllocationStrategyCapacityOptimized is a AllocationStrategy enum value + AllocationStrategyCapacityOptimized = "capacityOptimized" +) + +const ( + // AllowsMultipleInstanceTypesOn is a AllowsMultipleInstanceTypes enum value + AllowsMultipleInstanceTypesOn = "on" + + // AllowsMultipleInstanceTypesOff is a AllowsMultipleInstanceTypes enum value + AllowsMultipleInstanceTypesOff = "off" +) + +const ( + // ArchitectureTypeI386 is a ArchitectureType enum value + ArchitectureTypeI386 = "i386" + + // ArchitectureTypeX8664 is a ArchitectureType enum value + ArchitectureTypeX8664 = "x86_64" + + // ArchitectureTypeArm64 is a ArchitectureType enum value + ArchitectureTypeArm64 = "arm64" ) const ( @@ -52758,6 +98844,31 @@ const ( // ArchitectureValuesX8664 is a ArchitectureValues enum value ArchitectureValuesX8664 = "x86_64" + + // ArchitectureValuesArm64 is a ArchitectureValues enum value + ArchitectureValuesArm64 = "arm64" +) + +const ( + // AssociatedNetworkTypeVpc is a AssociatedNetworkType enum value + AssociatedNetworkTypeVpc = "vpc" +) + +const ( + // AssociationStatusCodeAssociating is a AssociationStatusCode enum value + AssociationStatusCodeAssociating = "associating" + + // AssociationStatusCodeAssociated is a AssociationStatusCode enum value + AssociationStatusCodeAssociated = "associated" + + // AssociationStatusCodeAssociationFailed is a AssociationStatusCode enum value + AssociationStatusCodeAssociationFailed = "association-failed" + + // AssociationStatusCodeDisassociating is a AssociationStatusCode enum value + AssociationStatusCodeDisassociating = "disassociating" + + // AssociationStatusCodeDisassociated is a AssociationStatusCode enum value + AssociationStatusCodeDisassociated = "disassociated" ) const ( @@ -52774,6 +98885,14 @@ const ( AttachmentStatusDetached = "detached" ) +const ( + // AutoAcceptSharedAttachmentsValueEnable is a AutoAcceptSharedAttachmentsValue enum value + AutoAcceptSharedAttachmentsValueEnable = "enable" + + // AutoAcceptSharedAttachmentsValueDisable is a AutoAcceptSharedAttachmentsValue enum value + AutoAcceptSharedAttachmentsValueDisable = "disable" +) + const ( // AutoPlacementOn is a AutoPlacement enum value AutoPlacementOn = "on" @@ -52842,6 +98961,29 @@ const ( BundleTaskStateFailed = "failed" ) +const ( + // ByoipCidrStateAdvertised is a ByoipCidrState enum value + ByoipCidrStateAdvertised = "advertised" + + // ByoipCidrStateDeprovisioned is a ByoipCidrState enum value + ByoipCidrStateDeprovisioned = "deprovisioned" + + // ByoipCidrStateFailedDeprovision is a ByoipCidrState enum value + ByoipCidrStateFailedDeprovision = "failed-deprovision" + + // ByoipCidrStateFailedProvision is a ByoipCidrState enum value + ByoipCidrStateFailedProvision = "failed-provision" + + // ByoipCidrStatePendingDeprovision is a ByoipCidrState enum value + ByoipCidrStatePendingDeprovision = "pending-deprovision" + + // ByoipCidrStatePendingProvision is a ByoipCidrState enum value + ByoipCidrStatePendingProvision = "pending-provision" + + // ByoipCidrStateProvisioned is a ByoipCidrState enum value + ByoipCidrStateProvisioned = "provisioned" +) + const ( // CancelBatchErrorCodeFleetRequestIdDoesNotExist is a CancelBatchErrorCode enum value CancelBatchErrorCodeFleetRequestIdDoesNotExist = "fleetRequestIdDoesNotExist" @@ -52873,6 +99015,159 @@ const ( CancelSpotInstanceRequestStateCompleted = "completed" ) +const ( + // CapacityReservationInstancePlatformLinuxUnix is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformLinuxUnix = "Linux/UNIX" + + // CapacityReservationInstancePlatformRedHatEnterpriseLinux is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformRedHatEnterpriseLinux = "Red Hat Enterprise Linux" + + // CapacityReservationInstancePlatformSuselinux is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformSuselinux = "SUSE Linux" + + // CapacityReservationInstancePlatformWindows is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformWindows = "Windows" + + // CapacityReservationInstancePlatformWindowswithSqlserver is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformWindowswithSqlserver = "Windows with SQL Server" + + // CapacityReservationInstancePlatformWindowswithSqlserverEnterprise is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformWindowswithSqlserverEnterprise = "Windows with SQL Server Enterprise" + + // CapacityReservationInstancePlatformWindowswithSqlserverStandard is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformWindowswithSqlserverStandard = "Windows with SQL Server Standard" + + // CapacityReservationInstancePlatformWindowswithSqlserverWeb is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformWindowswithSqlserverWeb = "Windows with SQL Server Web" + + // CapacityReservationInstancePlatformLinuxwithSqlserverStandard is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformLinuxwithSqlserverStandard = "Linux with SQL Server Standard" + + // CapacityReservationInstancePlatformLinuxwithSqlserverWeb is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformLinuxwithSqlserverWeb = "Linux with SQL Server Web" + + // CapacityReservationInstancePlatformLinuxwithSqlserverEnterprise is a CapacityReservationInstancePlatform enum value + CapacityReservationInstancePlatformLinuxwithSqlserverEnterprise = "Linux with SQL Server Enterprise" +) + +const ( + // CapacityReservationPreferenceOpen is a CapacityReservationPreference enum value + CapacityReservationPreferenceOpen = "open" + + // CapacityReservationPreferenceNone is a CapacityReservationPreference enum value + CapacityReservationPreferenceNone = "none" +) + +const ( + // CapacityReservationStateActive is a CapacityReservationState enum value + CapacityReservationStateActive = "active" + + // CapacityReservationStateExpired is a CapacityReservationState enum value + CapacityReservationStateExpired = "expired" + + // CapacityReservationStateCancelled is a CapacityReservationState enum value + CapacityReservationStateCancelled = "cancelled" + + // CapacityReservationStatePending is a CapacityReservationState enum value + CapacityReservationStatePending = "pending" + + // CapacityReservationStateFailed is a CapacityReservationState enum value + CapacityReservationStateFailed = "failed" +) + +const ( + // CapacityReservationTenancyDefault is a CapacityReservationTenancy enum value + CapacityReservationTenancyDefault = "default" + + // CapacityReservationTenancyDedicated is a CapacityReservationTenancy enum value + CapacityReservationTenancyDedicated = "dedicated" +) + +const ( + // ClientCertificateRevocationListStatusCodePending is a ClientCertificateRevocationListStatusCode enum value + ClientCertificateRevocationListStatusCodePending = "pending" + + // ClientCertificateRevocationListStatusCodeActive is a ClientCertificateRevocationListStatusCode enum value + ClientCertificateRevocationListStatusCodeActive = "active" +) + +const ( + // ClientVpnAuthenticationTypeCertificateAuthentication is a ClientVpnAuthenticationType enum value + ClientVpnAuthenticationTypeCertificateAuthentication = "certificate-authentication" + + // ClientVpnAuthenticationTypeDirectoryServiceAuthentication is a ClientVpnAuthenticationType enum value + ClientVpnAuthenticationTypeDirectoryServiceAuthentication = "directory-service-authentication" +) + +const ( + // ClientVpnAuthorizationRuleStatusCodeAuthorizing is a ClientVpnAuthorizationRuleStatusCode enum value + ClientVpnAuthorizationRuleStatusCodeAuthorizing = "authorizing" + + // ClientVpnAuthorizationRuleStatusCodeActive is a ClientVpnAuthorizationRuleStatusCode enum value + ClientVpnAuthorizationRuleStatusCodeActive = "active" + + // ClientVpnAuthorizationRuleStatusCodeFailed is a ClientVpnAuthorizationRuleStatusCode enum value + ClientVpnAuthorizationRuleStatusCodeFailed = "failed" + + // ClientVpnAuthorizationRuleStatusCodeRevoking is a ClientVpnAuthorizationRuleStatusCode enum value + ClientVpnAuthorizationRuleStatusCodeRevoking = "revoking" +) + +const ( + // ClientVpnConnectionStatusCodeActive is a ClientVpnConnectionStatusCode enum value + ClientVpnConnectionStatusCodeActive = "active" + + // ClientVpnConnectionStatusCodeFailedToTerminate is a ClientVpnConnectionStatusCode enum value + ClientVpnConnectionStatusCodeFailedToTerminate = "failed-to-terminate" + + // ClientVpnConnectionStatusCodeTerminating is a ClientVpnConnectionStatusCode enum value + ClientVpnConnectionStatusCodeTerminating = "terminating" + + // ClientVpnConnectionStatusCodeTerminated is a ClientVpnConnectionStatusCode enum value + ClientVpnConnectionStatusCodeTerminated = "terminated" +) + +const ( + // ClientVpnEndpointStatusCodePendingAssociate is a ClientVpnEndpointStatusCode enum value + ClientVpnEndpointStatusCodePendingAssociate = "pending-associate" + + // ClientVpnEndpointStatusCodeAvailable is a ClientVpnEndpointStatusCode enum value + ClientVpnEndpointStatusCodeAvailable = "available" + + // ClientVpnEndpointStatusCodeDeleting is a ClientVpnEndpointStatusCode enum value + ClientVpnEndpointStatusCodeDeleting = "deleting" + + // ClientVpnEndpointStatusCodeDeleted is a ClientVpnEndpointStatusCode enum value + ClientVpnEndpointStatusCodeDeleted = "deleted" +) + +const ( + // ClientVpnRouteStatusCodeCreating is a ClientVpnRouteStatusCode enum value + ClientVpnRouteStatusCodeCreating = "creating" + + // ClientVpnRouteStatusCodeActive is a ClientVpnRouteStatusCode enum value + ClientVpnRouteStatusCodeActive = "active" + + // ClientVpnRouteStatusCodeFailed is a ClientVpnRouteStatusCode enum value + ClientVpnRouteStatusCodeFailed = "failed" + + // ClientVpnRouteStatusCodeDeleting is a ClientVpnRouteStatusCode enum value + ClientVpnRouteStatusCodeDeleting = "deleting" +) + +const ( + // ConnectionNotificationStateEnabled is a ConnectionNotificationState enum value + ConnectionNotificationStateEnabled = "Enabled" + + // ConnectionNotificationStateDisabled is a ConnectionNotificationState enum value + ConnectionNotificationStateDisabled = "Disabled" +) + +const ( + // ConnectionNotificationTypeTopic is a ConnectionNotificationType enum value + ConnectionNotificationTypeTopic = "Topic" +) + const ( // ContainerFormatOva is a ContainerFormat enum value ContainerFormatOva = "ova" @@ -52892,6 +99187,11 @@ const ( ConversionTaskStateCompleted = "completed" ) +const ( + // CopyTagsFromSourceVolume is a CopyTagsFromSource enum value + CopyTagsFromSourceVolume = "volume" +) + const ( // CurrencyCodeValuesUsd is a CurrencyCodeValues enum value CurrencyCodeValuesUsd = "USD" @@ -52905,6 +99205,55 @@ const ( DatafeedSubscriptionStateInactive = "Inactive" ) +const ( + // DefaultRouteTableAssociationValueEnable is a DefaultRouteTableAssociationValue enum value + DefaultRouteTableAssociationValueEnable = "enable" + + // DefaultRouteTableAssociationValueDisable is a DefaultRouteTableAssociationValue enum value + DefaultRouteTableAssociationValueDisable = "disable" +) + +const ( + // DefaultRouteTablePropagationValueEnable is a DefaultRouteTablePropagationValue enum value + DefaultRouteTablePropagationValueEnable = "enable" + + // DefaultRouteTablePropagationValueDisable is a DefaultRouteTablePropagationValue enum value + DefaultRouteTablePropagationValueDisable = "disable" +) + +const ( + // DefaultTargetCapacityTypeSpot is a DefaultTargetCapacityType enum value + DefaultTargetCapacityTypeSpot = "spot" + + // DefaultTargetCapacityTypeOnDemand is a DefaultTargetCapacityType enum value + DefaultTargetCapacityTypeOnDemand = "on-demand" +) + +const ( + // DeleteFleetErrorCodeFleetIdDoesNotExist is a DeleteFleetErrorCode enum value + DeleteFleetErrorCodeFleetIdDoesNotExist = "fleetIdDoesNotExist" + + // DeleteFleetErrorCodeFleetIdMalformed is a DeleteFleetErrorCode enum value + DeleteFleetErrorCodeFleetIdMalformed = "fleetIdMalformed" + + // DeleteFleetErrorCodeFleetNotInDeletableState is a DeleteFleetErrorCode enum value + DeleteFleetErrorCodeFleetNotInDeletableState = "fleetNotInDeletableState" + + // DeleteFleetErrorCodeUnexpectedError is a DeleteFleetErrorCode enum value + DeleteFleetErrorCodeUnexpectedError = "unexpectedError" +) + +const ( + // DeleteQueuedReservedInstancesErrorCodeReservedInstancesIdInvalid is a DeleteQueuedReservedInstancesErrorCode enum value + DeleteQueuedReservedInstancesErrorCodeReservedInstancesIdInvalid = "reserved-instances-id-invalid" + + // DeleteQueuedReservedInstancesErrorCodeReservedInstancesNotInQueuedState is a DeleteQueuedReservedInstancesErrorCode enum value + DeleteQueuedReservedInstancesErrorCodeReservedInstancesNotInQueuedState = "reserved-instances-not-in-queued-state" + + // DeleteQueuedReservedInstancesErrorCodeUnexpectedError is a DeleteQueuedReservedInstancesErrorCode enum value + DeleteQueuedReservedInstancesErrorCodeUnexpectedError = "unexpected-error" +) + const ( // DeviceTypeEbs is a DeviceType enum value DeviceTypeEbs = "ebs" @@ -52924,6 +99273,22 @@ const ( DiskImageFormatVhd = "VHD" ) +const ( + // DiskTypeHdd is a DiskType enum value + DiskTypeHdd = "hdd" + + // DiskTypeSsd is a DiskType enum value + DiskTypeSsd = "ssd" +) + +const ( + // DnsSupportValueEnable is a DnsSupportValue enum value + DnsSupportValueEnable = "enable" + + // DnsSupportValueDisable is a DnsSupportValue enum value + DnsSupportValueDisable = "disable" +) + const ( // DomainTypeVpc is a DomainType enum value DomainTypeVpc = "vpc" @@ -52932,6 +99297,57 @@ const ( DomainTypeStandard = "standard" ) +const ( + // EbsEncryptionSupportUnsupported is a EbsEncryptionSupport enum value + EbsEncryptionSupportUnsupported = "unsupported" + + // EbsEncryptionSupportSupported is a EbsEncryptionSupport enum value + EbsEncryptionSupportSupported = "supported" +) + +const ( + // EbsOptimizedSupportUnsupported is a EbsOptimizedSupport enum value + EbsOptimizedSupportUnsupported = "unsupported" + + // EbsOptimizedSupportSupported is a EbsOptimizedSupport enum value + EbsOptimizedSupportSupported = "supported" + + // EbsOptimizedSupportDefault is a EbsOptimizedSupport enum value + EbsOptimizedSupportDefault = "default" +) + +const ( + // ElasticGpuStateAttached is a ElasticGpuState enum value + ElasticGpuStateAttached = "ATTACHED" +) + +const ( + // ElasticGpuStatusOk is a ElasticGpuStatus enum value + ElasticGpuStatusOk = "OK" + + // ElasticGpuStatusImpaired is a ElasticGpuStatus enum value + ElasticGpuStatusImpaired = "IMPAIRED" +) + +const ( + // EnaSupportUnsupported is a EnaSupport enum value + EnaSupportUnsupported = "unsupported" + + // EnaSupportSupported is a EnaSupport enum value + EnaSupportSupported = "supported" + + // EnaSupportRequired is a EnaSupport enum value + EnaSupportRequired = "required" +) + +const ( + // EndDateTypeUnlimited is a EndDateType enum value + EndDateTypeUnlimited = "unlimited" + + // EndDateTypeLimited is a EndDateType enum value + EndDateTypeLimited = "limited" +) + const ( // EventCodeInstanceReboot is a EventCode enum value EventCodeInstanceReboot = "instance-reboot" @@ -52958,6 +99374,9 @@ const ( // EventTypeError is a EventType enum value EventTypeError = "error" + + // EventTypeInformation is a EventType enum value + EventTypeInformation = "information" ) const ( @@ -52993,12 +99412,96 @@ const ( ExportTaskStateCompleted = "completed" ) +const ( + // FastSnapshotRestoreStateCodeEnabling is a FastSnapshotRestoreStateCode enum value + FastSnapshotRestoreStateCodeEnabling = "enabling" + + // FastSnapshotRestoreStateCodeOptimizing is a FastSnapshotRestoreStateCode enum value + FastSnapshotRestoreStateCodeOptimizing = "optimizing" + + // FastSnapshotRestoreStateCodeEnabled is a FastSnapshotRestoreStateCode enum value + FastSnapshotRestoreStateCodeEnabled = "enabled" + + // FastSnapshotRestoreStateCodeDisabling is a FastSnapshotRestoreStateCode enum value + FastSnapshotRestoreStateCodeDisabling = "disabling" + + // FastSnapshotRestoreStateCodeDisabled is a FastSnapshotRestoreStateCode enum value + FastSnapshotRestoreStateCodeDisabled = "disabled" +) + +const ( + // FleetActivityStatusError is a FleetActivityStatus enum value + FleetActivityStatusError = "error" + + // FleetActivityStatusPendingFulfillment is a FleetActivityStatus enum value + FleetActivityStatusPendingFulfillment = "pending_fulfillment" + + // FleetActivityStatusPendingTermination is a FleetActivityStatus enum value + FleetActivityStatusPendingTermination = "pending_termination" + + // FleetActivityStatusFulfilled is a FleetActivityStatus enum value + FleetActivityStatusFulfilled = "fulfilled" +) + +const ( + // FleetEventTypeInstanceChange is a FleetEventType enum value + FleetEventTypeInstanceChange = "instance-change" + + // FleetEventTypeFleetChange is a FleetEventType enum value + FleetEventTypeFleetChange = "fleet-change" + + // FleetEventTypeServiceError is a FleetEventType enum value + FleetEventTypeServiceError = "service-error" +) + +const ( + // FleetExcessCapacityTerminationPolicyNoTermination is a FleetExcessCapacityTerminationPolicy enum value + FleetExcessCapacityTerminationPolicyNoTermination = "no-termination" + + // FleetExcessCapacityTerminationPolicyTermination is a FleetExcessCapacityTerminationPolicy enum value + FleetExcessCapacityTerminationPolicyTermination = "termination" +) + +const ( + // FleetOnDemandAllocationStrategyLowestPrice is a FleetOnDemandAllocationStrategy enum value + FleetOnDemandAllocationStrategyLowestPrice = "lowest-price" + + // FleetOnDemandAllocationStrategyPrioritized is a FleetOnDemandAllocationStrategy enum value + FleetOnDemandAllocationStrategyPrioritized = "prioritized" +) + +const ( + // FleetStateCodeSubmitted is a FleetStateCode enum value + FleetStateCodeSubmitted = "submitted" + + // FleetStateCodeActive is a FleetStateCode enum value + FleetStateCodeActive = "active" + + // FleetStateCodeDeleted is a FleetStateCode enum value + FleetStateCodeDeleted = "deleted" + + // FleetStateCodeFailed is a FleetStateCode enum value + FleetStateCodeFailed = "failed" + + // FleetStateCodeDeletedRunning is a FleetStateCode enum value + FleetStateCodeDeletedRunning = "deleted_running" + + // FleetStateCodeDeletedTerminating is a FleetStateCode enum value + FleetStateCodeDeletedTerminating = "deleted_terminating" + + // FleetStateCodeModifying is a FleetStateCode enum value + FleetStateCodeModifying = "modifying" +) + const ( // FleetTypeRequest is a FleetType enum value FleetTypeRequest = "request" // FleetTypeMaintain is a FleetType enum value FleetTypeMaintain = "maintain" + + // FleetTypeInstant is a FleetType enum value + FleetTypeInstant = "instant" ) const ( @@ -53012,11 +99515,47 @@ const ( FlowLogsResourceTypeNetworkInterface = "NetworkInterface" ) +const ( + // FpgaImageAttributeNameDescription is a FpgaImageAttributeName enum value + FpgaImageAttributeNameDescription = "description" + + // FpgaImageAttributeNameName is a FpgaImageAttributeName enum value + FpgaImageAttributeNameName = "name" + + // FpgaImageAttributeNameLoadPermission is a FpgaImageAttributeName enum value + FpgaImageAttributeNameLoadPermission = "loadPermission" + + // FpgaImageAttributeNameProductCodes is a FpgaImageAttributeName enum value + FpgaImageAttributeNameProductCodes = "productCodes" +) + +const ( + // FpgaImageStateCodePending is a FpgaImageStateCode enum value + FpgaImageStateCodePending = "pending" + + // FpgaImageStateCodeFailed is a FpgaImageStateCode enum value + FpgaImageStateCodeFailed = "failed" + + // FpgaImageStateCodeAvailable is a FpgaImageStateCode enum value + FpgaImageStateCodeAvailable = "available" + + // FpgaImageStateCodeUnavailable is a FpgaImageStateCode enum value + FpgaImageStateCodeUnavailable = "unavailable" +) + const ( // GatewayTypeIpsec1 is a GatewayType enum value GatewayTypeIpsec1 = "ipsec.1" ) +const ( + // HostRecoveryOn is a HostRecovery enum value + HostRecoveryOn = "on" + + // HostRecoveryOff is a HostRecovery enum value + HostRecoveryOff = "off" +) + const ( // HostTenancyDedicated is a HostTenancy enum value HostTenancyDedicated = "dedicated" @@ -53025,6 +99564,14 @@ const ( HostTenancyHost = "host" ) +const ( + // HttpTokensStateOptional is a HttpTokensState enum value + HttpTokensStateOptional = "optional" + + // HttpTokensStateRequired is a HttpTokensState enum value + HttpTokensStateRequired = "required" +) + const ( // HypervisorTypeOvm is a HypervisorType enum value HypervisorTypeOvm = "ovm" @@ -53156,6 +99703,25 @@ const ( InstanceHealthStatusUnhealthy = "unhealthy" ) +const ( + // InstanceInterruptionBehaviorHibernate is a InstanceInterruptionBehavior enum value + InstanceInterruptionBehaviorHibernate = "hibernate" + + // InstanceInterruptionBehaviorStop is a InstanceInterruptionBehavior enum value + InstanceInterruptionBehaviorStop = "stop" + + // InstanceInterruptionBehaviorTerminate is a InstanceInterruptionBehavior enum value + InstanceInterruptionBehaviorTerminate = "terminate" +) + +const ( + // InstanceLifecycleSpot is a InstanceLifecycle enum value + InstanceLifecycleSpot = "spot" + + // InstanceLifecycleOnDemand is a InstanceLifecycle enum value + InstanceLifecycleOnDemand = "on-demand" +) + const ( // InstanceLifecycleTypeSpot is a InstanceLifecycleType enum value InstanceLifecycleTypeSpot = "spot" @@ -53164,6 +99730,30 @@ const ( InstanceLifecycleTypeScheduled = "scheduled" ) +const ( + // InstanceMatchCriteriaOpen is a InstanceMatchCriteria enum value + InstanceMatchCriteriaOpen = "open" + + // InstanceMatchCriteriaTargeted is a InstanceMatchCriteria enum value + InstanceMatchCriteriaTargeted = "targeted" +) + +const ( + // InstanceMetadataEndpointStateDisabled is a InstanceMetadataEndpointState enum value + InstanceMetadataEndpointStateDisabled = "disabled" + + // InstanceMetadataEndpointStateEnabled is a InstanceMetadataEndpointState enum value + InstanceMetadataEndpointStateEnabled = "enabled" +) + +const ( + // InstanceMetadataOptionsStatePending is a InstanceMetadataOptionsState enum value + InstanceMetadataOptionsStatePending = "pending" + + // InstanceMetadataOptionsStateApplied is a InstanceMetadataOptionsState enum value + InstanceMetadataOptionsStateApplied = "applied" +) + const ( // InstanceStateNamePending is a InstanceStateName enum value InstanceStateNamePending = "pending" @@ -53209,6 +99799,48 @@ const ( // InstanceTypeT22xlarge is a InstanceType enum value InstanceTypeT22xlarge = "t2.2xlarge" + // InstanceTypeT3Nano is a InstanceType enum value + InstanceTypeT3Nano = "t3.nano" + + // InstanceTypeT3Micro is a InstanceType enum value + InstanceTypeT3Micro = "t3.micro" + + // InstanceTypeT3Small is a InstanceType enum value + InstanceTypeT3Small = "t3.small" + + // InstanceTypeT3Medium is a InstanceType enum value + InstanceTypeT3Medium = "t3.medium" + + // InstanceTypeT3Large is a InstanceType enum value + InstanceTypeT3Large = "t3.large" + + // InstanceTypeT3Xlarge is a InstanceType enum value + InstanceTypeT3Xlarge = "t3.xlarge" + + // InstanceTypeT32xlarge is a InstanceType enum value + InstanceTypeT32xlarge = "t3.2xlarge" + + // InstanceTypeT3aNano is a InstanceType enum value + InstanceTypeT3aNano = "t3a.nano" + + // InstanceTypeT3aMicro is a InstanceType enum value + InstanceTypeT3aMicro = "t3a.micro" + + // InstanceTypeT3aSmall is a InstanceType enum value + InstanceTypeT3aSmall = "t3a.small" + + // InstanceTypeT3aMedium is a InstanceType enum value + InstanceTypeT3aMedium = "t3a.medium" + + // InstanceTypeT3aLarge is a InstanceType enum value + InstanceTypeT3aLarge = "t3a.large" + + // InstanceTypeT3aXlarge is a InstanceType enum value + InstanceTypeT3aXlarge = "t3a.xlarge" + + // InstanceTypeT3a2xlarge is a InstanceType enum value + InstanceTypeT3a2xlarge = "t3a.2xlarge" + // InstanceTypeM1Small is a InstanceType enum value InstanceTypeM1Small = "m1.small" @@ -53296,12 +99928,132 @@ const ( // InstanceTypeR416xlarge is a InstanceType enum value InstanceTypeR416xlarge = "r4.16xlarge" + // InstanceTypeR5Large is a InstanceType enum value + InstanceTypeR5Large = "r5.large" + + // InstanceTypeR5Xlarge is a InstanceType enum value + InstanceTypeR5Xlarge = "r5.xlarge" + + // InstanceTypeR52xlarge is a InstanceType enum value + InstanceTypeR52xlarge = "r5.2xlarge" + + // InstanceTypeR54xlarge is a InstanceType enum value + InstanceTypeR54xlarge = "r5.4xlarge" + + // InstanceTypeR58xlarge is a InstanceType enum value + InstanceTypeR58xlarge = "r5.8xlarge" + + // InstanceTypeR512xlarge is a InstanceType enum value + InstanceTypeR512xlarge = "r5.12xlarge" + + // InstanceTypeR516xlarge is a InstanceType enum value + InstanceTypeR516xlarge = "r5.16xlarge" + + // InstanceTypeR524xlarge is a InstanceType enum value + InstanceTypeR524xlarge = "r5.24xlarge" + + // InstanceTypeR5Metal is a InstanceType enum value + InstanceTypeR5Metal = "r5.metal" + + // InstanceTypeR5aLarge is a InstanceType enum value + InstanceTypeR5aLarge = "r5a.large" + + // InstanceTypeR5aXlarge is a InstanceType enum value + InstanceTypeR5aXlarge = "r5a.xlarge" + + // InstanceTypeR5a2xlarge is a InstanceType enum value + InstanceTypeR5a2xlarge = "r5a.2xlarge" + + // InstanceTypeR5a4xlarge is a InstanceType enum value + InstanceTypeR5a4xlarge = "r5a.4xlarge" + + // InstanceTypeR5a8xlarge is a InstanceType enum value + InstanceTypeR5a8xlarge = "r5a.8xlarge" + + // InstanceTypeR5a12xlarge is a InstanceType enum value + InstanceTypeR5a12xlarge = "r5a.12xlarge" + + // InstanceTypeR5a16xlarge is a InstanceType enum value + InstanceTypeR5a16xlarge = "r5a.16xlarge" + + // InstanceTypeR5a24xlarge is a InstanceType enum value + InstanceTypeR5a24xlarge = "r5a.24xlarge" + + // InstanceTypeR5dLarge is a InstanceType enum value + InstanceTypeR5dLarge = "r5d.large" + + // InstanceTypeR5dXlarge is a InstanceType enum value + InstanceTypeR5dXlarge = "r5d.xlarge" + + // InstanceTypeR5d2xlarge is a InstanceType enum value + InstanceTypeR5d2xlarge = "r5d.2xlarge" + + // InstanceTypeR5d4xlarge is a InstanceType enum value + InstanceTypeR5d4xlarge = "r5d.4xlarge" + + // InstanceTypeR5d8xlarge is a InstanceType enum value + InstanceTypeR5d8xlarge = "r5d.8xlarge" + + // InstanceTypeR5d12xlarge is a InstanceType enum value + InstanceTypeR5d12xlarge = "r5d.12xlarge" + + // InstanceTypeR5d16xlarge is a InstanceType enum value + InstanceTypeR5d16xlarge = "r5d.16xlarge" + + // InstanceTypeR5d24xlarge is a InstanceType enum value + InstanceTypeR5d24xlarge = "r5d.24xlarge" + + // InstanceTypeR5dMetal is a InstanceType enum value + InstanceTypeR5dMetal = "r5d.metal" + + // InstanceTypeR5adLarge is a InstanceType enum value + InstanceTypeR5adLarge = "r5ad.large" + + // InstanceTypeR5adXlarge is a InstanceType enum value + InstanceTypeR5adXlarge = "r5ad.xlarge" + + // InstanceTypeR5ad2xlarge is a InstanceType enum value + InstanceTypeR5ad2xlarge = "r5ad.2xlarge" + + // InstanceTypeR5ad4xlarge is a InstanceType enum value + InstanceTypeR5ad4xlarge = "r5ad.4xlarge" + + // InstanceTypeR5ad8xlarge is a InstanceType enum value + InstanceTypeR5ad8xlarge = "r5ad.8xlarge" + + // InstanceTypeR5ad12xlarge is a InstanceType enum value + InstanceTypeR5ad12xlarge = "r5ad.12xlarge" + + // InstanceTypeR5ad16xlarge is a InstanceType enum value + InstanceTypeR5ad16xlarge = "r5ad.16xlarge" + + // InstanceTypeR5ad24xlarge is a InstanceType enum value + InstanceTypeR5ad24xlarge = "r5ad.24xlarge" + // InstanceTypeX116xlarge is a InstanceType enum value InstanceTypeX116xlarge = "x1.16xlarge" // InstanceTypeX132xlarge is a InstanceType enum value InstanceTypeX132xlarge = "x1.32xlarge" + // InstanceTypeX1eXlarge is a InstanceType enum value + InstanceTypeX1eXlarge = "x1e.xlarge" + + // InstanceTypeX1e2xlarge is a InstanceType enum value + InstanceTypeX1e2xlarge = "x1e.2xlarge" + + // InstanceTypeX1e4xlarge is a InstanceType enum value + InstanceTypeX1e4xlarge = "x1e.4xlarge" + + // InstanceTypeX1e8xlarge is a InstanceType enum value + InstanceTypeX1e8xlarge = "x1e.8xlarge" + + // InstanceTypeX1e16xlarge is a InstanceType enum value + InstanceTypeX1e16xlarge = "x1e.16xlarge" + + // InstanceTypeX1e32xlarge is a InstanceType enum value + InstanceTypeX1e32xlarge = "x1e.32xlarge" + // InstanceTypeI2Xlarge is a InstanceType enum value InstanceTypeI2Xlarge = "i2.xlarge" @@ -53314,6 +100066,51 @@ const ( // InstanceTypeI28xlarge is a InstanceType enum value InstanceTypeI28xlarge = "i2.8xlarge" + // InstanceTypeI3Large is a InstanceType enum value + InstanceTypeI3Large = "i3.large" + + // InstanceTypeI3Xlarge is a InstanceType enum value + InstanceTypeI3Xlarge = "i3.xlarge" + + // InstanceTypeI32xlarge is a InstanceType enum value + InstanceTypeI32xlarge = "i3.2xlarge" + + // InstanceTypeI34xlarge is a InstanceType enum value + InstanceTypeI34xlarge = "i3.4xlarge" + + // InstanceTypeI38xlarge is a InstanceType enum value + InstanceTypeI38xlarge = "i3.8xlarge" + + // InstanceTypeI316xlarge is a InstanceType enum value + InstanceTypeI316xlarge = "i3.16xlarge" + + // InstanceTypeI3Metal is a InstanceType enum value + InstanceTypeI3Metal = "i3.metal" + + // InstanceTypeI3enLarge is a InstanceType enum value + InstanceTypeI3enLarge = "i3en.large" + + // InstanceTypeI3enXlarge is a InstanceType enum value + InstanceTypeI3enXlarge = "i3en.xlarge" + + // InstanceTypeI3en2xlarge is a InstanceType enum value + InstanceTypeI3en2xlarge = "i3en.2xlarge" + + // InstanceTypeI3en3xlarge is a InstanceType enum value + InstanceTypeI3en3xlarge = "i3en.3xlarge" + + // InstanceTypeI3en6xlarge is a InstanceType enum value + InstanceTypeI3en6xlarge = "i3en.6xlarge" + + // InstanceTypeI3en12xlarge is a InstanceType enum value + InstanceTypeI3en12xlarge = "i3en.12xlarge" + + // InstanceTypeI3en24xlarge is a InstanceType enum value + InstanceTypeI3en24xlarge = "i3en.24xlarge" + + // InstanceTypeI3enMetal is a InstanceType enum value + InstanceTypeI3enMetal = "i3en.metal" + // InstanceTypeHi14xlarge is a InstanceType enum value InstanceTypeHi14xlarge = "hi1.4xlarge" @@ -53356,6 +100153,78 @@ const ( // InstanceTypeC48xlarge is a InstanceType enum value InstanceTypeC48xlarge = "c4.8xlarge" + // InstanceTypeC5Large is a InstanceType enum value + InstanceTypeC5Large = "c5.large" + + // InstanceTypeC5Xlarge is a InstanceType enum value + InstanceTypeC5Xlarge = "c5.xlarge" + + // InstanceTypeC52xlarge is a InstanceType enum value + InstanceTypeC52xlarge = "c5.2xlarge" + + // InstanceTypeC54xlarge is a InstanceType enum value + InstanceTypeC54xlarge = "c5.4xlarge" + + // InstanceTypeC59xlarge is a InstanceType enum value + InstanceTypeC59xlarge = "c5.9xlarge" + + // InstanceTypeC512xlarge is a InstanceType enum value + InstanceTypeC512xlarge = "c5.12xlarge" + + // InstanceTypeC518xlarge is a InstanceType enum value + InstanceTypeC518xlarge = "c5.18xlarge" + + // InstanceTypeC524xlarge is a InstanceType enum value + InstanceTypeC524xlarge = "c5.24xlarge" + + // InstanceTypeC5Metal is a InstanceType enum value + InstanceTypeC5Metal = "c5.metal" + + // InstanceTypeC5dLarge is a InstanceType enum value + InstanceTypeC5dLarge = "c5d.large" + + // InstanceTypeC5dXlarge is a InstanceType enum value + InstanceTypeC5dXlarge = "c5d.xlarge" + + // InstanceTypeC5d2xlarge is a InstanceType enum value + InstanceTypeC5d2xlarge = "c5d.2xlarge" + + // InstanceTypeC5d4xlarge is a InstanceType enum value + InstanceTypeC5d4xlarge = "c5d.4xlarge" + + // InstanceTypeC5d9xlarge is a InstanceType enum value + InstanceTypeC5d9xlarge = "c5d.9xlarge" + + // InstanceTypeC5d12xlarge is a InstanceType enum value + InstanceTypeC5d12xlarge = "c5d.12xlarge" + + // InstanceTypeC5d18xlarge is a InstanceType enum value + InstanceTypeC5d18xlarge = "c5d.18xlarge" + + // InstanceTypeC5d24xlarge is a InstanceType enum value + InstanceTypeC5d24xlarge = "c5d.24xlarge" + + // InstanceTypeC5dMetal is a InstanceType enum value + InstanceTypeC5dMetal = "c5d.metal" + + // InstanceTypeC5nLarge is a InstanceType enum value + InstanceTypeC5nLarge = "c5n.large" + + // InstanceTypeC5nXlarge is a InstanceType enum value + InstanceTypeC5nXlarge = "c5n.xlarge" + + // InstanceTypeC5n2xlarge is a InstanceType enum value + InstanceTypeC5n2xlarge = "c5n.2xlarge" + + // InstanceTypeC5n4xlarge is a InstanceType enum value + InstanceTypeC5n4xlarge = "c5n.4xlarge" + + // InstanceTypeC5n9xlarge is a InstanceType enum value + InstanceTypeC5n9xlarge = "c5n.9xlarge" + + // InstanceTypeC5n18xlarge is a InstanceType enum value + InstanceTypeC5n18xlarge = "c5n.18xlarge" + // InstanceTypeCc14xlarge is a InstanceType enum value InstanceTypeCc14xlarge = "cc1.4xlarge" @@ -53368,6 +100237,36 @@ const ( // InstanceTypeG28xlarge is a InstanceType enum value InstanceTypeG28xlarge = "g2.8xlarge" + // InstanceTypeG34xlarge is a InstanceType enum value + InstanceTypeG34xlarge = "g3.4xlarge" + + // InstanceTypeG38xlarge is a InstanceType enum value + InstanceTypeG38xlarge = "g3.8xlarge" + + // InstanceTypeG316xlarge is a InstanceType enum value + InstanceTypeG316xlarge = "g3.16xlarge" + + // InstanceTypeG3sXlarge is a InstanceType enum value + InstanceTypeG3sXlarge = "g3s.xlarge" + + // InstanceTypeG4dnXlarge is a InstanceType enum value + InstanceTypeG4dnXlarge = "g4dn.xlarge" + + // InstanceTypeG4dn2xlarge is a InstanceType enum value + InstanceTypeG4dn2xlarge = "g4dn.2xlarge" + + // InstanceTypeG4dn4xlarge is a InstanceType enum value + InstanceTypeG4dn4xlarge = "g4dn.4xlarge" + + // InstanceTypeG4dn8xlarge is a InstanceType enum value + InstanceTypeG4dn8xlarge = "g4dn.8xlarge" + + // InstanceTypeG4dn12xlarge is a InstanceType enum value + InstanceTypeG4dn12xlarge = "g4dn.12xlarge" + + // InstanceTypeG4dn16xlarge is a InstanceType enum value + InstanceTypeG4dn16xlarge = "g4dn.16xlarge" + // InstanceTypeCg14xlarge is a InstanceType enum value InstanceTypeCg14xlarge = "cg1.4xlarge" @@ -53380,6 +100279,18 @@ const ( // InstanceTypeP216xlarge is a InstanceType enum value InstanceTypeP216xlarge = "p2.16xlarge" + // InstanceTypeP32xlarge is a InstanceType enum value + InstanceTypeP32xlarge = "p3.2xlarge" + + // InstanceTypeP38xlarge is a InstanceType enum value + InstanceTypeP38xlarge = "p3.8xlarge" + + // InstanceTypeP316xlarge is a InstanceType enum value + InstanceTypeP316xlarge = "p3.16xlarge" + + // InstanceTypeP3dn24xlarge is a InstanceType enum value + InstanceTypeP3dn24xlarge = "p3dn.24xlarge" + // InstanceTypeD2Xlarge is a InstanceType enum value InstanceTypeD2Xlarge = "d2.xlarge" @@ -53395,8 +100306,319 @@ const ( // InstanceTypeF12xlarge is a InstanceType enum value InstanceTypeF12xlarge = "f1.2xlarge" + // InstanceTypeF14xlarge is a InstanceType enum value + InstanceTypeF14xlarge = "f1.4xlarge" + // InstanceTypeF116xlarge is a InstanceType enum value InstanceTypeF116xlarge = "f1.16xlarge" + + // InstanceTypeM5Large is a InstanceType enum value + InstanceTypeM5Large = "m5.large" + + // InstanceTypeM5Xlarge is a InstanceType enum value + InstanceTypeM5Xlarge = "m5.xlarge" + + // InstanceTypeM52xlarge is a InstanceType enum value + InstanceTypeM52xlarge = "m5.2xlarge" + + // InstanceTypeM54xlarge is a InstanceType enum value + InstanceTypeM54xlarge = "m5.4xlarge" + + // InstanceTypeM58xlarge is a InstanceType enum value + InstanceTypeM58xlarge = "m5.8xlarge" + + // InstanceTypeM512xlarge is a InstanceType enum value + InstanceTypeM512xlarge = "m5.12xlarge" + + // InstanceTypeM516xlarge is a InstanceType enum value + InstanceTypeM516xlarge = "m5.16xlarge" + + // InstanceTypeM524xlarge is a InstanceType enum value + InstanceTypeM524xlarge = "m5.24xlarge" + + // InstanceTypeM5Metal is a InstanceType enum value + InstanceTypeM5Metal = "m5.metal" + + // InstanceTypeM5aLarge is a InstanceType enum value + InstanceTypeM5aLarge = "m5a.large" + + // InstanceTypeM5aXlarge is a InstanceType enum value + InstanceTypeM5aXlarge = "m5a.xlarge" + + // InstanceTypeM5a2xlarge is a InstanceType enum value + InstanceTypeM5a2xlarge = "m5a.2xlarge" + + // InstanceTypeM5a4xlarge is a InstanceType enum value + InstanceTypeM5a4xlarge = "m5a.4xlarge" + + // InstanceTypeM5a8xlarge is a InstanceType enum value + InstanceTypeM5a8xlarge = "m5a.8xlarge" + + // InstanceTypeM5a12xlarge is a InstanceType enum value + InstanceTypeM5a12xlarge = "m5a.12xlarge" + + // InstanceTypeM5a16xlarge is a InstanceType enum value + InstanceTypeM5a16xlarge = "m5a.16xlarge" + + // InstanceTypeM5a24xlarge is a InstanceType enum value + InstanceTypeM5a24xlarge = "m5a.24xlarge" + + // InstanceTypeM5dLarge is a InstanceType enum value + InstanceTypeM5dLarge = "m5d.large" + + // InstanceTypeM5dXlarge is a InstanceType enum value + InstanceTypeM5dXlarge = "m5d.xlarge" + + // InstanceTypeM5d2xlarge is a InstanceType enum value + InstanceTypeM5d2xlarge = "m5d.2xlarge" + + // InstanceTypeM5d4xlarge is a InstanceType enum value + InstanceTypeM5d4xlarge = "m5d.4xlarge" + + // InstanceTypeM5d8xlarge is a InstanceType enum value + InstanceTypeM5d8xlarge = "m5d.8xlarge" + + // InstanceTypeM5d12xlarge is a InstanceType enum value + InstanceTypeM5d12xlarge = "m5d.12xlarge" + + // InstanceTypeM5d16xlarge is a InstanceType enum value + InstanceTypeM5d16xlarge = "m5d.16xlarge" + + // InstanceTypeM5d24xlarge is a InstanceType enum value + InstanceTypeM5d24xlarge = "m5d.24xlarge" + + // InstanceTypeM5dMetal is a InstanceType enum value + InstanceTypeM5dMetal = "m5d.metal" + + // InstanceTypeM5adLarge is a InstanceType enum value + InstanceTypeM5adLarge = "m5ad.large" + + // InstanceTypeM5adXlarge is a InstanceType enum value + InstanceTypeM5adXlarge = "m5ad.xlarge" + + // InstanceTypeM5ad2xlarge is a InstanceType enum value + InstanceTypeM5ad2xlarge = "m5ad.2xlarge" + + // InstanceTypeM5ad4xlarge is a InstanceType enum value + InstanceTypeM5ad4xlarge = "m5ad.4xlarge" + + // InstanceTypeM5ad8xlarge is a InstanceType enum value + InstanceTypeM5ad8xlarge = "m5ad.8xlarge" + + // InstanceTypeM5ad12xlarge is a InstanceType enum value + InstanceTypeM5ad12xlarge = "m5ad.12xlarge" + + // InstanceTypeM5ad16xlarge is a InstanceType enum value + InstanceTypeM5ad16xlarge = "m5ad.16xlarge" + + // InstanceTypeM5ad24xlarge is a InstanceType enum value + InstanceTypeM5ad24xlarge = "m5ad.24xlarge" + + // InstanceTypeH12xlarge is a InstanceType enum value + InstanceTypeH12xlarge = "h1.2xlarge" + + // InstanceTypeH14xlarge is a InstanceType enum value + InstanceTypeH14xlarge = "h1.4xlarge" + + // InstanceTypeH18xlarge is a InstanceType enum value + InstanceTypeH18xlarge = "h1.8xlarge" + + // InstanceTypeH116xlarge is a InstanceType enum value + InstanceTypeH116xlarge = "h1.16xlarge" + + // InstanceTypeZ1dLarge is a InstanceType enum value + InstanceTypeZ1dLarge = "z1d.large" + + // InstanceTypeZ1dXlarge is a InstanceType enum value + InstanceTypeZ1dXlarge = "z1d.xlarge" + + // InstanceTypeZ1d2xlarge is a InstanceType enum value + InstanceTypeZ1d2xlarge = "z1d.2xlarge" + + // InstanceTypeZ1d3xlarge is a InstanceType enum value + InstanceTypeZ1d3xlarge = "z1d.3xlarge" + + // InstanceTypeZ1d6xlarge is a InstanceType enum value + InstanceTypeZ1d6xlarge = "z1d.6xlarge" + + // InstanceTypeZ1d12xlarge is a InstanceType enum value + InstanceTypeZ1d12xlarge = "z1d.12xlarge" + + // InstanceTypeZ1dMetal is a InstanceType enum value + InstanceTypeZ1dMetal = "z1d.metal" + + // InstanceTypeU6tb1Metal is a InstanceType enum value + InstanceTypeU6tb1Metal = "u-6tb1.metal" + + // InstanceTypeU9tb1Metal is a InstanceType enum value + InstanceTypeU9tb1Metal = "u-9tb1.metal" + + // InstanceTypeU12tb1Metal is a InstanceType enum value + InstanceTypeU12tb1Metal = "u-12tb1.metal" + + // InstanceTypeU18tb1Metal is a InstanceType enum value + InstanceTypeU18tb1Metal = "u-18tb1.metal" + + // InstanceTypeU24tb1Metal is a InstanceType enum value + InstanceTypeU24tb1Metal = "u-24tb1.metal" + + // InstanceTypeA1Medium is a InstanceType enum value + InstanceTypeA1Medium = "a1.medium" + + // InstanceTypeA1Large is a InstanceType enum value + InstanceTypeA1Large = "a1.large" + + // InstanceTypeA1Xlarge is a InstanceType enum value + InstanceTypeA1Xlarge = "a1.xlarge" + + // InstanceTypeA12xlarge is a InstanceType enum value + InstanceTypeA12xlarge = "a1.2xlarge" + + // InstanceTypeA14xlarge is a InstanceType enum value + InstanceTypeA14xlarge = "a1.4xlarge" + + // InstanceTypeA1Metal is a InstanceType enum value + InstanceTypeA1Metal = "a1.metal" + + // InstanceTypeM5dnLarge is a InstanceType enum value + InstanceTypeM5dnLarge = "m5dn.large" + + // InstanceTypeM5dnXlarge is a InstanceType enum value + InstanceTypeM5dnXlarge = "m5dn.xlarge" + + // InstanceTypeM5dn2xlarge is a InstanceType enum value + InstanceTypeM5dn2xlarge = "m5dn.2xlarge" + + // InstanceTypeM5dn4xlarge is a InstanceType enum value + InstanceTypeM5dn4xlarge = "m5dn.4xlarge" + + // InstanceTypeM5dn8xlarge is a InstanceType enum value + InstanceTypeM5dn8xlarge = "m5dn.8xlarge" + + // InstanceTypeM5dn12xlarge is a InstanceType enum value + InstanceTypeM5dn12xlarge = "m5dn.12xlarge" + + // InstanceTypeM5dn16xlarge is a InstanceType enum value + InstanceTypeM5dn16xlarge = "m5dn.16xlarge" + + // InstanceTypeM5dn24xlarge is a InstanceType enum value + InstanceTypeM5dn24xlarge = "m5dn.24xlarge" + + // InstanceTypeM5nLarge is a InstanceType enum value + InstanceTypeM5nLarge = "m5n.large" + + // InstanceTypeM5nXlarge is a InstanceType enum value + InstanceTypeM5nXlarge = "m5n.xlarge" + + // InstanceTypeM5n2xlarge is a InstanceType enum value + InstanceTypeM5n2xlarge = "m5n.2xlarge" + + // InstanceTypeM5n4xlarge is a InstanceType enum value + InstanceTypeM5n4xlarge = "m5n.4xlarge" + + // InstanceTypeM5n8xlarge is a InstanceType enum value + InstanceTypeM5n8xlarge = "m5n.8xlarge" + + // InstanceTypeM5n12xlarge is a InstanceType enum value + InstanceTypeM5n12xlarge = "m5n.12xlarge" + + // InstanceTypeM5n16xlarge is a InstanceType enum value + InstanceTypeM5n16xlarge = "m5n.16xlarge" + + // InstanceTypeM5n24xlarge is a InstanceType enum value + InstanceTypeM5n24xlarge = "m5n.24xlarge" + + // InstanceTypeR5dnLarge is a InstanceType enum value + InstanceTypeR5dnLarge = "r5dn.large" + + // InstanceTypeR5dnXlarge is a InstanceType enum value + InstanceTypeR5dnXlarge = "r5dn.xlarge" + + // InstanceTypeR5dn2xlarge is a InstanceType enum value + InstanceTypeR5dn2xlarge = "r5dn.2xlarge" + + // InstanceTypeR5dn4xlarge is a InstanceType enum value + InstanceTypeR5dn4xlarge = "r5dn.4xlarge" + + // InstanceTypeR5dn8xlarge is a InstanceType enum value + InstanceTypeR5dn8xlarge = "r5dn.8xlarge" + + // InstanceTypeR5dn12xlarge is a InstanceType enum value + InstanceTypeR5dn12xlarge = "r5dn.12xlarge" + + // InstanceTypeR5dn16xlarge is a InstanceType enum value + InstanceTypeR5dn16xlarge = "r5dn.16xlarge" + + // InstanceTypeR5dn24xlarge is a InstanceType enum value + InstanceTypeR5dn24xlarge = "r5dn.24xlarge" + + // InstanceTypeR5nLarge is a InstanceType enum value + InstanceTypeR5nLarge = "r5n.large" + + // InstanceTypeR5nXlarge is a InstanceType enum value + InstanceTypeR5nXlarge = "r5n.xlarge" + + // InstanceTypeR5n2xlarge is a InstanceType enum value + InstanceTypeR5n2xlarge = "r5n.2xlarge" + + // InstanceTypeR5n4xlarge is a InstanceType enum value + InstanceTypeR5n4xlarge = "r5n.4xlarge" + + // InstanceTypeR5n8xlarge is a InstanceType enum value + InstanceTypeR5n8xlarge = "r5n.8xlarge" + + // InstanceTypeR5n12xlarge is a InstanceType enum value + InstanceTypeR5n12xlarge = "r5n.12xlarge" + + // InstanceTypeR5n16xlarge is a InstanceType enum value + InstanceTypeR5n16xlarge = "r5n.16xlarge" + + // InstanceTypeR5n24xlarge is a InstanceType enum value + InstanceTypeR5n24xlarge = "r5n.24xlarge" +) + +const ( + // InstanceTypeHypervisorNitro is a InstanceTypeHypervisor enum value + InstanceTypeHypervisorNitro = "nitro" + + // InstanceTypeHypervisorXen is a InstanceTypeHypervisor enum value + InstanceTypeHypervisorXen = "xen" +) + +const ( + // InterfacePermissionTypeInstanceAttach is a InterfacePermissionType enum value + InterfacePermissionTypeInstanceAttach = "INSTANCE-ATTACH" + + // InterfacePermissionTypeEipAssociate is a InterfacePermissionType enum value + InterfacePermissionTypeEipAssociate = "EIP-ASSOCIATE" +) + +const ( + // Ipv6SupportValueEnable is a Ipv6SupportValue enum value + Ipv6SupportValueEnable = "enable" + + // Ipv6SupportValueDisable is a Ipv6SupportValue enum value + Ipv6SupportValueDisable = "disable" +) + +const ( + // LaunchTemplateErrorCodeLaunchTemplateIdDoesNotExist is a LaunchTemplateErrorCode enum value + LaunchTemplateErrorCodeLaunchTemplateIdDoesNotExist = "launchTemplateIdDoesNotExist" + + // LaunchTemplateErrorCodeLaunchTemplateIdMalformed is a LaunchTemplateErrorCode enum value + LaunchTemplateErrorCodeLaunchTemplateIdMalformed = "launchTemplateIdMalformed" + + // LaunchTemplateErrorCodeLaunchTemplateNameDoesNotExist is a LaunchTemplateErrorCode enum value + LaunchTemplateErrorCodeLaunchTemplateNameDoesNotExist = "launchTemplateNameDoesNotExist" + + // LaunchTemplateErrorCodeLaunchTemplateNameMalformed is a LaunchTemplateErrorCode enum value + LaunchTemplateErrorCodeLaunchTemplateNameMalformed = "launchTemplateNameMalformed" + + // LaunchTemplateErrorCodeLaunchTemplateVersionDoesNotExist is a LaunchTemplateErrorCode enum value + LaunchTemplateErrorCodeLaunchTemplateVersionDoesNotExist = "launchTemplateVersionDoesNotExist" + + // LaunchTemplateErrorCodeUnexpectedError is a LaunchTemplateErrorCode enum value + LaunchTemplateErrorCodeUnexpectedError = "unexpectedError" ) const ( @@ -53427,6 +100649,30 @@ const ( ListingStatusClosed = "closed" ) +const ( + // LocationTypeRegion is a LocationType enum value + LocationTypeRegion = "region" + + // LocationTypeAvailabilityZone is a LocationType enum value + LocationTypeAvailabilityZone = "availability-zone" + + // LocationTypeAvailabilityZoneId is a LocationType enum value + LocationTypeAvailabilityZoneId = "availability-zone-id" +) + +const ( + // LogDestinationTypeCloudWatchLogs is a LogDestinationType enum value + LogDestinationTypeCloudWatchLogs = "cloud-watch-logs" + + // LogDestinationTypeS3 is a LogDestinationType enum value + LogDestinationTypeS3 = "s3" +) + +const ( + // MarketTypeSpot is a MarketType enum value + MarketTypeSpot = "spot" +) + const ( // MonitoringStateDisabled is a MonitoringState enum value MonitoringStateDisabled = "disabled" @@ -53480,10 +100726,32 @@ const ( NetworkInterfaceAttributeAttachment = "attachment" ) +const ( + // NetworkInterfaceCreationTypeEfa is a NetworkInterfaceCreationType enum value + NetworkInterfaceCreationTypeEfa = "efa" +) + +const ( + // NetworkInterfacePermissionStateCodePending is a NetworkInterfacePermissionStateCode enum value + NetworkInterfacePermissionStateCodePending = "pending" + + // NetworkInterfacePermissionStateCodeGranted is a NetworkInterfacePermissionStateCode enum value + NetworkInterfacePermissionStateCodeGranted = "granted" + + // NetworkInterfacePermissionStateCodeRevoking is a NetworkInterfacePermissionStateCode enum value + NetworkInterfacePermissionStateCodeRevoking = "revoking" + + // NetworkInterfacePermissionStateCodeRevoked is a NetworkInterfacePermissionStateCode enum value + NetworkInterfacePermissionStateCodeRevoked = "revoked" +) + const ( // NetworkInterfaceStatusAvailable is a NetworkInterfaceStatus enum value NetworkInterfaceStatusAvailable = "available" + // NetworkInterfaceStatusAssociated is a NetworkInterfaceStatus enum value + NetworkInterfaceStatusAssociated = "associated" + // NetworkInterfaceStatusAttaching is a NetworkInterfaceStatus enum value NetworkInterfaceStatusAttaching = "attaching" @@ -53500,6 +100768,9 @@ const ( // NetworkInterfaceTypeNatGateway is a NetworkInterfaceType enum value NetworkInterfaceTypeNatGateway = "natGateway" + + // NetworkInterfaceTypeEfa is a NetworkInterfaceType enum value + NetworkInterfaceTypeEfa = "efa" ) const ( @@ -53530,6 +100801,14 @@ const ( OfferingTypeValuesAllUpfront = "All Upfront" ) +const ( + // OnDemandAllocationStrategyLowestPrice is a OnDemandAllocationStrategy enum value + OnDemandAllocationStrategyLowestPrice = "lowestPrice" + + // OnDemandAllocationStrategyPrioritized is a OnDemandAllocationStrategy enum value + OnDemandAllocationStrategyPrioritized = "prioritized" +) + const ( // OperationTypeAdd is a OperationType enum value OperationTypeAdd = "add" @@ -53568,9 +100847,26 @@ const ( PlacementGroupStateDeleted = "deleted" ) +const ( + // PlacementGroupStrategyCluster is a PlacementGroupStrategy enum value + PlacementGroupStrategyCluster = "cluster" + + // PlacementGroupStrategyPartition is a PlacementGroupStrategy enum value + PlacementGroupStrategyPartition = "partition" + + // PlacementGroupStrategySpread is a PlacementGroupStrategy enum value + PlacementGroupStrategySpread = "spread" +) + const ( // PlacementStrategyCluster is a PlacementStrategy enum value PlacementStrategyCluster = "cluster" + + // PlacementStrategySpread is a PlacementStrategy enum value + PlacementStrategySpread = "spread" + + // PlacementStrategyPartition is a PlacementStrategy enum value + PlacementStrategyPartition = "partition" ) const ( @@ -53578,6 +100874,26 @@ const ( PlatformValuesWindows = "Windows" ) +const ( + // PrincipalTypeAll is a PrincipalType enum value + PrincipalTypeAll = "All" + + // PrincipalTypeService is a PrincipalType enum value + PrincipalTypeService = "Service" + + // PrincipalTypeOrganizationUnit is a PrincipalType enum value + PrincipalTypeOrganizationUnit = "OrganizationUnit" + + // PrincipalTypeAccount is a PrincipalType enum value + PrincipalTypeAccount = "Account" + + // PrincipalTypeUser is a PrincipalType enum value + PrincipalTypeUser = "User" + + // PrincipalTypeRole is a PrincipalType enum value + PrincipalTypeRole = "Role" +) + const ( // ProductCodeValuesDevpay is a ProductCodeValues enum value ProductCodeValuesDevpay = "devpay" @@ -53668,6 +100984,17 @@ const ( // ReservedInstanceStateRetired is a ReservedInstanceState enum value ReservedInstanceStateRetired = "retired" + + // ReservedInstanceStateQueued is a ReservedInstanceState enum value + ReservedInstanceStateQueued = "queued" + + // ReservedInstanceStateQueuedDeleted is a ReservedInstanceState enum value + ReservedInstanceStateQueuedDeleted = "queued-deleted" +) + +const ( + // ResetFpgaImageAttributeNameLoadPermission is a ResetFpgaImageAttributeName enum value + ResetFpgaImageAttributeNameLoadPermission = "loadPermission" ) const ( @@ -53676,12 +101003,30 @@ const ( ) const ( + // ResourceTypeClientVpnEndpoint is a ResourceType enum value + ResourceTypeClientVpnEndpoint = "client-vpn-endpoint" + // ResourceTypeCustomerGateway is a ResourceType enum value ResourceTypeCustomerGateway = "customer-gateway" + // ResourceTypeDedicatedHost is a ResourceType enum value + ResourceTypeDedicatedHost = "dedicated-host" + // ResourceTypeDhcpOptions is a ResourceType enum value ResourceTypeDhcpOptions = "dhcp-options" + // ResourceTypeElasticIp is a ResourceType enum value + ResourceTypeElasticIp = "elastic-ip" + + // ResourceTypeFleet is a ResourceType enum value + ResourceTypeFleet = "fleet" + + // ResourceTypeFpgaImage is a ResourceType enum value + ResourceTypeFpgaImage = "fpga-image" + + // ResourceTypeHostReservation is a ResourceType enum value + ResourceTypeHostReservation = "host-reservation" + // ResourceTypeImage is a ResourceType enum value ResourceTypeImage = "image" @@ -53691,6 +101036,12 @@ const ( // ResourceTypeInternetGateway is a ResourceType enum value ResourceTypeInternetGateway = "internet-gateway" + // ResourceTypeLaunchTemplate is a ResourceType enum value + ResourceTypeLaunchTemplate = "launch-template" + + // ResourceTypeNatgateway is a ResourceType enum value + ResourceTypeNatgateway = "natgateway" + // ResourceTypeNetworkAcl is a ResourceType enum value ResourceTypeNetworkAcl = "network-acl" @@ -53703,6 +101054,9 @@ const ( // ResourceTypeRouteTable is a ResourceType enum value ResourceTypeRouteTable = "route-table" + // ResourceTypeSecurityGroup is a ResourceType enum value + ResourceTypeSecurityGroup = "security-group" + // ResourceTypeSnapshot is a ResourceType enum value ResourceTypeSnapshot = "snapshot" @@ -53712,8 +101066,23 @@ const ( // ResourceTypeSubnet is a ResourceType enum value ResourceTypeSubnet = "subnet" - // ResourceTypeSecurityGroup is a ResourceType enum value - ResourceTypeSecurityGroup = "security-group" + // ResourceTypeTrafficMirrorFilter is a ResourceType enum value + ResourceTypeTrafficMirrorFilter = "traffic-mirror-filter" + + // ResourceTypeTrafficMirrorSession is a ResourceType enum value + ResourceTypeTrafficMirrorSession = "traffic-mirror-session" + + // ResourceTypeTrafficMirrorTarget is a ResourceType enum value + ResourceTypeTrafficMirrorTarget = "traffic-mirror-target" + + // ResourceTypeTransitGateway is a ResourceType enum value + ResourceTypeTransitGateway = "transit-gateway" + + // ResourceTypeTransitGatewayAttachment is a ResourceType enum value + ResourceTypeTransitGatewayAttachment = "transit-gateway-attachment" + + // ResourceTypeTransitGatewayRouteTable is a ResourceType enum value + ResourceTypeTransitGatewayRouteTable = "transit-gateway-route-table" // ResourceTypeVolume is a ResourceType enum value ResourceTypeVolume = "volume" @@ -53721,6 +101090,9 @@ const ( // ResourceTypeVpc is a ResourceType enum value ResourceTypeVpc = "vpc" + // ResourceTypeVpcPeeringConnection is a ResourceType enum value + ResourceTypeVpcPeeringConnection = "vpc-peering-connection" + // ResourceTypeVpnConnection is a ResourceType enum value ResourceTypeVpnConnection = "vpn-connection" @@ -53728,6 +101100,14 @@ const ( ResourceTypeVpnGateway = "vpn-gateway" ) +const ( + // RootDeviceTypeEbs is a RootDeviceType enum value + RootDeviceTypeEbs = "ebs" + + // RootDeviceTypeInstanceStore is a RootDeviceType enum value + RootDeviceTypeInstanceStore = "instance-store" +) + const ( // RouteOriginCreateRouteTable is a RouteOrigin enum value RouteOriginCreateRouteTable = "CreateRouteTable" @@ -53755,6 +101135,31 @@ const ( RuleActionDeny = "deny" ) +const ( + // ServiceStatePending is a ServiceState enum value + ServiceStatePending = "Pending" + + // ServiceStateAvailable is a ServiceState enum value + ServiceStateAvailable = "Available" + + // ServiceStateDeleting is a ServiceState enum value + ServiceStateDeleting = "Deleting" + + // ServiceStateDeleted is a ServiceState enum value + ServiceStateDeleted = "Deleted" + + // ServiceStateFailed is a ServiceState enum value + ServiceStateFailed = "Failed" +) + +const ( + // ServiceTypeInterface is a ServiceType enum value + ServiceTypeInterface = "Interface" + + // ServiceTypeGateway is a ServiceType enum value + ServiceTypeGateway = "Gateway" +) + const ( // ShutdownBehaviorStop is a ShutdownBehavior enum value ShutdownBehaviorStop = "stop" @@ -53782,6 +101187,28 @@ const ( SnapshotStateError = "error" ) +const ( + // SpotAllocationStrategyLowestPrice is a SpotAllocationStrategy enum value + SpotAllocationStrategyLowestPrice = "lowest-price" + + // SpotAllocationStrategyDiversified is a SpotAllocationStrategy enum value + SpotAllocationStrategyDiversified = "diversified" + + // SpotAllocationStrategyCapacityOptimized is a SpotAllocationStrategy enum value + SpotAllocationStrategyCapacityOptimized = "capacity-optimized" +) + +const ( + // SpotInstanceInterruptionBehaviorHibernate is a SpotInstanceInterruptionBehavior enum value + SpotInstanceInterruptionBehaviorHibernate = "hibernate" + + // SpotInstanceInterruptionBehaviorStop is a SpotInstanceInterruptionBehavior enum value + SpotInstanceInterruptionBehaviorStop = "stop" + + // SpotInstanceInterruptionBehaviorTerminate is a SpotInstanceInterruptionBehavior enum value + SpotInstanceInterruptionBehaviorTerminate = "terminate" +) + const ( // SpotInstanceStateOpen is a SpotInstanceState enum value SpotInstanceStateOpen = "open" @@ -53808,6 +101235,9 @@ const ( ) const ( + // StatePendingAcceptance is a State enum value + StatePendingAcceptance = "PendingAcceptance" + // StatePending is a State enum value StatePending = "Pending" @@ -53819,6 +101249,15 @@ const ( // StateDeleted is a State enum value StateDeleted = "Deleted" + + // StateRejected is a State enum value + StateRejected = "Rejected" + + // StateFailed is a State enum value + StateFailed = "Failed" + + // StateExpired is a State enum value + StateExpired = "Expired" ) const ( @@ -53915,6 +101354,60 @@ const ( TenancyHost = "host" ) +const ( + // TrafficDirectionIngress is a TrafficDirection enum value + TrafficDirectionIngress = "ingress" + + // TrafficDirectionEgress is a TrafficDirection enum value + TrafficDirectionEgress = "egress" +) + +const ( + // TrafficMirrorFilterRuleFieldDestinationPortRange is a TrafficMirrorFilterRuleField enum value + TrafficMirrorFilterRuleFieldDestinationPortRange = "destination-port-range" + + // TrafficMirrorFilterRuleFieldSourcePortRange is a TrafficMirrorFilterRuleField enum value + TrafficMirrorFilterRuleFieldSourcePortRange = "source-port-range" + + // TrafficMirrorFilterRuleFieldProtocol is a TrafficMirrorFilterRuleField enum value + TrafficMirrorFilterRuleFieldProtocol = "protocol" + + // TrafficMirrorFilterRuleFieldDescription is a TrafficMirrorFilterRuleField enum value + TrafficMirrorFilterRuleFieldDescription = "description" +) + +const ( + // TrafficMirrorNetworkServiceAmazonDns is a TrafficMirrorNetworkService enum value + TrafficMirrorNetworkServiceAmazonDns = "amazon-dns" +) + +const ( + // TrafficMirrorRuleActionAccept is a TrafficMirrorRuleAction enum value + TrafficMirrorRuleActionAccept = "accept" + + // TrafficMirrorRuleActionReject is a TrafficMirrorRuleAction enum value + TrafficMirrorRuleActionReject = "reject" +) + +const ( + // TrafficMirrorSessionFieldPacketLength is a TrafficMirrorSessionField enum value + TrafficMirrorSessionFieldPacketLength = "packet-length" + + // TrafficMirrorSessionFieldDescription is a TrafficMirrorSessionField enum value + TrafficMirrorSessionFieldDescription = "description" + + // TrafficMirrorSessionFieldVirtualNetworkId is a TrafficMirrorSessionField enum value + TrafficMirrorSessionFieldVirtualNetworkId = "virtual-network-id" +) + +const ( + // TrafficMirrorTargetTypeNetworkInterface is a TrafficMirrorTargetType enum value + TrafficMirrorTargetTypeNetworkInterface = "network-interface" + + // TrafficMirrorTargetTypeNetworkLoadBalancer is a TrafficMirrorTargetType enum value + TrafficMirrorTargetTypeNetworkLoadBalancer = "network-load-balancer" +) + const ( // TrafficTypeAccept is a TrafficType enum value TrafficTypeAccept = "ACCEPT" @@ -53926,6 +101419,166 @@ const ( TrafficTypeAll = "ALL" ) +const ( + // TransitGatewayAssociationStateAssociating is a TransitGatewayAssociationState enum value + TransitGatewayAssociationStateAssociating = "associating" + + // TransitGatewayAssociationStateAssociated is a TransitGatewayAssociationState enum value + TransitGatewayAssociationStateAssociated = "associated" + + // TransitGatewayAssociationStateDisassociating is a TransitGatewayAssociationState enum value + TransitGatewayAssociationStateDisassociating = "disassociating" + + // TransitGatewayAssociationStateDisassociated is a TransitGatewayAssociationState enum value + TransitGatewayAssociationStateDisassociated = "disassociated" +) + +const ( + // TransitGatewayAttachmentResourceTypeVpc is a TransitGatewayAttachmentResourceType enum value + TransitGatewayAttachmentResourceTypeVpc = "vpc" + + // TransitGatewayAttachmentResourceTypeVpn is a TransitGatewayAttachmentResourceType enum value + TransitGatewayAttachmentResourceTypeVpn = "vpn" + + // TransitGatewayAttachmentResourceTypeDirectConnectGateway is a TransitGatewayAttachmentResourceType enum value + TransitGatewayAttachmentResourceTypeDirectConnectGateway = "direct-connect-gateway" +) + +const ( + // TransitGatewayAttachmentStatePendingAcceptance is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStatePendingAcceptance = "pendingAcceptance" + + // TransitGatewayAttachmentStateRollingBack is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateRollingBack = "rollingBack" + + // TransitGatewayAttachmentStatePending is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStatePending = "pending" + + // TransitGatewayAttachmentStateAvailable is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateAvailable = "available" + + // TransitGatewayAttachmentStateModifying is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateModifying = "modifying" + + // TransitGatewayAttachmentStateDeleting is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateDeleting = "deleting" + + // TransitGatewayAttachmentStateDeleted is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateDeleted = "deleted" + + // TransitGatewayAttachmentStateFailed is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateFailed = "failed" + + // TransitGatewayAttachmentStateRejected is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateRejected = "rejected" + + // TransitGatewayAttachmentStateRejecting is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateRejecting = "rejecting" + + // TransitGatewayAttachmentStateFailing is a TransitGatewayAttachmentState enum value + TransitGatewayAttachmentStateFailing = "failing" +) + +const ( + // TransitGatewayPropagationStateEnabling is a TransitGatewayPropagationState enum value + TransitGatewayPropagationStateEnabling = "enabling" + + // TransitGatewayPropagationStateEnabled is a TransitGatewayPropagationState enum value + TransitGatewayPropagationStateEnabled = "enabled" + + // TransitGatewayPropagationStateDisabling is a TransitGatewayPropagationState enum value + TransitGatewayPropagationStateDisabling = "disabling" + + // TransitGatewayPropagationStateDisabled is a TransitGatewayPropagationState enum value + TransitGatewayPropagationStateDisabled = "disabled" +) + +const ( + // TransitGatewayRouteStatePending is a TransitGatewayRouteState enum value + TransitGatewayRouteStatePending = "pending" + + // TransitGatewayRouteStateActive is a TransitGatewayRouteState enum value + TransitGatewayRouteStateActive = "active" + + // TransitGatewayRouteStateBlackhole is a TransitGatewayRouteState enum value + TransitGatewayRouteStateBlackhole = "blackhole" + + // TransitGatewayRouteStateDeleting is a TransitGatewayRouteState enum value + TransitGatewayRouteStateDeleting = "deleting" + + // TransitGatewayRouteStateDeleted is a TransitGatewayRouteState enum value + TransitGatewayRouteStateDeleted = "deleted" +) + +const ( + // TransitGatewayRouteTableStatePending is a TransitGatewayRouteTableState enum value + TransitGatewayRouteTableStatePending = "pending" + + // TransitGatewayRouteTableStateAvailable is a TransitGatewayRouteTableState enum value + TransitGatewayRouteTableStateAvailable = "available" + + // TransitGatewayRouteTableStateDeleting is a TransitGatewayRouteTableState enum value + TransitGatewayRouteTableStateDeleting = "deleting" + + // TransitGatewayRouteTableStateDeleted is a TransitGatewayRouteTableState enum value + TransitGatewayRouteTableStateDeleted = "deleted" +) + +const ( + // TransitGatewayRouteTypeStatic is a TransitGatewayRouteType enum value + TransitGatewayRouteTypeStatic = "static" + + // TransitGatewayRouteTypePropagated is a TransitGatewayRouteType enum value + TransitGatewayRouteTypePropagated = "propagated" +) + +const ( + // TransitGatewayStatePending is a TransitGatewayState enum value + TransitGatewayStatePending = "pending" + + // TransitGatewayStateAvailable is a TransitGatewayState enum value + TransitGatewayStateAvailable = "available" + + // TransitGatewayStateModifying is a TransitGatewayState enum value + TransitGatewayStateModifying = "modifying" + + // TransitGatewayStateDeleting is a TransitGatewayState enum value + TransitGatewayStateDeleting = "deleting" + + // TransitGatewayStateDeleted is a TransitGatewayState enum value + TransitGatewayStateDeleted = "deleted" +) + +const ( + // TransportProtocolTcp is a TransportProtocol enum value + TransportProtocolTcp = "tcp" + + // TransportProtocolUdp is a TransportProtocol enum value + TransportProtocolUdp = "udp" +) + +const ( + // UnsuccessfulInstanceCreditSpecificationErrorCodeInvalidInstanceIdMalformed is a UnsuccessfulInstanceCreditSpecificationErrorCode enum value + UnsuccessfulInstanceCreditSpecificationErrorCodeInvalidInstanceIdMalformed = "InvalidInstanceID.Malformed" + + // UnsuccessfulInstanceCreditSpecificationErrorCodeInvalidInstanceIdNotFound is a UnsuccessfulInstanceCreditSpecificationErrorCode enum value + UnsuccessfulInstanceCreditSpecificationErrorCodeInvalidInstanceIdNotFound = "InvalidInstanceID.NotFound" + + // UnsuccessfulInstanceCreditSpecificationErrorCodeIncorrectInstanceState is a UnsuccessfulInstanceCreditSpecificationErrorCode enum value + UnsuccessfulInstanceCreditSpecificationErrorCodeIncorrectInstanceState = "IncorrectInstanceState" + + // UnsuccessfulInstanceCreditSpecificationErrorCodeInstanceCreditSpecificationNotSupported is a UnsuccessfulInstanceCreditSpecificationErrorCode enum value + UnsuccessfulInstanceCreditSpecificationErrorCodeInstanceCreditSpecificationNotSupported = "InstanceCreditSpecification.NotSupported" +) + +const ( + // UsageClassTypeSpot is a UsageClassType enum value + UsageClassTypeSpot = "spot" + + // UsageClassTypeOnDemand is a UsageClassType enum value + UsageClassTypeOnDemand = "on-demand" +) + const ( // VirtualizationTypeHvm is a VirtualizationType enum value VirtualizationTypeHvm = "hvm" @@ -53946,6 +101599,9 @@ const ( // VolumeAttachmentStateDetached is a VolumeAttachmentState enum value VolumeAttachmentStateDetached = "detached" + + // VolumeAttachmentStateBusy is a VolumeAttachmentState enum value + VolumeAttachmentStateBusy = "busy" ) const ( @@ -54054,6 +101710,14 @@ const ( VpcCidrBlockStateCodeFailed = "failed" ) +const ( + // VpcEndpointTypeInterface is a VpcEndpointType enum value + VpcEndpointTypeInterface = "Interface" + + // VpcEndpointTypeGateway is a VpcEndpointType enum value + VpcEndpointTypeGateway = "Gateway" +) + const ( // VpcPeeringConnectionStateReasonCodeInitiatingRequest is a VpcPeeringConnectionStateReasonCode enum value VpcPeeringConnectionStateReasonCodeInitiatingRequest = "initiating-request" @@ -54091,6 +101755,24 @@ const ( VpcStateAvailable = "available" ) +const ( + // VpcTenancyDefault is a VpcTenancy enum value + VpcTenancyDefault = "default" +) + +const ( + // VpnEcmpSupportValueEnable is a VpnEcmpSupportValue enum value + VpnEcmpSupportValueEnable = "enable" + + // VpnEcmpSupportValueDisable is a VpnEcmpSupportValue enum value + VpnEcmpSupportValueDisable = "disable" +) + +const ( + // VpnProtocolOpenvpn is a VpnProtocol enum value + VpnProtocolOpenvpn = "openvpn" +) + const ( // VpnStatePending is a VpnState enum value VpnStatePending = "pending" diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/customizations.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/customizations.go index 36b69ff2814..efec8d8a94e 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/customizations.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/customizations.go @@ -5,15 +5,35 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awsutil" + "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/request" ) +const ( + // customRetryerMinRetryDelay sets min retry delay + customRetryerMinRetryDelay = 1 * time.Second + + // customRetryerMaxRetryDelay sets max retry delay + customRetryerMaxRetryDelay = 8 * time.Second +) + func init() { initRequest = func(r *request.Request) { if r.Operation.Name == opCopySnapshot { // fill the PresignedURL parameter r.Handlers.Build.PushFront(fillPresignedURL) } + + // only set the retryer on request if config doesn't have a retryer + if r.Config.Retryer == nil && (r.Operation.Name == opModifyNetworkInterfaceAttribute || r.Operation.Name == opAssignPrivateIpAddresses) { + r.Retryer = client.DefaultRetryer{ + NumMaxRetries: client.DefaultRetryerMaxNumRetries, + MinRetryDelay: customRetryerMinRetryDelay, + MinThrottleDelay: customRetryerMinRetryDelay, + MaxRetryDelay: customRetryerMaxRetryDelay, + MaxThrottleDelay: customRetryerMaxRetryDelay, + } + } } } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go new file mode 100644 index 00000000000..31c314e0e5f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go @@ -0,0 +1,44 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +// Package ec2 provides the client and types for making API +// requests to Amazon Elastic Compute Cloud. +// +// Amazon Elastic Compute Cloud (Amazon EC2) provides secure and resizable computing +// capacity in the AWS cloud. Using Amazon EC2 eliminates the need to invest +// in hardware up front, so you can develop and deploy applications faster. +// +// To learn more, see the following resources: +// +// * Amazon EC2: AmazonEC2 product page (http://aws.amazon.com/ec2), Amazon +// EC2 documentation (http://aws.amazon.com/documentation/ec2) +// +// * Amazon EBS: Amazon EBS product page (http://aws.amazon.com/ebs), Amazon +// EBS documentation (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) +// +// * Amazon VPC: Amazon VPC product page (http://aws.amazon.com/vpc), Amazon +// VPC documentation (http://aws.amazon.com/documentation/vpc) +// +// * AWS VPN: AWS VPN product page (http://aws.amazon.com/vpn), AWS VPN documentation +// (http://aws.amazon.com/documentation/vpn) +// +// See https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15 for more information on this service. +// +// See ec2 package documentation for more information. +// https://docs.aws.amazon.com/sdk-for-go/api/service/ec2/ +// +// Using the Client +// +// To contact Amazon Elastic Compute Cloud with the SDK use the New function to create +// a new service client. With that client you can make API requests to the service. +// These clients are safe to use concurrently. +// +// See the SDK's documentation for more information on how to use the SDK. +// https://docs.aws.amazon.com/sdk-for-go/api/ +// +// See aws.Config documentation for more information on configuring SDK clients. +// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config +// +// See the Amazon Elastic Compute Cloud client EC2 for more +// information on creating client for this service. +// https://docs.aws.amazon.com/sdk-for-go/api/service/ec2/#New +package ec2 diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/errors.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/errors.go index f90fa6ec54d..3d61d7e357e 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/errors.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/errors.go @@ -1,3 +1,3 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. package ec2 diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/service.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/service.go index c289b5b04df..f8c075614f6 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/service.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/service.go @@ -1,4 +1,4 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. package ec2 @@ -11,13 +11,12 @@ import ( "github.com/aws/aws-sdk-go/private/protocol/ec2query" ) -// Amazon Elastic Compute Cloud (Amazon EC2) provides resizable computing capacity -// in the Amazon Web Services (AWS) cloud. Using Amazon EC2 eliminates your -// need to invest in hardware up front, so you can develop and deploy applications -// faster. -// The service client's operations are safe to be used concurrently. -// It is not safe to mutate any of the client's properties though. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15 +// EC2 provides the API operation methods for making requests to +// Amazon Elastic Compute Cloud. See this package's package overview docs +// for details on the service. +// +// EC2 methods are safe to use concurrently. It is not safe to +// modify mutate any of the struct's properties though. type EC2 struct { *client.Client } @@ -30,8 +29,9 @@ var initRequest func(*request.Request) // Service information constants const ( - ServiceName = "ec2" // Service endpoint prefix API calls made to. - EndpointsID = ServiceName // Service ID for Regions and Endpoints metadata. + ServiceName = "ec2" // Name of service. + EndpointsID = ServiceName // ID to lookup a service endpoint with. + ServiceID = "EC2" // ServiceID is a unique identifer of a specific service. ) // New creates a new instance of the EC2 client with a session. @@ -39,6 +39,8 @@ const ( // aws.Config parameter to add your extra config. // // Example: +// mySession := session.Must(session.NewSession()) +// // // Create a EC2 client from just a session. // svc := ec2.New(mySession) // @@ -46,18 +48,20 @@ const ( // svc := ec2.New(mySession, aws.NewConfig().WithRegion("us-west-2")) func New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2 { c := p.ClientConfig(EndpointsID, cfgs...) - return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName) + return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName) } // newClient creates, initializes and returns a new service client instance. -func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *EC2 { +func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *EC2 { svc := &EC2{ Client: client.New( cfg, metadata.ClientInfo{ ServiceName: ServiceName, + ServiceID: ServiceID, SigningName: signingName, SigningRegion: signingRegion, + PartitionID: partitionID, Endpoint: endpoint, APIVersion: "2016-11-15", }, diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/waiters.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/waiters.go index 7917cbdaf9f..b9bdbde157f 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/waiters.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/ec2/waiters.go @@ -1,1060 +1,1677 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. package ec2 import ( - "github.com/aws/aws-sdk-go/private/waiter" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" ) // WaitUntilBundleTaskComplete uses the Amazon EC2 API operation // DescribeBundleTasks to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilBundleTaskComplete(input *DescribeBundleTasksInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeBundleTasks", - Delay: 15, + return c.WaitUntilBundleTaskCompleteWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilBundleTaskCompleteWithContext is an extended version of WaitUntilBundleTaskComplete. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilBundleTaskCompleteWithContext(ctx aws.Context, input *DescribeBundleTasksInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilBundleTaskComplete", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "BundleTasks[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "BundleTasks[].State", Expected: "complete", }, { - State: "failure", - Matcher: "pathAny", - Argument: "BundleTasks[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "BundleTasks[].State", Expected: "failed", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeBundleTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeBundleTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilConversionTaskCancelled uses the Amazon EC2 API operation // DescribeConversionTasks to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilConversionTaskCancelled(input *DescribeConversionTasksInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeConversionTasks", - Delay: 15, + return c.WaitUntilConversionTaskCancelledWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilConversionTaskCancelledWithContext is an extended version of WaitUntilConversionTaskCancelled. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilConversionTaskCancelledWithContext(ctx aws.Context, input *DescribeConversionTasksInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilConversionTaskCancelled", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "ConversionTasks[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "ConversionTasks[].State", Expected: "cancelled", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeConversionTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeConversionTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilConversionTaskCompleted uses the Amazon EC2 API operation // DescribeConversionTasks to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilConversionTaskCompleted(input *DescribeConversionTasksInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeConversionTasks", - Delay: 15, + return c.WaitUntilConversionTaskCompletedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilConversionTaskCompletedWithContext is an extended version of WaitUntilConversionTaskCompleted. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilConversionTaskCompletedWithContext(ctx aws.Context, input *DescribeConversionTasksInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilConversionTaskCompleted", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "ConversionTasks[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "ConversionTasks[].State", Expected: "completed", }, { - State: "failure", - Matcher: "pathAny", - Argument: "ConversionTasks[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "ConversionTasks[].State", Expected: "cancelled", }, { - State: "failure", - Matcher: "pathAny", - Argument: "ConversionTasks[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "ConversionTasks[].State", Expected: "cancelling", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeConversionTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeConversionTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilConversionTaskDeleted uses the Amazon EC2 API operation // DescribeConversionTasks to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilConversionTaskDeleted(input *DescribeConversionTasksInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeConversionTasks", - Delay: 15, + return c.WaitUntilConversionTaskDeletedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilConversionTaskDeletedWithContext is an extended version of WaitUntilConversionTaskDeleted. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilConversionTaskDeletedWithContext(ctx aws.Context, input *DescribeConversionTasksInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilConversionTaskDeleted", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "ConversionTasks[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "ConversionTasks[].State", Expected: "deleted", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeConversionTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeConversionTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilCustomerGatewayAvailable uses the Amazon EC2 API operation // DescribeCustomerGateways to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilCustomerGatewayAvailable(input *DescribeCustomerGatewaysInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeCustomerGateways", - Delay: 15, + return c.WaitUntilCustomerGatewayAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilCustomerGatewayAvailableWithContext is an extended version of WaitUntilCustomerGatewayAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilCustomerGatewayAvailableWithContext(ctx aws.Context, input *DescribeCustomerGatewaysInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilCustomerGatewayAvailable", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "CustomerGateways[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "CustomerGateways[].State", Expected: "available", }, { - State: "failure", - Matcher: "pathAny", - Argument: "CustomerGateways[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "CustomerGateways[].State", Expected: "deleted", }, { - State: "failure", - Matcher: "pathAny", - Argument: "CustomerGateways[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "CustomerGateways[].State", Expected: "deleting", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeCustomerGatewaysInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeCustomerGatewaysRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilExportTaskCancelled uses the Amazon EC2 API operation // DescribeExportTasks to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilExportTaskCancelled(input *DescribeExportTasksInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeExportTasks", - Delay: 15, + return c.WaitUntilExportTaskCancelledWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilExportTaskCancelledWithContext is an extended version of WaitUntilExportTaskCancelled. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilExportTaskCancelledWithContext(ctx aws.Context, input *DescribeExportTasksInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilExportTaskCancelled", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "ExportTasks[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "ExportTasks[].State", Expected: "cancelled", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeExportTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeExportTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilExportTaskCompleted uses the Amazon EC2 API operation // DescribeExportTasks to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilExportTaskCompleted(input *DescribeExportTasksInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeExportTasks", - Delay: 15, + return c.WaitUntilExportTaskCompletedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilExportTaskCompletedWithContext is an extended version of WaitUntilExportTaskCompleted. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilExportTaskCompletedWithContext(ctx aws.Context, input *DescribeExportTasksInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilExportTaskCompleted", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "ExportTasks[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "ExportTasks[].State", Expected: "completed", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeExportTasksInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeExportTasksRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilImageAvailable uses the Amazon EC2 API operation // DescribeImages to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilImageAvailable(input *DescribeImagesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeImages", - Delay: 15, + return c.WaitUntilImageAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilImageAvailableWithContext is an extended version of WaitUntilImageAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilImageAvailableWithContext(ctx aws.Context, input *DescribeImagesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilImageAvailable", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Images[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Images[].State", Expected: "available", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Images[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Images[].State", Expected: "failed", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeImagesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeImagesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilImageExists uses the Amazon EC2 API operation // DescribeImages to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilImageExists(input *DescribeImagesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeImages", - Delay: 15, + return c.WaitUntilImageExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilImageExistsWithContext is an extended version of WaitUntilImageExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilImageExistsWithContext(ctx aws.Context, input *DescribeImagesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilImageExists", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "path", - Argument: "length(Images[]) > `0`", + State: request.SuccessWaiterState, + Matcher: request.PathWaiterMatch, Argument: "length(Images[]) > `0`", Expected: true, }, { - State: "retry", - Matcher: "error", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidAMIID.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeImagesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeImagesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilInstanceExists uses the Amazon EC2 API operation // DescribeInstances to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilInstanceExists(input *DescribeInstancesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeInstances", - Delay: 5, + return c.WaitUntilInstanceExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilInstanceExistsWithContext is an extended version of WaitUntilInstanceExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilInstanceExistsWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilInstanceExists", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(5 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "path", - Argument: "length(Reservations[]) > `0`", + State: request.SuccessWaiterState, + Matcher: request.PathWaiterMatch, Argument: "length(Reservations[]) > `0`", Expected: true, }, { - State: "retry", - Matcher: "error", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidInstanceID.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeInstancesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstancesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilInstanceRunning uses the Amazon EC2 API operation // DescribeInstances to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilInstanceRunning(input *DescribeInstancesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeInstances", - Delay: 15, + return c.WaitUntilInstanceRunningWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilInstanceRunningWithContext is an extended version of WaitUntilInstanceRunning. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilInstanceRunningWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilInstanceRunning", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Reservations[].Instances[].State.Name", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "running", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Reservations[].Instances[].State.Name", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "shutting-down", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Reservations[].Instances[].State.Name", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "terminated", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Reservations[].Instances[].State.Name", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "stopping", }, { - State: "retry", - Matcher: "error", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidInstanceID.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeInstancesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstancesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilInstanceStatusOk uses the Amazon EC2 API operation // DescribeInstanceStatus to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilInstanceStatusOk(input *DescribeInstanceStatusInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeInstanceStatus", - Delay: 15, + return c.WaitUntilInstanceStatusOkWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilInstanceStatusOkWithContext is an extended version of WaitUntilInstanceStatusOk. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilInstanceStatusOkWithContext(ctx aws.Context, input *DescribeInstanceStatusInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilInstanceStatusOk", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "InstanceStatuses[].InstanceStatus.Status", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "InstanceStatuses[].InstanceStatus.Status", Expected: "ok", }, { - State: "retry", - Matcher: "error", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidInstanceID.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeInstanceStatusInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstanceStatusRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilInstanceStopped uses the Amazon EC2 API operation // DescribeInstances to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilInstanceStopped(input *DescribeInstancesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeInstances", - Delay: 15, + return c.WaitUntilInstanceStoppedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilInstanceStoppedWithContext is an extended version of WaitUntilInstanceStopped. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilInstanceStoppedWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilInstanceStopped", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Reservations[].Instances[].State.Name", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "stopped", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Reservations[].Instances[].State.Name", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "pending", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Reservations[].Instances[].State.Name", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "terminated", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeInstancesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstancesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilInstanceTerminated uses the Amazon EC2 API operation // DescribeInstances to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilInstanceTerminated(input *DescribeInstancesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeInstances", - Delay: 15, + return c.WaitUntilInstanceTerminatedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilInstanceTerminatedWithContext is an extended version of WaitUntilInstanceTerminated. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilInstanceTerminatedWithContext(ctx aws.Context, input *DescribeInstancesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilInstanceTerminated", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Reservations[].Instances[].State.Name", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "terminated", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Reservations[].Instances[].State.Name", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "pending", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Reservations[].Instances[].State.Name", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Reservations[].Instances[].State.Name", Expected: "stopping", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeInstancesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstancesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilKeyPairExists uses the Amazon EC2 API operation // DescribeKeyPairs to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilKeyPairExists(input *DescribeKeyPairsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeKeyPairs", - Delay: 5, + return c.WaitUntilKeyPairExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilKeyPairExistsWithContext is an extended version of WaitUntilKeyPairExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilKeyPairExistsWithContext(ctx aws.Context, input *DescribeKeyPairsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilKeyPairExists", MaxAttempts: 6, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(5 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "path", - Argument: "length(KeyPairs[].KeyName) > `0`", + State: request.SuccessWaiterState, + Matcher: request.PathWaiterMatch, Argument: "length(KeyPairs[].KeyName) > `0`", Expected: true, }, { - State: "retry", - Matcher: "error", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidKeyPair.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeKeyPairsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeKeyPairsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilNatGatewayAvailable uses the Amazon EC2 API operation // DescribeNatGateways to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilNatGatewayAvailable(input *DescribeNatGatewaysInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeNatGateways", - Delay: 15, + return c.WaitUntilNatGatewayAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilNatGatewayAvailableWithContext is an extended version of WaitUntilNatGatewayAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilNatGatewayAvailableWithContext(ctx aws.Context, input *DescribeNatGatewaysInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilNatGatewayAvailable", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "NatGateways[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "NatGateways[].State", Expected: "available", }, { - State: "failure", - Matcher: "pathAny", - Argument: "NatGateways[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "NatGateways[].State", Expected: "failed", }, { - State: "failure", - Matcher: "pathAny", - Argument: "NatGateways[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "NatGateways[].State", Expected: "deleting", }, { - State: "failure", - Matcher: "pathAny", - Argument: "NatGateways[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "NatGateways[].State", Expected: "deleted", }, { - State: "retry", - Matcher: "error", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "NatGatewayNotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeNatGatewaysInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeNatGatewaysRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilNetworkInterfaceAvailable uses the Amazon EC2 API operation // DescribeNetworkInterfaces to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilNetworkInterfaceAvailable(input *DescribeNetworkInterfacesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeNetworkInterfaces", - Delay: 20, + return c.WaitUntilNetworkInterfaceAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilNetworkInterfaceAvailableWithContext is an extended version of WaitUntilNetworkInterfaceAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilNetworkInterfaceAvailableWithContext(ctx aws.Context, input *DescribeNetworkInterfacesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilNetworkInterfaceAvailable", MaxAttempts: 10, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(20 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "NetworkInterfaces[].Status", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "NetworkInterfaces[].Status", Expected: "available", }, { - State: "failure", - Matcher: "error", - Argument: "", + State: request.FailureWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidNetworkInterfaceID.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeNetworkInterfacesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeNetworkInterfacesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilPasswordDataAvailable uses the Amazon EC2 API operation // GetPasswordData to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilPasswordDataAvailable(input *GetPasswordDataInput) error { - waiterCfg := waiter.Config{ - Operation: "GetPasswordData", - Delay: 15, + return c.WaitUntilPasswordDataAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilPasswordDataAvailableWithContext is an extended version of WaitUntilPasswordDataAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilPasswordDataAvailableWithContext(ctx aws.Context, input *GetPasswordDataInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilPasswordDataAvailable", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "path", - Argument: "length(PasswordData) > `0`", + State: request.SuccessWaiterState, + Matcher: request.PathWaiterMatch, Argument: "length(PasswordData) > `0`", Expected: true, }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *GetPasswordDataInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.GetPasswordDataRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) + + return w.WaitWithContext(ctx) +} - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, +// WaitUntilSecurityGroupExists uses the Amazon EC2 API operation +// DescribeSecurityGroups to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. +func (c *EC2) WaitUntilSecurityGroupExists(input *DescribeSecurityGroupsInput) error { + return c.WaitUntilSecurityGroupExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilSecurityGroupExistsWithContext is an extended version of WaitUntilSecurityGroupExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilSecurityGroupExistsWithContext(ctx aws.Context, input *DescribeSecurityGroupsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilSecurityGroupExists", + MaxAttempts: 6, + Delay: request.ConstantWaiterDelay(5 * time.Second), + Acceptors: []request.WaiterAcceptor{ + { + State: request.SuccessWaiterState, + Matcher: request.PathWaiterMatch, Argument: "length(SecurityGroups[].GroupId) > `0`", + Expected: true, + }, + { + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, + Expected: "InvalidGroupNotFound", + }, + }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeSecurityGroupsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSecurityGroupsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } - return w.Wait() + w.ApplyOptions(opts...) + + return w.WaitWithContext(ctx) } // WaitUntilSnapshotCompleted uses the Amazon EC2 API operation // DescribeSnapshots to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilSnapshotCompleted(input *DescribeSnapshotsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeSnapshots", - Delay: 15, + return c.WaitUntilSnapshotCompletedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilSnapshotCompletedWithContext is an extended version of WaitUntilSnapshotCompleted. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilSnapshotCompletedWithContext(ctx aws.Context, input *DescribeSnapshotsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilSnapshotCompleted", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Snapshots[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Snapshots[].State", Expected: "completed", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeSnapshotsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSnapshotsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilSpotInstanceRequestFulfilled uses the Amazon EC2 API operation // DescribeSpotInstanceRequests to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilSpotInstanceRequestFulfilled(input *DescribeSpotInstanceRequestsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeSpotInstanceRequests", - Delay: 15, + return c.WaitUntilSpotInstanceRequestFulfilledWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilSpotInstanceRequestFulfilledWithContext is an extended version of WaitUntilSpotInstanceRequestFulfilled. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilSpotInstanceRequestFulfilledWithContext(ctx aws.Context, input *DescribeSpotInstanceRequestsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilSpotInstanceRequestFulfilled", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "SpotInstanceRequests[].Status.Code", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", Expected: "fulfilled", }, { - State: "failure", - Matcher: "pathAny", - Argument: "SpotInstanceRequests[].Status.Code", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", + Expected: "request-canceled-and-instance-running", + }, + { + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", Expected: "schedule-expired", }, { - State: "failure", - Matcher: "pathAny", - Argument: "SpotInstanceRequests[].Status.Code", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", Expected: "canceled-before-fulfillment", }, { - State: "failure", - Matcher: "pathAny", - Argument: "SpotInstanceRequests[].Status.Code", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", Expected: "bad-parameters", }, { - State: "failure", - Matcher: "pathAny", - Argument: "SpotInstanceRequests[].Status.Code", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "SpotInstanceRequests[].Status.Code", Expected: "system-error", }, + { + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, + Expected: "InvalidSpotInstanceRequestID.NotFound", + }, + }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeSpotInstanceRequestsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSpotInstanceRequestsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilSubnetAvailable uses the Amazon EC2 API operation // DescribeSubnets to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilSubnetAvailable(input *DescribeSubnetsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeSubnets", - Delay: 15, + return c.WaitUntilSubnetAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilSubnetAvailableWithContext is an extended version of WaitUntilSubnetAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilSubnetAvailableWithContext(ctx aws.Context, input *DescribeSubnetsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilSubnetAvailable", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Subnets[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Subnets[].State", Expected: "available", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeSubnetsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeSubnetsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilSystemStatusOk uses the Amazon EC2 API operation // DescribeInstanceStatus to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilSystemStatusOk(input *DescribeInstanceStatusInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeInstanceStatus", - Delay: 15, + return c.WaitUntilSystemStatusOkWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilSystemStatusOkWithContext is an extended version of WaitUntilSystemStatusOk. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilSystemStatusOkWithContext(ctx aws.Context, input *DescribeInstanceStatusInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilSystemStatusOk", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "InstanceStatuses[].SystemStatus.Status", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "InstanceStatuses[].SystemStatus.Status", Expected: "ok", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeInstanceStatusInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeInstanceStatusRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVolumeAvailable uses the Amazon EC2 API operation // DescribeVolumes to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVolumeAvailable(input *DescribeVolumesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVolumes", - Delay: 15, + return c.WaitUntilVolumeAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVolumeAvailableWithContext is an extended version of WaitUntilVolumeAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVolumeAvailableWithContext(ctx aws.Context, input *DescribeVolumesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVolumeAvailable", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Volumes[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Volumes[].State", Expected: "available", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Volumes[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Volumes[].State", Expected: "deleted", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVolumesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVolumesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVolumeDeleted uses the Amazon EC2 API operation // DescribeVolumes to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVolumeDeleted(input *DescribeVolumesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVolumes", - Delay: 15, + return c.WaitUntilVolumeDeletedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVolumeDeletedWithContext is an extended version of WaitUntilVolumeDeleted. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVolumeDeletedWithContext(ctx aws.Context, input *DescribeVolumesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVolumeDeleted", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Volumes[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Volumes[].State", Expected: "deleted", }, { - State: "success", - Matcher: "error", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidVolume.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVolumesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVolumesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVolumeInUse uses the Amazon EC2 API operation // DescribeVolumes to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVolumeInUse(input *DescribeVolumesInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVolumes", - Delay: 15, + return c.WaitUntilVolumeInUseWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVolumeInUseWithContext is an extended version of WaitUntilVolumeInUse. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVolumeInUseWithContext(ctx aws.Context, input *DescribeVolumesInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVolumeInUse", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Volumes[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Volumes[].State", Expected: "in-use", }, { - State: "failure", - Matcher: "pathAny", - Argument: "Volumes[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "Volumes[].State", Expected: "deleted", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVolumesInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVolumesRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVpcAvailable uses the Amazon EC2 API operation // DescribeVpcs to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVpcAvailable(input *DescribeVpcsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVpcs", - Delay: 15, + return c.WaitUntilVpcAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVpcAvailableWithContext is an extended version of WaitUntilVpcAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVpcAvailableWithContext(ctx aws.Context, input *DescribeVpcsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVpcAvailable", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "Vpcs[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "Vpcs[].State", Expected: "available", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVpcsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVpcExists uses the Amazon EC2 API operation // DescribeVpcs to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVpcExists(input *DescribeVpcsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVpcs", - Delay: 1, + return c.WaitUntilVpcExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVpcExistsWithContext is an extended version of WaitUntilVpcExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVpcExistsWithContext(ctx aws.Context, input *DescribeVpcsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVpcExists", MaxAttempts: 5, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(1 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "status", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 200, }, { - State: "retry", - Matcher: "error", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidVpcID.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVpcsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVpcPeeringConnectionDeleted uses the Amazon EC2 API operation // DescribeVpcPeeringConnections to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVpcPeeringConnectionDeleted(input *DescribeVpcPeeringConnectionsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVpcPeeringConnections", - Delay: 15, + return c.WaitUntilVpcPeeringConnectionDeletedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVpcPeeringConnectionDeletedWithContext is an extended version of WaitUntilVpcPeeringConnectionDeleted. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVpcPeeringConnectionDeletedWithContext(ctx aws.Context, input *DescribeVpcPeeringConnectionsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVpcPeeringConnectionDeleted", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "VpcPeeringConnections[].Status.Code", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "VpcPeeringConnections[].Status.Code", Expected: "deleted", }, { - State: "success", - Matcher: "error", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidVpcPeeringConnectionID.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVpcPeeringConnectionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcPeeringConnectionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVpcPeeringConnectionExists uses the Amazon EC2 API operation // DescribeVpcPeeringConnections to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVpcPeeringConnectionExists(input *DescribeVpcPeeringConnectionsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVpcPeeringConnections", - Delay: 15, + return c.WaitUntilVpcPeeringConnectionExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVpcPeeringConnectionExistsWithContext is an extended version of WaitUntilVpcPeeringConnectionExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVpcPeeringConnectionExistsWithContext(ctx aws.Context, input *DescribeVpcPeeringConnectionsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVpcPeeringConnectionExists", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "status", - Argument: "", + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, Expected: 200, }, { - State: "retry", - Matcher: "error", - Argument: "", + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, Expected: "InvalidVpcPeeringConnectionID.NotFound", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVpcPeeringConnectionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpcPeeringConnectionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVpnConnectionAvailable uses the Amazon EC2 API operation // DescribeVpnConnections to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVpnConnectionAvailable(input *DescribeVpnConnectionsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVpnConnections", - Delay: 15, + return c.WaitUntilVpnConnectionAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVpnConnectionAvailableWithContext is an extended version of WaitUntilVpnConnectionAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVpnConnectionAvailableWithContext(ctx aws.Context, input *DescribeVpnConnectionsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVpnConnectionAvailable", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "VpnConnections[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "VpnConnections[].State", Expected: "available", }, { - State: "failure", - Matcher: "pathAny", - Argument: "VpnConnections[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "VpnConnections[].State", Expected: "deleting", }, { - State: "failure", - Matcher: "pathAny", - Argument: "VpnConnections[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "VpnConnections[].State", Expected: "deleted", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVpnConnectionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpnConnectionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } // WaitUntilVpnConnectionDeleted uses the Amazon EC2 API operation // DescribeVpnConnections to wait for a condition to be met before returning. -// If the condition is not meet within the max attempt window an error will +// If the condition is not met within the max attempt window, an error will // be returned. func (c *EC2) WaitUntilVpnConnectionDeleted(input *DescribeVpnConnectionsInput) error { - waiterCfg := waiter.Config{ - Operation: "DescribeVpnConnections", - Delay: 15, + return c.WaitUntilVpnConnectionDeletedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilVpnConnectionDeletedWithContext is an extended version of WaitUntilVpnConnectionDeleted. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *EC2) WaitUntilVpnConnectionDeletedWithContext(ctx aws.Context, input *DescribeVpnConnectionsInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilVpnConnectionDeleted", MaxAttempts: 40, - Acceptors: []waiter.WaitAcceptor{ + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ { - State: "success", - Matcher: "pathAll", - Argument: "VpnConnections[].State", + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "VpnConnections[].State", Expected: "deleted", }, { - State: "failure", - Matcher: "pathAny", - Argument: "VpnConnections[].State", + State: request.FailureWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "VpnConnections[].State", Expected: "pending", }, }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeVpnConnectionsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeVpnConnectionsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, } + w.ApplyOptions(opts...) - w := waiter.Waiter{ - Client: c, - Input: input, - Config: waiterCfg, - } - return w.Wait() + return w.WaitWithContext(ctx) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/api.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/api.go index ad42b4c973c..7f60d4aa185 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/api.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/api.go @@ -1,12 +1,14 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. -// Package sts provides a client for AWS Security Token Service. package sts import ( + "fmt" "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awsutil" + "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/request" ) @@ -14,19 +16,18 @@ const opAssumeRole = "AssumeRole" // AssumeRoleRequest generates a "aws/request.Request" representing the // client's request for the AssumeRole operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AssumeRole for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssumeRole method directly -// instead. +// See AssumeRole for more information on using the AssumeRole +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssumeRoleRequest method. // req, resp := client.AssumeRoleRequest(params) @@ -36,7 +37,7 @@ const opAssumeRole = "AssumeRole" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole func (c *STS) AssumeRoleRequest(input *AssumeRoleInput) (req *request.Request, output *AssumeRoleOutput) { op := &request.Operation{ Name: opAssumeRole, @@ -55,95 +56,123 @@ func (c *STS) AssumeRoleRequest(input *AssumeRoleInput) (req *request.Request, o // AssumeRole API operation for AWS Security Token Service. // -// Returns a set of temporary security credentials (consisting of an access -// key ID, a secret access key, and a security token) that you can use to access -// AWS resources that you might not normally have access to. Typically, you -// use AssumeRole for cross-account access or federation. For a comparison of -// AssumeRole with the other APIs that produce temporary credentials, see Requesting -// Temporary Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS APIs (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// Returns a set of temporary security credentials that you can use to access +// AWS resources that you might not normally have access to. These temporary +// credentials consist of an access key ID, a secret access key, and a security +// token. Typically, you use AssumeRole within your account or for cross-account +// access. For a comparison of AssumeRole with other API operations that produce +// temporary credentials, see Requesting Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) // in the IAM User Guide. // -// Important: You cannot call AssumeRole by using AWS root account credentials; -// access is denied. You must use credentials for an IAM user or an IAM role -// to call AssumeRole. +// You cannot use AWS account root user credentials to call AssumeRole. You +// must use credentials for an IAM user or an IAM role to call AssumeRole. // // For cross-account access, imagine that you own multiple accounts and need // to access resources in each account. You could create long-term credentials // in each account to access those resources. However, managing all those credentials // and remembering which one can access which account can be time consuming. -// Instead, you can create one set of long-term credentials in one account and -// then use temporary security credentials to access all the other accounts +// Instead, you can create one set of long-term credentials in one account. +// Then use temporary security credentials to access all the other accounts // by assuming roles in those accounts. For more information about roles, see -// IAM Roles (Delegation and Federation) (http://docs.aws.amazon.com/IAM/latest/UserGuide/roles-toplevel.html) +// IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) // in the IAM User Guide. // -// For federation, you can, for example, grant single sign-on access to the -// AWS Management Console. If you already have an identity and authentication -// system in your corporate network, you don't have to recreate user identities -// in AWS in order to grant those user identities access to AWS. Instead, after -// a user has been authenticated, you call AssumeRole (and specify the role -// with the appropriate permissions) to get temporary security credentials for -// that user. With those temporary security credentials, you construct a sign-in -// URL that users can use to access the console. For more information, see Common -// Scenarios for Temporary Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html#sts-introduction) +// Session Duration +// +// By default, the temporary security credentials created by AssumeRole last +// for one hour. However, you can use the optional DurationSeconds parameter +// to specify the duration of your session. You can provide a value from 900 +// seconds (15 minutes) up to the maximum session duration setting for the role. +// This setting can have a value from 1 hour to 12 hours. To learn how to view +// the maximum value for your role, see View the Maximum Session Duration Setting +// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) +// in the IAM User Guide. The maximum session duration limit applies when you +// use the AssumeRole* API operations or the assume-role* CLI commands. However +// the limit does not apply when you use those operations to create a console +// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) // in the IAM User Guide. // -// The temporary security credentials are valid for the duration that you specified -// when calling AssumeRole, which can be from 900 seconds (15 minutes) to a -// maximum of 3600 seconds (1 hour). The default is 1 hour. +// Permissions // // The temporary security credentials created by AssumeRole can be used to make -// API calls to any AWS service with the following exception: you cannot call -// the STS service's GetFederationToken or GetSessionToken APIs. -// -// Optionally, you can pass an IAM access policy to this operation. If you choose -// not to pass a policy, the temporary security credentials that are returned -// by the operation have the permissions that are defined in the access policy -// of the role that is being assumed. If you pass a policy to this operation, -// the temporary security credentials that are returned by the operation have -// the permissions that are allowed by both the access policy of the role that -// is being assumed, and the policy that you pass. This gives you a way to further -// restrict the permissions for the resulting temporary security credentials. -// You cannot use the passed policy to grant permissions that are in excess -// of those allowed by the access policy of the role that is being assumed. -// For more information, see Permissions for AssumeRole, AssumeRoleWithSAML, -// and AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html) +// API calls to any AWS service with the following exception: You cannot call +// the AWS STS GetFederationToken or GetSessionToken API operations. +// +// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// to this operation. You can pass a single JSON policy document to use as an +// inline session policy. You can also specify up to 10 managed policies to +// use as managed session policies. The plain text that you use for both inline +// and managed session policies can't exceed 2,048 characters. Passing policies +// to this operation returns new temporary credentials. The resulting session's +// permissions are the intersection of the role's identity-based policy and +// the session policies. You can use the role's temporary credentials in subsequent +// AWS API calls to access resources in the account that owns the role. You +// cannot use session policies to grant more permissions than those allowed +// by the identity-based policy of the role that is being assumed. For more +// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// in the IAM User Guide. +// +// To assume a role from a different account, your AWS account must be trusted +// by the role. The trust relationship is defined in the role's trust policy +// when the role is created. That trust policy states which accounts are allowed +// to delegate that access to users in the account. +// +// A user who wants to access a role in a different account must also have permissions +// that are delegated from the user account administrator. The administrator +// must attach a policy that allows the user to call AssumeRole for the ARN +// of the role in the other account. If the user is in the same account as the +// role, then you can do either of the following: +// +// * Attach a policy to the user (identical to the previous user in a different +// account). +// +// * Add the user as a principal directly in the role's trust policy. +// +// In this case, the trust policy acts as an IAM resource-based policy. Users +// in the same account as the role do not need explicit permission to assume +// the role. For more information about trust policies and resource-based policies, +// see IAM Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) // in the IAM User Guide. // -// To assume a role, your AWS account must be trusted by the role. The trust -// relationship is defined in the role's trust policy when the role is created. -// That trust policy states which accounts are allowed to delegate access to -// this account's role. +// Tags // -// The user who wants to access the role must also have permissions delegated -// from the role's administrator. If the user is in a different account than -// the role, then the user's administrator must attach a policy that allows -// the user to call AssumeRole on the ARN of the role in the other account. -// If the user is in the same account as the role, then you can either attach -// a policy to the user (identical to the previous different account user), -// or you can add the user as a principal directly in the role's trust policy +// (Optional) You can pass tag key-value pairs to your session. These tags are +// called session tags. For more information about session tags, see Passing +// Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// An administrator must grant you the permissions necessary to pass session +// tags. The administrator can also create granular permissions to allow you +// to pass only specific session tags. For more information, see Tutorial: Using +// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) +// in the IAM User Guide. +// +// You can set the session tags as transitive. Transitive tags persist during +// role chaining. For more information, see Chaining Roles with Session Tags +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) +// in the IAM User Guide. // // Using MFA with AssumeRole // -// You can optionally include multi-factor authentication (MFA) information -// when you call AssumeRole. This is useful for cross-account scenarios in which -// you want to make sure that the user who is assuming the role has been authenticated -// using an AWS MFA device. In that scenario, the trust policy of the role being -// assumed includes a condition that tests for MFA authentication; if the caller -// does not include valid MFA information, the request to assume the role is -// denied. The condition in a trust policy that tests for MFA authentication -// might look like the following example. +// (Optional) You can include multi-factor authentication (MFA) information +// when you call AssumeRole. This is useful for cross-account scenarios to ensure +// that the user that assumes the role has been authenticated with an AWS MFA +// device. In that scenario, the trust policy of the role being assumed includes +// a condition that tests for MFA authentication. If the caller does not include +// valid MFA information, the request to assume the role is denied. The condition +// in a trust policy that tests for MFA authentication might look like the following +// example. // // "Condition": {"Bool": {"aws:MultiFactorAuthPresent": true}} // -// For more information, see Configuring MFA-Protected API Access (http://docs.aws.amazon.com/IAM/latest/UserGuide/MFAProtectedAPI.html) +// For more information, see Configuring MFA-Protected API Access (https://docs.aws.amazon.com/IAM/latest/UserGuide/MFAProtectedAPI.html) // in the IAM User Guide guide. // // To use MFA with AssumeRole, you pass values for the SerialNumber and TokenCode // parameters. The SerialNumber value identifies the user's hardware or virtual // MFA device. The TokenCode is the time-based one-time password (TOTP) that -// the MFA devices produces. +// the MFA device produces. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -158,41 +187,64 @@ func (c *STS) AssumeRoleRequest(input *AssumeRoleInput) (req *request.Request, o // message describes the specific error. // // * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" -// The request was rejected because the policy document was too large. The error -// message describes how big the policy document is, in packed form, as a percentage -// of what the API allows. +// The request was rejected because the total packed size of the session policies +// and session tags combined was too large. An AWS conversion compresses the +// session policy document, session policy ARNs, and session tags into a packed +// binary format that has a separate limit. The error message indicates by percentage +// how close the policies and tags are to the upper size limit. For more information, +// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You could receive this error even though you meet other defined session policy +// and session tag limits. For more information, see IAM and STS Entity Character +// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. // // * ErrCodeRegionDisabledException "RegionDisabledException" // STS is not activated in the requested region for the account that is being // asked to generate credentials. The account administrator must use the IAM // console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) // in the IAM User Guide. // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole func (c *STS) AssumeRole(input *AssumeRoleInput) (*AssumeRoleOutput, error) { req, out := c.AssumeRoleRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssumeRoleWithContext is the same as AssumeRole with the addition of +// the ability to pass a context and additional request options. +// +// See AssumeRole for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) AssumeRoleWithContext(ctx aws.Context, input *AssumeRoleInput, opts ...request.Option) (*AssumeRoleOutput, error) { + req, out := c.AssumeRoleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssumeRoleWithSAML = "AssumeRoleWithSAML" // AssumeRoleWithSAMLRequest generates a "aws/request.Request" representing the // client's request for the AssumeRoleWithSAML operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AssumeRoleWithSAML for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssumeRoleWithSAML method directly -// instead. +// See AssumeRoleWithSAML for more information on using the AssumeRoleWithSAML +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssumeRoleWithSAMLRequest method. // req, resp := client.AssumeRoleWithSAMLRequest(params) @@ -202,7 +254,7 @@ const opAssumeRoleWithSAML = "AssumeRoleWithSAML" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *request.Request, output *AssumeRoleWithSAMLOutput) { op := &request.Operation{ Name: opAssumeRoleWithSAML, @@ -216,6 +268,7 @@ func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *re output = &AssumeRoleWithSAMLOutput{} req = c.newRequest(op, input, output) + req.Config.Credentials = credentials.AnonymousCredentials return } @@ -225,46 +278,52 @@ func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *re // via a SAML authentication response. This operation provides a mechanism for // tying an enterprise identity store or directory to role-based AWS access // without user-specific credentials or configuration. For a comparison of AssumeRoleWithSAML -// with the other APIs that produce temporary credentials, see Requesting Temporary -// Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS APIs (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// with the other API operations that produce temporary credentials, see Requesting +// Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) // in the IAM User Guide. // // The temporary security credentials returned by this operation consist of // an access key ID, a secret access key, and a security token. Applications // can use these temporary security credentials to sign calls to AWS services. // -// The temporary security credentials are valid for the duration that you specified -// when calling AssumeRole, or until the time specified in the SAML authentication -// response's SessionNotOnOrAfter value, whichever is shorter. The duration -// can be from 900 seconds (15 minutes) to a maximum of 3600 seconds (1 hour). -// The default is 1 hour. +// Session Duration +// +// By default, the temporary security credentials created by AssumeRoleWithSAML +// last for one hour. However, you can use the optional DurationSeconds parameter +// to specify the duration of your session. Your role session lasts for the +// duration that you specify, or until the time specified in the SAML authentication +// response's SessionNotOnOrAfter value, whichever is shorter. You can provide +// a DurationSeconds value from 900 seconds (15 minutes) up to the maximum session +// duration setting for the role. This setting can have a value from 1 hour +// to 12 hours. To learn how to view the maximum value for your role, see View +// the Maximum Session Duration Setting for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) +// in the IAM User Guide. The maximum session duration limit applies when you +// use the AssumeRole* API operations or the assume-role* CLI commands. However +// the limit does not apply when you use those operations to create a console +// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) +// in the IAM User Guide. +// +// Permissions // // The temporary security credentials created by AssumeRoleWithSAML can be used // to make API calls to any AWS service with the following exception: you cannot -// call the STS service's GetFederationToken or GetSessionToken APIs. -// -// Optionally, you can pass an IAM access policy to this operation. If you choose -// not to pass a policy, the temporary security credentials that are returned -// by the operation have the permissions that are defined in the access policy -// of the role that is being assumed. If you pass a policy to this operation, -// the temporary security credentials that are returned by the operation have -// the permissions that are allowed by the intersection of both the access policy -// of the role that is being assumed, and the policy that you pass. This means -// that both policies must grant the permission for the action to be allowed. -// This gives you a way to further restrict the permissions for the resulting -// temporary security credentials. You cannot use the passed policy to grant -// permissions that are in excess of those allowed by the access policy of the -// role that is being assumed. For more information, see Permissions for AssumeRole, -// AssumeRoleWithSAML, and AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html) +// call the STS GetFederationToken or GetSessionToken API operations. +// +// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// to this operation. You can pass a single JSON policy document to use as an +// inline session policy. You can also specify up to 10 managed policies to +// use as managed session policies. The plain text that you use for both inline +// and managed session policies can't exceed 2,048 characters. Passing policies +// to this operation returns new temporary credentials. The resulting session's +// permissions are the intersection of the role's identity-based policy and +// the session policies. You can use the role's temporary credentials in subsequent +// AWS API calls to access resources in the account that owns the role. You +// cannot use session policies to grant more permissions than those allowed +// by the identity-based policy of the role that is being assumed. For more +// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) // in the IAM User Guide. // -// Before your application can call AssumeRoleWithSAML, you must configure your -// SAML identity provider (IdP) to issue the claims required by AWS. Additionally, -// you must use AWS Identity and Access Management (IAM) to create a SAML provider -// entity in your AWS account that represents your identity provider, and create -// an IAM role that specifies this SAML provider in its trust policy. -// // Calling AssumeRoleWithSAML does not require the use of AWS security credentials. // The identity of the caller is validated by using keys in the metadata document // that is uploaded for the SAML provider entity for your identity provider. @@ -272,21 +331,63 @@ func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *re // Calling AssumeRoleWithSAML can result in an entry in your AWS CloudTrail // logs. The entry includes the value in the NameID element of the SAML assertion. // We recommend that you use a NameIDType that is not associated with any personally -// identifiable information (PII). For example, you could instead use the Persistent -// Identifier (urn:oasis:names:tc:SAML:2.0:nameid-format:persistent). +// identifiable information (PII). For example, you could instead use the persistent +// identifier (urn:oasis:names:tc:SAML:2.0:nameid-format:persistent). +// +// Tags +// +// (Optional) You can configure your IdP to pass attributes into your SAML assertion +// as session tags. Each session tag consists of a key name and an associated +// value. For more information about session tags, see Passing Session Tags +// in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You can pass up to 50 session tags. The plain text session tag keys can’t +// exceed 128 characters and the values can’t exceed 256 characters. For these +// and additional limits, see IAM and STS Character Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) +// in the IAM User Guide. +// +// An AWS conversion compresses the passed session policies and session tags +// into a packed binary format that has a separate limit. Your request can fail +// for this limit even if your plain text meets the other requirements. The +// PackedPolicySize response element indicates by percentage how close the policies +// and tags for your request are to the upper size limit. +// +// You can pass a session tag with the same key as a tag that is attached to +// the role. When you do, session tags override the role's tags with the same +// key. +// +// An administrator must grant you the permissions necessary to pass session +// tags. The administrator can also create granular permissions to allow you +// to pass only specific session tags. For more information, see Tutorial: Using +// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) +// in the IAM User Guide. +// +// You can set the session tags as transitive. Transitive tags persist during +// role chaining. For more information, see Chaining Roles with Session Tags +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) +// in the IAM User Guide. +// +// SAML Configuration +// +// Before your application can call AssumeRoleWithSAML, you must configure your +// SAML identity provider (IdP) to issue the claims required by AWS. Additionally, +// you must use AWS Identity and Access Management (IAM) to create a SAML provider +// entity in your AWS account that represents your identity provider. You must +// also create an IAM role that specifies this SAML provider in its trust policy. // // For more information, see the following resources: // -// * About SAML 2.0-based Federation (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html) +// * About SAML 2.0-based Federation (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html) // in the IAM User Guide. // -// * Creating SAML Identity Providers (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html) +// * Creating SAML Identity Providers (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html) // in the IAM User Guide. // -// * Configuring a Relying Party and Claims (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html) +// * Configuring a Relying Party and Claims (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html) // in the IAM User Guide. // -// * Creating a Role for SAML 2.0 Federation (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html) +// * Creating a Role for SAML 2.0 Federation (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html) // in the IAM User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -302,9 +403,18 @@ func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *re // message describes the specific error. // // * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" -// The request was rejected because the policy document was too large. The error -// message describes how big the policy document is, in packed form, as a percentage -// of what the API allows. +// The request was rejected because the total packed size of the session policies +// and session tags combined was too large. An AWS conversion compresses the +// session policy document, session policy ARNs, and session tags into a packed +// binary format that has a separate limit. The error message indicates by percentage +// how close the policies and tags are to the upper size limit. For more information, +// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You could receive this error even though you meet other defined session policy +// and session tag limits. For more information, see IAM and STS Entity Character +// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. // // * ErrCodeIDPRejectedClaimException "IDPRejectedClaim" // The identity provider (IdP) reported that authentication failed. This might @@ -325,33 +435,47 @@ func (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *re // STS is not activated in the requested region for the account that is being // asked to generate credentials. The account administrator must use the IAM // console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) // in the IAM User Guide. // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML func (c *STS) AssumeRoleWithSAML(input *AssumeRoleWithSAMLInput) (*AssumeRoleWithSAMLOutput, error) { req, out := c.AssumeRoleWithSAMLRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssumeRoleWithSAMLWithContext is the same as AssumeRoleWithSAML with the addition of +// the ability to pass a context and additional request options. +// +// See AssumeRoleWithSAML for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) AssumeRoleWithSAMLWithContext(ctx aws.Context, input *AssumeRoleWithSAMLInput, opts ...request.Option) (*AssumeRoleWithSAMLOutput, error) { + req, out := c.AssumeRoleWithSAMLRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opAssumeRoleWithWebIdentity = "AssumeRoleWithWebIdentity" // AssumeRoleWithWebIdentityRequest generates a "aws/request.Request" representing the // client's request for the AssumeRoleWithWebIdentity operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See AssumeRoleWithWebIdentity for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the AssumeRoleWithWebIdentity method directly -// instead. +// See AssumeRoleWithWebIdentity for more information on using the AssumeRoleWithWebIdentity +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the AssumeRoleWithWebIdentityRequest method. // req, resp := client.AssumeRoleWithWebIdentityRequest(params) @@ -361,7 +485,7 @@ const opAssumeRoleWithWebIdentity = "AssumeRoleWithWebIdentity" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityInput) (req *request.Request, output *AssumeRoleWithWebIdentityOutput) { op := &request.Operation{ Name: opAssumeRoleWithWebIdentity, @@ -375,64 +499,114 @@ func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityI output = &AssumeRoleWithWebIdentityOutput{} req = c.newRequest(op, input, output) + req.Config.Credentials = credentials.AnonymousCredentials return } // AssumeRoleWithWebIdentity API operation for AWS Security Token Service. // // Returns a set of temporary security credentials for users who have been authenticated -// in a mobile or web application with a web identity provider, such as Amazon -// Cognito, Login with Amazon, Facebook, Google, or any OpenID Connect-compatible -// identity provider. +// in a mobile or web application with a web identity provider. Example providers +// include Amazon Cognito, Login with Amazon, Facebook, Google, or any OpenID +// Connect-compatible identity provider. // // For mobile applications, we recommend that you use Amazon Cognito. You can -// use Amazon Cognito with the AWS SDK for iOS (http://aws.amazon.com/sdkforios/) -// and the AWS SDK for Android (http://aws.amazon.com/sdkforandroid/) to uniquely -// identify a user and supply the user with a consistent identity throughout -// the lifetime of an application. -// -// To learn more about Amazon Cognito, see Amazon Cognito Overview (http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html#d0e840) -// in the AWS SDK for Android Developer Guide guide and Amazon Cognito Overview -// (http://docs.aws.amazon.com/mobile/sdkforios/developerguide/cognito-auth.html#d0e664) +// use Amazon Cognito with the AWS SDK for iOS Developer Guide (http://aws.amazon.com/sdkforios/) +// and the AWS SDK for Android Developer Guide (http://aws.amazon.com/sdkforandroid/) +// to uniquely identify a user. You can also supply the user with a consistent +// identity throughout the lifetime of an application. +// +// To learn more about Amazon Cognito, see Amazon Cognito Overview (https://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html#d0e840) +// in AWS SDK for Android Developer Guide and Amazon Cognito Overview (https://docs.aws.amazon.com/mobile/sdkforios/developerguide/cognito-auth.html#d0e664) // in the AWS SDK for iOS Developer Guide. // // Calling AssumeRoleWithWebIdentity does not require the use of AWS security // credentials. Therefore, you can distribute an application (for example, on // mobile devices) that requests temporary security credentials without including -// long-term AWS credentials in the application, and without deploying server-based -// proxy services that use long-term AWS credentials. Instead, the identity -// of the caller is validated by using a token from the web identity provider. -// For a comparison of AssumeRoleWithWebIdentity with the other APIs that produce -// temporary credentials, see Requesting Temporary Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS APIs (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// long-term AWS credentials in the application. You also don't need to deploy +// server-based proxy services that use long-term AWS credentials. Instead, +// the identity of the caller is validated by using a token from the web identity +// provider. For a comparison of AssumeRoleWithWebIdentity with the other API +// operations that produce temporary credentials, see Requesting Temporary Security +// Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) // in the IAM User Guide. // // The temporary security credentials returned by this API consist of an access // key ID, a secret access key, and a security token. Applications can use these -// temporary security credentials to sign calls to AWS service APIs. +// temporary security credentials to sign calls to AWS service API operations. +// +// Session Duration +// +// By default, the temporary security credentials created by AssumeRoleWithWebIdentity +// last for one hour. However, you can use the optional DurationSeconds parameter +// to specify the duration of your session. You can provide a value from 900 +// seconds (15 minutes) up to the maximum session duration setting for the role. +// This setting can have a value from 1 hour to 12 hours. To learn how to view +// the maximum value for your role, see View the Maximum Session Duration Setting +// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) +// in the IAM User Guide. The maximum session duration limit applies when you +// use the AssumeRole* API operations or the assume-role* CLI commands. However +// the limit does not apply when you use those operations to create a console +// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) +// in the IAM User Guide. // -// The credentials are valid for the duration that you specified when calling -// AssumeRoleWithWebIdentity, which can be from 900 seconds (15 minutes) to -// a maximum of 3600 seconds (1 hour). The default is 1 hour. +// Permissions // // The temporary security credentials created by AssumeRoleWithWebIdentity can // be used to make API calls to any AWS service with the following exception: -// you cannot call the STS service's GetFederationToken or GetSessionToken APIs. -// -// Optionally, you can pass an IAM access policy to this operation. If you choose -// not to pass a policy, the temporary security credentials that are returned -// by the operation have the permissions that are defined in the access policy -// of the role that is being assumed. If you pass a policy to this operation, -// the temporary security credentials that are returned by the operation have -// the permissions that are allowed by both the access policy of the role that -// is being assumed, and the policy that you pass. This gives you a way to further -// restrict the permissions for the resulting temporary security credentials. -// You cannot use the passed policy to grant permissions that are in excess -// of those allowed by the access policy of the role that is being assumed. -// For more information, see Permissions for AssumeRole, AssumeRoleWithSAML, -// and AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html) +// you cannot call the STS GetFederationToken or GetSessionToken API operations. +// +// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// to this operation. You can pass a single JSON policy document to use as an +// inline session policy. You can also specify up to 10 managed policies to +// use as managed session policies. The plain text that you use for both inline +// and managed session policies can't exceed 2,048 characters. Passing policies +// to this operation returns new temporary credentials. The resulting session's +// permissions are the intersection of the role's identity-based policy and +// the session policies. You can use the role's temporary credentials in subsequent +// AWS API calls to access resources in the account that owns the role. You +// cannot use session policies to grant more permissions than those allowed +// by the identity-based policy of the role that is being assumed. For more +// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// in the IAM User Guide. +// +// Tags +// +// (Optional) You can configure your IdP to pass attributes into your web identity +// token as session tags. Each session tag consists of a key name and an associated +// value. For more information about session tags, see Passing Session Tags +// in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You can pass up to 50 session tags. The plain text session tag keys can’t +// exceed 128 characters and the values can’t exceed 256 characters. For these +// and additional limits, see IAM and STS Character Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) +// in the IAM User Guide. +// +// An AWS conversion compresses the passed session policies and session tags +// into a packed binary format that has a separate limit. Your request can fail +// for this limit even if your plain text meets the other requirements. The +// PackedPolicySize response element indicates by percentage how close the policies +// and tags for your request are to the upper size limit. +// +// You can pass a session tag with the same key as a tag that is attached to +// the role. When you do, the session tag overrides the role tag with the same +// key. +// +// An administrator must grant you the permissions necessary to pass session +// tags. The administrator can also create granular permissions to allow you +// to pass only specific session tags. For more information, see Tutorial: Using +// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) +// in the IAM User Guide. +// +// You can set the session tags as transitive. Transitive tags persist during +// role chaining. For more information, see Chaining Roles with Session Tags +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) // in the IAM User Guide. // +// Identities +// // Before your application can call AssumeRoleWithWebIdentity, you must have // an identity token from a supported identity provider and create a role that // the application can assume. The role that your application assumes must trust @@ -449,23 +623,21 @@ func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityI // For more information about how to use web identity federation and the AssumeRoleWithWebIdentity // API, see the following resources: // -// * Using Web Identity Federation APIs for Mobile Apps (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html) -// and Federation Through a Web-based Identity Provider (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity). -// +// * Using Web Identity Federation API Operations for Mobile Apps (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html) +// and Federation Through a Web-based Identity Provider (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity). // -// * Web Identity Federation Playground (https://web-identity-federation-playground.s3.amazonaws.com/index.html). -// This interactive website lets you walk through the process of authenticating -// via Login with Amazon, Facebook, or Google, getting temporary security -// credentials, and then using those credentials to make a request to AWS. +// * Web Identity Federation Playground (https://web-identity-federation-playground.s3.amazonaws.com/index.html). +// Walk through the process of authenticating through Login with Amazon, +// Facebook, or Google, getting temporary security credentials, and then +// using those credentials to make a request to AWS. // +// * AWS SDK for iOS Developer Guide (http://aws.amazon.com/sdkforios/) and +// AWS SDK for Android Developer Guide (http://aws.amazon.com/sdkforandroid/). +// These toolkits contain sample apps that show how to invoke the identity +// providers. The toolkits then show how to use the information from these +// providers to get and use temporary security credentials. // -// * AWS SDK for iOS (http://aws.amazon.com/sdkforios/) and AWS SDK for Android -// (http://aws.amazon.com/sdkforandroid/). These toolkits contain sample -// apps that show how to invoke the identity providers, and then how to use -// the information from these providers to get and use temporary security -// credentials. -// -// * Web Identity Federation with Mobile Applications (http://aws.amazon.com/articles/4617974389850313). +// * Web Identity Federation with Mobile Applications (http://aws.amazon.com/articles/web-identity-federation-with-mobile-applications). // This article discusses web identity federation and shows an example of // how to use web identity federation to get access to content in Amazon // S3. @@ -483,9 +655,18 @@ func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityI // message describes the specific error. // // * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" -// The request was rejected because the policy document was too large. The error -// message describes how big the policy document is, in packed form, as a percentage -// of what the API allows. +// The request was rejected because the total packed size of the session policies +// and session tags combined was too large. An AWS conversion compresses the +// session policy document, session policy ARNs, and session tags into a packed +// binary format that has a separate limit. The error message indicates by percentage +// how close the policies and tags are to the upper size limit. For more information, +// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You could receive this error even though you meet other defined session policy +// and session tag limits. For more information, see IAM and STS Entity Character +// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. // // * ErrCodeIDPRejectedClaimException "IDPRejectedClaim" // The identity provider (IdP) reported that authentication failed. This might @@ -495,11 +676,11 @@ func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityI // can also mean that the claim has expired or has been explicitly revoked. // // * ErrCodeIDPCommunicationErrorException "IDPCommunicationError" -// The request could not be fulfilled because the non-AWS identity provider -// (IDP) that was asked to verify the incoming identity token could not be reached. -// This is often a transient error caused by network conditions. Retry the request +// The request could not be fulfilled because the identity provider (IDP) that +// was asked to verify the incoming identity token could not be reached. This +// is often a transient error caused by network conditions. Retry the request // a limited number of times so that you don't exceed the request rate. If the -// error persists, the non-AWS identity provider might be down or not responding. +// error persists, the identity provider might be down or not responding. // // * ErrCodeInvalidIdentityTokenException "InvalidIdentityToken" // The web identity token that was passed could not be validated by AWS. Get @@ -513,33 +694,47 @@ func (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityI // STS is not activated in the requested region for the account that is being // asked to generate credentials. The account administrator must use the IAM // console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) // in the IAM User Guide. // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity func (c *STS) AssumeRoleWithWebIdentity(input *AssumeRoleWithWebIdentityInput) (*AssumeRoleWithWebIdentityOutput, error) { req, out := c.AssumeRoleWithWebIdentityRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// AssumeRoleWithWebIdentityWithContext is the same as AssumeRoleWithWebIdentity with the addition of +// the ability to pass a context and additional request options. +// +// See AssumeRoleWithWebIdentity for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) AssumeRoleWithWebIdentityWithContext(ctx aws.Context, input *AssumeRoleWithWebIdentityInput, opts ...request.Option) (*AssumeRoleWithWebIdentityOutput, error) { + req, out := c.AssumeRoleWithWebIdentityRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opDecodeAuthorizationMessage = "DecodeAuthorizationMessage" // DecodeAuthorizationMessageRequest generates a "aws/request.Request" representing the // client's request for the DecodeAuthorizationMessage operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See DecodeAuthorizationMessage for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the DecodeAuthorizationMessage method directly -// instead. +// See DecodeAuthorizationMessage for more information on using the DecodeAuthorizationMessage +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the DecodeAuthorizationMessageRequest method. // req, resp := client.DecodeAuthorizationMessageRequest(params) @@ -549,7 +744,7 @@ const opDecodeAuthorizationMessage = "DecodeAuthorizationMessage" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage func (c *STS) DecodeAuthorizationMessageRequest(input *DecodeAuthorizationMessageInput) (req *request.Request, output *DecodeAuthorizationMessageOutput) { op := &request.Operation{ Name: opDecodeAuthorizationMessage, @@ -571,17 +766,17 @@ func (c *STS) DecodeAuthorizationMessageRequest(input *DecodeAuthorizationMessag // Decodes additional information about the authorization status of a request // from an encoded message returned in response to an AWS request. // -// For example, if a user is not authorized to perform an action that he or -// she has requested, the request returns a Client.UnauthorizedOperation response -// (an HTTP 403 response). Some AWS actions additionally return an encoded message -// that can provide details about this authorization failure. +// For example, if a user is not authorized to perform an operation that he +// or she has requested, the request returns a Client.UnauthorizedOperation +// response (an HTTP 403 response). Some AWS operations additionally return +// an encoded message that can provide details about this authorization failure. // -// Only certain AWS actions return an encoded authorization message. The documentation -// for an individual action indicates whether that action returns an encoded -// message in addition to returning an HTTP code. +// Only certain AWS operations return an encoded authorization message. The +// documentation for an individual operation indicates whether that operation +// returns an encoded message in addition to returning an HTTP code. // // The message is encoded because the details of the authorization status can -// constitute privileged information that the user who requested the action +// constitute privileged information that the user who requested the operation // should not see. To decode an authorization status message, a user must be // granted permissions via an IAM policy to request the DecodeAuthorizationMessage // (sts:DecodeAuthorizationMessage) action. @@ -590,7 +785,7 @@ func (c *STS) DecodeAuthorizationMessageRequest(input *DecodeAuthorizationMessag // // * Whether the request was denied due to an explicit deny or due to the // absence of an explicit allow. For more information, see Determining Whether -// a Request is Allowed or Denied (http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) +// a Request is Allowed or Denied (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow) // in the IAM User Guide. // // * The principal who made the request. @@ -614,30 +809,141 @@ func (c *STS) DecodeAuthorizationMessageRequest(input *DecodeAuthorizationMessag // invalid. This can happen if the token contains invalid characters, such as // linebreaks. // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage func (c *STS) DecodeAuthorizationMessage(input *DecodeAuthorizationMessageInput) (*DecodeAuthorizationMessageOutput, error) { req, out := c.DecodeAuthorizationMessageRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// DecodeAuthorizationMessageWithContext is the same as DecodeAuthorizationMessage with the addition of +// the ability to pass a context and additional request options. +// +// See DecodeAuthorizationMessage for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) DecodeAuthorizationMessageWithContext(ctx aws.Context, input *DecodeAuthorizationMessageInput, opts ...request.Option) (*DecodeAuthorizationMessageOutput, error) { + req, out := c.DecodeAuthorizationMessageRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opGetAccessKeyInfo = "GetAccessKeyInfo" + +// GetAccessKeyInfoRequest generates a "aws/request.Request" representing the +// client's request for the GetAccessKeyInfo operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See GetAccessKeyInfo for more information on using the GetAccessKeyInfo +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the GetAccessKeyInfoRequest method. +// req, resp := client.GetAccessKeyInfoRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetAccessKeyInfo +func (c *STS) GetAccessKeyInfoRequest(input *GetAccessKeyInfoInput) (req *request.Request, output *GetAccessKeyInfoOutput) { + op := &request.Operation{ + Name: opGetAccessKeyInfo, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &GetAccessKeyInfoInput{} + } + + output = &GetAccessKeyInfoOutput{} + req = c.newRequest(op, input, output) + return +} + +// GetAccessKeyInfo API operation for AWS Security Token Service. +// +// Returns the account identifier for the specified access key ID. +// +// Access keys consist of two parts: an access key ID (for example, AKIAIOSFODNN7EXAMPLE) +// and a secret access key (for example, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY). +// For more information about access keys, see Managing Access Keys for IAM +// Users (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) +// in the IAM User Guide. +// +// When you pass an access key ID to this operation, it returns the ID of the +// AWS account to which the keys belong. Access key IDs beginning with AKIA +// are long-term credentials for an IAM user or the AWS account root user. Access +// key IDs beginning with ASIA are temporary credentials that are created using +// STS operations. If the account in the response belongs to you, you can sign +// in as the root user and review your root user access keys. Then, you can +// pull a credentials report (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_getting-report.html) +// to learn which IAM user owns the keys. To learn who requested the temporary +// credentials for an ASIA access key, view the STS events in your CloudTrail +// logs (https://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html) +// in the IAM User Guide. +// +// This operation does not indicate the state of the access key. The key might +// be active, inactive, or deleted. Active keys might not have permissions to +// perform an operation. Providing a deleted access key might return an error +// that the key doesn't exist. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for AWS Security Token Service's +// API operation GetAccessKeyInfo for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetAccessKeyInfo +func (c *STS) GetAccessKeyInfo(input *GetAccessKeyInfoInput) (*GetAccessKeyInfoOutput, error) { + req, out := c.GetAccessKeyInfoRequest(input) + return out, req.Send() +} + +// GetAccessKeyInfoWithContext is the same as GetAccessKeyInfo with the addition of +// the ability to pass a context and additional request options. +// +// See GetAccessKeyInfo for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) GetAccessKeyInfoWithContext(ctx aws.Context, input *GetAccessKeyInfoInput, opts ...request.Option) (*GetAccessKeyInfoOutput, error) { + req, out := c.GetAccessKeyInfoRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opGetCallerIdentity = "GetCallerIdentity" // GetCallerIdentityRequest generates a "aws/request.Request" representing the // client's request for the GetCallerIdentity operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See GetCallerIdentity for usage and error information. +// See GetCallerIdentity for more information on using the GetCallerIdentity +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the GetCallerIdentity method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the GetCallerIdentityRequest method. // req, resp := client.GetCallerIdentityRequest(params) @@ -647,7 +953,7 @@ const opGetCallerIdentity = "GetCallerIdentity" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity func (c *STS) GetCallerIdentityRequest(input *GetCallerIdentityInput) (req *request.Request, output *GetCallerIdentityOutput) { op := &request.Operation{ Name: opGetCallerIdentity, @@ -666,8 +972,16 @@ func (c *STS) GetCallerIdentityRequest(input *GetCallerIdentityInput) (req *requ // GetCallerIdentity API operation for AWS Security Token Service. // -// Returns details about the IAM identity whose credentials are used to call -// the API. +// Returns details about the IAM user or role whose credentials are used to +// call the operation. +// +// No permissions are required to perform this operation. If an administrator +// adds a policy to your IAM user or role that explicitly denies access to the +// sts:GetCallerIdentity action, you can still perform this operation. Permissions +// are not required because the same information is returned when an IAM user +// or role is denied access. To view an example response, see I Am Not Authorized +// to Perform: iam:DeleteVirtualMFADevice (https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html#troubleshoot_general_access-denied-delete-mfa) +// in the IAM User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -675,30 +989,44 @@ func (c *STS) GetCallerIdentityRequest(input *GetCallerIdentityInput) (req *requ // // See the AWS API reference guide for AWS Security Token Service's // API operation GetCallerIdentity for usage and error information. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity func (c *STS) GetCallerIdentity(input *GetCallerIdentityInput) (*GetCallerIdentityOutput, error) { req, out := c.GetCallerIdentityRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// GetCallerIdentityWithContext is the same as GetCallerIdentity with the addition of +// the ability to pass a context and additional request options. +// +// See GetCallerIdentity for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) GetCallerIdentityWithContext(ctx aws.Context, input *GetCallerIdentityInput, opts ...request.Option) (*GetCallerIdentityOutput, error) { + req, out := c.GetCallerIdentityRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opGetFederationToken = "GetFederationToken" // GetFederationTokenRequest generates a "aws/request.Request" representing the // client's request for the GetFederationToken operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// See GetFederationToken for usage and error information. +// See GetFederationToken for more information on using the GetFederationToken +// API call, and error handling. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the GetFederationToken method directly -// instead. +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the GetFederationTokenRequest method. // req, resp := client.GetFederationTokenRequest(params) @@ -708,7 +1036,7 @@ const opGetFederationToken = "GetFederationToken" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken func (c *STS) GetFederationTokenRequest(input *GetFederationTokenInput) (req *request.Request, output *GetFederationTokenOutput) { op := &request.Operation{ Name: opGetFederationToken, @@ -730,81 +1058,92 @@ func (c *STS) GetFederationTokenRequest(input *GetFederationTokenInput) (req *re // Returns a set of temporary security credentials (consisting of an access // key ID, a secret access key, and a security token) for a federated user. // A typical use is in a proxy application that gets temporary security credentials -// on behalf of distributed applications inside a corporate network. Because -// you must call the GetFederationToken action using the long-term security -// credentials of an IAM user, this call is appropriate in contexts where those +// on behalf of distributed applications inside a corporate network. You must +// call the GetFederationToken operation using the long-term security credentials +// of an IAM user. As a result, this call is appropriate in contexts where those // credentials can be safely stored, usually in a server-based application. -// For a comparison of GetFederationToken with the other APIs that produce temporary -// credentials, see Requesting Temporary Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS APIs (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// For a comparison of GetFederationToken with the other API operations that +// produce temporary credentials, see Requesting Temporary Security Credentials +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) // in the IAM User Guide. // -// If you are creating a mobile-based or browser-based app that can authenticate +// You can create a mobile-based or browser-based app that can authenticate // users using a web identity provider like Login with Amazon, Facebook, Google, -// or an OpenID Connect-compatible identity provider, we recommend that you -// use Amazon Cognito (http://aws.amazon.com/cognito/) or AssumeRoleWithWebIdentity. +// or an OpenID Connect-compatible identity provider. In this case, we recommend +// that you use Amazon Cognito (http://aws.amazon.com/cognito/) or AssumeRoleWithWebIdentity. // For more information, see Federation Through a Web-based Identity Provider -// (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity). -// -// The GetFederationToken action must be called by using the long-term AWS security -// credentials of an IAM user. You can also call GetFederationToken using the -// security credentials of an AWS root account, but we do not recommended it. -// Instead, we recommend that you create an IAM user for the purpose of the -// proxy application and then attach a policy to the IAM user that limits federated -// users to only the actions and resources that they need access to. For more -// information, see IAM Best Practices (http://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) +// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity) // in the IAM User Guide. // -// The temporary security credentials that are obtained by using the long-term -// credentials of an IAM user are valid for the specified duration, from 900 -// seconds (15 minutes) up to a maximium of 129600 seconds (36 hours). The default -// is 43200 seconds (12 hours). Temporary credentials that are obtained by using -// AWS root account credentials have a maximum duration of 3600 seconds (1 hour). -// -// The temporary security credentials created by GetFederationToken can be used -// to make API calls to any AWS service with the following exceptions: +// You can also call GetFederationToken using the security credentials of an +// AWS account root user, but we do not recommend it. Instead, we recommend +// that you create an IAM user for the purpose of the proxy application. Then +// attach a policy to the IAM user that limits federated users to only the actions +// and resources that they need to access. For more information, see IAM Best +// Practices (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) +// in the IAM User Guide. // -// * You cannot use these credentials to call any IAM APIs. +// Session duration // -// * You cannot call any STS APIs except GetCallerIdentity. +// The temporary credentials are valid for the specified duration, from 900 +// seconds (15 minutes) up to a maximum of 129,600 seconds (36 hours). The default +// session duration is 43,200 seconds (12 hours). Temporary credentials that +// are obtained by using AWS account root user credentials have a maximum duration +// of 3,600 seconds (1 hour). // // Permissions // -// The permissions for the temporary security credentials returned by GetFederationToken -// are determined by a combination of the following: -// -// * The policy or policies that are attached to the IAM user whose credentials -// are used to call GetFederationToken. -// -// * The policy that is passed as a parameter in the call. -// -// The passed policy is attached to the temporary security credentials that -// result from the GetFederationToken API call--that is, to the federated user. -// When the federated user makes an AWS request, AWS evaluates the policy attached -// to the federated user in combination with the policy or policies attached -// to the IAM user whose credentials were used to call GetFederationToken. AWS -// allows the federated user's request only when both the federated user and -// the IAM user are explicitly allowed to perform the requested action. The -// passed policy cannot grant more permissions than those that are defined in -// the IAM user policy. -// -// A typical use case is that the permissions of the IAM user whose credentials -// are used to call GetFederationToken are designed to allow access to all the -// actions and resources that any federated user will need. Then, for individual -// users, you pass a policy to the operation that scopes down the permissions -// to a level that's appropriate to that individual user, using a policy that -// allows only a subset of permissions that are granted to the IAM user. -// -// If you do not pass a policy, the resulting temporary security credentials -// have no effective permissions. The only exception is when the temporary security -// credentials are used to access a resource that has a resource-based policy -// that specifically allows the federated user to access the resource. -// -// For more information about how permissions work, see Permissions for GetFederationToken -// (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_getfederationtoken.html). -// For information about using GetFederationToken to create temporary security -// credentials, see GetFederationToken—Federation Through a Custom Identity -// Broker (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getfederationtoken). +// You can use the temporary credentials created by GetFederationToken in any +// AWS service except the following: +// +// * You cannot call any IAM operations using the AWS CLI or the AWS API. +// +// * You cannot call any STS operations except GetCallerIdentity. +// +// You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// to this operation. You can pass a single JSON policy document to use as an +// inline session policy. You can also specify up to 10 managed policies to +// use as managed session policies. The plain text that you use for both inline +// and managed session policies can't exceed 2,048 characters. +// +// Though the session policy parameters are optional, if you do not pass a policy, +// then the resulting federated user session has no permissions. When you pass +// session policies, the session permissions are the intersection of the IAM +// user policies and the session policies that you pass. This gives you a way +// to further restrict the permissions for a federated user. You cannot use +// session policies to grant more permissions than those that are defined in +// the permissions policy of the IAM user. For more information, see Session +// Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) +// in the IAM User Guide. For information about using GetFederationToken to +// create temporary security credentials, see GetFederationToken—Federation +// Through a Custom Identity Broker (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getfederationtoken). +// +// You can use the credentials to access a resource that has a resource-based +// policy. If that policy specifically references the federated user session +// in the Principal element of the policy, the session has the permissions allowed +// by the policy. These permissions are granted in addition to the permissions +// granted by the session policies. +// +// Tags +// +// (Optional) You can pass tag key-value pairs to your session. These are called +// session tags. For more information about session tags, see Passing Session +// Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// An administrator must grant you the permissions necessary to pass session +// tags. The administrator can also create granular permissions to allow you +// to pass only specific session tags. For more information, see Tutorial: Using +// Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html) +// in the IAM User Guide. +// +// Tag key–value pairs are not case sensitive, but case is preserved. This +// means that you cannot have separate Department and department tag keys. Assume +// that the user that you are federating has the Department=Marketing tag and +// you pass the department=engineering session tag. Department and department +// are not saved as separate tags, and the session tag passed in the request +// takes precedence over the user tag. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions // with awserr.Error's Code and Message methods to get detailed information about @@ -819,41 +1158,64 @@ func (c *STS) GetFederationTokenRequest(input *GetFederationTokenInput) (req *re // message describes the specific error. // // * ErrCodePackedPolicyTooLargeException "PackedPolicyTooLarge" -// The request was rejected because the policy document was too large. The error -// message describes how big the policy document is, in packed form, as a percentage -// of what the API allows. +// The request was rejected because the total packed size of the session policies +// and session tags combined was too large. An AWS conversion compresses the +// session policy document, session policy ARNs, and session tags into a packed +// binary format that has a separate limit. The error message indicates by percentage +// how close the policies and tags are to the upper size limit. For more information, +// see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +// +// You could receive this error even though you meet other defined session policy +// and session tag limits. For more information, see IAM and STS Entity Character +// Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. // // * ErrCodeRegionDisabledException "RegionDisabledException" // STS is not activated in the requested region for the account that is being // asked to generate credentials. The account administrator must use the IAM // console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) // in the IAM User Guide. // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken func (c *STS) GetFederationToken(input *GetFederationTokenInput) (*GetFederationTokenOutput, error) { req, out := c.GetFederationTokenRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// GetFederationTokenWithContext is the same as GetFederationToken with the addition of +// the ability to pass a context and additional request options. +// +// See GetFederationToken for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) GetFederationTokenWithContext(ctx aws.Context, input *GetFederationTokenInput, opts ...request.Option) (*GetFederationTokenOutput, error) { + req, out := c.GetFederationTokenRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } const opGetSessionToken = "GetSessionToken" // GetSessionTokenRequest generates a "aws/request.Request" representing the // client's request for the GetSessionToken operation. The "output" return -// value can be used to capture response data after the request's "Send" method -// is called. +// value will be populated with the request's response once the request completes +// successfully. // -// See GetSessionToken for usage and error information. +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. // -// Creating a request object using this method should be used when you want to inject -// custom logic into the request's lifecycle using a custom handler, or if you want to -// access properties on the request object before or after sending the request. If -// you just want the service response, call the GetSessionToken method directly -// instead. +// See GetSessionToken for more information on using the GetSessionToken +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. // -// Note: You must call the "Send" method on the returned request object in order -// to execute the request. // // // Example sending a request using the GetSessionTokenRequest method. // req, resp := client.GetSessionTokenRequest(params) @@ -863,7 +1225,7 @@ const opGetSessionToken = "GetSessionToken" // fmt.Println(resp) // } // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken func (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *request.Request, output *GetSessionTokenOutput) { op := &request.Operation{ Name: opGetSessionToken, @@ -885,48 +1247,51 @@ func (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *request. // Returns a set of temporary credentials for an AWS account or IAM user. The // credentials consist of an access key ID, a secret access key, and a security // token. Typically, you use GetSessionToken if you want to use MFA to protect -// programmatic calls to specific AWS APIs like Amazon EC2 StopInstances. MFA-enabled -// IAM users would need to call GetSessionToken and submit an MFA code that -// is associated with their MFA device. Using the temporary security credentials -// that are returned from the call, IAM users can then make programmatic calls -// to APIs that require MFA authentication. If you do not supply a correct MFA -// code, then the API returns an access denied error. For a comparison of GetSessionToken -// with the other APIs that produce temporary credentials, see Requesting Temporary -// Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) -// and Comparing the AWS STS APIs (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) +// programmatic calls to specific AWS API operations like Amazon EC2 StopInstances. +// MFA-enabled IAM users would need to call GetSessionToken and submit an MFA +// code that is associated with their MFA device. Using the temporary security +// credentials that are returned from the call, IAM users can then make programmatic +// calls to API operations that require MFA authentication. If you do not supply +// a correct MFA code, then the API returns an access denied error. For a comparison +// of GetSessionToken with the other API operations that produce temporary credentials, +// see Requesting Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) +// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) // in the IAM User Guide. // -// The GetSessionToken action must be called by using the long-term AWS security -// credentials of the AWS account or an IAM user. Credentials that are created -// by IAM users are valid for the duration that you specify, from 900 seconds -// (15 minutes) up to a maximum of 129600 seconds (36 hours), with a default -// of 43200 seconds (12 hours); credentials that are created by using account -// credentials can range from 900 seconds (15 minutes) up to a maximum of 3600 -// seconds (1 hour), with a default of 1 hour. +// Session Duration +// +// The GetSessionToken operation must be called by using the long-term AWS security +// credentials of the AWS account root user or an IAM user. Credentials that +// are created by IAM users are valid for the duration that you specify. This +// duration can range from 900 seconds (15 minutes) up to a maximum of 129,600 +// seconds (36 hours), with a default of 43,200 seconds (12 hours). Credentials +// based on account credentials can range from 900 seconds (15 minutes) up to +// 3,600 seconds (1 hour), with a default of 1 hour. +// +// Permissions // // The temporary security credentials created by GetSessionToken can be used // to make API calls to any AWS service with the following exceptions: // -// * You cannot call any IAM APIs unless MFA authentication information is -// included in the request. +// * You cannot call any IAM API operations unless MFA authentication information +// is included in the request. // -// * You cannot call any STS API exceptAssumeRole or GetCallerIdentity. +// * You cannot call any STS API except AssumeRole or GetCallerIdentity. // -// We recommend that you do not call GetSessionToken with root account credentials. -// Instead, follow our best practices (http://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#create-iam-users) +// We recommend that you do not call GetSessionToken with AWS account root user +// credentials. Instead, follow our best practices (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#create-iam-users) // by creating one or more IAM users, giving them the necessary permissions, // and using IAM users for everyday interaction with AWS. // -// The permissions associated with the temporary security credentials returned -// by GetSessionToken are based on the permissions associated with account or -// IAM user whose credentials are used to call the action. If GetSessionToken -// is called using root account credentials, the temporary credentials have -// root account permissions. Similarly, if GetSessionToken is called using the -// credentials of an IAM user, the temporary credentials have the same permissions -// as the IAM user. +// The credentials that are returned by GetSessionToken are based on permissions +// associated with the user whose credentials were used to call the operation. +// If GetSessionToken is called using AWS account root user credentials, the +// temporary credentials have root user permissions. Similarly, if GetSessionToken +// is called using the credentials of an IAM user, the temporary credentials +// have the same permissions as the IAM user. // // For more information about using GetSessionToken to create temporary credentials, -// go to Temporary Credentials for Users in Untrusted Environments (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken) +// go to Temporary Credentials for Users in Untrusted Environments (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken) // in the IAM User Guide. // // Returns awserr.Error for service API and SDK errors. Use runtime type assertions @@ -941,74 +1306,122 @@ func (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *request. // STS is not activated in the requested region for the account that is being // asked to generate credentials. The account administrator must use the IAM // console to activate STS in that region. For more information, see Activating -// and Deactivating AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) // in the IAM User Guide. // -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken +// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken func (c *STS) GetSessionToken(input *GetSessionTokenInput) (*GetSessionTokenOutput, error) { req, out := c.GetSessionTokenRequest(input) - err := req.Send() - return out, err + return out, req.Send() +} + +// GetSessionTokenWithContext is the same as GetSessionToken with the addition of +// the ability to pass a context and additional request options. +// +// See GetSessionToken for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *STS) GetSessionTokenWithContext(ctx aws.Context, input *GetSessionTokenInput, opts ...request.Option) (*GetSessionTokenOutput, error) { + req, out := c.GetSessionTokenRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleRequest type AssumeRoleInput struct { _ struct{} `type:"structure"` // The duration, in seconds, of the role session. The value can range from 900 - // seconds (15 minutes) to 3600 seconds (1 hour). By default, the value is set - // to 3600 seconds. - // - // This is separate from the duration of a console session that you might request - // using the returned credentials. The request to the federation endpoint for - // a console sign-in token takes a SessionDuration parameter that specifies - // the maximum length of the console session, separately from the DurationSeconds - // parameter on this API. For more information, see Creating a URL that Enables - // Federated Users to Access the AWS Management Console (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) + // seconds (15 minutes) up to the maximum session duration setting for the role. + // This setting can have a value from 1 hour to 12 hours. If you specify a value + // higher than this setting, the operation fails. For example, if you specify + // a session duration of 12 hours, but your administrator set the maximum session + // duration to 6 hours, your operation fails. To learn how to view the maximum + // value for your role, see View the Maximum Session Duration Setting for a + // Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) + // in the IAM User Guide. + // + // By default, the value is set to 3600 seconds. + // + // The DurationSeconds parameter is separate from the duration of a console + // session that you might request using the returned credentials. The request + // to the federation endpoint for a console sign-in token takes a SessionDuration + // parameter that specifies the maximum length of the console session. For more + // information, see Creating a URL that Enables Federated Users to Access the + // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) // in the IAM User Guide. DurationSeconds *int64 `min:"900" type:"integer"` - // A unique identifier that is used by third parties when assuming roles in - // their customers' accounts. For each role that the third party can assume, - // they should instruct their customers to ensure the role's trust policy checks - // for the external ID that the third party generated. Each time the third party - // assumes the role, they should pass the customer's external ID. The external - // ID is useful in order to help third parties bind a role to the customer who - // created it. For more information about the external ID, see How to Use an - // External ID When Granting Access to Your AWS Resources to a Third Party (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) + // A unique identifier that might be required when you assume a role in another + // account. If the administrator of the account to which the role belongs provided + // you with an external ID, then provide that value in the ExternalId parameter. + // This value can be any string, such as a passphrase or account number. A cross-account + // role is usually set up to trust everyone in an account. Therefore, the administrator + // of the trusting account might send an external ID to the administrator of + // the trusted account. That way, only someone with the ID can assume the role, + // rather than everyone in the account. For more information about the external + // ID, see How to Use an External ID When Granting Access to Your AWS Resources + // to a Third Party (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) // in the IAM User Guide. // - // The regex used to validated this parameter is a string of characters consisting + // The regex used to validate this parameter is a string of characters consisting // of upper- and lower-case alphanumeric characters with no spaces. You can - // also include underscores or any of the following characters: =,.@:\/- + // also include underscores or any of the following characters: =,.@:/- ExternalId *string `min:"2" type:"string"` - // An IAM policy in JSON format. - // - // This parameter is optional. If you pass a policy, the temporary security - // credentials that are returned by the operation have the permissions that - // are allowed by both (the intersection of) the access policy of the role that - // is being assumed, and the policy that you pass. This gives you a way to further - // restrict the permissions for the resulting temporary security credentials. - // You cannot use the passed policy to grant permissions that are in excess - // of those allowed by the access policy of the role that is being assumed. - // For more information, see Permissions for AssumeRole, AssumeRoleWithSAML, - // and AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html) + // An IAM policy in JSON format that you want to use as an inline session policy. + // + // This parameter is optional. Passing policies to this operation returns new + // temporary credentials. The resulting session's permissions are the intersection + // of the role's identity-based policy and the session policies. You can use + // the role's temporary credentials in subsequent AWS API calls to access resources + // in the account that owns the role. You cannot use session policies to grant + // more permissions than those allowed by the identity-based policy of the role + // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) // in the IAM User Guide. // - // The format for this parameter, as described by its regex pattern, is a string - // of characters up to 2048 characters in length. The characters can be any - // ASCII character from the space character to the end of the valid character - // list (\u0020-\u00FF). It can also include the tab (\u0009), linefeed (\u000A), + // The plain text that you use for both inline and managed session policies + // can't exceed 2,048 characters. The JSON policy characters can be any ASCII + // character from the space character to the end of the valid character list + // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), // and carriage return (\u000D) characters. // - // The policy plain text must be 2048 bytes or shorter. However, an internal - // conversion compresses it into a packed binary format with a separate limit. - // The PackedPolicySize response element indicates by percentage how close to - // the upper size limit the policy is, with 100% equaling the maximum allowed - // size. + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. Policy *string `min:"1" type:"string"` + // The Amazon Resource Names (ARNs) of the IAM managed policies that you want + // to use as managed session policies. The policies must exist in the same account + // as the role. + // + // This parameter is optional. You can provide up to 10 managed policy ARNs. + // However, the plain text that you use for both inline and managed session + // policies can't exceed 2,048 characters. For more information about ARNs, + // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // Passing policies to this operation returns new temporary credentials. The + // resulting session's permissions are the intersection of the role's identity-based + // policy and the session policies. You can use the role's temporary credentials + // in subsequent AWS API calls to access resources in the account that owns + // the role. You cannot use session policies to grant more permissions than + // those allowed by the identity-based policy of the role that is being assumed. + // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + PolicyArns []*PolicyDescriptorType `type:"list"` + // The Amazon Resource Name (ARN) of the role to assume. // // RoleArn is a required field @@ -1021,8 +1434,8 @@ type AssumeRoleInput struct { // scenarios, the role session name is visible to, and can be logged by the // account that owns the role. The role session name is also used in the ARN // of the assumed role principal. This means that subsequent cross-account API - // requests using the temporary security credentials will expose the role session - // name to the external account in their CloudTrail logs. + // requests that use the temporary security credentials will expose the role + // session name to the external account in their AWS CloudTrail logs. // // The regex used to validate this parameter is a string of characters consisting // of upper- and lower-case alphanumeric characters with no spaces. You can @@ -1042,6 +1455,41 @@ type AssumeRoleInput struct { // also include underscores or any of the following characters: =,.@- SerialNumber *string `min:"9" type:"string"` + // A list of session tags that you want to pass. Each session tag consists of + // a key name and an associated value. For more information about session tags, + // see Tagging AWS STS Sessions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) + // in the IAM User Guide. + // + // This parameter is optional. You can pass up to 50 session tags. The plain + // text session tag keys can’t exceed 128 characters, and the values can’t + // exceed 256 characters. For these and additional limits, see IAM and STS Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) + // in the IAM User Guide. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // You can pass a session tag with the same key as a tag that is already attached + // to the role. When you do, session tags override a role tag with the same + // key. + // + // Tag key–value pairs are not case sensitive, but case is preserved. This + // means that you cannot have separate Department and department tag keys. Assume + // that the role has the Department=Marketing tag and you pass the department=engineering + // session tag. Department and department are not saved as separate tags, and + // the session tag passed in the request takes precedence over the role tag. + // + // Additionally, if you used temporary credentials to perform this operation, + // the new session inherits any transitive session tags from the calling session. + // If you pass a session tag with the same key as an inherited tag, the operation + // fails. To view the inherited tags for a session, see the AWS CloudTrail logs. + // For more information, see Viewing Session Tags in CloudTrail (https://docs.aws.amazon.com/IAM/latest/UserGuide/session-tags.html#id_session-tags_ctlogs) + // in the IAM User Guide. + Tags []*Tag `type:"list"` + // The value provided by the MFA device, if the trust policy of the role being // assumed requires MFA (that is, if the policy includes a condition that tests // for MFA). If the role being assumed requires MFA and if the TokenCode value @@ -1050,6 +1498,19 @@ type AssumeRoleInput struct { // The format for this parameter, as described by its regex pattern, is a sequence // of six numeric digits. TokenCode *string `min:"6" type:"string"` + + // A list of keys for session tags that you want to set as transitive. If you + // set a tag key as transitive, the corresponding key and value passes to subsequent + // sessions in a role chain. For more information, see Chaining Roles with Session + // Tags (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining) + // in the IAM User Guide. + // + // This parameter is optional. When you set session tags as transitive, the + // session policy and session tags packed binary limit is not affected. + // + // If you choose not to specify a transitive tag key, then no tags are passed + // from this session to any subsequent sessions. + TransitiveTagKeys []*string `type:"list"` } // String returns the string representation @@ -1092,6 +1553,26 @@ func (s *AssumeRoleInput) Validate() error { if s.TokenCode != nil && len(*s.TokenCode) < 6 { invalidParams.Add(request.NewErrParamMinLen("TokenCode", 6)) } + if s.PolicyArns != nil { + for i, v := range s.PolicyArns { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) + } + } + } + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } if invalidParams.Len() > 0 { return invalidParams @@ -1117,6 +1598,12 @@ func (s *AssumeRoleInput) SetPolicy(v string) *AssumeRoleInput { return s } +// SetPolicyArns sets the PolicyArns field's value. +func (s *AssumeRoleInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleInput { + s.PolicyArns = v + return s +} + // SetRoleArn sets the RoleArn field's value. func (s *AssumeRoleInput) SetRoleArn(v string) *AssumeRoleInput { s.RoleArn = &v @@ -1135,15 +1622,26 @@ func (s *AssumeRoleInput) SetSerialNumber(v string) *AssumeRoleInput { return s } +// SetTags sets the Tags field's value. +func (s *AssumeRoleInput) SetTags(v []*Tag) *AssumeRoleInput { + s.Tags = v + return s +} + // SetTokenCode sets the TokenCode field's value. func (s *AssumeRoleInput) SetTokenCode(v string) *AssumeRoleInput { s.TokenCode = &v return s } +// SetTransitiveTagKeys sets the TransitiveTagKeys field's value. +func (s *AssumeRoleInput) SetTransitiveTagKeys(v []*string) *AssumeRoleInput { + s.TransitiveTagKeys = v + return s +} + // Contains the response to a successful AssumeRole request, including temporary // AWS credentials that can be used to make AWS requests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleResponse type AssumeRoleOutput struct { _ struct{} `type:"structure"` @@ -1157,15 +1655,14 @@ type AssumeRoleOutput struct { // The temporary security credentials, which include an access key ID, a secret // access key, and a security (or session) token. // - // Note: The size of the security token that STS APIs return is not fixed. We - // strongly recommend that you make no assumptions about the maximum size. As - // of this writing, the typical size is less than 4096 bytes, but that can vary. - // Also, future updates to AWS might require larger sizes. + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. Credentials *Credentials `type:"structure"` - // A percentage value that indicates the size of the policy in packed form. - // The service rejects any policy with a packed size greater than 100 percent, - // which means the policy exceeded the allowed space. + // A percentage value that indicates the packed size of the session policies + // and session tags combined passed in the request. The request fails if the + // packed size is greater than 100 percent, which means the policies and tags + // exceeded the allowed space. PackedPolicySize *int64 `type:"integer"` } @@ -1197,51 +1694,83 @@ func (s *AssumeRoleOutput) SetPackedPolicySize(v int64) *AssumeRoleOutput { return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAMLRequest type AssumeRoleWithSAMLInput struct { _ struct{} `type:"structure"` - // The duration, in seconds, of the role session. The value can range from 900 - // seconds (15 minutes) to 3600 seconds (1 hour). By default, the value is set - // to 3600 seconds. An expiration can also be specified in the SAML authentication - // response's SessionNotOnOrAfter value. The actual expiration time is whichever - // value is shorter. - // - // This is separate from the duration of a console session that you might request - // using the returned credentials. The request to the federation endpoint for - // a console sign-in token takes a SessionDuration parameter that specifies - // the maximum length of the console session, separately from the DurationSeconds - // parameter on this API. For more information, see Enabling SAML 2.0 Federated - // Users to Access the AWS Management Console (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-saml.html) + // The duration, in seconds, of the role session. Your role session lasts for + // the duration that you specify for the DurationSeconds parameter, or until + // the time specified in the SAML authentication response's SessionNotOnOrAfter + // value, whichever is shorter. You can provide a DurationSeconds value from + // 900 seconds (15 minutes) up to the maximum session duration setting for the + // role. This setting can have a value from 1 hour to 12 hours. If you specify + // a value higher than this setting, the operation fails. For example, if you + // specify a session duration of 12 hours, but your administrator set the maximum + // session duration to 6 hours, your operation fails. To learn how to view the + // maximum value for your role, see View the Maximum Session Duration Setting + // for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) + // in the IAM User Guide. + // + // By default, the value is set to 3600 seconds. + // + // The DurationSeconds parameter is separate from the duration of a console + // session that you might request using the returned credentials. The request + // to the federation endpoint for a console sign-in token takes a SessionDuration + // parameter that specifies the maximum length of the console session. For more + // information, see Creating a URL that Enables Federated Users to Access the + // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) // in the IAM User Guide. DurationSeconds *int64 `min:"900" type:"integer"` - // An IAM policy in JSON format. - // - // The policy parameter is optional. If you pass a policy, the temporary security - // credentials that are returned by the operation have the permissions that - // are allowed by both the access policy of the role that is being assumed, - // and the policy that you pass. This gives you a way to further restrict the - // permissions for the resulting temporary security credentials. You cannot - // use the passed policy to grant permissions that are in excess of those allowed - // by the access policy of the role that is being assumed. For more information, - // Permissions for AssumeRole, AssumeRoleWithSAML, and AssumeRoleWithWebIdentity - // (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html) + // An IAM policy in JSON format that you want to use as an inline session policy. + // + // This parameter is optional. Passing policies to this operation returns new + // temporary credentials. The resulting session's permissions are the intersection + // of the role's identity-based policy and the session policies. You can use + // the role's temporary credentials in subsequent AWS API calls to access resources + // in the account that owns the role. You cannot use session policies to grant + // more permissions than those allowed by the identity-based policy of the role + // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) // in the IAM User Guide. // - // The format for this parameter, as described by its regex pattern, is a string - // of characters up to 2048 characters in length. The characters can be any - // ASCII character from the space character to the end of the valid character - // list (\u0020-\u00FF). It can also include the tab (\u0009), linefeed (\u000A), + // The plain text that you use for both inline and managed session policies + // can't exceed 2,048 characters. The JSON policy characters can be any ASCII + // character from the space character to the end of the valid character list + // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), // and carriage return (\u000D) characters. // - // The policy plain text must be 2048 bytes or shorter. However, an internal - // conversion compresses it into a packed binary format with a separate limit. - // The PackedPolicySize response element indicates by percentage how close to - // the upper size limit the policy is, with 100% equaling the maximum allowed - // size. + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. Policy *string `min:"1" type:"string"` + // The Amazon Resource Names (ARNs) of the IAM managed policies that you want + // to use as managed session policies. The policies must exist in the same account + // as the role. + // + // This parameter is optional. You can provide up to 10 managed policy ARNs. + // However, the plain text that you use for both inline and managed session + // policies can't exceed 2,048 characters. For more information about ARNs, + // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // Passing policies to this operation returns new temporary credentials. The + // resulting session's permissions are the intersection of the role's identity-based + // policy and the session policies. You can use the role's temporary credentials + // in subsequent AWS API calls to access resources in the account that owns + // the role. You cannot use session policies to grant more permissions than + // those allowed by the identity-based policy of the role that is being assumed. + // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + PolicyArns []*PolicyDescriptorType `type:"list"` + // The Amazon Resource Name (ARN) of the SAML provider in IAM that describes // the IdP. // @@ -1255,8 +1784,8 @@ type AssumeRoleWithSAMLInput struct { // The base-64 encoded SAML authentication response provided by the IdP. // - // For more information, see Configuring a Relying Party and Adding Claims (http://docs.aws.amazon.com/IAM/latest/UserGuide/create-role-saml-IdP-tasks.html) - // in the Using IAM guide. + // For more information, see Configuring a Relying Party and Adding Claims (https://docs.aws.amazon.com/IAM/latest/UserGuide/create-role-saml-IdP-tasks.html) + // in the IAM User Guide. // // SAMLAssertion is a required field SAMLAssertion *string `min:"4" type:"string" required:"true"` @@ -1299,6 +1828,16 @@ func (s *AssumeRoleWithSAMLInput) Validate() error { if s.SAMLAssertion != nil && len(*s.SAMLAssertion) < 4 { invalidParams.Add(request.NewErrParamMinLen("SAMLAssertion", 4)) } + if s.PolicyArns != nil { + for i, v := range s.PolicyArns { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) + } + } + } if invalidParams.Len() > 0 { return invalidParams @@ -1318,6 +1857,12 @@ func (s *AssumeRoleWithSAMLInput) SetPolicy(v string) *AssumeRoleWithSAMLInput { return s } +// SetPolicyArns sets the PolicyArns field's value. +func (s *AssumeRoleWithSAMLInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleWithSAMLInput { + s.PolicyArns = v + return s +} + // SetPrincipalArn sets the PrincipalArn field's value. func (s *AssumeRoleWithSAMLInput) SetPrincipalArn(v string) *AssumeRoleWithSAMLInput { s.PrincipalArn = &v @@ -1338,7 +1883,6 @@ func (s *AssumeRoleWithSAMLInput) SetSAMLAssertion(v string) *AssumeRoleWithSAML // Contains the response to a successful AssumeRoleWithSAML request, including // temporary AWS credentials that can be used to make AWS requests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAMLResponse type AssumeRoleWithSAMLOutput struct { _ struct{} `type:"structure"` @@ -1353,10 +1897,8 @@ type AssumeRoleWithSAMLOutput struct { // The temporary security credentials, which include an access key ID, a secret // access key, and a security (or session) token. // - // Note: The size of the security token that STS APIs return is not fixed. We - // strongly recommend that you make no assumptions about the maximum size. As - // of this writing, the typical size is less than 4096 bytes, but that can vary. - // Also, future updates to AWS might require larger sizes. + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. Credentials *Credentials `type:"structure"` // The value of the Issuer element of the SAML assertion. @@ -1373,9 +1915,10 @@ type AssumeRoleWithSAMLOutput struct { // ) ) NameQualifier *string `type:"string"` - // A percentage value that indicates the size of the policy in packed form. - // The service rejects any policy with a packed size greater than 100 percent, - // which means the policy exceeded the allowed space. + // A percentage value that indicates the packed size of the session policies + // and session tags combined passed in the request. The request fails if the + // packed size is greater than 100 percent, which means the policies and tags + // exceeded the allowed space. PackedPolicySize *int64 `type:"integer"` // The value of the NameID element in the Subject element of the SAML assertion. @@ -1450,48 +1993,80 @@ func (s *AssumeRoleWithSAMLOutput) SetSubjectType(v string) *AssumeRoleWithSAMLO return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentityRequest type AssumeRoleWithWebIdentityInput struct { _ struct{} `type:"structure"` // The duration, in seconds, of the role session. The value can range from 900 - // seconds (15 minutes) to 3600 seconds (1 hour). By default, the value is set - // to 3600 seconds. - // - // This is separate from the duration of a console session that you might request - // using the returned credentials. The request to the federation endpoint for - // a console sign-in token takes a SessionDuration parameter that specifies - // the maximum length of the console session, separately from the DurationSeconds - // parameter on this API. For more information, see Creating a URL that Enables - // Federated Users to Access the AWS Management Console (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) + // seconds (15 minutes) up to the maximum session duration setting for the role. + // This setting can have a value from 1 hour to 12 hours. If you specify a value + // higher than this setting, the operation fails. For example, if you specify + // a session duration of 12 hours, but your administrator set the maximum session + // duration to 6 hours, your operation fails. To learn how to view the maximum + // value for your role, see View the Maximum Session Duration Setting for a + // Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session) + // in the IAM User Guide. + // + // By default, the value is set to 3600 seconds. + // + // The DurationSeconds parameter is separate from the duration of a console + // session that you might request using the returned credentials. The request + // to the federation endpoint for a console sign-in token takes a SessionDuration + // parameter that specifies the maximum length of the console session. For more + // information, see Creating a URL that Enables Federated Users to Access the + // AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html) // in the IAM User Guide. DurationSeconds *int64 `min:"900" type:"integer"` - // An IAM policy in JSON format. + // An IAM policy in JSON format that you want to use as an inline session policy. // - // The policy parameter is optional. If you pass a policy, the temporary security - // credentials that are returned by the operation have the permissions that - // are allowed by both the access policy of the role that is being assumed, - // and the policy that you pass. This gives you a way to further restrict the - // permissions for the resulting temporary security credentials. You cannot - // use the passed policy to grant permissions that are in excess of those allowed - // by the access policy of the role that is being assumed. For more information, - // see Permissions for AssumeRoleWithWebIdentity (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html) + // This parameter is optional. Passing policies to this operation returns new + // temporary credentials. The resulting session's permissions are the intersection + // of the role's identity-based policy and the session policies. You can use + // the role's temporary credentials in subsequent AWS API calls to access resources + // in the account that owns the role. You cannot use session policies to grant + // more permissions than those allowed by the identity-based policy of the role + // that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) // in the IAM User Guide. // - // The format for this parameter, as described by its regex pattern, is a string - // of characters up to 2048 characters in length. The characters can be any - // ASCII character from the space character to the end of the valid character - // list (\u0020-\u00FF). It can also include the tab (\u0009), linefeed (\u000A), + // The plain text that you use for both inline and managed session policies + // can't exceed 2,048 characters. The JSON policy characters can be any ASCII + // character from the space character to the end of the valid character list + // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), // and carriage return (\u000D) characters. // - // The policy plain text must be 2048 bytes or shorter. However, an internal - // conversion compresses it into a packed binary format with a separate limit. - // The PackedPolicySize response element indicates by percentage how close to - // the upper size limit the policy is, with 100% equaling the maximum allowed - // size. + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. Policy *string `min:"1" type:"string"` + // The Amazon Resource Names (ARNs) of the IAM managed policies that you want + // to use as managed session policies. The policies must exist in the same account + // as the role. + // + // This parameter is optional. You can provide up to 10 managed policy ARNs. + // However, the plain text that you use for both inline and managed session + // policies can't exceed 2,048 characters. For more information about ARNs, + // see Amazon Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // Passing policies to this operation returns new temporary credentials. The + // resulting session's permissions are the intersection of the role's identity-based + // policy and the session policies. You can use the role's temporary credentials + // in subsequent AWS API calls to access resources in the account that owns + // the role. You cannot use session policies to grant more permissions than + // those allowed by the identity-based policy of the role that is being assumed. + // For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + PolicyArns []*PolicyDescriptorType `type:"list"` + // The fully qualified host component of the domain name of the identity provider. // // Specify this value only for OAuth 2.0 access tokens. Currently www.amazon.com @@ -1568,6 +2143,16 @@ func (s *AssumeRoleWithWebIdentityInput) Validate() error { if s.WebIdentityToken != nil && len(*s.WebIdentityToken) < 4 { invalidParams.Add(request.NewErrParamMinLen("WebIdentityToken", 4)) } + if s.PolicyArns != nil { + for i, v := range s.PolicyArns { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) + } + } + } if invalidParams.Len() > 0 { return invalidParams @@ -1587,6 +2172,12 @@ func (s *AssumeRoleWithWebIdentityInput) SetPolicy(v string) *AssumeRoleWithWebI return s } +// SetPolicyArns sets the PolicyArns field's value. +func (s *AssumeRoleWithWebIdentityInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleWithWebIdentityInput { + s.PolicyArns = v + return s +} + // SetProviderId sets the ProviderId field's value. func (s *AssumeRoleWithWebIdentityInput) SetProviderId(v string) *AssumeRoleWithWebIdentityInput { s.ProviderId = &v @@ -1613,7 +2204,6 @@ func (s *AssumeRoleWithWebIdentityInput) SetWebIdentityToken(v string) *AssumeRo // Contains the response to a successful AssumeRoleWithWebIdentity request, // including temporary AWS credentials that can be used to make AWS requests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentityResponse type AssumeRoleWithWebIdentityOutput struct { _ struct{} `type:"structure"` @@ -1632,19 +2222,18 @@ type AssumeRoleWithWebIdentityOutput struct { // The temporary security credentials, which include an access key ID, a secret // access key, and a security token. // - // Note: The size of the security token that STS APIs return is not fixed. We - // strongly recommend that you make no assumptions about the maximum size. As - // of this writing, the typical size is less than 4096 bytes, but that can vary. - // Also, future updates to AWS might require larger sizes. + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. Credentials *Credentials `type:"structure"` - // A percentage value that indicates the size of the policy in packed form. - // The service rejects any policy with a packed size greater than 100 percent, - // which means the policy exceeded the allowed space. + // A percentage value that indicates the packed size of the session policies + // and session tags combined passed in the request. The request fails if the + // packed size is greater than 100 percent, which means the policies and tags + // exceeded the allowed space. PackedPolicySize *int64 `type:"integer"` // The issuing authority of the web identity token presented. For OpenID Connect - // ID Tokens this contains the value of the iss field. For OAuth 2.0 access + // ID tokens, this contains the value of the iss field. For OAuth 2.0 access // tokens, this contains the value of the ProviderId parameter that was passed // in the AssumeRoleWithWebIdentity request. Provider *string `type:"string"` @@ -1706,14 +2295,13 @@ func (s *AssumeRoleWithWebIdentityOutput) SetSubjectFromWebIdentityToken(v strin // The identifiers for the temporary security credentials that the operation // returns. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumedRoleUser type AssumedRoleUser struct { _ struct{} `type:"structure"` // The ARN of the temporary security credentials that are returned from the // AssumeRole action. For more information about ARNs and how to use them in - // policies, see IAM Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html) - // in Using IAM. + // policies, see IAM Identifiers (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html) + // in the IAM User Guide. // // Arn is a required field Arn *string `min:"20" type:"string" required:"true"` @@ -1749,7 +2337,6 @@ func (s *AssumedRoleUser) SetAssumedRoleId(v string) *AssumedRoleUser { } // AWS credentials for API authentication. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/Credentials type Credentials struct { _ struct{} `type:"structure"` @@ -1761,7 +2348,7 @@ type Credentials struct { // The date on which the current credentials expire. // // Expiration is a required field - Expiration *time.Time `type:"timestamp" timestampFormat:"iso8601" required:"true"` + Expiration *time.Time `type:"timestamp" required:"true"` // The secret access key that can be used to sign requests. // @@ -1808,7 +2395,6 @@ func (s *Credentials) SetSessionToken(v string) *Credentials { return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessageRequest type DecodeAuthorizationMessageInput struct { _ struct{} `type:"structure"` @@ -1853,7 +2439,6 @@ func (s *DecodeAuthorizationMessageInput) SetEncodedMessage(v string) *DecodeAut // A document that contains additional information about the authorization status // of a request from an encoded message that is returned in response to an AWS // request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessageResponse type DecodeAuthorizationMessageOutput struct { _ struct{} `type:"structure"` @@ -1878,14 +2463,13 @@ func (s *DecodeAuthorizationMessageOutput) SetDecodedMessage(v string) *DecodeAu } // Identifiers for the federated user that is associated with the credentials. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/FederatedUser type FederatedUser struct { _ struct{} `type:"structure"` // The ARN that specifies the federated user that is associated with the credentials. // For more information about ARNs and how to use them in policies, see IAM - // Identifiers (http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html) - // in Using IAM. + // Identifiers (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html) + // in the IAM User Guide. // // Arn is a required field Arn *string `min:"20" type:"string" required:"true"` @@ -1919,7 +2503,73 @@ func (s *FederatedUser) SetFederatedUserId(v string) *FederatedUser { return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentityRequest +type GetAccessKeyInfoInput struct { + _ struct{} `type:"structure"` + + // The identifier of an access key. + // + // This parameter allows (through its regex pattern) a string of characters + // that can consist of any upper- or lowercase letter or digit. + // + // AccessKeyId is a required field + AccessKeyId *string `min:"16" type:"string" required:"true"` +} + +// String returns the string representation +func (s GetAccessKeyInfoInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetAccessKeyInfoInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *GetAccessKeyInfoInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "GetAccessKeyInfoInput"} + if s.AccessKeyId == nil { + invalidParams.Add(request.NewErrParamRequired("AccessKeyId")) + } + if s.AccessKeyId != nil && len(*s.AccessKeyId) < 16 { + invalidParams.Add(request.NewErrParamMinLen("AccessKeyId", 16)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAccessKeyId sets the AccessKeyId field's value. +func (s *GetAccessKeyInfoInput) SetAccessKeyId(v string) *GetAccessKeyInfoInput { + s.AccessKeyId = &v + return s +} + +type GetAccessKeyInfoOutput struct { + _ struct{} `type:"structure"` + + // The number used to identify the AWS account. + Account *string `type:"string"` +} + +// String returns the string representation +func (s GetAccessKeyInfoOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s GetAccessKeyInfoOutput) GoString() string { + return s.String() +} + +// SetAccount sets the Account field's value. +func (s *GetAccessKeyInfoOutput) SetAccount(v string) *GetAccessKeyInfoOutput { + s.Account = &v + return s +} + type GetCallerIdentityInput struct { _ struct{} `type:"structure"` } @@ -1936,7 +2586,6 @@ func (s GetCallerIdentityInput) GoString() string { // Contains the response to a successful GetCallerIdentity request, including // information about the entity making the request. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentityResponse type GetCallerIdentityOutput struct { _ struct{} `type:"structure"` @@ -1948,8 +2597,8 @@ type GetCallerIdentityOutput struct { Arn *string `min:"20" type:"string"` // The unique identifier of the calling entity. The exact value depends on the - // type of entity making the call. The values returned are those listed in the - // aws:userid column in the Principal table (http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable) + // type of entity that is making the call. The values returned are those listed + // in the aws:userid column in the Principal table (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable) // found on the Policy Variables reference page in the IAM User Guide. UserId *string `type:"string"` } @@ -1982,17 +2631,15 @@ func (s *GetCallerIdentityOutput) SetUserId(v string) *GetCallerIdentityOutput { return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationTokenRequest type GetFederationTokenInput struct { _ struct{} `type:"structure"` // The duration, in seconds, that the session should last. Acceptable durations - // for federation sessions range from 900 seconds (15 minutes) to 129600 seconds - // (36 hours), with 43200 seconds (12 hours) as the default. Sessions obtained - // using AWS account (root) credentials are restricted to a maximum of 3600 + // for federation sessions range from 900 seconds (15 minutes) to 129,600 seconds + // (36 hours), with 43,200 seconds (12 hours) as the default. Sessions obtained + // using AWS account root user credentials are restricted to a maximum of 3,600 // seconds (one hour). If the specified duration is longer than one hour, the - // session obtained by using AWS account (root) credentials defaults to one - // hour. + // session obtained by using root user credentials defaults to one hour. DurationSeconds *int64 `min:"900" type:"integer"` // The name of the federated user. The name is used as an identifier for the @@ -2007,36 +2654,107 @@ type GetFederationTokenInput struct { // Name is a required field Name *string `min:"2" type:"string" required:"true"` - // An IAM policy in JSON format that is passed with the GetFederationToken call - // and evaluated along with the policy or policies that are attached to the - // IAM user whose credentials are used to call GetFederationToken. The passed - // policy is used to scope down the permissions that are available to the IAM - // user, by allowing only a subset of the permissions that are granted to the - // IAM user. The passed policy cannot grant more permissions than those granted - // to the IAM user. The final permissions for the federated user are the most - // restrictive set based on the intersection of the passed policy and the IAM - // user policy. - // - // If you do not pass a policy, the resulting temporary security credentials - // have no effective permissions. The only exception is when the temporary security - // credentials are used to access a resource that has a resource-based policy - // that specifically allows the federated user to access the resource. - // - // The format for this parameter, as described by its regex pattern, is a string - // of characters up to 2048 characters in length. The characters can be any - // ASCII character from the space character to the end of the valid character - // list (\u0020-\u00FF). It can also include the tab (\u0009), linefeed (\u000A), - // and carriage return (\u000D) characters. + // An IAM policy in JSON format that you want to use as an inline session policy. // - // The policy plain text must be 2048 bytes or shorter. However, an internal - // conversion compresses it into a packed binary format with a separate limit. - // The PackedPolicySize response element indicates by percentage how close to - // the upper size limit the policy is, with 100% equaling the maximum allowed - // size. + // You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // to this operation. You can pass a single JSON policy document to use as an + // inline session policy. You can also specify up to 10 managed policies to + // use as managed session policies. // - // For more information about how permissions work, see Permissions for GetFederationToken - // (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_getfederationtoken.html). + // This parameter is optional. However, if you do not pass any session policies, + // then the resulting federated user session has no permissions. + // + // When you pass session policies, the session permissions are the intersection + // of the IAM user policies and the session policies that you pass. This gives + // you a way to further restrict the permissions for a federated user. You cannot + // use session policies to grant more permissions than those that are defined + // in the permissions policy of the IAM user. For more information, see Session + // Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + // + // The resulting credentials can be used to access a resource that has a resource-based + // policy. If that policy specifically references the federated user session + // in the Principal element of the policy, the session has the permissions allowed + // by the policy. These permissions are granted in addition to the permissions + // that are granted by the session policies. + // + // The plain text that you use for both inline and managed session policies + // can't exceed 2,048 characters. The JSON policy characters can be any ASCII + // character from the space character to the end of the valid character list + // (\u0020 through \u00FF). It can also include the tab (\u0009), linefeed (\u000A), + // and carriage return (\u000D) characters. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. Policy *string `min:"1" type:"string"` + + // The Amazon Resource Names (ARNs) of the IAM managed policies that you want + // to use as a managed session policy. The policies must exist in the same account + // as the IAM user that is requesting federated access. + // + // You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // to this operation. You can pass a single JSON policy document to use as an + // inline session policy. You can also specify up to 10 managed policies to + // use as managed session policies. The plain text that you use for both inline + // and managed session policies can't exceed 2,048 characters. You can provide + // up to 10 managed policy ARNs. For more information about ARNs, see Amazon + // Resource Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + // + // This parameter is optional. However, if you do not pass any session policies, + // then the resulting federated user session has no permissions. + // + // When you pass session policies, the session permissions are the intersection + // of the IAM user policies and the session policies that you pass. This gives + // you a way to further restrict the permissions for a federated user. You cannot + // use session policies to grant more permissions than those that are defined + // in the permissions policy of the IAM user. For more information, see Session + // Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) + // in the IAM User Guide. + // + // The resulting credentials can be used to access a resource that has a resource-based + // policy. If that policy specifically references the federated user session + // in the Principal element of the policy, the session has the permissions allowed + // by the policy. These permissions are granted in addition to the permissions + // that are granted by the session policies. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + PolicyArns []*PolicyDescriptorType `type:"list"` + + // A list of session tags. Each session tag consists of a key name and an associated + // value. For more information about session tags, see Passing Session Tags + // in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) + // in the IAM User Guide. + // + // This parameter is optional. You can pass up to 50 session tags. The plain + // text session tag keys can’t exceed 128 characters and the values can’t + // exceed 256 characters. For these and additional limits, see IAM and STS Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) + // in the IAM User Guide. + // + // An AWS conversion compresses the passed session policies and session tags + // into a packed binary format that has a separate limit. Your request can fail + // for this limit even if your plain text meets the other requirements. The + // PackedPolicySize response element indicates by percentage how close the policies + // and tags for your request are to the upper size limit. + // + // You can pass a session tag with the same key as a tag that is already attached + // to the user you are federating. When you do, session tags override a user + // tag with the same key. + // + // Tag key–value pairs are not case sensitive, but case is preserved. This + // means that you cannot have separate Department and department tag keys. Assume + // that the role has the Department=Marketing tag and you pass the department=engineering + // session tag. Department and department are not saved as separate tags, and + // the session tag passed in the request takes precedence over the role tag. + Tags []*Tag `type:"list"` } // String returns the string representation @@ -2064,6 +2782,26 @@ func (s *GetFederationTokenInput) Validate() error { if s.Policy != nil && len(*s.Policy) < 1 { invalidParams.Add(request.NewErrParamMinLen("Policy", 1)) } + if s.PolicyArns != nil { + for i, v := range s.PolicyArns { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "PolicyArns", i), err.(request.ErrInvalidParams)) + } + } + } + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } if invalidParams.Len() > 0 { return invalidParams @@ -2089,19 +2827,28 @@ func (s *GetFederationTokenInput) SetPolicy(v string) *GetFederationTokenInput { return s } +// SetPolicyArns sets the PolicyArns field's value. +func (s *GetFederationTokenInput) SetPolicyArns(v []*PolicyDescriptorType) *GetFederationTokenInput { + s.PolicyArns = v + return s +} + +// SetTags sets the Tags field's value. +func (s *GetFederationTokenInput) SetTags(v []*Tag) *GetFederationTokenInput { + s.Tags = v + return s +} + // Contains the response to a successful GetFederationToken request, including // temporary AWS credentials that can be used to make AWS requests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationTokenResponse type GetFederationTokenOutput struct { _ struct{} `type:"structure"` // The temporary security credentials, which include an access key ID, a secret // access key, and a security (or session) token. // - // Note: The size of the security token that STS APIs return is not fixed. We - // strongly recommend that you make no assumptions about the maximum size. As - // of this writing, the typical size is less than 4096 bytes, but that can vary. - // Also, future updates to AWS might require larger sizes. + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. Credentials *Credentials `type:"structure"` // Identifiers for the federated user associated with the credentials (such @@ -2110,9 +2857,10 @@ type GetFederationTokenOutput struct { // an Amazon S3 bucket policy. FederatedUser *FederatedUser `type:"structure"` - // A percentage value indicating the size of the policy in packed form. The - // service rejects policies for which the packed size is greater than 100 percent - // of the allowed value. + // A percentage value that indicates the packed size of the session policies + // and session tags combined passed in the request. The request fails if the + // packed size is greater than 100 percent, which means the policies and tags + // exceeded the allowed space. PackedPolicySize *int64 `type:"integer"` } @@ -2144,16 +2892,15 @@ func (s *GetFederationTokenOutput) SetPackedPolicySize(v int64) *GetFederationTo return s } -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionTokenRequest type GetSessionTokenInput struct { _ struct{} `type:"structure"` // The duration, in seconds, that the credentials should remain valid. Acceptable - // durations for IAM user sessions range from 900 seconds (15 minutes) to 129600 - // seconds (36 hours), with 43200 seconds (12 hours) as the default. Sessions - // for AWS account owners are restricted to a maximum of 3600 seconds (one hour). - // If the duration is longer than one hour, the session for AWS account owners - // defaults to one hour. + // durations for IAM user sessions range from 900 seconds (15 minutes) to 129,600 + // seconds (36 hours), with 43,200 seconds (12 hours) as the default. Sessions + // for AWS account owners are restricted to a maximum of 3,600 seconds (one + // hour). If the duration is longer than one hour, the session for AWS account + // owners defaults to one hour. DurationSeconds *int64 `min:"900" type:"integer"` // The identification number of the MFA device that is associated with the IAM @@ -2166,14 +2913,14 @@ type GetSessionTokenInput struct { // // The regex used to validate this parameter is a string of characters consisting // of upper- and lower-case alphanumeric characters with no spaces. You can - // also include underscores or any of the following characters: =,.@- + // also include underscores or any of the following characters: =,.@:/- SerialNumber *string `min:"9" type:"string"` // The value provided by the MFA device, if MFA is required. If any policy requires // the IAM user to submit an MFA code, specify this value. If MFA authentication - // is required, and the user does not provide a code when requesting a set of - // temporary security credentials, the user will receive an "access denied" - // response when requesting resources that require MFA authentication. + // is required, the user must provide a code when requesting a set of temporary + // security credentials. A user who fails to provide the code receives an "access + // denied" response when requesting resources that require MFA authentication. // // The format for this parameter, as described by its regex pattern, is a sequence // of six numeric digits. @@ -2229,17 +2976,14 @@ func (s *GetSessionTokenInput) SetTokenCode(v string) *GetSessionTokenInput { // Contains the response to a successful GetSessionToken request, including // temporary AWS credentials that can be used to make AWS requests. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionTokenResponse type GetSessionTokenOutput struct { _ struct{} `type:"structure"` // The temporary security credentials, which include an access key ID, a secret // access key, and a security (or session) token. // - // Note: The size of the security token that STS APIs return is not fixed. We - // strongly recommend that you make no assumptions about the maximum size. As - // of this writing, the typical size is less than 4096 bytes, but that can vary. - // Also, future updates to AWS might require larger sizes. + // The size of the security token that STS API operations return is not fixed. + // We strongly recommend that you make no assumptions about the maximum size. Credentials *Credentials `type:"structure"` } @@ -2258,3 +3002,114 @@ func (s *GetSessionTokenOutput) SetCredentials(v *Credentials) *GetSessionTokenO s.Credentials = v return s } + +// A reference to the IAM managed policy that is passed as a session policy +// for a role session or a federated user session. +type PolicyDescriptorType struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the IAM managed policy to use as a session + // policy for the role. For more information about ARNs, see Amazon Resource + // Names (ARNs) and AWS Service Namespaces (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) + // in the AWS General Reference. + Arn *string `locationName:"arn" min:"20" type:"string"` +} + +// String returns the string representation +func (s PolicyDescriptorType) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s PolicyDescriptorType) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *PolicyDescriptorType) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "PolicyDescriptorType"} + if s.Arn != nil && len(*s.Arn) < 20 { + invalidParams.Add(request.NewErrParamMinLen("Arn", 20)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetArn sets the Arn field's value. +func (s *PolicyDescriptorType) SetArn(v string) *PolicyDescriptorType { + s.Arn = &v + return s +} + +// You can pass custom key-value pair attributes when you assume a role or federate +// a user. These are called session tags. You can then use the session tags +// to control access to resources. For more information, see Tagging AWS STS +// Sessions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) +// in the IAM User Guide. +type Tag struct { + _ struct{} `type:"structure"` + + // The key for a session tag. + // + // You can pass up to 50 session tags. The plain text session tag keys can’t + // exceed 128 characters. For these and additional limits, see IAM and STS Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) + // in the IAM User Guide. + // + // Key is a required field + Key *string `min:"1" type:"string" required:"true"` + + // The value for a session tag. + // + // You can pass up to 50 session tags. The plain text session tag values can’t + // exceed 256 characters. For these and additional limits, see IAM and STS Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length) + // in the IAM User Guide. + // + // Value is a required field + Value *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s Tag) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Tag) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Tag) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Tag"} + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + if s.Value == nil { + invalidParams.Add(request.NewErrParamRequired("Value")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetKey sets the Key field's value. +func (s *Tag) SetKey(v string) *Tag { + s.Key = &v + return s +} + +// SetValue sets the Value field's value. +func (s *Tag) SetValue(v string) *Tag { + s.Value = &v + return s +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go index 4010cc7fa14..d5307fcaa0f 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/customizations.go @@ -3,10 +3,9 @@ package sts import "github.com/aws/aws-sdk-go/aws/request" func init() { - initRequest = func(r *request.Request) { - switch r.Operation.Name { - case opAssumeRoleWithSAML, opAssumeRoleWithWebIdentity: - r.Handlers.Sign.Clear() // these operations are unsigned - } - } + initRequest = customizeRequest +} + +func customizeRequest(r *request.Request) { + r.RetryErrorCodes = append(r.RetryErrorCodes, ErrCodeIDPCommunicationErrorException) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go new file mode 100644 index 00000000000..fcb720dcac6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/doc.go @@ -0,0 +1,108 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +// Package sts provides the client and types for making API +// requests to AWS Security Token Service. +// +// The AWS Security Token Service (STS) is a web service that enables you to +// request temporary, limited-privilege credentials for AWS Identity and Access +// Management (IAM) users or for users that you authenticate (federated users). +// This guide provides descriptions of the STS API. For more detailed information +// about using this service, go to Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html). +// +// For information about setting up signatures and authorization through the +// API, go to Signing AWS API Requests (https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html) +// in the AWS General Reference. For general information about the Query API, +// go to Making Query Requests (https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html) +// in Using IAM. For information about using security tokens with other AWS +// products, go to AWS Services That Work with IAM (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) +// in the IAM User Guide. +// +// If you're new to AWS and need additional technical information about a specific +// AWS product, you can find the product's technical documentation at http://aws.amazon.com/documentation/ +// (http://aws.amazon.com/documentation/). +// +// Endpoints +// +// By default, AWS Security Token Service (STS) is available as a global service, +// and all AWS STS requests go to a single endpoint at https://sts.amazonaws.com. +// Global requests map to the US East (N. Virginia) region. AWS recommends using +// Regional AWS STS endpoints instead of the global endpoint to reduce latency, +// build in redundancy, and increase session token validity. For more information, +// see Managing AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) +// in the IAM User Guide. +// +// Most AWS Regions are enabled for operations in all AWS services by default. +// Those Regions are automatically activated for use with AWS STS. Some Regions, +// such as Asia Pacific (Hong Kong), must be manually enabled. To learn more +// about enabling and disabling AWS Regions, see Managing AWS Regions (https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) +// in the AWS General Reference. When you enable these AWS Regions, they are +// automatically activated for use with AWS STS. You cannot activate the STS +// endpoint for a Region that is disabled. Tokens that are valid in all AWS +// Regions are longer than tokens that are valid in Regions that are enabled +// by default. Changing this setting might affect existing systems where you +// temporarily store tokens. For more information, see Managing Global Endpoint +// Session Tokens (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-manage-tokens) +// in the IAM User Guide. +// +// After you activate a Region for use with AWS STS, you can direct AWS STS +// API calls to that Region. AWS STS recommends that you provide both the Region +// and endpoint when you make calls to a Regional endpoint. You can provide +// the Region alone for manually enabled Regions, such as Asia Pacific (Hong +// Kong). In this case, the calls are directed to the STS Regional endpoint. +// However, if you provide the Region alone for Regions enabled by default, +// the calls are directed to the global endpoint of https://sts.amazonaws.com. +// +// To view the list of AWS STS endpoints and whether they are active by default, +// see Writing Code to Use AWS STS Regions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code) +// in the IAM User Guide. +// +// Recording API requests +// +// STS supports AWS CloudTrail, which is a service that records AWS calls for +// your AWS account and delivers log files to an Amazon S3 bucket. By using +// information collected by CloudTrail, you can determine what requests were +// successfully made to STS, who made the request, when it was made, and so +// on. +// +// If you activate AWS STS endpoints in Regions other than the default global +// endpoint, then you must also turn on CloudTrail logging in those Regions. +// This is necessary to record any AWS STS API calls that are made in those +// Regions. For more information, see Turning On CloudTrail in Additional Regions +// (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/aggregating_logs_regions_turn_on_ct.html) +// in the AWS CloudTrail User Guide. +// +// AWS Security Token Service (STS) is a global service with a single endpoint +// at https://sts.amazonaws.com. Calls to this endpoint are logged as calls +// to a global service. However, because this endpoint is physically located +// in the US East (N. Virginia) Region, your logs list us-east-1 as the event +// Region. CloudTrail does not write these logs to the US East (Ohio) Region +// unless you choose to include global service logs in that Region. CloudTrail +// writes calls to all Regional endpoints to their respective Regions. For example, +// calls to sts.us-east-2.amazonaws.com are published to the US East (Ohio) +// Region and calls to sts.eu-central-1.amazonaws.com are published to the EU +// (Frankfurt) Region. +// +// To learn more about CloudTrail, including how to turn it on and find your +// log files, see the AWS CloudTrail User Guide (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html). +// +// See https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15 for more information on this service. +// +// See sts package documentation for more information. +// https://docs.aws.amazon.com/sdk-for-go/api/service/sts/ +// +// Using the Client +// +// To contact AWS Security Token Service with the SDK use the New function to create +// a new service client. With that client you can make API requests to the service. +// These clients are safe to use concurrently. +// +// See the SDK's documentation for more information on how to use the SDK. +// https://docs.aws.amazon.com/sdk-for-go/api/ +// +// See aws.Config documentation for more information on configuring SDK clients. +// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config +// +// See the AWS Security Token Service client STS for more +// information on creating client for this service. +// https://docs.aws.amazon.com/sdk-for-go/api/service/sts/#New +package sts diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go index dbcd66759c8..a233f542ef2 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/errors.go @@ -1,4 +1,4 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. package sts @@ -14,11 +14,11 @@ const ( // ErrCodeIDPCommunicationErrorException for service response error code // "IDPCommunicationError". // - // The request could not be fulfilled because the non-AWS identity provider - // (IDP) that was asked to verify the incoming identity token could not be reached. - // This is often a transient error caused by network conditions. Retry the request + // The request could not be fulfilled because the identity provider (IDP) that + // was asked to verify the incoming identity token could not be reached. This + // is often a transient error caused by network conditions. Retry the request // a limited number of times so that you don't exceed the request rate. If the - // error persists, the non-AWS identity provider might be down or not responding. + // error persists, the identity provider might be down or not responding. ErrCodeIDPCommunicationErrorException = "IDPCommunicationError" // ErrCodeIDPRejectedClaimException for service response error code @@ -56,9 +56,18 @@ const ( // ErrCodePackedPolicyTooLargeException for service response error code // "PackedPolicyTooLarge". // - // The request was rejected because the policy document was too large. The error - // message describes how big the policy document is, in packed form, as a percentage - // of what the API allows. + // The request was rejected because the total packed size of the session policies + // and session tags combined was too large. An AWS conversion compresses the + // session policy document, session policy ARNs, and session tags into a packed + // binary format that has a separate limit. The error message indicates by percentage + // how close the policies and tags are to the upper size limit. For more information, + // see Passing Session Tags in STS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) + // in the IAM User Guide. + // + // You could receive this error even though you meet other defined session policy + // and session tag limits. For more information, see IAM and STS Entity Character + // Limits (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) + // in the IAM User Guide. ErrCodePackedPolicyTooLargeException = "PackedPolicyTooLarge" // ErrCodeRegionDisabledException for service response error code @@ -67,7 +76,7 @@ const ( // STS is not activated in the requested region for the account that is being // asked to generate credentials. The account administrator must use the IAM // console to activate STS in that region. For more information, see Activating - // and Deactivating AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) + // and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) // in the IAM User Guide. ErrCodeRegionDisabledException = "RegionDisabledException" ) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/service.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/service.go index 9c4bfb838b5..586faed1936 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/service.go +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/service.go @@ -1,4 +1,4 @@ -// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. package sts @@ -11,54 +11,12 @@ import ( "github.com/aws/aws-sdk-go/private/protocol/query" ) -// The AWS Security Token Service (STS) is a web service that enables you to -// request temporary, limited-privilege credentials for AWS Identity and Access -// Management (IAM) users or for users that you authenticate (federated users). -// This guide provides descriptions of the STS API. For more detailed information -// about using this service, go to Temporary Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html). +// STS provides the API operation methods for making requests to +// AWS Security Token Service. See this package's package overview docs +// for details on the service. // -// As an alternative to using the API, you can use one of the AWS SDKs, which -// consist of libraries and sample code for various programming languages and -// platforms (Java, Ruby, .NET, iOS, Android, etc.). The SDKs provide a convenient -// way to create programmatic access to STS. For example, the SDKs take care -// of cryptographically signing requests, managing errors, and retrying requests -// automatically. For information about the AWS SDKs, including how to download -// and install them, see the Tools for Amazon Web Services page (http://aws.amazon.com/tools/). -// -// For information about setting up signatures and authorization through the -// API, go to Signing AWS API Requests (http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html) -// in the AWS General Reference. For general information about the Query API, -// go to Making Query Requests (http://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html) -// in Using IAM. For information about using security tokens with other AWS -// products, go to AWS Services That Work with IAM (http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) -// in the IAM User Guide. -// -// If you're new to AWS and need additional technical information about a specific -// AWS product, you can find the product's technical documentation at http://aws.amazon.com/documentation/ -// (http://aws.amazon.com/documentation/). -// -// Endpoints -// -// The AWS Security Token Service (STS) has a default endpoint of https://sts.amazonaws.com -// that maps to the US East (N. Virginia) region. Additional regions are available -// and are activated by default. For more information, see Activating and Deactivating -// AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) -// in the IAM User Guide. -// -// For information about STS endpoints, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html#sts_region) -// in the AWS General Reference. -// -// Recording API requests -// -// STS supports AWS CloudTrail, which is a service that records AWS calls for -// your AWS account and delivers log files to an Amazon S3 bucket. By using -// information collected by CloudTrail, you can determine what requests were -// successfully made to STS, who made the request, when it was made, and so -// on. To learn more about CloudTrail, including how to turn it on and find -// your log files, see the AWS CloudTrail User Guide (http://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html). -// The service client's operations are safe to be used concurrently. -// It is not safe to mutate any of the client's properties though. -// Please also see https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15 +// STS methods are safe to use concurrently. It is not safe to +// modify mutate any of the struct's properties though. type STS struct { *client.Client } @@ -71,8 +29,9 @@ var initRequest func(*request.Request) // Service information constants const ( - ServiceName = "sts" // Service endpoint prefix API calls made to. - EndpointsID = ServiceName // Service ID for Regions and Endpoints metadata. + ServiceName = "sts" // Name of service. + EndpointsID = ServiceName // ID to lookup a service endpoint with. + ServiceID = "STS" // ServiceID is a unique identifer of a specific service. ) // New creates a new instance of the STS client with a session. @@ -80,6 +39,8 @@ const ( // aws.Config parameter to add your extra config. // // Example: +// mySession := session.Must(session.NewSession()) +// // // Create a STS client from just a session. // svc := sts.New(mySession) // @@ -87,18 +48,20 @@ const ( // svc := sts.New(mySession, aws.NewConfig().WithRegion("us-west-2")) func New(p client.ConfigProvider, cfgs ...*aws.Config) *STS { c := p.ClientConfig(EndpointsID, cfgs...) - return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName) + return newClient(*c.Config, c.Handlers, c.PartitionID, c.Endpoint, c.SigningRegion, c.SigningName) } // newClient creates, initializes and returns a new service client instance. -func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *STS { +func newClient(cfg aws.Config, handlers request.Handlers, partitionID, endpoint, signingRegion, signingName string) *STS { svc := &STS{ Client: client.New( cfg, metadata.ClientInfo{ ServiceName: ServiceName, + ServiceID: ServiceID, SigningName: signingName, SigningRegion: signingRegion, + PartitionID: partitionID, Endpoint: endpoint, APIVersion: "2011-06-15", }, diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go new file mode 100644 index 00000000000..e2e1d6efe55 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/github.com/aws/aws-sdk-go/service/sts/stsiface/interface.go @@ -0,0 +1,96 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +// Package stsiface provides an interface to enable mocking the AWS Security Token Service service client +// for testing your code. +// +// It is important to note that this interface will have breaking changes +// when the service model is updated and adds new API operations, paginators, +// and waiters. +package stsiface + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/service/sts" +) + +// STSAPI provides an interface to enable mocking the +// sts.STS service client's API operation, +// paginators, and waiters. This make unit testing your code that calls out +// to the SDK's service client's calls easier. +// +// The best way to use this interface is so the SDK's service client's calls +// can be stubbed out for unit testing your code with the SDK without needing +// to inject custom request handlers into the SDK's request pipeline. +// +// // myFunc uses an SDK service client to make a request to +// // AWS Security Token Service. +// func myFunc(svc stsiface.STSAPI) bool { +// // Make svc.AssumeRole request +// } +// +// func main() { +// sess := session.New() +// svc := sts.New(sess) +// +// myFunc(svc) +// } +// +// In your _test.go file: +// +// // Define a mock struct to be used in your unit tests of myFunc. +// type mockSTSClient struct { +// stsiface.STSAPI +// } +// func (m *mockSTSClient) AssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) { +// // mock response/functionality +// } +// +// func TestMyFunc(t *testing.T) { +// // Setup Test +// mockSvc := &mockSTSClient{} +// +// myfunc(mockSvc) +// +// // Verify myFunc's functionality +// } +// +// It is important to note that this interface will have breaking changes +// when the service model is updated and adds new API operations, paginators, +// and waiters. Its suggested to use the pattern above for testing, or using +// tooling to generate mocks to satisfy the interfaces. +type STSAPI interface { + AssumeRole(*sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error) + AssumeRoleWithContext(aws.Context, *sts.AssumeRoleInput, ...request.Option) (*sts.AssumeRoleOutput, error) + AssumeRoleRequest(*sts.AssumeRoleInput) (*request.Request, *sts.AssumeRoleOutput) + + AssumeRoleWithSAML(*sts.AssumeRoleWithSAMLInput) (*sts.AssumeRoleWithSAMLOutput, error) + AssumeRoleWithSAMLWithContext(aws.Context, *sts.AssumeRoleWithSAMLInput, ...request.Option) (*sts.AssumeRoleWithSAMLOutput, error) + AssumeRoleWithSAMLRequest(*sts.AssumeRoleWithSAMLInput) (*request.Request, *sts.AssumeRoleWithSAMLOutput) + + AssumeRoleWithWebIdentity(*sts.AssumeRoleWithWebIdentityInput) (*sts.AssumeRoleWithWebIdentityOutput, error) + AssumeRoleWithWebIdentityWithContext(aws.Context, *sts.AssumeRoleWithWebIdentityInput, ...request.Option) (*sts.AssumeRoleWithWebIdentityOutput, error) + AssumeRoleWithWebIdentityRequest(*sts.AssumeRoleWithWebIdentityInput) (*request.Request, *sts.AssumeRoleWithWebIdentityOutput) + + DecodeAuthorizationMessage(*sts.DecodeAuthorizationMessageInput) (*sts.DecodeAuthorizationMessageOutput, error) + DecodeAuthorizationMessageWithContext(aws.Context, *sts.DecodeAuthorizationMessageInput, ...request.Option) (*sts.DecodeAuthorizationMessageOutput, error) + DecodeAuthorizationMessageRequest(*sts.DecodeAuthorizationMessageInput) (*request.Request, *sts.DecodeAuthorizationMessageOutput) + + GetAccessKeyInfo(*sts.GetAccessKeyInfoInput) (*sts.GetAccessKeyInfoOutput, error) + GetAccessKeyInfoWithContext(aws.Context, *sts.GetAccessKeyInfoInput, ...request.Option) (*sts.GetAccessKeyInfoOutput, error) + GetAccessKeyInfoRequest(*sts.GetAccessKeyInfoInput) (*request.Request, *sts.GetAccessKeyInfoOutput) + + GetCallerIdentity(*sts.GetCallerIdentityInput) (*sts.GetCallerIdentityOutput, error) + GetCallerIdentityWithContext(aws.Context, *sts.GetCallerIdentityInput, ...request.Option) (*sts.GetCallerIdentityOutput, error) + GetCallerIdentityRequest(*sts.GetCallerIdentityInput) (*request.Request, *sts.GetCallerIdentityOutput) + + GetFederationToken(*sts.GetFederationTokenInput) (*sts.GetFederationTokenOutput, error) + GetFederationTokenWithContext(aws.Context, *sts.GetFederationTokenInput, ...request.Option) (*sts.GetFederationTokenOutput, error) + GetFederationTokenRequest(*sts.GetFederationTokenInput) (*request.Request, *sts.GetFederationTokenOutput) + + GetSessionToken(*sts.GetSessionTokenInput) (*sts.GetSessionTokenOutput, error) + GetSessionTokenWithContext(aws.Context, *sts.GetSessionTokenInput, ...request.Option) (*sts.GetSessionTokenOutput, error) + GetSessionTokenRequest(*sts.GetSessionTokenInput) (*request.Request, *sts.GetSessionTokenOutput) +} + +var _ STSAPI = (*sts.STS)(nil) diff --git a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/vendor.json b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/vendor.json index 04d1e3fe2f6..96cc53ce8a9 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/vendor.json +++ b/vendor/github.com/hashicorp/go-discover/provider/aws/vendor/vendor.json @@ -3,31 +3,40 @@ "ignore": "test", "package": [ {"path":"github.com/Azure/azure-sdk-for-go/arm/network","revision":""}, - {"path":"github.com/aws/aws-sdk-go/aws","checksumSHA1":"aJVyZtSrQjYG/HuVHOlthf7Ep7A=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/awserr","checksumSHA1":"Y9W+4GimK4Fuxq+vyIskVYFRnX4=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/awsutil","checksumSHA1":"yyYr41HZ1Aq0hWc3J5ijXwYEcac=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/client","checksumSHA1":"iThCyNRL/oQFD9CF2SYgBGl+aww=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/client/metadata","checksumSHA1":"ieAJ+Cvp/PKv1LpUEnUXpc3OI6E=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/corehandlers","checksumSHA1":"Fl8vRSCY0MbM04cmiz/0MID+goA=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/credentials","checksumSHA1":"zu5C95rmCZff6NYZb62lEaT5ibE=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds","checksumSHA1":"u3GOAJLmdvbuNUeUEcZSEAOeL/0=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/credentials/endpointcreds","checksumSHA1":"NUJUTWlc1sV8b7WjfiYc4JZbXl0=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/credentials/stscreds","checksumSHA1":"4Ipx+5xN0gso+cENC2MHMWmQlR4=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/defaults","checksumSHA1":"lqh3fG7wCochvB4iHAZJuhhEJW0=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/ec2metadata","checksumSHA1":"/EXbk/z2TWjWc1Hvb4QYs3Wmhb8=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/endpoints","checksumSHA1":"JTrzEDPXL3pUUH+dMCixz9T9rLY=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/request","checksumSHA1":"M78rTxU55Qagqr3MYj91im2031E=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/session","checksumSHA1":"bYywgCKzqJQtFsL+XpuVRELYsgw=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/aws/signer/v4","checksumSHA1":"0FvPLvkBUpTElfUc/FZtPsJfuV0=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/private/protocol","checksumSHA1":"wk7EyvDaHwb5qqoOP/4d3cV0708=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/private/protocol/ec2query","checksumSHA1":"1QmQ3FqV37w0Zi44qv8pA1GeR0A=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/private/protocol/query","checksumSHA1":"ZqY5RWavBLWTo6j9xqdyBEaNFRk=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/private/protocol/query/queryutil","checksumSHA1":"hqTEmgtchF9SwVTW0IQId2eLUKM=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/private/protocol/rest","checksumSHA1":"szZSLm3BlYkL3vqlZhNAlYk8iwM=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil","checksumSHA1":"lZ1z4xAbT8euCzKoAsnEYic60VE=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/private/waiter","checksumSHA1":"Eo9yODN5U99BK0pMzoqnBm7PCrY=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/service/ec2","checksumSHA1":"MCyzbsgz1wWscxzKT9rOLxgTFJQ=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, - {"path":"github.com/aws/aws-sdk-go/service/sts","checksumSHA1":"Knj17ZMPWkGYTm2hZxEgnuboMM4=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, + {"path":"github.com/aws/aws-sdk-go/aws","checksumSHA1":"8TxMKuegFAKsiwMZPEXzQltBPXY=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/awserr","checksumSHA1":"Ksdhg/+t+jSC8qvpsLZFM7As73Y=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/awsutil","checksumSHA1":"REHCskSFLqqHtRW8wkOsMzvOFiM=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/client","checksumSHA1":"ss9Rg5wjfIqP9xkYuWSNQCyv7oI=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/client/metadata","checksumSHA1":"3w8kEXpxp3dpt6sEZ+DMWMTb2/M=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/corehandlers","checksumSHA1":"ZRhj01jxCR2LrzmixxIbxmYfqyg=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/credentials","checksumSHA1":"YmFIxcrTKjOhLo6HAo1eTGWqBzA=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds","checksumSHA1":"m4ENtHm+8vjbHjEKiIEyT2v455c=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/credentials/endpointcreds","checksumSHA1":"rfHFpwGwteWeqY9DOQlJ46BUymk=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/credentials/processcreds","checksumSHA1":"sPtOSV32SZr2xN7vZlF4FXo43/o=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/credentials/stscreds","checksumSHA1":"HpGIZ0u82biD/GHKWaPX/pIfTUc=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/csm","checksumSHA1":"JihCOZvCLD3aHPfC54ESRI4tmtw=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/defaults","checksumSHA1":"7AmyyJXVkMdmy8dphC3Nalx5XkI=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/ec2metadata","checksumSHA1":"J72lU/QBNWSdL9f5z838K3WZNFU=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/endpoints","checksumSHA1":"z+c0n3cKCHpsFMamWI+da6n+7oY=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/request","checksumSHA1":"dEpPoF+fhhPP8BAqUNs4TcwJUoQ=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/session","checksumSHA1":"fUMJHNPvEnq8SvEY/czQjyk9FxU=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/aws/signer/v4","checksumSHA1":"40spd4wC2N4BTDQ30cBSe1FHMLg=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/internal/ini","checksumSHA1":"PaNzoQE9kto+L5a4cfKVZJzk9iA=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/internal/sdkio","checksumSHA1":"Vn/RGbtd+7hdotxxzwU3JHQ043E=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/internal/sdkmath","checksumSHA1":"UgyXYX3WH/qoKyCfIK66Q49sCEk=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/internal/sdkrand","checksumSHA1":"fHoMEe3Sf7oYkPfZ/zfiXIuV3Ts=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/internal/sdkuri","checksumSHA1":"tQVg7Sz2zv+KkhbiXxPH0mh9spg=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/internal/shareddefaults","checksumSHA1":"sXiZ5x6j2FvlIO57pboVnRTm7QA=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/private/protocol","checksumSHA1":"hR5zJJr0uBo2h5iBf7PD6H88Y4g=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/private/protocol/ec2query","checksumSHA1":"copbmR0ZN22M8zKv+dTUm7Wi9Jo=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/private/protocol/json/jsonutil","checksumSHA1":"41yRySfUjWw5v+1S7DfjwPyOvOU=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/private/protocol/query","checksumSHA1":"gr/ieq39CrQ7QBlpWBHBQQSB6/k=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/private/protocol/query/queryutil","checksumSHA1":"+O6A945eTP9plLpkEMZB0lwBAcg=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/private/protocol/rest","checksumSHA1":"omTl9gVBrsm1CADbPa3ttlAf+/k=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil","checksumSHA1":"RgRHNoTVgHjDATvHBrongSZVAqc=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/service/ec2","checksumSHA1":"zJRypAeI9h8DRJjdPzQQRSs4rZk=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/service/sts","checksumSHA1":"9Fz20RW06370hpTyVEaFlzHMjK0=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, + {"path":"github.com/aws/aws-sdk-go/service/sts/stsiface","checksumSHA1":"3PGZCtYT5P76EYWq5WDrF2L+7Vw=","revision":"4884dc6ba07ec4507452bc3a7e4f676da51e7f2f","revisionTime":"2019-11-23T00:50:32Z"}, {"path":"github.com/go-ini/ini","checksumSHA1":"cVyhKIRI2gQrgpn5qrBeAqErmWM=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"}, {"path":"github.com/jmespath/go-jmespath","checksumSHA1":"0ZrwvB6KoGPj2PoDNSEJwxQ6Mog=","revision":"7696a9f8be6a9e03b2074b4c88eee5ed3c4f0599","revisionTime":"2017-06-10T21:46:25Z"} ], diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/azure_discover.go b/vendor/github.com/hashicorp/go-discover/provider/azure/azure_discover.go index 7c8b06242d1..2106b663f23 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/azure_discover.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/azure_discover.go @@ -6,11 +6,11 @@ import ( "fmt" "io/ioutil" "log" + "os" "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network" "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/adal" - "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/azure/auth" ) type Provider struct { @@ -29,6 +29,19 @@ func (p *Provider) Help() string { client_id: The id of the client subscription_id: The id of the subscription secret_access_key: The authentication credential + **NOTE** The secret_access_key value often may have an equals sign in it's value, + especially if generated from the Azure Portal. So is important to wrap in single quotes + eg. secret_acccess_key='fpOfcHQJAQBczjAxiVpeyLmX1M0M0KPBST+GU2GvEN4=' + + Variables can also be provided by environmental variables: + export ARM_SUBSCRIPTION_ID for subscription + export ARM_TENANT_ID for tenant + export ARM_CLIENT_ID for client + export ARM_CLIENT_SECRET for secret access key + + If none of those options are given, the Azure SDK is using the default environment based authentication outlined + here https://docs.microsoft.com/en-us/go/azure/azure-sdk-go-authorization#use-environment-based-authentication + This will fallback to MSI if nothing is explicitly specified. Use these configuration parameters when using tags: @@ -40,15 +53,25 @@ func (p *Provider) Help() string { resource_group: The name of the resource group to filter on vm_scale_set: The name of the virtual machine scale set to filter on - When using tags the only permission needed is the 'ListAll' method for - 'NetworkInterfaces'. When using Virtual Machine Scale Sets the only Role - Action needed is 'Microsoft.Compute/virtualMachineScaleSets/*/read'. + When using tags the only permission needed is Microsoft.Network/networkInterfaces/* + + When using Virtual Machine Scale Sets the only role action needed is Microsoft.Compute/virtualMachineScaleSets/*/read. It is recommended you make a dedicated key used only for auto-joining. ` } +// argsOrEnv allows you to pick an environmental variable for a setting if the arg is not set +func argsOrEnv(args map[string]string, key, env string) string { + if value, ok := args[key]; ok { + return value + } + return os.Getenv(env) +} + func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error) { + var authorizer autorest.Authorizer + if args["provider"] != "azure" { return nil, fmt.Errorf("discover-azure: invalid provider " + args["provider"]) } @@ -57,10 +80,27 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error l = log.New(ioutil.Discard, "", 0) } - tenantID := args["tenant_id"] - clientID := args["client_id"] - subscriptionID := args["subscription_id"] - secretKey := args["secret_access_key"] + // check for environmental variables, and use if the argument hasn't been set in config + tenantID := argsOrEnv(args, "tenant_id", "ARM_TENANT_ID") + clientID := argsOrEnv(args, "client_id", "ARM_CLIENT_ID") + subscriptionID := argsOrEnv(args, "subscription_id", "ARM_SUBSCRIPTION_ID") + secretKey := argsOrEnv(args, "secret_access_key", "ARM_CLIENT_SECRET") + + // Try to use the argument and environment provided arguments first, if this fails fall back to the Azure + // SDK provided methods + if tenantID != "" && clientID != "" && secretKey != "" { + var err error + authorizer, err = auth.NewClientCredentialsConfig(clientID, secretKey, tenantID).Authorizer() + if err != nil { + return nil, fmt.Errorf("discover-azure (ClientCredentials): %s", err) + } + } else { + var err error + authorizer, err = auth.NewAuthorizerFromEnvironment() + if err != nil { + return nil, fmt.Errorf("discover-azure (EnvironmentCredentials): %s", err) + } + } // Use tags if using network interfaces tagName := args["tag_name"] @@ -70,22 +110,10 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error resourceGroup := args["resource_group"] vmScaleSet := args["vm_scale_set"] - // Only works for the Azure PublicCLoud for now; no ability to test other Environment - oauthConfig, err := adal.NewOAuthConfig(azure.PublicCloud.ActiveDirectoryEndpoint, tenantID) - if err != nil { - return nil, fmt.Errorf("discover-azure: %s", err) - } - - // Get the ServicePrincipalToken for use searching the NetworkInterfaces - sbt, err := adal.NewServicePrincipalToken(*oauthConfig, clientID, secretKey, azure.PublicCloud.ResourceManagerEndpoint) - if err != nil { - return nil, fmt.Errorf("discover-azure: %s", err) - } - // Setup the client using autorest; followed the structure from Terraform vmnet := network.NewInterfacesClient(subscriptionID) vmnet.Sender = autorest.CreateSender(autorest.WithLogging(l)) - vmnet.Authorizer = autorest.NewBearerAuthorizer(sbt) + vmnet.Authorizer = authorizer if p.userAgent != "" { vmnet.Client.UserAgent = p.userAgent diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/applicationgateways.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/applicationgateways.go index dd4757ae812..f02c887e63d 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/applicationgateways.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/applicationgateways.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -45,6 +46,16 @@ func NewApplicationGatewaysClientWithBaseURI(baseURI string, subscriptionID stri // applicationGatewayName - the name of the application gateway. // parameters - parameters supplied to the create or update application gateway operation. func (client ApplicationGatewaysClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, applicationGatewayName string, parameters ApplicationGateway) (result ApplicationGatewaysCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, applicationGatewayName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -86,15 +97,13 @@ func (client ApplicationGatewaysClient) CreateOrUpdatePreparer(ctx context.Conte // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client ApplicationGatewaysClient) CreateOrUpdateSender(req *http.Request) (future ApplicationGatewaysCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -116,6 +125,16 @@ func (client ApplicationGatewaysClient) CreateOrUpdateResponder(resp *http.Respo // resourceGroupName - the name of the resource group. // applicationGatewayName - the name of the application gateway. func (client ApplicationGatewaysClient) Delete(ctx context.Context, resourceGroupName string, applicationGatewayName string) (result ApplicationGatewaysDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, applicationGatewayName) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysClient", "Delete", nil, "Failure preparing request") @@ -155,15 +174,13 @@ func (client ApplicationGatewaysClient) DeletePreparer(ctx context.Context, reso // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client ApplicationGatewaysClient) DeleteSender(req *http.Request) (future ApplicationGatewaysDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -184,6 +201,16 @@ func (client ApplicationGatewaysClient) DeleteResponder(resp *http.Response) (re // resourceGroupName - the name of the resource group. // applicationGatewayName - the name of the application gateway. func (client ApplicationGatewaysClient) Get(ctx context.Context, resourceGroupName string, applicationGatewayName string) (result ApplicationGateway, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, applicationGatewayName) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysClient", "Get", nil, "Failure preparing request") @@ -229,8 +256,8 @@ func (client ApplicationGatewaysClient) GetPreparer(ctx context.Context, resourc // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client ApplicationGatewaysClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -250,6 +277,16 @@ func (client ApplicationGatewaysClient) GetResponder(resp *http.Response) (resul // Parameters: // resourceGroupName - the name of the resource group. func (client ApplicationGatewaysClient) List(ctx context.Context, resourceGroupName string) (result ApplicationGatewayListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.List") + defer func() { + sc := -1 + if result.aglr.Response.Response != nil { + sc = result.aglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -295,8 +332,8 @@ func (client ApplicationGatewaysClient) ListPreparer(ctx context.Context, resour // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client ApplicationGatewaysClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -313,8 +350,8 @@ func (client ApplicationGatewaysClient) ListResponder(resp *http.Response) (resu } // listNextResults retrieves the next set of results, if any. -func (client ApplicationGatewaysClient) listNextResults(lastResults ApplicationGatewayListResult) (result ApplicationGatewayListResult, err error) { - req, err := lastResults.applicationGatewayListResultPreparer() +func (client ApplicationGatewaysClient) listNextResults(ctx context.Context, lastResults ApplicationGatewayListResult) (result ApplicationGatewayListResult, err error) { + req, err := lastResults.applicationGatewayListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ApplicationGatewaysClient", "listNextResults", nil, "Failure preparing next results request") } @@ -335,12 +372,32 @@ func (client ApplicationGatewaysClient) listNextResults(lastResults ApplicationG // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client ApplicationGatewaysClient) ListComplete(ctx context.Context, resourceGroupName string) (result ApplicationGatewayListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } // ListAll gets all the application gateways in a subscription. func (client ApplicationGatewaysClient) ListAll(ctx context.Context) (result ApplicationGatewayListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.ListAll") + defer func() { + sc := -1 + if result.aglr.Response.Response != nil { + sc = result.aglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listAllNextResults req, err := client.ListAllPreparer(ctx) if err != nil { @@ -385,8 +442,8 @@ func (client ApplicationGatewaysClient) ListAllPreparer(ctx context.Context) (*h // ListAllSender sends the ListAll request. The method will close the // http.Response Body if it receives an error. func (client ApplicationGatewaysClient) ListAllSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListAllResponder handles the response to the ListAll request. The method always @@ -403,8 +460,8 @@ func (client ApplicationGatewaysClient) ListAllResponder(resp *http.Response) (r } // listAllNextResults retrieves the next set of results, if any. -func (client ApplicationGatewaysClient) listAllNextResults(lastResults ApplicationGatewayListResult) (result ApplicationGatewayListResult, err error) { - req, err := lastResults.applicationGatewayListResultPreparer() +func (client ApplicationGatewaysClient) listAllNextResults(ctx context.Context, lastResults ApplicationGatewayListResult) (result ApplicationGatewayListResult, err error) { + req, err := lastResults.applicationGatewayListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ApplicationGatewaysClient", "listAllNextResults", nil, "Failure preparing next results request") } @@ -425,6 +482,16 @@ func (client ApplicationGatewaysClient) listAllNextResults(lastResults Applicati // ListAllComplete enumerates all values, automatically crossing page boundaries as required. func (client ApplicationGatewaysClient) ListAllComplete(ctx context.Context) (result ApplicationGatewayListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListAll(ctx) return } @@ -434,6 +501,16 @@ func (client ApplicationGatewaysClient) ListAllComplete(ctx context.Context) (re // resourceGroupName - the name of the resource group. // applicationGatewayName - the name of the application gateway. func (client ApplicationGatewaysClient) Start(ctx context.Context, resourceGroupName string, applicationGatewayName string) (result ApplicationGatewaysStartFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.Start") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.StartPreparer(ctx, resourceGroupName, applicationGatewayName) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysClient", "Start", nil, "Failure preparing request") @@ -473,15 +550,13 @@ func (client ApplicationGatewaysClient) StartPreparer(ctx context.Context, resou // StartSender sends the Start request. The method will close the // http.Response Body if it receives an error. func (client ApplicationGatewaysClient) StartSender(req *http.Request) (future ApplicationGatewaysStartFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -502,6 +577,16 @@ func (client ApplicationGatewaysClient) StartResponder(resp *http.Response) (res // resourceGroupName - the name of the resource group. // applicationGatewayName - the name of the application gateway. func (client ApplicationGatewaysClient) Stop(ctx context.Context, resourceGroupName string, applicationGatewayName string) (result ApplicationGatewaysStopFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewaysClient.Stop") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.StopPreparer(ctx, resourceGroupName, applicationGatewayName) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysClient", "Stop", nil, "Failure preparing request") @@ -541,15 +626,13 @@ func (client ApplicationGatewaysClient) StopPreparer(ctx context.Context, resour // StopSender sends the Stop request. The method will close the // http.Response Body if it receives an error. func (client ApplicationGatewaysClient) StopSender(req *http.Request) (future ApplicationGatewaysStopFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted)) + future.Future, err = azure.NewFutureFromResponse(resp) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/client.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/client.go index f487b26a8ca..8a41870069f 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/client.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/client.go @@ -24,6 +24,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -59,6 +60,16 @@ func NewWithBaseURI(baseURI string, subscriptionID string) BaseClient { // domainNameLabel - the domain name to be verified. It must conform to the following regular expression: // ^[a-z][a-z0-9-]{1,61}[a-z0-9]$. func (client BaseClient) CheckDNSNameAvailability(ctx context.Context, location string, domainNameLabel string) (result DNSNameAvailabilityResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BaseClient.CheckDNSNameAvailability") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CheckDNSNameAvailabilityPreparer(ctx, location, domainNameLabel) if err != nil { err = autorest.NewErrorWithError(err, "network.BaseClient", "CheckDNSNameAvailability", nil, "Failure preparing request") @@ -106,8 +117,8 @@ func (client BaseClient) CheckDNSNameAvailabilityPreparer(ctx context.Context, l // CheckDNSNameAvailabilitySender sends the CheckDNSNameAvailability request. The method will close the // http.Response Body if it receives an error. func (client BaseClient) CheckDNSNameAvailabilitySender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // CheckDNSNameAvailabilityResponder handles the response to the CheckDNSNameAvailability request. The method always diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuitauthorizations.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuitauthorizations.go index e9b3f102764..52155a32197 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuitauthorizations.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuitauthorizations.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -49,6 +50,16 @@ func NewExpressRouteCircuitAuthorizationsClientWithBaseURI(baseURI string, subsc // authorizationParameters - parameters supplied to the create or update express route circuit authorization // operation. func (client ExpressRouteCircuitAuthorizationsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, circuitName string, authorizationName string, authorizationParameters ExpressRouteCircuitAuthorization) (result ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitAuthorizationsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, circuitName, authorizationName, authorizationParameters) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -91,15 +102,13 @@ func (client ExpressRouteCircuitAuthorizationsClient) CreateOrUpdatePreparer(ctx // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitAuthorizationsClient) CreateOrUpdateSender(req *http.Request) (future ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -122,6 +131,16 @@ func (client ExpressRouteCircuitAuthorizationsClient) CreateOrUpdateResponder(re // circuitName - the name of the express route circuit. // authorizationName - the name of the authorization. func (client ExpressRouteCircuitAuthorizationsClient) Delete(ctx context.Context, resourceGroupName string, circuitName string, authorizationName string) (result ExpressRouteCircuitAuthorizationsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitAuthorizationsClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, circuitName, authorizationName) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsClient", "Delete", nil, "Failure preparing request") @@ -162,15 +181,13 @@ func (client ExpressRouteCircuitAuthorizationsClient) DeletePreparer(ctx context // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitAuthorizationsClient) DeleteSender(req *http.Request) (future ExpressRouteCircuitAuthorizationsDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -192,6 +209,16 @@ func (client ExpressRouteCircuitAuthorizationsClient) DeleteResponder(resp *http // circuitName - the name of the express route circuit. // authorizationName - the name of the authorization. func (client ExpressRouteCircuitAuthorizationsClient) Get(ctx context.Context, resourceGroupName string, circuitName string, authorizationName string) (result ExpressRouteCircuitAuthorization, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitAuthorizationsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, circuitName, authorizationName) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsClient", "Get", nil, "Failure preparing request") @@ -238,8 +265,8 @@ func (client ExpressRouteCircuitAuthorizationsClient) GetPreparer(ctx context.Co // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitAuthorizationsClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -260,6 +287,16 @@ func (client ExpressRouteCircuitAuthorizationsClient) GetResponder(resp *http.Re // resourceGroupName - the name of the resource group. // circuitName - the name of the circuit. func (client ExpressRouteCircuitAuthorizationsClient) List(ctx context.Context, resourceGroupName string, circuitName string) (result AuthorizationListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitAuthorizationsClient.List") + defer func() { + sc := -1 + if result.alr.Response.Response != nil { + sc = result.alr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName, circuitName) if err != nil { @@ -306,8 +343,8 @@ func (client ExpressRouteCircuitAuthorizationsClient) ListPreparer(ctx context.C // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitAuthorizationsClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -324,8 +361,8 @@ func (client ExpressRouteCircuitAuthorizationsClient) ListResponder(resp *http.R } // listNextResults retrieves the next set of results, if any. -func (client ExpressRouteCircuitAuthorizationsClient) listNextResults(lastResults AuthorizationListResult) (result AuthorizationListResult, err error) { - req, err := lastResults.authorizationListResultPreparer() +func (client ExpressRouteCircuitAuthorizationsClient) listNextResults(ctx context.Context, lastResults AuthorizationListResult) (result AuthorizationListResult, err error) { + req, err := lastResults.authorizationListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsClient", "listNextResults", nil, "Failure preparing next results request") } @@ -346,6 +383,16 @@ func (client ExpressRouteCircuitAuthorizationsClient) listNextResults(lastResult // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client ExpressRouteCircuitAuthorizationsClient) ListComplete(ctx context.Context, resourceGroupName string, circuitName string) (result AuthorizationListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitAuthorizationsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName, circuitName) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuitpeerings.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuitpeerings.go index 84e7d0b2cbc..81252fe0cd0 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuitpeerings.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuitpeerings.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -46,6 +47,16 @@ func NewExpressRouteCircuitPeeringsClientWithBaseURI(baseURI string, subscriptio // peeringName - the name of the peering. // peeringParameters - parameters supplied to the create or update express route circuit peering operation. func (client ExpressRouteCircuitPeeringsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, circuitName string, peeringName string, peeringParameters ExpressRouteCircuitPeering) (result ExpressRouteCircuitPeeringsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, circuitName, peeringName, peeringParameters) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -88,15 +99,13 @@ func (client ExpressRouteCircuitPeeringsClient) CreateOrUpdatePreparer(ctx conte // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitPeeringsClient) CreateOrUpdateSender(req *http.Request) (future ExpressRouteCircuitPeeringsCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -119,6 +128,16 @@ func (client ExpressRouteCircuitPeeringsClient) CreateOrUpdateResponder(resp *ht // circuitName - the name of the express route circuit. // peeringName - the name of the peering. func (client ExpressRouteCircuitPeeringsClient) Delete(ctx context.Context, resourceGroupName string, circuitName string, peeringName string) (result ExpressRouteCircuitPeeringsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringsClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, circuitName, peeringName) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsClient", "Delete", nil, "Failure preparing request") @@ -159,15 +178,13 @@ func (client ExpressRouteCircuitPeeringsClient) DeletePreparer(ctx context.Conte // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitPeeringsClient) DeleteSender(req *http.Request) (future ExpressRouteCircuitPeeringsDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -189,6 +206,16 @@ func (client ExpressRouteCircuitPeeringsClient) DeleteResponder(resp *http.Respo // circuitName - the name of the express route circuit. // peeringName - the name of the peering. func (client ExpressRouteCircuitPeeringsClient) Get(ctx context.Context, resourceGroupName string, circuitName string, peeringName string) (result ExpressRouteCircuitPeering, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, circuitName, peeringName) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsClient", "Get", nil, "Failure preparing request") @@ -235,8 +262,8 @@ func (client ExpressRouteCircuitPeeringsClient) GetPreparer(ctx context.Context, // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitPeeringsClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -257,6 +284,16 @@ func (client ExpressRouteCircuitPeeringsClient) GetResponder(resp *http.Response // resourceGroupName - the name of the resource group. // circuitName - the name of the express route circuit. func (client ExpressRouteCircuitPeeringsClient) List(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitPeeringListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringsClient.List") + defer func() { + sc := -1 + if result.ercplr.Response.Response != nil { + sc = result.ercplr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName, circuitName) if err != nil { @@ -303,8 +340,8 @@ func (client ExpressRouteCircuitPeeringsClient) ListPreparer(ctx context.Context // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitPeeringsClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -321,8 +358,8 @@ func (client ExpressRouteCircuitPeeringsClient) ListResponder(resp *http.Respons } // listNextResults retrieves the next set of results, if any. -func (client ExpressRouteCircuitPeeringsClient) listNextResults(lastResults ExpressRouteCircuitPeeringListResult) (result ExpressRouteCircuitPeeringListResult, err error) { - req, err := lastResults.expressRouteCircuitPeeringListResultPreparer() +func (client ExpressRouteCircuitPeeringsClient) listNextResults(ctx context.Context, lastResults ExpressRouteCircuitPeeringListResult) (result ExpressRouteCircuitPeeringListResult, err error) { + req, err := lastResults.expressRouteCircuitPeeringListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsClient", "listNextResults", nil, "Failure preparing next results request") } @@ -343,6 +380,16 @@ func (client ExpressRouteCircuitPeeringsClient) listNextResults(lastResults Expr // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client ExpressRouteCircuitPeeringsClient) ListComplete(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitPeeringListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName, circuitName) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuits.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuits.go index 1b6246cadd2..893e8e46835 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuits.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressroutecircuits.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -45,6 +46,16 @@ func NewExpressRouteCircuitsClientWithBaseURI(baseURI string, subscriptionID str // circuitName - the name of the circuit. // parameters - parameters supplied to the create or update express route circuit operation. func (client ExpressRouteCircuitsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, circuitName string, parameters ExpressRouteCircuit) (result ExpressRouteCircuitsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, circuitName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -86,15 +97,13 @@ func (client ExpressRouteCircuitsClient) CreateOrUpdatePreparer(ctx context.Cont // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitsClient) CreateOrUpdateSender(req *http.Request) (future ExpressRouteCircuitsCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -116,6 +125,16 @@ func (client ExpressRouteCircuitsClient) CreateOrUpdateResponder(resp *http.Resp // resourceGroupName - the name of the resource group. // circuitName - the name of the express route circuit. func (client ExpressRouteCircuitsClient) Delete(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, circuitName) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsClient", "Delete", nil, "Failure preparing request") @@ -155,15 +174,13 @@ func (client ExpressRouteCircuitsClient) DeletePreparer(ctx context.Context, res // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitsClient) DeleteSender(req *http.Request) (future ExpressRouteCircuitsDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -184,6 +201,16 @@ func (client ExpressRouteCircuitsClient) DeleteResponder(resp *http.Response) (r // resourceGroupName - the name of the resource group. // circuitName - the name of express route circuit. func (client ExpressRouteCircuitsClient) Get(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuit, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, circuitName) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsClient", "Get", nil, "Failure preparing request") @@ -229,8 +256,8 @@ func (client ExpressRouteCircuitsClient) GetPreparer(ctx context.Context, resour // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitsClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -250,6 +277,16 @@ func (client ExpressRouteCircuitsClient) GetResponder(resp *http.Response) (resu // Parameters: // resourceGroupName - the name of the resource group. func (client ExpressRouteCircuitsClient) List(ctx context.Context, resourceGroupName string) (result ExpressRouteCircuitListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.List") + defer func() { + sc := -1 + if result.erclr.Response.Response != nil { + sc = result.erclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -295,8 +332,8 @@ func (client ExpressRouteCircuitsClient) ListPreparer(ctx context.Context, resou // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitsClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -313,8 +350,8 @@ func (client ExpressRouteCircuitsClient) ListResponder(resp *http.Response) (res } // listNextResults retrieves the next set of results, if any. -func (client ExpressRouteCircuitsClient) listNextResults(lastResults ExpressRouteCircuitListResult) (result ExpressRouteCircuitListResult, err error) { - req, err := lastResults.expressRouteCircuitListResultPreparer() +func (client ExpressRouteCircuitsClient) listNextResults(ctx context.Context, lastResults ExpressRouteCircuitListResult) (result ExpressRouteCircuitListResult, err error) { + req, err := lastResults.expressRouteCircuitListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsClient", "listNextResults", nil, "Failure preparing next results request") } @@ -335,12 +372,32 @@ func (client ExpressRouteCircuitsClient) listNextResults(lastResults ExpressRout // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client ExpressRouteCircuitsClient) ListComplete(ctx context.Context, resourceGroupName string) (result ExpressRouteCircuitListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } // ListAll gets all the express route circuits in a subscription. func (client ExpressRouteCircuitsClient) ListAll(ctx context.Context) (result ExpressRouteCircuitListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.ListAll") + defer func() { + sc := -1 + if result.erclr.Response.Response != nil { + sc = result.erclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listAllNextResults req, err := client.ListAllPreparer(ctx) if err != nil { @@ -385,8 +442,8 @@ func (client ExpressRouteCircuitsClient) ListAllPreparer(ctx context.Context) (* // ListAllSender sends the ListAll request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitsClient) ListAllSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListAllResponder handles the response to the ListAll request. The method always @@ -403,8 +460,8 @@ func (client ExpressRouteCircuitsClient) ListAllResponder(resp *http.Response) ( } // listAllNextResults retrieves the next set of results, if any. -func (client ExpressRouteCircuitsClient) listAllNextResults(lastResults ExpressRouteCircuitListResult) (result ExpressRouteCircuitListResult, err error) { - req, err := lastResults.expressRouteCircuitListResultPreparer() +func (client ExpressRouteCircuitsClient) listAllNextResults(ctx context.Context, lastResults ExpressRouteCircuitListResult) (result ExpressRouteCircuitListResult, err error) { + req, err := lastResults.expressRouteCircuitListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsClient", "listAllNextResults", nil, "Failure preparing next results request") } @@ -425,16 +482,36 @@ func (client ExpressRouteCircuitsClient) listAllNextResults(lastResults ExpressR // ListAllComplete enumerates all values, automatically crossing page boundaries as required. func (client ExpressRouteCircuitsClient) ListAllComplete(ctx context.Context) (result ExpressRouteCircuitListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListAll(ctx) return } -// ListArpTable the ListArpTable from ExpressRouteCircuit opertion retrieves the currently advertised arp table +// ListArpTable the ListArpTable from ExpressRouteCircuit operation retrieves the currently advertised arp table // associated with the ExpressRouteCircuits in a resource group. // Parameters: // resourceGroupName - the name of the resource group. // circuitName - the name of the circuit. func (client ExpressRouteCircuitsClient) ListArpTable(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitsArpTableListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.ListArpTable") + defer func() { + sc := -1 + if result.ercatlr.Response.Response != nil { + sc = result.ercatlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listArpTableNextResults req, err := client.ListArpTablePreparer(ctx, resourceGroupName, circuitName) if err != nil { @@ -481,8 +558,8 @@ func (client ExpressRouteCircuitsClient) ListArpTablePreparer(ctx context.Contex // ListArpTableSender sends the ListArpTable request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitsClient) ListArpTableSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListArpTableResponder handles the response to the ListArpTable request. The method always @@ -499,8 +576,8 @@ func (client ExpressRouteCircuitsClient) ListArpTableResponder(resp *http.Respon } // listArpTableNextResults retrieves the next set of results, if any. -func (client ExpressRouteCircuitsClient) listArpTableNextResults(lastResults ExpressRouteCircuitsArpTableListResult) (result ExpressRouteCircuitsArpTableListResult, err error) { - req, err := lastResults.expressRouteCircuitsArpTableListResultPreparer() +func (client ExpressRouteCircuitsClient) listArpTableNextResults(ctx context.Context, lastResults ExpressRouteCircuitsArpTableListResult) (result ExpressRouteCircuitsArpTableListResult, err error) { + req, err := lastResults.expressRouteCircuitsArpTableListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsClient", "listArpTableNextResults", nil, "Failure preparing next results request") } @@ -521,16 +598,36 @@ func (client ExpressRouteCircuitsClient) listArpTableNextResults(lastResults Exp // ListArpTableComplete enumerates all values, automatically crossing page boundaries as required. func (client ExpressRouteCircuitsClient) ListArpTableComplete(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitsArpTableListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.ListArpTable") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListArpTable(ctx, resourceGroupName, circuitName) return } -// ListRoutesTable the ListRoutesTable from ExpressRouteCircuit opertion retrieves the currently advertised routes +// ListRoutesTable the ListRoutesTable from ExpressRouteCircuit operation retrieves the currently advertised routes // table associated with the ExpressRouteCircuits in a resource group. // Parameters: // resourceGroupName - the name of the resource group. // circuitName - the name of the circuit. func (client ExpressRouteCircuitsClient) ListRoutesTable(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitsRoutesTableListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.ListRoutesTable") + defer func() { + sc := -1 + if result.ercrtlr.Response.Response != nil { + sc = result.ercrtlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listRoutesTableNextResults req, err := client.ListRoutesTablePreparer(ctx, resourceGroupName, circuitName) if err != nil { @@ -577,8 +674,8 @@ func (client ExpressRouteCircuitsClient) ListRoutesTablePreparer(ctx context.Con // ListRoutesTableSender sends the ListRoutesTable request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitsClient) ListRoutesTableSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListRoutesTableResponder handles the response to the ListRoutesTable request. The method always @@ -595,8 +692,8 @@ func (client ExpressRouteCircuitsClient) ListRoutesTableResponder(resp *http.Res } // listRoutesTableNextResults retrieves the next set of results, if any. -func (client ExpressRouteCircuitsClient) listRoutesTableNextResults(lastResults ExpressRouteCircuitsRoutesTableListResult) (result ExpressRouteCircuitsRoutesTableListResult, err error) { - req, err := lastResults.expressRouteCircuitsRoutesTableListResultPreparer() +func (client ExpressRouteCircuitsClient) listRoutesTableNextResults(ctx context.Context, lastResults ExpressRouteCircuitsRoutesTableListResult) (result ExpressRouteCircuitsRoutesTableListResult, err error) { + req, err := lastResults.expressRouteCircuitsRoutesTableListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsClient", "listRoutesTableNextResults", nil, "Failure preparing next results request") } @@ -617,16 +714,36 @@ func (client ExpressRouteCircuitsClient) listRoutesTableNextResults(lastResults // ListRoutesTableComplete enumerates all values, automatically crossing page boundaries as required. func (client ExpressRouteCircuitsClient) ListRoutesTableComplete(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitsRoutesTableListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.ListRoutesTable") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListRoutesTable(ctx, resourceGroupName, circuitName) return } -// ListStats the Liststats ExpressRouteCircuit opertion retrieves all the stats from a ExpressRouteCircuits in a +// ListStats the ListStats ExpressRouteCircuit operation retrieves all the stats from a ExpressRouteCircuits in a // resource group. // Parameters: // resourceGroupName - the name of the resource group. // circuitName - the name of the loadBalancer. func (client ExpressRouteCircuitsClient) ListStats(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitsStatsListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.ListStats") + defer func() { + sc := -1 + if result.ercslr.Response.Response != nil { + sc = result.ercslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listStatsNextResults req, err := client.ListStatsPreparer(ctx, resourceGroupName, circuitName) if err != nil { @@ -673,8 +790,8 @@ func (client ExpressRouteCircuitsClient) ListStatsPreparer(ctx context.Context, // ListStatsSender sends the ListStats request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteCircuitsClient) ListStatsSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListStatsResponder handles the response to the ListStats request. The method always @@ -691,8 +808,8 @@ func (client ExpressRouteCircuitsClient) ListStatsResponder(resp *http.Response) } // listStatsNextResults retrieves the next set of results, if any. -func (client ExpressRouteCircuitsClient) listStatsNextResults(lastResults ExpressRouteCircuitsStatsListResult) (result ExpressRouteCircuitsStatsListResult, err error) { - req, err := lastResults.expressRouteCircuitsStatsListResultPreparer() +func (client ExpressRouteCircuitsClient) listStatsNextResults(ctx context.Context, lastResults ExpressRouteCircuitsStatsListResult) (result ExpressRouteCircuitsStatsListResult, err error) { + req, err := lastResults.expressRouteCircuitsStatsListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsClient", "listStatsNextResults", nil, "Failure preparing next results request") } @@ -713,6 +830,16 @@ func (client ExpressRouteCircuitsClient) listStatsNextResults(lastResults Expres // ListStatsComplete enumerates all values, automatically crossing page boundaries as required. func (client ExpressRouteCircuitsClient) ListStatsComplete(ctx context.Context, resourceGroupName string, circuitName string) (result ExpressRouteCircuitsStatsListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsClient.ListStats") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListStats(ctx, resourceGroupName, circuitName) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressrouteserviceproviders.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressrouteserviceproviders.go index 612452ba32c..680b36c9153 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressrouteserviceproviders.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/expressrouteserviceproviders.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -42,6 +43,16 @@ func NewExpressRouteServiceProvidersClientWithBaseURI(baseURI string, subscripti // List gets all the available express route service providers. func (client ExpressRouteServiceProvidersClient) List(ctx context.Context) (result ExpressRouteServiceProviderListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProvidersClient.List") + defer func() { + sc := -1 + if result.ersplr.Response.Response != nil { + sc = result.ersplr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx) if err != nil { @@ -86,8 +97,8 @@ func (client ExpressRouteServiceProvidersClient) ListPreparer(ctx context.Contex // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client ExpressRouteServiceProvidersClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -104,8 +115,8 @@ func (client ExpressRouteServiceProvidersClient) ListResponder(resp *http.Respon } // listNextResults retrieves the next set of results, if any. -func (client ExpressRouteServiceProvidersClient) listNextResults(lastResults ExpressRouteServiceProviderListResult) (result ExpressRouteServiceProviderListResult, err error) { - req, err := lastResults.expressRouteServiceProviderListResultPreparer() +func (client ExpressRouteServiceProvidersClient) listNextResults(ctx context.Context, lastResults ExpressRouteServiceProviderListResult) (result ExpressRouteServiceProviderListResult, err error) { + req, err := lastResults.expressRouteServiceProviderListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.ExpressRouteServiceProvidersClient", "listNextResults", nil, "Failure preparing next results request") } @@ -126,6 +137,16 @@ func (client ExpressRouteServiceProvidersClient) listNextResults(lastResults Exp // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client ExpressRouteServiceProvidersClient) ListComplete(ctx context.Context) (result ExpressRouteServiceProviderListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProvidersClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/interfaces.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/interfaces.go deleted file mode 100644 index f989d7bc75f..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/interfaces.go +++ /dev/null @@ -1,702 +0,0 @@ -package network - -// Copyright (c) Microsoft and contributors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// -// See the License for the specific language governing permissions and -// limitations under the License. -// -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -import ( - "context" - "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/azure" - "net/http" -) - -// InterfacesClient is the network Client -type InterfacesClient struct { - BaseClient -} - -// NewInterfacesClient creates an instance of the InterfacesClient client. -func NewInterfacesClient(subscriptionID string) InterfacesClient { - return NewInterfacesClientWithBaseURI(DefaultBaseURI, subscriptionID) -} - -// NewInterfacesClientWithBaseURI creates an instance of the InterfacesClient client. -func NewInterfacesClientWithBaseURI(baseURI string, subscriptionID string) InterfacesClient { - return InterfacesClient{NewWithBaseURI(baseURI, subscriptionID)} -} - -// CreateOrUpdate creates or updates a network interface. -// Parameters: -// resourceGroupName - the name of the resource group. -// networkInterfaceName - the name of the network interface. -// parameters - parameters supplied to the create or update network interface operation. -func (client InterfacesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, networkInterfaceName string, parameters Interface) (result InterfacesCreateOrUpdateFuture, err error) { - req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, networkInterfaceName, parameters) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "CreateOrUpdate", nil, "Failure preparing request") - return - } - - result, err = client.CreateOrUpdateSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "CreateOrUpdate", result.Response(), "Failure sending request") - return - } - - return -} - -// CreateOrUpdatePreparer prepares the CreateOrUpdate request. -func (client InterfacesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, networkInterfaceName string, parameters Interface) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "networkInterfaceName": autorest.Encode("path", networkInterfaceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2015-06-15" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsContentType("application/json; charset=utf-8"), - autorest.AsPut(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", pathParameters), - autorest.WithJSON(parameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the -// http.Response Body if it receives an error. -func (client InterfacesClient) CreateOrUpdateSender(req *http.Request) (future InterfacesCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) - if err != nil { - return - } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) - return -} - -// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always -// closes the http.Response Body. -func (client InterfacesClient) CreateOrUpdateResponder(resp *http.Response) (result Interface, err error) { - err = autorest.Respond( - resp, - client.ByInspecting(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// Delete deletes the specified network interface. -// Parameters: -// resourceGroupName - the name of the resource group. -// networkInterfaceName - the name of the network interface. -func (client InterfacesClient) Delete(ctx context.Context, resourceGroupName string, networkInterfaceName string) (result InterfacesDeleteFuture, err error) { - req, err := client.DeletePreparer(ctx, resourceGroupName, networkInterfaceName) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Delete", nil, "Failure preparing request") - return - } - - result, err = client.DeleteSender(req) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Delete", result.Response(), "Failure sending request") - return - } - - return -} - -// DeletePreparer prepares the Delete request. -func (client InterfacesClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkInterfaceName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "networkInterfaceName": autorest.Encode("path", networkInterfaceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2015-06-15" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsDelete(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// DeleteSender sends the Delete request. The method will close the -// http.Response Body if it receives an error. -func (client InterfacesClient) DeleteSender(req *http.Request) (future InterfacesDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) - if err != nil { - return - } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) - return -} - -// DeleteResponder handles the response to the Delete request. The method always -// closes the http.Response Body. -func (client InterfacesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { - err = autorest.Respond( - resp, - client.ByInspecting(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), - autorest.ByClosing()) - result.Response = resp - return -} - -// Get gets information about the specified network interface. -// Parameters: -// resourceGroupName - the name of the resource group. -// networkInterfaceName - the name of the network interface. -// expand - expands referenced resources. -func (client InterfacesClient) Get(ctx context.Context, resourceGroupName string, networkInterfaceName string, expand string) (result Interface, err error) { - req, err := client.GetPreparer(ctx, resourceGroupName, networkInterfaceName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Get", nil, "Failure preparing request") - return - } - - resp, err := client.GetSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Get", resp, "Failure sending request") - return - } - - result, err = client.GetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Get", resp, "Failure responding to request") - } - - return -} - -// GetPreparer prepares the Get request. -func (client InterfacesClient) GetPreparer(ctx context.Context, resourceGroupName string, networkInterfaceName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "networkInterfaceName": autorest.Encode("path", networkInterfaceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2015-06-15" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetSender sends the Get request. The method will close the -// http.Response Body if it receives an error. -func (client InterfacesClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) -} - -// GetResponder handles the response to the Get request. The method always -// closes the http.Response Body. -func (client InterfacesClient) GetResponder(resp *http.Response) (result Interface, err error) { - err = autorest.Respond( - resp, - client.ByInspecting(), - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// GetVirtualMachineScaleSetNetworkInterface get the specified network interface in a virtual machine scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// virtualMachineScaleSetName - the name of the virtual machine scale set. -// virtualmachineIndex - the virtual machine index. -// networkInterfaceName - the name of the network interface. -// expand - expands referenced resources. -func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterface(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, expand string) (result Interface, err error) { - req, err := client.GetVirtualMachineScaleSetNetworkInterfacePreparer(ctx, resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex, networkInterfaceName, expand) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "GetVirtualMachineScaleSetNetworkInterface", nil, "Failure preparing request") - return - } - - resp, err := client.GetVirtualMachineScaleSetNetworkInterfaceSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "GetVirtualMachineScaleSetNetworkInterface", resp, "Failure sending request") - return - } - - result, err = client.GetVirtualMachineScaleSetNetworkInterfaceResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "GetVirtualMachineScaleSetNetworkInterface", resp, "Failure responding to request") - } - - return -} - -// GetVirtualMachineScaleSetNetworkInterfacePreparer prepares the GetVirtualMachineScaleSetNetworkInterface request. -func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterfacePreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, expand string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "networkInterfaceName": autorest.Encode("path", networkInterfaceName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "virtualmachineIndex": autorest.Encode("path", virtualmachineIndex), - "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), - } - - const APIVersion = "2015-06-15" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - if len(expand) > 0 { - queryParameters["$expand"] = autorest.Encode("query", expand) - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines/{virtualmachineIndex}/networkInterfaces/{networkInterfaceName}", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// GetVirtualMachineScaleSetNetworkInterfaceSender sends the GetVirtualMachineScaleSetNetworkInterface request. The method will close the -// http.Response Body if it receives an error. -func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterfaceSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) -} - -// GetVirtualMachineScaleSetNetworkInterfaceResponder handles the response to the GetVirtualMachineScaleSetNetworkInterface request. The method always -// closes the http.Response Body. -func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterfaceResponder(resp *http.Response) (result Interface, err error) { - err = autorest.Respond( - resp, - client.ByInspecting(), - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// List gets all network interfaces in a resource group. -// Parameters: -// resourceGroupName - the name of the resource group. -func (client InterfacesClient) List(ctx context.Context, resourceGroupName string) (result InterfaceListResultPage, err error) { - result.fn = client.listNextResults - req, err := client.ListPreparer(ctx, resourceGroupName) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "List", nil, "Failure preparing request") - return - } - - resp, err := client.ListSender(req) - if err != nil { - result.ilr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "List", resp, "Failure sending request") - return - } - - result.ilr, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "List", resp, "Failure responding to request") - } - - return -} - -// ListPreparer prepares the List request. -func (client InterfacesClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2015-06-15" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListSender sends the List request. The method will close the -// http.Response Body if it receives an error. -func (client InterfacesClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) -} - -// ListResponder handles the response to the List request. The method always -// closes the http.Response Body. -func (client InterfacesClient) ListResponder(resp *http.Response) (result InterfaceListResult, err error) { - err = autorest.Respond( - resp, - client.ByInspecting(), - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listNextResults retrieves the next set of results, if any. -func (client InterfacesClient) listNextResults(lastResults InterfaceListResult) (result InterfaceListResult, err error) { - req, err := lastResults.interfaceListResultPreparer() - if err != nil { - return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listNextResults", resp, "Failure sending next results request") - } - result, err = client.ListResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "listNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListComplete enumerates all values, automatically crossing page boundaries as required. -func (client InterfacesClient) ListComplete(ctx context.Context, resourceGroupName string) (result InterfaceListResultIterator, err error) { - result.page, err = client.List(ctx, resourceGroupName) - return -} - -// ListAll gets all network interfaces in a subscription. -func (client InterfacesClient) ListAll(ctx context.Context) (result InterfaceListResultPage, err error) { - result.fn = client.listAllNextResults - req, err := client.ListAllPreparer(ctx) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListAll", nil, "Failure preparing request") - return - } - - resp, err := client.ListAllSender(req) - if err != nil { - result.ilr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListAll", resp, "Failure sending request") - return - } - - result.ilr, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListAll", resp, "Failure responding to request") - } - - return -} - -// ListAllPreparer prepares the ListAll request. -func (client InterfacesClient) ListAllPreparer(ctx context.Context) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - } - - const APIVersion = "2015-06-15" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkInterfaces", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListAllSender sends the ListAll request. The method will close the -// http.Response Body if it receives an error. -func (client InterfacesClient) ListAllSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) -} - -// ListAllResponder handles the response to the ListAll request. The method always -// closes the http.Response Body. -func (client InterfacesClient) ListAllResponder(resp *http.Response) (result InterfaceListResult, err error) { - err = autorest.Respond( - resp, - client.ByInspecting(), - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listAllNextResults retrieves the next set of results, if any. -func (client InterfacesClient) listAllNextResults(lastResults InterfaceListResult) (result InterfaceListResult, err error) { - req, err := lastResults.interfaceListResultPreparer() - if err != nil { - return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listAllNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListAllSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listAllNextResults", resp, "Failure sending next results request") - } - result, err = client.ListAllResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "listAllNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListAllComplete enumerates all values, automatically crossing page boundaries as required. -func (client InterfacesClient) ListAllComplete(ctx context.Context) (result InterfaceListResultIterator, err error) { - result.page, err = client.ListAll(ctx) - return -} - -// ListVirtualMachineScaleSetNetworkInterfaces gets all network interfaces in a virtual machine scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// virtualMachineScaleSetName - the name of the virtual machine scale set. -func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfaces(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string) (result InterfaceListResultPage, err error) { - result.fn = client.listVirtualMachineScaleSetNetworkInterfacesNextResults - req, err := client.ListVirtualMachineScaleSetNetworkInterfacesPreparer(ctx, resourceGroupName, virtualMachineScaleSetName) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetNetworkInterfaces", nil, "Failure preparing request") - return - } - - resp, err := client.ListVirtualMachineScaleSetNetworkInterfacesSender(req) - if err != nil { - result.ilr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetNetworkInterfaces", resp, "Failure sending request") - return - } - - result.ilr, err = client.ListVirtualMachineScaleSetNetworkInterfacesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetNetworkInterfaces", resp, "Failure responding to request") - } - - return -} - -// ListVirtualMachineScaleSetNetworkInterfacesPreparer prepares the ListVirtualMachineScaleSetNetworkInterfaces request. -func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesPreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), - } - - const APIVersion = "2015-06-15" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/networkInterfaces", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListVirtualMachineScaleSetNetworkInterfacesSender sends the ListVirtualMachineScaleSetNetworkInterfaces request. The method will close the -// http.Response Body if it receives an error. -func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) -} - -// ListVirtualMachineScaleSetNetworkInterfacesResponder handles the response to the ListVirtualMachineScaleSetNetworkInterfaces request. The method always -// closes the http.Response Body. -func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesResponder(resp *http.Response) (result InterfaceListResult, err error) { - err = autorest.Respond( - resp, - client.ByInspecting(), - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listVirtualMachineScaleSetNetworkInterfacesNextResults retrieves the next set of results, if any. -func (client InterfacesClient) listVirtualMachineScaleSetNetworkInterfacesNextResults(lastResults InterfaceListResult) (result InterfaceListResult, err error) { - req, err := lastResults.interfaceListResultPreparer() - if err != nil { - return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetNetworkInterfacesNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListVirtualMachineScaleSetNetworkInterfacesSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetNetworkInterfacesNextResults", resp, "Failure sending next results request") - } - result, err = client.ListVirtualMachineScaleSetNetworkInterfacesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetNetworkInterfacesNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListVirtualMachineScaleSetNetworkInterfacesComplete enumerates all values, automatically crossing page boundaries as required. -func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesComplete(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string) (result InterfaceListResultIterator, err error) { - result.page, err = client.ListVirtualMachineScaleSetNetworkInterfaces(ctx, resourceGroupName, virtualMachineScaleSetName) - return -} - -// ListVirtualMachineScaleSetVMNetworkInterfaces gets information about all network interfaces in a virtual machine in -// a virtual machine scale set. -// Parameters: -// resourceGroupName - the name of the resource group. -// virtualMachineScaleSetName - the name of the virtual machine scale set. -// virtualmachineIndex - the virtual machine index. -func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfaces(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string) (result InterfaceListResultPage, err error) { - result.fn = client.listVirtualMachineScaleSetVMNetworkInterfacesNextResults - req, err := client.ListVirtualMachineScaleSetVMNetworkInterfacesPreparer(ctx, resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetVMNetworkInterfaces", nil, "Failure preparing request") - return - } - - resp, err := client.ListVirtualMachineScaleSetVMNetworkInterfacesSender(req) - if err != nil { - result.ilr.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetVMNetworkInterfaces", resp, "Failure sending request") - return - } - - result.ilr, err = client.ListVirtualMachineScaleSetVMNetworkInterfacesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetVMNetworkInterfaces", resp, "Failure responding to request") - } - - return -} - -// ListVirtualMachineScaleSetVMNetworkInterfacesPreparer prepares the ListVirtualMachineScaleSetVMNetworkInterfaces request. -func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesPreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string) (*http.Request, error) { - pathParameters := map[string]interface{}{ - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), - "virtualmachineIndex": autorest.Encode("path", virtualmachineIndex), - "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), - } - - const APIVersion = "2015-06-15" - queryParameters := map[string]interface{}{ - "api-version": APIVersion, - } - - preparer := autorest.CreatePreparer( - autorest.AsGet(), - autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines/{virtualmachineIndex}/networkInterfaces", pathParameters), - autorest.WithQueryParameters(queryParameters)) - return preparer.Prepare((&http.Request{}).WithContext(ctx)) -} - -// ListVirtualMachineScaleSetVMNetworkInterfacesSender sends the ListVirtualMachineScaleSetVMNetworkInterfaces request. The method will close the -// http.Response Body if it receives an error. -func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) -} - -// ListVirtualMachineScaleSetVMNetworkInterfacesResponder handles the response to the ListVirtualMachineScaleSetVMNetworkInterfaces request. The method always -// closes the http.Response Body. -func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesResponder(resp *http.Response) (result InterfaceListResult, err error) { - err = autorest.Respond( - resp, - client.ByInspecting(), - azure.WithErrorUnlessStatusCode(http.StatusOK), - autorest.ByUnmarshallingJSON(&result), - autorest.ByClosing()) - result.Response = autorest.Response{Response: resp} - return -} - -// listVirtualMachineScaleSetVMNetworkInterfacesNextResults retrieves the next set of results, if any. -func (client InterfacesClient) listVirtualMachineScaleSetVMNetworkInterfacesNextResults(lastResults InterfaceListResult) (result InterfaceListResult, err error) { - req, err := lastResults.interfaceListResultPreparer() - if err != nil { - return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetVMNetworkInterfacesNextResults", nil, "Failure preparing next results request") - } - if req == nil { - return - } - resp, err := client.ListVirtualMachineScaleSetVMNetworkInterfacesSender(req) - if err != nil { - result.Response = autorest.Response{Response: resp} - return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetVMNetworkInterfacesNextResults", resp, "Failure sending next results request") - } - result, err = client.ListVirtualMachineScaleSetVMNetworkInterfacesResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetVMNetworkInterfacesNextResults", resp, "Failure responding to next results request") - } - return -} - -// ListVirtualMachineScaleSetVMNetworkInterfacesComplete enumerates all values, automatically crossing page boundaries as required. -func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesComplete(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string) (result InterfaceListResultIterator, err error) { - result.page, err = client.ListVirtualMachineScaleSetVMNetworkInterfaces(ctx, resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex) - return -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/interfacesgroup.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/interfacesgroup.go new file mode 100644 index 00000000000..cef9933f56b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/interfacesgroup.go @@ -0,0 +1,819 @@ +package network + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// InterfacesClient is the network Client +type InterfacesClient struct { + BaseClient +} + +// NewInterfacesClient creates an instance of the InterfacesClient client. +func NewInterfacesClient(subscriptionID string) InterfacesClient { + return NewInterfacesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewInterfacesClientWithBaseURI creates an instance of the InterfacesClient client. +func NewInterfacesClientWithBaseURI(baseURI string, subscriptionID string) InterfacesClient { + return InterfacesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate creates or updates a network interface. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkInterfaceName - the name of the network interface. +// parameters - parameters supplied to the create or update network interface operation. +func (client InterfacesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, networkInterfaceName string, parameters Interface) (result InterfacesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, networkInterfaceName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + result, err = client.CreateOrUpdateSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "CreateOrUpdate", result.Response(), "Failure sending request") + return + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client InterfacesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, networkInterfaceName string, parameters Interface) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkInterfaceName": autorest.Encode("path", networkInterfaceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2015-06-15" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client InterfacesClient) CreateOrUpdateSender(req *http.Request) (future InterfacesCreateOrUpdateFuture, err error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) + if err != nil { + return + } + future.Future, err = azure.NewFutureFromResponse(resp) + return +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client InterfacesClient) CreateOrUpdateResponder(resp *http.Response) (result Interface, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete deletes the specified network interface. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkInterfaceName - the name of the network interface. +func (client InterfacesClient) Delete(ctx context.Context, resourceGroupName string, networkInterfaceName string) (result InterfacesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, resourceGroupName, networkInterfaceName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Delete", nil, "Failure preparing request") + return + } + + result, err = client.DeleteSender(req) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Delete", result.Response(), "Failure sending request") + return + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client InterfacesClient) DeletePreparer(ctx context.Context, resourceGroupName string, networkInterfaceName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkInterfaceName": autorest.Encode("path", networkInterfaceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2015-06-15" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client InterfacesClient) DeleteSender(req *http.Request) (future InterfacesDeleteFuture, err error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) + if err != nil { + return + } + future.Future, err = azure.NewFutureFromResponse(resp) + return +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client InterfacesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets information about the specified network interface. +// Parameters: +// resourceGroupName - the name of the resource group. +// networkInterfaceName - the name of the network interface. +// expand - expands referenced resources. +func (client InterfacesClient) Get(ctx context.Context, resourceGroupName string, networkInterfaceName string, expand string) (result Interface, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, resourceGroupName, networkInterfaceName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "Get", resp, "Failure responding to request") + } + + return +} + +// GetPreparer prepares the Get request. +func (client InterfacesClient) GetPreparer(ctx context.Context, resourceGroupName string, networkInterfaceName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkInterfaceName": autorest.Encode("path", networkInterfaceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2015-06-15" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client InterfacesClient) GetSender(req *http.Request) (*http.Response, error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client InterfacesClient) GetResponder(resp *http.Response) (result Interface, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetVirtualMachineScaleSetNetworkInterface get the specified network interface in a virtual machine scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// virtualMachineScaleSetName - the name of the virtual machine scale set. +// virtualmachineIndex - the virtual machine index. +// networkInterfaceName - the name of the network interface. +// expand - expands referenced resources. +func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterface(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, expand string) (result Interface, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.GetVirtualMachineScaleSetNetworkInterface") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetVirtualMachineScaleSetNetworkInterfacePreparer(ctx, resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex, networkInterfaceName, expand) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "GetVirtualMachineScaleSetNetworkInterface", nil, "Failure preparing request") + return + } + + resp, err := client.GetVirtualMachineScaleSetNetworkInterfaceSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "GetVirtualMachineScaleSetNetworkInterface", resp, "Failure sending request") + return + } + + result, err = client.GetVirtualMachineScaleSetNetworkInterfaceResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "GetVirtualMachineScaleSetNetworkInterface", resp, "Failure responding to request") + } + + return +} + +// GetVirtualMachineScaleSetNetworkInterfacePreparer prepares the GetVirtualMachineScaleSetNetworkInterface request. +func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterfacePreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, expand string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "networkInterfaceName": autorest.Encode("path", networkInterfaceName), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualmachineIndex": autorest.Encode("path", virtualmachineIndex), + "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), + } + + const APIVersion = "2015-06-15" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines/{virtualmachineIndex}/networkInterfaces/{networkInterfaceName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetVirtualMachineScaleSetNetworkInterfaceSender sends the GetVirtualMachineScaleSetNetworkInterface request. The method will close the +// http.Response Body if it receives an error. +func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterfaceSender(req *http.Request) (*http.Response, error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) +} + +// GetVirtualMachineScaleSetNetworkInterfaceResponder handles the response to the GetVirtualMachineScaleSetNetworkInterface request. The method always +// closes the http.Response Body. +func (client InterfacesClient) GetVirtualMachineScaleSetNetworkInterfaceResponder(resp *http.Response) (result Interface, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List gets all network interfaces in a resource group. +// Parameters: +// resourceGroupName - the name of the resource group. +func (client InterfacesClient) List(ctx context.Context, resourceGroupName string) (result InterfaceListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.List") + defer func() { + sc := -1 + if result.ilr.Response.Response != nil { + sc = result.ilr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, resourceGroupName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.ilr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "List", resp, "Failure sending request") + return + } + + result.ilr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "List", resp, "Failure responding to request") + } + + return +} + +// ListPreparer prepares the List request. +func (client InterfacesClient) ListPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2015-06-15" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client InterfacesClient) ListSender(req *http.Request) (*http.Response, error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client InterfacesClient) ListResponder(resp *http.Response) (result InterfaceListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client InterfacesClient) listNextResults(ctx context.Context, lastResults InterfaceListResult) (result InterfaceListResult, err error) { + req, err := lastResults.interfaceListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client InterfacesClient) ListComplete(ctx context.Context, resourceGroupName string) (result InterfaceListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, resourceGroupName) + return +} + +// ListAll gets all network interfaces in a subscription. +func (client InterfacesClient) ListAll(ctx context.Context) (result InterfaceListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.ListAll") + defer func() { + sc := -1 + if result.ilr.Response.Response != nil { + sc = result.ilr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listAllNextResults + req, err := client.ListAllPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListAll", nil, "Failure preparing request") + return + } + + resp, err := client.ListAllSender(req) + if err != nil { + result.ilr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListAll", resp, "Failure sending request") + return + } + + result.ilr, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListAll", resp, "Failure responding to request") + } + + return +} + +// ListAllPreparer prepares the ListAll request. +func (client InterfacesClient) ListAllPreparer(ctx context.Context) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2015-06-15" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/networkInterfaces", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListAllSender sends the ListAll request. The method will close the +// http.Response Body if it receives an error. +func (client InterfacesClient) ListAllSender(req *http.Request) (*http.Response, error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) +} + +// ListAllResponder handles the response to the ListAll request. The method always +// closes the http.Response Body. +func (client InterfacesClient) ListAllResponder(resp *http.Response) (result InterfaceListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listAllNextResults retrieves the next set of results, if any. +func (client InterfacesClient) listAllNextResults(ctx context.Context, lastResults InterfaceListResult) (result InterfaceListResult, err error) { + req, err := lastResults.interfaceListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listAllNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListAllSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listAllNextResults", resp, "Failure sending next results request") + } + result, err = client.ListAllResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "listAllNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListAllComplete enumerates all values, automatically crossing page boundaries as required. +func (client InterfacesClient) ListAllComplete(ctx context.Context) (result InterfaceListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListAll(ctx) + return +} + +// ListVirtualMachineScaleSetNetworkInterfaces gets all network interfaces in a virtual machine scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// virtualMachineScaleSetName - the name of the virtual machine scale set. +func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfaces(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string) (result InterfaceListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.ListVirtualMachineScaleSetNetworkInterfaces") + defer func() { + sc := -1 + if result.ilr.Response.Response != nil { + sc = result.ilr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listVirtualMachineScaleSetNetworkInterfacesNextResults + req, err := client.ListVirtualMachineScaleSetNetworkInterfacesPreparer(ctx, resourceGroupName, virtualMachineScaleSetName) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetNetworkInterfaces", nil, "Failure preparing request") + return + } + + resp, err := client.ListVirtualMachineScaleSetNetworkInterfacesSender(req) + if err != nil { + result.ilr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetNetworkInterfaces", resp, "Failure sending request") + return + } + + result.ilr, err = client.ListVirtualMachineScaleSetNetworkInterfacesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetNetworkInterfaces", resp, "Failure responding to request") + } + + return +} + +// ListVirtualMachineScaleSetNetworkInterfacesPreparer prepares the ListVirtualMachineScaleSetNetworkInterfaces request. +func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesPreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), + } + + const APIVersion = "2015-06-15" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/networkInterfaces", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListVirtualMachineScaleSetNetworkInterfacesSender sends the ListVirtualMachineScaleSetNetworkInterfaces request. The method will close the +// http.Response Body if it receives an error. +func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesSender(req *http.Request) (*http.Response, error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) +} + +// ListVirtualMachineScaleSetNetworkInterfacesResponder handles the response to the ListVirtualMachineScaleSetNetworkInterfaces request. The method always +// closes the http.Response Body. +func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesResponder(resp *http.Response) (result InterfaceListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listVirtualMachineScaleSetNetworkInterfacesNextResults retrieves the next set of results, if any. +func (client InterfacesClient) listVirtualMachineScaleSetNetworkInterfacesNextResults(ctx context.Context, lastResults InterfaceListResult) (result InterfaceListResult, err error) { + req, err := lastResults.interfaceListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetNetworkInterfacesNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListVirtualMachineScaleSetNetworkInterfacesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetNetworkInterfacesNextResults", resp, "Failure sending next results request") + } + result, err = client.ListVirtualMachineScaleSetNetworkInterfacesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetNetworkInterfacesNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListVirtualMachineScaleSetNetworkInterfacesComplete enumerates all values, automatically crossing page boundaries as required. +func (client InterfacesClient) ListVirtualMachineScaleSetNetworkInterfacesComplete(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string) (result InterfaceListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.ListVirtualMachineScaleSetNetworkInterfaces") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListVirtualMachineScaleSetNetworkInterfaces(ctx, resourceGroupName, virtualMachineScaleSetName) + return +} + +// ListVirtualMachineScaleSetVMNetworkInterfaces gets information about all network interfaces in a virtual machine in +// a virtual machine scale set. +// Parameters: +// resourceGroupName - the name of the resource group. +// virtualMachineScaleSetName - the name of the virtual machine scale set. +// virtualmachineIndex - the virtual machine index. +func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfaces(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string) (result InterfaceListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.ListVirtualMachineScaleSetVMNetworkInterfaces") + defer func() { + sc := -1 + if result.ilr.Response.Response != nil { + sc = result.ilr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listVirtualMachineScaleSetVMNetworkInterfacesNextResults + req, err := client.ListVirtualMachineScaleSetVMNetworkInterfacesPreparer(ctx, resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetVMNetworkInterfaces", nil, "Failure preparing request") + return + } + + resp, err := client.ListVirtualMachineScaleSetVMNetworkInterfacesSender(req) + if err != nil { + result.ilr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetVMNetworkInterfaces", resp, "Failure sending request") + return + } + + result.ilr, err = client.ListVirtualMachineScaleSetVMNetworkInterfacesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "ListVirtualMachineScaleSetVMNetworkInterfaces", resp, "Failure responding to request") + } + + return +} + +// ListVirtualMachineScaleSetVMNetworkInterfacesPreparer prepares the ListVirtualMachineScaleSetVMNetworkInterfaces request. +func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesPreparer(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualmachineIndex": autorest.Encode("path", virtualmachineIndex), + "virtualMachineScaleSetName": autorest.Encode("path", virtualMachineScaleSetName), + } + + const APIVersion = "2015-06-15" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines/{virtualmachineIndex}/networkInterfaces", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListVirtualMachineScaleSetVMNetworkInterfacesSender sends the ListVirtualMachineScaleSetVMNetworkInterfaces request. The method will close the +// http.Response Body if it receives an error. +func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesSender(req *http.Request) (*http.Response, error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) +} + +// ListVirtualMachineScaleSetVMNetworkInterfacesResponder handles the response to the ListVirtualMachineScaleSetVMNetworkInterfaces request. The method always +// closes the http.Response Body. +func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesResponder(resp *http.Response) (result InterfaceListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listVirtualMachineScaleSetVMNetworkInterfacesNextResults retrieves the next set of results, if any. +func (client InterfacesClient) listVirtualMachineScaleSetVMNetworkInterfacesNextResults(ctx context.Context, lastResults InterfaceListResult) (result InterfaceListResult, err error) { + req, err := lastResults.interfaceListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetVMNetworkInterfacesNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListVirtualMachineScaleSetVMNetworkInterfacesSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetVMNetworkInterfacesNextResults", resp, "Failure sending next results request") + } + result, err = client.ListVirtualMachineScaleSetVMNetworkInterfacesResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "network.InterfacesClient", "listVirtualMachineScaleSetVMNetworkInterfacesNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListVirtualMachineScaleSetVMNetworkInterfacesComplete enumerates all values, automatically crossing page boundaries as required. +func (client InterfacesClient) ListVirtualMachineScaleSetVMNetworkInterfacesComplete(ctx context.Context, resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string) (result InterfaceListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfacesClient.ListVirtualMachineScaleSetVMNetworkInterfaces") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListVirtualMachineScaleSetVMNetworkInterfaces(ctx, resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex) + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/loadbalancers.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/loadbalancers.go index c2f0b9768a3..200eeea9c48 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/loadbalancers.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/loadbalancers.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -45,6 +46,16 @@ func NewLoadBalancersClientWithBaseURI(baseURI string, subscriptionID string) Lo // loadBalancerName - the name of the load balancer. // parameters - parameters supplied to the create or update load balancer operation. func (client LoadBalancersClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, loadBalancerName string, parameters LoadBalancer) (result LoadBalancersCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancersClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, loadBalancerName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -86,15 +97,13 @@ func (client LoadBalancersClient) CreateOrUpdatePreparer(ctx context.Context, re // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client LoadBalancersClient) CreateOrUpdateSender(req *http.Request) (future LoadBalancersCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -116,6 +125,16 @@ func (client LoadBalancersClient) CreateOrUpdateResponder(resp *http.Response) ( // resourceGroupName - the name of the resource group. // loadBalancerName - the name of the load balancer. func (client LoadBalancersClient) Delete(ctx context.Context, resourceGroupName string, loadBalancerName string) (result LoadBalancersDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancersClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, loadBalancerName) if err != nil { err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "Delete", nil, "Failure preparing request") @@ -155,15 +174,13 @@ func (client LoadBalancersClient) DeletePreparer(ctx context.Context, resourceGr // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client LoadBalancersClient) DeleteSender(req *http.Request) (future LoadBalancersDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -185,6 +202,16 @@ func (client LoadBalancersClient) DeleteResponder(resp *http.Response) (result a // loadBalancerName - the name of the load balancer. // expand - expands referenced resources. func (client LoadBalancersClient) Get(ctx context.Context, resourceGroupName string, loadBalancerName string, expand string) (result LoadBalancer, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancersClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, loadBalancerName, expand) if err != nil { err = autorest.NewErrorWithError(err, "network.LoadBalancersClient", "Get", nil, "Failure preparing request") @@ -233,8 +260,8 @@ func (client LoadBalancersClient) GetPreparer(ctx context.Context, resourceGroup // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client LoadBalancersClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -254,6 +281,16 @@ func (client LoadBalancersClient) GetResponder(resp *http.Response) (result Load // Parameters: // resourceGroupName - the name of the resource group. func (client LoadBalancersClient) List(ctx context.Context, resourceGroupName string) (result LoadBalancerListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancersClient.List") + defer func() { + sc := -1 + if result.lblr.Response.Response != nil { + sc = result.lblr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -299,8 +336,8 @@ func (client LoadBalancersClient) ListPreparer(ctx context.Context, resourceGrou // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client LoadBalancersClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -317,8 +354,8 @@ func (client LoadBalancersClient) ListResponder(resp *http.Response) (result Loa } // listNextResults retrieves the next set of results, if any. -func (client LoadBalancersClient) listNextResults(lastResults LoadBalancerListResult) (result LoadBalancerListResult, err error) { - req, err := lastResults.loadBalancerListResultPreparer() +func (client LoadBalancersClient) listNextResults(ctx context.Context, lastResults LoadBalancerListResult) (result LoadBalancerListResult, err error) { + req, err := lastResults.loadBalancerListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.LoadBalancersClient", "listNextResults", nil, "Failure preparing next results request") } @@ -339,12 +376,32 @@ func (client LoadBalancersClient) listNextResults(lastResults LoadBalancerListRe // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client LoadBalancersClient) ListComplete(ctx context.Context, resourceGroupName string) (result LoadBalancerListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancersClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } // ListAll gets all the load balancers in a subscription. func (client LoadBalancersClient) ListAll(ctx context.Context) (result LoadBalancerListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancersClient.ListAll") + defer func() { + sc := -1 + if result.lblr.Response.Response != nil { + sc = result.lblr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listAllNextResults req, err := client.ListAllPreparer(ctx) if err != nil { @@ -389,8 +446,8 @@ func (client LoadBalancersClient) ListAllPreparer(ctx context.Context) (*http.Re // ListAllSender sends the ListAll request. The method will close the // http.Response Body if it receives an error. func (client LoadBalancersClient) ListAllSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListAllResponder handles the response to the ListAll request. The method always @@ -407,8 +464,8 @@ func (client LoadBalancersClient) ListAllResponder(resp *http.Response) (result } // listAllNextResults retrieves the next set of results, if any. -func (client LoadBalancersClient) listAllNextResults(lastResults LoadBalancerListResult) (result LoadBalancerListResult, err error) { - req, err := lastResults.loadBalancerListResultPreparer() +func (client LoadBalancersClient) listAllNextResults(ctx context.Context, lastResults LoadBalancerListResult) (result LoadBalancerListResult, err error) { + req, err := lastResults.loadBalancerListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.LoadBalancersClient", "listAllNextResults", nil, "Failure preparing next results request") } @@ -429,6 +486,16 @@ func (client LoadBalancersClient) listAllNextResults(lastResults LoadBalancerLis // ListAllComplete enumerates all values, automatically crossing page boundaries as required. func (client LoadBalancersClient) ListAllComplete(ctx context.Context) (result LoadBalancerListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancersClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListAll(ctx) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/localnetworkgateways.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/localnetworkgateways.go index 4e7d86fcc05..7806579d1bc 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/localnetworkgateways.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/localnetworkgateways.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -45,6 +46,16 @@ func NewLocalNetworkGatewaysClientWithBaseURI(baseURI string, subscriptionID str // localNetworkGatewayName - the name of the local network gateway. // parameters - parameters supplied to the create or update local network gateway operation. func (client LocalNetworkGatewaysClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, localNetworkGatewayName string, parameters LocalNetworkGateway) (result LocalNetworkGatewaysCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewaysClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, localNetworkGatewayName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -86,15 +97,13 @@ func (client LocalNetworkGatewaysClient) CreateOrUpdatePreparer(ctx context.Cont // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client LocalNetworkGatewaysClient) CreateOrUpdateSender(req *http.Request) (future LocalNetworkGatewaysCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -116,6 +125,16 @@ func (client LocalNetworkGatewaysClient) CreateOrUpdateResponder(resp *http.Resp // resourceGroupName - the name of the resource group. // localNetworkGatewayName - the name of the local network gateway. func (client LocalNetworkGatewaysClient) Delete(ctx context.Context, resourceGroupName string, localNetworkGatewayName string) (result LocalNetworkGatewaysDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewaysClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, localNetworkGatewayName) if err != nil { err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysClient", "Delete", nil, "Failure preparing request") @@ -155,15 +174,13 @@ func (client LocalNetworkGatewaysClient) DeletePreparer(ctx context.Context, res // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client LocalNetworkGatewaysClient) DeleteSender(req *http.Request) (future LocalNetworkGatewaysDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -184,6 +201,16 @@ func (client LocalNetworkGatewaysClient) DeleteResponder(resp *http.Response) (r // resourceGroupName - the name of the resource group. // localNetworkGatewayName - the name of the local network gateway. func (client LocalNetworkGatewaysClient) Get(ctx context.Context, resourceGroupName string, localNetworkGatewayName string) (result LocalNetworkGateway, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewaysClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, localNetworkGatewayName) if err != nil { err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysClient", "Get", nil, "Failure preparing request") @@ -229,8 +256,8 @@ func (client LocalNetworkGatewaysClient) GetPreparer(ctx context.Context, resour // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client LocalNetworkGatewaysClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -250,6 +277,16 @@ func (client LocalNetworkGatewaysClient) GetResponder(resp *http.Response) (resu // Parameters: // resourceGroupName - the name of the resource group. func (client LocalNetworkGatewaysClient) List(ctx context.Context, resourceGroupName string) (result LocalNetworkGatewayListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewaysClient.List") + defer func() { + sc := -1 + if result.lnglr.Response.Response != nil { + sc = result.lnglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -295,8 +332,8 @@ func (client LocalNetworkGatewaysClient) ListPreparer(ctx context.Context, resou // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client LocalNetworkGatewaysClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -313,8 +350,8 @@ func (client LocalNetworkGatewaysClient) ListResponder(resp *http.Response) (res } // listNextResults retrieves the next set of results, if any. -func (client LocalNetworkGatewaysClient) listNextResults(lastResults LocalNetworkGatewayListResult) (result LocalNetworkGatewayListResult, err error) { - req, err := lastResults.localNetworkGatewayListResultPreparer() +func (client LocalNetworkGatewaysClient) listNextResults(ctx context.Context, lastResults LocalNetworkGatewayListResult) (result LocalNetworkGatewayListResult, err error) { + req, err := lastResults.localNetworkGatewayListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysClient", "listNextResults", nil, "Failure preparing next results request") } @@ -335,6 +372,16 @@ func (client LocalNetworkGatewaysClient) listNextResults(lastResults LocalNetwor // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client LocalNetworkGatewaysClient) ListComplete(ctx context.Context, resourceGroupName string) (result LocalNetworkGatewayListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewaysClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/models.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/models.go index 4efbedb8584..71e378c5d8c 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/models.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/models.go @@ -18,13 +18,18 @@ package network // Changes may cause incorrect behavior and will be lost if the code is regenerated. import ( + "context" "encoding/json" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/go-autorest/tracing" "net/http" ) +// The package's fully qualified name. +const fqdn = "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network" + // ApplicationGatewayCookieBasedAffinity enumerates the values for application gateway cookie based affinity. type ApplicationGatewayCookieBasedAffinity string @@ -500,8 +505,8 @@ func PossibleVpnTypeValues() []VpnType { return []VpnType{PolicyBased, RouteBased} } -// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the virtual -// network. +// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the +// virtual network. type AddressSpace struct { // AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation. AddressPrefixes *[]string `json:"addressPrefixes,omitempty"` @@ -515,9 +520,9 @@ type ApplicationGateway struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -537,12 +542,6 @@ func (ag ApplicationGateway) MarshalJSON() ([]byte, error) { if ag.ID != nil { objectMap["id"] = ag.ID } - if ag.Name != nil { - objectMap["name"] = ag.Name - } - if ag.Type != nil { - objectMap["type"] = ag.Type - } if ag.Location != nil { objectMap["location"] = ag.Location } @@ -718,8 +717,8 @@ func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) er return nil } -// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an application -// gateway. +// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an +// application gateway. type ApplicationGatewayBackendAddressPoolPropertiesFormat struct { // BackendIPConfigurations - Collection of references to IPs defined in network interfaces. BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"` @@ -1107,8 +1106,8 @@ type ApplicationGatewayHTTPListenerPropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1 private -// IP configuration is allowed. +// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1 +// private IP configuration is allowed. type ApplicationGatewayIPConfiguration struct { *ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"` // Name - Name of the resource that is unique within a resource group. This name can be used to access the resource. @@ -1188,7 +1187,8 @@ func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error return nil } -// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application gateway. +// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application +// gateway. type ApplicationGatewayIPConfigurationPropertiesFormat struct { // Subnet - Reference of the subnet resource. A subnet from where application gateway gets its private address. Subnet *SubResource `json:"subnet,omitempty"` @@ -1211,14 +1211,24 @@ type ApplicationGatewayListResultIterator struct { page ApplicationGatewayListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ApplicationGatewayListResultIterator) Next() error { +func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -1227,6 +1237,13 @@ func (iter *ApplicationGatewayListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ApplicationGatewayListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter ApplicationGatewayListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -1246,6 +1263,11 @@ func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway { return iter.page.Values()[iter.i] } +// Creates a new instance of the ApplicationGatewayListResultIterator type. +func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator { + return ApplicationGatewayListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (aglr ApplicationGatewayListResult) IsEmpty() bool { return aglr.Value == nil || len(*aglr.Value) == 0 @@ -1253,11 +1275,11 @@ func (aglr ApplicationGatewayListResult) IsEmpty() bool { // applicationGatewayListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer() (*http.Request, error) { +func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) { if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(aglr.NextLink))) @@ -1265,14 +1287,24 @@ func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer() // ApplicationGatewayListResultPage contains a page of ApplicationGateway values. type ApplicationGatewayListResultPage struct { - fn func(ApplicationGatewayListResult) (ApplicationGatewayListResult, error) + fn func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error) aglr ApplicationGatewayListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ApplicationGatewayListResultPage) Next() error { - next, err := page.fn(page.aglr) +func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.aglr) if err != nil { return err } @@ -1280,6 +1312,13 @@ func (page *ApplicationGatewayListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ApplicationGatewayListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page ApplicationGatewayListResultPage) NotDone() bool { return !page.aglr.IsEmpty() @@ -1298,6 +1337,11 @@ func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway { return *page.aglr.Value } +// Creates a new instance of the ApplicationGatewayListResultPage type. +func NewApplicationGatewayListResultPage(getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage { + return ApplicationGatewayListResultPage{fn: getNextPage} +} + // ApplicationGatewayPathRule path rule of URL path map of an application gateway. type ApplicationGatewayPathRule struct { *ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"` @@ -1492,7 +1536,7 @@ type ApplicationGatewayProbePropertiesFormat struct { type ApplicationGatewayPropertiesFormat struct { // Sku - SKU of the application gateway resource. Sku *ApplicationGatewaySku `json:"sku,omitempty"` - // OperationalState - Operational state of the application gateway resource. Possible values are: 'Stopped', 'Started', 'Running', and 'Stopping'. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping' + // OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values are: 'Stopped', 'Started', 'Running', and 'Stopping'. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping' OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"` // GatewayIPConfigurations - Gets or sets subnets of application gateway resource GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"` @@ -1600,8 +1644,8 @@ func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) er return nil } -// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the application -// gateway. +// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the +// application gateway. type ApplicationGatewayRequestRoutingRulePropertiesFormat struct { // RuleType - Rule type. Possible values are: 'Basic' and 'PathBasedRouting'. Possible values include: 'Basic', 'PathBasedRouting' RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"` @@ -1621,97 +1665,51 @@ type ApplicationGatewayRequestRoutingRulePropertiesFormat struct { // long-running operation. type ApplicationGatewaysCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) { +func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ag, azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ag, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent { + ag, err = client.CreateOrUpdateResponder(ag.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - ag, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type ApplicationGatewaysDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) { +func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -1805,7 +1803,8 @@ func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error { return nil } -// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application gateway. +// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application +// gateway. type ApplicationGatewaySslCertificatePropertiesFormat struct { // Data - Base-64 encoded pfx certificate. Only applicable in PUT Request. Data *string `json:"data,omitempty"` @@ -1817,52 +1816,26 @@ type ApplicationGatewaySslCertificatePropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type ApplicationGatewaysStartFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) { +func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.StartResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture") return } - ar, err = client.StartResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -1870,48 +1843,22 @@ func (future ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysCl // operation. type ApplicationGatewaysStopFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) { +func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.StopResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture") return } - ar, err = client.StopResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -2008,8 +1955,8 @@ type ApplicationGatewayURLPathMapPropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations that -// belongs to an ExpressRouteCircuit. +// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations +// that belongs to an ExpressRouteCircuit. type AuthorizationListResult struct { autorest.Response `json:"-"` // Value - The authorizations in an ExpressRoute Circuit. @@ -2018,21 +1965,31 @@ type AuthorizationListResult struct { NextLink *string `json:"nextLink,omitempty"` } -// AuthorizationListResultIterator provides access to a complete listing of ExpressRouteCircuitAuthorization -// values. +// AuthorizationListResultIterator provides access to a complete listing of +// ExpressRouteCircuitAuthorization values. type AuthorizationListResultIterator struct { i int page AuthorizationListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *AuthorizationListResultIterator) Next() error { +func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -2041,6 +1998,13 @@ func (iter *AuthorizationListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *AuthorizationListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter AuthorizationListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -2060,6 +2024,11 @@ func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthoriza return iter.page.Values()[iter.i] } +// Creates a new instance of the AuthorizationListResultIterator type. +func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator { + return AuthorizationListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (alr AuthorizationListResult) IsEmpty() bool { return alr.Value == nil || len(*alr.Value) == 0 @@ -2067,11 +2036,11 @@ func (alr AuthorizationListResult) IsEmpty() bool { // authorizationListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (alr AuthorizationListResult) authorizationListResultPreparer() (*http.Request, error) { +func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) { if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(alr.NextLink))) @@ -2079,14 +2048,24 @@ func (alr AuthorizationListResult) authorizationListResultPreparer() (*http.Requ // AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values. type AuthorizationListResultPage struct { - fn func(AuthorizationListResult) (AuthorizationListResult, error) + fn func(context.Context, AuthorizationListResult) (AuthorizationListResult, error) alr AuthorizationListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *AuthorizationListResultPage) Next() error { - next, err := page.fn(page.alr) +func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.alr) if err != nil { return err } @@ -2094,6 +2073,13 @@ func (page *AuthorizationListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *AuthorizationListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page AuthorizationListResultPage) NotDone() bool { return !page.alr.IsEmpty() @@ -2112,6 +2098,11 @@ func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorizat return *page.alr.Value } +// Creates a new instance of the AuthorizationListResultPage type. +func NewAuthorizationListResultPage(getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage { + return AuthorizationListResultPage{fn: getNextPage} +} + // AuthorizationPropertiesFormat ... type AuthorizationPropertiesFormat struct { // AuthorizationKey - The authorization key. @@ -2123,11 +2114,11 @@ type AuthorizationPropertiesFormat struct { } // AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation, -// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct from the -// HTTP status code returned for the Get Operation Status operation itself. If the asynchronous operation -// succeeded, the response body includes the HTTP status code for the successful request. If the asynchronous -// operation failed, the response body includes the HTTP status code for the failed request and error information -// regarding the failure. +// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct +// from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous +// operation succeeded, the response body includes the HTTP status code for the successful request. If the +// asynchronous operation failed, the response body includes the HTTP status code for the failed request +// and error information regarding the failure. type AzureAsyncOperationResult struct { // Status - Status of the Azure async operation. Possible values are: 'InProgress', 'Succeeded', and 'Failed'. Possible values include: 'InProgress', 'Succeeded', 'Failed' Status OperationStatus `json:"status,omitempty"` @@ -2218,7 +2209,7 @@ func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error { type BackendAddressPoolPropertiesFormat struct { // BackendIPConfigurations - Gets collection of references to IP addresses defined in network interfaces. BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"` - // LoadBalancingRules - Gets load balancing rules that use this backend address pool. + // LoadBalancingRules - READ-ONLY; Gets load balancing rules that use this backend address pool. LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"` // OutboundNatRule - Gets outbound rules that use this backend address pool. OutboundNatRule *SubResource `json:"outboundNatRule,omitempty"` @@ -2243,22 +2234,22 @@ type ConnectionResetSharedKey struct { KeyLength *int64 `json:"keyLength,omitempty"` } -// ConnectionSharedKey response for GetConnectionSharedKey Api servive call +// ConnectionSharedKey response for GetConnectionSharedKey API service call type ConnectionSharedKey struct { autorest.Response `json:"-"` // Value - The virtual network connection shared key value Value *string `json:"value,omitempty"` } -// ConnectionSharedKeyResult response for CheckConnectionSharedKey Api servive call +// ConnectionSharedKeyResult response for CheckConnectionSharedKey API service call type ConnectionSharedKeyResult struct { autorest.Response `json:"-"` // Value - The virtual network connection shared key value Value *string `json:"value,omitempty"` } -// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual network. -// Standard DHCP option for a subnet overrides VNET DHCP options. +// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual +// network. Standard DHCP option for a subnet overrides VNET DHCP options. type DhcpOptions struct { // DNSServers - The list of DNS servers IP addresses. DNSServers *[]string `json:"dnsServers,omitempty"` @@ -2297,9 +2288,9 @@ type ExpressRouteCircuit struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -2322,12 +2313,6 @@ func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) { if erc.ID != nil { objectMap["id"] = erc.ID } - if erc.Name != nil { - objectMap["name"] = erc.Name - } - if erc.Type != nil { - objectMap["type"] = erc.Type - } if erc.Location != nil { objectMap["location"] = erc.Location } @@ -2513,101 +2498,55 @@ func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error { return nil } -// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results -// of a long-running operation. +// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) { +func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return erca, azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - erca, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent { + erca, err = client.CreateOrUpdateResponder(erca.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - erca, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. +// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. type ExpressRouteCircuitAuthorizationsDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) { +func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -2620,20 +2559,31 @@ type ExpressRouteCircuitListResult struct { NextLink *string `json:"nextLink,omitempty"` } -// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit values. +// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit +// values. type ExpressRouteCircuitListResultIterator struct { i int page ExpressRouteCircuitListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ExpressRouteCircuitListResultIterator) Next() error { +func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -2642,6 +2592,13 @@ func (iter *ExpressRouteCircuitListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ExpressRouteCircuitListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter ExpressRouteCircuitListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -2661,6 +2618,11 @@ func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit { return iter.page.Values()[iter.i] } +// Creates a new instance of the ExpressRouteCircuitListResultIterator type. +func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator { + return ExpressRouteCircuitListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (erclr ExpressRouteCircuitListResult) IsEmpty() bool { return erclr.Value == nil || len(*erclr.Value) == 0 @@ -2668,11 +2630,11 @@ func (erclr ExpressRouteCircuitListResult) IsEmpty() bool { // expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer() (*http.Request, error) { +func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) { if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(erclr.NextLink))) @@ -2680,14 +2642,24 @@ func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer // ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values. type ExpressRouteCircuitListResultPage struct { - fn func(ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error) + fn func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error) erclr ExpressRouteCircuitListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ExpressRouteCircuitListResultPage) Next() error { - next, err := page.fn(page.erclr) +func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.erclr) if err != nil { return err } @@ -2695,6 +2667,13 @@ func (page *ExpressRouteCircuitListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ExpressRouteCircuitListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page ExpressRouteCircuitListResultPage) NotDone() bool { return !page.erclr.IsEmpty() @@ -2713,6 +2692,11 @@ func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit { return *page.erclr.Value } +// Creates a new instance of the ExpressRouteCircuitListResultPage type. +func NewExpressRouteCircuitListResultPage(getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage { + return ExpressRouteCircuitListResultPage{fn: getNextPage} +} + // ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource. type ExpressRouteCircuitPeering struct { autorest.Response `json:"-"` @@ -2806,8 +2790,8 @@ type ExpressRouteCircuitPeeringConfig struct { RoutingRegistryName *string `json:"routingRegistryName,omitempty"` } -// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings that -// belong to an ExpressRouteCircuit. +// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings +// that belong to an ExpressRouteCircuit. type ExpressRouteCircuitPeeringListResult struct { autorest.Response `json:"-"` // Value - The peerings in an express route circuit. @@ -2816,21 +2800,31 @@ type ExpressRouteCircuitPeeringListResult struct { NextLink *string `json:"nextLink,omitempty"` } -// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of ExpressRouteCircuitPeering -// values. +// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of +// ExpressRouteCircuitPeering values. type ExpressRouteCircuitPeeringListResultIterator struct { i int page ExpressRouteCircuitPeeringListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error { +func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -2839,6 +2833,13 @@ func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -2858,6 +2859,11 @@ func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCir return iter.page.Values()[iter.i] } +// Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type. +func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator { + return ExpressRouteCircuitPeeringListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool { return ercplr.Value == nil || len(*ercplr.Value) == 0 @@ -2865,11 +2871,11 @@ func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool { // expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer() (*http.Request, error) { +func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) { if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(ercplr.NextLink))) @@ -2877,14 +2883,24 @@ func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringLis // ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values. type ExpressRouteCircuitPeeringListResultPage struct { - fn func(ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error) + fn func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error) ercplr ExpressRouteCircuitPeeringListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ExpressRouteCircuitPeeringListResultPage) Next() error { - next, err := page.fn(page.ercplr) +func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.ercplr) if err != nil { return err } @@ -2892,6 +2908,13 @@ func (page *ExpressRouteCircuitPeeringListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ExpressRouteCircuitPeeringListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool { return !page.ercplr.IsEmpty() @@ -2910,6 +2933,11 @@ func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCirc return *page.ercplr.Value } +// Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type. +func NewExpressRouteCircuitPeeringListResultPage(getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage { + return ExpressRouteCircuitPeeringListResultPage{fn: getNextPage} +} + // ExpressRouteCircuitPeeringPropertiesFormat ... type ExpressRouteCircuitPeeringPropertiesFormat struct { // PeeringType - The PeeringType. Possible values are: 'AzurePublicPeering', 'AzurePrivatePeering', and 'MicrosoftPeering'. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering' @@ -2940,51 +2968,31 @@ type ExpressRouteCircuitPeeringPropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. +// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results +// of a long-running operation. type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) { +func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ercp, azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ercp, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent { + ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - ercp, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } @@ -2993,48 +3001,22 @@ func (future ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client Expr // long-running operation. type ExpressRouteCircuitPeeringsDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) { +func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -3070,7 +3052,8 @@ type ExpressRouteCircuitRoutesTable struct { AsPath *string `json:"asPath,omitempty"` } -// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route Circuits API. +// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route +// Circuits API. type ExpressRouteCircuitsArpTableListResult struct { autorest.Response `json:"-"` // Value - Gets list of the ARP table. @@ -3086,14 +3069,24 @@ type ExpressRouteCircuitsArpTableListResultIterator struct { page ExpressRouteCircuitsArpTableListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ExpressRouteCircuitsArpTableListResultIterator) Next() error { +func (iter *ExpressRouteCircuitsArpTableListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsArpTableListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -3102,6 +3095,13 @@ func (iter *ExpressRouteCircuitsArpTableListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ExpressRouteCircuitsArpTableListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter ExpressRouteCircuitsArpTableListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -3121,6 +3121,11 @@ func (iter ExpressRouteCircuitsArpTableListResultIterator) Value() ExpressRouteC return iter.page.Values()[iter.i] } +// Creates a new instance of the ExpressRouteCircuitsArpTableListResultIterator type. +func NewExpressRouteCircuitsArpTableListResultIterator(page ExpressRouteCircuitsArpTableListResultPage) ExpressRouteCircuitsArpTableListResultIterator { + return ExpressRouteCircuitsArpTableListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (ercatlr ExpressRouteCircuitsArpTableListResult) IsEmpty() bool { return ercatlr.Value == nil || len(*ercatlr.Value) == 0 @@ -3128,11 +3133,11 @@ func (ercatlr ExpressRouteCircuitsArpTableListResult) IsEmpty() bool { // expressRouteCircuitsArpTableListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (ercatlr ExpressRouteCircuitsArpTableListResult) expressRouteCircuitsArpTableListResultPreparer() (*http.Request, error) { +func (ercatlr ExpressRouteCircuitsArpTableListResult) expressRouteCircuitsArpTableListResultPreparer(ctx context.Context) (*http.Request, error) { if ercatlr.NextLink == nil || len(to.String(ercatlr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(ercatlr.NextLink))) @@ -3140,14 +3145,24 @@ func (ercatlr ExpressRouteCircuitsArpTableListResult) expressRouteCircuitsArpTab // ExpressRouteCircuitsArpTableListResultPage contains a page of ExpressRouteCircuitArpTable values. type ExpressRouteCircuitsArpTableListResultPage struct { - fn func(ExpressRouteCircuitsArpTableListResult) (ExpressRouteCircuitsArpTableListResult, error) + fn func(context.Context, ExpressRouteCircuitsArpTableListResult) (ExpressRouteCircuitsArpTableListResult, error) ercatlr ExpressRouteCircuitsArpTableListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ExpressRouteCircuitsArpTableListResultPage) Next() error { - next, err := page.fn(page.ercatlr) +func (page *ExpressRouteCircuitsArpTableListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsArpTableListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.ercatlr) if err != nil { return err } @@ -3155,6 +3170,13 @@ func (page *ExpressRouteCircuitsArpTableListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ExpressRouteCircuitsArpTableListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page ExpressRouteCircuitsArpTableListResultPage) NotDone() bool { return !page.ercatlr.IsEmpty() @@ -3173,105 +3195,65 @@ func (page ExpressRouteCircuitsArpTableListResultPage) Values() []ExpressRouteCi return *page.ercatlr.Value } +// Creates a new instance of the ExpressRouteCircuitsArpTableListResultPage type. +func NewExpressRouteCircuitsArpTableListResultPage(getNextPage func(context.Context, ExpressRouteCircuitsArpTableListResult) (ExpressRouteCircuitsArpTableListResult, error)) ExpressRouteCircuitsArpTableListResultPage { + return ExpressRouteCircuitsArpTableListResultPage{fn: getNextPage} +} + // ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a // long-running operation. type ExpressRouteCircuitsCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) { +func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return erc, azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - erc, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent { + erc, err = client.CreateOrUpdateResponder(erc.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - erc, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type ExpressRouteCircuitsDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) { +func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } -// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an ExpressRouteCircuit. +// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an +// ExpressRouteCircuit. type ExpressRouteCircuitServiceProviderProperties struct { // ServiceProviderName - The serviceProviderName. ServiceProviderName *string `json:"serviceProviderName,omitempty"` @@ -3308,14 +3290,24 @@ type ExpressRouteCircuitsRoutesTableListResultIterator struct { page ExpressRouteCircuitsRoutesTableListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ExpressRouteCircuitsRoutesTableListResultIterator) Next() error { +func (iter *ExpressRouteCircuitsRoutesTableListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsRoutesTableListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -3324,6 +3316,13 @@ func (iter *ExpressRouteCircuitsRoutesTableListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ExpressRouteCircuitsRoutesTableListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter ExpressRouteCircuitsRoutesTableListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -3343,6 +3342,11 @@ func (iter ExpressRouteCircuitsRoutesTableListResultIterator) Value() ExpressRou return iter.page.Values()[iter.i] } +// Creates a new instance of the ExpressRouteCircuitsRoutesTableListResultIterator type. +func NewExpressRouteCircuitsRoutesTableListResultIterator(page ExpressRouteCircuitsRoutesTableListResultPage) ExpressRouteCircuitsRoutesTableListResultIterator { + return ExpressRouteCircuitsRoutesTableListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (ercrtlr ExpressRouteCircuitsRoutesTableListResult) IsEmpty() bool { return ercrtlr.Value == nil || len(*ercrtlr.Value) == 0 @@ -3350,11 +3354,11 @@ func (ercrtlr ExpressRouteCircuitsRoutesTableListResult) IsEmpty() bool { // expressRouteCircuitsRoutesTableListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (ercrtlr ExpressRouteCircuitsRoutesTableListResult) expressRouteCircuitsRoutesTableListResultPreparer() (*http.Request, error) { +func (ercrtlr ExpressRouteCircuitsRoutesTableListResult) expressRouteCircuitsRoutesTableListResultPreparer(ctx context.Context) (*http.Request, error) { if ercrtlr.NextLink == nil || len(to.String(ercrtlr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(ercrtlr.NextLink))) @@ -3362,14 +3366,24 @@ func (ercrtlr ExpressRouteCircuitsRoutesTableListResult) expressRouteCircuitsRou // ExpressRouteCircuitsRoutesTableListResultPage contains a page of ExpressRouteCircuitRoutesTable values. type ExpressRouteCircuitsRoutesTableListResultPage struct { - fn func(ExpressRouteCircuitsRoutesTableListResult) (ExpressRouteCircuitsRoutesTableListResult, error) + fn func(context.Context, ExpressRouteCircuitsRoutesTableListResult) (ExpressRouteCircuitsRoutesTableListResult, error) ercrtlr ExpressRouteCircuitsRoutesTableListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ExpressRouteCircuitsRoutesTableListResultPage) Next() error { - next, err := page.fn(page.ercrtlr) +func (page *ExpressRouteCircuitsRoutesTableListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsRoutesTableListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.ercrtlr) if err != nil { return err } @@ -3377,6 +3391,13 @@ func (page *ExpressRouteCircuitsRoutesTableListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ExpressRouteCircuitsRoutesTableListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page ExpressRouteCircuitsRoutesTableListResultPage) NotDone() bool { return !page.ercrtlr.IsEmpty() @@ -3395,6 +3416,11 @@ func (page ExpressRouteCircuitsRoutesTableListResultPage) Values() []ExpressRout return *page.ercrtlr.Value } +// Creates a new instance of the ExpressRouteCircuitsRoutesTableListResultPage type. +func NewExpressRouteCircuitsRoutesTableListResultPage(getNextPage func(context.Context, ExpressRouteCircuitsRoutesTableListResult) (ExpressRouteCircuitsRoutesTableListResult, error)) ExpressRouteCircuitsRoutesTableListResultPage { + return ExpressRouteCircuitsRoutesTableListResultPage{fn: getNextPage} +} + // ExpressRouteCircuitsStatsListResult response for ListStats from Express Route Circuits Api service call type ExpressRouteCircuitsStatsListResult struct { autorest.Response `json:"-"` @@ -3404,21 +3430,31 @@ type ExpressRouteCircuitsStatsListResult struct { NextLink *string `json:"nextLink,omitempty"` } -// ExpressRouteCircuitsStatsListResultIterator provides access to a complete listing of ExpressRouteCircuitStats -// values. +// ExpressRouteCircuitsStatsListResultIterator provides access to a complete listing of +// ExpressRouteCircuitStats values. type ExpressRouteCircuitsStatsListResultIterator struct { i int page ExpressRouteCircuitsStatsListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ExpressRouteCircuitsStatsListResultIterator) Next() error { +func (iter *ExpressRouteCircuitsStatsListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsStatsListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -3427,6 +3463,13 @@ func (iter *ExpressRouteCircuitsStatsListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ExpressRouteCircuitsStatsListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter ExpressRouteCircuitsStatsListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -3446,6 +3489,11 @@ func (iter ExpressRouteCircuitsStatsListResultIterator) Value() ExpressRouteCirc return iter.page.Values()[iter.i] } +// Creates a new instance of the ExpressRouteCircuitsStatsListResultIterator type. +func NewExpressRouteCircuitsStatsListResultIterator(page ExpressRouteCircuitsStatsListResultPage) ExpressRouteCircuitsStatsListResultIterator { + return ExpressRouteCircuitsStatsListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (ercslr ExpressRouteCircuitsStatsListResult) IsEmpty() bool { return ercslr.Value == nil || len(*ercslr.Value) == 0 @@ -3453,11 +3501,11 @@ func (ercslr ExpressRouteCircuitsStatsListResult) IsEmpty() bool { // expressRouteCircuitsStatsListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (ercslr ExpressRouteCircuitsStatsListResult) expressRouteCircuitsStatsListResultPreparer() (*http.Request, error) { +func (ercslr ExpressRouteCircuitsStatsListResult) expressRouteCircuitsStatsListResultPreparer(ctx context.Context) (*http.Request, error) { if ercslr.NextLink == nil || len(to.String(ercslr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(ercslr.NextLink))) @@ -3465,14 +3513,24 @@ func (ercslr ExpressRouteCircuitsStatsListResult) expressRouteCircuitsStatsListR // ExpressRouteCircuitsStatsListResultPage contains a page of ExpressRouteCircuitStats values. type ExpressRouteCircuitsStatsListResultPage struct { - fn func(ExpressRouteCircuitsStatsListResult) (ExpressRouteCircuitsStatsListResult, error) + fn func(context.Context, ExpressRouteCircuitsStatsListResult) (ExpressRouteCircuitsStatsListResult, error) ercslr ExpressRouteCircuitsStatsListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ExpressRouteCircuitsStatsListResultPage) Next() error { - next, err := page.fn(page.ercslr) +func (page *ExpressRouteCircuitsStatsListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitsStatsListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.ercslr) if err != nil { return err } @@ -3480,6 +3538,13 @@ func (page *ExpressRouteCircuitsStatsListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ExpressRouteCircuitsStatsListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page ExpressRouteCircuitsStatsListResultPage) NotDone() bool { return !page.ercslr.IsEmpty() @@ -3498,6 +3563,11 @@ func (page ExpressRouteCircuitsStatsListResultPage) Values() []ExpressRouteCircu return *page.ercslr.Value } +// Creates a new instance of the ExpressRouteCircuitsStatsListResultPage type. +func NewExpressRouteCircuitsStatsListResultPage(getNextPage func(context.Context, ExpressRouteCircuitsStatsListResult) (ExpressRouteCircuitsStatsListResult, error)) ExpressRouteCircuitsStatsListResultPage { + return ExpressRouteCircuitsStatsListResultPage{fn: getNextPage} +} + // ExpressRouteCircuitStats contains stats associated with the peering. type ExpressRouteCircuitStats struct { // BytesIn - Gets BytesIn of the peering. @@ -3511,9 +3581,9 @@ type ExpressRouteServiceProvider struct { *ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -3530,12 +3600,6 @@ func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) { if ersp.ID != nil { objectMap["id"] = ersp.ID } - if ersp.Name != nil { - objectMap["name"] = ersp.Name - } - if ersp.Type != nil { - objectMap["type"] = ersp.Type - } if ersp.Location != nil { objectMap["location"] = ersp.Location } @@ -3639,14 +3703,24 @@ type ExpressRouteServiceProviderListResultIterator struct { page ExpressRouteServiceProviderListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *ExpressRouteServiceProviderListResultIterator) Next() error { +func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -3655,6 +3729,13 @@ func (iter *ExpressRouteServiceProviderListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ExpressRouteServiceProviderListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -3674,6 +3755,11 @@ func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteSe return iter.page.Values()[iter.i] } +// Creates a new instance of the ExpressRouteServiceProviderListResultIterator type. +func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator { + return ExpressRouteServiceProviderListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool { return ersplr.Value == nil || len(*ersplr.Value) == 0 @@ -3681,11 +3767,11 @@ func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool { // expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer() (*http.Request, error) { +func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) { if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(ersplr.NextLink))) @@ -3693,14 +3779,24 @@ func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderL // ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values. type ExpressRouteServiceProviderListResultPage struct { - fn func(ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error) + fn func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error) ersplr ExpressRouteServiceProviderListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *ExpressRouteServiceProviderListResultPage) Next() error { - next, err := page.fn(page.ersplr) +func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.ersplr) if err != nil { return err } @@ -3708,6 +3804,13 @@ func (page *ExpressRouteServiceProviderListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ExpressRouteServiceProviderListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page ExpressRouteServiceProviderListResultPage) NotDone() bool { return !page.ersplr.IsEmpty() @@ -3726,6 +3829,11 @@ func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteSer return *page.ersplr.Value } +// Creates a new instance of the ExpressRouteServiceProviderListResultPage type. +func NewExpressRouteServiceProviderListResultPage(getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage { + return ExpressRouteServiceProviderListResultPage{fn: getNextPage} +} + // ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider. type ExpressRouteServiceProviderPropertiesFormat struct { // PeeringLocations - Get a list of peering locations. @@ -4042,9 +4150,9 @@ type Interface struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -4064,12 +4172,6 @@ func (i Interface) MarshalJSON() ([]byte, error) { if i.ID != nil { objectMap["id"] = i.ID } - if i.Name != nil { - objectMap["name"] = i.Name - } - if i.Type != nil { - objectMap["type"] = i.Type - } if i.Location != nil { objectMap["location"] = i.Location } @@ -4259,8 +4361,10 @@ type InterfaceIPConfigurationPropertiesFormat struct { // PrivateIPAllocationMethod - Defines how a private IP address is assigned. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic' PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"` Subnet *Subnet `json:"subnet,omitempty"` - PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"` - ProvisioningState *string `json:"provisioningState,omitempty"` + // Primary - Gets whether this is a primary customer address on the network interface. + Primary *bool `json:"primary,omitempty"` + PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"` + ProvisioningState *string `json:"provisioningState,omitempty"` } // InterfaceListResult response for the ListNetworkInterface API service call. @@ -4278,14 +4382,24 @@ type InterfaceListResultIterator struct { page InterfaceListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *InterfaceListResultIterator) Next() error { +func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -4294,6 +4408,13 @@ func (iter *InterfaceListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *InterfaceListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter InterfaceListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -4313,6 +4434,11 @@ func (iter InterfaceListResultIterator) Value() Interface { return iter.page.Values()[iter.i] } +// Creates a new instance of the InterfaceListResultIterator type. +func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator { + return InterfaceListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (ilr InterfaceListResult) IsEmpty() bool { return ilr.Value == nil || len(*ilr.Value) == 0 @@ -4320,11 +4446,11 @@ func (ilr InterfaceListResult) IsEmpty() bool { // interfaceListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (ilr InterfaceListResult) interfaceListResultPreparer() (*http.Request, error) { +func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) { if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(ilr.NextLink))) @@ -4332,14 +4458,24 @@ func (ilr InterfaceListResult) interfaceListResultPreparer() (*http.Request, err // InterfaceListResultPage contains a page of Interface values. type InterfaceListResultPage struct { - fn func(InterfaceListResult) (InterfaceListResult, error) + fn func(context.Context, InterfaceListResult) (InterfaceListResult, error) ilr InterfaceListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *InterfaceListResultPage) Next() error { - next, err := page.fn(page.ilr) +func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.ilr) if err != nil { return err } @@ -4347,6 +4483,13 @@ func (page *InterfaceListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *InterfaceListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page InterfaceListResultPage) NotDone() bool { return !page.ilr.IsEmpty() @@ -4365,6 +4508,11 @@ func (page InterfaceListResultPage) Values() []Interface { return *page.ilr.Value } +// Creates a new instance of the InterfaceListResultPage type. +func NewInterfaceListResultPage(getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage { + return InterfaceListResultPage{fn: getNextPage} +} + // InterfacePropertiesFormat networkInterface properties. type InterfacePropertiesFormat struct { // VirtualMachine - The reference of a virtual machine. @@ -4387,100 +4535,55 @@ type InterfacePropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type InterfacesCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) { +func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return i, azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - i, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent { + i, err = client.CreateOrUpdateResponder(i.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - i, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. type InterfacesDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) { +func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -4586,9 +4689,9 @@ type LoadBalancer struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -4608,12 +4711,6 @@ func (lb LoadBalancer) MarshalJSON() ([]byte, error) { if lb.ID != nil { objectMap["id"] = lb.ID } - if lb.Name != nil { - objectMap["name"] = lb.Name - } - if lb.Type != nil { - objectMap["type"] = lb.Type - } if lb.Location != nil { objectMap["location"] = lb.Location } @@ -4716,14 +4813,24 @@ type LoadBalancerListResultIterator struct { page LoadBalancerListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *LoadBalancerListResultIterator) Next() error { +func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -4732,6 +4839,13 @@ func (iter *LoadBalancerListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *LoadBalancerListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter LoadBalancerListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -4751,6 +4865,11 @@ func (iter LoadBalancerListResultIterator) Value() LoadBalancer { return iter.page.Values()[iter.i] } +// Creates a new instance of the LoadBalancerListResultIterator type. +func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator { + return LoadBalancerListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (lblr LoadBalancerListResult) IsEmpty() bool { return lblr.Value == nil || len(*lblr.Value) == 0 @@ -4758,11 +4877,11 @@ func (lblr LoadBalancerListResult) IsEmpty() bool { // loadBalancerListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (lblr LoadBalancerListResult) loadBalancerListResultPreparer() (*http.Request, error) { +func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) { if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(lblr.NextLink))) @@ -4770,14 +4889,24 @@ func (lblr LoadBalancerListResult) loadBalancerListResultPreparer() (*http.Reque // LoadBalancerListResultPage contains a page of LoadBalancer values. type LoadBalancerListResultPage struct { - fn func(LoadBalancerListResult) (LoadBalancerListResult, error) + fn func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error) lblr LoadBalancerListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *LoadBalancerListResultPage) Next() error { - next, err := page.fn(page.lblr) +func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.lblr) if err != nil { return err } @@ -4785,6 +4914,13 @@ func (page *LoadBalancerListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *LoadBalancerListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page LoadBalancerListResultPage) NotDone() bool { return !page.lblr.IsEmpty() @@ -4803,6 +4939,11 @@ func (page LoadBalancerListResultPage) Values() []LoadBalancer { return *page.lblr.Value } +// Creates a new instance of the LoadBalancerListResultPage type. +func NewLoadBalancerListResultPage(getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage { + return LoadBalancerListResultPage{fn: getNextPage} +} + // LoadBalancerPropertiesFormat properties of the load balancer. type LoadBalancerPropertiesFormat struct { // FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer @@ -4825,104 +4966,59 @@ type LoadBalancerPropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type LoadBalancersCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) { +func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return lb, azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - lb, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent { + lb, err = client.CreateOrUpdateResponder(lb.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - lb, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. type LoadBalancersDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) { +func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } -// LoadBalancingRule a loag balancing rule for a load balancer. +// LoadBalancingRule a load balancing rule for a load balancer. type LoadBalancingRule struct { *LoadBalancingRulePropertiesFormat `json:"properties,omitempty"` // Name - The name of the resource that is unique within a resource group. This name can be used to access the resource. @@ -5034,9 +5130,9 @@ type LocalNetworkGateway struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -5056,12 +5152,6 @@ func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) { if lng.ID != nil { objectMap["id"] = lng.ID } - if lng.Name != nil { - objectMap["name"] = lng.Name - } - if lng.Type != nil { - objectMap["type"] = lng.Type - } if lng.Location != nil { objectMap["location"] = lng.Location } @@ -5158,20 +5248,31 @@ type LocalNetworkGatewayListResult struct { NextLink *string `json:"nextLink,omitempty"` } -// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway values. +// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway +// values. type LocalNetworkGatewayListResultIterator struct { i int page LocalNetworkGatewayListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *LocalNetworkGatewayListResultIterator) Next() error { +func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -5180,6 +5281,13 @@ func (iter *LocalNetworkGatewayListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *LocalNetworkGatewayListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter LocalNetworkGatewayListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -5199,6 +5307,11 @@ func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway { return iter.page.Values()[iter.i] } +// Creates a new instance of the LocalNetworkGatewayListResultIterator type. +func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator { + return LocalNetworkGatewayListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool { return lnglr.Value == nil || len(*lnglr.Value) == 0 @@ -5206,11 +5319,11 @@ func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool { // localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer() (*http.Request, error) { +func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) { if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(lnglr.NextLink))) @@ -5218,14 +5331,24 @@ func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer // LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values. type LocalNetworkGatewayListResultPage struct { - fn func(LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error) + fn func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error) lnglr LocalNetworkGatewayListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *LocalNetworkGatewayListResultPage) Next() error { - next, err := page.fn(page.lnglr) +func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.lnglr) if err != nil { return err } @@ -5233,6 +5356,13 @@ func (page *LocalNetworkGatewayListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *LocalNetworkGatewayListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page LocalNetworkGatewayListResultPage) NotDone() bool { return !page.lnglr.IsEmpty() @@ -5251,6 +5381,11 @@ func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway { return *page.lnglr.Value } +// Creates a new instance of the LocalNetworkGatewayListResultPage type. +func NewLocalNetworkGatewayListResultPage(getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage { + return LocalNetworkGatewayListResultPage{fn: getNextPage} +} + // LocalNetworkGatewayPropertiesFormat localNetworkGateway properties type LocalNetworkGatewayPropertiesFormat struct { // LocalNetworkAddressSpace - Local network site address space. @@ -5269,97 +5404,51 @@ type LocalNetworkGatewayPropertiesFormat struct { // long-running operation. type LocalNetworkGatewaysCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) { +func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return lng, azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - lng, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent { + lng, err = client.CreateOrUpdateResponder(lng.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - lng, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type LocalNetworkGatewaysDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) { +func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -5561,9 +5650,9 @@ type PublicIPAddress struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -5583,12 +5672,6 @@ func (pia PublicIPAddress) MarshalJSON() ([]byte, error) { if pia.ID != nil { objectMap["id"] = pia.ID } - if pia.Name != nil { - objectMap["name"] = pia.Name - } - if pia.Type != nil { - objectMap["type"] = pia.Type - } if pia.Location != nil { objectMap["location"] = pia.Location } @@ -5686,51 +5769,31 @@ type PublicIPAddressDNSSettings struct { ReverseFqdn *string `json:"reverseFqdn,omitempty"` } -// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type PublicIPAddressesCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) { +func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return pia, azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - pia, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent { + pia, err = client.CreateOrUpdateResponder(pia.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - pia, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } @@ -5739,48 +5802,22 @@ func (future PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddres // operation. type PublicIPAddressesDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) { +func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", resp, "Failure sending request") - return - } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -5799,14 +5836,24 @@ type PublicIPAddressListResultIterator struct { page PublicIPAddressListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *PublicIPAddressListResultIterator) Next() error { +func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -5815,6 +5862,13 @@ func (iter *PublicIPAddressListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *PublicIPAddressListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter PublicIPAddressListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -5834,6 +5888,11 @@ func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress { return iter.page.Values()[iter.i] } +// Creates a new instance of the PublicIPAddressListResultIterator type. +func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator { + return PublicIPAddressListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (pialr PublicIPAddressListResult) IsEmpty() bool { return pialr.Value == nil || len(*pialr.Value) == 0 @@ -5841,11 +5900,11 @@ func (pialr PublicIPAddressListResult) IsEmpty() bool { // publicIPAddressListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer() (*http.Request, error) { +func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) { if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(pialr.NextLink))) @@ -5853,14 +5912,24 @@ func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer() (*htt // PublicIPAddressListResultPage contains a page of PublicIPAddress values. type PublicIPAddressListResultPage struct { - fn func(PublicIPAddressListResult) (PublicIPAddressListResult, error) + fn func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error) pialr PublicIPAddressListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *PublicIPAddressListResultPage) Next() error { - next, err := page.fn(page.pialr) +func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.pialr) if err != nil { return err } @@ -5868,6 +5937,13 @@ func (page *PublicIPAddressListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *PublicIPAddressListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page PublicIPAddressListResultPage) NotDone() bool { return !page.pialr.IsEmpty() @@ -5886,6 +5962,11 @@ func (page PublicIPAddressListResultPage) Values() []PublicIPAddress { return *page.pialr.Value } +// Creates a new instance of the PublicIPAddressListResultPage type. +func NewPublicIPAddressListResultPage(getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage { + return PublicIPAddressListResultPage{fn: getNextPage} +} + // PublicIPAddressPropertiesFormat public IP address properties. type PublicIPAddressPropertiesFormat struct { // PublicIPAllocationMethod - The public IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic' @@ -5906,9 +5987,9 @@ type PublicIPAddressPropertiesFormat struct { type Resource struct { // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -5922,12 +6003,6 @@ func (r Resource) MarshalJSON() ([]byte, error) { if r.ID != nil { objectMap["id"] = r.ID } - if r.Name != nil { - objectMap["name"] = r.Name - } - if r.Type != nil { - objectMap["type"] = r.Type - } if r.Location != nil { objectMap["location"] = r.Location } @@ -6033,14 +6108,24 @@ type RouteListResultIterator struct { page RouteListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *RouteListResultIterator) Next() error { +func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -6049,6 +6134,13 @@ func (iter *RouteListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *RouteListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter RouteListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -6068,6 +6160,11 @@ func (iter RouteListResultIterator) Value() Route { return iter.page.Values()[iter.i] } +// Creates a new instance of the RouteListResultIterator type. +func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator { + return RouteListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (rlr RouteListResult) IsEmpty() bool { return rlr.Value == nil || len(*rlr.Value) == 0 @@ -6075,11 +6172,11 @@ func (rlr RouteListResult) IsEmpty() bool { // routeListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (rlr RouteListResult) routeListResultPreparer() (*http.Request, error) { +func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) { if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(rlr.NextLink))) @@ -6087,14 +6184,24 @@ func (rlr RouteListResult) routeListResultPreparer() (*http.Request, error) { // RouteListResultPage contains a page of Route values. type RouteListResultPage struct { - fn func(RouteListResult) (RouteListResult, error) + fn func(context.Context, RouteListResult) (RouteListResult, error) rlr RouteListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *RouteListResultPage) Next() error { - next, err := page.fn(page.rlr) +func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.rlr) if err != nil { return err } @@ -6102,6 +6209,13 @@ func (page *RouteListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *RouteListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page RouteListResultPage) NotDone() bool { return !page.rlr.IsEmpty() @@ -6120,6 +6234,11 @@ func (page RouteListResultPage) Values() []Route { return *page.rlr.Value } +// Creates a new instance of the RouteListResultPage type. +func NewRouteListResultPage(getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage { + return RouteListResultPage{fn: getNextPage} +} + // RoutePropertiesFormat route resource type RoutePropertiesFormat struct { // AddressPrefix - The destination CIDR to which the route applies. @@ -6132,50 +6251,31 @@ type RoutePropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running operation. +// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. type RoutesCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) { +func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return r, azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - r, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent { + r, err = client.CreateOrUpdateResponder(r.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - r, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } @@ -6183,48 +6283,22 @@ func (future RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, e // RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. type RoutesDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) { +func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", resp, "Failure sending request") - return - } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -6236,9 +6310,9 @@ type RouteTable struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -6258,12 +6332,6 @@ func (rt RouteTable) MarshalJSON() ([]byte, error) { if rt.ID != nil { objectMap["id"] = rt.ID } - if rt.Name != nil { - objectMap["name"] = rt.Name - } - if rt.Type != nil { - objectMap["type"] = rt.Type - } if rt.Location != nil { objectMap["location"] = rt.Location } @@ -6366,14 +6434,24 @@ type RouteTableListResultIterator struct { page RouteTableListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *RouteTableListResultIterator) Next() error { +func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -6382,6 +6460,13 @@ func (iter *RouteTableListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *RouteTableListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter RouteTableListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -6401,6 +6486,11 @@ func (iter RouteTableListResultIterator) Value() RouteTable { return iter.page.Values()[iter.i] } +// Creates a new instance of the RouteTableListResultIterator type. +func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator { + return RouteTableListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (rtlr RouteTableListResult) IsEmpty() bool { return rtlr.Value == nil || len(*rtlr.Value) == 0 @@ -6408,11 +6498,11 @@ func (rtlr RouteTableListResult) IsEmpty() bool { // routeTableListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (rtlr RouteTableListResult) routeTableListResultPreparer() (*http.Request, error) { +func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) { if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(rtlr.NextLink))) @@ -6420,14 +6510,24 @@ func (rtlr RouteTableListResult) routeTableListResultPreparer() (*http.Request, // RouteTableListResultPage contains a page of RouteTable values. type RouteTableListResultPage struct { - fn func(RouteTableListResult) (RouteTableListResult, error) + fn func(context.Context, RouteTableListResult) (RouteTableListResult, error) rtlr RouteTableListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *RouteTableListResultPage) Next() error { - next, err := page.fn(page.rtlr) +func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.rtlr) if err != nil { return err } @@ -6435,6 +6535,13 @@ func (page *RouteTableListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *RouteTableListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page RouteTableListResultPage) NotDone() bool { return !page.rtlr.IsEmpty() @@ -6453,6 +6560,11 @@ func (page RouteTableListResultPage) Values() []RouteTable { return *page.rtlr.Value } +// Creates a new instance of the RouteTableListResultPage type. +func NewRouteTableListResultPage(getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage { + return RouteTableListResultPage{fn: getNextPage} +} + // RouteTablePropertiesFormat route Table resource type RouteTablePropertiesFormat struct { // Routes - Collection of routes contained within a route table. @@ -6463,100 +6575,55 @@ type RouteTablePropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type RouteTablesCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) { +func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return rt, azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - rt, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent { + rt, err = client.CreateOrUpdateResponder(rt.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - rt, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. type RouteTablesDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) { +func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", resp, "Failure sending request") - return - } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -6568,9 +6635,9 @@ type SecurityGroup struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -6590,12 +6657,6 @@ func (sg SecurityGroup) MarshalJSON() ([]byte, error) { if sg.ID != nil { objectMap["id"] = sg.ID } - if sg.Name != nil { - objectMap["name"] = sg.Name - } - if sg.Type != nil { - objectMap["type"] = sg.Type - } if sg.Location != nil { objectMap["location"] = sg.Location } @@ -6698,14 +6759,24 @@ type SecurityGroupListResultIterator struct { page SecurityGroupListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *SecurityGroupListResultIterator) Next() error { +func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -6714,6 +6785,13 @@ func (iter *SecurityGroupListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SecurityGroupListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter SecurityGroupListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -6733,6 +6811,11 @@ func (iter SecurityGroupListResultIterator) Value() SecurityGroup { return iter.page.Values()[iter.i] } +// Creates a new instance of the SecurityGroupListResultIterator type. +func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator { + return SecurityGroupListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (sglr SecurityGroupListResult) IsEmpty() bool { return sglr.Value == nil || len(*sglr.Value) == 0 @@ -6740,11 +6823,11 @@ func (sglr SecurityGroupListResult) IsEmpty() bool { // securityGroupListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (sglr SecurityGroupListResult) securityGroupListResultPreparer() (*http.Request, error) { +func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) { if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(sglr.NextLink))) @@ -6752,14 +6835,24 @@ func (sglr SecurityGroupListResult) securityGroupListResultPreparer() (*http.Req // SecurityGroupListResultPage contains a page of SecurityGroup values. type SecurityGroupListResultPage struct { - fn func(SecurityGroupListResult) (SecurityGroupListResult, error) + fn func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error) sglr SecurityGroupListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *SecurityGroupListResultPage) Next() error { - next, err := page.fn(page.sglr) +func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.sglr) if err != nil { return err } @@ -6767,6 +6860,13 @@ func (page *SecurityGroupListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SecurityGroupListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page SecurityGroupListResultPage) NotDone() bool { return !page.sglr.IsEmpty() @@ -6785,6 +6885,11 @@ func (page SecurityGroupListResultPage) Values() []SecurityGroup { return *page.sglr.Value } +// Creates a new instance of the SecurityGroupListResultPage type. +func NewSecurityGroupListResultPage(getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage { + return SecurityGroupListResultPage{fn: getNextPage} +} + // SecurityGroupPropertiesFormat network Security Group resource. type SecurityGroupPropertiesFormat struct { // SecurityRules - A collection of security rules of the network security group. @@ -6801,100 +6906,55 @@ type SecurityGroupPropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type SecurityGroupsCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) { +func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return sg, azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - sg, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent { + sg, err = client.CreateOrUpdateResponder(sg.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - sg, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. type SecurityGroupsDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) { +func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", resp, "Failure sending request") - return - } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -6979,8 +7039,8 @@ func (sr *SecurityRule) UnmarshalJSON(body []byte) error { return nil } -// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that belongs -// to a network security group. +// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that +// belongs to a network security group. type SecurityRuleListResult struct { autorest.Response `json:"-"` // Value - The security rules in a network security group. @@ -6995,14 +7055,24 @@ type SecurityRuleListResultIterator struct { page SecurityRuleListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *SecurityRuleListResultIterator) Next() error { +func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -7011,6 +7081,13 @@ func (iter *SecurityRuleListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SecurityRuleListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter SecurityRuleListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -7030,6 +7107,11 @@ func (iter SecurityRuleListResultIterator) Value() SecurityRule { return iter.page.Values()[iter.i] } +// Creates a new instance of the SecurityRuleListResultIterator type. +func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator { + return SecurityRuleListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (srlr SecurityRuleListResult) IsEmpty() bool { return srlr.Value == nil || len(*srlr.Value) == 0 @@ -7037,11 +7119,11 @@ func (srlr SecurityRuleListResult) IsEmpty() bool { // securityRuleListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (srlr SecurityRuleListResult) securityRuleListResultPreparer() (*http.Request, error) { +func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) { if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(srlr.NextLink))) @@ -7049,14 +7131,24 @@ func (srlr SecurityRuleListResult) securityRuleListResultPreparer() (*http.Reque // SecurityRuleListResultPage contains a page of SecurityRule values. type SecurityRuleListResultPage struct { - fn func(SecurityRuleListResult) (SecurityRuleListResult, error) + fn func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error) srlr SecurityRuleListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *SecurityRuleListResultPage) Next() error { - next, err := page.fn(page.srlr) +func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.srlr) if err != nil { return err } @@ -7064,6 +7156,13 @@ func (page *SecurityRuleListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SecurityRuleListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page SecurityRuleListResultPage) NotDone() bool { return !page.srlr.IsEmpty() @@ -7082,124 +7181,84 @@ func (page SecurityRuleListResultPage) Values() []SecurityRule { return *page.srlr.Value } +// Creates a new instance of the SecurityRuleListResultPage type. +func NewSecurityRuleListResultPage(getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage { + return SecurityRuleListResultPage{fn: getNextPage} +} + // SecurityRulePropertiesFormat ... type SecurityRulePropertiesFormat struct { // Description - A description for this rule. Restricted to 140 chars. Description *string `json:"description,omitempty"` // Protocol - Network protocol this rule applies to. Possible values are 'Tcp', 'Udp', and '*'. Possible values include: 'TCP', 'UDP', 'Asterisk' Protocol SecurityRuleProtocol `json:"protocol,omitempty"` - // SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterix '*' can also be used to match all ports. + // SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports. SourcePortRange *string `json:"sourcePortRange,omitempty"` - // DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterix '*' can also be used to match all ports. + // DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports. DestinationPortRange *string `json:"destinationPortRange,omitempty"` - // SourceAddressPrefix - The CIDR or source IP range. Asterix '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. If this is an ingress rule, specifies where network traffic originates from. + // SourceAddressPrefix - The CIDR or source IP range. Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. If this is an ingress rule, specifies where network traffic originates from. SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"` - // DestinationAddressPrefix - The destination address prefix. CIDR or source IP range. Asterix '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. + // DestinationAddressPrefix - The destination address prefix. CIDR or source IP range. Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"` // Access - The network traffic is allowed or denied. Possible values are: 'Allow' and 'Deny'. Possible values include: 'Allow', 'Deny' Access SecurityRuleAccess `json:"access,omitempty"` // Priority - The priority of the rule. The value can be between 100 and 4096. The priority number must be unique for each rule in the collection. The lower the priority number, the higher the priority of the rule. Priority *int32 `json:"priority,omitempty"` - // Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outcoming traffic. Possible values are: 'Inbound' and 'Outbound'. Possible values include: 'Inbound', 'Outbound' + // Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values are: 'Inbound' and 'Outbound'. Possible values include: 'Inbound', 'Outbound' Direction SecurityRuleDirection `json:"direction,omitempty"` // ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'. ProvisioningState *string `json:"provisioningState,omitempty"` } -// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type SecurityRulesCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) { +func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return sr, azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - sr, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent { + sr, err = client.CreateOrUpdateResponder(sr.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - sr, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. type SecurityRulesDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) { +func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", resp, "Failure sending request") - return - } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -7290,7 +7349,8 @@ func (s *Subnet) UnmarshalJSON(body []byte) error { return nil } -// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual network +// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual +// network type SubnetListResult struct { autorest.Response `json:"-"` // Value - The subnets in a virtual network. @@ -7305,14 +7365,24 @@ type SubnetListResultIterator struct { page SubnetListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *SubnetListResultIterator) Next() error { +func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -7321,6 +7391,13 @@ func (iter *SubnetListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *SubnetListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter SubnetListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -7340,6 +7417,11 @@ func (iter SubnetListResultIterator) Value() Subnet { return iter.page.Values()[iter.i] } +// Creates a new instance of the SubnetListResultIterator type. +func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator { + return SubnetListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (slr SubnetListResult) IsEmpty() bool { return slr.Value == nil || len(*slr.Value) == 0 @@ -7347,11 +7429,11 @@ func (slr SubnetListResult) IsEmpty() bool { // subnetListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (slr SubnetListResult) subnetListResultPreparer() (*http.Request, error) { +func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) { if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(slr.NextLink))) @@ -7359,14 +7441,24 @@ func (slr SubnetListResult) subnetListResultPreparer() (*http.Request, error) { // SubnetListResultPage contains a page of Subnet values. type SubnetListResultPage struct { - fn func(SubnetListResult) (SubnetListResult, error) + fn func(context.Context, SubnetListResult) (SubnetListResult, error) slr SubnetListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *SubnetListResultPage) Next() error { - next, err := page.fn(page.slr) +func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.slr) if err != nil { return err } @@ -7374,6 +7466,13 @@ func (page *SubnetListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *SubnetListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page SubnetListResultPage) NotDone() bool { return !page.slr.IsEmpty() @@ -7392,6 +7491,11 @@ func (page SubnetListResultPage) Values() []Subnet { return *page.slr.Value } +// Creates a new instance of the SubnetListResultPage type. +func NewSubnetListResultPage(getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage { + return SubnetListResultPage{fn: getNextPage} +} + // SubnetPropertiesFormat ... type SubnetPropertiesFormat struct { // AddressPrefix - The address prefix for the subnet. @@ -7410,96 +7514,51 @@ type SubnetPropertiesFormat struct { // operation. type SubnetsCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) { +func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return s, azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - s, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent { + s, err = client.CreateOrUpdateResponder(s.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - s, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation. +// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running +// operation. type SubnetsDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) { +func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -7544,14 +7603,24 @@ type UsagesListResultIterator struct { page UsagesListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *UsagesListResultIterator) Next() error { +func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -7560,6 +7629,13 @@ func (iter *UsagesListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *UsagesListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter UsagesListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -7579,6 +7655,11 @@ func (iter UsagesListResultIterator) Value() Usage { return iter.page.Values()[iter.i] } +// Creates a new instance of the UsagesListResultIterator type. +func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator { + return UsagesListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (ulr UsagesListResult) IsEmpty() bool { return ulr.Value == nil || len(*ulr.Value) == 0 @@ -7586,11 +7667,11 @@ func (ulr UsagesListResult) IsEmpty() bool { // usagesListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (ulr UsagesListResult) usagesListResultPreparer() (*http.Request, error) { +func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) { if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(ulr.NextLink))) @@ -7598,14 +7679,24 @@ func (ulr UsagesListResult) usagesListResultPreparer() (*http.Request, error) { // UsagesListResultPage contains a page of Usage values. type UsagesListResultPage struct { - fn func(UsagesListResult) (UsagesListResult, error) + fn func(context.Context, UsagesListResult) (UsagesListResult, error) ulr UsagesListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *UsagesListResultPage) Next() error { - next, err := page.fn(page.ulr) +func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.ulr) if err != nil { return err } @@ -7613,6 +7704,13 @@ func (page *UsagesListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *UsagesListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page UsagesListResultPage) NotDone() bool { return !page.ulr.IsEmpty() @@ -7631,6 +7729,11 @@ func (page UsagesListResultPage) Values() []Usage { return *page.ulr.Value } +// Creates a new instance of the UsagesListResultPage type. +func NewUsagesListResultPage(getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage { + return UsagesListResultPage{fn: getNextPage} +} + // VirtualNetwork virtual Network resource. type VirtualNetwork struct { autorest.Response `json:"-"` @@ -7639,9 +7742,9 @@ type VirtualNetwork struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -7661,12 +7764,6 @@ func (vn VirtualNetwork) MarshalJSON() ([]byte, error) { if vn.ID != nil { objectMap["id"] = vn.ID } - if vn.Name != nil { - objectMap["name"] = vn.Name - } - if vn.Type != nil { - objectMap["type"] = vn.Type - } if vn.Location != nil { objectMap["location"] = vn.Location } @@ -7762,9 +7859,9 @@ type VirtualNetworkGateway struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -7784,12 +7881,6 @@ func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) { if vng.ID != nil { objectMap["id"] = vng.ID } - if vng.Name != nil { - objectMap["name"] = vng.Name - } - if vng.Type != nil { - objectMap["type"] = vng.Type - } if vng.Location != nil { objectMap["location"] = vng.Location } @@ -7885,9 +7976,9 @@ type VirtualNetworkGatewayConnection struct { Etag *string `json:"etag,omitempty"` // ID - Resource Identifier. ID *string `json:"id,omitempty"` - // Name - Resource name. + // Name - READ-ONLY; Resource name. Name *string `json:"name,omitempty"` - // Type - Resource type. + // Type - READ-ONLY; Resource type. Type *string `json:"type,omitempty"` // Location - Resource location. Location *string `json:"location,omitempty"` @@ -7907,12 +7998,6 @@ func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) { if vngc.ID != nil { objectMap["id"] = vngc.ID } - if vngc.Name != nil { - objectMap["name"] = vngc.Name - } - if vngc.Type != nil { - objectMap["type"] = vngc.Type - } if vngc.Location != nil { objectMap["location"] = vngc.Location } @@ -8000,7 +8085,8 @@ func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error { return nil } -// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API service call +// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API +// service call type VirtualNetworkGatewayConnectionListResult struct { autorest.Response `json:"-"` // Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group. @@ -8016,14 +8102,24 @@ type VirtualNetworkGatewayConnectionListResultIterator struct { page VirtualNetworkGatewayConnectionListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error { +func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -8032,6 +8128,13 @@ func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -8051,6 +8154,11 @@ func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNet return iter.page.Values()[iter.i] } +// Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type. +func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator { + return VirtualNetworkGatewayConnectionListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool { return vngclr.Value == nil || len(*vngclr.Value) == 0 @@ -8058,11 +8166,11 @@ func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool { // virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer() (*http.Request, error) { +func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) { if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(vngclr.NextLink))) @@ -8070,14 +8178,24 @@ func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayCon // VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values. type VirtualNetworkGatewayConnectionListResultPage struct { - fn func(VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error) + fn func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error) vngclr VirtualNetworkGatewayConnectionListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error { - next, err := page.fn(page.vngclr) +func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.vngclr) if err != nil { return err } @@ -8085,6 +8203,13 @@ func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool { return !page.vngclr.IsEmpty() @@ -8103,6 +8228,11 @@ func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetw return *page.vngclr.Value } +// Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type. +func NewVirtualNetworkGatewayConnectionListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage { + return VirtualNetworkGatewayConnectionListResultPage{fn: getNextPage} +} + // VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties type VirtualNetworkGatewayConnectionPropertiesFormat struct { // AuthorizationKey - The authorizationKey. @@ -8110,7 +8240,7 @@ type VirtualNetworkGatewayConnectionPropertiesFormat struct { VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"` VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"` LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"` - // ConnectionType - Gateway connection type. Possible values are: 'Ipsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient' + // ConnectionType - Gateway connection type. Possible values are: 'IPsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient' ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"` // RoutingWeight - The routing weight. RoutingWeight *int32 `json:"routingWeight,omitempty"` @@ -8132,198 +8262,112 @@ type VirtualNetworkGatewayConnectionPropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of -// a long-running operation. +// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) { +func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return vngc, azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - vngc, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent { + vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - vngc, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } -// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. +// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of +// a long-running operation. type VirtualNetworkGatewayConnectionsDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) { +func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } -// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the results of -// a long-running operation. +// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) { +func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure") return } if !done { - return crsk, azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture") - } - if future.PollingMethod() == azure.PollingLocation { - crsk, err = client.ResetSharedKeyResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent { + crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", resp, "Failure sending request") - return - } - crsk, err = client.ResetSharedKeyResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", resp, "Failure responding to request") } return } -// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the results of a -// long-running operation. +// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) { +func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure") return } if !done { - return csk, azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture") - } - if future.PollingMethod() == azure.PollingLocation { - csk, err = client.SetSharedKeyResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent { + csk, err = client.SetSharedKeyResponder(csk.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", resp, "Failure sending request") - return - } - csk, err = client.SetSharedKeyResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", resp, "Failure responding to request") } return } @@ -8431,20 +8475,31 @@ type VirtualNetworkGatewayListResult struct { NextLink *string `json:"nextLink,omitempty"` } -// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway values. +// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway +// values. type VirtualNetworkGatewayListResultIterator struct { i int page VirtualNetworkGatewayListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *VirtualNetworkGatewayListResultIterator) Next() error { +func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -8453,6 +8508,13 @@ func (iter *VirtualNetworkGatewayListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualNetworkGatewayListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -8472,6 +8534,11 @@ func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGatewa return iter.page.Values()[iter.i] } +// Creates a new instance of the VirtualNetworkGatewayListResultIterator type. +func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator { + return VirtualNetworkGatewayListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool { return vnglr.Value == nil || len(*vnglr.Value) == 0 @@ -8479,11 +8546,11 @@ func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool { // virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer() (*http.Request, error) { +func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) { if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(vnglr.NextLink))) @@ -8491,14 +8558,24 @@ func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPrep // VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values. type VirtualNetworkGatewayListResultPage struct { - fn func(VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error) + fn func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error) vnglr VirtualNetworkGatewayListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *VirtualNetworkGatewayListResultPage) Next() error { - next, err := page.fn(page.vnglr) +func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.vnglr) if err != nil { return err } @@ -8506,6 +8583,13 @@ func (page *VirtualNetworkGatewayListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualNetworkGatewayListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page VirtualNetworkGatewayListResultPage) NotDone() bool { return !page.vnglr.IsEmpty() @@ -8524,6 +8608,11 @@ func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway return *page.vnglr.Value } +// Creates a new instance of the VirtualNetworkGatewayListResultPage type. +func NewVirtualNetworkGatewayListResultPage(getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage { + return VirtualNetworkGatewayListResultPage{fn: getNextPage} +} + // VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties type VirtualNetworkGatewayPropertiesFormat struct { // IPConfigurations - IP configurations for virtual network gateway. @@ -8552,96 +8641,79 @@ type VirtualNetworkGatewayPropertiesFormat struct { // long-running operation. type VirtualNetworkGatewaysCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) { +func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return vng, azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - vng, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent { + vng, err = client.CreateOrUpdateResponder(vng.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + return +} + +// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. +type VirtualNetworkGatewaysDeleteFuture struct { + azure.Future +} + +// Result returns the result of the asynchronous operation. +// If the operation has not completed it will return an error. +func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) { + var done bool + done, err = future.DoneWithContext(context.Background(), client) if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", resp, "Failure sending request") + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure") return } - vng, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", resp, "Failure responding to request") + if !done { + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture") + return } + ar.Response = future.Response() return } -// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. -type VirtualNetworkGatewaysDeleteFuture struct { +// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the +// results of a long-running operation. +type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) { +func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure") + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent { + s, err = client.GeneratevpnclientpackageResponder(s.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", resp, "Failure sending request") - return - } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", resp, "Failure responding to request") } return } @@ -8656,51 +8728,31 @@ type VirtualNetworkGatewaySku struct { Capacity *int32 `json:"capacity,omitempty"` } -// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type VirtualNetworkGatewaysResetFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) { +func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure") return } if !done { - return vng, azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture") - } - if future.PollingMethod() == azure.PollingLocation { - vng, err = client.ResetResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent { + vng, err = client.ResetResponder(vng.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", resp, "Failure sending request") - return - } - vng, err = client.ResetResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", resp, "Failure responding to request") } return } @@ -8720,14 +8772,24 @@ type VirtualNetworkListResultIterator struct { page VirtualNetworkListResultPage } -// Next advances to the next value. If there was an error making +// NextWithContext advances to the next value. If there was an error making // the request the iterator does not advance and the error is returned. -func (iter *VirtualNetworkListResultIterator) Next() error { +func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } iter.i++ if iter.i < len(iter.page.Values()) { return nil } - err := iter.page.Next() + err = iter.page.NextWithContext(ctx) if err != nil { iter.i-- return err @@ -8736,6 +8798,13 @@ func (iter *VirtualNetworkListResultIterator) Next() error { return nil } +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *VirtualNetworkListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + // NotDone returns true if the enumeration should be started or is not yet complete. func (iter VirtualNetworkListResultIterator) NotDone() bool { return iter.page.NotDone() && iter.i < len(iter.page.Values()) @@ -8755,6 +8824,11 @@ func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork { return iter.page.Values()[iter.i] } +// Creates a new instance of the VirtualNetworkListResultIterator type. +func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator { + return VirtualNetworkListResultIterator{page: page} +} + // IsEmpty returns true if the ListResult contains no values. func (vnlr VirtualNetworkListResult) IsEmpty() bool { return vnlr.Value == nil || len(*vnlr.Value) == 0 @@ -8762,11 +8836,11 @@ func (vnlr VirtualNetworkListResult) IsEmpty() bool { // virtualNetworkListResultPreparer prepares a request to retrieve the next set of results. // It returns nil if no more results exist. -func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer() (*http.Request, error) { +func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) { if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 { return nil, nil } - return autorest.Prepare(&http.Request{}, + return autorest.Prepare((&http.Request{}).WithContext(ctx), autorest.AsJSON(), autorest.AsGet(), autorest.WithBaseURL(to.String(vnlr.NextLink))) @@ -8774,14 +8848,24 @@ func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer() (*http.R // VirtualNetworkListResultPage contains a page of VirtualNetwork values. type VirtualNetworkListResultPage struct { - fn func(VirtualNetworkListResult) (VirtualNetworkListResult, error) + fn func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error) vnlr VirtualNetworkListResult } -// Next advances to the next page of values. If there was an error making +// NextWithContext advances to the next page of values. If there was an error making // the request the page does not advance and the error is returned. -func (page *VirtualNetworkListResultPage) Next() error { - next, err := page.fn(page.vnlr) +func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.vnlr) if err != nil { return err } @@ -8789,6 +8873,13 @@ func (page *VirtualNetworkListResultPage) Next() error { return nil } +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *VirtualNetworkListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + // NotDone returns true if the page enumeration should be started or is not yet complete. func (page VirtualNetworkListResultPage) NotDone() bool { return !page.vnlr.IsEmpty() @@ -8807,6 +8898,11 @@ func (page VirtualNetworkListResultPage) Values() []VirtualNetwork { return *page.vnlr.Value } +// Creates a new instance of the VirtualNetworkListResultPage type. +func NewVirtualNetworkListResultPage(getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage { + return VirtualNetworkListResultPage{fn: getNextPage} +} + // VirtualNetworkPropertiesFormat ... type VirtualNetworkPropertiesFormat struct { // AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets. @@ -8821,51 +8917,31 @@ type VirtualNetworkPropertiesFormat struct { ProvisioningState *string `json:"provisioningState,omitempty"` } -// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running -// operation. +// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a +// long-running operation. type VirtualNetworksCreateOrUpdateFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) { +func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") return } if !done { - return vn, azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture") - } - if future.PollingMethod() == azure.PollingLocation { - vn, err = client.CreateOrUpdateResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Failure responding to request") - } + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture") return } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) + sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) + if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent { + vn, err = client.CreateOrUpdateResponder(vn.Response.Response) if err != nil { - return + err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request") } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", resp, "Failure sending request") - return - } - vn, err = client.CreateOrUpdateResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", resp, "Failure responding to request") } return } @@ -8874,48 +8950,22 @@ func (future VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksC // operation. type VirtualNetworksDeleteFuture struct { azure.Future - req *http.Request } // Result returns the result of the asynchronous operation. // If the operation has not completed it will return an error. -func (future VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) { +func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) { var done bool - done, err = future.Done(client) + done, err = future.DoneWithContext(context.Background(), client) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure") return } if !done { - return ar, azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture") - } - if future.PollingMethod() == azure.PollingLocation { - ar, err = client.DeleteResponder(future.Response()) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Failure responding to request") - } - return - } - var req *http.Request - var resp *http.Response - if future.PollingURL() != "" { - req, err = http.NewRequest(http.MethodGet, future.PollingURL(), nil) - if err != nil { - return - } - } else { - req = autorest.ChangeToGet(future.req) - } - resp, err = autorest.SendWithSender(client, req, - autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", resp, "Failure sending request") + err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture") return } - ar, err = client.DeleteResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", resp, "Failure responding to request") - } + ar.Response = future.Response() return } @@ -9015,8 +9065,8 @@ func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error { return nil } -// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual network -// gateway. +// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual +// network gateway. type VpnClientRevokedCertificatePropertiesFormat struct { // Thumbprint - The revoked VPN client certificate thumbprint. Thumbprint *string `json:"thumbprint,omitempty"` diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/publicipaddresses.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/publicipaddresses.go index f733de4f077..2eb805666a0 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/publicipaddresses.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/publicipaddresses.go @@ -22,6 +22,7 @@ import ( "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -46,6 +47,16 @@ func NewPublicIPAddressesClientWithBaseURI(baseURI string, subscriptionID string // publicIPAddressName - the name of the public IP address. // parameters - parameters supplied to the create or update public IP address operation. func (client PublicIPAddressesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, publicIPAddressName string, parameters PublicIPAddress) (result PublicIPAddressesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } if err := validation.Validate([]validation.Validation{ {TargetValue: parameters, Constraints: []validation.Constraint{{Target: "parameters.PublicIPAddressPropertiesFormat", Name: validation.Null, Rule: false, @@ -98,15 +109,13 @@ func (client PublicIPAddressesClient) CreateOrUpdatePreparer(ctx context.Context // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client PublicIPAddressesClient) CreateOrUpdateSender(req *http.Request) (future PublicIPAddressesCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -128,6 +137,16 @@ func (client PublicIPAddressesClient) CreateOrUpdateResponder(resp *http.Respons // resourceGroupName - the name of the resource group. // publicIPAddressName - the name of the subnet. func (client PublicIPAddressesClient) Delete(ctx context.Context, resourceGroupName string, publicIPAddressName string) (result PublicIPAddressesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressesClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, publicIPAddressName) if err != nil { err = autorest.NewErrorWithError(err, "network.PublicIPAddressesClient", "Delete", nil, "Failure preparing request") @@ -167,15 +186,13 @@ func (client PublicIPAddressesClient) DeletePreparer(ctx context.Context, resour // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client PublicIPAddressesClient) DeleteSender(req *http.Request) (future PublicIPAddressesDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -197,6 +214,16 @@ func (client PublicIPAddressesClient) DeleteResponder(resp *http.Response) (resu // publicIPAddressName - the name of the subnet. // expand - expands referenced resources. func (client PublicIPAddressesClient) Get(ctx context.Context, resourceGroupName string, publicIPAddressName string, expand string) (result PublicIPAddress, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, publicIPAddressName, expand) if err != nil { err = autorest.NewErrorWithError(err, "network.PublicIPAddressesClient", "Get", nil, "Failure preparing request") @@ -245,8 +272,8 @@ func (client PublicIPAddressesClient) GetPreparer(ctx context.Context, resourceG // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client PublicIPAddressesClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -266,6 +293,16 @@ func (client PublicIPAddressesClient) GetResponder(resp *http.Response) (result // Parameters: // resourceGroupName - the name of the resource group. func (client PublicIPAddressesClient) List(ctx context.Context, resourceGroupName string) (result PublicIPAddressListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressesClient.List") + defer func() { + sc := -1 + if result.pialr.Response.Response != nil { + sc = result.pialr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -311,8 +348,8 @@ func (client PublicIPAddressesClient) ListPreparer(ctx context.Context, resource // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client PublicIPAddressesClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -329,8 +366,8 @@ func (client PublicIPAddressesClient) ListResponder(resp *http.Response) (result } // listNextResults retrieves the next set of results, if any. -func (client PublicIPAddressesClient) listNextResults(lastResults PublicIPAddressListResult) (result PublicIPAddressListResult, err error) { - req, err := lastResults.publicIPAddressListResultPreparer() +func (client PublicIPAddressesClient) listNextResults(ctx context.Context, lastResults PublicIPAddressListResult) (result PublicIPAddressListResult, err error) { + req, err := lastResults.publicIPAddressListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.PublicIPAddressesClient", "listNextResults", nil, "Failure preparing next results request") } @@ -351,12 +388,32 @@ func (client PublicIPAddressesClient) listNextResults(lastResults PublicIPAddres // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client PublicIPAddressesClient) ListComplete(ctx context.Context, resourceGroupName string) (result PublicIPAddressListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } // ListAll gets all the public IP addresses in a subscription. func (client PublicIPAddressesClient) ListAll(ctx context.Context) (result PublicIPAddressListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressesClient.ListAll") + defer func() { + sc := -1 + if result.pialr.Response.Response != nil { + sc = result.pialr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listAllNextResults req, err := client.ListAllPreparer(ctx) if err != nil { @@ -401,8 +458,8 @@ func (client PublicIPAddressesClient) ListAllPreparer(ctx context.Context) (*htt // ListAllSender sends the ListAll request. The method will close the // http.Response Body if it receives an error. func (client PublicIPAddressesClient) ListAllSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListAllResponder handles the response to the ListAll request. The method always @@ -419,8 +476,8 @@ func (client PublicIPAddressesClient) ListAllResponder(resp *http.Response) (res } // listAllNextResults retrieves the next set of results, if any. -func (client PublicIPAddressesClient) listAllNextResults(lastResults PublicIPAddressListResult) (result PublicIPAddressListResult, err error) { - req, err := lastResults.publicIPAddressListResultPreparer() +func (client PublicIPAddressesClient) listAllNextResults(ctx context.Context, lastResults PublicIPAddressListResult) (result PublicIPAddressListResult, err error) { + req, err := lastResults.publicIPAddressListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.PublicIPAddressesClient", "listAllNextResults", nil, "Failure preparing next results request") } @@ -441,6 +498,16 @@ func (client PublicIPAddressesClient) listAllNextResults(lastResults PublicIPAdd // ListAllComplete enumerates all values, automatically crossing page boundaries as required. func (client PublicIPAddressesClient) ListAllComplete(ctx context.Context) (result PublicIPAddressListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressesClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListAll(ctx) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/routes.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/routes.go index c8c41ea1fb0..d25923ad024 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/routes.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/routes.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -46,6 +47,16 @@ func NewRoutesClientWithBaseURI(baseURI string, subscriptionID string) RoutesCli // routeName - the name of the route. // routeParameters - parameters supplied to the create or update route operation. func (client RoutesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, routeTableName string, routeName string, routeParameters Route) (result RoutesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RoutesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, routeTableName, routeName, routeParameters) if err != nil { err = autorest.NewErrorWithError(err, "network.RoutesClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -88,15 +99,13 @@ func (client RoutesClient) CreateOrUpdatePreparer(ctx context.Context, resourceG // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client RoutesClient) CreateOrUpdateSender(req *http.Request) (future RoutesCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -119,6 +128,16 @@ func (client RoutesClient) CreateOrUpdateResponder(resp *http.Response) (result // routeTableName - the name of the route table. // routeName - the name of the route. func (client RoutesClient) Delete(ctx context.Context, resourceGroupName string, routeTableName string, routeName string) (result RoutesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RoutesClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, routeTableName, routeName) if err != nil { err = autorest.NewErrorWithError(err, "network.RoutesClient", "Delete", nil, "Failure preparing request") @@ -159,15 +178,13 @@ func (client RoutesClient) DeletePreparer(ctx context.Context, resourceGroupName // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client RoutesClient) DeleteSender(req *http.Request) (future RoutesDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -189,6 +206,16 @@ func (client RoutesClient) DeleteResponder(resp *http.Response) (result autorest // routeTableName - the name of the route table. // routeName - the name of the route. func (client RoutesClient) Get(ctx context.Context, resourceGroupName string, routeTableName string, routeName string) (result Route, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RoutesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, routeTableName, routeName) if err != nil { err = autorest.NewErrorWithError(err, "network.RoutesClient", "Get", nil, "Failure preparing request") @@ -235,8 +262,8 @@ func (client RoutesClient) GetPreparer(ctx context.Context, resourceGroupName st // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client RoutesClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -257,6 +284,16 @@ func (client RoutesClient) GetResponder(resp *http.Response) (result Route, err // resourceGroupName - the name of the resource group. // routeTableName - the name of the route table. func (client RoutesClient) List(ctx context.Context, resourceGroupName string, routeTableName string) (result RouteListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RoutesClient.List") + defer func() { + sc := -1 + if result.rlr.Response.Response != nil { + sc = result.rlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName, routeTableName) if err != nil { @@ -303,8 +340,8 @@ func (client RoutesClient) ListPreparer(ctx context.Context, resourceGroupName s // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client RoutesClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -321,8 +358,8 @@ func (client RoutesClient) ListResponder(resp *http.Response) (result RouteListR } // listNextResults retrieves the next set of results, if any. -func (client RoutesClient) listNextResults(lastResults RouteListResult) (result RouteListResult, err error) { - req, err := lastResults.routeListResultPreparer() +func (client RoutesClient) listNextResults(ctx context.Context, lastResults RouteListResult) (result RouteListResult, err error) { + req, err := lastResults.routeListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.RoutesClient", "listNextResults", nil, "Failure preparing next results request") } @@ -343,6 +380,16 @@ func (client RoutesClient) listNextResults(lastResults RouteListResult) (result // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client RoutesClient) ListComplete(ctx context.Context, resourceGroupName string, routeTableName string) (result RouteListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RoutesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName, routeTableName) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/routetables.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/routetables.go index 74097ca5b2e..e4dbd6bbe0f 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/routetables.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/routetables.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -45,6 +46,16 @@ func NewRouteTablesClientWithBaseURI(baseURI string, subscriptionID string) Rout // routeTableName - the name of the route table. // parameters - parameters supplied to the create or update route table operation. func (client RouteTablesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, routeTableName string, parameters RouteTable) (result RouteTablesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTablesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, routeTableName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.RouteTablesClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -86,15 +97,13 @@ func (client RouteTablesClient) CreateOrUpdatePreparer(ctx context.Context, reso // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client RouteTablesClient) CreateOrUpdateSender(req *http.Request) (future RouteTablesCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -116,6 +125,16 @@ func (client RouteTablesClient) CreateOrUpdateResponder(resp *http.Response) (re // resourceGroupName - the name of the resource group. // routeTableName - the name of the route table. func (client RouteTablesClient) Delete(ctx context.Context, resourceGroupName string, routeTableName string) (result RouteTablesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTablesClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, routeTableName) if err != nil { err = autorest.NewErrorWithError(err, "network.RouteTablesClient", "Delete", nil, "Failure preparing request") @@ -155,15 +174,13 @@ func (client RouteTablesClient) DeletePreparer(ctx context.Context, resourceGrou // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client RouteTablesClient) DeleteSender(req *http.Request) (future RouteTablesDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -185,6 +202,16 @@ func (client RouteTablesClient) DeleteResponder(resp *http.Response) (result aut // routeTableName - the name of the route table. // expand - expands referenced resources. func (client RouteTablesClient) Get(ctx context.Context, resourceGroupName string, routeTableName string, expand string) (result RouteTable, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTablesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, routeTableName, expand) if err != nil { err = autorest.NewErrorWithError(err, "network.RouteTablesClient", "Get", nil, "Failure preparing request") @@ -233,8 +260,8 @@ func (client RouteTablesClient) GetPreparer(ctx context.Context, resourceGroupNa // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client RouteTablesClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -254,6 +281,16 @@ func (client RouteTablesClient) GetResponder(resp *http.Response) (result RouteT // Parameters: // resourceGroupName - the name of the resource group. func (client RouteTablesClient) List(ctx context.Context, resourceGroupName string) (result RouteTableListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTablesClient.List") + defer func() { + sc := -1 + if result.rtlr.Response.Response != nil { + sc = result.rtlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -299,8 +336,8 @@ func (client RouteTablesClient) ListPreparer(ctx context.Context, resourceGroupN // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client RouteTablesClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -317,8 +354,8 @@ func (client RouteTablesClient) ListResponder(resp *http.Response) (result Route } // listNextResults retrieves the next set of results, if any. -func (client RouteTablesClient) listNextResults(lastResults RouteTableListResult) (result RouteTableListResult, err error) { - req, err := lastResults.routeTableListResultPreparer() +func (client RouteTablesClient) listNextResults(ctx context.Context, lastResults RouteTableListResult) (result RouteTableListResult, err error) { + req, err := lastResults.routeTableListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.RouteTablesClient", "listNextResults", nil, "Failure preparing next results request") } @@ -339,12 +376,32 @@ func (client RouteTablesClient) listNextResults(lastResults RouteTableListResult // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client RouteTablesClient) ListComplete(ctx context.Context, resourceGroupName string) (result RouteTableListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTablesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } // ListAll gets all route tables in a subscription. func (client RouteTablesClient) ListAll(ctx context.Context) (result RouteTableListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTablesClient.ListAll") + defer func() { + sc := -1 + if result.rtlr.Response.Response != nil { + sc = result.rtlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listAllNextResults req, err := client.ListAllPreparer(ctx) if err != nil { @@ -389,8 +446,8 @@ func (client RouteTablesClient) ListAllPreparer(ctx context.Context) (*http.Requ // ListAllSender sends the ListAll request. The method will close the // http.Response Body if it receives an error. func (client RouteTablesClient) ListAllSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListAllResponder handles the response to the ListAll request. The method always @@ -407,8 +464,8 @@ func (client RouteTablesClient) ListAllResponder(resp *http.Response) (result Ro } // listAllNextResults retrieves the next set of results, if any. -func (client RouteTablesClient) listAllNextResults(lastResults RouteTableListResult) (result RouteTableListResult, err error) { - req, err := lastResults.routeTableListResultPreparer() +func (client RouteTablesClient) listAllNextResults(ctx context.Context, lastResults RouteTableListResult) (result RouteTableListResult, err error) { + req, err := lastResults.routeTableListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.RouteTablesClient", "listAllNextResults", nil, "Failure preparing next results request") } @@ -429,6 +486,16 @@ func (client RouteTablesClient) listAllNextResults(lastResults RouteTableListRes // ListAllComplete enumerates all values, automatically crossing page boundaries as required. func (client RouteTablesClient) ListAllComplete(ctx context.Context) (result RouteTableListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/RouteTablesClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListAll(ctx) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/securitygroups.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/securitygroups.go index 42dd8027568..3cd8cb5a0fe 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/securitygroups.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/securitygroups.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -45,6 +46,16 @@ func NewSecurityGroupsClientWithBaseURI(baseURI string, subscriptionID string) S // networkSecurityGroupName - the name of the network security group. // parameters - parameters supplied to the create or update network security group operation. func (client SecurityGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, parameters SecurityGroup) (result SecurityGroupsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, networkSecurityGroupName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityGroupsClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -86,15 +97,13 @@ func (client SecurityGroupsClient) CreateOrUpdatePreparer(ctx context.Context, r // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client SecurityGroupsClient) CreateOrUpdateSender(req *http.Request) (future SecurityGroupsCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -116,6 +125,16 @@ func (client SecurityGroupsClient) CreateOrUpdateResponder(resp *http.Response) // resourceGroupName - the name of the resource group. // networkSecurityGroupName - the name of the network security group. func (client SecurityGroupsClient) Delete(ctx context.Context, resourceGroupName string, networkSecurityGroupName string) (result SecurityGroupsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupsClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, networkSecurityGroupName) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityGroupsClient", "Delete", nil, "Failure preparing request") @@ -155,15 +174,13 @@ func (client SecurityGroupsClient) DeletePreparer(ctx context.Context, resourceG // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client SecurityGroupsClient) DeleteSender(req *http.Request) (future SecurityGroupsDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -185,6 +202,16 @@ func (client SecurityGroupsClient) DeleteResponder(resp *http.Response) (result // networkSecurityGroupName - the name of the network security group. // expand - expands referenced resources. func (client SecurityGroupsClient) Get(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, expand string) (result SecurityGroup, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, networkSecurityGroupName, expand) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityGroupsClient", "Get", nil, "Failure preparing request") @@ -233,8 +260,8 @@ func (client SecurityGroupsClient) GetPreparer(ctx context.Context, resourceGrou // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client SecurityGroupsClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -254,6 +281,16 @@ func (client SecurityGroupsClient) GetResponder(resp *http.Response) (result Sec // Parameters: // resourceGroupName - the name of the resource group. func (client SecurityGroupsClient) List(ctx context.Context, resourceGroupName string) (result SecurityGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupsClient.List") + defer func() { + sc := -1 + if result.sglr.Response.Response != nil { + sc = result.sglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -299,8 +336,8 @@ func (client SecurityGroupsClient) ListPreparer(ctx context.Context, resourceGro // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client SecurityGroupsClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -317,8 +354,8 @@ func (client SecurityGroupsClient) ListResponder(resp *http.Response) (result Se } // listNextResults retrieves the next set of results, if any. -func (client SecurityGroupsClient) listNextResults(lastResults SecurityGroupListResult) (result SecurityGroupListResult, err error) { - req, err := lastResults.securityGroupListResultPreparer() +func (client SecurityGroupsClient) listNextResults(ctx context.Context, lastResults SecurityGroupListResult) (result SecurityGroupListResult, err error) { + req, err := lastResults.securityGroupListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.SecurityGroupsClient", "listNextResults", nil, "Failure preparing next results request") } @@ -339,12 +376,32 @@ func (client SecurityGroupsClient) listNextResults(lastResults SecurityGroupList // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client SecurityGroupsClient) ListComplete(ctx context.Context, resourceGroupName string) (result SecurityGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } // ListAll gets all network security groups in a subscription. func (client SecurityGroupsClient) ListAll(ctx context.Context) (result SecurityGroupListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupsClient.ListAll") + defer func() { + sc := -1 + if result.sglr.Response.Response != nil { + sc = result.sglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listAllNextResults req, err := client.ListAllPreparer(ctx) if err != nil { @@ -389,8 +446,8 @@ func (client SecurityGroupsClient) ListAllPreparer(ctx context.Context) (*http.R // ListAllSender sends the ListAll request. The method will close the // http.Response Body if it receives an error. func (client SecurityGroupsClient) ListAllSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListAllResponder handles the response to the ListAll request. The method always @@ -407,8 +464,8 @@ func (client SecurityGroupsClient) ListAllResponder(resp *http.Response) (result } // listAllNextResults retrieves the next set of results, if any. -func (client SecurityGroupsClient) listAllNextResults(lastResults SecurityGroupListResult) (result SecurityGroupListResult, err error) { - req, err := lastResults.securityGroupListResultPreparer() +func (client SecurityGroupsClient) listAllNextResults(ctx context.Context, lastResults SecurityGroupListResult) (result SecurityGroupListResult, err error) { + req, err := lastResults.securityGroupListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.SecurityGroupsClient", "listAllNextResults", nil, "Failure preparing next results request") } @@ -429,6 +486,16 @@ func (client SecurityGroupsClient) listAllNextResults(lastResults SecurityGroupL // ListAllComplete enumerates all values, automatically crossing page boundaries as required. func (client SecurityGroupsClient) ListAllComplete(ctx context.Context) (result SecurityGroupListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupsClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListAll(ctx) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/securityrules.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/securityrules.go index 1040fe1a362..a220095940d 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/securityrules.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/securityrules.go @@ -22,6 +22,7 @@ import ( "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -47,6 +48,16 @@ func NewSecurityRulesClientWithBaseURI(baseURI string, subscriptionID string) Se // securityRuleName - the name of the security rule. // securityRuleParameters - parameters supplied to the create or update network security rule operation. func (client SecurityRulesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, securityRuleName string, securityRuleParameters SecurityRule) (result SecurityRulesCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRulesClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } if err := validation.Validate([]validation.Validation{ {TargetValue: securityRuleParameters, Constraints: []validation.Constraint{{Target: "securityRuleParameters.SecurityRulePropertiesFormat", Name: validation.Null, Rule: false, @@ -98,15 +109,13 @@ func (client SecurityRulesClient) CreateOrUpdatePreparer(ctx context.Context, re // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client SecurityRulesClient) CreateOrUpdateSender(req *http.Request) (future SecurityRulesCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -129,6 +138,16 @@ func (client SecurityRulesClient) CreateOrUpdateResponder(resp *http.Response) ( // networkSecurityGroupName - the name of the network security group. // securityRuleName - the name of the security rule. func (client SecurityRulesClient) Delete(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, securityRuleName string) (result SecurityRulesDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRulesClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, networkSecurityGroupName, securityRuleName) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityRulesClient", "Delete", nil, "Failure preparing request") @@ -169,15 +188,13 @@ func (client SecurityRulesClient) DeletePreparer(ctx context.Context, resourceGr // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client SecurityRulesClient) DeleteSender(req *http.Request) (future SecurityRulesDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -199,6 +216,16 @@ func (client SecurityRulesClient) DeleteResponder(resp *http.Response) (result a // networkSecurityGroupName - the name of the network security group. // securityRuleName - the name of the security rule. func (client SecurityRulesClient) Get(ctx context.Context, resourceGroupName string, networkSecurityGroupName string, securityRuleName string) (result SecurityRule, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRulesClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, networkSecurityGroupName, securityRuleName) if err != nil { err = autorest.NewErrorWithError(err, "network.SecurityRulesClient", "Get", nil, "Failure preparing request") @@ -245,8 +272,8 @@ func (client SecurityRulesClient) GetPreparer(ctx context.Context, resourceGroup // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client SecurityRulesClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -267,6 +294,16 @@ func (client SecurityRulesClient) GetResponder(resp *http.Response) (result Secu // resourceGroupName - the name of the resource group. // networkSecurityGroupName - the name of the network security group. func (client SecurityRulesClient) List(ctx context.Context, resourceGroupName string, networkSecurityGroupName string) (result SecurityRuleListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRulesClient.List") + defer func() { + sc := -1 + if result.srlr.Response.Response != nil { + sc = result.srlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName, networkSecurityGroupName) if err != nil { @@ -313,8 +350,8 @@ func (client SecurityRulesClient) ListPreparer(ctx context.Context, resourceGrou // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client SecurityRulesClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -331,8 +368,8 @@ func (client SecurityRulesClient) ListResponder(resp *http.Response) (result Sec } // listNextResults retrieves the next set of results, if any. -func (client SecurityRulesClient) listNextResults(lastResults SecurityRuleListResult) (result SecurityRuleListResult, err error) { - req, err := lastResults.securityRuleListResultPreparer() +func (client SecurityRulesClient) listNextResults(ctx context.Context, lastResults SecurityRuleListResult) (result SecurityRuleListResult, err error) { + req, err := lastResults.securityRuleListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.SecurityRulesClient", "listNextResults", nil, "Failure preparing next results request") } @@ -353,6 +390,16 @@ func (client SecurityRulesClient) listNextResults(lastResults SecurityRuleListRe // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client SecurityRulesClient) ListComplete(ctx context.Context, resourceGroupName string, networkSecurityGroupName string) (result SecurityRuleListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRulesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName, networkSecurityGroupName) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/subnets.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/subnets.go index 886a6512691..c389547c926 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/subnets.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/subnets.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -46,6 +47,16 @@ func NewSubnetsClientWithBaseURI(baseURI string, subscriptionID string) SubnetsC // subnetName - the name of the subnet. // subnetParameters - parameters supplied to the create or update subnet operation. func (client SubnetsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string, subnetParameters Subnet) (result SubnetsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubnetsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, virtualNetworkName, subnetName, subnetParameters) if err != nil { err = autorest.NewErrorWithError(err, "network.SubnetsClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -88,15 +99,13 @@ func (client SubnetsClient) CreateOrUpdatePreparer(ctx context.Context, resource // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client SubnetsClient) CreateOrUpdateSender(req *http.Request) (future SubnetsCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -119,6 +128,16 @@ func (client SubnetsClient) CreateOrUpdateResponder(resp *http.Response) (result // virtualNetworkName - the name of the virtual network. // subnetName - the name of the subnet. func (client SubnetsClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string) (result SubnetsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubnetsClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, virtualNetworkName, subnetName) if err != nil { err = autorest.NewErrorWithError(err, "network.SubnetsClient", "Delete", nil, "Failure preparing request") @@ -159,15 +178,13 @@ func (client SubnetsClient) DeletePreparer(ctx context.Context, resourceGroupNam // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client SubnetsClient) DeleteSender(req *http.Request) (future SubnetsDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -190,6 +207,16 @@ func (client SubnetsClient) DeleteResponder(resp *http.Response) (result autores // subnetName - the name of the subnet. // expand - expands referenced resources. func (client SubnetsClient) Get(ctx context.Context, resourceGroupName string, virtualNetworkName string, subnetName string, expand string) (result Subnet, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubnetsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, virtualNetworkName, subnetName, expand) if err != nil { err = autorest.NewErrorWithError(err, "network.SubnetsClient", "Get", nil, "Failure preparing request") @@ -239,8 +266,8 @@ func (client SubnetsClient) GetPreparer(ctx context.Context, resourceGroupName s // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client SubnetsClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -261,6 +288,16 @@ func (client SubnetsClient) GetResponder(resp *http.Response) (result Subnet, er // resourceGroupName - the name of the resource group. // virtualNetworkName - the name of the virtual network. func (client SubnetsClient) List(ctx context.Context, resourceGroupName string, virtualNetworkName string) (result SubnetListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubnetsClient.List") + defer func() { + sc := -1 + if result.slr.Response.Response != nil { + sc = result.slr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName, virtualNetworkName) if err != nil { @@ -307,8 +344,8 @@ func (client SubnetsClient) ListPreparer(ctx context.Context, resourceGroupName // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client SubnetsClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -325,8 +362,8 @@ func (client SubnetsClient) ListResponder(resp *http.Response) (result SubnetLis } // listNextResults retrieves the next set of results, if any. -func (client SubnetsClient) listNextResults(lastResults SubnetListResult) (result SubnetListResult, err error) { - req, err := lastResults.subnetListResultPreparer() +func (client SubnetsClient) listNextResults(ctx context.Context, lastResults SubnetListResult) (result SubnetListResult, err error) { + req, err := lastResults.subnetListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.SubnetsClient", "listNextResults", nil, "Failure preparing next results request") } @@ -347,6 +384,16 @@ func (client SubnetsClient) listNextResults(lastResults SubnetListResult) (resul // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client SubnetsClient) ListComplete(ctx context.Context, resourceGroupName string, virtualNetworkName string) (result SubnetListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/SubnetsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName, virtualNetworkName) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/usages.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/usages.go index 0bbb27bbc85..f3de0561d2c 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/usages.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/usages.go @@ -22,6 +22,7 @@ import ( "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -44,6 +45,16 @@ func NewUsagesClientWithBaseURI(baseURI string, subscriptionID string) UsagesCli // Parameters: // location - the location where resource usage is queried. func (client UsagesClient) List(ctx context.Context, location string) (result UsagesListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsagesClient.List") + defer func() { + sc := -1 + if result.ulr.Response.Response != nil { + sc = result.ulr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } if err := validation.Validate([]validation.Validation{ {TargetValue: location, Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil { @@ -95,8 +106,8 @@ func (client UsagesClient) ListPreparer(ctx context.Context, location string) (* // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client UsagesClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -113,8 +124,8 @@ func (client UsagesClient) ListResponder(resp *http.Response) (result UsagesList } // listNextResults retrieves the next set of results, if any. -func (client UsagesClient) listNextResults(lastResults UsagesListResult) (result UsagesListResult, err error) { - req, err := lastResults.usagesListResultPreparer() +func (client UsagesClient) listNextResults(ctx context.Context, lastResults UsagesListResult) (result UsagesListResult, err error) { + req, err := lastResults.usagesListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.UsagesClient", "listNextResults", nil, "Failure preparing next results request") } @@ -135,6 +146,16 @@ func (client UsagesClient) listNextResults(lastResults UsagesListResult) (result // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client UsagesClient) ListComplete(ctx context.Context, location string) (result UsagesListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsagesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, location) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworkgatewayconnections.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworkgatewayconnections.go index 67456bf5295..1c7f86a58e3 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworkgatewayconnections.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworkgatewayconnections.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -46,6 +47,16 @@ func NewVirtualNetworkGatewayConnectionsClientWithBaseURI(baseURI string, subscr // virtualNetworkGatewayConnectionName - the name of the virtual network gateway connection. // parameters - parameters supplied to the create or update virtual network gateway connection operation. func (client VirtualNetworkGatewayConnectionsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters VirtualNetworkGatewayConnection) (result VirtualNetworkGatewayConnectionsCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -87,15 +98,13 @@ func (client VirtualNetworkGatewayConnectionsClient) CreateOrUpdatePreparer(ctx // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewayConnectionsClient) CreateOrUpdateSender(req *http.Request) (future VirtualNetworkGatewayConnectionsCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -117,6 +126,16 @@ func (client VirtualNetworkGatewayConnectionsClient) CreateOrUpdateResponder(res // resourceGroupName - the name of the resource group. // virtualNetworkGatewayConnectionName - the name of the virtual network gateway connection. func (client VirtualNetworkGatewayConnectionsClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string) (result VirtualNetworkGatewayConnectionsDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionsClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsClient", "Delete", nil, "Failure preparing request") @@ -156,15 +175,13 @@ func (client VirtualNetworkGatewayConnectionsClient) DeletePreparer(ctx context. // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewayConnectionsClient) DeleteSender(req *http.Request) (future VirtualNetworkGatewayConnectionsDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -185,6 +202,16 @@ func (client VirtualNetworkGatewayConnectionsClient) DeleteResponder(resp *http. // resourceGroupName - the name of the resource group. // virtualNetworkGatewayConnectionName - the name of the virtual network gateway connection. func (client VirtualNetworkGatewayConnectionsClient) Get(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string) (result VirtualNetworkGatewayConnection, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsClient", "Get", nil, "Failure preparing request") @@ -230,8 +257,8 @@ func (client VirtualNetworkGatewayConnectionsClient) GetPreparer(ctx context.Con // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewayConnectionsClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -251,9 +278,19 @@ func (client VirtualNetworkGatewayConnectionsClient) GetResponder(resp *http.Res // virtual network gateway connection shared key through Network resource provider. // Parameters: // resourceGroupName - the name of the resource group. -// connectionSharedKeyName - the virtual network gateway connection shared key name. -func (client VirtualNetworkGatewayConnectionsClient) GetSharedKey(ctx context.Context, resourceGroupName string, connectionSharedKeyName string) (result ConnectionSharedKeyResult, err error) { - req, err := client.GetSharedKeyPreparer(ctx, resourceGroupName, connectionSharedKeyName) +// virtualNetworkGatewayConnectionName - the virtual network gateway connection shared key name. +func (client VirtualNetworkGatewayConnectionsClient) GetSharedKey(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string) (result ConnectionSharedKeyResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionsClient.GetSharedKey") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetSharedKeyPreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsClient", "GetSharedKey", nil, "Failure preparing request") return @@ -275,11 +312,11 @@ func (client VirtualNetworkGatewayConnectionsClient) GetSharedKey(ctx context.Co } // GetSharedKeyPreparer prepares the GetSharedKey request. -func (client VirtualNetworkGatewayConnectionsClient) GetSharedKeyPreparer(ctx context.Context, resourceGroupName string, connectionSharedKeyName string) (*http.Request, error) { +func (client VirtualNetworkGatewayConnectionsClient) GetSharedKeyPreparer(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string) (*http.Request, error) { pathParameters := map[string]interface{}{ - "connectionSharedKeyName": autorest.Encode("path", connectionSharedKeyName), - "resourceGroupName": autorest.Encode("path", resourceGroupName), - "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "resourceGroupName": autorest.Encode("path", resourceGroupName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + "virtualNetworkGatewayConnectionName": autorest.Encode("path", virtualNetworkGatewayConnectionName), } const APIVersion = "2015-06-15" @@ -290,7 +327,7 @@ func (client VirtualNetworkGatewayConnectionsClient) GetSharedKeyPreparer(ctx co preparer := autorest.CreatePreparer( autorest.AsGet(), autorest.WithBaseURL(client.BaseURI), - autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/connections/{connectionSharedKeyName}/sharedkey", pathParameters), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/connections/{virtualNetworkGatewayConnectionName}/sharedkey", pathParameters), autorest.WithQueryParameters(queryParameters)) return preparer.Prepare((&http.Request{}).WithContext(ctx)) } @@ -298,8 +335,8 @@ func (client VirtualNetworkGatewayConnectionsClient) GetSharedKeyPreparer(ctx co // GetSharedKeySender sends the GetSharedKey request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewayConnectionsClient) GetSharedKeySender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetSharedKeyResponder handles the response to the GetSharedKey request. The method always @@ -320,6 +357,16 @@ func (client VirtualNetworkGatewayConnectionsClient) GetSharedKeyResponder(resp // Parameters: // resourceGroupName - the name of the resource group. func (client VirtualNetworkGatewayConnectionsClient) List(ctx context.Context, resourceGroupName string) (result VirtualNetworkGatewayConnectionListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionsClient.List") + defer func() { + sc := -1 + if result.vngclr.Response.Response != nil { + sc = result.vngclr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -365,8 +412,8 @@ func (client VirtualNetworkGatewayConnectionsClient) ListPreparer(ctx context.Co // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewayConnectionsClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -383,8 +430,8 @@ func (client VirtualNetworkGatewayConnectionsClient) ListResponder(resp *http.Re } // listNextResults retrieves the next set of results, if any. -func (client VirtualNetworkGatewayConnectionsClient) listNextResults(lastResults VirtualNetworkGatewayConnectionListResult) (result VirtualNetworkGatewayConnectionListResult, err error) { - req, err := lastResults.virtualNetworkGatewayConnectionListResultPreparer() +func (client VirtualNetworkGatewayConnectionsClient) listNextResults(ctx context.Context, lastResults VirtualNetworkGatewayConnectionListResult) (result VirtualNetworkGatewayConnectionListResult, err error) { + req, err := lastResults.virtualNetworkGatewayConnectionListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsClient", "listNextResults", nil, "Failure preparing next results request") } @@ -405,6 +452,16 @@ func (client VirtualNetworkGatewayConnectionsClient) listNextResults(lastResults // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client VirtualNetworkGatewayConnectionsClient) ListComplete(ctx context.Context, resourceGroupName string) (result VirtualNetworkGatewayConnectionListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } @@ -418,6 +475,16 @@ func (client VirtualNetworkGatewayConnectionsClient) ListComplete(ctx context.Co // parameters - parameters supplied to the begin reset virtual network gateway connection shared key operation // through network resource provider. func (client VirtualNetworkGatewayConnectionsClient) ResetSharedKey(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters ConnectionResetSharedKey) (result VirtualNetworkGatewayConnectionsResetSharedKeyFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionsClient.ResetSharedKey") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.ResetSharedKeyPreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsClient", "ResetSharedKey", nil, "Failure preparing request") @@ -459,15 +526,13 @@ func (client VirtualNetworkGatewayConnectionsClient) ResetSharedKeyPreparer(ctx // ResetSharedKeySender sends the ResetSharedKey request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewayConnectionsClient) ResetSharedKeySender(req *http.Request) (future VirtualNetworkGatewayConnectionsResetSharedKeyFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -490,9 +555,19 @@ func (client VirtualNetworkGatewayConnectionsClient) ResetSharedKeyResponder(res // Parameters: // resourceGroupName - the name of the resource group. // virtualNetworkGatewayConnectionName - the virtual network gateway connection name. -// parameters - parameters supplied to the Begin Set Virtual Network Gateway conection Shared key operation +// parameters - parameters supplied to the Begin Set Virtual Network Gateway connection Shared key operation // throughNetwork resource provider. func (client VirtualNetworkGatewayConnectionsClient) SetSharedKey(ctx context.Context, resourceGroupName string, virtualNetworkGatewayConnectionName string, parameters ConnectionSharedKey) (result VirtualNetworkGatewayConnectionsSetSharedKeyFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionsClient.SetSharedKey") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.SetSharedKeyPreparer(ctx, resourceGroupName, virtualNetworkGatewayConnectionName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsClient", "SetSharedKey", nil, "Failure preparing request") @@ -534,15 +609,13 @@ func (client VirtualNetworkGatewayConnectionsClient) SetSharedKeyPreparer(ctx co // SetSharedKeySender sends the SetSharedKey request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewayConnectionsClient) SetSharedKeySender(req *http.Request) (future VirtualNetworkGatewayConnectionsSetSharedKeyFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworkgateways.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworkgateways.go index 191c7e675aa..5498c9bf8ec 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworkgateways.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworkgateways.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -45,6 +46,16 @@ func NewVirtualNetworkGatewaysClientWithBaseURI(baseURI string, subscriptionID s // virtualNetworkGatewayName - the name of the virtual network gateway. // parameters - parameters supplied to create or update virtual network gateway operation. func (client VirtualNetworkGatewaysClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VirtualNetworkGateway) (result VirtualNetworkGatewaysCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -86,15 +97,13 @@ func (client VirtualNetworkGatewaysClient) CreateOrUpdatePreparer(ctx context.Co // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewaysClient) CreateOrUpdateSender(req *http.Request) (future VirtualNetworkGatewaysCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -116,6 +125,16 @@ func (client VirtualNetworkGatewaysClient) CreateOrUpdateResponder(resp *http.Re // resourceGroupName - the name of the resource group. // virtualNetworkGatewayName - the name of the virtual network gateway. func (client VirtualNetworkGatewaysClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGatewaysDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, virtualNetworkGatewayName) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Delete", nil, "Failure preparing request") @@ -155,15 +174,13 @@ func (client VirtualNetworkGatewaysClient) DeletePreparer(ctx context.Context, r // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewaysClient) DeleteSender(req *http.Request) (future VirtualNetworkGatewaysDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -185,25 +202,29 @@ func (client VirtualNetworkGatewaysClient) DeleteResponder(resp *http.Response) // resourceGroupName - the name of the resource group. // virtualNetworkGatewayName - the name of the virtual network gateway. // parameters - parameters supplied to the generate virtual network gateway VPN client package operation. -func (client VirtualNetworkGatewaysClient) Generatevpnclientpackage(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (result String, err error) { +func (client VirtualNetworkGatewaysClient) Generatevpnclientpackage(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VpnClientParameters) (result VirtualNetworkGatewaysGeneratevpnclientpackageFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Generatevpnclientpackage") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GeneratevpnclientpackagePreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Generatevpnclientpackage", nil, "Failure preparing request") return } - resp, err := client.GeneratevpnclientpackageSender(req) + result, err = client.GeneratevpnclientpackageSender(req) if err != nil { - result.Response = autorest.Response{Response: resp} - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Generatevpnclientpackage", resp, "Failure sending request") + err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Generatevpnclientpackage", result.Response(), "Failure sending request") return } - result, err = client.GeneratevpnclientpackageResponder(resp) - if err != nil { - err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Generatevpnclientpackage", resp, "Failure responding to request") - } - return } @@ -232,9 +253,15 @@ func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackagePreparer(ctx // GeneratevpnclientpackageSender sends the Generatevpnclientpackage request. The method will close the // http.Response Body if it receives an error. -func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackageSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) +func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackageSender(req *http.Request) (future VirtualNetworkGatewaysGeneratevpnclientpackageFuture, err error) { + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) + if err != nil { + return + } + future.Future, err = azure.NewFutureFromResponse(resp) + return } // GeneratevpnclientpackageResponder handles the response to the Generatevpnclientpackage request. The method always @@ -244,7 +271,7 @@ func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackageResponder(res resp, client.ByInspecting(), azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted), - autorest.ByUnmarshallingJSON(&result.Value), + autorest.ByUnmarshallingJSON(&result), autorest.ByClosing()) result.Response = autorest.Response{Response: resp} return @@ -255,6 +282,16 @@ func (client VirtualNetworkGatewaysClient) GeneratevpnclientpackageResponder(res // resourceGroupName - the name of the resource group. // virtualNetworkGatewayName - the name of the virtual network gateway. func (client VirtualNetworkGatewaysClient) Get(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string) (result VirtualNetworkGateway, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, virtualNetworkGatewayName) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Get", nil, "Failure preparing request") @@ -300,8 +337,8 @@ func (client VirtualNetworkGatewaysClient) GetPreparer(ctx context.Context, reso // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewaysClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -321,6 +358,16 @@ func (client VirtualNetworkGatewaysClient) GetResponder(resp *http.Response) (re // Parameters: // resourceGroupName - the name of the resource group. func (client VirtualNetworkGatewaysClient) List(ctx context.Context, resourceGroupName string) (result VirtualNetworkGatewayListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.List") + defer func() { + sc := -1 + if result.vnglr.Response.Response != nil { + sc = result.vnglr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -366,8 +413,8 @@ func (client VirtualNetworkGatewaysClient) ListPreparer(ctx context.Context, res // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewaysClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -384,8 +431,8 @@ func (client VirtualNetworkGatewaysClient) ListResponder(resp *http.Response) (r } // listNextResults retrieves the next set of results, if any. -func (client VirtualNetworkGatewaysClient) listNextResults(lastResults VirtualNetworkGatewayListResult) (result VirtualNetworkGatewayListResult, err error) { - req, err := lastResults.virtualNetworkGatewayListResultPreparer() +func (client VirtualNetworkGatewaysClient) listNextResults(ctx context.Context, lastResults VirtualNetworkGatewayListResult) (result VirtualNetworkGatewayListResult, err error) { + req, err := lastResults.virtualNetworkGatewayListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "listNextResults", nil, "Failure preparing next results request") } @@ -406,6 +453,16 @@ func (client VirtualNetworkGatewaysClient) listNextResults(lastResults VirtualNe // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client VirtualNetworkGatewaysClient) ListComplete(ctx context.Context, resourceGroupName string) (result VirtualNetworkGatewayListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } @@ -417,6 +474,16 @@ func (client VirtualNetworkGatewaysClient) ListComplete(ctx context.Context, res // parameters - virtual network gateway vip address supplied to the begin reset of the active-active feature // enabled gateway. func (client VirtualNetworkGatewaysClient) Reset(ctx context.Context, resourceGroupName string, virtualNetworkGatewayName string, parameters VirtualNetworkGateway) (result VirtualNetworkGatewaysResetFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewaysClient.Reset") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.ResetPreparer(ctx, resourceGroupName, virtualNetworkGatewayName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysClient", "Reset", nil, "Failure preparing request") @@ -458,15 +525,13 @@ func (client VirtualNetworkGatewaysClient) ResetPreparer(ctx context.Context, re // ResetSender sends the Reset request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworkGatewaysClient) ResetSender(req *http.Request) (future VirtualNetworkGatewaysResetFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted)) + future.Future, err = azure.NewFutureFromResponse(resp) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworks.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworks.go index 0ad02f2a0ba..b5e5b0206cf 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworks.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network/virtualnetworks.go @@ -21,6 +21,7 @@ import ( "context" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" "net/http" ) @@ -45,6 +46,16 @@ func NewVirtualNetworksClientWithBaseURI(baseURI string, subscriptionID string) // virtualNetworkName - the name of the virtual network. // parameters - parameters supplied to the create or update virtual network operation func (client VirtualNetworksClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, virtualNetworkName string, parameters VirtualNetwork) (result VirtualNetworksCreateOrUpdateFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, virtualNetworkName, parameters) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "CreateOrUpdate", nil, "Failure preparing request") @@ -86,15 +97,13 @@ func (client VirtualNetworksClient) CreateOrUpdatePreparer(ctx context.Context, // CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworksClient) CreateOrUpdateSender(req *http.Request) (future VirtualNetworksCreateOrUpdateFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -116,6 +125,16 @@ func (client VirtualNetworksClient) CreateOrUpdateResponder(resp *http.Response) // resourceGroupName - the name of the resource group. // virtualNetworkName - the name of the virtual network. func (client VirtualNetworksClient) Delete(ctx context.Context, resourceGroupName string, virtualNetworkName string) (result VirtualNetworksDeleteFuture, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.Delete") + defer func() { + sc := -1 + if result.Response() != nil { + sc = result.Response().StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.DeletePreparer(ctx, resourceGroupName, virtualNetworkName) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "Delete", nil, "Failure preparing request") @@ -155,15 +174,13 @@ func (client VirtualNetworksClient) DeletePreparer(ctx context.Context, resource // DeleteSender sends the Delete request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworksClient) DeleteSender(req *http.Request) (future VirtualNetworksDeleteFuture, err error) { - sender := autorest.DecorateSender(client, azure.DoRetryWithRegistration(client.Client)) - future.Future = azure.NewFuture(req) - future.req = req - _, err = future.Done(sender) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + var resp *http.Response + resp, err = autorest.SendWithSender(client, req, sd...) if err != nil { return } - err = autorest.Respond(future.Response(), - azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent)) + future.Future, err = azure.NewFutureFromResponse(resp) return } @@ -185,6 +202,16 @@ func (client VirtualNetworksClient) DeleteResponder(resp *http.Response) (result // virtualNetworkName - the name of the virtual network. // expand - expands referenced resources. func (client VirtualNetworksClient) Get(ctx context.Context, resourceGroupName string, virtualNetworkName string, expand string) (result VirtualNetwork, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } req, err := client.GetPreparer(ctx, resourceGroupName, virtualNetworkName, expand) if err != nil { err = autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "Get", nil, "Failure preparing request") @@ -233,8 +260,8 @@ func (client VirtualNetworksClient) GetPreparer(ctx context.Context, resourceGro // GetSender sends the Get request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworksClient) GetSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // GetResponder handles the response to the Get request. The method always @@ -254,6 +281,16 @@ func (client VirtualNetworksClient) GetResponder(resp *http.Response) (result Vi // Parameters: // resourceGroupName - the name of the resource group. func (client VirtualNetworksClient) List(ctx context.Context, resourceGroupName string) (result VirtualNetworkListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.List") + defer func() { + sc := -1 + if result.vnlr.Response.Response != nil { + sc = result.vnlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listNextResults req, err := client.ListPreparer(ctx, resourceGroupName) if err != nil { @@ -299,8 +336,8 @@ func (client VirtualNetworksClient) ListPreparer(ctx context.Context, resourceGr // ListSender sends the List request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworksClient) ListSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListResponder handles the response to the List request. The method always @@ -317,8 +354,8 @@ func (client VirtualNetworksClient) ListResponder(resp *http.Response) (result V } // listNextResults retrieves the next set of results, if any. -func (client VirtualNetworksClient) listNextResults(lastResults VirtualNetworkListResult) (result VirtualNetworkListResult, err error) { - req, err := lastResults.virtualNetworkListResultPreparer() +func (client VirtualNetworksClient) listNextResults(ctx context.Context, lastResults VirtualNetworkListResult) (result VirtualNetworkListResult, err error) { + req, err := lastResults.virtualNetworkListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "listNextResults", nil, "Failure preparing next results request") } @@ -339,12 +376,32 @@ func (client VirtualNetworksClient) listNextResults(lastResults VirtualNetworkLi // ListComplete enumerates all values, automatically crossing page boundaries as required. func (client VirtualNetworksClient) ListComplete(ctx context.Context, resourceGroupName string) (result VirtualNetworkListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.List(ctx, resourceGroupName) return } // ListAll gets all virtual networks in a subscription. func (client VirtualNetworksClient) ListAll(ctx context.Context) (result VirtualNetworkListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.ListAll") + defer func() { + sc := -1 + if result.vnlr.Response.Response != nil { + sc = result.vnlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.fn = client.listAllNextResults req, err := client.ListAllPreparer(ctx) if err != nil { @@ -389,8 +446,8 @@ func (client VirtualNetworksClient) ListAllPreparer(ctx context.Context) (*http. // ListAllSender sends the ListAll request. The method will close the // http.Response Body if it receives an error. func (client VirtualNetworksClient) ListAllSender(req *http.Request) (*http.Response, error) { - return autorest.SendWithSender(client, req, - azure.DoRetryWithRegistration(client.Client)) + sd := autorest.GetSendDecorators(req.Context(), azure.DoRetryWithRegistration(client.Client)) + return autorest.SendWithSender(client, req, sd...) } // ListAllResponder handles the response to the ListAll request. The method always @@ -407,8 +464,8 @@ func (client VirtualNetworksClient) ListAllResponder(resp *http.Response) (resul } // listAllNextResults retrieves the next set of results, if any. -func (client VirtualNetworksClient) listAllNextResults(lastResults VirtualNetworkListResult) (result VirtualNetworkListResult, err error) { - req, err := lastResults.virtualNetworkListResultPreparer() +func (client VirtualNetworksClient) listAllNextResults(ctx context.Context, lastResults VirtualNetworkListResult) (result VirtualNetworkListResult, err error) { + req, err := lastResults.virtualNetworkListResultPreparer(ctx) if err != nil { return result, autorest.NewErrorWithError(err, "network.VirtualNetworksClient", "listAllNextResults", nil, "Failure preparing next results request") } @@ -429,6 +486,16 @@ func (client VirtualNetworksClient) listAllNextResults(lastResults VirtualNetwor // ListAllComplete enumerates all values, automatically crossing page boundaries as required. func (client VirtualNetworksClient) ListAllComplete(ctx context.Context) (result VirtualNetworkListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworksClient.ListAll") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } result.page, err = client.ListAll(ctx) return } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/version/version.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/version/version.go index 505f6982bfb..073281bb853 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/version/version.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/azure-sdk-for-go/version/version.go @@ -18,4 +18,4 @@ package version // Changes may cause incorrect behavior and will be lost if the code is regenerated. // Number contains the semantic version of this SDK. -const Number = "v16.0.0" +const Number = "v36.2.0" diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/README.md b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/README.md index 7b0c4bc4d21..fec416a9c41 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/README.md +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/README.md @@ -135,7 +135,7 @@ resource := "https://management.core.windows.net/" applicationSecret := "APPLICATION_SECRET" spt, err := adal.NewServicePrincipalToken( - oauthConfig, + *oauthConfig, appliationID, applicationSecret, resource, @@ -170,7 +170,7 @@ if err != nil { } spt, err := adal.NewServicePrincipalTokenFromCertificate( - oauthConfig, + *oauthConfig, applicationID, certificate, rsaPrivateKey, @@ -195,7 +195,7 @@ oauthClient := &http.Client{} // Acquire the device code deviceCode, err := adal.InitiateDeviceAuth( oauthClient, - oauthConfig, + *oauthConfig, applicationID, resource) if err != nil { @@ -212,7 +212,7 @@ if err != nil { } spt, err := adal.NewServicePrincipalTokenFromManualToken( - oauthConfig, + *oauthConfig, applicationID, resource, *token, @@ -227,7 +227,7 @@ if (err == nil) { ```Go spt, err := adal.NewServicePrincipalTokenFromUsernamePassword( - oauthConfig, + *oauthConfig, applicationID, username, password, @@ -243,11 +243,11 @@ if (err == nil) { ``` Go spt, err := adal.NewServicePrincipalTokenFromAuthorizationCode( - oauthConfig, + *oauthConfig, applicationID, clientSecret, - authorizationCode, - redirectURI, + authorizationCode, + redirectURI, resource, callbacks...) diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/config.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/config.go index f570d540a62..fa5964742fc 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/config.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/config.go @@ -15,21 +15,22 @@ package adal // limitations under the License. import ( + "errors" "fmt" "net/url" ) const ( - activeDirectoryAPIVersion = "1.0" + activeDirectoryEndpointTemplate = "%s/oauth2/%s%s" ) // OAuthConfig represents the endpoints needed // in OAuth operations type OAuthConfig struct { - AuthorityEndpoint url.URL - AuthorizeEndpoint url.URL - TokenEndpoint url.URL - DeviceCodeEndpoint url.URL + AuthorityEndpoint url.URL `json:"authorityEndpoint"` + AuthorizeEndpoint url.URL `json:"authorizeEndpoint"` + TokenEndpoint url.URL `json:"tokenEndpoint"` + DeviceCodeEndpoint url.URL `json:"deviceCodeEndpoint"` } // IsZero returns true if the OAuthConfig object is zero-initialized. @@ -46,11 +47,24 @@ func validateStringParam(param, name string) error { // NewOAuthConfig returns an OAuthConfig with tenant specific urls func NewOAuthConfig(activeDirectoryEndpoint, tenantID string) (*OAuthConfig, error) { + apiVer := "1.0" + return NewOAuthConfigWithAPIVersion(activeDirectoryEndpoint, tenantID, &apiVer) +} + +// NewOAuthConfigWithAPIVersion returns an OAuthConfig with tenant specific urls. +// If apiVersion is not nil the "api-version" query parameter will be appended to the endpoint URLs with the specified value. +func NewOAuthConfigWithAPIVersion(activeDirectoryEndpoint, tenantID string, apiVersion *string) (*OAuthConfig, error) { if err := validateStringParam(activeDirectoryEndpoint, "activeDirectoryEndpoint"); err != nil { return nil, err } + api := "" // it's legal for tenantID to be empty so don't validate it - const activeDirectoryEndpointTemplate = "%s/oauth2/%s?api-version=%s" + if apiVersion != nil { + if err := validateStringParam(*apiVersion, "apiVersion"); err != nil { + return nil, err + } + api = fmt.Sprintf("?api-version=%s", *apiVersion) + } u, err := url.Parse(activeDirectoryEndpoint) if err != nil { return nil, err @@ -59,15 +73,15 @@ func NewOAuthConfig(activeDirectoryEndpoint, tenantID string) (*OAuthConfig, err if err != nil { return nil, err } - authorizeURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "authorize", activeDirectoryAPIVersion)) + authorizeURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "authorize", api)) if err != nil { return nil, err } - tokenURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "token", activeDirectoryAPIVersion)) + tokenURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "token", api)) if err != nil { return nil, err } - deviceCodeURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "devicecode", activeDirectoryAPIVersion)) + deviceCodeURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "devicecode", api)) if err != nil { return nil, err } @@ -79,3 +93,59 @@ func NewOAuthConfig(activeDirectoryEndpoint, tenantID string) (*OAuthConfig, err DeviceCodeEndpoint: *deviceCodeURL, }, nil } + +// MultiTenantOAuthConfig provides endpoints for primary and aulixiary tenant IDs. +type MultiTenantOAuthConfig interface { + PrimaryTenant() *OAuthConfig + AuxiliaryTenants() []*OAuthConfig +} + +// OAuthOptions contains optional OAuthConfig creation arguments. +type OAuthOptions struct { + APIVersion string +} + +func (c OAuthOptions) apiVersion() string { + if c.APIVersion != "" { + return fmt.Sprintf("?api-version=%s", c.APIVersion) + } + return "1.0" +} + +// NewMultiTenantOAuthConfig creates an object that support multitenant OAuth configuration. +// See https://docs.microsoft.com/en-us/azure/azure-resource-manager/authenticate-multi-tenant for more information. +func NewMultiTenantOAuthConfig(activeDirectoryEndpoint, primaryTenantID string, auxiliaryTenantIDs []string, options OAuthOptions) (MultiTenantOAuthConfig, error) { + if len(auxiliaryTenantIDs) == 0 || len(auxiliaryTenantIDs) > 3 { + return nil, errors.New("must specify one to three auxiliary tenants") + } + mtCfg := multiTenantOAuthConfig{ + cfgs: make([]*OAuthConfig, len(auxiliaryTenantIDs)+1), + } + apiVer := options.apiVersion() + pri, err := NewOAuthConfigWithAPIVersion(activeDirectoryEndpoint, primaryTenantID, &apiVer) + if err != nil { + return nil, fmt.Errorf("failed to create OAuthConfig for primary tenant: %v", err) + } + mtCfg.cfgs[0] = pri + for i := range auxiliaryTenantIDs { + aux, err := NewOAuthConfig(activeDirectoryEndpoint, auxiliaryTenantIDs[i]) + if err != nil { + return nil, fmt.Errorf("failed to create OAuthConfig for tenant '%s': %v", auxiliaryTenantIDs[i], err) + } + mtCfg.cfgs[i+1] = aux + } + return mtCfg, nil +} + +type multiTenantOAuthConfig struct { + // first config in the slice is the primary tenant + cfgs []*OAuthConfig +} + +func (m multiTenantOAuthConfig) PrimaryTenant() *OAuthConfig { + return m.cfgs[0] +} + +func (m multiTenantOAuthConfig) AuxiliaryTenants() []*OAuthConfig { + return m.cfgs[1:] +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/devicetoken.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/devicetoken.go index b38f4c24589..914f8af5e4e 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/devicetoken.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/devicetoken.go @@ -24,6 +24,7 @@ package adal */ import ( + "context" "encoding/json" "fmt" "io/ioutil" @@ -101,7 +102,14 @@ type deviceToken struct { // InitiateDeviceAuth initiates a device auth flow. It returns a DeviceCode // that can be used with CheckForUserCompletion or WaitForUserCompletion. +// Deprecated: use InitiateDeviceAuthWithContext() instead. func InitiateDeviceAuth(sender Sender, oauthConfig OAuthConfig, clientID, resource string) (*DeviceCode, error) { + return InitiateDeviceAuthWithContext(context.Background(), sender, oauthConfig, clientID, resource) +} + +// InitiateDeviceAuthWithContext initiates a device auth flow. It returns a DeviceCode +// that can be used with CheckForUserCompletion or WaitForUserCompletion. +func InitiateDeviceAuthWithContext(ctx context.Context, sender Sender, oauthConfig OAuthConfig, clientID, resource string) (*DeviceCode, error) { v := url.Values{ "client_id": []string{clientID}, "resource": []string{resource}, @@ -117,7 +125,7 @@ func InitiateDeviceAuth(sender Sender, oauthConfig OAuthConfig, clientID, resour req.ContentLength = int64(len(s)) req.Header.Set(contentType, mimeTypeFormPost) - resp, err := sender.Do(req) + resp, err := sender.Do(req.WithContext(ctx)) if err != nil { return nil, fmt.Errorf("%s %s: %s", logPrefix, errCodeSendingFails, err.Error()) } @@ -151,7 +159,14 @@ func InitiateDeviceAuth(sender Sender, oauthConfig OAuthConfig, clientID, resour // CheckForUserCompletion takes a DeviceCode and checks with the Azure AD OAuth endpoint // to see if the device flow has: been completed, timed out, or otherwise failed +// Deprecated: use CheckForUserCompletionWithContext() instead. func CheckForUserCompletion(sender Sender, code *DeviceCode) (*Token, error) { + return CheckForUserCompletionWithContext(context.Background(), sender, code) +} + +// CheckForUserCompletionWithContext takes a DeviceCode and checks with the Azure AD OAuth endpoint +// to see if the device flow has: been completed, timed out, or otherwise failed +func CheckForUserCompletionWithContext(ctx context.Context, sender Sender, code *DeviceCode) (*Token, error) { v := url.Values{ "client_id": []string{code.ClientID}, "code": []string{*code.DeviceCode}, @@ -169,7 +184,7 @@ func CheckForUserCompletion(sender Sender, code *DeviceCode) (*Token, error) { req.ContentLength = int64(len(s)) req.Header.Set(contentType, mimeTypeFormPost) - resp, err := sender.Do(req) + resp, err := sender.Do(req.WithContext(ctx)) if err != nil { return nil, fmt.Errorf("%s %s: %s", logPrefix, errTokenSendingFails, err.Error()) } @@ -213,12 +228,19 @@ func CheckForUserCompletion(sender Sender, code *DeviceCode) (*Token, error) { // WaitForUserCompletion calls CheckForUserCompletion repeatedly until a token is granted or an error state occurs. // This prevents the user from looping and checking against 'ErrDeviceAuthorizationPending'. +// Deprecated: use WaitForUserCompletionWithContext() instead. func WaitForUserCompletion(sender Sender, code *DeviceCode) (*Token, error) { + return WaitForUserCompletionWithContext(context.Background(), sender, code) +} + +// WaitForUserCompletionWithContext calls CheckForUserCompletion repeatedly until a token is granted or an error +// state occurs. This prevents the user from looping and checking against 'ErrDeviceAuthorizationPending'. +func WaitForUserCompletionWithContext(ctx context.Context, sender Sender, code *DeviceCode) (*Token, error) { intervalDuration := time.Duration(*code.Interval) * time.Second waitDuration := intervalDuration for { - token, err := CheckForUserCompletion(sender, code) + token, err := CheckForUserCompletionWithContext(ctx, sender, code) if err == nil { return token, nil @@ -237,6 +259,11 @@ func WaitForUserCompletion(sender Sender, code *DeviceCode) (*Token, error) { return nil, fmt.Errorf("%s Error waiting for user to complete device flow. Server told us to slow_down too much", logPrefix) } - time.Sleep(waitDuration) + select { + case <-time.After(waitDuration): + // noop + case <-ctx.Done(): + return nil, ctx.Err() + } } } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go.mod new file mode 100644 index 00000000000..fdc5b90ca5c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go.mod @@ -0,0 +1,12 @@ +module github.com/Azure/go-autorest/autorest/adal + +go 1.12 + +require ( + github.com/Azure/go-autorest/autorest v0.9.0 + github.com/Azure/go-autorest/autorest/date v0.2.0 + github.com/Azure/go-autorest/autorest/mocks v0.3.0 + github.com/Azure/go-autorest/tracing v0.5.0 + github.com/dgrijalva/jwt-go v3.2.0+incompatible + golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go.sum b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go.sum new file mode 100644 index 00000000000..f0a018563b5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go.sum @@ -0,0 +1,23 @@ +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go_mod_tidy_hack.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go_mod_tidy_hack.go new file mode 100644 index 00000000000..28a4bfc4c43 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/go_mod_tidy_hack.go @@ -0,0 +1,24 @@ +// +build modhack + +package adal + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of +// the resultant binary. + +// Necessary for safely adding multi-module repo. +// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository +import _ "github.com/Azure/go-autorest/autorest" diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/sender.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/sender.go index 0e5ad14d396..d7e4372bbc5 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/sender.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/sender.go @@ -15,7 +15,12 @@ package adal // limitations under the License. import ( + "crypto/tls" "net/http" + "net/http/cookiejar" + "sync" + + "github.com/Azure/go-autorest/tracing" ) const ( @@ -23,6 +28,9 @@ const ( mimeTypeFormPost = "application/x-www-form-urlencoded" ) +var defaultSender Sender +var defaultSenderInit = &sync.Once{} + // Sender is the interface that wraps the Do method to send HTTP requests. // // The standard http.Client conforms to this interface. @@ -38,14 +46,14 @@ func (sf SenderFunc) Do(r *http.Request) (*http.Response, error) { return sf(r) } -// SendDecorator takes and possibily decorates, by wrapping, a Sender. Decorators may affect the +// SendDecorator takes and possibly decorates, by wrapping, a Sender. Decorators may affect the // http.Request and pass it along or, first, pass the http.Request along then react to the // http.Response result. type SendDecorator func(Sender) Sender // CreateSender creates, decorates, and returns, as a Sender, the default http.Client. func CreateSender(decorators ...SendDecorator) Sender { - return DecorateSender(&http.Client{}, decorators...) + return DecorateSender(sender(), decorators...) } // DecorateSender accepts a Sender and a, possibly empty, set of SendDecorators, which is applies to @@ -58,3 +66,30 @@ func DecorateSender(s Sender, decorators ...SendDecorator) Sender { } return s } + +func sender() Sender { + // note that we can't init defaultSender in init() since it will + // execute before calling code has had a chance to enable tracing + defaultSenderInit.Do(func() { + // Use behaviour compatible with DefaultTransport, but require TLS minimum version. + defaultTransport := http.DefaultTransport.(*http.Transport) + transport := &http.Transport{ + Proxy: defaultTransport.Proxy, + DialContext: defaultTransport.DialContext, + MaxIdleConns: defaultTransport.MaxIdleConns, + IdleConnTimeout: defaultTransport.IdleConnTimeout, + TLSHandshakeTimeout: defaultTransport.TLSHandshakeTimeout, + ExpectContinueTimeout: defaultTransport.ExpectContinueTimeout, + TLSClientConfig: &tls.Config{ + MinVersion: tls.VersionTLS12, + }, + } + var roundTripper http.RoundTripper = transport + if tracing.IsEnabled() { + roundTripper = tracing.NewTransport(transport) + } + j, _ := cookiejar.New(nil) + defaultSender = &http.Client{Jar: j, Transport: roundTripper} + }) + return defaultSender +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/token.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/token.go index b7d5c607116..33bbd6ea150 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/token.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/token.go @@ -22,11 +22,13 @@ import ( "crypto/x509" "encoding/base64" "encoding/json" + "errors" "fmt" "io/ioutil" + "math" "net/http" "net/url" - "strconv" + "os" "strings" "sync" "time" @@ -58,6 +60,15 @@ const ( // msiEndpoint is the well known endpoint for getting MSI authentications tokens msiEndpoint = "http://169.254.169.254/metadata/identity/oauth2/token" + + // the default number of attempts to refresh an MSI authentication token + defaultMaxMSIRefreshAttempts = 5 + + // asMSIEndpointEnv is the environment variable used to store the endpoint on App Service and Functions + asMSIEndpointEnv = "MSI_ENDPOINT" + + // asMSISecretEnv is the environment variable used to store the request secret on App Service and Functions + asMSISecretEnv = "MSI_SECRET" ) // OAuthTokenProvider is an interface which should be implemented by an access token retriever @@ -65,6 +76,12 @@ type OAuthTokenProvider interface { OAuthToken() string } +// MultitenantOAuthTokenProvider provides tokens used for multi-tenant authorization. +type MultitenantOAuthTokenProvider interface { + PrimaryOAuthToken() string + AuxiliaryOAuthTokens() []string +} + // TokenRefreshError is an interface used by errors returned during token refresh. type TokenRefreshError interface { error @@ -89,19 +106,31 @@ type RefresherWithContext interface { // a successful token refresh type TokenRefreshCallback func(Token) error +// TokenRefresh is a type representing a custom callback to refresh a token +type TokenRefresh func(ctx context.Context, resource string) (*Token, error) + // Token encapsulates the access token used to authorize Azure requests. +// https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-oauth2-client-creds-grant-flow#service-to-service-access-token-response type Token struct { AccessToken string `json:"access_token"` RefreshToken string `json:"refresh_token"` - ExpiresIn string `json:"expires_in"` - ExpiresOn string `json:"expires_on"` - NotBefore string `json:"not_before"` + ExpiresIn json.Number `json:"expires_in"` + ExpiresOn json.Number `json:"expires_on"` + NotBefore json.Number `json:"not_before"` Resource string `json:"resource"` Type string `json:"token_type"` } +func newToken() Token { + return Token{ + ExpiresIn: "0", + ExpiresOn: "0", + NotBefore: "0", + } +} + // IsZero returns true if the token object is zero-initialized. func (t Token) IsZero() bool { return t == Token{} @@ -109,12 +138,12 @@ func (t Token) IsZero() bool { // Expires returns the time.Time when the Token expires. func (t Token) Expires() time.Time { - s, err := strconv.Atoi(t.ExpiresOn) + s, err := t.ExpiresOn.Float64() if err != nil { s = -3600 } - expiration := date.NewUnixTimeFromSeconds(float64(s)) + expiration := date.NewUnixTimeFromSeconds(s) return time.Time(expiration).UTC() } @@ -135,6 +164,12 @@ func (t *Token) OAuthToken() string { return t.AccessToken } +// ServicePrincipalSecret is an interface that allows various secret mechanism to fill the form +// that is submitted when acquiring an oAuth token. +type ServicePrincipalSecret interface { + SetAuthenticationValues(spt *ServicePrincipalToken, values *url.Values) error +} + // ServicePrincipalNoSecret represents a secret type that contains no secret // meaning it is not valid for fetching a fresh token. This is used by Manual type ServicePrincipalNoSecret struct { @@ -146,15 +181,19 @@ func (noSecret *ServicePrincipalNoSecret) SetAuthenticationValues(spt *ServicePr return fmt.Errorf("Manually created ServicePrincipalToken does not contain secret material to retrieve a new access token") } -// ServicePrincipalSecret is an interface that allows various secret mechanism to fill the form -// that is submitted when acquiring an oAuth token. -type ServicePrincipalSecret interface { - SetAuthenticationValues(spt *ServicePrincipalToken, values *url.Values) error +// MarshalJSON implements the json.Marshaler interface. +func (noSecret ServicePrincipalNoSecret) MarshalJSON() ([]byte, error) { + type tokenType struct { + Type string `json:"type"` + } + return json.Marshal(tokenType{ + Type: "ServicePrincipalNoSecret", + }) } // ServicePrincipalTokenSecret implements ServicePrincipalSecret for client_secret type authorization. type ServicePrincipalTokenSecret struct { - ClientSecret string + ClientSecret string `json:"value"` } // SetAuthenticationValues is a method of the interface ServicePrincipalSecret. @@ -164,49 +203,24 @@ func (tokenSecret *ServicePrincipalTokenSecret) SetAuthenticationValues(spt *Ser return nil } +// MarshalJSON implements the json.Marshaler interface. +func (tokenSecret ServicePrincipalTokenSecret) MarshalJSON() ([]byte, error) { + type tokenType struct { + Type string `json:"type"` + Value string `json:"value"` + } + return json.Marshal(tokenType{ + Type: "ServicePrincipalTokenSecret", + Value: tokenSecret.ClientSecret, + }) +} + // ServicePrincipalCertificateSecret implements ServicePrincipalSecret for generic RSA cert auth with signed JWTs. type ServicePrincipalCertificateSecret struct { Certificate *x509.Certificate PrivateKey *rsa.PrivateKey } -// ServicePrincipalMSISecret implements ServicePrincipalSecret for machines running the MSI Extension. -type ServicePrincipalMSISecret struct { -} - -// ServicePrincipalUsernamePasswordSecret implements ServicePrincipalSecret for username and password auth. -type ServicePrincipalUsernamePasswordSecret struct { - Username string - Password string -} - -// ServicePrincipalAuthorizationCodeSecret implements ServicePrincipalSecret for authorization code auth. -type ServicePrincipalAuthorizationCodeSecret struct { - ClientSecret string - AuthorizationCode string - RedirectURI string -} - -// SetAuthenticationValues is a method of the interface ServicePrincipalSecret. -func (secret *ServicePrincipalAuthorizationCodeSecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error { - v.Set("code", secret.AuthorizationCode) - v.Set("client_secret", secret.ClientSecret) - v.Set("redirect_uri", secret.RedirectURI) - return nil -} - -// SetAuthenticationValues is a method of the interface ServicePrincipalSecret. -func (secret *ServicePrincipalUsernamePasswordSecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error { - v.Set("username", secret.Username) - v.Set("password", secret.Password) - return nil -} - -// SetAuthenticationValues is a method of the interface ServicePrincipalSecret. -func (msiSecret *ServicePrincipalMSISecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error { - return nil -} - // SignJwt returns the JWT signed with the certificate's private key. func (secret *ServicePrincipalCertificateSecret) SignJwt(spt *ServicePrincipalToken) (string, error) { hasher := sha1.New() @@ -226,10 +240,12 @@ func (secret *ServicePrincipalCertificateSecret) SignJwt(spt *ServicePrincipalTo token := jwt.New(jwt.SigningMethodRS256) token.Header["x5t"] = thumbprint + x5c := []string{base64.StdEncoding.EncodeToString(secret.Certificate.Raw)} + token.Header["x5c"] = x5c token.Claims = jwt.MapClaims{ - "aud": spt.oauthConfig.TokenEndpoint.String(), - "iss": spt.clientID, - "sub": spt.clientID, + "aud": spt.inner.OauthConfig.TokenEndpoint.String(), + "iss": spt.inner.ClientID, + "sub": spt.inner.ClientID, "jti": base64.URLEncoding.EncodeToString(jti), "nbf": time.Now().Unix(), "exp": time.Now().Add(time.Hour * 24).Unix(), @@ -252,19 +268,162 @@ func (secret *ServicePrincipalCertificateSecret) SetAuthenticationValues(spt *Se return nil } +// MarshalJSON implements the json.Marshaler interface. +func (secret ServicePrincipalCertificateSecret) MarshalJSON() ([]byte, error) { + return nil, errors.New("marshalling ServicePrincipalCertificateSecret is not supported") +} + +// ServicePrincipalMSISecret implements ServicePrincipalSecret for machines running the MSI Extension. +type ServicePrincipalMSISecret struct { +} + +// SetAuthenticationValues is a method of the interface ServicePrincipalSecret. +func (msiSecret *ServicePrincipalMSISecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error { + return nil +} + +// MarshalJSON implements the json.Marshaler interface. +func (msiSecret ServicePrincipalMSISecret) MarshalJSON() ([]byte, error) { + return nil, errors.New("marshalling ServicePrincipalMSISecret is not supported") +} + +// ServicePrincipalUsernamePasswordSecret implements ServicePrincipalSecret for username and password auth. +type ServicePrincipalUsernamePasswordSecret struct { + Username string `json:"username"` + Password string `json:"password"` +} + +// SetAuthenticationValues is a method of the interface ServicePrincipalSecret. +func (secret *ServicePrincipalUsernamePasswordSecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error { + v.Set("username", secret.Username) + v.Set("password", secret.Password) + return nil +} + +// MarshalJSON implements the json.Marshaler interface. +func (secret ServicePrincipalUsernamePasswordSecret) MarshalJSON() ([]byte, error) { + type tokenType struct { + Type string `json:"type"` + Username string `json:"username"` + Password string `json:"password"` + } + return json.Marshal(tokenType{ + Type: "ServicePrincipalUsernamePasswordSecret", + Username: secret.Username, + Password: secret.Password, + }) +} + +// ServicePrincipalAuthorizationCodeSecret implements ServicePrincipalSecret for authorization code auth. +type ServicePrincipalAuthorizationCodeSecret struct { + ClientSecret string `json:"value"` + AuthorizationCode string `json:"authCode"` + RedirectURI string `json:"redirect"` +} + +// SetAuthenticationValues is a method of the interface ServicePrincipalSecret. +func (secret *ServicePrincipalAuthorizationCodeSecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error { + v.Set("code", secret.AuthorizationCode) + v.Set("client_secret", secret.ClientSecret) + v.Set("redirect_uri", secret.RedirectURI) + return nil +} + +// MarshalJSON implements the json.Marshaler interface. +func (secret ServicePrincipalAuthorizationCodeSecret) MarshalJSON() ([]byte, error) { + type tokenType struct { + Type string `json:"type"` + Value string `json:"value"` + AuthCode string `json:"authCode"` + Redirect string `json:"redirect"` + } + return json.Marshal(tokenType{ + Type: "ServicePrincipalAuthorizationCodeSecret", + Value: secret.ClientSecret, + AuthCode: secret.AuthorizationCode, + Redirect: secret.RedirectURI, + }) +} + // ServicePrincipalToken encapsulates a Token created for a Service Principal. type ServicePrincipalToken struct { - token Token - secret ServicePrincipalSecret - oauthConfig OAuthConfig - clientID string - resource string - autoRefresh bool - refreshLock *sync.RWMutex - refreshWithin time.Duration - sender Sender + inner servicePrincipalToken + refreshLock *sync.RWMutex + sender Sender + customRefreshFunc TokenRefresh + refreshCallbacks []TokenRefreshCallback + // MaxMSIRefreshAttempts is the maximum number of attempts to refresh an MSI token. + MaxMSIRefreshAttempts int +} + +// MarshalTokenJSON returns the marshalled inner token. +func (spt ServicePrincipalToken) MarshalTokenJSON() ([]byte, error) { + return json.Marshal(spt.inner.Token) +} + +// SetRefreshCallbacks replaces any existing refresh callbacks with the specified callbacks. +func (spt *ServicePrincipalToken) SetRefreshCallbacks(callbacks []TokenRefreshCallback) { + spt.refreshCallbacks = callbacks +} + +// SetCustomRefreshFunc sets a custom refresh function used to refresh the token. +func (spt *ServicePrincipalToken) SetCustomRefreshFunc(customRefreshFunc TokenRefresh) { + spt.customRefreshFunc = customRefreshFunc +} - refreshCallbacks []TokenRefreshCallback +// MarshalJSON implements the json.Marshaler interface. +func (spt ServicePrincipalToken) MarshalJSON() ([]byte, error) { + return json.Marshal(spt.inner) +} + +// UnmarshalJSON implements the json.Unmarshaler interface. +func (spt *ServicePrincipalToken) UnmarshalJSON(data []byte) error { + // need to determine the token type + raw := map[string]interface{}{} + err := json.Unmarshal(data, &raw) + if err != nil { + return err + } + secret := raw["secret"].(map[string]interface{}) + switch secret["type"] { + case "ServicePrincipalNoSecret": + spt.inner.Secret = &ServicePrincipalNoSecret{} + case "ServicePrincipalTokenSecret": + spt.inner.Secret = &ServicePrincipalTokenSecret{} + case "ServicePrincipalCertificateSecret": + return errors.New("unmarshalling ServicePrincipalCertificateSecret is not supported") + case "ServicePrincipalMSISecret": + return errors.New("unmarshalling ServicePrincipalMSISecret is not supported") + case "ServicePrincipalUsernamePasswordSecret": + spt.inner.Secret = &ServicePrincipalUsernamePasswordSecret{} + case "ServicePrincipalAuthorizationCodeSecret": + spt.inner.Secret = &ServicePrincipalAuthorizationCodeSecret{} + default: + return fmt.Errorf("unrecognized token type '%s'", secret["type"]) + } + err = json.Unmarshal(data, &spt.inner) + if err != nil { + return err + } + // Don't override the refreshLock or the sender if those have been already set. + if spt.refreshLock == nil { + spt.refreshLock = &sync.RWMutex{} + } + if spt.sender == nil { + spt.sender = sender() + } + return nil +} + +// internal type used for marshalling/unmarshalling +type servicePrincipalToken struct { + Token Token `json:"token"` + Secret ServicePrincipalSecret `json:"secret"` + OauthConfig OAuthConfig `json:"oauth"` + ClientID string `json:"clientID"` + Resource string `json:"resource"` + AutoRefresh bool `json:"autoRefresh"` + RefreshWithin time.Duration `json:"refreshWithin"` } func validateOAuthConfig(oac OAuthConfig) error { @@ -289,14 +448,17 @@ func NewServicePrincipalTokenWithSecret(oauthConfig OAuthConfig, id string, reso return nil, fmt.Errorf("parameter 'secret' cannot be nil") } spt := &ServicePrincipalToken{ - oauthConfig: oauthConfig, - secret: secret, - clientID: id, - resource: resource, - autoRefresh: true, + inner: servicePrincipalToken{ + Token: newToken(), + OauthConfig: oauthConfig, + Secret: secret, + ClientID: id, + Resource: resource, + AutoRefresh: true, + RefreshWithin: defaultRefresh, + }, refreshLock: &sync.RWMutex{}, - refreshWithin: defaultRefresh, - sender: &http.Client{}, + sender: sender(), refreshCallbacks: callbacks, } return spt, nil @@ -326,7 +488,39 @@ func NewServicePrincipalTokenFromManualToken(oauthConfig OAuthConfig, clientID s return nil, err } - spt.token = token + spt.inner.Token = token + + return spt, nil +} + +// NewServicePrincipalTokenFromManualTokenSecret creates a ServicePrincipalToken using the supplied token and secret +func NewServicePrincipalTokenFromManualTokenSecret(oauthConfig OAuthConfig, clientID string, resource string, token Token, secret ServicePrincipalSecret, callbacks ...TokenRefreshCallback) (*ServicePrincipalToken, error) { + if err := validateOAuthConfig(oauthConfig); err != nil { + return nil, err + } + if err := validateStringParam(clientID, "clientID"); err != nil { + return nil, err + } + if err := validateStringParam(resource, "resource"); err != nil { + return nil, err + } + if secret == nil { + return nil, fmt.Errorf("parameter 'secret' cannot be nil") + } + if token.IsZero() { + return nil, fmt.Errorf("parameter 'token' cannot be zero-initialized") + } + spt, err := NewServicePrincipalTokenWithSecret( + oauthConfig, + clientID, + resource, + secret, + callbacks...) + if err != nil { + return nil, err + } + + spt.inner.Token = token return spt, nil } @@ -455,6 +649,31 @@ func GetMSIVMEndpoint() (string, error) { return msiEndpoint, nil } +func isAppService() bool { + _, asMSIEndpointEnvExists := os.LookupEnv(asMSIEndpointEnv) + _, asMSISecretEnvExists := os.LookupEnv(asMSISecretEnv) + + return asMSIEndpointEnvExists && asMSISecretEnvExists +} + +// GetMSIAppServiceEndpoint get the MSI endpoint for App Service and Functions +func GetMSIAppServiceEndpoint() (string, error) { + asMSIEndpoint, asMSIEndpointEnvExists := os.LookupEnv(asMSIEndpointEnv) + + if asMSIEndpointEnvExists { + return asMSIEndpoint, nil + } + return "", errors.New("MSI endpoint not found") +} + +// GetMSIEndpoint get the appropriate MSI endpoint depending on the runtime environment +func GetMSIEndpoint() (string, error) { + if isAppService() { + return GetMSIAppServiceEndpoint() + } + return GetMSIVMEndpoint() +} + // NewServicePrincipalTokenFromMSI creates a ServicePrincipalToken via the MSI VM Extension. // It will use the system assigned identity when creating the token. func NewServicePrincipalTokenFromMSI(msiEndpoint, resource string, callbacks ...TokenRefreshCallback) (*ServicePrincipalToken, error) { @@ -487,27 +706,36 @@ func newServicePrincipalTokenFromMSI(msiEndpoint, resource string, userAssignedI v := url.Values{} v.Set("resource", resource) - v.Set("api-version", "2018-02-01") + // App Service MSI currently only supports token API version 2017-09-01 + if isAppService() { + v.Set("api-version", "2017-09-01") + } else { + v.Set("api-version", "2018-02-01") + } if userAssignedID != nil { v.Set("client_id", *userAssignedID) } msiEndpointURL.RawQuery = v.Encode() spt := &ServicePrincipalToken{ - oauthConfig: OAuthConfig{ - TokenEndpoint: *msiEndpointURL, + inner: servicePrincipalToken{ + Token: newToken(), + OauthConfig: OAuthConfig{ + TokenEndpoint: *msiEndpointURL, + }, + Secret: &ServicePrincipalMSISecret{}, + Resource: resource, + AutoRefresh: true, + RefreshWithin: defaultRefresh, }, - secret: &ServicePrincipalMSISecret{}, - resource: resource, - autoRefresh: true, - refreshLock: &sync.RWMutex{}, - refreshWithin: defaultRefresh, - sender: &http.Client{}, - refreshCallbacks: callbacks, + refreshLock: &sync.RWMutex{}, + sender: sender(), + refreshCallbacks: callbacks, + MaxMSIRefreshAttempts: defaultMaxMSIRefreshAttempts, } if userAssignedID != nil { - spt.clientID = *userAssignedID + spt.inner.ClientID = *userAssignedID } return spt, nil @@ -542,12 +770,12 @@ func (spt *ServicePrincipalToken) EnsureFresh() error { // EnsureFreshWithContext will refresh the token if it will expire within the refresh window (as set by // RefreshWithin) and autoRefresh flag is on. This method is safe for concurrent use. func (spt *ServicePrincipalToken) EnsureFreshWithContext(ctx context.Context) error { - if spt.autoRefresh && spt.token.WillExpireIn(spt.refreshWithin) { + if spt.inner.AutoRefresh && spt.inner.Token.WillExpireIn(spt.inner.RefreshWithin) { // take the write lock then check to see if the token was already refreshed spt.refreshLock.Lock() defer spt.refreshLock.Unlock() - if spt.token.WillExpireIn(spt.refreshWithin) { - return spt.refreshInternal(ctx, spt.resource) + if spt.inner.Token.WillExpireIn(spt.inner.RefreshWithin) { + return spt.refreshInternal(ctx, spt.inner.Resource) } } return nil @@ -557,7 +785,7 @@ func (spt *ServicePrincipalToken) EnsureFreshWithContext(ctx context.Context) er func (spt *ServicePrincipalToken) InvokeRefreshCallbacks(token Token) error { if spt.refreshCallbacks != nil { for _, callback := range spt.refreshCallbacks { - err := callback(spt.token) + err := callback(spt.inner.Token) if err != nil { return fmt.Errorf("adal: TokenRefreshCallback handler failed. Error = '%v'", err) } @@ -567,27 +795,27 @@ func (spt *ServicePrincipalToken) InvokeRefreshCallbacks(token Token) error { } // Refresh obtains a fresh token for the Service Principal. -// This method is not safe for concurrent use and should be syncrhonized. +// This method is safe for concurrent use. func (spt *ServicePrincipalToken) Refresh() error { return spt.RefreshWithContext(context.Background()) } // RefreshWithContext obtains a fresh token for the Service Principal. -// This method is not safe for concurrent use and should be syncrhonized. +// This method is safe for concurrent use. func (spt *ServicePrincipalToken) RefreshWithContext(ctx context.Context) error { spt.refreshLock.Lock() defer spt.refreshLock.Unlock() - return spt.refreshInternal(ctx, spt.resource) + return spt.refreshInternal(ctx, spt.inner.Resource) } // RefreshExchange refreshes the token, but for a different resource. -// This method is not safe for concurrent use and should be syncrhonized. +// This method is safe for concurrent use. func (spt *ServicePrincipalToken) RefreshExchange(resource string) error { return spt.RefreshExchangeWithContext(context.Background(), resource) } // RefreshExchangeWithContext refreshes the token, but for a different resource. -// This method is not safe for concurrent use and should be syncrhonized. +// This method is safe for concurrent use. func (spt *ServicePrincipalToken) RefreshExchangeWithContext(ctx context.Context, resource string) error { spt.refreshLock.Lock() defer spt.refreshLock.Unlock() @@ -595,7 +823,7 @@ func (spt *ServicePrincipalToken) RefreshExchangeWithContext(ctx context.Context } func (spt *ServicePrincipalToken) getGrantType() string { - switch spt.secret.(type) { + switch spt.inner.Secret.(type) { case *ServicePrincipalUsernamePasswordSecret: return OAuthGrantTypeUserPass case *ServicePrincipalAuthorizationCodeSecret: @@ -610,26 +838,49 @@ func isIMDS(u url.URL) bool { if err != nil { return false } - return u.Host == imds.Host && u.Path == imds.Path + return (u.Host == imds.Host && u.Path == imds.Path) || isAppService() } func (spt *ServicePrincipalToken) refreshInternal(ctx context.Context, resource string) error { - req, err := http.NewRequest(http.MethodPost, spt.oauthConfig.TokenEndpoint.String(), nil) + if spt.customRefreshFunc != nil { + token, err := spt.customRefreshFunc(ctx, resource) + if err != nil { + return err + } + spt.inner.Token = *token + return spt.InvokeRefreshCallbacks(spt.inner.Token) + } + + req, err := http.NewRequest(http.MethodPost, spt.inner.OauthConfig.TokenEndpoint.String(), nil) if err != nil { return fmt.Errorf("adal: Failed to build the refresh request. Error = '%v'", err) } + req.Header.Add("User-Agent", UserAgent()) + // Add header when runtime is on App Service or Functions + if isAppService() { + asMSISecret, _ := os.LookupEnv(asMSISecretEnv) + req.Header.Add("Secret", asMSISecret) + } req = req.WithContext(ctx) - if !isIMDS(spt.oauthConfig.TokenEndpoint) { + if !isIMDS(spt.inner.OauthConfig.TokenEndpoint) { v := url.Values{} - v.Set("client_id", spt.clientID) + v.Set("client_id", spt.inner.ClientID) v.Set("resource", resource) - if spt.token.RefreshToken != "" { + if spt.inner.Token.RefreshToken != "" { v.Set("grant_type", OAuthGrantTypeRefreshToken) - v.Set("refresh_token", spt.token.RefreshToken) + v.Set("refresh_token", spt.inner.Token.RefreshToken) + // web apps must specify client_secret when refreshing tokens + // see https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code#refreshing-the-access-tokens + if spt.getGrantType() == OAuthGrantTypeAuthorizationCode { + err := spt.inner.Secret.SetAuthenticationValues(spt, &v) + if err != nil { + return err + } + } } else { v.Set("grant_type", spt.getGrantType()) - err := spt.secret.SetAuthenticationValues(spt, &v) + err := spt.inner.Secret.SetAuthenticationValues(spt, &v) if err != nil { return err } @@ -642,18 +893,19 @@ func (spt *ServicePrincipalToken) refreshInternal(ctx context.Context, resource req.Body = body } - if _, ok := spt.secret.(*ServicePrincipalMSISecret); ok { + if _, ok := spt.inner.Secret.(*ServicePrincipalMSISecret); ok { req.Method = http.MethodGet req.Header.Set(metadataHeader, "true") } var resp *http.Response - if isIMDS(spt.oauthConfig.TokenEndpoint) { - resp, err = retry(spt.sender, req) + if isIMDS(spt.inner.OauthConfig.TokenEndpoint) { + resp, err = retryForIMDS(spt.sender, req, spt.MaxMSIRefreshAttempts) } else { resp, err = spt.sender.Do(req) } if err != nil { + // don't return a TokenRefreshError here; this will allow retry logic to apply return fmt.Errorf("adal: Failed to execute the refresh request. Error = '%v'", err) } @@ -662,11 +914,15 @@ func (spt *ServicePrincipalToken) refreshInternal(ctx context.Context, resource if resp.StatusCode != http.StatusOK { if err != nil { - return newTokenRefreshError(fmt.Sprintf("adal: Refresh request failed. Status Code = '%d'. Failed reading response body", resp.StatusCode), resp) + return newTokenRefreshError(fmt.Sprintf("adal: Refresh request failed. Status Code = '%d'. Failed reading response body: %v", resp.StatusCode, err), resp) } return newTokenRefreshError(fmt.Sprintf("adal: Refresh request failed. Status Code = '%d'. Response body: %s", resp.StatusCode, string(rb)), resp) } + // for the following error cases don't return a TokenRefreshError. the operation succeeded + // but some transient failure happened during deserialization. by returning a generic error + // the retry logic will kick in (we don't retry on TokenRefreshError). + if err != nil { return fmt.Errorf("adal: Failed to read a new service principal token during refresh. Error = '%v'", err) } @@ -679,12 +935,14 @@ func (spt *ServicePrincipalToken) refreshInternal(ctx context.Context, resource return fmt.Errorf("adal: Failed to unmarshal the service principal token during refresh. Error = '%v' JSON = '%s'", err, string(rb)) } - spt.token = token + spt.inner.Token = token return spt.InvokeRefreshCallbacks(token) } -func retry(sender Sender, req *http.Request) (resp *http.Response, err error) { +// retry logic specific to retrieving a token from the IMDS endpoint +func retryForIMDS(sender Sender, req *http.Request, maxAttempts int) (resp *http.Response, err error) { + // copied from client.go due to circular dependency retries := []int{ http.StatusRequestTimeout, // 408 http.StatusTooManyRequests, // 429 @@ -693,8 +951,10 @@ func retry(sender Sender, req *http.Request) (resp *http.Response, err error) { http.StatusServiceUnavailable, // 503 http.StatusGatewayTimeout, // 504 } - // Extra retry status codes requered - retries = append(retries, http.StatusNotFound, + // extra retry status codes specific to IMDS + retries = append(retries, + http.StatusNotFound, + http.StatusGone, // all remaining 5xx http.StatusNotImplemented, http.StatusHTTPVersionNotSupported, @@ -704,48 +964,46 @@ func retry(sender Sender, req *http.Request) (resp *http.Response, err error) { http.StatusNotExtended, http.StatusNetworkAuthenticationRequired) + // see https://docs.microsoft.com/en-us/azure/active-directory/managed-service-identity/how-to-use-vm-token#retry-guidance + + const maxDelay time.Duration = 60 * time.Second + attempt := 0 - maxAttempts := 5 + delay := time.Duration(0) for attempt < maxAttempts { resp, err = sender.Do(req) - if err != nil || resp.StatusCode == http.StatusOK || !containsInt(retries, resp.StatusCode) { + // we want to retry if err is not nil or the status code is in the list of retry codes + if err == nil && !responseHasStatusCode(resp, retries...) { return } - if !delay(resp, req.Context().Done()) { - select { - case <-time.After(time.Second): - attempt++ - case <-req.Context().Done(): - err = req.Context().Err() - return - } + // perform exponential backoff with a cap. + // must increment attempt before calculating delay. + attempt++ + // the base value of 2 is the "delta backoff" as specified in the guidance doc + delay += (time.Duration(math.Pow(2, float64(attempt))) * time.Second) + if delay > maxDelay { + delay = maxDelay } - } - return -} -func containsInt(ints []int, n int) bool { - for _, i := range ints { - if i == n { - return true + select { + case <-time.After(delay): + // intentionally left blank + case <-req.Context().Done(): + err = req.Context().Err() + return } } - return false + return } -func delay(resp *http.Response, cancel <-chan struct{}) bool { - if resp == nil { - return false - } - retryAfter, _ := strconv.Atoi(resp.Header.Get("Retry-After")) - if resp.StatusCode == http.StatusTooManyRequests && retryAfter > 0 { - select { - case <-time.After(time.Duration(retryAfter) * time.Second): - return true - case <-cancel: - return false +func responseHasStatusCode(resp *http.Response, codes ...int) bool { + if resp != nil { + for _, i := range codes { + if i == resp.StatusCode { + return true + } } } return false @@ -753,13 +1011,13 @@ func delay(resp *http.Response, cancel <-chan struct{}) bool { // SetAutoRefresh enables or disables automatic refreshing of stale tokens. func (spt *ServicePrincipalToken) SetAutoRefresh(autoRefresh bool) { - spt.autoRefresh = autoRefresh + spt.inner.AutoRefresh = autoRefresh } // SetRefreshWithin sets the interval within which if the token will expire, EnsureFresh will // refresh the token. func (spt *ServicePrincipalToken) SetRefreshWithin(d time.Duration) { - spt.refreshWithin = d + spt.inner.RefreshWithin = d return } @@ -771,12 +1029,102 @@ func (spt *ServicePrincipalToken) SetSender(s Sender) { spt.sender = s } func (spt *ServicePrincipalToken) OAuthToken() string { spt.refreshLock.RLock() defer spt.refreshLock.RUnlock() - return spt.token.OAuthToken() + return spt.inner.Token.OAuthToken() } // Token returns a copy of the current token. func (spt *ServicePrincipalToken) Token() Token { spt.refreshLock.RLock() defer spt.refreshLock.RUnlock() - return spt.token + return spt.inner.Token +} + +// MultiTenantServicePrincipalToken contains tokens for multi-tenant authorization. +type MultiTenantServicePrincipalToken struct { + PrimaryToken *ServicePrincipalToken + AuxiliaryTokens []*ServicePrincipalToken +} + +// PrimaryOAuthToken returns the primary authorization token. +func (mt *MultiTenantServicePrincipalToken) PrimaryOAuthToken() string { + return mt.PrimaryToken.OAuthToken() +} + +// AuxiliaryOAuthTokens returns one to three auxiliary authorization tokens. +func (mt *MultiTenantServicePrincipalToken) AuxiliaryOAuthTokens() []string { + tokens := make([]string, len(mt.AuxiliaryTokens)) + for i := range mt.AuxiliaryTokens { + tokens[i] = mt.AuxiliaryTokens[i].OAuthToken() + } + return tokens +} + +// EnsureFreshWithContext will refresh the token if it will expire within the refresh window (as set by +// RefreshWithin) and autoRefresh flag is on. This method is safe for concurrent use. +func (mt *MultiTenantServicePrincipalToken) EnsureFreshWithContext(ctx context.Context) error { + if err := mt.PrimaryToken.EnsureFreshWithContext(ctx); err != nil { + return fmt.Errorf("failed to refresh primary token: %v", err) + } + for _, aux := range mt.AuxiliaryTokens { + if err := aux.EnsureFreshWithContext(ctx); err != nil { + return fmt.Errorf("failed to refresh auxiliary token: %v", err) + } + } + return nil +} + +// RefreshWithContext obtains a fresh token for the Service Principal. +func (mt *MultiTenantServicePrincipalToken) RefreshWithContext(ctx context.Context) error { + if err := mt.PrimaryToken.RefreshWithContext(ctx); err != nil { + return fmt.Errorf("failed to refresh primary token: %v", err) + } + for _, aux := range mt.AuxiliaryTokens { + if err := aux.RefreshWithContext(ctx); err != nil { + return fmt.Errorf("failed to refresh auxiliary token: %v", err) + } + } + return nil +} + +// RefreshExchangeWithContext refreshes the token, but for a different resource. +func (mt *MultiTenantServicePrincipalToken) RefreshExchangeWithContext(ctx context.Context, resource string) error { + if err := mt.PrimaryToken.RefreshExchangeWithContext(ctx, resource); err != nil { + return fmt.Errorf("failed to refresh primary token: %v", err) + } + for _, aux := range mt.AuxiliaryTokens { + if err := aux.RefreshExchangeWithContext(ctx, resource); err != nil { + return fmt.Errorf("failed to refresh auxiliary token: %v", err) + } + } + return nil +} + +// NewMultiTenantServicePrincipalToken creates a new MultiTenantServicePrincipalToken with the specified credentials and resource. +func NewMultiTenantServicePrincipalToken(multiTenantCfg MultiTenantOAuthConfig, clientID string, secret string, resource string) (*MultiTenantServicePrincipalToken, error) { + if err := validateStringParam(clientID, "clientID"); err != nil { + return nil, err + } + if err := validateStringParam(secret, "secret"); err != nil { + return nil, err + } + if err := validateStringParam(resource, "resource"); err != nil { + return nil, err + } + auxTenants := multiTenantCfg.AuxiliaryTenants() + m := MultiTenantServicePrincipalToken{ + AuxiliaryTokens: make([]*ServicePrincipalToken, len(auxTenants)), + } + primary, err := NewServicePrincipalToken(*multiTenantCfg.PrimaryTenant(), clientID, secret, resource) + if err != nil { + return nil, fmt.Errorf("failed to create SPT for primary tenant: %v", err) + } + m.PrimaryToken = primary + for i := range auxTenants { + aux, err := NewServicePrincipalToken(*auxTenants[i], clientID, secret, resource) + if err != nil { + return nil, fmt.Errorf("failed to create SPT for auxiliary tenant: %v", err) + } + m.AuxiliaryTokens[i] = aux + } + return &m, nil } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/version.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/version.go new file mode 100644 index 00000000000..c867b348439 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/adal/version.go @@ -0,0 +1,45 @@ +package adal + +import ( + "fmt" + "runtime" +) + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +const number = "v1.0.0" + +var ( + ua = fmt.Sprintf("Go/%s (%s-%s) go-autorest/adal/%s", + runtime.Version(), + runtime.GOARCH, + runtime.GOOS, + number, + ) +) + +// UserAgent returns a string containing the Go version, system architecture and OS, and the adal version. +func UserAgent() string { + return ua +} + +// AddToUserAgent adds an extension to the current user agent +func AddToUserAgent(extension string) error { + if extension != "" { + ua = fmt.Sprintf("%s %s", ua, extension) + return nil + } + return fmt.Errorf("Extension was empty, User Agent remained as '%s'", ua) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization.go index 77eff45bddb..54e87b5b648 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization.go @@ -15,6 +15,8 @@ package autorest // limitations under the License. import ( + "crypto/tls" + "encoding/base64" "fmt" "net/http" "net/url" @@ -30,6 +32,8 @@ const ( apiKeyAuthorizerHeader = "Ocp-Apim-Subscription-Key" bingAPISdkHeader = "X-BingApis-SDK-Client" golangBingAPISdkHeaderValue = "Go-SDK" + authorization = "Authorization" + basic = "Basic" ) // Authorizer is the interface that provides a PrepareDecorator used to supply request @@ -68,7 +72,7 @@ func NewAPIKeyAuthorizer(headers map[string]interface{}, queryParameters map[str return &APIKeyAuthorizer{headers: headers, queryParameters: queryParameters} } -// WithAuthorization returns a PrepareDecorator that adds an HTTP headers and Query Paramaters +// WithAuthorization returns a PrepareDecorator that adds an HTTP headers and Query Parameters. func (aka *APIKeyAuthorizer) WithAuthorization() PrepareDecorator { return func(p Preparer) Preparer { return DecoratePreparer(p, WithHeaders(aka.headers), WithQueryParameters(aka.queryParameters)) @@ -145,11 +149,11 @@ type BearerAuthorizerCallback struct { // NewBearerAuthorizerCallback creates a bearer authorization callback. The callback // is invoked when the HTTP request is submitted. -func NewBearerAuthorizerCallback(sender Sender, callback BearerAuthorizerCallbackFunc) *BearerAuthorizerCallback { - if sender == nil { - sender = &http.Client{} +func NewBearerAuthorizerCallback(s Sender, callback BearerAuthorizerCallbackFunc) *BearerAuthorizerCallback { + if s == nil { + s = sender(tls.RenegotiateNever) } - return &BearerAuthorizerCallback{sender: sender, callback: callback} + return &BearerAuthorizerCallback{sender: s, callback: callback} } // WithAuthorization returns a PrepareDecorator that adds an HTTP Authorization header whose value @@ -257,3 +261,76 @@ func (egta EventGridKeyAuthorizer) WithAuthorization() PrepareDecorator { } return NewAPIKeyAuthorizerWithHeaders(headers).WithAuthorization() } + +// BasicAuthorizer implements basic HTTP authorization by adding the Authorization HTTP header +// with the value "Basic " where is a base64-encoded username:password tuple. +type BasicAuthorizer struct { + userName string + password string +} + +// NewBasicAuthorizer creates a new BasicAuthorizer with the specified username and password. +func NewBasicAuthorizer(userName, password string) *BasicAuthorizer { + return &BasicAuthorizer{ + userName: userName, + password: password, + } +} + +// WithAuthorization returns a PrepareDecorator that adds an HTTP Authorization header whose +// value is "Basic " followed by the base64-encoded username:password tuple. +func (ba *BasicAuthorizer) WithAuthorization() PrepareDecorator { + headers := make(map[string]interface{}) + headers[authorization] = basic + " " + base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", ba.userName, ba.password))) + + return NewAPIKeyAuthorizerWithHeaders(headers).WithAuthorization() +} + +// MultiTenantServicePrincipalTokenAuthorizer provides authentication across tenants. +type MultiTenantServicePrincipalTokenAuthorizer interface { + WithAuthorization() PrepareDecorator +} + +// NewMultiTenantServicePrincipalTokenAuthorizer crates a BearerAuthorizer using the given token provider +func NewMultiTenantServicePrincipalTokenAuthorizer(tp adal.MultitenantOAuthTokenProvider) MultiTenantServicePrincipalTokenAuthorizer { + return &multiTenantSPTAuthorizer{tp: tp} +} + +type multiTenantSPTAuthorizer struct { + tp adal.MultitenantOAuthTokenProvider +} + +// WithAuthorization returns a PrepareDecorator that adds an HTTP Authorization header using the +// primary token along with the auxiliary authorization header using the auxiliary tokens. +// +// By default, the token will be automatically refreshed through the Refresher interface. +func (mt multiTenantSPTAuthorizer) WithAuthorization() PrepareDecorator { + return func(p Preparer) Preparer { + return PreparerFunc(func(r *http.Request) (*http.Request, error) { + r, err := p.Prepare(r) + if err != nil { + return r, err + } + if refresher, ok := mt.tp.(adal.RefresherWithContext); ok { + err = refresher.EnsureFreshWithContext(r.Context()) + if err != nil { + var resp *http.Response + if tokError, ok := err.(adal.TokenRefreshError); ok { + resp = tokError.Response() + } + return r, NewErrorWithError(err, "azure.multiTenantSPTAuthorizer", "WithAuthorization", resp, + "Failed to refresh one or more Tokens for request to %s", r.URL) + } + } + r, err = Prepare(r, WithHeader(headerAuthorization, fmt.Sprintf("Bearer %s", mt.tp.PrimaryOAuthToken()))) + if err != nil { + return r, err + } + auxTokens := mt.tp.AuxiliaryOAuthTokens() + for i := range auxTokens { + auxTokens[i] = fmt.Sprintf("Bearer %s", auxTokens[i]) + } + return Prepare(r, WithHeader(headerAuxAuthorization, strings.Join(auxTokens, "; "))) + }) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization_sas.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization_sas.go new file mode 100644 index 00000000000..89a659cb664 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization_sas.go @@ -0,0 +1,67 @@ +package autorest + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ( + "fmt" + "net/http" + "strings" +) + +// SASTokenAuthorizer implements an authorization for SAS Token Authentication +// this can be used for interaction with Blob Storage Endpoints +type SASTokenAuthorizer struct { + sasToken string +} + +// NewSASTokenAuthorizer creates a SASTokenAuthorizer using the given credentials +func NewSASTokenAuthorizer(sasToken string) (*SASTokenAuthorizer, error) { + if strings.TrimSpace(sasToken) == "" { + return nil, fmt.Errorf("sasToken cannot be empty") + } + + token := sasToken + if strings.HasPrefix(sasToken, "?") { + token = strings.TrimPrefix(sasToken, "?") + } + + return &SASTokenAuthorizer{ + sasToken: token, + }, nil +} + +// WithAuthorization returns a PrepareDecorator that adds a shared access signature token to the +// URI's query parameters. This can be used for the Blob, Queue, and File Services. +// +// See https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature +func (sas *SASTokenAuthorizer) WithAuthorization() PrepareDecorator { + return func(p Preparer) Preparer { + return PreparerFunc(func(r *http.Request) (*http.Request, error) { + r, err := p.Prepare(r) + if err != nil { + return r, err + } + + if r.URL.RawQuery != "" { + r.URL.RawQuery = fmt.Sprintf("%s&%s", r.URL.RawQuery, sas.sasToken) + } else { + r.URL.RawQuery = sas.sasToken + } + + r.RequestURI = r.URL.String() + return Prepare(r) + }) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization_storage.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization_storage.go new file mode 100644 index 00000000000..33e5f127017 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/authorization_storage.go @@ -0,0 +1,301 @@ +package autorest + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ( + "bytes" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "fmt" + "net/http" + "net/url" + "sort" + "strings" + "time" +) + +// SharedKeyType defines the enumeration for the various shared key types. +// See https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key for details on the shared key types. +type SharedKeyType string + +const ( + // SharedKey is used to authorize against blobs, files and queues services. + SharedKey SharedKeyType = "sharedKey" + + // SharedKeyForTable is used to authorize against the table service. + SharedKeyForTable SharedKeyType = "sharedKeyTable" + + // SharedKeyLite is used to authorize against blobs, files and queues services. It's provided for + // backwards compatibility with API versions before 2009-09-19. Prefer SharedKey instead. + SharedKeyLite SharedKeyType = "sharedKeyLite" + + // SharedKeyLiteForTable is used to authorize against the table service. It's provided for + // backwards compatibility with older table API versions. Prefer SharedKeyForTable instead. + SharedKeyLiteForTable SharedKeyType = "sharedKeyLiteTable" +) + +const ( + headerAccept = "Accept" + headerAcceptCharset = "Accept-Charset" + headerContentEncoding = "Content-Encoding" + headerContentLength = "Content-Length" + headerContentMD5 = "Content-MD5" + headerContentLanguage = "Content-Language" + headerIfModifiedSince = "If-Modified-Since" + headerIfMatch = "If-Match" + headerIfNoneMatch = "If-None-Match" + headerIfUnmodifiedSince = "If-Unmodified-Since" + headerDate = "Date" + headerXMSDate = "X-Ms-Date" + headerXMSVersion = "x-ms-version" + headerRange = "Range" +) + +const storageEmulatorAccountName = "devstoreaccount1" + +// SharedKeyAuthorizer implements an authorization for Shared Key +// this can be used for interaction with Blob, File and Queue Storage Endpoints +type SharedKeyAuthorizer struct { + accountName string + accountKey []byte + keyType SharedKeyType +} + +// NewSharedKeyAuthorizer creates a SharedKeyAuthorizer using the provided credentials and shared key type. +func NewSharedKeyAuthorizer(accountName, accountKey string, keyType SharedKeyType) (*SharedKeyAuthorizer, error) { + key, err := base64.StdEncoding.DecodeString(accountKey) + if err != nil { + return nil, fmt.Errorf("malformed storage account key: %v", err) + } + return &SharedKeyAuthorizer{ + accountName: accountName, + accountKey: key, + keyType: keyType, + }, nil +} + +// WithAuthorization returns a PrepareDecorator that adds an HTTP Authorization header whose +// value is " " followed by the computed key. +// This can be used for the Blob, Queue, and File Services +// +// from: https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key +// You may use Shared Key authorization to authorize a request made against the +// 2009-09-19 version and later of the Blob and Queue services, +// and version 2014-02-14 and later of the File services. +func (sk *SharedKeyAuthorizer) WithAuthorization() PrepareDecorator { + return func(p Preparer) Preparer { + return PreparerFunc(func(r *http.Request) (*http.Request, error) { + r, err := p.Prepare(r) + if err != nil { + return r, err + } + + sk, err := buildSharedKey(sk.accountName, sk.accountKey, r, sk.keyType) + return Prepare(r, WithHeader(headerAuthorization, sk)) + }) + } +} + +func buildSharedKey(accName string, accKey []byte, req *http.Request, keyType SharedKeyType) (string, error) { + canRes, err := buildCanonicalizedResource(accName, req.URL.String(), keyType) + if err != nil { + return "", err + } + + if req.Header == nil { + req.Header = http.Header{} + } + + // ensure date is set + if req.Header.Get(headerDate) == "" && req.Header.Get(headerXMSDate) == "" { + date := time.Now().UTC().Format(http.TimeFormat) + req.Header.Set(headerXMSDate, date) + } + canString, err := buildCanonicalizedString(req.Method, req.Header, canRes, keyType) + if err != nil { + return "", err + } + return createAuthorizationHeader(accName, accKey, canString, keyType), nil +} + +func buildCanonicalizedResource(accountName, uri string, keyType SharedKeyType) (string, error) { + errMsg := "buildCanonicalizedResource error: %s" + u, err := url.Parse(uri) + if err != nil { + return "", fmt.Errorf(errMsg, err.Error()) + } + + cr := bytes.NewBufferString("") + if accountName != storageEmulatorAccountName { + cr.WriteString("/") + cr.WriteString(getCanonicalizedAccountName(accountName)) + } + + if len(u.Path) > 0 { + // Any portion of the CanonicalizedResource string that is derived from + // the resource's URI should be encoded exactly as it is in the URI. + // -- https://msdn.microsoft.com/en-gb/library/azure/dd179428.aspx + cr.WriteString(u.EscapedPath()) + } + + params, err := url.ParseQuery(u.RawQuery) + if err != nil { + return "", fmt.Errorf(errMsg, err.Error()) + } + + // See https://github.com/Azure/azure-storage-net/blob/master/Lib/Common/Core/Util/AuthenticationUtility.cs#L277 + if keyType == SharedKey { + if len(params) > 0 { + cr.WriteString("\n") + + keys := []string{} + for key := range params { + keys = append(keys, key) + } + sort.Strings(keys) + + completeParams := []string{} + for _, key := range keys { + if len(params[key]) > 1 { + sort.Strings(params[key]) + } + + completeParams = append(completeParams, fmt.Sprintf("%s:%s", key, strings.Join(params[key], ","))) + } + cr.WriteString(strings.Join(completeParams, "\n")) + } + } else { + // search for "comp" parameter, if exists then add it to canonicalizedresource + if v, ok := params["comp"]; ok { + cr.WriteString("?comp=" + v[0]) + } + } + + return string(cr.Bytes()), nil +} + +func getCanonicalizedAccountName(accountName string) string { + // since we may be trying to access a secondary storage account, we need to + // remove the -secondary part of the storage name + return strings.TrimSuffix(accountName, "-secondary") +} + +func buildCanonicalizedString(verb string, headers http.Header, canonicalizedResource string, keyType SharedKeyType) (string, error) { + contentLength := headers.Get(headerContentLength) + if contentLength == "0" { + contentLength = "" + } + date := headers.Get(headerDate) + if v := headers.Get(headerXMSDate); v != "" { + if keyType == SharedKey || keyType == SharedKeyLite { + date = "" + } else { + date = v + } + } + var canString string + switch keyType { + case SharedKey: + canString = strings.Join([]string{ + verb, + headers.Get(headerContentEncoding), + headers.Get(headerContentLanguage), + contentLength, + headers.Get(headerContentMD5), + headers.Get(headerContentType), + date, + headers.Get(headerIfModifiedSince), + headers.Get(headerIfMatch), + headers.Get(headerIfNoneMatch), + headers.Get(headerIfUnmodifiedSince), + headers.Get(headerRange), + buildCanonicalizedHeader(headers), + canonicalizedResource, + }, "\n") + case SharedKeyForTable: + canString = strings.Join([]string{ + verb, + headers.Get(headerContentMD5), + headers.Get(headerContentType), + date, + canonicalizedResource, + }, "\n") + case SharedKeyLite: + canString = strings.Join([]string{ + verb, + headers.Get(headerContentMD5), + headers.Get(headerContentType), + date, + buildCanonicalizedHeader(headers), + canonicalizedResource, + }, "\n") + case SharedKeyLiteForTable: + canString = strings.Join([]string{ + date, + canonicalizedResource, + }, "\n") + default: + return "", fmt.Errorf("key type '%s' is not supported", keyType) + } + return canString, nil +} + +func buildCanonicalizedHeader(headers http.Header) string { + cm := make(map[string]string) + + for k := range headers { + headerName := strings.TrimSpace(strings.ToLower(k)) + if strings.HasPrefix(headerName, "x-ms-") { + cm[headerName] = headers.Get(k) + } + } + + if len(cm) == 0 { + return "" + } + + keys := []string{} + for key := range cm { + keys = append(keys, key) + } + + sort.Strings(keys) + + ch := bytes.NewBufferString("") + + for _, key := range keys { + ch.WriteString(key) + ch.WriteRune(':') + ch.WriteString(cm[key]) + ch.WriteRune('\n') + } + + return strings.TrimSuffix(string(ch.Bytes()), "\n") +} + +func createAuthorizationHeader(accountName string, accountKey []byte, canonicalizedString string, keyType SharedKeyType) string { + h := hmac.New(sha256.New, accountKey) + h.Write([]byte(canonicalizedString)) + signature := base64.StdEncoding.EncodeToString(h.Sum(nil)) + var key string + switch keyType { + case SharedKey, SharedKeyForTable: + key = "SharedKey" + case SharedKeyLite, SharedKeyLiteForTable: + key = "SharedKeyLite" + } + return fmt.Sprintf("%s %s:%s", key, getCanonicalizedAccountName(accountName), signature) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/async.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/async.go index a58e5ef3f1c..1cb41cbeb1b 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/async.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/async.go @@ -21,11 +21,12 @@ import ( "fmt" "io/ioutil" "net/http" + "net/url" "strings" "time" "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/date" + "github.com/Azure/go-autorest/tracing" ) const ( @@ -44,84 +45,74 @@ var pollingCodes = [...]int{http.StatusNoContent, http.StatusAccepted, http.Stat // Future provides a mechanism to access the status and results of an asynchronous request. // Since futures are stateful they should be passed by value to avoid race conditions. type Future struct { - req *http.Request - resp *http.Response - ps pollingState + pt pollingTracker } -// NewFuture returns a new Future object initialized with the specified request. -func NewFuture(req *http.Request) Future { - return Future{req: req} +// NewFutureFromResponse returns a new Future object initialized +// with the initial response from an asynchronous operation. +func NewFutureFromResponse(resp *http.Response) (Future, error) { + pt, err := createPollingTracker(resp) + return Future{pt: pt}, err } -// Response returns the last HTTP response or nil if there isn't one. +// Response returns the last HTTP response. func (f Future) Response() *http.Response { - return f.resp + if f.pt == nil { + return nil + } + return f.pt.latestResponse() } // Status returns the last status message of the operation. func (f Future) Status() string { - if f.ps.State == "" { - return "Unknown" + if f.pt == nil { + return "" } - return f.ps.State + return f.pt.pollingStatus() } // PollingMethod returns the method used to monitor the status of the asynchronous operation. func (f Future) PollingMethod() PollingMethodType { - return f.ps.PollingMethod + if f.pt == nil { + return PollingUnknown + } + return f.pt.pollingMethod() } -// Done queries the service to see if the operation has completed. -func (f *Future) Done(sender autorest.Sender) (bool, error) { - // exit early if this future has terminated - if f.ps.hasTerminated() { - return true, f.errorInfo() +// DoneWithContext queries the service to see if the operation has completed. +func (f *Future) DoneWithContext(ctx context.Context, sender autorest.Sender) (done bool, err error) { + ctx = tracing.StartSpan(ctx, "github.com/Azure/go-autorest/autorest/azure/async.DoneWithContext") + defer func() { + sc := -1 + resp := f.Response() + if resp != nil { + sc = resp.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + + if f.pt == nil { + return false, autorest.NewError("Future", "Done", "future is not initialized") } - resp, err := sender.Do(f.req) - f.resp = resp - if err != nil { + if f.pt.hasTerminated() { + return true, f.pt.pollingError() + } + if err := f.pt.pollForStatus(ctx, sender); err != nil { return false, err } - - if !autorest.ResponseHasStatusCode(resp, pollingCodes[:]...) { - // check response body for error content - if resp.Body != nil { - type respErr struct { - ServiceError ServiceError `json:"error"` - } - re := respErr{} - - defer resp.Body.Close() - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return false, err - } - err = json.Unmarshal(b, &re) - if err != nil { - return false, err - } - return false, re.ServiceError - } - - // try to return something meaningful - return false, ServiceError{ - Code: fmt.Sprintf("%v", resp.StatusCode), - Message: resp.Status, - } + if err := f.pt.checkForErrors(); err != nil { + return f.pt.hasTerminated(), err } - - err = updatePollingState(resp, &f.ps) - if err != nil { + if err := f.pt.updatePollingState(f.pt.provisioningStateApplicable()); err != nil { return false, err } - - if f.ps.hasTerminated() { - return true, f.errorInfo() + if err := f.pt.initPollingMethod(); err != nil { + return false, err } - - f.req, err = newPollingRequest(f.ps) - return false, err + if err := f.pt.updatePollingMethod(); err != nil { + return false, err + } + return f.pt.hasTerminated(), f.pt.pollingError() } // GetPollingDelay returns a duration the application should wait before checking @@ -129,11 +120,15 @@ func (f *Future) Done(sender autorest.Sender) (bool, error) { // the service via the Retry-After response header. If the header wasn't returned // then the function returns the zero-value time.Duration and false. func (f Future) GetPollingDelay() (time.Duration, bool) { - if f.resp == nil { + if f.pt == nil { + return 0, false + } + resp := f.pt.latestResponse() + if resp == nil { return 0, false } - retry := f.resp.Header.Get(autorest.HeaderRetryAfter) + retry := resp.Header.Get(autorest.HeaderRetryAfter) if retry == "" { return 0, false } @@ -146,18 +141,37 @@ func (f Future) GetPollingDelay() (time.Duration, bool) { return d, true } -// WaitForCompletion will return when one of the following conditions is met: the long +// WaitForCompletionRef will return when one of the following conditions is met: the long // running operation has completed, the provided context is cancelled, or the client's // polling duration has been exceeded. It will retry failed polling attempts based on // the retry value defined in the client up to the maximum retry attempts. -func (f Future) WaitForCompletion(ctx context.Context, client autorest.Client) error { - ctx, cancel := context.WithTimeout(ctx, client.PollingDuration) - defer cancel() +// If no deadline is specified in the context then the client.PollingDuration will be +// used to determine if a default deadline should be used. +// If PollingDuration is greater than zero the value will be used as the context's timeout. +// If PollingDuration is zero then no default deadline will be used. +func (f *Future) WaitForCompletionRef(ctx context.Context, client autorest.Client) (err error) { + ctx = tracing.StartSpan(ctx, "github.com/Azure/go-autorest/autorest/azure/async.WaitForCompletionRef") + defer func() { + sc := -1 + resp := f.Response() + if resp != nil { + sc = resp.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + cancelCtx := ctx + // if the provided context already has a deadline don't override it + _, hasDeadline := ctx.Deadline() + if d := client.PollingDuration; !hasDeadline && d != 0 { + var cancel context.CancelFunc + cancelCtx, cancel = context.WithTimeout(ctx, d) + defer cancel() + } - done, err := f.Done(client) - for attempts := 0; !done; done, err = f.Done(client) { + done, err := f.DoneWithContext(ctx, client) + for attempts := 0; !done; done, err = f.DoneWithContext(ctx, client) { if attempts >= client.RetryAttempts { - return autorest.NewErrorWithError(err, "azure", "WaitForCompletion", f.resp, "the number of retries has been exceeded") + return autorest.NewErrorWithError(err, "Future", "WaitForCompletion", f.pt.latestResponse(), "the number of retries has been exceeded") } // we want delayAttempt to be zero in the non-error case so // that DelayForBackoff doesn't perform exponential back-off @@ -179,319 +193,718 @@ func (f Future) WaitForCompletion(ctx context.Context, client autorest.Client) e attempts++ } // wait until the delay elapses or the context is cancelled - delayElapsed := autorest.DelayForBackoff(delay, delayAttempt, ctx.Done()) + delayElapsed := autorest.DelayForBackoff(delay, delayAttempt, cancelCtx.Done()) if !delayElapsed { - return autorest.NewErrorWithError(ctx.Err(), "azure", "WaitForCompletion", f.resp, "context has been cancelled") + return autorest.NewErrorWithError(cancelCtx.Err(), "Future", "WaitForCompletion", f.pt.latestResponse(), "context has been cancelled") } } - return err -} - -// if the operation failed the polling state will contain -// error information and implements the error interface -func (f *Future) errorInfo() error { - if !f.ps.hasSucceeded() { - return f.ps - } - return nil + return } // MarshalJSON implements the json.Marshaler interface. func (f Future) MarshalJSON() ([]byte, error) { - return json.Marshal(&f.ps) + return json.Marshal(f.pt) } // UnmarshalJSON implements the json.Unmarshaler interface. func (f *Future) UnmarshalJSON(data []byte) error { - err := json.Unmarshal(data, &f.ps) + // unmarshal into JSON object to determine the tracker type + obj := map[string]interface{}{} + err := json.Unmarshal(data, &obj) if err != nil { return err } - f.req, err = newPollingRequest(f.ps) - return err + if obj["method"] == nil { + return autorest.NewError("Future", "UnmarshalJSON", "missing 'method' property") + } + method := obj["method"].(string) + switch strings.ToUpper(method) { + case http.MethodDelete: + f.pt = &pollingTrackerDelete{} + case http.MethodPatch: + f.pt = &pollingTrackerPatch{} + case http.MethodPost: + f.pt = &pollingTrackerPost{} + case http.MethodPut: + f.pt = &pollingTrackerPut{} + default: + return autorest.NewError("Future", "UnmarshalJSON", "unsupoorted method '%s'", method) + } + // now unmarshal into the tracker + return json.Unmarshal(data, &f.pt) } // PollingURL returns the URL used for retrieving the status of the long-running operation. -// For LROs that use the Location header the final URL value is used to retrieve the result. func (f Future) PollingURL() string { - return f.ps.URI + if f.pt == nil { + return "" + } + return f.pt.pollingURL() +} + +// GetResult should be called once polling has completed successfully. +// It makes the final GET call to retrieve the resultant payload. +func (f Future) GetResult(sender autorest.Sender) (*http.Response, error) { + if f.pt.finalGetURL() == "" { + // we can end up in this situation if the async operation returns a 200 + // with no polling URLs. in that case return the response which should + // contain the JSON payload (only do this for successful terminal cases). + if lr := f.pt.latestResponse(); lr != nil && f.pt.hasSucceeded() { + return lr, nil + } + return nil, autorest.NewError("Future", "GetResult", "missing URL for retrieving result") + } + req, err := http.NewRequest(http.MethodGet, f.pt.finalGetURL(), nil) + if err != nil { + return nil, err + } + return sender.Do(req) } -// DoPollForAsynchronous returns a SendDecorator that polls if the http.Response is for an Azure -// long-running operation. It will delay between requests for the duration specified in the -// RetryAfter header or, if the header is absent, the passed delay. Polling may be canceled by -// closing the optional channel on the http.Request. -func DoPollForAsynchronous(delay time.Duration) autorest.SendDecorator { - return func(s autorest.Sender) autorest.Sender { - return autorest.SenderFunc(func(r *http.Request) (resp *http.Response, err error) { - resp, err = s.Do(r) - if err != nil { - return resp, err - } - if !autorest.ResponseHasStatusCode(resp, pollingCodes[:]...) { - return resp, nil - } +type pollingTracker interface { + // these methods can differ per tracker + + // checks the response headers and status code to determine the polling mechanism + updatePollingMethod() error + + // checks the response for tracker-specific error conditions + checkForErrors() error + + // returns true if provisioning state should be checked + provisioningStateApplicable() bool + + // methods common to all trackers + + // initializes a tracker's polling URL and method, called for each iteration. + // these values can be overridden by each polling tracker as required. + initPollingMethod() error + + // initializes the tracker's internal state, call this when the tracker is created + initializeState() error + + // makes an HTTP request to check the status of the LRO + pollForStatus(ctx context.Context, sender autorest.Sender) error + + // updates internal tracker state, call this after each call to pollForStatus + updatePollingState(provStateApl bool) error + + // returns the error response from the service, can be nil + pollingError() error + + // returns the polling method being used + pollingMethod() PollingMethodType + + // returns the state of the LRO as returned from the service + pollingStatus() string + + // returns the URL used for polling status + pollingURL() string + + // returns the URL used for the final GET to retrieve the resource + finalGetURL() string - ps := pollingState{} - for err == nil { - err = updatePollingState(resp, &ps) - if err != nil { - break - } - if ps.hasTerminated() { - if !ps.hasSucceeded() { - err = ps - } - break - } - - r, err = newPollingRequest(ps) - if err != nil { - return resp, err - } - r = r.WithContext(resp.Request.Context()) - - delay = autorest.GetRetryAfter(resp, delay) - resp, err = autorest.SendWithSender(s, r, - autorest.AfterDelay(delay)) + // returns true if the LRO is in a terminal state + hasTerminated() bool + + // returns true if the LRO is in a failed terminal state + hasFailed() bool + + // returns true if the LRO is in a successful terminal state + hasSucceeded() bool + + // returns the cached HTTP response after a call to pollForStatus(), can be nil + latestResponse() *http.Response +} + +type pollingTrackerBase struct { + // resp is the last response, either from the submission of the LRO or from polling + resp *http.Response + + // method is the HTTP verb, this is needed for deserialization + Method string `json:"method"` + + // rawBody is the raw JSON response body + rawBody map[string]interface{} + + // denotes if polling is using async-operation or location header + Pm PollingMethodType `json:"pollingMethod"` + + // the URL to poll for status + URI string `json:"pollingURI"` + + // the state of the LRO as returned from the service + State string `json:"lroState"` + + // the URL to GET for the final result + FinalGetURI string `json:"resultURI"` + + // used to hold an error object returned from the service + Err *ServiceError `json:"error,omitempty"` +} + +func (pt *pollingTrackerBase) initializeState() error { + // determine the initial polling state based on response body and/or HTTP status + // code. this is applicable to the initial LRO response, not polling responses! + pt.Method = pt.resp.Request.Method + if err := pt.updateRawBody(); err != nil { + return err + } + switch pt.resp.StatusCode { + case http.StatusOK: + if ps := pt.getProvisioningState(); ps != nil { + pt.State = *ps + if pt.hasFailed() { + pt.updateErrorFromResponse() + return pt.pollingError() } + } else { + pt.State = operationSucceeded + } + case http.StatusCreated: + if ps := pt.getProvisioningState(); ps != nil { + pt.State = *ps + } else { + pt.State = operationInProgress + } + case http.StatusAccepted: + pt.State = operationInProgress + case http.StatusNoContent: + pt.State = operationSucceeded + default: + pt.State = operationFailed + pt.updateErrorFromResponse() + return pt.pollingError() + } + return pt.initPollingMethod() +} - return resp, err - }) +func (pt pollingTrackerBase) getProvisioningState() *string { + if pt.rawBody != nil && pt.rawBody["properties"] != nil { + p := pt.rawBody["properties"].(map[string]interface{}) + if ps := p["provisioningState"]; ps != nil { + s := ps.(string) + return &s + } } + return nil } -func getAsyncOperation(resp *http.Response) string { - return resp.Header.Get(http.CanonicalHeaderKey(headerAsyncOperation)) +func (pt *pollingTrackerBase) updateRawBody() error { + pt.rawBody = map[string]interface{}{} + if pt.resp.ContentLength != 0 { + defer pt.resp.Body.Close() + b, err := ioutil.ReadAll(pt.resp.Body) + if err != nil { + return autorest.NewErrorWithError(err, "pollingTrackerBase", "updateRawBody", nil, "failed to read response body") + } + // observed in 204 responses over HTTP/2.0; the content length is -1 but body is empty + if len(b) == 0 { + return nil + } + // put the body back so it's available to other callers + pt.resp.Body = ioutil.NopCloser(bytes.NewReader(b)) + if err = json.Unmarshal(b, &pt.rawBody); err != nil { + return autorest.NewErrorWithError(err, "pollingTrackerBase", "updateRawBody", nil, "failed to unmarshal response body") + } + } + return nil } -func hasSucceeded(state string) bool { - return strings.EqualFold(state, operationSucceeded) +func (pt *pollingTrackerBase) pollForStatus(ctx context.Context, sender autorest.Sender) error { + req, err := http.NewRequest(http.MethodGet, pt.URI, nil) + if err != nil { + return autorest.NewErrorWithError(err, "pollingTrackerBase", "pollForStatus", nil, "failed to create HTTP request") + } + + req = req.WithContext(ctx) + preparer := autorest.CreatePreparer(autorest.GetPrepareDecorators(ctx)...) + req, err = preparer.Prepare(req) + if err != nil { + return autorest.NewErrorWithError(err, "pollingTrackerBase", "pollForStatus", nil, "failed preparing HTTP request") + } + pt.resp, err = sender.Do(req) + if err != nil { + return autorest.NewErrorWithError(err, "pollingTrackerBase", "pollForStatus", nil, "failed to send HTTP request") + } + if autorest.ResponseHasStatusCode(pt.resp, pollingCodes[:]...) { + // reset the service error on success case + pt.Err = nil + err = pt.updateRawBody() + } else { + // check response body for error content + pt.updateErrorFromResponse() + err = pt.pollingError() + } + return err } -func hasTerminated(state string) bool { - return strings.EqualFold(state, operationCanceled) || strings.EqualFold(state, operationFailed) || strings.EqualFold(state, operationSucceeded) +// attempts to unmarshal a ServiceError type from the response body. +// if that fails then make a best attempt at creating something meaningful. +// NOTE: this assumes that the async operation has failed. +func (pt *pollingTrackerBase) updateErrorFromResponse() { + var err error + if pt.resp.ContentLength != 0 { + type respErr struct { + ServiceError *ServiceError `json:"error"` + } + re := respErr{} + defer pt.resp.Body.Close() + var b []byte + if b, err = ioutil.ReadAll(pt.resp.Body); err != nil || len(b) == 0 { + goto Default + } + if err = json.Unmarshal(b, &re); err != nil { + goto Default + } + // unmarshalling the error didn't yield anything, try unwrapped error + if re.ServiceError == nil { + err = json.Unmarshal(b, &re.ServiceError) + if err != nil { + goto Default + } + } + // the unmarshaller will ensure re.ServiceError is non-nil + // even if there was no content unmarshalled so check the code. + if re.ServiceError.Code != "" { + pt.Err = re.ServiceError + return + } + } +Default: + se := &ServiceError{ + Code: pt.pollingStatus(), + Message: "The async operation failed.", + } + if err != nil { + se.InnerError = make(map[string]interface{}) + se.InnerError["unmarshalError"] = err.Error() + } + // stick the response body into the error object in hopes + // it contains something useful to help diagnose the failure. + if len(pt.rawBody) > 0 { + se.AdditionalInfo = []map[string]interface{}{ + pt.rawBody, + } + } + pt.Err = se } -func hasFailed(state string) bool { - return strings.EqualFold(state, operationFailed) +func (pt *pollingTrackerBase) updatePollingState(provStateApl bool) error { + if pt.Pm == PollingAsyncOperation && pt.rawBody["status"] != nil { + pt.State = pt.rawBody["status"].(string) + } else { + if pt.resp.StatusCode == http.StatusAccepted { + pt.State = operationInProgress + } else if provStateApl { + if ps := pt.getProvisioningState(); ps != nil { + pt.State = *ps + } else { + pt.State = operationSucceeded + } + } else { + return autorest.NewError("pollingTrackerBase", "updatePollingState", "the response from the async operation has an invalid status code") + } + } + // if the operation has failed update the error state + if pt.hasFailed() { + pt.updateErrorFromResponse() + } + return nil } -type provisioningTracker interface { - state() string - hasSucceeded() bool - hasTerminated() bool +func (pt pollingTrackerBase) pollingError() error { + if pt.Err == nil { + return nil + } + return pt.Err } -type operationResource struct { - // Note: - // The specification states services should return the "id" field. However some return it as - // "operationId". - ID string `json:"id"` - OperationID string `json:"operationId"` - Name string `json:"name"` - Status string `json:"status"` - Properties map[string]interface{} `json:"properties"` - OperationError ServiceError `json:"error"` - StartTime date.Time `json:"startTime"` - EndTime date.Time `json:"endTime"` - PercentComplete float64 `json:"percentComplete"` +func (pt pollingTrackerBase) pollingMethod() PollingMethodType { + return pt.Pm } -func (or operationResource) state() string { - return or.Status +func (pt pollingTrackerBase) pollingStatus() string { + return pt.State } -func (or operationResource) hasSucceeded() bool { - return hasSucceeded(or.state()) +func (pt pollingTrackerBase) pollingURL() string { + return pt.URI } -func (or operationResource) hasTerminated() bool { - return hasTerminated(or.state()) +func (pt pollingTrackerBase) finalGetURL() string { + return pt.FinalGetURI } -type provisioningProperties struct { - ProvisioningState string `json:"provisioningState"` +func (pt pollingTrackerBase) hasTerminated() bool { + return strings.EqualFold(pt.State, operationCanceled) || strings.EqualFold(pt.State, operationFailed) || strings.EqualFold(pt.State, operationSucceeded) } -type provisioningStatus struct { - Properties provisioningProperties `json:"properties,omitempty"` - ProvisioningError ServiceError `json:"error,omitempty"` +func (pt pollingTrackerBase) hasFailed() bool { + return strings.EqualFold(pt.State, operationCanceled) || strings.EqualFold(pt.State, operationFailed) } -func (ps provisioningStatus) state() string { - return ps.Properties.ProvisioningState +func (pt pollingTrackerBase) hasSucceeded() bool { + return strings.EqualFold(pt.State, operationSucceeded) } -func (ps provisioningStatus) hasSucceeded() bool { - return hasSucceeded(ps.state()) +func (pt pollingTrackerBase) latestResponse() *http.Response { + return pt.resp } -func (ps provisioningStatus) hasTerminated() bool { - return hasTerminated(ps.state()) +// error checking common to all trackers +func (pt pollingTrackerBase) baseCheckForErrors() error { + // for Azure-AsyncOperations the response body cannot be nil or empty + if pt.Pm == PollingAsyncOperation { + if pt.resp.Body == nil || pt.resp.ContentLength == 0 { + return autorest.NewError("pollingTrackerBase", "baseCheckForErrors", "for Azure-AsyncOperation response body cannot be nil") + } + if pt.rawBody["status"] == nil { + return autorest.NewError("pollingTrackerBase", "baseCheckForErrors", "missing status property in Azure-AsyncOperation response body") + } + } + return nil } -func (ps provisioningStatus) hasProvisioningError() bool { - // code and message are required fields so only check them - return len(ps.ProvisioningError.Code) > 0 || - len(ps.ProvisioningError.Message) > 0 +// default initialization of polling URL/method. each verb tracker will update this as required. +func (pt *pollingTrackerBase) initPollingMethod() error { + if ao, err := getURLFromAsyncOpHeader(pt.resp); err != nil { + return err + } else if ao != "" { + pt.URI = ao + pt.Pm = PollingAsyncOperation + return nil + } + if lh, err := getURLFromLocationHeader(pt.resp); err != nil { + return err + } else if lh != "" { + pt.URI = lh + pt.Pm = PollingLocation + return nil + } + // it's ok if we didn't find a polling header, this will be handled elsewhere + return nil } -// PollingMethodType defines a type used for enumerating polling mechanisms. -type PollingMethodType string +// DELETE -const ( - // PollingAsyncOperation indicates the polling method uses the Azure-AsyncOperation header. - PollingAsyncOperation PollingMethodType = "AsyncOperation" +type pollingTrackerDelete struct { + pollingTrackerBase +} - // PollingLocation indicates the polling method uses the Location header. - PollingLocation PollingMethodType = "Location" +func (pt *pollingTrackerDelete) updatePollingMethod() error { + // for 201 the Location header is required + if pt.resp.StatusCode == http.StatusCreated { + if lh, err := getURLFromLocationHeader(pt.resp); err != nil { + return err + } else if lh == "" { + return autorest.NewError("pollingTrackerDelete", "updateHeaders", "missing Location header in 201 response") + } else { + pt.URI = lh + } + pt.Pm = PollingLocation + pt.FinalGetURI = pt.URI + } + // for 202 prefer the Azure-AsyncOperation header but fall back to Location if necessary + if pt.resp.StatusCode == http.StatusAccepted { + ao, err := getURLFromAsyncOpHeader(pt.resp) + if err != nil { + return err + } else if ao != "" { + pt.URI = ao + pt.Pm = PollingAsyncOperation + } + // if the Location header is invalid and we already have a polling URL + // then we don't care if the Location header URL is malformed. + if lh, err := getURLFromLocationHeader(pt.resp); err != nil && pt.URI == "" { + return err + } else if lh != "" { + if ao == "" { + pt.URI = lh + pt.Pm = PollingLocation + } + // when both headers are returned we use the value in the Location header for the final GET + pt.FinalGetURI = lh + } + // make sure a polling URL was found + if pt.URI == "" { + return autorest.NewError("pollingTrackerPost", "updateHeaders", "didn't get any suitable polling URLs in 202 response") + } + } + return nil +} - // PollingUnknown indicates an unknown polling method and is the default value. - PollingUnknown PollingMethodType = "" -) +func (pt pollingTrackerDelete) checkForErrors() error { + return pt.baseCheckForErrors() +} -type pollingState struct { - PollingMethod PollingMethodType `json:"pollingMethod"` - URI string `json:"uri"` - State string `json:"state"` - ServiceError *ServiceError `json:"error,omitempty"` +func (pt pollingTrackerDelete) provisioningStateApplicable() bool { + return pt.resp.StatusCode == http.StatusOK || pt.resp.StatusCode == http.StatusNoContent } -func (ps pollingState) hasSucceeded() bool { - return hasSucceeded(ps.State) +// PATCH + +type pollingTrackerPatch struct { + pollingTrackerBase } -func (ps pollingState) hasTerminated() bool { - return hasTerminated(ps.State) +func (pt *pollingTrackerPatch) updatePollingMethod() error { + // by default we can use the original URL for polling and final GET + if pt.URI == "" { + pt.URI = pt.resp.Request.URL.String() + } + if pt.FinalGetURI == "" { + pt.FinalGetURI = pt.resp.Request.URL.String() + } + if pt.Pm == PollingUnknown { + pt.Pm = PollingRequestURI + } + // for 201 it's permissible for no headers to be returned + if pt.resp.StatusCode == http.StatusCreated { + if ao, err := getURLFromAsyncOpHeader(pt.resp); err != nil { + return err + } else if ao != "" { + pt.URI = ao + pt.Pm = PollingAsyncOperation + } + } + // for 202 prefer the Azure-AsyncOperation header but fall back to Location if necessary + // note the absence of the "final GET" mechanism for PATCH + if pt.resp.StatusCode == http.StatusAccepted { + ao, err := getURLFromAsyncOpHeader(pt.resp) + if err != nil { + return err + } else if ao != "" { + pt.URI = ao + pt.Pm = PollingAsyncOperation + } + if ao == "" { + if lh, err := getURLFromLocationHeader(pt.resp); err != nil { + return err + } else if lh == "" { + return autorest.NewError("pollingTrackerPatch", "updateHeaders", "didn't get any suitable polling URLs in 202 response") + } else { + pt.URI = lh + pt.Pm = PollingLocation + } + } + } + return nil } -func (ps pollingState) hasFailed() bool { - return hasFailed(ps.State) +func (pt pollingTrackerPatch) checkForErrors() error { + return pt.baseCheckForErrors() } -func (ps pollingState) Error() string { - s := fmt.Sprintf("Long running operation terminated with status '%s'", ps.State) - if ps.ServiceError != nil { - s = fmt.Sprintf("%s: %+v", s, *ps.ServiceError) - } - return s +func (pt pollingTrackerPatch) provisioningStateApplicable() bool { + return pt.resp.StatusCode == http.StatusOK || pt.resp.StatusCode == http.StatusCreated } -// updatePollingState maps the operation status -- retrieved from either a provisioningState -// field, the status field of an OperationResource, or inferred from the HTTP status code -- -// into a well-known states. Since the process begins from the initial request, the state -// always comes from either a the provisioningState returned or is inferred from the HTTP -// status code. Subsequent requests will read an Azure OperationResource object if the -// service initially returned the Azure-AsyncOperation header. The responseFormat field notes -// the expected response format. -func updatePollingState(resp *http.Response, ps *pollingState) error { - // Determine the response shape - // -- The first response will always be a provisioningStatus response; only the polling requests, - // depending on the header returned, may be something otherwise. - var pt provisioningTracker - if ps.PollingMethod == PollingAsyncOperation { - pt = &operationResource{} - } else { - pt = &provisioningStatus{} - } +// POST - // If this is the first request (that is, the polling response shape is unknown), determine how - // to poll and what to expect - if ps.PollingMethod == PollingUnknown { - req := resp.Request - if req == nil { - return autorest.NewError("azure", "updatePollingState", "Azure Polling Error - Original HTTP request is missing") - } +type pollingTrackerPost struct { + pollingTrackerBase +} - // Prefer the Azure-AsyncOperation header - ps.URI = getAsyncOperation(resp) - if ps.URI != "" { - ps.PollingMethod = PollingAsyncOperation +func (pt *pollingTrackerPost) updatePollingMethod() error { + // 201 requires Location header + if pt.resp.StatusCode == http.StatusCreated { + if lh, err := getURLFromLocationHeader(pt.resp); err != nil { + return err + } else if lh == "" { + return autorest.NewError("pollingTrackerPost", "updateHeaders", "missing Location header in 201 response") } else { - ps.PollingMethod = PollingLocation + pt.URI = lh + pt.FinalGetURI = lh + pt.Pm = PollingLocation } - - // Else, use the Location header - if ps.URI == "" { - ps.URI = autorest.GetLocation(resp) + } + // for 202 prefer the Azure-AsyncOperation header but fall back to Location if necessary + if pt.resp.StatusCode == http.StatusAccepted { + ao, err := getURLFromAsyncOpHeader(pt.resp) + if err != nil { + return err + } else if ao != "" { + pt.URI = ao + pt.Pm = PollingAsyncOperation } - - // Lastly, requests against an existing resource, use the last request URI - if ps.URI == "" { - m := strings.ToUpper(req.Method) - if m == http.MethodPatch || m == http.MethodPut || m == http.MethodGet { - ps.URI = req.URL.String() + // if the Location header is invalid and we already have a polling URL + // then we don't care if the Location header URL is malformed. + if lh, err := getURLFromLocationHeader(pt.resp); err != nil && pt.URI == "" { + return err + } else if lh != "" { + if ao == "" { + pt.URI = lh + pt.Pm = PollingLocation } + // when both headers are returned we use the value in the Location header for the final GET + pt.FinalGetURI = lh + } + // make sure a polling URL was found + if pt.URI == "" { + return autorest.NewError("pollingTrackerPost", "updateHeaders", "didn't get any suitable polling URLs in 202 response") } } + return nil +} - // Read and interpret the response (saving the Body in case no polling is necessary) - b := &bytes.Buffer{} - err := autorest.Respond(resp, - autorest.ByCopying(b), - autorest.ByUnmarshallingJSON(pt), - autorest.ByClosing()) - resp.Body = ioutil.NopCloser(b) - if err != nil { - return err - } +func (pt pollingTrackerPost) checkForErrors() error { + return pt.baseCheckForErrors() +} - // Interpret the results - // -- Terminal states apply regardless - // -- Unknown states are per-service inprogress states - // -- Otherwise, infer state from HTTP status code - if pt.hasTerminated() { - ps.State = pt.state() - } else if pt.state() != "" { - ps.State = operationInProgress - } else { - switch resp.StatusCode { - case http.StatusAccepted: - ps.State = operationInProgress +func (pt pollingTrackerPost) provisioningStateApplicable() bool { + return pt.resp.StatusCode == http.StatusOK || pt.resp.StatusCode == http.StatusNoContent +} - case http.StatusNoContent, http.StatusCreated, http.StatusOK: - ps.State = operationSucceeded +// PUT - default: - ps.State = operationFailed - } - } +type pollingTrackerPut struct { + pollingTrackerBase +} - if strings.EqualFold(ps.State, operationInProgress) && ps.URI == "" { - return autorest.NewError("azure", "updatePollingState", "Azure Polling Error - Unable to obtain polling URI for %s %s", resp.Request.Method, resp.Request.URL) +func (pt *pollingTrackerPut) updatePollingMethod() error { + // by default we can use the original URL for polling and final GET + if pt.URI == "" { + pt.URI = pt.resp.Request.URL.String() } - - // For failed operation, check for error code and message in - // -- Operation resource - // -- Response - // -- Otherwise, Unknown - if ps.hasFailed() { - if or, ok := pt.(*operationResource); ok { - ps.ServiceError = &or.OperationError - } else if p, ok := pt.(*provisioningStatus); ok && p.hasProvisioningError() { - ps.ServiceError = &p.ProvisioningError - } else { - ps.ServiceError = &ServiceError{ - Code: "Unknown", - Message: "None", + if pt.FinalGetURI == "" { + pt.FinalGetURI = pt.resp.Request.URL.String() + } + if pt.Pm == PollingUnknown { + pt.Pm = PollingRequestURI + } + // for 201 it's permissible for no headers to be returned + if pt.resp.StatusCode == http.StatusCreated { + if ao, err := getURLFromAsyncOpHeader(pt.resp); err != nil { + return err + } else if ao != "" { + pt.URI = ao + pt.Pm = PollingAsyncOperation + } + } + // for 202 prefer the Azure-AsyncOperation header but fall back to Location if necessary + if pt.resp.StatusCode == http.StatusAccepted { + ao, err := getURLFromAsyncOpHeader(pt.resp) + if err != nil { + return err + } else if ao != "" { + pt.URI = ao + pt.Pm = PollingAsyncOperation + } + // if the Location header is invalid and we already have a polling URL + // then we don't care if the Location header URL is malformed. + if lh, err := getURLFromLocationHeader(pt.resp); err != nil && pt.URI == "" { + return err + } else if lh != "" { + if ao == "" { + pt.URI = lh + pt.Pm = PollingLocation } } + // make sure a polling URL was found + if pt.URI == "" { + return autorest.NewError("pollingTrackerPut", "updateHeaders", "didn't get any suitable polling URLs in 202 response") + } } return nil } -func newPollingRequest(ps pollingState) (*http.Request, error) { - reqPoll, err := autorest.Prepare(&http.Request{}, - autorest.AsGet(), - autorest.WithBaseURL(ps.URI)) +func (pt pollingTrackerPut) checkForErrors() error { + err := pt.baseCheckForErrors() if err != nil { - return nil, autorest.NewErrorWithError(err, "azure", "newPollingRequest", nil, "Failure creating poll request to %s", ps.URI) + return err + } + // if there are no LRO headers then the body cannot be empty + ao, err := getURLFromAsyncOpHeader(pt.resp) + if err != nil { + return err + } + lh, err := getURLFromLocationHeader(pt.resp) + if err != nil { + return err } + if ao == "" && lh == "" && len(pt.rawBody) == 0 { + return autorest.NewError("pollingTrackerPut", "checkForErrors", "the response did not contain a body") + } + return nil +} + +func (pt pollingTrackerPut) provisioningStateApplicable() bool { + return pt.resp.StatusCode == http.StatusOK || pt.resp.StatusCode == http.StatusCreated +} + +// creates a polling tracker based on the verb of the original request +func createPollingTracker(resp *http.Response) (pollingTracker, error) { + var pt pollingTracker + switch strings.ToUpper(resp.Request.Method) { + case http.MethodDelete: + pt = &pollingTrackerDelete{pollingTrackerBase: pollingTrackerBase{resp: resp}} + case http.MethodPatch: + pt = &pollingTrackerPatch{pollingTrackerBase: pollingTrackerBase{resp: resp}} + case http.MethodPost: + pt = &pollingTrackerPost{pollingTrackerBase: pollingTrackerBase{resp: resp}} + case http.MethodPut: + pt = &pollingTrackerPut{pollingTrackerBase: pollingTrackerBase{resp: resp}} + default: + return nil, autorest.NewError("azure", "createPollingTracker", "unsupported HTTP method %s", resp.Request.Method) + } + if err := pt.initializeState(); err != nil { + return pt, err + } + // this initializes the polling header values, we do this during creation in case the + // initial response send us invalid values; this way the API call will return a non-nil + // error (not doing this means the error shows up in Future.Done) + return pt, pt.updatePollingMethod() +} + +// gets the polling URL from the Azure-AsyncOperation header. +// ensures the URL is well-formed and absolute. +func getURLFromAsyncOpHeader(resp *http.Response) (string, error) { + s := resp.Header.Get(http.CanonicalHeaderKey(headerAsyncOperation)) + if s == "" { + return "", nil + } + if !isValidURL(s) { + return "", autorest.NewError("azure", "getURLFromAsyncOpHeader", "invalid polling URL '%s'", s) + } + return s, nil +} - return reqPoll, nil +// gets the polling URL from the Location header. +// ensures the URL is well-formed and absolute. +func getURLFromLocationHeader(resp *http.Response) (string, error) { + s := resp.Header.Get(http.CanonicalHeaderKey(autorest.HeaderLocation)) + if s == "" { + return "", nil + } + if !isValidURL(s) { + return "", autorest.NewError("azure", "getURLFromLocationHeader", "invalid polling URL '%s'", s) + } + return s, nil } +// verify that the URL is valid and absolute +func isValidURL(s string) bool { + u, err := url.Parse(s) + return err == nil && u.IsAbs() +} + +// PollingMethodType defines a type used for enumerating polling mechanisms. +type PollingMethodType string + +const ( + // PollingAsyncOperation indicates the polling method uses the Azure-AsyncOperation header. + PollingAsyncOperation PollingMethodType = "AsyncOperation" + + // PollingLocation indicates the polling method uses the Location header. + PollingLocation PollingMethodType = "Location" + + // PollingRequestURI indicates the polling method uses the original request URI. + PollingRequestURI PollingMethodType = "RequestURI" + + // PollingUnknown indicates an unknown polling method and is the default value. + PollingUnknown PollingMethodType = "" +) + // AsyncOpIncompleteError is the type that's returned from a future that has not completed. type AsyncOpIncompleteError struct { // FutureType is the name of the type composed of a azure.Future. diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/auth.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/auth.go new file mode 100644 index 00000000000..5f02026b391 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/auth.go @@ -0,0 +1,737 @@ +package auth + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ( + "bytes" + "crypto/rsa" + "crypto/x509" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "log" + "os" + "strings" + "unicode/utf16" + + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/adal" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/azure/cli" + "github.com/dimchansky/utfbom" + "golang.org/x/crypto/pkcs12" +) + +// The possible keys in the Values map. +const ( + SubscriptionID = "AZURE_SUBSCRIPTION_ID" + TenantID = "AZURE_TENANT_ID" + AuxiliaryTenantIDs = "AZURE_AUXILIARY_TENANT_IDS" + ClientID = "AZURE_CLIENT_ID" + ClientSecret = "AZURE_CLIENT_SECRET" + CertificatePath = "AZURE_CERTIFICATE_PATH" + CertificatePassword = "AZURE_CERTIFICATE_PASSWORD" + Username = "AZURE_USERNAME" + Password = "AZURE_PASSWORD" + EnvironmentName = "AZURE_ENVIRONMENT" + Resource = "AZURE_AD_RESOURCE" + ActiveDirectoryEndpoint = "ActiveDirectoryEndpoint" + ResourceManagerEndpoint = "ResourceManagerEndpoint" + GraphResourceID = "GraphResourceID" + SQLManagementEndpoint = "SQLManagementEndpoint" + GalleryEndpoint = "GalleryEndpoint" + ManagementEndpoint = "ManagementEndpoint" +) + +// NewAuthorizerFromEnvironment creates an Authorizer configured from environment variables in the order: +// 1. Client credentials +// 2. Client certificate +// 3. Username password +// 4. MSI +func NewAuthorizerFromEnvironment() (autorest.Authorizer, error) { + settings, err := GetSettingsFromEnvironment() + if err != nil { + return nil, err + } + return settings.GetAuthorizer() +} + +// NewAuthorizerFromEnvironmentWithResource creates an Authorizer configured from environment variables in the order: +// 1. Client credentials +// 2. Client certificate +// 3. Username password +// 4. MSI +func NewAuthorizerFromEnvironmentWithResource(resource string) (autorest.Authorizer, error) { + settings, err := GetSettingsFromEnvironment() + if err != nil { + return nil, err + } + settings.Values[Resource] = resource + return settings.GetAuthorizer() +} + +// EnvironmentSettings contains the available authentication settings. +type EnvironmentSettings struct { + Values map[string]string + Environment azure.Environment +} + +// GetSettingsFromEnvironment returns the available authentication settings from the environment. +func GetSettingsFromEnvironment() (s EnvironmentSettings, err error) { + s = EnvironmentSettings{ + Values: map[string]string{}, + } + s.setValue(SubscriptionID) + s.setValue(TenantID) + s.setValue(AuxiliaryTenantIDs) + s.setValue(ClientID) + s.setValue(ClientSecret) + s.setValue(CertificatePath) + s.setValue(CertificatePassword) + s.setValue(Username) + s.setValue(Password) + s.setValue(EnvironmentName) + s.setValue(Resource) + if v := s.Values[EnvironmentName]; v == "" { + s.Environment = azure.PublicCloud + } else { + s.Environment, err = azure.EnvironmentFromName(v) + } + if s.Values[Resource] == "" { + s.Values[Resource] = s.Environment.ResourceManagerEndpoint + } + return +} + +// GetSubscriptionID returns the available subscription ID or an empty string. +func (settings EnvironmentSettings) GetSubscriptionID() string { + return settings.Values[SubscriptionID] +} + +// adds the specified environment variable value to the Values map if it exists +func (settings EnvironmentSettings) setValue(key string) { + if v := os.Getenv(key); v != "" { + settings.Values[key] = v + } +} + +// helper to return client and tenant IDs +func (settings EnvironmentSettings) getClientAndTenant() (string, string) { + clientID := settings.Values[ClientID] + tenantID := settings.Values[TenantID] + return clientID, tenantID +} + +// GetClientCredentials creates a config object from the available client credentials. +// An error is returned if no client credentials are available. +func (settings EnvironmentSettings) GetClientCredentials() (ClientCredentialsConfig, error) { + secret := settings.Values[ClientSecret] + if secret == "" { + return ClientCredentialsConfig{}, errors.New("missing client secret") + } + clientID, tenantID := settings.getClientAndTenant() + config := NewClientCredentialsConfig(clientID, secret, tenantID) + config.AADEndpoint = settings.Environment.ActiveDirectoryEndpoint + config.Resource = settings.Values[Resource] + if auxTenants, ok := settings.Values[AuxiliaryTenantIDs]; ok { + config.AuxTenants = strings.Split(auxTenants, ";") + for i := range config.AuxTenants { + config.AuxTenants[i] = strings.TrimSpace(config.AuxTenants[i]) + } + } + return config, nil +} + +// GetClientCertificate creates a config object from the available certificate credentials. +// An error is returned if no certificate credentials are available. +func (settings EnvironmentSettings) GetClientCertificate() (ClientCertificateConfig, error) { + certPath := settings.Values[CertificatePath] + if certPath == "" { + return ClientCertificateConfig{}, errors.New("missing certificate path") + } + certPwd := settings.Values[CertificatePassword] + clientID, tenantID := settings.getClientAndTenant() + config := NewClientCertificateConfig(certPath, certPwd, clientID, tenantID) + config.AADEndpoint = settings.Environment.ActiveDirectoryEndpoint + config.Resource = settings.Values[Resource] + return config, nil +} + +// GetUsernamePassword creates a config object from the available username/password credentials. +// An error is returned if no username/password credentials are available. +func (settings EnvironmentSettings) GetUsernamePassword() (UsernamePasswordConfig, error) { + username := settings.Values[Username] + password := settings.Values[Password] + if username == "" || password == "" { + return UsernamePasswordConfig{}, errors.New("missing username/password") + } + clientID, tenantID := settings.getClientAndTenant() + config := NewUsernamePasswordConfig(username, password, clientID, tenantID) + config.AADEndpoint = settings.Environment.ActiveDirectoryEndpoint + config.Resource = settings.Values[Resource] + return config, nil +} + +// GetMSI creates a MSI config object from the available client ID. +func (settings EnvironmentSettings) GetMSI() MSIConfig { + config := NewMSIConfig() + config.Resource = settings.Values[Resource] + config.ClientID = settings.Values[ClientID] + return config +} + +// GetDeviceFlow creates a device-flow config object from the available client and tenant IDs. +func (settings EnvironmentSettings) GetDeviceFlow() DeviceFlowConfig { + clientID, tenantID := settings.getClientAndTenant() + config := NewDeviceFlowConfig(clientID, tenantID) + config.AADEndpoint = settings.Environment.ActiveDirectoryEndpoint + config.Resource = settings.Values[Resource] + return config +} + +// GetAuthorizer creates an Authorizer configured from environment variables in the order: +// 1. Client credentials +// 2. Client certificate +// 3. Username password +// 4. MSI +func (settings EnvironmentSettings) GetAuthorizer() (autorest.Authorizer, error) { + //1.Client Credentials + if c, e := settings.GetClientCredentials(); e == nil { + return c.Authorizer() + } + + //2. Client Certificate + if c, e := settings.GetClientCertificate(); e == nil { + return c.Authorizer() + } + + //3. Username Password + if c, e := settings.GetUsernamePassword(); e == nil { + return c.Authorizer() + } + + // 4. MSI + return settings.GetMSI().Authorizer() +} + +// NewAuthorizerFromFile creates an Authorizer configured from a configuration file in the following order. +// 1. Client credentials +// 2. Client certificate +func NewAuthorizerFromFile(baseURI string) (autorest.Authorizer, error) { + settings, err := GetSettingsFromFile() + if err != nil { + return nil, err + } + if a, err := settings.ClientCredentialsAuthorizer(baseURI); err == nil { + return a, err + } + if a, err := settings.ClientCertificateAuthorizer(baseURI); err == nil { + return a, err + } + return nil, errors.New("auth file missing client and certificate credentials") +} + +// NewAuthorizerFromFileWithResource creates an Authorizer configured from a configuration file in the following order. +// 1. Client credentials +// 2. Client certificate +func NewAuthorizerFromFileWithResource(resource string) (autorest.Authorizer, error) { + s, err := GetSettingsFromFile() + if err != nil { + return nil, err + } + if a, err := s.ClientCredentialsAuthorizerWithResource(resource); err == nil { + return a, err + } + if a, err := s.ClientCertificateAuthorizerWithResource(resource); err == nil { + return a, err + } + return nil, errors.New("auth file missing client and certificate credentials") +} + +// NewAuthorizerFromCLI creates an Authorizer configured from Azure CLI 2.0 for local development scenarios. +func NewAuthorizerFromCLI() (autorest.Authorizer, error) { + settings, err := GetSettingsFromEnvironment() + if err != nil { + return nil, err + } + + if settings.Values[Resource] == "" { + settings.Values[Resource] = settings.Environment.ResourceManagerEndpoint + } + + return NewAuthorizerFromCLIWithResource(settings.Values[Resource]) +} + +// NewAuthorizerFromCLIWithResource creates an Authorizer configured from Azure CLI 2.0 for local development scenarios. +func NewAuthorizerFromCLIWithResource(resource string) (autorest.Authorizer, error) { + token, err := cli.GetTokenFromCLI(resource) + if err != nil { + return nil, err + } + + adalToken, err := token.ToADALToken() + if err != nil { + return nil, err + } + + return autorest.NewBearerAuthorizer(&adalToken), nil +} + +// GetSettingsFromFile returns the available authentication settings from an Azure CLI authentication file. +func GetSettingsFromFile() (FileSettings, error) { + s := FileSettings{} + fileLocation := os.Getenv("AZURE_AUTH_LOCATION") + if fileLocation == "" { + return s, errors.New("environment variable AZURE_AUTH_LOCATION is not set") + } + + contents, err := ioutil.ReadFile(fileLocation) + if err != nil { + return s, err + } + + // Auth file might be encoded + decoded, err := decode(contents) + if err != nil { + return s, err + } + + authFile := map[string]interface{}{} + err = json.Unmarshal(decoded, &authFile) + if err != nil { + return s, err + } + + s.Values = map[string]string{} + s.setKeyValue(ClientID, authFile["clientId"]) + s.setKeyValue(ClientSecret, authFile["clientSecret"]) + s.setKeyValue(CertificatePath, authFile["clientCertificate"]) + s.setKeyValue(CertificatePassword, authFile["clientCertificatePassword"]) + s.setKeyValue(SubscriptionID, authFile["subscriptionId"]) + s.setKeyValue(TenantID, authFile["tenantId"]) + s.setKeyValue(ActiveDirectoryEndpoint, authFile["activeDirectoryEndpointUrl"]) + s.setKeyValue(ResourceManagerEndpoint, authFile["resourceManagerEndpointUrl"]) + s.setKeyValue(GraphResourceID, authFile["activeDirectoryGraphResourceId"]) + s.setKeyValue(SQLManagementEndpoint, authFile["sqlManagementEndpointUrl"]) + s.setKeyValue(GalleryEndpoint, authFile["galleryEndpointUrl"]) + s.setKeyValue(ManagementEndpoint, authFile["managementEndpointUrl"]) + return s, nil +} + +// FileSettings contains the available authentication settings. +type FileSettings struct { + Values map[string]string +} + +// GetSubscriptionID returns the available subscription ID or an empty string. +func (settings FileSettings) GetSubscriptionID() string { + return settings.Values[SubscriptionID] +} + +// adds the specified value to the Values map if it isn't nil +func (settings FileSettings) setKeyValue(key string, val interface{}) { + if val != nil { + settings.Values[key] = val.(string) + } +} + +// returns the specified AAD endpoint or the public cloud endpoint if unspecified +func (settings FileSettings) getAADEndpoint() string { + if v, ok := settings.Values[ActiveDirectoryEndpoint]; ok { + return v + } + return azure.PublicCloud.ActiveDirectoryEndpoint +} + +// ServicePrincipalTokenFromClientCredentials creates a ServicePrincipalToken from the available client credentials. +func (settings FileSettings) ServicePrincipalTokenFromClientCredentials(baseURI string) (*adal.ServicePrincipalToken, error) { + resource, err := settings.getResourceForToken(baseURI) + if err != nil { + return nil, err + } + return settings.ServicePrincipalTokenFromClientCredentialsWithResource(resource) +} + +// ClientCredentialsAuthorizer creates an authorizer from the available client credentials. +func (settings FileSettings) ClientCredentialsAuthorizer(baseURI string) (autorest.Authorizer, error) { + resource, err := settings.getResourceForToken(baseURI) + if err != nil { + return nil, err + } + return settings.ClientCredentialsAuthorizerWithResource(resource) +} + +// ServicePrincipalTokenFromClientCredentialsWithResource creates a ServicePrincipalToken +// from the available client credentials and the specified resource. +func (settings FileSettings) ServicePrincipalTokenFromClientCredentialsWithResource(resource string) (*adal.ServicePrincipalToken, error) { + if _, ok := settings.Values[ClientSecret]; !ok { + return nil, errors.New("missing client secret") + } + config, err := adal.NewOAuthConfig(settings.getAADEndpoint(), settings.Values[TenantID]) + if err != nil { + return nil, err + } + return adal.NewServicePrincipalToken(*config, settings.Values[ClientID], settings.Values[ClientSecret], resource) +} + +func (settings FileSettings) clientCertificateConfigWithResource(resource string) (ClientCertificateConfig, error) { + if _, ok := settings.Values[CertificatePath]; !ok { + return ClientCertificateConfig{}, errors.New("missing certificate path") + } + cfg := NewClientCertificateConfig(settings.Values[CertificatePath], settings.Values[CertificatePassword], settings.Values[ClientID], settings.Values[TenantID]) + cfg.AADEndpoint = settings.getAADEndpoint() + cfg.Resource = resource + return cfg, nil +} + +// ClientCredentialsAuthorizerWithResource creates an authorizer from the available client credentials and the specified resource. +func (settings FileSettings) ClientCredentialsAuthorizerWithResource(resource string) (autorest.Authorizer, error) { + spToken, err := settings.ServicePrincipalTokenFromClientCredentialsWithResource(resource) + if err != nil { + return nil, err + } + return autorest.NewBearerAuthorizer(spToken), nil +} + +// ServicePrincipalTokenFromClientCertificate creates a ServicePrincipalToken from the available certificate credentials. +func (settings FileSettings) ServicePrincipalTokenFromClientCertificate(baseURI string) (*adal.ServicePrincipalToken, error) { + resource, err := settings.getResourceForToken(baseURI) + if err != nil { + return nil, err + } + return settings.ServicePrincipalTokenFromClientCertificateWithResource(resource) +} + +// ClientCertificateAuthorizer creates an authorizer from the available certificate credentials. +func (settings FileSettings) ClientCertificateAuthorizer(baseURI string) (autorest.Authorizer, error) { + resource, err := settings.getResourceForToken(baseURI) + if err != nil { + return nil, err + } + return settings.ClientCertificateAuthorizerWithResource(resource) +} + +// ServicePrincipalTokenFromClientCertificateWithResource creates a ServicePrincipalToken from the available certificate credentials. +func (settings FileSettings) ServicePrincipalTokenFromClientCertificateWithResource(resource string) (*adal.ServicePrincipalToken, error) { + cfg, err := settings.clientCertificateConfigWithResource(resource) + if err != nil { + return nil, err + } + return cfg.ServicePrincipalToken() +} + +// ClientCertificateAuthorizerWithResource creates an authorizer from the available certificate credentials and the specified resource. +func (settings FileSettings) ClientCertificateAuthorizerWithResource(resource string) (autorest.Authorizer, error) { + cfg, err := settings.clientCertificateConfigWithResource(resource) + if err != nil { + return nil, err + } + return cfg.Authorizer() +} + +func decode(b []byte) ([]byte, error) { + reader, enc := utfbom.Skip(bytes.NewReader(b)) + + switch enc { + case utfbom.UTF16LittleEndian: + u16 := make([]uint16, (len(b)/2)-1) + err := binary.Read(reader, binary.LittleEndian, &u16) + if err != nil { + return nil, err + } + return []byte(string(utf16.Decode(u16))), nil + case utfbom.UTF16BigEndian: + u16 := make([]uint16, (len(b)/2)-1) + err := binary.Read(reader, binary.BigEndian, &u16) + if err != nil { + return nil, err + } + return []byte(string(utf16.Decode(u16))), nil + } + return ioutil.ReadAll(reader) +} + +func (settings FileSettings) getResourceForToken(baseURI string) (string, error) { + // Compare dafault base URI from the SDK to the endpoints from the public cloud + // Base URI and token resource are the same string. This func finds the authentication + // file field that matches the SDK base URI. The SDK defines the public cloud + // endpoint as its default base URI + if !strings.HasSuffix(baseURI, "/") { + baseURI += "/" + } + switch baseURI { + case azure.PublicCloud.ServiceManagementEndpoint: + return settings.Values[ManagementEndpoint], nil + case azure.PublicCloud.ResourceManagerEndpoint: + return settings.Values[ResourceManagerEndpoint], nil + case azure.PublicCloud.ActiveDirectoryEndpoint: + return settings.Values[ActiveDirectoryEndpoint], nil + case azure.PublicCloud.GalleryEndpoint: + return settings.Values[GalleryEndpoint], nil + case azure.PublicCloud.GraphEndpoint: + return settings.Values[GraphResourceID], nil + } + return "", fmt.Errorf("auth: base URI not found in endpoints") +} + +// NewClientCredentialsConfig creates an AuthorizerConfig object configured to obtain an Authorizer through Client Credentials. +// Defaults to Public Cloud and Resource Manager Endpoint. +func NewClientCredentialsConfig(clientID string, clientSecret string, tenantID string) ClientCredentialsConfig { + return ClientCredentialsConfig{ + ClientID: clientID, + ClientSecret: clientSecret, + TenantID: tenantID, + Resource: azure.PublicCloud.ResourceManagerEndpoint, + AADEndpoint: azure.PublicCloud.ActiveDirectoryEndpoint, + } +} + +// NewClientCertificateConfig creates a ClientCertificateConfig object configured to obtain an Authorizer through client certificate. +// Defaults to Public Cloud and Resource Manager Endpoint. +func NewClientCertificateConfig(certificatePath string, certificatePassword string, clientID string, tenantID string) ClientCertificateConfig { + return ClientCertificateConfig{ + CertificatePath: certificatePath, + CertificatePassword: certificatePassword, + ClientID: clientID, + TenantID: tenantID, + Resource: azure.PublicCloud.ResourceManagerEndpoint, + AADEndpoint: azure.PublicCloud.ActiveDirectoryEndpoint, + } +} + +// NewUsernamePasswordConfig creates an UsernamePasswordConfig object configured to obtain an Authorizer through username and password. +// Defaults to Public Cloud and Resource Manager Endpoint. +func NewUsernamePasswordConfig(username string, password string, clientID string, tenantID string) UsernamePasswordConfig { + return UsernamePasswordConfig{ + Username: username, + Password: password, + ClientID: clientID, + TenantID: tenantID, + Resource: azure.PublicCloud.ResourceManagerEndpoint, + AADEndpoint: azure.PublicCloud.ActiveDirectoryEndpoint, + } +} + +// NewMSIConfig creates an MSIConfig object configured to obtain an Authorizer through MSI. +func NewMSIConfig() MSIConfig { + return MSIConfig{ + Resource: azure.PublicCloud.ResourceManagerEndpoint, + } +} + +// NewDeviceFlowConfig creates a DeviceFlowConfig object configured to obtain an Authorizer through device flow. +// Defaults to Public Cloud and Resource Manager Endpoint. +func NewDeviceFlowConfig(clientID string, tenantID string) DeviceFlowConfig { + return DeviceFlowConfig{ + ClientID: clientID, + TenantID: tenantID, + Resource: azure.PublicCloud.ResourceManagerEndpoint, + AADEndpoint: azure.PublicCloud.ActiveDirectoryEndpoint, + } +} + +//AuthorizerConfig provides an authorizer from the configuration provided. +type AuthorizerConfig interface { + Authorizer() (autorest.Authorizer, error) +} + +// ClientCredentialsConfig provides the options to get a bearer authorizer from client credentials. +type ClientCredentialsConfig struct { + ClientID string + ClientSecret string + TenantID string + AuxTenants []string + AADEndpoint string + Resource string +} + +// ServicePrincipalToken creates a ServicePrincipalToken from client credentials. +func (ccc ClientCredentialsConfig) ServicePrincipalToken() (*adal.ServicePrincipalToken, error) { + oauthConfig, err := adal.NewOAuthConfig(ccc.AADEndpoint, ccc.TenantID) + if err != nil { + return nil, err + } + return adal.NewServicePrincipalToken(*oauthConfig, ccc.ClientID, ccc.ClientSecret, ccc.Resource) +} + +// MultiTenantServicePrincipalToken creates a MultiTenantServicePrincipalToken from client credentials. +func (ccc ClientCredentialsConfig) MultiTenantServicePrincipalToken() (*adal.MultiTenantServicePrincipalToken, error) { + oauthConfig, err := adal.NewMultiTenantOAuthConfig(ccc.AADEndpoint, ccc.TenantID, ccc.AuxTenants, adal.OAuthOptions{}) + if err != nil { + return nil, err + } + return adal.NewMultiTenantServicePrincipalToken(oauthConfig, ccc.ClientID, ccc.ClientSecret, ccc.Resource) +} + +// Authorizer gets the authorizer from client credentials. +func (ccc ClientCredentialsConfig) Authorizer() (autorest.Authorizer, error) { + if len(ccc.AuxTenants) == 0 { + spToken, err := ccc.ServicePrincipalToken() + if err != nil { + return nil, fmt.Errorf("failed to get SPT from client credentials: %v", err) + } + return autorest.NewBearerAuthorizer(spToken), nil + } + mtSPT, err := ccc.MultiTenantServicePrincipalToken() + if err != nil { + return nil, fmt.Errorf("failed to get multitenant SPT from client credentials: %v", err) + } + return autorest.NewMultiTenantServicePrincipalTokenAuthorizer(mtSPT), nil +} + +// ClientCertificateConfig provides the options to get a bearer authorizer from a client certificate. +type ClientCertificateConfig struct { + ClientID string + CertificatePath string + CertificatePassword string + TenantID string + AADEndpoint string + Resource string +} + +// ServicePrincipalToken creates a ServicePrincipalToken from client certificate. +func (ccc ClientCertificateConfig) ServicePrincipalToken() (*adal.ServicePrincipalToken, error) { + oauthConfig, err := adal.NewOAuthConfig(ccc.AADEndpoint, ccc.TenantID) + if err != nil { + return nil, err + } + certData, err := ioutil.ReadFile(ccc.CertificatePath) + if err != nil { + return nil, fmt.Errorf("failed to read the certificate file (%s): %v", ccc.CertificatePath, err) + } + certificate, rsaPrivateKey, err := decodePkcs12(certData, ccc.CertificatePassword) + if err != nil { + return nil, fmt.Errorf("failed to decode pkcs12 certificate while creating spt: %v", err) + } + return adal.NewServicePrincipalTokenFromCertificate(*oauthConfig, ccc.ClientID, certificate, rsaPrivateKey, ccc.Resource) +} + +// Authorizer gets an authorizer object from client certificate. +func (ccc ClientCertificateConfig) Authorizer() (autorest.Authorizer, error) { + spToken, err := ccc.ServicePrincipalToken() + if err != nil { + return nil, fmt.Errorf("failed to get oauth token from certificate auth: %v", err) + } + return autorest.NewBearerAuthorizer(spToken), nil +} + +// DeviceFlowConfig provides the options to get a bearer authorizer using device flow authentication. +type DeviceFlowConfig struct { + ClientID string + TenantID string + AADEndpoint string + Resource string +} + +// Authorizer gets the authorizer from device flow. +func (dfc DeviceFlowConfig) Authorizer() (autorest.Authorizer, error) { + spToken, err := dfc.ServicePrincipalToken() + if err != nil { + return nil, fmt.Errorf("failed to get oauth token from device flow: %v", err) + } + return autorest.NewBearerAuthorizer(spToken), nil +} + +// ServicePrincipalToken gets the service principal token from device flow. +func (dfc DeviceFlowConfig) ServicePrincipalToken() (*adal.ServicePrincipalToken, error) { + oauthConfig, err := adal.NewOAuthConfig(dfc.AADEndpoint, dfc.TenantID) + if err != nil { + return nil, err + } + oauthClient := &autorest.Client{} + deviceCode, err := adal.InitiateDeviceAuth(oauthClient, *oauthConfig, dfc.ClientID, dfc.Resource) + if err != nil { + return nil, fmt.Errorf("failed to start device auth flow: %s", err) + } + log.Println(*deviceCode.Message) + token, err := adal.WaitForUserCompletion(oauthClient, deviceCode) + if err != nil { + return nil, fmt.Errorf("failed to finish device auth flow: %s", err) + } + return adal.NewServicePrincipalTokenFromManualToken(*oauthConfig, dfc.ClientID, dfc.Resource, *token) +} + +func decodePkcs12(pkcs []byte, password string) (*x509.Certificate, *rsa.PrivateKey, error) { + privateKey, certificate, err := pkcs12.Decode(pkcs, password) + if err != nil { + return nil, nil, err + } + + rsaPrivateKey, isRsaKey := privateKey.(*rsa.PrivateKey) + if !isRsaKey { + return nil, nil, fmt.Errorf("PKCS#12 certificate must contain an RSA private key") + } + + return certificate, rsaPrivateKey, nil +} + +// UsernamePasswordConfig provides the options to get a bearer authorizer from a username and a password. +type UsernamePasswordConfig struct { + ClientID string + Username string + Password string + TenantID string + AADEndpoint string + Resource string +} + +// ServicePrincipalToken creates a ServicePrincipalToken from username and password. +func (ups UsernamePasswordConfig) ServicePrincipalToken() (*adal.ServicePrincipalToken, error) { + oauthConfig, err := adal.NewOAuthConfig(ups.AADEndpoint, ups.TenantID) + if err != nil { + return nil, err + } + return adal.NewServicePrincipalTokenFromUsernamePassword(*oauthConfig, ups.ClientID, ups.Username, ups.Password, ups.Resource) +} + +// Authorizer gets the authorizer from a username and a password. +func (ups UsernamePasswordConfig) Authorizer() (autorest.Authorizer, error) { + spToken, err := ups.ServicePrincipalToken() + if err != nil { + return nil, fmt.Errorf("failed to get oauth token from username and password auth: %v", err) + } + return autorest.NewBearerAuthorizer(spToken), nil +} + +// MSIConfig provides the options to get a bearer authorizer through MSI. +type MSIConfig struct { + Resource string + ClientID string +} + +// Authorizer gets the authorizer from MSI. +func (mc MSIConfig) Authorizer() (autorest.Authorizer, error) { + msiEndpoint, err := adal.GetMSIEndpoint() + if err != nil { + return nil, err + } + + var spToken *adal.ServicePrincipalToken + if mc.ClientID == "" { + spToken, err = adal.NewServicePrincipalTokenFromMSI(msiEndpoint, mc.Resource) + if err != nil { + return nil, fmt.Errorf("failed to get oauth token from MSI: %v", err) + } + } else { + spToken, err = adal.NewServicePrincipalTokenFromMSIWithUserAssignedID(msiEndpoint, mc.Resource, mc.ClientID) + if err != nil { + return nil, fmt.Errorf("failed to get oauth token from MSI for user assigned identity: %v", err) + } + } + + return autorest.NewBearerAuthorizer(spToken), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go.mod new file mode 100644 index 00000000000..43fa1b79206 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go.mod @@ -0,0 +1,11 @@ +module github.com/Azure/go-autorest/autorest/azure/auth + +go 1.12 + +require ( + github.com/Azure/go-autorest/autorest v0.9.2 + github.com/Azure/go-autorest/autorest/adal v0.7.0 + github.com/Azure/go-autorest/autorest/azure/cli v0.3.0 + github.com/dimchansky/utfbom v1.1.0 + golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go.sum b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go.sum new file mode 100644 index 00000000000..c462a7d4d9d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go.sum @@ -0,0 +1,38 @@ +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest v0.9.2 h1:6AWuh3uWrsZJcNoCHrCF/+g4aKPCU39kaMO6/qrnK/4= +github.com/Azure/go-autorest/autorest v0.9.2/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.6.0 h1:UCTq22yE3RPgbU/8u4scfnnzuCW6pwQ9n+uBtV78ouo= +github.com/Azure/go-autorest/autorest/adal v0.6.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/adal v0.7.0 h1:PUMxSVw3tEImG0JTRqbxjXLKCSoPk7DartDELqlOuiI= +github.com/Azure/go-autorest/autorest/adal v0.7.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.0 h1:5PAqnv+CSTwW9mlZWZAizmzrazFWEgZykEZXpr2hDtY= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.0/go.mod h1:rNYMNAefZMRowqCV0cVhr/YDW5dD7afFq9nXAXL4ykE= +github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480 h1:O5YqonU5IWby+w98jVUG9h7zlCWCcH4RHyPVReBmhzk= +golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e h1:nFYrTHrdrAOpShe27kaFHjsqYSEQ0KWqdWLu3xuZJts= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go_mod_tidy_hack.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go_mod_tidy_hack.go new file mode 100644 index 00000000000..2f09cd177aa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/auth/go_mod_tidy_hack.go @@ -0,0 +1,24 @@ +// +build modhack + +package auth + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of +// the resultant binary. + +// Necessary for safely adding multi-module repo. +// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository +import _ "github.com/Azure/go-autorest/autorest" diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/azure.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/azure.go index 18d029526ff..26be936b7e5 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/azure.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/azure.go @@ -17,6 +17,7 @@ package azure // limitations under the License. import ( + "bytes" "encoding/json" "fmt" "io/ioutil" @@ -44,11 +45,12 @@ const ( // ServiceError encapsulates the error response from an Azure service. // It adhears to the OData v4 specification for error responses. type ServiceError struct { - Code string `json:"code"` - Message string `json:"message"` - Target *string `json:"target"` - Details []map[string]interface{} `json:"details"` - InnerError map[string]interface{} `json:"innererror"` + Code string `json:"code"` + Message string `json:"message"` + Target *string `json:"target"` + Details []map[string]interface{} `json:"details"` + InnerError map[string]interface{} `json:"innererror"` + AdditionalInfo []map[string]interface{} `json:"additionalInfo"` } func (se ServiceError) Error() string { @@ -74,6 +76,14 @@ func (se ServiceError) Error() string { result += fmt.Sprintf(" InnerError=%v", string(d)) } + if se.AdditionalInfo != nil { + d, err := json.Marshal(se.AdditionalInfo) + if err != nil { + result += fmt.Sprintf(" AdditionalInfo=%v", se.AdditionalInfo) + } + result += fmt.Sprintf(" AdditionalInfo=%v", string(d)) + } + return result } @@ -86,44 +96,47 @@ func (se *ServiceError) UnmarshalJSON(b []byte) error { // http://docs.oasis-open.org/odata/odata-json-format/v4.0/os/odata-json-format-v4.0-os.html#_Toc372793091 type serviceError1 struct { - Code string `json:"code"` - Message string `json:"message"` - Target *string `json:"target"` - Details []map[string]interface{} `json:"details"` - InnerError map[string]interface{} `json:"innererror"` + Code string `json:"code"` + Message string `json:"message"` + Target *string `json:"target"` + Details []map[string]interface{} `json:"details"` + InnerError map[string]interface{} `json:"innererror"` + AdditionalInfo []map[string]interface{} `json:"additionalInfo"` } type serviceError2 struct { - Code string `json:"code"` - Message string `json:"message"` - Target *string `json:"target"` - Details map[string]interface{} `json:"details"` - InnerError map[string]interface{} `json:"innererror"` + Code string `json:"code"` + Message string `json:"message"` + Target *string `json:"target"` + Details map[string]interface{} `json:"details"` + InnerError map[string]interface{} `json:"innererror"` + AdditionalInfo []map[string]interface{} `json:"additionalInfo"` } se1 := serviceError1{} err := json.Unmarshal(b, &se1) if err == nil { - se.populate(se1.Code, se1.Message, se1.Target, se1.Details, se1.InnerError) + se.populate(se1.Code, se1.Message, se1.Target, se1.Details, se1.InnerError, se1.AdditionalInfo) return nil } se2 := serviceError2{} err = json.Unmarshal(b, &se2) if err == nil { - se.populate(se2.Code, se2.Message, se2.Target, nil, se2.InnerError) + se.populate(se2.Code, se2.Message, se2.Target, nil, se2.InnerError, se2.AdditionalInfo) se.Details = append(se.Details, se2.Details) return nil } return err } -func (se *ServiceError) populate(code, message string, target *string, details []map[string]interface{}, inner map[string]interface{}) { +func (se *ServiceError) populate(code, message string, target *string, details []map[string]interface{}, inner map[string]interface{}, additional []map[string]interface{}) { se.Code = code se.Message = message se.Target = target se.Details = details se.InnerError = inner + se.AdditionalInfo = additional } // RequestError describes an error response returned by Azure service. @@ -131,7 +144,7 @@ type RequestError struct { autorest.DetailedError // The error returned by the Azure service. - ServiceError *ServiceError `json:"error"` + ServiceError *ServiceError `json:"error" xml:"Error"` // The request id (from the x-ms-request-id-header) of the request. RequestID string @@ -273,22 +286,43 @@ func WithErrorUnlessStatusCode(codes ...int) autorest.RespondDecorator { var e RequestError defer resp.Body.Close() + encodedAs := autorest.EncodedAsJSON + if strings.Contains(resp.Header.Get("Content-Type"), "xml") { + encodedAs = autorest.EncodedAsXML + } + // Copy and replace the Body in case it does not contain an error object. // This will leave the Body available to the caller. - b, decodeErr := autorest.CopyAndDecode(autorest.EncodedAsJSON, resp.Body, &e) + b, decodeErr := autorest.CopyAndDecode(encodedAs, resp.Body, &e) resp.Body = ioutil.NopCloser(&b) if decodeErr != nil { return fmt.Errorf("autorest/azure: error response cannot be parsed: %q error: %v", b.String(), decodeErr) - } else if e.ServiceError == nil { + } + if e.ServiceError == nil { // Check if error is unwrapped ServiceError - if err := json.Unmarshal(b.Bytes(), &e.ServiceError); err != nil || e.ServiceError.Message == "" { - e.ServiceError = &ServiceError{ - Code: "Unknown", - Message: "Unknown service error", - } + decoder := autorest.NewDecoder(encodedAs, bytes.NewReader(b.Bytes())) + if err := decoder.Decode(&e.ServiceError); err != nil { + return err } } + if e.ServiceError.Message == "" { + // if we're here it means the returned error wasn't OData v4 compliant. + // try to unmarshal the body in hopes of getting something. + rawBody := map[string]interface{}{} + decoder := autorest.NewDecoder(encodedAs, bytes.NewReader(b.Bytes())) + if err := decoder.Decode(&rawBody); err != nil { + return err + } + e.ServiceError = &ServiceError{ + Code: "Unknown", + Message: "Unknown service error", + } + if len(rawBody) > 0 { + e.ServiceError.Details = []map[string]interface{}{rawBody} + } + } + e.Response = resp e.RequestID = ExtractRequestID(resp) if e.StatusCode == nil { e.StatusCode = resp.StatusCode diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go.mod new file mode 100644 index 00000000000..03ad580d614 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go.mod @@ -0,0 +1,11 @@ +module github.com/Azure/go-autorest/autorest/azure/cli + +go 1.12 + +require ( + github.com/Azure/go-autorest/autorest v0.9.0 + github.com/Azure/go-autorest/autorest/adal v0.6.0 + github.com/Azure/go-autorest/autorest/date v0.2.0 + github.com/dimchansky/utfbom v1.1.0 + github.com/mitchellh/go-homedir v1.1.0 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go.sum b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go.sum new file mode 100644 index 00000000000..7a8b1f23f6f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go.sum @@ -0,0 +1,29 @@ +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/adal v0.6.0 h1:UCTq22yE3RPgbU/8u4scfnnzuCW6pwQ9n+uBtV78ouo= +github.com/Azure/go-autorest/autorest/adal v0.6.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= +github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= +github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= +github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go_mod_tidy_hack.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go_mod_tidy_hack.go new file mode 100644 index 00000000000..618bed392fc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/go_mod_tidy_hack.go @@ -0,0 +1,24 @@ +// +build modhack + +package cli + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of +// the resultant binary. + +// Necessary for safely adding multi-module repo. +// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository +import _ "github.com/Azure/go-autorest/autorest" diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/profile.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/profile.go new file mode 100644 index 00000000000..f45c3a516d9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/profile.go @@ -0,0 +1,83 @@ +package cli + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "os" + "path/filepath" + + "github.com/dimchansky/utfbom" + "github.com/mitchellh/go-homedir" +) + +// Profile represents a Profile from the Azure CLI +type Profile struct { + InstallationID string `json:"installationId"` + Subscriptions []Subscription `json:"subscriptions"` +} + +// Subscription represents a Subscription from the Azure CLI +type Subscription struct { + EnvironmentName string `json:"environmentName"` + ID string `json:"id"` + IsDefault bool `json:"isDefault"` + Name string `json:"name"` + State string `json:"state"` + TenantID string `json:"tenantId"` + User *User `json:"user"` +} + +// User represents a User from the Azure CLI +type User struct { + Name string `json:"name"` + Type string `json:"type"` +} + +const azureProfileJSON = "azureProfile.json" + +func configDir() string { + return os.Getenv("AZURE_CONFIG_DIR") +} + +// ProfilePath returns the path where the Azure Profile is stored from the Azure CLI +func ProfilePath() (string, error) { + if cfgDir := configDir(); cfgDir != "" { + return filepath.Join(cfgDir, azureProfileJSON), nil + } + return homedir.Expand("~/.azure/" + azureProfileJSON) +} + +// LoadProfile restores a Profile object from a file located at 'path'. +func LoadProfile(path string) (result Profile, err error) { + var contents []byte + contents, err = ioutil.ReadFile(path) + if err != nil { + err = fmt.Errorf("failed to open file (%s) while loading token: %v", path, err) + return + } + reader := utfbom.SkipOnly(bytes.NewReader(contents)) + + dec := json.NewDecoder(reader) + if err = dec.Decode(&result); err != nil { + err = fmt.Errorf("failed to decode contents of file (%s) into a Profile representation: %v", path, err) + return + } + + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/token.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/token.go new file mode 100644 index 00000000000..44ff446f669 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/cli/token.go @@ -0,0 +1,175 @@ +package cli + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + "os/exec" + "path/filepath" + "regexp" + "runtime" + "strconv" + "time" + + "github.com/Azure/go-autorest/autorest/adal" + "github.com/Azure/go-autorest/autorest/date" + "github.com/mitchellh/go-homedir" +) + +// Token represents an AccessToken from the Azure CLI +type Token struct { + AccessToken string `json:"accessToken"` + Authority string `json:"_authority"` + ClientID string `json:"_clientId"` + ExpiresOn string `json:"expiresOn"` + IdentityProvider string `json:"identityProvider"` + IsMRRT bool `json:"isMRRT"` + RefreshToken string `json:"refreshToken"` + Resource string `json:"resource"` + TokenType string `json:"tokenType"` + UserID string `json:"userId"` +} + +const accessTokensJSON = "accessTokens.json" + +// ToADALToken converts an Azure CLI `Token`` to an `adal.Token`` +func (t Token) ToADALToken() (converted adal.Token, err error) { + tokenExpirationDate, err := ParseExpirationDate(t.ExpiresOn) + if err != nil { + err = fmt.Errorf("Error parsing Token Expiration Date %q: %+v", t.ExpiresOn, err) + return + } + + difference := tokenExpirationDate.Sub(date.UnixEpoch()) + + converted = adal.Token{ + AccessToken: t.AccessToken, + Type: t.TokenType, + ExpiresIn: "3600", + ExpiresOn: json.Number(strconv.Itoa(int(difference.Seconds()))), + RefreshToken: t.RefreshToken, + Resource: t.Resource, + } + return +} + +// AccessTokensPath returns the path where access tokens are stored from the Azure CLI +// TODO(#199): add unit test. +func AccessTokensPath() (string, error) { + // Azure-CLI allows user to customize the path of access tokens through environment variable. + if accessTokenPath := os.Getenv("AZURE_ACCESS_TOKEN_FILE"); accessTokenPath != "" { + return accessTokenPath, nil + } + + // Azure-CLI allows user to customize the path to Azure config directory through environment variable. + if cfgDir := configDir(); cfgDir != "" { + return filepath.Join(cfgDir, accessTokensJSON), nil + } + + // Fallback logic to default path on non-cloud-shell environment. + // TODO(#200): remove the dependency on hard-coding path. + return homedir.Expand("~/.azure/" + accessTokensJSON) +} + +// ParseExpirationDate parses either a Azure CLI or CloudShell date into a time object +func ParseExpirationDate(input string) (*time.Time, error) { + // CloudShell (and potentially the Azure CLI in future) + expirationDate, cloudShellErr := time.Parse(time.RFC3339, input) + if cloudShellErr != nil { + // Azure CLI (Python) e.g. 2017-08-31 19:48:57.998857 (plus the local timezone) + const cliFormat = "2006-01-02 15:04:05.999999" + expirationDate, cliErr := time.ParseInLocation(cliFormat, input, time.Local) + if cliErr == nil { + return &expirationDate, nil + } + + return nil, fmt.Errorf("Error parsing expiration date %q.\n\nCloudShell Error: \n%+v\n\nCLI Error:\n%+v", input, cloudShellErr, cliErr) + } + + return &expirationDate, nil +} + +// LoadTokens restores a set of Token objects from a file located at 'path'. +func LoadTokens(path string) ([]Token, error) { + file, err := os.Open(path) + if err != nil { + return nil, fmt.Errorf("failed to open file (%s) while loading token: %v", path, err) + } + defer file.Close() + + var tokens []Token + + dec := json.NewDecoder(file) + if err = dec.Decode(&tokens); err != nil { + return nil, fmt.Errorf("failed to decode contents of file (%s) into a `cli.Token` representation: %v", path, err) + } + + return tokens, nil +} + +// GetTokenFromCLI gets a token using Azure CLI 2.0 for local development scenarios. +func GetTokenFromCLI(resource string) (*Token, error) { + // This is the path that a developer can set to tell this class what the install path for Azure CLI is. + const azureCLIPath = "AzureCLIPath" + + // The default install paths are used to find Azure CLI. This is for security, so that any path in the calling program's Path environment is not used to execute Azure CLI. + azureCLIDefaultPathWindows := fmt.Sprintf("%s\\Microsoft SDKs\\Azure\\CLI2\\wbin; %s\\Microsoft SDKs\\Azure\\CLI2\\wbin", os.Getenv("ProgramFiles(x86)"), os.Getenv("ProgramFiles")) + + // Default path for non-Windows. + const azureCLIDefaultPath = "/bin:/sbin:/usr/bin:/usr/local/bin" + + // Validate resource, since it gets sent as a command line argument to Azure CLI + const invalidResourceErrorTemplate = "Resource %s is not in expected format. Only alphanumeric characters, [dot], [colon], [hyphen], and [forward slash] are allowed." + match, err := regexp.MatchString("^[0-9a-zA-Z-.:/]+$", resource) + if err != nil { + return nil, err + } + if !match { + return nil, fmt.Errorf(invalidResourceErrorTemplate, resource) + } + + // Execute Azure CLI to get token + var cliCmd *exec.Cmd + if runtime.GOOS == "windows" { + cliCmd = exec.Command(fmt.Sprintf("%s\\system32\\cmd.exe", os.Getenv("windir"))) + cliCmd.Env = os.Environ() + cliCmd.Env = append(cliCmd.Env, fmt.Sprintf("PATH=%s;%s", os.Getenv(azureCLIPath), azureCLIDefaultPathWindows)) + cliCmd.Args = append(cliCmd.Args, "/c", "az") + } else { + cliCmd = exec.Command("az") + cliCmd.Env = os.Environ() + cliCmd.Env = append(cliCmd.Env, fmt.Sprintf("PATH=%s:%s", os.Getenv(azureCLIPath), azureCLIDefaultPath)) + } + cliCmd.Args = append(cliCmd.Args, "account", "get-access-token", "-o", "json", "--resource", resource) + + var stderr bytes.Buffer + cliCmd.Stderr = &stderr + + output, err := cliCmd.Output() + if err != nil { + return nil, fmt.Errorf("Invoking Azure CLI failed with the following error: %s", stderr.String()) + } + + tokenResponse := Token{} + err = json.Unmarshal(output, &tokenResponse) + if err != nil { + return nil, err + } + + return &tokenResponse, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/environments.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/environments.go index 7e41f7fd99c..6c20b8179ab 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/environments.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/environments.go @@ -22,9 +22,14 @@ import ( "strings" ) -// EnvironmentFilepathName captures the name of the environment variable containing the path to the file -// to be used while populating the Azure Environment. -const EnvironmentFilepathName = "AZURE_ENVIRONMENT_FILEPATH" +const ( + // EnvironmentFilepathName captures the name of the environment variable containing the path to the file + // to be used while populating the Azure Environment. + EnvironmentFilepathName = "AZURE_ENVIRONMENT_FILEPATH" + + // NotAvailable is used for endpoints and resource IDs that are not available for a given cloud. + NotAvailable = "N/A" +) var environments = map[string]Environment{ "AZURECHINACLOUD": ChinaCloud, @@ -33,28 +38,40 @@ var environments = map[string]Environment{ "AZUREUSGOVERNMENTCLOUD": USGovernmentCloud, } +// ResourceIdentifier contains a set of Azure resource IDs. +type ResourceIdentifier struct { + Graph string `json:"graph"` + KeyVault string `json:"keyVault"` + Datalake string `json:"datalake"` + Batch string `json:"batch"` + OperationalInsights string `json:"operationalInsights"` + Storage string `json:"storage"` +} + // Environment represents a set of endpoints for each of Azure's Clouds. type Environment struct { - Name string `json:"name"` - ManagementPortalURL string `json:"managementPortalURL"` - PublishSettingsURL string `json:"publishSettingsURL"` - ServiceManagementEndpoint string `json:"serviceManagementEndpoint"` - ResourceManagerEndpoint string `json:"resourceManagerEndpoint"` - ActiveDirectoryEndpoint string `json:"activeDirectoryEndpoint"` - GalleryEndpoint string `json:"galleryEndpoint"` - KeyVaultEndpoint string `json:"keyVaultEndpoint"` - GraphEndpoint string `json:"graphEndpoint"` - ServiceBusEndpoint string `json:"serviceBusEndpoint"` - BatchManagementEndpoint string `json:"batchManagementEndpoint"` - StorageEndpointSuffix string `json:"storageEndpointSuffix"` - SQLDatabaseDNSSuffix string `json:"sqlDatabaseDNSSuffix"` - TrafficManagerDNSSuffix string `json:"trafficManagerDNSSuffix"` - KeyVaultDNSSuffix string `json:"keyVaultDNSSuffix"` - ServiceBusEndpointSuffix string `json:"serviceBusEndpointSuffix"` - ServiceManagementVMDNSSuffix string `json:"serviceManagementVMDNSSuffix"` - ResourceManagerVMDNSSuffix string `json:"resourceManagerVMDNSSuffix"` - ContainerRegistryDNSSuffix string `json:"containerRegistryDNSSuffix"` - TokenAudience string `json:"tokenAudience"` + Name string `json:"name"` + ManagementPortalURL string `json:"managementPortalURL"` + PublishSettingsURL string `json:"publishSettingsURL"` + ServiceManagementEndpoint string `json:"serviceManagementEndpoint"` + ResourceManagerEndpoint string `json:"resourceManagerEndpoint"` + ActiveDirectoryEndpoint string `json:"activeDirectoryEndpoint"` + GalleryEndpoint string `json:"galleryEndpoint"` + KeyVaultEndpoint string `json:"keyVaultEndpoint"` + GraphEndpoint string `json:"graphEndpoint"` + ServiceBusEndpoint string `json:"serviceBusEndpoint"` + BatchManagementEndpoint string `json:"batchManagementEndpoint"` + StorageEndpointSuffix string `json:"storageEndpointSuffix"` + SQLDatabaseDNSSuffix string `json:"sqlDatabaseDNSSuffix"` + TrafficManagerDNSSuffix string `json:"trafficManagerDNSSuffix"` + KeyVaultDNSSuffix string `json:"keyVaultDNSSuffix"` + ServiceBusEndpointSuffix string `json:"serviceBusEndpointSuffix"` + ServiceManagementVMDNSSuffix string `json:"serviceManagementVMDNSSuffix"` + ResourceManagerVMDNSSuffix string `json:"resourceManagerVMDNSSuffix"` + ContainerRegistryDNSSuffix string `json:"containerRegistryDNSSuffix"` + CosmosDBDNSSuffix string `json:"cosmosDBDNSSuffix"` + TokenAudience string `json:"tokenAudience"` + ResourceIdentifiers ResourceIdentifier `json:"resourceIdentifiers"` } var ( @@ -79,7 +96,16 @@ var ( ServiceManagementVMDNSSuffix: "cloudapp.net", ResourceManagerVMDNSSuffix: "cloudapp.azure.com", ContainerRegistryDNSSuffix: "azurecr.io", + CosmosDBDNSSuffix: "documents.azure.com", TokenAudience: "https://management.azure.com/", + ResourceIdentifiers: ResourceIdentifier{ + Graph: "https://graph.windows.net/", + KeyVault: "https://vault.azure.net", + Datalake: "https://datalake.azure.net/", + Batch: "https://batch.core.windows.net/", + OperationalInsights: "https://api.loganalytics.io", + Storage: "https://storage.azure.com/", + }, } // USGovernmentCloud is the cloud environment for the US Government @@ -102,8 +128,17 @@ var ( ServiceBusEndpointSuffix: "servicebus.usgovcloudapi.net", ServiceManagementVMDNSSuffix: "usgovcloudapp.net", ResourceManagerVMDNSSuffix: "cloudapp.windowsazure.us", - ContainerRegistryDNSSuffix: "azurecr.io", + ContainerRegistryDNSSuffix: "azurecr.us", + CosmosDBDNSSuffix: "documents.azure.us", TokenAudience: "https://management.usgovcloudapi.net/", + ResourceIdentifiers: ResourceIdentifier{ + Graph: "https://graph.windows.net/", + KeyVault: "https://vault.usgovcloudapi.net", + Datalake: NotAvailable, + Batch: "https://batch.core.usgovcloudapi.net/", + OperationalInsights: "https://api.loganalytics.us", + Storage: "https://storage.azure.com/", + }, } // ChinaCloud is the cloud environment operated in China @@ -126,8 +161,17 @@ var ( ServiceBusEndpointSuffix: "servicebus.chinacloudapi.cn", ServiceManagementVMDNSSuffix: "chinacloudapp.cn", ResourceManagerVMDNSSuffix: "cloudapp.azure.cn", - ContainerRegistryDNSSuffix: "azurecr.io", + ContainerRegistryDNSSuffix: "azurecr.cn", + CosmosDBDNSSuffix: "documents.azure.cn", TokenAudience: "https://management.chinacloudapi.cn/", + ResourceIdentifiers: ResourceIdentifier{ + Graph: "https://graph.chinacloudapi.cn/", + KeyVault: "https://vault.azure.cn", + Datalake: NotAvailable, + Batch: "https://batch.chinacloudapi.cn/", + OperationalInsights: NotAvailable, + Storage: "https://storage.azure.com/", + }, } // GermanCloud is the cloud environment operated in Germany @@ -150,8 +194,17 @@ var ( ServiceBusEndpointSuffix: "servicebus.cloudapi.de", ServiceManagementVMDNSSuffix: "azurecloudapp.de", ResourceManagerVMDNSSuffix: "cloudapp.microsoftazure.de", - ContainerRegistryDNSSuffix: "azurecr.io", + ContainerRegistryDNSSuffix: NotAvailable, + CosmosDBDNSSuffix: "documents.microsoftazure.de", TokenAudience: "https://management.microsoftazure.de/", + ResourceIdentifiers: ResourceIdentifier{ + Graph: "https://graph.cloudapi.de/", + KeyVault: "https://vault.microsoftazure.de", + Datalake: NotAvailable, + Batch: "https://batch.cloudapi.de/", + OperationalInsights: NotAvailable, + Storage: "https://storage.azure.com/", + }, } ) diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/rp.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/rp.go index 65ad0afc82d..c6d39f68665 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/rp.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/azure/rp.go @@ -47,11 +47,15 @@ func DoRetryWithRegistration(client autorest.Client) autorest.SendDecorator { if resp.StatusCode != http.StatusConflict || client.SkipResourceProviderRegistration { return resp, err } + var re RequestError - err = autorest.Respond( - resp, - autorest.ByUnmarshallingJSON(&re), - ) + if strings.Contains(r.Header.Get("Content-Type"), "xml") { + // XML errors (e.g. Storage Data Plane) only return the inner object + err = autorest.Respond(resp, autorest.ByUnmarshallingXML(&re.ServiceError)) + } else { + err = autorest.Respond(resp, autorest.ByUnmarshallingJSON(&re)) + } + if err != nil { return resp, err } @@ -64,7 +68,7 @@ func DoRetryWithRegistration(client autorest.Client) autorest.SendDecorator { } } } - return resp, fmt.Errorf("failed request: %s", err) + return resp, err }) } } @@ -140,8 +144,8 @@ func register(client autorest.Client, originalReq *http.Request, re RequestError } // poll for registered provisioning state - now := time.Now() - for err == nil && time.Since(now) < client.PollingDuration { + registrationStartTime := time.Now() + for err == nil && (client.PollingDuration == 0 || (client.PollingDuration != 0 && time.Since(registrationStartTime) < client.PollingDuration)) { // taken from the resources SDK // https://github.com/Azure/azure-sdk-for-go/blob/9f366792afa3e0ddaecdc860e793ba9d75e76c27/arm/resources/resources/providers.go#L45 preparer := autorest.CreatePreparer( @@ -183,7 +187,7 @@ func register(client autorest.Client, originalReq *http.Request, re RequestError return originalReq.Context().Err() } } - if !(time.Since(now) < client.PollingDuration) { + if client.PollingDuration != 0 && !(time.Since(registrationStartTime) < client.PollingDuration) { return errors.New("polling for resource provider registration has exceeded the polling duration") } return err diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/client.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/client.go index 4e92dcad077..1c6a0617a1f 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/client.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/client.go @@ -16,14 +16,16 @@ package autorest import ( "bytes" + "crypto/tls" "fmt" "io" "io/ioutil" "log" "net/http" - "net/http/cookiejar" - "runtime" + "strings" "time" + + "github.com/Azure/go-autorest/logger" ) const ( @@ -41,15 +43,6 @@ const ( ) var ( - // defaultUserAgent builds a string containing the Go version, system archityecture and OS, - // and the go-autorest version. - defaultUserAgent = fmt.Sprintf("Go/%s (%s-%s) go-autorest/%s", - runtime.Version(), - runtime.GOARCH, - runtime.GOOS, - Version(), - ) - // StatusCodesForRetry are a defined group of status code for which the client will retry StatusCodesForRetry = []int{ http.StatusRequestTimeout, // 408 @@ -78,6 +71,22 @@ type Response struct { *http.Response `json:"-"` } +// IsHTTPStatus returns true if the returned HTTP status code matches the provided status code. +// If there was no response (i.e. the underlying http.Response is nil) the return value is false. +func (r Response) IsHTTPStatus(statusCode int) bool { + if r.Response == nil { + return false + } + return r.Response.StatusCode == statusCode +} + +// HasHTTPStatus returns true if the returned HTTP status code matches one of the provided status codes. +// If there was no response (i.e. the underlying http.Response is nil) or not status codes are provided +// the return value is false. +func (r Response) HasHTTPStatus(statusCodes ...int) bool { + return ResponseHasStatusCode(r.Response, statusCodes...) +} + // LoggingInspector implements request and response inspectors that log the full request and // response to a supplied log. type LoggingInspector struct { @@ -153,6 +162,7 @@ type Client struct { PollingDelay time.Duration // PollingDuration sets the maximum polling time after which an error is returned. + // Setting this to zero will use the provided context to control the duration. PollingDuration time.Duration // RetryAttempts sets the default number of retry attempts for client. @@ -174,14 +184,32 @@ type Client struct { // NewClientWithUserAgent returns an instance of a Client with the UserAgent set to the passed // string. func NewClientWithUserAgent(ua string) Client { + return newClient(ua, tls.RenegotiateNever) +} + +// ClientOptions contains various Client configuration options. +type ClientOptions struct { + // UserAgent is an optional user-agent string to append to the default user agent. + UserAgent string + + // Renegotiation is an optional setting to control client-side TLS renegotiation. + Renegotiation tls.RenegotiationSupport +} + +// NewClientWithOptions returns an instance of a Client with the specified values. +func NewClientWithOptions(options ClientOptions) Client { + return newClient(options.UserAgent, options.Renegotiation) +} + +func newClient(ua string, renegotiation tls.RenegotiationSupport) Client { c := Client{ PollingDelay: DefaultPollingDelay, PollingDuration: DefaultPollingDuration, RetryAttempts: DefaultRetryAttempts, RetryDuration: DefaultRetryDuration, - UserAgent: defaultUserAgent, + UserAgent: UserAgent(), } - c.Sender = c.sender() + c.Sender = c.sender(renegotiation) c.AddToUserAgent(ua) return c } @@ -216,17 +244,25 @@ func (c Client) Do(r *http.Request) (*http.Response, error) { } return resp, NewErrorWithError(err, "autorest/Client", "Do", nil, "Preparing request failed") } - - resp, err := SendWithSender(c.sender(), r) + logger.Instance.WriteRequest(r, logger.Filter{ + Header: func(k string, v []string) (bool, []string) { + // remove the auth token from the log + if strings.EqualFold(k, "Authorization") || strings.EqualFold(k, "Ocp-Apim-Subscription-Key") { + v = []string{"**REDACTED**"} + } + return true, v + }, + }) + resp, err := SendWithSender(c.sender(tls.RenegotiateNever), r) + logger.Instance.WriteResponse(resp, logger.Filter{}) Respond(resp, c.ByInspecting()) return resp, err } // sender returns the Sender to which to send requests. -func (c Client) sender() Sender { +func (c Client) sender(renengotiation tls.RenegotiationSupport) Sender { if c.Sender == nil { - j, _ := cookiejar.New(nil) - return &http.Client{Jar: j} + return sender(renengotiation) } return c.Sender } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go.mod new file mode 100644 index 00000000000..3adc4804c3d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go.mod @@ -0,0 +1,5 @@ +module github.com/Azure/go-autorest/autorest/date + +go 1.12 + +require github.com/Azure/go-autorest/autorest v0.9.0 diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go.sum b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go.sum new file mode 100644 index 00000000000..9e2ee7a9484 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go.sum @@ -0,0 +1,16 @@ +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go_mod_tidy_hack.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go_mod_tidy_hack.go new file mode 100644 index 00000000000..55adf930f4a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/date/go_mod_tidy_hack.go @@ -0,0 +1,24 @@ +// +build modhack + +package date + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of +// the resultant binary. + +// Necessary for safely adding multi-module repo. +// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository +import _ "github.com/Azure/go-autorest/autorest" diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/go.mod new file mode 100644 index 00000000000..ab2ae66acec --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/go.mod @@ -0,0 +1,11 @@ +module github.com/Azure/go-autorest/autorest + +go 1.12 + +require ( + github.com/Azure/go-autorest/autorest/adal v0.5.0 + github.com/Azure/go-autorest/autorest/mocks v0.2.0 + github.com/Azure/go-autorest/logger v0.1.0 + github.com/Azure/go-autorest/tracing v0.5.0 + golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/go.sum b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/go.sum new file mode 100644 index 00000000000..729b99cd099 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/go.sum @@ -0,0 +1,18 @@ +github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/preparer.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/preparer.go index 6d67bd7337b..6e8ed64eba1 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/preparer.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/preparer.go @@ -16,7 +16,9 @@ package autorest import ( "bytes" + "context" "encoding/json" + "encoding/xml" "fmt" "io" "io/ioutil" @@ -31,11 +33,33 @@ const ( mimeTypeOctetStream = "application/octet-stream" mimeTypeFormPost = "application/x-www-form-urlencoded" - headerAuthorization = "Authorization" - headerContentType = "Content-Type" - headerUserAgent = "User-Agent" + headerAuthorization = "Authorization" + headerAuxAuthorization = "x-ms-authorization-auxiliary" + headerContentType = "Content-Type" + headerUserAgent = "User-Agent" ) +// used as a key type in context.WithValue() +type ctxPrepareDecorators struct{} + +// WithPrepareDecorators adds the specified PrepareDecorators to the provided context. +// If no PrepareDecorators are provided the context is unchanged. +func WithPrepareDecorators(ctx context.Context, prepareDecorator []PrepareDecorator) context.Context { + if len(prepareDecorator) == 0 { + return ctx + } + return context.WithValue(ctx, ctxPrepareDecorators{}, prepareDecorator) +} + +// GetPrepareDecorators returns the PrepareDecorators in the provided context or the provided default PrepareDecorators. +func GetPrepareDecorators(ctx context.Context, defaultPrepareDecorators ...PrepareDecorator) []PrepareDecorator { + inCtx := ctx.Value(ctxPrepareDecorators{}) + if pd, ok := inCtx.([]PrepareDecorator); ok { + return pd + } + return defaultPrepareDecorators +} + // Preparer is the interface that wraps the Prepare method. // // Prepare accepts and possibly modifies an http.Request (e.g., adding Headers). Implementations @@ -190,6 +214,9 @@ func AsGet() PrepareDecorator { return WithMethod("GET") } // AsHead returns a PrepareDecorator that sets the HTTP method to HEAD. func AsHead() PrepareDecorator { return WithMethod("HEAD") } +// AsMerge returns a PrepareDecorator that sets the HTTP method to MERGE. +func AsMerge() PrepareDecorator { return WithMethod("MERGE") } + // AsOptions returns a PrepareDecorator that sets the HTTP method to OPTIONS. func AsOptions() PrepareDecorator { return WithMethod("OPTIONS") } @@ -225,6 +252,25 @@ func WithBaseURL(baseURL string) PrepareDecorator { } } +// WithBytes returns a PrepareDecorator that takes a list of bytes +// which passes the bytes directly to the body +func WithBytes(input *[]byte) PrepareDecorator { + return func(p Preparer) Preparer { + return PreparerFunc(func(r *http.Request) (*http.Request, error) { + r, err := p.Prepare(r) + if err == nil { + if input == nil { + return r, fmt.Errorf("Input Bytes was nil") + } + + r.ContentLength = int64(len(*input)) + r.Body = ioutil.NopCloser(bytes.NewReader(*input)) + } + return r, err + }) + } +} + // WithCustomBaseURL returns a PrepareDecorator that replaces brace-enclosed keys within the // request base URL (i.e., http.Request.URL) with the corresponding values from the passed map. func WithCustomBaseURL(baseURL string, urlParameters map[string]interface{}) PrepareDecorator { @@ -377,6 +423,28 @@ func WithJSON(v interface{}) PrepareDecorator { } } +// WithXML returns a PrepareDecorator that encodes the data passed as XML into the body of the +// request and sets the Content-Length header. +func WithXML(v interface{}) PrepareDecorator { + return func(p Preparer) Preparer { + return PreparerFunc(func(r *http.Request) (*http.Request, error) { + r, err := p.Prepare(r) + if err == nil { + b, err := xml.Marshal(v) + if err == nil { + // we have to tack on an XML header + withHeader := xml.Header + string(b) + bytesWithHeader := []byte(withHeader) + + r.ContentLength = int64(len(bytesWithHeader)) + r.Body = ioutil.NopCloser(bytes.NewReader(bytesWithHeader)) + } + } + return r, err + }) + } +} + // WithPath returns a PrepareDecorator that adds the supplied path to the request URL. If the path // is absolute (that is, it begins with a "/"), it replaces the existing path. func WithPath(path string) PrepareDecorator { @@ -455,7 +523,7 @@ func parseURL(u *url.URL, path string) (*url.URL, error) { // WithQueryParameters returns a PrepareDecorators that encodes and applies the query parameters // given in the supplied map (i.e., key=value). func WithQueryParameters(queryParameters map[string]interface{}) PrepareDecorator { - parameters := ensureValueStrings(queryParameters) + parameters := MapToValues(queryParameters) return func(p Preparer) Preparer { return PreparerFunc(func(r *http.Request) (*http.Request, error) { r, err := p.Prepare(r) @@ -463,14 +531,16 @@ func WithQueryParameters(queryParameters map[string]interface{}) PrepareDecorato if r.URL == nil { return r, NewError("autorest", "WithQueryParameters", "Invoked with a nil URL") } - v := r.URL.Query() for key, value := range parameters { - d, err := url.QueryUnescape(value) - if err != nil { - return r, err + for i := range value { + d, err := url.QueryUnescape(value[i]) + if err != nil { + return r, err + } + value[i] = d } - v.Add(key, d) + v[key] = value } r.URL.RawQuery = v.Encode() } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/responder.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/responder.go index a908a0adb70..349e1963a2c 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/responder.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/responder.go @@ -153,6 +153,25 @@ func ByClosingIfError() RespondDecorator { } } +// ByUnmarshallingBytes returns a RespondDecorator that copies the Bytes returned in the +// response Body into the value pointed to by v. +func ByUnmarshallingBytes(v *[]byte) RespondDecorator { + return func(r Responder) Responder { + return ResponderFunc(func(resp *http.Response) error { + err := r.Respond(resp) + if err == nil { + bytes, errInner := ioutil.ReadAll(resp.Body) + if errInner != nil { + err = fmt.Errorf("Error occurred reading http.Response#Body - Error = '%v'", errInner) + } else { + *v = bytes + } + } + return err + }) + } +} + // ByUnmarshallingJSON returns a RespondDecorator that decodes a JSON document returned in the // response Body into the value pointed to by v. func ByUnmarshallingJSON(v interface{}) RespondDecorator { diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/sender.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/sender.go index b4f762325f6..5e595d7b1a3 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/sender.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/sender.go @@ -15,14 +15,40 @@ package autorest // limitations under the License. import ( + "context" + "crypto/tls" "fmt" "log" "math" "net/http" + "net/http/cookiejar" "strconv" "time" + + "github.com/Azure/go-autorest/tracing" ) +// used as a key type in context.WithValue() +type ctxSendDecorators struct{} + +// WithSendDecorators adds the specified SendDecorators to the provided context. +// If no SendDecorators are provided the context is unchanged. +func WithSendDecorators(ctx context.Context, sendDecorator []SendDecorator) context.Context { + if len(sendDecorator) == 0 { + return ctx + } + return context.WithValue(ctx, ctxSendDecorators{}, sendDecorator) +} + +// GetSendDecorators returns the SendDecorators in the provided context or the provided default SendDecorators. +func GetSendDecorators(ctx context.Context, defaultSendDecorators ...SendDecorator) []SendDecorator { + inCtx := ctx.Value(ctxSendDecorators{}) + if sd, ok := inCtx.([]SendDecorator); ok { + return sd + } + return defaultSendDecorators +} + // Sender is the interface that wraps the Do method to send HTTP requests. // // The standard http.Client conforms to this interface. @@ -38,14 +64,14 @@ func (sf SenderFunc) Do(r *http.Request) (*http.Response, error) { return sf(r) } -// SendDecorator takes and possibily decorates, by wrapping, a Sender. Decorators may affect the +// SendDecorator takes and possibly decorates, by wrapping, a Sender. Decorators may affect the // http.Request and pass it along or, first, pass the http.Request along then react to the // http.Response result. type SendDecorator func(Sender) Sender // CreateSender creates, decorates, and returns, as a Sender, the default http.Client. func CreateSender(decorators ...SendDecorator) Sender { - return DecorateSender(&http.Client{}, decorators...) + return DecorateSender(sender(tls.RenegotiateNever), decorators...) } // DecorateSender accepts a Sender and a, possibly empty, set of SendDecorators, which is applies to @@ -68,7 +94,7 @@ func DecorateSender(s Sender, decorators ...SendDecorator) Sender { // // Send will not poll or retry requests. func Send(r *http.Request, decorators ...SendDecorator) (*http.Response, error) { - return SendWithSender(&http.Client{}, r, decorators...) + return SendWithSender(sender(tls.RenegotiateNever), r, decorators...) } // SendWithSender sends the passed http.Request, through the provided Sender, returning the @@ -80,6 +106,29 @@ func SendWithSender(s Sender, r *http.Request, decorators ...SendDecorator) (*ht return DecorateSender(s, decorators...).Do(r) } +func sender(renengotiation tls.RenegotiationSupport) Sender { + // Use behaviour compatible with DefaultTransport, but require TLS minimum version. + defaultTransport := http.DefaultTransport.(*http.Transport) + transport := &http.Transport{ + Proxy: defaultTransport.Proxy, + DialContext: defaultTransport.DialContext, + MaxIdleConns: defaultTransport.MaxIdleConns, + IdleConnTimeout: defaultTransport.IdleConnTimeout, + TLSHandshakeTimeout: defaultTransport.TLSHandshakeTimeout, + ExpectContinueTimeout: defaultTransport.ExpectContinueTimeout, + TLSClientConfig: &tls.Config{ + MinVersion: tls.VersionTLS12, + Renegotiation: renengotiation, + }, + } + var roundTripper http.RoundTripper = transport + if tracing.IsEnabled() { + roundTripper = tracing.NewTransport(transport) + } + j, _ := cookiejar.New(nil) + return &http.Client{Jar: j, Transport: roundTripper} +} + // AfterDelay returns a SendDecorator that delays for the passed time.Duration before // invoking the Sender. The delay may be terminated by closing the optional channel on the // http.Request. If canceled, no further Senders are invoked. @@ -209,50 +258,73 @@ func DoRetryForAttempts(attempts int, backoff time.Duration) SendDecorator { // DoRetryForStatusCodes returns a SendDecorator that retries for specified statusCodes for up to the specified // number of attempts, exponentially backing off between requests using the supplied backoff -// time.Duration (which may be zero). Retrying may be canceled by closing the optional channel on -// the http.Request. +// time.Duration (which may be zero). Retrying may be canceled by cancelling the context on the http.Request. +// NOTE: Code http.StatusTooManyRequests (429) will *not* be counted against the number of attempts. func DoRetryForStatusCodes(attempts int, backoff time.Duration, codes ...int) SendDecorator { return func(s Sender) Sender { - return SenderFunc(func(r *http.Request) (resp *http.Response, err error) { - rr := NewRetriableRequest(r) - // Increment to add the first call (attempts denotes number of retries) - attempts++ - for attempt := 0; attempt < attempts; { - err = rr.Prepare() - if err != nil { - return resp, err - } - resp, err = s.Do(rr.Request()) - // we want to retry if err is not nil (e.g. transient network failure). note that for failed authentication - // resp and err will both have a value, so in this case we don't want to retry as it will never succeed. - if err == nil && !ResponseHasStatusCode(resp, codes...) || IsTokenRefreshError(err) { - return resp, err - } - delayed := DelayWithRetryAfter(resp, r.Context().Done()) - if !delayed && !DelayForBackoff(backoff, attempt, r.Context().Done()) { - return nil, r.Context().Err() - } - // don't count a 429 against the number of attempts - // so that we continue to retry until it succeeds - if resp == nil || resp.StatusCode != http.StatusTooManyRequests { - attempt++ - } - } - return resp, err + return SenderFunc(func(r *http.Request) (*http.Response, error) { + return doRetryForStatusCodesImpl(s, r, false, attempts, backoff, 0, codes...) }) } } -// DelayWithRetryAfter invokes time.After for the duration specified in the "Retry-After" header in -// responses with status code 429 +// DoRetryForStatusCodesWithCap returns a SendDecorator that retries for specified statusCodes for up to the +// specified number of attempts, exponentially backing off between requests using the supplied backoff +// time.Duration (which may be zero). To cap the maximum possible delay between iterations specify a value greater +// than zero for cap. Retrying may be canceled by cancelling the context on the http.Request. +func DoRetryForStatusCodesWithCap(attempts int, backoff, cap time.Duration, codes ...int) SendDecorator { + return func(s Sender) Sender { + return SenderFunc(func(r *http.Request) (*http.Response, error) { + return doRetryForStatusCodesImpl(s, r, true, attempts, backoff, cap, codes...) + }) + } +} + +func doRetryForStatusCodesImpl(s Sender, r *http.Request, count429 bool, attempts int, backoff, cap time.Duration, codes ...int) (resp *http.Response, err error) { + rr := NewRetriableRequest(r) + // Increment to add the first call (attempts denotes number of retries) + for attempt := 0; attempt < attempts+1; { + err = rr.Prepare() + if err != nil { + return + } + resp, err = s.Do(rr.Request()) + // we want to retry if err is not nil (e.g. transient network failure). note that for failed authentication + // resp and err will both have a value, so in this case we don't want to retry as it will never succeed. + if err == nil && !ResponseHasStatusCode(resp, codes...) || IsTokenRefreshError(err) { + return resp, err + } + delayed := DelayWithRetryAfter(resp, r.Context().Done()) + if !delayed && !DelayForBackoffWithCap(backoff, cap, attempt, r.Context().Done()) { + return resp, r.Context().Err() + } + // when count429 == false don't count a 429 against the number + // of attempts so that we continue to retry until it succeeds + if count429 || (resp == nil || resp.StatusCode != http.StatusTooManyRequests) { + attempt++ + } + } + return resp, err +} + +// DelayWithRetryAfter invokes time.After for the duration specified in the "Retry-After" header. +// The value of Retry-After can be either the number of seconds or a date in RFC1123 format. +// The function returns true after successfully waiting for the specified duration. If there is +// no Retry-After header or the wait is cancelled the return value is false. func DelayWithRetryAfter(resp *http.Response, cancel <-chan struct{}) bool { if resp == nil { return false } - retryAfter, _ := strconv.Atoi(resp.Header.Get("Retry-After")) - if resp.StatusCode == http.StatusTooManyRequests && retryAfter > 0 { + var dur time.Duration + ra := resp.Header.Get("Retry-After") + if retryAfter, _ := strconv.Atoi(ra); retryAfter > 0 { + dur = time.Duration(retryAfter) * time.Second + } else if t, err := time.Parse(time.RFC1123, ra); err == nil { + dur = t.Sub(time.Now()) + } + if dur > 0 { select { - case <-time.After(time.Duration(retryAfter) * time.Second): + case <-time.After(dur): return true case <-cancel: return false @@ -312,8 +384,22 @@ func WithLogging(logger *log.Logger) SendDecorator { // Note: Passing attempt 1 will result in doubling "backoff" duration. Treat this as a zero-based attempt // count. func DelayForBackoff(backoff time.Duration, attempt int, cancel <-chan struct{}) bool { + return DelayForBackoffWithCap(backoff, 0, attempt, cancel) +} + +// DelayForBackoffWithCap invokes time.After for the supplied backoff duration raised to the power of +// passed attempt (i.e., an exponential backoff delay). Backoff duration is in seconds and can set +// to zero for no delay. To cap the maximum possible delay specify a value greater than zero for cap. +// The delay may be canceled by closing the passed channel. If terminated early, returns false. +// Note: Passing attempt 1 will result in doubling "backoff" duration. Treat this as a zero-based attempt +// count. +func DelayForBackoffWithCap(backoff, cap time.Duration, attempt int, cancel <-chan struct{}) bool { + d := time.Duration(backoff.Seconds()*math.Pow(2, float64(attempt))) * time.Second + if cap > 0 && d > cap { + d = cap + } select { - case <-time.After(time.Duration(backoff.Seconds()*math.Pow(2, float64(attempt))) * time.Second): + case <-time.After(d): return true case <-cancel: return false diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/convert.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/convert.go index fdda2ce1aa8..86694bd2555 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/convert.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/convert.go @@ -145,3 +145,8 @@ func Float64(i *float64) float64 { func Float64Ptr(i float64) *float64 { return &i } + +// ByteSlicePtr returns a pointer to the passed byte slice. +func ByteSlicePtr(b []byte) *[]byte { + return &b +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go.mod new file mode 100644 index 00000000000..48fd8c6e57b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go.mod @@ -0,0 +1,5 @@ +module github.com/Azure/go-autorest/autorest/to + +go 1.12 + +require github.com/Azure/go-autorest/autorest v0.9.0 diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go.sum b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go.sum new file mode 100644 index 00000000000..d7ee6b46231 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go.sum @@ -0,0 +1,17 @@ +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go_mod_tidy_hack.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go_mod_tidy_hack.go new file mode 100644 index 00000000000..8e829210707 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/to/go_mod_tidy_hack.go @@ -0,0 +1,24 @@ +// +build modhack + +package to + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of +// the resultant binary. + +// Necessary for safely adding multi-module repo. +// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository +import _ "github.com/Azure/go-autorest/autorest" diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/utility.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/utility.go index afb3e4e161b..08cf11c1189 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/utility.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/utility.go @@ -20,6 +20,7 @@ import ( "encoding/xml" "fmt" "io" + "net" "net/http" "net/url" "reflect" @@ -156,7 +157,7 @@ func AsStringSlice(s interface{}) ([]string, error) { } // String method converts interface v to string. If interface is a list, it -// joins list elements using the seperator. Note that only sep[0] will be used for +// joins list elements using the separator. Note that only sep[0] will be used for // joining if any separator is specified. func String(v interface{}, sep ...string) string { if len(sep) == 0 { @@ -216,3 +217,12 @@ func IsTokenRefreshError(err error) bool { } return false } + +// IsTemporaryNetworkError returns true if the specified error is a temporary network error or false +// if it's not. If the error doesn't implement the net.Error interface the return value is true. +func IsTemporaryNetworkError(err error) bool { + if netErr, ok := err.(net.Error); !ok || (ok && netErr.Temporary()) { + return true + } + return false +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go.mod new file mode 100644 index 00000000000..b3f9b6a0960 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go.mod @@ -0,0 +1,8 @@ +module github.com/Azure/go-autorest/autorest/validation + +go 1.12 + +require ( + github.com/Azure/go-autorest/autorest v0.9.0 + github.com/stretchr/testify v1.3.0 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go.sum b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go.sum new file mode 100644 index 00000000000..6b9010a736d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go.sum @@ -0,0 +1,24 @@ +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go_mod_tidy_hack.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go_mod_tidy_hack.go new file mode 100644 index 00000000000..2b2668581e8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/go_mod_tidy_hack.go @@ -0,0 +1,24 @@ +// +build modhack + +package validation + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This file, and the github.com/Azure/go-autorest/autorest import, won't actually become part of +// the resultant binary. + +// Necessary for safely adding multi-module repo. +// See: https://github.com/golang/go/wiki/Modules#is-it-possible-to-add-a-module-to-a-multi-module-repository +import _ "github.com/Azure/go-autorest/autorest" diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/validation.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/validation.go index d886e0b3fbf..65899b69b8c 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/validation.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/validation/validation.go @@ -136,29 +136,29 @@ func validatePtr(x reflect.Value, v Constraint) error { func validateInt(x reflect.Value, v Constraint) error { i := x.Int() - r, ok := v.Rule.(int) + r, ok := toInt64(v.Rule) if !ok { return createError(x, v, fmt.Sprintf("rule must be integer value for %v constraint; got: %v", v.Name, v.Rule)) } switch v.Name { case MultipleOf: - if i%int64(r) != 0 { + if i%r != 0 { return createError(x, v, fmt.Sprintf("value must be a multiple of %v", r)) } case ExclusiveMinimum: - if i <= int64(r) { + if i <= r { return createError(x, v, fmt.Sprintf("value must be greater than %v", r)) } case ExclusiveMaximum: - if i >= int64(r) { + if i >= r { return createError(x, v, fmt.Sprintf("value must be less than %v", r)) } case InclusiveMinimum: - if i < int64(r) { + if i < r { return createError(x, v, fmt.Sprintf("value must be greater than or equal to %v", r)) } case InclusiveMaximum: - if i > int64(r) { + if i > r { return createError(x, v, fmt.Sprintf("value must be less than or equal to %v", r)) } default: @@ -388,10 +388,13 @@ func createError(x reflect.Value, v Constraint, err string) error { v.Target, v.Name, getInterfaceValue(x), err) } -// NewErrorWithValidationError appends package type and method name in -// validation error. -// -// Deprecated: Please use validation.NewError() instead. -func NewErrorWithValidationError(err error, packageType, method string) error { - return NewError(packageType, method, err.Error()) +func toInt64(v interface{}) (int64, bool) { + if i64, ok := v.(int64); ok { + return i64, true + } + // older generators emit max constants as int, so if int64 fails fall back to int + if i32, ok := v.(int); ok { + return int64(i32), true + } + return 0, false } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/version.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/version.go index efa7d8e12c3..56a29b2c5d0 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/version.go +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/autorest/version.go @@ -14,7 +14,28 @@ package autorest // See the License for the specific language governing permissions and // limitations under the License. +import ( + "fmt" + "runtime" +) + +const number = "v13.3.0" + +var ( + userAgent = fmt.Sprintf("Go/%s (%s-%s) go-autorest/%s", + runtime.Version(), + runtime.GOARCH, + runtime.GOOS, + number, + ) +) + +// UserAgent returns a string containing the Go version, system architecture and OS, and the go-autorest version. +func UserAgent() string { + return userAgent +} + // Version returns the semantic version (see http://semver.org). func Version() string { - return "v10.7.0" + return number } diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/logger/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/logger/go.mod new file mode 100644 index 00000000000..f22ed56bcde --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/logger/go.mod @@ -0,0 +1,3 @@ +module github.com/Azure/go-autorest/logger + +go 1.12 diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/logger/logger.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/logger/logger.go new file mode 100644 index 00000000000..da09f394c5d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/logger/logger.go @@ -0,0 +1,328 @@ +package logger + +// Copyright 2017 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "os" + "strings" + "sync" + "time" +) + +// LevelType tells a logger the minimum level to log. When code reports a log entry, +// the LogLevel indicates the level of the log entry. The logger only records entries +// whose level is at least the level it was told to log. See the Log* constants. +// For example, if a logger is configured with LogError, then LogError, LogPanic, +// and LogFatal entries will be logged; lower level entries are ignored. +type LevelType uint32 + +const ( + // LogNone tells a logger not to log any entries passed to it. + LogNone LevelType = iota + + // LogFatal tells a logger to log all LogFatal entries passed to it. + LogFatal + + // LogPanic tells a logger to log all LogPanic and LogFatal entries passed to it. + LogPanic + + // LogError tells a logger to log all LogError, LogPanic and LogFatal entries passed to it. + LogError + + // LogWarning tells a logger to log all LogWarning, LogError, LogPanic and LogFatal entries passed to it. + LogWarning + + // LogInfo tells a logger to log all LogInfo, LogWarning, LogError, LogPanic and LogFatal entries passed to it. + LogInfo + + // LogDebug tells a logger to log all LogDebug, LogInfo, LogWarning, LogError, LogPanic and LogFatal entries passed to it. + LogDebug +) + +const ( + logNone = "NONE" + logFatal = "FATAL" + logPanic = "PANIC" + logError = "ERROR" + logWarning = "WARNING" + logInfo = "INFO" + logDebug = "DEBUG" + logUnknown = "UNKNOWN" +) + +// ParseLevel converts the specified string into the corresponding LevelType. +func ParseLevel(s string) (lt LevelType, err error) { + switch strings.ToUpper(s) { + case logFatal: + lt = LogFatal + case logPanic: + lt = LogPanic + case logError: + lt = LogError + case logWarning: + lt = LogWarning + case logInfo: + lt = LogInfo + case logDebug: + lt = LogDebug + default: + err = fmt.Errorf("bad log level '%s'", s) + } + return +} + +// String implements the stringer interface for LevelType. +func (lt LevelType) String() string { + switch lt { + case LogNone: + return logNone + case LogFatal: + return logFatal + case LogPanic: + return logPanic + case LogError: + return logError + case LogWarning: + return logWarning + case LogInfo: + return logInfo + case LogDebug: + return logDebug + default: + return logUnknown + } +} + +// Filter defines functions for filtering HTTP request/response content. +type Filter struct { + // URL returns a potentially modified string representation of a request URL. + URL func(u *url.URL) string + + // Header returns a potentially modified set of values for the specified key. + // To completely exclude the header key/values return false. + Header func(key string, val []string) (bool, []string) + + // Body returns a potentially modified request/response body. + Body func(b []byte) []byte +} + +func (f Filter) processURL(u *url.URL) string { + if f.URL == nil { + return u.String() + } + return f.URL(u) +} + +func (f Filter) processHeader(k string, val []string) (bool, []string) { + if f.Header == nil { + return true, val + } + return f.Header(k, val) +} + +func (f Filter) processBody(b []byte) []byte { + if f.Body == nil { + return b + } + return f.Body(b) +} + +// Writer defines methods for writing to a logging facility. +type Writer interface { + // Writeln writes the specified message with the standard log entry header and new-line character. + Writeln(level LevelType, message string) + + // Writef writes the specified format specifier with the standard log entry header and no new-line character. + Writef(level LevelType, format string, a ...interface{}) + + // WriteRequest writes the specified HTTP request to the logger if the log level is greater than + // or equal to LogInfo. The request body, if set, is logged at level LogDebug or higher. + // Custom filters can be specified to exclude URL, header, and/or body content from the log. + // By default no request content is excluded. + WriteRequest(req *http.Request, filter Filter) + + // WriteResponse writes the specified HTTP response to the logger if the log level is greater than + // or equal to LogInfo. The response body, if set, is logged at level LogDebug or higher. + // Custom filters can be specified to exclude URL, header, and/or body content from the log. + // By default no response content is excluded. + WriteResponse(resp *http.Response, filter Filter) +} + +// Instance is the default log writer initialized during package init. +// This can be replaced with a custom implementation as required. +var Instance Writer + +// default log level +var logLevel = LogNone + +// Level returns the value specified in AZURE_GO_AUTOREST_LOG_LEVEL. +// If no value was specified the default value is LogNone. +// Custom loggers can call this to retrieve the configured log level. +func Level() LevelType { + return logLevel +} + +func init() { + // separated for testing purposes + initDefaultLogger() +} + +func initDefaultLogger() { + // init with nilLogger so callers don't have to do a nil check on Default + Instance = nilLogger{} + llStr := strings.ToLower(os.Getenv("AZURE_GO_SDK_LOG_LEVEL")) + if llStr == "" { + return + } + var err error + logLevel, err = ParseLevel(llStr) + if err != nil { + fmt.Fprintf(os.Stderr, "go-autorest: failed to parse log level: %s\n", err.Error()) + return + } + if logLevel == LogNone { + return + } + // default to stderr + dest := os.Stderr + lfStr := os.Getenv("AZURE_GO_SDK_LOG_FILE") + if strings.EqualFold(lfStr, "stdout") { + dest = os.Stdout + } else if lfStr != "" { + lf, err := os.Create(lfStr) + if err == nil { + dest = lf + } else { + fmt.Fprintf(os.Stderr, "go-autorest: failed to create log file, using stderr: %s\n", err.Error()) + } + } + Instance = fileLogger{ + logLevel: logLevel, + mu: &sync.Mutex{}, + logFile: dest, + } +} + +// the nil logger does nothing +type nilLogger struct{} + +func (nilLogger) Writeln(LevelType, string) {} + +func (nilLogger) Writef(LevelType, string, ...interface{}) {} + +func (nilLogger) WriteRequest(*http.Request, Filter) {} + +func (nilLogger) WriteResponse(*http.Response, Filter) {} + +// A File is used instead of a Logger so the stream can be flushed after every write. +type fileLogger struct { + logLevel LevelType + mu *sync.Mutex // for synchronizing writes to logFile + logFile *os.File +} + +func (fl fileLogger) Writeln(level LevelType, message string) { + fl.Writef(level, "%s\n", message) +} + +func (fl fileLogger) Writef(level LevelType, format string, a ...interface{}) { + if fl.logLevel >= level { + fl.mu.Lock() + defer fl.mu.Unlock() + fmt.Fprintf(fl.logFile, "%s %s", entryHeader(level), fmt.Sprintf(format, a...)) + fl.logFile.Sync() + } +} + +func (fl fileLogger) WriteRequest(req *http.Request, filter Filter) { + if req == nil || fl.logLevel < LogInfo { + return + } + b := &bytes.Buffer{} + fmt.Fprintf(b, "%s REQUEST: %s %s\n", entryHeader(LogInfo), req.Method, filter.processURL(req.URL)) + // dump headers + for k, v := range req.Header { + if ok, mv := filter.processHeader(k, v); ok { + fmt.Fprintf(b, "%s: %s\n", k, strings.Join(mv, ",")) + } + } + if fl.shouldLogBody(req.Header, req.Body) { + // dump body + body, err := ioutil.ReadAll(req.Body) + if err == nil { + fmt.Fprintln(b, string(filter.processBody(body))) + if nc, ok := req.Body.(io.Seeker); ok { + // rewind to the beginning + nc.Seek(0, io.SeekStart) + } else { + // recreate the body + req.Body = ioutil.NopCloser(bytes.NewReader(body)) + } + } else { + fmt.Fprintf(b, "failed to read body: %v\n", err) + } + } + fl.mu.Lock() + defer fl.mu.Unlock() + fmt.Fprint(fl.logFile, b.String()) + fl.logFile.Sync() +} + +func (fl fileLogger) WriteResponse(resp *http.Response, filter Filter) { + if resp == nil || fl.logLevel < LogInfo { + return + } + b := &bytes.Buffer{} + fmt.Fprintf(b, "%s RESPONSE: %d %s\n", entryHeader(LogInfo), resp.StatusCode, filter.processURL(resp.Request.URL)) + // dump headers + for k, v := range resp.Header { + if ok, mv := filter.processHeader(k, v); ok { + fmt.Fprintf(b, "%s: %s\n", k, strings.Join(mv, ",")) + } + } + if fl.shouldLogBody(resp.Header, resp.Body) { + // dump body + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err == nil { + fmt.Fprintln(b, string(filter.processBody(body))) + resp.Body = ioutil.NopCloser(bytes.NewReader(body)) + } else { + fmt.Fprintf(b, "failed to read body: %v\n", err) + } + } + fl.mu.Lock() + defer fl.mu.Unlock() + fmt.Fprint(fl.logFile, b.String()) + fl.logFile.Sync() +} + +// returns true if the provided body should be included in the log +func (fl fileLogger) shouldLogBody(header http.Header, body io.ReadCloser) bool { + ct := header.Get("Content-Type") + return fl.logLevel >= LogDebug && body != nil && !strings.Contains(ct, "application/octet-stream") +} + +// creates standard header for log entries, it contains a timestamp and the log level +func entryHeader(level LevelType) string { + // this format provides a fixed number of digits so the size of the timestamp is constant + return fmt.Sprintf("(%s) %s:", time.Now().Format("2006-01-02T15:04:05.0000000Z07:00"), level.String()) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/tracing/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/tracing/go.mod new file mode 100644 index 00000000000..25c34c1085a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/tracing/go.mod @@ -0,0 +1,3 @@ +module github.com/Azure/go-autorest/tracing + +go 1.12 diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/tracing/tracing.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/tracing/tracing.go new file mode 100644 index 00000000000..0e7a6e96254 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/Azure/go-autorest/tracing/tracing.go @@ -0,0 +1,67 @@ +package tracing + +// Copyright 2018 Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ( + "context" + "net/http" +) + +// Tracer represents an HTTP tracing facility. +type Tracer interface { + NewTransport(base *http.Transport) http.RoundTripper + StartSpan(ctx context.Context, name string) context.Context + EndSpan(ctx context.Context, httpStatusCode int, err error) +} + +var ( + tracer Tracer +) + +// Register will register the provided Tracer. Pass nil to unregister a Tracer. +func Register(t Tracer) { + tracer = t +} + +// IsEnabled returns true if a Tracer has been registered. +func IsEnabled() bool { + return tracer != nil +} + +// NewTransport creates a new instrumenting http.RoundTripper for the +// registered Tracer. If no Tracer has been registered it returns nil. +func NewTransport(base *http.Transport) http.RoundTripper { + if tracer != nil { + return tracer.NewTransport(base) + } + return nil +} + +// StartSpan starts a trace span with the specified name, associating it with the +// provided context. Has no effect if a Tracer has not been registered. +func StartSpan(ctx context.Context, name string) context.Context { + if tracer != nil { + return tracer.StartSpan(ctx, name) + } + return ctx +} + +// EndSpan ends a previously started span stored in the context. +// Has no effect if a Tracer has not been registered. +func EndSpan(ctx context.Context, httpStatusCode int, err error) { + if tracer != nil { + tracer.EndSpan(ctx, httpStatusCode, err) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/LICENSE new file mode 100644 index 00000000000..8dada3edaf5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/README.md b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/README.md new file mode 100644 index 00000000000..8ece280089a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/README.md @@ -0,0 +1,66 @@ +# utfbom [![Godoc](https://godoc.org/github.com/dimchansky/utfbom?status.png)](https://godoc.org/github.com/dimchansky/utfbom) [![License](https://img.shields.io/:license-apache-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Build Status](https://travis-ci.org/dimchansky/utfbom.svg?branch=master)](https://travis-ci.org/dimchansky/utfbom) [![Go Report Card](https://goreportcard.com/badge/github.com/dimchansky/utfbom)](https://goreportcard.com/report/github.com/dimchansky/utfbom) [![Coverage Status](https://coveralls.io/repos/github/dimchansky/utfbom/badge.svg?branch=master)](https://coveralls.io/github/dimchansky/utfbom?branch=master) + +The package utfbom implements the detection of the BOM (Unicode Byte Order Mark) and removing as necessary. It can also return the encoding detected by the BOM. + +## Installation + + go get -u github.com/dimchansky/utfbom + +## Example + +```go +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + + "github.com/dimchansky/utfbom" +) + +func main() { + trySkip([]byte("\xEF\xBB\xBFhello")) + trySkip([]byte("hello")) +} + +func trySkip(byteData []byte) { + fmt.Println("Input:", byteData) + + // just skip BOM + output, err := ioutil.ReadAll(utfbom.SkipOnly(bytes.NewReader(byteData))) + if err != nil { + fmt.Println(err) + return + } + fmt.Println("ReadAll with BOM skipping", output) + + // skip BOM and detect encoding + sr, enc := utfbom.Skip(bytes.NewReader(byteData)) + fmt.Printf("Detected encoding: %s\n", enc) + output, err = ioutil.ReadAll(sr) + if err != nil { + fmt.Println(err) + return + } + fmt.Println("ReadAll with BOM detection and skipping", output) + fmt.Println() +} +``` + +Output: + +``` +$ go run main.go +Input: [239 187 191 104 101 108 108 111] +ReadAll with BOM skipping [104 101 108 108 111] +Detected encoding: UTF8 +ReadAll with BOM detection and skipping [104 101 108 108 111] + +Input: [104 101 108 108 111] +ReadAll with BOM skipping [104 101 108 108 111] +Detected encoding: Unknown +ReadAll with BOM detection and skipping [104 101 108 108 111] +``` + + diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/go.mod new file mode 100644 index 00000000000..4b9ecc6f545 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/go.mod @@ -0,0 +1 @@ +module github.com/dimchansky/utfbom \ No newline at end of file diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/utfbom.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/utfbom.go new file mode 100644 index 00000000000..77a303e564b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/dimchansky/utfbom/utfbom.go @@ -0,0 +1,192 @@ +// Package utfbom implements the detection of the BOM (Unicode Byte Order Mark) and removing as necessary. +// It wraps an io.Reader object, creating another object (Reader) that also implements the io.Reader +// interface but provides automatic BOM checking and removing as necessary. +package utfbom + +import ( + "errors" + "io" +) + +// Encoding is type alias for detected UTF encoding. +type Encoding int + +// Constants to identify detected UTF encodings. +const ( + // Unknown encoding, returned when no BOM was detected + Unknown Encoding = iota + + // UTF8, BOM bytes: EF BB BF + UTF8 + + // UTF-16, big-endian, BOM bytes: FE FF + UTF16BigEndian + + // UTF-16, little-endian, BOM bytes: FF FE + UTF16LittleEndian + + // UTF-32, big-endian, BOM bytes: 00 00 FE FF + UTF32BigEndian + + // UTF-32, little-endian, BOM bytes: FF FE 00 00 + UTF32LittleEndian +) + +// String returns a user-friendly string representation of the encoding. Satisfies fmt.Stringer interface. +func (e Encoding) String() string { + switch e { + case UTF8: + return "UTF8" + case UTF16BigEndian: + return "UTF16BigEndian" + case UTF16LittleEndian: + return "UTF16LittleEndian" + case UTF32BigEndian: + return "UTF32BigEndian" + case UTF32LittleEndian: + return "UTF32LittleEndian" + default: + return "Unknown" + } +} + +const maxConsecutiveEmptyReads = 100 + +// Skip creates Reader which automatically detects BOM (Unicode Byte Order Mark) and removes it as necessary. +// It also returns the encoding detected by the BOM. +// If the detected encoding is not needed, you can call the SkipOnly function. +func Skip(rd io.Reader) (*Reader, Encoding) { + // Is it already a Reader? + b, ok := rd.(*Reader) + if ok { + return b, Unknown + } + + enc, left, err := detectUtf(rd) + return &Reader{ + rd: rd, + buf: left, + err: err, + }, enc +} + +// SkipOnly creates Reader which automatically detects BOM (Unicode Byte Order Mark) and removes it as necessary. +func SkipOnly(rd io.Reader) *Reader { + r, _ := Skip(rd) + return r +} + +// Reader implements automatic BOM (Unicode Byte Order Mark) checking and +// removing as necessary for an io.Reader object. +type Reader struct { + rd io.Reader // reader provided by the client + buf []byte // buffered data + err error // last error +} + +// Read is an implementation of io.Reader interface. +// The bytes are taken from the underlying Reader, but it checks for BOMs, removing them as necessary. +func (r *Reader) Read(p []byte) (n int, err error) { + if len(p) == 0 { + return 0, nil + } + + if r.buf == nil { + if r.err != nil { + return 0, r.readErr() + } + + return r.rd.Read(p) + } + + // copy as much as we can + n = copy(p, r.buf) + r.buf = nilIfEmpty(r.buf[n:]) + return n, nil +} + +func (r *Reader) readErr() error { + err := r.err + r.err = nil + return err +} + +var errNegativeRead = errors.New("utfbom: reader returned negative count from Read") + +func detectUtf(rd io.Reader) (enc Encoding, buf []byte, err error) { + buf, err = readBOM(rd) + + if len(buf) >= 4 { + if isUTF32BigEndianBOM4(buf) { + return UTF32BigEndian, nilIfEmpty(buf[4:]), err + } + if isUTF32LittleEndianBOM4(buf) { + return UTF32LittleEndian, nilIfEmpty(buf[4:]), err + } + } + + if len(buf) > 2 && isUTF8BOM3(buf) { + return UTF8, nilIfEmpty(buf[3:]), err + } + + if (err != nil && err != io.EOF) || (len(buf) < 2) { + return Unknown, nilIfEmpty(buf), err + } + + if isUTF16BigEndianBOM2(buf) { + return UTF16BigEndian, nilIfEmpty(buf[2:]), err + } + if isUTF16LittleEndianBOM2(buf) { + return UTF16LittleEndian, nilIfEmpty(buf[2:]), err + } + + return Unknown, nilIfEmpty(buf), err +} + +func readBOM(rd io.Reader) (buf []byte, err error) { + const maxBOMSize = 4 + var bom [maxBOMSize]byte // used to read BOM + + // read as many bytes as possible + for nEmpty, n := 0, 0; err == nil && len(buf) < maxBOMSize; buf = bom[:len(buf)+n] { + if n, err = rd.Read(bom[len(buf):]); n < 0 { + panic(errNegativeRead) + } + if n > 0 { + nEmpty = 0 + } else { + nEmpty++ + if nEmpty >= maxConsecutiveEmptyReads { + err = io.ErrNoProgress + } + } + } + return +} + +func isUTF32BigEndianBOM4(buf []byte) bool { + return buf[0] == 0x00 && buf[1] == 0x00 && buf[2] == 0xFE && buf[3] == 0xFF +} + +func isUTF32LittleEndianBOM4(buf []byte) bool { + return buf[0] == 0xFF && buf[1] == 0xFE && buf[2] == 0x00 && buf[3] == 0x00 +} + +func isUTF8BOM3(buf []byte) bool { + return buf[0] == 0xEF && buf[1] == 0xBB && buf[2] == 0xBF +} + +func isUTF16BigEndianBOM2(buf []byte) bool { + return buf[0] == 0xFE && buf[1] == 0xFF +} + +func isUTF16LittleEndianBOM2(buf []byte) bool { + return buf[0] == 0xFF && buf[1] == 0xFE +} + +func nilIfEmpty(buf []byte) (res []byte) { + if len(buf) > 0 { + res = buf + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/LICENSE new file mode 100644 index 00000000000..f9c841a51e0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013 Mitchell Hashimoto + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/README.md b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/README.md new file mode 100644 index 00000000000..d70706d5b35 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/README.md @@ -0,0 +1,14 @@ +# go-homedir + +This is a Go library for detecting the user's home directory without +the use of cgo, so the library can be used in cross-compilation environments. + +Usage is incredibly simple, just call `homedir.Dir()` to get the home directory +for a user, and `homedir.Expand()` to expand the `~` in a path to the home +directory. + +**Why not just use `os/user`?** The built-in `os/user` package requires +cgo on Darwin systems. This means that any Go code that uses that package +cannot cross compile. But 99% of the time the use for `os/user` is just to +retrieve the home directory, which we can do for the current user without +cgo. This library does that, enabling cross-compilation. diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/go.mod b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/go.mod new file mode 100644 index 00000000000..7efa09a0432 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/go.mod @@ -0,0 +1 @@ +module github.com/mitchellh/go-homedir diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/homedir.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/homedir.go new file mode 100644 index 00000000000..25378537ead --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/github.com/mitchellh/go-homedir/homedir.go @@ -0,0 +1,167 @@ +package homedir + +import ( + "bytes" + "errors" + "os" + "os/exec" + "path/filepath" + "runtime" + "strconv" + "strings" + "sync" +) + +// DisableCache will disable caching of the home directory. Caching is enabled +// by default. +var DisableCache bool + +var homedirCache string +var cacheLock sync.RWMutex + +// Dir returns the home directory for the executing user. +// +// This uses an OS-specific method for discovering the home directory. +// An error is returned if a home directory cannot be detected. +func Dir() (string, error) { + if !DisableCache { + cacheLock.RLock() + cached := homedirCache + cacheLock.RUnlock() + if cached != "" { + return cached, nil + } + } + + cacheLock.Lock() + defer cacheLock.Unlock() + + var result string + var err error + if runtime.GOOS == "windows" { + result, err = dirWindows() + } else { + // Unix-like system, so just assume Unix + result, err = dirUnix() + } + + if err != nil { + return "", err + } + homedirCache = result + return result, nil +} + +// Expand expands the path to include the home directory if the path +// is prefixed with `~`. If it isn't prefixed with `~`, the path is +// returned as-is. +func Expand(path string) (string, error) { + if len(path) == 0 { + return path, nil + } + + if path[0] != '~' { + return path, nil + } + + if len(path) > 1 && path[1] != '/' && path[1] != '\\' { + return "", errors.New("cannot expand user-specific home dir") + } + + dir, err := Dir() + if err != nil { + return "", err + } + + return filepath.Join(dir, path[1:]), nil +} + +// Reset clears the cache, forcing the next call to Dir to re-detect +// the home directory. This generally never has to be called, but can be +// useful in tests if you're modifying the home directory via the HOME +// env var or something. +func Reset() { + cacheLock.Lock() + defer cacheLock.Unlock() + homedirCache = "" +} + +func dirUnix() (string, error) { + homeEnv := "HOME" + if runtime.GOOS == "plan9" { + // On plan9, env vars are lowercase. + homeEnv = "home" + } + + // First prefer the HOME environmental variable + if home := os.Getenv(homeEnv); home != "" { + return home, nil + } + + var stdout bytes.Buffer + + // If that fails, try OS specific commands + if runtime.GOOS == "darwin" { + cmd := exec.Command("sh", "-c", `dscl -q . -read /Users/"$(whoami)" NFSHomeDirectory | sed 's/^[^ ]*: //'`) + cmd.Stdout = &stdout + if err := cmd.Run(); err == nil { + result := strings.TrimSpace(stdout.String()) + if result != "" { + return result, nil + } + } + } else { + cmd := exec.Command("getent", "passwd", strconv.Itoa(os.Getuid())) + cmd.Stdout = &stdout + if err := cmd.Run(); err != nil { + // If the error is ErrNotFound, we ignore it. Otherwise, return it. + if err != exec.ErrNotFound { + return "", err + } + } else { + if passwd := strings.TrimSpace(stdout.String()); passwd != "" { + // username:password:uid:gid:gecos:home:shell + passwdParts := strings.SplitN(passwd, ":", 7) + if len(passwdParts) > 5 { + return passwdParts[5], nil + } + } + } + } + + // If all else fails, try the shell + stdout.Reset() + cmd := exec.Command("sh", "-c", "cd && pwd") + cmd.Stdout = &stdout + if err := cmd.Run(); err != nil { + return "", err + } + + result := strings.TrimSpace(stdout.String()) + if result == "" { + return "", errors.New("blank output when reading home directory") + } + + return result, nil +} + +func dirWindows() (string, error) { + // First prefer the HOME environmental variable + if home := os.Getenv("HOME"); home != "" { + return home, nil + } + + // Prefer standard environment variable USERPROFILE + if home := os.Getenv("USERPROFILE"); home != "" { + return home, nil + } + + drive := os.Getenv("HOMEDRIVE") + path := os.Getenv("HOMEPATH") + home := drive + path + if drive == "" || path == "" { + return "", errors.New("HOMEDRIVE, HOMEPATH, or USERPROFILE are blank") + } + + return home, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/LICENSE new file mode 100644 index 00000000000..6a66aea5eaf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/PATENTS b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/PATENTS new file mode 100644 index 00000000000..733099041f8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/bmp-string.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/bmp-string.go new file mode 100644 index 00000000000..233b8b62cc2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/bmp-string.go @@ -0,0 +1,50 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "errors" + "unicode/utf16" +) + +// bmpString returns s encoded in UCS-2 with a zero terminator. +func bmpString(s string) ([]byte, error) { + // References: + // https://tools.ietf.org/html/rfc7292#appendix-B.1 + // https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane + // - non-BMP characters are encoded in UTF 16 by using a surrogate pair of 16-bit codes + // EncodeRune returns 0xfffd if the rune does not need special encoding + // - the above RFC provides the info that BMPStrings are NULL terminated. + + ret := make([]byte, 0, 2*len(s)+2) + + for _, r := range s { + if t, _ := utf16.EncodeRune(r); t != 0xfffd { + return nil, errors.New("pkcs12: string contains characters that cannot be encoded in UCS-2") + } + ret = append(ret, byte(r/256), byte(r%256)) + } + + return append(ret, 0, 0), nil +} + +func decodeBMPString(bmpString []byte) (string, error) { + if len(bmpString)%2 != 0 { + return "", errors.New("pkcs12: odd-length BMP string") + } + + // strip terminator if present + if l := len(bmpString); l >= 2 && bmpString[l-1] == 0 && bmpString[l-2] == 0 { + bmpString = bmpString[:l-2] + } + + s := make([]uint16, 0, len(bmpString)/2) + for len(bmpString) > 0 { + s = append(s, uint16(bmpString[0])<<8+uint16(bmpString[1])) + bmpString = bmpString[2:] + } + + return string(utf16.Decode(s)), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/crypto.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/crypto.go new file mode 100644 index 00000000000..484ca51b715 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/crypto.go @@ -0,0 +1,131 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "crypto/cipher" + "crypto/des" + "crypto/x509/pkix" + "encoding/asn1" + "errors" + + "golang.org/x/crypto/pkcs12/internal/rc2" +) + +var ( + oidPBEWithSHAAnd3KeyTripleDESCBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 3}) + oidPBEWithSHAAnd40BitRC2CBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 6}) +) + +// pbeCipher is an abstraction of a PKCS#12 cipher. +type pbeCipher interface { + // create returns a cipher.Block given a key. + create(key []byte) (cipher.Block, error) + // deriveKey returns a key derived from the given password and salt. + deriveKey(salt, password []byte, iterations int) []byte + // deriveKey returns an IV derived from the given password and salt. + deriveIV(salt, password []byte, iterations int) []byte +} + +type shaWithTripleDESCBC struct{} + +func (shaWithTripleDESCBC) create(key []byte) (cipher.Block, error) { + return des.NewTripleDESCipher(key) +} + +func (shaWithTripleDESCBC) deriveKey(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 24) +} + +func (shaWithTripleDESCBC) deriveIV(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8) +} + +type shaWith40BitRC2CBC struct{} + +func (shaWith40BitRC2CBC) create(key []byte) (cipher.Block, error) { + return rc2.New(key, len(key)*8) +} + +func (shaWith40BitRC2CBC) deriveKey(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 5) +} + +func (shaWith40BitRC2CBC) deriveIV(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8) +} + +type pbeParams struct { + Salt []byte + Iterations int +} + +func pbDecrypterFor(algorithm pkix.AlgorithmIdentifier, password []byte) (cipher.BlockMode, int, error) { + var cipherType pbeCipher + + switch { + case algorithm.Algorithm.Equal(oidPBEWithSHAAnd3KeyTripleDESCBC): + cipherType = shaWithTripleDESCBC{} + case algorithm.Algorithm.Equal(oidPBEWithSHAAnd40BitRC2CBC): + cipherType = shaWith40BitRC2CBC{} + default: + return nil, 0, NotImplementedError("algorithm " + algorithm.Algorithm.String() + " is not supported") + } + + var params pbeParams + if err := unmarshal(algorithm.Parameters.FullBytes, ¶ms); err != nil { + return nil, 0, err + } + + key := cipherType.deriveKey(params.Salt, password, params.Iterations) + iv := cipherType.deriveIV(params.Salt, password, params.Iterations) + + block, err := cipherType.create(key) + if err != nil { + return nil, 0, err + } + + return cipher.NewCBCDecrypter(block, iv), block.BlockSize(), nil +} + +func pbDecrypt(info decryptable, password []byte) (decrypted []byte, err error) { + cbc, blockSize, err := pbDecrypterFor(info.Algorithm(), password) + if err != nil { + return nil, err + } + + encrypted := info.Data() + if len(encrypted) == 0 { + return nil, errors.New("pkcs12: empty encrypted data") + } + if len(encrypted)%blockSize != 0 { + return nil, errors.New("pkcs12: input is not a multiple of the block size") + } + decrypted = make([]byte, len(encrypted)) + cbc.CryptBlocks(decrypted, encrypted) + + psLen := int(decrypted[len(decrypted)-1]) + if psLen == 0 || psLen > blockSize { + return nil, ErrDecryption + } + + if len(decrypted) < psLen { + return nil, ErrDecryption + } + ps := decrypted[len(decrypted)-psLen:] + decrypted = decrypted[:len(decrypted)-psLen] + if bytes.Compare(ps, bytes.Repeat([]byte{byte(psLen)}, psLen)) != 0 { + return nil, ErrDecryption + } + + return +} + +// decryptable abstracts an object that contains ciphertext. +type decryptable interface { + Algorithm() pkix.AlgorithmIdentifier + Data() []byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/errors.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/errors.go new file mode 100644 index 00000000000..7377ce6fb2b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/errors.go @@ -0,0 +1,23 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import "errors" + +var ( + // ErrDecryption represents a failure to decrypt the input. + ErrDecryption = errors.New("pkcs12: decryption error, incorrect padding") + + // ErrIncorrectPassword is returned when an incorrect password is detected. + // Usually, P12/PFX data is signed to be able to verify the password. + ErrIncorrectPassword = errors.New("pkcs12: decryption password incorrect") +) + +// NotImplementedError indicates that the input is not currently supported. +type NotImplementedError string + +func (e NotImplementedError) Error() string { + return "pkcs12: " + string(e) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go new file mode 100644 index 00000000000..7499e3fb69d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go @@ -0,0 +1,271 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package rc2 implements the RC2 cipher +/* +https://www.ietf.org/rfc/rfc2268.txt +http://people.csail.mit.edu/rivest/pubs/KRRR98.pdf + +This code is licensed under the MIT license. +*/ +package rc2 + +import ( + "crypto/cipher" + "encoding/binary" +) + +// The rc2 block size in bytes +const BlockSize = 8 + +type rc2Cipher struct { + k [64]uint16 +} + +// New returns a new rc2 cipher with the given key and effective key length t1 +func New(key []byte, t1 int) (cipher.Block, error) { + // TODO(dgryski): error checking for key length + return &rc2Cipher{ + k: expandKey(key, t1), + }, nil +} + +func (*rc2Cipher) BlockSize() int { return BlockSize } + +var piTable = [256]byte{ + 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d, + 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2, + 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32, + 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82, + 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc, + 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26, + 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03, + 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7, + 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a, + 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec, + 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39, + 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31, + 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9, + 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9, + 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e, + 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad, +} + +func expandKey(key []byte, t1 int) [64]uint16 { + + l := make([]byte, 128) + copy(l, key) + + var t = len(key) + var t8 = (t1 + 7) / 8 + var tm = byte(255 % uint(1<<(8+uint(t1)-8*uint(t8)))) + + for i := len(key); i < 128; i++ { + l[i] = piTable[l[i-1]+l[uint8(i-t)]] + } + + l[128-t8] = piTable[l[128-t8]&tm] + + for i := 127 - t8; i >= 0; i-- { + l[i] = piTable[l[i+1]^l[i+t8]] + } + + var k [64]uint16 + + for i := range k { + k[i] = uint16(l[2*i]) + uint16(l[2*i+1])*256 + } + + return k +} + +func rotl16(x uint16, b uint) uint16 { + return (x >> (16 - b)) | (x << b) +} + +func (c *rc2Cipher) Encrypt(dst, src []byte) { + + r0 := binary.LittleEndian.Uint16(src[0:]) + r1 := binary.LittleEndian.Uint16(src[2:]) + r2 := binary.LittleEndian.Uint16(src[4:]) + r3 := binary.LittleEndian.Uint16(src[6:]) + + var j int + + for j <= 16 { + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + + } + + r0 = r0 + c.k[r3&63] + r1 = r1 + c.k[r0&63] + r2 = r2 + c.k[r1&63] + r3 = r3 + c.k[r2&63] + + for j <= 40 { + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + + } + + r0 = r0 + c.k[r3&63] + r1 = r1 + c.k[r0&63] + r2 = r2 + c.k[r1&63] + r3 = r3 + c.k[r2&63] + + for j <= 60 { + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + } + + binary.LittleEndian.PutUint16(dst[0:], r0) + binary.LittleEndian.PutUint16(dst[2:], r1) + binary.LittleEndian.PutUint16(dst[4:], r2) + binary.LittleEndian.PutUint16(dst[6:], r3) +} + +func (c *rc2Cipher) Decrypt(dst, src []byte) { + + r0 := binary.LittleEndian.Uint16(src[0:]) + r1 := binary.LittleEndian.Uint16(src[2:]) + r2 := binary.LittleEndian.Uint16(src[4:]) + r3 := binary.LittleEndian.Uint16(src[6:]) + + j := 63 + + for j >= 44 { + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + } + + r3 = r3 - c.k[r2&63] + r2 = r2 - c.k[r1&63] + r1 = r1 - c.k[r0&63] + r0 = r0 - c.k[r3&63] + + for j >= 20 { + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + + } + + r3 = r3 - c.k[r2&63] + r2 = r2 - c.k[r1&63] + r1 = r1 - c.k[r0&63] + r0 = r0 - c.k[r3&63] + + for j >= 0 { + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + + } + + binary.LittleEndian.PutUint16(dst[0:], r0) + binary.LittleEndian.PutUint16(dst[2:], r1) + binary.LittleEndian.PutUint16(dst[4:], r2) + binary.LittleEndian.PutUint16(dst[6:], r3) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/mac.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/mac.go new file mode 100644 index 00000000000..5f38aa7de83 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/mac.go @@ -0,0 +1,45 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "crypto/hmac" + "crypto/sha1" + "crypto/x509/pkix" + "encoding/asn1" +) + +type macData struct { + Mac digestInfo + MacSalt []byte + Iterations int `asn1:"optional,default:1"` +} + +// from PKCS#7: +type digestInfo struct { + Algorithm pkix.AlgorithmIdentifier + Digest []byte +} + +var ( + oidSHA1 = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}) +) + +func verifyMac(macData *macData, message, password []byte) error { + if !macData.Mac.Algorithm.Algorithm.Equal(oidSHA1) { + return NotImplementedError("unknown digest algorithm: " + macData.Mac.Algorithm.Algorithm.String()) + } + + key := pbkdf(sha1Sum, 20, 64, macData.MacSalt, password, macData.Iterations, 3, 20) + + mac := hmac.New(sha1.New, key) + mac.Write(message) + expectedMAC := mac.Sum(nil) + + if !hmac.Equal(macData.Mac.Digest, expectedMAC) { + return ErrIncorrectPassword + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/pbkdf.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/pbkdf.go new file mode 100644 index 00000000000..5c419d41e32 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/pbkdf.go @@ -0,0 +1,170 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "crypto/sha1" + "math/big" +) + +var ( + one = big.NewInt(1) +) + +// sha1Sum returns the SHA-1 hash of in. +func sha1Sum(in []byte) []byte { + sum := sha1.Sum(in) + return sum[:] +} + +// fillWithRepeats returns v*ceiling(len(pattern) / v) bytes consisting of +// repeats of pattern. +func fillWithRepeats(pattern []byte, v int) []byte { + if len(pattern) == 0 { + return nil + } + outputLen := v * ((len(pattern) + v - 1) / v) + return bytes.Repeat(pattern, (outputLen+len(pattern)-1)/len(pattern))[:outputLen] +} + +func pbkdf(hash func([]byte) []byte, u, v int, salt, password []byte, r int, ID byte, size int) (key []byte) { + // implementation of https://tools.ietf.org/html/rfc7292#appendix-B.2 , RFC text verbatim in comments + + // Let H be a hash function built around a compression function f: + + // Z_2^u x Z_2^v -> Z_2^u + + // (that is, H has a chaining variable and output of length u bits, and + // the message input to the compression function of H is v bits). The + // values for u and v are as follows: + + // HASH FUNCTION VALUE u VALUE v + // MD2, MD5 128 512 + // SHA-1 160 512 + // SHA-224 224 512 + // SHA-256 256 512 + // SHA-384 384 1024 + // SHA-512 512 1024 + // SHA-512/224 224 1024 + // SHA-512/256 256 1024 + + // Furthermore, let r be the iteration count. + + // We assume here that u and v are both multiples of 8, as are the + // lengths of the password and salt strings (which we denote by p and s, + // respectively) and the number n of pseudorandom bits required. In + // addition, u and v are of course non-zero. + + // For information on security considerations for MD5 [19], see [25] and + // [1], and on those for MD2, see [18]. + + // The following procedure can be used to produce pseudorandom bits for + // a particular "purpose" that is identified by a byte called "ID". + // This standard specifies 3 different values for the ID byte: + + // 1. If ID=1, then the pseudorandom bits being produced are to be used + // as key material for performing encryption or decryption. + + // 2. If ID=2, then the pseudorandom bits being produced are to be used + // as an IV (Initial Value) for encryption or decryption. + + // 3. If ID=3, then the pseudorandom bits being produced are to be used + // as an integrity key for MACing. + + // 1. Construct a string, D (the "diversifier"), by concatenating v/8 + // copies of ID. + var D []byte + for i := 0; i < v; i++ { + D = append(D, ID) + } + + // 2. Concatenate copies of the salt together to create a string S of + // length v(ceiling(s/v)) bits (the final copy of the salt may be + // truncated to create S). Note that if the salt is the empty + // string, then so is S. + + S := fillWithRepeats(salt, v) + + // 3. Concatenate copies of the password together to create a string P + // of length v(ceiling(p/v)) bits (the final copy of the password + // may be truncated to create P). Note that if the password is the + // empty string, then so is P. + + P := fillWithRepeats(password, v) + + // 4. Set I=S||P to be the concatenation of S and P. + I := append(S, P...) + + // 5. Set c=ceiling(n/u). + c := (size + u - 1) / u + + // 6. For i=1, 2, ..., c, do the following: + A := make([]byte, c*20) + var IjBuf []byte + for i := 0; i < c; i++ { + // A. Set A2=H^r(D||I). (i.e., the r-th hash of D||1, + // H(H(H(... H(D||I)))) + Ai := hash(append(D, I...)) + for j := 1; j < r; j++ { + Ai = hash(Ai) + } + copy(A[i*20:], Ai[:]) + + if i < c-1 { // skip on last iteration + // B. Concatenate copies of Ai to create a string B of length v + // bits (the final copy of Ai may be truncated to create B). + var B []byte + for len(B) < v { + B = append(B, Ai[:]...) + } + B = B[:v] + + // C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit + // blocks, where k=ceiling(s/v)+ceiling(p/v), modify I by + // setting I_j=(I_j+B+1) mod 2^v for each j. + { + Bbi := new(big.Int).SetBytes(B) + Ij := new(big.Int) + + for j := 0; j < len(I)/v; j++ { + Ij.SetBytes(I[j*v : (j+1)*v]) + Ij.Add(Ij, Bbi) + Ij.Add(Ij, one) + Ijb := Ij.Bytes() + // We expect Ijb to be exactly v bytes, + // if it is longer or shorter we must + // adjust it accordingly. + if len(Ijb) > v { + Ijb = Ijb[len(Ijb)-v:] + } + if len(Ijb) < v { + if IjBuf == nil { + IjBuf = make([]byte, v) + } + bytesShort := v - len(Ijb) + for i := 0; i < bytesShort; i++ { + IjBuf[i] = 0 + } + copy(IjBuf[bytesShort:], Ijb) + Ijb = IjBuf + } + copy(I[j*v:(j+1)*v], Ijb) + } + } + } + } + // 7. Concatenate A_1, A_2, ..., A_c together to form a pseudorandom + // bit string, A. + + // 8. Use the first n bits of A as the output of this entire process. + return A[:size] + + // If the above process is being used to generate a DES key, the process + // should be used to create 64 random bits, and the key's parity bits + // should be set after the 64 bits have been produced. Similar concerns + // hold for 2-key and 3-key triple-DES keys, for CDMF keys, and for any + // similar keys with parity bits "built into them". +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/pkcs12.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/pkcs12.go new file mode 100644 index 00000000000..3e2ce694075 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/pkcs12.go @@ -0,0 +1,350 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package pkcs12 implements some of PKCS#12. +// +// This implementation is distilled from https://tools.ietf.org/html/rfc7292 +// and referenced documents. It is intended for decoding P12/PFX-stored +// certificates and keys for use with the crypto/tls package. +// +// This package is frozen. If it's missing functionality you need, consider +// an alternative like software.sslmate.com/src/go-pkcs12. +package pkcs12 + +import ( + "crypto/ecdsa" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "encoding/hex" + "encoding/pem" + "errors" +) + +var ( + oidDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 1}) + oidEncryptedDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 6}) + + oidFriendlyName = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 20}) + oidLocalKeyID = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 21}) + oidMicrosoftCSPName = asn1.ObjectIdentifier([]int{1, 3, 6, 1, 4, 1, 311, 17, 1}) +) + +type pfxPdu struct { + Version int + AuthSafe contentInfo + MacData macData `asn1:"optional"` +} + +type contentInfo struct { + ContentType asn1.ObjectIdentifier + Content asn1.RawValue `asn1:"tag:0,explicit,optional"` +} + +type encryptedData struct { + Version int + EncryptedContentInfo encryptedContentInfo +} + +type encryptedContentInfo struct { + ContentType asn1.ObjectIdentifier + ContentEncryptionAlgorithm pkix.AlgorithmIdentifier + EncryptedContent []byte `asn1:"tag:0,optional"` +} + +func (i encryptedContentInfo) Algorithm() pkix.AlgorithmIdentifier { + return i.ContentEncryptionAlgorithm +} + +func (i encryptedContentInfo) Data() []byte { return i.EncryptedContent } + +type safeBag struct { + Id asn1.ObjectIdentifier + Value asn1.RawValue `asn1:"tag:0,explicit"` + Attributes []pkcs12Attribute `asn1:"set,optional"` +} + +type pkcs12Attribute struct { + Id asn1.ObjectIdentifier + Value asn1.RawValue `asn1:"set"` +} + +type encryptedPrivateKeyInfo struct { + AlgorithmIdentifier pkix.AlgorithmIdentifier + EncryptedData []byte +} + +func (i encryptedPrivateKeyInfo) Algorithm() pkix.AlgorithmIdentifier { + return i.AlgorithmIdentifier +} + +func (i encryptedPrivateKeyInfo) Data() []byte { + return i.EncryptedData +} + +// PEM block types +const ( + certificateType = "CERTIFICATE" + privateKeyType = "PRIVATE KEY" +) + +// unmarshal calls asn1.Unmarshal, but also returns an error if there is any +// trailing data after unmarshaling. +func unmarshal(in []byte, out interface{}) error { + trailing, err := asn1.Unmarshal(in, out) + if err != nil { + return err + } + if len(trailing) != 0 { + return errors.New("pkcs12: trailing data found") + } + return nil +} + +// ToPEM converts all "safe bags" contained in pfxData to PEM blocks. +func ToPEM(pfxData []byte, password string) ([]*pem.Block, error) { + encodedPassword, err := bmpString(password) + if err != nil { + return nil, ErrIncorrectPassword + } + + bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword) + + if err != nil { + return nil, err + } + + blocks := make([]*pem.Block, 0, len(bags)) + for _, bag := range bags { + block, err := convertBag(&bag, encodedPassword) + if err != nil { + return nil, err + } + blocks = append(blocks, block) + } + + return blocks, nil +} + +func convertBag(bag *safeBag, password []byte) (*pem.Block, error) { + block := &pem.Block{ + Headers: make(map[string]string), + } + + for _, attribute := range bag.Attributes { + k, v, err := convertAttribute(&attribute) + if err != nil { + return nil, err + } + block.Headers[k] = v + } + + switch { + case bag.Id.Equal(oidCertBag): + block.Type = certificateType + certsData, err := decodeCertBag(bag.Value.Bytes) + if err != nil { + return nil, err + } + block.Bytes = certsData + case bag.Id.Equal(oidPKCS8ShroundedKeyBag): + block.Type = privateKeyType + + key, err := decodePkcs8ShroudedKeyBag(bag.Value.Bytes, password) + if err != nil { + return nil, err + } + + switch key := key.(type) { + case *rsa.PrivateKey: + block.Bytes = x509.MarshalPKCS1PrivateKey(key) + case *ecdsa.PrivateKey: + block.Bytes, err = x509.MarshalECPrivateKey(key) + if err != nil { + return nil, err + } + default: + return nil, errors.New("found unknown private key type in PKCS#8 wrapping") + } + default: + return nil, errors.New("don't know how to convert a safe bag of type " + bag.Id.String()) + } + return block, nil +} + +func convertAttribute(attribute *pkcs12Attribute) (key, value string, err error) { + isString := false + + switch { + case attribute.Id.Equal(oidFriendlyName): + key = "friendlyName" + isString = true + case attribute.Id.Equal(oidLocalKeyID): + key = "localKeyId" + case attribute.Id.Equal(oidMicrosoftCSPName): + // This key is chosen to match OpenSSL. + key = "Microsoft CSP Name" + isString = true + default: + return "", "", errors.New("pkcs12: unknown attribute with OID " + attribute.Id.String()) + } + + if isString { + if err := unmarshal(attribute.Value.Bytes, &attribute.Value); err != nil { + return "", "", err + } + if value, err = decodeBMPString(attribute.Value.Bytes); err != nil { + return "", "", err + } + } else { + var id []byte + if err := unmarshal(attribute.Value.Bytes, &id); err != nil { + return "", "", err + } + value = hex.EncodeToString(id) + } + + return key, value, nil +} + +// Decode extracts a certificate and private key from pfxData. This function +// assumes that there is only one certificate and only one private key in the +// pfxData; if there are more use ToPEM instead. +func Decode(pfxData []byte, password string) (privateKey interface{}, certificate *x509.Certificate, err error) { + encodedPassword, err := bmpString(password) + if err != nil { + return nil, nil, err + } + + bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword) + if err != nil { + return nil, nil, err + } + + if len(bags) != 2 { + err = errors.New("pkcs12: expected exactly two safe bags in the PFX PDU") + return + } + + for _, bag := range bags { + switch { + case bag.Id.Equal(oidCertBag): + if certificate != nil { + err = errors.New("pkcs12: expected exactly one certificate bag") + } + + certsData, err := decodeCertBag(bag.Value.Bytes) + if err != nil { + return nil, nil, err + } + certs, err := x509.ParseCertificates(certsData) + if err != nil { + return nil, nil, err + } + if len(certs) != 1 { + err = errors.New("pkcs12: expected exactly one certificate in the certBag") + return nil, nil, err + } + certificate = certs[0] + + case bag.Id.Equal(oidPKCS8ShroundedKeyBag): + if privateKey != nil { + err = errors.New("pkcs12: expected exactly one key bag") + return nil, nil, err + } + + if privateKey, err = decodePkcs8ShroudedKeyBag(bag.Value.Bytes, encodedPassword); err != nil { + return nil, nil, err + } + } + } + + if certificate == nil { + return nil, nil, errors.New("pkcs12: certificate missing") + } + if privateKey == nil { + return nil, nil, errors.New("pkcs12: private key missing") + } + + return +} + +func getSafeContents(p12Data, password []byte) (bags []safeBag, updatedPassword []byte, err error) { + pfx := new(pfxPdu) + if err := unmarshal(p12Data, pfx); err != nil { + return nil, nil, errors.New("pkcs12: error reading P12 data: " + err.Error()) + } + + if pfx.Version != 3 { + return nil, nil, NotImplementedError("can only decode v3 PFX PDU's") + } + + if !pfx.AuthSafe.ContentType.Equal(oidDataContentType) { + return nil, nil, NotImplementedError("only password-protected PFX is implemented") + } + + // unmarshal the explicit bytes in the content for type 'data' + if err := unmarshal(pfx.AuthSafe.Content.Bytes, &pfx.AuthSafe.Content); err != nil { + return nil, nil, err + } + + if len(pfx.MacData.Mac.Algorithm.Algorithm) == 0 { + return nil, nil, errors.New("pkcs12: no MAC in data") + } + + if err := verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password); err != nil { + if err == ErrIncorrectPassword && len(password) == 2 && password[0] == 0 && password[1] == 0 { + // some implementations use an empty byte array + // for the empty string password try one more + // time with empty-empty password + password = nil + err = verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password) + } + if err != nil { + return nil, nil, err + } + } + + var authenticatedSafe []contentInfo + if err := unmarshal(pfx.AuthSafe.Content.Bytes, &authenticatedSafe); err != nil { + return nil, nil, err + } + + if len(authenticatedSafe) != 2 { + return nil, nil, NotImplementedError("expected exactly two items in the authenticated safe") + } + + for _, ci := range authenticatedSafe { + var data []byte + + switch { + case ci.ContentType.Equal(oidDataContentType): + if err := unmarshal(ci.Content.Bytes, &data); err != nil { + return nil, nil, err + } + case ci.ContentType.Equal(oidEncryptedDataContentType): + var encryptedData encryptedData + if err := unmarshal(ci.Content.Bytes, &encryptedData); err != nil { + return nil, nil, err + } + if encryptedData.Version != 0 { + return nil, nil, NotImplementedError("only version 0 of EncryptedData is supported") + } + if data, err = pbDecrypt(encryptedData.EncryptedContentInfo, password); err != nil { + return nil, nil, err + } + default: + return nil, nil, NotImplementedError("only data and encryptedData content types are supported in authenticated safe") + } + + var safeContents []safeBag + if err := unmarshal(data, &safeContents); err != nil { + return nil, nil, err + } + bags = append(bags, safeContents...) + } + + return bags, password, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/safebags.go b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/safebags.go new file mode 100644 index 00000000000..def1f7b98d7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/golang.org/x/crypto/pkcs12/safebags.go @@ -0,0 +1,57 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "crypto/x509" + "encoding/asn1" + "errors" +) + +var ( + // see https://tools.ietf.org/html/rfc7292#appendix-D + oidCertTypeX509Certificate = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 22, 1}) + oidPKCS8ShroundedKeyBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 2}) + oidCertBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 3}) +) + +type certBag struct { + Id asn1.ObjectIdentifier + Data []byte `asn1:"tag:0,explicit"` +} + +func decodePkcs8ShroudedKeyBag(asn1Data, password []byte) (privateKey interface{}, err error) { + pkinfo := new(encryptedPrivateKeyInfo) + if err = unmarshal(asn1Data, pkinfo); err != nil { + return nil, errors.New("pkcs12: error decoding PKCS#8 shrouded key bag: " + err.Error()) + } + + pkData, err := pbDecrypt(pkinfo, password) + if err != nil { + return nil, errors.New("pkcs12: error decrypting PKCS#8 shrouded key bag: " + err.Error()) + } + + ret := new(asn1.RawValue) + if err = unmarshal(pkData, ret); err != nil { + return nil, errors.New("pkcs12: error unmarshaling decrypted private key: " + err.Error()) + } + + if privateKey, err = x509.ParsePKCS8PrivateKey(pkData); err != nil { + return nil, errors.New("pkcs12: error parsing PKCS#8 private key: " + err.Error()) + } + + return privateKey, nil +} + +func decodeCertBag(asn1Data []byte) (x509Certificates []byte, err error) { + bag := new(certBag) + if err := unmarshal(asn1Data, bag); err != nil { + return nil, errors.New("pkcs12: error decoding cert bag: " + err.Error()) + } + if !bag.Id.Equal(oidCertTypeX509Certificate) { + return nil, NotImplementedError("only X509 certificates are supported") + } + return bag.Data, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/vendor.json b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/vendor.json index 774da44ff8f..137bb2dc97b 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/vendor.json +++ b/vendor/github.com/hashicorp/go-discover/provider/azure/vendor/vendor.json @@ -2,18 +2,24 @@ "comment": "", "ignore": "test", "package": [ - {"path":"github.com/Azure/azure-sdk-for-go/arm/network","checksumSHA1":"PDMRG1zVjFxDESUXBwR74V+zVHs=","revision":"a49674fdba11173ce3bc934d020634e3366464de","revisionTime":"2017-12-12T18:23:29Z"}, - {"path":"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-05-01-preview/network","checksumSHA1":"TbC3pmqxFGaynGil/kEjLyBt2Ew=","revision":"4b3cf752d4d7bf6bbf3cde9d5c4d1157098726e3","revisionTime":"2018-04-30T22:05:37Z"}, - {"path":"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network","checksumSHA1":"Fs6Gcl0nhC0FJ6MsB+Ck7r4huYo=","revision":"4b3cf752d4d7bf6bbf3cde9d5c4d1157098726e3","revisionTime":"2018-04-30T22:05:37Z"}, - {"path":"github.com/Azure/azure-sdk-for-go/version","checksumSHA1":"9XPEy8cuc26nu3Sa19xVtO8j6c4=","revision":"4b3cf752d4d7bf6bbf3cde9d5c4d1157098726e3","revisionTime":"2018-04-30T22:05:37Z"}, - {"path":"github.com/Azure/go-autorest/autorest","checksumSHA1":"MlFs4OQ2cCVlZvSeKSgpdUoLKBs=","revision":"5cdef8c5dbd65369ef90f1b8d7ea2b7348ffc862","revisionTime":"2018-04-27T22:46:30Z"}, - {"path":"github.com/Azure/go-autorest/autorest/adal","checksumSHA1":"vMERbrCV9o4TWRw4dC75uaNihSc=","revision":"5cdef8c5dbd65369ef90f1b8d7ea2b7348ffc862","revisionTime":"2018-04-27T22:46:30Z"}, - {"path":"github.com/Azure/go-autorest/autorest/azure","checksumSHA1":"vUHo41PG/G6Qq+vqD65l9KHFxUs=","revision":"5cdef8c5dbd65369ef90f1b8d7ea2b7348ffc862","revisionTime":"2018-04-27T22:46:30Z"}, - {"path":"github.com/Azure/go-autorest/autorest/date","checksumSHA1":"9nXCi9qQsYjxCeajJKWttxgEt0I=","revision":"5cdef8c5dbd65369ef90f1b8d7ea2b7348ffc862","revisionTime":"2018-04-27T22:46:30Z"}, - {"path":"github.com/Azure/go-autorest/autorest/to","checksumSHA1":"SbBb2GcJNm5GjuPKGL2777QywR4=","revision":"5cdef8c5dbd65369ef90f1b8d7ea2b7348ffc862","revisionTime":"2018-04-27T22:46:30Z"}, - {"path":"github.com/Azure/go-autorest/autorest/validation","checksumSHA1":"5UH4IFIB/98iowPCzzVs4M4MXiQ=","revision":"5cdef8c5dbd65369ef90f1b8d7ea2b7348ffc862","revisionTime":"2018-04-27T22:46:30Z"}, + {"path":"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2015-06-15/network","checksumSHA1":"Q3ShmdeEBtLVtKCecTeg/l2BskI=","revision":"0820c0553d6c410603056869f7b0e52d61ce5bee","revisionTime":"2019-11-18T06:05:48Z"}, + {"path":"github.com/Azure/azure-sdk-for-go/version","checksumSHA1":"iTWK13IzGu+91mcKEbiBExc4bl8=","revision":"0820c0553d6c410603056869f7b0e52d61ce5bee","revisionTime":"2019-11-18T06:05:48Z"}, + {"path":"github.com/Azure/go-autorest/autorest","checksumSHA1":"aDAGv8zdDrun77KVMYPtGD9t5n4=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/autorest/adal","checksumSHA1":"+sZIvmeyhDh28yRhsXVt9+I7Dhk=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/autorest/azure","checksumSHA1":"sV4wrmfmuKvYpPRPkoPObeBC77g=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/autorest/azure/auth","checksumSHA1":"S5giB0ep3QAQtB4cQJlLiaPmcFA=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/autorest/azure/cli","checksumSHA1":"thSHLNGJe/E+o7BjGctLPb0pzK8=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/autorest/date","checksumSHA1":"I9jacF5Ym6s2GU8dpi9yUT6I1hM=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/autorest/to","checksumSHA1":"o3pFknhovwgqplUNXkr6mOpEw24=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/autorest/validation","checksumSHA1":"uh3gcvSj8u8aPYC+x4YU19Gu8Tw=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/logger","checksumSHA1":"nXtlS0uRMjqa8+dmeEqo3j3AXEo=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, + {"path":"github.com/Azure/go-autorest/tracing","checksumSHA1":"StsBozgf+C8kMv6htCiFBJbmmUw=","revision":"3492b2aff5036c67228ab3c7dba3577c871db200","revisionTime":"2019-10-28T18:08:45Z"}, {"path":"github.com/dgrijalva/jwt-go","checksumSHA1":"+TKtBzv23ywvmmqRiGEjUba4YmI=","revision":"dbeaa9332f19a944acb5736b4456cfcc02140e29","revisionTime":"2017-10-19T21:57:19Z"}, - {"path":"github.com/hashicorp/go-discover/provider/azure","checksumSHA1":"F8qQlAbbXZWigahcusD+1FOgXuU=","revision":"c7c0eb3fc6b6f8024c39cb24f3fe254a72595dd4","revisionTime":"2018-04-27T00:43:23Z"} + {"path":"github.com/dimchansky/utfbom","checksumSHA1":"L7NqEfBxi5sjuvjE8hnDimfGemA=","revision":"d2133a1ce379ef6fa992b0514a77146c60db9d1c","revisionTime":"2018-12-05T23:29:56Z"}, + {"path":"github.com/hashicorp/go-discover/provider/azure","checksumSHA1":"F8qQlAbbXZWigahcusD+1FOgXuU=","revision":"c7c0eb3fc6b6f8024c39cb24f3fe254a72595dd4","revisionTime":"2018-04-27T00:43:23Z"}, + {"path":"github.com/mitchellh/go-homedir","checksumSHA1":"7zLQC+jG19ndjH24FVh/+ZliHac=","revision":"af06845cf3004701891bf4fdb884bfe4920b3727","revisionTime":"2019-01-27T04:21:35Z"}, + {"path":"golang.org/x/crypto/pkcs12","checksumSHA1":"8ghRWpo8K3eh920FNT0h/5FtPI4=","revision":"86a70503ff7e82ffc18c7b0de83db35da4791e6a","revisionTime":"2019-11-20T00:30:15Z"}, + {"path":"golang.org/x/crypto/pkcs12/internal/rc2","checksumSHA1":"p0GC51McIdA7JygoP223twJ1s0E=","revision":"86a70503ff7e82ffc18c7b0de83db35da4791e6a","revisionTime":"2019-11-20T00:30:15Z"} ], "rootPath": "github.com/hashicorp/go-discover/provider/azure" } diff --git a/vendor/github.com/hashicorp/go-discover/provider/digitalocean/digitalocean_discover.go b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/digitalocean_discover.go index 81b5808d8ca..fbd07716196 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/digitalocean/digitalocean_discover.go +++ b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/digitalocean_discover.go @@ -11,7 +11,13 @@ import ( "golang.org/x/oauth2" ) -type Provider struct{} +type Provider struct { + userAgent string +} + +func (p *Provider) SetUserAgent(s string) { + p.userAgent = s +} func (p *Provider) Help() string { return `DigitalOcean: @@ -86,6 +92,9 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error oauthClient := oauth2.NewClient(context.TODO(), tokenSource) client := godo.NewClient(oauthClient) + if p.userAgent != "" { + client.UserAgent = p.userAgent + } droplets, err := listDropletsByTag(client, tagName) if err != nil { diff --git a/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/golang.org/x/oauth2/client_appengine.go b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/golang.org/x/oauth2/client_appengine.go new file mode 100644 index 00000000000..8962c49d1de --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/golang.org/x/oauth2/client_appengine.go @@ -0,0 +1,25 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appengine + +// App Engine hooks. + +package oauth2 + +import ( + "net/http" + + "golang.org/x/net/context" + "golang.org/x/oauth2/internal" + "google.golang.org/appengine/urlfetch" +) + +func init() { + internal.RegisterContextClientFunc(contextClientAppEngine) +} + +func contextClientAppEngine(ctx context.Context) (*http.Client, error) { + return urlfetch.Client(ctx), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/api_classic.go b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/api_classic.go new file mode 100644 index 00000000000..952b6e6682b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/api_classic.go @@ -0,0 +1,165 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "errors" + "fmt" + "net/http" + "time" + + "appengine" + "appengine_internal" + basepb "appengine_internal/base" + + "github.com/golang/protobuf/proto" + netcontext "golang.org/x/net/context" +) + +var contextKey = "holds an appengine.Context" + +// fromContext returns the App Engine context or nil if ctx is not +// derived from an App Engine context. +func fromContext(ctx netcontext.Context) appengine.Context { + c, _ := ctx.Value(&contextKey).(appengine.Context) + return c +} + +// This is only for classic App Engine adapters. +func ClassicContextFromContext(ctx netcontext.Context) (appengine.Context, error) { + c := fromContext(ctx) + if c == nil { + return nil, errNotAppEngineContext + } + return c, nil +} + +func withContext(parent netcontext.Context, c appengine.Context) netcontext.Context { + ctx := netcontext.WithValue(parent, &contextKey, c) + + s := &basepb.StringProto{} + c.Call("__go__", "GetNamespace", &basepb.VoidProto{}, s, nil) + if ns := s.GetValue(); ns != "" { + ctx = NamespacedContext(ctx, ns) + } + + return ctx +} + +func IncomingHeaders(ctx netcontext.Context) http.Header { + if c := fromContext(ctx); c != nil { + if req, ok := c.Request().(*http.Request); ok { + return req.Header + } + } + return nil +} + +func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context { + c := appengine.NewContext(req) + return withContext(parent, c) +} + +type testingContext struct { + appengine.Context + + req *http.Request +} + +func (t *testingContext) FullyQualifiedAppID() string { return "dev~testcontext" } +func (t *testingContext) Call(service, method string, _, _ appengine_internal.ProtoMessage, _ *appengine_internal.CallOptions) error { + if service == "__go__" && method == "GetNamespace" { + return nil + } + return fmt.Errorf("testingContext: unsupported Call") +} +func (t *testingContext) Request() interface{} { return t.req } + +func ContextForTesting(req *http.Request) netcontext.Context { + return withContext(netcontext.Background(), &testingContext{req: req}) +} + +func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error { + if ns := NamespaceFromContext(ctx); ns != "" { + if fn, ok := NamespaceMods[service]; ok { + fn(in, ns) + } + } + + if f, ctx, ok := callOverrideFromContext(ctx); ok { + return f(ctx, service, method, in, out) + } + + // Handle already-done contexts quickly. + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + c := fromContext(ctx) + if c == nil { + // Give a good error message rather than a panic lower down. + return errNotAppEngineContext + } + + // Apply transaction modifications if we're in a transaction. + if t := transactionFromContext(ctx); t != nil { + if t.finished { + return errors.New("transaction context has expired") + } + applyTransaction(in, &t.transaction) + } + + var opts *appengine_internal.CallOptions + if d, ok := ctx.Deadline(); ok { + opts = &appengine_internal.CallOptions{ + Timeout: d.Sub(time.Now()), + } + } + + err := c.Call(service, method, in, out, opts) + switch v := err.(type) { + case *appengine_internal.APIError: + return &APIError{ + Service: v.Service, + Detail: v.Detail, + Code: v.Code, + } + case *appengine_internal.CallError: + return &CallError{ + Detail: v.Detail, + Code: v.Code, + Timeout: v.Timeout, + } + } + return err +} + +func handleHTTP(w http.ResponseWriter, r *http.Request) { + panic("handleHTTP called; this should be impossible") +} + +func logf(c appengine.Context, level int64, format string, args ...interface{}) { + var fn func(format string, args ...interface{}) + switch level { + case 0: + fn = c.Debugf + case 1: + fn = c.Infof + case 2: + fn = c.Warningf + case 3: + fn = c.Errorf + case 4: + fn = c.Criticalf + default: + // This shouldn't happen. + fn = c.Criticalf + } + fn(format, args...) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/identity_classic.go b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/identity_classic.go new file mode 100644 index 00000000000..b59603f1329 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/identity_classic.go @@ -0,0 +1,57 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "appengine" + + netcontext "golang.org/x/net/context" +) + +func DefaultVersionHostname(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return appengine.DefaultVersionHostname(c) +} + +func Datacenter(_ netcontext.Context) string { return appengine.Datacenter() } +func ServerSoftware() string { return appengine.ServerSoftware() } +func InstanceID() string { return appengine.InstanceID() } +func IsDevAppServer() bool { return appengine.IsDevAppServer() } + +func RequestID(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return appengine.RequestID(c) +} + +func ModuleName(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return appengine.ModuleName(c) +} +func VersionID(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return appengine.VersionID(c) +} + +func fullyQualifiedAppID(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return c.FullyQualifiedAppID() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/main.go b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/main.go new file mode 100644 index 00000000000..49036163c2b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/digitalocean/vendor/google.golang.org/appengine/internal/main.go @@ -0,0 +1,15 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "appengine_internal" +) + +func Main() { + appengine_internal.Main() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/gce/gce_discover.go b/vendor/github.com/hashicorp/go-discover/provider/gce/gce_discover.go index f502dc8a692..2064cb193c4 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/gce/gce_discover.go +++ b/vendor/github.com/hashicorp/go-discover/provider/gce/gce_discover.go @@ -12,7 +12,13 @@ import ( compute "google.golang.org/api/compute/v1" ) -type Provider struct{} +type Provider struct { + userAgent string +} + +func (p *Provider) SetUserAgent(s string) { + p.userAgent = s +} func (p *Provider) Help() string { return `Google Cloud: @@ -73,6 +79,9 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error if err != nil { return nil, fmt.Errorf("discover-gce: %s", err) } + if p.userAgent != "" { + svc.UserAgent = p.userAgent + } // lookup the project zones to look in if zone != "" { diff --git a/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/golang.org/x/oauth2/client_appengine.go b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/golang.org/x/oauth2/client_appengine.go new file mode 100644 index 00000000000..8962c49d1de --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/golang.org/x/oauth2/client_appengine.go @@ -0,0 +1,25 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appengine + +// App Engine hooks. + +package oauth2 + +import ( + "net/http" + + "golang.org/x/net/context" + "golang.org/x/oauth2/internal" + "google.golang.org/appengine/urlfetch" +) + +func init() { + internal.RegisterContextClientFunc(contextClientAppEngine) +} + +func contextClientAppEngine(ctx context.Context) (*http.Client, error) { + return urlfetch.Client(ctx), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/golang.org/x/oauth2/google/appengine_hook.go b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/golang.org/x/oauth2/google/appengine_hook.go new file mode 100644 index 00000000000..6f66411412c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/golang.org/x/oauth2/google/appengine_hook.go @@ -0,0 +1,14 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appengine + +package google + +import "google.golang.org/appengine" + +func init() { + appengineTokenFunc = appengine.AccessToken + appengineAppIDFunc = appengine.AppID +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/api_classic.go b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/api_classic.go new file mode 100644 index 00000000000..597f66e6ea2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/api_classic.go @@ -0,0 +1,159 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "errors" + "fmt" + "net/http" + "time" + + "appengine" + "appengine_internal" + basepb "appengine_internal/base" + + "github.com/golang/protobuf/proto" + netcontext "golang.org/x/net/context" +) + +var contextKey = "holds an appengine.Context" + +func fromContext(ctx netcontext.Context) appengine.Context { + c, _ := ctx.Value(&contextKey).(appengine.Context) + return c +} + +// This is only for classic App Engine adapters. +func ClassicContextFromContext(ctx netcontext.Context) appengine.Context { + return fromContext(ctx) +} + +func withContext(parent netcontext.Context, c appengine.Context) netcontext.Context { + ctx := netcontext.WithValue(parent, &contextKey, c) + + s := &basepb.StringProto{} + c.Call("__go__", "GetNamespace", &basepb.VoidProto{}, s, nil) + if ns := s.GetValue(); ns != "" { + ctx = NamespacedContext(ctx, ns) + } + + return ctx +} + +func IncomingHeaders(ctx netcontext.Context) http.Header { + if c := fromContext(ctx); c != nil { + if req, ok := c.Request().(*http.Request); ok { + return req.Header + } + } + return nil +} + +func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context { + c := appengine.NewContext(req) + return withContext(parent, c) +} + +type testingContext struct { + appengine.Context + + req *http.Request +} + +func (t *testingContext) FullyQualifiedAppID() string { return "dev~testcontext" } +func (t *testingContext) Call(service, method string, _, _ appengine_internal.ProtoMessage, _ *appengine_internal.CallOptions) error { + if service == "__go__" && method == "GetNamespace" { + return nil + } + return fmt.Errorf("testingContext: unsupported Call") +} +func (t *testingContext) Request() interface{} { return t.req } + +func ContextForTesting(req *http.Request) netcontext.Context { + return withContext(netcontext.Background(), &testingContext{req: req}) +} + +func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error { + if ns := NamespaceFromContext(ctx); ns != "" { + if fn, ok := NamespaceMods[service]; ok { + fn(in, ns) + } + } + + if f, ctx, ok := callOverrideFromContext(ctx); ok { + return f(ctx, service, method, in, out) + } + + // Handle already-done contexts quickly. + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + c := fromContext(ctx) + if c == nil { + // Give a good error message rather than a panic lower down. + return errors.New("not an App Engine context") + } + + // Apply transaction modifications if we're in a transaction. + if t := transactionFromContext(ctx); t != nil { + if t.finished { + return errors.New("transaction context has expired") + } + applyTransaction(in, &t.transaction) + } + + var opts *appengine_internal.CallOptions + if d, ok := ctx.Deadline(); ok { + opts = &appengine_internal.CallOptions{ + Timeout: d.Sub(time.Now()), + } + } + + err := c.Call(service, method, in, out, opts) + switch v := err.(type) { + case *appengine_internal.APIError: + return &APIError{ + Service: v.Service, + Detail: v.Detail, + Code: v.Code, + } + case *appengine_internal.CallError: + return &CallError{ + Detail: v.Detail, + Code: v.Code, + Timeout: v.Timeout, + } + } + return err +} + +func handleHTTP(w http.ResponseWriter, r *http.Request) { + panic("handleHTTP called; this should be impossible") +} + +func logf(c appengine.Context, level int64, format string, args ...interface{}) { + var fn func(format string, args ...interface{}) + switch level { + case 0: + fn = c.Debugf + case 1: + fn = c.Infof + case 2: + fn = c.Warningf + case 3: + fn = c.Errorf + case 4: + fn = c.Criticalf + default: + // This shouldn't happen. + fn = c.Criticalf + } + fn(format, args...) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/identity_classic.go b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/identity_classic.go new file mode 100644 index 00000000000..e6b9227c566 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/identity_classic.go @@ -0,0 +1,27 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "appengine" + + netcontext "golang.org/x/net/context" +) + +func DefaultVersionHostname(ctx netcontext.Context) string { + return appengine.DefaultVersionHostname(fromContext(ctx)) +} + +func RequestID(ctx netcontext.Context) string { return appengine.RequestID(fromContext(ctx)) } +func Datacenter(_ netcontext.Context) string { return appengine.Datacenter() } +func ServerSoftware() string { return appengine.ServerSoftware() } +func ModuleName(ctx netcontext.Context) string { return appengine.ModuleName(fromContext(ctx)) } +func VersionID(ctx netcontext.Context) string { return appengine.VersionID(fromContext(ctx)) } +func InstanceID() string { return appengine.InstanceID() } +func IsDevAppServer() bool { return appengine.IsDevAppServer() } + +func fullyQualifiedAppID(ctx netcontext.Context) string { return fromContext(ctx).FullyQualifiedAppID() } diff --git a/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/main.go b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/main.go new file mode 100644 index 00000000000..49036163c2b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/gce/vendor/google.golang.org/appengine/internal/main.go @@ -0,0 +1,15 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "appengine_internal" +) + +func Main() { + appengine_internal.Main() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/k8s/k8s_discover.go b/vendor/github.com/hashicorp/go-discover/provider/k8s/k8s_discover.go new file mode 100644 index 00000000000..28bc8fed538 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/k8s/k8s_discover.go @@ -0,0 +1,209 @@ +// Package k8s provides pod discovery for Kubernetes. +package k8s + +import ( + "fmt" + "log" + "path/filepath" + "strconv" + + "github.com/hashicorp/go-multierror" + "github.com/mitchellh/go-homedir" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + + // Register all known auth mechanisms since we might be authenticating + // from anywhere. + _ "k8s.io/client-go/plugin/pkg/client/auth" +) + +const ( + // AnnotationKeyPort is the annotation name of the field that specifies + // the port name or number to append to the address. + AnnotationKeyPort = "consul.hashicorp.com/auto-join-port" +) + +type Provider struct{} + +func (p *Provider) Help() string { + return `Kubernetes (K8S): + + provider: "k8s" + kubeconfig: Path to the kubeconfig file. + namespace: Namespace to search for pods (defaults to "default"). + label_selector: Label selector value to filter pods. + field_selector: Field selector value to filter pods. + host_network: "true" if pod host IP and ports should be used. + + The kubeconfig file value will be searched in the following locations: + + 1. Use path from "kubeconfig" option if provided. + 2. Use path from KUBECONFIG environment variable. + 3. Use default path of $HOME/.kube/config + + By default, the Pod IP is used to join. The "host_network" option may + be set to use the Host IP. No port is used by default. Pods may set + an annotation 'hashicorp/consul-auto-join-port' to a named port or + an integer value. If the value matches a named port, that port will + be used to join. + + Note that if "host_network" is set to true, then only pods that have + a HostIP available will be selected. If a port annotation exists, then + the port must be exposed via a HostPort as well, otherwise the pod will + be ignored. +` +} + +func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error) { + if args["provider"] != "k8s" { + return nil, fmt.Errorf("discover-k8s: invalid provider " + args["provider"]) + } + + // Get the configuration. This can come from multiple sources. We first + // try kubeconfig it is set directly, then we fall back to in-cluster + // auth. Finally, we try the default kubeconfig path. + kubeconfig := args["kubeconfig"] + if kubeconfig == "" { + // If kubeconfig is empty, let's first try the default directory. + // This is must faster than trying in-cluster auth so we try this + // first. + dir, err := homedir.Dir() + if err != nil { + return nil, fmt.Errorf("discover-k8s: error retrieving home directory: %s", err) + } + kubeconfig = filepath.Join(dir, ".kube", "config") + } + + // First try to get the configuration from the kubeconfig value + config, configErr := clientcmd.BuildConfigFromFlags("", kubeconfig) + if configErr != nil { + configErr = fmt.Errorf("discover-k8s: error loading kubeconfig: %s", configErr) + + // kubeconfig failed, fall back and try in-cluster config. We do + // this as the fallback since this makes network connections and + // is much slower to fail. + var err error + config, err = rest.InClusterConfig() + if err != nil { + return nil, multierror.Append(configErr, fmt.Errorf( + "discover-k8s: error loading in-cluster config: %s", err)) + } + } + + // Initialize the clientset + clientset, err := kubernetes.NewForConfig(config) + if err != nil { + return nil, fmt.Errorf("discover-k8s: error initializing k8s client: %s", err) + } + + namespace := args["namespace"] + if namespace == "" { + namespace = "default" + } + + // List all the pods based on the filters we requested + pods, err := clientset.CoreV1().Pods(namespace).List(metav1.ListOptions{ + LabelSelector: args["label_selector"], + FieldSelector: args["field_selector"], + }) + if err != nil { + return nil, fmt.Errorf("discover-k8s: error listing pods: %s", err) + } + + return PodAddrs(pods, args, l) +} + +// PodAddrs extracts the addresses from a list of pods. +// +// This is a separate method so that we can unit test this without having +// to setup complicated K8S cluster scenarios. It shouldn't generally be +// called externally. +func PodAddrs(pods *corev1.PodList, args map[string]string, l *log.Logger) ([]string, error) { + hostNetwork := false + if v := args["host_network"]; v != "" { + var err error + hostNetwork, err = strconv.ParseBool(v) + if err != nil { + return nil, fmt.Errorf("discover-k8s: host_network must be boolean value: %s", err) + } + } + + var addrs []string +PodLoop: + for _, pod := range pods.Items { + if pod.Status.Phase != corev1.PodRunning { + l.Printf("[DEBUG] discover-k8s: ignoring pod %q, not running: %q", + pod.Name, pod.Status.Phase) + continue + } + + // If there is a Ready condition available, we need that to be true. + // If no ready condition is set, then we accept this pod regardless. + for _, condition := range pod.Status.Conditions { + if condition.Type == corev1.PodReady && condition.Status != corev1.ConditionTrue { + l.Printf("[DEBUG] discover-k8s: ignoring pod %q, not ready state", pod.Name) + continue PodLoop + } + } + + // Get the IP address that we will join. + addr := pod.Status.PodIP + if hostNetwork { + addr = pod.Status.HostIP + } + if addr == "" { + // This can be empty according to the API docs, so we protect that. + l.Printf("[DEBUG] discover-k8s: ignoring pod %q, requested IP is empty", pod.Name) + continue + } + + // We only use the port if it is specified as an annotation. The + // annotation value can be a name or a number. + if v := pod.Annotations[AnnotationKeyPort]; v != "" { + port, err := podPort(&pod, v, hostNetwork) + if err != nil { + l.Printf("[DEBUG] discover-k8s: ignoring pod %q, error retrieving port: %s", + pod.Name, err) + continue + } + + addr = fmt.Sprintf("%s:%d", addr, port) + } + + addrs = append(addrs, addr) + } + + return addrs, nil +} + +// podPort extracts the proper port for the address from the given pod +// for a non-empty annotation. +// +// Pre-condition: annotation is non-empty +func podPort(pod *corev1.Pod, annotation string, host bool) (int32, error) { + // First look for a matching port matching the value of the annotation. + for _, container := range pod.Spec.Containers { + for _, portDef := range container.Ports { + if portDef.Name == annotation { + if host { + // It is possible for HostPort to be zero, if that is the + // case then we ignore this port. + if portDef.HostPort == 0 { + continue + } + + return portDef.HostPort, nil + } + + return portDef.ContainerPort, nil + } + } + } + + // Otherwise assume that the port is a numeric value. + v, err := strconv.ParseInt(annotation, 0, 32) + return int32(v), err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/linode_discover.go b/vendor/github.com/hashicorp/go-discover/provider/linode/linode_discover.go new file mode 100644 index 00000000000..7322dab34f7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/linode_discover.go @@ -0,0 +1,142 @@ +// Package linode provides node discovery for Linode. +package linode + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "log" + "net/http" + "os" + + "github.com/linode/linodego" + "golang.org/x/oauth2" +) + +type Filter struct { + Region string `json:"region,omitempty"` + Tag string `json:"tags,omitempty"` +} + +type Provider struct { + userAgent string +} + +func (p *Provider) SetUserAgent(s string) { + p.userAgent = s +} + +func (p *Provider) Help() string { + return `Linode: + provider: "linode" + api_token: The Linode API token to use + region: The Linode region to filter on + tag_name: The tag name to filter on + address_type: "private_v4", "public_v4", "private_v6" or "public_v6". (default: "private_v4") + + Variables can also be provided by environment variables: + export LINODE_TOKEN for api_token +` +} + +func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error) { + if args["provider"] != "linode" { + return nil, fmt.Errorf("discover-linode: invalid provider " + args["provider"]) + } + + if l == nil { + l = log.New(ioutil.Discard, "", 0) + } + + addressType := args["address_type"] + region := args["region"] + tagName := args["tag_name"] + apiToken := argsOrEnv(args, "api_token", "LINODE_TOKEN") + l.Printf("[DEBUG] discover-linode: Using address_type=%s region=%s tag_name=%s", addressType, region, tagName) + + client := getLinodeClient(p.userAgent, apiToken) + + filters := Filter{ + Region: "", + Tag: "", + } + + if region != "" { + filters.Region = region + } + if tagName != "" { + filters.Tag = tagName + } + + jsonFilters, _ := json.Marshal(filters) + filterOpt := linodego.ListOptions{Filter: string(jsonFilters)} + + linodes, err := client.ListInstances(context.Background(), &filterOpt) + if err != nil { + return nil, fmt.Errorf("discover-linode: Fetching Linode instances failed: %s", err) + } + + var addrs []string + for _, linode := range linodes { + addr, err := client.GetInstanceIPAddresses(context.Background(), linode.ID) + if err != nil { + return nil, fmt.Errorf("discover-linode: Fetching Linode IP address for instance %v failed: %s", linode.ID, err) + } + + switch addressType { + case "public_v4": + if len(addr.IPv4.Public) == 0 { + break + } + addrs = append(addrs, addr.IPv4.Public[0].Address) + case "private_v4": + if len(addr.IPv4.Private) == 0 { + break + } + addrs = append(addrs, addr.IPv4.Private[0].Address) + case "public_v6": + if addr.IPv6.SLAAC.Address == "" { + break + } + addrs = append(addrs, addr.IPv6.SLAAC.Address) + case "private_v6": + if addr.IPv6.LinkLocal.Address == "" { + break + } + addrs = append(addrs, addr.IPv6.LinkLocal.Address) + default: + if len(addr.IPv4.Private) == 0 { + break + } + addrs = append(addrs, addr.IPv4.Private[0].Address) + } + } + + return addrs, nil +} + +func getLinodeClient(userAgent, apiToken string) linodego.Client { + tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: apiToken}) + + oauth2Client := &http.Client{ + Transport: &oauth2.Transport{ + Source: tokenSource, + }, + } + + client := linodego.NewClient(oauth2Client) + + if userAgent != "" { + client.SetUserAgent(userAgent) + } + + return client +} + +func argsOrEnv(args map[string]string, key, env string) string { + if value := args[key]; value != "" { + return value + } + return os.Getenv(env) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/LICENSE new file mode 100644 index 00000000000..0f646931a46 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/LICENSE @@ -0,0 +1,28 @@ +Copyright 2010 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/clone.go new file mode 100644 index 00000000000..3cd3249f706 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/clone.go @@ -0,0 +1,253 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Protocol buffer deep copy and merge. +// TODO: RawMessage. + +package proto + +import ( + "fmt" + "log" + "reflect" + "strings" +) + +// Clone returns a deep copy of a protocol buffer. +func Clone(src Message) Message { + in := reflect.ValueOf(src) + if in.IsNil() { + return src + } + out := reflect.New(in.Type().Elem()) + dst := out.Interface().(Message) + Merge(dst, src) + return dst +} + +// Merger is the interface representing objects that can merge messages of the same type. +type Merger interface { + // Merge merges src into this message. + // Required and optional fields that are set in src will be set to that value in dst. + // Elements of repeated fields will be appended. + // + // Merge may panic if called with a different argument type than the receiver. + Merge(src Message) +} + +// generatedMerger is the custom merge method that generated protos will have. +// We must add this method since a generate Merge method will conflict with +// many existing protos that have a Merge data field already defined. +type generatedMerger interface { + XXX_Merge(src Message) +} + +// Merge merges src into dst. +// Required and optional fields that are set in src will be set to that value in dst. +// Elements of repeated fields will be appended. +// Merge panics if src and dst are not the same type, or if dst is nil. +func Merge(dst, src Message) { + if m, ok := dst.(Merger); ok { + m.Merge(src) + return + } + + in := reflect.ValueOf(src) + out := reflect.ValueOf(dst) + if out.IsNil() { + panic("proto: nil destination") + } + if in.Type() != out.Type() { + panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src)) + } + if in.IsNil() { + return // Merge from nil src is a noop + } + if m, ok := dst.(generatedMerger); ok { + m.XXX_Merge(src) + return + } + mergeStruct(out.Elem(), in.Elem()) +} + +func mergeStruct(out, in reflect.Value) { + sprop := GetProperties(in.Type()) + for i := 0; i < in.NumField(); i++ { + f := in.Type().Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) + } + + if emIn, err := extendable(in.Addr().Interface()); err == nil { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } + } + + uf := in.FieldByName("XXX_unrecognized") + if !uf.IsValid() { + return + } + uin := uf.Bytes() + if len(uin) > 0 { + out.FieldByName("XXX_unrecognized").SetBytes(append([]byte(nil), uin...)) + } +} + +// mergeAny performs a merge between two values of the same type. +// viaPtr indicates whether the values were indirected through a pointer (implying proto2). +// prop is set if this is a struct field (it may be nil). +func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) { + if in.Type() == protoMessageType { + if !in.IsNil() { + if out.IsNil() { + out.Set(reflect.ValueOf(Clone(in.Interface().(Message)))) + } else { + Merge(out.Interface().(Message), in.Interface().(Message)) + } + } + return + } + switch in.Kind() { + case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, + reflect.String, reflect.Uint32, reflect.Uint64: + if !viaPtr && isProto3Zero(in) { + return + } + out.Set(in) + case reflect.Interface: + // Probably a oneof field; copy non-nil values. + if in.IsNil() { + return + } + // Allocate destination if it is not set, or set to a different type. + // Otherwise we will merge as normal. + if out.IsNil() || out.Elem().Type() != in.Elem().Type() { + out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T) + } + mergeAny(out.Elem(), in.Elem(), false, nil) + case reflect.Map: + if in.Len() == 0 { + return + } + if out.IsNil() { + out.Set(reflect.MakeMap(in.Type())) + } + // For maps with value types of *T or []byte we need to deep copy each value. + elemKind := in.Type().Elem().Kind() + for _, key := range in.MapKeys() { + var val reflect.Value + switch elemKind { + case reflect.Ptr: + val = reflect.New(in.Type().Elem().Elem()) + mergeAny(val, in.MapIndex(key), false, nil) + case reflect.Slice: + val = in.MapIndex(key) + val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) + default: + val = in.MapIndex(key) + } + out.SetMapIndex(key, val) + } + case reflect.Ptr: + if in.IsNil() { + return + } + if out.IsNil() { + out.Set(reflect.New(in.Elem().Type())) + } + mergeAny(out.Elem(), in.Elem(), true, nil) + case reflect.Slice: + if in.IsNil() { + return + } + if in.Type().Elem().Kind() == reflect.Uint8 { + // []byte is a scalar bytes field, not a repeated field. + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value, and should not + // be merged. + if prop != nil && prop.proto3 && in.Len() == 0 { + return + } + + // Make a deep copy. + // Append to []byte{} instead of []byte(nil) so that we never end up + // with a nil result. + out.SetBytes(append([]byte{}, in.Bytes()...)) + return + } + n := in.Len() + if out.IsNil() { + out.Set(reflect.MakeSlice(in.Type(), 0, n)) + } + switch in.Type().Elem().Kind() { + case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, + reflect.String, reflect.Uint32, reflect.Uint64: + out.Set(reflect.AppendSlice(out, in)) + default: + for i := 0; i < n; i++ { + x := reflect.Indirect(reflect.New(in.Type().Elem())) + mergeAny(x, in.Index(i), false, nil) + out.Set(reflect.Append(out, x)) + } + } + case reflect.Struct: + mergeStruct(out, in) + default: + // unknown type, so not a protocol buffer + log.Printf("proto: don't know how to copy %v", in) + } +} + +func mergeExtension(out, in map[int32]Extension) { + for extNum, eIn := range in { + eOut := Extension{desc: eIn.desc} + if eIn.value != nil { + v := reflect.New(reflect.TypeOf(eIn.value)).Elem() + mergeAny(v, reflect.ValueOf(eIn.value), false, nil) + eOut.value = v.Interface() + } + if eIn.enc != nil { + eOut.enc = make([]byte, len(eIn.enc)) + copy(eOut.enc, eIn.enc) + } + + out[extNum] = eOut + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/decode.go new file mode 100644 index 00000000000..63b0f08bef2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/decode.go @@ -0,0 +1,427 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for decoding protocol buffer data to construct in-memory representations. + */ + +import ( + "errors" + "fmt" + "io" +) + +// errOverflow is returned when an integer is too large to be represented. +var errOverflow = errors.New("proto: integer overflow") + +// ErrInternalBadWireType is returned by generated code when an incorrect +// wire type is encountered. It does not get returned to user code. +var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") + +// DecodeVarint reads a varint-encoded integer from the slice. +// It returns the integer and the number of bytes consumed, or +// zero if there is not enough. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func DecodeVarint(buf []byte) (x uint64, n int) { + for shift := uint(0); shift < 64; shift += 7 { + if n >= len(buf) { + return 0, 0 + } + b := uint64(buf[n]) + n++ + x |= (b & 0x7F) << shift + if (b & 0x80) == 0 { + return x, n + } + } + + // The number is too large to represent in a 64-bit value. + return 0, 0 +} + +func (p *Buffer) decodeVarintSlow() (x uint64, err error) { + i := p.index + l := len(p.buf) + + for shift := uint(0); shift < 64; shift += 7 { + if i >= l { + err = io.ErrUnexpectedEOF + return + } + b := p.buf[i] + i++ + x |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + p.index = i + return + } + } + + // The number is too large to represent in a 64-bit value. + err = errOverflow + return +} + +// DecodeVarint reads a varint-encoded integer from the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) DecodeVarint() (x uint64, err error) { + i := p.index + buf := p.buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + p.index++ + return uint64(buf[i]), nil + } else if len(buf)-i < 10 { + return p.decodeVarintSlow() + } + + var b uint64 + // we already checked the first byte + x = uint64(buf[i]) - 0x80 + i++ + + b = uint64(buf[i]) + i++ + x += b << 7 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 7 + + b = uint64(buf[i]) + i++ + x += b << 14 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 14 + + b = uint64(buf[i]) + i++ + x += b << 21 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 21 + + b = uint64(buf[i]) + i++ + x += b << 28 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 28 + + b = uint64(buf[i]) + i++ + x += b << 35 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 35 + + b = uint64(buf[i]) + i++ + x += b << 42 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 42 + + b = uint64(buf[i]) + i++ + x += b << 49 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 49 + + b = uint64(buf[i]) + i++ + x += b << 56 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 56 + + b = uint64(buf[i]) + i++ + x += b << 63 + if b&0x80 == 0 { + goto done + } + + return 0, errOverflow + +done: + p.index = i + return x, nil +} + +// DecodeFixed64 reads a 64-bit integer from the Buffer. +// This is the format for the +// fixed64, sfixed64, and double protocol buffer types. +func (p *Buffer) DecodeFixed64() (x uint64, err error) { + // x, err already 0 + i := p.index + 8 + if i < 0 || i > len(p.buf) { + err = io.ErrUnexpectedEOF + return + } + p.index = i + + x = uint64(p.buf[i-8]) + x |= uint64(p.buf[i-7]) << 8 + x |= uint64(p.buf[i-6]) << 16 + x |= uint64(p.buf[i-5]) << 24 + x |= uint64(p.buf[i-4]) << 32 + x |= uint64(p.buf[i-3]) << 40 + x |= uint64(p.buf[i-2]) << 48 + x |= uint64(p.buf[i-1]) << 56 + return +} + +// DecodeFixed32 reads a 32-bit integer from the Buffer. +// This is the format for the +// fixed32, sfixed32, and float protocol buffer types. +func (p *Buffer) DecodeFixed32() (x uint64, err error) { + // x, err already 0 + i := p.index + 4 + if i < 0 || i > len(p.buf) { + err = io.ErrUnexpectedEOF + return + } + p.index = i + + x = uint64(p.buf[i-4]) + x |= uint64(p.buf[i-3]) << 8 + x |= uint64(p.buf[i-2]) << 16 + x |= uint64(p.buf[i-1]) << 24 + return +} + +// DecodeZigzag64 reads a zigzag-encoded 64-bit integer +// from the Buffer. +// This is the format used for the sint64 protocol buffer type. +func (p *Buffer) DecodeZigzag64() (x uint64, err error) { + x, err = p.DecodeVarint() + if err != nil { + return + } + x = (x >> 1) ^ uint64((int64(x&1)<<63)>>63) + return +} + +// DecodeZigzag32 reads a zigzag-encoded 32-bit integer +// from the Buffer. +// This is the format used for the sint32 protocol buffer type. +func (p *Buffer) DecodeZigzag32() (x uint64, err error) { + x, err = p.DecodeVarint() + if err != nil { + return + } + x = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31)) + return +} + +// DecodeRawBytes reads a count-delimited byte buffer from the Buffer. +// This is the format used for the bytes protocol buffer +// type and for embedded messages. +func (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) { + n, err := p.DecodeVarint() + if err != nil { + return nil, err + } + + nb := int(n) + if nb < 0 { + return nil, fmt.Errorf("proto: bad byte length %d", nb) + } + end := p.index + nb + if end < p.index || end > len(p.buf) { + return nil, io.ErrUnexpectedEOF + } + + if !alloc { + // todo: check if can get more uses of alloc=false + buf = p.buf[p.index:end] + p.index += nb + return + } + + buf = make([]byte, nb) + copy(buf, p.buf[p.index:]) + p.index += nb + return +} + +// DecodeStringBytes reads an encoded string from the Buffer. +// This is the format used for the proto2 string type. +func (p *Buffer) DecodeStringBytes() (s string, err error) { + buf, err := p.DecodeRawBytes(false) + if err != nil { + return + } + return string(buf), nil +} + +// Unmarshaler is the interface representing objects that can +// unmarshal themselves. The argument points to data that may be +// overwritten, so implementations should not keep references to the +// buffer. +// Unmarshal implementations should not clear the receiver. +// Any unmarshaled data should be merged into the receiver. +// Callers of Unmarshal that do not want to retain existing data +// should Reset the receiver before calling Unmarshal. +type Unmarshaler interface { + Unmarshal([]byte) error +} + +// newUnmarshaler is the interface representing objects that can +// unmarshal themselves. The semantics are identical to Unmarshaler. +// +// This exists to support protoc-gen-go generated messages. +// The proto package will stop type-asserting to this interface in the future. +// +// DO NOT DEPEND ON THIS. +type newUnmarshaler interface { + XXX_Unmarshal([]byte) error +} + +// Unmarshal parses the protocol buffer representation in buf and places the +// decoded result in pb. If the struct underlying pb does not match +// the data in buf, the results can be unpredictable. +// +// Unmarshal resets pb before starting to unmarshal, so any +// existing data in pb is always removed. Use UnmarshalMerge +// to preserve and append to existing data. +func Unmarshal(buf []byte, pb Message) error { + pb.Reset() + if u, ok := pb.(newUnmarshaler); ok { + return u.XXX_Unmarshal(buf) + } + if u, ok := pb.(Unmarshaler); ok { + return u.Unmarshal(buf) + } + return NewBuffer(buf).Unmarshal(pb) +} + +// UnmarshalMerge parses the protocol buffer representation in buf and +// writes the decoded result to pb. If the struct underlying pb does not match +// the data in buf, the results can be unpredictable. +// +// UnmarshalMerge merges into existing data in pb. +// Most code should use Unmarshal instead. +func UnmarshalMerge(buf []byte, pb Message) error { + if u, ok := pb.(newUnmarshaler); ok { + return u.XXX_Unmarshal(buf) + } + if u, ok := pb.(Unmarshaler); ok { + // NOTE: The history of proto have unfortunately been inconsistent + // whether Unmarshaler should or should not implicitly clear itself. + // Some implementations do, most do not. + // Thus, calling this here may or may not do what people want. + // + // See https://github.com/golang/protobuf/issues/424 + return u.Unmarshal(buf) + } + return NewBuffer(buf).Unmarshal(pb) +} + +// DecodeMessage reads a count-delimited message from the Buffer. +func (p *Buffer) DecodeMessage(pb Message) error { + enc, err := p.DecodeRawBytes(false) + if err != nil { + return err + } + return NewBuffer(enc).Unmarshal(pb) +} + +// DecodeGroup reads a tag-delimited group from the Buffer. +// StartGroup tag is already consumed. This function consumes +// EndGroup tag. +func (p *Buffer) DecodeGroup(pb Message) error { + b := p.buf[p.index:] + x, y := findEndGroup(b) + if x < 0 { + return io.ErrUnexpectedEOF + } + err := Unmarshal(b[:x], pb) + p.index += y + return err +} + +// Unmarshal parses the protocol buffer representation in the +// Buffer and places the decoded result in pb. If the struct +// underlying pb does not match the data in the buffer, the results can be +// unpredictable. +// +// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. +func (p *Buffer) Unmarshal(pb Message) error { + // If the object can unmarshal itself, let it. + if u, ok := pb.(newUnmarshaler); ok { + err := u.XXX_Unmarshal(p.buf[p.index:]) + p.index = len(p.buf) + return err + } + if u, ok := pb.(Unmarshaler); ok { + // NOTE: The history of proto have unfortunately been inconsistent + // whether Unmarshaler should or should not implicitly clear itself. + // Some implementations do, most do not. + // Thus, calling this here may or may not do what people want. + // + // See https://github.com/golang/protobuf/issues/424 + err := u.Unmarshal(p.buf[p.index:]) + p.index = len(p.buf) + return err + } + + // Slow workaround for messages that aren't Unmarshalers. + // This includes some hand-coded .pb.go files and + // bootstrap protos. + // TODO: fix all of those and then add Unmarshal to + // the Message interface. Then: + // The cast above and code below can be deleted. + // The old unmarshaler can be deleted. + // Clients can call Unmarshal directly (can already do that, actually). + var info InternalMessageInfo + err := info.Unmarshal(pb, p.buf[p.index:]) + p.index = len(p.buf) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/deprecated.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/deprecated.go new file mode 100644 index 00000000000..35b882c09aa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/deprecated.go @@ -0,0 +1,63 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2018 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import "errors" + +// Deprecated: do not use. +type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 } + +// Deprecated: do not use. +func GetStats() Stats { return Stats{} } + +// Deprecated: do not use. +func MarshalMessageSet(interface{}) ([]byte, error) { + return nil, errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func UnmarshalMessageSet([]byte, interface{}) error { + return errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func MarshalMessageSetJSON(interface{}) ([]byte, error) { + return nil, errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func UnmarshalMessageSetJSON([]byte, interface{}) error { + return errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func RegisterMessageSetType(Message, int32, string) {} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/discard.go new file mode 100644 index 00000000000..dea2617ced3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/discard.go @@ -0,0 +1,350 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2017 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" + "sync" + "sync/atomic" +) + +type generatedDiscarder interface { + XXX_DiscardUnknown() +} + +// DiscardUnknown recursively discards all unknown fields from this message +// and all embedded messages. +// +// When unmarshaling a message with unrecognized fields, the tags and values +// of such fields are preserved in the Message. This allows a later call to +// marshal to be able to produce a message that continues to have those +// unrecognized fields. To avoid this, DiscardUnknown is used to +// explicitly clear the unknown fields after unmarshaling. +// +// For proto2 messages, the unknown fields of message extensions are only +// discarded from messages that have been accessed via GetExtension. +func DiscardUnknown(m Message) { + if m, ok := m.(generatedDiscarder); ok { + m.XXX_DiscardUnknown() + return + } + // TODO: Dynamically populate a InternalMessageInfo for legacy messages, + // but the master branch has no implementation for InternalMessageInfo, + // so it would be more work to replicate that approach. + discardLegacy(m) +} + +// DiscardUnknown recursively discards all unknown fields. +func (a *InternalMessageInfo) DiscardUnknown(m Message) { + di := atomicLoadDiscardInfo(&a.discard) + if di == nil { + di = getDiscardInfo(reflect.TypeOf(m).Elem()) + atomicStoreDiscardInfo(&a.discard, di) + } + di.discard(toPointer(&m)) +} + +type discardInfo struct { + typ reflect.Type + + initialized int32 // 0: only typ is valid, 1: everything is valid + lock sync.Mutex + + fields []discardFieldInfo + unrecognized field +} + +type discardFieldInfo struct { + field field // Offset of field, guaranteed to be valid + discard func(src pointer) +} + +var ( + discardInfoMap = map[reflect.Type]*discardInfo{} + discardInfoLock sync.Mutex +) + +func getDiscardInfo(t reflect.Type) *discardInfo { + discardInfoLock.Lock() + defer discardInfoLock.Unlock() + di := discardInfoMap[t] + if di == nil { + di = &discardInfo{typ: t} + discardInfoMap[t] = di + } + return di +} + +func (di *discardInfo) discard(src pointer) { + if src.isNil() { + return // Nothing to do. + } + + if atomic.LoadInt32(&di.initialized) == 0 { + di.computeDiscardInfo() + } + + for _, fi := range di.fields { + sfp := src.offset(fi.field) + fi.discard(sfp) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { + // Ignore lock since DiscardUnknown is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + DiscardUnknown(m) + } + } + } + + if di.unrecognized.IsValid() { + *src.offset(di.unrecognized).toBytes() = nil + } +} + +func (di *discardInfo) computeDiscardInfo() { + di.lock.Lock() + defer di.lock.Unlock() + if di.initialized != 0 { + return + } + t := di.typ + n := t.NumField() + + for i := 0; i < n; i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + + dfi := discardFieldInfo{field: toField(&f)} + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) + case isSlice: // E.g., []*pb.T + di := getDiscardInfo(tf) + dfi.discard = func(src pointer) { + sps := src.getPointerSlice() + for _, sp := range sps { + if !sp.isNil() { + di.discard(sp) + } + } + } + default: // E.g., *pb.T + di := getDiscardInfo(tf) + dfi.discard = func(src pointer) { + sp := src.getPointer() + if !sp.isNil() { + di.discard(sp) + } + } + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) + default: // E.g., map[K]V + if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T) + dfi.discard = func(src pointer) { + sm := src.asPointerTo(tf).Elem() + if sm.Len() == 0 { + return + } + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + DiscardUnknown(val.Interface().(Message)) + } + } + } else { + dfi.discard = func(pointer) {} // Noop + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) + default: // E.g., interface{} + // TODO: Make this faster? + dfi.discard = func(src pointer) { + su := src.asPointerTo(tf).Elem() + if !su.IsNil() { + sv := su.Elem().Elem().Field(0) + if sv.Kind() == reflect.Ptr && sv.IsNil() { + return + } + switch sv.Type().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + DiscardUnknown(sv.Interface().(Message)) + } + } + } + } + default: + continue + } + di.fields = append(di.fields, dfi) + } + + di.unrecognized = invalidField + if f, ok := t.FieldByName("XXX_unrecognized"); ok { + if f.Type != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + di.unrecognized = toField(&f) + } + + atomic.StoreInt32(&di.initialized, 1) +} + +func discardLegacy(m Message) { + v := reflect.ValueOf(m) + if v.Kind() != reflect.Ptr || v.IsNil() { + return + } + v = v.Elem() + if v.Kind() != reflect.Struct { + return + } + t := v.Type() + + for i := 0; i < v.NumField(); i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + vf := v.Field(i) + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) + case isSlice: // E.g., []*pb.T + for j := 0; j < vf.Len(); j++ { + discardLegacy(vf.Index(j).Interface().(Message)) + } + default: // E.g., *pb.T + discardLegacy(vf.Interface().(Message)) + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) + default: // E.g., map[K]V + tv := vf.Type().Elem() + if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) + for _, key := range vf.MapKeys() { + val := vf.MapIndex(key) + discardLegacy(val.Interface().(Message)) + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) + default: // E.g., test_proto.isCommunique_Union interface + if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { + vf = vf.Elem() // E.g., *test_proto.Communique_Msg + if !vf.IsNil() { + vf = vf.Elem() // E.g., test_proto.Communique_Msg + vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value + if vf.Kind() == reflect.Ptr { + discardLegacy(vf.Interface().(Message)) + } + } + } + } + } + } + + if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { + if vf.Type() != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + vf.Set(reflect.ValueOf([]byte(nil))) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, err := extendable(m); err == nil { + // Ignore lock since discardLegacy is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + discardLegacy(m) + } + } + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/encode.go new file mode 100644 index 00000000000..3abfed2cff0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/encode.go @@ -0,0 +1,203 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for encoding data into the wire format for protocol buffers. + */ + +import ( + "errors" + "reflect" +) + +var ( + // errRepeatedHasNil is the error returned if Marshal is called with + // a struct with a repeated field containing a nil element. + errRepeatedHasNil = errors.New("proto: repeated field has nil element") + + // errOneofHasNil is the error returned if Marshal is called with + // a struct with a oneof field containing a nil element. + errOneofHasNil = errors.New("proto: oneof field has nil value") + + // ErrNil is the error returned if Marshal is called with nil. + ErrNil = errors.New("proto: Marshal called with nil") + + // ErrTooLarge is the error returned if Marshal is called with a + // message that encodes to >2GB. + ErrTooLarge = errors.New("proto: message encodes to over 2 GB") +) + +// The fundamental encoders that put bytes on the wire. +// Those that take integer types all accept uint64 and are +// therefore of type valueEncoder. + +const maxVarintBytes = 10 // maximum length of a varint + +// EncodeVarint returns the varint encoding of x. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +// Not used by the package itself, but helpful to clients +// wishing to use the same encoding. +func EncodeVarint(x uint64) []byte { + var buf [maxVarintBytes]byte + var n int + for n = 0; x > 127; n++ { + buf[n] = 0x80 | uint8(x&0x7F) + x >>= 7 + } + buf[n] = uint8(x) + n++ + return buf[0:n] +} + +// EncodeVarint writes a varint-encoded integer to the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) EncodeVarint(x uint64) error { + for x >= 1<<7 { + p.buf = append(p.buf, uint8(x&0x7f|0x80)) + x >>= 7 + } + p.buf = append(p.buf, uint8(x)) + return nil +} + +// SizeVarint returns the varint encoding size of an integer. +func SizeVarint(x uint64) int { + switch { + case x < 1<<7: + return 1 + case x < 1<<14: + return 2 + case x < 1<<21: + return 3 + case x < 1<<28: + return 4 + case x < 1<<35: + return 5 + case x < 1<<42: + return 6 + case x < 1<<49: + return 7 + case x < 1<<56: + return 8 + case x < 1<<63: + return 9 + } + return 10 +} + +// EncodeFixed64 writes a 64-bit integer to the Buffer. +// This is the format for the +// fixed64, sfixed64, and double protocol buffer types. +func (p *Buffer) EncodeFixed64(x uint64) error { + p.buf = append(p.buf, + uint8(x), + uint8(x>>8), + uint8(x>>16), + uint8(x>>24), + uint8(x>>32), + uint8(x>>40), + uint8(x>>48), + uint8(x>>56)) + return nil +} + +// EncodeFixed32 writes a 32-bit integer to the Buffer. +// This is the format for the +// fixed32, sfixed32, and float protocol buffer types. +func (p *Buffer) EncodeFixed32(x uint64) error { + p.buf = append(p.buf, + uint8(x), + uint8(x>>8), + uint8(x>>16), + uint8(x>>24)) + return nil +} + +// EncodeZigzag64 writes a zigzag-encoded 64-bit integer +// to the Buffer. +// This is the format used for the sint64 protocol buffer type. +func (p *Buffer) EncodeZigzag64(x uint64) error { + // use signed number to get arithmetic right shift. + return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} + +// EncodeZigzag32 writes a zigzag-encoded 32-bit integer +// to the Buffer. +// This is the format used for the sint32 protocol buffer type. +func (p *Buffer) EncodeZigzag32(x uint64) error { + // use signed number to get arithmetic right shift. + return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) +} + +// EncodeRawBytes writes a count-delimited byte buffer to the Buffer. +// This is the format used for the bytes protocol buffer +// type and for embedded messages. +func (p *Buffer) EncodeRawBytes(b []byte) error { + p.EncodeVarint(uint64(len(b))) + p.buf = append(p.buf, b...) + return nil +} + +// EncodeStringBytes writes an encoded string to the Buffer. +// This is the format used for the proto2 string type. +func (p *Buffer) EncodeStringBytes(s string) error { + p.EncodeVarint(uint64(len(s))) + p.buf = append(p.buf, s...) + return nil +} + +// Marshaler is the interface representing objects that can marshal themselves. +type Marshaler interface { + Marshal() ([]byte, error) +} + +// EncodeMessage writes the protocol buffer to the Buffer, +// prefixed by a varint-encoded length. +func (p *Buffer) EncodeMessage(pb Message) error { + siz := Size(pb) + p.EncodeVarint(uint64(siz)) + return p.Marshal(pb) +} + +// All protocol buffer fields are nillable, but be careful. +func isNil(v reflect.Value) bool { + switch v.Kind() { + case reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + return v.IsNil() + } + return false +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/equal.go new file mode 100644 index 00000000000..f9b6e41b3c1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/equal.go @@ -0,0 +1,301 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Protocol buffer comparison. + +package proto + +import ( + "bytes" + "log" + "reflect" + "strings" +) + +/* +Equal returns true iff protocol buffers a and b are equal. +The arguments must both be pointers to protocol buffer structs. + +Equality is defined in this way: + - Two messages are equal iff they are the same type, + corresponding fields are equal, unknown field sets + are equal, and extensions sets are equal. + - Two set scalar fields are equal iff their values are equal. + If the fields are of a floating-point type, remember that + NaN != x for all x, including NaN. If the message is defined + in a proto3 .proto file, fields are not "set"; specifically, + zero length proto3 "bytes" fields are equal (nil == {}). + - Two repeated fields are equal iff their lengths are the same, + and their corresponding elements are equal. Note a "bytes" field, + although represented by []byte, is not a repeated field and the + rule for the scalar fields described above applies. + - Two unset fields are equal. + - Two unknown field sets are equal if their current + encoded state is equal. + - Two extension sets are equal iff they have corresponding + elements that are pairwise equal. + - Two map fields are equal iff their lengths are the same, + and they contain the same set of elements. Zero-length map + fields are equal. + - Every other combination of things are not equal. + +The return value is undefined if a and b are not protocol buffers. +*/ +func Equal(a, b Message) bool { + if a == nil || b == nil { + return a == b + } + v1, v2 := reflect.ValueOf(a), reflect.ValueOf(b) + if v1.Type() != v2.Type() { + return false + } + if v1.Kind() == reflect.Ptr { + if v1.IsNil() { + return v2.IsNil() + } + if v2.IsNil() { + return false + } + v1, v2 = v1.Elem(), v2.Elem() + } + if v1.Kind() != reflect.Struct { + return false + } + return equalStruct(v1, v2) +} + +// v1 and v2 are known to have the same type. +func equalStruct(v1, v2 reflect.Value) bool { + sprop := GetProperties(v1.Type()) + for i := 0; i < v1.NumField(); i++ { + f := v1.Type().Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + f1, f2 := v1.Field(i), v2.Field(i) + if f.Type.Kind() == reflect.Ptr { + if n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 { + // both unset + continue + } else if n1 != n2 { + // set/unset mismatch + return false + } + f1, f2 = f1.Elem(), f2.Elem() + } + if !equalAny(f1, f2, sprop.Prop[i]) { + return false + } + } + + if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_InternalExtensions") + if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) { + return false + } + } + + if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_extensions") + if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { + return false + } + } + + uf := v1.FieldByName("XXX_unrecognized") + if !uf.IsValid() { + return true + } + + u1 := uf.Bytes() + u2 := v2.FieldByName("XXX_unrecognized").Bytes() + return bytes.Equal(u1, u2) +} + +// v1 and v2 are known to have the same type. +// prop may be nil. +func equalAny(v1, v2 reflect.Value, prop *Properties) bool { + if v1.Type() == protoMessageType { + m1, _ := v1.Interface().(Message) + m2, _ := v2.Interface().(Message) + return Equal(m1, m2) + } + switch v1.Kind() { + case reflect.Bool: + return v1.Bool() == v2.Bool() + case reflect.Float32, reflect.Float64: + return v1.Float() == v2.Float() + case reflect.Int32, reflect.Int64: + return v1.Int() == v2.Int() + case reflect.Interface: + // Probably a oneof field; compare the inner values. + n1, n2 := v1.IsNil(), v2.IsNil() + if n1 || n2 { + return n1 == n2 + } + e1, e2 := v1.Elem(), v2.Elem() + if e1.Type() != e2.Type() { + return false + } + return equalAny(e1, e2, nil) + case reflect.Map: + if v1.Len() != v2.Len() { + return false + } + for _, key := range v1.MapKeys() { + val2 := v2.MapIndex(key) + if !val2.IsValid() { + // This key was not found in the second map. + return false + } + if !equalAny(v1.MapIndex(key), val2, nil) { + return false + } + } + return true + case reflect.Ptr: + // Maps may have nil values in them, so check for nil. + if v1.IsNil() && v2.IsNil() { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } + return equalAny(v1.Elem(), v2.Elem(), prop) + case reflect.Slice: + if v1.Type().Elem().Kind() == reflect.Uint8 { + // short circuit: []byte + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value. + if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } + return bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte)) + } + + if v1.Len() != v2.Len() { + return false + } + for i := 0; i < v1.Len(); i++ { + if !equalAny(v1.Index(i), v2.Index(i), prop) { + return false + } + } + return true + case reflect.String: + return v1.Interface().(string) == v2.Interface().(string) + case reflect.Struct: + return equalStruct(v1, v2) + case reflect.Uint32, reflect.Uint64: + return v1.Uint() == v2.Uint() + } + + // unknown type, so not a protocol buffer + log.Printf("proto: don't know how to compare %v", v1) + return false +} + +// base is the struct type that the extensions are based on. +// x1 and x2 are InternalExtensions. +func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool { + em1, _ := x1.extensionsRead() + em2, _ := x2.extensionsRead() + return equalExtMap(base, em1, em2) +} + +func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { + if len(em1) != len(em2) { + return false + } + + for extNum, e1 := range em1 { + e2, ok := em2[extNum] + if !ok { + return false + } + + m1 := extensionAsLegacyType(e1.value) + m2 := extensionAsLegacyType(e2.value) + + if m1 == nil && m2 == nil { + // Both have only encoded form. + if bytes.Equal(e1.enc, e2.enc) { + continue + } + // The bytes are different, but the extensions might still be + // equal. We need to decode them to compare. + } + + if m1 != nil && m2 != nil { + // Both are unencoded. + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { + return false + } + continue + } + + // At least one is encoded. To do a semantically correct comparison + // we need to unmarshal them first. + var desc *ExtensionDesc + if m := extensionMaps[base]; m != nil { + desc = m[extNum] + } + if desc == nil { + // If both have only encoded form and the bytes are the same, + // it is handled above. We get here when the bytes are different. + // We don't know how to decode it, so just compare them as byte + // slices. + log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) + return false + } + var err error + if m1 == nil { + m1, err = decodeExtension(e1.enc, desc) + } + if m2 == nil && err == nil { + m2, err = decodeExtension(e2.enc, desc) + } + if err != nil { + // The encoded form is invalid. + log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) + return false + } + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { + return false + } + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/extensions.go new file mode 100644 index 00000000000..fa88add30a4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/extensions.go @@ -0,0 +1,607 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Types and routines for supporting protocol buffer extensions. + */ + +import ( + "errors" + "fmt" + "io" + "reflect" + "strconv" + "sync" +) + +// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message. +var ErrMissingExtension = errors.New("proto: missing extension") + +// ExtensionRange represents a range of message extensions for a protocol buffer. +// Used in code generated by the protocol compiler. +type ExtensionRange struct { + Start, End int32 // both inclusive +} + +// extendableProto is an interface implemented by any protocol buffer generated by the current +// proto compiler that may be extended. +type extendableProto interface { + Message + ExtensionRangeArray() []ExtensionRange + extensionsWrite() map[int32]Extension + extensionsRead() (map[int32]Extension, sync.Locker) +} + +// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous +// version of the proto compiler that may be extended. +type extendableProtoV1 interface { + Message + ExtensionRangeArray() []ExtensionRange + ExtensionMap() map[int32]Extension +} + +// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto. +type extensionAdapter struct { + extendableProtoV1 +} + +func (e extensionAdapter) extensionsWrite() map[int32]Extension { + return e.ExtensionMap() +} + +func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) { + return e.ExtensionMap(), notLocker{} +} + +// notLocker is a sync.Locker whose Lock and Unlock methods are nops. +type notLocker struct{} + +func (n notLocker) Lock() {} +func (n notLocker) Unlock() {} + +// extendable returns the extendableProto interface for the given generated proto message. +// If the proto message has the old extension format, it returns a wrapper that implements +// the extendableProto interface. +func extendable(p interface{}) (extendableProto, error) { + switch p := p.(type) { + case extendableProto: + if isNilPtr(p) { + return nil, fmt.Errorf("proto: nil %T is not extendable", p) + } + return p, nil + case extendableProtoV1: + if isNilPtr(p) { + return nil, fmt.Errorf("proto: nil %T is not extendable", p) + } + return extensionAdapter{p}, nil + } + // Don't allocate a specific error containing %T: + // this is the hot path for Clone and MarshalText. + return nil, errNotExtendable +} + +var errNotExtendable = errors.New("proto: not an extendable proto.Message") + +func isNilPtr(x interface{}) bool { + v := reflect.ValueOf(x) + return v.Kind() == reflect.Ptr && v.IsNil() +} + +// XXX_InternalExtensions is an internal representation of proto extensions. +// +// Each generated message struct type embeds an anonymous XXX_InternalExtensions field, +// thus gaining the unexported 'extensions' method, which can be called only from the proto package. +// +// The methods of XXX_InternalExtensions are not concurrency safe in general, +// but calls to logically read-only methods such as has and get may be executed concurrently. +type XXX_InternalExtensions struct { + // The struct must be indirect so that if a user inadvertently copies a + // generated message and its embedded XXX_InternalExtensions, they + // avoid the mayhem of a copied mutex. + // + // The mutex serializes all logically read-only operations to p.extensionMap. + // It is up to the client to ensure that write operations to p.extensionMap are + // mutually exclusive with other accesses. + p *struct { + mu sync.Mutex + extensionMap map[int32]Extension + } +} + +// extensionsWrite returns the extension map, creating it on first use. +func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension { + if e.p == nil { + e.p = new(struct { + mu sync.Mutex + extensionMap map[int32]Extension + }) + e.p.extensionMap = make(map[int32]Extension) + } + return e.p.extensionMap +} + +// extensionsRead returns the extensions map for read-only use. It may be nil. +// The caller must hold the returned mutex's lock when accessing Elements within the map. +func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) { + if e.p == nil { + return nil, nil + } + return e.p.extensionMap, &e.p.mu +} + +// ExtensionDesc represents an extension specification. +// Used in generated code from the protocol compiler. +type ExtensionDesc struct { + ExtendedType Message // nil pointer to the type that is being extended + ExtensionType interface{} // nil pointer to the extension type + Field int32 // field number + Name string // fully-qualified name of extension, for text formatting + Tag string // protobuf tag style + Filename string // name of the file in which the extension is defined +} + +func (ed *ExtensionDesc) repeated() bool { + t := reflect.TypeOf(ed.ExtensionType) + return t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 +} + +// Extension represents an extension in a message. +type Extension struct { + // When an extension is stored in a message using SetExtension + // only desc and value are set. When the message is marshaled + // enc will be set to the encoded form of the message. + // + // When a message is unmarshaled and contains extensions, each + // extension will have only enc set. When such an extension is + // accessed using GetExtension (or GetExtensions) desc and value + // will be set. + desc *ExtensionDesc + + // value is a concrete value for the extension field. Let the type of + // desc.ExtensionType be the "API type" and the type of Extension.value + // be the "storage type". The API type and storage type are the same except: + // * For scalars (except []byte), the API type uses *T, + // while the storage type uses T. + // * For repeated fields, the API type uses []T, while the storage type + // uses *[]T. + // + // The reason for the divergence is so that the storage type more naturally + // matches what is expected of when retrieving the values through the + // protobuf reflection APIs. + // + // The value may only be populated if desc is also populated. + value interface{} + + // enc is the raw bytes for the extension field. + enc []byte +} + +// SetRawExtension is for testing only. +func SetRawExtension(base Message, id int32, b []byte) { + epb, err := extendable(base) + if err != nil { + return + } + extmap := epb.extensionsWrite() + extmap[id] = Extension{enc: b} +} + +// isExtensionField returns true iff the given field number is in an extension range. +func isExtensionField(pb extendableProto, field int32) bool { + for _, er := range pb.ExtensionRangeArray() { + if er.Start <= field && field <= er.End { + return true + } + } + return false +} + +// checkExtensionTypes checks that the given extension is valid for pb. +func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { + var pbi interface{} = pb + // Check the extended type. + if ea, ok := pbi.(extensionAdapter); ok { + pbi = ea.extendableProtoV1 + } + if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { + return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a) + } + // Check the range. + if !isExtensionField(pb, extension.Field) { + return errors.New("proto: bad extension number; not in declared ranges") + } + return nil +} + +// extPropKey is sufficient to uniquely identify an extension. +type extPropKey struct { + base reflect.Type + field int32 +} + +var extProp = struct { + sync.RWMutex + m map[extPropKey]*Properties +}{ + m: make(map[extPropKey]*Properties), +} + +func extensionProperties(ed *ExtensionDesc) *Properties { + key := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field} + + extProp.RLock() + if prop, ok := extProp.m[key]; ok { + extProp.RUnlock() + return prop + } + extProp.RUnlock() + + extProp.Lock() + defer extProp.Unlock() + // Check again. + if prop, ok := extProp.m[key]; ok { + return prop + } + + prop := new(Properties) + prop.Init(reflect.TypeOf(ed.ExtensionType), "unknown_name", ed.Tag, nil) + extProp.m[key] = prop + return prop +} + +// HasExtension returns whether the given extension is present in pb. +func HasExtension(pb Message, extension *ExtensionDesc) bool { + // TODO: Check types, field numbers, etc.? + epb, err := extendable(pb) + if err != nil { + return false + } + extmap, mu := epb.extensionsRead() + if extmap == nil { + return false + } + mu.Lock() + _, ok := extmap[extension.Field] + mu.Unlock() + return ok +} + +// ClearExtension removes the given extension from pb. +func ClearExtension(pb Message, extension *ExtensionDesc) { + epb, err := extendable(pb) + if err != nil { + return + } + // TODO: Check types, field numbers, etc.? + extmap := epb.extensionsWrite() + delete(extmap, extension.Field) +} + +// GetExtension retrieves a proto2 extended field from pb. +// +// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil), +// then GetExtension parses the encoded field and returns a Go value of the specified type. +// If the field is not present, then the default value is returned (if one is specified), +// otherwise ErrMissingExtension is reported. +// +// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil), +// then GetExtension returns the raw encoded bytes of the field extension. +func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + + if extension.ExtendedType != nil { + // can only check type if this is a complete descriptor + if err := checkExtensionTypes(epb, extension); err != nil { + return nil, err + } + } + + emap, mu := epb.extensionsRead() + if emap == nil { + return defaultExtensionValue(extension) + } + mu.Lock() + defer mu.Unlock() + e, ok := emap[extension.Field] + if !ok { + // defaultExtensionValue returns the default value or + // ErrMissingExtension if there is no default. + return defaultExtensionValue(extension) + } + + if e.value != nil { + // Already decoded. Check the descriptor, though. + if e.desc != extension { + // This shouldn't happen. If it does, it means that + // GetExtension was called twice with two different + // descriptors with the same field number. + return nil, errors.New("proto: descriptor conflict") + } + return extensionAsLegacyType(e.value), nil + } + + if extension.ExtensionType == nil { + // incomplete descriptor + return e.enc, nil + } + + v, err := decodeExtension(e.enc, extension) + if err != nil { + return nil, err + } + + // Remember the decoded version and drop the encoded version. + // That way it is safe to mutate what we return. + e.value = extensionAsStorageType(v) + e.desc = extension + e.enc = nil + emap[extension.Field] = e + return extensionAsLegacyType(e.value), nil +} + +// defaultExtensionValue returns the default value for extension. +// If no default for an extension is defined ErrMissingExtension is returned. +func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { + if extension.ExtensionType == nil { + // incomplete descriptor, so no default + return nil, ErrMissingExtension + } + + t := reflect.TypeOf(extension.ExtensionType) + props := extensionProperties(extension) + + sf, _, err := fieldDefault(t, props) + if err != nil { + return nil, err + } + + if sf == nil || sf.value == nil { + // There is no default value. + return nil, ErrMissingExtension + } + + if t.Kind() != reflect.Ptr { + // We do not need to return a Ptr, we can directly return sf.value. + return sf.value, nil + } + + // We need to return an interface{} that is a pointer to sf.value. + value := reflect.New(t).Elem() + value.Set(reflect.New(value.Type().Elem())) + if sf.kind == reflect.Int32 { + // We may have an int32 or an enum, but the underlying data is int32. + // Since we can't set an int32 into a non int32 reflect.value directly + // set it as a int32. + value.Elem().SetInt(int64(sf.value.(int32))) + } else { + value.Elem().Set(reflect.ValueOf(sf.value)) + } + return value.Interface(), nil +} + +// decodeExtension decodes an extension encoded in b. +func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { + t := reflect.TypeOf(extension.ExtensionType) + unmarshal := typeUnmarshaler(t, extension.Tag) + + // t is a pointer to a struct, pointer to basic type or a slice. + // Allocate space to store the pointer/slice. + value := reflect.New(t).Elem() + + var err error + for { + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + wire := int(x) & 7 + + b, err = unmarshal(b, valToPointer(value.Addr()), wire) + if err != nil { + return nil, err + } + + if len(b) == 0 { + break + } + } + return value.Interface(), nil +} + +// GetExtensions returns a slice of the extensions present in pb that are also listed in es. +// The returned slice has the same length as es; missing extensions will appear as nil elements. +func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + extensions = make([]interface{}, len(es)) + for i, e := range es { + extensions[i], err = GetExtension(epb, e) + if err == ErrMissingExtension { + err = nil + } + if err != nil { + return + } + } + return +} + +// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order. +// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing +// just the Field field, which defines the extension's field number. +func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { + epb, err := extendable(pb) + if err != nil { + return nil, err + } + registeredExtensions := RegisteredExtensions(pb) + + emap, mu := epb.extensionsRead() + if emap == nil { + return nil, nil + } + mu.Lock() + defer mu.Unlock() + extensions := make([]*ExtensionDesc, 0, len(emap)) + for extid, e := range emap { + desc := e.desc + if desc == nil { + desc = registeredExtensions[extid] + if desc == nil { + desc = &ExtensionDesc{Field: extid} + } + } + + extensions = append(extensions, desc) + } + return extensions, nil +} + +// SetExtension sets the specified extension of pb to the specified value. +func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { + epb, err := extendable(pb) + if err != nil { + return err + } + if err := checkExtensionTypes(epb, extension); err != nil { + return err + } + typ := reflect.TypeOf(extension.ExtensionType) + if typ != reflect.TypeOf(value) { + return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType) + } + // nil extension values need to be caught early, because the + // encoder can't distinguish an ErrNil due to a nil extension + // from an ErrNil due to a missing field. Extensions are + // always optional, so the encoder would just swallow the error + // and drop all the extensions from the encoded message. + if reflect.ValueOf(value).IsNil() { + return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) + } + + extmap := epb.extensionsWrite() + extmap[extension.Field] = Extension{desc: extension, value: extensionAsStorageType(value)} + return nil +} + +// ClearAllExtensions clears all extensions from pb. +func ClearAllExtensions(pb Message) { + epb, err := extendable(pb) + if err != nil { + return + } + m := epb.extensionsWrite() + for k := range m { + delete(m, k) + } +} + +// A global registry of extensions. +// The generated code will register the generated descriptors by calling RegisterExtension. + +var extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc) + +// RegisterExtension is called from the generated code. +func RegisterExtension(desc *ExtensionDesc) { + st := reflect.TypeOf(desc.ExtendedType).Elem() + m := extensionMaps[st] + if m == nil { + m = make(map[int32]*ExtensionDesc) + extensionMaps[st] = m + } + if _, ok := m[desc.Field]; ok { + panic("proto: duplicate extension registered: " + st.String() + " " + strconv.Itoa(int(desc.Field))) + } + m[desc.Field] = desc +} + +// RegisteredExtensions returns a map of the registered extensions of a +// protocol buffer struct, indexed by the extension number. +// The argument pb should be a nil pointer to the struct type. +func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { + return extensionMaps[reflect.TypeOf(pb).Elem()] +} + +// extensionAsLegacyType converts an value in the storage type as the API type. +// See Extension.value. +func extensionAsLegacyType(v interface{}) interface{} { + switch rv := reflect.ValueOf(v); rv.Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + // Represent primitive types as a pointer to the value. + rv2 := reflect.New(rv.Type()) + rv2.Elem().Set(rv) + v = rv2.Interface() + case reflect.Ptr: + // Represent slice types as the value itself. + switch rv.Type().Elem().Kind() { + case reflect.Slice: + if rv.IsNil() { + v = reflect.Zero(rv.Type().Elem()).Interface() + } else { + v = rv.Elem().Interface() + } + } + } + return v +} + +// extensionAsStorageType converts an value in the API type as the storage type. +// See Extension.value. +func extensionAsStorageType(v interface{}) interface{} { + switch rv := reflect.ValueOf(v); rv.Kind() { + case reflect.Ptr: + // Represent slice types as the value itself. + switch rv.Type().Elem().Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + if rv.IsNil() { + v = reflect.Zero(rv.Type().Elem()).Interface() + } else { + v = rv.Elem().Interface() + } + } + case reflect.Slice: + // Represent slice types as a pointer to the value. + if rv.Type().Elem().Kind() != reflect.Uint8 { + rv2 := reflect.New(rv.Type()) + rv2.Elem().Set(rv) + v = rv2.Interface() + } + } + return v +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/lib.go new file mode 100644 index 00000000000..fdd328bb7f5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/lib.go @@ -0,0 +1,965 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package proto converts data structures to and from the wire format of +protocol buffers. It works in concert with the Go source code generated +for .proto files by the protocol compiler. + +A summary of the properties of the protocol buffer interface +for a protocol buffer variable v: + + - Names are turned from camel_case to CamelCase for export. + - There are no methods on v to set fields; just treat + them as structure fields. + - There are getters that return a field's value if set, + and return the field's default value if unset. + The getters work even if the receiver is a nil message. + - The zero value for a struct is its correct initialization state. + All desired fields must be set before marshaling. + - A Reset() method will restore a protobuf struct to its zero state. + - Non-repeated fields are pointers to the values; nil means unset. + That is, optional or required field int32 f becomes F *int32. + - Repeated fields are slices. + - Helper functions are available to aid the setting of fields. + msg.Foo = proto.String("hello") // set field + - Constants are defined to hold the default values of all fields that + have them. They have the form Default_StructName_FieldName. + Because the getter methods handle defaulted values, + direct use of these constants should be rare. + - Enums are given type names and maps from names to values. + Enum values are prefixed by the enclosing message's name, or by the + enum's type name if it is a top-level enum. Enum types have a String + method, and a Enum method to assist in message construction. + - Nested messages, groups and enums have type names prefixed with the name of + the surrounding message type. + - Extensions are given descriptor names that start with E_, + followed by an underscore-delimited list of the nested messages + that contain it (if any) followed by the CamelCased name of the + extension field itself. HasExtension, ClearExtension, GetExtension + and SetExtension are functions for manipulating extensions. + - Oneof field sets are given a single field in their message, + with distinguished wrapper types for each possible field value. + - Marshal and Unmarshal are functions to encode and decode the wire format. + +When the .proto file specifies `syntax="proto3"`, there are some differences: + + - Non-repeated fields of non-message type are values instead of pointers. + - Enum types do not get an Enum method. + +The simplest way to describe this is to see an example. +Given file test.proto, containing + + package example; + + enum FOO { X = 17; } + + message Test { + required string label = 1; + optional int32 type = 2 [default=77]; + repeated int64 reps = 3; + optional group OptionalGroup = 4 { + required string RequiredField = 5; + } + oneof union { + int32 number = 6; + string name = 7; + } + } + +The resulting file, test.pb.go, is: + + package example + + import proto "github.com/golang/protobuf/proto" + import math "math" + + type FOO int32 + const ( + FOO_X FOO = 17 + ) + var FOO_name = map[int32]string{ + 17: "X", + } + var FOO_value = map[string]int32{ + "X": 17, + } + + func (x FOO) Enum() *FOO { + p := new(FOO) + *p = x + return p + } + func (x FOO) String() string { + return proto.EnumName(FOO_name, int32(x)) + } + func (x *FOO) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FOO_value, data) + if err != nil { + return err + } + *x = FOO(value) + return nil + } + + type Test struct { + Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` + Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` + Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` + Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` + // Types that are valid to be assigned to Union: + // *Test_Number + // *Test_Name + Union isTest_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` + } + func (m *Test) Reset() { *m = Test{} } + func (m *Test) String() string { return proto.CompactTextString(m) } + func (*Test) ProtoMessage() {} + + type isTest_Union interface { + isTest_Union() + } + + type Test_Number struct { + Number int32 `protobuf:"varint,6,opt,name=number"` + } + type Test_Name struct { + Name string `protobuf:"bytes,7,opt,name=name"` + } + + func (*Test_Number) isTest_Union() {} + func (*Test_Name) isTest_Union() {} + + func (m *Test) GetUnion() isTest_Union { + if m != nil { + return m.Union + } + return nil + } + const Default_Test_Type int32 = 77 + + func (m *Test) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" + } + + func (m *Test) GetType() int32 { + if m != nil && m.Type != nil { + return *m.Type + } + return Default_Test_Type + } + + func (m *Test) GetOptionalgroup() *Test_OptionalGroup { + if m != nil { + return m.Optionalgroup + } + return nil + } + + type Test_OptionalGroup struct { + RequiredField *string `protobuf:"bytes,5,req" json:"RequiredField,omitempty"` + } + func (m *Test_OptionalGroup) Reset() { *m = Test_OptionalGroup{} } + func (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) } + + func (m *Test_OptionalGroup) GetRequiredField() string { + if m != nil && m.RequiredField != nil { + return *m.RequiredField + } + return "" + } + + func (m *Test) GetNumber() int32 { + if x, ok := m.GetUnion().(*Test_Number); ok { + return x.Number + } + return 0 + } + + func (m *Test) GetName() string { + if x, ok := m.GetUnion().(*Test_Name); ok { + return x.Name + } + return "" + } + + func init() { + proto.RegisterEnum("example.FOO", FOO_name, FOO_value) + } + +To create and play with a Test object: + + package main + + import ( + "log" + + "github.com/golang/protobuf/proto" + pb "./example.pb" + ) + + func main() { + test := &pb.Test{ + Label: proto.String("hello"), + Type: proto.Int32(17), + Reps: []int64{1, 2, 3}, + Optionalgroup: &pb.Test_OptionalGroup{ + RequiredField: proto.String("good bye"), + }, + Union: &pb.Test_Name{"fred"}, + } + data, err := proto.Marshal(test) + if err != nil { + log.Fatal("marshaling error: ", err) + } + newTest := &pb.Test{} + err = proto.Unmarshal(data, newTest) + if err != nil { + log.Fatal("unmarshaling error: ", err) + } + // Now test and newTest contain the same data. + if test.GetLabel() != newTest.GetLabel() { + log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) + } + // Use a type switch to determine which oneof was set. + switch u := test.Union.(type) { + case *pb.Test_Number: // u.Number contains the number. + case *pb.Test_Name: // u.Name contains the string. + } + // etc. + } +*/ +package proto + +import ( + "encoding/json" + "fmt" + "log" + "reflect" + "sort" + "strconv" + "sync" +) + +// RequiredNotSetError is an error type returned by either Marshal or Unmarshal. +// Marshal reports this when a required field is not initialized. +// Unmarshal reports this when a required field is missing from the wire data. +type RequiredNotSetError struct{ field string } + +func (e *RequiredNotSetError) Error() string { + if e.field == "" { + return fmt.Sprintf("proto: required field not set") + } + return fmt.Sprintf("proto: required field %q not set", e.field) +} +func (e *RequiredNotSetError) RequiredNotSet() bool { + return true +} + +type invalidUTF8Error struct{ field string } + +func (e *invalidUTF8Error) Error() string { + if e.field == "" { + return "proto: invalid UTF-8 detected" + } + return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field) +} +func (e *invalidUTF8Error) InvalidUTF8() bool { + return true +} + +// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8. +// This error should not be exposed to the external API as such errors should +// be recreated with the field information. +var errInvalidUTF8 = &invalidUTF8Error{} + +// isNonFatal reports whether the error is either a RequiredNotSet error +// or a InvalidUTF8 error. +func isNonFatal(err error) bool { + if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() { + return true + } + if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() { + return true + } + return false +} + +type nonFatal struct{ E error } + +// Merge merges err into nf and reports whether it was successful. +// Otherwise it returns false for any fatal non-nil errors. +func (nf *nonFatal) Merge(err error) (ok bool) { + if err == nil { + return true // not an error + } + if !isNonFatal(err) { + return false // fatal error + } + if nf.E == nil { + nf.E = err // store first instance of non-fatal error + } + return true +} + +// Message is implemented by generated protocol buffer messages. +type Message interface { + Reset() + String() string + ProtoMessage() +} + +// A Buffer is a buffer manager for marshaling and unmarshaling +// protocol buffers. It may be reused between invocations to +// reduce memory usage. It is not necessary to use a Buffer; +// the global functions Marshal and Unmarshal create a +// temporary Buffer and are fine for most applications. +type Buffer struct { + buf []byte // encode/decode byte stream + index int // read point + + deterministic bool +} + +// NewBuffer allocates a new Buffer and initializes its internal data to +// the contents of the argument slice. +func NewBuffer(e []byte) *Buffer { + return &Buffer{buf: e} +} + +// Reset resets the Buffer, ready for marshaling a new protocol buffer. +func (p *Buffer) Reset() { + p.buf = p.buf[0:0] // for reading/writing + p.index = 0 // for reading +} + +// SetBuf replaces the internal buffer with the slice, +// ready for unmarshaling the contents of the slice. +func (p *Buffer) SetBuf(s []byte) { + p.buf = s + p.index = 0 +} + +// Bytes returns the contents of the Buffer. +func (p *Buffer) Bytes() []byte { return p.buf } + +// SetDeterministic sets whether to use deterministic serialization. +// +// Deterministic serialization guarantees that for a given binary, equal +// messages will always be serialized to the same bytes. This implies: +// +// - Repeated serialization of a message will return the same bytes. +// - Different processes of the same binary (which may be executing on +// different machines) will serialize equal messages to the same bytes. +// +// Note that the deterministic serialization is NOT canonical across +// languages. It is not guaranteed to remain stable over time. It is unstable +// across different builds with schema changes due to unknown fields. +// Users who need canonical serialization (e.g., persistent storage in a +// canonical form, fingerprinting, etc.) should define their own +// canonicalization specification and implement their own serializer rather +// than relying on this API. +// +// If deterministic serialization is requested, map entries will be sorted +// by keys in lexographical order. This is an implementation detail and +// subject to change. +func (p *Buffer) SetDeterministic(deterministic bool) { + p.deterministic = deterministic +} + +/* + * Helper routines for simplifying the creation of optional fields of basic type. + */ + +// Bool is a helper routine that allocates a new bool value +// to store v and returns a pointer to it. +func Bool(v bool) *bool { + return &v +} + +// Int32 is a helper routine that allocates a new int32 value +// to store v and returns a pointer to it. +func Int32(v int32) *int32 { + return &v +} + +// Int is a helper routine that allocates a new int32 value +// to store v and returns a pointer to it, but unlike Int32 +// its argument value is an int. +func Int(v int) *int32 { + p := new(int32) + *p = int32(v) + return p +} + +// Int64 is a helper routine that allocates a new int64 value +// to store v and returns a pointer to it. +func Int64(v int64) *int64 { + return &v +} + +// Float32 is a helper routine that allocates a new float32 value +// to store v and returns a pointer to it. +func Float32(v float32) *float32 { + return &v +} + +// Float64 is a helper routine that allocates a new float64 value +// to store v and returns a pointer to it. +func Float64(v float64) *float64 { + return &v +} + +// Uint32 is a helper routine that allocates a new uint32 value +// to store v and returns a pointer to it. +func Uint32(v uint32) *uint32 { + return &v +} + +// Uint64 is a helper routine that allocates a new uint64 value +// to store v and returns a pointer to it. +func Uint64(v uint64) *uint64 { + return &v +} + +// String is a helper routine that allocates a new string value +// to store v and returns a pointer to it. +func String(v string) *string { + return &v +} + +// EnumName is a helper function to simplify printing protocol buffer enums +// by name. Given an enum map and a value, it returns a useful string. +func EnumName(m map[int32]string, v int32) string { + s, ok := m[v] + if ok { + return s + } + return strconv.Itoa(int(v)) +} + +// UnmarshalJSONEnum is a helper function to simplify recovering enum int values +// from their JSON-encoded representation. Given a map from the enum's symbolic +// names to its int values, and a byte buffer containing the JSON-encoded +// value, it returns an int32 that can be cast to the enum type by the caller. +// +// The function can deal with both JSON representations, numeric and symbolic. +func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) { + if data[0] == '"' { + // New style: enums are strings. + var repr string + if err := json.Unmarshal(data, &repr); err != nil { + return -1, err + } + val, ok := m[repr] + if !ok { + return 0, fmt.Errorf("unrecognized enum %s value %q", enumName, repr) + } + return val, nil + } + // Old style: enums are ints. + var val int32 + if err := json.Unmarshal(data, &val); err != nil { + return 0, fmt.Errorf("cannot unmarshal %#q into enum %s", data, enumName) + } + return val, nil +} + +// DebugPrint dumps the encoded data in b in a debugging format with a header +// including the string s. Used in testing but made available for general debugging. +func (p *Buffer) DebugPrint(s string, b []byte) { + var u uint64 + + obuf := p.buf + index := p.index + p.buf = b + p.index = 0 + depth := 0 + + fmt.Printf("\n--- %s ---\n", s) + +out: + for { + for i := 0; i < depth; i++ { + fmt.Print(" ") + } + + index := p.index + if index == len(p.buf) { + break + } + + op, err := p.DecodeVarint() + if err != nil { + fmt.Printf("%3d: fetching op err %v\n", index, err) + break out + } + tag := op >> 3 + wire := op & 7 + + switch wire { + default: + fmt.Printf("%3d: t=%3d unknown wire=%d\n", + index, tag, wire) + break out + + case WireBytes: + var r []byte + + r, err = p.DecodeRawBytes(false) + if err != nil { + break out + } + fmt.Printf("%3d: t=%3d bytes [%d]", index, tag, len(r)) + if len(r) <= 6 { + for i := 0; i < len(r); i++ { + fmt.Printf(" %.2x", r[i]) + } + } else { + for i := 0; i < 3; i++ { + fmt.Printf(" %.2x", r[i]) + } + fmt.Printf(" ..") + for i := len(r) - 3; i < len(r); i++ { + fmt.Printf(" %.2x", r[i]) + } + } + fmt.Printf("\n") + + case WireFixed32: + u, err = p.DecodeFixed32() + if err != nil { + fmt.Printf("%3d: t=%3d fix32 err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d fix32 %d\n", index, tag, u) + + case WireFixed64: + u, err = p.DecodeFixed64() + if err != nil { + fmt.Printf("%3d: t=%3d fix64 err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) + + case WireVarint: + u, err = p.DecodeVarint() + if err != nil { + fmt.Printf("%3d: t=%3d varint err %v\n", index, tag, err) + break out + } + fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) + + case WireStartGroup: + fmt.Printf("%3d: t=%3d start\n", index, tag) + depth++ + + case WireEndGroup: + depth-- + fmt.Printf("%3d: t=%3d end\n", index, tag) + } + } + + if depth != 0 { + fmt.Printf("%3d: start-end not balanced %d\n", p.index, depth) + } + fmt.Printf("\n") + + p.buf = obuf + p.index = index +} + +// SetDefaults sets unset protocol buffer fields to their default values. +// It only modifies fields that are both unset and have defined defaults. +// It recursively sets default values in any non-nil sub-messages. +func SetDefaults(pb Message) { + setDefaults(reflect.ValueOf(pb), true, false) +} + +// v is a pointer to a struct. +func setDefaults(v reflect.Value, recur, zeros bool) { + v = v.Elem() + + defaultMu.RLock() + dm, ok := defaults[v.Type()] + defaultMu.RUnlock() + if !ok { + dm = buildDefaultMessage(v.Type()) + defaultMu.Lock() + defaults[v.Type()] = dm + defaultMu.Unlock() + } + + for _, sf := range dm.scalars { + f := v.Field(sf.index) + if !f.IsNil() { + // field already set + continue + } + dv := sf.value + if dv == nil && !zeros { + // no explicit default, and don't want to set zeros + continue + } + fptr := f.Addr().Interface() // **T + // TODO: Consider batching the allocations we do here. + switch sf.kind { + case reflect.Bool: + b := new(bool) + if dv != nil { + *b = dv.(bool) + } + *(fptr.(**bool)) = b + case reflect.Float32: + f := new(float32) + if dv != nil { + *f = dv.(float32) + } + *(fptr.(**float32)) = f + case reflect.Float64: + f := new(float64) + if dv != nil { + *f = dv.(float64) + } + *(fptr.(**float64)) = f + case reflect.Int32: + // might be an enum + if ft := f.Type(); ft != int32PtrType { + // enum + f.Set(reflect.New(ft.Elem())) + if dv != nil { + f.Elem().SetInt(int64(dv.(int32))) + } + } else { + // int32 field + i := new(int32) + if dv != nil { + *i = dv.(int32) + } + *(fptr.(**int32)) = i + } + case reflect.Int64: + i := new(int64) + if dv != nil { + *i = dv.(int64) + } + *(fptr.(**int64)) = i + case reflect.String: + s := new(string) + if dv != nil { + *s = dv.(string) + } + *(fptr.(**string)) = s + case reflect.Uint8: + // exceptional case: []byte + var b []byte + if dv != nil { + db := dv.([]byte) + b = make([]byte, len(db)) + copy(b, db) + } else { + b = []byte{} + } + *(fptr.(*[]byte)) = b + case reflect.Uint32: + u := new(uint32) + if dv != nil { + *u = dv.(uint32) + } + *(fptr.(**uint32)) = u + case reflect.Uint64: + u := new(uint64) + if dv != nil { + *u = dv.(uint64) + } + *(fptr.(**uint64)) = u + default: + log.Printf("proto: can't set default for field %v (sf.kind=%v)", f, sf.kind) + } + } + + for _, ni := range dm.nested { + f := v.Field(ni) + // f is *T or []*T or map[T]*T + switch f.Kind() { + case reflect.Ptr: + if f.IsNil() { + continue + } + setDefaults(f, recur, zeros) + + case reflect.Slice: + for i := 0; i < f.Len(); i++ { + e := f.Index(i) + if e.IsNil() { + continue + } + setDefaults(e, recur, zeros) + } + + case reflect.Map: + for _, k := range f.MapKeys() { + e := f.MapIndex(k) + if e.IsNil() { + continue + } + setDefaults(e, recur, zeros) + } + } + } +} + +var ( + // defaults maps a protocol buffer struct type to a slice of the fields, + // with its scalar fields set to their proto-declared non-zero default values. + defaultMu sync.RWMutex + defaults = make(map[reflect.Type]defaultMessage) + + int32PtrType = reflect.TypeOf((*int32)(nil)) +) + +// defaultMessage represents information about the default values of a message. +type defaultMessage struct { + scalars []scalarField + nested []int // struct field index of nested messages +} + +type scalarField struct { + index int // struct field index + kind reflect.Kind // element type (the T in *T or []T) + value interface{} // the proto-declared default value, or nil +} + +// t is a struct type. +func buildDefaultMessage(t reflect.Type) (dm defaultMessage) { + sprop := GetProperties(t) + for _, prop := range sprop.Prop { + fi, ok := sprop.decoderTags.get(prop.Tag) + if !ok { + // XXX_unrecognized + continue + } + ft := t.Field(fi).Type + + sf, nested, err := fieldDefault(ft, prop) + switch { + case err != nil: + log.Print(err) + case nested: + dm.nested = append(dm.nested, fi) + case sf != nil: + sf.index = fi + dm.scalars = append(dm.scalars, *sf) + } + } + + return dm +} + +// fieldDefault returns the scalarField for field type ft. +// sf will be nil if the field can not have a default. +// nestedMessage will be true if this is a nested message. +// Note that sf.index is not set on return. +func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) { + var canHaveDefault bool + switch ft.Kind() { + case reflect.Ptr: + if ft.Elem().Kind() == reflect.Struct { + nestedMessage = true + } else { + canHaveDefault = true // proto2 scalar field + } + + case reflect.Slice: + switch ft.Elem().Kind() { + case reflect.Ptr: + nestedMessage = true // repeated message + case reflect.Uint8: + canHaveDefault = true // bytes field + } + + case reflect.Map: + if ft.Elem().Kind() == reflect.Ptr { + nestedMessage = true // map with message values + } + } + + if !canHaveDefault { + if nestedMessage { + return nil, true, nil + } + return nil, false, nil + } + + // We now know that ft is a pointer or slice. + sf = &scalarField{kind: ft.Elem().Kind()} + + // scalar fields without defaults + if !prop.HasDefault { + return sf, false, nil + } + + // a scalar field: either *T or []byte + switch ft.Elem().Kind() { + case reflect.Bool: + x, err := strconv.ParseBool(prop.Default) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default bool %q: %v", prop.Default, err) + } + sf.value = x + case reflect.Float32: + x, err := strconv.ParseFloat(prop.Default, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default float32 %q: %v", prop.Default, err) + } + sf.value = float32(x) + case reflect.Float64: + x, err := strconv.ParseFloat(prop.Default, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default float64 %q: %v", prop.Default, err) + } + sf.value = x + case reflect.Int32: + x, err := strconv.ParseInt(prop.Default, 10, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default int32 %q: %v", prop.Default, err) + } + sf.value = int32(x) + case reflect.Int64: + x, err := strconv.ParseInt(prop.Default, 10, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default int64 %q: %v", prop.Default, err) + } + sf.value = x + case reflect.String: + sf.value = prop.Default + case reflect.Uint8: + // []byte (not *uint8) + sf.value = []byte(prop.Default) + case reflect.Uint32: + x, err := strconv.ParseUint(prop.Default, 10, 32) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default uint32 %q: %v", prop.Default, err) + } + sf.value = uint32(x) + case reflect.Uint64: + x, err := strconv.ParseUint(prop.Default, 10, 64) + if err != nil { + return nil, false, fmt.Errorf("proto: bad default uint64 %q: %v", prop.Default, err) + } + sf.value = x + default: + return nil, false, fmt.Errorf("proto: unhandled def kind %v", ft.Elem().Kind()) + } + + return sf, false, nil +} + +// mapKeys returns a sort.Interface to be used for sorting the map keys. +// Map fields may have key types of non-float scalars, strings and enums. +func mapKeys(vs []reflect.Value) sort.Interface { + s := mapKeySorter{vs: vs} + + // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps. + if len(vs) == 0 { + return s + } + switch vs[0].Kind() { + case reflect.Int32, reflect.Int64: + s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } + case reflect.Uint32, reflect.Uint64: + s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } + case reflect.Bool: + s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true + case reflect.String: + s.less = func(a, b reflect.Value) bool { return a.String() < b.String() } + default: + panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind())) + } + + return s +} + +type mapKeySorter struct { + vs []reflect.Value + less func(a, b reflect.Value) bool +} + +func (s mapKeySorter) Len() int { return len(s.vs) } +func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] } +func (s mapKeySorter) Less(i, j int) bool { + return s.less(s.vs[i], s.vs[j]) +} + +// isProto3Zero reports whether v is a zero proto3 value. +func isProto3Zero(v reflect.Value) bool { + switch v.Kind() { + case reflect.Bool: + return !v.Bool() + case reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint32, reflect.Uint64: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.String: + return v.String() == "" + } + return false +} + +const ( + // ProtoPackageIsVersion3 is referenced from generated protocol buffer files + // to assert that that code is compatible with this version of the proto package. + ProtoPackageIsVersion3 = true + + // ProtoPackageIsVersion2 is referenced from generated protocol buffer files + // to assert that that code is compatible with this version of the proto package. + ProtoPackageIsVersion2 = true + + // ProtoPackageIsVersion1 is referenced from generated protocol buffer files + // to assert that that code is compatible with this version of the proto package. + ProtoPackageIsVersion1 = true +) + +// InternalMessageInfo is a type used internally by generated .pb.go files. +// This type is not intended to be used by non-generated code. +// This type is not subject to any compatibility guarantee. +type InternalMessageInfo struct { + marshal *marshalInfo + unmarshal *unmarshalInfo + merge *mergeInfo + discard *discardInfo +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/message_set.go new file mode 100644 index 00000000000..f48a756761e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/message_set.go @@ -0,0 +1,181 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Support for message sets. + */ + +import ( + "errors" +) + +// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. +// A message type ID is required for storing a protocol buffer in a message set. +var errNoMessageTypeID = errors.New("proto does not have a message type ID") + +// The first two types (_MessageSet_Item and messageSet) +// model what the protocol compiler produces for the following protocol message: +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// }; +// } +// That is the MessageSet wire format. We can't use a proto to generate these +// because that would introduce a circular dependency between it and this package. + +type _MessageSet_Item struct { + TypeId *int32 `protobuf:"varint,2,req,name=type_id"` + Message []byte `protobuf:"bytes,3,req,name=message"` +} + +type messageSet struct { + Item []*_MessageSet_Item `protobuf:"group,1,rep"` + XXX_unrecognized []byte + // TODO: caching? +} + +// Make sure messageSet is a Message. +var _ Message = (*messageSet)(nil) + +// messageTypeIder is an interface satisfied by a protocol buffer type +// that may be stored in a MessageSet. +type messageTypeIder interface { + MessageTypeId() int32 +} + +func (ms *messageSet) find(pb Message) *_MessageSet_Item { + mti, ok := pb.(messageTypeIder) + if !ok { + return nil + } + id := mti.MessageTypeId() + for _, item := range ms.Item { + if *item.TypeId == id { + return item + } + } + return nil +} + +func (ms *messageSet) Has(pb Message) bool { + return ms.find(pb) != nil +} + +func (ms *messageSet) Unmarshal(pb Message) error { + if item := ms.find(pb); item != nil { + return Unmarshal(item.Message, pb) + } + if _, ok := pb.(messageTypeIder); !ok { + return errNoMessageTypeID + } + return nil // TODO: return error instead? +} + +func (ms *messageSet) Marshal(pb Message) error { + msg, err := Marshal(pb) + if err != nil { + return err + } + if item := ms.find(pb); item != nil { + // reuse existing item + item.Message = msg + return nil + } + + mti, ok := pb.(messageTypeIder) + if !ok { + return errNoMessageTypeID + } + + mtid := mti.MessageTypeId() + ms.Item = append(ms.Item, &_MessageSet_Item{ + TypeId: &mtid, + Message: msg, + }) + return nil +} + +func (ms *messageSet) Reset() { *ms = messageSet{} } +func (ms *messageSet) String() string { return CompactTextString(ms) } +func (*messageSet) ProtoMessage() {} + +// Support for the message_set_wire_format message option. + +func skipVarint(buf []byte) []byte { + i := 0 + for ; buf[i]&0x80 != 0; i++ { + } + return buf[i+1:] +} + +// unmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. +// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. +func unmarshalMessageSet(buf []byte, exts interface{}) error { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m = exts.extensionsWrite() + case map[int32]Extension: + m = exts + default: + return errors.New("proto: not an extension map") + } + + ms := new(messageSet) + if err := Unmarshal(buf, ms); err != nil { + return err + } + for _, item := range ms.Item { + id := *item.TypeId + msg := item.Message + + // Restore wire type and field number varint, plus length varint. + // Be careful to preserve duplicate items. + b := EncodeVarint(uint64(id)<<3 | WireBytes) + if ext, ok := m[id]; ok { + // Existing data; rip off the tag and length varint + // so we join the new data correctly. + // We can assume that ext.enc is set because we are unmarshaling. + o := ext.enc[len(b):] // skip wire type and field number + _, n := DecodeVarint(o) // calculate length of length varint + o = o[n:] // skip length varint + msg = append(o, msg...) // join old data and new data + } + b = append(b, EncodeVarint(uint64(len(msg)))...) + b = append(b, msg...) + + m[id] = Extension{enc: b} + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/pointer_reflect.go new file mode 100644 index 00000000000..94fa9194a88 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/pointer_reflect.go @@ -0,0 +1,360 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2012 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build purego appengine js + +// This file contains an implementation of proto field accesses using package reflect. +// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can +// be used on App Engine. + +package proto + +import ( + "reflect" + "sync" +) + +const unsafeAllowed = false + +// A field identifies a field in a struct, accessible from a pointer. +// In this implementation, a field is identified by the sequence of field indices +// passed to reflect's FieldByIndex. +type field []int + +// toField returns a field equivalent to the given reflect field. +func toField(f *reflect.StructField) field { + return f.Index +} + +// invalidField is an invalid field identifier. +var invalidField = field(nil) + +// zeroField is a noop when calling pointer.offset. +var zeroField = field([]int{}) + +// IsValid reports whether the field identifier is valid. +func (f field) IsValid() bool { return f != nil } + +// The pointer type is for the table-driven decoder. +// The implementation here uses a reflect.Value of pointer type to +// create a generic pointer. In pointer_unsafe.go we use unsafe +// instead of reflect to implement the same (but faster) interface. +type pointer struct { + v reflect.Value +} + +// toPointer converts an interface of pointer type to a pointer +// that points to the same target. +func toPointer(i *Message) pointer { + return pointer{v: reflect.ValueOf(*i)} +} + +// toAddrPointer converts an interface to a pointer that points to +// the interface data. +func toAddrPointer(i *interface{}, isptr, deref bool) pointer { + v := reflect.ValueOf(*i) + u := reflect.New(v.Type()) + u.Elem().Set(v) + if deref { + u = u.Elem() + } + return pointer{v: u} +} + +// valToPointer converts v to a pointer. v must be of pointer type. +func valToPointer(v reflect.Value) pointer { + return pointer{v: v} +} + +// offset converts from a pointer to a structure to a pointer to +// one of its fields. +func (p pointer) offset(f field) pointer { + return pointer{v: p.v.Elem().FieldByIndex(f).Addr()} +} + +func (p pointer) isNil() bool { + return p.v.IsNil() +} + +// grow updates the slice s in place to make it one element longer. +// s must be addressable. +// Returns the (addressable) new element. +func grow(s reflect.Value) reflect.Value { + n, m := s.Len(), s.Cap() + if n < m { + s.SetLen(n + 1) + } else { + s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem()))) + } + return s.Index(n) +} + +func (p pointer) toInt64() *int64 { + return p.v.Interface().(*int64) +} +func (p pointer) toInt64Ptr() **int64 { + return p.v.Interface().(**int64) +} +func (p pointer) toInt64Slice() *[]int64 { + return p.v.Interface().(*[]int64) +} + +var int32ptr = reflect.TypeOf((*int32)(nil)) + +func (p pointer) toInt32() *int32 { + return p.v.Convert(int32ptr).Interface().(*int32) +} + +// The toInt32Ptr/Slice methods don't work because of enums. +// Instead, we must use set/get methods for the int32ptr/slice case. +/* + func (p pointer) toInt32Ptr() **int32 { + return p.v.Interface().(**int32) +} + func (p pointer) toInt32Slice() *[]int32 { + return p.v.Interface().(*[]int32) +} +*/ +func (p pointer) getInt32Ptr() *int32 { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + return p.v.Elem().Interface().(*int32) + } + // an enum + return p.v.Elem().Convert(int32PtrType).Interface().(*int32) +} +func (p pointer) setInt32Ptr(v int32) { + // Allocate value in a *int32. Possibly convert that to a *enum. + // Then assign it to a **int32 or **enum. + // Note: we can convert *int32 to *enum, but we can't convert + // **int32 to **enum! + p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem())) +} + +// getInt32Slice copies []int32 from p as a new slice. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) getInt32Slice() []int32 { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + return p.v.Elem().Interface().([]int32) + } + // an enum + // Allocate a []int32, then assign []enum's values into it. + // Note: we can't convert []enum to []int32. + slice := p.v.Elem() + s := make([]int32, slice.Len()) + for i := 0; i < slice.Len(); i++ { + s[i] = int32(slice.Index(i).Int()) + } + return s +} + +// setInt32Slice copies []int32 into p as a new slice. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) setInt32Slice(v []int32) { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + p.v.Elem().Set(reflect.ValueOf(v)) + return + } + // an enum + // Allocate a []enum, then assign []int32's values into it. + // Note: we can't convert []enum to []int32. + slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v)) + for i, x := range v { + slice.Index(i).SetInt(int64(x)) + } + p.v.Elem().Set(slice) +} +func (p pointer) appendInt32Slice(v int32) { + grow(p.v.Elem()).SetInt(int64(v)) +} + +func (p pointer) toUint64() *uint64 { + return p.v.Interface().(*uint64) +} +func (p pointer) toUint64Ptr() **uint64 { + return p.v.Interface().(**uint64) +} +func (p pointer) toUint64Slice() *[]uint64 { + return p.v.Interface().(*[]uint64) +} +func (p pointer) toUint32() *uint32 { + return p.v.Interface().(*uint32) +} +func (p pointer) toUint32Ptr() **uint32 { + return p.v.Interface().(**uint32) +} +func (p pointer) toUint32Slice() *[]uint32 { + return p.v.Interface().(*[]uint32) +} +func (p pointer) toBool() *bool { + return p.v.Interface().(*bool) +} +func (p pointer) toBoolPtr() **bool { + return p.v.Interface().(**bool) +} +func (p pointer) toBoolSlice() *[]bool { + return p.v.Interface().(*[]bool) +} +func (p pointer) toFloat64() *float64 { + return p.v.Interface().(*float64) +} +func (p pointer) toFloat64Ptr() **float64 { + return p.v.Interface().(**float64) +} +func (p pointer) toFloat64Slice() *[]float64 { + return p.v.Interface().(*[]float64) +} +func (p pointer) toFloat32() *float32 { + return p.v.Interface().(*float32) +} +func (p pointer) toFloat32Ptr() **float32 { + return p.v.Interface().(**float32) +} +func (p pointer) toFloat32Slice() *[]float32 { + return p.v.Interface().(*[]float32) +} +func (p pointer) toString() *string { + return p.v.Interface().(*string) +} +func (p pointer) toStringPtr() **string { + return p.v.Interface().(**string) +} +func (p pointer) toStringSlice() *[]string { + return p.v.Interface().(*[]string) +} +func (p pointer) toBytes() *[]byte { + return p.v.Interface().(*[]byte) +} +func (p pointer) toBytesSlice() *[][]byte { + return p.v.Interface().(*[][]byte) +} +func (p pointer) toExtensions() *XXX_InternalExtensions { + return p.v.Interface().(*XXX_InternalExtensions) +} +func (p pointer) toOldExtensions() *map[int32]Extension { + return p.v.Interface().(*map[int32]Extension) +} +func (p pointer) getPointer() pointer { + return pointer{v: p.v.Elem()} +} +func (p pointer) setPointer(q pointer) { + p.v.Elem().Set(q.v) +} +func (p pointer) appendPointer(q pointer) { + grow(p.v.Elem()).Set(q.v) +} + +// getPointerSlice copies []*T from p as a new []pointer. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) getPointerSlice() []pointer { + if p.v.IsNil() { + return nil + } + n := p.v.Elem().Len() + s := make([]pointer, n) + for i := 0; i < n; i++ { + s[i] = pointer{v: p.v.Elem().Index(i)} + } + return s +} + +// setPointerSlice copies []pointer into p as a new []*T. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) setPointerSlice(v []pointer) { + if v == nil { + p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem()) + return + } + s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v)) + for _, p := range v { + s = reflect.Append(s, p.v) + } + p.v.Elem().Set(s) +} + +// getInterfacePointer returns a pointer that points to the +// interface data of the interface pointed by p. +func (p pointer) getInterfacePointer() pointer { + if p.v.Elem().IsNil() { + return pointer{v: p.v.Elem()} + } + return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct +} + +func (p pointer) asPointerTo(t reflect.Type) reflect.Value { + // TODO: check that p.v.Type().Elem() == t? + return p.v +} + +func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} +func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} + +var atomicLock sync.Mutex diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go new file mode 100644 index 00000000000..dbfffe071b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go @@ -0,0 +1,313 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2012 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build !purego,!appengine,!js + +// This file contains the implementation of the proto field accesses using package unsafe. + +package proto + +import ( + "reflect" + "sync/atomic" + "unsafe" +) + +const unsafeAllowed = true + +// A field identifies a field in a struct, accessible from a pointer. +// In this implementation, a field is identified by its byte offset from the start of the struct. +type field uintptr + +// toField returns a field equivalent to the given reflect field. +func toField(f *reflect.StructField) field { + return field(f.Offset) +} + +// invalidField is an invalid field identifier. +const invalidField = ^field(0) + +// zeroField is a noop when calling pointer.offset. +const zeroField = field(0) + +// IsValid reports whether the field identifier is valid. +func (f field) IsValid() bool { + return f != invalidField +} + +// The pointer type below is for the new table-driven encoder/decoder. +// The implementation here uses unsafe.Pointer to create a generic pointer. +// In pointer_reflect.go we use reflect instead of unsafe to implement +// the same (but slower) interface. +type pointer struct { + p unsafe.Pointer +} + +// size of pointer +var ptrSize = unsafe.Sizeof(uintptr(0)) + +// toPointer converts an interface of pointer type to a pointer +// that points to the same target. +func toPointer(i *Message) pointer { + // Super-tricky - read pointer out of data word of interface value. + // Saves ~25ns over the equivalent: + // return valToPointer(reflect.ValueOf(*i)) + return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +} + +// toAddrPointer converts an interface to a pointer that points to +// the interface data. +func toAddrPointer(i *interface{}, isptr, deref bool) (p pointer) { + // Super-tricky - read or get the address of data word of interface value. + if isptr { + // The interface is of pointer type, thus it is a direct interface. + // The data word is the pointer data itself. We take its address. + p = pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} + } else { + // The interface is not of pointer type. The data word is the pointer + // to the data. + p = pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} + } + if deref { + p.p = *(*unsafe.Pointer)(p.p) + } + return p +} + +// valToPointer converts v to a pointer. v must be of pointer type. +func valToPointer(v reflect.Value) pointer { + return pointer{p: unsafe.Pointer(v.Pointer())} +} + +// offset converts from a pointer to a structure to a pointer to +// one of its fields. +func (p pointer) offset(f field) pointer { + // For safety, we should panic if !f.IsValid, however calling panic causes + // this to no longer be inlineable, which is a serious performance cost. + /* + if !f.IsValid() { + panic("invalid field") + } + */ + return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} +} + +func (p pointer) isNil() bool { + return p.p == nil +} + +func (p pointer) toInt64() *int64 { + return (*int64)(p.p) +} +func (p pointer) toInt64Ptr() **int64 { + return (**int64)(p.p) +} +func (p pointer) toInt64Slice() *[]int64 { + return (*[]int64)(p.p) +} +func (p pointer) toInt32() *int32 { + return (*int32)(p.p) +} + +// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist. +/* + func (p pointer) toInt32Ptr() **int32 { + return (**int32)(p.p) + } + func (p pointer) toInt32Slice() *[]int32 { + return (*[]int32)(p.p) + } +*/ +func (p pointer) getInt32Ptr() *int32 { + return *(**int32)(p.p) +} +func (p pointer) setInt32Ptr(v int32) { + *(**int32)(p.p) = &v +} + +// getInt32Slice loads a []int32 from p. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) getInt32Slice() []int32 { + return *(*[]int32)(p.p) +} + +// setInt32Slice stores a []int32 to p. +// The value set is aliased with the input slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) setInt32Slice(v []int32) { + *(*[]int32)(p.p) = v +} + +// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead? +func (p pointer) appendInt32Slice(v int32) { + s := (*[]int32)(p.p) + *s = append(*s, v) +} + +func (p pointer) toUint64() *uint64 { + return (*uint64)(p.p) +} +func (p pointer) toUint64Ptr() **uint64 { + return (**uint64)(p.p) +} +func (p pointer) toUint64Slice() *[]uint64 { + return (*[]uint64)(p.p) +} +func (p pointer) toUint32() *uint32 { + return (*uint32)(p.p) +} +func (p pointer) toUint32Ptr() **uint32 { + return (**uint32)(p.p) +} +func (p pointer) toUint32Slice() *[]uint32 { + return (*[]uint32)(p.p) +} +func (p pointer) toBool() *bool { + return (*bool)(p.p) +} +func (p pointer) toBoolPtr() **bool { + return (**bool)(p.p) +} +func (p pointer) toBoolSlice() *[]bool { + return (*[]bool)(p.p) +} +func (p pointer) toFloat64() *float64 { + return (*float64)(p.p) +} +func (p pointer) toFloat64Ptr() **float64 { + return (**float64)(p.p) +} +func (p pointer) toFloat64Slice() *[]float64 { + return (*[]float64)(p.p) +} +func (p pointer) toFloat32() *float32 { + return (*float32)(p.p) +} +func (p pointer) toFloat32Ptr() **float32 { + return (**float32)(p.p) +} +func (p pointer) toFloat32Slice() *[]float32 { + return (*[]float32)(p.p) +} +func (p pointer) toString() *string { + return (*string)(p.p) +} +func (p pointer) toStringPtr() **string { + return (**string)(p.p) +} +func (p pointer) toStringSlice() *[]string { + return (*[]string)(p.p) +} +func (p pointer) toBytes() *[]byte { + return (*[]byte)(p.p) +} +func (p pointer) toBytesSlice() *[][]byte { + return (*[][]byte)(p.p) +} +func (p pointer) toExtensions() *XXX_InternalExtensions { + return (*XXX_InternalExtensions)(p.p) +} +func (p pointer) toOldExtensions() *map[int32]Extension { + return (*map[int32]Extension)(p.p) +} + +// getPointerSlice loads []*T from p as a []pointer. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) getPointerSlice() []pointer { + // Super-tricky - p should point to a []*T where T is a + // message type. We load it as []pointer. + return *(*[]pointer)(p.p) +} + +// setPointerSlice stores []pointer into p as a []*T. +// The value set is aliased with the input slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) setPointerSlice(v []pointer) { + // Super-tricky - p should point to a []*T where T is a + // message type. We store it as []pointer. + *(*[]pointer)(p.p) = v +} + +// getPointer loads the pointer at p and returns it. +func (p pointer) getPointer() pointer { + return pointer{p: *(*unsafe.Pointer)(p.p)} +} + +// setPointer stores the pointer q at p. +func (p pointer) setPointer(q pointer) { + *(*unsafe.Pointer)(p.p) = q.p +} + +// append q to the slice pointed to by p. +func (p pointer) appendPointer(q pointer) { + s := (*[]unsafe.Pointer)(p.p) + *s = append(*s, q.p) +} + +// getInterfacePointer returns a pointer that points to the +// interface data of the interface pointed by p. +func (p pointer) getInterfacePointer() pointer { + // Super-tricky - read pointer out of data word of interface value. + return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]} +} + +// asPointerTo returns a reflect.Value that is a pointer to an +// object of type t stored at p. +func (p pointer) asPointerTo(t reflect.Type) reflect.Value { + return reflect.NewAt(t, p.p) +} + +func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { + return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { + return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { + return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { + return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/properties.go new file mode 100644 index 00000000000..a4b8c0cd3a8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/properties.go @@ -0,0 +1,544 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +/* + * Routines for encoding data into the wire format for protocol buffers. + */ + +import ( + "fmt" + "log" + "reflect" + "sort" + "strconv" + "strings" + "sync" +) + +const debug bool = false + +// Constants that identify the encoding of a value on the wire. +const ( + WireVarint = 0 + WireFixed64 = 1 + WireBytes = 2 + WireStartGroup = 3 + WireEndGroup = 4 + WireFixed32 = 5 +) + +// tagMap is an optimization over map[int]int for typical protocol buffer +// use-cases. Encoded protocol buffers are often in tag order with small tag +// numbers. +type tagMap struct { + fastTags []int + slowTags map[int]int +} + +// tagMapFastLimit is the upper bound on the tag number that will be stored in +// the tagMap slice rather than its map. +const tagMapFastLimit = 1024 + +func (p *tagMap) get(t int) (int, bool) { + if t > 0 && t < tagMapFastLimit { + if t >= len(p.fastTags) { + return 0, false + } + fi := p.fastTags[t] + return fi, fi >= 0 + } + fi, ok := p.slowTags[t] + return fi, ok +} + +func (p *tagMap) put(t int, fi int) { + if t > 0 && t < tagMapFastLimit { + for len(p.fastTags) < t+1 { + p.fastTags = append(p.fastTags, -1) + } + p.fastTags[t] = fi + return + } + if p.slowTags == nil { + p.slowTags = make(map[int]int) + } + p.slowTags[t] = fi +} + +// StructProperties represents properties for all the fields of a struct. +// decoderTags and decoderOrigNames should only be used by the decoder. +type StructProperties struct { + Prop []*Properties // properties for each field + reqCount int // required count + decoderTags tagMap // map from proto tag to struct field number + decoderOrigNames map[string]int // map from original name to struct field number + order []int // list of struct field numbers in tag order + + // OneofTypes contains information about the oneof fields in this message. + // It is keyed by the original name of a field. + OneofTypes map[string]*OneofProperties +} + +// OneofProperties represents information about a specific field in a oneof. +type OneofProperties struct { + Type reflect.Type // pointer to generated struct type for this oneof field + Field int // struct field number of the containing oneof in the message + Prop *Properties +} + +// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec. +// See encode.go, (*Buffer).enc_struct. + +func (sp *StructProperties) Len() int { return len(sp.order) } +func (sp *StructProperties) Less(i, j int) bool { + return sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag +} +func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] } + +// Properties represents the protocol-specific behavior of a single struct field. +type Properties struct { + Name string // name of the field, for error messages + OrigName string // original name before protocol compiler (always set) + JSONName string // name to use for JSON; determined by protoc + Wire string + WireType int + Tag int + Required bool + Optional bool + Repeated bool + Packed bool // relevant for repeated primitives only + Enum string // set for enum types only + proto3 bool // whether this is known to be a proto3 field + oneof bool // whether this is a oneof field + + Default string // default value + HasDefault bool // whether an explicit default was provided + + stype reflect.Type // set for struct types only + sprop *StructProperties // set for struct types only + + mtype reflect.Type // set for map types only + MapKeyProp *Properties // set for map types only + MapValProp *Properties // set for map types only +} + +// String formats the properties in the protobuf struct field tag style. +func (p *Properties) String() string { + s := p.Wire + s += "," + s += strconv.Itoa(p.Tag) + if p.Required { + s += ",req" + } + if p.Optional { + s += ",opt" + } + if p.Repeated { + s += ",rep" + } + if p.Packed { + s += ",packed" + } + s += ",name=" + p.OrigName + if p.JSONName != p.OrigName { + s += ",json=" + p.JSONName + } + if p.proto3 { + s += ",proto3" + } + if p.oneof { + s += ",oneof" + } + if len(p.Enum) > 0 { + s += ",enum=" + p.Enum + } + if p.HasDefault { + s += ",def=" + p.Default + } + return s +} + +// Parse populates p by parsing a string in the protobuf struct field tag style. +func (p *Properties) Parse(s string) { + // "bytes,49,opt,name=foo,def=hello!" + fields := strings.Split(s, ",") // breaks def=, but handled below. + if len(fields) < 2 { + log.Printf("proto: tag has too few fields: %q", s) + return + } + + p.Wire = fields[0] + switch p.Wire { + case "varint": + p.WireType = WireVarint + case "fixed32": + p.WireType = WireFixed32 + case "fixed64": + p.WireType = WireFixed64 + case "zigzag32": + p.WireType = WireVarint + case "zigzag64": + p.WireType = WireVarint + case "bytes", "group": + p.WireType = WireBytes + // no numeric converter for non-numeric types + default: + log.Printf("proto: tag has unknown wire type: %q", s) + return + } + + var err error + p.Tag, err = strconv.Atoi(fields[1]) + if err != nil { + return + } + +outer: + for i := 2; i < len(fields); i++ { + f := fields[i] + switch { + case f == "req": + p.Required = true + case f == "opt": + p.Optional = true + case f == "rep": + p.Repeated = true + case f == "packed": + p.Packed = true + case strings.HasPrefix(f, "name="): + p.OrigName = f[5:] + case strings.HasPrefix(f, "json="): + p.JSONName = f[5:] + case strings.HasPrefix(f, "enum="): + p.Enum = f[5:] + case f == "proto3": + p.proto3 = true + case f == "oneof": + p.oneof = true + case strings.HasPrefix(f, "def="): + p.HasDefault = true + p.Default = f[4:] // rest of string + if i+1 < len(fields) { + // Commas aren't escaped, and def is always last. + p.Default += "," + strings.Join(fields[i+1:], ",") + break outer + } + } + } +} + +var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() + +// setFieldProps initializes the field properties for submessages and maps. +func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { + switch t1 := typ; t1.Kind() { + case reflect.Ptr: + if t1.Elem().Kind() == reflect.Struct { + p.stype = t1.Elem() + } + + case reflect.Slice: + if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct { + p.stype = t2.Elem() + } + + case reflect.Map: + p.mtype = t1 + p.MapKeyProp = &Properties{} + p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) + p.MapValProp = &Properties{} + vtype := p.mtype.Elem() + if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice { + // The value type is not a message (*T) or bytes ([]byte), + // so we need encoders for the pointer to this type. + vtype = reflect.PtrTo(vtype) + } + p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) + } + + if p.stype != nil { + if lockGetProp { + p.sprop = GetProperties(p.stype) + } else { + p.sprop = getPropertiesLocked(p.stype) + } + } +} + +var ( + marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() +) + +// Init populates the properties from a protocol buffer struct tag. +func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { + p.init(typ, name, tag, f, true) +} + +func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) { + // "bytes,49,opt,def=hello!" + p.Name = name + p.OrigName = name + if tag == "" { + return + } + p.Parse(tag) + p.setFieldProps(typ, f, lockGetProp) +} + +var ( + propertiesMu sync.RWMutex + propertiesMap = make(map[reflect.Type]*StructProperties) +) + +// GetProperties returns the list of properties for the type represented by t. +// t must represent a generated struct type of a protocol message. +func GetProperties(t reflect.Type) *StructProperties { + if t.Kind() != reflect.Struct { + panic("proto: type must have kind struct") + } + + // Most calls to GetProperties in a long-running program will be + // retrieving details for types we have seen before. + propertiesMu.RLock() + sprop, ok := propertiesMap[t] + propertiesMu.RUnlock() + if ok { + return sprop + } + + propertiesMu.Lock() + sprop = getPropertiesLocked(t) + propertiesMu.Unlock() + return sprop +} + +type ( + oneofFuncsIface interface { + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) + } + oneofWrappersIface interface { + XXX_OneofWrappers() []interface{} + } +) + +// getPropertiesLocked requires that propertiesMu is held. +func getPropertiesLocked(t reflect.Type) *StructProperties { + if prop, ok := propertiesMap[t]; ok { + return prop + } + + prop := new(StructProperties) + // in case of recursive protos, fill this in now. + propertiesMap[t] = prop + + // build properties + prop.Prop = make([]*Properties, t.NumField()) + prop.order = make([]int, t.NumField()) + + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + p := new(Properties) + name := f.Name + p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) + + oneof := f.Tag.Get("protobuf_oneof") // special case + if oneof != "" { + // Oneof fields don't use the traditional protobuf tag. + p.OrigName = oneof + } + prop.Prop[i] = p + prop.order[i] = i + if debug { + print(i, " ", f.Name, " ", t.String(), " ") + if p.Tag > 0 { + print(p.String()) + } + print("\n") + } + } + + // Re-order prop.order. + sort.Sort(prop) + + var oots []interface{} + switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) { + case oneofFuncsIface: + _, _, _, oots = m.XXX_OneofFuncs() + case oneofWrappersIface: + oots = m.XXX_OneofWrappers() + } + if len(oots) > 0 { + // Interpret oneof metadata. + prop.OneofTypes = make(map[string]*OneofProperties) + for _, oot := range oots { + oop := &OneofProperties{ + Type: reflect.ValueOf(oot).Type(), // *T + Prop: new(Properties), + } + sft := oop.Type.Elem().Field(0) + oop.Prop.Name = sft.Name + oop.Prop.Parse(sft.Tag.Get("protobuf")) + // There will be exactly one interface field that + // this new value is assignable to. + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if f.Type.Kind() != reflect.Interface { + continue + } + if !oop.Type.AssignableTo(f.Type) { + continue + } + oop.Field = i + break + } + prop.OneofTypes[oop.Prop.OrigName] = oop + } + } + + // build required counts + // build tags + reqCount := 0 + prop.decoderOrigNames = make(map[string]int) + for i, p := range prop.Prop { + if strings.HasPrefix(p.Name, "XXX_") { + // Internal fields should not appear in tags/origNames maps. + // They are handled specially when encoding and decoding. + continue + } + if p.Required { + reqCount++ + } + prop.decoderTags.put(p.Tag, i) + prop.decoderOrigNames[p.OrigName] = i + } + prop.reqCount = reqCount + + return prop +} + +// A global registry of enum types. +// The generated code will register the generated maps by calling RegisterEnum. + +var enumValueMaps = make(map[string]map[string]int32) + +// RegisterEnum is called from the generated code to install the enum descriptor +// maps into the global table to aid parsing text format protocol buffers. +func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) { + if _, ok := enumValueMaps[typeName]; ok { + panic("proto: duplicate enum registered: " + typeName) + } + enumValueMaps[typeName] = valueMap +} + +// EnumValueMap returns the mapping from names to integers of the +// enum type enumType, or a nil if not found. +func EnumValueMap(enumType string) map[string]int32 { + return enumValueMaps[enumType] +} + +// A registry of all linked message types. +// The string is a fully-qualified proto name ("pkg.Message"). +var ( + protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers + protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types + revProtoTypes = make(map[reflect.Type]string) +) + +// RegisterType is called from generated code and maps from the fully qualified +// proto name to the type (pointer to struct) of the protocol buffer. +func RegisterType(x Message, name string) { + if _, ok := protoTypedNils[name]; ok { + // TODO: Some day, make this a panic. + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 { + // Generated code always calls RegisterType with nil x. + // This check is just for extra safety. + protoTypedNils[name] = x + } else { + protoTypedNils[name] = reflect.Zero(t).Interface().(Message) + } + revProtoTypes[t] = name +} + +// RegisterMapType is called from generated code and maps from the fully qualified +// proto name to the native map type of the proto map definition. +func RegisterMapType(x interface{}, name string) { + if reflect.TypeOf(x).Kind() != reflect.Map { + panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name)) + } + if _, ok := protoMapTypes[name]; ok { + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + protoMapTypes[name] = t + revProtoTypes[t] = name +} + +// MessageName returns the fully-qualified proto name for the given message type. +func MessageName(x Message) string { + type xname interface { + XXX_MessageName() string + } + if m, ok := x.(xname); ok { + return m.XXX_MessageName() + } + return revProtoTypes[reflect.TypeOf(x)] +} + +// MessageType returns the message type (pointer to struct) for a named message. +// The type is not guaranteed to implement proto.Message if the name refers to a +// map entry. +func MessageType(name string) reflect.Type { + if t, ok := protoTypedNils[name]; ok { + return reflect.TypeOf(t) + } + return protoMapTypes[name] +} + +// A registry of all linked proto files. +var ( + protoFiles = make(map[string][]byte) // file name => fileDescriptor +) + +// RegisterFile is called from generated code and maps from the +// full file name of a .proto file to its compressed FileDescriptorProto. +func RegisterFile(filename string, fileDescriptor []byte) { + protoFiles[filename] = fileDescriptor +} + +// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. +func FileDescriptor(filename string) []byte { return protoFiles[filename] } diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_marshal.go new file mode 100644 index 00000000000..5cb11fa955e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_marshal.go @@ -0,0 +1,2776 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "errors" + "fmt" + "math" + "reflect" + "sort" + "strconv" + "strings" + "sync" + "sync/atomic" + "unicode/utf8" +) + +// a sizer takes a pointer to a field and the size of its tag, computes the size of +// the encoded data. +type sizer func(pointer, int) int + +// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format), +// marshals the field to the end of the slice, returns the slice and error (if any). +type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) + +// marshalInfo is the information used for marshaling a message. +type marshalInfo struct { + typ reflect.Type + fields []*marshalFieldInfo + unrecognized field // offset of XXX_unrecognized + extensions field // offset of XXX_InternalExtensions + v1extensions field // offset of XXX_extensions + sizecache field // offset of XXX_sizecache + initialized int32 // 0 -- only typ is set, 1 -- fully initialized + messageset bool // uses message set wire format + hasmarshaler bool // has custom marshaler + sync.RWMutex // protect extElems map, also for initialization + extElems map[int32]*marshalElemInfo // info of extension elements +} + +// marshalFieldInfo is the information used for marshaling a field of a message. +type marshalFieldInfo struct { + field field + wiretag uint64 // tag in wire format + tagsize int // size of tag in wire format + sizer sizer + marshaler marshaler + isPointer bool + required bool // field is required + name string // name of the field, for error reporting + oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements +} + +// marshalElemInfo is the information used for marshaling an extension or oneof element. +type marshalElemInfo struct { + wiretag uint64 // tag in wire format + tagsize int // size of tag in wire format + sizer sizer + marshaler marshaler + isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) + deref bool // dereference the pointer before operating on it; implies isptr +} + +var ( + marshalInfoMap = map[reflect.Type]*marshalInfo{} + marshalInfoLock sync.Mutex +) + +// getMarshalInfo returns the information to marshal a given type of message. +// The info it returns may not necessarily initialized. +// t is the type of the message (NOT the pointer to it). +func getMarshalInfo(t reflect.Type) *marshalInfo { + marshalInfoLock.Lock() + u, ok := marshalInfoMap[t] + if !ok { + u = &marshalInfo{typ: t} + marshalInfoMap[t] = u + } + marshalInfoLock.Unlock() + return u +} + +// Size is the entry point from generated code, +// and should be ONLY called by generated code. +// It computes the size of encoded data of msg. +// a is a pointer to a place to store cached marshal info. +func (a *InternalMessageInfo) Size(msg Message) int { + u := getMessageMarshalInfo(msg, a) + ptr := toPointer(&msg) + if ptr.isNil() { + // We get here if msg is a typed nil ((*SomeMessage)(nil)), + // so it satisfies the interface, and msg == nil wouldn't + // catch it. We don't want crash in this case. + return 0 + } + return u.size(ptr) +} + +// Marshal is the entry point from generated code, +// and should be ONLY called by generated code. +// It marshals msg to the end of b. +// a is a pointer to a place to store cached marshal info. +func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) { + u := getMessageMarshalInfo(msg, a) + ptr := toPointer(&msg) + if ptr.isNil() { + // We get here if msg is a typed nil ((*SomeMessage)(nil)), + // so it satisfies the interface, and msg == nil wouldn't + // catch it. We don't want crash in this case. + return b, ErrNil + } + return u.marshal(b, ptr, deterministic) +} + +func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo { + // u := a.marshal, but atomically. + // We use an atomic here to ensure memory consistency. + u := atomicLoadMarshalInfo(&a.marshal) + if u == nil { + // Get marshal information from type of message. + t := reflect.ValueOf(msg).Type() + if t.Kind() != reflect.Ptr { + panic(fmt.Sprintf("cannot handle non-pointer message type %v", t)) + } + u = getMarshalInfo(t.Elem()) + // Store it in the cache for later users. + // a.marshal = u, but atomically. + atomicStoreMarshalInfo(&a.marshal, u) + } + return u +} + +// size is the main function to compute the size of the encoded data of a message. +// ptr is the pointer to the message. +func (u *marshalInfo) size(ptr pointer) int { + if atomic.LoadInt32(&u.initialized) == 0 { + u.computeMarshalInfo() + } + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if u.hasmarshaler { + m := ptr.asPointerTo(u.typ).Interface().(Marshaler) + b, _ := m.Marshal() + return len(b) + } + + n := 0 + for _, f := range u.fields { + if f.isPointer && ptr.offset(f.field).getPointer().isNil() { + // nil pointer always marshals to nothing + continue + } + n += f.sizer(ptr.offset(f.field), f.tagsize) + } + if u.extensions.IsValid() { + e := ptr.offset(u.extensions).toExtensions() + if u.messageset { + n += u.sizeMessageSet(e) + } else { + n += u.sizeExtensions(e) + } + } + if u.v1extensions.IsValid() { + m := *ptr.offset(u.v1extensions).toOldExtensions() + n += u.sizeV1Extensions(m) + } + if u.unrecognized.IsValid() { + s := *ptr.offset(u.unrecognized).toBytes() + n += len(s) + } + // cache the result for use in marshal + if u.sizecache.IsValid() { + atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n)) + } + return n +} + +// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated), +// fall back to compute the size. +func (u *marshalInfo) cachedsize(ptr pointer) int { + if u.sizecache.IsValid() { + return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32())) + } + return u.size(ptr) +} + +// marshal is the main function to marshal a message. It takes a byte slice and appends +// the encoded data to the end of the slice, returns the slice and error (if any). +// ptr is the pointer to the message. +// If deterministic is true, map is marshaled in deterministic order. +func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) { + if atomic.LoadInt32(&u.initialized) == 0 { + u.computeMarshalInfo() + } + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if u.hasmarshaler { + m := ptr.asPointerTo(u.typ).Interface().(Marshaler) + b1, err := m.Marshal() + b = append(b, b1...) + return b, err + } + + var err, errLater error + // The old marshaler encodes extensions at beginning. + if u.extensions.IsValid() { + e := ptr.offset(u.extensions).toExtensions() + if u.messageset { + b, err = u.appendMessageSet(b, e, deterministic) + } else { + b, err = u.appendExtensions(b, e, deterministic) + } + if err != nil { + return b, err + } + } + if u.v1extensions.IsValid() { + m := *ptr.offset(u.v1extensions).toOldExtensions() + b, err = u.appendV1Extensions(b, m, deterministic) + if err != nil { + return b, err + } + } + for _, f := range u.fields { + if f.required { + if ptr.offset(f.field).getPointer().isNil() { + // Required field is not set. + // We record the error but keep going, to give a complete marshaling. + if errLater == nil { + errLater = &RequiredNotSetError{f.name} + } + continue + } + } + if f.isPointer && ptr.offset(f.field).getPointer().isNil() { + // nil pointer always marshals to nothing + continue + } + b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic) + if err != nil { + if err1, ok := err.(*RequiredNotSetError); ok { + // Required field in submessage is not set. + // We record the error but keep going, to give a complete marshaling. + if errLater == nil { + errLater = &RequiredNotSetError{f.name + "." + err1.field} + } + continue + } + if err == errRepeatedHasNil { + err = errors.New("proto: repeated field " + f.name + " has nil element") + } + if err == errInvalidUTF8 { + if errLater == nil { + fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name + errLater = &invalidUTF8Error{fullName} + } + continue + } + return b, err + } + } + if u.unrecognized.IsValid() { + s := *ptr.offset(u.unrecognized).toBytes() + b = append(b, s...) + } + return b, errLater +} + +// computeMarshalInfo initializes the marshal info. +func (u *marshalInfo) computeMarshalInfo() { + u.Lock() + defer u.Unlock() + if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock + return + } + + t := u.typ + u.unrecognized = invalidField + u.extensions = invalidField + u.v1extensions = invalidField + u.sizecache = invalidField + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if reflect.PtrTo(t).Implements(marshalerType) { + u.hasmarshaler = true + atomic.StoreInt32(&u.initialized, 1) + return + } + + // get oneof implementers + var oneofImplementers []interface{} + switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) { + case oneofFuncsIface: + _, _, _, oneofImplementers = m.XXX_OneofFuncs() + case oneofWrappersIface: + oneofImplementers = m.XXX_OneofWrappers() + } + + n := t.NumField() + + // deal with XXX fields first + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if !strings.HasPrefix(f.Name, "XXX_") { + continue + } + switch f.Name { + case "XXX_sizecache": + u.sizecache = toField(&f) + case "XXX_unrecognized": + u.unrecognized = toField(&f) + case "XXX_InternalExtensions": + u.extensions = toField(&f) + u.messageset = f.Tag.Get("protobuf_messageset") == "1" + case "XXX_extensions": + u.v1extensions = toField(&f) + case "XXX_NoUnkeyedLiteral": + // nothing to do + default: + panic("unknown XXX field: " + f.Name) + } + n-- + } + + // normal fields + fields := make([]marshalFieldInfo, n) // batch allocation + u.fields = make([]*marshalFieldInfo, 0, n) + for i, j := 0, 0; i < t.NumField(); i++ { + f := t.Field(i) + + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + field := &fields[j] + j++ + field.name = f.Name + u.fields = append(u.fields, field) + if f.Tag.Get("protobuf_oneof") != "" { + field.computeOneofFieldInfo(&f, oneofImplementers) + continue + } + if f.Tag.Get("protobuf") == "" { + // field has no tag (not in generated message), ignore it + u.fields = u.fields[:len(u.fields)-1] + j-- + continue + } + field.computeMarshalFieldInfo(&f) + } + + // fields are marshaled in tag order on the wire. + sort.Sort(byTag(u.fields)) + + atomic.StoreInt32(&u.initialized, 1) +} + +// helper for sorting fields by tag +type byTag []*marshalFieldInfo + +func (a byTag) Len() int { return len(a) } +func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag } + +// getExtElemInfo returns the information to marshal an extension element. +// The info it returns is initialized. +func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo { + // get from cache first + u.RLock() + e, ok := u.extElems[desc.Field] + u.RUnlock() + if ok { + return e + } + + t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct + tags := strings.Split(desc.Tag, ",") + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + if t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct { + t = t.Elem() + } + sizer, marshaler := typeMarshaler(t, tags, false, false) + var deref bool + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + t = reflect.PtrTo(t) + deref = true + } + e = &marshalElemInfo{ + wiretag: uint64(tag)<<3 | wt, + tagsize: SizeVarint(uint64(tag) << 3), + sizer: sizer, + marshaler: marshaler, + isptr: t.Kind() == reflect.Ptr, + deref: deref, + } + + // update cache + u.Lock() + if u.extElems == nil { + u.extElems = make(map[int32]*marshalElemInfo) + } + u.extElems[desc.Field] = e + u.Unlock() + return e +} + +// computeMarshalFieldInfo fills up the information to marshal a field. +func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) { + // parse protobuf tag of the field. + // tag has format of "bytes,49,opt,name=foo,def=hello!" + tags := strings.Split(f.Tag.Get("protobuf"), ",") + if tags[0] == "" { + return + } + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + if tags[2] == "req" { + fi.required = true + } + fi.setTag(f, tag, wt) + fi.setMarshaler(f, tags) +} + +func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { + fi.field = toField(f) + fi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. + fi.isPointer = true + fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) + fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) + + ityp := f.Type // interface type + for _, o := range oneofImplementers { + t := reflect.TypeOf(o) + if !t.Implements(ityp) { + continue + } + sf := t.Elem().Field(0) // oneof implementer is a struct with a single field + tags := strings.Split(sf.Tag.Get("protobuf"), ",") + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value + fi.oneofElems[t.Elem()] = &marshalElemInfo{ + wiretag: uint64(tag)<<3 | wt, + tagsize: SizeVarint(uint64(tag) << 3), + sizer: sizer, + marshaler: marshaler, + } + } +} + +// wiretype returns the wire encoding of the type. +func wiretype(encoding string) uint64 { + switch encoding { + case "fixed32": + return WireFixed32 + case "fixed64": + return WireFixed64 + case "varint", "zigzag32", "zigzag64": + return WireVarint + case "bytes": + return WireBytes + case "group": + return WireStartGroup + } + panic("unknown wire type " + encoding) +} + +// setTag fills up the tag (in wire format) and its size in the info of a field. +func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) { + fi.field = toField(f) + fi.wiretag = uint64(tag)<<3 | wt + fi.tagsize = SizeVarint(uint64(tag) << 3) +} + +// setMarshaler fills up the sizer and marshaler in the info of a field. +func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) { + switch f.Type.Kind() { + case reflect.Map: + // map field + fi.isPointer = true + fi.sizer, fi.marshaler = makeMapMarshaler(f) + return + case reflect.Ptr, reflect.Slice: + fi.isPointer = true + } + fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false) +} + +// typeMarshaler returns the sizer and marshaler of a given field. +// t is the type of the field. +// tags is the generated "protobuf" tag of the field. +// If nozero is true, zero value is not marshaled to the wire. +// If oneof is true, it is a oneof field. +func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) { + encoding := tags[0] + + pointer := false + slice := false + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + slice = true + t = t.Elem() + } + if t.Kind() == reflect.Ptr { + pointer = true + t = t.Elem() + } + + packed := false + proto3 := false + validateUTF8 := true + for i := 2; i < len(tags); i++ { + if tags[i] == "packed" { + packed = true + } + if tags[i] == "proto3" { + proto3 = true + } + } + validateUTF8 = validateUTF8 && proto3 + + switch t.Kind() { + case reflect.Bool: + if pointer { + return sizeBoolPtr, appendBoolPtr + } + if slice { + if packed { + return sizeBoolPackedSlice, appendBoolPackedSlice + } + return sizeBoolSlice, appendBoolSlice + } + if nozero { + return sizeBoolValueNoZero, appendBoolValueNoZero + } + return sizeBoolValue, appendBoolValue + case reflect.Uint32: + switch encoding { + case "fixed32": + if pointer { + return sizeFixed32Ptr, appendFixed32Ptr + } + if slice { + if packed { + return sizeFixed32PackedSlice, appendFixed32PackedSlice + } + return sizeFixed32Slice, appendFixed32Slice + } + if nozero { + return sizeFixed32ValueNoZero, appendFixed32ValueNoZero + } + return sizeFixed32Value, appendFixed32Value + case "varint": + if pointer { + return sizeVarint32Ptr, appendVarint32Ptr + } + if slice { + if packed { + return sizeVarint32PackedSlice, appendVarint32PackedSlice + } + return sizeVarint32Slice, appendVarint32Slice + } + if nozero { + return sizeVarint32ValueNoZero, appendVarint32ValueNoZero + } + return sizeVarint32Value, appendVarint32Value + } + case reflect.Int32: + switch encoding { + case "fixed32": + if pointer { + return sizeFixedS32Ptr, appendFixedS32Ptr + } + if slice { + if packed { + return sizeFixedS32PackedSlice, appendFixedS32PackedSlice + } + return sizeFixedS32Slice, appendFixedS32Slice + } + if nozero { + return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero + } + return sizeFixedS32Value, appendFixedS32Value + case "varint": + if pointer { + return sizeVarintS32Ptr, appendVarintS32Ptr + } + if slice { + if packed { + return sizeVarintS32PackedSlice, appendVarintS32PackedSlice + } + return sizeVarintS32Slice, appendVarintS32Slice + } + if nozero { + return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero + } + return sizeVarintS32Value, appendVarintS32Value + case "zigzag32": + if pointer { + return sizeZigzag32Ptr, appendZigzag32Ptr + } + if slice { + if packed { + return sizeZigzag32PackedSlice, appendZigzag32PackedSlice + } + return sizeZigzag32Slice, appendZigzag32Slice + } + if nozero { + return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero + } + return sizeZigzag32Value, appendZigzag32Value + } + case reflect.Uint64: + switch encoding { + case "fixed64": + if pointer { + return sizeFixed64Ptr, appendFixed64Ptr + } + if slice { + if packed { + return sizeFixed64PackedSlice, appendFixed64PackedSlice + } + return sizeFixed64Slice, appendFixed64Slice + } + if nozero { + return sizeFixed64ValueNoZero, appendFixed64ValueNoZero + } + return sizeFixed64Value, appendFixed64Value + case "varint": + if pointer { + return sizeVarint64Ptr, appendVarint64Ptr + } + if slice { + if packed { + return sizeVarint64PackedSlice, appendVarint64PackedSlice + } + return sizeVarint64Slice, appendVarint64Slice + } + if nozero { + return sizeVarint64ValueNoZero, appendVarint64ValueNoZero + } + return sizeVarint64Value, appendVarint64Value + } + case reflect.Int64: + switch encoding { + case "fixed64": + if pointer { + return sizeFixedS64Ptr, appendFixedS64Ptr + } + if slice { + if packed { + return sizeFixedS64PackedSlice, appendFixedS64PackedSlice + } + return sizeFixedS64Slice, appendFixedS64Slice + } + if nozero { + return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero + } + return sizeFixedS64Value, appendFixedS64Value + case "varint": + if pointer { + return sizeVarintS64Ptr, appendVarintS64Ptr + } + if slice { + if packed { + return sizeVarintS64PackedSlice, appendVarintS64PackedSlice + } + return sizeVarintS64Slice, appendVarintS64Slice + } + if nozero { + return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero + } + return sizeVarintS64Value, appendVarintS64Value + case "zigzag64": + if pointer { + return sizeZigzag64Ptr, appendZigzag64Ptr + } + if slice { + if packed { + return sizeZigzag64PackedSlice, appendZigzag64PackedSlice + } + return sizeZigzag64Slice, appendZigzag64Slice + } + if nozero { + return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero + } + return sizeZigzag64Value, appendZigzag64Value + } + case reflect.Float32: + if pointer { + return sizeFloat32Ptr, appendFloat32Ptr + } + if slice { + if packed { + return sizeFloat32PackedSlice, appendFloat32PackedSlice + } + return sizeFloat32Slice, appendFloat32Slice + } + if nozero { + return sizeFloat32ValueNoZero, appendFloat32ValueNoZero + } + return sizeFloat32Value, appendFloat32Value + case reflect.Float64: + if pointer { + return sizeFloat64Ptr, appendFloat64Ptr + } + if slice { + if packed { + return sizeFloat64PackedSlice, appendFloat64PackedSlice + } + return sizeFloat64Slice, appendFloat64Slice + } + if nozero { + return sizeFloat64ValueNoZero, appendFloat64ValueNoZero + } + return sizeFloat64Value, appendFloat64Value + case reflect.String: + if validateUTF8 { + if pointer { + return sizeStringPtr, appendUTF8StringPtr + } + if slice { + return sizeStringSlice, appendUTF8StringSlice + } + if nozero { + return sizeStringValueNoZero, appendUTF8StringValueNoZero + } + return sizeStringValue, appendUTF8StringValue + } + if pointer { + return sizeStringPtr, appendStringPtr + } + if slice { + return sizeStringSlice, appendStringSlice + } + if nozero { + return sizeStringValueNoZero, appendStringValueNoZero + } + return sizeStringValue, appendStringValue + case reflect.Slice: + if slice { + return sizeBytesSlice, appendBytesSlice + } + if oneof { + // Oneof bytes field may also have "proto3" tag. + // We want to marshal it as a oneof field. Do this + // check before the proto3 check. + return sizeBytesOneof, appendBytesOneof + } + if proto3 { + return sizeBytes3, appendBytes3 + } + return sizeBytes, appendBytes + case reflect.Struct: + switch encoding { + case "group": + if slice { + return makeGroupSliceMarshaler(getMarshalInfo(t)) + } + return makeGroupMarshaler(getMarshalInfo(t)) + case "bytes": + if slice { + return makeMessageSliceMarshaler(getMarshalInfo(t)) + } + return makeMessageMarshaler(getMarshalInfo(t)) + } + } + panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding)) +} + +// Below are functions to size/marshal a specific type of a field. +// They are stored in the field's info, and called by function pointers. +// They have type sizer or marshaler. + +func sizeFixed32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFixed32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFixed32Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + return (4 + tagsize) * len(s) +} +func sizeFixed32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFixedS32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFixedS32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFixedS32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + return (4 + tagsize) * len(s) +} +func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFloat32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int { + v := math.Float32bits(*ptr.toFloat32()) + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFloat32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toFloat32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFloat32Slice(ptr pointer, tagsize int) int { + s := *ptr.toFloat32Slice() + return (4 + tagsize) * len(s) +} +func sizeFloat32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toFloat32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFixed64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFixed64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFixed64Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + return (8 + tagsize) * len(s) +} +func sizeFixed64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeFixedS64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFixedS64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFixedS64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + return (8 + tagsize) * len(s) +} +func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeFloat64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int { + v := math.Float64bits(*ptr.toFloat64()) + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFloat64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toFloat64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFloat64Slice(ptr pointer, tagsize int) int { + s := *ptr.toFloat64Slice() + return (8 + tagsize) * len(s) +} +func sizeFloat64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toFloat64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeVarint32Value(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarint32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint32Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarint32Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarint32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarintS32Value(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarintS32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarint64Value(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + return SizeVarint(v) + tagsize +} +func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + if v == 0 { + return 0 + } + return SizeVarint(v) + tagsize +} +func sizeVarint64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint64Ptr() + if p == nil { + return 0 + } + return SizeVarint(*p) + tagsize +} +func sizeVarint64Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(v) + tagsize + } + return n +} +func sizeVarint64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(v) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarintS64Value(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarintS64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeZigzag32Value(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + v := *p + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize + } + return n +} +func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeZigzag64Value(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + v := *p + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize + } + return n +} +func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeBoolValue(_ pointer, tagsize int) int { + return 1 + tagsize +} +func sizeBoolValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toBool() + if !v { + return 0 + } + return 1 + tagsize +} +func sizeBoolPtr(ptr pointer, tagsize int) int { + p := *ptr.toBoolPtr() + if p == nil { + return 0 + } + return 1 + tagsize +} +func sizeBoolSlice(ptr pointer, tagsize int) int { + s := *ptr.toBoolSlice() + return (1 + tagsize) * len(s) +} +func sizeBoolPackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toBoolSlice() + if len(s) == 0 { + return 0 + } + return len(s) + SizeVarint(uint64(len(s))) + tagsize +} +func sizeStringValue(ptr pointer, tagsize int) int { + v := *ptr.toString() + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toString() + if v == "" { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringPtr(ptr pointer, tagsize int) int { + p := *ptr.toStringPtr() + if p == nil { + return 0 + } + v := *p + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringSlice(ptr pointer, tagsize int) int { + s := *ptr.toStringSlice() + n := 0 + for _, v := range s { + n += len(v) + SizeVarint(uint64(len(v))) + tagsize + } + return n +} +func sizeBytes(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + if v == nil { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytes3(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + if len(v) == 0 { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytesOneof(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytesSlice(ptr pointer, tagsize int) int { + s := *ptr.toBytesSlice() + n := 0 + for _, v := range s { + n += len(v) + SizeVarint(uint64(len(v))) + tagsize + } + return n +} + +// appendFixed32 appends an encoded fixed32 to b. +func appendFixed32(b []byte, v uint32) []byte { + b = append(b, + byte(v), + byte(v>>8), + byte(v>>16), + byte(v>>24)) + return b +} + +// appendFixed64 appends an encoded fixed64 to b. +func appendFixed64(b []byte, v uint64) []byte { + b = append(b, + byte(v), + byte(v>>8), + byte(v>>16), + byte(v>>24), + byte(v>>32), + byte(v>>40), + byte(v>>48), + byte(v>>56)) + return b +} + +// appendVarint appends an encoded varint to b. +func appendVarint(b []byte, v uint64) []byte { + // TODO: make 1-byte (maybe 2-byte) case inline-able, once we + // have non-leaf inliner. + switch { + case v < 1<<7: + b = append(b, byte(v)) + case v < 1<<14: + b = append(b, + byte(v&0x7f|0x80), + byte(v>>7)) + case v < 1<<21: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte(v>>14)) + case v < 1<<28: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte(v>>21)) + case v < 1<<35: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte(v>>28)) + case v < 1<<42: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte(v>>35)) + case v < 1<<49: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte(v>>42)) + case v < 1<<56: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte(v>>49)) + case v < 1<<63: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte(v>>56)) + default: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte((v>>56)&0x7f|0x80), + 1) + } + return b +} + +func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, *p) + return b, nil +} +func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + } + return b, nil +} +func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, v) + } + return b, nil +} +func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + return b, nil +} +func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + return b, nil +} +func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(*p)) + return b, nil +} +func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + } + return b, nil +} +func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, uint32(v)) + } + return b, nil +} +func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float32bits(*ptr.toFloat32()) + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float32bits(*ptr.toFloat32()) + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toFloat32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, math.Float32bits(*p)) + return b, nil +} +func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, math.Float32bits(v)) + } + return b, nil +} +func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, math.Float32bits(v)) + } + return b, nil +} +func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, *p) + return b, nil +} +func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + } + return b, nil +} +func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, v) + } + return b, nil +} +func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + return b, nil +} +func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + return b, nil +} +func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(*p)) + return b, nil +} +func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + } + return b, nil +} +func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, uint64(v)) + } + return b, nil +} +func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float64bits(*ptr.toFloat64()) + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float64bits(*ptr.toFloat64()) + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toFloat64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, math.Float64bits(*p)) + return b, nil +} +func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, math.Float64bits(v)) + } + return b, nil +} +func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, math.Float64bits(v)) + } + return b, nil +} +func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + return b, nil +} +func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + return b, nil +} +func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, *p) + return b, nil +} +func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + } + return b, nil +} +func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(v) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, v) + } + return b, nil +} +func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + v := *p + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + } + return b, nil +} +func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + } + return b, nil +} +func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + v := *p + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + } + return b, nil +} +func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + } + return b, nil +} +func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBool() + b = appendVarint(b, wiretag) + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + return b, nil +} +func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBool() + if !v { + return b, nil + } + b = appendVarint(b, wiretag) + b = append(b, 1) + return b, nil +} + +func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toBoolPtr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + if *p { + b = append(b, 1) + } else { + b = append(b, 0) + } + return b, nil +} +func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBoolSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + } + return b, nil +} +func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBoolSlice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(len(s))) + for _, v := range s { + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + } + return b, nil +} +func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toString() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toString() + if v == "" { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toStringPtr() + if p == nil { + return b, nil + } + v := *p + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toStringSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + return b, nil +} +func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + v := *ptr.toString() + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + v := *ptr.toString() + if v == "" { + return b, nil + } + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + p := *ptr.toStringPtr() + if p == nil { + return b, nil + } + v := *p + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + s := *ptr.toStringSlice() + for _, v := range s { + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + if v == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + if len(v) == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBytesSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + return b, nil +} + +// makeGroupMarshaler returns the sizer and marshaler for a group. +// u is the marshal info of the underlying message. +func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + p := ptr.getPointer() + if p.isNil() { + return 0 + } + return u.size(p) + 2*tagsize + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + p := ptr.getPointer() + if p.isNil() { + return b, nil + } + var err error + b = appendVarint(b, wiretag) // start group + b, err = u.marshal(b, p, deterministic) + b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group + return b, err + } +} + +// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice. +// u is the marshal info of the underlying message. +func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getPointerSlice() + n := 0 + for _, v := range s { + if v.isNil() { + continue + } + n += u.size(v) + 2*tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getPointerSlice() + var err error + var nerr nonFatal + for _, v := range s { + if v.isNil() { + return b, errRepeatedHasNil + } + b = appendVarint(b, wiretag) // start group + b, err = u.marshal(b, v, deterministic) + b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group + if !nerr.Merge(err) { + if err == ErrNil { + err = errRepeatedHasNil + } + return b, err + } + } + return b, nerr.E + } +} + +// makeMessageMarshaler returns the sizer and marshaler for a message field. +// u is the marshal info of the message. +func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + p := ptr.getPointer() + if p.isNil() { + return 0 + } + siz := u.size(p) + return siz + SizeVarint(uint64(siz)) + tagsize + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + p := ptr.getPointer() + if p.isNil() { + return b, nil + } + b = appendVarint(b, wiretag) + siz := u.cachedsize(p) + b = appendVarint(b, uint64(siz)) + return u.marshal(b, p, deterministic) + } +} + +// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice. +// u is the marshal info of the message. +func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getPointerSlice() + n := 0 + for _, v := range s { + if v.isNil() { + continue + } + siz := u.size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getPointerSlice() + var err error + var nerr nonFatal + for _, v := range s { + if v.isNil() { + return b, errRepeatedHasNil + } + b = appendVarint(b, wiretag) + siz := u.cachedsize(v) + b = appendVarint(b, uint64(siz)) + b, err = u.marshal(b, v, deterministic) + + if !nerr.Merge(err) { + if err == ErrNil { + err = errRepeatedHasNil + } + return b, err + } + } + return b, nerr.E + } +} + +// makeMapMarshaler returns the sizer and marshaler for a map field. +// f is the pointer to the reflect data structure of the field. +func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) { + // figure out key and value type + t := f.Type + keyType := t.Key() + valType := t.Elem() + keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",") + valTags := strings.Split(f.Tag.Get("protobuf_val"), ",") + keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map + valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map + keyWireTag := 1<<3 | wiretype(keyTags[0]) + valWireTag := 2<<3 | wiretype(valTags[0]) + + // We create an interface to get the addresses of the map key and value. + // If value is pointer-typed, the interface is a direct interface, the + // idata itself is the value. Otherwise, the idata is the pointer to the + // value. + // Key cannot be pointer-typed. + valIsPtr := valType.Kind() == reflect.Ptr + + // If value is a message with nested maps, calling + // valSizer in marshal may be quadratic. We should use + // cached version in marshal (but not in size). + // If value is not message type, we don't have size cache, + // but it cannot be nested either. Just use valSizer. + valCachedSizer := valSizer + if valIsPtr && valType.Elem().Kind() == reflect.Struct { + u := getMarshalInfo(valType.Elem()) + valCachedSizer = func(ptr pointer, tagsize int) int { + // Same as message sizer, but use cache. + p := ptr.getPointer() + if p.isNil() { + return 0 + } + siz := u.cachedsize(p) + return siz + SizeVarint(uint64(siz)) + tagsize + } + } + return func(ptr pointer, tagsize int) int { + m := ptr.asPointerTo(t).Elem() // the map + n := 0 + for _, k := range m.MapKeys() { + ki := k.Interface() + vi := m.MapIndex(k).Interface() + kaddr := toAddrPointer(&ki, false, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value + siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) { + m := ptr.asPointerTo(t).Elem() // the map + var err error + keys := m.MapKeys() + if len(keys) > 1 && deterministic { + sort.Sort(mapKeys(keys)) + } + + var nerr nonFatal + for _, k := range keys { + ki := k.Interface() + vi := m.MapIndex(k).Interface() + kaddr := toAddrPointer(&ki, false, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value + b = appendVarint(b, tag) + siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) + b = appendVarint(b, uint64(siz)) + b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic) + if !nerr.Merge(err) { + return b, err + } + b, err = valMarshaler(b, vaddr, valWireTag, deterministic) + if err != ErrNil && !nerr.Merge(err) { // allow nil value in map + return b, err + } + } + return b, nerr.E + } +} + +// makeOneOfMarshaler returns the sizer and marshaler for a oneof field. +// fi is the marshal info of the field. +// f is the pointer to the reflect data structure of the field. +func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) { + // Oneof field is an interface. We need to get the actual data type on the fly. + t := f.Type + return func(ptr pointer, _ int) int { + p := ptr.getInterfacePointer() + if p.isNil() { + return 0 + } + v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct + telem := v.Type() + e := fi.oneofElems[telem] + return e.sizer(p, e.tagsize) + }, + func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) { + p := ptr.getInterfacePointer() + if p.isNil() { + return b, nil + } + v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct + telem := v.Type() + if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() { + return b, errOneofHasNil + } + e := fi.oneofElems[telem] + return e.marshaler(b, p, e.wiretag, deterministic) + } +} + +// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field. +func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int { + m, mu := ext.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + + n := 0 + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + n += ei.sizer(p, ei.tagsize) + } + mu.Unlock() + return n +} + +// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b. +func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { + m, mu := ext.extensionsRead() + if m == nil { + return b, nil + } + mu.Lock() + defer mu.Unlock() + + var err error + var nerr nonFatal + + // Fast-path for common cases: zero or one extensions. + // Don't bother sorting the keys. + if len(m) <= 1 { + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E + } + + // Sort the keys to provide a deterministic encoding. + // Not sure this is required, but the old code does it. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, k := range keys { + e := m[int32(k)] + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// message set format is: +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// }; +// } + +// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field +// in message set format (above). +func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int { + m, mu := ext.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + + n := 0 + for id, e := range m { + n += 2 // start group, end group. tag = 1 (size=1) + n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + siz := len(msgWithLen) + n += siz + 1 // message, tag = 3 (size=1) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + n += ei.sizer(p, 1) // message, tag = 3 (size=1) + } + mu.Unlock() + return n +} + +// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above) +// to the end of byte slice b. +func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { + m, mu := ext.extensionsRead() + if m == nil { + return b, nil + } + mu.Lock() + defer mu.Unlock() + + var err error + var nerr nonFatal + + // Fast-path for common cases: zero or one extensions. + // Don't bother sorting the keys. + if len(m) <= 1 { + for id, e := range m { + b = append(b, 1<<3|WireStartGroup) + b = append(b, 2<<3|WireVarint) + b = appendVarint(b, uint64(id)) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + b = append(b, 3<<3|WireBytes) + b = append(b, msgWithLen...) + b = append(b, 1<<3|WireEndGroup) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) + if !nerr.Merge(err) { + return b, err + } + b = append(b, 1<<3|WireEndGroup) + } + return b, nerr.E + } + + // Sort the keys to provide a deterministic encoding. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, id := range keys { + e := m[int32(id)] + b = append(b, 1<<3|WireStartGroup) + b = append(b, 2<<3|WireVarint) + b = appendVarint(b, uint64(id)) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + b = append(b, 3<<3|WireBytes) + b = append(b, msgWithLen...) + b = append(b, 1<<3|WireEndGroup) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) + b = append(b, 1<<3|WireEndGroup) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// sizeV1Extensions computes the size of encoded data for a V1-API extension field. +func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int { + if m == nil { + return 0 + } + + n := 0 + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + n += ei.sizer(p, ei.tagsize) + } + return n +} + +// appendV1Extensions marshals a V1-API extension field to the end of byte slice b. +func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) { + if m == nil { + return b, nil + } + + // Sort the keys to provide a deterministic encoding. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + var err error + var nerr nonFatal + for _, k := range keys { + e := m[int32(k)] + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// newMarshaler is the interface representing objects that can marshal themselves. +// +// This exists to support protoc-gen-go generated messages. +// The proto package will stop type-asserting to this interface in the future. +// +// DO NOT DEPEND ON THIS. +type newMarshaler interface { + XXX_Size() int + XXX_Marshal(b []byte, deterministic bool) ([]byte, error) +} + +// Size returns the encoded size of a protocol buffer message. +// This is the main entry point. +func Size(pb Message) int { + if m, ok := pb.(newMarshaler); ok { + return m.XXX_Size() + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + b, _ := m.Marshal() + return len(b) + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return 0 + } + var info InternalMessageInfo + return info.Size(pb) +} + +// Marshal takes a protocol buffer message +// and encodes it into the wire format, returning the data. +// This is the main entry point. +func Marshal(pb Message) ([]byte, error) { + if m, ok := pb.(newMarshaler); ok { + siz := m.XXX_Size() + b := make([]byte, 0, siz) + return m.XXX_Marshal(b, false) + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + return m.Marshal() + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return nil, ErrNil + } + var info InternalMessageInfo + siz := info.Size(pb) + b := make([]byte, 0, siz) + return info.Marshal(b, pb, false) +} + +// Marshal takes a protocol buffer message +// and encodes it into the wire format, writing the result to the +// Buffer. +// This is an alternative entry point. It is not necessary to use +// a Buffer for most applications. +func (p *Buffer) Marshal(pb Message) error { + var err error + if m, ok := pb.(newMarshaler); ok { + siz := m.XXX_Size() + p.grow(siz) // make sure buf has enough capacity + p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) + return err + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + b, err := m.Marshal() + p.buf = append(p.buf, b...) + return err + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return ErrNil + } + var info InternalMessageInfo + siz := info.Size(pb) + p.grow(siz) // make sure buf has enough capacity + p.buf, err = info.Marshal(p.buf, pb, p.deterministic) + return err +} + +// grow grows the buffer's capacity, if necessary, to guarantee space for +// another n bytes. After grow(n), at least n bytes can be written to the +// buffer without another allocation. +func (p *Buffer) grow(n int) { + need := len(p.buf) + n + if need <= cap(p.buf) { + return + } + newCap := len(p.buf) * 2 + if newCap < need { + newCap = need + } + p.buf = append(make([]byte, 0, newCap), p.buf...) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_merge.go new file mode 100644 index 00000000000..5525def6a5d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_merge.go @@ -0,0 +1,654 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" + "sync" + "sync/atomic" +) + +// Merge merges the src message into dst. +// This assumes that dst and src of the same type and are non-nil. +func (a *InternalMessageInfo) Merge(dst, src Message) { + mi := atomicLoadMergeInfo(&a.merge) + if mi == nil { + mi = getMergeInfo(reflect.TypeOf(dst).Elem()) + atomicStoreMergeInfo(&a.merge, mi) + } + mi.merge(toPointer(&dst), toPointer(&src)) +} + +type mergeInfo struct { + typ reflect.Type + + initialized int32 // 0: only typ is valid, 1: everything is valid + lock sync.Mutex + + fields []mergeFieldInfo + unrecognized field // Offset of XXX_unrecognized +} + +type mergeFieldInfo struct { + field field // Offset of field, guaranteed to be valid + + // isPointer reports whether the value in the field is a pointer. + // This is true for the following situations: + // * Pointer to struct + // * Pointer to basic type (proto2 only) + // * Slice (first value in slice header is a pointer) + // * String (first value in string header is a pointer) + isPointer bool + + // basicWidth reports the width of the field assuming that it is directly + // embedded in the struct (as is the case for basic types in proto3). + // The possible values are: + // 0: invalid + // 1: bool + // 4: int32, uint32, float32 + // 8: int64, uint64, float64 + basicWidth int + + // Where dst and src are pointers to the types being merged. + merge func(dst, src pointer) +} + +var ( + mergeInfoMap = map[reflect.Type]*mergeInfo{} + mergeInfoLock sync.Mutex +) + +func getMergeInfo(t reflect.Type) *mergeInfo { + mergeInfoLock.Lock() + defer mergeInfoLock.Unlock() + mi := mergeInfoMap[t] + if mi == nil { + mi = &mergeInfo{typ: t} + mergeInfoMap[t] = mi + } + return mi +} + +// merge merges src into dst assuming they are both of type *mi.typ. +func (mi *mergeInfo) merge(dst, src pointer) { + if dst.isNil() { + panic("proto: nil destination") + } + if src.isNil() { + return // Nothing to do. + } + + if atomic.LoadInt32(&mi.initialized) == 0 { + mi.computeMergeInfo() + } + + for _, fi := range mi.fields { + sfp := src.offset(fi.field) + + // As an optimization, we can avoid the merge function call cost + // if we know for sure that the source will have no effect + // by checking if it is the zero value. + if unsafeAllowed { + if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string + continue + } + if fi.basicWidth > 0 { + switch { + case fi.basicWidth == 1 && !*sfp.toBool(): + continue + case fi.basicWidth == 4 && *sfp.toUint32() == 0: + continue + case fi.basicWidth == 8 && *sfp.toUint64() == 0: + continue + } + } + } + + dfp := dst.offset(fi.field) + fi.merge(dfp, sfp) + } + + // TODO: Make this faster? + out := dst.asPointerTo(mi.typ).Elem() + in := src.asPointerTo(mi.typ).Elem() + if emIn, err := extendable(in.Addr().Interface()); err == nil { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } + } + + if mi.unrecognized.IsValid() { + if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { + *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) + } + } +} + +func (mi *mergeInfo) computeMergeInfo() { + mi.lock.Lock() + defer mi.lock.Unlock() + if mi.initialized != 0 { + return + } + t := mi.typ + n := t.NumField() + + props := GetProperties(t) + for i := 0; i < n; i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + + mfi := mergeFieldInfo{field: toField(&f)} + tf := f.Type + + // As an optimization, we can avoid the merge function call cost + // if we know for sure that the source will have no effect + // by checking if it is the zero value. + if unsafeAllowed { + switch tf.Kind() { + case reflect.Ptr, reflect.Slice, reflect.String: + // As a special case, we assume slices and strings are pointers + // since we know that the first field in the SliceSlice or + // StringHeader is a data pointer. + mfi.isPointer = true + case reflect.Bool: + mfi.basicWidth = 1 + case reflect.Int32, reflect.Uint32, reflect.Float32: + mfi.basicWidth = 4 + case reflect.Int64, reflect.Uint64, reflect.Float64: + mfi.basicWidth = 8 + } + } + + // Unwrap tf to get at its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic("both pointer and slice for basic type in " + tf.Name()) + } + + switch tf.Kind() { + case reflect.Int32: + switch { + case isSlice: // E.g., []int32 + mfi.merge = func(dst, src pointer) { + // NOTE: toInt32Slice is not defined (see pointer_reflect.go). + /* + sfsp := src.toInt32Slice() + if *sfsp != nil { + dfsp := dst.toInt32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []int64{} + } + } + */ + sfs := src.getInt32Slice() + if sfs != nil { + dfs := dst.getInt32Slice() + dfs = append(dfs, sfs...) + if dfs == nil { + dfs = []int32{} + } + dst.setInt32Slice(dfs) + } + } + case isPointer: // E.g., *int32 + mfi.merge = func(dst, src pointer) { + // NOTE: toInt32Ptr is not defined (see pointer_reflect.go). + /* + sfpp := src.toInt32Ptr() + if *sfpp != nil { + dfpp := dst.toInt32Ptr() + if *dfpp == nil { + *dfpp = Int32(**sfpp) + } else { + **dfpp = **sfpp + } + } + */ + sfp := src.getInt32Ptr() + if sfp != nil { + dfp := dst.getInt32Ptr() + if dfp == nil { + dst.setInt32Ptr(*sfp) + } else { + *dfp = *sfp + } + } + } + default: // E.g., int32 + mfi.merge = func(dst, src pointer) { + if v := *src.toInt32(); v != 0 { + *dst.toInt32() = v + } + } + } + case reflect.Int64: + switch { + case isSlice: // E.g., []int64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toInt64Slice() + if *sfsp != nil { + dfsp := dst.toInt64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []int64{} + } + } + } + case isPointer: // E.g., *int64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toInt64Ptr() + if *sfpp != nil { + dfpp := dst.toInt64Ptr() + if *dfpp == nil { + *dfpp = Int64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., int64 + mfi.merge = func(dst, src pointer) { + if v := *src.toInt64(); v != 0 { + *dst.toInt64() = v + } + } + } + case reflect.Uint32: + switch { + case isSlice: // E.g., []uint32 + mfi.merge = func(dst, src pointer) { + sfsp := src.toUint32Slice() + if *sfsp != nil { + dfsp := dst.toUint32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []uint32{} + } + } + } + case isPointer: // E.g., *uint32 + mfi.merge = func(dst, src pointer) { + sfpp := src.toUint32Ptr() + if *sfpp != nil { + dfpp := dst.toUint32Ptr() + if *dfpp == nil { + *dfpp = Uint32(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., uint32 + mfi.merge = func(dst, src pointer) { + if v := *src.toUint32(); v != 0 { + *dst.toUint32() = v + } + } + } + case reflect.Uint64: + switch { + case isSlice: // E.g., []uint64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toUint64Slice() + if *sfsp != nil { + dfsp := dst.toUint64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []uint64{} + } + } + } + case isPointer: // E.g., *uint64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toUint64Ptr() + if *sfpp != nil { + dfpp := dst.toUint64Ptr() + if *dfpp == nil { + *dfpp = Uint64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., uint64 + mfi.merge = func(dst, src pointer) { + if v := *src.toUint64(); v != 0 { + *dst.toUint64() = v + } + } + } + case reflect.Float32: + switch { + case isSlice: // E.g., []float32 + mfi.merge = func(dst, src pointer) { + sfsp := src.toFloat32Slice() + if *sfsp != nil { + dfsp := dst.toFloat32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []float32{} + } + } + } + case isPointer: // E.g., *float32 + mfi.merge = func(dst, src pointer) { + sfpp := src.toFloat32Ptr() + if *sfpp != nil { + dfpp := dst.toFloat32Ptr() + if *dfpp == nil { + *dfpp = Float32(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., float32 + mfi.merge = func(dst, src pointer) { + if v := *src.toFloat32(); v != 0 { + *dst.toFloat32() = v + } + } + } + case reflect.Float64: + switch { + case isSlice: // E.g., []float64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toFloat64Slice() + if *sfsp != nil { + dfsp := dst.toFloat64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []float64{} + } + } + } + case isPointer: // E.g., *float64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toFloat64Ptr() + if *sfpp != nil { + dfpp := dst.toFloat64Ptr() + if *dfpp == nil { + *dfpp = Float64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., float64 + mfi.merge = func(dst, src pointer) { + if v := *src.toFloat64(); v != 0 { + *dst.toFloat64() = v + } + } + } + case reflect.Bool: + switch { + case isSlice: // E.g., []bool + mfi.merge = func(dst, src pointer) { + sfsp := src.toBoolSlice() + if *sfsp != nil { + dfsp := dst.toBoolSlice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []bool{} + } + } + } + case isPointer: // E.g., *bool + mfi.merge = func(dst, src pointer) { + sfpp := src.toBoolPtr() + if *sfpp != nil { + dfpp := dst.toBoolPtr() + if *dfpp == nil { + *dfpp = Bool(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., bool + mfi.merge = func(dst, src pointer) { + if v := *src.toBool(); v { + *dst.toBool() = v + } + } + } + case reflect.String: + switch { + case isSlice: // E.g., []string + mfi.merge = func(dst, src pointer) { + sfsp := src.toStringSlice() + if *sfsp != nil { + dfsp := dst.toStringSlice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []string{} + } + } + } + case isPointer: // E.g., *string + mfi.merge = func(dst, src pointer) { + sfpp := src.toStringPtr() + if *sfpp != nil { + dfpp := dst.toStringPtr() + if *dfpp == nil { + *dfpp = String(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., string + mfi.merge = func(dst, src pointer) { + if v := *src.toString(); v != "" { + *dst.toString() = v + } + } + } + case reflect.Slice: + isProto3 := props.Prop[i].proto3 + switch { + case isPointer: + panic("bad pointer in byte slice case in " + tf.Name()) + case tf.Elem().Kind() != reflect.Uint8: + panic("bad element kind in byte slice case in " + tf.Name()) + case isSlice: // E.g., [][]byte + mfi.merge = func(dst, src pointer) { + sbsp := src.toBytesSlice() + if *sbsp != nil { + dbsp := dst.toBytesSlice() + for _, sb := range *sbsp { + if sb == nil { + *dbsp = append(*dbsp, nil) + } else { + *dbsp = append(*dbsp, append([]byte{}, sb...)) + } + } + if *dbsp == nil { + *dbsp = [][]byte{} + } + } + } + default: // E.g., []byte + mfi.merge = func(dst, src pointer) { + sbp := src.toBytes() + if *sbp != nil { + dbp := dst.toBytes() + if !isProto3 || len(*sbp) > 0 { + *dbp = append([]byte{}, *sbp...) + } + } + } + } + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("message field %s without pointer", tf)) + case isSlice: // E.g., []*pb.T + mi := getMergeInfo(tf) + mfi.merge = func(dst, src pointer) { + sps := src.getPointerSlice() + if sps != nil { + dps := dst.getPointerSlice() + for _, sp := range sps { + var dp pointer + if !sp.isNil() { + dp = valToPointer(reflect.New(tf)) + mi.merge(dp, sp) + } + dps = append(dps, dp) + } + if dps == nil { + dps = []pointer{} + } + dst.setPointerSlice(dps) + } + } + default: // E.g., *pb.T + mi := getMergeInfo(tf) + mfi.merge = func(dst, src pointer) { + sp := src.getPointer() + if !sp.isNil() { + dp := dst.getPointer() + if dp.isNil() { + dp = valToPointer(reflect.New(tf)) + dst.setPointer(dp) + } + mi.merge(dp, sp) + } + } + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic("bad pointer or slice in map case in " + tf.Name()) + default: // E.g., map[K]V + mfi.merge = func(dst, src pointer) { + sm := src.asPointerTo(tf).Elem() + if sm.Len() == 0 { + return + } + dm := dst.asPointerTo(tf).Elem() + if dm.IsNil() { + dm.Set(reflect.MakeMap(tf)) + } + + switch tf.Elem().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + val = reflect.ValueOf(Clone(val.Interface().(Message))) + dm.SetMapIndex(key, val) + } + case reflect.Slice: // E.g. Bytes type (e.g., []byte) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) + dm.SetMapIndex(key, val) + } + default: // Basic type (e.g., string) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + dm.SetMapIndex(key, val) + } + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic("bad pointer or slice in interface case in " + tf.Name()) + default: // E.g., interface{} + // TODO: Make this faster? + mfi.merge = func(dst, src pointer) { + su := src.asPointerTo(tf).Elem() + if !su.IsNil() { + du := dst.asPointerTo(tf).Elem() + typ := su.Elem().Type() + if du.IsNil() || du.Elem().Type() != typ { + du.Set(reflect.New(typ.Elem())) // Initialize interface if empty + } + sv := su.Elem().Elem().Field(0) + if sv.Kind() == reflect.Ptr && sv.IsNil() { + return + } + dv := du.Elem().Elem().Field(0) + if dv.Kind() == reflect.Ptr && dv.IsNil() { + dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty + } + switch sv.Type().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + Merge(dv.Interface().(Message), sv.Interface().(Message)) + case reflect.Slice: // E.g. Bytes type (e.g., []byte) + dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) + default: // Basic type (e.g., string) + dv.Set(sv) + } + } + } + } + default: + panic(fmt.Sprintf("merger not found for type:%s", tf)) + } + mi.fields = append(mi.fields, mfi) + } + + mi.unrecognized = invalidField + if f, ok := t.FieldByName("XXX_unrecognized"); ok { + if f.Type != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + mi.unrecognized = toField(&f) + } + + atomic.StoreInt32(&mi.initialized, 1) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_unmarshal.go new file mode 100644 index 00000000000..acee2fc5296 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/table_unmarshal.go @@ -0,0 +1,2053 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "errors" + "fmt" + "io" + "math" + "reflect" + "strconv" + "strings" + "sync" + "sync/atomic" + "unicode/utf8" +) + +// Unmarshal is the entry point from the generated .pb.go files. +// This function is not intended to be used by non-generated code. +// This function is not subject to any compatibility guarantee. +// msg contains a pointer to a protocol buffer struct. +// b is the data to be unmarshaled into the protocol buffer. +// a is a pointer to a place to store cached unmarshal information. +func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error { + // Load the unmarshal information for this message type. + // The atomic load ensures memory consistency. + u := atomicLoadUnmarshalInfo(&a.unmarshal) + if u == nil { + // Slow path: find unmarshal info for msg, update a with it. + u = getUnmarshalInfo(reflect.TypeOf(msg).Elem()) + atomicStoreUnmarshalInfo(&a.unmarshal, u) + } + // Then do the unmarshaling. + err := u.unmarshal(toPointer(&msg), b) + return err +} + +type unmarshalInfo struct { + typ reflect.Type // type of the protobuf struct + + // 0 = only typ field is initialized + // 1 = completely initialized + initialized int32 + lock sync.Mutex // prevents double initialization + dense []unmarshalFieldInfo // fields indexed by tag # + sparse map[uint64]unmarshalFieldInfo // fields indexed by tag # + reqFields []string // names of required fields + reqMask uint64 // 1< 0 { + // Read tag and wire type. + // Special case 1 and 2 byte varints. + var x uint64 + if b[0] < 128 { + x = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + x = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + x, n = decodeVarint(b) + if n == 0 { + return io.ErrUnexpectedEOF + } + b = b[n:] + } + tag := x >> 3 + wire := int(x) & 7 + + // Dispatch on the tag to one of the unmarshal* functions below. + var f unmarshalFieldInfo + if tag < uint64(len(u.dense)) { + f = u.dense[tag] + } else { + f = u.sparse[tag] + } + if fn := f.unmarshal; fn != nil { + var err error + b, err = fn(b, m.offset(f.field), wire) + if err == nil { + reqMask |= f.reqMask + continue + } + if r, ok := err.(*RequiredNotSetError); ok { + // Remember this error, but keep parsing. We need to produce + // a full parse even if a required field is missing. + if errLater == nil { + errLater = r + } + reqMask |= f.reqMask + continue + } + if err != errInternalBadWireType { + if err == errInvalidUTF8 { + if errLater == nil { + fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name + errLater = &invalidUTF8Error{fullName} + } + continue + } + return err + } + // Fragments with bad wire type are treated as unknown fields. + } + + // Unknown tag. + if !u.unrecognized.IsValid() { + // Don't keep unrecognized data; just skip it. + var err error + b, err = skipField(b, wire) + if err != nil { + return err + } + continue + } + // Keep unrecognized data around. + // maybe in extensions, maybe in the unrecognized field. + z := m.offset(u.unrecognized).toBytes() + var emap map[int32]Extension + var e Extension + for _, r := range u.extensionRanges { + if uint64(r.Start) <= tag && tag <= uint64(r.End) { + if u.extensions.IsValid() { + mp := m.offset(u.extensions).toExtensions() + emap = mp.extensionsWrite() + e = emap[int32(tag)] + z = &e.enc + break + } + if u.oldExtensions.IsValid() { + p := m.offset(u.oldExtensions).toOldExtensions() + emap = *p + if emap == nil { + emap = map[int32]Extension{} + *p = emap + } + e = emap[int32(tag)] + z = &e.enc + break + } + panic("no extensions field available") + } + } + + // Use wire type to skip data. + var err error + b0 := b + b, err = skipField(b, wire) + if err != nil { + return err + } + *z = encodeVarint(*z, tag<<3|uint64(wire)) + *z = append(*z, b0[:len(b0)-len(b)]...) + + if emap != nil { + emap[int32(tag)] = e + } + } + if reqMask != u.reqMask && errLater == nil { + // A required field of this message is missing. + for _, n := range u.reqFields { + if reqMask&1 == 0 { + errLater = &RequiredNotSetError{n} + } + reqMask >>= 1 + } + } + return errLater +} + +// computeUnmarshalInfo fills in u with information for use +// in unmarshaling protocol buffers of type u.typ. +func (u *unmarshalInfo) computeUnmarshalInfo() { + u.lock.Lock() + defer u.lock.Unlock() + if u.initialized != 0 { + return + } + t := u.typ + n := t.NumField() + + // Set up the "not found" value for the unrecognized byte buffer. + // This is the default for proto3. + u.unrecognized = invalidField + u.extensions = invalidField + u.oldExtensions = invalidField + + // List of the generated type and offset for each oneof field. + type oneofField struct { + ityp reflect.Type // interface type of oneof field + field field // offset in containing message + } + var oneofFields []oneofField + + for i := 0; i < n; i++ { + f := t.Field(i) + if f.Name == "XXX_unrecognized" { + // The byte slice used to hold unrecognized input is special. + if f.Type != reflect.TypeOf(([]byte)(nil)) { + panic("bad type for XXX_unrecognized field: " + f.Type.Name()) + } + u.unrecognized = toField(&f) + continue + } + if f.Name == "XXX_InternalExtensions" { + // Ditto here. + if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) { + panic("bad type for XXX_InternalExtensions field: " + f.Type.Name()) + } + u.extensions = toField(&f) + if f.Tag.Get("protobuf_messageset") == "1" { + u.isMessageSet = true + } + continue + } + if f.Name == "XXX_extensions" { + // An older form of the extensions field. + if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) { + panic("bad type for XXX_extensions field: " + f.Type.Name()) + } + u.oldExtensions = toField(&f) + continue + } + if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" { + continue + } + + oneof := f.Tag.Get("protobuf_oneof") + if oneof != "" { + oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)}) + // The rest of oneof processing happens below. + continue + } + + tags := f.Tag.Get("protobuf") + tagArray := strings.Split(tags, ",") + if len(tagArray) < 2 { + panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags) + } + tag, err := strconv.Atoi(tagArray[1]) + if err != nil { + panic("protobuf tag field not an integer: " + tagArray[1]) + } + + name := "" + for _, tag := range tagArray[3:] { + if strings.HasPrefix(tag, "name=") { + name = tag[5:] + } + } + + // Extract unmarshaling function from the field (its type and tags). + unmarshal := fieldUnmarshaler(&f) + + // Required field? + var reqMask uint64 + if tagArray[2] == "req" { + bit := len(u.reqFields) + u.reqFields = append(u.reqFields, name) + reqMask = uint64(1) << uint(bit) + // TODO: if we have more than 64 required fields, we end up + // not verifying that all required fields are present. + // Fix this, perhaps using a count of required fields? + } + + // Store the info in the correct slot in the message. + u.setTag(tag, toField(&f), unmarshal, reqMask, name) + } + + // Find any types associated with oneof fields. + var oneofImplementers []interface{} + switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) { + case oneofFuncsIface: + _, _, _, oneofImplementers = m.XXX_OneofFuncs() + case oneofWrappersIface: + oneofImplementers = m.XXX_OneofWrappers() + } + for _, v := range oneofImplementers { + tptr := reflect.TypeOf(v) // *Msg_X + typ := tptr.Elem() // Msg_X + + f := typ.Field(0) // oneof implementers have one field + baseUnmarshal := fieldUnmarshaler(&f) + tags := strings.Split(f.Tag.Get("protobuf"), ",") + fieldNum, err := strconv.Atoi(tags[1]) + if err != nil { + panic("protobuf tag field not an integer: " + tags[1]) + } + var name string + for _, tag := range tags { + if strings.HasPrefix(tag, "name=") { + name = strings.TrimPrefix(tag, "name=") + break + } + } + + // Find the oneof field that this struct implements. + // Might take O(n^2) to process all of the oneofs, but who cares. + for _, of := range oneofFields { + if tptr.Implements(of.ityp) { + // We have found the corresponding interface for this struct. + // That lets us know where this struct should be stored + // when we encounter it during unmarshaling. + unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) + u.setTag(fieldNum, of.field, unmarshal, 0, name) + } + } + + } + + // Get extension ranges, if any. + fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray") + if fn.IsValid() { + if !u.extensions.IsValid() && !u.oldExtensions.IsValid() { + panic("a message with extensions, but no extensions field in " + t.Name()) + } + u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange) + } + + // Explicitly disallow tag 0. This will ensure we flag an error + // when decoding a buffer of all zeros. Without this code, we + // would decode and skip an all-zero buffer of even length. + // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. + u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { + return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) + }, 0, "") + + // Set mask for required field check. + u.reqMask = uint64(1)<= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? + for len(u.dense) <= tag { + u.dense = append(u.dense, unmarshalFieldInfo{}) + } + u.dense[tag] = i + return + } + if u.sparse == nil { + u.sparse = map[uint64]unmarshalFieldInfo{} + } + u.sparse[uint64(tag)] = i +} + +// fieldUnmarshaler returns an unmarshaler for the given field. +func fieldUnmarshaler(f *reflect.StructField) unmarshaler { + if f.Type.Kind() == reflect.Map { + return makeUnmarshalMap(f) + } + return typeUnmarshaler(f.Type, f.Tag.Get("protobuf")) +} + +// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair. +func typeUnmarshaler(t reflect.Type, tags string) unmarshaler { + tagArray := strings.Split(tags, ",") + encoding := tagArray[0] + name := "unknown" + proto3 := false + validateUTF8 := true + for _, tag := range tagArray[3:] { + if strings.HasPrefix(tag, "name=") { + name = tag[5:] + } + if tag == "proto3" { + proto3 = true + } + } + validateUTF8 = validateUTF8 && proto3 + + // Figure out packaging (pointer, slice, or both) + slice := false + pointer := false + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + slice = true + t = t.Elem() + } + if t.Kind() == reflect.Ptr { + pointer = true + t = t.Elem() + } + + // We'll never have both pointer and slice for basic types. + if pointer && slice && t.Kind() != reflect.Struct { + panic("both pointer and slice for basic type in " + t.Name()) + } + + switch t.Kind() { + case reflect.Bool: + if pointer { + return unmarshalBoolPtr + } + if slice { + return unmarshalBoolSlice + } + return unmarshalBoolValue + case reflect.Int32: + switch encoding { + case "fixed32": + if pointer { + return unmarshalFixedS32Ptr + } + if slice { + return unmarshalFixedS32Slice + } + return unmarshalFixedS32Value + case "varint": + // this could be int32 or enum + if pointer { + return unmarshalInt32Ptr + } + if slice { + return unmarshalInt32Slice + } + return unmarshalInt32Value + case "zigzag32": + if pointer { + return unmarshalSint32Ptr + } + if slice { + return unmarshalSint32Slice + } + return unmarshalSint32Value + } + case reflect.Int64: + switch encoding { + case "fixed64": + if pointer { + return unmarshalFixedS64Ptr + } + if slice { + return unmarshalFixedS64Slice + } + return unmarshalFixedS64Value + case "varint": + if pointer { + return unmarshalInt64Ptr + } + if slice { + return unmarshalInt64Slice + } + return unmarshalInt64Value + case "zigzag64": + if pointer { + return unmarshalSint64Ptr + } + if slice { + return unmarshalSint64Slice + } + return unmarshalSint64Value + } + case reflect.Uint32: + switch encoding { + case "fixed32": + if pointer { + return unmarshalFixed32Ptr + } + if slice { + return unmarshalFixed32Slice + } + return unmarshalFixed32Value + case "varint": + if pointer { + return unmarshalUint32Ptr + } + if slice { + return unmarshalUint32Slice + } + return unmarshalUint32Value + } + case reflect.Uint64: + switch encoding { + case "fixed64": + if pointer { + return unmarshalFixed64Ptr + } + if slice { + return unmarshalFixed64Slice + } + return unmarshalFixed64Value + case "varint": + if pointer { + return unmarshalUint64Ptr + } + if slice { + return unmarshalUint64Slice + } + return unmarshalUint64Value + } + case reflect.Float32: + if pointer { + return unmarshalFloat32Ptr + } + if slice { + return unmarshalFloat32Slice + } + return unmarshalFloat32Value + case reflect.Float64: + if pointer { + return unmarshalFloat64Ptr + } + if slice { + return unmarshalFloat64Slice + } + return unmarshalFloat64Value + case reflect.Map: + panic("map type in typeUnmarshaler in " + t.Name()) + case reflect.Slice: + if pointer { + panic("bad pointer in slice case in " + t.Name()) + } + if slice { + return unmarshalBytesSlice + } + return unmarshalBytesValue + case reflect.String: + if validateUTF8 { + if pointer { + return unmarshalUTF8StringPtr + } + if slice { + return unmarshalUTF8StringSlice + } + return unmarshalUTF8StringValue + } + if pointer { + return unmarshalStringPtr + } + if slice { + return unmarshalStringSlice + } + return unmarshalStringValue + case reflect.Struct: + // message or group field + if !pointer { + panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding)) + } + switch encoding { + case "bytes": + if slice { + return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name) + } + return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name) + case "group": + if slice { + return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name) + } + return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name) + } + } + panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding)) +} + +// Below are all the unmarshalers for individual fields of various types. + +func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + *f.toInt64() = v + return b, nil +} + +func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + *f.toInt64Ptr() = &v + return b, nil +} + +func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + s := f.toInt64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + s := f.toInt64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + *f.toInt64() = v + return b, nil +} + +func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + *f.toInt64Ptr() = &v + return b, nil +} + +func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + s := f.toInt64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + s := f.toInt64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + *f.toUint64() = v + return b, nil +} + +func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + *f.toUint64Ptr() = &v + return b, nil +} + +func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + s := f.toUint64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + s := f.toUint64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + *f.toInt32() = v + return b, nil +} + +func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.setInt32Ptr(v) + return b, nil +} + +func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.appendInt32Slice(v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.appendInt32Slice(v) + return b, nil +} + +func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + *f.toInt32() = v + return b, nil +} + +func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.setInt32Ptr(v) + return b, nil +} + +func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.appendInt32Slice(v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.appendInt32Slice(v) + return b, nil +} + +func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + *f.toUint32() = v + return b, nil +} + +func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + *f.toUint32Ptr() = &v + return b, nil +} + +func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + s := f.toUint32Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + s := f.toUint32Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + *f.toUint64() = v + return b[8:], nil +} + +func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + *f.toUint64Ptr() = &v + return b[8:], nil +} + +func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + s := f.toUint64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + s := f.toUint64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + *f.toInt64() = v + return b[8:], nil +} + +func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + *f.toInt64Ptr() = &v + return b[8:], nil +} + +func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + s := f.toInt64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + s := f.toInt64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + *f.toUint32() = v + return b[4:], nil +} + +func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + *f.toUint32Ptr() = &v + return b[4:], nil +} + +func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + s := f.toUint32Slice() + *s = append(*s, v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + s := f.toUint32Slice() + *s = append(*s, v) + return b[4:], nil +} + +func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + *f.toInt32() = v + return b[4:], nil +} + +func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.setInt32Ptr(v) + return b[4:], nil +} + +func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.appendInt32Slice(v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.appendInt32Slice(v) + return b[4:], nil +} + +func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + // Note: any length varint is allowed, even though any sane + // encoder will use one byte. + // See https://github.com/golang/protobuf/issues/76 + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + // TODO: check if x>1? Tests seem to indicate no. + v := x != 0 + *f.toBool() = v + return b[n:], nil +} + +func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + *f.toBoolPtr() = &v + return b[n:], nil +} + +func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + s := f.toBoolSlice() + *s = append(*s, v) + b = b[n:] + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + s := f.toBoolSlice() + *s = append(*s, v) + return b[n:], nil +} + +func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + *f.toFloat64() = v + return b[8:], nil +} + +func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + *f.toFloat64Ptr() = &v + return b[8:], nil +} + +func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + s := f.toFloat64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + s := f.toFloat64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + *f.toFloat32() = v + return b[4:], nil +} + +func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + *f.toFloat32Ptr() = &v + return b[4:], nil +} + +func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + s := f.toFloat32Slice() + *s = append(*s, v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + s := f.toFloat32Slice() + *s = append(*s, v) + return b[4:], nil +} + +func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toString() = v + return b[x:], nil +} + +func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toStringPtr() = &v + return b[x:], nil +} + +func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + s := f.toStringSlice() + *s = append(*s, v) + return b[x:], nil +} + +func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toString() = v + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toStringPtr() = &v + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + s := f.toStringSlice() + *s = append(*s, v) + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +var emptyBuf [0]byte + +func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + // The use of append here is a trick which avoids the zeroing + // that would be required if we used a make/copy pair. + // We append to emptyBuf instead of nil because we want + // a non-nil result even when the length is 0. + v := append(emptyBuf[:], b[:x]...) + *f.toBytes() = v + return b[x:], nil +} + +func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := append(emptyBuf[:], b[:x]...) + s := f.toBytesSlice() + *s = append(*s, v) + return b[x:], nil +} + +func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + // First read the message field to see if something is there. + // The semantics of multiple submessages are weird. Instead of + // the last one winning (as it is for all other fields), multiple + // submessages are merged. + v := f.getPointer() + if v.isNil() { + v = valToPointer(reflect.New(sub.typ)) + f.setPointer(v) + } + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + return b[x:], err + } +} + +func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := valToPointer(reflect.New(sub.typ)) + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + f.appendPointer(v) + return b[x:], err + } +} + +func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireStartGroup { + return b, errInternalBadWireType + } + x, y := findEndGroup(b) + if x < 0 { + return nil, io.ErrUnexpectedEOF + } + v := f.getPointer() + if v.isNil() { + v = valToPointer(reflect.New(sub.typ)) + f.setPointer(v) + } + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + return b[y:], err + } +} + +func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireStartGroup { + return b, errInternalBadWireType + } + x, y := findEndGroup(b) + if x < 0 { + return nil, io.ErrUnexpectedEOF + } + v := valToPointer(reflect.New(sub.typ)) + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + f.appendPointer(v) + return b[y:], err + } +} + +func makeUnmarshalMap(f *reflect.StructField) unmarshaler { + t := f.Type + kt := t.Key() + vt := t.Elem() + unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) + unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val")) + return func(b []byte, f pointer, w int) ([]byte, error) { + // The map entry is a submessage. Figure out how big it is. + if w != WireBytes { + return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes) + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + r := b[x:] // unused data to return + b = b[:x] // data for map entry + + // Note: we could use #keys * #values ~= 200 functions + // to do map decoding without reflection. Probably not worth it. + // Maps will be somewhat slow. Oh well. + + // Read key and value from data. + var nerr nonFatal + k := reflect.New(kt) + v := reflect.New(vt) + for len(b) > 0 { + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + wire := int(x) & 7 + b = b[n:] + + var err error + switch x >> 3 { + case 1: + b, err = unmarshalKey(b, valToPointer(k), wire) + case 2: + b, err = unmarshalVal(b, valToPointer(v), wire) + default: + err = errInternalBadWireType // skip unknown tag + } + + if nerr.Merge(err) { + continue + } + if err != errInternalBadWireType { + return nil, err + } + + // Skip past unknown fields. + b, err = skipField(b, wire) + if err != nil { + return nil, err + } + } + + // Get map, allocate if needed. + m := f.asPointerTo(t).Elem() // an addressable map[K]T + if m.IsNil() { + m.Set(reflect.MakeMap(t)) + } + + // Insert into map. + m.SetMapIndex(k.Elem(), v.Elem()) + + return r, nerr.E + } +} + +// makeUnmarshalOneof makes an unmarshaler for oneof fields. +// for: +// message Msg { +// oneof F { +// int64 X = 1; +// float64 Y = 2; +// } +// } +// typ is the type of the concrete entry for a oneof case (e.g. Msg_X). +// ityp is the interface type of the oneof field (e.g. isMsg_F). +// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64). +// Note that this function will be called once for each case in the oneof. +func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler { + sf := typ.Field(0) + field0 := toField(&sf) + return func(b []byte, f pointer, w int) ([]byte, error) { + // Allocate holder for value. + v := reflect.New(typ) + + // Unmarshal data into holder. + // We unmarshal into the first field of the holder object. + var err error + var nerr nonFatal + b, err = unmarshal(b, valToPointer(v).offset(field0), w) + if !nerr.Merge(err) { + return nil, err + } + + // Write pointer to holder into target field. + f.asPointerTo(ityp).Elem().Set(v) + + return b, nerr.E + } +} + +// Error used by decode internally. +var errInternalBadWireType = errors.New("proto: internal error: bad wiretype") + +// skipField skips past a field of type wire and returns the remaining bytes. +func skipField(b []byte, wire int) ([]byte, error) { + switch wire { + case WireVarint: + _, k := decodeVarint(b) + if k == 0 { + return b, io.ErrUnexpectedEOF + } + b = b[k:] + case WireFixed32: + if len(b) < 4 { + return b, io.ErrUnexpectedEOF + } + b = b[4:] + case WireFixed64: + if len(b) < 8 { + return b, io.ErrUnexpectedEOF + } + b = b[8:] + case WireBytes: + m, k := decodeVarint(b) + if k == 0 || uint64(len(b)-k) < m { + return b, io.ErrUnexpectedEOF + } + b = b[uint64(k)+m:] + case WireStartGroup: + _, i := findEndGroup(b) + if i == -1 { + return b, io.ErrUnexpectedEOF + } + b = b[i:] + default: + return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire) + } + return b, nil +} + +// findEndGroup finds the index of the next EndGroup tag. +// Groups may be nested, so the "next" EndGroup tag is the first +// unpaired EndGroup. +// findEndGroup returns the indexes of the start and end of the EndGroup tag. +// Returns (-1,-1) if it can't find one. +func findEndGroup(b []byte) (int, int) { + depth := 1 + i := 0 + for { + x, n := decodeVarint(b[i:]) + if n == 0 { + return -1, -1 + } + j := i + i += n + switch x & 7 { + case WireVarint: + _, k := decodeVarint(b[i:]) + if k == 0 { + return -1, -1 + } + i += k + case WireFixed32: + if len(b)-4 < i { + return -1, -1 + } + i += 4 + case WireFixed64: + if len(b)-8 < i { + return -1, -1 + } + i += 8 + case WireBytes: + m, k := decodeVarint(b[i:]) + if k == 0 { + return -1, -1 + } + i += k + if uint64(len(b)-i) < m { + return -1, -1 + } + i += int(m) + case WireStartGroup: + depth++ + case WireEndGroup: + depth-- + if depth == 0 { + return j, i + } + default: + return -1, -1 + } + } +} + +// encodeVarint appends a varint-encoded integer to b and returns the result. +func encodeVarint(b []byte, x uint64) []byte { + for x >= 1<<7 { + b = append(b, byte(x&0x7f|0x80)) + x >>= 7 + } + return append(b, byte(x)) +} + +// decodeVarint reads a varint-encoded integer from b. +// Returns the decoded integer and the number of bytes read. +// If there is an error, it returns 0,0. +func decodeVarint(b []byte) (uint64, int) { + var x, y uint64 + if len(b) == 0 { + goto bad + } + x = uint64(b[0]) + if x < 0x80 { + return x, 1 + } + x -= 0x80 + + if len(b) <= 1 { + goto bad + } + y = uint64(b[1]) + x += y << 7 + if y < 0x80 { + return x, 2 + } + x -= 0x80 << 7 + + if len(b) <= 2 { + goto bad + } + y = uint64(b[2]) + x += y << 14 + if y < 0x80 { + return x, 3 + } + x -= 0x80 << 14 + + if len(b) <= 3 { + goto bad + } + y = uint64(b[3]) + x += y << 21 + if y < 0x80 { + return x, 4 + } + x -= 0x80 << 21 + + if len(b) <= 4 { + goto bad + } + y = uint64(b[4]) + x += y << 28 + if y < 0x80 { + return x, 5 + } + x -= 0x80 << 28 + + if len(b) <= 5 { + goto bad + } + y = uint64(b[5]) + x += y << 35 + if y < 0x80 { + return x, 6 + } + x -= 0x80 << 35 + + if len(b) <= 6 { + goto bad + } + y = uint64(b[6]) + x += y << 42 + if y < 0x80 { + return x, 7 + } + x -= 0x80 << 42 + + if len(b) <= 7 { + goto bad + } + y = uint64(b[7]) + x += y << 49 + if y < 0x80 { + return x, 8 + } + x -= 0x80 << 49 + + if len(b) <= 8 { + goto bad + } + y = uint64(b[8]) + x += y << 56 + if y < 0x80 { + return x, 9 + } + x -= 0x80 << 56 + + if len(b) <= 9 { + goto bad + } + y = uint64(b[9]) + x += y << 63 + if y < 2 { + return x, 10 + } + +bad: + return 0, 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/text.go new file mode 100644 index 00000000000..1aaee725b45 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/text.go @@ -0,0 +1,843 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Functions for writing the text protocol buffer format. + +import ( + "bufio" + "bytes" + "encoding" + "errors" + "fmt" + "io" + "log" + "math" + "reflect" + "sort" + "strings" +) + +var ( + newline = []byte("\n") + spaces = []byte(" ") + endBraceNewline = []byte("}\n") + backslashN = []byte{'\\', 'n'} + backslashR = []byte{'\\', 'r'} + backslashT = []byte{'\\', 't'} + backslashDQ = []byte{'\\', '"'} + backslashBS = []byte{'\\', '\\'} + posInf = []byte("inf") + negInf = []byte("-inf") + nan = []byte("nan") +) + +type writer interface { + io.Writer + WriteByte(byte) error +} + +// textWriter is an io.Writer that tracks its indentation level. +type textWriter struct { + ind int + complete bool // if the current position is a complete line + compact bool // whether to write out as a one-liner + w writer +} + +func (w *textWriter) WriteString(s string) (n int, err error) { + if !strings.Contains(s, "\n") { + if !w.compact && w.complete { + w.writeIndent() + } + w.complete = false + return io.WriteString(w.w, s) + } + // WriteString is typically called without newlines, so this + // codepath and its copy are rare. We copy to avoid + // duplicating all of Write's logic here. + return w.Write([]byte(s)) +} + +func (w *textWriter) Write(p []byte) (n int, err error) { + newlines := bytes.Count(p, newline) + if newlines == 0 { + if !w.compact && w.complete { + w.writeIndent() + } + n, err = w.w.Write(p) + w.complete = false + return n, err + } + + frags := bytes.SplitN(p, newline, newlines+1) + if w.compact { + for i, frag := range frags { + if i > 0 { + if err := w.w.WriteByte(' '); err != nil { + return n, err + } + n++ + } + nn, err := w.w.Write(frag) + n += nn + if err != nil { + return n, err + } + } + return n, nil + } + + for i, frag := range frags { + if w.complete { + w.writeIndent() + } + nn, err := w.w.Write(frag) + n += nn + if err != nil { + return n, err + } + if i+1 < len(frags) { + if err := w.w.WriteByte('\n'); err != nil { + return n, err + } + n++ + } + } + w.complete = len(frags[len(frags)-1]) == 0 + return n, nil +} + +func (w *textWriter) WriteByte(c byte) error { + if w.compact && c == '\n' { + c = ' ' + } + if !w.compact && w.complete { + w.writeIndent() + } + err := w.w.WriteByte(c) + w.complete = c == '\n' + return err +} + +func (w *textWriter) indent() { w.ind++ } + +func (w *textWriter) unindent() { + if w.ind == 0 { + log.Print("proto: textWriter unindented too far") + return + } + w.ind-- +} + +func writeName(w *textWriter, props *Properties) error { + if _, err := w.WriteString(props.OrigName); err != nil { + return err + } + if props.Wire != "group" { + return w.WriteByte(':') + } + return nil +} + +func requiresQuotes(u string) bool { + // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. + for _, ch := range u { + switch { + case ch == '.' || ch == '/' || ch == '_': + continue + case '0' <= ch && ch <= '9': + continue + case 'A' <= ch && ch <= 'Z': + continue + case 'a' <= ch && ch <= 'z': + continue + default: + return true + } + } + return false +} + +// isAny reports whether sv is a google.protobuf.Any message +func isAny(sv reflect.Value) bool { + type wkt interface { + XXX_WellKnownType() string + } + t, ok := sv.Addr().Interface().(wkt) + return ok && t.XXX_WellKnownType() == "Any" +} + +// writeProto3Any writes an expanded google.protobuf.Any message. +// +// It returns (false, nil) if sv value can't be unmarshaled (e.g. because +// required messages are not linked in). +// +// It returns (true, error) when sv was written in expanded format or an error +// was encountered. +func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { + turl := sv.FieldByName("TypeUrl") + val := sv.FieldByName("Value") + if !turl.IsValid() || !val.IsValid() { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + b, ok := val.Interface().([]byte) + if !ok { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + parts := strings.Split(turl.String(), "/") + mt := MessageType(parts[len(parts)-1]) + if mt == nil { + return false, nil + } + m := reflect.New(mt.Elem()) + if err := Unmarshal(b, m.Interface().(Message)); err != nil { + return false, nil + } + w.Write([]byte("[")) + u := turl.String() + if requiresQuotes(u) { + writeString(w, u) + } else { + w.Write([]byte(u)) + } + if w.compact { + w.Write([]byte("]:<")) + } else { + w.Write([]byte("]: <\n")) + w.ind++ + } + if err := tm.writeStruct(w, m.Elem()); err != nil { + return true, err + } + if w.compact { + w.Write([]byte("> ")) + } else { + w.ind-- + w.Write([]byte(">\n")) + } + return true, nil +} + +func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { + if tm.ExpandAny && isAny(sv) { + if canExpand, err := tm.writeProto3Any(w, sv); canExpand { + return err + } + } + st := sv.Type() + sprops := GetProperties(st) + for i := 0; i < sv.NumField(); i++ { + fv := sv.Field(i) + props := sprops.Prop[i] + name := st.Field(i).Name + + if name == "XXX_NoUnkeyedLiteral" { + continue + } + + if strings.HasPrefix(name, "XXX_") { + // There are two XXX_ fields: + // XXX_unrecognized []byte + // XXX_extensions map[int32]proto.Extension + // The first is handled here; + // the second is handled at the bottom of this function. + if name == "XXX_unrecognized" && !fv.IsNil() { + if err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil { + return err + } + } + continue + } + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Field not filled in. This could be an optional field or + // a required field that wasn't filled in. Either way, there + // isn't anything we can show for it. + continue + } + if fv.Kind() == reflect.Slice && fv.IsNil() { + // Repeated field that is empty, or a bytes field that is unused. + continue + } + + if props.Repeated && fv.Kind() == reflect.Slice { + // Repeated field. + for j := 0; j < fv.Len(); j++ { + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + v := fv.Index(j) + if v.Kind() == reflect.Ptr && v.IsNil() { + // A nil message in a repeated field is not valid, + // but we can handle that more gracefully than panicking. + if _, err := w.Write([]byte("\n")); err != nil { + return err + } + continue + } + if err := tm.writeAny(w, v, props); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + continue + } + if fv.Kind() == reflect.Map { + // Map fields are rendered as a repeated struct with key/value fields. + keys := fv.MapKeys() + sort.Sort(mapKeys(keys)) + for _, key := range keys { + val := fv.MapIndex(key) + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + // open struct + if err := w.WriteByte('<'); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + // key + if _, err := w.WriteString("key:"); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, key, props.MapKeyProp); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + // nil values aren't legal, but we can avoid panicking because of them. + if val.Kind() != reflect.Ptr || !val.IsNil() { + // value + if _, err := w.WriteString("value:"); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, val, props.MapValProp); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + // close struct + w.unindent() + if err := w.WriteByte('>'); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + } + continue + } + if props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 { + // empty bytes field + continue + } + if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { + // proto3 non-repeated scalar field; skip if zero value + if isProto3Zero(fv) { + continue + } + } + + if fv.Kind() == reflect.Interface { + // Check if it is a oneof. + if st.Field(i).Tag.Get("protobuf_oneof") != "" { + // fv is nil, or holds a pointer to generated struct. + // That generated struct has exactly one field, + // which has a protobuf struct tag. + if fv.IsNil() { + continue + } + inner := fv.Elem().Elem() // interface -> *T -> T + tag := inner.Type().Field(0).Tag.Get("protobuf") + props = new(Properties) // Overwrite the outer props var, but not its pointee. + props.Parse(tag) + // Write the value in the oneof, not the oneof itself. + fv = inner.Field(0) + + // Special case to cope with malformed messages gracefully: + // If the value in the oneof is a nil pointer, don't panic + // in writeAny. + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Use errors.New so writeAny won't render quotes. + msg := errors.New("/* nil */") + fv = reflect.ValueOf(&msg).Elem() + } + } + } + + if err := writeName(w, props); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + + // Enums have a String method, so writeAny will work fine. + if err := tm.writeAny(w, fv, props); err != nil { + return err + } + + if err := w.WriteByte('\n'); err != nil { + return err + } + } + + // Extensions (the XXX_extensions field). + pv := sv.Addr() + if _, err := extendable(pv.Interface()); err == nil { + if err := tm.writeExtensions(w, pv); err != nil { + return err + } + } + + return nil +} + +// writeAny writes an arbitrary field. +func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { + v = reflect.Indirect(v) + + // Floats have special cases. + if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { + x := v.Float() + var b []byte + switch { + case math.IsInf(x, 1): + b = posInf + case math.IsInf(x, -1): + b = negInf + case math.IsNaN(x): + b = nan + } + if b != nil { + _, err := w.Write(b) + return err + } + // Other values are handled below. + } + + // We don't attempt to serialise every possible value type; only those + // that can occur in protocol buffers. + switch v.Kind() { + case reflect.Slice: + // Should only be a []byte; repeated fields are handled in writeStruct. + if err := writeString(w, string(v.Bytes())); err != nil { + return err + } + case reflect.String: + if err := writeString(w, v.String()); err != nil { + return err + } + case reflect.Struct: + // Required/optional group/message. + var bra, ket byte = '<', '>' + if props != nil && props.Wire == "group" { + bra, ket = '{', '}' + } + if err := w.WriteByte(bra); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte('\n'); err != nil { + return err + } + } + w.indent() + if v.CanAddr() { + // Calling v.Interface on a struct causes the reflect package to + // copy the entire struct. This is racy with the new Marshaler + // since we atomically update the XXX_sizecache. + // + // Thus, we retrieve a pointer to the struct if possible to avoid + // a race since v.Interface on the pointer doesn't copy the struct. + // + // If v is not addressable, then we are not worried about a race + // since it implies that the binary Marshaler cannot possibly be + // mutating this value. + v = v.Addr() + } + if etm, ok := v.Interface().(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() + if err != nil { + return err + } + if _, err = w.Write(text); err != nil { + return err + } + } else { + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + if err := tm.writeStruct(w, v); err != nil { + return err + } + } + w.unindent() + if err := w.WriteByte(ket); err != nil { + return err + } + default: + _, err := fmt.Fprint(w, v.Interface()) + return err + } + return nil +} + +// equivalent to C's isprint. +func isprint(c byte) bool { + return c >= 0x20 && c < 0x7f +} + +// writeString writes a string in the protocol buffer text format. +// It is similar to strconv.Quote except we don't use Go escape sequences, +// we treat the string as a byte sequence, and we use octal escapes. +// These differences are to maintain interoperability with the other +// languages' implementations of the text format. +func writeString(w *textWriter, s string) error { + // use WriteByte here to get any needed indent + if err := w.WriteByte('"'); err != nil { + return err + } + // Loop over the bytes, not the runes. + for i := 0; i < len(s); i++ { + var err error + // Divergence from C++: we don't escape apostrophes. + // There's no need to escape them, and the C++ parser + // copes with a naked apostrophe. + switch c := s[i]; c { + case '\n': + _, err = w.w.Write(backslashN) + case '\r': + _, err = w.w.Write(backslashR) + case '\t': + _, err = w.w.Write(backslashT) + case '"': + _, err = w.w.Write(backslashDQ) + case '\\': + _, err = w.w.Write(backslashBS) + default: + if isprint(c) { + err = w.w.WriteByte(c) + } else { + _, err = fmt.Fprintf(w.w, "\\%03o", c) + } + } + if err != nil { + return err + } + } + return w.WriteByte('"') +} + +func writeUnknownStruct(w *textWriter, data []byte) (err error) { + if !w.compact { + if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { + return err + } + } + b := NewBuffer(data) + for b.index < len(b.buf) { + x, err := b.DecodeVarint() + if err != nil { + _, err := fmt.Fprintf(w, "/* %v */\n", err) + return err + } + wire, tag := x&7, x>>3 + if wire == WireEndGroup { + w.unindent() + if _, err := w.Write(endBraceNewline); err != nil { + return err + } + continue + } + if _, err := fmt.Fprint(w, tag); err != nil { + return err + } + if wire != WireStartGroup { + if err := w.WriteByte(':'); err != nil { + return err + } + } + if !w.compact || wire == WireStartGroup { + if err := w.WriteByte(' '); err != nil { + return err + } + } + switch wire { + case WireBytes: + buf, e := b.DecodeRawBytes(false) + if e == nil { + _, err = fmt.Fprintf(w, "%q", buf) + } else { + _, err = fmt.Fprintf(w, "/* %v */", e) + } + case WireFixed32: + x, err = b.DecodeFixed32() + err = writeUnknownInt(w, x, err) + case WireFixed64: + x, err = b.DecodeFixed64() + err = writeUnknownInt(w, x, err) + case WireStartGroup: + err = w.WriteByte('{') + w.indent() + case WireVarint: + x, err = b.DecodeVarint() + err = writeUnknownInt(w, x, err) + default: + _, err = fmt.Fprintf(w, "/* unknown wire type %d */", wire) + } + if err != nil { + return err + } + if err = w.WriteByte('\n'); err != nil { + return err + } + } + return nil +} + +func writeUnknownInt(w *textWriter, x uint64, err error) error { + if err == nil { + _, err = fmt.Fprint(w, x) + } else { + _, err = fmt.Fprintf(w, "/* %v */", err) + } + return err +} + +type int32Slice []int32 + +func (s int32Slice) Len() int { return len(s) } +func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } +func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// writeExtensions writes all the extensions in pv. +// pv is assumed to be a pointer to a protocol message struct that is extendable. +func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { + emap := extensionMaps[pv.Type().Elem()] + ep, _ := extendable(pv.Interface()) + + // Order the extensions by ID. + // This isn't strictly necessary, but it will give us + // canonical output, which will also make testing easier. + m, mu := ep.extensionsRead() + if m == nil { + return nil + } + mu.Lock() + ids := make([]int32, 0, len(m)) + for id := range m { + ids = append(ids, id) + } + sort.Sort(int32Slice(ids)) + mu.Unlock() + + for _, extNum := range ids { + ext := m[extNum] + var desc *ExtensionDesc + if emap != nil { + desc = emap[extNum] + } + if desc == nil { + // Unknown extension. + if err := writeUnknownStruct(w, ext.enc); err != nil { + return err + } + continue + } + + pb, err := GetExtension(ep, desc) + if err != nil { + return fmt.Errorf("failed getting extension: %v", err) + } + + // Repeated extensions will appear as a slice. + if !desc.repeated() { + if err := tm.writeExtension(w, desc.Name, pb); err != nil { + return err + } + } else { + v := reflect.ValueOf(pb) + for i := 0; i < v.Len(); i++ { + if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { + return err + } + } + } + } + return nil +} + +func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { + if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { + return err + } + if !w.compact { + if err := w.WriteByte(' '); err != nil { + return err + } + } + if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { + return err + } + if err := w.WriteByte('\n'); err != nil { + return err + } + return nil +} + +func (w *textWriter) writeIndent() { + if !w.complete { + return + } + remain := w.ind * 2 + for remain > 0 { + n := remain + if n > len(spaces) { + n = len(spaces) + } + w.w.Write(spaces[:n]) + remain -= n + } + w.complete = false +} + +// TextMarshaler is a configurable text format marshaler. +type TextMarshaler struct { + Compact bool // use compact text format (one line). + ExpandAny bool // expand google.protobuf.Any messages of known types +} + +// Marshal writes a given protocol buffer in text format. +// The only errors returned are from w. +func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { + val := reflect.ValueOf(pb) + if pb == nil || val.IsNil() { + w.Write([]byte("")) + return nil + } + var bw *bufio.Writer + ww, ok := w.(writer) + if !ok { + bw = bufio.NewWriter(w) + ww = bw + } + aw := &textWriter{ + w: ww, + complete: true, + compact: tm.Compact, + } + + if etm, ok := pb.(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() + if err != nil { + return err + } + if _, err = aw.Write(text); err != nil { + return err + } + if bw != nil { + return bw.Flush() + } + return nil + } + // Dereference the received pointer so we don't have outer < and >. + v := reflect.Indirect(val) + if err := tm.writeStruct(aw, v); err != nil { + return err + } + if bw != nil { + return bw.Flush() + } + return nil +} + +// Text is the same as Marshal, but returns the string directly. +func (tm *TextMarshaler) Text(pb Message) string { + var buf bytes.Buffer + tm.Marshal(&buf, pb) + return buf.String() +} + +var ( + defaultTextMarshaler = TextMarshaler{} + compactTextMarshaler = TextMarshaler{Compact: true} +) + +// TODO: consider removing some of the Marshal functions below. + +// MarshalText writes a given protocol buffer in text format. +// The only errors returned are from w. +func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } + +// MarshalTextString is the same as MarshalText, but returns the string directly. +func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } + +// CompactText writes a given protocol buffer in compact text format (one line). +func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } + +// CompactTextString is the same as CompactText, but returns the string directly. +func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/text_parser.go new file mode 100644 index 00000000000..bb55a3af276 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -0,0 +1,880 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +// Functions for parsing the Text protocol buffer format. +// TODO: message sets. + +import ( + "encoding" + "errors" + "fmt" + "reflect" + "strconv" + "strings" + "unicode/utf8" +) + +// Error string emitted when deserializing Any and fields are already set +const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set" + +type ParseError struct { + Message string + Line int // 1-based line number + Offset int // 0-based byte offset from start of input +} + +func (p *ParseError) Error() string { + if p.Line == 1 { + // show offset only for first line + return fmt.Sprintf("line 1.%d: %v", p.Offset, p.Message) + } + return fmt.Sprintf("line %d: %v", p.Line, p.Message) +} + +type token struct { + value string + err *ParseError + line int // line number + offset int // byte number from start of input, not start of line + unquoted string // the unquoted version of value, if it was a quoted string +} + +func (t *token) String() string { + if t.err == nil { + return fmt.Sprintf("%q (line=%d, offset=%d)", t.value, t.line, t.offset) + } + return fmt.Sprintf("parse error: %v", t.err) +} + +type textParser struct { + s string // remaining input + done bool // whether the parsing is finished (success or error) + backed bool // whether back() was called + offset, line int + cur token +} + +func newTextParser(s string) *textParser { + p := new(textParser) + p.s = s + p.line = 1 + p.cur.line = 1 + return p +} + +func (p *textParser) errorf(format string, a ...interface{}) *ParseError { + pe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset} + p.cur.err = pe + p.done = true + return pe +} + +// Numbers and identifiers are matched by [-+._A-Za-z0-9] +func isIdentOrNumberChar(c byte) bool { + switch { + case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z': + return true + case '0' <= c && c <= '9': + return true + } + switch c { + case '-', '+', '.', '_': + return true + } + return false +} + +func isWhitespace(c byte) bool { + switch c { + case ' ', '\t', '\n', '\r': + return true + } + return false +} + +func isQuote(c byte) bool { + switch c { + case '"', '\'': + return true + } + return false +} + +func (p *textParser) skipWhitespace() { + i := 0 + for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { + if p.s[i] == '#' { + // comment; skip to end of line or input + for i < len(p.s) && p.s[i] != '\n' { + i++ + } + if i == len(p.s) { + break + } + } + if p.s[i] == '\n' { + p.line++ + } + i++ + } + p.offset += i + p.s = p.s[i:len(p.s)] + if len(p.s) == 0 { + p.done = true + } +} + +func (p *textParser) advance() { + // Skip whitespace + p.skipWhitespace() + if p.done { + return + } + + // Start of non-whitespace + p.cur.err = nil + p.cur.offset, p.cur.line = p.offset, p.line + p.cur.unquoted = "" + switch p.s[0] { + case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': + // Single symbol + p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] + case '"', '\'': + // Quoted string + i := 1 + for i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\n' { + if p.s[i] == '\\' && i+1 < len(p.s) { + // skip escaped char + i++ + } + i++ + } + if i >= len(p.s) || p.s[i] != p.s[0] { + p.errorf("unmatched quote") + return + } + unq, err := unquoteC(p.s[1:i], rune(p.s[0])) + if err != nil { + p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) + return + } + p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] + p.cur.unquoted = unq + default: + i := 0 + for i < len(p.s) && isIdentOrNumberChar(p.s[i]) { + i++ + } + if i == 0 { + p.errorf("unexpected byte %#x", p.s[0]) + return + } + p.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)] + } + p.offset += len(p.cur.value) +} + +var ( + errBadUTF8 = errors.New("proto: bad UTF-8") +) + +func unquoteC(s string, quote rune) (string, error) { + // This is based on C++'s tokenizer.cc. + // Despite its name, this is *not* parsing C syntax. + // For instance, "\0" is an invalid quoted string. + + // Avoid allocation in trivial cases. + simple := true + for _, r := range s { + if r == '\\' || r == quote { + simple = false + break + } + } + if simple { + return s, nil + } + + buf := make([]byte, 0, 3*len(s)/2) + for len(s) > 0 { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", errBadUTF8 + } + s = s[n:] + if r != '\\' { + if r < utf8.RuneSelf { + buf = append(buf, byte(r)) + } else { + buf = append(buf, string(r)...) + } + continue + } + + ch, tail, err := unescape(s) + if err != nil { + return "", err + } + buf = append(buf, ch...) + s = tail + } + return string(buf), nil +} + +func unescape(s string) (ch string, tail string, err error) { + r, n := utf8.DecodeRuneInString(s) + if r == utf8.RuneError && n == 1 { + return "", "", errBadUTF8 + } + s = s[n:] + switch r { + case 'a': + return "\a", s, nil + case 'b': + return "\b", s, nil + case 'f': + return "\f", s, nil + case 'n': + return "\n", s, nil + case 'r': + return "\r", s, nil + case 't': + return "\t", s, nil + case 'v': + return "\v", s, nil + case '?': + return "?", s, nil // trigraph workaround + case '\'', '"', '\\': + return string(r), s, nil + case '0', '1', '2', '3', '4', '5', '6', '7': + if len(s) < 2 { + return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) + } + ss := string(r) + s[:2] + s = s[2:] + i, err := strconv.ParseUint(ss, 8, 8) + if err != nil { + return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) + } + return string([]byte{byte(i)}), s, nil + case 'x', 'X', 'u', 'U': + var n int + switch r { + case 'x', 'X': + n = 2 + case 'u': + n = 4 + case 'U': + n = 8 + } + if len(s) < n { + return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) + } + ss := s[:n] + s = s[n:] + i, err := strconv.ParseUint(ss, 16, 64) + if err != nil { + return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) + } + if r == 'x' || r == 'X' { + return string([]byte{byte(i)}), s, nil + } + if i > utf8.MaxRune { + return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) + } + return string(i), s, nil + } + return "", "", fmt.Errorf(`unknown escape \%c`, r) +} + +// Back off the parser by one token. Can only be done between calls to next(). +// It makes the next advance() a no-op. +func (p *textParser) back() { p.backed = true } + +// Advances the parser and returns the new current token. +func (p *textParser) next() *token { + if p.backed || p.done { + p.backed = false + return &p.cur + } + p.advance() + if p.done { + p.cur.value = "" + } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { + // Look for multiple quoted strings separated by whitespace, + // and concatenate them. + cat := p.cur + for { + p.skipWhitespace() + if p.done || !isQuote(p.s[0]) { + break + } + p.advance() + if p.cur.err != nil { + return &p.cur + } + cat.value += " " + p.cur.value + cat.unquoted += p.cur.unquoted + } + p.done = false // parser may have seen EOF, but we want to return cat + p.cur = cat + } + return &p.cur +} + +func (p *textParser) consumeToken(s string) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != s { + p.back() + return p.errorf("expected %q, found %q", s, tok.value) + } + return nil +} + +// Return a RequiredNotSetError indicating which required field was not set. +func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError { + st := sv.Type() + sprops := GetProperties(st) + for i := 0; i < st.NumField(); i++ { + if !isNil(sv.Field(i)) { + continue + } + + props := sprops.Prop[i] + if props.Required { + return &RequiredNotSetError{fmt.Sprintf("%v.%v", st, props.OrigName)} + } + } + return &RequiredNotSetError{fmt.Sprintf("%v.", st)} // should not happen +} + +// Returns the index in the struct for the named field, as well as the parsed tag properties. +func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) { + i, ok := sprops.decoderOrigNames[name] + if ok { + return i, sprops.Prop[i], true + } + return -1, nil, false +} + +// Consume a ':' from the input stream (if the next token is a colon), +// returning an error if a colon is needed but not present. +func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ":" { + // Colon is optional when the field is a group or message. + needColon := true + switch props.Wire { + case "group": + needColon = false + case "bytes": + // A "bytes" field is either a message, a string, or a repeated field; + // those three become *T, *string and []T respectively, so we can check for + // this field being a pointer to a non-string. + if typ.Kind() == reflect.Ptr { + // *T or *string + if typ.Elem().Kind() == reflect.String { + break + } + } else if typ.Kind() == reflect.Slice { + // []T or []*T + if typ.Elem().Kind() != reflect.Ptr { + break + } + } else if typ.Kind() == reflect.String { + // The proto3 exception is for a string field, + // which requires a colon. + break + } + needColon = false + } + if needColon { + return p.errorf("expected ':', found %q", tok.value) + } + p.back() + } + return nil +} + +func (p *textParser) readStruct(sv reflect.Value, terminator string) error { + st := sv.Type() + sprops := GetProperties(st) + reqCount := sprops.reqCount + var reqFieldErr error + fieldSet := make(map[string]bool) + // A struct is a sequence of "name: value", terminated by one of + // '>' or '}', or the end of the input. A name may also be + // "[extension]" or "[type/url]". + // + // The whole struct can also be an expanded Any message, like: + // [type/url] < ... struct contents ... > + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + if tok.value == "[" { + // Looks like an extension or an Any. + // + // TODO: Check whether we need to handle + // namespace rooted names (e.g. ".something.Foo"). + extName, err := p.consumeExtName() + if err != nil { + return err + } + + if s := strings.LastIndex(extName, "/"); s >= 0 { + // If it contains a slash, it's an Any type URL. + messageName := extName[s+1:] + mt := MessageType(messageName) + if mt == nil { + return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) + } + tok = p.next() + if tok.err != nil { + return tok.err + } + // consume an optional colon + if tok.value == ":" { + tok = p.next() + if tok.err != nil { + return tok.err + } + } + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + v := reflect.New(mt.Elem()) + if pe := p.readStruct(v.Elem(), terminator); pe != nil { + return pe + } + b, err := Marshal(v.Interface().(Message)) + if err != nil { + return p.errorf("failed to marshal message of type %q: %v", messageName, err) + } + if fieldSet["type_url"] { + return p.errorf(anyRepeatedlyUnpacked, "type_url") + } + if fieldSet["value"] { + return p.errorf(anyRepeatedlyUnpacked, "value") + } + sv.FieldByName("TypeUrl").SetString(extName) + sv.FieldByName("Value").SetBytes(b) + fieldSet["type_url"] = true + fieldSet["value"] = true + continue + } + + var desc *ExtensionDesc + // This could be faster, but it's functional. + // TODO: Do something smarter than a linear scan. + for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { + if d.Name == extName { + desc = d + break + } + } + if desc == nil { + return p.errorf("unrecognized extension %q", extName) + } + + props := &Properties{} + props.Parse(desc.Tag) + + typ := reflect.TypeOf(desc.ExtensionType) + if err := p.checkForColon(props, typ); err != nil { + return err + } + + rep := desc.repeated() + + // Read the extension structure, and set it in + // the value we're constructing. + var ext reflect.Value + if !rep { + ext = reflect.New(typ).Elem() + } else { + ext = reflect.New(typ.Elem()).Elem() + } + if err := p.readAny(ext, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + ep := sv.Addr().Interface().(Message) + if !rep { + SetExtension(ep, desc, ext.Interface()) + } else { + old, err := GetExtension(ep, desc) + var sl reflect.Value + if err == nil { + sl = reflect.ValueOf(old) // existing slice + } else { + sl = reflect.MakeSlice(typ, 0, 1) + } + sl = reflect.Append(sl, ext) + SetExtension(ep, desc, sl.Interface()) + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + continue + } + + // This is a normal, non-extension field. + name := tok.value + var dst reflect.Value + fi, props, ok := structFieldByName(sprops, name) + if ok { + dst = sv.Field(fi) + } else if oop, ok := sprops.OneofTypes[name]; ok { + // It is a oneof. + props = oop.Prop + nv := reflect.New(oop.Type.Elem()) + dst = nv.Elem().Field(0) + field := sv.Field(oop.Field) + if !field.IsNil() { + return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) + } + field.Set(nv) + } + if !dst.IsValid() { + return p.errorf("unknown field name %q in %v", name, st) + } + + if dst.Kind() == reflect.Map { + // Consume any colon. + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Construct the map if it doesn't already exist. + if dst.IsNil() { + dst.Set(reflect.MakeMap(dst.Type())) + } + key := reflect.New(dst.Type().Key()).Elem() + val := reflect.New(dst.Type().Elem()).Elem() + + // The map entry should be this sequence of tokens: + // < key : KEY value : VALUE > + // However, implementations may omit key or value, and technically + // we should support them in any order. See b/28924776 for a time + // this went wrong. + + tok := p.next() + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + switch tok.value { + case "key": + if err := p.consumeToken(":"); err != nil { + return err + } + if err := p.readAny(key, props.MapKeyProp); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + case "value": + if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil { + return err + } + if err := p.readAny(val, props.MapValProp); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + default: + p.back() + return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) + } + } + + dst.SetMapIndex(key, val) + continue + } + + // Check that it's not already set if it's not a repeated field. + if !props.Repeated && fieldSet[name] { + return p.errorf("non-repeated field %q was repeated", name) + } + + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Parse into the field. + fieldSet[name] = true + if err := p.readAny(dst, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + if props.Required { + reqCount-- + } + + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + + } + + if reqCount > 0 { + return p.missingRequiredFieldError(sv) + } + return reqFieldErr +} + +// consumeExtName consumes extension name or expanded Any type URL and the +// following ']'. It returns the name or URL consumed. +func (p *textParser) consumeExtName() (string, error) { + tok := p.next() + if tok.err != nil { + return "", tok.err + } + + // If extension name or type url is quoted, it's a single token. + if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { + name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) + if err != nil { + return "", err + } + return name, p.consumeToken("]") + } + + // Consume everything up to "]" + var parts []string + for tok.value != "]" { + parts = append(parts, tok.value) + tok = p.next() + if tok.err != nil { + return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) + } + if p.done && tok.value != "]" { + return "", p.errorf("unclosed type_url or extension name") + } + } + return strings.Join(parts, ""), nil +} + +// consumeOptionalSeparator consumes an optional semicolon or comma. +// It is used in readStruct to provide backward compatibility. +func (p *textParser) consumeOptionalSeparator() error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value != ";" && tok.value != "," { + p.back() + } + return nil +} + +func (p *textParser) readAny(v reflect.Value, props *Properties) error { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == "" { + return p.errorf("unexpected EOF") + } + + switch fv := v; fv.Kind() { + case reflect.Slice: + at := v.Type() + if at.Elem().Kind() == reflect.Uint8 { + // Special case for []byte + if tok.value[0] != '"' && tok.value[0] != '\'' { + // Deliberately written out here, as the error after + // this switch statement would write "invalid []byte: ...", + // which is not as user-friendly. + return p.errorf("invalid string: %v", tok.value) + } + bytes := []byte(tok.unquoted) + fv.Set(reflect.ValueOf(bytes)) + return nil + } + // Repeated field. + if tok.value == "[" { + // Repeated field with list notation, like [1,2,3]. + for { + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + err := p.readAny(fv.Index(fv.Len()-1), props) + if err != nil { + return err + } + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == "]" { + break + } + if tok.value != "," { + return p.errorf("Expected ']' or ',' found %q", tok.value) + } + } + return nil + } + // One value of the repeated field. + p.back() + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + return p.readAny(fv.Index(fv.Len()-1), props) + case reflect.Bool: + // true/1/t/True or false/f/0/False. + switch tok.value { + case "true", "1", "t", "True": + fv.SetBool(true) + return nil + case "false", "0", "f", "False": + fv.SetBool(false) + return nil + } + case reflect.Float32, reflect.Float64: + v := tok.value + // Ignore 'f' for compatibility with output generated by C++, but don't + // remove 'f' when the value is "-inf" or "inf". + if strings.HasSuffix(v, "f") && tok.value != "-inf" && tok.value != "inf" { + v = v[:len(v)-1] + } + if f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil { + fv.SetFloat(f) + return nil + } + case reflect.Int32: + if x, err := strconv.ParseInt(tok.value, 0, 32); err == nil { + fv.SetInt(x) + return nil + } + + if len(props.Enum) == 0 { + break + } + m, ok := enumValueMaps[props.Enum] + if !ok { + break + } + x, ok := m[tok.value] + if !ok { + break + } + fv.SetInt(int64(x)) + return nil + case reflect.Int64: + if x, err := strconv.ParseInt(tok.value, 0, 64); err == nil { + fv.SetInt(x) + return nil + } + + case reflect.Ptr: + // A basic field (indirected through pointer), or a repeated message/group + p.back() + fv.Set(reflect.New(fv.Type().Elem())) + return p.readAny(fv.Elem(), props) + case reflect.String: + if tok.value[0] == '"' || tok.value[0] == '\'' { + fv.SetString(tok.unquoted) + return nil + } + case reflect.Struct: + var terminator string + switch tok.value { + case "{": + terminator = "}" + case "<": + terminator = ">" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + // TODO: Handle nested messages which implement encoding.TextUnmarshaler. + return p.readStruct(fv, terminator) + case reflect.Uint32: + if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { + fv.SetUint(uint64(x)) + return nil + } + case reflect.Uint64: + if x, err := strconv.ParseUint(tok.value, 0, 64); err == nil { + fv.SetUint(x) + return nil + } + } + return p.errorf("invalid %v: %v", v.Type(), tok.value) +} + +// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb +// before starting to unmarshal, so any existing data in pb is always removed. +// If a required field is not set and no other error occurs, +// UnmarshalText returns *RequiredNotSetError. +func UnmarshalText(s string, pb Message) error { + if um, ok := pb.(encoding.TextUnmarshaler); ok { + return um.UnmarshalText([]byte(s)) + } + pb.Reset() + v := reflect.ValueOf(pb) + return newTextParser(s).readStruct(v.Elem(), "") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/API_SUPPORT.md b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/API_SUPPORT.md new file mode 100644 index 00000000000..2fd663f4f1d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/API_SUPPORT.md @@ -0,0 +1,379 @@ +# API Support + +## Linodes + +- `/linode/instances` + - [x] `GET` + - [X] `POST` +- `/linode/instances/$id` + - [x] `GET` + - [X] `PUT` + - [X] `DELETE` +- `/linode/instances/$id/boot` + - [x] `POST` +- `/linode/instances/$id/clone` + - [x] `POST` +- `/linode/instances/$id/mutate` + - [X] `POST` +- `/linode/instances/$id/reboot` + - [x] `POST` +- `/linode/instances/$id/rebuild` + - [X] `POST` +- `/linode/instances/$id/rescue` + - [X] `POST` +- `/linode/instances/$id/resize` + - [x] `POST` +- `/linode/instances/$id/shutdown` + - [x] `POST` +- `/linode/instances/$id/volumes` + - [X] `GET` + +### Backups + +- `/linode/instances/$id/backups` + - [X] `GET` + - [ ] `POST` +- `/linode/instances/$id/backups/$id/restore` + - [ ] `POST` +- `/linode/instances/$id/backups/cancel` + - [ ] `POST` +- `/linode/instances/$id/backups/enable` + - [ ] `POST` + +### Configs + +- `/linode/instances/$id/configs` + - [X] `GET` + - [X] `POST` +- `/linode/instances/$id/configs/$id` + - [X] `GET` + - [X] `PUT` + - [X] `DELETE` + +### Disks + +- `/linode/instances/$id/disks` + - [X] `GET` + - [X] `POST` +- `/linode/instances/$id/disks/$id` + - [X] `GET` + - [X] `PUT` + - [X] `POST` + - [X] `DELETE` +- `/linode/instances/$id/disks/$id/password` + - [X] `POST` +- `/linode/instances/$id/disks/$id/resize` + - [X] `POST` + +### IPs + +- `/linode/instances/$id/ips` + - [ ] `GET` + - [ ] `POST` +- `/linode/instances/$id/ips/$ip_address` + - [ ] `GET` + - [ ] `PUT` + - [ ] `DELETE` +- `/linode/instances/$id/ips/sharing` + - [ ] `POST` + +### Kernels + +- `/linode/kernels` + - [X] `GET` +- `/linode/kernels/$id` + - [X] `GET` + +### StackScripts + +- `/linode/stackscripts` + - [x] `GET` + - [X] `POST` +- `/linode/stackscripts/$id` + - [x] `GET` + - [X] `PUT` + - [X] `DELETE` + +### Stats + +- `/linode/instances/$id/stats` + - [ ] `GET` +- `/linode/instances/$id/stats/$year/$month` + - [ ] `GET` + +### Types + +- `/linode/types` + - [X] `GET` +- `/linode/types/$id` + - [X] `GET` + +## Domains + +- `/domains` + - [X] `GET` + - [X] `POST` +- `/domains/$id` + - [X] `GET` + - [X] `PUT` + - [X] `DELETE` +- `/domains/$id/clone` + - [ ] `POST` +- `/domains/$id/records` + - [X] `GET` + - [X] `POST` +- `/domains/$id/records/$id` + - [X] `GET` + - [X] `PUT` + - [X] `DELETE` + +## Longview + +- `/longview/clients` + - [X] `GET` + - [ ] `POST` +- `/longview/clients/$id` + - [X] `GET` + - [ ] `PUT` + - [ ] `DELETE` + +### Subscriptions + +- `/longview/subscriptions` + - [ ] `GET` +- `/longview/subscriptions/$id` + - [ ] `GET` + +### NodeBalancers + +- `/nodebalancers` + - [X] `GET` + - [X] `POST` +- `/nodebalancers/$id` + - [X] `GET` + - [X] `PUT` + - [X] `DELETE` + +### NodeBalancer Configs + +- `/nodebalancers/$id/configs` + - [X] `GET` + - [X] `POST` +- `/nodebalancers/$id/configs/$id` + - [X] `GET` + - [X] `DELETE` +- `/nodebalancers/$id/configs/$id/nodes` + - [X] `GET` + - [X] `POST` +- `/nodebalancers/$id/configs/$id/nodes/$id` + - [X] `GET` + - [X] `PUT` + - [X] `DELETE` +- `/nodebalancers/$id/configs/$id/rebuild` + - [X] `POST` + +## Networking + +- `/networking/ip-assign` + - [ ] `POST` +- `/networking/ips` + - [X] `GET` + - [ ] `POST` +- `/networking/ips/$address` + - [X] `GET` + - [ ] `PUT` + - [ ] `DELETE` + +### IPv6 + +- `/networking/ips` + - [X] `GET` +- `/networking/ips/$address` + - [X] `GET` + - [ ] `PUT` +- /networking/ipv6/ranges + - [X] `GET` +- /networking/ipv6/pools + - [X] `GET` + +## Regions + +- `/regions` + - [x] `GET` +- `/regions/$id` + - [x] `GET` + +## Support + +- `/support/tickets` + - [X] `GET` + - [ ] `POST` +- `/support/tickets/$id` + - [X] `GET` +- `/support/tickets/$id/attachments` + - [ ] `POST` +- `/support/tickets/$id/replies` + - [ ] `GET` + - [ ] `POST` + +## Tags + +- `/tags/` + - [X] `GET` + - [X] `POST` +- `/tags/$id` + - [X] `GET` + - [X] `DELETE` + +## Account + +### Events + +- `/account/events` + - [X] `GET` +- `/account/events/$id` + - [X] `GET` +- `/account/events/$id/read` + - [X] `POST` +- `/account/events/$id/seen` + - [X] `POST` + +### Invoices + +- `/account/invoices/` + - [X] `GET` +- `/account/invoices/$id` + - [X] `GET` +- `/account/invoices/$id/items` + - [X] `GET` + +### Notifications + +- `/account/notifications` + - [X] `GET` + +### OAuth Clients + +- `/account/oauth-clients` + - [ ] `GET` + - [ ] `POST` +- `/account/oauth-clients/$id` + - [ ] `GET` + - [ ] `PUT` + - [ ] `DELETE` +- `/account/oauth-clients/$id/reset_secret` + - [ ] `POST` +- `/account/oauth-clients/$id/thumbnail` + - [ ] `GET` + - [ ] `PUT` + +### Payments + +- `/account/payments` + - [ ] `GET` + - [ ] `POST` +- `/account/payments/$id` + - [ ] `GET` +- `/account/payments/paypal` + - [ ] `GET` +- `/account/payments/paypal/execute` + - [ ] `POST` + +### Settings + +- `/account/settings` + - [ ] `GET` + - [ ] `PUT` + +### Users + +- `/account/users` + - [X] `GET` + - [X] `POST` +- `/account/users/$username` + - [X] `GET` + - [X] `PUT` + - [X] `DELETE` +- `/account/users/$username/grants` + - [ ] `GET` + - [ ] `PUT` +- `/account/users/$username/password` + - [ ] `POST` + +## Profile + +### Personalized User Settings + +- `/profile` + - [X] `GET` + - [X] `PUT` + +### Granted OAuth Apps + +- `/profile/apps` + - [ ] `GET` +- `/profile/apps/$id` + - [ ] `GET` + - [ ] `DELETE` + +### Grants to Linode Resources + +- `/profile/grants` + - [ ] `GET` + +### SSH Keys + +- `/profile/sshkeys` + - [x] `GET` + - [x] `POST` +- `/profile/sshkeys/$id` + - [x] `GET` + - [x] `PUT` + - [x] `DELETE` + +### Two-Factor + +- `/profile/tfa-disable` + - [ ] `POST` +- `/profile/tfa-enable` + - [ ] `POST` +- `/profile/tfa-enable-confirm` + - [ ] `POST` + +### Personal Access API Tokens + +- `/profile/tokens` + - [X] `GET` + - [X] `POST` +- `/profile/tokens/$id` + - [X] `GET` + - [X] `PUT` + - [X] `DELETE` + +## Images + +- `/images` + - [x] `GET` +- `/images/$id` + - [x] `GET` + - [X] `POST` + - [X] `PUT` + - [X] `DELETE` + +## Volumes + +- `/volumes` + - [X] `GET` + - [X] `POST` +- `/volumes/$id` + - [X] `GET` + - [X] `PUT` + - [X] `DELETE` +- `/volumes/$id/attach` + - [X] `POST` +- `/volumes/$id/clone` + - [X] `POST` +- `/volumes/$id/detach` + - [X] `POST` +- `/volumes/$id/resize` + - [X] `POST` diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/CHANGELOG.md b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/CHANGELOG.md new file mode 100644 index 00000000000..54c176642a0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/CHANGELOG.md @@ -0,0 +1,239 @@ +# Change Log + +## Unreleased + +### Fixes + +### Features + + + +## [v0.7.1](https://github.com/linode/linodego/compare/v0.7.0..v0.7.1) (2018-02-05) + +### Features + +* add `ClassDedicated` constant (`dedicated`) for use in `LinodeType` `Class` values + See the [Dedicated CPU Announcement](https://blog.linode.com/2019/02/05/introducing-linode-dedicated-cpu-instances/) + + + +## [v0.7.0](https://github.com/linode/linodego/compare/v0.6.2..v0.7.0) (2018-12-03) + +### Features + +* add `Tags` field in: `NodeBalancer`, `Domain`, `Volume` +* add `UpdateIPAddress` (for setting RDNS) + +### Fixes + +* invalid URL for `/v4/networking/` enpoints (IPv6 Ranges and Pools) has been correcrted + + + +## [v0.6.2](https://github.com/linode/linodego/compare/v0.6.1..v0.6.2) (2018-10-26) + +### Fixes + +* add missing `Account` fields: `address_1`, `address_2`, `phone` + + +## [v0.6.1](https://github.com/linode/linodego/compare/v0.6.0..v0.6.1) (2018-10-26) + +### Features + +* Adds support for fetching and updating basic Profile information + + +## [v0.6.0](https://github.com/linode/linodego/compare/v0.5.1..v0.6.0) (2018-10-25) + +### Fixes + +* Fixes Image date handling +* Fixes broken example code in README +* Fixes WaitForEventFinished when encountering events without entity +* Fixes ResizeInstanceDisk which was executing CloneInstanceDisk +* Fixes go-resty import path to gopkg.in version for future go module support + +### Features + +* Adds support for user account operations +* Adds support for profile tokens +* Adds support for Tags +* Adds PasswordResetInstanceDisk +* Adds DiskStatus constants +* Adds WaitForInstanceDiskStatus +* Adds SetPollDelay for configuring poll duration + + * Reduced polling time to millisecond granularity + * Change polling default to 3s to avoid 429 conditions + * Use poll delay in waitfor functions + + +## [v0.5.1](https://github.com/linode/linodego/compare/v0.5.0...v0.5.1) (2018-09-10) + +### Fixes + +* Domain.Status was not imported from API responses correctly + + +## [v0.5.0](https://github.com/linode/linodego/compare/v0.4.0...v0.5.0) (2018-09-09) + +### Breaking Changes + +* List functions return slice of thing instead of slice of pointer to thing + +### Feature + +* add SSHKeys methods to client (also affects InstanceCreate, InstanceDiskCreate) +* add RebuildNodeBalancerConfig (and CreateNodeBalancerConfig with Nodes) + +### Fixes + +* Event.TimeRemaining wouldn't parse all possible API value +* Tests no longer rely on known/special instance and volume ids + + +## [0.4.0](https://github.com/linode/linodego/compare/v0.3.0...0.4.0) (2018-08-27) + +### Breaking Changes + +Replaces bool, error results with error results, for: + +* instance\_snapshots.go: EnableInstanceBackups +* instance\_snapshots.go: CancelInstanceBackups +* instance\_snapshots.go: RestoreInstanceBackup +* instances.go: BootInstance +* instances.go: RebootInstance +* instances.go: MutateInstance +* instances.go: RescueInstance +* instances.go: ResizeInstance +* instances.go: ShutdownInstance +* volumes.go: DetachVolume +* volumes.go: ResizeVolume + + +### Docs + +* reword text about breaking changes until first tag + +### Feat + +* added MigrateInstance and InstanceResizing from 4.0.1-4.0.3 API Changelog +* added gometalinter to travis builds +* added missing function and type comments as reported by linting tools +* supply json values for all fields, useful for mocking responses using linodego types +* use context channels in WaitFor\* functions +* add LinodeTypeClass type (enum) +* add TicketStatus type (enum) +* update template thing and add a test template + +### Fix + +* TransferQuota was TransferQuote (and not parsed from the api correctly) +* stackscripts udf was not parsed correctly +* add InstanceCreateOptions.PrivateIP +* check the WaitFor timeout before sleeping to avoid extra sleep +* various linting warnings and unhandled err results as reported by linting tools +* fix GetStackscript 404 handling + + + + +## [0.3.0](https://github.com/linode/linodego/compare/v0.2.0...0.3.0) (2018-08-15) + +### Breaking Changes + +* WaitForVolumeLinodeID return fetch volume for consistency with out WaitFors +* Moved linodego from chiefy to github.com/linode. Thanks [@chiefy](https://github.com/chiefy)! + + + +## [v0.2.0](https://github.com/linode/linodego/compare/v0.1.1...v0.2.0) (2018-08-11) + +### Breaking Changes + +* WaitFor\* should be client methods + *use `client.WaitFor...` rather than `linodego.WaitFor(..., client, ...)`* + +* remove ListInstanceSnapshots (does not exist in the API) + *this never worked, so shouldn't cause a problem* + +* Changes UpdateOptions and CreateOptions and similar Options parameters to values instead of pointers + *these were never optional and the function never updated any values in the Options structures* + +* fixed various optional/zero Update and Create options + *some values are now pointers, and vice-versa* + + * Changes InstanceUpdateOptions to use pointers for optional fields Backups and Alerts + * Changes InstanceClone's Disks and Configs to ints instead of strings + +* using new enum string aliased types where appropriate + *`InstanceSnapshotStatus`, `DiskFilesystem`, `NodeMode`* + +### Feature + +* add RescueInstance and RescueInstanceOptions +* add CreateImage, UpdateImage, DeleteImage +* add EnableInstanceBackups, CancelInstanceBackups, RestoreInstanceBackup +* add WatchdogEnabled to InstanceUpdateOptions + +### Fix + +* return Volume from AttachVolume instead of bool +* add more boilerplate to template.go +* nodebalancers and domain records had no pagination support +* NodeBalancer transfer stats are not int + +### Tests + +* add fixtures and tests for NodeBalancerNodes +* fix nodebalancer tests to handle changes due to random labels +* add tests for nodebalancers and nodebalancer configs +* added tests for Backups flow +* TestListInstanceBackups fixture is hand tweaked because repeated polled events + appear to get the tests stuck + +### Deps + +* update all dependencies to latest + + + +## [v0.1.1](https://github.com/linode/linodego/compare/v0.0.1...v0.1.0) (2018-07-30) + +Adds more Domain handling + +### Fixed + +* go-resty doesnt pass errors when content-type is not set +* Domain, DomainRecords, tests and fixtures + +### Added + +* add CreateDomainRecord, UpdateDomainRecord, and DeleteDomainRecord + + + +## [v0.1.0](https://github.com/linode/linodego/compare/v0.0.1...v0.1.0) (2018-07-23) + +Deals with NewClient and context for all http requests + +### Breaking Changes + +* changed `NewClient(token, *http.RoundTripper)` to `NewClient(*http.Client)` +* changed all `Client` `Get`, `List`, `Create`, `Update`, `Delete`, and `Wait` calls to take context as the first parameter + +### Fixed + +* fixed docs should now show Examples for more functions + +### Added + +* added `Client.SetBaseURL(url string)` + + +## v0.0.1 (2018-07-20) + +### Changed + +* Initial tagged release diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Gopkg.lock b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Gopkg.lock new file mode 100644 index 00000000000..a7ca4f01546 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Gopkg.lock @@ -0,0 +1,111 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + branch = "master" + digest = "1:6e1c13bc32e58ccb4afa1115a3ba4fc071d918ed897b40dfa323ffb3fcc6619d" + name = "github.com/dnaeon/go-vcr" + packages = [ + "cassette", + "recorder", + ] + pruneopts = "UT" + revision = "aafff18a5cc28fa0b2f26baf6a14472cda9b54c6" + +[[projects]] + digest = "1:97df918963298c287643883209a2c3f642e6593379f97ab400c2a2e219ab647d" + name = "github.com/golang/protobuf" + packages = ["proto"] + pruneopts = "UT" + revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5" + version = "v1.2.0" + +[[projects]] + branch = "master" + digest = "1:33b9d71d1dde2106309484a388eb7ba53cd1f67014e34a71f7b3dbc20bd186e5" + name = "golang.org/x/net" + packages = [ + "context", + "context/ctxhttp", + "idna", + "publicsuffix", + ] + pruneopts = "UT" + revision = "8a410e7b638dca158bf9e766925842f6651ff828" + +[[projects]] + branch = "master" + digest = "1:363b547c971a2b07474c598b6e9ebcb238d556d8a27f37b3895ad20cd50e7281" + name = "golang.org/x/oauth2" + packages = [ + ".", + "internal", + ] + pruneopts = "UT" + revision = "d2e6202438beef2727060aa7cabdd924d92ebfd9" + +[[projects]] + digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18" + name = "golang.org/x/text" + packages = [ + "collate", + "collate/build", + "internal/colltab", + "internal/gen", + "internal/tag", + "internal/triegen", + "internal/ucd", + "language", + "secure/bidirule", + "transform", + "unicode/bidi", + "unicode/cldr", + "unicode/norm", + "unicode/rangetable", + ] + pruneopts = "UT" + revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" + version = "v0.3.0" + +[[projects]] + digest = "1:328b5e4f197d928c444a51a75385f4b978915c0e75521f0ad6a3db976c97a7d3" + name = "google.golang.org/appengine" + packages = [ + "internal", + "internal/base", + "internal/datastore", + "internal/log", + "internal/remote_api", + "internal/urlfetch", + "urlfetch", + ] + pruneopts = "UT" + revision = "b1f26356af11148e710935ed1ac8a7f5702c7612" + version = "v1.1.0" + +[[projects]] + digest = "1:b7fc4c3fd91df516486f53cc86f4b55a0c815782dbe852c5a19cce8e6c577aac" + name = "gopkg.in/resty.v1" + packages = ["."] + pruneopts = "UT" + revision = "d4920dcf5b7689548a6db640278a9b35a5b48ec6" + version = "v1.9.1" + +[[projects]] + digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202" + name = "gopkg.in/yaml.v2" + packages = ["."] + pruneopts = "UT" + revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183" + version = "v2.2.1" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + input-imports = [ + "github.com/dnaeon/go-vcr/recorder", + "golang.org/x/oauth2", + "gopkg.in/resty.v1", + ] + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Gopkg.toml b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Gopkg.toml new file mode 100644 index 00000000000..2765dc95c4e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Gopkg.toml @@ -0,0 +1,29 @@ +# Gopkg.toml example +# +# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" +# +# [prune] +# non-go = false +# go-tests = true +# unused-packages = true + +[prune] + go-tests = true + unused-packages = true diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/LICENSE new file mode 100644 index 00000000000..6b0e6bace74 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Christopher "Chief" Najewicz + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Makefile b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Makefile new file mode 100644 index 00000000000..e5f533d428a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/Makefile @@ -0,0 +1,43 @@ +include .env + +.PHONY: vendor example refresh-fixtures clean-fixtures + +.PHONY: test +test: vendor + @LINODE_FIXTURE_MODE="play" \ + LINODE_TOKEN="awesometokenawesometokenawesometoken" \ + go test $(ARGS) + +$(GOPATH)/bin/dep: + @go get -u github.com/golang/dep/cmd/dep + +vendor: $(GOPATH)/bin/dep + @dep ensure + +example: + @go run example/main.go + +clean-fixtures: + @-rm fixtures/*.yaml + +refresh-fixtures: clean-fixtures fixtures + +.PHONY: fixtures +fixtures: + @echo "* Running fixtures" + @LINODE_TOKEN=$(LINODE_TOKEN) \ + LINODE_FIXTURE_MODE="record" go test $(ARGS) + @echo "* Santizing fixtures" + @for yaml in fixtures/*yaml; do \ + sed -E -i "" -e "s/$(LINODE_TOKEN)/awesometokenawesometokenawesometoken/g" \ + -e 's/20[0-9]{2}-[01][0-9]-[0-3][0-9]T[0-2][0-9]:[0-9]{2}:[0-9]{2}/2018-01-02T03:04:05/g' \ + -e 's/nb-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}\./nb-10-20-30-40./g' \ + -e 's/192\.168\.((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.)(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/192.168.030.040/g' \ + -e '/^192\.168/!s/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/10.20.30.40/g' \ + -e 's/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/1234::5678/g' \ + $$yaml; \ + done + +.PHONY: godoc +godoc: + @godoc -http=:6060 diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/README.md b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/README.md new file mode 100644 index 00000000000..7d0ae2bc12f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/README.md @@ -0,0 +1,178 @@ +# linodego + +[![Build Status](https://travis-ci.org/linode/linodego.svg?branch=master)](https://travis-ci.org/linode/linodego) +[![GoDoc](https://godoc.org/github.com/linode/linodego?status.svg)](https://godoc.org/github.com/linode/linodego) +[![Go Report Card](https://goreportcard.com/badge/github.com/linode/linodego)](https://goreportcard.com/report/github.com/linode/linodego) +[![codecov](https://codecov.io/gh/linode/linodego/branch/master/graph/badge.svg)](https://codecov.io/gh/linode/linodego) + +Go client for [Linode REST v4 API](https://developers.linode.com/api/v4) + +## Installation + +```sh +go get -u github.com/linode/linodego +``` + +## API Support + +Check [API_SUPPORT.md](API_SUPPORT.md) for current support of the Linode `v4` API endpoints. + +** Note: This project will change and break until we release a v1.0.0 tagged version. Breaking changes in v0.x.x will be denoted with a minor version bump (v0.2.4 -> v0.3.0) ** + +## Documentation + +See [godoc](https://godoc.org/github.com/linode/linodego) for a complete reference. + +The API generally follows the naming patterns prescribed in the [OpenAPIv3 document for Linode APIv4](https://developers.linode.com/api/v4). + +Deviations in naming have been made to avoid using "Linode" and "Instance" redundantly or inconsistently. + +A brief summary of the features offered in this API client are shown here. + +## Examples + +### General Usage + +```go +package main + +import ( + "context" + "fmt" + + "github.com/linode/linodego" + "golang.org/x/oauth2" + + "log" + "net/http" + "os" +) + +func main() { + apiKey, ok := os.LookupEnv("LINODE_TOKEN") + if !ok { + log.Fatal("Could not find LINODE_TOKEN, please assert it is set.") + } + tokenSource := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: apiKey}) + + oauth2Client := &http.Client{ + Transport: &oauth2.Transport{ + Source: tokenSource, + }, + } + + linodeClient := linodego.NewClient(oauth2Client) + linodeClient.SetDebug(true) + + res, err := linodeClient.GetInstance(context.Background(), 4090913) + if err != nil { + log.Fatal(err) + } + fmt.Printf("%v", res) +} +``` + +### Pagination + +#### Auto-Pagination Requests + +```go +kernels, err := linodego.ListKernels(context.Background(), nil) +// len(kernels) == 218 +``` + +Or, use a page value of "0": + +```go +opts := NewListOptions(0,"") +kernels, err := linodego.ListKernels(context.Background(), opts) +// len(kernels) == 218 +``` + +#### Single Page + +```go +opts := NewListOptions(2,"") +// or opts := ListOptions{PageOptions: &PageOptions: {Page: 2 }} +kernels, err := linodego.ListKernels(context.Background(), opts) +// len(kernels) == 100 +``` + +ListOptions are supplied as a pointer because the Pages and Results +values are set in the supplied ListOptions. + +```go +// opts.Results == 218 +``` + +#### Filtering + +```go +opts := ListOptions{Filter: "{\"mine\":true}"} +// or opts := NewListOptions(0, "{\"mine\":true}") +stackscripts, err := linodego.ListStackscripts(context.Background(), opts) +``` + +### Error Handling + +#### Getting Single Entities + +```go +linode, err := linodego.GetLinode(context.Background(), 555) // any Linode ID that does not exist or is not yours +// linode == nil: true +// err.Error() == "[404] Not Found" +// err.Code == "404" +// err.Message == "Not Found" +``` + +#### Lists + +For lists, the list is still returned as `[]`, but `err` works the same way as on the `Get` request. + +```go +linodes, err := linodego.ListLinodes(context.Background(), NewListOptions(0, "{\"foo\":bar}")) +// linodes == [] +// err.Error() == "[400] [X-Filter] Cannot filter on foo" +``` + +Otherwise sane requests beyond the last page do not trigger an error, just an empty result: + +```go +linodes, err := linodego.ListLinodes(context.Background(), NewListOptions(9999, "")) +// linodes == [] +// err = nil +``` + +### Writes + +When performing a `POST` or `PUT` request, multiple field related errors will be returned as a single error, currently like: + +```go +// err.Error() == "[400] [field1] foo problem; [field2] bar problem; [field3] baz problem" +``` + +## Tests + +Run `make test` to run the unit tests. This is the same as running `go test` except that `make test` will +execute the tests while playing back API response fixtures that were recorded during a previous development build. + +`go test` can be used without the fixtures. Copy `env.sample` to `.env` and configure your persistent test +settings, including an API token. + +`go test -short` can be used to run live API tests that do not require an account token. + +This will be simplified in future versions. + +To update the test fixtures, run `make fixtures`. This will record the API responses into the `fixtures/` directory. +Be careful about committing any sensitive account details. An attempt has been made to sanitize IP addresses and +dates, but no automated sanitization will be performed against `fixtures/*Account*.yaml`, for example. + +To prevent disrupting unaffected fixtures, target fixture generation like so: `make ARGS="-run TestListVolumes" fixtures`. + +## Discussion / Help + +Join us at [#linodego](https://gophers.slack.com/messages/CAG93EB2S) on the [gophers slack](https://gophers.slack.com) + +## License + +[MIT License](LICENSE) diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account.go new file mode 100644 index 00000000000..d6092f07d70 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account.go @@ -0,0 +1,45 @@ +package linodego + +import "context" + +// Account associated with the token in use +type Account struct { + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + Email string `json:"email"` + Company string `json:"company"` + Address1 string `json:"address_1"` + Address2 string `json:"address_2"` + Balance float32 `json:"balance"` + City string `json:"city"` + State string `json:"state"` + Zip string `json:"zip"` + Country string `json:"country"` + TaxID string `json:"tax_id"` + Phone string `json:"phone"` + CreditCard *CreditCard `json:"credit_card"` +} + +// CreditCard information associated with the Account. +type CreditCard struct { + LastFour string `json:"last_four"` + Expiry string `json:"expiry"` +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *Account) fixDates() *Account { + return v +} + +// GetAccount gets the contact and billing information related to the Account +func (c *Client) GetAccount(ctx context.Context) (*Account, error) { + e, err := c.Account.Endpoint() + if err != nil { + return nil, err + } + r, err := coupleAPIErrors(c.R(ctx).SetResult(&Account{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Account).fixDates(), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_events.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_events.go new file mode 100644 index 00000000000..e2365c35b6d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_events.go @@ -0,0 +1,277 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "log" + "strconv" + "strings" + "time" +) + +// Event represents an action taken on the Account. +type Event struct { + CreatedStr string `json:"created"` + + // The unique ID of this Event. + ID int `json:"id"` + + // Current status of the Event, Enum: "failed" "finished" "notification" "scheduled" "started" + Status EventStatus `json:"status"` + + // The action that caused this Event. New actions may be added in the future. + Action EventAction `json:"action"` + + // A percentage estimating the amount of time remaining for an Event. Returns null for notification events. + PercentComplete int `json:"percent_complete"` + + // The rate of completion of the Event. Only some Events will return rate; for example, migration and resize Events. + Rate *string `json:"rate"` + + // If this Event has been read. + Read bool `json:"read"` + + // If this Event has been seen. + Seen bool `json:"seen"` + + // The estimated time remaining until the completion of this Event. This value is only returned for in-progress events. + TimeRemainingMsg json.RawMessage `json:"time_remaining"` + TimeRemaining *int `json:"-"` + + // The username of the User who caused the Event. + Username string `json:"username"` + + // Detailed information about the Event's entity, including ID, type, label, and URL used to access it. + Entity *EventEntity `json:"entity"` + + // When this Event was created. + Created *time.Time `json:"-"` +} + +// EventAction constants start with Action and include all known Linode API Event Actions. +type EventAction string + +// EventAction constants represent the actions that cause an Event. New actions may be added in the future. +const ( + ActionBackupsEnable EventAction = "backups_enable" + ActionBackupsCancel EventAction = "backups_cancel" + ActionBackupsRestore EventAction = "backups_restore" + ActionCommunityQuestionReply EventAction = "community_question_reply" + ActionCreateCardUpdated EventAction = "credit_card_updated" + ActionDiskCreate EventAction = "disk_create" + ActionDiskDelete EventAction = "disk_delete" + ActionDiskDuplicate EventAction = "disk_duplicate" + ActionDiskImagize EventAction = "disk_imagize" + ActionDiskResize EventAction = "disk_resize" + ActionDNSRecordCreate EventAction = "dns_record_create" + ActionDNSRecordDelete EventAction = "dns_record_delete" + ActionDNSZoneCreate EventAction = "dns_zone_create" + ActionDNSZoneDelete EventAction = "dns_zone_delete" + ActionImageDelete EventAction = "image_delete" + ActionLinodeAddIP EventAction = "linode_addip" + ActionLinodeBoot EventAction = "linode_boot" + ActionLinodeClone EventAction = "linode_clone" + ActionLinodeCreate EventAction = "linode_create" + ActionLinodeDelete EventAction = "linode_delete" + ActionLinodeDeleteIP EventAction = "linode_deleteip" + ActionLinodeMigrate EventAction = "linode_migrate" + ActionLinodeMutate EventAction = "linode_mutate" + ActionLinodeReboot EventAction = "linode_reboot" + ActionLinodeRebuild EventAction = "linode_rebuild" + ActionLinodeResize EventAction = "linode_resize" + ActionLinodeShutdown EventAction = "linode_shutdown" + ActionLinodeSnapshot EventAction = "linode_snapshot" + ActionLongviewClientCreate EventAction = "longviewclient_create" + ActionLongviewClientDelete EventAction = "longviewclient_delete" + ActionManagedDisabled EventAction = "managed_disabled" + ActionManagedEnabled EventAction = "managed_enabled" + ActionManagedServiceCreate EventAction = "managed_service_create" + ActionManagedServiceDelete EventAction = "managed_service_delete" + ActionNodebalancerCreate EventAction = "nodebalancer_create" + ActionNodebalancerDelete EventAction = "nodebalancer_delete" + ActionNodebalancerConfigCreate EventAction = "nodebalancer_config_create" + ActionNodebalancerConfigDelete EventAction = "nodebalancer_config_delete" + ActionPasswordReset EventAction = "password_reset" + ActionPaymentSubmitted EventAction = "payment_submitted" + ActionStackScriptCreate EventAction = "stackscript_create" + ActionStackScriptDelete EventAction = "stackscript_delete" + ActionStackScriptPublicize EventAction = "stackscript_publicize" + ActionStackScriptRevise EventAction = "stackscript_revise" + ActionTFADisabled EventAction = "tfa_disabled" + ActionTFAEnabled EventAction = "tfa_enabled" + ActionTicketAttachmentUpload EventAction = "ticket_attachment_upload" + ActionTicketCreate EventAction = "ticket_create" + ActionTicketReply EventAction = "ticket_reply" + ActionVolumeAttach EventAction = "volume_attach" + ActionVolumeClone EventAction = "volume_clone" + ActionVolumeCreate EventAction = "volume_create" + ActionVolumeDelte EventAction = "volume_delete" + ActionVolumeDetach EventAction = "volume_detach" + ActionVolumeResize EventAction = "volume_resize" +) + +// EntityType constants start with Entity and include Linode API Event Entity Types +type EntityType string + +// EntityType contants are the entities an Event can be related to +const ( + EntityLinode EntityType = "linode" + EntityDisk EntityType = "disk" +) + +// EventStatus constants start with Event and include Linode API Event Status values +type EventStatus string + +// EventStatus constants reflect the current status of an Event +const ( + EventFailed EventStatus = "failed" + EventFinished EventStatus = "finished" + EventNotification EventStatus = "notification" + EventScheduled EventStatus = "scheduled" + EventStarted EventStatus = "started" +) + +// EventEntity provides detailed information about the Event's +// associated entity, including ID, Type, Label, and a URL that +// can be used to access it. +type EventEntity struct { + // ID may be a string or int, it depends on the EntityType + ID interface{} `json:"id"` + Label string `json:"label"` + Type EntityType `json:"type"` + URL string `json:"url"` +} + +// EventsPagedResponse represents a paginated Events API response +type EventsPagedResponse struct { + *PageOptions + Data []Event `json:"data"` +} + +// endpoint gets the endpoint URL for Event +func (EventsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Events.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// endpointWithID gets the endpoint URL for a specific Event +func (e Event) endpointWithID(c *Client) string { + endpoint, err := c.Events.Endpoint() + if err != nil { + panic(err) + } + endpoint = fmt.Sprintf("%s/%d", endpoint, e.ID) + return endpoint +} + +// appendData appends Events when processing paginated Event responses +func (resp *EventsPagedResponse) appendData(r *EventsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListEvents gets a collection of Event objects representing actions taken +// on the Account. The Events returned depend on the token grants and the grants +// of the associated user. +func (c *Client) ListEvents(ctx context.Context, opts *ListOptions) ([]Event, error) { + response := EventsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// GetEvent gets the Event with the Event ID +func (c *Client) GetEvent(ctx context.Context, id int) (*Event, error) { + e, err := c.Events.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := c.R(ctx).SetResult(&Event{}).Get(e) + if err != nil { + return nil, err + } + return r.Result().(*Event).fixDates(), nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (e *Event) fixDates() *Event { + e.Created, _ = parseDates(e.CreatedStr) + e.TimeRemaining = unmarshalTimeRemaining(e.TimeRemainingMsg) + return e +} + +// MarkEventRead marks a single Event as read. +func (c *Client) MarkEventRead(ctx context.Context, event *Event) error { + e := event.endpointWithID(c) + e = fmt.Sprintf("%s/read", e) + + _, err := coupleAPIErrors(c.R(ctx).Post(e)) + + return err +} + +// MarkEventsSeen marks all Events up to and including this Event by ID as seen. +func (c *Client) MarkEventsSeen(ctx context.Context, event *Event) error { + e := event.endpointWithID(c) + e = fmt.Sprintf("%s/seen", e) + + _, err := coupleAPIErrors(c.R(ctx).Post(e)) + + return err +} + +func unmarshalTimeRemaining(m json.RawMessage) *int { + jsonBytes, err := m.MarshalJSON() + if err != nil { + panic(jsonBytes) + } + + if len(jsonBytes) == 4 && string(jsonBytes) == "null" { + return nil + } + + var timeStr string + if err := json.Unmarshal(jsonBytes, &timeStr); err == nil && len(timeStr) > 0 { + if dur, err := durationToSeconds(timeStr); err != nil { + panic(err) + } else { + return &dur + } + } else { + var intPtr int + if err := json.Unmarshal(jsonBytes, &intPtr); err == nil { + return &intPtr + } + } + + log.Println("[WARN] Unexpected unmarshalTimeRemaining value: ", jsonBytes) + return nil +} + +// durationToSeconds takes a hh:mm:ss string and returns the number of seconds +func durationToSeconds(s string) (int, error) { + multipliers := [3]int{60 * 60, 60, 1} + segs := strings.Split(s, ":") + if len(segs) > len(multipliers) { + return 0, fmt.Errorf("too many ':' separators in time duration: %s", s) + } + var d int + l := len(segs) + for i := 0; i < l; i++ { + m, err := strconv.Atoi(segs[i]) + if err != nil { + return 0, err + } + d += m * multipliers[i+len(multipliers)-l] + } + return d, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_invoices.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_invoices.go new file mode 100644 index 00000000000..75ca2f73d23 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_invoices.go @@ -0,0 +1,125 @@ +package linodego + +import ( + "context" + "fmt" + "time" +) + +// Invoice structs reflect an invoice for billable activity on the account. +type Invoice struct { + DateStr string `json:"date"` + + ID int `json:"id"` + Label string `json:"label"` + Total float32 `json:"total"` + Date *time.Time `json:"-"` +} + +// InvoiceItem structs reflect an single billable activity associate with an Invoice +type InvoiceItem struct { + FromStr string `json:"from"` + ToStr string `json:"to"` + + Label string `json:"label"` + Type string `json:"type"` + UnitPrice int `json:"unitprice"` + Quantity int `json:"quantity"` + Amount float32 `json:"amount"` + From *time.Time `json:"-"` + To *time.Time `json:"-"` +} + +// InvoicesPagedResponse represents a paginated Invoice API response +type InvoicesPagedResponse struct { + *PageOptions + Data []Invoice `json:"data"` +} + +// endpoint gets the endpoint URL for Invoice +func (InvoicesPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Invoices.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Invoices when processing paginated Invoice responses +func (resp *InvoicesPagedResponse) appendData(r *InvoicesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListInvoices gets a paginated list of Invoices against the Account +func (c *Client) ListInvoices(ctx context.Context, opts *ListOptions) ([]Invoice, error) { + response := InvoicesPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *Invoice) fixDates() *Invoice { + v.Date, _ = parseDates(v.DateStr) + return v +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *InvoiceItem) fixDates() *InvoiceItem { + v.From, _ = parseDates(v.FromStr) + v.To, _ = parseDates(v.ToStr) + return v +} + +// GetInvoice gets the a single Invoice matching the provided ID +func (c *Client) GetInvoice(ctx context.Context, id int) (*Invoice, error) { + e, err := c.Invoices.Endpoint() + if err != nil { + return nil, err + } + + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&Invoice{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Invoice).fixDates(), nil +} + +// InvoiceItemsPagedResponse represents a paginated Invoice Item API response +type InvoiceItemsPagedResponse struct { + *PageOptions + Data []InvoiceItem `json:"data"` +} + +// endpointWithID gets the endpoint URL for InvoiceItems associated with a specific Invoice +func (InvoiceItemsPagedResponse) endpointWithID(c *Client, id int) string { + endpoint, err := c.InvoiceItems.endpointWithID(id) + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends InvoiceItems when processing paginated Invoice Item responses +func (resp *InvoiceItemsPagedResponse) appendData(r *InvoiceItemsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListInvoiceItems gets the invoice items associated with a specific Invoice +func (c *Client) ListInvoiceItems(ctx context.Context, id int, opts *ListOptions) ([]InvoiceItem, error) { + response := InvoiceItemsPagedResponse{} + err := c.listHelperWithID(ctx, &response, id, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_notifications.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_notifications.go new file mode 100644 index 00000000000..1d2de2e62cd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_notifications.go @@ -0,0 +1,101 @@ +package linodego + +import ( + "context" + "time" +) + +// Notification represents a notification on an Account +type Notification struct { + UntilStr string `json:"until"` + WhenStr string `json:"when"` + + Label string `json:"label"` + Body *string `json:"body"` + Message string `json:"message"` + Type NotificationType `json:"type"` + Severity NotificationSeverity `json:"severity"` + Entity *NotificationEntity `json:"entity"` + Until *time.Time `json:"-"` + When *time.Time `json:"-"` +} + +// NotificationEntity adds detailed information about the Notification. +// This could refer to the ticket that triggered the notification, for example. +type NotificationEntity struct { + ID int `json:"id"` + Label string `json:"label"` + Type string `json:"type"` + URL string `json:"url"` +} + +// NotificationSeverity constants start with Notification and include all known Linode API Notification Severities. +type NotificationSeverity string + +// NotificationSeverity constants represent the actions that cause a Notification. New severities may be added in the future. +const ( + NotificationMinor NotificationSeverity = "minor" + NotificationMajor NotificationSeverity = "major" + NotificationCritical NotificationSeverity = "critical" +) + +// NotificationType constants start with Notification and include all known Linode API Notification Types. +type NotificationType string + +// NotificationType constants represent the actions that cause a Notification. New types may be added in the future. +const ( + NotificationMigrationScheduled NotificationType = "migration_scheduled" + NotificationMigrationImminent NotificationType = "migration_imminent" + NotificationMigrationPending NotificationType = "migration_pending" + NotificationRebootScheduled NotificationType = "reboot_scheduled" + NotificationOutage NotificationType = "outage" + NotificationPaymentDue NotificationType = "payment_due" + NotificationTicketImportant NotificationType = "ticket_important" + NotificationTicketAbuse NotificationType = "ticket_abuse" + NotificationNotice NotificationType = "notice" + NotificationMaintenance NotificationType = "maintenance" +) + +// NotificationsPagedResponse represents a paginated Notifications API response +type NotificationsPagedResponse struct { + *PageOptions + Data []Notification `json:"data"` +} + +// endpoint gets the endpoint URL for Notification +func (NotificationsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Notifications.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Notifications when processing paginated Notification responses +func (resp *NotificationsPagedResponse) appendData(r *NotificationsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListNotifications gets a collection of Notification objects representing important, +// often time-sensitive items related to the Account. An account cannot interact directly with +// Notifications, and a Notification will disappear when the circumstances causing it +// have been resolved. For example, if the account has an important Ticket open, a response +// to the Ticket will dismiss the Notification. +func (c *Client) ListNotifications(ctx context.Context, opts *ListOptions) ([]Notification, error) { + response := NotificationsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *Notification) fixDates() *Notification { + v.Until, _ = parseDates(v.UntilStr) + v.When, _ = parseDates(v.WhenStr) + return v +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_users.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_users.go new file mode 100644 index 00000000000..a51fbe7f194 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/account_users.go @@ -0,0 +1,164 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" +) + +// User represents a User object +type User struct { + Username string `json:"username"` + Email string `json:"email"` + Restricted bool `json:"restricted"` + SSHKeys []string `json:"ssh_keys"` +} + +// UserCreateOptions fields are those accepted by CreateUser +type UserCreateOptions struct { + Username string `json:"username"` + Email string `json:"email"` + Restricted bool `json:"restricted,omitempty"` +} + +// UserUpdateOptions fields are those accepted by UpdateUser +type UserUpdateOptions struct { + Username string `json:"username,omitempty"` + Email string `json:"email,omitempty"` + Restricted *bool `json:"restricted,omitempty"` + SSHKeys *[]string `json:"ssh_keys,omitempty"` +} + +// GetCreateOptions converts a User to UserCreateOptions for use in CreateUser +func (i User) GetCreateOptions() (o UserCreateOptions) { + o.Username = i.Username + o.Email = i.Email + o.Restricted = i.Restricted + return +} + +// GetUpdateOptions converts a User to UserUpdateOptions for use in UpdateUser +func (i User) GetUpdateOptions() (o UserUpdateOptions) { + o.Username = i.Username + o.Email = i.Email + o.Restricted = copyBool(&i.Restricted) + return +} + +// UsersPagedResponse represents a paginated User API response +type UsersPagedResponse struct { + *PageOptions + Data []User `json:"data"` +} + +// endpoint gets the endpoint URL for User +func (UsersPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Users.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Users when processing paginated User responses +func (resp *UsersPagedResponse) appendData(r *UsersPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListUsers lists Users on the account +func (c *Client) ListUsers(ctx context.Context, opts *ListOptions) ([]User, error) { + response := UsersPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (i *User) fixDates() *User { + return i +} + +// GetUser gets the user with the provided ID +func (c *Client) GetUser(ctx context.Context, id string) (*User, error) { + e, err := c.Users.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&User{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*User).fixDates(), nil +} + +// CreateUser creates a User. The email address must be confirmed before the +// User account can be accessed. +func (c *Client) CreateUser(ctx context.Context, createOpts UserCreateOptions) (*User, error) { + var body string + e, err := c.Users.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&User{}) + + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*User).fixDates(), nil +} + +// UpdateUser updates the User with the specified id +func (c *Client) UpdateUser(ctx context.Context, id string, updateOpts UserUpdateOptions) (*User, error) { + var body string + e, err := c.Users.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + + req := c.R(ctx).SetResult(&User{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*User).fixDates(), nil +} + +// DeleteUser deletes the User with the specified id +func (c *Client) DeleteUser(ctx context.Context, id string) error { + e, err := c.Users.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%s", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/client.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/client.go new file mode 100644 index 00000000000..224a496decb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/client.go @@ -0,0 +1,257 @@ +package linodego + +import ( + "context" + "fmt" + "log" + "net/http" + "os" + "strconv" + "time" + + "gopkg.in/resty.v1" +) + +const ( + // APIHost Linode API hostname + APIHost = "api.linode.com" + // APIVersion Linode API version + APIVersion = "v4" + // APIProto connect to API with http(s) + APIProto = "https" + // Version of linodego + Version = "0.7.0" + // APIEnvVar environment var to check for API token + APIEnvVar = "LINODE_TOKEN" + // APISecondsPerPoll how frequently to poll for new Events or Status in WaitFor functions + APISecondsPerPoll = 3 + // DefaultUserAgent is the default User-Agent sent in HTTP request headers + DefaultUserAgent = "linodego " + Version + " https://github.com/linode/linodego" +) + +var ( + envDebug = false +) + +// Client is a wrapper around the Resty client +type Client struct { + resty *resty.Client + userAgent string + resources map[string]*Resource + debug bool + + millisecondsPerPoll time.Duration + + Images *Resource + InstanceDisks *Resource + InstanceConfigs *Resource + InstanceSnapshots *Resource + InstanceIPs *Resource + InstanceVolumes *Resource + Instances *Resource + IPAddresses *Resource + IPv6Pools *Resource + IPv6Ranges *Resource + Regions *Resource + StackScripts *Resource + Volumes *Resource + Kernels *Resource + Types *Resource + Domains *Resource + DomainRecords *Resource + Longview *Resource + LongviewClients *Resource + LongviewSubscriptions *Resource + NodeBalancers *Resource + NodeBalancerConfigs *Resource + NodeBalancerNodes *Resource + SSHKeys *Resource + Tickets *Resource + Tokens *Resource + Token *Resource + Account *Resource + Invoices *Resource + InvoiceItems *Resource + Events *Resource + Notifications *Resource + Profile *Resource + Managed *Resource + Tags *Resource + Users *Resource +} + +func init() { + // Wether or not we will enable Resty debugging output + if apiDebug, ok := os.LookupEnv("LINODE_DEBUG"); ok { + if parsed, err := strconv.ParseBool(apiDebug); err == nil { + envDebug = parsed + log.Println("[INFO] LINODE_DEBUG being set to", envDebug) + } else { + log.Println("[WARN] LINODE_DEBUG should be an integer, 0 or 1") + } + } + +} + +// SetUserAgent sets a custom user-agent for HTTP requests +func (c *Client) SetUserAgent(ua string) *Client { + c.userAgent = ua + c.resty.SetHeader("User-Agent", c.userAgent) + + return c +} + +// R wraps resty's R method +func (c *Client) R(ctx context.Context) *resty.Request { + return c.resty.R(). + ExpectContentType("application/json"). + SetHeader("Content-Type", "application/json"). + SetContext(ctx). + SetError(APIError{}) +} + +// SetDebug sets the debug on resty's client +func (c *Client) SetDebug(debug bool) *Client { + c.debug = debug + c.resty.SetDebug(debug) + return c +} + +// SetBaseURL sets the base URL of the Linode v4 API (https://api.linode.com/v4) +func (c *Client) SetBaseURL(url string) *Client { + c.resty.SetHostURL(url) + return c +} + +// SetPollDelay sets the number of milliseconds to wait between events or status polls. +// Affects all WaitFor* functions. +func (c *Client) SetPollDelay(delay time.Duration) *Client { + c.millisecondsPerPoll = delay + return c +} + +// Resource looks up a resource by name +func (c Client) Resource(resourceName string) *Resource { + selectedResource, ok := c.resources[resourceName] + if !ok { + log.Fatalf("Could not find resource named '%s', exiting.", resourceName) + } + return selectedResource +} + +// NewClient factory to create new Client struct +func NewClient(hc *http.Client) (client Client) { + restyClient := resty.NewWithClient(hc) + client.resty = restyClient + client.SetUserAgent(DefaultUserAgent) + client.SetBaseURL(fmt.Sprintf("%s://%s/%s", APIProto, APIHost, APIVersion)) + client.SetPollDelay(1000 * APISecondsPerPoll) + + resources := map[string]*Resource{ + stackscriptsName: NewResource(&client, stackscriptsName, stackscriptsEndpoint, false, Stackscript{}, StackscriptsPagedResponse{}), + imagesName: NewResource(&client, imagesName, imagesEndpoint, false, Image{}, ImagesPagedResponse{}), + instancesName: NewResource(&client, instancesName, instancesEndpoint, false, Instance{}, InstancesPagedResponse{}), + instanceDisksName: NewResource(&client, instanceDisksName, instanceDisksEndpoint, true, InstanceDisk{}, InstanceDisksPagedResponse{}), + instanceConfigsName: NewResource(&client, instanceConfigsName, instanceConfigsEndpoint, true, InstanceConfig{}, InstanceConfigsPagedResponse{}), + instanceSnapshotsName: NewResource(&client, instanceSnapshotsName, instanceSnapshotsEndpoint, true, InstanceSnapshot{}, nil), + instanceIPsName: NewResource(&client, instanceIPsName, instanceIPsEndpoint, true, InstanceIP{}, nil), // really? + instanceVolumesName: NewResource(&client, instanceVolumesName, instanceVolumesEndpoint, true, nil, InstanceVolumesPagedResponse{}), // really? + ipaddressesName: NewResource(&client, ipaddressesName, ipaddressesEndpoint, false, nil, IPAddressesPagedResponse{}), // really? + ipv6poolsName: NewResource(&client, ipv6poolsName, ipv6poolsEndpoint, false, nil, IPv6PoolsPagedResponse{}), // really? + ipv6rangesName: NewResource(&client, ipv6rangesName, ipv6rangesEndpoint, false, IPv6Range{}, IPv6RangesPagedResponse{}), + regionsName: NewResource(&client, regionsName, regionsEndpoint, false, Region{}, RegionsPagedResponse{}), + volumesName: NewResource(&client, volumesName, volumesEndpoint, false, Volume{}, VolumesPagedResponse{}), + kernelsName: NewResource(&client, kernelsName, kernelsEndpoint, false, LinodeKernel{}, LinodeKernelsPagedResponse{}), + typesName: NewResource(&client, typesName, typesEndpoint, false, LinodeType{}, LinodeTypesPagedResponse{}), + domainsName: NewResource(&client, domainsName, domainsEndpoint, false, Domain{}, DomainsPagedResponse{}), + domainRecordsName: NewResource(&client, domainRecordsName, domainRecordsEndpoint, true, DomainRecord{}, DomainRecordsPagedResponse{}), + longviewName: NewResource(&client, longviewName, longviewEndpoint, false, nil, nil), // really? + longviewclientsName: NewResource(&client, longviewclientsName, longviewclientsEndpoint, false, LongviewClient{}, LongviewClientsPagedResponse{}), + longviewsubscriptionsName: NewResource(&client, longviewsubscriptionsName, longviewsubscriptionsEndpoint, false, LongviewSubscription{}, LongviewSubscriptionsPagedResponse{}), + nodebalancersName: NewResource(&client, nodebalancersName, nodebalancersEndpoint, false, NodeBalancer{}, NodeBalancerConfigsPagedResponse{}), + nodebalancerconfigsName: NewResource(&client, nodebalancerconfigsName, nodebalancerconfigsEndpoint, true, NodeBalancerConfig{}, NodeBalancerConfigsPagedResponse{}), + nodebalancernodesName: NewResource(&client, nodebalancernodesName, nodebalancernodesEndpoint, true, NodeBalancerNode{}, NodeBalancerNodesPagedResponse{}), + notificationsName: NewResource(&client, notificationsName, notificationsEndpoint, false, Notification{}, NotificationsPagedResponse{}), + sshkeysName: NewResource(&client, sshkeysName, sshkeysEndpoint, false, SSHKey{}, SSHKeysPagedResponse{}), + ticketsName: NewResource(&client, ticketsName, ticketsEndpoint, false, Ticket{}, TicketsPagedResponse{}), + tokensName: NewResource(&client, tokensName, tokensEndpoint, false, Token{}, TokensPagedResponse{}), + accountName: NewResource(&client, accountName, accountEndpoint, false, Account{}, nil), // really? + eventsName: NewResource(&client, eventsName, eventsEndpoint, false, Event{}, EventsPagedResponse{}), + invoicesName: NewResource(&client, invoicesName, invoicesEndpoint, false, Invoice{}, InvoicesPagedResponse{}), + invoiceItemsName: NewResource(&client, invoiceItemsName, invoiceItemsEndpoint, true, InvoiceItem{}, InvoiceItemsPagedResponse{}), + profileName: NewResource(&client, profileName, profileEndpoint, false, nil, nil), // really? + managedName: NewResource(&client, managedName, managedEndpoint, false, nil, nil), // really? + tagsName: NewResource(&client, tagsName, tagsEndpoint, false, Tag{}, TagsPagedResponse{}), + usersName: NewResource(&client, usersName, usersEndpoint, false, User{}, UsersPagedResponse{}), + } + + client.resources = resources + + client.SetDebug(envDebug) + client.Images = resources[imagesName] + client.StackScripts = resources[stackscriptsName] + client.Instances = resources[instancesName] + client.Regions = resources[regionsName] + client.InstanceDisks = resources[instanceDisksName] + client.InstanceConfigs = resources[instanceConfigsName] + client.InstanceSnapshots = resources[instanceSnapshotsName] + client.InstanceIPs = resources[instanceIPsName] + client.InstanceVolumes = resources[instanceVolumesName] + client.IPAddresses = resources[ipaddressesName] + client.IPv6Pools = resources[ipv6poolsName] + client.IPv6Ranges = resources[ipv6rangesName] + client.Volumes = resources[volumesName] + client.Kernels = resources[kernelsName] + client.Types = resources[typesName] + client.Domains = resources[domainsName] + client.DomainRecords = resources[domainRecordsName] + client.Longview = resources[longviewName] + client.LongviewSubscriptions = resources[longviewsubscriptionsName] + client.NodeBalancers = resources[nodebalancersName] + client.NodeBalancerConfigs = resources[nodebalancerconfigsName] + client.NodeBalancerNodes = resources[nodebalancernodesName] + client.Notifications = resources[notificationsName] + client.SSHKeys = resources[sshkeysName] + client.Tickets = resources[ticketsName] + client.Tokens = resources[tokensName] + client.Account = resources[accountName] + client.Events = resources[eventsName] + client.Invoices = resources[invoicesName] + client.Profile = resources[profileName] + client.Managed = resources[managedName] + client.Tags = resources[tagsName] + client.Users = resources[usersName] + return +} + +func copyBool(bPtr *bool) *bool { + if bPtr == nil { + return nil + } + var t = *bPtr + return &t +} + +func copyInt(iPtr *int) *int { + if iPtr == nil { + return nil + } + var t = *iPtr + return &t +} + +func copyString(sPtr *string) *string { + if sPtr == nil { + return nil + } + var t = *sPtr + return &t +} + +func copyTime(tPtr *time.Time) *time.Time { + if tPtr == nil { + return nil + } + var t = *tPtr + return &t +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/domain_records.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/domain_records.go new file mode 100644 index 00000000000..215ac800451 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/domain_records.go @@ -0,0 +1,195 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" +) + +// DomainRecord represents a DomainRecord object +type DomainRecord struct { + ID int `json:"id"` + Type DomainRecordType `json:"type"` + Name string `json:"name"` + Target string `json:"target"` + Priority int `json:"priority"` + Weight int `json:"weight"` + Port int `json:"port"` + Service *string `json:"service"` + Protocol *string `json:"protocol"` + TTLSec int `json:"ttl_sec"` + Tag *string `json:"tag"` +} + +// DomainRecordCreateOptions fields are those accepted by CreateDomainRecord +type DomainRecordCreateOptions struct { + Type DomainRecordType `json:"type"` + Name string `json:"name"` + Target string `json:"target"` + Priority *int `json:"priority,omitempty"` + Weight *int `json:"weight,omitempty"` + Port *int `json:"port,omitempty"` + Service *string `json:"service,omitempty"` + Protocol *string `json:"protocol,omitempty"` + TTLSec int `json:"ttl_sec,omitempty"` // 0 is not accepted by Linode, so can be omitted + Tag *string `json:"tag,omitempty"` +} + +// DomainRecordUpdateOptions fields are those accepted by UpdateDomainRecord +type DomainRecordUpdateOptions struct { + Type DomainRecordType `json:"type,omitempty"` + Name string `json:"name,omitempty"` + Target string `json:"target,omitempty"` + Priority *int `json:"priority,omitempty"` // 0 is valid, so omit only nil values + Weight *int `json:"weight,omitempty"` // 0 is valid, so omit only nil values + Port *int `json:"port,omitempty"` // 0 is valid to spec, so omit only nil values + Service *string `json:"service,omitempty"` + Protocol *string `json:"protocol,omitempty"` + TTLSec int `json:"ttl_sec,omitempty"` // 0 is not accepted by Linode, so can be omitted + Tag *string `json:"tag,omitempty"` +} + +// DomainRecordType constants start with RecordType and include Linode API Domain Record Types +type DomainRecordType string + +// DomainRecordType contants are the DNS record types a DomainRecord can assign +const ( + RecordTypeA DomainRecordType = "A" + RecordTypeAAAA DomainRecordType = "AAAA" + RecordTypeNS DomainRecordType = "NS" + RecordTypeMX DomainRecordType = "MX" + RecordTypeCNAME DomainRecordType = "CNAME" + RecordTypeTXT DomainRecordType = "TXT" + RecordTypeSRV DomainRecordType = "SRV" + RecordTypePTR DomainRecordType = "PTR" + RecordTypeCAA DomainRecordType = "CAA" +) + +// GetUpdateOptions converts a DomainRecord to DomainRecordUpdateOptions for use in UpdateDomainRecord +func (d DomainRecord) GetUpdateOptions() (du DomainRecordUpdateOptions) { + du.Type = d.Type + du.Name = d.Name + du.Target = d.Target + du.Priority = copyInt(&d.Priority) + du.Weight = copyInt(&d.Weight) + du.Port = copyInt(&d.Port) + du.Service = copyString(d.Service) + du.Protocol = copyString(d.Protocol) + du.TTLSec = d.TTLSec + du.Tag = copyString(d.Tag) + return +} + +// DomainRecordsPagedResponse represents a paginated DomainRecord API response +type DomainRecordsPagedResponse struct { + *PageOptions + Data []DomainRecord `json:"data"` +} + +// endpoint gets the endpoint URL for InstanceConfig +func (DomainRecordsPagedResponse) endpointWithID(c *Client, id int) string { + endpoint, err := c.DomainRecords.endpointWithID(id) + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends DomainRecords when processing paginated DomainRecord responses +func (resp *DomainRecordsPagedResponse) appendData(r *DomainRecordsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListDomainRecords lists DomainRecords +func (c *Client) ListDomainRecords(ctx context.Context, domainID int, opts *ListOptions) ([]DomainRecord, error) { + response := DomainRecordsPagedResponse{} + err := c.listHelperWithID(ctx, &response, domainID, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (d *DomainRecord) fixDates() *DomainRecord { + return d +} + +// GetDomainRecord gets the domainrecord with the provided ID +func (c *Client) GetDomainRecord(ctx context.Context, domainID int, id int) (*DomainRecord, error) { + e, err := c.DomainRecords.endpointWithID(domainID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&DomainRecord{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*DomainRecord), nil +} + +// CreateDomainRecord creates a DomainRecord +func (c *Client) CreateDomainRecord(ctx context.Context, domainID int, domainrecord DomainRecordCreateOptions) (*DomainRecord, error) { + var body string + e, err := c.DomainRecords.endpointWithID(domainID) + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&DomainRecord{}) + + bodyData, err := json.Marshal(domainrecord) + if err != nil { + return nil, NewError(err) + } + body = string(bodyData) + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*DomainRecord).fixDates(), nil +} + +// UpdateDomainRecord updates the DomainRecord with the specified id +func (c *Client) UpdateDomainRecord(ctx context.Context, domainID int, id int, domainrecord DomainRecordUpdateOptions) (*DomainRecord, error) { + var body string + e, err := c.DomainRecords.endpointWithID(domainID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + + req := c.R(ctx).SetResult(&DomainRecord{}) + + if bodyData, err := json.Marshal(domainrecord); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*DomainRecord).fixDates(), nil +} + +// DeleteDomainRecord deletes the DomainRecord with the specified id +func (c *Client) DeleteDomainRecord(ctx context.Context, domainID int, id int) error { + e, err := c.DomainRecords.endpointWithID(domainID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/domains.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/domains.go new file mode 100644 index 00000000000..43e4a65f5ee --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/domains.go @@ -0,0 +1,295 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" +) + +// Domain represents a Domain object +type Domain struct { + // This Domain's unique ID + ID int `json:"id"` + + // The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain. + Domain string `json:"domain"` + + // If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave). + Type DomainType `json:"type"` // Enum:"master" "slave" + + // Deprecated: The group this Domain belongs to. This is for display purposes only. + Group string `json:"group"` + + // Used to control whether this Domain is currently being rendered. + Status DomainStatus `json:"status"` // Enum:"disabled" "active" "edit_mode" "has_errors" + + // A description for this Domain. This is for display purposes only. + Description string `json:"description"` + + // Start of Authority email address. This is required for master Domains. + SOAEmail string `json:"soa_email"` + + // The interval, in seconds, at which a failed refresh should be retried. + // Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + RetrySec int `json:"retry_sec"` + + // The IP addresses representing the master DNS for this Domain. + MasterIPs []string `json:"master_ips"` + + // The list of IPs that may perform a zone transfer for this Domain. This is potentially dangerous, and should be set to an empty list unless you intend to use it. + AXfrIPs []string `json:"axfr_ips"` + + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []string `json:"tags"` + + // The amount of time in seconds that may pass before this Domain is no longer authoritative. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + ExpireSec int `json:"expire_sec"` + + // The amount of time in seconds before this Domain should be refreshed. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + RefreshSec int `json:"refresh_sec"` + + // "Time to Live" - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + TTLSec int `json:"ttl_sec"` +} + +// DomainCreateOptions fields are those accepted by CreateDomain +type DomainCreateOptions struct { + // The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain. + Domain string `json:"domain"` + + // If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave). + // Enum:"master" "slave" + Type DomainType `json:"type"` + + // Deprecated: The group this Domain belongs to. This is for display purposes only. + Group string `json:"group,omitempty"` + + // Used to control whether this Domain is currently being rendered. + // Enum:"disabled" "active" "edit_mode" "has_errors" + Status DomainStatus `json:"status,omitempty"` + + // A description for this Domain. This is for display purposes only. + Description string `json:"description,omitempty"` + + // Start of Authority email address. This is required for master Domains. + SOAEmail string `json:"soa_email,omitempty"` + + // The interval, in seconds, at which a failed refresh should be retried. + // Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + RetrySec int `json:"retry_sec,omitempty"` + + // The IP addresses representing the master DNS for this Domain. + MasterIPs []string `json:"master_ips,omitempty"` + + // The list of IPs that may perform a zone transfer for this Domain. This is potentially dangerous, and should be set to an empty list unless you intend to use it. + AXfrIPs []string `json:"axfr_ips,omitempty"` + + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []string `json:"tags"` + + // The amount of time in seconds that may pass before this Domain is no longer authoritative. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + ExpireSec int `json:"expire_sec,omitempty"` + + // The amount of time in seconds before this Domain should be refreshed. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + RefreshSec int `json:"refresh_sec,omitempty"` + + // "Time to Live" - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + TTLSec int `json:"ttl_sec,omitempty"` +} + +// DomainUpdateOptions converts a Domain to DomainUpdateOptions for use in UpdateDomain +type DomainUpdateOptions struct { + // The domain this Domain represents. These must be unique in our system; you cannot have two Domains representing the same domain. + Domain string `json:"domain,omitempty"` + + // If this Domain represents the authoritative source of information for the domain it describes, or if it is a read-only copy of a master (also called a slave). + // Enum:"master" "slave" + Type DomainType `json:"type,omitempty"` + + // Deprecated: The group this Domain belongs to. This is for display purposes only. + Group string `json:"group,omitempty"` + + // Used to control whether this Domain is currently being rendered. + // Enum:"disabled" "active" "edit_mode" "has_errors" + Status DomainStatus `json:"status,omitempty"` + + // A description for this Domain. This is for display purposes only. + Description string `json:"description,omitempty"` + + // Start of Authority email address. This is required for master Domains. + SOAEmail string `json:"soa_email,omitempty"` + + // The interval, in seconds, at which a failed refresh should be retried. + // Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + RetrySec int `json:"retry_sec,omitempty"` + + // The IP addresses representing the master DNS for this Domain. + MasterIPs []string `json:"master_ips,omitempty"` + + // The list of IPs that may perform a zone transfer for this Domain. This is potentially dangerous, and should be set to an empty list unless you intend to use it. + AXfrIPs []string `json:"axfr_ips,omitempty"` + + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []string `json:"tags"` + + // The amount of time in seconds that may pass before this Domain is no longer authoritative. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + ExpireSec int `json:"expire_sec,omitempty"` + + // The amount of time in seconds before this Domain should be refreshed. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + RefreshSec int `json:"refresh_sec,omitempty"` + + // "Time to Live" - the amount of time in seconds that this Domain's records may be cached by resolvers or other domain servers. Valid values are 300, 3600, 7200, 14400, 28800, 57600, 86400, 172800, 345600, 604800, 1209600, and 2419200 - any other value will be rounded to the nearest valid value. + TTLSec int `json:"ttl_sec,omitempty"` +} + +// DomainType constants start with DomainType and include Linode API Domain Type values +type DomainType string + +// DomainType constants reflect the DNS zone type of a Domain +const ( + DomainTypeMaster DomainType = "master" + DomainTypeSlave DomainType = "slave" +) + +// DomainStatus constants start with DomainStatus and include Linode API Domain Status values +type DomainStatus string + +// DomainStatus constants reflect the current status of a Domain +const ( + DomainStatusDisabled DomainStatus = "disabled" + DomainStatusActive DomainStatus = "active" + DomainStatusEditMode DomainStatus = "edit_mode" + DomainStatusHasErrors DomainStatus = "has_errors" +) + +// GetUpdateOptions converts a Domain to DomainUpdateOptions for use in UpdateDomain +func (d Domain) GetUpdateOptions() (du DomainUpdateOptions) { + du.Domain = d.Domain + du.Type = d.Type + du.Group = d.Group + du.Status = d.Status + du.Description = d.Description + du.SOAEmail = d.SOAEmail + du.RetrySec = d.RetrySec + du.MasterIPs = d.MasterIPs + du.AXfrIPs = d.AXfrIPs + du.Tags = d.Tags + du.ExpireSec = d.ExpireSec + du.RefreshSec = d.RefreshSec + du.TTLSec = d.TTLSec + return +} + +// DomainsPagedResponse represents a paginated Domain API response +type DomainsPagedResponse struct { + *PageOptions + Data []Domain `json:"data"` +} + +// endpoint gets the endpoint URL for Domain +func (DomainsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Domains.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Domains when processing paginated Domain responses +func (resp *DomainsPagedResponse) appendData(r *DomainsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListDomains lists Domains +func (c *Client) ListDomains(ctx context.Context, opts *ListOptions) ([]Domain, error) { + response := DomainsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (d *Domain) fixDates() *Domain { + return d +} + +// GetDomain gets the domain with the provided ID +func (c *Client) GetDomain(ctx context.Context, id int) (*Domain, error) { + e, err := c.Domains.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&Domain{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Domain).fixDates(), nil +} + +// CreateDomain creates a Domain +func (c *Client) CreateDomain(ctx context.Context, domain DomainCreateOptions) (*Domain, error) { + var body string + e, err := c.Domains.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&Domain{}) + + bodyData, err := json.Marshal(domain) + if err != nil { + return nil, NewError(err) + } + body = string(bodyData) + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Domain).fixDates(), nil +} + +// UpdateDomain updates the Domain with the specified id +func (c *Client) UpdateDomain(ctx context.Context, id int, domain DomainUpdateOptions) (*Domain, error) { + var body string + e, err := c.Domains.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + + req := c.R(ctx).SetResult(&Domain{}) + + if bodyData, err := json.Marshal(domain); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Domain).fixDates(), nil +} + +// DeleteDomain deletes the Domain with the specified id +func (c *Client) DeleteDomain(ctx context.Context, id int) error { + e, err := c.Domains.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/env.sample b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/env.sample new file mode 100644 index 00000000000..b1c9d180349 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/env.sample @@ -0,0 +1,2 @@ +LINODE_TOKEN= +LINODE_DEBUG=0 diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/errors.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/errors.go new file mode 100644 index 00000000000..9ceb881a21b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/errors.go @@ -0,0 +1,109 @@ +package linodego + +import ( + "fmt" + "log" + "net/http" + "strings" + + "gopkg.in/resty.v1" +) + +const ( + // ErrorFromString is the Code identifying Errors created by string types + ErrorFromString = 1 + // ErrorFromError is the Code identifying Errors created by error types + ErrorFromError = 2 + // ErrorFromStringer is the Code identifying Errors created by fmt.Stringer types + ErrorFromStringer = 3 +) + +// Error wraps the LinodeGo error with the relevant http.Response +type Error struct { + Response *http.Response + Code int + Message string +} + +// APIErrorReason is an individual invalid request message returned by the Linode API +type APIErrorReason struct { + Reason string `json:"reason"` + Field string `json:"field"` +} + +func (r APIErrorReason) Error() string { + if len(r.Field) == 0 { + return r.Reason + } + return fmt.Sprintf("[%s] %s", r.Field, r.Reason) +} + +// APIError is the error-set returned by the Linode API when presented with an invalid request +type APIError struct { + Errors []APIErrorReason `json:"errors"` +} + +func coupleAPIErrors(r *resty.Response, err error) (*resty.Response, error) { + if err != nil { + return nil, NewError(err) + } + + if r.Error() != nil { + apiError, ok := r.Error().(*APIError) + if !ok || (ok && len(apiError.Errors) == 0) { + return r, nil + } + return nil, NewError(r) + } + + return r, nil +} + +func (e APIError) Error() string { + var x []string + for _, msg := range e.Errors { + x = append(x, msg.Error()) + } + return strings.Join(x, "; ") +} + +func (g Error) Error() string { + return fmt.Sprintf("[%03d] %s", g.Code, g.Message) +} + +// NewError creates a linodego.Error with a Code identifying the source err type, +// - ErrorFromString (1) from a string +// - ErrorFromError (2) for an error +// - ErrorFromStringer (3) for a Stringer +// - HTTP Status Codes (100-600) for a resty.Response object +func NewError(err interface{}) *Error { + if err == nil { + return nil + } + + switch e := err.(type) { + case *Error: + return e + case *resty.Response: + apiError, ok := e.Error().(*APIError) + + if !ok { + log.Fatalln("Unexpected Resty Error Response") + } + + return &Error{ + Code: e.RawResponse.StatusCode, + Message: apiError.Error(), + Response: e.RawResponse, + } + case error: + return &Error{Code: ErrorFromError, Message: e.Error()} + case string: + return &Error{Code: ErrorFromString, Message: e} + case fmt.Stringer: + return &Error{Code: ErrorFromStringer, Message: e.String()} + default: + log.Fatalln("Unsupported type to linodego.NewError") + panic(err) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/images.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/images.go new file mode 100644 index 00000000000..979ce2ed101 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/images.go @@ -0,0 +1,168 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// Image represents a deployable Image object for use with Linode Instances +type Image struct { + CreatedStr string `json:"created"` + ExpiryStr string `json:"expiry"` + ID string `json:"id"` + CreatedBy string `json:"created_by"` + Label string `json:"label"` + Description string `json:"description"` + Type string `json:"type"` + Vendor string `json:"vendor"` + Size int `json:"size"` + IsPublic bool `json:"is_public"` + Deprecated bool `json:"deprecated"` + + Created *time.Time `json:"-"` + Expiry *time.Time `json:"-"` +} + +// ImageCreateOptions fields are those accepted by CreateImage +type ImageCreateOptions struct { + DiskID int `json:"disk_id"` + Label string `json:"label"` + Description string `json:"description,omitempty"` +} + +// ImageUpdateOptions fields are those accepted by UpdateImage +type ImageUpdateOptions struct { + Label string `json:"label,omitempty"` + Description *string `json:"description,omitempty"` +} + +func (i *Image) fixDates() *Image { + i.Created, _ = parseDates(i.CreatedStr) + + if len(i.ExpiryStr) > 0 { + i.Expiry, _ = parseDates(i.ExpiryStr) + } else { + i.Expiry = nil + } + return i +} + +// GetUpdateOptions converts an Image to ImageUpdateOptions for use in UpdateImage +func (i Image) GetUpdateOptions() (iu ImageUpdateOptions) { + iu.Label = i.Label + iu.Description = copyString(&i.Description) + return +} + +// ImagesPagedResponse represents a linode API response for listing of images +type ImagesPagedResponse struct { + *PageOptions + Data []Image `json:"data"` +} + +func (ImagesPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Images.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +func (resp *ImagesPagedResponse) appendData(r *ImagesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListImages lists Images +func (c *Client) ListImages(ctx context.Context, opts *ListOptions) ([]Image, error) { + response := ImagesPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil + +} + +// GetImage gets the Image with the provided ID +func (c *Client) GetImage(ctx context.Context, id string) (*Image, error) { + e, err := c.Images.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + r, err := coupleAPIErrors(c.Images.R(ctx).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Image).fixDates(), nil +} + +// CreateImage creates a Image +func (c *Client) CreateImage(ctx context.Context, createOpts ImageCreateOptions) (*Image, error) { + var body string + e, err := c.Images.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&Image{}) + + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Image).fixDates(), nil +} + +// UpdateImage updates the Image with the specified id +func (c *Client) UpdateImage(ctx context.Context, id string, updateOpts ImageUpdateOptions) (*Image, error) { + var body string + e, err := c.Images.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + + req := c.R(ctx).SetResult(&Image{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Image).fixDates(), nil +} + +// DeleteImage deletes the Image with the specified id +func (c *Client) DeleteImage(ctx context.Context, id string) error { + e, err := c.Images.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%s", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_configs.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_configs.go new file mode 100644 index 00000000000..979a27495c5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_configs.go @@ -0,0 +1,246 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// InstanceConfig represents all of the settings that control the boot and run configuration of a Linode Instance +type InstanceConfig struct { + CreatedStr string `json:"created"` + UpdatedStr string `json:"updated"` + + ID int `json:"id"` + Label string `json:"label"` + Comments string `json:"comments"` + Devices *InstanceConfigDeviceMap `json:"devices"` + Helpers *InstanceConfigHelpers `json:"helpers"` + MemoryLimit int `json:"memory_limit"` + Kernel string `json:"kernel"` + InitRD *int `json:"init_rd"` + RootDevice string `json:"root_device"` + RunLevel string `json:"run_level"` + VirtMode string `json:"virt_mode"` + Created *time.Time `json:"-"` + Updated *time.Time `json:"-"` +} + +// InstanceConfigDevice contains either the DiskID or VolumeID assigned to a Config Device +type InstanceConfigDevice struct { + DiskID int `json:"disk_id,omitempty"` + VolumeID int `json:"volume_id,omitempty"` +} + +// InstanceConfigDeviceMap contains SDA-SDH InstanceConfigDevice settings +type InstanceConfigDeviceMap struct { + SDA *InstanceConfigDevice `json:"sda,omitempty"` + SDB *InstanceConfigDevice `json:"sdb,omitempty"` + SDC *InstanceConfigDevice `json:"sdc,omitempty"` + SDD *InstanceConfigDevice `json:"sdd,omitempty"` + SDE *InstanceConfigDevice `json:"sde,omitempty"` + SDF *InstanceConfigDevice `json:"sdf,omitempty"` + SDG *InstanceConfigDevice `json:"sdg,omitempty"` + SDH *InstanceConfigDevice `json:"sdh,omitempty"` +} + +// InstanceConfigHelpers are Instance Config options that control Linux distribution specific tweaks +type InstanceConfigHelpers struct { + UpdateDBDisabled bool `json:"updatedb_disabled"` + Distro bool `json:"distro"` + ModulesDep bool `json:"modules_dep"` + Network bool `json:"network"` + DevTmpFsAutomount bool `json:"devtmpfs_automount"` +} + +// InstanceConfigsPagedResponse represents a paginated InstanceConfig API response +type InstanceConfigsPagedResponse struct { + *PageOptions + Data []InstanceConfig `json:"data"` +} + +// InstanceConfigCreateOptions are InstanceConfig settings that can be used at creation +type InstanceConfigCreateOptions struct { + Label string `json:"label,omitempty"` + Comments string `json:"comments,omitempty"` + Devices InstanceConfigDeviceMap `json:"devices"` + Helpers *InstanceConfigHelpers `json:"helpers,omitempty"` + MemoryLimit int `json:"memory_limit,omitempty"` + Kernel string `json:"kernel,omitempty"` + InitRD int `json:"init_rd,omitempty"` + RootDevice *string `json:"root_device,omitempty"` + RunLevel string `json:"run_level,omitempty"` + VirtMode string `json:"virt_mode,omitempty"` +} + +// InstanceConfigUpdateOptions are InstanceConfig settings that can be used in updates +type InstanceConfigUpdateOptions struct { + Label string `json:"label,omitempty"` + Comments string `json:"comments"` + Devices *InstanceConfigDeviceMap `json:"devices,omitempty"` + Helpers *InstanceConfigHelpers `json:"helpers,omitempty"` + // MemoryLimit 0 means unlimitted, this is not omitted + MemoryLimit int `json:"memory_limit"` + Kernel string `json:"kernel,omitempty"` + // InitRD is nullable, permit the sending of null + InitRD *int `json:"init_rd"` + RootDevice string `json:"root_device,omitempty"` + RunLevel string `json:"run_level,omitempty"` + VirtMode string `json:"virt_mode,omitempty"` +} + +// GetCreateOptions converts a InstanceConfig to InstanceConfigCreateOptions for use in CreateInstanceConfig +func (i InstanceConfig) GetCreateOptions() InstanceConfigCreateOptions { + initrd := 0 + if i.InitRD != nil { + initrd = *i.InitRD + } + return InstanceConfigCreateOptions{ + Label: i.Label, + Comments: i.Comments, + Devices: *i.Devices, + Helpers: i.Helpers, + MemoryLimit: i.MemoryLimit, + Kernel: i.Kernel, + InitRD: initrd, + RootDevice: copyString(&i.RootDevice), + RunLevel: i.RunLevel, + VirtMode: i.VirtMode, + } +} + +// GetUpdateOptions converts a InstanceConfig to InstanceConfigUpdateOptions for use in UpdateInstanceConfig +func (i InstanceConfig) GetUpdateOptions() InstanceConfigUpdateOptions { + return InstanceConfigUpdateOptions{ + Label: i.Label, + Comments: i.Comments, + Devices: i.Devices, + Helpers: i.Helpers, + MemoryLimit: i.MemoryLimit, + Kernel: i.Kernel, + InitRD: copyInt(i.InitRD), + RootDevice: i.RootDevice, + RunLevel: i.RunLevel, + VirtMode: i.VirtMode, + } +} + +// endpointWithID gets the endpoint URL for InstanceConfigs of a given Instance +func (InstanceConfigsPagedResponse) endpointWithID(c *Client, id int) string { + endpoint, err := c.InstanceConfigs.endpointWithID(id) + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends InstanceConfigs when processing paginated InstanceConfig responses +func (resp *InstanceConfigsPagedResponse) appendData(r *InstanceConfigsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListInstanceConfigs lists InstanceConfigs +func (c *Client) ListInstanceConfigs(ctx context.Context, linodeID int, opts *ListOptions) ([]InstanceConfig, error) { + response := InstanceConfigsPagedResponse{} + err := c.listHelperWithID(ctx, &response, linodeID, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (i *InstanceConfig) fixDates() *InstanceConfig { + i.Created, _ = parseDates(i.CreatedStr) + i.Updated, _ = parseDates(i.UpdatedStr) + return i +} + +// GetInstanceConfig gets the template with the provided ID +func (c *Client) GetInstanceConfig(ctx context.Context, linodeID int, configID int) (*InstanceConfig, error) { + e, err := c.InstanceConfigs.endpointWithID(linodeID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, configID) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceConfig{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*InstanceConfig).fixDates(), nil +} + +// CreateInstanceConfig creates a new InstanceConfig for the given Instance +func (c *Client) CreateInstanceConfig(ctx context.Context, linodeID int, createOpts InstanceConfigCreateOptions) (*InstanceConfig, error) { + var body string + e, err := c.InstanceConfigs.endpointWithID(linodeID) + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&InstanceConfig{}) + + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, err + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + + return r.Result().(*InstanceConfig).fixDates(), nil +} + +// UpdateInstanceConfig update an InstanceConfig for the given Instance +func (c *Client) UpdateInstanceConfig(ctx context.Context, linodeID int, configID int, updateOpts InstanceConfigUpdateOptions) (*InstanceConfig, error) { + var body string + e, err := c.InstanceConfigs.endpointWithID(linodeID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, configID) + req := c.R(ctx).SetResult(&InstanceConfig{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, err + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + + return r.Result().(*InstanceConfig).fixDates(), nil +} + +// RenameInstanceConfig renames an InstanceConfig +func (c *Client) RenameInstanceConfig(ctx context.Context, linodeID int, configID int, label string) (*InstanceConfig, error) { + return c.UpdateInstanceConfig(ctx, linodeID, configID, InstanceConfigUpdateOptions{Label: label}) +} + +// DeleteInstanceConfig deletes a Linode InstanceConfig +func (c *Client) DeleteInstanceConfig(ctx context.Context, linodeID int, configID int) error { + e, err := c.InstanceConfigs.endpointWithID(linodeID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, configID) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_disks.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_disks.go new file mode 100644 index 00000000000..9b43d6b8d94 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_disks.go @@ -0,0 +1,251 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// InstanceDisk represents an Instance Disk object +type InstanceDisk struct { + CreatedStr string `json:"created"` + UpdatedStr string `json:"updated"` + + ID int `json:"id"` + Label string `json:"label"` + Status DiskStatus `json:"status"` + Size int `json:"size"` + Filesystem DiskFilesystem `json:"filesystem"` + Created time.Time `json:"-"` + Updated time.Time `json:"-"` +} + +// DiskFilesystem constants start with Filesystem and include Linode API Filesystems +type DiskFilesystem string + +// DiskFilesystem constants represent the filesystems types an Instance Disk may use +const ( + FilesystemRaw DiskFilesystem = "raw" + FilesystemSwap DiskFilesystem = "swap" + FilesystemExt3 DiskFilesystem = "ext3" + FilesystemExt4 DiskFilesystem = "ext4" + FilesystemInitrd DiskFilesystem = "initrd" +) + +// DiskStatus constants have the prefix "Disk" and include Linode API Instance Disk Status +type DiskStatus string + +// DiskStatus constants represent the status values an Instance Disk may have +const ( + DiskReady DiskStatus = "ready" + DiskNotReady DiskStatus = "not ready" + DiskDeleting DiskStatus = "deleting" +) + +// InstanceDisksPagedResponse represents a paginated InstanceDisk API response +type InstanceDisksPagedResponse struct { + *PageOptions + Data []InstanceDisk `json:"data"` +} + +// InstanceDiskCreateOptions are InstanceDisk settings that can be used at creation +type InstanceDiskCreateOptions struct { + Label string `json:"label"` + Size int `json:"size"` + + // Image is optional, but requires RootPass if provided + Image string `json:"image,omitempty"` + RootPass string `json:"root_pass,omitempty"` + + Filesystem string `json:"filesystem,omitempty"` + AuthorizedKeys []string `json:"authorized_keys,omitempty"` + AuthorizedUsers []string `json:"authorized_users,omitempty"` + ReadOnly bool `json:"read_only,omitempty"` + StackscriptID int `json:"stackscript_id,omitempty"` + StackscriptData map[string]string `json:"stackscript_data,omitempty"` +} + +// InstanceDiskUpdateOptions are InstanceDisk settings that can be used in updates +type InstanceDiskUpdateOptions struct { + Label string `json:"label"` + ReadOnly bool `json:"read_only"` +} + +// endpointWithID gets the endpoint URL for InstanceDisks of a given Instance +func (InstanceDisksPagedResponse) endpointWithID(c *Client, id int) string { + endpoint, err := c.InstanceDisks.endpointWithID(id) + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends InstanceDisks when processing paginated InstanceDisk responses +func (resp *InstanceDisksPagedResponse) appendData(r *InstanceDisksPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListInstanceDisks lists InstanceDisks +func (c *Client) ListInstanceDisks(ctx context.Context, linodeID int, opts *ListOptions) ([]InstanceDisk, error) { + response := InstanceDisksPagedResponse{} + err := c.listHelperWithID(ctx, &response, linodeID, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *InstanceDisk) fixDates() *InstanceDisk { + if created, err := parseDates(v.CreatedStr); err == nil { + v.Created = *created + } + if updated, err := parseDates(v.UpdatedStr); err == nil { + v.Updated = *updated + } + return v +} + +// GetInstanceDisk gets the template with the provided ID +func (c *Client) GetInstanceDisk(ctx context.Context, linodeID int, configID int) (*InstanceDisk, error) { + e, err := c.InstanceDisks.endpointWithID(linodeID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, configID) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceDisk{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*InstanceDisk).fixDates(), nil +} + +// CreateInstanceDisk creates a new InstanceDisk for the given Instance +func (c *Client) CreateInstanceDisk(ctx context.Context, linodeID int, createOpts InstanceDiskCreateOptions) (*InstanceDisk, error) { + var body string + e, err := c.InstanceDisks.endpointWithID(linodeID) + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&InstanceDisk{}) + + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + + return r.Result().(*InstanceDisk).fixDates(), nil +} + +// UpdateInstanceDisk creates a new InstanceDisk for the given Instance +func (c *Client) UpdateInstanceDisk(ctx context.Context, linodeID int, diskID int, updateOpts InstanceDiskUpdateOptions) (*InstanceDisk, error) { + var body string + e, err := c.InstanceDisks.endpointWithID(linodeID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, diskID) + + req := c.R(ctx).SetResult(&InstanceDisk{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + + return r.Result().(*InstanceDisk).fixDates(), nil +} + +// RenameInstanceDisk renames an InstanceDisk +func (c *Client) RenameInstanceDisk(ctx context.Context, linodeID int, diskID int, label string) (*InstanceDisk, error) { + return c.UpdateInstanceDisk(ctx, linodeID, diskID, InstanceDiskUpdateOptions{Label: label}) +} + +// ResizeInstanceDisk resizes the size of the Instance disk +func (c *Client) ResizeInstanceDisk(ctx context.Context, linodeID int, diskID int, size int) error { + var body string + e, err := c.InstanceDisks.endpointWithID(linodeID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d/resize", e, diskID) + + req := c.R(ctx).SetResult(&InstanceDisk{}) + updateOpts := map[string]interface{}{ + "size": size, + } + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return NewError(err) + } + + _, err = coupleAPIErrors(req. + SetBody(body). + Post(e)) + + return err +} + +// PasswordResetInstanceDisk resets the "root" account password on the Instance disk +func (c *Client) PasswordResetInstanceDisk(ctx context.Context, linodeID int, diskID int, password string) error { + var body string + e, err := c.InstanceDisks.endpointWithID(linodeID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d/password", e, diskID) + + req := c.R(ctx).SetResult(&InstanceDisk{}) + updateOpts := map[string]interface{}{ + "password": password, + } + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return NewError(err) + } + + _, err = coupleAPIErrors(req. + SetBody(body). + Post(e)) + + return err +} + +// DeleteInstanceDisk deletes a Linode Instance Disk +func (c *Client) DeleteInstanceDisk(ctx context.Context, linodeID int, diskID int) error { + e, err := c.InstanceDisks.endpointWithID(linodeID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, diskID) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_ips.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_ips.go new file mode 100644 index 00000000000..a30d04f16dc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_ips.go @@ -0,0 +1,106 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" +) + +// InstanceIPAddressResponse contains the IPv4 and IPv6 details for an Instance +type InstanceIPAddressResponse struct { + IPv4 *InstanceIPv4Response `json:"ipv4"` + IPv6 *InstanceIPv6Response `json:"ipv6"` +} + +// InstanceIPv4Response contains the details of all IPv4 addresses associated with an Instance +type InstanceIPv4Response struct { + Public []*InstanceIP `json:"public"` + Private []*InstanceIP `json:"private"` + Shared []*InstanceIP `json:"shared"` +} + +// InstanceIP represents an Instance IP with additional DNS and networking details +type InstanceIP struct { + Address string `json:"address"` + Gateway string `json:"gateway"` + SubnetMask string `json:"subnet_mask"` + Prefix int `json:"prefix"` + Type string `json:"type"` + Public bool `json:"public"` + RDNS string `json:"rdns"` + LinodeID int `json:"linode_id"` + Region string `json:"region"` +} + +// InstanceIPv6Response contains the IPv6 addresses and ranges for an Instance +type InstanceIPv6Response struct { + LinkLocal *InstanceIP `json:"link_local"` + SLAAC *InstanceIP `json:"slaac"` + Global []*IPv6Range `json:"global"` +} + +// IPv6Range represents a range of IPv6 addresses routed to a single Linode in a given Region +type IPv6Range struct { + Range string `json:"range"` + Region string `json:"region"` +} + +// GetInstanceIPAddresses gets the IPAddresses for a Linode instance +func (c *Client) GetInstanceIPAddresses(ctx context.Context, linodeID int) (*InstanceIPAddressResponse, error) { + e, err := c.InstanceIPs.endpointWithID(linodeID) + if err != nil { + return nil, err + } + r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceIPAddressResponse{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*InstanceIPAddressResponse), nil +} + +// GetInstanceIPAddress gets the IPAddress for a Linode instance matching a supplied IP address +func (c *Client) GetInstanceIPAddress(ctx context.Context, linodeID int, ipaddress string) (*InstanceIP, error) { + e, err := c.InstanceIPs.endpointWithID(linodeID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, ipaddress) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceIP{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*InstanceIP), nil +} + +// AddInstanceIPAddress adds a public or private IP to a Linode instance +func (c *Client) AddInstanceIPAddress(ctx context.Context, linodeID int, public bool) (*InstanceIP, error) { + var body string + e, err := c.InstanceIPs.endpointWithID(linodeID) + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&InstanceIP{}) + + instanceipRequest := struct { + Type string `json:"type"` + Public bool `json:"public"` + }{"ipv4", public} + + if bodyData, err := json.Marshal(instanceipRequest); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetHeader("Content-Type", "application/json"). + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + + return r.Result().(*InstanceIP), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_snapshots.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_snapshots.go new file mode 100644 index 00000000000..7933507dce1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_snapshots.go @@ -0,0 +1,188 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// InstanceBackupsResponse response struct for backup snapshot +type InstanceBackupsResponse struct { + Automatic []*InstanceSnapshot `json:"automatic"` + Snapshot *InstanceBackupSnapshotResponse `json:"snapshot"` +} + +// InstanceBackupSnapshotResponse fields are those representing Instance Backup Snapshots +type InstanceBackupSnapshotResponse struct { + Current *InstanceSnapshot `json:"current"` + InProgress *InstanceSnapshot `json:"in_progress"` +} + +// RestoreInstanceOptions fields are those accepted by InstanceRestore +type RestoreInstanceOptions struct { + LinodeID int `json:"linode_id"` + Overwrite bool `json:"overwrite"` +} + +// InstanceSnapshot represents a linode backup snapshot +type InstanceSnapshot struct { + CreatedStr string `json:"created"` + UpdatedStr string `json:"updated"` + FinishedStr string `json:"finished"` + + ID int `json:"id"` + Label string `json:"label"` + Status InstanceSnapshotStatus `json:"status"` + Type string `json:"type"` + Created *time.Time `json:"-"` + Updated *time.Time `json:"-"` + Finished *time.Time `json:"-"` + Configs []string `json:"configs"` + Disks []*InstanceSnapshotDisk `json:"disks"` +} + +// InstanceSnapshotDisk fields represent the source disk of a Snapshot +type InstanceSnapshotDisk struct { + Label string `json:"label"` + Size int `json:"size"` + Filesystem string `json:"filesystem"` +} + +// InstanceSnapshotStatus constants start with Snapshot and include Linode API Instance Backup Snapshot status values +type InstanceSnapshotStatus string + +// InstanceSnapshotStatus constants reflect the current status of an Instance Snapshot +var ( + SnapshotPaused InstanceSnapshotStatus = "paused" + SnapshotPending InstanceSnapshotStatus = "pending" + SnapshotRunning InstanceSnapshotStatus = "running" + SnapshotNeedsPostProcessing InstanceSnapshotStatus = "needsPostProcessing" + SnapshotSuccessful InstanceSnapshotStatus = "successful" + SnapshotFailed InstanceSnapshotStatus = "failed" + SnapshotUserAborted InstanceSnapshotStatus = "userAborted" +) + +func (l *InstanceSnapshot) fixDates() *InstanceSnapshot { + l.Created, _ = parseDates(l.CreatedStr) + l.Updated, _ = parseDates(l.UpdatedStr) + l.Finished, _ = parseDates(l.FinishedStr) + return l +} + +// GetInstanceSnapshot gets the snapshot with the provided ID +func (c *Client) GetInstanceSnapshot(ctx context.Context, linodeID int, snapshotID int) (*InstanceSnapshot, error) { + e, err := c.InstanceSnapshots.endpointWithID(linodeID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, snapshotID) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceSnapshot{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*InstanceSnapshot).fixDates(), nil +} + +// CreateInstanceSnapshot Creates or Replaces the snapshot Backup of a Linode. If a previous snapshot exists for this Linode, it will be deleted. +func (c *Client) CreateInstanceSnapshot(ctx context.Context, linodeID int, label string) (*InstanceSnapshot, error) { + o, err := json.Marshal(map[string]string{"label": label}) + if err != nil { + return nil, err + } + body := string(o) + e, err := c.InstanceSnapshots.endpointWithID(linodeID) + if err != nil { + return nil, err + } + + r, err := coupleAPIErrors(c.R(ctx). + SetBody(body). + SetResult(&InstanceSnapshot{}). + Post(e)) + + if err != nil { + return nil, err + } + + return r.Result().(*InstanceSnapshot).fixDates(), nil +} + +// GetInstanceBackups gets the Instance's available Backups. +// This is not called ListInstanceBackups because a single object is returned, matching the API response. +func (c *Client) GetInstanceBackups(ctx context.Context, linodeID int) (*InstanceBackupsResponse, error) { + e, err := c.InstanceSnapshots.endpointWithID(linodeID) + if err != nil { + return nil, err + } + r, err := coupleAPIErrors(c.R(ctx). + SetResult(&InstanceBackupsResponse{}). + Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*InstanceBackupsResponse).fixDates(), nil +} + +// EnableInstanceBackups Enables backups for the specified Linode. +func (c *Client) EnableInstanceBackups(ctx context.Context, linodeID int) error { + e, err := c.InstanceSnapshots.endpointWithID(linodeID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/enable", e) + + _, err = coupleAPIErrors(c.R(ctx).Post(e)) + return err +} + +// CancelInstanceBackups Cancels backups for the specified Linode. +func (c *Client) CancelInstanceBackups(ctx context.Context, linodeID int) error { + e, err := c.InstanceSnapshots.endpointWithID(linodeID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/cancel", e) + + _, err = coupleAPIErrors(c.R(ctx).Post(e)) + return err +} + +// RestoreInstanceBackup Restores a Linode's Backup to the specified Linode. +func (c *Client) RestoreInstanceBackup(ctx context.Context, linodeID int, backupID int, opts RestoreInstanceOptions) error { + o, err := json.Marshal(opts) + if err != nil { + return NewError(err) + } + body := string(o) + e, err := c.InstanceSnapshots.endpointWithID(linodeID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d/restore", e, backupID) + + _, err = coupleAPIErrors(c.R(ctx).SetBody(body).Post(e)) + + return err + +} + +func (l *InstanceBackupSnapshotResponse) fixDates() *InstanceBackupSnapshotResponse { + if l.Current != nil { + l.Current.fixDates() + } + if l.InProgress != nil { + l.InProgress.fixDates() + } + return l +} + +func (l *InstanceBackupsResponse) fixDates() *InstanceBackupsResponse { + for i := range l.Automatic { + l.Automatic[i].fixDates() + } + if l.Snapshot != nil { + l.Snapshot.fixDates() + } + return l +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_volumes.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_volumes.go new file mode 100644 index 00000000000..b6c9a9ae05f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instance_volumes.go @@ -0,0 +1,38 @@ +package linodego + +import ( + "context" +) + +// InstanceVolumesPagedResponse represents a paginated InstanceVolume API response +type InstanceVolumesPagedResponse struct { + *PageOptions + Data []Volume `json:"data"` +} + +// endpoint gets the endpoint URL for InstanceVolume +func (InstanceVolumesPagedResponse) endpointWithID(c *Client, id int) string { + endpoint, err := c.InstanceVolumes.endpointWithID(id) + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends InstanceVolumes when processing paginated InstanceVolume responses +func (resp *InstanceVolumesPagedResponse) appendData(r *InstanceVolumesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListInstanceVolumes lists InstanceVolumes +func (c *Client) ListInstanceVolumes(ctx context.Context, linodeID int, opts *ListOptions) ([]Volume, error) { + response := InstanceVolumesPagedResponse{} + err := c.listHelperWithID(ctx, &response, linodeID, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instances.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instances.go new file mode 100644 index 00000000000..85775508a09 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/instances.go @@ -0,0 +1,454 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "net" + "time" +) + +/* + * https://developers.linode.com/v4/reference/endpoints/linode/instances + */ + +// InstanceStatus constants start with Instance and include Linode API Instance Status values +type InstanceStatus string + +// InstanceStatus constants reflect the current status of an Instance +const ( + InstanceBooting InstanceStatus = "booting" + InstanceRunning InstanceStatus = "running" + InstanceOffline InstanceStatus = "offline" + InstanceShuttingDown InstanceStatus = "shutting_down" + InstanceRebooting InstanceStatus = "rebooting" + InstanceProvisioning InstanceStatus = "provisioning" + InstanceDeleting InstanceStatus = "deleting" + InstanceMigrating InstanceStatus = "migrating" + InstanceRebuilding InstanceStatus = "rebuilding" + InstanceCloning InstanceStatus = "cloning" + InstanceRestoring InstanceStatus = "restoring" + InstanceResizing InstanceStatus = "resizing" +) + +// Instance represents a linode object +type Instance struct { + CreatedStr string `json:"created"` + UpdatedStr string `json:"updated"` + + ID int `json:"id"` + Created *time.Time `json:"-"` + Updated *time.Time `json:"-"` + Region string `json:"region"` + Alerts *InstanceAlert `json:"alerts"` + Backups *InstanceBackup `json:"backups"` + Image string `json:"image"` + Group string `json:"group"` + IPv4 []*net.IP `json:"ipv4"` + IPv6 string `json:"ipv6"` + Label string `json:"label"` + Type string `json:"type"` + Status InstanceStatus `json:"status"` + Hypervisor string `json:"hypervisor"` + Specs *InstanceSpec `json:"specs"` + WatchdogEnabled bool `json:"watchdog_enabled"` + Tags []string `json:"tags"` +} + +// InstanceSpec represents a linode spec +type InstanceSpec struct { + Disk int `json:"disk"` + Memory int `json:"memory"` + VCPUs int `json:"vcpus"` + Transfer int `json:"transfer"` +} + +// InstanceAlert represents a metric alert +type InstanceAlert struct { + CPU int `json:"cpu"` + IO int `json:"io"` + NetworkIn int `json:"network_in"` + NetworkOut int `json:"network_out"` + TransferQuota int `json:"transfer_quota"` +} + +// InstanceBackup represents backup settings for an instance +type InstanceBackup struct { + Enabled bool `json:"enabled"` + Schedule struct { + Day string `json:"day,omitempty"` + Window string `json:"window,omitempty"` + } +} + +// InstanceCreateOptions require only Region and Type +type InstanceCreateOptions struct { + Region string `json:"region"` + Type string `json:"type"` + Label string `json:"label,omitempty"` + Group string `json:"group,omitempty"` + RootPass string `json:"root_pass,omitempty"` + AuthorizedKeys []string `json:"authorized_keys,omitempty"` + AuthorizedUsers []string `json:"authorized_users,omitempty"` + StackScriptID int `json:"stackscript_id,omitempty"` + StackScriptData map[string]string `json:"stackscript_data,omitempty"` + BackupID int `json:"backup_id,omitempty"` + Image string `json:"image,omitempty"` + BackupsEnabled bool `json:"backups_enabled,omitempty"` + PrivateIP bool `json:"private_ip,omitempty"` + Tags []string `json:"tags,omitempty"` + + // Creation fields that need to be set explicitly false, "", or 0 use pointers + SwapSize *int `json:"swap_size,omitempty"` + Booted *bool `json:"booted,omitempty"` +} + +// InstanceUpdateOptions is an options struct used when Updating an Instance +type InstanceUpdateOptions struct { + Label string `json:"label,omitempty"` + Group string `json:"group,omitempty"` + Backups *InstanceBackup `json:"backups,omitempty"` + Alerts *InstanceAlert `json:"alerts,omitempty"` + WatchdogEnabled *bool `json:"watchdog_enabled,omitempty"` + Tags *[]string `json:"tags,omitempty"` +} + +// GetUpdateOptions converts an Instance to InstanceUpdateOptions for use in UpdateInstance +func (l *Instance) GetUpdateOptions() InstanceUpdateOptions { + return InstanceUpdateOptions{ + Label: l.Label, + Group: l.Group, + Backups: l.Backups, + Alerts: l.Alerts, + WatchdogEnabled: &l.WatchdogEnabled, + Tags: &l.Tags, + } +} + +// InstanceCloneOptions is an options struct sent when Cloning an Instance +type InstanceCloneOptions struct { + Region string `json:"region,omitempty"` + Type string `json:"type,omitempty"` + + // LinodeID is an optional existing instance to use as the target of the clone + LinodeID int `json:"linode_id,omitempty"` + Label string `json:"label,omitempty"` + Group string `json:"group,omitempty"` + BackupsEnabled bool `json:"backups_enabled"` + Disks []int `json:"disks,omitempty"` + Configs []int `json:"configs,omitempty"` +} + +func (l *Instance) fixDates() *Instance { + l.Created, _ = parseDates(l.CreatedStr) + l.Updated, _ = parseDates(l.UpdatedStr) + return l +} + +// InstancesPagedResponse represents a linode API response for listing +type InstancesPagedResponse struct { + *PageOptions + Data []Instance `json:"data"` +} + +// endpoint gets the endpoint URL for Instance +func (InstancesPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Instances.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Instances when processing paginated Instance responses +func (resp *InstancesPagedResponse) appendData(r *InstancesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListInstances lists linode instances +func (c *Client) ListInstances(ctx context.Context, opts *ListOptions) ([]Instance, error) { + response := InstancesPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// GetInstance gets the instance with the provided ID +func (c *Client) GetInstance(ctx context.Context, linodeID int) (*Instance, error) { + e, err := c.Instances.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, linodeID) + r, err := coupleAPIErrors(c.R(ctx). + SetResult(Instance{}). + Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Instance).fixDates(), nil +} + +// CreateInstance creates a Linode instance +func (c *Client) CreateInstance(ctx context.Context, instance InstanceCreateOptions) (*Instance, error) { + var body string + e, err := c.Instances.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&Instance{}) + + if bodyData, err := json.Marshal(instance); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Instance).fixDates(), nil +} + +// UpdateInstance creates a Linode instance +func (c *Client) UpdateInstance(ctx context.Context, id int, instance InstanceUpdateOptions) (*Instance, error) { + var body string + e, err := c.Instances.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + + req := c.R(ctx).SetResult(&Instance{}) + + if bodyData, err := json.Marshal(instance); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Instance).fixDates(), nil +} + +// RenameInstance renames an Instance +func (c *Client) RenameInstance(ctx context.Context, linodeID int, label string) (*Instance, error) { + return c.UpdateInstance(ctx, linodeID, InstanceUpdateOptions{Label: label}) +} + +// DeleteInstance deletes a Linode instance +func (c *Client) DeleteInstance(ctx context.Context, id int) error { + e, err := c.Instances.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} + +// BootInstance will boot a Linode instance +// A configID of 0 will cause Linode to choose the last/best config +func (c *Client) BootInstance(ctx context.Context, id int, configID int) error { + bodyStr := "" + + if configID != 0 { + bodyMap := map[string]int{"config_id": configID} + bodyJSON, err := json.Marshal(bodyMap) + if err != nil { + return NewError(err) + } + bodyStr = string(bodyJSON) + } + + e, err := c.Instances.Endpoint() + if err != nil { + return err + } + + e = fmt.Sprintf("%s/%d/boot", e, id) + _, err = coupleAPIErrors(c.R(ctx). + SetBody(bodyStr). + Post(e)) + + return err +} + +// CloneInstance clone an existing Instances Disks and Configuration profiles to another Linode Instance +func (c *Client) CloneInstance(ctx context.Context, id int, options InstanceCloneOptions) (*Instance, error) { + var body string + e, err := c.Instances.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d/clone", e, id) + + req := c.R(ctx).SetResult(&Instance{}) + + if bodyData, err := json.Marshal(options); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + + return r.Result().(*Instance).fixDates(), nil +} + +// RebootInstance reboots a Linode instance +// A configID of 0 will cause Linode to choose the last/best config +func (c *Client) RebootInstance(ctx context.Context, id int, configID int) error { + bodyStr := "{}" + + if configID != 0 { + bodyMap := map[string]int{"config_id": configID} + bodyJSON, err := json.Marshal(bodyMap) + if err != nil { + return NewError(err) + } + bodyStr = string(bodyJSON) + } + + e, err := c.Instances.Endpoint() + if err != nil { + return err + } + + e = fmt.Sprintf("%s/%d/reboot", e, id) + + _, err = coupleAPIErrors(c.R(ctx). + SetBody(bodyStr). + Post(e)) + + return err +} + +// RebuildInstanceOptions is a struct representing the options to send to the rebuild linode endpoint +type RebuildInstanceOptions struct { + Image string `json:"image"` + RootPass string `json:"root_pass"` + AuthorizedKeys []string `json:"authorized_keys"` + AuthorizedUsers []string `json:"authorized_users"` + StackscriptID int `json:"stackscript_id"` + StackscriptData map[string]string `json:"stackscript_data"` + Booted bool `json:"booted"` +} + +// RebuildInstance Deletes all Disks and Configs on this Linode, +// then deploys a new Image to this Linode with the given attributes. +func (c *Client) RebuildInstance(ctx context.Context, id int, opts RebuildInstanceOptions) (*Instance, error) { + o, err := json.Marshal(opts) + if err != nil { + return nil, NewError(err) + } + b := string(o) + e, err := c.Instances.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d/rebuild", e, id) + r, err := coupleAPIErrors(c.R(ctx). + SetBody(b). + SetResult(&Instance{}). + Post(e)) + if err != nil { + return nil, err + } + return r.Result().(*Instance).fixDates(), nil +} + +// RescueInstanceOptions fields are those accepted by RescueInstance +type RescueInstanceOptions struct { + Devices InstanceConfigDeviceMap `json:"devices"` +} + +// RescueInstance reboots an instance into a safe environment for performing many system recovery and disk management tasks. +// Rescue Mode is based on the Finnix recovery distribution, a self-contained and bootable Linux distribution. +// You can also use Rescue Mode for tasks other than disaster recovery, such as formatting disks to use different filesystems, +// copying data between disks, and downloading files from a disk via SSH and SFTP. +func (c *Client) RescueInstance(ctx context.Context, id int, opts RescueInstanceOptions) error { + o, err := json.Marshal(opts) + if err != nil { + return NewError(err) + } + b := string(o) + e, err := c.Instances.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d/rescue", e, id) + + _, err = coupleAPIErrors(c.R(ctx). + SetBody(b). + Post(e)) + + return err +} + +// ResizeInstance resizes an instance to new Linode type +func (c *Client) ResizeInstance(ctx context.Context, id int, linodeType string) error { + body := fmt.Sprintf("{\"type\":\"%s\"}", linodeType) + + e, err := c.Instances.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d/resize", e, id) + + _, err = coupleAPIErrors(c.R(ctx). + SetBody(body). + Post(e)) + + return err +} + +// ShutdownInstance - Shutdown an instance +func (c *Client) ShutdownInstance(ctx context.Context, id int) error { + return c.simpleInstanceAction(ctx, "shutdown", id) +} + +// MutateInstance Upgrades a Linode to its next generation. +func (c *Client) MutateInstance(ctx context.Context, id int) error { + return c.simpleInstanceAction(ctx, "mutate", id) +} + +// MigrateInstance - Migrate an instance +func (c *Client) MigrateInstance(ctx context.Context, id int) error { + return c.simpleInstanceAction(ctx, "migrate", id) +} + +// simpleInstanceAction is a helper for Instance actions that take no parameters +// and return empty responses `{}` unless they return a standard error +func (c *Client) simpleInstanceAction(ctx context.Context, action string, id int) error { + e, err := c.Instances.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d/%s", e, id, action) + _, err = coupleAPIErrors(c.R(ctx).Post(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/kernels.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/kernels.go new file mode 100644 index 00000000000..233a38db545 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/kernels.go @@ -0,0 +1,61 @@ +package linodego + +import ( + "context" + "fmt" +) + +// LinodeKernel represents a Linode Instance kernel object +type LinodeKernel struct { + ID string `json:"id"` + Label string `json:"label"` + Version string `json:"version"` + Architecture string `json:"architecture"` + KVM bool `json:"kvm"` + XEN bool `json:"xen"` + PVOPS bool `json:"pvops"` +} + +// LinodeKernelsPagedResponse represents a Linode kernels API response for listing +type LinodeKernelsPagedResponse struct { + *PageOptions + Data []LinodeKernel `json:"data"` +} + +// ListKernels lists linode kernels +func (c *Client) ListKernels(ctx context.Context, opts *ListOptions) ([]LinodeKernel, error) { + response := LinodeKernelsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +func (LinodeKernelsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Kernels.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +func (resp *LinodeKernelsPagedResponse) appendData(r *LinodeKernelsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// GetKernel gets the kernel with the provided ID +func (c *Client) GetKernel(ctx context.Context, kernelID string) (*LinodeKernel, error) { + e, err := c.Kernels.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, kernelID) + r, err := c.R(ctx). + SetResult(&LinodeKernel{}). + Get(e) + if err != nil { + return nil, err + } + return r.Result().(*LinodeKernel), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/longview.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/longview.go new file mode 100644 index 00000000000..524af67768f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/longview.go @@ -0,0 +1,67 @@ +package linodego + +import ( + "context" + "fmt" +) + +// LongviewClient represents a LongviewClient object +type LongviewClient struct { + ID int `json:"id"` + // UpdatedStr string `json:"updated"` + // Updated *time.Time `json:"-"` +} + +// LongviewClientsPagedResponse represents a paginated LongviewClient API response +type LongviewClientsPagedResponse struct { + *PageOptions + Data []LongviewClient `json:"data"` +} + +// endpoint gets the endpoint URL for LongviewClient +func (LongviewClientsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.LongviewClients.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends LongviewClients when processing paginated LongviewClient responses +func (resp *LongviewClientsPagedResponse) appendData(r *LongviewClientsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListLongviewClients lists LongviewClients +func (c *Client) ListLongviewClients(ctx context.Context, opts *ListOptions) ([]LongviewClient, error) { + response := LongviewClientsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *LongviewClient) fixDates() *LongviewClient { + // v.Created, _ = parseDates(v.CreatedStr) + // v.Updated, _ = parseDates(v.UpdatedStr) + return v +} + +// GetLongviewClient gets the template with the provided ID +func (c *Client) GetLongviewClient(ctx context.Context, id string) (*LongviewClient, error) { + e, err := c.LongviewClients.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + r, err := c.R(ctx).SetResult(&LongviewClient{}).Get(e) + if err != nil { + return nil, err + } + return r.Result().(*LongviewClient).fixDates(), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/longview_subscriptions.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/longview_subscriptions.go new file mode 100644 index 00000000000..253316599a0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/longview_subscriptions.go @@ -0,0 +1,70 @@ +package linodego + +import ( + "context" + "fmt" +) + +// LongviewSubscription represents a LongviewSubscription object +type LongviewSubscription struct { + ID string `json:"id"` + Label string `json:"label"` + ClientsIncluded int `json:"clients_included"` + Price *LinodePrice `json:"price"` + // UpdatedStr string `json:"updated"` + // Updated *time.Time `json:"-"` +} + +// LongviewSubscriptionsPagedResponse represents a paginated LongviewSubscription API response +type LongviewSubscriptionsPagedResponse struct { + *PageOptions + Data []LongviewSubscription `json:"data"` +} + +// endpoint gets the endpoint URL for LongviewSubscription +func (LongviewSubscriptionsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.LongviewSubscriptions.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends LongviewSubscriptions when processing paginated LongviewSubscription responses +func (resp *LongviewSubscriptionsPagedResponse) appendData(r *LongviewSubscriptionsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListLongviewSubscriptions lists LongviewSubscriptions +func (c *Client) ListLongviewSubscriptions(ctx context.Context, opts *ListOptions) ([]LongviewSubscription, error) { + response := LongviewSubscriptionsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *LongviewSubscription) fixDates() *LongviewSubscription { + // v.Created, _ = parseDates(v.CreatedStr) + // v.Updated, _ = parseDates(v.UpdatedStr) + return v +} + +// GetLongviewSubscription gets the template with the provided ID +func (c *Client) GetLongviewSubscription(ctx context.Context, id string) (*LongviewSubscription, error) { + e, err := c.LongviewSubscriptions.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + r, err := c.R(ctx).SetResult(&LongviewSubscription{}).Get(e) + if err != nil { + return nil, err + } + return r.Result().(*LongviewSubscription).fixDates(), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/managed.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/managed.go new file mode 100644 index 00000000000..15236129282 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/managed.go @@ -0,0 +1 @@ +package linodego diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_ips.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_ips.go new file mode 100644 index 00000000000..01dd5c1d3b1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_ips.go @@ -0,0 +1,90 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" +) + +// IPAddressesPagedResponse represents a paginated IPAddress API response +type IPAddressesPagedResponse struct { + *PageOptions + Data []InstanceIP `json:"data"` +} + +// IPAddressUpdateOptions fields are those accepted by UpdateToken +type IPAddressUpdateOptions struct { + // The reverse DNS assigned to this address. For public IPv4 addresses, this will be set to a default value provided by Linode if set to nil. + RDNS *string `json:"rdns"` +} + +// GetUpdateOptions converts a IPAddress to IPAddressUpdateOptions for use in UpdateIPAddress +func (i InstanceIP) GetUpdateOptions() (o IPAddressUpdateOptions) { + o.RDNS = copyString(&i.RDNS) + return +} + +// endpoint gets the endpoint URL for IPAddress +func (IPAddressesPagedResponse) endpoint(c *Client) string { + endpoint, err := c.IPAddresses.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends IPAddresses when processing paginated InstanceIPAddress responses +func (resp *IPAddressesPagedResponse) appendData(r *IPAddressesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListIPAddresses lists IPAddresses +func (c *Client) ListIPAddresses(ctx context.Context, opts *ListOptions) ([]InstanceIP, error) { + response := IPAddressesPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// GetIPAddress gets the template with the provided ID +func (c *Client) GetIPAddress(ctx context.Context, id string) (*InstanceIP, error) { + e, err := c.IPAddresses.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&InstanceIP{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*InstanceIP), nil +} + +// UpdateIPAddress updates the IPAddress with the specified id +func (c *Client) UpdateIPAddress(ctx context.Context, id string, updateOpts IPAddressUpdateOptions) (*InstanceIP, error) { + var body string + e, err := c.IPAddresses.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + + req := c.R(ctx).SetResult(&InstanceIP{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*InstanceIP), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_pools.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_pools.go new file mode 100644 index 00000000000..03085923c2a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_pools.go @@ -0,0 +1,50 @@ +package linodego + +import ( + "context" + "fmt" +) + +// IPv6PoolsPagedResponse represents a paginated IPv6Pool API response +type IPv6PoolsPagedResponse struct { + *PageOptions + Data []IPv6Range `json:"data"` +} + +// endpoint gets the endpoint URL for IPv6Pool +func (IPv6PoolsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.IPv6Pools.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends IPv6Pools when processing paginated IPv6Pool responses +func (resp *IPv6PoolsPagedResponse) appendData(r *IPv6PoolsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListIPv6Pools lists IPv6Pools +func (c *Client) ListIPv6Pools(ctx context.Context, opts *ListOptions) ([]IPv6Range, error) { + response := IPv6PoolsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// GetIPv6Pool gets the template with the provided ID +func (c *Client) GetIPv6Pool(ctx context.Context, id string) (*IPv6Range, error) { + e, err := c.IPv6Pools.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&IPv6Range{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*IPv6Range), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_ranges.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_ranges.go new file mode 100644 index 00000000000..0c0ba15a377 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/network_ranges.go @@ -0,0 +1,50 @@ +package linodego + +import ( + "context" + "fmt" +) + +// IPv6RangesPagedResponse represents a paginated IPv6Range API response +type IPv6RangesPagedResponse struct { + *PageOptions + Data []IPv6Range `json:"data"` +} + +// endpoint gets the endpoint URL for IPv6Range +func (IPv6RangesPagedResponse) endpoint(c *Client) string { + endpoint, err := c.IPv6Ranges.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends IPv6Ranges when processing paginated IPv6Range responses +func (resp *IPv6RangesPagedResponse) appendData(r *IPv6RangesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListIPv6Ranges lists IPv6Ranges +func (c *Client) ListIPv6Ranges(ctx context.Context, opts *ListOptions) ([]IPv6Range, error) { + response := IPv6RangesPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// GetIPv6Range gets the template with the provided ID +func (c *Client) GetIPv6Range(ctx context.Context, id string) (*IPv6Range, error) { + e, err := c.IPv6Ranges.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&IPv6Range{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*IPv6Range), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer.go new file mode 100644 index 00000000000..a8d797d2404 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer.go @@ -0,0 +1,199 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// NodeBalancer represents a NodeBalancer object +type NodeBalancer struct { + CreatedStr string `json:"created"` + UpdatedStr string `json:"updated"` + // This NodeBalancer's unique ID. + ID int `json:"id"` + // This NodeBalancer's label. These must be unique on your Account. + Label *string `json:"label"` + // The Region where this NodeBalancer is located. NodeBalancers only support backends in the same Region. + Region string `json:"region"` + // This NodeBalancer's hostname, ending with .nodebalancer.linode.com + Hostname *string `json:"hostname"` + // This NodeBalancer's public IPv4 address. + IPv4 *string `json:"ipv4"` + // This NodeBalancer's public IPv6 address. + IPv6 *string `json:"ipv6"` + // Throttle connections per second (0-20). Set to 0 (zero) to disable throttling. + ClientConnThrottle int `json:"client_conn_throttle"` + // Information about the amount of transfer this NodeBalancer has had so far this month. + Transfer NodeBalancerTransfer `json:"transfer"` + + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []string `json:"tags"` + + Created *time.Time `json:"-"` + Updated *time.Time `json:"-"` +} + +// NodeBalancerTransfer contains information about the amount of transfer a NodeBalancer has had in the current month +type NodeBalancerTransfer struct { + // The total transfer, in MB, used by this NodeBalancer this month. + Total *float64 `json:"total"` + // The total inbound transfer, in MB, used for this NodeBalancer this month. + Out *float64 `json:"out"` + // The total outbound transfer, in MB, used for this NodeBalancer this month. + In *float64 `json:"in"` +} + +// NodeBalancerCreateOptions are the options permitted for CreateNodeBalancer +type NodeBalancerCreateOptions struct { + Label *string `json:"label,omitempty"` + Region string `json:"region,omitempty"` + ClientConnThrottle *int `json:"client_conn_throttle,omitempty"` + Configs []*NodeBalancerConfigCreateOptions `json:"configs,omitempty"` + Tags []string `json:"tags"` +} + +// NodeBalancerUpdateOptions are the options permitted for UpdateNodeBalancer +type NodeBalancerUpdateOptions struct { + Label *string `json:"label,omitempty"` + ClientConnThrottle *int `json:"client_conn_throttle,omitempty"` + Tags *[]string `json:"tags,omitempty"` +} + +// GetCreateOptions converts a NodeBalancer to NodeBalancerCreateOptions for use in CreateNodeBalancer +func (i NodeBalancer) GetCreateOptions() NodeBalancerCreateOptions { + return NodeBalancerCreateOptions{ + Label: i.Label, + Region: i.Region, + ClientConnThrottle: &i.ClientConnThrottle, + Tags: i.Tags, + } +} + +// GetUpdateOptions converts a NodeBalancer to NodeBalancerUpdateOptions for use in UpdateNodeBalancer +func (i NodeBalancer) GetUpdateOptions() NodeBalancerUpdateOptions { + return NodeBalancerUpdateOptions{ + Label: i.Label, + ClientConnThrottle: &i.ClientConnThrottle, + Tags: &i.Tags, + } +} + +// NodeBalancersPagedResponse represents a paginated NodeBalancer API response +type NodeBalancersPagedResponse struct { + *PageOptions + Data []NodeBalancer `json:"data"` +} + +func (NodeBalancersPagedResponse) endpoint(c *Client) string { + endpoint, err := c.NodeBalancers.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +func (resp *NodeBalancersPagedResponse) appendData(r *NodeBalancersPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListNodeBalancers lists NodeBalancers +func (c *Client) ListNodeBalancers(ctx context.Context, opts *ListOptions) ([]NodeBalancer, error) { + response := NodeBalancersPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (i *NodeBalancer) fixDates() *NodeBalancer { + i.Created, _ = parseDates(i.CreatedStr) + i.Updated, _ = parseDates(i.UpdatedStr) + return i +} + +// GetNodeBalancer gets the NodeBalancer with the provided ID +func (c *Client) GetNodeBalancer(ctx context.Context, id int) (*NodeBalancer, error) { + e, err := c.NodeBalancers.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx). + SetResult(&NodeBalancer{}). + Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancer).fixDates(), nil +} + +// CreateNodeBalancer creates a NodeBalancer +func (c *Client) CreateNodeBalancer(ctx context.Context, nodebalancer NodeBalancerCreateOptions) (*NodeBalancer, error) { + var body string + e, err := c.NodeBalancers.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&NodeBalancer{}) + + if bodyData, err := json.Marshal(nodebalancer); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetHeader("Content-Type", "application/json"). + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancer).fixDates(), nil +} + +// UpdateNodeBalancer updates the NodeBalancer with the specified id +func (c *Client) UpdateNodeBalancer(ctx context.Context, id int, updateOpts NodeBalancerUpdateOptions) (*NodeBalancer, error) { + var body string + e, err := c.NodeBalancers.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + + req := c.R(ctx).SetResult(&NodeBalancer{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancer).fixDates(), nil +} + +// DeleteNodeBalancer deletes the NodeBalancer with the specified id +func (c *Client) DeleteNodeBalancer(ctx context.Context, id int) error { + e, err := c.NodeBalancers.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer_config_nodes.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer_config_nodes.go new file mode 100644 index 00000000000..e1ca55cb54a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer_config_nodes.go @@ -0,0 +1,186 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" +) + +// NodeBalancerNode objects represent a backend that can accept traffic for a NodeBalancer Config +type NodeBalancerNode struct { + ID int `json:"id"` + Address string `json:"address"` + Label string `json:"label"` + Status string `json:"status"` + Weight int `json:"weight"` + Mode NodeMode `json:"mode"` + ConfigID int `json:"config_id"` + NodeBalancerID int `json:"nodebalancer_id"` +} + +// NodeMode is the mode a NodeBalancer should use when sending traffic to a NodeBalancer Node +type NodeMode string + +var ( + // ModeAccept is the NodeMode indicating a NodeBalancer Node is accepting traffic + ModeAccept NodeMode = "accept" + + // ModeReject is the NodeMode indicating a NodeBalancer Node is not receiving traffic + ModeReject NodeMode = "reject" + + // ModeDrain is the NodeMode indicating a NodeBalancer Node is not receiving new traffic, but may continue receiving traffic from pinned connections + ModeDrain NodeMode = "drain" +) + +// NodeBalancerNodeCreateOptions fields are those accepted by CreateNodeBalancerNode +type NodeBalancerNodeCreateOptions struct { + Address string `json:"address"` + Label string `json:"label"` + Weight int `json:"weight,omitempty"` + Mode NodeMode `json:"mode,omitempty"` +} + +// NodeBalancerNodeUpdateOptions fields are those accepted by UpdateNodeBalancerNode +type NodeBalancerNodeUpdateOptions struct { + Address string `json:"address,omitempty"` + Label string `json:"label,omitempty"` + Weight int `json:"weight,omitempty"` + Mode NodeMode `json:"mode,omitempty"` +} + +// GetCreateOptions converts a NodeBalancerNode to NodeBalancerNodeCreateOptions for use in CreateNodeBalancerNode +func (i NodeBalancerNode) GetCreateOptions() NodeBalancerNodeCreateOptions { + return NodeBalancerNodeCreateOptions{ + Address: i.Address, + Label: i.Label, + Weight: i.Weight, + Mode: i.Mode, + } +} + +// GetUpdateOptions converts a NodeBalancerNode to NodeBalancerNodeUpdateOptions for use in UpdateNodeBalancerNode +func (i NodeBalancerNode) GetUpdateOptions() NodeBalancerNodeUpdateOptions { + return NodeBalancerNodeUpdateOptions{ + Address: i.Address, + Label: i.Label, + Weight: i.Weight, + Mode: i.Mode, + } +} + +// NodeBalancerNodesPagedResponse represents a paginated NodeBalancerNode API response +type NodeBalancerNodesPagedResponse struct { + *PageOptions + Data []NodeBalancerNode `json:"data"` +} + +// endpoint gets the endpoint URL for NodeBalancerNode +func (NodeBalancerNodesPagedResponse) endpointWithTwoIDs(c *Client, nodebalancerID int, configID int) string { + endpoint, err := c.NodeBalancerNodes.endpointWithID(nodebalancerID, configID) + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends NodeBalancerNodes when processing paginated NodeBalancerNode responses +func (resp *NodeBalancerNodesPagedResponse) appendData(r *NodeBalancerNodesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListNodeBalancerNodes lists NodeBalancerNodes +func (c *Client) ListNodeBalancerNodes(ctx context.Context, nodebalancerID int, configID int, opts *ListOptions) ([]NodeBalancerNode, error) { + response := NodeBalancerNodesPagedResponse{} + err := c.listHelperWithTwoIDs(ctx, &response, nodebalancerID, configID, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (i *NodeBalancerNode) fixDates() *NodeBalancerNode { + return i +} + +// GetNodeBalancerNode gets the template with the provided ID +func (c *Client) GetNodeBalancerNode(ctx context.Context, nodebalancerID int, configID int, nodeID int) (*NodeBalancerNode, error) { + e, err := c.NodeBalancerNodes.endpointWithID(nodebalancerID, configID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, nodeID) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&NodeBalancerNode{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancerNode).fixDates(), nil +} + +// CreateNodeBalancerNode creates a NodeBalancerNode +func (c *Client) CreateNodeBalancerNode(ctx context.Context, nodebalancerID int, configID int, createOpts NodeBalancerNodeCreateOptions) (*NodeBalancerNode, error) { + var body string + e, err := c.NodeBalancerNodes.endpointWithID(nodebalancerID, configID) + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&NodeBalancerNode{}) + + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancerNode).fixDates(), nil +} + +// UpdateNodeBalancerNode updates the NodeBalancerNode with the specified id +func (c *Client) UpdateNodeBalancerNode(ctx context.Context, nodebalancerID int, configID int, nodeID int, updateOpts NodeBalancerNodeUpdateOptions) (*NodeBalancerNode, error) { + var body string + e, err := c.NodeBalancerNodes.endpointWithID(nodebalancerID, configID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, nodeID) + + req := c.R(ctx).SetResult(&NodeBalancerNode{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancerNode).fixDates(), nil +} + +// DeleteNodeBalancerNode deletes the NodeBalancerNode with the specified id +func (c *Client) DeleteNodeBalancerNode(ctx context.Context, nodebalancerID int, configID int, nodeID int) error { + e, err := c.NodeBalancerNodes.endpointWithID(nodebalancerID, configID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, nodeID) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer_configs.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer_configs.go new file mode 100644 index 00000000000..aa87019c582 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/nodebalancer_configs.go @@ -0,0 +1,334 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" +) + +// NodeBalancerConfig objects allow a NodeBalancer to accept traffic on a new port +type NodeBalancerConfig struct { + ID int `json:"id"` + Port int `json:"port"` + Protocol ConfigProtocol `json:"protocol"` + Algorithm ConfigAlgorithm `json:"algorithm"` + Stickiness ConfigStickiness `json:"stickiness"` + Check ConfigCheck `json:"check"` + CheckInterval int `json:"check_interval"` + CheckAttempts int `json:"check_attempts"` + CheckPath string `json:"check_path"` + CheckBody string `json:"check_body"` + CheckPassive bool `json:"check_passive"` + CheckTimeout int `json:"check_timeout"` + CipherSuite ConfigCipher `json:"cipher_suite"` + NodeBalancerID int `json:"nodebalancer_id"` + SSLCommonName string `json:"ssl_commonname"` + SSLFingerprint string `json:"ssl_fingerprint"` + SSLCert string `json:"ssl_cert"` + SSLKey string `json:"ssl_key"` + NodesStatus *NodeBalancerNodeStatus `json:"nodes_status"` +} + +// ConfigAlgorithm constants start with Algorithm and include Linode API NodeBalancer Config Algorithms +type ConfigAlgorithm string + +// ConfigAlgorithm constants reflect the NodeBalancer Config Algorithm +const ( + AlgorithmRoundRobin ConfigAlgorithm = "roundrobin" + AlgorithmLeastConn ConfigAlgorithm = "leastconn" + AlgorithmSource ConfigAlgorithm = "source" +) + +// ConfigStickiness constants start with Stickiness and include Linode API NodeBalancer Config Stickiness +type ConfigStickiness string + +// ConfigStickiness constants reflect the node stickiness method for a NodeBalancer Config +const ( + StickinessNone ConfigStickiness = "none" + StickinessTable ConfigStickiness = "table" + StickinessHTTPCookie ConfigStickiness = "http_cookie" +) + +// ConfigCheck constants start with Check and include Linode API NodeBalancer Config Check methods +type ConfigCheck string + +// ConfigCheck constants reflect the node health status checking method for a NodeBalancer Config +const ( + CheckNone ConfigCheck = "none" + CheckConnection ConfigCheck = "connection" + CheckHTTP ConfigCheck = "http" + CheckHTTPBody ConfigCheck = "http_body" +) + +// ConfigProtocol constants start with Protocol and include Linode API Nodebalancer Config protocols +type ConfigProtocol string + +// ConfigProtocol constants reflect the protocol used by a NodeBalancer Config +const ( + ProtocolHTTP ConfigProtocol = "http" + ProtocolHTTPS ConfigProtocol = "https" + ProtocolTCP ConfigProtocol = "tcp" +) + +// ConfigCipher constants start with Cipher and include Linode API NodeBalancer Config Cipher values +type ConfigCipher string + +// ConfigCipher constants reflect the preferred cipher set for a NodeBalancer Config +const ( + CipherRecommended ConfigCipher = "recommended" + CipherLegacy ConfigCipher = "legacy" +) + +// NodeBalancerNodeStatus represents the total number of nodes whose status is Up or Down +type NodeBalancerNodeStatus struct { + Up int `json:"up"` + Down int `json:"down"` +} + +// NodeBalancerConfigCreateOptions are permitted by CreateNodeBalancerConfig +type NodeBalancerConfigCreateOptions struct { + Port int `json:"port"` + Protocol ConfigProtocol `json:"protocol,omitempty"` + Algorithm ConfigAlgorithm `json:"algorithm,omitempty"` + Stickiness ConfigStickiness `json:"stickiness,omitempty"` + Check ConfigCheck `json:"check,omitempty"` + CheckInterval int `json:"check_interval,omitempty"` + CheckAttempts int `json:"check_attempts,omitempty"` + CheckPath string `json:"check_path,omitempty"` + CheckBody string `json:"check_body,omitempty"` + CheckPassive *bool `json:"check_passive,omitempty"` + CheckTimeout int `json:"check_timeout,omitempty"` + CipherSuite ConfigCipher `json:"cipher_suite,omitempty"` + SSLCert string `json:"ssl_cert,omitempty"` + SSLKey string `json:"ssl_key,omitempty"` + Nodes []NodeBalancerNodeCreateOptions `json:"nodes,omitempty"` +} + +// NodeBalancerConfigRebuildOptions used by RebuildNodeBalancerConfig +type NodeBalancerConfigRebuildOptions struct { + Port int `json:"port"` + Protocol ConfigProtocol `json:"protocol,omitempty"` + Algorithm ConfigAlgorithm `json:"algorithm,omitempty"` + Stickiness ConfigStickiness `json:"stickiness,omitempty"` + Check ConfigCheck `json:"check,omitempty"` + CheckInterval int `json:"check_interval,omitempty"` + CheckAttempts int `json:"check_attempts,omitempty"` + CheckPath string `json:"check_path,omitempty"` + CheckBody string `json:"check_body,omitempty"` + CheckPassive *bool `json:"check_passive,omitempty"` + CheckTimeout int `json:"check_timeout,omitempty"` + CipherSuite ConfigCipher `json:"cipher_suite,omitempty"` + SSLCert string `json:"ssl_cert,omitempty"` + SSLKey string `json:"ssl_key,omitempty"` + Nodes []NodeBalancerNodeCreateOptions `json:"nodes"` +} + +// NodeBalancerConfigUpdateOptions are permitted by UpdateNodeBalancerConfig +type NodeBalancerConfigUpdateOptions NodeBalancerConfigCreateOptions + +// GetCreateOptions converts a NodeBalancerConfig to NodeBalancerConfigCreateOptions for use in CreateNodeBalancerConfig +func (i NodeBalancerConfig) GetCreateOptions() NodeBalancerConfigCreateOptions { + return NodeBalancerConfigCreateOptions{ + Port: i.Port, + Protocol: i.Protocol, + Algorithm: i.Algorithm, + Stickiness: i.Stickiness, + Check: i.Check, + CheckInterval: i.CheckInterval, + CheckAttempts: i.CheckAttempts, + CheckTimeout: i.CheckTimeout, + CheckPath: i.CheckPath, + CheckBody: i.CheckBody, + CheckPassive: copyBool(&i.CheckPassive), + CipherSuite: i.CipherSuite, + SSLCert: i.SSLCert, + SSLKey: i.SSLKey, + } +} + +// GetUpdateOptions converts a NodeBalancerConfig to NodeBalancerConfigUpdateOptions for use in UpdateNodeBalancerConfig +func (i NodeBalancerConfig) GetUpdateOptions() NodeBalancerConfigUpdateOptions { + return NodeBalancerConfigUpdateOptions{ + Port: i.Port, + Protocol: i.Protocol, + Algorithm: i.Algorithm, + Stickiness: i.Stickiness, + Check: i.Check, + CheckInterval: i.CheckInterval, + CheckAttempts: i.CheckAttempts, + CheckPath: i.CheckPath, + CheckBody: i.CheckBody, + CheckPassive: copyBool(&i.CheckPassive), + CheckTimeout: i.CheckTimeout, + CipherSuite: i.CipherSuite, + SSLCert: i.SSLCert, + SSLKey: i.SSLKey, + } +} + +// GetRebuildOptions converts a NodeBalancerConfig to NodeBalancerConfigRebuildOptions for use in RebuildNodeBalancerConfig +func (i NodeBalancerConfig) GetRebuildOptions() NodeBalancerConfigRebuildOptions { + return NodeBalancerConfigRebuildOptions{ + Port: i.Port, + Protocol: i.Protocol, + Algorithm: i.Algorithm, + Stickiness: i.Stickiness, + Check: i.Check, + CheckInterval: i.CheckInterval, + CheckAttempts: i.CheckAttempts, + CheckTimeout: i.CheckTimeout, + CheckPath: i.CheckPath, + CheckBody: i.CheckBody, + CheckPassive: copyBool(&i.CheckPassive), + CipherSuite: i.CipherSuite, + SSLCert: i.SSLCert, + SSLKey: i.SSLKey, + Nodes: make([]NodeBalancerNodeCreateOptions, 0), + } +} + +// NodeBalancerConfigsPagedResponse represents a paginated NodeBalancerConfig API response +type NodeBalancerConfigsPagedResponse struct { + *PageOptions + Data []NodeBalancerConfig `json:"data"` +} + +// endpointWithID gets the endpoint URL for NodeBalancerConfig +func (NodeBalancerConfigsPagedResponse) endpointWithID(c *Client, id int) string { + endpoint, err := c.NodeBalancerConfigs.endpointWithID(id) + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends NodeBalancerConfigs when processing paginated NodeBalancerConfig responses +func (resp *NodeBalancerConfigsPagedResponse) appendData(r *NodeBalancerConfigsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListNodeBalancerConfigs lists NodeBalancerConfigs +func (c *Client) ListNodeBalancerConfigs(ctx context.Context, nodebalancerID int, opts *ListOptions) ([]NodeBalancerConfig, error) { + response := NodeBalancerConfigsPagedResponse{} + err := c.listHelperWithID(ctx, &response, nodebalancerID, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (i *NodeBalancerConfig) fixDates() *NodeBalancerConfig { + return i +} + +// GetNodeBalancerConfig gets the template with the provided ID +func (c *Client) GetNodeBalancerConfig(ctx context.Context, nodebalancerID int, configID int) (*NodeBalancerConfig, error) { + e, err := c.NodeBalancerConfigs.endpointWithID(nodebalancerID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, configID) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&NodeBalancerConfig{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancerConfig).fixDates(), nil +} + +// CreateNodeBalancerConfig creates a NodeBalancerConfig +func (c *Client) CreateNodeBalancerConfig(ctx context.Context, nodebalancerID int, nodebalancerConfig NodeBalancerConfigCreateOptions) (*NodeBalancerConfig, error) { + var body string + e, err := c.NodeBalancerConfigs.endpointWithID(nodebalancerID) + + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&NodeBalancerConfig{}) + + if bodyData, err := json.Marshal(nodebalancerConfig); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetHeader("Content-Type", "application/json"). + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancerConfig).fixDates(), nil +} + +// UpdateNodeBalancerConfig updates the NodeBalancerConfig with the specified id +func (c *Client) UpdateNodeBalancerConfig(ctx context.Context, nodebalancerID int, configID int, updateOpts NodeBalancerConfigUpdateOptions) (*NodeBalancerConfig, error) { + var body string + e, err := c.NodeBalancerConfigs.endpointWithID(nodebalancerID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, configID) + + req := c.R(ctx).SetResult(&NodeBalancerConfig{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancerConfig).fixDates(), nil +} + +// DeleteNodeBalancerConfig deletes the NodeBalancerConfig with the specified id +func (c *Client) DeleteNodeBalancerConfig(ctx context.Context, nodebalancerID int, configID int) error { + e, err := c.NodeBalancerConfigs.endpointWithID(nodebalancerID) + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, configID) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} + +// RebuildNodeBalancerConfig updates the NodeBalancer with the specified id +func (c *Client) RebuildNodeBalancerConfig(ctx context.Context, nodeBalancerID int, configID int, rebuildOpts NodeBalancerConfigRebuildOptions) (*NodeBalancerConfig, error) { + var body string + e, err := c.NodeBalancerConfigs.endpointWithID(nodeBalancerID) + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d/rebuild", e, configID) + + req := c.R(ctx).SetResult(&NodeBalancerConfig{}) + + if bodyData, err := json.Marshal(rebuildOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*NodeBalancerConfig).fixDates(), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/pagination.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/pagination.go new file mode 100644 index 00000000000..bfe6de3b7d5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/pagination.go @@ -0,0 +1,430 @@ +package linodego + +/** + * Pagination and Filtering types and helpers + */ + +import ( + "context" + "fmt" + "log" + "strconv" + + "gopkg.in/resty.v1" +) + +// PageOptions are the pagination parameters for List endpoints +type PageOptions struct { + Page int `url:"page,omitempty" json:"page"` + Pages int `url:"pages,omitempty" json:"pages"` + Results int `url:"results,omitempty" json:"results"` +} + +// ListOptions are the pagination and filtering (TODO) parameters for endpoints +type ListOptions struct { + *PageOptions + Filter string +} + +// NewListOptions simplified construction of ListOptions using only +// the two writable properties, Page and Filter +func NewListOptions(Page int, Filter string) *ListOptions { + return &ListOptions{PageOptions: &PageOptions{Page: Page}, Filter: Filter} + +} + +// listHelper abstracts fetching and pagination for GET endpoints that +// do not require any Ids (top level endpoints). +// When opts (or opts.Page) is nil, all pages will be fetched and +// returned in a single (endpoint-specific)PagedResponse +// opts.results and opts.pages will be updated from the API response +func (c *Client) listHelper(ctx context.Context, i interface{}, opts *ListOptions) error { + req := c.R(ctx) + if opts != nil && opts.PageOptions != nil && opts.Page > 0 { + req.SetQueryParam("page", strconv.Itoa(opts.Page)) + } + + var ( + err error + pages int + results int + r *resty.Response + ) + + if opts != nil && len(opts.Filter) > 0 { + req.SetHeader("X-Filter", opts.Filter) + } + + switch v := i.(type) { + case *LinodeKernelsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(LinodeKernelsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*LinodeKernelsPagedResponse).Pages + results = r.Result().(*LinodeKernelsPagedResponse).Results + v.appendData(r.Result().(*LinodeKernelsPagedResponse)) + } + case *LinodeTypesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(LinodeTypesPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*LinodeTypesPagedResponse).Pages + results = r.Result().(*LinodeTypesPagedResponse).Results + v.appendData(r.Result().(*LinodeTypesPagedResponse)) + } + case *ImagesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(ImagesPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*ImagesPagedResponse).Pages + results = r.Result().(*ImagesPagedResponse).Results + v.appendData(r.Result().(*ImagesPagedResponse)) + } + case *StackscriptsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(StackscriptsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*StackscriptsPagedResponse).Pages + results = r.Result().(*StackscriptsPagedResponse).Results + v.appendData(r.Result().(*StackscriptsPagedResponse)) + } + case *InstancesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(InstancesPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*InstancesPagedResponse).Pages + results = r.Result().(*InstancesPagedResponse).Results + v.appendData(r.Result().(*InstancesPagedResponse)) + } + case *RegionsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(RegionsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*RegionsPagedResponse).Pages + results = r.Result().(*RegionsPagedResponse).Results + v.appendData(r.Result().(*RegionsPagedResponse)) + } + case *VolumesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(VolumesPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*VolumesPagedResponse).Pages + results = r.Result().(*VolumesPagedResponse).Results + v.appendData(r.Result().(*VolumesPagedResponse)) + } + case *DomainsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(DomainsPagedResponse{}).Get(v.endpoint(c))); err == nil { + response, ok := r.Result().(*DomainsPagedResponse) + if !ok { + return fmt.Errorf("Response is not a *DomainsPagedResponse") + } + pages = response.Pages + results = response.Results + v.appendData(response) + } + case *EventsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(EventsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*EventsPagedResponse).Pages + results = r.Result().(*EventsPagedResponse).Results + v.appendData(r.Result().(*EventsPagedResponse)) + } + case *LongviewSubscriptionsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(LongviewSubscriptionsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*LongviewSubscriptionsPagedResponse).Pages + results = r.Result().(*LongviewSubscriptionsPagedResponse).Results + v.appendData(r.Result().(*LongviewSubscriptionsPagedResponse)) + } + case *LongviewClientsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(LongviewClientsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*LongviewClientsPagedResponse).Pages + results = r.Result().(*LongviewClientsPagedResponse).Results + v.appendData(r.Result().(*LongviewClientsPagedResponse)) + } + case *IPAddressesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(IPAddressesPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*IPAddressesPagedResponse).Pages + results = r.Result().(*IPAddressesPagedResponse).Results + v.appendData(r.Result().(*IPAddressesPagedResponse)) + } + case *IPv6PoolsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(IPv6PoolsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*IPv6PoolsPagedResponse).Pages + results = r.Result().(*IPv6PoolsPagedResponse).Results + v.appendData(r.Result().(*IPv6PoolsPagedResponse)) + } + case *IPv6RangesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(IPv6RangesPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*IPv6RangesPagedResponse).Pages + results = r.Result().(*IPv6RangesPagedResponse).Results + v.appendData(r.Result().(*IPv6RangesPagedResponse)) + // @TODO consolidate this type with IPv6PoolsPagedResponse? + } + case *SSHKeysPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(SSHKeysPagedResponse{}).Get(v.endpoint(c))); err == nil { + response, ok := r.Result().(*SSHKeysPagedResponse) + if !ok { + return fmt.Errorf("Response is not a *SSHKeysPagedResponse") + } + pages = response.Pages + results = response.Results + v.appendData(response) + } + case *TicketsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(TicketsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*TicketsPagedResponse).Pages + results = r.Result().(*TicketsPagedResponse).Results + v.appendData(r.Result().(*TicketsPagedResponse)) + } + case *InvoicesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(InvoicesPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*InvoicesPagedResponse).Pages + results = r.Result().(*InvoicesPagedResponse).Results + v.appendData(r.Result().(*InvoicesPagedResponse)) + } + case *NotificationsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(NotificationsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*NotificationsPagedResponse).Pages + results = r.Result().(*NotificationsPagedResponse).Results + v.appendData(r.Result().(*NotificationsPagedResponse)) + } + case *NodeBalancersPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(NodeBalancersPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*NodeBalancersPagedResponse).Pages + results = r.Result().(*NodeBalancersPagedResponse).Results + v.appendData(r.Result().(*NodeBalancersPagedResponse)) + } + case *TagsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(TagsPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*TagsPagedResponse).Pages + results = r.Result().(*TagsPagedResponse).Results + v.appendData(r.Result().(*TagsPagedResponse)) + } + case *TokensPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(TokensPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*TokensPagedResponse).Pages + results = r.Result().(*TokensPagedResponse).Results + v.appendData(r.Result().(*TokensPagedResponse)) + } + case *UsersPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(UsersPagedResponse{}).Get(v.endpoint(c))); err == nil { + pages = r.Result().(*UsersPagedResponse).Pages + results = r.Result().(*UsersPagedResponse).Results + v.appendData(r.Result().(*UsersPagedResponse)) + } + /** + case AccountOauthClientsPagedResponse: + case AccountPaymentsPagedResponse: + case ProfileAppsPagedResponse: + case ProfileWhitelistPagedResponse: + case ManagedContactsPagedResponse: + case ManagedCredentialsPagedResponse: + case ManagedIssuesPagedResponse: + case ManagedLinodeSettingsPagedResponse: + case ManagedServicesPagedResponse: + **/ + default: + log.Fatalf("listHelper interface{} %+v used", i) + } + + if err != nil { + return err + } + + if opts == nil { + for page := 2; page <= pages; page = page + 1 { + if err := c.listHelper(ctx, i, &ListOptions{PageOptions: &PageOptions{Page: page}}); err != nil { + return err + } + } + } else { + if opts.PageOptions == nil { + opts.PageOptions = &PageOptions{} + } + + if opts.Page == 0 { + for page := 2; page <= pages; page = page + 1 { + opts.Page = page + if err := c.listHelper(ctx, i, opts); err != nil { + return err + } + } + } + opts.Results = results + opts.Pages = pages + } + + return nil +} + +// listHelperWithID abstracts fetching and pagination for GET endpoints that +// require an Id (second level endpoints). +// When opts (or opts.Page) is nil, all pages will be fetched and +// returned in a single (endpoint-specific)PagedResponse +// opts.results and opts.pages will be updated from the API response +func (c *Client) listHelperWithID(ctx context.Context, i interface{}, idRaw interface{}, opts *ListOptions) error { + req := c.R(ctx) + if opts != nil && opts.Page > 0 { + req.SetQueryParam("page", strconv.Itoa(opts.Page)) + } + + var ( + err error + pages int + results int + r *resty.Response + ) + + id, _ := idRaw.(int) + + if opts != nil && len(opts.Filter) > 0 { + req.SetHeader("X-Filter", opts.Filter) + } + + switch v := i.(type) { + case *InvoiceItemsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(InvoiceItemsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil { + pages = r.Result().(*InvoiceItemsPagedResponse).Pages + results = r.Result().(*InvoiceItemsPagedResponse).Results + v.appendData(r.Result().(*InvoiceItemsPagedResponse)) + } + case *DomainRecordsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(DomainRecordsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil { + response, ok := r.Result().(*DomainRecordsPagedResponse) + if !ok { + return fmt.Errorf("Response is not a *DomainRecordsPagedResponse") + } + pages = response.Pages + results = response.Results + v.appendData(response) + } + case *InstanceConfigsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(InstanceConfigsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil { + pages = r.Result().(*InstanceConfigsPagedResponse).Pages + results = r.Result().(*InstanceConfigsPagedResponse).Results + v.appendData(r.Result().(*InstanceConfigsPagedResponse)) + } + case *InstanceDisksPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(InstanceDisksPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil { + pages = r.Result().(*InstanceDisksPagedResponse).Pages + results = r.Result().(*InstanceDisksPagedResponse).Results + v.appendData(r.Result().(*InstanceDisksPagedResponse)) + } + case *NodeBalancerConfigsPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(NodeBalancerConfigsPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil { + pages = r.Result().(*NodeBalancerConfigsPagedResponse).Pages + results = r.Result().(*NodeBalancerConfigsPagedResponse).Results + v.appendData(r.Result().(*NodeBalancerConfigsPagedResponse)) + } + case *InstanceVolumesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(InstanceVolumesPagedResponse{}).Get(v.endpointWithID(c, id))); err == nil { + pages = r.Result().(*InstanceVolumesPagedResponse).Pages + results = r.Result().(*InstanceVolumesPagedResponse).Results + v.appendData(r.Result().(*InstanceVolumesPagedResponse)) + } + case *TaggedObjectsPagedResponse: + idStr := idRaw.(string) + + if r, err = coupleAPIErrors(req.SetResult(TaggedObjectsPagedResponse{}).Get(v.endpointWithID(c, idStr))); err == nil { + pages = r.Result().(*TaggedObjectsPagedResponse).Pages + results = r.Result().(*TaggedObjectsPagedResponse).Results + v.appendData(r.Result().(*TaggedObjectsPagedResponse)) + } + /** + case TicketAttachmentsPagedResponse: + if r, err = req.SetResult(v).Get(v.endpoint(c)); r.Error() != nil { + return NewError(r) + } else if err == nil { + pages = r.Result().(*TicketAttachmentsPagedResponse).Pages + results = r.Result().(*TicketAttachmentsPagedResponse).Results + v.appendData(r.Result().(*TicketAttachmentsPagedResponse)) + } + case TicketRepliesPagedResponse: + if r, err = req.SetResult(v).Get(v.endpoint(c)); r.Error() != nil { + return NewError(r) + } else if err == nil { + pages = r.Result().(*TicketRepliesPagedResponse).Pages + results = r.Result().(*TicketRepliesPagedResponse).Results + v.appendData(r.Result().(*TicketRepliesPagedResponse)) + } + **/ + default: + log.Fatalf("Unknown listHelperWithID interface{} %T used", i) + } + + if err != nil { + return err + } + + if opts == nil { + for page := 2; page <= pages; page = page + 1 { + if err := c.listHelperWithID(ctx, i, id, &ListOptions{PageOptions: &PageOptions{Page: page}}); err != nil { + return err + } + } + } else { + if opts.PageOptions == nil { + opts.PageOptions = &PageOptions{} + } + if opts.Page == 0 { + for page := 2; page <= pages; page = page + 1 { + opts.Page = page + if err := c.listHelperWithID(ctx, i, id, opts); err != nil { + return err + } + } + } + opts.Results = results + opts.Pages = pages + } + + return nil +} + +// listHelperWithTwoIDs abstracts fetching and pagination for GET endpoints that +// require twos IDs (third level endpoints). +// When opts (or opts.Page) is nil, all pages will be fetched and +// returned in a single (endpoint-specific)PagedResponse +// opts.results and opts.pages will be updated from the API response +func (c *Client) listHelperWithTwoIDs(ctx context.Context, i interface{}, firstID, secondID int, opts *ListOptions) error { + req := c.R(ctx) + if opts != nil && opts.Page > 0 { + req.SetQueryParam("page", strconv.Itoa(opts.Page)) + } + + var ( + err error + pages int + results int + r *resty.Response + ) + + if opts != nil && len(opts.Filter) > 0 { + req.SetHeader("X-Filter", opts.Filter) + } + + switch v := i.(type) { + case *NodeBalancerNodesPagedResponse: + if r, err = coupleAPIErrors(req.SetResult(NodeBalancerNodesPagedResponse{}).Get(v.endpointWithTwoIDs(c, firstID, secondID))); err == nil { + pages = r.Result().(*NodeBalancerNodesPagedResponse).Pages + results = r.Result().(*NodeBalancerNodesPagedResponse).Results + v.appendData(r.Result().(*NodeBalancerNodesPagedResponse)) + } + + default: + log.Fatalf("Unknown listHelperWithTwoIDs interface{} %T used", i) + } + + if err != nil { + return err + } + + if opts == nil { + for page := 2; page <= pages; page = page + 1 { + if err := c.listHelper(ctx, i, &ListOptions{PageOptions: &PageOptions{Page: page}}); err != nil { + return err + } + } + } else { + if opts.PageOptions == nil { + opts.PageOptions = &PageOptions{} + } + if opts.Page == 0 { + for page := 2; page <= pages; page = page + 1 { + opts.Page = page + if err := c.listHelperWithTwoIDs(ctx, i, firstID, secondID, opts); err != nil { + return err + } + } + } + opts.Results = results + opts.Pages = pages + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile.go new file mode 100644 index 00000000000..3d29b2a5246 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile.go @@ -0,0 +1,117 @@ +package linodego + +/* + - copy profile_test.go and do the same + - When updating Profile structs, + - use pointers where ever null'able would have a different meaning if the wrapper + supplied "" or 0 instead + - Add "NameOfResource" to client.go, resources.go, pagination.go +*/ + +import ( + "context" + "encoding/json" +) + +// LishAuthMethod constants start with AuthMethod and include Linode API Lish Authentication Methods +type LishAuthMethod string + +// LishAuthMethod constants are the methods of authentication allowed when connecting via Lish +const ( + AuthMethodPasswordKeys LishAuthMethod = "password_keys" + AuthMethodKeysOnly LishAuthMethod = "keys_only" + AuthMethodDisabled LishAuthMethod = "disabled" +) + +// ProfileReferrals represent a User's status in the Referral Program +type ProfileReferrals struct { + Total int `json:"total"` + Completed int `json:"completed"` + Pending int `json:"pending"` + Credit float64 `json:"credit"` + Code string `json:"code"` + URL string `json:"url"` +} + +// Profile represents a Profile object +type Profile struct { + UID int `json:"uid"` + Username string `json:"username"` + Email string `json:"email"` + Timezone string `json:"timezone"` + EmailNotifications bool `json:"email_notifications"` + IPWhitelistEnabled bool `json:"ip_whitelist_enabled"` + TwoFactorAuth bool `json:"two_factor_auth"` + Restricted bool `json:"restricted"` + LishAuthMethod LishAuthMethod `json:"lish_auth_method"` + Referrals ProfileReferrals `json:"referrals"` + AuthorizedKeys []string `json:"authorized_keys"` +} + +// ProfileUpdateOptions fields are those accepted by UpdateProfile +type ProfileUpdateOptions struct { + Email string `json:"email,omitempty"` + Timezone string `json:"timezone,omitempty"` + EmailNotifications *bool `json:"email_notifications,omitempty"` + IPWhitelistEnabled *bool `json:"ip_whitelist_enabled,omitempty"` + LishAuthMethod LishAuthMethod `json:"lish_auth_method,omitempty"` + AuthorizedKeys *[]string `json:"authorized_keys,omitempty"` + TwoFactorAuth *bool `json:"two_factor_auth,omitempty"` + Restricted *bool `json:"restricted,omitempty"` +} + +// GetUpdateOptions converts a Profile to ProfileUpdateOptions for use in UpdateProfile +func (i Profile) GetUpdateOptions() (o ProfileUpdateOptions) { + o.Email = i.Email + o.Timezone = i.Timezone + o.EmailNotifications = copyBool(&i.EmailNotifications) + o.IPWhitelistEnabled = copyBool(&i.IPWhitelistEnabled) + o.LishAuthMethod = i.LishAuthMethod + authorizedKeys := make([]string, len(i.AuthorizedKeys)) + copy(authorizedKeys, i.AuthorizedKeys) + o.AuthorizedKeys = &authorizedKeys + o.TwoFactorAuth = copyBool(&i.TwoFactorAuth) + o.Restricted = copyBool(&i.Restricted) + + return +} + +// GetProfile gets the profile with the provided ID +func (c *Client) GetProfile(ctx context.Context) (*Profile, error) { + e, err := c.Profile.Endpoint() + if err != nil { + return nil, err + } + + r, err := coupleAPIErrors(c.R(ctx).SetResult(&Profile{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Profile), nil +} + +// UpdateProfile updates the Profile with the specified id +func (c *Client) UpdateProfile(ctx context.Context, updateOpts ProfileUpdateOptions) (*Profile, error) { + var body string + e, err := c.Profile.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&Profile{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Profile), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile_sshkeys.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile_sshkeys.go new file mode 100644 index 00000000000..2ec4d4f7152 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile_sshkeys.go @@ -0,0 +1,160 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// SSHKey represents a SSHKey object +type SSHKey struct { + ID int `json:"id"` + Label string `json:"label"` + SSHKey string `json:"ssh_key"` + CreatedStr string `json:"created"` + Created *time.Time `json:"-"` +} + +// SSHKeyCreateOptions fields are those accepted by CreateSSHKey +type SSHKeyCreateOptions struct { + Label string `json:"label"` + SSHKey string `json:"ssh_key"` +} + +// SSHKeyUpdateOptions fields are those accepted by UpdateSSHKey +type SSHKeyUpdateOptions struct { + Label string `json:"label"` +} + +// GetCreateOptions converts a SSHKey to SSHKeyCreateOptions for use in CreateSSHKey +func (i SSHKey) GetCreateOptions() (o SSHKeyCreateOptions) { + o.Label = i.Label + o.SSHKey = i.SSHKey + return +} + +// GetUpdateOptions converts a SSHKey to SSHKeyCreateOptions for use in UpdateSSHKey +func (i SSHKey) GetUpdateOptions() (o SSHKeyUpdateOptions) { + o.Label = i.Label + return +} + +// SSHKeysPagedResponse represents a paginated SSHKey API response +type SSHKeysPagedResponse struct { + *PageOptions + Data []SSHKey `json:"data"` +} + +// endpoint gets the endpoint URL for SSHKey +func (SSHKeysPagedResponse) endpoint(c *Client) string { + endpoint, err := c.SSHKeys.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends SSHKeys when processing paginated SSHKey responses +func (resp *SSHKeysPagedResponse) appendData(r *SSHKeysPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListSSHKeys lists SSHKeys +func (c *Client) ListSSHKeys(ctx context.Context, opts *ListOptions) ([]SSHKey, error) { + response := SSHKeysPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (i *SSHKey) fixDates() *SSHKey { + i.Created, _ = parseDates(i.CreatedStr) + return i +} + +// GetSSHKey gets the sshkey with the provided ID +func (c *Client) GetSSHKey(ctx context.Context, id int) (*SSHKey, error) { + e, err := c.SSHKeys.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&SSHKey{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*SSHKey).fixDates(), nil +} + +// CreateSSHKey creates a SSHKey +func (c *Client) CreateSSHKey(ctx context.Context, createOpts SSHKeyCreateOptions) (*SSHKey, error) { + var body string + e, err := c.SSHKeys.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&SSHKey{}) + + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*SSHKey).fixDates(), nil +} + +// UpdateSSHKey updates the SSHKey with the specified id +func (c *Client) UpdateSSHKey(ctx context.Context, id int, updateOpts SSHKeyUpdateOptions) (*SSHKey, error) { + var body string + e, err := c.SSHKeys.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + + req := c.R(ctx).SetResult(&SSHKey{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*SSHKey).fixDates(), nil +} + +// DeleteSSHKey deletes the SSHKey with the specified id +func (c *Client) DeleteSSHKey(ctx context.Context, id int) error { + e, err := c.SSHKeys.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err + +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile_tokens.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile_tokens.go new file mode 100644 index 00000000000..bd95dfe05b1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/profile_tokens.go @@ -0,0 +1,195 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// Token represents a Token object +type Token struct { + // This token's unique ID, which can be used to revoke it. + ID int `json:"id"` + + // The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. + Scopes string `json:"scopes"` + + // This token's label. This is for display purposes only, but can be used to more easily track what you're using each token for. (1-100 Characters) + Label string `json:"label"` + + // The token used to access the API. When the token is created, the full token is returned here. Otherwise, only the first 16 characters are returned. + Token string `json:"token"` + + // The date and time this token was created. + Created *time.Time `json:"-"` + CreatedStr string `json:"created"` + + // When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with "null" as their expiry and will never expire unless revoked. + Expiry *time.Time `json:"-"` + ExpiryStr string `json:"expiry"` +} + +// TokenCreateOptions fields are those accepted by CreateToken +type TokenCreateOptions struct { + // The scopes this token was created with. These define what parts of the Account the token can be used to access. Many command-line tools, such as the Linode CLI, require tokens with access to *. Tokens with more restrictive scopes are generally more secure. + Scopes string `json:"scopes"` + + // This token's label. This is for display purposes only, but can be used to more easily track what you're using each token for. (1-100 Characters) + Label string `json:"label"` + + // When this token will expire. Personal Access Tokens cannot be renewed, so after this time the token will be completely unusable and a new token will need to be generated. Tokens may be created with "null" as their expiry and will never expire unless revoked. + Expiry *time.Time `json:"expiry"` +} + +// TokenUpdateOptions fields are those accepted by UpdateToken +type TokenUpdateOptions struct { + // This token's label. This is for display purposes only, but can be used to more easily track what you're using each token for. (1-100 Characters) + Label string `json:"label"` +} + +// GetCreateOptions converts a Token to TokenCreateOptions for use in CreateToken +func (i Token) GetCreateOptions() (o TokenCreateOptions) { + o.Label = i.Label + o.Expiry = copyTime(i.Expiry) + o.Scopes = i.Scopes + return +} + +// GetUpdateOptions converts a Token to TokenUpdateOptions for use in UpdateToken +func (i Token) GetUpdateOptions() (o TokenUpdateOptions) { + o.Label = i.Label + return +} + +// TokensPagedResponse represents a paginated Token API response +type TokensPagedResponse struct { + *PageOptions + Data []Token `json:"data"` +} + +// endpoint gets the endpoint URL for Token +func (TokensPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Tokens.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Tokens when processing paginated Token responses +func (resp *TokensPagedResponse) appendData(r *TokensPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListTokens lists Tokens +func (c *Client) ListTokens(ctx context.Context, opts *ListOptions) ([]Token, error) { + response := TokensPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (i *Token) fixDates() *Token { + i.Created, _ = parseDates(i.CreatedStr) + i.Expiry, _ = parseDates(i.ExpiryStr) + return i +} + +// GetToken gets the token with the provided ID +func (c *Client) GetToken(ctx context.Context, id int) (*Token, error) { + e, err := c.Tokens.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&Token{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Token).fixDates(), nil +} + +// CreateToken creates a Token +func (c *Client) CreateToken(ctx context.Context, createOpts TokenCreateOptions) (*Token, error) { + var body string + e, err := c.Tokens.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&Token{}) + + // Format the Time as a string to meet the ISO8601 requirement + createOptsFixed := struct { + Label string `json:"label"` + Scopes string `json:"scopes"` + Expiry *string `json:"expiry"` + }{} + createOptsFixed.Label = createOpts.Label + createOptsFixed.Scopes = createOpts.Scopes + if createOpts.Expiry != nil { + iso8601Expiry := createOpts.Expiry.UTC().Format("2006-01-02T15:04:05") + createOptsFixed.Expiry = &iso8601Expiry + } + + if bodyData, err := json.Marshal(createOptsFixed); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Token).fixDates(), nil +} + +// UpdateToken updates the Token with the specified id +func (c *Client) UpdateToken(ctx context.Context, id int, updateOpts TokenUpdateOptions) (*Token, error) { + var body string + e, err := c.Tokens.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + + req := c.R(ctx).SetResult(&Token{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Token).fixDates(), nil +} + +// DeleteToken deletes the Token with the specified id +func (c *Client) DeleteToken(ctx context.Context, id int) error { + e, err := c.Tokens.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/regions.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/regions.go new file mode 100644 index 00000000000..b13b996ea2c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/regions.go @@ -0,0 +1,64 @@ +package linodego + +import ( + "context" + "fmt" +) + +// Region represents a linode region object +type Region struct { + ID string `json:"id"` + Country string `json:"country"` +} + +// RegionsPagedResponse represents a linode API response for listing +type RegionsPagedResponse struct { + *PageOptions + Data []Region `json:"data"` +} + +// endpoint gets the endpoint URL for Region +func (RegionsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Regions.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Regions when processing paginated Region responses +func (resp *RegionsPagedResponse) appendData(r *RegionsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListRegions lists Regions +func (c *Client) ListRegions(ctx context.Context, opts *ListOptions) ([]Region, error) { + response := RegionsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *Region) fixDates() *Region { + return v +} + +// GetRegion gets the template with the provided ID +func (c *Client) GetRegion(ctx context.Context, id string) (*Region, error) { + e, err := c.Regions.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&Region{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Region).fixDates(), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/resources.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/resources.go new file mode 100644 index 00000000000..fe0c258cf68 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/resources.go @@ -0,0 +1,162 @@ +package linodego + +import ( + "bytes" + "context" + "fmt" + "text/template" + + "gopkg.in/resty.v1" +) + +const ( + stackscriptsName = "stackscripts" + imagesName = "images" + instancesName = "instances" + instanceDisksName = "disks" + instanceConfigsName = "configs" + instanceIPsName = "ips" + instanceSnapshotsName = "snapshots" + instanceVolumesName = "instancevolumes" + ipaddressesName = "ipaddresses" + ipv6poolsName = "ipv6pools" + ipv6rangesName = "ipv6ranges" + regionsName = "regions" + volumesName = "volumes" + kernelsName = "kernels" + typesName = "types" + domainsName = "domains" + domainRecordsName = "records" + longviewName = "longview" + longviewclientsName = "longviewclients" + longviewsubscriptionsName = "longviewsubscriptions" + nodebalancersName = "nodebalancers" + nodebalancerconfigsName = "nodebalancerconfigs" + nodebalancernodesName = "nodebalancernodes" + notificationsName = "notifications" + sshkeysName = "sshkeys" + ticketsName = "tickets" + tokensName = "tokens" + accountName = "account" + eventsName = "events" + invoicesName = "invoices" + invoiceItemsName = "invoiceitems" + profileName = "profile" + managedName = "managed" + tagsName = "tags" + usersName = "users" + // notificationsName = "notifications" + + stackscriptsEndpoint = "linode/stackscripts" + imagesEndpoint = "images" + instancesEndpoint = "linode/instances" + instanceConfigsEndpoint = "linode/instances/{{ .ID }}/configs" + instanceDisksEndpoint = "linode/instances/{{ .ID }}/disks" + instanceSnapshotsEndpoint = "linode/instances/{{ .ID }}/backups" + instanceIPsEndpoint = "linode/instances/{{ .ID }}/ips" + instanceVolumesEndpoint = "linode/instances/{{ .ID }}/volumes" + ipaddressesEndpoint = "networking/ips" + ipv6poolsEndpoint = "networking/ipv6/pools" + ipv6rangesEndpoint = "networking/ipv6/ranges" + regionsEndpoint = "regions" + volumesEndpoint = "volumes" + kernelsEndpoint = "linode/kernels" + typesEndpoint = "linode/types" + domainsEndpoint = "domains" + domainRecordsEndpoint = "domains/{{ .ID }}/records" + longviewEndpoint = "longview" + longviewclientsEndpoint = "longview/clients" + longviewsubscriptionsEndpoint = "longview/subscriptions" + nodebalancersEndpoint = "nodebalancers" + // @TODO we can't use these nodebalancer endpoints unless we include these templated fields + // The API seems inconsistent about including parent IDs in objects, (compare instance configs to nb configs) + // Parent IDs would be immutable for updates and are ignored in create requests .. + // Should we include these fields in CreateOpts and UpdateOpts? + nodebalancerconfigsEndpoint = "nodebalancers/{{ .ID }}/configs" + nodebalancernodesEndpoint = "nodebalancers/{{ .ID }}/configs/{{ .SecondID }}/nodes" + sshkeysEndpoint = "profile/sshkeys" + ticketsEndpoint = "support/tickets" + tokensEndpoint = "profile/tokens" + accountEndpoint = "account" + eventsEndpoint = "account/events" + invoicesEndpoint = "account/invoices" + invoiceItemsEndpoint = "account/invoices/{{ .ID }}/items" + profileEndpoint = "profile" + managedEndpoint = "managed" + tagsEndpoint = "tags" + usersEndpoint = "account/users" + notificationsEndpoint = "account/notifications" +) + +// Resource represents a linode API resource +type Resource struct { + name string + endpoint string + isTemplate bool + endpointTemplate *template.Template + R func(ctx context.Context) *resty.Request + PR func(ctx context.Context) *resty.Request +} + +// NewResource is the factory to create a new Resource struct. If it has a template string the useTemplate bool must be set. +func NewResource(client *Client, name string, endpoint string, useTemplate bool, singleType interface{}, pagedType interface{}) *Resource { + var tmpl *template.Template + + if useTemplate { + tmpl = template.Must(template.New(name).Parse(endpoint)) + } + + r := func(ctx context.Context) *resty.Request { + return client.R(ctx).SetResult(singleType) + } + + pr := func(ctx context.Context) *resty.Request { + return client.R(ctx).SetResult(pagedType) + } + + return &Resource{name, endpoint, useTemplate, tmpl, r, pr} +} + +func (r Resource) render(data ...interface{}) (string, error) { + if data == nil { + return "", NewError("Cannot template endpoint with data") + } + out := "" + buf := bytes.NewBufferString(out) + + var substitutions interface{} + if len(data) == 1 { + substitutions = struct{ ID interface{} }{data[0]} + } else if len(data) == 2 { + substitutions = struct { + ID interface{} + SecondID interface{} + }{data[0], data[1]} + } else { + return "", NewError("Too many arguments to render template (expected 1 or 2)") + } + if err := r.endpointTemplate.Execute(buf, substitutions); err != nil { + return "", NewError(err) + } + return buf.String(), nil +} + +// endpointWithID will return the rendered endpoint string for the resource with provided id +func (r Resource) endpointWithID(id ...int) (string, error) { + if !r.isTemplate { + return r.endpoint, nil + } + data := make([]interface{}, len(id)) + for i, v := range id { + data[i] = v + } + return r.render(data...) +} + +// Endpoint will return the non-templated endpoint string for resource +func (r Resource) Endpoint() (string, error) { + if r.isTemplate { + return "", NewError(fmt.Sprintf("Tried to get endpoint for %s without providing data for template", r.name)) + } + return r.endpoint, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/stackscripts.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/stackscripts.go new file mode 100644 index 00000000000..daf339b2ffc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/stackscripts.go @@ -0,0 +1,208 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// Stackscript represents a Linode StackScript +type Stackscript struct { + CreatedStr string `json:"created"` + UpdatedStr string `json:"updated"` + + ID int `json:"id"` + Username string `json:"username"` + Label string `json:"label"` + Description string `json:"description"` + Images []string `json:"images"` + DeploymentsTotal int `json:"deployments_total"` + DeploymentsActive int `json:"deployments_active"` + IsPublic bool `json:"is_public"` + Created *time.Time `json:"-"` + Updated *time.Time `json:"-"` + RevNote string `json:"rev_note"` + Script string `json:"script"` + UserDefinedFields *[]StackscriptUDF `json:"user_defined_fields"` + UserGravatarID string `json:"user_gravatar_id"` +} + +// StackscriptUDF define a single variable that is accepted by a Stackscript +type StackscriptUDF struct { + // A human-readable label for the field that will serve as the input prompt for entering the value during deployment. + Label string `json:"label"` + + // The name of the field. + Name string `json:"name"` + + // An example value for the field. + Example string `json:"example"` + + // A list of acceptable single values for the field. + OneOf string `json:"oneOf,omitempty"` + + // A list of acceptable values for the field in any quantity, combination or order. + ManyOf string `json:"manyOf,omitempty"` + + // The default value. If not specified, this value will be used. + Default string `json:"default,omitempty"` +} + +// StackscriptCreateOptions fields are those accepted by CreateStackscript +type StackscriptCreateOptions struct { + Label string `json:"label"` + Description string `json:"description"` + Images []string `json:"images"` + IsPublic bool `json:"is_public"` + RevNote string `json:"rev_note"` + Script string `json:"script"` +} + +// StackscriptUpdateOptions fields are those accepted by UpdateStackscript +type StackscriptUpdateOptions StackscriptCreateOptions + +// GetCreateOptions converts a Stackscript to StackscriptCreateOptions for use in CreateStackscript +func (i Stackscript) GetCreateOptions() StackscriptCreateOptions { + return StackscriptCreateOptions{ + Label: i.Label, + Description: i.Description, + Images: i.Images, + IsPublic: i.IsPublic, + RevNote: i.RevNote, + Script: i.Script, + } +} + +// GetUpdateOptions converts a Stackscript to StackscriptUpdateOptions for use in UpdateStackscript +func (i Stackscript) GetUpdateOptions() StackscriptUpdateOptions { + return StackscriptUpdateOptions{ + Label: i.Label, + Description: i.Description, + Images: i.Images, + IsPublic: i.IsPublic, + RevNote: i.RevNote, + Script: i.Script, + } +} + +// StackscriptsPagedResponse represents a paginated Stackscript API response +type StackscriptsPagedResponse struct { + *PageOptions + Data []Stackscript `json:"data"` +} + +// endpoint gets the endpoint URL for Stackscript +func (StackscriptsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.StackScripts.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Stackscripts when processing paginated Stackscript responses +func (resp *StackscriptsPagedResponse) appendData(r *StackscriptsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListStackscripts lists Stackscripts +func (c *Client) ListStackscripts(ctx context.Context, opts *ListOptions) ([]Stackscript, error) { + response := StackscriptsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (i *Stackscript) fixDates() *Stackscript { + i.Created, _ = parseDates(i.CreatedStr) + i.Updated, _ = parseDates(i.UpdatedStr) + return i +} + +// GetStackscript gets the Stackscript with the provided ID +func (c *Client) GetStackscript(ctx context.Context, id int) (*Stackscript, error) { + e, err := c.StackScripts.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx). + SetResult(&Stackscript{}). + Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Stackscript).fixDates(), nil +} + +// CreateStackscript creates a StackScript +func (c *Client) CreateStackscript(ctx context.Context, createOpts StackscriptCreateOptions) (*Stackscript, error) { + var body string + e, err := c.StackScripts.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&Stackscript{}) + + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Stackscript).fixDates(), nil +} + +// UpdateStackscript updates the StackScript with the specified id +func (c *Client) UpdateStackscript(ctx context.Context, id int, updateOpts StackscriptUpdateOptions) (*Stackscript, error) { + var body string + e, err := c.StackScripts.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + + req := c.R(ctx).SetResult(&Stackscript{}) + + if bodyData, err := json.Marshal(updateOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Stackscript).fixDates(), nil +} + +// DeleteStackscript deletes the StackScript with the specified id +func (c *Client) DeleteStackscript(ctx context.Context, id int) error { + e, err := c.StackScripts.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/support.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/support.go new file mode 100644 index 00000000000..6c72a4adf36 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/support.go @@ -0,0 +1,88 @@ +package linodego + +import ( + "context" + "fmt" + "time" +) + +// Ticket represents a support ticket object +type Ticket struct { + ID int `json:"id"` + Attachments []string `json:"attachments"` + Closed *time.Time `json:"-"` + Description string `json:"description"` + Entity *TicketEntity `json:"entity"` + GravatarID string `json:"gravatar_id"` + Opened *time.Time `json:"-"` + OpenedBy string `json:"opened_by"` + Status TicketStatus `json:"status"` + Summary string `json:"summary"` + Updated *time.Time `json:"-"` + UpdatedBy string `json:"updated_by"` +} + +// TicketEntity refers a ticket to a specific entity +type TicketEntity struct { + ID int `json:"id"` + Label string `json:"label"` + Type string `json:"type"` + URL string `json:"url"` +} + +// TicketStatus constants start with Ticket and include Linode API Ticket Status values +type TicketStatus string + +// TicketStatus constants reflect the current status of a Ticket +const ( + TicketNew TicketStatus = "new" + TicketClosed TicketStatus = "closed" + TicketOpen TicketStatus = "open" +) + +// TicketsPagedResponse represents a paginated ticket API response +type TicketsPagedResponse struct { + *PageOptions + Data []Ticket `json:"data"` +} + +func (TicketsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Tickets.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +func (resp *TicketsPagedResponse) appendData(r *TicketsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListTickets returns a collection of Support Tickets on the Account. Support Tickets +// can be both tickets opened with Linode for support, as well as tickets generated by +// Linode regarding the Account. This collection includes all Support Tickets generated +// on the Account, with open tickets returned first. +func (c *Client) ListTickets(ctx context.Context, opts *ListOptions) ([]Ticket, error) { + response := TicketsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// GetTicket gets a Support Ticket on the Account with the specified ID +func (c *Client) GetTicket(ctx context.Context, id int) (*Ticket, error) { + e, err := c.Tickets.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx). + SetResult(&Ticket{}). + Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Ticket), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/tags.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/tags.go new file mode 100644 index 00000000000..2cb44272b28 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/tags.go @@ -0,0 +1,219 @@ +package linodego + +import ( + "context" + "encoding/json" + "errors" + "fmt" +) + +// Tag represents a Tag object +type Tag struct { + Label string `json:"label"` +} + +// TaggedObject represents a Tagged Object object +type TaggedObject struct { + Type string `json:"type"` + RawData json.RawMessage `json:"data"` + Data interface{} `json:"-"` +} + +// SortedObjects currently only includes Instances +type SortedObjects struct { + Instances []Instance + Domains []Domain + Volumes []Volume + NodeBalancers []NodeBalancer + /* + StackScripts []Stackscript + */ +} + +// TaggedObjectList are a list of TaggedObjects, as returning by ListTaggedObjects +type TaggedObjectList []TaggedObject + +// TagCreateOptions fields are those accepted by CreateTag +type TagCreateOptions struct { + Label string `json:"label"` + Linodes []int `json:"linodes,omitempty"` + Domains []int `json:"domains,omitempty"` + Volumes []int `json:"volumes,omitempty"` + NodeBalancers []int `json:"nodebalancers,omitempty"` +} + +// GetCreateOptions converts a Tag to TagCreateOptions for use in CreateTag +func (i Tag) GetCreateOptions() (o TagCreateOptions) { + o.Label = i.Label + return +} + +// TaggedObjectsPagedResponse represents a paginated Tag API response +type TaggedObjectsPagedResponse struct { + *PageOptions + Data []TaggedObject `json:"data"` +} + +// TagsPagedResponse represents a paginated Tag API response +type TagsPagedResponse struct { + *PageOptions + Data []Tag `json:"data"` +} + +// endpoint gets the endpoint URL for Tag +func (TagsPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Tags.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// endpoint gets the endpoint URL for Tag +func (TaggedObjectsPagedResponse) endpointWithID(c *Client, id string) string { + endpoint, err := c.Tags.Endpoint() + if err != nil { + panic(err) + } + endpoint = fmt.Sprintf("%s/%s", endpoint, id) + return endpoint +} + +// appendData appends Tags when processing paginated Tag responses +func (resp *TagsPagedResponse) appendData(r *TagsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// appendData appends TaggedObjects when processing paginated TaggedObjects responses +func (resp *TaggedObjectsPagedResponse) appendData(r *TaggedObjectsPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListTags lists Tags +func (c *Client) ListTags(ctx context.Context, opts *ListOptions) ([]Tag, error) { + response := TagsPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixData stores an object of the type defined by Type in Data using RawData +func (i *TaggedObject) fixData() (*TaggedObject, error) { + switch i.Type { + case "linode": + obj := Instance{} + if err := json.Unmarshal(i.RawData, &obj); err != nil { + return nil, err + } + i.Data = obj + case "nodebalancer": + obj := NodeBalancer{} + if err := json.Unmarshal(i.RawData, &obj); err != nil { + return nil, err + } + i.Data = obj + case "domain": + obj := Domain{} + if err := json.Unmarshal(i.RawData, &obj); err != nil { + return nil, err + } + i.Data = obj + case "volume": + obj := Volume{} + if err := json.Unmarshal(i.RawData, &obj); err != nil { + return nil, err + } + i.Data = obj + } + + return i, nil +} + +// ListTaggedObjects lists Tagged Objects +func (c *Client) ListTaggedObjects(ctx context.Context, label string, opts *ListOptions) (TaggedObjectList, error) { + response := TaggedObjectsPagedResponse{} + err := c.listHelperWithID(ctx, &response, label, opts) + if err != nil { + return nil, err + } + for i := range response.Data { + if _, err := response.Data[i].fixData(); err != nil { + return nil, err + } + } + return response.Data, nil +} + +// SortedObjects converts a list of TaggedObjects into a Sorted Objects struct, for easier access +func (t TaggedObjectList) SortedObjects() (SortedObjects, error) { + so := SortedObjects{} + for _, o := range t { + switch o.Type { + case "linode": + if instance, ok := o.Data.(Instance); ok { + so.Instances = append(so.Instances, instance) + } else { + return so, errors.New("Expected an Instance when Type was \"linode\"") + } + case "domain": + if domain, ok := o.Data.(Domain); ok { + so.Domains = append(so.Domains, domain) + } else { + return so, errors.New("Expected a Domain when Type was \"domain\"") + } + case "volume": + if volume, ok := o.Data.(Volume); ok { + so.Volumes = append(so.Volumes, volume) + } else { + return so, errors.New("Expected an Volume when Type was \"volume\"") + } + case "nodebalancer": + if nodebalancer, ok := o.Data.(NodeBalancer); ok { + so.NodeBalancers = append(so.NodeBalancers, nodebalancer) + } else { + return so, errors.New("Expected an NodeBalancer when Type was \"nodebalancer\"") + } + } + } + return so, nil +} + +// CreateTag creates a Tag +func (c *Client) CreateTag(ctx context.Context, createOpts TagCreateOptions) (*Tag, error) { + var body string + e, err := c.Tags.Endpoint() + if err != nil { + return nil, err + } + + req := c.R(ctx).SetResult(&Tag{}) + + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Tag), nil +} + +// DeleteTag deletes the Tag with the specified id +func (c *Client) DeleteTag(ctx context.Context, label string) error { + e, err := c.Tags.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%s", e, label) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/types.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/types.go new file mode 100644 index 00000000000..d1ffbafef95 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/types.go @@ -0,0 +1,90 @@ +package linodego + +import ( + "context" + "fmt" +) + +// LinodeType represents a linode type object +type LinodeType struct { + ID string `json:"id"` + Disk int `json:"disk"` + Class LinodeTypeClass `json:"class"` // enum: nanode, standard, highmem, dedicated + Price *LinodePrice `json:"price"` + Label string `json:"label"` + Addons *LinodeAddons `json:"addons"` + NetworkOut int `json:"network_out"` + Memory int `json:"memory"` + Transfer int `json:"transfer"` + VCPUs int `json:"vcpus"` +} + +// LinodePrice represents a linode type price object +type LinodePrice struct { + Hourly float32 `json:"hourly"` + Monthly float32 `json:"monthly"` +} + +// LinodeBackupsAddon represents a linode backups addon object +type LinodeBackupsAddon struct { + Price *LinodePrice `json:"price"` +} + +// LinodeAddons represent the linode addons object +type LinodeAddons struct { + Backups *LinodeBackupsAddon `json:"backups"` +} + +// LinodeTypeClass constants start with Class and include Linode API Instance Type Classes +type LinodeTypeClass string + +// LinodeTypeClass contants are the Instance Type Classes that an Instance Type can be assigned +const ( + ClassNanode LinodeTypeClass = "nanode" + ClassStandard LinodeTypeClass = "standard" + ClassHighmem LinodeTypeClass = "highmem" + ClassDedicated LinodeTypeClass = "dedicated" +) + +// LinodeTypesPagedResponse represents a linode types API response for listing +type LinodeTypesPagedResponse struct { + *PageOptions + Data []LinodeType `json:"data"` +} + +func (LinodeTypesPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Types.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +func (resp *LinodeTypesPagedResponse) appendData(r *LinodeTypesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListTypes lists linode types +func (c *Client) ListTypes(ctx context.Context, opts *ListOptions) ([]LinodeType, error) { + response := LinodeTypesPagedResponse{} + err := c.listHelper(ctx, &response, opts) + if err != nil { + return nil, err + } + return response.Data, nil +} + +// GetType gets the type with the provided ID +func (c *Client) GetType(ctx context.Context, typeID string) (*LinodeType, error) { + e, err := c.Types.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%s", e, typeID) + + r, err := coupleAPIErrors(c.Types.R(ctx).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*LinodeType), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/util.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/util.go new file mode 100644 index 00000000000..a37a304e4a7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/util.go @@ -0,0 +1,15 @@ +package linodego + +import "time" + +const ( + dateLayout = "2006-01-02T15:04:05" +) + +func parseDates(dateStr string) (*time.Time, error) { + d, err := time.Parse(dateLayout, dateStr) + if err != nil { + return nil, err + } + return &d, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/volumes.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/volumes.go new file mode 100644 index 00000000000..0a528b5452d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/volumes.go @@ -0,0 +1,299 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "time" +) + +// VolumeStatus indicates the status of the Volume +type VolumeStatus string + +const ( + // VolumeCreating indicates the Volume is being created and is not yet available for use + VolumeCreating VolumeStatus = "creating" + + // VolumeActive indicates the Volume is online and available for use + VolumeActive VolumeStatus = "active" + + // VolumeResizing indicates the Volume is in the process of upgrading its current capacity + VolumeResizing VolumeStatus = "resizing" + + // VolumeContactSupport indicates there is a problem with the Volume. A support ticket must be opened to resolve the issue + VolumeContactSupport VolumeStatus = "contact_support" +) + +// Volume represents a linode volume object +type Volume struct { + CreatedStr string `json:"created"` + UpdatedStr string `json:"updated"` + + ID int `json:"id"` + Label string `json:"label"` + Status VolumeStatus `json:"status"` + Region string `json:"region"` + Size int `json:"size"` + LinodeID *int `json:"linode_id"` + FilesystemPath string `json:"filesystem_path"` + Tags []string `json:"tags"` + Created time.Time `json:"-"` + Updated time.Time `json:"-"` +} + +// VolumeCreateOptions fields are those accepted by CreateVolume +type VolumeCreateOptions struct { + Label string `json:"label,omitempty"` + Region string `json:"region,omitempty"` + LinodeID int `json:"linode_id,omitempty"` + ConfigID int `json:"config_id,omitempty"` + // The Volume's size, in GiB. Minimum size is 10GiB, maximum size is 10240GiB. A "0" value will result in the default size. + Size int `json:"size,omitempty"` + // An array of tags applied to this object. Tags are for organizational purposes only. + Tags []string `json:"tags"` +} + +// VolumeUpdateOptions fields are those accepted by UpdateVolume +type VolumeUpdateOptions struct { + Label string `json:"label,omitempty"` + Tags *[]string `json:"tags,omitempty"` +} + +// VolumeAttachOptions fields are those accepted by AttachVolume +type VolumeAttachOptions struct { + LinodeID int `json:"linode_id"` + ConfigID int `json:"config_id,omitempty"` +} + +// VolumesPagedResponse represents a linode API response for listing of volumes +type VolumesPagedResponse struct { + *PageOptions + Data []Volume `json:"data"` +} + +// GetUpdateOptions converts a Volume to VolumeUpdateOptions for use in UpdateVolume +func (v Volume) GetUpdateOptions() (updateOpts VolumeUpdateOptions) { + updateOpts.Label = v.Label + updateOpts.Tags = &v.Tags + return +} + +// GetCreateOptions converts a Volume to VolumeCreateOptions for use in CreateVolume +func (v Volume) GetCreateOptions() (createOpts VolumeCreateOptions) { + createOpts.Label = v.Label + createOpts.Tags = v.Tags + createOpts.Region = v.Region + createOpts.Size = v.Size + if v.LinodeID != nil && *v.LinodeID > 0 { + createOpts.LinodeID = *v.LinodeID + } + return +} + +// endpoint gets the endpoint URL for Volume +func (VolumesPagedResponse) endpoint(c *Client) string { + endpoint, err := c.Volumes.Endpoint() + if err != nil { + panic(err) + } + return endpoint +} + +// appendData appends Volumes when processing paginated Volume responses +func (resp *VolumesPagedResponse) appendData(r *VolumesPagedResponse) { + resp.Data = append(resp.Data, r.Data...) +} + +// ListVolumes lists Volumes +func (c *Client) ListVolumes(ctx context.Context, opts *ListOptions) ([]Volume, error) { + response := VolumesPagedResponse{} + err := c.listHelper(ctx, &response, opts) + for i := range response.Data { + response.Data[i].fixDates() + } + if err != nil { + return nil, err + } + return response.Data, nil +} + +// fixDates converts JSON timestamps to Go time.Time values +func (v *Volume) fixDates() *Volume { + if parsed, err := parseDates(v.CreatedStr); err != nil { + v.Created = *parsed + } + if parsed, err := parseDates(v.UpdatedStr); err != nil { + v.Updated = *parsed + } + return v +} + +// GetVolume gets the template with the provided ID +func (c *Client) GetVolume(ctx context.Context, id int) (*Volume, error) { + e, err := c.Volumes.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + r, err := coupleAPIErrors(c.R(ctx).SetResult(&Volume{}).Get(e)) + if err != nil { + return nil, err + } + return r.Result().(*Volume).fixDates(), nil +} + +// AttachVolume attaches a volume to a Linode instance +func (c *Client) AttachVolume(ctx context.Context, id int, options *VolumeAttachOptions) (*Volume, error) { + body := "" + if bodyData, err := json.Marshal(options); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + e, err := c.Volumes.Endpoint() + if err != nil { + return nil, NewError(err) + } + + e = fmt.Sprintf("%s/%d/attach", e, id) + resp, err := coupleAPIErrors(c.R(ctx). + SetResult(&Volume{}). + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + + return resp.Result().(*Volume).fixDates(), nil +} + +// CreateVolume creates a Linode Volume +func (c *Client) CreateVolume(ctx context.Context, createOpts VolumeCreateOptions) (*Volume, error) { + body := "" + if bodyData, err := json.Marshal(createOpts); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + e, err := c.Volumes.Endpoint() + if err != nil { + return nil, NewError(err) + } + + resp, err := coupleAPIErrors(c.R(ctx). + SetResult(&Volume{}). + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + + return resp.Result().(*Volume).fixDates(), nil +} + +// RenameVolume renames the label of a Linode volume +// DEPRECATED: use UpdateVolume +func (c *Client) RenameVolume(ctx context.Context, id int, label string) (*Volume, error) { + updateOpts := VolumeUpdateOptions{Label: label} + return c.UpdateVolume(ctx, id, updateOpts) +} + +// UpdateVolume updates the Volume with the specified id +func (c *Client) UpdateVolume(ctx context.Context, id int, volume VolumeUpdateOptions) (*Volume, error) { + var body string + e, err := c.Volumes.Endpoint() + if err != nil { + return nil, err + } + e = fmt.Sprintf("%s/%d", e, id) + + req := c.R(ctx).SetResult(&Volume{}) + + if bodyData, err := json.Marshal(volume); err == nil { + body = string(bodyData) + } else { + return nil, NewError(err) + } + + r, err := coupleAPIErrors(req. + SetBody(body). + Put(e)) + + if err != nil { + return nil, err + } + return r.Result().(*Volume).fixDates(), nil +} + +// CloneVolume clones a Linode volume +func (c *Client) CloneVolume(ctx context.Context, id int, label string) (*Volume, error) { + body := fmt.Sprintf("{\"label\":\"%s\"}", label) + + e, err := c.Volumes.Endpoint() + if err != nil { + return nil, NewError(err) + } + e = fmt.Sprintf("%s/%d/clone", e, id) + + resp, err := coupleAPIErrors(c.R(ctx). + SetResult(&Volume{}). + SetBody(body). + Post(e)) + + if err != nil { + return nil, err + } + + return resp.Result().(*Volume).fixDates(), nil +} + +// DetachVolume detaches a Linode volume +func (c *Client) DetachVolume(ctx context.Context, id int) error { + body := "" + + e, err := c.Volumes.Endpoint() + if err != nil { + return NewError(err) + } + + e = fmt.Sprintf("%s/%d/detach", e, id) + + _, err = coupleAPIErrors(c.R(ctx). + SetBody(body). + Post(e)) + + return err +} + +// ResizeVolume resizes an instance to new Linode type +func (c *Client) ResizeVolume(ctx context.Context, id int, size int) error { + body := fmt.Sprintf("{\"size\": %d}", size) + + e, err := c.Volumes.Endpoint() + if err != nil { + return NewError(err) + } + e = fmt.Sprintf("%s/%d/resize", e, id) + + _, err = coupleAPIErrors(c.R(ctx). + SetBody(body). + Post(e)) + + return err +} + +// DeleteVolume deletes the Volume with the specified id +func (c *Client) DeleteVolume(ctx context.Context, id int) error { + e, err := c.Volumes.Endpoint() + if err != nil { + return err + } + e = fmt.Sprintf("%s/%d", e, id) + + _, err = coupleAPIErrors(c.R(ctx).Delete(e)) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/waitfor.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/waitfor.go new file mode 100644 index 00000000000..8f29a41505b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/github.com/linode/linodego/waitfor.go @@ -0,0 +1,273 @@ +package linodego + +import ( + "context" + "encoding/json" + "fmt" + "log" + "strconv" + "strings" + "time" +) + +// WaitForInstanceStatus waits for the Linode instance to reach the desired state +// before returning. It will timeout with an error after timeoutSeconds. +func (client Client) WaitForInstanceStatus(ctx context.Context, instanceID int, status InstanceStatus, timeoutSeconds int) (*Instance, error) { + ctx, cancel := context.WithTimeout(ctx, time.Duration(timeoutSeconds)*time.Second) + defer cancel() + + ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + instance, err := client.GetInstance(ctx, instanceID) + if err != nil { + return instance, err + } + complete := (instance.Status == status) + + if complete { + return instance, nil + } + case <-ctx.Done(): + return nil, fmt.Errorf("Error waiting for Instance %d status %s: %s", instanceID, status, ctx.Err()) + } + } +} + +// WaitForInstanceDiskStatus waits for the Linode instance disk to reach the desired state +// before returning. It will timeout with an error after timeoutSeconds. +func (client Client) WaitForInstanceDiskStatus(ctx context.Context, instanceID int, diskID int, status DiskStatus, timeoutSeconds int) (*InstanceDisk, error) { + ctx, cancel := context.WithTimeout(ctx, time.Duration(timeoutSeconds)*time.Second) + defer cancel() + + ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + // GetInstanceDisk will 404 on newly created disks. use List instead. + // disk, err := client.GetInstanceDisk(ctx, instanceID, diskID) + disks, err := client.ListInstanceDisks(ctx, instanceID, nil) + if err != nil { + return nil, err + } + for _, disk := range disks { + if disk.ID == diskID { + complete := (disk.Status == status) + if complete { + return &disk, nil + } + break + } + } + + case <-ctx.Done(): + return nil, fmt.Errorf("Error waiting for Instance %d Disk %d status %s: %s", instanceID, diskID, status, ctx.Err()) + } + } +} + +// WaitForVolumeStatus waits for the Volume to reach the desired state +// before returning. It will timeout with an error after timeoutSeconds. +func (client Client) WaitForVolumeStatus(ctx context.Context, volumeID int, status VolumeStatus, timeoutSeconds int) (*Volume, error) { + ctx, cancel := context.WithTimeout(ctx, time.Duration(timeoutSeconds)*time.Second) + defer cancel() + + ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + volume, err := client.GetVolume(ctx, volumeID) + if err != nil { + return volume, err + } + complete := (volume.Status == status) + + if complete { + return volume, nil + } + case <-ctx.Done(): + return nil, fmt.Errorf("Error waiting for Volume %d status %s: %s", volumeID, status, ctx.Err()) + } + } +} + +// WaitForSnapshotStatus waits for the Snapshot to reach the desired state +// before returning. It will timeout with an error after timeoutSeconds. +func (client Client) WaitForSnapshotStatus(ctx context.Context, instanceID int, snapshotID int, status InstanceSnapshotStatus, timeoutSeconds int) (*InstanceSnapshot, error) { + ctx, cancel := context.WithTimeout(ctx, time.Duration(timeoutSeconds)*time.Second) + defer cancel() + + ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + snapshot, err := client.GetInstanceSnapshot(ctx, instanceID, snapshotID) + if err != nil { + return snapshot, err + } + complete := (snapshot.Status == status) + + if complete { + return snapshot, nil + } + case <-ctx.Done(): + return nil, fmt.Errorf("Error waiting for Instance %d Snapshot %d status %s: %s", instanceID, snapshotID, status, ctx.Err()) + } + } +} + +// WaitForVolumeLinodeID waits for the Volume to match the desired LinodeID +// before returning. An active Instance will not immediately attach or detach a volume, so the +// the LinodeID must be polled to determine volume readiness from the API. +// WaitForVolumeLinodeID will timeout with an error after timeoutSeconds. +func (client Client) WaitForVolumeLinodeID(ctx context.Context, volumeID int, linodeID *int, timeoutSeconds int) (*Volume, error) { + ctx, cancel := context.WithTimeout(ctx, time.Duration(timeoutSeconds)*time.Second) + defer cancel() + + ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + volume, err := client.GetVolume(ctx, volumeID) + if err != nil { + return volume, err + } + + if linodeID == nil && volume.LinodeID == nil { + return volume, nil + } else if linodeID == nil || volume.LinodeID == nil { + // continue waiting + } else if *volume.LinodeID == *linodeID { + return volume, nil + } + + case <-ctx.Done(): + return nil, fmt.Errorf("Error waiting for Volume %d to have Instance %v: %s", volumeID, linodeID, ctx.Err()) + } + } +} + +// WaitForEventFinished waits for an entity action to reach the 'finished' state +// before returning. It will timeout with an error after timeoutSeconds. +// If the event indicates a failure both the failed event and the error will be returned. +func (client Client) WaitForEventFinished(ctx context.Context, id interface{}, entityType EntityType, action EventAction, minStart time.Time, timeoutSeconds int) (*Event, error) { + titledEntityType := strings.Title(string(entityType)) + filter, _ := json.Marshal(map[string]interface{}{ + // Entity is not filtered by the API + // Perhaps one day they will permit Entity ID/Type filtering. + // We'll have to verify these values manually, for now. + //"entity": map[string]interface{}{ + // "id": fmt.Sprintf("%v", id), + // "type": entityType, + //}, + + // Nor is action + //"action": action, + + // Created is not correctly filtered by the API + // We'll have to verify these values manually, for now. + //"created": map[string]interface{}{ + // "+gte": minStart.Format(time.RFC3339), + //}, + + // With potentially 1000+ events coming back, we should filter on something + "seen": false, + + // Float the latest events to page 1 + "+order_by": "created", + "+order": "desc", + }) + + // Optimistically restrict results to page 1. We should remove this when more + // precise filtering options exist. + listOptions := NewListOptions(1, string(filter)) + + ctx, cancel := context.WithTimeout(ctx, time.Duration(timeoutSeconds)*time.Second) + defer cancel() + + if deadline, ok := ctx.Deadline(); ok { + duration := time.Until(deadline) + log.Printf("[INFO] Waiting %d seconds for %s events since %v for %s %v", int(duration.Seconds()), action, minStart, titledEntityType, id) + } + + ticker := time.NewTicker(client.millisecondsPerPoll * time.Millisecond) + defer ticker.Stop() + for { + select { + case <-ticker.C: + + events, err := client.ListEvents(ctx, listOptions) + if err != nil { + return nil, err + } + + // If there are events for this instance + action, inspect them + for _, event := range events { + if event.Action != action { + // log.Println("action mismatch", event.Action, action) + continue + } + if event.Entity == nil || event.Entity.Type != entityType { + // log.Println("type mismatch", event.Entity.Type, entityType) + continue + } + + var entID string + + switch event.Entity.ID.(type) { + case float64, float32: + entID = fmt.Sprintf("%.f", event.Entity.ID) + case int: + entID = strconv.Itoa(event.Entity.ID.(int)) + default: + entID = fmt.Sprintf("%v", event.Entity.ID) + } + + var findID string + switch id.(type) { + case float64, float32: + findID = fmt.Sprintf("%.f", id) + case int: + findID = strconv.Itoa(id.(int)) + default: + findID = fmt.Sprintf("%v", id) + } + + if entID != findID { + // log.Println("id mismatch", entID, findID) + continue + } + + // @TODO(displague) This event.Created check shouldn't be needed, but it appears + // that the ListEvents method is not populating it correctly + if event.Created == nil { + log.Printf("[WARN] event.Created is nil when API returned: %#+v", event.CreatedStr) + } else if *event.Created != minStart && !event.Created.After(minStart) { + // Not the event we were looking for + // log.Println(event.Created, "is not >=", minStart) + continue + + } + + if event.Status == EventFailed { + return &event, fmt.Errorf("%s %v action %s failed", titledEntityType, id, action) + } else if event.Status == EventScheduled { + log.Printf("[INFO] %s %v action %s is scheduled", titledEntityType, id, action) + } else if event.Status == EventFinished { + log.Printf("[INFO] %s %v action %s is finished", titledEntityType, id, action) + return &event, nil + } + // TODO(displague) can we bump the ticker to TimeRemaining/2 (>=1) when non-nil? + log.Printf("[INFO] %s %v action %s is %s", titledEntityType, id, action, event.Status) + } + case <-ctx.Done(): + return nil, fmt.Errorf("Error waiting for Event Status '%s' of %s %v action '%s': %s", EventFinished, titledEntityType, id, action, ctx.Err()) + } + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/LICENSE new file mode 100644 index 00000000000..6a66aea5eaf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/PATENTS b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/PATENTS new file mode 100644 index 00000000000..733099041f8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/context.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/context.go new file mode 100644 index 00000000000..a3c021d3f88 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/context.go @@ -0,0 +1,56 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package context defines the Context type, which carries deadlines, +// cancelation signals, and other request-scoped values across API boundaries +// and between processes. +// As of Go 1.7 this package is available in the standard library under the +// name context. https://golang.org/pkg/context. +// +// Incoming requests to a server should create a Context, and outgoing calls to +// servers should accept a Context. The chain of function calls between must +// propagate the Context, optionally replacing it with a modified copy created +// using WithDeadline, WithTimeout, WithCancel, or WithValue. +// +// Programs that use Contexts should follow these rules to keep interfaces +// consistent across packages and enable static analysis tools to check context +// propagation: +// +// Do not store Contexts inside a struct type; instead, pass a Context +// explicitly to each function that needs it. The Context should be the first +// parameter, typically named ctx: +// +// func DoSomething(ctx context.Context, arg Arg) error { +// // ... use ctx ... +// } +// +// Do not pass a nil Context, even if a function permits it. Pass context.TODO +// if you are unsure about which Context to use. +// +// Use context Values only for request-scoped data that transits processes and +// APIs, not for passing optional parameters to functions. +// +// The same Context may be passed to functions running in different goroutines; +// Contexts are safe for simultaneous use by multiple goroutines. +// +// See http://blog.golang.org/context for example code for a server that uses +// Contexts. +package context // import "golang.org/x/net/context" + +// Background returns a non-nil, empty Context. It is never canceled, has no +// values, and has no deadline. It is typically used by the main function, +// initialization, and tests, and as the top-level Context for incoming +// requests. +func Background() Context { + return background +} + +// TODO returns a non-nil, empty Context. Code should use context.TODO when +// it's unclear which Context to use or it is not yet available (because the +// surrounding function has not yet been extended to accept a Context +// parameter). TODO is recognized by static analysis tools that determine +// whether Contexts are propagated correctly in a program. +func TODO() Context { + return todo +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go new file mode 100644 index 00000000000..37dc0cfdb5b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go @@ -0,0 +1,71 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ctxhttp provides helper functions for performing context-aware HTTP requests. +package ctxhttp // import "golang.org/x/net/context/ctxhttp" + +import ( + "context" + "io" + "net/http" + "net/url" + "strings" +) + +// Do sends an HTTP request with the provided http.Client and returns +// an HTTP response. +// +// If the client is nil, http.DefaultClient is used. +// +// The provided ctx must be non-nil. If it is canceled or times out, +// ctx.Err() will be returned. +func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) { + if client == nil { + client = http.DefaultClient + } + resp, err := client.Do(req.WithContext(ctx)) + // If we got an error, and the context has been canceled, + // the context's error is probably more useful. + if err != nil { + select { + case <-ctx.Done(): + err = ctx.Err() + default: + } + } + return resp, err +} + +// Get issues a GET request via the Do function. +func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + return Do(ctx, client, req) +} + +// Head issues a HEAD request via the Do function. +func Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) { + req, err := http.NewRequest("HEAD", url, nil) + if err != nil { + return nil, err + } + return Do(ctx, client, req) +} + +// Post issues a POST request via the Do function. +func Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) { + req, err := http.NewRequest("POST", url, body) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", bodyType) + return Do(ctx, client, req) +} + +// PostForm issues a POST request via the Do function. +func PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) { + return Post(ctx, client, url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode())) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/go17.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/go17.go new file mode 100644 index 00000000000..d20f52b7de9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/go17.go @@ -0,0 +1,72 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package context + +import ( + "context" // standard library's context, as of Go 1.7 + "time" +) + +var ( + todo = context.TODO() + background = context.Background() +) + +// Canceled is the error returned by Context.Err when the context is canceled. +var Canceled = context.Canceled + +// DeadlineExceeded is the error returned by Context.Err when the context's +// deadline passes. +var DeadlineExceeded = context.DeadlineExceeded + +// WithCancel returns a copy of parent with a new Done channel. The returned +// context's Done channel is closed when the returned cancel function is called +// or when the parent context's Done channel is closed, whichever happens first. +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete. +func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { + ctx, f := context.WithCancel(parent) + return ctx, CancelFunc(f) +} + +// WithDeadline returns a copy of the parent context with the deadline adjusted +// to be no later than d. If the parent's deadline is already earlier than d, +// WithDeadline(parent, d) is semantically equivalent to parent. The returned +// context's Done channel is closed when the deadline expires, when the returned +// cancel function is called, or when the parent context's Done channel is +// closed, whichever happens first. +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete. +func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { + ctx, f := context.WithDeadline(parent, deadline) + return ctx, CancelFunc(f) +} + +// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete: +// +// func slowOperationWithTimeout(ctx context.Context) (Result, error) { +// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) +// defer cancel() // releases resources if slowOperation completes before timeout elapses +// return slowOperation(ctx) +// } +func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { + return WithDeadline(parent, time.Now().Add(timeout)) +} + +// WithValue returns a copy of parent in which the value associated with key is +// val. +// +// Use context Values only for request-scoped data that transits processes and +// APIs, not for passing optional parameters to functions. +func WithValue(parent Context, key interface{}, val interface{}) Context { + return context.WithValue(parent, key, val) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/go19.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/go19.go new file mode 100644 index 00000000000..d88bd1db127 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/go19.go @@ -0,0 +1,20 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package context + +import "context" // standard library's context, as of Go 1.7 + +// A Context carries a deadline, a cancelation signal, and other values across +// API boundaries. +// +// Context's methods may be called by multiple goroutines simultaneously. +type Context = context.Context + +// A CancelFunc tells an operation to abandon its work. +// A CancelFunc does not wait for the work to stop. +// After the first call, subsequent calls to a CancelFunc do nothing. +type CancelFunc = context.CancelFunc diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/pre_go17.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/pre_go17.go new file mode 100644 index 00000000000..0f35592df51 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/pre_go17.go @@ -0,0 +1,300 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7 + +package context + +import ( + "errors" + "fmt" + "sync" + "time" +) + +// An emptyCtx is never canceled, has no values, and has no deadline. It is not +// struct{}, since vars of this type must have distinct addresses. +type emptyCtx int + +func (*emptyCtx) Deadline() (deadline time.Time, ok bool) { + return +} + +func (*emptyCtx) Done() <-chan struct{} { + return nil +} + +func (*emptyCtx) Err() error { + return nil +} + +func (*emptyCtx) Value(key interface{}) interface{} { + return nil +} + +func (e *emptyCtx) String() string { + switch e { + case background: + return "context.Background" + case todo: + return "context.TODO" + } + return "unknown empty Context" +} + +var ( + background = new(emptyCtx) + todo = new(emptyCtx) +) + +// Canceled is the error returned by Context.Err when the context is canceled. +var Canceled = errors.New("context canceled") + +// DeadlineExceeded is the error returned by Context.Err when the context's +// deadline passes. +var DeadlineExceeded = errors.New("context deadline exceeded") + +// WithCancel returns a copy of parent with a new Done channel. The returned +// context's Done channel is closed when the returned cancel function is called +// or when the parent context's Done channel is closed, whichever happens first. +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete. +func WithCancel(parent Context) (ctx Context, cancel CancelFunc) { + c := newCancelCtx(parent) + propagateCancel(parent, c) + return c, func() { c.cancel(true, Canceled) } +} + +// newCancelCtx returns an initialized cancelCtx. +func newCancelCtx(parent Context) *cancelCtx { + return &cancelCtx{ + Context: parent, + done: make(chan struct{}), + } +} + +// propagateCancel arranges for child to be canceled when parent is. +func propagateCancel(parent Context, child canceler) { + if parent.Done() == nil { + return // parent is never canceled + } + if p, ok := parentCancelCtx(parent); ok { + p.mu.Lock() + if p.err != nil { + // parent has already been canceled + child.cancel(false, p.err) + } else { + if p.children == nil { + p.children = make(map[canceler]bool) + } + p.children[child] = true + } + p.mu.Unlock() + } else { + go func() { + select { + case <-parent.Done(): + child.cancel(false, parent.Err()) + case <-child.Done(): + } + }() + } +} + +// parentCancelCtx follows a chain of parent references until it finds a +// *cancelCtx. This function understands how each of the concrete types in this +// package represents its parent. +func parentCancelCtx(parent Context) (*cancelCtx, bool) { + for { + switch c := parent.(type) { + case *cancelCtx: + return c, true + case *timerCtx: + return c.cancelCtx, true + case *valueCtx: + parent = c.Context + default: + return nil, false + } + } +} + +// removeChild removes a context from its parent. +func removeChild(parent Context, child canceler) { + p, ok := parentCancelCtx(parent) + if !ok { + return + } + p.mu.Lock() + if p.children != nil { + delete(p.children, child) + } + p.mu.Unlock() +} + +// A canceler is a context type that can be canceled directly. The +// implementations are *cancelCtx and *timerCtx. +type canceler interface { + cancel(removeFromParent bool, err error) + Done() <-chan struct{} +} + +// A cancelCtx can be canceled. When canceled, it also cancels any children +// that implement canceler. +type cancelCtx struct { + Context + + done chan struct{} // closed by the first cancel call. + + mu sync.Mutex + children map[canceler]bool // set to nil by the first cancel call + err error // set to non-nil by the first cancel call +} + +func (c *cancelCtx) Done() <-chan struct{} { + return c.done +} + +func (c *cancelCtx) Err() error { + c.mu.Lock() + defer c.mu.Unlock() + return c.err +} + +func (c *cancelCtx) String() string { + return fmt.Sprintf("%v.WithCancel", c.Context) +} + +// cancel closes c.done, cancels each of c's children, and, if +// removeFromParent is true, removes c from its parent's children. +func (c *cancelCtx) cancel(removeFromParent bool, err error) { + if err == nil { + panic("context: internal error: missing cancel error") + } + c.mu.Lock() + if c.err != nil { + c.mu.Unlock() + return // already canceled + } + c.err = err + close(c.done) + for child := range c.children { + // NOTE: acquiring the child's lock while holding parent's lock. + child.cancel(false, err) + } + c.children = nil + c.mu.Unlock() + + if removeFromParent { + removeChild(c.Context, c) + } +} + +// WithDeadline returns a copy of the parent context with the deadline adjusted +// to be no later than d. If the parent's deadline is already earlier than d, +// WithDeadline(parent, d) is semantically equivalent to parent. The returned +// context's Done channel is closed when the deadline expires, when the returned +// cancel function is called, or when the parent context's Done channel is +// closed, whichever happens first. +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete. +func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { + if cur, ok := parent.Deadline(); ok && cur.Before(deadline) { + // The current deadline is already sooner than the new one. + return WithCancel(parent) + } + c := &timerCtx{ + cancelCtx: newCancelCtx(parent), + deadline: deadline, + } + propagateCancel(parent, c) + d := deadline.Sub(time.Now()) + if d <= 0 { + c.cancel(true, DeadlineExceeded) // deadline has already passed + return c, func() { c.cancel(true, Canceled) } + } + c.mu.Lock() + defer c.mu.Unlock() + if c.err == nil { + c.timer = time.AfterFunc(d, func() { + c.cancel(true, DeadlineExceeded) + }) + } + return c, func() { c.cancel(true, Canceled) } +} + +// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to +// implement Done and Err. It implements cancel by stopping its timer then +// delegating to cancelCtx.cancel. +type timerCtx struct { + *cancelCtx + timer *time.Timer // Under cancelCtx.mu. + + deadline time.Time +} + +func (c *timerCtx) Deadline() (deadline time.Time, ok bool) { + return c.deadline, true +} + +func (c *timerCtx) String() string { + return fmt.Sprintf("%v.WithDeadline(%s [%s])", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now())) +} + +func (c *timerCtx) cancel(removeFromParent bool, err error) { + c.cancelCtx.cancel(false, err) + if removeFromParent { + // Remove this timerCtx from its parent cancelCtx's children. + removeChild(c.cancelCtx.Context, c) + } + c.mu.Lock() + if c.timer != nil { + c.timer.Stop() + c.timer = nil + } + c.mu.Unlock() +} + +// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)). +// +// Canceling this context releases resources associated with it, so code should +// call cancel as soon as the operations running in this Context complete: +// +// func slowOperationWithTimeout(ctx context.Context) (Result, error) { +// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) +// defer cancel() // releases resources if slowOperation completes before timeout elapses +// return slowOperation(ctx) +// } +func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { + return WithDeadline(parent, time.Now().Add(timeout)) +} + +// WithValue returns a copy of parent in which the value associated with key is +// val. +// +// Use context Values only for request-scoped data that transits processes and +// APIs, not for passing optional parameters to functions. +func WithValue(parent Context, key interface{}, val interface{}) Context { + return &valueCtx{parent, key, val} +} + +// A valueCtx carries a key-value pair. It implements Value for that key and +// delegates all other calls to the embedded Context. +type valueCtx struct { + Context + key, val interface{} +} + +func (c *valueCtx) String() string { + return fmt.Sprintf("%v.WithValue(%#v, %#v)", c.Context, c.key, c.val) +} + +func (c *valueCtx) Value(key interface{}) interface{} { + if c.key == key { + return c.val + } + return c.Context.Value(key) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/pre_go19.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/pre_go19.go new file mode 100644 index 00000000000..b105f80be4f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/context/pre_go19.go @@ -0,0 +1,109 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +package context + +import "time" + +// A Context carries a deadline, a cancelation signal, and other values across +// API boundaries. +// +// Context's methods may be called by multiple goroutines simultaneously. +type Context interface { + // Deadline returns the time when work done on behalf of this context + // should be canceled. Deadline returns ok==false when no deadline is + // set. Successive calls to Deadline return the same results. + Deadline() (deadline time.Time, ok bool) + + // Done returns a channel that's closed when work done on behalf of this + // context should be canceled. Done may return nil if this context can + // never be canceled. Successive calls to Done return the same value. + // + // WithCancel arranges for Done to be closed when cancel is called; + // WithDeadline arranges for Done to be closed when the deadline + // expires; WithTimeout arranges for Done to be closed when the timeout + // elapses. + // + // Done is provided for use in select statements: + // + // // Stream generates values with DoSomething and sends them to out + // // until DoSomething returns an error or ctx.Done is closed. + // func Stream(ctx context.Context, out chan<- Value) error { + // for { + // v, err := DoSomething(ctx) + // if err != nil { + // return err + // } + // select { + // case <-ctx.Done(): + // return ctx.Err() + // case out <- v: + // } + // } + // } + // + // See http://blog.golang.org/pipelines for more examples of how to use + // a Done channel for cancelation. + Done() <-chan struct{} + + // Err returns a non-nil error value after Done is closed. Err returns + // Canceled if the context was canceled or DeadlineExceeded if the + // context's deadline passed. No other values for Err are defined. + // After Done is closed, successive calls to Err return the same value. + Err() error + + // Value returns the value associated with this context for key, or nil + // if no value is associated with key. Successive calls to Value with + // the same key returns the same result. + // + // Use context values only for request-scoped data that transits + // processes and API boundaries, not for passing optional parameters to + // functions. + // + // A key identifies a specific value in a Context. Functions that wish + // to store values in Context typically allocate a key in a global + // variable then use that key as the argument to context.WithValue and + // Context.Value. A key can be any type that supports equality; + // packages should define keys as an unexported type to avoid + // collisions. + // + // Packages that define a Context key should provide type-safe accessors + // for the values stores using that key: + // + // // Package user defines a User type that's stored in Contexts. + // package user + // + // import "golang.org/x/net/context" + // + // // User is the type of value stored in the Contexts. + // type User struct {...} + // + // // key is an unexported type for keys defined in this package. + // // This prevents collisions with keys defined in other packages. + // type key int + // + // // userKey is the key for user.User values in Contexts. It is + // // unexported; clients use user.NewContext and user.FromContext + // // instead of using this key directly. + // var userKey key = 0 + // + // // NewContext returns a new Context that carries value u. + // func NewContext(ctx context.Context, u *User) context.Context { + // return context.WithValue(ctx, userKey, u) + // } + // + // // FromContext returns the User value stored in ctx, if any. + // func FromContext(ctx context.Context) (*User, bool) { + // u, ok := ctx.Value(userKey).(*User) + // return u, ok + // } + Value(key interface{}) interface{} +} + +// A CancelFunc tells an operation to abandon its work. +// A CancelFunc does not wait for the work to stop. +// After the first call, subsequent calls to a CancelFunc do nothing. +type CancelFunc func() diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/publicsuffix/list.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/publicsuffix/list.go new file mode 100644 index 00000000000..8405ac1b745 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/net/publicsuffix/list.go @@ -0,0 +1,177 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package publicsuffix provides a public suffix list based on data from +// https://publicsuffix.org/ +// +// A public suffix is one under which Internet users can directly register +// names. It is related to, but different from, a TLD (top level domain). +// +// "com" is a TLD (top level domain). Top level means it has no dots. +// +// "com" is also a public suffix. Amazon and Google have registered different +// siblings under that domain: "amazon.com" and "google.com". +// +// "au" is another TLD, again because it has no dots. But it's not "amazon.au". +// Instead, it's "amazon.com.au". +// +// "com.au" isn't an actual TLD, because it's not at the top level (it has +// dots). But it is an eTLD (effective TLD), because that's the branching point +// for domain name registrars. +// +// Another name for "an eTLD" is "a public suffix". Often, what's more of +// interest is the eTLD+1, or one more label than the public suffix. For +// example, browsers partition read/write access to HTTP cookies according to +// the eTLD+1. Web pages served from "amazon.com.au" can't read cookies from +// "google.com.au", but web pages served from "maps.google.com" can share +// cookies from "www.google.com", so you don't have to sign into Google Maps +// separately from signing into Google Web Search. Note that all four of those +// domains have 3 labels and 2 dots. The first two domains are each an eTLD+1, +// the last two are not (but share the same eTLD+1: "google.com"). +// +// All of these domains have the same eTLD+1: +// - "www.books.amazon.co.uk" +// - "books.amazon.co.uk" +// - "amazon.co.uk" +// Specifically, the eTLD+1 is "amazon.co.uk", because the eTLD is "co.uk". +// +// There is no closed form algorithm to calculate the eTLD of a domain. +// Instead, the calculation is data driven. This package provides a +// pre-compiled snapshot of Mozilla's PSL (Public Suffix List) data at +// https://publicsuffix.org/ +package publicsuffix // import "golang.org/x/net/publicsuffix" + +// TODO: specify case sensitivity and leading/trailing dot behavior for +// func PublicSuffix and func EffectiveTLDPlusOne. + +import ( + "fmt" + "net/http/cookiejar" + "strings" +) + +// List implements the cookiejar.PublicSuffixList interface by calling the +// PublicSuffix function. +var List cookiejar.PublicSuffixList = list{} + +type list struct{} + +func (list) PublicSuffix(domain string) string { + ps, _ := PublicSuffix(domain) + return ps +} + +func (list) String() string { + return version +} + +// PublicSuffix returns the public suffix of the domain using a copy of the +// publicsuffix.org database compiled into the library. +// +// icann is whether the public suffix is managed by the Internet Corporation +// for Assigned Names and Numbers. If not, the public suffix is either a +// privately managed domain (and in practice, not a top level domain) or an +// unmanaged top level domain (and not explicitly mentioned in the +// publicsuffix.org list). For example, "foo.org" and "foo.co.uk" are ICANN +// domains, "foo.dyndns.org" and "foo.blogspot.co.uk" are private domains and +// "cromulent" is an unmanaged top level domain. +// +// Use cases for distinguishing ICANN domains like "foo.com" from private +// domains like "foo.appspot.com" can be found at +// https://wiki.mozilla.org/Public_Suffix_List/Use_Cases +func PublicSuffix(domain string) (publicSuffix string, icann bool) { + lo, hi := uint32(0), uint32(numTLD) + s, suffix, icannNode, wildcard := domain, len(domain), false, false +loop: + for { + dot := strings.LastIndex(s, ".") + if wildcard { + icann = icannNode + suffix = 1 + dot + } + if lo == hi { + break + } + f := find(s[1+dot:], lo, hi) + if f == notFound { + break + } + + u := nodes[f] >> (nodesBitsTextOffset + nodesBitsTextLength) + icannNode = u&(1<>= nodesBitsICANN + u = children[u&(1<>= childrenBitsLo + hi = u & (1<>= childrenBitsHi + switch u & (1<>= childrenBitsNodeType + wildcard = u&(1<>= nodesBitsTextLength + offset := x & (1< 299 { + return nil, fmt.Errorf("oauth2: cannot fetch token: %v\nResponse: %s", r.Status, body) + } + + var token *Token + content, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type")) + switch content { + case "application/x-www-form-urlencoded", "text/plain": + vals, err := url.ParseQuery(string(body)) + if err != nil { + return nil, err + } + token = &Token{ + AccessToken: vals.Get("access_token"), + TokenType: vals.Get("token_type"), + RefreshToken: vals.Get("refresh_token"), + Raw: vals, + } + e := vals.Get("expires_in") + if e == "" { + // TODO(jbd): Facebook's OAuth2 implementation is broken and + // returns expires_in field in expires. Remove the fallback to expires, + // when Facebook fixes their implementation. + e = vals.Get("expires") + } + expires, _ := strconv.Atoi(e) + if expires != 0 { + token.Expiry = time.Now().Add(time.Duration(expires) * time.Second) + } + default: + var tj tokenJSON + if err = json.Unmarshal(body, &tj); err != nil { + return nil, err + } + token = &Token{ + AccessToken: tj.AccessToken, + TokenType: tj.TokenType, + RefreshToken: tj.RefreshToken, + Expiry: tj.expiry(), + Raw: make(map[string]interface{}), + } + json.Unmarshal(body, &token.Raw) // no error checks for optional fields + } + // Don't overwrite `RefreshToken` with an empty value + // if this was a token refreshing request. + if token.RefreshToken == "" { + token.RefreshToken = v.Get("refresh_token") + } + return token, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/internal/transport.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/internal/transport.go new file mode 100644 index 00000000000..f1f173e345d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/internal/transport.go @@ -0,0 +1,69 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package internal contains support packages for oauth2 package. +package internal + +import ( + "net/http" + + "golang.org/x/net/context" +) + +// HTTPClient is the context key to use with golang.org/x/net/context's +// WithValue function to associate an *http.Client value with a context. +var HTTPClient ContextKey + +// ContextKey is just an empty struct. It exists so HTTPClient can be +// an immutable public variable with a unique type. It's immutable +// because nobody else can create a ContextKey, being unexported. +type ContextKey struct{} + +// ContextClientFunc is a func which tries to return an *http.Client +// given a Context value. If it returns an error, the search stops +// with that error. If it returns (nil, nil), the search continues +// down the list of registered funcs. +type ContextClientFunc func(context.Context) (*http.Client, error) + +var contextClientFuncs []ContextClientFunc + +func RegisterContextClientFunc(fn ContextClientFunc) { + contextClientFuncs = append(contextClientFuncs, fn) +} + +func ContextClient(ctx context.Context) (*http.Client, error) { + if ctx != nil { + if hc, ok := ctx.Value(HTTPClient).(*http.Client); ok { + return hc, nil + } + } + for _, fn := range contextClientFuncs { + c, err := fn(ctx) + if err != nil { + return nil, err + } + if c != nil { + return c, nil + } + } + return http.DefaultClient, nil +} + +func ContextTransport(ctx context.Context) http.RoundTripper { + hc, err := ContextClient(ctx) + // This is a rare error case (somebody using nil on App Engine). + if err != nil { + return ErrorTransport{err} + } + return hc.Transport +} + +// ErrorTransport returns the specified error on RoundTrip. +// This RoundTripper should be used in rare error cases where +// error handling can be postponed to response handling time. +type ErrorTransport struct{ Err error } + +func (t ErrorTransport) RoundTrip(*http.Request) (*http.Response, error) { + return nil, t.Err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/oauth2.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/oauth2.go new file mode 100644 index 00000000000..3e4835d7e95 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/oauth2.go @@ -0,0 +1,340 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package oauth2 provides support for making +// OAuth2 authorized and authenticated HTTP requests. +// It can additionally grant authorization with Bearer JWT. +package oauth2 // import "golang.org/x/oauth2" + +import ( + "bytes" + "errors" + "net/http" + "net/url" + "strings" + "sync" + + "golang.org/x/net/context" + "golang.org/x/oauth2/internal" +) + +// NoContext is the default context you should supply if not using +// your own context.Context (see https://golang.org/x/net/context). +// +// Deprecated: Use context.Background() or context.TODO() instead. +var NoContext = context.TODO() + +// RegisterBrokenAuthHeaderProvider registers an OAuth2 server +// identified by the tokenURL prefix as an OAuth2 implementation +// which doesn't support the HTTP Basic authentication +// scheme to authenticate with the authorization server. +// Once a server is registered, credentials (client_id and client_secret) +// will be passed as query parameters rather than being present +// in the Authorization header. +// See https://code.google.com/p/goauth2/issues/detail?id=31 for background. +func RegisterBrokenAuthHeaderProvider(tokenURL string) { + internal.RegisterBrokenAuthHeaderProvider(tokenURL) +} + +// Config describes a typical 3-legged OAuth2 flow, with both the +// client application information and the server's endpoint URLs. +// For the client credentials 2-legged OAuth2 flow, see the clientcredentials +// package (https://golang.org/x/oauth2/clientcredentials). +type Config struct { + // ClientID is the application's ID. + ClientID string + + // ClientSecret is the application's secret. + ClientSecret string + + // Endpoint contains the resource server's token endpoint + // URLs. These are constants specific to each server and are + // often available via site-specific packages, such as + // google.Endpoint or github.Endpoint. + Endpoint Endpoint + + // RedirectURL is the URL to redirect users going through + // the OAuth flow, after the resource owner's URLs. + RedirectURL string + + // Scope specifies optional requested permissions. + Scopes []string +} + +// A TokenSource is anything that can return a token. +type TokenSource interface { + // Token returns a token or an error. + // Token must be safe for concurrent use by multiple goroutines. + // The returned Token must not be modified. + Token() (*Token, error) +} + +// Endpoint contains the OAuth 2.0 provider's authorization and token +// endpoint URLs. +type Endpoint struct { + AuthURL string + TokenURL string +} + +var ( + // AccessTypeOnline and AccessTypeOffline are options passed + // to the Options.AuthCodeURL method. They modify the + // "access_type" field that gets sent in the URL returned by + // AuthCodeURL. + // + // Online is the default if neither is specified. If your + // application needs to refresh access tokens when the user + // is not present at the browser, then use offline. This will + // result in your application obtaining a refresh token the + // first time your application exchanges an authorization + // code for a user. + AccessTypeOnline AuthCodeOption = SetAuthURLParam("access_type", "online") + AccessTypeOffline AuthCodeOption = SetAuthURLParam("access_type", "offline") + + // ApprovalForce forces the users to view the consent dialog + // and confirm the permissions request at the URL returned + // from AuthCodeURL, even if they've already done so. + ApprovalForce AuthCodeOption = SetAuthURLParam("approval_prompt", "force") +) + +// An AuthCodeOption is passed to Config.AuthCodeURL. +type AuthCodeOption interface { + setValue(url.Values) +} + +type setParam struct{ k, v string } + +func (p setParam) setValue(m url.Values) { m.Set(p.k, p.v) } + +// SetAuthURLParam builds an AuthCodeOption which passes key/value parameters +// to a provider's authorization endpoint. +func SetAuthURLParam(key, value string) AuthCodeOption { + return setParam{key, value} +} + +// AuthCodeURL returns a URL to OAuth 2.0 provider's consent page +// that asks for permissions for the required scopes explicitly. +// +// State is a token to protect the user from CSRF attacks. You must +// always provide a non-zero string and validate that it matches the +// the state query parameter on your redirect callback. +// See http://tools.ietf.org/html/rfc6749#section-10.12 for more info. +// +// Opts may include AccessTypeOnline or AccessTypeOffline, as well +// as ApprovalForce. +func (c *Config) AuthCodeURL(state string, opts ...AuthCodeOption) string { + var buf bytes.Buffer + buf.WriteString(c.Endpoint.AuthURL) + v := url.Values{ + "response_type": {"code"}, + "client_id": {c.ClientID}, + "redirect_uri": internal.CondVal(c.RedirectURL), + "scope": internal.CondVal(strings.Join(c.Scopes, " ")), + "state": internal.CondVal(state), + } + for _, opt := range opts { + opt.setValue(v) + } + if strings.Contains(c.Endpoint.AuthURL, "?") { + buf.WriteByte('&') + } else { + buf.WriteByte('?') + } + buf.WriteString(v.Encode()) + return buf.String() +} + +// PasswordCredentialsToken converts a resource owner username and password +// pair into a token. +// +// Per the RFC, this grant type should only be used "when there is a high +// degree of trust between the resource owner and the client (e.g., the client +// is part of the device operating system or a highly privileged application), +// and when other authorization grant types are not available." +// See https://tools.ietf.org/html/rfc6749#section-4.3 for more info. +// +// The HTTP client to use is derived from the context. +// If nil, http.DefaultClient is used. +func (c *Config) PasswordCredentialsToken(ctx context.Context, username, password string) (*Token, error) { + return retrieveToken(ctx, c, url.Values{ + "grant_type": {"password"}, + "username": {username}, + "password": {password}, + "scope": internal.CondVal(strings.Join(c.Scopes, " ")), + }) +} + +// Exchange converts an authorization code into a token. +// +// It is used after a resource provider redirects the user back +// to the Redirect URI (the URL obtained from AuthCodeURL). +// +// The HTTP client to use is derived from the context. +// If a client is not provided via the context, http.DefaultClient is used. +// +// The code will be in the *http.Request.FormValue("code"). Before +// calling Exchange, be sure to validate FormValue("state"). +func (c *Config) Exchange(ctx context.Context, code string) (*Token, error) { + return retrieveToken(ctx, c, url.Values{ + "grant_type": {"authorization_code"}, + "code": {code}, + "redirect_uri": internal.CondVal(c.RedirectURL), + }) +} + +// Client returns an HTTP client using the provided token. +// The token will auto-refresh as necessary. The underlying +// HTTP transport will be obtained using the provided context. +// The returned client and its Transport should not be modified. +func (c *Config) Client(ctx context.Context, t *Token) *http.Client { + return NewClient(ctx, c.TokenSource(ctx, t)) +} + +// TokenSource returns a TokenSource that returns t until t expires, +// automatically refreshing it as necessary using the provided context. +// +// Most users will use Config.Client instead. +func (c *Config) TokenSource(ctx context.Context, t *Token) TokenSource { + tkr := &tokenRefresher{ + ctx: ctx, + conf: c, + } + if t != nil { + tkr.refreshToken = t.RefreshToken + } + return &reuseTokenSource{ + t: t, + new: tkr, + } +} + +// tokenRefresher is a TokenSource that makes "grant_type"=="refresh_token" +// HTTP requests to renew a token using a RefreshToken. +type tokenRefresher struct { + ctx context.Context // used to get HTTP requests + conf *Config + refreshToken string +} + +// WARNING: Token is not safe for concurrent access, as it +// updates the tokenRefresher's refreshToken field. +// Within this package, it is used by reuseTokenSource which +// synchronizes calls to this method with its own mutex. +func (tf *tokenRefresher) Token() (*Token, error) { + if tf.refreshToken == "" { + return nil, errors.New("oauth2: token expired and refresh token is not set") + } + + tk, err := retrieveToken(tf.ctx, tf.conf, url.Values{ + "grant_type": {"refresh_token"}, + "refresh_token": {tf.refreshToken}, + }) + + if err != nil { + return nil, err + } + if tf.refreshToken != tk.RefreshToken { + tf.refreshToken = tk.RefreshToken + } + return tk, err +} + +// reuseTokenSource is a TokenSource that holds a single token in memory +// and validates its expiry before each call to retrieve it with +// Token. If it's expired, it will be auto-refreshed using the +// new TokenSource. +type reuseTokenSource struct { + new TokenSource // called when t is expired. + + mu sync.Mutex // guards t + t *Token +} + +// Token returns the current token if it's still valid, else will +// refresh the current token (using r.Context for HTTP client +// information) and return the new one. +func (s *reuseTokenSource) Token() (*Token, error) { + s.mu.Lock() + defer s.mu.Unlock() + if s.t.Valid() { + return s.t, nil + } + t, err := s.new.Token() + if err != nil { + return nil, err + } + s.t = t + return t, nil +} + +// StaticTokenSource returns a TokenSource that always returns the same token. +// Because the provided token t is never refreshed, StaticTokenSource is only +// useful for tokens that never expire. +func StaticTokenSource(t *Token) TokenSource { + return staticTokenSource{t} +} + +// staticTokenSource is a TokenSource that always returns the same Token. +type staticTokenSource struct { + t *Token +} + +func (s staticTokenSource) Token() (*Token, error) { + return s.t, nil +} + +// HTTPClient is the context key to use with golang.org/x/net/context's +// WithValue function to associate an *http.Client value with a context. +var HTTPClient internal.ContextKey + +// NewClient creates an *http.Client from a Context and TokenSource. +// The returned client is not valid beyond the lifetime of the context. +// +// As a special case, if src is nil, a non-OAuth2 client is returned +// using the provided context. This exists to support related OAuth2 +// packages. +func NewClient(ctx context.Context, src TokenSource) *http.Client { + if src == nil { + c, err := internal.ContextClient(ctx) + if err != nil { + return &http.Client{Transport: internal.ErrorTransport{Err: err}} + } + return c + } + return &http.Client{ + Transport: &Transport{ + Base: internal.ContextTransport(ctx), + Source: ReuseTokenSource(nil, src), + }, + } +} + +// ReuseTokenSource returns a TokenSource which repeatedly returns the +// same token as long as it's valid, starting with t. +// When its cached token is invalid, a new token is obtained from src. +// +// ReuseTokenSource is typically used to reuse tokens from a cache +// (such as a file on disk) between runs of a program, rather than +// obtaining new tokens unnecessarily. +// +// The initial token t may be nil, in which case the TokenSource is +// wrapped in a caching version if it isn't one already. This also +// means it's always safe to wrap ReuseTokenSource around any other +// TokenSource without adverse effects. +func ReuseTokenSource(t *Token, src TokenSource) TokenSource { + // Don't wrap a reuseTokenSource in itself. That would work, + // but cause an unnecessary number of mutex operations. + // Just build the equivalent one. + if rt, ok := src.(*reuseTokenSource); ok { + if t == nil { + // Just use it directly. + return rt + } + src = rt.new + } + return &reuseTokenSource{ + t: t, + new: src, + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/token.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/token.go new file mode 100644 index 00000000000..7a3167f15b0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/token.go @@ -0,0 +1,158 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package oauth2 + +import ( + "net/http" + "net/url" + "strconv" + "strings" + "time" + + "golang.org/x/net/context" + "golang.org/x/oauth2/internal" +) + +// expiryDelta determines how earlier a token should be considered +// expired than its actual expiration time. It is used to avoid late +// expirations due to client-server time mismatches. +const expiryDelta = 10 * time.Second + +// Token represents the crendentials used to authorize +// the requests to access protected resources on the OAuth 2.0 +// provider's backend. +// +// Most users of this package should not access fields of Token +// directly. They're exported mostly for use by related packages +// implementing derivative OAuth2 flows. +type Token struct { + // AccessToken is the token that authorizes and authenticates + // the requests. + AccessToken string `json:"access_token"` + + // TokenType is the type of token. + // The Type method returns either this or "Bearer", the default. + TokenType string `json:"token_type,omitempty"` + + // RefreshToken is a token that's used by the application + // (as opposed to the user) to refresh the access token + // if it expires. + RefreshToken string `json:"refresh_token,omitempty"` + + // Expiry is the optional expiration time of the access token. + // + // If zero, TokenSource implementations will reuse the same + // token forever and RefreshToken or equivalent + // mechanisms for that TokenSource will not be used. + Expiry time.Time `json:"expiry,omitempty"` + + // raw optionally contains extra metadata from the server + // when updating a token. + raw interface{} +} + +// Type returns t.TokenType if non-empty, else "Bearer". +func (t *Token) Type() string { + if strings.EqualFold(t.TokenType, "bearer") { + return "Bearer" + } + if strings.EqualFold(t.TokenType, "mac") { + return "MAC" + } + if strings.EqualFold(t.TokenType, "basic") { + return "Basic" + } + if t.TokenType != "" { + return t.TokenType + } + return "Bearer" +} + +// SetAuthHeader sets the Authorization header to r using the access +// token in t. +// +// This method is unnecessary when using Transport or an HTTP Client +// returned by this package. +func (t *Token) SetAuthHeader(r *http.Request) { + r.Header.Set("Authorization", t.Type()+" "+t.AccessToken) +} + +// WithExtra returns a new Token that's a clone of t, but using the +// provided raw extra map. This is only intended for use by packages +// implementing derivative OAuth2 flows. +func (t *Token) WithExtra(extra interface{}) *Token { + t2 := new(Token) + *t2 = *t + t2.raw = extra + return t2 +} + +// Extra returns an extra field. +// Extra fields are key-value pairs returned by the server as a +// part of the token retrieval response. +func (t *Token) Extra(key string) interface{} { + if raw, ok := t.raw.(map[string]interface{}); ok { + return raw[key] + } + + vals, ok := t.raw.(url.Values) + if !ok { + return nil + } + + v := vals.Get(key) + switch s := strings.TrimSpace(v); strings.Count(s, ".") { + case 0: // Contains no "."; try to parse as int + if i, err := strconv.ParseInt(s, 10, 64); err == nil { + return i + } + case 1: // Contains a single "."; try to parse as float + if f, err := strconv.ParseFloat(s, 64); err == nil { + return f + } + } + + return v +} + +// expired reports whether the token is expired. +// t must be non-nil. +func (t *Token) expired() bool { + if t.Expiry.IsZero() { + return false + } + return t.Expiry.Add(-expiryDelta).Before(time.Now()) +} + +// Valid reports whether t is non-nil, has an AccessToken, and is not expired. +func (t *Token) Valid() bool { + return t != nil && t.AccessToken != "" && !t.expired() +} + +// tokenFromInternal maps an *internal.Token struct into +// a *Token struct. +func tokenFromInternal(t *internal.Token) *Token { + if t == nil { + return nil + } + return &Token{ + AccessToken: t.AccessToken, + TokenType: t.TokenType, + RefreshToken: t.RefreshToken, + Expiry: t.Expiry, + raw: t.Raw, + } +} + +// retrieveToken takes a *Config and uses that to retrieve an *internal.Token. +// This token is then mapped from *internal.Token into an *oauth2.Token which is returned along +// with an error.. +func retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error) { + tk, err := internal.RetrieveToken(ctx, c.ClientID, c.ClientSecret, c.Endpoint.TokenURL, v) + if err != nil { + return nil, err + } + return tokenFromInternal(tk), nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/transport.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/transport.go new file mode 100644 index 00000000000..92ac7e2531f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/golang.org/x/oauth2/transport.go @@ -0,0 +1,132 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package oauth2 + +import ( + "errors" + "io" + "net/http" + "sync" +) + +// Transport is an http.RoundTripper that makes OAuth 2.0 HTTP requests, +// wrapping a base RoundTripper and adding an Authorization header +// with a token from the supplied Sources. +// +// Transport is a low-level mechanism. Most code will use the +// higher-level Config.Client method instead. +type Transport struct { + // Source supplies the token to add to outgoing requests' + // Authorization headers. + Source TokenSource + + // Base is the base RoundTripper used to make HTTP requests. + // If nil, http.DefaultTransport is used. + Base http.RoundTripper + + mu sync.Mutex // guards modReq + modReq map[*http.Request]*http.Request // original -> modified +} + +// RoundTrip authorizes and authenticates the request with an +// access token. If no token exists or token is expired, +// tries to refresh/fetch a new token. +func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { + if t.Source == nil { + return nil, errors.New("oauth2: Transport's Source is nil") + } + token, err := t.Source.Token() + if err != nil { + return nil, err + } + + req2 := cloneRequest(req) // per RoundTripper contract + token.SetAuthHeader(req2) + t.setModReq(req, req2) + res, err := t.base().RoundTrip(req2) + if err != nil { + t.setModReq(req, nil) + return nil, err + } + res.Body = &onEOFReader{ + rc: res.Body, + fn: func() { t.setModReq(req, nil) }, + } + return res, nil +} + +// CancelRequest cancels an in-flight request by closing its connection. +func (t *Transport) CancelRequest(req *http.Request) { + type canceler interface { + CancelRequest(*http.Request) + } + if cr, ok := t.base().(canceler); ok { + t.mu.Lock() + modReq := t.modReq[req] + delete(t.modReq, req) + t.mu.Unlock() + cr.CancelRequest(modReq) + } +} + +func (t *Transport) base() http.RoundTripper { + if t.Base != nil { + return t.Base + } + return http.DefaultTransport +} + +func (t *Transport) setModReq(orig, mod *http.Request) { + t.mu.Lock() + defer t.mu.Unlock() + if t.modReq == nil { + t.modReq = make(map[*http.Request]*http.Request) + } + if mod == nil { + delete(t.modReq, orig) + } else { + t.modReq[orig] = mod + } +} + +// cloneRequest returns a clone of the provided *http.Request. +// The clone is a shallow copy of the struct and its Header map. +func cloneRequest(r *http.Request) *http.Request { + // shallow copy of the struct + r2 := new(http.Request) + *r2 = *r + // deep copy of the Header + r2.Header = make(http.Header, len(r.Header)) + for k, s := range r.Header { + r2.Header[k] = append([]string(nil), s...) + } + return r2 +} + +type onEOFReader struct { + rc io.ReadCloser + fn func() +} + +func (r *onEOFReader) Read(p []byte) (n int, err error) { + n, err = r.rc.Read(p) + if err == io.EOF { + r.runFunc() + } + return +} + +func (r *onEOFReader) Close() error { + err := r.rc.Close() + r.runFunc() + return err +} + +func (r *onEOFReader) runFunc() { + if fn := r.fn; fn != nil { + fn() + r.fn = nil + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/LICENSE new file mode 100644 index 00000000000..d6456956733 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api.go new file mode 100644 index 00000000000..a6ec19e14cf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api.go @@ -0,0 +1,675 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build !appengine + +package internal + +import ( + "bytes" + "errors" + "fmt" + "io/ioutil" + "log" + "net" + "net/http" + "net/url" + "os" + "runtime" + "strconv" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/golang/protobuf/proto" + netcontext "golang.org/x/net/context" + + basepb "google.golang.org/appengine/internal/base" + logpb "google.golang.org/appengine/internal/log" + remotepb "google.golang.org/appengine/internal/remote_api" +) + +const ( + apiPath = "/rpc_http" + defaultTicketSuffix = "/default.20150612t184001.0" +) + +var ( + // Incoming headers. + ticketHeader = http.CanonicalHeaderKey("X-AppEngine-API-Ticket") + dapperHeader = http.CanonicalHeaderKey("X-Google-DapperTraceInfo") + traceHeader = http.CanonicalHeaderKey("X-Cloud-Trace-Context") + curNamespaceHeader = http.CanonicalHeaderKey("X-AppEngine-Current-Namespace") + userIPHeader = http.CanonicalHeaderKey("X-AppEngine-User-IP") + remoteAddrHeader = http.CanonicalHeaderKey("X-AppEngine-Remote-Addr") + devRequestIdHeader = http.CanonicalHeaderKey("X-Appengine-Dev-Request-Id") + + // Outgoing headers. + apiEndpointHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Endpoint") + apiEndpointHeaderValue = []string{"app-engine-apis"} + apiMethodHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Method") + apiMethodHeaderValue = []string{"/VMRemoteAPI.CallRemoteAPI"} + apiDeadlineHeader = http.CanonicalHeaderKey("X-Google-RPC-Service-Deadline") + apiContentType = http.CanonicalHeaderKey("Content-Type") + apiContentTypeValue = []string{"application/octet-stream"} + logFlushHeader = http.CanonicalHeaderKey("X-AppEngine-Log-Flush-Count") + + apiHTTPClient = &http.Client{ + Transport: &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: limitDial, + }, + } + + defaultTicketOnce sync.Once + defaultTicket string + backgroundContextOnce sync.Once + backgroundContext netcontext.Context +) + +func apiURL() *url.URL { + host, port := "appengine.googleapis.internal", "10001" + if h := os.Getenv("API_HOST"); h != "" { + host = h + } + if p := os.Getenv("API_PORT"); p != "" { + port = p + } + return &url.URL{ + Scheme: "http", + Host: host + ":" + port, + Path: apiPath, + } +} + +func handleHTTP(w http.ResponseWriter, r *http.Request) { + c := &context{ + req: r, + outHeader: w.Header(), + apiURL: apiURL(), + } + r = r.WithContext(withContext(r.Context(), c)) + c.req = r + + stopFlushing := make(chan int) + + // Patch up RemoteAddr so it looks reasonable. + if addr := r.Header.Get(userIPHeader); addr != "" { + r.RemoteAddr = addr + } else if addr = r.Header.Get(remoteAddrHeader); addr != "" { + r.RemoteAddr = addr + } else { + // Should not normally reach here, but pick a sensible default anyway. + r.RemoteAddr = "127.0.0.1" + } + // The address in the headers will most likely be of these forms: + // 123.123.123.123 + // 2001:db8::1 + // net/http.Request.RemoteAddr is specified to be in "IP:port" form. + if _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil { + // Assume the remote address is only a host; add a default port. + r.RemoteAddr = net.JoinHostPort(r.RemoteAddr, "80") + } + + // Start goroutine responsible for flushing app logs. + // This is done after adding c to ctx.m (and stopped before removing it) + // because flushing logs requires making an API call. + go c.logFlusher(stopFlushing) + + executeRequestSafely(c, r) + c.outHeader = nil // make sure header changes aren't respected any more + + stopFlushing <- 1 // any logging beyond this point will be dropped + + // Flush any pending logs asynchronously. + c.pendingLogs.Lock() + flushes := c.pendingLogs.flushes + if len(c.pendingLogs.lines) > 0 { + flushes++ + } + c.pendingLogs.Unlock() + flushed := make(chan struct{}) + go func() { + defer close(flushed) + // Force a log flush, because with very short requests we + // may not ever flush logs. + c.flushLog(true) + }() + w.Header().Set(logFlushHeader, strconv.Itoa(flushes)) + + // Avoid nil Write call if c.Write is never called. + if c.outCode != 0 { + w.WriteHeader(c.outCode) + } + if c.outBody != nil { + w.Write(c.outBody) + } + // Wait for the last flush to complete before returning, + // otherwise the security ticket will not be valid. + <-flushed +} + +func executeRequestSafely(c *context, r *http.Request) { + defer func() { + if x := recover(); x != nil { + logf(c, 4, "%s", renderPanic(x)) // 4 == critical + c.outCode = 500 + } + }() + + http.DefaultServeMux.ServeHTTP(c, r) +} + +func renderPanic(x interface{}) string { + buf := make([]byte, 16<<10) // 16 KB should be plenty + buf = buf[:runtime.Stack(buf, false)] + + // Remove the first few stack frames: + // this func + // the recover closure in the caller + // That will root the stack trace at the site of the panic. + const ( + skipStart = "internal.renderPanic" + skipFrames = 2 + ) + start := bytes.Index(buf, []byte(skipStart)) + p := start + for i := 0; i < skipFrames*2 && p+1 < len(buf); i++ { + p = bytes.IndexByte(buf[p+1:], '\n') + p + 1 + if p < 0 { + break + } + } + if p >= 0 { + // buf[start:p+1] is the block to remove. + // Copy buf[p+1:] over buf[start:] and shrink buf. + copy(buf[start:], buf[p+1:]) + buf = buf[:len(buf)-(p+1-start)] + } + + // Add panic heading. + head := fmt.Sprintf("panic: %v\n\n", x) + if len(head) > len(buf) { + // Extremely unlikely to happen. + return head + } + copy(buf[len(head):], buf) + copy(buf, head) + + return string(buf) +} + +// context represents the context of an in-flight HTTP request. +// It implements the appengine.Context and http.ResponseWriter interfaces. +type context struct { + req *http.Request + + outCode int + outHeader http.Header + outBody []byte + + pendingLogs struct { + sync.Mutex + lines []*logpb.UserAppLogLine + flushes int + } + + apiURL *url.URL +} + +var contextKey = "holds a *context" + +// jointContext joins two contexts in a superficial way. +// It takes values and timeouts from a base context, and only values from another context. +type jointContext struct { + base netcontext.Context + valuesOnly netcontext.Context +} + +func (c jointContext) Deadline() (time.Time, bool) { + return c.base.Deadline() +} + +func (c jointContext) Done() <-chan struct{} { + return c.base.Done() +} + +func (c jointContext) Err() error { + return c.base.Err() +} + +func (c jointContext) Value(key interface{}) interface{} { + if val := c.base.Value(key); val != nil { + return val + } + return c.valuesOnly.Value(key) +} + +// fromContext returns the App Engine context or nil if ctx is not +// derived from an App Engine context. +func fromContext(ctx netcontext.Context) *context { + c, _ := ctx.Value(&contextKey).(*context) + return c +} + +func withContext(parent netcontext.Context, c *context) netcontext.Context { + ctx := netcontext.WithValue(parent, &contextKey, c) + if ns := c.req.Header.Get(curNamespaceHeader); ns != "" { + ctx = withNamespace(ctx, ns) + } + return ctx +} + +func toContext(c *context) netcontext.Context { + return withContext(netcontext.Background(), c) +} + +func IncomingHeaders(ctx netcontext.Context) http.Header { + if c := fromContext(ctx); c != nil { + return c.req.Header + } + return nil +} + +func ReqContext(req *http.Request) netcontext.Context { + return req.Context() +} + +func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context { + return jointContext{ + base: parent, + valuesOnly: req.Context(), + } +} + +// DefaultTicket returns a ticket used for background context or dev_appserver. +func DefaultTicket() string { + defaultTicketOnce.Do(func() { + if IsDevAppServer() { + defaultTicket = "testapp" + defaultTicketSuffix + return + } + appID := partitionlessAppID() + escAppID := strings.Replace(strings.Replace(appID, ":", "_", -1), ".", "_", -1) + majVersion := VersionID(nil) + if i := strings.Index(majVersion, "."); i > 0 { + majVersion = majVersion[:i] + } + defaultTicket = fmt.Sprintf("%s/%s.%s.%s", escAppID, ModuleName(nil), majVersion, InstanceID()) + }) + return defaultTicket +} + +func BackgroundContext() netcontext.Context { + backgroundContextOnce.Do(func() { + // Compute background security ticket. + ticket := DefaultTicket() + + c := &context{ + req: &http.Request{ + Header: http.Header{ + ticketHeader: []string{ticket}, + }, + }, + apiURL: apiURL(), + } + backgroundContext = toContext(c) + + // TODO(dsymonds): Wire up the shutdown handler to do a final flush. + go c.logFlusher(make(chan int)) + }) + + return backgroundContext +} + +// RegisterTestRequest registers the HTTP request req for testing, such that +// any API calls are sent to the provided URL. It returns a closure to delete +// the registration. +// It should only be used by aetest package. +func RegisterTestRequest(req *http.Request, apiURL *url.URL, decorate func(netcontext.Context) netcontext.Context) (*http.Request, func()) { + c := &context{ + req: req, + apiURL: apiURL, + } + ctx := withContext(decorate(req.Context()), c) + req = req.WithContext(ctx) + c.req = req + return req, func() {} +} + +var errTimeout = &CallError{ + Detail: "Deadline exceeded", + Code: int32(remotepb.RpcError_CANCELLED), + Timeout: true, +} + +func (c *context) Header() http.Header { return c.outHeader } + +// Copied from $GOROOT/src/pkg/net/http/transfer.go. Some response status +// codes do not permit a response body (nor response entity headers such as +// Content-Length, Content-Type, etc). +func bodyAllowedForStatus(status int) bool { + switch { + case status >= 100 && status <= 199: + return false + case status == 204: + return false + case status == 304: + return false + } + return true +} + +func (c *context) Write(b []byte) (int, error) { + if c.outCode == 0 { + c.WriteHeader(http.StatusOK) + } + if len(b) > 0 && !bodyAllowedForStatus(c.outCode) { + return 0, http.ErrBodyNotAllowed + } + c.outBody = append(c.outBody, b...) + return len(b), nil +} + +func (c *context) WriteHeader(code int) { + if c.outCode != 0 { + logf(c, 3, "WriteHeader called multiple times on request.") // error level + return + } + c.outCode = code +} + +func (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) { + hreq := &http.Request{ + Method: "POST", + URL: c.apiURL, + Header: http.Header{ + apiEndpointHeader: apiEndpointHeaderValue, + apiMethodHeader: apiMethodHeaderValue, + apiContentType: apiContentTypeValue, + apiDeadlineHeader: []string{strconv.FormatFloat(timeout.Seconds(), 'f', -1, 64)}, + }, + Body: ioutil.NopCloser(bytes.NewReader(body)), + ContentLength: int64(len(body)), + Host: c.apiURL.Host, + } + if info := c.req.Header.Get(dapperHeader); info != "" { + hreq.Header.Set(dapperHeader, info) + } + if info := c.req.Header.Get(traceHeader); info != "" { + hreq.Header.Set(traceHeader, info) + } + + tr := apiHTTPClient.Transport.(*http.Transport) + + var timedOut int32 // atomic; set to 1 if timed out + t := time.AfterFunc(timeout, func() { + atomic.StoreInt32(&timedOut, 1) + tr.CancelRequest(hreq) + }) + defer t.Stop() + defer func() { + // Check if timeout was exceeded. + if atomic.LoadInt32(&timedOut) != 0 { + err = errTimeout + } + }() + + hresp, err := apiHTTPClient.Do(hreq) + if err != nil { + return nil, &CallError{ + Detail: fmt.Sprintf("service bridge HTTP failed: %v", err), + Code: int32(remotepb.RpcError_UNKNOWN), + } + } + defer hresp.Body.Close() + hrespBody, err := ioutil.ReadAll(hresp.Body) + if hresp.StatusCode != 200 { + return nil, &CallError{ + Detail: fmt.Sprintf("service bridge returned HTTP %d (%q)", hresp.StatusCode, hrespBody), + Code: int32(remotepb.RpcError_UNKNOWN), + } + } + if err != nil { + return nil, &CallError{ + Detail: fmt.Sprintf("service bridge response bad: %v", err), + Code: int32(remotepb.RpcError_UNKNOWN), + } + } + return hrespBody, nil +} + +func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error { + if ns := NamespaceFromContext(ctx); ns != "" { + if fn, ok := NamespaceMods[service]; ok { + fn(in, ns) + } + } + + if f, ctx, ok := callOverrideFromContext(ctx); ok { + return f(ctx, service, method, in, out) + } + + // Handle already-done contexts quickly. + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + c := fromContext(ctx) + if c == nil { + // Give a good error message rather than a panic lower down. + return errNotAppEngineContext + } + + // Apply transaction modifications if we're in a transaction. + if t := transactionFromContext(ctx); t != nil { + if t.finished { + return errors.New("transaction context has expired") + } + applyTransaction(in, &t.transaction) + } + + // Default RPC timeout is 60s. + timeout := 60 * time.Second + if deadline, ok := ctx.Deadline(); ok { + timeout = deadline.Sub(time.Now()) + } + + data, err := proto.Marshal(in) + if err != nil { + return err + } + + ticket := c.req.Header.Get(ticketHeader) + // Use a test ticket under test environment. + if ticket == "" { + if appid := ctx.Value(&appIDOverrideKey); appid != nil { + ticket = appid.(string) + defaultTicketSuffix + } + } + // Fall back to use background ticket when the request ticket is not available in Flex or dev_appserver. + if ticket == "" { + ticket = DefaultTicket() + } + if dri := c.req.Header.Get(devRequestIdHeader); IsDevAppServer() && dri != "" { + ticket = dri + } + req := &remotepb.Request{ + ServiceName: &service, + Method: &method, + Request: data, + RequestId: &ticket, + } + hreqBody, err := proto.Marshal(req) + if err != nil { + return err + } + + hrespBody, err := c.post(hreqBody, timeout) + if err != nil { + return err + } + + res := &remotepb.Response{} + if err := proto.Unmarshal(hrespBody, res); err != nil { + return err + } + if res.RpcError != nil { + ce := &CallError{ + Detail: res.RpcError.GetDetail(), + Code: *res.RpcError.Code, + } + switch remotepb.RpcError_ErrorCode(ce.Code) { + case remotepb.RpcError_CANCELLED, remotepb.RpcError_DEADLINE_EXCEEDED: + ce.Timeout = true + } + return ce + } + if res.ApplicationError != nil { + return &APIError{ + Service: *req.ServiceName, + Detail: res.ApplicationError.GetDetail(), + Code: *res.ApplicationError.Code, + } + } + if res.Exception != nil || res.JavaException != nil { + // This shouldn't happen, but let's be defensive. + return &CallError{ + Detail: "service bridge returned exception", + Code: int32(remotepb.RpcError_UNKNOWN), + } + } + return proto.Unmarshal(res.Response, out) +} + +func (c *context) Request() *http.Request { + return c.req +} + +func (c *context) addLogLine(ll *logpb.UserAppLogLine) { + // Truncate long log lines. + // TODO(dsymonds): Check if this is still necessary. + const lim = 8 << 10 + if len(*ll.Message) > lim { + suffix := fmt.Sprintf("...(length %d)", len(*ll.Message)) + ll.Message = proto.String((*ll.Message)[:lim-len(suffix)] + suffix) + } + + c.pendingLogs.Lock() + c.pendingLogs.lines = append(c.pendingLogs.lines, ll) + c.pendingLogs.Unlock() +} + +var logLevelName = map[int64]string{ + 0: "DEBUG", + 1: "INFO", + 2: "WARNING", + 3: "ERROR", + 4: "CRITICAL", +} + +func logf(c *context, level int64, format string, args ...interface{}) { + if c == nil { + panic("not an App Engine context") + } + s := fmt.Sprintf(format, args...) + s = strings.TrimRight(s, "\n") // Remove any trailing newline characters. + c.addLogLine(&logpb.UserAppLogLine{ + TimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3), + Level: &level, + Message: &s, + }) + // Only duplicate log to stderr if not running on App Engine second generation + if !IsSecondGen() { + log.Print(logLevelName[level] + ": " + s) + } +} + +// flushLog attempts to flush any pending logs to the appserver. +// It should not be called concurrently. +func (c *context) flushLog(force bool) (flushed bool) { + c.pendingLogs.Lock() + // Grab up to 30 MB. We can get away with up to 32 MB, but let's be cautious. + n, rem := 0, 30<<20 + for ; n < len(c.pendingLogs.lines); n++ { + ll := c.pendingLogs.lines[n] + // Each log line will require about 3 bytes of overhead. + nb := proto.Size(ll) + 3 + if nb > rem { + break + } + rem -= nb + } + lines := c.pendingLogs.lines[:n] + c.pendingLogs.lines = c.pendingLogs.lines[n:] + c.pendingLogs.Unlock() + + if len(lines) == 0 && !force { + // Nothing to flush. + return false + } + + rescueLogs := false + defer func() { + if rescueLogs { + c.pendingLogs.Lock() + c.pendingLogs.lines = append(lines, c.pendingLogs.lines...) + c.pendingLogs.Unlock() + } + }() + + buf, err := proto.Marshal(&logpb.UserAppLogGroup{ + LogLine: lines, + }) + if err != nil { + log.Printf("internal.flushLog: marshaling UserAppLogGroup: %v", err) + rescueLogs = true + return false + } + + req := &logpb.FlushRequest{ + Logs: buf, + } + res := &basepb.VoidProto{} + c.pendingLogs.Lock() + c.pendingLogs.flushes++ + c.pendingLogs.Unlock() + if err := Call(toContext(c), "logservice", "Flush", req, res); err != nil { + log.Printf("internal.flushLog: Flush RPC: %v", err) + rescueLogs = true + return false + } + return true +} + +const ( + // Log flushing parameters. + flushInterval = 1 * time.Second + forceFlushInterval = 60 * time.Second +) + +func (c *context) logFlusher(stop <-chan int) { + lastFlush := time.Now() + tick := time.NewTicker(flushInterval) + for { + select { + case <-stop: + // Request finished. + tick.Stop() + return + case <-tick.C: + force := time.Now().Sub(lastFlush) > forceFlushInterval + if c.flushLog(force) { + lastFlush = time.Now() + } + } + } +} + +func ContextForTesting(req *http.Request) netcontext.Context { + return toContext(&context{req: req}) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api_classic.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api_classic.go new file mode 100644 index 00000000000..f0f40b2e35c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api_classic.go @@ -0,0 +1,169 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "errors" + "fmt" + "net/http" + "time" + + "appengine" + "appengine_internal" + basepb "appengine_internal/base" + + "github.com/golang/protobuf/proto" + netcontext "golang.org/x/net/context" +) + +var contextKey = "holds an appengine.Context" + +// fromContext returns the App Engine context or nil if ctx is not +// derived from an App Engine context. +func fromContext(ctx netcontext.Context) appengine.Context { + c, _ := ctx.Value(&contextKey).(appengine.Context) + return c +} + +// This is only for classic App Engine adapters. +func ClassicContextFromContext(ctx netcontext.Context) (appengine.Context, error) { + c := fromContext(ctx) + if c == nil { + return nil, errNotAppEngineContext + } + return c, nil +} + +func withContext(parent netcontext.Context, c appengine.Context) netcontext.Context { + ctx := netcontext.WithValue(parent, &contextKey, c) + + s := &basepb.StringProto{} + c.Call("__go__", "GetNamespace", &basepb.VoidProto{}, s, nil) + if ns := s.GetValue(); ns != "" { + ctx = NamespacedContext(ctx, ns) + } + + return ctx +} + +func IncomingHeaders(ctx netcontext.Context) http.Header { + if c := fromContext(ctx); c != nil { + if req, ok := c.Request().(*http.Request); ok { + return req.Header + } + } + return nil +} + +func ReqContext(req *http.Request) netcontext.Context { + return WithContext(netcontext.Background(), req) +} + +func WithContext(parent netcontext.Context, req *http.Request) netcontext.Context { + c := appengine.NewContext(req) + return withContext(parent, c) +} + +type testingContext struct { + appengine.Context + + req *http.Request +} + +func (t *testingContext) FullyQualifiedAppID() string { return "dev~testcontext" } +func (t *testingContext) Call(service, method string, _, _ appengine_internal.ProtoMessage, _ *appengine_internal.CallOptions) error { + if service == "__go__" && method == "GetNamespace" { + return nil + } + return fmt.Errorf("testingContext: unsupported Call") +} +func (t *testingContext) Request() interface{} { return t.req } + +func ContextForTesting(req *http.Request) netcontext.Context { + return withContext(netcontext.Background(), &testingContext{req: req}) +} + +func Call(ctx netcontext.Context, service, method string, in, out proto.Message) error { + if ns := NamespaceFromContext(ctx); ns != "" { + if fn, ok := NamespaceMods[service]; ok { + fn(in, ns) + } + } + + if f, ctx, ok := callOverrideFromContext(ctx); ok { + return f(ctx, service, method, in, out) + } + + // Handle already-done contexts quickly. + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + c := fromContext(ctx) + if c == nil { + // Give a good error message rather than a panic lower down. + return errNotAppEngineContext + } + + // Apply transaction modifications if we're in a transaction. + if t := transactionFromContext(ctx); t != nil { + if t.finished { + return errors.New("transaction context has expired") + } + applyTransaction(in, &t.transaction) + } + + var opts *appengine_internal.CallOptions + if d, ok := ctx.Deadline(); ok { + opts = &appengine_internal.CallOptions{ + Timeout: d.Sub(time.Now()), + } + } + + err := c.Call(service, method, in, out, opts) + switch v := err.(type) { + case *appengine_internal.APIError: + return &APIError{ + Service: v.Service, + Detail: v.Detail, + Code: v.Code, + } + case *appengine_internal.CallError: + return &CallError{ + Detail: v.Detail, + Code: v.Code, + Timeout: v.Timeout, + } + } + return err +} + +func handleHTTP(w http.ResponseWriter, r *http.Request) { + panic("handleHTTP called; this should be impossible") +} + +func logf(c appengine.Context, level int64, format string, args ...interface{}) { + var fn func(format string, args ...interface{}) + switch level { + case 0: + fn = c.Debugf + case 1: + fn = c.Infof + case 2: + fn = c.Warningf + case 3: + fn = c.Errorf + case 4: + fn = c.Criticalf + default: + // This shouldn't happen. + fn = c.Criticalf + } + fn(format, args...) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api_common.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api_common.go new file mode 100644 index 00000000000..e0c0b214b72 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/api_common.go @@ -0,0 +1,123 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package internal + +import ( + "errors" + "os" + + "github.com/golang/protobuf/proto" + netcontext "golang.org/x/net/context" +) + +var errNotAppEngineContext = errors.New("not an App Engine context") + +type CallOverrideFunc func(ctx netcontext.Context, service, method string, in, out proto.Message) error + +var callOverrideKey = "holds []CallOverrideFunc" + +func WithCallOverride(ctx netcontext.Context, f CallOverrideFunc) netcontext.Context { + // We avoid appending to any existing call override + // so we don't risk overwriting a popped stack below. + var cofs []CallOverrideFunc + if uf, ok := ctx.Value(&callOverrideKey).([]CallOverrideFunc); ok { + cofs = append(cofs, uf...) + } + cofs = append(cofs, f) + return netcontext.WithValue(ctx, &callOverrideKey, cofs) +} + +func callOverrideFromContext(ctx netcontext.Context) (CallOverrideFunc, netcontext.Context, bool) { + cofs, _ := ctx.Value(&callOverrideKey).([]CallOverrideFunc) + if len(cofs) == 0 { + return nil, nil, false + } + // We found a list of overrides; grab the last, and reconstitute a + // context that will hide it. + f := cofs[len(cofs)-1] + ctx = netcontext.WithValue(ctx, &callOverrideKey, cofs[:len(cofs)-1]) + return f, ctx, true +} + +type logOverrideFunc func(level int64, format string, args ...interface{}) + +var logOverrideKey = "holds a logOverrideFunc" + +func WithLogOverride(ctx netcontext.Context, f logOverrideFunc) netcontext.Context { + return netcontext.WithValue(ctx, &logOverrideKey, f) +} + +var appIDOverrideKey = "holds a string, being the full app ID" + +func WithAppIDOverride(ctx netcontext.Context, appID string) netcontext.Context { + return netcontext.WithValue(ctx, &appIDOverrideKey, appID) +} + +var namespaceKey = "holds the namespace string" + +func withNamespace(ctx netcontext.Context, ns string) netcontext.Context { + return netcontext.WithValue(ctx, &namespaceKey, ns) +} + +func NamespaceFromContext(ctx netcontext.Context) string { + // If there's no namespace, return the empty string. + ns, _ := ctx.Value(&namespaceKey).(string) + return ns +} + +// FullyQualifiedAppID returns the fully-qualified application ID. +// This may contain a partition prefix (e.g. "s~" for High Replication apps), +// or a domain prefix (e.g. "example.com:"). +func FullyQualifiedAppID(ctx netcontext.Context) string { + if id, ok := ctx.Value(&appIDOverrideKey).(string); ok { + return id + } + return fullyQualifiedAppID(ctx) +} + +func Logf(ctx netcontext.Context, level int64, format string, args ...interface{}) { + if f, ok := ctx.Value(&logOverrideKey).(logOverrideFunc); ok { + f(level, format, args...) + return + } + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + logf(c, level, format, args...) +} + +// NamespacedContext wraps a Context to support namespaces. +func NamespacedContext(ctx netcontext.Context, namespace string) netcontext.Context { + return withNamespace(ctx, namespace) +} + +// SetTestEnv sets the env variables for testing background ticket in Flex. +func SetTestEnv() func() { + var environ = []struct { + key, value string + }{ + {"GAE_LONG_APP_ID", "my-app-id"}, + {"GAE_MINOR_VERSION", "067924799508853122"}, + {"GAE_MODULE_INSTANCE", "0"}, + {"GAE_MODULE_NAME", "default"}, + {"GAE_MODULE_VERSION", "20150612t184001"}, + } + + for _, v := range environ { + old := os.Getenv(v.key) + os.Setenv(v.key, v.value) + v.value = old + } + return func() { // Restore old environment after the test completes. + for _, v := range environ { + if v.value == "" { + os.Unsetenv(v.key) + continue + } + os.Setenv(v.key, v.value) + } + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/app_id.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/app_id.go new file mode 100644 index 00000000000..11df8c07b53 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/app_id.go @@ -0,0 +1,28 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package internal + +import ( + "strings" +) + +func parseFullAppID(appid string) (partition, domain, displayID string) { + if i := strings.Index(appid, "~"); i != -1 { + partition, appid = appid[:i], appid[i+1:] + } + if i := strings.Index(appid, ":"); i != -1 { + domain, appid = appid[:i], appid[i+1:] + } + return partition, domain, appid +} + +// appID returns "appid" or "domain.com:appid". +func appID(fullAppID string) string { + _, dom, dis := parseFullAppID(fullAppID) + if dom != "" { + return dom + ":" + dis + } + return dis +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/base/api_base.pb.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/base/api_base.pb.go new file mode 100644 index 00000000000..db4777e68e5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/base/api_base.pb.go @@ -0,0 +1,308 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google.golang.org/appengine/internal/base/api_base.proto + +package base + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type StringProto struct { + Value *string `protobuf:"bytes,1,req,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *StringProto) Reset() { *m = StringProto{} } +func (m *StringProto) String() string { return proto.CompactTextString(m) } +func (*StringProto) ProtoMessage() {} +func (*StringProto) Descriptor() ([]byte, []int) { + return fileDescriptor_api_base_9d49f8792e0c1140, []int{0} +} +func (m *StringProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_StringProto.Unmarshal(m, b) +} +func (m *StringProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_StringProto.Marshal(b, m, deterministic) +} +func (dst *StringProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_StringProto.Merge(dst, src) +} +func (m *StringProto) XXX_Size() int { + return xxx_messageInfo_StringProto.Size(m) +} +func (m *StringProto) XXX_DiscardUnknown() { + xxx_messageInfo_StringProto.DiscardUnknown(m) +} + +var xxx_messageInfo_StringProto proto.InternalMessageInfo + +func (m *StringProto) GetValue() string { + if m != nil && m.Value != nil { + return *m.Value + } + return "" +} + +type Integer32Proto struct { + Value *int32 `protobuf:"varint,1,req,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Integer32Proto) Reset() { *m = Integer32Proto{} } +func (m *Integer32Proto) String() string { return proto.CompactTextString(m) } +func (*Integer32Proto) ProtoMessage() {} +func (*Integer32Proto) Descriptor() ([]byte, []int) { + return fileDescriptor_api_base_9d49f8792e0c1140, []int{1} +} +func (m *Integer32Proto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Integer32Proto.Unmarshal(m, b) +} +func (m *Integer32Proto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Integer32Proto.Marshal(b, m, deterministic) +} +func (dst *Integer32Proto) XXX_Merge(src proto.Message) { + xxx_messageInfo_Integer32Proto.Merge(dst, src) +} +func (m *Integer32Proto) XXX_Size() int { + return xxx_messageInfo_Integer32Proto.Size(m) +} +func (m *Integer32Proto) XXX_DiscardUnknown() { + xxx_messageInfo_Integer32Proto.DiscardUnknown(m) +} + +var xxx_messageInfo_Integer32Proto proto.InternalMessageInfo + +func (m *Integer32Proto) GetValue() int32 { + if m != nil && m.Value != nil { + return *m.Value + } + return 0 +} + +type Integer64Proto struct { + Value *int64 `protobuf:"varint,1,req,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Integer64Proto) Reset() { *m = Integer64Proto{} } +func (m *Integer64Proto) String() string { return proto.CompactTextString(m) } +func (*Integer64Proto) ProtoMessage() {} +func (*Integer64Proto) Descriptor() ([]byte, []int) { + return fileDescriptor_api_base_9d49f8792e0c1140, []int{2} +} +func (m *Integer64Proto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Integer64Proto.Unmarshal(m, b) +} +func (m *Integer64Proto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Integer64Proto.Marshal(b, m, deterministic) +} +func (dst *Integer64Proto) XXX_Merge(src proto.Message) { + xxx_messageInfo_Integer64Proto.Merge(dst, src) +} +func (m *Integer64Proto) XXX_Size() int { + return xxx_messageInfo_Integer64Proto.Size(m) +} +func (m *Integer64Proto) XXX_DiscardUnknown() { + xxx_messageInfo_Integer64Proto.DiscardUnknown(m) +} + +var xxx_messageInfo_Integer64Proto proto.InternalMessageInfo + +func (m *Integer64Proto) GetValue() int64 { + if m != nil && m.Value != nil { + return *m.Value + } + return 0 +} + +type BoolProto struct { + Value *bool `protobuf:"varint,1,req,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BoolProto) Reset() { *m = BoolProto{} } +func (m *BoolProto) String() string { return proto.CompactTextString(m) } +func (*BoolProto) ProtoMessage() {} +func (*BoolProto) Descriptor() ([]byte, []int) { + return fileDescriptor_api_base_9d49f8792e0c1140, []int{3} +} +func (m *BoolProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BoolProto.Unmarshal(m, b) +} +func (m *BoolProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BoolProto.Marshal(b, m, deterministic) +} +func (dst *BoolProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_BoolProto.Merge(dst, src) +} +func (m *BoolProto) XXX_Size() int { + return xxx_messageInfo_BoolProto.Size(m) +} +func (m *BoolProto) XXX_DiscardUnknown() { + xxx_messageInfo_BoolProto.DiscardUnknown(m) +} + +var xxx_messageInfo_BoolProto proto.InternalMessageInfo + +func (m *BoolProto) GetValue() bool { + if m != nil && m.Value != nil { + return *m.Value + } + return false +} + +type DoubleProto struct { + Value *float64 `protobuf:"fixed64,1,req,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DoubleProto) Reset() { *m = DoubleProto{} } +func (m *DoubleProto) String() string { return proto.CompactTextString(m) } +func (*DoubleProto) ProtoMessage() {} +func (*DoubleProto) Descriptor() ([]byte, []int) { + return fileDescriptor_api_base_9d49f8792e0c1140, []int{4} +} +func (m *DoubleProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DoubleProto.Unmarshal(m, b) +} +func (m *DoubleProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DoubleProto.Marshal(b, m, deterministic) +} +func (dst *DoubleProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_DoubleProto.Merge(dst, src) +} +func (m *DoubleProto) XXX_Size() int { + return xxx_messageInfo_DoubleProto.Size(m) +} +func (m *DoubleProto) XXX_DiscardUnknown() { + xxx_messageInfo_DoubleProto.DiscardUnknown(m) +} + +var xxx_messageInfo_DoubleProto proto.InternalMessageInfo + +func (m *DoubleProto) GetValue() float64 { + if m != nil && m.Value != nil { + return *m.Value + } + return 0 +} + +type BytesProto struct { + Value []byte `protobuf:"bytes,1,req,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BytesProto) Reset() { *m = BytesProto{} } +func (m *BytesProto) String() string { return proto.CompactTextString(m) } +func (*BytesProto) ProtoMessage() {} +func (*BytesProto) Descriptor() ([]byte, []int) { + return fileDescriptor_api_base_9d49f8792e0c1140, []int{5} +} +func (m *BytesProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BytesProto.Unmarshal(m, b) +} +func (m *BytesProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BytesProto.Marshal(b, m, deterministic) +} +func (dst *BytesProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_BytesProto.Merge(dst, src) +} +func (m *BytesProto) XXX_Size() int { + return xxx_messageInfo_BytesProto.Size(m) +} +func (m *BytesProto) XXX_DiscardUnknown() { + xxx_messageInfo_BytesProto.DiscardUnknown(m) +} + +var xxx_messageInfo_BytesProto proto.InternalMessageInfo + +func (m *BytesProto) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +type VoidProto struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *VoidProto) Reset() { *m = VoidProto{} } +func (m *VoidProto) String() string { return proto.CompactTextString(m) } +func (*VoidProto) ProtoMessage() {} +func (*VoidProto) Descriptor() ([]byte, []int) { + return fileDescriptor_api_base_9d49f8792e0c1140, []int{6} +} +func (m *VoidProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_VoidProto.Unmarshal(m, b) +} +func (m *VoidProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_VoidProto.Marshal(b, m, deterministic) +} +func (dst *VoidProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_VoidProto.Merge(dst, src) +} +func (m *VoidProto) XXX_Size() int { + return xxx_messageInfo_VoidProto.Size(m) +} +func (m *VoidProto) XXX_DiscardUnknown() { + xxx_messageInfo_VoidProto.DiscardUnknown(m) +} + +var xxx_messageInfo_VoidProto proto.InternalMessageInfo + +func init() { + proto.RegisterType((*StringProto)(nil), "appengine.base.StringProto") + proto.RegisterType((*Integer32Proto)(nil), "appengine.base.Integer32Proto") + proto.RegisterType((*Integer64Proto)(nil), "appengine.base.Integer64Proto") + proto.RegisterType((*BoolProto)(nil), "appengine.base.BoolProto") + proto.RegisterType((*DoubleProto)(nil), "appengine.base.DoubleProto") + proto.RegisterType((*BytesProto)(nil), "appengine.base.BytesProto") + proto.RegisterType((*VoidProto)(nil), "appengine.base.VoidProto") +} + +func init() { + proto.RegisterFile("google.golang.org/appengine/internal/base/api_base.proto", fileDescriptor_api_base_9d49f8792e0c1140) +} + +var fileDescriptor_api_base_9d49f8792e0c1140 = []byte{ + // 199 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0xcf, 0x3f, 0x4b, 0xc6, 0x30, + 0x10, 0x06, 0x70, 0x5a, 0xad, 0xb4, 0x57, 0xe9, 0x20, 0x0e, 0x1d, 0xb5, 0x05, 0x71, 0x4a, 0x40, + 0x45, 0x9c, 0x83, 0x8b, 0x9b, 0x28, 0x38, 0xb8, 0x48, 0x8a, 0xc7, 0x11, 0x08, 0xb9, 0x90, 0xa6, + 0x82, 0xdf, 0x5e, 0xda, 0xd2, 0xfa, 0xc2, 0x9b, 0xed, 0xfe, 0xfc, 0xe0, 0xe1, 0x81, 0x27, 0x62, + 0x26, 0x8b, 0x82, 0xd8, 0x6a, 0x47, 0x82, 0x03, 0x49, 0xed, 0x3d, 0x3a, 0x32, 0x0e, 0xa5, 0x71, + 0x11, 0x83, 0xd3, 0x56, 0x0e, 0x7a, 0x44, 0xa9, 0xbd, 0xf9, 0x9a, 0x07, 0xe1, 0x03, 0x47, 0xbe, + 0x68, 0x76, 0x27, 0xe6, 0x6b, 0xd7, 0x43, 0xfd, 0x1e, 0x83, 0x71, 0xf4, 0xba, 0xbc, 0x2f, 0xa1, + 0xf8, 0xd1, 0x76, 0xc2, 0x36, 0xbb, 0xca, 0x6f, 0xab, 0xb7, 0x75, 0xe9, 0x6e, 0xa0, 0x79, 0x71, + 0x11, 0x09, 0xc3, 0xfd, 0x5d, 0xc2, 0x15, 0xc7, 0xee, 0xf1, 0x21, 0xe1, 0x4e, 0x36, 0x77, 0x0d, + 0x95, 0x62, 0xb6, 0x09, 0x52, 0x6e, 0xa4, 0x87, 0xfa, 0x99, 0xa7, 0xc1, 0x62, 0x02, 0x65, 0xff, + 0x79, 0xa0, 0x7e, 0x23, 0x8e, 0xab, 0x69, 0x0f, 0xcd, 0xb9, 0xca, 0xcb, 0xdd, 0xd5, 0x50, 0x7d, + 0xb0, 0xf9, 0x5e, 0x98, 0x3a, 0xfb, 0x3c, 0x9d, 0x9b, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xba, + 0x37, 0x25, 0xea, 0x44, 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/base/api_base.proto b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/base/api_base.proto new file mode 100644 index 00000000000..56cd7a3cad0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/base/api_base.proto @@ -0,0 +1,33 @@ +// Built-in base types for API calls. Primarily useful as return types. + +syntax = "proto2"; +option go_package = "base"; + +package appengine.base; + +message StringProto { + required string value = 1; +} + +message Integer32Proto { + required int32 value = 1; +} + +message Integer64Proto { + required int64 value = 1; +} + +message BoolProto { + required bool value = 1; +} + +message DoubleProto { + required double value = 1; +} + +message BytesProto { + required bytes value = 1 [ctype=CORD]; +} + +message VoidProto { +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go new file mode 100644 index 00000000000..2fb74828969 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go @@ -0,0 +1,4367 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google.golang.org/appengine/internal/datastore/datastore_v3.proto + +package datastore + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type Property_Meaning int32 + +const ( + Property_NO_MEANING Property_Meaning = 0 + Property_BLOB Property_Meaning = 14 + Property_TEXT Property_Meaning = 15 + Property_BYTESTRING Property_Meaning = 16 + Property_ATOM_CATEGORY Property_Meaning = 1 + Property_ATOM_LINK Property_Meaning = 2 + Property_ATOM_TITLE Property_Meaning = 3 + Property_ATOM_CONTENT Property_Meaning = 4 + Property_ATOM_SUMMARY Property_Meaning = 5 + Property_ATOM_AUTHOR Property_Meaning = 6 + Property_GD_WHEN Property_Meaning = 7 + Property_GD_EMAIL Property_Meaning = 8 + Property_GEORSS_POINT Property_Meaning = 9 + Property_GD_IM Property_Meaning = 10 + Property_GD_PHONENUMBER Property_Meaning = 11 + Property_GD_POSTALADDRESS Property_Meaning = 12 + Property_GD_RATING Property_Meaning = 13 + Property_BLOBKEY Property_Meaning = 17 + Property_ENTITY_PROTO Property_Meaning = 19 + Property_INDEX_VALUE Property_Meaning = 18 +) + +var Property_Meaning_name = map[int32]string{ + 0: "NO_MEANING", + 14: "BLOB", + 15: "TEXT", + 16: "BYTESTRING", + 1: "ATOM_CATEGORY", + 2: "ATOM_LINK", + 3: "ATOM_TITLE", + 4: "ATOM_CONTENT", + 5: "ATOM_SUMMARY", + 6: "ATOM_AUTHOR", + 7: "GD_WHEN", + 8: "GD_EMAIL", + 9: "GEORSS_POINT", + 10: "GD_IM", + 11: "GD_PHONENUMBER", + 12: "GD_POSTALADDRESS", + 13: "GD_RATING", + 17: "BLOBKEY", + 19: "ENTITY_PROTO", + 18: "INDEX_VALUE", +} +var Property_Meaning_value = map[string]int32{ + "NO_MEANING": 0, + "BLOB": 14, + "TEXT": 15, + "BYTESTRING": 16, + "ATOM_CATEGORY": 1, + "ATOM_LINK": 2, + "ATOM_TITLE": 3, + "ATOM_CONTENT": 4, + "ATOM_SUMMARY": 5, + "ATOM_AUTHOR": 6, + "GD_WHEN": 7, + "GD_EMAIL": 8, + "GEORSS_POINT": 9, + "GD_IM": 10, + "GD_PHONENUMBER": 11, + "GD_POSTALADDRESS": 12, + "GD_RATING": 13, + "BLOBKEY": 17, + "ENTITY_PROTO": 19, + "INDEX_VALUE": 18, +} + +func (x Property_Meaning) Enum() *Property_Meaning { + p := new(Property_Meaning) + *p = x + return p +} +func (x Property_Meaning) String() string { + return proto.EnumName(Property_Meaning_name, int32(x)) +} +func (x *Property_Meaning) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Property_Meaning_value, data, "Property_Meaning") + if err != nil { + return err + } + *x = Property_Meaning(value) + return nil +} +func (Property_Meaning) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2, 0} +} + +type Property_FtsTokenizationOption int32 + +const ( + Property_HTML Property_FtsTokenizationOption = 1 + Property_ATOM Property_FtsTokenizationOption = 2 +) + +var Property_FtsTokenizationOption_name = map[int32]string{ + 1: "HTML", + 2: "ATOM", +} +var Property_FtsTokenizationOption_value = map[string]int32{ + "HTML": 1, + "ATOM": 2, +} + +func (x Property_FtsTokenizationOption) Enum() *Property_FtsTokenizationOption { + p := new(Property_FtsTokenizationOption) + *p = x + return p +} +func (x Property_FtsTokenizationOption) String() string { + return proto.EnumName(Property_FtsTokenizationOption_name, int32(x)) +} +func (x *Property_FtsTokenizationOption) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Property_FtsTokenizationOption_value, data, "Property_FtsTokenizationOption") + if err != nil { + return err + } + *x = Property_FtsTokenizationOption(value) + return nil +} +func (Property_FtsTokenizationOption) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2, 1} +} + +type EntityProto_Kind int32 + +const ( + EntityProto_GD_CONTACT EntityProto_Kind = 1 + EntityProto_GD_EVENT EntityProto_Kind = 2 + EntityProto_GD_MESSAGE EntityProto_Kind = 3 +) + +var EntityProto_Kind_name = map[int32]string{ + 1: "GD_CONTACT", + 2: "GD_EVENT", + 3: "GD_MESSAGE", +} +var EntityProto_Kind_value = map[string]int32{ + "GD_CONTACT": 1, + "GD_EVENT": 2, + "GD_MESSAGE": 3, +} + +func (x EntityProto_Kind) Enum() *EntityProto_Kind { + p := new(EntityProto_Kind) + *p = x + return p +} +func (x EntityProto_Kind) String() string { + return proto.EnumName(EntityProto_Kind_name, int32(x)) +} +func (x *EntityProto_Kind) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(EntityProto_Kind_value, data, "EntityProto_Kind") + if err != nil { + return err + } + *x = EntityProto_Kind(value) + return nil +} +func (EntityProto_Kind) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{6, 0} +} + +type Index_Property_Direction int32 + +const ( + Index_Property_ASCENDING Index_Property_Direction = 1 + Index_Property_DESCENDING Index_Property_Direction = 2 +) + +var Index_Property_Direction_name = map[int32]string{ + 1: "ASCENDING", + 2: "DESCENDING", +} +var Index_Property_Direction_value = map[string]int32{ + "ASCENDING": 1, + "DESCENDING": 2, +} + +func (x Index_Property_Direction) Enum() *Index_Property_Direction { + p := new(Index_Property_Direction) + *p = x + return p +} +func (x Index_Property_Direction) String() string { + return proto.EnumName(Index_Property_Direction_name, int32(x)) +} +func (x *Index_Property_Direction) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Index_Property_Direction_value, data, "Index_Property_Direction") + if err != nil { + return err + } + *x = Index_Property_Direction(value) + return nil +} +func (Index_Property_Direction) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8, 0, 0} +} + +type CompositeIndex_State int32 + +const ( + CompositeIndex_WRITE_ONLY CompositeIndex_State = 1 + CompositeIndex_READ_WRITE CompositeIndex_State = 2 + CompositeIndex_DELETED CompositeIndex_State = 3 + CompositeIndex_ERROR CompositeIndex_State = 4 +) + +var CompositeIndex_State_name = map[int32]string{ + 1: "WRITE_ONLY", + 2: "READ_WRITE", + 3: "DELETED", + 4: "ERROR", +} +var CompositeIndex_State_value = map[string]int32{ + "WRITE_ONLY": 1, + "READ_WRITE": 2, + "DELETED": 3, + "ERROR": 4, +} + +func (x CompositeIndex_State) Enum() *CompositeIndex_State { + p := new(CompositeIndex_State) + *p = x + return p +} +func (x CompositeIndex_State) String() string { + return proto.EnumName(CompositeIndex_State_name, int32(x)) +} +func (x *CompositeIndex_State) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(CompositeIndex_State_value, data, "CompositeIndex_State") + if err != nil { + return err + } + *x = CompositeIndex_State(value) + return nil +} +func (CompositeIndex_State) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{9, 0} +} + +type Snapshot_Status int32 + +const ( + Snapshot_INACTIVE Snapshot_Status = 0 + Snapshot_ACTIVE Snapshot_Status = 1 +) + +var Snapshot_Status_name = map[int32]string{ + 0: "INACTIVE", + 1: "ACTIVE", +} +var Snapshot_Status_value = map[string]int32{ + "INACTIVE": 0, + "ACTIVE": 1, +} + +func (x Snapshot_Status) Enum() *Snapshot_Status { + p := new(Snapshot_Status) + *p = x + return p +} +func (x Snapshot_Status) String() string { + return proto.EnumName(Snapshot_Status_name, int32(x)) +} +func (x *Snapshot_Status) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Snapshot_Status_value, data, "Snapshot_Status") + if err != nil { + return err + } + *x = Snapshot_Status(value) + return nil +} +func (Snapshot_Status) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{12, 0} +} + +type Query_Hint int32 + +const ( + Query_ORDER_FIRST Query_Hint = 1 + Query_ANCESTOR_FIRST Query_Hint = 2 + Query_FILTER_FIRST Query_Hint = 3 +) + +var Query_Hint_name = map[int32]string{ + 1: "ORDER_FIRST", + 2: "ANCESTOR_FIRST", + 3: "FILTER_FIRST", +} +var Query_Hint_value = map[string]int32{ + "ORDER_FIRST": 1, + "ANCESTOR_FIRST": 2, + "FILTER_FIRST": 3, +} + +func (x Query_Hint) Enum() *Query_Hint { + p := new(Query_Hint) + *p = x + return p +} +func (x Query_Hint) String() string { + return proto.EnumName(Query_Hint_name, int32(x)) +} +func (x *Query_Hint) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Query_Hint_value, data, "Query_Hint") + if err != nil { + return err + } + *x = Query_Hint(value) + return nil +} +func (Query_Hint) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0} +} + +type Query_Filter_Operator int32 + +const ( + Query_Filter_LESS_THAN Query_Filter_Operator = 1 + Query_Filter_LESS_THAN_OR_EQUAL Query_Filter_Operator = 2 + Query_Filter_GREATER_THAN Query_Filter_Operator = 3 + Query_Filter_GREATER_THAN_OR_EQUAL Query_Filter_Operator = 4 + Query_Filter_EQUAL Query_Filter_Operator = 5 + Query_Filter_IN Query_Filter_Operator = 6 + Query_Filter_EXISTS Query_Filter_Operator = 7 +) + +var Query_Filter_Operator_name = map[int32]string{ + 1: "LESS_THAN", + 2: "LESS_THAN_OR_EQUAL", + 3: "GREATER_THAN", + 4: "GREATER_THAN_OR_EQUAL", + 5: "EQUAL", + 6: "IN", + 7: "EXISTS", +} +var Query_Filter_Operator_value = map[string]int32{ + "LESS_THAN": 1, + "LESS_THAN_OR_EQUAL": 2, + "GREATER_THAN": 3, + "GREATER_THAN_OR_EQUAL": 4, + "EQUAL": 5, + "IN": 6, + "EXISTS": 7, +} + +func (x Query_Filter_Operator) Enum() *Query_Filter_Operator { + p := new(Query_Filter_Operator) + *p = x + return p +} +func (x Query_Filter_Operator) String() string { + return proto.EnumName(Query_Filter_Operator_name, int32(x)) +} +func (x *Query_Filter_Operator) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Query_Filter_Operator_value, data, "Query_Filter_Operator") + if err != nil { + return err + } + *x = Query_Filter_Operator(value) + return nil +} +func (Query_Filter_Operator) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0, 0} +} + +type Query_Order_Direction int32 + +const ( + Query_Order_ASCENDING Query_Order_Direction = 1 + Query_Order_DESCENDING Query_Order_Direction = 2 +) + +var Query_Order_Direction_name = map[int32]string{ + 1: "ASCENDING", + 2: "DESCENDING", +} +var Query_Order_Direction_value = map[string]int32{ + "ASCENDING": 1, + "DESCENDING": 2, +} + +func (x Query_Order_Direction) Enum() *Query_Order_Direction { + p := new(Query_Order_Direction) + *p = x + return p +} +func (x Query_Order_Direction) String() string { + return proto.EnumName(Query_Order_Direction_name, int32(x)) +} +func (x *Query_Order_Direction) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Query_Order_Direction_value, data, "Query_Order_Direction") + if err != nil { + return err + } + *x = Query_Order_Direction(value) + return nil +} +func (Query_Order_Direction) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 1, 0} +} + +type Error_ErrorCode int32 + +const ( + Error_BAD_REQUEST Error_ErrorCode = 1 + Error_CONCURRENT_TRANSACTION Error_ErrorCode = 2 + Error_INTERNAL_ERROR Error_ErrorCode = 3 + Error_NEED_INDEX Error_ErrorCode = 4 + Error_TIMEOUT Error_ErrorCode = 5 + Error_PERMISSION_DENIED Error_ErrorCode = 6 + Error_BIGTABLE_ERROR Error_ErrorCode = 7 + Error_COMMITTED_BUT_STILL_APPLYING Error_ErrorCode = 8 + Error_CAPABILITY_DISABLED Error_ErrorCode = 9 + Error_TRY_ALTERNATE_BACKEND Error_ErrorCode = 10 + Error_SAFE_TIME_TOO_OLD Error_ErrorCode = 11 +) + +var Error_ErrorCode_name = map[int32]string{ + 1: "BAD_REQUEST", + 2: "CONCURRENT_TRANSACTION", + 3: "INTERNAL_ERROR", + 4: "NEED_INDEX", + 5: "TIMEOUT", + 6: "PERMISSION_DENIED", + 7: "BIGTABLE_ERROR", + 8: "COMMITTED_BUT_STILL_APPLYING", + 9: "CAPABILITY_DISABLED", + 10: "TRY_ALTERNATE_BACKEND", + 11: "SAFE_TIME_TOO_OLD", +} +var Error_ErrorCode_value = map[string]int32{ + "BAD_REQUEST": 1, + "CONCURRENT_TRANSACTION": 2, + "INTERNAL_ERROR": 3, + "NEED_INDEX": 4, + "TIMEOUT": 5, + "PERMISSION_DENIED": 6, + "BIGTABLE_ERROR": 7, + "COMMITTED_BUT_STILL_APPLYING": 8, + "CAPABILITY_DISABLED": 9, + "TRY_ALTERNATE_BACKEND": 10, + "SAFE_TIME_TOO_OLD": 11, +} + +func (x Error_ErrorCode) Enum() *Error_ErrorCode { + p := new(Error_ErrorCode) + *p = x + return p +} +func (x Error_ErrorCode) String() string { + return proto.EnumName(Error_ErrorCode_name, int32(x)) +} +func (x *Error_ErrorCode) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Error_ErrorCode_value, data, "Error_ErrorCode") + if err != nil { + return err + } + *x = Error_ErrorCode(value) + return nil +} +func (Error_ErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{19, 0} +} + +type PutRequest_AutoIdPolicy int32 + +const ( + PutRequest_CURRENT PutRequest_AutoIdPolicy = 0 + PutRequest_SEQUENTIAL PutRequest_AutoIdPolicy = 1 +) + +var PutRequest_AutoIdPolicy_name = map[int32]string{ + 0: "CURRENT", + 1: "SEQUENTIAL", +} +var PutRequest_AutoIdPolicy_value = map[string]int32{ + "CURRENT": 0, + "SEQUENTIAL": 1, +} + +func (x PutRequest_AutoIdPolicy) Enum() *PutRequest_AutoIdPolicy { + p := new(PutRequest_AutoIdPolicy) + *p = x + return p +} +func (x PutRequest_AutoIdPolicy) String() string { + return proto.EnumName(PutRequest_AutoIdPolicy_name, int32(x)) +} +func (x *PutRequest_AutoIdPolicy) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(PutRequest_AutoIdPolicy_value, data, "PutRequest_AutoIdPolicy") + if err != nil { + return err + } + *x = PutRequest_AutoIdPolicy(value) + return nil +} +func (PutRequest_AutoIdPolicy) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{23, 0} +} + +type BeginTransactionRequest_TransactionMode int32 + +const ( + BeginTransactionRequest_UNKNOWN BeginTransactionRequest_TransactionMode = 0 + BeginTransactionRequest_READ_ONLY BeginTransactionRequest_TransactionMode = 1 + BeginTransactionRequest_READ_WRITE BeginTransactionRequest_TransactionMode = 2 +) + +var BeginTransactionRequest_TransactionMode_name = map[int32]string{ + 0: "UNKNOWN", + 1: "READ_ONLY", + 2: "READ_WRITE", +} +var BeginTransactionRequest_TransactionMode_value = map[string]int32{ + "UNKNOWN": 0, + "READ_ONLY": 1, + "READ_WRITE": 2, +} + +func (x BeginTransactionRequest_TransactionMode) Enum() *BeginTransactionRequest_TransactionMode { + p := new(BeginTransactionRequest_TransactionMode) + *p = x + return p +} +func (x BeginTransactionRequest_TransactionMode) String() string { + return proto.EnumName(BeginTransactionRequest_TransactionMode_name, int32(x)) +} +func (x *BeginTransactionRequest_TransactionMode) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(BeginTransactionRequest_TransactionMode_value, data, "BeginTransactionRequest_TransactionMode") + if err != nil { + return err + } + *x = BeginTransactionRequest_TransactionMode(value) + return nil +} +func (BeginTransactionRequest_TransactionMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{36, 0} +} + +type Action struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Action) Reset() { *m = Action{} } +func (m *Action) String() string { return proto.CompactTextString(m) } +func (*Action) ProtoMessage() {} +func (*Action) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{0} +} +func (m *Action) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Action.Unmarshal(m, b) +} +func (m *Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Action.Marshal(b, m, deterministic) +} +func (dst *Action) XXX_Merge(src proto.Message) { + xxx_messageInfo_Action.Merge(dst, src) +} +func (m *Action) XXX_Size() int { + return xxx_messageInfo_Action.Size(m) +} +func (m *Action) XXX_DiscardUnknown() { + xxx_messageInfo_Action.DiscardUnknown(m) +} + +var xxx_messageInfo_Action proto.InternalMessageInfo + +type PropertyValue struct { + Int64Value *int64 `protobuf:"varint,1,opt,name=int64Value" json:"int64Value,omitempty"` + BooleanValue *bool `protobuf:"varint,2,opt,name=booleanValue" json:"booleanValue,omitempty"` + StringValue *string `protobuf:"bytes,3,opt,name=stringValue" json:"stringValue,omitempty"` + DoubleValue *float64 `protobuf:"fixed64,4,opt,name=doubleValue" json:"doubleValue,omitempty"` + Pointvalue *PropertyValue_PointValue `protobuf:"group,5,opt,name=PointValue,json=pointvalue" json:"pointvalue,omitempty"` + Uservalue *PropertyValue_UserValue `protobuf:"group,8,opt,name=UserValue,json=uservalue" json:"uservalue,omitempty"` + Referencevalue *PropertyValue_ReferenceValue `protobuf:"group,12,opt,name=ReferenceValue,json=referencevalue" json:"referencevalue,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PropertyValue) Reset() { *m = PropertyValue{} } +func (m *PropertyValue) String() string { return proto.CompactTextString(m) } +func (*PropertyValue) ProtoMessage() {} +func (*PropertyValue) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1} +} +func (m *PropertyValue) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PropertyValue.Unmarshal(m, b) +} +func (m *PropertyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PropertyValue.Marshal(b, m, deterministic) +} +func (dst *PropertyValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_PropertyValue.Merge(dst, src) +} +func (m *PropertyValue) XXX_Size() int { + return xxx_messageInfo_PropertyValue.Size(m) +} +func (m *PropertyValue) XXX_DiscardUnknown() { + xxx_messageInfo_PropertyValue.DiscardUnknown(m) +} + +var xxx_messageInfo_PropertyValue proto.InternalMessageInfo + +func (m *PropertyValue) GetInt64Value() int64 { + if m != nil && m.Int64Value != nil { + return *m.Int64Value + } + return 0 +} + +func (m *PropertyValue) GetBooleanValue() bool { + if m != nil && m.BooleanValue != nil { + return *m.BooleanValue + } + return false +} + +func (m *PropertyValue) GetStringValue() string { + if m != nil && m.StringValue != nil { + return *m.StringValue + } + return "" +} + +func (m *PropertyValue) GetDoubleValue() float64 { + if m != nil && m.DoubleValue != nil { + return *m.DoubleValue + } + return 0 +} + +func (m *PropertyValue) GetPointvalue() *PropertyValue_PointValue { + if m != nil { + return m.Pointvalue + } + return nil +} + +func (m *PropertyValue) GetUservalue() *PropertyValue_UserValue { + if m != nil { + return m.Uservalue + } + return nil +} + +func (m *PropertyValue) GetReferencevalue() *PropertyValue_ReferenceValue { + if m != nil { + return m.Referencevalue + } + return nil +} + +type PropertyValue_PointValue struct { + X *float64 `protobuf:"fixed64,6,req,name=x" json:"x,omitempty"` + Y *float64 `protobuf:"fixed64,7,req,name=y" json:"y,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PropertyValue_PointValue) Reset() { *m = PropertyValue_PointValue{} } +func (m *PropertyValue_PointValue) String() string { return proto.CompactTextString(m) } +func (*PropertyValue_PointValue) ProtoMessage() {} +func (*PropertyValue_PointValue) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 0} +} +func (m *PropertyValue_PointValue) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PropertyValue_PointValue.Unmarshal(m, b) +} +func (m *PropertyValue_PointValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PropertyValue_PointValue.Marshal(b, m, deterministic) +} +func (dst *PropertyValue_PointValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_PropertyValue_PointValue.Merge(dst, src) +} +func (m *PropertyValue_PointValue) XXX_Size() int { + return xxx_messageInfo_PropertyValue_PointValue.Size(m) +} +func (m *PropertyValue_PointValue) XXX_DiscardUnknown() { + xxx_messageInfo_PropertyValue_PointValue.DiscardUnknown(m) +} + +var xxx_messageInfo_PropertyValue_PointValue proto.InternalMessageInfo + +func (m *PropertyValue_PointValue) GetX() float64 { + if m != nil && m.X != nil { + return *m.X + } + return 0 +} + +func (m *PropertyValue_PointValue) GetY() float64 { + if m != nil && m.Y != nil { + return *m.Y + } + return 0 +} + +type PropertyValue_UserValue struct { + Email *string `protobuf:"bytes,9,req,name=email" json:"email,omitempty"` + AuthDomain *string `protobuf:"bytes,10,req,name=auth_domain,json=authDomain" json:"auth_domain,omitempty"` + Nickname *string `protobuf:"bytes,11,opt,name=nickname" json:"nickname,omitempty"` + FederatedIdentity *string `protobuf:"bytes,21,opt,name=federated_identity,json=federatedIdentity" json:"federated_identity,omitempty"` + FederatedProvider *string `protobuf:"bytes,22,opt,name=federated_provider,json=federatedProvider" json:"federated_provider,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PropertyValue_UserValue) Reset() { *m = PropertyValue_UserValue{} } +func (m *PropertyValue_UserValue) String() string { return proto.CompactTextString(m) } +func (*PropertyValue_UserValue) ProtoMessage() {} +func (*PropertyValue_UserValue) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 1} +} +func (m *PropertyValue_UserValue) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PropertyValue_UserValue.Unmarshal(m, b) +} +func (m *PropertyValue_UserValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PropertyValue_UserValue.Marshal(b, m, deterministic) +} +func (dst *PropertyValue_UserValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_PropertyValue_UserValue.Merge(dst, src) +} +func (m *PropertyValue_UserValue) XXX_Size() int { + return xxx_messageInfo_PropertyValue_UserValue.Size(m) +} +func (m *PropertyValue_UserValue) XXX_DiscardUnknown() { + xxx_messageInfo_PropertyValue_UserValue.DiscardUnknown(m) +} + +var xxx_messageInfo_PropertyValue_UserValue proto.InternalMessageInfo + +func (m *PropertyValue_UserValue) GetEmail() string { + if m != nil && m.Email != nil { + return *m.Email + } + return "" +} + +func (m *PropertyValue_UserValue) GetAuthDomain() string { + if m != nil && m.AuthDomain != nil { + return *m.AuthDomain + } + return "" +} + +func (m *PropertyValue_UserValue) GetNickname() string { + if m != nil && m.Nickname != nil { + return *m.Nickname + } + return "" +} + +func (m *PropertyValue_UserValue) GetFederatedIdentity() string { + if m != nil && m.FederatedIdentity != nil { + return *m.FederatedIdentity + } + return "" +} + +func (m *PropertyValue_UserValue) GetFederatedProvider() string { + if m != nil && m.FederatedProvider != nil { + return *m.FederatedProvider + } + return "" +} + +type PropertyValue_ReferenceValue struct { + App *string `protobuf:"bytes,13,req,name=app" json:"app,omitempty"` + NameSpace *string `protobuf:"bytes,20,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"` + Pathelement []*PropertyValue_ReferenceValue_PathElement `protobuf:"group,14,rep,name=PathElement,json=pathelement" json:"pathelement,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PropertyValue_ReferenceValue) Reset() { *m = PropertyValue_ReferenceValue{} } +func (m *PropertyValue_ReferenceValue) String() string { return proto.CompactTextString(m) } +func (*PropertyValue_ReferenceValue) ProtoMessage() {} +func (*PropertyValue_ReferenceValue) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 2} +} +func (m *PropertyValue_ReferenceValue) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PropertyValue_ReferenceValue.Unmarshal(m, b) +} +func (m *PropertyValue_ReferenceValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PropertyValue_ReferenceValue.Marshal(b, m, deterministic) +} +func (dst *PropertyValue_ReferenceValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_PropertyValue_ReferenceValue.Merge(dst, src) +} +func (m *PropertyValue_ReferenceValue) XXX_Size() int { + return xxx_messageInfo_PropertyValue_ReferenceValue.Size(m) +} +func (m *PropertyValue_ReferenceValue) XXX_DiscardUnknown() { + xxx_messageInfo_PropertyValue_ReferenceValue.DiscardUnknown(m) +} + +var xxx_messageInfo_PropertyValue_ReferenceValue proto.InternalMessageInfo + +func (m *PropertyValue_ReferenceValue) GetApp() string { + if m != nil && m.App != nil { + return *m.App + } + return "" +} + +func (m *PropertyValue_ReferenceValue) GetNameSpace() string { + if m != nil && m.NameSpace != nil { + return *m.NameSpace + } + return "" +} + +func (m *PropertyValue_ReferenceValue) GetPathelement() []*PropertyValue_ReferenceValue_PathElement { + if m != nil { + return m.Pathelement + } + return nil +} + +type PropertyValue_ReferenceValue_PathElement struct { + Type *string `protobuf:"bytes,15,req,name=type" json:"type,omitempty"` + Id *int64 `protobuf:"varint,16,opt,name=id" json:"id,omitempty"` + Name *string `protobuf:"bytes,17,opt,name=name" json:"name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PropertyValue_ReferenceValue_PathElement) Reset() { + *m = PropertyValue_ReferenceValue_PathElement{} +} +func (m *PropertyValue_ReferenceValue_PathElement) String() string { return proto.CompactTextString(m) } +func (*PropertyValue_ReferenceValue_PathElement) ProtoMessage() {} +func (*PropertyValue_ReferenceValue_PathElement) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 2, 0} +} +func (m *PropertyValue_ReferenceValue_PathElement) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Unmarshal(m, b) +} +func (m *PropertyValue_ReferenceValue_PathElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Marshal(b, m, deterministic) +} +func (dst *PropertyValue_ReferenceValue_PathElement) XXX_Merge(src proto.Message) { + xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Merge(dst, src) +} +func (m *PropertyValue_ReferenceValue_PathElement) XXX_Size() int { + return xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Size(m) +} +func (m *PropertyValue_ReferenceValue_PathElement) XXX_DiscardUnknown() { + xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.DiscardUnknown(m) +} + +var xxx_messageInfo_PropertyValue_ReferenceValue_PathElement proto.InternalMessageInfo + +func (m *PropertyValue_ReferenceValue_PathElement) GetType() string { + if m != nil && m.Type != nil { + return *m.Type + } + return "" +} + +func (m *PropertyValue_ReferenceValue_PathElement) GetId() int64 { + if m != nil && m.Id != nil { + return *m.Id + } + return 0 +} + +func (m *PropertyValue_ReferenceValue_PathElement) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +type Property struct { + Meaning *Property_Meaning `protobuf:"varint,1,opt,name=meaning,enum=appengine.Property_Meaning,def=0" json:"meaning,omitempty"` + MeaningUri *string `protobuf:"bytes,2,opt,name=meaning_uri,json=meaningUri" json:"meaning_uri,omitempty"` + Name *string `protobuf:"bytes,3,req,name=name" json:"name,omitempty"` + Value *PropertyValue `protobuf:"bytes,5,req,name=value" json:"value,omitempty"` + Multiple *bool `protobuf:"varint,4,req,name=multiple" json:"multiple,omitempty"` + Searchable *bool `protobuf:"varint,6,opt,name=searchable,def=0" json:"searchable,omitempty"` + FtsTokenizationOption *Property_FtsTokenizationOption `protobuf:"varint,8,opt,name=fts_tokenization_option,json=ftsTokenizationOption,enum=appengine.Property_FtsTokenizationOption" json:"fts_tokenization_option,omitempty"` + Locale *string `protobuf:"bytes,9,opt,name=locale,def=en" json:"locale,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Property) Reset() { *m = Property{} } +func (m *Property) String() string { return proto.CompactTextString(m) } +func (*Property) ProtoMessage() {} +func (*Property) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2} +} +func (m *Property) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Property.Unmarshal(m, b) +} +func (m *Property) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Property.Marshal(b, m, deterministic) +} +func (dst *Property) XXX_Merge(src proto.Message) { + xxx_messageInfo_Property.Merge(dst, src) +} +func (m *Property) XXX_Size() int { + return xxx_messageInfo_Property.Size(m) +} +func (m *Property) XXX_DiscardUnknown() { + xxx_messageInfo_Property.DiscardUnknown(m) +} + +var xxx_messageInfo_Property proto.InternalMessageInfo + +const Default_Property_Meaning Property_Meaning = Property_NO_MEANING +const Default_Property_Searchable bool = false +const Default_Property_Locale string = "en" + +func (m *Property) GetMeaning() Property_Meaning { + if m != nil && m.Meaning != nil { + return *m.Meaning + } + return Default_Property_Meaning +} + +func (m *Property) GetMeaningUri() string { + if m != nil && m.MeaningUri != nil { + return *m.MeaningUri + } + return "" +} + +func (m *Property) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *Property) GetValue() *PropertyValue { + if m != nil { + return m.Value + } + return nil +} + +func (m *Property) GetMultiple() bool { + if m != nil && m.Multiple != nil { + return *m.Multiple + } + return false +} + +func (m *Property) GetSearchable() bool { + if m != nil && m.Searchable != nil { + return *m.Searchable + } + return Default_Property_Searchable +} + +func (m *Property) GetFtsTokenizationOption() Property_FtsTokenizationOption { + if m != nil && m.FtsTokenizationOption != nil { + return *m.FtsTokenizationOption + } + return Property_HTML +} + +func (m *Property) GetLocale() string { + if m != nil && m.Locale != nil { + return *m.Locale + } + return Default_Property_Locale +} + +type Path struct { + Element []*Path_Element `protobuf:"group,1,rep,name=Element,json=element" json:"element,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Path) Reset() { *m = Path{} } +func (m *Path) String() string { return proto.CompactTextString(m) } +func (*Path) ProtoMessage() {} +func (*Path) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{3} +} +func (m *Path) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Path.Unmarshal(m, b) +} +func (m *Path) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Path.Marshal(b, m, deterministic) +} +func (dst *Path) XXX_Merge(src proto.Message) { + xxx_messageInfo_Path.Merge(dst, src) +} +func (m *Path) XXX_Size() int { + return xxx_messageInfo_Path.Size(m) +} +func (m *Path) XXX_DiscardUnknown() { + xxx_messageInfo_Path.DiscardUnknown(m) +} + +var xxx_messageInfo_Path proto.InternalMessageInfo + +func (m *Path) GetElement() []*Path_Element { + if m != nil { + return m.Element + } + return nil +} + +type Path_Element struct { + Type *string `protobuf:"bytes,2,req,name=type" json:"type,omitempty"` + Id *int64 `protobuf:"varint,3,opt,name=id" json:"id,omitempty"` + Name *string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Path_Element) Reset() { *m = Path_Element{} } +func (m *Path_Element) String() string { return proto.CompactTextString(m) } +func (*Path_Element) ProtoMessage() {} +func (*Path_Element) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{3, 0} +} +func (m *Path_Element) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Path_Element.Unmarshal(m, b) +} +func (m *Path_Element) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Path_Element.Marshal(b, m, deterministic) +} +func (dst *Path_Element) XXX_Merge(src proto.Message) { + xxx_messageInfo_Path_Element.Merge(dst, src) +} +func (m *Path_Element) XXX_Size() int { + return xxx_messageInfo_Path_Element.Size(m) +} +func (m *Path_Element) XXX_DiscardUnknown() { + xxx_messageInfo_Path_Element.DiscardUnknown(m) +} + +var xxx_messageInfo_Path_Element proto.InternalMessageInfo + +func (m *Path_Element) GetType() string { + if m != nil && m.Type != nil { + return *m.Type + } + return "" +} + +func (m *Path_Element) GetId() int64 { + if m != nil && m.Id != nil { + return *m.Id + } + return 0 +} + +func (m *Path_Element) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +type Reference struct { + App *string `protobuf:"bytes,13,req,name=app" json:"app,omitempty"` + NameSpace *string `protobuf:"bytes,20,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"` + Path *Path `protobuf:"bytes,14,req,name=path" json:"path,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Reference) Reset() { *m = Reference{} } +func (m *Reference) String() string { return proto.CompactTextString(m) } +func (*Reference) ProtoMessage() {} +func (*Reference) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{4} +} +func (m *Reference) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Reference.Unmarshal(m, b) +} +func (m *Reference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Reference.Marshal(b, m, deterministic) +} +func (dst *Reference) XXX_Merge(src proto.Message) { + xxx_messageInfo_Reference.Merge(dst, src) +} +func (m *Reference) XXX_Size() int { + return xxx_messageInfo_Reference.Size(m) +} +func (m *Reference) XXX_DiscardUnknown() { + xxx_messageInfo_Reference.DiscardUnknown(m) +} + +var xxx_messageInfo_Reference proto.InternalMessageInfo + +func (m *Reference) GetApp() string { + if m != nil && m.App != nil { + return *m.App + } + return "" +} + +func (m *Reference) GetNameSpace() string { + if m != nil && m.NameSpace != nil { + return *m.NameSpace + } + return "" +} + +func (m *Reference) GetPath() *Path { + if m != nil { + return m.Path + } + return nil +} + +type User struct { + Email *string `protobuf:"bytes,1,req,name=email" json:"email,omitempty"` + AuthDomain *string `protobuf:"bytes,2,req,name=auth_domain,json=authDomain" json:"auth_domain,omitempty"` + Nickname *string `protobuf:"bytes,3,opt,name=nickname" json:"nickname,omitempty"` + FederatedIdentity *string `protobuf:"bytes,6,opt,name=federated_identity,json=federatedIdentity" json:"federated_identity,omitempty"` + FederatedProvider *string `protobuf:"bytes,7,opt,name=federated_provider,json=federatedProvider" json:"federated_provider,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *User) Reset() { *m = User{} } +func (m *User) String() string { return proto.CompactTextString(m) } +func (*User) ProtoMessage() {} +func (*User) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{5} +} +func (m *User) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_User.Unmarshal(m, b) +} +func (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_User.Marshal(b, m, deterministic) +} +func (dst *User) XXX_Merge(src proto.Message) { + xxx_messageInfo_User.Merge(dst, src) +} +func (m *User) XXX_Size() int { + return xxx_messageInfo_User.Size(m) +} +func (m *User) XXX_DiscardUnknown() { + xxx_messageInfo_User.DiscardUnknown(m) +} + +var xxx_messageInfo_User proto.InternalMessageInfo + +func (m *User) GetEmail() string { + if m != nil && m.Email != nil { + return *m.Email + } + return "" +} + +func (m *User) GetAuthDomain() string { + if m != nil && m.AuthDomain != nil { + return *m.AuthDomain + } + return "" +} + +func (m *User) GetNickname() string { + if m != nil && m.Nickname != nil { + return *m.Nickname + } + return "" +} + +func (m *User) GetFederatedIdentity() string { + if m != nil && m.FederatedIdentity != nil { + return *m.FederatedIdentity + } + return "" +} + +func (m *User) GetFederatedProvider() string { + if m != nil && m.FederatedProvider != nil { + return *m.FederatedProvider + } + return "" +} + +type EntityProto struct { + Key *Reference `protobuf:"bytes,13,req,name=key" json:"key,omitempty"` + EntityGroup *Path `protobuf:"bytes,16,req,name=entity_group,json=entityGroup" json:"entity_group,omitempty"` + Owner *User `protobuf:"bytes,17,opt,name=owner" json:"owner,omitempty"` + Kind *EntityProto_Kind `protobuf:"varint,4,opt,name=kind,enum=appengine.EntityProto_Kind" json:"kind,omitempty"` + KindUri *string `protobuf:"bytes,5,opt,name=kind_uri,json=kindUri" json:"kind_uri,omitempty"` + Property []*Property `protobuf:"bytes,14,rep,name=property" json:"property,omitempty"` + RawProperty []*Property `protobuf:"bytes,15,rep,name=raw_property,json=rawProperty" json:"raw_property,omitempty"` + Rank *int32 `protobuf:"varint,18,opt,name=rank" json:"rank,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EntityProto) Reset() { *m = EntityProto{} } +func (m *EntityProto) String() string { return proto.CompactTextString(m) } +func (*EntityProto) ProtoMessage() {} +func (*EntityProto) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{6} +} +func (m *EntityProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EntityProto.Unmarshal(m, b) +} +func (m *EntityProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EntityProto.Marshal(b, m, deterministic) +} +func (dst *EntityProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_EntityProto.Merge(dst, src) +} +func (m *EntityProto) XXX_Size() int { + return xxx_messageInfo_EntityProto.Size(m) +} +func (m *EntityProto) XXX_DiscardUnknown() { + xxx_messageInfo_EntityProto.DiscardUnknown(m) +} + +var xxx_messageInfo_EntityProto proto.InternalMessageInfo + +func (m *EntityProto) GetKey() *Reference { + if m != nil { + return m.Key + } + return nil +} + +func (m *EntityProto) GetEntityGroup() *Path { + if m != nil { + return m.EntityGroup + } + return nil +} + +func (m *EntityProto) GetOwner() *User { + if m != nil { + return m.Owner + } + return nil +} + +func (m *EntityProto) GetKind() EntityProto_Kind { + if m != nil && m.Kind != nil { + return *m.Kind + } + return EntityProto_GD_CONTACT +} + +func (m *EntityProto) GetKindUri() string { + if m != nil && m.KindUri != nil { + return *m.KindUri + } + return "" +} + +func (m *EntityProto) GetProperty() []*Property { + if m != nil { + return m.Property + } + return nil +} + +func (m *EntityProto) GetRawProperty() []*Property { + if m != nil { + return m.RawProperty + } + return nil +} + +func (m *EntityProto) GetRank() int32 { + if m != nil && m.Rank != nil { + return *m.Rank + } + return 0 +} + +type CompositeProperty struct { + IndexId *int64 `protobuf:"varint,1,req,name=index_id,json=indexId" json:"index_id,omitempty"` + Value []string `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompositeProperty) Reset() { *m = CompositeProperty{} } +func (m *CompositeProperty) String() string { return proto.CompactTextString(m) } +func (*CompositeProperty) ProtoMessage() {} +func (*CompositeProperty) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{7} +} +func (m *CompositeProperty) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompositeProperty.Unmarshal(m, b) +} +func (m *CompositeProperty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompositeProperty.Marshal(b, m, deterministic) +} +func (dst *CompositeProperty) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompositeProperty.Merge(dst, src) +} +func (m *CompositeProperty) XXX_Size() int { + return xxx_messageInfo_CompositeProperty.Size(m) +} +func (m *CompositeProperty) XXX_DiscardUnknown() { + xxx_messageInfo_CompositeProperty.DiscardUnknown(m) +} + +var xxx_messageInfo_CompositeProperty proto.InternalMessageInfo + +func (m *CompositeProperty) GetIndexId() int64 { + if m != nil && m.IndexId != nil { + return *m.IndexId + } + return 0 +} + +func (m *CompositeProperty) GetValue() []string { + if m != nil { + return m.Value + } + return nil +} + +type Index struct { + EntityType *string `protobuf:"bytes,1,req,name=entity_type,json=entityType" json:"entity_type,omitempty"` + Ancestor *bool `protobuf:"varint,5,req,name=ancestor" json:"ancestor,omitempty"` + Property []*Index_Property `protobuf:"group,2,rep,name=Property,json=property" json:"property,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Index) Reset() { *m = Index{} } +func (m *Index) String() string { return proto.CompactTextString(m) } +func (*Index) ProtoMessage() {} +func (*Index) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8} +} +func (m *Index) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Index.Unmarshal(m, b) +} +func (m *Index) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Index.Marshal(b, m, deterministic) +} +func (dst *Index) XXX_Merge(src proto.Message) { + xxx_messageInfo_Index.Merge(dst, src) +} +func (m *Index) XXX_Size() int { + return xxx_messageInfo_Index.Size(m) +} +func (m *Index) XXX_DiscardUnknown() { + xxx_messageInfo_Index.DiscardUnknown(m) +} + +var xxx_messageInfo_Index proto.InternalMessageInfo + +func (m *Index) GetEntityType() string { + if m != nil && m.EntityType != nil { + return *m.EntityType + } + return "" +} + +func (m *Index) GetAncestor() bool { + if m != nil && m.Ancestor != nil { + return *m.Ancestor + } + return false +} + +func (m *Index) GetProperty() []*Index_Property { + if m != nil { + return m.Property + } + return nil +} + +type Index_Property struct { + Name *string `protobuf:"bytes,3,req,name=name" json:"name,omitempty"` + Direction *Index_Property_Direction `protobuf:"varint,4,opt,name=direction,enum=appengine.Index_Property_Direction,def=1" json:"direction,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Index_Property) Reset() { *m = Index_Property{} } +func (m *Index_Property) String() string { return proto.CompactTextString(m) } +func (*Index_Property) ProtoMessage() {} +func (*Index_Property) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8, 0} +} +func (m *Index_Property) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Index_Property.Unmarshal(m, b) +} +func (m *Index_Property) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Index_Property.Marshal(b, m, deterministic) +} +func (dst *Index_Property) XXX_Merge(src proto.Message) { + xxx_messageInfo_Index_Property.Merge(dst, src) +} +func (m *Index_Property) XXX_Size() int { + return xxx_messageInfo_Index_Property.Size(m) +} +func (m *Index_Property) XXX_DiscardUnknown() { + xxx_messageInfo_Index_Property.DiscardUnknown(m) +} + +var xxx_messageInfo_Index_Property proto.InternalMessageInfo + +const Default_Index_Property_Direction Index_Property_Direction = Index_Property_ASCENDING + +func (m *Index_Property) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *Index_Property) GetDirection() Index_Property_Direction { + if m != nil && m.Direction != nil { + return *m.Direction + } + return Default_Index_Property_Direction +} + +type CompositeIndex struct { + AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"` + Id *int64 `protobuf:"varint,2,req,name=id" json:"id,omitempty"` + Definition *Index `protobuf:"bytes,3,req,name=definition" json:"definition,omitempty"` + State *CompositeIndex_State `protobuf:"varint,4,req,name=state,enum=appengine.CompositeIndex_State" json:"state,omitempty"` + OnlyUseIfRequired *bool `protobuf:"varint,6,opt,name=only_use_if_required,json=onlyUseIfRequired,def=0" json:"only_use_if_required,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompositeIndex) Reset() { *m = CompositeIndex{} } +func (m *CompositeIndex) String() string { return proto.CompactTextString(m) } +func (*CompositeIndex) ProtoMessage() {} +func (*CompositeIndex) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{9} +} +func (m *CompositeIndex) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompositeIndex.Unmarshal(m, b) +} +func (m *CompositeIndex) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompositeIndex.Marshal(b, m, deterministic) +} +func (dst *CompositeIndex) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompositeIndex.Merge(dst, src) +} +func (m *CompositeIndex) XXX_Size() int { + return xxx_messageInfo_CompositeIndex.Size(m) +} +func (m *CompositeIndex) XXX_DiscardUnknown() { + xxx_messageInfo_CompositeIndex.DiscardUnknown(m) +} + +var xxx_messageInfo_CompositeIndex proto.InternalMessageInfo + +const Default_CompositeIndex_OnlyUseIfRequired bool = false + +func (m *CompositeIndex) GetAppId() string { + if m != nil && m.AppId != nil { + return *m.AppId + } + return "" +} + +func (m *CompositeIndex) GetId() int64 { + if m != nil && m.Id != nil { + return *m.Id + } + return 0 +} + +func (m *CompositeIndex) GetDefinition() *Index { + if m != nil { + return m.Definition + } + return nil +} + +func (m *CompositeIndex) GetState() CompositeIndex_State { + if m != nil && m.State != nil { + return *m.State + } + return CompositeIndex_WRITE_ONLY +} + +func (m *CompositeIndex) GetOnlyUseIfRequired() bool { + if m != nil && m.OnlyUseIfRequired != nil { + return *m.OnlyUseIfRequired + } + return Default_CompositeIndex_OnlyUseIfRequired +} + +type IndexPostfix struct { + IndexValue []*IndexPostfix_IndexValue `protobuf:"bytes,1,rep,name=index_value,json=indexValue" json:"index_value,omitempty"` + Key *Reference `protobuf:"bytes,2,opt,name=key" json:"key,omitempty"` + Before *bool `protobuf:"varint,3,opt,name=before,def=1" json:"before,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IndexPostfix) Reset() { *m = IndexPostfix{} } +func (m *IndexPostfix) String() string { return proto.CompactTextString(m) } +func (*IndexPostfix) ProtoMessage() {} +func (*IndexPostfix) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{10} +} +func (m *IndexPostfix) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_IndexPostfix.Unmarshal(m, b) +} +func (m *IndexPostfix) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_IndexPostfix.Marshal(b, m, deterministic) +} +func (dst *IndexPostfix) XXX_Merge(src proto.Message) { + xxx_messageInfo_IndexPostfix.Merge(dst, src) +} +func (m *IndexPostfix) XXX_Size() int { + return xxx_messageInfo_IndexPostfix.Size(m) +} +func (m *IndexPostfix) XXX_DiscardUnknown() { + xxx_messageInfo_IndexPostfix.DiscardUnknown(m) +} + +var xxx_messageInfo_IndexPostfix proto.InternalMessageInfo + +const Default_IndexPostfix_Before bool = true + +func (m *IndexPostfix) GetIndexValue() []*IndexPostfix_IndexValue { + if m != nil { + return m.IndexValue + } + return nil +} + +func (m *IndexPostfix) GetKey() *Reference { + if m != nil { + return m.Key + } + return nil +} + +func (m *IndexPostfix) GetBefore() bool { + if m != nil && m.Before != nil { + return *m.Before + } + return Default_IndexPostfix_Before +} + +type IndexPostfix_IndexValue struct { + PropertyName *string `protobuf:"bytes,1,req,name=property_name,json=propertyName" json:"property_name,omitempty"` + Value *PropertyValue `protobuf:"bytes,2,req,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IndexPostfix_IndexValue) Reset() { *m = IndexPostfix_IndexValue{} } +func (m *IndexPostfix_IndexValue) String() string { return proto.CompactTextString(m) } +func (*IndexPostfix_IndexValue) ProtoMessage() {} +func (*IndexPostfix_IndexValue) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{10, 0} +} +func (m *IndexPostfix_IndexValue) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_IndexPostfix_IndexValue.Unmarshal(m, b) +} +func (m *IndexPostfix_IndexValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_IndexPostfix_IndexValue.Marshal(b, m, deterministic) +} +func (dst *IndexPostfix_IndexValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_IndexPostfix_IndexValue.Merge(dst, src) +} +func (m *IndexPostfix_IndexValue) XXX_Size() int { + return xxx_messageInfo_IndexPostfix_IndexValue.Size(m) +} +func (m *IndexPostfix_IndexValue) XXX_DiscardUnknown() { + xxx_messageInfo_IndexPostfix_IndexValue.DiscardUnknown(m) +} + +var xxx_messageInfo_IndexPostfix_IndexValue proto.InternalMessageInfo + +func (m *IndexPostfix_IndexValue) GetPropertyName() string { + if m != nil && m.PropertyName != nil { + return *m.PropertyName + } + return "" +} + +func (m *IndexPostfix_IndexValue) GetValue() *PropertyValue { + if m != nil { + return m.Value + } + return nil +} + +type IndexPosition struct { + Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Before *bool `protobuf:"varint,2,opt,name=before,def=1" json:"before,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *IndexPosition) Reset() { *m = IndexPosition{} } +func (m *IndexPosition) String() string { return proto.CompactTextString(m) } +func (*IndexPosition) ProtoMessage() {} +func (*IndexPosition) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{11} +} +func (m *IndexPosition) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_IndexPosition.Unmarshal(m, b) +} +func (m *IndexPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_IndexPosition.Marshal(b, m, deterministic) +} +func (dst *IndexPosition) XXX_Merge(src proto.Message) { + xxx_messageInfo_IndexPosition.Merge(dst, src) +} +func (m *IndexPosition) XXX_Size() int { + return xxx_messageInfo_IndexPosition.Size(m) +} +func (m *IndexPosition) XXX_DiscardUnknown() { + xxx_messageInfo_IndexPosition.DiscardUnknown(m) +} + +var xxx_messageInfo_IndexPosition proto.InternalMessageInfo + +const Default_IndexPosition_Before bool = true + +func (m *IndexPosition) GetKey() string { + if m != nil && m.Key != nil { + return *m.Key + } + return "" +} + +func (m *IndexPosition) GetBefore() bool { + if m != nil && m.Before != nil { + return *m.Before + } + return Default_IndexPosition_Before +} + +type Snapshot struct { + Ts *int64 `protobuf:"varint,1,req,name=ts" json:"ts,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Snapshot) Reset() { *m = Snapshot{} } +func (m *Snapshot) String() string { return proto.CompactTextString(m) } +func (*Snapshot) ProtoMessage() {} +func (*Snapshot) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{12} +} +func (m *Snapshot) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Snapshot.Unmarshal(m, b) +} +func (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Snapshot.Marshal(b, m, deterministic) +} +func (dst *Snapshot) XXX_Merge(src proto.Message) { + xxx_messageInfo_Snapshot.Merge(dst, src) +} +func (m *Snapshot) XXX_Size() int { + return xxx_messageInfo_Snapshot.Size(m) +} +func (m *Snapshot) XXX_DiscardUnknown() { + xxx_messageInfo_Snapshot.DiscardUnknown(m) +} + +var xxx_messageInfo_Snapshot proto.InternalMessageInfo + +func (m *Snapshot) GetTs() int64 { + if m != nil && m.Ts != nil { + return *m.Ts + } + return 0 +} + +type InternalHeader struct { + Qos *string `protobuf:"bytes,1,opt,name=qos" json:"qos,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *InternalHeader) Reset() { *m = InternalHeader{} } +func (m *InternalHeader) String() string { return proto.CompactTextString(m) } +func (*InternalHeader) ProtoMessage() {} +func (*InternalHeader) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{13} +} +func (m *InternalHeader) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_InternalHeader.Unmarshal(m, b) +} +func (m *InternalHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_InternalHeader.Marshal(b, m, deterministic) +} +func (dst *InternalHeader) XXX_Merge(src proto.Message) { + xxx_messageInfo_InternalHeader.Merge(dst, src) +} +func (m *InternalHeader) XXX_Size() int { + return xxx_messageInfo_InternalHeader.Size(m) +} +func (m *InternalHeader) XXX_DiscardUnknown() { + xxx_messageInfo_InternalHeader.DiscardUnknown(m) +} + +var xxx_messageInfo_InternalHeader proto.InternalMessageInfo + +func (m *InternalHeader) GetQos() string { + if m != nil && m.Qos != nil { + return *m.Qos + } + return "" +} + +type Transaction struct { + Header *InternalHeader `protobuf:"bytes,4,opt,name=header" json:"header,omitempty"` + Handle *uint64 `protobuf:"fixed64,1,req,name=handle" json:"handle,omitempty"` + App *string `protobuf:"bytes,2,req,name=app" json:"app,omitempty"` + MarkChanges *bool `protobuf:"varint,3,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Transaction) Reset() { *m = Transaction{} } +func (m *Transaction) String() string { return proto.CompactTextString(m) } +func (*Transaction) ProtoMessage() {} +func (*Transaction) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{14} +} +func (m *Transaction) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Transaction.Unmarshal(m, b) +} +func (m *Transaction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Transaction.Marshal(b, m, deterministic) +} +func (dst *Transaction) XXX_Merge(src proto.Message) { + xxx_messageInfo_Transaction.Merge(dst, src) +} +func (m *Transaction) XXX_Size() int { + return xxx_messageInfo_Transaction.Size(m) +} +func (m *Transaction) XXX_DiscardUnknown() { + xxx_messageInfo_Transaction.DiscardUnknown(m) +} + +var xxx_messageInfo_Transaction proto.InternalMessageInfo + +const Default_Transaction_MarkChanges bool = false + +func (m *Transaction) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *Transaction) GetHandle() uint64 { + if m != nil && m.Handle != nil { + return *m.Handle + } + return 0 +} + +func (m *Transaction) GetApp() string { + if m != nil && m.App != nil { + return *m.App + } + return "" +} + +func (m *Transaction) GetMarkChanges() bool { + if m != nil && m.MarkChanges != nil { + return *m.MarkChanges + } + return Default_Transaction_MarkChanges +} + +type Query struct { + Header *InternalHeader `protobuf:"bytes,39,opt,name=header" json:"header,omitempty"` + App *string `protobuf:"bytes,1,req,name=app" json:"app,omitempty"` + NameSpace *string `protobuf:"bytes,29,opt,name=name_space,json=nameSpace" json:"name_space,omitempty"` + Kind *string `protobuf:"bytes,3,opt,name=kind" json:"kind,omitempty"` + Ancestor *Reference `protobuf:"bytes,17,opt,name=ancestor" json:"ancestor,omitempty"` + Filter []*Query_Filter `protobuf:"group,4,rep,name=Filter,json=filter" json:"filter,omitempty"` + SearchQuery *string `protobuf:"bytes,8,opt,name=search_query,json=searchQuery" json:"search_query,omitempty"` + Order []*Query_Order `protobuf:"group,9,rep,name=Order,json=order" json:"order,omitempty"` + Hint *Query_Hint `protobuf:"varint,18,opt,name=hint,enum=appengine.Query_Hint" json:"hint,omitempty"` + Count *int32 `protobuf:"varint,23,opt,name=count" json:"count,omitempty"` + Offset *int32 `protobuf:"varint,12,opt,name=offset,def=0" json:"offset,omitempty"` + Limit *int32 `protobuf:"varint,16,opt,name=limit" json:"limit,omitempty"` + CompiledCursor *CompiledCursor `protobuf:"bytes,30,opt,name=compiled_cursor,json=compiledCursor" json:"compiled_cursor,omitempty"` + EndCompiledCursor *CompiledCursor `protobuf:"bytes,31,opt,name=end_compiled_cursor,json=endCompiledCursor" json:"end_compiled_cursor,omitempty"` + CompositeIndex []*CompositeIndex `protobuf:"bytes,19,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"` + RequirePerfectPlan *bool `protobuf:"varint,20,opt,name=require_perfect_plan,json=requirePerfectPlan,def=0" json:"require_perfect_plan,omitempty"` + KeysOnly *bool `protobuf:"varint,21,opt,name=keys_only,json=keysOnly,def=0" json:"keys_only,omitempty"` + Transaction *Transaction `protobuf:"bytes,22,opt,name=transaction" json:"transaction,omitempty"` + Compile *bool `protobuf:"varint,25,opt,name=compile,def=0" json:"compile,omitempty"` + FailoverMs *int64 `protobuf:"varint,26,opt,name=failover_ms,json=failoverMs" json:"failover_ms,omitempty"` + Strong *bool `protobuf:"varint,32,opt,name=strong" json:"strong,omitempty"` + PropertyName []string `protobuf:"bytes,33,rep,name=property_name,json=propertyName" json:"property_name,omitempty"` + GroupByPropertyName []string `protobuf:"bytes,34,rep,name=group_by_property_name,json=groupByPropertyName" json:"group_by_property_name,omitempty"` + Distinct *bool `protobuf:"varint,24,opt,name=distinct" json:"distinct,omitempty"` + MinSafeTimeSeconds *int64 `protobuf:"varint,35,opt,name=min_safe_time_seconds,json=minSafeTimeSeconds" json:"min_safe_time_seconds,omitempty"` + SafeReplicaName []string `protobuf:"bytes,36,rep,name=safe_replica_name,json=safeReplicaName" json:"safe_replica_name,omitempty"` + PersistOffset *bool `protobuf:"varint,37,opt,name=persist_offset,json=persistOffset,def=0" json:"persist_offset,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Query) Reset() { *m = Query{} } +func (m *Query) String() string { return proto.CompactTextString(m) } +func (*Query) ProtoMessage() {} +func (*Query) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15} +} +func (m *Query) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Query.Unmarshal(m, b) +} +func (m *Query) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Query.Marshal(b, m, deterministic) +} +func (dst *Query) XXX_Merge(src proto.Message) { + xxx_messageInfo_Query.Merge(dst, src) +} +func (m *Query) XXX_Size() int { + return xxx_messageInfo_Query.Size(m) +} +func (m *Query) XXX_DiscardUnknown() { + xxx_messageInfo_Query.DiscardUnknown(m) +} + +var xxx_messageInfo_Query proto.InternalMessageInfo + +const Default_Query_Offset int32 = 0 +const Default_Query_RequirePerfectPlan bool = false +const Default_Query_KeysOnly bool = false +const Default_Query_Compile bool = false +const Default_Query_PersistOffset bool = false + +func (m *Query) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *Query) GetApp() string { + if m != nil && m.App != nil { + return *m.App + } + return "" +} + +func (m *Query) GetNameSpace() string { + if m != nil && m.NameSpace != nil { + return *m.NameSpace + } + return "" +} + +func (m *Query) GetKind() string { + if m != nil && m.Kind != nil { + return *m.Kind + } + return "" +} + +func (m *Query) GetAncestor() *Reference { + if m != nil { + return m.Ancestor + } + return nil +} + +func (m *Query) GetFilter() []*Query_Filter { + if m != nil { + return m.Filter + } + return nil +} + +func (m *Query) GetSearchQuery() string { + if m != nil && m.SearchQuery != nil { + return *m.SearchQuery + } + return "" +} + +func (m *Query) GetOrder() []*Query_Order { + if m != nil { + return m.Order + } + return nil +} + +func (m *Query) GetHint() Query_Hint { + if m != nil && m.Hint != nil { + return *m.Hint + } + return Query_ORDER_FIRST +} + +func (m *Query) GetCount() int32 { + if m != nil && m.Count != nil { + return *m.Count + } + return 0 +} + +func (m *Query) GetOffset() int32 { + if m != nil && m.Offset != nil { + return *m.Offset + } + return Default_Query_Offset +} + +func (m *Query) GetLimit() int32 { + if m != nil && m.Limit != nil { + return *m.Limit + } + return 0 +} + +func (m *Query) GetCompiledCursor() *CompiledCursor { + if m != nil { + return m.CompiledCursor + } + return nil +} + +func (m *Query) GetEndCompiledCursor() *CompiledCursor { + if m != nil { + return m.EndCompiledCursor + } + return nil +} + +func (m *Query) GetCompositeIndex() []*CompositeIndex { + if m != nil { + return m.CompositeIndex + } + return nil +} + +func (m *Query) GetRequirePerfectPlan() bool { + if m != nil && m.RequirePerfectPlan != nil { + return *m.RequirePerfectPlan + } + return Default_Query_RequirePerfectPlan +} + +func (m *Query) GetKeysOnly() bool { + if m != nil && m.KeysOnly != nil { + return *m.KeysOnly + } + return Default_Query_KeysOnly +} + +func (m *Query) GetTransaction() *Transaction { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *Query) GetCompile() bool { + if m != nil && m.Compile != nil { + return *m.Compile + } + return Default_Query_Compile +} + +func (m *Query) GetFailoverMs() int64 { + if m != nil && m.FailoverMs != nil { + return *m.FailoverMs + } + return 0 +} + +func (m *Query) GetStrong() bool { + if m != nil && m.Strong != nil { + return *m.Strong + } + return false +} + +func (m *Query) GetPropertyName() []string { + if m != nil { + return m.PropertyName + } + return nil +} + +func (m *Query) GetGroupByPropertyName() []string { + if m != nil { + return m.GroupByPropertyName + } + return nil +} + +func (m *Query) GetDistinct() bool { + if m != nil && m.Distinct != nil { + return *m.Distinct + } + return false +} + +func (m *Query) GetMinSafeTimeSeconds() int64 { + if m != nil && m.MinSafeTimeSeconds != nil { + return *m.MinSafeTimeSeconds + } + return 0 +} + +func (m *Query) GetSafeReplicaName() []string { + if m != nil { + return m.SafeReplicaName + } + return nil +} + +func (m *Query) GetPersistOffset() bool { + if m != nil && m.PersistOffset != nil { + return *m.PersistOffset + } + return Default_Query_PersistOffset +} + +type Query_Filter struct { + Op *Query_Filter_Operator `protobuf:"varint,6,req,name=op,enum=appengine.Query_Filter_Operator" json:"op,omitempty"` + Property []*Property `protobuf:"bytes,14,rep,name=property" json:"property,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Query_Filter) Reset() { *m = Query_Filter{} } +func (m *Query_Filter) String() string { return proto.CompactTextString(m) } +func (*Query_Filter) ProtoMessage() {} +func (*Query_Filter) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0} +} +func (m *Query_Filter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Query_Filter.Unmarshal(m, b) +} +func (m *Query_Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Query_Filter.Marshal(b, m, deterministic) +} +func (dst *Query_Filter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Query_Filter.Merge(dst, src) +} +func (m *Query_Filter) XXX_Size() int { + return xxx_messageInfo_Query_Filter.Size(m) +} +func (m *Query_Filter) XXX_DiscardUnknown() { + xxx_messageInfo_Query_Filter.DiscardUnknown(m) +} + +var xxx_messageInfo_Query_Filter proto.InternalMessageInfo + +func (m *Query_Filter) GetOp() Query_Filter_Operator { + if m != nil && m.Op != nil { + return *m.Op + } + return Query_Filter_LESS_THAN +} + +func (m *Query_Filter) GetProperty() []*Property { + if m != nil { + return m.Property + } + return nil +} + +type Query_Order struct { + Property *string `protobuf:"bytes,10,req,name=property" json:"property,omitempty"` + Direction *Query_Order_Direction `protobuf:"varint,11,opt,name=direction,enum=appengine.Query_Order_Direction,def=1" json:"direction,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Query_Order) Reset() { *m = Query_Order{} } +func (m *Query_Order) String() string { return proto.CompactTextString(m) } +func (*Query_Order) ProtoMessage() {} +func (*Query_Order) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 1} +} +func (m *Query_Order) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Query_Order.Unmarshal(m, b) +} +func (m *Query_Order) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Query_Order.Marshal(b, m, deterministic) +} +func (dst *Query_Order) XXX_Merge(src proto.Message) { + xxx_messageInfo_Query_Order.Merge(dst, src) +} +func (m *Query_Order) XXX_Size() int { + return xxx_messageInfo_Query_Order.Size(m) +} +func (m *Query_Order) XXX_DiscardUnknown() { + xxx_messageInfo_Query_Order.DiscardUnknown(m) +} + +var xxx_messageInfo_Query_Order proto.InternalMessageInfo + +const Default_Query_Order_Direction Query_Order_Direction = Query_Order_ASCENDING + +func (m *Query_Order) GetProperty() string { + if m != nil && m.Property != nil { + return *m.Property + } + return "" +} + +func (m *Query_Order) GetDirection() Query_Order_Direction { + if m != nil && m.Direction != nil { + return *m.Direction + } + return Default_Query_Order_Direction +} + +type CompiledQuery struct { + Primaryscan *CompiledQuery_PrimaryScan `protobuf:"group,1,req,name=PrimaryScan,json=primaryscan" json:"primaryscan,omitempty"` + Mergejoinscan []*CompiledQuery_MergeJoinScan `protobuf:"group,7,rep,name=MergeJoinScan,json=mergejoinscan" json:"mergejoinscan,omitempty"` + IndexDef *Index `protobuf:"bytes,21,opt,name=index_def,json=indexDef" json:"index_def,omitempty"` + Offset *int32 `protobuf:"varint,10,opt,name=offset,def=0" json:"offset,omitempty"` + Limit *int32 `protobuf:"varint,11,opt,name=limit" json:"limit,omitempty"` + KeysOnly *bool `protobuf:"varint,12,req,name=keys_only,json=keysOnly" json:"keys_only,omitempty"` + PropertyName []string `protobuf:"bytes,24,rep,name=property_name,json=propertyName" json:"property_name,omitempty"` + DistinctInfixSize *int32 `protobuf:"varint,25,opt,name=distinct_infix_size,json=distinctInfixSize" json:"distinct_infix_size,omitempty"` + Entityfilter *CompiledQuery_EntityFilter `protobuf:"group,13,opt,name=EntityFilter,json=entityfilter" json:"entityfilter,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompiledQuery) Reset() { *m = CompiledQuery{} } +func (m *CompiledQuery) String() string { return proto.CompactTextString(m) } +func (*CompiledQuery) ProtoMessage() {} +func (*CompiledQuery) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16} +} +func (m *CompiledQuery) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompiledQuery.Unmarshal(m, b) +} +func (m *CompiledQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompiledQuery.Marshal(b, m, deterministic) +} +func (dst *CompiledQuery) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompiledQuery.Merge(dst, src) +} +func (m *CompiledQuery) XXX_Size() int { + return xxx_messageInfo_CompiledQuery.Size(m) +} +func (m *CompiledQuery) XXX_DiscardUnknown() { + xxx_messageInfo_CompiledQuery.DiscardUnknown(m) +} + +var xxx_messageInfo_CompiledQuery proto.InternalMessageInfo + +const Default_CompiledQuery_Offset int32 = 0 + +func (m *CompiledQuery) GetPrimaryscan() *CompiledQuery_PrimaryScan { + if m != nil { + return m.Primaryscan + } + return nil +} + +func (m *CompiledQuery) GetMergejoinscan() []*CompiledQuery_MergeJoinScan { + if m != nil { + return m.Mergejoinscan + } + return nil +} + +func (m *CompiledQuery) GetIndexDef() *Index { + if m != nil { + return m.IndexDef + } + return nil +} + +func (m *CompiledQuery) GetOffset() int32 { + if m != nil && m.Offset != nil { + return *m.Offset + } + return Default_CompiledQuery_Offset +} + +func (m *CompiledQuery) GetLimit() int32 { + if m != nil && m.Limit != nil { + return *m.Limit + } + return 0 +} + +func (m *CompiledQuery) GetKeysOnly() bool { + if m != nil && m.KeysOnly != nil { + return *m.KeysOnly + } + return false +} + +func (m *CompiledQuery) GetPropertyName() []string { + if m != nil { + return m.PropertyName + } + return nil +} + +func (m *CompiledQuery) GetDistinctInfixSize() int32 { + if m != nil && m.DistinctInfixSize != nil { + return *m.DistinctInfixSize + } + return 0 +} + +func (m *CompiledQuery) GetEntityfilter() *CompiledQuery_EntityFilter { + if m != nil { + return m.Entityfilter + } + return nil +} + +type CompiledQuery_PrimaryScan struct { + IndexName *string `protobuf:"bytes,2,opt,name=index_name,json=indexName" json:"index_name,omitempty"` + StartKey *string `protobuf:"bytes,3,opt,name=start_key,json=startKey" json:"start_key,omitempty"` + StartInclusive *bool `protobuf:"varint,4,opt,name=start_inclusive,json=startInclusive" json:"start_inclusive,omitempty"` + EndKey *string `protobuf:"bytes,5,opt,name=end_key,json=endKey" json:"end_key,omitempty"` + EndInclusive *bool `protobuf:"varint,6,opt,name=end_inclusive,json=endInclusive" json:"end_inclusive,omitempty"` + StartPostfixValue []string `protobuf:"bytes,22,rep,name=start_postfix_value,json=startPostfixValue" json:"start_postfix_value,omitempty"` + EndPostfixValue []string `protobuf:"bytes,23,rep,name=end_postfix_value,json=endPostfixValue" json:"end_postfix_value,omitempty"` + EndUnappliedLogTimestampUs *int64 `protobuf:"varint,19,opt,name=end_unapplied_log_timestamp_us,json=endUnappliedLogTimestampUs" json:"end_unapplied_log_timestamp_us,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompiledQuery_PrimaryScan) Reset() { *m = CompiledQuery_PrimaryScan{} } +func (m *CompiledQuery_PrimaryScan) String() string { return proto.CompactTextString(m) } +func (*CompiledQuery_PrimaryScan) ProtoMessage() {} +func (*CompiledQuery_PrimaryScan) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 0} +} +func (m *CompiledQuery_PrimaryScan) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompiledQuery_PrimaryScan.Unmarshal(m, b) +} +func (m *CompiledQuery_PrimaryScan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompiledQuery_PrimaryScan.Marshal(b, m, deterministic) +} +func (dst *CompiledQuery_PrimaryScan) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompiledQuery_PrimaryScan.Merge(dst, src) +} +func (m *CompiledQuery_PrimaryScan) XXX_Size() int { + return xxx_messageInfo_CompiledQuery_PrimaryScan.Size(m) +} +func (m *CompiledQuery_PrimaryScan) XXX_DiscardUnknown() { + xxx_messageInfo_CompiledQuery_PrimaryScan.DiscardUnknown(m) +} + +var xxx_messageInfo_CompiledQuery_PrimaryScan proto.InternalMessageInfo + +func (m *CompiledQuery_PrimaryScan) GetIndexName() string { + if m != nil && m.IndexName != nil { + return *m.IndexName + } + return "" +} + +func (m *CompiledQuery_PrimaryScan) GetStartKey() string { + if m != nil && m.StartKey != nil { + return *m.StartKey + } + return "" +} + +func (m *CompiledQuery_PrimaryScan) GetStartInclusive() bool { + if m != nil && m.StartInclusive != nil { + return *m.StartInclusive + } + return false +} + +func (m *CompiledQuery_PrimaryScan) GetEndKey() string { + if m != nil && m.EndKey != nil { + return *m.EndKey + } + return "" +} + +func (m *CompiledQuery_PrimaryScan) GetEndInclusive() bool { + if m != nil && m.EndInclusive != nil { + return *m.EndInclusive + } + return false +} + +func (m *CompiledQuery_PrimaryScan) GetStartPostfixValue() []string { + if m != nil { + return m.StartPostfixValue + } + return nil +} + +func (m *CompiledQuery_PrimaryScan) GetEndPostfixValue() []string { + if m != nil { + return m.EndPostfixValue + } + return nil +} + +func (m *CompiledQuery_PrimaryScan) GetEndUnappliedLogTimestampUs() int64 { + if m != nil && m.EndUnappliedLogTimestampUs != nil { + return *m.EndUnappliedLogTimestampUs + } + return 0 +} + +type CompiledQuery_MergeJoinScan struct { + IndexName *string `protobuf:"bytes,8,req,name=index_name,json=indexName" json:"index_name,omitempty"` + PrefixValue []string `protobuf:"bytes,9,rep,name=prefix_value,json=prefixValue" json:"prefix_value,omitempty"` + ValuePrefix *bool `protobuf:"varint,20,opt,name=value_prefix,json=valuePrefix,def=0" json:"value_prefix,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompiledQuery_MergeJoinScan) Reset() { *m = CompiledQuery_MergeJoinScan{} } +func (m *CompiledQuery_MergeJoinScan) String() string { return proto.CompactTextString(m) } +func (*CompiledQuery_MergeJoinScan) ProtoMessage() {} +func (*CompiledQuery_MergeJoinScan) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 1} +} +func (m *CompiledQuery_MergeJoinScan) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompiledQuery_MergeJoinScan.Unmarshal(m, b) +} +func (m *CompiledQuery_MergeJoinScan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompiledQuery_MergeJoinScan.Marshal(b, m, deterministic) +} +func (dst *CompiledQuery_MergeJoinScan) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompiledQuery_MergeJoinScan.Merge(dst, src) +} +func (m *CompiledQuery_MergeJoinScan) XXX_Size() int { + return xxx_messageInfo_CompiledQuery_MergeJoinScan.Size(m) +} +func (m *CompiledQuery_MergeJoinScan) XXX_DiscardUnknown() { + xxx_messageInfo_CompiledQuery_MergeJoinScan.DiscardUnknown(m) +} + +var xxx_messageInfo_CompiledQuery_MergeJoinScan proto.InternalMessageInfo + +const Default_CompiledQuery_MergeJoinScan_ValuePrefix bool = false + +func (m *CompiledQuery_MergeJoinScan) GetIndexName() string { + if m != nil && m.IndexName != nil { + return *m.IndexName + } + return "" +} + +func (m *CompiledQuery_MergeJoinScan) GetPrefixValue() []string { + if m != nil { + return m.PrefixValue + } + return nil +} + +func (m *CompiledQuery_MergeJoinScan) GetValuePrefix() bool { + if m != nil && m.ValuePrefix != nil { + return *m.ValuePrefix + } + return Default_CompiledQuery_MergeJoinScan_ValuePrefix +} + +type CompiledQuery_EntityFilter struct { + Distinct *bool `protobuf:"varint,14,opt,name=distinct,def=0" json:"distinct,omitempty"` + Kind *string `protobuf:"bytes,17,opt,name=kind" json:"kind,omitempty"` + Ancestor *Reference `protobuf:"bytes,18,opt,name=ancestor" json:"ancestor,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompiledQuery_EntityFilter) Reset() { *m = CompiledQuery_EntityFilter{} } +func (m *CompiledQuery_EntityFilter) String() string { return proto.CompactTextString(m) } +func (*CompiledQuery_EntityFilter) ProtoMessage() {} +func (*CompiledQuery_EntityFilter) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 2} +} +func (m *CompiledQuery_EntityFilter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompiledQuery_EntityFilter.Unmarshal(m, b) +} +func (m *CompiledQuery_EntityFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompiledQuery_EntityFilter.Marshal(b, m, deterministic) +} +func (dst *CompiledQuery_EntityFilter) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompiledQuery_EntityFilter.Merge(dst, src) +} +func (m *CompiledQuery_EntityFilter) XXX_Size() int { + return xxx_messageInfo_CompiledQuery_EntityFilter.Size(m) +} +func (m *CompiledQuery_EntityFilter) XXX_DiscardUnknown() { + xxx_messageInfo_CompiledQuery_EntityFilter.DiscardUnknown(m) +} + +var xxx_messageInfo_CompiledQuery_EntityFilter proto.InternalMessageInfo + +const Default_CompiledQuery_EntityFilter_Distinct bool = false + +func (m *CompiledQuery_EntityFilter) GetDistinct() bool { + if m != nil && m.Distinct != nil { + return *m.Distinct + } + return Default_CompiledQuery_EntityFilter_Distinct +} + +func (m *CompiledQuery_EntityFilter) GetKind() string { + if m != nil && m.Kind != nil { + return *m.Kind + } + return "" +} + +func (m *CompiledQuery_EntityFilter) GetAncestor() *Reference { + if m != nil { + return m.Ancestor + } + return nil +} + +type CompiledCursor struct { + Position *CompiledCursor_Position `protobuf:"group,2,opt,name=Position,json=position" json:"position,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompiledCursor) Reset() { *m = CompiledCursor{} } +func (m *CompiledCursor) String() string { return proto.CompactTextString(m) } +func (*CompiledCursor) ProtoMessage() {} +func (*CompiledCursor) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17} +} +func (m *CompiledCursor) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompiledCursor.Unmarshal(m, b) +} +func (m *CompiledCursor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompiledCursor.Marshal(b, m, deterministic) +} +func (dst *CompiledCursor) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompiledCursor.Merge(dst, src) +} +func (m *CompiledCursor) XXX_Size() int { + return xxx_messageInfo_CompiledCursor.Size(m) +} +func (m *CompiledCursor) XXX_DiscardUnknown() { + xxx_messageInfo_CompiledCursor.DiscardUnknown(m) +} + +var xxx_messageInfo_CompiledCursor proto.InternalMessageInfo + +func (m *CompiledCursor) GetPosition() *CompiledCursor_Position { + if m != nil { + return m.Position + } + return nil +} + +type CompiledCursor_Position struct { + StartKey *string `protobuf:"bytes,27,opt,name=start_key,json=startKey" json:"start_key,omitempty"` + Indexvalue []*CompiledCursor_Position_IndexValue `protobuf:"group,29,rep,name=IndexValue,json=indexvalue" json:"indexvalue,omitempty"` + Key *Reference `protobuf:"bytes,32,opt,name=key" json:"key,omitempty"` + StartInclusive *bool `protobuf:"varint,28,opt,name=start_inclusive,json=startInclusive,def=1" json:"start_inclusive,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompiledCursor_Position) Reset() { *m = CompiledCursor_Position{} } +func (m *CompiledCursor_Position) String() string { return proto.CompactTextString(m) } +func (*CompiledCursor_Position) ProtoMessage() {} +func (*CompiledCursor_Position) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17, 0} +} +func (m *CompiledCursor_Position) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompiledCursor_Position.Unmarshal(m, b) +} +func (m *CompiledCursor_Position) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompiledCursor_Position.Marshal(b, m, deterministic) +} +func (dst *CompiledCursor_Position) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompiledCursor_Position.Merge(dst, src) +} +func (m *CompiledCursor_Position) XXX_Size() int { + return xxx_messageInfo_CompiledCursor_Position.Size(m) +} +func (m *CompiledCursor_Position) XXX_DiscardUnknown() { + xxx_messageInfo_CompiledCursor_Position.DiscardUnknown(m) +} + +var xxx_messageInfo_CompiledCursor_Position proto.InternalMessageInfo + +const Default_CompiledCursor_Position_StartInclusive bool = true + +func (m *CompiledCursor_Position) GetStartKey() string { + if m != nil && m.StartKey != nil { + return *m.StartKey + } + return "" +} + +func (m *CompiledCursor_Position) GetIndexvalue() []*CompiledCursor_Position_IndexValue { + if m != nil { + return m.Indexvalue + } + return nil +} + +func (m *CompiledCursor_Position) GetKey() *Reference { + if m != nil { + return m.Key + } + return nil +} + +func (m *CompiledCursor_Position) GetStartInclusive() bool { + if m != nil && m.StartInclusive != nil { + return *m.StartInclusive + } + return Default_CompiledCursor_Position_StartInclusive +} + +type CompiledCursor_Position_IndexValue struct { + Property *string `protobuf:"bytes,30,opt,name=property" json:"property,omitempty"` + Value *PropertyValue `protobuf:"bytes,31,req,name=value" json:"value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompiledCursor_Position_IndexValue) Reset() { *m = CompiledCursor_Position_IndexValue{} } +func (m *CompiledCursor_Position_IndexValue) String() string { return proto.CompactTextString(m) } +func (*CompiledCursor_Position_IndexValue) ProtoMessage() {} +func (*CompiledCursor_Position_IndexValue) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17, 0, 0} +} +func (m *CompiledCursor_Position_IndexValue) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompiledCursor_Position_IndexValue.Unmarshal(m, b) +} +func (m *CompiledCursor_Position_IndexValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompiledCursor_Position_IndexValue.Marshal(b, m, deterministic) +} +func (dst *CompiledCursor_Position_IndexValue) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompiledCursor_Position_IndexValue.Merge(dst, src) +} +func (m *CompiledCursor_Position_IndexValue) XXX_Size() int { + return xxx_messageInfo_CompiledCursor_Position_IndexValue.Size(m) +} +func (m *CompiledCursor_Position_IndexValue) XXX_DiscardUnknown() { + xxx_messageInfo_CompiledCursor_Position_IndexValue.DiscardUnknown(m) +} + +var xxx_messageInfo_CompiledCursor_Position_IndexValue proto.InternalMessageInfo + +func (m *CompiledCursor_Position_IndexValue) GetProperty() string { + if m != nil && m.Property != nil { + return *m.Property + } + return "" +} + +func (m *CompiledCursor_Position_IndexValue) GetValue() *PropertyValue { + if m != nil { + return m.Value + } + return nil +} + +type Cursor struct { + Cursor *uint64 `protobuf:"fixed64,1,req,name=cursor" json:"cursor,omitempty"` + App *string `protobuf:"bytes,2,opt,name=app" json:"app,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cursor) Reset() { *m = Cursor{} } +func (m *Cursor) String() string { return proto.CompactTextString(m) } +func (*Cursor) ProtoMessage() {} +func (*Cursor) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{18} +} +func (m *Cursor) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cursor.Unmarshal(m, b) +} +func (m *Cursor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cursor.Marshal(b, m, deterministic) +} +func (dst *Cursor) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cursor.Merge(dst, src) +} +func (m *Cursor) XXX_Size() int { + return xxx_messageInfo_Cursor.Size(m) +} +func (m *Cursor) XXX_DiscardUnknown() { + xxx_messageInfo_Cursor.DiscardUnknown(m) +} + +var xxx_messageInfo_Cursor proto.InternalMessageInfo + +func (m *Cursor) GetCursor() uint64 { + if m != nil && m.Cursor != nil { + return *m.Cursor + } + return 0 +} + +func (m *Cursor) GetApp() string { + if m != nil && m.App != nil { + return *m.App + } + return "" +} + +type Error struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Error) Reset() { *m = Error{} } +func (m *Error) String() string { return proto.CompactTextString(m) } +func (*Error) ProtoMessage() {} +func (*Error) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{19} +} +func (m *Error) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Error.Unmarshal(m, b) +} +func (m *Error) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Error.Marshal(b, m, deterministic) +} +func (dst *Error) XXX_Merge(src proto.Message) { + xxx_messageInfo_Error.Merge(dst, src) +} +func (m *Error) XXX_Size() int { + return xxx_messageInfo_Error.Size(m) +} +func (m *Error) XXX_DiscardUnknown() { + xxx_messageInfo_Error.DiscardUnknown(m) +} + +var xxx_messageInfo_Error proto.InternalMessageInfo + +type Cost struct { + IndexWrites *int32 `protobuf:"varint,1,opt,name=index_writes,json=indexWrites" json:"index_writes,omitempty"` + IndexWriteBytes *int32 `protobuf:"varint,2,opt,name=index_write_bytes,json=indexWriteBytes" json:"index_write_bytes,omitempty"` + EntityWrites *int32 `protobuf:"varint,3,opt,name=entity_writes,json=entityWrites" json:"entity_writes,omitempty"` + EntityWriteBytes *int32 `protobuf:"varint,4,opt,name=entity_write_bytes,json=entityWriteBytes" json:"entity_write_bytes,omitempty"` + Commitcost *Cost_CommitCost `protobuf:"group,5,opt,name=CommitCost,json=commitcost" json:"commitcost,omitempty"` + ApproximateStorageDelta *int32 `protobuf:"varint,8,opt,name=approximate_storage_delta,json=approximateStorageDelta" json:"approximate_storage_delta,omitempty"` + IdSequenceUpdates *int32 `protobuf:"varint,9,opt,name=id_sequence_updates,json=idSequenceUpdates" json:"id_sequence_updates,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cost) Reset() { *m = Cost{} } +func (m *Cost) String() string { return proto.CompactTextString(m) } +func (*Cost) ProtoMessage() {} +func (*Cost) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{20} +} +func (m *Cost) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cost.Unmarshal(m, b) +} +func (m *Cost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cost.Marshal(b, m, deterministic) +} +func (dst *Cost) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cost.Merge(dst, src) +} +func (m *Cost) XXX_Size() int { + return xxx_messageInfo_Cost.Size(m) +} +func (m *Cost) XXX_DiscardUnknown() { + xxx_messageInfo_Cost.DiscardUnknown(m) +} + +var xxx_messageInfo_Cost proto.InternalMessageInfo + +func (m *Cost) GetIndexWrites() int32 { + if m != nil && m.IndexWrites != nil { + return *m.IndexWrites + } + return 0 +} + +func (m *Cost) GetIndexWriteBytes() int32 { + if m != nil && m.IndexWriteBytes != nil { + return *m.IndexWriteBytes + } + return 0 +} + +func (m *Cost) GetEntityWrites() int32 { + if m != nil && m.EntityWrites != nil { + return *m.EntityWrites + } + return 0 +} + +func (m *Cost) GetEntityWriteBytes() int32 { + if m != nil && m.EntityWriteBytes != nil { + return *m.EntityWriteBytes + } + return 0 +} + +func (m *Cost) GetCommitcost() *Cost_CommitCost { + if m != nil { + return m.Commitcost + } + return nil +} + +func (m *Cost) GetApproximateStorageDelta() int32 { + if m != nil && m.ApproximateStorageDelta != nil { + return *m.ApproximateStorageDelta + } + return 0 +} + +func (m *Cost) GetIdSequenceUpdates() int32 { + if m != nil && m.IdSequenceUpdates != nil { + return *m.IdSequenceUpdates + } + return 0 +} + +type Cost_CommitCost struct { + RequestedEntityPuts *int32 `protobuf:"varint,6,opt,name=requested_entity_puts,json=requestedEntityPuts" json:"requested_entity_puts,omitempty"` + RequestedEntityDeletes *int32 `protobuf:"varint,7,opt,name=requested_entity_deletes,json=requestedEntityDeletes" json:"requested_entity_deletes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cost_CommitCost) Reset() { *m = Cost_CommitCost{} } +func (m *Cost_CommitCost) String() string { return proto.CompactTextString(m) } +func (*Cost_CommitCost) ProtoMessage() {} +func (*Cost_CommitCost) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{20, 0} +} +func (m *Cost_CommitCost) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cost_CommitCost.Unmarshal(m, b) +} +func (m *Cost_CommitCost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cost_CommitCost.Marshal(b, m, deterministic) +} +func (dst *Cost_CommitCost) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cost_CommitCost.Merge(dst, src) +} +func (m *Cost_CommitCost) XXX_Size() int { + return xxx_messageInfo_Cost_CommitCost.Size(m) +} +func (m *Cost_CommitCost) XXX_DiscardUnknown() { + xxx_messageInfo_Cost_CommitCost.DiscardUnknown(m) +} + +var xxx_messageInfo_Cost_CommitCost proto.InternalMessageInfo + +func (m *Cost_CommitCost) GetRequestedEntityPuts() int32 { + if m != nil && m.RequestedEntityPuts != nil { + return *m.RequestedEntityPuts + } + return 0 +} + +func (m *Cost_CommitCost) GetRequestedEntityDeletes() int32 { + if m != nil && m.RequestedEntityDeletes != nil { + return *m.RequestedEntityDeletes + } + return 0 +} + +type GetRequest struct { + Header *InternalHeader `protobuf:"bytes,6,opt,name=header" json:"header,omitempty"` + Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"` + Transaction *Transaction `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` + FailoverMs *int64 `protobuf:"varint,3,opt,name=failover_ms,json=failoverMs" json:"failover_ms,omitempty"` + Strong *bool `protobuf:"varint,4,opt,name=strong" json:"strong,omitempty"` + AllowDeferred *bool `protobuf:"varint,5,opt,name=allow_deferred,json=allowDeferred,def=0" json:"allow_deferred,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetRequest) Reset() { *m = GetRequest{} } +func (m *GetRequest) String() string { return proto.CompactTextString(m) } +func (*GetRequest) ProtoMessage() {} +func (*GetRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{21} +} +func (m *GetRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetRequest.Unmarshal(m, b) +} +func (m *GetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetRequest.Marshal(b, m, deterministic) +} +func (dst *GetRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetRequest.Merge(dst, src) +} +func (m *GetRequest) XXX_Size() int { + return xxx_messageInfo_GetRequest.Size(m) +} +func (m *GetRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetRequest proto.InternalMessageInfo + +const Default_GetRequest_AllowDeferred bool = false + +func (m *GetRequest) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *GetRequest) GetKey() []*Reference { + if m != nil { + return m.Key + } + return nil +} + +func (m *GetRequest) GetTransaction() *Transaction { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *GetRequest) GetFailoverMs() int64 { + if m != nil && m.FailoverMs != nil { + return *m.FailoverMs + } + return 0 +} + +func (m *GetRequest) GetStrong() bool { + if m != nil && m.Strong != nil { + return *m.Strong + } + return false +} + +func (m *GetRequest) GetAllowDeferred() bool { + if m != nil && m.AllowDeferred != nil { + return *m.AllowDeferred + } + return Default_GetRequest_AllowDeferred +} + +type GetResponse struct { + Entity []*GetResponse_Entity `protobuf:"group,1,rep,name=Entity,json=entity" json:"entity,omitempty"` + Deferred []*Reference `protobuf:"bytes,5,rep,name=deferred" json:"deferred,omitempty"` + InOrder *bool `protobuf:"varint,6,opt,name=in_order,json=inOrder,def=1" json:"in_order,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetResponse) Reset() { *m = GetResponse{} } +func (m *GetResponse) String() string { return proto.CompactTextString(m) } +func (*GetResponse) ProtoMessage() {} +func (*GetResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{22} +} +func (m *GetResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetResponse.Unmarshal(m, b) +} +func (m *GetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetResponse.Marshal(b, m, deterministic) +} +func (dst *GetResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetResponse.Merge(dst, src) +} +func (m *GetResponse) XXX_Size() int { + return xxx_messageInfo_GetResponse.Size(m) +} +func (m *GetResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetResponse proto.InternalMessageInfo + +const Default_GetResponse_InOrder bool = true + +func (m *GetResponse) GetEntity() []*GetResponse_Entity { + if m != nil { + return m.Entity + } + return nil +} + +func (m *GetResponse) GetDeferred() []*Reference { + if m != nil { + return m.Deferred + } + return nil +} + +func (m *GetResponse) GetInOrder() bool { + if m != nil && m.InOrder != nil { + return *m.InOrder + } + return Default_GetResponse_InOrder +} + +type GetResponse_Entity struct { + Entity *EntityProto `protobuf:"bytes,2,opt,name=entity" json:"entity,omitempty"` + Key *Reference `protobuf:"bytes,4,opt,name=key" json:"key,omitempty"` + Version *int64 `protobuf:"varint,3,opt,name=version" json:"version,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetResponse_Entity) Reset() { *m = GetResponse_Entity{} } +func (m *GetResponse_Entity) String() string { return proto.CompactTextString(m) } +func (*GetResponse_Entity) ProtoMessage() {} +func (*GetResponse_Entity) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{22, 0} +} +func (m *GetResponse_Entity) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetResponse_Entity.Unmarshal(m, b) +} +func (m *GetResponse_Entity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetResponse_Entity.Marshal(b, m, deterministic) +} +func (dst *GetResponse_Entity) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetResponse_Entity.Merge(dst, src) +} +func (m *GetResponse_Entity) XXX_Size() int { + return xxx_messageInfo_GetResponse_Entity.Size(m) +} +func (m *GetResponse_Entity) XXX_DiscardUnknown() { + xxx_messageInfo_GetResponse_Entity.DiscardUnknown(m) +} + +var xxx_messageInfo_GetResponse_Entity proto.InternalMessageInfo + +func (m *GetResponse_Entity) GetEntity() *EntityProto { + if m != nil { + return m.Entity + } + return nil +} + +func (m *GetResponse_Entity) GetKey() *Reference { + if m != nil { + return m.Key + } + return nil +} + +func (m *GetResponse_Entity) GetVersion() int64 { + if m != nil && m.Version != nil { + return *m.Version + } + return 0 +} + +type PutRequest struct { + Header *InternalHeader `protobuf:"bytes,11,opt,name=header" json:"header,omitempty"` + Entity []*EntityProto `protobuf:"bytes,1,rep,name=entity" json:"entity,omitempty"` + Transaction *Transaction `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"` + CompositeIndex []*CompositeIndex `protobuf:"bytes,3,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"` + Trusted *bool `protobuf:"varint,4,opt,name=trusted,def=0" json:"trusted,omitempty"` + Force *bool `protobuf:"varint,7,opt,name=force,def=0" json:"force,omitempty"` + MarkChanges *bool `protobuf:"varint,8,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"` + Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"` + AutoIdPolicy *PutRequest_AutoIdPolicy `protobuf:"varint,10,opt,name=auto_id_policy,json=autoIdPolicy,enum=appengine.PutRequest_AutoIdPolicy,def=0" json:"auto_id_policy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PutRequest) Reset() { *m = PutRequest{} } +func (m *PutRequest) String() string { return proto.CompactTextString(m) } +func (*PutRequest) ProtoMessage() {} +func (*PutRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{23} +} +func (m *PutRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PutRequest.Unmarshal(m, b) +} +func (m *PutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PutRequest.Marshal(b, m, deterministic) +} +func (dst *PutRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_PutRequest.Merge(dst, src) +} +func (m *PutRequest) XXX_Size() int { + return xxx_messageInfo_PutRequest.Size(m) +} +func (m *PutRequest) XXX_DiscardUnknown() { + xxx_messageInfo_PutRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_PutRequest proto.InternalMessageInfo + +const Default_PutRequest_Trusted bool = false +const Default_PutRequest_Force bool = false +const Default_PutRequest_MarkChanges bool = false +const Default_PutRequest_AutoIdPolicy PutRequest_AutoIdPolicy = PutRequest_CURRENT + +func (m *PutRequest) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *PutRequest) GetEntity() []*EntityProto { + if m != nil { + return m.Entity + } + return nil +} + +func (m *PutRequest) GetTransaction() *Transaction { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *PutRequest) GetCompositeIndex() []*CompositeIndex { + if m != nil { + return m.CompositeIndex + } + return nil +} + +func (m *PutRequest) GetTrusted() bool { + if m != nil && m.Trusted != nil { + return *m.Trusted + } + return Default_PutRequest_Trusted +} + +func (m *PutRequest) GetForce() bool { + if m != nil && m.Force != nil { + return *m.Force + } + return Default_PutRequest_Force +} + +func (m *PutRequest) GetMarkChanges() bool { + if m != nil && m.MarkChanges != nil { + return *m.MarkChanges + } + return Default_PutRequest_MarkChanges +} + +func (m *PutRequest) GetSnapshot() []*Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +func (m *PutRequest) GetAutoIdPolicy() PutRequest_AutoIdPolicy { + if m != nil && m.AutoIdPolicy != nil { + return *m.AutoIdPolicy + } + return Default_PutRequest_AutoIdPolicy +} + +type PutResponse struct { + Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"` + Cost *Cost `protobuf:"bytes,2,opt,name=cost" json:"cost,omitempty"` + Version []int64 `protobuf:"varint,3,rep,name=version" json:"version,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PutResponse) Reset() { *m = PutResponse{} } +func (m *PutResponse) String() string { return proto.CompactTextString(m) } +func (*PutResponse) ProtoMessage() {} +func (*PutResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{24} +} +func (m *PutResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PutResponse.Unmarshal(m, b) +} +func (m *PutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PutResponse.Marshal(b, m, deterministic) +} +func (dst *PutResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_PutResponse.Merge(dst, src) +} +func (m *PutResponse) XXX_Size() int { + return xxx_messageInfo_PutResponse.Size(m) +} +func (m *PutResponse) XXX_DiscardUnknown() { + xxx_messageInfo_PutResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_PutResponse proto.InternalMessageInfo + +func (m *PutResponse) GetKey() []*Reference { + if m != nil { + return m.Key + } + return nil +} + +func (m *PutResponse) GetCost() *Cost { + if m != nil { + return m.Cost + } + return nil +} + +func (m *PutResponse) GetVersion() []int64 { + if m != nil { + return m.Version + } + return nil +} + +type TouchRequest struct { + Header *InternalHeader `protobuf:"bytes,10,opt,name=header" json:"header,omitempty"` + Key []*Reference `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"` + CompositeIndex []*CompositeIndex `protobuf:"bytes,2,rep,name=composite_index,json=compositeIndex" json:"composite_index,omitempty"` + Force *bool `protobuf:"varint,3,opt,name=force,def=0" json:"force,omitempty"` + Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TouchRequest) Reset() { *m = TouchRequest{} } +func (m *TouchRequest) String() string { return proto.CompactTextString(m) } +func (*TouchRequest) ProtoMessage() {} +func (*TouchRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{25} +} +func (m *TouchRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TouchRequest.Unmarshal(m, b) +} +func (m *TouchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TouchRequest.Marshal(b, m, deterministic) +} +func (dst *TouchRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_TouchRequest.Merge(dst, src) +} +func (m *TouchRequest) XXX_Size() int { + return xxx_messageInfo_TouchRequest.Size(m) +} +func (m *TouchRequest) XXX_DiscardUnknown() { + xxx_messageInfo_TouchRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_TouchRequest proto.InternalMessageInfo + +const Default_TouchRequest_Force bool = false + +func (m *TouchRequest) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *TouchRequest) GetKey() []*Reference { + if m != nil { + return m.Key + } + return nil +} + +func (m *TouchRequest) GetCompositeIndex() []*CompositeIndex { + if m != nil { + return m.CompositeIndex + } + return nil +} + +func (m *TouchRequest) GetForce() bool { + if m != nil && m.Force != nil { + return *m.Force + } + return Default_TouchRequest_Force +} + +func (m *TouchRequest) GetSnapshot() []*Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +type TouchResponse struct { + Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *TouchResponse) Reset() { *m = TouchResponse{} } +func (m *TouchResponse) String() string { return proto.CompactTextString(m) } +func (*TouchResponse) ProtoMessage() {} +func (*TouchResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{26} +} +func (m *TouchResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_TouchResponse.Unmarshal(m, b) +} +func (m *TouchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_TouchResponse.Marshal(b, m, deterministic) +} +func (dst *TouchResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_TouchResponse.Merge(dst, src) +} +func (m *TouchResponse) XXX_Size() int { + return xxx_messageInfo_TouchResponse.Size(m) +} +func (m *TouchResponse) XXX_DiscardUnknown() { + xxx_messageInfo_TouchResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_TouchResponse proto.InternalMessageInfo + +func (m *TouchResponse) GetCost() *Cost { + if m != nil { + return m.Cost + } + return nil +} + +type DeleteRequest struct { + Header *InternalHeader `protobuf:"bytes,10,opt,name=header" json:"header,omitempty"` + Key []*Reference `protobuf:"bytes,6,rep,name=key" json:"key,omitempty"` + Transaction *Transaction `protobuf:"bytes,5,opt,name=transaction" json:"transaction,omitempty"` + Trusted *bool `protobuf:"varint,4,opt,name=trusted,def=0" json:"trusted,omitempty"` + Force *bool `protobuf:"varint,7,opt,name=force,def=0" json:"force,omitempty"` + MarkChanges *bool `protobuf:"varint,8,opt,name=mark_changes,json=markChanges,def=0" json:"mark_changes,omitempty"` + Snapshot []*Snapshot `protobuf:"bytes,9,rep,name=snapshot" json:"snapshot,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteRequest) Reset() { *m = DeleteRequest{} } +func (m *DeleteRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteRequest) ProtoMessage() {} +func (*DeleteRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{27} +} +func (m *DeleteRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteRequest.Unmarshal(m, b) +} +func (m *DeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteRequest.Marshal(b, m, deterministic) +} +func (dst *DeleteRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteRequest.Merge(dst, src) +} +func (m *DeleteRequest) XXX_Size() int { + return xxx_messageInfo_DeleteRequest.Size(m) +} +func (m *DeleteRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteRequest proto.InternalMessageInfo + +const Default_DeleteRequest_Trusted bool = false +const Default_DeleteRequest_Force bool = false +const Default_DeleteRequest_MarkChanges bool = false + +func (m *DeleteRequest) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *DeleteRequest) GetKey() []*Reference { + if m != nil { + return m.Key + } + return nil +} + +func (m *DeleteRequest) GetTransaction() *Transaction { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *DeleteRequest) GetTrusted() bool { + if m != nil && m.Trusted != nil { + return *m.Trusted + } + return Default_DeleteRequest_Trusted +} + +func (m *DeleteRequest) GetForce() bool { + if m != nil && m.Force != nil { + return *m.Force + } + return Default_DeleteRequest_Force +} + +func (m *DeleteRequest) GetMarkChanges() bool { + if m != nil && m.MarkChanges != nil { + return *m.MarkChanges + } + return Default_DeleteRequest_MarkChanges +} + +func (m *DeleteRequest) GetSnapshot() []*Snapshot { + if m != nil { + return m.Snapshot + } + return nil +} + +type DeleteResponse struct { + Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"` + Version []int64 `protobuf:"varint,3,rep,name=version" json:"version,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeleteResponse) Reset() { *m = DeleteResponse{} } +func (m *DeleteResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteResponse) ProtoMessage() {} +func (*DeleteResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{28} +} +func (m *DeleteResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeleteResponse.Unmarshal(m, b) +} +func (m *DeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeleteResponse.Marshal(b, m, deterministic) +} +func (dst *DeleteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeleteResponse.Merge(dst, src) +} +func (m *DeleteResponse) XXX_Size() int { + return xxx_messageInfo_DeleteResponse.Size(m) +} +func (m *DeleteResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DeleteResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DeleteResponse proto.InternalMessageInfo + +func (m *DeleteResponse) GetCost() *Cost { + if m != nil { + return m.Cost + } + return nil +} + +func (m *DeleteResponse) GetVersion() []int64 { + if m != nil { + return m.Version + } + return nil +} + +type NextRequest struct { + Header *InternalHeader `protobuf:"bytes,5,opt,name=header" json:"header,omitempty"` + Cursor *Cursor `protobuf:"bytes,1,req,name=cursor" json:"cursor,omitempty"` + Count *int32 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"` + Offset *int32 `protobuf:"varint,4,opt,name=offset,def=0" json:"offset,omitempty"` + Compile *bool `protobuf:"varint,3,opt,name=compile,def=0" json:"compile,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *NextRequest) Reset() { *m = NextRequest{} } +func (m *NextRequest) String() string { return proto.CompactTextString(m) } +func (*NextRequest) ProtoMessage() {} +func (*NextRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{29} +} +func (m *NextRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_NextRequest.Unmarshal(m, b) +} +func (m *NextRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_NextRequest.Marshal(b, m, deterministic) +} +func (dst *NextRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_NextRequest.Merge(dst, src) +} +func (m *NextRequest) XXX_Size() int { + return xxx_messageInfo_NextRequest.Size(m) +} +func (m *NextRequest) XXX_DiscardUnknown() { + xxx_messageInfo_NextRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_NextRequest proto.InternalMessageInfo + +const Default_NextRequest_Offset int32 = 0 +const Default_NextRequest_Compile bool = false + +func (m *NextRequest) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *NextRequest) GetCursor() *Cursor { + if m != nil { + return m.Cursor + } + return nil +} + +func (m *NextRequest) GetCount() int32 { + if m != nil && m.Count != nil { + return *m.Count + } + return 0 +} + +func (m *NextRequest) GetOffset() int32 { + if m != nil && m.Offset != nil { + return *m.Offset + } + return Default_NextRequest_Offset +} + +func (m *NextRequest) GetCompile() bool { + if m != nil && m.Compile != nil { + return *m.Compile + } + return Default_NextRequest_Compile +} + +type QueryResult struct { + Cursor *Cursor `protobuf:"bytes,1,opt,name=cursor" json:"cursor,omitempty"` + Result []*EntityProto `protobuf:"bytes,2,rep,name=result" json:"result,omitempty"` + SkippedResults *int32 `protobuf:"varint,7,opt,name=skipped_results,json=skippedResults" json:"skipped_results,omitempty"` + MoreResults *bool `protobuf:"varint,3,req,name=more_results,json=moreResults" json:"more_results,omitempty"` + KeysOnly *bool `protobuf:"varint,4,opt,name=keys_only,json=keysOnly" json:"keys_only,omitempty"` + IndexOnly *bool `protobuf:"varint,9,opt,name=index_only,json=indexOnly" json:"index_only,omitempty"` + SmallOps *bool `protobuf:"varint,10,opt,name=small_ops,json=smallOps" json:"small_ops,omitempty"` + CompiledQuery *CompiledQuery `protobuf:"bytes,5,opt,name=compiled_query,json=compiledQuery" json:"compiled_query,omitempty"` + CompiledCursor *CompiledCursor `protobuf:"bytes,6,opt,name=compiled_cursor,json=compiledCursor" json:"compiled_cursor,omitempty"` + Index []*CompositeIndex `protobuf:"bytes,8,rep,name=index" json:"index,omitempty"` + Version []int64 `protobuf:"varint,11,rep,name=version" json:"version,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *QueryResult) Reset() { *m = QueryResult{} } +func (m *QueryResult) String() string { return proto.CompactTextString(m) } +func (*QueryResult) ProtoMessage() {} +func (*QueryResult) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{30} +} +func (m *QueryResult) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_QueryResult.Unmarshal(m, b) +} +func (m *QueryResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_QueryResult.Marshal(b, m, deterministic) +} +func (dst *QueryResult) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryResult.Merge(dst, src) +} +func (m *QueryResult) XXX_Size() int { + return xxx_messageInfo_QueryResult.Size(m) +} +func (m *QueryResult) XXX_DiscardUnknown() { + xxx_messageInfo_QueryResult.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryResult proto.InternalMessageInfo + +func (m *QueryResult) GetCursor() *Cursor { + if m != nil { + return m.Cursor + } + return nil +} + +func (m *QueryResult) GetResult() []*EntityProto { + if m != nil { + return m.Result + } + return nil +} + +func (m *QueryResult) GetSkippedResults() int32 { + if m != nil && m.SkippedResults != nil { + return *m.SkippedResults + } + return 0 +} + +func (m *QueryResult) GetMoreResults() bool { + if m != nil && m.MoreResults != nil { + return *m.MoreResults + } + return false +} + +func (m *QueryResult) GetKeysOnly() bool { + if m != nil && m.KeysOnly != nil { + return *m.KeysOnly + } + return false +} + +func (m *QueryResult) GetIndexOnly() bool { + if m != nil && m.IndexOnly != nil { + return *m.IndexOnly + } + return false +} + +func (m *QueryResult) GetSmallOps() bool { + if m != nil && m.SmallOps != nil { + return *m.SmallOps + } + return false +} + +func (m *QueryResult) GetCompiledQuery() *CompiledQuery { + if m != nil { + return m.CompiledQuery + } + return nil +} + +func (m *QueryResult) GetCompiledCursor() *CompiledCursor { + if m != nil { + return m.CompiledCursor + } + return nil +} + +func (m *QueryResult) GetIndex() []*CompositeIndex { + if m != nil { + return m.Index + } + return nil +} + +func (m *QueryResult) GetVersion() []int64 { + if m != nil { + return m.Version + } + return nil +} + +type AllocateIdsRequest struct { + Header *InternalHeader `protobuf:"bytes,4,opt,name=header" json:"header,omitempty"` + ModelKey *Reference `protobuf:"bytes,1,opt,name=model_key,json=modelKey" json:"model_key,omitempty"` + Size *int64 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"` + Max *int64 `protobuf:"varint,3,opt,name=max" json:"max,omitempty"` + Reserve []*Reference `protobuf:"bytes,5,rep,name=reserve" json:"reserve,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AllocateIdsRequest) Reset() { *m = AllocateIdsRequest{} } +func (m *AllocateIdsRequest) String() string { return proto.CompactTextString(m) } +func (*AllocateIdsRequest) ProtoMessage() {} +func (*AllocateIdsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{31} +} +func (m *AllocateIdsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AllocateIdsRequest.Unmarshal(m, b) +} +func (m *AllocateIdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AllocateIdsRequest.Marshal(b, m, deterministic) +} +func (dst *AllocateIdsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllocateIdsRequest.Merge(dst, src) +} +func (m *AllocateIdsRequest) XXX_Size() int { + return xxx_messageInfo_AllocateIdsRequest.Size(m) +} +func (m *AllocateIdsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AllocateIdsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AllocateIdsRequest proto.InternalMessageInfo + +func (m *AllocateIdsRequest) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *AllocateIdsRequest) GetModelKey() *Reference { + if m != nil { + return m.ModelKey + } + return nil +} + +func (m *AllocateIdsRequest) GetSize() int64 { + if m != nil && m.Size != nil { + return *m.Size + } + return 0 +} + +func (m *AllocateIdsRequest) GetMax() int64 { + if m != nil && m.Max != nil { + return *m.Max + } + return 0 +} + +func (m *AllocateIdsRequest) GetReserve() []*Reference { + if m != nil { + return m.Reserve + } + return nil +} + +type AllocateIdsResponse struct { + Start *int64 `protobuf:"varint,1,req,name=start" json:"start,omitempty"` + End *int64 `protobuf:"varint,2,req,name=end" json:"end,omitempty"` + Cost *Cost `protobuf:"bytes,3,opt,name=cost" json:"cost,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AllocateIdsResponse) Reset() { *m = AllocateIdsResponse{} } +func (m *AllocateIdsResponse) String() string { return proto.CompactTextString(m) } +func (*AllocateIdsResponse) ProtoMessage() {} +func (*AllocateIdsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{32} +} +func (m *AllocateIdsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AllocateIdsResponse.Unmarshal(m, b) +} +func (m *AllocateIdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AllocateIdsResponse.Marshal(b, m, deterministic) +} +func (dst *AllocateIdsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AllocateIdsResponse.Merge(dst, src) +} +func (m *AllocateIdsResponse) XXX_Size() int { + return xxx_messageInfo_AllocateIdsResponse.Size(m) +} +func (m *AllocateIdsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AllocateIdsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AllocateIdsResponse proto.InternalMessageInfo + +func (m *AllocateIdsResponse) GetStart() int64 { + if m != nil && m.Start != nil { + return *m.Start + } + return 0 +} + +func (m *AllocateIdsResponse) GetEnd() int64 { + if m != nil && m.End != nil { + return *m.End + } + return 0 +} + +func (m *AllocateIdsResponse) GetCost() *Cost { + if m != nil { + return m.Cost + } + return nil +} + +type CompositeIndices struct { + Index []*CompositeIndex `protobuf:"bytes,1,rep,name=index" json:"index,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CompositeIndices) Reset() { *m = CompositeIndices{} } +func (m *CompositeIndices) String() string { return proto.CompactTextString(m) } +func (*CompositeIndices) ProtoMessage() {} +func (*CompositeIndices) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{33} +} +func (m *CompositeIndices) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CompositeIndices.Unmarshal(m, b) +} +func (m *CompositeIndices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CompositeIndices.Marshal(b, m, deterministic) +} +func (dst *CompositeIndices) XXX_Merge(src proto.Message) { + xxx_messageInfo_CompositeIndices.Merge(dst, src) +} +func (m *CompositeIndices) XXX_Size() int { + return xxx_messageInfo_CompositeIndices.Size(m) +} +func (m *CompositeIndices) XXX_DiscardUnknown() { + xxx_messageInfo_CompositeIndices.DiscardUnknown(m) +} + +var xxx_messageInfo_CompositeIndices proto.InternalMessageInfo + +func (m *CompositeIndices) GetIndex() []*CompositeIndex { + if m != nil { + return m.Index + } + return nil +} + +type AddActionsRequest struct { + Header *InternalHeader `protobuf:"bytes,3,opt,name=header" json:"header,omitempty"` + Transaction *Transaction `protobuf:"bytes,1,req,name=transaction" json:"transaction,omitempty"` + Action []*Action `protobuf:"bytes,2,rep,name=action" json:"action,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AddActionsRequest) Reset() { *m = AddActionsRequest{} } +func (m *AddActionsRequest) String() string { return proto.CompactTextString(m) } +func (*AddActionsRequest) ProtoMessage() {} +func (*AddActionsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{34} +} +func (m *AddActionsRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AddActionsRequest.Unmarshal(m, b) +} +func (m *AddActionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AddActionsRequest.Marshal(b, m, deterministic) +} +func (dst *AddActionsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddActionsRequest.Merge(dst, src) +} +func (m *AddActionsRequest) XXX_Size() int { + return xxx_messageInfo_AddActionsRequest.Size(m) +} +func (m *AddActionsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AddActionsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AddActionsRequest proto.InternalMessageInfo + +func (m *AddActionsRequest) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *AddActionsRequest) GetTransaction() *Transaction { + if m != nil { + return m.Transaction + } + return nil +} + +func (m *AddActionsRequest) GetAction() []*Action { + if m != nil { + return m.Action + } + return nil +} + +type AddActionsResponse struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AddActionsResponse) Reset() { *m = AddActionsResponse{} } +func (m *AddActionsResponse) String() string { return proto.CompactTextString(m) } +func (*AddActionsResponse) ProtoMessage() {} +func (*AddActionsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{35} +} +func (m *AddActionsResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AddActionsResponse.Unmarshal(m, b) +} +func (m *AddActionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AddActionsResponse.Marshal(b, m, deterministic) +} +func (dst *AddActionsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddActionsResponse.Merge(dst, src) +} +func (m *AddActionsResponse) XXX_Size() int { + return xxx_messageInfo_AddActionsResponse.Size(m) +} +func (m *AddActionsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_AddActionsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_AddActionsResponse proto.InternalMessageInfo + +type BeginTransactionRequest struct { + Header *InternalHeader `protobuf:"bytes,3,opt,name=header" json:"header,omitempty"` + App *string `protobuf:"bytes,1,req,name=app" json:"app,omitempty"` + AllowMultipleEg *bool `protobuf:"varint,2,opt,name=allow_multiple_eg,json=allowMultipleEg,def=0" json:"allow_multiple_eg,omitempty"` + DatabaseId *string `protobuf:"bytes,4,opt,name=database_id,json=databaseId" json:"database_id,omitempty"` + Mode *BeginTransactionRequest_TransactionMode `protobuf:"varint,5,opt,name=mode,enum=appengine.BeginTransactionRequest_TransactionMode,def=0" json:"mode,omitempty"` + PreviousTransaction *Transaction `protobuf:"bytes,7,opt,name=previous_transaction,json=previousTransaction" json:"previous_transaction,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} } +func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) } +func (*BeginTransactionRequest) ProtoMessage() {} +func (*BeginTransactionRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{36} +} +func (m *BeginTransactionRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BeginTransactionRequest.Unmarshal(m, b) +} +func (m *BeginTransactionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BeginTransactionRequest.Marshal(b, m, deterministic) +} +func (dst *BeginTransactionRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_BeginTransactionRequest.Merge(dst, src) +} +func (m *BeginTransactionRequest) XXX_Size() int { + return xxx_messageInfo_BeginTransactionRequest.Size(m) +} +func (m *BeginTransactionRequest) XXX_DiscardUnknown() { + xxx_messageInfo_BeginTransactionRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_BeginTransactionRequest proto.InternalMessageInfo + +const Default_BeginTransactionRequest_AllowMultipleEg bool = false +const Default_BeginTransactionRequest_Mode BeginTransactionRequest_TransactionMode = BeginTransactionRequest_UNKNOWN + +func (m *BeginTransactionRequest) GetHeader() *InternalHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *BeginTransactionRequest) GetApp() string { + if m != nil && m.App != nil { + return *m.App + } + return "" +} + +func (m *BeginTransactionRequest) GetAllowMultipleEg() bool { + if m != nil && m.AllowMultipleEg != nil { + return *m.AllowMultipleEg + } + return Default_BeginTransactionRequest_AllowMultipleEg +} + +func (m *BeginTransactionRequest) GetDatabaseId() string { + if m != nil && m.DatabaseId != nil { + return *m.DatabaseId + } + return "" +} + +func (m *BeginTransactionRequest) GetMode() BeginTransactionRequest_TransactionMode { + if m != nil && m.Mode != nil { + return *m.Mode + } + return Default_BeginTransactionRequest_Mode +} + +func (m *BeginTransactionRequest) GetPreviousTransaction() *Transaction { + if m != nil { + return m.PreviousTransaction + } + return nil +} + +type CommitResponse struct { + Cost *Cost `protobuf:"bytes,1,opt,name=cost" json:"cost,omitempty"` + Version []*CommitResponse_Version `protobuf:"group,3,rep,name=Version,json=version" json:"version,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CommitResponse) Reset() { *m = CommitResponse{} } +func (m *CommitResponse) String() string { return proto.CompactTextString(m) } +func (*CommitResponse) ProtoMessage() {} +func (*CommitResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{37} +} +func (m *CommitResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CommitResponse.Unmarshal(m, b) +} +func (m *CommitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CommitResponse.Marshal(b, m, deterministic) +} +func (dst *CommitResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommitResponse.Merge(dst, src) +} +func (m *CommitResponse) XXX_Size() int { + return xxx_messageInfo_CommitResponse.Size(m) +} +func (m *CommitResponse) XXX_DiscardUnknown() { + xxx_messageInfo_CommitResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_CommitResponse proto.InternalMessageInfo + +func (m *CommitResponse) GetCost() *Cost { + if m != nil { + return m.Cost + } + return nil +} + +func (m *CommitResponse) GetVersion() []*CommitResponse_Version { + if m != nil { + return m.Version + } + return nil +} + +type CommitResponse_Version struct { + RootEntityKey *Reference `protobuf:"bytes,4,req,name=root_entity_key,json=rootEntityKey" json:"root_entity_key,omitempty"` + Version *int64 `protobuf:"varint,5,req,name=version" json:"version,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CommitResponse_Version) Reset() { *m = CommitResponse_Version{} } +func (m *CommitResponse_Version) String() string { return proto.CompactTextString(m) } +func (*CommitResponse_Version) ProtoMessage() {} +func (*CommitResponse_Version) Descriptor() ([]byte, []int) { + return fileDescriptor_datastore_v3_83b17b80c34f6179, []int{37, 0} +} +func (m *CommitResponse_Version) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CommitResponse_Version.Unmarshal(m, b) +} +func (m *CommitResponse_Version) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CommitResponse_Version.Marshal(b, m, deterministic) +} +func (dst *CommitResponse_Version) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommitResponse_Version.Merge(dst, src) +} +func (m *CommitResponse_Version) XXX_Size() int { + return xxx_messageInfo_CommitResponse_Version.Size(m) +} +func (m *CommitResponse_Version) XXX_DiscardUnknown() { + xxx_messageInfo_CommitResponse_Version.DiscardUnknown(m) +} + +var xxx_messageInfo_CommitResponse_Version proto.InternalMessageInfo + +func (m *CommitResponse_Version) GetRootEntityKey() *Reference { + if m != nil { + return m.RootEntityKey + } + return nil +} + +func (m *CommitResponse_Version) GetVersion() int64 { + if m != nil && m.Version != nil { + return *m.Version + } + return 0 +} + +func init() { + proto.RegisterType((*Action)(nil), "appengine.Action") + proto.RegisterType((*PropertyValue)(nil), "appengine.PropertyValue") + proto.RegisterType((*PropertyValue_PointValue)(nil), "appengine.PropertyValue.PointValue") + proto.RegisterType((*PropertyValue_UserValue)(nil), "appengine.PropertyValue.UserValue") + proto.RegisterType((*PropertyValue_ReferenceValue)(nil), "appengine.PropertyValue.ReferenceValue") + proto.RegisterType((*PropertyValue_ReferenceValue_PathElement)(nil), "appengine.PropertyValue.ReferenceValue.PathElement") + proto.RegisterType((*Property)(nil), "appengine.Property") + proto.RegisterType((*Path)(nil), "appengine.Path") + proto.RegisterType((*Path_Element)(nil), "appengine.Path.Element") + proto.RegisterType((*Reference)(nil), "appengine.Reference") + proto.RegisterType((*User)(nil), "appengine.User") + proto.RegisterType((*EntityProto)(nil), "appengine.EntityProto") + proto.RegisterType((*CompositeProperty)(nil), "appengine.CompositeProperty") + proto.RegisterType((*Index)(nil), "appengine.Index") + proto.RegisterType((*Index_Property)(nil), "appengine.Index.Property") + proto.RegisterType((*CompositeIndex)(nil), "appengine.CompositeIndex") + proto.RegisterType((*IndexPostfix)(nil), "appengine.IndexPostfix") + proto.RegisterType((*IndexPostfix_IndexValue)(nil), "appengine.IndexPostfix.IndexValue") + proto.RegisterType((*IndexPosition)(nil), "appengine.IndexPosition") + proto.RegisterType((*Snapshot)(nil), "appengine.Snapshot") + proto.RegisterType((*InternalHeader)(nil), "appengine.InternalHeader") + proto.RegisterType((*Transaction)(nil), "appengine.Transaction") + proto.RegisterType((*Query)(nil), "appengine.Query") + proto.RegisterType((*Query_Filter)(nil), "appengine.Query.Filter") + proto.RegisterType((*Query_Order)(nil), "appengine.Query.Order") + proto.RegisterType((*CompiledQuery)(nil), "appengine.CompiledQuery") + proto.RegisterType((*CompiledQuery_PrimaryScan)(nil), "appengine.CompiledQuery.PrimaryScan") + proto.RegisterType((*CompiledQuery_MergeJoinScan)(nil), "appengine.CompiledQuery.MergeJoinScan") + proto.RegisterType((*CompiledQuery_EntityFilter)(nil), "appengine.CompiledQuery.EntityFilter") + proto.RegisterType((*CompiledCursor)(nil), "appengine.CompiledCursor") + proto.RegisterType((*CompiledCursor_Position)(nil), "appengine.CompiledCursor.Position") + proto.RegisterType((*CompiledCursor_Position_IndexValue)(nil), "appengine.CompiledCursor.Position.IndexValue") + proto.RegisterType((*Cursor)(nil), "appengine.Cursor") + proto.RegisterType((*Error)(nil), "appengine.Error") + proto.RegisterType((*Cost)(nil), "appengine.Cost") + proto.RegisterType((*Cost_CommitCost)(nil), "appengine.Cost.CommitCost") + proto.RegisterType((*GetRequest)(nil), "appengine.GetRequest") + proto.RegisterType((*GetResponse)(nil), "appengine.GetResponse") + proto.RegisterType((*GetResponse_Entity)(nil), "appengine.GetResponse.Entity") + proto.RegisterType((*PutRequest)(nil), "appengine.PutRequest") + proto.RegisterType((*PutResponse)(nil), "appengine.PutResponse") + proto.RegisterType((*TouchRequest)(nil), "appengine.TouchRequest") + proto.RegisterType((*TouchResponse)(nil), "appengine.TouchResponse") + proto.RegisterType((*DeleteRequest)(nil), "appengine.DeleteRequest") + proto.RegisterType((*DeleteResponse)(nil), "appengine.DeleteResponse") + proto.RegisterType((*NextRequest)(nil), "appengine.NextRequest") + proto.RegisterType((*QueryResult)(nil), "appengine.QueryResult") + proto.RegisterType((*AllocateIdsRequest)(nil), "appengine.AllocateIdsRequest") + proto.RegisterType((*AllocateIdsResponse)(nil), "appengine.AllocateIdsResponse") + proto.RegisterType((*CompositeIndices)(nil), "appengine.CompositeIndices") + proto.RegisterType((*AddActionsRequest)(nil), "appengine.AddActionsRequest") + proto.RegisterType((*AddActionsResponse)(nil), "appengine.AddActionsResponse") + proto.RegisterType((*BeginTransactionRequest)(nil), "appengine.BeginTransactionRequest") + proto.RegisterType((*CommitResponse)(nil), "appengine.CommitResponse") + proto.RegisterType((*CommitResponse_Version)(nil), "appengine.CommitResponse.Version") +} + +func init() { + proto.RegisterFile("google.golang.org/appengine/internal/datastore/datastore_v3.proto", fileDescriptor_datastore_v3_83b17b80c34f6179) +} + +var fileDescriptor_datastore_v3_83b17b80c34f6179 = []byte{ + // 4156 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0xe3, 0x46, + 0x76, 0x37, 0xc1, 0xef, 0x47, 0x89, 0x82, 0x5a, 0xf3, 0xc1, 0xa1, 0x3f, 0x46, 0xc6, 0xac, 0x6d, + 0xd9, 0x6b, 0x73, 0x6c, 0xf9, 0x23, 0x5b, 0x4a, 0x76, 0x1d, 0x4a, 0xc4, 0x68, 0x90, 0xa1, 0x48, + 0xb9, 0x09, 0xd9, 0x9e, 0x5c, 0x50, 0x18, 0xa2, 0x29, 0x21, 0x43, 0x02, 0x30, 0x00, 0x6a, 0x46, + 0x93, 0xe4, 0x90, 0x4b, 0x2a, 0x55, 0x5b, 0xa9, 0x1c, 0x92, 0x4a, 0x25, 0xf9, 0x07, 0x72, 0xc8, + 0x39, 0x95, 0xaa, 0x54, 0xf6, 0x98, 0x5b, 0x0e, 0x7b, 0xc9, 0x31, 0x95, 0x73, 0xf2, 0x27, 0x24, + 0x39, 0xa4, 0xfa, 0x75, 0x03, 0x02, 0x28, 0x4a, 0x23, 0x6d, 0xf6, 0x90, 0x13, 0xd1, 0xef, 0xfd, + 0xba, 0xf1, 0xfa, 0xf5, 0xfb, 0x6c, 0x10, 0xba, 0xc7, 0xbe, 0x7f, 0x3c, 0x65, 0x9d, 0x63, 0x7f, + 0x6a, 0x7b, 0xc7, 0x1d, 0x3f, 0x3c, 0x7e, 0x68, 0x07, 0x01, 0xf3, 0x8e, 0x5d, 0x8f, 0x3d, 0x74, + 0xbd, 0x98, 0x85, 0x9e, 0x3d, 0x7d, 0xe8, 0xd8, 0xb1, 0x1d, 0xc5, 0x7e, 0xc8, 0xce, 0x9f, 0xac, + 0xd3, 0xcf, 0x3b, 0x41, 0xe8, 0xc7, 0x3e, 0xa9, 0xa7, 0x13, 0xb4, 0x1a, 0x54, 0xba, 0xe3, 0xd8, + 0xf5, 0x3d, 0xed, 0x1f, 0x2b, 0xb0, 0x7a, 0x18, 0xfa, 0x01, 0x0b, 0xe3, 0xb3, 0x6f, 0xed, 0xe9, + 0x9c, 0x91, 0x77, 0x00, 0x5c, 0x2f, 0xfe, 0xea, 0x0b, 0x1c, 0xb5, 0x0a, 0x9b, 0x85, 0xad, 0x22, + 0xcd, 0x50, 0x88, 0x06, 0x2b, 0xcf, 0x7c, 0x7f, 0xca, 0x6c, 0x4f, 0x20, 0x94, 0xcd, 0xc2, 0x56, + 0x8d, 0xe6, 0x68, 0x64, 0x13, 0x1a, 0x51, 0x1c, 0xba, 0xde, 0xb1, 0x80, 0x14, 0x37, 0x0b, 0x5b, + 0x75, 0x9a, 0x25, 0x71, 0x84, 0xe3, 0xcf, 0x9f, 0x4d, 0x99, 0x40, 0x94, 0x36, 0x0b, 0x5b, 0x05, + 0x9a, 0x25, 0x91, 0x3d, 0x80, 0xc0, 0x77, 0xbd, 0xf8, 0x14, 0x01, 0xe5, 0xcd, 0xc2, 0x16, 0x6c, + 0x3f, 0xe8, 0xa4, 0x7b, 0xe8, 0xe4, 0xa4, 0xee, 0x1c, 0x72, 0x28, 0x3e, 0xd2, 0xcc, 0x34, 0xf2, + 0xdb, 0x50, 0x9f, 0x47, 0x2c, 0x14, 0x6b, 0xd4, 0x70, 0x0d, 0xed, 0xd2, 0x35, 0x8e, 0x22, 0x16, + 0x8a, 0x25, 0xce, 0x27, 0x91, 0x21, 0x34, 0x43, 0x36, 0x61, 0x21, 0xf3, 0xc6, 0x4c, 0x2c, 0xb3, + 0x82, 0xcb, 0x7c, 0x70, 0xe9, 0x32, 0x34, 0x81, 0x8b, 0xb5, 0x16, 0xa6, 0xb7, 0xb7, 0x00, 0xce, + 0x85, 0x25, 0x2b, 0x50, 0x78, 0xd9, 0xaa, 0x6c, 0x2a, 0x5b, 0x05, 0x5a, 0x78, 0xc9, 0x47, 0x67, + 0xad, 0xaa, 0x18, 0x9d, 0xb5, 0xff, 0xa9, 0x00, 0xf5, 0x54, 0x26, 0x72, 0x0b, 0xca, 0x6c, 0x66, + 0xbb, 0xd3, 0x56, 0x7d, 0x53, 0xd9, 0xaa, 0x53, 0x31, 0x20, 0xf7, 0xa1, 0x61, 0xcf, 0xe3, 0x13, + 0xcb, 0xf1, 0x67, 0xb6, 0xeb, 0xb5, 0x00, 0x79, 0xc0, 0x49, 0x3d, 0xa4, 0x90, 0x36, 0xd4, 0x3c, + 0x77, 0xfc, 0xdc, 0xb3, 0x67, 0xac, 0xd5, 0xc0, 0x73, 0x48, 0xc7, 0xe4, 0x13, 0x20, 0x13, 0xe6, + 0xb0, 0xd0, 0x8e, 0x99, 0x63, 0xb9, 0x0e, 0xf3, 0x62, 0x37, 0x3e, 0x6b, 0xdd, 0x46, 0xd4, 0x7a, + 0xca, 0x31, 0x24, 0x23, 0x0f, 0x0f, 0x42, 0xff, 0xd4, 0x75, 0x58, 0xd8, 0xba, 0xb3, 0x00, 0x3f, + 0x94, 0x8c, 0xf6, 0xbf, 0x17, 0xa0, 0x99, 0xd7, 0x05, 0x51, 0xa1, 0x68, 0x07, 0x41, 0x6b, 0x15, + 0xa5, 0xe4, 0x8f, 0xe4, 0x6d, 0x00, 0x2e, 0x8a, 0x15, 0x05, 0xf6, 0x98, 0xb5, 0x6e, 0xe1, 0x5a, + 0x75, 0x4e, 0x19, 0x71, 0x02, 0x39, 0x82, 0x46, 0x60, 0xc7, 0x27, 0x6c, 0xca, 0x66, 0xcc, 0x8b, + 0x5b, 0xcd, 0xcd, 0xe2, 0x16, 0x6c, 0x7f, 0x7e, 0x4d, 0xd5, 0x77, 0x0e, 0xed, 0xf8, 0x44, 0x17, + 0x53, 0x69, 0x76, 0x9d, 0xb6, 0x0e, 0x8d, 0x0c, 0x8f, 0x10, 0x28, 0xc5, 0x67, 0x01, 0x6b, 0xad, + 0xa1, 0x5c, 0xf8, 0x4c, 0x9a, 0xa0, 0xb8, 0x4e, 0x4b, 0x45, 0xf3, 0x57, 0x5c, 0x87, 0x63, 0x50, + 0x87, 0xeb, 0x28, 0x22, 0x3e, 0x6b, 0xff, 0x51, 0x86, 0x5a, 0x22, 0x00, 0xe9, 0x42, 0x75, 0xc6, + 0x6c, 0xcf, 0xf5, 0x8e, 0xd1, 0x69, 0x9a, 0xdb, 0x6f, 0x2e, 0x11, 0xb3, 0x73, 0x20, 0x20, 0x3b, + 0x30, 0x18, 0x5a, 0x07, 0x7a, 0x77, 0x60, 0x0c, 0xf6, 0x69, 0x32, 0x8f, 0x1f, 0xa6, 0x7c, 0xb4, + 0xe6, 0xa1, 0x8b, 0x9e, 0x55, 0xa7, 0x20, 0x49, 0x47, 0xa1, 0x9b, 0x0a, 0x51, 0x14, 0x82, 0xe2, + 0x21, 0x76, 0xa0, 0x9c, 0xb8, 0x88, 0xb2, 0xd5, 0xd8, 0x6e, 0x5d, 0xa6, 0x1c, 0x2a, 0x60, 0xdc, + 0x20, 0x66, 0xf3, 0x69, 0xec, 0x06, 0x53, 0xee, 0x76, 0xca, 0x56, 0x8d, 0xa6, 0x63, 0xf2, 0x1e, + 0x40, 0xc4, 0xec, 0x70, 0x7c, 0x62, 0x3f, 0x9b, 0xb2, 0x56, 0x85, 0x7b, 0xf6, 0x4e, 0x79, 0x62, + 0x4f, 0x23, 0x46, 0x33, 0x0c, 0x62, 0xc3, 0xdd, 0x49, 0x1c, 0x59, 0xb1, 0xff, 0x9c, 0x79, 0xee, + 0x2b, 0x9b, 0x07, 0x12, 0xcb, 0x0f, 0xf8, 0x0f, 0xfa, 0x58, 0x73, 0xfb, 0xc3, 0x65, 0x5b, 0x7f, + 0x14, 0x47, 0x66, 0x66, 0xc6, 0x10, 0x27, 0xd0, 0xdb, 0x93, 0x65, 0x64, 0xd2, 0x86, 0xca, 0xd4, + 0x1f, 0xdb, 0x53, 0xd6, 0xaa, 0x73, 0x2d, 0xec, 0x28, 0xcc, 0xa3, 0x92, 0xa2, 0xfd, 0xb3, 0x02, + 0x55, 0xa9, 0x47, 0xd2, 0x84, 0x8c, 0x26, 0xd5, 0x37, 0x48, 0x0d, 0x4a, 0xbb, 0xfd, 0xe1, 0xae, + 0xda, 0xe4, 0x4f, 0xa6, 0xfe, 0xbd, 0xa9, 0xae, 0x71, 0xcc, 0xee, 0x53, 0x53, 0x1f, 0x99, 0x94, + 0x63, 0x54, 0xb2, 0x0e, 0xab, 0x5d, 0x73, 0x78, 0x60, 0xed, 0x75, 0x4d, 0x7d, 0x7f, 0x48, 0x9f, + 0xaa, 0x05, 0xb2, 0x0a, 0x75, 0x24, 0xf5, 0x8d, 0xc1, 0x13, 0x55, 0xe1, 0x33, 0x70, 0x68, 0x1a, + 0x66, 0x5f, 0x57, 0x8b, 0x44, 0x85, 0x15, 0x31, 0x63, 0x38, 0x30, 0xf5, 0x81, 0xa9, 0x96, 0x52, + 0xca, 0xe8, 0xe8, 0xe0, 0xa0, 0x4b, 0x9f, 0xaa, 0x65, 0xb2, 0x06, 0x0d, 0xa4, 0x74, 0x8f, 0xcc, + 0xc7, 0x43, 0xaa, 0x56, 0x48, 0x03, 0xaa, 0xfb, 0x3d, 0xeb, 0xbb, 0xc7, 0xfa, 0x40, 0xad, 0x92, + 0x15, 0xa8, 0xed, 0xf7, 0x2c, 0xfd, 0xa0, 0x6b, 0xf4, 0xd5, 0x1a, 0x9f, 0xbd, 0xaf, 0x0f, 0xe9, + 0x68, 0x64, 0x1d, 0x0e, 0x8d, 0x81, 0xa9, 0xd6, 0x49, 0x1d, 0xca, 0xfb, 0x3d, 0xcb, 0x38, 0x50, + 0x81, 0x10, 0x68, 0xee, 0xf7, 0xac, 0xc3, 0xc7, 0xc3, 0x81, 0x3e, 0x38, 0x3a, 0xd8, 0xd5, 0xa9, + 0xda, 0x20, 0xb7, 0x40, 0xe5, 0xb4, 0xe1, 0xc8, 0xec, 0xf6, 0xbb, 0xbd, 0x1e, 0xd5, 0x47, 0x23, + 0x75, 0x85, 0x4b, 0xbd, 0xdf, 0xb3, 0x68, 0xd7, 0xe4, 0xfb, 0x5a, 0xe5, 0x2f, 0xe4, 0x7b, 0x7f, + 0xa2, 0x3f, 0x55, 0xd7, 0xf9, 0x2b, 0xf4, 0x81, 0x69, 0x98, 0x4f, 0xad, 0x43, 0x3a, 0x34, 0x87, + 0xea, 0x06, 0x17, 0xd0, 0x18, 0xf4, 0xf4, 0xef, 0xad, 0x6f, 0xbb, 0xfd, 0x23, 0x5d, 0x25, 0xda, + 0x8f, 0xe1, 0xf6, 0xd2, 0x33, 0xe1, 0xaa, 0x7b, 0x6c, 0x1e, 0xf4, 0xd5, 0x02, 0x7f, 0xe2, 0x9b, + 0x52, 0x15, 0xed, 0x0f, 0xa0, 0xc4, 0x5d, 0x86, 0x7c, 0x06, 0xd5, 0xc4, 0x1b, 0x0b, 0xe8, 0x8d, + 0x77, 0xb3, 0x67, 0x6d, 0xc7, 0x27, 0x9d, 0xc4, 0xe3, 0x12, 0x5c, 0xbb, 0x0b, 0xd5, 0x45, 0x4f, + 0x53, 0x2e, 0x78, 0x5a, 0xf1, 0x82, 0xa7, 0x95, 0x32, 0x9e, 0x66, 0x43, 0x3d, 0xf5, 0xed, 0x9b, + 0x47, 0x91, 0x07, 0x50, 0xe2, 0xde, 0xdf, 0x6a, 0xa2, 0x87, 0xac, 0x2d, 0x08, 0x4c, 0x91, 0xa9, + 0xfd, 0x43, 0x01, 0x4a, 0x3c, 0xda, 0x9e, 0x07, 0xda, 0xc2, 0x15, 0x81, 0x56, 0xb9, 0x32, 0xd0, + 0x16, 0xaf, 0x15, 0x68, 0x2b, 0x37, 0x0b, 0xb4, 0xd5, 0x4b, 0x02, 0xad, 0xf6, 0x67, 0x45, 0x68, + 0xe8, 0x38, 0xf3, 0x10, 0x13, 0xfd, 0xfb, 0x50, 0x7c, 0xce, 0xce, 0x50, 0x3f, 0x8d, 0xed, 0x5b, + 0x99, 0xdd, 0xa6, 0x2a, 0xa4, 0x1c, 0x40, 0xb6, 0x61, 0x45, 0xbc, 0xd0, 0x3a, 0x0e, 0xfd, 0x79, + 0xd0, 0x52, 0x97, 0xab, 0xa7, 0x21, 0x40, 0xfb, 0x1c, 0x43, 0xde, 0x83, 0xb2, 0xff, 0xc2, 0x63, + 0x21, 0xc6, 0xc1, 0x3c, 0x98, 0x2b, 0x8f, 0x0a, 0x2e, 0x79, 0x08, 0xa5, 0xe7, 0xae, 0xe7, 0xe0, + 0x19, 0xe6, 0x23, 0x61, 0x46, 0xd0, 0xce, 0x13, 0xd7, 0x73, 0x28, 0x02, 0xc9, 0x3d, 0xa8, 0xf1, + 0x5f, 0x8c, 0x7b, 0x65, 0xdc, 0x68, 0x95, 0x8f, 0x79, 0xd0, 0x7b, 0x08, 0xb5, 0x40, 0xc6, 0x10, + 0x4c, 0x00, 0x8d, 0xed, 0x8d, 0x25, 0xe1, 0x85, 0xa6, 0x20, 0xf2, 0x15, 0xac, 0x84, 0xf6, 0x0b, + 0x2b, 0x9d, 0xb4, 0x76, 0xf9, 0xa4, 0x46, 0x68, 0xbf, 0x48, 0x23, 0x38, 0x81, 0x52, 0x68, 0x7b, + 0xcf, 0x5b, 0x64, 0xb3, 0xb0, 0x55, 0xa6, 0xf8, 0xac, 0x7d, 0x01, 0x25, 0x2e, 0x25, 0x8f, 0x08, + 0xfb, 0x3d, 0xf4, 0xff, 0xee, 0x9e, 0xa9, 0x16, 0x12, 0x7f, 0xfe, 0x96, 0x47, 0x03, 0x45, 0x72, + 0x0f, 0xf4, 0xd1, 0xa8, 0xbb, 0xaf, 0xab, 0x45, 0xad, 0x07, 0xeb, 0x7b, 0xfe, 0x2c, 0xf0, 0x23, + 0x37, 0x66, 0xe9, 0xf2, 0xf7, 0xa0, 0xe6, 0x7a, 0x0e, 0x7b, 0x69, 0xb9, 0x0e, 0x9a, 0x56, 0x91, + 0x56, 0x71, 0x6c, 0x38, 0xdc, 0xe4, 0x4e, 0x65, 0x31, 0x55, 0xe4, 0x26, 0x87, 0x03, 0xed, 0x2f, + 0x15, 0x28, 0x1b, 0x1c, 0xc1, 0x8d, 0x4f, 0x9e, 0x14, 0x7a, 0x8f, 0x30, 0x4c, 0x10, 0x24, 0x93, + 0xfb, 0x50, 0x1b, 0x6a, 0xb6, 0x37, 0x66, 0xbc, 0xe2, 0xc3, 0x3c, 0x50, 0xa3, 0xe9, 0x98, 0x7c, + 0x99, 0xd1, 0x9f, 0x82, 0x2e, 0x7b, 0x2f, 0xa3, 0x0a, 0x7c, 0xc1, 0x12, 0x2d, 0xb6, 0xff, 0xaa, + 0x90, 0x49, 0x6e, 0xcb, 0x12, 0x4f, 0x1f, 0xea, 0x8e, 0x1b, 0x32, 0xac, 0x23, 0xe5, 0x41, 0x3f, + 0xb8, 0x74, 0xe1, 0x4e, 0x2f, 0x81, 0xee, 0xd4, 0xbb, 0xa3, 0x3d, 0x7d, 0xd0, 0xe3, 0x99, 0xef, + 0x7c, 0x01, 0xed, 0x23, 0xa8, 0xa7, 0x10, 0x0c, 0xc7, 0x09, 0x48, 0x2d, 0x70, 0xf5, 0xf6, 0xf4, + 0x74, 0xac, 0x68, 0x7f, 0xad, 0x40, 0x33, 0xd5, 0xaf, 0xd0, 0xd0, 0x6d, 0xa8, 0xd8, 0x41, 0x90, + 0xa8, 0xb6, 0x4e, 0xcb, 0x76, 0x10, 0x18, 0x8e, 0x8c, 0x2d, 0x0a, 0x6a, 0x9b, 0xc7, 0x96, 0x4f, + 0x01, 0x1c, 0x36, 0x71, 0x3d, 0x17, 0x85, 0x2e, 0xa2, 0xc1, 0xab, 0x8b, 0x42, 0xd3, 0x0c, 0x86, + 0x7c, 0x09, 0xe5, 0x28, 0xb6, 0x63, 0x91, 0x2b, 0x9b, 0xdb, 0xf7, 0x33, 0xe0, 0xbc, 0x08, 0x9d, + 0x11, 0x87, 0x51, 0x81, 0x26, 0x5f, 0xc1, 0x2d, 0xdf, 0x9b, 0x9e, 0x59, 0xf3, 0x88, 0x59, 0xee, + 0xc4, 0x0a, 0xd9, 0x0f, 0x73, 0x37, 0x64, 0x4e, 0x3e, 0xa7, 0xae, 0x73, 0xc8, 0x51, 0xc4, 0x8c, + 0x09, 0x95, 0x7c, 0xed, 0x6b, 0x28, 0xe3, 0x3a, 0x7c, 0xcf, 0xdf, 0x51, 0xc3, 0xd4, 0xad, 0xe1, + 0xa0, 0xff, 0x54, 0xe8, 0x80, 0xea, 0xdd, 0x9e, 0x85, 0x44, 0x55, 0xe1, 0xc1, 0xbe, 0xa7, 0xf7, + 0x75, 0x53, 0xef, 0xa9, 0x45, 0x9e, 0x3d, 0x74, 0x4a, 0x87, 0x54, 0x2d, 0x69, 0xff, 0x53, 0x80, + 0x15, 0x94, 0xe7, 0xd0, 0x8f, 0xe2, 0x89, 0xfb, 0x92, 0xec, 0x41, 0x43, 0x98, 0xdd, 0xa9, 0x2c, + 0xe8, 0xb9, 0x33, 0x68, 0x8b, 0x7b, 0x96, 0x68, 0x31, 0x90, 0x75, 0xb4, 0x9b, 0x3e, 0x27, 0x21, + 0x45, 0x41, 0xa7, 0xbf, 0x22, 0xa4, 0xbc, 0x05, 0x95, 0x67, 0x6c, 0xe2, 0x87, 0x22, 0x04, 0xd6, + 0x76, 0x4a, 0x71, 0x38, 0x67, 0x54, 0xd2, 0xda, 0x36, 0xc0, 0xf9, 0xfa, 0xe4, 0x01, 0xac, 0x26, + 0xc6, 0x66, 0xa1, 0x71, 0x89, 0x93, 0x5b, 0x49, 0x88, 0x83, 0x5c, 0x75, 0xa3, 0x5c, 0xab, 0xba, + 0xd1, 0xbe, 0x86, 0xd5, 0x64, 0x3f, 0xe2, 0xfc, 0x54, 0x21, 0x79, 0x01, 0x63, 0xca, 0x82, 0x8c, + 0xca, 0x45, 0x19, 0xb5, 0x9f, 0x41, 0x6d, 0xe4, 0xd9, 0x41, 0x74, 0xe2, 0xc7, 0xdc, 0x7a, 0xe2, + 0x48, 0xfa, 0xaa, 0x12, 0x47, 0x9a, 0x06, 0x15, 0x7e, 0x38, 0xf3, 0x88, 0xbb, 0xbf, 0x31, 0xe8, + 0xee, 0x99, 0xc6, 0xb7, 0xba, 0xfa, 0x06, 0x01, 0xa8, 0xc8, 0xe7, 0x82, 0xa6, 0x41, 0xd3, 0x90, + 0xed, 0xd8, 0x63, 0x66, 0x3b, 0x2c, 0xe4, 0x12, 0xfc, 0xe0, 0x47, 0x89, 0x04, 0x3f, 0xf8, 0x91, + 0xf6, 0x17, 0x05, 0x68, 0x98, 0xa1, 0xed, 0x45, 0xb6, 0x30, 0xf7, 0xcf, 0xa0, 0x72, 0x82, 0x58, + 0x74, 0xa3, 0xc6, 0x82, 0x7f, 0x66, 0x17, 0xa3, 0x12, 0x48, 0xee, 0x40, 0xe5, 0xc4, 0xf6, 0x9c, + 0xa9, 0xd0, 0x5a, 0x85, 0xca, 0x51, 0x92, 0x1b, 0x95, 0xf3, 0xdc, 0xb8, 0x05, 0x2b, 0x33, 0x3b, + 0x7c, 0x6e, 0x8d, 0x4f, 0x6c, 0xef, 0x98, 0x45, 0xf2, 0x60, 0xa4, 0x05, 0x36, 0x38, 0x6b, 0x4f, + 0x70, 0xb4, 0xbf, 0x5f, 0x81, 0xf2, 0x37, 0x73, 0x16, 0x9e, 0x65, 0x04, 0xfa, 0xe0, 0xba, 0x02, + 0xc9, 0x17, 0x17, 0x2e, 0x4b, 0xca, 0x6f, 0x2f, 0x26, 0x65, 0x22, 0x53, 0x84, 0xc8, 0x95, 0x22, + 0x0b, 0x7c, 0x9a, 0x09, 0x63, 0xeb, 0x57, 0xd8, 0xda, 0x79, 0x70, 0x7b, 0x08, 0x95, 0x89, 0x3b, + 0x8d, 0x51, 0x75, 0x8b, 0xd5, 0x08, 0xee, 0xa5, 0xf3, 0x08, 0xd9, 0x54, 0xc2, 0xc8, 0xbb, 0xb0, + 0x22, 0x2a, 0x59, 0xeb, 0x07, 0xce, 0xc6, 0x82, 0x95, 0xf7, 0xa6, 0x48, 0x13, 0xbb, 0xff, 0x18, + 0xca, 0x7e, 0xc8, 0x37, 0x5f, 0xc7, 0x25, 0xef, 0x5c, 0x58, 0x72, 0xc8, 0xb9, 0x54, 0x80, 0xc8, + 0x87, 0x50, 0x3a, 0x71, 0xbd, 0x18, 0xb3, 0x46, 0x73, 0xfb, 0xf6, 0x05, 0xf0, 0x63, 0xd7, 0x8b, + 0x29, 0x42, 0x78, 0x98, 0x1f, 0xfb, 0x73, 0x2f, 0x6e, 0xdd, 0xc5, 0x0c, 0x23, 0x06, 0xe4, 0x1e, + 0x54, 0xfc, 0xc9, 0x24, 0x62, 0x31, 0x76, 0x96, 0xe5, 0x9d, 0xc2, 0xa7, 0x54, 0x12, 0xf8, 0x84, + 0xa9, 0x3b, 0x73, 0x63, 0xec, 0x43, 0xca, 0x54, 0x0c, 0xc8, 0x2e, 0xac, 0x8d, 0xfd, 0x59, 0xe0, + 0x4e, 0x99, 0x63, 0x8d, 0xe7, 0x61, 0xe4, 0x87, 0xad, 0x77, 0x2e, 0x1c, 0xd3, 0x9e, 0x44, 0xec, + 0x21, 0x80, 0x36, 0xc7, 0xb9, 0x31, 0x31, 0x60, 0x83, 0x79, 0x8e, 0xb5, 0xb8, 0xce, 0xfd, 0xd7, + 0xad, 0xb3, 0xce, 0x3c, 0x27, 0x4f, 0x4a, 0xc4, 0xc1, 0x48, 0x68, 0x61, 0xcc, 0x68, 0x6d, 0x60, + 0x90, 0xb9, 0x77, 0x69, 0xac, 0x14, 0xe2, 0x64, 0xc2, 0xf7, 0x6f, 0xc0, 0x2d, 0x19, 0x22, 0xad, + 0x80, 0x85, 0x13, 0x36, 0x8e, 0xad, 0x60, 0x6a, 0x7b, 0x58, 0xca, 0xa5, 0xc6, 0x4a, 0x24, 0xe4, + 0x50, 0x20, 0x0e, 0xa7, 0xb6, 0x47, 0x34, 0xa8, 0x3f, 0x67, 0x67, 0x91, 0xc5, 0x23, 0x29, 0x76, + 0xae, 0x29, 0xba, 0xc6, 0xe9, 0x43, 0x6f, 0x7a, 0x46, 0x7e, 0x02, 0x8d, 0xf8, 0xdc, 0xdb, 0xb0, + 0x61, 0x6d, 0xe4, 0x4e, 0x35, 0xe3, 0x8b, 0x34, 0x0b, 0x25, 0xf7, 0xa1, 0x2a, 0x35, 0xd4, 0xba, + 0x97, 0x5d, 0x3b, 0xa1, 0xf2, 0xc4, 0x3c, 0xb1, 0xdd, 0xa9, 0x7f, 0xca, 0x42, 0x6b, 0x16, 0xb5, + 0xda, 0xe2, 0xb6, 0x24, 0x21, 0x1d, 0x44, 0xdc, 0x4f, 0xa3, 0x38, 0xf4, 0xbd, 0xe3, 0xd6, 0x26, + 0xde, 0x93, 0xc8, 0xd1, 0xc5, 0xe0, 0xf7, 0x2e, 0x66, 0xfe, 0x7c, 0xf0, 0xfb, 0x1c, 0xee, 0x60, + 0x65, 0x66, 0x3d, 0x3b, 0xb3, 0xf2, 0x68, 0x0d, 0xd1, 0x1b, 0xc8, 0xdd, 0x3d, 0x3b, 0xcc, 0x4e, + 0x6a, 0x43, 0xcd, 0x71, 0xa3, 0xd8, 0xf5, 0xc6, 0x71, 0xab, 0x85, 0xef, 0x4c, 0xc7, 0xe4, 0x33, + 0xb8, 0x3d, 0x73, 0x3d, 0x2b, 0xb2, 0x27, 0xcc, 0x8a, 0x5d, 0xee, 0x9b, 0x6c, 0xec, 0x7b, 0x4e, + 0xd4, 0x7a, 0x80, 0x82, 0x93, 0x99, 0xeb, 0x8d, 0xec, 0x09, 0x33, 0xdd, 0x19, 0x1b, 0x09, 0x0e, + 0xf9, 0x08, 0xd6, 0x11, 0x1e, 0xb2, 0x60, 0xea, 0x8e, 0x6d, 0xf1, 0xfa, 0x1f, 0xe1, 0xeb, 0xd7, + 0x38, 0x83, 0x0a, 0x3a, 0xbe, 0xfa, 0x63, 0x68, 0x06, 0x2c, 0x8c, 0xdc, 0x28, 0xb6, 0xa4, 0x45, + 0xbf, 0x97, 0xd5, 0xda, 0xaa, 0x64, 0x0e, 0x91, 0xd7, 0xfe, 0xcf, 0x02, 0x54, 0x84, 0x73, 0x92, + 0x4f, 0x41, 0xf1, 0x03, 0xbc, 0x06, 0x69, 0x6e, 0x6f, 0x5e, 0xe2, 0xc1, 0x9d, 0x61, 0xc0, 0xeb, + 0x5e, 0x3f, 0xa4, 0x8a, 0x1f, 0xdc, 0xb8, 0x28, 0xd4, 0xfe, 0x10, 0x6a, 0xc9, 0x02, 0xbc, 0xbc, + 0xe8, 0xeb, 0xa3, 0x91, 0x65, 0x3e, 0xee, 0x0e, 0xd4, 0x02, 0xb9, 0x03, 0x24, 0x1d, 0x5a, 0x43, + 0x6a, 0xe9, 0xdf, 0x1c, 0x75, 0xfb, 0xaa, 0x82, 0x5d, 0x1a, 0xd5, 0xbb, 0xa6, 0x4e, 0x05, 0xb2, + 0x48, 0xee, 0xc1, 0xed, 0x2c, 0xe5, 0x1c, 0x5c, 0xc2, 0x14, 0x8c, 0x8f, 0x65, 0x52, 0x01, 0xc5, + 0x18, 0xa8, 0x15, 0x9e, 0x16, 0xf4, 0xef, 0x8d, 0x91, 0x39, 0x52, 0xab, 0xed, 0xbf, 0x29, 0x40, + 0x19, 0xc3, 0x06, 0x3f, 0x9f, 0x54, 0x72, 0x71, 0x5d, 0x73, 0x5e, 0xb9, 0x1a, 0xd9, 0x92, 0xaa, + 0x81, 0x01, 0x65, 0x73, 0x79, 0xf4, 0xf9, 0xb5, 0xd6, 0x53, 0x3f, 0x85, 0x12, 0x8f, 0x52, 0xbc, + 0x43, 0x1c, 0xd2, 0x9e, 0x4e, 0xad, 0x47, 0x06, 0x1d, 0xf1, 0x2a, 0x97, 0x40, 0xb3, 0x3b, 0xd8, + 0xd3, 0x47, 0xe6, 0x30, 0xa1, 0xa1, 0x56, 0x1e, 0x19, 0x7d, 0x33, 0x45, 0x15, 0xb5, 0x9f, 0xd7, + 0x60, 0x35, 0x89, 0x09, 0x22, 0x82, 0x3e, 0x82, 0x46, 0x10, 0xba, 0x33, 0x3b, 0x3c, 0x8b, 0xc6, + 0xb6, 0x87, 0x49, 0x01, 0xb6, 0x7f, 0xb4, 0x24, 0xaa, 0x88, 0x1d, 0x1d, 0x0a, 0xec, 0x68, 0x6c, + 0x7b, 0x34, 0x3b, 0x91, 0xf4, 0x61, 0x75, 0xc6, 0xc2, 0x63, 0xf6, 0x7b, 0xbe, 0xeb, 0xe1, 0x4a, + 0x55, 0x8c, 0xc8, 0xef, 0x5f, 0xba, 0xd2, 0x01, 0x47, 0xff, 0x8e, 0xef, 0x7a, 0xb8, 0x56, 0x7e, + 0x32, 0xf9, 0x04, 0xea, 0xa2, 0x12, 0x72, 0xd8, 0x04, 0x63, 0xc5, 0xb2, 0xda, 0x4f, 0xd4, 0xe8, + 0x3d, 0x36, 0xc9, 0xc4, 0x65, 0xb8, 0x34, 0x2e, 0x37, 0xb2, 0x71, 0xf9, 0xcd, 0x6c, 0x2c, 0x5a, + 0x11, 0x55, 0x78, 0x1a, 0x84, 0x2e, 0x38, 0x7c, 0x6b, 0x89, 0xc3, 0x77, 0x60, 0x23, 0xf1, 0x55, + 0xcb, 0xf5, 0x26, 0xee, 0x4b, 0x2b, 0x72, 0x5f, 0x89, 0xd8, 0x53, 0xa6, 0xeb, 0x09, 0xcb, 0xe0, + 0x9c, 0x91, 0xfb, 0x8a, 0x11, 0x23, 0xe9, 0xe0, 0x64, 0x0e, 0x5c, 0xc5, 0xab, 0xc9, 0xf7, 0x2e, + 0x55, 0x8f, 0x68, 0xbe, 0x64, 0x46, 0xcc, 0x4d, 0x6d, 0xff, 0x52, 0x81, 0x46, 0xe6, 0x1c, 0x78, + 0xf6, 0x16, 0xca, 0x42, 0x61, 0xc5, 0x55, 0x94, 0x50, 0x1f, 0x4a, 0xfa, 0x26, 0xd4, 0xa3, 0xd8, + 0x0e, 0x63, 0x8b, 0x17, 0x57, 0xb2, 0xdd, 0x45, 0xc2, 0x13, 0x76, 0x46, 0x3e, 0x80, 0x35, 0xc1, + 0x74, 0xbd, 0xf1, 0x74, 0x1e, 0xb9, 0xa7, 0xa2, 0x99, 0xaf, 0xd1, 0x26, 0x92, 0x8d, 0x84, 0x4a, + 0xee, 0x42, 0x95, 0x67, 0x21, 0xbe, 0x86, 0x68, 0xfa, 0x2a, 0xcc, 0x73, 0xf8, 0x0a, 0x0f, 0x60, + 0x95, 0x33, 0xce, 0xe7, 0x57, 0xc4, 0x2d, 0x33, 0xf3, 0x9c, 0xf3, 0xd9, 0x1d, 0xd8, 0x10, 0xaf, + 0x09, 0x44, 0xf1, 0x2a, 0x2b, 0xdc, 0x3b, 0xa8, 0xd8, 0x75, 0x64, 0xc9, 0xb2, 0x56, 0x14, 0x9c, + 0x1f, 0x01, 0xcf, 0x5e, 0x0b, 0xe8, 0xbb, 0x22, 0x94, 0x31, 0xcf, 0xc9, 0x61, 0x77, 0xe1, 0x1d, + 0x8e, 0x9d, 0x7b, 0x76, 0x10, 0x4c, 0x5d, 0xe6, 0x58, 0x53, 0xff, 0x18, 0x43, 0x66, 0x14, 0xdb, + 0xb3, 0xc0, 0x9a, 0x47, 0xad, 0x0d, 0x0c, 0x99, 0x6d, 0xe6, 0x39, 0x47, 0x09, 0xa8, 0xef, 0x1f, + 0x9b, 0x09, 0xe4, 0x28, 0x6a, 0xff, 0x3e, 0xac, 0xe6, 0xec, 0x71, 0x41, 0xa7, 0x35, 0x74, 0xfe, + 0x8c, 0x4e, 0xdf, 0x85, 0x95, 0x20, 0x64, 0xe7, 0xa2, 0xd5, 0x51, 0xb4, 0x86, 0xa0, 0x09, 0xb1, + 0xb6, 0x60, 0x05, 0x79, 0x96, 0x20, 0xe6, 0xf3, 0x63, 0x03, 0x59, 0x87, 0xc8, 0x69, 0xbf, 0x80, + 0x95, 0xec, 0x69, 0x93, 0x77, 0x33, 0x69, 0xa1, 0x99, 0xcb, 0x93, 0x69, 0x76, 0x48, 0x2a, 0xb2, + 0xf5, 0x4b, 0x2a, 0x32, 0x72, 0x9d, 0x8a, 0x4c, 0xfb, 0x2f, 0xd9, 0x9c, 0x65, 0x2a, 0x84, 0x9f, + 0x41, 0x2d, 0x90, 0xf5, 0x38, 0x5a, 0x52, 0xfe, 0x12, 0x3e, 0x0f, 0xee, 0x24, 0x95, 0x3b, 0x4d, + 0xe7, 0xb4, 0xff, 0x56, 0x81, 0x5a, 0x5a, 0xd0, 0xe7, 0x2c, 0xef, 0xcd, 0x05, 0xcb, 0x3b, 0x90, + 0x1a, 0x16, 0x0a, 0x7c, 0x1b, 0xa3, 0xc5, 0x27, 0xaf, 0x7f, 0xd7, 0xc5, 0xb6, 0xe7, 0x34, 0xdb, + 0xf6, 0x6c, 0xbe, 0xae, 0xed, 0xf9, 0xe4, 0xa2, 0xc1, 0xbf, 0x95, 0xe9, 0x2d, 0x16, 0xcc, 0xbe, + 0xfd, 0x7d, 0xae, 0x0f, 0xca, 0x26, 0x84, 0x77, 0xc4, 0x7e, 0xd2, 0x84, 0x90, 0xb6, 0x3f, 0xf7, + 0xaf, 0xd7, 0xfe, 0x6c, 0x43, 0x45, 0xea, 0xfc, 0x0e, 0x54, 0x64, 0x4d, 0x27, 0x1b, 0x04, 0x31, + 0x3a, 0x6f, 0x10, 0x0a, 0xb2, 0x4e, 0xd7, 0x7e, 0xae, 0x40, 0x59, 0x0f, 0x43, 0x3f, 0xd4, 0xfe, + 0x48, 0x81, 0x3a, 0x3e, 0xed, 0xf9, 0x0e, 0xe3, 0xd9, 0x60, 0xb7, 0xdb, 0xb3, 0xa8, 0xfe, 0xcd, + 0x91, 0x8e, 0xd9, 0xa0, 0x0d, 0x77, 0xf6, 0x86, 0x83, 0xbd, 0x23, 0x4a, 0xf5, 0x81, 0x69, 0x99, + 0xb4, 0x3b, 0x18, 0xf1, 0xb6, 0x67, 0x38, 0x50, 0x15, 0x9e, 0x29, 0x8c, 0x81, 0xa9, 0xd3, 0x41, + 0xb7, 0x6f, 0x89, 0x56, 0xb4, 0x88, 0x77, 0xb3, 0xba, 0xde, 0xb3, 0xf0, 0xd6, 0x51, 0x2d, 0xf1, + 0x96, 0xd5, 0x34, 0x0e, 0xf4, 0xe1, 0x91, 0xa9, 0x96, 0xc9, 0x6d, 0x58, 0x3f, 0xd4, 0xe9, 0x81, + 0x31, 0x1a, 0x19, 0xc3, 0x81, 0xd5, 0xd3, 0x07, 0x86, 0xde, 0x53, 0x2b, 0x7c, 0x9d, 0x5d, 0x63, + 0xdf, 0xec, 0xee, 0xf6, 0x75, 0xb9, 0x4e, 0x95, 0x6c, 0xc2, 0x5b, 0x7b, 0xc3, 0x83, 0x03, 0xc3, + 0x34, 0xf5, 0x9e, 0xb5, 0x7b, 0x64, 0x5a, 0x23, 0xd3, 0xe8, 0xf7, 0xad, 0xee, 0xe1, 0x61, 0xff, + 0x29, 0x4f, 0x60, 0x35, 0x72, 0x17, 0x36, 0xf6, 0xba, 0x87, 0xdd, 0x5d, 0xa3, 0x6f, 0x98, 0x4f, + 0xad, 0x9e, 0x31, 0xe2, 0xf3, 0x7b, 0x6a, 0x9d, 0x27, 0x6c, 0x93, 0x3e, 0xb5, 0xba, 0x7d, 0x14, + 0xcd, 0xd4, 0xad, 0xdd, 0xee, 0xde, 0x13, 0x7d, 0xd0, 0x53, 0x81, 0x0b, 0x30, 0xea, 0x3e, 0xd2, + 0x2d, 0x2e, 0x92, 0x65, 0x0e, 0x87, 0xd6, 0xb0, 0xdf, 0x53, 0x1b, 0xda, 0xbf, 0x14, 0xa1, 0xb4, + 0xe7, 0x47, 0x31, 0xf7, 0x46, 0xe1, 0xac, 0x2f, 0x42, 0x37, 0x66, 0xa2, 0x7f, 0x2b, 0x53, 0xd1, + 0x4b, 0x7f, 0x87, 0x24, 0x1e, 0x50, 0x32, 0x10, 0xeb, 0xd9, 0x19, 0xc7, 0x29, 0x88, 0x5b, 0x3b, + 0xc7, 0xed, 0x72, 0xb2, 0x88, 0x68, 0x78, 0x85, 0x23, 0xd7, 0x2b, 0x22, 0x4e, 0x06, 0x61, 0xb9, + 0xe0, 0xc7, 0x40, 0xb2, 0x20, 0xb9, 0x62, 0x09, 0x91, 0x6a, 0x06, 0x29, 0x96, 0xdc, 0x01, 0x18, + 0xfb, 0xb3, 0x99, 0x1b, 0x8f, 0xfd, 0x28, 0x96, 0x5f, 0xc8, 0xda, 0x39, 0x63, 0x8f, 0x62, 0x6e, + 0xf1, 0x33, 0x37, 0xe6, 0x8f, 0x34, 0x83, 0x26, 0x3b, 0x70, 0xcf, 0x0e, 0x82, 0xd0, 0x7f, 0xe9, + 0xce, 0xec, 0x98, 0x59, 0xdc, 0x73, 0xed, 0x63, 0x66, 0x39, 0x6c, 0x1a, 0xdb, 0xd8, 0x13, 0x95, + 0xe9, 0xdd, 0x0c, 0x60, 0x24, 0xf8, 0x3d, 0xce, 0xe6, 0x71, 0xd7, 0x75, 0xac, 0x88, 0xfd, 0x30, + 0xe7, 0x1e, 0x60, 0xcd, 0x03, 0xc7, 0xe6, 0x62, 0xd6, 0x45, 0x96, 0x72, 0x9d, 0x91, 0xe4, 0x1c, + 0x09, 0x46, 0xfb, 0x15, 0xc0, 0xb9, 0x14, 0x64, 0x1b, 0x6e, 0xf3, 0x3a, 0x9e, 0x45, 0x31, 0x73, + 0x2c, 0xb9, 0xdb, 0x60, 0x1e, 0x47, 0x18, 0xe2, 0xcb, 0x74, 0x23, 0x65, 0xca, 0x9b, 0xc2, 0x79, + 0x1c, 0x91, 0x9f, 0x40, 0xeb, 0xc2, 0x1c, 0x87, 0x4d, 0x19, 0x7f, 0x6d, 0x15, 0xa7, 0xdd, 0x59, + 0x98, 0xd6, 0x13, 0x5c, 0xed, 0x4f, 0x14, 0x80, 0x7d, 0x16, 0x53, 0xc1, 0xcd, 0x34, 0xb6, 0x95, + 0xeb, 0x36, 0xb6, 0xef, 0x27, 0x17, 0x08, 0xc5, 0xab, 0x63, 0xc0, 0x42, 0x97, 0xa1, 0xdc, 0xa4, + 0xcb, 0xc8, 0x35, 0x11, 0xc5, 0x2b, 0x9a, 0x88, 0x52, 0xae, 0x89, 0xf8, 0x18, 0x9a, 0xf6, 0x74, + 0xea, 0xbf, 0xe0, 0x05, 0x0d, 0x0b, 0x43, 0xe6, 0xa0, 0x11, 0x9c, 0xd7, 0xdb, 0xc8, 0xec, 0x49, + 0x9e, 0xf6, 0xe7, 0x0a, 0x34, 0x50, 0x15, 0x51, 0xe0, 0x7b, 0x11, 0x23, 0x5f, 0x42, 0x45, 0x5e, + 0x44, 0x8b, 0x8b, 0xfc, 0xb7, 0x33, 0xb2, 0x66, 0x70, 0xb2, 0x68, 0xa0, 0x12, 0xcc, 0x33, 0x42, + 0xe6, 0x75, 0x97, 0x2b, 0x25, 0x45, 0x91, 0xfb, 0x50, 0x73, 0x3d, 0x4b, 0xb4, 0xd4, 0x95, 0x4c, + 0x58, 0xac, 0xba, 0x1e, 0xd6, 0xb2, 0xed, 0x57, 0x50, 0x11, 0x2f, 0x21, 0x9d, 0x54, 0xa6, 0x8b, + 0xfa, 0xcb, 0xdc, 0x1c, 0xa7, 0xc2, 0xc8, 0xc3, 0x29, 0xbd, 0x2e, 0x40, 0xb7, 0xa0, 0x7a, 0xca, + 0x9b, 0x0f, 0xbc, 0xf4, 0xe3, 0xea, 0x4d, 0x86, 0xda, 0x1f, 0x97, 0x00, 0x0e, 0xe7, 0x4b, 0x0c, + 0xa4, 0x71, 0x5d, 0x03, 0xe9, 0xe4, 0xf4, 0xf8, 0x7a, 0x99, 0x7f, 0x75, 0x43, 0x59, 0xd2, 0x69, + 0x17, 0x6f, 0xda, 0x69, 0xdf, 0x87, 0x6a, 0x1c, 0xce, 0xb9, 0xa3, 0x08, 0x63, 0x4a, 0x5b, 0x5a, + 0x49, 0x25, 0x6f, 0x42, 0x79, 0xe2, 0x87, 0x63, 0x86, 0x8e, 0x95, 0xb2, 0x05, 0xed, 0xc2, 0x65, + 0x52, 0xed, 0xb2, 0xcb, 0x24, 0xde, 0xa0, 0x45, 0xf2, 0x1e, 0x0d, 0x0b, 0x99, 0x7c, 0x83, 0x96, + 0x5c, 0xb1, 0xd1, 0x14, 0x44, 0xbe, 0x81, 0xa6, 0x3d, 0x8f, 0x7d, 0xcb, 0xe5, 0x15, 0xda, 0xd4, + 0x1d, 0x9f, 0x61, 0xd9, 0xdd, 0xcc, 0x7f, 0xaf, 0x4f, 0x0f, 0xaa, 0xd3, 0x9d, 0xc7, 0xbe, 0xe1, + 0x1c, 0x22, 0x72, 0xa7, 0x2a, 0x93, 0x12, 0x5d, 0xb1, 0x33, 0x64, 0xed, 0xc7, 0xb0, 0x92, 0x85, + 0xf1, 0x04, 0x24, 0x81, 0xea, 0x1b, 0x3c, 0x3b, 0x8d, 0x78, 0x6a, 0x1b, 0x98, 0x46, 0xb7, 0xaf, + 0x16, 0xb4, 0x18, 0x1a, 0xb8, 0xbc, 0xf4, 0x8e, 0xeb, 0xba, 0xfd, 0x03, 0x28, 0x61, 0xf8, 0x55, + 0x2e, 0x7c, 0x0f, 0xc1, 0x98, 0x8b, 0xcc, 0xbc, 0xf9, 0x15, 0xb3, 0xe6, 0xf7, 0xdf, 0x05, 0x58, + 0x31, 0xfd, 0xf9, 0xf8, 0xe4, 0xa2, 0x01, 0xc2, 0xaf, 0x3b, 0x42, 0x2d, 0x31, 0x1f, 0xe5, 0xa6, + 0xe6, 0x93, 0x5a, 0x47, 0x71, 0x89, 0x75, 0xdc, 0xf4, 0xcc, 0xb5, 0x2f, 0x60, 0x55, 0x6e, 0x5e, + 0x6a, 0x3d, 0xd1, 0x66, 0xe1, 0x0a, 0x6d, 0x6a, 0xbf, 0x50, 0x60, 0x55, 0xc4, 0xf7, 0xff, 0xbb, + 0xd2, 0x2a, 0x37, 0x0c, 0xeb, 0xe5, 0x1b, 0x5d, 0x1e, 0xfd, 0xbf, 0xf4, 0x34, 0x6d, 0x08, 0xcd, + 0x44, 0x7d, 0x37, 0x50, 0xfb, 0x15, 0x46, 0xfc, 0x8b, 0x02, 0x34, 0x06, 0xec, 0xe5, 0x92, 0x20, + 0x5a, 0xbe, 0xee, 0x71, 0x7c, 0x98, 0x2b, 0x57, 0x1b, 0xdb, 0xeb, 0x59, 0x19, 0xc4, 0xd5, 0x63, + 0x52, 0xc1, 0xa6, 0xb7, 0xa8, 0xca, 0xf2, 0x5b, 0xd4, 0xd2, 0x62, 0xb7, 0x9e, 0xb9, 0xc5, 0x2b, + 0x2e, 0xbb, 0xc5, 0xd3, 0xfe, 0xad, 0x08, 0x0d, 0x6c, 0x90, 0x29, 0x8b, 0xe6, 0xd3, 0x38, 0x27, + 0x4c, 0xe1, 0x6a, 0x61, 0x3a, 0x50, 0x09, 0x71, 0x92, 0x74, 0xa5, 0x4b, 0x83, 0xbf, 0x40, 0x61, + 0x6b, 0xfc, 0xdc, 0x0d, 0x02, 0xe6, 0x58, 0x82, 0x92, 0x14, 0x30, 0x4d, 0x49, 0x16, 0x22, 0x44, + 0xbc, 0xfc, 0x9c, 0xf9, 0x21, 0x4b, 0x51, 0x45, 0xbc, 0x4f, 0x68, 0x70, 0x5a, 0x02, 0xc9, 0xdd, + 0x37, 0x88, 0xca, 0xe0, 0xfc, 0xbe, 0x21, 0xed, 0x35, 0x91, 0x5b, 0x47, 0xae, 0xe8, 0x35, 0x91, + 0xcd, 0xbb, 0xa8, 0x99, 0x3d, 0x9d, 0x5a, 0x7e, 0x10, 0xa1, 0xd3, 0xd4, 0x68, 0x0d, 0x09, 0xc3, + 0x20, 0x22, 0x5f, 0x43, 0x7a, 0x5d, 0x2c, 0x6f, 0xc9, 0xc5, 0x39, 0xb6, 0x2e, 0xbb, 0x58, 0xa0, + 0xab, 0xe3, 0xdc, 0xfd, 0xcf, 0x92, 0x1b, 0xea, 0xca, 0x4d, 0x6f, 0xa8, 0x1f, 0x42, 0x59, 0xc4, + 0xa8, 0xda, 0xeb, 0x62, 0x94, 0xc0, 0x65, 0xed, 0xb3, 0x91, 0xb7, 0xcf, 0x5f, 0x16, 0x80, 0x74, + 0xa7, 0x53, 0x7f, 0x6c, 0xc7, 0xcc, 0x70, 0xa2, 0x8b, 0x66, 0x7a, 0xed, 0xcf, 0x2e, 0x9f, 0x41, + 0x7d, 0xe6, 0x3b, 0x6c, 0x6a, 0x25, 0xdf, 0x94, 0x2e, 0xad, 0x7e, 0x10, 0xc6, 0x5b, 0x52, 0x02, + 0x25, 0xbc, 0xc4, 0x51, 0xb0, 0xee, 0xc0, 0x67, 0xde, 0x84, 0xcd, 0xec, 0x97, 0xb2, 0x14, 0xe1, + 0x8f, 0xa4, 0x03, 0xd5, 0x90, 0x45, 0x2c, 0x3c, 0x65, 0x57, 0x16, 0x55, 0x09, 0x48, 0x7b, 0x06, + 0x1b, 0xb9, 0x1d, 0x49, 0x47, 0xbe, 0x85, 0x5f, 0x2b, 0xc3, 0x58, 0x7e, 0xb4, 0x12, 0x03, 0xfe, + 0x3a, 0xe6, 0x25, 0x9f, 0x41, 0xf9, 0x63, 0xea, 0xf0, 0xc5, 0xab, 0xe2, 0xec, 0x1e, 0xa8, 0x59, + 0x4d, 0xbb, 0x63, 0x0c, 0x36, 0xf2, 0x54, 0x0a, 0xd7, 0x3b, 0x15, 0xed, 0xef, 0x0a, 0xb0, 0xde, + 0x75, 0x1c, 0xf1, 0x77, 0xc3, 0x25, 0xaa, 0x2f, 0x5e, 0x57, 0xf5, 0x0b, 0x81, 0x58, 0x84, 0x89, + 0x6b, 0x05, 0xe2, 0x0f, 0xa1, 0x92, 0xd6, 0x5a, 0xc5, 0x05, 0x77, 0x16, 0x72, 0x51, 0x09, 0xd0, + 0x6e, 0x01, 0xc9, 0x0a, 0x2b, 0xb4, 0xaa, 0xfd, 0x69, 0x11, 0xee, 0xee, 0xb2, 0x63, 0xd7, 0xcb, + 0xbe, 0xe2, 0x57, 0xdf, 0xc9, 0xc5, 0x4f, 0x65, 0x9f, 0xc1, 0xba, 0x28, 0xe4, 0x93, 0x7f, 0x62, + 0x59, 0xec, 0x58, 0x7e, 0x9d, 0x94, 0xb1, 0x6a, 0x0d, 0xf9, 0x07, 0x92, 0xad, 0xe3, 0x7f, 0xc5, + 0x1c, 0x3b, 0xb6, 0x9f, 0xd9, 0x11, 0xb3, 0x5c, 0x47, 0xfe, 0x59, 0x06, 0x12, 0x92, 0xe1, 0x90, + 0x21, 0x94, 0xb8, 0x0d, 0xa2, 0xeb, 0x36, 0xb7, 0xb7, 0x33, 0x62, 0x5d, 0xb2, 0x95, 0xac, 0x02, + 0x0f, 0x7c, 0x87, 0xed, 0x54, 0x8f, 0x06, 0x4f, 0x06, 0xc3, 0xef, 0x06, 0x14, 0x17, 0x22, 0x06, + 0xdc, 0x0a, 0x42, 0x76, 0xea, 0xfa, 0xf3, 0xc8, 0xca, 0x9e, 0x44, 0xf5, 0xca, 0x94, 0xb8, 0x91, + 0xcc, 0xc9, 0x10, 0xb5, 0x9f, 0xc2, 0xda, 0xc2, 0xcb, 0x78, 0x6d, 0x26, 0x5f, 0xa7, 0xbe, 0x41, + 0x56, 0xa1, 0x8e, 0x1f, 0xbb, 0x97, 0x7f, 0xfb, 0xd6, 0xfe, 0xb5, 0x80, 0x57, 0x4c, 0x33, 0x37, + 0xbe, 0x59, 0x06, 0xfb, 0xcd, 0x7c, 0x06, 0x83, 0xed, 0x77, 0xf3, 0xe6, 0x9b, 0x59, 0xb0, 0xf3, + 0xad, 0x00, 0xa6, 0x41, 0xa4, 0x6d, 0x43, 0x55, 0xd2, 0xc8, 0x6f, 0xc1, 0x5a, 0xe8, 0xfb, 0x71, + 0xd2, 0x89, 0x8a, 0x0e, 0xe4, 0xf2, 0x3f, 0xdb, 0xac, 0x72, 0xb0, 0x48, 0x06, 0x4f, 0xf2, 0xbd, + 0x48, 0x59, 0xfc, 0x0d, 0x44, 0x0e, 0x77, 0x1b, 0xbf, 0x5b, 0x4f, 0xff, 0xb7, 0xfb, 0xbf, 0x01, + 0x00, 0x00, 0xff, 0xff, 0x35, 0x9f, 0x30, 0x98, 0xf2, 0x2b, 0x00, 0x00, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto new file mode 100755 index 00000000000..497b4d9a9af --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/datastore/datastore_v3.proto @@ -0,0 +1,551 @@ +syntax = "proto2"; +option go_package = "datastore"; + +package appengine; + +message Action{} + +message PropertyValue { + optional int64 int64Value = 1; + optional bool booleanValue = 2; + optional string stringValue = 3; + optional double doubleValue = 4; + + optional group PointValue = 5 { + required double x = 6; + required double y = 7; + } + + optional group UserValue = 8 { + required string email = 9; + required string auth_domain = 10; + optional string nickname = 11; + optional string federated_identity = 21; + optional string federated_provider = 22; + } + + optional group ReferenceValue = 12 { + required string app = 13; + optional string name_space = 20; + repeated group PathElement = 14 { + required string type = 15; + optional int64 id = 16; + optional string name = 17; + } + } +} + +message Property { + enum Meaning { + NO_MEANING = 0; + BLOB = 14; + TEXT = 15; + BYTESTRING = 16; + + ATOM_CATEGORY = 1; + ATOM_LINK = 2; + ATOM_TITLE = 3; + ATOM_CONTENT = 4; + ATOM_SUMMARY = 5; + ATOM_AUTHOR = 6; + + GD_WHEN = 7; + GD_EMAIL = 8; + GEORSS_POINT = 9; + GD_IM = 10; + + GD_PHONENUMBER = 11; + GD_POSTALADDRESS = 12; + + GD_RATING = 13; + + BLOBKEY = 17; + ENTITY_PROTO = 19; + + INDEX_VALUE = 18; + }; + + optional Meaning meaning = 1 [default = NO_MEANING]; + optional string meaning_uri = 2; + + required string name = 3; + + required PropertyValue value = 5; + + required bool multiple = 4; + + optional bool searchable = 6 [default=false]; + + enum FtsTokenizationOption { + HTML = 1; + ATOM = 2; + } + + optional FtsTokenizationOption fts_tokenization_option = 8; + + optional string locale = 9 [default = "en"]; +} + +message Path { + repeated group Element = 1 { + required string type = 2; + optional int64 id = 3; + optional string name = 4; + } +} + +message Reference { + required string app = 13; + optional string name_space = 20; + required Path path = 14; +} + +message User { + required string email = 1; + required string auth_domain = 2; + optional string nickname = 3; + optional string federated_identity = 6; + optional string federated_provider = 7; +} + +message EntityProto { + required Reference key = 13; + required Path entity_group = 16; + optional User owner = 17; + + enum Kind { + GD_CONTACT = 1; + GD_EVENT = 2; + GD_MESSAGE = 3; + } + optional Kind kind = 4; + optional string kind_uri = 5; + + repeated Property property = 14; + repeated Property raw_property = 15; + + optional int32 rank = 18; +} + +message CompositeProperty { + required int64 index_id = 1; + repeated string value = 2; +} + +message Index { + required string entity_type = 1; + required bool ancestor = 5; + repeated group Property = 2 { + required string name = 3; + enum Direction { + ASCENDING = 1; + DESCENDING = 2; + } + optional Direction direction = 4 [default = ASCENDING]; + } +} + +message CompositeIndex { + required string app_id = 1; + required int64 id = 2; + required Index definition = 3; + + enum State { + WRITE_ONLY = 1; + READ_WRITE = 2; + DELETED = 3; + ERROR = 4; + } + required State state = 4; + + optional bool only_use_if_required = 6 [default = false]; +} + +message IndexPostfix { + message IndexValue { + required string property_name = 1; + required PropertyValue value = 2; + } + + repeated IndexValue index_value = 1; + + optional Reference key = 2; + + optional bool before = 3 [default=true]; +} + +message IndexPosition { + optional string key = 1; + + optional bool before = 2 [default=true]; +} + +message Snapshot { + enum Status { + INACTIVE = 0; + ACTIVE = 1; + } + + required int64 ts = 1; +} + +message InternalHeader { + optional string qos = 1; +} + +message Transaction { + optional InternalHeader header = 4; + required fixed64 handle = 1; + required string app = 2; + optional bool mark_changes = 3 [default = false]; +} + +message Query { + optional InternalHeader header = 39; + + required string app = 1; + optional string name_space = 29; + + optional string kind = 3; + optional Reference ancestor = 17; + + repeated group Filter = 4 { + enum Operator { + LESS_THAN = 1; + LESS_THAN_OR_EQUAL = 2; + GREATER_THAN = 3; + GREATER_THAN_OR_EQUAL = 4; + EQUAL = 5; + IN = 6; + EXISTS = 7; + } + + required Operator op = 6; + repeated Property property = 14; + } + + optional string search_query = 8; + + repeated group Order = 9 { + enum Direction { + ASCENDING = 1; + DESCENDING = 2; + } + + required string property = 10; + optional Direction direction = 11 [default = ASCENDING]; + } + + enum Hint { + ORDER_FIRST = 1; + ANCESTOR_FIRST = 2; + FILTER_FIRST = 3; + } + optional Hint hint = 18; + + optional int32 count = 23; + + optional int32 offset = 12 [default = 0]; + + optional int32 limit = 16; + + optional CompiledCursor compiled_cursor = 30; + optional CompiledCursor end_compiled_cursor = 31; + + repeated CompositeIndex composite_index = 19; + + optional bool require_perfect_plan = 20 [default = false]; + + optional bool keys_only = 21 [default = false]; + + optional Transaction transaction = 22; + + optional bool compile = 25 [default = false]; + + optional int64 failover_ms = 26; + + optional bool strong = 32; + + repeated string property_name = 33; + + repeated string group_by_property_name = 34; + + optional bool distinct = 24; + + optional int64 min_safe_time_seconds = 35; + + repeated string safe_replica_name = 36; + + optional bool persist_offset = 37 [default=false]; +} + +message CompiledQuery { + required group PrimaryScan = 1 { + optional string index_name = 2; + + optional string start_key = 3; + optional bool start_inclusive = 4; + optional string end_key = 5; + optional bool end_inclusive = 6; + + repeated string start_postfix_value = 22; + repeated string end_postfix_value = 23; + + optional int64 end_unapplied_log_timestamp_us = 19; + } + + repeated group MergeJoinScan = 7 { + required string index_name = 8; + + repeated string prefix_value = 9; + + optional bool value_prefix = 20 [default=false]; + } + + optional Index index_def = 21; + + optional int32 offset = 10 [default = 0]; + + optional int32 limit = 11; + + required bool keys_only = 12; + + repeated string property_name = 24; + + optional int32 distinct_infix_size = 25; + + optional group EntityFilter = 13 { + optional bool distinct = 14 [default=false]; + + optional string kind = 17; + optional Reference ancestor = 18; + } +} + +message CompiledCursor { + optional group Position = 2 { + optional string start_key = 27; + + repeated group IndexValue = 29 { + optional string property = 30; + required PropertyValue value = 31; + } + + optional Reference key = 32; + + optional bool start_inclusive = 28 [default=true]; + } +} + +message Cursor { + required fixed64 cursor = 1; + + optional string app = 2; +} + +message Error { + enum ErrorCode { + BAD_REQUEST = 1; + CONCURRENT_TRANSACTION = 2; + INTERNAL_ERROR = 3; + NEED_INDEX = 4; + TIMEOUT = 5; + PERMISSION_DENIED = 6; + BIGTABLE_ERROR = 7; + COMMITTED_BUT_STILL_APPLYING = 8; + CAPABILITY_DISABLED = 9; + TRY_ALTERNATE_BACKEND = 10; + SAFE_TIME_TOO_OLD = 11; + } +} + +message Cost { + optional int32 index_writes = 1; + optional int32 index_write_bytes = 2; + optional int32 entity_writes = 3; + optional int32 entity_write_bytes = 4; + optional group CommitCost = 5 { + optional int32 requested_entity_puts = 6; + optional int32 requested_entity_deletes = 7; + }; + optional int32 approximate_storage_delta = 8; + optional int32 id_sequence_updates = 9; +} + +message GetRequest { + optional InternalHeader header = 6; + + repeated Reference key = 1; + optional Transaction transaction = 2; + + optional int64 failover_ms = 3; + + optional bool strong = 4; + + optional bool allow_deferred = 5 [default=false]; +} + +message GetResponse { + repeated group Entity = 1 { + optional EntityProto entity = 2; + optional Reference key = 4; + + optional int64 version = 3; + } + + repeated Reference deferred = 5; + + optional bool in_order = 6 [default=true]; +} + +message PutRequest { + optional InternalHeader header = 11; + + repeated EntityProto entity = 1; + optional Transaction transaction = 2; + repeated CompositeIndex composite_index = 3; + + optional bool trusted = 4 [default = false]; + + optional bool force = 7 [default = false]; + + optional bool mark_changes = 8 [default = false]; + repeated Snapshot snapshot = 9; + + enum AutoIdPolicy { + CURRENT = 0; + SEQUENTIAL = 1; + } + optional AutoIdPolicy auto_id_policy = 10 [default = CURRENT]; +} + +message PutResponse { + repeated Reference key = 1; + optional Cost cost = 2; + repeated int64 version = 3; +} + +message TouchRequest { + optional InternalHeader header = 10; + + repeated Reference key = 1; + repeated CompositeIndex composite_index = 2; + optional bool force = 3 [default = false]; + repeated Snapshot snapshot = 9; +} + +message TouchResponse { + optional Cost cost = 1; +} + +message DeleteRequest { + optional InternalHeader header = 10; + + repeated Reference key = 6; + optional Transaction transaction = 5; + + optional bool trusted = 4 [default = false]; + + optional bool force = 7 [default = false]; + + optional bool mark_changes = 8 [default = false]; + repeated Snapshot snapshot = 9; +} + +message DeleteResponse { + optional Cost cost = 1; + repeated int64 version = 3; +} + +message NextRequest { + optional InternalHeader header = 5; + + required Cursor cursor = 1; + optional int32 count = 2; + + optional int32 offset = 4 [default = 0]; + + optional bool compile = 3 [default = false]; +} + +message QueryResult { + optional Cursor cursor = 1; + + repeated EntityProto result = 2; + + optional int32 skipped_results = 7; + + required bool more_results = 3; + + optional bool keys_only = 4; + + optional bool index_only = 9; + + optional bool small_ops = 10; + + optional CompiledQuery compiled_query = 5; + + optional CompiledCursor compiled_cursor = 6; + + repeated CompositeIndex index = 8; + + repeated int64 version = 11; +} + +message AllocateIdsRequest { + optional InternalHeader header = 4; + + optional Reference model_key = 1; + + optional int64 size = 2; + + optional int64 max = 3; + + repeated Reference reserve = 5; +} + +message AllocateIdsResponse { + required int64 start = 1; + required int64 end = 2; + optional Cost cost = 3; +} + +message CompositeIndices { + repeated CompositeIndex index = 1; +} + +message AddActionsRequest { + optional InternalHeader header = 3; + + required Transaction transaction = 1; + repeated Action action = 2; +} + +message AddActionsResponse { +} + +message BeginTransactionRequest { + optional InternalHeader header = 3; + + required string app = 1; + optional bool allow_multiple_eg = 2 [default = false]; + optional string database_id = 4; + + enum TransactionMode { + UNKNOWN = 0; + READ_ONLY = 1; + READ_WRITE = 2; + } + optional TransactionMode mode = 5 [default = UNKNOWN]; + + optional Transaction previous_transaction = 7; +} + +message CommitResponse { + optional Cost cost = 1; + + repeated group Version = 3 { + required Reference root_entity_key = 4; + required int64 version = 5; + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity.go new file mode 100644 index 00000000000..9b4134e4257 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity.go @@ -0,0 +1,55 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package internal + +import ( + "os" + + netcontext "golang.org/x/net/context" +) + +var ( + // This is set to true in identity_classic.go, which is behind the appengine build tag. + // The appengine build tag is set for the first generation runtimes (<= Go 1.9) but not + // the second generation runtimes (>= Go 1.11), so this indicates whether we're on a + // first-gen runtime. See IsStandard below for the second-gen check. + appengineStandard bool + + // This is set to true in identity_flex.go, which is behind the appenginevm build tag. + appengineFlex bool +) + +// AppID is the implementation of the wrapper function of the same name in +// ../identity.go. See that file for commentary. +func AppID(c netcontext.Context) string { + return appID(FullyQualifiedAppID(c)) +} + +// IsStandard is the implementation of the wrapper function of the same name in +// ../appengine.go. See that file for commentary. +func IsStandard() bool { + // appengineStandard will be true for first-gen runtimes (<= Go 1.9) but not + // second-gen (>= Go 1.11). + return appengineStandard || IsSecondGen() +} + +// IsStandard is the implementation of the wrapper function of the same name in +// ../appengine.go. See that file for commentary. +func IsSecondGen() bool { + // Second-gen runtimes set $GAE_ENV so we use that to check if we're on a second-gen runtime. + return os.Getenv("GAE_ENV") == "standard" +} + +// IsFlex is the implementation of the wrapper function of the same name in +// ../appengine.go. See that file for commentary. +func IsFlex() bool { + return appengineFlex +} + +// IsAppEngine is the implementation of the wrapper function of the same name in +// ../appengine.go. See that file for commentary. +func IsAppEngine() bool { + return IsStandard() || IsFlex() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_classic.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_classic.go new file mode 100644 index 00000000000..4e979f45e34 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_classic.go @@ -0,0 +1,61 @@ +// Copyright 2015 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "appengine" + + netcontext "golang.org/x/net/context" +) + +func init() { + appengineStandard = true +} + +func DefaultVersionHostname(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return appengine.DefaultVersionHostname(c) +} + +func Datacenter(_ netcontext.Context) string { return appengine.Datacenter() } +func ServerSoftware() string { return appengine.ServerSoftware() } +func InstanceID() string { return appengine.InstanceID() } +func IsDevAppServer() bool { return appengine.IsDevAppServer() } + +func RequestID(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return appengine.RequestID(c) +} + +func ModuleName(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return appengine.ModuleName(c) +} +func VersionID(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return appengine.VersionID(c) +} + +func fullyQualifiedAppID(ctx netcontext.Context) string { + c := fromContext(ctx) + if c == nil { + panic(errNotAppEngineContext) + } + return c.FullyQualifiedAppID() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_flex.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_flex.go new file mode 100644 index 00000000000..d5e2e7b5e3f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_flex.go @@ -0,0 +1,11 @@ +// Copyright 2018 Google LLC. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appenginevm + +package internal + +func init() { + appengineFlex = true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_vm.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_vm.go new file mode 100644 index 00000000000..5d806726355 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/identity_vm.go @@ -0,0 +1,134 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build !appengine + +package internal + +import ( + "log" + "net/http" + "os" + "strings" + + netcontext "golang.org/x/net/context" +) + +// These functions are implementations of the wrapper functions +// in ../appengine/identity.go. See that file for commentary. + +const ( + hDefaultVersionHostname = "X-AppEngine-Default-Version-Hostname" + hRequestLogId = "X-AppEngine-Request-Log-Id" + hDatacenter = "X-AppEngine-Datacenter" +) + +func ctxHeaders(ctx netcontext.Context) http.Header { + c := fromContext(ctx) + if c == nil { + return nil + } + return c.Request().Header +} + +func DefaultVersionHostname(ctx netcontext.Context) string { + return ctxHeaders(ctx).Get(hDefaultVersionHostname) +} + +func RequestID(ctx netcontext.Context) string { + return ctxHeaders(ctx).Get(hRequestLogId) +} + +func Datacenter(ctx netcontext.Context) string { + if dc := ctxHeaders(ctx).Get(hDatacenter); dc != "" { + return dc + } + // If the header isn't set, read zone from the metadata service. + // It has the format projects/[NUMERIC_PROJECT_ID]/zones/[ZONE] + zone, err := getMetadata("instance/zone") + if err != nil { + log.Printf("Datacenter: %v", err) + return "" + } + parts := strings.Split(string(zone), "/") + if len(parts) == 0 { + return "" + } + return parts[len(parts)-1] +} + +func ServerSoftware() string { + // TODO(dsymonds): Remove fallback when we've verified this. + if s := os.Getenv("SERVER_SOFTWARE"); s != "" { + return s + } + if s := os.Getenv("GAE_ENV"); s != "" { + return s + } + return "Google App Engine/1.x.x" +} + +// TODO(dsymonds): Remove the metadata fetches. + +func ModuleName(_ netcontext.Context) string { + if s := os.Getenv("GAE_MODULE_NAME"); s != "" { + return s + } + if s := os.Getenv("GAE_SERVICE"); s != "" { + return s + } + return string(mustGetMetadata("instance/attributes/gae_backend_name")) +} + +func VersionID(_ netcontext.Context) string { + if s1, s2 := os.Getenv("GAE_MODULE_VERSION"), os.Getenv("GAE_MINOR_VERSION"); s1 != "" && s2 != "" { + return s1 + "." + s2 + } + if s1, s2 := os.Getenv("GAE_VERSION"), os.Getenv("GAE_DEPLOYMENT_ID"); s1 != "" && s2 != "" { + return s1 + "." + s2 + } + return string(mustGetMetadata("instance/attributes/gae_backend_version")) + "." + string(mustGetMetadata("instance/attributes/gae_backend_minor_version")) +} + +func InstanceID() string { + if s := os.Getenv("GAE_MODULE_INSTANCE"); s != "" { + return s + } + if s := os.Getenv("GAE_INSTANCE"); s != "" { + return s + } + return string(mustGetMetadata("instance/attributes/gae_backend_instance")) +} + +func partitionlessAppID() string { + // gae_project has everything except the partition prefix. + if appID := os.Getenv("GAE_LONG_APP_ID"); appID != "" { + return appID + } + if project := os.Getenv("GOOGLE_CLOUD_PROJECT"); project != "" { + return project + } + return string(mustGetMetadata("instance/attributes/gae_project")) +} + +func fullyQualifiedAppID(_ netcontext.Context) string { + if s := os.Getenv("GAE_APPLICATION"); s != "" { + return s + } + appID := partitionlessAppID() + + part := os.Getenv("GAE_PARTITION") + if part == "" { + part = string(mustGetMetadata("instance/attributes/gae_partition")) + } + + if part != "" { + appID = part + "~" + appID + } + return appID +} + +func IsDevAppServer() bool { + return os.Getenv("RUN_WITH_DEVAPPSERVER") != "" +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/internal.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/internal.go new file mode 100644 index 00000000000..051ea3980ab --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/internal.go @@ -0,0 +1,110 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// Package internal provides support for package appengine. +// +// Programs should not use this package directly. Its API is not stable. +// Use packages appengine and appengine/* instead. +package internal + +import ( + "fmt" + + "github.com/golang/protobuf/proto" + + remotepb "google.golang.org/appengine/internal/remote_api" +) + +// errorCodeMaps is a map of service name to the error code map for the service. +var errorCodeMaps = make(map[string]map[int32]string) + +// RegisterErrorCodeMap is called from API implementations to register their +// error code map. This should only be called from init functions. +func RegisterErrorCodeMap(service string, m map[int32]string) { + errorCodeMaps[service] = m +} + +type timeoutCodeKey struct { + service string + code int32 +} + +// timeoutCodes is the set of service+code pairs that represent timeouts. +var timeoutCodes = make(map[timeoutCodeKey]bool) + +func RegisterTimeoutErrorCode(service string, code int32) { + timeoutCodes[timeoutCodeKey{service, code}] = true +} + +// APIError is the type returned by appengine.Context's Call method +// when an API call fails in an API-specific way. This may be, for instance, +// a taskqueue API call failing with TaskQueueServiceError::UNKNOWN_QUEUE. +type APIError struct { + Service string + Detail string + Code int32 // API-specific error code +} + +func (e *APIError) Error() string { + if e.Code == 0 { + if e.Detail == "" { + return "APIError " + } + return e.Detail + } + s := fmt.Sprintf("API error %d", e.Code) + if m, ok := errorCodeMaps[e.Service]; ok { + s += " (" + e.Service + ": " + m[e.Code] + ")" + } else { + // Shouldn't happen, but provide a bit more detail if it does. + s = e.Service + " " + s + } + if e.Detail != "" { + s += ": " + e.Detail + } + return s +} + +func (e *APIError) IsTimeout() bool { + return timeoutCodes[timeoutCodeKey{e.Service, e.Code}] +} + +// CallError is the type returned by appengine.Context's Call method when an +// API call fails in a generic way, such as RpcError::CAPABILITY_DISABLED. +type CallError struct { + Detail string + Code int32 + // TODO: Remove this if we get a distinguishable error code. + Timeout bool +} + +func (e *CallError) Error() string { + var msg string + switch remotepb.RpcError_ErrorCode(e.Code) { + case remotepb.RpcError_UNKNOWN: + return e.Detail + case remotepb.RpcError_OVER_QUOTA: + msg = "Over quota" + case remotepb.RpcError_CAPABILITY_DISABLED: + msg = "Capability disabled" + case remotepb.RpcError_CANCELLED: + msg = "Canceled" + default: + msg = fmt.Sprintf("Call error %d", e.Code) + } + s := msg + ": " + e.Detail + if e.Timeout { + s += " (timeout)" + } + return s +} + +func (e *CallError) IsTimeout() bool { + return e.Timeout +} + +// NamespaceMods is a map from API service to a function that will mutate an RPC request to attach a namespace. +// The function should be prepared to be called on the same message more than once; it should only modify the +// RPC request the first time. +var NamespaceMods = make(map[string]func(m proto.Message, namespace string)) diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/log/log_service.pb.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/log/log_service.pb.go new file mode 100644 index 00000000000..8545ac4ad6a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/log/log_service.pb.go @@ -0,0 +1,1313 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google.golang.org/appengine/internal/log/log_service.proto + +package log + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type LogServiceError_ErrorCode int32 + +const ( + LogServiceError_OK LogServiceError_ErrorCode = 0 + LogServiceError_INVALID_REQUEST LogServiceError_ErrorCode = 1 + LogServiceError_STORAGE_ERROR LogServiceError_ErrorCode = 2 +) + +var LogServiceError_ErrorCode_name = map[int32]string{ + 0: "OK", + 1: "INVALID_REQUEST", + 2: "STORAGE_ERROR", +} +var LogServiceError_ErrorCode_value = map[string]int32{ + "OK": 0, + "INVALID_REQUEST": 1, + "STORAGE_ERROR": 2, +} + +func (x LogServiceError_ErrorCode) Enum() *LogServiceError_ErrorCode { + p := new(LogServiceError_ErrorCode) + *p = x + return p +} +func (x LogServiceError_ErrorCode) String() string { + return proto.EnumName(LogServiceError_ErrorCode_name, int32(x)) +} +func (x *LogServiceError_ErrorCode) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(LogServiceError_ErrorCode_value, data, "LogServiceError_ErrorCode") + if err != nil { + return err + } + *x = LogServiceError_ErrorCode(value) + return nil +} +func (LogServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{0, 0} +} + +type LogServiceError struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogServiceError) Reset() { *m = LogServiceError{} } +func (m *LogServiceError) String() string { return proto.CompactTextString(m) } +func (*LogServiceError) ProtoMessage() {} +func (*LogServiceError) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{0} +} +func (m *LogServiceError) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogServiceError.Unmarshal(m, b) +} +func (m *LogServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogServiceError.Marshal(b, m, deterministic) +} +func (dst *LogServiceError) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogServiceError.Merge(dst, src) +} +func (m *LogServiceError) XXX_Size() int { + return xxx_messageInfo_LogServiceError.Size(m) +} +func (m *LogServiceError) XXX_DiscardUnknown() { + xxx_messageInfo_LogServiceError.DiscardUnknown(m) +} + +var xxx_messageInfo_LogServiceError proto.InternalMessageInfo + +type UserAppLogLine struct { + TimestampUsec *int64 `protobuf:"varint,1,req,name=timestamp_usec,json=timestampUsec" json:"timestamp_usec,omitempty"` + Level *int64 `protobuf:"varint,2,req,name=level" json:"level,omitempty"` + Message *string `protobuf:"bytes,3,req,name=message" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UserAppLogLine) Reset() { *m = UserAppLogLine{} } +func (m *UserAppLogLine) String() string { return proto.CompactTextString(m) } +func (*UserAppLogLine) ProtoMessage() {} +func (*UserAppLogLine) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{1} +} +func (m *UserAppLogLine) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UserAppLogLine.Unmarshal(m, b) +} +func (m *UserAppLogLine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UserAppLogLine.Marshal(b, m, deterministic) +} +func (dst *UserAppLogLine) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserAppLogLine.Merge(dst, src) +} +func (m *UserAppLogLine) XXX_Size() int { + return xxx_messageInfo_UserAppLogLine.Size(m) +} +func (m *UserAppLogLine) XXX_DiscardUnknown() { + xxx_messageInfo_UserAppLogLine.DiscardUnknown(m) +} + +var xxx_messageInfo_UserAppLogLine proto.InternalMessageInfo + +func (m *UserAppLogLine) GetTimestampUsec() int64 { + if m != nil && m.TimestampUsec != nil { + return *m.TimestampUsec + } + return 0 +} + +func (m *UserAppLogLine) GetLevel() int64 { + if m != nil && m.Level != nil { + return *m.Level + } + return 0 +} + +func (m *UserAppLogLine) GetMessage() string { + if m != nil && m.Message != nil { + return *m.Message + } + return "" +} + +type UserAppLogGroup struct { + LogLine []*UserAppLogLine `protobuf:"bytes,2,rep,name=log_line,json=logLine" json:"log_line,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UserAppLogGroup) Reset() { *m = UserAppLogGroup{} } +func (m *UserAppLogGroup) String() string { return proto.CompactTextString(m) } +func (*UserAppLogGroup) ProtoMessage() {} +func (*UserAppLogGroup) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{2} +} +func (m *UserAppLogGroup) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UserAppLogGroup.Unmarshal(m, b) +} +func (m *UserAppLogGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UserAppLogGroup.Marshal(b, m, deterministic) +} +func (dst *UserAppLogGroup) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserAppLogGroup.Merge(dst, src) +} +func (m *UserAppLogGroup) XXX_Size() int { + return xxx_messageInfo_UserAppLogGroup.Size(m) +} +func (m *UserAppLogGroup) XXX_DiscardUnknown() { + xxx_messageInfo_UserAppLogGroup.DiscardUnknown(m) +} + +var xxx_messageInfo_UserAppLogGroup proto.InternalMessageInfo + +func (m *UserAppLogGroup) GetLogLine() []*UserAppLogLine { + if m != nil { + return m.LogLine + } + return nil +} + +type FlushRequest struct { + Logs []byte `protobuf:"bytes,1,opt,name=logs" json:"logs,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FlushRequest) Reset() { *m = FlushRequest{} } +func (m *FlushRequest) String() string { return proto.CompactTextString(m) } +func (*FlushRequest) ProtoMessage() {} +func (*FlushRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{3} +} +func (m *FlushRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FlushRequest.Unmarshal(m, b) +} +func (m *FlushRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FlushRequest.Marshal(b, m, deterministic) +} +func (dst *FlushRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_FlushRequest.Merge(dst, src) +} +func (m *FlushRequest) XXX_Size() int { + return xxx_messageInfo_FlushRequest.Size(m) +} +func (m *FlushRequest) XXX_DiscardUnknown() { + xxx_messageInfo_FlushRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_FlushRequest proto.InternalMessageInfo + +func (m *FlushRequest) GetLogs() []byte { + if m != nil { + return m.Logs + } + return nil +} + +type SetStatusRequest struct { + Status *string `protobuf:"bytes,1,req,name=status" json:"status,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetStatusRequest) Reset() { *m = SetStatusRequest{} } +func (m *SetStatusRequest) String() string { return proto.CompactTextString(m) } +func (*SetStatusRequest) ProtoMessage() {} +func (*SetStatusRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{4} +} +func (m *SetStatusRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetStatusRequest.Unmarshal(m, b) +} +func (m *SetStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetStatusRequest.Marshal(b, m, deterministic) +} +func (dst *SetStatusRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetStatusRequest.Merge(dst, src) +} +func (m *SetStatusRequest) XXX_Size() int { + return xxx_messageInfo_SetStatusRequest.Size(m) +} +func (m *SetStatusRequest) XXX_DiscardUnknown() { + xxx_messageInfo_SetStatusRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_SetStatusRequest proto.InternalMessageInfo + +func (m *SetStatusRequest) GetStatus() string { + if m != nil && m.Status != nil { + return *m.Status + } + return "" +} + +type LogOffset struct { + RequestId []byte `protobuf:"bytes,1,opt,name=request_id,json=requestId" json:"request_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogOffset) Reset() { *m = LogOffset{} } +func (m *LogOffset) String() string { return proto.CompactTextString(m) } +func (*LogOffset) ProtoMessage() {} +func (*LogOffset) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{5} +} +func (m *LogOffset) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogOffset.Unmarshal(m, b) +} +func (m *LogOffset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogOffset.Marshal(b, m, deterministic) +} +func (dst *LogOffset) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogOffset.Merge(dst, src) +} +func (m *LogOffset) XXX_Size() int { + return xxx_messageInfo_LogOffset.Size(m) +} +func (m *LogOffset) XXX_DiscardUnknown() { + xxx_messageInfo_LogOffset.DiscardUnknown(m) +} + +var xxx_messageInfo_LogOffset proto.InternalMessageInfo + +func (m *LogOffset) GetRequestId() []byte { + if m != nil { + return m.RequestId + } + return nil +} + +type LogLine struct { + Time *int64 `protobuf:"varint,1,req,name=time" json:"time,omitempty"` + Level *int32 `protobuf:"varint,2,req,name=level" json:"level,omitempty"` + LogMessage *string `protobuf:"bytes,3,req,name=log_message,json=logMessage" json:"log_message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogLine) Reset() { *m = LogLine{} } +func (m *LogLine) String() string { return proto.CompactTextString(m) } +func (*LogLine) ProtoMessage() {} +func (*LogLine) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{6} +} +func (m *LogLine) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogLine.Unmarshal(m, b) +} +func (m *LogLine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogLine.Marshal(b, m, deterministic) +} +func (dst *LogLine) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogLine.Merge(dst, src) +} +func (m *LogLine) XXX_Size() int { + return xxx_messageInfo_LogLine.Size(m) +} +func (m *LogLine) XXX_DiscardUnknown() { + xxx_messageInfo_LogLine.DiscardUnknown(m) +} + +var xxx_messageInfo_LogLine proto.InternalMessageInfo + +func (m *LogLine) GetTime() int64 { + if m != nil && m.Time != nil { + return *m.Time + } + return 0 +} + +func (m *LogLine) GetLevel() int32 { + if m != nil && m.Level != nil { + return *m.Level + } + return 0 +} + +func (m *LogLine) GetLogMessage() string { + if m != nil && m.LogMessage != nil { + return *m.LogMessage + } + return "" +} + +type RequestLog struct { + AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"` + ModuleId *string `protobuf:"bytes,37,opt,name=module_id,json=moduleId,def=default" json:"module_id,omitempty"` + VersionId *string `protobuf:"bytes,2,req,name=version_id,json=versionId" json:"version_id,omitempty"` + RequestId []byte `protobuf:"bytes,3,req,name=request_id,json=requestId" json:"request_id,omitempty"` + Offset *LogOffset `protobuf:"bytes,35,opt,name=offset" json:"offset,omitempty"` + Ip *string `protobuf:"bytes,4,req,name=ip" json:"ip,omitempty"` + Nickname *string `protobuf:"bytes,5,opt,name=nickname" json:"nickname,omitempty"` + StartTime *int64 `protobuf:"varint,6,req,name=start_time,json=startTime" json:"start_time,omitempty"` + EndTime *int64 `protobuf:"varint,7,req,name=end_time,json=endTime" json:"end_time,omitempty"` + Latency *int64 `protobuf:"varint,8,req,name=latency" json:"latency,omitempty"` + Mcycles *int64 `protobuf:"varint,9,req,name=mcycles" json:"mcycles,omitempty"` + Method *string `protobuf:"bytes,10,req,name=method" json:"method,omitempty"` + Resource *string `protobuf:"bytes,11,req,name=resource" json:"resource,omitempty"` + HttpVersion *string `protobuf:"bytes,12,req,name=http_version,json=httpVersion" json:"http_version,omitempty"` + Status *int32 `protobuf:"varint,13,req,name=status" json:"status,omitempty"` + ResponseSize *int64 `protobuf:"varint,14,req,name=response_size,json=responseSize" json:"response_size,omitempty"` + Referrer *string `protobuf:"bytes,15,opt,name=referrer" json:"referrer,omitempty"` + UserAgent *string `protobuf:"bytes,16,opt,name=user_agent,json=userAgent" json:"user_agent,omitempty"` + UrlMapEntry *string `protobuf:"bytes,17,req,name=url_map_entry,json=urlMapEntry" json:"url_map_entry,omitempty"` + Combined *string `protobuf:"bytes,18,req,name=combined" json:"combined,omitempty"` + ApiMcycles *int64 `protobuf:"varint,19,opt,name=api_mcycles,json=apiMcycles" json:"api_mcycles,omitempty"` + Host *string `protobuf:"bytes,20,opt,name=host" json:"host,omitempty"` + Cost *float64 `protobuf:"fixed64,21,opt,name=cost" json:"cost,omitempty"` + TaskQueueName *string `protobuf:"bytes,22,opt,name=task_queue_name,json=taskQueueName" json:"task_queue_name,omitempty"` + TaskName *string `protobuf:"bytes,23,opt,name=task_name,json=taskName" json:"task_name,omitempty"` + WasLoadingRequest *bool `protobuf:"varint,24,opt,name=was_loading_request,json=wasLoadingRequest" json:"was_loading_request,omitempty"` + PendingTime *int64 `protobuf:"varint,25,opt,name=pending_time,json=pendingTime" json:"pending_time,omitempty"` + ReplicaIndex *int32 `protobuf:"varint,26,opt,name=replica_index,json=replicaIndex,def=-1" json:"replica_index,omitempty"` + Finished *bool `protobuf:"varint,27,opt,name=finished,def=1" json:"finished,omitempty"` + CloneKey []byte `protobuf:"bytes,28,opt,name=clone_key,json=cloneKey" json:"clone_key,omitempty"` + Line []*LogLine `protobuf:"bytes,29,rep,name=line" json:"line,omitempty"` + LinesIncomplete *bool `protobuf:"varint,36,opt,name=lines_incomplete,json=linesIncomplete" json:"lines_incomplete,omitempty"` + AppEngineRelease []byte `protobuf:"bytes,38,opt,name=app_engine_release,json=appEngineRelease" json:"app_engine_release,omitempty"` + ExitReason *int32 `protobuf:"varint,30,opt,name=exit_reason,json=exitReason" json:"exit_reason,omitempty"` + WasThrottledForTime *bool `protobuf:"varint,31,opt,name=was_throttled_for_time,json=wasThrottledForTime" json:"was_throttled_for_time,omitempty"` + WasThrottledForRequests *bool `protobuf:"varint,32,opt,name=was_throttled_for_requests,json=wasThrottledForRequests" json:"was_throttled_for_requests,omitempty"` + ThrottledTime *int64 `protobuf:"varint,33,opt,name=throttled_time,json=throttledTime" json:"throttled_time,omitempty"` + ServerName []byte `protobuf:"bytes,34,opt,name=server_name,json=serverName" json:"server_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RequestLog) Reset() { *m = RequestLog{} } +func (m *RequestLog) String() string { return proto.CompactTextString(m) } +func (*RequestLog) ProtoMessage() {} +func (*RequestLog) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{7} +} +func (m *RequestLog) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RequestLog.Unmarshal(m, b) +} +func (m *RequestLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RequestLog.Marshal(b, m, deterministic) +} +func (dst *RequestLog) XXX_Merge(src proto.Message) { + xxx_messageInfo_RequestLog.Merge(dst, src) +} +func (m *RequestLog) XXX_Size() int { + return xxx_messageInfo_RequestLog.Size(m) +} +func (m *RequestLog) XXX_DiscardUnknown() { + xxx_messageInfo_RequestLog.DiscardUnknown(m) +} + +var xxx_messageInfo_RequestLog proto.InternalMessageInfo + +const Default_RequestLog_ModuleId string = "default" +const Default_RequestLog_ReplicaIndex int32 = -1 +const Default_RequestLog_Finished bool = true + +func (m *RequestLog) GetAppId() string { + if m != nil && m.AppId != nil { + return *m.AppId + } + return "" +} + +func (m *RequestLog) GetModuleId() string { + if m != nil && m.ModuleId != nil { + return *m.ModuleId + } + return Default_RequestLog_ModuleId +} + +func (m *RequestLog) GetVersionId() string { + if m != nil && m.VersionId != nil { + return *m.VersionId + } + return "" +} + +func (m *RequestLog) GetRequestId() []byte { + if m != nil { + return m.RequestId + } + return nil +} + +func (m *RequestLog) GetOffset() *LogOffset { + if m != nil { + return m.Offset + } + return nil +} + +func (m *RequestLog) GetIp() string { + if m != nil && m.Ip != nil { + return *m.Ip + } + return "" +} + +func (m *RequestLog) GetNickname() string { + if m != nil && m.Nickname != nil { + return *m.Nickname + } + return "" +} + +func (m *RequestLog) GetStartTime() int64 { + if m != nil && m.StartTime != nil { + return *m.StartTime + } + return 0 +} + +func (m *RequestLog) GetEndTime() int64 { + if m != nil && m.EndTime != nil { + return *m.EndTime + } + return 0 +} + +func (m *RequestLog) GetLatency() int64 { + if m != nil && m.Latency != nil { + return *m.Latency + } + return 0 +} + +func (m *RequestLog) GetMcycles() int64 { + if m != nil && m.Mcycles != nil { + return *m.Mcycles + } + return 0 +} + +func (m *RequestLog) GetMethod() string { + if m != nil && m.Method != nil { + return *m.Method + } + return "" +} + +func (m *RequestLog) GetResource() string { + if m != nil && m.Resource != nil { + return *m.Resource + } + return "" +} + +func (m *RequestLog) GetHttpVersion() string { + if m != nil && m.HttpVersion != nil { + return *m.HttpVersion + } + return "" +} + +func (m *RequestLog) GetStatus() int32 { + if m != nil && m.Status != nil { + return *m.Status + } + return 0 +} + +func (m *RequestLog) GetResponseSize() int64 { + if m != nil && m.ResponseSize != nil { + return *m.ResponseSize + } + return 0 +} + +func (m *RequestLog) GetReferrer() string { + if m != nil && m.Referrer != nil { + return *m.Referrer + } + return "" +} + +func (m *RequestLog) GetUserAgent() string { + if m != nil && m.UserAgent != nil { + return *m.UserAgent + } + return "" +} + +func (m *RequestLog) GetUrlMapEntry() string { + if m != nil && m.UrlMapEntry != nil { + return *m.UrlMapEntry + } + return "" +} + +func (m *RequestLog) GetCombined() string { + if m != nil && m.Combined != nil { + return *m.Combined + } + return "" +} + +func (m *RequestLog) GetApiMcycles() int64 { + if m != nil && m.ApiMcycles != nil { + return *m.ApiMcycles + } + return 0 +} + +func (m *RequestLog) GetHost() string { + if m != nil && m.Host != nil { + return *m.Host + } + return "" +} + +func (m *RequestLog) GetCost() float64 { + if m != nil && m.Cost != nil { + return *m.Cost + } + return 0 +} + +func (m *RequestLog) GetTaskQueueName() string { + if m != nil && m.TaskQueueName != nil { + return *m.TaskQueueName + } + return "" +} + +func (m *RequestLog) GetTaskName() string { + if m != nil && m.TaskName != nil { + return *m.TaskName + } + return "" +} + +func (m *RequestLog) GetWasLoadingRequest() bool { + if m != nil && m.WasLoadingRequest != nil { + return *m.WasLoadingRequest + } + return false +} + +func (m *RequestLog) GetPendingTime() int64 { + if m != nil && m.PendingTime != nil { + return *m.PendingTime + } + return 0 +} + +func (m *RequestLog) GetReplicaIndex() int32 { + if m != nil && m.ReplicaIndex != nil { + return *m.ReplicaIndex + } + return Default_RequestLog_ReplicaIndex +} + +func (m *RequestLog) GetFinished() bool { + if m != nil && m.Finished != nil { + return *m.Finished + } + return Default_RequestLog_Finished +} + +func (m *RequestLog) GetCloneKey() []byte { + if m != nil { + return m.CloneKey + } + return nil +} + +func (m *RequestLog) GetLine() []*LogLine { + if m != nil { + return m.Line + } + return nil +} + +func (m *RequestLog) GetLinesIncomplete() bool { + if m != nil && m.LinesIncomplete != nil { + return *m.LinesIncomplete + } + return false +} + +func (m *RequestLog) GetAppEngineRelease() []byte { + if m != nil { + return m.AppEngineRelease + } + return nil +} + +func (m *RequestLog) GetExitReason() int32 { + if m != nil && m.ExitReason != nil { + return *m.ExitReason + } + return 0 +} + +func (m *RequestLog) GetWasThrottledForTime() bool { + if m != nil && m.WasThrottledForTime != nil { + return *m.WasThrottledForTime + } + return false +} + +func (m *RequestLog) GetWasThrottledForRequests() bool { + if m != nil && m.WasThrottledForRequests != nil { + return *m.WasThrottledForRequests + } + return false +} + +func (m *RequestLog) GetThrottledTime() int64 { + if m != nil && m.ThrottledTime != nil { + return *m.ThrottledTime + } + return 0 +} + +func (m *RequestLog) GetServerName() []byte { + if m != nil { + return m.ServerName + } + return nil +} + +type LogModuleVersion struct { + ModuleId *string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,def=default" json:"module_id,omitempty"` + VersionId *string `protobuf:"bytes,2,opt,name=version_id,json=versionId" json:"version_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogModuleVersion) Reset() { *m = LogModuleVersion{} } +func (m *LogModuleVersion) String() string { return proto.CompactTextString(m) } +func (*LogModuleVersion) ProtoMessage() {} +func (*LogModuleVersion) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{8} +} +func (m *LogModuleVersion) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogModuleVersion.Unmarshal(m, b) +} +func (m *LogModuleVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogModuleVersion.Marshal(b, m, deterministic) +} +func (dst *LogModuleVersion) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogModuleVersion.Merge(dst, src) +} +func (m *LogModuleVersion) XXX_Size() int { + return xxx_messageInfo_LogModuleVersion.Size(m) +} +func (m *LogModuleVersion) XXX_DiscardUnknown() { + xxx_messageInfo_LogModuleVersion.DiscardUnknown(m) +} + +var xxx_messageInfo_LogModuleVersion proto.InternalMessageInfo + +const Default_LogModuleVersion_ModuleId string = "default" + +func (m *LogModuleVersion) GetModuleId() string { + if m != nil && m.ModuleId != nil { + return *m.ModuleId + } + return Default_LogModuleVersion_ModuleId +} + +func (m *LogModuleVersion) GetVersionId() string { + if m != nil && m.VersionId != nil { + return *m.VersionId + } + return "" +} + +type LogReadRequest struct { + AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"` + VersionId []string `protobuf:"bytes,2,rep,name=version_id,json=versionId" json:"version_id,omitempty"` + ModuleVersion []*LogModuleVersion `protobuf:"bytes,19,rep,name=module_version,json=moduleVersion" json:"module_version,omitempty"` + StartTime *int64 `protobuf:"varint,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + EndTime *int64 `protobuf:"varint,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + Offset *LogOffset `protobuf:"bytes,5,opt,name=offset" json:"offset,omitempty"` + RequestId [][]byte `protobuf:"bytes,6,rep,name=request_id,json=requestId" json:"request_id,omitempty"` + MinimumLogLevel *int32 `protobuf:"varint,7,opt,name=minimum_log_level,json=minimumLogLevel" json:"minimum_log_level,omitempty"` + IncludeIncomplete *bool `protobuf:"varint,8,opt,name=include_incomplete,json=includeIncomplete" json:"include_incomplete,omitempty"` + Count *int64 `protobuf:"varint,9,opt,name=count" json:"count,omitempty"` + CombinedLogRegex *string `protobuf:"bytes,14,opt,name=combined_log_regex,json=combinedLogRegex" json:"combined_log_regex,omitempty"` + HostRegex *string `protobuf:"bytes,15,opt,name=host_regex,json=hostRegex" json:"host_regex,omitempty"` + ReplicaIndex *int32 `protobuf:"varint,16,opt,name=replica_index,json=replicaIndex" json:"replica_index,omitempty"` + IncludeAppLogs *bool `protobuf:"varint,10,opt,name=include_app_logs,json=includeAppLogs" json:"include_app_logs,omitempty"` + AppLogsPerRequest *int32 `protobuf:"varint,17,opt,name=app_logs_per_request,json=appLogsPerRequest" json:"app_logs_per_request,omitempty"` + IncludeHost *bool `protobuf:"varint,11,opt,name=include_host,json=includeHost" json:"include_host,omitempty"` + IncludeAll *bool `protobuf:"varint,12,opt,name=include_all,json=includeAll" json:"include_all,omitempty"` + CacheIterator *bool `protobuf:"varint,13,opt,name=cache_iterator,json=cacheIterator" json:"cache_iterator,omitempty"` + NumShards *int32 `protobuf:"varint,18,opt,name=num_shards,json=numShards" json:"num_shards,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogReadRequest) Reset() { *m = LogReadRequest{} } +func (m *LogReadRequest) String() string { return proto.CompactTextString(m) } +func (*LogReadRequest) ProtoMessage() {} +func (*LogReadRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{9} +} +func (m *LogReadRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogReadRequest.Unmarshal(m, b) +} +func (m *LogReadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogReadRequest.Marshal(b, m, deterministic) +} +func (dst *LogReadRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogReadRequest.Merge(dst, src) +} +func (m *LogReadRequest) XXX_Size() int { + return xxx_messageInfo_LogReadRequest.Size(m) +} +func (m *LogReadRequest) XXX_DiscardUnknown() { + xxx_messageInfo_LogReadRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_LogReadRequest proto.InternalMessageInfo + +func (m *LogReadRequest) GetAppId() string { + if m != nil && m.AppId != nil { + return *m.AppId + } + return "" +} + +func (m *LogReadRequest) GetVersionId() []string { + if m != nil { + return m.VersionId + } + return nil +} + +func (m *LogReadRequest) GetModuleVersion() []*LogModuleVersion { + if m != nil { + return m.ModuleVersion + } + return nil +} + +func (m *LogReadRequest) GetStartTime() int64 { + if m != nil && m.StartTime != nil { + return *m.StartTime + } + return 0 +} + +func (m *LogReadRequest) GetEndTime() int64 { + if m != nil && m.EndTime != nil { + return *m.EndTime + } + return 0 +} + +func (m *LogReadRequest) GetOffset() *LogOffset { + if m != nil { + return m.Offset + } + return nil +} + +func (m *LogReadRequest) GetRequestId() [][]byte { + if m != nil { + return m.RequestId + } + return nil +} + +func (m *LogReadRequest) GetMinimumLogLevel() int32 { + if m != nil && m.MinimumLogLevel != nil { + return *m.MinimumLogLevel + } + return 0 +} + +func (m *LogReadRequest) GetIncludeIncomplete() bool { + if m != nil && m.IncludeIncomplete != nil { + return *m.IncludeIncomplete + } + return false +} + +func (m *LogReadRequest) GetCount() int64 { + if m != nil && m.Count != nil { + return *m.Count + } + return 0 +} + +func (m *LogReadRequest) GetCombinedLogRegex() string { + if m != nil && m.CombinedLogRegex != nil { + return *m.CombinedLogRegex + } + return "" +} + +func (m *LogReadRequest) GetHostRegex() string { + if m != nil && m.HostRegex != nil { + return *m.HostRegex + } + return "" +} + +func (m *LogReadRequest) GetReplicaIndex() int32 { + if m != nil && m.ReplicaIndex != nil { + return *m.ReplicaIndex + } + return 0 +} + +func (m *LogReadRequest) GetIncludeAppLogs() bool { + if m != nil && m.IncludeAppLogs != nil { + return *m.IncludeAppLogs + } + return false +} + +func (m *LogReadRequest) GetAppLogsPerRequest() int32 { + if m != nil && m.AppLogsPerRequest != nil { + return *m.AppLogsPerRequest + } + return 0 +} + +func (m *LogReadRequest) GetIncludeHost() bool { + if m != nil && m.IncludeHost != nil { + return *m.IncludeHost + } + return false +} + +func (m *LogReadRequest) GetIncludeAll() bool { + if m != nil && m.IncludeAll != nil { + return *m.IncludeAll + } + return false +} + +func (m *LogReadRequest) GetCacheIterator() bool { + if m != nil && m.CacheIterator != nil { + return *m.CacheIterator + } + return false +} + +func (m *LogReadRequest) GetNumShards() int32 { + if m != nil && m.NumShards != nil { + return *m.NumShards + } + return 0 +} + +type LogReadResponse struct { + Log []*RequestLog `protobuf:"bytes,1,rep,name=log" json:"log,omitempty"` + Offset *LogOffset `protobuf:"bytes,2,opt,name=offset" json:"offset,omitempty"` + LastEndTime *int64 `protobuf:"varint,3,opt,name=last_end_time,json=lastEndTime" json:"last_end_time,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogReadResponse) Reset() { *m = LogReadResponse{} } +func (m *LogReadResponse) String() string { return proto.CompactTextString(m) } +func (*LogReadResponse) ProtoMessage() {} +func (*LogReadResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{10} +} +func (m *LogReadResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogReadResponse.Unmarshal(m, b) +} +func (m *LogReadResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogReadResponse.Marshal(b, m, deterministic) +} +func (dst *LogReadResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogReadResponse.Merge(dst, src) +} +func (m *LogReadResponse) XXX_Size() int { + return xxx_messageInfo_LogReadResponse.Size(m) +} +func (m *LogReadResponse) XXX_DiscardUnknown() { + xxx_messageInfo_LogReadResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_LogReadResponse proto.InternalMessageInfo + +func (m *LogReadResponse) GetLog() []*RequestLog { + if m != nil { + return m.Log + } + return nil +} + +func (m *LogReadResponse) GetOffset() *LogOffset { + if m != nil { + return m.Offset + } + return nil +} + +func (m *LogReadResponse) GetLastEndTime() int64 { + if m != nil && m.LastEndTime != nil { + return *m.LastEndTime + } + return 0 +} + +type LogUsageRecord struct { + VersionId *string `protobuf:"bytes,1,opt,name=version_id,json=versionId" json:"version_id,omitempty"` + StartTime *int32 `protobuf:"varint,2,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + EndTime *int32 `protobuf:"varint,3,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + Count *int64 `protobuf:"varint,4,opt,name=count" json:"count,omitempty"` + TotalSize *int64 `protobuf:"varint,5,opt,name=total_size,json=totalSize" json:"total_size,omitempty"` + Records *int32 `protobuf:"varint,6,opt,name=records" json:"records,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogUsageRecord) Reset() { *m = LogUsageRecord{} } +func (m *LogUsageRecord) String() string { return proto.CompactTextString(m) } +func (*LogUsageRecord) ProtoMessage() {} +func (*LogUsageRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{11} +} +func (m *LogUsageRecord) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogUsageRecord.Unmarshal(m, b) +} +func (m *LogUsageRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogUsageRecord.Marshal(b, m, deterministic) +} +func (dst *LogUsageRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogUsageRecord.Merge(dst, src) +} +func (m *LogUsageRecord) XXX_Size() int { + return xxx_messageInfo_LogUsageRecord.Size(m) +} +func (m *LogUsageRecord) XXX_DiscardUnknown() { + xxx_messageInfo_LogUsageRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_LogUsageRecord proto.InternalMessageInfo + +func (m *LogUsageRecord) GetVersionId() string { + if m != nil && m.VersionId != nil { + return *m.VersionId + } + return "" +} + +func (m *LogUsageRecord) GetStartTime() int32 { + if m != nil && m.StartTime != nil { + return *m.StartTime + } + return 0 +} + +func (m *LogUsageRecord) GetEndTime() int32 { + if m != nil && m.EndTime != nil { + return *m.EndTime + } + return 0 +} + +func (m *LogUsageRecord) GetCount() int64 { + if m != nil && m.Count != nil { + return *m.Count + } + return 0 +} + +func (m *LogUsageRecord) GetTotalSize() int64 { + if m != nil && m.TotalSize != nil { + return *m.TotalSize + } + return 0 +} + +func (m *LogUsageRecord) GetRecords() int32 { + if m != nil && m.Records != nil { + return *m.Records + } + return 0 +} + +type LogUsageRequest struct { + AppId *string `protobuf:"bytes,1,req,name=app_id,json=appId" json:"app_id,omitempty"` + VersionId []string `protobuf:"bytes,2,rep,name=version_id,json=versionId" json:"version_id,omitempty"` + StartTime *int32 `protobuf:"varint,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"` + EndTime *int32 `protobuf:"varint,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"` + ResolutionHours *uint32 `protobuf:"varint,5,opt,name=resolution_hours,json=resolutionHours,def=1" json:"resolution_hours,omitempty"` + CombineVersions *bool `protobuf:"varint,6,opt,name=combine_versions,json=combineVersions" json:"combine_versions,omitempty"` + UsageVersion *int32 `protobuf:"varint,7,opt,name=usage_version,json=usageVersion" json:"usage_version,omitempty"` + VersionsOnly *bool `protobuf:"varint,8,opt,name=versions_only,json=versionsOnly" json:"versions_only,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogUsageRequest) Reset() { *m = LogUsageRequest{} } +func (m *LogUsageRequest) String() string { return proto.CompactTextString(m) } +func (*LogUsageRequest) ProtoMessage() {} +func (*LogUsageRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{12} +} +func (m *LogUsageRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogUsageRequest.Unmarshal(m, b) +} +func (m *LogUsageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogUsageRequest.Marshal(b, m, deterministic) +} +func (dst *LogUsageRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogUsageRequest.Merge(dst, src) +} +func (m *LogUsageRequest) XXX_Size() int { + return xxx_messageInfo_LogUsageRequest.Size(m) +} +func (m *LogUsageRequest) XXX_DiscardUnknown() { + xxx_messageInfo_LogUsageRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_LogUsageRequest proto.InternalMessageInfo + +const Default_LogUsageRequest_ResolutionHours uint32 = 1 + +func (m *LogUsageRequest) GetAppId() string { + if m != nil && m.AppId != nil { + return *m.AppId + } + return "" +} + +func (m *LogUsageRequest) GetVersionId() []string { + if m != nil { + return m.VersionId + } + return nil +} + +func (m *LogUsageRequest) GetStartTime() int32 { + if m != nil && m.StartTime != nil { + return *m.StartTime + } + return 0 +} + +func (m *LogUsageRequest) GetEndTime() int32 { + if m != nil && m.EndTime != nil { + return *m.EndTime + } + return 0 +} + +func (m *LogUsageRequest) GetResolutionHours() uint32 { + if m != nil && m.ResolutionHours != nil { + return *m.ResolutionHours + } + return Default_LogUsageRequest_ResolutionHours +} + +func (m *LogUsageRequest) GetCombineVersions() bool { + if m != nil && m.CombineVersions != nil { + return *m.CombineVersions + } + return false +} + +func (m *LogUsageRequest) GetUsageVersion() int32 { + if m != nil && m.UsageVersion != nil { + return *m.UsageVersion + } + return 0 +} + +func (m *LogUsageRequest) GetVersionsOnly() bool { + if m != nil && m.VersionsOnly != nil { + return *m.VersionsOnly + } + return false +} + +type LogUsageResponse struct { + Usage []*LogUsageRecord `protobuf:"bytes,1,rep,name=usage" json:"usage,omitempty"` + Summary *LogUsageRecord `protobuf:"bytes,2,opt,name=summary" json:"summary,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LogUsageResponse) Reset() { *m = LogUsageResponse{} } +func (m *LogUsageResponse) String() string { return proto.CompactTextString(m) } +func (*LogUsageResponse) ProtoMessage() {} +func (*LogUsageResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_log_service_f054fd4b5012319d, []int{13} +} +func (m *LogUsageResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LogUsageResponse.Unmarshal(m, b) +} +func (m *LogUsageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LogUsageResponse.Marshal(b, m, deterministic) +} +func (dst *LogUsageResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogUsageResponse.Merge(dst, src) +} +func (m *LogUsageResponse) XXX_Size() int { + return xxx_messageInfo_LogUsageResponse.Size(m) +} +func (m *LogUsageResponse) XXX_DiscardUnknown() { + xxx_messageInfo_LogUsageResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_LogUsageResponse proto.InternalMessageInfo + +func (m *LogUsageResponse) GetUsage() []*LogUsageRecord { + if m != nil { + return m.Usage + } + return nil +} + +func (m *LogUsageResponse) GetSummary() *LogUsageRecord { + if m != nil { + return m.Summary + } + return nil +} + +func init() { + proto.RegisterType((*LogServiceError)(nil), "appengine.LogServiceError") + proto.RegisterType((*UserAppLogLine)(nil), "appengine.UserAppLogLine") + proto.RegisterType((*UserAppLogGroup)(nil), "appengine.UserAppLogGroup") + proto.RegisterType((*FlushRequest)(nil), "appengine.FlushRequest") + proto.RegisterType((*SetStatusRequest)(nil), "appengine.SetStatusRequest") + proto.RegisterType((*LogOffset)(nil), "appengine.LogOffset") + proto.RegisterType((*LogLine)(nil), "appengine.LogLine") + proto.RegisterType((*RequestLog)(nil), "appengine.RequestLog") + proto.RegisterType((*LogModuleVersion)(nil), "appengine.LogModuleVersion") + proto.RegisterType((*LogReadRequest)(nil), "appengine.LogReadRequest") + proto.RegisterType((*LogReadResponse)(nil), "appengine.LogReadResponse") + proto.RegisterType((*LogUsageRecord)(nil), "appengine.LogUsageRecord") + proto.RegisterType((*LogUsageRequest)(nil), "appengine.LogUsageRequest") + proto.RegisterType((*LogUsageResponse)(nil), "appengine.LogUsageResponse") +} + +func init() { + proto.RegisterFile("google.golang.org/appengine/internal/log/log_service.proto", fileDescriptor_log_service_f054fd4b5012319d) +} + +var fileDescriptor_log_service_f054fd4b5012319d = []byte{ + // 1553 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x72, 0xdb, 0xc6, + 0x15, 0x2e, 0x48, 0x51, 0x24, 0x0f, 0x49, 0x91, 0x5a, 0xcb, 0xce, 0xda, 0xae, 0x6b, 0x1a, 0x4e, + 0x1c, 0xd6, 0x93, 0x48, 0x93, 0xa4, 0x57, 0xca, 0x95, 0xd3, 0x2a, 0x8e, 0x26, 0xb4, 0xd5, 0x40, + 0x72, 0x3a, 0xd3, 0x1b, 0x0c, 0x0a, 0x1c, 0x81, 0x18, 0x2f, 0xb1, 0xc8, 0xee, 0xc2, 0x91, 0x72, + 0xdb, 0xdb, 0x3e, 0x46, 0x1f, 0xa2, 0xaf, 0xd2, 0xb7, 0xe9, 0xec, 0xd9, 0x05, 0x44, 0x2a, 0x4d, + 0xc6, 0x33, 0xb9, 0xe0, 0x10, 0xfb, 0x9d, 0x83, 0xdd, 0xf3, 0xf3, 0x9d, 0x6f, 0x01, 0xc7, 0xb9, + 0x94, 0xb9, 0xc0, 0xc3, 0x5c, 0x8a, 0xa4, 0xcc, 0x0f, 0xa5, 0xca, 0x8f, 0x92, 0xaa, 0xc2, 0x32, + 0x2f, 0x4a, 0x3c, 0x2a, 0x4a, 0x83, 0xaa, 0x4c, 0xc4, 0x91, 0x90, 0xb9, 0xfd, 0xc5, 0x1a, 0xd5, + 0xbb, 0x22, 0xc5, 0xc3, 0x4a, 0x49, 0x23, 0xd9, 0xb0, 0xf5, 0x0c, 0x5f, 0xc3, 0x74, 0x29, 0xf3, + 0x73, 0x67, 0x3e, 0x51, 0x4a, 0xaa, 0xf0, 0x4b, 0x18, 0xd2, 0xc3, 0x9f, 0x65, 0x86, 0x6c, 0x17, + 0x3a, 0x67, 0xdf, 0xce, 0x7e, 0xc7, 0xee, 0xc0, 0xf4, 0xf4, 0xf5, 0xf7, 0x2f, 0x96, 0xa7, 0x7f, + 0x89, 0xa3, 0x93, 0xef, 0xde, 0x9c, 0x9c, 0x5f, 0xcc, 0x02, 0xb6, 0x0f, 0x93, 0xf3, 0x8b, 0xb3, + 0xe8, 0xc5, 0xcb, 0x93, 0xf8, 0x24, 0x8a, 0xce, 0xa2, 0x59, 0x27, 0xcc, 0x61, 0xef, 0x8d, 0x46, + 0xf5, 0xa2, 0xaa, 0x96, 0x32, 0x5f, 0x16, 0x25, 0xb2, 0x8f, 0x60, 0xcf, 0x14, 0x6b, 0xd4, 0x26, + 0x59, 0x57, 0x71, 0xad, 0x31, 0xe5, 0xc1, 0xbc, 0xb3, 0xe8, 0x46, 0x93, 0x16, 0x7d, 0xa3, 0x31, + 0x65, 0x07, 0xd0, 0x13, 0xf8, 0x0e, 0x05, 0xef, 0x90, 0xd5, 0x2d, 0x18, 0x87, 0xfe, 0x1a, 0xb5, + 0x4e, 0x72, 0xe4, 0xdd, 0x79, 0x67, 0x31, 0x8c, 0x9a, 0x65, 0xf8, 0x12, 0xa6, 0x37, 0x07, 0xbd, + 0x54, 0xb2, 0xae, 0xd8, 0x9f, 0x60, 0x60, 0x73, 0x15, 0x45, 0x89, 0xbc, 0x33, 0xef, 0x2e, 0x46, + 0x9f, 0xdf, 0x3f, 0x6c, 0x33, 0x3d, 0xdc, 0x0e, 0x2b, 0xea, 0x0b, 0xf7, 0x10, 0x86, 0x30, 0xfe, + 0x5a, 0xd4, 0x7a, 0x15, 0xe1, 0x0f, 0x35, 0x6a, 0xc3, 0x18, 0xec, 0x08, 0x99, 0x6b, 0x1e, 0xcc, + 0x83, 0xc5, 0x38, 0xa2, 0xe7, 0xf0, 0x39, 0xcc, 0xce, 0xd1, 0x9c, 0x9b, 0xc4, 0xd4, 0xba, 0xf1, + 0xbb, 0x07, 0xbb, 0x9a, 0x00, 0xca, 0x67, 0x18, 0xf9, 0x55, 0xf8, 0x1c, 0x86, 0x4b, 0x99, 0x9f, + 0x5d, 0x5e, 0x6a, 0x34, 0xec, 0x11, 0x80, 0x72, 0xfe, 0x71, 0x91, 0xf9, 0x2d, 0x87, 0x1e, 0x39, + 0xcd, 0xc2, 0x0b, 0xe8, 0x37, 0x65, 0x62, 0xb0, 0x63, 0x0b, 0xe2, 0x8b, 0x43, 0xcf, 0xdb, 0x35, + 0xe9, 0x35, 0x35, 0x79, 0x0c, 0x23, 0x9b, 0xe6, 0x76, 0x5d, 0x40, 0xc8, 0xfc, 0x95, 0x2f, 0xcd, + 0x3f, 0x01, 0xc0, 0x47, 0xb9, 0x94, 0x39, 0xbb, 0x0b, 0xbb, 0x49, 0x55, 0xb9, 0xf3, 0xad, 0x6b, + 0x2f, 0xa9, 0xaa, 0xd3, 0x8c, 0x7d, 0x08, 0xc3, 0xb5, 0xcc, 0x6a, 0x81, 0xd6, 0xf2, 0xd1, 0x3c, + 0x58, 0x0c, 0x8f, 0xfb, 0x19, 0x5e, 0x26, 0xb5, 0x30, 0xd1, 0xc0, 0x59, 0x4e, 0x33, 0x9b, 0xc0, + 0x3b, 0x54, 0xba, 0x90, 0xa5, 0x75, 0xeb, 0xd0, 0x06, 0x43, 0x8f, 0x38, 0xf3, 0x46, 0x7e, 0x36, + 0x94, 0xcd, 0xfc, 0xd8, 0x27, 0xb0, 0x2b, 0xa9, 0x10, 0xfc, 0xe9, 0x3c, 0x58, 0x8c, 0x3e, 0x3f, + 0xd8, 0xe8, 0x47, 0x5b, 0xa4, 0xc8, 0xfb, 0xb0, 0x3d, 0xe8, 0x14, 0x15, 0xdf, 0xa1, 0x33, 0x3a, + 0x45, 0xc5, 0x1e, 0xc0, 0xa0, 0x2c, 0xd2, 0xb7, 0x65, 0xb2, 0x46, 0xde, 0xb3, 0x01, 0x46, 0xed, + 0xda, 0x1e, 0xac, 0x4d, 0xa2, 0x4c, 0x4c, 0x45, 0xdb, 0xa5, 0xa2, 0x0d, 0x09, 0xb9, 0xb0, 0x95, + 0xbb, 0x0f, 0x03, 0x2c, 0x33, 0x67, 0xec, 0x93, 0xb1, 0x8f, 0x65, 0x46, 0x26, 0x0e, 0x7d, 0x91, + 0x18, 0x2c, 0xd3, 0x6b, 0x3e, 0x70, 0x16, 0xbf, 0x24, 0xb2, 0xa5, 0xd7, 0xa9, 0x40, 0xcd, 0x87, + 0xce, 0xe2, 0x97, 0xb6, 0xd7, 0x6b, 0x34, 0x2b, 0x99, 0x71, 0x70, 0xbd, 0x76, 0x2b, 0x1b, 0xa1, + 0x42, 0x2d, 0x6b, 0x95, 0x22, 0x1f, 0x91, 0xa5, 0x5d, 0xb3, 0x27, 0x30, 0x5e, 0x19, 0x53, 0xc5, + 0xbe, 0x58, 0x7c, 0x4c, 0xf6, 0x91, 0xc5, 0xbe, 0x77, 0xd0, 0x06, 0x85, 0x26, 0xd4, 0x60, 0xbf, + 0x62, 0x4f, 0x61, 0xa2, 0x50, 0x57, 0xb2, 0xd4, 0x18, 0xeb, 0xe2, 0x27, 0xe4, 0x7b, 0x14, 0xce, + 0xb8, 0x01, 0xcf, 0x8b, 0x9f, 0xd0, 0x9d, 0x7d, 0x89, 0x4a, 0xa1, 0xe2, 0x53, 0x57, 0x9d, 0x66, + 0x6d, 0xab, 0x53, 0x6b, 0x54, 0x71, 0x92, 0x63, 0x69, 0xf8, 0x8c, 0xac, 0x43, 0x8b, 0xbc, 0xb0, + 0x00, 0x0b, 0x61, 0x52, 0x2b, 0x11, 0xaf, 0x93, 0x2a, 0xc6, 0xd2, 0xa8, 0x6b, 0xbe, 0xef, 0x62, + 0xab, 0x95, 0x78, 0x95, 0x54, 0x27, 0x16, 0xb2, 0xdb, 0xa7, 0x72, 0xfd, 0x8f, 0xa2, 0xc4, 0x8c, + 0x33, 0x97, 0x5a, 0xb3, 0xb6, 0x0c, 0x4c, 0xaa, 0x22, 0x6e, 0x8a, 0x75, 0x67, 0x1e, 0x2c, 0xba, + 0x11, 0x24, 0x55, 0xf1, 0xca, 0xd7, 0x8b, 0xc1, 0xce, 0x4a, 0x6a, 0xc3, 0x0f, 0xe8, 0x64, 0x7a, + 0xb6, 0x58, 0x6a, 0xb1, 0xbb, 0xf3, 0x60, 0x11, 0x44, 0xf4, 0xcc, 0x9e, 0xc1, 0xd4, 0x24, 0xfa, + 0x6d, 0xfc, 0x43, 0x8d, 0x35, 0xc6, 0xd4, 0xe8, 0x7b, 0xf4, 0xca, 0xc4, 0xc2, 0xdf, 0x59, 0xf4, + 0xb5, 0xed, 0xf6, 0x43, 0x18, 0x92, 0x1f, 0x79, 0x7c, 0xe0, 0x92, 0xb5, 0x00, 0x19, 0x0f, 0xe1, + 0xce, 0x8f, 0x89, 0x8e, 0x85, 0x4c, 0xb2, 0xa2, 0xcc, 0x63, 0xcf, 0x3e, 0xce, 0xe7, 0xc1, 0x62, + 0x10, 0xed, 0xff, 0x98, 0xe8, 0xa5, 0xb3, 0x34, 0x83, 0xfb, 0x04, 0xc6, 0x15, 0x96, 0xe4, 0x4b, + 0xfc, 0xb8, 0x4f, 0xe1, 0x8f, 0x3c, 0x46, 0x1c, 0xf9, 0xd8, 0x36, 0xa0, 0x12, 0x45, 0x9a, 0xc4, + 0x45, 0x99, 0xe1, 0x15, 0x7f, 0x30, 0x0f, 0x16, 0xbd, 0xe3, 0xce, 0xa7, 0x9f, 0xd9, 0x26, 0x90, + 0xe1, 0xd4, 0xe2, 0x6c, 0x0e, 0x83, 0xcb, 0xa2, 0x2c, 0xf4, 0x0a, 0x33, 0xfe, 0xd0, 0x1e, 0x78, + 0xbc, 0x63, 0x54, 0x8d, 0x51, 0x8b, 0xda, 0xd0, 0x53, 0x21, 0x4b, 0x8c, 0xdf, 0xe2, 0x35, 0xff, + 0x3d, 0x09, 0xc0, 0x80, 0x80, 0x6f, 0xf1, 0x9a, 0x3d, 0x83, 0x1d, 0x52, 0xab, 0x47, 0xa4, 0x56, + 0x6c, 0x7b, 0x3a, 0x48, 0xa6, 0xc8, 0xce, 0xfe, 0x08, 0x33, 0xfb, 0xaf, 0xe3, 0xa2, 0x4c, 0xe5, + 0xba, 0x12, 0x68, 0x90, 0x7f, 0x48, 0xf9, 0x4d, 0x09, 0x3f, 0x6d, 0x61, 0xf6, 0x09, 0x30, 0x3b, + 0xed, 0x6e, 0x9b, 0x58, 0xa1, 0xc0, 0x44, 0x23, 0x7f, 0x46, 0x07, 0xcf, 0x92, 0xaa, 0x3a, 0x21, + 0x43, 0xe4, 0x70, 0xdb, 0x49, 0xbc, 0x2a, 0x4c, 0xac, 0x30, 0xd1, 0xb2, 0xe4, 0x7f, 0xb0, 0x69, + 0x46, 0x60, 0xa1, 0x88, 0x10, 0xf6, 0x05, 0xdc, 0xb3, 0xc5, 0x35, 0x2b, 0x25, 0x8d, 0x11, 0x98, + 0xc5, 0x97, 0x52, 0xb9, 0xb2, 0x3d, 0xa6, 0xf3, 0x6d, 0xe9, 0x2f, 0x1a, 0xe3, 0xd7, 0x52, 0x51, + 0xf9, 0xbe, 0x84, 0x07, 0x3f, 0x7f, 0xc9, 0xf7, 0x45, 0xf3, 0x39, 0xbd, 0xf8, 0xc1, 0xad, 0x17, + 0x7d, 0x77, 0x34, 0xdd, 0x17, 0xed, 0x8b, 0x74, 0xd2, 0x13, 0x6a, 0xd0, 0xa4, 0x45, 0xe9, 0x8c, + 0xc7, 0x30, 0xb2, 0x97, 0x1a, 0x2a, 0x47, 0x8a, 0x90, 0x12, 0x04, 0x07, 0x59, 0x5a, 0x84, 0x7f, + 0x83, 0xd9, 0x52, 0xe6, 0xaf, 0x48, 0xc8, 0x9a, 0x81, 0xdb, 0xd2, 0xbc, 0xe0, 0x7d, 0x35, 0x2f, + 0xd8, 0xd2, 0xbc, 0xf0, 0xbf, 0x3d, 0xd8, 0x5b, 0xca, 0x3c, 0xc2, 0x24, 0x6b, 0x28, 0xf5, 0x0b, + 0x12, 0x7b, 0x7b, 0xa3, 0xee, 0xb6, 0x78, 0x7e, 0x05, 0x7b, 0x3e, 0x9a, 0x46, 0x23, 0xee, 0x10, + 0x0f, 0x1e, 0x6e, 0xf3, 0x60, 0x2b, 0x85, 0x68, 0xb2, 0xde, 0xca, 0x68, 0x5b, 0x07, 0xbb, 0x54, + 0xa9, 0x5f, 0xd0, 0xc1, 0x1d, 0x32, 0xb6, 0x3a, 0x78, 0xa3, 0xcd, 0xbd, 0xf7, 0xd0, 0xe6, 0x6d, + 0xa1, 0xdf, 0x9d, 0x77, 0xb7, 0x85, 0xfe, 0x39, 0xec, 0xaf, 0x8b, 0xb2, 0x58, 0xd7, 0xeb, 0x98, + 0xae, 0x60, 0xba, 0xb5, 0xfa, 0xc4, 0xa6, 0xa9, 0x37, 0x58, 0x46, 0xd3, 0xfd, 0xf5, 0x29, 0xb0, + 0xa2, 0x4c, 0x45, 0x9d, 0xe1, 0x26, 0x9d, 0x07, 0x6e, 0x5c, 0xbd, 0x65, 0x83, 0xd0, 0x07, 0xd0, + 0x4b, 0x65, 0x5d, 0x1a, 0x3e, 0xa4, 0xf8, 0xdd, 0xc2, 0xd2, 0xbc, 0x91, 0x23, 0x3a, 0x51, 0x61, + 0x8e, 0x57, 0x7c, 0x8f, 0x7a, 0x35, 0x6b, 0x2c, 0xd4, 0xa5, 0x1c, 0xaf, 0x6c, 0xf4, 0x56, 0x83, + 0xbc, 0x97, 0x53, 0xcb, 0xa1, 0x45, 0x9c, 0xf9, 0xe9, 0xed, 0x71, 0x9f, 0x51, 0xe4, 0xdb, 0xa3, + 0xbe, 0x80, 0x59, 0x13, 0xb6, 0xed, 0x35, 0x7d, 0x23, 0x00, 0x05, 0xbd, 0xe7, 0x71, 0xf7, 0x75, + 0xa1, 0xd9, 0x11, 0x1c, 0x34, 0x1e, 0x71, 0x85, 0x2d, 0xf3, 0xf9, 0x3e, 0xed, 0xba, 0x9f, 0x38, + 0xb7, 0xbf, 0xa2, 0xda, 0x50, 0xa4, 0x66, 0x6b, 0x92, 0xcd, 0x11, 0x6d, 0x3b, 0xf2, 0xd8, 0x37, + 0x56, 0x29, 0x1f, 0xc3, 0xa8, 0x3d, 0x5d, 0x08, 0x3e, 0x26, 0x0f, 0x68, 0x0e, 0x16, 0xc2, 0x8e, + 0x4d, 0x9a, 0xa4, 0x2b, 0x8c, 0x0b, 0x83, 0x2a, 0x31, 0x52, 0xf1, 0x09, 0xf9, 0x4c, 0x08, 0x3d, + 0xf5, 0xa0, 0xad, 0x44, 0x59, 0xaf, 0x63, 0xbd, 0x4a, 0x54, 0xa6, 0x39, 0xa3, 0x88, 0x86, 0x65, + 0xbd, 0x3e, 0x27, 0x20, 0xfc, 0x57, 0x40, 0xdf, 0x83, 0x8e, 0xdb, 0xee, 0xb2, 0x61, 0x1f, 0x43, + 0x57, 0xc8, 0x9c, 0x07, 0xc4, 0xcd, 0xbb, 0x1b, 0x2c, 0xb9, 0xf9, 0xc6, 0x88, 0xac, 0xc7, 0x06, + 0xa3, 0x3a, 0xef, 0xc1, 0xa8, 0x10, 0x26, 0x22, 0xd1, 0x26, 0x6e, 0xf9, 0xe9, 0xc8, 0x3b, 0xb2, + 0xe0, 0x89, 0xe3, 0x68, 0xf8, 0x9f, 0x80, 0x46, 0xed, 0x8d, 0xfd, 0xac, 0x89, 0x30, 0x95, 0xea, + 0xf6, 0x4c, 0x05, 0xb7, 0x86, 0xf3, 0xd6, 0x3c, 0x74, 0x5c, 0x7e, 0xff, 0x7f, 0x1e, 0xba, 0x64, + 0x6c, 0xe7, 0xa1, 0xe5, 0xd9, 0xce, 0x26, 0xcf, 0x1e, 0x01, 0x18, 0x69, 0x12, 0xe1, 0xee, 0xe1, + 0x9e, 0x9b, 0x2f, 0x42, 0xe8, 0x12, 0xe6, 0xd0, 0x57, 0x14, 0x97, 0xe6, 0xbb, 0x6e, 0x3b, 0xbf, + 0x0c, 0xff, 0xdd, 0xa1, 0x4a, 0xfa, 0xd0, 0x7f, 0x8b, 0x4c, 0xfc, 0x7c, 0xc4, 0x7b, 0xbf, 0x36, + 0xe2, 0xbd, 0xcd, 0x11, 0x9f, 0xd9, 0xcf, 0x11, 0x51, 0x1b, 0xbb, 0xf7, 0x4a, 0xd6, 0x4a, 0x53, + 0x0a, 0x93, 0xe3, 0xe0, 0xb3, 0x68, 0x7a, 0x63, 0xfa, 0xc6, 0x5a, 0xec, 0x25, 0xe3, 0x07, 0xa7, + 0xd1, 0x23, 0x97, 0xd4, 0x20, 0x9a, 0x7a, 0xdc, 0x8b, 0x0e, 0x7d, 0xa0, 0xd4, 0x36, 0xb1, 0x56, + 0xb8, 0xdc, 0xa8, 0x8f, 0x09, 0x6c, 0xa4, 0xe9, 0x29, 0x4c, 0x9a, 0x7d, 0x62, 0x59, 0x8a, 0x6b, + 0x3f, 0xe2, 0xe3, 0x06, 0x3c, 0x2b, 0xc5, 0x75, 0x78, 0x45, 0x2a, 0xed, 0xab, 0xe4, 0x09, 0x77, + 0x04, 0x3d, 0xda, 0xc8, 0x53, 0xee, 0xfe, 0x36, 0x8d, 0x36, 0xc8, 0x10, 0x39, 0x3f, 0xf6, 0x05, + 0xf4, 0x75, 0xbd, 0x5e, 0x27, 0xea, 0xda, 0x33, 0xef, 0x57, 0x5e, 0x69, 0x3c, 0xbf, 0xea, 0xfd, + 0xdd, 0x92, 0xf6, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x70, 0xd9, 0xa0, 0xf8, 0x48, 0x0d, 0x00, + 0x00, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/log/log_service.proto b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/log/log_service.proto new file mode 100644 index 00000000000..8981dc47577 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/log/log_service.proto @@ -0,0 +1,150 @@ +syntax = "proto2"; +option go_package = "log"; + +package appengine; + +message LogServiceError { + enum ErrorCode { + OK = 0; + INVALID_REQUEST = 1; + STORAGE_ERROR = 2; + } +} + +message UserAppLogLine { + required int64 timestamp_usec = 1; + required int64 level = 2; + required string message = 3; +} + +message UserAppLogGroup { + repeated UserAppLogLine log_line = 2; +} + +message FlushRequest { + optional bytes logs = 1; +} + +message SetStatusRequest { + required string status = 1; +} + + +message LogOffset { + optional bytes request_id = 1; +} + +message LogLine { + required int64 time = 1; + required int32 level = 2; + required string log_message = 3; +} + +message RequestLog { + required string app_id = 1; + optional string module_id = 37 [default="default"]; + required string version_id = 2; + required bytes request_id = 3; + optional LogOffset offset = 35; + required string ip = 4; + optional string nickname = 5; + required int64 start_time = 6; + required int64 end_time = 7; + required int64 latency = 8; + required int64 mcycles = 9; + required string method = 10; + required string resource = 11; + required string http_version = 12; + required int32 status = 13; + required int64 response_size = 14; + optional string referrer = 15; + optional string user_agent = 16; + required string url_map_entry = 17; + required string combined = 18; + optional int64 api_mcycles = 19; + optional string host = 20; + optional double cost = 21; + + optional string task_queue_name = 22; + optional string task_name = 23; + + optional bool was_loading_request = 24; + optional int64 pending_time = 25; + optional int32 replica_index = 26 [default = -1]; + optional bool finished = 27 [default = true]; + optional bytes clone_key = 28; + + repeated LogLine line = 29; + + optional bool lines_incomplete = 36; + optional bytes app_engine_release = 38; + + optional int32 exit_reason = 30; + optional bool was_throttled_for_time = 31; + optional bool was_throttled_for_requests = 32; + optional int64 throttled_time = 33; + + optional bytes server_name = 34; +} + +message LogModuleVersion { + optional string module_id = 1 [default="default"]; + optional string version_id = 2; +} + +message LogReadRequest { + required string app_id = 1; + repeated string version_id = 2; + repeated LogModuleVersion module_version = 19; + + optional int64 start_time = 3; + optional int64 end_time = 4; + optional LogOffset offset = 5; + repeated bytes request_id = 6; + + optional int32 minimum_log_level = 7; + optional bool include_incomplete = 8; + optional int64 count = 9; + + optional string combined_log_regex = 14; + optional string host_regex = 15; + optional int32 replica_index = 16; + + optional bool include_app_logs = 10; + optional int32 app_logs_per_request = 17; + optional bool include_host = 11; + optional bool include_all = 12; + optional bool cache_iterator = 13; + optional int32 num_shards = 18; +} + +message LogReadResponse { + repeated RequestLog log = 1; + optional LogOffset offset = 2; + optional int64 last_end_time = 3; +} + +message LogUsageRecord { + optional string version_id = 1; + optional int32 start_time = 2; + optional int32 end_time = 3; + optional int64 count = 4; + optional int64 total_size = 5; + optional int32 records = 6; +} + +message LogUsageRequest { + required string app_id = 1; + repeated string version_id = 2; + optional int32 start_time = 3; + optional int32 end_time = 4; + optional uint32 resolution_hours = 5 [default = 1]; + optional bool combine_versions = 6; + optional int32 usage_version = 7; + optional bool versions_only = 8; +} + +message LogUsageResponse { + repeated LogUsageRecord usage = 1; + optional LogUsageRecord summary = 2; +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main.go new file mode 100644 index 00000000000..1e765312fd1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main.go @@ -0,0 +1,16 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build appengine + +package internal + +import ( + "appengine_internal" +) + +func Main() { + MainPath = "" + appengine_internal.Main() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main_common.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main_common.go new file mode 100644 index 00000000000..357dce4dd01 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main_common.go @@ -0,0 +1,7 @@ +package internal + +// MainPath stores the file path of the main package. On App Engine Standard +// using Go version 1.9 and below, this will be unset. On App Engine Flex and +// App Engine Standard second-gen (Go 1.11 and above), this will be the +// filepath to package main. +var MainPath string diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main_vm.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main_vm.go new file mode 100644 index 00000000000..ddb79a33387 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/main_vm.go @@ -0,0 +1,69 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build !appengine + +package internal + +import ( + "io" + "log" + "net/http" + "net/url" + "os" + "path/filepath" + "runtime" +) + +func Main() { + MainPath = filepath.Dir(findMainPath()) + installHealthChecker(http.DefaultServeMux) + + port := "8080" + if s := os.Getenv("PORT"); s != "" { + port = s + } + + host := "" + if IsDevAppServer() { + host = "127.0.0.1" + } + if err := http.ListenAndServe(host+":"+port, http.HandlerFunc(handleHTTP)); err != nil { + log.Fatalf("http.ListenAndServe: %v", err) + } +} + +// Find the path to package main by looking at the root Caller. +func findMainPath() string { + pc := make([]uintptr, 100) + n := runtime.Callers(2, pc) + frames := runtime.CallersFrames(pc[:n]) + for { + frame, more := frames.Next() + // Tests won't have package main, instead they have testing.tRunner + if frame.Function == "main.main" || frame.Function == "testing.tRunner" { + return frame.File + } + if !more { + break + } + } + return "" +} + +func installHealthChecker(mux *http.ServeMux) { + // If no health check handler has been installed by this point, add a trivial one. + const healthPath = "/_ah/health" + hreq := &http.Request{ + Method: "GET", + URL: &url.URL{ + Path: healthPath, + }, + } + if _, pat := mux.Handler(hreq); pat != healthPath { + mux.HandleFunc(healthPath, func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, "ok") + }) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/metadata.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/metadata.go new file mode 100644 index 00000000000..c4ba63bb481 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/metadata.go @@ -0,0 +1,60 @@ +// Copyright 2014 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package internal + +// This file has code for accessing metadata. +// +// References: +// https://cloud.google.com/compute/docs/metadata + +import ( + "fmt" + "io/ioutil" + "net/http" + "net/url" +) + +const ( + metadataHost = "metadata" + metadataPath = "/computeMetadata/v1/" +) + +var ( + metadataRequestHeaders = http.Header{ + "Metadata-Flavor": []string{"Google"}, + } +) + +// TODO(dsymonds): Do we need to support default values, like Python? +func mustGetMetadata(key string) []byte { + b, err := getMetadata(key) + if err != nil { + panic(fmt.Sprintf("Metadata fetch failed for '%s': %v", key, err)) + } + return b +} + +func getMetadata(key string) ([]byte, error) { + // TODO(dsymonds): May need to use url.Parse to support keys with query args. + req := &http.Request{ + Method: "GET", + URL: &url.URL{ + Scheme: "http", + Host: metadataHost, + Path: metadataPath + key, + }, + Header: metadataRequestHeaders, + Host: metadataHost, + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + if resp.StatusCode != 200 { + return nil, fmt.Errorf("metadata server returned HTTP %d", resp.StatusCode) + } + return ioutil.ReadAll(resp.Body) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/net.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/net.go new file mode 100644 index 00000000000..3b94cf0c6a8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/net.go @@ -0,0 +1,56 @@ +// Copyright 2014 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package internal + +// This file implements a network dialer that limits the number of concurrent connections. +// It is only used for API calls. + +import ( + "log" + "net" + "runtime" + "sync" + "time" +) + +var limitSem = make(chan int, 100) // TODO(dsymonds): Use environment variable. + +func limitRelease() { + // non-blocking + select { + case <-limitSem: + default: + // This should not normally happen. + log.Print("appengine: unbalanced limitSem release!") + } +} + +func limitDial(network, addr string) (net.Conn, error) { + limitSem <- 1 + + // Dial with a timeout in case the API host is MIA. + // The connection should normally be very fast. + conn, err := net.DialTimeout(network, addr, 500*time.Millisecond) + if err != nil { + limitRelease() + return nil, err + } + lc := &limitConn{Conn: conn} + runtime.SetFinalizer(lc, (*limitConn).Close) // shouldn't usually be required + return lc, nil +} + +type limitConn struct { + close sync.Once + net.Conn +} + +func (lc *limitConn) Close() error { + defer lc.close.Do(func() { + limitRelease() + runtime.SetFinalizer(lc, nil) + }) + return lc.Conn.Close() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/regen.sh b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/regen.sh new file mode 100755 index 00000000000..2fdb546a633 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/regen.sh @@ -0,0 +1,40 @@ +#!/bin/bash -e +# +# This script rebuilds the generated code for the protocol buffers. +# To run this you will need protoc and goprotobuf installed; +# see https://github.com/golang/protobuf for instructions. + +PKG=google.golang.org/appengine + +function die() { + echo 1>&2 $* + exit 1 +} + +# Sanity check that the right tools are accessible. +for tool in go protoc protoc-gen-go; do + q=$(which $tool) || die "didn't find $tool" + echo 1>&2 "$tool: $q" +done + +echo -n 1>&2 "finding package dir... " +pkgdir=$(go list -f '{{.Dir}}' $PKG) +echo 1>&2 $pkgdir +base=$(echo $pkgdir | sed "s,/$PKG\$,,") +echo 1>&2 "base: $base" +cd $base + +# Run protoc once per package. +for dir in $(find $PKG/internal -name '*.proto' | xargs dirname | sort | uniq); do + echo 1>&2 "* $dir" + protoc --go_out=. $dir/*.proto +done + +for f in $(find $PKG/internal -name '*.pb.go'); do + # Remove proto.RegisterEnum calls. + # These cause duplicate registration panics when these packages + # are used on classic App Engine. proto.RegisterEnum only affects + # parsing the text format; we don't care about that. + # https://code.google.com/p/googleappengine/issues/detail?id=11670#c17 + sed -i '/proto.RegisterEnum/d' $f +done diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go new file mode 100644 index 00000000000..8d782a38e17 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go @@ -0,0 +1,361 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google.golang.org/appengine/internal/remote_api/remote_api.proto + +package remote_api + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type RpcError_ErrorCode int32 + +const ( + RpcError_UNKNOWN RpcError_ErrorCode = 0 + RpcError_CALL_NOT_FOUND RpcError_ErrorCode = 1 + RpcError_PARSE_ERROR RpcError_ErrorCode = 2 + RpcError_SECURITY_VIOLATION RpcError_ErrorCode = 3 + RpcError_OVER_QUOTA RpcError_ErrorCode = 4 + RpcError_REQUEST_TOO_LARGE RpcError_ErrorCode = 5 + RpcError_CAPABILITY_DISABLED RpcError_ErrorCode = 6 + RpcError_FEATURE_DISABLED RpcError_ErrorCode = 7 + RpcError_BAD_REQUEST RpcError_ErrorCode = 8 + RpcError_RESPONSE_TOO_LARGE RpcError_ErrorCode = 9 + RpcError_CANCELLED RpcError_ErrorCode = 10 + RpcError_REPLAY_ERROR RpcError_ErrorCode = 11 + RpcError_DEADLINE_EXCEEDED RpcError_ErrorCode = 12 +) + +var RpcError_ErrorCode_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CALL_NOT_FOUND", + 2: "PARSE_ERROR", + 3: "SECURITY_VIOLATION", + 4: "OVER_QUOTA", + 5: "REQUEST_TOO_LARGE", + 6: "CAPABILITY_DISABLED", + 7: "FEATURE_DISABLED", + 8: "BAD_REQUEST", + 9: "RESPONSE_TOO_LARGE", + 10: "CANCELLED", + 11: "REPLAY_ERROR", + 12: "DEADLINE_EXCEEDED", +} +var RpcError_ErrorCode_value = map[string]int32{ + "UNKNOWN": 0, + "CALL_NOT_FOUND": 1, + "PARSE_ERROR": 2, + "SECURITY_VIOLATION": 3, + "OVER_QUOTA": 4, + "REQUEST_TOO_LARGE": 5, + "CAPABILITY_DISABLED": 6, + "FEATURE_DISABLED": 7, + "BAD_REQUEST": 8, + "RESPONSE_TOO_LARGE": 9, + "CANCELLED": 10, + "REPLAY_ERROR": 11, + "DEADLINE_EXCEEDED": 12, +} + +func (x RpcError_ErrorCode) Enum() *RpcError_ErrorCode { + p := new(RpcError_ErrorCode) + *p = x + return p +} +func (x RpcError_ErrorCode) String() string { + return proto.EnumName(RpcError_ErrorCode_name, int32(x)) +} +func (x *RpcError_ErrorCode) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(RpcError_ErrorCode_value, data, "RpcError_ErrorCode") + if err != nil { + return err + } + *x = RpcError_ErrorCode(value) + return nil +} +func (RpcError_ErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_remote_api_1978114ec33a273d, []int{2, 0} +} + +type Request struct { + ServiceName *string `protobuf:"bytes,2,req,name=service_name,json=serviceName" json:"service_name,omitempty"` + Method *string `protobuf:"bytes,3,req,name=method" json:"method,omitempty"` + Request []byte `protobuf:"bytes,4,req,name=request" json:"request,omitempty"` + RequestId *string `protobuf:"bytes,5,opt,name=request_id,json=requestId" json:"request_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Request) Reset() { *m = Request{} } +func (m *Request) String() string { return proto.CompactTextString(m) } +func (*Request) ProtoMessage() {} +func (*Request) Descriptor() ([]byte, []int) { + return fileDescriptor_remote_api_1978114ec33a273d, []int{0} +} +func (m *Request) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Request.Unmarshal(m, b) +} +func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Request.Marshal(b, m, deterministic) +} +func (dst *Request) XXX_Merge(src proto.Message) { + xxx_messageInfo_Request.Merge(dst, src) +} +func (m *Request) XXX_Size() int { + return xxx_messageInfo_Request.Size(m) +} +func (m *Request) XXX_DiscardUnknown() { + xxx_messageInfo_Request.DiscardUnknown(m) +} + +var xxx_messageInfo_Request proto.InternalMessageInfo + +func (m *Request) GetServiceName() string { + if m != nil && m.ServiceName != nil { + return *m.ServiceName + } + return "" +} + +func (m *Request) GetMethod() string { + if m != nil && m.Method != nil { + return *m.Method + } + return "" +} + +func (m *Request) GetRequest() []byte { + if m != nil { + return m.Request + } + return nil +} + +func (m *Request) GetRequestId() string { + if m != nil && m.RequestId != nil { + return *m.RequestId + } + return "" +} + +type ApplicationError struct { + Code *int32 `protobuf:"varint,1,req,name=code" json:"code,omitempty"` + Detail *string `protobuf:"bytes,2,req,name=detail" json:"detail,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ApplicationError) Reset() { *m = ApplicationError{} } +func (m *ApplicationError) String() string { return proto.CompactTextString(m) } +func (*ApplicationError) ProtoMessage() {} +func (*ApplicationError) Descriptor() ([]byte, []int) { + return fileDescriptor_remote_api_1978114ec33a273d, []int{1} +} +func (m *ApplicationError) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ApplicationError.Unmarshal(m, b) +} +func (m *ApplicationError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ApplicationError.Marshal(b, m, deterministic) +} +func (dst *ApplicationError) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplicationError.Merge(dst, src) +} +func (m *ApplicationError) XXX_Size() int { + return xxx_messageInfo_ApplicationError.Size(m) +} +func (m *ApplicationError) XXX_DiscardUnknown() { + xxx_messageInfo_ApplicationError.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplicationError proto.InternalMessageInfo + +func (m *ApplicationError) GetCode() int32 { + if m != nil && m.Code != nil { + return *m.Code + } + return 0 +} + +func (m *ApplicationError) GetDetail() string { + if m != nil && m.Detail != nil { + return *m.Detail + } + return "" +} + +type RpcError struct { + Code *int32 `protobuf:"varint,1,req,name=code" json:"code,omitempty"` + Detail *string `protobuf:"bytes,2,opt,name=detail" json:"detail,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RpcError) Reset() { *m = RpcError{} } +func (m *RpcError) String() string { return proto.CompactTextString(m) } +func (*RpcError) ProtoMessage() {} +func (*RpcError) Descriptor() ([]byte, []int) { + return fileDescriptor_remote_api_1978114ec33a273d, []int{2} +} +func (m *RpcError) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RpcError.Unmarshal(m, b) +} +func (m *RpcError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RpcError.Marshal(b, m, deterministic) +} +func (dst *RpcError) XXX_Merge(src proto.Message) { + xxx_messageInfo_RpcError.Merge(dst, src) +} +func (m *RpcError) XXX_Size() int { + return xxx_messageInfo_RpcError.Size(m) +} +func (m *RpcError) XXX_DiscardUnknown() { + xxx_messageInfo_RpcError.DiscardUnknown(m) +} + +var xxx_messageInfo_RpcError proto.InternalMessageInfo + +func (m *RpcError) GetCode() int32 { + if m != nil && m.Code != nil { + return *m.Code + } + return 0 +} + +func (m *RpcError) GetDetail() string { + if m != nil && m.Detail != nil { + return *m.Detail + } + return "" +} + +type Response struct { + Response []byte `protobuf:"bytes,1,opt,name=response" json:"response,omitempty"` + Exception []byte `protobuf:"bytes,2,opt,name=exception" json:"exception,omitempty"` + ApplicationError *ApplicationError `protobuf:"bytes,3,opt,name=application_error,json=applicationError" json:"application_error,omitempty"` + JavaException []byte `protobuf:"bytes,4,opt,name=java_exception,json=javaException" json:"java_exception,omitempty"` + RpcError *RpcError `protobuf:"bytes,5,opt,name=rpc_error,json=rpcError" json:"rpc_error,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Response) Reset() { *m = Response{} } +func (m *Response) String() string { return proto.CompactTextString(m) } +func (*Response) ProtoMessage() {} +func (*Response) Descriptor() ([]byte, []int) { + return fileDescriptor_remote_api_1978114ec33a273d, []int{3} +} +func (m *Response) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Response.Unmarshal(m, b) +} +func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Response.Marshal(b, m, deterministic) +} +func (dst *Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_Response.Merge(dst, src) +} +func (m *Response) XXX_Size() int { + return xxx_messageInfo_Response.Size(m) +} +func (m *Response) XXX_DiscardUnknown() { + xxx_messageInfo_Response.DiscardUnknown(m) +} + +var xxx_messageInfo_Response proto.InternalMessageInfo + +func (m *Response) GetResponse() []byte { + if m != nil { + return m.Response + } + return nil +} + +func (m *Response) GetException() []byte { + if m != nil { + return m.Exception + } + return nil +} + +func (m *Response) GetApplicationError() *ApplicationError { + if m != nil { + return m.ApplicationError + } + return nil +} + +func (m *Response) GetJavaException() []byte { + if m != nil { + return m.JavaException + } + return nil +} + +func (m *Response) GetRpcError() *RpcError { + if m != nil { + return m.RpcError + } + return nil +} + +func init() { + proto.RegisterType((*Request)(nil), "remote_api.Request") + proto.RegisterType((*ApplicationError)(nil), "remote_api.ApplicationError") + proto.RegisterType((*RpcError)(nil), "remote_api.RpcError") + proto.RegisterType((*Response)(nil), "remote_api.Response") +} + +func init() { + proto.RegisterFile("google.golang.org/appengine/internal/remote_api/remote_api.proto", fileDescriptor_remote_api_1978114ec33a273d) +} + +var fileDescriptor_remote_api_1978114ec33a273d = []byte{ + // 531 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x51, 0x6e, 0xd3, 0x40, + 0x10, 0x86, 0xb1, 0x9b, 0x34, 0xf1, 0xc4, 0x2d, 0xdb, 0xa5, 0x14, 0x0b, 0x15, 0x29, 0x44, 0x42, + 0xca, 0x53, 0x2a, 0x38, 0x00, 0x62, 0x63, 0x6f, 0x91, 0x85, 0x65, 0xa7, 0x6b, 0xbb, 0x50, 0x5e, + 0x56, 0x2b, 0x67, 0x65, 0x8c, 0x12, 0xaf, 0xd9, 0x98, 0x8a, 0x17, 0x6e, 0xc0, 0xb5, 0x38, 0x0c, + 0xb7, 0x40, 0x36, 0x6e, 0x63, 0xf5, 0x89, 0xb7, 0x7f, 0x7e, 0x7b, 0xe6, 0x1b, 0xcd, 0xcc, 0xc2, + 0xbb, 0x5c, 0xa9, 0x7c, 0x23, 0x17, 0xb9, 0xda, 0x88, 0x32, 0x5f, 0x28, 0x9d, 0x5f, 0x88, 0xaa, + 0x92, 0x65, 0x5e, 0x94, 0xf2, 0xa2, 0x28, 0x6b, 0xa9, 0x4b, 0xb1, 0xb9, 0xd0, 0x72, 0xab, 0x6a, + 0xc9, 0x45, 0x55, 0xf4, 0xe4, 0xa2, 0xd2, 0xaa, 0x56, 0x18, 0xf6, 0xce, 0xec, 0x27, 0x8c, 0x98, + 0xfc, 0xf6, 0x5d, 0xee, 0x6a, 0xfc, 0x12, 0xec, 0x9d, 0xd4, 0xb7, 0x45, 0x26, 0x79, 0x29, 0xb6, + 0xd2, 0x31, 0xa7, 0xe6, 0xdc, 0x62, 0x93, 0xce, 0x0b, 0xc5, 0x56, 0xe2, 0x33, 0x38, 0xdc, 0xca, + 0xfa, 0x8b, 0x5a, 0x3b, 0x07, 0xed, 0xc7, 0x2e, 0xc2, 0x0e, 0x8c, 0xf4, 0xbf, 0x2a, 0xce, 0x60, + 0x6a, 0xce, 0x6d, 0x76, 0x17, 0xe2, 0x17, 0x00, 0x9d, 0xe4, 0xc5, 0xda, 0x19, 0x4e, 0x8d, 0xb9, + 0xc5, 0xac, 0xce, 0xf1, 0xd7, 0xb3, 0xb7, 0x80, 0x48, 0x55, 0x6d, 0x8a, 0x4c, 0xd4, 0x85, 0x2a, + 0xa9, 0xd6, 0x4a, 0x63, 0x0c, 0x83, 0x4c, 0xad, 0xa5, 0x63, 0x4c, 0xcd, 0xf9, 0x90, 0xb5, 0xba, + 0x01, 0xaf, 0x65, 0x2d, 0x8a, 0x4d, 0xd7, 0x55, 0x17, 0xcd, 0x7e, 0x9b, 0x30, 0x66, 0x55, 0xf6, + 0x7f, 0x89, 0x46, 0x2f, 0xf1, 0x97, 0x09, 0x56, 0x9b, 0xe5, 0x36, 0x7f, 0x4d, 0x60, 0x94, 0x86, + 0x1f, 0xc2, 0xe8, 0x63, 0x88, 0x1e, 0x61, 0x0c, 0xc7, 0x2e, 0x09, 0x02, 0x1e, 0x46, 0x09, 0xbf, + 0x8c, 0xd2, 0xd0, 0x43, 0x06, 0x7e, 0x0c, 0x93, 0x15, 0x61, 0x31, 0xe5, 0x94, 0xb1, 0x88, 0x21, + 0x13, 0x9f, 0x01, 0x8e, 0xa9, 0x9b, 0x32, 0x3f, 0xb9, 0xe1, 0xd7, 0x7e, 0x14, 0x90, 0xc4, 0x8f, + 0x42, 0x74, 0x80, 0x8f, 0x01, 0xa2, 0x6b, 0xca, 0xf8, 0x55, 0x1a, 0x25, 0x04, 0x0d, 0xf0, 0x53, + 0x38, 0x61, 0xf4, 0x2a, 0xa5, 0x71, 0xc2, 0x93, 0x28, 0xe2, 0x01, 0x61, 0xef, 0x29, 0x1a, 0xe2, + 0x67, 0xf0, 0xc4, 0x25, 0x2b, 0xb2, 0xf4, 0x83, 0xa6, 0x80, 0xe7, 0xc7, 0x64, 0x19, 0x50, 0x0f, + 0x1d, 0xe2, 0x53, 0x40, 0x97, 0x94, 0x24, 0x29, 0xa3, 0x7b, 0x77, 0xd4, 0xe0, 0x97, 0xc4, 0xe3, + 0x5d, 0x25, 0x34, 0x6e, 0xf0, 0x8c, 0xc6, 0xab, 0x28, 0x8c, 0x69, 0xaf, 0xae, 0x85, 0x8f, 0xc0, + 0x72, 0x49, 0xe8, 0xd2, 0xa0, 0xc9, 0x03, 0x8c, 0xc0, 0x66, 0x74, 0x15, 0x90, 0x9b, 0xae, 0xef, + 0x49, 0xd3, 0x8f, 0x47, 0x89, 0x17, 0xf8, 0x21, 0xe5, 0xf4, 0x93, 0x4b, 0xa9, 0x47, 0x3d, 0x64, + 0xcf, 0xfe, 0x18, 0x30, 0x66, 0x72, 0x57, 0xa9, 0x72, 0x27, 0xf1, 0x73, 0x18, 0xeb, 0x4e, 0x3b, + 0xc6, 0xd4, 0x98, 0xdb, 0xec, 0x3e, 0xc6, 0xe7, 0x60, 0xc9, 0x1f, 0x99, 0xac, 0x9a, 0x75, 0xb5, + 0x23, 0xb5, 0xd9, 0xde, 0xc0, 0x3e, 0x9c, 0x88, 0xfd, 0x3a, 0xb9, 0x6c, 0x06, 0xec, 0x1c, 0x4c, + 0x8d, 0xf9, 0xe4, 0xcd, 0xf9, 0xa2, 0x77, 0x87, 0x0f, 0x77, 0xce, 0x90, 0x78, 0x78, 0x05, 0xaf, + 0xe0, 0xf8, 0xab, 0xb8, 0x15, 0x7c, 0x4f, 0x1b, 0xb4, 0xb4, 0xa3, 0xc6, 0xa5, 0xf7, 0xc4, 0xd7, + 0x60, 0xe9, 0x2a, 0xeb, 0x48, 0xc3, 0x96, 0x74, 0xda, 0x27, 0xdd, 0x1d, 0x07, 0x1b, 0xeb, 0x4e, + 0x2d, 0xed, 0xcf, 0xbd, 0x07, 0xf0, 0x37, 0x00, 0x00, 0xff, 0xff, 0x38, 0xd1, 0x0f, 0x22, 0x4f, + 0x03, 0x00, 0x00, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto new file mode 100644 index 00000000000..f21763a4e23 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/remote_api/remote_api.proto @@ -0,0 +1,44 @@ +syntax = "proto2"; +option go_package = "remote_api"; + +package remote_api; + +message Request { + required string service_name = 2; + required string method = 3; + required bytes request = 4; + optional string request_id = 5; +} + +message ApplicationError { + required int32 code = 1; + required string detail = 2; +} + +message RpcError { + enum ErrorCode { + UNKNOWN = 0; + CALL_NOT_FOUND = 1; + PARSE_ERROR = 2; + SECURITY_VIOLATION = 3; + OVER_QUOTA = 4; + REQUEST_TOO_LARGE = 5; + CAPABILITY_DISABLED = 6; + FEATURE_DISABLED = 7; + BAD_REQUEST = 8; + RESPONSE_TOO_LARGE = 9; + CANCELLED = 10; + REPLAY_ERROR = 11; + DEADLINE_EXCEEDED = 12; + } + required int32 code = 1; + optional string detail = 2; +} + +message Response { + optional bytes response = 1; + optional bytes exception = 2; + optional ApplicationError application_error = 3; + optional bytes java_exception = 4; + optional RpcError rpc_error = 5; +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/transaction.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/transaction.go new file mode 100644 index 00000000000..9006ae65380 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/transaction.go @@ -0,0 +1,115 @@ +// Copyright 2014 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package internal + +// This file implements hooks for applying datastore transactions. + +import ( + "errors" + "reflect" + + "github.com/golang/protobuf/proto" + netcontext "golang.org/x/net/context" + + basepb "google.golang.org/appengine/internal/base" + pb "google.golang.org/appengine/internal/datastore" +) + +var transactionSetters = make(map[reflect.Type]reflect.Value) + +// RegisterTransactionSetter registers a function that sets transaction information +// in a protocol buffer message. f should be a function with two arguments, +// the first being a protocol buffer type, and the second being *datastore.Transaction. +func RegisterTransactionSetter(f interface{}) { + v := reflect.ValueOf(f) + transactionSetters[v.Type().In(0)] = v +} + +// applyTransaction applies the transaction t to message pb +// by using the relevant setter passed to RegisterTransactionSetter. +func applyTransaction(pb proto.Message, t *pb.Transaction) { + v := reflect.ValueOf(pb) + if f, ok := transactionSetters[v.Type()]; ok { + f.Call([]reflect.Value{v, reflect.ValueOf(t)}) + } +} + +var transactionKey = "used for *Transaction" + +func transactionFromContext(ctx netcontext.Context) *transaction { + t, _ := ctx.Value(&transactionKey).(*transaction) + return t +} + +func withTransaction(ctx netcontext.Context, t *transaction) netcontext.Context { + return netcontext.WithValue(ctx, &transactionKey, t) +} + +type transaction struct { + transaction pb.Transaction + finished bool +} + +var ErrConcurrentTransaction = errors.New("internal: concurrent transaction") + +func RunTransactionOnce(c netcontext.Context, f func(netcontext.Context) error, xg bool, readOnly bool, previousTransaction *pb.Transaction) (*pb.Transaction, error) { + if transactionFromContext(c) != nil { + return nil, errors.New("nested transactions are not supported") + } + + // Begin the transaction. + t := &transaction{} + req := &pb.BeginTransactionRequest{ + App: proto.String(FullyQualifiedAppID(c)), + } + if xg { + req.AllowMultipleEg = proto.Bool(true) + } + if previousTransaction != nil { + req.PreviousTransaction = previousTransaction + } + if readOnly { + req.Mode = pb.BeginTransactionRequest_READ_ONLY.Enum() + } else { + req.Mode = pb.BeginTransactionRequest_READ_WRITE.Enum() + } + if err := Call(c, "datastore_v3", "BeginTransaction", req, &t.transaction); err != nil { + return nil, err + } + + // Call f, rolling back the transaction if f returns a non-nil error, or panics. + // The panic is not recovered. + defer func() { + if t.finished { + return + } + t.finished = true + // Ignore the error return value, since we are already returning a non-nil + // error (or we're panicking). + Call(c, "datastore_v3", "Rollback", &t.transaction, &basepb.VoidProto{}) + }() + if err := f(withTransaction(c, t)); err != nil { + return &t.transaction, err + } + t.finished = true + + // Commit the transaction. + res := &pb.CommitResponse{} + err := Call(c, "datastore_v3", "Commit", &t.transaction, res) + if ae, ok := err.(*APIError); ok { + /* TODO: restore this conditional + if appengine.IsDevAppServer() { + */ + // The Python Dev AppServer raises an ApplicationError with error code 2 (which is + // Error.CONCURRENT_TRANSACTION) and message "Concurrency exception.". + if ae.Code == int32(pb.Error_BAD_REQUEST) && ae.Detail == "ApplicationError: 2 Concurrency exception." { + return &t.transaction, ErrConcurrentTransaction + } + if ae.Code == int32(pb.Error_CONCURRENT_TRANSACTION) { + return &t.transaction, ErrConcurrentTransaction + } + } + return &t.transaction, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go new file mode 100644 index 00000000000..5f727750adc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go @@ -0,0 +1,527 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto + +package urlfetch + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type URLFetchServiceError_ErrorCode int32 + +const ( + URLFetchServiceError_OK URLFetchServiceError_ErrorCode = 0 + URLFetchServiceError_INVALID_URL URLFetchServiceError_ErrorCode = 1 + URLFetchServiceError_FETCH_ERROR URLFetchServiceError_ErrorCode = 2 + URLFetchServiceError_UNSPECIFIED_ERROR URLFetchServiceError_ErrorCode = 3 + URLFetchServiceError_RESPONSE_TOO_LARGE URLFetchServiceError_ErrorCode = 4 + URLFetchServiceError_DEADLINE_EXCEEDED URLFetchServiceError_ErrorCode = 5 + URLFetchServiceError_SSL_CERTIFICATE_ERROR URLFetchServiceError_ErrorCode = 6 + URLFetchServiceError_DNS_ERROR URLFetchServiceError_ErrorCode = 7 + URLFetchServiceError_CLOSED URLFetchServiceError_ErrorCode = 8 + URLFetchServiceError_INTERNAL_TRANSIENT_ERROR URLFetchServiceError_ErrorCode = 9 + URLFetchServiceError_TOO_MANY_REDIRECTS URLFetchServiceError_ErrorCode = 10 + URLFetchServiceError_MALFORMED_REPLY URLFetchServiceError_ErrorCode = 11 + URLFetchServiceError_CONNECTION_ERROR URLFetchServiceError_ErrorCode = 12 +) + +var URLFetchServiceError_ErrorCode_name = map[int32]string{ + 0: "OK", + 1: "INVALID_URL", + 2: "FETCH_ERROR", + 3: "UNSPECIFIED_ERROR", + 4: "RESPONSE_TOO_LARGE", + 5: "DEADLINE_EXCEEDED", + 6: "SSL_CERTIFICATE_ERROR", + 7: "DNS_ERROR", + 8: "CLOSED", + 9: "INTERNAL_TRANSIENT_ERROR", + 10: "TOO_MANY_REDIRECTS", + 11: "MALFORMED_REPLY", + 12: "CONNECTION_ERROR", +} +var URLFetchServiceError_ErrorCode_value = map[string]int32{ + "OK": 0, + "INVALID_URL": 1, + "FETCH_ERROR": 2, + "UNSPECIFIED_ERROR": 3, + "RESPONSE_TOO_LARGE": 4, + "DEADLINE_EXCEEDED": 5, + "SSL_CERTIFICATE_ERROR": 6, + "DNS_ERROR": 7, + "CLOSED": 8, + "INTERNAL_TRANSIENT_ERROR": 9, + "TOO_MANY_REDIRECTS": 10, + "MALFORMED_REPLY": 11, + "CONNECTION_ERROR": 12, +} + +func (x URLFetchServiceError_ErrorCode) Enum() *URLFetchServiceError_ErrorCode { + p := new(URLFetchServiceError_ErrorCode) + *p = x + return p +} +func (x URLFetchServiceError_ErrorCode) String() string { + return proto.EnumName(URLFetchServiceError_ErrorCode_name, int32(x)) +} +func (x *URLFetchServiceError_ErrorCode) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(URLFetchServiceError_ErrorCode_value, data, "URLFetchServiceError_ErrorCode") + if err != nil { + return err + } + *x = URLFetchServiceError_ErrorCode(value) + return nil +} +func (URLFetchServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{0, 0} +} + +type URLFetchRequest_RequestMethod int32 + +const ( + URLFetchRequest_GET URLFetchRequest_RequestMethod = 1 + URLFetchRequest_POST URLFetchRequest_RequestMethod = 2 + URLFetchRequest_HEAD URLFetchRequest_RequestMethod = 3 + URLFetchRequest_PUT URLFetchRequest_RequestMethod = 4 + URLFetchRequest_DELETE URLFetchRequest_RequestMethod = 5 + URLFetchRequest_PATCH URLFetchRequest_RequestMethod = 6 +) + +var URLFetchRequest_RequestMethod_name = map[int32]string{ + 1: "GET", + 2: "POST", + 3: "HEAD", + 4: "PUT", + 5: "DELETE", + 6: "PATCH", +} +var URLFetchRequest_RequestMethod_value = map[string]int32{ + "GET": 1, + "POST": 2, + "HEAD": 3, + "PUT": 4, + "DELETE": 5, + "PATCH": 6, +} + +func (x URLFetchRequest_RequestMethod) Enum() *URLFetchRequest_RequestMethod { + p := new(URLFetchRequest_RequestMethod) + *p = x + return p +} +func (x URLFetchRequest_RequestMethod) String() string { + return proto.EnumName(URLFetchRequest_RequestMethod_name, int32(x)) +} +func (x *URLFetchRequest_RequestMethod) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(URLFetchRequest_RequestMethod_value, data, "URLFetchRequest_RequestMethod") + if err != nil { + return err + } + *x = URLFetchRequest_RequestMethod(value) + return nil +} +func (URLFetchRequest_RequestMethod) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1, 0} +} + +type URLFetchServiceError struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *URLFetchServiceError) Reset() { *m = URLFetchServiceError{} } +func (m *URLFetchServiceError) String() string { return proto.CompactTextString(m) } +func (*URLFetchServiceError) ProtoMessage() {} +func (*URLFetchServiceError) Descriptor() ([]byte, []int) { + return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{0} +} +func (m *URLFetchServiceError) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_URLFetchServiceError.Unmarshal(m, b) +} +func (m *URLFetchServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_URLFetchServiceError.Marshal(b, m, deterministic) +} +func (dst *URLFetchServiceError) XXX_Merge(src proto.Message) { + xxx_messageInfo_URLFetchServiceError.Merge(dst, src) +} +func (m *URLFetchServiceError) XXX_Size() int { + return xxx_messageInfo_URLFetchServiceError.Size(m) +} +func (m *URLFetchServiceError) XXX_DiscardUnknown() { + xxx_messageInfo_URLFetchServiceError.DiscardUnknown(m) +} + +var xxx_messageInfo_URLFetchServiceError proto.InternalMessageInfo + +type URLFetchRequest struct { + Method *URLFetchRequest_RequestMethod `protobuf:"varint,1,req,name=Method,enum=appengine.URLFetchRequest_RequestMethod" json:"Method,omitempty"` + Url *string `protobuf:"bytes,2,req,name=Url" json:"Url,omitempty"` + Header []*URLFetchRequest_Header `protobuf:"group,3,rep,name=Header,json=header" json:"header,omitempty"` + Payload []byte `protobuf:"bytes,6,opt,name=Payload" json:"Payload,omitempty"` + FollowRedirects *bool `protobuf:"varint,7,opt,name=FollowRedirects,def=1" json:"FollowRedirects,omitempty"` + Deadline *float64 `protobuf:"fixed64,8,opt,name=Deadline" json:"Deadline,omitempty"` + MustValidateServerCertificate *bool `protobuf:"varint,9,opt,name=MustValidateServerCertificate,def=1" json:"MustValidateServerCertificate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *URLFetchRequest) Reset() { *m = URLFetchRequest{} } +func (m *URLFetchRequest) String() string { return proto.CompactTextString(m) } +func (*URLFetchRequest) ProtoMessage() {} +func (*URLFetchRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1} +} +func (m *URLFetchRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_URLFetchRequest.Unmarshal(m, b) +} +func (m *URLFetchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_URLFetchRequest.Marshal(b, m, deterministic) +} +func (dst *URLFetchRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_URLFetchRequest.Merge(dst, src) +} +func (m *URLFetchRequest) XXX_Size() int { + return xxx_messageInfo_URLFetchRequest.Size(m) +} +func (m *URLFetchRequest) XXX_DiscardUnknown() { + xxx_messageInfo_URLFetchRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_URLFetchRequest proto.InternalMessageInfo + +const Default_URLFetchRequest_FollowRedirects bool = true +const Default_URLFetchRequest_MustValidateServerCertificate bool = true + +func (m *URLFetchRequest) GetMethod() URLFetchRequest_RequestMethod { + if m != nil && m.Method != nil { + return *m.Method + } + return URLFetchRequest_GET +} + +func (m *URLFetchRequest) GetUrl() string { + if m != nil && m.Url != nil { + return *m.Url + } + return "" +} + +func (m *URLFetchRequest) GetHeader() []*URLFetchRequest_Header { + if m != nil { + return m.Header + } + return nil +} + +func (m *URLFetchRequest) GetPayload() []byte { + if m != nil { + return m.Payload + } + return nil +} + +func (m *URLFetchRequest) GetFollowRedirects() bool { + if m != nil && m.FollowRedirects != nil { + return *m.FollowRedirects + } + return Default_URLFetchRequest_FollowRedirects +} + +func (m *URLFetchRequest) GetDeadline() float64 { + if m != nil && m.Deadline != nil { + return *m.Deadline + } + return 0 +} + +func (m *URLFetchRequest) GetMustValidateServerCertificate() bool { + if m != nil && m.MustValidateServerCertificate != nil { + return *m.MustValidateServerCertificate + } + return Default_URLFetchRequest_MustValidateServerCertificate +} + +type URLFetchRequest_Header struct { + Key *string `protobuf:"bytes,4,req,name=Key" json:"Key,omitempty"` + Value *string `protobuf:"bytes,5,req,name=Value" json:"Value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *URLFetchRequest_Header) Reset() { *m = URLFetchRequest_Header{} } +func (m *URLFetchRequest_Header) String() string { return proto.CompactTextString(m) } +func (*URLFetchRequest_Header) ProtoMessage() {} +func (*URLFetchRequest_Header) Descriptor() ([]byte, []int) { + return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1, 0} +} +func (m *URLFetchRequest_Header) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_URLFetchRequest_Header.Unmarshal(m, b) +} +func (m *URLFetchRequest_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_URLFetchRequest_Header.Marshal(b, m, deterministic) +} +func (dst *URLFetchRequest_Header) XXX_Merge(src proto.Message) { + xxx_messageInfo_URLFetchRequest_Header.Merge(dst, src) +} +func (m *URLFetchRequest_Header) XXX_Size() int { + return xxx_messageInfo_URLFetchRequest_Header.Size(m) +} +func (m *URLFetchRequest_Header) XXX_DiscardUnknown() { + xxx_messageInfo_URLFetchRequest_Header.DiscardUnknown(m) +} + +var xxx_messageInfo_URLFetchRequest_Header proto.InternalMessageInfo + +func (m *URLFetchRequest_Header) GetKey() string { + if m != nil && m.Key != nil { + return *m.Key + } + return "" +} + +func (m *URLFetchRequest_Header) GetValue() string { + if m != nil && m.Value != nil { + return *m.Value + } + return "" +} + +type URLFetchResponse struct { + Content []byte `protobuf:"bytes,1,opt,name=Content" json:"Content,omitempty"` + StatusCode *int32 `protobuf:"varint,2,req,name=StatusCode" json:"StatusCode,omitempty"` + Header []*URLFetchResponse_Header `protobuf:"group,3,rep,name=Header,json=header" json:"header,omitempty"` + ContentWasTruncated *bool `protobuf:"varint,6,opt,name=ContentWasTruncated,def=0" json:"ContentWasTruncated,omitempty"` + ExternalBytesSent *int64 `protobuf:"varint,7,opt,name=ExternalBytesSent" json:"ExternalBytesSent,omitempty"` + ExternalBytesReceived *int64 `protobuf:"varint,8,opt,name=ExternalBytesReceived" json:"ExternalBytesReceived,omitempty"` + FinalUrl *string `protobuf:"bytes,9,opt,name=FinalUrl" json:"FinalUrl,omitempty"` + ApiCpuMilliseconds *int64 `protobuf:"varint,10,opt,name=ApiCpuMilliseconds,def=0" json:"ApiCpuMilliseconds,omitempty"` + ApiBytesSent *int64 `protobuf:"varint,11,opt,name=ApiBytesSent,def=0" json:"ApiBytesSent,omitempty"` + ApiBytesReceived *int64 `protobuf:"varint,12,opt,name=ApiBytesReceived,def=0" json:"ApiBytesReceived,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *URLFetchResponse) Reset() { *m = URLFetchResponse{} } +func (m *URLFetchResponse) String() string { return proto.CompactTextString(m) } +func (*URLFetchResponse) ProtoMessage() {} +func (*URLFetchResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{2} +} +func (m *URLFetchResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_URLFetchResponse.Unmarshal(m, b) +} +func (m *URLFetchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_URLFetchResponse.Marshal(b, m, deterministic) +} +func (dst *URLFetchResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_URLFetchResponse.Merge(dst, src) +} +func (m *URLFetchResponse) XXX_Size() int { + return xxx_messageInfo_URLFetchResponse.Size(m) +} +func (m *URLFetchResponse) XXX_DiscardUnknown() { + xxx_messageInfo_URLFetchResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_URLFetchResponse proto.InternalMessageInfo + +const Default_URLFetchResponse_ContentWasTruncated bool = false +const Default_URLFetchResponse_ApiCpuMilliseconds int64 = 0 +const Default_URLFetchResponse_ApiBytesSent int64 = 0 +const Default_URLFetchResponse_ApiBytesReceived int64 = 0 + +func (m *URLFetchResponse) GetContent() []byte { + if m != nil { + return m.Content + } + return nil +} + +func (m *URLFetchResponse) GetStatusCode() int32 { + if m != nil && m.StatusCode != nil { + return *m.StatusCode + } + return 0 +} + +func (m *URLFetchResponse) GetHeader() []*URLFetchResponse_Header { + if m != nil { + return m.Header + } + return nil +} + +func (m *URLFetchResponse) GetContentWasTruncated() bool { + if m != nil && m.ContentWasTruncated != nil { + return *m.ContentWasTruncated + } + return Default_URLFetchResponse_ContentWasTruncated +} + +func (m *URLFetchResponse) GetExternalBytesSent() int64 { + if m != nil && m.ExternalBytesSent != nil { + return *m.ExternalBytesSent + } + return 0 +} + +func (m *URLFetchResponse) GetExternalBytesReceived() int64 { + if m != nil && m.ExternalBytesReceived != nil { + return *m.ExternalBytesReceived + } + return 0 +} + +func (m *URLFetchResponse) GetFinalUrl() string { + if m != nil && m.FinalUrl != nil { + return *m.FinalUrl + } + return "" +} + +func (m *URLFetchResponse) GetApiCpuMilliseconds() int64 { + if m != nil && m.ApiCpuMilliseconds != nil { + return *m.ApiCpuMilliseconds + } + return Default_URLFetchResponse_ApiCpuMilliseconds +} + +func (m *URLFetchResponse) GetApiBytesSent() int64 { + if m != nil && m.ApiBytesSent != nil { + return *m.ApiBytesSent + } + return Default_URLFetchResponse_ApiBytesSent +} + +func (m *URLFetchResponse) GetApiBytesReceived() int64 { + if m != nil && m.ApiBytesReceived != nil { + return *m.ApiBytesReceived + } + return Default_URLFetchResponse_ApiBytesReceived +} + +type URLFetchResponse_Header struct { + Key *string `protobuf:"bytes,4,req,name=Key" json:"Key,omitempty"` + Value *string `protobuf:"bytes,5,req,name=Value" json:"Value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *URLFetchResponse_Header) Reset() { *m = URLFetchResponse_Header{} } +func (m *URLFetchResponse_Header) String() string { return proto.CompactTextString(m) } +func (*URLFetchResponse_Header) ProtoMessage() {} +func (*URLFetchResponse_Header) Descriptor() ([]byte, []int) { + return fileDescriptor_urlfetch_service_b245a7065f33bced, []int{2, 0} +} +func (m *URLFetchResponse_Header) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_URLFetchResponse_Header.Unmarshal(m, b) +} +func (m *URLFetchResponse_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_URLFetchResponse_Header.Marshal(b, m, deterministic) +} +func (dst *URLFetchResponse_Header) XXX_Merge(src proto.Message) { + xxx_messageInfo_URLFetchResponse_Header.Merge(dst, src) +} +func (m *URLFetchResponse_Header) XXX_Size() int { + return xxx_messageInfo_URLFetchResponse_Header.Size(m) +} +func (m *URLFetchResponse_Header) XXX_DiscardUnknown() { + xxx_messageInfo_URLFetchResponse_Header.DiscardUnknown(m) +} + +var xxx_messageInfo_URLFetchResponse_Header proto.InternalMessageInfo + +func (m *URLFetchResponse_Header) GetKey() string { + if m != nil && m.Key != nil { + return *m.Key + } + return "" +} + +func (m *URLFetchResponse_Header) GetValue() string { + if m != nil && m.Value != nil { + return *m.Value + } + return "" +} + +func init() { + proto.RegisterType((*URLFetchServiceError)(nil), "appengine.URLFetchServiceError") + proto.RegisterType((*URLFetchRequest)(nil), "appengine.URLFetchRequest") + proto.RegisterType((*URLFetchRequest_Header)(nil), "appengine.URLFetchRequest.Header") + proto.RegisterType((*URLFetchResponse)(nil), "appengine.URLFetchResponse") + proto.RegisterType((*URLFetchResponse_Header)(nil), "appengine.URLFetchResponse.Header") +} + +func init() { + proto.RegisterFile("google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto", fileDescriptor_urlfetch_service_b245a7065f33bced) +} + +var fileDescriptor_urlfetch_service_b245a7065f33bced = []byte{ + // 770 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xe3, 0x54, + 0x10, 0xc6, 0x76, 0x7e, 0xa7, 0x5d, 0x7a, 0x76, 0xb6, 0x45, 0x66, 0xb5, 0xa0, 0x10, 0x09, 0x29, + 0x17, 0x90, 0x2e, 0x2b, 0x24, 0x44, 0xaf, 0x70, 0xed, 0x93, 0xad, 0xa9, 0x63, 0x47, 0xc7, 0x4e, + 0x61, 0xb9, 0xb1, 0xac, 0x78, 0x9a, 0x5a, 0xb2, 0xec, 0x60, 0x9f, 0x2c, 0xf4, 0x35, 0x78, 0x0d, + 0xde, 0x87, 0xa7, 0xe1, 0x02, 0x9d, 0xc4, 0xc9, 0x6e, 0xbb, 0xd1, 0x4a, 0x5c, 0x65, 0xe6, 0x9b, + 0xef, 0xcc, 0x99, 0x7c, 0xdf, 0xf8, 0x80, 0xb3, 0x2c, 0xcb, 0x65, 0x4e, 0xe3, 0x65, 0x99, 0x27, + 0xc5, 0x72, 0x5c, 0x56, 0xcb, 0xf3, 0x64, 0xb5, 0xa2, 0x62, 0x99, 0x15, 0x74, 0x9e, 0x15, 0x92, + 0xaa, 0x22, 0xc9, 0xcf, 0xd7, 0x55, 0x7e, 0x4b, 0x72, 0x71, 0xb7, 0x0f, 0xe2, 0x9a, 0xaa, 0xb7, + 0xd9, 0x82, 0xc6, 0xab, 0xaa, 0x94, 0x25, 0xf6, 0xf7, 0x67, 0x86, 0x7f, 0xeb, 0x70, 0x3a, 0x17, + 0xde, 0x44, 0xb1, 0xc2, 0x2d, 0x89, 0x57, 0x55, 0x59, 0x0d, 0xff, 0xd2, 0xa1, 0xbf, 0x89, 0xec, + 0x32, 0x25, 0xec, 0x80, 0x1e, 0x5c, 0xb3, 0x4f, 0xf0, 0x04, 0x8e, 0x5c, 0xff, 0xc6, 0xf2, 0x5c, + 0x27, 0x9e, 0x0b, 0x8f, 0x69, 0x0a, 0x98, 0xf0, 0xc8, 0xbe, 0x8a, 0xb9, 0x10, 0x81, 0x60, 0x3a, + 0x9e, 0xc1, 0xd3, 0xb9, 0x1f, 0xce, 0xb8, 0xed, 0x4e, 0x5c, 0xee, 0x34, 0xb0, 0x81, 0x9f, 0x01, + 0x0a, 0x1e, 0xce, 0x02, 0x3f, 0xe4, 0x71, 0x14, 0x04, 0xb1, 0x67, 0x89, 0xd7, 0x9c, 0xb5, 0x14, + 0xdd, 0xe1, 0x96, 0xe3, 0xb9, 0x3e, 0x8f, 0xf9, 0xaf, 0x36, 0xe7, 0x0e, 0x77, 0x58, 0x1b, 0x3f, + 0x87, 0xb3, 0x30, 0xf4, 0x62, 0x9b, 0x8b, 0xc8, 0x9d, 0xb8, 0xb6, 0x15, 0xf1, 0xa6, 0x53, 0x07, + 0x9f, 0x40, 0xdf, 0xf1, 0xc3, 0x26, 0xed, 0x22, 0x40, 0xc7, 0xf6, 0x82, 0x90, 0x3b, 0xac, 0x87, + 0x2f, 0xc0, 0x74, 0xfd, 0x88, 0x0b, 0xdf, 0xf2, 0xe2, 0x48, 0x58, 0x7e, 0xe8, 0x72, 0x3f, 0x6a, + 0x98, 0x7d, 0x35, 0x82, 0xba, 0x79, 0x6a, 0xf9, 0x6f, 0x62, 0xc1, 0x1d, 0x57, 0x70, 0x3b, 0x0a, + 0x19, 0xe0, 0x33, 0x38, 0x99, 0x5a, 0xde, 0x24, 0x10, 0x53, 0xee, 0xc4, 0x82, 0xcf, 0xbc, 0x37, + 0xec, 0x08, 0x4f, 0x81, 0xd9, 0x81, 0xef, 0x73, 0x3b, 0x72, 0x03, 0xbf, 0x69, 0x71, 0x3c, 0xfc, + 0xc7, 0x80, 0x93, 0x9d, 0x5a, 0x82, 0x7e, 0x5f, 0x53, 0x2d, 0xf1, 0x27, 0xe8, 0x4c, 0x49, 0xde, + 0x95, 0xa9, 0xa9, 0x0d, 0xf4, 0xd1, 0xa7, 0xaf, 0x46, 0xe3, 0xbd, 0xba, 0xe3, 0x47, 0xdc, 0x71, + 0xf3, 0xbb, 0xe5, 0x8b, 0xe6, 0x1c, 0x32, 0x30, 0xe6, 0x55, 0x6e, 0xea, 0x03, 0x7d, 0xd4, 0x17, + 0x2a, 0xc4, 0x1f, 0xa1, 0x73, 0x47, 0x49, 0x4a, 0x95, 0x69, 0x0c, 0x8c, 0x11, 0xbc, 0xfa, 0xea, + 0x23, 0x3d, 0xaf, 0x36, 0x44, 0xd1, 0x1c, 0xc0, 0x17, 0xd0, 0x9d, 0x25, 0xf7, 0x79, 0x99, 0xa4, + 0x66, 0x67, 0xa0, 0x8d, 0x8e, 0x2f, 0xf5, 0x9e, 0x26, 0x76, 0x10, 0x8e, 0xe1, 0x64, 0x52, 0xe6, + 0x79, 0xf9, 0x87, 0xa0, 0x34, 0xab, 0x68, 0x21, 0x6b, 0xb3, 0x3b, 0xd0, 0x46, 0xbd, 0x8b, 0x96, + 0xac, 0xd6, 0x24, 0x1e, 0x17, 0xf1, 0x39, 0xf4, 0x1c, 0x4a, 0xd2, 0x3c, 0x2b, 0xc8, 0xec, 0x0d, + 0xb4, 0x91, 0x26, 0xf6, 0x39, 0xfe, 0x0c, 0x5f, 0x4c, 0xd7, 0xb5, 0xbc, 0x49, 0xf2, 0x2c, 0x4d, + 0x24, 0xa9, 0xed, 0xa1, 0xca, 0xa6, 0x4a, 0x66, 0xb7, 0xd9, 0x22, 0x91, 0x64, 0xf6, 0xdf, 0xeb, + 0xfc, 0x71, 0xea, 0xf3, 0x97, 0xd0, 0xd9, 0xfe, 0x0f, 0x25, 0xc6, 0x35, 0xdd, 0x9b, 0xad, 0xad, + 0x18, 0xd7, 0x74, 0x8f, 0xa7, 0xd0, 0xbe, 0x49, 0xf2, 0x35, 0x99, 0xed, 0x0d, 0xb6, 0x4d, 0x86, + 0x1e, 0x3c, 0x79, 0xa0, 0x26, 0x76, 0xc1, 0x78, 0xcd, 0x23, 0xa6, 0x61, 0x0f, 0x5a, 0xb3, 0x20, + 0x8c, 0x98, 0xae, 0xa2, 0x2b, 0x6e, 0x39, 0xcc, 0x50, 0xc5, 0xd9, 0x3c, 0x62, 0x2d, 0xb5, 0x2e, + 0x0e, 0xf7, 0x78, 0xc4, 0x59, 0x1b, 0xfb, 0xd0, 0x9e, 0x59, 0x91, 0x7d, 0xc5, 0x3a, 0xc3, 0x7f, + 0x0d, 0x60, 0xef, 0x84, 0xad, 0x57, 0x65, 0x51, 0x13, 0x9a, 0xd0, 0xb5, 0xcb, 0x42, 0x52, 0x21, + 0x4d, 0x4d, 0x49, 0x29, 0x76, 0x29, 0x7e, 0x09, 0x10, 0xca, 0x44, 0xae, 0x6b, 0xf5, 0x71, 0x6c, + 0x8c, 0x6b, 0x8b, 0xf7, 0x10, 0xbc, 0x78, 0xe4, 0xdf, 0xf0, 0xa0, 0x7f, 0xdb, 0x6b, 0x1e, 0x1b, + 0xf8, 0x03, 0x3c, 0x6b, 0xae, 0xf9, 0x25, 0xa9, 0xa3, 0x6a, 0x5d, 0x28, 0x81, 0xb6, 0x66, 0xf6, + 0x2e, 0xda, 0xb7, 0x49, 0x5e, 0x93, 0x38, 0xc4, 0xc0, 0x6f, 0xe0, 0x29, 0xff, 0x73, 0xfb, 0x02, + 0x5c, 0xde, 0x4b, 0xaa, 0x43, 0x35, 0xb8, 0x72, 0xd7, 0x10, 0x1f, 0x16, 0xf0, 0x7b, 0x38, 0x7b, + 0x00, 0x0a, 0x5a, 0x50, 0xf6, 0x96, 0xd2, 0x8d, 0xcd, 0x86, 0x38, 0x5c, 0x54, 0xfb, 0x30, 0xc9, + 0x8a, 0x24, 0x57, 0xfb, 0xaa, 0xec, 0xed, 0x8b, 0x7d, 0x8e, 0xdf, 0x01, 0x5a, 0xab, 0xcc, 0x5e, + 0xad, 0xa7, 0x59, 0x9e, 0x67, 0x35, 0x2d, 0xca, 0x22, 0xad, 0x4d, 0x50, 0xed, 0x2e, 0xb4, 0x97, + 0xe2, 0x40, 0x11, 0xbf, 0x86, 0x63, 0x6b, 0x95, 0xbd, 0x9b, 0xf6, 0x68, 0x47, 0x7e, 0x00, 0xe3, + 0xb7, 0xc0, 0x76, 0xf9, 0x7e, 0xcc, 0xe3, 0x1d, 0xf5, 0x83, 0xd2, 0xff, 0x5f, 0xa6, 0x4b, 0xf8, + 0xad, 0xb7, 0x7b, 0x2a, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x9f, 0x6d, 0x24, 0x63, 0x05, + 0x00, 0x00, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto new file mode 100644 index 00000000000..f695edf6a90 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto @@ -0,0 +1,64 @@ +syntax = "proto2"; +option go_package = "urlfetch"; + +package appengine; + +message URLFetchServiceError { + enum ErrorCode { + OK = 0; + INVALID_URL = 1; + FETCH_ERROR = 2; + UNSPECIFIED_ERROR = 3; + RESPONSE_TOO_LARGE = 4; + DEADLINE_EXCEEDED = 5; + SSL_CERTIFICATE_ERROR = 6; + DNS_ERROR = 7; + CLOSED = 8; + INTERNAL_TRANSIENT_ERROR = 9; + TOO_MANY_REDIRECTS = 10; + MALFORMED_REPLY = 11; + CONNECTION_ERROR = 12; + } +} + +message URLFetchRequest { + enum RequestMethod { + GET = 1; + POST = 2; + HEAD = 3; + PUT = 4; + DELETE = 5; + PATCH = 6; + } + required RequestMethod Method = 1; + required string Url = 2; + repeated group Header = 3 { + required string Key = 4; + required string Value = 5; + } + optional bytes Payload = 6 [ctype=CORD]; + + optional bool FollowRedirects = 7 [default=true]; + + optional double Deadline = 8; + + optional bool MustValidateServerCertificate = 9 [default=true]; +} + +message URLFetchResponse { + optional bytes Content = 1; + required int32 StatusCode = 2; + repeated group Header = 3 { + required string Key = 4; + required string Value = 5; + } + optional bool ContentWasTruncated = 6 [default=false]; + optional int64 ExternalBytesSent = 7; + optional int64 ExternalBytesReceived = 8; + + optional string FinalUrl = 9; + + optional int64 ApiCpuMilliseconds = 10 [default=0]; + optional int64 ApiBytesSent = 11 [default=0]; + optional int64 ApiBytesReceived = 12 [default=0]; +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/urlfetch/urlfetch.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/urlfetch/urlfetch.go new file mode 100644 index 00000000000..6ffe1e6d901 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/google.golang.org/appengine/urlfetch/urlfetch.go @@ -0,0 +1,210 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// Package urlfetch provides an http.RoundTripper implementation +// for fetching URLs via App Engine's urlfetch service. +package urlfetch // import "google.golang.org/appengine/urlfetch" + +import ( + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "strconv" + "strings" + "time" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + + "google.golang.org/appengine/internal" + pb "google.golang.org/appengine/internal/urlfetch" +) + +// Transport is an implementation of http.RoundTripper for +// App Engine. Users should generally create an http.Client using +// this transport and use the Client rather than using this transport +// directly. +type Transport struct { + Context context.Context + + // Controls whether the application checks the validity of SSL certificates + // over HTTPS connections. A value of false (the default) instructs the + // application to send a request to the server only if the certificate is + // valid and signed by a trusted certificate authority (CA), and also + // includes a hostname that matches the certificate. A value of true + // instructs the application to perform no certificate validation. + AllowInvalidServerCertificate bool +} + +// Verify statically that *Transport implements http.RoundTripper. +var _ http.RoundTripper = (*Transport)(nil) + +// Client returns an *http.Client using a default urlfetch Transport. This +// client will have the default deadline of 5 seconds, and will check the +// validity of SSL certificates. +// +// Any deadline of the provided context will be used for requests through this client; +// if the client does not have a deadline then a 5 second default is used. +func Client(ctx context.Context) *http.Client { + return &http.Client{ + Transport: &Transport{ + Context: ctx, + }, + } +} + +type bodyReader struct { + content []byte + truncated bool + closed bool +} + +// ErrTruncatedBody is the error returned after the final Read() from a +// response's Body if the body has been truncated by App Engine's proxy. +var ErrTruncatedBody = errors.New("urlfetch: truncated body") + +func statusCodeToText(code int) string { + if t := http.StatusText(code); t != "" { + return t + } + return strconv.Itoa(code) +} + +func (br *bodyReader) Read(p []byte) (n int, err error) { + if br.closed { + if br.truncated { + return 0, ErrTruncatedBody + } + return 0, io.EOF + } + n = copy(p, br.content) + if n > 0 { + br.content = br.content[n:] + return + } + if br.truncated { + br.closed = true + return 0, ErrTruncatedBody + } + return 0, io.EOF +} + +func (br *bodyReader) Close() error { + br.closed = true + br.content = nil + return nil +} + +// A map of the URL Fetch-accepted methods that take a request body. +var methodAcceptsRequestBody = map[string]bool{ + "POST": true, + "PUT": true, + "PATCH": true, +} + +// urlString returns a valid string given a URL. This function is necessary because +// the String method of URL doesn't correctly handle URLs with non-empty Opaque values. +// See http://code.google.com/p/go/issues/detail?id=4860. +func urlString(u *url.URL) string { + if u.Opaque == "" || strings.HasPrefix(u.Opaque, "//") { + return u.String() + } + aux := *u + aux.Opaque = "//" + aux.Host + aux.Opaque + return aux.String() +} + +// RoundTrip issues a single HTTP request and returns its response. Per the +// http.RoundTripper interface, RoundTrip only returns an error if there +// was an unsupported request or the URL Fetch proxy fails. +// Note that HTTP response codes such as 5xx, 403, 404, etc are not +// errors as far as the transport is concerned and will be returned +// with err set to nil. +func (t *Transport) RoundTrip(req *http.Request) (res *http.Response, err error) { + methNum, ok := pb.URLFetchRequest_RequestMethod_value[req.Method] + if !ok { + return nil, fmt.Errorf("urlfetch: unsupported HTTP method %q", req.Method) + } + + method := pb.URLFetchRequest_RequestMethod(methNum) + + freq := &pb.URLFetchRequest{ + Method: &method, + Url: proto.String(urlString(req.URL)), + FollowRedirects: proto.Bool(false), // http.Client's responsibility + MustValidateServerCertificate: proto.Bool(!t.AllowInvalidServerCertificate), + } + if deadline, ok := t.Context.Deadline(); ok { + freq.Deadline = proto.Float64(deadline.Sub(time.Now()).Seconds()) + } + + for k, vals := range req.Header { + for _, val := range vals { + freq.Header = append(freq.Header, &pb.URLFetchRequest_Header{ + Key: proto.String(k), + Value: proto.String(val), + }) + } + } + if methodAcceptsRequestBody[req.Method] && req.Body != nil { + // Avoid a []byte copy if req.Body has a Bytes method. + switch b := req.Body.(type) { + case interface { + Bytes() []byte + }: + freq.Payload = b.Bytes() + default: + freq.Payload, err = ioutil.ReadAll(req.Body) + if err != nil { + return nil, err + } + } + } + + fres := &pb.URLFetchResponse{} + if err := internal.Call(t.Context, "urlfetch", "Fetch", freq, fres); err != nil { + return nil, err + } + + res = &http.Response{} + res.StatusCode = int(*fres.StatusCode) + res.Status = fmt.Sprintf("%d %s", res.StatusCode, statusCodeToText(res.StatusCode)) + res.Header = make(http.Header) + res.Request = req + + // Faked: + res.ProtoMajor = 1 + res.ProtoMinor = 1 + res.Proto = "HTTP/1.1" + res.Close = true + + for _, h := range fres.Header { + hkey := http.CanonicalHeaderKey(*h.Key) + hval := *h.Value + if hkey == "Content-Length" { + // Will get filled in below for all but HEAD requests. + if req.Method == "HEAD" { + res.ContentLength, _ = strconv.ParseInt(hval, 10, 64) + } + continue + } + res.Header.Add(hkey, hval) + } + + if req.Method != "HEAD" { + res.ContentLength = int64(len(fres.Content)) + } + + truncated := fres.GetContentWasTruncated() + res.Body = &bodyReader{content: fres.Content, truncated: truncated} + return +} + +func init() { + internal.RegisterErrorCodeMap("urlfetch", pb.URLFetchServiceError_ErrorCode_name) + internal.RegisterTimeoutErrorCode("urlfetch", int32(pb.URLFetchServiceError_DEADLINE_EXCEEDED)) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/BUILD.bazel b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/BUILD.bazel new file mode 100644 index 00000000000..698c326c566 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/BUILD.bazel @@ -0,0 +1,36 @@ +package(default_visibility = ["//visibility:private"]) + +load("@bazel_gazelle//:def.bzl", "gazelle") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +gazelle( + name = "gazelle", + command = "fix", + prefix = "gopkg.in/resty.v1", +) + +go_library( + name = "go_default_library", + srcs = glob( + ["*.go"], + exclude = ["*_test.go"], + ), + importpath = "gopkg.in/resty.v1", + visibility = ["//visibility:public"], + deps = ["@org_golang_x_net//publicsuffix:go_default_library"], +) + +go_test( + name = "go_default_test", + srcs = + glob( + ["*_test.go"], + exclude = ["example_test.go"], + ), + data = glob([".testdata/*"]), + embed = [":go_default_library"], + importpath = "gopkg.in/resty.v1", + deps = [ + "@org_golang_x_net//proxy:go_default_library", + ], +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/LICENSE new file mode 100644 index 00000000000..5cf0a2f999d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2019 Jeevanandam M., https://myjeeva.com + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/README.md b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/README.md new file mode 100644 index 00000000000..8305734db87 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/README.md @@ -0,0 +1,741 @@ +

+

Resty

+

Simple HTTP and REST client library for Go (inspired by Ruby rest-client)

+

Features section describes in detail about Resty capabilities

+

+

+

Build Status Code Coverage Go Report Card Release Version GoDoc License

+

+

+

Resty Communication Channels

+

Chat on Gitter - Resty Community Twitter @go_resty

+

+ +## News + + * Resty `v2` development is in-progress :smile: + * v1.12.0 [released](https://github.com/go-resty/resty/releases/tag/v1.12.0) and tagged on Feb 27, 2019. + * v1.11.0 [released](https://github.com/go-resty/resty/releases/tag/v1.11.0) and tagged on Jan 06, 2019. + * v1.10.3 [released](https://github.com/go-resty/resty/releases/tag/v1.10.3) and tagged on Dec 04, 2018. + * v1.0 released and tagged on Sep 25, 2017. - Resty's first version was released on Sep 15, 2015 then it grew gradually as a very handy and helpful library. Its been a two years since first release. I'm very thankful to Resty users and its [contributors](https://github.com/go-resty/resty/graphs/contributors). + +## Features + + * GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS, etc. + * Simple and chainable methods for settings and request + * Request Body can be `string`, `[]byte`, `struct`, `map`, `slice` and `io.Reader` too + * Auto detects `Content-Type` + * Buffer less processing for `io.Reader` + * [Response](https://godoc.org/gopkg.in/resty.v1#Response) object gives you more possibility + * Access as `[]byte` array - `response.Body()` OR Access as `string` - `response.String()` + * Know your `response.Time()` and when we `response.ReceivedAt()` + * Automatic marshal and unmarshal for `JSON` and `XML` content type + * Default is `JSON`, if you supply `struct/map` without header `Content-Type` + * For auto-unmarshal, refer to - + - Success scenario [Request.SetResult()](https://godoc.org/gopkg.in/resty.v1#Request.SetResult) and [Response.Result()](https://godoc.org/gopkg.in/resty.v1#Response.Result). + - Error scenario [Request.SetError()](https://godoc.org/gopkg.in/resty.v1#Request.SetError) and [Response.Error()](https://godoc.org/gopkg.in/resty.v1#Response.Error). + - Supports [RFC7807](https://tools.ietf.org/html/rfc7807) - `application/problem+json` & `application/problem+xml` + * Easy to upload one or more file(s) via `multipart/form-data` + * Auto detects file content type + * Request URL [Path Params (aka URI Params)](https://godoc.org/gopkg.in/resty.v1#Request.SetPathParams) + * Backoff Retry Mechanism with retry condition function [reference](retry_test.go) + * resty client HTTP & REST [Request](https://godoc.org/gopkg.in/resty.v1#Client.OnBeforeRequest) and [Response](https://godoc.org/gopkg.in/resty.v1#Client.OnAfterResponse) middlewares + * `Request.SetContext` supported `go1.7` and above + * Authorization option of `BasicAuth` and `Bearer` token + * Set request `ContentLength` value for all request or particular request + * Choose between HTTP and REST mode. Default is `REST` + * `HTTP` - default up to 10 redirects and no automatic response unmarshal + * `REST` - defaults to no redirects and automatic response marshal/unmarshal for `JSON` & `XML` + * Custom [Root Certificates](https://godoc.org/gopkg.in/resty.v1#Client.SetRootCertificate) and Client [Certificates](https://godoc.org/gopkg.in/resty.v1#Client.SetCertificates) + * Download/Save HTTP response directly into File, like `curl -o` flag. See [SetOutputDirectory](https://godoc.org/gopkg.in/resty.v1#Client.SetOutputDirectory) & [SetOutput](https://godoc.org/gopkg.in/resty.v1#Request.SetOutput). + * Cookies for your request and CookieJar support + * SRV Record based request instead of Host URL + * Client settings like `Timeout`, `RedirectPolicy`, `Proxy`, `TLSClientConfig`, `Transport`, etc. + * Optionally allows GET request with payload, see [SetAllowGetMethodPayload](https://godoc.org/gopkg.in/resty.v1#Client.SetAllowGetMethodPayload) + * Supports registering external JSON library into resty, see [how to use](https://github.com/go-resty/resty/issues/76#issuecomment-314015250) + * Exposes Response reader without reading response (no auto-unmarshaling) if need be, see [how to use](https://github.com/go-resty/resty/issues/87#issuecomment-322100604) + * Option to specify expected `Content-Type` when response `Content-Type` header missing. Refer to [#92](https://github.com/go-resty/resty/issues/92) + * Resty design + * Have client level settings & options and also override at Request level if you want to + * Request and Response middlewares + * Create Multiple clients if you want to `resty.New()` + * Supports `http.RoundTripper` implementation, see [SetTransport](https://godoc.org/gopkg.in/resty.v1#Client.SetTransport) + * goroutine concurrent safe + * REST and HTTP modes + * Debug mode - clean and informative logging presentation + * Gzip - Go does it automatically also resty has fallback handling too + * Works fine with `HTTP/2` and `HTTP/1.1` + * [Bazel support](#bazel-support) + * Easily mock resty for testing, [for e.g.](#mocking-http-requests-using-httpmock-library) + * Well tested client library + +Resty works with `go1.3` and above. + +### Included Batteries + + * Redirect Policies - see [how to use](#redirect-policy) + * NoRedirectPolicy + * FlexibleRedirectPolicy + * DomainCheckRedirectPolicy + * etc. [more info](redirect.go) + * Retry Mechanism [how to use](#retries) + * Backoff Retry + * Conditional Retry + * SRV Record based request instead of Host URL [how to use](resty_test.go#L1412) + * etc (upcoming - throw your idea's [here](https://github.com/go-resty/resty/issues)). + +## Installation + +#### Stable Version - Production Ready + +Please refer section [Versioning](#versioning) for detailed info. + +##### go.mod + +```bash +require gopkg.in/resty.v1 v1.12.0 +``` + +##### go get +```bash +go get -u gopkg.in/resty.v1 +``` + +#### Heads up for upcoming Resty v2 + +Resty v2 release will be moving away from `gopkg.in` proxy versioning. It will completely follow and adpating Go Mod versioning recommendation. For e.g.: module definition would be `module github.com/go-resty/resty/v2`. + + +## It might be beneficial for your project :smile: + +Resty author also published following projects for Go Community. + + * [aah framework](https://aahframework.org) - A secure, flexible, rapid Go web framework. + * [THUMBAI](https://thumbai.app), [Source Code](https://github.com/thumbai/thumbai) - Go Mod Repository, Go Vanity Service and Simple Proxy Server. + * [go-model](https://github.com/jeevatkm/go-model) - Robust & Easy to use model mapper and utility methods for Go `struct`. + +## Usage + +The following samples will assist you to become as comfortable as possible with resty library. Resty comes with ready to use DefaultClient. + +Import resty into your code and refer it as `resty`. + +```go +import "gopkg.in/resty.v1" +``` + +#### Simple GET + +```go +// GET request +resp, err := resty.R().Get("http://httpbin.org/get") + +// explore response object +fmt.Printf("\nError: %v", err) +fmt.Printf("\nResponse Status Code: %v", resp.StatusCode()) +fmt.Printf("\nResponse Status: %v", resp.Status()) +fmt.Printf("\nResponse Time: %v", resp.Time()) +fmt.Printf("\nResponse Received At: %v", resp.ReceivedAt()) +fmt.Printf("\nResponse Body: %v", resp) // or resp.String() or string(resp.Body()) +// more... + +/* Output +Error: +Response Status Code: 200 +Response Status: 200 OK +Response Time: 160.1151ms +Response Received At: 2018-10-16 16:28:34.8595663 -0700 PDT m=+0.166119401 +Response Body: { + "args": {}, + "headers": { + "Accept-Encoding": "gzip", + "Connection": "close", + "Host": "httpbin.org", + "User-Agent": "go-resty/1.10.0 (https://github.com/go-resty/resty)" + }, + "origin": "0.0.0.0", + "url": "http://httpbin.org/get" +} +*/ +``` + +#### Enhanced GET + +```go +resp, err := resty.R(). + SetQueryParams(map[string]string{ + "page_no": "1", + "limit": "20", + "sort":"name", + "order": "asc", + "random":strconv.FormatInt(time.Now().Unix(), 10), + }). + SetHeader("Accept", "application/json"). + SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F"). + Get("/search_result") + + +// Sample of using Request.SetQueryString method +resp, err := resty.R(). + SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more"). + SetHeader("Accept", "application/json"). + SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F"). + Get("/show_product") +``` + +#### Various POST method combinations + +```go +// POST JSON string +// No need to set content type, if you have client level setting +resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody(`{"username":"testuser", "password":"testpass"}`). + SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}). + Post("https://myapp.com/login") + +// POST []byte array +// No need to set content type, if you have client level setting +resp, err := resty.R(). + SetHeader("Content-Type", "application/json"). + SetBody([]byte(`{"username":"testuser", "password":"testpass"}`)). + SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}). + Post("https://myapp.com/login") + +// POST Struct, default is JSON content type. No need to set one +resp, err := resty.R(). + SetBody(User{Username: "testuser", Password: "testpass"}). + SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}). + SetError(&AuthError{}). // or SetError(AuthError{}). + Post("https://myapp.com/login") + +// POST Map, default is JSON content type. No need to set one +resp, err := resty.R(). + SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}). + SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}). + SetError(&AuthError{}). // or SetError(AuthError{}). + Post("https://myapp.com/login") + +// POST of raw bytes for file upload. For example: upload file to Dropbox +fileBytes, _ := ioutil.ReadFile("/Users/jeeva/mydocument.pdf") + +// See we are not setting content-type header, since go-resty automatically detects Content-Type for you +resp, err := resty.R(). + SetBody(fileBytes). + SetContentLength(true). // Dropbox expects this value + SetAuthToken(""). + SetError(&DropboxError{}). // or SetError(DropboxError{}). + Post("https://content.dropboxapi.com/1/files_put/auto/resty/mydocument.pdf") // for upload Dropbox supports PUT too + +// Note: resty detects Content-Type for request body/payload if content type header is not set. +// * For struct and map data type defaults to 'application/json' +// * Fallback is plain text content type +``` + +#### Sample PUT + +You can use various combinations of `PUT` method call like demonstrated for `POST`. + +```go +// Note: This is one sample of PUT method usage, refer POST for more combination + +// Request goes as JSON content type +// No need to set auth token, error, if you have client level settings +resp, err := resty.R(). + SetBody(Article{ + Title: "go-resty", + Content: "This is my article content, oh ya!", + Author: "Jeevanandam M", + Tags: []string{"article", "sample", "resty"}, + }). + SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). + SetError(&Error{}). // or SetError(Error{}). + Put("https://myapp.com/article/1234") +``` + +#### Sample PATCH + +You can use various combinations of `PATCH` method call like demonstrated for `POST`. + +```go +// Note: This is one sample of PUT method usage, refer POST for more combination + +// Request goes as JSON content type +// No need to set auth token, error, if you have client level settings +resp, err := resty.R(). + SetBody(Article{ + Tags: []string{"new tag1", "new tag2"}, + }). + SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). + SetError(&Error{}). // or SetError(Error{}). + Patch("https://myapp.com/articles/1234") +``` + +#### Sample DELETE, HEAD, OPTIONS + +```go +// DELETE a article +// No need to set auth token, error, if you have client level settings +resp, err := resty.R(). + SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). + SetError(&Error{}). // or SetError(Error{}). + Delete("https://myapp.com/articles/1234") + +// DELETE a articles with payload/body as a JSON string +// No need to set auth token, error, if you have client level settings +resp, err := resty.R(). + SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). + SetError(&Error{}). // or SetError(Error{}). + SetHeader("Content-Type", "application/json"). + SetBody(`{article_ids: [1002, 1006, 1007, 87683, 45432] }`). + Delete("https://myapp.com/articles") + +// HEAD of resource +// No need to set auth token, if you have client level settings +resp, err := resty.R(). + SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). + Head("https://myapp.com/videos/hi-res-video") + +// OPTIONS of resource +// No need to set auth token, if you have client level settings +resp, err := resty.R(). + SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD"). + Options("https://myapp.com/servers/nyc-dc-01") +``` + +### Multipart File(s) upload + +#### Using io.Reader + +```go +profileImgBytes, _ := ioutil.ReadFile("/Users/jeeva/test-img.png") +notesBytes, _ := ioutil.ReadFile("/Users/jeeva/text-file.txt") + +resp, err := resty.R(). + SetFileReader("profile_img", "test-img.png", bytes.NewReader(profileImgBytes)). + SetFileReader("notes", "text-file.txt", bytes.NewReader(notesBytes)). + SetFormData(map[string]string{ + "first_name": "Jeevanandam", + "last_name": "M", + }). + Post("http://myapp.com/upload") +``` + +#### Using File directly from Path + +```go +// Single file scenario +resp, err := resty.R(). + SetFile("profile_img", "/Users/jeeva/test-img.png"). + Post("http://myapp.com/upload") + +// Multiple files scenario +resp, err := resty.R(). + SetFiles(map[string]string{ + "profile_img": "/Users/jeeva/test-img.png", + "notes": "/Users/jeeva/text-file.txt", + }). + Post("http://myapp.com/upload") + +// Multipart of form fields and files +resp, err := resty.R(). + SetFiles(map[string]string{ + "profile_img": "/Users/jeeva/test-img.png", + "notes": "/Users/jeeva/text-file.txt", + }). + SetFormData(map[string]string{ + "first_name": "Jeevanandam", + "last_name": "M", + "zip_code": "00001", + "city": "my city", + "access_token": "C6A79608-782F-4ED0-A11D-BD82FAD829CD", + }). + Post("http://myapp.com/profile") +``` + +#### Sample Form submission + +```go +// just mentioning about POST as an example with simple flow +// User Login +resp, err := resty.R(). + SetFormData(map[string]string{ + "username": "jeeva", + "password": "mypass", + }). + Post("http://myapp.com/login") + +// Followed by profile update +resp, err := resty.R(). + SetFormData(map[string]string{ + "first_name": "Jeevanandam", + "last_name": "M", + "zip_code": "00001", + "city": "new city update", + }). + Post("http://myapp.com/profile") + +// Multi value form data +criteria := url.Values{ + "search_criteria": []string{"book", "glass", "pencil"}, +} +resp, err := resty.R(). + SetMultiValueFormData(criteria). + Post("http://myapp.com/search") +``` + +#### Save HTTP Response into File + +```go +// Setting output directory path, If directory not exists then resty creates one! +// This is optional one, if you're planning using absoule path in +// `Request.SetOutput` and can used together. +resty.SetOutputDirectory("/Users/jeeva/Downloads") + +// HTTP response gets saved into file, similar to curl -o flag +_, err := resty.R(). + SetOutput("plugin/ReplyWithHeader-v5.1-beta.zip"). + Get("http://bit.ly/1LouEKr") + +// OR using absolute path +// Note: output directory path is not used for absoulte path +_, err := resty.R(). + SetOutput("/MyDownloads/plugin/ReplyWithHeader-v5.1-beta.zip"). + Get("http://bit.ly/1LouEKr") +``` + +#### Request URL Path Params + +Resty provides easy to use dynamic request URL path params. Params can be set at client and request level. Client level params value can be overridden at request level. + +```go +resty.R().SetPathParams(map[string]string{ + "userId": "sample@sample.com", + "subAccountId": "100002", +}). +Get("/v1/users/{userId}/{subAccountId}/details") + +// Result: +// Composed URL - /v1/users/sample@sample.com/100002/details +``` + +#### Request and Response Middleware + +Resty provides middleware ability to manipulate for Request and Response. It is more flexible than callback approach. + +```go +// Registering Request Middleware +resty.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error { + // Now you have access to Client and current Request object + // manipulate it as per your need + + return nil // if its success otherwise return error + }) + +// Registering Response Middleware +resty.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error { + // Now you have access to Client and current Response object + // manipulate it as per your need + + return nil // if its success otherwise return error + }) +``` + +#### Redirect Policy + +Resty provides few ready to use redirect policy(s) also it supports multiple policies together. + +```go +// Assign Client Redirect Policy. Create one as per you need +resty.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15)) + +// Wanna multiple policies such as redirect count, domain name check, etc +resty.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20), + resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net")) +``` + +##### Custom Redirect Policy + +Implement [RedirectPolicy](redirect.go#L20) interface and register it with resty client. Have a look [redirect.go](redirect.go) for more information. + +```go +// Using raw func into resty.SetRedirectPolicy +resty.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { + // Implement your logic here + + // return nil for continue redirect otherwise return error to stop/prevent redirect + return nil +})) + +//--------------------------------------------------- + +// Using struct create more flexible redirect policy +type CustomRedirectPolicy struct { + // variables goes here +} + +func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error { + // Implement your logic here + + // return nil for continue redirect otherwise return error to stop/prevent redirect + return nil +} + +// Registering in resty +resty.SetRedirectPolicy(CustomRedirectPolicy{/* initialize variables */}) +``` + +#### Custom Root Certificates and Client Certificates + +```go +// Custom Root certificates, just supply .pem file. +// you can add one or more root certificates, its get appended +resty.SetRootCertificate("/path/to/root/pemFile1.pem") +resty.SetRootCertificate("/path/to/root/pemFile2.pem") +// ... and so on! + +// Adding Client Certificates, you add one or more certificates +// Sample for creating certificate object +// Parsing public/private key pair from a pair of files. The files must contain PEM encoded data. +cert1, err := tls.LoadX509KeyPair("certs/client.pem", "certs/client.key") +if err != nil { + log.Fatalf("ERROR client certificate: %s", err) +} +// ... + +// You add one or more certificates +resty.SetCertificates(cert1, cert2, cert3) +``` + +#### Proxy Settings - Client as well as at Request Level + +Default `Go` supports Proxy via environment variable `HTTP_PROXY`. Resty provides support via `SetProxy` & `RemoveProxy`. +Choose as per your need. + +**Client Level Proxy** settings applied to all the request + +```go +// Setting a Proxy URL and Port +resty.SetProxy("http://proxyserver:8888") + +// Want to remove proxy setting +resty.RemoveProxy() +``` + +#### Retries + +Resty uses [backoff](http://www.awsarchitectureblog.com/2015/03/backoff.html) +to increase retry intervals after each attempt. + +Usage example: + +```go +// Retries are configured per client +resty. + // Set retry count to non zero to enable retries + SetRetryCount(3). + // You can override initial retry wait time. + // Default is 100 milliseconds. + SetRetryWaitTime(5 * time.Second). + // MaxWaitTime can be overridden as well. + // Default is 2 seconds. + SetRetryMaxWaitTime(20 * time.Second) +``` + +Above setup will result in resty retrying requests returned non nil error up to +3 times with delay increased after each attempt. + +You can optionally provide client with custom retry conditions: + +```go +resty.AddRetryCondition( + // Condition function will be provided with *resty.Response as a + // parameter. It is expected to return (bool, error) pair. Resty will retry + // in case condition returns true or non nil error. + func(r *resty.Response) (bool, error) { + return r.StatusCode() == http.StatusTooManyRequests, nil + }, +) +``` + +Above example will make resty retry requests ended with `429 Too Many Requests` +status code. + +Multiple retry conditions can be added. + +It is also possible to use `resty.Backoff(...)` to get arbitrary retry scenarios +implemented. [Reference](retry_test.go). + +#### Choose REST or HTTP mode + +```go +// REST mode. This is Default. +resty.SetRESTMode() + +// HTTP mode +resty.SetHTTPMode() +``` + +#### Allow GET request with Payload + +```go +// Allow GET request with Payload. This is disabled by default. +resty.SetAllowGetMethodPayload(true) +``` + +#### Wanna Multiple Clients + +```go +// Here you go! +// Client 1 +client1 := resty.New() +client1.R().Get("http://httpbin.org") +// ... + +// Client 2 +client2 := resty.New() +client2.R().Head("http://httpbin.org") +// ... + +// Bend it as per your need!!! +``` + +#### Remaining Client Settings & its Options + +```go +// Unique settings at Client level +//-------------------------------- +// Enable debug mode +resty.SetDebug(true) + +// Using you custom log writer +logFile, _ := os.OpenFile("/Users/jeeva/go-resty.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) +resty.SetLogger(logFile) + +// Assign Client TLSClientConfig +// One can set custom root-certificate. Refer: http://golang.org/pkg/crypto/tls/#example_Dial +resty.SetTLSClientConfig(&tls.Config{ RootCAs: roots }) + +// or One can disable security check (https) +resty.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true }) + +// Set client timeout as per your need +resty.SetTimeout(1 * time.Minute) + + +// You can override all below settings and options at request level if you want to +//-------------------------------------------------------------------------------- +// Host URL for all request. So you can use relative URL in the request +resty.SetHostURL("http://httpbin.org") + +// Headers for all request +resty.SetHeader("Accept", "application/json") +resty.SetHeaders(map[string]string{ + "Content-Type": "application/json", + "User-Agent": "My custom User Agent String", + }) + +// Cookies for all request +resty.SetCookie(&http.Cookie{ + Name:"go-resty", + Value:"This is cookie value", + Path: "/", + Domain: "sample.com", + MaxAge: 36000, + HttpOnly: true, + Secure: false, + }) +resty.SetCookies(cookies) + +// URL query parameters for all request +resty.SetQueryParam("user_id", "00001") +resty.SetQueryParams(map[string]string{ // sample of those who use this manner + "api_key": "api-key-here", + "api_secert": "api-secert", + }) +resty.R().SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more") + +// Form data for all request. Typically used with POST and PUT +resty.SetFormData(map[string]string{ + "access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F", + }) + +// Basic Auth for all request +resty.SetBasicAuth("myuser", "mypass") + +// Bearer Auth Token for all request +resty.SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F") + +// Enabling Content length value for all request +resty.SetContentLength(true) + +// Registering global Error object structure for JSON/XML request +resty.SetError(&Error{}) // or resty.SetError(Error{}) +``` + +#### Unix Socket + +```go +unixSocket := "/var/run/my_socket.sock" + +// Create a Go's http.Transport so we can set it in resty. +transport := http.Transport{ + Dial: func(_, _ string) (net.Conn, error) { + return net.Dial("unix", unixSocket) + }, +} + +// Set the previous transport that we created, set the scheme of the communication to the +// socket and set the unixSocket as the HostURL. +r := resty.New().SetTransport(&transport).SetScheme("http").SetHostURL(unixSocket) + +// No need to write the host's URL on the request, just the path. +r.R().Get("/index.html") +``` + +#### Bazel support + +Resty can be built, tested and depended upon via [Bazel](https://bazel.build). +For example, to run all tests: + +```shell +bazel test :go_default_test +``` + +#### Mocking http requests using [httpmock](https://github.com/jarcoal/httpmock) library + +In order to mock the http requests when testing your application you +could use the `httpmock` library. + +When using the default resty client, you should pass the client to the library as follow: + +```go +httpmock.ActivateNonDefault(resty.DefaultClient.GetClient()) +``` + +More detailed example of mocking resty http requests using ginko could be found [here](https://github.com/jarcoal/httpmock#ginkgo--resty-example). + +## Versioning + +resty releases versions according to [Semantic Versioning](http://semver.org) + + * `gopkg.in/resty.vX` points to appropriate tagged versions; `X` denotes version series number and it's a stable release for production use. For e.g. `gopkg.in/resty.v0`. + * Development takes place at the master branch. Although the code in master should always compile and test successfully, it might break API's. I aim to maintain backwards compatibility, but sometimes API's and behavior might be changed to fix a bug. + +## Contribution + +I would welcome your contribution! If you find any improvement or issue you want to fix, feel free to send a pull request, I like pull requests that include test cases for fix/enhancement. I have done my best to bring pretty good code coverage. Feel free to write tests. + +BTW, I'd like to know what you think about `Resty`. Kindly open an issue or send me an email; it'd mean a lot to me. + +## Creator + +[Jeevanandam M.](https://github.com/jeevatkm) (jeeva@myjeeva.com) + +## Contributors + +Have a look on [Contributors](https://github.com/go-resty/resty/graphs/contributors) page. + +## License + +Resty released under MIT license, refer [LICENSE](LICENSE) file. diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/WORKSPACE b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/WORKSPACE new file mode 100644 index 00000000000..5459d63218f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/WORKSPACE @@ -0,0 +1,27 @@ +workspace(name = "resty") + +git_repository( + name = "io_bazel_rules_go", + remote = "https://github.com/bazelbuild/rules_go.git", + tag = "0.13.0", +) + +git_repository( + name = "bazel_gazelle", + remote = "https://github.com/bazelbuild/bazel-gazelle.git", + tag = "0.13.0", +) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_rules_dependencies", + "go_register_toolchains", +) + +go_rules_dependencies() + +go_register_toolchains() + +load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies") + +gazelle_dependencies() diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/client.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/client.go new file mode 100644 index 00000000000..68d447fa69c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/client.go @@ -0,0 +1,926 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "bytes" + "compress/gzip" + "crypto/tls" + "crypto/x509" + "errors" + "fmt" + "io" + "io/ioutil" + "log" + "net/http" + "net/url" + "reflect" + "regexp" + "strings" + "sync" + "time" +) + +const ( + // MethodGet HTTP method + MethodGet = "GET" + + // MethodPost HTTP method + MethodPost = "POST" + + // MethodPut HTTP method + MethodPut = "PUT" + + // MethodDelete HTTP method + MethodDelete = "DELETE" + + // MethodPatch HTTP method + MethodPatch = "PATCH" + + // MethodHead HTTP method + MethodHead = "HEAD" + + // MethodOptions HTTP method + MethodOptions = "OPTIONS" +) + +var ( + hdrUserAgentKey = http.CanonicalHeaderKey("User-Agent") + hdrAcceptKey = http.CanonicalHeaderKey("Accept") + hdrContentTypeKey = http.CanonicalHeaderKey("Content-Type") + hdrContentLengthKey = http.CanonicalHeaderKey("Content-Length") + hdrContentEncodingKey = http.CanonicalHeaderKey("Content-Encoding") + hdrAuthorizationKey = http.CanonicalHeaderKey("Authorization") + + plainTextType = "text/plain; charset=utf-8" + jsonContentType = "application/json; charset=utf-8" + formContentType = "application/x-www-form-urlencoded" + + jsonCheck = regexp.MustCompile(`(?i:(application|text)/(json|.*\+json|json\-.*)(;|$))`) + xmlCheck = regexp.MustCompile(`(?i:(application|text)/(xml|.*\+xml)(;|$))`) + + hdrUserAgentValue = "go-resty/%s (https://github.com/go-resty/resty)" + bufPool = &sync.Pool{New: func() interface{} { return &bytes.Buffer{} }} +) + +// Client type is used for HTTP/RESTful global values +// for all request raised from the client +type Client struct { + HostURL string + QueryParam url.Values + FormData url.Values + Header http.Header + UserInfo *User + Token string + Cookies []*http.Cookie + Error reflect.Type + Debug bool + DisableWarn bool + AllowGetMethodPayload bool + Log *log.Logger + RetryCount int + RetryWaitTime time.Duration + RetryMaxWaitTime time.Duration + RetryConditions []RetryConditionFunc + JSONMarshal func(v interface{}) ([]byte, error) + JSONUnmarshal func(data []byte, v interface{}) error + + jsonEscapeHTML bool + httpClient *http.Client + setContentLength bool + isHTTPMode bool + outputDirectory string + scheme string + proxyURL *url.URL + closeConnection bool + notParseResponse bool + debugBodySizeLimit int64 + logPrefix string + pathParams map[string]string + beforeRequest []func(*Client, *Request) error + udBeforeRequest []func(*Client, *Request) error + preReqHook func(*Client, *Request) error + afterResponse []func(*Client, *Response) error + requestLog func(*RequestLog) error + responseLog func(*ResponseLog) error +} + +// User type is to hold an username and password information +type User struct { + Username, Password string +} + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// Client methods +//___________________________________ + +// SetHostURL method is to set Host URL in the client instance. It will be used with request +// raised from this client with relative URL +// // Setting HTTP address +// resty.SetHostURL("http://myjeeva.com") +// +// // Setting HTTPS address +// resty.SetHostURL("https://myjeeva.com") +// +func (c *Client) SetHostURL(url string) *Client { + c.HostURL = strings.TrimRight(url, "/") + return c +} + +// SetHeader method sets a single header field and its value in the client instance. +// These headers will be applied to all requests raised from this client instance. +// Also it can be overridden at request level header options, see `resty.R().SetHeader` +// or `resty.R().SetHeaders`. +// +// Example: To set `Content-Type` and `Accept` as `application/json` +// +// resty. +// SetHeader("Content-Type", "application/json"). +// SetHeader("Accept", "application/json") +// +func (c *Client) SetHeader(header, value string) *Client { + c.Header.Set(header, value) + return c +} + +// SetHeaders method sets multiple headers field and its values at one go in the client instance. +// These headers will be applied to all requests raised from this client instance. Also it can be +// overridden at request level headers options, see `resty.R().SetHeaders` or `resty.R().SetHeader`. +// +// Example: To set `Content-Type` and `Accept` as `application/json` +// +// resty.SetHeaders(map[string]string{ +// "Content-Type": "application/json", +// "Accept": "application/json", +// }) +// +func (c *Client) SetHeaders(headers map[string]string) *Client { + for h, v := range headers { + c.Header.Set(h, v) + } + + return c +} + +// SetCookieJar method sets custom http.CookieJar in the resty client. Its way to override default. +// Example: sometimes we don't want to save cookies in api contacting, we can remove the default +// CookieJar in resty client. +// +// resty.SetCookieJar(nil) +// +func (c *Client) SetCookieJar(jar http.CookieJar) *Client { + c.httpClient.Jar = jar + return c +} + +// SetCookie method appends a single cookie in the client instance. +// These cookies will be added to all the request raised from this client instance. +// resty.SetCookie(&http.Cookie{ +// Name:"go-resty", +// Value:"This is cookie value", +// Path: "/", +// Domain: "sample.com", +// MaxAge: 36000, +// HttpOnly: true, +// Secure: false, +// }) +// +func (c *Client) SetCookie(hc *http.Cookie) *Client { + c.Cookies = append(c.Cookies, hc) + return c +} + +// SetCookies method sets an array of cookies in the client instance. +// These cookies will be added to all the request raised from this client instance. +// cookies := make([]*http.Cookie, 0) +// +// cookies = append(cookies, &http.Cookie{ +// Name:"go-resty-1", +// Value:"This is cookie 1 value", +// Path: "/", +// Domain: "sample.com", +// MaxAge: 36000, +// HttpOnly: true, +// Secure: false, +// }) +// +// cookies = append(cookies, &http.Cookie{ +// Name:"go-resty-2", +// Value:"This is cookie 2 value", +// Path: "/", +// Domain: "sample.com", +// MaxAge: 36000, +// HttpOnly: true, +// Secure: false, +// }) +// +// // Setting a cookies into resty +// resty.SetCookies(cookies) +// +func (c *Client) SetCookies(cs []*http.Cookie) *Client { + c.Cookies = append(c.Cookies, cs...) + return c +} + +// SetQueryParam method sets single parameter and its value in the client instance. +// It will be formed as query string for the request. For example: `search=kitchen%20papers&size=large` +// in the URL after `?` mark. These query params will be added to all the request raised from +// this client instance. Also it can be overridden at request level Query Param options, +// see `resty.R().SetQueryParam` or `resty.R().SetQueryParams`. +// resty. +// SetQueryParam("search", "kitchen papers"). +// SetQueryParam("size", "large") +// +func (c *Client) SetQueryParam(param, value string) *Client { + c.QueryParam.Set(param, value) + return c +} + +// SetQueryParams method sets multiple parameters and their values at one go in the client instance. +// It will be formed as query string for the request. For example: `search=kitchen%20papers&size=large` +// in the URL after `?` mark. These query params will be added to all the request raised from this +// client instance. Also it can be overridden at request level Query Param options, +// see `resty.R().SetQueryParams` or `resty.R().SetQueryParam`. +// resty.SetQueryParams(map[string]string{ +// "search": "kitchen papers", +// "size": "large", +// }) +// +func (c *Client) SetQueryParams(params map[string]string) *Client { + for p, v := range params { + c.SetQueryParam(p, v) + } + + return c +} + +// SetFormData method sets Form parameters and their values in the client instance. +// It's applicable only HTTP method `POST` and `PUT` and requets content type would be set as +// `application/x-www-form-urlencoded`. These form data will be added to all the request raised from +// this client instance. Also it can be overridden at request level form data, see `resty.R().SetFormData`. +// resty.SetFormData(map[string]string{ +// "access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F", +// "user_id": "3455454545", +// }) +// +func (c *Client) SetFormData(data map[string]string) *Client { + for k, v := range data { + c.FormData.Set(k, v) + } + + return c +} + +// SetBasicAuth method sets the basic authentication header in the HTTP request. Example: +// Authorization: Basic +// +// Example: To set the header for username "go-resty" and password "welcome" +// resty.SetBasicAuth("go-resty", "welcome") +// +// This basic auth information gets added to all the request rasied from this client instance. +// Also it can be overridden or set one at the request level is supported, see `resty.R().SetBasicAuth`. +// +func (c *Client) SetBasicAuth(username, password string) *Client { + c.UserInfo = &User{Username: username, Password: password} + return c +} + +// SetAuthToken method sets bearer auth token header in the HTTP request. Example: +// Authorization: Bearer +// +// Example: To set auth token BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F +// +// resty.SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F") +// +// This bearer auth token gets added to all the request rasied from this client instance. +// Also it can be overridden or set one at the request level is supported, see `resty.R().SetAuthToken`. +// +func (c *Client) SetAuthToken(token string) *Client { + c.Token = token + return c +} + +// R method creates a request instance, its used for Get, Post, Put, Delete, Patch, Head and Options. +func (c *Client) R() *Request { + r := &Request{ + QueryParam: url.Values{}, + FormData: url.Values{}, + Header: http.Header{}, + + client: c, + multipartFiles: []*File{}, + multipartFields: []*MultipartField{}, + pathParams: map[string]string{}, + jsonEscapeHTML: true, + } + + return r +} + +// NewRequest is an alias for R(). Creates a request instance, its used for +// Get, Post, Put, Delete, Patch, Head and Options. +func (c *Client) NewRequest() *Request { + return c.R() +} + +// OnBeforeRequest method appends request middleware into the before request chain. +// Its gets applied after default `go-resty` request middlewares and before request +// been sent from `go-resty` to host server. +// resty.OnBeforeRequest(func(c *resty.Client, r *resty.Request) error { +// // Now you have access to Client and Request instance +// // manipulate it as per your need +// +// return nil // if its success otherwise return error +// }) +// +func (c *Client) OnBeforeRequest(m func(*Client, *Request) error) *Client { + c.udBeforeRequest = append(c.udBeforeRequest, m) + return c +} + +// OnAfterResponse method appends response middleware into the after response chain. +// Once we receive response from host server, default `go-resty` response middleware +// gets applied and then user assigened response middlewares applied. +// resty.OnAfterResponse(func(c *resty.Client, r *resty.Response) error { +// // Now you have access to Client and Response instance +// // manipulate it as per your need +// +// return nil // if its success otherwise return error +// }) +// +func (c *Client) OnAfterResponse(m func(*Client, *Response) error) *Client { + c.afterResponse = append(c.afterResponse, m) + return c +} + +// SetPreRequestHook method sets the given pre-request function into resty client. +// It is called right before the request is fired. +// +// Note: Only one pre-request hook can be registered. Use `resty.OnBeforeRequest` for mutilple. +func (c *Client) SetPreRequestHook(h func(*Client, *Request) error) *Client { + if c.preReqHook != nil { + c.Log.Printf("Overwriting an existing pre-request hook: %s", functionName(h)) + } + c.preReqHook = h + return c +} + +// SetDebug method enables the debug mode on `go-resty` client. Client logs details of every request and response. +// For `Request` it logs information such as HTTP verb, Relative URL path, Host, Headers, Body if it has one. +// For `Response` it logs information such as Status, Response Time, Headers, Body if it has one. +// resty.SetDebug(true) +// +func (c *Client) SetDebug(d bool) *Client { + c.Debug = d + return c +} + +// SetDebugBodyLimit sets the maximum size for which the response body will be logged in debug mode. +// resty.SetDebugBodyLimit(1000000) +// +func (c *Client) SetDebugBodyLimit(sl int64) *Client { + c.debugBodySizeLimit = sl + return c +} + +// OnRequestLog method used to set request log callback into resty. Registered callback gets +// called before the resty actually logs the information. +func (c *Client) OnRequestLog(rl func(*RequestLog) error) *Client { + if c.requestLog != nil { + c.Log.Printf("Overwriting an existing on-request-log callback from=%s to=%s", functionName(c.requestLog), functionName(rl)) + } + c.requestLog = rl + return c +} + +// OnResponseLog method used to set response log callback into resty. Registered callback gets +// called before the resty actually logs the information. +func (c *Client) OnResponseLog(rl func(*ResponseLog) error) *Client { + if c.responseLog != nil { + c.Log.Printf("Overwriting an existing on-response-log callback from=%s to=%s", functionName(c.responseLog), functionName(rl)) + } + c.responseLog = rl + return c +} + +// SetDisableWarn method disables the warning message on `go-resty` client. +// For example: go-resty warns the user when BasicAuth used on HTTP mode. +// resty.SetDisableWarn(true) +// +func (c *Client) SetDisableWarn(d bool) *Client { + c.DisableWarn = d + return c +} + +// SetAllowGetMethodPayload method allows the GET method with payload on `go-resty` client. +// For example: go-resty allows the user sends request with a payload on HTTP GET method. +// resty.SetAllowGetMethodPayload(true) +// +func (c *Client) SetAllowGetMethodPayload(a bool) *Client { + c.AllowGetMethodPayload = a + return c +} + +// SetLogger method sets given writer for logging go-resty request and response details. +// Default is os.Stderr +// file, _ := os.OpenFile("/Users/jeeva/go-resty.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) +// +// resty.SetLogger(file) +// +func (c *Client) SetLogger(w io.Writer) *Client { + c.Log = getLogger(w) + return c +} + +// SetContentLength method enables the HTTP header `Content-Length` value for every request. +// By default go-resty won't set `Content-Length`. +// resty.SetContentLength(true) +// +// Also you have an option to enable for particular request. See `resty.R().SetContentLength` +// +func (c *Client) SetContentLength(l bool) *Client { + c.setContentLength = l + return c +} + +// SetTimeout method sets timeout for request raised from client. +// resty.SetTimeout(time.Duration(1 * time.Minute)) +// +func (c *Client) SetTimeout(timeout time.Duration) *Client { + c.httpClient.Timeout = timeout + return c +} + +// SetError method is to register the global or client common `Error` object into go-resty. +// It is used for automatic unmarshalling if response status code is greater than 399 and +// content type either JSON or XML. Can be pointer or non-pointer. +// resty.SetError(&Error{}) +// // OR +// resty.SetError(Error{}) +// +func (c *Client) SetError(err interface{}) *Client { + c.Error = typeOf(err) + return c +} + +// SetRedirectPolicy method sets the client redirect poilicy. go-resty provides ready to use +// redirect policies. Wanna create one for yourself refer `redirect.go`. +// +// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20)) +// +// // Need multiple redirect policies together +// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20), DomainCheckRedirectPolicy("host1.com", "host2.net")) +// +func (c *Client) SetRedirectPolicy(policies ...interface{}) *Client { + for _, p := range policies { + if _, ok := p.(RedirectPolicy); !ok { + c.Log.Printf("ERORR: %v does not implement resty.RedirectPolicy (missing Apply method)", + functionName(p)) + } + } + + c.httpClient.CheckRedirect = func(req *http.Request, via []*http.Request) error { + for _, p := range policies { + if err := p.(RedirectPolicy).Apply(req, via); err != nil { + return err + } + } + return nil // looks good, go ahead + } + + return c +} + +// SetRetryCount method enables retry on `go-resty` client and allows you +// to set no. of retry count. Resty uses a Backoff mechanism. +func (c *Client) SetRetryCount(count int) *Client { + c.RetryCount = count + return c +} + +// SetRetryWaitTime method sets default wait time to sleep before retrying +// request. +// Default is 100 milliseconds. +func (c *Client) SetRetryWaitTime(waitTime time.Duration) *Client { + c.RetryWaitTime = waitTime + return c +} + +// SetRetryMaxWaitTime method sets max wait time to sleep before retrying +// request. +// Default is 2 seconds. +func (c *Client) SetRetryMaxWaitTime(maxWaitTime time.Duration) *Client { + c.RetryMaxWaitTime = maxWaitTime + return c +} + +// AddRetryCondition method adds a retry condition function to array of functions +// that are checked to determine if the request is retried. The request will +// retry if any of the functions return true and error is nil. +func (c *Client) AddRetryCondition(condition RetryConditionFunc) *Client { + c.RetryConditions = append(c.RetryConditions, condition) + return c +} + +// SetHTTPMode method sets go-resty mode to 'http' +func (c *Client) SetHTTPMode() *Client { + return c.SetMode("http") +} + +// SetRESTMode method sets go-resty mode to 'rest' +func (c *Client) SetRESTMode() *Client { + return c.SetMode("rest") +} + +// SetMode method sets go-resty client mode to given value such as 'http' & 'rest'. +// 'rest': +// - No Redirect +// - Automatic response unmarshal if it is JSON or XML +// 'http': +// - Up to 10 Redirects +// - No automatic unmarshall. Response will be treated as `response.String()` +// +// If you want more redirects, use FlexibleRedirectPolicy +// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20)) +// +func (c *Client) SetMode(mode string) *Client { + // HTTP + if mode == "http" { + c.isHTTPMode = true + c.SetRedirectPolicy(FlexibleRedirectPolicy(10)) + c.afterResponse = []func(*Client, *Response) error{ + responseLogger, + saveResponseIntoFile, + } + return c + } + + // RESTful + c.isHTTPMode = false + c.SetRedirectPolicy(NoRedirectPolicy()) + c.afterResponse = []func(*Client, *Response) error{ + responseLogger, + parseResponseBody, + saveResponseIntoFile, + } + return c +} + +// Mode method returns the current client mode. Typically its a "http" or "rest". +// Default is "rest" +func (c *Client) Mode() string { + if c.isHTTPMode { + return "http" + } + return "rest" +} + +// SetTLSClientConfig method sets TLSClientConfig for underling client Transport. +// +// Example: +// // One can set custom root-certificate. Refer: http://golang.org/pkg/crypto/tls/#example_Dial +// resty.SetTLSClientConfig(&tls.Config{ RootCAs: roots }) +// +// // or One can disable security check (https) +// resty.SetTLSClientConfig(&tls.Config{ InsecureSkipVerify: true }) +// Note: This method overwrites existing `TLSClientConfig`. +// +func (c *Client) SetTLSClientConfig(config *tls.Config) *Client { + transport, err := c.getTransport() + if err != nil { + c.Log.Printf("ERROR %v", err) + return c + } + transport.TLSClientConfig = config + return c +} + +// SetProxy method sets the Proxy URL and Port for resty client. +// resty.SetProxy("http://proxyserver:8888") +// +// Alternatives: At request level proxy, see `Request.SetProxy`. OR Without this `SetProxy` method, +// you can also set Proxy via environment variable. By default `Go` uses setting from `HTTP_PROXY`. +// +func (c *Client) SetProxy(proxyURL string) *Client { + transport, err := c.getTransport() + if err != nil { + c.Log.Printf("ERROR %v", err) + return c + } + + if pURL, err := url.Parse(proxyURL); err == nil { + c.proxyURL = pURL + transport.Proxy = http.ProxyURL(c.proxyURL) + } else { + c.Log.Printf("ERROR %v", err) + c.RemoveProxy() + } + return c +} + +// RemoveProxy method removes the proxy configuration from resty client +// resty.RemoveProxy() +// +func (c *Client) RemoveProxy() *Client { + transport, err := c.getTransport() + if err != nil { + c.Log.Printf("ERROR %v", err) + return c + } + c.proxyURL = nil + transport.Proxy = nil + return c +} + +// SetCertificates method helps to set client certificates into resty conveniently. +// +func (c *Client) SetCertificates(certs ...tls.Certificate) *Client { + config, err := c.getTLSConfig() + if err != nil { + c.Log.Printf("ERROR %v", err) + return c + } + config.Certificates = append(config.Certificates, certs...) + return c +} + +// SetRootCertificate method helps to add one or more root certificates into resty client +// resty.SetRootCertificate("/path/to/root/pemFile.pem") +// +func (c *Client) SetRootCertificate(pemFilePath string) *Client { + rootPemData, err := ioutil.ReadFile(pemFilePath) + if err != nil { + c.Log.Printf("ERROR %v", err) + return c + } + + config, err := c.getTLSConfig() + if err != nil { + c.Log.Printf("ERROR %v", err) + return c + } + if config.RootCAs == nil { + config.RootCAs = x509.NewCertPool() + } + + config.RootCAs.AppendCertsFromPEM(rootPemData) + + return c +} + +// SetOutputDirectory method sets output directory for saving HTTP response into file. +// If the output directory not exists then resty creates one. This setting is optional one, +// if you're planning using absoule path in `Request.SetOutput` and can used together. +// resty.SetOutputDirectory("/save/http/response/here") +// +func (c *Client) SetOutputDirectory(dirPath string) *Client { + c.outputDirectory = dirPath + return c +} + +// SetTransport method sets custom `*http.Transport` or any `http.RoundTripper` +// compatible interface implementation in the resty client. +// +// NOTE: +// +// - If transport is not type of `*http.Transport` then you may not be able to +// take advantage of some of the `resty` client settings. +// +// - It overwrites the resty client transport instance and it's configurations. +// +// transport := &http.Transport{ +// // somthing like Proxying to httptest.Server, etc... +// Proxy: func(req *http.Request) (*url.URL, error) { +// return url.Parse(server.URL) +// }, +// } +// +// resty.SetTransport(transport) +// +func (c *Client) SetTransport(transport http.RoundTripper) *Client { + if transport != nil { + c.httpClient.Transport = transport + } + return c +} + +// SetScheme method sets custom scheme in the resty client. It's way to override default. +// resty.SetScheme("http") +// +func (c *Client) SetScheme(scheme string) *Client { + if !IsStringEmpty(scheme) { + c.scheme = scheme + } + + return c +} + +// SetCloseConnection method sets variable `Close` in http request struct with the given +// value. More info: https://golang.org/src/net/http/request.go +func (c *Client) SetCloseConnection(close bool) *Client { + c.closeConnection = close + return c +} + +// SetDoNotParseResponse method instructs `Resty` not to parse the response body automatically. +// Resty exposes the raw response body as `io.ReadCloser`. Also do not forget to close the body, +// otherwise you might get into connection leaks, no connection reuse. +// +// Please Note: Response middlewares are not applicable, if you use this option. Basically you have +// taken over the control of response parsing from `Resty`. +func (c *Client) SetDoNotParseResponse(parse bool) *Client { + c.notParseResponse = parse + return c +} + +// SetLogPrefix method sets the Resty logger prefix value. +func (c *Client) SetLogPrefix(prefix string) *Client { + c.logPrefix = prefix + c.Log.SetPrefix(prefix) + return c +} + +// SetPathParams method sets multiple URL path key-value pairs at one go in the +// resty client instance. +// resty.SetPathParams(map[string]string{ +// "userId": "sample@sample.com", +// "subAccountId": "100002", +// }) +// +// Result: +// URL - /v1/users/{userId}/{subAccountId}/details +// Composed URL - /v1/users/sample@sample.com/100002/details +// It replace the value of the key while composing request URL. Also it can be +// overridden at request level Path Params options, see `Request.SetPathParams`. +func (c *Client) SetPathParams(params map[string]string) *Client { + for p, v := range params { + c.pathParams[p] = v + } + return c +} + +// SetJSONEscapeHTML method is to enable/disable the HTML escape on JSON marshal. +// +// NOTE: This option only applicable to standard JSON Marshaller. +func (c *Client) SetJSONEscapeHTML(b bool) *Client { + c.jsonEscapeHTML = b + return c +} + +// IsProxySet method returns the true if proxy is set on client otherwise false. +func (c *Client) IsProxySet() bool { + return c.proxyURL != nil +} + +// GetClient method returns the current http.Client used by the resty client. +func (c *Client) GetClient() *http.Client { + return c.httpClient +} + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// Client Unexported methods +//___________________________________ + +// executes the given `Request` object and returns response +func (c *Client) execute(req *Request) (*Response, error) { + defer releaseBuffer(req.bodyBuf) + // Apply Request middleware + var err error + + // user defined on before request methods + // to modify the *resty.Request object + for _, f := range c.udBeforeRequest { + if err = f(c, req); err != nil { + return nil, err + } + } + + // resty middlewares + for _, f := range c.beforeRequest { + if err = f(c, req); err != nil { + return nil, err + } + } + + // call pre-request if defined + if c.preReqHook != nil { + if err = c.preReqHook(c, req); err != nil { + return nil, err + } + } + + if hostHeader := req.Header.Get("Host"); hostHeader != "" { + req.RawRequest.Host = hostHeader + } + + if err = requestLogger(c, req); err != nil { + return nil, err + } + + req.Time = time.Now() + resp, err := c.httpClient.Do(req.RawRequest) + + response := &Response{ + Request: req, + RawResponse: resp, + receivedAt: time.Now(), + } + + if err != nil || req.notParseResponse || c.notParseResponse { + return response, err + } + + if !req.isSaveResponse { + defer closeq(resp.Body) + body := resp.Body + + // GitHub #142 & #187 + if strings.EqualFold(resp.Header.Get(hdrContentEncodingKey), "gzip") && resp.ContentLength != 0 { + if _, ok := body.(*gzip.Reader); !ok { + body, err = gzip.NewReader(body) + if err != nil { + return response, err + } + defer closeq(body) + } + } + + if response.body, err = ioutil.ReadAll(body); err != nil { + return response, err + } + + response.size = int64(len(response.body)) + } + + // Apply Response middleware + for _, f := range c.afterResponse { + if err = f(c, response); err != nil { + break + } + } + + return response, err +} + +// enables a log prefix +func (c *Client) enableLogPrefix() { + c.Log.SetFlags(log.LstdFlags) + c.Log.SetPrefix(c.logPrefix) +} + +// disables a log prefix +func (c *Client) disableLogPrefix() { + c.Log.SetFlags(0) + c.Log.SetPrefix("") +} + +// getting TLS client config if not exists then create one +func (c *Client) getTLSConfig() (*tls.Config, error) { + transport, err := c.getTransport() + if err != nil { + return nil, err + } + if transport.TLSClientConfig == nil { + transport.TLSClientConfig = &tls.Config{} + } + return transport.TLSClientConfig, nil +} + +// returns `*http.Transport` currently in use or error +// in case currently used `transport` is not an `*http.Transport` +func (c *Client) getTransport() (*http.Transport, error) { + if c.httpClient.Transport == nil { + c.SetTransport(new(http.Transport)) + } + + if transport, ok := c.httpClient.Transport.(*http.Transport); ok { + return transport, nil + } + return nil, errors.New("current transport is not an *http.Transport instance") +} + +// +// File +// + +// File represent file information for multipart request +type File struct { + Name string + ParamName string + io.Reader +} + +// String returns string value of current file details +func (f *File) String() string { + return fmt.Sprintf("ParamName: %v; FileName: %v", f.ParamName, f.Name) +} + +// MultipartField represent custom data part for multipart request +type MultipartField struct { + Param string + FileName string + ContentType string + io.Reader +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/default.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/default.go new file mode 100644 index 00000000000..cc6ae478cfa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/default.go @@ -0,0 +1,327 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "crypto/tls" + "encoding/json" + "io" + "math" + "net/http" + "net/http/cookiejar" + "net/url" + "os" + "time" + + "golang.org/x/net/publicsuffix" +) + +// DefaultClient of resty +var DefaultClient *Client + +// New method creates a new go-resty client. +func New() *Client { + cookieJar, _ := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) + return createClient(&http.Client{Jar: cookieJar}) +} + +// NewWithClient method create a new go-resty client with given `http.Client`. +func NewWithClient(hc *http.Client) *Client { + return createClient(hc) +} + +// R creates a new resty request object, it is used form a HTTP/RESTful request +// such as GET, POST, PUT, DELETE, HEAD, PATCH and OPTIONS. +func R() *Request { + return DefaultClient.R() +} + +// NewRequest is an alias for R(). Creates a new resty request object, it is used form a HTTP/RESTful request +// such as GET, POST, PUT, DELETE, HEAD, PATCH and OPTIONS. +func NewRequest() *Request { + return R() +} + +// SetHostURL sets Host URL. See `Client.SetHostURL for more information. +func SetHostURL(url string) *Client { + return DefaultClient.SetHostURL(url) +} + +// SetHeader sets single header. See `Client.SetHeader` for more information. +func SetHeader(header, value string) *Client { + return DefaultClient.SetHeader(header, value) +} + +// SetHeaders sets multiple headers. See `Client.SetHeaders` for more information. +func SetHeaders(headers map[string]string) *Client { + return DefaultClient.SetHeaders(headers) +} + +// SetCookieJar sets custom http.CookieJar. See `Client.SetCookieJar` for more information. +func SetCookieJar(jar http.CookieJar) *Client { + return DefaultClient.SetCookieJar(jar) +} + +// SetCookie sets single cookie object. See `Client.SetCookie` for more information. +func SetCookie(hc *http.Cookie) *Client { + return DefaultClient.SetCookie(hc) +} + +// SetCookies sets multiple cookie object. See `Client.SetCookies` for more information. +func SetCookies(cs []*http.Cookie) *Client { + return DefaultClient.SetCookies(cs) +} + +// SetQueryParam method sets single parameter and its value. See `Client.SetQueryParam` for more information. +func SetQueryParam(param, value string) *Client { + return DefaultClient.SetQueryParam(param, value) +} + +// SetQueryParams method sets multiple parameters and its value. See `Client.SetQueryParams` for more information. +func SetQueryParams(params map[string]string) *Client { + return DefaultClient.SetQueryParams(params) +} + +// SetFormData method sets Form parameters and its values. See `Client.SetFormData` for more information. +func SetFormData(data map[string]string) *Client { + return DefaultClient.SetFormData(data) +} + +// SetBasicAuth method sets the basic authentication header. See `Client.SetBasicAuth` for more information. +func SetBasicAuth(username, password string) *Client { + return DefaultClient.SetBasicAuth(username, password) +} + +// SetAuthToken method sets bearer auth token header. See `Client.SetAuthToken` for more information. +func SetAuthToken(token string) *Client { + return DefaultClient.SetAuthToken(token) +} + +// OnBeforeRequest method sets request middleware. See `Client.OnBeforeRequest` for more information. +func OnBeforeRequest(m func(*Client, *Request) error) *Client { + return DefaultClient.OnBeforeRequest(m) +} + +// OnAfterResponse method sets response middleware. See `Client.OnAfterResponse` for more information. +func OnAfterResponse(m func(*Client, *Response) error) *Client { + return DefaultClient.OnAfterResponse(m) +} + +// SetPreRequestHook method sets the pre-request hook. See `Client.SetPreRequestHook` for more information. +func SetPreRequestHook(h func(*Client, *Request) error) *Client { + return DefaultClient.SetPreRequestHook(h) +} + +// SetDebug method enables the debug mode. See `Client.SetDebug` for more information. +func SetDebug(d bool) *Client { + return DefaultClient.SetDebug(d) +} + +// SetDebugBodyLimit method sets the response body limit for debug mode. See `Client.SetDebugBodyLimit` for more information. +func SetDebugBodyLimit(sl int64) *Client { + return DefaultClient.SetDebugBodyLimit(sl) +} + +// SetAllowGetMethodPayload method allows the GET method with payload. See `Client.SetAllowGetMethodPayload` for more information. +func SetAllowGetMethodPayload(a bool) *Client { + return DefaultClient.SetAllowGetMethodPayload(a) +} + +// SetRetryCount method sets the retry count. See `Client.SetRetryCount` for more information. +func SetRetryCount(count int) *Client { + return DefaultClient.SetRetryCount(count) +} + +// SetRetryWaitTime method sets the retry wait time. See `Client.SetRetryWaitTime` for more information. +func SetRetryWaitTime(waitTime time.Duration) *Client { + return DefaultClient.SetRetryWaitTime(waitTime) +} + +// SetRetryMaxWaitTime method sets the retry max wait time. See `Client.SetRetryMaxWaitTime` for more information. +func SetRetryMaxWaitTime(maxWaitTime time.Duration) *Client { + return DefaultClient.SetRetryMaxWaitTime(maxWaitTime) +} + +// AddRetryCondition method appends check function for retry. See `Client.AddRetryCondition` for more information. +func AddRetryCondition(condition RetryConditionFunc) *Client { + return DefaultClient.AddRetryCondition(condition) +} + +// SetDisableWarn method disables warning comes from `go-resty` client. See `Client.SetDisableWarn` for more information. +func SetDisableWarn(d bool) *Client { + return DefaultClient.SetDisableWarn(d) +} + +// SetLogger method sets given writer for logging. See `Client.SetLogger` for more information. +func SetLogger(w io.Writer) *Client { + return DefaultClient.SetLogger(w) +} + +// SetContentLength method enables `Content-Length` value. See `Client.SetContentLength` for more information. +func SetContentLength(l bool) *Client { + return DefaultClient.SetContentLength(l) +} + +// SetError method is to register the global or client common `Error` object. See `Client.SetError` for more information. +func SetError(err interface{}) *Client { + return DefaultClient.SetError(err) +} + +// SetRedirectPolicy method sets the client redirect poilicy. See `Client.SetRedirectPolicy` for more information. +func SetRedirectPolicy(policies ...interface{}) *Client { + return DefaultClient.SetRedirectPolicy(policies...) +} + +// SetHTTPMode method sets go-resty mode into HTTP. See `Client.SetMode` for more information. +func SetHTTPMode() *Client { + return DefaultClient.SetHTTPMode() +} + +// SetRESTMode method sets go-resty mode into RESTful. See `Client.SetMode` for more information. +func SetRESTMode() *Client { + return DefaultClient.SetRESTMode() +} + +// Mode method returns the current client mode. See `Client.Mode` for more information. +func Mode() string { + return DefaultClient.Mode() +} + +// SetTLSClientConfig method sets TLSClientConfig for underling client Transport. See `Client.SetTLSClientConfig` for more information. +func SetTLSClientConfig(config *tls.Config) *Client { + return DefaultClient.SetTLSClientConfig(config) +} + +// SetTimeout method sets timeout for request. See `Client.SetTimeout` for more information. +func SetTimeout(timeout time.Duration) *Client { + return DefaultClient.SetTimeout(timeout) +} + +// SetProxy method sets Proxy for request. See `Client.SetProxy` for more information. +func SetProxy(proxyURL string) *Client { + return DefaultClient.SetProxy(proxyURL) +} + +// RemoveProxy method removes the proxy configuration. See `Client.RemoveProxy` for more information. +func RemoveProxy() *Client { + return DefaultClient.RemoveProxy() +} + +// SetCertificates method helps to set client certificates into resty conveniently. +// See `Client.SetCertificates` for more information and example. +func SetCertificates(certs ...tls.Certificate) *Client { + return DefaultClient.SetCertificates(certs...) +} + +// SetRootCertificate method helps to add one or more root certificates into resty client. +// See `Client.SetRootCertificate` for more information. +func SetRootCertificate(pemFilePath string) *Client { + return DefaultClient.SetRootCertificate(pemFilePath) +} + +// SetOutputDirectory method sets output directory. See `Client.SetOutputDirectory` for more information. +func SetOutputDirectory(dirPath string) *Client { + return DefaultClient.SetOutputDirectory(dirPath) +} + +// SetTransport method sets custom `*http.Transport` or any `http.RoundTripper` +// compatible interface implementation in the resty client. +// See `Client.SetTransport` for more information. +func SetTransport(transport http.RoundTripper) *Client { + return DefaultClient.SetTransport(transport) +} + +// SetScheme method sets custom scheme in the resty client. +// See `Client.SetScheme` for more information. +func SetScheme(scheme string) *Client { + return DefaultClient.SetScheme(scheme) +} + +// SetCloseConnection method sets close connection value in the resty client. +// See `Client.SetCloseConnection` for more information. +func SetCloseConnection(close bool) *Client { + return DefaultClient.SetCloseConnection(close) +} + +// SetDoNotParseResponse method instructs `Resty` not to parse the response body automatically. +// See `Client.SetDoNotParseResponse` for more information. +func SetDoNotParseResponse(parse bool) *Client { + return DefaultClient.SetDoNotParseResponse(parse) +} + +// SetPathParams method sets the Request path parameter key-value pairs. See +// `Client.SetPathParams` for more information. +func SetPathParams(params map[string]string) *Client { + return DefaultClient.SetPathParams(params) +} + +// IsProxySet method returns the true if proxy is set on client otherwise false. +// See `Client.IsProxySet` for more information. +func IsProxySet() bool { + return DefaultClient.IsProxySet() +} + +// GetClient method returns the current `http.Client` used by the default resty client. +func GetClient() *http.Client { + return DefaultClient.httpClient +} + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// Unexported methods +//___________________________________ + +func createClient(hc *http.Client) *Client { + c := &Client{ + HostURL: "", + QueryParam: url.Values{}, + FormData: url.Values{}, + Header: http.Header{}, + UserInfo: nil, + Token: "", + Cookies: make([]*http.Cookie, 0), + Debug: false, + Log: getLogger(os.Stderr), + RetryCount: 0, + RetryWaitTime: defaultWaitTime, + RetryMaxWaitTime: defaultMaxWaitTime, + JSONMarshal: json.Marshal, + JSONUnmarshal: json.Unmarshal, + jsonEscapeHTML: true, + httpClient: hc, + debugBodySizeLimit: math.MaxInt32, + pathParams: make(map[string]string), + } + + // Log Prefix + c.SetLogPrefix("RESTY ") + + // Default redirect policy + c.SetRedirectPolicy(NoRedirectPolicy()) + + // default before request middlewares + c.beforeRequest = []func(*Client, *Request) error{ + parseRequestURL, + parseRequestHeader, + parseRequestBody, + createHTTPRequest, + addCredentials, + } + + // user defined request middlewares + c.udBeforeRequest = []func(*Client, *Request) error{} + + // default after response middlewares + c.afterResponse = []func(*Client, *Response) error{ + responseLogger, + parseResponseBody, + saveResponseIntoFile, + } + + return c +} + +func init() { + DefaultClient = New() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/go.mod b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/go.mod new file mode 100644 index 00000000000..61341be87bc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/go.mod @@ -0,0 +1,3 @@ +module gopkg.in/resty.v1 + +require golang.org/x/net v0.0.0-20181220203305-927f97764cc3 diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/middleware.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/middleware.go new file mode 100644 index 00000000000..9b6f102ed6f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/middleware.go @@ -0,0 +1,469 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "bytes" + "encoding/xml" + "errors" + "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" + "os" + "path/filepath" + "reflect" + "strings" + "time" +) + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// Request Middleware(s) +//___________________________________ + +func parseRequestURL(c *Client, r *Request) error { + // GitHub #103 Path Params + if len(r.pathParams) > 0 { + for p, v := range r.pathParams { + r.URL = strings.Replace(r.URL, "{"+p+"}", url.PathEscape(v), -1) + } + } + if len(c.pathParams) > 0 { + for p, v := range c.pathParams { + r.URL = strings.Replace(r.URL, "{"+p+"}", url.PathEscape(v), -1) + } + } + + // Parsing request URL + reqURL, err := url.Parse(r.URL) + if err != nil { + return err + } + + // If Request.URL is relative path then added c.HostURL into + // the request URL otherwise Request.URL will be used as-is + if !reqURL.IsAbs() { + r.URL = reqURL.String() + if len(r.URL) > 0 && r.URL[0] != '/' { + r.URL = "/" + r.URL + } + + reqURL, err = url.Parse(c.HostURL + r.URL) + if err != nil { + return err + } + } + + // Adding Query Param + query := make(url.Values) + for k, v := range c.QueryParam { + for _, iv := range v { + query.Add(k, iv) + } + } + + for k, v := range r.QueryParam { + // remove query param from client level by key + // since overrides happens for that key in the request + query.Del(k) + + for _, iv := range v { + query.Add(k, iv) + } + } + + // GitHub #123 Preserve query string order partially. + // Since not feasible in `SetQuery*` resty methods, because + // standard package `url.Encode(...)` sorts the query params + // alphabetically + if len(query) > 0 { + if IsStringEmpty(reqURL.RawQuery) { + reqURL.RawQuery = query.Encode() + } else { + reqURL.RawQuery = reqURL.RawQuery + "&" + query.Encode() + } + } + + r.URL = reqURL.String() + + return nil +} + +func parseRequestHeader(c *Client, r *Request) error { + hdr := make(http.Header) + for k := range c.Header { + hdr[k] = append(hdr[k], c.Header[k]...) + } + + for k := range r.Header { + hdr.Del(k) + hdr[k] = append(hdr[k], r.Header[k]...) + } + + if IsStringEmpty(hdr.Get(hdrUserAgentKey)) { + hdr.Set(hdrUserAgentKey, fmt.Sprintf(hdrUserAgentValue, Version)) + } + + ct := hdr.Get(hdrContentTypeKey) + if IsStringEmpty(hdr.Get(hdrAcceptKey)) && !IsStringEmpty(ct) && + (IsJSONType(ct) || IsXMLType(ct)) { + hdr.Set(hdrAcceptKey, hdr.Get(hdrContentTypeKey)) + } + + r.Header = hdr + + return nil +} + +func parseRequestBody(c *Client, r *Request) (err error) { + if isPayloadSupported(r.Method, c.AllowGetMethodPayload) { + // Handling Multipart + if r.isMultiPart && !(r.Method == MethodPatch) { + if err = handleMultipart(c, r); err != nil { + return + } + + goto CL + } + + // Handling Form Data + if len(c.FormData) > 0 || len(r.FormData) > 0 { + handleFormData(c, r) + + goto CL + } + + // Handling Request body + if r.Body != nil { + handleContentType(c, r) + + if err = handleRequestBody(c, r); err != nil { + return + } + } + } + +CL: + // by default resty won't set content length, you can if you want to :) + if (c.setContentLength || r.setContentLength) && r.bodyBuf != nil { + r.Header.Set(hdrContentLengthKey, fmt.Sprintf("%d", r.bodyBuf.Len())) + } + + return +} + +func createHTTPRequest(c *Client, r *Request) (err error) { + if r.bodyBuf == nil { + if reader, ok := r.Body.(io.Reader); ok { + r.RawRequest, err = http.NewRequest(r.Method, r.URL, reader) + } else { + r.RawRequest, err = http.NewRequest(r.Method, r.URL, nil) + } + } else { + r.RawRequest, err = http.NewRequest(r.Method, r.URL, r.bodyBuf) + } + + if err != nil { + return + } + + // Assign close connection option + r.RawRequest.Close = c.closeConnection + + // Add headers into http request + r.RawRequest.Header = r.Header + + // Add cookies into http request + for _, cookie := range c.Cookies { + r.RawRequest.AddCookie(cookie) + } + + // it's for non-http scheme option + if r.RawRequest.URL != nil && r.RawRequest.URL.Scheme == "" { + r.RawRequest.URL.Scheme = c.scheme + r.RawRequest.URL.Host = r.URL + } + + // Use context if it was specified + r.addContextIfAvailable() + + return +} + +func addCredentials(c *Client, r *Request) error { + var isBasicAuth bool + // Basic Auth + if r.UserInfo != nil { // takes precedence + r.RawRequest.SetBasicAuth(r.UserInfo.Username, r.UserInfo.Password) + isBasicAuth = true + } else if c.UserInfo != nil { + r.RawRequest.SetBasicAuth(c.UserInfo.Username, c.UserInfo.Password) + isBasicAuth = true + } + + if !c.DisableWarn { + if isBasicAuth && !strings.HasPrefix(r.URL, "https") { + c.Log.Println("WARNING - Using Basic Auth in HTTP mode is not secure.") + } + } + + // Token Auth + if !IsStringEmpty(r.Token) { // takes precedence + r.RawRequest.Header.Set(hdrAuthorizationKey, "Bearer "+r.Token) + } else if !IsStringEmpty(c.Token) { + r.RawRequest.Header.Set(hdrAuthorizationKey, "Bearer "+c.Token) + } + + return nil +} + +func requestLogger(c *Client, r *Request) error { + if c.Debug { + rr := r.RawRequest + rl := &RequestLog{Header: copyHeaders(rr.Header), Body: r.fmtBodyString()} + if c.requestLog != nil { + if err := c.requestLog(rl); err != nil { + return err + } + } + + reqLog := "\n---------------------- REQUEST LOG -----------------------\n" + + fmt.Sprintf("%s %s %s\n", r.Method, rr.URL.RequestURI(), rr.Proto) + + fmt.Sprintf("HOST : %s\n", rr.URL.Host) + + fmt.Sprintf("HEADERS:\n") + + composeHeaders(rl.Header) + "\n" + + fmt.Sprintf("BODY :\n%v\n", rl.Body) + + "----------------------------------------------------------\n" + + c.Log.Print(reqLog) + } + + return nil +} + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// Response Middleware(s) +//___________________________________ + +func responseLogger(c *Client, res *Response) error { + if c.Debug { + rl := &ResponseLog{Header: copyHeaders(res.Header()), Body: res.fmtBodyString(c.debugBodySizeLimit)} + if c.responseLog != nil { + if err := c.responseLog(rl); err != nil { + return err + } + } + + resLog := "\n---------------------- RESPONSE LOG -----------------------\n" + + fmt.Sprintf("STATUS : %s\n", res.Status()) + + fmt.Sprintf("RECEIVED AT : %v\n", res.ReceivedAt().Format(time.RFC3339Nano)) + + fmt.Sprintf("RESPONSE TIME : %v\n", res.Time()) + + "HEADERS:\n" + + composeHeaders(rl.Header) + "\n" + if res.Request.isSaveResponse { + resLog += fmt.Sprintf("BODY :\n***** RESPONSE WRITTEN INTO FILE *****\n") + } else { + resLog += fmt.Sprintf("BODY :\n%v\n", rl.Body) + } + resLog += "----------------------------------------------------------\n" + + c.Log.Print(resLog) + } + + return nil +} + +func parseResponseBody(c *Client, res *Response) (err error) { + if res.StatusCode() == http.StatusNoContent { + return + } + // Handles only JSON or XML content type + ct := firstNonEmpty(res.Header().Get(hdrContentTypeKey), res.Request.fallbackContentType) + if IsJSONType(ct) || IsXMLType(ct) { + // HTTP status code > 199 and < 300, considered as Result + if res.IsSuccess() { + if res.Request.Result != nil { + err = Unmarshalc(c, ct, res.body, res.Request.Result) + return + } + } + + // HTTP status code > 399, considered as Error + if res.IsError() { + // global error interface + if res.Request.Error == nil && c.Error != nil { + res.Request.Error = reflect.New(c.Error).Interface() + } + + if res.Request.Error != nil { + err = Unmarshalc(c, ct, res.body, res.Request.Error) + } + } + } + + return +} + +func handleMultipart(c *Client, r *Request) (err error) { + r.bodyBuf = acquireBuffer() + w := multipart.NewWriter(r.bodyBuf) + + for k, v := range c.FormData { + for _, iv := range v { + if err = w.WriteField(k, iv); err != nil { + return err + } + } + } + + for k, v := range r.FormData { + for _, iv := range v { + if strings.HasPrefix(k, "@") { // file + err = addFile(w, k[1:], iv) + if err != nil { + return + } + } else { // form value + if err = w.WriteField(k, iv); err != nil { + return err + } + } + } + } + + // #21 - adding io.Reader support + if len(r.multipartFiles) > 0 { + for _, f := range r.multipartFiles { + err = addFileReader(w, f) + if err != nil { + return + } + } + } + + // GitHub #130 adding multipart field support with content type + if len(r.multipartFields) > 0 { + for _, mf := range r.multipartFields { + if err = addMultipartFormField(w, mf); err != nil { + return + } + } + } + + r.Header.Set(hdrContentTypeKey, w.FormDataContentType()) + err = w.Close() + + return +} + +func handleFormData(c *Client, r *Request) { + formData := url.Values{} + + for k, v := range c.FormData { + for _, iv := range v { + formData.Add(k, iv) + } + } + + for k, v := range r.FormData { + // remove form data field from client level by key + // since overrides happens for that key in the request + formData.Del(k) + + for _, iv := range v { + formData.Add(k, iv) + } + } + + r.bodyBuf = bytes.NewBuffer([]byte(formData.Encode())) + r.Header.Set(hdrContentTypeKey, formContentType) + r.isFormData = true +} + +func handleContentType(c *Client, r *Request) { + contentType := r.Header.Get(hdrContentTypeKey) + if IsStringEmpty(contentType) { + contentType = DetectContentType(r.Body) + r.Header.Set(hdrContentTypeKey, contentType) + } +} + +func handleRequestBody(c *Client, r *Request) (err error) { + var bodyBytes []byte + contentType := r.Header.Get(hdrContentTypeKey) + kind := kindOf(r.Body) + r.bodyBuf = nil + + if reader, ok := r.Body.(io.Reader); ok { + if c.setContentLength || r.setContentLength { // keep backward compability + r.bodyBuf = acquireBuffer() + _, err = r.bodyBuf.ReadFrom(reader) + r.Body = nil + } else { + // Otherwise buffer less processing for `io.Reader`, sounds good. + return + } + } else if b, ok := r.Body.([]byte); ok { + bodyBytes = b + } else if s, ok := r.Body.(string); ok { + bodyBytes = []byte(s) + } else if IsJSONType(contentType) && + (kind == reflect.Struct || kind == reflect.Map || kind == reflect.Slice) { + bodyBytes, err = jsonMarshal(c, r, r.Body) + } else if IsXMLType(contentType) && (kind == reflect.Struct) { + bodyBytes, err = xml.Marshal(r.Body) + } + + if bodyBytes == nil && r.bodyBuf == nil { + err = errors.New("unsupported 'Body' type/value") + } + + // if any errors during body bytes handling, return it + if err != nil { + return + } + + // []byte into Buffer + if bodyBytes != nil && r.bodyBuf == nil { + r.bodyBuf = acquireBuffer() + _, _ = r.bodyBuf.Write(bodyBytes) + } + + return +} + +func saveResponseIntoFile(c *Client, res *Response) error { + if res.Request.isSaveResponse { + file := "" + + if len(c.outputDirectory) > 0 && !filepath.IsAbs(res.Request.outputFile) { + file += c.outputDirectory + string(filepath.Separator) + } + + file = filepath.Clean(file + res.Request.outputFile) + if err := createDirectory(filepath.Dir(file)); err != nil { + return err + } + + outFile, err := os.Create(file) + if err != nil { + return err + } + defer closeq(outFile) + + // io.Copy reads maximum 32kb size, it is perfect for large file download too + defer closeq(res.RawResponse.Body) + + written, err := io.Copy(outFile, res.RawResponse.Body) + if err != nil { + return err + } + + res.size = written + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/redirect.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/redirect.go new file mode 100644 index 00000000000..b426134ad43 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/redirect.go @@ -0,0 +1,99 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "errors" + "fmt" + "net" + "net/http" + "strings" +) + +type ( + // RedirectPolicy to regulate the redirects in the resty client. + // Objects implementing the RedirectPolicy interface can be registered as + // + // Apply function should return nil to continue the redirect jounery, otherwise + // return error to stop the redirect. + RedirectPolicy interface { + Apply(req *http.Request, via []*http.Request) error + } + + // The RedirectPolicyFunc type is an adapter to allow the use of ordinary functions as RedirectPolicy. + // If f is a function with the appropriate signature, RedirectPolicyFunc(f) is a RedirectPolicy object that calls f. + RedirectPolicyFunc func(*http.Request, []*http.Request) error +) + +// Apply calls f(req, via). +func (f RedirectPolicyFunc) Apply(req *http.Request, via []*http.Request) error { + return f(req, via) +} + +// NoRedirectPolicy is used to disable redirects in the HTTP client +// resty.SetRedirectPolicy(NoRedirectPolicy()) +func NoRedirectPolicy() RedirectPolicy { + return RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { + return errors.New("auto redirect is disabled") + }) +} + +// FlexibleRedirectPolicy is convenient method to create No of redirect policy for HTTP client. +// resty.SetRedirectPolicy(FlexibleRedirectPolicy(20)) +func FlexibleRedirectPolicy(noOfRedirect int) RedirectPolicy { + return RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { + if len(via) >= noOfRedirect { + return fmt.Errorf("stopped after %d redirects", noOfRedirect) + } + + checkHostAndAddHeaders(req, via[0]) + + return nil + }) +} + +// DomainCheckRedirectPolicy is convenient method to define domain name redirect rule in resty client. +// Redirect is allowed for only mentioned host in the policy. +// resty.SetRedirectPolicy(DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net")) +func DomainCheckRedirectPolicy(hostnames ...string) RedirectPolicy { + hosts := make(map[string]bool) + for _, h := range hostnames { + hosts[strings.ToLower(h)] = true + } + + fn := RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error { + if ok := hosts[getHostname(req.URL.Host)]; !ok { + return errors.New("redirect is not allowed as per DomainCheckRedirectPolicy") + } + + return nil + }) + + return fn +} + +func getHostname(host string) (hostname string) { + if strings.Index(host, ":") > 0 { + host, _, _ = net.SplitHostPort(host) + } + hostname = strings.ToLower(host) + return +} + +// By default Golang will not redirect request headers +// after go throughing various discussion comments from thread +// https://github.com/golang/go/issues/4800 +// go-resty will add all the headers during a redirect for the same host +func checkHostAndAddHeaders(cur *http.Request, pre *http.Request) { + curHostname := getHostname(cur.URL.Host) + preHostname := getHostname(pre.URL.Host) + if strings.EqualFold(curHostname, preHostname) { + for key, val := range pre.Header { + cur.Header[key] = val + } + } else { // only library User-Agent header is added + cur.Header.Set(hdrUserAgentKey, fmt.Sprintf(hdrUserAgentValue, Version)) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request.go new file mode 100644 index 00000000000..c6adff3dd80 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request.go @@ -0,0 +1,586 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "encoding/base64" + "encoding/json" + "encoding/xml" + "fmt" + "io" + "net" + "net/url" + "reflect" + "strings" +) + +// SRVRecord holds the data to query the SRV record for the following service +type SRVRecord struct { + Service string + Domain string +} + +// SetHeader method is to set a single header field and its value in the current request. +// Example: To set `Content-Type` and `Accept` as `application/json`. +// resty.R(). +// SetHeader("Content-Type", "application/json"). +// SetHeader("Accept", "application/json") +// +// Also you can override header value, which was set at client instance level. +// +func (r *Request) SetHeader(header, value string) *Request { + r.Header.Set(header, value) + return r +} + +// SetHeaders method sets multiple headers field and its values at one go in the current request. +// Example: To set `Content-Type` and `Accept` as `application/json` +// +// resty.R(). +// SetHeaders(map[string]string{ +// "Content-Type": "application/json", +// "Accept": "application/json", +// }) +// Also you can override header value, which was set at client instance level. +// +func (r *Request) SetHeaders(headers map[string]string) *Request { + for h, v := range headers { + r.SetHeader(h, v) + } + + return r +} + +// SetQueryParam method sets single parameter and its value in the current request. +// It will be formed as query string for the request. +// Example: `search=kitchen%20papers&size=large` in the URL after `?` mark. +// resty.R(). +// SetQueryParam("search", "kitchen papers"). +// SetQueryParam("size", "large") +// Also you can override query params value, which was set at client instance level +// +func (r *Request) SetQueryParam(param, value string) *Request { + r.QueryParam.Set(param, value) + return r +} + +// SetQueryParams method sets multiple parameters and its values at one go in the current request. +// It will be formed as query string for the request. +// Example: `search=kitchen%20papers&size=large` in the URL after `?` mark. +// resty.R(). +// SetQueryParams(map[string]string{ +// "search": "kitchen papers", +// "size": "large", +// }) +// Also you can override query params value, which was set at client instance level +// +func (r *Request) SetQueryParams(params map[string]string) *Request { + for p, v := range params { + r.SetQueryParam(p, v) + } + + return r +} + +// SetMultiValueQueryParams method appends multiple parameters with multi-value +// at one go in the current request. It will be formed as query string for the request. +// Example: `status=pending&status=approved&status=open` in the URL after `?` mark. +// resty.R(). +// SetMultiValueQueryParams(url.Values{ +// "status": []string{"pending", "approved", "open"}, +// }) +// Also you can override query params value, which was set at client instance level +// +func (r *Request) SetMultiValueQueryParams(params url.Values) *Request { + for p, v := range params { + for _, pv := range v { + r.QueryParam.Add(p, pv) + } + } + + return r +} + +// SetQueryString method provides ability to use string as an input to set URL query string for the request. +// +// Using String as an input +// resty.R(). +// SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more") +// +func (r *Request) SetQueryString(query string) *Request { + params, err := url.ParseQuery(strings.TrimSpace(query)) + if err == nil { + for p, v := range params { + for _, pv := range v { + r.QueryParam.Add(p, pv) + } + } + } else { + r.client.Log.Printf("ERROR %v", err) + } + return r +} + +// SetFormData method sets Form parameters and their values in the current request. +// It's applicable only HTTP method `POST` and `PUT` and requests content type would be set as +// `application/x-www-form-urlencoded`. +// resty.R(). +// SetFormData(map[string]string{ +// "access_token": "BC594900-518B-4F7E-AC75-BD37F019E08F", +// "user_id": "3455454545", +// }) +// Also you can override form data value, which was set at client instance level +// +func (r *Request) SetFormData(data map[string]string) *Request { + for k, v := range data { + r.FormData.Set(k, v) + } + + return r +} + +// SetMultiValueFormData method appends multiple form parameters with multi-value +// at one go in the current request. +// resty.R(). +// SetMultiValueFormData(url.Values{ +// "search_criteria": []string{"book", "glass", "pencil"}, +// }) +// Also you can override form data value, which was set at client instance level +// +func (r *Request) SetMultiValueFormData(params url.Values) *Request { + for k, v := range params { + for _, kv := range v { + r.FormData.Add(k, kv) + } + } + + return r +} + +// SetBody method sets the request body for the request. It supports various realtime needs as easy. +// We can say its quite handy or powerful. Supported request body data types is `string`, +// `[]byte`, `struct`, `map`, `slice` and `io.Reader`. Body value can be pointer or non-pointer. +// Automatic marshalling for JSON and XML content type, if it is `struct`, `map`, or `slice`. +// +// Note: `io.Reader` is processed as bufferless mode while sending request. +// +// Example: +// +// Struct as a body input, based on content type, it will be marshalled. +// resty.R(). +// SetBody(User{ +// Username: "jeeva@myjeeva.com", +// Password: "welcome2resty", +// }) +// +// Map as a body input, based on content type, it will be marshalled. +// resty.R(). +// SetBody(map[string]interface{}{ +// "username": "jeeva@myjeeva.com", +// "password": "welcome2resty", +// "address": &Address{ +// Address1: "1111 This is my street", +// Address2: "Apt 201", +// City: "My City", +// State: "My State", +// ZipCode: 00000, +// }, +// }) +// +// String as a body input. Suitable for any need as a string input. +// resty.R(). +// SetBody(`{ +// "username": "jeeva@getrightcare.com", +// "password": "admin" +// }`) +// +// []byte as a body input. Suitable for raw request such as file upload, serialize & deserialize, etc. +// resty.R(). +// SetBody([]byte("This is my raw request, sent as-is")) +// +func (r *Request) SetBody(body interface{}) *Request { + r.Body = body + return r +} + +// SetResult method is to register the response `Result` object for automatic unmarshalling in the RESTful mode +// if response status code is between 200 and 299 and content type either JSON or XML. +// +// Note: Result object can be pointer or non-pointer. +// resty.R().SetResult(&AuthToken{}) +// // OR +// resty.R().SetResult(AuthToken{}) +// +// Accessing a result value +// response.Result().(*AuthToken) +// +func (r *Request) SetResult(res interface{}) *Request { + r.Result = getPointer(res) + return r +} + +// SetError method is to register the request `Error` object for automatic unmarshalling in the RESTful mode +// if response status code is greater than 399 and content type either JSON or XML. +// +// Note: Error object can be pointer or non-pointer. +// resty.R().SetError(&AuthError{}) +// // OR +// resty.R().SetError(AuthError{}) +// +// Accessing a error value +// response.Error().(*AuthError) +// +func (r *Request) SetError(err interface{}) *Request { + r.Error = getPointer(err) + return r +} + +// SetFile method is to set single file field name and its path for multipart upload. +// resty.R(). +// SetFile("my_file", "/Users/jeeva/Gas Bill - Sep.pdf") +// +func (r *Request) SetFile(param, filePath string) *Request { + r.isMultiPart = true + r.FormData.Set("@"+param, filePath) + return r +} + +// SetFiles method is to set multiple file field name and its path for multipart upload. +// resty.R(). +// SetFiles(map[string]string{ +// "my_file1": "/Users/jeeva/Gas Bill - Sep.pdf", +// "my_file2": "/Users/jeeva/Electricity Bill - Sep.pdf", +// "my_file3": "/Users/jeeva/Water Bill - Sep.pdf", +// }) +// +func (r *Request) SetFiles(files map[string]string) *Request { + r.isMultiPart = true + + for f, fp := range files { + r.FormData.Set("@"+f, fp) + } + + return r +} + +// SetFileReader method is to set single file using io.Reader for multipart upload. +// resty.R(). +// SetFileReader("profile_img", "my-profile-img.png", bytes.NewReader(profileImgBytes)). +// SetFileReader("notes", "user-notes.txt", bytes.NewReader(notesBytes)) +// +func (r *Request) SetFileReader(param, fileName string, reader io.Reader) *Request { + r.isMultiPart = true + r.multipartFiles = append(r.multipartFiles, &File{ + Name: fileName, + ParamName: param, + Reader: reader, + }) + return r +} + +// SetMultipartField method is to set custom data using io.Reader for multipart upload. +func (r *Request) SetMultipartField(param, fileName, contentType string, reader io.Reader) *Request { + r.isMultiPart = true + r.multipartFields = append(r.multipartFields, &MultipartField{ + Param: param, + FileName: fileName, + ContentType: contentType, + Reader: reader, + }) + return r +} + +// SetMultipartFields method is to set multiple data fields using io.Reader for multipart upload. +// Example: +// resty.R().SetMultipartFields( +// &resty.MultipartField{ +// Param: "uploadManifest1", +// FileName: "upload-file-1.json", +// ContentType: "application/json", +// Reader: strings.NewReader(`{"input": {"name": "Uploaded document 1", "_filename" : ["file1.txt"]}}`), +// }, +// &resty.MultipartField{ +// Param: "uploadManifest2", +// FileName: "upload-file-2.json", +// ContentType: "application/json", +// Reader: strings.NewReader(`{"input": {"name": "Uploaded document 2", "_filename" : ["file2.txt"]}}`), +// }) +// +// If you have slice already, then simply call- +// resty.R().SetMultipartFields(fields...) +func (r *Request) SetMultipartFields(fields ...*MultipartField) *Request { + r.isMultiPart = true + r.multipartFields = append(r.multipartFields, fields...) + return r +} + +// SetContentLength method sets the HTTP header `Content-Length` value for current request. +// By default go-resty won't set `Content-Length`. Also you have an option to enable for every +// request. See `resty.SetContentLength` +// resty.R().SetContentLength(true) +// +func (r *Request) SetContentLength(l bool) *Request { + r.setContentLength = true + return r +} + +// SetBasicAuth method sets the basic authentication header in the current HTTP request. +// For Header example: +// Authorization: Basic +// +// To set the header for username "go-resty" and password "welcome" +// resty.R().SetBasicAuth("go-resty", "welcome") +// +// This method overrides the credentials set by method `resty.SetBasicAuth`. +// +func (r *Request) SetBasicAuth(username, password string) *Request { + r.UserInfo = &User{Username: username, Password: password} + return r +} + +// SetAuthToken method sets bearer auth token header in the current HTTP request. Header example: +// Authorization: Bearer +// +// Example: To set auth token BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F +// +// resty.R().SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F") +// +// This method overrides the Auth token set by method `resty.SetAuthToken`. +// +func (r *Request) SetAuthToken(token string) *Request { + r.Token = token + return r +} + +// SetOutput method sets the output file for current HTTP request. Current HTTP response will be +// saved into given file. It is similar to `curl -o` flag. Absolute path or relative path can be used. +// If is it relative path then output file goes under the output directory, as mentioned +// in the `Client.SetOutputDirectory`. +// resty.R(). +// SetOutput("/Users/jeeva/Downloads/ReplyWithHeader-v5.1-beta.zip"). +// Get("http://bit.ly/1LouEKr") +// +// Note: In this scenario `Response.Body` might be nil. +func (r *Request) SetOutput(file string) *Request { + r.outputFile = file + r.isSaveResponse = true + return r +} + +// SetSRV method sets the details to query the service SRV record and execute the +// request. +// resty.R(). +// SetSRV(SRVRecord{"web", "testservice.com"}). +// Get("/get") +func (r *Request) SetSRV(srv *SRVRecord) *Request { + r.SRV = srv + return r +} + +// SetDoNotParseResponse method instructs `Resty` not to parse the response body automatically. +// Resty exposes the raw response body as `io.ReadCloser`. Also do not forget to close the body, +// otherwise you might get into connection leaks, no connection reuse. +// +// Please Note: Response middlewares are not applicable, if you use this option. Basically you have +// taken over the control of response parsing from `Resty`. +func (r *Request) SetDoNotParseResponse(parse bool) *Request { + r.notParseResponse = parse + return r +} + +// SetPathParams method sets multiple URL path key-value pairs at one go in the +// resty current request instance. +// resty.R().SetPathParams(map[string]string{ +// "userId": "sample@sample.com", +// "subAccountId": "100002", +// }) +// +// Result: +// URL - /v1/users/{userId}/{subAccountId}/details +// Composed URL - /v1/users/sample@sample.com/100002/details +// It replace the value of the key while composing request URL. Also you can +// override Path Params value, which was set at client instance level. +func (r *Request) SetPathParams(params map[string]string) *Request { + for p, v := range params { + r.pathParams[p] = v + } + return r +} + +// ExpectContentType method allows to provide fallback `Content-Type` for automatic unmarshalling +// when `Content-Type` response header is unavailable. +func (r *Request) ExpectContentType(contentType string) *Request { + r.fallbackContentType = contentType + return r +} + +// SetJSONEscapeHTML method is to enable/disable the HTML escape on JSON marshal. +// +// NOTE: This option only applicable to standard JSON Marshaller. +func (r *Request) SetJSONEscapeHTML(b bool) *Request { + r.jsonEscapeHTML = b + return r +} + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// HTTP verb method starts here +//___________________________________ + +// Get method does GET HTTP request. It's defined in section 4.3.1 of RFC7231. +func (r *Request) Get(url string) (*Response, error) { + return r.Execute(MethodGet, url) +} + +// Head method does HEAD HTTP request. It's defined in section 4.3.2 of RFC7231. +func (r *Request) Head(url string) (*Response, error) { + return r.Execute(MethodHead, url) +} + +// Post method does POST HTTP request. It's defined in section 4.3.3 of RFC7231. +func (r *Request) Post(url string) (*Response, error) { + return r.Execute(MethodPost, url) +} + +// Put method does PUT HTTP request. It's defined in section 4.3.4 of RFC7231. +func (r *Request) Put(url string) (*Response, error) { + return r.Execute(MethodPut, url) +} + +// Delete method does DELETE HTTP request. It's defined in section 4.3.5 of RFC7231. +func (r *Request) Delete(url string) (*Response, error) { + return r.Execute(MethodDelete, url) +} + +// Options method does OPTIONS HTTP request. It's defined in section 4.3.7 of RFC7231. +func (r *Request) Options(url string) (*Response, error) { + return r.Execute(MethodOptions, url) +} + +// Patch method does PATCH HTTP request. It's defined in section 2 of RFC5789. +func (r *Request) Patch(url string) (*Response, error) { + return r.Execute(MethodPatch, url) +} + +// Execute method performs the HTTP request with given HTTP method and URL +// for current `Request`. +// resp, err := resty.R().Execute(resty.GET, "http://httpbin.org/get") +// +func (r *Request) Execute(method, url string) (*Response, error) { + var addrs []*net.SRV + var err error + + if r.isMultiPart && !(method == MethodPost || method == MethodPut) { + return nil, fmt.Errorf("multipart content is not allowed in HTTP verb [%v]", method) + } + + if r.SRV != nil { + _, addrs, err = net.LookupSRV(r.SRV.Service, "tcp", r.SRV.Domain) + if err != nil { + return nil, err + } + } + + r.Method = method + r.URL = r.selectAddr(addrs, url, 0) + + if r.client.RetryCount == 0 { + return r.client.execute(r) + } + + var resp *Response + attempt := 0 + _ = Backoff( + func() (*Response, error) { + attempt++ + + r.URL = r.selectAddr(addrs, url, attempt) + + resp, err = r.client.execute(r) + if err != nil { + r.client.Log.Printf("ERROR %v, Attempt %v", err, attempt) + if r.isContextCancelledIfAvailable() { + // stop Backoff from retrying request if request has been + // canceled by context + return resp, nil + } + } + + return resp, err + }, + Retries(r.client.RetryCount), + WaitTime(r.client.RetryWaitTime), + MaxWaitTime(r.client.RetryMaxWaitTime), + RetryConditions(r.client.RetryConditions), + ) + + return resp, err +} + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// Request Unexported methods +//___________________________________ + +func (r *Request) fmtBodyString() (body string) { + body = "***** NO CONTENT *****" + if isPayloadSupported(r.Method, r.client.AllowGetMethodPayload) { + if _, ok := r.Body.(io.Reader); ok { + body = "***** BODY IS io.Reader *****" + return + } + + // multipart or form-data + if r.isMultiPart || r.isFormData { + body = r.bodyBuf.String() + return + } + + // request body data + if r.Body == nil { + return + } + var prtBodyBytes []byte + var err error + + contentType := r.Header.Get(hdrContentTypeKey) + kind := kindOf(r.Body) + if canJSONMarshal(contentType, kind) { + prtBodyBytes, err = json.MarshalIndent(&r.Body, "", " ") + } else if IsXMLType(contentType) && (kind == reflect.Struct) { + prtBodyBytes, err = xml.MarshalIndent(&r.Body, "", " ") + } else if b, ok := r.Body.(string); ok { + if IsJSONType(contentType) { + bodyBytes := []byte(b) + out := acquireBuffer() + defer releaseBuffer(out) + if err = json.Indent(out, bodyBytes, "", " "); err == nil { + prtBodyBytes = out.Bytes() + } + } else { + body = b + return + } + } else if b, ok := r.Body.([]byte); ok { + body = base64.StdEncoding.EncodeToString(b) + } + + if prtBodyBytes != nil && err == nil { + body = string(prtBodyBytes) + } + } + + return +} + +func (r *Request) selectAddr(addrs []*net.SRV, path string, attempt int) string { + if addrs == nil { + return path + } + + idx := attempt % len(addrs) + domain := strings.TrimRight(addrs[idx].Target, ".") + path = strings.TrimLeft(path, "/") + + return fmt.Sprintf("%s://%s:%d/%s", r.client.scheme, domain, addrs[idx].Port, path) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request16.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request16.go new file mode 100644 index 00000000000..079ecfca749 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request16.go @@ -0,0 +1,63 @@ +// +build !go1.7 + +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com) +// 2016 Andrew Grigorev (https://github.com/ei-grad) +// All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "bytes" + "encoding/json" + "net/http" + "net/url" + "time" +) + +// Request type is used to compose and send individual request from client +// go-resty is provide option override client level settings such as +// Auth Token, Basic Auth credentials, Header, Query Param, Form Data, Error object +// and also you can add more options for that particular request +type Request struct { + URL string + Method string + Token string + QueryParam url.Values + FormData url.Values + Header http.Header + Time time.Time + Body interface{} + Result interface{} + Error interface{} + RawRequest *http.Request + SRV *SRVRecord + UserInfo *User + + isMultiPart bool + isFormData bool + setContentLength bool + isSaveResponse bool + notParseResponse bool + jsonEscapeHTML bool + outputFile string + fallbackContentType string + pathParams map[string]string + client *Client + bodyBuf *bytes.Buffer + multipartFiles []*File + multipartFields []*MultipartField +} + +func (r *Request) addContextIfAvailable() { + // nothing to do for golang<1.7 +} + +func (r *Request) isContextCancelledIfAvailable() bool { + // just always return false golang<1.7 + return false +} + +// for !go1.7 +var noescapeJSONMarshal = json.Marshal diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request17.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request17.go new file mode 100644 index 00000000000..0629a114c02 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/request17.go @@ -0,0 +1,96 @@ +// +build go1.7 go1.8 + +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com) +// 2016 Andrew Grigorev (https://github.com/ei-grad) +// All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "bytes" + "context" + "encoding/json" + "net/http" + "net/url" + "time" +) + +// Request type is used to compose and send individual request from client +// go-resty is provide option override client level settings such as +// Auth Token, Basic Auth credentials, Header, Query Param, Form Data, Error object +// and also you can add more options for that particular request +type Request struct { + URL string + Method string + Token string + QueryParam url.Values + FormData url.Values + Header http.Header + Time time.Time + Body interface{} + Result interface{} + Error interface{} + RawRequest *http.Request + SRV *SRVRecord + UserInfo *User + + isMultiPart bool + isFormData bool + setContentLength bool + isSaveResponse bool + notParseResponse bool + jsonEscapeHTML bool + outputFile string + fallbackContentType string + ctx context.Context + pathParams map[string]string + client *Client + bodyBuf *bytes.Buffer + multipartFiles []*File + multipartFields []*MultipartField +} + +// Context method returns the Context if its already set in request +// otherwise it creates new one using `context.Background()`. +func (r *Request) Context() context.Context { + if r.ctx == nil { + return context.Background() + } + return r.ctx +} + +// SetContext method sets the context.Context for current Request. It allows +// to interrupt the request execution if ctx.Done() channel is closed. +// See https://blog.golang.org/context article and the "context" package +// documentation. +func (r *Request) SetContext(ctx context.Context) *Request { + r.ctx = ctx + return r +} + +func (r *Request) addContextIfAvailable() { + if r.ctx != nil { + r.RawRequest = r.RawRequest.WithContext(r.ctx) + } +} + +func (r *Request) isContextCancelledIfAvailable() bool { + if r.ctx != nil { + if r.ctx.Err() != nil { + return true + } + } + return false +} + +// for go1.7+ +var noescapeJSONMarshal = func(v interface{}) ([]byte, error) { + buf := acquireBuffer() + defer releaseBuffer(buf) + encoder := json.NewEncoder(buf) + encoder.SetEscapeHTML(false) + err := encoder.Encode(v) + return buf.Bytes(), err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/response.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/response.go new file mode 100644 index 00000000000..ea2a027a538 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/response.go @@ -0,0 +1,150 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "strings" + "time" +) + +// Response is an object represents executed request and its values. +type Response struct { + Request *Request + RawResponse *http.Response + + body []byte + size int64 + receivedAt time.Time +} + +// Body method returns HTTP response as []byte array for the executed request. +// Note: `Response.Body` might be nil, if `Request.SetOutput` is used. +func (r *Response) Body() []byte { + if r.RawResponse == nil { + return []byte{} + } + return r.body +} + +// Status method returns the HTTP status string for the executed request. +// Example: 200 OK +func (r *Response) Status() string { + if r.RawResponse == nil { + return "" + } + + return r.RawResponse.Status +} + +// StatusCode method returns the HTTP status code for the executed request. +// Example: 200 +func (r *Response) StatusCode() int { + if r.RawResponse == nil { + return 0 + } + + return r.RawResponse.StatusCode +} + +// Result method returns the response value as an object if it has one +func (r *Response) Result() interface{} { + return r.Request.Result +} + +// Error method returns the error object if it has one +func (r *Response) Error() interface{} { + return r.Request.Error +} + +// Header method returns the response headers +func (r *Response) Header() http.Header { + if r.RawResponse == nil { + return http.Header{} + } + + return r.RawResponse.Header +} + +// Cookies method to access all the response cookies +func (r *Response) Cookies() []*http.Cookie { + if r.RawResponse == nil { + return make([]*http.Cookie, 0) + } + + return r.RawResponse.Cookies() +} + +// String method returns the body of the server response as String. +func (r *Response) String() string { + if r.body == nil { + return "" + } + + return strings.TrimSpace(string(r.body)) +} + +// Time method returns the time of HTTP response time that from request we sent and received a request. +// See `response.ReceivedAt` to know when client recevied response and see `response.Request.Time` to know +// when client sent a request. +func (r *Response) Time() time.Duration { + return r.receivedAt.Sub(r.Request.Time) +} + +// ReceivedAt method returns when response got recevied from server for the request. +func (r *Response) ReceivedAt() time.Time { + return r.receivedAt +} + +// Size method returns the HTTP response size in bytes. Ya, you can relay on HTTP `Content-Length` header, +// however it won't be good for chucked transfer/compressed response. Since Resty calculates response size +// at the client end. You will get actual size of the http response. +func (r *Response) Size() int64 { + return r.size +} + +// RawBody method exposes the HTTP raw response body. Use this method in-conjunction with `SetDoNotParseResponse` +// option otherwise you get an error as `read err: http: read on closed response body`. +// +// Do not forget to close the body, otherwise you might get into connection leaks, no connection reuse. +// Basically you have taken over the control of response parsing from `Resty`. +func (r *Response) RawBody() io.ReadCloser { + if r.RawResponse == nil { + return nil + } + return r.RawResponse.Body +} + +// IsSuccess method returns true if HTTP status code >= 200 and <= 299 otherwise false. +func (r *Response) IsSuccess() bool { + return r.StatusCode() > 199 && r.StatusCode() < 300 +} + +// IsError method returns true if HTTP status code >= 400 otherwise false. +func (r *Response) IsError() bool { + return r.StatusCode() > 399 +} + +func (r *Response) fmtBodyString(sl int64) string { + if r.body != nil { + if int64(len(r.body)) > sl { + return fmt.Sprintf("***** RESPONSE TOO LARGE (size - %d) *****", len(r.body)) + } + ct := r.Header().Get(hdrContentTypeKey) + if IsJSONType(ct) { + out := acquireBuffer() + defer releaseBuffer(out) + if err := json.Indent(out, r.body, "", " "); err == nil { + return out.String() + } + } + return r.String() + } + + return "***** NO CONTENT *****" +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/resty.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/resty.go new file mode 100644 index 00000000000..9a32463d73b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/resty.go @@ -0,0 +1,9 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +// Package resty provides Simple HTTP and REST client library for Go. +package resty + +// Version # of resty +const Version = "1.12.0" diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/retry.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/retry.go new file mode 100644 index 00000000000..4ed9b6d6067 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/retry.go @@ -0,0 +1,118 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "math" + "math/rand" + "time" +) + +const ( + defaultMaxRetries = 3 + defaultWaitTime = time.Duration(100) * time.Millisecond + defaultMaxWaitTime = time.Duration(2000) * time.Millisecond +) + +type ( + // Option is to create convenient retry options like wait time, max retries, etc. + Option func(*Options) + + // RetryConditionFunc type is for retry condition function + RetryConditionFunc func(*Response) (bool, error) + + // Options to hold go-resty retry values + Options struct { + maxRetries int + waitTime time.Duration + maxWaitTime time.Duration + retryConditions []RetryConditionFunc + } +) + +// Retries sets the max number of retries +func Retries(value int) Option { + return func(o *Options) { + o.maxRetries = value + } +} + +// WaitTime sets the default wait time to sleep between requests +func WaitTime(value time.Duration) Option { + return func(o *Options) { + o.waitTime = value + } +} + +// MaxWaitTime sets the max wait time to sleep between requests +func MaxWaitTime(value time.Duration) Option { + return func(o *Options) { + o.maxWaitTime = value + } +} + +// RetryConditions sets the conditions that will be checked for retry. +func RetryConditions(conditions []RetryConditionFunc) Option { + return func(o *Options) { + o.retryConditions = conditions + } +} + +// Backoff retries with increasing timeout duration up until X amount of retries +// (Default is 3 attempts, Override with option Retries(n)) +func Backoff(operation func() (*Response, error), options ...Option) error { + // Defaults + opts := Options{ + maxRetries: defaultMaxRetries, + waitTime: defaultWaitTime, + maxWaitTime: defaultMaxWaitTime, + retryConditions: []RetryConditionFunc{}, + } + + for _, o := range options { + o(&opts) + } + + var ( + resp *Response + err error + ) + base := float64(opts.waitTime) // Time to wait between each attempt + capLevel := float64(opts.maxWaitTime) // Maximum amount of wait time for the retry + for attempt := 0; attempt < opts.maxRetries; attempt++ { + resp, err = operation() + + var needsRetry bool + var conditionErr error + for _, condition := range opts.retryConditions { + needsRetry, conditionErr = condition(resp) + if needsRetry || conditionErr != nil { + break + } + } + + // If the operation returned no error, there was no condition satisfied and + // there was no error caused by the conditional functions. + if err == nil && !needsRetry && conditionErr == nil { + return nil + } + // Adding capped exponential backup with jitter + // See the following article... + // http://www.awsarchitectureblog.com/2015/03/backoff.html + temp := math.Min(capLevel, base*math.Exp2(float64(attempt))) + ri := int(temp / 2) + if ri <= 0 { + ri = 1<<31 - 1 // max int for arch 386 + } + sleepDuration := time.Duration(math.Abs(float64(ri + rand.Intn(ri)))) + + if sleepDuration < opts.waitTime { + sleepDuration = opts.waitTime + } + time.Sleep(sleepDuration) + } + + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/util.go b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/util.go new file mode 100644 index 00000000000..997cd1009ef --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/gopkg.in/resty.v1/util.go @@ -0,0 +1,281 @@ +// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com), All rights reserved. +// resty source code and usage is governed by a MIT style +// license that can be found in the LICENSE file. + +package resty + +import ( + "bytes" + "encoding/json" + "encoding/xml" + "fmt" + "io" + "log" + "mime/multipart" + "net/http" + "net/textproto" + "os" + "path/filepath" + "reflect" + "runtime" + "sort" + "strings" +) + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// Package Helper methods +//___________________________________ + +// IsStringEmpty method tells whether given string is empty or not +func IsStringEmpty(str string) bool { + return len(strings.TrimSpace(str)) == 0 +} + +// DetectContentType method is used to figure out `Request.Body` content type for request header +func DetectContentType(body interface{}) string { + contentType := plainTextType + kind := kindOf(body) + switch kind { + case reflect.Struct, reflect.Map: + contentType = jsonContentType + case reflect.String: + contentType = plainTextType + default: + if b, ok := body.([]byte); ok { + contentType = http.DetectContentType(b) + } else if kind == reflect.Slice { + contentType = jsonContentType + } + } + + return contentType +} + +// IsJSONType method is to check JSON content type or not +func IsJSONType(ct string) bool { + return jsonCheck.MatchString(ct) +} + +// IsXMLType method is to check XML content type or not +func IsXMLType(ct string) bool { + return xmlCheck.MatchString(ct) +} + +// Unmarshal content into object from JSON or XML +// Deprecated: kept for backward compatibility +func Unmarshal(ct string, b []byte, d interface{}) (err error) { + if IsJSONType(ct) { + err = json.Unmarshal(b, d) + } else if IsXMLType(ct) { + err = xml.Unmarshal(b, d) + } + + return +} + +// Unmarshalc content into object from JSON or XML +func Unmarshalc(c *Client, ct string, b []byte, d interface{}) (err error) { + if IsJSONType(ct) { + err = c.JSONUnmarshal(b, d) + } else if IsXMLType(ct) { + err = xml.Unmarshal(b, d) + } + + return +} + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// RequestLog and ResponseLog type +//___________________________________ + +// RequestLog struct is used to collected information from resty request +// instance for debug logging. It sent to request log callback before resty +// actually logs the information. +type RequestLog struct { + Header http.Header + Body string +} + +// ResponseLog struct is used to collected information from resty response +// instance for debug logging. It sent to response log callback before resty +// actually logs the information. +type ResponseLog struct { + Header http.Header + Body string +} + +//‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ +// Package Unexported methods +//___________________________________ + +// way to disable the HTML escape as opt-in +func jsonMarshal(c *Client, r *Request, d interface{}) ([]byte, error) { + if !r.jsonEscapeHTML { + return noescapeJSONMarshal(d) + } else if !c.jsonEscapeHTML { + return noescapeJSONMarshal(d) + } + return c.JSONMarshal(d) +} + +func firstNonEmpty(v ...string) string { + for _, s := range v { + if !IsStringEmpty(s) { + return s + } + } + return "" +} + +func getLogger(w io.Writer) *log.Logger { + return log.New(w, "RESTY ", log.LstdFlags) +} + +var quoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"") + +func escapeQuotes(s string) string { + return quoteEscaper.Replace(s) +} + +func createMultipartHeader(param, fileName, contentType string) textproto.MIMEHeader { + hdr := make(textproto.MIMEHeader) + hdr.Set("Content-Disposition", fmt.Sprintf(`form-data; name="%s"; filename="%s"`, + escapeQuotes(param), escapeQuotes(fileName))) + hdr.Set("Content-Type", contentType) + return hdr +} + +func addMultipartFormField(w *multipart.Writer, mf *MultipartField) error { + partWriter, err := w.CreatePart(createMultipartHeader(mf.Param, mf.FileName, mf.ContentType)) + if err != nil { + return err + } + + _, err = io.Copy(partWriter, mf.Reader) + return err +} + +func writeMultipartFormFile(w *multipart.Writer, fieldName, fileName string, r io.Reader) error { + // Auto detect actual multipart content type + cbuf := make([]byte, 512) + size, err := r.Read(cbuf) + if err != nil { + return err + } + + partWriter, err := w.CreatePart(createMultipartHeader(fieldName, fileName, http.DetectContentType(cbuf))) + if err != nil { + return err + } + + if _, err = partWriter.Write(cbuf[:size]); err != nil { + return err + } + + _, err = io.Copy(partWriter, r) + return err +} + +func addFile(w *multipart.Writer, fieldName, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + defer closeq(file) + return writeMultipartFormFile(w, fieldName, filepath.Base(path), file) +} + +func addFileReader(w *multipart.Writer, f *File) error { + return writeMultipartFormFile(w, f.ParamName, f.Name, f.Reader) +} + +func getPointer(v interface{}) interface{} { + vv := valueOf(v) + if vv.Kind() == reflect.Ptr { + return v + } + return reflect.New(vv.Type()).Interface() +} + +func isPayloadSupported(m string, allowMethodGet bool) bool { + return !(m == MethodHead || m == MethodOptions || (m == MethodGet && !allowMethodGet)) +} + +func typeOf(i interface{}) reflect.Type { + return indirect(valueOf(i)).Type() +} + +func valueOf(i interface{}) reflect.Value { + return reflect.ValueOf(i) +} + +func indirect(v reflect.Value) reflect.Value { + return reflect.Indirect(v) +} + +func kindOf(v interface{}) reflect.Kind { + return typeOf(v).Kind() +} + +func createDirectory(dir string) (err error) { + if _, err = os.Stat(dir); err != nil { + if os.IsNotExist(err) { + if err = os.MkdirAll(dir, 0755); err != nil { + return + } + } + } + return +} + +func canJSONMarshal(contentType string, kind reflect.Kind) bool { + return IsJSONType(contentType) && (kind == reflect.Struct || kind == reflect.Map || kind == reflect.Slice) +} + +func functionName(i interface{}) string { + return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() +} + +func acquireBuffer() *bytes.Buffer { + return bufPool.Get().(*bytes.Buffer) +} + +func releaseBuffer(buf *bytes.Buffer) { + if buf != nil { + buf.Reset() + bufPool.Put(buf) + } +} + +func closeq(v interface{}) { + if c, ok := v.(io.Closer); ok { + sliently(c.Close()) + } +} + +func sliently(_ ...interface{}) {} + +func composeHeaders(hdrs http.Header) string { + var str []string + for _, k := range sortHeaderKeys(hdrs) { + str = append(str, fmt.Sprintf("%25s: %s", k, strings.Join(hdrs[k], ", "))) + } + return strings.Join(str, "\n") +} + +func sortHeaderKeys(hdrs http.Header) []string { + var keys []string + for key := range hdrs { + keys = append(keys, key) + } + sort.Strings(keys) + return keys +} + +func copyHeaders(hdrs http.Header) http.Header { + nh := http.Header{} + for k, v := range hdrs { + nh[k] = v + } + return nh +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/vendor.json b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/vendor.json new file mode 100644 index 00000000000..fb20b9fecf7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/linode/vendor/vendor.json @@ -0,0 +1,25 @@ +{ + "comment": "", + "ignore": "test", + "package": [ + {"path":"appengine","revision":""}, + {"path":"appengine_internal","revision":""}, + {"path":"appengine_internal/base","revision":""}, + {"path":"github.com/golang/protobuf/proto","checksumSHA1":"CGj8VcI/CpzxaNqlqpEVM7qElD4=","revision":"b285ee9cfc6c881bb20c0d8dc73370ea9b9ec90f","revisionTime":"2019-05-17T06:12:10Z"}, + {"path":"github.com/linode/linodego","checksumSHA1":"jm8r8aj8JP35ocqQ2bwoHgy6wpM=","revision":"42d84d42f3f28fe1fe1823c58c11715241eda24e","revisionTime":"2019-02-05T19:19:13Z"}, + {"path":"golang.org/x/net/context","checksumSHA1":"GtamqiJoL7PGHsN454AoffBFMa8=","revision":"018c4d40a106a7ae83689758294fcd8d23850745","revisionTime":"2019-05-20T20:50:50Z"}, + {"path":"golang.org/x/net/context/ctxhttp","checksumSHA1":"aFpql3G+Nw8zkzfqLWQJNZC8pu0=","revision":"018c4d40a106a7ae83689758294fcd8d23850745","revisionTime":"2019-05-20T20:50:50Z"}, + {"path":"golang.org/x/net/publicsuffix","checksumSHA1":"j6leSoJatxWHJGLjRxIjZ8GbaDQ=","revision":"16b79f2e4e95ea23b2bf9903c9809ff7b013ce85","revisionTime":"2019-03-01T08:36:47Z"}, + {"path":"golang.org/x/oauth2","checksumSHA1":"/F4kBHR/0qnLRJgjKqlUo3Iksds=","revision":"9a379c6b3e95a790ffc43293c2a78dee0d7b6e20","revisionTime":"2017-07-25T16:55:14Z"}, + {"path":"golang.org/x/oauth2/internal","checksumSHA1":"eztsaK5Uim4juQOtqUf6VF+foD4=","revision":"9a379c6b3e95a790ffc43293c2a78dee0d7b6e20","revisionTime":"2017-07-25T16:55:14Z"}, + {"path":"google.golang.org/appengine/internal","checksumSHA1":"/R9+Y0jX9ijye8Ea6oh/RBwOOg4=","revision":"311d3c5cf9373249645db030e53c37c209a8b378","revisionTime":"2019-05-15T04:47:07Z"}, + {"path":"google.golang.org/appengine/internal/base","checksumSHA1":"5PakGXEgSbyFptkhGO8MnGf7uH0=","revision":"311d3c5cf9373249645db030e53c37c209a8b378","revisionTime":"2019-05-15T04:47:07Z"}, + {"path":"google.golang.org/appengine/internal/datastore","checksumSHA1":"3DZ+Ah5hFQb1/nh1+li2VE+kkfk=","revision":"311d3c5cf9373249645db030e53c37c209a8b378","revisionTime":"2019-05-15T04:47:07Z"}, + {"path":"google.golang.org/appengine/internal/log","checksumSHA1":"HJQ4JM9YWfwIe4vmAgXC7J/1T3E=","revision":"311d3c5cf9373249645db030e53c37c209a8b378","revisionTime":"2019-05-15T04:47:07Z"}, + {"path":"google.golang.org/appengine/internal/remote_api","checksumSHA1":"hApgRLSl7w9XG2waJxdH/o0A398=","revision":"311d3c5cf9373249645db030e53c37c209a8b378","revisionTime":"2019-05-15T04:47:07Z"}, + {"path":"google.golang.org/appengine/internal/urlfetch","checksumSHA1":"ZnEUFEjcGAVZNDPOOc+VLN7x4pI=","revision":"311d3c5cf9373249645db030e53c37c209a8b378","revisionTime":"2019-05-15T04:47:07Z"}, + {"path":"google.golang.org/appengine/urlfetch","checksumSHA1":"akOV9pYnCbcPA8wJUutSQVibdyg=","revision":"311d3c5cf9373249645db030e53c37c209a8b378","revisionTime":"2019-05-15T04:47:07Z"}, + {"path":"gopkg.in/resty.v1","checksumSHA1":"iwwCOtfdXj5RGjQThilFlGzUNTc=","revision":"fa5875c0caa5c260ab78acec5a244215a730247f","revisionTime":"2019-02-28T07:26:48Z"} + ], + "rootPath": "github.com/hashicorp/go-discover/provider/linode" +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/mdns_provider.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/mdns_provider.go new file mode 100644 index 00000000000..7445a8357c3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/mdns_provider.go @@ -0,0 +1,119 @@ +// Package mdns provides node discovery via mDNS. +package mdns + +import ( + "fmt" + "io/ioutil" + "log" + "net" + "strconv" + "time" + + m "github.com/hashicorp/mdns" +) + +// Provider implements the Provider interface. +type Provider struct{} + +// Help returns help information for the mDNS package. +func (p *Provider) Help() string { + return `mDNS: + + provider: "mdns" + service: The mDNS service name. + domain: The mDNS discovery domain. Default "local". + timeout: The mDNS lookup timeout. Default "5s" (five seconds). + v6: IPv6 will be allowed and preferred when set to "true" + and disabled when set to "false". Default "true". + v4: IPv4 will be allowed when set to "true" and disabled + when set to "false". Default "true". +` +} + +// Addrs returns discovered addresses for the mDNS package. +func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error) { + var params *m.QueryParam + var ch chan *m.ServiceEntry + var v6, v4 bool + var addrs []string + var err error + + // default to null logger + if l == nil { + l = log.New(ioutil.Discard, "", 0) + } + + // init params + params = new(m.QueryParam) + + // validate and set service record + if args["service"] == "" { + return nil, fmt.Errorf("discover-mdns: Service record not provided." + + " Please specify a service record for the mDNS lookup.") + } + params.Service = args["service"] + + // validate and set domain + if args["domain"] != "" { + params.Domain = args["domain"] + } else { + params.Domain = "local" + } + + // validate and set timeout + if args["timeout"] != "" { + if params.Timeout, err = time.ParseDuration(args["timeout"]); err != nil { + return nil, fmt.Errorf("discover-mdns: Failed to parse timeout: %s", err) + } + } else { + params.Timeout = 5 * time.Second + } + + // validate and set v6 toggle + if args["v6"] != "" { + if v6, err = strconv.ParseBool(args["v6"]); err != nil { + return nil, fmt.Errorf("discover-mdns: Failed to parse v6: %s", err) + } + } else { + v6 = true + } + + // validate and set v4 toggle + if args["v4"] != "" { + if v4, err = strconv.ParseBool(args["v4"]); err != nil { + return nil, fmt.Errorf("discover-mdns: Failed to parse v4: %s", err) + } + } else { + v4 = true + } + + // init entries channel + ch = make(chan *m.ServiceEntry) + defer close(ch) + params.Entries = ch + + // build addresses + go func() { + var addr string + for e := range ch { + addr = "" // reset addr each loop + if v6 && e.AddrV6 != nil { + addr = net.JoinHostPort(e.AddrV6.String(), + strconv.Itoa(e.Port)) + } + if addr == "" && v4 && e.AddrV4 != nil { + addr = net.JoinHostPort(e.AddrV4.String(), + strconv.Itoa(e.Port)) + } + if addr != "" { + l.Printf("[DEBUG] discover-mdns: %s -> %s", + e.Host, addr) + // build address list + addrs = append(addrs, addr) + } + } + }() + + // lookup and return + return addrs, m.Query(params) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/LICENSE new file mode 100644 index 00000000000..a5df10e675d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Armon Dadgar + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/README.md b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/README.md new file mode 100644 index 00000000000..80f3d90ab38 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/README.md @@ -0,0 +1,37 @@ +mdns +==== + +Simple mDNS client/server library in Golang. mDNS or Multicast DNS can be +used to discover services on the local network without the use of an authoritative +DNS server. This enables peer-to-peer discovery. It is important to note that many +networks restrict the use of multicasting, which prevents mDNS from functioning. +Notably, multicast cannot be used in any sort of cloud, or shared infrastructure +environment. However it works well in most office, home, or private infrastructure +environments. + +Using the library is very simple, here is an example of publishing a service entry: + + // Setup our service export + host, _ := os.Hostname() + info := []string{"My awesome service"}, + service, _ := NewMDNSService(host, "_foobar._tcp", "", "", 8000, nil, info) + + // Create the mDNS server, defer shutdown + server, _ := mdns.NewServer(&mdns.Config{Zone: service}) + defer server.Shutdown() + + +Doing a lookup for service providers is also very simple: + + // Make a channel for results and start listening + entriesCh := make(chan *mdns.ServiceEntry, 4) + go func() { + for entry := range entriesCh { + fmt.Printf("Got new entry: %v\n", entry) + } + }() + + // Start the lookup + mdns.Lookup("_foobar._tcp", entriesCh) + close(entriesCh) + diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/client.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/client.go new file mode 100644 index 00000000000..62351231aa9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/client.go @@ -0,0 +1,365 @@ +package mdns + +import ( + "fmt" + "log" + "net" + "strings" + "sync/atomic" + "time" + + "github.com/miekg/dns" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +// ServiceEntry is returned after we query for a service +type ServiceEntry struct { + Name string + Host string + AddrV4 net.IP + AddrV6 net.IP + Port int + Info string + InfoFields []string + + Addr net.IP // @Deprecated + + hasTXT bool + sent bool +} + +// complete is used to check if we have all the info we need +func (s *ServiceEntry) complete() bool { + return (s.AddrV4 != nil || s.AddrV6 != nil || s.Addr != nil) && s.Port != 0 && s.hasTXT +} + +// QueryParam is used to customize how a Lookup is performed +type QueryParam struct { + Service string // Service to lookup + Domain string // Lookup domain, default "local" + Timeout time.Duration // Lookup timeout, default 1 second + Interface *net.Interface // Multicast interface to use + Entries chan<- *ServiceEntry // Entries Channel + WantUnicastResponse bool // Unicast response desired, as per 5.4 in RFC +} + +// DefaultParams is used to return a default set of QueryParam's +func DefaultParams(service string) *QueryParam { + return &QueryParam{ + Service: service, + Domain: "local", + Timeout: time.Second, + Entries: make(chan *ServiceEntry), + WantUnicastResponse: false, // TODO(reddaly): Change this default. + } +} + +// Query looks up a given service, in a domain, waiting at most +// for a timeout before finishing the query. The results are streamed +// to a channel. Sends will not block, so clients should make sure to +// either read or buffer. +func Query(params *QueryParam) error { + // Create a new client + client, err := newClient() + if err != nil { + return err + } + defer client.Close() + + // Set the multicast interface + if params.Interface != nil { + if err := client.setInterface(params.Interface); err != nil { + return err + } + } + + // Ensure defaults are set + if params.Domain == "" { + params.Domain = "local" + } + if params.Timeout == 0 { + params.Timeout = time.Second + } + + // Run the query + return client.query(params) +} + +// Lookup is the same as Query, however it uses all the default parameters +func Lookup(service string, entries chan<- *ServiceEntry) error { + params := DefaultParams(service) + params.Entries = entries + return Query(params) +} + +// Client provides a query interface that can be used to +// search for service providers using mDNS +type client struct { + ipv4UnicastConn *net.UDPConn + ipv6UnicastConn *net.UDPConn + + ipv4MulticastConn *net.UDPConn + ipv6MulticastConn *net.UDPConn + + closed int32 + closedCh chan struct{} // TODO(reddaly): This doesn't appear to be used. +} + +// NewClient creates a new mdns Client that can be used to query +// for records +func newClient() (*client, error) { + // TODO(reddaly): At least attempt to bind to the port required in the spec. + // Create a IPv4 listener + uconn4, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IPv4zero, Port: 0}) + if err != nil { + log.Printf("[ERR] mdns: Failed to bind to udp4 port: %v", err) + } + uconn6, err := net.ListenUDP("udp6", &net.UDPAddr{IP: net.IPv6zero, Port: 0}) + if err != nil { + log.Printf("[ERR] mdns: Failed to bind to udp6 port: %v", err) + } + + if uconn4 == nil && uconn6 == nil { + return nil, fmt.Errorf("failed to bind to any unicast udp port") + } + + mconn4, err := net.ListenMulticastUDP("udp4", nil, ipv4Addr) + if err != nil { + log.Printf("[ERR] mdns: Failed to bind to udp4 port: %v", err) + } + mconn6, err := net.ListenMulticastUDP("udp6", nil, ipv6Addr) + if err != nil { + log.Printf("[ERR] mdns: Failed to bind to udp6 port: %v", err) + } + + if mconn4 == nil && mconn6 == nil { + return nil, fmt.Errorf("failed to bind to any multicast udp port") + } + + c := &client{ + ipv4MulticastConn: mconn4, + ipv6MulticastConn: mconn6, + ipv4UnicastConn: uconn4, + ipv6UnicastConn: uconn6, + closedCh: make(chan struct{}), + } + return c, nil +} + +// Close is used to cleanup the client +func (c *client) Close() error { + if !atomic.CompareAndSwapInt32(&c.closed, 0, 1) { + // something else already closed it + return nil + } + + log.Printf("[INFO] mdns: Closing client %v", *c) + close(c.closedCh) + + if c.ipv4UnicastConn != nil { + c.ipv4UnicastConn.Close() + } + if c.ipv6UnicastConn != nil { + c.ipv6UnicastConn.Close() + } + if c.ipv4MulticastConn != nil { + c.ipv4MulticastConn.Close() + } + if c.ipv6MulticastConn != nil { + c.ipv6MulticastConn.Close() + } + + return nil +} + +// setInterface is used to set the query interface, uses sytem +// default if not provided +func (c *client) setInterface(iface *net.Interface) error { + p := ipv4.NewPacketConn(c.ipv4UnicastConn) + if err := p.SetMulticastInterface(iface); err != nil { + return err + } + p2 := ipv6.NewPacketConn(c.ipv6UnicastConn) + if err := p2.SetMulticastInterface(iface); err != nil { + return err + } + p = ipv4.NewPacketConn(c.ipv4MulticastConn) + if err := p.SetMulticastInterface(iface); err != nil { + return err + } + p2 = ipv6.NewPacketConn(c.ipv6MulticastConn) + if err := p2.SetMulticastInterface(iface); err != nil { + return err + } + return nil +} + +// query is used to perform a lookup and stream results +func (c *client) query(params *QueryParam) error { + // Create the service name + serviceAddr := fmt.Sprintf("%s.%s.", trimDot(params.Service), trimDot(params.Domain)) + + // Start listening for response packets + msgCh := make(chan *dns.Msg, 32) + go c.recv(c.ipv4UnicastConn, msgCh) + go c.recv(c.ipv6UnicastConn, msgCh) + go c.recv(c.ipv4MulticastConn, msgCh) + go c.recv(c.ipv6MulticastConn, msgCh) + + // Send the query + m := new(dns.Msg) + m.SetQuestion(serviceAddr, dns.TypePTR) + // RFC 6762, section 18.12. Repurposing of Top Bit of qclass in Question + // Section + // + // In the Question Section of a Multicast DNS query, the top bit of the qclass + // field is used to indicate that unicast responses are preferred for this + // particular question. (See Section 5.4.) + if params.WantUnicastResponse { + m.Question[0].Qclass |= 1 << 15 + } + m.RecursionDesired = false + if err := c.sendQuery(m); err != nil { + return err + } + + // Map the in-progress responses + inprogress := make(map[string]*ServiceEntry) + + // Listen until we reach the timeout + finish := time.After(params.Timeout) + for { + select { + case resp := <-msgCh: + var inp *ServiceEntry + for _, answer := range append(resp.Answer, resp.Extra...) { + // TODO(reddaly): Check that response corresponds to serviceAddr? + switch rr := answer.(type) { + case *dns.PTR: + // Create new entry for this + inp = ensureName(inprogress, rr.Ptr) + + case *dns.SRV: + // Check for a target mismatch + if rr.Target != rr.Hdr.Name { + alias(inprogress, rr.Hdr.Name, rr.Target) + } + + // Get the port + inp = ensureName(inprogress, rr.Hdr.Name) + inp.Host = rr.Target + inp.Port = int(rr.Port) + + case *dns.TXT: + // Pull out the txt + inp = ensureName(inprogress, rr.Hdr.Name) + inp.Info = strings.Join(rr.Txt, "|") + inp.InfoFields = rr.Txt + inp.hasTXT = true + + case *dns.A: + // Pull out the IP + inp = ensureName(inprogress, rr.Hdr.Name) + inp.Addr = rr.A // @Deprecated + inp.AddrV4 = rr.A + + case *dns.AAAA: + // Pull out the IP + inp = ensureName(inprogress, rr.Hdr.Name) + inp.Addr = rr.AAAA // @Deprecated + inp.AddrV6 = rr.AAAA + } + } + + if inp == nil { + continue + } + + // Check if this entry is complete + if inp.complete() { + if inp.sent { + continue + } + inp.sent = true + select { + case params.Entries <- inp: + default: + } + } else { + // Fire off a node specific query + m := new(dns.Msg) + m.SetQuestion(inp.Name, dns.TypePTR) + m.RecursionDesired = false + if err := c.sendQuery(m); err != nil { + log.Printf("[ERR] mdns: Failed to query instance %s: %v", inp.Name, err) + } + } + case <-finish: + return nil + } + } +} + +// sendQuery is used to multicast a query out +func (c *client) sendQuery(q *dns.Msg) error { + buf, err := q.Pack() + if err != nil { + return err + } + if c.ipv4UnicastConn != nil { + c.ipv4UnicastConn.WriteToUDP(buf, ipv4Addr) + } + if c.ipv6UnicastConn != nil { + c.ipv6UnicastConn.WriteToUDP(buf, ipv6Addr) + } + return nil +} + +// recv is used to receive until we get a shutdown +func (c *client) recv(l *net.UDPConn, msgCh chan *dns.Msg) { + if l == nil { + return + } + buf := make([]byte, 65536) + for atomic.LoadInt32(&c.closed) == 0 { + n, err := l.Read(buf) + + if atomic.LoadInt32(&c.closed) == 1 { + return + } + + if err != nil { + log.Printf("[ERR] mdns: Failed to read packet: %v", err) + continue + } + msg := new(dns.Msg) + if err := msg.Unpack(buf[:n]); err != nil { + log.Printf("[ERR] mdns: Failed to unpack packet: %v", err) + continue + } + select { + case msgCh <- msg: + case <-c.closedCh: + return + } + } +} + +// ensureName is used to ensure the named node is in progress +func ensureName(inprogress map[string]*ServiceEntry, name string) *ServiceEntry { + if inp, ok := inprogress[name]; ok { + return inp + } + inp := &ServiceEntry{ + Name: name, + } + inprogress[name] = inp + return inp +} + +// alias is used to setup an alias between two entries +func alias(inprogress map[string]*ServiceEntry, src, dst string) { + srcEntry := ensureName(inprogress, src) + inprogress[dst] = srcEntry +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/go.mod b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/go.mod new file mode 100644 index 00000000000..dac6f0b8b78 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/go.mod @@ -0,0 +1,9 @@ +module github.com/hashicorp/mdns + +require ( + github.com/miekg/dns v1.0.14 + golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3 // indirect + golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519 + golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 // indirect + golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5 // indirect +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/go.sum b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/go.sum new file mode 100644 index 00000000000..62896aae7a1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/go.sum @@ -0,0 +1,10 @@ +github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3 h1:KYQXGkl6vs02hK7pK4eIbw0NpNPedieTSTEiJ//bwGs= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519 h1:x6rhz8Y9CjbgQkccRGmELH6K+LJj7tOoh3XWeC1yaQM= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5 h1:x6r4Jo0KNzOOzYd8lbcRsqjuqEASK6ob3auvWYM4/8U= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/server.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/server.go new file mode 100644 index 00000000000..a33668da413 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/server.go @@ -0,0 +1,288 @@ +package mdns + +import ( + "fmt" + "log" + "net" + "strings" + "sync/atomic" + + "github.com/miekg/dns" +) + +const ( + ipv4mdns = "224.0.0.251" + ipv6mdns = "ff02::fb" + mdnsPort = 5353 + forceUnicastResponses = false +) + +var ( + ipv4Addr = &net.UDPAddr{ + IP: net.ParseIP(ipv4mdns), + Port: mdnsPort, + } + ipv6Addr = &net.UDPAddr{ + IP: net.ParseIP(ipv6mdns), + Port: mdnsPort, + } +) + +// Config is used to configure the mDNS server +type Config struct { + // Zone must be provided to support responding to queries + Zone Zone + + // Iface if provided binds the multicast listener to the given + // interface. If not provided, the system default multicase interface + // is used. + Iface *net.Interface + + // LogEmptyResponses indicates the server should print an informative message + // when there is an mDNS query for which the server has no response. + LogEmptyResponses bool +} + +// mDNS server is used to listen for mDNS queries and respond if we +// have a matching local record +type Server struct { + config *Config + + ipv4List *net.UDPConn + ipv6List *net.UDPConn + + shutdown int32 + shutdownCh chan struct{} +} + +// NewServer is used to create a new mDNS server from a config +func NewServer(config *Config) (*Server, error) { + // Create the listeners + ipv4List, _ := net.ListenMulticastUDP("udp4", config.Iface, ipv4Addr) + ipv6List, _ := net.ListenMulticastUDP("udp6", config.Iface, ipv6Addr) + + // Check if we have any listener + if ipv4List == nil && ipv6List == nil { + return nil, fmt.Errorf("No multicast listeners could be started") + } + + s := &Server{ + config: config, + ipv4List: ipv4List, + ipv6List: ipv6List, + shutdownCh: make(chan struct{}), + } + + if ipv4List != nil { + go s.recv(s.ipv4List) + } + + if ipv6List != nil { + go s.recv(s.ipv6List) + } + + return s, nil +} + +// Shutdown is used to shutdown the listener +func (s *Server) Shutdown() error { + if !atomic.CompareAndSwapInt32(&s.shutdown, 0, 1) { + // something else already closed us + return nil + } + + close(s.shutdownCh) + + if s.ipv4List != nil { + s.ipv4List.Close() + } + if s.ipv6List != nil { + s.ipv6List.Close() + } + return nil +} + +// recv is a long running routine to receive packets from an interface +func (s *Server) recv(c *net.UDPConn) { + if c == nil { + return + } + buf := make([]byte, 65536) + for atomic.LoadInt32(&s.shutdown) == 0 { + n, from, err := c.ReadFrom(buf) + + if err != nil { + continue + } + if err := s.parsePacket(buf[:n], from); err != nil { + log.Printf("[ERR] mdns: Failed to handle query: %v", err) + } + } +} + +// parsePacket is used to parse an incoming packet +func (s *Server) parsePacket(packet []byte, from net.Addr) error { + var msg dns.Msg + if err := msg.Unpack(packet); err != nil { + log.Printf("[ERR] mdns: Failed to unpack packet: %v", err) + return err + } + return s.handleQuery(&msg, from) +} + +// handleQuery is used to handle an incoming query +func (s *Server) handleQuery(query *dns.Msg, from net.Addr) error { + if query.Opcode != dns.OpcodeQuery { + // "In both multicast query and multicast response messages, the OPCODE MUST + // be zero on transmission (only standard queries are currently supported + // over multicast). Multicast DNS messages received with an OPCODE other + // than zero MUST be silently ignored." Note: OpcodeQuery == 0 + return fmt.Errorf("mdns: received query with non-zero Opcode %v: %v", query.Opcode, *query) + } + if query.Rcode != 0 { + // "In both multicast query and multicast response messages, the Response + // Code MUST be zero on transmission. Multicast DNS messages received with + // non-zero Response Codes MUST be silently ignored." + return fmt.Errorf("mdns: received query with non-zero Rcode %v: %v", query.Rcode, *query) + } + + // TODO(reddaly): Handle "TC (Truncated) Bit": + // In query messages, if the TC bit is set, it means that additional + // Known-Answer records may be following shortly. A responder SHOULD + // record this fact, and wait for those additional Known-Answer records, + // before deciding whether to respond. If the TC bit is clear, it means + // that the querying host has no additional Known Answers. + if query.Truncated { + return fmt.Errorf("[ERR] mdns: support for DNS requests with high truncated bit not implemented: %v", *query) + } + + var unicastAnswer, multicastAnswer []dns.RR + + // Handle each question + for _, q := range query.Question { + mrecs, urecs := s.handleQuestion(q) + multicastAnswer = append(multicastAnswer, mrecs...) + unicastAnswer = append(unicastAnswer, urecs...) + } + + // See section 18 of RFC 6762 for rules about DNS headers. + resp := func(unicast bool) *dns.Msg { + // 18.1: ID (Query Identifier) + // 0 for multicast response, query.Id for unicast response + id := uint16(0) + if unicast { + id = query.Id + } + + var answer []dns.RR + if unicast { + answer = unicastAnswer + } else { + answer = multicastAnswer + } + if len(answer) == 0 { + return nil + } + + return &dns.Msg{ + MsgHdr: dns.MsgHdr{ + Id: id, + + // 18.2: QR (Query/Response) Bit - must be set to 1 in response. + Response: true, + + // 18.3: OPCODE - must be zero in response (OpcodeQuery == 0) + Opcode: dns.OpcodeQuery, + + // 18.4: AA (Authoritative Answer) Bit - must be set to 1 + Authoritative: true, + + // The following fields must all be set to 0: + // 18.5: TC (TRUNCATED) Bit + // 18.6: RD (Recursion Desired) Bit + // 18.7: RA (Recursion Available) Bit + // 18.8: Z (Zero) Bit + // 18.9: AD (Authentic Data) Bit + // 18.10: CD (Checking Disabled) Bit + // 18.11: RCODE (Response Code) + }, + // 18.12 pertains to questions (handled by handleQuestion) + // 18.13 pertains to resource records (handled by handleQuestion) + + // 18.14: Name Compression - responses should be compressed (though see + // caveats in the RFC), so set the Compress bit (part of the dns library + // API, not part of the DNS packet) to true. + Compress: true, + + Answer: answer, + } + } + + if s.config.LogEmptyResponses && len(multicastAnswer) == 0 && len(unicastAnswer) == 0 { + questions := make([]string, len(query.Question)) + for i, q := range query.Question { + questions[i] = q.Name + } + log.Printf("no responses for query with questions: %s", strings.Join(questions, ", ")) + } + + if mresp := resp(false); mresp != nil { + if err := s.sendResponse(mresp, from, false); err != nil { + return fmt.Errorf("mdns: error sending multicast response: %v", err) + } + } + if uresp := resp(true); uresp != nil { + if err := s.sendResponse(uresp, from, true); err != nil { + return fmt.Errorf("mdns: error sending unicast response: %v", err) + } + } + return nil +} + +// handleQuestion is used to handle an incoming question +// +// The response to a question may be transmitted over multicast, unicast, or +// both. The return values are DNS records for each transmission type. +func (s *Server) handleQuestion(q dns.Question) (multicastRecs, unicastRecs []dns.RR) { + records := s.config.Zone.Records(q) + + if len(records) == 0 { + return nil, nil + } + + // Handle unicast and multicast responses. + // TODO(reddaly): The decision about sending over unicast vs. multicast is not + // yet fully compliant with RFC 6762. For example, the unicast bit should be + // ignored if the records in question are close to TTL expiration. For now, + // we just use the unicast bit to make the decision, as per the spec: + // RFC 6762, section 18.12. Repurposing of Top Bit of qclass in Question + // Section + // + // In the Question Section of a Multicast DNS query, the top bit of the + // qclass field is used to indicate that unicast responses are preferred + // for this particular question. (See Section 5.4.) + if q.Qclass&(1<<15) != 0 || forceUnicastResponses { + return nil, records + } + return records, nil +} + +// sendResponse is used to send a response packet +func (s *Server) sendResponse(resp *dns.Msg, from net.Addr, unicast bool) error { + // TODO(reddaly): Respect the unicast argument, and allow sending responses + // over multicast. + buf, err := resp.Pack() + if err != nil { + return err + } + + // Determine the socket to send from + addr := from.(*net.UDPAddr) + if addr.IP.To4() != nil { + _, err = s.ipv4List.WriteToUDP(buf, addr) + return err + } else { + _, err = s.ipv6List.WriteToUDP(buf, addr) + return err + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/zone.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/zone.go new file mode 100644 index 00000000000..6f442c7b101 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/hashicorp/mdns/zone.go @@ -0,0 +1,307 @@ +package mdns + +import ( + "fmt" + "net" + "os" + "strings" + + "github.com/miekg/dns" +) + +const ( + // defaultTTL is the default TTL value in returned DNS records in seconds. + defaultTTL = 120 +) + +// Zone is the interface used to integrate with the server and +// to serve records dynamically +type Zone interface { + // Records returns DNS records in response to a DNS question. + Records(q dns.Question) []dns.RR +} + +// MDNSService is used to export a named service by implementing a Zone +type MDNSService struct { + Instance string // Instance name (e.g. "hostService name") + Service string // Service name (e.g. "_http._tcp.") + Domain string // If blank, assumes "local" + HostName string // Host machine DNS name (e.g. "mymachine.net.") + Port int // Service Port + IPs []net.IP // IP addresses for the service's host + TXT []string // Service TXT records + + serviceAddr string // Fully qualified service address + instanceAddr string // Fully qualified instance address + enumAddr string // _services._dns-sd._udp. +} + +// validateFQDN returns an error if the passed string is not a fully qualified +// hdomain name (more specifically, a hostname). +func validateFQDN(s string) error { + if len(s) == 0 { + return fmt.Errorf("FQDN must not be blank") + } + if s[len(s)-1] != '.' { + return fmt.Errorf("FQDN must end in period: %s", s) + } + // TODO(reddaly): Perform full validation. + + return nil +} + +// NewMDNSService returns a new instance of MDNSService. +// +// If domain, hostName, or ips is set to the zero value, then a default value +// will be inferred from the operating system. +// +// TODO(reddaly): This interface may need to change to account for "unique +// record" conflict rules of the mDNS protocol. Upon startup, the server should +// check to ensure that the instance name does not conflict with other instance +// names, and, if required, select a new name. There may also be conflicting +// hostName A/AAAA records. +func NewMDNSService(instance, service, domain, hostName string, port int, ips []net.IP, txt []string) (*MDNSService, error) { + // Sanity check inputs + if instance == "" { + return nil, fmt.Errorf("missing service instance name") + } + if service == "" { + return nil, fmt.Errorf("missing service name") + } + if port == 0 { + return nil, fmt.Errorf("missing service port") + } + + // Set default domain + if domain == "" { + domain = "local." + } + if err := validateFQDN(domain); err != nil { + return nil, fmt.Errorf("domain %q is not a fully-qualified domain name: %v", domain, err) + } + + // Get host information if no host is specified. + if hostName == "" { + var err error + hostName, err = os.Hostname() + if err != nil { + return nil, fmt.Errorf("could not determine host: %v", err) + } + hostName = fmt.Sprintf("%s.", hostName) + } + if err := validateFQDN(hostName); err != nil { + return nil, fmt.Errorf("hostName %q is not a fully-qualified domain name: %v", hostName, err) + } + + if len(ips) == 0 { + var err error + ips, err = net.LookupIP(hostName) + if err != nil { + // Try appending the host domain suffix and lookup again + // (required for Linux-based hosts) + tmpHostName := fmt.Sprintf("%s%s", hostName, domain) + + ips, err = net.LookupIP(tmpHostName) + + if err != nil { + return nil, fmt.Errorf("could not determine host IP addresses for %s", hostName) + } + } + } + for _, ip := range ips { + if ip.To4() == nil && ip.To16() == nil { + return nil, fmt.Errorf("invalid IP address in IPs list: %v", ip) + } + } + + return &MDNSService{ + Instance: instance, + Service: service, + Domain: domain, + HostName: hostName, + Port: port, + IPs: ips, + TXT: txt, + serviceAddr: fmt.Sprintf("%s.%s.", trimDot(service), trimDot(domain)), + instanceAddr: fmt.Sprintf("%s.%s.%s.", instance, trimDot(service), trimDot(domain)), + enumAddr: fmt.Sprintf("_services._dns-sd._udp.%s.", trimDot(domain)), + }, nil +} + +// trimDot is used to trim the dots from the start or end of a string +func trimDot(s string) string { + return strings.Trim(s, ".") +} + +// Records returns DNS records in response to a DNS question. +func (m *MDNSService) Records(q dns.Question) []dns.RR { + switch q.Name { + case m.enumAddr: + return m.serviceEnum(q) + case m.serviceAddr: + return m.serviceRecords(q) + case m.instanceAddr: + return m.instanceRecords(q) + case m.HostName: + if q.Qtype == dns.TypeA || q.Qtype == dns.TypeAAAA { + return m.instanceRecords(q) + } + fallthrough + default: + return nil + } +} + +func (m *MDNSService) serviceEnum(q dns.Question) []dns.RR { + switch q.Qtype { + case dns.TypeANY: + fallthrough + case dns.TypePTR: + rr := &dns.PTR{ + Hdr: dns.RR_Header{ + Name: q.Name, + Rrtype: dns.TypePTR, + Class: dns.ClassINET, + Ttl: defaultTTL, + }, + Ptr: m.serviceAddr, + } + return []dns.RR{rr} + default: + return nil + } +} + +// serviceRecords is called when the query matches the service name +func (m *MDNSService) serviceRecords(q dns.Question) []dns.RR { + switch q.Qtype { + case dns.TypeANY: + fallthrough + case dns.TypePTR: + // Build a PTR response for the service + rr := &dns.PTR{ + Hdr: dns.RR_Header{ + Name: q.Name, + Rrtype: dns.TypePTR, + Class: dns.ClassINET, + Ttl: defaultTTL, + }, + Ptr: m.instanceAddr, + } + servRec := []dns.RR{rr} + + // Get the instance records + instRecs := m.instanceRecords(dns.Question{ + Name: m.instanceAddr, + Qtype: dns.TypeANY, + }) + + // Return the service record with the instance records + return append(servRec, instRecs...) + default: + return nil + } +} + +// serviceRecords is called when the query matches the instance name +func (m *MDNSService) instanceRecords(q dns.Question) []dns.RR { + switch q.Qtype { + case dns.TypeANY: + // Get the SRV, which includes A and AAAA + recs := m.instanceRecords(dns.Question{ + Name: m.instanceAddr, + Qtype: dns.TypeSRV, + }) + + // Add the TXT record + recs = append(recs, m.instanceRecords(dns.Question{ + Name: m.instanceAddr, + Qtype: dns.TypeTXT, + })...) + return recs + + case dns.TypeA: + var rr []dns.RR + for _, ip := range m.IPs { + if ip4 := ip.To4(); ip4 != nil { + rr = append(rr, &dns.A{ + Hdr: dns.RR_Header{ + Name: m.HostName, + Rrtype: dns.TypeA, + Class: dns.ClassINET, + Ttl: defaultTTL, + }, + A: ip4, + }) + } + } + return rr + + case dns.TypeAAAA: + var rr []dns.RR + for _, ip := range m.IPs { + if ip.To4() != nil { + // TODO(reddaly): IPv4 addresses could be encoded in IPv6 format and + // putinto AAAA records, but the current logic puts ipv4-encodable + // addresses into the A records exclusively. Perhaps this should be + // configurable? + continue + } + + if ip16 := ip.To16(); ip16 != nil { + rr = append(rr, &dns.AAAA{ + Hdr: dns.RR_Header{ + Name: m.HostName, + Rrtype: dns.TypeAAAA, + Class: dns.ClassINET, + Ttl: defaultTTL, + }, + AAAA: ip16, + }) + } + } + return rr + + case dns.TypeSRV: + // Create the SRV Record + srv := &dns.SRV{ + Hdr: dns.RR_Header{ + Name: q.Name, + Rrtype: dns.TypeSRV, + Class: dns.ClassINET, + Ttl: defaultTTL, + }, + Priority: 10, + Weight: 1, + Port: uint16(m.Port), + Target: m.HostName, + } + recs := []dns.RR{srv} + + // Add the A record + recs = append(recs, m.instanceRecords(dns.Question{ + Name: m.instanceAddr, + Qtype: dns.TypeA, + })...) + + // Add the AAAA record + recs = append(recs, m.instanceRecords(dns.Question{ + Name: m.instanceAddr, + Qtype: dns.TypeAAAA, + })...) + return recs + + case dns.TypeTXT: + txt := &dns.TXT{ + Hdr: dns.RR_Header{ + Name: q.Name, + Rrtype: dns.TypeTXT, + Class: dns.ClassINET, + Ttl: defaultTTL, + }, + Txt: m.TXT, + } + return []dns.RR{txt} + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/AUTHORS b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/AUTHORS new file mode 100644 index 00000000000..1965683525a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/AUTHORS @@ -0,0 +1 @@ +Miek Gieben diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/CONTRIBUTORS b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/CONTRIBUTORS new file mode 100644 index 00000000000..5903779d81f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/CONTRIBUTORS @@ -0,0 +1,10 @@ +Alex A. Skinner +Andrew Tunnell-Jones +Ask Bjørn Hansen +Dave Cheney +Dusty Wilson +Marek Majkowski +Peter van Dijk +Omri Bahumi +Alex Sergeyev +James Hartig diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/COPYRIGHT b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/COPYRIGHT new file mode 100644 index 00000000000..35702b10e87 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/COPYRIGHT @@ -0,0 +1,9 @@ +Copyright 2009 The Go Authors. All rights reserved. Use of this source code +is governed by a BSD-style license that can be found in the LICENSE file. +Extensions of the original work are copyright (c) 2011 Miek Gieben + +Copyright 2011 Miek Gieben. All rights reserved. Use of this source code is +governed by a BSD-style license that can be found in the LICENSE file. + +Copyright 2014 CloudFlare. All rights reserved. Use of this source code is +governed by a BSD-style license that can be found in the LICENSE file. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Gopkg.lock b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Gopkg.lock new file mode 100644 index 00000000000..686632207a1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Gopkg.lock @@ -0,0 +1,57 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + branch = "master" + digest = "1:6914c49eed986dfb8dffb33516fa129c49929d4d873f41e073c83c11c372b870" + name = "golang.org/x/crypto" + packages = [ + "ed25519", + "ed25519/internal/edwards25519", + ] + pruneopts = "" + revision = "e3636079e1a4c1f337f212cc5cd2aca108f6c900" + +[[projects]] + branch = "master" + digest = "1:08e41d63f8dac84d83797368b56cf0b339e42d0224e5e56668963c28aec95685" + name = "golang.org/x/net" + packages = [ + "bpf", + "context", + "internal/iana", + "internal/socket", + "ipv4", + "ipv6", + ] + pruneopts = "" + revision = "4dfa2610cdf3b287375bbba5b8f2a14d3b01d8de" + +[[projects]] + branch = "master" + digest = "1:b2ea75de0ccb2db2ac79356407f8a4cd8f798fe15d41b381c00abf3ae8e55ed1" + name = "golang.org/x/sync" + packages = ["errgroup"] + pruneopts = "" + revision = "1d60e4601c6fd243af51cc01ddf169918a5407ca" + +[[projects]] + branch = "master" + digest = "1:149a432fabebb8221a80f77731b1cd63597197ded4f14af606ebe3a0959004ec" + name = "golang.org/x/sys" + packages = ["unix"] + pruneopts = "" + revision = "e4b3c5e9061176387e7cea65e4dc5853801f3fb7" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + input-imports = [ + "golang.org/x/crypto/ed25519", + "golang.org/x/net/ipv4", + "golang.org/x/net/ipv6", + "golang.org/x/sync/errgroup", + "golang.org/x/sys/unix", + ] + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Gopkg.toml b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Gopkg.toml new file mode 100644 index 00000000000..85e6ff31b22 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Gopkg.toml @@ -0,0 +1,38 @@ + +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + + +[[constraint]] + branch = "master" + name = "golang.org/x/crypto" + +[[constraint]] + branch = "master" + name = "golang.org/x/net" + +[[constraint]] + branch = "master" + name = "golang.org/x/sys" + +[[constraint]] + branch = "master" + name = "golang.org/x/sync" diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/LICENSE new file mode 100644 index 00000000000..5763fa7fe5d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/LICENSE @@ -0,0 +1,32 @@ +Extensions of the original work are copyright (c) 2011 Miek Gieben + +As this is fork of the official Go code the same license applies: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Makefile.fuzz b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Makefile.fuzz new file mode 100644 index 00000000000..dc158c4acee --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Makefile.fuzz @@ -0,0 +1,33 @@ +# Makefile for fuzzing +# +# Use go-fuzz and needs the tools installed. +# See https://blog.cloudflare.com/dns-parser-meet-go-fuzzer/ +# +# Installing go-fuzz: +# $ make -f Makefile.fuzz get +# Installs: +# * github.com/dvyukov/go-fuzz/go-fuzz +# * get github.com/dvyukov/go-fuzz/go-fuzz-build + +all: build + +.PHONY: build +build: + go-fuzz-build -tags fuzz github.com/miekg/dns + +.PHONY: build-newrr +build-newrr: + go-fuzz-build -func FuzzNewRR -tags fuzz github.com/miekg/dns + +.PHONY: fuzz +fuzz: + go-fuzz -bin=dns-fuzz.zip -workdir=fuzz + +.PHONY: get +get: + go get github.com/dvyukov/go-fuzz/go-fuzz + go get github.com/dvyukov/go-fuzz/go-fuzz-build + +.PHONY: clean +clean: + rm *-fuzz.zip diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Makefile.release b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Makefile.release new file mode 100644 index 00000000000..8fb748e8aae --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/Makefile.release @@ -0,0 +1,52 @@ +# Makefile for releasing. +# +# The release is controlled from version.go. The version found there is +# used to tag the git repo, we're not building any artifects so there is nothing +# to upload to github. +# +# * Up the version in version.go +# * Run: make -f Makefile.release release +# * will *commit* your change with 'Release $VERSION' +# * push to github +# + +define GO +//+build ignore + +package main + +import ( + "fmt" + + "github.com/miekg/dns" +) + +func main() { + fmt.Println(dns.Version.String()) +} +endef + +$(file > version_release.go,$(GO)) +VERSION:=$(shell go run version_release.go) +TAG="v$(VERSION)" + +all: + @echo Use the \'release\' target to start a release $(VERSION) + rm -f version_release.go + +.PHONY: release +release: commit push + @echo Released $(VERSION) + rm -f version_release.go + +.PHONY: commit +commit: + @echo Committing release $(VERSION) + git commit -am"Release $(VERSION)" + git tag $(TAG) + +.PHONY: push +push: + @echo Pushing release $(VERSION) to master + git push --tags + git push diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/README.md b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/README.md new file mode 100644 index 00000000000..7f1aaa5de42 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/README.md @@ -0,0 +1,172 @@ +[![Build Status](https://travis-ci.org/miekg/dns.svg?branch=master)](https://travis-ci.org/miekg/dns) +[![Code Coverage](https://img.shields.io/codecov/c/github/miekg/dns/master.svg)](https://codecov.io/github/miekg/dns?branch=master) +[![Go Report Card](https://goreportcard.com/badge/github.com/miekg/dns)](https://goreportcard.com/report/miekg/dns) +[![](https://godoc.org/github.com/miekg/dns?status.svg)](https://godoc.org/github.com/miekg/dns) + +# Alternative (more granular) approach to a DNS library + +> Less is more. + +Complete and usable DNS library. All widely used Resource Records are supported, including the +DNSSEC types. It follows a lean and mean philosophy. If there is stuff you should know as a DNS +programmer there isn't a convenience function for it. Server side and client side programming is +supported, i.e. you can build servers and resolvers with it. + +We try to keep the "master" branch as sane as possible and at the bleeding edge of standards, +avoiding breaking changes wherever reasonable. We support the last two versions of Go. + +# Goals + +* KISS; +* Fast; +* Small API. If it's easy to code in Go, don't make a function for it. + +# Users + +A not-so-up-to-date-list-that-may-be-actually-current: + +* https://github.com/coredns/coredns +* https://cloudflare.com +* https://github.com/abh/geodns +* http://www.statdns.com/ +* http://www.dnsinspect.com/ +* https://github.com/chuangbo/jianbing-dictionary-dns +* http://www.dns-lg.com/ +* https://github.com/fcambus/rrda +* https://github.com/kenshinx/godns +* https://github.com/skynetservices/skydns +* https://github.com/hashicorp/consul +* https://github.com/DevelopersPL/godnsagent +* https://github.com/duedil-ltd/discodns +* https://github.com/StalkR/dns-reverse-proxy +* https://github.com/tianon/rawdns +* https://mesosphere.github.io/mesos-dns/ +* https://pulse.turbobytes.com/ +* https://play.google.com/store/apps/details?id=com.turbobytes.dig +* https://github.com/fcambus/statzone +* https://github.com/benschw/dns-clb-go +* https://github.com/corny/dnscheck for http://public-dns.info/ +* https://namesmith.io +* https://github.com/miekg/unbound +* https://github.com/miekg/exdns +* https://dnslookup.org +* https://github.com/looterz/grimd +* https://github.com/phamhongviet/serf-dns +* https://github.com/mehrdadrad/mylg +* https://github.com/bamarni/dockness +* https://github.com/fffaraz/microdns +* http://kelda.io +* https://github.com/ipdcode/hades (JD.COM) +* https://github.com/StackExchange/dnscontrol/ +* https://www.dnsperf.com/ +* https://dnssectest.net/ +* https://dns.apebits.com +* https://github.com/oif/apex +* https://github.com/jedisct1/dnscrypt-proxy +* https://github.com/jedisct1/rpdns +* https://github.com/xor-gate/sshfp +* https://github.com/rs/dnstrace +* https://blitiri.com.ar/p/dnss ([github mirror](https://github.com/albertito/dnss)) +* https://github.com/semihalev/sdns + +Send pull request if you want to be listed here. + +# Features + +* UDP/TCP queries, IPv4 and IPv6; +* RFC 1035 zone file parsing ($INCLUDE, $ORIGIN, $TTL and $GENERATE (for all record types) are supported; +* Fast: + * Reply speed around ~ 80K qps (faster hardware results in more qps); + * Parsing RRs ~ 100K RR/s, that's 5M records in about 50 seconds; +* Server side programming (mimicking the net/http package); +* Client side programming; +* DNSSEC: signing, validating and key generation for DSA, RSA, ECDSA and Ed25519; +* EDNS0, NSID, Cookies; +* AXFR/IXFR; +* TSIG, SIG(0); +* DNS over TLS: optional encrypted connection between client and server; +* DNS name compression; +* Depends only on the standard library. + +Have fun! + +Miek Gieben - 2010-2012 - + +# Building + +Building is done with the `go` tool. If you have setup your GOPATH correctly, the following should +work: + + go get github.com/miekg/dns + go build github.com/miekg/dns + +## Examples + +A short "how to use the API" is at the beginning of doc.go (this also will show +when you call `godoc github.com/miekg/dns`). + +Example programs can be found in the `github.com/miekg/exdns` repository. + +## Supported RFCs + +*all of them* + +* 103{4,5} - DNS standard +* 1348 - NSAP record (removed the record) +* 1982 - Serial Arithmetic +* 1876 - LOC record +* 1995 - IXFR +* 1996 - DNS notify +* 2136 - DNS Update (dynamic updates) +* 2181 - RRset definition - there is no RRset type though, just []RR +* 2537 - RSAMD5 DNS keys +* 2065 - DNSSEC (updated in later RFCs) +* 2671 - EDNS record +* 2782 - SRV record +* 2845 - TSIG record +* 2915 - NAPTR record +* 2929 - DNS IANA Considerations +* 3110 - RSASHA1 DNS keys +* 3225 - DO bit (DNSSEC OK) +* 340{1,2,3} - NAPTR record +* 3445 - Limiting the scope of (DNS)KEY +* 3597 - Unknown RRs +* 403{3,4,5} - DNSSEC + validation functions +* 4255 - SSHFP record +* 4343 - Case insensitivity +* 4408 - SPF record +* 4509 - SHA256 Hash in DS +* 4592 - Wildcards in the DNS +* 4635 - HMAC SHA TSIG +* 4701 - DHCID +* 4892 - id.server +* 5001 - NSID +* 5155 - NSEC3 record +* 5205 - HIP record +* 5702 - SHA2 in the DNS +* 5936 - AXFR +* 5966 - TCP implementation recommendations +* 6605 - ECDSA +* 6725 - IANA Registry Update +* 6742 - ILNP DNS +* 6840 - Clarifications and Implementation Notes for DNS Security +* 6844 - CAA record +* 6891 - EDNS0 update +* 6895 - DNS IANA considerations +* 6975 - Algorithm Understanding in DNSSEC +* 7043 - EUI48/EUI64 records +* 7314 - DNS (EDNS) EXPIRE Option +* 7477 - CSYNC RR +* 7828 - edns-tcp-keepalive EDNS0 Option +* 7553 - URI record +* 7858 - DNS over TLS: Initiation and Performance Considerations +* 7871 - EDNS0 Client Subnet +* 7873 - Domain Name System (DNS) Cookies (draft-ietf-dnsop-cookies) +* 8080 - EdDSA for DNSSEC + +## Loosely based upon + +* `ldns` +* `NSD` +* `Net::DNS` +* `GRONG` diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/client.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/client.go new file mode 100644 index 00000000000..63ced2bd064 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/client.go @@ -0,0 +1,577 @@ +package dns + +// A client implementation. + +import ( + "bytes" + "context" + "crypto/tls" + "encoding/binary" + "fmt" + "io" + "io/ioutil" + "net" + "net/http" + "strings" + "time" +) + +const ( + dnsTimeout time.Duration = 2 * time.Second + tcpIdleTimeout time.Duration = 8 * time.Second + + dohMimeType = "application/dns-message" +) + +// A Conn represents a connection to a DNS server. +type Conn struct { + net.Conn // a net.Conn holding the connection + UDPSize uint16 // minimum receive buffer for UDP messages + TsigSecret map[string]string // secret(s) for Tsig map[], zonename must be in canonical form (lowercase, fqdn, see RFC 4034 Section 6.2) + tsigRequestMAC string +} + +// A Client defines parameters for a DNS client. +type Client struct { + Net string // if "tcp" or "tcp-tls" (DNS over TLS) a TCP query will be initiated, otherwise an UDP one (default is "" for UDP) + UDPSize uint16 // minimum receive buffer for UDP messages + TLSConfig *tls.Config // TLS connection configuration + Dialer *net.Dialer // a net.Dialer used to set local address, timeouts and more + // Timeout is a cumulative timeout for dial, write and read, defaults to 0 (disabled) - overrides DialTimeout, ReadTimeout, + // WriteTimeout when non-zero. Can be overridden with net.Dialer.Timeout (see Client.ExchangeWithDialer and + // Client.Dialer) or context.Context.Deadline (see the deprecated ExchangeContext) + Timeout time.Duration + DialTimeout time.Duration // net.DialTimeout, defaults to 2 seconds, or net.Dialer.Timeout if expiring earlier - overridden by Timeout when that value is non-zero + ReadTimeout time.Duration // net.Conn.SetReadTimeout value for connections, defaults to 2 seconds - overridden by Timeout when that value is non-zero + WriteTimeout time.Duration // net.Conn.SetWriteTimeout value for connections, defaults to 2 seconds - overridden by Timeout when that value is non-zero + HTTPClient *http.Client // The http.Client to use for DNS-over-HTTPS + TsigSecret map[string]string // secret(s) for Tsig map[], zonename must be in canonical form (lowercase, fqdn, see RFC 4034 Section 6.2) + SingleInflight bool // if true suppress multiple outstanding queries for the same Qname, Qtype and Qclass + group singleflight +} + +// Exchange performs a synchronous UDP query. It sends the message m to the address +// contained in a and waits for a reply. Exchange does not retry a failed query, nor +// will it fall back to TCP in case of truncation. +// See client.Exchange for more information on setting larger buffer sizes. +func Exchange(m *Msg, a string) (r *Msg, err error) { + client := Client{Net: "udp"} + r, _, err = client.Exchange(m, a) + return r, err +} + +func (c *Client) dialTimeout() time.Duration { + if c.Timeout != 0 { + return c.Timeout + } + if c.DialTimeout != 0 { + return c.DialTimeout + } + return dnsTimeout +} + +func (c *Client) readTimeout() time.Duration { + if c.ReadTimeout != 0 { + return c.ReadTimeout + } + return dnsTimeout +} + +func (c *Client) writeTimeout() time.Duration { + if c.WriteTimeout != 0 { + return c.WriteTimeout + } + return dnsTimeout +} + +// Dial connects to the address on the named network. +func (c *Client) Dial(address string) (conn *Conn, err error) { + // create a new dialer with the appropriate timeout + var d net.Dialer + if c.Dialer == nil { + d = net.Dialer{Timeout: c.getTimeoutForRequest(c.dialTimeout())} + } else { + d = *c.Dialer + } + + network := c.Net + if network == "" { + network = "udp" + } + + useTLS := strings.HasPrefix(network, "tcp") && strings.HasSuffix(network, "-tls") + + conn = new(Conn) + if useTLS { + network = strings.TrimSuffix(network, "-tls") + + conn.Conn, err = tls.DialWithDialer(&d, network, address, c.TLSConfig) + } else { + conn.Conn, err = d.Dial(network, address) + } + if err != nil { + return nil, err + } + + return conn, nil +} + +// Exchange performs a synchronous query. It sends the message m to the address +// contained in a and waits for a reply. Basic use pattern with a *dns.Client: +// +// c := new(dns.Client) +// in, rtt, err := c.Exchange(message, "127.0.0.1:53") +// +// Exchange does not retry a failed query, nor will it fall back to TCP in +// case of truncation. +// It is up to the caller to create a message that allows for larger responses to be +// returned. Specifically this means adding an EDNS0 OPT RR that will advertise a larger +// buffer, see SetEdns0. Messages without an OPT RR will fallback to the historic limit +// of 512 bytes +// To specify a local address or a timeout, the caller has to set the `Client.Dialer` +// attribute appropriately +func (c *Client) Exchange(m *Msg, address string) (r *Msg, rtt time.Duration, err error) { + if !c.SingleInflight { + if c.Net == "https" { + // TODO(tmthrgd): pipe timeouts into exchangeDOH + return c.exchangeDOH(context.TODO(), m, address) + } + + return c.exchange(m, address) + } + + t := "nop" + if t1, ok := TypeToString[m.Question[0].Qtype]; ok { + t = t1 + } + cl := "nop" + if cl1, ok := ClassToString[m.Question[0].Qclass]; ok { + cl = cl1 + } + r, rtt, err, shared := c.group.Do(m.Question[0].Name+t+cl, func() (*Msg, time.Duration, error) { + if c.Net == "https" { + // TODO(tmthrgd): pipe timeouts into exchangeDOH + return c.exchangeDOH(context.TODO(), m, address) + } + + return c.exchange(m, address) + }) + if r != nil && shared { + r = r.Copy() + } + return r, rtt, err +} + +func (c *Client) exchange(m *Msg, a string) (r *Msg, rtt time.Duration, err error) { + var co *Conn + + co, err = c.Dial(a) + + if err != nil { + return nil, 0, err + } + defer co.Close() + + opt := m.IsEdns0() + // If EDNS0 is used use that for size. + if opt != nil && opt.UDPSize() >= MinMsgSize { + co.UDPSize = opt.UDPSize() + } + // Otherwise use the client's configured UDP size. + if opt == nil && c.UDPSize >= MinMsgSize { + co.UDPSize = c.UDPSize + } + + co.TsigSecret = c.TsigSecret + t := time.Now() + // write with the appropriate write timeout + co.SetWriteDeadline(t.Add(c.getTimeoutForRequest(c.writeTimeout()))) + if err = co.WriteMsg(m); err != nil { + return nil, 0, err + } + + co.SetReadDeadline(time.Now().Add(c.getTimeoutForRequest(c.readTimeout()))) + r, err = co.ReadMsg() + if err == nil && r.Id != m.Id { + err = ErrId + } + rtt = time.Since(t) + return r, rtt, err +} + +func (c *Client) exchangeDOH(ctx context.Context, m *Msg, a string) (r *Msg, rtt time.Duration, err error) { + p, err := m.Pack() + if err != nil { + return nil, 0, err + } + + req, err := http.NewRequest(http.MethodPost, a, bytes.NewReader(p)) + if err != nil { + return nil, 0, err + } + + req.Header.Set("Content-Type", dohMimeType) + req.Header.Set("Accept", dohMimeType) + + hc := http.DefaultClient + if c.HTTPClient != nil { + hc = c.HTTPClient + } + + if ctx != context.Background() && ctx != context.TODO() { + req = req.WithContext(ctx) + } + + t := time.Now() + + resp, err := hc.Do(req) + if err != nil { + return nil, 0, err + } + defer closeHTTPBody(resp.Body) + + if resp.StatusCode != http.StatusOK { + return nil, 0, fmt.Errorf("dns: server returned HTTP %d error: %q", resp.StatusCode, resp.Status) + } + + if ct := resp.Header.Get("Content-Type"); ct != dohMimeType { + return nil, 0, fmt.Errorf("dns: unexpected Content-Type %q; expected %q", ct, dohMimeType) + } + + p, err = ioutil.ReadAll(resp.Body) + if err != nil { + return nil, 0, err + } + + rtt = time.Since(t) + + r = new(Msg) + if err := r.Unpack(p); err != nil { + return r, 0, err + } + + // TODO: TSIG? Is it even supported over DoH? + + return r, rtt, nil +} + +func closeHTTPBody(r io.ReadCloser) error { + io.Copy(ioutil.Discard, io.LimitReader(r, 8<<20)) + return r.Close() +} + +// ReadMsg reads a message from the connection co. +// If the received message contains a TSIG record the transaction signature +// is verified. This method always tries to return the message, however if an +// error is returned there are no guarantees that the returned message is a +// valid representation of the packet read. +func (co *Conn) ReadMsg() (*Msg, error) { + p, err := co.ReadMsgHeader(nil) + if err != nil { + return nil, err + } + + m := new(Msg) + if err := m.Unpack(p); err != nil { + // If an error was returned, we still want to allow the user to use + // the message, but naively they can just check err if they don't want + // to use an erroneous message + return m, err + } + if t := m.IsTsig(); t != nil { + if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { + return m, ErrSecret + } + // Need to work on the original message p, as that was used to calculate the tsig. + err = TsigVerify(p, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) + } + return m, err +} + +// ReadMsgHeader reads a DNS message, parses and populates hdr (when hdr is not nil). +// Returns message as a byte slice to be parsed with Msg.Unpack later on. +// Note that error handling on the message body is not possible as only the header is parsed. +func (co *Conn) ReadMsgHeader(hdr *Header) ([]byte, error) { + var ( + p []byte + n int + err error + ) + + switch t := co.Conn.(type) { + case *net.TCPConn, *tls.Conn: + r := t.(io.Reader) + + // First two bytes specify the length of the entire message. + l, err := tcpMsgLen(r) + if err != nil { + return nil, err + } + p = make([]byte, l) + n, err = tcpRead(r, p) + default: + if co.UDPSize > MinMsgSize { + p = make([]byte, co.UDPSize) + } else { + p = make([]byte, MinMsgSize) + } + n, err = co.Read(p) + } + + if err != nil { + return nil, err + } else if n < headerSize { + return nil, ErrShortRead + } + + p = p[:n] + if hdr != nil { + dh, _, err := unpackMsgHdr(p, 0) + if err != nil { + return nil, err + } + *hdr = dh + } + return p, err +} + +// tcpMsgLen is a helper func to read first two bytes of stream as uint16 packet length. +func tcpMsgLen(t io.Reader) (int, error) { + p := []byte{0, 0} + n, err := t.Read(p) + if err != nil { + return 0, err + } + + // As seen with my local router/switch, returns 1 byte on the above read, + // resulting a a ShortRead. Just write it out (instead of loop) and read the + // other byte. + if n == 1 { + n1, err := t.Read(p[1:]) + if err != nil { + return 0, err + } + n += n1 + } + + if n != 2 { + return 0, ErrShortRead + } + l := binary.BigEndian.Uint16(p) + if l == 0 { + return 0, ErrShortRead + } + return int(l), nil +} + +// tcpRead calls TCPConn.Read enough times to fill allocated buffer. +func tcpRead(t io.Reader, p []byte) (int, error) { + n, err := t.Read(p) + if err != nil { + return n, err + } + for n < len(p) { + j, err := t.Read(p[n:]) + if err != nil { + return n, err + } + n += j + } + return n, err +} + +// Read implements the net.Conn read method. +func (co *Conn) Read(p []byte) (n int, err error) { + if co.Conn == nil { + return 0, ErrConnEmpty + } + if len(p) < 2 { + return 0, io.ErrShortBuffer + } + switch t := co.Conn.(type) { + case *net.TCPConn, *tls.Conn: + r := t.(io.Reader) + + l, err := tcpMsgLen(r) + if err != nil { + return 0, err + } + if l > len(p) { + return int(l), io.ErrShortBuffer + } + return tcpRead(r, p[:l]) + } + // UDP connection + n, err = co.Conn.Read(p) + if err != nil { + return n, err + } + return n, err +} + +// WriteMsg sends a message through the connection co. +// If the message m contains a TSIG record the transaction +// signature is calculated. +func (co *Conn) WriteMsg(m *Msg) (err error) { + var out []byte + if t := m.IsTsig(); t != nil { + mac := "" + if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { + return ErrSecret + } + out, mac, err = TsigGenerate(m, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) + // Set for the next read, although only used in zone transfers + co.tsigRequestMAC = mac + } else { + out, err = m.Pack() + } + if err != nil { + return err + } + if _, err = co.Write(out); err != nil { + return err + } + return nil +} + +// Write implements the net.Conn Write method. +func (co *Conn) Write(p []byte) (n int, err error) { + switch t := co.Conn.(type) { + case *net.TCPConn, *tls.Conn: + w := t.(io.Writer) + + lp := len(p) + if lp < 2 { + return 0, io.ErrShortBuffer + } + if lp > MaxMsgSize { + return 0, &Error{err: "message too large"} + } + l := make([]byte, 2, lp+2) + binary.BigEndian.PutUint16(l, uint16(lp)) + p = append(l, p...) + n, err := io.Copy(w, bytes.NewReader(p)) + return int(n), err + } + n, err = co.Conn.Write(p) + return n, err +} + +// Return the appropriate timeout for a specific request +func (c *Client) getTimeoutForRequest(timeout time.Duration) time.Duration { + var requestTimeout time.Duration + if c.Timeout != 0 { + requestTimeout = c.Timeout + } else { + requestTimeout = timeout + } + // net.Dialer.Timeout has priority if smaller than the timeouts computed so + // far + if c.Dialer != nil && c.Dialer.Timeout != 0 { + if c.Dialer.Timeout < requestTimeout { + requestTimeout = c.Dialer.Timeout + } + } + return requestTimeout +} + +// Dial connects to the address on the named network. +func Dial(network, address string) (conn *Conn, err error) { + conn = new(Conn) + conn.Conn, err = net.Dial(network, address) + if err != nil { + return nil, err + } + return conn, nil +} + +// ExchangeContext performs a synchronous UDP query, like Exchange. It +// additionally obeys deadlines from the passed Context. +func ExchangeContext(ctx context.Context, m *Msg, a string) (r *Msg, err error) { + client := Client{Net: "udp"} + r, _, err = client.ExchangeContext(ctx, m, a) + // ignorint rtt to leave the original ExchangeContext API unchanged, but + // this function will go away + return r, err +} + +// ExchangeConn performs a synchronous query. It sends the message m via the connection +// c and waits for a reply. The connection c is not closed by ExchangeConn. +// This function is going away, but can easily be mimicked: +// +// co := &dns.Conn{Conn: c} // c is your net.Conn +// co.WriteMsg(m) +// in, _ := co.ReadMsg() +// co.Close() +// +func ExchangeConn(c net.Conn, m *Msg) (r *Msg, err error) { + println("dns: ExchangeConn: this function is deprecated") + co := new(Conn) + co.Conn = c + if err = co.WriteMsg(m); err != nil { + return nil, err + } + r, err = co.ReadMsg() + if err == nil && r.Id != m.Id { + err = ErrId + } + return r, err +} + +// DialTimeout acts like Dial but takes a timeout. +func DialTimeout(network, address string, timeout time.Duration) (conn *Conn, err error) { + client := Client{Net: network, Dialer: &net.Dialer{Timeout: timeout}} + conn, err = client.Dial(address) + if err != nil { + return nil, err + } + return conn, nil +} + +// DialWithTLS connects to the address on the named network with TLS. +func DialWithTLS(network, address string, tlsConfig *tls.Config) (conn *Conn, err error) { + if !strings.HasSuffix(network, "-tls") { + network += "-tls" + } + client := Client{Net: network, TLSConfig: tlsConfig} + conn, err = client.Dial(address) + + if err != nil { + return nil, err + } + return conn, nil +} + +// DialTimeoutWithTLS acts like DialWithTLS but takes a timeout. +func DialTimeoutWithTLS(network, address string, tlsConfig *tls.Config, timeout time.Duration) (conn *Conn, err error) { + if !strings.HasSuffix(network, "-tls") { + network += "-tls" + } + client := Client{Net: network, Dialer: &net.Dialer{Timeout: timeout}, TLSConfig: tlsConfig} + conn, err = client.Dial(address) + if err != nil { + return nil, err + } + return conn, nil +} + +// ExchangeContext acts like Exchange, but honors the deadline on the provided +// context, if present. If there is both a context deadline and a configured +// timeout on the client, the earliest of the two takes effect. +func (c *Client) ExchangeContext(ctx context.Context, m *Msg, a string) (r *Msg, rtt time.Duration, err error) { + if !c.SingleInflight && c.Net == "https" { + return c.exchangeDOH(ctx, m, a) + } + + var timeout time.Duration + if deadline, ok := ctx.Deadline(); !ok { + timeout = 0 + } else { + timeout = time.Until(deadline) + } + // not passing the context to the underlying calls, as the API does not support + // context. For timeouts you should set up Client.Dialer and call Client.Exchange. + // TODO(tmthrgd): this is a race condition + c.Dialer = &net.Dialer{Timeout: timeout} + return c.Exchange(m, a) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/clientconfig.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/clientconfig.go new file mode 100644 index 00000000000..f13cfa30cb5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/clientconfig.go @@ -0,0 +1,139 @@ +package dns + +import ( + "bufio" + "io" + "os" + "strconv" + "strings" +) + +// ClientConfig wraps the contents of the /etc/resolv.conf file. +type ClientConfig struct { + Servers []string // servers to use + Search []string // suffixes to append to local name + Port string // what port to use + Ndots int // number of dots in name to trigger absolute lookup + Timeout int // seconds before giving up on packet + Attempts int // lost packets before giving up on server, not used in the package dns +} + +// ClientConfigFromFile parses a resolv.conf(5) like file and returns +// a *ClientConfig. +func ClientConfigFromFile(resolvconf string) (*ClientConfig, error) { + file, err := os.Open(resolvconf) + if err != nil { + return nil, err + } + defer file.Close() + return ClientConfigFromReader(file) +} + +// ClientConfigFromReader works like ClientConfigFromFile but takes an io.Reader as argument +func ClientConfigFromReader(resolvconf io.Reader) (*ClientConfig, error) { + c := new(ClientConfig) + scanner := bufio.NewScanner(resolvconf) + c.Servers = make([]string, 0) + c.Search = make([]string, 0) + c.Port = "53" + c.Ndots = 1 + c.Timeout = 5 + c.Attempts = 2 + + for scanner.Scan() { + if err := scanner.Err(); err != nil { + return nil, err + } + line := scanner.Text() + f := strings.Fields(line) + if len(f) < 1 { + continue + } + switch f[0] { + case "nameserver": // add one name server + if len(f) > 1 { + // One more check: make sure server name is + // just an IP address. Otherwise we need DNS + // to look it up. + name := f[1] + c.Servers = append(c.Servers, name) + } + + case "domain": // set search path to just this domain + if len(f) > 1 { + c.Search = make([]string, 1) + c.Search[0] = f[1] + } else { + c.Search = make([]string, 0) + } + + case "search": // set search path to given servers + c.Search = make([]string, len(f)-1) + for i := 0; i < len(c.Search); i++ { + c.Search[i] = f[i+1] + } + + case "options": // magic options + for i := 1; i < len(f); i++ { + s := f[i] + switch { + case len(s) >= 6 && s[:6] == "ndots:": + n, _ := strconv.Atoi(s[6:]) + if n < 0 { + n = 0 + } else if n > 15 { + n = 15 + } + c.Ndots = n + case len(s) >= 8 && s[:8] == "timeout:": + n, _ := strconv.Atoi(s[8:]) + if n < 1 { + n = 1 + } + c.Timeout = n + case len(s) >= 9 && s[:9] == "attempts:": + n, _ := strconv.Atoi(s[9:]) + if n < 1 { + n = 1 + } + c.Attempts = n + case s == "rotate": + /* not imp */ + } + } + } + } + return c, nil +} + +// NameList returns all of the names that should be queried based on the +// config. It is based off of go's net/dns name building, but it does not +// check the length of the resulting names. +func (c *ClientConfig) NameList(name string) []string { + // if this domain is already fully qualified, no append needed. + if IsFqdn(name) { + return []string{name} + } + + // Check to see if the name has more labels than Ndots. Do this before making + // the domain fully qualified. + hasNdots := CountLabel(name) > c.Ndots + // Make the domain fully qualified. + name = Fqdn(name) + + // Make a list of names based off search. + names := []string{} + + // If name has enough dots, try that first. + if hasNdots { + names = append(names, name) + } + for _, s := range c.Search { + names = append(names, Fqdn(name+s)) + } + // If we didn't have enough dots, try after suffixes. + if !hasNdots { + names = append(names, name) + } + return names +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/compress_generate.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/compress_generate.go new file mode 100644 index 00000000000..9a136c414ad --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/compress_generate.go @@ -0,0 +1,198 @@ +//+build ignore + +// compression_generate.go is meant to run with go generate. It will use +// go/{importer,types} to track down all the RR struct types. Then for each type +// it will look to see if there are (compressible) names, if so it will add that +// type to compressionLenHelperType and comressionLenSearchType which "fake" the +// compression so that Len() is fast. +package main + +import ( + "bytes" + "fmt" + "go/format" + "go/importer" + "go/types" + "log" + "os" +) + +var packageHdr = ` +// Code generated by "go run compress_generate.go"; DO NOT EDIT. + +package dns + +` + +// getTypeStruct will take a type and the package scope, and return the +// (innermost) struct if the type is considered a RR type (currently defined as +// those structs beginning with a RR_Header, could be redefined as implementing +// the RR interface). The bool return value indicates if embedded structs were +// resolved. +func getTypeStruct(t types.Type, scope *types.Scope) (*types.Struct, bool) { + st, ok := t.Underlying().(*types.Struct) + if !ok { + return nil, false + } + if st.Field(0).Type() == scope.Lookup("RR_Header").Type() { + return st, false + } + if st.Field(0).Anonymous() { + st, _ := getTypeStruct(st.Field(0).Type(), scope) + return st, true + } + return nil, false +} + +func main() { + // Import and type-check the package + pkg, err := importer.Default().Import("github.com/miekg/dns") + fatalIfErr(err) + scope := pkg.Scope() + + var domainTypes []string // Types that have a domain name in them (either compressible or not). + var cdomainTypes []string // Types that have a compressible domain name in them (subset of domainType) +Names: + for _, name := range scope.Names() { + o := scope.Lookup(name) + if o == nil || !o.Exported() { + continue + } + st, _ := getTypeStruct(o.Type(), scope) + if st == nil { + continue + } + if name == "PrivateRR" { + continue + } + + if scope.Lookup("Type"+o.Name()) == nil && o.Name() != "RFC3597" { + log.Fatalf("Constant Type%s does not exist.", o.Name()) + } + + for i := 1; i < st.NumFields(); i++ { + if _, ok := st.Field(i).Type().(*types.Slice); ok { + if st.Tag(i) == `dns:"domain-name"` { + domainTypes = append(domainTypes, o.Name()) + continue Names + } + if st.Tag(i) == `dns:"cdomain-name"` { + cdomainTypes = append(cdomainTypes, o.Name()) + domainTypes = append(domainTypes, o.Name()) + continue Names + } + continue + } + + switch { + case st.Tag(i) == `dns:"domain-name"`: + domainTypes = append(domainTypes, o.Name()) + continue Names + case st.Tag(i) == `dns:"cdomain-name"`: + cdomainTypes = append(cdomainTypes, o.Name()) + domainTypes = append(domainTypes, o.Name()) + continue Names + } + } + } + + b := &bytes.Buffer{} + b.WriteString(packageHdr) + + // compressionLenHelperType - all types that have domain-name/cdomain-name can be used for compressing names + + fmt.Fprint(b, "func compressionLenHelperType(c map[string]int, r RR, initLen int) int {\n") + fmt.Fprint(b, "currentLen := initLen\n") + fmt.Fprint(b, "switch x := r.(type) {\n") + for _, name := range domainTypes { + o := scope.Lookup(name) + st, _ := getTypeStruct(o.Type(), scope) + + fmt.Fprintf(b, "case *%s:\n", name) + for i := 1; i < st.NumFields(); i++ { + out := func(s string) { + fmt.Fprintf(b, "currentLen -= len(x.%s) + 1\n", st.Field(i).Name()) + fmt.Fprintf(b, "currentLen += compressionLenHelper(c, x.%s, currentLen)\n", st.Field(i).Name()) + } + + if _, ok := st.Field(i).Type().(*types.Slice); ok { + switch st.Tag(i) { + case `dns:"domain-name"`: + fallthrough + case `dns:"cdomain-name"`: + // For HIP we need to slice over the elements in this slice. + fmt.Fprintf(b, `for i := range x.%s { + currentLen -= len(x.%s[i]) + 1 +} +`, st.Field(i).Name(), st.Field(i).Name()) + fmt.Fprintf(b, `for i := range x.%s { + currentLen += compressionLenHelper(c, x.%s[i], currentLen) +} +`, st.Field(i).Name(), st.Field(i).Name()) + } + continue + } + + switch { + case st.Tag(i) == `dns:"cdomain-name"`: + fallthrough + case st.Tag(i) == `dns:"domain-name"`: + out(st.Field(i).Name()) + } + } + } + fmt.Fprintln(b, "}\nreturn currentLen - initLen\n}\n\n") + + // compressionLenSearchType - search cdomain-tags types for compressible names. + + fmt.Fprint(b, "func compressionLenSearchType(c map[string]int, r RR) (int, bool, int) {\n") + fmt.Fprint(b, "switch x := r.(type) {\n") + for _, name := range cdomainTypes { + o := scope.Lookup(name) + st, _ := getTypeStruct(o.Type(), scope) + + fmt.Fprintf(b, "case *%s:\n", name) + j := 1 + for i := 1; i < st.NumFields(); i++ { + out := func(s string, j int) { + fmt.Fprintf(b, "k%d, ok%d, sz%d := compressionLenSearch(c, x.%s)\n", j, j, j, st.Field(i).Name()) + } + + // There are no slice types with names that can be compressed. + + switch { + case st.Tag(i) == `dns:"cdomain-name"`: + out(st.Field(i).Name(), j) + j++ + } + } + k := "k1" + ok := "ok1" + sz := "sz1" + for i := 2; i < j; i++ { + k += fmt.Sprintf(" + k%d", i) + ok += fmt.Sprintf(" && ok%d", i) + sz += fmt.Sprintf(" + sz%d", i) + } + fmt.Fprintf(b, "return %s, %s, %s\n", k, ok, sz) + } + fmt.Fprintln(b, "}\nreturn 0, false, 0\n}\n\n") + + // gofmt + res, err := format.Source(b.Bytes()) + if err != nil { + b.WriteTo(os.Stderr) + log.Fatal(err) + } + + f, err := os.Create("zcompress.go") + fatalIfErr(err) + defer f.Close() + f.Write(res) +} + +func fatalIfErr(err error) { + if err != nil { + log.Fatal(err) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dane.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dane.go new file mode 100644 index 00000000000..8c4a14ef190 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dane.go @@ -0,0 +1,43 @@ +package dns + +import ( + "crypto/sha256" + "crypto/sha512" + "crypto/x509" + "encoding/hex" + "errors" +) + +// CertificateToDANE converts a certificate to a hex string as used in the TLSA or SMIMEA records. +func CertificateToDANE(selector, matchingType uint8, cert *x509.Certificate) (string, error) { + switch matchingType { + case 0: + switch selector { + case 0: + return hex.EncodeToString(cert.Raw), nil + case 1: + return hex.EncodeToString(cert.RawSubjectPublicKeyInfo), nil + } + case 1: + h := sha256.New() + switch selector { + case 0: + h.Write(cert.Raw) + return hex.EncodeToString(h.Sum(nil)), nil + case 1: + h.Write(cert.RawSubjectPublicKeyInfo) + return hex.EncodeToString(h.Sum(nil)), nil + } + case 2: + h := sha512.New() + switch selector { + case 0: + h.Write(cert.Raw) + return hex.EncodeToString(h.Sum(nil)), nil + case 1: + h.Write(cert.RawSubjectPublicKeyInfo) + return hex.EncodeToString(h.Sum(nil)), nil + } + } + return "", errors.New("dns: bad MatchingType or Selector") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/defaults.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/defaults.go new file mode 100644 index 00000000000..14e18b0b38f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/defaults.go @@ -0,0 +1,288 @@ +package dns + +import ( + "errors" + "net" + "strconv" +) + +const hexDigit = "0123456789abcdef" + +// Everything is assumed in ClassINET. + +// SetReply creates a reply message from a request message. +func (dns *Msg) SetReply(request *Msg) *Msg { + dns.Id = request.Id + dns.Response = true + dns.Opcode = request.Opcode + if dns.Opcode == OpcodeQuery { + dns.RecursionDesired = request.RecursionDesired // Copy rd bit + dns.CheckingDisabled = request.CheckingDisabled // Copy cd bit + } + dns.Rcode = RcodeSuccess + if len(request.Question) > 0 { + dns.Question = make([]Question, 1) + dns.Question[0] = request.Question[0] + } + return dns +} + +// SetQuestion creates a question message, it sets the Question +// section, generates an Id and sets the RecursionDesired (RD) +// bit to true. +func (dns *Msg) SetQuestion(z string, t uint16) *Msg { + dns.Id = Id() + dns.RecursionDesired = true + dns.Question = make([]Question, 1) + dns.Question[0] = Question{z, t, ClassINET} + return dns +} + +// SetNotify creates a notify message, it sets the Question +// section, generates an Id and sets the Authoritative (AA) +// bit to true. +func (dns *Msg) SetNotify(z string) *Msg { + dns.Opcode = OpcodeNotify + dns.Authoritative = true + dns.Id = Id() + dns.Question = make([]Question, 1) + dns.Question[0] = Question{z, TypeSOA, ClassINET} + return dns +} + +// SetRcode creates an error message suitable for the request. +func (dns *Msg) SetRcode(request *Msg, rcode int) *Msg { + dns.SetReply(request) + dns.Rcode = rcode + return dns +} + +// SetRcodeFormatError creates a message with FormError set. +func (dns *Msg) SetRcodeFormatError(request *Msg) *Msg { + dns.Rcode = RcodeFormatError + dns.Opcode = OpcodeQuery + dns.Response = true + dns.Authoritative = false + dns.Id = request.Id + return dns +} + +// SetUpdate makes the message a dynamic update message. It +// sets the ZONE section to: z, TypeSOA, ClassINET. +func (dns *Msg) SetUpdate(z string) *Msg { + dns.Id = Id() + dns.Response = false + dns.Opcode = OpcodeUpdate + dns.Compress = false // BIND9 cannot handle compression + dns.Question = make([]Question, 1) + dns.Question[0] = Question{z, TypeSOA, ClassINET} + return dns +} + +// SetIxfr creates message for requesting an IXFR. +func (dns *Msg) SetIxfr(z string, serial uint32, ns, mbox string) *Msg { + dns.Id = Id() + dns.Question = make([]Question, 1) + dns.Ns = make([]RR, 1) + s := new(SOA) + s.Hdr = RR_Header{z, TypeSOA, ClassINET, defaultTtl, 0} + s.Serial = serial + s.Ns = ns + s.Mbox = mbox + dns.Question[0] = Question{z, TypeIXFR, ClassINET} + dns.Ns[0] = s + return dns +} + +// SetAxfr creates message for requesting an AXFR. +func (dns *Msg) SetAxfr(z string) *Msg { + dns.Id = Id() + dns.Question = make([]Question, 1) + dns.Question[0] = Question{z, TypeAXFR, ClassINET} + return dns +} + +// SetTsig appends a TSIG RR to the message. +// This is only a skeleton TSIG RR that is added as the last RR in the +// additional section. The Tsig is calculated when the message is being send. +func (dns *Msg) SetTsig(z, algo string, fudge uint16, timesigned int64) *Msg { + t := new(TSIG) + t.Hdr = RR_Header{z, TypeTSIG, ClassANY, 0, 0} + t.Algorithm = algo + t.Fudge = fudge + t.TimeSigned = uint64(timesigned) + t.OrigId = dns.Id + dns.Extra = append(dns.Extra, t) + return dns +} + +// SetEdns0 appends a EDNS0 OPT RR to the message. +// TSIG should always the last RR in a message. +func (dns *Msg) SetEdns0(udpsize uint16, do bool) *Msg { + e := new(OPT) + e.Hdr.Name = "." + e.Hdr.Rrtype = TypeOPT + e.SetUDPSize(udpsize) + if do { + e.SetDo() + } + dns.Extra = append(dns.Extra, e) + return dns +} + +// IsTsig checks if the message has a TSIG record as the last record +// in the additional section. It returns the TSIG record found or nil. +func (dns *Msg) IsTsig() *TSIG { + if len(dns.Extra) > 0 { + if dns.Extra[len(dns.Extra)-1].Header().Rrtype == TypeTSIG { + return dns.Extra[len(dns.Extra)-1].(*TSIG) + } + } + return nil +} + +// IsEdns0 checks if the message has a EDNS0 (OPT) record, any EDNS0 +// record in the additional section will do. It returns the OPT record +// found or nil. +func (dns *Msg) IsEdns0() *OPT { + // EDNS0 is at the end of the additional section, start there. + // We might want to change this to *only* look at the last two + // records. So we see TSIG and/or OPT - this a slightly bigger + // change though. + for i := len(dns.Extra) - 1; i >= 0; i-- { + if dns.Extra[i].Header().Rrtype == TypeOPT { + return dns.Extra[i].(*OPT) + } + } + return nil +} + +// IsDomainName checks if s is a valid domain name, it returns the number of +// labels and true, when a domain name is valid. Note that non fully qualified +// domain name is considered valid, in this case the last label is counted in +// the number of labels. When false is returned the number of labels is not +// defined. Also note that this function is extremely liberal; almost any +// string is a valid domain name as the DNS is 8 bit protocol. It checks if each +// label fits in 63 characters, but there is no length check for the entire +// string s. I.e. a domain name longer than 255 characters is considered valid. +func IsDomainName(s string) (labels int, ok bool) { + _, labels, err := packDomainName(s, nil, 0, nil, false) + return labels, err == nil +} + +// IsSubDomain checks if child is indeed a child of the parent. If child and parent +// are the same domain true is returned as well. +func IsSubDomain(parent, child string) bool { + // Entire child is contained in parent + return CompareDomainName(parent, child) == CountLabel(parent) +} + +// IsMsg sanity checks buf and returns an error if it isn't a valid DNS packet. +// The checking is performed on the binary payload. +func IsMsg(buf []byte) error { + // Header + if len(buf) < 12 { + return errors.New("dns: bad message header") + } + // Header: Opcode + // TODO(miek): more checks here, e.g. check all header bits. + return nil +} + +// IsFqdn checks if a domain name is fully qualified. +func IsFqdn(s string) bool { + l := len(s) + if l == 0 { + return false + } + return s[l-1] == '.' +} + +// IsRRset checks if a set of RRs is a valid RRset as defined by RFC 2181. +// This means the RRs need to have the same type, name, and class. Returns true +// if the RR set is valid, otherwise false. +func IsRRset(rrset []RR) bool { + if len(rrset) == 0 { + return false + } + if len(rrset) == 1 { + return true + } + rrHeader := rrset[0].Header() + rrType := rrHeader.Rrtype + rrClass := rrHeader.Class + rrName := rrHeader.Name + + for _, rr := range rrset[1:] { + curRRHeader := rr.Header() + if curRRHeader.Rrtype != rrType || curRRHeader.Class != rrClass || curRRHeader.Name != rrName { + // Mismatch between the records, so this is not a valid rrset for + //signing/verifying + return false + } + } + + return true +} + +// Fqdn return the fully qualified domain name from s. +// If s is already fully qualified, it behaves as the identity function. +func Fqdn(s string) string { + if IsFqdn(s) { + return s + } + return s + "." +} + +// Copied from the official Go code. + +// ReverseAddr returns the in-addr.arpa. or ip6.arpa. hostname of the IP +// address suitable for reverse DNS (PTR) record lookups or an error if it fails +// to parse the IP address. +func ReverseAddr(addr string) (arpa string, err error) { + ip := net.ParseIP(addr) + if ip == nil { + return "", &Error{err: "unrecognized address: " + addr} + } + if ip.To4() != nil { + return strconv.Itoa(int(ip[15])) + "." + strconv.Itoa(int(ip[14])) + "." + strconv.Itoa(int(ip[13])) + "." + + strconv.Itoa(int(ip[12])) + ".in-addr.arpa.", nil + } + // Must be IPv6 + buf := make([]byte, 0, len(ip)*4+len("ip6.arpa.")) + // Add it, in reverse, to the buffer + for i := len(ip) - 1; i >= 0; i-- { + v := ip[i] + buf = append(buf, hexDigit[v&0xF]) + buf = append(buf, '.') + buf = append(buf, hexDigit[v>>4]) + buf = append(buf, '.') + } + // Append "ip6.arpa." and return (buf already has the final .) + buf = append(buf, "ip6.arpa."...) + return string(buf), nil +} + +// String returns the string representation for the type t. +func (t Type) String() string { + if t1, ok := TypeToString[uint16(t)]; ok { + return t1 + } + return "TYPE" + strconv.Itoa(int(t)) +} + +// String returns the string representation for the class c. +func (c Class) String() string { + if s, ok := ClassToString[uint16(c)]; ok { + // Only emit mnemonics when they are unambiguous, specically ANY is in both. + if _, ok := StringToType[s]; !ok { + return s + } + } + return "CLASS" + strconv.Itoa(int(c)) +} + +// String returns the string representation for the name n. +func (n Name) String() string { + return sprintName(string(n)) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dns.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dns.go new file mode 100644 index 00000000000..e7557f51a81 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dns.go @@ -0,0 +1,97 @@ +package dns + +import "strconv" + +const ( + year68 = 1 << 31 // For RFC1982 (Serial Arithmetic) calculations in 32 bits. + defaultTtl = 3600 // Default internal TTL. + + // DefaultMsgSize is the standard default for messages larger than 512 bytes. + DefaultMsgSize = 4096 + // MinMsgSize is the minimal size of a DNS packet. + MinMsgSize = 512 + // MaxMsgSize is the largest possible DNS packet. + MaxMsgSize = 65535 +) + +// Error represents a DNS error. +type Error struct{ err string } + +func (e *Error) Error() string { + if e == nil { + return "dns: " + } + return "dns: " + e.err +} + +// An RR represents a resource record. +type RR interface { + // Header returns the header of an resource record. The header contains + // everything up to the rdata. + Header() *RR_Header + // String returns the text representation of the resource record. + String() string + + // copy returns a copy of the RR + copy() RR + // len returns the length (in octets) of the uncompressed RR in wire format. + len() int + // pack packs an RR into wire format. + pack([]byte, int, map[string]int, bool) (int, error) +} + +// RR_Header is the header all DNS resource records share. +type RR_Header struct { + Name string `dns:"cdomain-name"` + Rrtype uint16 + Class uint16 + Ttl uint32 + Rdlength uint16 // Length of data after header. +} + +// Header returns itself. This is here to make RR_Header implements the RR interface. +func (h *RR_Header) Header() *RR_Header { return h } + +// Just to implement the RR interface. +func (h *RR_Header) copy() RR { return nil } + +func (h *RR_Header) String() string { + var s string + + if h.Rrtype == TypeOPT { + s = ";" + // and maybe other things + } + + s += sprintName(h.Name) + "\t" + s += strconv.FormatInt(int64(h.Ttl), 10) + "\t" + s += Class(h.Class).String() + "\t" + s += Type(h.Rrtype).String() + "\t" + return s +} + +func (h *RR_Header) len() int { + l := len(h.Name) + 1 + l += 10 // rrtype(2) + class(2) + ttl(4) + rdlength(2) + return l +} + +// ToRFC3597 converts a known RR to the unknown RR representation from RFC 3597. +func (rr *RFC3597) ToRFC3597(r RR) error { + buf := make([]byte, r.len()*2) + off, err := PackRR(r, buf, 0, nil, false) + if err != nil { + return err + } + buf = buf[:off] + if int(r.Header().Rdlength) > off { + return ErrBuf + } + + rfc3597, _, err := unpackRFC3597(*r.Header(), buf, off-int(r.Header().Rdlength)) + if err != nil { + return err + } + *rr = *rfc3597.(*RFC3597) + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec.go new file mode 100644 index 00000000000..26b512e7da5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec.go @@ -0,0 +1,801 @@ +package dns + +import ( + "bytes" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + _ "crypto/md5" + "crypto/rand" + "crypto/rsa" + _ "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" + "encoding/asn1" + "encoding/binary" + "encoding/hex" + "math/big" + "sort" + "strings" + "time" + + "golang.org/x/crypto/ed25519" +) + +// DNSSEC encryption algorithm codes. +const ( + _ uint8 = iota + RSAMD5 + DH + DSA + _ // Skip 4, RFC 6725, section 2.1 + RSASHA1 + DSANSEC3SHA1 + RSASHA1NSEC3SHA1 + RSASHA256 + _ // Skip 9, RFC 6725, section 2.1 + RSASHA512 + _ // Skip 11, RFC 6725, section 2.1 + ECCGOST + ECDSAP256SHA256 + ECDSAP384SHA384 + ED25519 + ED448 + INDIRECT uint8 = 252 + PRIVATEDNS uint8 = 253 // Private (experimental keys) + PRIVATEOID uint8 = 254 +) + +// AlgorithmToString is a map of algorithm IDs to algorithm names. +var AlgorithmToString = map[uint8]string{ + RSAMD5: "RSAMD5", + DH: "DH", + DSA: "DSA", + RSASHA1: "RSASHA1", + DSANSEC3SHA1: "DSA-NSEC3-SHA1", + RSASHA1NSEC3SHA1: "RSASHA1-NSEC3-SHA1", + RSASHA256: "RSASHA256", + RSASHA512: "RSASHA512", + ECCGOST: "ECC-GOST", + ECDSAP256SHA256: "ECDSAP256SHA256", + ECDSAP384SHA384: "ECDSAP384SHA384", + ED25519: "ED25519", + ED448: "ED448", + INDIRECT: "INDIRECT", + PRIVATEDNS: "PRIVATEDNS", + PRIVATEOID: "PRIVATEOID", +} + +// StringToAlgorithm is the reverse of AlgorithmToString. +var StringToAlgorithm = reverseInt8(AlgorithmToString) + +// AlgorithmToHash is a map of algorithm crypto hash IDs to crypto.Hash's. +var AlgorithmToHash = map[uint8]crypto.Hash{ + RSAMD5: crypto.MD5, // Deprecated in RFC 6725 + DSA: crypto.SHA1, + RSASHA1: crypto.SHA1, + RSASHA1NSEC3SHA1: crypto.SHA1, + RSASHA256: crypto.SHA256, + ECDSAP256SHA256: crypto.SHA256, + ECDSAP384SHA384: crypto.SHA384, + RSASHA512: crypto.SHA512, + ED25519: crypto.Hash(0), +} + +// DNSSEC hashing algorithm codes. +const ( + _ uint8 = iota + SHA1 // RFC 4034 + SHA256 // RFC 4509 + GOST94 // RFC 5933 + SHA384 // Experimental + SHA512 // Experimental +) + +// HashToString is a map of hash IDs to names. +var HashToString = map[uint8]string{ + SHA1: "SHA1", + SHA256: "SHA256", + GOST94: "GOST94", + SHA384: "SHA384", + SHA512: "SHA512", +} + +// StringToHash is a map of names to hash IDs. +var StringToHash = reverseInt8(HashToString) + +// DNSKEY flag values. +const ( + SEP = 1 + REVOKE = 1 << 7 + ZONE = 1 << 8 +) + +// The RRSIG needs to be converted to wireformat with some of the rdata (the signature) missing. +type rrsigWireFmt struct { + TypeCovered uint16 + Algorithm uint8 + Labels uint8 + OrigTtl uint32 + Expiration uint32 + Inception uint32 + KeyTag uint16 + SignerName string `dns:"domain-name"` + /* No Signature */ +} + +// Used for converting DNSKEY's rdata to wirefmt. +type dnskeyWireFmt struct { + Flags uint16 + Protocol uint8 + Algorithm uint8 + PublicKey string `dns:"base64"` + /* Nothing is left out */ +} + +func divRoundUp(a, b int) int { + return (a + b - 1) / b +} + +// KeyTag calculates the keytag (or key-id) of the DNSKEY. +func (k *DNSKEY) KeyTag() uint16 { + if k == nil { + return 0 + } + var keytag int + switch k.Algorithm { + case RSAMD5: + // Look at the bottom two bytes of the modules, which the last + // item in the pubkey. We could do this faster by looking directly + // at the base64 values. But I'm lazy. + modulus, _ := fromBase64([]byte(k.PublicKey)) + if len(modulus) > 1 { + x := binary.BigEndian.Uint16(modulus[len(modulus)-2:]) + keytag = int(x) + } + default: + keywire := new(dnskeyWireFmt) + keywire.Flags = k.Flags + keywire.Protocol = k.Protocol + keywire.Algorithm = k.Algorithm + keywire.PublicKey = k.PublicKey + wire := make([]byte, DefaultMsgSize) + n, err := packKeyWire(keywire, wire) + if err != nil { + return 0 + } + wire = wire[:n] + for i, v := range wire { + if i&1 != 0 { + keytag += int(v) // must be larger than uint32 + } else { + keytag += int(v) << 8 + } + } + keytag += keytag >> 16 & 0xFFFF + keytag &= 0xFFFF + } + return uint16(keytag) +} + +// ToDS converts a DNSKEY record to a DS record. +func (k *DNSKEY) ToDS(h uint8) *DS { + if k == nil { + return nil + } + ds := new(DS) + ds.Hdr.Name = k.Hdr.Name + ds.Hdr.Class = k.Hdr.Class + ds.Hdr.Rrtype = TypeDS + ds.Hdr.Ttl = k.Hdr.Ttl + ds.Algorithm = k.Algorithm + ds.DigestType = h + ds.KeyTag = k.KeyTag() + + keywire := new(dnskeyWireFmt) + keywire.Flags = k.Flags + keywire.Protocol = k.Protocol + keywire.Algorithm = k.Algorithm + keywire.PublicKey = k.PublicKey + wire := make([]byte, DefaultMsgSize) + n, err := packKeyWire(keywire, wire) + if err != nil { + return nil + } + wire = wire[:n] + + owner := make([]byte, 255) + off, err1 := PackDomainName(strings.ToLower(k.Hdr.Name), owner, 0, nil, false) + if err1 != nil { + return nil + } + owner = owner[:off] + // RFC4034: + // digest = digest_algorithm( DNSKEY owner name | DNSKEY RDATA); + // "|" denotes concatenation + // DNSKEY RDATA = Flags | Protocol | Algorithm | Public Key. + + var hash crypto.Hash + switch h { + case SHA1: + hash = crypto.SHA1 + case SHA256: + hash = crypto.SHA256 + case SHA384: + hash = crypto.SHA384 + case SHA512: + hash = crypto.SHA512 + default: + return nil + } + + s := hash.New() + s.Write(owner) + s.Write(wire) + ds.Digest = hex.EncodeToString(s.Sum(nil)) + return ds +} + +// ToCDNSKEY converts a DNSKEY record to a CDNSKEY record. +func (k *DNSKEY) ToCDNSKEY() *CDNSKEY { + c := &CDNSKEY{DNSKEY: *k} + c.Hdr = k.Hdr + c.Hdr.Rrtype = TypeCDNSKEY + return c +} + +// ToCDS converts a DS record to a CDS record. +func (d *DS) ToCDS() *CDS { + c := &CDS{DS: *d} + c.Hdr = d.Hdr + c.Hdr.Rrtype = TypeCDS + return c +} + +// Sign signs an RRSet. The signature needs to be filled in with the values: +// Inception, Expiration, KeyTag, SignerName and Algorithm. The rest is copied +// from the RRset. Sign returns a non-nill error when the signing went OK. +// There is no check if RRSet is a proper (RFC 2181) RRSet. If OrigTTL is non +// zero, it is used as-is, otherwise the TTL of the RRset is used as the +// OrigTTL. +func (rr *RRSIG) Sign(k crypto.Signer, rrset []RR) error { + if k == nil { + return ErrPrivKey + } + // s.Inception and s.Expiration may be 0 (rollover etc.), the rest must be set + if rr.KeyTag == 0 || len(rr.SignerName) == 0 || rr.Algorithm == 0 { + return ErrKey + } + + rr.Hdr.Rrtype = TypeRRSIG + rr.Hdr.Name = rrset[0].Header().Name + rr.Hdr.Class = rrset[0].Header().Class + if rr.OrigTtl == 0 { // If set don't override + rr.OrigTtl = rrset[0].Header().Ttl + } + rr.TypeCovered = rrset[0].Header().Rrtype + rr.Labels = uint8(CountLabel(rrset[0].Header().Name)) + + if strings.HasPrefix(rrset[0].Header().Name, "*") { + rr.Labels-- // wildcard, remove from label count + } + + sigwire := new(rrsigWireFmt) + sigwire.TypeCovered = rr.TypeCovered + sigwire.Algorithm = rr.Algorithm + sigwire.Labels = rr.Labels + sigwire.OrigTtl = rr.OrigTtl + sigwire.Expiration = rr.Expiration + sigwire.Inception = rr.Inception + sigwire.KeyTag = rr.KeyTag + // For signing, lowercase this name + sigwire.SignerName = strings.ToLower(rr.SignerName) + + // Create the desired binary blob + signdata := make([]byte, DefaultMsgSize) + n, err := packSigWire(sigwire, signdata) + if err != nil { + return err + } + signdata = signdata[:n] + wire, err := rawSignatureData(rrset, rr) + if err != nil { + return err + } + + hash, ok := AlgorithmToHash[rr.Algorithm] + if !ok { + return ErrAlg + } + + switch rr.Algorithm { + case ED25519: + // ed25519 signs the raw message and performs hashing internally. + // All other supported signature schemes operate over the pre-hashed + // message, and thus ed25519 must be handled separately here. + // + // The raw message is passed directly into sign and crypto.Hash(0) is + // used to signal to the crypto.Signer that the data has not been hashed. + signature, err := sign(k, append(signdata, wire...), crypto.Hash(0), rr.Algorithm) + if err != nil { + return err + } + + rr.Signature = toBase64(signature) + default: + h := hash.New() + h.Write(signdata) + h.Write(wire) + + signature, err := sign(k, h.Sum(nil), hash, rr.Algorithm) + if err != nil { + return err + } + + rr.Signature = toBase64(signature) + } + + return nil +} + +func sign(k crypto.Signer, hashed []byte, hash crypto.Hash, alg uint8) ([]byte, error) { + signature, err := k.Sign(rand.Reader, hashed, hash) + if err != nil { + return nil, err + } + + switch alg { + case RSASHA1, RSASHA1NSEC3SHA1, RSASHA256, RSASHA512: + return signature, nil + + case ECDSAP256SHA256, ECDSAP384SHA384: + ecdsaSignature := &struct { + R, S *big.Int + }{} + if _, err := asn1.Unmarshal(signature, ecdsaSignature); err != nil { + return nil, err + } + + var intlen int + switch alg { + case ECDSAP256SHA256: + intlen = 32 + case ECDSAP384SHA384: + intlen = 48 + } + + signature := intToBytes(ecdsaSignature.R, intlen) + signature = append(signature, intToBytes(ecdsaSignature.S, intlen)...) + return signature, nil + + // There is no defined interface for what a DSA backed crypto.Signer returns + case DSA, DSANSEC3SHA1: + // t := divRoundUp(divRoundUp(p.PublicKey.Y.BitLen(), 8)-64, 8) + // signature := []byte{byte(t)} + // signature = append(signature, intToBytes(r1, 20)...) + // signature = append(signature, intToBytes(s1, 20)...) + // rr.Signature = signature + + case ED25519: + return signature, nil + } + + return nil, ErrAlg +} + +// Verify validates an RRSet with the signature and key. This is only the +// cryptographic test, the signature validity period must be checked separately. +// This function copies the rdata of some RRs (to lowercase domain names) for the validation to work. +func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error { + // First the easy checks + if !IsRRset(rrset) { + return ErrRRset + } + if rr.KeyTag != k.KeyTag() { + return ErrKey + } + if rr.Hdr.Class != k.Hdr.Class { + return ErrKey + } + if rr.Algorithm != k.Algorithm { + return ErrKey + } + if strings.ToLower(rr.SignerName) != strings.ToLower(k.Hdr.Name) { + return ErrKey + } + if k.Protocol != 3 { + return ErrKey + } + + // IsRRset checked that we have at least one RR and that the RRs in + // the set have consistent type, class, and name. Also check that type and + // class matches the RRSIG record. + if rrset[0].Header().Class != rr.Hdr.Class { + return ErrRRset + } + if rrset[0].Header().Rrtype != rr.TypeCovered { + return ErrRRset + } + + // RFC 4035 5.3.2. Reconstructing the Signed Data + // Copy the sig, except the rrsig data + sigwire := new(rrsigWireFmt) + sigwire.TypeCovered = rr.TypeCovered + sigwire.Algorithm = rr.Algorithm + sigwire.Labels = rr.Labels + sigwire.OrigTtl = rr.OrigTtl + sigwire.Expiration = rr.Expiration + sigwire.Inception = rr.Inception + sigwire.KeyTag = rr.KeyTag + sigwire.SignerName = strings.ToLower(rr.SignerName) + // Create the desired binary blob + signeddata := make([]byte, DefaultMsgSize) + n, err := packSigWire(sigwire, signeddata) + if err != nil { + return err + } + signeddata = signeddata[:n] + wire, err := rawSignatureData(rrset, rr) + if err != nil { + return err + } + + sigbuf := rr.sigBuf() // Get the binary signature data + if rr.Algorithm == PRIVATEDNS { // PRIVATEOID + // TODO(miek) + // remove the domain name and assume its ours? + } + + hash, ok := AlgorithmToHash[rr.Algorithm] + if !ok { + return ErrAlg + } + + switch rr.Algorithm { + case RSASHA1, RSASHA1NSEC3SHA1, RSASHA256, RSASHA512, RSAMD5: + // TODO(mg): this can be done quicker, ie. cache the pubkey data somewhere?? + pubkey := k.publicKeyRSA() // Get the key + if pubkey == nil { + return ErrKey + } + + h := hash.New() + h.Write(signeddata) + h.Write(wire) + return rsa.VerifyPKCS1v15(pubkey, hash, h.Sum(nil), sigbuf) + + case ECDSAP256SHA256, ECDSAP384SHA384: + pubkey := k.publicKeyECDSA() + if pubkey == nil { + return ErrKey + } + + // Split sigbuf into the r and s coordinates + r := new(big.Int).SetBytes(sigbuf[:len(sigbuf)/2]) + s := new(big.Int).SetBytes(sigbuf[len(sigbuf)/2:]) + + h := hash.New() + h.Write(signeddata) + h.Write(wire) + if ecdsa.Verify(pubkey, h.Sum(nil), r, s) { + return nil + } + return ErrSig + + case ED25519: + pubkey := k.publicKeyED25519() + if pubkey == nil { + return ErrKey + } + + if ed25519.Verify(pubkey, append(signeddata, wire...), sigbuf) { + return nil + } + return ErrSig + + default: + return ErrAlg + } +} + +// ValidityPeriod uses RFC1982 serial arithmetic to calculate +// if a signature period is valid. If t is the zero time, the +// current time is taken other t is. Returns true if the signature +// is valid at the given time, otherwise returns false. +func (rr *RRSIG) ValidityPeriod(t time.Time) bool { + var utc int64 + if t.IsZero() { + utc = time.Now().UTC().Unix() + } else { + utc = t.UTC().Unix() + } + modi := (int64(rr.Inception) - utc) / year68 + mode := (int64(rr.Expiration) - utc) / year68 + ti := int64(rr.Inception) + modi*year68 + te := int64(rr.Expiration) + mode*year68 + return ti <= utc && utc <= te +} + +// Return the signatures base64 encodedig sigdata as a byte slice. +func (rr *RRSIG) sigBuf() []byte { + sigbuf, err := fromBase64([]byte(rr.Signature)) + if err != nil { + return nil + } + return sigbuf +} + +// publicKeyRSA returns the RSA public key from a DNSKEY record. +func (k *DNSKEY) publicKeyRSA() *rsa.PublicKey { + keybuf, err := fromBase64([]byte(k.PublicKey)) + if err != nil { + return nil + } + + if len(keybuf) < 1+1+64 { + // Exponent must be at least 1 byte and modulus at least 64 + return nil + } + + // RFC 2537/3110, section 2. RSA Public KEY Resource Records + // Length is in the 0th byte, unless its zero, then it + // it in bytes 1 and 2 and its a 16 bit number + explen := uint16(keybuf[0]) + keyoff := 1 + if explen == 0 { + explen = uint16(keybuf[1])<<8 | uint16(keybuf[2]) + keyoff = 3 + } + + if explen > 4 || explen == 0 || keybuf[keyoff] == 0 { + // Exponent larger than supported by the crypto package, + // empty, or contains prohibited leading zero. + return nil + } + + modoff := keyoff + int(explen) + modlen := len(keybuf) - modoff + if modlen < 64 || modlen > 512 || keybuf[modoff] == 0 { + // Modulus is too small, large, or contains prohibited leading zero. + return nil + } + + pubkey := new(rsa.PublicKey) + + expo := uint64(0) + for i := 0; i < int(explen); i++ { + expo <<= 8 + expo |= uint64(keybuf[keyoff+i]) + } + if expo > 1<<31-1 { + // Larger exponent than supported by the crypto package. + return nil + } + pubkey.E = int(expo) + + pubkey.N = big.NewInt(0) + pubkey.N.SetBytes(keybuf[modoff:]) + + return pubkey +} + +// publicKeyECDSA returns the Curve public key from the DNSKEY record. +func (k *DNSKEY) publicKeyECDSA() *ecdsa.PublicKey { + keybuf, err := fromBase64([]byte(k.PublicKey)) + if err != nil { + return nil + } + pubkey := new(ecdsa.PublicKey) + switch k.Algorithm { + case ECDSAP256SHA256: + pubkey.Curve = elliptic.P256() + if len(keybuf) != 64 { + // wrongly encoded key + return nil + } + case ECDSAP384SHA384: + pubkey.Curve = elliptic.P384() + if len(keybuf) != 96 { + // Wrongly encoded key + return nil + } + } + pubkey.X = big.NewInt(0) + pubkey.X.SetBytes(keybuf[:len(keybuf)/2]) + pubkey.Y = big.NewInt(0) + pubkey.Y.SetBytes(keybuf[len(keybuf)/2:]) + return pubkey +} + +func (k *DNSKEY) publicKeyDSA() *dsa.PublicKey { + keybuf, err := fromBase64([]byte(k.PublicKey)) + if err != nil { + return nil + } + if len(keybuf) < 22 { + return nil + } + t, keybuf := int(keybuf[0]), keybuf[1:] + size := 64 + t*8 + q, keybuf := keybuf[:20], keybuf[20:] + if len(keybuf) != 3*size { + return nil + } + p, keybuf := keybuf[:size], keybuf[size:] + g, y := keybuf[:size], keybuf[size:] + pubkey := new(dsa.PublicKey) + pubkey.Parameters.Q = big.NewInt(0).SetBytes(q) + pubkey.Parameters.P = big.NewInt(0).SetBytes(p) + pubkey.Parameters.G = big.NewInt(0).SetBytes(g) + pubkey.Y = big.NewInt(0).SetBytes(y) + return pubkey +} + +func (k *DNSKEY) publicKeyED25519() ed25519.PublicKey { + keybuf, err := fromBase64([]byte(k.PublicKey)) + if err != nil { + return nil + } + if len(keybuf) != ed25519.PublicKeySize { + return nil + } + return keybuf +} + +type wireSlice [][]byte + +func (p wireSlice) Len() int { return len(p) } +func (p wireSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p wireSlice) Less(i, j int) bool { + _, ioff, _ := UnpackDomainName(p[i], 0) + _, joff, _ := UnpackDomainName(p[j], 0) + return bytes.Compare(p[i][ioff+10:], p[j][joff+10:]) < 0 +} + +// Return the raw signature data. +func rawSignatureData(rrset []RR, s *RRSIG) (buf []byte, err error) { + wires := make(wireSlice, len(rrset)) + for i, r := range rrset { + r1 := r.copy() + r1.Header().Ttl = s.OrigTtl + labels := SplitDomainName(r1.Header().Name) + // 6.2. Canonical RR Form. (4) - wildcards + if len(labels) > int(s.Labels) { + // Wildcard + r1.Header().Name = "*." + strings.Join(labels[len(labels)-int(s.Labels):], ".") + "." + } + // RFC 4034: 6.2. Canonical RR Form. (2) - domain name to lowercase + r1.Header().Name = strings.ToLower(r1.Header().Name) + // 6.2. Canonical RR Form. (3) - domain rdata to lowercase. + // NS, MD, MF, CNAME, SOA, MB, MG, MR, PTR, + // HINFO, MINFO, MX, RP, AFSDB, RT, SIG, PX, NXT, NAPTR, KX, + // SRV, DNAME, A6 + // + // RFC 6840 - Clarifications and Implementation Notes for DNS Security (DNSSEC): + // Section 6.2 of [RFC4034] also erroneously lists HINFO as a record + // that needs conversion to lowercase, and twice at that. Since HINFO + // records contain no domain names, they are not subject to case + // conversion. + switch x := r1.(type) { + case *NS: + x.Ns = strings.ToLower(x.Ns) + case *MD: + x.Md = strings.ToLower(x.Md) + case *MF: + x.Mf = strings.ToLower(x.Mf) + case *CNAME: + x.Target = strings.ToLower(x.Target) + case *SOA: + x.Ns = strings.ToLower(x.Ns) + x.Mbox = strings.ToLower(x.Mbox) + case *MB: + x.Mb = strings.ToLower(x.Mb) + case *MG: + x.Mg = strings.ToLower(x.Mg) + case *MR: + x.Mr = strings.ToLower(x.Mr) + case *PTR: + x.Ptr = strings.ToLower(x.Ptr) + case *MINFO: + x.Rmail = strings.ToLower(x.Rmail) + x.Email = strings.ToLower(x.Email) + case *MX: + x.Mx = strings.ToLower(x.Mx) + case *RP: + x.Mbox = strings.ToLower(x.Mbox) + x.Txt = strings.ToLower(x.Txt) + case *AFSDB: + x.Hostname = strings.ToLower(x.Hostname) + case *RT: + x.Host = strings.ToLower(x.Host) + case *SIG: + x.SignerName = strings.ToLower(x.SignerName) + case *PX: + x.Map822 = strings.ToLower(x.Map822) + x.Mapx400 = strings.ToLower(x.Mapx400) + case *NAPTR: + x.Replacement = strings.ToLower(x.Replacement) + case *KX: + x.Exchanger = strings.ToLower(x.Exchanger) + case *SRV: + x.Target = strings.ToLower(x.Target) + case *DNAME: + x.Target = strings.ToLower(x.Target) + } + // 6.2. Canonical RR Form. (5) - origTTL + wire := make([]byte, r1.len()+1) // +1 to be safe(r) + off, err1 := PackRR(r1, wire, 0, nil, false) + if err1 != nil { + return nil, err1 + } + wire = wire[:off] + wires[i] = wire + } + sort.Sort(wires) + for i, wire := range wires { + if i > 0 && bytes.Equal(wire, wires[i-1]) { + continue + } + buf = append(buf, wire...) + } + return buf, nil +} + +func packSigWire(sw *rrsigWireFmt, msg []byte) (int, error) { + // copied from zmsg.go RRSIG packing + off, err := packUint16(sw.TypeCovered, msg, 0) + if err != nil { + return off, err + } + off, err = packUint8(sw.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(sw.Labels, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(sw.OrigTtl, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(sw.Expiration, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(sw.Inception, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(sw.KeyTag, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(sw.SignerName, msg, off, nil, false) + if err != nil { + return off, err + } + return off, nil +} + +func packKeyWire(dw *dnskeyWireFmt, msg []byte) (int, error) { + // copied from zmsg.go DNSKEY packing + off, err := packUint16(dw.Flags, msg, 0) + if err != nil { + return off, err + } + off, err = packUint8(dw.Protocol, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(dw.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packStringBase64(dw.PublicKey, msg, off) + if err != nil { + return off, err + } + return off, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_keygen.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_keygen.go new file mode 100644 index 00000000000..33e913ac527 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_keygen.go @@ -0,0 +1,178 @@ +package dns + +import ( + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "math/big" + + "golang.org/x/crypto/ed25519" +) + +// Generate generates a DNSKEY of the given bit size. +// The public part is put inside the DNSKEY record. +// The Algorithm in the key must be set as this will define +// what kind of DNSKEY will be generated. +// The ECDSA algorithms imply a fixed keysize, in that case +// bits should be set to the size of the algorithm. +func (k *DNSKEY) Generate(bits int) (crypto.PrivateKey, error) { + switch k.Algorithm { + case DSA, DSANSEC3SHA1: + if bits != 1024 { + return nil, ErrKeySize + } + case RSAMD5, RSASHA1, RSASHA256, RSASHA1NSEC3SHA1: + if bits < 512 || bits > 4096 { + return nil, ErrKeySize + } + case RSASHA512: + if bits < 1024 || bits > 4096 { + return nil, ErrKeySize + } + case ECDSAP256SHA256: + if bits != 256 { + return nil, ErrKeySize + } + case ECDSAP384SHA384: + if bits != 384 { + return nil, ErrKeySize + } + case ED25519: + if bits != 256 { + return nil, ErrKeySize + } + } + + switch k.Algorithm { + case DSA, DSANSEC3SHA1: + params := new(dsa.Parameters) + if err := dsa.GenerateParameters(params, rand.Reader, dsa.L1024N160); err != nil { + return nil, err + } + priv := new(dsa.PrivateKey) + priv.PublicKey.Parameters = *params + err := dsa.GenerateKey(priv, rand.Reader) + if err != nil { + return nil, err + } + k.setPublicKeyDSA(params.Q, params.P, params.G, priv.PublicKey.Y) + return priv, nil + case RSAMD5, RSASHA1, RSASHA256, RSASHA512, RSASHA1NSEC3SHA1: + priv, err := rsa.GenerateKey(rand.Reader, bits) + if err != nil { + return nil, err + } + k.setPublicKeyRSA(priv.PublicKey.E, priv.PublicKey.N) + return priv, nil + case ECDSAP256SHA256, ECDSAP384SHA384: + var c elliptic.Curve + switch k.Algorithm { + case ECDSAP256SHA256: + c = elliptic.P256() + case ECDSAP384SHA384: + c = elliptic.P384() + } + priv, err := ecdsa.GenerateKey(c, rand.Reader) + if err != nil { + return nil, err + } + k.setPublicKeyECDSA(priv.PublicKey.X, priv.PublicKey.Y) + return priv, nil + case ED25519: + pub, priv, err := ed25519.GenerateKey(rand.Reader) + if err != nil { + return nil, err + } + k.setPublicKeyED25519(pub) + return priv, nil + default: + return nil, ErrAlg + } +} + +// Set the public key (the value E and N) +func (k *DNSKEY) setPublicKeyRSA(_E int, _N *big.Int) bool { + if _E == 0 || _N == nil { + return false + } + buf := exponentToBuf(_E) + buf = append(buf, _N.Bytes()...) + k.PublicKey = toBase64(buf) + return true +} + +// Set the public key for Elliptic Curves +func (k *DNSKEY) setPublicKeyECDSA(_X, _Y *big.Int) bool { + if _X == nil || _Y == nil { + return false + } + var intlen int + switch k.Algorithm { + case ECDSAP256SHA256: + intlen = 32 + case ECDSAP384SHA384: + intlen = 48 + } + k.PublicKey = toBase64(curveToBuf(_X, _Y, intlen)) + return true +} + +// Set the public key for DSA +func (k *DNSKEY) setPublicKeyDSA(_Q, _P, _G, _Y *big.Int) bool { + if _Q == nil || _P == nil || _G == nil || _Y == nil { + return false + } + buf := dsaToBuf(_Q, _P, _G, _Y) + k.PublicKey = toBase64(buf) + return true +} + +// Set the public key for Ed25519 +func (k *DNSKEY) setPublicKeyED25519(_K ed25519.PublicKey) bool { + if _K == nil { + return false + } + k.PublicKey = toBase64(_K) + return true +} + +// Set the public key (the values E and N) for RSA +// RFC 3110: Section 2. RSA Public KEY Resource Records +func exponentToBuf(_E int) []byte { + var buf []byte + i := big.NewInt(int64(_E)).Bytes() + if len(i) < 256 { + buf = make([]byte, 1, 1+len(i)) + buf[0] = uint8(len(i)) + } else { + buf = make([]byte, 3, 3+len(i)) + buf[0] = 0 + buf[1] = uint8(len(i) >> 8) + buf[2] = uint8(len(i)) + } + buf = append(buf, i...) + return buf +} + +// Set the public key for X and Y for Curve. The two +// values are just concatenated. +func curveToBuf(_X, _Y *big.Int, intlen int) []byte { + buf := intToBytes(_X, intlen) + buf = append(buf, intToBytes(_Y, intlen)...) + return buf +} + +// Set the public key for X and Y for Curve. The two +// values are just concatenated. +func dsaToBuf(_Q, _P, _G, _Y *big.Int) []byte { + t := divRoundUp(divRoundUp(_G.BitLen(), 8)-64, 8) + buf := []byte{byte(t)} + buf = append(buf, intToBytes(_Q, 20)...) + buf = append(buf, intToBytes(_P, 64+t*8)...) + buf = append(buf, intToBytes(_G, 64+t*8)...) + buf = append(buf, intToBytes(_Y, 64+t*8)...) + return buf +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_keyscan.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_keyscan.go new file mode 100644 index 00000000000..5e654223011 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_keyscan.go @@ -0,0 +1,352 @@ +package dns + +import ( + "bufio" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/rsa" + "io" + "math/big" + "strconv" + "strings" + + "golang.org/x/crypto/ed25519" +) + +// NewPrivateKey returns a PrivateKey by parsing the string s. +// s should be in the same form of the BIND private key files. +func (k *DNSKEY) NewPrivateKey(s string) (crypto.PrivateKey, error) { + if s == "" || s[len(s)-1] != '\n' { // We need a closing newline + return k.ReadPrivateKey(strings.NewReader(s+"\n"), "") + } + return k.ReadPrivateKey(strings.NewReader(s), "") +} + +// ReadPrivateKey reads a private key from the io.Reader q. The string file is +// only used in error reporting. +// The public key must be known, because some cryptographic algorithms embed +// the public inside the privatekey. +func (k *DNSKEY) ReadPrivateKey(q io.Reader, file string) (crypto.PrivateKey, error) { + m, err := parseKey(q, file) + if m == nil { + return nil, err + } + if _, ok := m["private-key-format"]; !ok { + return nil, ErrPrivKey + } + if m["private-key-format"] != "v1.2" && m["private-key-format"] != "v1.3" { + return nil, ErrPrivKey + } + // TODO(mg): check if the pubkey matches the private key + algo, err := strconv.ParseUint(strings.SplitN(m["algorithm"], " ", 2)[0], 10, 8) + if err != nil { + return nil, ErrPrivKey + } + switch uint8(algo) { + case DSA: + priv, err := readPrivateKeyDSA(m) + if err != nil { + return nil, err + } + pub := k.publicKeyDSA() + if pub == nil { + return nil, ErrKey + } + priv.PublicKey = *pub + return priv, nil + case RSAMD5: + fallthrough + case RSASHA1: + fallthrough + case RSASHA1NSEC3SHA1: + fallthrough + case RSASHA256: + fallthrough + case RSASHA512: + priv, err := readPrivateKeyRSA(m) + if err != nil { + return nil, err + } + pub := k.publicKeyRSA() + if pub == nil { + return nil, ErrKey + } + priv.PublicKey = *pub + return priv, nil + case ECCGOST: + return nil, ErrPrivKey + case ECDSAP256SHA256: + fallthrough + case ECDSAP384SHA384: + priv, err := readPrivateKeyECDSA(m) + if err != nil { + return nil, err + } + pub := k.publicKeyECDSA() + if pub == nil { + return nil, ErrKey + } + priv.PublicKey = *pub + return priv, nil + case ED25519: + return readPrivateKeyED25519(m) + default: + return nil, ErrPrivKey + } +} + +// Read a private key (file) string and create a public key. Return the private key. +func readPrivateKeyRSA(m map[string]string) (*rsa.PrivateKey, error) { + p := new(rsa.PrivateKey) + p.Primes = []*big.Int{nil, nil} + for k, v := range m { + switch k { + case "modulus", "publicexponent", "privateexponent", "prime1", "prime2": + v1, err := fromBase64([]byte(v)) + if err != nil { + return nil, err + } + switch k { + case "modulus": + p.PublicKey.N = big.NewInt(0) + p.PublicKey.N.SetBytes(v1) + case "publicexponent": + i := big.NewInt(0) + i.SetBytes(v1) + p.PublicKey.E = int(i.Int64()) // int64 should be large enough + case "privateexponent": + p.D = big.NewInt(0) + p.D.SetBytes(v1) + case "prime1": + p.Primes[0] = big.NewInt(0) + p.Primes[0].SetBytes(v1) + case "prime2": + p.Primes[1] = big.NewInt(0) + p.Primes[1].SetBytes(v1) + } + case "exponent1", "exponent2", "coefficient": + // not used in Go (yet) + case "created", "publish", "activate": + // not used in Go (yet) + } + } + return p, nil +} + +func readPrivateKeyDSA(m map[string]string) (*dsa.PrivateKey, error) { + p := new(dsa.PrivateKey) + p.X = big.NewInt(0) + for k, v := range m { + switch k { + case "private_value(x)": + v1, err := fromBase64([]byte(v)) + if err != nil { + return nil, err + } + p.X.SetBytes(v1) + case "created", "publish", "activate": + /* not used in Go (yet) */ + } + } + return p, nil +} + +func readPrivateKeyECDSA(m map[string]string) (*ecdsa.PrivateKey, error) { + p := new(ecdsa.PrivateKey) + p.D = big.NewInt(0) + // TODO: validate that the required flags are present + for k, v := range m { + switch k { + case "privatekey": + v1, err := fromBase64([]byte(v)) + if err != nil { + return nil, err + } + p.D.SetBytes(v1) + case "created", "publish", "activate": + /* not used in Go (yet) */ + } + } + return p, nil +} + +func readPrivateKeyED25519(m map[string]string) (ed25519.PrivateKey, error) { + var p ed25519.PrivateKey + // TODO: validate that the required flags are present + for k, v := range m { + switch k { + case "privatekey": + p1, err := fromBase64([]byte(v)) + if err != nil { + return nil, err + } + if len(p1) != ed25519.SeedSize { + return nil, ErrPrivKey + } + p = ed25519.NewKeyFromSeed(p1) + case "created", "publish", "activate": + /* not used in Go (yet) */ + } + } + return p, nil +} + +// parseKey reads a private key from r. It returns a map[string]string, +// with the key-value pairs, or an error when the file is not correct. +func parseKey(r io.Reader, file string) (map[string]string, error) { + m := make(map[string]string) + var k string + + c := newKLexer(r) + + for l, ok := c.Next(); ok; l, ok = c.Next() { + // It should alternate + switch l.value { + case zKey: + k = l.token + case zValue: + if k == "" { + return nil, &ParseError{file, "no private key seen", l} + } + + m[strings.ToLower(k)] = l.token + k = "" + } + } + + // Surface any read errors from r. + if err := c.Err(); err != nil { + return nil, &ParseError{file: file, err: err.Error()} + } + + return m, nil +} + +type klexer struct { + br io.ByteReader + + readErr error + + line int + column int + + key bool + + eol bool // end-of-line +} + +func newKLexer(r io.Reader) *klexer { + br, ok := r.(io.ByteReader) + if !ok { + br = bufio.NewReaderSize(r, 1024) + } + + return &klexer{ + br: br, + + line: 1, + + key: true, + } +} + +func (kl *klexer) Err() error { + if kl.readErr == io.EOF { + return nil + } + + return kl.readErr +} + +// readByte returns the next byte from the input +func (kl *klexer) readByte() (byte, bool) { + if kl.readErr != nil { + return 0, false + } + + c, err := kl.br.ReadByte() + if err != nil { + kl.readErr = err + return 0, false + } + + // delay the newline handling until the next token is delivered, + // fixes off-by-one errors when reporting a parse error. + if kl.eol { + kl.line++ + kl.column = 0 + kl.eol = false + } + + if c == '\n' { + kl.eol = true + } else { + kl.column++ + } + + return c, true +} + +func (kl *klexer) Next() (lex, bool) { + var ( + l lex + + str strings.Builder + + commt bool + ) + + for x, ok := kl.readByte(); ok; x, ok = kl.readByte() { + l.line, l.column = kl.line, kl.column + + switch x { + case ':': + if commt || !kl.key { + break + } + + kl.key = false + + // Next token is a space, eat it + kl.readByte() + + l.value = zKey + l.token = str.String() + return l, true + case ';': + commt = true + case '\n': + if commt { + // Reset a comment + commt = false + } + + kl.key = true + + l.value = zValue + l.token = str.String() + return l, true + default: + if commt { + break + } + + str.WriteByte(x) + } + } + + if kl.readErr != nil && kl.readErr != io.EOF { + // Don't return any tokens after a read error occurs. + return lex{value: zEOF}, false + } + + if str.Len() > 0 { + // Send remainder + l.value = zValue + l.token = str.String() + return l, true + } + + return lex{value: zEOF}, false +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_privkey.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_privkey.go new file mode 100644 index 00000000000..0c65be17bc6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/dnssec_privkey.go @@ -0,0 +1,93 @@ +package dns + +import ( + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/rsa" + "math/big" + "strconv" + + "golang.org/x/crypto/ed25519" +) + +const format = "Private-key-format: v1.3\n" + +// PrivateKeyString converts a PrivateKey to a string. This string has the same +// format as the private-key-file of BIND9 (Private-key-format: v1.3). +// It needs some info from the key (the algorithm), so its a method of the DNSKEY +// It supports rsa.PrivateKey, ecdsa.PrivateKey and dsa.PrivateKey +func (r *DNSKEY) PrivateKeyString(p crypto.PrivateKey) string { + algorithm := strconv.Itoa(int(r.Algorithm)) + algorithm += " (" + AlgorithmToString[r.Algorithm] + ")" + + switch p := p.(type) { + case *rsa.PrivateKey: + modulus := toBase64(p.PublicKey.N.Bytes()) + e := big.NewInt(int64(p.PublicKey.E)) + publicExponent := toBase64(e.Bytes()) + privateExponent := toBase64(p.D.Bytes()) + prime1 := toBase64(p.Primes[0].Bytes()) + prime2 := toBase64(p.Primes[1].Bytes()) + // Calculate Exponent1/2 and Coefficient as per: http://en.wikipedia.org/wiki/RSA#Using_the_Chinese_remainder_algorithm + // and from: http://code.google.com/p/go/issues/detail?id=987 + one := big.NewInt(1) + p1 := big.NewInt(0).Sub(p.Primes[0], one) + q1 := big.NewInt(0).Sub(p.Primes[1], one) + exp1 := big.NewInt(0).Mod(p.D, p1) + exp2 := big.NewInt(0).Mod(p.D, q1) + coeff := big.NewInt(0).ModInverse(p.Primes[1], p.Primes[0]) + + exponent1 := toBase64(exp1.Bytes()) + exponent2 := toBase64(exp2.Bytes()) + coefficient := toBase64(coeff.Bytes()) + + return format + + "Algorithm: " + algorithm + "\n" + + "Modulus: " + modulus + "\n" + + "PublicExponent: " + publicExponent + "\n" + + "PrivateExponent: " + privateExponent + "\n" + + "Prime1: " + prime1 + "\n" + + "Prime2: " + prime2 + "\n" + + "Exponent1: " + exponent1 + "\n" + + "Exponent2: " + exponent2 + "\n" + + "Coefficient: " + coefficient + "\n" + + case *ecdsa.PrivateKey: + var intlen int + switch r.Algorithm { + case ECDSAP256SHA256: + intlen = 32 + case ECDSAP384SHA384: + intlen = 48 + } + private := toBase64(intToBytes(p.D, intlen)) + return format + + "Algorithm: " + algorithm + "\n" + + "PrivateKey: " + private + "\n" + + case *dsa.PrivateKey: + T := divRoundUp(divRoundUp(p.PublicKey.Parameters.G.BitLen(), 8)-64, 8) + prime := toBase64(intToBytes(p.PublicKey.Parameters.P, 64+T*8)) + subprime := toBase64(intToBytes(p.PublicKey.Parameters.Q, 20)) + base := toBase64(intToBytes(p.PublicKey.Parameters.G, 64+T*8)) + priv := toBase64(intToBytes(p.X, 20)) + pub := toBase64(intToBytes(p.PublicKey.Y, 64+T*8)) + return format + + "Algorithm: " + algorithm + "\n" + + "Prime(p): " + prime + "\n" + + "Subprime(q): " + subprime + "\n" + + "Base(g): " + base + "\n" + + "Private_value(x): " + priv + "\n" + + "Public_value(y): " + pub + "\n" + + case ed25519.PrivateKey: + private := toBase64(p.Seed()) + return format + + "Algorithm: " + algorithm + "\n" + + "PrivateKey: " + private + "\n" + + default: + return "" + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/doc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/doc.go new file mode 100644 index 00000000000..0389d7248ef --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/doc.go @@ -0,0 +1,272 @@ +/* +Package dns implements a full featured interface to the Domain Name System. +Server- and client-side programming is supported. +The package allows complete control over what is sent out to the DNS. The package +API follows the less-is-more principle, by presenting a small, clean interface. + +The package dns supports (asynchronous) querying/replying, incoming/outgoing zone transfers, +TSIG, EDNS0, dynamic updates, notifies and DNSSEC validation/signing. +Note that domain names MUST be fully qualified, before sending them, unqualified +names in a message will result in a packing failure. + +Resource records are native types. They are not stored in wire format. +Basic usage pattern for creating a new resource record: + + r := new(dns.MX) + r.Hdr = dns.RR_Header{Name: "miek.nl.", Rrtype: dns.TypeMX, + Class: dns.ClassINET, Ttl: 3600} + r.Preference = 10 + r.Mx = "mx.miek.nl." + +Or directly from a string: + + mx, err := dns.NewRR("miek.nl. 3600 IN MX 10 mx.miek.nl.") + +Or when the default origin (.) and TTL (3600) and class (IN) suit you: + + mx, err := dns.NewRR("miek.nl MX 10 mx.miek.nl") + +Or even: + + mx, err := dns.NewRR("$ORIGIN nl.\nmiek 1H IN MX 10 mx.miek") + +In the DNS messages are exchanged, these messages contain resource +records (sets). Use pattern for creating a message: + + m := new(dns.Msg) + m.SetQuestion("miek.nl.", dns.TypeMX) + +Or when not certain if the domain name is fully qualified: + + m.SetQuestion(dns.Fqdn("miek.nl"), dns.TypeMX) + +The message m is now a message with the question section set to ask +the MX records for the miek.nl. zone. + +The following is slightly more verbose, but more flexible: + + m1 := new(dns.Msg) + m1.Id = dns.Id() + m1.RecursionDesired = true + m1.Question = make([]dns.Question, 1) + m1.Question[0] = dns.Question{"miek.nl.", dns.TypeMX, dns.ClassINET} + +After creating a message it can be sent. +Basic use pattern for synchronous querying the DNS at a +server configured on 127.0.0.1 and port 53: + + c := new(dns.Client) + in, rtt, err := c.Exchange(m1, "127.0.0.1:53") + +Suppressing multiple outstanding queries (with the same question, type and +class) is as easy as setting: + + c.SingleInflight = true + +More advanced options are available using a net.Dialer and the corresponding API. +For example it is possible to set a timeout, or to specify a source IP address +and port to use for the connection: + + c := new(dns.Client) + laddr := net.UDPAddr{ + IP: net.ParseIP("[::1]"), + Port: 12345, + Zone: "", + } + c.Dialer := &net.Dialer{ + Timeout: 200 * time.Millisecond, + LocalAddr: &laddr, + } + in, rtt, err := c.Exchange(m1, "8.8.8.8:53") + +If these "advanced" features are not needed, a simple UDP query can be sent, +with: + + in, err := dns.Exchange(m1, "127.0.0.1:53") + +When this functions returns you will get dns message. A dns message consists +out of four sections. +The question section: in.Question, the answer section: in.Answer, +the authority section: in.Ns and the additional section: in.Extra. + +Each of these sections (except the Question section) contain a []RR. Basic +use pattern for accessing the rdata of a TXT RR as the first RR in +the Answer section: + + if t, ok := in.Answer[0].(*dns.TXT); ok { + // do something with t.Txt + } + +Domain Name and TXT Character String Representations + +Both domain names and TXT character strings are converted to presentation +form both when unpacked and when converted to strings. + +For TXT character strings, tabs, carriage returns and line feeds will be +converted to \t, \r and \n respectively. Back slashes and quotations marks +will be escaped. Bytes below 32 and above 127 will be converted to \DDD +form. + +For domain names, in addition to the above rules brackets, periods, +spaces, semicolons and the at symbol are escaped. + +DNSSEC + +DNSSEC (DNS Security Extension) adds a layer of security to the DNS. It +uses public key cryptography to sign resource records. The +public keys are stored in DNSKEY records and the signatures in RRSIG records. + +Requesting DNSSEC information for a zone is done by adding the DO (DNSSEC OK) bit +to a request. + + m := new(dns.Msg) + m.SetEdns0(4096, true) + +Signature generation, signature verification and key generation are all supported. + +DYNAMIC UPDATES + +Dynamic updates reuses the DNS message format, but renames three of +the sections. Question is Zone, Answer is Prerequisite, Authority is +Update, only the Additional is not renamed. See RFC 2136 for the gory details. + +You can set a rather complex set of rules for the existence of absence of +certain resource records or names in a zone to specify if resource records +should be added or removed. The table from RFC 2136 supplemented with the Go +DNS function shows which functions exist to specify the prerequisites. + + 3.2.4 - Table Of Metavalues Used In Prerequisite Section + + CLASS TYPE RDATA Meaning Function + -------------------------------------------------------------- + ANY ANY empty Name is in use dns.NameUsed + ANY rrset empty RRset exists (value indep) dns.RRsetUsed + NONE ANY empty Name is not in use dns.NameNotUsed + NONE rrset empty RRset does not exist dns.RRsetNotUsed + zone rrset rr RRset exists (value dep) dns.Used + +The prerequisite section can also be left empty. +If you have decided on the prerequisites you can tell what RRs should +be added or deleted. The next table shows the options you have and +what functions to call. + + 3.4.2.6 - Table Of Metavalues Used In Update Section + + CLASS TYPE RDATA Meaning Function + --------------------------------------------------------------- + ANY ANY empty Delete all RRsets from name dns.RemoveName + ANY rrset empty Delete an RRset dns.RemoveRRset + NONE rrset rr Delete an RR from RRset dns.Remove + zone rrset rr Add to an RRset dns.Insert + +TRANSACTION SIGNATURE + +An TSIG or transaction signature adds a HMAC TSIG record to each message sent. +The supported algorithms include: HmacMD5, HmacSHA1, HmacSHA256 and HmacSHA512. + +Basic use pattern when querying with a TSIG name "axfr." (note that these key names +must be fully qualified - as they are domain names) and the base64 secret +"so6ZGir4GPAqINNh9U5c3A==": + +If an incoming message contains a TSIG record it MUST be the last record in +the additional section (RFC2845 3.2). This means that you should make the +call to SetTsig last, right before executing the query. If you make any +changes to the RRset after calling SetTsig() the signature will be incorrect. + + c := new(dns.Client) + c.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="} + m := new(dns.Msg) + m.SetQuestion("miek.nl.", dns.TypeMX) + m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) + ... + // When sending the TSIG RR is calculated and filled in before sending + +When requesting an zone transfer (almost all TSIG usage is when requesting zone transfers), with +TSIG, this is the basic use pattern. In this example we request an AXFR for +miek.nl. with TSIG key named "axfr." and secret "so6ZGir4GPAqINNh9U5c3A==" +and using the server 176.58.119.54: + + t := new(dns.Transfer) + m := new(dns.Msg) + t.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="} + m.SetAxfr("miek.nl.") + m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) + c, err := t.In(m, "176.58.119.54:53") + for r := range c { ... } + +You can now read the records from the transfer as they come in. Each envelope is checked with TSIG. +If something is not correct an error is returned. + +Basic use pattern validating and replying to a message that has TSIG set. + + server := &dns.Server{Addr: ":53", Net: "udp"} + server.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="} + go server.ListenAndServe() + dns.HandleFunc(".", handleRequest) + + func handleRequest(w dns.ResponseWriter, r *dns.Msg) { + m := new(dns.Msg) + m.SetReply(r) + if r.IsTsig() != nil { + if w.TsigStatus() == nil { + // *Msg r has an TSIG record and it was validated + m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix()) + } else { + // *Msg r has an TSIG records and it was not valided + } + } + w.WriteMsg(m) + } + +PRIVATE RRS + +RFC 6895 sets aside a range of type codes for private use. This range +is 65,280 - 65,534 (0xFF00 - 0xFFFE). When experimenting with new Resource Records these +can be used, before requesting an official type code from IANA. + +see http://miek.nl/2014/September/21/idn-and-private-rr-in-go-dns/ for more +information. + +EDNS0 + +EDNS0 is an extension mechanism for the DNS defined in RFC 2671 and updated +by RFC 6891. It defines an new RR type, the OPT RR, which is then completely +abused. +Basic use pattern for creating an (empty) OPT RR: + + o := new(dns.OPT) + o.Hdr.Name = "." // MUST be the root zone, per definition. + o.Hdr.Rrtype = dns.TypeOPT + +The rdata of an OPT RR consists out of a slice of EDNS0 (RFC 6891) +interfaces. Currently only a few have been standardized: EDNS0_NSID +(RFC 5001) and EDNS0_SUBNET (draft-vandergaast-edns-client-subnet-02). Note +that these options may be combined in an OPT RR. +Basic use pattern for a server to check if (and which) options are set: + + // o is a dns.OPT + for _, s := range o.Option { + switch e := s.(type) { + case *dns.EDNS0_NSID: + // do stuff with e.Nsid + case *dns.EDNS0_SUBNET: + // access e.Family, e.Address, etc. + } + } + +SIG(0) + +From RFC 2931: + + SIG(0) provides protection for DNS transactions and requests .... + ... protection for glue records, DNS requests, protection for message headers + on requests and responses, and protection of the overall integrity of a response. + +It works like TSIG, except that SIG(0) uses public key cryptography, instead of the shared +secret approach in TSIG. +Supported algorithms: DSA, ECDSAP256SHA256, ECDSAP384SHA384, RSASHA1, RSASHA256 and +RSASHA512. + +Signing subsequent messages in multi-message sessions is not implemented. +*/ +package dns diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/duplicate.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/duplicate.go new file mode 100644 index 00000000000..6372e8a194f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/duplicate.go @@ -0,0 +1,25 @@ +package dns + +//go:generate go run duplicate_generate.go + +// IsDuplicate checks of r1 and r2 are duplicates of each other, excluding the TTL. +// So this means the header data is equal *and* the RDATA is the same. Return true +// is so, otherwise false. +// It's is a protocol violation to have identical RRs in a message. +func IsDuplicate(r1, r2 RR) bool { + if r1.Header().Class != r2.Header().Class { + return false + } + if r1.Header().Rrtype != r2.Header().Rrtype { + return false + } + if !isDulicateName(r1.Header().Name, r2.Header().Name) { + return false + } + // ignore TTL + + return isDuplicateRdata(r1, r2) +} + +// isDulicateName checks if the domain names s1 and s2 are equal. +func isDulicateName(s1, s2 string) bool { return equal(s1, s2) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/duplicate_generate.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/duplicate_generate.go new file mode 100644 index 00000000000..83ac1cf7704 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/duplicate_generate.go @@ -0,0 +1,158 @@ +//+build ignore + +// types_generate.go is meant to run with go generate. It will use +// go/{importer,types} to track down all the RR struct types. Then for each type +// it will generate conversion tables (TypeToRR and TypeToString) and banal +// methods (len, Header, copy) based on the struct tags. The generated source is +// written to ztypes.go, and is meant to be checked into git. +package main + +import ( + "bytes" + "fmt" + "go/format" + "go/importer" + "go/types" + "log" + "os" +) + +var packageHdr = ` +// Code generated by "go run duplicate_generate.go"; DO NOT EDIT. + +package dns + +` + +func getTypeStruct(t types.Type, scope *types.Scope) (*types.Struct, bool) { + st, ok := t.Underlying().(*types.Struct) + if !ok { + return nil, false + } + if st.Field(0).Type() == scope.Lookup("RR_Header").Type() { + return st, false + } + if st.Field(0).Anonymous() { + st, _ := getTypeStruct(st.Field(0).Type(), scope) + return st, true + } + return nil, false +} + +func main() { + // Import and type-check the package + pkg, err := importer.Default().Import("github.com/miekg/dns") + fatalIfErr(err) + scope := pkg.Scope() + + // Collect actual types (*X) + var namedTypes []string + for _, name := range scope.Names() { + o := scope.Lookup(name) + if o == nil || !o.Exported() { + continue + } + + if st, _ := getTypeStruct(o.Type(), scope); st == nil { + continue + } + + if name == "PrivateRR" || name == "RFC3597" { + continue + } + if name == "OPT" || name == "ANY" || name == "IXFR" || name == "AXFR" { + continue + } + + namedTypes = append(namedTypes, o.Name()) + } + + b := &bytes.Buffer{} + b.WriteString(packageHdr) + + // Generate the giant switch that calls the correct function for each type. + fmt.Fprint(b, "// isDuplicateRdata calls the rdata specific functions\n") + fmt.Fprint(b, "func isDuplicateRdata(r1, r2 RR) bool {\n") + fmt.Fprint(b, "switch r1.Header().Rrtype {\n") + + for _, name := range namedTypes { + + o := scope.Lookup(name) + _, isEmbedded := getTypeStruct(o.Type(), scope) + if isEmbedded { + continue + } + fmt.Fprintf(b, "case Type%s:\nreturn isDuplicate%s(r1.(*%s), r2.(*%s))\n", name, name, name, name) + } + fmt.Fprintf(b, "}\nreturn false\n}\n") + + // Generate the duplicate check for each type. + fmt.Fprint(b, "// isDuplicate() functions\n\n") + for _, name := range namedTypes { + + o := scope.Lookup(name) + st, isEmbedded := getTypeStruct(o.Type(), scope) + if isEmbedded { + continue + } + fmt.Fprintf(b, "func isDuplicate%s(r1, r2 *%s) bool {\n", name, name) + for i := 1; i < st.NumFields(); i++ { + field := st.Field(i).Name() + o2 := func(s string) { fmt.Fprintf(b, s+"\n", field, field) } + o3 := func(s string) { fmt.Fprintf(b, s+"\n", field, field, field) } + + // For some reason, a and aaaa don't pop up as *types.Slice here (mostly like because the are + // *indirectly* defined as a slice in the net package). + if _, ok := st.Field(i).Type().(*types.Slice); ok || st.Tag(i) == `dns:"a"` || st.Tag(i) == `dns:"aaaa"` { + o2("if len(r1.%s) != len(r2.%s) {\nreturn false\n}") + + if st.Tag(i) == `dns:"cdomain-name"` || st.Tag(i) == `dns:"domain-name"` { + o3(`for i := 0; i < len(r1.%s); i++ { + if !isDulicateName(r1.%s[i], r2.%s[i]) { + return false + } + }`) + + continue + } + + o3(`for i := 0; i < len(r1.%s); i++ { + if r1.%s[i] != r2.%s[i] { + return false + } + }`) + + continue + } + + switch st.Tag(i) { + case `dns:"-"`: + // ignored + case `dns:"cdomain-name"`, `dns:"domain-name"`: + o2("if !isDulicateName(r1.%s, r2.%s) {\nreturn false\n}") + default: + o2("if r1.%s != r2.%s {\nreturn false\n}") + } + } + fmt.Fprintf(b, "return true\n}\n\n") + } + + // gofmt + res, err := format.Source(b.Bytes()) + if err != nil { + b.WriteTo(os.Stderr) + log.Fatal(err) + } + + // write result + f, err := os.Create("zduplicate.go") + fatalIfErr(err) + defer f.Close() + f.Write(res) +} + +func fatalIfErr(err error) { + if err != nil { + log.Fatal(err) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/edns.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/edns.go new file mode 100644 index 00000000000..18d054139b2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/edns.go @@ -0,0 +1,630 @@ +package dns + +import ( + "encoding/binary" + "encoding/hex" + "errors" + "fmt" + "net" + "strconv" +) + +// EDNS0 Option codes. +const ( + EDNS0LLQ = 0x1 // long lived queries: http://tools.ietf.org/html/draft-sekar-dns-llq-01 + EDNS0UL = 0x2 // update lease draft: http://files.dns-sd.org/draft-sekar-dns-ul.txt + EDNS0NSID = 0x3 // nsid (See RFC 5001) + EDNS0DAU = 0x5 // DNSSEC Algorithm Understood + EDNS0DHU = 0x6 // DS Hash Understood + EDNS0N3U = 0x7 // NSEC3 Hash Understood + EDNS0SUBNET = 0x8 // client-subnet (See RFC 7871) + EDNS0EXPIRE = 0x9 // EDNS0 expire + EDNS0COOKIE = 0xa // EDNS0 Cookie + EDNS0TCPKEEPALIVE = 0xb // EDNS0 tcp keep alive (See RFC 7828) + EDNS0PADDING = 0xc // EDNS0 padding (See RFC 7830) + EDNS0LOCALSTART = 0xFDE9 // Beginning of range reserved for local/experimental use (See RFC 6891) + EDNS0LOCALEND = 0xFFFE // End of range reserved for local/experimental use (See RFC 6891) + _DO = 1 << 15 // DNSSEC OK +) + +// OPT is the EDNS0 RR appended to messages to convey extra (meta) information. +// See RFC 6891. +type OPT struct { + Hdr RR_Header + Option []EDNS0 `dns:"opt"` +} + +func (rr *OPT) String() string { + s := "\n;; OPT PSEUDOSECTION:\n; EDNS: version " + strconv.Itoa(int(rr.Version())) + "; " + if rr.Do() { + s += "flags: do; " + } else { + s += "flags: ; " + } + s += "udp: " + strconv.Itoa(int(rr.UDPSize())) + + for _, o := range rr.Option { + switch o.(type) { + case *EDNS0_NSID: + s += "\n; NSID: " + o.String() + h, e := o.pack() + var r string + if e == nil { + for _, c := range h { + r += "(" + string(c) + ")" + } + s += " " + r + } + case *EDNS0_SUBNET: + s += "\n; SUBNET: " + o.String() + case *EDNS0_COOKIE: + s += "\n; COOKIE: " + o.String() + case *EDNS0_UL: + s += "\n; UPDATE LEASE: " + o.String() + case *EDNS0_LLQ: + s += "\n; LONG LIVED QUERIES: " + o.String() + case *EDNS0_DAU: + s += "\n; DNSSEC ALGORITHM UNDERSTOOD: " + o.String() + case *EDNS0_DHU: + s += "\n; DS HASH UNDERSTOOD: " + o.String() + case *EDNS0_N3U: + s += "\n; NSEC3 HASH UNDERSTOOD: " + o.String() + case *EDNS0_LOCAL: + s += "\n; LOCAL OPT: " + o.String() + case *EDNS0_PADDING: + s += "\n; PADDING: " + o.String() + } + } + return s +} + +func (rr *OPT) len() int { + l := rr.Hdr.len() + for i := 0; i < len(rr.Option); i++ { + l += 4 // Account for 2-byte option code and 2-byte option length. + lo, _ := rr.Option[i].pack() + l += len(lo) + } + return l +} + +// return the old value -> delete SetVersion? + +// Version returns the EDNS version used. Only zero is defined. +func (rr *OPT) Version() uint8 { + return uint8(rr.Hdr.Ttl & 0x00FF0000 >> 16) +} + +// SetVersion sets the version of EDNS. This is usually zero. +func (rr *OPT) SetVersion(v uint8) { + rr.Hdr.Ttl = rr.Hdr.Ttl&0xFF00FFFF | uint32(v)<<16 +} + +// ExtendedRcode returns the EDNS extended RCODE field (the upper 8 bits of the TTL). +func (rr *OPT) ExtendedRcode() int { + return int(rr.Hdr.Ttl&0xFF000000>>24) + 15 +} + +// SetExtendedRcode sets the EDNS extended RCODE field. +func (rr *OPT) SetExtendedRcode(v uint8) { + if v < RcodeBadVers { // Smaller than 16.. Use the 4 bits you have! + return + } + rr.Hdr.Ttl = rr.Hdr.Ttl&0x00FFFFFF | uint32(v-15)<<24 +} + +// UDPSize returns the UDP buffer size. +func (rr *OPT) UDPSize() uint16 { + return rr.Hdr.Class +} + +// SetUDPSize sets the UDP buffer size. +func (rr *OPT) SetUDPSize(size uint16) { + rr.Hdr.Class = size +} + +// Do returns the value of the DO (DNSSEC OK) bit. +func (rr *OPT) Do() bool { + return rr.Hdr.Ttl&_DO == _DO +} + +// SetDo sets the DO (DNSSEC OK) bit. +// If we pass an argument, set the DO bit to that value. +// It is possible to pass 2 or more arguments. Any arguments after the 1st is silently ignored. +func (rr *OPT) SetDo(do ...bool) { + if len(do) == 1 { + if do[0] { + rr.Hdr.Ttl |= _DO + } else { + rr.Hdr.Ttl &^= _DO + } + } else { + rr.Hdr.Ttl |= _DO + } +} + +// EDNS0 defines an EDNS0 Option. An OPT RR can have multiple options appended to it. +type EDNS0 interface { + // Option returns the option code for the option. + Option() uint16 + // pack returns the bytes of the option data. + pack() ([]byte, error) + // unpack sets the data as found in the buffer. Is also sets + // the length of the slice as the length of the option data. + unpack([]byte) error + // String returns the string representation of the option. + String() string +} + +// EDNS0_NSID option is used to retrieve a nameserver +// identifier. When sending a request Nsid must be set to the empty string +// The identifier is an opaque string encoded as hex. +// Basic use pattern for creating an nsid option: +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_NSID) +// e.Code = dns.EDNS0NSID +// e.Nsid = "AA" +// o.Option = append(o.Option, e) +type EDNS0_NSID struct { + Code uint16 // Always EDNS0NSID + Nsid string // This string needs to be hex encoded +} + +func (e *EDNS0_NSID) pack() ([]byte, error) { + h, err := hex.DecodeString(e.Nsid) + if err != nil { + return nil, err + } + return h, nil +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_NSID) Option() uint16 { return EDNS0NSID } // Option returns the option code. +func (e *EDNS0_NSID) unpack(b []byte) error { e.Nsid = hex.EncodeToString(b); return nil } +func (e *EDNS0_NSID) String() string { return string(e.Nsid) } + +// EDNS0_SUBNET is the subnet option that is used to give the remote nameserver +// an idea of where the client lives. See RFC 7871. It can then give back a different +// answer depending on the location or network topology. +// Basic use pattern for creating an subnet option: +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_SUBNET) +// e.Code = dns.EDNS0SUBNET +// e.Family = 1 // 1 for IPv4 source address, 2 for IPv6 +// e.SourceNetmask = 32 // 32 for IPV4, 128 for IPv6 +// e.SourceScope = 0 +// e.Address = net.ParseIP("127.0.0.1").To4() // for IPv4 +// // e.Address = net.ParseIP("2001:7b8:32a::2") // for IPV6 +// o.Option = append(o.Option, e) +// +// This code will parse all the available bits when unpacking (up to optlen). +// When packing it will apply SourceNetmask. If you need more advanced logic, +// patches welcome and good luck. +type EDNS0_SUBNET struct { + Code uint16 // Always EDNS0SUBNET + Family uint16 // 1 for IP, 2 for IP6 + SourceNetmask uint8 + SourceScope uint8 + Address net.IP +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_SUBNET) Option() uint16 { return EDNS0SUBNET } + +func (e *EDNS0_SUBNET) pack() ([]byte, error) { + b := make([]byte, 4) + binary.BigEndian.PutUint16(b[0:], e.Family) + b[2] = e.SourceNetmask + b[3] = e.SourceScope + switch e.Family { + case 0: + // "dig" sets AddressFamily to 0 if SourceNetmask is also 0 + // We might don't need to complain either + if e.SourceNetmask != 0 { + return nil, errors.New("dns: bad address family") + } + case 1: + if e.SourceNetmask > net.IPv4len*8 { + return nil, errors.New("dns: bad netmask") + } + if len(e.Address.To4()) != net.IPv4len { + return nil, errors.New("dns: bad address") + } + ip := e.Address.To4().Mask(net.CIDRMask(int(e.SourceNetmask), net.IPv4len*8)) + needLength := (e.SourceNetmask + 8 - 1) / 8 // division rounding up + b = append(b, ip[:needLength]...) + case 2: + if e.SourceNetmask > net.IPv6len*8 { + return nil, errors.New("dns: bad netmask") + } + if len(e.Address) != net.IPv6len { + return nil, errors.New("dns: bad address") + } + ip := e.Address.Mask(net.CIDRMask(int(e.SourceNetmask), net.IPv6len*8)) + needLength := (e.SourceNetmask + 8 - 1) / 8 // division rounding up + b = append(b, ip[:needLength]...) + default: + return nil, errors.New("dns: bad address family") + } + return b, nil +} + +func (e *EDNS0_SUBNET) unpack(b []byte) error { + if len(b) < 4 { + return ErrBuf + } + e.Family = binary.BigEndian.Uint16(b) + e.SourceNetmask = b[2] + e.SourceScope = b[3] + switch e.Family { + case 0: + // "dig" sets AddressFamily to 0 if SourceNetmask is also 0 + // It's okay to accept such a packet + if e.SourceNetmask != 0 { + return errors.New("dns: bad address family") + } + e.Address = net.IPv4(0, 0, 0, 0) + case 1: + if e.SourceNetmask > net.IPv4len*8 || e.SourceScope > net.IPv4len*8 { + return errors.New("dns: bad netmask") + } + addr := make([]byte, net.IPv4len) + for i := 0; i < net.IPv4len && 4+i < len(b); i++ { + addr[i] = b[4+i] + } + e.Address = net.IPv4(addr[0], addr[1], addr[2], addr[3]) + case 2: + if e.SourceNetmask > net.IPv6len*8 || e.SourceScope > net.IPv6len*8 { + return errors.New("dns: bad netmask") + } + addr := make([]byte, net.IPv6len) + for i := 0; i < net.IPv6len && 4+i < len(b); i++ { + addr[i] = b[4+i] + } + e.Address = net.IP{addr[0], addr[1], addr[2], addr[3], addr[4], + addr[5], addr[6], addr[7], addr[8], addr[9], addr[10], + addr[11], addr[12], addr[13], addr[14], addr[15]} + default: + return errors.New("dns: bad address family") + } + return nil +} + +func (e *EDNS0_SUBNET) String() (s string) { + if e.Address == nil { + s = "" + } else if e.Address.To4() != nil { + s = e.Address.String() + } else { + s = "[" + e.Address.String() + "]" + } + s += "/" + strconv.Itoa(int(e.SourceNetmask)) + "/" + strconv.Itoa(int(e.SourceScope)) + return +} + +// The EDNS0_COOKIE option is used to add a DNS Cookie to a message. +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_COOKIE) +// e.Code = dns.EDNS0COOKIE +// e.Cookie = "24a5ac.." +// o.Option = append(o.Option, e) +// +// The Cookie field consists out of a client cookie (RFC 7873 Section 4), that is +// always 8 bytes. It may then optionally be followed by the server cookie. The server +// cookie is of variable length, 8 to a maximum of 32 bytes. In other words: +// +// cCookie := o.Cookie[:16] +// sCookie := o.Cookie[16:] +// +// There is no guarantee that the Cookie string has a specific length. +type EDNS0_COOKIE struct { + Code uint16 // Always EDNS0COOKIE + Cookie string // Hex-encoded cookie data +} + +func (e *EDNS0_COOKIE) pack() ([]byte, error) { + h, err := hex.DecodeString(e.Cookie) + if err != nil { + return nil, err + } + return h, nil +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_COOKIE) Option() uint16 { return EDNS0COOKIE } +func (e *EDNS0_COOKIE) unpack(b []byte) error { e.Cookie = hex.EncodeToString(b); return nil } +func (e *EDNS0_COOKIE) String() string { return e.Cookie } + +// The EDNS0_UL (Update Lease) (draft RFC) option is used to tell the server to set +// an expiration on an update RR. This is helpful for clients that cannot clean +// up after themselves. This is a draft RFC and more information can be found at +// http://files.dns-sd.org/draft-sekar-dns-ul.txt +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_UL) +// e.Code = dns.EDNS0UL +// e.Lease = 120 // in seconds +// o.Option = append(o.Option, e) +type EDNS0_UL struct { + Code uint16 // Always EDNS0UL + Lease uint32 +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_UL) Option() uint16 { return EDNS0UL } +func (e *EDNS0_UL) String() string { return strconv.FormatUint(uint64(e.Lease), 10) } + +// Copied: http://golang.org/src/pkg/net/dnsmsg.go +func (e *EDNS0_UL) pack() ([]byte, error) { + b := make([]byte, 4) + binary.BigEndian.PutUint32(b, e.Lease) + return b, nil +} + +func (e *EDNS0_UL) unpack(b []byte) error { + if len(b) < 4 { + return ErrBuf + } + e.Lease = binary.BigEndian.Uint32(b) + return nil +} + +// EDNS0_LLQ stands for Long Lived Queries: http://tools.ietf.org/html/draft-sekar-dns-llq-01 +// Implemented for completeness, as the EDNS0 type code is assigned. +type EDNS0_LLQ struct { + Code uint16 // Always EDNS0LLQ + Version uint16 + Opcode uint16 + Error uint16 + Id uint64 + LeaseLife uint32 +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_LLQ) Option() uint16 { return EDNS0LLQ } + +func (e *EDNS0_LLQ) pack() ([]byte, error) { + b := make([]byte, 18) + binary.BigEndian.PutUint16(b[0:], e.Version) + binary.BigEndian.PutUint16(b[2:], e.Opcode) + binary.BigEndian.PutUint16(b[4:], e.Error) + binary.BigEndian.PutUint64(b[6:], e.Id) + binary.BigEndian.PutUint32(b[14:], e.LeaseLife) + return b, nil +} + +func (e *EDNS0_LLQ) unpack(b []byte) error { + if len(b) < 18 { + return ErrBuf + } + e.Version = binary.BigEndian.Uint16(b[0:]) + e.Opcode = binary.BigEndian.Uint16(b[2:]) + e.Error = binary.BigEndian.Uint16(b[4:]) + e.Id = binary.BigEndian.Uint64(b[6:]) + e.LeaseLife = binary.BigEndian.Uint32(b[14:]) + return nil +} + +func (e *EDNS0_LLQ) String() string { + s := strconv.FormatUint(uint64(e.Version), 10) + " " + strconv.FormatUint(uint64(e.Opcode), 10) + + " " + strconv.FormatUint(uint64(e.Error), 10) + " " + strconv.FormatUint(uint64(e.Id), 10) + + " " + strconv.FormatUint(uint64(e.LeaseLife), 10) + return s +} + +// EDNS0_DUA implements the EDNS0 "DNSSEC Algorithm Understood" option. See RFC 6975. +type EDNS0_DAU struct { + Code uint16 // Always EDNS0DAU + AlgCode []uint8 +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_DAU) Option() uint16 { return EDNS0DAU } +func (e *EDNS0_DAU) pack() ([]byte, error) { return e.AlgCode, nil } +func (e *EDNS0_DAU) unpack(b []byte) error { e.AlgCode = b; return nil } + +func (e *EDNS0_DAU) String() string { + s := "" + for i := 0; i < len(e.AlgCode); i++ { + if a, ok := AlgorithmToString[e.AlgCode[i]]; ok { + s += " " + a + } else { + s += " " + strconv.Itoa(int(e.AlgCode[i])) + } + } + return s +} + +// EDNS0_DHU implements the EDNS0 "DS Hash Understood" option. See RFC 6975. +type EDNS0_DHU struct { + Code uint16 // Always EDNS0DHU + AlgCode []uint8 +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_DHU) Option() uint16 { return EDNS0DHU } +func (e *EDNS0_DHU) pack() ([]byte, error) { return e.AlgCode, nil } +func (e *EDNS0_DHU) unpack(b []byte) error { e.AlgCode = b; return nil } + +func (e *EDNS0_DHU) String() string { + s := "" + for i := 0; i < len(e.AlgCode); i++ { + if a, ok := HashToString[e.AlgCode[i]]; ok { + s += " " + a + } else { + s += " " + strconv.Itoa(int(e.AlgCode[i])) + } + } + return s +} + +// EDNS0_N3U implements the EDNS0 "NSEC3 Hash Understood" option. See RFC 6975. +type EDNS0_N3U struct { + Code uint16 // Always EDNS0N3U + AlgCode []uint8 +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_N3U) Option() uint16 { return EDNS0N3U } +func (e *EDNS0_N3U) pack() ([]byte, error) { return e.AlgCode, nil } +func (e *EDNS0_N3U) unpack(b []byte) error { e.AlgCode = b; return nil } + +func (e *EDNS0_N3U) String() string { + // Re-use the hash map + s := "" + for i := 0; i < len(e.AlgCode); i++ { + if a, ok := HashToString[e.AlgCode[i]]; ok { + s += " " + a + } else { + s += " " + strconv.Itoa(int(e.AlgCode[i])) + } + } + return s +} + +// EDNS0_EXPIRE implementes the EDNS0 option as described in RFC 7314. +type EDNS0_EXPIRE struct { + Code uint16 // Always EDNS0EXPIRE + Expire uint32 +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_EXPIRE) Option() uint16 { return EDNS0EXPIRE } +func (e *EDNS0_EXPIRE) String() string { return strconv.FormatUint(uint64(e.Expire), 10) } + +func (e *EDNS0_EXPIRE) pack() ([]byte, error) { + b := make([]byte, 4) + b[0] = byte(e.Expire >> 24) + b[1] = byte(e.Expire >> 16) + b[2] = byte(e.Expire >> 8) + b[3] = byte(e.Expire) + return b, nil +} + +func (e *EDNS0_EXPIRE) unpack(b []byte) error { + if len(b) < 4 { + return ErrBuf + } + e.Expire = binary.BigEndian.Uint32(b) + return nil +} + +// The EDNS0_LOCAL option is used for local/experimental purposes. The option +// code is recommended to be within the range [EDNS0LOCALSTART, EDNS0LOCALEND] +// (RFC6891), although any unassigned code can actually be used. The content of +// the option is made available in Data, unaltered. +// Basic use pattern for creating a local option: +// +// o := new(dns.OPT) +// o.Hdr.Name = "." +// o.Hdr.Rrtype = dns.TypeOPT +// e := new(dns.EDNS0_LOCAL) +// e.Code = dns.EDNS0LOCALSTART +// e.Data = []byte{72, 82, 74} +// o.Option = append(o.Option, e) +type EDNS0_LOCAL struct { + Code uint16 + Data []byte +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_LOCAL) Option() uint16 { return e.Code } +func (e *EDNS0_LOCAL) String() string { + return strconv.FormatInt(int64(e.Code), 10) + ":0x" + hex.EncodeToString(e.Data) +} + +func (e *EDNS0_LOCAL) pack() ([]byte, error) { + b := make([]byte, len(e.Data)) + copied := copy(b, e.Data) + if copied != len(e.Data) { + return nil, ErrBuf + } + return b, nil +} + +func (e *EDNS0_LOCAL) unpack(b []byte) error { + e.Data = make([]byte, len(b)) + copied := copy(e.Data, b) + if copied != len(b) { + return ErrBuf + } + return nil +} + +// EDNS0_TCP_KEEPALIVE is an EDNS0 option that instructs the server to keep +// the TCP connection alive. See RFC 7828. +type EDNS0_TCP_KEEPALIVE struct { + Code uint16 // Always EDNSTCPKEEPALIVE + Length uint16 // the value 0 if the TIMEOUT is omitted, the value 2 if it is present; + Timeout uint16 // an idle timeout value for the TCP connection, specified in units of 100 milliseconds, encoded in network byte order. +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_TCP_KEEPALIVE) Option() uint16 { return EDNS0TCPKEEPALIVE } + +func (e *EDNS0_TCP_KEEPALIVE) pack() ([]byte, error) { + if e.Timeout != 0 && e.Length != 2 { + return nil, errors.New("dns: timeout specified but length is not 2") + } + if e.Timeout == 0 && e.Length != 0 { + return nil, errors.New("dns: timeout not specified but length is not 0") + } + b := make([]byte, 4+e.Length) + binary.BigEndian.PutUint16(b[0:], e.Code) + binary.BigEndian.PutUint16(b[2:], e.Length) + if e.Length == 2 { + binary.BigEndian.PutUint16(b[4:], e.Timeout) + } + return b, nil +} + +func (e *EDNS0_TCP_KEEPALIVE) unpack(b []byte) error { + if len(b) < 4 { + return ErrBuf + } + e.Length = binary.BigEndian.Uint16(b[2:4]) + if e.Length != 0 && e.Length != 2 { + return errors.New("dns: length mismatch, want 0/2 but got " + strconv.FormatUint(uint64(e.Length), 10)) + } + if e.Length == 2 { + if len(b) < 6 { + return ErrBuf + } + e.Timeout = binary.BigEndian.Uint16(b[4:6]) + } + return nil +} + +func (e *EDNS0_TCP_KEEPALIVE) String() (s string) { + s = "use tcp keep-alive" + if e.Length == 0 { + s += ", timeout omitted" + } else { + s += fmt.Sprintf(", timeout %dms", e.Timeout*100) + } + return +} + +// EDNS0_PADDING option is used to add padding to a request/response. The default +// value of padding SHOULD be 0x0 but other values MAY be used, for instance if +// compression is applied before encryption which may break signatures. +type EDNS0_PADDING struct { + Padding []byte +} + +// Option implements the EDNS0 interface. +func (e *EDNS0_PADDING) Option() uint16 { return EDNS0PADDING } +func (e *EDNS0_PADDING) pack() ([]byte, error) { return e.Padding, nil } +func (e *EDNS0_PADDING) unpack(b []byte) error { e.Padding = b; return nil } +func (e *EDNS0_PADDING) String() string { return fmt.Sprintf("%0X", e.Padding) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/format.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/format.go new file mode 100644 index 00000000000..3f5303c2013 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/format.go @@ -0,0 +1,87 @@ +package dns + +import ( + "net" + "reflect" + "strconv" +) + +// NumField returns the number of rdata fields r has. +func NumField(r RR) int { + return reflect.ValueOf(r).Elem().NumField() - 1 // Remove RR_Header +} + +// Field returns the rdata field i as a string. Fields are indexed starting from 1. +// RR types that holds slice data, for instance the NSEC type bitmap will return a single +// string where the types are concatenated using a space. +// Accessing non existing fields will cause a panic. +func Field(r RR, i int) string { + if i == 0 { + return "" + } + d := reflect.ValueOf(r).Elem().Field(i) + switch k := d.Kind(); k { + case reflect.String: + return d.String() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return strconv.FormatInt(d.Int(), 10) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return strconv.FormatUint(d.Uint(), 10) + case reflect.Slice: + switch reflect.ValueOf(r).Elem().Type().Field(i).Tag { + case `dns:"a"`: + // TODO(miek): Hmm store this as 16 bytes + if d.Len() < net.IPv6len { + return net.IPv4(byte(d.Index(0).Uint()), + byte(d.Index(1).Uint()), + byte(d.Index(2).Uint()), + byte(d.Index(3).Uint())).String() + } + return net.IPv4(byte(d.Index(12).Uint()), + byte(d.Index(13).Uint()), + byte(d.Index(14).Uint()), + byte(d.Index(15).Uint())).String() + case `dns:"aaaa"`: + return net.IP{ + byte(d.Index(0).Uint()), + byte(d.Index(1).Uint()), + byte(d.Index(2).Uint()), + byte(d.Index(3).Uint()), + byte(d.Index(4).Uint()), + byte(d.Index(5).Uint()), + byte(d.Index(6).Uint()), + byte(d.Index(7).Uint()), + byte(d.Index(8).Uint()), + byte(d.Index(9).Uint()), + byte(d.Index(10).Uint()), + byte(d.Index(11).Uint()), + byte(d.Index(12).Uint()), + byte(d.Index(13).Uint()), + byte(d.Index(14).Uint()), + byte(d.Index(15).Uint()), + }.String() + case `dns:"nsec"`: + if d.Len() == 0 { + return "" + } + s := Type(d.Index(0).Uint()).String() + for i := 1; i < d.Len(); i++ { + s += " " + Type(d.Index(i).Uint()).String() + } + return s + default: + // if it does not have a tag its a string slice + fallthrough + case `dns:"txt"`: + if d.Len() == 0 { + return "" + } + s := d.Index(0).String() + for i := 1; i < d.Len(); i++ { + s += " " + d.Index(i).String() + } + return s + } + } + return "" +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/fuzz.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/fuzz.go new file mode 100644 index 00000000000..a8a09184d40 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/fuzz.go @@ -0,0 +1,23 @@ +// +build fuzz + +package dns + +func Fuzz(data []byte) int { + msg := new(Msg) + + if err := msg.Unpack(data); err != nil { + return 0 + } + if _, err := msg.Pack(); err != nil { + return 0 + } + + return 1 +} + +func FuzzNewRR(data []byte) int { + if _, err := NewRR(string(data)); err != nil { + return 0 + } + return 1 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/generate.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/generate.go new file mode 100644 index 00000000000..97bc39f58a8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/generate.go @@ -0,0 +1,242 @@ +package dns + +import ( + "bytes" + "fmt" + "io" + "strconv" + "strings" +) + +// Parse the $GENERATE statement as used in BIND9 zones. +// See http://www.zytrax.com/books/dns/ch8/generate.html for instance. +// We are called after '$GENERATE '. After which we expect: +// * the range (12-24/2) +// * lhs (ownername) +// * [[ttl][class]] +// * type +// * rhs (rdata) +// But we are lazy here, only the range is parsed *all* occurrences +// of $ after that are interpreted. +func (zp *ZoneParser) generate(l lex) (RR, bool) { + token := l.token + step := 1 + if i := strings.IndexByte(token, '/'); i >= 0 { + if i+1 == len(token) { + return zp.setParseError("bad step in $GENERATE range", l) + } + + s, err := strconv.Atoi(token[i+1:]) + if err != nil || s <= 0 { + return zp.setParseError("bad step in $GENERATE range", l) + } + + step = s + token = token[:i] + } + + sx := strings.SplitN(token, "-", 2) + if len(sx) != 2 { + return zp.setParseError("bad start-stop in $GENERATE range", l) + } + + start, err := strconv.Atoi(sx[0]) + if err != nil { + return zp.setParseError("bad start in $GENERATE range", l) + } + + end, err := strconv.Atoi(sx[1]) + if err != nil { + return zp.setParseError("bad stop in $GENERATE range", l) + } + if end < 0 || start < 0 || end < start { + return zp.setParseError("bad range in $GENERATE range", l) + } + + zp.c.Next() // _BLANK + + // Create a complete new string, which we then parse again. + var s string + for l, ok := zp.c.Next(); ok; l, ok = zp.c.Next() { + if l.err { + return zp.setParseError("bad data in $GENERATE directive", l) + } + if l.value == zNewline { + break + } + + s += l.token + } + + r := &generateReader{ + s: s, + + cur: start, + start: start, + end: end, + step: step, + + file: zp.file, + lex: &l, + } + zp.sub = NewZoneParser(r, zp.origin, zp.file) + zp.sub.includeDepth, zp.sub.includeAllowed = zp.includeDepth, zp.includeAllowed + zp.sub.SetDefaultTTL(defaultTtl) + return zp.subNext() +} + +type generateReader struct { + s string + si int + + cur int + start int + end int + step int + + mod bytes.Buffer + + escape bool + + eof bool + + file string + lex *lex +} + +func (r *generateReader) parseError(msg string, end int) *ParseError { + r.eof = true // Make errors sticky. + + l := *r.lex + l.token = r.s[r.si-1 : end] + l.column += r.si // l.column starts one zBLANK before r.s + + return &ParseError{r.file, msg, l} +} + +func (r *generateReader) Read(p []byte) (int, error) { + // NewZLexer, through NewZoneParser, should use ReadByte and + // not end up here. + + panic("not implemented") +} + +func (r *generateReader) ReadByte() (byte, error) { + if r.eof { + return 0, io.EOF + } + if r.mod.Len() > 0 { + return r.mod.ReadByte() + } + + if r.si >= len(r.s) { + r.si = 0 + r.cur += r.step + + r.eof = r.cur > r.end || r.cur < 0 + return '\n', nil + } + + si := r.si + r.si++ + + switch r.s[si] { + case '\\': + if r.escape { + r.escape = false + return '\\', nil + } + + r.escape = true + return r.ReadByte() + case '$': + if r.escape { + r.escape = false + return '$', nil + } + + mod := "%d" + + if si >= len(r.s)-1 { + // End of the string + fmt.Fprintf(&r.mod, mod, r.cur) + return r.mod.ReadByte() + } + + if r.s[si+1] == '$' { + r.si++ + return '$', nil + } + + var offset int + + // Search for { and } + if r.s[si+1] == '{' { + // Modifier block + sep := strings.Index(r.s[si+2:], "}") + if sep < 0 { + return 0, r.parseError("bad modifier in $GENERATE", len(r.s)) + } + + var errMsg string + mod, offset, errMsg = modToPrintf(r.s[si+2 : si+2+sep]) + if errMsg != "" { + return 0, r.parseError(errMsg, si+3+sep) + } + if r.start+offset < 0 || r.end+offset > 1<<31-1 { + return 0, r.parseError("bad offset in $GENERATE", si+3+sep) + } + + r.si += 2 + sep // Jump to it + } + + fmt.Fprintf(&r.mod, mod, r.cur+offset) + return r.mod.ReadByte() + default: + if r.escape { // Pretty useless here + r.escape = false + return r.ReadByte() + } + + return r.s[si], nil + } +} + +// Convert a $GENERATE modifier 0,0,d to something Printf can deal with. +func modToPrintf(s string) (string, int, string) { + // Modifier is { offset [ ,width [ ,base ] ] } - provide default + // values for optional width and type, if necessary. + var offStr, widthStr, base string + switch xs := strings.Split(s, ","); len(xs) { + case 1: + offStr, widthStr, base = xs[0], "0", "d" + case 2: + offStr, widthStr, base = xs[0], xs[1], "d" + case 3: + offStr, widthStr, base = xs[0], xs[1], xs[2] + default: + return "", 0, "bad modifier in $GENERATE" + } + + switch base { + case "o", "d", "x", "X": + default: + return "", 0, "bad base in $GENERATE" + } + + offset, err := strconv.Atoi(offStr) + if err != nil { + return "", 0, "bad offset in $GENERATE" + } + + width, err := strconv.Atoi(widthStr) + if err != nil || width < 0 || width > 255 { + return "", 0, "bad width in $GENERATE" + } + + if width == 0 { + return "%" + base, offset, "" + } + + return "%0" + widthStr + base, offset, "" +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/labels.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/labels.go new file mode 100644 index 00000000000..577fc59d2cc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/labels.go @@ -0,0 +1,191 @@ +package dns + +// Holds a bunch of helper functions for dealing with labels. + +// SplitDomainName splits a name string into it's labels. +// www.miek.nl. returns []string{"www", "miek", "nl"} +// .www.miek.nl. returns []string{"", "www", "miek", "nl"}, +// The root label (.) returns nil. Note that using +// strings.Split(s) will work in most cases, but does not handle +// escaped dots (\.) for instance. +// s must be a syntactically valid domain name, see IsDomainName. +func SplitDomainName(s string) (labels []string) { + if len(s) == 0 { + return nil + } + fqdnEnd := 0 // offset of the final '.' or the length of the name + idx := Split(s) + begin := 0 + if s[len(s)-1] == '.' { + fqdnEnd = len(s) - 1 + } else { + fqdnEnd = len(s) + } + + switch len(idx) { + case 0: + return nil + case 1: + // no-op + default: + end := 0 + for i := 1; i < len(idx); i++ { + end = idx[i] + labels = append(labels, s[begin:end-1]) + begin = end + } + } + + labels = append(labels, s[begin:fqdnEnd]) + return labels +} + +// CompareDomainName compares the names s1 and s2 and +// returns how many labels they have in common starting from the *right*. +// The comparison stops at the first inequality. The names are downcased +// before the comparison. +// +// www.miek.nl. and miek.nl. have two labels in common: miek and nl +// www.miek.nl. and www.bla.nl. have one label in common: nl +// +// s1 and s2 must be syntactically valid domain names. +func CompareDomainName(s1, s2 string) (n int) { + // the first check: root label + if s1 == "." || s2 == "." { + return 0 + } + + l1 := Split(s1) + l2 := Split(s2) + + j1 := len(l1) - 1 // end + i1 := len(l1) - 2 // start + j2 := len(l2) - 1 + i2 := len(l2) - 2 + // the second check can be done here: last/only label + // before we fall through into the for-loop below + if equal(s1[l1[j1]:], s2[l2[j2]:]) { + n++ + } else { + return + } + for { + if i1 < 0 || i2 < 0 { + break + } + if equal(s1[l1[i1]:l1[j1]], s2[l2[i2]:l2[j2]]) { + n++ + } else { + break + } + j1-- + i1-- + j2-- + i2-- + } + return +} + +// CountLabel counts the the number of labels in the string s. +// s must be a syntactically valid domain name. +func CountLabel(s string) (labels int) { + if s == "." { + return + } + off := 0 + end := false + for { + off, end = NextLabel(s, off) + labels++ + if end { + return + } + } +} + +// Split splits a name s into its label indexes. +// www.miek.nl. returns []int{0, 4, 9}, www.miek.nl also returns []int{0, 4, 9}. +// The root name (.) returns nil. Also see SplitDomainName. +// s must be a syntactically valid domain name. +func Split(s string) []int { + if s == "." { + return nil + } + idx := make([]int, 1, 3) + off := 0 + end := false + + for { + off, end = NextLabel(s, off) + if end { + return idx + } + idx = append(idx, off) + } +} + +// NextLabel returns the index of the start of the next label in the +// string s starting at offset. +// The bool end is true when the end of the string has been reached. +// Also see PrevLabel. +func NextLabel(s string, offset int) (i int, end bool) { + quote := false + for i = offset; i < len(s)-1; i++ { + switch s[i] { + case '\\': + quote = !quote + default: + quote = false + case '.': + if quote { + quote = !quote + continue + } + return i + 1, false + } + } + return i + 1, true +} + +// PrevLabel returns the index of the label when starting from the right and +// jumping n labels to the left. +// The bool start is true when the start of the string has been overshot. +// Also see NextLabel. +func PrevLabel(s string, n int) (i int, start bool) { + if n == 0 { + return len(s), false + } + lab := Split(s) + if lab == nil { + return 0, true + } + if n > len(lab) { + return 0, true + } + return lab[len(lab)-n], false +} + +// equal compares a and b while ignoring case. It returns true when equal otherwise false. +func equal(a, b string) bool { + // might be lifted into API function. + la := len(a) + lb := len(b) + if la != lb { + return false + } + + for i := la - 1; i >= 0; i-- { + ai := a[i] + bi := b[i] + if ai >= 'A' && ai <= 'Z' { + ai |= 'a' - 'A' + } + if bi >= 'A' && bi <= 'Z' { + bi |= 'a' - 'A' + } + if ai != bi { + return false + } + } + return true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/listen_go111.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/listen_go111.go new file mode 100644 index 00000000000..fad195cfeb4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/listen_go111.go @@ -0,0 +1,44 @@ +// +build go1.11 +// +build aix darwin dragonfly freebsd linux netbsd openbsd + +package dns + +import ( + "context" + "net" + "syscall" + + "golang.org/x/sys/unix" +) + +const supportsReusePort = true + +func reuseportControl(network, address string, c syscall.RawConn) error { + var opErr error + err := c.Control(func(fd uintptr) { + opErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1) + }) + if err != nil { + return err + } + + return opErr +} + +func listenTCP(network, addr string, reuseport bool) (net.Listener, error) { + var lc net.ListenConfig + if reuseport { + lc.Control = reuseportControl + } + + return lc.Listen(context.Background(), network, addr) +} + +func listenUDP(network, addr string, reuseport bool) (net.PacketConn, error) { + var lc net.ListenConfig + if reuseport { + lc.Control = reuseportControl + } + + return lc.ListenPacket(context.Background(), network, addr) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/listen_go_not111.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/listen_go_not111.go new file mode 100644 index 00000000000..b9201417abe --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/listen_go_not111.go @@ -0,0 +1,23 @@ +// +build !go1.11 !aix,!darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd + +package dns + +import "net" + +const supportsReusePort = false + +func listenTCP(network, addr string, reuseport bool) (net.Listener, error) { + if reuseport { + // TODO(tmthrgd): return an error? + } + + return net.Listen(network, addr) +} + +func listenUDP(network, addr string, reuseport bool) (net.PacketConn, error) { + if reuseport { + // TODO(tmthrgd): return an error? + } + + return net.ListenPacket(network, addr) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg.go new file mode 100644 index 00000000000..47ac6cf2813 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg.go @@ -0,0 +1,1181 @@ +// DNS packet assembly, see RFC 1035. Converting from - Unpack() - +// and to - Pack() - wire format. +// All the packers and unpackers take a (msg []byte, off int) +// and return (off1 int, ok bool). If they return ok==false, they +// also return off1==len(msg), so that the next unpacker will +// also fail. This lets us avoid checks of ok until the end of a +// packing sequence. + +package dns + +//go:generate go run msg_generate.go +//go:generate go run compress_generate.go + +import ( + crand "crypto/rand" + "encoding/binary" + "fmt" + "math/big" + "math/rand" + "strconv" + "sync" +) + +const ( + maxCompressionOffset = 2 << 13 // We have 14 bits for the compression pointer + maxDomainNameWireOctets = 255 // See RFC 1035 section 2.3.4 +) + +// Errors defined in this package. +var ( + ErrAlg error = &Error{err: "bad algorithm"} // ErrAlg indicates an error with the (DNSSEC) algorithm. + ErrAuth error = &Error{err: "bad authentication"} // ErrAuth indicates an error in the TSIG authentication. + ErrBuf error = &Error{err: "buffer size too small"} // ErrBuf indicates that the buffer used is too small for the message. + ErrConnEmpty error = &Error{err: "conn has no connection"} // ErrConnEmpty indicates a connection is being used before it is initialized. + ErrExtendedRcode error = &Error{err: "bad extended rcode"} // ErrExtendedRcode ... + ErrFqdn error = &Error{err: "domain must be fully qualified"} // ErrFqdn indicates that a domain name does not have a closing dot. + ErrId error = &Error{err: "id mismatch"} // ErrId indicates there is a mismatch with the message's ID. + ErrKeyAlg error = &Error{err: "bad key algorithm"} // ErrKeyAlg indicates that the algorithm in the key is not valid. + ErrKey error = &Error{err: "bad key"} + ErrKeySize error = &Error{err: "bad key size"} + ErrLongDomain error = &Error{err: fmt.Sprintf("domain name exceeded %d wire-format octets", maxDomainNameWireOctets)} + ErrNoSig error = &Error{err: "no signature found"} + ErrPrivKey error = &Error{err: "bad private key"} + ErrRcode error = &Error{err: "bad rcode"} + ErrRdata error = &Error{err: "bad rdata"} + ErrRRset error = &Error{err: "bad rrset"} + ErrSecret error = &Error{err: "no secrets defined"} + ErrShortRead error = &Error{err: "short read"} + ErrSig error = &Error{err: "bad signature"} // ErrSig indicates that a signature can not be cryptographically validated. + ErrSoa error = &Error{err: "no SOA"} // ErrSOA indicates that no SOA RR was seen when doing zone transfers. + ErrTime error = &Error{err: "bad time"} // ErrTime indicates a timing error in TSIG authentication. + ErrTruncated error = &Error{err: "failed to unpack truncated message"} // ErrTruncated indicates that we failed to unpack a truncated message. We unpacked as much as we had so Msg can still be used, if desired. +) + +// Id by default, returns a 16 bits random number to be used as a +// message id. The random provided should be good enough. This being a +// variable the function can be reassigned to a custom function. +// For instance, to make it return a static value: +// +// dns.Id = func() uint16 { return 3 } +var Id = id + +var ( + idLock sync.Mutex + idRand *rand.Rand +) + +// id returns a 16 bits random number to be used as a +// message id. The random provided should be good enough. +func id() uint16 { + idLock.Lock() + + if idRand == nil { + // This (partially) works around + // https://github.com/golang/go/issues/11833 by only + // seeding idRand upon the first call to id. + + var seed int64 + var buf [8]byte + + if _, err := crand.Read(buf[:]); err == nil { + seed = int64(binary.LittleEndian.Uint64(buf[:])) + } else { + seed = rand.Int63() + } + + idRand = rand.New(rand.NewSource(seed)) + } + + // The call to idRand.Uint32 must be within the + // mutex lock because *rand.Rand is not safe for + // concurrent use. + // + // There is no added performance overhead to calling + // idRand.Uint32 inside a mutex lock over just + // calling rand.Uint32 as the global math/rand rng + // is internally protected by a sync.Mutex. + id := uint16(idRand.Uint32()) + + idLock.Unlock() + return id +} + +// MsgHdr is a a manually-unpacked version of (id, bits). +type MsgHdr struct { + Id uint16 + Response bool + Opcode int + Authoritative bool + Truncated bool + RecursionDesired bool + RecursionAvailable bool + Zero bool + AuthenticatedData bool + CheckingDisabled bool + Rcode int +} + +// Msg contains the layout of a DNS message. +type Msg struct { + MsgHdr + Compress bool `json:"-"` // If true, the message will be compressed when converted to wire format. + Question []Question // Holds the RR(s) of the question section. + Answer []RR // Holds the RR(s) of the answer section. + Ns []RR // Holds the RR(s) of the authority section. + Extra []RR // Holds the RR(s) of the additional section. +} + +// ClassToString is a maps Classes to strings for each CLASS wire type. +var ClassToString = map[uint16]string{ + ClassINET: "IN", + ClassCSNET: "CS", + ClassCHAOS: "CH", + ClassHESIOD: "HS", + ClassNONE: "NONE", + ClassANY: "ANY", +} + +// OpcodeToString maps Opcodes to strings. +var OpcodeToString = map[int]string{ + OpcodeQuery: "QUERY", + OpcodeIQuery: "IQUERY", + OpcodeStatus: "STATUS", + OpcodeNotify: "NOTIFY", + OpcodeUpdate: "UPDATE", +} + +// RcodeToString maps Rcodes to strings. +var RcodeToString = map[int]string{ + RcodeSuccess: "NOERROR", + RcodeFormatError: "FORMERR", + RcodeServerFailure: "SERVFAIL", + RcodeNameError: "NXDOMAIN", + RcodeNotImplemented: "NOTIMPL", + RcodeRefused: "REFUSED", + RcodeYXDomain: "YXDOMAIN", // See RFC 2136 + RcodeYXRrset: "YXRRSET", + RcodeNXRrset: "NXRRSET", + RcodeNotAuth: "NOTAUTH", + RcodeNotZone: "NOTZONE", + RcodeBadSig: "BADSIG", // Also known as RcodeBadVers, see RFC 6891 + // RcodeBadVers: "BADVERS", + RcodeBadKey: "BADKEY", + RcodeBadTime: "BADTIME", + RcodeBadMode: "BADMODE", + RcodeBadName: "BADNAME", + RcodeBadAlg: "BADALG", + RcodeBadTrunc: "BADTRUNC", + RcodeBadCookie: "BADCOOKIE", +} + +// Domain names are a sequence of counted strings +// split at the dots. They end with a zero-length string. + +// PackDomainName packs a domain name s into msg[off:]. +// If compression is wanted compress must be true and the compression +// map needs to hold a mapping between domain names and offsets +// pointing into msg. +func PackDomainName(s string, msg []byte, off int, compression map[string]int, compress bool) (off1 int, err error) { + off1, _, err = packDomainName(s, msg, off, compression, compress) + return +} + +func packDomainName(s string, msg []byte, off int, compression map[string]int, compress bool) (off1 int, labels int, err error) { + // special case if msg == nil + lenmsg := 256 + if msg != nil { + lenmsg = len(msg) + } + ls := len(s) + if ls == 0 { // Ok, for instance when dealing with update RR without any rdata. + return off, 0, nil + } + // If not fully qualified, error out, but only if msg == nil #ugly + switch { + case msg == nil: + if s[ls-1] != '.' { + s += "." + ls++ + } + case msg != nil: + if s[ls-1] != '.' { + return lenmsg, 0, ErrFqdn + } + } + // Each dot ends a segment of the name. + // We trade each dot byte for a length byte. + // Except for escaped dots (\.), which are normal dots. + // There is also a trailing zero. + + // Compression + nameoffset := -1 + pointer := -1 + // Emit sequence of counted strings, chopping at dots. + begin := 0 + bs := []byte(s) + roBs, bsFresh, escapedDot := s, true, false + for i := 0; i < ls; i++ { + if bs[i] == '\\' { + for j := i; j < ls-1; j++ { + bs[j] = bs[j+1] + } + ls-- + if off+1 > lenmsg { + return lenmsg, labels, ErrBuf + } + // check for \DDD + if i+2 < ls && isDigit(bs[i]) && isDigit(bs[i+1]) && isDigit(bs[i+2]) { + bs[i] = dddToByte(bs[i:]) + for j := i + 1; j < ls-2; j++ { + bs[j] = bs[j+2] + } + ls -= 2 + } + escapedDot = bs[i] == '.' + bsFresh = false + continue + } + + if bs[i] == '.' { + if i > 0 && bs[i-1] == '.' && !escapedDot { + // two dots back to back is not legal + return lenmsg, labels, ErrRdata + } + if i-begin >= 1<<6 { // top two bits of length must be clear + return lenmsg, labels, ErrRdata + } + // off can already (we're in a loop) be bigger than len(msg) + // this happens when a name isn't fully qualified + if off+1 > lenmsg { + return lenmsg, labels, ErrBuf + } + if msg != nil { + msg[off] = byte(i - begin) + } + offset := off + off++ + for j := begin; j < i; j++ { + if off+1 > lenmsg { + return lenmsg, labels, ErrBuf + } + if msg != nil { + msg[off] = bs[j] + } + off++ + } + if compress && !bsFresh { + roBs = string(bs) + bsFresh = true + } + // Don't try to compress '.' + // We should only compress when compress it true, but we should also still pick + // up names that can be used for *future* compression(s). + if compression != nil && roBs[begin:] != "." { + if p, ok := compression[roBs[begin:]]; !ok { + // Only offsets smaller than this can be used. + if offset < maxCompressionOffset { + compression[roBs[begin:]] = offset + } + } else { + // The first hit is the longest matching dname + // keep the pointer offset we get back and store + // the offset of the current name, because that's + // where we need to insert the pointer later + + // If compress is true, we're allowed to compress this dname + if pointer == -1 && compress { + pointer = p // Where to point to + nameoffset = offset // Where to point from + break + } + } + } + labels++ + begin = i + 1 + } + escapedDot = false + } + // Root label is special + if len(bs) == 1 && bs[0] == '.' { + return off, labels, nil + } + // If we did compression and we find something add the pointer here + if pointer != -1 { + // Clear the msg buffer after the pointer location, otherwise + // packDataNsec writes the wrong data to msg. + tainted := msg[nameoffset:off] + for i := range tainted { + tainted[i] = 0 + } + // We have two bytes (14 bits) to put the pointer in + // if msg == nil, we will never do compression + binary.BigEndian.PutUint16(msg[nameoffset:], uint16(pointer^0xC000)) + off = nameoffset + 1 + goto End + } + if msg != nil && off < len(msg) { + msg[off] = 0 + } +End: + off++ + return off, labels, nil +} + +// Unpack a domain name. +// In addition to the simple sequences of counted strings above, +// domain names are allowed to refer to strings elsewhere in the +// packet, to avoid repeating common suffixes when returning +// many entries in a single domain. The pointers are marked +// by a length byte with the top two bits set. Ignoring those +// two bits, that byte and the next give a 14 bit offset from msg[0] +// where we should pick up the trail. +// Note that if we jump elsewhere in the packet, +// we return off1 == the offset after the first pointer we found, +// which is where the next record will start. +// In theory, the pointers are only allowed to jump backward. +// We let them jump anywhere and stop jumping after a while. + +// UnpackDomainName unpacks a domain name into a string. +func UnpackDomainName(msg []byte, off int) (string, int, error) { + s := make([]byte, 0, 64) + off1 := 0 + lenmsg := len(msg) + maxLen := maxDomainNameWireOctets + ptr := 0 // number of pointers followed +Loop: + for { + if off >= lenmsg { + return "", lenmsg, ErrBuf + } + c := int(msg[off]) + off++ + switch c & 0xC0 { + case 0x00: + if c == 0x00 { + // end of name + break Loop + } + // literal string + if off+c > lenmsg { + return "", lenmsg, ErrBuf + } + for j := off; j < off+c; j++ { + switch b := msg[j]; b { + case '.', '(', ')', ';', ' ', '@': + fallthrough + case '"', '\\': + s = append(s, '\\', b) + // presentation-format \X escapes add an extra byte + maxLen++ + default: + if b < 32 || b >= 127 { // unprintable, use \DDD + var buf [3]byte + bufs := strconv.AppendInt(buf[:0], int64(b), 10) + s = append(s, '\\') + for i := len(bufs); i < 3; i++ { + s = append(s, '0') + } + s = append(s, bufs...) + // presentation-format \DDD escapes add 3 extra bytes + maxLen += 3 + } else { + s = append(s, b) + } + } + } + s = append(s, '.') + off += c + case 0xC0: + // pointer to somewhere else in msg. + // remember location after first ptr, + // since that's how many bytes we consumed. + // also, don't follow too many pointers -- + // maybe there's a loop. + if off >= lenmsg { + return "", lenmsg, ErrBuf + } + c1 := msg[off] + off++ + if ptr == 0 { + off1 = off + } + if ptr++; ptr > 10 { + return "", lenmsg, &Error{err: "too many compression pointers"} + } + // pointer should guarantee that it advances and points forwards at least + // but the condition on previous three lines guarantees that it's + // at least loop-free + off = (c^0xC0)<<8 | int(c1) + default: + // 0x80 and 0x40 are reserved + return "", lenmsg, ErrRdata + } + } + if ptr == 0 { + off1 = off + } + if len(s) == 0 { + s = []byte(".") + } else if len(s) >= maxLen { + // error if the name is too long, but don't throw it away + return string(s), lenmsg, ErrLongDomain + } + return string(s), off1, nil +} + +func packTxt(txt []string, msg []byte, offset int, tmp []byte) (int, error) { + if len(txt) == 0 { + if offset >= len(msg) { + return offset, ErrBuf + } + msg[offset] = 0 + return offset, nil + } + var err error + for i := range txt { + if len(txt[i]) > len(tmp) { + return offset, ErrBuf + } + offset, err = packTxtString(txt[i], msg, offset, tmp) + if err != nil { + return offset, err + } + } + return offset, nil +} + +func packTxtString(s string, msg []byte, offset int, tmp []byte) (int, error) { + lenByteOffset := offset + if offset >= len(msg) || len(s) > len(tmp) { + return offset, ErrBuf + } + offset++ + bs := tmp[:len(s)] + copy(bs, s) + for i := 0; i < len(bs); i++ { + if len(msg) <= offset { + return offset, ErrBuf + } + if bs[i] == '\\' { + i++ + if i == len(bs) { + break + } + // check for \DDD + if i+2 < len(bs) && isDigit(bs[i]) && isDigit(bs[i+1]) && isDigit(bs[i+2]) { + msg[offset] = dddToByte(bs[i:]) + i += 2 + } else { + msg[offset] = bs[i] + } + } else { + msg[offset] = bs[i] + } + offset++ + } + l := offset - lenByteOffset - 1 + if l > 255 { + return offset, &Error{err: "string exceeded 255 bytes in txt"} + } + msg[lenByteOffset] = byte(l) + return offset, nil +} + +func packOctetString(s string, msg []byte, offset int, tmp []byte) (int, error) { + if offset >= len(msg) || len(s) > len(tmp) { + return offset, ErrBuf + } + bs := tmp[:len(s)] + copy(bs, s) + for i := 0; i < len(bs); i++ { + if len(msg) <= offset { + return offset, ErrBuf + } + if bs[i] == '\\' { + i++ + if i == len(bs) { + break + } + // check for \DDD + if i+2 < len(bs) && isDigit(bs[i]) && isDigit(bs[i+1]) && isDigit(bs[i+2]) { + msg[offset] = dddToByte(bs[i:]) + i += 2 + } else { + msg[offset] = bs[i] + } + } else { + msg[offset] = bs[i] + } + offset++ + } + return offset, nil +} + +func unpackTxt(msg []byte, off0 int) (ss []string, off int, err error) { + off = off0 + var s string + for off < len(msg) && err == nil { + s, off, err = unpackString(msg, off) + if err == nil { + ss = append(ss, s) + } + } + return +} + +// Helpers for dealing with escaped bytes +func isDigit(b byte) bool { return b >= '0' && b <= '9' } + +func dddToByte(s []byte) byte { + return byte((s[0]-'0')*100 + (s[1]-'0')*10 + (s[2] - '0')) +} + +func dddStringToByte(s string) byte { + return byte((s[0]-'0')*100 + (s[1]-'0')*10 + (s[2] - '0')) +} + +// Helper function for packing and unpacking +func intToBytes(i *big.Int, length int) []byte { + buf := i.Bytes() + if len(buf) < length { + b := make([]byte, length) + copy(b[length-len(buf):], buf) + return b + } + return buf +} + +// PackRR packs a resource record rr into msg[off:]. +// See PackDomainName for documentation about the compression. +func PackRR(rr RR, msg []byte, off int, compression map[string]int, compress bool) (off1 int, err error) { + if rr == nil { + return len(msg), &Error{err: "nil rr"} + } + + off1, err = rr.pack(msg, off, compression, compress) + if err != nil { + return len(msg), err + } + // TODO(miek): Not sure if this is needed? If removed we can remove rawmsg.go as well. + if rawSetRdlength(msg, off, off1) { + return off1, nil + } + return off, ErrRdata +} + +// UnpackRR unpacks msg[off:] into an RR. +func UnpackRR(msg []byte, off int) (rr RR, off1 int, err error) { + h, off, msg, err := unpackHeader(msg, off) + if err != nil { + return nil, len(msg), err + } + + return UnpackRRWithHeader(h, msg, off) +} + +// UnpackRRWithHeader unpacks the record type specific payload given an existing +// RR_Header. +func UnpackRRWithHeader(h RR_Header, msg []byte, off int) (rr RR, off1 int, err error) { + end := off + int(h.Rdlength) + + if fn, known := typeToUnpack[h.Rrtype]; !known { + rr, off, err = unpackRFC3597(h, msg, off) + } else { + rr, off, err = fn(h, msg, off) + } + if off != end { + return &h, end, &Error{err: "bad rdlength"} + } + return rr, off, err +} + +// unpackRRslice unpacks msg[off:] into an []RR. +// If we cannot unpack the whole array, then it will return nil +func unpackRRslice(l int, msg []byte, off int) (dst1 []RR, off1 int, err error) { + var r RR + // Don't pre-allocate, l may be under attacker control + var dst []RR + for i := 0; i < l; i++ { + off1 := off + r, off, err = UnpackRR(msg, off) + if err != nil { + off = len(msg) + break + } + // If offset does not increase anymore, l is a lie + if off1 == off { + l = i + break + } + dst = append(dst, r) + } + if err != nil && off == len(msg) { + dst = nil + } + return dst, off, err +} + +// Convert a MsgHdr to a string, with dig-like headers: +// +//;; opcode: QUERY, status: NOERROR, id: 48404 +// +//;; flags: qr aa rd ra; +func (h *MsgHdr) String() string { + if h == nil { + return " MsgHdr" + } + + s := ";; opcode: " + OpcodeToString[h.Opcode] + s += ", status: " + RcodeToString[h.Rcode] + s += ", id: " + strconv.Itoa(int(h.Id)) + "\n" + + s += ";; flags:" + if h.Response { + s += " qr" + } + if h.Authoritative { + s += " aa" + } + if h.Truncated { + s += " tc" + } + if h.RecursionDesired { + s += " rd" + } + if h.RecursionAvailable { + s += " ra" + } + if h.Zero { // Hmm + s += " z" + } + if h.AuthenticatedData { + s += " ad" + } + if h.CheckingDisabled { + s += " cd" + } + + s += ";" + return s +} + +// Pack packs a Msg: it is converted to to wire format. +// If the dns.Compress is true the message will be in compressed wire format. +func (dns *Msg) Pack() (msg []byte, err error) { + return dns.PackBuffer(nil) +} + +// PackBuffer packs a Msg, using the given buffer buf. If buf is too small a new buffer is allocated. +func (dns *Msg) PackBuffer(buf []byte) (msg []byte, err error) { + var compression map[string]int + if dns.Compress { + compression = make(map[string]int) // Compression pointer mappings. + } + return dns.packBufferWithCompressionMap(buf, compression) +} + +// packBufferWithCompressionMap packs a Msg, using the given buffer buf. +func (dns *Msg) packBufferWithCompressionMap(buf []byte, compression map[string]int) (msg []byte, err error) { + // We use a similar function in tsig.go's stripTsig. + + var dh Header + + if dns.Rcode < 0 || dns.Rcode > 0xFFF { + return nil, ErrRcode + } + if dns.Rcode > 0xF { + // Regular RCODE field is 4 bits + opt := dns.IsEdns0() + if opt == nil { + return nil, ErrExtendedRcode + } + opt.SetExtendedRcode(uint8(dns.Rcode >> 4)) + } + + // Convert convenient Msg into wire-like Header. + dh.Id = dns.Id + dh.Bits = uint16(dns.Opcode)<<11 | uint16(dns.Rcode&0xF) + if dns.Response { + dh.Bits |= _QR + } + if dns.Authoritative { + dh.Bits |= _AA + } + if dns.Truncated { + dh.Bits |= _TC + } + if dns.RecursionDesired { + dh.Bits |= _RD + } + if dns.RecursionAvailable { + dh.Bits |= _RA + } + if dns.Zero { + dh.Bits |= _Z + } + if dns.AuthenticatedData { + dh.Bits |= _AD + } + if dns.CheckingDisabled { + dh.Bits |= _CD + } + + // Prepare variable sized arrays. + question := dns.Question + answer := dns.Answer + ns := dns.Ns + extra := dns.Extra + + dh.Qdcount = uint16(len(question)) + dh.Ancount = uint16(len(answer)) + dh.Nscount = uint16(len(ns)) + dh.Arcount = uint16(len(extra)) + + // We need the uncompressed length here, because we first pack it and then compress it. + msg = buf + uncompressedLen := compressedLen(dns, false) + if packLen := uncompressedLen + 1; len(msg) < packLen { + msg = make([]byte, packLen) + } + + // Pack it in: header and then the pieces. + off := 0 + off, err = dh.pack(msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + for i := 0; i < len(question); i++ { + off, err = question[i].pack(msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + } + for i := 0; i < len(answer); i++ { + off, err = PackRR(answer[i], msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + } + for i := 0; i < len(ns); i++ { + off, err = PackRR(ns[i], msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + } + for i := 0; i < len(extra); i++ { + off, err = PackRR(extra[i], msg, off, compression, dns.Compress) + if err != nil { + return nil, err + } + } + return msg[:off], nil +} + +// Unpack unpacks a binary message to a Msg structure. +func (dns *Msg) Unpack(msg []byte) (err error) { + var ( + dh Header + off int + ) + if dh, off, err = unpackMsgHdr(msg, off); err != nil { + return err + } + + dns.Id = dh.Id + dns.Response = dh.Bits&_QR != 0 + dns.Opcode = int(dh.Bits>>11) & 0xF + dns.Authoritative = dh.Bits&_AA != 0 + dns.Truncated = dh.Bits&_TC != 0 + dns.RecursionDesired = dh.Bits&_RD != 0 + dns.RecursionAvailable = dh.Bits&_RA != 0 + dns.Zero = dh.Bits&_Z != 0 + dns.AuthenticatedData = dh.Bits&_AD != 0 + dns.CheckingDisabled = dh.Bits&_CD != 0 + dns.Rcode = int(dh.Bits & 0xF) + + // If we are at the end of the message we should return *just* the + // header. This can still be useful to the caller. 9.9.9.9 sends these + // when responding with REFUSED for instance. + if off == len(msg) { + // reset sections before returning + dns.Question, dns.Answer, dns.Ns, dns.Extra = nil, nil, nil, nil + return nil + } + + // Qdcount, Ancount, Nscount, Arcount can't be trusted, as they are + // attacker controlled. This means we can't use them to pre-allocate + // slices. + dns.Question = nil + for i := 0; i < int(dh.Qdcount); i++ { + off1 := off + var q Question + q, off, err = unpackQuestion(msg, off) + if err != nil { + // Even if Truncated is set, we only will set ErrTruncated if we + // actually got the questions + return err + } + if off1 == off { // Offset does not increase anymore, dh.Qdcount is a lie! + dh.Qdcount = uint16(i) + break + } + dns.Question = append(dns.Question, q) + } + + dns.Answer, off, err = unpackRRslice(int(dh.Ancount), msg, off) + // The header counts might have been wrong so we need to update it + dh.Ancount = uint16(len(dns.Answer)) + if err == nil { + dns.Ns, off, err = unpackRRslice(int(dh.Nscount), msg, off) + } + // The header counts might have been wrong so we need to update it + dh.Nscount = uint16(len(dns.Ns)) + if err == nil { + dns.Extra, off, err = unpackRRslice(int(dh.Arcount), msg, off) + } + // The header counts might have been wrong so we need to update it + dh.Arcount = uint16(len(dns.Extra)) + + if off != len(msg) { + // TODO(miek) make this an error? + // use PackOpt to let people tell how detailed the error reporting should be? + // println("dns: extra bytes in dns packet", off, "<", len(msg)) + } else if dns.Truncated { + // Whether we ran into a an error or not, we want to return that it + // was truncated + err = ErrTruncated + } + return err +} + +// Convert a complete message to a string with dig-like output. +func (dns *Msg) String() string { + if dns == nil { + return " MsgHdr" + } + s := dns.MsgHdr.String() + " " + s += "QUERY: " + strconv.Itoa(len(dns.Question)) + ", " + s += "ANSWER: " + strconv.Itoa(len(dns.Answer)) + ", " + s += "AUTHORITY: " + strconv.Itoa(len(dns.Ns)) + ", " + s += "ADDITIONAL: " + strconv.Itoa(len(dns.Extra)) + "\n" + if len(dns.Question) > 0 { + s += "\n;; QUESTION SECTION:\n" + for i := 0; i < len(dns.Question); i++ { + s += dns.Question[i].String() + "\n" + } + } + if len(dns.Answer) > 0 { + s += "\n;; ANSWER SECTION:\n" + for i := 0; i < len(dns.Answer); i++ { + if dns.Answer[i] != nil { + s += dns.Answer[i].String() + "\n" + } + } + } + if len(dns.Ns) > 0 { + s += "\n;; AUTHORITY SECTION:\n" + for i := 0; i < len(dns.Ns); i++ { + if dns.Ns[i] != nil { + s += dns.Ns[i].String() + "\n" + } + } + } + if len(dns.Extra) > 0 { + s += "\n;; ADDITIONAL SECTION:\n" + for i := 0; i < len(dns.Extra); i++ { + if dns.Extra[i] != nil { + s += dns.Extra[i].String() + "\n" + } + } + } + return s +} + +// Len returns the message length when in (un)compressed wire format. +// If dns.Compress is true compression it is taken into account. Len() +// is provided to be a faster way to get the size of the resulting packet, +// than packing it, measuring the size and discarding the buffer. +func (dns *Msg) Len() int { return compressedLen(dns, dns.Compress) } + +func compressedLenWithCompressionMap(dns *Msg, compression map[string]int) int { + l := 12 // Message header is always 12 bytes + for _, r := range dns.Question { + compressionLenHelper(compression, r.Name, l) + l += r.len() + } + l += compressionLenSlice(l, compression, dns.Answer) + l += compressionLenSlice(l, compression, dns.Ns) + l += compressionLenSlice(l, compression, dns.Extra) + return l +} + +// compressedLen returns the message length when in compressed wire format +// when compress is true, otherwise the uncompressed length is returned. +func compressedLen(dns *Msg, compress bool) int { + // We always return one more than needed. + if compress { + compression := map[string]int{} + return compressedLenWithCompressionMap(dns, compression) + } + l := 12 // Message header is always 12 bytes + + for _, r := range dns.Question { + l += r.len() + } + for _, r := range dns.Answer { + if r != nil { + l += r.len() + } + } + for _, r := range dns.Ns { + if r != nil { + l += r.len() + } + } + for _, r := range dns.Extra { + if r != nil { + l += r.len() + } + } + + return l +} + +func compressionLenSlice(lenp int, c map[string]int, rs []RR) int { + initLen := lenp + for _, r := range rs { + if r == nil { + continue + } + // TmpLen is to track len of record at 14bits boudaries + tmpLen := lenp + + x := r.len() + // track this length, and the global length in len, while taking compression into account for both. + k, ok, _ := compressionLenSearch(c, r.Header().Name) + if ok { + // Size of x is reduced by k, but we add 1 since k includes the '.' and label descriptor take 2 bytes + // so, basically x:= x - k - 1 + 2 + x += 1 - k + } + + tmpLen += compressionLenHelper(c, r.Header().Name, tmpLen) + k, ok, _ = compressionLenSearchType(c, r) + if ok { + x += 1 - k + } + lenp += x + tmpLen = lenp + tmpLen += compressionLenHelperType(c, r, tmpLen) + + } + return lenp - initLen +} + +// Put the parts of the name in the compression map, return the size in bytes added in payload +func compressionLenHelper(c map[string]int, s string, currentLen int) int { + if currentLen > maxCompressionOffset { + // We won't be able to add any label that could be re-used later anyway + return 0 + } + if _, ok := c[s]; ok { + return 0 + } + initLen := currentLen + pref := "" + prev := s + lbs := Split(s) + for j := 0; j < len(lbs); j++ { + pref = s[lbs[j]:] + currentLen += len(prev) - len(pref) + prev = pref + if _, ok := c[pref]; !ok { + // If first byte label is within the first 14bits, it might be re-used later + if currentLen < maxCompressionOffset { + c[pref] = currentLen + } + } else { + added := currentLen - initLen + if j > 0 { + // We added a new PTR + added += 2 + } + return added + } + } + return currentLen - initLen +} + +// Look for each part in the compression map and returns its length, +// keep on searching so we get the longest match. +// Will return the size of compression found, whether a match has been +// found and the size of record if added in payload +func compressionLenSearch(c map[string]int, s string) (int, bool, int) { + off := 0 + end := false + if s == "" { // don't bork on bogus data + return 0, false, 0 + } + fullSize := 0 + for { + if _, ok := c[s[off:]]; ok { + return len(s[off:]), true, fullSize + off + } + if end { + break + } + // Each label descriptor takes 2 bytes, add it + fullSize += 2 + off, end = NextLabel(s, off) + } + return 0, false, fullSize + len(s) +} + +// Copy returns a new RR which is a deep-copy of r. +func Copy(r RR) RR { r1 := r.copy(); return r1 } + +// Len returns the length (in octets) of the uncompressed RR in wire format. +func Len(r RR) int { return r.len() } + +// Copy returns a new *Msg which is a deep-copy of dns. +func (dns *Msg) Copy() *Msg { return dns.CopyTo(new(Msg)) } + +// CopyTo copies the contents to the provided message using a deep-copy and returns the copy. +func (dns *Msg) CopyTo(r1 *Msg) *Msg { + r1.MsgHdr = dns.MsgHdr + r1.Compress = dns.Compress + + if len(dns.Question) > 0 { + r1.Question = make([]Question, len(dns.Question)) + copy(r1.Question, dns.Question) // TODO(miek): Question is an immutable value, ok to do a shallow-copy + } + + rrArr := make([]RR, len(dns.Answer)+len(dns.Ns)+len(dns.Extra)) + var rri int + + if len(dns.Answer) > 0 { + rrbegin := rri + for i := 0; i < len(dns.Answer); i++ { + rrArr[rri] = dns.Answer[i].copy() + rri++ + } + r1.Answer = rrArr[rrbegin:rri:rri] + } + + if len(dns.Ns) > 0 { + rrbegin := rri + for i := 0; i < len(dns.Ns); i++ { + rrArr[rri] = dns.Ns[i].copy() + rri++ + } + r1.Ns = rrArr[rrbegin:rri:rri] + } + + if len(dns.Extra) > 0 { + rrbegin := rri + for i := 0; i < len(dns.Extra); i++ { + rrArr[rri] = dns.Extra[i].copy() + rri++ + } + r1.Extra = rrArr[rrbegin:rri:rri] + } + + return r1 +} + +func (q *Question) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := PackDomainName(q.Name, msg, off, compression, compress) + if err != nil { + return off, err + } + off, err = packUint16(q.Qtype, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(q.Qclass, msg, off) + if err != nil { + return off, err + } + return off, nil +} + +func unpackQuestion(msg []byte, off int) (Question, int, error) { + var ( + q Question + err error + ) + q.Name, off, err = UnpackDomainName(msg, off) + if err != nil { + return q, off, err + } + if off == len(msg) { + return q, off, nil + } + q.Qtype, off, err = unpackUint16(msg, off) + if err != nil { + return q, off, err + } + if off == len(msg) { + return q, off, nil + } + q.Qclass, off, err = unpackUint16(msg, off) + if off == len(msg) { + return q, off, nil + } + return q, off, err +} + +func (dh *Header) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := packUint16(dh.Id, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(dh.Bits, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(dh.Qdcount, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(dh.Ancount, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(dh.Nscount, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(dh.Arcount, msg, off) + return off, err +} + +func unpackMsgHdr(msg []byte, off int) (Header, int, error) { + var ( + dh Header + err error + ) + dh.Id, off, err = unpackUint16(msg, off) + if err != nil { + return dh, off, err + } + dh.Bits, off, err = unpackUint16(msg, off) + if err != nil { + return dh, off, err + } + dh.Qdcount, off, err = unpackUint16(msg, off) + if err != nil { + return dh, off, err + } + dh.Ancount, off, err = unpackUint16(msg, off) + if err != nil { + return dh, off, err + } + dh.Nscount, off, err = unpackUint16(msg, off) + if err != nil { + return dh, off, err + } + dh.Arcount, off, err = unpackUint16(msg, off) + return dh, off, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg_generate.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg_generate.go new file mode 100644 index 00000000000..8ba609f7269 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg_generate.go @@ -0,0 +1,348 @@ +//+build ignore + +// msg_generate.go is meant to run with go generate. It will use +// go/{importer,types} to track down all the RR struct types. Then for each type +// it will generate pack/unpack methods based on the struct tags. The generated source is +// written to zmsg.go, and is meant to be checked into git. +package main + +import ( + "bytes" + "fmt" + "go/format" + "go/importer" + "go/types" + "log" + "os" + "strings" +) + +var packageHdr = ` +// Code generated by "go run msg_generate.go"; DO NOT EDIT. + +package dns + +` + +// getTypeStruct will take a type and the package scope, and return the +// (innermost) struct if the type is considered a RR type (currently defined as +// those structs beginning with a RR_Header, could be redefined as implementing +// the RR interface). The bool return value indicates if embedded structs were +// resolved. +func getTypeStruct(t types.Type, scope *types.Scope) (*types.Struct, bool) { + st, ok := t.Underlying().(*types.Struct) + if !ok { + return nil, false + } + if st.Field(0).Type() == scope.Lookup("RR_Header").Type() { + return st, false + } + if st.Field(0).Anonymous() { + st, _ := getTypeStruct(st.Field(0).Type(), scope) + return st, true + } + return nil, false +} + +func main() { + // Import and type-check the package + pkg, err := importer.Default().Import("github.com/miekg/dns") + fatalIfErr(err) + scope := pkg.Scope() + + // Collect actual types (*X) + var namedTypes []string + for _, name := range scope.Names() { + o := scope.Lookup(name) + if o == nil || !o.Exported() { + continue + } + if st, _ := getTypeStruct(o.Type(), scope); st == nil { + continue + } + if name == "PrivateRR" { + continue + } + + // Check if corresponding TypeX exists + if scope.Lookup("Type"+o.Name()) == nil && o.Name() != "RFC3597" { + log.Fatalf("Constant Type%s does not exist.", o.Name()) + } + + namedTypes = append(namedTypes, o.Name()) + } + + b := &bytes.Buffer{} + b.WriteString(packageHdr) + + fmt.Fprint(b, "// pack*() functions\n\n") + for _, name := range namedTypes { + o := scope.Lookup(name) + st, _ := getTypeStruct(o.Type(), scope) + + fmt.Fprintf(b, "func (rr *%s) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) {\n", name) + fmt.Fprint(b, `off, err := rr.Hdr.pack(msg, off, compression, compress) +if err != nil { + return off, err +} +headerEnd := off +`) + for i := 1; i < st.NumFields(); i++ { + o := func(s string) { + fmt.Fprintf(b, s, st.Field(i).Name()) + fmt.Fprint(b, `if err != nil { +return off, err +} +`) + } + + if _, ok := st.Field(i).Type().(*types.Slice); ok { + switch st.Tag(i) { + case `dns:"-"`: // ignored + case `dns:"txt"`: + o("off, err = packStringTxt(rr.%s, msg, off)\n") + case `dns:"opt"`: + o("off, err = packDataOpt(rr.%s, msg, off)\n") + case `dns:"nsec"`: + o("off, err = packDataNsec(rr.%s, msg, off)\n") + case `dns:"domain-name"`: + o("off, err = packDataDomainNames(rr.%s, msg, off, compression, compress)\n") + default: + log.Fatalln(name, st.Field(i).Name(), st.Tag(i)) + } + continue + } + + switch { + case st.Tag(i) == `dns:"-"`: // ignored + case st.Tag(i) == `dns:"cdomain-name"`: + o("off, err = PackDomainName(rr.%s, msg, off, compression, compress)\n") + case st.Tag(i) == `dns:"domain-name"`: + o("off, err = PackDomainName(rr.%s, msg, off, compression, false)\n") + case st.Tag(i) == `dns:"a"`: + o("off, err = packDataA(rr.%s, msg, off)\n") + case st.Tag(i) == `dns:"aaaa"`: + o("off, err = packDataAAAA(rr.%s, msg, off)\n") + case st.Tag(i) == `dns:"uint48"`: + o("off, err = packUint48(rr.%s, msg, off)\n") + case st.Tag(i) == `dns:"txt"`: + o("off, err = packString(rr.%s, msg, off)\n") + + case strings.HasPrefix(st.Tag(i), `dns:"size-base32`): // size-base32 can be packed just like base32 + fallthrough + case st.Tag(i) == `dns:"base32"`: + o("off, err = packStringBase32(rr.%s, msg, off)\n") + + case strings.HasPrefix(st.Tag(i), `dns:"size-base64`): // size-base64 can be packed just like base64 + fallthrough + case st.Tag(i) == `dns:"base64"`: + o("off, err = packStringBase64(rr.%s, msg, off)\n") + + case strings.HasPrefix(st.Tag(i), `dns:"size-hex:SaltLength`): + // directly write instead of using o() so we get the error check in the correct place + field := st.Field(i).Name() + fmt.Fprintf(b, `// Only pack salt if value is not "-", i.e. empty +if rr.%s != "-" { + off, err = packStringHex(rr.%s, msg, off) + if err != nil { + return off, err + } +} +`, field, field) + continue + case strings.HasPrefix(st.Tag(i), `dns:"size-hex`): // size-hex can be packed just like hex + fallthrough + case st.Tag(i) == `dns:"hex"`: + o("off, err = packStringHex(rr.%s, msg, off)\n") + + case st.Tag(i) == `dns:"octet"`: + o("off, err = packStringOctet(rr.%s, msg, off)\n") + case st.Tag(i) == "": + switch st.Field(i).Type().(*types.Basic).Kind() { + case types.Uint8: + o("off, err = packUint8(rr.%s, msg, off)\n") + case types.Uint16: + o("off, err = packUint16(rr.%s, msg, off)\n") + case types.Uint32: + o("off, err = packUint32(rr.%s, msg, off)\n") + case types.Uint64: + o("off, err = packUint64(rr.%s, msg, off)\n") + case types.String: + o("off, err = packString(rr.%s, msg, off)\n") + default: + log.Fatalln(name, st.Field(i).Name()) + } + default: + log.Fatalln(name, st.Field(i).Name(), st.Tag(i)) + } + } + // We have packed everything, only now we know the rdlength of this RR + fmt.Fprintln(b, "rr.Header().Rdlength = uint16(off-headerEnd)") + fmt.Fprintln(b, "return off, nil }\n") + } + + fmt.Fprint(b, "// unpack*() functions\n\n") + for _, name := range namedTypes { + o := scope.Lookup(name) + st, _ := getTypeStruct(o.Type(), scope) + + fmt.Fprintf(b, "func unpack%s(h RR_Header, msg []byte, off int) (RR, int, error) {\n", name) + fmt.Fprintf(b, "rr := new(%s)\n", name) + fmt.Fprint(b, "rr.Hdr = h\n") + fmt.Fprint(b, `if noRdata(h) { +return rr, off, nil + } +var err error +rdStart := off +_ = rdStart + +`) + for i := 1; i < st.NumFields(); i++ { + o := func(s string) { + fmt.Fprintf(b, s, st.Field(i).Name()) + fmt.Fprint(b, `if err != nil { +return rr, off, err +} +`) + } + + // size-* are special, because they reference a struct member we should use for the length. + if strings.HasPrefix(st.Tag(i), `dns:"size-`) { + structMember := structMember(st.Tag(i)) + structTag := structTag(st.Tag(i)) + switch structTag { + case "hex": + fmt.Fprintf(b, "rr.%s, off, err = unpackStringHex(msg, off, off + int(rr.%s))\n", st.Field(i).Name(), structMember) + case "base32": + fmt.Fprintf(b, "rr.%s, off, err = unpackStringBase32(msg, off, off + int(rr.%s))\n", st.Field(i).Name(), structMember) + case "base64": + fmt.Fprintf(b, "rr.%s, off, err = unpackStringBase64(msg, off, off + int(rr.%s))\n", st.Field(i).Name(), structMember) + default: + log.Fatalln(name, st.Field(i).Name(), st.Tag(i)) + } + fmt.Fprint(b, `if err != nil { +return rr, off, err +} +`) + continue + } + + if _, ok := st.Field(i).Type().(*types.Slice); ok { + switch st.Tag(i) { + case `dns:"-"`: // ignored + case `dns:"txt"`: + o("rr.%s, off, err = unpackStringTxt(msg, off)\n") + case `dns:"opt"`: + o("rr.%s, off, err = unpackDataOpt(msg, off)\n") + case `dns:"nsec"`: + o("rr.%s, off, err = unpackDataNsec(msg, off)\n") + case `dns:"domain-name"`: + o("rr.%s, off, err = unpackDataDomainNames(msg, off, rdStart + int(rr.Hdr.Rdlength))\n") + default: + log.Fatalln(name, st.Field(i).Name(), st.Tag(i)) + } + continue + } + + switch st.Tag(i) { + case `dns:"-"`: // ignored + case `dns:"cdomain-name"`: + fallthrough + case `dns:"domain-name"`: + o("rr.%s, off, err = UnpackDomainName(msg, off)\n") + case `dns:"a"`: + o("rr.%s, off, err = unpackDataA(msg, off)\n") + case `dns:"aaaa"`: + o("rr.%s, off, err = unpackDataAAAA(msg, off)\n") + case `dns:"uint48"`: + o("rr.%s, off, err = unpackUint48(msg, off)\n") + case `dns:"txt"`: + o("rr.%s, off, err = unpackString(msg, off)\n") + case `dns:"base32"`: + o("rr.%s, off, err = unpackStringBase32(msg, off, rdStart + int(rr.Hdr.Rdlength))\n") + case `dns:"base64"`: + o("rr.%s, off, err = unpackStringBase64(msg, off, rdStart + int(rr.Hdr.Rdlength))\n") + case `dns:"hex"`: + o("rr.%s, off, err = unpackStringHex(msg, off, rdStart + int(rr.Hdr.Rdlength))\n") + case `dns:"octet"`: + o("rr.%s, off, err = unpackStringOctet(msg, off)\n") + case "": + switch st.Field(i).Type().(*types.Basic).Kind() { + case types.Uint8: + o("rr.%s, off, err = unpackUint8(msg, off)\n") + case types.Uint16: + o("rr.%s, off, err = unpackUint16(msg, off)\n") + case types.Uint32: + o("rr.%s, off, err = unpackUint32(msg, off)\n") + case types.Uint64: + o("rr.%s, off, err = unpackUint64(msg, off)\n") + case types.String: + o("rr.%s, off, err = unpackString(msg, off)\n") + default: + log.Fatalln(name, st.Field(i).Name()) + } + default: + log.Fatalln(name, st.Field(i).Name(), st.Tag(i)) + } + // If we've hit len(msg) we return without error. + if i < st.NumFields()-1 { + fmt.Fprintf(b, `if off == len(msg) { +return rr, off, nil + } +`) + } + } + fmt.Fprintf(b, "return rr, off, err }\n\n") + } + // Generate typeToUnpack map + fmt.Fprintln(b, "var typeToUnpack = map[uint16]func(RR_Header, []byte, int) (RR, int, error){") + for _, name := range namedTypes { + if name == "RFC3597" { + continue + } + fmt.Fprintf(b, "Type%s: unpack%s,\n", name, name) + } + fmt.Fprintln(b, "}\n") + + // gofmt + res, err := format.Source(b.Bytes()) + if err != nil { + b.WriteTo(os.Stderr) + log.Fatal(err) + } + + // write result + f, err := os.Create("zmsg.go") + fatalIfErr(err) + defer f.Close() + f.Write(res) +} + +// structMember will take a tag like dns:"size-base32:SaltLength" and return the last part of this string. +func structMember(s string) string { + fields := strings.Split(s, ":") + if len(fields) == 0 { + return "" + } + f := fields[len(fields)-1] + // f should have a closing " + if len(f) > 1 { + return f[:len(f)-1] + } + return f +} + +// structTag will take a tag like dns:"size-base32:SaltLength" and return base32. +func structTag(s string) string { + fields := strings.Split(s, ":") + if len(fields) < 2 { + return "" + } + return fields[1][len("\"size-"):] +} + +func fatalIfErr(err error) { + if err != nil { + log.Fatal(err) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg_helpers.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg_helpers.go new file mode 100644 index 00000000000..81fc2b1be31 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/msg_helpers.go @@ -0,0 +1,633 @@ +package dns + +import ( + "encoding/base32" + "encoding/base64" + "encoding/binary" + "encoding/hex" + "net" + "strings" +) + +// helper functions called from the generated zmsg.go + +// These function are named after the tag to help pack/unpack, if there is no tag it is the name +// of the type they pack/unpack (string, int, etc). We prefix all with unpackData or packData, so packDataA or +// packDataDomainName. + +func unpackDataA(msg []byte, off int) (net.IP, int, error) { + if off+net.IPv4len > len(msg) { + return nil, len(msg), &Error{err: "overflow unpacking a"} + } + a := append(make(net.IP, 0, net.IPv4len), msg[off:off+net.IPv4len]...) + off += net.IPv4len + return a, off, nil +} + +func packDataA(a net.IP, msg []byte, off int) (int, error) { + // It must be a slice of 4, even if it is 16, we encode only the first 4 + if off+net.IPv4len > len(msg) { + return len(msg), &Error{err: "overflow packing a"} + } + switch len(a) { + case net.IPv4len, net.IPv6len: + copy(msg[off:], a.To4()) + off += net.IPv4len + case 0: + // Allowed, for dynamic updates. + default: + return len(msg), &Error{err: "overflow packing a"} + } + return off, nil +} + +func unpackDataAAAA(msg []byte, off int) (net.IP, int, error) { + if off+net.IPv6len > len(msg) { + return nil, len(msg), &Error{err: "overflow unpacking aaaa"} + } + aaaa := append(make(net.IP, 0, net.IPv6len), msg[off:off+net.IPv6len]...) + off += net.IPv6len + return aaaa, off, nil +} + +func packDataAAAA(aaaa net.IP, msg []byte, off int) (int, error) { + if off+net.IPv6len > len(msg) { + return len(msg), &Error{err: "overflow packing aaaa"} + } + + switch len(aaaa) { + case net.IPv6len: + copy(msg[off:], aaaa) + off += net.IPv6len + case 0: + // Allowed, dynamic updates. + default: + return len(msg), &Error{err: "overflow packing aaaa"} + } + return off, nil +} + +// unpackHeader unpacks an RR header, returning the offset to the end of the header and a +// re-sliced msg according to the expected length of the RR. +func unpackHeader(msg []byte, off int) (rr RR_Header, off1 int, truncmsg []byte, err error) { + hdr := RR_Header{} + if off == len(msg) { + return hdr, off, msg, nil + } + + hdr.Name, off, err = UnpackDomainName(msg, off) + if err != nil { + return hdr, len(msg), msg, err + } + hdr.Rrtype, off, err = unpackUint16(msg, off) + if err != nil { + return hdr, len(msg), msg, err + } + hdr.Class, off, err = unpackUint16(msg, off) + if err != nil { + return hdr, len(msg), msg, err + } + hdr.Ttl, off, err = unpackUint32(msg, off) + if err != nil { + return hdr, len(msg), msg, err + } + hdr.Rdlength, off, err = unpackUint16(msg, off) + if err != nil { + return hdr, len(msg), msg, err + } + msg, err = truncateMsgFromRdlength(msg, off, hdr.Rdlength) + return hdr, off, msg, err +} + +// pack packs an RR header, returning the offset to the end of the header. +// See PackDomainName for documentation about the compression. +func (hdr RR_Header) pack(msg []byte, off int, compression map[string]int, compress bool) (off1 int, err error) { + if off == len(msg) { + return off, nil + } + + off, err = PackDomainName(hdr.Name, msg, off, compression, compress) + if err != nil { + return len(msg), err + } + off, err = packUint16(hdr.Rrtype, msg, off) + if err != nil { + return len(msg), err + } + off, err = packUint16(hdr.Class, msg, off) + if err != nil { + return len(msg), err + } + off, err = packUint32(hdr.Ttl, msg, off) + if err != nil { + return len(msg), err + } + off, err = packUint16(hdr.Rdlength, msg, off) + if err != nil { + return len(msg), err + } + return off, nil +} + +// helper helper functions. + +// truncateMsgFromRdLength truncates msg to match the expected length of the RR. +// Returns an error if msg is smaller than the expected size. +func truncateMsgFromRdlength(msg []byte, off int, rdlength uint16) (truncmsg []byte, err error) { + lenrd := off + int(rdlength) + if lenrd > len(msg) { + return msg, &Error{err: "overflowing header size"} + } + return msg[:lenrd], nil +} + +var base32HexNoPadEncoding = base32.HexEncoding.WithPadding(base32.NoPadding) + +func fromBase32(s []byte) (buf []byte, err error) { + for i, b := range s { + if b >= 'a' && b <= 'z' { + s[i] = b - 32 + } + } + buflen := base32HexNoPadEncoding.DecodedLen(len(s)) + buf = make([]byte, buflen) + n, err := base32HexNoPadEncoding.Decode(buf, s) + buf = buf[:n] + return +} + +func toBase32(b []byte) string { + return base32HexNoPadEncoding.EncodeToString(b) +} + +func fromBase64(s []byte) (buf []byte, err error) { + buflen := base64.StdEncoding.DecodedLen(len(s)) + buf = make([]byte, buflen) + n, err := base64.StdEncoding.Decode(buf, s) + buf = buf[:n] + return +} + +func toBase64(b []byte) string { return base64.StdEncoding.EncodeToString(b) } + +// dynamicUpdate returns true if the Rdlength is zero. +func noRdata(h RR_Header) bool { return h.Rdlength == 0 } + +func unpackUint8(msg []byte, off int) (i uint8, off1 int, err error) { + if off+1 > len(msg) { + return 0, len(msg), &Error{err: "overflow unpacking uint8"} + } + return uint8(msg[off]), off + 1, nil +} + +func packUint8(i uint8, msg []byte, off int) (off1 int, err error) { + if off+1 > len(msg) { + return len(msg), &Error{err: "overflow packing uint8"} + } + msg[off] = byte(i) + return off + 1, nil +} + +func unpackUint16(msg []byte, off int) (i uint16, off1 int, err error) { + if off+2 > len(msg) { + return 0, len(msg), &Error{err: "overflow unpacking uint16"} + } + return binary.BigEndian.Uint16(msg[off:]), off + 2, nil +} + +func packUint16(i uint16, msg []byte, off int) (off1 int, err error) { + if off+2 > len(msg) { + return len(msg), &Error{err: "overflow packing uint16"} + } + binary.BigEndian.PutUint16(msg[off:], i) + return off + 2, nil +} + +func unpackUint32(msg []byte, off int) (i uint32, off1 int, err error) { + if off+4 > len(msg) { + return 0, len(msg), &Error{err: "overflow unpacking uint32"} + } + return binary.BigEndian.Uint32(msg[off:]), off + 4, nil +} + +func packUint32(i uint32, msg []byte, off int) (off1 int, err error) { + if off+4 > len(msg) { + return len(msg), &Error{err: "overflow packing uint32"} + } + binary.BigEndian.PutUint32(msg[off:], i) + return off + 4, nil +} + +func unpackUint48(msg []byte, off int) (i uint64, off1 int, err error) { + if off+6 > len(msg) { + return 0, len(msg), &Error{err: "overflow unpacking uint64 as uint48"} + } + // Used in TSIG where the last 48 bits are occupied, so for now, assume a uint48 (6 bytes) + i = uint64(uint64(msg[off])<<40 | uint64(msg[off+1])<<32 | uint64(msg[off+2])<<24 | uint64(msg[off+3])<<16 | + uint64(msg[off+4])<<8 | uint64(msg[off+5])) + off += 6 + return i, off, nil +} + +func packUint48(i uint64, msg []byte, off int) (off1 int, err error) { + if off+6 > len(msg) { + return len(msg), &Error{err: "overflow packing uint64 as uint48"} + } + msg[off] = byte(i >> 40) + msg[off+1] = byte(i >> 32) + msg[off+2] = byte(i >> 24) + msg[off+3] = byte(i >> 16) + msg[off+4] = byte(i >> 8) + msg[off+5] = byte(i) + off += 6 + return off, nil +} + +func unpackUint64(msg []byte, off int) (i uint64, off1 int, err error) { + if off+8 > len(msg) { + return 0, len(msg), &Error{err: "overflow unpacking uint64"} + } + return binary.BigEndian.Uint64(msg[off:]), off + 8, nil +} + +func packUint64(i uint64, msg []byte, off int) (off1 int, err error) { + if off+8 > len(msg) { + return len(msg), &Error{err: "overflow packing uint64"} + } + binary.BigEndian.PutUint64(msg[off:], i) + off += 8 + return off, nil +} + +func unpackString(msg []byte, off int) (string, int, error) { + if off+1 > len(msg) { + return "", off, &Error{err: "overflow unpacking txt"} + } + l := int(msg[off]) + if off+l+1 > len(msg) { + return "", off, &Error{err: "overflow unpacking txt"} + } + var s strings.Builder + s.Grow(l) + for _, b := range msg[off+1 : off+1+l] { + switch { + case b == '"' || b == '\\': + s.WriteByte('\\') + s.WriteByte(b) + case b < ' ' || b > '~': // unprintable + writeEscapedByte(&s, b) + default: + s.WriteByte(b) + } + } + off += 1 + l + return s.String(), off, nil +} + +func packString(s string, msg []byte, off int) (int, error) { + txtTmp := make([]byte, 256*4+1) + off, err := packTxtString(s, msg, off, txtTmp) + if err != nil { + return len(msg), err + } + return off, nil +} + +func unpackStringBase32(msg []byte, off, end int) (string, int, error) { + if end > len(msg) { + return "", len(msg), &Error{err: "overflow unpacking base32"} + } + s := toBase32(msg[off:end]) + return s, end, nil +} + +func packStringBase32(s string, msg []byte, off int) (int, error) { + b32, err := fromBase32([]byte(s)) + if err != nil { + return len(msg), err + } + if off+len(b32) > len(msg) { + return len(msg), &Error{err: "overflow packing base32"} + } + copy(msg[off:off+len(b32)], b32) + off += len(b32) + return off, nil +} + +func unpackStringBase64(msg []byte, off, end int) (string, int, error) { + // Rest of the RR is base64 encoded value, so we don't need an explicit length + // to be set. Thus far all RR's that have base64 encoded fields have those as their + // last one. What we do need is the end of the RR! + if end > len(msg) { + return "", len(msg), &Error{err: "overflow unpacking base64"} + } + s := toBase64(msg[off:end]) + return s, end, nil +} + +func packStringBase64(s string, msg []byte, off int) (int, error) { + b64, err := fromBase64([]byte(s)) + if err != nil { + return len(msg), err + } + if off+len(b64) > len(msg) { + return len(msg), &Error{err: "overflow packing base64"} + } + copy(msg[off:off+len(b64)], b64) + off += len(b64) + return off, nil +} + +func unpackStringHex(msg []byte, off, end int) (string, int, error) { + // Rest of the RR is hex encoded value, so we don't need an explicit length + // to be set. NSEC and TSIG have hex fields with a length field. + // What we do need is the end of the RR! + if end > len(msg) { + return "", len(msg), &Error{err: "overflow unpacking hex"} + } + + s := hex.EncodeToString(msg[off:end]) + return s, end, nil +} + +func packStringHex(s string, msg []byte, off int) (int, error) { + h, err := hex.DecodeString(s) + if err != nil { + return len(msg), err + } + if off+len(h) > len(msg) { + return len(msg), &Error{err: "overflow packing hex"} + } + copy(msg[off:off+len(h)], h) + off += len(h) + return off, nil +} + +func unpackStringTxt(msg []byte, off int) ([]string, int, error) { + txt, off, err := unpackTxt(msg, off) + if err != nil { + return nil, len(msg), err + } + return txt, off, nil +} + +func packStringTxt(s []string, msg []byte, off int) (int, error) { + txtTmp := make([]byte, 256*4+1) // If the whole string consists out of \DDD we need this many. + off, err := packTxt(s, msg, off, txtTmp) + if err != nil { + return len(msg), err + } + return off, nil +} + +func unpackDataOpt(msg []byte, off int) ([]EDNS0, int, error) { + var edns []EDNS0 +Option: + code := uint16(0) + if off+4 > len(msg) { + return nil, len(msg), &Error{err: "overflow unpacking opt"} + } + code = binary.BigEndian.Uint16(msg[off:]) + off += 2 + optlen := binary.BigEndian.Uint16(msg[off:]) + off += 2 + if off+int(optlen) > len(msg) { + return nil, len(msg), &Error{err: "overflow unpacking opt"} + } + switch code { + case EDNS0NSID: + e := new(EDNS0_NSID) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + case EDNS0SUBNET: + e := new(EDNS0_SUBNET) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + case EDNS0COOKIE: + e := new(EDNS0_COOKIE) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + case EDNS0UL: + e := new(EDNS0_UL) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + case EDNS0LLQ: + e := new(EDNS0_LLQ) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + case EDNS0DAU: + e := new(EDNS0_DAU) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + case EDNS0DHU: + e := new(EDNS0_DHU) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + case EDNS0N3U: + e := new(EDNS0_N3U) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + case EDNS0PADDING: + e := new(EDNS0_PADDING) + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + default: + e := new(EDNS0_LOCAL) + e.Code = code + if err := e.unpack(msg[off : off+int(optlen)]); err != nil { + return nil, len(msg), err + } + edns = append(edns, e) + off += int(optlen) + } + + if off < len(msg) { + goto Option + } + + return edns, off, nil +} + +func packDataOpt(options []EDNS0, msg []byte, off int) (int, error) { + for _, el := range options { + b, err := el.pack() + if err != nil || off+3 > len(msg) { + return len(msg), &Error{err: "overflow packing opt"} + } + binary.BigEndian.PutUint16(msg[off:], el.Option()) // Option code + binary.BigEndian.PutUint16(msg[off+2:], uint16(len(b))) // Length + off += 4 + if off+len(b) > len(msg) { + copy(msg[off:], b) + off = len(msg) + continue + } + // Actual data + copy(msg[off:off+len(b)], b) + off += len(b) + } + return off, nil +} + +func unpackStringOctet(msg []byte, off int) (string, int, error) { + s := string(msg[off:]) + return s, len(msg), nil +} + +func packStringOctet(s string, msg []byte, off int) (int, error) { + txtTmp := make([]byte, 256*4+1) + off, err := packOctetString(s, msg, off, txtTmp) + if err != nil { + return len(msg), err + } + return off, nil +} + +func unpackDataNsec(msg []byte, off int) ([]uint16, int, error) { + var nsec []uint16 + length, window, lastwindow := 0, 0, -1 + for off < len(msg) { + if off+2 > len(msg) { + return nsec, len(msg), &Error{err: "overflow unpacking nsecx"} + } + window = int(msg[off]) + length = int(msg[off+1]) + off += 2 + if window <= lastwindow { + // RFC 4034: Blocks are present in the NSEC RR RDATA in + // increasing numerical order. + return nsec, len(msg), &Error{err: "out of order NSEC block"} + } + if length == 0 { + // RFC 4034: Blocks with no types present MUST NOT be included. + return nsec, len(msg), &Error{err: "empty NSEC block"} + } + if length > 32 { + return nsec, len(msg), &Error{err: "NSEC block too long"} + } + if off+length > len(msg) { + return nsec, len(msg), &Error{err: "overflowing NSEC block"} + } + + // Walk the bytes in the window and extract the type bits + for j := 0; j < length; j++ { + b := msg[off+j] + // Check the bits one by one, and set the type + if b&0x80 == 0x80 { + nsec = append(nsec, uint16(window*256+j*8+0)) + } + if b&0x40 == 0x40 { + nsec = append(nsec, uint16(window*256+j*8+1)) + } + if b&0x20 == 0x20 { + nsec = append(nsec, uint16(window*256+j*8+2)) + } + if b&0x10 == 0x10 { + nsec = append(nsec, uint16(window*256+j*8+3)) + } + if b&0x8 == 0x8 { + nsec = append(nsec, uint16(window*256+j*8+4)) + } + if b&0x4 == 0x4 { + nsec = append(nsec, uint16(window*256+j*8+5)) + } + if b&0x2 == 0x2 { + nsec = append(nsec, uint16(window*256+j*8+6)) + } + if b&0x1 == 0x1 { + nsec = append(nsec, uint16(window*256+j*8+7)) + } + } + off += length + lastwindow = window + } + return nsec, off, nil +} + +func packDataNsec(bitmap []uint16, msg []byte, off int) (int, error) { + if len(bitmap) == 0 { + return off, nil + } + var lastwindow, lastlength uint16 + for j := 0; j < len(bitmap); j++ { + t := bitmap[j] + window := t / 256 + length := (t-window*256)/8 + 1 + if window > lastwindow && lastlength != 0 { // New window, jump to the new offset + off += int(lastlength) + 2 + lastlength = 0 + } + if window < lastwindow || length < lastlength { + return len(msg), &Error{err: "nsec bits out of order"} + } + if off+2+int(length) > len(msg) { + return len(msg), &Error{err: "overflow packing nsec"} + } + // Setting the window # + msg[off] = byte(window) + // Setting the octets length + msg[off+1] = byte(length) + // Setting the bit value for the type in the right octet + msg[off+1+int(length)] |= byte(1 << (7 - t%8)) + lastwindow, lastlength = window, length + } + off += int(lastlength) + 2 + return off, nil +} + +func unpackDataDomainNames(msg []byte, off, end int) ([]string, int, error) { + var ( + servers []string + s string + err error + ) + if end > len(msg) { + return nil, len(msg), &Error{err: "overflow unpacking domain names"} + } + for off < end { + s, off, err = UnpackDomainName(msg, off) + if err != nil { + return servers, len(msg), err + } + servers = append(servers, s) + } + return servers, off, nil +} + +func packDataDomainNames(names []string, msg []byte, off int, compression map[string]int, compress bool) (int, error) { + var err error + for j := 0; j < len(names); j++ { + off, err = PackDomainName(names[j], msg, off, compression, false && compress) + if err != nil { + return len(msg), err + } + } + return off, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/nsecx.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/nsecx.go new file mode 100644 index 00000000000..9b908c44786 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/nsecx.go @@ -0,0 +1,106 @@ +package dns + +import ( + "crypto/sha1" + "hash" + "strings" +) + +type saltWireFmt struct { + Salt string `dns:"size-hex"` +} + +// HashName hashes a string (label) according to RFC 5155. It returns the hashed string in uppercase. +func HashName(label string, ha uint8, iter uint16, salt string) string { + saltwire := new(saltWireFmt) + saltwire.Salt = salt + wire := make([]byte, DefaultMsgSize) + n, err := packSaltWire(saltwire, wire) + if err != nil { + return "" + } + wire = wire[:n] + name := make([]byte, 255) + off, err := PackDomainName(strings.ToLower(label), name, 0, nil, false) + if err != nil { + return "" + } + name = name[:off] + var s hash.Hash + switch ha { + case SHA1: + s = sha1.New() + default: + return "" + } + + // k = 0 + s.Write(name) + s.Write(wire) + nsec3 := s.Sum(nil) + // k > 0 + for k := uint16(0); k < iter; k++ { + s.Reset() + s.Write(nsec3) + s.Write(wire) + nsec3 = s.Sum(nsec3[:0]) + } + return toBase32(nsec3) +} + +// Cover returns true if a name is covered by the NSEC3 record +func (rr *NSEC3) Cover(name string) bool { + nameHash := HashName(name, rr.Hash, rr.Iterations, rr.Salt) + owner := strings.ToUpper(rr.Hdr.Name) + labelIndices := Split(owner) + if len(labelIndices) < 2 { + return false + } + ownerHash := owner[:labelIndices[1]-1] + ownerZone := owner[labelIndices[1]:] + if !IsSubDomain(ownerZone, strings.ToUpper(name)) { // name is outside owner zone + return false + } + + nextHash := rr.NextDomain + if ownerHash == nextHash { // empty interval + return false + } + if ownerHash > nextHash { // end of zone + if nameHash > ownerHash { // covered since there is nothing after ownerHash + return true + } + return nameHash < nextHash // if nameHash is before beginning of zone it is covered + } + if nameHash < ownerHash { // nameHash is before ownerHash, not covered + return false + } + return nameHash < nextHash // if nameHash is before nextHash is it covered (between ownerHash and nextHash) +} + +// Match returns true if a name matches the NSEC3 record +func (rr *NSEC3) Match(name string) bool { + nameHash := HashName(name, rr.Hash, rr.Iterations, rr.Salt) + owner := strings.ToUpper(rr.Hdr.Name) + labelIndices := Split(owner) + if len(labelIndices) < 2 { + return false + } + ownerHash := owner[:labelIndices[1]-1] + ownerZone := owner[labelIndices[1]:] + if !IsSubDomain(ownerZone, strings.ToUpper(name)) { // name is outside owner zone + return false + } + if ownerHash == nameHash { + return true + } + return false +} + +func packSaltWire(sw *saltWireFmt, msg []byte) (int, error) { + off, err := packStringHex(sw.Salt, msg, 0) + if err != nil { + return off, err + } + return off, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/privaterr.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/privaterr.go new file mode 100644 index 00000000000..74544a74e50 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/privaterr.go @@ -0,0 +1,147 @@ +package dns + +import ( + "fmt" + "strings" +) + +// PrivateRdata is an interface used for implementing "Private Use" RR types, see +// RFC 6895. This allows one to experiment with new RR types, without requesting an +// official type code. Also see dns.PrivateHandle and dns.PrivateHandleRemove. +type PrivateRdata interface { + // String returns the text presentaton of the Rdata of the Private RR. + String() string + // Parse parses the Rdata of the private RR. + Parse([]string) error + // Pack is used when packing a private RR into a buffer. + Pack([]byte) (int, error) + // Unpack is used when unpacking a private RR from a buffer. + // TODO(miek): diff. signature than Pack, see edns0.go for instance. + Unpack([]byte) (int, error) + // Copy copies the Rdata. + Copy(PrivateRdata) error + // Len returns the length in octets of the Rdata. + Len() int +} + +// PrivateRR represents an RR that uses a PrivateRdata user-defined type. +// It mocks normal RRs and implements dns.RR interface. +type PrivateRR struct { + Hdr RR_Header + Data PrivateRdata +} + +func mkPrivateRR(rrtype uint16) *PrivateRR { + // Panics if RR is not an instance of PrivateRR. + rrfunc, ok := TypeToRR[rrtype] + if !ok { + panic(fmt.Sprintf("dns: invalid operation with Private RR type %d", rrtype)) + } + + anyrr := rrfunc() + switch rr := anyrr.(type) { + case *PrivateRR: + return rr + } + panic(fmt.Sprintf("dns: RR is not a PrivateRR, TypeToRR[%d] generator returned %T", rrtype, anyrr)) +} + +// Header return the RR header of r. +func (r *PrivateRR) Header() *RR_Header { return &r.Hdr } + +func (r *PrivateRR) String() string { return r.Hdr.String() + r.Data.String() } + +// Private len and copy parts to satisfy RR interface. +func (r *PrivateRR) len() int { return r.Hdr.len() + r.Data.Len() } +func (r *PrivateRR) copy() RR { + // make new RR like this: + rr := mkPrivateRR(r.Hdr.Rrtype) + rr.Hdr = r.Hdr + + err := r.Data.Copy(rr.Data) + if err != nil { + panic("dns: got value that could not be used to copy Private rdata") + } + return rr +} +func (r *PrivateRR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := r.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + n, err := r.Data.Pack(msg[off:]) + if err != nil { + return len(msg), err + } + off += n + r.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +// PrivateHandle registers a private resource record type. It requires +// string and numeric representation of private RR type and generator function as argument. +func PrivateHandle(rtypestr string, rtype uint16, generator func() PrivateRdata) { + rtypestr = strings.ToUpper(rtypestr) + + TypeToRR[rtype] = func() RR { return &PrivateRR{RR_Header{}, generator()} } + TypeToString[rtype] = rtypestr + StringToType[rtypestr] = rtype + + typeToUnpack[rtype] = func(h RR_Header, msg []byte, off int) (RR, int, error) { + if noRdata(h) { + return &h, off, nil + } + var err error + + rr := mkPrivateRR(h.Rrtype) + rr.Hdr = h + + off1, err := rr.Data.Unpack(msg[off:]) + off += off1 + if err != nil { + return rr, off, err + } + return rr, off, err + } + + setPrivateRR := func(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := mkPrivateRR(h.Rrtype) + rr.Hdr = h + + var l lex + text := make([]string, 0, 2) // could be 0..N elements, median is probably 1 + Fetch: + for { + // TODO(miek): we could also be returning _QUOTE, this might or might not + // be an issue (basically parsing TXT becomes hard) + switch l, _ = c.Next(); l.value { + case zNewline, zEOF: + break Fetch + case zString: + text = append(text, l.token) + } + } + + err := rr.Data.Parse(text) + if err != nil { + return nil, &ParseError{f, err.Error(), l}, "" + } + + return rr, nil, "" + } + + typeToparserFunc[rtype] = parserFunc{setPrivateRR, true} +} + +// PrivateHandleRemove removes definitions required to support private RR type. +func PrivateHandleRemove(rtype uint16) { + rtypestr, ok := TypeToString[rtype] + if ok { + delete(TypeToRR, rtype) + delete(TypeToString, rtype) + delete(typeToparserFunc, rtype) + delete(StringToType, rtypestr) + delete(typeToUnpack, rtype) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/rawmsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/rawmsg.go new file mode 100644 index 00000000000..6e21fba7e1f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/rawmsg.go @@ -0,0 +1,49 @@ +package dns + +import "encoding/binary" + +// rawSetRdlength sets the rdlength in the header of +// the RR. The offset 'off' must be positioned at the +// start of the header of the RR, 'end' must be the +// end of the RR. +func rawSetRdlength(msg []byte, off, end int) bool { + l := len(msg) +Loop: + for { + if off+1 > l { + return false + } + c := int(msg[off]) + off++ + switch c & 0xC0 { + case 0x00: + if c == 0x00 { + // End of the domainname + break Loop + } + if off+c > l { + return false + } + off += c + + case 0xC0: + // pointer, next byte included, ends domainname + off++ + break Loop + } + } + // The domainname has been seen, we at the start of the fixed part in the header. + // Type is 2 bytes, class is 2 bytes, ttl 4 and then 2 bytes for the length. + off += 2 + 2 + 4 + if off+2 > l { + return false + } + //off+1 is the end of the header, 'end' is the end of the rr + //so 'end' - 'off+2' is the length of the rdata + rdatalen := end - (off + 2) + if rdatalen > 0xFFFF { + return false + } + binary.BigEndian.PutUint16(msg[off:], uint16(rdatalen)) + return true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/reverse.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/reverse.go new file mode 100644 index 00000000000..f6e7a47a6e8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/reverse.go @@ -0,0 +1,38 @@ +package dns + +// StringToType is the reverse of TypeToString, needed for string parsing. +var StringToType = reverseInt16(TypeToString) + +// StringToClass is the reverse of ClassToString, needed for string parsing. +var StringToClass = reverseInt16(ClassToString) + +// StringToOpcode is a map of opcodes to strings. +var StringToOpcode = reverseInt(OpcodeToString) + +// StringToRcode is a map of rcodes to strings. +var StringToRcode = reverseInt(RcodeToString) + +// Reverse a map +func reverseInt8(m map[uint8]string) map[string]uint8 { + n := make(map[string]uint8, len(m)) + for u, s := range m { + n[s] = u + } + return n +} + +func reverseInt16(m map[uint16]string) map[string]uint16 { + n := make(map[string]uint16, len(m)) + for u, s := range m { + n[s] = u + } + return n +} + +func reverseInt(m map[int]string) map[string]int { + n := make(map[string]int, len(m)) + for u, s := range m { + n[s] = u + } + return n +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/sanitize.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/sanitize.go new file mode 100644 index 00000000000..cac15787adf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/sanitize.go @@ -0,0 +1,85 @@ +package dns + +// Dedup removes identical RRs from rrs. It preserves the original ordering. +// The lowest TTL of any duplicates is used in the remaining one. Dedup modifies +// rrs. +// m is used to store the RRs temporary. If it is nil a new map will be allocated. +func Dedup(rrs []RR, m map[string]RR) []RR { + + if m == nil { + m = make(map[string]RR) + } + // Save the keys, so we don't have to call normalizedString twice. + keys := make([]*string, 0, len(rrs)) + + for _, r := range rrs { + key := normalizedString(r) + keys = append(keys, &key) + if _, ok := m[key]; ok { + // Shortest TTL wins. + if m[key].Header().Ttl > r.Header().Ttl { + m[key].Header().Ttl = r.Header().Ttl + } + continue + } + + m[key] = r + } + // If the length of the result map equals the amount of RRs we got, + // it means they were all different. We can then just return the original rrset. + if len(m) == len(rrs) { + return rrs + } + + j := 0 + for i, r := range rrs { + // If keys[i] lives in the map, we should copy and remove it. + if _, ok := m[*keys[i]]; ok { + delete(m, *keys[i]) + rrs[j] = r + j++ + } + + if len(m) == 0 { + break + } + } + + return rrs[:j] +} + +// normalizedString returns a normalized string from r. The TTL +// is removed and the domain name is lowercased. We go from this: +// DomainNameTTLCLASSTYPERDATA to: +// lowercasenameCLASSTYPE... +func normalizedString(r RR) string { + // A string Go DNS makes has: domainnameTTL... + b := []byte(r.String()) + + // find the first non-escaped tab, then another, so we capture where the TTL lives. + esc := false + ttlStart, ttlEnd := 0, 0 + for i := 0; i < len(b) && ttlEnd == 0; i++ { + switch { + case b[i] == '\\': + esc = !esc + case b[i] == '\t' && !esc: + if ttlStart == 0 { + ttlStart = i + continue + } + if ttlEnd == 0 { + ttlEnd = i + } + case b[i] >= 'A' && b[i] <= 'Z' && !esc: + b[i] += 32 + default: + esc = false + } + } + + // remove TTL. + copy(b[ttlStart:], b[ttlEnd:]) + cut := ttlEnd - ttlStart + return string(b[:len(b)-cut]) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/scan.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/scan.go new file mode 100644 index 00000000000..61ace121e5c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/scan.go @@ -0,0 +1,1331 @@ +package dns + +import ( + "bufio" + "fmt" + "io" + "os" + "path/filepath" + "strconv" + "strings" +) + +const maxTok = 2048 // Largest token we can return. + +// The maximum depth of $INCLUDE directives supported by the +// ZoneParser API. +const maxIncludeDepth = 7 + +// Tokinize a RFC 1035 zone file. The tokenizer will normalize it: +// * Add ownernames if they are left blank; +// * Suppress sequences of spaces; +// * Make each RR fit on one line (_NEWLINE is send as last) +// * Handle comments: ; +// * Handle braces - anywhere. +const ( + // Zonefile + zEOF = iota + zString + zBlank + zQuote + zNewline + zRrtpe + zOwner + zClass + zDirOrigin // $ORIGIN + zDirTTL // $TTL + zDirInclude // $INCLUDE + zDirGenerate // $GENERATE + + // Privatekey file + zValue + zKey + + zExpectOwnerDir // Ownername + zExpectOwnerBl // Whitespace after the ownername + zExpectAny // Expect rrtype, ttl or class + zExpectAnyNoClass // Expect rrtype or ttl + zExpectAnyNoClassBl // The whitespace after _EXPECT_ANY_NOCLASS + zExpectAnyNoTTL // Expect rrtype or class + zExpectAnyNoTTLBl // Whitespace after _EXPECT_ANY_NOTTL + zExpectRrtype // Expect rrtype + zExpectRrtypeBl // Whitespace BEFORE rrtype + zExpectRdata // The first element of the rdata + zExpectDirTTLBl // Space after directive $TTL + zExpectDirTTL // Directive $TTL + zExpectDirOriginBl // Space after directive $ORIGIN + zExpectDirOrigin // Directive $ORIGIN + zExpectDirIncludeBl // Space after directive $INCLUDE + zExpectDirInclude // Directive $INCLUDE + zExpectDirGenerate // Directive $GENERATE + zExpectDirGenerateBl // Space after directive $GENERATE +) + +// ParseError is a parsing error. It contains the parse error and the location in the io.Reader +// where the error occurred. +type ParseError struct { + file string + err string + lex lex +} + +func (e *ParseError) Error() (s string) { + if e.file != "" { + s = e.file + ": " + } + s += "dns: " + e.err + ": " + strconv.QuoteToASCII(e.lex.token) + " at line: " + + strconv.Itoa(e.lex.line) + ":" + strconv.Itoa(e.lex.column) + return +} + +type lex struct { + token string // text of the token + err bool // when true, token text has lexer error + value uint8 // value: zString, _BLANK, etc. + torc uint16 // type or class as parsed in the lexer, we only need to look this up in the grammar + line int // line in the file + column int // column in the file + comment string // any comment text seen +} + +// Token holds the token that are returned when a zone file is parsed. +type Token struct { + // The scanned resource record when error is not nil. + RR + // When an error occurred, this has the error specifics. + Error *ParseError + // A potential comment positioned after the RR and on the same line. + Comment string +} + +// ttlState describes the state necessary to fill in an omitted RR TTL +type ttlState struct { + ttl uint32 // ttl is the current default TTL + isByDirective bool // isByDirective indicates whether ttl was set by a $TTL directive +} + +// NewRR reads the RR contained in the string s. Only the first RR is +// returned. If s contains no records, NewRR will return nil with no +// error. +// +// The class defaults to IN and TTL defaults to 3600. The full zone +// file syntax like $TTL, $ORIGIN, etc. is supported. +// +// All fields of the returned RR are set, except RR.Header().Rdlength +// which is set to 0. +func NewRR(s string) (RR, error) { + if len(s) > 0 && s[len(s)-1] != '\n' { // We need a closing newline + return ReadRR(strings.NewReader(s+"\n"), "") + } + return ReadRR(strings.NewReader(s), "") +} + +// ReadRR reads the RR contained in r. +// +// The string file is used in error reporting and to resolve relative +// $INCLUDE directives. +// +// See NewRR for more documentation. +func ReadRR(r io.Reader, file string) (RR, error) { + zp := NewZoneParser(r, ".", file) + zp.SetDefaultTTL(defaultTtl) + zp.SetIncludeAllowed(true) + rr, _ := zp.Next() + return rr, zp.Err() +} + +// ParseZone reads a RFC 1035 style zonefile from r. It returns +// *Tokens on the returned channel, each consisting of either a +// parsed RR and optional comment or a nil RR and an error. The +// channel is closed by ParseZone when the end of r is reached. +// +// The string file is used in error reporting and to resolve relative +// $INCLUDE directives. The string origin is used as the initial +// origin, as if the file would start with an $ORIGIN directive. +// +// The directives $INCLUDE, $ORIGIN, $TTL and $GENERATE are all +// supported. +// +// Basic usage pattern when reading from a string (z) containing the +// zone data: +// +// for x := range dns.ParseZone(strings.NewReader(z), "", "") { +// if x.Error != nil { +// // log.Println(x.Error) +// } else { +// // Do something with x.RR +// } +// } +// +// Comments specified after an RR (and on the same line!) are +// returned too: +// +// foo. IN A 10.0.0.1 ; this is a comment +// +// The text "; this is comment" is returned in Token.Comment. +// Comments inside the RR are returned concatenated along with the +// RR. Comments on a line by themselves are discarded. +// +// To prevent memory leaks it is important to always fully drain the +// returned channel. If an error occurs, it will always be the last +// Token sent on the channel. +// +// Deprecated: New users should prefer the ZoneParser API. +func ParseZone(r io.Reader, origin, file string) chan *Token { + t := make(chan *Token, 10000) + go parseZone(r, origin, file, t) + return t +} + +func parseZone(r io.Reader, origin, file string, t chan *Token) { + defer close(t) + + zp := NewZoneParser(r, origin, file) + zp.SetIncludeAllowed(true) + + for rr, ok := zp.Next(); ok; rr, ok = zp.Next() { + t <- &Token{RR: rr, Comment: zp.Comment()} + } + + if err := zp.Err(); err != nil { + pe, ok := err.(*ParseError) + if !ok { + pe = &ParseError{file: file, err: err.Error()} + } + + t <- &Token{Error: pe} + } +} + +// ZoneParser is a parser for an RFC 1035 style zonefile. +// +// Each parsed RR in the zone is returned sequentially from Next. An +// optional comment can be retrieved with Comment. +// +// The directives $INCLUDE, $ORIGIN, $TTL and $GENERATE are all +// supported. Although $INCLUDE is disabled by default. +// +// Basic usage pattern when reading from a string (z) containing the +// zone data: +// +// zp := NewZoneParser(strings.NewReader(z), "", "") +// +// for rr, ok := zp.Next(); ok; rr, ok = zp.Next() { +// // Do something with rr +// } +// +// if err := zp.Err(); err != nil { +// // log.Println(err) +// } +// +// Comments specified after an RR (and on the same line!) are +// returned too: +// +// foo. IN A 10.0.0.1 ; this is a comment +// +// The text "; this is comment" is returned from Comment. Comments inside +// the RR are returned concatenated along with the RR. Comments on a line +// by themselves are discarded. +type ZoneParser struct { + c *zlexer + + parseErr *ParseError + + origin string + file string + + defttl *ttlState + + h RR_Header + + // sub is used to parse $INCLUDE files and $GENERATE directives. + // Next, by calling subNext, forwards the resulting RRs from this + // sub parser to the calling code. + sub *ZoneParser + osFile *os.File + + com string + + includeDepth uint8 + + includeAllowed bool +} + +// NewZoneParser returns an RFC 1035 style zonefile parser that reads +// from r. +// +// The string file is used in error reporting and to resolve relative +// $INCLUDE directives. The string origin is used as the initial +// origin, as if the file would start with an $ORIGIN directive. +func NewZoneParser(r io.Reader, origin, file string) *ZoneParser { + var pe *ParseError + if origin != "" { + origin = Fqdn(origin) + if _, ok := IsDomainName(origin); !ok { + pe = &ParseError{file, "bad initial origin name", lex{}} + } + } + + return &ZoneParser{ + c: newZLexer(r), + + parseErr: pe, + + origin: origin, + file: file, + } +} + +// SetDefaultTTL sets the parsers default TTL to ttl. +func (zp *ZoneParser) SetDefaultTTL(ttl uint32) { + zp.defttl = &ttlState{ttl, false} +} + +// SetIncludeAllowed controls whether $INCLUDE directives are +// allowed. $INCLUDE directives are not supported by default. +// +// The $INCLUDE directive will open and read from a user controlled +// file on the system. Even if the file is not a valid zonefile, the +// contents of the file may be revealed in error messages, such as: +// +// /etc/passwd: dns: not a TTL: "root:x:0:0:root:/root:/bin/bash" at line: 1:31 +// /etc/shadow: dns: not a TTL: "root:$6$::0:99999:7:::" at line: 1:125 +func (zp *ZoneParser) SetIncludeAllowed(v bool) { + zp.includeAllowed = v +} + +// Err returns the first non-EOF error that was encountered by the +// ZoneParser. +func (zp *ZoneParser) Err() error { + if zp.parseErr != nil { + return zp.parseErr + } + + if zp.sub != nil { + if err := zp.sub.Err(); err != nil { + return err + } + } + + return zp.c.Err() +} + +func (zp *ZoneParser) setParseError(err string, l lex) (RR, bool) { + zp.parseErr = &ParseError{zp.file, err, l} + return nil, false +} + +// Comment returns an optional text comment that occurred alongside +// the RR. +func (zp *ZoneParser) Comment() string { + return zp.com +} + +func (zp *ZoneParser) subNext() (RR, bool) { + if rr, ok := zp.sub.Next(); ok { + zp.com = zp.sub.com + return rr, true + } + + if zp.sub.osFile != nil { + zp.sub.osFile.Close() + zp.sub.osFile = nil + } + + if zp.sub.Err() != nil { + // We have errors to surface. + return nil, false + } + + zp.sub = nil + return zp.Next() +} + +// Next advances the parser to the next RR in the zonefile and +// returns the (RR, true). It will return (nil, false) when the +// parsing stops, either by reaching the end of the input or an +// error. After Next returns (nil, false), the Err method will return +// any error that occurred during parsing. +func (zp *ZoneParser) Next() (RR, bool) { + zp.com = "" + + if zp.parseErr != nil { + return nil, false + } + if zp.sub != nil { + return zp.subNext() + } + + // 6 possible beginnings of a line (_ is a space): + // + // 0. zRRTYPE -> all omitted until the rrtype + // 1. zOwner _ zRrtype -> class/ttl omitted + // 2. zOwner _ zString _ zRrtype -> class omitted + // 3. zOwner _ zString _ zClass _ zRrtype -> ttl/class + // 4. zOwner _ zClass _ zRrtype -> ttl omitted + // 5. zOwner _ zClass _ zString _ zRrtype -> class/ttl (reversed) + // + // After detecting these, we know the zRrtype so we can jump to functions + // handling the rdata for each of these types. + + st := zExpectOwnerDir // initial state + h := &zp.h + + for l, ok := zp.c.Next(); ok; l, ok = zp.c.Next() { + // zlexer spotted an error already + if l.err { + return zp.setParseError(l.token, l) + } + + switch st { + case zExpectOwnerDir: + // We can also expect a directive, like $TTL or $ORIGIN + if zp.defttl != nil { + h.Ttl = zp.defttl.ttl + } + + h.Class = ClassINET + + switch l.value { + case zNewline: + st = zExpectOwnerDir + case zOwner: + name, ok := toAbsoluteName(l.token, zp.origin) + if !ok { + return zp.setParseError("bad owner name", l) + } + + h.Name = name + + st = zExpectOwnerBl + case zDirTTL: + st = zExpectDirTTLBl + case zDirOrigin: + st = zExpectDirOriginBl + case zDirInclude: + st = zExpectDirIncludeBl + case zDirGenerate: + st = zExpectDirGenerateBl + case zRrtpe: + h.Rrtype = l.torc + + st = zExpectRdata + case zClass: + h.Class = l.torc + + st = zExpectAnyNoClassBl + case zBlank: + // Discard, can happen when there is nothing on the + // line except the RR type + case zString: + ttl, ok := stringToTTL(l.token) + if !ok { + return zp.setParseError("not a TTL", l) + } + + h.Ttl = ttl + + if zp.defttl == nil || !zp.defttl.isByDirective { + zp.defttl = &ttlState{ttl, false} + } + + st = zExpectAnyNoTTLBl + default: + return zp.setParseError("syntax error at beginning", l) + } + case zExpectDirIncludeBl: + if l.value != zBlank { + return zp.setParseError("no blank after $INCLUDE-directive", l) + } + + st = zExpectDirInclude + case zExpectDirInclude: + if l.value != zString { + return zp.setParseError("expecting $INCLUDE value, not this...", l) + } + + neworigin := zp.origin // There may be optionally a new origin set after the filename, if not use current one + switch l, _ := zp.c.Next(); l.value { + case zBlank: + l, _ := zp.c.Next() + if l.value == zString { + name, ok := toAbsoluteName(l.token, zp.origin) + if !ok { + return zp.setParseError("bad origin name", l) + } + + neworigin = name + } + case zNewline, zEOF: + // Ok + default: + return zp.setParseError("garbage after $INCLUDE", l) + } + + if !zp.includeAllowed { + return zp.setParseError("$INCLUDE directive not allowed", l) + } + if zp.includeDepth >= maxIncludeDepth { + return zp.setParseError("too deeply nested $INCLUDE", l) + } + + // Start with the new file + includePath := l.token + if !filepath.IsAbs(includePath) { + includePath = filepath.Join(filepath.Dir(zp.file), includePath) + } + + r1, e1 := os.Open(includePath) + if e1 != nil { + var as string + if !filepath.IsAbs(l.token) { + as = fmt.Sprintf(" as `%s'", includePath) + } + + msg := fmt.Sprintf("failed to open `%s'%s: %v", l.token, as, e1) + return zp.setParseError(msg, l) + } + + zp.sub = NewZoneParser(r1, neworigin, includePath) + zp.sub.defttl, zp.sub.includeDepth, zp.sub.osFile = zp.defttl, zp.includeDepth+1, r1 + zp.sub.SetIncludeAllowed(true) + return zp.subNext() + case zExpectDirTTLBl: + if l.value != zBlank { + return zp.setParseError("no blank after $TTL-directive", l) + } + + st = zExpectDirTTL + case zExpectDirTTL: + if l.value != zString { + return zp.setParseError("expecting $TTL value, not this...", l) + } + + if e, _ := slurpRemainder(zp.c, zp.file); e != nil { + zp.parseErr = e + return nil, false + } + + ttl, ok := stringToTTL(l.token) + if !ok { + return zp.setParseError("expecting $TTL value, not this...", l) + } + + zp.defttl = &ttlState{ttl, true} + + st = zExpectOwnerDir + case zExpectDirOriginBl: + if l.value != zBlank { + return zp.setParseError("no blank after $ORIGIN-directive", l) + } + + st = zExpectDirOrigin + case zExpectDirOrigin: + if l.value != zString { + return zp.setParseError("expecting $ORIGIN value, not this...", l) + } + + if e, _ := slurpRemainder(zp.c, zp.file); e != nil { + zp.parseErr = e + return nil, false + } + + name, ok := toAbsoluteName(l.token, zp.origin) + if !ok { + return zp.setParseError("bad origin name", l) + } + + zp.origin = name + + st = zExpectOwnerDir + case zExpectDirGenerateBl: + if l.value != zBlank { + return zp.setParseError("no blank after $GENERATE-directive", l) + } + + st = zExpectDirGenerate + case zExpectDirGenerate: + if l.value != zString { + return zp.setParseError("expecting $GENERATE value, not this...", l) + } + + return zp.generate(l) + case zExpectOwnerBl: + if l.value != zBlank { + return zp.setParseError("no blank after owner", l) + } + + st = zExpectAny + case zExpectAny: + switch l.value { + case zRrtpe: + if zp.defttl == nil { + return zp.setParseError("missing TTL with no previous value", l) + } + + h.Rrtype = l.torc + + st = zExpectRdata + case zClass: + h.Class = l.torc + + st = zExpectAnyNoClassBl + case zString: + ttl, ok := stringToTTL(l.token) + if !ok { + return zp.setParseError("not a TTL", l) + } + + h.Ttl = ttl + + if zp.defttl == nil || !zp.defttl.isByDirective { + zp.defttl = &ttlState{ttl, false} + } + + st = zExpectAnyNoTTLBl + default: + return zp.setParseError("expecting RR type, TTL or class, not this...", l) + } + case zExpectAnyNoClassBl: + if l.value != zBlank { + return zp.setParseError("no blank before class", l) + } + + st = zExpectAnyNoClass + case zExpectAnyNoTTLBl: + if l.value != zBlank { + return zp.setParseError("no blank before TTL", l) + } + + st = zExpectAnyNoTTL + case zExpectAnyNoTTL: + switch l.value { + case zClass: + h.Class = l.torc + + st = zExpectRrtypeBl + case zRrtpe: + h.Rrtype = l.torc + + st = zExpectRdata + default: + return zp.setParseError("expecting RR type or class, not this...", l) + } + case zExpectAnyNoClass: + switch l.value { + case zString: + ttl, ok := stringToTTL(l.token) + if !ok { + return zp.setParseError("not a TTL", l) + } + + h.Ttl = ttl + + if zp.defttl == nil || !zp.defttl.isByDirective { + zp.defttl = &ttlState{ttl, false} + } + + st = zExpectRrtypeBl + case zRrtpe: + h.Rrtype = l.torc + + st = zExpectRdata + default: + return zp.setParseError("expecting RR type or TTL, not this...", l) + } + case zExpectRrtypeBl: + if l.value != zBlank { + return zp.setParseError("no blank before RR type", l) + } + + st = zExpectRrtype + case zExpectRrtype: + if l.value != zRrtpe { + return zp.setParseError("unknown RR type", l) + } + + h.Rrtype = l.torc + + st = zExpectRdata + case zExpectRdata: + r, e, c1 := setRR(*h, zp.c, zp.origin, zp.file) + if e != nil { + // If e.lex is nil than we have encounter a unknown RR type + // in that case we substitute our current lex token + if e.lex.token == "" && e.lex.value == 0 { + e.lex = l // Uh, dirty + } + + zp.parseErr = e + return nil, false + } + + zp.com = c1 + return r, true + } + } + + // If we get here, we and the h.Rrtype is still zero, we haven't parsed anything, this + // is not an error, because an empty zone file is still a zone file. + return nil, false +} + +type zlexer struct { + br io.ByteReader + + readErr error + + line int + column int + + com string + + l lex + + brace int + quote bool + space bool + commt bool + rrtype bool + owner bool + + nextL bool + + eol bool // end-of-line +} + +func newZLexer(r io.Reader) *zlexer { + br, ok := r.(io.ByteReader) + if !ok { + br = bufio.NewReaderSize(r, 1024) + } + + return &zlexer{ + br: br, + + line: 1, + + owner: true, + } +} + +func (zl *zlexer) Err() error { + if zl.readErr == io.EOF { + return nil + } + + return zl.readErr +} + +// readByte returns the next byte from the input +func (zl *zlexer) readByte() (byte, bool) { + if zl.readErr != nil { + return 0, false + } + + c, err := zl.br.ReadByte() + if err != nil { + zl.readErr = err + return 0, false + } + + // delay the newline handling until the next token is delivered, + // fixes off-by-one errors when reporting a parse error. + if zl.eol { + zl.line++ + zl.column = 0 + zl.eol = false + } + + if c == '\n' { + zl.eol = true + } else { + zl.column++ + } + + return c, true +} + +func (zl *zlexer) Next() (lex, bool) { + l := &zl.l + if zl.nextL { + zl.nextL = false + return *l, true + } + if l.err { + // Parsing errors should be sticky. + return lex{value: zEOF}, false + } + + var ( + str [maxTok]byte // Hold string text + com [maxTok]byte // Hold comment text + + stri int // Offset in str (0 means empty) + comi int // Offset in com (0 means empty) + + escape bool + ) + + if zl.com != "" { + comi = copy(com[:], zl.com) + zl.com = "" + } + + for x, ok := zl.readByte(); ok; x, ok = zl.readByte() { + l.line, l.column = zl.line, zl.column + l.comment = "" + + if stri >= len(str) { + l.token = "token length insufficient for parsing" + l.err = true + return *l, true + } + if comi >= len(com) { + l.token = "comment length insufficient for parsing" + l.err = true + return *l, true + } + + switch x { + case ' ', '\t': + if escape || zl.quote { + // Inside quotes or escaped this is legal. + str[stri] = x + stri++ + + escape = false + break + } + + if zl.commt { + com[comi] = x + comi++ + break + } + + var retL lex + if stri == 0 { + // Space directly in the beginning, handled in the grammar + } else if zl.owner { + // If we have a string and its the first, make it an owner + l.value = zOwner + l.token = string(str[:stri]) + + // escape $... start with a \ not a $, so this will work + switch strings.ToUpper(l.token) { + case "$TTL": + l.value = zDirTTL + case "$ORIGIN": + l.value = zDirOrigin + case "$INCLUDE": + l.value = zDirInclude + case "$GENERATE": + l.value = zDirGenerate + } + + retL = *l + } else { + l.value = zString + l.token = string(str[:stri]) + + if !zl.rrtype { + tokenUpper := strings.ToUpper(l.token) + if t, ok := StringToType[tokenUpper]; ok { + l.value = zRrtpe + l.torc = t + + zl.rrtype = true + } else if strings.HasPrefix(tokenUpper, "TYPE") { + t, ok := typeToInt(l.token) + if !ok { + l.token = "unknown RR type" + l.err = true + return *l, true + } + + l.value = zRrtpe + l.torc = t + + zl.rrtype = true + } + + if t, ok := StringToClass[tokenUpper]; ok { + l.value = zClass + l.torc = t + } else if strings.HasPrefix(tokenUpper, "CLASS") { + t, ok := classToInt(l.token) + if !ok { + l.token = "unknown class" + l.err = true + return *l, true + } + + l.value = zClass + l.torc = t + } + } + + retL = *l + } + + zl.owner = false + + if !zl.space { + zl.space = true + + l.value = zBlank + l.token = " " + + if retL == (lex{}) { + return *l, true + } + + zl.nextL = true + } + + if retL != (lex{}) { + return retL, true + } + case ';': + if escape || zl.quote { + // Inside quotes or escaped this is legal. + str[stri] = x + stri++ + + escape = false + break + } + + zl.commt = true + zl.com = "" + + if comi > 1 { + // A newline was previously seen inside a comment that + // was inside braces and we delayed adding it until now. + com[comi] = ' ' // convert newline to space + comi++ + } + + com[comi] = ';' + comi++ + + if stri > 0 { + zl.com = string(com[:comi]) + + l.value = zString + l.token = string(str[:stri]) + return *l, true + } + case '\r': + escape = false + + if zl.quote { + str[stri] = x + stri++ + } + + // discard if outside of quotes + case '\n': + escape = false + + // Escaped newline + if zl.quote { + str[stri] = x + stri++ + break + } + + if zl.commt { + // Reset a comment + zl.commt = false + zl.rrtype = false + + // If not in a brace this ends the comment AND the RR + if zl.brace == 0 { + zl.owner = true + + l.value = zNewline + l.token = "\n" + l.comment = string(com[:comi]) + return *l, true + } + + zl.com = string(com[:comi]) + break + } + + if zl.brace == 0 { + // If there is previous text, we should output it here + var retL lex + if stri != 0 { + l.value = zString + l.token = string(str[:stri]) + + if !zl.rrtype { + tokenUpper := strings.ToUpper(l.token) + if t, ok := StringToType[tokenUpper]; ok { + zl.rrtype = true + + l.value = zRrtpe + l.torc = t + } + } + + retL = *l + } + + l.value = zNewline + l.token = "\n" + l.comment = zl.com + + zl.com = "" + zl.rrtype = false + zl.owner = true + + if retL != (lex{}) { + zl.nextL = true + return retL, true + } + + return *l, true + } + case '\\': + // comments do not get escaped chars, everything is copied + if zl.commt { + com[comi] = x + comi++ + break + } + + // something already escaped must be in string + if escape { + str[stri] = x + stri++ + + escape = false + break + } + + // something escaped outside of string gets added to string + str[stri] = x + stri++ + + escape = true + case '"': + if zl.commt { + com[comi] = x + comi++ + break + } + + if escape { + str[stri] = x + stri++ + + escape = false + break + } + + zl.space = false + + // send previous gathered text and the quote + var retL lex + if stri != 0 { + l.value = zString + l.token = string(str[:stri]) + + retL = *l + } + + // send quote itself as separate token + l.value = zQuote + l.token = "\"" + + zl.quote = !zl.quote + + if retL != (lex{}) { + zl.nextL = true + return retL, true + } + + return *l, true + case '(', ')': + if zl.commt { + com[comi] = x + comi++ + break + } + + if escape || zl.quote { + // Inside quotes or escaped this is legal. + str[stri] = x + stri++ + + escape = false + break + } + + switch x { + case ')': + zl.brace-- + + if zl.brace < 0 { + l.token = "extra closing brace" + l.err = true + return *l, true + } + case '(': + zl.brace++ + } + default: + escape = false + + if zl.commt { + com[comi] = x + comi++ + break + } + + str[stri] = x + stri++ + + zl.space = false + } + } + + if zl.readErr != nil && zl.readErr != io.EOF { + // Don't return any tokens after a read error occurs. + return lex{value: zEOF}, false + } + + var retL lex + if stri > 0 { + // Send remainder of str + l.value = zString + l.token = string(str[:stri]) + retL = *l + + if comi <= 0 { + return retL, true + } + } + + if comi > 0 { + // Send remainder of com + l.value = zNewline + l.token = "\n" + l.comment = string(com[:comi]) + + if retL != (lex{}) { + zl.nextL = true + return retL, true + } + + return *l, true + } + + if zl.brace != 0 { + l.comment = "" // in case there was left over string and comment + l.token = "unbalanced brace" + l.err = true + return *l, true + } + + return lex{value: zEOF}, false +} + +// Extract the class number from CLASSxx +func classToInt(token string) (uint16, bool) { + offset := 5 + if len(token) < offset+1 { + return 0, false + } + class, err := strconv.ParseUint(token[offset:], 10, 16) + if err != nil { + return 0, false + } + return uint16(class), true +} + +// Extract the rr number from TYPExxx +func typeToInt(token string) (uint16, bool) { + offset := 4 + if len(token) < offset+1 { + return 0, false + } + typ, err := strconv.ParseUint(token[offset:], 10, 16) + if err != nil { + return 0, false + } + return uint16(typ), true +} + +// stringToTTL parses things like 2w, 2m, etc, and returns the time in seconds. +func stringToTTL(token string) (uint32, bool) { + s := uint32(0) + i := uint32(0) + for _, c := range token { + switch c { + case 's', 'S': + s += i + i = 0 + case 'm', 'M': + s += i * 60 + i = 0 + case 'h', 'H': + s += i * 60 * 60 + i = 0 + case 'd', 'D': + s += i * 60 * 60 * 24 + i = 0 + case 'w', 'W': + s += i * 60 * 60 * 24 * 7 + i = 0 + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + i *= 10 + i += uint32(c) - '0' + default: + return 0, false + } + } + return s + i, true +} + +// Parse LOC records' [.][mM] into a +// mantissa exponent format. Token should contain the entire +// string (i.e. no spaces allowed) +func stringToCm(token string) (e, m uint8, ok bool) { + if token[len(token)-1] == 'M' || token[len(token)-1] == 'm' { + token = token[0 : len(token)-1] + } + s := strings.SplitN(token, ".", 2) + var meters, cmeters, val int + var err error + switch len(s) { + case 2: + if cmeters, err = strconv.Atoi(s[1]); err != nil { + return + } + fallthrough + case 1: + if meters, err = strconv.Atoi(s[0]); err != nil { + return + } + case 0: + // huh? + return 0, 0, false + } + ok = true + if meters > 0 { + e = 2 + val = meters + } else { + e = 0 + val = cmeters + } + for val > 10 { + e++ + val /= 10 + } + if e > 9 { + ok = false + } + m = uint8(val) + return +} + +func toAbsoluteName(name, origin string) (absolute string, ok bool) { + // check for an explicit origin reference + if name == "@" { + // require a nonempty origin + if origin == "" { + return "", false + } + return origin, true + } + + // require a valid domain name + _, ok = IsDomainName(name) + if !ok || name == "" { + return "", false + } + + // check if name is already absolute + if name[len(name)-1] == '.' { + return name, true + } + + // require a nonempty origin + if origin == "" { + return "", false + } + return appendOrigin(name, origin), true +} + +func appendOrigin(name, origin string) string { + if origin == "." { + return name + origin + } + return name + "." + origin +} + +// LOC record helper function +func locCheckNorth(token string, latitude uint32) (uint32, bool) { + switch token { + case "n", "N": + return LOC_EQUATOR + latitude, true + case "s", "S": + return LOC_EQUATOR - latitude, true + } + return latitude, false +} + +// LOC record helper function +func locCheckEast(token string, longitude uint32) (uint32, bool) { + switch token { + case "e", "E": + return LOC_EQUATOR + longitude, true + case "w", "W": + return LOC_EQUATOR - longitude, true + } + return longitude, false +} + +// "Eat" the rest of the "line". Return potential comments +func slurpRemainder(c *zlexer, f string) (*ParseError, string) { + l, _ := c.Next() + com := "" + switch l.value { + case zBlank: + l, _ = c.Next() + com = l.comment + if l.value != zNewline && l.value != zEOF { + return &ParseError{f, "garbage after rdata", l}, "" + } + case zNewline: + com = l.comment + case zEOF: + default: + return &ParseError{f, "garbage after rdata", l}, "" + } + return nil, com +} + +// Parse a 64 bit-like ipv6 address: "0014:4fff:ff20:ee64" +// Used for NID and L64 record. +func stringToNodeID(l lex) (uint64, *ParseError) { + if len(l.token) < 19 { + return 0, &ParseError{l.token, "bad NID/L64 NodeID/Locator64", l} + } + // There must be three colons at fixes postitions, if not its a parse error + if l.token[4] != ':' && l.token[9] != ':' && l.token[14] != ':' { + return 0, &ParseError{l.token, "bad NID/L64 NodeID/Locator64", l} + } + s := l.token[0:4] + l.token[5:9] + l.token[10:14] + l.token[15:19] + u, err := strconv.ParseUint(s, 16, 64) + if err != nil { + return 0, &ParseError{l.token, "bad NID/L64 NodeID/Locator64", l} + } + return u, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/scan_rr.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/scan_rr.go new file mode 100644 index 00000000000..935d22c3ff8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/scan_rr.go @@ -0,0 +1,2209 @@ +package dns + +import ( + "encoding/base64" + "net" + "strconv" + "strings" +) + +type parserFunc struct { + // Func defines the function that parses the tokens and returns the RR + // or an error. The last string contains any comments in the line as + // they returned by the lexer as well. + Func func(h RR_Header, c *zlexer, origin string, file string) (RR, *ParseError, string) + // Signals if the RR ending is of variable length, like TXT or records + // that have Hexadecimal or Base64 as their last element in the Rdata. Records + // that have a fixed ending or for instance A, AAAA, SOA and etc. + Variable bool +} + +// Parse the rdata of each rrtype. +// All data from the channel c is either zString or zBlank. +// After the rdata there may come a zBlank and then a zNewline +// or immediately a zNewline. If this is not the case we flag +// an *ParseError: garbage after rdata. +func setRR(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + parserfunc, ok := typeToparserFunc[h.Rrtype] + if ok { + r, e, cm := parserfunc.Func(h, c, o, f) + if parserfunc.Variable { + return r, e, cm + } + if e != nil { + return nil, e, "" + } + e, cm = slurpRemainder(c, f) + if e != nil { + return nil, e, "" + } + return r, nil, cm + } + // RFC3957 RR (Unknown RR handling) + return setRFC3597(h, c, o, f) +} + +// A remainder of the rdata with embedded spaces, return the parsed string (sans the spaces) +// or an error +func endingToString(c *zlexer, errstr, f string) (string, *ParseError, string) { + s := "" + l, _ := c.Next() // zString + for l.value != zNewline && l.value != zEOF { + if l.err { + return s, &ParseError{f, errstr, l}, "" + } + switch l.value { + case zString: + s += l.token + case zBlank: // Ok + default: + return "", &ParseError{f, errstr, l}, "" + } + l, _ = c.Next() + } + return s, nil, l.comment +} + +// A remainder of the rdata with embedded spaces, split on unquoted whitespace +// and return the parsed string slice or an error +func endingToTxtSlice(c *zlexer, errstr, f string) ([]string, *ParseError, string) { + // Get the remaining data until we see a zNewline + l, _ := c.Next() + if l.err { + return nil, &ParseError{f, errstr, l}, "" + } + + // Build the slice + s := make([]string, 0) + quote := false + empty := false + for l.value != zNewline && l.value != zEOF { + if l.err { + return nil, &ParseError{f, errstr, l}, "" + } + switch l.value { + case zString: + empty = false + if len(l.token) > 255 { + // split up tokens that are larger than 255 into 255-chunks + sx := []string{} + p, i := 0, 255 + for { + if i <= len(l.token) { + sx = append(sx, l.token[p:i]) + } else { + sx = append(sx, l.token[p:]) + break + + } + p, i = p+255, i+255 + } + s = append(s, sx...) + break + } + + s = append(s, l.token) + case zBlank: + if quote { + // zBlank can only be seen in between txt parts. + return nil, &ParseError{f, errstr, l}, "" + } + case zQuote: + if empty && quote { + s = append(s, "") + } + quote = !quote + empty = true + default: + return nil, &ParseError{f, errstr, l}, "" + } + l, _ = c.Next() + } + if quote { + return nil, &ParseError{f, errstr, l}, "" + } + return s, nil, l.comment +} + +func setA(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(A) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + rr.A = net.ParseIP(l.token) + if rr.A == nil || l.err { + return nil, &ParseError{f, "bad A A", l}, "" + } + return rr, nil, "" +} + +func setAAAA(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(AAAA) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + rr.AAAA = net.ParseIP(l.token) + if rr.AAAA == nil || l.err { + return nil, &ParseError{f, "bad AAAA AAAA", l}, "" + } + return rr, nil, "" +} + +func setNS(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NS) + rr.Hdr = h + + l, _ := c.Next() + rr.Ns = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad NS Ns", l}, "" + } + rr.Ns = name + return rr, nil, "" +} + +func setPTR(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(PTR) + rr.Hdr = h + + l, _ := c.Next() + rr.Ptr = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad PTR Ptr", l}, "" + } + rr.Ptr = name + return rr, nil, "" +} + +func setNSAPPTR(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NSAPPTR) + rr.Hdr = h + + l, _ := c.Next() + rr.Ptr = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad NSAP-PTR Ptr", l}, "" + } + rr.Ptr = name + return rr, nil, "" +} + +func setRP(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(RP) + rr.Hdr = h + + l, _ := c.Next() + rr.Mbox = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + mbox, mboxOk := toAbsoluteName(l.token, o) + if l.err || !mboxOk { + return nil, &ParseError{f, "bad RP Mbox", l}, "" + } + rr.Mbox = mbox + + c.Next() // zBlank + l, _ = c.Next() + rr.Txt = l.token + + txt, txtOk := toAbsoluteName(l.token, o) + if l.err || !txtOk { + return nil, &ParseError{f, "bad RP Txt", l}, "" + } + rr.Txt = txt + + return rr, nil, "" +} + +func setMR(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(MR) + rr.Hdr = h + + l, _ := c.Next() + rr.Mr = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad MR Mr", l}, "" + } + rr.Mr = name + return rr, nil, "" +} + +func setMB(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(MB) + rr.Hdr = h + + l, _ := c.Next() + rr.Mb = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad MB Mb", l}, "" + } + rr.Mb = name + return rr, nil, "" +} + +func setMG(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(MG) + rr.Hdr = h + + l, _ := c.Next() + rr.Mg = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad MG Mg", l}, "" + } + rr.Mg = name + return rr, nil, "" +} + +func setHINFO(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(HINFO) + rr.Hdr = h + + chunks, e, c1 := endingToTxtSlice(c, "bad HINFO Fields", f) + if e != nil { + return nil, e, c1 + } + + if ln := len(chunks); ln == 0 { + return rr, nil, "" + } else if ln == 1 { + // Can we split it? + if out := strings.Fields(chunks[0]); len(out) > 1 { + chunks = out + } else { + chunks = append(chunks, "") + } + } + + rr.Cpu = chunks[0] + rr.Os = strings.Join(chunks[1:], " ") + + return rr, nil, "" +} + +func setMINFO(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(MINFO) + rr.Hdr = h + + l, _ := c.Next() + rr.Rmail = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + rmail, rmailOk := toAbsoluteName(l.token, o) + if l.err || !rmailOk { + return nil, &ParseError{f, "bad MINFO Rmail", l}, "" + } + rr.Rmail = rmail + + c.Next() // zBlank + l, _ = c.Next() + rr.Email = l.token + + email, emailOk := toAbsoluteName(l.token, o) + if l.err || !emailOk { + return nil, &ParseError{f, "bad MINFO Email", l}, "" + } + rr.Email = email + + return rr, nil, "" +} + +func setMF(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(MF) + rr.Hdr = h + + l, _ := c.Next() + rr.Mf = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad MF Mf", l}, "" + } + rr.Mf = name + return rr, nil, "" +} + +func setMD(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(MD) + rr.Hdr = h + + l, _ := c.Next() + rr.Md = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad MD Md", l}, "" + } + rr.Md = name + return rr, nil, "" +} + +func setMX(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(MX) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad MX Pref", l}, "" + } + rr.Preference = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Mx = l.token + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad MX Mx", l}, "" + } + rr.Mx = name + + return rr, nil, "" +} + +func setRT(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(RT) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil { + return nil, &ParseError{f, "bad RT Preference", l}, "" + } + rr.Preference = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Host = l.token + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad RT Host", l}, "" + } + rr.Host = name + + return rr, nil, "" +} + +func setAFSDB(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(AFSDB) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad AFSDB Subtype", l}, "" + } + rr.Subtype = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Hostname = l.token + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad AFSDB Hostname", l}, "" + } + rr.Hostname = name + return rr, nil, "" +} + +func setX25(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(X25) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + if l.err { + return nil, &ParseError{f, "bad X25 PSDNAddress", l}, "" + } + rr.PSDNAddress = l.token + return rr, nil, "" +} + +func setKX(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(KX) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad KX Pref", l}, "" + } + rr.Preference = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Exchanger = l.token + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad KX Exchanger", l}, "" + } + rr.Exchanger = name + return rr, nil, "" +} + +func setCNAME(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(CNAME) + rr.Hdr = h + + l, _ := c.Next() + rr.Target = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad CNAME Target", l}, "" + } + rr.Target = name + return rr, nil, "" +} + +func setDNAME(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(DNAME) + rr.Hdr = h + + l, _ := c.Next() + rr.Target = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad DNAME Target", l}, "" + } + rr.Target = name + return rr, nil, "" +} + +func setSOA(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(SOA) + rr.Hdr = h + + l, _ := c.Next() + rr.Ns = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + ns, nsOk := toAbsoluteName(l.token, o) + if l.err || !nsOk { + return nil, &ParseError{f, "bad SOA Ns", l}, "" + } + rr.Ns = ns + + c.Next() // zBlank + l, _ = c.Next() + rr.Mbox = l.token + + mbox, mboxOk := toAbsoluteName(l.token, o) + if l.err || !mboxOk { + return nil, &ParseError{f, "bad SOA Mbox", l}, "" + } + rr.Mbox = mbox + + c.Next() // zBlank + + var ( + v uint32 + ok bool + ) + for i := 0; i < 5; i++ { + l, _ = c.Next() + if l.err { + return nil, &ParseError{f, "bad SOA zone parameter", l}, "" + } + if j, e := strconv.ParseUint(l.token, 10, 32); e != nil { + if i == 0 { + // Serial must be a number + return nil, &ParseError{f, "bad SOA zone parameter", l}, "" + } + // We allow other fields to be unitful duration strings + if v, ok = stringToTTL(l.token); !ok { + return nil, &ParseError{f, "bad SOA zone parameter", l}, "" + + } + } else { + v = uint32(j) + } + switch i { + case 0: + rr.Serial = v + c.Next() // zBlank + case 1: + rr.Refresh = v + c.Next() // zBlank + case 2: + rr.Retry = v + c.Next() // zBlank + case 3: + rr.Expire = v + c.Next() // zBlank + case 4: + rr.Minttl = v + } + } + return rr, nil, "" +} + +func setSRV(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(SRV) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad SRV Priority", l}, "" + } + rr.Priority = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + i, e = strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad SRV Weight", l}, "" + } + rr.Weight = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + i, e = strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad SRV Port", l}, "" + } + rr.Port = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Target = l.token + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad SRV Target", l}, "" + } + rr.Target = name + return rr, nil, "" +} + +func setNAPTR(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NAPTR) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad NAPTR Order", l}, "" + } + rr.Order = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + i, e = strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad NAPTR Preference", l}, "" + } + rr.Preference = uint16(i) + + // Flags + c.Next() // zBlank + l, _ = c.Next() // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Flags", l}, "" + } + l, _ = c.Next() // Either String or Quote + if l.value == zString { + rr.Flags = l.token + l, _ = c.Next() // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Flags", l}, "" + } + } else if l.value == zQuote { + rr.Flags = "" + } else { + return nil, &ParseError{f, "bad NAPTR Flags", l}, "" + } + + // Service + c.Next() // zBlank + l, _ = c.Next() // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Service", l}, "" + } + l, _ = c.Next() // Either String or Quote + if l.value == zString { + rr.Service = l.token + l, _ = c.Next() // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Service", l}, "" + } + } else if l.value == zQuote { + rr.Service = "" + } else { + return nil, &ParseError{f, "bad NAPTR Service", l}, "" + } + + // Regexp + c.Next() // zBlank + l, _ = c.Next() // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Regexp", l}, "" + } + l, _ = c.Next() // Either String or Quote + if l.value == zString { + rr.Regexp = l.token + l, _ = c.Next() // _QUOTE + if l.value != zQuote { + return nil, &ParseError{f, "bad NAPTR Regexp", l}, "" + } + } else if l.value == zQuote { + rr.Regexp = "" + } else { + return nil, &ParseError{f, "bad NAPTR Regexp", l}, "" + } + + // After quote no space?? + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Replacement = l.token + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad NAPTR Replacement", l}, "" + } + rr.Replacement = name + return rr, nil, "" +} + +func setTALINK(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(TALINK) + rr.Hdr = h + + l, _ := c.Next() + rr.PreviousName = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + previousName, previousNameOk := toAbsoluteName(l.token, o) + if l.err || !previousNameOk { + return nil, &ParseError{f, "bad TALINK PreviousName", l}, "" + } + rr.PreviousName = previousName + + c.Next() // zBlank + l, _ = c.Next() + rr.NextName = l.token + + nextName, nextNameOk := toAbsoluteName(l.token, o) + if l.err || !nextNameOk { + return nil, &ParseError{f, "bad TALINK NextName", l}, "" + } + rr.NextName = nextName + + return rr, nil, "" +} + +func setLOC(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(LOC) + rr.Hdr = h + // Non zero defaults for LOC record, see RFC 1876, Section 3. + rr.HorizPre = 165 // 10000 + rr.VertPre = 162 // 10 + rr.Size = 18 // 1 + ok := false + + // North + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + i, e := strconv.ParseUint(l.token, 10, 32) + if e != nil || l.err { + return nil, &ParseError{f, "bad LOC Latitude", l}, "" + } + rr.Latitude = 1000 * 60 * 60 * uint32(i) + + c.Next() // zBlank + // Either number, 'N' or 'S' + l, _ = c.Next() + if rr.Latitude, ok = locCheckNorth(l.token, rr.Latitude); ok { + goto East + } + i, e = strconv.ParseUint(l.token, 10, 32) + if e != nil || l.err { + return nil, &ParseError{f, "bad LOC Latitude minutes", l}, "" + } + rr.Latitude += 1000 * 60 * uint32(i) + + c.Next() // zBlank + l, _ = c.Next() + if i, e := strconv.ParseFloat(l.token, 32); e != nil || l.err { + return nil, &ParseError{f, "bad LOC Latitude seconds", l}, "" + } else { + rr.Latitude += uint32(1000 * i) + } + c.Next() // zBlank + // Either number, 'N' or 'S' + l, _ = c.Next() + if rr.Latitude, ok = locCheckNorth(l.token, rr.Latitude); ok { + goto East + } + // If still alive, flag an error + return nil, &ParseError{f, "bad LOC Latitude North/South", l}, "" + +East: + // East + c.Next() // zBlank + l, _ = c.Next() + if i, e := strconv.ParseUint(l.token, 10, 32); e != nil || l.err { + return nil, &ParseError{f, "bad LOC Longitude", l}, "" + } else { + rr.Longitude = 1000 * 60 * 60 * uint32(i) + } + c.Next() // zBlank + // Either number, 'E' or 'W' + l, _ = c.Next() + if rr.Longitude, ok = locCheckEast(l.token, rr.Longitude); ok { + goto Altitude + } + if i, e := strconv.ParseUint(l.token, 10, 32); e != nil || l.err { + return nil, &ParseError{f, "bad LOC Longitude minutes", l}, "" + } else { + rr.Longitude += 1000 * 60 * uint32(i) + } + c.Next() // zBlank + l, _ = c.Next() + if i, e := strconv.ParseFloat(l.token, 32); e != nil || l.err { + return nil, &ParseError{f, "bad LOC Longitude seconds", l}, "" + } else { + rr.Longitude += uint32(1000 * i) + } + c.Next() // zBlank + // Either number, 'E' or 'W' + l, _ = c.Next() + if rr.Longitude, ok = locCheckEast(l.token, rr.Longitude); ok { + goto Altitude + } + // If still alive, flag an error + return nil, &ParseError{f, "bad LOC Longitude East/West", l}, "" + +Altitude: + c.Next() // zBlank + l, _ = c.Next() + if len(l.token) == 0 || l.err { + return nil, &ParseError{f, "bad LOC Altitude", l}, "" + } + if l.token[len(l.token)-1] == 'M' || l.token[len(l.token)-1] == 'm' { + l.token = l.token[0 : len(l.token)-1] + } + if i, e := strconv.ParseFloat(l.token, 32); e != nil { + return nil, &ParseError{f, "bad LOC Altitude", l}, "" + } else { + rr.Altitude = uint32(i*100.0 + 10000000.0 + 0.5) + } + + // And now optionally the other values + l, _ = c.Next() + count := 0 + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zString: + switch count { + case 0: // Size + e, m, ok := stringToCm(l.token) + if !ok { + return nil, &ParseError{f, "bad LOC Size", l}, "" + } + rr.Size = e&0x0f | m<<4&0xf0 + case 1: // HorizPre + e, m, ok := stringToCm(l.token) + if !ok { + return nil, &ParseError{f, "bad LOC HorizPre", l}, "" + } + rr.HorizPre = e&0x0f | m<<4&0xf0 + case 2: // VertPre + e, m, ok := stringToCm(l.token) + if !ok { + return nil, &ParseError{f, "bad LOC VertPre", l}, "" + } + rr.VertPre = e&0x0f | m<<4&0xf0 + } + count++ + case zBlank: + // Ok + default: + return nil, &ParseError{f, "bad LOC Size, HorizPre or VertPre", l}, "" + } + l, _ = c.Next() + } + return rr, nil, "" +} + +func setHIP(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(HIP) + rr.Hdr = h + + // HitLength is not represented + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, e := strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad HIP PublicKeyAlgorithm", l}, "" + } + rr.PublicKeyAlgorithm = uint8(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + if len(l.token) == 0 || l.err { + return nil, &ParseError{f, "bad HIP Hit", l}, "" + } + rr.Hit = l.token // This can not contain spaces, see RFC 5205 Section 6. + rr.HitLength = uint8(len(rr.Hit)) / 2 + + c.Next() // zBlank + l, _ = c.Next() // zString + if len(l.token) == 0 || l.err { + return nil, &ParseError{f, "bad HIP PublicKey", l}, "" + } + rr.PublicKey = l.token // This cannot contain spaces + rr.PublicKeyLength = uint16(base64.StdEncoding.DecodedLen(len(rr.PublicKey))) + + // RendezvousServers (if any) + l, _ = c.Next() + var xs []string + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zString: + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad HIP RendezvousServers", l}, "" + } + xs = append(xs, name) + case zBlank: + // Ok + default: + return nil, &ParseError{f, "bad HIP RendezvousServers", l}, "" + } + l, _ = c.Next() + } + rr.RendezvousServers = xs + return rr, nil, l.comment +} + +func setCERT(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(CERT) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + if v, ok := StringToCertType[l.token]; ok { + rr.Type = v + } else if i, e := strconv.ParseUint(l.token, 10, 16); e != nil { + return nil, &ParseError{f, "bad CERT Type", l}, "" + } else { + rr.Type = uint16(i) + } + c.Next() // zBlank + l, _ = c.Next() // zString + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad CERT KeyTag", l}, "" + } + rr.KeyTag = uint16(i) + c.Next() // zBlank + l, _ = c.Next() // zString + if v, ok := StringToAlgorithm[l.token]; ok { + rr.Algorithm = v + } else if i, e := strconv.ParseUint(l.token, 10, 8); e != nil { + return nil, &ParseError{f, "bad CERT Algorithm", l}, "" + } else { + rr.Algorithm = uint8(i) + } + s, e1, c1 := endingToString(c, "bad CERT Certificate", f) + if e1 != nil { + return nil, e1, c1 + } + rr.Certificate = s + return rr, nil, c1 +} + +func setOPENPGPKEY(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(OPENPGPKEY) + rr.Hdr = h + + s, e, c1 := endingToString(c, "bad OPENPGPKEY PublicKey", f) + if e != nil { + return nil, e, c1 + } + rr.PublicKey = s + return rr, nil, c1 +} + +func setCSYNC(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(CSYNC) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + j, e := strconv.ParseUint(l.token, 10, 32) + if e != nil { + // Serial must be a number + return nil, &ParseError{f, "bad CSYNC serial", l}, "" + } + rr.Serial = uint32(j) + + c.Next() // zBlank + + l, _ = c.Next() + j, e = strconv.ParseUint(l.token, 10, 16) + if e != nil { + // Serial must be a number + return nil, &ParseError{f, "bad CSYNC flags", l}, "" + } + rr.Flags = uint16(j) + + rr.TypeBitMap = make([]uint16, 0) + var ( + k uint16 + ok bool + ) + l, _ = c.Next() + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zBlank: + // Ok + case zString: + tokenUpper := strings.ToUpper(l.token) + if k, ok = StringToType[tokenUpper]; !ok { + if k, ok = typeToInt(l.token); !ok { + return nil, &ParseError{f, "bad CSYNC TypeBitMap", l}, "" + } + } + rr.TypeBitMap = append(rr.TypeBitMap, k) + default: + return nil, &ParseError{f, "bad CSYNC TypeBitMap", l}, "" + } + l, _ = c.Next() + } + return rr, nil, l.comment +} + +func setSIG(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + r, e, s := setRRSIG(h, c, o, f) + if r != nil { + return &SIG{*r.(*RRSIG)}, e, s + } + return nil, e, s +} + +func setRRSIG(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(RRSIG) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + tokenUpper := strings.ToUpper(l.token) + if t, ok := StringToType[tokenUpper]; !ok { + if strings.HasPrefix(tokenUpper, "TYPE") { + t, ok = typeToInt(l.token) + if !ok { + return nil, &ParseError{f, "bad RRSIG Typecovered", l}, "" + } + rr.TypeCovered = t + } else { + return nil, &ParseError{f, "bad RRSIG Typecovered", l}, "" + } + } else { + rr.TypeCovered = t + } + + c.Next() // zBlank + l, _ = c.Next() + i, err := strconv.ParseUint(l.token, 10, 8) + if err != nil || l.err { + return nil, &ParseError{f, "bad RRSIG Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + + c.Next() // zBlank + l, _ = c.Next() + i, err = strconv.ParseUint(l.token, 10, 8) + if err != nil || l.err { + return nil, &ParseError{f, "bad RRSIG Labels", l}, "" + } + rr.Labels = uint8(i) + + c.Next() // zBlank + l, _ = c.Next() + i, err = strconv.ParseUint(l.token, 10, 32) + if err != nil || l.err { + return nil, &ParseError{f, "bad RRSIG OrigTtl", l}, "" + } + rr.OrigTtl = uint32(i) + + c.Next() // zBlank + l, _ = c.Next() + if i, err := StringToTime(l.token); err != nil { + // Try to see if all numeric and use it as epoch + if i, err := strconv.ParseInt(l.token, 10, 64); err == nil { + // TODO(miek): error out on > MAX_UINT32, same below + rr.Expiration = uint32(i) + } else { + return nil, &ParseError{f, "bad RRSIG Expiration", l}, "" + } + } else { + rr.Expiration = i + } + + c.Next() // zBlank + l, _ = c.Next() + if i, err := StringToTime(l.token); err != nil { + if i, err := strconv.ParseInt(l.token, 10, 64); err == nil { + rr.Inception = uint32(i) + } else { + return nil, &ParseError{f, "bad RRSIG Inception", l}, "" + } + } else { + rr.Inception = i + } + + c.Next() // zBlank + l, _ = c.Next() + i, err = strconv.ParseUint(l.token, 10, 16) + if err != nil || l.err { + return nil, &ParseError{f, "bad RRSIG KeyTag", l}, "" + } + rr.KeyTag = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() + rr.SignerName = l.token + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad RRSIG SignerName", l}, "" + } + rr.SignerName = name + + s, e, c1 := endingToString(c, "bad RRSIG Signature", f) + if e != nil { + return nil, e, c1 + } + rr.Signature = s + + return rr, nil, c1 +} + +func setNSEC(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NSEC) + rr.Hdr = h + + l, _ := c.Next() + rr.NextDomain = l.token + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad NSEC NextDomain", l}, "" + } + rr.NextDomain = name + + rr.TypeBitMap = make([]uint16, 0) + var ( + k uint16 + ok bool + ) + l, _ = c.Next() + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zBlank: + // Ok + case zString: + tokenUpper := strings.ToUpper(l.token) + if k, ok = StringToType[tokenUpper]; !ok { + if k, ok = typeToInt(l.token); !ok { + return nil, &ParseError{f, "bad NSEC TypeBitMap", l}, "" + } + } + rr.TypeBitMap = append(rr.TypeBitMap, k) + default: + return nil, &ParseError{f, "bad NSEC TypeBitMap", l}, "" + } + l, _ = c.Next() + } + return rr, nil, l.comment +} + +func setNSEC3(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NSEC3) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, e := strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3 Hash", l}, "" + } + rr.Hash = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3 Flags", l}, "" + } + rr.Flags = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3 Iterations", l}, "" + } + rr.Iterations = uint16(i) + c.Next() + l, _ = c.Next() + if len(l.token) == 0 || l.err { + return nil, &ParseError{f, "bad NSEC3 Salt", l}, "" + } + if l.token != "-" { + rr.SaltLength = uint8(len(l.token)) / 2 + rr.Salt = l.token + } + + c.Next() + l, _ = c.Next() + if len(l.token) == 0 || l.err { + return nil, &ParseError{f, "bad NSEC3 NextDomain", l}, "" + } + rr.HashLength = 20 // Fix for NSEC3 (sha1 160 bits) + rr.NextDomain = l.token + + rr.TypeBitMap = make([]uint16, 0) + var ( + k uint16 + ok bool + ) + l, _ = c.Next() + for l.value != zNewline && l.value != zEOF { + switch l.value { + case zBlank: + // Ok + case zString: + tokenUpper := strings.ToUpper(l.token) + if k, ok = StringToType[tokenUpper]; !ok { + if k, ok = typeToInt(l.token); !ok { + return nil, &ParseError{f, "bad NSEC3 TypeBitMap", l}, "" + } + } + rr.TypeBitMap = append(rr.TypeBitMap, k) + default: + return nil, &ParseError{f, "bad NSEC3 TypeBitMap", l}, "" + } + l, _ = c.Next() + } + return rr, nil, l.comment +} + +func setNSEC3PARAM(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NSEC3PARAM) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3PARAM Hash", l}, "" + } + rr.Hash = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3PARAM Flags", l}, "" + } + rr.Flags = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad NSEC3PARAM Iterations", l}, "" + } + rr.Iterations = uint16(i) + c.Next() + l, _ = c.Next() + if l.token != "-" { + rr.SaltLength = uint8(len(l.token)) + rr.Salt = l.token + } + return rr, nil, "" +} + +func setEUI48(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(EUI48) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + if len(l.token) != 17 || l.err { + return nil, &ParseError{f, "bad EUI48 Address", l}, "" + } + addr := make([]byte, 12) + dash := 0 + for i := 0; i < 10; i += 2 { + addr[i] = l.token[i+dash] + addr[i+1] = l.token[i+1+dash] + dash++ + if l.token[i+1+dash] != '-' { + return nil, &ParseError{f, "bad EUI48 Address", l}, "" + } + } + addr[10] = l.token[15] + addr[11] = l.token[16] + + i, e := strconv.ParseUint(string(addr), 16, 48) + if e != nil { + return nil, &ParseError{f, "bad EUI48 Address", l}, "" + } + rr.Address = i + return rr, nil, "" +} + +func setEUI64(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(EUI64) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + if len(l.token) != 23 || l.err { + return nil, &ParseError{f, "bad EUI64 Address", l}, "" + } + addr := make([]byte, 16) + dash := 0 + for i := 0; i < 14; i += 2 { + addr[i] = l.token[i+dash] + addr[i+1] = l.token[i+1+dash] + dash++ + if l.token[i+1+dash] != '-' { + return nil, &ParseError{f, "bad EUI64 Address", l}, "" + } + } + addr[14] = l.token[21] + addr[15] = l.token[22] + + i, e := strconv.ParseUint(string(addr), 16, 64) + if e != nil { + return nil, &ParseError{f, "bad EUI68 Address", l}, "" + } + rr.Address = uint64(i) + return rr, nil, "" +} + +func setSSHFP(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(SSHFP) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad SSHFP Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad SSHFP Type", l}, "" + } + rr.Type = uint8(i) + c.Next() // zBlank + s, e1, c1 := endingToString(c, "bad SSHFP Fingerprint", f) + if e1 != nil { + return nil, e1, c1 + } + rr.FingerPrint = s + return rr, nil, "" +} + +func setDNSKEYs(h RR_Header, c *zlexer, o, f, typ string) (RR, *ParseError, string) { + rr := new(DNSKEY) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " Flags", l}, "" + } + rr.Flags = uint16(i) + c.Next() // zBlank + l, _ = c.Next() // zString + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " Protocol", l}, "" + } + rr.Protocol = uint8(i) + c.Next() // zBlank + l, _ = c.Next() // zString + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + s, e1, c1 := endingToString(c, "bad "+typ+" PublicKey", f) + if e1 != nil { + return nil, e1, c1 + } + rr.PublicKey = s + return rr, nil, c1 +} + +func setKEY(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + r, e, s := setDNSKEYs(h, c, o, f, "KEY") + if r != nil { + return &KEY{*r.(*DNSKEY)}, e, s + } + return nil, e, s +} + +func setDNSKEY(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + r, e, s := setDNSKEYs(h, c, o, f, "DNSKEY") + return r, e, s +} + +func setCDNSKEY(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + r, e, s := setDNSKEYs(h, c, o, f, "CDNSKEY") + if r != nil { + return &CDNSKEY{*r.(*DNSKEY)}, e, s + } + return nil, e, s +} + +func setRKEY(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(RKEY) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad RKEY Flags", l}, "" + } + rr.Flags = uint16(i) + c.Next() // zBlank + l, _ = c.Next() // zString + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad RKEY Protocol", l}, "" + } + rr.Protocol = uint8(i) + c.Next() // zBlank + l, _ = c.Next() // zString + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad RKEY Algorithm", l}, "" + } + rr.Algorithm = uint8(i) + s, e1, c1 := endingToString(c, "bad RKEY PublicKey", f) + if e1 != nil { + return nil, e1, c1 + } + rr.PublicKey = s + return rr, nil, c1 +} + +func setEID(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(EID) + rr.Hdr = h + s, e, c1 := endingToString(c, "bad EID Endpoint", f) + if e != nil { + return nil, e, c1 + } + rr.Endpoint = s + return rr, nil, c1 +} + +func setNIMLOC(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NIMLOC) + rr.Hdr = h + s, e, c1 := endingToString(c, "bad NIMLOC Locator", f) + if e != nil { + return nil, e, c1 + } + rr.Locator = s + return rr, nil, c1 +} + +func setGPOS(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(GPOS) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + _, e := strconv.ParseFloat(l.token, 64) + if e != nil || l.err { + return nil, &ParseError{f, "bad GPOS Longitude", l}, "" + } + rr.Longitude = l.token + c.Next() // zBlank + l, _ = c.Next() + _, e = strconv.ParseFloat(l.token, 64) + if e != nil || l.err { + return nil, &ParseError{f, "bad GPOS Latitude", l}, "" + } + rr.Latitude = l.token + c.Next() // zBlank + l, _ = c.Next() + _, e = strconv.ParseFloat(l.token, 64) + if e != nil || l.err { + return nil, &ParseError{f, "bad GPOS Altitude", l}, "" + } + rr.Altitude = l.token + return rr, nil, "" +} + +func setDSs(h RR_Header, c *zlexer, o, f, typ string) (RR, *ParseError, string) { + rr := new(DS) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " KeyTag", l}, "" + } + rr.KeyTag = uint16(i) + c.Next() // zBlank + l, _ = c.Next() + if i, e = strconv.ParseUint(l.token, 10, 8); e != nil { + tokenUpper := strings.ToUpper(l.token) + i, ok := StringToAlgorithm[tokenUpper] + if !ok || l.err { + return nil, &ParseError{f, "bad " + typ + " Algorithm", l}, "" + } + rr.Algorithm = i + } else { + rr.Algorithm = uint8(i) + } + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad " + typ + " DigestType", l}, "" + } + rr.DigestType = uint8(i) + s, e1, c1 := endingToString(c, "bad "+typ+" Digest", f) + if e1 != nil { + return nil, e1, c1 + } + rr.Digest = s + return rr, nil, c1 +} + +func setDS(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + r, e, s := setDSs(h, c, o, f, "DS") + return r, e, s +} + +func setDLV(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + r, e, s := setDSs(h, c, o, f, "DLV") + if r != nil { + return &DLV{*r.(*DS)}, e, s + } + return nil, e, s +} + +func setCDS(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + r, e, s := setDSs(h, c, o, f, "CDS") + if r != nil { + return &CDS{*r.(*DS)}, e, s + } + return nil, e, s +} + +func setTA(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(TA) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad TA KeyTag", l}, "" + } + rr.KeyTag = uint16(i) + c.Next() // zBlank + l, _ = c.Next() + if i, e := strconv.ParseUint(l.token, 10, 8); e != nil { + tokenUpper := strings.ToUpper(l.token) + i, ok := StringToAlgorithm[tokenUpper] + if !ok || l.err { + return nil, &ParseError{f, "bad TA Algorithm", l}, "" + } + rr.Algorithm = i + } else { + rr.Algorithm = uint8(i) + } + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad TA DigestType", l}, "" + } + rr.DigestType = uint8(i) + s, err, c1 := endingToString(c, "bad TA Digest", f) + if err != nil { + return nil, err, c1 + } + rr.Digest = s + return rr, nil, c1 +} + +func setTLSA(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(TLSA) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, e := strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad TLSA Usage", l}, "" + } + rr.Usage = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad TLSA Selector", l}, "" + } + rr.Selector = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad TLSA MatchingType", l}, "" + } + rr.MatchingType = uint8(i) + // So this needs be e2 (i.e. different than e), because...??t + s, e2, c1 := endingToString(c, "bad TLSA Certificate", f) + if e2 != nil { + return nil, e2, c1 + } + rr.Certificate = s + return rr, nil, c1 +} + +func setSMIMEA(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(SMIMEA) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, e := strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad SMIMEA Usage", l}, "" + } + rr.Usage = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad SMIMEA Selector", l}, "" + } + rr.Selector = uint8(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 8) + if e != nil || l.err { + return nil, &ParseError{f, "bad SMIMEA MatchingType", l}, "" + } + rr.MatchingType = uint8(i) + // So this needs be e2 (i.e. different than e), because...??t + s, e2, c1 := endingToString(c, "bad SMIMEA Certificate", f) + if e2 != nil { + return nil, e2, c1 + } + rr.Certificate = s + return rr, nil, c1 +} + +func setRFC3597(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(RFC3597) + rr.Hdr = h + + l, _ := c.Next() + if l.token != "\\#" { + return nil, &ParseError{f, "bad RFC3597 Rdata", l}, "" + } + + c.Next() // zBlank + l, _ = c.Next() + rdlength, e := strconv.Atoi(l.token) + if e != nil || l.err { + return nil, &ParseError{f, "bad RFC3597 Rdata ", l}, "" + } + + s, e1, c1 := endingToString(c, "bad RFC3597 Rdata", f) + if e1 != nil { + return nil, e1, c1 + } + if rdlength*2 != len(s) { + return nil, &ParseError{f, "bad RFC3597 Rdata", l}, "" + } + rr.Rdata = s + return rr, nil, c1 +} + +func setSPF(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(SPF) + rr.Hdr = h + + s, e, c1 := endingToTxtSlice(c, "bad SPF Txt", f) + if e != nil { + return nil, e, "" + } + rr.Txt = s + return rr, nil, c1 +} + +func setAVC(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(AVC) + rr.Hdr = h + + s, e, c1 := endingToTxtSlice(c, "bad AVC Txt", f) + if e != nil { + return nil, e, "" + } + rr.Txt = s + return rr, nil, c1 +} + +func setTXT(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(TXT) + rr.Hdr = h + + // no zBlank reading here, because all this rdata is TXT + s, e, c1 := endingToTxtSlice(c, "bad TXT Txt", f) + if e != nil { + return nil, e, "" + } + rr.Txt = s + return rr, nil, c1 +} + +// identical to setTXT +func setNINFO(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NINFO) + rr.Hdr = h + + s, e, c1 := endingToTxtSlice(c, "bad NINFO ZSData", f) + if e != nil { + return nil, e, "" + } + rr.ZSData = s + return rr, nil, c1 +} + +func setURI(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(URI) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad URI Priority", l}, "" + } + rr.Priority = uint16(i) + c.Next() // zBlank + l, _ = c.Next() + i, e = strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad URI Weight", l}, "" + } + rr.Weight = uint16(i) + + c.Next() // zBlank + s, err, c1 := endingToTxtSlice(c, "bad URI Target", f) + if err != nil { + return nil, err, "" + } + if len(s) != 1 { + return nil, &ParseError{f, "bad URI Target", l}, "" + } + rr.Target = s[0] + return rr, nil, c1 +} + +func setDHCID(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + // awesome record to parse! + rr := new(DHCID) + rr.Hdr = h + + s, e, c1 := endingToString(c, "bad DHCID Digest", f) + if e != nil { + return nil, e, c1 + } + rr.Digest = s + return rr, nil, c1 +} + +func setNID(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(NID) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad NID Preference", l}, "" + } + rr.Preference = uint16(i) + c.Next() // zBlank + l, _ = c.Next() // zString + u, err := stringToNodeID(l) + if err != nil || l.err { + return nil, err, "" + } + rr.NodeID = u + return rr, nil, "" +} + +func setL32(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(L32) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad L32 Preference", l}, "" + } + rr.Preference = uint16(i) + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Locator32 = net.ParseIP(l.token) + if rr.Locator32 == nil || l.err { + return nil, &ParseError{f, "bad L32 Locator", l}, "" + } + return rr, nil, "" +} + +func setLP(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(LP) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad LP Preference", l}, "" + } + rr.Preference = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Fqdn = l.token + name, nameOk := toAbsoluteName(l.token, o) + if l.err || !nameOk { + return nil, &ParseError{f, "bad LP Fqdn", l}, "" + } + rr.Fqdn = name + + return rr, nil, "" +} + +func setL64(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(L64) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad L64 Preference", l}, "" + } + rr.Preference = uint16(i) + c.Next() // zBlank + l, _ = c.Next() // zString + u, err := stringToNodeID(l) + if err != nil || l.err { + return nil, err, "" + } + rr.Locator64 = u + return rr, nil, "" +} + +func setUID(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(UID) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 32) + if e != nil || l.err { + return nil, &ParseError{f, "bad UID Uid", l}, "" + } + rr.Uid = uint32(i) + return rr, nil, "" +} + +func setGID(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(GID) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 32) + if e != nil || l.err { + return nil, &ParseError{f, "bad GID Gid", l}, "" + } + rr.Gid = uint32(i) + return rr, nil, "" +} + +func setUINFO(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(UINFO) + rr.Hdr = h + + s, e, c1 := endingToTxtSlice(c, "bad UINFO Uinfo", f) + if e != nil { + return nil, e, c1 + } + if ln := len(s); ln == 0 { + return rr, nil, c1 + } + rr.Uinfo = s[0] // silently discard anything after the first character-string + return rr, nil, c1 +} + +func setPX(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(PX) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, "" + } + + i, e := strconv.ParseUint(l.token, 10, 16) + if e != nil || l.err { + return nil, &ParseError{f, "bad PX Preference", l}, "" + } + rr.Preference = uint16(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Map822 = l.token + map822, map822Ok := toAbsoluteName(l.token, o) + if l.err || !map822Ok { + return nil, &ParseError{f, "bad PX Map822", l}, "" + } + rr.Map822 = map822 + + c.Next() // zBlank + l, _ = c.Next() // zString + rr.Mapx400 = l.token + mapx400, mapx400Ok := toAbsoluteName(l.token, o) + if l.err || !mapx400Ok { + return nil, &ParseError{f, "bad PX Mapx400", l}, "" + } + rr.Mapx400 = mapx400 + + return rr, nil, "" +} + +func setCAA(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(CAA) + rr.Hdr = h + + l, _ := c.Next() + if len(l.token) == 0 { // dynamic update rr. + return rr, nil, l.comment + } + + i, err := strconv.ParseUint(l.token, 10, 8) + if err != nil || l.err { + return nil, &ParseError{f, "bad CAA Flag", l}, "" + } + rr.Flag = uint8(i) + + c.Next() // zBlank + l, _ = c.Next() // zString + if l.value != zString { + return nil, &ParseError{f, "bad CAA Tag", l}, "" + } + rr.Tag = l.token + + c.Next() // zBlank + s, e, c1 := endingToTxtSlice(c, "bad CAA Value", f) + if e != nil { + return nil, e, "" + } + if len(s) != 1 { + return nil, &ParseError{f, "bad CAA Value", l}, "" + } + rr.Value = s[0] + return rr, nil, c1 +} + +func setTKEY(h RR_Header, c *zlexer, o, f string) (RR, *ParseError, string) { + rr := new(TKEY) + rr.Hdr = h + + l, _ := c.Next() + + // Algorithm + if l.value != zString { + return nil, &ParseError{f, "bad TKEY algorithm", l}, "" + } + rr.Algorithm = l.token + c.Next() // zBlank + + // Get the key length and key values + l, _ = c.Next() + i, err := strconv.ParseUint(l.token, 10, 8) + if err != nil || l.err { + return nil, &ParseError{f, "bad TKEY key length", l}, "" + } + rr.KeySize = uint16(i) + c.Next() // zBlank + l, _ = c.Next() + if l.value != zString { + return nil, &ParseError{f, "bad TKEY key", l}, "" + } + rr.Key = l.token + c.Next() // zBlank + + // Get the otherdata length and string data + l, _ = c.Next() + i, err = strconv.ParseUint(l.token, 10, 8) + if err != nil || l.err { + return nil, &ParseError{f, "bad TKEY otherdata length", l}, "" + } + rr.OtherLen = uint16(i) + c.Next() // zBlank + l, _ = c.Next() + if l.value != zString { + return nil, &ParseError{f, "bad TKEY otherday", l}, "" + } + rr.OtherData = l.token + + return rr, nil, "" +} + +var typeToparserFunc = map[uint16]parserFunc{ + TypeAAAA: {setAAAA, false}, + TypeAFSDB: {setAFSDB, false}, + TypeA: {setA, false}, + TypeCAA: {setCAA, true}, + TypeCDS: {setCDS, true}, + TypeCDNSKEY: {setCDNSKEY, true}, + TypeCERT: {setCERT, true}, + TypeCNAME: {setCNAME, false}, + TypeCSYNC: {setCSYNC, true}, + TypeDHCID: {setDHCID, true}, + TypeDLV: {setDLV, true}, + TypeDNAME: {setDNAME, false}, + TypeKEY: {setKEY, true}, + TypeDNSKEY: {setDNSKEY, true}, + TypeDS: {setDS, true}, + TypeEID: {setEID, true}, + TypeEUI48: {setEUI48, false}, + TypeEUI64: {setEUI64, false}, + TypeGID: {setGID, false}, + TypeGPOS: {setGPOS, false}, + TypeHINFO: {setHINFO, true}, + TypeHIP: {setHIP, true}, + TypeKX: {setKX, false}, + TypeL32: {setL32, false}, + TypeL64: {setL64, false}, + TypeLOC: {setLOC, true}, + TypeLP: {setLP, false}, + TypeMB: {setMB, false}, + TypeMD: {setMD, false}, + TypeMF: {setMF, false}, + TypeMG: {setMG, false}, + TypeMINFO: {setMINFO, false}, + TypeMR: {setMR, false}, + TypeMX: {setMX, false}, + TypeNAPTR: {setNAPTR, false}, + TypeNID: {setNID, false}, + TypeNIMLOC: {setNIMLOC, true}, + TypeNINFO: {setNINFO, true}, + TypeNSAPPTR: {setNSAPPTR, false}, + TypeNSEC3PARAM: {setNSEC3PARAM, false}, + TypeNSEC3: {setNSEC3, true}, + TypeNSEC: {setNSEC, true}, + TypeNS: {setNS, false}, + TypeOPENPGPKEY: {setOPENPGPKEY, true}, + TypePTR: {setPTR, false}, + TypePX: {setPX, false}, + TypeSIG: {setSIG, true}, + TypeRKEY: {setRKEY, true}, + TypeRP: {setRP, false}, + TypeRRSIG: {setRRSIG, true}, + TypeRT: {setRT, false}, + TypeSMIMEA: {setSMIMEA, true}, + TypeSOA: {setSOA, false}, + TypeSPF: {setSPF, true}, + TypeAVC: {setAVC, true}, + TypeSRV: {setSRV, false}, + TypeSSHFP: {setSSHFP, true}, + TypeTALINK: {setTALINK, false}, + TypeTA: {setTA, true}, + TypeTLSA: {setTLSA, true}, + TypeTXT: {setTXT, true}, + TypeUID: {setUID, false}, + TypeUINFO: {setUINFO, true}, + TypeURI: {setURI, true}, + TypeX25: {setX25, false}, + TypeTKEY: {setTKEY, true}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/serve_mux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/serve_mux.go new file mode 100644 index 00000000000..ae304db530a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/serve_mux.go @@ -0,0 +1,147 @@ +package dns + +import ( + "strings" + "sync" +) + +// ServeMux is an DNS request multiplexer. It matches the zone name of +// each incoming request against a list of registered patterns add calls +// the handler for the pattern that most closely matches the zone name. +// +// ServeMux is DNSSEC aware, meaning that queries for the DS record are +// redirected to the parent zone (if that is also registered), otherwise +// the child gets the query. +// +// ServeMux is also safe for concurrent access from multiple goroutines. +// +// The zero ServeMux is empty and ready for use. +type ServeMux struct { + z map[string]Handler + m sync.RWMutex +} + +// NewServeMux allocates and returns a new ServeMux. +func NewServeMux() *ServeMux { + return new(ServeMux) +} + +// DefaultServeMux is the default ServeMux used by Serve. +var DefaultServeMux = NewServeMux() + +func (mux *ServeMux) match(q string, t uint16) Handler { + mux.m.RLock() + defer mux.m.RUnlock() + if mux.z == nil { + return nil + } + + var handler Handler + + // TODO(tmthrgd): Once https://go-review.googlesource.com/c/go/+/137575 + // lands in a go release, replace the following with strings.ToLower. + var sb strings.Builder + for i := 0; i < len(q); i++ { + c := q[i] + if !(c >= 'A' && c <= 'Z') { + continue + } + + sb.Grow(len(q)) + sb.WriteString(q[:i]) + + for ; i < len(q); i++ { + c := q[i] + if c >= 'A' && c <= 'Z' { + c += 'a' - 'A' + } + + sb.WriteByte(c) + } + + q = sb.String() + break + } + + for off, end := 0, false; !end; off, end = NextLabel(q, off) { + if h, ok := mux.z[q[off:]]; ok { + if t != TypeDS { + return h + } + // Continue for DS to see if we have a parent too, if so delegate to the parent + handler = h + } + } + + // Wildcard match, if we have found nothing try the root zone as a last resort. + if h, ok := mux.z["."]; ok { + return h + } + + return handler +} + +// Handle adds a handler to the ServeMux for pattern. +func (mux *ServeMux) Handle(pattern string, handler Handler) { + if pattern == "" { + panic("dns: invalid pattern " + pattern) + } + mux.m.Lock() + if mux.z == nil { + mux.z = make(map[string]Handler) + } + mux.z[Fqdn(pattern)] = handler + mux.m.Unlock() +} + +// HandleFunc adds a handler function to the ServeMux for pattern. +func (mux *ServeMux) HandleFunc(pattern string, handler func(ResponseWriter, *Msg)) { + mux.Handle(pattern, HandlerFunc(handler)) +} + +// HandleRemove deregisters the handler specific for pattern from the ServeMux. +func (mux *ServeMux) HandleRemove(pattern string) { + if pattern == "" { + panic("dns: invalid pattern " + pattern) + } + mux.m.Lock() + delete(mux.z, Fqdn(pattern)) + mux.m.Unlock() +} + +// ServeDNS dispatches the request to the handler whose pattern most +// closely matches the request message. +// +// ServeDNS is DNSSEC aware, meaning that queries for the DS record +// are redirected to the parent zone (if that is also registered), +// otherwise the child gets the query. +// +// If no handler is found, or there is no question, a standard SERVFAIL +// message is returned +func (mux *ServeMux) ServeDNS(w ResponseWriter, req *Msg) { + var h Handler + if len(req.Question) >= 1 { // allow more than one question + h = mux.match(req.Question[0].Name, req.Question[0].Qtype) + } + + if h != nil { + h.ServeDNS(w, req) + } else { + HandleFailed(w, req) + } +} + +// Handle registers the handler with the given pattern +// in the DefaultServeMux. The documentation for +// ServeMux explains how patterns are matched. +func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) } + +// HandleRemove deregisters the handle with the given pattern +// in the DefaultServeMux. +func HandleRemove(pattern string) { DefaultServeMux.HandleRemove(pattern) } + +// HandleFunc registers the handler function with the given pattern +// in the DefaultServeMux. +func HandleFunc(pattern string, handler func(ResponseWriter, *Msg)) { + DefaultServeMux.HandleFunc(pattern, handler) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/server.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/server.go new file mode 100644 index 00000000000..4b4ec33c8d1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/server.go @@ -0,0 +1,829 @@ +// DNS server implementation. + +package dns + +import ( + "bytes" + "context" + "crypto/tls" + "encoding/binary" + "errors" + "io" + "net" + "strings" + "sync" + "sync/atomic" + "time" +) + +// Default maximum number of TCP queries before we close the socket. +const maxTCPQueries = 128 + +// The maximum number of idle workers. +// +// This controls the maximum number of workers that are allowed to stay +// idle waiting for incoming requests before being torn down. +// +// If this limit is reached, the server will just keep spawning new +// workers (goroutines) for each incoming request. In this case, each +// worker will only be used for a single request. +const maxIdleWorkersCount = 10000 + +// The maximum length of time a worker may idle for before being destroyed. +const idleWorkerTimeout = 10 * time.Second + +// aLongTimeAgo is a non-zero time, far in the past, used for +// immediate cancelation of network operations. +var aLongTimeAgo = time.Unix(1, 0) + +// Handler is implemented by any value that implements ServeDNS. +type Handler interface { + ServeDNS(w ResponseWriter, r *Msg) +} + +// The HandlerFunc type is an adapter to allow the use of +// ordinary functions as DNS handlers. If f is a function +// with the appropriate signature, HandlerFunc(f) is a +// Handler object that calls f. +type HandlerFunc func(ResponseWriter, *Msg) + +// ServeDNS calls f(w, r). +func (f HandlerFunc) ServeDNS(w ResponseWriter, r *Msg) { + f(w, r) +} + +// A ResponseWriter interface is used by an DNS handler to +// construct an DNS response. +type ResponseWriter interface { + // LocalAddr returns the net.Addr of the server + LocalAddr() net.Addr + // RemoteAddr returns the net.Addr of the client that sent the current request. + RemoteAddr() net.Addr + // WriteMsg writes a reply back to the client. + WriteMsg(*Msg) error + // Write writes a raw buffer back to the client. + Write([]byte) (int, error) + // Close closes the connection. + Close() error + // TsigStatus returns the status of the Tsig. + TsigStatus() error + // TsigTimersOnly sets the tsig timers only boolean. + TsigTimersOnly(bool) + // Hijack lets the caller take over the connection. + // After a call to Hijack(), the DNS package will not do anything with the connection. + Hijack() +} + +// A ConnectionStater interface is used by a DNS Handler to access TLS connection state +// when available. +type ConnectionStater interface { + ConnectionState() *tls.ConnectionState +} + +type response struct { + msg []byte + hijacked bool // connection has been hijacked by handler + tsigTimersOnly bool + tsigStatus error + tsigRequestMAC string + tsigSecret map[string]string // the tsig secrets + udp *net.UDPConn // i/o connection if UDP was used + tcp net.Conn // i/o connection if TCP was used + udpSession *SessionUDP // oob data to get egress interface right + writer Writer // writer to output the raw DNS bits + wg *sync.WaitGroup // for gracefull shutdown +} + +// HandleFailed returns a HandlerFunc that returns SERVFAIL for every request it gets. +func HandleFailed(w ResponseWriter, r *Msg) { + m := new(Msg) + m.SetRcode(r, RcodeServerFailure) + // does not matter if this write fails + w.WriteMsg(m) +} + +// ListenAndServe Starts a server on address and network specified Invoke handler +// for incoming queries. +func ListenAndServe(addr string, network string, handler Handler) error { + server := &Server{Addr: addr, Net: network, Handler: handler} + return server.ListenAndServe() +} + +// ListenAndServeTLS acts like http.ListenAndServeTLS, more information in +// http://golang.org/pkg/net/http/#ListenAndServeTLS +func ListenAndServeTLS(addr, certFile, keyFile string, handler Handler) error { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return err + } + + config := tls.Config{ + Certificates: []tls.Certificate{cert}, + } + + server := &Server{ + Addr: addr, + Net: "tcp-tls", + TLSConfig: &config, + Handler: handler, + } + + return server.ListenAndServe() +} + +// ActivateAndServe activates a server with a listener from systemd, +// l and p should not both be non-nil. +// If both l and p are not nil only p will be used. +// Invoke handler for incoming queries. +func ActivateAndServe(l net.Listener, p net.PacketConn, handler Handler) error { + server := &Server{Listener: l, PacketConn: p, Handler: handler} + return server.ActivateAndServe() +} + +// Writer writes raw DNS messages; each call to Write should send an entire message. +type Writer interface { + io.Writer +} + +// Reader reads raw DNS messages; each call to ReadTCP or ReadUDP should return an entire message. +type Reader interface { + // ReadTCP reads a raw message from a TCP connection. Implementations may alter + // connection properties, for example the read-deadline. + ReadTCP(conn net.Conn, timeout time.Duration) ([]byte, error) + // ReadUDP reads a raw message from a UDP connection. Implementations may alter + // connection properties, for example the read-deadline. + ReadUDP(conn *net.UDPConn, timeout time.Duration) ([]byte, *SessionUDP, error) +} + +// defaultReader is an adapter for the Server struct that implements the Reader interface +// using the readTCP and readUDP func of the embedded Server. +type defaultReader struct { + *Server +} + +func (dr *defaultReader) ReadTCP(conn net.Conn, timeout time.Duration) ([]byte, error) { + return dr.readTCP(conn, timeout) +} + +func (dr *defaultReader) ReadUDP(conn *net.UDPConn, timeout time.Duration) ([]byte, *SessionUDP, error) { + return dr.readUDP(conn, timeout) +} + +// DecorateReader is a decorator hook for extending or supplanting the functionality of a Reader. +// Implementations should never return a nil Reader. +type DecorateReader func(Reader) Reader + +// DecorateWriter is a decorator hook for extending or supplanting the functionality of a Writer. +// Implementations should never return a nil Writer. +type DecorateWriter func(Writer) Writer + +// A Server defines parameters for running an DNS server. +type Server struct { + // Address to listen on, ":dns" if empty. + Addr string + // if "tcp" or "tcp-tls" (DNS over TLS) it will invoke a TCP listener, otherwise an UDP one + Net string + // TCP Listener to use, this is to aid in systemd's socket activation. + Listener net.Listener + // TLS connection configuration + TLSConfig *tls.Config + // UDP "Listener" to use, this is to aid in systemd's socket activation. + PacketConn net.PacketConn + // Handler to invoke, dns.DefaultServeMux if nil. + Handler Handler + // Default buffer size to use to read incoming UDP messages. If not set + // it defaults to MinMsgSize (512 B). + UDPSize int + // The net.Conn.SetReadTimeout value for new connections, defaults to 2 * time.Second. + ReadTimeout time.Duration + // The net.Conn.SetWriteTimeout value for new connections, defaults to 2 * time.Second. + WriteTimeout time.Duration + // TCP idle timeout for multiple queries, if nil, defaults to 8 * time.Second (RFC 5966). + IdleTimeout func() time.Duration + // Secret(s) for Tsig map[]. The zonename must be in canonical form (lowercase, fqdn, see RFC 4034 Section 6.2). + TsigSecret map[string]string + // Unsafe instructs the server to disregard any sanity checks and directly hand the message to + // the handler. It will specifically not check if the query has the QR bit not set. + Unsafe bool + // If NotifyStartedFunc is set it is called once the server has started listening. + NotifyStartedFunc func() + // DecorateReader is optional, allows customization of the process that reads raw DNS messages. + DecorateReader DecorateReader + // DecorateWriter is optional, allows customization of the process that writes raw DNS messages. + DecorateWriter DecorateWriter + // Maximum number of TCP queries before we close the socket. Default is maxTCPQueries (unlimited if -1). + MaxTCPQueries int + // Whether to set the SO_REUSEPORT socket option, allowing multiple listeners to be bound to a single address. + // It is only supported on go1.11+ and when using ListenAndServe. + ReusePort bool + + // UDP packet or TCP connection queue + queue chan *response + // Workers count + workersCount int32 + + // Shutdown handling + lock sync.RWMutex + started bool + shutdown chan struct{} + conns map[net.Conn]struct{} + + // A pool for UDP message buffers. + udpPool sync.Pool +} + +func (srv *Server) isStarted() bool { + srv.lock.RLock() + started := srv.started + srv.lock.RUnlock() + return started +} + +func (srv *Server) worker(w *response) { + srv.serve(w) + + for { + count := atomic.LoadInt32(&srv.workersCount) + if count > maxIdleWorkersCount { + return + } + if atomic.CompareAndSwapInt32(&srv.workersCount, count, count+1) { + break + } + } + + defer atomic.AddInt32(&srv.workersCount, -1) + + inUse := false + timeout := time.NewTimer(idleWorkerTimeout) + defer timeout.Stop() +LOOP: + for { + select { + case w, ok := <-srv.queue: + if !ok { + break LOOP + } + inUse = true + srv.serve(w) + case <-timeout.C: + if !inUse { + break LOOP + } + inUse = false + timeout.Reset(idleWorkerTimeout) + } + } +} + +func (srv *Server) spawnWorker(w *response) { + select { + case srv.queue <- w: + default: + go srv.worker(w) + } +} + +func makeUDPBuffer(size int) func() interface{} { + return func() interface{} { + return make([]byte, size) + } +} + +func (srv *Server) init() { + srv.queue = make(chan *response) + + srv.shutdown = make(chan struct{}) + srv.conns = make(map[net.Conn]struct{}) + + if srv.UDPSize == 0 { + srv.UDPSize = MinMsgSize + } + + srv.udpPool.New = makeUDPBuffer(srv.UDPSize) +} + +func unlockOnce(l sync.Locker) func() { + var once sync.Once + return func() { once.Do(l.Unlock) } +} + +// ListenAndServe starts a nameserver on the configured address in *Server. +func (srv *Server) ListenAndServe() error { + unlock := unlockOnce(&srv.lock) + srv.lock.Lock() + defer unlock() + + if srv.started { + return &Error{err: "server already started"} + } + + addr := srv.Addr + if addr == "" { + addr = ":domain" + } + + srv.init() + defer close(srv.queue) + + switch srv.Net { + case "tcp", "tcp4", "tcp6": + l, err := listenTCP(srv.Net, addr, srv.ReusePort) + if err != nil { + return err + } + srv.Listener = l + srv.started = true + unlock() + return srv.serveTCP(l) + case "tcp-tls", "tcp4-tls", "tcp6-tls": + if srv.TLSConfig == nil || (len(srv.TLSConfig.Certificates) == 0 && srv.TLSConfig.GetCertificate == nil) { + return errors.New("dns: neither Certificates nor GetCertificate set in Config") + } + network := strings.TrimSuffix(srv.Net, "-tls") + l, err := listenTCP(network, addr, srv.ReusePort) + if err != nil { + return err + } + l = tls.NewListener(l, srv.TLSConfig) + srv.Listener = l + srv.started = true + unlock() + return srv.serveTCP(l) + case "udp", "udp4", "udp6": + l, err := listenUDP(srv.Net, addr, srv.ReusePort) + if err != nil { + return err + } + u := l.(*net.UDPConn) + if e := setUDPSocketOptions(u); e != nil { + return e + } + srv.PacketConn = l + srv.started = true + unlock() + return srv.serveUDP(u) + } + return &Error{err: "bad network"} +} + +// ActivateAndServe starts a nameserver with the PacketConn or Listener +// configured in *Server. Its main use is to start a server from systemd. +func (srv *Server) ActivateAndServe() error { + unlock := unlockOnce(&srv.lock) + srv.lock.Lock() + defer unlock() + + if srv.started { + return &Error{err: "server already started"} + } + + srv.init() + defer close(srv.queue) + + pConn := srv.PacketConn + l := srv.Listener + if pConn != nil { + // Check PacketConn interface's type is valid and value + // is not nil + if t, ok := pConn.(*net.UDPConn); ok && t != nil { + if e := setUDPSocketOptions(t); e != nil { + return e + } + srv.started = true + unlock() + return srv.serveUDP(t) + } + } + if l != nil { + srv.started = true + unlock() + return srv.serveTCP(l) + } + return &Error{err: "bad listeners"} +} + +// Shutdown shuts down a server. After a call to Shutdown, ListenAndServe and +// ActivateAndServe will return. +func (srv *Server) Shutdown() error { + return srv.ShutdownContext(context.Background()) +} + +// ShutdownContext shuts down a server. After a call to ShutdownContext, +// ListenAndServe and ActivateAndServe will return. +// +// A context.Context may be passed to limit how long to wait for connections +// to terminate. +func (srv *Server) ShutdownContext(ctx context.Context) error { + srv.lock.Lock() + if !srv.started { + srv.lock.Unlock() + return &Error{err: "server not started"} + } + + srv.started = false + + if srv.PacketConn != nil { + srv.PacketConn.SetReadDeadline(aLongTimeAgo) // Unblock reads + } + + if srv.Listener != nil { + srv.Listener.Close() + } + + for rw := range srv.conns { + rw.SetReadDeadline(aLongTimeAgo) // Unblock reads + } + + srv.lock.Unlock() + + if testShutdownNotify != nil { + testShutdownNotify.Broadcast() + } + + var ctxErr error + select { + case <-srv.shutdown: + case <-ctx.Done(): + ctxErr = ctx.Err() + } + + if srv.PacketConn != nil { + srv.PacketConn.Close() + } + + return ctxErr +} + +var testShutdownNotify *sync.Cond + +// getReadTimeout is a helper func to use system timeout if server did not intend to change it. +func (srv *Server) getReadTimeout() time.Duration { + rtimeout := dnsTimeout + if srv.ReadTimeout != 0 { + rtimeout = srv.ReadTimeout + } + return rtimeout +} + +// serveTCP starts a TCP listener for the server. +func (srv *Server) serveTCP(l net.Listener) error { + defer l.Close() + + if srv.NotifyStartedFunc != nil { + srv.NotifyStartedFunc() + } + + var wg sync.WaitGroup + defer func() { + wg.Wait() + close(srv.shutdown) + }() + + for srv.isStarted() { + rw, err := l.Accept() + if err != nil { + if !srv.isStarted() { + return nil + } + if neterr, ok := err.(net.Error); ok && neterr.Temporary() { + continue + } + return err + } + srv.lock.Lock() + // Track the connection to allow unblocking reads on shutdown. + srv.conns[rw] = struct{}{} + srv.lock.Unlock() + wg.Add(1) + srv.spawnWorker(&response{ + tsigSecret: srv.TsigSecret, + tcp: rw, + wg: &wg, + }) + } + + return nil +} + +// serveUDP starts a UDP listener for the server. +func (srv *Server) serveUDP(l *net.UDPConn) error { + defer l.Close() + + if srv.NotifyStartedFunc != nil { + srv.NotifyStartedFunc() + } + + reader := Reader(&defaultReader{srv}) + if srv.DecorateReader != nil { + reader = srv.DecorateReader(reader) + } + + var wg sync.WaitGroup + defer func() { + wg.Wait() + close(srv.shutdown) + }() + + rtimeout := srv.getReadTimeout() + // deadline is not used here + for srv.isStarted() { + m, s, err := reader.ReadUDP(l, rtimeout) + if err != nil { + if !srv.isStarted() { + return nil + } + if netErr, ok := err.(net.Error); ok && netErr.Temporary() { + continue + } + return err + } + if len(m) < headerSize { + if cap(m) == srv.UDPSize { + srv.udpPool.Put(m[:srv.UDPSize]) + } + continue + } + wg.Add(1) + srv.spawnWorker(&response{ + msg: m, + tsigSecret: srv.TsigSecret, + udp: l, + udpSession: s, + wg: &wg, + }) + } + + return nil +} + +func (srv *Server) serve(w *response) { + if srv.DecorateWriter != nil { + w.writer = srv.DecorateWriter(w) + } else { + w.writer = w + } + + if w.udp != nil { + // serve UDP + srv.serveDNS(w) + + w.wg.Done() + return + } + + defer func() { + if !w.hijacked { + w.Close() + } + + srv.lock.Lock() + delete(srv.conns, w.tcp) + srv.lock.Unlock() + + w.wg.Done() + }() + + reader := Reader(&defaultReader{srv}) + if srv.DecorateReader != nil { + reader = srv.DecorateReader(reader) + } + + idleTimeout := tcpIdleTimeout + if srv.IdleTimeout != nil { + idleTimeout = srv.IdleTimeout() + } + + timeout := srv.getReadTimeout() + + limit := srv.MaxTCPQueries + if limit == 0 { + limit = maxTCPQueries + } + + for q := 0; (q < limit || limit == -1) && srv.isStarted(); q++ { + var err error + w.msg, err = reader.ReadTCP(w.tcp, timeout) + if err != nil { + // TODO(tmthrgd): handle error + break + } + srv.serveDNS(w) + if w.tcp == nil { + break // Close() was called + } + if w.hijacked { + break // client will call Close() themselves + } + // The first read uses the read timeout, the rest use the + // idle timeout. + timeout = idleTimeout + } +} + +func (srv *Server) disposeBuffer(w *response) { + if w.udp != nil && cap(w.msg) == srv.UDPSize { + srv.udpPool.Put(w.msg[:srv.UDPSize]) + } + w.msg = nil +} + +func (srv *Server) serveDNS(w *response) { + req := new(Msg) + err := req.Unpack(w.msg) + if err != nil { // Send a FormatError back + x := new(Msg) + x.SetRcodeFormatError(req) + w.WriteMsg(x) + } + if err != nil || !srv.Unsafe && req.Response { + srv.disposeBuffer(w) + return + } + + w.tsigStatus = nil + if w.tsigSecret != nil { + if t := req.IsTsig(); t != nil { + if secret, ok := w.tsigSecret[t.Hdr.Name]; ok { + w.tsigStatus = TsigVerify(w.msg, secret, "", false) + } else { + w.tsigStatus = ErrSecret + } + w.tsigTimersOnly = false + w.tsigRequestMAC = req.Extra[len(req.Extra)-1].(*TSIG).MAC + } + } + + srv.disposeBuffer(w) + + handler := srv.Handler + if handler == nil { + handler = DefaultServeMux + } + + handler.ServeDNS(w, req) // Writes back to the client +} + +func (srv *Server) readTCP(conn net.Conn, timeout time.Duration) ([]byte, error) { + // If we race with ShutdownContext, the read deadline may + // have been set in the distant past to unblock the read + // below. We must not override it, otherwise we may block + // ShutdownContext. + srv.lock.RLock() + if srv.started { + conn.SetReadDeadline(time.Now().Add(timeout)) + } + srv.lock.RUnlock() + + l := make([]byte, 2) + n, err := conn.Read(l) + if err != nil || n != 2 { + if err != nil { + return nil, err + } + return nil, ErrShortRead + } + length := binary.BigEndian.Uint16(l) + if length == 0 { + return nil, ErrShortRead + } + m := make([]byte, int(length)) + n, err = conn.Read(m[:int(length)]) + if err != nil || n == 0 { + if err != nil { + return nil, err + } + return nil, ErrShortRead + } + i := n + for i < int(length) { + j, err := conn.Read(m[i:int(length)]) + if err != nil { + return nil, err + } + i += j + } + n = i + m = m[:n] + return m, nil +} + +func (srv *Server) readUDP(conn *net.UDPConn, timeout time.Duration) ([]byte, *SessionUDP, error) { + srv.lock.RLock() + if srv.started { + // See the comment in readTCP above. + conn.SetReadDeadline(time.Now().Add(timeout)) + } + srv.lock.RUnlock() + + m := srv.udpPool.Get().([]byte) + n, s, err := ReadFromSessionUDP(conn, m) + if err != nil { + srv.udpPool.Put(m) + return nil, nil, err + } + m = m[:n] + return m, s, nil +} + +// WriteMsg implements the ResponseWriter.WriteMsg method. +func (w *response) WriteMsg(m *Msg) (err error) { + var data []byte + if w.tsigSecret != nil { // if no secrets, dont check for the tsig (which is a longer check) + if t := m.IsTsig(); t != nil { + data, w.tsigRequestMAC, err = TsigGenerate(m, w.tsigSecret[t.Hdr.Name], w.tsigRequestMAC, w.tsigTimersOnly) + if err != nil { + return err + } + _, err = w.writer.Write(data) + return err + } + } + data, err = m.Pack() + if err != nil { + return err + } + _, err = w.writer.Write(data) + return err +} + +// Write implements the ResponseWriter.Write method. +func (w *response) Write(m []byte) (int, error) { + switch { + case w.udp != nil: + n, err := WriteToSessionUDP(w.udp, m, w.udpSession) + return n, err + case w.tcp != nil: + lm := len(m) + if lm < 2 { + return 0, io.ErrShortBuffer + } + if lm > MaxMsgSize { + return 0, &Error{err: "message too large"} + } + l := make([]byte, 2, 2+lm) + binary.BigEndian.PutUint16(l, uint16(lm)) + m = append(l, m...) + + n, err := io.Copy(w.tcp, bytes.NewReader(m)) + return int(n), err + default: + panic("dns: Write called after Close") + } +} + +// LocalAddr implements the ResponseWriter.LocalAddr method. +func (w *response) LocalAddr() net.Addr { + switch { + case w.udp != nil: + return w.udp.LocalAddr() + case w.tcp != nil: + return w.tcp.LocalAddr() + default: + panic("dns: LocalAddr called after Close") + } +} + +// RemoteAddr implements the ResponseWriter.RemoteAddr method. +func (w *response) RemoteAddr() net.Addr { + switch { + case w.udpSession != nil: + return w.udpSession.RemoteAddr() + case w.tcp != nil: + return w.tcp.RemoteAddr() + default: + panic("dns: RemoteAddr called after Close") + } +} + +// TsigStatus implements the ResponseWriter.TsigStatus method. +func (w *response) TsigStatus() error { return w.tsigStatus } + +// TsigTimersOnly implements the ResponseWriter.TsigTimersOnly method. +func (w *response) TsigTimersOnly(b bool) { w.tsigTimersOnly = b } + +// Hijack implements the ResponseWriter.Hijack method. +func (w *response) Hijack() { w.hijacked = true } + +// Close implements the ResponseWriter.Close method +func (w *response) Close() error { + // Can't close the udp conn, as that is actually the listener. + if w.tcp != nil { + e := w.tcp.Close() + w.tcp = nil + return e + } + return nil +} + +// ConnectionState() implements the ConnectionStater.ConnectionState() interface. +func (w *response) ConnectionState() *tls.ConnectionState { + type tlsConnectionStater interface { + ConnectionState() tls.ConnectionState + } + if v, ok := w.tcp.(tlsConnectionStater); ok { + t := v.ConnectionState() + return &t + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/sig0.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/sig0.go new file mode 100644 index 00000000000..07c2acb196c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/sig0.go @@ -0,0 +1,217 @@ +package dns + +import ( + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/rsa" + "encoding/binary" + "math/big" + "strings" + "time" +) + +// Sign signs a dns.Msg. It fills the signature with the appropriate data. +// The SIG record should have the SignerName, KeyTag, Algorithm, Inception +// and Expiration set. +func (rr *SIG) Sign(k crypto.Signer, m *Msg) ([]byte, error) { + if k == nil { + return nil, ErrPrivKey + } + if rr.KeyTag == 0 || len(rr.SignerName) == 0 || rr.Algorithm == 0 { + return nil, ErrKey + } + rr.Header().Rrtype = TypeSIG + rr.Header().Class = ClassANY + rr.Header().Ttl = 0 + rr.Header().Name = "." + rr.OrigTtl = 0 + rr.TypeCovered = 0 + rr.Labels = 0 + + buf := make([]byte, m.Len()+rr.len()) + mbuf, err := m.PackBuffer(buf) + if err != nil { + return nil, err + } + if &buf[0] != &mbuf[0] { + return nil, ErrBuf + } + off, err := PackRR(rr, buf, len(mbuf), nil, false) + if err != nil { + return nil, err + } + buf = buf[:off:cap(buf)] + + hash, ok := AlgorithmToHash[rr.Algorithm] + if !ok { + return nil, ErrAlg + } + + hasher := hash.New() + // Write SIG rdata + hasher.Write(buf[len(mbuf)+1+2+2+4+2:]) + // Write message + hasher.Write(buf[:len(mbuf)]) + + signature, err := sign(k, hasher.Sum(nil), hash, rr.Algorithm) + if err != nil { + return nil, err + } + + rr.Signature = toBase64(signature) + + buf = append(buf, signature...) + if len(buf) > int(^uint16(0)) { + return nil, ErrBuf + } + // Adjust sig data length + rdoff := len(mbuf) + 1 + 2 + 2 + 4 + rdlen := binary.BigEndian.Uint16(buf[rdoff:]) + rdlen += uint16(len(signature)) + binary.BigEndian.PutUint16(buf[rdoff:], rdlen) + // Adjust additional count + adc := binary.BigEndian.Uint16(buf[10:]) + adc++ + binary.BigEndian.PutUint16(buf[10:], adc) + return buf, nil +} + +// Verify validates the message buf using the key k. +// It's assumed that buf is a valid message from which rr was unpacked. +func (rr *SIG) Verify(k *KEY, buf []byte) error { + if k == nil { + return ErrKey + } + if rr.KeyTag == 0 || len(rr.SignerName) == 0 || rr.Algorithm == 0 { + return ErrKey + } + + var hash crypto.Hash + switch rr.Algorithm { + case DSA, RSASHA1: + hash = crypto.SHA1 + case RSASHA256, ECDSAP256SHA256: + hash = crypto.SHA256 + case ECDSAP384SHA384: + hash = crypto.SHA384 + case RSASHA512: + hash = crypto.SHA512 + default: + return ErrAlg + } + hasher := hash.New() + + buflen := len(buf) + qdc := binary.BigEndian.Uint16(buf[4:]) + anc := binary.BigEndian.Uint16(buf[6:]) + auc := binary.BigEndian.Uint16(buf[8:]) + adc := binary.BigEndian.Uint16(buf[10:]) + offset := 12 + var err error + for i := uint16(0); i < qdc && offset < buflen; i++ { + _, offset, err = UnpackDomainName(buf, offset) + if err != nil { + return err + } + // Skip past Type and Class + offset += 2 + 2 + } + for i := uint16(1); i < anc+auc+adc && offset < buflen; i++ { + _, offset, err = UnpackDomainName(buf, offset) + if err != nil { + return err + } + // Skip past Type, Class and TTL + offset += 2 + 2 + 4 + if offset+1 >= buflen { + continue + } + rdlen := binary.BigEndian.Uint16(buf[offset:]) + offset += 2 + offset += int(rdlen) + } + if offset >= buflen { + return &Error{err: "overflowing unpacking signed message"} + } + + // offset should be just prior to SIG + bodyend := offset + // owner name SHOULD be root + _, offset, err = UnpackDomainName(buf, offset) + if err != nil { + return err + } + // Skip Type, Class, TTL, RDLen + offset += 2 + 2 + 4 + 2 + sigstart := offset + // Skip Type Covered, Algorithm, Labels, Original TTL + offset += 2 + 1 + 1 + 4 + if offset+4+4 >= buflen { + return &Error{err: "overflow unpacking signed message"} + } + expire := binary.BigEndian.Uint32(buf[offset:]) + offset += 4 + incept := binary.BigEndian.Uint32(buf[offset:]) + offset += 4 + now := uint32(time.Now().Unix()) + if now < incept || now > expire { + return ErrTime + } + // Skip key tag + offset += 2 + var signername string + signername, offset, err = UnpackDomainName(buf, offset) + if err != nil { + return err + } + // If key has come from the DNS name compression might + // have mangled the case of the name + if strings.ToLower(signername) != strings.ToLower(k.Header().Name) { + return &Error{err: "signer name doesn't match key name"} + } + sigend := offset + hasher.Write(buf[sigstart:sigend]) + hasher.Write(buf[:10]) + hasher.Write([]byte{ + byte((adc - 1) << 8), + byte(adc - 1), + }) + hasher.Write(buf[12:bodyend]) + + hashed := hasher.Sum(nil) + sig := buf[sigend:] + switch k.Algorithm { + case DSA: + pk := k.publicKeyDSA() + sig = sig[1:] + r := big.NewInt(0) + r.SetBytes(sig[:len(sig)/2]) + s := big.NewInt(0) + s.SetBytes(sig[len(sig)/2:]) + if pk != nil { + if dsa.Verify(pk, hashed, r, s) { + return nil + } + return ErrSig + } + case RSASHA1, RSASHA256, RSASHA512: + pk := k.publicKeyRSA() + if pk != nil { + return rsa.VerifyPKCS1v15(pk, hash, hashed, sig) + } + case ECDSAP256SHA256, ECDSAP384SHA384: + pk := k.publicKeyECDSA() + r := big.NewInt(0) + r.SetBytes(sig[:len(sig)/2]) + s := big.NewInt(0) + s.SetBytes(sig[len(sig)/2:]) + if pk != nil { + if ecdsa.Verify(pk, hashed, r, s) { + return nil + } + return ErrSig + } + } + return ErrKeyAlg +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/singleinflight.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/singleinflight.go new file mode 100644 index 00000000000..9573c7d0b8c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/singleinflight.go @@ -0,0 +1,57 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Adapted for dns package usage by Miek Gieben. + +package dns + +import "sync" +import "time" + +// call is an in-flight or completed singleflight.Do call +type call struct { + wg sync.WaitGroup + val *Msg + rtt time.Duration + err error + dups int +} + +// singleflight represents a class of work and forms a namespace in +// which units of work can be executed with duplicate suppression. +type singleflight struct { + sync.Mutex // protects m + m map[string]*call // lazily initialized +} + +// Do executes and returns the results of the given function, making +// sure that only one execution is in-flight for a given key at a +// time. If a duplicate comes in, the duplicate caller waits for the +// original to complete and receives the same results. +// The return value shared indicates whether v was given to multiple callers. +func (g *singleflight) Do(key string, fn func() (*Msg, time.Duration, error)) (v *Msg, rtt time.Duration, err error, shared bool) { + g.Lock() + if g.m == nil { + g.m = make(map[string]*call) + } + if c, ok := g.m[key]; ok { + c.dups++ + g.Unlock() + c.wg.Wait() + return c.val, c.rtt, c.err, true + } + c := new(call) + c.wg.Add(1) + g.m[key] = c + g.Unlock() + + c.val, c.rtt, c.err = fn() + c.wg.Done() + + g.Lock() + delete(g.m, key) + g.Unlock() + + return c.val, c.rtt, c.err, c.dups > 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/smimea.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/smimea.go new file mode 100644 index 00000000000..4e7ded4b386 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/smimea.go @@ -0,0 +1,47 @@ +package dns + +import ( + "crypto/sha256" + "crypto/x509" + "encoding/hex" +) + +// Sign creates a SMIMEA record from an SSL certificate. +func (r *SMIMEA) Sign(usage, selector, matchingType int, cert *x509.Certificate) (err error) { + r.Hdr.Rrtype = TypeSMIMEA + r.Usage = uint8(usage) + r.Selector = uint8(selector) + r.MatchingType = uint8(matchingType) + + r.Certificate, err = CertificateToDANE(r.Selector, r.MatchingType, cert) + if err != nil { + return err + } + return nil +} + +// Verify verifies a SMIMEA record against an SSL certificate. If it is OK +// a nil error is returned. +func (r *SMIMEA) Verify(cert *x509.Certificate) error { + c, err := CertificateToDANE(r.Selector, r.MatchingType, cert) + if err != nil { + return err // Not also ErrSig? + } + if r.Certificate == c { + return nil + } + return ErrSig // ErrSig, really? +} + +// SMIMEAName returns the ownername of a SMIMEA resource record as per the +// format specified in RFC 'draft-ietf-dane-smime-12' Section 2 and 3 +func SMIMEAName(email, domain string) (string, error) { + hasher := sha256.New() + hasher.Write([]byte(email)) + + // RFC Section 3: "The local-part is hashed using the SHA2-256 + // algorithm with the hash truncated to 28 octets and + // represented in its hexadecimal representation to become the + // left-most label in the prepared domain name" + return hex.EncodeToString(hasher.Sum(nil)[:28]) + "." + "_smimecert." + domain, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/tlsa.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/tlsa.go new file mode 100644 index 00000000000..431e2fb5afc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/tlsa.go @@ -0,0 +1,47 @@ +package dns + +import ( + "crypto/x509" + "net" + "strconv" +) + +// Sign creates a TLSA record from an SSL certificate. +func (r *TLSA) Sign(usage, selector, matchingType int, cert *x509.Certificate) (err error) { + r.Hdr.Rrtype = TypeTLSA + r.Usage = uint8(usage) + r.Selector = uint8(selector) + r.MatchingType = uint8(matchingType) + + r.Certificate, err = CertificateToDANE(r.Selector, r.MatchingType, cert) + if err != nil { + return err + } + return nil +} + +// Verify verifies a TLSA record against an SSL certificate. If it is OK +// a nil error is returned. +func (r *TLSA) Verify(cert *x509.Certificate) error { + c, err := CertificateToDANE(r.Selector, r.MatchingType, cert) + if err != nil { + return err // Not also ErrSig? + } + if r.Certificate == c { + return nil + } + return ErrSig // ErrSig, really? +} + +// TLSAName returns the ownername of a TLSA resource record as per the +// rules specified in RFC 6698, Section 3. +func TLSAName(name, service, network string) (string, error) { + if !IsFqdn(name) { + return "", ErrFqdn + } + p, err := net.LookupPort(network, service) + if err != nil { + return "", err + } + return "_" + strconv.Itoa(p) + "._" + network + "." + name, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/tsig.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/tsig.go new file mode 100644 index 00000000000..4837b4ab1fd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/tsig.go @@ -0,0 +1,386 @@ +package dns + +import ( + "crypto/hmac" + "crypto/md5" + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "encoding/binary" + "encoding/hex" + "hash" + "strconv" + "strings" + "time" +) + +// HMAC hashing codes. These are transmitted as domain names. +const ( + HmacMD5 = "hmac-md5.sig-alg.reg.int." + HmacSHA1 = "hmac-sha1." + HmacSHA256 = "hmac-sha256." + HmacSHA512 = "hmac-sha512." +) + +// TSIG is the RR the holds the transaction signature of a message. +// See RFC 2845 and RFC 4635. +type TSIG struct { + Hdr RR_Header + Algorithm string `dns:"domain-name"` + TimeSigned uint64 `dns:"uint48"` + Fudge uint16 + MACSize uint16 + MAC string `dns:"size-hex:MACSize"` + OrigId uint16 + Error uint16 + OtherLen uint16 + OtherData string `dns:"size-hex:OtherLen"` +} + +// TSIG has no official presentation format, but this will suffice. + +func (rr *TSIG) String() string { + s := "\n;; TSIG PSEUDOSECTION:\n" + s += rr.Hdr.String() + + " " + rr.Algorithm + + " " + tsigTimeToString(rr.TimeSigned) + + " " + strconv.Itoa(int(rr.Fudge)) + + " " + strconv.Itoa(int(rr.MACSize)) + + " " + strings.ToUpper(rr.MAC) + + " " + strconv.Itoa(int(rr.OrigId)) + + " " + strconv.Itoa(int(rr.Error)) + // BIND prints NOERROR + " " + strconv.Itoa(int(rr.OtherLen)) + + " " + rr.OtherData + return s +} + +// The following values must be put in wireformat, so that the MAC can be calculated. +// RFC 2845, section 3.4.2. TSIG Variables. +type tsigWireFmt struct { + // From RR_Header + Name string `dns:"domain-name"` + Class uint16 + Ttl uint32 + // Rdata of the TSIG + Algorithm string `dns:"domain-name"` + TimeSigned uint64 `dns:"uint48"` + Fudge uint16 + // MACSize, MAC and OrigId excluded + Error uint16 + OtherLen uint16 + OtherData string `dns:"size-hex:OtherLen"` +} + +// If we have the MAC use this type to convert it to wiredata. Section 3.4.3. Request MAC +type macWireFmt struct { + MACSize uint16 + MAC string `dns:"size-hex:MACSize"` +} + +// 3.3. Time values used in TSIG calculations +type timerWireFmt struct { + TimeSigned uint64 `dns:"uint48"` + Fudge uint16 +} + +// TsigGenerate fills out the TSIG record attached to the message. +// The message should contain +// a "stub" TSIG RR with the algorithm, key name (owner name of the RR), +// time fudge (defaults to 300 seconds) and the current time +// The TSIG MAC is saved in that Tsig RR. +// When TsigGenerate is called for the first time requestMAC is set to the empty string and +// timersOnly is false. +// If something goes wrong an error is returned, otherwise it is nil. +func TsigGenerate(m *Msg, secret, requestMAC string, timersOnly bool) ([]byte, string, error) { + if m.IsTsig() == nil { + panic("dns: TSIG not last RR in additional") + } + // If we barf here, the caller is to blame + rawsecret, err := fromBase64([]byte(secret)) + if err != nil { + return nil, "", err + } + + rr := m.Extra[len(m.Extra)-1].(*TSIG) + m.Extra = m.Extra[0 : len(m.Extra)-1] // kill the TSIG from the msg + mbuf, err := m.Pack() + if err != nil { + return nil, "", err + } + buf := tsigBuffer(mbuf, rr, requestMAC, timersOnly) + + t := new(TSIG) + var h hash.Hash + switch strings.ToLower(rr.Algorithm) { + case HmacMD5: + h = hmac.New(md5.New, []byte(rawsecret)) + case HmacSHA1: + h = hmac.New(sha1.New, []byte(rawsecret)) + case HmacSHA256: + h = hmac.New(sha256.New, []byte(rawsecret)) + case HmacSHA512: + h = hmac.New(sha512.New, []byte(rawsecret)) + default: + return nil, "", ErrKeyAlg + } + h.Write(buf) + t.MAC = hex.EncodeToString(h.Sum(nil)) + t.MACSize = uint16(len(t.MAC) / 2) // Size is half! + + t.Hdr = RR_Header{Name: rr.Hdr.Name, Rrtype: TypeTSIG, Class: ClassANY, Ttl: 0} + t.Fudge = rr.Fudge + t.TimeSigned = rr.TimeSigned + t.Algorithm = rr.Algorithm + t.OrigId = m.Id + + tbuf := make([]byte, t.len()) + if off, err := PackRR(t, tbuf, 0, nil, false); err == nil { + tbuf = tbuf[:off] // reset to actual size used + } else { + return nil, "", err + } + mbuf = append(mbuf, tbuf...) + // Update the ArCount directly in the buffer. + binary.BigEndian.PutUint16(mbuf[10:], uint16(len(m.Extra)+1)) + + return mbuf, t.MAC, nil +} + +// TsigVerify verifies the TSIG on a message. +// If the signature does not validate err contains the +// error, otherwise it is nil. +func TsigVerify(msg []byte, secret, requestMAC string, timersOnly bool) error { + rawsecret, err := fromBase64([]byte(secret)) + if err != nil { + return err + } + // Strip the TSIG from the incoming msg + stripped, tsig, err := stripTsig(msg) + if err != nil { + return err + } + + msgMAC, err := hex.DecodeString(tsig.MAC) + if err != nil { + return err + } + + buf := tsigBuffer(stripped, tsig, requestMAC, timersOnly) + + // Fudge factor works both ways. A message can arrive before it was signed because + // of clock skew. + now := uint64(time.Now().Unix()) + ti := now - tsig.TimeSigned + if now < tsig.TimeSigned { + ti = tsig.TimeSigned - now + } + if uint64(tsig.Fudge) < ti { + return ErrTime + } + + var h hash.Hash + switch strings.ToLower(tsig.Algorithm) { + case HmacMD5: + h = hmac.New(md5.New, rawsecret) + case HmacSHA1: + h = hmac.New(sha1.New, rawsecret) + case HmacSHA256: + h = hmac.New(sha256.New, rawsecret) + case HmacSHA512: + h = hmac.New(sha512.New, rawsecret) + default: + return ErrKeyAlg + } + h.Write(buf) + if !hmac.Equal(h.Sum(nil), msgMAC) { + return ErrSig + } + return nil +} + +// Create a wiredata buffer for the MAC calculation. +func tsigBuffer(msgbuf []byte, rr *TSIG, requestMAC string, timersOnly bool) []byte { + var buf []byte + if rr.TimeSigned == 0 { + rr.TimeSigned = uint64(time.Now().Unix()) + } + if rr.Fudge == 0 { + rr.Fudge = 300 // Standard (RFC) default. + } + + // Replace message ID in header with original ID from TSIG + binary.BigEndian.PutUint16(msgbuf[0:2], rr.OrigId) + + if requestMAC != "" { + m := new(macWireFmt) + m.MACSize = uint16(len(requestMAC) / 2) + m.MAC = requestMAC + buf = make([]byte, len(requestMAC)) // long enough + n, _ := packMacWire(m, buf) + buf = buf[:n] + } + + tsigvar := make([]byte, DefaultMsgSize) + if timersOnly { + tsig := new(timerWireFmt) + tsig.TimeSigned = rr.TimeSigned + tsig.Fudge = rr.Fudge + n, _ := packTimerWire(tsig, tsigvar) + tsigvar = tsigvar[:n] + } else { + tsig := new(tsigWireFmt) + tsig.Name = strings.ToLower(rr.Hdr.Name) + tsig.Class = ClassANY + tsig.Ttl = rr.Hdr.Ttl + tsig.Algorithm = strings.ToLower(rr.Algorithm) + tsig.TimeSigned = rr.TimeSigned + tsig.Fudge = rr.Fudge + tsig.Error = rr.Error + tsig.OtherLen = rr.OtherLen + tsig.OtherData = rr.OtherData + n, _ := packTsigWire(tsig, tsigvar) + tsigvar = tsigvar[:n] + } + + if requestMAC != "" { + x := append(buf, msgbuf...) + buf = append(x, tsigvar...) + } else { + buf = append(msgbuf, tsigvar...) + } + return buf +} + +// Strip the TSIG from the raw message. +func stripTsig(msg []byte) ([]byte, *TSIG, error) { + // Copied from msg.go's Unpack() Header, but modified. + var ( + dh Header + err error + ) + off, tsigoff := 0, 0 + + if dh, off, err = unpackMsgHdr(msg, off); err != nil { + return nil, nil, err + } + if dh.Arcount == 0 { + return nil, nil, ErrNoSig + } + + // Rcode, see msg.go Unpack() + if int(dh.Bits&0xF) == RcodeNotAuth { + return nil, nil, ErrAuth + } + + for i := 0; i < int(dh.Qdcount); i++ { + _, off, err = unpackQuestion(msg, off) + if err != nil { + return nil, nil, err + } + } + + _, off, err = unpackRRslice(int(dh.Ancount), msg, off) + if err != nil { + return nil, nil, err + } + _, off, err = unpackRRslice(int(dh.Nscount), msg, off) + if err != nil { + return nil, nil, err + } + + rr := new(TSIG) + var extra RR + for i := 0; i < int(dh.Arcount); i++ { + tsigoff = off + extra, off, err = UnpackRR(msg, off) + if err != nil { + return nil, nil, err + } + if extra.Header().Rrtype == TypeTSIG { + rr = extra.(*TSIG) + // Adjust Arcount. + arcount := binary.BigEndian.Uint16(msg[10:]) + binary.BigEndian.PutUint16(msg[10:], arcount-1) + break + } + } + if rr == nil { + return nil, nil, ErrNoSig + } + return msg[:tsigoff], rr, nil +} + +// Translate the TSIG time signed into a date. There is no +// need for RFC1982 calculations as this date is 48 bits. +func tsigTimeToString(t uint64) string { + ti := time.Unix(int64(t), 0).UTC() + return ti.Format("20060102150405") +} + +func packTsigWire(tw *tsigWireFmt, msg []byte) (int, error) { + // copied from zmsg.go TSIG packing + // RR_Header + off, err := PackDomainName(tw.Name, msg, 0, nil, false) + if err != nil { + return off, err + } + off, err = packUint16(tw.Class, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(tw.Ttl, msg, off) + if err != nil { + return off, err + } + + off, err = PackDomainName(tw.Algorithm, msg, off, nil, false) + if err != nil { + return off, err + } + off, err = packUint48(tw.TimeSigned, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(tw.Fudge, msg, off) + if err != nil { + return off, err + } + + off, err = packUint16(tw.Error, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(tw.OtherLen, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(tw.OtherData, msg, off) + if err != nil { + return off, err + } + return off, nil +} + +func packMacWire(mw *macWireFmt, msg []byte) (int, error) { + off, err := packUint16(mw.MACSize, msg, 0) + if err != nil { + return off, err + } + off, err = packStringHex(mw.MAC, msg, off) + if err != nil { + return off, err + } + return off, nil +} + +func packTimerWire(tw *timerWireFmt, msg []byte) (int, error) { + off, err := packUint48(tw.TimeSigned, msg, 0) + if err != nil { + return off, err + } + off, err = packUint16(tw.Fudge, msg, off) + if err != nil { + return off, err + } + return off, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/types.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/types.go new file mode 100644 index 00000000000..115f2c7bd0e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/types.go @@ -0,0 +1,1383 @@ +package dns + +import ( + "fmt" + "net" + "strconv" + "strings" + "time" +) + +type ( + // Type is a DNS type. + Type uint16 + // Class is a DNS class. + Class uint16 + // Name is a DNS domain name. + Name string +) + +// Packet formats + +// Wire constants and supported types. +const ( + // valid RR_Header.Rrtype and Question.qtype + + TypeNone uint16 = 0 + TypeA uint16 = 1 + TypeNS uint16 = 2 + TypeMD uint16 = 3 + TypeMF uint16 = 4 + TypeCNAME uint16 = 5 + TypeSOA uint16 = 6 + TypeMB uint16 = 7 + TypeMG uint16 = 8 + TypeMR uint16 = 9 + TypeNULL uint16 = 10 + TypePTR uint16 = 12 + TypeHINFO uint16 = 13 + TypeMINFO uint16 = 14 + TypeMX uint16 = 15 + TypeTXT uint16 = 16 + TypeRP uint16 = 17 + TypeAFSDB uint16 = 18 + TypeX25 uint16 = 19 + TypeISDN uint16 = 20 + TypeRT uint16 = 21 + TypeNSAPPTR uint16 = 23 + TypeSIG uint16 = 24 + TypeKEY uint16 = 25 + TypePX uint16 = 26 + TypeGPOS uint16 = 27 + TypeAAAA uint16 = 28 + TypeLOC uint16 = 29 + TypeNXT uint16 = 30 + TypeEID uint16 = 31 + TypeNIMLOC uint16 = 32 + TypeSRV uint16 = 33 + TypeATMA uint16 = 34 + TypeNAPTR uint16 = 35 + TypeKX uint16 = 36 + TypeCERT uint16 = 37 + TypeDNAME uint16 = 39 + TypeOPT uint16 = 41 // EDNS + TypeDS uint16 = 43 + TypeSSHFP uint16 = 44 + TypeRRSIG uint16 = 46 + TypeNSEC uint16 = 47 + TypeDNSKEY uint16 = 48 + TypeDHCID uint16 = 49 + TypeNSEC3 uint16 = 50 + TypeNSEC3PARAM uint16 = 51 + TypeTLSA uint16 = 52 + TypeSMIMEA uint16 = 53 + TypeHIP uint16 = 55 + TypeNINFO uint16 = 56 + TypeRKEY uint16 = 57 + TypeTALINK uint16 = 58 + TypeCDS uint16 = 59 + TypeCDNSKEY uint16 = 60 + TypeOPENPGPKEY uint16 = 61 + TypeCSYNC uint16 = 62 + TypeSPF uint16 = 99 + TypeUINFO uint16 = 100 + TypeUID uint16 = 101 + TypeGID uint16 = 102 + TypeUNSPEC uint16 = 103 + TypeNID uint16 = 104 + TypeL32 uint16 = 105 + TypeL64 uint16 = 106 + TypeLP uint16 = 107 + TypeEUI48 uint16 = 108 + TypeEUI64 uint16 = 109 + TypeURI uint16 = 256 + TypeCAA uint16 = 257 + TypeAVC uint16 = 258 + + TypeTKEY uint16 = 249 + TypeTSIG uint16 = 250 + + // valid Question.Qtype only + TypeIXFR uint16 = 251 + TypeAXFR uint16 = 252 + TypeMAILB uint16 = 253 + TypeMAILA uint16 = 254 + TypeANY uint16 = 255 + + TypeTA uint16 = 32768 + TypeDLV uint16 = 32769 + TypeReserved uint16 = 65535 + + // valid Question.Qclass + ClassINET = 1 + ClassCSNET = 2 + ClassCHAOS = 3 + ClassHESIOD = 4 + ClassNONE = 254 + ClassANY = 255 + + // Message Response Codes, see https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml + RcodeSuccess = 0 // NoError - No Error [DNS] + RcodeFormatError = 1 // FormErr - Format Error [DNS] + RcodeServerFailure = 2 // ServFail - Server Failure [DNS] + RcodeNameError = 3 // NXDomain - Non-Existent Domain [DNS] + RcodeNotImplemented = 4 // NotImp - Not Implemented [DNS] + RcodeRefused = 5 // Refused - Query Refused [DNS] + RcodeYXDomain = 6 // YXDomain - Name Exists when it should not [DNS Update] + RcodeYXRrset = 7 // YXRRSet - RR Set Exists when it should not [DNS Update] + RcodeNXRrset = 8 // NXRRSet - RR Set that should exist does not [DNS Update] + RcodeNotAuth = 9 // NotAuth - Server Not Authoritative for zone [DNS Update] + RcodeNotZone = 10 // NotZone - Name not contained in zone [DNS Update/TSIG] + RcodeBadSig = 16 // BADSIG - TSIG Signature Failure [TSIG] + RcodeBadVers = 16 // BADVERS - Bad OPT Version [EDNS0] + RcodeBadKey = 17 // BADKEY - Key not recognized [TSIG] + RcodeBadTime = 18 // BADTIME - Signature out of time window [TSIG] + RcodeBadMode = 19 // BADMODE - Bad TKEY Mode [TKEY] + RcodeBadName = 20 // BADNAME - Duplicate key name [TKEY] + RcodeBadAlg = 21 // BADALG - Algorithm not supported [TKEY] + RcodeBadTrunc = 22 // BADTRUNC - Bad Truncation [TSIG] + RcodeBadCookie = 23 // BADCOOKIE - Bad/missing Server Cookie [DNS Cookies] + + // Message Opcodes. There is no 3. + OpcodeQuery = 0 + OpcodeIQuery = 1 + OpcodeStatus = 2 + OpcodeNotify = 4 + OpcodeUpdate = 5 +) + +// Header is the wire format for the DNS packet header. +type Header struct { + Id uint16 + Bits uint16 + Qdcount, Ancount, Nscount, Arcount uint16 +} + +const ( + headerSize = 12 + + // Header.Bits + _QR = 1 << 15 // query/response (response=1) + _AA = 1 << 10 // authoritative + _TC = 1 << 9 // truncated + _RD = 1 << 8 // recursion desired + _RA = 1 << 7 // recursion available + _Z = 1 << 6 // Z + _AD = 1 << 5 // authticated data + _CD = 1 << 4 // checking disabled +) + +// Various constants used in the LOC RR, See RFC 1887. +const ( + LOC_EQUATOR = 1 << 31 // RFC 1876, Section 2. + LOC_PRIMEMERIDIAN = 1 << 31 // RFC 1876, Section 2. + LOC_HOURS = 60 * 1000 + LOC_DEGREES = 60 * LOC_HOURS + LOC_ALTITUDEBASE = 100000 +) + +// Different Certificate Types, see RFC 4398, Section 2.1 +const ( + CertPKIX = 1 + iota + CertSPKI + CertPGP + CertIPIX + CertISPKI + CertIPGP + CertACPKIX + CertIACPKIX + CertURI = 253 + CertOID = 254 +) + +// CertTypeToString converts the Cert Type to its string representation. +// See RFC 4398 and RFC 6944. +var CertTypeToString = map[uint16]string{ + CertPKIX: "PKIX", + CertSPKI: "SPKI", + CertPGP: "PGP", + CertIPIX: "IPIX", + CertISPKI: "ISPKI", + CertIPGP: "IPGP", + CertACPKIX: "ACPKIX", + CertIACPKIX: "IACPKIX", + CertURI: "URI", + CertOID: "OID", +} + +// StringToCertType is the reverseof CertTypeToString. +var StringToCertType = reverseInt16(CertTypeToString) + +//go:generate go run types_generate.go + +// Question holds a DNS question. There can be multiple questions in the +// question section of a message. Usually there is just one. +type Question struct { + Name string `dns:"cdomain-name"` // "cdomain-name" specifies encoding (and may be compressed) + Qtype uint16 + Qclass uint16 +} + +func (q *Question) len() int { + return len(q.Name) + 1 + 2 + 2 +} + +func (q *Question) String() (s string) { + // prefix with ; (as in dig) + s = ";" + sprintName(q.Name) + "\t" + s += Class(q.Qclass).String() + "\t" + s += " " + Type(q.Qtype).String() + return s +} + +// ANY is a wildcard record. See RFC 1035, Section 3.2.3. ANY +// is named "*" there. +type ANY struct { + Hdr RR_Header + // Does not have any rdata +} + +func (rr *ANY) String() string { return rr.Hdr.String() } + +// CNAME RR. See RFC 1034. +type CNAME struct { + Hdr RR_Header + Target string `dns:"cdomain-name"` +} + +func (rr *CNAME) String() string { return rr.Hdr.String() + sprintName(rr.Target) } + +// HINFO RR. See RFC 1034. +type HINFO struct { + Hdr RR_Header + Cpu string + Os string +} + +func (rr *HINFO) String() string { + return rr.Hdr.String() + sprintTxt([]string{rr.Cpu, rr.Os}) +} + +// MB RR. See RFC 1035. +type MB struct { + Hdr RR_Header + Mb string `dns:"cdomain-name"` +} + +func (rr *MB) String() string { return rr.Hdr.String() + sprintName(rr.Mb) } + +// MG RR. See RFC 1035. +type MG struct { + Hdr RR_Header + Mg string `dns:"cdomain-name"` +} + +func (rr *MG) String() string { return rr.Hdr.String() + sprintName(rr.Mg) } + +// MINFO RR. See RFC 1035. +type MINFO struct { + Hdr RR_Header + Rmail string `dns:"cdomain-name"` + Email string `dns:"cdomain-name"` +} + +func (rr *MINFO) String() string { + return rr.Hdr.String() + sprintName(rr.Rmail) + " " + sprintName(rr.Email) +} + +// MR RR. See RFC 1035. +type MR struct { + Hdr RR_Header + Mr string `dns:"cdomain-name"` +} + +func (rr *MR) String() string { + return rr.Hdr.String() + sprintName(rr.Mr) +} + +// MF RR. See RFC 1035. +type MF struct { + Hdr RR_Header + Mf string `dns:"cdomain-name"` +} + +func (rr *MF) String() string { + return rr.Hdr.String() + sprintName(rr.Mf) +} + +// MD RR. See RFC 1035. +type MD struct { + Hdr RR_Header + Md string `dns:"cdomain-name"` +} + +func (rr *MD) String() string { + return rr.Hdr.String() + sprintName(rr.Md) +} + +// MX RR. See RFC 1035. +type MX struct { + Hdr RR_Header + Preference uint16 + Mx string `dns:"cdomain-name"` +} + +func (rr *MX) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Mx) +} + +// AFSDB RR. See RFC 1183. +type AFSDB struct { + Hdr RR_Header + Subtype uint16 + Hostname string `dns:"domain-name"` +} + +func (rr *AFSDB) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Subtype)) + " " + sprintName(rr.Hostname) +} + +// X25 RR. See RFC 1183, Section 3.1. +type X25 struct { + Hdr RR_Header + PSDNAddress string +} + +func (rr *X25) String() string { + return rr.Hdr.String() + rr.PSDNAddress +} + +// RT RR. See RFC 1183, Section 3.3. +type RT struct { + Hdr RR_Header + Preference uint16 + Host string `dns:"cdomain-name"` +} + +func (rr *RT) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Host) +} + +// NS RR. See RFC 1035. +type NS struct { + Hdr RR_Header + Ns string `dns:"cdomain-name"` +} + +func (rr *NS) String() string { + return rr.Hdr.String() + sprintName(rr.Ns) +} + +// PTR RR. See RFC 1035. +type PTR struct { + Hdr RR_Header + Ptr string `dns:"cdomain-name"` +} + +func (rr *PTR) String() string { + return rr.Hdr.String() + sprintName(rr.Ptr) +} + +// RP RR. See RFC 1138, Section 2.2. +type RP struct { + Hdr RR_Header + Mbox string `dns:"domain-name"` + Txt string `dns:"domain-name"` +} + +func (rr *RP) String() string { + return rr.Hdr.String() + rr.Mbox + " " + sprintTxt([]string{rr.Txt}) +} + +// SOA RR. See RFC 1035. +type SOA struct { + Hdr RR_Header + Ns string `dns:"cdomain-name"` + Mbox string `dns:"cdomain-name"` + Serial uint32 + Refresh uint32 + Retry uint32 + Expire uint32 + Minttl uint32 +} + +func (rr *SOA) String() string { + return rr.Hdr.String() + sprintName(rr.Ns) + " " + sprintName(rr.Mbox) + + " " + strconv.FormatInt(int64(rr.Serial), 10) + + " " + strconv.FormatInt(int64(rr.Refresh), 10) + + " " + strconv.FormatInt(int64(rr.Retry), 10) + + " " + strconv.FormatInt(int64(rr.Expire), 10) + + " " + strconv.FormatInt(int64(rr.Minttl), 10) +} + +// TXT RR. See RFC 1035. +type TXT struct { + Hdr RR_Header + Txt []string `dns:"txt"` +} + +func (rr *TXT) String() string { return rr.Hdr.String() + sprintTxt(rr.Txt) } + +func sprintName(s string) string { + var dst strings.Builder + dst.Grow(len(s)) + for i := 0; i < len(s); { + if i+1 < len(s) && s[i] == '\\' && s[i+1] == '.' { + dst.WriteString(s[i : i+2]) + i += 2 + continue + } + + b, n := nextByte(s, i) + switch { + case n == 0: + i++ // dangling back slash + case b == '.': + dst.WriteByte('.') + default: + writeDomainNameByte(&dst, b) + } + i += n + } + return dst.String() +} + +func sprintTxtOctet(s string) string { + var dst strings.Builder + dst.Grow(2 + len(s)) + dst.WriteByte('"') + for i := 0; i < len(s); { + if i+1 < len(s) && s[i] == '\\' && s[i+1] == '.' { + dst.WriteString(s[i : i+2]) + i += 2 + continue + } + + b, n := nextByte(s, i) + switch { + case n == 0: + i++ // dangling back slash + case b == '.': + dst.WriteByte('.') + case b < ' ' || b > '~': + writeEscapedByte(&dst, b) + default: + dst.WriteByte(b) + } + i += n + } + dst.WriteByte('"') + return dst.String() +} + +func sprintTxt(txt []string) string { + var out strings.Builder + for i, s := range txt { + out.Grow(3 + len(s)) + if i > 0 { + out.WriteString(` "`) + } else { + out.WriteByte('"') + } + for j := 0; j < len(s); { + b, n := nextByte(s, j) + if n == 0 { + break + } + writeTXTStringByte(&out, b) + j += n + } + out.WriteByte('"') + } + return out.String() +} + +func writeDomainNameByte(s *strings.Builder, b byte) { + switch b { + case '.', ' ', '\'', '@', ';', '(', ')': // additional chars to escape + s.WriteByte('\\') + s.WriteByte(b) + default: + writeTXTStringByte(s, b) + } +} + +func writeTXTStringByte(s *strings.Builder, b byte) { + switch { + case b == '"' || b == '\\': + s.WriteByte('\\') + s.WriteByte(b) + case b < ' ' || b > '~': + writeEscapedByte(s, b) + default: + s.WriteByte(b) + } +} + +func writeEscapedByte(s *strings.Builder, b byte) { + var buf [3]byte + bufs := strconv.AppendInt(buf[:0], int64(b), 10) + s.WriteByte('\\') + for i := len(bufs); i < 3; i++ { + s.WriteByte('0') + } + s.Write(bufs) +} + +func nextByte(s string, offset int) (byte, int) { + if offset >= len(s) { + return 0, 0 + } + if s[offset] != '\\' { + // not an escape sequence + return s[offset], 1 + } + switch len(s) - offset { + case 1: // dangling escape + return 0, 0 + case 2, 3: // too short to be \ddd + default: // maybe \ddd + if isDigit(s[offset+1]) && isDigit(s[offset+2]) && isDigit(s[offset+3]) { + return dddStringToByte(s[offset+1:]), 4 + } + } + // not \ddd, just an RFC 1035 "quoted" character + return s[offset+1], 2 +} + +// SPF RR. See RFC 4408, Section 3.1.1. +type SPF struct { + Hdr RR_Header + Txt []string `dns:"txt"` +} + +func (rr *SPF) String() string { return rr.Hdr.String() + sprintTxt(rr.Txt) } + +// AVC RR. See https://www.iana.org/assignments/dns-parameters/AVC/avc-completed-template. +type AVC struct { + Hdr RR_Header + Txt []string `dns:"txt"` +} + +func (rr *AVC) String() string { return rr.Hdr.String() + sprintTxt(rr.Txt) } + +// SRV RR. See RFC 2782. +type SRV struct { + Hdr RR_Header + Priority uint16 + Weight uint16 + Port uint16 + Target string `dns:"domain-name"` +} + +func (rr *SRV) String() string { + return rr.Hdr.String() + + strconv.Itoa(int(rr.Priority)) + " " + + strconv.Itoa(int(rr.Weight)) + " " + + strconv.Itoa(int(rr.Port)) + " " + sprintName(rr.Target) +} + +// NAPTR RR. See RFC 2915. +type NAPTR struct { + Hdr RR_Header + Order uint16 + Preference uint16 + Flags string + Service string + Regexp string + Replacement string `dns:"domain-name"` +} + +func (rr *NAPTR) String() string { + return rr.Hdr.String() + + strconv.Itoa(int(rr.Order)) + " " + + strconv.Itoa(int(rr.Preference)) + " " + + "\"" + rr.Flags + "\" " + + "\"" + rr.Service + "\" " + + "\"" + rr.Regexp + "\" " + + rr.Replacement +} + +// CERT RR. See RFC 4398. +type CERT struct { + Hdr RR_Header + Type uint16 + KeyTag uint16 + Algorithm uint8 + Certificate string `dns:"base64"` +} + +func (rr *CERT) String() string { + var ( + ok bool + certtype, algorithm string + ) + if certtype, ok = CertTypeToString[rr.Type]; !ok { + certtype = strconv.Itoa(int(rr.Type)) + } + if algorithm, ok = AlgorithmToString[rr.Algorithm]; !ok { + algorithm = strconv.Itoa(int(rr.Algorithm)) + } + return rr.Hdr.String() + certtype + + " " + strconv.Itoa(int(rr.KeyTag)) + + " " + algorithm + + " " + rr.Certificate +} + +// DNAME RR. See RFC 2672. +type DNAME struct { + Hdr RR_Header + Target string `dns:"domain-name"` +} + +func (rr *DNAME) String() string { + return rr.Hdr.String() + sprintName(rr.Target) +} + +// A RR. See RFC 1035. +type A struct { + Hdr RR_Header + A net.IP `dns:"a"` +} + +func (rr *A) String() string { + if rr.A == nil { + return rr.Hdr.String() + } + return rr.Hdr.String() + rr.A.String() +} + +// AAAA RR. See RFC 3596. +type AAAA struct { + Hdr RR_Header + AAAA net.IP `dns:"aaaa"` +} + +func (rr *AAAA) String() string { + if rr.AAAA == nil { + return rr.Hdr.String() + } + return rr.Hdr.String() + rr.AAAA.String() +} + +// PX RR. See RFC 2163. +type PX struct { + Hdr RR_Header + Preference uint16 + Map822 string `dns:"domain-name"` + Mapx400 string `dns:"domain-name"` +} + +func (rr *PX) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Map822) + " " + sprintName(rr.Mapx400) +} + +// GPOS RR. See RFC 1712. +type GPOS struct { + Hdr RR_Header + Longitude string + Latitude string + Altitude string +} + +func (rr *GPOS) String() string { + return rr.Hdr.String() + rr.Longitude + " " + rr.Latitude + " " + rr.Altitude +} + +// LOC RR. See RFC RFC 1876. +type LOC struct { + Hdr RR_Header + Version uint8 + Size uint8 + HorizPre uint8 + VertPre uint8 + Latitude uint32 + Longitude uint32 + Altitude uint32 +} + +// cmToM takes a cm value expressed in RFC1876 SIZE mantissa/exponent +// format and returns a string in m (two decimals for the cm) +func cmToM(m, e uint8) string { + if e < 2 { + if e == 1 { + m *= 10 + } + + return fmt.Sprintf("0.%02d", m) + } + + s := fmt.Sprintf("%d", m) + for e > 2 { + s += "0" + e-- + } + return s +} + +func (rr *LOC) String() string { + s := rr.Hdr.String() + + lat := rr.Latitude + ns := "N" + if lat > LOC_EQUATOR { + lat = lat - LOC_EQUATOR + } else { + ns = "S" + lat = LOC_EQUATOR - lat + } + h := lat / LOC_DEGREES + lat = lat % LOC_DEGREES + m := lat / LOC_HOURS + lat = lat % LOC_HOURS + s += fmt.Sprintf("%02d %02d %0.3f %s ", h, m, float64(lat)/1000, ns) + + lon := rr.Longitude + ew := "E" + if lon > LOC_PRIMEMERIDIAN { + lon = lon - LOC_PRIMEMERIDIAN + } else { + ew = "W" + lon = LOC_PRIMEMERIDIAN - lon + } + h = lon / LOC_DEGREES + lon = lon % LOC_DEGREES + m = lon / LOC_HOURS + lon = lon % LOC_HOURS + s += fmt.Sprintf("%02d %02d %0.3f %s ", h, m, float64(lon)/1000, ew) + + var alt = float64(rr.Altitude) / 100 + alt -= LOC_ALTITUDEBASE + if rr.Altitude%100 != 0 { + s += fmt.Sprintf("%.2fm ", alt) + } else { + s += fmt.Sprintf("%.0fm ", alt) + } + + s += cmToM(rr.Size&0xf0>>4, rr.Size&0x0f) + "m " + s += cmToM(rr.HorizPre&0xf0>>4, rr.HorizPre&0x0f) + "m " + s += cmToM(rr.VertPre&0xf0>>4, rr.VertPre&0x0f) + "m" + + return s +} + +// SIG RR. See RFC 2535. The SIG RR is identical to RRSIG and nowadays only used for SIG(0), See RFC 2931. +type SIG struct { + RRSIG +} + +// RRSIG RR. See RFC 4034 and RFC 3755. +type RRSIG struct { + Hdr RR_Header + TypeCovered uint16 + Algorithm uint8 + Labels uint8 + OrigTtl uint32 + Expiration uint32 + Inception uint32 + KeyTag uint16 + SignerName string `dns:"domain-name"` + Signature string `dns:"base64"` +} + +func (rr *RRSIG) String() string { + s := rr.Hdr.String() + s += Type(rr.TypeCovered).String() + s += " " + strconv.Itoa(int(rr.Algorithm)) + + " " + strconv.Itoa(int(rr.Labels)) + + " " + strconv.FormatInt(int64(rr.OrigTtl), 10) + + " " + TimeToString(rr.Expiration) + + " " + TimeToString(rr.Inception) + + " " + strconv.Itoa(int(rr.KeyTag)) + + " " + sprintName(rr.SignerName) + + " " + rr.Signature + return s +} + +// NSEC RR. See RFC 4034 and RFC 3755. +type NSEC struct { + Hdr RR_Header + NextDomain string `dns:"domain-name"` + TypeBitMap []uint16 `dns:"nsec"` +} + +func (rr *NSEC) String() string { + s := rr.Hdr.String() + sprintName(rr.NextDomain) + for i := 0; i < len(rr.TypeBitMap); i++ { + s += " " + Type(rr.TypeBitMap[i]).String() + } + return s +} + +func (rr *NSEC) len() int { + l := rr.Hdr.len() + len(rr.NextDomain) + 1 + lastwindow := uint32(2 ^ 32 + 1) + for _, t := range rr.TypeBitMap { + window := t / 256 + if uint32(window) != lastwindow { + l += 1 + 32 + } + lastwindow = uint32(window) + } + return l +} + +// DLV RR. See RFC 4431. +type DLV struct{ DS } + +// CDS RR. See RFC 7344. +type CDS struct{ DS } + +// DS RR. See RFC 4034 and RFC 3658. +type DS struct { + Hdr RR_Header + KeyTag uint16 + Algorithm uint8 + DigestType uint8 + Digest string `dns:"hex"` +} + +func (rr *DS) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.KeyTag)) + + " " + strconv.Itoa(int(rr.Algorithm)) + + " " + strconv.Itoa(int(rr.DigestType)) + + " " + strings.ToUpper(rr.Digest) +} + +// KX RR. See RFC 2230. +type KX struct { + Hdr RR_Header + Preference uint16 + Exchanger string `dns:"domain-name"` +} + +func (rr *KX) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + + " " + sprintName(rr.Exchanger) +} + +// TA RR. See http://www.watson.org/~weiler/INI1999-19.pdf. +type TA struct { + Hdr RR_Header + KeyTag uint16 + Algorithm uint8 + DigestType uint8 + Digest string `dns:"hex"` +} + +func (rr *TA) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.KeyTag)) + + " " + strconv.Itoa(int(rr.Algorithm)) + + " " + strconv.Itoa(int(rr.DigestType)) + + " " + strings.ToUpper(rr.Digest) +} + +// TALINK RR. See https://www.iana.org/assignments/dns-parameters/TALINK/talink-completed-template. +type TALINK struct { + Hdr RR_Header + PreviousName string `dns:"domain-name"` + NextName string `dns:"domain-name"` +} + +func (rr *TALINK) String() string { + return rr.Hdr.String() + + sprintName(rr.PreviousName) + " " + sprintName(rr.NextName) +} + +// SSHFP RR. See RFC RFC 4255. +type SSHFP struct { + Hdr RR_Header + Algorithm uint8 + Type uint8 + FingerPrint string `dns:"hex"` +} + +func (rr *SSHFP) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Algorithm)) + + " " + strconv.Itoa(int(rr.Type)) + + " " + strings.ToUpper(rr.FingerPrint) +} + +// KEY RR. See RFC RFC 2535. +type KEY struct { + DNSKEY +} + +// CDNSKEY RR. See RFC 7344. +type CDNSKEY struct { + DNSKEY +} + +// DNSKEY RR. See RFC 4034 and RFC 3755. +type DNSKEY struct { + Hdr RR_Header + Flags uint16 + Protocol uint8 + Algorithm uint8 + PublicKey string `dns:"base64"` +} + +func (rr *DNSKEY) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Flags)) + + " " + strconv.Itoa(int(rr.Protocol)) + + " " + strconv.Itoa(int(rr.Algorithm)) + + " " + rr.PublicKey +} + +// RKEY RR. See https://www.iana.org/assignments/dns-parameters/RKEY/rkey-completed-template. +type RKEY struct { + Hdr RR_Header + Flags uint16 + Protocol uint8 + Algorithm uint8 + PublicKey string `dns:"base64"` +} + +func (rr *RKEY) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Flags)) + + " " + strconv.Itoa(int(rr.Protocol)) + + " " + strconv.Itoa(int(rr.Algorithm)) + + " " + rr.PublicKey +} + +// NSAPPTR RR. See RFC 1348. +type NSAPPTR struct { + Hdr RR_Header + Ptr string `dns:"domain-name"` +} + +func (rr *NSAPPTR) String() string { return rr.Hdr.String() + sprintName(rr.Ptr) } + +// NSEC3 RR. See RFC 5155. +type NSEC3 struct { + Hdr RR_Header + Hash uint8 + Flags uint8 + Iterations uint16 + SaltLength uint8 + Salt string `dns:"size-hex:SaltLength"` + HashLength uint8 + NextDomain string `dns:"size-base32:HashLength"` + TypeBitMap []uint16 `dns:"nsec"` +} + +func (rr *NSEC3) String() string { + s := rr.Hdr.String() + s += strconv.Itoa(int(rr.Hash)) + + " " + strconv.Itoa(int(rr.Flags)) + + " " + strconv.Itoa(int(rr.Iterations)) + + " " + saltToString(rr.Salt) + + " " + rr.NextDomain + for i := 0; i < len(rr.TypeBitMap); i++ { + s += " " + Type(rr.TypeBitMap[i]).String() + } + return s +} + +func (rr *NSEC3) len() int { + l := rr.Hdr.len() + 6 + len(rr.Salt)/2 + 1 + len(rr.NextDomain) + 1 + lastwindow := uint32(2 ^ 32 + 1) + for _, t := range rr.TypeBitMap { + window := t / 256 + if uint32(window) != lastwindow { + l += 1 + 32 + } + lastwindow = uint32(window) + } + return l +} + +// NSEC3PARAM RR. See RFC 5155. +type NSEC3PARAM struct { + Hdr RR_Header + Hash uint8 + Flags uint8 + Iterations uint16 + SaltLength uint8 + Salt string `dns:"size-hex:SaltLength"` +} + +func (rr *NSEC3PARAM) String() string { + s := rr.Hdr.String() + s += strconv.Itoa(int(rr.Hash)) + + " " + strconv.Itoa(int(rr.Flags)) + + " " + strconv.Itoa(int(rr.Iterations)) + + " " + saltToString(rr.Salt) + return s +} + +// TKEY RR. See RFC 2930. +type TKEY struct { + Hdr RR_Header + Algorithm string `dns:"domain-name"` + Inception uint32 + Expiration uint32 + Mode uint16 + Error uint16 + KeySize uint16 + Key string `dns:"size-hex:KeySize"` + OtherLen uint16 + OtherData string `dns:"size-hex:OtherLen"` +} + +// TKEY has no official presentation format, but this will suffice. +func (rr *TKEY) String() string { + s := "\n;; TKEY PSEUDOSECTION:\n" + s += rr.Hdr.String() + " " + rr.Algorithm + " " + + strconv.Itoa(int(rr.KeySize)) + " " + rr.Key + " " + + strconv.Itoa(int(rr.OtherLen)) + " " + rr.OtherData + return s +} + +// RFC3597 represents an unknown/generic RR. See RFC 3597. +type RFC3597 struct { + Hdr RR_Header + Rdata string `dns:"hex"` +} + +func (rr *RFC3597) String() string { + // Let's call it a hack + s := rfc3597Header(rr.Hdr) + + s += "\\# " + strconv.Itoa(len(rr.Rdata)/2) + " " + rr.Rdata + return s +} + +func rfc3597Header(h RR_Header) string { + var s string + + s += sprintName(h.Name) + "\t" + s += strconv.FormatInt(int64(h.Ttl), 10) + "\t" + s += "CLASS" + strconv.Itoa(int(h.Class)) + "\t" + s += "TYPE" + strconv.Itoa(int(h.Rrtype)) + "\t" + return s +} + +// URI RR. See RFC 7553. +type URI struct { + Hdr RR_Header + Priority uint16 + Weight uint16 + Target string `dns:"octet"` +} + +func (rr *URI) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Priority)) + + " " + strconv.Itoa(int(rr.Weight)) + " " + sprintTxtOctet(rr.Target) +} + +// DHCID RR. See RFC 4701. +type DHCID struct { + Hdr RR_Header + Digest string `dns:"base64"` +} + +func (rr *DHCID) String() string { return rr.Hdr.String() + rr.Digest } + +// TLSA RR. See RFC 6698. +type TLSA struct { + Hdr RR_Header + Usage uint8 + Selector uint8 + MatchingType uint8 + Certificate string `dns:"hex"` +} + +func (rr *TLSA) String() string { + return rr.Hdr.String() + + strconv.Itoa(int(rr.Usage)) + + " " + strconv.Itoa(int(rr.Selector)) + + " " + strconv.Itoa(int(rr.MatchingType)) + + " " + rr.Certificate +} + +// SMIMEA RR. See RFC 8162. +type SMIMEA struct { + Hdr RR_Header + Usage uint8 + Selector uint8 + MatchingType uint8 + Certificate string `dns:"hex"` +} + +func (rr *SMIMEA) String() string { + s := rr.Hdr.String() + + strconv.Itoa(int(rr.Usage)) + + " " + strconv.Itoa(int(rr.Selector)) + + " " + strconv.Itoa(int(rr.MatchingType)) + + // Every Nth char needs a space on this output. If we output + // this as one giant line, we can't read it can in because in some cases + // the cert length overflows scan.maxTok (2048). + sx := splitN(rr.Certificate, 1024) // conservative value here + s += " " + strings.Join(sx, " ") + return s +} + +// HIP RR. See RFC 8005. +type HIP struct { + Hdr RR_Header + HitLength uint8 + PublicKeyAlgorithm uint8 + PublicKeyLength uint16 + Hit string `dns:"size-hex:HitLength"` + PublicKey string `dns:"size-base64:PublicKeyLength"` + RendezvousServers []string `dns:"domain-name"` +} + +func (rr *HIP) String() string { + s := rr.Hdr.String() + + strconv.Itoa(int(rr.PublicKeyAlgorithm)) + + " " + rr.Hit + + " " + rr.PublicKey + for _, d := range rr.RendezvousServers { + s += " " + sprintName(d) + } + return s +} + +// NINFO RR. See https://www.iana.org/assignments/dns-parameters/NINFO/ninfo-completed-template. +type NINFO struct { + Hdr RR_Header + ZSData []string `dns:"txt"` +} + +func (rr *NINFO) String() string { return rr.Hdr.String() + sprintTxt(rr.ZSData) } + +// NID RR. See RFC RFC 6742. +type NID struct { + Hdr RR_Header + Preference uint16 + NodeID uint64 +} + +func (rr *NID) String() string { + s := rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + node := fmt.Sprintf("%0.16x", rr.NodeID) + s += " " + node[0:4] + ":" + node[4:8] + ":" + node[8:12] + ":" + node[12:16] + return s +} + +// L32 RR, See RFC 6742. +type L32 struct { + Hdr RR_Header + Preference uint16 + Locator32 net.IP `dns:"a"` +} + +func (rr *L32) String() string { + if rr.Locator32 == nil { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + } + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + + " " + rr.Locator32.String() +} + +// L64 RR, See RFC 6742. +type L64 struct { + Hdr RR_Header + Preference uint16 + Locator64 uint64 +} + +func (rr *L64) String() string { + s := rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + node := fmt.Sprintf("%0.16X", rr.Locator64) + s += " " + node[0:4] + ":" + node[4:8] + ":" + node[8:12] + ":" + node[12:16] + return s +} + +// LP RR. See RFC 6742. +type LP struct { + Hdr RR_Header + Preference uint16 + Fqdn string `dns:"domain-name"` +} + +func (rr *LP) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Preference)) + " " + sprintName(rr.Fqdn) +} + +// EUI48 RR. See RFC 7043. +type EUI48 struct { + Hdr RR_Header + Address uint64 `dns:"uint48"` +} + +func (rr *EUI48) String() string { return rr.Hdr.String() + euiToString(rr.Address, 48) } + +// EUI64 RR. See RFC 7043. +type EUI64 struct { + Hdr RR_Header + Address uint64 +} + +func (rr *EUI64) String() string { return rr.Hdr.String() + euiToString(rr.Address, 64) } + +// CAA RR. See RFC 6844. +type CAA struct { + Hdr RR_Header + Flag uint8 + Tag string + Value string `dns:"octet"` +} + +func (rr *CAA) String() string { + return rr.Hdr.String() + strconv.Itoa(int(rr.Flag)) + " " + rr.Tag + " " + sprintTxtOctet(rr.Value) +} + +// UID RR. Deprecated, IANA-Reserved. +type UID struct { + Hdr RR_Header + Uid uint32 +} + +func (rr *UID) String() string { return rr.Hdr.String() + strconv.FormatInt(int64(rr.Uid), 10) } + +// GID RR. Deprecated, IANA-Reserved. +type GID struct { + Hdr RR_Header + Gid uint32 +} + +func (rr *GID) String() string { return rr.Hdr.String() + strconv.FormatInt(int64(rr.Gid), 10) } + +// UINFO RR. Deprecated, IANA-Reserved. +type UINFO struct { + Hdr RR_Header + Uinfo string +} + +func (rr *UINFO) String() string { return rr.Hdr.String() + sprintTxt([]string{rr.Uinfo}) } + +// EID RR. See http://ana-3.lcs.mit.edu/~jnc/nimrod/dns.txt. +type EID struct { + Hdr RR_Header + Endpoint string `dns:"hex"` +} + +func (rr *EID) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Endpoint) } + +// NIMLOC RR. See http://ana-3.lcs.mit.edu/~jnc/nimrod/dns.txt. +type NIMLOC struct { + Hdr RR_Header + Locator string `dns:"hex"` +} + +func (rr *NIMLOC) String() string { return rr.Hdr.String() + strings.ToUpper(rr.Locator) } + +// OPENPGPKEY RR. See RFC 7929. +type OPENPGPKEY struct { + Hdr RR_Header + PublicKey string `dns:"base64"` +} + +func (rr *OPENPGPKEY) String() string { return rr.Hdr.String() + rr.PublicKey } + +// CSYNC RR. See RFC 7477. +type CSYNC struct { + Hdr RR_Header + Serial uint32 + Flags uint16 + TypeBitMap []uint16 `dns:"nsec"` +} + +func (rr *CSYNC) String() string { + s := rr.Hdr.String() + strconv.FormatInt(int64(rr.Serial), 10) + " " + strconv.Itoa(int(rr.Flags)) + + for i := 0; i < len(rr.TypeBitMap); i++ { + s += " " + Type(rr.TypeBitMap[i]).String() + } + return s +} + +func (rr *CSYNC) len() int { + l := rr.Hdr.len() + 4 + 2 + lastwindow := uint32(2 ^ 32 + 1) + for _, t := range rr.TypeBitMap { + window := t / 256 + if uint32(window) != lastwindow { + l += 1 + 32 + } + lastwindow = uint32(window) + } + return l +} + +// TimeToString translates the RRSIG's incep. and expir. times to the +// string representation used when printing the record. +// It takes serial arithmetic (RFC 1982) into account. +func TimeToString(t uint32) string { + mod := (int64(t)-time.Now().Unix())/year68 - 1 + if mod < 0 { + mod = 0 + } + ti := time.Unix(int64(t)-mod*year68, 0).UTC() + return ti.Format("20060102150405") +} + +// StringToTime translates the RRSIG's incep. and expir. times from +// string values like "20110403154150" to an 32 bit integer. +// It takes serial arithmetic (RFC 1982) into account. +func StringToTime(s string) (uint32, error) { + t, err := time.Parse("20060102150405", s) + if err != nil { + return 0, err + } + mod := t.Unix()/year68 - 1 + if mod < 0 { + mod = 0 + } + return uint32(t.Unix() - mod*year68), nil +} + +// saltToString converts a NSECX salt to uppercase and returns "-" when it is empty. +func saltToString(s string) string { + if len(s) == 0 { + return "-" + } + return strings.ToUpper(s) +} + +func euiToString(eui uint64, bits int) (hex string) { + switch bits { + case 64: + hex = fmt.Sprintf("%16.16x", eui) + hex = hex[0:2] + "-" + hex[2:4] + "-" + hex[4:6] + "-" + hex[6:8] + + "-" + hex[8:10] + "-" + hex[10:12] + "-" + hex[12:14] + "-" + hex[14:16] + case 48: + hex = fmt.Sprintf("%12.12x", eui) + hex = hex[0:2] + "-" + hex[2:4] + "-" + hex[4:6] + "-" + hex[6:8] + + "-" + hex[8:10] + "-" + hex[10:12] + } + return +} + +// copyIP returns a copy of ip. +func copyIP(ip net.IP) net.IP { + p := make(net.IP, len(ip)) + copy(p, ip) + return p +} + +// SplitN splits a string into N sized string chunks. +// This might become an exported function once. +func splitN(s string, n int) []string { + if len(s) < n { + return []string{s} + } + sx := []string{} + p, i := 0, n + for { + if i <= len(s) { + sx = append(sx, s[p:i]) + } else { + sx = append(sx, s[p:]) + break + + } + p, i = p+n, i+n + } + + return sx +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/types_generate.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/types_generate.go new file mode 100644 index 00000000000..b8db4f361cd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/types_generate.go @@ -0,0 +1,272 @@ +//+build ignore + +// types_generate.go is meant to run with go generate. It will use +// go/{importer,types} to track down all the RR struct types. Then for each type +// it will generate conversion tables (TypeToRR and TypeToString) and banal +// methods (len, Header, copy) based on the struct tags. The generated source is +// written to ztypes.go, and is meant to be checked into git. +package main + +import ( + "bytes" + "fmt" + "go/format" + "go/importer" + "go/types" + "log" + "os" + "strings" + "text/template" +) + +var skipLen = map[string]struct{}{ + "NSEC": {}, + "NSEC3": {}, + "OPT": {}, + "CSYNC": {}, +} + +var packageHdr = ` +// Code generated by "go run types_generate.go"; DO NOT EDIT. + +package dns + +import ( + "encoding/base64" + "net" +) + +` + +var TypeToRR = template.Must(template.New("TypeToRR").Parse(` +// TypeToRR is a map of constructors for each RR type. +var TypeToRR = map[uint16]func() RR{ +{{range .}}{{if ne . "RFC3597"}} Type{{.}}: func() RR { return new({{.}}) }, +{{end}}{{end}} } + +`)) + +var typeToString = template.Must(template.New("typeToString").Parse(` +// TypeToString is a map of strings for each RR type. +var TypeToString = map[uint16]string{ +{{range .}}{{if ne . "NSAPPTR"}} Type{{.}}: "{{.}}", +{{end}}{{end}} TypeNSAPPTR: "NSAP-PTR", +} + +`)) + +var headerFunc = template.Must(template.New("headerFunc").Parse(` +{{range .}} func (rr *{{.}}) Header() *RR_Header { return &rr.Hdr } +{{end}} + +`)) + +// getTypeStruct will take a type and the package scope, and return the +// (innermost) struct if the type is considered a RR type (currently defined as +// those structs beginning with a RR_Header, could be redefined as implementing +// the RR interface). The bool return value indicates if embedded structs were +// resolved. +func getTypeStruct(t types.Type, scope *types.Scope) (*types.Struct, bool) { + st, ok := t.Underlying().(*types.Struct) + if !ok { + return nil, false + } + if st.Field(0).Type() == scope.Lookup("RR_Header").Type() { + return st, false + } + if st.Field(0).Anonymous() { + st, _ := getTypeStruct(st.Field(0).Type(), scope) + return st, true + } + return nil, false +} + +func main() { + // Import and type-check the package + pkg, err := importer.Default().Import("github.com/miekg/dns") + fatalIfErr(err) + scope := pkg.Scope() + + // Collect constants like TypeX + var numberedTypes []string + for _, name := range scope.Names() { + o := scope.Lookup(name) + if o == nil || !o.Exported() { + continue + } + b, ok := o.Type().(*types.Basic) + if !ok || b.Kind() != types.Uint16 { + continue + } + if !strings.HasPrefix(o.Name(), "Type") { + continue + } + name := strings.TrimPrefix(o.Name(), "Type") + if name == "PrivateRR" { + continue + } + numberedTypes = append(numberedTypes, name) + } + + // Collect actual types (*X) + var namedTypes []string + for _, name := range scope.Names() { + o := scope.Lookup(name) + if o == nil || !o.Exported() { + continue + } + if st, _ := getTypeStruct(o.Type(), scope); st == nil { + continue + } + if name == "PrivateRR" { + continue + } + + // Check if corresponding TypeX exists + if scope.Lookup("Type"+o.Name()) == nil && o.Name() != "RFC3597" { + log.Fatalf("Constant Type%s does not exist.", o.Name()) + } + + namedTypes = append(namedTypes, o.Name()) + } + + b := &bytes.Buffer{} + b.WriteString(packageHdr) + + // Generate TypeToRR + fatalIfErr(TypeToRR.Execute(b, namedTypes)) + + // Generate typeToString + fatalIfErr(typeToString.Execute(b, numberedTypes)) + + // Generate headerFunc + fatalIfErr(headerFunc.Execute(b, namedTypes)) + + // Generate len() + fmt.Fprint(b, "// len() functions\n") + for _, name := range namedTypes { + if _, ok := skipLen[name]; ok { + continue + } + o := scope.Lookup(name) + st, isEmbedded := getTypeStruct(o.Type(), scope) + if isEmbedded { + continue + } + fmt.Fprintf(b, "func (rr *%s) len() int {\n", name) + fmt.Fprintf(b, "l := rr.Hdr.len()\n") + for i := 1; i < st.NumFields(); i++ { + o := func(s string) { fmt.Fprintf(b, s, st.Field(i).Name()) } + + if _, ok := st.Field(i).Type().(*types.Slice); ok { + switch st.Tag(i) { + case `dns:"-"`: + // ignored + case `dns:"cdomain-name"`, `dns:"domain-name"`, `dns:"txt"`: + o("for _, x := range rr.%s { l += len(x) + 1 }\n") + default: + log.Fatalln(name, st.Field(i).Name(), st.Tag(i)) + } + continue + } + + switch { + case st.Tag(i) == `dns:"-"`: + // ignored + case st.Tag(i) == `dns:"cdomain-name"`, st.Tag(i) == `dns:"domain-name"`: + o("l += len(rr.%s) + 1\n") + case st.Tag(i) == `dns:"octet"`: + o("l += len(rr.%s)\n") + case strings.HasPrefix(st.Tag(i), `dns:"size-base64`): + fallthrough + case st.Tag(i) == `dns:"base64"`: + o("l += base64.StdEncoding.DecodedLen(len(rr.%s))\n") + case strings.HasPrefix(st.Tag(i), `dns:"size-hex:`): // this has an extra field where the length is stored + o("l += len(rr.%s)/2\n") + case strings.HasPrefix(st.Tag(i), `dns:"size-hex`): + fallthrough + case st.Tag(i) == `dns:"hex"`: + o("l += len(rr.%s)/2 + 1\n") + case st.Tag(i) == `dns:"a"`: + o("l += net.IPv4len // %s\n") + case st.Tag(i) == `dns:"aaaa"`: + o("l += net.IPv6len // %s\n") + case st.Tag(i) == `dns:"txt"`: + o("for _, t := range rr.%s { l += len(t) + 1 }\n") + case st.Tag(i) == `dns:"uint48"`: + o("l += 6 // %s\n") + case st.Tag(i) == "": + switch st.Field(i).Type().(*types.Basic).Kind() { + case types.Uint8: + o("l++ // %s\n") + case types.Uint16: + o("l += 2 // %s\n") + case types.Uint32: + o("l += 4 // %s\n") + case types.Uint64: + o("l += 8 // %s\n") + case types.String: + o("l += len(rr.%s) + 1\n") + default: + log.Fatalln(name, st.Field(i).Name()) + } + default: + log.Fatalln(name, st.Field(i).Name(), st.Tag(i)) + } + } + fmt.Fprintf(b, "return l }\n") + } + + // Generate copy() + fmt.Fprint(b, "// copy() functions\n") + for _, name := range namedTypes { + o := scope.Lookup(name) + st, isEmbedded := getTypeStruct(o.Type(), scope) + if isEmbedded { + continue + } + fmt.Fprintf(b, "func (rr *%s) copy() RR {\n", name) + fields := []string{"rr.Hdr"} + for i := 1; i < st.NumFields(); i++ { + f := st.Field(i).Name() + if sl, ok := st.Field(i).Type().(*types.Slice); ok { + t := sl.Underlying().String() + t = strings.TrimPrefix(t, "[]") + if strings.Contains(t, ".") { + splits := strings.Split(t, ".") + t = splits[len(splits)-1] + } + fmt.Fprintf(b, "%s := make([]%s, len(rr.%s)); copy(%s, rr.%s)\n", + f, t, f, f, f) + fields = append(fields, f) + continue + } + if st.Field(i).Type().String() == "net.IP" { + fields = append(fields, "copyIP(rr."+f+")") + continue + } + fields = append(fields, "rr."+f) + } + fmt.Fprintf(b, "return &%s{%s}\n", name, strings.Join(fields, ",")) + fmt.Fprintf(b, "}\n") + } + + // gofmt + res, err := format.Source(b.Bytes()) + if err != nil { + b.WriteTo(os.Stderr) + log.Fatal(err) + } + + // write result + f, err := os.Create("ztypes.go") + fatalIfErr(err) + defer f.Close() + f.Write(res) +} + +func fatalIfErr(err error) { + if err != nil { + log.Fatal(err) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/udp.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/udp.go new file mode 100644 index 00000000000..a4826ee2ffd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/udp.go @@ -0,0 +1,102 @@ +// +build !windows + +package dns + +import ( + "net" + + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" +) + +// This is the required size of the OOB buffer to pass to ReadMsgUDP. +var udpOOBSize = func() int { + // We can't know whether we'll get an IPv4 control message or an + // IPv6 control message ahead of time. To get around this, we size + // the buffer equal to the largest of the two. + + oob4 := ipv4.NewControlMessage(ipv4.FlagDst | ipv4.FlagInterface) + oob6 := ipv6.NewControlMessage(ipv6.FlagDst | ipv6.FlagInterface) + + if len(oob4) > len(oob6) { + return len(oob4) + } + + return len(oob6) +}() + +// SessionUDP holds the remote address and the associated +// out-of-band data. +type SessionUDP struct { + raddr *net.UDPAddr + context []byte +} + +// RemoteAddr returns the remote network address. +func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr } + +// ReadFromSessionUDP acts just like net.UDPConn.ReadFrom(), but returns a session object instead of a +// net.UDPAddr. +func ReadFromSessionUDP(conn *net.UDPConn, b []byte) (int, *SessionUDP, error) { + oob := make([]byte, udpOOBSize) + n, oobn, _, raddr, err := conn.ReadMsgUDP(b, oob) + if err != nil { + return n, nil, err + } + return n, &SessionUDP{raddr, oob[:oobn]}, err +} + +// WriteToSessionUDP acts just like net.UDPConn.WriteTo(), but uses a *SessionUDP instead of a net.Addr. +func WriteToSessionUDP(conn *net.UDPConn, b []byte, session *SessionUDP) (int, error) { + oob := correctSource(session.context) + n, _, err := conn.WriteMsgUDP(b, oob, session.raddr) + return n, err +} + +func setUDPSocketOptions(conn *net.UDPConn) error { + // Try setting the flags for both families and ignore the errors unless they + // both error. + err6 := ipv6.NewPacketConn(conn).SetControlMessage(ipv6.FlagDst|ipv6.FlagInterface, true) + err4 := ipv4.NewPacketConn(conn).SetControlMessage(ipv4.FlagDst|ipv4.FlagInterface, true) + if err6 != nil && err4 != nil { + return err4 + } + return nil +} + +// parseDstFromOOB takes oob data and returns the destination IP. +func parseDstFromOOB(oob []byte) net.IP { + // Start with IPv6 and then fallback to IPv4 + // TODO(fastest963): Figure out a way to prefer one or the other. Looking at + // the lvl of the header for a 0 or 41 isn't cross-platform. + cm6 := new(ipv6.ControlMessage) + if cm6.Parse(oob) == nil && cm6.Dst != nil { + return cm6.Dst + } + cm4 := new(ipv4.ControlMessage) + if cm4.Parse(oob) == nil && cm4.Dst != nil { + return cm4.Dst + } + return nil +} + +// correctSource takes oob data and returns new oob data with the Src equal to the Dst +func correctSource(oob []byte) []byte { + dst := parseDstFromOOB(oob) + if dst == nil { + return nil + } + // If the dst is definitely an IPv6, then use ipv6's ControlMessage to + // respond otherwise use ipv4's because ipv6's marshal ignores ipv4 + // addresses. + if dst.To4() == nil { + cm := new(ipv6.ControlMessage) + cm.Src = dst + oob = cm.Marshal() + } else { + cm := new(ipv4.ControlMessage) + cm.Src = dst + oob = cm.Marshal() + } + return oob +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/udp_windows.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/udp_windows.go new file mode 100644 index 00000000000..6778c3c6cfe --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/udp_windows.go @@ -0,0 +1,37 @@ +// +build windows + +package dns + +import "net" + +// SessionUDP holds the remote address +type SessionUDP struct { + raddr *net.UDPAddr +} + +// RemoteAddr returns the remote network address. +func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr } + +// ReadFromSessionUDP acts just like net.UDPConn.ReadFrom(), but returns a session object instead of a +// net.UDPAddr. +// TODO(fastest963): Once go1.10 is released, use ReadMsgUDP. +func ReadFromSessionUDP(conn *net.UDPConn, b []byte) (int, *SessionUDP, error) { + n, raddr, err := conn.ReadFrom(b) + if err != nil { + return n, nil, err + } + session := &SessionUDP{raddr.(*net.UDPAddr)} + return n, session, err +} + +// WriteToSessionUDP acts just like net.UDPConn.WriteTo(), but uses a *SessionUDP instead of a net.Addr. +// TODO(fastest963): Once go1.10 is released, use WriteMsgUDP. +func WriteToSessionUDP(conn *net.UDPConn, b []byte, session *SessionUDP) (int, error) { + n, err := conn.WriteTo(b, session.raddr) + return n, err +} + +// TODO(fastest963): Once go1.10 is released and we can use *MsgUDP methods +// use the standard method in udp.go for these. +func setUDPSocketOptions(*net.UDPConn) error { return nil } +func parseDstFromOOB([]byte, net.IP) net.IP { return nil } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/update.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/update.go new file mode 100644 index 00000000000..e90c5c968ec --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/update.go @@ -0,0 +1,106 @@ +package dns + +// NameUsed sets the RRs in the prereq section to +// "Name is in use" RRs. RFC 2136 section 2.4.4. +func (u *Msg) NameUsed(rr []RR) { + if u.Answer == nil { + u.Answer = make([]RR, 0, len(rr)) + } + for _, r := range rr { + u.Answer = append(u.Answer, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassANY}}) + } +} + +// NameNotUsed sets the RRs in the prereq section to +// "Name is in not use" RRs. RFC 2136 section 2.4.5. +func (u *Msg) NameNotUsed(rr []RR) { + if u.Answer == nil { + u.Answer = make([]RR, 0, len(rr)) + } + for _, r := range rr { + u.Answer = append(u.Answer, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassNONE}}) + } +} + +// Used sets the RRs in the prereq section to +// "RRset exists (value dependent -- with rdata)" RRs. RFC 2136 section 2.4.2. +func (u *Msg) Used(rr []RR) { + if len(u.Question) == 0 { + panic("dns: empty question section") + } + if u.Answer == nil { + u.Answer = make([]RR, 0, len(rr)) + } + for _, r := range rr { + r.Header().Class = u.Question[0].Qclass + u.Answer = append(u.Answer, r) + } +} + +// RRsetUsed sets the RRs in the prereq section to +// "RRset exists (value independent -- no rdata)" RRs. RFC 2136 section 2.4.1. +func (u *Msg) RRsetUsed(rr []RR) { + if u.Answer == nil { + u.Answer = make([]RR, 0, len(rr)) + } + for _, r := range rr { + u.Answer = append(u.Answer, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: r.Header().Rrtype, Class: ClassANY}}) + } +} + +// RRsetNotUsed sets the RRs in the prereq section to +// "RRset does not exist" RRs. RFC 2136 section 2.4.3. +func (u *Msg) RRsetNotUsed(rr []RR) { + if u.Answer == nil { + u.Answer = make([]RR, 0, len(rr)) + } + for _, r := range rr { + u.Answer = append(u.Answer, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: r.Header().Rrtype, Class: ClassNONE}}) + } +} + +// Insert creates a dynamic update packet that adds an complete RRset, see RFC 2136 section 2.5.1. +func (u *Msg) Insert(rr []RR) { + if len(u.Question) == 0 { + panic("dns: empty question section") + } + if u.Ns == nil { + u.Ns = make([]RR, 0, len(rr)) + } + for _, r := range rr { + r.Header().Class = u.Question[0].Qclass + u.Ns = append(u.Ns, r) + } +} + +// RemoveRRset creates a dynamic update packet that deletes an RRset, see RFC 2136 section 2.5.2. +func (u *Msg) RemoveRRset(rr []RR) { + if u.Ns == nil { + u.Ns = make([]RR, 0, len(rr)) + } + for _, r := range rr { + u.Ns = append(u.Ns, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: r.Header().Rrtype, Class: ClassANY}}) + } +} + +// RemoveName creates a dynamic update packet that deletes all RRsets of a name, see RFC 2136 section 2.5.3 +func (u *Msg) RemoveName(rr []RR) { + if u.Ns == nil { + u.Ns = make([]RR, 0, len(rr)) + } + for _, r := range rr { + u.Ns = append(u.Ns, &ANY{Hdr: RR_Header{Name: r.Header().Name, Ttl: 0, Rrtype: TypeANY, Class: ClassANY}}) + } +} + +// Remove creates a dynamic update packet deletes RR from a RRSset, see RFC 2136 section 2.5.4 +func (u *Msg) Remove(rr []RR) { + if u.Ns == nil { + u.Ns = make([]RR, 0, len(rr)) + } + for _, r := range rr { + r.Header().Class = ClassNONE + r.Header().Ttl = 0 + u.Ns = append(u.Ns, r) + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/version.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/version.go new file mode 100644 index 00000000000..0b0e9b6d831 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/version.go @@ -0,0 +1,15 @@ +package dns + +import "fmt" + +// Version is current version of this library. +var Version = V{1, 0, 14} + +// V holds the version of this library. +type V struct { + Major, Minor, Patch int +} + +func (v V) String() string { + return fmt.Sprintf("%d.%d.%d", v.Major, v.Minor, v.Patch) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/xfr.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/xfr.go new file mode 100644 index 00000000000..5d0ff5c8a27 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/xfr.go @@ -0,0 +1,260 @@ +package dns + +import ( + "fmt" + "time" +) + +// Envelope is used when doing a zone transfer with a remote server. +type Envelope struct { + RR []RR // The set of RRs in the answer section of the xfr reply message. + Error error // If something went wrong, this contains the error. +} + +// A Transfer defines parameters that are used during a zone transfer. +type Transfer struct { + *Conn + DialTimeout time.Duration // net.DialTimeout, defaults to 2 seconds + ReadTimeout time.Duration // net.Conn.SetReadTimeout value for connections, defaults to 2 seconds + WriteTimeout time.Duration // net.Conn.SetWriteTimeout value for connections, defaults to 2 seconds + TsigSecret map[string]string // Secret(s) for Tsig map[], zonename must be in canonical form (lowercase, fqdn, see RFC 4034 Section 6.2) + tsigTimersOnly bool +} + +// Think we need to away to stop the transfer + +// In performs an incoming transfer with the server in a. +// If you would like to set the source IP, or some other attribute +// of a Dialer for a Transfer, you can do so by specifying the attributes +// in the Transfer.Conn: +// +// d := net.Dialer{LocalAddr: transfer_source} +// con, err := d.Dial("tcp", master) +// dnscon := &dns.Conn{Conn:con} +// transfer = &dns.Transfer{Conn: dnscon} +// channel, err := transfer.In(message, master) +// +func (t *Transfer) In(q *Msg, a string) (env chan *Envelope, err error) { + timeout := dnsTimeout + if t.DialTimeout != 0 { + timeout = t.DialTimeout + } + if t.Conn == nil { + t.Conn, err = DialTimeout("tcp", a, timeout) + if err != nil { + return nil, err + } + } + if err := t.WriteMsg(q); err != nil { + return nil, err + } + env = make(chan *Envelope) + go func() { + if q.Question[0].Qtype == TypeAXFR { + go t.inAxfr(q, env) + return + } + if q.Question[0].Qtype == TypeIXFR { + go t.inIxfr(q, env) + return + } + }() + return env, nil +} + +func (t *Transfer) inAxfr(q *Msg, c chan *Envelope) { + first := true + defer t.Close() + defer close(c) + timeout := dnsTimeout + if t.ReadTimeout != 0 { + timeout = t.ReadTimeout + } + for { + t.Conn.SetReadDeadline(time.Now().Add(timeout)) + in, err := t.ReadMsg() + if err != nil { + c <- &Envelope{nil, err} + return + } + if q.Id != in.Id { + c <- &Envelope{in.Answer, ErrId} + return + } + if first { + if in.Rcode != RcodeSuccess { + c <- &Envelope{in.Answer, &Error{err: fmt.Sprintf(errXFR, in.Rcode)}} + return + } + if !isSOAFirst(in) { + c <- &Envelope{in.Answer, ErrSoa} + return + } + first = !first + // only one answer that is SOA, receive more + if len(in.Answer) == 1 { + t.tsigTimersOnly = true + c <- &Envelope{in.Answer, nil} + continue + } + } + + if !first { + t.tsigTimersOnly = true // Subsequent envelopes use this. + if isSOALast(in) { + c <- &Envelope{in.Answer, nil} + return + } + c <- &Envelope{in.Answer, nil} + } + } +} + +func (t *Transfer) inIxfr(q *Msg, c chan *Envelope) { + serial := uint32(0) // The first serial seen is the current server serial + axfr := true + n := 0 + qser := q.Ns[0].(*SOA).Serial + defer t.Close() + defer close(c) + timeout := dnsTimeout + if t.ReadTimeout != 0 { + timeout = t.ReadTimeout + } + for { + t.SetReadDeadline(time.Now().Add(timeout)) + in, err := t.ReadMsg() + if err != nil { + c <- &Envelope{nil, err} + return + } + if q.Id != in.Id { + c <- &Envelope{in.Answer, ErrId} + return + } + if in.Rcode != RcodeSuccess { + c <- &Envelope{in.Answer, &Error{err: fmt.Sprintf(errXFR, in.Rcode)}} + return + } + if n == 0 { + // Check if the returned answer is ok + if !isSOAFirst(in) { + c <- &Envelope{in.Answer, ErrSoa} + return + } + // This serial is important + serial = in.Answer[0].(*SOA).Serial + // Check if there are no changes in zone + if qser >= serial { + c <- &Envelope{in.Answer, nil} + return + } + } + // Now we need to check each message for SOA records, to see what we need to do + t.tsigTimersOnly = true + for _, rr := range in.Answer { + if v, ok := rr.(*SOA); ok { + if v.Serial == serial { + n++ + // quit if it's a full axfr or the the servers' SOA is repeated the third time + if axfr && n == 2 || n == 3 { + c <- &Envelope{in.Answer, nil} + return + } + } else if axfr { + // it's an ixfr + axfr = false + } + } + } + c <- &Envelope{in.Answer, nil} + } +} + +// Out performs an outgoing transfer with the client connecting in w. +// Basic use pattern: +// +// ch := make(chan *dns.Envelope) +// tr := new(dns.Transfer) +// go tr.Out(w, r, ch) +// ch <- &dns.Envelope{RR: []dns.RR{soa, rr1, rr2, rr3, soa}} +// close(ch) +// w.Hijack() +// // w.Close() // Client closes connection +// +// The server is responsible for sending the correct sequence of RRs through the +// channel ch. +func (t *Transfer) Out(w ResponseWriter, q *Msg, ch chan *Envelope) error { + for x := range ch { + r := new(Msg) + // Compress? + r.SetReply(q) + r.Authoritative = true + // assume it fits TODO(miek): fix + r.Answer = append(r.Answer, x.RR...) + if err := w.WriteMsg(r); err != nil { + return err + } + } + w.TsigTimersOnly(true) + return nil +} + +// ReadMsg reads a message from the transfer connection t. +func (t *Transfer) ReadMsg() (*Msg, error) { + m := new(Msg) + p := make([]byte, MaxMsgSize) + n, err := t.Read(p) + if err != nil && n == 0 { + return nil, err + } + p = p[:n] + if err := m.Unpack(p); err != nil { + return nil, err + } + if ts := m.IsTsig(); ts != nil && t.TsigSecret != nil { + if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok { + return m, ErrSecret + } + // Need to work on the original message p, as that was used to calculate the tsig. + err = TsigVerify(p, t.TsigSecret[ts.Hdr.Name], t.tsigRequestMAC, t.tsigTimersOnly) + t.tsigRequestMAC = ts.MAC + } + return m, err +} + +// WriteMsg writes a message through the transfer connection t. +func (t *Transfer) WriteMsg(m *Msg) (err error) { + var out []byte + if ts := m.IsTsig(); ts != nil && t.TsigSecret != nil { + if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok { + return ErrSecret + } + out, t.tsigRequestMAC, err = TsigGenerate(m, t.TsigSecret[ts.Hdr.Name], t.tsigRequestMAC, t.tsigTimersOnly) + } else { + out, err = m.Pack() + } + if err != nil { + return err + } + if _, err = t.Write(out); err != nil { + return err + } + return nil +} + +func isSOAFirst(in *Msg) bool { + if len(in.Answer) > 0 { + return in.Answer[0].Header().Rrtype == TypeSOA + } + return false +} + +func isSOALast(in *Msg) bool { + if len(in.Answer) > 0 { + return in.Answer[len(in.Answer)-1].Header().Rrtype == TypeSOA + } + return false +} + +const errXFR = "bad xfr rcode: %d" diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zcompress.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zcompress.go new file mode 100644 index 00000000000..6391a3501fc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zcompress.go @@ -0,0 +1,152 @@ +// Code generated by "go run compress_generate.go"; DO NOT EDIT. + +package dns + +func compressionLenHelperType(c map[string]int, r RR, initLen int) int { + currentLen := initLen + switch x := r.(type) { + case *AFSDB: + currentLen -= len(x.Hostname) + 1 + currentLen += compressionLenHelper(c, x.Hostname, currentLen) + case *CNAME: + currentLen -= len(x.Target) + 1 + currentLen += compressionLenHelper(c, x.Target, currentLen) + case *DNAME: + currentLen -= len(x.Target) + 1 + currentLen += compressionLenHelper(c, x.Target, currentLen) + case *HIP: + for i := range x.RendezvousServers { + currentLen -= len(x.RendezvousServers[i]) + 1 + } + for i := range x.RendezvousServers { + currentLen += compressionLenHelper(c, x.RendezvousServers[i], currentLen) + } + case *KX: + currentLen -= len(x.Exchanger) + 1 + currentLen += compressionLenHelper(c, x.Exchanger, currentLen) + case *LP: + currentLen -= len(x.Fqdn) + 1 + currentLen += compressionLenHelper(c, x.Fqdn, currentLen) + case *MB: + currentLen -= len(x.Mb) + 1 + currentLen += compressionLenHelper(c, x.Mb, currentLen) + case *MD: + currentLen -= len(x.Md) + 1 + currentLen += compressionLenHelper(c, x.Md, currentLen) + case *MF: + currentLen -= len(x.Mf) + 1 + currentLen += compressionLenHelper(c, x.Mf, currentLen) + case *MG: + currentLen -= len(x.Mg) + 1 + currentLen += compressionLenHelper(c, x.Mg, currentLen) + case *MINFO: + currentLen -= len(x.Rmail) + 1 + currentLen += compressionLenHelper(c, x.Rmail, currentLen) + currentLen -= len(x.Email) + 1 + currentLen += compressionLenHelper(c, x.Email, currentLen) + case *MR: + currentLen -= len(x.Mr) + 1 + currentLen += compressionLenHelper(c, x.Mr, currentLen) + case *MX: + currentLen -= len(x.Mx) + 1 + currentLen += compressionLenHelper(c, x.Mx, currentLen) + case *NAPTR: + currentLen -= len(x.Replacement) + 1 + currentLen += compressionLenHelper(c, x.Replacement, currentLen) + case *NS: + currentLen -= len(x.Ns) + 1 + currentLen += compressionLenHelper(c, x.Ns, currentLen) + case *NSAPPTR: + currentLen -= len(x.Ptr) + 1 + currentLen += compressionLenHelper(c, x.Ptr, currentLen) + case *NSEC: + currentLen -= len(x.NextDomain) + 1 + currentLen += compressionLenHelper(c, x.NextDomain, currentLen) + case *PTR: + currentLen -= len(x.Ptr) + 1 + currentLen += compressionLenHelper(c, x.Ptr, currentLen) + case *PX: + currentLen -= len(x.Map822) + 1 + currentLen += compressionLenHelper(c, x.Map822, currentLen) + currentLen -= len(x.Mapx400) + 1 + currentLen += compressionLenHelper(c, x.Mapx400, currentLen) + case *RP: + currentLen -= len(x.Mbox) + 1 + currentLen += compressionLenHelper(c, x.Mbox, currentLen) + currentLen -= len(x.Txt) + 1 + currentLen += compressionLenHelper(c, x.Txt, currentLen) + case *RRSIG: + currentLen -= len(x.SignerName) + 1 + currentLen += compressionLenHelper(c, x.SignerName, currentLen) + case *RT: + currentLen -= len(x.Host) + 1 + currentLen += compressionLenHelper(c, x.Host, currentLen) + case *SIG: + currentLen -= len(x.SignerName) + 1 + currentLen += compressionLenHelper(c, x.SignerName, currentLen) + case *SOA: + currentLen -= len(x.Ns) + 1 + currentLen += compressionLenHelper(c, x.Ns, currentLen) + currentLen -= len(x.Mbox) + 1 + currentLen += compressionLenHelper(c, x.Mbox, currentLen) + case *SRV: + currentLen -= len(x.Target) + 1 + currentLen += compressionLenHelper(c, x.Target, currentLen) + case *TALINK: + currentLen -= len(x.PreviousName) + 1 + currentLen += compressionLenHelper(c, x.PreviousName, currentLen) + currentLen -= len(x.NextName) + 1 + currentLen += compressionLenHelper(c, x.NextName, currentLen) + case *TKEY: + currentLen -= len(x.Algorithm) + 1 + currentLen += compressionLenHelper(c, x.Algorithm, currentLen) + case *TSIG: + currentLen -= len(x.Algorithm) + 1 + currentLen += compressionLenHelper(c, x.Algorithm, currentLen) + } + return currentLen - initLen +} + +func compressionLenSearchType(c map[string]int, r RR) (int, bool, int) { + switch x := r.(type) { + case *CNAME: + k1, ok1, sz1 := compressionLenSearch(c, x.Target) + return k1, ok1, sz1 + case *MB: + k1, ok1, sz1 := compressionLenSearch(c, x.Mb) + return k1, ok1, sz1 + case *MD: + k1, ok1, sz1 := compressionLenSearch(c, x.Md) + return k1, ok1, sz1 + case *MF: + k1, ok1, sz1 := compressionLenSearch(c, x.Mf) + return k1, ok1, sz1 + case *MG: + k1, ok1, sz1 := compressionLenSearch(c, x.Mg) + return k1, ok1, sz1 + case *MINFO: + k1, ok1, sz1 := compressionLenSearch(c, x.Rmail) + k2, ok2, sz2 := compressionLenSearch(c, x.Email) + return k1 + k2, ok1 && ok2, sz1 + sz2 + case *MR: + k1, ok1, sz1 := compressionLenSearch(c, x.Mr) + return k1, ok1, sz1 + case *MX: + k1, ok1, sz1 := compressionLenSearch(c, x.Mx) + return k1, ok1, sz1 + case *NS: + k1, ok1, sz1 := compressionLenSearch(c, x.Ns) + return k1, ok1, sz1 + case *PTR: + k1, ok1, sz1 := compressionLenSearch(c, x.Ptr) + return k1, ok1, sz1 + case *RT: + k1, ok1, sz1 := compressionLenSearch(c, x.Host) + return k1, ok1, sz1 + case *SOA: + k1, ok1, sz1 := compressionLenSearch(c, x.Ns) + k2, ok2, sz2 := compressionLenSearch(c, x.Mbox) + return k1 + k2, ok1 && ok2, sz1 + sz2 + } + return 0, false, 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zduplicate.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zduplicate.go new file mode 100644 index 00000000000..ba9863b233f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zduplicate.go @@ -0,0 +1,943 @@ +// Code generated by "go run duplicate_generate.go"; DO NOT EDIT. + +package dns + +// isDuplicateRdata calls the rdata specific functions +func isDuplicateRdata(r1, r2 RR) bool { + switch r1.Header().Rrtype { + case TypeA: + return isDuplicateA(r1.(*A), r2.(*A)) + case TypeAAAA: + return isDuplicateAAAA(r1.(*AAAA), r2.(*AAAA)) + case TypeAFSDB: + return isDuplicateAFSDB(r1.(*AFSDB), r2.(*AFSDB)) + case TypeAVC: + return isDuplicateAVC(r1.(*AVC), r2.(*AVC)) + case TypeCAA: + return isDuplicateCAA(r1.(*CAA), r2.(*CAA)) + case TypeCERT: + return isDuplicateCERT(r1.(*CERT), r2.(*CERT)) + case TypeCNAME: + return isDuplicateCNAME(r1.(*CNAME), r2.(*CNAME)) + case TypeCSYNC: + return isDuplicateCSYNC(r1.(*CSYNC), r2.(*CSYNC)) + case TypeDHCID: + return isDuplicateDHCID(r1.(*DHCID), r2.(*DHCID)) + case TypeDNAME: + return isDuplicateDNAME(r1.(*DNAME), r2.(*DNAME)) + case TypeDNSKEY: + return isDuplicateDNSKEY(r1.(*DNSKEY), r2.(*DNSKEY)) + case TypeDS: + return isDuplicateDS(r1.(*DS), r2.(*DS)) + case TypeEID: + return isDuplicateEID(r1.(*EID), r2.(*EID)) + case TypeEUI48: + return isDuplicateEUI48(r1.(*EUI48), r2.(*EUI48)) + case TypeEUI64: + return isDuplicateEUI64(r1.(*EUI64), r2.(*EUI64)) + case TypeGID: + return isDuplicateGID(r1.(*GID), r2.(*GID)) + case TypeGPOS: + return isDuplicateGPOS(r1.(*GPOS), r2.(*GPOS)) + case TypeHINFO: + return isDuplicateHINFO(r1.(*HINFO), r2.(*HINFO)) + case TypeHIP: + return isDuplicateHIP(r1.(*HIP), r2.(*HIP)) + case TypeKX: + return isDuplicateKX(r1.(*KX), r2.(*KX)) + case TypeL32: + return isDuplicateL32(r1.(*L32), r2.(*L32)) + case TypeL64: + return isDuplicateL64(r1.(*L64), r2.(*L64)) + case TypeLOC: + return isDuplicateLOC(r1.(*LOC), r2.(*LOC)) + case TypeLP: + return isDuplicateLP(r1.(*LP), r2.(*LP)) + case TypeMB: + return isDuplicateMB(r1.(*MB), r2.(*MB)) + case TypeMD: + return isDuplicateMD(r1.(*MD), r2.(*MD)) + case TypeMF: + return isDuplicateMF(r1.(*MF), r2.(*MF)) + case TypeMG: + return isDuplicateMG(r1.(*MG), r2.(*MG)) + case TypeMINFO: + return isDuplicateMINFO(r1.(*MINFO), r2.(*MINFO)) + case TypeMR: + return isDuplicateMR(r1.(*MR), r2.(*MR)) + case TypeMX: + return isDuplicateMX(r1.(*MX), r2.(*MX)) + case TypeNAPTR: + return isDuplicateNAPTR(r1.(*NAPTR), r2.(*NAPTR)) + case TypeNID: + return isDuplicateNID(r1.(*NID), r2.(*NID)) + case TypeNIMLOC: + return isDuplicateNIMLOC(r1.(*NIMLOC), r2.(*NIMLOC)) + case TypeNINFO: + return isDuplicateNINFO(r1.(*NINFO), r2.(*NINFO)) + case TypeNS: + return isDuplicateNS(r1.(*NS), r2.(*NS)) + case TypeNSAPPTR: + return isDuplicateNSAPPTR(r1.(*NSAPPTR), r2.(*NSAPPTR)) + case TypeNSEC: + return isDuplicateNSEC(r1.(*NSEC), r2.(*NSEC)) + case TypeNSEC3: + return isDuplicateNSEC3(r1.(*NSEC3), r2.(*NSEC3)) + case TypeNSEC3PARAM: + return isDuplicateNSEC3PARAM(r1.(*NSEC3PARAM), r2.(*NSEC3PARAM)) + case TypeOPENPGPKEY: + return isDuplicateOPENPGPKEY(r1.(*OPENPGPKEY), r2.(*OPENPGPKEY)) + case TypePTR: + return isDuplicatePTR(r1.(*PTR), r2.(*PTR)) + case TypePX: + return isDuplicatePX(r1.(*PX), r2.(*PX)) + case TypeRKEY: + return isDuplicateRKEY(r1.(*RKEY), r2.(*RKEY)) + case TypeRP: + return isDuplicateRP(r1.(*RP), r2.(*RP)) + case TypeRRSIG: + return isDuplicateRRSIG(r1.(*RRSIG), r2.(*RRSIG)) + case TypeRT: + return isDuplicateRT(r1.(*RT), r2.(*RT)) + case TypeSMIMEA: + return isDuplicateSMIMEA(r1.(*SMIMEA), r2.(*SMIMEA)) + case TypeSOA: + return isDuplicateSOA(r1.(*SOA), r2.(*SOA)) + case TypeSPF: + return isDuplicateSPF(r1.(*SPF), r2.(*SPF)) + case TypeSRV: + return isDuplicateSRV(r1.(*SRV), r2.(*SRV)) + case TypeSSHFP: + return isDuplicateSSHFP(r1.(*SSHFP), r2.(*SSHFP)) + case TypeTA: + return isDuplicateTA(r1.(*TA), r2.(*TA)) + case TypeTALINK: + return isDuplicateTALINK(r1.(*TALINK), r2.(*TALINK)) + case TypeTKEY: + return isDuplicateTKEY(r1.(*TKEY), r2.(*TKEY)) + case TypeTLSA: + return isDuplicateTLSA(r1.(*TLSA), r2.(*TLSA)) + case TypeTSIG: + return isDuplicateTSIG(r1.(*TSIG), r2.(*TSIG)) + case TypeTXT: + return isDuplicateTXT(r1.(*TXT), r2.(*TXT)) + case TypeUID: + return isDuplicateUID(r1.(*UID), r2.(*UID)) + case TypeUINFO: + return isDuplicateUINFO(r1.(*UINFO), r2.(*UINFO)) + case TypeURI: + return isDuplicateURI(r1.(*URI), r2.(*URI)) + case TypeX25: + return isDuplicateX25(r1.(*X25), r2.(*X25)) + } + return false +} + +// isDuplicate() functions + +func isDuplicateA(r1, r2 *A) bool { + if len(r1.A) != len(r2.A) { + return false + } + for i := 0; i < len(r1.A); i++ { + if r1.A[i] != r2.A[i] { + return false + } + } + return true +} + +func isDuplicateAAAA(r1, r2 *AAAA) bool { + if len(r1.AAAA) != len(r2.AAAA) { + return false + } + for i := 0; i < len(r1.AAAA); i++ { + if r1.AAAA[i] != r2.AAAA[i] { + return false + } + } + return true +} + +func isDuplicateAFSDB(r1, r2 *AFSDB) bool { + if r1.Subtype != r2.Subtype { + return false + } + if !isDulicateName(r1.Hostname, r2.Hostname) { + return false + } + return true +} + +func isDuplicateAVC(r1, r2 *AVC) bool { + if len(r1.Txt) != len(r2.Txt) { + return false + } + for i := 0; i < len(r1.Txt); i++ { + if r1.Txt[i] != r2.Txt[i] { + return false + } + } + return true +} + +func isDuplicateCAA(r1, r2 *CAA) bool { + if r1.Flag != r2.Flag { + return false + } + if r1.Tag != r2.Tag { + return false + } + if r1.Value != r2.Value { + return false + } + return true +} + +func isDuplicateCERT(r1, r2 *CERT) bool { + if r1.Type != r2.Type { + return false + } + if r1.KeyTag != r2.KeyTag { + return false + } + if r1.Algorithm != r2.Algorithm { + return false + } + if r1.Certificate != r2.Certificate { + return false + } + return true +} + +func isDuplicateCNAME(r1, r2 *CNAME) bool { + if !isDulicateName(r1.Target, r2.Target) { + return false + } + return true +} + +func isDuplicateCSYNC(r1, r2 *CSYNC) bool { + if r1.Serial != r2.Serial { + return false + } + if r1.Flags != r2.Flags { + return false + } + if len(r1.TypeBitMap) != len(r2.TypeBitMap) { + return false + } + for i := 0; i < len(r1.TypeBitMap); i++ { + if r1.TypeBitMap[i] != r2.TypeBitMap[i] { + return false + } + } + return true +} + +func isDuplicateDHCID(r1, r2 *DHCID) bool { + if r1.Digest != r2.Digest { + return false + } + return true +} + +func isDuplicateDNAME(r1, r2 *DNAME) bool { + if !isDulicateName(r1.Target, r2.Target) { + return false + } + return true +} + +func isDuplicateDNSKEY(r1, r2 *DNSKEY) bool { + if r1.Flags != r2.Flags { + return false + } + if r1.Protocol != r2.Protocol { + return false + } + if r1.Algorithm != r2.Algorithm { + return false + } + if r1.PublicKey != r2.PublicKey { + return false + } + return true +} + +func isDuplicateDS(r1, r2 *DS) bool { + if r1.KeyTag != r2.KeyTag { + return false + } + if r1.Algorithm != r2.Algorithm { + return false + } + if r1.DigestType != r2.DigestType { + return false + } + if r1.Digest != r2.Digest { + return false + } + return true +} + +func isDuplicateEID(r1, r2 *EID) bool { + if r1.Endpoint != r2.Endpoint { + return false + } + return true +} + +func isDuplicateEUI48(r1, r2 *EUI48) bool { + if r1.Address != r2.Address { + return false + } + return true +} + +func isDuplicateEUI64(r1, r2 *EUI64) bool { + if r1.Address != r2.Address { + return false + } + return true +} + +func isDuplicateGID(r1, r2 *GID) bool { + if r1.Gid != r2.Gid { + return false + } + return true +} + +func isDuplicateGPOS(r1, r2 *GPOS) bool { + if r1.Longitude != r2.Longitude { + return false + } + if r1.Latitude != r2.Latitude { + return false + } + if r1.Altitude != r2.Altitude { + return false + } + return true +} + +func isDuplicateHINFO(r1, r2 *HINFO) bool { + if r1.Cpu != r2.Cpu { + return false + } + if r1.Os != r2.Os { + return false + } + return true +} + +func isDuplicateHIP(r1, r2 *HIP) bool { + if r1.HitLength != r2.HitLength { + return false + } + if r1.PublicKeyAlgorithm != r2.PublicKeyAlgorithm { + return false + } + if r1.PublicKeyLength != r2.PublicKeyLength { + return false + } + if r1.Hit != r2.Hit { + return false + } + if r1.PublicKey != r2.PublicKey { + return false + } + if len(r1.RendezvousServers) != len(r2.RendezvousServers) { + return false + } + for i := 0; i < len(r1.RendezvousServers); i++ { + if !isDulicateName(r1.RendezvousServers[i], r2.RendezvousServers[i]) { + return false + } + } + return true +} + +func isDuplicateKX(r1, r2 *KX) bool { + if r1.Preference != r2.Preference { + return false + } + if !isDulicateName(r1.Exchanger, r2.Exchanger) { + return false + } + return true +} + +func isDuplicateL32(r1, r2 *L32) bool { + if r1.Preference != r2.Preference { + return false + } + if len(r1.Locator32) != len(r2.Locator32) { + return false + } + for i := 0; i < len(r1.Locator32); i++ { + if r1.Locator32[i] != r2.Locator32[i] { + return false + } + } + return true +} + +func isDuplicateL64(r1, r2 *L64) bool { + if r1.Preference != r2.Preference { + return false + } + if r1.Locator64 != r2.Locator64 { + return false + } + return true +} + +func isDuplicateLOC(r1, r2 *LOC) bool { + if r1.Version != r2.Version { + return false + } + if r1.Size != r2.Size { + return false + } + if r1.HorizPre != r2.HorizPre { + return false + } + if r1.VertPre != r2.VertPre { + return false + } + if r1.Latitude != r2.Latitude { + return false + } + if r1.Longitude != r2.Longitude { + return false + } + if r1.Altitude != r2.Altitude { + return false + } + return true +} + +func isDuplicateLP(r1, r2 *LP) bool { + if r1.Preference != r2.Preference { + return false + } + if !isDulicateName(r1.Fqdn, r2.Fqdn) { + return false + } + return true +} + +func isDuplicateMB(r1, r2 *MB) bool { + if !isDulicateName(r1.Mb, r2.Mb) { + return false + } + return true +} + +func isDuplicateMD(r1, r2 *MD) bool { + if !isDulicateName(r1.Md, r2.Md) { + return false + } + return true +} + +func isDuplicateMF(r1, r2 *MF) bool { + if !isDulicateName(r1.Mf, r2.Mf) { + return false + } + return true +} + +func isDuplicateMG(r1, r2 *MG) bool { + if !isDulicateName(r1.Mg, r2.Mg) { + return false + } + return true +} + +func isDuplicateMINFO(r1, r2 *MINFO) bool { + if !isDulicateName(r1.Rmail, r2.Rmail) { + return false + } + if !isDulicateName(r1.Email, r2.Email) { + return false + } + return true +} + +func isDuplicateMR(r1, r2 *MR) bool { + if !isDulicateName(r1.Mr, r2.Mr) { + return false + } + return true +} + +func isDuplicateMX(r1, r2 *MX) bool { + if r1.Preference != r2.Preference { + return false + } + if !isDulicateName(r1.Mx, r2.Mx) { + return false + } + return true +} + +func isDuplicateNAPTR(r1, r2 *NAPTR) bool { + if r1.Order != r2.Order { + return false + } + if r1.Preference != r2.Preference { + return false + } + if r1.Flags != r2.Flags { + return false + } + if r1.Service != r2.Service { + return false + } + if r1.Regexp != r2.Regexp { + return false + } + if !isDulicateName(r1.Replacement, r2.Replacement) { + return false + } + return true +} + +func isDuplicateNID(r1, r2 *NID) bool { + if r1.Preference != r2.Preference { + return false + } + if r1.NodeID != r2.NodeID { + return false + } + return true +} + +func isDuplicateNIMLOC(r1, r2 *NIMLOC) bool { + if r1.Locator != r2.Locator { + return false + } + return true +} + +func isDuplicateNINFO(r1, r2 *NINFO) bool { + if len(r1.ZSData) != len(r2.ZSData) { + return false + } + for i := 0; i < len(r1.ZSData); i++ { + if r1.ZSData[i] != r2.ZSData[i] { + return false + } + } + return true +} + +func isDuplicateNS(r1, r2 *NS) bool { + if !isDulicateName(r1.Ns, r2.Ns) { + return false + } + return true +} + +func isDuplicateNSAPPTR(r1, r2 *NSAPPTR) bool { + if !isDulicateName(r1.Ptr, r2.Ptr) { + return false + } + return true +} + +func isDuplicateNSEC(r1, r2 *NSEC) bool { + if !isDulicateName(r1.NextDomain, r2.NextDomain) { + return false + } + if len(r1.TypeBitMap) != len(r2.TypeBitMap) { + return false + } + for i := 0; i < len(r1.TypeBitMap); i++ { + if r1.TypeBitMap[i] != r2.TypeBitMap[i] { + return false + } + } + return true +} + +func isDuplicateNSEC3(r1, r2 *NSEC3) bool { + if r1.Hash != r2.Hash { + return false + } + if r1.Flags != r2.Flags { + return false + } + if r1.Iterations != r2.Iterations { + return false + } + if r1.SaltLength != r2.SaltLength { + return false + } + if r1.Salt != r2.Salt { + return false + } + if r1.HashLength != r2.HashLength { + return false + } + if r1.NextDomain != r2.NextDomain { + return false + } + if len(r1.TypeBitMap) != len(r2.TypeBitMap) { + return false + } + for i := 0; i < len(r1.TypeBitMap); i++ { + if r1.TypeBitMap[i] != r2.TypeBitMap[i] { + return false + } + } + return true +} + +func isDuplicateNSEC3PARAM(r1, r2 *NSEC3PARAM) bool { + if r1.Hash != r2.Hash { + return false + } + if r1.Flags != r2.Flags { + return false + } + if r1.Iterations != r2.Iterations { + return false + } + if r1.SaltLength != r2.SaltLength { + return false + } + if r1.Salt != r2.Salt { + return false + } + return true +} + +func isDuplicateOPENPGPKEY(r1, r2 *OPENPGPKEY) bool { + if r1.PublicKey != r2.PublicKey { + return false + } + return true +} + +func isDuplicatePTR(r1, r2 *PTR) bool { + if !isDulicateName(r1.Ptr, r2.Ptr) { + return false + } + return true +} + +func isDuplicatePX(r1, r2 *PX) bool { + if r1.Preference != r2.Preference { + return false + } + if !isDulicateName(r1.Map822, r2.Map822) { + return false + } + if !isDulicateName(r1.Mapx400, r2.Mapx400) { + return false + } + return true +} + +func isDuplicateRKEY(r1, r2 *RKEY) bool { + if r1.Flags != r2.Flags { + return false + } + if r1.Protocol != r2.Protocol { + return false + } + if r1.Algorithm != r2.Algorithm { + return false + } + if r1.PublicKey != r2.PublicKey { + return false + } + return true +} + +func isDuplicateRP(r1, r2 *RP) bool { + if !isDulicateName(r1.Mbox, r2.Mbox) { + return false + } + if !isDulicateName(r1.Txt, r2.Txt) { + return false + } + return true +} + +func isDuplicateRRSIG(r1, r2 *RRSIG) bool { + if r1.TypeCovered != r2.TypeCovered { + return false + } + if r1.Algorithm != r2.Algorithm { + return false + } + if r1.Labels != r2.Labels { + return false + } + if r1.OrigTtl != r2.OrigTtl { + return false + } + if r1.Expiration != r2.Expiration { + return false + } + if r1.Inception != r2.Inception { + return false + } + if r1.KeyTag != r2.KeyTag { + return false + } + if !isDulicateName(r1.SignerName, r2.SignerName) { + return false + } + if r1.Signature != r2.Signature { + return false + } + return true +} + +func isDuplicateRT(r1, r2 *RT) bool { + if r1.Preference != r2.Preference { + return false + } + if !isDulicateName(r1.Host, r2.Host) { + return false + } + return true +} + +func isDuplicateSMIMEA(r1, r2 *SMIMEA) bool { + if r1.Usage != r2.Usage { + return false + } + if r1.Selector != r2.Selector { + return false + } + if r1.MatchingType != r2.MatchingType { + return false + } + if r1.Certificate != r2.Certificate { + return false + } + return true +} + +func isDuplicateSOA(r1, r2 *SOA) bool { + if !isDulicateName(r1.Ns, r2.Ns) { + return false + } + if !isDulicateName(r1.Mbox, r2.Mbox) { + return false + } + if r1.Serial != r2.Serial { + return false + } + if r1.Refresh != r2.Refresh { + return false + } + if r1.Retry != r2.Retry { + return false + } + if r1.Expire != r2.Expire { + return false + } + if r1.Minttl != r2.Minttl { + return false + } + return true +} + +func isDuplicateSPF(r1, r2 *SPF) bool { + if len(r1.Txt) != len(r2.Txt) { + return false + } + for i := 0; i < len(r1.Txt); i++ { + if r1.Txt[i] != r2.Txt[i] { + return false + } + } + return true +} + +func isDuplicateSRV(r1, r2 *SRV) bool { + if r1.Priority != r2.Priority { + return false + } + if r1.Weight != r2.Weight { + return false + } + if r1.Port != r2.Port { + return false + } + if !isDulicateName(r1.Target, r2.Target) { + return false + } + return true +} + +func isDuplicateSSHFP(r1, r2 *SSHFP) bool { + if r1.Algorithm != r2.Algorithm { + return false + } + if r1.Type != r2.Type { + return false + } + if r1.FingerPrint != r2.FingerPrint { + return false + } + return true +} + +func isDuplicateTA(r1, r2 *TA) bool { + if r1.KeyTag != r2.KeyTag { + return false + } + if r1.Algorithm != r2.Algorithm { + return false + } + if r1.DigestType != r2.DigestType { + return false + } + if r1.Digest != r2.Digest { + return false + } + return true +} + +func isDuplicateTALINK(r1, r2 *TALINK) bool { + if !isDulicateName(r1.PreviousName, r2.PreviousName) { + return false + } + if !isDulicateName(r1.NextName, r2.NextName) { + return false + } + return true +} + +func isDuplicateTKEY(r1, r2 *TKEY) bool { + if !isDulicateName(r1.Algorithm, r2.Algorithm) { + return false + } + if r1.Inception != r2.Inception { + return false + } + if r1.Expiration != r2.Expiration { + return false + } + if r1.Mode != r2.Mode { + return false + } + if r1.Error != r2.Error { + return false + } + if r1.KeySize != r2.KeySize { + return false + } + if r1.Key != r2.Key { + return false + } + if r1.OtherLen != r2.OtherLen { + return false + } + if r1.OtherData != r2.OtherData { + return false + } + return true +} + +func isDuplicateTLSA(r1, r2 *TLSA) bool { + if r1.Usage != r2.Usage { + return false + } + if r1.Selector != r2.Selector { + return false + } + if r1.MatchingType != r2.MatchingType { + return false + } + if r1.Certificate != r2.Certificate { + return false + } + return true +} + +func isDuplicateTSIG(r1, r2 *TSIG) bool { + if !isDulicateName(r1.Algorithm, r2.Algorithm) { + return false + } + if r1.TimeSigned != r2.TimeSigned { + return false + } + if r1.Fudge != r2.Fudge { + return false + } + if r1.MACSize != r2.MACSize { + return false + } + if r1.MAC != r2.MAC { + return false + } + if r1.OrigId != r2.OrigId { + return false + } + if r1.Error != r2.Error { + return false + } + if r1.OtherLen != r2.OtherLen { + return false + } + if r1.OtherData != r2.OtherData { + return false + } + return true +} + +func isDuplicateTXT(r1, r2 *TXT) bool { + if len(r1.Txt) != len(r2.Txt) { + return false + } + for i := 0; i < len(r1.Txt); i++ { + if r1.Txt[i] != r2.Txt[i] { + return false + } + } + return true +} + +func isDuplicateUID(r1, r2 *UID) bool { + if r1.Uid != r2.Uid { + return false + } + return true +} + +func isDuplicateUINFO(r1, r2 *UINFO) bool { + if r1.Uinfo != r2.Uinfo { + return false + } + return true +} + +func isDuplicateURI(r1, r2 *URI) bool { + if r1.Priority != r2.Priority { + return false + } + if r1.Weight != r2.Weight { + return false + } + if r1.Target != r2.Target { + return false + } + return true +} + +func isDuplicateX25(r1, r2 *X25) bool { + if r1.PSDNAddress != r2.PSDNAddress { + return false + } + return true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zmsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zmsg.go new file mode 100644 index 00000000000..1a68f74da25 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/zmsg.go @@ -0,0 +1,3615 @@ +// Code generated by "go run msg_generate.go"; DO NOT EDIT. + +package dns + +// pack*() functions + +func (rr *A) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packDataA(rr.A, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *AAAA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packDataAAAA(rr.AAAA, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *AFSDB) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Subtype, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Hostname, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *ANY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *AVC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringTxt(rr.Txt, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *CAA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint8(rr.Flag, msg, off) + if err != nil { + return off, err + } + off, err = packString(rr.Tag, msg, off) + if err != nil { + return off, err + } + off, err = packStringOctet(rr.Value, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *CDNSKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Flags, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Protocol, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packStringBase64(rr.PublicKey, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *CDS) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.KeyTag, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.DigestType, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.Digest, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *CERT) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Type, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.KeyTag, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packStringBase64(rr.Certificate, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *CNAME) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Target, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *CSYNC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint32(rr.Serial, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Flags, msg, off) + if err != nil { + return off, err + } + off, err = packDataNsec(rr.TypeBitMap, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *DHCID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringBase64(rr.Digest, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *DLV) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.KeyTag, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.DigestType, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.Digest, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *DNAME) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Target, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *DNSKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Flags, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Protocol, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packStringBase64(rr.PublicKey, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *DS) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.KeyTag, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.DigestType, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.Digest, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *EID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringHex(rr.Endpoint, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *EUI48) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint48(rr.Address, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *EUI64) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint64(rr.Address, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *GID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint32(rr.Gid, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *GPOS) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packString(rr.Longitude, msg, off) + if err != nil { + return off, err + } + off, err = packString(rr.Latitude, msg, off) + if err != nil { + return off, err + } + off, err = packString(rr.Altitude, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *HINFO) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packString(rr.Cpu, msg, off) + if err != nil { + return off, err + } + off, err = packString(rr.Os, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *HIP) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint8(rr.HitLength, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.PublicKeyAlgorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.PublicKeyLength, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.Hit, msg, off) + if err != nil { + return off, err + } + off, err = packStringBase64(rr.PublicKey, msg, off) + if err != nil { + return off, err + } + off, err = packDataDomainNames(rr.RendezvousServers, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *KEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Flags, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Protocol, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packStringBase64(rr.PublicKey, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *KX) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Exchanger, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *L32) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = packDataA(rr.Locator32, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *L64) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = packUint64(rr.Locator64, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *LOC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint8(rr.Version, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Size, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.HorizPre, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.VertPre, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Latitude, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Longitude, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Altitude, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *LP) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Fqdn, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *MB) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Mb, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *MD) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Md, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *MF) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Mf, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *MG) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Mg, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *MINFO) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Rmail, msg, off, compression, compress) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Email, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *MR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Mr, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *MX) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Mx, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NAPTR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Order, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = packString(rr.Flags, msg, off) + if err != nil { + return off, err + } + off, err = packString(rr.Service, msg, off) + if err != nil { + return off, err + } + off, err = packString(rr.Regexp, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Replacement, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = packUint64(rr.NodeID, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NIMLOC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringHex(rr.Locator, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NINFO) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringTxt(rr.ZSData, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NS) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Ns, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NSAPPTR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Ptr, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NSEC) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.NextDomain, msg, off, compression, false) + if err != nil { + return off, err + } + off, err = packDataNsec(rr.TypeBitMap, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NSEC3) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint8(rr.Hash, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Flags, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Iterations, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.SaltLength, msg, off) + if err != nil { + return off, err + } + // Only pack salt if value is not "-", i.e. empty + if rr.Salt != "-" { + off, err = packStringHex(rr.Salt, msg, off) + if err != nil { + return off, err + } + } + off, err = packUint8(rr.HashLength, msg, off) + if err != nil { + return off, err + } + off, err = packStringBase32(rr.NextDomain, msg, off) + if err != nil { + return off, err + } + off, err = packDataNsec(rr.TypeBitMap, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *NSEC3PARAM) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint8(rr.Hash, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Flags, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Iterations, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.SaltLength, msg, off) + if err != nil { + return off, err + } + // Only pack salt if value is not "-", i.e. empty + if rr.Salt != "-" { + off, err = packStringHex(rr.Salt, msg, off) + if err != nil { + return off, err + } + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *OPENPGPKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringBase64(rr.PublicKey, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *OPT) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packDataOpt(rr.Option, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *PTR) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Ptr, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *PX) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Map822, msg, off, compression, false) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Mapx400, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *RFC3597) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringHex(rr.Rdata, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *RKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Flags, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Protocol, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packStringBase64(rr.PublicKey, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *RP) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Mbox, msg, off, compression, false) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Txt, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *RRSIG) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.TypeCovered, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Labels, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.OrigTtl, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Expiration, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Inception, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.KeyTag, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.SignerName, msg, off, compression, false) + if err != nil { + return off, err + } + off, err = packStringBase64(rr.Signature, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *RT) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Preference, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Host, msg, off, compression, compress) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *SIG) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.TypeCovered, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Labels, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.OrigTtl, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Expiration, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Inception, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.KeyTag, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.SignerName, msg, off, compression, false) + if err != nil { + return off, err + } + off, err = packStringBase64(rr.Signature, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *SMIMEA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint8(rr.Usage, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Selector, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.MatchingType, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.Certificate, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *SOA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Ns, msg, off, compression, compress) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Mbox, msg, off, compression, compress) + if err != nil { + return off, err + } + off, err = packUint32(rr.Serial, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Refresh, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Retry, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Expire, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Minttl, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *SPF) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringTxt(rr.Txt, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *SRV) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Priority, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Weight, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Port, msg, off) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.Target, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *SSHFP) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Type, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.FingerPrint, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *TA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.KeyTag, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Algorithm, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.DigestType, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.Digest, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *TALINK) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.PreviousName, msg, off, compression, false) + if err != nil { + return off, err + } + off, err = PackDomainName(rr.NextName, msg, off, compression, false) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *TKEY) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Algorithm, msg, off, compression, false) + if err != nil { + return off, err + } + off, err = packUint32(rr.Inception, msg, off) + if err != nil { + return off, err + } + off, err = packUint32(rr.Expiration, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Mode, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Error, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.KeySize, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.Key, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.OtherLen, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.OtherData, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *TLSA) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint8(rr.Usage, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.Selector, msg, off) + if err != nil { + return off, err + } + off, err = packUint8(rr.MatchingType, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.Certificate, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *TSIG) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = PackDomainName(rr.Algorithm, msg, off, compression, false) + if err != nil { + return off, err + } + off, err = packUint48(rr.TimeSigned, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Fudge, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.MACSize, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.MAC, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.OrigId, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Error, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.OtherLen, msg, off) + if err != nil { + return off, err + } + off, err = packStringHex(rr.OtherData, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *TXT) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packStringTxt(rr.Txt, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *UID) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint32(rr.Uid, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *UINFO) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packString(rr.Uinfo, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *URI) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packUint16(rr.Priority, msg, off) + if err != nil { + return off, err + } + off, err = packUint16(rr.Weight, msg, off) + if err != nil { + return off, err + } + off, err = packStringOctet(rr.Target, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +func (rr *X25) pack(msg []byte, off int, compression map[string]int, compress bool) (int, error) { + off, err := rr.Hdr.pack(msg, off, compression, compress) + if err != nil { + return off, err + } + headerEnd := off + off, err = packString(rr.PSDNAddress, msg, off) + if err != nil { + return off, err + } + rr.Header().Rdlength = uint16(off - headerEnd) + return off, nil +} + +// unpack*() functions + +func unpackA(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(A) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.A, off, err = unpackDataA(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackAAAA(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(AAAA) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.AAAA, off, err = unpackDataAAAA(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackAFSDB(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(AFSDB) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Subtype, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Hostname, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackANY(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(ANY) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + return rr, off, err +} + +func unpackAVC(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(AVC) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Txt, off, err = unpackStringTxt(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackCAA(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(CAA) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Flag, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Tag, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Value, off, err = unpackStringOctet(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackCDNSKEY(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(CDNSKEY) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Flags, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Protocol, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackCDS(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(CDS) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.KeyTag, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.DigestType, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackCERT(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(CERT) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Type, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.KeyTag, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Certificate, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackCNAME(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(CNAME) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Target, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackCSYNC(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(CSYNC) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Serial, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Flags, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.TypeBitMap, off, err = unpackDataNsec(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackDHCID(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(DHCID) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Digest, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackDLV(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(DLV) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.KeyTag, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.DigestType, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackDNAME(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(DNAME) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Target, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackDNSKEY(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(DNSKEY) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Flags, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Protocol, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackDS(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(DS) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.KeyTag, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.DigestType, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackEID(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(EID) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Endpoint, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackEUI48(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(EUI48) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Address, off, err = unpackUint48(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackEUI64(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(EUI64) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Address, off, err = unpackUint64(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackGID(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(GID) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Gid, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackGPOS(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(GPOS) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Longitude, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Latitude, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Altitude, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackHINFO(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(HINFO) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Cpu, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Os, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackHIP(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(HIP) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.HitLength, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.PublicKeyAlgorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.PublicKeyLength, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Hit, off, err = unpackStringHex(msg, off, off+int(rr.HitLength)) + if err != nil { + return rr, off, err + } + rr.PublicKey, off, err = unpackStringBase64(msg, off, off+int(rr.PublicKeyLength)) + if err != nil { + return rr, off, err + } + rr.RendezvousServers, off, err = unpackDataDomainNames(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackKEY(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(KEY) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Flags, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Protocol, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackKX(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(KX) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Exchanger, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackL32(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(L32) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Locator32, off, err = unpackDataA(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackL64(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(L64) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Locator64, off, err = unpackUint64(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackLOC(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(LOC) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Version, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Size, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.HorizPre, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.VertPre, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Latitude, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Longitude, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Altitude, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackLP(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(LP) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Fqdn, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackMB(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(MB) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Mb, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackMD(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(MD) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Md, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackMF(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(MF) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Mf, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackMG(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(MG) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Mg, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackMINFO(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(MINFO) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Rmail, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Email, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackMR(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(MR) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Mr, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackMX(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(MX) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Mx, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNAPTR(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NAPTR) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Order, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Flags, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Service, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Regexp, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Replacement, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNID(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NID) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.NodeID, off, err = unpackUint64(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNIMLOC(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NIMLOC) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Locator, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNINFO(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NINFO) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.ZSData, off, err = unpackStringTxt(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNS(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NS) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Ns, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNSAPPTR(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NSAPPTR) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Ptr, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNSEC(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NSEC) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.NextDomain, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.TypeBitMap, off, err = unpackDataNsec(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNSEC3(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NSEC3) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Hash, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Flags, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Iterations, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.SaltLength, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Salt, off, err = unpackStringHex(msg, off, off+int(rr.SaltLength)) + if err != nil { + return rr, off, err + } + rr.HashLength, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.NextDomain, off, err = unpackStringBase32(msg, off, off+int(rr.HashLength)) + if err != nil { + return rr, off, err + } + rr.TypeBitMap, off, err = unpackDataNsec(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackNSEC3PARAM(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(NSEC3PARAM) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Hash, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Flags, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Iterations, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.SaltLength, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Salt, off, err = unpackStringHex(msg, off, off+int(rr.SaltLength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackOPENPGPKEY(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(OPENPGPKEY) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackOPT(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(OPT) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Option, off, err = unpackDataOpt(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackPTR(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(PTR) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Ptr, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackPX(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(PX) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Map822, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Mapx400, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackRFC3597(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(RFC3597) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Rdata, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackRKEY(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(RKEY) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Flags, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Protocol, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.PublicKey, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackRP(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(RP) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Mbox, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Txt, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackRRSIG(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(RRSIG) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.TypeCovered, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Labels, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.OrigTtl, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Expiration, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Inception, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.KeyTag, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.SignerName, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Signature, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackRT(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(RT) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Preference, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Host, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackSIG(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(SIG) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.TypeCovered, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Labels, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.OrigTtl, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Expiration, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Inception, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.KeyTag, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.SignerName, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Signature, off, err = unpackStringBase64(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackSMIMEA(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(SMIMEA) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Usage, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Selector, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.MatchingType, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Certificate, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackSOA(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(SOA) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Ns, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Mbox, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Serial, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Refresh, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Retry, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Expire, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Minttl, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackSPF(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(SPF) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Txt, off, err = unpackStringTxt(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackSRV(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(SRV) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Priority, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Weight, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Port, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Target, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackSSHFP(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(SSHFP) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Type, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.FingerPrint, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackTA(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(TA) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.KeyTag, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Algorithm, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.DigestType, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Digest, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackTALINK(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(TALINK) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.PreviousName, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.NextName, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackTKEY(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(TKEY) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Algorithm, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Inception, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Expiration, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Mode, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Error, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.KeySize, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Key, off, err = unpackStringHex(msg, off, off+int(rr.KeySize)) + if err != nil { + return rr, off, err + } + rr.OtherLen, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.OtherData, off, err = unpackStringHex(msg, off, off+int(rr.OtherLen)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackTLSA(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(TLSA) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Usage, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Selector, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.MatchingType, off, err = unpackUint8(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Certificate, off, err = unpackStringHex(msg, off, rdStart+int(rr.Hdr.Rdlength)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackTSIG(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(TSIG) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Algorithm, off, err = UnpackDomainName(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.TimeSigned, off, err = unpackUint48(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Fudge, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.MACSize, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.MAC, off, err = unpackStringHex(msg, off, off+int(rr.MACSize)) + if err != nil { + return rr, off, err + } + rr.OrigId, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Error, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.OtherLen, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.OtherData, off, err = unpackStringHex(msg, off, off+int(rr.OtherLen)) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackTXT(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(TXT) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Txt, off, err = unpackStringTxt(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackUID(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(UID) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Uid, off, err = unpackUint32(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackUINFO(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(UINFO) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Uinfo, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackURI(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(URI) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.Priority, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Weight, off, err = unpackUint16(msg, off) + if err != nil { + return rr, off, err + } + if off == len(msg) { + return rr, off, nil + } + rr.Target, off, err = unpackStringOctet(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +func unpackX25(h RR_Header, msg []byte, off int) (RR, int, error) { + rr := new(X25) + rr.Hdr = h + if noRdata(h) { + return rr, off, nil + } + var err error + rdStart := off + _ = rdStart + + rr.PSDNAddress, off, err = unpackString(msg, off) + if err != nil { + return rr, off, err + } + return rr, off, err +} + +var typeToUnpack = map[uint16]func(RR_Header, []byte, int) (RR, int, error){ + TypeA: unpackA, + TypeAAAA: unpackAAAA, + TypeAFSDB: unpackAFSDB, + TypeANY: unpackANY, + TypeAVC: unpackAVC, + TypeCAA: unpackCAA, + TypeCDNSKEY: unpackCDNSKEY, + TypeCDS: unpackCDS, + TypeCERT: unpackCERT, + TypeCNAME: unpackCNAME, + TypeCSYNC: unpackCSYNC, + TypeDHCID: unpackDHCID, + TypeDLV: unpackDLV, + TypeDNAME: unpackDNAME, + TypeDNSKEY: unpackDNSKEY, + TypeDS: unpackDS, + TypeEID: unpackEID, + TypeEUI48: unpackEUI48, + TypeEUI64: unpackEUI64, + TypeGID: unpackGID, + TypeGPOS: unpackGPOS, + TypeHINFO: unpackHINFO, + TypeHIP: unpackHIP, + TypeKEY: unpackKEY, + TypeKX: unpackKX, + TypeL32: unpackL32, + TypeL64: unpackL64, + TypeLOC: unpackLOC, + TypeLP: unpackLP, + TypeMB: unpackMB, + TypeMD: unpackMD, + TypeMF: unpackMF, + TypeMG: unpackMG, + TypeMINFO: unpackMINFO, + TypeMR: unpackMR, + TypeMX: unpackMX, + TypeNAPTR: unpackNAPTR, + TypeNID: unpackNID, + TypeNIMLOC: unpackNIMLOC, + TypeNINFO: unpackNINFO, + TypeNS: unpackNS, + TypeNSAPPTR: unpackNSAPPTR, + TypeNSEC: unpackNSEC, + TypeNSEC3: unpackNSEC3, + TypeNSEC3PARAM: unpackNSEC3PARAM, + TypeOPENPGPKEY: unpackOPENPGPKEY, + TypeOPT: unpackOPT, + TypePTR: unpackPTR, + TypePX: unpackPX, + TypeRKEY: unpackRKEY, + TypeRP: unpackRP, + TypeRRSIG: unpackRRSIG, + TypeRT: unpackRT, + TypeSIG: unpackSIG, + TypeSMIMEA: unpackSMIMEA, + TypeSOA: unpackSOA, + TypeSPF: unpackSPF, + TypeSRV: unpackSRV, + TypeSSHFP: unpackSSHFP, + TypeTA: unpackTA, + TypeTALINK: unpackTALINK, + TypeTKEY: unpackTKEY, + TypeTLSA: unpackTLSA, + TypeTSIG: unpackTSIG, + TypeTXT: unpackTXT, + TypeUID: unpackUID, + TypeUINFO: unpackUINFO, + TypeURI: unpackURI, + TypeX25: unpackX25, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/ztypes.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/ztypes.go new file mode 100644 index 00000000000..965753b11b2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/github.com/miekg/dns/ztypes.go @@ -0,0 +1,863 @@ +// Code generated by "go run types_generate.go"; DO NOT EDIT. + +package dns + +import ( + "encoding/base64" + "net" +) + +// TypeToRR is a map of constructors for each RR type. +var TypeToRR = map[uint16]func() RR{ + TypeA: func() RR { return new(A) }, + TypeAAAA: func() RR { return new(AAAA) }, + TypeAFSDB: func() RR { return new(AFSDB) }, + TypeANY: func() RR { return new(ANY) }, + TypeAVC: func() RR { return new(AVC) }, + TypeCAA: func() RR { return new(CAA) }, + TypeCDNSKEY: func() RR { return new(CDNSKEY) }, + TypeCDS: func() RR { return new(CDS) }, + TypeCERT: func() RR { return new(CERT) }, + TypeCNAME: func() RR { return new(CNAME) }, + TypeCSYNC: func() RR { return new(CSYNC) }, + TypeDHCID: func() RR { return new(DHCID) }, + TypeDLV: func() RR { return new(DLV) }, + TypeDNAME: func() RR { return new(DNAME) }, + TypeDNSKEY: func() RR { return new(DNSKEY) }, + TypeDS: func() RR { return new(DS) }, + TypeEID: func() RR { return new(EID) }, + TypeEUI48: func() RR { return new(EUI48) }, + TypeEUI64: func() RR { return new(EUI64) }, + TypeGID: func() RR { return new(GID) }, + TypeGPOS: func() RR { return new(GPOS) }, + TypeHINFO: func() RR { return new(HINFO) }, + TypeHIP: func() RR { return new(HIP) }, + TypeKEY: func() RR { return new(KEY) }, + TypeKX: func() RR { return new(KX) }, + TypeL32: func() RR { return new(L32) }, + TypeL64: func() RR { return new(L64) }, + TypeLOC: func() RR { return new(LOC) }, + TypeLP: func() RR { return new(LP) }, + TypeMB: func() RR { return new(MB) }, + TypeMD: func() RR { return new(MD) }, + TypeMF: func() RR { return new(MF) }, + TypeMG: func() RR { return new(MG) }, + TypeMINFO: func() RR { return new(MINFO) }, + TypeMR: func() RR { return new(MR) }, + TypeMX: func() RR { return new(MX) }, + TypeNAPTR: func() RR { return new(NAPTR) }, + TypeNID: func() RR { return new(NID) }, + TypeNIMLOC: func() RR { return new(NIMLOC) }, + TypeNINFO: func() RR { return new(NINFO) }, + TypeNS: func() RR { return new(NS) }, + TypeNSAPPTR: func() RR { return new(NSAPPTR) }, + TypeNSEC: func() RR { return new(NSEC) }, + TypeNSEC3: func() RR { return new(NSEC3) }, + TypeNSEC3PARAM: func() RR { return new(NSEC3PARAM) }, + TypeOPENPGPKEY: func() RR { return new(OPENPGPKEY) }, + TypeOPT: func() RR { return new(OPT) }, + TypePTR: func() RR { return new(PTR) }, + TypePX: func() RR { return new(PX) }, + TypeRKEY: func() RR { return new(RKEY) }, + TypeRP: func() RR { return new(RP) }, + TypeRRSIG: func() RR { return new(RRSIG) }, + TypeRT: func() RR { return new(RT) }, + TypeSIG: func() RR { return new(SIG) }, + TypeSMIMEA: func() RR { return new(SMIMEA) }, + TypeSOA: func() RR { return new(SOA) }, + TypeSPF: func() RR { return new(SPF) }, + TypeSRV: func() RR { return new(SRV) }, + TypeSSHFP: func() RR { return new(SSHFP) }, + TypeTA: func() RR { return new(TA) }, + TypeTALINK: func() RR { return new(TALINK) }, + TypeTKEY: func() RR { return new(TKEY) }, + TypeTLSA: func() RR { return new(TLSA) }, + TypeTSIG: func() RR { return new(TSIG) }, + TypeTXT: func() RR { return new(TXT) }, + TypeUID: func() RR { return new(UID) }, + TypeUINFO: func() RR { return new(UINFO) }, + TypeURI: func() RR { return new(URI) }, + TypeX25: func() RR { return new(X25) }, +} + +// TypeToString is a map of strings for each RR type. +var TypeToString = map[uint16]string{ + TypeA: "A", + TypeAAAA: "AAAA", + TypeAFSDB: "AFSDB", + TypeANY: "ANY", + TypeATMA: "ATMA", + TypeAVC: "AVC", + TypeAXFR: "AXFR", + TypeCAA: "CAA", + TypeCDNSKEY: "CDNSKEY", + TypeCDS: "CDS", + TypeCERT: "CERT", + TypeCNAME: "CNAME", + TypeCSYNC: "CSYNC", + TypeDHCID: "DHCID", + TypeDLV: "DLV", + TypeDNAME: "DNAME", + TypeDNSKEY: "DNSKEY", + TypeDS: "DS", + TypeEID: "EID", + TypeEUI48: "EUI48", + TypeEUI64: "EUI64", + TypeGID: "GID", + TypeGPOS: "GPOS", + TypeHINFO: "HINFO", + TypeHIP: "HIP", + TypeISDN: "ISDN", + TypeIXFR: "IXFR", + TypeKEY: "KEY", + TypeKX: "KX", + TypeL32: "L32", + TypeL64: "L64", + TypeLOC: "LOC", + TypeLP: "LP", + TypeMAILA: "MAILA", + TypeMAILB: "MAILB", + TypeMB: "MB", + TypeMD: "MD", + TypeMF: "MF", + TypeMG: "MG", + TypeMINFO: "MINFO", + TypeMR: "MR", + TypeMX: "MX", + TypeNAPTR: "NAPTR", + TypeNID: "NID", + TypeNIMLOC: "NIMLOC", + TypeNINFO: "NINFO", + TypeNS: "NS", + TypeNSEC: "NSEC", + TypeNSEC3: "NSEC3", + TypeNSEC3PARAM: "NSEC3PARAM", + TypeNULL: "NULL", + TypeNXT: "NXT", + TypeNone: "None", + TypeOPENPGPKEY: "OPENPGPKEY", + TypeOPT: "OPT", + TypePTR: "PTR", + TypePX: "PX", + TypeRKEY: "RKEY", + TypeRP: "RP", + TypeRRSIG: "RRSIG", + TypeRT: "RT", + TypeReserved: "Reserved", + TypeSIG: "SIG", + TypeSMIMEA: "SMIMEA", + TypeSOA: "SOA", + TypeSPF: "SPF", + TypeSRV: "SRV", + TypeSSHFP: "SSHFP", + TypeTA: "TA", + TypeTALINK: "TALINK", + TypeTKEY: "TKEY", + TypeTLSA: "TLSA", + TypeTSIG: "TSIG", + TypeTXT: "TXT", + TypeUID: "UID", + TypeUINFO: "UINFO", + TypeUNSPEC: "UNSPEC", + TypeURI: "URI", + TypeX25: "X25", + TypeNSAPPTR: "NSAP-PTR", +} + +func (rr *A) Header() *RR_Header { return &rr.Hdr } +func (rr *AAAA) Header() *RR_Header { return &rr.Hdr } +func (rr *AFSDB) Header() *RR_Header { return &rr.Hdr } +func (rr *ANY) Header() *RR_Header { return &rr.Hdr } +func (rr *AVC) Header() *RR_Header { return &rr.Hdr } +func (rr *CAA) Header() *RR_Header { return &rr.Hdr } +func (rr *CDNSKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *CDS) Header() *RR_Header { return &rr.Hdr } +func (rr *CERT) Header() *RR_Header { return &rr.Hdr } +func (rr *CNAME) Header() *RR_Header { return &rr.Hdr } +func (rr *CSYNC) Header() *RR_Header { return &rr.Hdr } +func (rr *DHCID) Header() *RR_Header { return &rr.Hdr } +func (rr *DLV) Header() *RR_Header { return &rr.Hdr } +func (rr *DNAME) Header() *RR_Header { return &rr.Hdr } +func (rr *DNSKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *DS) Header() *RR_Header { return &rr.Hdr } +func (rr *EID) Header() *RR_Header { return &rr.Hdr } +func (rr *EUI48) Header() *RR_Header { return &rr.Hdr } +func (rr *EUI64) Header() *RR_Header { return &rr.Hdr } +func (rr *GID) Header() *RR_Header { return &rr.Hdr } +func (rr *GPOS) Header() *RR_Header { return &rr.Hdr } +func (rr *HINFO) Header() *RR_Header { return &rr.Hdr } +func (rr *HIP) Header() *RR_Header { return &rr.Hdr } +func (rr *KEY) Header() *RR_Header { return &rr.Hdr } +func (rr *KX) Header() *RR_Header { return &rr.Hdr } +func (rr *L32) Header() *RR_Header { return &rr.Hdr } +func (rr *L64) Header() *RR_Header { return &rr.Hdr } +func (rr *LOC) Header() *RR_Header { return &rr.Hdr } +func (rr *LP) Header() *RR_Header { return &rr.Hdr } +func (rr *MB) Header() *RR_Header { return &rr.Hdr } +func (rr *MD) Header() *RR_Header { return &rr.Hdr } +func (rr *MF) Header() *RR_Header { return &rr.Hdr } +func (rr *MG) Header() *RR_Header { return &rr.Hdr } +func (rr *MINFO) Header() *RR_Header { return &rr.Hdr } +func (rr *MR) Header() *RR_Header { return &rr.Hdr } +func (rr *MX) Header() *RR_Header { return &rr.Hdr } +func (rr *NAPTR) Header() *RR_Header { return &rr.Hdr } +func (rr *NID) Header() *RR_Header { return &rr.Hdr } +func (rr *NIMLOC) Header() *RR_Header { return &rr.Hdr } +func (rr *NINFO) Header() *RR_Header { return &rr.Hdr } +func (rr *NS) Header() *RR_Header { return &rr.Hdr } +func (rr *NSAPPTR) Header() *RR_Header { return &rr.Hdr } +func (rr *NSEC) Header() *RR_Header { return &rr.Hdr } +func (rr *NSEC3) Header() *RR_Header { return &rr.Hdr } +func (rr *NSEC3PARAM) Header() *RR_Header { return &rr.Hdr } +func (rr *OPENPGPKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *OPT) Header() *RR_Header { return &rr.Hdr } +func (rr *PTR) Header() *RR_Header { return &rr.Hdr } +func (rr *PX) Header() *RR_Header { return &rr.Hdr } +func (rr *RFC3597) Header() *RR_Header { return &rr.Hdr } +func (rr *RKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *RP) Header() *RR_Header { return &rr.Hdr } +func (rr *RRSIG) Header() *RR_Header { return &rr.Hdr } +func (rr *RT) Header() *RR_Header { return &rr.Hdr } +func (rr *SIG) Header() *RR_Header { return &rr.Hdr } +func (rr *SMIMEA) Header() *RR_Header { return &rr.Hdr } +func (rr *SOA) Header() *RR_Header { return &rr.Hdr } +func (rr *SPF) Header() *RR_Header { return &rr.Hdr } +func (rr *SRV) Header() *RR_Header { return &rr.Hdr } +func (rr *SSHFP) Header() *RR_Header { return &rr.Hdr } +func (rr *TA) Header() *RR_Header { return &rr.Hdr } +func (rr *TALINK) Header() *RR_Header { return &rr.Hdr } +func (rr *TKEY) Header() *RR_Header { return &rr.Hdr } +func (rr *TLSA) Header() *RR_Header { return &rr.Hdr } +func (rr *TSIG) Header() *RR_Header { return &rr.Hdr } +func (rr *TXT) Header() *RR_Header { return &rr.Hdr } +func (rr *UID) Header() *RR_Header { return &rr.Hdr } +func (rr *UINFO) Header() *RR_Header { return &rr.Hdr } +func (rr *URI) Header() *RR_Header { return &rr.Hdr } +func (rr *X25) Header() *RR_Header { return &rr.Hdr } + +// len() functions +func (rr *A) len() int { + l := rr.Hdr.len() + l += net.IPv4len // A + return l +} +func (rr *AAAA) len() int { + l := rr.Hdr.len() + l += net.IPv6len // AAAA + return l +} +func (rr *AFSDB) len() int { + l := rr.Hdr.len() + l += 2 // Subtype + l += len(rr.Hostname) + 1 + return l +} +func (rr *ANY) len() int { + l := rr.Hdr.len() + return l +} +func (rr *AVC) len() int { + l := rr.Hdr.len() + for _, x := range rr.Txt { + l += len(x) + 1 + } + return l +} +func (rr *CAA) len() int { + l := rr.Hdr.len() + l++ // Flag + l += len(rr.Tag) + 1 + l += len(rr.Value) + return l +} +func (rr *CERT) len() int { + l := rr.Hdr.len() + l += 2 // Type + l += 2 // KeyTag + l++ // Algorithm + l += base64.StdEncoding.DecodedLen(len(rr.Certificate)) + return l +} +func (rr *CNAME) len() int { + l := rr.Hdr.len() + l += len(rr.Target) + 1 + return l +} +func (rr *DHCID) len() int { + l := rr.Hdr.len() + l += base64.StdEncoding.DecodedLen(len(rr.Digest)) + return l +} +func (rr *DNAME) len() int { + l := rr.Hdr.len() + l += len(rr.Target) + 1 + return l +} +func (rr *DNSKEY) len() int { + l := rr.Hdr.len() + l += 2 // Flags + l++ // Protocol + l++ // Algorithm + l += base64.StdEncoding.DecodedLen(len(rr.PublicKey)) + return l +} +func (rr *DS) len() int { + l := rr.Hdr.len() + l += 2 // KeyTag + l++ // Algorithm + l++ // DigestType + l += len(rr.Digest)/2 + 1 + return l +} +func (rr *EID) len() int { + l := rr.Hdr.len() + l += len(rr.Endpoint)/2 + 1 + return l +} +func (rr *EUI48) len() int { + l := rr.Hdr.len() + l += 6 // Address + return l +} +func (rr *EUI64) len() int { + l := rr.Hdr.len() + l += 8 // Address + return l +} +func (rr *GID) len() int { + l := rr.Hdr.len() + l += 4 // Gid + return l +} +func (rr *GPOS) len() int { + l := rr.Hdr.len() + l += len(rr.Longitude) + 1 + l += len(rr.Latitude) + 1 + l += len(rr.Altitude) + 1 + return l +} +func (rr *HINFO) len() int { + l := rr.Hdr.len() + l += len(rr.Cpu) + 1 + l += len(rr.Os) + 1 + return l +} +func (rr *HIP) len() int { + l := rr.Hdr.len() + l++ // HitLength + l++ // PublicKeyAlgorithm + l += 2 // PublicKeyLength + l += len(rr.Hit) / 2 + l += base64.StdEncoding.DecodedLen(len(rr.PublicKey)) + for _, x := range rr.RendezvousServers { + l += len(x) + 1 + } + return l +} +func (rr *KX) len() int { + l := rr.Hdr.len() + l += 2 // Preference + l += len(rr.Exchanger) + 1 + return l +} +func (rr *L32) len() int { + l := rr.Hdr.len() + l += 2 // Preference + l += net.IPv4len // Locator32 + return l +} +func (rr *L64) len() int { + l := rr.Hdr.len() + l += 2 // Preference + l += 8 // Locator64 + return l +} +func (rr *LOC) len() int { + l := rr.Hdr.len() + l++ // Version + l++ // Size + l++ // HorizPre + l++ // VertPre + l += 4 // Latitude + l += 4 // Longitude + l += 4 // Altitude + return l +} +func (rr *LP) len() int { + l := rr.Hdr.len() + l += 2 // Preference + l += len(rr.Fqdn) + 1 + return l +} +func (rr *MB) len() int { + l := rr.Hdr.len() + l += len(rr.Mb) + 1 + return l +} +func (rr *MD) len() int { + l := rr.Hdr.len() + l += len(rr.Md) + 1 + return l +} +func (rr *MF) len() int { + l := rr.Hdr.len() + l += len(rr.Mf) + 1 + return l +} +func (rr *MG) len() int { + l := rr.Hdr.len() + l += len(rr.Mg) + 1 + return l +} +func (rr *MINFO) len() int { + l := rr.Hdr.len() + l += len(rr.Rmail) + 1 + l += len(rr.Email) + 1 + return l +} +func (rr *MR) len() int { + l := rr.Hdr.len() + l += len(rr.Mr) + 1 + return l +} +func (rr *MX) len() int { + l := rr.Hdr.len() + l += 2 // Preference + l += len(rr.Mx) + 1 + return l +} +func (rr *NAPTR) len() int { + l := rr.Hdr.len() + l += 2 // Order + l += 2 // Preference + l += len(rr.Flags) + 1 + l += len(rr.Service) + 1 + l += len(rr.Regexp) + 1 + l += len(rr.Replacement) + 1 + return l +} +func (rr *NID) len() int { + l := rr.Hdr.len() + l += 2 // Preference + l += 8 // NodeID + return l +} +func (rr *NIMLOC) len() int { + l := rr.Hdr.len() + l += len(rr.Locator)/2 + 1 + return l +} +func (rr *NINFO) len() int { + l := rr.Hdr.len() + for _, x := range rr.ZSData { + l += len(x) + 1 + } + return l +} +func (rr *NS) len() int { + l := rr.Hdr.len() + l += len(rr.Ns) + 1 + return l +} +func (rr *NSAPPTR) len() int { + l := rr.Hdr.len() + l += len(rr.Ptr) + 1 + return l +} +func (rr *NSEC3PARAM) len() int { + l := rr.Hdr.len() + l++ // Hash + l++ // Flags + l += 2 // Iterations + l++ // SaltLength + l += len(rr.Salt) / 2 + return l +} +func (rr *OPENPGPKEY) len() int { + l := rr.Hdr.len() + l += base64.StdEncoding.DecodedLen(len(rr.PublicKey)) + return l +} +func (rr *PTR) len() int { + l := rr.Hdr.len() + l += len(rr.Ptr) + 1 + return l +} +func (rr *PX) len() int { + l := rr.Hdr.len() + l += 2 // Preference + l += len(rr.Map822) + 1 + l += len(rr.Mapx400) + 1 + return l +} +func (rr *RFC3597) len() int { + l := rr.Hdr.len() + l += len(rr.Rdata)/2 + 1 + return l +} +func (rr *RKEY) len() int { + l := rr.Hdr.len() + l += 2 // Flags + l++ // Protocol + l++ // Algorithm + l += base64.StdEncoding.DecodedLen(len(rr.PublicKey)) + return l +} +func (rr *RP) len() int { + l := rr.Hdr.len() + l += len(rr.Mbox) + 1 + l += len(rr.Txt) + 1 + return l +} +func (rr *RRSIG) len() int { + l := rr.Hdr.len() + l += 2 // TypeCovered + l++ // Algorithm + l++ // Labels + l += 4 // OrigTtl + l += 4 // Expiration + l += 4 // Inception + l += 2 // KeyTag + l += len(rr.SignerName) + 1 + l += base64.StdEncoding.DecodedLen(len(rr.Signature)) + return l +} +func (rr *RT) len() int { + l := rr.Hdr.len() + l += 2 // Preference + l += len(rr.Host) + 1 + return l +} +func (rr *SMIMEA) len() int { + l := rr.Hdr.len() + l++ // Usage + l++ // Selector + l++ // MatchingType + l += len(rr.Certificate)/2 + 1 + return l +} +func (rr *SOA) len() int { + l := rr.Hdr.len() + l += len(rr.Ns) + 1 + l += len(rr.Mbox) + 1 + l += 4 // Serial + l += 4 // Refresh + l += 4 // Retry + l += 4 // Expire + l += 4 // Minttl + return l +} +func (rr *SPF) len() int { + l := rr.Hdr.len() + for _, x := range rr.Txt { + l += len(x) + 1 + } + return l +} +func (rr *SRV) len() int { + l := rr.Hdr.len() + l += 2 // Priority + l += 2 // Weight + l += 2 // Port + l += len(rr.Target) + 1 + return l +} +func (rr *SSHFP) len() int { + l := rr.Hdr.len() + l++ // Algorithm + l++ // Type + l += len(rr.FingerPrint)/2 + 1 + return l +} +func (rr *TA) len() int { + l := rr.Hdr.len() + l += 2 // KeyTag + l++ // Algorithm + l++ // DigestType + l += len(rr.Digest)/2 + 1 + return l +} +func (rr *TALINK) len() int { + l := rr.Hdr.len() + l += len(rr.PreviousName) + 1 + l += len(rr.NextName) + 1 + return l +} +func (rr *TKEY) len() int { + l := rr.Hdr.len() + l += len(rr.Algorithm) + 1 + l += 4 // Inception + l += 4 // Expiration + l += 2 // Mode + l += 2 // Error + l += 2 // KeySize + l += len(rr.Key) / 2 + l += 2 // OtherLen + l += len(rr.OtherData) / 2 + return l +} +func (rr *TLSA) len() int { + l := rr.Hdr.len() + l++ // Usage + l++ // Selector + l++ // MatchingType + l += len(rr.Certificate)/2 + 1 + return l +} +func (rr *TSIG) len() int { + l := rr.Hdr.len() + l += len(rr.Algorithm) + 1 + l += 6 // TimeSigned + l += 2 // Fudge + l += 2 // MACSize + l += len(rr.MAC) / 2 + l += 2 // OrigId + l += 2 // Error + l += 2 // OtherLen + l += len(rr.OtherData) / 2 + return l +} +func (rr *TXT) len() int { + l := rr.Hdr.len() + for _, x := range rr.Txt { + l += len(x) + 1 + } + return l +} +func (rr *UID) len() int { + l := rr.Hdr.len() + l += 4 // Uid + return l +} +func (rr *UINFO) len() int { + l := rr.Hdr.len() + l += len(rr.Uinfo) + 1 + return l +} +func (rr *URI) len() int { + l := rr.Hdr.len() + l += 2 // Priority + l += 2 // Weight + l += len(rr.Target) + return l +} +func (rr *X25) len() int { + l := rr.Hdr.len() + l += len(rr.PSDNAddress) + 1 + return l +} + +// copy() functions +func (rr *A) copy() RR { + return &A{rr.Hdr, copyIP(rr.A)} +} +func (rr *AAAA) copy() RR { + return &AAAA{rr.Hdr, copyIP(rr.AAAA)} +} +func (rr *AFSDB) copy() RR { + return &AFSDB{rr.Hdr, rr.Subtype, rr.Hostname} +} +func (rr *ANY) copy() RR { + return &ANY{rr.Hdr} +} +func (rr *AVC) copy() RR { + Txt := make([]string, len(rr.Txt)) + copy(Txt, rr.Txt) + return &AVC{rr.Hdr, Txt} +} +func (rr *CAA) copy() RR { + return &CAA{rr.Hdr, rr.Flag, rr.Tag, rr.Value} +} +func (rr *CERT) copy() RR { + return &CERT{rr.Hdr, rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate} +} +func (rr *CNAME) copy() RR { + return &CNAME{rr.Hdr, rr.Target} +} +func (rr *CSYNC) copy() RR { + TypeBitMap := make([]uint16, len(rr.TypeBitMap)) + copy(TypeBitMap, rr.TypeBitMap) + return &CSYNC{rr.Hdr, rr.Serial, rr.Flags, TypeBitMap} +} +func (rr *DHCID) copy() RR { + return &DHCID{rr.Hdr, rr.Digest} +} +func (rr *DNAME) copy() RR { + return &DNAME{rr.Hdr, rr.Target} +} +func (rr *DNSKEY) copy() RR { + return &DNSKEY{rr.Hdr, rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey} +} +func (rr *DS) copy() RR { + return &DS{rr.Hdr, rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} +} +func (rr *EID) copy() RR { + return &EID{rr.Hdr, rr.Endpoint} +} +func (rr *EUI48) copy() RR { + return &EUI48{rr.Hdr, rr.Address} +} +func (rr *EUI64) copy() RR { + return &EUI64{rr.Hdr, rr.Address} +} +func (rr *GID) copy() RR { + return &GID{rr.Hdr, rr.Gid} +} +func (rr *GPOS) copy() RR { + return &GPOS{rr.Hdr, rr.Longitude, rr.Latitude, rr.Altitude} +} +func (rr *HINFO) copy() RR { + return &HINFO{rr.Hdr, rr.Cpu, rr.Os} +} +func (rr *HIP) copy() RR { + RendezvousServers := make([]string, len(rr.RendezvousServers)) + copy(RendezvousServers, rr.RendezvousServers) + return &HIP{rr.Hdr, rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, RendezvousServers} +} +func (rr *KX) copy() RR { + return &KX{rr.Hdr, rr.Preference, rr.Exchanger} +} +func (rr *L32) copy() RR { + return &L32{rr.Hdr, rr.Preference, copyIP(rr.Locator32)} +} +func (rr *L64) copy() RR { + return &L64{rr.Hdr, rr.Preference, rr.Locator64} +} +func (rr *LOC) copy() RR { + return &LOC{rr.Hdr, rr.Version, rr.Size, rr.HorizPre, rr.VertPre, rr.Latitude, rr.Longitude, rr.Altitude} +} +func (rr *LP) copy() RR { + return &LP{rr.Hdr, rr.Preference, rr.Fqdn} +} +func (rr *MB) copy() RR { + return &MB{rr.Hdr, rr.Mb} +} +func (rr *MD) copy() RR { + return &MD{rr.Hdr, rr.Md} +} +func (rr *MF) copy() RR { + return &MF{rr.Hdr, rr.Mf} +} +func (rr *MG) copy() RR { + return &MG{rr.Hdr, rr.Mg} +} +func (rr *MINFO) copy() RR { + return &MINFO{rr.Hdr, rr.Rmail, rr.Email} +} +func (rr *MR) copy() RR { + return &MR{rr.Hdr, rr.Mr} +} +func (rr *MX) copy() RR { + return &MX{rr.Hdr, rr.Preference, rr.Mx} +} +func (rr *NAPTR) copy() RR { + return &NAPTR{rr.Hdr, rr.Order, rr.Preference, rr.Flags, rr.Service, rr.Regexp, rr.Replacement} +} +func (rr *NID) copy() RR { + return &NID{rr.Hdr, rr.Preference, rr.NodeID} +} +func (rr *NIMLOC) copy() RR { + return &NIMLOC{rr.Hdr, rr.Locator} +} +func (rr *NINFO) copy() RR { + ZSData := make([]string, len(rr.ZSData)) + copy(ZSData, rr.ZSData) + return &NINFO{rr.Hdr, ZSData} +} +func (rr *NS) copy() RR { + return &NS{rr.Hdr, rr.Ns} +} +func (rr *NSAPPTR) copy() RR { + return &NSAPPTR{rr.Hdr, rr.Ptr} +} +func (rr *NSEC) copy() RR { + TypeBitMap := make([]uint16, len(rr.TypeBitMap)) + copy(TypeBitMap, rr.TypeBitMap) + return &NSEC{rr.Hdr, rr.NextDomain, TypeBitMap} +} +func (rr *NSEC3) copy() RR { + TypeBitMap := make([]uint16, len(rr.TypeBitMap)) + copy(TypeBitMap, rr.TypeBitMap) + return &NSEC3{rr.Hdr, rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt, rr.HashLength, rr.NextDomain, TypeBitMap} +} +func (rr *NSEC3PARAM) copy() RR { + return &NSEC3PARAM{rr.Hdr, rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt} +} +func (rr *OPENPGPKEY) copy() RR { + return &OPENPGPKEY{rr.Hdr, rr.PublicKey} +} +func (rr *OPT) copy() RR { + Option := make([]EDNS0, len(rr.Option)) + copy(Option, rr.Option) + return &OPT{rr.Hdr, Option} +} +func (rr *PTR) copy() RR { + return &PTR{rr.Hdr, rr.Ptr} +} +func (rr *PX) copy() RR { + return &PX{rr.Hdr, rr.Preference, rr.Map822, rr.Mapx400} +} +func (rr *RFC3597) copy() RR { + return &RFC3597{rr.Hdr, rr.Rdata} +} +func (rr *RKEY) copy() RR { + return &RKEY{rr.Hdr, rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey} +} +func (rr *RP) copy() RR { + return &RP{rr.Hdr, rr.Mbox, rr.Txt} +} +func (rr *RRSIG) copy() RR { + return &RRSIG{rr.Hdr, rr.TypeCovered, rr.Algorithm, rr.Labels, rr.OrigTtl, rr.Expiration, rr.Inception, rr.KeyTag, rr.SignerName, rr.Signature} +} +func (rr *RT) copy() RR { + return &RT{rr.Hdr, rr.Preference, rr.Host} +} +func (rr *SMIMEA) copy() RR { + return &SMIMEA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate} +} +func (rr *SOA) copy() RR { + return &SOA{rr.Hdr, rr.Ns, rr.Mbox, rr.Serial, rr.Refresh, rr.Retry, rr.Expire, rr.Minttl} +} +func (rr *SPF) copy() RR { + Txt := make([]string, len(rr.Txt)) + copy(Txt, rr.Txt) + return &SPF{rr.Hdr, Txt} +} +func (rr *SRV) copy() RR { + return &SRV{rr.Hdr, rr.Priority, rr.Weight, rr.Port, rr.Target} +} +func (rr *SSHFP) copy() RR { + return &SSHFP{rr.Hdr, rr.Algorithm, rr.Type, rr.FingerPrint} +} +func (rr *TA) copy() RR { + return &TA{rr.Hdr, rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest} +} +func (rr *TALINK) copy() RR { + return &TALINK{rr.Hdr, rr.PreviousName, rr.NextName} +} +func (rr *TKEY) copy() RR { + return &TKEY{rr.Hdr, rr.Algorithm, rr.Inception, rr.Expiration, rr.Mode, rr.Error, rr.KeySize, rr.Key, rr.OtherLen, rr.OtherData} +} +func (rr *TLSA) copy() RR { + return &TLSA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate} +} +func (rr *TSIG) copy() RR { + return &TSIG{rr.Hdr, rr.Algorithm, rr.TimeSigned, rr.Fudge, rr.MACSize, rr.MAC, rr.OrigId, rr.Error, rr.OtherLen, rr.OtherData} +} +func (rr *TXT) copy() RR { + Txt := make([]string, len(rr.Txt)) + copy(Txt, rr.Txt) + return &TXT{rr.Hdr, Txt} +} +func (rr *UID) copy() RR { + return &UID{rr.Hdr, rr.Uid} +} +func (rr *UINFO) copy() RR { + return &UINFO{rr.Hdr, rr.Uinfo} +} +func (rr *URI) copy() RR { + return &URI{rr.Hdr, rr.Priority, rr.Weight, rr.Target} +} +func (rr *X25) copy() RR { + return &X25{rr.Hdr, rr.PSDNAddress} +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/LICENSE new file mode 100644 index 00000000000..6a66aea5eaf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/PATENTS b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/PATENTS new file mode 100644 index 00000000000..733099041f8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/ed25519.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/ed25519.go new file mode 100644 index 00000000000..d6f683ba3f7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/ed25519.go @@ -0,0 +1,217 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ed25519 implements the Ed25519 signature algorithm. See +// https://ed25519.cr.yp.to/. +// +// These functions are also compatible with the “Ed25519” function defined in +// RFC 8032. However, unlike RFC 8032's formulation, this package's private key +// representation includes a public key suffix to make multiple signing +// operations with the same key more efficient. This package refers to the RFC +// 8032 private key as the “seed”. +package ed25519 + +// This code is a port of the public domain, “ref10” implementation of ed25519 +// from SUPERCOP. + +import ( + "bytes" + "crypto" + cryptorand "crypto/rand" + "crypto/sha512" + "errors" + "io" + "strconv" + + "golang.org/x/crypto/ed25519/internal/edwards25519" +) + +const ( + // PublicKeySize is the size, in bytes, of public keys as used in this package. + PublicKeySize = 32 + // PrivateKeySize is the size, in bytes, of private keys as used in this package. + PrivateKeySize = 64 + // SignatureSize is the size, in bytes, of signatures generated and verified by this package. + SignatureSize = 64 + // SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032. + SeedSize = 32 +) + +// PublicKey is the type of Ed25519 public keys. +type PublicKey []byte + +// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer. +type PrivateKey []byte + +// Public returns the PublicKey corresponding to priv. +func (priv PrivateKey) Public() crypto.PublicKey { + publicKey := make([]byte, PublicKeySize) + copy(publicKey, priv[32:]) + return PublicKey(publicKey) +} + +// Seed returns the private key seed corresponding to priv. It is provided for +// interoperability with RFC 8032. RFC 8032's private keys correspond to seeds +// in this package. +func (priv PrivateKey) Seed() []byte { + seed := make([]byte, SeedSize) + copy(seed, priv[:32]) + return seed +} + +// Sign signs the given message with priv. +// Ed25519 performs two passes over messages to be signed and therefore cannot +// handle pre-hashed messages. Thus opts.HashFunc() must return zero to +// indicate the message hasn't been hashed. This can be achieved by passing +// crypto.Hash(0) as the value for opts. +func (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error) { + if opts.HashFunc() != crypto.Hash(0) { + return nil, errors.New("ed25519: cannot sign hashed message") + } + + return Sign(priv, message), nil +} + +// GenerateKey generates a public/private key pair using entropy from rand. +// If rand is nil, crypto/rand.Reader will be used. +func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { + if rand == nil { + rand = cryptorand.Reader + } + + seed := make([]byte, SeedSize) + if _, err := io.ReadFull(rand, seed); err != nil { + return nil, nil, err + } + + privateKey := NewKeyFromSeed(seed) + publicKey := make([]byte, PublicKeySize) + copy(publicKey, privateKey[32:]) + + return publicKey, privateKey, nil +} + +// NewKeyFromSeed calculates a private key from a seed. It will panic if +// len(seed) is not SeedSize. This function is provided for interoperability +// with RFC 8032. RFC 8032's private keys correspond to seeds in this +// package. +func NewKeyFromSeed(seed []byte) PrivateKey { + if l := len(seed); l != SeedSize { + panic("ed25519: bad seed length: " + strconv.Itoa(l)) + } + + digest := sha512.Sum512(seed) + digest[0] &= 248 + digest[31] &= 127 + digest[31] |= 64 + + var A edwards25519.ExtendedGroupElement + var hBytes [32]byte + copy(hBytes[:], digest[:]) + edwards25519.GeScalarMultBase(&A, &hBytes) + var publicKeyBytes [32]byte + A.ToBytes(&publicKeyBytes) + + privateKey := make([]byte, PrivateKeySize) + copy(privateKey, seed) + copy(privateKey[32:], publicKeyBytes[:]) + + return privateKey +} + +// Sign signs the message with privateKey and returns a signature. It will +// panic if len(privateKey) is not PrivateKeySize. +func Sign(privateKey PrivateKey, message []byte) []byte { + if l := len(privateKey); l != PrivateKeySize { + panic("ed25519: bad private key length: " + strconv.Itoa(l)) + } + + h := sha512.New() + h.Write(privateKey[:32]) + + var digest1, messageDigest, hramDigest [64]byte + var expandedSecretKey [32]byte + h.Sum(digest1[:0]) + copy(expandedSecretKey[:], digest1[:]) + expandedSecretKey[0] &= 248 + expandedSecretKey[31] &= 63 + expandedSecretKey[31] |= 64 + + h.Reset() + h.Write(digest1[32:]) + h.Write(message) + h.Sum(messageDigest[:0]) + + var messageDigestReduced [32]byte + edwards25519.ScReduce(&messageDigestReduced, &messageDigest) + var R edwards25519.ExtendedGroupElement + edwards25519.GeScalarMultBase(&R, &messageDigestReduced) + + var encodedR [32]byte + R.ToBytes(&encodedR) + + h.Reset() + h.Write(encodedR[:]) + h.Write(privateKey[32:]) + h.Write(message) + h.Sum(hramDigest[:0]) + var hramDigestReduced [32]byte + edwards25519.ScReduce(&hramDigestReduced, &hramDigest) + + var s [32]byte + edwards25519.ScMulAdd(&s, &hramDigestReduced, &expandedSecretKey, &messageDigestReduced) + + signature := make([]byte, SignatureSize) + copy(signature[:], encodedR[:]) + copy(signature[32:], s[:]) + + return signature +} + +// Verify reports whether sig is a valid signature of message by publicKey. It +// will panic if len(publicKey) is not PublicKeySize. +func Verify(publicKey PublicKey, message, sig []byte) bool { + if l := len(publicKey); l != PublicKeySize { + panic("ed25519: bad public key length: " + strconv.Itoa(l)) + } + + if len(sig) != SignatureSize || sig[63]&224 != 0 { + return false + } + + var A edwards25519.ExtendedGroupElement + var publicKeyBytes [32]byte + copy(publicKeyBytes[:], publicKey) + if !A.FromBytes(&publicKeyBytes) { + return false + } + edwards25519.FeNeg(&A.X, &A.X) + edwards25519.FeNeg(&A.T, &A.T) + + h := sha512.New() + h.Write(sig[:32]) + h.Write(publicKey[:]) + h.Write(message) + var digest [64]byte + h.Sum(digest[:0]) + + var hReduced [32]byte + edwards25519.ScReduce(&hReduced, &digest) + + var R edwards25519.ProjectiveGroupElement + var s [32]byte + copy(s[:], sig[32:]) + + // https://tools.ietf.org/html/rfc8032#section-5.1.7 requires that s be in + // the range [0, order) in order to prevent signature malleability. + if !edwards25519.ScMinimal(&s) { + return false + } + + edwards25519.GeDoubleScalarMultVartime(&R, &hReduced, &A, &s) + + var checkR [32]byte + R.ToBytes(&checkR) + return bytes.Equal(sig[:32], checkR[:]) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go new file mode 100644 index 00000000000..e39f086c1d8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go @@ -0,0 +1,1422 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package edwards25519 + +// These values are from the public domain, “ref10” implementation of ed25519 +// from SUPERCOP. + +// d is a constant in the Edwards curve equation. +var d = FieldElement{ + -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116, +} + +// d2 is 2*d. +var d2 = FieldElement{ + -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199, +} + +// SqrtM1 is the square-root of -1 in the field. +var SqrtM1 = FieldElement{ + -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482, +} + +// A is a constant in the Montgomery-form of curve25519. +var A = FieldElement{ + 486662, 0, 0, 0, 0, 0, 0, 0, 0, 0, +} + +// bi contains precomputed multiples of the base-point. See the Ed25519 paper +// for a discussion about how these values are used. +var bi = [8]PreComputedGroupElement{ + { + FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, + }, + { + FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, + }, + { + FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, + }, + { + FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, + }, + { + FieldElement{-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877}, + FieldElement{-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951}, + FieldElement{4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784}, + }, + { + FieldElement{-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436}, + FieldElement{25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918}, + FieldElement{23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877}, + }, + { + FieldElement{-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800}, + FieldElement{-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305}, + FieldElement{-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300}, + }, + { + FieldElement{-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876}, + FieldElement{-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619}, + FieldElement{-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683}, + }, +} + +// base contains precomputed multiples of the base-point. See the Ed25519 paper +// for a discussion about how these values are used. +var base = [32][8]PreComputedGroupElement{ + { + { + FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, + }, + { + FieldElement{-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303}, + FieldElement{-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081}, + FieldElement{26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697}, + }, + { + FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, + }, + { + FieldElement{-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540}, + FieldElement{23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397}, + FieldElement{7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325}, + }, + { + FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, + }, + { + FieldElement{-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777}, + FieldElement{-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737}, + FieldElement{-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652}, + }, + { + FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, + }, + { + FieldElement{14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726}, + FieldElement{-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955}, + FieldElement{27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425}, + }, + }, + { + { + FieldElement{-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171}, + FieldElement{27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510}, + FieldElement{17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660}, + }, + { + FieldElement{-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639}, + FieldElement{29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963}, + FieldElement{5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950}, + }, + { + FieldElement{-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568}, + FieldElement{12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335}, + FieldElement{25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628}, + }, + { + FieldElement{-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007}, + FieldElement{-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772}, + FieldElement{-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653}, + }, + { + FieldElement{2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567}, + FieldElement{13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686}, + FieldElement{21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372}, + }, + { + FieldElement{-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887}, + FieldElement{-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954}, + FieldElement{-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953}, + }, + { + FieldElement{24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833}, + FieldElement{-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532}, + FieldElement{-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876}, + }, + { + FieldElement{2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268}, + FieldElement{33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214}, + FieldElement{1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038}, + }, + }, + { + { + FieldElement{6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800}, + FieldElement{4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645}, + FieldElement{-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664}, + }, + { + FieldElement{1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933}, + FieldElement{-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182}, + FieldElement{-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222}, + }, + { + FieldElement{-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991}, + FieldElement{20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880}, + FieldElement{9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092}, + }, + { + FieldElement{-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295}, + FieldElement{19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788}, + FieldElement{8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553}, + }, + { + FieldElement{-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026}, + FieldElement{11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347}, + FieldElement{-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033}, + }, + { + FieldElement{-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395}, + FieldElement{-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278}, + FieldElement{1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890}, + }, + { + FieldElement{32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995}, + FieldElement{-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596}, + FieldElement{-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891}, + }, + { + FieldElement{31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060}, + FieldElement{11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608}, + FieldElement{-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606}, + }, + }, + { + { + FieldElement{7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389}, + FieldElement{-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016}, + FieldElement{-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341}, + }, + { + FieldElement{-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505}, + FieldElement{14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553}, + FieldElement{-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655}, + }, + { + FieldElement{15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220}, + FieldElement{12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631}, + FieldElement{-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099}, + }, + { + FieldElement{26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556}, + FieldElement{14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749}, + FieldElement{236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930}, + }, + { + FieldElement{1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391}, + FieldElement{5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253}, + FieldElement{20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066}, + }, + { + FieldElement{24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958}, + FieldElement{-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082}, + FieldElement{-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383}, + }, + { + FieldElement{-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521}, + FieldElement{-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807}, + FieldElement{23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948}, + }, + { + FieldElement{9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134}, + FieldElement{-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455}, + FieldElement{27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629}, + }, + }, + { + { + FieldElement{-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069}, + FieldElement{-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746}, + FieldElement{24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919}, + }, + { + FieldElement{11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837}, + FieldElement{8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906}, + FieldElement{-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771}, + }, + { + FieldElement{-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817}, + FieldElement{10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098}, + FieldElement{10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409}, + }, + { + FieldElement{-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504}, + FieldElement{-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727}, + FieldElement{28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420}, + }, + { + FieldElement{-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003}, + FieldElement{-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605}, + FieldElement{-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384}, + }, + { + FieldElement{-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701}, + FieldElement{-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683}, + FieldElement{29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708}, + }, + { + FieldElement{-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563}, + FieldElement{-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260}, + FieldElement{-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387}, + }, + { + FieldElement{-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672}, + FieldElement{23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686}, + FieldElement{-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665}, + }, + }, + { + { + FieldElement{11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182}, + FieldElement{-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277}, + FieldElement{14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628}, + }, + { + FieldElement{-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474}, + FieldElement{-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539}, + FieldElement{-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822}, + }, + { + FieldElement{-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970}, + FieldElement{19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756}, + FieldElement{-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508}, + }, + { + FieldElement{-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683}, + FieldElement{-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655}, + FieldElement{-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158}, + }, + { + FieldElement{-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125}, + FieldElement{-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839}, + FieldElement{-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664}, + }, + { + FieldElement{27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294}, + FieldElement{-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899}, + FieldElement{-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070}, + }, + { + FieldElement{3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294}, + FieldElement{-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949}, + FieldElement{-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083}, + }, + { + FieldElement{31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420}, + FieldElement{-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940}, + FieldElement{29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396}, + }, + }, + { + { + FieldElement{-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567}, + FieldElement{20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127}, + FieldElement{-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294}, + }, + { + FieldElement{-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887}, + FieldElement{22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964}, + FieldElement{16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195}, + }, + { + FieldElement{9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244}, + FieldElement{24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999}, + FieldElement{-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762}, + }, + { + FieldElement{-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274}, + FieldElement{-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236}, + FieldElement{-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605}, + }, + { + FieldElement{-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761}, + FieldElement{-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884}, + FieldElement{-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482}, + }, + { + FieldElement{-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638}, + FieldElement{-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490}, + FieldElement{-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170}, + }, + { + FieldElement{5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736}, + FieldElement{10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124}, + FieldElement{-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392}, + }, + { + FieldElement{8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029}, + FieldElement{6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048}, + FieldElement{28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958}, + }, + }, + { + { + FieldElement{24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593}, + FieldElement{26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071}, + FieldElement{-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692}, + }, + { + FieldElement{11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687}, + FieldElement{-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441}, + FieldElement{-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001}, + }, + { + FieldElement{-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460}, + FieldElement{-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007}, + FieldElement{-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762}, + }, + { + FieldElement{15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005}, + FieldElement{-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674}, + FieldElement{4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035}, + }, + { + FieldElement{7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590}, + FieldElement{-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957}, + FieldElement{-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812}, + }, + { + FieldElement{33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740}, + FieldElement{-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122}, + FieldElement{-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158}, + }, + { + FieldElement{8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885}, + FieldElement{26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140}, + FieldElement{19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857}, + }, + { + FieldElement{801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155}, + FieldElement{19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260}, + FieldElement{19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483}, + }, + }, + { + { + FieldElement{-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677}, + FieldElement{32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815}, + FieldElement{22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751}, + }, + { + FieldElement{-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203}, + FieldElement{-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208}, + FieldElement{1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230}, + }, + { + FieldElement{16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850}, + FieldElement{-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389}, + FieldElement{-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968}, + }, + { + FieldElement{-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689}, + FieldElement{14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880}, + FieldElement{5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304}, + }, + { + FieldElement{30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632}, + FieldElement{-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412}, + FieldElement{20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566}, + }, + { + FieldElement{-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038}, + FieldElement{-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232}, + FieldElement{-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943}, + }, + { + FieldElement{17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856}, + FieldElement{23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738}, + FieldElement{15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971}, + }, + { + FieldElement{-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718}, + FieldElement{-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697}, + FieldElement{-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883}, + }, + }, + { + { + FieldElement{5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912}, + FieldElement{-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358}, + FieldElement{3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849}, + }, + { + FieldElement{29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307}, + FieldElement{-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977}, + FieldElement{-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335}, + }, + { + FieldElement{-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644}, + FieldElement{-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616}, + FieldElement{-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735}, + }, + { + FieldElement{-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099}, + FieldElement{29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341}, + FieldElement{-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336}, + }, + { + FieldElement{-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646}, + FieldElement{31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425}, + FieldElement{-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388}, + }, + { + FieldElement{-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743}, + FieldElement{-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822}, + FieldElement{-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462}, + }, + { + FieldElement{18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985}, + FieldElement{9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702}, + FieldElement{-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797}, + }, + { + FieldElement{21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293}, + FieldElement{27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100}, + FieldElement{19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688}, + }, + }, + { + { + FieldElement{12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186}, + FieldElement{2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610}, + FieldElement{-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707}, + }, + { + FieldElement{7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220}, + FieldElement{915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025}, + FieldElement{32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044}, + }, + { + FieldElement{32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992}, + FieldElement{-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027}, + FieldElement{21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197}, + }, + { + FieldElement{8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901}, + FieldElement{31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952}, + FieldElement{19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878}, + }, + { + FieldElement{-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390}, + FieldElement{32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730}, + FieldElement{2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730}, + }, + { + FieldElement{-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180}, + FieldElement{-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272}, + FieldElement{-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715}, + }, + { + FieldElement{-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970}, + FieldElement{-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772}, + FieldElement{-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865}, + }, + { + FieldElement{15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750}, + FieldElement{20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373}, + FieldElement{32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348}, + }, + }, + { + { + FieldElement{9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144}, + FieldElement{-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195}, + FieldElement{5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086}, + }, + { + FieldElement{-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684}, + FieldElement{-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518}, + FieldElement{-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233}, + }, + { + FieldElement{-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793}, + FieldElement{-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794}, + FieldElement{580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435}, + }, + { + FieldElement{23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921}, + FieldElement{13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518}, + FieldElement{2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563}, + }, + { + FieldElement{14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278}, + FieldElement{-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024}, + FieldElement{4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030}, + }, + { + FieldElement{10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783}, + FieldElement{27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717}, + FieldElement{6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844}, + }, + { + FieldElement{14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333}, + FieldElement{16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048}, + FieldElement{22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760}, + }, + { + FieldElement{-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760}, + FieldElement{-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757}, + FieldElement{-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112}, + }, + }, + { + { + FieldElement{-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468}, + FieldElement{3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184}, + FieldElement{10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289}, + }, + { + FieldElement{15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066}, + FieldElement{24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882}, + FieldElement{13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226}, + }, + { + FieldElement{16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101}, + FieldElement{29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279}, + FieldElement{-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811}, + }, + { + FieldElement{27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709}, + FieldElement{20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714}, + FieldElement{-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121}, + }, + { + FieldElement{9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464}, + FieldElement{12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847}, + FieldElement{13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400}, + }, + { + FieldElement{4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414}, + FieldElement{-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158}, + FieldElement{17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045}, + }, + { + FieldElement{-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415}, + FieldElement{-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459}, + FieldElement{-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079}, + }, + { + FieldElement{21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412}, + FieldElement{-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743}, + FieldElement{-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836}, + }, + }, + { + { + FieldElement{12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022}, + FieldElement{18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429}, + FieldElement{-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065}, + }, + { + FieldElement{30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861}, + FieldElement{10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000}, + FieldElement{-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101}, + }, + { + FieldElement{32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815}, + FieldElement{29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642}, + FieldElement{10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966}, + }, + { + FieldElement{25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574}, + FieldElement{-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742}, + FieldElement{-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689}, + }, + { + FieldElement{12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020}, + FieldElement{-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772}, + FieldElement{3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982}, + }, + { + FieldElement{-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953}, + FieldElement{-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218}, + FieldElement{-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265}, + }, + { + FieldElement{29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073}, + FieldElement{-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325}, + FieldElement{-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798}, + }, + { + FieldElement{-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870}, + FieldElement{-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863}, + FieldElement{-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927}, + }, + }, + { + { + FieldElement{-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267}, + FieldElement{-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663}, + FieldElement{22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862}, + }, + { + FieldElement{-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673}, + FieldElement{15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943}, + FieldElement{15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020}, + }, + { + FieldElement{-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238}, + FieldElement{11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064}, + FieldElement{14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795}, + }, + { + FieldElement{15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052}, + FieldElement{-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904}, + FieldElement{29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531}, + }, + { + FieldElement{-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979}, + FieldElement{-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841}, + FieldElement{10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431}, + }, + { + FieldElement{10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324}, + FieldElement{-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940}, + FieldElement{10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320}, + }, + { + FieldElement{-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184}, + FieldElement{14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114}, + FieldElement{30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878}, + }, + { + FieldElement{12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784}, + FieldElement{-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091}, + FieldElement{-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585}, + }, + }, + { + { + FieldElement{-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208}, + FieldElement{10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864}, + FieldElement{17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661}, + }, + { + FieldElement{7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233}, + FieldElement{26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212}, + FieldElement{-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525}, + }, + { + FieldElement{-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068}, + FieldElement{9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397}, + FieldElement{-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988}, + }, + { + FieldElement{5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889}, + FieldElement{32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038}, + FieldElement{14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697}, + }, + { + FieldElement{20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875}, + FieldElement{-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905}, + FieldElement{-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656}, + }, + { + FieldElement{11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818}, + FieldElement{27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714}, + FieldElement{10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203}, + }, + { + FieldElement{20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931}, + FieldElement{-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024}, + FieldElement{-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084}, + }, + { + FieldElement{-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204}, + FieldElement{20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817}, + FieldElement{27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667}, + }, + }, + { + { + FieldElement{11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504}, + FieldElement{-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768}, + FieldElement{-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255}, + }, + { + FieldElement{6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790}, + FieldElement{1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438}, + FieldElement{-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333}, + }, + { + FieldElement{17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971}, + FieldElement{31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905}, + FieldElement{29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409}, + }, + { + FieldElement{12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409}, + FieldElement{6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499}, + FieldElement{-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363}, + }, + { + FieldElement{28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664}, + FieldElement{-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324}, + FieldElement{-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940}, + }, + { + FieldElement{13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990}, + FieldElement{-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914}, + FieldElement{-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290}, + }, + { + FieldElement{24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257}, + FieldElement{-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433}, + FieldElement{-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236}, + }, + { + FieldElement{-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045}, + FieldElement{11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093}, + FieldElement{-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347}, + }, + }, + { + { + FieldElement{-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191}, + FieldElement{-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507}, + FieldElement{-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906}, + }, + { + FieldElement{3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018}, + FieldElement{-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109}, + FieldElement{-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926}, + }, + { + FieldElement{-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528}, + FieldElement{8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625}, + FieldElement{-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286}, + }, + { + FieldElement{2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033}, + FieldElement{27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866}, + FieldElement{21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896}, + }, + { + FieldElement{30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075}, + FieldElement{26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347}, + FieldElement{-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437}, + }, + { + FieldElement{-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165}, + FieldElement{-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588}, + FieldElement{-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193}, + }, + { + FieldElement{-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017}, + FieldElement{-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883}, + FieldElement{21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961}, + }, + { + FieldElement{8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043}, + FieldElement{29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663}, + FieldElement{-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362}, + }, + }, + { + { + FieldElement{-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860}, + FieldElement{2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466}, + FieldElement{-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063}, + }, + { + FieldElement{-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997}, + FieldElement{-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295}, + FieldElement{-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369}, + }, + { + FieldElement{9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385}, + FieldElement{18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109}, + FieldElement{2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906}, + }, + { + FieldElement{4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424}, + FieldElement{-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185}, + FieldElement{7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962}, + }, + { + FieldElement{-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325}, + FieldElement{10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593}, + FieldElement{696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404}, + }, + { + FieldElement{-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644}, + FieldElement{17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801}, + FieldElement{26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804}, + }, + { + FieldElement{-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884}, + FieldElement{-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577}, + FieldElement{-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849}, + }, + { + FieldElement{32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473}, + FieldElement{-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644}, + FieldElement{-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319}, + }, + }, + { + { + FieldElement{-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599}, + FieldElement{-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768}, + FieldElement{-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084}, + }, + { + FieldElement{-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328}, + FieldElement{-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369}, + FieldElement{20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920}, + }, + { + FieldElement{12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815}, + FieldElement{-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025}, + FieldElement{-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397}, + }, + { + FieldElement{-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448}, + FieldElement{6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981}, + FieldElement{30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165}, + }, + { + FieldElement{32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501}, + FieldElement{17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073}, + FieldElement{-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861}, + }, + { + FieldElement{14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845}, + FieldElement{-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211}, + FieldElement{18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870}, + }, + { + FieldElement{10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096}, + FieldElement{33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803}, + FieldElement{-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168}, + }, + { + FieldElement{30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965}, + FieldElement{-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505}, + FieldElement{18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598}, + }, + }, + { + { + FieldElement{5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782}, + FieldElement{5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900}, + FieldElement{-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479}, + }, + { + FieldElement{-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208}, + FieldElement{8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232}, + FieldElement{17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719}, + }, + { + FieldElement{16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271}, + FieldElement{-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326}, + FieldElement{-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132}, + }, + { + FieldElement{14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300}, + FieldElement{8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570}, + FieldElement{15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670}, + }, + { + FieldElement{-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994}, + FieldElement{-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913}, + FieldElement{31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317}, + }, + { + FieldElement{-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730}, + FieldElement{842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096}, + FieldElement{-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078}, + }, + { + FieldElement{-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411}, + FieldElement{-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905}, + FieldElement{-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654}, + }, + { + FieldElement{-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870}, + FieldElement{-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498}, + FieldElement{12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579}, + }, + }, + { + { + FieldElement{14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677}, + FieldElement{10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647}, + FieldElement{-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743}, + }, + { + FieldElement{-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468}, + FieldElement{21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375}, + FieldElement{-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155}, + }, + { + FieldElement{6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725}, + FieldElement{-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612}, + FieldElement{-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943}, + }, + { + FieldElement{-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944}, + FieldElement{30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928}, + FieldElement{9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406}, + }, + { + FieldElement{22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139}, + FieldElement{-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963}, + FieldElement{-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693}, + }, + { + FieldElement{1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734}, + FieldElement{-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680}, + FieldElement{-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410}, + }, + { + FieldElement{-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931}, + FieldElement{-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654}, + FieldElement{22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710}, + }, + { + FieldElement{29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180}, + FieldElement{-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684}, + FieldElement{-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895}, + }, + }, + { + { + FieldElement{22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501}, + FieldElement{-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413}, + FieldElement{6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880}, + }, + { + FieldElement{-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874}, + FieldElement{22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962}, + FieldElement{-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899}, + }, + { + FieldElement{21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152}, + FieldElement{9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063}, + FieldElement{7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080}, + }, + { + FieldElement{-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146}, + FieldElement{-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183}, + FieldElement{-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133}, + }, + { + FieldElement{-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421}, + FieldElement{-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622}, + FieldElement{-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197}, + }, + { + FieldElement{2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663}, + FieldElement{31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753}, + FieldElement{4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755}, + }, + { + FieldElement{-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862}, + FieldElement{-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118}, + FieldElement{26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171}, + }, + { + FieldElement{15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380}, + FieldElement{16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824}, + FieldElement{28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270}, + }, + }, + { + { + FieldElement{-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438}, + FieldElement{-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584}, + FieldElement{-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562}, + }, + { + FieldElement{30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471}, + FieldElement{18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610}, + FieldElement{19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269}, + }, + { + FieldElement{-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650}, + FieldElement{14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369}, + FieldElement{19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461}, + }, + { + FieldElement{30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462}, + FieldElement{-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793}, + FieldElement{-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218}, + }, + { + FieldElement{-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226}, + FieldElement{18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019}, + FieldElement{-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037}, + }, + { + FieldElement{31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171}, + FieldElement{-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132}, + FieldElement{-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841}, + }, + { + FieldElement{21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181}, + FieldElement{-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210}, + FieldElement{-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040}, + }, + { + FieldElement{3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935}, + FieldElement{24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105}, + FieldElement{-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814}, + }, + }, + { + { + FieldElement{793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852}, + FieldElement{5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581}, + FieldElement{-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646}, + }, + { + FieldElement{10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844}, + FieldElement{10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025}, + FieldElement{27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453}, + }, + { + FieldElement{-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068}, + FieldElement{4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192}, + FieldElement{-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921}, + }, + { + FieldElement{-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259}, + FieldElement{-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426}, + FieldElement{-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072}, + }, + { + FieldElement{-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305}, + FieldElement{13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832}, + FieldElement{28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943}, + }, + { + FieldElement{-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011}, + FieldElement{24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447}, + FieldElement{17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494}, + }, + { + FieldElement{-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245}, + FieldElement{-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859}, + FieldElement{28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915}, + }, + { + FieldElement{16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707}, + FieldElement{10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848}, + FieldElement{-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224}, + }, + }, + { + { + FieldElement{-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391}, + FieldElement{15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215}, + FieldElement{-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101}, + }, + { + FieldElement{23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713}, + FieldElement{21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849}, + FieldElement{-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930}, + }, + { + FieldElement{-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940}, + FieldElement{-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031}, + FieldElement{-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404}, + }, + { + FieldElement{-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243}, + FieldElement{-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116}, + FieldElement{-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525}, + }, + { + FieldElement{-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509}, + FieldElement{-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883}, + FieldElement{15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865}, + }, + { + FieldElement{-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660}, + FieldElement{4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273}, + FieldElement{-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138}, + }, + { + FieldElement{-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560}, + FieldElement{-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135}, + FieldElement{2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941}, + }, + { + FieldElement{-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739}, + FieldElement{18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756}, + FieldElement{-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819}, + }, + }, + { + { + FieldElement{-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347}, + FieldElement{-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028}, + FieldElement{21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075}, + }, + { + FieldElement{16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799}, + FieldElement{-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609}, + FieldElement{-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817}, + }, + { + FieldElement{-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989}, + FieldElement{-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523}, + FieldElement{4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278}, + }, + { + FieldElement{31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045}, + FieldElement{19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377}, + FieldElement{24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480}, + }, + { + FieldElement{17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016}, + FieldElement{510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426}, + FieldElement{18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525}, + }, + { + FieldElement{13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396}, + FieldElement{9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080}, + FieldElement{12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892}, + }, + { + FieldElement{15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275}, + FieldElement{11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074}, + FieldElement{20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140}, + }, + { + FieldElement{-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717}, + FieldElement{-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101}, + FieldElement{24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127}, + }, + }, + { + { + FieldElement{-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632}, + FieldElement{-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415}, + FieldElement{-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160}, + }, + { + FieldElement{31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876}, + FieldElement{22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625}, + FieldElement{-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478}, + }, + { + FieldElement{27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164}, + FieldElement{26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595}, + FieldElement{-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248}, + }, + { + FieldElement{-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858}, + FieldElement{15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193}, + FieldElement{8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184}, + }, + { + FieldElement{-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942}, + FieldElement{-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635}, + FieldElement{21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948}, + }, + { + FieldElement{11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935}, + FieldElement{-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415}, + FieldElement{-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416}, + }, + { + FieldElement{-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018}, + FieldElement{4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778}, + FieldElement{366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659}, + }, + { + FieldElement{-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385}, + FieldElement{18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503}, + FieldElement{476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329}, + }, + }, + { + { + FieldElement{20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056}, + FieldElement{-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838}, + FieldElement{24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948}, + }, + { + FieldElement{-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691}, + FieldElement{-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118}, + FieldElement{-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517}, + }, + { + FieldElement{-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269}, + FieldElement{-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904}, + FieldElement{-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589}, + }, + { + FieldElement{-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193}, + FieldElement{-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910}, + FieldElement{-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930}, + }, + { + FieldElement{-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667}, + FieldElement{25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481}, + FieldElement{-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876}, + }, + { + FieldElement{22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640}, + FieldElement{-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278}, + FieldElement{-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112}, + }, + { + FieldElement{26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272}, + FieldElement{17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012}, + FieldElement{-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221}, + }, + { + FieldElement{30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046}, + FieldElement{13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345}, + FieldElement{-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310}, + }, + }, + { + { + FieldElement{19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937}, + FieldElement{31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636}, + FieldElement{-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008}, + }, + { + FieldElement{-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429}, + FieldElement{-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576}, + FieldElement{31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066}, + }, + { + FieldElement{-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490}, + FieldElement{-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104}, + FieldElement{33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053}, + }, + { + FieldElement{31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275}, + FieldElement{-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511}, + FieldElement{22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095}, + }, + { + FieldElement{-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439}, + FieldElement{23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939}, + FieldElement{-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424}, + }, + { + FieldElement{2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310}, + FieldElement{3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608}, + FieldElement{-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079}, + }, + { + FieldElement{-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101}, + FieldElement{21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418}, + FieldElement{18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576}, + }, + { + FieldElement{30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356}, + FieldElement{9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996}, + FieldElement{-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099}, + }, + }, + { + { + FieldElement{-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728}, + FieldElement{-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658}, + FieldElement{-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242}, + }, + { + FieldElement{-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001}, + FieldElement{-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766}, + FieldElement{18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373}, + }, + { + FieldElement{26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458}, + FieldElement{-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628}, + FieldElement{-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657}, + }, + { + FieldElement{-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062}, + FieldElement{25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616}, + FieldElement{31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014}, + }, + { + FieldElement{24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383}, + FieldElement{-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814}, + FieldElement{-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718}, + }, + { + FieldElement{30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417}, + FieldElement{2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222}, + FieldElement{33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444}, + }, + { + FieldElement{-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597}, + FieldElement{23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970}, + FieldElement{1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799}, + }, + { + FieldElement{-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647}, + FieldElement{13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511}, + FieldElement{-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032}, + }, + }, + { + { + FieldElement{9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834}, + FieldElement{-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461}, + FieldElement{29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062}, + }, + { + FieldElement{-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516}, + FieldElement{-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547}, + FieldElement{-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240}, + }, + { + FieldElement{-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038}, + FieldElement{-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741}, + FieldElement{16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103}, + }, + { + FieldElement{-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747}, + FieldElement{-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323}, + FieldElement{31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016}, + }, + { + FieldElement{-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373}, + FieldElement{15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228}, + FieldElement{-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141}, + }, + { + FieldElement{16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399}, + FieldElement{11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831}, + FieldElement{-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376}, + }, + { + FieldElement{-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313}, + FieldElement{-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958}, + FieldElement{-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577}, + }, + { + FieldElement{-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743}, + FieldElement{29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684}, + FieldElement{-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476}, + }, + }, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go new file mode 100644 index 00000000000..fd03c252af4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go @@ -0,0 +1,1793 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package edwards25519 + +import "encoding/binary" + +// This code is a port of the public domain, “ref10” implementation of ed25519 +// from SUPERCOP. + +// FieldElement represents an element of the field GF(2^255 - 19). An element +// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77 +// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on +// context. +type FieldElement [10]int32 + +var zero FieldElement + +func FeZero(fe *FieldElement) { + copy(fe[:], zero[:]) +} + +func FeOne(fe *FieldElement) { + FeZero(fe) + fe[0] = 1 +} + +func FeAdd(dst, a, b *FieldElement) { + dst[0] = a[0] + b[0] + dst[1] = a[1] + b[1] + dst[2] = a[2] + b[2] + dst[3] = a[3] + b[3] + dst[4] = a[4] + b[4] + dst[5] = a[5] + b[5] + dst[6] = a[6] + b[6] + dst[7] = a[7] + b[7] + dst[8] = a[8] + b[8] + dst[9] = a[9] + b[9] +} + +func FeSub(dst, a, b *FieldElement) { + dst[0] = a[0] - b[0] + dst[1] = a[1] - b[1] + dst[2] = a[2] - b[2] + dst[3] = a[3] - b[3] + dst[4] = a[4] - b[4] + dst[5] = a[5] - b[5] + dst[6] = a[6] - b[6] + dst[7] = a[7] - b[7] + dst[8] = a[8] - b[8] + dst[9] = a[9] - b[9] +} + +func FeCopy(dst, src *FieldElement) { + copy(dst[:], src[:]) +} + +// Replace (f,g) with (g,g) if b == 1; +// replace (f,g) with (f,g) if b == 0. +// +// Preconditions: b in {0,1}. +func FeCMove(f, g *FieldElement, b int32) { + b = -b + f[0] ^= b & (f[0] ^ g[0]) + f[1] ^= b & (f[1] ^ g[1]) + f[2] ^= b & (f[2] ^ g[2]) + f[3] ^= b & (f[3] ^ g[3]) + f[4] ^= b & (f[4] ^ g[4]) + f[5] ^= b & (f[5] ^ g[5]) + f[6] ^= b & (f[6] ^ g[6]) + f[7] ^= b & (f[7] ^ g[7]) + f[8] ^= b & (f[8] ^ g[8]) + f[9] ^= b & (f[9] ^ g[9]) +} + +func load3(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + return r +} + +func load4(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + r |= int64(in[3]) << 24 + return r +} + +func FeFromBytes(dst *FieldElement, src *[32]byte) { + h0 := load4(src[:]) + h1 := load3(src[4:]) << 6 + h2 := load3(src[7:]) << 5 + h3 := load3(src[10:]) << 3 + h4 := load3(src[13:]) << 2 + h5 := load4(src[16:]) + h6 := load3(src[20:]) << 7 + h7 := load3(src[23:]) << 5 + h8 := load3(src[26:]) << 4 + h9 := (load3(src[29:]) & 8388607) << 2 + + FeCombine(dst, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +// FeToBytes marshals h to s. +// Preconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Write p=2^255-19; q=floor(h/p). +// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). +// +// Proof: +// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. +// Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4. +// +// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). +// Then 0> 25 + q = (h[0] + q) >> 26 + q = (h[1] + q) >> 25 + q = (h[2] + q) >> 26 + q = (h[3] + q) >> 25 + q = (h[4] + q) >> 26 + q = (h[5] + q) >> 25 + q = (h[6] + q) >> 26 + q = (h[7] + q) >> 25 + q = (h[8] + q) >> 26 + q = (h[9] + q) >> 25 + + // Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. + h[0] += 19 * q + // Goal: Output h-2^255 q, which is between 0 and 2^255-20. + + carry[0] = h[0] >> 26 + h[1] += carry[0] + h[0] -= carry[0] << 26 + carry[1] = h[1] >> 25 + h[2] += carry[1] + h[1] -= carry[1] << 25 + carry[2] = h[2] >> 26 + h[3] += carry[2] + h[2] -= carry[2] << 26 + carry[3] = h[3] >> 25 + h[4] += carry[3] + h[3] -= carry[3] << 25 + carry[4] = h[4] >> 26 + h[5] += carry[4] + h[4] -= carry[4] << 26 + carry[5] = h[5] >> 25 + h[6] += carry[5] + h[5] -= carry[5] << 25 + carry[6] = h[6] >> 26 + h[7] += carry[6] + h[6] -= carry[6] << 26 + carry[7] = h[7] >> 25 + h[8] += carry[7] + h[7] -= carry[7] << 25 + carry[8] = h[8] >> 26 + h[9] += carry[8] + h[8] -= carry[8] << 26 + carry[9] = h[9] >> 25 + h[9] -= carry[9] << 25 + // h10 = carry9 + + // Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. + // Have h[0]+...+2^230 h[9] between 0 and 2^255-1; + // evidently 2^255 h10-2^255 q = 0. + // Goal: Output h[0]+...+2^230 h[9]. + + s[0] = byte(h[0] >> 0) + s[1] = byte(h[0] >> 8) + s[2] = byte(h[0] >> 16) + s[3] = byte((h[0] >> 24) | (h[1] << 2)) + s[4] = byte(h[1] >> 6) + s[5] = byte(h[1] >> 14) + s[6] = byte((h[1] >> 22) | (h[2] << 3)) + s[7] = byte(h[2] >> 5) + s[8] = byte(h[2] >> 13) + s[9] = byte((h[2] >> 21) | (h[3] << 5)) + s[10] = byte(h[3] >> 3) + s[11] = byte(h[3] >> 11) + s[12] = byte((h[3] >> 19) | (h[4] << 6)) + s[13] = byte(h[4] >> 2) + s[14] = byte(h[4] >> 10) + s[15] = byte(h[4] >> 18) + s[16] = byte(h[5] >> 0) + s[17] = byte(h[5] >> 8) + s[18] = byte(h[5] >> 16) + s[19] = byte((h[5] >> 24) | (h[6] << 1)) + s[20] = byte(h[6] >> 7) + s[21] = byte(h[6] >> 15) + s[22] = byte((h[6] >> 23) | (h[7] << 3)) + s[23] = byte(h[7] >> 5) + s[24] = byte(h[7] >> 13) + s[25] = byte((h[7] >> 21) | (h[8] << 4)) + s[26] = byte(h[8] >> 4) + s[27] = byte(h[8] >> 12) + s[28] = byte((h[8] >> 20) | (h[9] << 6)) + s[29] = byte(h[9] >> 2) + s[30] = byte(h[9] >> 10) + s[31] = byte(h[9] >> 18) +} + +func FeIsNegative(f *FieldElement) byte { + var s [32]byte + FeToBytes(&s, f) + return s[0] & 1 +} + +func FeIsNonZero(f *FieldElement) int32 { + var s [32]byte + FeToBytes(&s, f) + var x uint8 + for _, b := range s { + x |= b + } + x |= x >> 4 + x |= x >> 2 + x |= x >> 1 + return int32(x & 1) +} + +// FeNeg sets h = -f +// +// Preconditions: +// |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func FeNeg(h, f *FieldElement) { + h[0] = -f[0] + h[1] = -f[1] + h[2] = -f[2] + h[3] = -f[3] + h[4] = -f[4] + h[5] = -f[5] + h[6] = -f[6] + h[7] = -f[7] + h[8] = -f[8] + h[9] = -f[9] +} + +func FeCombine(h *FieldElement, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { + var c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 int64 + + /* + |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38)) + i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8 + |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19)) + i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9 + */ + + c0 = (h0 + (1 << 25)) >> 26 + h1 += c0 + h0 -= c0 << 26 + c4 = (h4 + (1 << 25)) >> 26 + h5 += c4 + h4 -= c4 << 26 + /* |h0| <= 2^25 */ + /* |h4| <= 2^25 */ + /* |h1| <= 1.51*2^58 */ + /* |h5| <= 1.51*2^58 */ + + c1 = (h1 + (1 << 24)) >> 25 + h2 += c1 + h1 -= c1 << 25 + c5 = (h5 + (1 << 24)) >> 25 + h6 += c5 + h5 -= c5 << 25 + /* |h1| <= 2^24; from now on fits into int32 */ + /* |h5| <= 2^24; from now on fits into int32 */ + /* |h2| <= 1.21*2^59 */ + /* |h6| <= 1.21*2^59 */ + + c2 = (h2 + (1 << 25)) >> 26 + h3 += c2 + h2 -= c2 << 26 + c6 = (h6 + (1 << 25)) >> 26 + h7 += c6 + h6 -= c6 << 26 + /* |h2| <= 2^25; from now on fits into int32 unchanged */ + /* |h6| <= 2^25; from now on fits into int32 unchanged */ + /* |h3| <= 1.51*2^58 */ + /* |h7| <= 1.51*2^58 */ + + c3 = (h3 + (1 << 24)) >> 25 + h4 += c3 + h3 -= c3 << 25 + c7 = (h7 + (1 << 24)) >> 25 + h8 += c7 + h7 -= c7 << 25 + /* |h3| <= 2^24; from now on fits into int32 unchanged */ + /* |h7| <= 2^24; from now on fits into int32 unchanged */ + /* |h4| <= 1.52*2^33 */ + /* |h8| <= 1.52*2^33 */ + + c4 = (h4 + (1 << 25)) >> 26 + h5 += c4 + h4 -= c4 << 26 + c8 = (h8 + (1 << 25)) >> 26 + h9 += c8 + h8 -= c8 << 26 + /* |h4| <= 2^25; from now on fits into int32 unchanged */ + /* |h8| <= 2^25; from now on fits into int32 unchanged */ + /* |h5| <= 1.01*2^24 */ + /* |h9| <= 1.51*2^58 */ + + c9 = (h9 + (1 << 24)) >> 25 + h0 += c9 * 19 + h9 -= c9 << 25 + /* |h9| <= 2^24; from now on fits into int32 unchanged */ + /* |h0| <= 1.8*2^37 */ + + c0 = (h0 + (1 << 25)) >> 26 + h1 += c0 + h0 -= c0 << 26 + /* |h0| <= 2^25; from now on fits into int32 unchanged */ + /* |h1| <= 1.01*2^24 */ + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// FeMul calculates h = f * g +// Can overlap h with f or g. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Notes on implementation strategy: +// +// Using schoolbook multiplication. +// Karatsuba would save a little in some cost models. +// +// Most multiplications by 2 and 19 are 32-bit precomputations; +// cheaper than 64-bit postcomputations. +// +// There is one remaining multiplication by 19 in the carry chain; +// one *19 precomputation can be merged into this, +// but the resulting data flow is considerably less clean. +// +// There are 12 carries below. +// 10 of them are 2-way parallelizable and vectorizable. +// Can get away with 11 carries, but then data flow is much deeper. +// +// With tighter constraints on inputs, can squeeze carries into int32. +func FeMul(h, f, g *FieldElement) { + f0 := int64(f[0]) + f1 := int64(f[1]) + f2 := int64(f[2]) + f3 := int64(f[3]) + f4 := int64(f[4]) + f5 := int64(f[5]) + f6 := int64(f[6]) + f7 := int64(f[7]) + f8 := int64(f[8]) + f9 := int64(f[9]) + + f1_2 := int64(2 * f[1]) + f3_2 := int64(2 * f[3]) + f5_2 := int64(2 * f[5]) + f7_2 := int64(2 * f[7]) + f9_2 := int64(2 * f[9]) + + g0 := int64(g[0]) + g1 := int64(g[1]) + g2 := int64(g[2]) + g3 := int64(g[3]) + g4 := int64(g[4]) + g5 := int64(g[5]) + g6 := int64(g[6]) + g7 := int64(g[7]) + g8 := int64(g[8]) + g9 := int64(g[9]) + + g1_19 := int64(19 * g[1]) /* 1.4*2^29 */ + g2_19 := int64(19 * g[2]) /* 1.4*2^30; still ok */ + g3_19 := int64(19 * g[3]) + g4_19 := int64(19 * g[4]) + g5_19 := int64(19 * g[5]) + g6_19 := int64(19 * g[6]) + g7_19 := int64(19 * g[7]) + g8_19 := int64(19 * g[8]) + g9_19 := int64(19 * g[9]) + + h0 := f0*g0 + f1_2*g9_19 + f2*g8_19 + f3_2*g7_19 + f4*g6_19 + f5_2*g5_19 + f6*g4_19 + f7_2*g3_19 + f8*g2_19 + f9_2*g1_19 + h1 := f0*g1 + f1*g0 + f2*g9_19 + f3*g8_19 + f4*g7_19 + f5*g6_19 + f6*g5_19 + f7*g4_19 + f8*g3_19 + f9*g2_19 + h2 := f0*g2 + f1_2*g1 + f2*g0 + f3_2*g9_19 + f4*g8_19 + f5_2*g7_19 + f6*g6_19 + f7_2*g5_19 + f8*g4_19 + f9_2*g3_19 + h3 := f0*g3 + f1*g2 + f2*g1 + f3*g0 + f4*g9_19 + f5*g8_19 + f6*g7_19 + f7*g6_19 + f8*g5_19 + f9*g4_19 + h4 := f0*g4 + f1_2*g3 + f2*g2 + f3_2*g1 + f4*g0 + f5_2*g9_19 + f6*g8_19 + f7_2*g7_19 + f8*g6_19 + f9_2*g5_19 + h5 := f0*g5 + f1*g4 + f2*g3 + f3*g2 + f4*g1 + f5*g0 + f6*g9_19 + f7*g8_19 + f8*g7_19 + f9*g6_19 + h6 := f0*g6 + f1_2*g5 + f2*g4 + f3_2*g3 + f4*g2 + f5_2*g1 + f6*g0 + f7_2*g9_19 + f8*g8_19 + f9_2*g7_19 + h7 := f0*g7 + f1*g6 + f2*g5 + f3*g4 + f4*g3 + f5*g2 + f6*g1 + f7*g0 + f8*g9_19 + f9*g8_19 + h8 := f0*g8 + f1_2*g7 + f2*g6 + f3_2*g5 + f4*g4 + f5_2*g3 + f6*g2 + f7_2*g1 + f8*g0 + f9_2*g9_19 + h9 := f0*g9 + f1*g8 + f2*g7 + f3*g6 + f4*g5 + f5*g4 + f6*g3 + f7*g2 + f8*g1 + f9*g0 + + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +func feSquare(f *FieldElement) (h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { + f0 := int64(f[0]) + f1 := int64(f[1]) + f2 := int64(f[2]) + f3 := int64(f[3]) + f4 := int64(f[4]) + f5 := int64(f[5]) + f6 := int64(f[6]) + f7 := int64(f[7]) + f8 := int64(f[8]) + f9 := int64(f[9]) + f0_2 := int64(2 * f[0]) + f1_2 := int64(2 * f[1]) + f2_2 := int64(2 * f[2]) + f3_2 := int64(2 * f[3]) + f4_2 := int64(2 * f[4]) + f5_2 := int64(2 * f[5]) + f6_2 := int64(2 * f[6]) + f7_2 := int64(2 * f[7]) + f5_38 := 38 * f5 // 1.31*2^30 + f6_19 := 19 * f6 // 1.31*2^30 + f7_38 := 38 * f7 // 1.31*2^30 + f8_19 := 19 * f8 // 1.31*2^30 + f9_38 := 38 * f9 // 1.31*2^30 + + h0 = f0*f0 + f1_2*f9_38 + f2_2*f8_19 + f3_2*f7_38 + f4_2*f6_19 + f5*f5_38 + h1 = f0_2*f1 + f2*f9_38 + f3_2*f8_19 + f4*f7_38 + f5_2*f6_19 + h2 = f0_2*f2 + f1_2*f1 + f3_2*f9_38 + f4_2*f8_19 + f5_2*f7_38 + f6*f6_19 + h3 = f0_2*f3 + f1_2*f2 + f4*f9_38 + f5_2*f8_19 + f6*f7_38 + h4 = f0_2*f4 + f1_2*f3_2 + f2*f2 + f5_2*f9_38 + f6_2*f8_19 + f7*f7_38 + h5 = f0_2*f5 + f1_2*f4 + f2_2*f3 + f6*f9_38 + f7_2*f8_19 + h6 = f0_2*f6 + f1_2*f5_2 + f2_2*f4 + f3_2*f3 + f7_2*f9_38 + f8*f8_19 + h7 = f0_2*f7 + f1_2*f6 + f2_2*f5 + f3_2*f4 + f8*f9_38 + h8 = f0_2*f8 + f1_2*f7_2 + f2_2*f6 + f3_2*f5_2 + f4*f4 + f9*f9_38 + h9 = f0_2*f9 + f1_2*f8 + f2_2*f7 + f3_2*f6 + f4_2*f5 + + return +} + +// FeSquare calculates h = f*f. Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func FeSquare(h, f *FieldElement) { + h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +// FeSquare2 sets h = 2 * f * f +// +// Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. +// See fe_mul.c for discussion of implementation strategy. +func FeSquare2(h, f *FieldElement) { + h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) + + h0 += h0 + h1 += h1 + h2 += h2 + h3 += h3 + h4 += h4 + h5 += h5 + h6 += h6 + h7 += h7 + h8 += h8 + h9 += h9 + + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +func FeInvert(out, z *FieldElement) { + var t0, t1, t2, t3 FieldElement + var i int + + FeSquare(&t0, z) // 2^1 + FeSquare(&t1, &t0) // 2^2 + for i = 1; i < 2; i++ { // 2^3 + FeSquare(&t1, &t1) + } + FeMul(&t1, z, &t1) // 2^3 + 2^0 + FeMul(&t0, &t0, &t1) // 2^3 + 2^1 + 2^0 + FeSquare(&t2, &t0) // 2^4 + 2^2 + 2^1 + FeMul(&t1, &t1, &t2) // 2^4 + 2^3 + 2^2 + 2^1 + 2^0 + FeSquare(&t2, &t1) // 5,4,3,2,1 + for i = 1; i < 5; i++ { // 9,8,7,6,5 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 9,8,7,6,5,4,3,2,1,0 + FeSquare(&t2, &t1) // 10..1 + for i = 1; i < 10; i++ { // 19..10 + FeSquare(&t2, &t2) + } + FeMul(&t2, &t2, &t1) // 19..0 + FeSquare(&t3, &t2) // 20..1 + for i = 1; i < 20; i++ { // 39..20 + FeSquare(&t3, &t3) + } + FeMul(&t2, &t3, &t2) // 39..0 + FeSquare(&t2, &t2) // 40..1 + for i = 1; i < 10; i++ { // 49..10 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 49..0 + FeSquare(&t2, &t1) // 50..1 + for i = 1; i < 50; i++ { // 99..50 + FeSquare(&t2, &t2) + } + FeMul(&t2, &t2, &t1) // 99..0 + FeSquare(&t3, &t2) // 100..1 + for i = 1; i < 100; i++ { // 199..100 + FeSquare(&t3, &t3) + } + FeMul(&t2, &t3, &t2) // 199..0 + FeSquare(&t2, &t2) // 200..1 + for i = 1; i < 50; i++ { // 249..50 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 249..0 + FeSquare(&t1, &t1) // 250..1 + for i = 1; i < 5; i++ { // 254..5 + FeSquare(&t1, &t1) + } + FeMul(out, &t1, &t0) // 254..5,3,1,0 +} + +func fePow22523(out, z *FieldElement) { + var t0, t1, t2 FieldElement + var i int + + FeSquare(&t0, z) + for i = 1; i < 1; i++ { + FeSquare(&t0, &t0) + } + FeSquare(&t1, &t0) + for i = 1; i < 2; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, z, &t1) + FeMul(&t0, &t0, &t1) + FeSquare(&t0, &t0) + for i = 1; i < 1; i++ { + FeSquare(&t0, &t0) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 5; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 10; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, &t1, &t0) + FeSquare(&t2, &t1) + for i = 1; i < 20; i++ { + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) + FeSquare(&t1, &t1) + for i = 1; i < 10; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 50; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, &t1, &t0) + FeSquare(&t2, &t1) + for i = 1; i < 100; i++ { + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) + FeSquare(&t1, &t1) + for i = 1; i < 50; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t0, &t0) + for i = 1; i < 2; i++ { + FeSquare(&t0, &t0) + } + FeMul(out, &t0, z) +} + +// Group elements are members of the elliptic curve -x^2 + y^2 = 1 + d * x^2 * +// y^2 where d = -121665/121666. +// +// Several representations are used: +// ProjectiveGroupElement: (X:Y:Z) satisfying x=X/Z, y=Y/Z +// ExtendedGroupElement: (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT +// CompletedGroupElement: ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T +// PreComputedGroupElement: (y+x,y-x,2dxy) + +type ProjectiveGroupElement struct { + X, Y, Z FieldElement +} + +type ExtendedGroupElement struct { + X, Y, Z, T FieldElement +} + +type CompletedGroupElement struct { + X, Y, Z, T FieldElement +} + +type PreComputedGroupElement struct { + yPlusX, yMinusX, xy2d FieldElement +} + +type CachedGroupElement struct { + yPlusX, yMinusX, Z, T2d FieldElement +} + +func (p *ProjectiveGroupElement) Zero() { + FeZero(&p.X) + FeOne(&p.Y) + FeOne(&p.Z) +} + +func (p *ProjectiveGroupElement) Double(r *CompletedGroupElement) { + var t0 FieldElement + + FeSquare(&r.X, &p.X) + FeSquare(&r.Z, &p.Y) + FeSquare2(&r.T, &p.Z) + FeAdd(&r.Y, &p.X, &p.Y) + FeSquare(&t0, &r.Y) + FeAdd(&r.Y, &r.Z, &r.X) + FeSub(&r.Z, &r.Z, &r.X) + FeSub(&r.X, &t0, &r.Y) + FeSub(&r.T, &r.T, &r.Z) +} + +func (p *ProjectiveGroupElement) ToBytes(s *[32]byte) { + var recip, x, y FieldElement + + FeInvert(&recip, &p.Z) + FeMul(&x, &p.X, &recip) + FeMul(&y, &p.Y, &recip) + FeToBytes(s, &y) + s[31] ^= FeIsNegative(&x) << 7 +} + +func (p *ExtendedGroupElement) Zero() { + FeZero(&p.X) + FeOne(&p.Y) + FeOne(&p.Z) + FeZero(&p.T) +} + +func (p *ExtendedGroupElement) Double(r *CompletedGroupElement) { + var q ProjectiveGroupElement + p.ToProjective(&q) + q.Double(r) +} + +func (p *ExtendedGroupElement) ToCached(r *CachedGroupElement) { + FeAdd(&r.yPlusX, &p.Y, &p.X) + FeSub(&r.yMinusX, &p.Y, &p.X) + FeCopy(&r.Z, &p.Z) + FeMul(&r.T2d, &p.T, &d2) +} + +func (p *ExtendedGroupElement) ToProjective(r *ProjectiveGroupElement) { + FeCopy(&r.X, &p.X) + FeCopy(&r.Y, &p.Y) + FeCopy(&r.Z, &p.Z) +} + +func (p *ExtendedGroupElement) ToBytes(s *[32]byte) { + var recip, x, y FieldElement + + FeInvert(&recip, &p.Z) + FeMul(&x, &p.X, &recip) + FeMul(&y, &p.Y, &recip) + FeToBytes(s, &y) + s[31] ^= FeIsNegative(&x) << 7 +} + +func (p *ExtendedGroupElement) FromBytes(s *[32]byte) bool { + var u, v, v3, vxx, check FieldElement + + FeFromBytes(&p.Y, s) + FeOne(&p.Z) + FeSquare(&u, &p.Y) + FeMul(&v, &u, &d) + FeSub(&u, &u, &p.Z) // y = y^2-1 + FeAdd(&v, &v, &p.Z) // v = dy^2+1 + + FeSquare(&v3, &v) + FeMul(&v3, &v3, &v) // v3 = v^3 + FeSquare(&p.X, &v3) + FeMul(&p.X, &p.X, &v) + FeMul(&p.X, &p.X, &u) // x = uv^7 + + fePow22523(&p.X, &p.X) // x = (uv^7)^((q-5)/8) + FeMul(&p.X, &p.X, &v3) + FeMul(&p.X, &p.X, &u) // x = uv^3(uv^7)^((q-5)/8) + + var tmpX, tmp2 [32]byte + + FeSquare(&vxx, &p.X) + FeMul(&vxx, &vxx, &v) + FeSub(&check, &vxx, &u) // vx^2-u + if FeIsNonZero(&check) == 1 { + FeAdd(&check, &vxx, &u) // vx^2+u + if FeIsNonZero(&check) == 1 { + return false + } + FeMul(&p.X, &p.X, &SqrtM1) + + FeToBytes(&tmpX, &p.X) + for i, v := range tmpX { + tmp2[31-i] = v + } + } + + if FeIsNegative(&p.X) != (s[31] >> 7) { + FeNeg(&p.X, &p.X) + } + + FeMul(&p.T, &p.X, &p.Y) + return true +} + +func (p *CompletedGroupElement) ToProjective(r *ProjectiveGroupElement) { + FeMul(&r.X, &p.X, &p.T) + FeMul(&r.Y, &p.Y, &p.Z) + FeMul(&r.Z, &p.Z, &p.T) +} + +func (p *CompletedGroupElement) ToExtended(r *ExtendedGroupElement) { + FeMul(&r.X, &p.X, &p.T) + FeMul(&r.Y, &p.Y, &p.Z) + FeMul(&r.Z, &p.Z, &p.T) + FeMul(&r.T, &p.X, &p.Y) +} + +func (p *PreComputedGroupElement) Zero() { + FeOne(&p.yPlusX) + FeOne(&p.yMinusX) + FeZero(&p.xy2d) +} + +func geAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yPlusX) + FeMul(&r.Y, &r.Y, &q.yMinusX) + FeMul(&r.T, &q.T2d, &p.T) + FeMul(&r.X, &p.Z, &q.Z) + FeAdd(&t0, &r.X, &r.X) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeAdd(&r.Z, &t0, &r.T) + FeSub(&r.T, &t0, &r.T) +} + +func geSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yMinusX) + FeMul(&r.Y, &r.Y, &q.yPlusX) + FeMul(&r.T, &q.T2d, &p.T) + FeMul(&r.X, &p.Z, &q.Z) + FeAdd(&t0, &r.X, &r.X) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeSub(&r.Z, &t0, &r.T) + FeAdd(&r.T, &t0, &r.T) +} + +func geMixedAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yPlusX) + FeMul(&r.Y, &r.Y, &q.yMinusX) + FeMul(&r.T, &q.xy2d, &p.T) + FeAdd(&t0, &p.Z, &p.Z) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeAdd(&r.Z, &t0, &r.T) + FeSub(&r.T, &t0, &r.T) +} + +func geMixedSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yMinusX) + FeMul(&r.Y, &r.Y, &q.yPlusX) + FeMul(&r.T, &q.xy2d, &p.T) + FeAdd(&t0, &p.Z, &p.Z) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeSub(&r.Z, &t0, &r.T) + FeAdd(&r.T, &t0, &r.T) +} + +func slide(r *[256]int8, a *[32]byte) { + for i := range r { + r[i] = int8(1 & (a[i>>3] >> uint(i&7))) + } + + for i := range r { + if r[i] != 0 { + for b := 1; b <= 6 && i+b < 256; b++ { + if r[i+b] != 0 { + if r[i]+(r[i+b]<= -15 { + r[i] -= r[i+b] << uint(b) + for k := i + b; k < 256; k++ { + if r[k] == 0 { + r[k] = 1 + break + } + r[k] = 0 + } + } else { + break + } + } + } + } + } +} + +// GeDoubleScalarMultVartime sets r = a*A + b*B +// where a = a[0]+256*a[1]+...+256^31 a[31]. +// and b = b[0]+256*b[1]+...+256^31 b[31]. +// B is the Ed25519 base point (x,4/5) with x positive. +func GeDoubleScalarMultVartime(r *ProjectiveGroupElement, a *[32]byte, A *ExtendedGroupElement, b *[32]byte) { + var aSlide, bSlide [256]int8 + var Ai [8]CachedGroupElement // A,3A,5A,7A,9A,11A,13A,15A + var t CompletedGroupElement + var u, A2 ExtendedGroupElement + var i int + + slide(&aSlide, a) + slide(&bSlide, b) + + A.ToCached(&Ai[0]) + A.Double(&t) + t.ToExtended(&A2) + + for i := 0; i < 7; i++ { + geAdd(&t, &A2, &Ai[i]) + t.ToExtended(&u) + u.ToCached(&Ai[i+1]) + } + + r.Zero() + + for i = 255; i >= 0; i-- { + if aSlide[i] != 0 || bSlide[i] != 0 { + break + } + } + + for ; i >= 0; i-- { + r.Double(&t) + + if aSlide[i] > 0 { + t.ToExtended(&u) + geAdd(&t, &u, &Ai[aSlide[i]/2]) + } else if aSlide[i] < 0 { + t.ToExtended(&u) + geSub(&t, &u, &Ai[(-aSlide[i])/2]) + } + + if bSlide[i] > 0 { + t.ToExtended(&u) + geMixedAdd(&t, &u, &bi[bSlide[i]/2]) + } else if bSlide[i] < 0 { + t.ToExtended(&u) + geMixedSub(&t, &u, &bi[(-bSlide[i])/2]) + } + + t.ToProjective(r) + } +} + +// equal returns 1 if b == c and 0 otherwise, assuming that b and c are +// non-negative. +func equal(b, c int32) int32 { + x := uint32(b ^ c) + x-- + return int32(x >> 31) +} + +// negative returns 1 if b < 0 and 0 otherwise. +func negative(b int32) int32 { + return (b >> 31) & 1 +} + +func PreComputedGroupElementCMove(t, u *PreComputedGroupElement, b int32) { + FeCMove(&t.yPlusX, &u.yPlusX, b) + FeCMove(&t.yMinusX, &u.yMinusX, b) + FeCMove(&t.xy2d, &u.xy2d, b) +} + +func selectPoint(t *PreComputedGroupElement, pos int32, b int32) { + var minusT PreComputedGroupElement + bNegative := negative(b) + bAbs := b - (((-bNegative) & b) << 1) + + t.Zero() + for i := int32(0); i < 8; i++ { + PreComputedGroupElementCMove(t, &base[pos][i], equal(bAbs, i+1)) + } + FeCopy(&minusT.yPlusX, &t.yMinusX) + FeCopy(&minusT.yMinusX, &t.yPlusX) + FeNeg(&minusT.xy2d, &t.xy2d) + PreComputedGroupElementCMove(t, &minusT, bNegative) +} + +// GeScalarMultBase computes h = a*B, where +// a = a[0]+256*a[1]+...+256^31 a[31] +// B is the Ed25519 base point (x,4/5) with x positive. +// +// Preconditions: +// a[31] <= 127 +func GeScalarMultBase(h *ExtendedGroupElement, a *[32]byte) { + var e [64]int8 + + for i, v := range a { + e[2*i] = int8(v & 15) + e[2*i+1] = int8((v >> 4) & 15) + } + + // each e[i] is between 0 and 15 and e[63] is between 0 and 7. + + carry := int8(0) + for i := 0; i < 63; i++ { + e[i] += carry + carry = (e[i] + 8) >> 4 + e[i] -= carry << 4 + } + e[63] += carry + // each e[i] is between -8 and 8. + + h.Zero() + var t PreComputedGroupElement + var r CompletedGroupElement + for i := int32(1); i < 64; i += 2 { + selectPoint(&t, i/2, int32(e[i])) + geMixedAdd(&r, h, &t) + r.ToExtended(h) + } + + var s ProjectiveGroupElement + + h.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToExtended(h) + + for i := int32(0); i < 64; i += 2 { + selectPoint(&t, i/2, int32(e[i])) + geMixedAdd(&r, h, &t) + r.ToExtended(h) + } +} + +// The scalars are GF(2^252 + 27742317777372353535851937790883648493). + +// Input: +// a[0]+256*a[1]+...+256^31*a[31] = a +// b[0]+256*b[1]+...+256^31*b[31] = b +// c[0]+256*c[1]+...+256^31*c[31] = c +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +func ScMulAdd(s, a, b, c *[32]byte) { + a0 := 2097151 & load3(a[:]) + a1 := 2097151 & (load4(a[2:]) >> 5) + a2 := 2097151 & (load3(a[5:]) >> 2) + a3 := 2097151 & (load4(a[7:]) >> 7) + a4 := 2097151 & (load4(a[10:]) >> 4) + a5 := 2097151 & (load3(a[13:]) >> 1) + a6 := 2097151 & (load4(a[15:]) >> 6) + a7 := 2097151 & (load3(a[18:]) >> 3) + a8 := 2097151 & load3(a[21:]) + a9 := 2097151 & (load4(a[23:]) >> 5) + a10 := 2097151 & (load3(a[26:]) >> 2) + a11 := (load4(a[28:]) >> 7) + b0 := 2097151 & load3(b[:]) + b1 := 2097151 & (load4(b[2:]) >> 5) + b2 := 2097151 & (load3(b[5:]) >> 2) + b3 := 2097151 & (load4(b[7:]) >> 7) + b4 := 2097151 & (load4(b[10:]) >> 4) + b5 := 2097151 & (load3(b[13:]) >> 1) + b6 := 2097151 & (load4(b[15:]) >> 6) + b7 := 2097151 & (load3(b[18:]) >> 3) + b8 := 2097151 & load3(b[21:]) + b9 := 2097151 & (load4(b[23:]) >> 5) + b10 := 2097151 & (load3(b[26:]) >> 2) + b11 := (load4(b[28:]) >> 7) + c0 := 2097151 & load3(c[:]) + c1 := 2097151 & (load4(c[2:]) >> 5) + c2 := 2097151 & (load3(c[5:]) >> 2) + c3 := 2097151 & (load4(c[7:]) >> 7) + c4 := 2097151 & (load4(c[10:]) >> 4) + c5 := 2097151 & (load3(c[13:]) >> 1) + c6 := 2097151 & (load4(c[15:]) >> 6) + c7 := 2097151 & (load3(c[18:]) >> 3) + c8 := 2097151 & load3(c[21:]) + c9 := 2097151 & (load4(c[23:]) >> 5) + c10 := 2097151 & (load3(c[26:]) >> 2) + c11 := (load4(c[28:]) >> 7) + var carry [23]int64 + + s0 := c0 + a0*b0 + s1 := c1 + a0*b1 + a1*b0 + s2 := c2 + a0*b2 + a1*b1 + a2*b0 + s3 := c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0 + s4 := c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0 + s5 := c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0 + s6 := c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0 + s7 := c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0 + s8 := c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0 + s9 := c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0 + s10 := c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0 + s11 := c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0 + s12 := a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1 + s13 := a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2 + s14 := a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3 + s15 := a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4 + s16 := a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5 + s17 := a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6 + s18 := a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7 + s19 := a8*b11 + a9*b10 + a10*b9 + a11*b8 + s20 := a9*b11 + a10*b10 + a11*b9 + s21 := a10*b11 + a11*b10 + s22 := a11 * b11 + s23 := int64(0) + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + carry[18] = (s18 + (1 << 20)) >> 21 + s19 += carry[18] + s18 -= carry[18] << 21 + carry[20] = (s20 + (1 << 20)) >> 21 + s21 += carry[20] + s20 -= carry[20] << 21 + carry[22] = (s22 + (1 << 20)) >> 21 + s23 += carry[22] + s22 -= carry[22] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + carry[17] = (s17 + (1 << 20)) >> 21 + s18 += carry[17] + s17 -= carry[17] << 21 + carry[19] = (s19 + (1 << 20)) >> 21 + s20 += carry[19] + s19 -= carry[19] << 21 + carry[21] = (s21 + (1 << 20)) >> 21 + s22 += carry[21] + s21 -= carry[21] << 21 + + s11 += s23 * 666643 + s12 += s23 * 470296 + s13 += s23 * 654183 + s14 -= s23 * 997805 + s15 += s23 * 136657 + s16 -= s23 * 683901 + s23 = 0 + + s10 += s22 * 666643 + s11 += s22 * 470296 + s12 += s22 * 654183 + s13 -= s22 * 997805 + s14 += s22 * 136657 + s15 -= s22 * 683901 + s22 = 0 + + s9 += s21 * 666643 + s10 += s21 * 470296 + s11 += s21 * 654183 + s12 -= s21 * 997805 + s13 += s21 * 136657 + s14 -= s21 * 683901 + s21 = 0 + + s8 += s20 * 666643 + s9 += s20 * 470296 + s10 += s20 * 654183 + s11 -= s20 * 997805 + s12 += s20 * 136657 + s13 -= s20 * 683901 + s20 = 0 + + s7 += s19 * 666643 + s8 += s19 * 470296 + s9 += s19 * 654183 + s10 -= s19 * 997805 + s11 += s19 * 136657 + s12 -= s19 * 683901 + s19 = 0 + + s6 += s18 * 666643 + s7 += s18 * 470296 + s8 += s18 * 654183 + s9 -= s18 * 997805 + s10 += s18 * 136657 + s11 -= s18 * 683901 + s18 = 0 + + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + + s5 += s17 * 666643 + s6 += s17 * 470296 + s7 += s17 * 654183 + s8 -= s17 * 997805 + s9 += s17 * 136657 + s10 -= s17 * 683901 + s17 = 0 + + s4 += s16 * 666643 + s5 += s16 * 470296 + s6 += s16 * 654183 + s7 -= s16 * 997805 + s8 += s16 * 136657 + s9 -= s16 * 683901 + s16 = 0 + + s3 += s15 * 666643 + s4 += s15 * 470296 + s5 += s15 * 654183 + s6 -= s15 * 997805 + s7 += s15 * 136657 + s8 -= s15 * 683901 + s15 = 0 + + s2 += s14 * 666643 + s3 += s14 * 470296 + s4 += s14 * 654183 + s5 -= s14 * 997805 + s6 += s14 * 136657 + s7 -= s14 * 683901 + s14 = 0 + + s1 += s13 * 666643 + s2 += s13 * 470296 + s3 += s13 * 654183 + s4 -= s13 * 997805 + s5 += s13 * 136657 + s6 -= s13 * 683901 + s13 = 0 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[11] = s11 >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + s[0] = byte(s0 >> 0) + s[1] = byte(s0 >> 8) + s[2] = byte((s0 >> 16) | (s1 << 5)) + s[3] = byte(s1 >> 3) + s[4] = byte(s1 >> 11) + s[5] = byte((s1 >> 19) | (s2 << 2)) + s[6] = byte(s2 >> 6) + s[7] = byte((s2 >> 14) | (s3 << 7)) + s[8] = byte(s3 >> 1) + s[9] = byte(s3 >> 9) + s[10] = byte((s3 >> 17) | (s4 << 4)) + s[11] = byte(s4 >> 4) + s[12] = byte(s4 >> 12) + s[13] = byte((s4 >> 20) | (s5 << 1)) + s[14] = byte(s5 >> 7) + s[15] = byte((s5 >> 15) | (s6 << 6)) + s[16] = byte(s6 >> 2) + s[17] = byte(s6 >> 10) + s[18] = byte((s6 >> 18) | (s7 << 3)) + s[19] = byte(s7 >> 5) + s[20] = byte(s7 >> 13) + s[21] = byte(s8 >> 0) + s[22] = byte(s8 >> 8) + s[23] = byte((s8 >> 16) | (s9 << 5)) + s[24] = byte(s9 >> 3) + s[25] = byte(s9 >> 11) + s[26] = byte((s9 >> 19) | (s10 << 2)) + s[27] = byte(s10 >> 6) + s[28] = byte((s10 >> 14) | (s11 << 7)) + s[29] = byte(s11 >> 1) + s[30] = byte(s11 >> 9) + s[31] = byte(s11 >> 17) +} + +// Input: +// s[0]+256*s[1]+...+256^63*s[63] = s +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = s mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +func ScReduce(out *[32]byte, s *[64]byte) { + s0 := 2097151 & load3(s[:]) + s1 := 2097151 & (load4(s[2:]) >> 5) + s2 := 2097151 & (load3(s[5:]) >> 2) + s3 := 2097151 & (load4(s[7:]) >> 7) + s4 := 2097151 & (load4(s[10:]) >> 4) + s5 := 2097151 & (load3(s[13:]) >> 1) + s6 := 2097151 & (load4(s[15:]) >> 6) + s7 := 2097151 & (load3(s[18:]) >> 3) + s8 := 2097151 & load3(s[21:]) + s9 := 2097151 & (load4(s[23:]) >> 5) + s10 := 2097151 & (load3(s[26:]) >> 2) + s11 := 2097151 & (load4(s[28:]) >> 7) + s12 := 2097151 & (load4(s[31:]) >> 4) + s13 := 2097151 & (load3(s[34:]) >> 1) + s14 := 2097151 & (load4(s[36:]) >> 6) + s15 := 2097151 & (load3(s[39:]) >> 3) + s16 := 2097151 & load3(s[42:]) + s17 := 2097151 & (load4(s[44:]) >> 5) + s18 := 2097151 & (load3(s[47:]) >> 2) + s19 := 2097151 & (load4(s[49:]) >> 7) + s20 := 2097151 & (load4(s[52:]) >> 4) + s21 := 2097151 & (load3(s[55:]) >> 1) + s22 := 2097151 & (load4(s[57:]) >> 6) + s23 := (load4(s[60:]) >> 3) + + s11 += s23 * 666643 + s12 += s23 * 470296 + s13 += s23 * 654183 + s14 -= s23 * 997805 + s15 += s23 * 136657 + s16 -= s23 * 683901 + s23 = 0 + + s10 += s22 * 666643 + s11 += s22 * 470296 + s12 += s22 * 654183 + s13 -= s22 * 997805 + s14 += s22 * 136657 + s15 -= s22 * 683901 + s22 = 0 + + s9 += s21 * 666643 + s10 += s21 * 470296 + s11 += s21 * 654183 + s12 -= s21 * 997805 + s13 += s21 * 136657 + s14 -= s21 * 683901 + s21 = 0 + + s8 += s20 * 666643 + s9 += s20 * 470296 + s10 += s20 * 654183 + s11 -= s20 * 997805 + s12 += s20 * 136657 + s13 -= s20 * 683901 + s20 = 0 + + s7 += s19 * 666643 + s8 += s19 * 470296 + s9 += s19 * 654183 + s10 -= s19 * 997805 + s11 += s19 * 136657 + s12 -= s19 * 683901 + s19 = 0 + + s6 += s18 * 666643 + s7 += s18 * 470296 + s8 += s18 * 654183 + s9 -= s18 * 997805 + s10 += s18 * 136657 + s11 -= s18 * 683901 + s18 = 0 + + var carry [17]int64 + + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + + s5 += s17 * 666643 + s6 += s17 * 470296 + s7 += s17 * 654183 + s8 -= s17 * 997805 + s9 += s17 * 136657 + s10 -= s17 * 683901 + s17 = 0 + + s4 += s16 * 666643 + s5 += s16 * 470296 + s6 += s16 * 654183 + s7 -= s16 * 997805 + s8 += s16 * 136657 + s9 -= s16 * 683901 + s16 = 0 + + s3 += s15 * 666643 + s4 += s15 * 470296 + s5 += s15 * 654183 + s6 -= s15 * 997805 + s7 += s15 * 136657 + s8 -= s15 * 683901 + s15 = 0 + + s2 += s14 * 666643 + s3 += s14 * 470296 + s4 += s14 * 654183 + s5 -= s14 * 997805 + s6 += s14 * 136657 + s7 -= s14 * 683901 + s14 = 0 + + s1 += s13 * 666643 + s2 += s13 * 470296 + s3 += s13 * 654183 + s4 -= s13 * 997805 + s5 += s13 * 136657 + s6 -= s13 * 683901 + s13 = 0 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[11] = s11 >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + out[0] = byte(s0 >> 0) + out[1] = byte(s0 >> 8) + out[2] = byte((s0 >> 16) | (s1 << 5)) + out[3] = byte(s1 >> 3) + out[4] = byte(s1 >> 11) + out[5] = byte((s1 >> 19) | (s2 << 2)) + out[6] = byte(s2 >> 6) + out[7] = byte((s2 >> 14) | (s3 << 7)) + out[8] = byte(s3 >> 1) + out[9] = byte(s3 >> 9) + out[10] = byte((s3 >> 17) | (s4 << 4)) + out[11] = byte(s4 >> 4) + out[12] = byte(s4 >> 12) + out[13] = byte((s4 >> 20) | (s5 << 1)) + out[14] = byte(s5 >> 7) + out[15] = byte((s5 >> 15) | (s6 << 6)) + out[16] = byte(s6 >> 2) + out[17] = byte(s6 >> 10) + out[18] = byte((s6 >> 18) | (s7 << 3)) + out[19] = byte(s7 >> 5) + out[20] = byte(s7 >> 13) + out[21] = byte(s8 >> 0) + out[22] = byte(s8 >> 8) + out[23] = byte((s8 >> 16) | (s9 << 5)) + out[24] = byte(s9 >> 3) + out[25] = byte(s9 >> 11) + out[26] = byte((s9 >> 19) | (s10 << 2)) + out[27] = byte(s10 >> 6) + out[28] = byte((s10 >> 14) | (s11 << 7)) + out[29] = byte(s11 >> 1) + out[30] = byte(s11 >> 9) + out[31] = byte(s11 >> 17) +} + +// order is the order of Curve25519 in little-endian form. +var order = [4]uint64{0x5812631a5cf5d3ed, 0x14def9dea2f79cd6, 0, 0x1000000000000000} + +// ScMinimal returns true if the given scalar is less than the order of the +// curve. +func ScMinimal(scalar *[32]byte) bool { + for i := 3; ; i-- { + v := binary.LittleEndian.Uint64(scalar[i*8:]) + if v > order[i] { + return false + } else if v < order[i] { + break + } else if i == 0 { + return false + } + } + + return true +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/LICENSE new file mode 100644 index 00000000000..6a66aea5eaf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/PATENTS b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/PATENTS new file mode 100644 index 00000000000..733099041f8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/asm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/asm.go new file mode 100644 index 00000000000..15e21b18122 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/asm.go @@ -0,0 +1,41 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bpf + +import "fmt" + +// Assemble converts insts into raw instructions suitable for loading +// into a BPF virtual machine. +// +// Currently, no optimization is attempted, the assembled program flow +// is exactly as provided. +func Assemble(insts []Instruction) ([]RawInstruction, error) { + ret := make([]RawInstruction, len(insts)) + var err error + for i, inst := range insts { + ret[i], err = inst.Assemble() + if err != nil { + return nil, fmt.Errorf("assembling instruction %d: %s", i+1, err) + } + } + return ret, nil +} + +// Disassemble attempts to parse raw back into +// Instructions. Unrecognized RawInstructions are assumed to be an +// extension not implemented by this package, and are passed through +// unchanged to the output. The allDecoded value reports whether insts +// contains no RawInstructions. +func Disassemble(raw []RawInstruction) (insts []Instruction, allDecoded bool) { + insts = make([]Instruction, len(raw)) + allDecoded = true + for i, r := range raw { + insts[i] = r.Disassemble() + if _, ok := insts[i].(RawInstruction); ok { + allDecoded = false + } + } + return insts, allDecoded +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/constants.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/constants.go new file mode 100644 index 00000000000..12f3ee835af --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/constants.go @@ -0,0 +1,222 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bpf + +// A Register is a register of the BPF virtual machine. +type Register uint16 + +const ( + // RegA is the accumulator register. RegA is always the + // destination register of ALU operations. + RegA Register = iota + // RegX is the indirection register, used by LoadIndirect + // operations. + RegX +) + +// An ALUOp is an arithmetic or logic operation. +type ALUOp uint16 + +// ALU binary operation types. +const ( + ALUOpAdd ALUOp = iota << 4 + ALUOpSub + ALUOpMul + ALUOpDiv + ALUOpOr + ALUOpAnd + ALUOpShiftLeft + ALUOpShiftRight + aluOpNeg // Not exported because it's the only unary ALU operation, and gets its own instruction type. + ALUOpMod + ALUOpXor +) + +// A JumpTest is a comparison operator used in conditional jumps. +type JumpTest uint16 + +// Supported operators for conditional jumps. +// K can be RegX for JumpIfX +const ( + // K == A + JumpEqual JumpTest = iota + // K != A + JumpNotEqual + // K > A + JumpGreaterThan + // K < A + JumpLessThan + // K >= A + JumpGreaterOrEqual + // K <= A + JumpLessOrEqual + // K & A != 0 + JumpBitsSet + // K & A == 0 + JumpBitsNotSet +) + +// An Extension is a function call provided by the kernel that +// performs advanced operations that are expensive or impossible +// within the BPF virtual machine. +// +// Extensions are only implemented by the Linux kernel. +// +// TODO: should we prune this list? Some of these extensions seem +// either broken or near-impossible to use correctly, whereas other +// (len, random, ifindex) are quite useful. +type Extension int + +// Extension functions available in the Linux kernel. +const ( + // extOffset is the negative maximum number of instructions used + // to load instructions by overloading the K argument. + extOffset = -0x1000 + // ExtLen returns the length of the packet. + ExtLen Extension = 1 + // ExtProto returns the packet's L3 protocol type. + ExtProto Extension = 0 + // ExtType returns the packet's type (skb->pkt_type in the kernel) + // + // TODO: better documentation. How nice an API do we want to + // provide for these esoteric extensions? + ExtType Extension = 4 + // ExtPayloadOffset returns the offset of the packet payload, or + // the first protocol header that the kernel does not know how to + // parse. + ExtPayloadOffset Extension = 52 + // ExtInterfaceIndex returns the index of the interface on which + // the packet was received. + ExtInterfaceIndex Extension = 8 + // ExtNetlinkAttr returns the netlink attribute of type X at + // offset A. + ExtNetlinkAttr Extension = 12 + // ExtNetlinkAttrNested returns the nested netlink attribute of + // type X at offset A. + ExtNetlinkAttrNested Extension = 16 + // ExtMark returns the packet's mark value. + ExtMark Extension = 20 + // ExtQueue returns the packet's assigned hardware queue. + ExtQueue Extension = 24 + // ExtLinkLayerType returns the packet's hardware address type + // (e.g. Ethernet, Infiniband). + ExtLinkLayerType Extension = 28 + // ExtRXHash returns the packets receive hash. + // + // TODO: figure out what this rxhash actually is. + ExtRXHash Extension = 32 + // ExtCPUID returns the ID of the CPU processing the current + // packet. + ExtCPUID Extension = 36 + // ExtVLANTag returns the packet's VLAN tag. + ExtVLANTag Extension = 44 + // ExtVLANTagPresent returns non-zero if the packet has a VLAN + // tag. + // + // TODO: I think this might be a lie: it reads bit 0x1000 of the + // VLAN header, which changed meaning in recent revisions of the + // spec - this extension may now return meaningless information. + ExtVLANTagPresent Extension = 48 + // ExtVLANProto returns 0x8100 if the frame has a VLAN header, + // 0x88a8 if the frame has a "Q-in-Q" double VLAN header, or some + // other value if no VLAN information is present. + ExtVLANProto Extension = 60 + // ExtRand returns a uniformly random uint32. + ExtRand Extension = 56 +) + +// The following gives names to various bit patterns used in opcode construction. + +const ( + opMaskCls uint16 = 0x7 + // opClsLoad masks + opMaskLoadDest = 0x01 + opMaskLoadWidth = 0x18 + opMaskLoadMode = 0xe0 + // opClsALU & opClsJump + opMaskOperand = 0x08 + opMaskOperator = 0xf0 +) + +const ( + // +---------------+-----------------+---+---+---+ + // | AddrMode (3b) | LoadWidth (2b) | 0 | 0 | 0 | + // +---------------+-----------------+---+---+---+ + opClsLoadA uint16 = iota + // +---------------+-----------------+---+---+---+ + // | AddrMode (3b) | LoadWidth (2b) | 0 | 0 | 1 | + // +---------------+-----------------+---+---+---+ + opClsLoadX + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + // +---+---+---+---+---+---+---+---+ + opClsStoreA + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | + // +---+---+---+---+---+---+---+---+ + opClsStoreX + // +---------------+-----------------+---+---+---+ + // | Operator (4b) | OperandSrc (1b) | 1 | 0 | 0 | + // +---------------+-----------------+---+---+---+ + opClsALU + // +-----------------------------+---+---+---+---+ + // | TestOperator (4b) | 0 | 1 | 0 | 1 | + // +-----------------------------+---+---+---+---+ + opClsJump + // +---+-------------------------+---+---+---+---+ + // | 0 | 0 | 0 | RetSrc (1b) | 0 | 1 | 1 | 0 | + // +---+-------------------------+---+---+---+---+ + opClsReturn + // +---+-------------------------+---+---+---+---+ + // | 0 | 0 | 0 | TXAorTAX (1b) | 0 | 1 | 1 | 1 | + // +---+-------------------------+---+---+---+---+ + opClsMisc +) + +const ( + opAddrModeImmediate uint16 = iota << 5 + opAddrModeAbsolute + opAddrModeIndirect + opAddrModeScratch + opAddrModePacketLen // actually an extension, not an addressing mode. + opAddrModeMemShift +) + +const ( + opLoadWidth4 uint16 = iota << 3 + opLoadWidth2 + opLoadWidth1 +) + +// Operand for ALU and Jump instructions +type opOperand uint16 + +// Supported operand sources. +const ( + opOperandConstant opOperand = iota << 3 + opOperandX +) + +// An jumpOp is a conditional jump condition. +type jumpOp uint16 + +// Supported jump conditions. +const ( + opJumpAlways jumpOp = iota << 4 + opJumpEqual + opJumpGT + opJumpGE + opJumpSet +) + +const ( + opRetSrcConstant uint16 = iota << 4 + opRetSrcA +) + +const ( + opMiscTAX = 0x00 + opMiscTXA = 0x80 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/doc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/doc.go new file mode 100644 index 00000000000..ae62feb5341 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/doc.go @@ -0,0 +1,82 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* + +Package bpf implements marshaling and unmarshaling of programs for the +Berkeley Packet Filter virtual machine, and provides a Go implementation +of the virtual machine. + +BPF's main use is to specify a packet filter for network taps, so that +the kernel doesn't have to expensively copy every packet it sees to +userspace. However, it's been repurposed to other areas where running +user code in-kernel is needed. For example, Linux's seccomp uses BPF +to apply security policies to system calls. For simplicity, this +documentation refers only to packets, but other uses of BPF have their +own data payloads. + +BPF programs run in a restricted virtual machine. It has almost no +access to kernel functions, and while conditional branches are +allowed, they can only jump forwards, to guarantee that there are no +infinite loops. + +The virtual machine + +The BPF VM is an accumulator machine. Its main register, called +register A, is an implicit source and destination in all arithmetic +and logic operations. The machine also has 16 scratch registers for +temporary storage, and an indirection register (register X) for +indirect memory access. All registers are 32 bits wide. + +Each run of a BPF program is given one packet, which is placed in the +VM's read-only "main memory". LoadAbsolute and LoadIndirect +instructions can fetch up to 32 bits at a time into register A for +examination. + +The goal of a BPF program is to produce and return a verdict (uint32), +which tells the kernel what to do with the packet. In the context of +packet filtering, the returned value is the number of bytes of the +packet to forward to userspace, or 0 to ignore the packet. Other +contexts like seccomp define their own return values. + +In order to simplify programs, attempts to read past the end of the +packet terminate the program execution with a verdict of 0 (ignore +packet). This means that the vast majority of BPF programs don't need +to do any explicit bounds checking. + +In addition to the bytes of the packet, some BPF programs have access +to extensions, which are essentially calls to kernel utility +functions. Currently, the only extensions supported by this package +are the Linux packet filter extensions. + +Examples + +This packet filter selects all ARP packets. + + bpf.Assemble([]bpf.Instruction{ + // Load "EtherType" field from the ethernet header. + bpf.LoadAbsolute{Off: 12, Size: 2}, + // Skip over the next instruction if EtherType is not ARP. + bpf.JumpIf{Cond: bpf.JumpNotEqual, Val: 0x0806, SkipTrue: 1}, + // Verdict is "send up to 4k of the packet to userspace." + bpf.RetConstant{Val: 4096}, + // Verdict is "ignore packet." + bpf.RetConstant{Val: 0}, + }) + +This packet filter captures a random 1% sample of traffic. + + bpf.Assemble([]bpf.Instruction{ + // Get a 32-bit random number from the Linux kernel. + bpf.LoadExtension{Num: bpf.ExtRand}, + // 1% dice roll? + bpf.JumpIf{Cond: bpf.JumpLessThan, Val: 2^32/100, SkipFalse: 1}, + // Capture. + bpf.RetConstant{Val: 4096}, + // Ignore. + bpf.RetConstant{Val: 0}, + }) + +*/ +package bpf // import "golang.org/x/net/bpf" diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/instructions.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/instructions.go new file mode 100644 index 00000000000..3cffcaa014e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/instructions.go @@ -0,0 +1,726 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bpf + +import "fmt" + +// An Instruction is one instruction executed by the BPF virtual +// machine. +type Instruction interface { + // Assemble assembles the Instruction into a RawInstruction. + Assemble() (RawInstruction, error) +} + +// A RawInstruction is a raw BPF virtual machine instruction. +type RawInstruction struct { + // Operation to execute. + Op uint16 + // For conditional jump instructions, the number of instructions + // to skip if the condition is true/false. + Jt uint8 + Jf uint8 + // Constant parameter. The meaning depends on the Op. + K uint32 +} + +// Assemble implements the Instruction Assemble method. +func (ri RawInstruction) Assemble() (RawInstruction, error) { return ri, nil } + +// Disassemble parses ri into an Instruction and returns it. If ri is +// not recognized by this package, ri itself is returned. +func (ri RawInstruction) Disassemble() Instruction { + switch ri.Op & opMaskCls { + case opClsLoadA, opClsLoadX: + reg := Register(ri.Op & opMaskLoadDest) + sz := 0 + switch ri.Op & opMaskLoadWidth { + case opLoadWidth4: + sz = 4 + case opLoadWidth2: + sz = 2 + case opLoadWidth1: + sz = 1 + default: + return ri + } + switch ri.Op & opMaskLoadMode { + case opAddrModeImmediate: + if sz != 4 { + return ri + } + return LoadConstant{Dst: reg, Val: ri.K} + case opAddrModeScratch: + if sz != 4 || ri.K > 15 { + return ri + } + return LoadScratch{Dst: reg, N: int(ri.K)} + case opAddrModeAbsolute: + if ri.K > extOffset+0xffffffff { + return LoadExtension{Num: Extension(-extOffset + ri.K)} + } + return LoadAbsolute{Size: sz, Off: ri.K} + case opAddrModeIndirect: + return LoadIndirect{Size: sz, Off: ri.K} + case opAddrModePacketLen: + if sz != 4 { + return ri + } + return LoadExtension{Num: ExtLen} + case opAddrModeMemShift: + return LoadMemShift{Off: ri.K} + default: + return ri + } + + case opClsStoreA: + if ri.Op != opClsStoreA || ri.K > 15 { + return ri + } + return StoreScratch{Src: RegA, N: int(ri.K)} + + case opClsStoreX: + if ri.Op != opClsStoreX || ri.K > 15 { + return ri + } + return StoreScratch{Src: RegX, N: int(ri.K)} + + case opClsALU: + switch op := ALUOp(ri.Op & opMaskOperator); op { + case ALUOpAdd, ALUOpSub, ALUOpMul, ALUOpDiv, ALUOpOr, ALUOpAnd, ALUOpShiftLeft, ALUOpShiftRight, ALUOpMod, ALUOpXor: + switch operand := opOperand(ri.Op & opMaskOperand); operand { + case opOperandX: + return ALUOpX{Op: op} + case opOperandConstant: + return ALUOpConstant{Op: op, Val: ri.K} + default: + return ri + } + case aluOpNeg: + return NegateA{} + default: + return ri + } + + case opClsJump: + switch op := jumpOp(ri.Op & opMaskOperator); op { + case opJumpAlways: + return Jump{Skip: ri.K} + case opJumpEqual, opJumpGT, opJumpGE, opJumpSet: + cond, skipTrue, skipFalse := jumpOpToTest(op, ri.Jt, ri.Jf) + switch operand := opOperand(ri.Op & opMaskOperand); operand { + case opOperandX: + return JumpIfX{Cond: cond, SkipTrue: skipTrue, SkipFalse: skipFalse} + case opOperandConstant: + return JumpIf{Cond: cond, Val: ri.K, SkipTrue: skipTrue, SkipFalse: skipFalse} + default: + return ri + } + default: + return ri + } + + case opClsReturn: + switch ri.Op { + case opClsReturn | opRetSrcA: + return RetA{} + case opClsReturn | opRetSrcConstant: + return RetConstant{Val: ri.K} + default: + return ri + } + + case opClsMisc: + switch ri.Op { + case opClsMisc | opMiscTAX: + return TAX{} + case opClsMisc | opMiscTXA: + return TXA{} + default: + return ri + } + + default: + panic("unreachable") // switch is exhaustive on the bit pattern + } +} + +func jumpOpToTest(op jumpOp, skipTrue uint8, skipFalse uint8) (JumpTest, uint8, uint8) { + var test JumpTest + + // Decode "fake" jump conditions that don't appear in machine code + // Ensures the Assemble -> Disassemble stage recreates the same instructions + // See https://github.com/golang/go/issues/18470 + if skipTrue == 0 { + switch op { + case opJumpEqual: + test = JumpNotEqual + case opJumpGT: + test = JumpLessOrEqual + case opJumpGE: + test = JumpLessThan + case opJumpSet: + test = JumpBitsNotSet + } + + return test, skipFalse, 0 + } + + switch op { + case opJumpEqual: + test = JumpEqual + case opJumpGT: + test = JumpGreaterThan + case opJumpGE: + test = JumpGreaterOrEqual + case opJumpSet: + test = JumpBitsSet + } + + return test, skipTrue, skipFalse +} + +// LoadConstant loads Val into register Dst. +type LoadConstant struct { + Dst Register + Val uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadConstant) Assemble() (RawInstruction, error) { + return assembleLoad(a.Dst, 4, opAddrModeImmediate, a.Val) +} + +// String returns the instruction in assembler notation. +func (a LoadConstant) String() string { + switch a.Dst { + case RegA: + return fmt.Sprintf("ld #%d", a.Val) + case RegX: + return fmt.Sprintf("ldx #%d", a.Val) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// LoadScratch loads scratch[N] into register Dst. +type LoadScratch struct { + Dst Register + N int // 0-15 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadScratch) Assemble() (RawInstruction, error) { + if a.N < 0 || a.N > 15 { + return RawInstruction{}, fmt.Errorf("invalid scratch slot %d", a.N) + } + return assembleLoad(a.Dst, 4, opAddrModeScratch, uint32(a.N)) +} + +// String returns the instruction in assembler notation. +func (a LoadScratch) String() string { + switch a.Dst { + case RegA: + return fmt.Sprintf("ld M[%d]", a.N) + case RegX: + return fmt.Sprintf("ldx M[%d]", a.N) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// LoadAbsolute loads packet[Off:Off+Size] as an integer value into +// register A. +type LoadAbsolute struct { + Off uint32 + Size int // 1, 2 or 4 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadAbsolute) Assemble() (RawInstruction, error) { + return assembleLoad(RegA, a.Size, opAddrModeAbsolute, a.Off) +} + +// String returns the instruction in assembler notation. +func (a LoadAbsolute) String() string { + switch a.Size { + case 1: // byte + return fmt.Sprintf("ldb [%d]", a.Off) + case 2: // half word + return fmt.Sprintf("ldh [%d]", a.Off) + case 4: // word + if a.Off > extOffset+0xffffffff { + return LoadExtension{Num: Extension(a.Off + 0x1000)}.String() + } + return fmt.Sprintf("ld [%d]", a.Off) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// LoadIndirect loads packet[X+Off:X+Off+Size] as an integer value +// into register A. +type LoadIndirect struct { + Off uint32 + Size int // 1, 2 or 4 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadIndirect) Assemble() (RawInstruction, error) { + return assembleLoad(RegA, a.Size, opAddrModeIndirect, a.Off) +} + +// String returns the instruction in assembler notation. +func (a LoadIndirect) String() string { + switch a.Size { + case 1: // byte + return fmt.Sprintf("ldb [x + %d]", a.Off) + case 2: // half word + return fmt.Sprintf("ldh [x + %d]", a.Off) + case 4: // word + return fmt.Sprintf("ld [x + %d]", a.Off) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// LoadMemShift multiplies the first 4 bits of the byte at packet[Off] +// by 4 and stores the result in register X. +// +// This instruction is mainly useful to load into X the length of an +// IPv4 packet header in a single instruction, rather than have to do +// the arithmetic on the header's first byte by hand. +type LoadMemShift struct { + Off uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a LoadMemShift) Assemble() (RawInstruction, error) { + return assembleLoad(RegX, 1, opAddrModeMemShift, a.Off) +} + +// String returns the instruction in assembler notation. +func (a LoadMemShift) String() string { + return fmt.Sprintf("ldx 4*([%d]&0xf)", a.Off) +} + +// LoadExtension invokes a linux-specific extension and stores the +// result in register A. +type LoadExtension struct { + Num Extension +} + +// Assemble implements the Instruction Assemble method. +func (a LoadExtension) Assemble() (RawInstruction, error) { + if a.Num == ExtLen { + return assembleLoad(RegA, 4, opAddrModePacketLen, 0) + } + return assembleLoad(RegA, 4, opAddrModeAbsolute, uint32(extOffset+a.Num)) +} + +// String returns the instruction in assembler notation. +func (a LoadExtension) String() string { + switch a.Num { + case ExtLen: + return "ld #len" + case ExtProto: + return "ld #proto" + case ExtType: + return "ld #type" + case ExtPayloadOffset: + return "ld #poff" + case ExtInterfaceIndex: + return "ld #ifidx" + case ExtNetlinkAttr: + return "ld #nla" + case ExtNetlinkAttrNested: + return "ld #nlan" + case ExtMark: + return "ld #mark" + case ExtQueue: + return "ld #queue" + case ExtLinkLayerType: + return "ld #hatype" + case ExtRXHash: + return "ld #rxhash" + case ExtCPUID: + return "ld #cpu" + case ExtVLANTag: + return "ld #vlan_tci" + case ExtVLANTagPresent: + return "ld #vlan_avail" + case ExtVLANProto: + return "ld #vlan_tpid" + case ExtRand: + return "ld #rand" + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// StoreScratch stores register Src into scratch[N]. +type StoreScratch struct { + Src Register + N int // 0-15 +} + +// Assemble implements the Instruction Assemble method. +func (a StoreScratch) Assemble() (RawInstruction, error) { + if a.N < 0 || a.N > 15 { + return RawInstruction{}, fmt.Errorf("invalid scratch slot %d", a.N) + } + var op uint16 + switch a.Src { + case RegA: + op = opClsStoreA + case RegX: + op = opClsStoreX + default: + return RawInstruction{}, fmt.Errorf("invalid source register %v", a.Src) + } + + return RawInstruction{ + Op: op, + K: uint32(a.N), + }, nil +} + +// String returns the instruction in assembler notation. +func (a StoreScratch) String() string { + switch a.Src { + case RegA: + return fmt.Sprintf("st M[%d]", a.N) + case RegX: + return fmt.Sprintf("stx M[%d]", a.N) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// ALUOpConstant executes A = A Val. +type ALUOpConstant struct { + Op ALUOp + Val uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a ALUOpConstant) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsALU | uint16(opOperandConstant) | uint16(a.Op), + K: a.Val, + }, nil +} + +// String returns the instruction in assembler notation. +func (a ALUOpConstant) String() string { + switch a.Op { + case ALUOpAdd: + return fmt.Sprintf("add #%d", a.Val) + case ALUOpSub: + return fmt.Sprintf("sub #%d", a.Val) + case ALUOpMul: + return fmt.Sprintf("mul #%d", a.Val) + case ALUOpDiv: + return fmt.Sprintf("div #%d", a.Val) + case ALUOpMod: + return fmt.Sprintf("mod #%d", a.Val) + case ALUOpAnd: + return fmt.Sprintf("and #%d", a.Val) + case ALUOpOr: + return fmt.Sprintf("or #%d", a.Val) + case ALUOpXor: + return fmt.Sprintf("xor #%d", a.Val) + case ALUOpShiftLeft: + return fmt.Sprintf("lsh #%d", a.Val) + case ALUOpShiftRight: + return fmt.Sprintf("rsh #%d", a.Val) + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// ALUOpX executes A = A X +type ALUOpX struct { + Op ALUOp +} + +// Assemble implements the Instruction Assemble method. +func (a ALUOpX) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsALU | uint16(opOperandX) | uint16(a.Op), + }, nil +} + +// String returns the instruction in assembler notation. +func (a ALUOpX) String() string { + switch a.Op { + case ALUOpAdd: + return "add x" + case ALUOpSub: + return "sub x" + case ALUOpMul: + return "mul x" + case ALUOpDiv: + return "div x" + case ALUOpMod: + return "mod x" + case ALUOpAnd: + return "and x" + case ALUOpOr: + return "or x" + case ALUOpXor: + return "xor x" + case ALUOpShiftLeft: + return "lsh x" + case ALUOpShiftRight: + return "rsh x" + default: + return fmt.Sprintf("unknown instruction: %#v", a) + } +} + +// NegateA executes A = -A. +type NegateA struct{} + +// Assemble implements the Instruction Assemble method. +func (a NegateA) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsALU | uint16(aluOpNeg), + }, nil +} + +// String returns the instruction in assembler notation. +func (a NegateA) String() string { + return fmt.Sprintf("neg") +} + +// Jump skips the following Skip instructions in the program. +type Jump struct { + Skip uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a Jump) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsJump | uint16(opJumpAlways), + K: a.Skip, + }, nil +} + +// String returns the instruction in assembler notation. +func (a Jump) String() string { + return fmt.Sprintf("ja %d", a.Skip) +} + +// JumpIf skips the following Skip instructions in the program if A +// Val is true. +type JumpIf struct { + Cond JumpTest + Val uint32 + SkipTrue uint8 + SkipFalse uint8 +} + +// Assemble implements the Instruction Assemble method. +func (a JumpIf) Assemble() (RawInstruction, error) { + return jumpToRaw(a.Cond, opOperandConstant, a.Val, a.SkipTrue, a.SkipFalse) +} + +// String returns the instruction in assembler notation. +func (a JumpIf) String() string { + return jumpToString(a.Cond, fmt.Sprintf("#%d", a.Val), a.SkipTrue, a.SkipFalse) +} + +// JumpIfX skips the following Skip instructions in the program if A +// X is true. +type JumpIfX struct { + Cond JumpTest + SkipTrue uint8 + SkipFalse uint8 +} + +// Assemble implements the Instruction Assemble method. +func (a JumpIfX) Assemble() (RawInstruction, error) { + return jumpToRaw(a.Cond, opOperandX, 0, a.SkipTrue, a.SkipFalse) +} + +// String returns the instruction in assembler notation. +func (a JumpIfX) String() string { + return jumpToString(a.Cond, "x", a.SkipTrue, a.SkipFalse) +} + +// jumpToRaw assembles a jump instruction into a RawInstruction +func jumpToRaw(test JumpTest, operand opOperand, k uint32, skipTrue, skipFalse uint8) (RawInstruction, error) { + var ( + cond jumpOp + flip bool + ) + switch test { + case JumpEqual: + cond = opJumpEqual + case JumpNotEqual: + cond, flip = opJumpEqual, true + case JumpGreaterThan: + cond = opJumpGT + case JumpLessThan: + cond, flip = opJumpGE, true + case JumpGreaterOrEqual: + cond = opJumpGE + case JumpLessOrEqual: + cond, flip = opJumpGT, true + case JumpBitsSet: + cond = opJumpSet + case JumpBitsNotSet: + cond, flip = opJumpSet, true + default: + return RawInstruction{}, fmt.Errorf("unknown JumpTest %v", test) + } + jt, jf := skipTrue, skipFalse + if flip { + jt, jf = jf, jt + } + return RawInstruction{ + Op: opClsJump | uint16(cond) | uint16(operand), + Jt: jt, + Jf: jf, + K: k, + }, nil +} + +// jumpToString converts a jump instruction to assembler notation +func jumpToString(cond JumpTest, operand string, skipTrue, skipFalse uint8) string { + switch cond { + // K == A + case JumpEqual: + return conditionalJump(operand, skipTrue, skipFalse, "jeq", "jneq") + // K != A + case JumpNotEqual: + return fmt.Sprintf("jneq %s,%d", operand, skipTrue) + // K > A + case JumpGreaterThan: + return conditionalJump(operand, skipTrue, skipFalse, "jgt", "jle") + // K < A + case JumpLessThan: + return fmt.Sprintf("jlt %s,%d", operand, skipTrue) + // K >= A + case JumpGreaterOrEqual: + return conditionalJump(operand, skipTrue, skipFalse, "jge", "jlt") + // K <= A + case JumpLessOrEqual: + return fmt.Sprintf("jle %s,%d", operand, skipTrue) + // K & A != 0 + case JumpBitsSet: + if skipFalse > 0 { + return fmt.Sprintf("jset %s,%d,%d", operand, skipTrue, skipFalse) + } + return fmt.Sprintf("jset %s,%d", operand, skipTrue) + // K & A == 0, there is no assembler instruction for JumpBitNotSet, use JumpBitSet and invert skips + case JumpBitsNotSet: + return jumpToString(JumpBitsSet, operand, skipFalse, skipTrue) + default: + return fmt.Sprintf("unknown JumpTest %#v", cond) + } +} + +func conditionalJump(operand string, skipTrue, skipFalse uint8, positiveJump, negativeJump string) string { + if skipTrue > 0 { + if skipFalse > 0 { + return fmt.Sprintf("%s %s,%d,%d", positiveJump, operand, skipTrue, skipFalse) + } + return fmt.Sprintf("%s %s,%d", positiveJump, operand, skipTrue) + } + return fmt.Sprintf("%s %s,%d", negativeJump, operand, skipFalse) +} + +// RetA exits the BPF program, returning the value of register A. +type RetA struct{} + +// Assemble implements the Instruction Assemble method. +func (a RetA) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsReturn | opRetSrcA, + }, nil +} + +// String returns the instruction in assembler notation. +func (a RetA) String() string { + return fmt.Sprintf("ret a") +} + +// RetConstant exits the BPF program, returning a constant value. +type RetConstant struct { + Val uint32 +} + +// Assemble implements the Instruction Assemble method. +func (a RetConstant) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsReturn | opRetSrcConstant, + K: a.Val, + }, nil +} + +// String returns the instruction in assembler notation. +func (a RetConstant) String() string { + return fmt.Sprintf("ret #%d", a.Val) +} + +// TXA copies the value of register X to register A. +type TXA struct{} + +// Assemble implements the Instruction Assemble method. +func (a TXA) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsMisc | opMiscTXA, + }, nil +} + +// String returns the instruction in assembler notation. +func (a TXA) String() string { + return fmt.Sprintf("txa") +} + +// TAX copies the value of register A to register X. +type TAX struct{} + +// Assemble implements the Instruction Assemble method. +func (a TAX) Assemble() (RawInstruction, error) { + return RawInstruction{ + Op: opClsMisc | opMiscTAX, + }, nil +} + +// String returns the instruction in assembler notation. +func (a TAX) String() string { + return fmt.Sprintf("tax") +} + +func assembleLoad(dst Register, loadSize int, mode uint16, k uint32) (RawInstruction, error) { + var ( + cls uint16 + sz uint16 + ) + switch dst { + case RegA: + cls = opClsLoadA + case RegX: + cls = opClsLoadX + default: + return RawInstruction{}, fmt.Errorf("invalid target register %v", dst) + } + switch loadSize { + case 1: + sz = opLoadWidth1 + case 2: + sz = opLoadWidth2 + case 4: + sz = opLoadWidth4 + default: + return RawInstruction{}, fmt.Errorf("invalid load byte length %d", sz) + } + return RawInstruction{ + Op: cls | sz | mode, + K: k, + }, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/setter.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/setter.go new file mode 100644 index 00000000000..43e35f0ac24 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/setter.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bpf + +// A Setter is a type which can attach a compiled BPF filter to itself. +type Setter interface { + SetBPF(filter []RawInstruction) error +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/vm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/vm.go new file mode 100644 index 00000000000..73f57f1f72e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/vm.go @@ -0,0 +1,150 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bpf + +import ( + "errors" + "fmt" +) + +// A VM is an emulated BPF virtual machine. +type VM struct { + filter []Instruction +} + +// NewVM returns a new VM using the input BPF program. +func NewVM(filter []Instruction) (*VM, error) { + if len(filter) == 0 { + return nil, errors.New("one or more Instructions must be specified") + } + + for i, ins := range filter { + check := len(filter) - (i + 1) + switch ins := ins.(type) { + // Check for out-of-bounds jumps in instructions + case Jump: + if check <= int(ins.Skip) { + return nil, fmt.Errorf("cannot jump %d instructions; jumping past program bounds", ins.Skip) + } + case JumpIf: + if check <= int(ins.SkipTrue) { + return nil, fmt.Errorf("cannot jump %d instructions in true case; jumping past program bounds", ins.SkipTrue) + } + if check <= int(ins.SkipFalse) { + return nil, fmt.Errorf("cannot jump %d instructions in false case; jumping past program bounds", ins.SkipFalse) + } + case JumpIfX: + if check <= int(ins.SkipTrue) { + return nil, fmt.Errorf("cannot jump %d instructions in true case; jumping past program bounds", ins.SkipTrue) + } + if check <= int(ins.SkipFalse) { + return nil, fmt.Errorf("cannot jump %d instructions in false case; jumping past program bounds", ins.SkipFalse) + } + // Check for division or modulus by zero + case ALUOpConstant: + if ins.Val != 0 { + break + } + + switch ins.Op { + case ALUOpDiv, ALUOpMod: + return nil, errors.New("cannot divide by zero using ALUOpConstant") + } + // Check for unknown extensions + case LoadExtension: + switch ins.Num { + case ExtLen: + default: + return nil, fmt.Errorf("extension %d not implemented", ins.Num) + } + } + } + + // Make sure last instruction is a return instruction + switch filter[len(filter)-1].(type) { + case RetA, RetConstant: + default: + return nil, errors.New("BPF program must end with RetA or RetConstant") + } + + // Though our VM works using disassembled instructions, we + // attempt to assemble the input filter anyway to ensure it is compatible + // with an operating system VM. + _, err := Assemble(filter) + + return &VM{ + filter: filter, + }, err +} + +// Run runs the VM's BPF program against the input bytes. +// Run returns the number of bytes accepted by the BPF program, and any errors +// which occurred while processing the program. +func (v *VM) Run(in []byte) (int, error) { + var ( + // Registers of the virtual machine + regA uint32 + regX uint32 + regScratch [16]uint32 + + // OK is true if the program should continue processing the next + // instruction, or false if not, causing the loop to break + ok = true + ) + + // TODO(mdlayher): implement: + // - NegateA: + // - would require a change from uint32 registers to int32 + // registers + + // TODO(mdlayher): add interop tests that check signedness of ALU + // operations against kernel implementation, and make sure Go + // implementation matches behavior + + for i := 0; i < len(v.filter) && ok; i++ { + ins := v.filter[i] + + switch ins := ins.(type) { + case ALUOpConstant: + regA = aluOpConstant(ins, regA) + case ALUOpX: + regA, ok = aluOpX(ins, regA, regX) + case Jump: + i += int(ins.Skip) + case JumpIf: + jump := jumpIf(ins, regA) + i += jump + case JumpIfX: + jump := jumpIfX(ins, regA, regX) + i += jump + case LoadAbsolute: + regA, ok = loadAbsolute(ins, in) + case LoadConstant: + regA, regX = loadConstant(ins, regA, regX) + case LoadExtension: + regA = loadExtension(ins, in) + case LoadIndirect: + regA, ok = loadIndirect(ins, in, regX) + case LoadMemShift: + regX, ok = loadMemShift(ins, in) + case LoadScratch: + regA, regX = loadScratch(ins, regScratch, regA, regX) + case RetA: + return int(regA), nil + case RetConstant: + return int(ins.Val), nil + case StoreScratch: + regScratch = storeScratch(ins, regScratch, regA, regX) + case TAX: + regX = regA + case TXA: + regA = regX + default: + return 0, fmt.Errorf("unknown Instruction at index %d: %T", i, ins) + } + } + + return 0, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/vm_instructions.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/vm_instructions.go new file mode 100644 index 00000000000..f0d2e55bdc6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/bpf/vm_instructions.go @@ -0,0 +1,181 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bpf + +import ( + "encoding/binary" + "fmt" +) + +func aluOpConstant(ins ALUOpConstant, regA uint32) uint32 { + return aluOpCommon(ins.Op, regA, ins.Val) +} + +func aluOpX(ins ALUOpX, regA uint32, regX uint32) (uint32, bool) { + // Guard against division or modulus by zero by terminating + // the program, as the OS BPF VM does + if regX == 0 { + switch ins.Op { + case ALUOpDiv, ALUOpMod: + return 0, false + } + } + + return aluOpCommon(ins.Op, regA, regX), true +} + +func aluOpCommon(op ALUOp, regA uint32, value uint32) uint32 { + switch op { + case ALUOpAdd: + return regA + value + case ALUOpSub: + return regA - value + case ALUOpMul: + return regA * value + case ALUOpDiv: + // Division by zero not permitted by NewVM and aluOpX checks + return regA / value + case ALUOpOr: + return regA | value + case ALUOpAnd: + return regA & value + case ALUOpShiftLeft: + return regA << value + case ALUOpShiftRight: + return regA >> value + case ALUOpMod: + // Modulus by zero not permitted by NewVM and aluOpX checks + return regA % value + case ALUOpXor: + return regA ^ value + default: + return regA + } +} + +func jumpIf(ins JumpIf, regA uint32) int { + return jumpIfCommon(ins.Cond, ins.SkipTrue, ins.SkipFalse, regA, ins.Val) +} + +func jumpIfX(ins JumpIfX, regA uint32, regX uint32) int { + return jumpIfCommon(ins.Cond, ins.SkipTrue, ins.SkipFalse, regA, regX) +} + +func jumpIfCommon(cond JumpTest, skipTrue, skipFalse uint8, regA uint32, value uint32) int { + var ok bool + + switch cond { + case JumpEqual: + ok = regA == value + case JumpNotEqual: + ok = regA != value + case JumpGreaterThan: + ok = regA > value + case JumpLessThan: + ok = regA < value + case JumpGreaterOrEqual: + ok = regA >= value + case JumpLessOrEqual: + ok = regA <= value + case JumpBitsSet: + ok = (regA & value) != 0 + case JumpBitsNotSet: + ok = (regA & value) == 0 + } + + if ok { + return int(skipTrue) + } + + return int(skipFalse) +} + +func loadAbsolute(ins LoadAbsolute, in []byte) (uint32, bool) { + offset := int(ins.Off) + size := int(ins.Size) + + return loadCommon(in, offset, size) +} + +func loadConstant(ins LoadConstant, regA uint32, regX uint32) (uint32, uint32) { + switch ins.Dst { + case RegA: + regA = ins.Val + case RegX: + regX = ins.Val + } + + return regA, regX +} + +func loadExtension(ins LoadExtension, in []byte) uint32 { + switch ins.Num { + case ExtLen: + return uint32(len(in)) + default: + panic(fmt.Sprintf("unimplemented extension: %d", ins.Num)) + } +} + +func loadIndirect(ins LoadIndirect, in []byte, regX uint32) (uint32, bool) { + offset := int(ins.Off) + int(regX) + size := int(ins.Size) + + return loadCommon(in, offset, size) +} + +func loadMemShift(ins LoadMemShift, in []byte) (uint32, bool) { + offset := int(ins.Off) + + if !inBounds(len(in), offset, 0) { + return 0, false + } + + // Mask off high 4 bits and multiply low 4 bits by 4 + return uint32(in[offset]&0x0f) * 4, true +} + +func inBounds(inLen int, offset int, size int) bool { + return offset+size <= inLen +} + +func loadCommon(in []byte, offset int, size int) (uint32, bool) { + if !inBounds(len(in), offset, size) { + return 0, false + } + + switch size { + case 1: + return uint32(in[offset]), true + case 2: + return uint32(binary.BigEndian.Uint16(in[offset : offset+size])), true + case 4: + return uint32(binary.BigEndian.Uint32(in[offset : offset+size])), true + default: + panic(fmt.Sprintf("invalid load size: %d", size)) + } +} + +func loadScratch(ins LoadScratch, regScratch [16]uint32, regA uint32, regX uint32) (uint32, uint32) { + switch ins.Dst { + case RegA: + regA = regScratch[ins.N] + case RegX: + regX = regScratch[ins.N] + } + + return regA, regX +} + +func storeScratch(ins StoreScratch, regScratch [16]uint32, regA uint32, regX uint32) [16]uint32 { + switch ins.Src { + case RegA: + regScratch[ins.N] = regA + case RegX: + regScratch[ins.N] = regX + } + + return regScratch +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/iana/const.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/iana/const.go new file mode 100644 index 00000000000..cea712fac04 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/iana/const.go @@ -0,0 +1,223 @@ +// go generate gen.go +// Code generated by the command above; DO NOT EDIT. + +// Package iana provides protocol number resources managed by the Internet Assigned Numbers Authority (IANA). +package iana // import "golang.org/x/net/internal/iana" + +// Differentiated Services Field Codepoints (DSCP), Updated: 2018-05-04 +const ( + DiffServCS0 = 0x00 // CS0 + DiffServCS1 = 0x20 // CS1 + DiffServCS2 = 0x40 // CS2 + DiffServCS3 = 0x60 // CS3 + DiffServCS4 = 0x80 // CS4 + DiffServCS5 = 0xa0 // CS5 + DiffServCS6 = 0xc0 // CS6 + DiffServCS7 = 0xe0 // CS7 + DiffServAF11 = 0x28 // AF11 + DiffServAF12 = 0x30 // AF12 + DiffServAF13 = 0x38 // AF13 + DiffServAF21 = 0x48 // AF21 + DiffServAF22 = 0x50 // AF22 + DiffServAF23 = 0x58 // AF23 + DiffServAF31 = 0x68 // AF31 + DiffServAF32 = 0x70 // AF32 + DiffServAF33 = 0x78 // AF33 + DiffServAF41 = 0x88 // AF41 + DiffServAF42 = 0x90 // AF42 + DiffServAF43 = 0x98 // AF43 + DiffServEF = 0xb8 // EF + DiffServVOICEADMIT = 0xb0 // VOICE-ADMIT + NotECNTransport = 0x00 // Not-ECT (Not ECN-Capable Transport) + ECNTransport1 = 0x01 // ECT(1) (ECN-Capable Transport(1)) + ECNTransport0 = 0x02 // ECT(0) (ECN-Capable Transport(0)) + CongestionExperienced = 0x03 // CE (Congestion Experienced) +) + +// Protocol Numbers, Updated: 2017-10-13 +const ( + ProtocolIP = 0 // IPv4 encapsulation, pseudo protocol number + ProtocolHOPOPT = 0 // IPv6 Hop-by-Hop Option + ProtocolICMP = 1 // Internet Control Message + ProtocolIGMP = 2 // Internet Group Management + ProtocolGGP = 3 // Gateway-to-Gateway + ProtocolIPv4 = 4 // IPv4 encapsulation + ProtocolST = 5 // Stream + ProtocolTCP = 6 // Transmission Control + ProtocolCBT = 7 // CBT + ProtocolEGP = 8 // Exterior Gateway Protocol + ProtocolIGP = 9 // any private interior gateway (used by Cisco for their IGRP) + ProtocolBBNRCCMON = 10 // BBN RCC Monitoring + ProtocolNVPII = 11 // Network Voice Protocol + ProtocolPUP = 12 // PUP + ProtocolEMCON = 14 // EMCON + ProtocolXNET = 15 // Cross Net Debugger + ProtocolCHAOS = 16 // Chaos + ProtocolUDP = 17 // User Datagram + ProtocolMUX = 18 // Multiplexing + ProtocolDCNMEAS = 19 // DCN Measurement Subsystems + ProtocolHMP = 20 // Host Monitoring + ProtocolPRM = 21 // Packet Radio Measurement + ProtocolXNSIDP = 22 // XEROX NS IDP + ProtocolTRUNK1 = 23 // Trunk-1 + ProtocolTRUNK2 = 24 // Trunk-2 + ProtocolLEAF1 = 25 // Leaf-1 + ProtocolLEAF2 = 26 // Leaf-2 + ProtocolRDP = 27 // Reliable Data Protocol + ProtocolIRTP = 28 // Internet Reliable Transaction + ProtocolISOTP4 = 29 // ISO Transport Protocol Class 4 + ProtocolNETBLT = 30 // Bulk Data Transfer Protocol + ProtocolMFENSP = 31 // MFE Network Services Protocol + ProtocolMERITINP = 32 // MERIT Internodal Protocol + ProtocolDCCP = 33 // Datagram Congestion Control Protocol + Protocol3PC = 34 // Third Party Connect Protocol + ProtocolIDPR = 35 // Inter-Domain Policy Routing Protocol + ProtocolXTP = 36 // XTP + ProtocolDDP = 37 // Datagram Delivery Protocol + ProtocolIDPRCMTP = 38 // IDPR Control Message Transport Proto + ProtocolTPPP = 39 // TP++ Transport Protocol + ProtocolIL = 40 // IL Transport Protocol + ProtocolIPv6 = 41 // IPv6 encapsulation + ProtocolSDRP = 42 // Source Demand Routing Protocol + ProtocolIPv6Route = 43 // Routing Header for IPv6 + ProtocolIPv6Frag = 44 // Fragment Header for IPv6 + ProtocolIDRP = 45 // Inter-Domain Routing Protocol + ProtocolRSVP = 46 // Reservation Protocol + ProtocolGRE = 47 // Generic Routing Encapsulation + ProtocolDSR = 48 // Dynamic Source Routing Protocol + ProtocolBNA = 49 // BNA + ProtocolESP = 50 // Encap Security Payload + ProtocolAH = 51 // Authentication Header + ProtocolINLSP = 52 // Integrated Net Layer Security TUBA + ProtocolNARP = 54 // NBMA Address Resolution Protocol + ProtocolMOBILE = 55 // IP Mobility + ProtocolTLSP = 56 // Transport Layer Security Protocol using Kryptonet key management + ProtocolSKIP = 57 // SKIP + ProtocolIPv6ICMP = 58 // ICMP for IPv6 + ProtocolIPv6NoNxt = 59 // No Next Header for IPv6 + ProtocolIPv6Opts = 60 // Destination Options for IPv6 + ProtocolCFTP = 62 // CFTP + ProtocolSATEXPAK = 64 // SATNET and Backroom EXPAK + ProtocolKRYPTOLAN = 65 // Kryptolan + ProtocolRVD = 66 // MIT Remote Virtual Disk Protocol + ProtocolIPPC = 67 // Internet Pluribus Packet Core + ProtocolSATMON = 69 // SATNET Monitoring + ProtocolVISA = 70 // VISA Protocol + ProtocolIPCV = 71 // Internet Packet Core Utility + ProtocolCPNX = 72 // Computer Protocol Network Executive + ProtocolCPHB = 73 // Computer Protocol Heart Beat + ProtocolWSN = 74 // Wang Span Network + ProtocolPVP = 75 // Packet Video Protocol + ProtocolBRSATMON = 76 // Backroom SATNET Monitoring + ProtocolSUNND = 77 // SUN ND PROTOCOL-Temporary + ProtocolWBMON = 78 // WIDEBAND Monitoring + ProtocolWBEXPAK = 79 // WIDEBAND EXPAK + ProtocolISOIP = 80 // ISO Internet Protocol + ProtocolVMTP = 81 // VMTP + ProtocolSECUREVMTP = 82 // SECURE-VMTP + ProtocolVINES = 83 // VINES + ProtocolTTP = 84 // Transaction Transport Protocol + ProtocolIPTM = 84 // Internet Protocol Traffic Manager + ProtocolNSFNETIGP = 85 // NSFNET-IGP + ProtocolDGP = 86 // Dissimilar Gateway Protocol + ProtocolTCF = 87 // TCF + ProtocolEIGRP = 88 // EIGRP + ProtocolOSPFIGP = 89 // OSPFIGP + ProtocolSpriteRPC = 90 // Sprite RPC Protocol + ProtocolLARP = 91 // Locus Address Resolution Protocol + ProtocolMTP = 92 // Multicast Transport Protocol + ProtocolAX25 = 93 // AX.25 Frames + ProtocolIPIP = 94 // IP-within-IP Encapsulation Protocol + ProtocolSCCSP = 96 // Semaphore Communications Sec. Pro. + ProtocolETHERIP = 97 // Ethernet-within-IP Encapsulation + ProtocolENCAP = 98 // Encapsulation Header + ProtocolGMTP = 100 // GMTP + ProtocolIFMP = 101 // Ipsilon Flow Management Protocol + ProtocolPNNI = 102 // PNNI over IP + ProtocolPIM = 103 // Protocol Independent Multicast + ProtocolARIS = 104 // ARIS + ProtocolSCPS = 105 // SCPS + ProtocolQNX = 106 // QNX + ProtocolAN = 107 // Active Networks + ProtocolIPComp = 108 // IP Payload Compression Protocol + ProtocolSNP = 109 // Sitara Networks Protocol + ProtocolCompaqPeer = 110 // Compaq Peer Protocol + ProtocolIPXinIP = 111 // IPX in IP + ProtocolVRRP = 112 // Virtual Router Redundancy Protocol + ProtocolPGM = 113 // PGM Reliable Transport Protocol + ProtocolL2TP = 115 // Layer Two Tunneling Protocol + ProtocolDDX = 116 // D-II Data Exchange (DDX) + ProtocolIATP = 117 // Interactive Agent Transfer Protocol + ProtocolSTP = 118 // Schedule Transfer Protocol + ProtocolSRP = 119 // SpectraLink Radio Protocol + ProtocolUTI = 120 // UTI + ProtocolSMP = 121 // Simple Message Protocol + ProtocolPTP = 123 // Performance Transparency Protocol + ProtocolISIS = 124 // ISIS over IPv4 + ProtocolFIRE = 125 // FIRE + ProtocolCRTP = 126 // Combat Radio Transport Protocol + ProtocolCRUDP = 127 // Combat Radio User Datagram + ProtocolSSCOPMCE = 128 // SSCOPMCE + ProtocolIPLT = 129 // IPLT + ProtocolSPS = 130 // Secure Packet Shield + ProtocolPIPE = 131 // Private IP Encapsulation within IP + ProtocolSCTP = 132 // Stream Control Transmission Protocol + ProtocolFC = 133 // Fibre Channel + ProtocolRSVPE2EIGNORE = 134 // RSVP-E2E-IGNORE + ProtocolMobilityHeader = 135 // Mobility Header + ProtocolUDPLite = 136 // UDPLite + ProtocolMPLSinIP = 137 // MPLS-in-IP + ProtocolMANET = 138 // MANET Protocols + ProtocolHIP = 139 // Host Identity Protocol + ProtocolShim6 = 140 // Shim6 Protocol + ProtocolWESP = 141 // Wrapped Encapsulating Security Payload + ProtocolROHC = 142 // Robust Header Compression + ProtocolReserved = 255 // Reserved +) + +// Address Family Numbers, Updated: 2018-04-02 +const ( + AddrFamilyIPv4 = 1 // IP (IP version 4) + AddrFamilyIPv6 = 2 // IP6 (IP version 6) + AddrFamilyNSAP = 3 // NSAP + AddrFamilyHDLC = 4 // HDLC (8-bit multidrop) + AddrFamilyBBN1822 = 5 // BBN 1822 + AddrFamily802 = 6 // 802 (includes all 802 media plus Ethernet "canonical format") + AddrFamilyE163 = 7 // E.163 + AddrFamilyE164 = 8 // E.164 (SMDS, Frame Relay, ATM) + AddrFamilyF69 = 9 // F.69 (Telex) + AddrFamilyX121 = 10 // X.121 (X.25, Frame Relay) + AddrFamilyIPX = 11 // IPX + AddrFamilyAppletalk = 12 // Appletalk + AddrFamilyDecnetIV = 13 // Decnet IV + AddrFamilyBanyanVines = 14 // Banyan Vines + AddrFamilyE164withSubaddress = 15 // E.164 with NSAP format subaddress + AddrFamilyDNS = 16 // DNS (Domain Name System) + AddrFamilyDistinguishedName = 17 // Distinguished Name + AddrFamilyASNumber = 18 // AS Number + AddrFamilyXTPoverIPv4 = 19 // XTP over IP version 4 + AddrFamilyXTPoverIPv6 = 20 // XTP over IP version 6 + AddrFamilyXTPnativemodeXTP = 21 // XTP native mode XTP + AddrFamilyFibreChannelWorldWidePortName = 22 // Fibre Channel World-Wide Port Name + AddrFamilyFibreChannelWorldWideNodeName = 23 // Fibre Channel World-Wide Node Name + AddrFamilyGWID = 24 // GWID + AddrFamilyL2VPN = 25 // AFI for L2VPN information + AddrFamilyMPLSTPSectionEndpointID = 26 // MPLS-TP Section Endpoint Identifier + AddrFamilyMPLSTPLSPEndpointID = 27 // MPLS-TP LSP Endpoint Identifier + AddrFamilyMPLSTPPseudowireEndpointID = 28 // MPLS-TP Pseudowire Endpoint Identifier + AddrFamilyMTIPv4 = 29 // MT IP: Multi-Topology IP version 4 + AddrFamilyMTIPv6 = 30 // MT IPv6: Multi-Topology IP version 6 + AddrFamilyEIGRPCommonServiceFamily = 16384 // EIGRP Common Service Family + AddrFamilyEIGRPIPv4ServiceFamily = 16385 // EIGRP IPv4 Service Family + AddrFamilyEIGRPIPv6ServiceFamily = 16386 // EIGRP IPv6 Service Family + AddrFamilyLISPCanonicalAddressFormat = 16387 // LISP Canonical Address Format (LCAF) + AddrFamilyBGPLS = 16388 // BGP-LS + AddrFamily48bitMAC = 16389 // 48-bit MAC + AddrFamily64bitMAC = 16390 // 64-bit MAC + AddrFamilyOUI = 16391 // OUI + AddrFamilyMACFinal24bits = 16392 // MAC/24 + AddrFamilyMACFinal40bits = 16393 // MAC/40 + AddrFamilyIPv6Initial64bits = 16394 // IPv6/64 + AddrFamilyRBridgePortID = 16395 // RBridge Port ID + AddrFamilyTRILLNickname = 16396 // TRILL Nickname +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr.go new file mode 100644 index 00000000000..1eb07d26dee --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr.go @@ -0,0 +1,11 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package socket + +func (h *cmsghdr) len() int { return int(h.Len) } +func (h *cmsghdr) lvl() int { return int(h.Level) } +func (h *cmsghdr) typ() int { return int(h.Type) } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go new file mode 100644 index 00000000000..d1d0c2de54b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go @@ -0,0 +1,13 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go new file mode 100644 index 00000000000..bac66811ddd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go @@ -0,0 +1,14 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm mips mipsle 386 +// +build linux + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go new file mode 100644 index 00000000000..63f0534fa76 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go @@ -0,0 +1,14 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64 amd64 ppc64 ppc64le mips64 mips64le s390x +// +build linux + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint64(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go new file mode 100644 index 00000000000..7dedd430eb0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go @@ -0,0 +1,14 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64 +// +build solaris + +package socket + +func (h *cmsghdr) set(l, lvl, typ int) { + h.Len = uint32(l) + h.Level = int32(lvl) + h.Type = int32(typ) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go new file mode 100644 index 00000000000..a4e71226f80 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go @@ -0,0 +1,17 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris + +package socket + +type cmsghdr struct{} + +const sizeofCmsghdr = 0 + +func (h *cmsghdr) len() int { return 0 } +func (h *cmsghdr) lvl() int { return 0 } +func (h *cmsghdr) typ() int { return 0 } + +func (h *cmsghdr) set(l, lvl, typ int) {} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/error_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/error_unix.go new file mode 100644 index 00000000000..93dff918028 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/error_unix.go @@ -0,0 +1,31 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package socket + +import "syscall" + +var ( + errEAGAIN error = syscall.EAGAIN + errEINVAL error = syscall.EINVAL + errENOENT error = syscall.ENOENT +) + +// errnoErr returns common boxed Errno values, to prevent allocations +// at runtime. +func errnoErr(errno syscall.Errno) error { + switch errno { + case 0: + return nil + case syscall.EAGAIN: + return errEAGAIN + case syscall.EINVAL: + return errEINVAL + case syscall.ENOENT: + return errENOENT + } + return errno +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/error_windows.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/error_windows.go new file mode 100644 index 00000000000..6a6379a8b07 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/error_windows.go @@ -0,0 +1,26 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import "syscall" + +var ( + errERROR_IO_PENDING error = syscall.ERROR_IO_PENDING + errEINVAL error = syscall.EINVAL +) + +// errnoErr returns common boxed Errno values, to prevent allocations +// at runtime. +func errnoErr(errno syscall.Errno) error { + switch errno { + case 0: + return nil + case syscall.ERROR_IO_PENDING: + return errERROR_IO_PENDING + case syscall.EINVAL: + return errEINVAL + } + return errno +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_32bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_32bit.go new file mode 100644 index 00000000000..05d6082d147 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_32bit.go @@ -0,0 +1,19 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm mips mipsle 386 +// +build darwin dragonfly freebsd linux netbsd openbsd + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*byte)(unsafe.Pointer(&b[0])) + v.Len = uint32(l) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_64bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_64bit.go new file mode 100644 index 00000000000..afb34ad58eb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_64bit.go @@ -0,0 +1,19 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64 amd64 ppc64 ppc64le mips64 mips64le s390x +// +build darwin dragonfly freebsd linux netbsd openbsd + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*byte)(unsafe.Pointer(&b[0])) + v.Len = uint64(l) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go new file mode 100644 index 00000000000..8d17a40c404 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go @@ -0,0 +1,19 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64 +// +build solaris + +package socket + +import "unsafe" + +func (v *iovec) set(b []byte) { + l := len(b) + if l == 0 { + return + } + v.Base = (*int8)(unsafe.Pointer(&b[0])) + v.Len = uint64(l) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_stub.go new file mode 100644 index 00000000000..c87d2a9339d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/iovec_stub.go @@ -0,0 +1,11 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris + +package socket + +type iovec struct{} + +func (v *iovec) set(b []byte) {} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go new file mode 100644 index 00000000000..2e80a9cb747 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go @@ -0,0 +1,21 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !linux,!netbsd + +package socket + +import "net" + +type mmsghdr struct{} + +type mmsghdrs []mmsghdr + +func (hs mmsghdrs) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr) []byte) error { + return nil +} + +func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error { + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go new file mode 100644 index 00000000000..3c42ea7ad85 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go @@ -0,0 +1,42 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux netbsd + +package socket + +import "net" + +type mmsghdrs []mmsghdr + +func (hs mmsghdrs) pack(ms []Message, parseFn func([]byte, string) (net.Addr, error), marshalFn func(net.Addr) []byte) error { + for i := range hs { + vs := make([]iovec, len(ms[i].Buffers)) + var sa []byte + if parseFn != nil { + sa = make([]byte, sizeofSockaddrInet6) + } + if marshalFn != nil { + sa = marshalFn(ms[i].Addr) + } + hs[i].Hdr.pack(vs, ms[i].Buffers, ms[i].OOB, sa) + } + return nil +} + +func (hs mmsghdrs) unpack(ms []Message, parseFn func([]byte, string) (net.Addr, error), hint string) error { + for i := range hs { + ms[i].N = int(hs[i].Len) + ms[i].NN = hs[i].Hdr.controllen() + ms[i].Flags = hs[i].Hdr.flags() + if parseFn != nil { + var err error + ms[i].Addr, err = parseFn(hs[i].Hdr.name(), hint) + if err != nil { + return err + } + } + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go new file mode 100644 index 00000000000..5567afc88da --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go @@ -0,0 +1,39 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + h.setIov(vs) + if len(oob) > 0 { + h.Control = (*byte)(unsafe.Pointer(&oob[0])) + h.Controllen = uint32(len(oob)) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) name() []byte { + if h.Name != nil && h.Namelen > 0 { + return (*[sizeofSockaddrInet6]byte)(unsafe.Pointer(h.Name))[:h.Namelen] + } + return nil +} + +func (h *msghdr) controllen() int { + return int(h.Controllen) +} + +func (h *msghdr) flags() int { + return int(h.Flags) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go new file mode 100644 index 00000000000..b8c87b72b94 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go @@ -0,0 +1,16 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd + +package socket + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = int32(l) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux.go new file mode 100644 index 00000000000..5a38798cc0c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux.go @@ -0,0 +1,36 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + h.setIov(vs) + if len(oob) > 0 { + h.setControl(oob) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) name() []byte { + if h.Name != nil && h.Namelen > 0 { + return (*[sizeofSockaddrInet6]byte)(unsafe.Pointer(h.Name))[:h.Namelen] + } + return nil +} + +func (h *msghdr) controllen() int { + return int(h.Controllen) +} + +func (h *msghdr) flags() int { + return int(h.Flags) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go new file mode 100644 index 00000000000..a7a5987c883 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go @@ -0,0 +1,24 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm mips mipsle 386 +// +build linux + +package socket + +import "unsafe" + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint32(l) +} + +func (h *msghdr) setControl(b []byte) { + h.Control = (*byte)(unsafe.Pointer(&b[0])) + h.Controllen = uint32(len(b)) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go new file mode 100644 index 00000000000..610fc4f3bba --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go @@ -0,0 +1,24 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64 amd64 ppc64 ppc64le mips64 mips64le s390x +// +build linux + +package socket + +import "unsafe" + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint64(l) +} + +func (h *msghdr) setControl(b []byte) { + h.Control = (*byte)(unsafe.Pointer(&b[0])) + h.Controllen = uint64(len(b)) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go new file mode 100644 index 00000000000..71a69e2513a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go @@ -0,0 +1,14 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +func (h *msghdr) setIov(vs []iovec) { + l := len(vs) + if l == 0 { + return + } + h.Iov = &vs[0] + h.Iovlen = uint32(l) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go new file mode 100644 index 00000000000..6465b207324 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go @@ -0,0 +1,36 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64 +// +build solaris + +package socket + +import "unsafe" + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) { + for i := range vs { + vs[i].set(bs[i]) + } + if len(vs) > 0 { + h.Iov = &vs[0] + h.Iovlen = int32(len(vs)) + } + if len(oob) > 0 { + h.Accrights = (*int8)(unsafe.Pointer(&oob[0])) + h.Accrightslen = int32(len(oob)) + } + if sa != nil { + h.Name = (*byte)(unsafe.Pointer(&sa[0])) + h.Namelen = uint32(len(sa)) + } +} + +func (h *msghdr) controllen() int { + return int(h.Accrightslen) +} + +func (h *msghdr) flags() int { + return int(NativeEndian.Uint32(h.Pad_cgo_2[:])) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_stub.go new file mode 100644 index 00000000000..64e8173352a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/msghdr_stub.go @@ -0,0 +1,14 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris + +package socket + +type msghdr struct{} + +func (h *msghdr) pack(vs []iovec, bs [][]byte, oob []byte, sa []byte) {} +func (h *msghdr) name() []byte { return nil } +func (h *msghdr) controllen() int { return 0 } +func (h *msghdr) flags() int { return 0 } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn.go new file mode 100644 index 00000000000..d6871d55f72 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn.go @@ -0,0 +1,66 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package socket + +import ( + "errors" + "net" + "os" + "syscall" +) + +// A Conn represents a raw connection. +type Conn struct { + network string + c syscall.RawConn +} + +// NewConn returns a new raw connection. +func NewConn(c net.Conn) (*Conn, error) { + var err error + var cc Conn + switch c := c.(type) { + case *net.TCPConn: + cc.network = "tcp" + cc.c, err = c.SyscallConn() + case *net.UDPConn: + cc.network = "udp" + cc.c, err = c.SyscallConn() + case *net.IPConn: + cc.network = "ip" + cc.c, err = c.SyscallConn() + default: + return nil, errors.New("unknown connection type") + } + if err != nil { + return nil, err + } + return &cc, nil +} + +func (o *Option) get(c *Conn, b []byte) (int, error) { + var operr error + var n int + fn := func(s uintptr) { + n, operr = getsockopt(s, o.Level, o.Name, b) + } + if err := c.c.Control(fn); err != nil { + return 0, err + } + return n, os.NewSyscallError("getsockopt", operr) +} + +func (o *Option) set(c *Conn, b []byte) error { + var operr error + fn := func(s uintptr) { + operr = setsockopt(s, o.Level, o.Name, b) + } + if err := c.c.Control(fn); err != nil { + return err + } + return os.NewSyscallError("setsockopt", operr) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go new file mode 100644 index 00000000000..499164a3fbf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go @@ -0,0 +1,74 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 +// +build linux + +package socket + +import ( + "net" + "os" + "syscall" +) + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + hs := make(mmsghdrs, len(ms)) + var parseFn func([]byte, string) (net.Addr, error) + if c.network != "tcp" { + parseFn = parseInetAddr + } + if err := hs.pack(ms, parseFn, nil); err != nil { + return 0, err + } + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = recvmmsg(s, hs, flags) + if operr == syscall.EAGAIN { + return false + } + return true + } + if err := c.c.Read(fn); err != nil { + return n, err + } + if operr != nil { + return n, os.NewSyscallError("recvmmsg", operr) + } + if err := hs[:n].unpack(ms[:n], parseFn, c.network); err != nil { + return n, err + } + return n, nil +} + +func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + hs := make(mmsghdrs, len(ms)) + var marshalFn func(net.Addr) []byte + if c.network != "tcp" { + marshalFn = marshalInetAddr + } + if err := hs.pack(ms, nil, marshalFn); err != nil { + return 0, err + } + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = sendmmsg(s, hs, flags) + if operr == syscall.EAGAIN { + return false + } + return true + } + if err := c.c.Write(fn); err != nil { + return n, err + } + if operr != nil { + return n, os.NewSyscallError("sendmmsg", operr) + } + if err := hs[:n].unpack(ms[:n], nil, ""); err != nil { + return n, err + } + return n, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_msg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_msg.go new file mode 100644 index 00000000000..b21d2e6418d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_msg.go @@ -0,0 +1,77 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package socket + +import ( + "os" + "syscall" +) + +func (c *Conn) recvMsg(m *Message, flags int) error { + var h msghdr + vs := make([]iovec, len(m.Buffers)) + var sa []byte + if c.network != "tcp" { + sa = make([]byte, sizeofSockaddrInet6) + } + h.pack(vs, m.Buffers, m.OOB, sa) + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = recvmsg(s, &h, flags) + if operr == syscall.EAGAIN { + return false + } + return true + } + if err := c.c.Read(fn); err != nil { + return err + } + if operr != nil { + return os.NewSyscallError("recvmsg", operr) + } + if c.network != "tcp" { + var err error + m.Addr, err = parseInetAddr(sa[:], c.network) + if err != nil { + return err + } + } + m.N = n + m.NN = h.controllen() + m.Flags = h.flags() + return nil +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + var h msghdr + vs := make([]iovec, len(m.Buffers)) + var sa []byte + if m.Addr != nil { + sa = marshalInetAddr(m.Addr) + } + h.pack(vs, m.Buffers, m.OOB, sa) + var operr error + var n int + fn := func(s uintptr) bool { + n, operr = sendmsg(s, &h, flags) + if operr == syscall.EAGAIN { + return false + } + return true + } + if err := c.c.Write(fn); err != nil { + return err + } + if operr != nil { + return os.NewSyscallError("sendmsg", operr) + } + m.N = n + m.NN = len(m.OOB) + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go new file mode 100644 index 00000000000..f78832aa4a7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go @@ -0,0 +1,18 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 +// +build !linux + +package socket + +import "errors" + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go new file mode 100644 index 00000000000..96733cbe1b9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go @@ -0,0 +1,18 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package socket + +import "errors" + +func (c *Conn) recvMsg(m *Message, flags int) error { + return errors.New("not implemented") +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + return errors.New("not implemented") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_stub.go new file mode 100644 index 00000000000..d2add1a0aa9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/rawconn_stub.go @@ -0,0 +1,25 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +package socket + +import "errors" + +func (c *Conn) recvMsg(m *Message, flags int) error { + return errors.New("not implemented") +} + +func (c *Conn) sendMsg(m *Message, flags int) error { + return errors.New("not implemented") +} + +func (c *Conn) recvMsgs(ms []Message, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func (c *Conn) sendMsgs(ms []Message, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/reflect.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/reflect.go new file mode 100644 index 00000000000..bb179f11d8c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/reflect.go @@ -0,0 +1,62 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +package socket + +import ( + "errors" + "net" + "os" + "reflect" + "runtime" +) + +// A Conn represents a raw connection. +type Conn struct { + c net.Conn +} + +// NewConn returns a new raw connection. +func NewConn(c net.Conn) (*Conn, error) { + return &Conn{c: c}, nil +} + +func (o *Option) get(c *Conn, b []byte) (int, error) { + s, err := socketOf(c.c) + if err != nil { + return 0, err + } + n, err := getsockopt(s, o.Level, o.Name, b) + return n, os.NewSyscallError("getsockopt", err) +} + +func (o *Option) set(c *Conn, b []byte) error { + s, err := socketOf(c.c) + if err != nil { + return err + } + return os.NewSyscallError("setsockopt", setsockopt(s, o.Level, o.Name, b)) +} + +func socketOf(c net.Conn) (uintptr, error) { + switch c.(type) { + case *net.TCPConn, *net.UDPConn, *net.IPConn: + v := reflect.ValueOf(c) + switch e := v.Elem(); e.Kind() { + case reflect.Struct: + fd := e.FieldByName("conn").FieldByName("fd") + switch e := fd.Elem(); e.Kind() { + case reflect.Struct: + sysfd := e.FieldByName("sysfd") + if runtime.GOOS == "windows" { + return uintptr(sysfd.Uint()), nil + } + return uintptr(sysfd.Int()), nil + } + } + } + return 0, errors.New("invalid type") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/socket.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/socket.go new file mode 100644 index 00000000000..5f9730e6d97 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/socket.go @@ -0,0 +1,285 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package socket provides a portable interface for socket system +// calls. +package socket // import "golang.org/x/net/internal/socket" + +import ( + "errors" + "net" + "unsafe" +) + +// An Option represents a sticky socket option. +type Option struct { + Level int // level + Name int // name; must be equal or greater than 1 + Len int // length of value in bytes; must be equal or greater than 1 +} + +// Get reads a value for the option from the kernel. +// It returns the number of bytes written into b. +func (o *Option) Get(c *Conn, b []byte) (int, error) { + if o.Name < 1 || o.Len < 1 { + return 0, errors.New("invalid option") + } + if len(b) < o.Len { + return 0, errors.New("short buffer") + } + return o.get(c, b) +} + +// GetInt returns an integer value for the option. +// +// The Len field of Option must be either 1 or 4. +func (o *Option) GetInt(c *Conn) (int, error) { + if o.Len != 1 && o.Len != 4 { + return 0, errors.New("invalid option") + } + var b []byte + var bb [4]byte + if o.Len == 1 { + b = bb[:1] + } else { + b = bb[:4] + } + n, err := o.get(c, b) + if err != nil { + return 0, err + } + if n != o.Len { + return 0, errors.New("invalid option length") + } + if o.Len == 1 { + return int(b[0]), nil + } + return int(NativeEndian.Uint32(b[:4])), nil +} + +// Set writes the option and value to the kernel. +func (o *Option) Set(c *Conn, b []byte) error { + if o.Name < 1 || o.Len < 1 { + return errors.New("invalid option") + } + if len(b) < o.Len { + return errors.New("short buffer") + } + return o.set(c, b) +} + +// SetInt writes the option and value to the kernel. +// +// The Len field of Option must be either 1 or 4. +func (o *Option) SetInt(c *Conn, v int) error { + if o.Len != 1 && o.Len != 4 { + return errors.New("invalid option") + } + var b []byte + if o.Len == 1 { + b = []byte{byte(v)} + } else { + var bb [4]byte + NativeEndian.PutUint32(bb[:o.Len], uint32(v)) + b = bb[:4] + } + return o.set(c, b) +} + +func controlHeaderLen() int { + return roundup(sizeofCmsghdr) +} + +func controlMessageLen(dataLen int) int { + return roundup(sizeofCmsghdr) + dataLen +} + +// ControlMessageSpace returns the whole length of control message. +func ControlMessageSpace(dataLen int) int { + return roundup(sizeofCmsghdr) + roundup(dataLen) +} + +// A ControlMessage represents the head message in a stream of control +// messages. +// +// A control message comprises of a header, data and a few padding +// fields to conform to the interface to the kernel. +// +// See RFC 3542 for further information. +type ControlMessage []byte + +// Data returns the data field of the control message at the head on +// m. +func (m ControlMessage) Data(dataLen int) []byte { + l := controlHeaderLen() + if len(m) < l || len(m) < l+dataLen { + return nil + } + return m[l : l+dataLen] +} + +// Next returns the control message at the next on m. +// +// Next works only for standard control messages. +func (m ControlMessage) Next(dataLen int) ControlMessage { + l := ControlMessageSpace(dataLen) + if len(m) < l { + return nil + } + return m[l:] +} + +// MarshalHeader marshals the header fields of the control message at +// the head on m. +func (m ControlMessage) MarshalHeader(lvl, typ, dataLen int) error { + if len(m) < controlHeaderLen() { + return errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + h.set(controlMessageLen(dataLen), lvl, typ) + return nil +} + +// ParseHeader parses and returns the header fields of the control +// message at the head on m. +func (m ControlMessage) ParseHeader() (lvl, typ, dataLen int, err error) { + l := controlHeaderLen() + if len(m) < l { + return 0, 0, 0, errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + return h.lvl(), h.typ(), int(uint64(h.len()) - uint64(l)), nil +} + +// Marshal marshals the control message at the head on m, and returns +// the next control message. +func (m ControlMessage) Marshal(lvl, typ int, data []byte) (ControlMessage, error) { + l := len(data) + if len(m) < ControlMessageSpace(l) { + return nil, errors.New("short message") + } + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + h.set(controlMessageLen(l), lvl, typ) + if l > 0 { + copy(m.Data(l), data) + } + return m.Next(l), nil +} + +// Parse parses m as a single or multiple control messages. +// +// Parse works for both standard and compatible messages. +func (m ControlMessage) Parse() ([]ControlMessage, error) { + var ms []ControlMessage + for len(m) >= controlHeaderLen() { + h := (*cmsghdr)(unsafe.Pointer(&m[0])) + l := h.len() + if l <= 0 { + return nil, errors.New("invalid header length") + } + if uint64(l) < uint64(controlHeaderLen()) { + return nil, errors.New("invalid message length") + } + if uint64(l) > uint64(len(m)) { + return nil, errors.New("short buffer") + } + // On message reception: + // + // |<- ControlMessageSpace --------------->| + // |<- controlMessageLen ---------->| | + // |<- controlHeaderLen ->| | | + // +---------------+------+---------+------+ + // | Header | PadH | Data | PadD | + // +---------------+------+---------+------+ + // + // On compatible message reception: + // + // | ... |<- controlMessageLen ----------->| + // | ... |<- controlHeaderLen ->| | + // +-----+---------------+------+----------+ + // | ... | Header | PadH | Data | + // +-----+---------------+------+----------+ + ms = append(ms, ControlMessage(m[:l])) + ll := l - controlHeaderLen() + if len(m) >= ControlMessageSpace(ll) { + m = m[ControlMessageSpace(ll):] + } else { + m = m[controlMessageLen(ll):] + } + } + return ms, nil +} + +// NewControlMessage returns a new stream of control messages. +func NewControlMessage(dataLen []int) ControlMessage { + var l int + for i := range dataLen { + l += ControlMessageSpace(dataLen[i]) + } + return make([]byte, l) +} + +// A Message represents an IO message. +type Message struct { + // When writing, the Buffers field must contain at least one + // byte to write. + // When reading, the Buffers field will always contain a byte + // to read. + Buffers [][]byte + + // OOB contains protocol-specific control or miscellaneous + // ancillary data known as out-of-band data. + OOB []byte + + // Addr specifies a destination address when writing. + // It can be nil when the underlying protocol of the raw + // connection uses connection-oriented communication. + // After a successful read, it may contain the source address + // on the received packet. + Addr net.Addr + + N int // # of bytes read or written from/to Buffers + NN int // # of bytes read or written from/to OOB + Flags int // protocol-specific information on the received message +} + +// RecvMsg wraps recvmsg system call. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +func (c *Conn) RecvMsg(m *Message, flags int) error { + return c.recvMsg(m, flags) +} + +// SendMsg wraps sendmsg system call. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +func (c *Conn) SendMsg(m *Message, flags int) error { + return c.sendMsg(m, flags) +} + +// RecvMsgs wraps recvmmsg system call. +// +// It returns the number of processed messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// Only Linux supports this. +func (c *Conn) RecvMsgs(ms []Message, flags int) (int, error) { + return c.recvMsgs(ms, flags) +} + +// SendMsgs wraps sendmmsg system call. +// +// It returns the number of processed messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// Only Linux supports this. +func (c *Conn) SendMsgs(ms []Message, flags int) (int, error) { + return c.sendMsgs(ms, flags) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys.go new file mode 100644 index 00000000000..4f0eead138a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys.go @@ -0,0 +1,33 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import ( + "encoding/binary" + "unsafe" +) + +var ( + // NativeEndian is the machine native endian implementation of + // ByteOrder. + NativeEndian binary.ByteOrder + + kernelAlign int +) + +func init() { + i := uint32(1) + b := (*[4]byte)(unsafe.Pointer(&i)) + if b[0] == 1 { + NativeEndian = binary.LittleEndian + } else { + NativeEndian = binary.BigEndian + } + kernelAlign = probeProtocolStack() +} + +func roundup(l int) int { + return (l + kernelAlign - 1) & ^(kernelAlign - 1) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_bsd.go new file mode 100644 index 00000000000..f13e14ff368 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_bsd.go @@ -0,0 +1,17 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd openbsd + +package socket + +import "errors" + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go new file mode 100644 index 00000000000..f723fa36aff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go @@ -0,0 +1,14 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd netbsd openbsd + +package socket + +import "unsafe" + +func probeProtocolStack() int { + var p uintptr + return int(unsafe.Sizeof(p)) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_darwin.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_darwin.go new file mode 100644 index 00000000000..b17d223bff2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_darwin.go @@ -0,0 +1,7 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +func probeProtocolStack() int { return 4 } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go new file mode 100644 index 00000000000..b17d223bff2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go @@ -0,0 +1,7 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +func probeProtocolStack() int { return 4 } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux.go new file mode 100644 index 00000000000..1559521e038 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux.go @@ -0,0 +1,27 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux,!s390x,!386 + +package socket + +import ( + "syscall" + "unsafe" +) + +func probeProtocolStack() int { + var p uintptr + return int(unsafe.Sizeof(p)) +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_386.go new file mode 100644 index 00000000000..235b2cc08a6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_386.go @@ -0,0 +1,55 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import ( + "syscall" + "unsafe" +) + +func probeProtocolStack() int { return 4 } + +const ( + sysSETSOCKOPT = 0xe + sysGETSOCKOPT = 0xf + sysSENDMSG = 0x10 + sysRECVMSG = 0x11 + sysRECVMMSG = 0x13 + sysSENDMMSG = 0x14 +) + +func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) +func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0) + return int(l), errnoErr(errno) +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_386.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_386.s new file mode 100644 index 00000000000..93e7d75ec03 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_386.s @@ -0,0 +1,11 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 + JMP syscall·rawsocketcall(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go new file mode 100644 index 00000000000..9decee2e59a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x12b + sysSENDMMSG = 0x133 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go new file mode 100644 index 00000000000..d753b436dff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x16d + sysSENDMMSG = 0x176 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go new file mode 100644 index 00000000000..b670894366d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0xf3 + sysSENDMMSG = 0x10d +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go new file mode 100644 index 00000000000..9c0d74014f3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x10ef + sysSENDMMSG = 0x10f7 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go new file mode 100644 index 00000000000..071a4aba8b2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x14ae + sysSENDMMSG = 0x14b6 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go new file mode 100644 index 00000000000..071a4aba8b2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x14ae + sysSENDMMSG = 0x14b6 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go new file mode 100644 index 00000000000..9c0d74014f3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x10ef + sysSENDMMSG = 0x10f7 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go new file mode 100644 index 00000000000..21c1e3f004a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x157 + sysSENDMMSG = 0x15d +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go new file mode 100644 index 00000000000..21c1e3f004a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go @@ -0,0 +1,10 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +const ( + sysRECVMMSG = 0x157 + sysSENDMMSG = 0x15d +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go new file mode 100644 index 00000000000..327979efbb4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go @@ -0,0 +1,55 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import ( + "syscall" + "unsafe" +) + +func probeProtocolStack() int { return 8 } + +const ( + sysSETSOCKOPT = 0xe + sysGETSOCKOPT = 0xf + sysSENDMSG = 0x10 + sysRECVMSG = 0x11 + sysRECVMMSG = 0x13 + sysSENDMMSG = 0x14 +) + +func socketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) +func rawsocketcall(call, a0, a1, a2, a3, a4, a5 uintptr) (uintptr, syscall.Errno) + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, errno := socketcall(sysGETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0) + return int(l), errnoErr(errno) +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + _, errno := socketcall(sysSETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, errno := socketcall(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s new file mode 100644 index 00000000000..06d75628c9b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s @@ -0,0 +1,11 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·socketcall(SB),NOSPLIT,$0-72 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-72 + JMP syscall·rawsocketcall(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_netbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_netbsd.go new file mode 100644 index 00000000000..431851c12e5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_netbsd.go @@ -0,0 +1,25 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import ( + "syscall" + "unsafe" +) + +const ( + sysRECVMMSG = 0x1db + sysSENDMMSG = 0x1dc +) + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysRECVMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall6(sysSENDMMSG, s, uintptr(unsafe.Pointer(&hs[0])), uintptr(len(hs)), uintptr(flags), 0, 0) + return int(n), errnoErr(errno) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_posix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_posix.go new file mode 100644 index 00000000000..dc130c27eb3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_posix.go @@ -0,0 +1,168 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package socket + +import ( + "encoding/binary" + "errors" + "net" + "runtime" + "strconv" + "sync" + "time" +) + +func marshalInetAddr(a net.Addr) []byte { + switch a := a.(type) { + case *net.TCPAddr: + return marshalSockaddr(a.IP, a.Port, a.Zone) + case *net.UDPAddr: + return marshalSockaddr(a.IP, a.Port, a.Zone) + case *net.IPAddr: + return marshalSockaddr(a.IP, 0, a.Zone) + default: + return nil + } +} + +func marshalSockaddr(ip net.IP, port int, zone string) []byte { + if ip4 := ip.To4(); ip4 != nil { + b := make([]byte, sizeofSockaddrInet) + switch runtime.GOOS { + case "android", "linux", "solaris", "windows": + NativeEndian.PutUint16(b[:2], uint16(sysAF_INET)) + default: + b[0] = sizeofSockaddrInet + b[1] = sysAF_INET + } + binary.BigEndian.PutUint16(b[2:4], uint16(port)) + copy(b[4:8], ip4) + return b + } + if ip6 := ip.To16(); ip6 != nil && ip.To4() == nil { + b := make([]byte, sizeofSockaddrInet6) + switch runtime.GOOS { + case "android", "linux", "solaris", "windows": + NativeEndian.PutUint16(b[:2], uint16(sysAF_INET6)) + default: + b[0] = sizeofSockaddrInet6 + b[1] = sysAF_INET6 + } + binary.BigEndian.PutUint16(b[2:4], uint16(port)) + copy(b[8:24], ip6) + if zone != "" { + NativeEndian.PutUint32(b[24:28], uint32(zoneCache.index(zone))) + } + return b + } + return nil +} + +func parseInetAddr(b []byte, network string) (net.Addr, error) { + if len(b) < 2 { + return nil, errors.New("invalid address") + } + var af int + switch runtime.GOOS { + case "android", "linux", "solaris", "windows": + af = int(NativeEndian.Uint16(b[:2])) + default: + af = int(b[1]) + } + var ip net.IP + var zone string + if af == sysAF_INET { + if len(b) < sizeofSockaddrInet { + return nil, errors.New("short address") + } + ip = make(net.IP, net.IPv4len) + copy(ip, b[4:8]) + } + if af == sysAF_INET6 { + if len(b) < sizeofSockaddrInet6 { + return nil, errors.New("short address") + } + ip = make(net.IP, net.IPv6len) + copy(ip, b[8:24]) + if id := int(NativeEndian.Uint32(b[24:28])); id > 0 { + zone = zoneCache.name(id) + } + } + switch network { + case "tcp", "tcp4", "tcp6": + return &net.TCPAddr{IP: ip, Port: int(binary.BigEndian.Uint16(b[2:4])), Zone: zone}, nil + case "udp", "udp4", "udp6": + return &net.UDPAddr{IP: ip, Port: int(binary.BigEndian.Uint16(b[2:4])), Zone: zone}, nil + default: + return &net.IPAddr{IP: ip, Zone: zone}, nil + } +} + +// An ipv6ZoneCache represents a cache holding partial network +// interface information. It is used for reducing the cost of IPv6 +// addressing scope zone resolution. +// +// Multiple names sharing the index are managed by first-come +// first-served basis for consistency. +type ipv6ZoneCache struct { + sync.RWMutex // guard the following + lastFetched time.Time // last time routing information was fetched + toIndex map[string]int // interface name to its index + toName map[int]string // interface index to its name +} + +var zoneCache = ipv6ZoneCache{ + toIndex: make(map[string]int), + toName: make(map[int]string), +} + +func (zc *ipv6ZoneCache) update(ift []net.Interface) { + zc.Lock() + defer zc.Unlock() + now := time.Now() + if zc.lastFetched.After(now.Add(-60 * time.Second)) { + return + } + zc.lastFetched = now + if len(ift) == 0 { + var err error + if ift, err = net.Interfaces(); err != nil { + return + } + } + zc.toIndex = make(map[string]int, len(ift)) + zc.toName = make(map[int]string, len(ift)) + for _, ifi := range ift { + zc.toIndex[ifi.Name] = ifi.Index + if _, ok := zc.toName[ifi.Index]; !ok { + zc.toName[ifi.Index] = ifi.Name + } + } +} + +func (zc *ipv6ZoneCache) name(zone int) string { + zoneCache.update(nil) + zoneCache.RLock() + defer zoneCache.RUnlock() + name, ok := zoneCache.toName[zone] + if !ok { + name = strconv.Itoa(zone) + } + return name +} + +func (zc *ipv6ZoneCache) index(zone string) int { + zoneCache.update(nil) + zoneCache.RLock() + defer zoneCache.RUnlock() + index, ok := zoneCache.toIndex[zone] + if !ok { + index, _ = strconv.Atoi(zone) + } + return index +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_solaris.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_solaris.go new file mode 100644 index 00000000000..cced74e60d5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_solaris.go @@ -0,0 +1,71 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import ( + "errors" + "runtime" + "syscall" + "unsafe" +) + +func probeProtocolStack() int { + switch runtime.GOARCH { + case "amd64": + return 4 + default: + var p uintptr + return int(unsafe.Sizeof(p)) + } +} + +//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" +//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" +//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" + +//go:linkname procGetsockopt libc___xnet_getsockopt +//go:linkname procSetsockopt libc_setsockopt +//go:linkname procRecvmsg libc___xnet_recvmsg +//go:linkname procSendmsg libc___xnet_sendmsg + +var ( + procGetsockopt uintptr + procSetsockopt uintptr + procRecvmsg uintptr + procSendmsg uintptr +) + +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) +func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (uintptr, uintptr, syscall.Errno) + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procGetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0) + return int(l), errnoErr(errno) +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSetsockopt)), 5, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procRecvmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procSendmsg)), 3, s, uintptr(unsafe.Pointer(h)), uintptr(flags), 0, 0, 0) + return int(n), errnoErr(errno) +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s new file mode 100644 index 00000000000..a18ac5ed755 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s @@ -0,0 +1,11 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) + +TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSysvicall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_stub.go new file mode 100644 index 00000000000..d9f06d00e9b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_stub.go @@ -0,0 +1,64 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package socket + +import ( + "errors" + "net" + "runtime" + "unsafe" +) + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +func probeProtocolStack() int { + switch runtime.GOARCH { + case "amd64p32", "mips64p32": + return 4 + default: + var p uintptr + return int(unsafe.Sizeof(p)) + } +} + +func marshalInetAddr(ip net.IP, port int, zone string) []byte { + return nil +} + +func parseInetAddr(b []byte, network string) (net.Addr, error) { + return nil, errors.New("not implemented") +} + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + return 0, errors.New("not implemented") +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + return errors.New("not implemented") +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_unix.go new file mode 100644 index 00000000000..18eba30853f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_unix.go @@ -0,0 +1,33 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux,!s390x,!386 netbsd openbsd + +package socket + +import ( + "syscall" + "unsafe" +) + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + _, _, errno := syscall.Syscall6(syscall.SYS_GETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0) + return int(l), errnoErr(errno) +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + _, _, errno := syscall.Syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0) + return errnoErr(errno) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall(syscall.SYS_RECVMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) + return int(n), errnoErr(errno) +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + n, _, errno := syscall.Syscall(syscall.SYS_SENDMSG, s, uintptr(unsafe.Pointer(h)), uintptr(flags)) + return int(n), errnoErr(errno) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_windows.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_windows.go new file mode 100644 index 00000000000..54a470ebe34 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/sys_windows.go @@ -0,0 +1,70 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package socket + +import ( + "errors" + "syscall" + "unsafe" +) + +func probeProtocolStack() int { + var p uintptr + return int(unsafe.Sizeof(p)) +} + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x17 + + sysSOCK_RAW = 0x3 +) + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) + +func getsockopt(s uintptr, level, name int, b []byte) (int, error) { + l := uint32(len(b)) + err := syscall.Getsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), (*int32)(unsafe.Pointer(&l))) + return int(l), err +} + +func setsockopt(s uintptr, level, name int, b []byte) error { + return syscall.Setsockopt(syscall.Handle(s), int32(level), int32(name), (*byte)(unsafe.Pointer(&b[0])), int32(len(b))) +} + +func recvmsg(s uintptr, h *msghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmsg(s uintptr, h *msghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func recvmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} + +func sendmmsg(s uintptr, hs []mmsghdr, flags int) (int, error) { + return 0, errors.New("not implemented") +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go new file mode 100644 index 00000000000..26f8feff3a1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go new file mode 100644 index 00000000000..e2987f7db82 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go new file mode 100644 index 00000000000..26f8feff3a1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go new file mode 100644 index 00000000000..e2987f7db82 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1e + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go new file mode 100644 index 00000000000..c582abd57df --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_dragonfly.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go new file mode 100644 index 00000000000..04a24886c7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go new file mode 100644 index 00000000000..35c7cb9c953 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go new file mode 100644 index 00000000000..04a24886c7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1c + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go new file mode 100644 index 00000000000..430206930b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go @@ -0,0 +1,63 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go new file mode 100644 index 00000000000..1502f6c5529 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go new file mode 100644 index 00000000000..430206930b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go @@ -0,0 +1,63 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go new file mode 100644 index 00000000000..1502f6c5529 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go new file mode 100644 index 00000000000..430206930b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go @@ -0,0 +1,63 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go new file mode 100644 index 00000000000..1502f6c5529 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go new file mode 100644 index 00000000000..1502f6c5529 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go new file mode 100644 index 00000000000..430206930b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go @@ -0,0 +1,63 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go new file mode 100644 index 00000000000..1502f6c5529 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go new file mode 100644 index 00000000000..1502f6c5529 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go new file mode 100644 index 00000000000..1502f6c5529 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go @@ -0,0 +1,66 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0xa + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x38 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0x10 + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go new file mode 100644 index 00000000000..db60491fe37 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go @@ -0,0 +1,65 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go new file mode 100644 index 00000000000..2a1a79985a0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go @@ -0,0 +1,68 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 + Pad_cgo_0 [4]byte +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofMmsghdr = 0x40 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go new file mode 100644 index 00000000000..db60491fe37 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go @@ -0,0 +1,65 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type mmsghdr struct { + Hdr msghdr + Len uint32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofMmsghdr = 0x20 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go new file mode 100644 index 00000000000..1c836361e82 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go new file mode 100644 index 00000000000..a6c0bf464a1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go @@ -0,0 +1,61 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen uint32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go new file mode 100644 index 00000000000..1c836361e82 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go @@ -0,0 +1,59 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x18 + + sysSOCK_RAW = 0x3 +) + +type iovec struct { + Base *byte + Len uint32 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +const ( + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x1c +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go new file mode 100644 index 00000000000..327c63290cd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go @@ -0,0 +1,60 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_solaris.go + +package socket + +const ( + sysAF_UNSPEC = 0x0 + sysAF_INET = 0x2 + sysAF_INET6 = 0x1a + + sysSOCK_RAW = 0x4 +) + +type iovec struct { + Base *int8 + Len uint64 +} + +type msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Accrights *int8 + Accrightslen int32 + Pad_cgo_2 [4]byte +} + +type cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +const ( + sizeofIovec = 0x10 + sizeofMsghdr = 0x30 + sizeofCmsghdr = 0xc + + sizeofSockaddrInet = 0x10 + sizeofSockaddrInet6 = 0x20 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/batch.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/batch.go new file mode 100644 index 00000000000..5ce9b3583cc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/batch.go @@ -0,0 +1,190 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package ipv4 + +import ( + "net" + "runtime" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// PacketConn are not implemented. + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// RawConn are not implemented. + +// A Message represents an IO message. +// +// type Message struct { +// Buffers [][]byte +// OOB []byte +// Addr net.Addr +// N int +// NN int +// Flags int +// } +// +// The Buffers fields represents a list of contiguous buffers, which +// can be used for vectored IO, for example, putting a header and a +// payload in each slice. +// When writing, the Buffers field must contain at least one byte to +// write. +// When reading, the Buffers field will always contain a byte to read. +// +// The OOB field contains protocol-specific control or miscellaneous +// ancillary data known as out-of-band data. +// It can be nil when not required. +// +// The Addr field specifies a destination address when writing. +// It can be nil when the underlying protocol of the endpoint uses +// connection-oriented communication. +// After a successful read, it may contain the source address on the +// received packet. +// +// The N field indicates the number of bytes read or written from/to +// Buffers. +// +// The NN field indicates the number of bytes read or written from/to +// OOB. +// +// The Flags field contains protocol-specific information on the +// received message. +type Message = socket.Message + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +// +// Unlike the ReadFrom method, it doesn't strip the IPv4 header +// followed by option headers from the received IPv4 datagram when the +// underlying transport is net.IPConn. Each Buffers field of Message +// must be large enough to accommodate an IPv4 header and option +// headers. +func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +func (c *packetHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *packetHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + return n, err + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control.go new file mode 100644 index 00000000000..a2b02ca95b9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control.go @@ -0,0 +1,144 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "fmt" + "net" + "sync" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +type rawOpt struct { + sync.RWMutex + cflags ControlFlags +} + +func (c *rawOpt) set(f ControlFlags) { c.cflags |= f } +func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f } +func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 } + +type ControlFlags uint + +const ( + FlagTTL ControlFlags = 1 << iota // pass the TTL on the received packet + FlagSrc // pass the source address on the received packet + FlagDst // pass the destination address on the received packet + FlagInterface // pass the interface index on the received packet +) + +// A ControlMessage represents per packet basis IP-level socket options. +type ControlMessage struct { + // Receiving socket options: SetControlMessage allows to + // receive the options from the protocol stack using ReadFrom + // method of PacketConn or RawConn. + // + // Specifying socket options: ControlMessage for WriteTo + // method of PacketConn or RawConn allows to send the options + // to the protocol stack. + // + TTL int // time-to-live, receiving only + Src net.IP // source address, specifying only + Dst net.IP // destination address, receiving only + IfIndex int // interface index, must be 1 <= value when specifying +} + +func (cm *ControlMessage) String() string { + if cm == nil { + return "" + } + return fmt.Sprintf("ttl=%d src=%v dst=%v ifindex=%d", cm.TTL, cm.Src, cm.Dst, cm.IfIndex) +} + +// Marshal returns the binary encoding of cm. +func (cm *ControlMessage) Marshal() []byte { + if cm == nil { + return nil + } + var m socket.ControlMessage + if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To4() != nil || cm.IfIndex > 0) { + m = socket.NewControlMessage([]int{ctlOpts[ctlPacketInfo].length}) + } + if len(m) > 0 { + ctlOpts[ctlPacketInfo].marshal(m, cm) + } + return m +} + +// Parse parses b as a control message and stores the result in cm. +func (cm *ControlMessage) Parse(b []byte) error { + ms, err := socket.ControlMessage(b).Parse() + if err != nil { + return err + } + for _, m := range ms { + lvl, typ, l, err := m.ParseHeader() + if err != nil { + return err + } + if lvl != iana.ProtocolIP { + continue + } + switch { + case typ == ctlOpts[ctlTTL].name && l >= ctlOpts[ctlTTL].length: + ctlOpts[ctlTTL].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlDst].name && l >= ctlOpts[ctlDst].length: + ctlOpts[ctlDst].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlInterface].name && l >= ctlOpts[ctlInterface].length: + ctlOpts[ctlInterface].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPacketInfo].name && l >= ctlOpts[ctlPacketInfo].length: + ctlOpts[ctlPacketInfo].parse(cm, m.Data(l)) + } + } + return nil +} + +// NewControlMessage returns a new control message. +// +// The returned message is large enough for options specified by cf. +func NewControlMessage(cf ControlFlags) []byte { + opt := rawOpt{cflags: cf} + var l int + if opt.isset(FlagTTL) && ctlOpts[ctlTTL].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlTTL].length) + } + if ctlOpts[ctlPacketInfo].name > 0 { + if opt.isset(FlagSrc | FlagDst | FlagInterface) { + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + } else { + if opt.isset(FlagDst) && ctlOpts[ctlDst].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlDst].length) + } + if opt.isset(FlagInterface) && ctlOpts[ctlInterface].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlInterface].length) + } + } + var b []byte + if l > 0 { + b = make([]byte, l) + } + return b +} + +// Ancillary data socket options +const ( + ctlTTL = iota // header field + ctlSrc // header field + ctlDst // header field + ctlInterface // inbound or outbound interface + ctlPacketInfo // inbound or outbound packet path + ctlMax +) + +// A ctlOpt represents a binding for ancillary data socket option. +type ctlOpt struct { + name int // option name, must be equal or greater than 1 + length int // option length + marshal func([]byte, *ControlMessage) []byte + parse func(*ControlMessage, []byte) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_bsd.go new file mode 100644 index 00000000000..77e7ad5bed7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_bsd.go @@ -0,0 +1,40 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +func marshalDst(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sysIP_RECVDSTADDR, net.IPv4len) + return m.Next(net.IPv4len) +} + +func parseDst(cm *ControlMessage, b []byte) { + if len(cm.Dst) < net.IPv4len { + cm.Dst = make(net.IP, net.IPv4len) + } + copy(cm.Dst, b[:net.IPv4len]) +} + +func marshalInterface(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sysIP_RECVIF, syscall.SizeofSockaddrDatalink) + return m.Next(syscall.SizeofSockaddrDatalink) +} + +func parseInterface(cm *ControlMessage, b []byte) { + sadl := (*syscall.SockaddrDatalink)(unsafe.Pointer(&b[0])) + cm.IfIndex = int(sadl.Index) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_pktinfo.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_pktinfo.go new file mode 100644 index 00000000000..425338f35bf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_pktinfo.go @@ -0,0 +1,39 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin linux solaris + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sysIP_PKTINFO, sizeofInetPktinfo) + if cm != nil { + pi := (*inetPktinfo)(unsafe.Pointer(&m.Data(sizeofInetPktinfo)[0])) + if ip := cm.Src.To4(); ip != nil { + copy(pi.Spec_dst[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return m.Next(sizeofInetPktinfo) +} + +func parsePacketInfo(cm *ControlMessage, b []byte) { + pi := (*inetPktinfo)(unsafe.Pointer(&b[0])) + cm.IfIndex = int(pi.Ifindex) + if len(cm.Dst) < net.IPv4len { + cm.Dst = make(net.IP, net.IPv4len) + } + copy(cm.Dst, pi.Addr[:]) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_stub.go new file mode 100644 index 00000000000..5a2f7d8d3c9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_stub.go @@ -0,0 +1,13 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package ipv4 + +import "golang.org/x/net/internal/socket" + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_unix.go new file mode 100644 index 00000000000..e1ae8167b3a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_unix.go @@ -0,0 +1,73 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package ipv4 + +import ( + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + opt.Lock() + defer opt.Unlock() + if so, ok := sockOpts[ssoReceiveTTL]; ok && cf&FlagTTL != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagTTL) + } else { + opt.clear(FlagTTL) + } + } + if so, ok := sockOpts[ssoPacketInfo]; ok { + if cf&(FlagSrc|FlagDst|FlagInterface) != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(cf & (FlagSrc | FlagDst | FlagInterface)) + } else { + opt.clear(cf & (FlagSrc | FlagDst | FlagInterface)) + } + } + } else { + if so, ok := sockOpts[ssoReceiveDst]; ok && cf&FlagDst != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagDst) + } else { + opt.clear(FlagDst) + } + } + if so, ok := sockOpts[ssoReceiveInterface]; ok && cf&FlagInterface != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagInterface) + } else { + opt.clear(FlagInterface) + } + } + } + return nil +} + +func marshalTTL(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIP, sysIP_RECVTTL, 1) + return m.Next(1) +} + +func parseTTL(cm *ControlMessage, b []byte) { + cm.TTL = int(*(*byte)(unsafe.Pointer(&b[:1][0]))) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_windows.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_windows.go new file mode 100644 index 00000000000..ce55c66447d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/control_windows.go @@ -0,0 +1,16 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "syscall" + + "golang.org/x/net/internal/socket" +) + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + // TODO(mikio): implement this + return syscall.EWINDOWS +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/dgramopt.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/dgramopt.go new file mode 100644 index 00000000000..36764492d9d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/dgramopt.go @@ -0,0 +1,264 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + + "golang.org/x/net/bpf" +) + +// MulticastTTL returns the time-to-live field value for outgoing +// multicast packets. +func (c *dgramOpt) MulticastTTL() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoMulticastTTL] + if !ok { + return 0, errOpNoSupport + } + return so.GetInt(c.Conn) +} + +// SetMulticastTTL sets the time-to-live field value for future +// outgoing multicast packets. +func (c *dgramOpt) SetMulticastTTL(ttl int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastTTL] + if !ok { + return errOpNoSupport + } + return so.SetInt(c.Conn, ttl) +} + +// MulticastInterface returns the default interface for multicast +// packet transmissions. +func (c *dgramOpt) MulticastInterface() (*net.Interface, error) { + if !c.ok() { + return nil, errInvalidConn + } + so, ok := sockOpts[ssoMulticastInterface] + if !ok { + return nil, errOpNoSupport + } + return so.getMulticastInterface(c.Conn) +} + +// SetMulticastInterface sets the default interface for future +// multicast packet transmissions. +func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastInterface] + if !ok { + return errOpNoSupport + } + return so.setMulticastInterface(c.Conn, ifi) +} + +// MulticastLoopback reports whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) MulticastLoopback() (bool, error) { + if !c.ok() { + return false, errInvalidConn + } + so, ok := sockOpts[ssoMulticastLoopback] + if !ok { + return false, errOpNoSupport + } + on, err := so.GetInt(c.Conn) + if err != nil { + return false, err + } + return on == 1, nil +} + +// SetMulticastLoopback sets whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) SetMulticastLoopback(on bool) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastLoopback] + if !ok { + return errOpNoSupport + } + return so.SetInt(c.Conn, boolint(on)) +} + +// JoinGroup joins the group address group on the interface ifi. +// By default all sources that can cast data to group are accepted. +// It's possible to mute and unmute data transmission from a specific +// source by using ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup. +// JoinGroup uses the system assigned multicast interface when ifi is +// nil, although this is not recommended because the assignment +// depends on platforms and sometimes it might require routing +// configuration. +func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoJoinGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + return so.setGroup(c.Conn, ifi, grp) +} + +// LeaveGroup leaves the group address group on the interface ifi +// regardless of whether the group is any-source group or +// source-specific group. +func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoLeaveGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + return so.setGroup(c.Conn, ifi, grp) +} + +// JoinSourceSpecificGroup joins the source-specific group comprising +// group and source on the interface ifi. +// JoinSourceSpecificGroup uses the system assigned multicast +// interface when ifi is nil, although this is not recommended because +// the assignment depends on platforms and sometimes it might require +// routing configuration. +func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoJoinSourceGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// LeaveSourceSpecificGroup leaves the source-specific group on the +// interface ifi. +func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoLeaveSourceGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// ExcludeSourceSpecificGroup excludes the source-specific group from +// the already joined any-source groups by JoinGroup on the interface +// ifi. +func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoBlockSourceGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// IncludeSourceSpecificGroup includes the excluded source-specific +// group by ExcludeSourceSpecificGroup again on the interface ifi. +func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoUnblockSourceGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP4(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP4(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// ICMPFilter returns an ICMP filter. +// Currently only Linux supports this. +func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) { + if !c.ok() { + return nil, errInvalidConn + } + so, ok := sockOpts[ssoICMPFilter] + if !ok { + return nil, errOpNoSupport + } + return so.getICMPFilter(c.Conn) +} + +// SetICMPFilter deploys the ICMP filter. +// Currently only Linux supports this. +func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoICMPFilter] + if !ok { + return errOpNoSupport + } + return so.setICMPFilter(c.Conn, f) +} + +// SetBPF attaches a BPF program to the connection. +// +// Only supported on Linux. +func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoAttachFilter] + if !ok { + return errOpNoSupport + } + return so.setBPF(c.Conn, filter) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/doc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/doc.go new file mode 100644 index 00000000000..3efa2903715 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/doc.go @@ -0,0 +1,244 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ipv4 implements IP-level socket options for the Internet +// Protocol version 4. +// +// The package provides IP-level socket options that allow +// manipulation of IPv4 facilities. +// +// The IPv4 protocol and basic host requirements for IPv4 are defined +// in RFC 791 and RFC 1122. +// Host extensions for multicasting and socket interface extensions +// for multicast source filters are defined in RFC 1112 and RFC 3678. +// IGMPv1, IGMPv2 and IGMPv3 are defined in RFC 1112, RFC 2236 and RFC +// 3376. +// Source-specific multicast is defined in RFC 4607. +// +// +// Unicasting +// +// The options for unicasting are available for net.TCPConn, +// net.UDPConn and net.IPConn which are created as network connections +// that use the IPv4 transport. When a single TCP connection carrying +// a data flow of multiple packets needs to indicate the flow is +// important, Conn is used to set the type-of-service field on the +// IPv4 header for each packet. +// +// ln, err := net.Listen("tcp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer ln.Close() +// for { +// c, err := ln.Accept() +// if err != nil { +// // error handling +// } +// go func(c net.Conn) { +// defer c.Close() +// +// The outgoing packets will be labeled DiffServ assured forwarding +// class 1 low drop precedence, known as AF11 packets. +// +// if err := ipv4.NewConn(c).SetTOS(0x28); err != nil { +// // error handling +// } +// if _, err := c.Write(data); err != nil { +// // error handling +// } +// }(c) +// } +// +// +// Multicasting +// +// The options for multicasting are available for net.UDPConn and +// net.IPConn which are created as network connections that use the +// IPv4 transport. A few network facilities must be prepared before +// you begin multicasting, at a minimum joining network interfaces and +// multicast groups. +// +// en0, err := net.InterfaceByName("en0") +// if err != nil { +// // error handling +// } +// en1, err := net.InterfaceByIndex(911) +// if err != nil { +// // error handling +// } +// group := net.IPv4(224, 0, 0, 250) +// +// First, an application listens to an appropriate address with an +// appropriate service port. +// +// c, err := net.ListenPacket("udp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// +// Second, the application joins multicast groups, starts listening to +// the groups on the specified network interfaces. Note that the +// service port for transport layer protocol does not matter with this +// operation as joining groups affects only network and link layer +// protocols, such as IPv4 and Ethernet. +// +// p := ipv4.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// +// The application might set per packet control message transmissions +// between the protocol stack within the kernel. When the application +// needs a destination address on an incoming packet, +// SetControlMessage of PacketConn is used to enable control message +// transmissions. +// +// if err := p.SetControlMessage(ipv4.FlagDst, true); err != nil { +// // error handling +// } +// +// The application could identify whether the received packets are +// of interest by using the control message that contains the +// destination address of the received packet. +// +// b := make([]byte, 1500) +// for { +// n, cm, src, err := p.ReadFrom(b) +// if err != nil { +// // error handling +// } +// if cm.Dst.IsMulticast() { +// if cm.Dst.Equal(group) { +// // joined group, do something +// } else { +// // unknown group, discard +// continue +// } +// } +// +// The application can also send both unicast and multicast packets. +// +// p.SetTOS(0x0) +// p.SetTTL(16) +// if _, err := p.WriteTo(data, nil, src); err != nil { +// // error handling +// } +// dst := &net.UDPAddr{IP: group, Port: 1024} +// for _, ifi := range []*net.Interface{en0, en1} { +// if err := p.SetMulticastInterface(ifi); err != nil { +// // error handling +// } +// p.SetMulticastTTL(2) +// if _, err := p.WriteTo(data, nil, dst); err != nil { +// // error handling +// } +// } +// } +// +// +// More multicasting +// +// An application that uses PacketConn or RawConn may join multiple +// multicast groups. For example, a UDP listener with port 1024 might +// join two different groups across over two different network +// interfaces by using: +// +// c, err := net.ListenPacket("udp4", "0.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// p := ipv4.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 249)}); err != nil { +// // error handling +// } +// +// It is possible for multiple UDP listeners that listen on the same +// UDP port to join the same multicast group. The net package will +// provide a socket that listens to a wildcard address with reusable +// UDP port when an appropriate multicast address prefix is passed to +// the net.ListenPacket or net.ListenUDP. +// +// c1, err := net.ListenPacket("udp4", "224.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c1.Close() +// c2, err := net.ListenPacket("udp4", "224.0.0.0:1024") +// if err != nil { +// // error handling +// } +// defer c2.Close() +// p1 := ipv4.NewPacketConn(c1) +// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// p2 := ipv4.NewPacketConn(c2) +// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// +// Also it is possible for the application to leave or rejoin a +// multicast group on the network interface. +// +// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 248)}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 250)}); err != nil { +// // error handling +// } +// +// +// Source-specific multicasting +// +// An application that uses PacketConn or RawConn on IGMPv3 supported +// platform is able to join source-specific multicast groups. +// The application may use JoinSourceSpecificGroup and +// LeaveSourceSpecificGroup for the operation known as "include" mode, +// +// ssmgroup := net.UDPAddr{IP: net.IPv4(232, 7, 8, 9)} +// ssmsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 1)}) +// if err := p.JoinSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// if err := p.LeaveSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// +// or JoinGroup, ExcludeSourceSpecificGroup, +// IncludeSourceSpecificGroup and LeaveGroup for the operation known +// as "exclude" mode. +// +// exclsource := net.UDPAddr{IP: net.IPv4(192, 168, 0, 254)} +// if err := p.JoinGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// if err := p.ExcludeSourceSpecificGroup(en0, &ssmgroup, &exclsource); err != nil { +// // error handling +// } +// if err := p.LeaveGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// +// Note that it depends on each platform implementation what happens +// when an application which runs on IGMPv3 unsupported platform uses +// JoinSourceSpecificGroup and LeaveSourceSpecificGroup. +// In general the platform tries to fall back to conversations using +// IGMPv1 or IGMPv2 and starts to listen to multicast traffic. +// In the fallback case, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup may return an error. +package ipv4 // import "golang.org/x/net/ipv4" + +// BUG(mikio): This package is not implemented on JS, NaCl and Plan 9. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/endpoint.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/endpoint.go new file mode 100644 index 00000000000..5009463787e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/endpoint.go @@ -0,0 +1,186 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "time" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the JoinSourceSpecificGroup, +// LeaveSourceSpecificGroup, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup methods of PacketConn and RawConn are +// not implemented. + +// A Conn represents a network endpoint that uses the IPv4 transport. +// It is used to control basic IP-level socket options such as TOS and +// TTL. +type Conn struct { + genericOpt +} + +type genericOpt struct { + *socket.Conn +} + +func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil } + +// NewConn returns a new Conn. +func NewConn(c net.Conn) *Conn { + cc, _ := socket.NewConn(c) + return &Conn{ + genericOpt: genericOpt{Conn: cc}, + } +} + +// A PacketConn represents a packet network endpoint that uses the +// IPv4 transport. It is used to control several IP-level socket +// options including multicasting. It also provides datagram based +// network I/O methods specific to the IPv4 and higher layer protocols +// such as UDP. +type PacketConn struct { + genericOpt + dgramOpt + payloadHandler +} + +type dgramOpt struct { + *socket.Conn +} + +func (c *dgramOpt) ok() bool { return c != nil && c.Conn != nil } + +// SetControlMessage sets the per packet IP-level socket options. +func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return setControlMessage(c.dgramOpt.Conn, &c.payloadHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *PacketConn) SetDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.PacketConn.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *PacketConn) SetReadDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.PacketConn.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *PacketConn) SetWriteDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.PacketConn.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *PacketConn) Close() error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.PacketConn.Close() +} + +// NewPacketConn returns a new PacketConn using c as its underlying +// transport. +func NewPacketConn(c net.PacketConn) *PacketConn { + cc, _ := socket.NewConn(c.(net.Conn)) + p := &PacketConn{ + genericOpt: genericOpt{Conn: cc}, + dgramOpt: dgramOpt{Conn: cc}, + payloadHandler: payloadHandler{PacketConn: c, Conn: cc}, + } + return p +} + +// A RawConn represents a packet network endpoint that uses the IPv4 +// transport. It is used to control several IP-level socket options +// including IPv4 header manipulation. It also provides datagram +// based network I/O methods specific to the IPv4 and higher layer +// protocols that handle IPv4 datagram directly such as OSPF, GRE. +type RawConn struct { + genericOpt + dgramOpt + packetHandler +} + +// SetControlMessage sets the per packet IP-level socket options. +func (c *RawConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return setControlMessage(c.dgramOpt.Conn, &c.packetHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *RawConn) SetDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return c.packetHandler.IPConn.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *RawConn) SetReadDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return c.packetHandler.IPConn.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *RawConn) SetWriteDeadline(t time.Time) error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return c.packetHandler.IPConn.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *RawConn) Close() error { + if !c.packetHandler.ok() { + return errInvalidConn + } + return c.packetHandler.IPConn.Close() +} + +// NewRawConn returns a new RawConn using c as its underlying +// transport. +func NewRawConn(c net.PacketConn) (*RawConn, error) { + cc, err := socket.NewConn(c.(net.Conn)) + if err != nil { + return nil, err + } + r := &RawConn{ + genericOpt: genericOpt{Conn: cc}, + dgramOpt: dgramOpt{Conn: cc}, + packetHandler: packetHandler{IPConn: c.(*net.IPConn), Conn: cc}, + } + so, ok := sockOpts[ssoHeaderPrepend] + if !ok { + return nil, errOpNoSupport + } + if err := so.SetInt(r.dgramOpt.Conn, boolint(true)); err != nil { + return nil, err + } + return r, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/genericopt.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/genericopt.go new file mode 100644 index 00000000000..587ae4a1944 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/genericopt.go @@ -0,0 +1,55 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +// TOS returns the type-of-service field value for outgoing packets. +func (c *genericOpt) TOS() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoTOS] + if !ok { + return 0, errOpNoSupport + } + return so.GetInt(c.Conn) +} + +// SetTOS sets the type-of-service field value for future outgoing +// packets. +func (c *genericOpt) SetTOS(tos int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoTOS] + if !ok { + return errOpNoSupport + } + return so.SetInt(c.Conn, tos) +} + +// TTL returns the time-to-live field value for outgoing packets. +func (c *genericOpt) TTL() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoTTL] + if !ok { + return 0, errOpNoSupport + } + return so.GetInt(c.Conn) +} + +// SetTTL sets the time-to-live field value for future outgoing +// packets. +func (c *genericOpt) SetTTL(ttl int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoTTL] + if !ok { + return errOpNoSupport + } + return so.SetInt(c.Conn, ttl) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/header.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/header.go new file mode 100644 index 00000000000..a8c8f7a6c85 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/header.go @@ -0,0 +1,170 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "encoding/binary" + "fmt" + "net" + "runtime" + + "golang.org/x/net/internal/socket" +) + +const ( + Version = 4 // protocol version + HeaderLen = 20 // header length without extension headers + maxHeaderLen = 60 // sensible default, revisit if later RFCs define new usage of version and header length fields +) + +type HeaderFlags int + +const ( + MoreFragments HeaderFlags = 1 << iota // more fragments flag + DontFragment // don't fragment flag +) + +// A Header represents an IPv4 header. +type Header struct { + Version int // protocol version + Len int // header length + TOS int // type-of-service + TotalLen int // packet total length + ID int // identification + Flags HeaderFlags // flags + FragOff int // fragment offset + TTL int // time-to-live + Protocol int // next protocol + Checksum int // checksum + Src net.IP // source address + Dst net.IP // destination address + Options []byte // options, extension headers +} + +func (h *Header) String() string { + if h == nil { + return "" + } + return fmt.Sprintf("ver=%d hdrlen=%d tos=%#x totallen=%d id=%#x flags=%#x fragoff=%#x ttl=%d proto=%d cksum=%#x src=%v dst=%v", h.Version, h.Len, h.TOS, h.TotalLen, h.ID, h.Flags, h.FragOff, h.TTL, h.Protocol, h.Checksum, h.Src, h.Dst) +} + +// Marshal returns the binary encoding of h. +// +// The returned slice is in the format used by a raw IP socket on the +// local system. +// This may differ from the wire format, depending on the system. +func (h *Header) Marshal() ([]byte, error) { + if h == nil { + return nil, errInvalidConn + } + if h.Len < HeaderLen { + return nil, errHeaderTooShort + } + hdrlen := HeaderLen + len(h.Options) + b := make([]byte, hdrlen) + b[0] = byte(Version<<4 | (hdrlen >> 2 & 0x0f)) + b[1] = byte(h.TOS) + flagsAndFragOff := (h.FragOff & 0x1fff) | int(h.Flags<<13) + switch runtime.GOOS { + case "darwin", "dragonfly", "netbsd": + socket.NativeEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + socket.NativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + case "freebsd": + if freebsdVersion < 1100000 { + socket.NativeEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + socket.NativeEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } else { + binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } + default: + binary.BigEndian.PutUint16(b[2:4], uint16(h.TotalLen)) + binary.BigEndian.PutUint16(b[6:8], uint16(flagsAndFragOff)) + } + binary.BigEndian.PutUint16(b[4:6], uint16(h.ID)) + b[8] = byte(h.TTL) + b[9] = byte(h.Protocol) + binary.BigEndian.PutUint16(b[10:12], uint16(h.Checksum)) + if ip := h.Src.To4(); ip != nil { + copy(b[12:16], ip[:net.IPv4len]) + } + if ip := h.Dst.To4(); ip != nil { + copy(b[16:20], ip[:net.IPv4len]) + } else { + return nil, errMissingAddress + } + if len(h.Options) > 0 { + copy(b[HeaderLen:], h.Options) + } + return b, nil +} + +// Parse parses b as an IPv4 header and stores the result in h. +// +// The provided b must be in the format used by a raw IP socket on the +// local system. +// This may differ from the wire format, depending on the system. +func (h *Header) Parse(b []byte) error { + if h == nil || len(b) < HeaderLen { + return errHeaderTooShort + } + hdrlen := int(b[0]&0x0f) << 2 + if hdrlen > len(b) { + return errBufferTooShort + } + h.Version = int(b[0] >> 4) + h.Len = hdrlen + h.TOS = int(b[1]) + h.ID = int(binary.BigEndian.Uint16(b[4:6])) + h.TTL = int(b[8]) + h.Protocol = int(b[9]) + h.Checksum = int(binary.BigEndian.Uint16(b[10:12])) + h.Src = net.IPv4(b[12], b[13], b[14], b[15]) + h.Dst = net.IPv4(b[16], b[17], b[18], b[19]) + switch runtime.GOOS { + case "darwin", "dragonfly", "netbsd": + h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4])) + hdrlen + h.FragOff = int(socket.NativeEndian.Uint16(b[6:8])) + case "freebsd": + if freebsdVersion < 1100000 { + h.TotalLen = int(socket.NativeEndian.Uint16(b[2:4])) + if freebsdVersion < 1000000 { + h.TotalLen += hdrlen + } + h.FragOff = int(socket.NativeEndian.Uint16(b[6:8])) + } else { + h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) + h.FragOff = int(binary.BigEndian.Uint16(b[6:8])) + } + default: + h.TotalLen = int(binary.BigEndian.Uint16(b[2:4])) + h.FragOff = int(binary.BigEndian.Uint16(b[6:8])) + } + h.Flags = HeaderFlags(h.FragOff&0xe000) >> 13 + h.FragOff = h.FragOff & 0x1fff + optlen := hdrlen - HeaderLen + if optlen > 0 && len(b) >= hdrlen { + if cap(h.Options) < optlen { + h.Options = make([]byte, optlen) + } else { + h.Options = h.Options[:optlen] + } + copy(h.Options, b[HeaderLen:hdrlen]) + } + return nil +} + +// ParseHeader parses b as an IPv4 header. +// +// The provided b must be in the format used by a raw IP socket on the +// local system. +// This may differ from the wire format, depending on the system. +func ParseHeader(b []byte) (*Header, error) { + h := new(Header) + if err := h.Parse(b); err != nil { + return nil, err + } + return h, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/helper.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/helper.go new file mode 100644 index 00000000000..8d8ff98e94a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/helper.go @@ -0,0 +1,64 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "errors" + "net" +) + +var ( + errInvalidConn = errors.New("invalid connection") + errMissingAddress = errors.New("missing address") + errMissingHeader = errors.New("missing header") + errHeaderTooShort = errors.New("header too short") + errBufferTooShort = errors.New("buffer too short") + errInvalidConnType = errors.New("invalid conn type") + errOpNoSupport = errors.New("operation not supported") + errNoSuchInterface = errors.New("no such interface") + errNoSuchMulticastInterface = errors.New("no such multicast interface") + + // See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html. + freebsdVersion uint32 +) + +func boolint(b bool) int { + if b { + return 1 + } + return 0 +} + +func netAddrToIP4(a net.Addr) net.IP { + switch v := a.(type) { + case *net.UDPAddr: + if ip := v.IP.To4(); ip != nil { + return ip + } + case *net.IPAddr: + if ip := v.IP.To4(); ip != nil { + return ip + } + } + return nil +} + +func opAddr(a net.Addr) net.Addr { + switch a.(type) { + case *net.TCPAddr: + if a == nil { + return nil + } + case *net.UDPAddr: + if a == nil { + return nil + } + case *net.IPAddr: + if a == nil { + return nil + } + } + return a +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/iana.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/iana.go new file mode 100644 index 00000000000..4375b4099b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/iana.go @@ -0,0 +1,38 @@ +// go generate gen.go +// Code generated by the command above; DO NOT EDIT. + +package ipv4 + +// Internet Control Message Protocol (ICMP) Parameters, Updated: 2018-02-26 +const ( + ICMPTypeEchoReply ICMPType = 0 // Echo Reply + ICMPTypeDestinationUnreachable ICMPType = 3 // Destination Unreachable + ICMPTypeRedirect ICMPType = 5 // Redirect + ICMPTypeEcho ICMPType = 8 // Echo + ICMPTypeRouterAdvertisement ICMPType = 9 // Router Advertisement + ICMPTypeRouterSolicitation ICMPType = 10 // Router Solicitation + ICMPTypeTimeExceeded ICMPType = 11 // Time Exceeded + ICMPTypeParameterProblem ICMPType = 12 // Parameter Problem + ICMPTypeTimestamp ICMPType = 13 // Timestamp + ICMPTypeTimestampReply ICMPType = 14 // Timestamp Reply + ICMPTypePhoturis ICMPType = 40 // Photuris + ICMPTypeExtendedEchoRequest ICMPType = 42 // Extended Echo Request + ICMPTypeExtendedEchoReply ICMPType = 43 // Extended Echo Reply +) + +// Internet Control Message Protocol (ICMP) Parameters, Updated: 2018-02-26 +var icmpTypes = map[ICMPType]string{ + 0: "echo reply", + 3: "destination unreachable", + 5: "redirect", + 8: "echo", + 9: "router advertisement", + 10: "router solicitation", + 11: "time exceeded", + 12: "parameter problem", + 13: "timestamp", + 14: "timestamp reply", + 40: "photuris", + 42: "extended echo request", + 43: "extended echo reply", +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp.go new file mode 100644 index 00000000000..9902bb3d2a5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp.go @@ -0,0 +1,57 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import "golang.org/x/net/internal/iana" + +// An ICMPType represents a type of ICMP message. +type ICMPType int + +func (typ ICMPType) String() string { + s, ok := icmpTypes[typ] + if !ok { + return "" + } + return s +} + +// Protocol returns the ICMPv4 protocol number. +func (typ ICMPType) Protocol() int { + return iana.ProtocolICMP +} + +// An ICMPFilter represents an ICMP message filter for incoming +// packets. The filter belongs to a packet delivery path on a host and +// it cannot interact with forwarding packets or tunnel-outer packets. +// +// Note: RFC 8200 defines a reasonable role model and it works not +// only for IPv6 but IPv4. A node means a device that implements IP. +// A router means a node that forwards IP packets not explicitly +// addressed to itself, and a host means a node that is not a router. +type ICMPFilter struct { + icmpFilter +} + +// Accept accepts incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Accept(typ ICMPType) { + f.accept(typ) +} + +// Block blocks incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Block(typ ICMPType) { + f.block(typ) +} + +// SetAll sets the filter action to the filter. +func (f *ICMPFilter) SetAll(block bool) { + f.setAll(block) +} + +// WillBlock reports whether the ICMP type will be blocked. +func (f *ICMPFilter) WillBlock(typ ICMPType) bool { + return f.willBlock(typ) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp_linux.go new file mode 100644 index 00000000000..6e1c5c80ad1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp_linux.go @@ -0,0 +1,25 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +func (f *icmpFilter) accept(typ ICMPType) { + f.Data &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpFilter) block(typ ICMPType) { + f.Data |= 1 << (uint32(typ) & 31) +} + +func (f *icmpFilter) setAll(block bool) { + if block { + f.Data = 1<<32 - 1 + } else { + f.Data = 0 + } +} + +func (f *icmpFilter) willBlock(typ ICMPType) bool { + return f.Data&(1<<(uint32(typ)&31)) != 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp_stub.go new file mode 100644 index 00000000000..21bb29ab366 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/icmp_stub.go @@ -0,0 +1,25 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !linux + +package ipv4 + +const sizeofICMPFilter = 0x0 + +type icmpFilter struct { +} + +func (f *icmpFilter) accept(typ ICMPType) { +} + +func (f *icmpFilter) block(typ ICMPType) { +} + +func (f *icmpFilter) setAll(block bool) { +} + +func (f *icmpFilter) willBlock(typ ICMPType) bool { + return false +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet.go new file mode 100644 index 00000000000..966bb776f56 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet.go @@ -0,0 +1,68 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ReadFrom and WriteTo methods of RawConn +// are not implemented. + +// A packetHandler represents the IPv4 datagram handler. +type packetHandler struct { + *net.IPConn + *socket.Conn + rawOpt +} + +func (c *packetHandler) ok() bool { return c != nil && c.IPConn != nil && c.Conn != nil } + +// ReadFrom reads an IPv4 datagram from the endpoint c, copying the +// datagram into b. It returns the received datagram as the IPv4 +// header h, the payload p and the control message cm. +func (c *packetHandler) ReadFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) { + if !c.ok() { + return nil, nil, nil, errInvalidConn + } + return c.readFrom(b) +} + +func slicePacket(b []byte) (h, p []byte, err error) { + if len(b) < HeaderLen { + return nil, nil, errHeaderTooShort + } + hdrlen := int(b[0]&0x0f) << 2 + return b[:hdrlen], b[hdrlen:], nil +} + +// WriteTo writes an IPv4 datagram through the endpoint c, copying the +// datagram from the IPv4 header h and the payload p. The control +// message cm allows the datagram path and the outgoing interface to be +// specified. Currently only Darwin and Linux support this. The cm +// may be nil if control of the outgoing datagram is not required. +// +// The IPv4 header h must contain appropriate fields that include: +// +// Version = +// Len = +// TOS = +// TotalLen = +// ID = platform sets an appropriate value if ID is zero +// FragOff = +// TTL = +// Protocol = +// Checksum = platform sets an appropriate value if Checksum is zero +// Src = platform sets an appropriate value if Src is nil +// Dst = +// Options = optional +func (c *packetHandler) WriteTo(h *Header, p []byte, cm *ControlMessage) error { + if !c.ok() { + return errInvalidConn + } + return c.writeTo(h, p, cm) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet_go1_8.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet_go1_8.go new file mode 100644 index 00000000000..b47d186834d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet_go1_8.go @@ -0,0 +1,56 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +package ipv4 + +import "net" + +func (c *packetHandler) readFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) { + c.rawOpt.RLock() + oob := NewControlMessage(c.rawOpt.cflags) + c.rawOpt.RUnlock() + n, nn, _, src, err := c.ReadMsgIP(b, oob) + if err != nil { + return nil, nil, nil, err + } + var hs []byte + if hs, p, err = slicePacket(b[:n]); err != nil { + return nil, nil, nil, err + } + if h, err = ParseHeader(hs); err != nil { + return nil, nil, nil, err + } + if nn > 0 { + cm = new(ControlMessage) + if err := cm.Parse(oob[:nn]); err != nil { + return nil, nil, nil, err + } + } + if src != nil && cm != nil { + cm.Src = src.IP + } + return +} + +func (c *packetHandler) writeTo(h *Header, p []byte, cm *ControlMessage) error { + oob := cm.Marshal() + wh, err := h.Marshal() + if err != nil { + return err + } + dst := new(net.IPAddr) + if cm != nil { + if ip := cm.Dst.To4(); ip != nil { + dst.IP = ip + } + } + if dst.IP == nil { + dst.IP = h.Dst + } + wh = append(wh, p...) + _, _, err = c.WriteMsgIP(wh, oob, dst) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet_go1_9.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet_go1_9.go new file mode 100644 index 00000000000..082c36d73e1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/packet_go1_9.go @@ -0,0 +1,67 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (c *packetHandler) readFrom(b []byte) (h *Header, p []byte, cm *ControlMessage, err error) { + c.rawOpt.RLock() + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + if err := c.RecvMsg(&m, 0); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + var hs []byte + if hs, p, err = slicePacket(b[:m.N]); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + if h, err = ParseHeader(hs); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + if m.NN > 0 { + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return nil, nil, nil, &net.OpError{Op: "read", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Err: err} + } + } + if src, ok := m.Addr.(*net.IPAddr); ok && cm != nil { + cm.Src = src.IP + } + return +} + +func (c *packetHandler) writeTo(h *Header, p []byte, cm *ControlMessage) error { + m := socket.Message{ + OOB: cm.Marshal(), + } + wh, err := h.Marshal() + if err != nil { + return err + } + m.Buffers = [][]byte{wh, p} + dst := new(net.IPAddr) + if cm != nil { + if ip := cm.Dst.To4(); ip != nil { + dst.IP = ip + } + } + if dst.IP == nil { + dst.IP = h.Dst + } + m.Addr = dst + if err := c.SendMsg(&m, 0); err != nil { + return &net.OpError{Op: "write", Net: c.IPConn.LocalAddr().Network(), Source: c.IPConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload.go new file mode 100644 index 00000000000..f95f811acd2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload.go @@ -0,0 +1,23 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo +// methods of PacketConn is not implemented. + +// A payloadHandler represents the IPv4 datagram payload handler. +type payloadHandler struct { + net.PacketConn + *socket.Conn + rawOpt +} + +func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil && c.Conn != nil } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg.go new file mode 100644 index 00000000000..204a49fea70 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg.go @@ -0,0 +1,33 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !js,!nacl,!plan9,!windows + +package ipv4 + +import "net" + +// ReadFrom reads a payload of the received IPv4 datagram, from the +// endpoint c, copying the payload into b. It returns the number of +// bytes copied into b, the control message cm and the source address +// src of the received datagram. +func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + if !c.ok() { + return 0, nil, nil, errInvalidConn + } + return c.readFrom(b) +} + +// WriteTo writes a payload of the IPv4 datagram, to the destination +// address dst through the endpoint c, copying the payload from b. It +// returns the number of bytes written. The control message cm allows +// the datagram path and the outgoing interface to be specified. +// Currently only Darwin and Linux support this. The cm may be nil if +// control of the outgoing datagram is not required. +func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + if !c.ok() { + return 0, errInvalidConn + } + return c.writeTo(b, cm, dst) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go new file mode 100644 index 00000000000..8d45599f48f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go @@ -0,0 +1,59 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 +// +build !js,!nacl,!plan9,!windows + +package ipv4 + +import "net" + +func (c *payloadHandler) readFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + c.rawOpt.RLock() + oob := NewControlMessage(c.rawOpt.cflags) + c.rawOpt.RUnlock() + var nn int + switch c := c.PacketConn.(type) { + case *net.UDPConn: + if n, nn, _, src, err = c.ReadMsgUDP(b, oob); err != nil { + return 0, nil, nil, err + } + case *net.IPConn: + nb := make([]byte, maxHeaderLen+len(b)) + if n, nn, _, src, err = c.ReadMsgIP(nb, oob); err != nil { + return 0, nil, nil, err + } + hdrlen := int(nb[0]&0x0f) << 2 + copy(b, nb[hdrlen:]) + n -= hdrlen + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType} + } + if nn > 0 { + cm = new(ControlMessage) + if err = cm.Parse(oob[:nn]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + } + if cm != nil { + cm.Src = netAddrToIP4(src) + } + return +} + +func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + oob := cm.Marshal() + if dst == nil { + return 0, &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errMissingAddress} + } + switch c := c.PacketConn.(type) { + case *net.UDPConn: + n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr)) + case *net.IPConn: + n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr)) + default: + return 0, &net.OpError{Op: "write", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Addr: opAddr(dst), Err: errInvalidConnType} + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go new file mode 100644 index 00000000000..4081aad8bc8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go @@ -0,0 +1,67 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 +// +build !js,!nacl,!plan9,!windows + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (c *payloadHandler) readFrom(b []byte) (int, *ControlMessage, net.Addr, error) { + c.rawOpt.RLock() + m := socket.Message{ + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + switch c.PacketConn.(type) { + case *net.UDPConn: + m.Buffers = [][]byte{b} + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + case *net.IPConn: + h := make([]byte, HeaderLen) + m.Buffers = [][]byte{h, b} + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + hdrlen := int(h[0]&0x0f) << 2 + if hdrlen > len(h) { + d := hdrlen - len(h) + copy(b, b[d:]) + m.N -= d + } else { + m.N -= hdrlen + } + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errInvalidConnType} + } + var cm *ControlMessage + if m.NN > 0 { + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + cm.Src = netAddrToIP4(m.Addr) + } + return m.N, cm, m.Addr, nil +} + +func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (int, error) { + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: cm.Marshal(), + Addr: dst, + } + err := c.SendMsg(&m, 0) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return m.N, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_nocmsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_nocmsg.go new file mode 100644 index 00000000000..1d434c61ac5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/payload_nocmsg.go @@ -0,0 +1,39 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build js nacl plan9 windows + +package ipv4 + +import "net" + +// ReadFrom reads a payload of the received IPv4 datagram, from the +// endpoint c, copying the payload into b. It returns the number of +// bytes copied into b, the control message cm and the source address +// src of the received datagram. +func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + if !c.ok() { + return 0, nil, nil, errInvalidConn + } + if n, src, err = c.PacketConn.ReadFrom(b); err != nil { + return 0, nil, nil, err + } + return +} + +// WriteTo writes a payload of the IPv4 datagram, to the destination +// address dst through the endpoint c, copying the payload from b. It +// returns the number of bytes written. The control message cm allows +// the datagram path and the outgoing interface to be specified. +// Currently only Darwin and Linux support this. The cm may be nil if +// control of the outgoing datagram is not required. +func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + if !c.ok() { + return 0, errInvalidConn + } + if dst == nil { + return 0, errMissingAddress + } + return c.PacketConn.WriteTo(b, dst) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt.go new file mode 100644 index 00000000000..22e90c0392c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt.go @@ -0,0 +1,44 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import "golang.org/x/net/internal/socket" + +// Sticky socket options +const ( + ssoTOS = iota // header field for unicast packet + ssoTTL // header field for unicast packet + ssoMulticastTTL // header field for multicast packet + ssoMulticastInterface // outbound interface for multicast packet + ssoMulticastLoopback // loopback for multicast packet + ssoReceiveTTL // header field on received packet + ssoReceiveDst // header field on received packet + ssoReceiveInterface // inbound interface on received packet + ssoPacketInfo // incbound or outbound packet path + ssoHeaderPrepend // ipv4 header prepend + ssoStripHeader // strip ipv4 header + ssoICMPFilter // icmp filter + ssoJoinGroup // any-source multicast + ssoLeaveGroup // any-source multicast + ssoJoinSourceGroup // source-specific multicast + ssoLeaveSourceGroup // source-specific multicast + ssoBlockSourceGroup // any-source or source-specific multicast + ssoUnblockSourceGroup // any-source or source-specific multicast + ssoAttachFilter // attach BPF for filtering inbound traffic +) + +// Sticky socket option value types +const ( + ssoTypeIPMreq = iota + 1 + ssoTypeIPMreqn + ssoTypeGroupReq + ssoTypeGroupSourceReq +) + +// A sockOpt represents a binding for sticky socket option. +type sockOpt struct { + socket.Option + typ int // hint for option value type; optional +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt_posix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt_posix.go new file mode 100644 index 00000000000..e96955bc188 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt_posix.go @@ -0,0 +1,71 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) { + switch so.typ { + case ssoTypeIPMreqn: + return so.getIPMreqn(c) + default: + return so.getMulticastIf(c) + } +} + +func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error { + switch so.typ { + case ssoTypeIPMreqn: + return so.setIPMreqn(c, ifi, nil) + default: + return so.setMulticastIf(c, ifi) + } +} + +func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) { + b := make([]byte, so.Len) + n, err := so.Get(c, b) + if err != nil { + return nil, err + } + if n != sizeofICMPFilter { + return nil, errOpNoSupport + } + return (*ICMPFilter)(unsafe.Pointer(&b[0])), nil +} + +func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error { + b := (*[sizeofICMPFilter]byte)(unsafe.Pointer(f))[:sizeofICMPFilter] + return so.Set(c, b) +} + +func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + switch so.typ { + case ssoTypeIPMreq: + return so.setIPMreq(c, ifi, grp) + case ssoTypeIPMreqn: + return so.setIPMreqn(c, ifi, grp) + case ssoTypeGroupReq: + return so.setGroupReq(c, ifi, grp) + default: + return errOpNoSupport + } +} + +func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return so.setGroupSourceReq(c, ifi, grp, src) +} + +func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error { + return so.setAttachFilter(c, f) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt_stub.go new file mode 100644 index 00000000000..23249b782e3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sockopt_stub.go @@ -0,0 +1,42 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package ipv4 + +import ( + "net" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) { + return nil, errOpNoSupport +} + +func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error { + return errOpNoSupport +} + +func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) { + return nil, errOpNoSupport +} + +func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error { + return errOpNoSupport +} + +func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} + +func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return errOpNoSupport +} + +func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreq.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreq.go new file mode 100644 index 00000000000..0388cba00c3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreq.go @@ -0,0 +1,119 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd solaris windows + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + mreq := ipMreq{Multiaddr: [4]byte{grp[0], grp[1], grp[2], grp[3]}} + if err := setIPMreqInterface(&mreq, ifi); err != nil { + return err + } + b := (*[sizeofIPMreq]byte)(unsafe.Pointer(&mreq))[:sizeofIPMreq] + return so.Set(c, b) +} + +func (so *sockOpt) getMulticastIf(c *socket.Conn) (*net.Interface, error) { + var b [4]byte + if _, err := so.Get(c, b[:]); err != nil { + return nil, err + } + ifi, err := netIP4ToInterface(net.IPv4(b[0], b[1], b[2], b[3])) + if err != nil { + return nil, err + } + return ifi, nil +} + +func (so *sockOpt) setMulticastIf(c *socket.Conn, ifi *net.Interface) error { + ip, err := netInterfaceToIP4(ifi) + if err != nil { + return err + } + var b [4]byte + copy(b[:], ip) + return so.Set(c, b[:]) +} + +func setIPMreqInterface(mreq *ipMreq, ifi *net.Interface) error { + if ifi == nil { + return nil + } + ifat, err := ifi.Addrs() + if err != nil { + return err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip := ifa.IP.To4(); ip != nil { + copy(mreq.Interface[:], ip) + return nil + } + case *net.IPNet: + if ip := ifa.IP.To4(); ip != nil { + copy(mreq.Interface[:], ip) + return nil + } + } + } + return errNoSuchInterface +} + +func netIP4ToInterface(ip net.IP) (*net.Interface, error) { + ift, err := net.Interfaces() + if err != nil { + return nil, err + } + for _, ifi := range ift { + ifat, err := ifi.Addrs() + if err != nil { + return nil, err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip.Equal(ifa.IP) { + return &ifi, nil + } + case *net.IPNet: + if ip.Equal(ifa.IP) { + return &ifi, nil + } + } + } + } + return nil, errNoSuchInterface +} + +func netInterfaceToIP4(ifi *net.Interface) (net.IP, error) { + if ifi == nil { + return net.IPv4zero.To4(), nil + } + ifat, err := ifi.Addrs() + if err != nil { + return nil, err + } + for _, ifa := range ifat { + switch ifa := ifa.(type) { + case *net.IPAddr: + if ip := ifa.IP.To4(); ip != nil { + return ip, nil + } + case *net.IPNet: + if ip := ifa.IP.To4(); ip != nil { + return ip, nil + } + } + } + return nil, errNoSuchInterface +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go new file mode 100644 index 00000000000..f3919208b6e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go @@ -0,0 +1,25 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!netbsd,!openbsd,!solaris,!windows + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} + +func (so *sockOpt) getMulticastIf(c *socket.Conn) (*net.Interface, error) { + return nil, errOpNoSupport +} + +func (so *sockOpt) setMulticastIf(c *socket.Conn, ifi *net.Interface) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreqn.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreqn.go new file mode 100644 index 00000000000..1f24f69f3b0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreqn.go @@ -0,0 +1,42 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getIPMreqn(c *socket.Conn) (*net.Interface, error) { + b := make([]byte, so.Len) + if _, err := so.Get(c, b); err != nil { + return nil, err + } + mreqn := (*ipMreqn)(unsafe.Pointer(&b[0])) + if mreqn.Ifindex == 0 { + return nil, nil + } + ifi, err := net.InterfaceByIndex(int(mreqn.Ifindex)) + if err != nil { + return nil, err + } + return ifi, nil +} + +func (so *sockOpt) setIPMreqn(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + var mreqn ipMreqn + if ifi != nil { + mreqn.Ifindex = int32(ifi.Index) + } + if grp != nil { + mreqn.Multiaddr = [4]byte{grp[0], grp[1], grp[2], grp[3]} + } + b := (*[sizeofIPMreqn]byte)(unsafe.Pointer(&mreqn))[:sizeofIPMreqn] + return so.Set(c, b) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go new file mode 100644 index 00000000000..0711d3d786a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go @@ -0,0 +1,21 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!freebsd,!linux + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getIPMreqn(c *socket.Conn) (*net.Interface, error) { + return nil, errOpNoSupport +} + +func (so *sockOpt) setIPMreqn(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bpf.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bpf.go new file mode 100644 index 00000000000..9f30b7308e3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bpf.go @@ -0,0 +1,23 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package ipv4 + +import ( + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { + prog := sockFProg{ + Len: uint16(len(f)), + Filter: (*sockFilter)(unsafe.Pointer(&f[0])), + } + b := (*[sizeofSockFprog]byte)(unsafe.Pointer(&prog))[:sizeofSockFprog] + return so.Set(c, b) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go new file mode 100644 index 00000000000..9a2132093da --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go @@ -0,0 +1,16 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !linux + +package ipv4 + +import ( + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bsd.go new file mode 100644 index 00000000000..58256dd9d6f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_bsd.go @@ -0,0 +1,37 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build netbsd openbsd + +package ipv4 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 1}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVIF, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_darwin.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_darwin.go new file mode 100644 index 00000000000..e8fb1916920 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_darwin.go @@ -0,0 +1,93 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "strconv" + "strings" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVIF, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}}, + ssoStripHeader: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_STRIPHDR, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + } +) + +func init() { + // Seems like kern.osreldate is veiled on latest OS X. We use + // kern.osrelease instead. + s, err := syscall.Sysctl("kern.osrelease") + if err != nil { + return + } + ss := strings.Split(s, ".") + if len(ss) == 0 { + return + } + // The IP_PKTINFO and protocol-independent multicast API were + // introduced in OS X 10.7 (Darwin 11). But it looks like + // those features require OS X 10.8 (Darwin 12) or above. + // See http://support.apple.com/kb/HT1633. + if mjver, err := strconv.Atoi(ss[0]); err != nil || mjver < 12 { + return + } + ctlOpts[ctlPacketInfo].name = sysIP_PKTINFO + ctlOpts[ctlPacketInfo].length = sizeofInetPktinfo + ctlOpts[ctlPacketInfo].marshal = marshalPacketInfo + ctlOpts[ctlPacketInfo].parse = parsePacketInfo + sockOpts[ssoPacketInfo] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVPKTINFO, Len: 4}} + sockOpts[ssoMulticastInterface] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: sizeofIPMreqn}, typ: ssoTypeIPMreqn} + sockOpts[ssoJoinGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq} + sockOpts[ssoLeaveGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq} + sockOpts[ssoJoinSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq} + sockOpts[ssoLeaveSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq} + sockOpts[ssoBlockSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq} + sockOpts[ssoUnblockSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq} +} + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_dragonfly.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_dragonfly.go new file mode 100644 index 00000000000..859764f33a5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_dragonfly.go @@ -0,0 +1,35 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVIF, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_freebsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_freebsd.go new file mode 100644 index 00000000000..b80032454a5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_freebsd.go @@ -0,0 +1,76 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "runtime" + "strings" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 1, marshalTTL, parseTTL}, + ctlDst: {sysIP_RECVDSTADDR, net.IPv4len, marshalDst, parseDst}, + ctlInterface: {sysIP_RECVIF, syscall.SizeofSockaddrDatalink, marshalInterface, parseInterface}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}}, + ssoReceiveDst: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVDSTADDR, Len: 4}}, + ssoReceiveInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVIF, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func init() { + freebsdVersion, _ = syscall.SysctlUint32("kern.osreldate") + if freebsdVersion >= 1000000 { + sockOpts[ssoMulticastInterface] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: sizeofIPMreqn}, typ: ssoTypeIPMreqn} + } + if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" { + archs, _ := syscall.Sysctl("kern.supported_archs") + for _, s := range strings.Fields(archs) { + if s == "amd64" { + freebsd32o64 = true + break + } + } + } +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gr.Group)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gsr.Group)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(&gsr.Source)) + sa.Len = sizeofSockaddrInet + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_linux.go new file mode 100644 index 00000000000..60defe13263 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_linux.go @@ -0,0 +1,59 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_TTL, 1, marshalTTL, parseTTL}, + ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo}, + } + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: sizeofIPMreqn}, typ: ssoTypeIPMreqn}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}}, + ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_PKTINFO, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolReserved, Name: sysICMP_FILTER, Len: sizeofICMPFilter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoAttachFilter: {Option: socket.Option{Level: sysSOL_SOCKET, Name: sysSO_ATTACH_FILTER, Len: sizeofSockFprog}}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gr.Group)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(&gsr.Group)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(&gsr.Source)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_solaris.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_solaris.go new file mode 100644 index 00000000000..832fef1e2e2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_solaris.go @@ -0,0 +1,57 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTTL: {sysIP_RECVTTL, 4, marshalTTL, parseTTL}, + ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo}, + } + + sockOpts = map[int]sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 1}}, + ssoReceiveTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVTTL, Len: 4}}, + ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVPKTINFO, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], grp) + sa = (*sockaddrInet)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 260)) + sa.Family = syscall.AF_INET + copy(sa.Addr[:], src) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_ssmreq.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_ssmreq.go new file mode 100644 index 00000000000..ae5704e77a2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_ssmreq.go @@ -0,0 +1,54 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux solaris + +package ipv4 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +var freebsd32o64 bool + +func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + var gr groupReq + if ifi != nil { + gr.Interface = uint32(ifi.Index) + } + gr.setGroup(grp) + var b []byte + if freebsd32o64 { + var d [sizeofGroupReq + 4]byte + s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + b = d[:] + } else { + b = (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))[:sizeofGroupReq] + } + return so.Set(c, b) +} + +func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + var gsr groupSourceReq + if ifi != nil { + gsr.Interface = uint32(ifi.Index) + } + gsr.setSourceGroup(grp, src) + var b []byte + if freebsd32o64 { + var d [sizeofGroupSourceReq + 4]byte + s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + b = d[:] + } else { + b = (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))[:sizeofGroupSourceReq] + } + return so.Set(c, b) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go new file mode 100644 index 00000000000..e6b7623d0d5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go @@ -0,0 +1,21 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!freebsd,!linux,!solaris + +package ipv4 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} + +func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_stub.go new file mode 100644 index 00000000000..4f076473bd1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_stub.go @@ -0,0 +1,13 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package ipv4 + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = map[int]*sockOpt{} +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_windows.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_windows.go new file mode 100644 index 00000000000..b0913d539c3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/sys_windows.go @@ -0,0 +1,67 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv4 + +import ( + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +const ( + // See ws2tcpip.h. + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_DONTFRAGMENT = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0xf + sysIP_DROP_SOURCE_MEMBERSHIP = 0x10 + sysIP_PKTINFO = 0x13 + + sizeofInetPktinfo = 0x8 + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc +) + +type inetPktinfo struct { + Addr [4]byte + Ifindex int32 +} + +type ipMreq struct { + Multiaddr [4]byte + Interface [4]byte +} + +type ipMreqSource struct { + Multiaddr [4]byte + Sourceaddr [4]byte + Interface [4]byte +} + +// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586(v=vs.85).aspx +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = map[int]*sockOpt{ + ssoTOS: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TOS, Len: 4}}, + ssoTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_TTL, Len: 4}}, + ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 4}}, + ssoHeaderPrepend: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_HDRINCL, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_ADD_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_DROP_MEMBERSHIP, Len: sizeofIPMreq}, typ: ssoTypeIPMreq}, + } +) + +func (pi *inetPktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_darwin.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_darwin.go new file mode 100644 index 00000000000..c07cc883fc3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_darwin.go @@ -0,0 +1,99 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_STRIPHDR = 0x17 + sysIP_RECVTTL = 0x18 + sysIP_BOUND_IF = 0x19 + sysIP_PKTINFO = 0x1a + sysIP_RECVPKTINFO = 0x1a + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_MULTICAST_IFINDEX = 0x42 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type inetPktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [128]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [128]byte + Pad_cgo_1 [128]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go new file mode 100644 index 00000000000..c4365e9e712 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go @@ -0,0 +1,31 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_dragonfly.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_RECVTTL = 0x41 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go new file mode 100644 index 00000000000..8c4aec94c8a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go @@ -0,0 +1,93 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_SENDSRCADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_ONESBCAST = 0x17 + sysIP_BINDANY = 0x18 + sysIP_RECVTTL = 0x41 + sysIP_MINTTL = 0x42 + sysIP_DONTFRAG = 0x43 + sysIP_RECVTOS = 0x44 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go new file mode 100644 index 00000000000..4b10b7c575f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go @@ -0,0 +1,95 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_SENDSRCADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_ONESBCAST = 0x17 + sysIP_BINDANY = 0x18 + sysIP_RECVTTL = 0x41 + sysIP_MINTTL = 0x42 + sysIP_DONTFRAG = 0x43 + sysIP_RECVTOS = 0x44 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go new file mode 100644 index 00000000000..4b10b7c575f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go @@ -0,0 +1,95 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_SENDSRCADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_ONESBCAST = 0x17 + sysIP_BINDANY = 0x18 + sysIP_RECVTTL = 0x41 + sysIP_MINTTL = 0x42 + sysIP_DONTFRAG = 0x43 + sysIP_RECVTOS = 0x44 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + sysIP_MULTICAST_VIF = 0xe + sysIP_ADD_SOURCE_MEMBERSHIP = 0x46 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x47 + sysIP_BLOCK_SOURCE = 0x48 + sysIP_UNBLOCK_SOURCE = 0x49 + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_386.go new file mode 100644 index 00000000000..c0260f0ce34 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_386.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go new file mode 100644 index 00000000000..9c967eaa642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go @@ -0,0 +1,150 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go new file mode 100644 index 00000000000..c0260f0ce34 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go new file mode 100644 index 00000000000..9c967eaa642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go @@ -0,0 +1,150 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go new file mode 100644 index 00000000000..c0260f0ce34 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go new file mode 100644 index 00000000000..9c967eaa642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go @@ -0,0 +1,150 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go new file mode 100644 index 00000000000..9c967eaa642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go @@ -0,0 +1,150 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go new file mode 100644 index 00000000000..c0260f0ce34 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go new file mode 100644 index 00000000000..f65bd9a7a68 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go @@ -0,0 +1,148 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]uint8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go new file mode 100644 index 00000000000..9c967eaa642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go @@ -0,0 +1,150 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go new file mode 100644 index 00000000000..9c967eaa642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go @@ -0,0 +1,150 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go new file mode 100644 index 00000000000..9c967eaa642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go @@ -0,0 +1,150 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv4 + +const ( + sysIP_TOS = 0x1 + sysIP_TTL = 0x2 + sysIP_HDRINCL = 0x3 + sysIP_OPTIONS = 0x4 + sysIP_ROUTER_ALERT = 0x5 + sysIP_RECVOPTS = 0x6 + sysIP_RETOPTS = 0x7 + sysIP_PKTINFO = 0x8 + sysIP_PKTOPTIONS = 0x9 + sysIP_MTU_DISCOVER = 0xa + sysIP_RECVERR = 0xb + sysIP_RECVTTL = 0xc + sysIP_RECVTOS = 0xd + sysIP_MTU = 0xe + sysIP_FREEBIND = 0xf + sysIP_TRANSPARENT = 0x13 + sysIP_RECVRETOPTS = 0x7 + sysIP_ORIGDSTADDR = 0x14 + sysIP_RECVORIGDSTADDR = 0x14 + sysIP_MINTTL = 0x15 + sysIP_NODEFRAG = 0x16 + sysIP_UNICAST_IF = 0x32 + + sysIP_MULTICAST_IF = 0x20 + sysIP_MULTICAST_TTL = 0x21 + sysIP_MULTICAST_LOOP = 0x22 + sysIP_ADD_MEMBERSHIP = 0x23 + sysIP_DROP_MEMBERSHIP = 0x24 + sysIP_UNBLOCK_SOURCE = 0x25 + sysIP_BLOCK_SOURCE = 0x26 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x27 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x28 + sysIP_MSFILTER = 0x29 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIP_MULTICAST_ALL = 0x31 + + sysICMP_FILTER = 0x1 + + sysSO_EE_ORIGIN_NONE = 0x0 + sysSO_EE_ORIGIN_LOCAL = 0x1 + sysSO_EE_ORIGIN_ICMP = 0x2 + sysSO_EE_ORIGIN_ICMP6 = 0x3 + sysSO_EE_ORIGIN_TXSTATUS = 0x4 + sysSO_EE_ORIGIN_TIMESTAMPING = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + sizeofSockExtendedErr = 0x10 + + sizeofIPMreq = 0x8 + sizeofIPMreqn = 0xc + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPFilter = 0x4 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + X__pad [8]uint8 +} + +type inetPktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type sockExtendedErr struct { + Errno uint32 + Origin uint8 + Type uint8 + Code uint8 + Pad uint8 + Info uint32 + Data uint32 +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type ipMreqSource struct { + Multiaddr uint32 + Interface uint32 + Sourceaddr uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpFilter struct { + Data uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_netbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_netbsd.go new file mode 100644 index 00000000000..fd3624d93c4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_netbsd.go @@ -0,0 +1,30 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x14 + sysIP_RECVTTL = 0x17 + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_openbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_openbsd.go new file mode 100644 index 00000000000..12f36be759e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_openbsd.go @@ -0,0 +1,30 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x1e + sysIP_RECVTTL = 0x1f + + sysIP_MULTICAST_IF = 0x9 + sysIP_MULTICAST_TTL = 0xa + sysIP_MULTICAST_LOOP = 0xb + sysIP_ADD_MEMBERSHIP = 0xc + sysIP_DROP_MEMBERSHIP = 0xd + + sizeofIPMreq = 0x8 +) + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_solaris.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_solaris.go new file mode 100644 index 00000000000..0a3875cc41a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv4/zsys_solaris.go @@ -0,0 +1,100 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_solaris.go + +package ipv4 + +const ( + sysIP_OPTIONS = 0x1 + sysIP_HDRINCL = 0x2 + sysIP_TOS = 0x3 + sysIP_TTL = 0x4 + sysIP_RECVOPTS = 0x5 + sysIP_RECVRETOPTS = 0x6 + sysIP_RECVDSTADDR = 0x7 + sysIP_RETOPTS = 0x8 + sysIP_RECVIF = 0x9 + sysIP_RECVSLLA = 0xa + sysIP_RECVTTL = 0xb + + sysIP_MULTICAST_IF = 0x10 + sysIP_MULTICAST_TTL = 0x11 + sysIP_MULTICAST_LOOP = 0x12 + sysIP_ADD_MEMBERSHIP = 0x13 + sysIP_DROP_MEMBERSHIP = 0x14 + sysIP_BLOCK_SOURCE = 0x15 + sysIP_UNBLOCK_SOURCE = 0x16 + sysIP_ADD_SOURCE_MEMBERSHIP = 0x17 + sysIP_DROP_SOURCE_MEMBERSHIP = 0x18 + sysIP_NEXTHOP = 0x19 + + sysIP_PKTINFO = 0x1a + sysIP_RECVPKTINFO = 0x1a + sysIP_DONTFRAG = 0x1b + + sysIP_BOUND_IF = 0x41 + sysIP_UNSPEC_SRC = 0x42 + sysIP_BROADCAST_TTL = 0x43 + sysIP_DHCPINIT_IF = 0x45 + + sysIP_REUSEADDR = 0x104 + sysIP_DONTROUTE = 0x105 + sysIP_BROADCAST = 0x106 + + sysMCAST_JOIN_GROUP = 0x29 + sysMCAST_LEAVE_GROUP = 0x2a + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_JOIN_SOURCE_GROUP = 0x2d + sysMCAST_LEAVE_SOURCE_GROUP = 0x2e + + sizeofSockaddrStorage = 0x100 + sizeofSockaddrInet = 0x10 + sizeofInetPktinfo = 0xc + + sizeofIPMreq = 0x8 + sizeofIPMreqSource = 0xc + sizeofGroupReq = 0x104 + sizeofGroupSourceReq = 0x204 +) + +type sockaddrStorage struct { + Family uint16 + X_ss_pad1 [6]int8 + X_ss_align float64 + X_ss_pad2 [240]int8 +} + +type sockaddrInet struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type inetPktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type ipMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type ipMreqSource struct { + Multiaddr [4]byte /* in_addr */ + Sourceaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [256]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [256]byte + Pad_cgo_1 [256]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/batch.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/batch.go new file mode 100644 index 00000000000..10d64924515 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/batch.go @@ -0,0 +1,118 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package ipv6 + +import ( + "net" + "runtime" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ReadBatch and WriteBatch methods of +// PacketConn are not implemented. + +// A Message represents an IO message. +// +// type Message struct { +// Buffers [][]byte +// OOB []byte +// Addr net.Addr +// N int +// NN int +// Flags int +// } +// +// The Buffers fields represents a list of contiguous buffers, which +// can be used for vectored IO, for example, putting a header and a +// payload in each slice. +// When writing, the Buffers field must contain at least one byte to +// write. +// When reading, the Buffers field will always contain a byte to read. +// +// The OOB field contains protocol-specific control or miscellaneous +// ancillary data known as out-of-band data. +// It can be nil when not required. +// +// The Addr field specifies a destination address when writing. +// It can be nil when the underlying protocol of the endpoint uses +// connection-oriented communication. +// After a successful read, it may contain the source address on the +// received packet. +// +// The N field indicates the number of bytes read or written from/to +// Buffers. +// +// The NN field indicates the number of bytes read or written from/to +// OOB. +// +// The Flags field contains protocol-specific information on the +// received message. +type Message = socket.Message + +// ReadBatch reads a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_PEEK. +// +// On a successful read it returns the number of messages received, up +// to len(ms). +// +// On Linux, a batch read will be optimized. +// On other platforms, this method will read only a single message. +func (c *payloadHandler) ReadBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.RecvMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.RecvMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} + +// WriteBatch writes a batch of messages. +// +// The provided flags is a set of platform-dependent flags, such as +// syscall.MSG_DONTROUTE. +// +// It returns the number of messages written on a successful write. +// +// On Linux, a batch write will be optimized. +// On other platforms, this method will write only a single message. +func (c *payloadHandler) WriteBatch(ms []Message, flags int) (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + switch runtime.GOOS { + case "linux": + n, err := c.SendMsgs([]socket.Message(ms), flags) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + default: + n := 1 + err := c.SendMsg(&ms[0], flags) + if err != nil { + n = 0 + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + return n, err + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control.go new file mode 100644 index 00000000000..2da644413b4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control.go @@ -0,0 +1,187 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "fmt" + "net" + "sync" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +// Note that RFC 3542 obsoletes RFC 2292 but OS X Snow Leopard and the +// former still support RFC 2292 only. Please be aware that almost +// all protocol implementations prohibit using a combination of RFC +// 2292 and RFC 3542 for some practical reasons. + +type rawOpt struct { + sync.RWMutex + cflags ControlFlags +} + +func (c *rawOpt) set(f ControlFlags) { c.cflags |= f } +func (c *rawOpt) clear(f ControlFlags) { c.cflags &^= f } +func (c *rawOpt) isset(f ControlFlags) bool { return c.cflags&f != 0 } + +// A ControlFlags represents per packet basis IP-level socket option +// control flags. +type ControlFlags uint + +const ( + FlagTrafficClass ControlFlags = 1 << iota // pass the traffic class on the received packet + FlagHopLimit // pass the hop limit on the received packet + FlagSrc // pass the source address on the received packet + FlagDst // pass the destination address on the received packet + FlagInterface // pass the interface index on the received packet + FlagPathMTU // pass the path MTU on the received packet path +) + +const flagPacketInfo = FlagDst | FlagInterface + +// A ControlMessage represents per packet basis IP-level socket +// options. +type ControlMessage struct { + // Receiving socket options: SetControlMessage allows to + // receive the options from the protocol stack using ReadFrom + // method of PacketConn. + // + // Specifying socket options: ControlMessage for WriteTo + // method of PacketConn allows to send the options to the + // protocol stack. + // + TrafficClass int // traffic class, must be 1 <= value <= 255 when specifying + HopLimit int // hop limit, must be 1 <= value <= 255 when specifying + Src net.IP // source address, specifying only + Dst net.IP // destination address, receiving only + IfIndex int // interface index, must be 1 <= value when specifying + NextHop net.IP // next hop address, specifying only + MTU int // path MTU, receiving only +} + +func (cm *ControlMessage) String() string { + if cm == nil { + return "" + } + return fmt.Sprintf("tclass=%#x hoplim=%d src=%v dst=%v ifindex=%d nexthop=%v mtu=%d", cm.TrafficClass, cm.HopLimit, cm.Src, cm.Dst, cm.IfIndex, cm.NextHop, cm.MTU) +} + +// Marshal returns the binary encoding of cm. +func (cm *ControlMessage) Marshal() []byte { + if cm == nil { + return nil + } + var l int + tclass := false + if ctlOpts[ctlTrafficClass].name > 0 && cm.TrafficClass > 0 { + tclass = true + l += socket.ControlMessageSpace(ctlOpts[ctlTrafficClass].length) + } + hoplimit := false + if ctlOpts[ctlHopLimit].name > 0 && cm.HopLimit > 0 { + hoplimit = true + l += socket.ControlMessageSpace(ctlOpts[ctlHopLimit].length) + } + pktinfo := false + if ctlOpts[ctlPacketInfo].name > 0 && (cm.Src.To16() != nil && cm.Src.To4() == nil || cm.IfIndex > 0) { + pktinfo = true + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + nexthop := false + if ctlOpts[ctlNextHop].name > 0 && cm.NextHop.To16() != nil && cm.NextHop.To4() == nil { + nexthop = true + l += socket.ControlMessageSpace(ctlOpts[ctlNextHop].length) + } + var b []byte + if l > 0 { + b = make([]byte, l) + bb := b + if tclass { + bb = ctlOpts[ctlTrafficClass].marshal(bb, cm) + } + if hoplimit { + bb = ctlOpts[ctlHopLimit].marshal(bb, cm) + } + if pktinfo { + bb = ctlOpts[ctlPacketInfo].marshal(bb, cm) + } + if nexthop { + bb = ctlOpts[ctlNextHop].marshal(bb, cm) + } + } + return b +} + +// Parse parses b as a control message and stores the result in cm. +func (cm *ControlMessage) Parse(b []byte) error { + ms, err := socket.ControlMessage(b).Parse() + if err != nil { + return err + } + for _, m := range ms { + lvl, typ, l, err := m.ParseHeader() + if err != nil { + return err + } + if lvl != iana.ProtocolIPv6 { + continue + } + switch { + case typ == ctlOpts[ctlTrafficClass].name && l >= ctlOpts[ctlTrafficClass].length: + ctlOpts[ctlTrafficClass].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlHopLimit].name && l >= ctlOpts[ctlHopLimit].length: + ctlOpts[ctlHopLimit].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPacketInfo].name && l >= ctlOpts[ctlPacketInfo].length: + ctlOpts[ctlPacketInfo].parse(cm, m.Data(l)) + case typ == ctlOpts[ctlPathMTU].name && l >= ctlOpts[ctlPathMTU].length: + ctlOpts[ctlPathMTU].parse(cm, m.Data(l)) + } + } + return nil +} + +// NewControlMessage returns a new control message. +// +// The returned message is large enough for options specified by cf. +func NewControlMessage(cf ControlFlags) []byte { + opt := rawOpt{cflags: cf} + var l int + if opt.isset(FlagTrafficClass) && ctlOpts[ctlTrafficClass].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlTrafficClass].length) + } + if opt.isset(FlagHopLimit) && ctlOpts[ctlHopLimit].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlHopLimit].length) + } + if opt.isset(flagPacketInfo) && ctlOpts[ctlPacketInfo].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlPacketInfo].length) + } + if opt.isset(FlagPathMTU) && ctlOpts[ctlPathMTU].name > 0 { + l += socket.ControlMessageSpace(ctlOpts[ctlPathMTU].length) + } + var b []byte + if l > 0 { + b = make([]byte, l) + } + return b +} + +// Ancillary data socket options +const ( + ctlTrafficClass = iota // header field + ctlHopLimit // header field + ctlPacketInfo // inbound or outbound packet path + ctlNextHop // nexthop + ctlPathMTU // path mtu + ctlMax +) + +// A ctlOpt represents a binding for ancillary data socket option. +type ctlOpt struct { + name int // option name, must be equal or greater than 1 + length int // option length + marshal func([]byte, *ControlMessage) []byte + parse func(*ControlMessage, []byte) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go new file mode 100644 index 00000000000..9fd9eb15e3b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go @@ -0,0 +1,48 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin + +package ipv6 + +import ( + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +func marshal2292HopLimit(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292HOPLIMIT, 4) + if cm != nil { + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit)) + } + return m.Next(4) +} + +func marshal2292PacketInfo(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292PKTINFO, sizeofInet6Pktinfo) + if cm != nil { + pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0])) + if ip := cm.Src.To16(); ip != nil && ip.To4() == nil { + copy(pi.Addr[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return m.Next(sizeofInet6Pktinfo) +} + +func marshal2292NextHop(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_2292NEXTHOP, sizeofSockaddrInet6) + if cm != nil { + sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0])) + sa.setSockaddr(cm.NextHop, cm.IfIndex) + } + return m.Next(sizeofSockaddrInet6) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go new file mode 100644 index 00000000000..eec529c205e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go @@ -0,0 +1,94 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package ipv6 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +func marshalTrafficClass(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_TCLASS, 4) + if cm != nil { + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.TrafficClass)) + } + return m.Next(4) +} + +func parseTrafficClass(cm *ControlMessage, b []byte) { + cm.TrafficClass = int(socket.NativeEndian.Uint32(b[:4])) +} + +func marshalHopLimit(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_HOPLIMIT, 4) + if cm != nil { + socket.NativeEndian.PutUint32(m.Data(4), uint32(cm.HopLimit)) + } + return m.Next(4) +} + +func parseHopLimit(cm *ControlMessage, b []byte) { + cm.HopLimit = int(socket.NativeEndian.Uint32(b[:4])) +} + +func marshalPacketInfo(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_PKTINFO, sizeofInet6Pktinfo) + if cm != nil { + pi := (*inet6Pktinfo)(unsafe.Pointer(&m.Data(sizeofInet6Pktinfo)[0])) + if ip := cm.Src.To16(); ip != nil && ip.To4() == nil { + copy(pi.Addr[:], ip) + } + if cm.IfIndex > 0 { + pi.setIfindex(cm.IfIndex) + } + } + return m.Next(sizeofInet6Pktinfo) +} + +func parsePacketInfo(cm *ControlMessage, b []byte) { + pi := (*inet6Pktinfo)(unsafe.Pointer(&b[0])) + if len(cm.Dst) < net.IPv6len { + cm.Dst = make(net.IP, net.IPv6len) + } + copy(cm.Dst, pi.Addr[:]) + cm.IfIndex = int(pi.Ifindex) +} + +func marshalNextHop(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_NEXTHOP, sizeofSockaddrInet6) + if cm != nil { + sa := (*sockaddrInet6)(unsafe.Pointer(&m.Data(sizeofSockaddrInet6)[0])) + sa.setSockaddr(cm.NextHop, cm.IfIndex) + } + return m.Next(sizeofSockaddrInet6) +} + +func parseNextHop(cm *ControlMessage, b []byte) { +} + +func marshalPathMTU(b []byte, cm *ControlMessage) []byte { + m := socket.ControlMessage(b) + m.MarshalHeader(iana.ProtocolIPv6, sysIPV6_PATHMTU, sizeofIPv6Mtuinfo) + return m.Next(sizeofIPv6Mtuinfo) +} + +func parsePathMTU(cm *ControlMessage, b []byte) { + mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0])) + if len(cm.Dst) < net.IPv6len { + cm.Dst = make(net.IP, net.IPv6len) + } + copy(cm.Dst, mi.Addr.Addr[:]) + cm.IfIndex = int(mi.Addr.Scope_id) + cm.MTU = int(mi.Mtu) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_stub.go new file mode 100644 index 00000000000..a045f28f74c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_stub.go @@ -0,0 +1,13 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package ipv6 + +import "golang.org/x/net/internal/socket" + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_unix.go new file mode 100644 index 00000000000..66515060a88 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_unix.go @@ -0,0 +1,55 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package ipv6 + +import "golang.org/x/net/internal/socket" + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + opt.Lock() + defer opt.Unlock() + if so, ok := sockOpts[ssoReceiveTrafficClass]; ok && cf&FlagTrafficClass != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagTrafficClass) + } else { + opt.clear(FlagTrafficClass) + } + } + if so, ok := sockOpts[ssoReceiveHopLimit]; ok && cf&FlagHopLimit != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagHopLimit) + } else { + opt.clear(FlagHopLimit) + } + } + if so, ok := sockOpts[ssoReceivePacketInfo]; ok && cf&flagPacketInfo != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(cf & flagPacketInfo) + } else { + opt.clear(cf & flagPacketInfo) + } + } + if so, ok := sockOpts[ssoReceivePathMTU]; ok && cf&FlagPathMTU != 0 { + if err := so.SetInt(c, boolint(on)); err != nil { + return err + } + if on { + opt.set(FlagPathMTU) + } else { + opt.clear(FlagPathMTU) + } + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_windows.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_windows.go new file mode 100644 index 00000000000..ef2563b3fc6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/control_windows.go @@ -0,0 +1,16 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "syscall" + + "golang.org/x/net/internal/socket" +) + +func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error { + // TODO(mikio): implement this + return syscall.EWINDOWS +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/dgramopt.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/dgramopt.go new file mode 100644 index 00000000000..eea4fde2562 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/dgramopt.go @@ -0,0 +1,301 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + + "golang.org/x/net/bpf" +) + +// MulticastHopLimit returns the hop limit field value for outgoing +// multicast packets. +func (c *dgramOpt) MulticastHopLimit() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoMulticastHopLimit] + if !ok { + return 0, errOpNoSupport + } + return so.GetInt(c.Conn) +} + +// SetMulticastHopLimit sets the hop limit field value for future +// outgoing multicast packets. +func (c *dgramOpt) SetMulticastHopLimit(hoplim int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastHopLimit] + if !ok { + return errOpNoSupport + } + return so.SetInt(c.Conn, hoplim) +} + +// MulticastInterface returns the default interface for multicast +// packet transmissions. +func (c *dgramOpt) MulticastInterface() (*net.Interface, error) { + if !c.ok() { + return nil, errInvalidConn + } + so, ok := sockOpts[ssoMulticastInterface] + if !ok { + return nil, errOpNoSupport + } + return so.getMulticastInterface(c.Conn) +} + +// SetMulticastInterface sets the default interface for future +// multicast packet transmissions. +func (c *dgramOpt) SetMulticastInterface(ifi *net.Interface) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastInterface] + if !ok { + return errOpNoSupport + } + return so.setMulticastInterface(c.Conn, ifi) +} + +// MulticastLoopback reports whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) MulticastLoopback() (bool, error) { + if !c.ok() { + return false, errInvalidConn + } + so, ok := sockOpts[ssoMulticastLoopback] + if !ok { + return false, errOpNoSupport + } + on, err := so.GetInt(c.Conn) + if err != nil { + return false, err + } + return on == 1, nil +} + +// SetMulticastLoopback sets whether transmitted multicast packets +// should be copied and send back to the originator. +func (c *dgramOpt) SetMulticastLoopback(on bool) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoMulticastLoopback] + if !ok { + return errOpNoSupport + } + return so.SetInt(c.Conn, boolint(on)) +} + +// JoinGroup joins the group address group on the interface ifi. +// By default all sources that can cast data to group are accepted. +// It's possible to mute and unmute data transmission from a specific +// source by using ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup. +// JoinGroup uses the system assigned multicast interface when ifi is +// nil, although this is not recommended because the assignment +// depends on platforms and sometimes it might require routing +// configuration. +func (c *dgramOpt) JoinGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoJoinGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + return so.setGroup(c.Conn, ifi, grp) +} + +// LeaveGroup leaves the group address group on the interface ifi +// regardless of whether the group is any-source group or +// source-specific group. +func (c *dgramOpt) LeaveGroup(ifi *net.Interface, group net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoLeaveGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + return so.setGroup(c.Conn, ifi, grp) +} + +// JoinSourceSpecificGroup joins the source-specific group comprising +// group and source on the interface ifi. +// JoinSourceSpecificGroup uses the system assigned multicast +// interface when ifi is nil, although this is not recommended because +// the assignment depends on platforms and sometimes it might require +// routing configuration. +func (c *dgramOpt) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoJoinSourceGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// LeaveSourceSpecificGroup leaves the source-specific group on the +// interface ifi. +func (c *dgramOpt) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoLeaveSourceGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// ExcludeSourceSpecificGroup excludes the source-specific group from +// the already joined any-source groups by JoinGroup on the interface +// ifi. +func (c *dgramOpt) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoBlockSourceGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// IncludeSourceSpecificGroup includes the excluded source-specific +// group by ExcludeSourceSpecificGroup again on the interface ifi. +func (c *dgramOpt) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoUnblockSourceGroup] + if !ok { + return errOpNoSupport + } + grp := netAddrToIP16(group) + if grp == nil { + return errMissingAddress + } + src := netAddrToIP16(source) + if src == nil { + return errMissingAddress + } + return so.setSourceGroup(c.Conn, ifi, grp, src) +} + +// Checksum reports whether the kernel will compute, store or verify a +// checksum for both incoming and outgoing packets. If on is true, it +// returns an offset in bytes into the data of where the checksum +// field is located. +func (c *dgramOpt) Checksum() (on bool, offset int, err error) { + if !c.ok() { + return false, 0, errInvalidConn + } + so, ok := sockOpts[ssoChecksum] + if !ok { + return false, 0, errOpNoSupport + } + offset, err = so.GetInt(c.Conn) + if err != nil { + return false, 0, err + } + if offset < 0 { + return false, 0, nil + } + return true, offset, nil +} + +// SetChecksum enables the kernel checksum processing. If on is ture, +// the offset should be an offset in bytes into the data of where the +// checksum field is located. +func (c *dgramOpt) SetChecksum(on bool, offset int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoChecksum] + if !ok { + return errOpNoSupport + } + if !on { + offset = -1 + } + return so.SetInt(c.Conn, offset) +} + +// ICMPFilter returns an ICMP filter. +func (c *dgramOpt) ICMPFilter() (*ICMPFilter, error) { + if !c.ok() { + return nil, errInvalidConn + } + so, ok := sockOpts[ssoICMPFilter] + if !ok { + return nil, errOpNoSupport + } + return so.getICMPFilter(c.Conn) +} + +// SetICMPFilter deploys the ICMP filter. +func (c *dgramOpt) SetICMPFilter(f *ICMPFilter) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoICMPFilter] + if !ok { + return errOpNoSupport + } + return so.setICMPFilter(c.Conn, f) +} + +// SetBPF attaches a BPF program to the connection. +// +// Only supported on Linux. +func (c *dgramOpt) SetBPF(filter []bpf.RawInstruction) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoAttachFilter] + if !ok { + return errOpNoSupport + } + return so.setBPF(c.Conn, filter) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/doc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/doc.go new file mode 100644 index 00000000000..e0be9d50d70 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/doc.go @@ -0,0 +1,243 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ipv6 implements IP-level socket options for the Internet +// Protocol version 6. +// +// The package provides IP-level socket options that allow +// manipulation of IPv6 facilities. +// +// The IPv6 protocol is defined in RFC 8200. +// Socket interface extensions are defined in RFC 3493, RFC 3542 and +// RFC 3678. +// MLDv1 and MLDv2 are defined in RFC 2710 and RFC 3810. +// Source-specific multicast is defined in RFC 4607. +// +// On Darwin, this package requires OS X Mavericks version 10.9 or +// above, or equivalent. +// +// +// Unicasting +// +// The options for unicasting are available for net.TCPConn, +// net.UDPConn and net.IPConn which are created as network connections +// that use the IPv6 transport. When a single TCP connection carrying +// a data flow of multiple packets needs to indicate the flow is +// important, Conn is used to set the traffic class field on the IPv6 +// header for each packet. +// +// ln, err := net.Listen("tcp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer ln.Close() +// for { +// c, err := ln.Accept() +// if err != nil { +// // error handling +// } +// go func(c net.Conn) { +// defer c.Close() +// +// The outgoing packets will be labeled DiffServ assured forwarding +// class 1 low drop precedence, known as AF11 packets. +// +// if err := ipv6.NewConn(c).SetTrafficClass(0x28); err != nil { +// // error handling +// } +// if _, err := c.Write(data); err != nil { +// // error handling +// } +// }(c) +// } +// +// +// Multicasting +// +// The options for multicasting are available for net.UDPConn and +// net.IPConn which are created as network connections that use the +// IPv6 transport. A few network facilities must be prepared before +// you begin multicasting, at a minimum joining network interfaces and +// multicast groups. +// +// en0, err := net.InterfaceByName("en0") +// if err != nil { +// // error handling +// } +// en1, err := net.InterfaceByIndex(911) +// if err != nil { +// // error handling +// } +// group := net.ParseIP("ff02::114") +// +// First, an application listens to an appropriate address with an +// appropriate service port. +// +// c, err := net.ListenPacket("udp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// +// Second, the application joins multicast groups, starts listening to +// the groups on the specified network interfaces. Note that the +// service port for transport layer protocol does not matter with this +// operation as joining groups affects only network and link layer +// protocols, such as IPv6 and Ethernet. +// +// p := ipv6.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: group}); err != nil { +// // error handling +// } +// +// The application might set per packet control message transmissions +// between the protocol stack within the kernel. When the application +// needs a destination address on an incoming packet, +// SetControlMessage of PacketConn is used to enable control message +// transmissions. +// +// if err := p.SetControlMessage(ipv6.FlagDst, true); err != nil { +// // error handling +// } +// +// The application could identify whether the received packets are +// of interest by using the control message that contains the +// destination address of the received packet. +// +// b := make([]byte, 1500) +// for { +// n, rcm, src, err := p.ReadFrom(b) +// if err != nil { +// // error handling +// } +// if rcm.Dst.IsMulticast() { +// if rcm.Dst.Equal(group) { +// // joined group, do something +// } else { +// // unknown group, discard +// continue +// } +// } +// +// The application can also send both unicast and multicast packets. +// +// p.SetTrafficClass(0x0) +// p.SetHopLimit(16) +// if _, err := p.WriteTo(data[:n], nil, src); err != nil { +// // error handling +// } +// dst := &net.UDPAddr{IP: group, Port: 1024} +// wcm := ipv6.ControlMessage{TrafficClass: 0xe0, HopLimit: 1} +// for _, ifi := range []*net.Interface{en0, en1} { +// wcm.IfIndex = ifi.Index +// if _, err := p.WriteTo(data[:n], &wcm, dst); err != nil { +// // error handling +// } +// } +// } +// +// +// More multicasting +// +// An application that uses PacketConn may join multiple multicast +// groups. For example, a UDP listener with port 1024 might join two +// different groups across over two different network interfaces by +// using: +// +// c, err := net.ListenPacket("udp6", "[::]:1024") +// if err != nil { +// // error handling +// } +// defer c.Close() +// p := ipv6.NewPacketConn(c) +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::1:114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en1, &net.UDPAddr{IP: net.ParseIP("ff02::2:114")}); err != nil { +// // error handling +// } +// +// It is possible for multiple UDP listeners that listen on the same +// UDP port to join the same multicast group. The net package will +// provide a socket that listens to a wildcard address with reusable +// UDP port when an appropriate multicast address prefix is passed to +// the net.ListenPacket or net.ListenUDP. +// +// c1, err := net.ListenPacket("udp6", "[ff02::]:1024") +// if err != nil { +// // error handling +// } +// defer c1.Close() +// c2, err := net.ListenPacket("udp6", "[ff02::]:1024") +// if err != nil { +// // error handling +// } +// defer c2.Close() +// p1 := ipv6.NewPacketConn(c1) +// if err := p1.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// p2 := ipv6.NewPacketConn(c2) +// if err := p2.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// +// Also it is possible for the application to leave or rejoin a +// multicast group on the network interface. +// +// if err := p.LeaveGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff02::114")}); err != nil { +// // error handling +// } +// if err := p.JoinGroup(en0, &net.UDPAddr{IP: net.ParseIP("ff01::114")}); err != nil { +// // error handling +// } +// +// +// Source-specific multicasting +// +// An application that uses PacketConn on MLDv2 supported platform is +// able to join source-specific multicast groups. +// The application may use JoinSourceSpecificGroup and +// LeaveSourceSpecificGroup for the operation known as "include" mode, +// +// ssmgroup := net.UDPAddr{IP: net.ParseIP("ff32::8000:9")} +// ssmsource := net.UDPAddr{IP: net.ParseIP("fe80::cafe")} +// if err := p.JoinSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// if err := p.LeaveSourceSpecificGroup(en0, &ssmgroup, &ssmsource); err != nil { +// // error handling +// } +// +// or JoinGroup, ExcludeSourceSpecificGroup, +// IncludeSourceSpecificGroup and LeaveGroup for the operation known +// as "exclude" mode. +// +// exclsource := net.UDPAddr{IP: net.ParseIP("fe80::dead")} +// if err := p.JoinGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// if err := p.ExcludeSourceSpecificGroup(en0, &ssmgroup, &exclsource); err != nil { +// // error handling +// } +// if err := p.LeaveGroup(en0, &ssmgroup); err != nil { +// // error handling +// } +// +// Note that it depends on each platform implementation what happens +// when an application which runs on MLDv2 unsupported platform uses +// JoinSourceSpecificGroup and LeaveSourceSpecificGroup. +// In general the platform tries to fall back to conversations using +// MLDv1 and starts to listen to multicast traffic. +// In the fallback case, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup may return an error. +package ipv6 // import "golang.org/x/net/ipv6" + +// BUG(mikio): This package is not implemented on JS, NaCl and Plan 9. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/endpoint.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/endpoint.go new file mode 100644 index 00000000000..93257563963 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/endpoint.go @@ -0,0 +1,127 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "time" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the JoinSourceSpecificGroup, +// LeaveSourceSpecificGroup, ExcludeSourceSpecificGroup and +// IncludeSourceSpecificGroup methods of PacketConn are not +// implemented. + +// A Conn represents a network endpoint that uses IPv6 transport. +// It allows to set basic IP-level socket options such as traffic +// class and hop limit. +type Conn struct { + genericOpt +} + +type genericOpt struct { + *socket.Conn +} + +func (c *genericOpt) ok() bool { return c != nil && c.Conn != nil } + +// PathMTU returns a path MTU value for the destination associated +// with the endpoint. +func (c *Conn) PathMTU() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoPathMTU] + if !ok { + return 0, errOpNoSupport + } + _, mtu, err := so.getMTUInfo(c.Conn) + if err != nil { + return 0, err + } + return mtu, nil +} + +// NewConn returns a new Conn. +func NewConn(c net.Conn) *Conn { + cc, _ := socket.NewConn(c) + return &Conn{ + genericOpt: genericOpt{Conn: cc}, + } +} + +// A PacketConn represents a packet network endpoint that uses IPv6 +// transport. It is used to control several IP-level socket options +// including IPv6 header manipulation. It also provides datagram +// based network I/O methods specific to the IPv6 and higher layer +// protocols such as OSPF, GRE, and UDP. +type PacketConn struct { + genericOpt + dgramOpt + payloadHandler +} + +type dgramOpt struct { + *socket.Conn +} + +func (c *dgramOpt) ok() bool { return c != nil && c.Conn != nil } + +// SetControlMessage allows to receive the per packet basis IP-level +// socket options. +func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return setControlMessage(c.dgramOpt.Conn, &c.payloadHandler.rawOpt, cf, on) +} + +// SetDeadline sets the read and write deadlines associated with the +// endpoint. +func (c *PacketConn) SetDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the +// endpoint. +func (c *PacketConn) SetReadDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the +// endpoint. +func (c *PacketConn) SetWriteDeadline(t time.Time) error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.SetWriteDeadline(t) +} + +// Close closes the endpoint. +func (c *PacketConn) Close() error { + if !c.payloadHandler.ok() { + return errInvalidConn + } + return c.payloadHandler.Close() +} + +// NewPacketConn returns a new PacketConn using c as its underlying +// transport. +func NewPacketConn(c net.PacketConn) *PacketConn { + cc, _ := socket.NewConn(c.(net.Conn)) + return &PacketConn{ + genericOpt: genericOpt{Conn: cc}, + dgramOpt: dgramOpt{Conn: cc}, + payloadHandler: payloadHandler{PacketConn: c, Conn: cc}, + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/genericopt.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/genericopt.go new file mode 100644 index 00000000000..1a18f7549ab --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/genericopt.go @@ -0,0 +1,56 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +// TrafficClass returns the traffic class field value for outgoing +// packets. +func (c *genericOpt) TrafficClass() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoTrafficClass] + if !ok { + return 0, errOpNoSupport + } + return so.GetInt(c.Conn) +} + +// SetTrafficClass sets the traffic class field value for future +// outgoing packets. +func (c *genericOpt) SetTrafficClass(tclass int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoTrafficClass] + if !ok { + return errOpNoSupport + } + return so.SetInt(c.Conn, tclass) +} + +// HopLimit returns the hop limit field value for outgoing packets. +func (c *genericOpt) HopLimit() (int, error) { + if !c.ok() { + return 0, errInvalidConn + } + so, ok := sockOpts[ssoHopLimit] + if !ok { + return 0, errOpNoSupport + } + return so.GetInt(c.Conn) +} + +// SetHopLimit sets the hop limit field value for future outgoing +// packets. +func (c *genericOpt) SetHopLimit(hoplim int) error { + if !c.ok() { + return errInvalidConn + } + so, ok := sockOpts[ssoHopLimit] + if !ok { + return errOpNoSupport + } + return so.SetInt(c.Conn, hoplim) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/header.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/header.go new file mode 100644 index 00000000000..e05cb08b21c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/header.go @@ -0,0 +1,55 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "encoding/binary" + "fmt" + "net" +) + +const ( + Version = 6 // protocol version + HeaderLen = 40 // header length +) + +// A Header represents an IPv6 base header. +type Header struct { + Version int // protocol version + TrafficClass int // traffic class + FlowLabel int // flow label + PayloadLen int // payload length + NextHeader int // next header + HopLimit int // hop limit + Src net.IP // source address + Dst net.IP // destination address +} + +func (h *Header) String() string { + if h == nil { + return "" + } + return fmt.Sprintf("ver=%d tclass=%#x flowlbl=%#x payloadlen=%d nxthdr=%d hoplim=%d src=%v dst=%v", h.Version, h.TrafficClass, h.FlowLabel, h.PayloadLen, h.NextHeader, h.HopLimit, h.Src, h.Dst) +} + +// ParseHeader parses b as an IPv6 base header. +func ParseHeader(b []byte) (*Header, error) { + if len(b) < HeaderLen { + return nil, errHeaderTooShort + } + h := &Header{ + Version: int(b[0]) >> 4, + TrafficClass: int(b[0]&0x0f)<<4 | int(b[1])>>4, + FlowLabel: int(b[1]&0x0f)<<16 | int(b[2])<<8 | int(b[3]), + PayloadLen: int(binary.BigEndian.Uint16(b[4:6])), + NextHeader: int(b[6]), + HopLimit: int(b[7]), + } + h.Src = make(net.IP, net.IPv6len) + copy(h.Src, b[8:24]) + h.Dst = make(net.IP, net.IPv6len) + copy(h.Dst, b[24:40]) + return h, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/helper.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/helper.go new file mode 100644 index 00000000000..7ac5352294b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/helper.go @@ -0,0 +1,58 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "errors" + "net" +) + +var ( + errInvalidConn = errors.New("invalid connection") + errMissingAddress = errors.New("missing address") + errHeaderTooShort = errors.New("header too short") + errInvalidConnType = errors.New("invalid conn type") + errOpNoSupport = errors.New("operation not supported") + errNoSuchInterface = errors.New("no such interface") +) + +func boolint(b bool) int { + if b { + return 1 + } + return 0 +} + +func netAddrToIP16(a net.Addr) net.IP { + switch v := a.(type) { + case *net.UDPAddr: + if ip := v.IP.To16(); ip != nil && ip.To4() == nil { + return ip + } + case *net.IPAddr: + if ip := v.IP.To16(); ip != nil && ip.To4() == nil { + return ip + } + } + return nil +} + +func opAddr(a net.Addr) net.Addr { + switch a.(type) { + case *net.TCPAddr: + if a == nil { + return nil + } + case *net.UDPAddr: + if a == nil { + return nil + } + case *net.IPAddr: + if a == nil { + return nil + } + } + return a +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/iana.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/iana.go new file mode 100644 index 00000000000..32db1aa9496 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/iana.go @@ -0,0 +1,86 @@ +// go generate gen.go +// Code generated by the command above; DO NOT EDIT. + +package ipv6 + +// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2018-03-09 +const ( + ICMPTypeDestinationUnreachable ICMPType = 1 // Destination Unreachable + ICMPTypePacketTooBig ICMPType = 2 // Packet Too Big + ICMPTypeTimeExceeded ICMPType = 3 // Time Exceeded + ICMPTypeParameterProblem ICMPType = 4 // Parameter Problem + ICMPTypeEchoRequest ICMPType = 128 // Echo Request + ICMPTypeEchoReply ICMPType = 129 // Echo Reply + ICMPTypeMulticastListenerQuery ICMPType = 130 // Multicast Listener Query + ICMPTypeMulticastListenerReport ICMPType = 131 // Multicast Listener Report + ICMPTypeMulticastListenerDone ICMPType = 132 // Multicast Listener Done + ICMPTypeRouterSolicitation ICMPType = 133 // Router Solicitation + ICMPTypeRouterAdvertisement ICMPType = 134 // Router Advertisement + ICMPTypeNeighborSolicitation ICMPType = 135 // Neighbor Solicitation + ICMPTypeNeighborAdvertisement ICMPType = 136 // Neighbor Advertisement + ICMPTypeRedirect ICMPType = 137 // Redirect Message + ICMPTypeRouterRenumbering ICMPType = 138 // Router Renumbering + ICMPTypeNodeInformationQuery ICMPType = 139 // ICMP Node Information Query + ICMPTypeNodeInformationResponse ICMPType = 140 // ICMP Node Information Response + ICMPTypeInverseNeighborDiscoverySolicitation ICMPType = 141 // Inverse Neighbor Discovery Solicitation Message + ICMPTypeInverseNeighborDiscoveryAdvertisement ICMPType = 142 // Inverse Neighbor Discovery Advertisement Message + ICMPTypeVersion2MulticastListenerReport ICMPType = 143 // Version 2 Multicast Listener Report + ICMPTypeHomeAgentAddressDiscoveryRequest ICMPType = 144 // Home Agent Address Discovery Request Message + ICMPTypeHomeAgentAddressDiscoveryReply ICMPType = 145 // Home Agent Address Discovery Reply Message + ICMPTypeMobilePrefixSolicitation ICMPType = 146 // Mobile Prefix Solicitation + ICMPTypeMobilePrefixAdvertisement ICMPType = 147 // Mobile Prefix Advertisement + ICMPTypeCertificationPathSolicitation ICMPType = 148 // Certification Path Solicitation Message + ICMPTypeCertificationPathAdvertisement ICMPType = 149 // Certification Path Advertisement Message + ICMPTypeMulticastRouterAdvertisement ICMPType = 151 // Multicast Router Advertisement + ICMPTypeMulticastRouterSolicitation ICMPType = 152 // Multicast Router Solicitation + ICMPTypeMulticastRouterTermination ICMPType = 153 // Multicast Router Termination + ICMPTypeFMIPv6 ICMPType = 154 // FMIPv6 Messages + ICMPTypeRPLControl ICMPType = 155 // RPL Control Message + ICMPTypeILNPv6LocatorUpdate ICMPType = 156 // ILNPv6 Locator Update Message + ICMPTypeDuplicateAddressRequest ICMPType = 157 // Duplicate Address Request + ICMPTypeDuplicateAddressConfirmation ICMPType = 158 // Duplicate Address Confirmation + ICMPTypeMPLControl ICMPType = 159 // MPL Control Message + ICMPTypeExtendedEchoRequest ICMPType = 160 // Extended Echo Request + ICMPTypeExtendedEchoReply ICMPType = 161 // Extended Echo Reply +) + +// Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2018-03-09 +var icmpTypes = map[ICMPType]string{ + 1: "destination unreachable", + 2: "packet too big", + 3: "time exceeded", + 4: "parameter problem", + 128: "echo request", + 129: "echo reply", + 130: "multicast listener query", + 131: "multicast listener report", + 132: "multicast listener done", + 133: "router solicitation", + 134: "router advertisement", + 135: "neighbor solicitation", + 136: "neighbor advertisement", + 137: "redirect message", + 138: "router renumbering", + 139: "icmp node information query", + 140: "icmp node information response", + 141: "inverse neighbor discovery solicitation message", + 142: "inverse neighbor discovery advertisement message", + 143: "version 2 multicast listener report", + 144: "home agent address discovery request message", + 145: "home agent address discovery reply message", + 146: "mobile prefix solicitation", + 147: "mobile prefix advertisement", + 148: "certification path solicitation message", + 149: "certification path advertisement message", + 151: "multicast router advertisement", + 152: "multicast router solicitation", + 153: "multicast router termination", + 154: "fmipv6 messages", + 155: "rpl control message", + 156: "ilnpv6 locator update message", + 157: "duplicate address request", + 158: "duplicate address confirmation", + 159: "mpl control message", + 160: "extended echo request", + 161: "extended echo reply", +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp.go new file mode 100644 index 00000000000..b7f48e27b83 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp.go @@ -0,0 +1,60 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import "golang.org/x/net/internal/iana" + +// BUG(mikio): On Windows, methods related to ICMPFilter are not +// implemented. + +// An ICMPType represents a type of ICMP message. +type ICMPType int + +func (typ ICMPType) String() string { + s, ok := icmpTypes[typ] + if !ok { + return "" + } + return s +} + +// Protocol returns the ICMPv6 protocol number. +func (typ ICMPType) Protocol() int { + return iana.ProtocolIPv6ICMP +} + +// An ICMPFilter represents an ICMP message filter for incoming +// packets. The filter belongs to a packet delivery path on a host and +// it cannot interact with forwarding packets or tunnel-outer packets. +// +// Note: RFC 8200 defines a reasonable role model. A node means a +// device that implements IP. A router means a node that forwards IP +// packets not explicitly addressed to itself, and a host means a node +// that is not a router. +type ICMPFilter struct { + icmpv6Filter +} + +// Accept accepts incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Accept(typ ICMPType) { + f.accept(typ) +} + +// Block blocks incoming ICMP packets including the type field value +// typ. +func (f *ICMPFilter) Block(typ ICMPType) { + f.block(typ) +} + +// SetAll sets the filter action to the filter. +func (f *ICMPFilter) SetAll(block bool) { + f.setAll(block) +} + +// WillBlock reports whether the ICMP type will be blocked. +func (f *ICMPFilter) WillBlock(typ ICMPType) bool { + return f.willBlock(typ) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_bsd.go new file mode 100644 index 00000000000..e1a791de46e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_bsd.go @@ -0,0 +1,29 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.Filt[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.Filt { + if block { + f.Filt[i] = 0 + } else { + f.Filt[i] = 1<<32 - 1 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.Filt[typ>>5]&(1<<(uint32(typ)&31)) == 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_linux.go new file mode 100644 index 00000000000..647f6b44fff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_linux.go @@ -0,0 +1,27 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.Data[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.Data[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.Data { + if block { + f.Data[i] = 1<<32 - 1 + } else { + f.Data[i] = 0 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.Data[typ>>5]&(1<<(uint32(typ)&31)) != 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_solaris.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_solaris.go new file mode 100644 index 00000000000..7c23bb1cf6f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_solaris.go @@ -0,0 +1,27 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + f.X__icmp6_filt[typ>>5] |= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) block(typ ICMPType) { + f.X__icmp6_filt[typ>>5] &^= 1 << (uint32(typ) & 31) +} + +func (f *icmpv6Filter) setAll(block bool) { + for i := range f.X__icmp6_filt { + if block { + f.X__icmp6_filt[i] = 0 + } else { + f.X__icmp6_filt[i] = 1<<32 - 1 + } + } +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return f.X__icmp6_filt[typ>>5]&(1<<(uint32(typ)&31)) == 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_stub.go new file mode 100644 index 00000000000..c4b9be6dbff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_stub.go @@ -0,0 +1,23 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package ipv6 + +type icmpv6Filter struct { +} + +func (f *icmpv6Filter) accept(typ ICMPType) { +} + +func (f *icmpv6Filter) block(typ ICMPType) { +} + +func (f *icmpv6Filter) setAll(block bool) { +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + return false +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_windows.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_windows.go new file mode 100644 index 00000000000..443cd073676 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/icmp_windows.go @@ -0,0 +1,22 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +func (f *icmpv6Filter) accept(typ ICMPType) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) block(typ ICMPType) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) setAll(block bool) { + // TODO(mikio): implement this +} + +func (f *icmpv6Filter) willBlock(typ ICMPType) bool { + // TODO(mikio): implement this + return false +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload.go new file mode 100644 index 00000000000..a8197f16958 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload.go @@ -0,0 +1,23 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +// BUG(mikio): On Windows, the ControlMessage for ReadFrom and WriteTo +// methods of PacketConn is not implemented. + +// A payloadHandler represents the IPv6 datagram payload handler. +type payloadHandler struct { + net.PacketConn + *socket.Conn + rawOpt +} + +func (c *payloadHandler) ok() bool { return c != nil && c.PacketConn != nil && c.Conn != nil } diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg.go new file mode 100644 index 00000000000..3f23b5d21d8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg.go @@ -0,0 +1,32 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !js,!nacl,!plan9,!windows + +package ipv6 + +import "net" + +// ReadFrom reads a payload of the received IPv6 datagram, from the +// endpoint c, copying the payload into b. It returns the number of +// bytes copied into b, the control message cm and the source address +// src of the received datagram. +func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + if !c.ok() { + return 0, nil, nil, errInvalidConn + } + return c.readFrom(b) +} + +// WriteTo writes a payload of the IPv6 datagram, to the destination +// address dst through the endpoint c, copying the payload from b. It +// returns the number of bytes written. The control message cm allows +// the IPv6 header fields and the datagram path to be specified. The +// cm may be nil if control of the outgoing datagram is not required. +func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + if !c.ok() { + return 0, errInvalidConn + } + return c.writeTo(b, cm, dst) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go new file mode 100644 index 00000000000..bc4209db70f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go @@ -0,0 +1,55 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 +// +build !js,!nacl,!plan9,!windows + +package ipv6 + +import "net" + +func (c *payloadHandler) readFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + c.rawOpt.RLock() + oob := NewControlMessage(c.rawOpt.cflags) + c.rawOpt.RUnlock() + var nn int + switch c := c.PacketConn.(type) { + case *net.UDPConn: + if n, nn, _, src, err = c.ReadMsgUDP(b, oob); err != nil { + return 0, nil, nil, err + } + case *net.IPConn: + if n, nn, _, src, err = c.ReadMsgIP(b, oob); err != nil { + return 0, nil, nil, err + } + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Err: errInvalidConnType} + } + if nn > 0 { + cm = new(ControlMessage) + if err = cm.Parse(oob[:nn]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + } + if cm != nil { + cm.Src = netAddrToIP16(src) + } + return +} + +func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + oob := cm.Marshal() + if dst == nil { + return 0, &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errMissingAddress} + } + switch c := c.PacketConn.(type) { + case *net.UDPConn: + n, _, err = c.WriteMsgUDP(b, oob, dst.(*net.UDPAddr)) + case *net.IPConn: + n, _, err = c.WriteMsgIP(b, oob, dst.(*net.IPAddr)) + default: + return 0, &net.OpError{Op: "write", Net: c.LocalAddr().Network(), Source: c.LocalAddr(), Addr: opAddr(dst), Err: errInvalidConnType} + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go new file mode 100644 index 00000000000..7dd65048024 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go @@ -0,0 +1,57 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 +// +build !js,!nacl,!plan9,!windows + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (c *payloadHandler) readFrom(b []byte) (int, *ControlMessage, net.Addr, error) { + c.rawOpt.RLock() + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: NewControlMessage(c.rawOpt.cflags), + } + c.rawOpt.RUnlock() + switch c.PacketConn.(type) { + case *net.UDPConn: + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + case *net.IPConn: + if err := c.RecvMsg(&m, 0); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + default: + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: errInvalidConnType} + } + var cm *ControlMessage + if m.NN > 0 { + cm = new(ControlMessage) + if err := cm.Parse(m.OOB[:m.NN]); err != nil { + return 0, nil, nil, &net.OpError{Op: "read", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Err: err} + } + cm.Src = netAddrToIP16(m.Addr) + } + return m.N, cm, m.Addr, nil +} + +func (c *payloadHandler) writeTo(b []byte, cm *ControlMessage, dst net.Addr) (int, error) { + m := socket.Message{ + Buffers: [][]byte{b}, + OOB: cm.Marshal(), + Addr: dst, + } + err := c.SendMsg(&m, 0) + if err != nil { + err = &net.OpError{Op: "write", Net: c.PacketConn.LocalAddr().Network(), Source: c.PacketConn.LocalAddr(), Addr: opAddr(dst), Err: err} + } + return m.N, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_nocmsg.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_nocmsg.go new file mode 100644 index 00000000000..459142d2642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/payload_nocmsg.go @@ -0,0 +1,38 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build js nacl plan9 windows + +package ipv6 + +import "net" + +// ReadFrom reads a payload of the received IPv6 datagram, from the +// endpoint c, copying the payload into b. It returns the number of +// bytes copied into b, the control message cm and the source address +// src of the received datagram. +func (c *payloadHandler) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error) { + if !c.ok() { + return 0, nil, nil, errInvalidConn + } + if n, src, err = c.PacketConn.ReadFrom(b); err != nil { + return 0, nil, nil, err + } + return +} + +// WriteTo writes a payload of the IPv6 datagram, to the destination +// address dst through the endpoint c, copying the payload from b. It +// returns the number of bytes written. The control message cm allows +// the IPv6 header fields and the datagram path to be specified. The +// cm may be nil if control of the outgoing datagram is not required. +func (c *payloadHandler) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error) { + if !c.ok() { + return 0, errInvalidConn + } + if dst == nil { + return 0, errMissingAddress + } + return c.PacketConn.WriteTo(b, dst) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt.go new file mode 100644 index 00000000000..cc3907df385 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt.go @@ -0,0 +1,43 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import "golang.org/x/net/internal/socket" + +// Sticky socket options +const ( + ssoTrafficClass = iota // header field for unicast packet, RFC 3542 + ssoHopLimit // header field for unicast packet, RFC 3493 + ssoMulticastInterface // outbound interface for multicast packet, RFC 3493 + ssoMulticastHopLimit // header field for multicast packet, RFC 3493 + ssoMulticastLoopback // loopback for multicast packet, RFC 3493 + ssoReceiveTrafficClass // header field on received packet, RFC 3542 + ssoReceiveHopLimit // header field on received packet, RFC 2292 or 3542 + ssoReceivePacketInfo // incbound or outbound packet path, RFC 2292 or 3542 + ssoReceivePathMTU // path mtu, RFC 3542 + ssoPathMTU // path mtu, RFC 3542 + ssoChecksum // packet checksum, RFC 2292 or 3542 + ssoICMPFilter // icmp filter, RFC 2292 or 3542 + ssoJoinGroup // any-source multicast, RFC 3493 + ssoLeaveGroup // any-source multicast, RFC 3493 + ssoJoinSourceGroup // source-specific multicast + ssoLeaveSourceGroup // source-specific multicast + ssoBlockSourceGroup // any-source or source-specific multicast + ssoUnblockSourceGroup // any-source or source-specific multicast + ssoAttachFilter // attach BPF for filtering inbound traffic +) + +// Sticky socket option value types +const ( + ssoTypeIPMreq = iota + 1 + ssoTypeGroupReq + ssoTypeGroupSourceReq +) + +// A sockOpt represents a binding for sticky socket option. +type sockOpt struct { + socket.Option + typ int // hint for option value type; optional +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt_posix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt_posix.go new file mode 100644 index 00000000000..0eac86eb8cc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt_posix.go @@ -0,0 +1,87 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv6 + +import ( + "net" + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) { + n, err := so.GetInt(c) + if err != nil { + return nil, err + } + return net.InterfaceByIndex(n) +} + +func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error { + var n int + if ifi != nil { + n = ifi.Index + } + return so.SetInt(c, n) +} + +func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) { + b := make([]byte, so.Len) + n, err := so.Get(c, b) + if err != nil { + return nil, err + } + if n != sizeofICMPv6Filter { + return nil, errOpNoSupport + } + return (*ICMPFilter)(unsafe.Pointer(&b[0])), nil +} + +func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error { + b := (*[sizeofICMPv6Filter]byte)(unsafe.Pointer(f))[:sizeofICMPv6Filter] + return so.Set(c, b) +} + +func (so *sockOpt) getMTUInfo(c *socket.Conn) (*net.Interface, int, error) { + b := make([]byte, so.Len) + n, err := so.Get(c, b) + if err != nil { + return nil, 0, err + } + if n != sizeofIPv6Mtuinfo { + return nil, 0, errOpNoSupport + } + mi := (*ipv6Mtuinfo)(unsafe.Pointer(&b[0])) + if mi.Addr.Scope_id == 0 { + return nil, int(mi.Mtu), nil + } + ifi, err := net.InterfaceByIndex(int(mi.Addr.Scope_id)) + if err != nil { + return nil, 0, err + } + return ifi, int(mi.Mtu), nil +} + +func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + switch so.typ { + case ssoTypeIPMreq: + return so.setIPMreq(c, ifi, grp) + case ssoTypeGroupReq: + return so.setGroupReq(c, ifi, grp) + default: + return errOpNoSupport + } +} + +func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return so.setGroupSourceReq(c, ifi, grp, src) +} + +func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error { + return so.setAttachFilter(c, f) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt_stub.go new file mode 100644 index 00000000000..1f4a273e445 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sockopt_stub.go @@ -0,0 +1,46 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package ipv6 + +import ( + "net" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) getMulticastInterface(c *socket.Conn) (*net.Interface, error) { + return nil, errOpNoSupport +} + +func (so *sockOpt) setMulticastInterface(c *socket.Conn, ifi *net.Interface) error { + return errOpNoSupport +} + +func (so *sockOpt) getICMPFilter(c *socket.Conn) (*ICMPFilter, error) { + return nil, errOpNoSupport +} + +func (so *sockOpt) setICMPFilter(c *socket.Conn, f *ICMPFilter) error { + return errOpNoSupport +} + +func (so *sockOpt) getMTUInfo(c *socket.Conn) (*net.Interface, int, error) { + return nil, 0, errOpNoSupport +} + +func (so *sockOpt) setGroup(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} + +func (so *sockOpt) setSourceGroup(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return errOpNoSupport +} + +func (so *sockOpt) setBPF(c *socket.Conn, f []bpf.RawInstruction) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_asmreq.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_asmreq.go new file mode 100644 index 00000000000..b0510c0b5d5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_asmreq.go @@ -0,0 +1,24 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris windows + +package ipv6 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + var mreq ipv6Mreq + copy(mreq.Multiaddr[:], grp) + if ifi != nil { + mreq.setIfindex(ifi.Index) + } + b := (*[sizeofIPv6Mreq]byte)(unsafe.Pointer(&mreq))[:sizeofIPv6Mreq] + return so.Set(c, b) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go new file mode 100644 index 00000000000..eece96187b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go @@ -0,0 +1,17 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setIPMreq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bpf.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bpf.go new file mode 100644 index 00000000000..b2dbcb2f286 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bpf.go @@ -0,0 +1,23 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package ipv6 + +import ( + "unsafe" + + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { + prog := sockFProg{ + Len: uint16(len(f)), + Filter: (*sockFilter)(unsafe.Pointer(&f[0])), + } + b := (*[sizeofSockFprog]byte)(unsafe.Pointer(&prog))[:sizeofSockFprog] + return so.Set(c, b) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go new file mode 100644 index 00000000000..676bea555f0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go @@ -0,0 +1,16 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !linux + +package ipv6 + +import ( + "golang.org/x/net/bpf" + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setAttachFilter(c *socket.Conn, f []bpf.RawInstruction) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bsd.go new file mode 100644 index 00000000000..e416eaa1fe4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_bsd.go @@ -0,0 +1,57 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build dragonfly netbsd openbsd + +package ipv6 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_darwin.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_darwin.go new file mode 100644 index 00000000000..e3d04439275 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_darwin.go @@ -0,0 +1,106 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "strconv" + "strings" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlHopLimit: {sysIPV6_2292HOPLIMIT, 4, marshal2292HopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_2292PKTINFO, sizeofInet6Pktinfo, marshal2292PacketInfo, parsePacketInfo}, + } + + sockOpts = map[int]*sockOpt{ + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_2292HOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_2292PKTINFO, Len: 4}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + } +) + +func init() { + // Seems like kern.osreldate is veiled on latest OS X. We use + // kern.osrelease instead. + s, err := syscall.Sysctl("kern.osrelease") + if err != nil { + return + } + ss := strings.Split(s, ".") + if len(ss) == 0 { + return + } + // The IP_PKTINFO and protocol-independent multicast API were + // introduced in OS X 10.7 (Darwin 11). But it looks like + // those features require OS X 10.8 (Darwin 12) or above. + // See http://support.apple.com/kb/HT1633. + if mjver, err := strconv.Atoi(ss[0]); err != nil || mjver < 12 { + return + } + ctlOpts[ctlTrafficClass] = ctlOpt{sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass} + ctlOpts[ctlHopLimit] = ctlOpt{sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit} + ctlOpts[ctlPacketInfo] = ctlOpt{sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo} + ctlOpts[ctlNextHop] = ctlOpt{sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop} + ctlOpts[ctlPathMTU] = ctlOpt{sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU} + sockOpts[ssoTrafficClass] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}} + sockOpts[ssoReceiveTrafficClass] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}} + sockOpts[ssoReceiveHopLimit] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}} + sockOpts[ssoReceivePacketInfo] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}} + sockOpts[ssoReceivePathMTU] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}} + sockOpts[ssoPathMTU] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}} + sockOpts[ssoJoinGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq} + sockOpts[ssoLeaveGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq} + sockOpts[ssoJoinSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq} + sockOpts[ssoLeaveSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq} + sockOpts[ssoBlockSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq} + sockOpts[ssoUnblockSourceGroup] = &sockOpt{Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq} +} + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 132)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_freebsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_freebsd.go new file mode 100644 index 00000000000..e9349dc2cc2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_freebsd.go @@ -0,0 +1,92 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "runtime" + "strings" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func init() { + if runtime.GOOS == "freebsd" && runtime.GOARCH == "386" { + archs, _ := syscall.Sysctl("kern.supported_archs") + for _, s := range strings.Fields(archs) { + if s == "amd64" { + freebsd32o64 = true + break + } + } + } +} + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source)) + sa.Len = sizeofSockaddrInet6 + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_linux.go new file mode 100644 index 00000000000..bc218103c11 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_linux.go @@ -0,0 +1,74 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolReserved, Name: sysIPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMPV6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoAttachFilter: {Option: socket.Option{Level: sysSOL_SOCKET, Name: sysSO_ATTACH_FILTER, Len: sizeofSockFprog}}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = int32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Ifindex = int32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_solaris.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_solaris.go new file mode 100644 index 00000000000..d348b5f6e45 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_solaris.go @@ -0,0 +1,74 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + "unsafe" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +var ( + ctlOpts = [ctlMax]ctlOpt{ + ctlTrafficClass: {sysIPV6_TCLASS, 4, marshalTrafficClass, parseTrafficClass}, + ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit}, + ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo}, + ctlNextHop: {sysIPV6_NEXTHOP, sizeofSockaddrInet6, marshalNextHop, parseNextHop}, + ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU}, + } + + sockOpts = map[int]*sockOpt{ + ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}}, + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}}, + ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}}, + ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}}, + ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}}, + ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}}, + ssoPathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_PATHMTU, Len: sizeofIPv6Mtuinfo}}, + ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}}, + ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq}, + ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (pi *inet6Pktinfo) setIfindex(i int) { + pi.Ifindex = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} + +func (gr *groupReq) setGroup(grp net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gr)) + 4)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) +} + +func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) { + sa := (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 4)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], grp) + sa = (*sockaddrInet6)(unsafe.Pointer(uintptr(unsafe.Pointer(gsr)) + 260)) + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], src) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_ssmreq.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_ssmreq.go new file mode 100644 index 00000000000..add8ccc0b1b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_ssmreq.go @@ -0,0 +1,54 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin freebsd linux solaris + +package ipv6 + +import ( + "net" + "unsafe" + + "golang.org/x/net/internal/socket" +) + +var freebsd32o64 bool + +func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + var gr groupReq + if ifi != nil { + gr.Interface = uint32(ifi.Index) + } + gr.setGroup(grp) + var b []byte + if freebsd32o64 { + var d [sizeofGroupReq + 4]byte + s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + b = d[:] + } else { + b = (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))[:sizeofGroupReq] + } + return so.Set(c, b) +} + +func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + var gsr groupSourceReq + if ifi != nil { + gsr.Interface = uint32(ifi.Index) + } + gsr.setSourceGroup(grp, src) + var b []byte + if freebsd32o64 { + var d [sizeofGroupSourceReq + 4]byte + s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr)) + copy(d[:4], s[:4]) + copy(d[8:], s[4:]) + b = d[:] + } else { + b = (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))[:sizeofGroupSourceReq] + } + return so.Set(c, b) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go new file mode 100644 index 00000000000..581ee490ff2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go @@ -0,0 +1,21 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!freebsd,!linux,!solaris + +package ipv6 + +import ( + "net" + + "golang.org/x/net/internal/socket" +) + +func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error { + return errOpNoSupport +} + +func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error { + return errOpNoSupport +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_stub.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_stub.go new file mode 100644 index 00000000000..b845388ea4a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_stub.go @@ -0,0 +1,13 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !darwin,!dragonfly,!freebsd,!linux,!netbsd,!openbsd,!solaris,!windows + +package ipv6 + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = map[int]*sockOpt{} +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_windows.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_windows.go new file mode 100644 index 00000000000..fc36b018bd2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/sys_windows.go @@ -0,0 +1,75 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ipv6 + +import ( + "net" + "syscall" + + "golang.org/x/net/internal/iana" + "golang.org/x/net/internal/socket" +) + +const ( + // See ws2tcpip.h. + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PKTINFO = 0x13 + + sizeofSockaddrInet6 = 0x1c + + sizeofIPv6Mreq = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofICMPv6Filter = 0 +) + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type icmpv6Filter struct { + // TODO(mikio): implement this +} + +var ( + ctlOpts = [ctlMax]ctlOpt{} + + sockOpts = map[int]*sockOpt{ + ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}}, + ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}}, + ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}}, + ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}}, + ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_JOIN_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_LEAVE_GROUP, Len: sizeofIPv6Mreq}, typ: ssoTypeIPMreq}, + } +) + +func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) { + sa.Family = syscall.AF_INET6 + copy(sa.Addr[:], ip) + sa.Scope_id = uint32(i) +} + +func (mreq *ipv6Mreq) setIfindex(i int) { + mreq.Interface = uint32(i) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_darwin.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_darwin.go new file mode 100644 index 00000000000..6aab1dfab7c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_darwin.go @@ -0,0 +1,131 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_darwin.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + sysIPV6_2292PKTINFO = 0x13 + sysIPV6_2292HOPLIMIT = 0x14 + sysIPV6_2292NEXTHOP = 0x15 + sysIPV6_2292HOPOPTS = 0x16 + sysIPV6_2292DSTOPTS = 0x17 + sysIPV6_2292RTHDR = 0x18 + + sysIPV6_2292PKTOPTIONS = 0x19 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RECVTCLASS = 0x23 + sysIPV6_TCLASS = 0x24 + + sysIPV6_RTHDRDSTOPTS = 0x39 + + sysIPV6_RECVPKTINFO = 0x3d + + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_MSFILTER = 0x4a + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_BOUND_IF = 0x7d + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [128]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [128]byte + Pad_cgo_1 [128]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go new file mode 100644 index 00000000000..d2de804d88c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go @@ -0,0 +1,88 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_dragonfly.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go new file mode 100644 index 00000000000..919e572d4a1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go @@ -0,0 +1,122 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_BINDANY = 0x40 + + sysIPV6_MSFILTER = 0x4a + + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go new file mode 100644 index 00000000000..cb8141f9c65 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go @@ -0,0 +1,124 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_BINDANY = 0x40 + + sysIPV6_MSFILTER = 0x4a + + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go new file mode 100644 index 00000000000..cb8141f9c65 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go @@ -0,0 +1,124 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_freebsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PREFER_TEMPADDR = 0x3f + + sysIPV6_BINDANY = 0x40 + + sysIPV6_MSFILTER = 0x4a + + sysMCAST_JOIN_GROUP = 0x50 + sysMCAST_LEAVE_GROUP = 0x51 + sysMCAST_JOIN_SOURCE_GROUP = 0x52 + sysMCAST_LEAVE_SOURCE_GROUP = 0x53 + sysMCAST_BLOCK_SOURCE = 0x54 + sysMCAST_UNBLOCK_SOURCE = 0x55 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Len uint8 + Family uint8 + X__ss_pad1 [6]int8 + X__ss_align int64 + X__ss_pad2 [112]int8 +} + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group sockaddrStorage + Source sockaddrStorage +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_386.go new file mode 100644 index 00000000000..73aa8c6dfce --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_386.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go new file mode 100644 index 00000000000..b64f0157d7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go @@ -0,0 +1,172 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go new file mode 100644 index 00000000000..73aa8c6dfce --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go new file mode 100644 index 00000000000..b64f0157d7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go @@ -0,0 +1,172 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go new file mode 100644 index 00000000000..73aa8c6dfce --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go new file mode 100644 index 00000000000..b64f0157d7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go @@ -0,0 +1,172 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go new file mode 100644 index 00000000000..b64f0157d7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go @@ -0,0 +1,172 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go new file mode 100644 index 00000000000..73aa8c6dfce --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go new file mode 100644 index 00000000000..c9bf6a87ef7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go @@ -0,0 +1,170 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x84 + sizeofGroupSourceReq = 0x104 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x8 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]uint8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go new file mode 100644 index 00000000000..b64f0157d7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go @@ -0,0 +1,172 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go new file mode 100644 index 00000000000..b64f0157d7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go @@ -0,0 +1,172 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go new file mode 100644 index 00000000000..b64f0157d7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go @@ -0,0 +1,172 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_linux.go + +package ipv6 + +const ( + sysIPV6_ADDRFORM = 0x1 + sysIPV6_2292PKTINFO = 0x2 + sysIPV6_2292HOPOPTS = 0x3 + sysIPV6_2292DSTOPTS = 0x4 + sysIPV6_2292RTHDR = 0x5 + sysIPV6_2292PKTOPTIONS = 0x6 + sysIPV6_CHECKSUM = 0x7 + sysIPV6_2292HOPLIMIT = 0x8 + sysIPV6_NEXTHOP = 0x9 + sysIPV6_FLOWINFO = 0xb + + sysIPV6_UNICAST_HOPS = 0x10 + sysIPV6_MULTICAST_IF = 0x11 + sysIPV6_MULTICAST_HOPS = 0x12 + sysIPV6_MULTICAST_LOOP = 0x13 + sysIPV6_ADD_MEMBERSHIP = 0x14 + sysIPV6_DROP_MEMBERSHIP = 0x15 + sysMCAST_JOIN_GROUP = 0x2a + sysMCAST_LEAVE_GROUP = 0x2d + sysMCAST_JOIN_SOURCE_GROUP = 0x2e + sysMCAST_LEAVE_SOURCE_GROUP = 0x2f + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_MSFILTER = 0x30 + sysIPV6_ROUTER_ALERT = 0x16 + sysIPV6_MTU_DISCOVER = 0x17 + sysIPV6_MTU = 0x18 + sysIPV6_RECVERR = 0x19 + sysIPV6_V6ONLY = 0x1a + sysIPV6_JOIN_ANYCAST = 0x1b + sysIPV6_LEAVE_ANYCAST = 0x1c + + sysIPV6_FLOWLABEL_MGR = 0x20 + sysIPV6_FLOWINFO_SEND = 0x21 + + sysIPV6_IPSEC_POLICY = 0x22 + sysIPV6_XFRM_POLICY = 0x23 + + sysIPV6_RECVPKTINFO = 0x31 + sysIPV6_PKTINFO = 0x32 + sysIPV6_RECVHOPLIMIT = 0x33 + sysIPV6_HOPLIMIT = 0x34 + sysIPV6_RECVHOPOPTS = 0x35 + sysIPV6_HOPOPTS = 0x36 + sysIPV6_RTHDRDSTOPTS = 0x37 + sysIPV6_RECVRTHDR = 0x38 + sysIPV6_RTHDR = 0x39 + sysIPV6_RECVDSTOPTS = 0x3a + sysIPV6_DSTOPTS = 0x3b + sysIPV6_RECVPATHMTU = 0x3c + sysIPV6_PATHMTU = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_RECVTCLASS = 0x42 + sysIPV6_TCLASS = 0x43 + + sysIPV6_ADDR_PREFERENCES = 0x48 + + sysIPV6_PREFER_SRC_TMP = 0x1 + sysIPV6_PREFER_SRC_PUBLIC = 0x2 + sysIPV6_PREFER_SRC_PUBTMP_DEFAULT = 0x100 + sysIPV6_PREFER_SRC_COA = 0x4 + sysIPV6_PREFER_SRC_HOME = 0x400 + sysIPV6_PREFER_SRC_CGA = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x800 + + sysIPV6_MINHOPCOUNT = 0x49 + + sysIPV6_ORIGDSTADDR = 0x4a + sysIPV6_RECVORIGDSTADDR = 0x4a + sysIPV6_TRANSPARENT = 0x4b + sysIPV6_UNICAST_IF = 0x4c + + sysICMPV6_FILTER = 0x1 + + sysICMPV6_FILTER_BLOCK = 0x1 + sysICMPV6_FILTER_PASS = 0x2 + sysICMPV6_FILTER_BLOCKOTHERS = 0x3 + sysICMPV6_FILTER_PASSONLY = 0x4 + + sysSOL_SOCKET = 0x1 + sysSO_ATTACH_FILTER = 0x1a + + sizeofKernelSockaddrStorage = 0x80 + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + sizeofIPv6FlowlabelReq = 0x20 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x88 + sizeofGroupSourceReq = 0x108 + + sizeofICMPv6Filter = 0x20 + + sizeofSockFprog = 0x10 +) + +type kernelSockaddrStorage struct { + Family uint16 + X__data [126]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex int32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6FlowlabelReq struct { + Dst [16]byte /* in6_addr */ + Label uint32 + Action uint8 + Share uint8 + Flags uint16 + Expires uint16 + Linger uint16 + X__flr_pad uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Ifindex int32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [4]byte + Group kernelSockaddrStorage + Source kernelSockaddrStorage +} + +type icmpv6Filter struct { + Data [8]uint32 +} + +type sockFProg struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *sockFilter +} + +type sockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_netbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_netbsd.go new file mode 100644 index 00000000000..bcada13b7a7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_netbsd.go @@ -0,0 +1,84 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_netbsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_IPSEC_POLICY = 0x1c + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_openbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_openbsd.go new file mode 100644 index 00000000000..86cf3c63799 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_openbsd.go @@ -0,0 +1,93 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_openbsd.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x4 + sysIPV6_MULTICAST_IF = 0x9 + sysIPV6_MULTICAST_HOPS = 0xa + sysIPV6_MULTICAST_LOOP = 0xb + sysIPV6_JOIN_GROUP = 0xc + sysIPV6_LEAVE_GROUP = 0xd + sysIPV6_PORTRANGE = 0xe + sysICMP6_FILTER = 0x12 + + sysIPV6_CHECKSUM = 0x1a + sysIPV6_V6ONLY = 0x1b + + sysIPV6_RTHDRDSTOPTS = 0x23 + + sysIPV6_RECVPKTINFO = 0x24 + sysIPV6_RECVHOPLIMIT = 0x25 + sysIPV6_RECVRTHDR = 0x26 + sysIPV6_RECVHOPOPTS = 0x27 + sysIPV6_RECVDSTOPTS = 0x28 + + sysIPV6_USE_MIN_MTU = 0x2a + sysIPV6_RECVPATHMTU = 0x2b + + sysIPV6_PATHMTU = 0x2c + + sysIPV6_PKTINFO = 0x2e + sysIPV6_HOPLIMIT = 0x2f + sysIPV6_NEXTHOP = 0x30 + sysIPV6_HOPOPTS = 0x31 + sysIPV6_DSTOPTS = 0x32 + sysIPV6_RTHDR = 0x33 + + sysIPV6_AUTH_LEVEL = 0x35 + sysIPV6_ESP_TRANS_LEVEL = 0x36 + sysIPV6_ESP_NETWORK_LEVEL = 0x37 + sysIPSEC6_OUTSA = 0x38 + sysIPV6_RECVTCLASS = 0x39 + + sysIPV6_AUTOFLOWLABEL = 0x3b + sysIPV6_IPCOMP_LEVEL = 0x3c + + sysIPV6_TCLASS = 0x3d + sysIPV6_DONTFRAG = 0x3e + sysIPV6_PIPEX = 0x3f + + sysIPV6_RTABLE = 0x1021 + + sysIPV6_PORTRANGE_DEFAULT = 0x0 + sysIPV6_PORTRANGE_HIGH = 0x1 + sysIPV6_PORTRANGE_LOW = 0x2 + + sizeofSockaddrInet6 = 0x1c + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x20 + + sizeofIPv6Mreq = 0x14 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type icmpv6Filter struct { + Filt [8]uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_solaris.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_solaris.go new file mode 100644 index 00000000000..cf1837dd2af --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/net/ipv6/zsys_solaris.go @@ -0,0 +1,131 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs defs_solaris.go + +package ipv6 + +const ( + sysIPV6_UNICAST_HOPS = 0x5 + sysIPV6_MULTICAST_IF = 0x6 + sysIPV6_MULTICAST_HOPS = 0x7 + sysIPV6_MULTICAST_LOOP = 0x8 + sysIPV6_JOIN_GROUP = 0x9 + sysIPV6_LEAVE_GROUP = 0xa + + sysIPV6_PKTINFO = 0xb + + sysIPV6_HOPLIMIT = 0xc + sysIPV6_NEXTHOP = 0xd + sysIPV6_HOPOPTS = 0xe + sysIPV6_DSTOPTS = 0xf + + sysIPV6_RTHDR = 0x10 + sysIPV6_RTHDRDSTOPTS = 0x11 + + sysIPV6_RECVPKTINFO = 0x12 + sysIPV6_RECVHOPLIMIT = 0x13 + sysIPV6_RECVHOPOPTS = 0x14 + + sysIPV6_RECVRTHDR = 0x16 + + sysIPV6_RECVRTHDRDSTOPTS = 0x17 + + sysIPV6_CHECKSUM = 0x18 + sysIPV6_RECVTCLASS = 0x19 + sysIPV6_USE_MIN_MTU = 0x20 + sysIPV6_DONTFRAG = 0x21 + sysIPV6_SEC_OPT = 0x22 + sysIPV6_SRC_PREFERENCES = 0x23 + sysIPV6_RECVPATHMTU = 0x24 + sysIPV6_PATHMTU = 0x25 + sysIPV6_TCLASS = 0x26 + sysIPV6_V6ONLY = 0x27 + + sysIPV6_RECVDSTOPTS = 0x28 + + sysMCAST_JOIN_GROUP = 0x29 + sysMCAST_LEAVE_GROUP = 0x2a + sysMCAST_BLOCK_SOURCE = 0x2b + sysMCAST_UNBLOCK_SOURCE = 0x2c + sysMCAST_JOIN_SOURCE_GROUP = 0x2d + sysMCAST_LEAVE_SOURCE_GROUP = 0x2e + + sysIPV6_PREFER_SRC_HOME = 0x1 + sysIPV6_PREFER_SRC_COA = 0x2 + sysIPV6_PREFER_SRC_PUBLIC = 0x4 + sysIPV6_PREFER_SRC_TMP = 0x8 + sysIPV6_PREFER_SRC_NONCGA = 0x10 + sysIPV6_PREFER_SRC_CGA = 0x20 + + sysIPV6_PREFER_SRC_MIPMASK = 0x3 + sysIPV6_PREFER_SRC_MIPDEFAULT = 0x1 + sysIPV6_PREFER_SRC_TMPMASK = 0xc + sysIPV6_PREFER_SRC_TMPDEFAULT = 0x4 + sysIPV6_PREFER_SRC_CGAMASK = 0x30 + sysIPV6_PREFER_SRC_CGADEFAULT = 0x10 + + sysIPV6_PREFER_SRC_MASK = 0x3f + + sysIPV6_PREFER_SRC_DEFAULT = 0x15 + + sysIPV6_BOUND_IF = 0x41 + sysIPV6_UNSPEC_SRC = 0x42 + + sysICMP6_FILTER = 0x1 + + sizeofSockaddrStorage = 0x100 + sizeofSockaddrInet6 = 0x20 + sizeofInet6Pktinfo = 0x14 + sizeofIPv6Mtuinfo = 0x24 + + sizeofIPv6Mreq = 0x14 + sizeofGroupReq = 0x104 + sizeofGroupSourceReq = 0x204 + + sizeofICMPv6Filter = 0x20 +) + +type sockaddrStorage struct { + Family uint16 + X_ss_pad1 [6]int8 + X_ss_align float64 + X_ss_pad2 [240]int8 +} + +type sockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +type inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type ipv6Mtuinfo struct { + Addr sockaddrInet6 + Mtu uint32 +} + +type ipv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type groupReq struct { + Interface uint32 + Pad_cgo_0 [256]byte +} + +type groupSourceReq struct { + Interface uint32 + Pad_cgo_0 [256]byte + Pad_cgo_1 [256]byte +} + +type icmpv6Filter struct { + X__icmp6_filt [8]uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/LICENSE new file mode 100644 index 00000000000..6a66aea5eaf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/PATENTS b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/PATENTS new file mode 100644 index 00000000000..733099041f8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/README.md b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/README.md new file mode 100644 index 00000000000..bc6f6031f1b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/README.md @@ -0,0 +1,173 @@ +# Building `sys/unix` + +The sys/unix package provides access to the raw system call interface of the +underlying operating system. See: https://godoc.org/golang.org/x/sys/unix + +Porting Go to a new architecture/OS combination or adding syscalls, types, or +constants to an existing architecture/OS pair requires some manual effort; +however, there are tools that automate much of the process. + +## Build Systems + +There are currently two ways we generate the necessary files. We are currently +migrating the build system to use containers so the builds are reproducible. +This is being done on an OS-by-OS basis. Please update this documentation as +components of the build system change. + +### Old Build System (currently for `GOOS != "Linux" || GOARCH == "sparc64"`) + +The old build system generates the Go files based on the C header files +present on your system. This means that files +for a given GOOS/GOARCH pair must be generated on a system with that OS and +architecture. This also means that the generated code can differ from system +to system, based on differences in the header files. + +To avoid this, if you are using the old build system, only generate the Go +files on an installation with unmodified header files. It is also important to +keep track of which version of the OS the files were generated from (ex. +Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes +and have each OS upgrade correspond to a single change. + +To build the files for your current OS and architecture, make sure GOOS and +GOARCH are set correctly and run `mkall.sh`. This will generate the files for +your specific system. Running `mkall.sh -n` shows the commands that will be run. + +Requirements: bash, perl, go + +### New Build System (currently for `GOOS == "Linux" && GOARCH != "sparc64"`) + +The new build system uses a Docker container to generate the go files directly +from source checkouts of the kernel and various system libraries. This means +that on any platform that supports Docker, all the files using the new build +system can be generated at once, and generated files will not change based on +what the person running the scripts has installed on their computer. + +The OS specific files for the new build system are located in the `${GOOS}` +directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When +the kernel or system library updates, modify the Dockerfile at +`${GOOS}/Dockerfile` to checkout the new release of the source. + +To build all the files under the new build system, you must be on an amd64/Linux +system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will +then generate all of the files for all of the GOOS/GOARCH pairs in the new build +system. Running `mkall.sh -n` shows the commands that will be run. + +Requirements: bash, perl, go, docker + +## Component files + +This section describes the various files used in the code generation process. +It also contains instructions on how to modify these files to add a new +architecture/OS or to add additional syscalls, types, or constants. Note that +if you are using the new build system, the scripts cannot be called normally. +They must be called from within the docker container. + +### asm files + +The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system +call dispatch. There are three entry points: +``` + func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) + func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) + func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) +``` +The first and second are the standard ones; they differ only in how many +arguments can be passed to the kernel. The third is for low-level use by the +ForkExec wrapper. Unlike the first two, it does not call into the scheduler to +let it know that a system call is running. + +When porting Go to an new architecture/OS, this file must be implemented for +each GOOS/GOARCH pair. + +### mksysnum + +Mksysnum is a script located at `${GOOS}/mksysnum.pl` (or `mksysnum_${GOOS}.pl` +for the old system). This script takes in a list of header files containing the +syscall number declarations and parses them to produce the corresponding list of +Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated +constants. + +Adding new syscall numbers is mostly done by running the build on a sufficiently +new installation of the target OS (or updating the source checkouts for the +new build system). However, depending on the OS, you make need to update the +parsing in mksysnum. + +### mksyscall.pl + +The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are +hand-written Go files which implement system calls (for unix, the specific OS, +or the specific OS/Architecture pair respectively) that need special handling +and list `//sys` comments giving prototypes for ones that can be generated. + +The mksyscall.pl script takes the `//sys` and `//sysnb` comments and converts +them into syscalls. This requires the name of the prototype in the comment to +match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function +prototype can be exported (capitalized) or not. + +Adding a new syscall often just requires adding a new `//sys` function prototype +with the desired arguments and a capitalized name so it is exported. However, if +you want the interface to the syscall to be different, often one will make an +unexported `//sys` prototype, an then write a custom wrapper in +`syscall_${GOOS}.go`. + +### types files + +For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or +`types_${GOOS}.go` on the old system). This file includes standard C headers and +creates Go type aliases to the corresponding C types. The file is then fed +through godef to get the Go compatible definitions. Finally, the generated code +is fed though mkpost.go to format the code correctly and remove any hidden or +private identifiers. This cleaned-up code is written to +`ztypes_${GOOS}_${GOARCH}.go`. + +The hardest part about preparing this file is figuring out which headers to +include and which symbols need to be `#define`d to get the actual data +structures that pass through to the kernel system calls. Some C libraries +preset alternate versions for binary compatibility and translate them on the +way in and out of system calls, but there is almost always a `#define` that can +get the real ones. +See `types_darwin.go` and `linux/types.go` for examples. + +To add a new type, add in the necessary include statement at the top of the +file (if it is not already there) and add in a type alias line. Note that if +your type is significantly different on different architectures, you may need +some `#if/#elif` macros in your include statements. + +### mkerrors.sh + +This script is used to generate the system's various constants. This doesn't +just include the error numbers and error strings, but also the signal numbers +an a wide variety of miscellaneous constants. The constants come from the list +of include files in the `includes_${uname}` variable. A regex then picks out +the desired `#define` statements, and generates the corresponding Go constants. +The error numbers and strings are generated from `#include `, and the +signal numbers and strings are generated from `#include `. All of +these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program, +`_errors.c`, which prints out all the constants. + +To add a constant, add the header that includes it to the appropriate variable. +Then, edit the regex (if necessary) to match the desired constant. Avoid making +the regex too broad to avoid matching unintended constants. + + +## Generated files + +### `zerror_${GOOS}_${GOARCH}.go` + +A file containing all of the system's generated error numbers, error strings, +signal numbers, and constants. Generated by `mkerrors.sh` (see above). + +### `zsyscall_${GOOS}_${GOARCH}.go` + +A file containing all the generated syscalls for a specific GOOS and GOARCH. +Generated by `mksyscall.pl` (see above). + +### `zsysnum_${GOOS}_${GOARCH}.go` + +A list of numeric constants for all the syscall number of the specific GOOS +and GOARCH. Generated by mksysnum (see above). + +### `ztypes_${GOOS}_${GOARCH}.go` + +A file containing Go types for passing into (or returning from) syscalls. +Generated by godefs and the types file (see above). diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/affinity_linux.go new file mode 100644 index 00000000000..72afe3338cf --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/affinity_linux.go @@ -0,0 +1,124 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// CPU affinity functions + +package unix + +import ( + "unsafe" +) + +const cpuSetSize = _CPU_SETSIZE / _NCPUBITS + +// CPUSet represents a CPU affinity mask. +type CPUSet [cpuSetSize]cpuMask + +func schedAffinity(trap uintptr, pid int, set *CPUSet) error { + _, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set))) + if e != 0 { + return errnoErr(e) + } + return nil +} + +// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid. +// If pid is 0 the calling thread is used. +func SchedGetaffinity(pid int, set *CPUSet) error { + return schedAffinity(SYS_SCHED_GETAFFINITY, pid, set) +} + +// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid. +// If pid is 0 the calling thread is used. +func SchedSetaffinity(pid int, set *CPUSet) error { + return schedAffinity(SYS_SCHED_SETAFFINITY, pid, set) +} + +// Zero clears the set s, so that it contains no CPUs. +func (s *CPUSet) Zero() { + for i := range s { + s[i] = 0 + } +} + +func cpuBitsIndex(cpu int) int { + return cpu / _NCPUBITS +} + +func cpuBitsMask(cpu int) cpuMask { + return cpuMask(1 << (uint(cpu) % _NCPUBITS)) +} + +// Set adds cpu to the set s. +func (s *CPUSet) Set(cpu int) { + i := cpuBitsIndex(cpu) + if i < len(s) { + s[i] |= cpuBitsMask(cpu) + } +} + +// Clear removes cpu from the set s. +func (s *CPUSet) Clear(cpu int) { + i := cpuBitsIndex(cpu) + if i < len(s) { + s[i] &^= cpuBitsMask(cpu) + } +} + +// IsSet reports whether cpu is in the set s. +func (s *CPUSet) IsSet(cpu int) bool { + i := cpuBitsIndex(cpu) + if i < len(s) { + return s[i]&cpuBitsMask(cpu) != 0 + } + return false +} + +// Count returns the number of CPUs in the set s. +func (s *CPUSet) Count() int { + c := 0 + for _, b := range s { + c += onesCount64(uint64(b)) + } + return c +} + +// onesCount64 is a copy of Go 1.9's math/bits.OnesCount64. +// Once this package can require Go 1.9, we can delete this +// and update the caller to use bits.OnesCount64. +func onesCount64(x uint64) int { + const m0 = 0x5555555555555555 // 01010101 ... + const m1 = 0x3333333333333333 // 00110011 ... + const m2 = 0x0f0f0f0f0f0f0f0f // 00001111 ... + const m3 = 0x00ff00ff00ff00ff // etc. + const m4 = 0x0000ffff0000ffff + + // Implementation: Parallel summing of adjacent bits. + // See "Hacker's Delight", Chap. 5: Counting Bits. + // The following pattern shows the general approach: + // + // x = x>>1&(m0&m) + x&(m0&m) + // x = x>>2&(m1&m) + x&(m1&m) + // x = x>>4&(m2&m) + x&(m2&m) + // x = x>>8&(m3&m) + x&(m3&m) + // x = x>>16&(m4&m) + x&(m4&m) + // x = x>>32&(m5&m) + x&(m5&m) + // return int(x) + // + // Masking (& operations) can be left away when there's no + // danger that a field's sum will carry over into the next + // field: Since the result cannot be > 64, 8 bits is enough + // and we can ignore the masks for the shifts by 8 and up. + // Per "Hacker's Delight", the first line can be simplified + // more, but it saves at best one instruction, so we leave + // it alone for clarity. + const m = 1<<64 - 1 + x = x>>1&(m0&m) + x&(m0&m) + x = x>>2&(m1&m) + x&(m1&m) + x = (x>>4 + x) & (m2 & m) + x += x >> 8 + x += x >> 16 + x += x >> 32 + return int(x) & (1<<7 - 1) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/aliases.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/aliases.go new file mode 100644 index 00000000000..951fce4d0d9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/aliases.go @@ -0,0 +1,14 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris +// +build go1.9 + +package unix + +import "syscall" + +type Signal = syscall.Signal +type Errno = syscall.Errno +type SysProcAttr = syscall.SysProcAttr diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s new file mode 100644 index 00000000000..06f84b85558 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_aix_ppc64.s @@ -0,0 +1,17 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go +// + +TEXT ·syscall6(SB),NOSPLIT,$0-88 + JMP syscall·syscall6(SB) + +TEXT ·rawSyscall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_386.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_386.s new file mode 100644 index 00000000000..8a7278319e3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s new file mode 100644 index 00000000000..6321421f272 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_arm.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_arm.s new file mode 100644 index 00000000000..333242d5061 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_arm.s @@ -0,0 +1,30 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo +// +build arm,darwin + +#include "textflag.h" + +// +// System call support for ARM, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s new file mode 100644 index 00000000000..97e01743718 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s @@ -0,0 +1,30 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo +// +build arm64,darwin + +#include "textflag.h" + +// +// System call support for AMD64, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s new file mode 100644 index 00000000000..603dd5728c4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, DragonFly +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_386.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_386.s new file mode 100644 index 00000000000..c9a0a260156 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s new file mode 100644 index 00000000000..35172477c86 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s new file mode 100644 index 00000000000..9227c875bfe --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_386.s new file mode 100644 index 00000000000..448bebbb59a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_386.s @@ -0,0 +1,65 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for 386, Linux +// + +// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80 +// instead of the glibc-specific "CALL 0x10(GS)". +#define INVOKE_SYSCALL INT $0x80 + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + CALL runtime·entersyscall(SB) + MOVL trap+0(FP), AX // syscall entry + MOVL a1+4(FP), BX + MOVL a2+8(FP), CX + MOVL a3+12(FP), DX + MOVL $0, SI + MOVL $0, DI + INVOKE_SYSCALL + MOVL AX, r1+16(FP) + MOVL DX, r2+20(FP) + CALL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVL trap+0(FP), AX // syscall entry + MOVL a1+4(FP), BX + MOVL a2+8(FP), CX + MOVL a3+12(FP), DX + MOVL $0, SI + MOVL $0, DI + INVOKE_SYSCALL + MOVL AX, r1+16(FP) + MOVL DX, r2+20(FP) + RET + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 + JMP syscall·rawsocketcall(SB) + +TEXT ·seek(SB),NOSPLIT,$0-28 + JMP syscall·seek(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_amd64.s new file mode 100644 index 00000000000..c6468a95880 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_amd64.s @@ -0,0 +1,57 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for AMD64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + CALL runtime·entersyscall(SB) + MOVQ a1+8(FP), DI + MOVQ a2+16(FP), SI + MOVQ a3+24(FP), DX + MOVQ $0, R10 + MOVQ $0, R8 + MOVQ $0, R9 + MOVQ trap+0(FP), AX // syscall entry + SYSCALL + MOVQ AX, r1+32(FP) + MOVQ DX, r2+40(FP) + CALL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVQ a1+8(FP), DI + MOVQ a2+16(FP), SI + MOVQ a3+24(FP), DX + MOVQ $0, R10 + MOVQ $0, R8 + MOVQ $0, R9 + MOVQ trap+0(FP), AX // syscall entry + SYSCALL + MOVQ AX, r1+32(FP) + MOVQ DX, r2+40(FP) + RET + +TEXT ·gettimeofday(SB),NOSPLIT,$0-16 + JMP syscall·gettimeofday(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_arm.s new file mode 100644 index 00000000000..cf0f3575c13 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_arm.s @@ -0,0 +1,56 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for arm, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + BL runtime·entersyscall(SB) + MOVW trap+0(FP), R7 + MOVW a1+4(FP), R0 + MOVW a2+8(FP), R1 + MOVW a3+12(FP), R2 + MOVW $0, R3 + MOVW $0, R4 + MOVW $0, R5 + SWI $0 + MOVW R0, r1+16(FP) + MOVW $0, R0 + MOVW R0, r2+20(FP) + BL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVW trap+0(FP), R7 // syscall entry + MOVW a1+4(FP), R0 + MOVW a2+8(FP), R1 + MOVW a3+12(FP), R2 + SWI $0 + MOVW R0, r1+16(FP) + MOVW $0, R0 + MOVW R0, r2+20(FP) + RET + +TEXT ·seek(SB),NOSPLIT,$0-28 + B syscall·seek(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_arm64.s new file mode 100644 index 00000000000..afe6fdf6b11 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_arm64.s @@ -0,0 +1,52 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build arm64 +// +build !gccgo + +#include "textflag.h" + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R0 + MOVD a2+16(FP), R1 + MOVD a3+24(FP), R2 + MOVD $0, R3 + MOVD $0, R4 + MOVD $0, R5 + MOVD trap+0(FP), R8 // syscall entry + SVC + MOVD R0, r1+32(FP) // r1 + MOVD R1, r2+40(FP) // r2 + BL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R0 + MOVD a2+16(FP), R1 + MOVD a3+24(FP), R2 + MOVD $0, R3 + MOVD $0, R4 + MOVD $0, R5 + MOVD trap+0(FP), R8 // syscall entry + SVC + MOVD R0, r1+32(FP) + MOVD R1, r2+40(FP) + RET diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s new file mode 100644 index 00000000000..ab9d63831a7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s @@ -0,0 +1,56 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips64 mips64le +// +build !gccgo + +#include "textflag.h" + +// +// System calls for mips64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + JAL runtime·entersyscall(SB) + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R2 // syscall entry + SYSCALL + MOVV R2, r1+32(FP) + MOVV R3, r2+40(FP) + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R2 // syscall entry + SYSCALL + MOVV R2, r1+32(FP) + MOVV R3, r2+40(FP) + RET diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s new file mode 100644 index 00000000000..99e5399045c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s @@ -0,0 +1,54 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips mipsle +// +build !gccgo + +#include "textflag.h" + +// +// System calls for mips, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-24 + JAL runtime·entersyscall(SB) + MOVW a1+4(FP), R4 + MOVW a2+8(FP), R5 + MOVW a3+12(FP), R6 + MOVW R0, R7 + MOVW trap+0(FP), R2 // syscall entry + SYSCALL + MOVW R2, r1+16(FP) // r1 + MOVW R3, r2+20(FP) // r2 + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24 + MOVW a1+4(FP), R4 + MOVW a2+8(FP), R5 + MOVW a3+12(FP), R6 + MOVW trap+0(FP), R2 // syscall entry + SYSCALL + MOVW R2, r1+16(FP) + MOVW R3, r2+20(FP) + RET diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s new file mode 100644 index 00000000000..649e58714d9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s @@ -0,0 +1,56 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build ppc64 ppc64le +// +build !gccgo + +#include "textflag.h" + +// +// System calls for ppc64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R3 + MOVD a2+16(FP), R4 + MOVD a3+24(FP), R5 + MOVD R0, R6 + MOVD R0, R7 + MOVD R0, R8 + MOVD trap+0(FP), R9 // syscall entry + SYSCALL R9 + MOVD R3, r1+32(FP) + MOVD R4, r2+40(FP) + BL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R3 + MOVD a2+16(FP), R4 + MOVD a3+24(FP), R5 + MOVD R0, R6 + MOVD R0, R7 + MOVD R0, R8 + MOVD trap+0(FP), R9 // syscall entry + SYSCALL R9 + MOVD R3, r1+32(FP) + MOVD R4, r2+40(FP) + RET diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_s390x.s new file mode 100644 index 00000000000..a5a863c6bd7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_linux_s390x.s @@ -0,0 +1,56 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build s390x +// +build linux +// +build !gccgo + +#include "textflag.h" + +// +// System calls for s390x, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + BL runtime·entersyscall(SB) + MOVD a1+8(FP), R2 + MOVD a2+16(FP), R3 + MOVD a3+24(FP), R4 + MOVD $0, R5 + MOVD $0, R6 + MOVD $0, R7 + MOVD trap+0(FP), R1 // syscall entry + SYSCALL + MOVD R2, r1+32(FP) + MOVD R3, r2+40(FP) + BL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVD a1+8(FP), R2 + MOVD a2+16(FP), R3 + MOVD a3+24(FP), R4 + MOVD $0, R5 + MOVD $0, R6 + MOVD $0, R7 + MOVD trap+0(FP), R1 // syscall entry + SYSCALL + MOVD R2, r1+32(FP) + MOVD R3, r2+40(FP) + RET diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_386.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_386.s new file mode 100644 index 00000000000..48bdcd7632a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s new file mode 100644 index 00000000000..2ede05c72f0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s new file mode 100644 index 00000000000..e8928571c45 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_386.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_386.s new file mode 100644 index 00000000000..00576f3c835 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s new file mode 100644 index 00000000000..790ef77f86e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s new file mode 100644 index 00000000000..469bfa10039 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s new file mode 100644 index 00000000000..ded8260f3e4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s @@ -0,0 +1,17 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go +// + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) + +TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSysvicall6(SB) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/bluetooth_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/bluetooth_linux.go new file mode 100644 index 00000000000..6e322969706 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/bluetooth_linux.go @@ -0,0 +1,35 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Bluetooth sockets and messages + +package unix + +// Bluetooth Protocols +const ( + BTPROTO_L2CAP = 0 + BTPROTO_HCI = 1 + BTPROTO_SCO = 2 + BTPROTO_RFCOMM = 3 + BTPROTO_BNEP = 4 + BTPROTO_CMTP = 5 + BTPROTO_HIDP = 6 + BTPROTO_AVDTP = 7 +) + +const ( + HCI_CHANNEL_RAW = 0 + HCI_CHANNEL_USER = 1 + HCI_CHANNEL_MONITOR = 2 + HCI_CHANNEL_CONTROL = 3 +) + +// Socketoption Level +const ( + SOL_BLUETOOTH = 0x112 + SOL_HCI = 0x0 + SOL_L2CAP = 0x6 + SOL_RFCOMM = 0x12 + SOL_SCO = 0x11 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/cap_freebsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/cap_freebsd.go new file mode 100644 index 00000000000..df520487737 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/cap_freebsd.go @@ -0,0 +1,195 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd + +package unix + +import ( + "errors" + "fmt" +) + +// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c + +const ( + // This is the version of CapRights this package understands. See C implementation for parallels. + capRightsGoVersion = CAP_RIGHTS_VERSION_00 + capArSizeMin = CAP_RIGHTS_VERSION_00 + 2 + capArSizeMax = capRightsGoVersion + 2 +) + +var ( + bit2idx = []int{ + -1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, + 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + } +) + +func capidxbit(right uint64) int { + return int((right >> 57) & 0x1f) +} + +func rightToIndex(right uint64) (int, error) { + idx := capidxbit(right) + if idx < 0 || idx >= len(bit2idx) { + return -2, fmt.Errorf("index for right 0x%x out of range", right) + } + return bit2idx[idx], nil +} + +func caprver(right uint64) int { + return int(right >> 62) +} + +func capver(rights *CapRights) int { + return caprver(rights.Rights[0]) +} + +func caparsize(rights *CapRights) int { + return capver(rights) + 2 +} + +// CapRightsSet sets the permissions in setrights in rights. +func CapRightsSet(rights *CapRights, setrights []uint64) error { + // This is essentially a copy of cap_rights_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errors.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errors.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errors.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errors.New("index mismatch") + } + rights.Rights[i] |= right + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errors.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsClear clears the permissions in clearrights from rights. +func CapRightsClear(rights *CapRights, clearrights []uint64) error { + // This is essentially a copy of cap_rights_vclear() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errors.New("bad rights size") + } + + for _, right := range clearrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errors.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errors.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errors.New("index mismatch") + } + rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF) + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errors.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsIsSet checks whether all the permissions in setrights are present in rights. +func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) { + // This is essentially a copy of cap_rights_is_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return false, fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return false, errors.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return false, errors.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return false, err + } + if i >= n { + return false, errors.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return false, errors.New("index mismatch") + } + if (rights.Rights[i] & right) != right { + return false, nil + } + } + + return true, nil +} + +func capright(idx uint64, bit uint64) uint64 { + return ((1 << (57 + idx)) | bit) +} + +// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights. +// See man cap_rights_init(3) and rights(4). +func CapRightsInit(rights []uint64) (*CapRights, error) { + var r CapRights + r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0) + r.Rights[1] = capright(1, 0) + + err := CapRightsSet(&r, rights) + if err != nil { + return nil, err + } + return &r, nil +} + +// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights. +// The capability rights on fd can never be increased by CapRightsLimit. +// See man cap_rights_limit(2) and rights(4). +func CapRightsLimit(fd uintptr, rights *CapRights) error { + return capRightsLimit(int(fd), rights) +} + +// CapRightsGet returns a CapRights structure containing the operations permitted on fd. +// See man cap_rights_get(3) and rights(4). +func CapRightsGet(fd uintptr) (*CapRights, error) { + r, err := CapRightsInit(nil) + if err != nil { + return nil, err + } + err = capRightsGet(capRightsGoVersion, int(fd), r) + if err != nil { + return nil, err + } + return r, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/constants.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/constants.go new file mode 100644 index 00000000000..3a6ac648dd5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/constants.go @@ -0,0 +1,13 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +const ( + R_OK = 0x4 + W_OK = 0x2 + X_OK = 0x1 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_aix_ppc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_aix_ppc.go new file mode 100644 index 00000000000..5e5fb451044 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_aix_ppc.go @@ -0,0 +1,27 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix +// +build ppc + +// Functions to access/create device major and minor numbers matching the +// encoding used by AIX. + +package unix + +// Major returns the major component of a Linux device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 16) & 0xffff) +} + +// Minor returns the minor component of a Linux device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff) +} + +// Mkdev returns a Linux device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + return uint64(((major) << 16) | (minor)) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go new file mode 100644 index 00000000000..8b401244c41 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_aix_ppc64.go @@ -0,0 +1,29 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix +// +build ppc64 + +// Functions to access/create device major and minor numbers matching the +// encoding used AIX. + +package unix + +// Major returns the major component of a Linux device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x3fffffff00000000) >> 32) +} + +// Minor returns the minor component of a Linux device number. +func Minor(dev uint64) uint32 { + return uint32((dev & 0x00000000ffffffff) >> 0) +} + +// Mkdev returns a Linux device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + var DEVNO64 uint64 + DEVNO64 = 0x8000000000000000 + return ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_darwin.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_darwin.go new file mode 100644 index 00000000000..8d1dc0fa3d9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_darwin.go @@ -0,0 +1,24 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in Darwin's sys/types.h header. + +package unix + +// Major returns the major component of a Darwin device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 24) & 0xff) +} + +// Minor returns the minor component of a Darwin device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffffff) +} + +// Mkdev returns a Darwin device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 24) | uint64(minor) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_dragonfly.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_dragonfly.go new file mode 100644 index 00000000000..8502f202ce3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_dragonfly.go @@ -0,0 +1,30 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in Dragonfly's sys/types.h header. +// +// The information below is extracted and adapted from sys/types.h: +// +// Minor gives a cookie instead of an index since in order to avoid changing the +// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for +// devices that don't use them. + +package unix + +// Major returns the major component of a DragonFlyBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 8) & 0xff) +} + +// Minor returns the minor component of a DragonFlyBSD device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff00ff) +} + +// Mkdev returns a DragonFlyBSD device number generated from the given major and +// minor components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 8) | uint64(minor) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_freebsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_freebsd.go new file mode 100644 index 00000000000..eba3b4bd387 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_freebsd.go @@ -0,0 +1,30 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in FreeBSD's sys/types.h header. +// +// The information below is extracted and adapted from sys/types.h: +// +// Minor gives a cookie instead of an index since in order to avoid changing the +// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for +// devices that don't use them. + +package unix + +// Major returns the major component of a FreeBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 8) & 0xff) +} + +// Minor returns the minor component of a FreeBSD device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff00ff) +} + +// Mkdev returns a FreeBSD device number generated from the given major and +// minor components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 8) | uint64(minor) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_linux.go new file mode 100644 index 00000000000..d165d6f3085 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_linux.go @@ -0,0 +1,42 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used by the Linux kernel and glibc. +// +// The information below is extracted and adapted from bits/sysmacros.h in the +// glibc sources: +// +// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's +// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major +// number and m is a hex digit of the minor number. This is backward compatible +// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also +// backward compatible with the Linux kernel, which for some architectures uses +// 32-bit dev_t, encoded as mmmM MMmm. + +package unix + +// Major returns the major component of a Linux device number. +func Major(dev uint64) uint32 { + major := uint32((dev & 0x00000000000fff00) >> 8) + major |= uint32((dev & 0xfffff00000000000) >> 32) + return major +} + +// Minor returns the minor component of a Linux device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x00000000000000ff) >> 0) + minor |= uint32((dev & 0x00000ffffff00000) >> 12) + return minor +} + +// Mkdev returns a Linux device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) & 0x00000fff) << 8 + dev |= (uint64(major) & 0xfffff000) << 32 + dev |= (uint64(minor) & 0x000000ff) << 0 + dev |= (uint64(minor) & 0xffffff00) << 12 + return dev +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_netbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_netbsd.go new file mode 100644 index 00000000000..b4a203d0c54 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_netbsd.go @@ -0,0 +1,29 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in NetBSD's sys/types.h header. + +package unix + +// Major returns the major component of a NetBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x000fff00) >> 8) +} + +// Minor returns the minor component of a NetBSD device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xfff00000) >> 12) + return minor +} + +// Mkdev returns a NetBSD device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) << 8) & 0x000fff00 + dev |= (uint64(minor) << 12) & 0xfff00000 + dev |= (uint64(minor) << 0) & 0x000000ff + return dev +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_openbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_openbsd.go new file mode 100644 index 00000000000..f3430c42ff0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dev_openbsd.go @@ -0,0 +1,29 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in OpenBSD's sys/types.h header. + +package unix + +// Major returns the major component of an OpenBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x0000ff00) >> 8) +} + +// Minor returns the minor component of an OpenBSD device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xffff0000) >> 8) + return minor +} + +// Mkdev returns an OpenBSD device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) << 8) & 0x0000ff00 + dev |= (uint64(minor) << 8) & 0xffff0000 + dev |= (uint64(minor) << 0) & 0x000000ff + return dev +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dirent.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dirent.go new file mode 100644 index 00000000000..4407c505a36 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/dirent.go @@ -0,0 +1,17 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris + +package unix + +import "syscall" + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number of +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + return syscall.ParseDirent(buf, max, names) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/endian_big.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/endian_big.go new file mode 100644 index 00000000000..5e9269063f5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/endian_big.go @@ -0,0 +1,9 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// +build ppc64 s390x mips mips64 + +package unix + +const isBigEndian = true diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/endian_little.go new file mode 100644 index 00000000000..085df2d8dd7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/endian_little.go @@ -0,0 +1,9 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le + +package unix + +const isBigEndian = false diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/env_unix.go new file mode 100644 index 00000000000..84178b0a134 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/env_unix.go @@ -0,0 +1,31 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +// Unix environment variables. + +package unix + +import "syscall" + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} + +func Unsetenv(key string) error { + return syscall.Unsetenv(key) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_386.go new file mode 100644 index 00000000000..c56bc8b05e0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_386.go @@ -0,0 +1,227 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + IFF_SMART = 0x20 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8030720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8030720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go new file mode 100644 index 00000000000..3e9771175ab --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go @@ -0,0 +1,227 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + IFF_SMART = 0x20 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8040720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8040720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go new file mode 100644 index 00000000000..856dca32543 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go @@ -0,0 +1,226 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +const ( + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + + // missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go + IFF_SMART = 0x20 + IFT_FAITH = 0xf2 + IFT_IPXIP = 0xf9 + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8030720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8030720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/fcntl.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/fcntl.go new file mode 100644 index 00000000000..9379ba9cef7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/fcntl.go @@ -0,0 +1,32 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package unix + +import "unsafe" + +// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux +// systems by flock_linux_32bit.go to be SYS_FCNTL64. +var fcntl64Syscall uintptr = SYS_FCNTL + +// FcntlInt performs a fcntl syscall on fd with the provided command and argument. +func FcntlInt(fd uintptr, cmd, arg int) (int, error) { + valptr, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(arg)) + var err error + if errno != 0 { + err = errno + } + return int(valptr), err +} + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk))) + if errno == 0 { + return nil + } + return errno +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go new file mode 100644 index 00000000000..fc0e50e0372 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go @@ -0,0 +1,13 @@ +// +build linux,386 linux,arm linux,mips linux,mipsle + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +func init() { + // On 32-bit Linux systems, the fcntl syscall that matches Go's + // Flock_t type is SYS_FCNTL64, not SYS_FCNTL. + fcntl64Syscall = SYS_FCNTL64 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo.go new file mode 100644 index 00000000000..cd6f5a6133f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo.go @@ -0,0 +1,62 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo +// +build !aix + +package unix + +import "syscall" + +// We can't use the gc-syntax .s files for gccgo. On the plus side +// much of the functionality can be written directly in Go. + +//extern gccgoRealSyscallNoError +func realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr) + +//extern gccgoRealSyscall +func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr) + +func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) { + syscall.Entersyscall() + r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + syscall.Exitsyscall() + return r, 0 +} + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) { + r := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + return r, 0 +} + +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} + +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo_c.c new file mode 100644 index 00000000000..c44730c5e99 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo_c.c @@ -0,0 +1,39 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo +// +build !aix + +#include +#include +#include + +#define _STRINGIFY2_(x) #x +#define _STRINGIFY_(x) _STRINGIFY2_(x) +#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__) + +// Call syscall from C code because the gccgo support for calling from +// Go to C does not support varargs functions. + +struct ret { + uintptr_t r; + uintptr_t err; +}; + +struct 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) +{ + struct ret r; + + errno = 0; + r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); + r.err = errno; + return r; +} + +uintptr_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) +{ + return syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go new file mode 100644 index 00000000000..251a977a811 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go @@ -0,0 +1,20 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo,linux,amd64 + +package unix + +import "syscall" + +//extern gettimeofday +func realGettimeofday(*Timeval, *byte) int32 + +func gettimeofday(tv *Timeval) (err syscall.Errno) { + r := realGettimeofday(tv, nil) + if r < 0 { + return syscall.GetErrno() + } + return 0 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ioctl.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ioctl.go new file mode 100644 index 00000000000..f121a8d64b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ioctl.go @@ -0,0 +1,30 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import "runtime" + +// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. +// +// To change fd's window size, the req argument should be TIOCSWINSZ. +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + // TODO: if we get the chance, remove the req parameter and + // hardcode TIOCSWINSZ. + err := ioctlSetWinsize(fd, req, value) + runtime.KeepAlive(value) + return err +} + +// IoctlSetTermios performs an ioctl on fd with a *Termios. +// +// The req value will usually be TCSETA or TIOCSETA. +func IoctlSetTermios(fd int, req uint, value *Termios) error { + // TODO: if we get the chance, remove the req parameter. + err := ioctlSetTermios(fd, req, value) + runtime.KeepAlive(value) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mkall.sh new file mode 100755 index 00000000000..9b76ad66978 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mkall.sh @@ -0,0 +1,204 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This script runs or (given -n) prints suggested commands to generate files for +# the Architecture/OS specified by the GOARCH and GOOS environment variables. +# See README.md for more information about how the build system works. + +GOOSARCH="${GOOS}_${GOARCH}" + +# defaults +mksyscall="./mksyscall.pl" +mkerrors="./mkerrors.sh" +zerrors="zerrors_$GOOSARCH.go" +mksysctl="" +zsysctl="zsysctl_$GOOSARCH.go" +mksysnum= +mktypes= +run="sh" +cmd="" + +case "$1" in +-syscalls) + for i in zsyscall*go + do + # Run the command line that appears in the first line + # of the generated file to regenerate it. + sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i + rm _$i + done + exit 0 + ;; +-n) + run="cat" + cmd="echo" + shift +esac + +case "$#" in +0) + ;; +*) + echo 'usage: mkall.sh [-n]' 1>&2 + exit 2 +esac + +if [[ "$GOOS" = "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then + # Use then new build system + # Files generated through docker (use $cmd so you can Ctl-C the build or run) + $cmd docker build --tag generate:$GOOS $GOOS + $cmd docker run --interactive --tty --volume $(dirname "$(readlink -f "$0")"):/build generate:$GOOS + exit +fi + +GOOSARCH_in=syscall_$GOOSARCH.go +case "$GOOSARCH" in +_* | *_ | _) + echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 + exit 1 + ;; +aix_ppc) + mkerrors="$mkerrors -maix32" + mksyscall="./mksyscall_aix_ppc.pl -aix" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +aix_ppc64) + mkerrors="$mkerrors -maix64" + mksyscall="./mksyscall_aix_ppc64.pl -aix" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_amd64) + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_arm) + mkerrors="$mkerrors" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_arm64) + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +dragonfly_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -dragonfly" + mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_amd64) + mkerrors="$mkerrors -m64" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -arm" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +linux_sparc64) + GOOSARCH_in=syscall_linux_sparc64.go + unistd_h=/usr/include/sparc64-linux-gnu/asm/unistd.h + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_linux.pl $unistd_h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -netbsd" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -netbsd" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -netbsd -arm" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +openbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -openbsd" + mksysctl="./mksysctl_openbsd.pl" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -openbsd" + mksysctl="./mksysctl_openbsd.pl" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -openbsd -arm" + mksysctl="./mksysctl_openbsd.pl" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +solaris_amd64) + mksyscall="./mksyscall_solaris.pl" + mkerrors="$mkerrors -m64" + mksysnum= + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +*) + echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 + exit 1 + ;; +esac + +( + if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi + case "$GOOS" in + *) + syscall_goos="syscall_$GOOS.go" + case "$GOOS" in + darwin | dragonfly | freebsd | netbsd | openbsd) + syscall_goos="syscall_bsd.go $syscall_goos" + ;; + esac + if [ -n "$mksyscall" ]; then + if [ "$GOOSARCH" == "aix_ppc64" ]; then + # aix/ppc64 script generates files instead of writing to stdin. + echo "$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 " ; + else + echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; + fi + fi + esac + if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi + if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi + if [ -n "$mktypes" ]; then + echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; + fi +) | $run diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mkerrors.sh new file mode 100755 index 00000000000..73e179a89fb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -0,0 +1,656 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# Generate Go code listing errors and other #defined constant +# values (ENAMETOOLONG etc.), by asking the preprocessor +# about the definitions. + +unset LANG +export LC_ALL=C +export LC_CTYPE=C + +if test -z "$GOARCH" -o -z "$GOOS"; then + echo 1>&2 "GOARCH or GOOS not defined in environment" + exit 1 +fi + +# Check that we are using the new build system if we should +if [[ "$GOOS" = "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then + if [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then + echo 1>&2 "In the new build system, mkerrors should not be called directly." + echo 1>&2 "See README.md" + exit 1 + fi +fi + +if [[ "$GOOS" = "aix" ]]; then + CC=${CC:-gcc} +else + CC=${CC:-cc} +fi + +if [[ "$GOOS" = "solaris" ]]; then + # Assumes GNU versions of utilities in PATH. + export PATH=/usr/gnu/bin:$PATH +fi + +uname=$(uname) + +includes_AIX=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define AF_LOCAL AF_UNIX +' + +includes_Darwin=' +#define _DARWIN_C_SOURCE +#define KERNEL +#define _DARWIN_USE_64_BIT_INODE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_DragonFly=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_FreeBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __FreeBSD__ >= 10 +#define IFT_CARP 0xf8 // IFT_CARP is deprecated in FreeBSD 10 +#undef SIOCAIFADDR +#define SIOCAIFADDR _IOW(105, 26, struct oifaliasreq) // ifaliasreq contains if_data +#undef SIOCSIFPHYADDR +#define SIOCSIFPHYADDR _IOW(105, 70, struct oifaliasreq) // ifaliasreq contains if_data +#endif +' + +includes_Linux=' +#define _LARGEFILE_SOURCE +#define _LARGEFILE64_SOURCE +#ifndef __LP64__ +#define _FILE_OFFSET_BITS 64 +#endif +#define _GNU_SOURCE + +// is broken on powerpc64, as it fails to include definitions of +// these structures. We just include them copied from . +#if defined(__powerpc__) +struct sgttyb { + char sg_ispeed; + char sg_ospeed; + char sg_erase; + char sg_kill; + short sg_flags; +}; + +struct tchars { + char t_intrc; + char t_quitc; + char t_startc; + char t_stopc; + char t_eofc; + char t_brkc; +}; + +struct ltchars { + char t_suspc; + char t_dsuspc; + char t_rprntc; + char t_flushc; + char t_werasc; + char t_lnextc; +}; +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef MSG_FASTOPEN +#define MSG_FASTOPEN 0x20000000 +#endif + +#ifndef PTRACE_GETREGS +#define PTRACE_GETREGS 0xc +#endif + +#ifndef PTRACE_SETREGS +#define PTRACE_SETREGS 0xd +#endif + +#ifndef SOL_NETLINK +#define SOL_NETLINK 270 +#endif + +#ifdef SOL_BLUETOOTH +// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h +// but it is already in bluetooth_linux.go +#undef SOL_BLUETOOTH +#endif + +// Certain constants are missing from the fs/crypto UAPI +#define FS_KEY_DESC_PREFIX "fscrypt:" +#define FS_KEY_DESC_PREFIX_SIZE 8 +#define FS_MAX_KEY_SIZE 64 + +// XDP socket constants do not appear to be picked up otherwise. +// Copied from samples/bpf/xdpsock_user.c. +#ifndef SOL_XDP +#define SOL_XDP 283 +#endif + +#ifndef AF_XDP +#define AF_XDP 44 +#endif +' + +includes_NetBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Needed since refers to it... +#define schedppq 1 +' + +includes_OpenBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// We keep some constants not supported in OpenBSD 5.5 and beyond for +// the promise of compatibility. +#define EMUL_ENABLED 0x1 +#define EMUL_NATIVE 0x2 +#define IPV6_FAITH 0x1d +#define IPV6_OPTIONS 0x1 +#define IPV6_RTHDR_STRICT 0x1 +#define IPV6_SOCKOPT_RESERVED1 0x3 +#define SIOCGIFGENERIC 0xc020693a +#define SIOCSIFGENERIC 0x80206939 +#define WALTSIG 0x4 +' + +includes_SunOS=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + + +includes=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' +ccflags="$@" + +# Write go tool cgo -godefs input. +( + echo package unix + echo + echo '/*' + indirect="includes_$(uname)" + echo "${!indirect} $includes" + echo '*/' + echo 'import "C"' + echo 'import "syscall"' + echo + echo 'const (' + + # The gcc command line prints all the #defines + # it encounters while processing the input + echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | + awk ' + $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} + + $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers + $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} + $2 ~ /^(SCM_SRCRT)$/ {next} + $2 ~ /^(MAP_FAILED)$/ {next} + $2 ~ /^ELF_.*$/ {next}# contains ELF_ARCH, etc. + + $2 ~ /^EXTATTR_NAMESPACE_NAMES/ || + $2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next} + + $2 !~ /^ECCAPBITS/ && + $2 !~ /^ETH_/ && + $2 !~ /^EPROC_/ && + $2 !~ /^EQUIV_/ && + $2 !~ /^EXPR_/ && + $2 ~ /^E[A-Z0-9_]+$/ || + $2 ~ /^B[0-9_]+$/ || + $2 ~ /^(OLD|NEW)DEV$/ || + $2 == "BOTHER" || + $2 ~ /^CI?BAUD(EX)?$/ || + $2 == "IBSHIFT" || + $2 ~ /^V[A-Z0-9]+$/ || + $2 ~ /^CS[A-Z0-9]/ || + $2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ || + $2 ~ /^IGN/ || + $2 ~ /^IX(ON|ANY|OFF)$/ || + $2 ~ /^IN(LCR|PCK)$/ || + $2 !~ "X86_CR3_PCID_NOFLUSH" && + $2 ~ /(^FLU?SH)|(FLU?SH$)/ || + $2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ || + $2 == "BRKINT" || + $2 == "HUPCL" || + $2 == "PENDIN" || + $2 == "TOSTOP" || + $2 == "XCASE" || + $2 == "ALTWERASE" || + $2 == "NOKERNINFO" || + $2 ~ /^PAR/ || + $2 ~ /^SIG[^_]/ || + $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ || + $2 ~ /^O?XTABS$/ || + $2 ~ /^TC[IO](ON|OFF)$/ || + $2 ~ /^IN_/ || + $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ || + $2 ~ /^TP_STATUS_/ || + $2 ~ /^FALLOC_/ || + $2 == "ICMPV6_FILTER" || + $2 == "SOMAXCONN" || + $2 == "NAME_MAX" || + $2 == "IFNAMSIZ" || + $2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ || + $2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ || + $2 ~ /^HW_MACHINE$/ || + $2 ~ /^SYSCTL_VERS/ || + $2 !~ "MNT_BITS" && + $2 ~ /^(MS|MNT|UMOUNT)_/ || + $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || + $2 ~ /^(O|F|E?FD|NAME|S|PTRACE|PT)_/ || + $2 ~ /^KEXEC_/ || + $2 ~ /^LINUX_REBOOT_CMD_/ || + $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || + $2 ~ /^MODULE_INIT_/ || + $2 !~ "NLA_TYPE_MASK" && + $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ || + $2 ~ /^SIOC/ || + $2 ~ /^TIOC/ || + $2 ~ /^TCGET/ || + $2 ~ /^TCSET/ || + $2 ~ /^TC(FLSH|SBRKP?|XONC)$/ || + $2 !~ "RTF_BITS" && + $2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || + $2 ~ /^BIOC/ || + $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || + $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^CLONE_[A-Z_]+/ || + $2 !~ /^(BPF_TIMEVAL)$/ && + $2 ~ /^(BPF|DLT)_/ || + $2 ~ /^CLOCK_/ || + $2 ~ /^CAN_/ || + $2 ~ /^CAP_/ || + $2 ~ /^ALG_/ || + $2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE|IOC_(GET|SET)_ENCRYPTION)/ || + $2 ~ /^GRND_/ || + $2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ || + $2 ~ /^KEYCTL_/ || + $2 ~ /^PERF_EVENT_IOC_/ || + $2 ~ /^SECCOMP_MODE_/ || + $2 ~ /^SPLICE_/ || + $2 ~ /^SYNC_FILE_RANGE_/ || + $2 !~ /^AUDIT_RECORD_MAGIC/ && + $2 !~ /IOC_MAGIC/ && + $2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ || + $2 ~ /^(VM|VMADDR)_/ || + $2 ~ /^IOCTL_VM_SOCKETS_/ || + $2 ~ /^(TASKSTATS|TS)_/ || + $2 ~ /^CGROUPSTATS_/ || + $2 ~ /^GENL_/ || + $2 ~ /^STATX_/ || + $2 ~ /^RENAME/ || + $2 ~ /^UBI_IOC[A-Z]/ || + $2 ~ /^UTIME_/ || + $2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ || + $2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ || + $2 ~ /^FSOPT_/ || + $2 ~ /^WDIOC_/ || + $2 ~ /^NFN/ || + $2 ~ /^XDP_/ || + $2 ~ /^(HDIO|WIN|SMART)_/ || + $2 !~ "WMESGLEN" && + $2 ~ /^W[A-Z0-9]+$/ || + $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^__WCOREFLAG$/ {next} + $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} + + {next} + ' | sort + + echo ')' +) >_const.go + +# Pull out the error names for later. +errors=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | + sort +) + +# Pull out the signal names for later. +signals=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | + sort +) + +# Again, writing regexps to a file. +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | + sort >_error.grep +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | + sort >_signal.grep + +echo '// mkerrors.sh' "$@" +echo '// Code generated by the command above; see README.md. DO NOT EDIT.' +echo +echo "// +build ${GOARCH},${GOOS}" +echo +go tool cgo -godefs -- "$@" _const.go >_error.out +cat _error.out | grep -vf _error.grep | grep -vf _signal.grep +echo +echo '// Errors' +echo 'const (' +cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/' +echo ')' + +echo +echo '// Signals' +echo 'const (' +cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/' +echo ')' + +# Run C program to print error and syscall strings. +( + echo -E " +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below + +struct tuple { + int num; + const char *name; +}; + +struct tuple errors[] = { +" + for i in $errors + do + echo -E ' {'$i', "'$i'" },' + done + + echo -E " +}; + +struct tuple signals[] = { +" + for i in $signals + do + echo -E ' {'$i', "'$i'" },' + done + + # Use -E because on some systems bash builtin interprets \n itself. + echo -E ' +}; + +static int +tuplecmp(const void *a, const void *b) +{ + return ((struct tuple *)a)->num - ((struct tuple *)b)->num; +} + +int +main(void) +{ + int i, e; + char buf[1024], *p; + + printf("\n\n// Error table\n"); + printf("var errorList = [...]struct {\n"); + printf("\tnum syscall.Errno\n"); + printf("\tname string\n"); + printf("\tdesc string\n"); + printf("} {\n"); + qsort(errors, nelem(errors), sizeof errors[0], tuplecmp); + for(i=0; i 0 && errors[i-1].num == e) + continue; + strcpy(buf, strerror(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + printf("\t{ %d, \"%s\", \"%s\" },\n", e, errors[i].name, buf); + } + printf("}\n\n"); + + printf("\n\n// Signal table\n"); + printf("var signalList = [...]struct {\n"); + printf("\tnum syscall.Signal\n"); + printf("\tname string\n"); + printf("\tdesc string\n"); + printf("} {\n"); + qsort(signals, nelem(signals), sizeof signals[0], tuplecmp); + for(i=0; i 0 && signals[i-1].num == e) + continue; + strcpy(buf, strsignal(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + // cut trailing : number. + p = strrchr(buf, ":"[0]); + if(p) + *p = '\0'; + printf("\t{ %d, \"%s\", \"%s\" },\n", e, signals[i].name, buf); + } + printf("}\n\n"); + + return 0; +} + +' +) >_errors.c + +$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mksyscall.pl b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mksyscall.pl new file mode 100755 index 00000000000..1f6b926f8c6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/mksyscall.pl @@ -0,0 +1,341 @@ +#!/usr/bin/env perl +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This program reads a file containing function prototypes +# (like syscall_darwin.go) and generates system call bodies. +# The prototypes are marked by lines beginning with "//sys" +# and read like func declarations if //sys is replaced by func, but: +# * The parameter lists must give a name for each argument. +# This includes return parameters. +# * The parameter lists must give a type for each argument: +# the (x, y, z int) shorthand is not allowed. +# * If the return parameter is an error number, it must be named errno. + +# A line beginning with //sysnb is like //sys, except that the +# goroutine will not be suspended during the execution of the system +# call. This must only be used for system calls which can never +# block, as otherwise the system call could cause all goroutines to +# hang. + +use strict; + +my $cmdline = "mksyscall.pl " . join(' ', @ARGV); +my $errors = 0; +my $_32bit = ""; +my $plan9 = 0; +my $openbsd = 0; +my $netbsd = 0; +my $dragonfly = 0; +my $arm = 0; # 64-bit value should use (even, odd)-pair +my $tags = ""; # build tags + +if($ARGV[0] eq "-b32") { + $_32bit = "big-endian"; + shift; +} elsif($ARGV[0] eq "-l32") { + $_32bit = "little-endian"; + shift; +} +if($ARGV[0] eq "-plan9") { + $plan9 = 1; + shift; +} +if($ARGV[0] eq "-openbsd") { + $openbsd = 1; + shift; +} +if($ARGV[0] eq "-netbsd") { + $netbsd = 1; + shift; +} +if($ARGV[0] eq "-dragonfly") { + $dragonfly = 1; + shift; +} +if($ARGV[0] eq "-arm") { + $arm = 1; + shift; +} +if($ARGV[0] eq "-tags") { + shift; + $tags = $ARGV[0]; + shift; +} + +if($ARGV[0] =~ /^-/) { + print STDERR "usage: mksyscall.pl [-b32 | -l32] [-tags x,y] [file ...]\n"; + exit 1; +} + +# Check that we are using the new build system if we should +if($ENV{'GOOS'} eq "linux" && $ENV{'GOARCH'} ne "sparc64") { + if($ENV{'GOLANG_SYS_BUILD'} ne "docker") { + print STDERR "In the new build system, mksyscall should not be called directly.\n"; + print STDERR "See README.md\n"; + exit 1; + } +} + + +sub parseparamlist($) { + my ($list) = @_; + $list =~ s/^\s*//; + $list =~ s/\s*$//; + if($list eq "") { + return (); + } + return split(/\s*,\s*/, $list); +} + +sub parseparam($) { + my ($p) = @_; + if($p !~ /^(\S*) (\S*)$/) { + print STDERR "$ARGV:$.: malformed parameter: $p\n"; + $errors = 1; + return ("xx", "int"); + } + return ($1, $2); +} + +my $text = ""; +while(<>) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, errno error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($func, $in, $out, $sysname) = ($2, $3, $4, $5); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + + # Go function header. + my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : ""; + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, $errvar = BytePtrFromString($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, _ = BytePtrFromString($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass dummy pointer in that case. + # Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). + $text .= "\tvar _p$n unsafe.Pointer\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}"; + $text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero)\n\t}"; + $text .= "\n"; + push @args, "uintptr(_p$n)", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && ($openbsd || $netbsd)) { + push @args, "0"; + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $dragonfly) { + if ($func !~ /^extp(read|write)/i) { + push @args, "0"; + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $_32bit ne "") { + if(@args % 2 && $arm) { + # arm abi specifies 64-bit argument uses + # (even, odd) pair + push @args, "0" + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } + } else { + push @args, "uintptr($name)"; + } + } + + # Determine which form to use; pad args with zeros. + my $asm = "Syscall"; + if ($nonblock) { + if ($errvar eq "" && $ENV{'GOOS'} eq "linux") { + $asm = "RawSyscallNoError"; + } else { + $asm = "RawSyscall"; + } + } else { + if ($errvar eq "" && $ENV{'GOOS'} eq "linux") { + $asm = "SyscallNoError"; + } + } + if(@args <= 3) { + while(@args < 3) { + push @args, "0"; + } + } elsif(@args <= 6) { + $asm .= "6"; + while(@args < 6) { + push @args, "0"; + } + } elsif(@args <= 9) { + $asm .= "9"; + while(@args < 9) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # System call number. + if($sysname eq "") { + $sysname = "SYS_$func"; + $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar + $sysname =~ y/a-z/A-Z/; + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm($sysname, $args)"; + + # Assign return values. + my $body = ""; + my @ret = ("_", "_", "_"); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err" && !$plan9) { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } elsif($name eq "err" && $plan9) { + $ret[0] = "r0"; + $ret[2] = "e1"; + next; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1" || $plan9) { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + if ($errvar eq "" && $ENV{'GOOS'} eq "linux") { + # raw syscall without error on Linux, see golang.org/issue/22924 + $text .= "\t$ret[0], $ret[1] := $call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + } + $text .= $body; + + if ($plan9 && $ret[2] eq "e1") { + $text .= "\tif int32(r0) == -1 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } elsif ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = errnoErr(e1)\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n\n"; +} + +chomp $text; +chomp $text; + +if($errors) { + exit 1; +} + +print <) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + $package = $1 if !$package && /^package (\S+)$/; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, err error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($nb, $func, $in, $out, $modname, $sysname) = ($1, $2, $3, $4, $5, $6); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + $in = join(', ', @in); + $out = join(', ', @out); + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + + # Check if value return, err return available + my $errvar = ""; + my $retvar = ""; + my $rettype = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + } else { + $retvar = $name; + $rettype = $type; + } + } + + # System call name. + #if($func ne "fcntl") { + + if($sysname eq "") { + $sysname = "$func"; + } + + $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; + $sysname =~ y/A-Z/a-z/; # All libc functions are lowercase. + + my $C_rettype = ""; + if($rettype eq "unsafe.Pointer") { + $C_rettype = "uintptr_t"; + } elsif($rettype eq "uintptr") { + $C_rettype = "uintptr_t"; + } elsif($rettype =~ /^_/) { + $C_rettype = "uintptr_t"; + } elsif($rettype eq "int") { + $C_rettype = "int"; + } elsif($rettype eq "int32") { + $C_rettype = "int"; + } elsif($rettype eq "int64") { + $C_rettype = "long long"; + } elsif($rettype eq "uint32") { + $C_rettype = "unsigned int"; + } elsif($rettype eq "uint64") { + $C_rettype = "unsigned long long"; + } else { + $C_rettype = "int"; + } + if($sysname eq "exit") { + $C_rettype = "void"; + } + + # Change types to c + my @c_in = (); + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @c_in, "uintptr_t"; + } elsif($type eq "string") { + push @c_in, "uintptr_t"; + } elsif($type =~ /^\[\](.*)/) { + push @c_in, "uintptr_t", "size_t"; + } elsif($type eq "unsafe.Pointer") { + push @c_in, "uintptr_t"; + } elsif($type eq "uintptr") { + push @c_in, "uintptr_t"; + } elsif($type =~ /^_/) { + push @c_in, "uintptr_t"; + } elsif($type eq "int") { + push @c_in, "int"; + } elsif($type eq "int32") { + push @c_in, "int"; + } elsif($type eq "int64") { + push @c_in, "long long"; + } elsif($type eq "uint32") { + push @c_in, "unsigned int"; + } elsif($type eq "uint64") { + push @c_in, "unsigned long long"; + } else { + push @c_in, "int"; + } + } + + if ($func ne "fcntl" && $func ne "FcntlInt" && $func ne "readlen" && $func ne "writelen") { + # Imports of system calls from libc + $c_extern .= "$C_rettype $sysname"; + my $c_in = join(', ', @c_in); + $c_extern .= "($c_in);\n"; + } + + # So file name. + if($aix) { + if($modname eq "") { + $modname = "libc.a/shr_64.o"; + } else { + print STDERR "$func: only syscall using libc are available\n"; + $errors = 1; + next; + } + } + + my $strconvfunc = "C.CString"; + my $strconvtype = "*byte"; + + # Go function header. + if($out ne "") { + $out = " ($out)"; + } + if($text ne "") { + $text .= "\n" + } + + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out ; + + # Prepare arguments to call. + my @args = (); + my $n = 0; + my $arg_n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "C.uintptr_t(uintptr(unsafe.Pointer($name)))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\t_p$n := uintptr(unsafe.Pointer($strconvfunc($name)))\n"; + push @args, "C.uintptr_t(_p$n)"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\t_p$n := uintptr(unsafe.Pointer($strconvfunc($name)))\n"; + push @args, "C.uintptr_t(_p$n)"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass nil in that case. + $text .= "\tvar _p$n *$1\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = \&$name\[0]\n\t}\n"; + push @args, "C.uintptr_t(uintptr(unsafe.Pointer(_p$n)))"; + $n++; + $text .= "\tvar _p$n int\n"; + $text .= "\t_p$n = len($name)\n"; + push @args, "C.size_t(_p$n)"; + $n++; + } elsif($type eq "int64" && $_32bit ne "") { + if($_32bit eq "big-endian") { + push @args, "uintptr($name >> 32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name >> 32)"; + } + $n++; + } elsif($type eq "bool") { + $text .= "\tvar _p$n uint32\n"; + $text .= "\tif $name {\n\t\t_p$n = 1\n\t} else {\n\t\t_p$n = 0\n\t}\n"; + push @args, "_p$n"; + $n++; + } elsif($type =~ /^_/) { + push @args, "C.uintptr_t(uintptr($name))"; + } elsif($type eq "unsafe.Pointer") { + push @args, "C.uintptr_t(uintptr($name))"; + } elsif($type eq "int") { + if (($arg_n == 2) && (($func eq "readlen") || ($func eq "writelen"))) { + push @args, "C.size_t($name)"; + } elsif ($arg_n == 0 && $func eq "fcntl") { + push @args, "C.uintptr_t($name)"; + } elsif (($arg_n == 2) && (($func eq "fcntl") || ($func eq "FcntlInt"))) { + push @args, "C.uintptr_t($name)"; + } else { + push @args, "C.int($name)"; + } + } elsif($type eq "int32") { + push @args, "C.int($name)"; + } elsif($type eq "int64") { + push @args, "C.longlong($name)"; + } elsif($type eq "uint32") { + push @args, "C.uint($name)"; + } elsif($type eq "uint64") { + push @args, "C.ulonglong($name)"; + } elsif($type eq "uintptr") { + push @args, "C.uintptr_t($name)"; + } else { + push @args, "C.int($name)"; + } + $arg_n++; + } + my $nargs = @args; + + + # Determine which form to use; pad args with zeros. + if ($nonblock) { + } + + my $args = join(', ', @args); + my $call = ""; + if ($sysname eq "exit") { + if ($errvar ne "") { + $call .= "er :="; + } else { + $call .= ""; + } + } elsif ($errvar ne "") { + $call .= "r0,er :="; + } elsif ($retvar ne "") { + $call .= "r0,_ :="; + } else { + $call .= "" + } + $call .= "C.$sysname($args)"; + + # Assign return values. + my $body = ""; + my $failexpr = ""; + + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err") { + $reg = "e1"; + } else { + $reg = "r0"; + } + if($reg ne "e1" ) { + $body .= "\t$name = $type($reg)\n"; + } + } + + # verify return + if ($sysname ne "exit" && $errvar ne "") { + if ($C_rettype =~ /^uintptr/) { + $body .= "\tif \(uintptr\(r0\) ==\^uintptr\(0\) && er != nil\) {\n"; + $body .= "\t\t$errvar = er\n"; + $body .= "\t}\n"; + } else { + $body .= "\tif \(r0 ==-1 && er != nil\) {\n"; + $body .= "\t\t$errvar = er\n"; + $body .= "\t}\n"; + } + } elsif ($errvar ne "") { + $body .= "\tif \(er != nil\) {\n"; + $body .= "\t\t$errvar = er\n"; + $body .= "\t}\n"; + } + + $text .= "\t$call\n"; + $text .= $body; + + $text .= "\treturn\n"; + $text .= "}\n"; +} + +if($errors) { + exit 1; +} + +print <) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + $package = $1 if !$package && /^package (\S+)$/; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, err error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($nb, $func, $in, $out, $modname, $sysname) = ($1, $2, $3, $4, $5, $6); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + $in = join(', ', @in); + $out = join(', ', @out); + + if($sysname eq "") { + $sysname = "$func"; + } + + my $onlyCommon = 0; + if ($func eq "readlen" || $func eq "writelen" || $func eq "FcntlInt" || $func eq "FcntlFlock") { + # This function call another syscall which is already implemented. + # Therefore, the gc and gccgo part must not be generated. + $onlyCommon = 1 + } + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + + $textcommon .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + if (!$onlyCommon) { + $textgccgo .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + $textgc .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + } + + + # Check if value return, err return available + my $errvar = ""; + my $retvar = ""; + my $rettype = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + } else { + $retvar = $name; + $rettype = $type; + } + } + + + $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; + $sysname =~ y/A-Z/a-z/; # All libc functions are lowercase. + + # GCCGO Prototype return type + my $C_rettype = ""; + if($rettype eq "unsafe.Pointer") { + $C_rettype = "uintptr_t"; + } elsif($rettype eq "uintptr") { + $C_rettype = "uintptr_t"; + } elsif($rettype =~ /^_/) { + $C_rettype = "uintptr_t"; + } elsif($rettype eq "int") { + $C_rettype = "int"; + } elsif($rettype eq "int32") { + $C_rettype = "int"; + } elsif($rettype eq "int64") { + $C_rettype = "long long"; + } elsif($rettype eq "uint32") { + $C_rettype = "unsigned int"; + } elsif($rettype eq "uint64") { + $C_rettype = "unsigned long long"; + } else { + $C_rettype = "int"; + } + if($sysname eq "exit") { + $C_rettype = "void"; + } + + # GCCGO Prototype arguments type + my @c_in = (); + foreach my $i (0 .. $#in) { + my ($name, $type) = parseparam($in[$i]); + if($type =~ /^\*/) { + push @c_in, "uintptr_t"; + } elsif($type eq "string") { + push @c_in, "uintptr_t"; + } elsif($type =~ /^\[\](.*)/) { + push @c_in, "uintptr_t", "size_t"; + } elsif($type eq "unsafe.Pointer") { + push @c_in, "uintptr_t"; + } elsif($type eq "uintptr") { + push @c_in, "uintptr_t"; + } elsif($type =~ /^_/) { + push @c_in, "uintptr_t"; + } elsif($type eq "int") { + if (($i == 0 || $i == 2) && $func eq "fcntl"){ + # These fcntl arguments needs to be uintptr to be able to call FcntlInt and FcntlFlock + push @c_in, "uintptr_t"; + } else { + push @c_in, "int"; + } + } elsif($type eq "int32") { + push @c_in, "int"; + } elsif($type eq "int64") { + push @c_in, "long long"; + } elsif($type eq "uint32") { + push @c_in, "unsigned int"; + } elsif($type eq "uint64") { + push @c_in, "unsigned long long"; + } else { + push @c_in, "int"; + } + } + + if (!$onlyCommon){ + # GCCGO Prototype Generation + # Imports of system calls from libc + $c_extern .= "$C_rettype $sysname"; + my $c_in = join(', ', @c_in); + $c_extern .= "($c_in);\n"; + } + + # GC Library name + if($modname eq "") { + $modname = "libc.a/shr_64.o"; + } else { + print STDERR "$func: only syscall using libc are available\n"; + $errors = 1; + next; + } + my $sysvarname = "libc_${sysname}"; + + if (!$onlyCommon){ + # GC Runtime import of function to allow cross-platform builds. + $dynimports .= "//go:cgo_import_dynamic ${sysvarname} ${sysname} \"$modname\"\n"; + # GC Link symbol to proc address variable. + $linknames .= "//go:linkname ${sysvarname} ${sysvarname}\n"; + # GC Library proc address variable. + push @vars, $sysvarname; + } + + my $strconvfunc ="BytePtrFromString"; + my $strconvtype = "*byte"; + + # Go function header. + if($out ne "") { + $out = " ($out)"; + } + if($textcommon ne "") { + $textcommon .= "\n" + } + + $textcommon .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out ; + + # Prepare arguments to call. + my @argscommun = (); # Arguments in the commun part + my @argscall = (); # Arguments for call prototype + my @argsgc = (); # Arguments for gc call (with syscall6) + my @argsgccgo = (); # Arguments for gccgo call (with C.name_of_syscall) + my $n = 0; + my $arg_n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @argscommun, "uintptr(unsafe.Pointer($name))"; + push @argscall, "$name uintptr"; + push @argsgc, "$name"; + push @argsgccgo, "C.uintptr_t($name)"; + } elsif($type eq "string" && $errvar ne "") { + $textcommon .= "\tvar _p$n $strconvtype\n"; + $textcommon .= "\t_p$n, $errvar = $strconvfunc($name)\n"; + $textcommon .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + + push @argscommun, "uintptr(unsafe.Pointer(_p$n))"; + push @argscall, "_p$n uintptr "; + push @argsgc, "_p$n"; + push @argsgccgo, "C.uintptr_t(_p$n)"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $textcommon .= "\tvar _p$n $strconvtype\n"; + $textcommon .= "\t_p$n, $errvar = $strconvfunc($name)\n"; + $textcommon .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + + push @argscommun, "uintptr(unsafe.Pointer(_p$n))"; + push @argscall, "_p$n uintptr"; + push @argsgc, "_p$n"; + push @argsgccgo, "C.uintptr_t(_p$n)"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass nil in that case. + $textcommon .= "\tvar _p$n *$1\n"; + $textcommon .= "\tif len($name) > 0 {\n\t\t_p$n = \&$name\[0]\n\t}\n"; + push @argscommun, "uintptr(unsafe.Pointer(_p$n))", "len($name)"; + push @argscall, "_p$n uintptr", "_lenp$n int"; + push @argsgc, "_p$n", "uintptr(_lenp$n)"; + push @argsgccgo, "C.uintptr_t(_p$n)", "C.size_t(_lenp$n)"; + $n++; + } elsif($type eq "int64" && $_32bit ne "") { + print STDERR "$ARGV:$.: $func uses int64 with 32 bits mode. Case not yet implemented\n"; + # if($_32bit eq "big-endian") { + # push @args, "uintptr($name >> 32)", "uintptr($name)"; + # } else { + # push @args, "uintptr($name)", "uintptr($name >> 32)"; + # } + # $n++; + } elsif($type eq "bool") { + print STDERR "$ARGV:$.: $func uses bool. Case not yet implemented\n"; + # $text .= "\tvar _p$n uint32\n"; + # $text .= "\tif $name {\n\t\t_p$n = 1\n\t} else {\n\t\t_p$n = 0\n\t}\n"; + # push @args, "_p$n"; + # $n++; + } elsif($type =~ /^_/ ||$type eq "unsafe.Pointer") { + push @argscommun, "uintptr($name)"; + push @argscall, "$name uintptr"; + push @argsgc, "$name"; + push @argsgccgo, "C.uintptr_t($name)"; + } elsif($type eq "int") { + if (($arg_n == 0 || $arg_n == 2) && ($func eq "fcntl" || $func eq "FcntlInt" || $func eq "FcntlFlock")) { + # These fcntl arguments need to be uintptr to be able to call FcntlInt and FcntlFlock + push @argscommun, "uintptr($name)"; + push @argscall, "$name uintptr"; + push @argsgc, "$name"; + push @argsgccgo, "C.uintptr_t($name)"; + } else { + push @argscommun, "$name"; + push @argscall, "$name int"; + push @argsgc, "uintptr($name)"; + push @argsgccgo, "C.int($name)"; + } + } elsif($type eq "int32") { + push @argscommun, "$name"; + push @argscall, "$name int32"; + push @argsgc, "uintptr($name)"; + push @argsgccgo, "C.int($name)"; + } elsif($type eq "int64") { + push @argscommun, "$name"; + push @argscall, "$name int64"; + push @argsgc, "uintptr($name)"; + push @argsgccgo, "C.longlong($name)"; + } elsif($type eq "uint32") { + push @argscommun, "$name"; + push @argscall, "$name uint32"; + push @argsgc, "uintptr($name)"; + push @argsgccgo, "C.uint($name)"; + } elsif($type eq "uint64") { + push @argscommun, "$name"; + push @argscall, "$name uint64"; + push @argsgc, "uintptr($name)"; + push @argsgccgo, "C.ulonglong($name)"; + } elsif($type eq "uintptr") { + push @argscommun, "$name"; + push @argscall, "$name uintptr"; + push @argsgc, "$name"; + push @argsgccgo, "C.uintptr_t($name)"; + } else { + push @argscommun, "int($name)"; + push @argscall, "$name int"; + push @argsgc, "uintptr($name)"; + push @argsgccgo, "C.int($name)"; + } + $arg_n++; + } + my $nargs = @argsgc; + + # COMMUN function generation + my $argscommun = join(', ', @argscommun); + my $callcommun = "call$sysname($argscommun)"; + my @ret = ("_", "_"); + my $body = ""; + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err") { + $reg = "e1"; + $ret[1] = $reg; + $do_errno = 1; + } else { + $reg = "r0"; + $ret[0] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($reg ne "e1") { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_") { + $textcommon .= "\t$callcommun\n"; + } else { + $textcommon .= "\t$ret[0], $ret[1] := $callcommun\n"; + } + $textcommon .= $body; + + if ($do_errno) { + $textcommon .= "\tif e1 != 0 {\n"; + $textcommon .= "\t\terr = errnoErr(e1)\n"; + $textcommon .= "\t}\n"; + } + $textcommon .= "\treturn\n"; + $textcommon .= "}\n"; + + if ($onlyCommon){ + next + } + # CALL Prototype + my $callProto = sprintf "func call%s(%s) (r1 uintptr, e1 Errno) {\n", $sysname, join(', ', @argscall); + + # GC function generation + my $asm = "syscall6"; + if ($nonblock) { + $asm = "rawSyscall6"; + } + + if(@argsgc <= 6) { + while(@argsgc < 6) { + push @argsgc, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + my $argsgc = join(', ', @argsgc); + my $callgc = "$asm(uintptr(unsafe.Pointer(&$sysvarname)), $nargs, $argsgc)"; + + $textgc .= $callProto; + $textgc .= "\tr1, _, e1 = $callgc\n"; + $textgc .= "\treturn\n}\n"; + + # GCCGO function generation + my $argsgccgo = join(', ', @argsgccgo); + my $callgccgo = "C.$sysname($argsgccgo)"; + $textgccgo .= $callProto; + $textgccgo .= "\tr1 = uintptr($callgccgo)\n"; + $textgccgo .= "\te1 = syscall.GetErrno()\n"; + $textgccgo .= "\treturn\n}\n"; +} + +if($errors) { + exit 1; +} + +# Print zsyscall_aix_ppc64.go +open(my $fcommun, '>', 'zsyscall_aix_ppc64.go'); +my $tofcommun = <', 'zsyscall_aix_ppc64_gc.go'); +my $tofgc = <', 'zsyscall_aix_ppc64_gccgo.go'); +my $tofgccgo = <) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + $package = $1 if !$package && /^package (\S+)$/; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, err error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($nb, $func, $in, $out, $modname, $sysname) = ($1, $2, $3, $4, $5, $6); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + + # So file name. + if($modname eq "") { + $modname = "libc"; + } + + # System call name. + if($sysname eq "") { + $sysname = "$func"; + } + + # System call pointer variable name. + my $sysvarname = "proc$sysname"; + + my $strconvfunc = "BytePtrFromString"; + my $strconvtype = "*byte"; + + $sysname =~ y/A-Z/a-z/; # All libc functions are lowercase. + + # Runtime import of function to allow cross-platform builds. + $dynimports .= "//go:cgo_import_dynamic libc_${sysname} ${sysname} \"$modname.so\"\n"; + # Link symbol to proc address variable. + $linknames .= "//go:linkname ${sysvarname} libc_${sysname}\n"; + # Library proc address variable. + push @vars, $sysvarname; + + # Go function header. + $out = join(', ', @out); + if($out ne "") { + $out = " ($out)"; + } + if($text ne "") { + $text .= "\n" + } + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n $strconvtype\n"; + $text .= "\t_p$n, $errvar = $strconvfunc($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n $strconvtype\n"; + $text .= "\t_p$n, _ = $strconvfunc($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass nil in that case. + $text .= "\tvar _p$n *$1\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = \&$name\[0]\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && $_32bit ne "") { + if($_32bit eq "big-endian") { + push @args, "uintptr($name >> 32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name >> 32)"; + } + } elsif($type eq "bool") { + $text .= "\tvar _p$n uint32\n"; + $text .= "\tif $name {\n\t\t_p$n = 1\n\t} else {\n\t\t_p$n = 0\n\t}\n"; + push @args, "uintptr(_p$n)"; + $n++; + } else { + push @args, "uintptr($name)"; + } + } + my $nargs = @args; + + # Determine which form to use; pad args with zeros. + my $asm = "sysvicall6"; + if ($nonblock) { + $asm = "rawSysvicall6"; + } + if(@args <= 6) { + while(@args < 6) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm(uintptr(unsafe.Pointer(&$sysvarname)), $nargs, $args)"; + + # Assign return values. + my $body = ""; + my $failexpr = ""; + my @ret = ("_", "_", "_"); + my @pout= (); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err") { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1") { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + $text .= $body; + + if ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n"; +} + +if($errors) { + exit 1; +} + +print < "net.inet", + "net.inet.ipproto" => "net.inet", + "net.inet6.ipv6proto" => "net.inet6", + "net.inet6.ipv6" => "net.inet6.ip6", + "net.inet.icmpv6" => "net.inet6.icmp6", + "net.inet6.divert6" => "net.inet6.divert", + "net.inet6.tcp6" => "net.inet.tcp", + "net.inet6.udp6" => "net.inet.udp", + "mpls" => "net.mpls", + "swpenc" => "vm.swapencrypt" +); + +# Node mappings +my %node_map = ( + "net.inet.ip.ifq" => "net.ifq", + "net.inet.pfsync" => "net.pfsync", + "net.mpls.ifq" => "net.ifq" +); + +my $ctlname; +my %mib = (); +my %sysctl = (); +my $node; + +sub debug() { + print STDERR "$_[0]\n" if $debug; +} + +# Walk the MIB and build a sysctl name to OID mapping. +sub build_sysctl() { + my ($node, $name, $oid) = @_; + my %node = %{$node}; + my @oid = @{$oid}; + + foreach my $key (sort keys %node) { + my @node = @{$node{$key}}; + my $nodename = $name.($name ne '' ? '.' : '').$key; + my @nodeoid = (@oid, $node[0]); + if ($node[1] eq 'CTLTYPE_NODE') { + if (exists $node_map{$nodename}) { + $node = \%mib; + $ctlname = $node_map{$nodename}; + foreach my $part (split /\./, $ctlname) { + $node = \%{@{$$node{$part}}[2]}; + } + } else { + $node = $node[2]; + } + &build_sysctl($node, $nodename, \@nodeoid); + } elsif ($node[1] ne '') { + $sysctl{$nodename} = \@nodeoid; + } + } +} + +foreach my $ctl (@ctls) { + $ctls{$ctl} = $ctl; +} + +# Build MIB +foreach my $header (@headers) { + &debug("Processing $header..."); + open HEADER, "/usr/include/$header" || + print STDERR "Failed to open $header\n"; + while (
) { + if ($_ =~ /^#define\s+(CTL_NAMES)\s+{/ || + $_ =~ /^#define\s+(CTL_(.*)_NAMES)\s+{/ || + $_ =~ /^#define\s+((.*)CTL_NAMES)\s+{/) { + if ($1 eq 'CTL_NAMES') { + # Top level. + $node = \%mib; + } else { + # Node. + my $nodename = lc($2); + if ($header =~ /^netinet\//) { + $ctlname = "net.inet.$nodename"; + } elsif ($header =~ /^netinet6\//) { + $ctlname = "net.inet6.$nodename"; + } elsif ($header =~ /^net\//) { + $ctlname = "net.$nodename"; + } else { + $ctlname = "$nodename"; + $ctlname =~ s/^(fs|net|kern)_/$1\./; + } + if (exists $ctl_map{$ctlname}) { + $ctlname = $ctl_map{$ctlname}; + } + if (not exists $ctls{$ctlname}) { + &debug("Ignoring $ctlname..."); + next; + } + + # Walk down from the top of the MIB. + $node = \%mib; + foreach my $part (split /\./, $ctlname) { + if (not exists $$node{$part}) { + &debug("Missing node $part"); + $$node{$part} = [ 0, '', {} ]; + } + $node = \%{@{$$node{$part}}[2]}; + } + } + + # Populate current node with entries. + my $i = -1; + while (defined($_) && $_ !~ /^}/) { + $_ =
; + $i++ if $_ =~ /{.*}/; + next if $_ !~ /{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}/; + $$node{$1} = [ $i, $2, {} ]; + } + } + } + close HEADER; +} + +&build_sysctl(\%mib, "", []); + +print <){ + if(/^#define\s+SYS_(\w+)\s+([0-9]+)/){ + my $name = $1; + my $num = $2; + $name =~ y/a-z/A-Z/; + print " SYS_$name = $num;" + } +} + +print <){ + if(/^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$/){ + my $num = $1; + my $proto = $2; + my $name = "SYS_$3"; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print <){ + if(/^([0-9]+)\s+\S+\s+(?:NO)?STD\s+({ \S+\s+(\w+).*)$/){ + my $num = $1; + my $proto = $2; + my $name = "SYS_$3"; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print <){ + if($line =~ /^(.*)\\$/) { + # Handle continuation + $line = $1; + $_ =~ s/^\s+//; + $line .= $_; + } else { + # New line + $line = $_; + } + next if $line =~ /\\$/; + if($line =~ /^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$/) { + my $num = $1; + my $proto = $6; + my $compat = $8; + my $name = "$7_$9"; + + $name = "$7_$11" if $11 ne ''; + $name =~ y/a-z/A-Z/; + + if($compat eq '' || $compat eq '13' || $compat eq '30' || $compat eq '50') { + print " $name = $num; // $proto\n"; + } + } +} + +print <){ + if(/^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$/){ + my $num = $1; + my $proto = $3; + my $name = $4; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print < 6.2, pass execpromises to the syscall. + if maj > 6 || (maj == 6 && min > 2) { + exptr, err := syscall.BytePtrFromString(execpromises) + if err != nil { + return err + } + expr = unsafe.Pointer(exptr) + } + + _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0) + if e != 0 { + return e + } + + return nil +} + +// PledgePromises implements the pledge syscall. +// +// This changes the promises and leaves the execpromises untouched. +// +// For more information see pledge(2). +func PledgePromises(promises string) error { + maj, min, err := majmin() + if err != nil { + return err + } + + err = pledgeAvailable(maj, min, "") + if err != nil { + return err + } + + // This variable holds the execpromises and is always nil. + var expr unsafe.Pointer + + pptr, err := syscall.BytePtrFromString(promises) + if err != nil { + return err + } + + _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0) + if e != 0 { + return e + } + + return nil +} + +// PledgeExecpromises implements the pledge syscall. +// +// This changes the execpromises and leaves the promises untouched. +// +// For more information see pledge(2). +func PledgeExecpromises(execpromises string) error { + maj, min, err := majmin() + if err != nil { + return err + } + + err = pledgeAvailable(maj, min, execpromises) + if err != nil { + return err + } + + // This variable holds the promises and is always nil. + var pptr unsafe.Pointer + + exptr, err := syscall.BytePtrFromString(execpromises) + if err != nil { + return err + } + + _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0) + if e != 0 { + return e + } + + return nil +} + +// majmin returns major and minor version number for an OpenBSD system. +func majmin() (major int, minor int, err error) { + var v Utsname + err = Uname(&v) + if err != nil { + return + } + + major, err = strconv.Atoi(string(v.Release[0])) + if err != nil { + err = errors.New("cannot parse major version number returned by uname") + return + } + + minor, err = strconv.Atoi(string(v.Release[2])) + if err != nil { + err = errors.New("cannot parse minor version number returned by uname") + return + } + + return +} + +// pledgeAvailable checks for availability of the pledge(2) syscall +// based on the running OpenBSD version. +func pledgeAvailable(maj, min int, execpromises string) error { + // If OpenBSD <= 5.9, pledge is not available. + if (maj == 5 && min != 9) || maj < 5 { + return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min) + } + + // If OpenBSD <= 6.2 and execpromises is not empty, + // return an error - execpromises is not available before 6.3 + if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" { + return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min) + } + + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/openbsd_unveil.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/openbsd_unveil.go new file mode 100644 index 00000000000..aebc2dc5768 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/openbsd_unveil.go @@ -0,0 +1,44 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build openbsd + +package unix + +import ( + "syscall" + "unsafe" +) + +// Unveil implements the unveil syscall. +// For more information see unveil(2). +// Note that the special case of blocking further +// unveil calls is handled by UnveilBlock. +func Unveil(path string, flags string) error { + pathPtr, err := syscall.BytePtrFromString(path) + if err != nil { + return err + } + flagsPtr, err := syscall.BytePtrFromString(flags) + if err != nil { + return err + } + _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0) + if e != 0 { + return e + } + return nil +} + +// UnveilBlock blocks future unveil calls. +// For more information see unveil(2). +func UnveilBlock() error { + // Both pointers must be nil. + var pathUnsafe, flagsUnsafe unsafe.Pointer + _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0) + if e != 0 { + return e + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/pagesize_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/pagesize_unix.go new file mode 100644 index 00000000000..bc2f3629a7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/pagesize_unix.go @@ -0,0 +1,15 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +// For Unix, get the pagesize from the runtime. + +package unix + +import "syscall" + +func Getpagesize() int { + return syscall.Getpagesize() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/race.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/race.go new file mode 100644 index 00000000000..61712b51c96 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/race.go @@ -0,0 +1,30 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin,race linux,race freebsd,race + +package unix + +import ( + "runtime" + "unsafe" +) + +const raceenabled = true + +func raceAcquire(addr unsafe.Pointer) { + runtime.RaceAcquire(addr) +} + +func raceReleaseMerge(addr unsafe.Pointer) { + runtime.RaceReleaseMerge(addr) +} + +func raceReadRange(addr unsafe.Pointer, len int) { + runtime.RaceReadRange(addr, len) +} + +func raceWriteRange(addr unsafe.Pointer, len int) { + runtime.RaceWriteRange(addr, len) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/race0.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/race0.go new file mode 100644 index 00000000000..ad026678c7c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/race0.go @@ -0,0 +1,25 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly + +package unix + +import ( + "unsafe" +) + +const raceenabled = false + +func raceAcquire(addr unsafe.Pointer) { +} + +func raceReleaseMerge(addr unsafe.Pointer) { +} + +func raceReadRange(addr unsafe.Pointer, len int) { +} + +func raceWriteRange(addr unsafe.Pointer, len int) { +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/sockcmsg_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/sockcmsg_linux.go new file mode 100644 index 00000000000..6079eb4ac1e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/sockcmsg_linux.go @@ -0,0 +1,36 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Socket control messages + +package unix + +import "unsafe" + +// UnixCredentials encodes credentials into a socket control message +// for sending to another process. This can be used for +// authentication. +func UnixCredentials(ucred *Ucred) []byte { + b := make([]byte, CmsgSpace(SizeofUcred)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_CREDENTIALS + h.SetLen(CmsgLen(SizeofUcred)) + *((*Ucred)(cmsgData(h))) = *ucred + return b +} + +// ParseUnixCredentials decodes a socket control message that contains +// credentials in a Ucred structure. To receive such a message, the +// SO_PASSCRED option must be enabled on the socket. +func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_CREDENTIALS { + return nil, EINVAL + } + ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0])) + return &ucred, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/sockcmsg_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/sockcmsg_unix.go new file mode 100644 index 00000000000..9dd2f32f501 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/sockcmsg_unix.go @@ -0,0 +1,104 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +// Socket control messages + +package unix + +import "unsafe" + +// Round the length of a raw sockaddr up to align it properly. +func cmsgAlignOf(salen int) int { + salign := SizeofPtr + // NOTE: It seems like 64-bit Darwin, DragonFly BSD and + // Solaris kernels still require 32-bit aligned access to + // network subsystem. + if darwin64Bit || dragonfly64Bit || solaris64Bit { + salign = 4 + } + return (salen + salign - 1) & ^(salign - 1) +} + +// CmsgLen returns the value to store in the Len field of the Cmsghdr +// structure, taking into account any necessary alignment. +func CmsgLen(datalen int) int { + return cmsgAlignOf(SizeofCmsghdr) + datalen +} + +// CmsgSpace returns the number of bytes an ancillary element with +// payload of the passed data length occupies. +func CmsgSpace(datalen int) int { + return cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen) +} + +func cmsgData(h *Cmsghdr) unsafe.Pointer { + return unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr))) +} + +// SocketControlMessage represents a socket control message. +type SocketControlMessage struct { + Header Cmsghdr + Data []byte +} + +// ParseSocketControlMessage parses b as an array of socket control +// messages. +func ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) { + var msgs []SocketControlMessage + i := 0 + for i+CmsgLen(0) <= len(b) { + h, dbuf, err := socketControlMessageHeaderAndData(b[i:]) + if err != nil { + return nil, err + } + m := SocketControlMessage{Header: *h, Data: dbuf} + msgs = append(msgs, m) + i += cmsgAlignOf(int(h.Len)) + } + return msgs, nil +} + +func socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) { + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + if h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) { + return nil, nil, EINVAL + } + return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil +} + +// UnixRights encodes a set of open file descriptors into a socket +// control message for sending to another process. +func UnixRights(fds ...int) []byte { + datalen := len(fds) * 4 + b := make([]byte, CmsgSpace(datalen)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_RIGHTS + h.SetLen(CmsgLen(datalen)) + data := cmsgData(h) + for _, fd := range fds { + *(*int32)(data) = int32(fd) + data = unsafe.Pointer(uintptr(data) + 4) + } + return b +} + +// ParseUnixRights decodes a socket control message that contains an +// integer array of open file descriptors from another process. +func ParseUnixRights(m *SocketControlMessage) ([]int, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_RIGHTS { + return nil, EINVAL + } + fds := make([]int, len(m.Data)>>2) + for i, j := 0, 0; i < len(m.Data); i += 4 { + fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i]))) + j++ + } + return fds, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/str.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/str.go new file mode 100644 index 00000000000..17fb6986831 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/str.go @@ -0,0 +1,26 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + uitoa(uint(-val)) + } + return uitoa(uint(val)) +} + +func uitoa(val uint) string { + var buf [32]byte // big enough for int64 + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall.go new file mode 100644 index 00000000000..0d4b1d7a20e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall.go @@ -0,0 +1,54 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +// Package unix contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display OS-specific documentation for the current +// system. If you want godoc to display OS documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.Errno. +package unix // import "golang.org/x/sys/unix" + +import "strings" + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + if strings.IndexByte(s, 0) != -1 { + return nil, EINVAL + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mkunix.pl. +var _zero uintptr diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix.go new file mode 100644 index 00000000000..f8eac174285 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -0,0 +1,547 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix + +// Aix system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package unix + +import ( + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +//sys utimes(path string, times *[2]Timeval) (err error) +func Utimes(path string, tv []Timeval) error { + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) +func UtimesNano(path string, ts []Timespec) error { + if len(ts) != 2 { + return EINVAL + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n > len(sa.raw.Path) { + return nil, 0, EINVAL + } + if n == len(sa.raw.Path) && name[0] != '@' { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = uint8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +//sys getcwd(buf []byte) (err error) + +const ImplementsGetwd = true + +func Getwd() (ret string, err error) { + for len := uint64(4096); ; len *= 2 { + b := make([]byte, len) + err := getcwd(b) + if err == nil { + i := 0 + for b[i] != 0 { + i++ + } + return string(b[0:i]), nil + } + if err != ERANGE { + return "", err + } + } +} + +func Getcwd(buf []byte) (n int, err error) { + err = getcwd(buf) + if err == nil { + i := 0 + for buf[i] != 0 { + i++ + } + n = i + 1 + } + return +} + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 16 on BSD. + if n < 0 || n > 1000 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +/* + * Socket + */ + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if nfd == -1 { + return + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + // Recvmsg not implemented on AIX + sa := new(SockaddrUnix) + return -1, -1, -1, sa, ENOSYS +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + // SendmsgN not implemented on AIX + return -1, ENOSYS +} + +func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + + // Some versions of AIX have a bug in getsockname (see IV78655). + // We can't rely on sa.Len being set correctly. + n := SizeofSockaddrUnix - 3 // substract leading Family, Len, terminating NUL. + for i := 0; i < n; i++ { + if pp.Path[i] == 0 { + n = i + break + } + } + + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Gettimeofday(tv *Timeval) (err error) { + err = gettimeofday(tv, nil) + return +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +//sys getdirent(fd int, buf []byte) (n int, err error) +func ReadDirent(fd int, buf []byte) (n int, err error) { + return getdirent(fd, buf) +} + +//sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + var r Pid_t + err = ERESTART + // AIX wait4 may return with ERESTART errno, while the processus is still + // active. + for err == ERESTART { + r, err = wait4(Pid_t(pid), &status, options, rusage) + } + wpid = int(r) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +/* + * Wait + */ + +type WaitStatus uint32 + +func (w WaitStatus) Stopped() bool { return w&0x40 != 0 } +func (w WaitStatus) StopSignal() Signal { + if !w.Stopped() { + return -1 + } + return Signal(w>>8) & 0xFF +} + +func (w WaitStatus) Exited() bool { return w&0xFF == 0 } +func (w WaitStatus) ExitStatus() int { + if !w.Exited() { + return -1 + } + return int((w >> 8) & 0xFF) +} + +func (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 } +func (w WaitStatus) Signal() Signal { + if !w.Signaled() { + return -1 + } + return Signal(w>>16) & 0xFF +} + +func (w WaitStatus) Continued() bool { return w&0x01000000 != 0 } + +func (w WaitStatus) CoreDump() bool { return w&0x200 != 0 } + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func ioctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func ioctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX +// There is no way to create a custom fcntl and to keep //sys fcntl easily, +// Therefore, the programmer must call dup2 instead of fcntl in this case. + +// FcntlInt performs a fcntl syscall on fd with the provided command and argument. +//sys FcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +//sys FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +func Flock(fd int, how int) (err error) { + return syscall.Flock(fd, how) +} + +/* + * Direct access + */ + +//sys Acct(path string) (err error) +//sys Chdir(path string) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(oldfd int) (fd int, err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fdatasync(fd int) (err error) +//sys Fsync(fd int) (err error) +// readdir_r +//sysnb Getpgid(pid int) (pgid int, err error) + +//sys Getpgrp() (pid int) + +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Kill(pid int, sig Signal) (err error) +//sys Klogctl(typ int, buf []byte) (n int, err error) = syslog +//sys Mkdir(dirfd int, path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) = open64 +//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Setdomainname(p []byte) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tv *Timeval) (err error) + +//sys Setuid(uid int) (err error) +//sys Setgid(uid int) (err error) + +//sys Setpriority(which int, who int, prio int) (err error) +//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) +//sys Sync() +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sysnb Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//TODO umount +// //sys Unmount(target string, flags int) (err error) = umount +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys readlen(fd int, p *byte, np int) (n int, err error) = read +//sys writelen(fd int, p *byte, np int) (n int, err error) = write + +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = pread64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64 +//TODO Select +// //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys Truncate(path string, length int64) (err error) + +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +//sys munmap(addr uintptr, length uintptr) (err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, advice int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +//sys gettimeofday(tv *Timeval, tzp *Timezone) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go new file mode 100644 index 00000000000..c28af1f86eb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix_ppc.go @@ -0,0 +1,34 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix +// +build ppc + +package unix + +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64 +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64 + +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go new file mode 100644 index 00000000000..881cacc6cc5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go @@ -0,0 +1,34 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix +// +build ppc64 + +package unix + +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek + +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64 + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int64(sec), Usec: int32(usec)} +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_bsd.go new file mode 100644 index 00000000000..33c8b5f0db7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -0,0 +1,624 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +// BSD system call wrappers shared by *BSD based systems +// including OS X (Darwin) and FreeBSD. Like the other +// syscall_*.go files it is compiled as Go code but also +// used as input to mksyscall which parses the //sys +// lines and generates system call stubs. + +package unix + +import ( + "runtime" + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 16 on BSD. + if n < 0 || n > 1000 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // 64 bits should be enough. (32 bits isn't even on 386). Since the + // actual system call is getdirentries64, 64 is a good guess. + // TODO(rsc): Can we use a single global basep for all calls? + var base = (*uintptr)(unsafe.Pointer(new(uint64))) + return Getdirentries(fd, buf, base) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys Shutdown(s int, how int) (err error) + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet4 + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet6 + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) || n == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Index == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = sa.Len + sa.raw.Family = AF_LINK + sa.raw.Index = sa.Index + sa.raw.Type = sa.Type + sa.raw.Nlen = sa.Nlen + sa.raw.Alen = sa.Alen + sa.raw.Slen = sa.Slen + for i := 0; i < len(sa.raw.Data); i++ { + sa.raw.Data[i] = sa.Data[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil +} + +func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_LINK: + pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa)) + sa := new(SockaddrDatalink) + sa.Len = pp.Len + sa.Family = pp.Family + sa.Index = pp.Index + sa.Type = pp.Type + sa.Nlen = pp.Nlen + sa.Alen = pp.Alen + sa.Slen = pp.Slen + for i := 0; i < len(sa.Data); i++ { + sa.Data[i] = pp.Data[i] + } + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + if pp.Len < 2 || pp.Len > SizeofSockaddrUnix { + return nil, EINVAL + } + sa := new(SockaddrUnix) + + // Some BSDs include the trailing NUL in the length, whereas + // others do not. Work around this by subtracting the leading + // family and len. The path is then scanned to see if a NUL + // terminator still exists within the length. + n := int(pp.Len) - 2 // subtract leading Family, Len + for i := 0; i < n; i++ { + if pp.Path[i] == 0 { + // found early NUL; assume Len included the NUL + // or was overestimating. + n = i + break + } + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + if runtime.GOOS == "darwin" && len == 0 { + // Accepted socket has no address. + // This is likely due to a bug in xnu kernels, + // where instead of ECONNABORTED error socket + // is accepted, but has no address. + Close(nfd) + return 0, nil, ECONNABORTED + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + // TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be + // reported upstream. + if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 { + rsa.Addr.Family = AF_UNIX + rsa.Addr.Len = SizeofSockaddrUnix + } + return anyToSockaddr(fd, &rsa) +} + +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) + +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + return "", err + } + return string(buf[:vallen-1]), nil +} + +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) + +func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) { + var change, event unsafe.Pointer + if len(changes) > 0 { + change = unsafe.Pointer(&changes[0]) + } + if len(events) > 0 { + event = unsafe.Pointer(&events[0]) + } + return kevent(kq, change, len(changes), event, len(events), timeout) +} + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL + +// sysctlmib translates name to mib number and appends any additional args. +func sysctlmib(name string, args ...int) ([]_C_int, error) { + // Translate name to mib number. + mib, err := nametomib(name) + if err != nil { + return nil, err + } + + for _, a := range args { + mib = append(mib, _C_int(a)) + } + + return mib, nil +} + +func Sysctl(name string) (string, error) { + return SysctlArgs(name) +} + +func SysctlArgs(name string, args ...int) (string, error) { + buf, err := SysctlRaw(name, args...) + if err != nil { + return "", err + } + n := len(buf) + + // Throw away terminating NUL. + if n > 0 && buf[n-1] == '\x00' { + n-- + } + return string(buf[0:n]), nil +} + +func SysctlUint32(name string) (uint32, error) { + return SysctlUint32Args(name) +} + +func SysctlUint32Args(name string, args ...int) (uint32, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(4) + buf := make([]byte, 4) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 4 { + return 0, EIO + } + return *(*uint32)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlUint64(name string, args ...int) (uint64, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(8) + buf := make([]byte, 8) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 8 { + return 0, EIO + } + return *(*uint64)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlRaw(name string, args ...int) ([]byte, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Read into buffer of that size. + buf := make([]byte, n) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return nil, err + } + + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n], nil +} + +//sys utimes(path string, timeval *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(ts) != 2 { + return EINVAL + } + // Darwin setattrlist can set nanosecond timestamps + err := setattrlistTimes(path, ts, 0) + if err != ENOSYS { + return err + } + err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + // Not as efficient as it could be because Timespec and + // Timeval have different types in the different OSes + tv := [2]Timeval{ + NsecToTimeval(TimespecToNsec(ts[0])), + NsecToTimeval(TimespecToNsec(ts[1])), + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + err := setattrlistTimes(path, ts, flags) + if err != ENOSYS { + return err + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys futimes(fd int, timeval *[2]Timeval) (err error) + +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimes(fd, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +// TODO: wrap +// Acct(name nil-string) (err error) +// Gethostuuid(uuid *byte, timeout *Timespec) (err error) +// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, behav int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin.go new file mode 100644 index 00000000000..1aabc560d7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -0,0 +1,700 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Darwin system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "errors" + "syscall" + "unsafe" +) + +const ImplementsGetwd = true + +func Getwd() (string, error) { + buf := make([]byte, 2048) + attrs, err := getAttrList(".", attrList{CommonAttr: attrCmnFullpath}, buf, 0) + if err == nil && len(attrs) == 1 && len(attrs[0]) >= 2 { + wd := string(attrs[0]) + // Sanity check that it's an absolute path and ends + // in a null byte, which we then strip. + if wd[0] == '/' && wd[len(wd)-1] == 0 { + return wd[:len(wd)-1], nil + } + } + // If pkg/os/getwd.go gets ENOTSUP, it will fall back to the + // slow algorithm. + return "", ENOTSUP +} + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) +func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } +func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } + +const ( + attrBitMapCount = 5 + attrCmnFullpath = 0x08000000 +) + +type attrList struct { + bitmapCount uint16 + _ uint16 + CommonAttr uint32 + VolAttr uint32 + DirAttr uint32 + FileAttr uint32 + Forkattr uint32 +} + +func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (attrs [][]byte, err error) { + if len(attrBuf) < 4 { + return nil, errors.New("attrBuf too small") + } + attrList.bitmapCount = attrBitMapCount + + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return nil, err + } + + _, _, e1 := Syscall6( + SYS_GETATTRLIST, + uintptr(unsafe.Pointer(_p0)), + uintptr(unsafe.Pointer(&attrList)), + uintptr(unsafe.Pointer(&attrBuf[0])), + uintptr(len(attrBuf)), + uintptr(options), + 0, + ) + if e1 != 0 { + return nil, e1 + } + size := *(*uint32)(unsafe.Pointer(&attrBuf[0])) + + // dat is the section of attrBuf that contains valid data, + // without the 4 byte length header. All attribute offsets + // are relative to dat. + dat := attrBuf + if int(size) < len(attrBuf) { + dat = dat[:size] + } + dat = dat[4:] // remove length prefix + + for i := uint32(0); int(i) < len(dat); { + header := dat[i:] + if len(header) < 8 { + return attrs, errors.New("truncated attribute header") + } + datOff := *(*int32)(unsafe.Pointer(&header[0])) + attrLen := *(*uint32)(unsafe.Pointer(&header[4])) + if datOff < 0 || uint32(datOff)+attrLen > uint32(len(dat)) { + return attrs, errors.New("truncated results; attrBuf too small") + } + end := uint32(datOff) + attrLen + attrs = append(attrs, dat[datOff:end]) + i = end + if r := i % 4; r != 0 { + i += (4 - r) + } + } + return +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func xattrPointer(dest []byte) *byte { + // It's only when dest is set to NULL that the OS X implementations of + // getxattr() and listxattr() return the current sizes of the named attributes. + // An empty byte array is not sufficient. To maintain the same behaviour as the + // linux implementation, we wrap around the system calls and pass in NULL when + // dest is empty. + var destp *byte + if len(dest) > 0 { + destp = &dest[0] + } + return destp +} + +//sys getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + return getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0) +} + +func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + return getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW) +} + +//sys fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + return fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0) +} + +//sys setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + // The parameters for the OS X implementation vary slightly compared to the + // linux system call, specifically the position parameter: + // + // linux: + // int setxattr( + // const char *path, + // const char *name, + // const void *value, + // size_t size, + // int flags + // ); + // + // darwin: + // int setxattr( + // const char *path, + // const char *name, + // void *value, + // size_t size, + // u_int32_t position, + // int options + // ); + // + // position specifies the offset within the extended attribute. In the + // current implementation, only the resource fork extended attribute makes + // use of this argument. For all others, position is reserved. We simply + // default to setting it to zero. + return setxattr(path, attr, xattrPointer(data), len(data), 0, flags) +} + +func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { + return setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW) +} + +//sys fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) + +func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { + return fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0) +} + +//sys removexattr(path string, attr string, options int) (err error) + +func Removexattr(path string, attr string) (err error) { + // We wrap around and explicitly zero out the options provided to the OS X + // implementation of removexattr, we do so for interoperability with the + // linux variant. + return removexattr(path, attr, 0) +} + +func Lremovexattr(link string, attr string) (err error) { + return removexattr(link, attr, XATTR_NOFOLLOW) +} + +//sys fremovexattr(fd int, attr string, options int) (err error) + +func Fremovexattr(fd int, attr string) (err error) { + return fremovexattr(fd, attr, 0) +} + +//sys listxattr(path string, dest *byte, size int, options int) (sz int, err error) + +func Listxattr(path string, dest []byte) (sz int, err error) { + return listxattr(path, xattrPointer(dest), len(dest), 0) +} + +func Llistxattr(link string, dest []byte) (sz int, err error) { + return listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW) +} + +//sys flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + return flistxattr(fd, xattrPointer(dest), len(dest), 0) +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + _p0, err := BytePtrFromString(path) + if err != nil { + return err + } + + var attrList attrList + attrList.bitmapCount = ATTR_BIT_MAP_COUNT + attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME + + // order is mtime, atime: the opposite of Chtimes + attributes := [2]Timespec{times[1], times[0]} + options := 0 + if flags&AT_SYMLINK_NOFOLLOW != 0 { + options |= FSOPT_NOFOLLOW + } + _, _, e1 := Syscall6( + SYS_SETATTRLIST, + uintptr(unsafe.Pointer(_p0)), + uintptr(unsafe.Pointer(&attrList)), + uintptr(unsafe.Pointer(&attributes)), + uintptr(unsafe.Sizeof(attributes)), + uintptr(options), + 0, + ) + if e1 != 0 { + return e1 + } + return nil +} + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error { + // Darwin doesn't support SYS_UTIMENSAT + return ENOSYS +} + +/* + * Wrapped + */ + +//sys kill(pid int, signum int, posix int) (err error) + +func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func ioctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func ioctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exchangedata(path1 string, path2 string, options int) (err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64 +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Getuid() (uid int) +//sysnb Issetugid() (tainted bool) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sys Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setprivexec(flag int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// sendfile +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_386.go new file mode 100644 index 00000000000..b3ac109a2f4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_386.go @@ -0,0 +1,68 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = int32(sec) + tv.Usec = int32(usec) + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/386 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go new file mode 100644 index 00000000000..75219444a8d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go @@ -0,0 +1,68 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = sec + tv.Usec = usec + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/amd64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go new file mode 100644 index 00000000000..faae207a478 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go @@ -0,0 +1,66 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = int32(sec) + tv.Usec = int32(usec) + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/arm the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go new file mode 100644 index 00000000000..d6d96280142 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go @@ -0,0 +1,68 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = sec + tv.Usec = usec + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/arm64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_dragonfly.go new file mode 100644 index 00000000000..6401e3a29b2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -0,0 +1,524 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// DragonFly BSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import "unsafe" + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) +func Pread(fd int, p []byte, offset int64) (n int, err error) { + return extpread(fd, p, 0, offset) +} + +//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + return extpwrite(fd, p, 0, offset) +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func ioctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func ioctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error { + err := sysctl(mib, old, oldlen, nil, 0) + if err != nil { + // Utsname members on Dragonfly are only 32 bytes and + // the syscall returns ENOMEM in case the actual value + // is longer. + if err == ENOMEM { + err = nil + } + } + return err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil { + return err + } + uname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil { + return err + } + uname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctlUname(mib, &uname.Release[0], &n); err != nil { + return err + } + uname.Release[unsafe.Sizeof(uname.Release)-1] = 0 + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctlUname(mib, &uname.Version[0], &n); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctlUname(mib, &uname.Machine[0], &n); err != nil { + return err + } + uname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0 + + return nil +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + * TODO(jsing): Update this list for DragonFly. + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go new file mode 100644 index 00000000000..9babb31ea75 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go @@ -0,0 +1,52 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,dragonfly + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd.go new file mode 100644 index 00000000000..085a808cc63 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -0,0 +1,817 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// FreeBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "sync" + "unsafe" +) + +const ( + SYS_FSTAT_FREEBSD12 = 551 // { int fstat(int fd, _Out_ struct stat *sb); } + SYS_FSTATAT_FREEBSD12 = 552 // { int fstatat(int fd, _In_z_ char *path, \ + SYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \ + SYS_STATFS_FREEBSD12 = 555 // { int statfs(_In_z_ char *path, \ + SYS_FSTATFS_FREEBSD12 = 556 // { int fstatfs(int fd, \ + SYS_GETFSSTAT_FREEBSD12 = 557 // { int getfsstat( \ + SYS_MKNODAT_FREEBSD12 = 559 // { int mknodat(int fd, _In_z_ char *path, \ +) + +// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html. +var ( + osreldateOnce sync.Once + osreldate uint32 +) + +// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h +const _ino64First = 1200031 + +func supportsABI(ver uint32) bool { + osreldateOnce.Do(func() { osreldate, _ = SysctlUint32("kern.osreldate") }) + return osreldate >= ver +} + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func Pipe(p []int) (err error) { + return Pipe2(p, 0) +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) error { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err := pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return err +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, errno +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var ( + _p0 unsafe.Pointer + bufsize uintptr + oldBuf []statfs_freebsd11_t + needsConvert bool + ) + + if len(buf) > 0 { + if supportsABI(_ino64First) { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } else { + n := len(buf) + oldBuf = make([]statfs_freebsd11_t, n) + _p0 = unsafe.Pointer(&oldBuf[0]) + bufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n) + needsConvert = true + } + } + var sysno uintptr = SYS_GETFSSTAT + if supportsABI(_ino64First) { + sysno = SYS_GETFSSTAT_FREEBSD12 + } + r0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + if e1 == 0 && needsConvert { + for i := range oldBuf { + buf[i].convertFrom(&oldBuf[i]) + } + } + return +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func ioctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func ioctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + +func Stat(path string, st *Stat_t) (err error) { + var oldStat stat_freebsd11_t + if supportsABI(_ino64First) { + return fstatat_freebsd12(AT_FDCWD, path, st, 0) + } + err = stat(path, &oldStat) + if err != nil { + return err + } + + st.convertFrom(&oldStat) + return nil +} + +func Lstat(path string, st *Stat_t) (err error) { + var oldStat stat_freebsd11_t + if supportsABI(_ino64First) { + return fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW) + } + err = lstat(path, &oldStat) + if err != nil { + return err + } + + st.convertFrom(&oldStat) + return nil +} + +func Fstat(fd int, st *Stat_t) (err error) { + var oldStat stat_freebsd11_t + if supportsABI(_ino64First) { + return fstat_freebsd12(fd, st) + } + err = fstat(fd, &oldStat) + if err != nil { + return err + } + + st.convertFrom(&oldStat) + return nil +} + +func Fstatat(fd int, path string, st *Stat_t, flags int) (err error) { + var oldStat stat_freebsd11_t + if supportsABI(_ino64First) { + return fstatat_freebsd12(fd, path, st, flags) + } + err = fstatat(fd, path, &oldStat, flags) + if err != nil { + return err + } + + st.convertFrom(&oldStat) + return nil +} + +func Statfs(path string, st *Statfs_t) (err error) { + var oldStatfs statfs_freebsd11_t + if supportsABI(_ino64First) { + return statfs_freebsd12(path, st) + } + err = statfs(path, &oldStatfs) + if err != nil { + return err + } + + st.convertFrom(&oldStatfs) + return nil +} + +func Fstatfs(fd int, st *Statfs_t) (err error) { + var oldStatfs statfs_freebsd11_t + if supportsABI(_ino64First) { + return fstatfs_freebsd12(fd, st) + } + err = fstatfs(fd, &oldStatfs) + if err != nil { + return err + } + + st.convertFrom(&oldStatfs) + return nil +} + +func Getdents(fd int, buf []byte) (n int, err error) { + return Getdirentries(fd, buf, nil) +} + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + if supportsABI(_ino64First) { + return getdirentries_freebsd12(fd, buf, basep) + } + + // The old syscall entries are smaller than the new. Use 1/4 of the original + // buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c). + oldBufLen := roundup(len(buf)/4, _dirblksiz) + oldBuf := make([]byte, oldBufLen) + n, err = getdirentries(fd, oldBuf, basep) + if err == nil && n > 0 { + n = convertFromDirents11(buf, oldBuf[:n]) + } + return +} + +func Mknod(path string, mode uint32, dev uint64) (err error) { + var oldDev int + if supportsABI(_ino64First) { + return mknodat_freebsd12(AT_FDCWD, path, mode, dev) + } + oldDev = int(dev) + return mknod(path, mode, oldDev) +} + +func Mknodat(fd int, path string, mode uint32, dev uint64) (err error) { + var oldDev int + if supportsABI(_ino64First) { + return mknodat_freebsd12(fd, path, mode, dev) + } + oldDev = int(dev) + return mknodat(fd, path, mode, oldDev) +} + +// round x to the nearest multiple of y, larger or equal to x. +// +// from /usr/include/sys/param.h Macros for counting and rounding. +// #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) +func roundup(x, y int) int { + return ((x + y - 1) / y) * y +} + +func (s *Stat_t) convertFrom(old *stat_freebsd11_t) { + *s = Stat_t{ + Dev: uint64(old.Dev), + Ino: uint64(old.Ino), + Nlink: uint64(old.Nlink), + Mode: old.Mode, + Uid: old.Uid, + Gid: old.Gid, + Rdev: uint64(old.Rdev), + Atim: old.Atim, + Mtim: old.Mtim, + Ctim: old.Ctim, + Birthtim: old.Birthtim, + Size: old.Size, + Blocks: old.Blocks, + Blksize: old.Blksize, + Flags: old.Flags, + Gen: uint64(old.Gen), + } +} + +func (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) { + *s = Statfs_t{ + Version: _statfsVersion, + Type: old.Type, + Flags: old.Flags, + Bsize: old.Bsize, + Iosize: old.Iosize, + Blocks: old.Blocks, + Bfree: old.Bfree, + Bavail: old.Bavail, + Files: old.Files, + Ffree: old.Ffree, + Syncwrites: old.Syncwrites, + Asyncwrites: old.Asyncwrites, + Syncreads: old.Syncreads, + Asyncreads: old.Asyncreads, + // Spare + Namemax: old.Namemax, + Owner: old.Owner, + Fsid: old.Fsid, + // Charspare + // Fstypename + // Mntfromname + // Mntonname + } + + sl := old.Fstypename[:] + n := clen(*(*[]byte)(unsafe.Pointer(&sl))) + copy(s.Fstypename[:], old.Fstypename[:n]) + + sl = old.Mntfromname[:] + n = clen(*(*[]byte)(unsafe.Pointer(&sl))) + copy(s.Mntfromname[:], old.Mntfromname[:n]) + + sl = old.Mntonname[:] + n = clen(*(*[]byte)(unsafe.Pointer(&sl))) + copy(s.Mntonname[:], old.Mntonname[:n]) +} + +func convertFromDirents11(buf []byte, old []byte) int { + const ( + fixedSize = int(unsafe.Offsetof(Dirent{}.Name)) + oldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name)) + ) + + dstPos := 0 + srcPos := 0 + for dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) { + dstDirent := (*Dirent)(unsafe.Pointer(&buf[dstPos])) + srcDirent := (*dirent_freebsd11)(unsafe.Pointer(&old[srcPos])) + + reclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8) + if dstPos+reclen > len(buf) { + break + } + + dstDirent.Fileno = uint64(srcDirent.Fileno) + dstDirent.Off = 0 + dstDirent.Reclen = uint16(reclen) + dstDirent.Type = srcDirent.Type + dstDirent.Pad0 = 0 + dstDirent.Namlen = uint16(srcDirent.Namlen) + dstDirent.Pad1 = 0 + + copy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen]) + padding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen] + for i := range padding { + padding[i] = 0 + } + + dstPos += int(dstDirent.Reclen) + srcPos += int(srcDirent.Reclen) + } + + return dstPos +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys CapEnter() (err error) +//sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET +//sys capRightsLimit(fd int, rightsp *CapRights) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) +//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) +//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) +//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys fstat(fd int, stat *stat_freebsd11_t) (err error) +//sys fstat_freebsd12(fd int, stat *Stat_t) (err error) +//sys fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) +//sys fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) +//sys fstatfs(fd int, stat *statfs_freebsd11_t) (err error) +//sys fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys lstat(path string, stat *stat_freebsd11_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys mknod(path string, mode uint32, dev int) (err error) +//sys mknodat(fd int, path string, mode uint32, dev int) (err error) +//sys mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys stat(path string, stat *stat_freebsd11_t) (err error) +//sys statfs(path string, stat *statfs_freebsd11_t) (err error) +//sys statfs_freebsd12(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdents +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go new file mode 100644 index 00000000000..21e03958cdc --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go @@ -0,0 +1,52 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go new file mode 100644 index 00000000000..9c945a65796 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go @@ -0,0 +1,52 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go new file mode 100644 index 00000000000..5cd6243f2a0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go @@ -0,0 +1,52 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux.go new file mode 100644 index 00000000000..84aa8ea03fd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -0,0 +1,1628 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Linux system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package unix + +import ( + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +func Access(path string, mode uint32) (err error) { + return Faccessat(AT_FDCWD, path, mode, 0) +} + +func Chmod(path string, mode uint32) (err error) { + return Fchmodat(AT_FDCWD, path, mode, 0) +} + +func Chown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, 0) +} + +func Creat(path string, mode uint32) (fd int, err error) { + return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) +} + +//sys fchmodat(dirfd int, path string, mode uint32) (err error) + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior + // and check the flags. Otherwise the mode would be applied to the symlink + // destination which is not what the user expects. + if flags&^AT_SYMLINK_NOFOLLOW != 0 { + return EINVAL + } else if flags&AT_SYMLINK_NOFOLLOW != 0 { + return EOPNOTSUPP + } + return fchmodat(dirfd, path, mode) +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func ioctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func ioctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) + +func Link(oldpath string, newpath string) (err error) { + return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0) +} + +func Mkdir(path string, mode uint32) (err error) { + return Mkdirat(AT_FDCWD, path, mode) +} + +func Mknod(path string, mode uint32, dev int) (err error) { + return Mknodat(AT_FDCWD, path, mode, dev) +} + +func Open(path string, mode int, perm uint32) (fd int, err error) { + return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm) +} + +//sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + return openat(dirfd, path, flags|O_LARGEFILE, mode) +} + +//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) + +func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + if len(fds) == 0 { + return ppoll(nil, 0, timeout, sigmask) + } + return ppoll(&fds[0], len(fds), timeout, sigmask) +} + +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) + +func Readlink(path string, buf []byte) (n int, err error) { + return Readlinkat(AT_FDCWD, path, buf) +} + +func Rename(oldpath string, newpath string) (err error) { + return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath) +} + +func Rmdir(path string) error { + return Unlinkat(AT_FDCWD, path, AT_REMOVEDIR) +} + +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) + +func Symlink(oldpath string, newpath string) (err error) { + return Symlinkat(oldpath, AT_FDCWD, newpath) +} + +func Unlink(path string) error { + return Unlinkat(AT_FDCWD, path, 0) +} + +//sys Unlinkat(dirfd int, path string, flags int) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + var ts [2]Timespec + ts[0] = NsecToTimespec(TimevalToNsec(tv[0])) + ts[1] = NsecToTimespec(TimevalToNsec(tv[1])) + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(ts) != 2 { + return EINVAL + } + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + // If the utimensat syscall isn't available (utimensat was added to Linux + // in 2.6.22, Released, 8 July 2007) then fall back to utimes + var tv [2]Timeval + for i := 0; i < 2; i++ { + tv[i] = NsecToTimeval(TimespecToNsec(ts[i])) + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +func Futimesat(dirfd int, path string, tv []Timeval) error { + if tv == nil { + return futimesat(dirfd, path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func Futimes(fd int, tv []Timeval) (err error) { + // Believe it or not, this is the best we can do on Linux + // (and is what glibc does). + return Utimes("/proc/self/fd/"+itoa(fd), tv) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + n, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + // Getcwd returns the number of bytes written to buf, including the NUL. + if n < 1 || n > len(buf) || buf[n-1] != 0 { + return "", EINVAL + } + return string(buf[0 : n-1]), nil +} + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 1<<16 on Linux. + if n < 0 || n > 1<<20 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +type WaitStatus uint32 + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. At least that's the idea. +// There are various irregularities. For example, the +// "continued" status is 0xFFFF, distinguishing itself +// from stopped via the core dump bit. + +const ( + mask = 0x7F + core = 0x80 + exited = 0x00 + stopped = 0x7F + shift = 8 +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } + +func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } + +func (w WaitStatus) Continued() bool { return w == 0xFFFF } + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) ExitStatus() int { + if !w.Exited() { + return -1 + } + return int(w>>shift) & 0xFF +} + +func (w WaitStatus) Signal() syscall.Signal { + if !w.Signaled() { + return -1 + } + return syscall.Signal(w & mask) +} + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { + if w.StopSignal() != SIGTRAP { + return -1 + } + return int(w>>shift) >> 8 +} + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +func Mkfifo(path string, mode uint32) error { + return Mknod(path, mode|S_IFIFO, 0) +} + +func Mkfifoat(dirfd int, path string, mode uint32) error { + return Mknodat(dirfd, path, mode|S_IFIFO, 0) +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets. +type SockaddrLinklayer struct { + Protocol uint16 + Ifindex int + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]byte + raw RawSockaddrLinklayer +} + +func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_PACKET + sa.raw.Protocol = sa.Protocol + sa.raw.Ifindex = int32(sa.Ifindex) + sa.raw.Hatype = sa.Hatype + sa.raw.Pkttype = sa.Pkttype + sa.raw.Halen = sa.Halen + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil +} + +// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets. +type SockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 + raw RawSockaddrNetlink +} + +func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_NETLINK + sa.raw.Pad = sa.Pad + sa.raw.Pid = sa.Pid + sa.raw.Groups = sa.Groups + return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil +} + +// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets +// using the HCI protocol. +type SockaddrHCI struct { + Dev uint16 + Channel uint16 + raw RawSockaddrHCI +} + +func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + sa.raw.Dev = sa.Dev + sa.raw.Channel = sa.Channel + return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil +} + +// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets +// using the L2CAP protocol. +type SockaddrL2 struct { + PSM uint16 + CID uint16 + Addr [6]uint8 + AddrType uint8 + raw RawSockaddrL2 +} + +func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm)) + psm[0] = byte(sa.PSM) + psm[1] = byte(sa.PSM >> 8) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i] + } + cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid)) + cid[0] = byte(sa.CID) + cid[1] = byte(sa.CID >> 8) + sa.raw.Bdaddr_type = sa.AddrType + return unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil +} + +// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets +// using the RFCOMM protocol. +// +// Server example: +// +// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) +// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{ +// Channel: 1, +// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00 +// }) +// _ = Listen(fd, 1) +// nfd, sa, _ := Accept(fd) +// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd) +// Read(nfd, buf) +// +// Client example: +// +// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) +// _ = Connect(fd, &SockaddrRFCOMM{ +// Channel: 1, +// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11 +// }) +// Write(fd, []byte(`hello`)) +type SockaddrRFCOMM struct { + // Addr represents a bluetooth address, byte ordering is little-endian. + Addr [6]uint8 + + // Channel is a designated bluetooth channel, only 1-30 are available for use. + // Since Linux 2.6.7 and further zero value is the first available channel. + Channel uint8 + + raw RawSockaddrRFCOMM +} + +func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + sa.raw.Channel = sa.Channel + sa.raw.Bdaddr = sa.Addr + return unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil +} + +// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets. +// The RxID and TxID fields are used for transport protocol addressing in +// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with +// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning. +// +// The SockaddrCAN struct must be bound to the socket file descriptor +// using Bind before the CAN socket can be used. +// +// // Read one raw CAN frame +// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) +// addr := &SockaddrCAN{Ifindex: index} +// Bind(fd, addr) +// frame := make([]byte, 16) +// Read(fd, frame) +// +// The full SocketCAN documentation can be found in the linux kernel +// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt +type SockaddrCAN struct { + Ifindex int + RxID uint32 + TxID uint32 + raw RawSockaddrCAN +} + +func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_CAN + sa.raw.Ifindex = int32(sa.Ifindex) + rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i] = rx[i] + } + tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i+4] = tx[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil +} + +// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets. +// SockaddrALG enables userspace access to the Linux kernel's cryptography +// subsystem. The Type and Name fields specify which type of hash or cipher +// should be used with a given socket. +// +// To create a file descriptor that provides access to a hash or cipher, both +// Bind and Accept must be used. Once the setup process is complete, input +// data can be written to the socket, processed by the kernel, and then read +// back as hash output or ciphertext. +// +// Here is an example of using an AF_ALG socket with SHA1 hashing. +// The initial socket setup process is as follows: +// +// // Open a socket to perform SHA1 hashing. +// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) +// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} +// unix.Bind(fd, addr) +// // Note: unix.Accept does not work at this time; must invoke accept() +// // manually using unix.Syscall. +// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) +// +// Once a file descriptor has been returned from Accept, it may be used to +// perform SHA1 hashing. The descriptor is not safe for concurrent use, but +// may be re-used repeatedly with subsequent Write and Read operations. +// +// When hashing a small byte slice or string, a single Write and Read may +// be used: +// +// // Assume hashfd is already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash an input string and read the results. Each Write discards +// // previous hash state. Read always reads the current state. +// b := make([]byte, 20) +// for i := 0; i < 2; i++ { +// io.WriteString(hash, "Hello, world.") +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// } +// // Output: +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// +// For hashing larger byte slices, or byte streams such as those read from +// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update +// the hash digest instead of creating a new one for a given chunk and finalizing it. +// +// // Assume hashfd and addr are already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash the contents of a file. +// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") +// b := make([]byte, 4096) +// for { +// n, err := f.Read(b) +// if err == io.EOF { +// break +// } +// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) +// } +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 +// +// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. +type SockaddrALG struct { + Type string + Name string + Feature uint32 + Mask uint32 + raw RawSockaddrALG +} + +func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { + // Leave room for NUL byte terminator. + if len(sa.Type) > 13 { + return nil, 0, EINVAL + } + if len(sa.Name) > 63 { + return nil, 0, EINVAL + } + + sa.raw.Family = AF_ALG + sa.raw.Feat = sa.Feature + sa.raw.Mask = sa.Mask + + typ, err := ByteSliceFromString(sa.Type) + if err != nil { + return nil, 0, err + } + name, err := ByteSliceFromString(sa.Name) + if err != nil { + return nil, 0, err + } + + copy(sa.raw.Type[:], typ) + copy(sa.raw.Name[:], name) + + return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil +} + +// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. +// SockaddrVM provides access to Linux VM sockets: a mechanism that enables +// bidirectional communication between a hypervisor and its guest virtual +// machines. +type SockaddrVM struct { + // CID and Port specify a context ID and port address for a VM socket. + // Guests have a unique CID, and hosts may have a well-known CID of: + // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. + // - VMADDR_CID_HOST: refers to other processes on the host. + CID uint32 + Port uint32 + raw RawSockaddrVM +} + +func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_VSOCK + sa.raw.Port = sa.Port + sa.raw.Cid = sa.CID + + return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil +} + +type SockaddrXDP struct { + Flags uint16 + Ifindex uint32 + QueueID uint32 + SharedUmemFD uint32 + raw RawSockaddrXDP +} + +func (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_XDP + sa.raw.Flags = sa.Flags + sa.raw.Ifindex = sa.Ifindex + sa.raw.Queue_id = sa.QueueID + sa.raw.Shared_umem_fd = sa.SharedUmemFD + + return unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil +} + +func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_NETLINK: + pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa)) + sa := new(SockaddrNetlink) + sa.Family = pp.Family + sa.Pad = pp.Pad + sa.Pid = pp.Pid + sa.Groups = pp.Groups + return sa, nil + + case AF_PACKET: + pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa)) + sa := new(SockaddrLinklayer) + sa.Protocol = pp.Protocol + sa.Ifindex = int(pp.Ifindex) + sa.Hatype = pp.Hatype + sa.Pkttype = pp.Pkttype + sa.Halen = pp.Halen + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + if pp.Path[0] == 0 { + // "Abstract" Unix domain socket. + // Rewrite leading NUL as @ for textual display. + // (This is the standard convention.) + // Not friendly to overwrite in place, + // but the callers below don't care. + pp.Path[0] = '@' + } + + // Assume path ends at NUL. + // This is not technically the Linux semantics for + // abstract Unix domain sockets--they are supposed + // to be uninterpreted fixed-size binary blobs--but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_VSOCK: + pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) + sa := &SockaddrVM{ + CID: pp.Cid, + Port: pp.Port, + } + return sa, nil + case AF_BLUETOOTH: + proto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL) + if err != nil { + return nil, err + } + // only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections + switch proto { + case BTPROTO_L2CAP: + pp := (*RawSockaddrL2)(unsafe.Pointer(rsa)) + sa := &SockaddrL2{ + PSM: pp.Psm, + CID: pp.Cid, + Addr: pp.Bdaddr, + AddrType: pp.Bdaddr_type, + } + return sa, nil + case BTPROTO_RFCOMM: + pp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa)) + sa := &SockaddrRFCOMM{ + Channel: pp.Channel, + Addr: pp.Bdaddr, + } + return sa, nil + } + case AF_XDP: + pp := (*RawSockaddrXDP)(unsafe.Pointer(rsa)) + sa := &SockaddrXDP{ + Flags: pp.Flags, + Ifindex: pp.Ifindex, + QueueID: pp.Queue_id, + SharedUmemFD: pp.Shared_umem_fd, + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptUcred(fd, level, opt int) (*Ucred, error) { + var value Ucred + vallen := _Socklen(SizeofUcred) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { + var value TCPInfo + vallen := _Socklen(SizeofTCPInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + if err == ERANGE { + buf = make([]byte, vallen) + err = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + } + if err != nil { + return "", err + } + } + return string(buf[:vallen-1]), nil +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) + +// KeyctlInt calls keyctl commands in which each argument is an int. +// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK, +// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT, +// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT, +// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT. +//sys KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlBuffer calls keyctl commands in which the third and fourth +// arguments are a buffer and its length, respectively. +// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE. +//sys KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlString calls keyctl commands which return a string. +// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY. +func KeyctlString(cmd int, id int) (string, error) { + // We must loop as the string data may change in between the syscalls. + // We could allocate a large buffer here to reduce the chance that the + // syscall needs to be called twice; however, this is unnecessary as + // the performance loss is negligible. + var buffer []byte + for { + // Try to fill the buffer with data + length, err := KeyctlBuffer(cmd, id, buffer, 0) + if err != nil { + return "", err + } + + // Check if the data was written + if length <= len(buffer) { + // Exclude the null terminator + return string(buffer[:length-1]), nil + } + + // Make a bigger buffer if needed + buffer = make([]byte, length) + } +} + +// Keyctl commands with special signatures. + +// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html +func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) { + createInt := 0 + if create { + createInt = 1 + } + return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0) +} + +// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the +// key handle permission mask as described in the "keyctl setperm" section of +// http://man7.org/linux/man-pages/man1/keyctl.1.html. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html +func KeyctlSetperm(id int, perm uint32) error { + _, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0) + return err +} + +//sys keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL + +// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html +func KeyctlJoinSessionKeyring(name string) (ringid int, err error) { + return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name) +} + +//sys keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlSearch implements the KEYCTL_SEARCH command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_search.3.html +func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) { + return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid) +} + +//sys keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL + +// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This +// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice +// of Iovec (each of which represents a buffer) instead of a single buffer. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html +func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error { + return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid) +} + +//sys keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL + +// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command +// computes a Diffie-Hellman shared secret based on the provide params. The +// secret is written to the provided buffer and the returned size is the number +// of bytes written (returning an error if there is insufficient space in the +// buffer). If a nil buffer is passed in, this function returns the minimum +// buffer length needed to store the appropriate data. Note that this differs +// from KEYCTL_READ's behavior which always returns the requested payload size. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html +func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) { + return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer) +} + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = &p[0] + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + if len(p) == 0 { + var sockType int + sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) + if err != nil { + return + } + // receive at least one normal byte + if sockType != SOCK_DGRAM { + iov.Base = &dummy + iov.SetLen(1) + } + } + msg.Control = &oob[0] + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + var err error + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(ptr) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = &p[0] + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + if len(p) == 0 { + var sockType int + sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) + if err != nil { + return 0, err + } + // send at least one normal byte + if sockType != SOCK_DGRAM { + iov.Base = &dummy + iov.SetLen(1) + } + } + msg.Control = &oob[0] + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +// BindToDevice binds the socket associated with fd to device. +func BindToDevice(fd int, device string) (err error) { + return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device) +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) + +func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { + // The peek requests are machine-size oriented, so we wrap it + // to retrieve arbitrary-length data. + + // The ptrace syscall differs from glibc's ptrace. + // Peeks returns the word in *data, not as the return value. + + var buf [SizeofPtr]byte + + // Leading edge. PEEKTEXT/PEEKDATA don't require aligned + // access (PEEKUSER warns that it might), but if we don't + // align our reads, we might straddle an unmapped page + // boundary and not get the bytes leading up to the page + // boundary. + n := 0 + if addr%SizeofPtr != 0 { + err = ptrace(req, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(out, buf[addr%SizeofPtr:]) + out = out[n:] + } + + // Remainder. + for len(out) > 0 { + // We use an internal buffer to guarantee alignment. + // It's not documented if this is necessary, but we're paranoid. + err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copied := copy(out, buf[0:]) + n += copied + out = out[copied:] + } + + return n, nil +} + +func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out) +} + +func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKDATA, pid, addr, out) +} + +func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKUSR, pid, addr, out) +} + +func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { + // As for ptracePeek, we need to align our accesses to deal + // with the possibility of straddling an invalid page. + + // Leading edge. + n := 0 + if addr%SizeofPtr != 0 { + var buf [SizeofPtr]byte + err = ptrace(peekReq, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(buf[addr%SizeofPtr:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word) + if err != nil { + return 0, err + } + data = data[n:] + } + + // Interior. + for len(data) > SizeofPtr { + word := *((*uintptr)(unsafe.Pointer(&data[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += SizeofPtr + data = data[SizeofPtr:] + } + + // Trailing edge. + if len(data) > 0 { + var buf [SizeofPtr]byte + err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copy(buf[0:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += len(data) + } + + return n, nil +} + +func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data) +} + +func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data) +} + +func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data) +} + +func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +func PtraceSetOptions(pid int, options int) (err error) { + return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options)) +} + +func PtraceGetEventMsg(pid int) (msg uint, err error) { + var data _C_long + err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data))) + msg = uint(data) + return +} + +func PtraceCont(pid int, signal int) (err error) { + return ptrace(PTRACE_CONT, pid, 0, uintptr(signal)) +} + +func PtraceSyscall(pid int, signal int) (err error) { + return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal)) +} + +func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) } + +func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) } + +func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) } + +//sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) + +func Reboot(cmd int) (err error) { + return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + return Getdents(fd, buf) +} + +//sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) + +func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { + // Certain file systems get rather angry and EINVAL if you give + // them an empty string of data, rather than NULL. + if data == "" { + return mount(source, target, fstype, flags, nil) + } + datap, err := BytePtrFromString(data) + if err != nil { + return err + } + return mount(source, target, fstype, flags, datap) +} + +// Sendto +// Recvfrom +// Socketpair + +/* + * Direct access + */ +//sys Acct(path string) (err error) +//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) +//sys Adjtimex(buf *Timex) (state int, err error) +//sys Chdir(path string) (err error) +//sys Chroot(path string) (err error) +//sys ClockGetres(clockid int32, res *Timespec) (err error) +//sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys Close(fd int) (err error) +//sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys DeleteModule(name string, flags int) (err error) +//sys Dup(oldfd int) (fd int, err error) +//sys Dup3(oldfd int, newfd int, flags int) (err error) +//sysnb EpollCreate1(flag int) (fd int, err error) +//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) +//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 +//sys Exit(code int) = SYS_EXIT_GROUP +//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys Fdatasync(fd int) (err error) +//sys Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) +//sys FinitModule(fd int, params string, flags int) (err error) +//sys Flistxattr(fd int, dest []byte) (sz int, err error) +//sys Flock(fd int, how int) (err error) +//sys Fremovexattr(fd int, attr string) (err error) +//sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) +//sys Fsync(fd int) (err error) +//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 +//sysnb Getpgid(pid int) (pgid int, err error) + +func Getpgrp() (pid int) { + pid, _ = Getpgid(0) + return +} + +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sys Getrandom(buf []byte, flags int) (n int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettid() (tid int) +//sys Getxattr(path string, attr string, dest []byte) (sz int, err error) +//sys InitModule(moduleImage []byte, params string) (err error) +//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) +//sysnb InotifyInit1(flags int) (fd int, err error) +//sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) +//sysnb Kill(pid int, sig syscall.Signal) (err error) +//sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG +//sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) +//sys Listxattr(path string, dest []byte) (sz int, err error) +//sys Llistxattr(path string, dest []byte) (sz int, err error) +//sys Lremovexattr(path string, attr string) (err error) +//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error) +//sys MemfdCreate(name string, flags int) (fd int, err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) +//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT +//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 +//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) +//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 +//sys read(fd int, p []byte) (n int, err error) +//sys Removexattr(path string, attr string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) +//sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) +//sys Setdomainname(p []byte) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tv *Timeval) (err error) +//sys Setns(fd int, nstype int) (err error) + +// issue 1435. +// On linux Setuid and Setgid only affects the current thread, not the process. +// This does not match what most callers expect so we must return an error +// here rather than letting the caller think that the call succeeded. + +func Setuid(uid int) (err error) { + return EOPNOTSUPP +} + +func Setgid(uid int) (err error) { + return EOPNOTSUPP +} + +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setxattr(path string, attr string, data []byte, flags int) (err error) +//sys Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) +//sys Sync() +//sys Syncfs(fd int) (err error) +//sysnb Sysinfo(info *Sysinfo_t) (err error) +//sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) +//sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sysnb Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2 +//sys Unshare(flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys exitThread(code int) (err error) = SYS_EXIT +//sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ +//sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE + +// mmap varies by architecture; see syscall_linux_*.go. +//sys munmap(addr uintptr, length uintptr) (err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, advice int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) + +// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, +// using the specified flags. +func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { + n, _, errno := Syscall6( + SYS_VMSPLICE, + uintptr(fd), + uintptr(unsafe.Pointer(&iovs[0])), + uintptr(len(iovs)), + uintptr(flags), + 0, + 0, + ) + if errno != 0 { + return 0, syscall.Errno(errno) + } + + return int(n), nil +} + +//sys faccessat(dirfd int, path string, mode uint32) (err error) + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + if flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 { + return EINVAL + } + + // The Linux kernel faccessat system call does not take any flags. + // The glibc faccessat implements the flags itself; see + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD + // Because people naturally expect syscall.Faccessat to act + // like C faccessat, we do the same. + + if flags == 0 { + return faccessat(dirfd, path, mode) + } + + var st Stat_t + if err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil { + return err + } + + mode &= 7 + if mode == 0 { + return nil + } + + var uid int + if flags&AT_EACCESS != 0 { + uid = Geteuid() + } else { + uid = Getuid() + } + + if uid == 0 { + if mode&1 == 0 { + // Root can read and write any file. + return nil + } + if st.Mode&0111 != 0 { + // Root can execute any file that anybody can execute. + return nil + } + return EACCES + } + + var fmode uint32 + if uint32(uid) == st.Uid { + fmode = (st.Mode >> 6) & 7 + } else { + var gid int + if flags&AT_EACCESS != 0 { + gid = Getegid() + } else { + gid = Getgid() + } + + if uint32(gid) == st.Gid { + fmode = (st.Mode >> 3) & 7 + } else { + fmode = st.Mode & 7 + } + } + + if fmode&mode == mode { + return nil + } + + return EACCES +} + +/* + * Unimplemented + */ +// AfsSyscall +// Alarm +// ArchPrctl +// Brk +// Capget +// Capset +// ClockNanosleep +// ClockSettime +// Clone +// EpollCtlOld +// EpollPwait +// EpollWaitOld +// Execve +// Fork +// Futex +// GetKernelSyms +// GetMempolicy +// GetRobustList +// GetThreadArea +// Getitimer +// Getpmsg +// IoCancel +// IoDestroy +// IoGetevents +// IoSetup +// IoSubmit +// IoprioGet +// IoprioSet +// KexecLoad +// LookupDcookie +// Mbind +// MigratePages +// Mincore +// ModifyLdt +// Mount +// MovePages +// MqGetsetattr +// MqNotify +// MqOpen +// MqTimedreceive +// MqTimedsend +// MqUnlink +// Mremap +// Msgctl +// Msgget +// Msgrcv +// Msgsnd +// Nfsservctl +// Personality +// Pselect6 +// Ptrace +// Putpmsg +// Quotactl +// Readahead +// Readv +// RemapFilePages +// RestartSyscall +// RtSigaction +// RtSigpending +// RtSigprocmask +// RtSigqueueinfo +// RtSigreturn +// RtSigsuspend +// RtSigtimedwait +// SchedGetPriorityMax +// SchedGetPriorityMin +// SchedGetparam +// SchedGetscheduler +// SchedRrGetInterval +// SchedSetparam +// SchedYield +// Security +// Semctl +// Semget +// Semop +// Semtimedop +// SetMempolicy +// SetRobustList +// SetThreadArea +// SetTidAddress +// Shmat +// Shmctl +// Shmdt +// Shmget +// Sigaltstack +// Signalfd +// Swapoff +// Swapon +// Sysfs +// TimerCreate +// TimerDelete +// TimerGetoverrun +// TimerGettime +// TimerSettime +// Timerfd +// Tkill (obsolete) +// Tuxcall +// Umount2 +// Uselib +// Utimensat +// Vfork +// Vhangup +// Vserver +// Waitid +// _Sysctl diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_386.go new file mode 100644 index 00000000000..74bc098ce19 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -0,0 +1,385 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) +// so that go vet can check that they are correct. + +// +build 386,linux + +package unix + +import ( + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// 64-bit file system and 32-bit uid calls +// (386 default is 32-bit file system and 16-bit uid). +//sys Dup2(oldfd int, newfd int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32 +//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) +//sys Pause() (err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +// On x86 Linux, all the socket calls go through an extra indirection, +// I think because the 5-register system call interface can't handle +// the 6-argument calls like sendto and recvfrom. Instead the +// arguments to the underlying system call are the number below +// and a pointer to an array of uintptr. We hide the pointer in the +// socketcall assembly to avoid allocation on every system call. + +const ( + // see linux/net.h + _SOCKET = 1 + _BIND = 2 + _CONNECT = 3 + _LISTEN = 4 + _ACCEPT = 5 + _GETSOCKNAME = 6 + _GETPEERNAME = 7 + _SOCKETPAIR = 8 + _SEND = 9 + _RECV = 10 + _SENDTO = 11 + _RECVFROM = 12 + _SHUTDOWN = 13 + _SETSOCKOPT = 14 + _GETSOCKOPT = 15 + _SENDMSG = 16 + _RECVMSG = 17 + _ACCEPT4 = 18 + _RECVMMSG = 19 + _SENDMMSG = 20 +) + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e != 0 { + err = e + } + return +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socket(domain int, typ int, proto int) (fd int, err error) { + fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e != 0 { + err = e + } + return +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0) + if e != 0 { + err = e + } + return +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + if e != 0 { + err = e + } + return +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + _, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e != 0 { + err = e + } + return +} + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Listen(s int, n int) (err error) { + _, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Shutdown(s, how int) (err error) { + _, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go new file mode 100644 index 00000000000..5247d9f9082 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -0,0 +1,175 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,linux + +package unix + +//sys Dup2(oldfd int, newfd int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + // Use fstatat, because Android's seccomp policy blocks stat. + return Fstatat(AT_FDCWD, path, stat, 0) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) + +func Gettimeofday(tv *Timeval) (err error) { + errno := gettimeofday(tv) + if errno != 0 { + return errno + } + return nil +} + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + errno := gettimeofday(&tv) + if errno != 0 { + return 0, errno + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Rip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go new file mode 100644 index 00000000000..21a4946ba55 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go @@ -0,0 +1,13 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,linux +// +build !gccgo + +package unix + +import "syscall" + +//go:noescape +func gettimeofday(tv *Timeval) (err syscall.Errno) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_arm.go new file mode 100644 index 00000000000..3ec7a9329d2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -0,0 +1,259 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +// 64-bit file system and 32-bit uid calls +// (16-bit uid calls are not always supported in newer kernels) +//sys Dup2(oldfd int, newfd int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Pause() (err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32 +//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys Ustat(dev int, ubuf *Ustat_t) (err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +//sys utimes(path string, times *[2]Timeval) (err error) + +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go new file mode 100644 index 00000000000..fa5a9a6f649 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -0,0 +1,209 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64,linux + +package unix + +import "unsafe" + +func EpollCreate(size int) (fd int, err error) { + if size <= 0 { + return -1, EINVAL + } + return EpollCreate1(0) +} + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + return ENOSYS +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(dirfd, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func utimes(path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Pc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func InotifyInit() (fd int, err error) { + return InotifyInit1(0) +} + +func Dup2(oldfd int, newfd int) (err error) { + return Dup3(oldfd, newfd, 0) +} + +func Pause() error { + _, err := ppoll(nil, 0, nil, nil) + return err +} + +func Poll(fds []PollFd, timeout int) (n int, err error) { + var ts *Timespec + if timeout >= 0 { + ts = new(Timespec) + *ts = NsecToTimespec(int64(timeout) * 1e6) + } + if len(fds) == 0 { + return ppoll(nil, 0, ts, nil) + } + return ppoll(&fds[0], len(fds), ts, nil) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gc.go new file mode 100644 index 00000000000..c26e6ec2314 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gc.go @@ -0,0 +1,14 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux,!gccgo + +package unix + +// SyscallNoError may be used instead of Syscall for syscalls that don't fail. +func SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) + +// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't +// fail. +func RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go new file mode 100644 index 00000000000..070bd38994e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go @@ -0,0 +1,16 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux,!gccgo,386 + +package unix + +import "syscall" + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) +func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go new file mode 100644 index 00000000000..308eb7aecfa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go @@ -0,0 +1,30 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux,gccgo,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +func seek(fd int, offset int64, whence int) (int64, syscall.Errno) { + var newoffset int64 + offsetLow := uint32(offset & 0xffffffff) + offsetHigh := uint32((offset >> 32) & 0xffffffff) + _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) + return newoffset, err +} + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) { + fd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0) + return int(fd), err +} + +func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) { + fd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0) + return int(fd), err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go new file mode 100644 index 00000000000..aa7fc9e1997 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go @@ -0,0 +1,20 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux,gccgo,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +func seek(fd int, offset int64, whence int) (int64, syscall.Errno) { + var newoffset int64 + offsetLow := uint32(offset & 0xffffffff) + offsetHigh := uint32((offset >> 32) & 0xffffffff) + _, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0) + return newoffset, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go new file mode 100644 index 00000000000..ad991031c7e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -0,0 +1,214 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips64 mips64le + +package unix + +//sys Dup2(oldfd int, newfd int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +type stat_t struct { + Dev uint32 + Pad0 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad1 [3]uint32 + Size int64 + Atime uint32 + Atime_nsec uint32 + Mtime uint32 + Mtime_nsec uint32 + Ctime uint32 + Ctime_nsec uint32 + Blksize uint32 + Pad2 uint32 + Blocks int64 +} + +//sys fstat(fd int, st *stat_t) (err error) +//sys lstat(path string, st *stat_t) (err error) +//sys stat(path string, st *stat_t) (err error) + +func Fstat(fd int, s *Stat_t) (err error) { + st := &stat_t{} + err = fstat(fd, st) + fillStat_t(s, st) + return +} + +func Lstat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = lstat(path, st) + fillStat_t(s, st) + return +} + +func Stat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = stat(path, st) + fillStat_t(s, st) + return +} + +func fillStat_t(s *Stat_t, st *stat_t) { + s.Dev = st.Dev + s.Ino = st.Ino + s.Mode = st.Mode + s.Nlink = st.Nlink + s.Uid = st.Uid + s.Gid = st.Gid + s.Rdev = st.Rdev + s.Size = st.Size + s.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)} + s.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)} + s.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)} + s.Blksize = st.Blksize + s.Blocks = st.Blocks +} + +func (r *PtraceRegs) PC() uint64 { return r.Epc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go new file mode 100644 index 00000000000..99e0e999a1a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -0,0 +1,233 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips mipsle + +package unix + +import ( + "syscall" + "unsafe" +) + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +//sys Dup2(oldfd int, newfd int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 + +//sys Pause() (err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = errnoErr(e) + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + p, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = errnoErr(e) + } + return +} + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + _, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0) + if e != 0 { + err = errnoErr(e) + } + return +} + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe() (p1 int, p2 int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return r.Epc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go new file mode 100644 index 00000000000..41451854bc0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -0,0 +1,151 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build ppc64 ppc64le + +package unix + +//sys Dup2(oldfd int, newfd int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys Truncate(path string, length int64) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func (r *PtraceRegs) PC() uint64 { return r.Nip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +//sys syncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2 + +func SyncFileRange(fd int, off int64, n int64, flags int) error { + // The sync_file_range and sync_file_range2 syscalls differ only in the + // order of their arguments. + return syncFileRange2(fd, flags, off, n) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go new file mode 100644 index 00000000000..44aa1227a6c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -0,0 +1,209 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build riscv64,linux + +package unix + +import "unsafe" + +func EpollCreate(size int) (fd int, err error) { + if size <= 0 { + return -1, EINVAL + } + return EpollCreate1(0) +} + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + return ENOSYS +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(dirfd, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func utimes(path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Pc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func InotifyInit() (fd int, err error) { + return InotifyInit1(0) +} + +func Dup2(oldfd int, newfd int) (err error) { + return Dup3(oldfd, newfd, 0) +} + +func Pause() error { + _, err := ppoll(nil, 0, nil, nil) + return err +} + +func Poll(fds []PollFd, timeout int) (n int, err error) { + var ts *Timespec + if timeout >= 0 { + ts = new(Timespec) + *ts = NsecToTimespec(int64(timeout) * 1e6) + } + if len(fds) == 0 { + return ppoll(nil, 0, ts, nil) + } + return ppoll(&fds[0], len(fds), ts, nil) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go new file mode 100644 index 00000000000..f52f148f9ff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -0,0 +1,337 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build s390x,linux + +package unix + +import ( + "unsafe" +) + +//sys Dup2(oldfd int, newfd int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) // pipe2 is the same as pipe when flags are set to 0. + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct. +// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in . +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)} + r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// On s390x Linux, all the socket calls go through an extra indirection. +// The arguments to the underlying system call (SYS_SOCKETCALL) are the +// number below and a pointer to an array of uintptr. +const ( + // see linux/net.h + netSocket = 1 + netBind = 2 + netConnect = 3 + netListen = 4 + netAccept = 5 + netGetSockName = 6 + netGetPeerName = 7 + netSocketPair = 8 + netSend = 9 + netRecv = 10 + netSendTo = 11 + netRecvFrom = 12 + netShutdown = 13 + netSetSockOpt = 14 + netGetSockOpt = 15 + netSendMsg = 16 + netRecvMsg = 17 + netAccept4 = 18 + netRecvMMsg = 19 + netSendMMsg = 20 +) + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) { + args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) error { + args := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socket(domain int, typ int, proto int) (int, error) { + args := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)} + fd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error { + args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))} + _, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error { + args := [4]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val)} + _, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func Listen(s int, n int) error { + args := [2]uintptr{uintptr(s), uintptr(n)} + _, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func Shutdown(s, how int) error { + args := [2]uintptr{uintptr(s), uintptr(how)} + _, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go new file mode 100644 index 00000000000..72e64187deb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -0,0 +1,146 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build sparc64,linux + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +//sys futimesat(dirfd int, path string, times *[2]Timeval) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys utimes(path string, times *[2]Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func (r *PtraceRegs) PC() uint64 { return r.Tpc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd.go new file mode 100644 index 00000000000..871fe65c33f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -0,0 +1,598 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// NetBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) { + var olen uintptr + + // Get a list of all sysctl nodes below the given MIB by performing + // a sysctl for the given MIB with CTL_QUERY appended. + mib = append(mib, CTL_QUERY) + qnode := Sysctlnode{Flags: SYSCTL_VERS_1} + qp := (*byte)(unsafe.Pointer(&qnode)) + sz := unsafe.Sizeof(qnode) + if err = sysctl(mib, nil, &olen, qp, sz); err != nil { + return nil, err + } + + // Now that we know the size, get the actual nodes. + nodes = make([]Sysctlnode, olen/sz) + np := (*byte)(unsafe.Pointer(&nodes[0])) + if err = sysctl(mib, np, &olen, qp, sz); err != nil { + return nil, err + } + + return nodes, nil +} + +func nametomib(name string) (mib []_C_int, err error) { + // Split name into components. + var parts []string + last := 0 + for i := 0; i < len(name); i++ { + if name[i] == '.' { + parts = append(parts, name[last:i]) + last = i + 1 + } + } + parts = append(parts, name[last:]) + + // Discover the nodes and construct the MIB OID. + for partno, part := range parts { + nodes, err := sysctlNodes(mib) + if err != nil { + return nil, err + } + for _, node := range nodes { + n := make([]byte, 0) + for i := range node.Name { + if node.Name[i] != 0 { + n = append(n, byte(node.Name[i])) + } + } + if string(n) == part { + mib = append(mib, _C_int(node.Num)) + break + } + } + if len(mib) != partno+1 { + return nil, EINVAL + } + } + + return mib, nil +} + +func SysctlClockinfo(name string) (*Clockinfo, error) { + mib, err := sysctlmib(name) + if err != nil { + return nil, err + } + + n := uintptr(SizeofClockinfo) + var ci Clockinfo + if err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil { + return nil, err + } + if n != SizeofClockinfo { + return nil, EIO + } + return &ci, nil +} + +//sysnb pipe() (fd1 int, fd2 int, err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + return getdents(fd, buf) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func ioctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func ioctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) +//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) +//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) +//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// ____semctl13 +// __clone +// __fhopen40 +// __fhstat40 +// __fhstatvfs140 +// __fstat30 +// __getcwd +// __getfh30 +// __getlogin +// __lstat30 +// __mount50 +// __msgctl13 +// __msync13 +// __ntp_gettime30 +// __posix_chown +// __posix_fchown +// __posix_lchown +// __posix_rename +// __setlogin +// __shmctl13 +// __sigaction_sigtramp +// __sigaltstack14 +// __sigpending14 +// __sigprocmask14 +// __sigsuspend14 +// __sigtimedwait +// __stat30 +// __syscall +// __vfork14 +// _ksem_close +// _ksem_destroy +// _ksem_getvalue +// _ksem_init +// _ksem_open +// _ksem_post +// _ksem_trywait +// _ksem_unlink +// _ksem_wait +// _lwp_continue +// _lwp_create +// _lwp_ctl +// _lwp_detach +// _lwp_exit +// _lwp_getname +// _lwp_getprivate +// _lwp_kill +// _lwp_park +// _lwp_self +// _lwp_setname +// _lwp_setprivate +// _lwp_suspend +// _lwp_unpark +// _lwp_unpark_all +// _lwp_wait +// _lwp_wakeup +// _pset_bind +// _sched_getaffinity +// _sched_getparam +// _sched_setaffinity +// _sched_setparam +// acct +// aio_cancel +// aio_error +// aio_fsync +// aio_read +// aio_return +// aio_suspend +// aio_write +// break +// clock_getres +// clock_gettime +// clock_settime +// compat_09_ogetdomainname +// compat_09_osetdomainname +// compat_09_ouname +// compat_10_omsgsys +// compat_10_osemsys +// compat_10_oshmsys +// compat_12_fstat12 +// compat_12_getdirentries +// compat_12_lstat12 +// compat_12_msync +// compat_12_oreboot +// compat_12_oswapon +// compat_12_stat12 +// compat_13_sigaction13 +// compat_13_sigaltstack13 +// compat_13_sigpending13 +// compat_13_sigprocmask13 +// compat_13_sigreturn13 +// compat_13_sigsuspend13 +// compat_14___semctl +// compat_14_msgctl +// compat_14_shmctl +// compat_16___sigaction14 +// compat_16___sigreturn14 +// compat_20_fhstatfs +// compat_20_fstatfs +// compat_20_getfsstat +// compat_20_statfs +// compat_30___fhstat30 +// compat_30___fstat13 +// compat_30___lstat13 +// compat_30___stat13 +// compat_30_fhopen +// compat_30_fhstat +// compat_30_fhstatvfs1 +// compat_30_getdents +// compat_30_getfh +// compat_30_ntp_gettime +// compat_30_socket +// compat_40_mount +// compat_43_fstat43 +// compat_43_lstat43 +// compat_43_oaccept +// compat_43_ocreat +// compat_43_oftruncate +// compat_43_ogetdirentries +// compat_43_ogetdtablesize +// compat_43_ogethostid +// compat_43_ogethostname +// compat_43_ogetkerninfo +// compat_43_ogetpagesize +// compat_43_ogetpeername +// compat_43_ogetrlimit +// compat_43_ogetsockname +// compat_43_okillpg +// compat_43_olseek +// compat_43_ommap +// compat_43_oquota +// compat_43_orecv +// compat_43_orecvfrom +// compat_43_orecvmsg +// compat_43_osend +// compat_43_osendmsg +// compat_43_osethostid +// compat_43_osethostname +// compat_43_osetrlimit +// compat_43_osigblock +// compat_43_osigsetmask +// compat_43_osigstack +// compat_43_osigvec +// compat_43_otruncate +// compat_43_owait +// compat_43_stat43 +// execve +// extattr_delete_fd +// extattr_delete_file +// extattr_delete_link +// extattr_get_fd +// extattr_get_file +// extattr_get_link +// extattr_list_fd +// extattr_list_file +// extattr_list_link +// extattr_set_fd +// extattr_set_file +// extattr_set_link +// extattrctl +// fchroot +// fdatasync +// fgetxattr +// fktrace +// flistxattr +// fork +// fremovexattr +// fsetxattr +// fstatvfs1 +// fsync_range +// getcontext +// getitimer +// getvfsstat +// getxattr +// ktrace +// lchflags +// lchmod +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// lgetxattr +// lio_listio +// listxattr +// llistxattr +// lremovexattr +// lseek +// lsetxattr +// lutimes +// madvise +// mincore +// minherit +// modctl +// mq_close +// mq_getattr +// mq_notify +// mq_open +// mq_receive +// mq_send +// mq_setattr +// mq_timedreceive +// mq_timedsend +// mq_unlink +// mremap +// msgget +// msgrcv +// msgsnd +// nfssvc +// ntp_adjtime +// pmc_control +// pmc_get_info +// pollts +// preadv +// profil +// pselect +// pset_assign +// pset_create +// pset_destroy +// ptrace +// pwritev +// quotactl +// rasctl +// readv +// reboot +// removexattr +// sa_enable +// sa_preempt +// sa_register +// sa_setconcurrency +// sa_stacks +// sa_yield +// sbrk +// sched_yield +// semconfig +// semget +// semop +// setcontext +// setitimer +// setxattr +// shmat +// shmdt +// shmget +// sstk +// statvfs1 +// swapctl +// sysarch +// syscall +// timer_create +// timer_delete +// timer_getoverrun +// timer_gettime +// timer_settime +// undelete +// utrace +// uuidgen +// vadvise +// vfork +// writev diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go new file mode 100644 index 00000000000..24f74e58ce2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go @@ -0,0 +1,33 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go new file mode 100644 index 00000000000..6878bf7ff90 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go @@ -0,0 +1,33 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go new file mode 100644 index 00000000000..dbbfcf71dbd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go @@ -0,0 +1,33 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd.go new file mode 100644 index 00000000000..2b9f26a6343 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -0,0 +1,394 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// OpenBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "sort" + "syscall" + "unsafe" +) + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 + raw RawSockaddrDatalink +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func nametomib(name string) (mib []_C_int, err error) { + i := sort.Search(len(sysctlMib), func(i int) bool { + return sysctlMib[i].ctlname >= name + }) + if i < len(sysctlMib) && sysctlMib[i].ctlname == name { + return sysctlMib[i].ctloid, nil + } + return nil, EINVAL +} + +func SysctlUvmexp(name string) (*Uvmexp, error) { + mib, err := sysctlmib(name) + if err != nil { + return nil, err + } + + n := uintptr(SizeofUvmexp) + var u Uvmexp + if err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil { + return nil, err + } + if n != SizeofUvmexp { + return nil, EIO + } + return &u, nil +} + +//sysnb pipe(p *[2]_C_int) (err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + return getdents(fd, buf) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) = SYS___GETCWD + +func Getwd() (string, error) { + var buf [PathMax]byte + _, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func ioctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func ioctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) + +func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + if len(fds) == 0 { + return ppoll(nil, 0, timeout, sigmask) + } + return ppoll(&fds[0], len(fds), timeout, sigmask) +} + +func Uname(uname *Utsname) error { + mib := []_C_int{CTL_KERN, KERN_OSTYPE} + n := unsafe.Sizeof(uname.Sysname) + if err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_HOSTNAME} + n = unsafe.Sizeof(uname.Nodename) + if err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_OSRELEASE} + n = unsafe.Sizeof(uname.Release) + if err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil { + return err + } + + mib = []_C_int{CTL_KERN, KERN_VERSION} + n = unsafe.Sizeof(uname.Version) + if err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil { + return err + } + + // The version might have newlines or tabs in it, convert them to + // spaces. + for i, b := range uname.Version { + if b == '\n' || b == '\t' { + if i == len(uname.Version)-1 { + uname.Version[i] = 0 + } else { + uname.Version[i] = ' ' + } + } + } + + mib = []_C_int{CTL_HW, HW_MACHINE} + n = unsafe.Sizeof(uname.Machine) + if err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil { + return err + } + + return nil +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrtable() (rtable int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setrtable(rtable int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// __getcwd +// __semctl +// __syscall +// __sysctl +// adjfreq +// break +// clock_getres +// clock_gettime +// clock_settime +// closefrom +// execve +// faccessat +// fchmodat +// fchownat +// fcntl +// fhopen +// fhstat +// fhstatfs +// fork +// fstatat +// futimens +// getfh +// getgid +// getitimer +// getlogin +// getresgid +// getresuid +// getthrid +// ktrace +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// linkat +// mincore +// minherit +// mkdirat +// mkfifoat +// mknodat +// mount +// mquery +// msgctl +// msgget +// msgrcv +// msgsnd +// nfssvc +// nnpfspioctl +// preadv +// profil +// pwritev +// quotactl +// readlinkat +// readv +// reboot +// renameat +// rfork +// sched_yield +// semget +// semop +// setgroups +// setitimer +// setsockopt +// shmat +// shmctl +// shmdt +// shmget +// sigaction +// sigaltstack +// sigpending +// sigprocmask +// sigreturn +// sigsuspend +// symlinkat +// sysarch +// syscall +// threxit +// thrsigdivert +// thrsleep +// thrwakeup +// unlinkat +// vfork +// writev diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go new file mode 100644 index 00000000000..d62da60d1ff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go @@ -0,0 +1,37 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of openbsd/386 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go new file mode 100644 index 00000000000..9a35334cba4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go @@ -0,0 +1,37 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of openbsd/amd64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go new file mode 100644 index 00000000000..5d812aaea53 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go @@ -0,0 +1,37 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of openbsd/arm the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_solaris.go new file mode 100644 index 00000000000..53b8078282e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -0,0 +1,730 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Solaris system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_solaris.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +// Implemented in runtime/syscall_solaris.go. +type syscallFunc uintptr + +func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets. +type SockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 + raw RawSockaddrDatalink +} + +//sysnb pipe(p *[2]_C_int) (n int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + n, err := pipe(&pp) + if n != 0 { + return err + } + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return nil +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +// GetsockoptString returns the string value of the socket option opt for the +// socket associated with fd at the given socket level. +func GetsockoptString(fd, level, opt int) (string, error) { + buf := make([]byte, 256) + vallen := _Socklen(len(buf)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen) + if err != nil { + return "", err + } + return string(buf[:vallen-1]), nil +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + // Getcwd will return an error if it failed for any reason. + _, err = Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + // Check for error and sanity check group count. Newer versions of + // Solaris allow up to 1024 (NGROUPS_MAX). + if n < 0 || n > 1024 { + if err != nil { + return nil, err + } + return nil, EINVAL + } else if n == 0 { + return nil, nil + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if n == -1 { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // TODO(rsc): Can we use a single global basep for all calls? + return Getdents(fd, buf, new(uintptr)) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) { + var status _C_int + rpid, err := wait4(int32(pid), &status, options, rusage) + wpid := int(rpid) + if wpid == -1 { + return wpid, err + } + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return wpid, nil +} + +//sys gethostname(buf []byte) (n int, err error) + +func Gethostname() (name string, err error) { + var buf [MaxHostNameLen]byte + n, err := gethostname(buf[:]) + if n != 0 { + return "", err + } + n = clen(buf[:]) + if n < 1 { + return "", EFAULT + } + return string(buf[:n]), nil +} + +//sys utimes(path string, times *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) (err error) { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +// FcntlInt performs a fcntl syscall on fd with the provided command and argument. +func FcntlInt(fd uintptr, cmd, arg int) (int, error) { + valptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) + var err error + if errno != 0 { + err = errno + } + return int(valptr), err +} + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0) + if e1 != 0 { + return e1 + } + return nil +} + +//sys futimesat(fildes int, path *byte, times *[2]Timeval) (err error) + +func Futimesat(dirfd int, path string, tv []Timeval) error { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + if tv == nil { + return futimesat(dirfd, pathp, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +// Solaris doesn't have an futimes function because it allows NULL to be +// specified as the path for futimesat. However, Go doesn't like +// NULL-style string interfaces, so this simple wrapper is provided. +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimesat(fd, nil, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + // Assume path ends at NUL. + // This is not technically the Solaris semantics for + // abstract Unix domain sockets -- they are supposed + // to be uninterpreted fixed-size binary blobs -- but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if nfd == -1 { + return + } + sa, err = anyToSockaddr(fd, &rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrightslen = int32(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); n == -1 { + return + } + oobn = int(msg.Accrightslen) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrightslen = int32(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys acct(path *byte) (err error) + +func Acct(path string) (err error) { + if len(path) == 0 { + // Assume caller wants to disable accounting. + return acct(nil) + } + + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + return acct(pathp) +} + +//sys __makedev(version int, major uint, minor uint) (val uint64) + +func Mkdev(major, minor uint32) uint64 { + return __makedev(NEWDEV, uint(major), uint(minor)) +} + +//sys __major(version int, dev uint64) (val uint) + +func Major(dev uint64) uint32 { + return uint32(__major(NEWDEV, dev)) +} + +//sys __minor(version int, dev uint64) (val uint) + +func Minor(dev uint64) uint32 { + return uint32(__minor(NEWDEV, dev)) +} + +/* + * Expose the ioctl function + */ + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +func IoctlSetInt(fd int, req uint, value int) (err error) { + return ioctl(fd, req, uintptr(value)) +} + +func ioctlSetWinsize(fd int, req uint, value *Winsize) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func ioctlSetTermios(fd int, req uint, value *Termios) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermio(fd int, req uint, value *Termio) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermio(fd int, req uint) (*Termio, error) { + var value Termio + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Creat(path string, mode uint32) (fd int, err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fdatasync(fd int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) +//sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) +//sysnb Getgid() (gid int) +//sysnb Getpid() (pid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgid int, err error) +//sys Geteuid() (euid int) +//sys Getegid() (egid int) +//sys Getppid() (ppid int) +//sys Getpriority(which int, who int) (n int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Madvise(b []byte, advice int) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Setuid(uid int) (err error) +//sys Shutdown(s int, how int) (err error) = libsocket.shutdown +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statvfs(path string, vfsstat *Statvfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sys Truncate(path string, length int64) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = libc.umount +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto +//sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair +//sys write(fd int, p []byte) (n int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go new file mode 100644 index 00000000000..91c32ddf02a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go @@ -0,0 +1,23 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,solaris + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_unix.go new file mode 100644 index 00000000000..64fcda4aefa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -0,0 +1,394 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import ( + "bytes" + "runtime" + "sort" + "sync" + "syscall" + "unsafe" +) + +var ( + Stdin = 0 + Stdout = 1 + Stderr = 2 +) + +const ( + darwin64Bit = runtime.GOOS == "darwin" && SizeofPtr == 8 + dragonfly64Bit = runtime.GOOS == "dragonfly" && SizeofPtr == 8 + netbsd32Bit = runtime.GOOS == "netbsd" && SizeofPtr == 4 + solaris64Bit = runtime.GOOS == "solaris" && SizeofPtr == 8 +) + +// Do the interface allocations only once for common +// Errno values. +var ( + errEAGAIN error = syscall.EAGAIN + errEINVAL error = syscall.EINVAL + errENOENT error = syscall.ENOENT +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case EAGAIN: + return errEAGAIN + case EINVAL: + return errEINVAL + case ENOENT: + return errENOENT + } + return e +} + +// ErrnoName returns the error name for error number e. +func ErrnoName(e syscall.Errno) string { + i := sort.Search(len(errorList), func(i int) bool { + return errorList[i].num >= e + }) + if i < len(errorList) && errorList[i].num == e { + return errorList[i].name + } + return "" +} + +// SignalName returns the signal name for signal number s. +func SignalName(s syscall.Signal) string { + i := sort.Search(len(signalList), func(i int) bool { + return signalList[i].num >= s + }) + if i < len(signalList) && signalList[i].num == s { + return signalList[i].name + } + return "" +} + +// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte. +func clen(n []byte) int { + i := bytes.IndexByte(n, 0) + if i == -1 { + i = len(n) + } + return i +} + +// Mmap manager, for use by operating system-specific implementations. + +type mmapper struct { + sync.Mutex + active map[*byte][]byte // active mappings; key is last byte in mapping + mmap func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error) + munmap func(addr uintptr, length uintptr) error +} + +func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + if length <= 0 { + return nil, EINVAL + } + + // Map the requested memory. + addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) + if errno != nil { + return nil, errno + } + + // Slice memory layout + var sl = struct { + addr uintptr + len int + cap int + }{addr, length, length} + + // Use unsafe to turn sl into a []byte. + b := *(*[]byte)(unsafe.Pointer(&sl)) + + // Register mapping in m and return it. + p := &b[cap(b)-1] + m.Lock() + defer m.Unlock() + m.active[p] = b + return b, nil +} + +func (m *mmapper) Munmap(data []byte) (err error) { + if len(data) == 0 || len(data) != cap(data) { + return EINVAL + } + + // Find the base of the mapping. + p := &data[cap(data)-1] + m.Lock() + defer m.Unlock() + b := m.active[p] + if b == nil || &b[0] != &data[0] { + return EINVAL + } + + // Unmap the memory and update m. + if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil { + return errno + } + delete(m.active, p) + return nil +} + +func Read(fd int, p []byte) (n int, err error) { + n, err = read(fd, p) + if raceenabled { + if n > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), n) + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } + } + return +} + +func Write(fd int, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = write(fd, p) + if raceenabled && n > 0 { + raceReadRange(unsafe.Pointer(&p[0]), n) + } + return +} + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +// Sockaddr represents a socket address. +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs +} + +// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets. +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets. +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets. +type SockaddrUnix struct { + Name string + raw RawSockaddrUnix +} + +func Bind(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func Getpeername(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getpeername(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(fd, &rsa) +} + +func GetsockoptByte(fd, level, opt int) (value byte, err error) { + var n byte + vallen := _Socklen(1) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + +func GetsockoptInt(fd, level, opt int) (value int, err error) { + var n int32 + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return int(n), err +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptLinger(fd, level, opt int) (*Linger, error) { + var linger Linger + vallen := _Socklen(SizeofLinger) + err := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen) + return &linger, err +} + +func GetsockoptTimeval(fd, level, opt int) (*Timeval, error) { + var tv Timeval + vallen := _Socklen(unsafe.Sizeof(tv)) + err := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen) + return &tv, err +} + +func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { + return + } + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { + ptr, n, err := to.sockaddr() + if err != nil { + return err + } + return sendto(fd, p, flags, ptr, n) +} + +func SetsockoptByte(fd, level, opt int, value byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1) +} + +func SetsockoptInt(fd, level, opt int, value int) (err error) { + var n = int32(value) + return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4) +} + +func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4) +} + +func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq) +} + +func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq) +} + +func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error { + return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter) +} + +func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger) +} + +func SetsockoptString(fd, level, opt int, s string) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&[]byte(s)[0]), uintptr(len(s))) +} + +func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) +} + +func Socket(domain, typ, proto int) (fd int, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return -1, EAFNOSUPPORT + } + fd, err = socket(domain, typ, proto) + return +} + +func Socketpair(domain, typ, proto int) (fd [2]int, err error) { + var fdx [2]int32 + err = socketpair(domain, typ, proto, &fdx) + if err == nil { + fd[0] = int(fdx[0]) + fd[1] = int(fdx[1]) + } + return +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +var ioSync int64 + +func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) } + +func SetNonblock(fd int, nonblocking bool) (err error) { + flag, err := fcntl(fd, F_GETFL, 0) + if err != nil { + return err + } + if nonblocking { + flag |= O_NONBLOCK + } else { + flag &= ^O_NONBLOCK + } + _, err = fcntl(fd, F_SETFL, flag) + return err +} + +// Exec calls execve(2), which replaces the calling executable in the process +// tree. argv0 should be the full path to an executable ("/bin/ls") and the +// executable name should also be the first argument in argv (["ls", "-l"]). +// envv are the environment variables that should be passed to the new +// process (["USER=go", "PWD=/tmp"]). +func Exec(argv0 string, argv []string, envv []string) error { + return syscall.Exec(argv0, argv, envv) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_unix_gc.go new file mode 100644 index 00000000000..4cb8e8edf1a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/syscall_unix_gc.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris +// +build !gccgo + +package unix + +import "syscall" + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/timestruct.go new file mode 100644 index 00000000000..4a672f56942 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/timestruct.go @@ -0,0 +1,82 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import "time" + +// TimespecToNsec converts a Timespec value into a number of +// nanoseconds since the Unix epoch. +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +// NsecToTimespec takes a number of nanoseconds since the Unix epoch +// and returns the corresponding Timespec value. +func NsecToTimespec(nsec int64) Timespec { + sec := nsec / 1e9 + nsec = nsec % 1e9 + if nsec < 0 { + nsec += 1e9 + sec-- + } + return setTimespec(sec, nsec) +} + +// TimeToTimespec converts t into a Timespec. +// On some 32-bit systems the range of valid Timespec values are smaller +// than that of time.Time values. So if t is out of the valid range of +// Timespec, it returns a zero Timespec and ERANGE. +func TimeToTimespec(t time.Time) (Timespec, error) { + sec := t.Unix() + nsec := int64(t.Nanosecond()) + ts := setTimespec(sec, nsec) + + // Currently all targets have either int32 or int64 for Timespec.Sec. + // If there were a new target with floating point type for it, we have + // to consider the rounding error. + if int64(ts.Sec) != sec { + return Timespec{}, ERANGE + } + return ts, nil +} + +// TimevalToNsec converts a Timeval value into a number of nanoseconds +// since the Unix epoch. +func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 } + +// NsecToTimeval takes a number of nanoseconds since the Unix epoch +// and returns the corresponding Timeval value. +func NsecToTimeval(nsec int64) Timeval { + nsec += 999 // round up to microsecond + usec := nsec % 1e9 / 1e3 + sec := nsec / 1e9 + if usec < 0 { + usec += 1e6 + sec-- + } + return setTimeval(sec, usec) +} + +// Unix returns ts as the number of seconds and nanoseconds elapsed since the +// Unix epoch. +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +// Unix returns tv as the number of seconds and nanoseconds elapsed since the +// Unix epoch. +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +// Nano returns ts as the number of nanoseconds elapsed since the Unix epoch. +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +// Nano returns tv as the number of nanoseconds elapsed since the Unix epoch. +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/xattr_bsd.go new file mode 100644 index 00000000000..930499324ff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/xattr_bsd.go @@ -0,0 +1,231 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd netbsd + +package unix + +import ( + "strings" + "unsafe" +) + +// Derive extattr namespace and attribute name + +func xattrnamespace(fullattr string) (ns int, attr string, err error) { + s := strings.IndexByte(fullattr, '.') + if s == -1 { + return -1, "", ENOATTR + } + + namespace := fullattr[0:s] + attr = fullattr[s+1:] + + switch namespace { + case "user": + return EXTATTR_NAMESPACE_USER, attr, nil + case "system": + return EXTATTR_NAMESPACE_SYSTEM, attr, nil + default: + return -1, "", ENOATTR + } +} + +func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) { + if len(dest) > idx { + return unsafe.Pointer(&dest[idx]) + } else { + return unsafe.Pointer(_zero) + } +} + +// FreeBSD and NetBSD implement their own syscalls to handle extended attributes + +func Getxattr(file string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFile(file, nsid, a, uintptr(d), destsize) +} + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize) +} + +func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetLink(link, nsid, a, uintptr(d), destsize) +} + +// flags are unused on FreeBSD + +func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz) + return +} + +func Setxattr(file string, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz) + return +} + +func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz) + return +} + +func Removexattr(file string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFile(file, nsid, a) + return +} + +func Fremovexattr(fd int, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFd(fd, nsid, a) + return +} + +func Lremovexattr(link string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteLink(link, nsid, a) + return +} + +func Listxattr(file string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + // FreeBSD won't allow you to list xattrs from multiple namespaces + s := 0 + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + + /* Errors accessing system attrs are ignored so that + * we can implement the Linux-like behavior of omitting errors that + * we don't have read permissions on + * + * Linux will still error if we ask for user attributes on a file that + * we don't have read permissions on, so don't ignore those errors + */ + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, nil +} + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, nil +} + +func Llistxattr(link string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go new file mode 100644 index 00000000000..4b7b965027d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go @@ -0,0 +1,1372 @@ +// mkerrors.sh -maix32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc,aix + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -maix32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BYPASS = 0x19 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_INTF = 0x14 + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x1e + AF_NDD = 0x17 + AF_NETWARE = 0x16 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_RIF = 0x15 + AF_ROUTE = 0x11 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x400000 + ARPHRD_802_3 = 0x6 + ARPHRD_802_5 = 0x6 + ARPHRD_ETHER = 0x1 + ARPHRD_FDDI = 0x1 + B0 = 0x0 + B110 = 0x3 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2400 = 0xb + B300 = 0x7 + B38400 = 0xf + B4800 = 0xc + B50 = 0x1 + B600 = 0x8 + B75 = 0x2 + B9600 = 0xd + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x1000 + BSDLY = 0x1000 + CAP_AACCT = 0x6 + CAP_ARM_APPLICATION = 0x5 + CAP_BYPASS_RAC_VMM = 0x3 + CAP_CLEAR = 0x0 + CAP_CREDENTIALS = 0x7 + CAP_EFFECTIVE = 0x1 + CAP_EWLM_AGENT = 0x4 + CAP_INHERITABLE = 0x2 + CAP_MAXIMUM = 0x7 + CAP_NUMA_ATTACH = 0x2 + CAP_PERMITTED = 0x3 + CAP_PROPAGATE = 0x1 + CAP_PROPOGATE = 0x1 + CAP_SET = 0x1 + CBAUD = 0xf + CFLUSH = 0xf + CIBAUD = 0xf0000 + CLOCAL = 0x800 + CLOCK_MONOTONIC = 0xa + CLOCK_PROCESS_CPUTIME_ID = 0xb + CLOCK_REALTIME = 0x9 + CLOCK_THREAD_CPUTIME_ID = 0xc + CR0 = 0x0 + CR1 = 0x100 + CR2 = 0x200 + CR3 = 0x300 + CRDLY = 0x300 + CREAD = 0x80 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIOCGIFCONF = -0x3ff796dc + CSIZE = 0x30 + CSMAP_DIR = "/usr/lib/nls/csmap/" + CSTART = '\021' + CSTOP = '\023' + CSTOPB = 0x40 + CSUSP = 0x1a + ECHO = 0x8 + ECHOCTL = 0x20000 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x80000 + ECHONL = 0x40 + ECHOPRT = 0x40000 + ECH_ICMPID = 0x2 + ETHERNET_CSMACD = 0x6 + EVENP = 0x80 + EXCONTINUE = 0x0 + EXDLOK = 0x3 + EXIO = 0x2 + EXPGIO = 0x0 + EXRESUME = 0x2 + EXRETURN = 0x1 + EXSIG = 0x4 + EXTA = 0xe + EXTB = 0xf + EXTRAP = 0x1 + EYEC_RTENTRYA = 0x257274656e747241 + EYEC_RTENTRYF = 0x257274656e747246 + E_ACC = 0x0 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0xfffe + FF0 = 0x0 + FF1 = 0x2000 + FFDLY = 0x2000 + FLUSHBAND = 0x40 + FLUSHLOW = 0x8 + FLUSHO = 0x100000 + FLUSHR = 0x1 + FLUSHRW = 0x3 + FLUSHW = 0x2 + F_CLOSEM = 0xa + F_DUP2FD = 0xe + F_DUPFD = 0x0 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x5 + F_GETLK64 = 0xb + F_GETOWN = 0x8 + F_LOCK = 0x1 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x6 + F_SETLK64 = 0xc + F_SETLKW = 0x7 + F_SETLKW64 = 0xd + F_SETOWN = 0x9 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_TSTLK = 0xf + F_ULOCK = 0x0 + F_UNLCK = 0x3 + F_WRLCK = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMP6_FILTER = 0x26 + ICMP6_SEC_SEND_DEL = 0x46 + ICMP6_SEC_SEND_GET = 0x47 + ICMP6_SEC_SEND_SET = 0x44 + ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45 + ICRNL = 0x100 + IEXTEN = 0x200000 + IFA_FIRSTALIAS = 0x2000 + IFA_ROUTE = 0x1 + IFF_64BIT = 0x4000000 + IFF_ALLCAST = 0x20000 + IFF_ALLMULTI = 0x200 + IFF_BPF = 0x8000000 + IFF_BRIDGE = 0x40000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x80c52 + IFF_CHECKSUM_OFFLOAD = 0x10000000 + IFF_D1 = 0x8000 + IFF_D2 = 0x4000 + IFF_D3 = 0x2000 + IFF_D4 = 0x1000 + IFF_DEBUG = 0x4 + IFF_DEVHEALTH = 0x4000 + IFF_DO_HW_LOOPBACK = 0x10000 + IFF_GROUP_ROUTING = 0x2000000 + IFF_IFBUFMGT = 0x800000 + IFF_LINK0 = 0x100000 + IFF_LINK1 = 0x200000 + IFF_LINK2 = 0x400000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x80000 + IFF_NOARP = 0x80 + IFF_NOECHO = 0x800 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_PSEG = 0x40000000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SNAP = 0x8000 + IFF_TCP_DISABLE_CKSUM = 0x20000000 + IFF_TCP_NOCKSUM = 0x1000000 + IFF_UP = 0x1 + IFF_VIPA = 0x80000000 + IFNAMSIZ = 0x10 + IFO_FLUSH = 0x1 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_CLUSTER = 0x3e + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FCS = 0x3a + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIFTUNNEL = 0x3c + IFT_HDH1822 = 0x3 + IFT_HF = 0x3d + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SN = 0x38 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SP = 0x39 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TUNNEL = 0x3b + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_VIPA = 0x37 + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x10000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_USE = 0x1 + IPPROTO_AH = 0x33 + IPPROTO_BIP = 0x53 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GIF = 0x8c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_LOCAL = 0x3f + IPPROTO_MAX = 0x100 + IPPROTO_MH = 0x87 + IPPROTO_NONE = 0x3b + IPPROTO_PUP = 0xc + IPPROTO_QOS = 0x2d + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_ADDRFORM = 0x16 + IPV6_ADDR_PREFERENCES = 0x4a + IPV6_ADD_MEMBERSHIP = 0xc + IPV6_AIXRAWSOCKET = 0x39 + IPV6_CHECKSUM = 0x27 + IPV6_DONTFRAG = 0x2d + IPV6_DROP_MEMBERSHIP = 0xd + IPV6_DSTOPTS = 0x36 + IPV6_FLOWINFO_FLOWLABEL = 0xffffff + IPV6_FLOWINFO_PRIFLOW = 0xfffffff + IPV6_FLOWINFO_PRIORITY = 0xf000000 + IPV6_FLOWINFO_SRFLAG = 0x10000000 + IPV6_FLOWINFO_VERSION = 0xf0000000 + IPV6_HOPLIMIT = 0x28 + IPV6_HOPOPTS = 0x34 + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MIPDSTOPTS = 0x36 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_NOPROBE = 0x1c + IPV6_PATHMTU = 0x2e + IPV6_PKTINFO = 0x21 + IPV6_PKTOPTIONS = 0x24 + IPV6_PRIORITY_10 = 0xa000000 + IPV6_PRIORITY_11 = 0xb000000 + IPV6_PRIORITY_12 = 0xc000000 + IPV6_PRIORITY_13 = 0xd000000 + IPV6_PRIORITY_14 = 0xe000000 + IPV6_PRIORITY_15 = 0xf000000 + IPV6_PRIORITY_8 = 0x8000000 + IPV6_PRIORITY_9 = 0x9000000 + IPV6_PRIORITY_BULK = 0x4000000 + IPV6_PRIORITY_CONTROL = 0x7000000 + IPV6_PRIORITY_FILLER = 0x1000000 + IPV6_PRIORITY_INTERACTIVE = 0x6000000 + IPV6_PRIORITY_RESERVED1 = 0x3000000 + IPV6_PRIORITY_RESERVED2 = 0x5000000 + IPV6_PRIORITY_UNATTENDED = 0x2000000 + IPV6_PRIORITY_UNCHARACTERIZED = 0x0 + IPV6_RECVDSTOPTS = 0x38 + IPV6_RECVHOPLIMIT = 0x29 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVHOPS = 0x22 + IPV6_RECVIF = 0x1e + IPV6_RECVPATHMTU = 0x2f + IPV6_RECVPKTINFO = 0x23 + IPV6_RECVRTHDR = 0x33 + IPV6_RECVSRCRT = 0x1d + IPV6_RECVTCLASS = 0x2a + IPV6_RTHDR = 0x32 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RTHDR_TYPE_2 = 0x2 + IPV6_SENDIF = 0x1f + IPV6_SRFLAG_LOOSE = 0x0 + IPV6_SRFLAG_STRICT = 0x10000000 + IPV6_TCLASS = 0x2b + IPV6_TOKEN_LENGTH = 0x40 + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2c + IPV6_V6ONLY = 0x25 + IPV6_VERSION = 0x60000000 + IP_ADDRFORM = 0x16 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x3c + IP_BLOCK_SOURCE = 0x3a + IP_BROADCAST_IF = 0x10 + IP_CACHE_LINE_SIZE = 0x80 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPMODE = 0x11 + IP_DONTFRAG = 0x19 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x3d + IP_FINDPMTU = 0x1a + IP_HDRINCL = 0x2 + IP_INC_MEMBERSHIPS = 0x14 + IP_INIT_MEMBERSHIP = 0x14 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_HOPS = 0xa + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OPT = 0x1b + IP_OPTIONS = 0x1 + IP_PMTUAGE = 0x1b + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVIFINFO = 0xf + IP_RECVINTERFACE = 0x20 + IP_RECVMACHDR = 0xe + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x22 + IP_RETOPTS = 0x8 + IP_SOURCE_FILTER = 0x48 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x3b + IP_UNICAST_HOPS = 0x4 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x800 + IXANY = 0x1000 + IXOFF = 0x400 + IXON = 0x200 + I_FLUSH = 0x20005305 + LNOFLSH = 0x8000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x10 + MAP_ANONYMOUS = 0x10 + MAP_FILE = 0x0 + MAP_FIXED = 0x100 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_TYPE = 0xf0 + MAP_VARIABLE = 0x0 + MCL_CURRENT = 0x100 + MCL_FUTURE = 0x200 + MSG_ANY = 0x4 + MSG_ARGEXT = 0x400 + MSG_BAND = 0x2 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_EOR = 0x8 + MSG_HIPRI = 0x1 + MSG_MAXIOVLEN = 0x10 + MSG_MPEG2 = 0x80 + MSG_NONBLOCK = 0x4000 + MSG_NOSIGNAL = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x200 + MS_ASYNC = 0x10 + MS_EINTR = 0x80 + MS_INVALIDATE = 0x40 + MS_PER_SEC = 0x3e8 + MS_SYNC = 0x20 + NL0 = 0x0 + NL1 = 0x4000 + NL2 = 0x8000 + NL3 = 0xc000 + NLDLY = 0x4000 + NOFLSH = 0x80 + NOFLUSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + ONOEOT = 0x80000 + OPOST = 0x1 + OXTABS = 0x40000 + O_ACCMODE = 0x23 + O_APPEND = 0x8 + O_CIO = 0x80 + O_CIOR = 0x800000000 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DEFER = 0x2000 + O_DELAY = 0x4000 + O_DIRECT = 0x8000000 + O_DIRECTORY = 0x80000 + O_DSYNC = 0x400000 + O_EFSOFF = 0x400000000 + O_EFSON = 0x200000000 + O_EXCL = 0x400 + O_EXEC = 0x20 + O_LARGEFILE = 0x4000000 + O_NDELAY = 0x8000 + O_NOCACHE = 0x100000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x1000000 + O_NONBLOCK = 0x4 + O_NONE = 0x3 + O_NSHARE = 0x10000 + O_RAW = 0x100000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSHARE = 0x1000 + O_RSYNC = 0x200000 + O_SEARCH = 0x20 + O_SNAPSHOT = 0x40 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_TTY_INIT = 0x0 + O_WRONLY = 0x1 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_64BIT = 0x20 + PR_ADDR = 0x2 + PR_ARGEXT = 0x400 + PR_ATOMIC = 0x1 + PR_CONNREQUIRED = 0x4 + PR_FASTHZ = 0x5 + PR_INP = 0x40 + PR_INTRLEVEL = 0x8000 + PR_MLS = 0x100 + PR_MLS_1_LABEL = 0x200 + PR_NOEOR = 0x4000 + PR_RIGHTS = 0x10 + PR_SLOWHZ = 0x2 + PR_WANTRCVD = 0x8 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x9 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DOWNSTREAM = 0x100 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTC_IA64 = 0x3 + RTC_POWER = 0x1 + RTC_POWER_PC = 0x2 + RTF_ACTIVE_DGD = 0x1000000 + RTF_BCE = 0x80000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_BUL = 0x2000 + RTF_CLONE = 0x10000 + RTF_CLONED = 0x20000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FREE_IN_PROG = 0x4000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PERMANENT6 = 0x8000000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_SMALLMTU = 0x40000 + RTF_STATIC = 0x800 + RTF_STOPSRCH = 0x2000000 + RTF_UNREACHABLE = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_EXPIRE = 0xf + RTM_GET = 0x4 + RTM_GETNEXT = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTLOST = 0x10 + RTM_RTTUNIT = 0xf4240 + RTM_SAMEADDR = 0x12 + RTM_SET = 0x13 + RTM_VERSION = 0x2 + RTM_VERSION_GR = 0x4 + RTM_VERSION_GR_COMPAT = 0x3 + RTM_VERSION_POLICY = 0x5 + RTM_VERSION_POLICY_EXT = 0x6 + RTM_VERSION_POLICY_PRFN = 0x7 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIGMAX64 = 0xff + SIGQUEUE_MAX = 0x20 + SIOCADDIFVIPA = 0x20006942 + SIOCADDMTU = -0x7ffb9690 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDNETID = -0x7fd796a9 + SIOCADDRT = -0x7fcf8df6 + SIOCAIFADDR = -0x7fbf96e6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fb396e0 + SIOCDELIFVIPA = 0x20006943 + SIOCDELMTU = -0x7ffb968f + SIOCDELMULTI = -0x7fdf96ce + SIOCDELPMTU = -0x7fd78ff6 + SIOCDELRT = -0x7fcf8df5 + SIOCDIFADDR = -0x7fd796e7 + SIOCDNETOPT = -0x3ffe9680 + SIOCDX25XLATE = -0x7fd7969b + SIOCFIFADDR = -0x7fdf966d + SIOCGARP = -0x3fb396da + SIOCGETMTUS = 0x2000696f + SIOCGETSGCNT = -0x3feb8acc + SIOCGETVIFCNT = -0x3feb8acd + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fd796df + SIOCGIFADDRS = 0x2000698c + SIOCGIFBAUDRATE = -0x3fd79693 + SIOCGIFBRDADDR = -0x3fd796dd + SIOCGIFCONF = -0x3ff796bb + SIOCGIFCONFGLOB = -0x3ff79670 + SIOCGIFDSTADDR = -0x3fd796de + SIOCGIFFLAGS = -0x3fd796ef + SIOCGIFGIDLIST = 0x20006968 + SIOCGIFHWADDR = -0x3fab966b + SIOCGIFMETRIC = -0x3fd796e9 + SIOCGIFMTU = -0x3fd796aa + SIOCGIFNETMASK = -0x3fd796db + SIOCGIFOPTIONS = -0x3fd796d6 + SIOCGISNO = -0x3fd79695 + SIOCGLOADF = -0x3ffb967e + SIOCGLOWAT = 0x40047303 + SIOCGNETOPT = -0x3ffe96a5 + SIOCGNETOPT1 = -0x3fdf967f + SIOCGNMTUS = 0x2000696e + SIOCGPGRP = 0x40047309 + SIOCGSIZIFCONF = 0x4004696a + SIOCGSRCFILTER = -0x3fe796cb + SIOCGTUNEPHASE = -0x3ffb9676 + SIOCGX25XLATE = -0x3fd7969c + SIOCIFATTACH = -0x7fdf9699 + SIOCIFDETACH = -0x7fdf969a + SIOCIFGETPKEY = -0x7fdf969b + SIOCIF_ATM_DARP = -0x7fdf9683 + SIOCIF_ATM_DUMPARP = -0x7fdf9685 + SIOCIF_ATM_GARP = -0x7fdf9682 + SIOCIF_ATM_IDLE = -0x7fdf9686 + SIOCIF_ATM_SARP = -0x7fdf9681 + SIOCIF_ATM_SNMPARP = -0x7fdf9687 + SIOCIF_ATM_SVC = -0x7fdf9684 + SIOCIF_ATM_UBR = -0x7fdf9688 + SIOCIF_DEVHEALTH = -0x7ffb966c + SIOCIF_IB_ARP_INCOMP = -0x7fdf9677 + SIOCIF_IB_ARP_TIMER = -0x7fdf9678 + SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f + SIOCIF_IB_DEL_ARP = -0x7fdf967f + SIOCIF_IB_DEL_PINFO = -0x3fdf9670 + SIOCIF_IB_DUMP_ARP = -0x7fdf9680 + SIOCIF_IB_GET_ARP = -0x7fdf967e + SIOCIF_IB_GET_INFO = -0x3f879675 + SIOCIF_IB_GET_STATS = -0x3f879672 + SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a + SIOCIF_IB_RESET_STATS = -0x3f879671 + SIOCIF_IB_RESIZE_CQ = -0x7fdf9679 + SIOCIF_IB_SET_ARP = -0x7fdf967d + SIOCIF_IB_SET_PKEY = -0x7fdf967c + SIOCIF_IB_SET_PORT = -0x7fdf967b + SIOCIF_IB_SET_QKEY = -0x7fdf9676 + SIOCIF_IB_SET_QSIZE = -0x7fdf967a + SIOCLISTIFVIPA = 0x20006944 + SIOCSARP = -0x7fb396e2 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = -0x7fd796f4 + SIOCSIFADDRORI = -0x7fdb9673 + SIOCSIFBRDADDR = -0x7fd796ed + SIOCSIFDSTADDR = -0x7fd796f2 + SIOCSIFFLAGS = -0x7fd796f0 + SIOCSIFGIDLIST = 0x20006969 + SIOCSIFMETRIC = -0x7fd796e8 + SIOCSIFMTU = -0x7fd796a8 + SIOCSIFNETDUMP = -0x7fd796e4 + SIOCSIFNETMASK = -0x7fd796ea + SIOCSIFOPTIONS = -0x7fd796d7 + SIOCSIFSUBCHAN = -0x7fd796e5 + SIOCSISNO = -0x7fd79694 + SIOCSLOADF = -0x3ffb967d + SIOCSLOWAT = 0x80047302 + SIOCSNETOPT = -0x7ffe96a6 + SIOCSPGRP = 0x80047308 + SIOCSX25XLATE = -0x7fd7969d + SOCK_CONN_DGRAM = 0x6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x400 + SO_ACCEPTCONN = 0x2 + SO_AUDIT = 0x8000 + SO_BROADCAST = 0x20 + SO_CKSUMRECV = 0x800 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_KERNACCEPT = 0x2000 + SO_LINGER = 0x80 + SO_NOMULTIPATH = 0x4000 + SO_NOREUSEADDR = 0x1000 + SO_OOBINLINE = 0x100 + SO_PEERID = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMPNS = 0x100a + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USE_IFBUFS = 0x400 + S_BANDURG = 0x400 + S_EMODFMT = 0x3c000000 + S_ENFMT = 0x400 + S_ERROR = 0x100 + S_HANGUP = 0x200 + S_HIPRI = 0x2 + S_ICRYPTO = 0x80000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFJOURNAL = 0x10000 + S_IFLNK = 0xa000 + S_IFMPX = 0x2200 + S_IFMT = 0xf000 + S_IFPDIR = 0x4000000 + S_IFPSDIR = 0x8000000 + S_IFPSSDIR = 0xc000000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFSYSEA = 0x30000000 + S_INPUT = 0x1 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_ITCB = 0x1000000 + S_ITP = 0x800000 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXACL = 0x2000000 + S_IXATTR = 0x40000 + S_IXGRP = 0x8 + S_IXINTERFACE = 0x100000 + S_IXMOD = 0x40000000 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_MSG = 0x8 + S_OUTPUT = 0x4 + S_RDBAND = 0x20 + S_RDNORM = 0x10 + S_RESERVED1 = 0x20000 + S_RESERVED2 = 0x200000 + S_RESERVED3 = 0x400000 + S_RESERVED4 = 0x80000000 + S_RESFMT1 = 0x10000000 + S_RESFMT10 = 0x34000000 + S_RESFMT11 = 0x38000000 + S_RESFMT12 = 0x3c000000 + S_RESFMT2 = 0x14000000 + S_RESFMT3 = 0x18000000 + S_RESFMT4 = 0x1c000000 + S_RESFMT5 = 0x20000000 + S_RESFMT6 = 0x24000000 + S_RESFMT7 = 0x28000000 + S_RESFMT8 = 0x2c000000 + S_WRBAND = 0x80 + S_WRNORM = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x540c + TCGETA = 0x5405 + TCGETS = 0x5401 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800 + TCP_ACLADD = 0x23 + TCP_ACLBIND = 0x26 + TCP_ACLCLEAR = 0x22 + TCP_ACLDEL = 0x24 + TCP_ACLDENY = 0x8 + TCP_ACLFLUSH = 0x21 + TCP_ACLGID = 0x1 + TCP_ACLLS = 0x25 + TCP_ACLSUBNET = 0x4 + TCP_ACLUID = 0x2 + TCP_CWND_DF = 0x16 + TCP_CWND_IF = 0x15 + TCP_DELAY_ACK_FIN = 0x2 + TCP_DELAY_ACK_SYN = 0x1 + TCP_FASTNAME = 0x101080a + TCP_KEEPCNT = 0x13 + TCP_KEEPIDLE = 0x11 + TCP_KEEPINTVL = 0x12 + TCP_LSPRIV = 0x29 + TCP_LUID = 0x20 + TCP_MAXBURST = 0x8 + TCP_MAXDF = 0x64 + TCP_MAXIF = 0x64 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAXWINDOWSCALE = 0xe + TCP_MAX_SACK = 0x4 + TCP_MSS = 0x5b4 + TCP_NODELAY = 0x1 + TCP_NODELAYACK = 0x14 + TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19 + TCP_NOREDUCE_CWND_IN_FRXMT = 0x18 + TCP_NOTENTER_SSTART = 0x17 + TCP_OPT = 0x19 + TCP_RFC1323 = 0x4 + TCP_SETPRIV = 0x27 + TCP_STDURG = 0x10 + TCP_TIMESTAMP_OPTLEN = 0xc + TCP_UNSETPRIV = 0x28 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETSF = 0x5404 + TCSETSW = 0x5403 + TCXONC = 0x540b + TIOC = 0x5400 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCEXCL = 0x2000740d + TIOCFLUSH = 0x80047410 + TIOCGETC = 0x40067412 + TIOCGETD = 0x40047400 + TIOCGETP = 0x40067408 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047448 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCHPCL = 0x20007402 + TIOCLBIC = 0x8004747e + TIOCLBIS = 0x8004747f + TIOCLGET = 0x4004747c + TIOCLSET = 0x8004747d + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMIWAIT = 0x80047464 + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSDTR = 0x20007479 + TIOCSETC = 0x80067411 + TIOCSETD = 0x80047401 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x10000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x3 + VDISCRD = 0xc + VDSUSP = 0xa + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xe + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0x7 + VSTOP = 0x8 + VSTRT = 0x7 + VSUSP = 0x9 + VT0 = 0x0 + VT1 = 0x8000 + VTDELAY = 0x2000 + VTDLY = 0x8000 + VTIME = 0x5 + VWERSE = 0xd + WPARSTART = 0x1 + WPARSTOP = 0x2 + WPARTTYNAME = "Global" + XCASE = 0x4 + XTABS = 0xc00 + _FDATAFLUSH = 0x2000000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x43) + EADDRNOTAVAIL = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x42) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x38) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x78) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x75) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECLONEME = syscall.Errno(0x52) + ECONNABORTED = syscall.Errno(0x48) + ECONNREFUSED = syscall.Errno(0x4f) + ECONNRESET = syscall.Errno(0x49) + ECORRUPT = syscall.Errno(0x59) + EDEADLK = syscall.Errno(0x2d) + EDESTADDREQ = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x3a) + EDIST = syscall.Errno(0x35) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x58) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFORMAT = syscall.Errno(0x30) + EHOSTDOWN = syscall.Errno(0x50) + EHOSTUNREACH = syscall.Errno(0x51) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x74) + EINPROGRESS = syscall.Errno(0x37) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x4b) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x55) + EMEDIA = syscall.Errno(0x6e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x3b) + EMULTIHOP = syscall.Errno(0x7d) + ENAMETOOLONG = syscall.Errno(0x56) + ENETDOWN = syscall.Errno(0x45) + ENETRESET = syscall.Errno(0x47) + ENETUNREACH = syscall.Errno(0x46) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x70) + ENOBUFS = syscall.Errno(0x4a) + ENOCONNECT = syscall.Errno(0x32) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x7a) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x31) + ENOLINK = syscall.Errno(0x7e) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENOPROTOOPT = syscall.Errno(0x3d) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x76) + ENOSTR = syscall.Errno(0x7b) + ENOSYS = syscall.Errno(0x6d) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x4c) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x11) + ENOTREADY = syscall.Errno(0x2e) + ENOTRECOVERABLE = syscall.Errno(0x5e) + ENOTRUST = syscall.Errno(0x72) + ENOTSOCK = syscall.Errno(0x39) + ENOTSUP = syscall.Errno(0x7c) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x40) + EOVERFLOW = syscall.Errno(0x7f) + EOWNERDEAD = syscall.Errno(0x5f) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x41) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x53) + EPROTO = syscall.Errno(0x79) + EPROTONOSUPPORT = syscall.Errno(0x3e) + EPROTOTYPE = syscall.Errno(0x3c) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x5d) + ERESTART = syscall.Errno(0x52) + EROFS = syscall.Errno(0x1e) + ESAD = syscall.Errno(0x71) + ESHUTDOWN = syscall.Errno(0x4d) + ESOCKTNOSUPPORT = syscall.Errno(0x3f) + ESOFT = syscall.Errno(0x6f) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x34) + ESYSERROR = syscall.Errno(0x5a) + ETIME = syscall.Errno(0x77) + ETIMEDOUT = syscall.Errno(0x4e) + ETOOMANYREFS = syscall.Errno(0x73) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x54) + EWOULDBLOCK = syscall.Errno(0xb) + EWRPROTECT = syscall.Errno(0x2f) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGAIO = syscall.Signal(0x17) + SIGALRM = syscall.Signal(0xe) + SIGALRM1 = syscall.Signal(0x26) + SIGBUS = syscall.Signal(0xa) + SIGCAPI = syscall.Signal(0x31) + SIGCHLD = syscall.Signal(0x14) + SIGCLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGCPUFAIL = syscall.Signal(0x3b) + SIGDANGER = syscall.Signal(0x21) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGGRANT = syscall.Signal(0x3c) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOINT = syscall.Signal(0x10) + SIGIOT = syscall.Signal(0x6) + SIGKAP = syscall.Signal(0x3c) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x6) + SIGMAX = syscall.Signal(0x3f) + SIGMAX32 = syscall.Signal(0x3f) + SIGMIGRATE = syscall.Signal(0x23) + SIGMSG = syscall.Signal(0x1b) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x17) + SIGPRE = syscall.Signal(0x24) + SIGPROF = syscall.Signal(0x20) + SIGPTY = syscall.Signal(0x17) + SIGPWR = syscall.Signal(0x1d) + SIGQUIT = syscall.Signal(0x3) + SIGRECONFIG = syscall.Signal(0x3a) + SIGRETRACT = syscall.Signal(0x3d) + SIGSAK = syscall.Signal(0x3f) + SIGSEGV = syscall.Signal(0xb) + SIGSOUND = syscall.Signal(0x3e) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGSYSERROR = syscall.Signal(0x30) + SIGTALRM = syscall.Signal(0x26) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVIRT = syscall.Signal(0x25) + SIGVTALRM = syscall.Signal(0x22) + SIGWAITING = syscall.Signal(0x27) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "not owner"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "I/O error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "arg list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file number"}, + {10, "ECHILD", "no child processes"}, + {11, "EWOULDBLOCK", "resource temporarily unavailable"}, + {12, "ENOMEM", "not enough space"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "ENOTEMPTY", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "file table overflow"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "not a typewriter"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "deadlock condition if locked"}, + {46, "ENOTREADY", "device not ready"}, + {47, "EWRPROTECT", "write-protected media"}, + {48, "EFORMAT", "unformatted or incompatible media"}, + {49, "ENOLCK", "no locks available"}, + {50, "ENOCONNECT", "cannot Establish Connection"}, + {52, "ESTALE", "missing file or filesystem"}, + {53, "EDIST", "requests blocked by Administrator"}, + {55, "EINPROGRESS", "operation now in progress"}, + {56, "EALREADY", "operation already in progress"}, + {57, "ENOTSOCK", "socket operation on non-socket"}, + {58, "EDESTADDREQ", "destination address required"}, + {59, "EMSGSIZE", "message too long"}, + {60, "EPROTOTYPE", "protocol wrong type for socket"}, + {61, "ENOPROTOOPT", "protocol not available"}, + {62, "EPROTONOSUPPORT", "protocol not supported"}, + {63, "ESOCKTNOSUPPORT", "socket type not supported"}, + {64, "EOPNOTSUPP", "operation not supported on socket"}, + {65, "EPFNOSUPPORT", "protocol family not supported"}, + {66, "EAFNOSUPPORT", "addr family not supported by protocol"}, + {67, "EADDRINUSE", "address already in use"}, + {68, "EADDRNOTAVAIL", "can't assign requested address"}, + {69, "ENETDOWN", "network is down"}, + {70, "ENETUNREACH", "network is unreachable"}, + {71, "ENETRESET", "network dropped connection on reset"}, + {72, "ECONNABORTED", "software caused connection abort"}, + {73, "ECONNRESET", "connection reset by peer"}, + {74, "ENOBUFS", "no buffer space available"}, + {75, "EISCONN", "socket is already connected"}, + {76, "ENOTCONN", "socket is not connected"}, + {77, "ESHUTDOWN", "can't send after socket shutdown"}, + {78, "ETIMEDOUT", "connection timed out"}, + {79, "ECONNREFUSED", "connection refused"}, + {80, "EHOSTDOWN", "host is down"}, + {81, "EHOSTUNREACH", "no route to host"}, + {82, "ERESTART", "restart the system call"}, + {83, "EPROCLIM", "too many processes"}, + {84, "EUSERS", "too many users"}, + {85, "ELOOP", "too many levels of symbolic links"}, + {86, "ENAMETOOLONG", "file name too long"}, + {88, "EDQUOT", "disk quota exceeded"}, + {89, "ECORRUPT", "invalid file system control data detected"}, + {90, "ESYSERROR", "for future use "}, + {93, "EREMOTE", "item is not local to host"}, + {94, "ENOTRECOVERABLE", "state not recoverable "}, + {95, "EOWNERDEAD", "previous owner died "}, + {109, "ENOSYS", "function not implemented"}, + {110, "EMEDIA", "media surface error"}, + {111, "ESOFT", "I/O completed, but needs relocation"}, + {112, "ENOATTR", "no attribute found"}, + {113, "ESAD", "security Authentication Denied"}, + {114, "ENOTRUST", "not a Trusted Program"}, + {115, "ETOOMANYREFS", "too many references: can't splice"}, + {116, "EILSEQ", "invalid wide character"}, + {117, "ECANCELED", "asynchronous I/O cancelled"}, + {118, "ENOSR", "out of STREAMS resources"}, + {119, "ETIME", "system call timed out"}, + {120, "EBADMSG", "next message has wrong type"}, + {121, "EPROTO", "error in protocol"}, + {122, "ENODATA", "no message on stream head read q"}, + {123, "ENOSTR", "fd not associated with a stream"}, + {124, "ENOTSUP", "unsupported attribute value"}, + {125, "EMULTIHOP", "multihop is not allowed"}, + {126, "ENOLINK", "the server link has been severed"}, + {127, "EOVERFLOW", "value too large to be stored in data type"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "IOT/Abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible/complete"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {27, "SIGMSG", "input device data"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGPWR", "power-failure"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPROF", "profiling timer expired"}, + {33, "SIGDANGER", "paging space low"}, + {34, "SIGVTALRM", "virtual timer expired"}, + {35, "SIGMIGRATE", "signal 35"}, + {36, "SIGPRE", "signal 36"}, + {37, "SIGVIRT", "signal 37"}, + {38, "SIGTALRM", "signal 38"}, + {39, "SIGWAITING", "signal 39"}, + {48, "SIGSYSERROR", "signal 48"}, + {49, "SIGCAPI", "signal 49"}, + {58, "SIGRECONFIG", "signal 58"}, + {59, "SIGCPUFAIL", "CPU Failure Predicted"}, + {60, "SIGKAP", "monitor mode granted"}, + {61, "SIGRETRACT", "monitor mode retracted"}, + {62, "SIGSOUND", "sound completed"}, + {63, "SIGSAK", "secure attention"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go new file mode 100644 index 00000000000..ed04fd1b77d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go @@ -0,0 +1,1373 @@ +// mkerrors.sh -maix64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,aix + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -maix64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BYPASS = 0x19 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_INTF = 0x14 + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x1e + AF_NDD = 0x17 + AF_NETWARE = 0x16 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_RIF = 0x15 + AF_ROUTE = 0x11 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x400000 + ARPHRD_802_3 = 0x6 + ARPHRD_802_5 = 0x6 + ARPHRD_ETHER = 0x1 + ARPHRD_FDDI = 0x1 + B0 = 0x0 + B110 = 0x3 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2400 = 0xb + B300 = 0x7 + B38400 = 0xf + B4800 = 0xc + B50 = 0x1 + B600 = 0x8 + B75 = 0x2 + B9600 = 0xd + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x1000 + BSDLY = 0x1000 + CAP_AACCT = 0x6 + CAP_ARM_APPLICATION = 0x5 + CAP_BYPASS_RAC_VMM = 0x3 + CAP_CLEAR = 0x0 + CAP_CREDENTIALS = 0x7 + CAP_EFFECTIVE = 0x1 + CAP_EWLM_AGENT = 0x4 + CAP_INHERITABLE = 0x2 + CAP_MAXIMUM = 0x7 + CAP_NUMA_ATTACH = 0x2 + CAP_PERMITTED = 0x3 + CAP_PROPAGATE = 0x1 + CAP_PROPOGATE = 0x1 + CAP_SET = 0x1 + CBAUD = 0xf + CFLUSH = 0xf + CIBAUD = 0xf0000 + CLOCAL = 0x800 + CLOCK_MONOTONIC = 0xa + CLOCK_PROCESS_CPUTIME_ID = 0xb + CLOCK_REALTIME = 0x9 + CLOCK_THREAD_CPUTIME_ID = 0xc + CR0 = 0x0 + CR1 = 0x100 + CR2 = 0x200 + CR3 = 0x300 + CRDLY = 0x300 + CREAD = 0x80 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIOCGIFCONF = -0x3fef96dc + CSIZE = 0x30 + CSMAP_DIR = "/usr/lib/nls/csmap/" + CSTART = '\021' + CSTOP = '\023' + CSTOPB = 0x40 + CSUSP = 0x1a + ECHO = 0x8 + ECHOCTL = 0x20000 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x80000 + ECHONL = 0x40 + ECHOPRT = 0x40000 + ECH_ICMPID = 0x2 + ETHERNET_CSMACD = 0x6 + EVENP = 0x80 + EXCONTINUE = 0x0 + EXDLOK = 0x3 + EXIO = 0x2 + EXPGIO = 0x0 + EXRESUME = 0x2 + EXRETURN = 0x1 + EXSIG = 0x4 + EXTA = 0xe + EXTB = 0xf + EXTRAP = 0x1 + EYEC_RTENTRYA = 0x257274656e747241 + EYEC_RTENTRYF = 0x257274656e747246 + E_ACC = 0x0 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0xfffe + FF0 = 0x0 + FF1 = 0x2000 + FFDLY = 0x2000 + FLUSHBAND = 0x40 + FLUSHLOW = 0x8 + FLUSHO = 0x100000 + FLUSHR = 0x1 + FLUSHRW = 0x3 + FLUSHW = 0x2 + F_CLOSEM = 0xa + F_DUP2FD = 0xe + F_DUPFD = 0x0 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETLK64 = 0xb + F_GETOWN = 0x8 + F_LOCK = 0x1 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLK64 = 0xc + F_SETLKW = 0xd + F_SETLKW64 = 0xd + F_SETOWN = 0x9 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_TSTLK = 0xf + F_ULOCK = 0x0 + F_UNLCK = 0x3 + F_WRLCK = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMP6_FILTER = 0x26 + ICMP6_SEC_SEND_DEL = 0x46 + ICMP6_SEC_SEND_GET = 0x47 + ICMP6_SEC_SEND_SET = 0x44 + ICMP6_SEC_SEND_SET_CGA_ADDR = 0x45 + ICRNL = 0x100 + IEXTEN = 0x200000 + IFA_FIRSTALIAS = 0x2000 + IFA_ROUTE = 0x1 + IFF_64BIT = 0x4000000 + IFF_ALLCAST = 0x20000 + IFF_ALLMULTI = 0x200 + IFF_BPF = 0x8000000 + IFF_BRIDGE = 0x40000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x80c52 + IFF_CHECKSUM_OFFLOAD = 0x10000000 + IFF_D1 = 0x8000 + IFF_D2 = 0x4000 + IFF_D3 = 0x2000 + IFF_D4 = 0x1000 + IFF_DEBUG = 0x4 + IFF_DEVHEALTH = 0x4000 + IFF_DO_HW_LOOPBACK = 0x10000 + IFF_GROUP_ROUTING = 0x2000000 + IFF_IFBUFMGT = 0x800000 + IFF_LINK0 = 0x100000 + IFF_LINK1 = 0x200000 + IFF_LINK2 = 0x400000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x80000 + IFF_NOARP = 0x80 + IFF_NOECHO = 0x800 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_PSEG = 0x40000000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SNAP = 0x8000 + IFF_TCP_DISABLE_CKSUM = 0x20000000 + IFF_TCP_NOCKSUM = 0x1000000 + IFF_UP = 0x1 + IFF_VIPA = 0x80000000 + IFNAMSIZ = 0x10 + IFO_FLUSH = 0x1 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_CLUSTER = 0x3e + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FCS = 0x3a + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIFTUNNEL = 0x3c + IFT_HDH1822 = 0x3 + IFT_HF = 0x3d + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SN = 0x38 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SP = 0x39 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TUNNEL = 0x3b + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_VIPA = 0x37 + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x10000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_USE = 0x1 + IPPROTO_AH = 0x33 + IPPROTO_BIP = 0x53 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GIF = 0x8c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_LOCAL = 0x3f + IPPROTO_MAX = 0x100 + IPPROTO_MH = 0x87 + IPPROTO_NONE = 0x3b + IPPROTO_PUP = 0xc + IPPROTO_QOS = 0x2d + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_ADDRFORM = 0x16 + IPV6_ADDR_PREFERENCES = 0x4a + IPV6_ADD_MEMBERSHIP = 0xc + IPV6_AIXRAWSOCKET = 0x39 + IPV6_CHECKSUM = 0x27 + IPV6_DONTFRAG = 0x2d + IPV6_DROP_MEMBERSHIP = 0xd + IPV6_DSTOPTS = 0x36 + IPV6_FLOWINFO_FLOWLABEL = 0xffffff + IPV6_FLOWINFO_PRIFLOW = 0xfffffff + IPV6_FLOWINFO_PRIORITY = 0xf000000 + IPV6_FLOWINFO_SRFLAG = 0x10000000 + IPV6_FLOWINFO_VERSION = 0xf0000000 + IPV6_HOPLIMIT = 0x28 + IPV6_HOPOPTS = 0x34 + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MIPDSTOPTS = 0x36 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_NOPROBE = 0x1c + IPV6_PATHMTU = 0x2e + IPV6_PKTINFO = 0x21 + IPV6_PKTOPTIONS = 0x24 + IPV6_PRIORITY_10 = 0xa000000 + IPV6_PRIORITY_11 = 0xb000000 + IPV6_PRIORITY_12 = 0xc000000 + IPV6_PRIORITY_13 = 0xd000000 + IPV6_PRIORITY_14 = 0xe000000 + IPV6_PRIORITY_15 = 0xf000000 + IPV6_PRIORITY_8 = 0x8000000 + IPV6_PRIORITY_9 = 0x9000000 + IPV6_PRIORITY_BULK = 0x4000000 + IPV6_PRIORITY_CONTROL = 0x7000000 + IPV6_PRIORITY_FILLER = 0x1000000 + IPV6_PRIORITY_INTERACTIVE = 0x6000000 + IPV6_PRIORITY_RESERVED1 = 0x3000000 + IPV6_PRIORITY_RESERVED2 = 0x5000000 + IPV6_PRIORITY_UNATTENDED = 0x2000000 + IPV6_PRIORITY_UNCHARACTERIZED = 0x0 + IPV6_RECVDSTOPTS = 0x38 + IPV6_RECVHOPLIMIT = 0x29 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVHOPS = 0x22 + IPV6_RECVIF = 0x1e + IPV6_RECVPATHMTU = 0x2f + IPV6_RECVPKTINFO = 0x23 + IPV6_RECVRTHDR = 0x33 + IPV6_RECVSRCRT = 0x1d + IPV6_RECVTCLASS = 0x2a + IPV6_RTHDR = 0x32 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RTHDR_TYPE_2 = 0x2 + IPV6_SENDIF = 0x1f + IPV6_SRFLAG_LOOSE = 0x0 + IPV6_SRFLAG_STRICT = 0x10000000 + IPV6_TCLASS = 0x2b + IPV6_TOKEN_LENGTH = 0x40 + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2c + IPV6_V6ONLY = 0x25 + IPV6_VERSION = 0x60000000 + IP_ADDRFORM = 0x16 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x3c + IP_BLOCK_SOURCE = 0x3a + IP_BROADCAST_IF = 0x10 + IP_CACHE_LINE_SIZE = 0x80 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPMODE = 0x11 + IP_DONTFRAG = 0x19 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x3d + IP_FINDPMTU = 0x1a + IP_HDRINCL = 0x2 + IP_INC_MEMBERSHIPS = 0x14 + IP_INIT_MEMBERSHIP = 0x14 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_HOPS = 0xa + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OPT = 0x1b + IP_OPTIONS = 0x1 + IP_PMTUAGE = 0x1b + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVIFINFO = 0xf + IP_RECVINTERFACE = 0x20 + IP_RECVMACHDR = 0xe + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x22 + IP_RETOPTS = 0x8 + IP_SOURCE_FILTER = 0x48 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x3b + IP_UNICAST_HOPS = 0x4 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x800 + IXANY = 0x1000 + IXOFF = 0x400 + IXON = 0x200 + I_FLUSH = 0x20005305 + LNOFLSH = 0x8000 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x10 + MAP_ANONYMOUS = 0x10 + MAP_FILE = 0x0 + MAP_FIXED = 0x100 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_TYPE = 0xf0 + MAP_VARIABLE = 0x0 + MCL_CURRENT = 0x100 + MCL_FUTURE = 0x200 + MSG_ANY = 0x4 + MSG_ARGEXT = 0x400 + MSG_BAND = 0x2 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_EOR = 0x8 + MSG_HIPRI = 0x1 + MSG_MAXIOVLEN = 0x10 + MSG_MPEG2 = 0x80 + MSG_NONBLOCK = 0x4000 + MSG_NOSIGNAL = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x200 + MS_ASYNC = 0x10 + MS_EINTR = 0x80 + MS_INVALIDATE = 0x40 + MS_PER_SEC = 0x3e8 + MS_SYNC = 0x20 + NL0 = 0x0 + NL1 = 0x4000 + NL2 = 0x8000 + NL3 = 0xc000 + NLDLY = 0x4000 + NOFLSH = 0x80 + NOFLUSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + ONOEOT = 0x80000 + OPOST = 0x1 + OXTABS = 0x40000 + O_ACCMODE = 0x23 + O_APPEND = 0x8 + O_CIO = 0x80 + O_CIOR = 0x800000000 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DEFER = 0x2000 + O_DELAY = 0x4000 + O_DIRECT = 0x8000000 + O_DIRECTORY = 0x80000 + O_DSYNC = 0x400000 + O_EFSOFF = 0x400000000 + O_EFSON = 0x200000000 + O_EXCL = 0x400 + O_EXEC = 0x20 + O_LARGEFILE = 0x4000000 + O_NDELAY = 0x8000 + O_NOCACHE = 0x100000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x1000000 + O_NONBLOCK = 0x4 + O_NONE = 0x3 + O_NSHARE = 0x10000 + O_RAW = 0x100000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSHARE = 0x1000 + O_RSYNC = 0x200000 + O_SEARCH = 0x20 + O_SNAPSHOT = 0x40 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_TTY_INIT = 0x0 + O_WRONLY = 0x1 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_64BIT = 0x20 + PR_ADDR = 0x2 + PR_ARGEXT = 0x400 + PR_ATOMIC = 0x1 + PR_CONNREQUIRED = 0x4 + PR_FASTHZ = 0x5 + PR_INP = 0x40 + PR_INTRLEVEL = 0x8000 + PR_MLS = 0x100 + PR_MLS_1_LABEL = 0x200 + PR_NOEOR = 0x4000 + PR_RIGHTS = 0x10 + PR_SLOWHZ = 0x2 + PR_WANTRCVD = 0x8 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x9 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DOWNSTREAM = 0x100 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTC_IA64 = 0x3 + RTC_POWER = 0x1 + RTC_POWER_PC = 0x2 + RTF_ACTIVE_DGD = 0x1000000 + RTF_BCE = 0x80000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_BUL = 0x2000 + RTF_CLONE = 0x10000 + RTF_CLONED = 0x20000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FREE_IN_PROG = 0x4000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PERMANENT6 = 0x8000000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_SMALLMTU = 0x40000 + RTF_STATIC = 0x800 + RTF_STOPSRCH = 0x2000000 + RTF_UNREACHABLE = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_EXPIRE = 0xf + RTM_GET = 0x4 + RTM_GETNEXT = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTLOST = 0x10 + RTM_RTTUNIT = 0xf4240 + RTM_SAMEADDR = 0x12 + RTM_SET = 0x13 + RTM_VERSION = 0x2 + RTM_VERSION_GR = 0x4 + RTM_VERSION_GR_COMPAT = 0x3 + RTM_VERSION_POLICY = 0x5 + RTM_VERSION_POLICY_EXT = 0x6 + RTM_VERSION_POLICY_PRFN = 0x7 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIGMAX64 = 0xff + SIGQUEUE_MAX = 0x20 + SIOCADDIFVIPA = 0x20006942 + SIOCADDMTU = -0x7ffb9690 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDNETID = -0x7fd796a9 + SIOCADDRT = -0x7fc78df6 + SIOCAIFADDR = -0x7fbf96e6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fb396e0 + SIOCDELIFVIPA = 0x20006943 + SIOCDELMTU = -0x7ffb968f + SIOCDELMULTI = -0x7fdf96ce + SIOCDELPMTU = -0x7fd78ff6 + SIOCDELRT = -0x7fc78df5 + SIOCDIFADDR = -0x7fd796e7 + SIOCDNETOPT = -0x3ffe9680 + SIOCDX25XLATE = -0x7fd7969b + SIOCFIFADDR = -0x7fdf966d + SIOCGARP = -0x3fb396da + SIOCGETMTUS = 0x2000696f + SIOCGETSGCNT = -0x3feb8acc + SIOCGETVIFCNT = -0x3feb8acd + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fd796df + SIOCGIFADDRS = 0x2000698c + SIOCGIFBAUDRATE = -0x3fd79693 + SIOCGIFBRDADDR = -0x3fd796dd + SIOCGIFCONF = -0x3fef96bb + SIOCGIFCONFGLOB = -0x3fef9670 + SIOCGIFDSTADDR = -0x3fd796de + SIOCGIFFLAGS = -0x3fd796ef + SIOCGIFGIDLIST = 0x20006968 + SIOCGIFHWADDR = -0x3fab966b + SIOCGIFMETRIC = -0x3fd796e9 + SIOCGIFMTU = -0x3fd796aa + SIOCGIFNETMASK = -0x3fd796db + SIOCGIFOPTIONS = -0x3fd796d6 + SIOCGISNO = -0x3fd79695 + SIOCGLOADF = -0x3ffb967e + SIOCGLOWAT = 0x40047303 + SIOCGNETOPT = -0x3ffe96a5 + SIOCGNETOPT1 = -0x3fdf967f + SIOCGNMTUS = 0x2000696e + SIOCGPGRP = 0x40047309 + SIOCGSIZIFCONF = 0x4004696a + SIOCGSRCFILTER = -0x3fe796cb + SIOCGTUNEPHASE = -0x3ffb9676 + SIOCGX25XLATE = -0x3fd7969c + SIOCIFATTACH = -0x7fdf9699 + SIOCIFDETACH = -0x7fdf969a + SIOCIFGETPKEY = -0x7fdf969b + SIOCIF_ATM_DARP = -0x7fdf9683 + SIOCIF_ATM_DUMPARP = -0x7fdf9685 + SIOCIF_ATM_GARP = -0x7fdf9682 + SIOCIF_ATM_IDLE = -0x7fdf9686 + SIOCIF_ATM_SARP = -0x7fdf9681 + SIOCIF_ATM_SNMPARP = -0x7fdf9687 + SIOCIF_ATM_SVC = -0x7fdf9684 + SIOCIF_ATM_UBR = -0x7fdf9688 + SIOCIF_DEVHEALTH = -0x7ffb966c + SIOCIF_IB_ARP_INCOMP = -0x7fdf9677 + SIOCIF_IB_ARP_TIMER = -0x7fdf9678 + SIOCIF_IB_CLEAR_PINFO = -0x3fdf966f + SIOCIF_IB_DEL_ARP = -0x7fdf967f + SIOCIF_IB_DEL_PINFO = -0x3fdf9670 + SIOCIF_IB_DUMP_ARP = -0x7fdf9680 + SIOCIF_IB_GET_ARP = -0x7fdf967e + SIOCIF_IB_GET_INFO = -0x3f879675 + SIOCIF_IB_GET_STATS = -0x3f879672 + SIOCIF_IB_NOTIFY_ADDR_REM = -0x3f87966a + SIOCIF_IB_RESET_STATS = -0x3f879671 + SIOCIF_IB_RESIZE_CQ = -0x7fdf9679 + SIOCIF_IB_SET_ARP = -0x7fdf967d + SIOCIF_IB_SET_PKEY = -0x7fdf967c + SIOCIF_IB_SET_PORT = -0x7fdf967b + SIOCIF_IB_SET_QKEY = -0x7fdf9676 + SIOCIF_IB_SET_QSIZE = -0x7fdf967a + SIOCLISTIFVIPA = 0x20006944 + SIOCSARP = -0x7fb396e2 + SIOCSHIWAT = 0xffffffff80047300 + SIOCSIFADDR = -0x7fd796f4 + SIOCSIFADDRORI = -0x7fdb9673 + SIOCSIFBRDADDR = -0x7fd796ed + SIOCSIFDSTADDR = -0x7fd796f2 + SIOCSIFFLAGS = -0x7fd796f0 + SIOCSIFGIDLIST = 0x20006969 + SIOCSIFMETRIC = -0x7fd796e8 + SIOCSIFMTU = -0x7fd796a8 + SIOCSIFNETDUMP = -0x7fd796e4 + SIOCSIFNETMASK = -0x7fd796ea + SIOCSIFOPTIONS = -0x7fd796d7 + SIOCSIFSUBCHAN = -0x7fd796e5 + SIOCSISNO = -0x7fd79694 + SIOCSLOADF = -0x3ffb967d + SIOCSLOWAT = 0xffffffff80047302 + SIOCSNETOPT = -0x7ffe96a6 + SIOCSPGRP = 0xffffffff80047308 + SIOCSX25XLATE = -0x7fd7969d + SOCK_CONN_DGRAM = 0x6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x400 + SO_ACCEPTCONN = 0x2 + SO_AUDIT = 0x8000 + SO_BROADCAST = 0x20 + SO_CKSUMRECV = 0x800 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_KERNACCEPT = 0x2000 + SO_LINGER = 0x80 + SO_NOMULTIPATH = 0x4000 + SO_NOREUSEADDR = 0x1000 + SO_OOBINLINE = 0x100 + SO_PEERID = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMPNS = 0x100a + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USE_IFBUFS = 0x400 + S_BANDURG = 0x400 + S_EMODFMT = 0x3c000000 + S_ENFMT = 0x400 + S_ERROR = 0x100 + S_HANGUP = 0x200 + S_HIPRI = 0x2 + S_ICRYPTO = 0x80000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFJOURNAL = 0x10000 + S_IFLNK = 0xa000 + S_IFMPX = 0x2200 + S_IFMT = 0xf000 + S_IFPDIR = 0x4000000 + S_IFPSDIR = 0x8000000 + S_IFPSSDIR = 0xc000000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFSYSEA = 0x30000000 + S_INPUT = 0x1 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_ITCB = 0x1000000 + S_ITP = 0x800000 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXACL = 0x2000000 + S_IXATTR = 0x40000 + S_IXGRP = 0x8 + S_IXINTERFACE = 0x100000 + S_IXMOD = 0x40000000 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_MSG = 0x8 + S_OUTPUT = 0x4 + S_RDBAND = 0x20 + S_RDNORM = 0x10 + S_RESERVED1 = 0x20000 + S_RESERVED2 = 0x200000 + S_RESERVED3 = 0x400000 + S_RESERVED4 = 0x80000000 + S_RESFMT1 = 0x10000000 + S_RESFMT10 = 0x34000000 + S_RESFMT11 = 0x38000000 + S_RESFMT12 = 0x3c000000 + S_RESFMT2 = 0x14000000 + S_RESFMT3 = 0x18000000 + S_RESFMT4 = 0x1c000000 + S_RESFMT5 = 0x20000000 + S_RESFMT6 = 0x24000000 + S_RESFMT7 = 0x28000000 + S_RESFMT8 = 0x2c000000 + S_WRBAND = 0x80 + S_WRNORM = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TCFLSH = 0x540c + TCGETA = 0x5405 + TCGETS = 0x5401 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800 + TCP_ACLADD = 0x23 + TCP_ACLBIND = 0x26 + TCP_ACLCLEAR = 0x22 + TCP_ACLDEL = 0x24 + TCP_ACLDENY = 0x8 + TCP_ACLFLUSH = 0x21 + TCP_ACLGID = 0x1 + TCP_ACLLS = 0x25 + TCP_ACLSUBNET = 0x4 + TCP_ACLUID = 0x2 + TCP_CWND_DF = 0x16 + TCP_CWND_IF = 0x15 + TCP_DELAY_ACK_FIN = 0x2 + TCP_DELAY_ACK_SYN = 0x1 + TCP_FASTNAME = 0x101080a + TCP_KEEPCNT = 0x13 + TCP_KEEPIDLE = 0x11 + TCP_KEEPINTVL = 0x12 + TCP_LSPRIV = 0x29 + TCP_LUID = 0x20 + TCP_MAXBURST = 0x8 + TCP_MAXDF = 0x64 + TCP_MAXIF = 0x64 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAXWINDOWSCALE = 0xe + TCP_MAX_SACK = 0x4 + TCP_MSS = 0x5b4 + TCP_NODELAY = 0x1 + TCP_NODELAYACK = 0x14 + TCP_NOREDUCE_CWND_EXIT_FRXMT = 0x19 + TCP_NOREDUCE_CWND_IN_FRXMT = 0x18 + TCP_NOTENTER_SSTART = 0x17 + TCP_OPT = 0x19 + TCP_RFC1323 = 0x4 + TCP_SETPRIV = 0x27 + TCP_STDURG = 0x10 + TCP_TIMESTAMP_OPTLEN = 0xc + TCP_UNSETPRIV = 0x28 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETSF = 0x5404 + TCSETSW = 0x5403 + TCXONC = 0x540b + TIOC = 0x5400 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0xffffffff80047462 + TIOCEXCL = 0x2000740d + TIOCFLUSH = 0xffffffff80047410 + TIOCGETC = 0x40067412 + TIOCGETD = 0x40047400 + TIOCGETP = 0x40067408 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047448 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCHPCL = 0x20007402 + TIOCLBIC = 0xffffffff8004747e + TIOCLBIS = 0xffffffff8004747f + TIOCLGET = 0x4004747c + TIOCLSET = 0xffffffff8004747d + TIOCMBIC = 0xffffffff8004746b + TIOCMBIS = 0xffffffff8004746c + TIOCMGET = 0x4004746a + TIOCMIWAIT = 0xffffffff80047464 + TIOCMODG = 0x40047403 + TIOCMODS = 0xffffffff80047404 + TIOCMSET = 0xffffffff8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0xffffffff80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0xffffffff80047469 + TIOCSBRK = 0x2000747b + TIOCSDTR = 0x20007479 + TIOCSETC = 0xffffffff80067411 + TIOCSETD = 0xffffffff80047401 + TIOCSETN = 0xffffffff8006740a + TIOCSETP = 0xffffffff80067409 + TIOCSLTC = 0xffffffff80067475 + TIOCSPGRP = 0xffffffff80047476 + TIOCSSIZE = 0xffffffff80087467 + TIOCSTART = 0x2000746e + TIOCSTI = 0xffffffff80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0xffffffff80087467 + TIOCUCNTL = 0xffffffff80047466 + TOSTOP = 0x10000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x3 + VDISCRD = 0xc + VDSUSP = 0xa + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xe + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0x7 + VSTOP = 0x8 + VSTRT = 0x7 + VSUSP = 0x9 + VT0 = 0x0 + VT1 = 0x8000 + VTDELAY = 0x2000 + VTDLY = 0x8000 + VTIME = 0x5 + VWERSE = 0xd + WPARSTART = 0x1 + WPARSTOP = 0x2 + WPARTTYNAME = "Global" + XCASE = 0x4 + XTABS = 0xc00 + _FDATAFLUSH = 0x2000000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x43) + EADDRNOTAVAIL = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x42) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x38) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x78) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x75) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECLONEME = syscall.Errno(0x52) + ECONNABORTED = syscall.Errno(0x48) + ECONNREFUSED = syscall.Errno(0x4f) + ECONNRESET = syscall.Errno(0x49) + ECORRUPT = syscall.Errno(0x59) + EDEADLK = syscall.Errno(0x2d) + EDESTADDREQ = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x3a) + EDIST = syscall.Errno(0x35) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x58) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFORMAT = syscall.Errno(0x30) + EHOSTDOWN = syscall.Errno(0x50) + EHOSTUNREACH = syscall.Errno(0x51) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x74) + EINPROGRESS = syscall.Errno(0x37) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x4b) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x55) + EMEDIA = syscall.Errno(0x6e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x3b) + EMULTIHOP = syscall.Errno(0x7d) + ENAMETOOLONG = syscall.Errno(0x56) + ENETDOWN = syscall.Errno(0x45) + ENETRESET = syscall.Errno(0x47) + ENETUNREACH = syscall.Errno(0x46) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x70) + ENOBUFS = syscall.Errno(0x4a) + ENOCONNECT = syscall.Errno(0x32) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x7a) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x31) + ENOLINK = syscall.Errno(0x7e) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENOPROTOOPT = syscall.Errno(0x3d) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x76) + ENOSTR = syscall.Errno(0x7b) + ENOSYS = syscall.Errno(0x6d) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x4c) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x11) + ENOTREADY = syscall.Errno(0x2e) + ENOTRECOVERABLE = syscall.Errno(0x5e) + ENOTRUST = syscall.Errno(0x72) + ENOTSOCK = syscall.Errno(0x39) + ENOTSUP = syscall.Errno(0x7c) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x40) + EOVERFLOW = syscall.Errno(0x7f) + EOWNERDEAD = syscall.Errno(0x5f) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x41) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x53) + EPROTO = syscall.Errno(0x79) + EPROTONOSUPPORT = syscall.Errno(0x3e) + EPROTOTYPE = syscall.Errno(0x3c) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x5d) + ERESTART = syscall.Errno(0x52) + EROFS = syscall.Errno(0x1e) + ESAD = syscall.Errno(0x71) + ESHUTDOWN = syscall.Errno(0x4d) + ESOCKTNOSUPPORT = syscall.Errno(0x3f) + ESOFT = syscall.Errno(0x6f) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x34) + ESYSERROR = syscall.Errno(0x5a) + ETIME = syscall.Errno(0x77) + ETIMEDOUT = syscall.Errno(0x4e) + ETOOMANYREFS = syscall.Errno(0x73) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x54) + EWOULDBLOCK = syscall.Errno(0xb) + EWRPROTECT = syscall.Errno(0x2f) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGAIO = syscall.Signal(0x17) + SIGALRM = syscall.Signal(0xe) + SIGALRM1 = syscall.Signal(0x26) + SIGBUS = syscall.Signal(0xa) + SIGCAPI = syscall.Signal(0x31) + SIGCHLD = syscall.Signal(0x14) + SIGCLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGCPUFAIL = syscall.Signal(0x3b) + SIGDANGER = syscall.Signal(0x21) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGGRANT = syscall.Signal(0x3c) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOINT = syscall.Signal(0x10) + SIGIOT = syscall.Signal(0x6) + SIGKAP = syscall.Signal(0x3c) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x6) + SIGMAX = syscall.Signal(0xff) + SIGMAX32 = syscall.Signal(0x3f) + SIGMIGRATE = syscall.Signal(0x23) + SIGMSG = syscall.Signal(0x1b) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x17) + SIGPRE = syscall.Signal(0x24) + SIGPROF = syscall.Signal(0x20) + SIGPTY = syscall.Signal(0x17) + SIGPWR = syscall.Signal(0x1d) + SIGQUIT = syscall.Signal(0x3) + SIGRECONFIG = syscall.Signal(0x3a) + SIGRETRACT = syscall.Signal(0x3d) + SIGSAK = syscall.Signal(0x3f) + SIGSEGV = syscall.Signal(0xb) + SIGSOUND = syscall.Signal(0x3e) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGSYSERROR = syscall.Signal(0x30) + SIGTALRM = syscall.Signal(0x26) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVIRT = syscall.Signal(0x25) + SIGVTALRM = syscall.Signal(0x22) + SIGWAITING = syscall.Signal(0x27) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "not owner"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "I/O error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "arg list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file number"}, + {10, "ECHILD", "no child processes"}, + {11, "EWOULDBLOCK", "resource temporarily unavailable"}, + {12, "ENOMEM", "not enough space"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "ENOTEMPTY", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "file table overflow"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "not a typewriter"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "deadlock condition if locked"}, + {46, "ENOTREADY", "device not ready"}, + {47, "EWRPROTECT", "write-protected media"}, + {48, "EFORMAT", "unformatted or incompatible media"}, + {49, "ENOLCK", "no locks available"}, + {50, "ENOCONNECT", "cannot Establish Connection"}, + {52, "ESTALE", "missing file or filesystem"}, + {53, "EDIST", "requests blocked by Administrator"}, + {55, "EINPROGRESS", "operation now in progress"}, + {56, "EALREADY", "operation already in progress"}, + {57, "ENOTSOCK", "socket operation on non-socket"}, + {58, "EDESTADDREQ", "destination address required"}, + {59, "EMSGSIZE", "message too long"}, + {60, "EPROTOTYPE", "protocol wrong type for socket"}, + {61, "ENOPROTOOPT", "protocol not available"}, + {62, "EPROTONOSUPPORT", "protocol not supported"}, + {63, "ESOCKTNOSUPPORT", "socket type not supported"}, + {64, "EOPNOTSUPP", "operation not supported on socket"}, + {65, "EPFNOSUPPORT", "protocol family not supported"}, + {66, "EAFNOSUPPORT", "addr family not supported by protocol"}, + {67, "EADDRINUSE", "address already in use"}, + {68, "EADDRNOTAVAIL", "can't assign requested address"}, + {69, "ENETDOWN", "network is down"}, + {70, "ENETUNREACH", "network is unreachable"}, + {71, "ENETRESET", "network dropped connection on reset"}, + {72, "ECONNABORTED", "software caused connection abort"}, + {73, "ECONNRESET", "connection reset by peer"}, + {74, "ENOBUFS", "no buffer space available"}, + {75, "EISCONN", "socket is already connected"}, + {76, "ENOTCONN", "socket is not connected"}, + {77, "ESHUTDOWN", "can't send after socket shutdown"}, + {78, "ETIMEDOUT", "connection timed out"}, + {79, "ECONNREFUSED", "connection refused"}, + {80, "EHOSTDOWN", "host is down"}, + {81, "EHOSTUNREACH", "no route to host"}, + {82, "ERESTART", "restart the system call"}, + {83, "EPROCLIM", "too many processes"}, + {84, "EUSERS", "too many users"}, + {85, "ELOOP", "too many levels of symbolic links"}, + {86, "ENAMETOOLONG", "file name too long"}, + {88, "EDQUOT", "disk quota exceeded"}, + {89, "ECORRUPT", "invalid file system control data detected"}, + {90, "ESYSERROR", "for future use "}, + {93, "EREMOTE", "item is not local to host"}, + {94, "ENOTRECOVERABLE", "state not recoverable "}, + {95, "EOWNERDEAD", "previous owner died "}, + {109, "ENOSYS", "function not implemented"}, + {110, "EMEDIA", "media surface error"}, + {111, "ESOFT", "I/O completed, but needs relocation"}, + {112, "ENOATTR", "no attribute found"}, + {113, "ESAD", "security Authentication Denied"}, + {114, "ENOTRUST", "not a Trusted Program"}, + {115, "ETOOMANYREFS", "too many references: can't splice"}, + {116, "EILSEQ", "invalid wide character"}, + {117, "ECANCELED", "asynchronous I/O cancelled"}, + {118, "ENOSR", "out of STREAMS resources"}, + {119, "ETIME", "system call timed out"}, + {120, "EBADMSG", "next message has wrong type"}, + {121, "EPROTO", "error in protocol"}, + {122, "ENODATA", "no message on stream head read q"}, + {123, "ENOSTR", "fd not associated with a stream"}, + {124, "ENOTSUP", "unsupported attribute value"}, + {125, "EMULTIHOP", "multihop is not allowed"}, + {126, "ENOLINK", "the server link has been severed"}, + {127, "EOVERFLOW", "value too large to be stored in data type"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "IOT/Abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible/complete"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {27, "SIGMSG", "input device data"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGPWR", "power-failure"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPROF", "profiling timer expired"}, + {33, "SIGDANGER", "paging space low"}, + {34, "SIGVTALRM", "virtual timer expired"}, + {35, "SIGMIGRATE", "signal 35"}, + {36, "SIGPRE", "signal 36"}, + {37, "SIGVIRT", "signal 37"}, + {38, "SIGTALRM", "signal 38"}, + {39, "SIGWAITING", "signal 39"}, + {48, "SIGSYSERROR", "signal 48"}, + {49, "SIGCAPI", "signal 49"}, + {58, "SIGRECONFIG", "signal 58"}, + {59, "SIGCPUFAIL", "CPU Failure Predicted"}, + {60, "SIGGRANT", "monitor mode granted"}, + {61, "SIGRETRACT", "monitor mode retracted"}, + {62, "SIGSOUND", "sound completed"}, + {63, "SIGMAX32", "secure attention"}, + {255, "SIGMAX", "signal 255"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go new file mode 100644 index 00000000000..3b39d7408ad --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go @@ -0,0 +1,1783 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x8008427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x300 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc0086924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6981 + SIOCRSLVMULTI = 0xc008693b + SIOCSDRVSPEC = 0x801c697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40087458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x20 + WSTOPPED = 0x8 + WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "ENOTSUP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EPWROFF", "device power is off"}, + {83, "EDEVERR", "device error"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EBADEXEC", "bad executable (or shared library)"}, + {86, "EBADARCH", "bad CPU type in executable"}, + {87, "ESHLIBVERS", "shared library version mismatch"}, + {88, "EBADMACHO", "malformed Mach-o file"}, + {89, "ECANCELED", "operation canceled"}, + {90, "EIDRM", "identifier removed"}, + {91, "ENOMSG", "no message of desired type"}, + {92, "EILSEQ", "illegal byte sequence"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EBADMSG", "bad message"}, + {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, + {96, "ENODATA", "no message available on STREAM"}, + {97, "ENOLINK", "ENOLINK (Reserved)"}, + {98, "ENOSR", "no STREAM resources"}, + {99, "ENOSTR", "not a STREAM"}, + {100, "EPROTO", "protocol error"}, + {101, "ETIME", "STREAM ioctl timeout"}, + {102, "EOPNOTSUPP", "operation not supported on socket"}, + {103, "ENOPOLICY", "policy not found"}, + {104, "ENOTRECOVERABLE", "state not recoverable"}, + {105, "EOWNERDEAD", "previous owner died"}, + {106, "EQFULL", "interface output queue is full"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go new file mode 100644 index 00000000000..8fe5547775b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -0,0 +1,1783 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x300 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "ENOTSUP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EPWROFF", "device power is off"}, + {83, "EDEVERR", "device error"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EBADEXEC", "bad executable (or shared library)"}, + {86, "EBADARCH", "bad CPU type in executable"}, + {87, "ESHLIBVERS", "shared library version mismatch"}, + {88, "EBADMACHO", "malformed Mach-o file"}, + {89, "ECANCELED", "operation canceled"}, + {90, "EIDRM", "identifier removed"}, + {91, "ENOMSG", "no message of desired type"}, + {92, "EILSEQ", "illegal byte sequence"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EBADMSG", "bad message"}, + {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, + {96, "ENODATA", "no message available on STREAM"}, + {97, "ENOLINK", "ENOLINK (Reserved)"}, + {98, "ENOSR", "no STREAM resources"}, + {99, "ENOSTR", "not a STREAM"}, + {100, "EPROTO", "protocol error"}, + {101, "ETIME", "STREAM ioctl timeout"}, + {102, "EOPNOTSUPP", "operation not supported on socket"}, + {103, "ENOPOLICY", "policy not found"}, + {104, "ENOTRECOVERABLE", "state not recoverable"}, + {105, "EOWNERDEAD", "previous owner died"}, + {106, "EQFULL", "interface output queue is full"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go new file mode 100644 index 00000000000..7a977770d0a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go @@ -0,0 +1,1783 @@ +// mkerrors.sh +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x300 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "ENOTSUP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EPWROFF", "device power is off"}, + {83, "EDEVERR", "device error"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EBADEXEC", "bad executable (or shared library)"}, + {86, "EBADARCH", "bad CPU type in executable"}, + {87, "ESHLIBVERS", "shared library version mismatch"}, + {88, "EBADMACHO", "malformed Mach-o file"}, + {89, "ECANCELED", "operation canceled"}, + {90, "EIDRM", "identifier removed"}, + {91, "ENOMSG", "no message of desired type"}, + {92, "EILSEQ", "illegal byte sequence"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EBADMSG", "bad message"}, + {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, + {96, "ENODATA", "no message available on STREAM"}, + {97, "ENOLINK", "ENOLINK (Reserved)"}, + {98, "ENOSR", "no STREAM resources"}, + {99, "ENOSTR", "not a STREAM"}, + {100, "EPROTO", "protocol error"}, + {101, "ETIME", "STREAM ioctl timeout"}, + {102, "EOPNOTSUPP", "operation not supported on socket"}, + {103, "ENOPOLICY", "policy not found"}, + {104, "ENOTRECOVERABLE", "state not recoverable"}, + {105, "EOWNERDEAD", "previous owner died"}, + {106, "EQFULL", "interface output queue is full"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go new file mode 100644 index 00000000000..6d56d8a059d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -0,0 +1,1783 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_PUNCHHOLE = 0x63 + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_TRIM_ACTIVE_FILE = 0x64 + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOW_ECN_MASK = 0x300 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTOS = 0x1b + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 + XATTR_CREATE = 0x2 + XATTR_NODEFAULT = 0x10 + XATTR_NOFOLLOW = 0x1 + XATTR_NOSECURITY = 0x8 + XATTR_REPLACE = 0x4 + XATTR_SHOWCOMPRESSION = 0x20 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "ENOTSUP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EPWROFF", "device power is off"}, + {83, "EDEVERR", "device error"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EBADEXEC", "bad executable (or shared library)"}, + {86, "EBADARCH", "bad CPU type in executable"}, + {87, "ESHLIBVERS", "shared library version mismatch"}, + {88, "EBADMACHO", "malformed Mach-o file"}, + {89, "ECANCELED", "operation canceled"}, + {90, "EIDRM", "identifier removed"}, + {91, "ENOMSG", "no message of desired type"}, + {92, "EILSEQ", "illegal byte sequence"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EBADMSG", "bad message"}, + {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, + {96, "ENODATA", "no message available on STREAM"}, + {97, "ENOLINK", "ENOLINK (Reserved)"}, + {98, "ENOSR", "no STREAM resources"}, + {99, "ENOSTR", "not a STREAM"}, + {100, "EPROTO", "protocol error"}, + {101, "ETIME", "STREAM ioctl timeout"}, + {102, "EOPNOTSUPP", "operation not supported on socket"}, + {103, "ENOPOLICY", "policy not found"}, + {104, "ENOTRECOVERABLE", "state not recoverable"}, + {105, "EOWNERDEAD", "previous owner died"}, + {106, "EQFULL", "interface output queue is full"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go new file mode 100644 index 00000000000..bbe6089bb7e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go @@ -0,0 +1,1650 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x21 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x23 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x22 + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DEFAULTBUFSIZE = 0x1000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MAX_CLONES = 0x80 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DBF = 0xf + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0x8 + EVFILT_FS = -0xa + EVFILT_MARKER = 0xf + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xa + EVFILT_TIMER = -0x7 + EVFILT_USER = -0x9 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_NODATA = 0x1000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTEXIT_LWP = 0x10000 + EXTEXIT_PROC = 0x0 + EXTEXIT_SETINT = 0x1 + EXTEXIT_SIMPLE = 0x0 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x118e72 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NPOLLING = 0x100000 + IFF_OACTIVE = 0x400 + IFF_OACTIVE_COMPAT = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_POLLING = 0x10000 + IFF_POLLING_COMPAT = 0x10000 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xf3 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SKIP = 0x39 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UNKNOWN = 0x102 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHLIM = 0x28 + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PKTOPTIONS = 0x34 + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_RESETLOG = 0x37 + IP_FW_X = 0x31 + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CONTROL_END = 0xb + MADV_CONTROL_START = 0xa + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_INVAL = 0xa + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SETMAP = 0xb + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_NOCORE = 0x20000 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_SIZEALIGN = 0x40000 + MAP_STACK = 0x400 + MAP_TRYFIXED = 0x10000 + MAP_VPAGETABLE = 0x2000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x20 + MNT_CMDFLAGS = 0xf0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x4 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SYNCHRONOUS = 0x2 + MNT_TRIM = 0x1000000 + MNT_UPDATE = 0x10000 + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0xf1f0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x1000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FBLOCKING = 0x10000 + MSG_FMASK = 0xffff0000 + MSG_FNONBLOCKING = 0x20000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_SYNC = 0x800 + MSG_TRUNC = 0x10 + MSG_UNUSED09 = 0x200 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x20000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x8000000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FAPPEND = 0x100000 + O_FASYNCWRITE = 0x800000 + O_FBLOCKING = 0x40000 + O_FMASK = 0xfc0000 + O_FNONBLOCKING = 0x80000 + O_FOFFSET = 0x200000 + O_FSYNC = 0x80 + O_FSYNCWRITE = 0x400000 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0xb + RTAX_MPLS1 = 0x8 + RTAX_MPLS2 = 0x9 + RTAX_MPLS3 = 0xa + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_MPLS1 = 0x100 + RTA_MPLS2 = 0x200 + RTA_MPLS3 = 0x400 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPLSOPS = 0x1000000 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x6 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_IWCAPSEGS = 0x400 + RTV_IWMAXSEGS = 0x200 + RTV_MSL = 0x100 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8040720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8040720b + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc0206926 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPOLLCPU = 0xc020697e + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFTSOLEN = 0xc0206980 + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFPOLLCPU = 0x8020697d + SIOCSIFTSOLEN = 0x8020697f + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_CPUHINT = 0x1030 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDSPACE = 0x100a + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDB = 0x9000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_FASTKEEP = 0x80 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x20 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0x100 + TCP_MIN_WINSHIFT = 0x5 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_SIGNATURE_ENABLE = 0x10 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCISPTMASTER = 0x20007455 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VCHECKPT = 0x13 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_BCACHE_SIZE_MAX = 0x0 + VM_SWZONE_SIZE_MAX = 0x4000000000 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EASYNC = syscall.Errno(0x63) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x63) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEDIUM = syscall.Errno(0x5d) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUNUSED94 = syscall.Errno(0x5e) + EUNUSED95 = syscall.Errno(0x5f) + EUNUSED96 = syscall.Errno(0x60) + EUNUSED97 = syscall.Errno(0x61) + EUNUSED98 = syscall.Errno(0x62) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCKPT = syscall.Signal(0x21) + SIGCKPTEXIT = syscall.Signal(0x22) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOMEDIUM", "no medium found"}, + {94, "EUNUSED94", "unknown error: 94"}, + {95, "EUNUSED95", "unknown error: 95"}, + {96, "EUNUSED96", "unknown error: 96"}, + {97, "EUNUSED97", "unknown error: 97"}, + {98, "EUNUSED98", "unknown error: 98"}, + {99, "ELAST", "unknown error: 99"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread Scheduler"}, + {33, "SIGCKPT", "checkPoint"}, + {34, "SIGCKPTEXIT", "checkPointExit"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go new file mode 100644 index 00000000000..d2bbaabc87f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go @@ -0,0 +1,1793 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x104 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc028698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOTCAPABLE", "capabilities insufficient"}, + {94, "ECAPMODE", "not permitted in capability mode"}, + {95, "ENOTRECOVERABLE", "state not recoverable"}, + {96, "EOWNERDEAD", "previous owner died"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "unknown signal"}, + {33, "SIGLIBRT", "unknown signal"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go new file mode 100644 index 00000000000..4f8db783d3c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go @@ -0,0 +1,1794 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4008427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x40184280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x80104282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSETZBUF = 0x80184281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffffffffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x104 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80000 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc030698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOTCAPABLE", "capabilities insufficient"}, + {94, "ECAPMODE", "not permitted in capability mode"}, + {95, "ENOTRECOVERABLE", "state not recoverable"}, + {96, "EOWNERDEAD", "previous owner died"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "unknown signal"}, + {33, "SIGLIBRT", "unknown signal"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go new file mode 100644 index 00000000000..53e5de60518 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go @@ -0,0 +1,1802 @@ +// mkerrors.sh +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_CLASS_NETBSD_RAWAF = 0x2240000 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x109 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GUARD = 0x2000 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGHWADDR = 0xc020693e + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc028698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "ECANCELED", "operation canceled"}, + {86, "EILSEQ", "illegal byte sequence"}, + {87, "ENOATTR", "attribute not found"}, + {88, "EDOOFUS", "programming error"}, + {89, "EBADMSG", "bad message"}, + {90, "EMULTIHOP", "multihop attempted"}, + {91, "ENOLINK", "link has been severed"}, + {92, "EPROTO", "protocol error"}, + {93, "ENOTCAPABLE", "capabilities insufficient"}, + {94, "ECAPMODE", "not permitted in capability mode"}, + {95, "ENOTRECOVERABLE", "state not recoverable"}, + {96, "EOWNERDEAD", "previous owner died"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "unknown signal"}, + {33, "SIGLIBRT", "unknown signal"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_386.go new file mode 100644 index 00000000000..673152b9414 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -0,0 +1,2704 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x80041270 + BLKBSZSET = 0x40041271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80041272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FP_XSTATE_MAGIC2 = 0x46505845 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x8000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TRACEME = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8004700d + RTC_EPOCH_SET = 0x4004700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x8004700b + RTC_IRQP_SET = 0x4004700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x801c7011 + RTC_PLL_SET = 0x401c7012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x100 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x800854db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + X86_FXSR_MAGIC = 0x0 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go new file mode 100644 index 00000000000..5735bcf3c26 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -0,0 +1,2704 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FP_XSTATE_MAGIC2 = 0x46505845 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ARCH_PRCTL = 0x1e + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TRACEME = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x100 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go new file mode 100644 index 00000000000..d8e8442e55b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -0,0 +1,2710 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x80041270 + BLKBSZSET = 0x40041271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80041272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x20000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETCRUNCHREGS = 0x19 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFDPIC = 0x1f + PTRACE_GETFDPIC_EXEC = 0x0 + PTRACE_GETFDPIC_INTERP = 0x1 + PTRACE_GETFPREGS = 0xe + PTRACE_GETHBPREGS = 0x1d + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVFPREGS = 0x1b + PTRACE_GETWMMXREGS = 0x12 + PTRACE_GET_THREAD_AREA = 0x16 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETCRUNCHREGS = 0x1a + PTRACE_SETFPREGS = 0xf + PTRACE_SETHBPREGS = 0x1e + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVFPREGS = 0x1c + PTRACE_SETWMMXREGS = 0x13 + PTRACE_SET_SYSCALL = 0x17 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_DATA_ADDR = 0x10004 + PT_TEXT_ADDR = 0x10000 + PT_TEXT_END_ADDR = 0x10008 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8004700d + RTC_EPOCH_SET = 0x4004700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x8004700b + RTC_IRQP_SET = 0x4004700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x801c7011 + RTC_PLL_SET = 0x401c7012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x100 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x800854db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go new file mode 100644 index 00000000000..5d79b789b29 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -0,0 +1,2695 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ESR_MAGIC = 0x45535201 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + EXTRA_MAGIC = 0x45585401 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FPSIMD_MAGIC = 0x46508001 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SVE_MAGIC = 0x53564501 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x100 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go new file mode 100644 index 00000000000..3c91615c850 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -0,0 +1,2711 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x21 + F_GETLK64 = 0x21 + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x22 + F_SETLK64 = 0x22 + F_SETLKW = 0x23 + F_SETLKW64 = 0x23 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4004700d + RTC_EPOCH_SET = 0x8004700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x4004700b + RTC_IRQP_SET = 0x8004700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x401c7011 + RTC_PLL_SET = 0x801c7012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x8000 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "resource deadlock avoided"}, + {46, "ENOLCK", "no locks available"}, + {50, "EBADE", "invalid exchange"}, + {51, "EBADR", "invalid request descriptor"}, + {52, "EXFULL", "exchange full"}, + {53, "ENOANO", "no anode"}, + {54, "EBADRQC", "invalid request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "bad message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in too many shared libraries"}, + {87, "ELIBEXEC", "cannot exec a shared library directly"}, + {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {89, "ENOSYS", "function not implemented"}, + {90, "ELOOP", "too many levels of symbolic links"}, + {91, "ERESTART", "interrupted system call should be restarted"}, + {92, "ESTRPIPE", "streams pipe error"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "protocol not available"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "ENOTSUP", "operation not supported"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection on reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {135, "EUCLEAN", "structure needs cleaning"}, + {137, "ENOTNAM", "not a XENIX named type file"}, + {138, "ENAVAIL", "no XENIX semaphores available"}, + {139, "EISNAM", "is a named type file"}, + {140, "EREMOTEIO", "remote I/O error"}, + {141, "EINIT", "unknown error 141"}, + {142, "EREMDEV", "unknown error 142"}, + {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale file handle"}, + {158, "ECANCELED", "operation canceled"}, + {159, "ENOMEDIUM", "no medium found"}, + {160, "EMEDIUMTYPE", "wrong medium type"}, + {161, "ENOKEY", "required key not available"}, + {162, "EKEYEXPIRED", "key has expired"}, + {163, "EKEYREVOKED", "key has been revoked"}, + {164, "EKEYREJECTED", "key was rejected by service"}, + {165, "EOWNERDEAD", "owner died"}, + {166, "ENOTRECOVERABLE", "state not recoverable"}, + {167, "ERFKILL", "operation not possible due to RF-kill"}, + {168, "EHWPOISON", "memory page has hardware error"}, + {1133, "EDQUOT", "disk quota exceeded"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGCHLD", "child exited"}, + {19, "SIGPWR", "power failure"}, + {20, "SIGWINCH", "window changed"}, + {21, "SIGURG", "urgent I/O condition"}, + {22, "SIGIO", "I/O possible"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual timer expired"}, + {29, "SIGPROF", "profiling timer expired"}, + {30, "SIGXCPU", "CPU time limit exceeded"}, + {31, "SIGXFSZ", "file size limit exceeded"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go new file mode 100644 index 00000000000..e1f86c1cd9f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -0,0 +1,2711 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x8000 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "resource deadlock avoided"}, + {46, "ENOLCK", "no locks available"}, + {50, "EBADE", "invalid exchange"}, + {51, "EBADR", "invalid request descriptor"}, + {52, "EXFULL", "exchange full"}, + {53, "ENOANO", "no anode"}, + {54, "EBADRQC", "invalid request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "bad message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in too many shared libraries"}, + {87, "ELIBEXEC", "cannot exec a shared library directly"}, + {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {89, "ENOSYS", "function not implemented"}, + {90, "ELOOP", "too many levels of symbolic links"}, + {91, "ERESTART", "interrupted system call should be restarted"}, + {92, "ESTRPIPE", "streams pipe error"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "protocol not available"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "ENOTSUP", "operation not supported"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection on reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {135, "EUCLEAN", "structure needs cleaning"}, + {137, "ENOTNAM", "not a XENIX named type file"}, + {138, "ENAVAIL", "no XENIX semaphores available"}, + {139, "EISNAM", "is a named type file"}, + {140, "EREMOTEIO", "remote I/O error"}, + {141, "EINIT", "unknown error 141"}, + {142, "EREMDEV", "unknown error 142"}, + {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale file handle"}, + {158, "ECANCELED", "operation canceled"}, + {159, "ENOMEDIUM", "no medium found"}, + {160, "EMEDIUMTYPE", "wrong medium type"}, + {161, "ENOKEY", "required key not available"}, + {162, "EKEYEXPIRED", "key has expired"}, + {163, "EKEYREVOKED", "key has been revoked"}, + {164, "EKEYREJECTED", "key was rejected by service"}, + {165, "EOWNERDEAD", "owner died"}, + {166, "ENOTRECOVERABLE", "state not recoverable"}, + {167, "ERFKILL", "operation not possible due to RF-kill"}, + {168, "EHWPOISON", "memory page has hardware error"}, + {1133, "EDQUOT", "disk quota exceeded"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGCHLD", "child exited"}, + {19, "SIGPWR", "power failure"}, + {20, "SIGWINCH", "window changed"}, + {21, "SIGURG", "urgent I/O condition"}, + {22, "SIGIO", "I/O possible"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual timer expired"}, + {29, "SIGPROF", "profiling timer expired"}, + {30, "SIGXCPU", "CPU time limit exceeded"}, + {31, "SIGXFSZ", "file size limit exceeded"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go new file mode 100644 index 00000000000..d09e3b68bfb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -0,0 +1,2711 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x8000 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "resource deadlock avoided"}, + {46, "ENOLCK", "no locks available"}, + {50, "EBADE", "invalid exchange"}, + {51, "EBADR", "invalid request descriptor"}, + {52, "EXFULL", "exchange full"}, + {53, "ENOANO", "no anode"}, + {54, "EBADRQC", "invalid request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "bad message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in too many shared libraries"}, + {87, "ELIBEXEC", "cannot exec a shared library directly"}, + {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {89, "ENOSYS", "function not implemented"}, + {90, "ELOOP", "too many levels of symbolic links"}, + {91, "ERESTART", "interrupted system call should be restarted"}, + {92, "ESTRPIPE", "streams pipe error"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "protocol not available"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "ENOTSUP", "operation not supported"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection on reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {135, "EUCLEAN", "structure needs cleaning"}, + {137, "ENOTNAM", "not a XENIX named type file"}, + {138, "ENAVAIL", "no XENIX semaphores available"}, + {139, "EISNAM", "is a named type file"}, + {140, "EREMOTEIO", "remote I/O error"}, + {141, "EINIT", "unknown error 141"}, + {142, "EREMDEV", "unknown error 142"}, + {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale file handle"}, + {158, "ECANCELED", "operation canceled"}, + {159, "ENOMEDIUM", "no medium found"}, + {160, "EMEDIUMTYPE", "wrong medium type"}, + {161, "ENOKEY", "required key not available"}, + {162, "EKEYEXPIRED", "key has expired"}, + {163, "EKEYREVOKED", "key has been revoked"}, + {164, "EKEYREJECTED", "key was rejected by service"}, + {165, "EOWNERDEAD", "owner died"}, + {166, "ENOTRECOVERABLE", "state not recoverable"}, + {167, "ERFKILL", "operation not possible due to RF-kill"}, + {168, "EHWPOISON", "memory page has hardware error"}, + {1133, "EDQUOT", "disk quota exceeded"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGCHLD", "child exited"}, + {19, "SIGPWR", "power failure"}, + {20, "SIGWINCH", "window changed"}, + {21, "SIGURG", "urgent I/O condition"}, + {22, "SIGIO", "I/O possible"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual timer expired"}, + {29, "SIGPROF", "profiling timer expired"}, + {30, "SIGXCPU", "CPU time limit exceeded"}, + {31, "SIGXFSZ", "file size limit exceeded"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go new file mode 100644 index 00000000000..f78108dfb2d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -0,0 +1,2711 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x21 + F_GETLK64 = 0x21 + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x22 + F_SETLK64 = 0x22 + F_SETLKW = 0x23 + F_SETLKW64 = 0x23 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc004240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4004700d + RTC_EPOCH_SET = 0x8004700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x4004700b + RTC_IRQP_SET = 0x8004700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x401c7011 + RTC_PLL_SET = 0x801c7012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x8000 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "resource deadlock avoided"}, + {46, "ENOLCK", "no locks available"}, + {50, "EBADE", "invalid exchange"}, + {51, "EBADR", "invalid request descriptor"}, + {52, "EXFULL", "exchange full"}, + {53, "ENOANO", "no anode"}, + {54, "EBADRQC", "invalid request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "bad message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in too many shared libraries"}, + {87, "ELIBEXEC", "cannot exec a shared library directly"}, + {88, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {89, "ENOSYS", "function not implemented"}, + {90, "ELOOP", "too many levels of symbolic links"}, + {91, "ERESTART", "interrupted system call should be restarted"}, + {92, "ESTRPIPE", "streams pipe error"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "protocol not available"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "ENOTSUP", "operation not supported"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection on reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {135, "EUCLEAN", "structure needs cleaning"}, + {137, "ENOTNAM", "not a XENIX named type file"}, + {138, "ENAVAIL", "no XENIX semaphores available"}, + {139, "EISNAM", "is a named type file"}, + {140, "EREMOTEIO", "remote I/O error"}, + {141, "EINIT", "unknown error 141"}, + {142, "EREMDEV", "unknown error 142"}, + {143, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale file handle"}, + {158, "ECANCELED", "operation canceled"}, + {159, "ENOMEDIUM", "no medium found"}, + {160, "EMEDIUMTYPE", "wrong medium type"}, + {161, "ENOKEY", "required key not available"}, + {162, "EKEYEXPIRED", "key has expired"}, + {163, "EKEYREVOKED", "key has been revoked"}, + {164, "EKEYREJECTED", "key was rejected by service"}, + {165, "EOWNERDEAD", "owner died"}, + {166, "ENOTRECOVERABLE", "state not recoverable"}, + {167, "ERFKILL", "operation not possible due to RF-kill"}, + {168, "EHWPOISON", "memory page has hardware error"}, + {1133, "EDQUOT", "disk quota exceeded"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user defined signal 1"}, + {17, "SIGUSR2", "user defined signal 2"}, + {18, "SIGCHLD", "child exited"}, + {19, "SIGPWR", "power failure"}, + {20, "SIGWINCH", "window changed"}, + {21, "SIGURG", "urgent I/O condition"}, + {22, "SIGIO", "I/O possible"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual timer expired"}, + {29, "SIGPROF", "profiling timer expired"}, + {30, "SIGXCPU", "CPU time limit exceeded"}, + {31, "SIGXFSZ", "file size limit exceeded"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go new file mode 100644 index 00000000000..8da57a99c3e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -0,0 +1,2764 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x17 + B110 = 0x3 + B115200 = 0x11 + B1152000 = 0x18 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x19 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x1a + B230400 = 0x12 + B2400 = 0xb + B2500000 = 0x1b + B300 = 0x7 + B3000000 = 0x1c + B3500000 = 0x1d + B38400 = 0xf + B4000000 = 0x1e + B460800 = 0x13 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x16 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0xff + CBAUDEX = 0x0 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIGNAL = 0xff + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x4000 + IBSHIFT = 0x10 + ICANON = 0x100 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x400 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x80 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x1000 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x300 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80000000 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x4 + ONLCR = 0x2 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x1000 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_SAO = 0x10 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x400000 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x5 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4000 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0xc00 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {58, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go new file mode 100644 index 00000000000..1832c0a7ceb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -0,0 +1,2764 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x17 + B110 = 0x3 + B115200 = 0x11 + B1152000 = 0x18 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x19 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x1a + B230400 = 0x12 + B2400 = 0xb + B2500000 = 0x1b + B300 = 0x7 + B3000000 = 0x1c + B3500000 = 0x1d + B38400 = 0xf + B4000000 = 0x1e + B460800 = 0x13 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x16 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0xff + CBAUDEX = 0x0 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIGNAL = 0xff + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x4000 + IBSHIFT = 0x10 + ICANON = 0x100 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x400 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x80 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x1000 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x300 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80000000 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x4 + ONLCR = 0x2 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x1000 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_SAO = 0x10 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x20007002 + RTC_AIE_ON = 0x20007001 + RTC_ALM_READ = 0x40247008 + RTC_ALM_SET = 0x80247007 + RTC_EPOCH_READ = 0x4008700d + RTC_EPOCH_SET = 0x8008700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x4008700b + RTC_IRQP_SET = 0x8008700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x20007006 + RTC_PIE_ON = 0x20007005 + RTC_PLL_GET = 0x40207011 + RTC_PLL_SET = 0x80207012 + RTC_RD_TIME = 0x40247009 + RTC_SET_TIME = 0x8024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x20007004 + RTC_UIE_ON = 0x20007003 + RTC_VL_CLR = 0x20007014 + RTC_VL_READ = 0x40047013 + RTC_WIE_OFF = 0x20007010 + RTC_WIE_ON = 0x2000700f + RTC_WKALM_RD = 0x40287010 + RTC_WKALM_SET = 0x8028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x400000 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETFILTEREBPF = 0x400454e1 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETSTEERINGEBPF = 0x400454e0 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UBI_IOCATT = 0x80186f40 + UBI_IOCDET = 0x80046f41 + UBI_IOCEBCH = 0x80044f02 + UBI_IOCEBER = 0x80044f01 + UBI_IOCEBISMAP = 0x40044f05 + UBI_IOCEBMAP = 0x80084f03 + UBI_IOCEBUNMAP = 0x80044f04 + UBI_IOCMKVOL = 0x80986f00 + UBI_IOCRMVOL = 0x80046f01 + UBI_IOCRNVOL = 0x91106f03 + UBI_IOCRSVOL = 0x800c6f02 + UBI_IOCSETVOLPROP = 0x80104f06 + UBI_IOCVOLCRBLK = 0x80804f07 + UBI_IOCVOLRMBLK = 0x20004f08 + UBI_IOCVOLUP = 0x80084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x5 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4000 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0xc00 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {58, "EDEADLOCK", "file locking deadlock error"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go new file mode 100644 index 00000000000..c6bd4effff4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -0,0 +1,2691 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build riscv64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x100 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go new file mode 100644 index 00000000000..8cdf353dc6d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -0,0 +1,2764 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go + +package unix + +import "syscall" + +const ( + AAFS_MAGIC = 0x5a3c69f0 + ADFS_SUPER_MAGIC = 0xadf5 + AFFS_SUPER_MAGIC = 0xadff + AFS_FS_MAGIC = 0x6b414653 + AFS_SUPER_MAGIC = 0x5346414f + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + AF_XDP = 0x2c + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ANON_INODE_FS_MAGIC = 0x9041934 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_RAWIP = 0x207 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + AUTOFS_SUPER_MAGIC = 0x187 + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BALLOON_KVM_MAGIC = 0x13661366 + BDEVFS_MAGIC = 0x62646576 + BINFMTFS_MAGIC = 0x42494e4d + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_FS_MAGIC = 0xcafe4a11 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + BTRFS_SUPER_MAGIC = 0x9123683e + BTRFS_TEST_MAGIC = 0x73727279 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CGROUP2_SUPER_MAGIC = 0x63677270 + CGROUP_SUPER_MAGIC = 0x27e0eb + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CODA_SUPER_MAGIC = 0x73757245 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRAMFS_MAGIC = 0x28cd3d45 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DAXFS_MAGIC = 0x64646178 + DEBUGFS_MAGIC = 0x64626720 + DEVPTS_SUPER_MAGIC = 0x1cd1 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + ECRYPTFS_SUPER_MAGIC = 0xf15f + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + EFIVARFS_MAGIC = 0xde5e81e4 + EFS_SUPER_MAGIC = 0x414a53 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_ERSPAN = 0x88be + ETH_P_ERSPAN2 = 0x22eb + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IFE = 0xed3e + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MAP = 0xf9 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_NSH = 0x894f + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PREAUTH = 0x88c7 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXABYTE_ENABLE_NEST = 0xf0 + EXT2_SUPER_MAGIC = 0xef53 + EXT3_SUPER_MAGIC = 0xef53 + EXT4_SUPER_MAGIC = 0xef53 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_ENCRYPTION_MODE_SPECK128_256_CTS = 0x8 + FS_ENCRYPTION_MODE_SPECK128_256_XTS = 0x7 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + FUTEXFS_SUPER_MAGIC = 0xbad1dea + F_ADD_SEALS = 0x409 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_GET_FILE_RW_HINT = 0x40d + F_GET_RW_HINT = 0x40b + F_GET_SEALS = 0x40a + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SEAL_GROW = 0x4 + F_SEAL_SEAL = 0x1 + F_SEAL_SHRINK = 0x2 + F_SEAL_WRITE = 0x8 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SET_FILE_RW_HINT = 0x40e + F_SET_RW_HINT = 0x40c + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HDIO_DRIVE_CMD = 0x31f + HDIO_DRIVE_CMD_AEB = 0x31e + HDIO_DRIVE_CMD_HDR_SIZE = 0x4 + HDIO_DRIVE_HOB_HDR_SIZE = 0x8 + HDIO_DRIVE_RESET = 0x31c + HDIO_DRIVE_TASK = 0x31e + HDIO_DRIVE_TASKFILE = 0x31d + HDIO_DRIVE_TASK_HDR_SIZE = 0x8 + HDIO_GETGEO = 0x301 + HDIO_GET_32BIT = 0x309 + HDIO_GET_ACOUSTIC = 0x30f + HDIO_GET_ADDRESS = 0x310 + HDIO_GET_BUSSTATE = 0x31a + HDIO_GET_DMA = 0x30b + HDIO_GET_IDENTITY = 0x30d + HDIO_GET_KEEPSETTINGS = 0x308 + HDIO_GET_MULTCOUNT = 0x304 + HDIO_GET_NICE = 0x30c + HDIO_GET_NOWERR = 0x30a + HDIO_GET_QDMA = 0x305 + HDIO_GET_UNMASKINTR = 0x302 + HDIO_GET_WCACHE = 0x30e + HDIO_OBSOLETE_IDENTITY = 0x307 + HDIO_SCAN_HWIF = 0x328 + HDIO_SET_32BIT = 0x324 + HDIO_SET_ACOUSTIC = 0x32c + HDIO_SET_ADDRESS = 0x32f + HDIO_SET_BUSSTATE = 0x32d + HDIO_SET_DMA = 0x326 + HDIO_SET_KEEPSETTINGS = 0x323 + HDIO_SET_MULTCOUNT = 0x321 + HDIO_SET_NICE = 0x329 + HDIO_SET_NOWERR = 0x325 + HDIO_SET_PIO_MODE = 0x327 + HDIO_SET_QDMA = 0x32e + HDIO_SET_UNMASKINTR = 0x322 + HDIO_SET_WCACHE = 0x32b + HDIO_SET_XFER = 0x306 + HDIO_TRISTATE_HWIF = 0x31b + HDIO_UNREGISTER_HWIF = 0x32a + HOSTFS_SUPER_MAGIC = 0xc0ffee + HPFS_SUPER_MAGIC = 0xf995e849 + HUGETLBFS_MAGIC = 0x958458f6 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x9 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NAPI = 0x10 + IFF_NAPI_FRAGS = 0x20 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_FREEBIND = 0x4e + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISOFS_SUPER_MAGIC = 0x9660 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + JFFS2_SUPER_MAGIC = 0x72b6 + KEXEC_ARCH_386 = 0x30000 + KEXEC_ARCH_68K = 0x40000 + KEXEC_ARCH_AARCH64 = 0xb70000 + KEXEC_ARCH_ARM = 0x280000 + KEXEC_ARCH_DEFAULT = 0x0 + KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_MASK = 0xffff0000 + KEXEC_ARCH_MIPS = 0x80000 + KEXEC_ARCH_MIPS_LE = 0xa0000 + KEXEC_ARCH_PPC = 0x140000 + KEXEC_ARCH_PPC64 = 0x150000 + KEXEC_ARCH_S390 = 0x160000 + KEXEC_ARCH_SH = 0x2a0000 + KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_FILE_NO_INITRAMFS = 0x4 + KEXEC_FILE_ON_CRASH = 0x2 + KEXEC_FILE_UNLOAD = 0x1 + KEXEC_ON_CRASH = 0x1 + KEXEC_PRESERVE_CONTEXT = 0x2 + KEXEC_SEGMENT_MAX = 0x10 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_KEEPONFORK = 0x13 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MADV_WIPEONFORK = 0x12 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FIXED_NOREPLACE = 0x100000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_SHARED_VALIDATE = 0x3 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MFD_ALLOW_SEALING = 0x2 + MFD_CLOEXEC = 0x1 + MFD_HUGETLB = 0x4 + MFD_HUGE_16GB = -0x78000000 + MFD_HUGE_16MB = 0x60000000 + MFD_HUGE_1GB = 0x78000000 + MFD_HUGE_1MB = 0x50000000 + MFD_HUGE_256MB = 0x70000000 + MFD_HUGE_2GB = 0x7c000000 + MFD_HUGE_2MB = 0x54000000 + MFD_HUGE_32MB = 0x64000000 + MFD_HUGE_512KB = 0x4c000000 + MFD_HUGE_512MB = 0x74000000 + MFD_HUGE_64KB = 0x40000000 + MFD_HUGE_8MB = 0x5c000000 + MFD_HUGE_MASK = 0x3f + MFD_HUGE_SHIFT = 0x1a + MINIX2_SUPER_MAGIC = 0x2468 + MINIX2_SUPER_MAGIC2 = 0x2478 + MINIX3_SUPER_MAGIC = 0x4d5a + MINIX_SUPER_MAGIC = 0x137f + MINIX_SUPER_MAGIC2 = 0x138f + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MODULE_INIT_IGNORE_MODVERSIONS = 0x1 + MODULE_INIT_IGNORE_VERMAGIC = 0x2 + MSDOS_SUPER_MAGIC = 0x4d44 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MSG_ZEROCOPY = 0x4000000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + MTD_INODE_FS_MAGIC = 0x11307854 + NAME_MAX = 0xff + NCP_SUPER_MAGIC = 0x564c + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NETNSA_MAX = 0x3 + NETNSA_NSID_NOT_ASSIGNED = -0x1 + NFNETLINK_V0 = 0x0 + NFNLGRP_ACCT_QUOTA = 0x8 + NFNLGRP_CONNTRACK_DESTROY = 0x3 + NFNLGRP_CONNTRACK_EXP_DESTROY = 0x6 + NFNLGRP_CONNTRACK_EXP_NEW = 0x4 + NFNLGRP_CONNTRACK_EXP_UPDATE = 0x5 + NFNLGRP_CONNTRACK_NEW = 0x1 + NFNLGRP_CONNTRACK_UPDATE = 0x2 + NFNLGRP_MAX = 0x9 + NFNLGRP_NFTABLES = 0x7 + NFNLGRP_NFTRACE = 0x9 + NFNLGRP_NONE = 0x0 + NFNL_BATCH_MAX = 0x1 + NFNL_MSG_BATCH_BEGIN = 0x10 + NFNL_MSG_BATCH_END = 0x11 + NFNL_NFA_NEST = 0x8000 + NFNL_SUBSYS_ACCT = 0x7 + NFNL_SUBSYS_COUNT = 0xc + NFNL_SUBSYS_CTHELPER = 0x9 + NFNL_SUBSYS_CTNETLINK = 0x1 + NFNL_SUBSYS_CTNETLINK_EXP = 0x2 + NFNL_SUBSYS_CTNETLINK_TIMEOUT = 0x8 + NFNL_SUBSYS_IPSET = 0x6 + NFNL_SUBSYS_NFTABLES = 0xa + NFNL_SUBSYS_NFT_COMPAT = 0xb + NFNL_SUBSYS_NONE = 0x0 + NFNL_SUBSYS_OSF = 0x5 + NFNL_SUBSYS_QUEUE = 0x3 + NFNL_SUBSYS_ULOG = 0x4 + NFS_SUPER_MAGIC = 0x6969 + NILFS_SUPER_MAGIC = 0x3434 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_NONREC = 0x100 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + NSFS_MAGIC = 0x6e736673 + OCFS2_SUPER_MAGIC = 0x7461636f + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENPROM_SUPER_MAGIC = 0x9fa1 + OPOST = 0x1 + OVERLAYFS_SUPER_MAGIC = 0x794c7630 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PIPEFS_MAGIC = 0x50495045 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROC_SUPER_MAGIC = 0x9fa0 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_SPECULATION_CTRL = 0x34 + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_SPECULATION_CTRL = 0x35 + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_SPEC_DISABLE = 0x4 + PR_SPEC_ENABLE = 0x2 + PR_SPEC_FORCE_DISABLE = 0x8 + PR_SPEC_NOT_AFFECTED = 0x0 + PR_SPEC_PRCTL = 0x1 + PR_SPEC_STORE_BYPASS = 0x0 + PR_SVE_GET_VL = 0x33 + PR_SVE_SET_VL = 0x32 + PR_SVE_SET_VL_ONEXEC = 0x40000 + PR_SVE_VL_INHERIT = 0x20000 + PR_SVE_VL_LEN_MASK = 0xffff + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PSTOREFS_MAGIC = 0x6165676c + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_DISABLE_TE = 0x5010 + PTRACE_ENABLE_TE = 0x5009 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_LAST_BREAK = 0x5006 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_AREA = 0x5003 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_AREA = 0x5002 + PTRACE_PEEKUSR = 0x3 + PTRACE_PEEKUSR_AREA = 0x5000 + PTRACE_PEEK_SYSTEM_CALL = 0x5007 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_AREA = 0x5005 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_AREA = 0x5004 + PTRACE_POKEUSR = 0x6 + PTRACE_POKEUSR_AREA = 0x5001 + PTRACE_POKE_SYSTEM_CALL = 0x5008 + PTRACE_PROT = 0x15 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SECCOMP_GET_METADATA = 0x420d + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLEBLOCK = 0xc + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TE_ABORT_RAND = 0x5011 + PTRACE_TRACEME = 0x0 + PT_ACR0 = 0x90 + PT_ACR1 = 0x94 + PT_ACR10 = 0xb8 + PT_ACR11 = 0xbc + PT_ACR12 = 0xc0 + PT_ACR13 = 0xc4 + PT_ACR14 = 0xc8 + PT_ACR15 = 0xcc + PT_ACR2 = 0x98 + PT_ACR3 = 0x9c + PT_ACR4 = 0xa0 + PT_ACR5 = 0xa4 + PT_ACR6 = 0xa8 + PT_ACR7 = 0xac + PT_ACR8 = 0xb0 + PT_ACR9 = 0xb4 + PT_CR_10 = 0x168 + PT_CR_11 = 0x170 + PT_CR_9 = 0x160 + PT_ENDREGS = 0x1af + PT_FPC = 0xd8 + PT_FPR0 = 0xe0 + PT_FPR1 = 0xe8 + PT_FPR10 = 0x130 + PT_FPR11 = 0x138 + PT_FPR12 = 0x140 + PT_FPR13 = 0x148 + PT_FPR14 = 0x150 + PT_FPR15 = 0x158 + PT_FPR2 = 0xf0 + PT_FPR3 = 0xf8 + PT_FPR4 = 0x100 + PT_FPR5 = 0x108 + PT_FPR6 = 0x110 + PT_FPR7 = 0x118 + PT_FPR8 = 0x120 + PT_FPR9 = 0x128 + PT_GPR0 = 0x10 + PT_GPR1 = 0x18 + PT_GPR10 = 0x60 + PT_GPR11 = 0x68 + PT_GPR12 = 0x70 + PT_GPR13 = 0x78 + PT_GPR14 = 0x80 + PT_GPR15 = 0x88 + PT_GPR2 = 0x20 + PT_GPR3 = 0x28 + PT_GPR4 = 0x30 + PT_GPR5 = 0x38 + PT_GPR6 = 0x40 + PT_GPR7 = 0x48 + PT_GPR8 = 0x50 + PT_GPR9 = 0x58 + PT_IEEE_IP = 0x1a8 + PT_LASTOFF = 0x1a8 + PT_ORIGGPR2 = 0xd0 + PT_PSWADDR = 0x8 + PT_PSWMASK = 0x0 + QNX4_SUPER_MAGIC = 0x2f + QNX6_SUPER_MAGIC = 0x68191122 + RAMFS_MAGIC = 0x858458f6 + RDTGROUP_SUPER_MAGIC = 0x7655821 + REISERFS_SUPER_MAGIC = 0x52654973 + RENAME_EXCHANGE = 0x2 + RENAME_NOREPLACE = 0x1 + RENAME_WHITEOUT = 0x4 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FASTOPEN_NO_COOKIE = 0x11 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x11 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1d + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTC_AF = 0x20 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQF = 0x80 + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_MAX_FREQ = 0x2000 + RTC_PF = 0x40 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UF = 0x10 + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELCHAIN = 0x65 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETCHAIN = 0x66 + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x67 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWCHAIN = 0x64 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x16 + RTM_NR_MSGTYPES = 0x58 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BGP = 0xba + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_EIGRP = 0xc0 + RTPROT_GATED = 0x8 + RTPROT_ISIS = 0xbb + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_OSPF = 0xbc + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_RIP = 0xbd + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SECURITYFS_MAGIC = 0x73636673 + SELINUX_MAGIC = 0xf97cff8c + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SMACK_MAGIC = 0x43415d53 + SMART_AUTOSAVE = 0xd2 + SMART_AUTO_OFFLINE = 0xdb + SMART_DISABLE = 0xd9 + SMART_ENABLE = 0xd8 + SMART_HCYL_PASS = 0xc2 + SMART_IMMEDIATE_OFFLINE = 0xd4 + SMART_LCYL_PASS = 0x4f + SMART_READ_LOG_SECTOR = 0xd5 + SMART_READ_THRESHOLDS = 0xd1 + SMART_READ_VALUES = 0xd0 + SMART_SAVE = 0xd3 + SMART_STATUS = 0xda + SMART_WRITE_LOG_SECTOR = 0xd6 + SMART_WRITE_THRESHOLDS = 0xd7 + SMB_SUPER_MAGIC = 0x517b + SOCKFS_MAGIC = 0x534f434b + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_TLS = 0x11a + SOL_X25 = 0x106 + SOL_XDP = 0x11b + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + SQUASHFS_MAGIC = 0x73717368 + STACK_END_MAGIC = 0x57ac6e9d + STATX_ALL = 0xfff + STATX_ATIME = 0x20 + STATX_ATTR_APPEND = 0x20 + STATX_ATTR_AUTOMOUNT = 0x1000 + STATX_ATTR_COMPRESSED = 0x4 + STATX_ATTR_ENCRYPTED = 0x800 + STATX_ATTR_IMMUTABLE = 0x10 + STATX_ATTR_NODUMP = 0x40 + STATX_BASIC_STATS = 0x7ff + STATX_BLOCKS = 0x400 + STATX_BTIME = 0x800 + STATX_CTIME = 0x80 + STATX_GID = 0x10 + STATX_INO = 0x100 + STATX_MODE = 0x2 + STATX_MTIME = 0x40 + STATX_NLINK = 0x4 + STATX_SIZE = 0x200 + STATX_TYPE = 0x1 + STATX_UID = 0x8 + STATX__RESERVED = 0x80000000 + SYNC_FILE_RANGE_WAIT_AFTER = 0x4 + SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 + SYNC_FILE_RANGE_WRITE = 0x2 + SYSFS_MAGIC = 0x62656572 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_FASTOPEN_KEY = 0x21 + TCP_FASTOPEN_NO_COOKIE = 0x22 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_EXT = 0x20 + TCP_MD5SIG_FLAG_PREFIX = 0x1 + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_ULP = 0x1f + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TMPFS_MAGIC = 0x1021994 + TOSTOP = 0x100 + TPACKET_ALIGNMENT = 0x10 + TPACKET_HDRLEN = 0x34 + TP_STATUS_AVAILABLE = 0x0 + TP_STATUS_BLK_TMO = 0x20 + TP_STATUS_COPY = 0x2 + TP_STATUS_CSUMNOTREADY = 0x8 + TP_STATUS_CSUM_VALID = 0x80 + TP_STATUS_KERNEL = 0x0 + TP_STATUS_LOSING = 0x4 + TP_STATUS_SENDING = 0x2 + TP_STATUS_SEND_REQUEST = 0x1 + TP_STATUS_TS_RAW_HARDWARE = -0x80000000 + TP_STATUS_TS_SOFTWARE = 0x20000000 + TP_STATUS_TS_SYS_HARDWARE = 0x40000000 + TP_STATUS_USER = 0x1 + TP_STATUS_VLAN_TPID_VALID = 0x40 + TP_STATUS_VLAN_VALID = 0x10 + TP_STATUS_WRONG_FORMAT = 0x4 + TRACEFS_MAGIC = 0x74726163 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + UDF_SUPER_MAGIC = 0x15013346 + UMOUNT_NOFOLLOW = 0x8 + USBDEVICE_SUPER_MAGIC = 0x9fa2 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + V9FS_MAGIC = 0x1021997 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WIN_ACKMEDIACHANGE = 0xdb + WIN_CHECKPOWERMODE1 = 0xe5 + WIN_CHECKPOWERMODE2 = 0x98 + WIN_DEVICE_RESET = 0x8 + WIN_DIAGNOSE = 0x90 + WIN_DOORLOCK = 0xde + WIN_DOORUNLOCK = 0xdf + WIN_DOWNLOAD_MICROCODE = 0x92 + WIN_FLUSH_CACHE = 0xe7 + WIN_FLUSH_CACHE_EXT = 0xea + WIN_FORMAT = 0x50 + WIN_GETMEDIASTATUS = 0xda + WIN_IDENTIFY = 0xec + WIN_IDENTIFY_DMA = 0xee + WIN_IDLEIMMEDIATE = 0xe1 + WIN_INIT = 0x60 + WIN_MEDIAEJECT = 0xed + WIN_MULTREAD = 0xc4 + WIN_MULTREAD_EXT = 0x29 + WIN_MULTWRITE = 0xc5 + WIN_MULTWRITE_EXT = 0x39 + WIN_NOP = 0x0 + WIN_PACKETCMD = 0xa0 + WIN_PIDENTIFY = 0xa1 + WIN_POSTBOOT = 0xdc + WIN_PREBOOT = 0xdd + WIN_QUEUED_SERVICE = 0xa2 + WIN_READ = 0x20 + WIN_READDMA = 0xc8 + WIN_READDMA_EXT = 0x25 + WIN_READDMA_ONCE = 0xc9 + WIN_READDMA_QUEUED = 0xc7 + WIN_READDMA_QUEUED_EXT = 0x26 + WIN_READ_BUFFER = 0xe4 + WIN_READ_EXT = 0x24 + WIN_READ_LONG = 0x22 + WIN_READ_LONG_ONCE = 0x23 + WIN_READ_NATIVE_MAX = 0xf8 + WIN_READ_NATIVE_MAX_EXT = 0x27 + WIN_READ_ONCE = 0x21 + WIN_RECAL = 0x10 + WIN_RESTORE = 0x10 + WIN_SECURITY_DISABLE = 0xf6 + WIN_SECURITY_ERASE_PREPARE = 0xf3 + WIN_SECURITY_ERASE_UNIT = 0xf4 + WIN_SECURITY_FREEZE_LOCK = 0xf5 + WIN_SECURITY_SET_PASS = 0xf1 + WIN_SECURITY_UNLOCK = 0xf2 + WIN_SEEK = 0x70 + WIN_SETFEATURES = 0xef + WIN_SETIDLE1 = 0xe3 + WIN_SETIDLE2 = 0x97 + WIN_SETMULT = 0xc6 + WIN_SET_MAX = 0xf9 + WIN_SET_MAX_EXT = 0x37 + WIN_SLEEPNOW1 = 0xe6 + WIN_SLEEPNOW2 = 0x99 + WIN_SMART = 0xb0 + WIN_SPECIFY = 0x91 + WIN_SRST = 0x8 + WIN_STANDBY = 0xe2 + WIN_STANDBY2 = 0x96 + WIN_STANDBYNOW1 = 0xe0 + WIN_STANDBYNOW2 = 0x94 + WIN_VERIFY = 0x40 + WIN_VERIFY_EXT = 0x42 + WIN_VERIFY_ONCE = 0x41 + WIN_WRITE = 0x30 + WIN_WRITEDMA = 0xca + WIN_WRITEDMA_EXT = 0x35 + WIN_WRITEDMA_ONCE = 0xcb + WIN_WRITEDMA_QUEUED = 0xcc + WIN_WRITEDMA_QUEUED_EXT = 0x36 + WIN_WRITE_BUFFER = 0xe8 + WIN_WRITE_EXT = 0x34 + WIN_WRITE_LONG = 0x32 + WIN_WRITE_LONG_ONCE = 0x33 + WIN_WRITE_ONCE = 0x31 + WIN_WRITE_SAME = 0xe9 + WIN_WRITE_VERIFY = 0x3c + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XDP_COPY = 0x2 + XDP_FLAGS_DRV_MODE = 0x4 + XDP_FLAGS_HW_MODE = 0x8 + XDP_FLAGS_MASK = 0xf + XDP_FLAGS_MODES = 0xe + XDP_FLAGS_SKB_MODE = 0x2 + XDP_FLAGS_UPDATE_IF_NOEXIST = 0x1 + XDP_MMAP_OFFSETS = 0x1 + XDP_PGOFF_RX_RING = 0x0 + XDP_PGOFF_TX_RING = 0x80000000 + XDP_RX_RING = 0x2 + XDP_SHARED_UMEM = 0x1 + XDP_STATISTICS = 0x7 + XDP_TX_RING = 0x3 + XDP_UMEM_COMPLETION_RING = 0x6 + XDP_UMEM_FILL_RING = 0x5 + XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 + XDP_UMEM_PGOFF_FILL_RING = 0x100000000 + XDP_UMEM_REG = 0x4 + XDP_ZEROCOPY = 0x4 + XENFS_SUPER_MAGIC = 0xabba1974 + XTABS = 0x1800 + ZSMALLOC_MAGIC = 0x58295829 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go new file mode 100644 index 00000000000..ba93f3e53c1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -0,0 +1,2150 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build sparc64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + ASI_LEON_DFLUSH = 0x11 + ASI_LEON_IFLUSH = 0x10 + ASI_LEON_MMUFLUSH = 0x18 + B0 = 0x0 + B1000000 = 0x100c + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x100d + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100e + B153600 = 0x1006 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100f + B230400 = 0x1003 + B2400 = 0xb + B300 = 0x7 + B307200 = 0x1007 + B38400 = 0xf + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x100a + B57600 = 0x1001 + B576000 = 0x100b + B600 = 0x8 + B614400 = 0x1008 + B75 = 0x2 + B76800 = 0x1005 + B921600 = 0x1009 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EMT_TAGOVF = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x400000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x7 + F_GETLK64 = 0x7 + F_GETOWN = 0x5 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x8 + F_SETLK64 = 0x8 + F_SETLKW = 0x9 + F_SETLKW64 = 0x9 + F_SETOWN = 0x6 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x3 + F_WRLCK = 0x2 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x400000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x4000 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x200 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x100 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x100000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x2000 + O_EXCL = 0x800 + O_FSYNC = 0x802000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x4004 + O_NOATIME = 0x200000 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x4000 + O_PATH = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x802000 + O_SYNC = 0x802000 + O_TMPFILE = 0x2010000 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPAREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPREGS64 = 0x19 + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_READDATA = 0x10 + PTRACE_READTEXT = 0x12 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPAREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPREGS64 = 0x1a + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SPARC_DETACH = 0xb + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PTRACE_WRITEDATA = 0x11 + PTRACE_WRITETEXT = 0x13 + PT_FP = 0x48 + PT_G0 = 0x10 + PT_G1 = 0x14 + PT_G2 = 0x18 + PT_G3 = 0x1c + PT_G4 = 0x20 + PT_G5 = 0x24 + PT_G6 = 0x28 + PT_G7 = 0x2c + PT_I0 = 0x30 + PT_I1 = 0x34 + PT_I2 = 0x38 + PT_I3 = 0x3c + PT_I4 = 0x40 + PT_I5 = 0x44 + PT_I6 = 0x48 + PT_I7 = 0x4c + PT_NPC = 0x8 + PT_PC = 0x4 + PT_PSR = 0x0 + PT_REGS_MAGIC = 0x57ac6c00 + PT_TNPC = 0x90 + PT_TPC = 0x88 + PT_TSTATE = 0x80 + PT_V9_FP = 0x70 + PT_V9_G0 = 0x0 + PT_V9_G1 = 0x8 + PT_V9_G2 = 0x10 + PT_V9_G3 = 0x18 + PT_V9_G4 = 0x20 + PT_V9_G5 = 0x28 + PT_V9_G6 = 0x30 + PT_V9_G7 = 0x38 + PT_V9_I0 = 0x40 + PT_V9_I1 = 0x48 + PT_V9_I2 = 0x50 + PT_V9_I3 = 0x58 + PT_V9_I4 = 0x60 + PT_V9_I5 = 0x68 + PT_V9_I6 = 0x70 + PT_V9_I7 = 0x78 + PT_V9_MAGIC = 0x9c + PT_V9_TNPC = 0x90 + PT_V9_TPC = 0x88 + PT_V9_TSTATE = 0x80 + PT_V9_Y = 0x98 + PT_WIM = 0x10 + PT_Y = 0xc + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x6 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x18 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x11 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x23 + SCM_TIMESTAMPNS = 0x21 + SCM_WIFI_STATUS = 0x25 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x400000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x4000 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x8000 + SO_ATTACH_BPF = 0x34 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x35 + SO_ATTACH_REUSEPORT_EBPF = 0x36 + SO_BINDTODEVICE = 0xd + SO_BPF_EXTENSIONS = 0x32 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0x400 + SO_BUSY_POLL = 0x30 + SO_CNX_ADVICE = 0x37 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x33 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x28 + SO_MARK = 0x22 + SO_MAX_PACING_RATE = 0x31 + SO_NOFCS = 0x27 + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x2 + SO_PASSSEC = 0x1f + SO_PEEK_OFF = 0x26 + SO_PEERCRED = 0x40 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x100b + SO_RCVLOWAT = 0x800 + SO_RCVTIMEO = 0x2000 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x24 + SO_SECURITY_AUTHENTICATION = 0x5001 + SO_SECURITY_ENCRYPTION_NETWORK = 0x5004 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002 + SO_SELECT_ERR_QUEUE = 0x29 + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x100a + SO_SNDLOWAT = 0x1000 + SO_SNDTIMEO = 0x4000 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x23 + SO_TIMESTAMPNS = 0x21 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x25 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x20005407 + TCGETA = 0x40125401 + TCGETS = 0x40245408 + TCGETS2 = 0x402c540c + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x20005405 + TCSBRKP = 0x5425 + TCSETA = 0x80125402 + TCSETAF = 0x80125404 + TCSETAW = 0x80125403 + TCSETS = 0x80245409 + TCSETS2 = 0x802c540d + TCSETSF = 0x8024540b + TCSETSF2 = 0x802c540f + TCSETSW = 0x8024540a + TCSETSW2 = 0x802c540e + TCXONC = 0x20005406 + TIOCCBRK = 0x2000747a + TIOCCONS = 0x20007424 + TIOCEXCL = 0x2000740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x40047400 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x40047483 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40047486 + TIOCGRS485 = 0x40205441 + TIOCGSERIAL = 0x541e + TIOCGSID = 0x40047485 + TIOCGSOFTCAR = 0x40047464 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMIWAIT = 0x545c + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007484 + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x80047401 + TIOCSIG = 0x80047488 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x80047482 + TIOCSPTLCK = 0x80047487 + TIOCSRS485 = 0xc0205442 + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x80047465 + TIOCSTART = 0x2000746e + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x20005437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + VDISCARD = 0xd + VDSUSP = 0xb + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WRAP = 0x20000 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4 + XTABS = 0x1800 + __TIOCFLUSH = 0x80047410 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EADV = syscall.Errno(0x53) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x25) + EBADE = syscall.Errno(0x66) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x5d) + EBADMSG = syscall.Errno(0x4c) + EBADR = syscall.Errno(0x67) + EBADRQC = syscall.Errno(0x6a) + EBADSLT = syscall.Errno(0x6b) + EBFONT = syscall.Errno(0x6d) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7f) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x5e) + ECOMM = syscall.Errno(0x55) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0x4e) + EDEADLOCK = syscall.Errno(0x6c) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EHWPOISON = syscall.Errno(0x87) + EIDRM = syscall.Errno(0x4d) + EILSEQ = syscall.Errno(0x7a) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x81) + EKEYREJECTED = syscall.Errno(0x83) + EKEYREVOKED = syscall.Errno(0x82) + EL2HLT = syscall.Errno(0x65) + EL2NSYNC = syscall.Errno(0x5f) + EL3HLT = syscall.Errno(0x60) + EL3RST = syscall.Errno(0x61) + ELIBACC = syscall.Errno(0x72) + ELIBBAD = syscall.Errno(0x70) + ELIBEXEC = syscall.Errno(0x6e) + ELIBMAX = syscall.Errno(0x7b) + ELIBSCN = syscall.Errno(0x7c) + ELNRNG = syscall.Errno(0x62) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x7e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x57) + ENAMETOOLONG = syscall.Errno(0x3f) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x69) + ENOBUFS = syscall.Errno(0x37) + ENOCSI = syscall.Errno(0x64) + ENODATA = syscall.Errno(0x6f) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x80) + ENOLCK = syscall.Errno(0x4f) + ENOLINK = syscall.Errno(0x52) + ENOMEDIUM = syscall.Errno(0x7d) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x4b) + ENONET = syscall.Errno(0x50) + ENOPKG = syscall.Errno(0x71) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x4a) + ENOSTR = syscall.Errno(0x48) + ENOSYS = syscall.Errno(0x5a) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x85) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x73) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x5c) + EOWNERDEAD = syscall.Errno(0x84) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROTO = syscall.Errno(0x56) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x59) + EREMOTE = syscall.Errno(0x47) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x74) + ERFKILL = syscall.Errno(0x86) + EROFS = syscall.Errno(0x1e) + ERREMOTE = syscall.Errno(0x51) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x54) + ESTALE = syscall.Errno(0x46) + ESTRPIPE = syscall.Errno(0x5b) + ETIME = syscall.Errno(0x49) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x63) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x68) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x1d) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x17) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1d) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "ENOTSUP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "cannot assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "transport endpoint is already connected"}, + {57, "ENOTCONN", "transport endpoint is not connected"}, + {58, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {59, "ETOOMANYREFS", "too many references: cannot splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale file handle"}, + {71, "EREMOTE", "object is remote"}, + {72, "ENOSTR", "device not a stream"}, + {73, "ETIME", "timer expired"}, + {74, "ENOSR", "out of streams resources"}, + {75, "ENOMSG", "no message of desired type"}, + {76, "EBADMSG", "bad message"}, + {77, "EIDRM", "identifier removed"}, + {78, "EDEADLK", "resource deadlock avoided"}, + {79, "ENOLCK", "no locks available"}, + {80, "ENONET", "machine is not on the network"}, + {81, "ERREMOTE", "unknown error 81"}, + {82, "ENOLINK", "link has been severed"}, + {83, "EADV", "advertise error"}, + {84, "ESRMNT", "srmount error"}, + {85, "ECOMM", "communication error on send"}, + {86, "EPROTO", "protocol error"}, + {87, "EMULTIHOP", "multihop attempted"}, + {88, "EDOTDOT", "RFS specific error"}, + {89, "EREMCHG", "remote address changed"}, + {90, "ENOSYS", "function not implemented"}, + {91, "ESTRPIPE", "streams pipe error"}, + {92, "EOVERFLOW", "value too large for defined data type"}, + {93, "EBADFD", "file descriptor in bad state"}, + {94, "ECHRNG", "channel number out of range"}, + {95, "EL2NSYNC", "level 2 not synchronized"}, + {96, "EL3HLT", "level 3 halted"}, + {97, "EL3RST", "level 3 reset"}, + {98, "ELNRNG", "link number out of range"}, + {99, "EUNATCH", "protocol driver not attached"}, + {100, "ENOCSI", "no CSI structure available"}, + {101, "EL2HLT", "level 2 halted"}, + {102, "EBADE", "invalid exchange"}, + {103, "EBADR", "invalid request descriptor"}, + {104, "EXFULL", "exchange full"}, + {105, "ENOANO", "no anode"}, + {106, "EBADRQC", "invalid request code"}, + {107, "EBADSLT", "invalid slot"}, + {108, "EDEADLOCK", "file locking deadlock error"}, + {109, "EBFONT", "bad font file format"}, + {110, "ELIBEXEC", "cannot exec a shared library directly"}, + {111, "ENODATA", "no data available"}, + {112, "ELIBBAD", "accessing a corrupted shared library"}, + {113, "ENOPKG", "package not installed"}, + {114, "ELIBACC", "can not access a needed shared library"}, + {115, "ENOTUNIQ", "name not unique on network"}, + {116, "ERESTART", "interrupted system call should be restarted"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {123, "ELIBMAX", "attempting to link in too many shared libraries"}, + {124, "ELIBSCN", ".lib section in a.out corrupted"}, + {125, "ENOMEDIUM", "no medium found"}, + {126, "EMEDIUMTYPE", "wrong medium type"}, + {127, "ECANCELED", "operation canceled"}, + {128, "ENOKEY", "required key not available"}, + {129, "EKEYEXPIRED", "key has expired"}, + {130, "EKEYREVOKED", "key has been revoked"}, + {131, "EKEYREJECTED", "key was rejected by service"}, + {132, "EOWNERDEAD", "owner died"}, + {133, "ENOTRECOVERABLE", "state not recoverable"}, + {134, "ERFKILL", "operation not possible due to RF-kill"}, + {135, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGLOST", "power failure"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go new file mode 100644 index 00000000000..78cc04ea6df --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go @@ -0,0 +1,1772 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + EN_SW_CTL_INF = 0x1000 + EN_SW_CTL_PREC = 0x300 + EN_SW_CTL_ROUND = 0xc00 + EN_SW_DATACHAIN = 0x80 + EN_SW_DENORM = 0x2 + EN_SW_INVOP = 0x1 + EN_SW_OVERFLOW = 0x8 + EN_SW_PRECLOSS = 0x20 + EN_SW_UNDERFLOW = 0x10 + EN_SW_ZERODIV = 0x4 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_CMD_START = 0x1 + EXTATTR_CMD_STOP = 0x2 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_BASIC_FLAGS = 0xe782807f + MNT_DEFEXPORTED = 0x200 + MNT_DISCARD = 0x800000 + MNT_EXKERB = 0x800 + MNT_EXNORESPORT = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x10000000 + MNT_EXRDONLY = 0x80 + MNT_EXTATTR = 0x1000000 + MNT_FORCE = 0x80000 + MNT_GETARGS = 0x400000 + MNT_IGNORE = 0x100000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_LOG = 0x2000000 + MNT_NOATIME = 0x4000000 + MNT_NOCOREDUMP = 0x8000 + MNT_NODEV = 0x10 + MNT_NODEVMTIME = 0x40000000 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_OP_FLAGS = 0x4d0000 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELATIME = 0x20000 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x80000000 + MNT_SYMPERM = 0x20000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xff90ffff + MNT_WAIT = 0x1 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large or too small"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol option not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EILSEQ", "illegal byte sequence"}, + {86, "ENOTSUP", "not supported"}, + {87, "ECANCELED", "operation Canceled"}, + {88, "EBADMSG", "bad or Corrupt message"}, + {89, "ENODATA", "no message available"}, + {90, "ENOSR", "no STREAM resources"}, + {91, "ENOSTR", "not a STREAM"}, + {92, "ETIME", "STREAM ioctl timeout"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EMULTIHOP", "multihop attempted"}, + {95, "ENOLINK", "link has been severed"}, + {96, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPWR", "power fail/restart"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go new file mode 100644 index 00000000000..92185e693ff --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go @@ -0,0 +1,1762 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x8010427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80104272 + BIOCSUDPF = 0x80104273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_CMD_START = 0x1 + EXTATTR_CMD_STOP = 0x2 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_BASIC_FLAGS = 0xe782807f + MNT_DEFEXPORTED = 0x200 + MNT_DISCARD = 0x800000 + MNT_EXKERB = 0x800 + MNT_EXNORESPORT = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x10000000 + MNT_EXRDONLY = 0x80 + MNT_EXTATTR = 0x1000000 + MNT_FORCE = 0x80000 + MNT_GETARGS = 0x400000 + MNT_IGNORE = 0x100000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_LOG = 0x2000000 + MNT_NOATIME = 0x4000000 + MNT_NOCOREDUMP = 0x8000 + MNT_NODEV = 0x10 + MNT_NODEVMTIME = 0x40000000 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_OP_FLAGS = 0x4d0000 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELATIME = 0x20000 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x80000000 + MNT_SYMPERM = 0x20000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xff90ffff + MNT_WAIT = 0x1 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8038720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8038720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc028697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0986920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0106926 + SIOCGIFDATA = 0xc0986985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc0286987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc0106978 + SIOCINITIFADDR = 0xc0706984 + SIOCSDRVSPEC = 0x8028697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8098691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x80286988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0986986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80087445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80087444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large or too small"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol option not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EILSEQ", "illegal byte sequence"}, + {86, "ENOTSUP", "not supported"}, + {87, "ECANCELED", "operation Canceled"}, + {88, "EBADMSG", "bad or Corrupt message"}, + {89, "ENODATA", "no message available"}, + {90, "ENOSR", "no STREAM resources"}, + {91, "ENOSTR", "not a STREAM"}, + {92, "ETIME", "STREAM ioctl timeout"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EMULTIHOP", "multihop attempted"}, + {95, "ENOLINK", "link has been severed"}, + {96, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPWR", "power fail/restart"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go new file mode 100644 index 00000000000..373ad4543d8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go @@ -0,0 +1,1751 @@ +// mkerrors.sh -marm +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -marm _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_CMD_START = 0x1 + EXTATTR_CMD_STOP = 0x2 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MNT_ASYNC = 0x40 + MNT_BASIC_FLAGS = 0xe782807f + MNT_DEFEXPORTED = 0x200 + MNT_DISCARD = 0x800000 + MNT_EXKERB = 0x800 + MNT_EXNORESPORT = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x10000000 + MNT_EXRDONLY = 0x80 + MNT_EXTATTR = 0x1000000 + MNT_FORCE = 0x80000 + MNT_GETARGS = 0x400000 + MNT_IGNORE = 0x100000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_LOG = 0x2000000 + MNT_NOATIME = 0x4000000 + MNT_NOCOREDUMP = 0x8000 + MNT_NODEV = 0x10 + MNT_NODEVMTIME = 0x40000000 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_OP_FLAGS = 0x4d0000 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELATIME = 0x20000 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x80000000 + MNT_SYMPERM = 0x20000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0xff90ffff + MNT_WAIT = 0x1 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PRI_IOFLUSH = 0x7c + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x48087446 + TIOCPTSNAME = 0x48087448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large or too small"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol option not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "connection timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disc quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC prog. not avail"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIDRM", "identifier removed"}, + {83, "ENOMSG", "no message of desired type"}, + {84, "EOVERFLOW", "value too large to be stored in data type"}, + {85, "EILSEQ", "illegal byte sequence"}, + {86, "ENOTSUP", "not supported"}, + {87, "ECANCELED", "operation Canceled"}, + {88, "EBADMSG", "bad or Corrupt message"}, + {89, "ENODATA", "no message available"}, + {90, "ENOSR", "no STREAM resources"}, + {91, "ENOSTR", "not a STREAM"}, + {92, "ETIME", "STREAM ioctl timeout"}, + {93, "ENOATTR", "attribute not found"}, + {94, "EMULTIHOP", "multihop attempted"}, + {95, "ENOLINK", "link has been severed"}, + {96, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGIOT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "stopped (signal)"}, + {18, "SIGTSTP", "stopped"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGPWR", "power fail/restart"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go new file mode 100644 index 00000000000..d8be045189b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go @@ -0,0 +1,1654 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,openbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_COPY = 0x4 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x1ff7 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_MASK = 0x3ff000 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x10f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_SOURCE = 0x20000 + RTF_STATIC = 0x800 + RTF_TUNNEL = 0x100000 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ELAST", "not supported"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go new file mode 100644 index 00000000000..1f9e8a29ea9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go @@ -0,0 +1,1765 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,openbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc010427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80104277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x8010426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x6 + CLOCK_MONOTONIC = 0x3 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x4 + CLOCK_UPTIME = 0x5 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_OPENFLOW = 0x10b + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_USBPCAP = 0xf9 + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_HARDMTU_LEN = 0xff9b + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_DEVICE = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x8 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EVL_ENCAPLEN = 0x4 + EVL_PRIO_BITS = 0xd + EVL_PRIO_MAX = 0x7 + EVL_VLID_MASK = 0xfff + EVL_VLID_MAX = 0xffe + EVL_VLID_MIN = 0x1 + EVL_VLID_NULL = 0x0 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_ISATTY = 0xb + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x20 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MBIM = 0xfa + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHOPCOUNT = 0x41 + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPDEFTTL = 0x25 + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x7ff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_STACK = 0x4000 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOPERM = 0x20 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_STALLED = 0x100000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFNAMES = 0x6 + NET_RT_MAXID = 0x7 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHANGE = 0x1 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OLCUC = 0x20 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BFD = 0xb + RTAX_BRD = 0x7 + RTAX_DNS = 0xc + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xf + RTAX_NETMASK = 0x2 + RTAX_SEARCH = 0xe + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTAX_STATIC = 0xd + RTA_AUTHOR = 0x40 + RTA_BFD = 0x800 + RTA_BRD = 0x80 + RTA_DNS = 0x1000 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SEARCH = 0x4000 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTA_STATIC = 0x2000 + RTF_ANNOUNCE = 0x4000 + RTF_BFD = 0x1000000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CACHED = 0x20000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_CONNECTED = 0x800000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x110fc08 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_MULTICAST = 0x200 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTM_ADD = 0x1 + RTM_BFD = 0x12 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_INVALIDATE = 0x11 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_PROPOSAL = 0x13 + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_BITS = 0x8 + RT_TABLEID_MASK = 0xff + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8060693c + SIOCBRDGADDL = 0x80606949 + SIOCBRDGADDS = 0x80606941 + SIOCBRDGARL = 0x808c694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8060693d + SIOCBRDGDELS = 0x80606942 + SIOCBRDGFLUSH = 0x80606948 + SIOCBRDGFRL = 0x808c694e + SIOCBRDGGCACHE = 0xc0186941 + SIOCBRDGGFD = 0xc0186952 + SIOCBRDGGHT = 0xc0186951 + SIOCBRDGGIFFLGS = 0xc060693e + SIOCBRDGGMA = 0xc0186953 + SIOCBRDGGPARAM = 0xc0406958 + SIOCBRDGGPRI = 0xc0186950 + SIOCBRDGGRL = 0xc030694f + SIOCBRDGGTO = 0xc0186946 + SIOCBRDGIFS = 0xc0606942 + SIOCBRDGRTS = 0xc0206943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80186940 + SIOCBRDGSFD = 0x80186952 + SIOCBRDGSHT = 0x80186951 + SIOCBRDGSIFCOST = 0x80606955 + SIOCBRDGSIFFLGS = 0x8060693f + SIOCBRDGSIFPRIO = 0x80606954 + SIOCBRDGSIFPROT = 0x8060694a + SIOCBRDGSMA = 0x80186953 + SIOCBRDGSPRI = 0x80186950 + SIOCBRDGSPROTO = 0x8018695a + SIOCBRDGSTO = 0x80186945 + SIOCBRDGSTXHC = 0x80186959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPARENT = 0x802069b4 + SIOCDIFPHYADDR = 0x80206949 + SIOCDVNETID = 0x802069af + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETMPWCFG = 0xc02069ae + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGETVLAN = 0xc0206990 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc028698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFLLPRIO = 0xc02069b6 + SIOCGIFMEDIA = 0xc0406938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPAIR = 0xc02069b1 + SIOCGIFPARENT = 0xc02069b3 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYDF = 0xc02069c2 + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGUMBINFO = 0xc02069be + SIOCGUMBPARAM = 0xc02069c0 + SIOCGVH = 0xc02069f6 + SIOCGVNETFLOWID = 0xc02069c4 + SIOCGVNETID = 0xc02069a7 + SIOCIFAFATTACH = 0x801169ab + SIOCIFAFDETACH = 0x801169ac + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETMPWCFG = 0x802069ad + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8028698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFLLPRIO = 0x802069b5 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPAIR = 0x802069b0 + SIOCSIFPARENT = 0x802069b2 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYDF = 0x802069c1 + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSUMBPARAM = 0x802069bf + SIOCSVH = 0xc02069f5 + SIOCSVNETFLOWID = 0x802069c3 + SIOCSVNETID = 0x802069a6 + SIOCSWGDPID = 0xc018695b + SIOCSWGMAXFLOW = 0xc0186960 + SIOCSWGMAXGROUP = 0xc018695d + SIOCSWSDPID = 0x8018695c + SIOCSWSPORTNO = 0xc060695f + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_DNS = 0x1000 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_ZEROIZE = 0x2000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCHKVERAUTH = 0x2000741e + TIOCCLRVERAUTH = 0x2000741d + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x4010745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSETVERAUTH = 0x8004741c + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCUCNTL_CBRK = 0x7a + TIOCUCNTL_SBRK = 0x7b + TOSTOP = 0x400000 + UTIME_NOW = -0x2 + UTIME_OMIT = -0x1 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_ANONMIN = 0x7 + VM_LOADAVG = 0x2 + VM_MAXID = 0xc + VM_MAXSLP = 0xa + VM_METER = 0x1 + VM_NKMEMPAGES = 0x6 + VM_PSSTRINGS = 0x3 + VM_SWAPENCRYPT = 0x5 + VM_USPACE = 0xb + VM_UVMEXP = 0x4 + VM_VNODEMIN = 0x9 + VM_VTEXTMIN = 0x8 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 + XCASE = 0x1000000 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x5c) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5f) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5d) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EOWNERDEAD = syscall.Errno(0x5e) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5f) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EAGAIN", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ENOTSUP", "not supported"}, + {92, "EBADMSG", "bad message"}, + {93, "ENOTRECOVERABLE", "state not recoverable"}, + {94, "EOWNERDEAD", "previous owner died"}, + {95, "ELAST", "protocol error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go new file mode 100644 index 00000000000..79d5695c376 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go @@ -0,0 +1,1656 @@ +// mkerrors.sh +// Code generated by the command above; see README.md. DO NOT EDIT. + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +// +build arm,openbsd + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CRTSCTS = 0x10000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_HW = 0x6 + CTL_KERN = 0x1 + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + HW_MACHINE = 0x1 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KERN_HOSTNAME = 0xa + KERN_OSRELEASE = 0x2 + KERN_OSTYPE = 0x1 + KERN_VERSION = 0x4 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x3ff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_DOOMED = 0x8000000 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_NOATIME = 0x8000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SOFTDEP = 0x4000000 + MNT_SYNCHRONOUS = 0x2 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x400ffff + MNT_WAIT = 0x1 + MNT_WANTRDWR = 0x2000000 + MNT_WXALLOWED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x70f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "device not configured"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EDEADLK", "resource deadlock avoided"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "operation not supported by device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "EWOULDBLOCK", "resource temporarily unavailable"}, + {36, "EINPROGRESS", "operation now in progress"}, + {37, "EALREADY", "operation already in progress"}, + {38, "ENOTSOCK", "socket operation on non-socket"}, + {39, "EDESTADDRREQ", "destination address required"}, + {40, "EMSGSIZE", "message too long"}, + {41, "EPROTOTYPE", "protocol wrong type for socket"}, + {42, "ENOPROTOOPT", "protocol not available"}, + {43, "EPROTONOSUPPORT", "protocol not supported"}, + {44, "ESOCKTNOSUPPORT", "socket type not supported"}, + {45, "EOPNOTSUPP", "operation not supported"}, + {46, "EPFNOSUPPORT", "protocol family not supported"}, + {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {48, "EADDRINUSE", "address already in use"}, + {49, "EADDRNOTAVAIL", "can't assign requested address"}, + {50, "ENETDOWN", "network is down"}, + {51, "ENETUNREACH", "network is unreachable"}, + {52, "ENETRESET", "network dropped connection on reset"}, + {53, "ECONNABORTED", "software caused connection abort"}, + {54, "ECONNRESET", "connection reset by peer"}, + {55, "ENOBUFS", "no buffer space available"}, + {56, "EISCONN", "socket is already connected"}, + {57, "ENOTCONN", "socket is not connected"}, + {58, "ESHUTDOWN", "can't send after socket shutdown"}, + {59, "ETOOMANYREFS", "too many references: can't splice"}, + {60, "ETIMEDOUT", "operation timed out"}, + {61, "ECONNREFUSED", "connection refused"}, + {62, "ELOOP", "too many levels of symbolic links"}, + {63, "ENAMETOOLONG", "file name too long"}, + {64, "EHOSTDOWN", "host is down"}, + {65, "EHOSTUNREACH", "no route to host"}, + {66, "ENOTEMPTY", "directory not empty"}, + {67, "EPROCLIM", "too many processes"}, + {68, "EUSERS", "too many users"}, + {69, "EDQUOT", "disk quota exceeded"}, + {70, "ESTALE", "stale NFS file handle"}, + {71, "EREMOTE", "too many levels of remote in path"}, + {72, "EBADRPC", "RPC struct is bad"}, + {73, "ERPCMISMATCH", "RPC version wrong"}, + {74, "EPROGUNAVAIL", "RPC program not available"}, + {75, "EPROGMISMATCH", "program version wrong"}, + {76, "EPROCUNAVAIL", "bad procedure for program"}, + {77, "ENOLCK", "no locks available"}, + {78, "ENOSYS", "function not implemented"}, + {79, "EFTYPE", "inappropriate file type or format"}, + {80, "EAUTH", "authentication error"}, + {81, "ENEEDAUTH", "need authenticator"}, + {82, "EIPSEC", "IPsec processing failure"}, + {83, "ENOATTR", "attribute not found"}, + {84, "EILSEQ", "illegal byte sequence"}, + {85, "ENOMEDIUM", "no medium found"}, + {86, "EMEDIUMTYPE", "wrong medium type"}, + {87, "EOVERFLOW", "value too large to be stored in data type"}, + {88, "ECANCELED", "operation canceled"}, + {89, "EIDRM", "identifier removed"}, + {90, "ENOMSG", "no message of desired type"}, + {91, "ELAST", "not supported"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/BPT trap"}, + {6, "SIGABRT", "abort trap"}, + {7, "SIGEMT", "EMT trap"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus error"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGSYS", "bad system call"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGURG", "urgent I/O condition"}, + {17, "SIGSTOP", "suspended (signal)"}, + {18, "SIGTSTP", "suspended"}, + {19, "SIGCONT", "continued"}, + {20, "SIGCHLD", "child exited"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGIO", "I/O possible"}, + {24, "SIGXCPU", "cputime limit exceeded"}, + {25, "SIGXFSZ", "filesize limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window size changes"}, + {29, "SIGINFO", "information request"}, + {30, "SIGUSR1", "user defined signal 1"}, + {31, "SIGUSR2", "user defined signal 2"}, + {32, "SIGTHR", "thread AST"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go new file mode 100644 index 00000000000..22569db31d3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go @@ -0,0 +1,1532 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,solaris + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_802 = 0x12 + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_FILE = 0x1 + AF_GOSIP = 0x16 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1a + AF_INET_OFFLOAD = 0x1e + AF_IPX = 0x17 + AF_KEY = 0x1b + AF_LAT = 0xe + AF_LINK = 0x19 + AF_LOCAL = 0x1 + AF_MAX = 0x20 + AF_NBS = 0x7 + AF_NCA = 0x1c + AF_NIT = 0x11 + AF_NS = 0x6 + AF_OSI = 0x13 + AF_OSINET = 0x15 + AF_PACKET = 0x20 + AF_POLICY = 0x1d + AF_PUP = 0x4 + AF_ROUTE = 0x18 + AF_SNA = 0xb + AF_TRILL = 0x1f + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_X25 = 0x14 + ARPHRD_ARCNET = 0x7 + ARPHRD_ATM = 0x10 + ARPHRD_AX25 = 0x3 + ARPHRD_CHAOS = 0x5 + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_FC = 0x12 + ARPHRD_FRAME = 0xf + ARPHRD_HDLC = 0x11 + ARPHRD_IB = 0x20 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IPATM = 0x13 + ARPHRD_METRICOM = 0x17 + ARPHRD_TUNNEL = 0x1f + B0 = 0x0 + B110 = 0x3 + B115200 = 0x12 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B153600 = 0x13 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B230400 = 0x14 + B2400 = 0xb + B300 = 0x7 + B307200 = 0x15 + B38400 = 0xf + B460800 = 0x16 + B4800 = 0xc + B50 = 0x1 + B57600 = 0x10 + B600 = 0x8 + B75 = 0x2 + B76800 = 0x11 + B921600 = 0x17 + B9600 = 0xd + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = -0x3fefbd89 + BIOCGDLTLIST32 = -0x3ff7bd89 + BIOCGETIF = 0x4020426b + BIOCGETLIF = 0x4078426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGRTIMEOUT32 = 0x4008427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = -0x7ffbbd90 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = -0x3ffbbd9a + BIOCSDLT = -0x7ffbbd8a + BIOCSETF = -0x7fefbd99 + BIOCSETF32 = -0x7ff7bd99 + BIOCSETIF = -0x7fdfbd94 + BIOCSETLIF = -0x7f87bd94 + BIOCSHDRCMPLT = -0x7ffbbd8b + BIOCSRTIMEOUT = -0x7fefbd86 + BIOCSRTIMEOUT32 = -0x7ff7bd86 + BIOCSSEESENT = -0x7ffbbd87 + BIOCSTCPF = -0x7fefbd8e + BIOCSUDPF = -0x7fefbd8d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0xf + CFLUSH = 0xf + CIBAUD = 0xf0000 + CLOCAL = 0x800 + CLOCK_HIGHRES = 0x4 + CLOCK_LEVEL = 0xa + CLOCK_MONOTONIC = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x5 + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x3 + CLOCK_THREAD_CPUTIME_ID = 0x2 + CLOCK_VIRTUAL = 0x1 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + CSWTCH = 0x1a + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_BACNET_MS_TP = 0xa5 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FRELAY = 0x6b + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xa2 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_PPPD = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EMPTY_SET = 0x0 + EMT_CPCOVF = 0x1 + EQUALITY_CHECK = 0x0 + EXTA = 0xe + EXTB = 0xf + FD_CLOEXEC = 0x1 + FD_NFDBITS = 0x40 + FD_SETSIZE = 0x10000 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHALL = 0x1 + FLUSHDATA = 0x0 + FLUSHO = 0x2000 + F_ALLOCSP = 0xa + F_ALLOCSP64 = 0xa + F_BADFD = 0x2e + F_BLKSIZE = 0x13 + F_BLOCKS = 0x12 + F_CHKFL = 0x8 + F_COMPAT = 0x8 + F_DUP2FD = 0x9 + F_DUP2FD_CLOEXEC = 0x24 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x25 + F_FLOCK = 0x35 + F_FLOCK64 = 0x35 + F_FLOCKW = 0x36 + F_FLOCKW64 = 0x36 + F_FREESP = 0xb + F_FREESP64 = 0xb + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETXFL = 0x2d + F_HASREMOTELOCKS = 0x1a + F_ISSTREAM = 0xd + F_MANDDNY = 0x10 + F_MDACC = 0x20 + F_NODNY = 0x0 + F_NPRIV = 0x10 + F_OFD_GETLK = 0x2f + F_OFD_GETLK64 = 0x2f + F_OFD_SETLK = 0x30 + F_OFD_SETLK64 = 0x30 + F_OFD_SETLKW = 0x31 + F_OFD_SETLKW64 = 0x31 + F_PRIV = 0xf + F_QUOTACTL = 0x11 + F_RDACC = 0x1 + F_RDDNY = 0x1 + F_RDLCK = 0x1 + F_REVOKE = 0x19 + F_RMACC = 0x4 + F_RMDNY = 0x4 + F_RWACC = 0x3 + F_RWDNY = 0x3 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLK64_NBMAND = 0x2a + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETLK_NBMAND = 0x2a + F_SETOWN = 0x18 + F_SHARE = 0x28 + F_SHARE_NBMAND = 0x2b + F_UNLCK = 0x3 + F_UNLKSYS = 0x4 + F_UNSHARE = 0x29 + F_WRACC = 0x2 + F_WRDNY = 0x2 + F_WRLCK = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFF_ADDRCONF = 0x80000 + IFF_ALLMULTI = 0x200 + IFF_ANYCAST = 0x400000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x7f203003b5a + IFF_COS_ENABLED = 0x200000000 + IFF_DEBUG = 0x4 + IFF_DEPRECATED = 0x40000 + IFF_DHCPRUNNING = 0x4000 + IFF_DUPLICATE = 0x4000000000 + IFF_FAILED = 0x10000000 + IFF_FIXEDMTU = 0x1000000000 + IFF_INACTIVE = 0x40000000 + IFF_INTELLIGENT = 0x400 + IFF_IPMP = 0x8000000000 + IFF_IPMP_CANTCHANGE = 0x10000000 + IFF_IPMP_INVALID = 0x1ec200080 + IFF_IPV4 = 0x1000000 + IFF_IPV6 = 0x2000000 + IFF_L3PROTECT = 0x40000000000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x800 + IFF_MULTI_BCAST = 0x1000 + IFF_NOACCEPT = 0x4000000 + IFF_NOARP = 0x80 + IFF_NOFAILOVER = 0x8000000 + IFF_NOLINKLOCAL = 0x20000000000 + IFF_NOLOCAL = 0x20000 + IFF_NONUD = 0x200000 + IFF_NORTEXCH = 0x800000 + IFF_NOTRAILERS = 0x20 + IFF_NOXMIT = 0x10000 + IFF_OFFLINE = 0x80000000 + IFF_POINTOPOINT = 0x10 + IFF_PREFERRED = 0x400000000 + IFF_PRIVATE = 0x8000 + IFF_PROMISC = 0x100 + IFF_ROUTER = 0x100000 + IFF_RUNNING = 0x40 + IFF_STANDBY = 0x20000000 + IFF_TEMPORARY = 0x800000000 + IFF_UNNUMBERED = 0x2000 + IFF_UP = 0x1 + IFF_VIRTUAL = 0x2000000000 + IFF_VRRP = 0x10000000000 + IFF_XRESOLV = 0x100000000 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6TO4 = 0xca + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_IPV4 = 0xc8 + IFT_IPV6 = 0xc9 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_AUTOCONF_MASK = 0xffff0000 + IN_AUTOCONF_NET = 0xa9fe0000 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_CLASSE_NET = 0xffffffff + IN_LOOPBACKNET = 0x7f + IN_PRIVATE12_MASK = 0xfff00000 + IN_PRIVATE12_NET = 0xac100000 + IN_PRIVATE16_MASK = 0xffff0000 + IN_PRIVATE16_NET = 0xc0a80000 + IN_PRIVATE8_MASK = 0xff000000 + IN_PRIVATE8_NET = 0xa000000 + IPPROTO_AH = 0x33 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x4 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_HELLO = 0x3f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_ND = 0x4d + IPPROTO_NONE = 0x3b + IPPROTO_OSPF = 0x59 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_UDP = 0x11 + IPV6_ADD_MEMBERSHIP = 0x9 + IPV6_BOUND_IF = 0x41 + IPV6_CHECKSUM = 0x18 + IPV6_DONTFRAG = 0x21 + IPV6_DROP_MEMBERSHIP = 0xa + IPV6_DSTOPTS = 0xf + IPV6_FLOWINFO_FLOWLABEL = 0xffff0f00 + IPV6_FLOWINFO_TCLASS = 0xf00f + IPV6_HOPLIMIT = 0xc + IPV6_HOPOPTS = 0xe + IPV6_JOIN_GROUP = 0x9 + IPV6_LEAVE_GROUP = 0xa + IPV6_MULTICAST_HOPS = 0x7 + IPV6_MULTICAST_IF = 0x6 + IPV6_MULTICAST_LOOP = 0x8 + IPV6_NEXTHOP = 0xd + IPV6_PAD1_OPT = 0x0 + IPV6_PATHMTU = 0x25 + IPV6_PKTINFO = 0xb + IPV6_PREFER_SRC_CGA = 0x20 + IPV6_PREFER_SRC_CGADEFAULT = 0x10 + IPV6_PREFER_SRC_CGAMASK = 0x30 + IPV6_PREFER_SRC_COA = 0x2 + IPV6_PREFER_SRC_DEFAULT = 0x15 + IPV6_PREFER_SRC_HOME = 0x1 + IPV6_PREFER_SRC_MASK = 0x3f + IPV6_PREFER_SRC_MIPDEFAULT = 0x1 + IPV6_PREFER_SRC_MIPMASK = 0x3 + IPV6_PREFER_SRC_NONCGA = 0x10 + IPV6_PREFER_SRC_PUBLIC = 0x4 + IPV6_PREFER_SRC_TMP = 0x8 + IPV6_PREFER_SRC_TMPDEFAULT = 0x4 + IPV6_PREFER_SRC_TMPMASK = 0xc + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x13 + IPV6_RECVHOPOPTS = 0x14 + IPV6_RECVPATHMTU = 0x24 + IPV6_RECVPKTINFO = 0x12 + IPV6_RECVRTHDR = 0x16 + IPV6_RECVRTHDRDSTOPTS = 0x17 + IPV6_RECVTCLASS = 0x19 + IPV6_RTHDR = 0x10 + IPV6_RTHDRDSTOPTS = 0x11 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SEC_OPT = 0x22 + IPV6_SRC_PREFERENCES = 0x23 + IPV6_TCLASS = 0x26 + IPV6_UNICAST_HOPS = 0x5 + IPV6_UNSPEC_SRC = 0x42 + IPV6_USE_MIN_MTU = 0x20 + IPV6_V6ONLY = 0x27 + IP_ADD_MEMBERSHIP = 0x13 + IP_ADD_SOURCE_MEMBERSHIP = 0x17 + IP_BLOCK_SOURCE = 0x15 + IP_BOUND_IF = 0x41 + IP_BROADCAST = 0x106 + IP_BROADCAST_TTL = 0x43 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPINIT_IF = 0x45 + IP_DONTFRAG = 0x1b + IP_DONTROUTE = 0x105 + IP_DROP_MEMBERSHIP = 0x14 + IP_DROP_SOURCE_MEMBERSHIP = 0x18 + IP_HDRINCL = 0x2 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x10 + IP_MULTICAST_LOOP = 0x12 + IP_MULTICAST_TTL = 0x11 + IP_NEXTHOP = 0x19 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x9 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVSLLA = 0xa + IP_RECVTTL = 0xb + IP_RETOPTS = 0x8 + IP_REUSEADDR = 0x104 + IP_SEC_OPT = 0x22 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x16 + IP_UNSPEC_SRC = 0x42 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_ACCESS_DEFAULT = 0x6 + MADV_ACCESS_LWP = 0x7 + MADV_ACCESS_MANY = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NORMAL = 0x0 + MADV_PURGE = 0x9 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80 + MAP_ALIGN = 0x200 + MAP_ANON = 0x100 + MAP_ANONYMOUS = 0x100 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_INITDATA = 0x800 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TEXT = 0x400 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x10 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_DUPCTRL = 0x800 + MSG_EOR = 0x8 + MSG_MAXIOVLEN = 0x10 + MSG_NOTIFICATION = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x20 + MSG_WAITALL = 0x40 + MSG_XPG4_2 = 0x8000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_OLDSYNC = 0x0 + MS_SYNC = 0x4 + M_FLUSH = 0x86 + NAME_MAX = 0xff + NEWDEV = 0x1 + NL0 = 0x0 + NL1 = 0x100 + NLDLY = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + OLDDEV = 0x0 + ONBITSMAJOR = 0x7 + ONBITSMINOR = 0x8 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENFAIL = -0x1 + OPOST = 0x1 + O_ACCMODE = 0x600003 + O_APPEND = 0x8 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DSYNC = 0x40 + O_EXCL = 0x400 + O_EXEC = 0x400000 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x4 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NOLINKS = 0x40000 + O_NONBLOCK = 0x80 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x8000 + O_SEARCH = 0x200000 + O_SIOCGIFCONF = -0x3ff796ec + O_SIOCGLIFCONF = -0x3fef9688 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + O_XATTR = 0x4000 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x3 + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_NUMBITS = 0x9 + RTA_SRC = 0x100 + RTF_BLACKHOLE = 0x1000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INDIRECT = 0x40000 + RTF_KERNEL = 0x80000 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTIRT = 0x10000 + RTF_PRIVATE = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SETSRC = 0x20000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTF_ZONE = 0x100000 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0xf + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_FREEADDR = 0x10 + RTM_GET = 0x4 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_VERSION = 0x3 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_AWARE = 0x1 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_RIGHTS = 0x1010 + SCM_TIMESTAMP = 0x1013 + SCM_UCRED = 0x1012 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIG2STR_MAX = 0x20 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDRT = -0x7fcf8df6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fdb96e0 + SIOCDELMULTI = -0x7fdf96ce + SIOCDELRT = -0x7fcf8df5 + SIOCDXARP = -0x7fff9658 + SIOCGARP = -0x3fdb96e1 + SIOCGDSTINFO = -0x3fff965c + SIOCGENADDR = -0x3fdf96ab + SIOCGENPSTATS = -0x3fdf96c7 + SIOCGETLSGCNT = -0x3fef8deb + SIOCGETNAME = 0x40107334 + SIOCGETPEER = 0x40107335 + SIOCGETPROP = -0x3fff8f44 + SIOCGETSGCNT = -0x3feb8deb + SIOCGETSYNC = -0x3fdf96d3 + SIOCGETVIFCNT = -0x3feb8dec + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fdf96f3 + SIOCGIFBRDADDR = -0x3fdf96e9 + SIOCGIFCONF = -0x3ff796a4 + SIOCGIFDSTADDR = -0x3fdf96f1 + SIOCGIFFLAGS = -0x3fdf96ef + SIOCGIFHWADDR = -0x3fdf9647 + SIOCGIFINDEX = -0x3fdf96a6 + SIOCGIFMEM = -0x3fdf96ed + SIOCGIFMETRIC = -0x3fdf96e5 + SIOCGIFMTU = -0x3fdf96ea + SIOCGIFMUXID = -0x3fdf96a8 + SIOCGIFNETMASK = -0x3fdf96e7 + SIOCGIFNUM = 0x40046957 + SIOCGIP6ADDRPOLICY = -0x3fff965e + SIOCGIPMSFILTER = -0x3ffb964c + SIOCGLIFADDR = -0x3f87968f + SIOCGLIFBINDING = -0x3f879666 + SIOCGLIFBRDADDR = -0x3f879685 + SIOCGLIFCONF = -0x3fef965b + SIOCGLIFDADSTATE = -0x3f879642 + SIOCGLIFDSTADDR = -0x3f87968d + SIOCGLIFFLAGS = -0x3f87968b + SIOCGLIFGROUPINFO = -0x3f4b9663 + SIOCGLIFGROUPNAME = -0x3f879664 + SIOCGLIFHWADDR = -0x3f879640 + SIOCGLIFINDEX = -0x3f87967b + SIOCGLIFLNKINFO = -0x3f879674 + SIOCGLIFMETRIC = -0x3f879681 + SIOCGLIFMTU = -0x3f879686 + SIOCGLIFMUXID = -0x3f87967d + SIOCGLIFNETMASK = -0x3f879683 + SIOCGLIFNUM = -0x3ff3967e + SIOCGLIFSRCOF = -0x3fef964f + SIOCGLIFSUBNET = -0x3f879676 + SIOCGLIFTOKEN = -0x3f879678 + SIOCGLIFUSESRC = -0x3f879651 + SIOCGLIFZONE = -0x3f879656 + SIOCGLOWAT = 0x40047303 + SIOCGMSFILTER = -0x3ffb964e + SIOCGPGRP = 0x40047309 + SIOCGSTAMP = -0x3fef9646 + SIOCGXARP = -0x3fff9659 + SIOCIFDETACH = -0x7fdf96c8 + SIOCILB = -0x3ffb9645 + SIOCLIFADDIF = -0x3f879691 + SIOCLIFDELND = -0x7f879673 + SIOCLIFGETND = -0x3f879672 + SIOCLIFREMOVEIF = -0x7f879692 + SIOCLIFSETND = -0x7f879671 + SIOCLOWER = -0x7fdf96d7 + SIOCSARP = -0x7fdb96e2 + SIOCSCTPGOPT = -0x3fef9653 + SIOCSCTPPEELOFF = -0x3ffb9652 + SIOCSCTPSOPT = -0x7fef9654 + SIOCSENABLESDP = -0x3ffb9649 + SIOCSETPROP = -0x7ffb8f43 + SIOCSETSYNC = -0x7fdf96d4 + SIOCSHIWAT = -0x7ffb8d00 + SIOCSIFADDR = -0x7fdf96f4 + SIOCSIFBRDADDR = -0x7fdf96e8 + SIOCSIFDSTADDR = -0x7fdf96f2 + SIOCSIFFLAGS = -0x7fdf96f0 + SIOCSIFINDEX = -0x7fdf96a5 + SIOCSIFMEM = -0x7fdf96ee + SIOCSIFMETRIC = -0x7fdf96e4 + SIOCSIFMTU = -0x7fdf96eb + SIOCSIFMUXID = -0x7fdf96a7 + SIOCSIFNAME = -0x7fdf96b7 + SIOCSIFNETMASK = -0x7fdf96e6 + SIOCSIP6ADDRPOLICY = -0x7fff965d + SIOCSIPMSFILTER = -0x7ffb964b + SIOCSLGETREQ = -0x3fdf96b9 + SIOCSLIFADDR = -0x7f879690 + SIOCSLIFBRDADDR = -0x7f879684 + SIOCSLIFDSTADDR = -0x7f87968e + SIOCSLIFFLAGS = -0x7f87968c + SIOCSLIFGROUPNAME = -0x7f879665 + SIOCSLIFINDEX = -0x7f87967a + SIOCSLIFLNKINFO = -0x7f879675 + SIOCSLIFMETRIC = -0x7f879680 + SIOCSLIFMTU = -0x7f879687 + SIOCSLIFMUXID = -0x7f87967c + SIOCSLIFNAME = -0x3f87967f + SIOCSLIFNETMASK = -0x7f879682 + SIOCSLIFPREFIX = -0x3f879641 + SIOCSLIFSUBNET = -0x7f879677 + SIOCSLIFTOKEN = -0x7f879679 + SIOCSLIFUSESRC = -0x7f879650 + SIOCSLIFZONE = -0x7f879655 + SIOCSLOWAT = -0x7ffb8cfe + SIOCSLSTAT = -0x7fdf96b8 + SIOCSMSFILTER = -0x7ffb964d + SIOCSPGRP = -0x7ffb8cf8 + SIOCSPROMISC = -0x7ffb96d0 + SIOCSQPTR = -0x3ffb9648 + SIOCSSDSTATS = -0x3fdf96d2 + SIOCSSESTATS = -0x3fdf96d1 + SIOCSXARP = -0x7fff965a + SIOCTMYADDR = -0x3ff79670 + SIOCTMYSITE = -0x3ff7966e + SIOCTONLINK = -0x3ff7966f + SIOCUPPER = -0x7fdf96d8 + SIOCX25RCV = -0x3fdf96c4 + SIOCX25TBL = -0x3fdf96c3 + SIOCX25XMT = -0x3fdf96c5 + SIOCXPROTO = 0x20007337 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NDELAY = 0x200000 + SOCK_NONBLOCK = 0x100000 + SOCK_RAW = 0x4 + SOCK_RDM = 0x5 + SOCK_SEQPACKET = 0x6 + SOCK_STREAM = 0x2 + SOCK_TYPE_MASK = 0xffff + SOL_FILTER = 0xfffc + SOL_PACKET = 0xfffd + SOL_ROUTE = 0xfffe + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ALL = 0x3f + SO_ALLZONES = 0x1014 + SO_ANON_MLP = 0x100a + SO_ATTACH_FILTER = 0x40000001 + SO_BAND = 0x4000 + SO_BROADCAST = 0x20 + SO_COPYOPT = 0x80000 + SO_DEBUG = 0x1 + SO_DELIM = 0x8000 + SO_DETACH_FILTER = 0x40000002 + SO_DGRAM_ERRIND = 0x200 + SO_DOMAIN = 0x100c + SO_DONTLINGER = -0x81 + SO_DONTROUTE = 0x10 + SO_ERROPT = 0x40000 + SO_ERROR = 0x1007 + SO_EXCLBIND = 0x1015 + SO_HIWAT = 0x10 + SO_ISNTTY = 0x800 + SO_ISTTY = 0x400 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOWAT = 0x20 + SO_MAC_EXEMPT = 0x100b + SO_MAC_IMPLICIT = 0x1016 + SO_MAXBLK = 0x100000 + SO_MAXPSZ = 0x8 + SO_MINPSZ = 0x4 + SO_MREADOFF = 0x80 + SO_MREADON = 0x40 + SO_NDELOFF = 0x200 + SO_NDELON = 0x100 + SO_NODELIM = 0x10000 + SO_OOBINLINE = 0x100 + SO_PROTOTYPE = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVPSH = 0x100d + SO_RCVTIMEO = 0x1006 + SO_READOPT = 0x1 + SO_RECVUCRED = 0x400 + SO_REUSEADDR = 0x4 + SO_SECATTR = 0x1011 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STRHOLD = 0x20000 + SO_TAIL = 0x200000 + SO_TIMESTAMP = 0x1013 + SO_TONSTOP = 0x2000 + SO_TOSTOP = 0x1000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_VRRP = 0x1017 + SO_WROFF = 0x2 + S_ENFMT = 0x400 + S_IAMB = 0x1ff + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFDOOR = 0xd000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFNAM = 0x5000 + S_IFPORT = 0xe000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_INSEM = 0x1 + S_INSHD = 0x2 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_ABORT_THRESHOLD = 0x11 + TCP_ANONPRIVBIND = 0x20 + TCP_CONN_ABORT_THRESHOLD = 0x13 + TCP_CONN_NOTIFY_THRESHOLD = 0x12 + TCP_CORK = 0x18 + TCP_EXCLBIND = 0x21 + TCP_INIT_CWND = 0x15 + TCP_KEEPALIVE = 0x8 + TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17 + TCP_KEEPALIVE_THRESHOLD = 0x16 + TCP_KEEPCNT = 0x23 + TCP_KEEPIDLE = 0x22 + TCP_KEEPINTVL = 0x24 + TCP_LINGER2 = 0x1c + TCP_MAXSEG = 0x2 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOTIFY_THRESHOLD = 0x10 + TCP_RECVDSTADDR = 0x14 + TCP_RTO_INITIAL = 0x19 + TCP_RTO_MAX = 0x1b + TCP_RTO_MIN = 0x1a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETSF = 0x5410 + TCSETSW = 0x540f + TCXONC = 0x5406 + TIOC = 0x5400 + TIOCCBRK = 0x747a + TIOCCDTR = 0x7478 + TIOCCILOOP = 0x746c + TIOCEXCL = 0x740d + TIOCFLUSH = 0x7410 + TIOCGETC = 0x7412 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x7414 + TIOCGPPS = 0x547d + TIOCGPPSEV = 0x547f + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5469 + TIOCGWINSZ = 0x5468 + TIOCHPCL = 0x7402 + TIOCKBOF = 0x5409 + TIOCKBON = 0x5408 + TIOCLBIC = 0x747e + TIOCLBIS = 0x747f + TIOCLGET = 0x747c + TIOCLSET = 0x747d + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMSET = 0x741a + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x7471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7473 + TIOCREMOTE = 0x741e + TIOCSBRK = 0x747b + TIOCSCTTY = 0x7484 + TIOCSDTR = 0x7479 + TIOCSETC = 0x7411 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIGNAL = 0x741f + TIOCSILOOP = 0x746d + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x7415 + TIOCSPPS = 0x547e + TIOCSSOFTCAR = 0x546a + TIOCSTART = 0x746e + TIOCSTI = 0x7417 + TIOCSTOP = 0x746f + TIOCSWINSZ = 0x5467 + TOSTOP = 0x100 + UTIME_NOW = -0x1 + UTIME_OMIT = -0x2 + VCEOF = 0x8 + VCEOL = 0x9 + VDISCARD = 0xd + VDSUSP = 0xb + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VERASE2 = 0x11 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTATUS = 0x10 + VSTOP = 0x9 + VSUSP = 0xa + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WCONTFLG = 0xffff + WCONTINUED = 0x8 + WCOREFLG = 0x80 + WEXITED = 0x1 + WNOHANG = 0x40 + WNOWAIT = 0x80 + WOPTMASK = 0xcf + WRAP = 0x20000 + WSIGMASK = 0x7f + WSTOPFLG = 0x7f + WSTOPPED = 0x4 + WTRAPPED = 0x2 + WUNTRACED = 0x4 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x39) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x2f) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x31) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOCKUNMAPPED = syscall.Errno(0x48) + ELOOP = syscall.Errno(0x5a) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTACTIVE = syscall.Errno(0x49) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTRECOVERABLE = syscall.Errno(0x3b) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x30) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0x3a) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMOTE = syscall.Errno(0x42) + ERESTART = syscall.Errno(0x5b) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCANCEL = syscall.Signal(0x24) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGFREEZE = syscall.Signal(0x22) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x29) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGJVM1 = syscall.Signal(0x27) + SIGJVM2 = syscall.Signal(0x28) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x25) + SIGLWP = syscall.Signal(0x21) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHAW = syscall.Signal(0x23) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWAITING = syscall.Signal(0x20) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) + SIGXRES = syscall.Signal(0x26) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "not owner"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "I/O error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "arg list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file number"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "not enough space"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "file table overflow"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "argument out of domain"}, + {34, "ERANGE", "result too large"}, + {35, "ENOMSG", "no message of desired type"}, + {36, "EIDRM", "identifier removed"}, + {37, "ECHRNG", "channel number out of range"}, + {38, "EL2NSYNC", "level 2 not synchronized"}, + {39, "EL3HLT", "level 3 halted"}, + {40, "EL3RST", "level 3 reset"}, + {41, "ELNRNG", "link number out of range"}, + {42, "EUNATCH", "protocol driver not attached"}, + {43, "ENOCSI", "no CSI structure available"}, + {44, "EL2HLT", "level 2 halted"}, + {45, "EDEADLK", "deadlock situation detected/avoided"}, + {46, "ENOLCK", "no record locks available"}, + {47, "ECANCELED", "operation canceled"}, + {48, "ENOTSUP", "operation not supported"}, + {49, "EDQUOT", "disc quota exceeded"}, + {50, "EBADE", "bad exchange descriptor"}, + {51, "EBADR", "bad request descriptor"}, + {52, "EXFULL", "message tables full"}, + {53, "ENOANO", "anode table overflow"}, + {54, "EBADRQC", "bad request code"}, + {55, "EBADSLT", "invalid slot"}, + {56, "EDEADLOCK", "file locking deadlock"}, + {57, "EBFONT", "bad font file format"}, + {58, "EOWNERDEAD", "owner of the lock died"}, + {59, "ENOTRECOVERABLE", "lock is not recoverable"}, + {60, "ENOSTR", "not a stream device"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of stream resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "ELOCKUNMAPPED", "locked lock was unmapped "}, + {73, "ENOTACTIVE", "facility is not active"}, + {74, "EMULTIHOP", "multihop attempted"}, + {77, "EBADMSG", "not a data message"}, + {78, "ENAMETOOLONG", "file name too long"}, + {79, "EOVERFLOW", "value too large for defined data type"}, + {80, "ENOTUNIQ", "name not unique on network"}, + {81, "EBADFD", "file descriptor in bad state"}, + {82, "EREMCHG", "remote address changed"}, + {83, "ELIBACC", "can not access a needed shared library"}, + {84, "ELIBBAD", "accessing a corrupted shared library"}, + {85, "ELIBSCN", ".lib section in a.out corrupted"}, + {86, "ELIBMAX", "attempting to link in more shared libraries than system limit"}, + {87, "ELIBEXEC", "can not exec a shared library directly"}, + {88, "EILSEQ", "illegal byte sequence"}, + {89, "ENOSYS", "operation not applicable"}, + {90, "ELOOP", "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS"}, + {91, "ERESTART", "error 91"}, + {92, "ESTRPIPE", "error 92"}, + {93, "ENOTEMPTY", "directory not empty"}, + {94, "EUSERS", "too many users"}, + {95, "ENOTSOCK", "socket operation on non-socket"}, + {96, "EDESTADDRREQ", "destination address required"}, + {97, "EMSGSIZE", "message too long"}, + {98, "EPROTOTYPE", "protocol wrong type for socket"}, + {99, "ENOPROTOOPT", "option not supported by protocol"}, + {120, "EPROTONOSUPPORT", "protocol not supported"}, + {121, "ESOCKTNOSUPPORT", "socket type not supported"}, + {122, "EOPNOTSUPP", "operation not supported on transport endpoint"}, + {123, "EPFNOSUPPORT", "protocol family not supported"}, + {124, "EAFNOSUPPORT", "address family not supported by protocol family"}, + {125, "EADDRINUSE", "address already in use"}, + {126, "EADDRNOTAVAIL", "cannot assign requested address"}, + {127, "ENETDOWN", "network is down"}, + {128, "ENETUNREACH", "network is unreachable"}, + {129, "ENETRESET", "network dropped connection because of reset"}, + {130, "ECONNABORTED", "software caused connection abort"}, + {131, "ECONNRESET", "connection reset by peer"}, + {132, "ENOBUFS", "no buffer space available"}, + {133, "EISCONN", "transport endpoint is already connected"}, + {134, "ENOTCONN", "transport endpoint is not connected"}, + {143, "ESHUTDOWN", "cannot send after socket shutdown"}, + {144, "ETOOMANYREFS", "too many references: cannot splice"}, + {145, "ETIMEDOUT", "connection timed out"}, + {146, "ECONNREFUSED", "connection refused"}, + {147, "EHOSTDOWN", "host is down"}, + {148, "EHOSTUNREACH", "no route to host"}, + {149, "EALREADY", "operation already in progress"}, + {150, "EINPROGRESS", "operation now in progress"}, + {151, "ESTALE", "stale NFS file handle"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal Instruction"}, + {5, "SIGTRAP", "trace/Breakpoint Trap"}, + {6, "SIGABRT", "abort"}, + {7, "SIGEMT", "emulation Trap"}, + {8, "SIGFPE", "arithmetic Exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGBUS", "bus Error"}, + {11, "SIGSEGV", "segmentation Fault"}, + {12, "SIGSYS", "bad System Call"}, + {13, "SIGPIPE", "broken Pipe"}, + {14, "SIGALRM", "alarm Clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGUSR1", "user Signal 1"}, + {17, "SIGUSR2", "user Signal 2"}, + {18, "SIGCHLD", "child Status Changed"}, + {19, "SIGPWR", "power-Fail/Restart"}, + {20, "SIGWINCH", "window Size Change"}, + {21, "SIGURG", "urgent Socket Condition"}, + {22, "SIGIO", "pollable Event"}, + {23, "SIGSTOP", "stopped (signal)"}, + {24, "SIGTSTP", "stopped (user)"}, + {25, "SIGCONT", "continued"}, + {26, "SIGTTIN", "stopped (tty input)"}, + {27, "SIGTTOU", "stopped (tty output)"}, + {28, "SIGVTALRM", "virtual Timer Expired"}, + {29, "SIGPROF", "profiling Timer Expired"}, + {30, "SIGXCPU", "cpu Limit Exceeded"}, + {31, "SIGXFSZ", "file Size Limit Exceeded"}, + {32, "SIGWAITING", "no runnable lwp"}, + {33, "SIGLWP", "inter-lwp signal"}, + {34, "SIGFREEZE", "checkpoint Freeze"}, + {35, "SIGTHAW", "checkpoint Thaw"}, + {36, "SIGCANCEL", "thread Cancellation"}, + {37, "SIGLOST", "resource Lost"}, + {38, "SIGXRES", "resource Control Exceeded"}, + {39, "SIGJVM1", "reserved for JVM 1"}, + {40, "SIGJVM2", "reserved for JVM 2"}, + {41, "SIGINFO", "information Request"}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptrace386_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptrace386_linux.go new file mode 100644 index 00000000000..2d21c49e126 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptrace386_linux.go @@ -0,0 +1,80 @@ +// Code generated by linux/mkall.go generatePtracePair(386, amd64). DO NOT EDIT. + +// +build linux +// +build 386 amd64 + +package unix + +import "unsafe" + +// PtraceRegs386 is the registers used by 386 binaries. +type PtraceRegs386 struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +// PtraceGetRegs386 fetches the registers used by 386 binaries. +func PtraceGetRegs386(pid int, regsout *PtraceRegs386) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegs386 sets the registers used by 386 binaries. +func PtraceSetRegs386(pid int, regs *PtraceRegs386) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsAmd64 is the registers used by amd64 binaries. +type PtraceRegsAmd64 struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries. +func PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsAmd64 sets the registers used by amd64 binaries. +func PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracearm_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracearm_linux.go new file mode 100644 index 00000000000..faf23bbed97 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracearm_linux.go @@ -0,0 +1,41 @@ +// Code generated by linux/mkall.go generatePtracePair(arm, arm64). DO NOT EDIT. + +// +build linux +// +build arm arm64 + +package unix + +import "unsafe" + +// PtraceRegsArm is the registers used by arm binaries. +type PtraceRegsArm struct { + Uregs [18]uint32 +} + +// PtraceGetRegsArm fetches the registers used by arm binaries. +func PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsArm sets the registers used by arm binaries. +func PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsArm64 is the registers used by arm64 binaries. +type PtraceRegsArm64 struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +// PtraceGetRegsArm64 fetches the registers used by arm64 binaries. +func PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsArm64 sets the registers used by arm64 binaries. +func PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracemips_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracemips_linux.go new file mode 100644 index 00000000000..c431131e63c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracemips_linux.go @@ -0,0 +1,50 @@ +// Code generated by linux/mkall.go generatePtracePair(mips, mips64). DO NOT EDIT. + +// +build linux +// +build mips mips64 + +package unix + +import "unsafe" + +// PtraceRegsMips is the registers used by mips binaries. +type PtraceRegsMips struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips fetches the registers used by mips binaries. +func PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips sets the registers used by mips binaries. +func PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsMips64 is the registers used by mips64 binaries. +type PtraceRegsMips64 struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips64 fetches the registers used by mips64 binaries. +func PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips64 sets the registers used by mips64 binaries. +func PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go new file mode 100644 index 00000000000..dc3d6d37322 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go @@ -0,0 +1,50 @@ +// Code generated by linux/mkall.go generatePtracePair(mipsle, mips64le). DO NOT EDIT. + +// +build linux +// +build mipsle mips64le + +package unix + +import "unsafe" + +// PtraceRegsMipsle is the registers used by mipsle binaries. +type PtraceRegsMipsle struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMipsle fetches the registers used by mipsle binaries. +func PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMipsle sets the registers used by mipsle binaries. +func PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsMips64le is the registers used by mips64le binaries. +type PtraceRegsMips64le struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips64le fetches the registers used by mips64le binaries. +func PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips64le sets the registers used by mips64le binaries. +func PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go new file mode 100644 index 00000000000..6bae21e5d89 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go @@ -0,0 +1,1450 @@ +// mksyscall_aix_ppc.pl -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build aix,ppc + +package unix + +/* +#include +#include +int utimes(uintptr_t, uintptr_t); +int utimensat(int, uintptr_t, uintptr_t, int); +int getcwd(uintptr_t, size_t); +int accept(int, uintptr_t, uintptr_t); +int getdirent(int, uintptr_t, size_t); +int wait4(int, uintptr_t, int, uintptr_t); +int ioctl(int, int, uintptr_t); +int fcntl(uintptr_t, int, uintptr_t); +int acct(uintptr_t); +int chdir(uintptr_t); +int chroot(uintptr_t); +int close(int); +int dup(int); +void exit(int); +int faccessat(int, uintptr_t, unsigned int, int); +int fchdir(int); +int fchmod(int, unsigned int); +int fchmodat(int, uintptr_t, unsigned int, int); +int fchownat(int, uintptr_t, int, int, int); +int fdatasync(int); +int fsync(int); +int getpgid(int); +int getpgrp(); +int getpid(); +int getppid(); +int getpriority(int, int); +int getrusage(int, uintptr_t); +int getsid(int); +int kill(int, int); +int syslog(int, uintptr_t, size_t); +int mkdir(int, uintptr_t, unsigned int); +int mkdirat(int, uintptr_t, unsigned int); +int mkfifo(uintptr_t, unsigned int); +int mknod(uintptr_t, unsigned int, int); +int mknodat(int, uintptr_t, unsigned int, int); +int nanosleep(uintptr_t, uintptr_t); +int open64(uintptr_t, int, unsigned int); +int openat(int, uintptr_t, int, unsigned int); +int read(int, uintptr_t, size_t); +int readlink(uintptr_t, uintptr_t, size_t); +int renameat(int, uintptr_t, int, uintptr_t); +int setdomainname(uintptr_t, size_t); +int sethostname(uintptr_t, size_t); +int setpgid(int, int); +int setsid(); +int settimeofday(uintptr_t); +int setuid(int); +int setgid(int); +int setpriority(int, int, int); +int statx(int, uintptr_t, int, int, uintptr_t); +int sync(); +uintptr_t times(uintptr_t); +int umask(int); +int uname(uintptr_t); +int unlink(uintptr_t); +int unlinkat(int, uintptr_t, int); +int ustat(int, uintptr_t); +int write(int, uintptr_t, size_t); +int dup2(int, int); +int posix_fadvise64(int, long long, long long, int); +int fchown(int, int, int); +int fstat(int, uintptr_t); +int fstatat(int, uintptr_t, uintptr_t, int); +int fstatfs(int, uintptr_t); +int ftruncate(int, long long); +int getegid(); +int geteuid(); +int getgid(); +int getuid(); +int lchown(uintptr_t, int, int); +int listen(int, int); +int lstat(uintptr_t, uintptr_t); +int pause(); +int pread64(int, uintptr_t, size_t, long long); +int pwrite64(int, uintptr_t, size_t, long long); +int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +int setregid(int, int); +int setreuid(int, int); +int shutdown(int, int); +long long splice(int, uintptr_t, int, uintptr_t, int, int); +int stat(uintptr_t, uintptr_t); +int statfs(uintptr_t, uintptr_t); +int truncate(uintptr_t, long long); +int bind(int, uintptr_t, uintptr_t); +int connect(int, uintptr_t, uintptr_t); +int getgroups(int, uintptr_t); +int setgroups(int, uintptr_t); +int getsockopt(int, int, int, uintptr_t, uintptr_t); +int setsockopt(int, int, int, uintptr_t, uintptr_t); +int socket(int, int, int); +int socketpair(int, int, int, uintptr_t); +int getpeername(int, uintptr_t, uintptr_t); +int getsockname(int, uintptr_t, uintptr_t); +int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); +int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); +int recvmsg(int, uintptr_t, int); +int sendmsg(int, uintptr_t, int); +int munmap(uintptr_t, uintptr_t); +int madvise(uintptr_t, size_t, int); +int mprotect(uintptr_t, size_t, int); +int mlock(uintptr_t, size_t); +int mlockall(int); +int msync(uintptr_t, size_t, int); +int munlock(uintptr_t, size_t); +int munlockall(); +int pipe(uintptr_t); +int poll(uintptr_t, int, int); +int gettimeofday(uintptr_t, uintptr_t); +int time(uintptr_t); +int utime(uintptr_t, uintptr_t); +int getrlimit64(int, uintptr_t); +int setrlimit64(int, uintptr_t); +long long lseek64(int, long long, int); +uintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long); + +*/ +import "C" +import ( + "unsafe" +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getcwd(buf []byte) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + var _p1 int + _p1 = len(buf) + r0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirent(fd int, buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + var _p1 int + _p1 = len(buf) + r0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) { + r0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage)))) + wpid = Pid_t(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + r0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) { + r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)) + r = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) { + r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)) + val = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.acct(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.chdir(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.chroot(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + r0, er := C.close(C.int(fd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, er := C.dup(C.int(oldfd)) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + C.exit(C.int(code)) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + r0, er := C.fchdir(C.int(fd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + r0, er := C.fchmod(C.int(fd), C.uint(mode)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + r0, er := C.fdatasync(C.int(fd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + r0, er := C.fsync(C.int(fd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, er := C.getpgid(C.int(pid)) + pgid = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pid int) { + r0, _ := C.getpgrp() + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := C.getpid() + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := C.getppid() + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, er := C.getpriority(C.int(which), C.int(who)) + prio = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + r0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, er := C.getsid(C.int(pid)) + sid = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig Signal) (err error) { + r0, er := C.kill(C.int(pid), C.int(sig)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + var _p1 int + _p1 = len(buf) + r0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(dirfd int, path string, mode uint32) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + r0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + var _p2 int + _p2 = len(buf) + r0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(oldpath))) + _p1 := uintptr(unsafe.Pointer(C.CString(newpath))) + r0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + r0, er := C.setpgid(C.int(pid), C.int(pgid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, er := C.setsid() + pid = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + r0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + r0, er := C.setuid(C.int(uid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(uid int) (err error) { + r0, er := C.setgid(C.int(uid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + r0, er := C.setpriority(C.int(which), C.int(who), C.int(prio)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + C.sync() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms)))) + ticks = uintptr(r0) + if uintptr(r0) == ^uintptr(0) && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := C.umask(C.int(mask)) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + r0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.unlink(C.uintptr_t(_p0)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + r0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + r0, er := C.dup2(C.int(oldfd), C.int(newfd)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + r0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + r0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + r0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + r0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + r0, er := C.ftruncate(C.int(fd), C.longlong(length)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := C.getegid() + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := C.geteuid() + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := C.getgid() + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := C.getuid() + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + r0, er := C.listen(C.int(s), C.int(n)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + r0, er := C.pause() + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, 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 = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + r0, er := C.setregid(C.int(rgid), C.int(egid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + r0, er := C.setreuid(C.int(ruid), C.int(euid)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + r0, er := C.shutdown(C.int(fd), C.int(how)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, 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 = int64(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + r0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + r0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list)))) + nn = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + r0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + r0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + r0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, er := C.socket(C.int(domain), C.int(typ), C.int(proto)) + fd = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + r0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + r0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + r0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + var _p1 int + _p1 = len(p) + r0, 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 = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + var _p1 int + _p1 = len(buf) + r0, 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))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, er := C.recvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, er := C.sendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + r0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + r0, er := C.mlockall(C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + var _p1 int + _p1 = len(b) + r0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1)) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + r0, er := C.munlockall() + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + r0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout)) + n = int(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tv *Timeval, tzp *Timezone) (err error) { + r0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t)))) + tt = Time_t(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + _p0 := uintptr(unsafe.Pointer(C.CString(path))) + r0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + r0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + r0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim)))) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence)) + off = int64(r0) + if r0 == -1 && er != nil { + err = er + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)) + xaddr = uintptr(r0) + if uintptr(r0) == ^uintptr(0) && er != nil { + err = er + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go new file mode 100644 index 00000000000..3e929e520e0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go @@ -0,0 +1,1408 @@ +// mksyscall_aix_ppc64.pl -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build aix,ppc64 + +package unix + +import ( + "unsafe" +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getcwd(buf []byte) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirent(fd int, buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) { + r0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage))) + wpid = Pid_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, e1 := callioctl(fd, int(req), arg) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) { + r0, e1 := callfcntl(fd, cmd, uintptr(arg)) + r = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) { + _, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callacct(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callchdir(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callchroot(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, e1 := callclose(fd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, e1 := calldup(oldfd) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + callexit(code) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, e1 := callfchdir(fd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, e1 := callfchmod(fd, mode) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, e1 := callfdatasync(fd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, e1 := callfsync(fd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, e1 := callgetpgid(pid) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pid int) { + r0, _ := callgetpgrp() + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := callgetpid() + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := callgetppid() + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, e1 := callgetpriority(which, who) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, e1 := callgetsid(pid) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig Signal) (err error) { + _, e1 := callkill(pid, int(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + r0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, e1 := callsetpgid(pid, pgid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, e1 := callsetsid() + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, e1 := callsetuid(uid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(uid int) (err error) { + _, e1 := callsetgid(uid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, e1 := callsetpriority(which, who, prio) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + callsync() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, e1 := calltimes(uintptr(unsafe.Pointer(tms))) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := callumask(mask) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, e1 := calluname(uintptr(unsafe.Pointer(buf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callunlink(uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, e1 := callread(fd, uintptr(unsafe.Pointer(p)), np) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, e1 := callwrite(fd, uintptr(unsafe.Pointer(p)), np) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, e1 := calldup2(oldfd, newfd) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, e1 := callposix_fadvise64(fd, offset, length, advice) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, e1 := callfchown(fd, uid, gid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, e1 := callftruncate(fd, length) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := callgetegid() + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := callgeteuid() + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := callgetgid() + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := callgetuid() + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, e1 := calllisten(s, n) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, e1 := callpause() + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, e1 := callsetregid(rgid, egid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, e1 := callsetreuid(ruid, euid) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, e1 := callshutdown(fd, how) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e1 := callbind(s, uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e1 := callconnect(s, uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list))) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, e1 := callsetsockopt(s, level, name, uintptr(val), vallen) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, e1 := callsocket(domain, typ, proto) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, e1 := callrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, e1 := callsendmsg(s, uintptr(unsafe.Pointer(msg)), flags) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, e1 := callmunmap(addr, length) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, e1 := callmlockall(flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, e1 := callmunlockall() + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, e1 := callpipe(uintptr(unsafe.Pointer(p))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tv *Timeval, tzp *Timezone) (err error) { + _, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, e1 := calltime(uintptr(unsafe.Pointer(t))) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, e1 := calllseek(fd, offset, whence) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, e1 := callmmap64(addr, length, prot, flags, fd, offset) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go new file mode 100644 index 00000000000..a185ee84241 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go @@ -0,0 +1,1162 @@ +// mksyscall_aix_ppc64.pl -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build aix,ppc64 +// +build !gccgo + +package unix + +import ( + "unsafe" +) + +//go:cgo_import_dynamic libc_utimes utimes "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_utimensat utimensat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getcwd getcwd "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_accept accept "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getdirent getdirent "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_wait4 wait4 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_ioctl ioctl "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fcntl fcntl "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_acct acct "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_chdir chdir "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_chroot chroot "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_close close "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_dup dup "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_exit exit "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_faccessat faccessat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchdir fchdir "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchmod fchmod "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchownat fchownat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fsync fsync "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpgid getpgid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpid getpid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getppid getppid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpriority getpriority "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getrusage getrusage "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getsid getsid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_kill kill "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_syslog syslog "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mkdir mkdir "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mknod mknod "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mknodat mknodat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_open64 open64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_openat openat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_read read "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_readlink readlink "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_renameat renameat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setdomainname setdomainname "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_sethostname sethostname "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setpgid setpgid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setsid setsid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setuid setuid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setgid setgid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setpriority setpriority "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_statx statx "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_sync sync "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_times times "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_umask umask "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_uname uname "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_unlink unlink "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_ustat ustat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_write write "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_dup2 dup2 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fchown fchown "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fstat fstat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fstatat fstatat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getegid getegid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_geteuid geteuid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getgid getgid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getuid getuid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_lchown lchown "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_listen listen "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_lstat lstat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pause pause "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pread64 pread64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pwrite64 pwrite64 "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pselect pselect "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setregid setregid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setreuid setreuid "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_shutdown shutdown "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_splice splice "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_stat stat "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_statfs statfs "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_truncate truncate "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_bind bind "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_connect connect "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getgroups getgroups "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setgroups setgroups "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_socket socket "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_socketpair socketpair "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getpeername getpeername "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getsockname getsockname "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_sendto sendto "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_munmap munmap "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_madvise madvise "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mprotect mprotect "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mlock mlock "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mlockall mlockall "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_msync msync "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_munlock munlock "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_munlockall munlockall "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_pipe pipe "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_poll poll "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_time time "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_utime utime "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_lseek lseek "libc.a/shr_64.o" +//go:cgo_import_dynamic libc_mmap64 mmap64 "libc.a/shr_64.o" + +//go:linkname libc_utimes libc_utimes +//go:linkname libc_utimensat libc_utimensat +//go:linkname libc_getcwd libc_getcwd +//go:linkname libc_accept libc_accept +//go:linkname libc_getdirent libc_getdirent +//go:linkname libc_wait4 libc_wait4 +//go:linkname libc_ioctl libc_ioctl +//go:linkname libc_fcntl libc_fcntl +//go:linkname libc_acct libc_acct +//go:linkname libc_chdir libc_chdir +//go:linkname libc_chroot libc_chroot +//go:linkname libc_close libc_close +//go:linkname libc_dup libc_dup +//go:linkname libc_exit libc_exit +//go:linkname libc_faccessat libc_faccessat +//go:linkname libc_fchdir libc_fchdir +//go:linkname libc_fchmod libc_fchmod +//go:linkname libc_fchmodat libc_fchmodat +//go:linkname libc_fchownat libc_fchownat +//go:linkname libc_fdatasync libc_fdatasync +//go:linkname libc_fsync libc_fsync +//go:linkname libc_getpgid libc_getpgid +//go:linkname libc_getpgrp libc_getpgrp +//go:linkname libc_getpid libc_getpid +//go:linkname libc_getppid libc_getppid +//go:linkname libc_getpriority libc_getpriority +//go:linkname libc_getrusage libc_getrusage +//go:linkname libc_getsid libc_getsid +//go:linkname libc_kill libc_kill +//go:linkname libc_syslog libc_syslog +//go:linkname libc_mkdir libc_mkdir +//go:linkname libc_mkdirat libc_mkdirat +//go:linkname libc_mkfifo libc_mkfifo +//go:linkname libc_mknod libc_mknod +//go:linkname libc_mknodat libc_mknodat +//go:linkname libc_nanosleep libc_nanosleep +//go:linkname libc_open64 libc_open64 +//go:linkname libc_openat libc_openat +//go:linkname libc_read libc_read +//go:linkname libc_readlink libc_readlink +//go:linkname libc_renameat libc_renameat +//go:linkname libc_setdomainname libc_setdomainname +//go:linkname libc_sethostname libc_sethostname +//go:linkname libc_setpgid libc_setpgid +//go:linkname libc_setsid libc_setsid +//go:linkname libc_settimeofday libc_settimeofday +//go:linkname libc_setuid libc_setuid +//go:linkname libc_setgid libc_setgid +//go:linkname libc_setpriority libc_setpriority +//go:linkname libc_statx libc_statx +//go:linkname libc_sync libc_sync +//go:linkname libc_times libc_times +//go:linkname libc_umask libc_umask +//go:linkname libc_uname libc_uname +//go:linkname libc_unlink libc_unlink +//go:linkname libc_unlinkat libc_unlinkat +//go:linkname libc_ustat libc_ustat +//go:linkname libc_write libc_write +//go:linkname libc_dup2 libc_dup2 +//go:linkname libc_posix_fadvise64 libc_posix_fadvise64 +//go:linkname libc_fchown libc_fchown +//go:linkname libc_fstat libc_fstat +//go:linkname libc_fstatat libc_fstatat +//go:linkname libc_fstatfs libc_fstatfs +//go:linkname libc_ftruncate libc_ftruncate +//go:linkname libc_getegid libc_getegid +//go:linkname libc_geteuid libc_geteuid +//go:linkname libc_getgid libc_getgid +//go:linkname libc_getuid libc_getuid +//go:linkname libc_lchown libc_lchown +//go:linkname libc_listen libc_listen +//go:linkname libc_lstat libc_lstat +//go:linkname libc_pause libc_pause +//go:linkname libc_pread64 libc_pread64 +//go:linkname libc_pwrite64 libc_pwrite64 +//go:linkname libc_pselect libc_pselect +//go:linkname libc_setregid libc_setregid +//go:linkname libc_setreuid libc_setreuid +//go:linkname libc_shutdown libc_shutdown +//go:linkname libc_splice libc_splice +//go:linkname libc_stat libc_stat +//go:linkname libc_statfs libc_statfs +//go:linkname libc_truncate libc_truncate +//go:linkname libc_bind libc_bind +//go:linkname libc_connect libc_connect +//go:linkname libc_getgroups libc_getgroups +//go:linkname libc_setgroups libc_setgroups +//go:linkname libc_getsockopt libc_getsockopt +//go:linkname libc_setsockopt libc_setsockopt +//go:linkname libc_socket libc_socket +//go:linkname libc_socketpair libc_socketpair +//go:linkname libc_getpeername libc_getpeername +//go:linkname libc_getsockname libc_getsockname +//go:linkname libc_recvfrom libc_recvfrom +//go:linkname libc_sendto libc_sendto +//go:linkname libc_recvmsg libc_recvmsg +//go:linkname libc_sendmsg libc_sendmsg +//go:linkname libc_munmap libc_munmap +//go:linkname libc_madvise libc_madvise +//go:linkname libc_mprotect libc_mprotect +//go:linkname libc_mlock libc_mlock +//go:linkname libc_mlockall libc_mlockall +//go:linkname libc_msync libc_msync +//go:linkname libc_munlock libc_munlock +//go:linkname libc_munlockall libc_munlockall +//go:linkname libc_pipe libc_pipe +//go:linkname libc_poll libc_poll +//go:linkname libc_gettimeofday libc_gettimeofday +//go:linkname libc_time libc_time +//go:linkname libc_utime libc_utime +//go:linkname libc_getrlimit libc_getrlimit +//go:linkname libc_setrlimit libc_setrlimit +//go:linkname libc_lseek libc_lseek +//go:linkname libc_mmap64 libc_mmap64 + +type syscallFunc uintptr + +var ( + libc_utimes, + libc_utimensat, + libc_getcwd, + libc_accept, + libc_getdirent, + libc_wait4, + libc_ioctl, + libc_fcntl, + libc_acct, + libc_chdir, + libc_chroot, + libc_close, + libc_dup, + libc_exit, + libc_faccessat, + libc_fchdir, + libc_fchmod, + libc_fchmodat, + libc_fchownat, + libc_fdatasync, + libc_fsync, + libc_getpgid, + libc_getpgrp, + libc_getpid, + libc_getppid, + libc_getpriority, + libc_getrusage, + libc_getsid, + libc_kill, + libc_syslog, + libc_mkdir, + libc_mkdirat, + libc_mkfifo, + libc_mknod, + libc_mknodat, + libc_nanosleep, + libc_open64, + libc_openat, + libc_read, + libc_readlink, + libc_renameat, + libc_setdomainname, + libc_sethostname, + libc_setpgid, + libc_setsid, + libc_settimeofday, + libc_setuid, + libc_setgid, + libc_setpriority, + libc_statx, + libc_sync, + libc_times, + libc_umask, + libc_uname, + libc_unlink, + libc_unlinkat, + libc_ustat, + libc_write, + libc_dup2, + libc_posix_fadvise64, + libc_fchown, + libc_fstat, + libc_fstatat, + libc_fstatfs, + libc_ftruncate, + libc_getegid, + libc_geteuid, + libc_getgid, + libc_getuid, + libc_lchown, + libc_listen, + libc_lstat, + libc_pause, + libc_pread64, + libc_pwrite64, + libc_pselect, + libc_setregid, + libc_setreuid, + libc_shutdown, + libc_splice, + libc_stat, + libc_statfs, + libc_truncate, + libc_bind, + libc_connect, + libc_getgroups, + libc_setgroups, + libc_getsockopt, + libc_setsockopt, + libc_socket, + libc_socketpair, + libc_getpeername, + libc_getsockname, + libc_recvfrom, + libc_sendto, + libc_recvmsg, + libc_sendmsg, + libc_munmap, + libc_madvise, + libc_mprotect, + libc_mlock, + libc_mlockall, + libc_msync, + libc_munlock, + libc_munlockall, + libc_pipe, + libc_poll, + libc_gettimeofday, + libc_time, + libc_utime, + libc_getrlimit, + libc_setrlimit, + libc_lseek, + libc_mmap64 syscallFunc +) + +// Implemented in runtime/syscall_aix.go. +func rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) +func syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callclose(fd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calldup(oldfd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callexit(code int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchdir(fd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfdatasync(fd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfsync(fd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpgid(pid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpgrp() (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetppid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsid(pid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callkill(pid int, sig int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetsid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetuid(uid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetgid(uid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsync() (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltimes(tms uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callumask(mask int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calluname(buf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetegid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgeteuid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetgid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetuid() (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllisten(s int, n int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpause() (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags)) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, stat, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmlockall(flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunlockall() (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpipe(p uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltime(t uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { + r1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) { + r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go new file mode 100644 index 00000000000..aef7c0e7846 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go @@ -0,0 +1,1042 @@ +// mksyscall_aix_ppc64.pl -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build aix,ppc64 +// +build gccgo + +package unix + +/* +#include +int utimes(uintptr_t, uintptr_t); +int utimensat(int, uintptr_t, uintptr_t, int); +int getcwd(uintptr_t, size_t); +int accept(int, uintptr_t, uintptr_t); +int getdirent(int, uintptr_t, size_t); +int wait4(int, uintptr_t, int, uintptr_t); +int ioctl(int, int, uintptr_t); +int fcntl(uintptr_t, int, uintptr_t); +int acct(uintptr_t); +int chdir(uintptr_t); +int chroot(uintptr_t); +int close(int); +int dup(int); +void exit(int); +int faccessat(int, uintptr_t, unsigned int, int); +int fchdir(int); +int fchmod(int, unsigned int); +int fchmodat(int, uintptr_t, unsigned int, int); +int fchownat(int, uintptr_t, int, int, int); +int fdatasync(int); +int fsync(int); +int getpgid(int); +int getpgrp(); +int getpid(); +int getppid(); +int getpriority(int, int); +int getrusage(int, uintptr_t); +int getsid(int); +int kill(int, int); +int syslog(int, uintptr_t, size_t); +int mkdir(int, uintptr_t, unsigned int); +int mkdirat(int, uintptr_t, unsigned int); +int mkfifo(uintptr_t, unsigned int); +int mknod(uintptr_t, unsigned int, int); +int mknodat(int, uintptr_t, unsigned int, int); +int nanosleep(uintptr_t, uintptr_t); +int open64(uintptr_t, int, unsigned int); +int openat(int, uintptr_t, int, unsigned int); +int read(int, uintptr_t, size_t); +int readlink(uintptr_t, uintptr_t, size_t); +int renameat(int, uintptr_t, int, uintptr_t); +int setdomainname(uintptr_t, size_t); +int sethostname(uintptr_t, size_t); +int setpgid(int, int); +int setsid(); +int settimeofday(uintptr_t); +int setuid(int); +int setgid(int); +int setpriority(int, int, int); +int statx(int, uintptr_t, int, int, uintptr_t); +int sync(); +uintptr_t times(uintptr_t); +int umask(int); +int uname(uintptr_t); +int unlink(uintptr_t); +int unlinkat(int, uintptr_t, int); +int ustat(int, uintptr_t); +int write(int, uintptr_t, size_t); +int dup2(int, int); +int posix_fadvise64(int, long long, long long, int); +int fchown(int, int, int); +int fstat(int, uintptr_t); +int fstatat(int, uintptr_t, uintptr_t, int); +int fstatfs(int, uintptr_t); +int ftruncate(int, long long); +int getegid(); +int geteuid(); +int getgid(); +int getuid(); +int lchown(uintptr_t, int, int); +int listen(int, int); +int lstat(uintptr_t, uintptr_t); +int pause(); +int pread64(int, uintptr_t, size_t, long long); +int pwrite64(int, uintptr_t, size_t, long long); +int pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); +int setregid(int, int); +int setreuid(int, int); +int shutdown(int, int); +long long splice(int, uintptr_t, int, uintptr_t, int, int); +int stat(uintptr_t, uintptr_t); +int statfs(uintptr_t, uintptr_t); +int truncate(uintptr_t, long long); +int bind(int, uintptr_t, uintptr_t); +int connect(int, uintptr_t, uintptr_t); +int getgroups(int, uintptr_t); +int setgroups(int, uintptr_t); +int getsockopt(int, int, int, uintptr_t, uintptr_t); +int setsockopt(int, int, int, uintptr_t, uintptr_t); +int socket(int, int, int); +int socketpair(int, int, int, uintptr_t); +int getpeername(int, uintptr_t, uintptr_t); +int getsockname(int, uintptr_t, uintptr_t); +int recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); +int sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t); +int recvmsg(int, uintptr_t, int); +int sendmsg(int, uintptr_t, int); +int munmap(uintptr_t, uintptr_t); +int madvise(uintptr_t, size_t, int); +int mprotect(uintptr_t, size_t, int); +int mlock(uintptr_t, size_t); +int mlockall(int); +int msync(uintptr_t, size_t, int); +int munlock(uintptr_t, size_t); +int munlockall(); +int pipe(uintptr_t); +int poll(uintptr_t, int, int); +int gettimeofday(uintptr_t, uintptr_t); +int time(uintptr_t); +int utime(uintptr_t, uintptr_t); +int getrlimit(int, uintptr_t); +int setrlimit(int, uintptr_t); +long long lseek(int, long long, int); +uintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long); + +*/ +import "C" +import ( + "syscall" +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callacct(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.acct(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.chdir(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.chroot(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callclose(fd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.close(C.int(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calldup(oldfd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.dup(C.int(oldfd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callexit(code int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.exit(C.int(code))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchdir(fd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchdir(C.int(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchmod(C.int(fd), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfdatasync(fd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fdatasync(C.int(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfsync(fd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fsync(C.int(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpgid(pid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpgid(C.int(pid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpgrp() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpgrp()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetppid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getppid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpriority(which int, who int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpriority(C.int(which), C.int(who))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsid(pid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getsid(C.int(pid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callkill(pid int, sig int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.kill(C.int(pid), C.int(sig))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setpgid(C.int(pid), C.int(pgid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetsid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setsid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.settimeofday(C.uintptr_t(tv))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetuid(uid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setuid(C.int(uid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetgid(uid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setgid(C.int(uid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsync() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.sync()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltimes(tms uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.times(C.uintptr_t(tms))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callumask(mask int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.umask(C.int(mask))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calluname(buf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.uname(C.uintptr_t(buf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.unlink(C.uintptr_t(_p0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetegid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getegid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgeteuid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.geteuid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetgid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getgid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetuid() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getuid()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllisten(s int, n int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.listen(C.int(s), C.int(n))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpause() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pause()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) { + r1 = 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))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setregid(C.int(rgid), C.int(egid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setreuid(C.int(ruid), C.int(euid))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callshutdown(fd int, how int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.shutdown(C.int(fd), C.int(how))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(stat))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) { + r1 = 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))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) { + r1 = 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))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.recvmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.sendmsg(C.int(s), C.uintptr_t(msg), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmlockall(flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mlockall(C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmunlockall() (r1 uintptr, e1 Errno) { + r1 = uintptr(C.munlockall()) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpipe(p uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.pipe(C.uintptr_t(p))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calltime(t uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.time(C.uintptr_t(t))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence))) + e1 = syscall.GetErrno() + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) { + r1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))) + e1 = syscall.GetErrno() + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go new file mode 100644 index 00000000000..9ce06df6e85 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go @@ -0,0 +1,1769 @@ +// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build darwin,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func removexattr(path string, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fremovexattr(fd int, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { + r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int32(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go new file mode 100644 index 00000000000..de99270491a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -0,0 +1,1769 @@ +// mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build darwin,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func removexattr(path string, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fremovexattr(fd int, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { + r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int64(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go new file mode 100644 index 00000000000..81c4f093559 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go @@ -0,0 +1,1769 @@ +// mksyscall.pl -l32 -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build darwin,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func removexattr(path string, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fremovexattr(fd int, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { + r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int32(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go new file mode 100644 index 00000000000..338c32d409d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -0,0 +1,1769 @@ +// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build darwin,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func removexattr(path string, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fremovexattr(fd int, attr string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { + r0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int64(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go new file mode 100644 index 00000000000..12da7b41f16 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go @@ -0,0 +1,1524 @@ +// mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build dragonfly,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpread(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go new file mode 100644 index 00000000000..9bbbf9662ac --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -0,0 +1,2015 @@ +// mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build freebsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *stat_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat_freebsd12(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat(fd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs(path string, stat *statfs_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs_freebsd12(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go new file mode 100644 index 00000000000..ee7090ff46a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -0,0 +1,2015 @@ +// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build freebsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *stat_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat_freebsd12(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat(fd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs(path string, stat *statfs_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs_freebsd12(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go new file mode 100644 index 00000000000..9aeff5131c9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -0,0 +1,2015 @@ +// mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build freebsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, stat *stat_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat_freebsd12(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs(fd int, stat *statfs_freebsd11_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat(fd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, stat *stat_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs(path string, stat *statfs_freebsd11_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func statfs_freebsd12(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go new file mode 100644 index 00000000000..cd94680d169 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -0,0 +1,2182 @@ +// mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go new file mode 100644 index 00000000000..96e9df7daa5 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -0,0 +1,2364 @@ +// mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go new file mode 100644 index 00000000000..e8d82d14cf9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -0,0 +1,2284 @@ +// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go new file mode 100644 index 00000000000..41f2d0cf081 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -0,0 +1,2191 @@ +// mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go new file mode 100644 index 00000000000..7e65fe0b743 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -0,0 +1,2362 @@ +// mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r0)<<32 | int64(r1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (p1 int, p2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + p1 = int(r0) + p2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go new file mode 100644 index 00000000000..fd06fb890fd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -0,0 +1,2333 @@ +// mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go new file mode 100644 index 00000000000..9e8ec28c919 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -0,0 +1,2333 @@ +// mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips64le + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go new file mode 100644 index 00000000000..b4d2ccbb017 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -0,0 +1,2362 @@ +// mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mipsle + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (p1 int, p2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + p1 = int(r0) + p2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go new file mode 100644 index 00000000000..bca3d2536c6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -0,0 +1,2411 @@ +// mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,ppc64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go new file mode 100644 index 00000000000..e34089c66e7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -0,0 +1,2411 @@ +// mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,ppc64le + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func syncFileRange2(fd int, flags int, off int64, n int64) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go new file mode 100644 index 00000000000..312b2afafb2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -0,0 +1,2191 @@ +// mksyscall.pl -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,riscv64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go new file mode 100644 index 00000000000..04ec8befeed --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -0,0 +1,2181 @@ +// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,s390x + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGetres(clockid int32, res *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func DeleteModule(name string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func FinitModule(fd int, params string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + var _p0 unsafe.Pointer + if len(dest) > 0 { + _p0 = unsafe.Pointer(&dest[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fremovexattr(fd int, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InitModule(moduleImage []byte, params string) (err error) { + var _p0 unsafe.Pointer + if len(moduleImage) > 0 { + _p0 = unsafe.Pointer(&moduleImage[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + var _p1 *byte + _p1, err = BytePtrFromString(params) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func MemfdCreate(name string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func faccessat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go new file mode 100644 index 00000000000..b26aee9579a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -0,0 +1,2172 @@ +// mksyscall.pl -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,sparc64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + SyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, 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 = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + SyscallNoError(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go new file mode 100644 index 00000000000..c0d856c5527 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -0,0 +1,1669 @@ +// mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build netbsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go new file mode 100644 index 00000000000..1466a8ca178 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -0,0 +1,1669 @@ +// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build netbsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go new file mode 100644 index 00000000000..2ca54f02974 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -0,0 +1,1669 @@ +// mksyscall.pl -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build netbsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go new file mode 100644 index 00000000000..0822356816c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -0,0 +1,1535 @@ +// mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build openbsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go new file mode 100644 index 00000000000..3d0bae4270e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -0,0 +1,1535 @@ +// mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build openbsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go new file mode 100644 index 00000000000..6422c460540 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -0,0 +1,1535 @@ +// mksyscall.pl -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build openbsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrtable() (rtable int, err error) { + r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0) + rtable = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrtable(rtable int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go new file mode 100644 index 00000000000..97b22a499ed --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -0,0 +1,1953 @@ +// mksyscall_solaris.pl -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build solaris,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc_pipe pipe "libc.so" +//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so" +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" +//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" +//go:cgo_import_dynamic libc_gethostname gethostname "libc.so" +//go:cgo_import_dynamic libc_utimes utimes "libc.so" +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" +//go:cgo_import_dynamic libc_futimesat futimesat "libc.so" +//go:cgo_import_dynamic libc_accept accept "libsocket.so" +//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" +//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" +//go:cgo_import_dynamic libc_acct acct "libc.so" +//go:cgo_import_dynamic libc___makedev __makedev "libc.so" +//go:cgo_import_dynamic libc___major __major "libc.so" +//go:cgo_import_dynamic libc___minor __minor "libc.so" +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" +//go:cgo_import_dynamic libc_poll poll "libc.so" +//go:cgo_import_dynamic libc_access access "libc.so" +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" +//go:cgo_import_dynamic libc_chdir chdir "libc.so" +//go:cgo_import_dynamic libc_chmod chmod "libc.so" +//go:cgo_import_dynamic libc_chown chown "libc.so" +//go:cgo_import_dynamic libc_chroot chroot "libc.so" +//go:cgo_import_dynamic libc_close close "libc.so" +//go:cgo_import_dynamic libc_creat creat "libc.so" +//go:cgo_import_dynamic libc_dup dup "libc.so" +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" +//go:cgo_import_dynamic libc_exit exit "libc.so" +//go:cgo_import_dynamic libc_faccessat faccessat "libc.so" +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" +//go:cgo_import_dynamic libc_fchown fchown "libc.so" +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" +//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so" +//go:cgo_import_dynamic libc_flock flock "libc.so" +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" +//go:cgo_import_dynamic libc_fstat fstat "libc.so" +//go:cgo_import_dynamic libc_fstatat fstatat "libc.so" +//go:cgo_import_dynamic libc_fstatvfs fstatvfs "libc.so" +//go:cgo_import_dynamic libc_getdents getdents "libc.so" +//go:cgo_import_dynamic libc_getgid getgid "libc.so" +//go:cgo_import_dynamic libc_getpid getpid "libc.so" +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" +//go:cgo_import_dynamic libc_getegid getegid "libc.so" +//go:cgo_import_dynamic libc_getppid getppid "libc.so" +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" +//go:cgo_import_dynamic libc_getuid getuid "libc.so" +//go:cgo_import_dynamic libc_kill kill "libc.so" +//go:cgo_import_dynamic libc_lchown lchown "libc.so" +//go:cgo_import_dynamic libc_link link "libc.so" +//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so" +//go:cgo_import_dynamic libc_lstat lstat "libc.so" +//go:cgo_import_dynamic libc_madvise madvise "libc.so" +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" +//go:cgo_import_dynamic libc_mknod mknod "libc.so" +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" +//go:cgo_import_dynamic libc_mlock mlock "libc.so" +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" +//go:cgo_import_dynamic libc_msync msync "libc.so" +//go:cgo_import_dynamic libc_munlock munlock "libc.so" +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" +//go:cgo_import_dynamic libc_open open "libc.so" +//go:cgo_import_dynamic libc_openat openat "libc.so" +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" +//go:cgo_import_dynamic libc_pause pause "libc.so" +//go:cgo_import_dynamic libc_pread pread "libc.so" +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" +//go:cgo_import_dynamic libc_read read "libc.so" +//go:cgo_import_dynamic libc_readlink readlink "libc.so" +//go:cgo_import_dynamic libc_rename rename "libc.so" +//go:cgo_import_dynamic libc_renameat renameat "libc.so" +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" +//go:cgo_import_dynamic libc_lseek lseek "libc.so" +//go:cgo_import_dynamic libc_select select "libc.so" +//go:cgo_import_dynamic libc_setegid setegid "libc.so" +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" +//go:cgo_import_dynamic libc_setgid setgid "libc.so" +//go:cgo_import_dynamic libc_sethostname sethostname "libc.so" +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" +//go:cgo_import_dynamic libc_setregid setregid "libc.so" +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" +//go:cgo_import_dynamic libc_setsid setsid "libc.so" +//go:cgo_import_dynamic libc_setuid setuid "libc.so" +//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" +//go:cgo_import_dynamic libc_stat stat "libc.so" +//go:cgo_import_dynamic libc_statvfs statvfs "libc.so" +//go:cgo_import_dynamic libc_symlink symlink "libc.so" +//go:cgo_import_dynamic libc_sync sync "libc.so" +//go:cgo_import_dynamic libc_times times "libc.so" +//go:cgo_import_dynamic libc_truncate truncate "libc.so" +//go:cgo_import_dynamic libc_fsync fsync "libc.so" +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" +//go:cgo_import_dynamic libc_umask umask "libc.so" +//go:cgo_import_dynamic libc_uname uname "libc.so" +//go:cgo_import_dynamic libc_umount umount "libc.so" +//go:cgo_import_dynamic libc_unlink unlink "libc.so" +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" +//go:cgo_import_dynamic libc_ustat ustat "libc.so" +//go:cgo_import_dynamic libc_utime utime "libc.so" +//go:cgo_import_dynamic libc___xnet_bind __xnet_bind "libsocket.so" +//go:cgo_import_dynamic libc___xnet_connect __xnet_connect "libsocket.so" +//go:cgo_import_dynamic libc_mmap mmap "libc.so" +//go:cgo_import_dynamic libc_munmap munmap "libc.so" +//go:cgo_import_dynamic libc_sendfile sendfile "libsendfile.so" +//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto "libsocket.so" +//go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so" +//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so" +//go:cgo_import_dynamic libc_write write "libc.so" +//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" +//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" + +//go:linkname procpipe libc_pipe +//go:linkname procgetsockname libc_getsockname +//go:linkname procGetcwd libc_getcwd +//go:linkname procgetgroups libc_getgroups +//go:linkname procsetgroups libc_setgroups +//go:linkname procwait4 libc_wait4 +//go:linkname procgethostname libc_gethostname +//go:linkname procutimes libc_utimes +//go:linkname procutimensat libc_utimensat +//go:linkname procfcntl libc_fcntl +//go:linkname procfutimesat libc_futimesat +//go:linkname procaccept libc_accept +//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg +//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg +//go:linkname procacct libc_acct +//go:linkname proc__makedev libc___makedev +//go:linkname proc__major libc___major +//go:linkname proc__minor libc___minor +//go:linkname procioctl libc_ioctl +//go:linkname procpoll libc_poll +//go:linkname procAccess libc_access +//go:linkname procAdjtime libc_adjtime +//go:linkname procChdir libc_chdir +//go:linkname procChmod libc_chmod +//go:linkname procChown libc_chown +//go:linkname procChroot libc_chroot +//go:linkname procClose libc_close +//go:linkname procCreat libc_creat +//go:linkname procDup libc_dup +//go:linkname procDup2 libc_dup2 +//go:linkname procExit libc_exit +//go:linkname procFaccessat libc_faccessat +//go:linkname procFchdir libc_fchdir +//go:linkname procFchmod libc_fchmod +//go:linkname procFchmodat libc_fchmodat +//go:linkname procFchown libc_fchown +//go:linkname procFchownat libc_fchownat +//go:linkname procFdatasync libc_fdatasync +//go:linkname procFlock libc_flock +//go:linkname procFpathconf libc_fpathconf +//go:linkname procFstat libc_fstat +//go:linkname procFstatat libc_fstatat +//go:linkname procFstatvfs libc_fstatvfs +//go:linkname procGetdents libc_getdents +//go:linkname procGetgid libc_getgid +//go:linkname procGetpid libc_getpid +//go:linkname procGetpgid libc_getpgid +//go:linkname procGetpgrp libc_getpgrp +//go:linkname procGeteuid libc_geteuid +//go:linkname procGetegid libc_getegid +//go:linkname procGetppid libc_getppid +//go:linkname procGetpriority libc_getpriority +//go:linkname procGetrlimit libc_getrlimit +//go:linkname procGetrusage libc_getrusage +//go:linkname procGettimeofday libc_gettimeofday +//go:linkname procGetuid libc_getuid +//go:linkname procKill libc_kill +//go:linkname procLchown libc_lchown +//go:linkname procLink libc_link +//go:linkname proc__xnet_llisten libc___xnet_llisten +//go:linkname procLstat libc_lstat +//go:linkname procMadvise libc_madvise +//go:linkname procMkdir libc_mkdir +//go:linkname procMkdirat libc_mkdirat +//go:linkname procMkfifo libc_mkfifo +//go:linkname procMkfifoat libc_mkfifoat +//go:linkname procMknod libc_mknod +//go:linkname procMknodat libc_mknodat +//go:linkname procMlock libc_mlock +//go:linkname procMlockall libc_mlockall +//go:linkname procMprotect libc_mprotect +//go:linkname procMsync libc_msync +//go:linkname procMunlock libc_munlock +//go:linkname procMunlockall libc_munlockall +//go:linkname procNanosleep libc_nanosleep +//go:linkname procOpen libc_open +//go:linkname procOpenat libc_openat +//go:linkname procPathconf libc_pathconf +//go:linkname procPause libc_pause +//go:linkname procPread libc_pread +//go:linkname procPwrite libc_pwrite +//go:linkname procread libc_read +//go:linkname procReadlink libc_readlink +//go:linkname procRename libc_rename +//go:linkname procRenameat libc_renameat +//go:linkname procRmdir libc_rmdir +//go:linkname proclseek libc_lseek +//go:linkname procSelect libc_select +//go:linkname procSetegid libc_setegid +//go:linkname procSeteuid libc_seteuid +//go:linkname procSetgid libc_setgid +//go:linkname procSethostname libc_sethostname +//go:linkname procSetpgid libc_setpgid +//go:linkname procSetpriority libc_setpriority +//go:linkname procSetregid libc_setregid +//go:linkname procSetreuid libc_setreuid +//go:linkname procSetrlimit libc_setrlimit +//go:linkname procSetsid libc_setsid +//go:linkname procSetuid libc_setuid +//go:linkname procshutdown libc_shutdown +//go:linkname procStat libc_stat +//go:linkname procStatvfs libc_statvfs +//go:linkname procSymlink libc_symlink +//go:linkname procSync libc_sync +//go:linkname procTimes libc_times +//go:linkname procTruncate libc_truncate +//go:linkname procFsync libc_fsync +//go:linkname procFtruncate libc_ftruncate +//go:linkname procUmask libc_umask +//go:linkname procUname libc_uname +//go:linkname procumount libc_umount +//go:linkname procUnlink libc_unlink +//go:linkname procUnlinkat libc_unlinkat +//go:linkname procUstat libc_ustat +//go:linkname procUtime libc_utime +//go:linkname proc__xnet_bind libc___xnet_bind +//go:linkname proc__xnet_connect libc___xnet_connect +//go:linkname procmmap libc_mmap +//go:linkname procmunmap libc_munmap +//go:linkname procsendfile libc_sendfile +//go:linkname proc__xnet_sendto libc___xnet_sendto +//go:linkname proc__xnet_socket libc___xnet_socket +//go:linkname proc__xnet_socketpair libc___xnet_socketpair +//go:linkname procwrite libc_write +//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt +//go:linkname procgetpeername libc_getpeername +//go:linkname procsetsockopt libc_setsockopt +//go:linkname procrecvfrom libc_recvfrom + +var ( + procpipe, + procgetsockname, + procGetcwd, + procgetgroups, + procsetgroups, + procwait4, + procgethostname, + procutimes, + procutimensat, + procfcntl, + procfutimesat, + procaccept, + proc__xnet_recvmsg, + proc__xnet_sendmsg, + procacct, + proc__makedev, + proc__major, + proc__minor, + procioctl, + procpoll, + procAccess, + procAdjtime, + procChdir, + procChmod, + procChown, + procChroot, + procClose, + procCreat, + procDup, + procDup2, + procExit, + procFaccessat, + procFchdir, + procFchmod, + procFchmodat, + procFchown, + procFchownat, + procFdatasync, + procFlock, + procFpathconf, + procFstat, + procFstatat, + procFstatvfs, + procGetdents, + procGetgid, + procGetpid, + procGetpgid, + procGetpgrp, + procGeteuid, + procGetegid, + procGetppid, + procGetpriority, + procGetrlimit, + procGetrusage, + procGettimeofday, + procGetuid, + procKill, + procLchown, + procLink, + proc__xnet_llisten, + procLstat, + procMadvise, + procMkdir, + procMkdirat, + procMkfifo, + procMkfifoat, + procMknod, + procMknodat, + procMlock, + procMlockall, + procMprotect, + procMsync, + procMunlock, + procMunlockall, + procNanosleep, + procOpen, + procOpenat, + procPathconf, + procPause, + procPread, + procPwrite, + procread, + procReadlink, + procRename, + procRenameat, + procRmdir, + proclseek, + procSelect, + procSetegid, + procSeteuid, + procSetgid, + procSethostname, + procSetpgid, + procSetpriority, + procSetregid, + procSetreuid, + procSetrlimit, + procSetsid, + procSetuid, + procshutdown, + procStat, + procStatvfs, + procSymlink, + procSync, + procTimes, + procTruncate, + procFsync, + procFtruncate, + procUmask, + procUname, + procumount, + procUnlink, + procUnlinkat, + procUstat, + procUtime, + proc__xnet_bind, + proc__xnet_connect, + procmmap, + procmunmap, + procsendfile, + proc__xnet_sendto, + proc__xnet_socket, + proc__xnet_socketpair, + procwrite, + proc__xnet_getsockopt, + procgetpeername, + procsetsockopt, + procrecvfrom syscallFunc +) + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int32(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gethostname(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func acct(path *byte) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func __makedev(version int, major uint, minor uint) (val uint64) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0) + val = uint64(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func __major(version int, dev uint64) (val uint) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) + val = uint(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func __minor(version int, dev uint64) (val uint) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) + val = uint(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Creat(path string, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0) + nfd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statvfs(path string, vfsstat *Statvfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, 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 = int(r0) + if e1 != 0 { + err = e1 + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go new file mode 100644 index 00000000000..b005031abed --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// Code generated by the command above; DO NOT EDIT. + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go new file mode 100644 index 00000000000..d014451c9d8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// Code generated by the command above; DO NOT EDIT. + +// +build amd64,openbsd + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.profile", []_C_int{9, 9}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.perfpolicy", []_C_int{6, 23}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.allowkmem", []_C_int{1, 52}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.dnsjackport", []_C_int{1, 13}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.global_ptrace", []_C_int{1, 81}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"kern.wxabort", []_C_int{1, 74}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}}, + {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}}, + {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go new file mode 100644 index 00000000000..b005031abed --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// Code generated by the command above; DO NOT EDIT. + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go new file mode 100644 index 00000000000..d1d36da3f51 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go @@ -0,0 +1,436 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_THREAD_SELFCOUNTS = 186 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go new file mode 100644 index 00000000000..e35de4145ed --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go @@ -0,0 +1,436 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_THREAD_SELFCOUNTS = 186 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go new file mode 100644 index 00000000000..f2df27db2c2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go @@ -0,0 +1,436 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_THREAD_SELFCOUNTS = 186 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go new file mode 100644 index 00000000000..9694630232f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go @@ -0,0 +1,436 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_THREAD_SELFCOUNTS = 186 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS_KEVENT_ID = 375 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_NECP_SESSION_OPEN = 522 + SYS_NECP_SESSION_ACTION = 523 + SYS_SETATTRLISTAT = 524 + SYS_NET_QOS_GUIDELINE = 525 + SYS_FMOUNT = 526 + SYS_NTP_ADJTIME = 527 + SYS_NTP_GETTIME = 528 + SYS_OS_FAULT_WITH_PAYLOAD = 529 + SYS_MAXSYSCALL = 530 + SYS_INVALID = 63 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go new file mode 100644 index 00000000000..b2c9ef81b81 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go @@ -0,0 +1,315 @@ +// mksysnum_dragonfly.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void exit(int rval); } + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, \ + SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); } + SYS_ACCESS = 33 // { int access(char *path, int flags); } + SYS_CHFLAGS = 34 // { int chflags(char *path, int flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, int flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { int readlink(char *path, char *buf, int count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { pid_t vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(int from, int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_GETDOMAINNAME = 162 // { int getdomainname(char *domainname, int len); } + SYS_SETDOMAINNAME = 163 // { int setdomainname(char *domainname, int len); } + SYS_UNAME = 164 // { int uname(struct utsname *name); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, \ + SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, \ + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, \ + // SYS_NOSYS = 198; // { int nosys(void); } __syscall __syscall_args int + SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, \ + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \ + SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, \ + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, \ + SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, \ + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, \ + SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,\ + SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_AIO_READ = 318 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 319 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(u_char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, \ + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGRETURN = 344 // { int sigreturn(ucontext_t *sigcntxp); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,\ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,\ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, \ + SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(char *path, int flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, \ + SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); } + SYS_VARSYM_GET = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); } + SYS_VARSYM_LIST = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); } + SYS_EXEC_SYS_REGISTER = 465 // { int exec_sys_register(void *entry); } + SYS_EXEC_SYS_UNREGISTER = 466 // { int exec_sys_unregister(int id); } + SYS_SYS_CHECKPOINT = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); } + SYS_MOUNTCTL = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); } + SYS_UMTX_SLEEP = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); } + SYS_UMTX_WAKEUP = 470 // { int umtx_wakeup(volatile const int *ptr, int count); } + SYS_JAIL_ATTACH = 471 // { int jail_attach(int jid); } + SYS_SET_TLS_AREA = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_GET_TLS_AREA = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_CLOSEFROM = 474 // { int closefrom(int fd); } + SYS_STAT = 475 // { int stat(const char *path, struct stat *ub); } + SYS_FSTAT = 476 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 477 // { int lstat(const char *path, struct stat *ub); } + SYS_FHSTAT = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, \ + SYS_GETDENTS = 480 // { int getdents(int fd, char *buf, size_t count); } + SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, \ + SYS_EXTACCEPT = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); } + SYS_EXTCONNECT = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); } + SYS_MCONTROL = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); } + SYS_VMSPACE_CREATE = 486 // { int vmspace_create(void *id, int type, void *data); } + SYS_VMSPACE_DESTROY = 487 // { int vmspace_destroy(void *id); } + SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, \ + SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, \ + SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, \ + SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, \ + SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, \ + SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, \ + SYS_EXTEXIT = 494 // { void extexit(int how, int status, void *addr); } + SYS_LWP_CREATE = 495 // { int lwp_create(struct lwp_params *params); } + SYS_LWP_GETTID = 496 // { lwpid_t lwp_gettid(void); } + SYS_LWP_KILL = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); } + SYS_LWP_RTPRIO = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); } + SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_STATVFS = 500 // { int statvfs(const char *path, struct statvfs *buf); } + SYS_FSTATVFS = 501 // { int fstatvfs(int fd, struct statvfs *buf); } + SYS_FHSTATVFS = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); } + SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, \ + SYS_OPENAT = 504 // { int openat(int fd, char *path, int flags, int mode); } + SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, \ + SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, \ + SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, \ + SYS_UNLINKAT = 508 // { int unlinkat(int fd, char *path, int flags); } + SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, \ + SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, \ + SYS_MQ_CLOSE = 511 // { int mq_close(mqd_t mqdes); } + SYS_MQ_UNLINK = 512 // { int mq_unlink(const char *name); } + SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, \ + SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, \ + SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, \ + SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, \ + SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, \ + SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, \ + SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, \ + SYS_IOPRIO_SET = 520 // { int ioprio_set(int which, int who, int prio); } + SYS_IOPRIO_GET = 521 // { int ioprio_get(int which, int who); } + SYS_CHROOT_KERNEL = 522 // { int chroot_kernel(char *path); } + SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_MKDIRAT = 524 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 525 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_SYMLINKAT = 528 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_SWAPOFF = 529 // { int swapoff(char *name); } + SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, \ + SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_EACCESS = 532 // { int eaccess(char *path, int flags); } + SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); } + SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); } + SYS_VMM_GUEST_SYNC_ADDR = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); } + SYS_PROCCTL = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); } + SYS_CHFLAGSAT = 537 // { int chflagsat(int fd, const char *path, int flags, int atflags);} + SYS_PIPE2 = 538 // { int pipe2(int *fildes, int flags); } + SYS_UTIMENSAT = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); } + SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); } + SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); } + SYS_LWP_SETNAME = 542 // { int lwp_setname(lwpid_t tid, const char *name); } + SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); } + SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); } + SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go new file mode 100644 index 00000000000..1ab8780c3b0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go @@ -0,0 +1,403 @@ +// mksysnum_freebsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } + SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, \ + SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, \ + SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, \ + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \ + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, \ + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, \ + SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, \ + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend( \ + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, \ + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); } + SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); } + SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } + SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } + SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } + SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } + SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, \ + SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, \ + SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } + SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } + SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, \ + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, \ + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, \ + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, \ + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, \ + SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, \ + SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, \ + SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, \ + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go new file mode 100644 index 00000000000..b66f900dff7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go @@ -0,0 +1,403 @@ +// mksysnum_freebsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } + SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, \ + SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, \ + SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, \ + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \ + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, \ + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, \ + SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, \ + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend( \ + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, \ + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); } + SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); } + SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } + SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } + SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } + SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } + SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, \ + SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, \ + SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } + SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } + SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, \ + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, \ + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, \ + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, \ + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, \ + SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, \ + SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, \ + SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, \ + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go new file mode 100644 index 00000000000..d61941ba7e0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go @@ -0,0 +1,403 @@ +// mksysnum_freebsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_NLM_SYSCALL = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); } + SYS_NFSSVC = 155 // { int nfssvc(int flag, caddr_t argp); } + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_SEMSYS = 169 // { int semsys(int which, int a2, int a3, \ + SYS_MSGSYS = 170 // { int msgsys(int which, int a2, int a3, \ + SYS_SHMSYS = 171 // { int shmsys(int which, int a2, int a3, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, \ + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \ + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, \ + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, \ + SYS_SHMAT = 228 // { int shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_AIO_READ = 255 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 256 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 257 // { int lio_listio(int mode, \ + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend( \ + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, \ + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_OAIO_READ = 318 // { int oaio_read(struct oaiocb *aiocbp); } + SYS_OAIO_WRITE = 319 // { int oaio_write(struct oaiocb *aiocbp); } + SYS_OLIO_LISTIO = 320 // { int olio_listio(int mode, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete( \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS_KSEM_CLOSE = 400 // { int ksem_close(semid_t id); } + SYS_KSEM_POST = 401 // { int ksem_post(semid_t id); } + SYS_KSEM_WAIT = 402 // { int ksem_wait(semid_t id); } + SYS_KSEM_TRYWAIT = 403 // { int ksem_trywait(semid_t id); } + SYS_KSEM_INIT = 404 // { int ksem_init(semid_t *idp, \ + SYS_KSEM_OPEN = 405 // { int ksem_open(semid_t *idp, \ + SYS_KSEM_UNLINK = 406 // { int ksem_unlink(const char *name); } + SYS_KSEM_GETVALUE = 407 // { int ksem_getvalue(semid_t id, int *val); } + SYS_KSEM_DESTROY = 408 // { int ksem_destroy(semid_t id); } + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_KSEM_TIMEDWAIT = 441 // { int ksem_timedwait(semid_t id, \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_KMQ_OPEN = 457 // { int kmq_open(const char *path, int flags, \ + SYS_KMQ_SETATTR = 458 // { int kmq_setattr(int mqd, \ + SYS_KMQ_TIMEDRECEIVE = 459 // { int kmq_timedreceive(int mqd, \ + SYS_KMQ_TIMEDSEND = 460 // { int kmq_timedsend(int mqd, \ + SYS_KMQ_NOTIFY = 461 // { int kmq_notify(int mqd, \ + SYS_KMQ_UNLINK = 462 // { int kmq_unlink(const char *path); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_AIO_FSYNC = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_SCTP_PEELOFF = 471 // { int sctp_peeloff(int sd, uint32_t name); } + SYS_SCTP_GENERIC_SENDMSG = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \ + SYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \ + SYS_SCTP_GENERIC_RECVMSG = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_GSSD_SYSCALL = 505 // { int gssd_syscall(char *path); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS___SEMCTL = 510 // { int __semctl(int semid, int semnum, \ + SYS_MSGCTL = 511 // { int msgctl(int msqid, int cmd, \ + SYS_SHMCTL = 512 // { int shmctl(int shmid, int cmd, \ + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_AIO_MLOCK = 543 // { int aio_mlock(struct aiocb *aiocbp); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go new file mode 100644 index 00000000000..8f33ece7c3d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -0,0 +1,392 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86OLD = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_VM86 = 166 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_SET_THREAD_AREA = 243 + SYS_GET_THREAD_AREA = 244 + SYS_IO_SETUP = 245 + SYS_IO_DESTROY = 246 + SYS_IO_GETEVENTS = 247 + SYS_IO_SUBMIT = 248 + SYS_IO_CANCEL = 249 + SYS_FADVISE64 = 250 + SYS_EXIT_GROUP = 252 + SYS_LOOKUP_DCOOKIE = 253 + SYS_EPOLL_CREATE = 254 + SYS_EPOLL_CTL = 255 + SYS_EPOLL_WAIT = 256 + SYS_REMAP_FILE_PAGES = 257 + SYS_SET_TID_ADDRESS = 258 + SYS_TIMER_CREATE = 259 + SYS_TIMER_SETTIME = 260 + SYS_TIMER_GETTIME = 261 + SYS_TIMER_GETOVERRUN = 262 + SYS_TIMER_DELETE = 263 + SYS_CLOCK_SETTIME = 264 + SYS_CLOCK_GETTIME = 265 + SYS_CLOCK_GETRES = 266 + SYS_CLOCK_NANOSLEEP = 267 + SYS_STATFS64 = 268 + SYS_FSTATFS64 = 269 + SYS_TGKILL = 270 + SYS_UTIMES = 271 + SYS_FADVISE64_64 = 272 + SYS_VSERVER = 273 + SYS_MBIND = 274 + SYS_GET_MEMPOLICY = 275 + SYS_SET_MEMPOLICY = 276 + SYS_MQ_OPEN = 277 + SYS_MQ_UNLINK = 278 + SYS_MQ_TIMEDSEND = 279 + SYS_MQ_TIMEDRECEIVE = 280 + SYS_MQ_NOTIFY = 281 + SYS_MQ_GETSETATTR = 282 + SYS_KEXEC_LOAD = 283 + SYS_WAITID = 284 + SYS_ADD_KEY = 286 + SYS_REQUEST_KEY = 287 + SYS_KEYCTL = 288 + SYS_IOPRIO_SET = 289 + SYS_IOPRIO_GET = 290 + SYS_INOTIFY_INIT = 291 + SYS_INOTIFY_ADD_WATCH = 292 + SYS_INOTIFY_RM_WATCH = 293 + SYS_MIGRATE_PAGES = 294 + SYS_OPENAT = 295 + SYS_MKDIRAT = 296 + SYS_MKNODAT = 297 + SYS_FCHOWNAT = 298 + SYS_FUTIMESAT = 299 + SYS_FSTATAT64 = 300 + SYS_UNLINKAT = 301 + SYS_RENAMEAT = 302 + SYS_LINKAT = 303 + SYS_SYMLINKAT = 304 + SYS_READLINKAT = 305 + SYS_FCHMODAT = 306 + SYS_FACCESSAT = 307 + SYS_PSELECT6 = 308 + SYS_PPOLL = 309 + SYS_UNSHARE = 310 + SYS_SET_ROBUST_LIST = 311 + SYS_GET_ROBUST_LIST = 312 + SYS_SPLICE = 313 + SYS_SYNC_FILE_RANGE = 314 + SYS_TEE = 315 + SYS_VMSPLICE = 316 + SYS_MOVE_PAGES = 317 + SYS_GETCPU = 318 + SYS_EPOLL_PWAIT = 319 + SYS_UTIMENSAT = 320 + SYS_SIGNALFD = 321 + SYS_TIMERFD_CREATE = 322 + SYS_EVENTFD = 323 + SYS_FALLOCATE = 324 + SYS_TIMERFD_SETTIME = 325 + SYS_TIMERFD_GETTIME = 326 + SYS_SIGNALFD4 = 327 + SYS_EVENTFD2 = 328 + SYS_EPOLL_CREATE1 = 329 + SYS_DUP3 = 330 + SYS_PIPE2 = 331 + SYS_INOTIFY_INIT1 = 332 + SYS_PREADV = 333 + SYS_PWRITEV = 334 + SYS_RT_TGSIGQUEUEINFO = 335 + SYS_PERF_EVENT_OPEN = 336 + SYS_RECVMMSG = 337 + SYS_FANOTIFY_INIT = 338 + SYS_FANOTIFY_MARK = 339 + SYS_PRLIMIT64 = 340 + SYS_NAME_TO_HANDLE_AT = 341 + SYS_OPEN_BY_HANDLE_AT = 342 + SYS_CLOCK_ADJTIME = 343 + SYS_SYNCFS = 344 + SYS_SENDMMSG = 345 + SYS_SETNS = 346 + SYS_PROCESS_VM_READV = 347 + SYS_PROCESS_VM_WRITEV = 348 + SYS_KCMP = 349 + SYS_FINIT_MODULE = 350 + SYS_SCHED_SETATTR = 351 + SYS_SCHED_GETATTR = 352 + SYS_RENAMEAT2 = 353 + SYS_SECCOMP = 354 + SYS_GETRANDOM = 355 + SYS_MEMFD_CREATE = 356 + SYS_BPF = 357 + SYS_EXECVEAT = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_USERFAULTFD = 374 + SYS_MEMBARRIER = 375 + SYS_MLOCK2 = 376 + SYS_COPY_FILE_RANGE = 377 + SYS_PREADV2 = 378 + SYS_PWRITEV2 = 379 + SYS_PKEY_MPROTECT = 380 + SYS_PKEY_ALLOC = 381 + SYS_PKEY_FREE = 382 + SYS_STATX = 383 + SYS_ARCH_PRCTL = 384 + SYS_IO_PGETEVENTS = 385 + SYS_RSEQ = 386 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go new file mode 100644 index 00000000000..70c1a2c1206 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -0,0 +1,344 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +package unix + +const ( + SYS_READ = 0 + SYS_WRITE = 1 + SYS_OPEN = 2 + SYS_CLOSE = 3 + SYS_STAT = 4 + SYS_FSTAT = 5 + SYS_LSTAT = 6 + SYS_POLL = 7 + SYS_LSEEK = 8 + SYS_MMAP = 9 + SYS_MPROTECT = 10 + SYS_MUNMAP = 11 + SYS_BRK = 12 + SYS_RT_SIGACTION = 13 + SYS_RT_SIGPROCMASK = 14 + SYS_RT_SIGRETURN = 15 + SYS_IOCTL = 16 + SYS_PREAD64 = 17 + SYS_PWRITE64 = 18 + SYS_READV = 19 + SYS_WRITEV = 20 + SYS_ACCESS = 21 + SYS_PIPE = 22 + SYS_SELECT = 23 + SYS_SCHED_YIELD = 24 + SYS_MREMAP = 25 + SYS_MSYNC = 26 + SYS_MINCORE = 27 + SYS_MADVISE = 28 + SYS_SHMGET = 29 + SYS_SHMAT = 30 + SYS_SHMCTL = 31 + SYS_DUP = 32 + SYS_DUP2 = 33 + SYS_PAUSE = 34 + SYS_NANOSLEEP = 35 + SYS_GETITIMER = 36 + SYS_ALARM = 37 + SYS_SETITIMER = 38 + SYS_GETPID = 39 + SYS_SENDFILE = 40 + SYS_SOCKET = 41 + SYS_CONNECT = 42 + SYS_ACCEPT = 43 + SYS_SENDTO = 44 + SYS_RECVFROM = 45 + SYS_SENDMSG = 46 + SYS_RECVMSG = 47 + SYS_SHUTDOWN = 48 + SYS_BIND = 49 + SYS_LISTEN = 50 + SYS_GETSOCKNAME = 51 + SYS_GETPEERNAME = 52 + SYS_SOCKETPAIR = 53 + SYS_SETSOCKOPT = 54 + SYS_GETSOCKOPT = 55 + SYS_CLONE = 56 + SYS_FORK = 57 + SYS_VFORK = 58 + SYS_EXECVE = 59 + SYS_EXIT = 60 + SYS_WAIT4 = 61 + SYS_KILL = 62 + SYS_UNAME = 63 + SYS_SEMGET = 64 + SYS_SEMOP = 65 + SYS_SEMCTL = 66 + SYS_SHMDT = 67 + SYS_MSGGET = 68 + SYS_MSGSND = 69 + SYS_MSGRCV = 70 + SYS_MSGCTL = 71 + SYS_FCNTL = 72 + SYS_FLOCK = 73 + SYS_FSYNC = 74 + SYS_FDATASYNC = 75 + SYS_TRUNCATE = 76 + SYS_FTRUNCATE = 77 + SYS_GETDENTS = 78 + SYS_GETCWD = 79 + SYS_CHDIR = 80 + SYS_FCHDIR = 81 + SYS_RENAME = 82 + SYS_MKDIR = 83 + SYS_RMDIR = 84 + SYS_CREAT = 85 + SYS_LINK = 86 + SYS_UNLINK = 87 + SYS_SYMLINK = 88 + SYS_READLINK = 89 + SYS_CHMOD = 90 + SYS_FCHMOD = 91 + SYS_CHOWN = 92 + SYS_FCHOWN = 93 + SYS_LCHOWN = 94 + SYS_UMASK = 95 + SYS_GETTIMEOFDAY = 96 + SYS_GETRLIMIT = 97 + SYS_GETRUSAGE = 98 + SYS_SYSINFO = 99 + SYS_TIMES = 100 + SYS_PTRACE = 101 + SYS_GETUID = 102 + SYS_SYSLOG = 103 + SYS_GETGID = 104 + SYS_SETUID = 105 + SYS_SETGID = 106 + SYS_GETEUID = 107 + SYS_GETEGID = 108 + SYS_SETPGID = 109 + SYS_GETPPID = 110 + SYS_GETPGRP = 111 + SYS_SETSID = 112 + SYS_SETREUID = 113 + SYS_SETREGID = 114 + SYS_GETGROUPS = 115 + SYS_SETGROUPS = 116 + SYS_SETRESUID = 117 + SYS_GETRESUID = 118 + SYS_SETRESGID = 119 + SYS_GETRESGID = 120 + SYS_GETPGID = 121 + SYS_SETFSUID = 122 + SYS_SETFSGID = 123 + SYS_GETSID = 124 + SYS_CAPGET = 125 + SYS_CAPSET = 126 + SYS_RT_SIGPENDING = 127 + SYS_RT_SIGTIMEDWAIT = 128 + SYS_RT_SIGQUEUEINFO = 129 + SYS_RT_SIGSUSPEND = 130 + SYS_SIGALTSTACK = 131 + SYS_UTIME = 132 + SYS_MKNOD = 133 + SYS_USELIB = 134 + SYS_PERSONALITY = 135 + SYS_USTAT = 136 + SYS_STATFS = 137 + SYS_FSTATFS = 138 + SYS_SYSFS = 139 + SYS_GETPRIORITY = 140 + SYS_SETPRIORITY = 141 + SYS_SCHED_SETPARAM = 142 + SYS_SCHED_GETPARAM = 143 + SYS_SCHED_SETSCHEDULER = 144 + SYS_SCHED_GETSCHEDULER = 145 + SYS_SCHED_GET_PRIORITY_MAX = 146 + SYS_SCHED_GET_PRIORITY_MIN = 147 + SYS_SCHED_RR_GET_INTERVAL = 148 + SYS_MLOCK = 149 + SYS_MUNLOCK = 150 + SYS_MLOCKALL = 151 + SYS_MUNLOCKALL = 152 + SYS_VHANGUP = 153 + SYS_MODIFY_LDT = 154 + SYS_PIVOT_ROOT = 155 + SYS__SYSCTL = 156 + SYS_PRCTL = 157 + SYS_ARCH_PRCTL = 158 + SYS_ADJTIMEX = 159 + SYS_SETRLIMIT = 160 + SYS_CHROOT = 161 + SYS_SYNC = 162 + SYS_ACCT = 163 + SYS_SETTIMEOFDAY = 164 + SYS_MOUNT = 165 + SYS_UMOUNT2 = 166 + SYS_SWAPON = 167 + SYS_SWAPOFF = 168 + SYS_REBOOT = 169 + SYS_SETHOSTNAME = 170 + SYS_SETDOMAINNAME = 171 + SYS_IOPL = 172 + SYS_IOPERM = 173 + SYS_CREATE_MODULE = 174 + SYS_INIT_MODULE = 175 + SYS_DELETE_MODULE = 176 + SYS_GET_KERNEL_SYMS = 177 + SYS_QUERY_MODULE = 178 + SYS_QUOTACTL = 179 + SYS_NFSSERVCTL = 180 + SYS_GETPMSG = 181 + SYS_PUTPMSG = 182 + SYS_AFS_SYSCALL = 183 + SYS_TUXCALL = 184 + SYS_SECURITY = 185 + SYS_GETTID = 186 + SYS_READAHEAD = 187 + SYS_SETXATTR = 188 + SYS_LSETXATTR = 189 + SYS_FSETXATTR = 190 + SYS_GETXATTR = 191 + SYS_LGETXATTR = 192 + SYS_FGETXATTR = 193 + SYS_LISTXATTR = 194 + SYS_LLISTXATTR = 195 + SYS_FLISTXATTR = 196 + SYS_REMOVEXATTR = 197 + SYS_LREMOVEXATTR = 198 + SYS_FREMOVEXATTR = 199 + SYS_TKILL = 200 + SYS_TIME = 201 + SYS_FUTEX = 202 + SYS_SCHED_SETAFFINITY = 203 + SYS_SCHED_GETAFFINITY = 204 + SYS_SET_THREAD_AREA = 205 + SYS_IO_SETUP = 206 + SYS_IO_DESTROY = 207 + SYS_IO_GETEVENTS = 208 + SYS_IO_SUBMIT = 209 + SYS_IO_CANCEL = 210 + SYS_GET_THREAD_AREA = 211 + SYS_LOOKUP_DCOOKIE = 212 + SYS_EPOLL_CREATE = 213 + SYS_EPOLL_CTL_OLD = 214 + SYS_EPOLL_WAIT_OLD = 215 + SYS_REMAP_FILE_PAGES = 216 + SYS_GETDENTS64 = 217 + SYS_SET_TID_ADDRESS = 218 + SYS_RESTART_SYSCALL = 219 + SYS_SEMTIMEDOP = 220 + SYS_FADVISE64 = 221 + SYS_TIMER_CREATE = 222 + SYS_TIMER_SETTIME = 223 + SYS_TIMER_GETTIME = 224 + SYS_TIMER_GETOVERRUN = 225 + SYS_TIMER_DELETE = 226 + SYS_CLOCK_SETTIME = 227 + SYS_CLOCK_GETTIME = 228 + SYS_CLOCK_GETRES = 229 + SYS_CLOCK_NANOSLEEP = 230 + SYS_EXIT_GROUP = 231 + SYS_EPOLL_WAIT = 232 + SYS_EPOLL_CTL = 233 + SYS_TGKILL = 234 + SYS_UTIMES = 235 + SYS_VSERVER = 236 + SYS_MBIND = 237 + SYS_SET_MEMPOLICY = 238 + SYS_GET_MEMPOLICY = 239 + SYS_MQ_OPEN = 240 + SYS_MQ_UNLINK = 241 + SYS_MQ_TIMEDSEND = 242 + SYS_MQ_TIMEDRECEIVE = 243 + SYS_MQ_NOTIFY = 244 + SYS_MQ_GETSETATTR = 245 + SYS_KEXEC_LOAD = 246 + SYS_WAITID = 247 + SYS_ADD_KEY = 248 + SYS_REQUEST_KEY = 249 + SYS_KEYCTL = 250 + SYS_IOPRIO_SET = 251 + SYS_IOPRIO_GET = 252 + SYS_INOTIFY_INIT = 253 + SYS_INOTIFY_ADD_WATCH = 254 + SYS_INOTIFY_RM_WATCH = 255 + SYS_MIGRATE_PAGES = 256 + SYS_OPENAT = 257 + SYS_MKDIRAT = 258 + SYS_MKNODAT = 259 + SYS_FCHOWNAT = 260 + SYS_FUTIMESAT = 261 + SYS_NEWFSTATAT = 262 + SYS_UNLINKAT = 263 + SYS_RENAMEAT = 264 + SYS_LINKAT = 265 + SYS_SYMLINKAT = 266 + SYS_READLINKAT = 267 + SYS_FCHMODAT = 268 + SYS_FACCESSAT = 269 + SYS_PSELECT6 = 270 + SYS_PPOLL = 271 + SYS_UNSHARE = 272 + SYS_SET_ROBUST_LIST = 273 + SYS_GET_ROBUST_LIST = 274 + SYS_SPLICE = 275 + SYS_TEE = 276 + SYS_SYNC_FILE_RANGE = 277 + SYS_VMSPLICE = 278 + SYS_MOVE_PAGES = 279 + SYS_UTIMENSAT = 280 + SYS_EPOLL_PWAIT = 281 + SYS_SIGNALFD = 282 + SYS_TIMERFD_CREATE = 283 + SYS_EVENTFD = 284 + SYS_FALLOCATE = 285 + SYS_TIMERFD_SETTIME = 286 + SYS_TIMERFD_GETTIME = 287 + SYS_ACCEPT4 = 288 + SYS_SIGNALFD4 = 289 + SYS_EVENTFD2 = 290 + SYS_EPOLL_CREATE1 = 291 + SYS_DUP3 = 292 + SYS_PIPE2 = 293 + SYS_INOTIFY_INIT1 = 294 + SYS_PREADV = 295 + SYS_PWRITEV = 296 + SYS_RT_TGSIGQUEUEINFO = 297 + SYS_PERF_EVENT_OPEN = 298 + SYS_RECVMMSG = 299 + SYS_FANOTIFY_INIT = 300 + SYS_FANOTIFY_MARK = 301 + SYS_PRLIMIT64 = 302 + SYS_NAME_TO_HANDLE_AT = 303 + SYS_OPEN_BY_HANDLE_AT = 304 + SYS_CLOCK_ADJTIME = 305 + SYS_SYNCFS = 306 + SYS_SENDMMSG = 307 + SYS_SETNS = 308 + SYS_GETCPU = 309 + SYS_PROCESS_VM_READV = 310 + SYS_PROCESS_VM_WRITEV = 311 + SYS_KCMP = 312 + SYS_FINIT_MODULE = 313 + SYS_SCHED_SETATTR = 314 + SYS_SCHED_GETATTR = 315 + SYS_RENAMEAT2 = 316 + SYS_SECCOMP = 317 + SYS_GETRANDOM = 318 + SYS_MEMFD_CREATE = 319 + SYS_KEXEC_FILE_LOAD = 320 + SYS_BPF = 321 + SYS_EXECVEAT = 322 + SYS_USERFAULTFD = 323 + SYS_MEMBARRIER = 324 + SYS_MLOCK2 = 325 + SYS_COPY_FILE_RANGE = 326 + SYS_PREADV2 = 327 + SYS_PWRITEV2 = 328 + SYS_PKEY_MPROTECT = 329 + SYS_PKEY_ALLOC = 330 + SYS_PKEY_FREE = 331 + SYS_STATX = 332 + SYS_IO_PGETEVENTS = 333 + SYS_RSEQ = 334 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go new file mode 100644 index 00000000000..6e281d6b343 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -0,0 +1,364 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_PTRACE = 26 + SYS_PAUSE = 29 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_VHANGUP = 111 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_GETDENTS64 = 217 + SYS_PIVOT_ROOT = 218 + SYS_MINCORE = 219 + SYS_MADVISE = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_LOOKUP_DCOOKIE = 249 + SYS_EPOLL_CREATE = 250 + SYS_EPOLL_CTL = 251 + SYS_EPOLL_WAIT = 252 + SYS_REMAP_FILE_PAGES = 253 + SYS_SET_TID_ADDRESS = 256 + SYS_TIMER_CREATE = 257 + SYS_TIMER_SETTIME = 258 + SYS_TIMER_GETTIME = 259 + SYS_TIMER_GETOVERRUN = 260 + SYS_TIMER_DELETE = 261 + SYS_CLOCK_SETTIME = 262 + SYS_CLOCK_GETTIME = 263 + SYS_CLOCK_GETRES = 264 + SYS_CLOCK_NANOSLEEP = 265 + SYS_STATFS64 = 266 + SYS_FSTATFS64 = 267 + SYS_TGKILL = 268 + SYS_UTIMES = 269 + SYS_ARM_FADVISE64_64 = 270 + SYS_PCICONFIG_IOBASE = 271 + SYS_PCICONFIG_READ = 272 + SYS_PCICONFIG_WRITE = 273 + SYS_MQ_OPEN = 274 + SYS_MQ_UNLINK = 275 + SYS_MQ_TIMEDSEND = 276 + SYS_MQ_TIMEDRECEIVE = 277 + SYS_MQ_NOTIFY = 278 + SYS_MQ_GETSETATTR = 279 + SYS_WAITID = 280 + SYS_SOCKET = 281 + SYS_BIND = 282 + SYS_CONNECT = 283 + SYS_LISTEN = 284 + SYS_ACCEPT = 285 + SYS_GETSOCKNAME = 286 + SYS_GETPEERNAME = 287 + SYS_SOCKETPAIR = 288 + SYS_SEND = 289 + SYS_SENDTO = 290 + SYS_RECV = 291 + SYS_RECVFROM = 292 + SYS_SHUTDOWN = 293 + SYS_SETSOCKOPT = 294 + SYS_GETSOCKOPT = 295 + SYS_SENDMSG = 296 + SYS_RECVMSG = 297 + SYS_SEMOP = 298 + SYS_SEMGET = 299 + SYS_SEMCTL = 300 + SYS_MSGSND = 301 + SYS_MSGRCV = 302 + SYS_MSGGET = 303 + SYS_MSGCTL = 304 + SYS_SHMAT = 305 + SYS_SHMDT = 306 + SYS_SHMGET = 307 + SYS_SHMCTL = 308 + SYS_ADD_KEY = 309 + SYS_REQUEST_KEY = 310 + SYS_KEYCTL = 311 + SYS_SEMTIMEDOP = 312 + SYS_VSERVER = 313 + SYS_IOPRIO_SET = 314 + SYS_IOPRIO_GET = 315 + SYS_INOTIFY_INIT = 316 + SYS_INOTIFY_ADD_WATCH = 317 + SYS_INOTIFY_RM_WATCH = 318 + SYS_MBIND = 319 + SYS_GET_MEMPOLICY = 320 + SYS_SET_MEMPOLICY = 321 + SYS_OPENAT = 322 + SYS_MKDIRAT = 323 + SYS_MKNODAT = 324 + SYS_FCHOWNAT = 325 + SYS_FUTIMESAT = 326 + SYS_FSTATAT64 = 327 + SYS_UNLINKAT = 328 + SYS_RENAMEAT = 329 + SYS_LINKAT = 330 + SYS_SYMLINKAT = 331 + SYS_READLINKAT = 332 + SYS_FCHMODAT = 333 + SYS_FACCESSAT = 334 + SYS_PSELECT6 = 335 + SYS_PPOLL = 336 + SYS_UNSHARE = 337 + SYS_SET_ROBUST_LIST = 338 + SYS_GET_ROBUST_LIST = 339 + SYS_SPLICE = 340 + SYS_ARM_SYNC_FILE_RANGE = 341 + SYS_TEE = 342 + SYS_VMSPLICE = 343 + SYS_MOVE_PAGES = 344 + SYS_GETCPU = 345 + SYS_EPOLL_PWAIT = 346 + SYS_KEXEC_LOAD = 347 + SYS_UTIMENSAT = 348 + SYS_SIGNALFD = 349 + SYS_TIMERFD_CREATE = 350 + SYS_EVENTFD = 351 + SYS_FALLOCATE = 352 + SYS_TIMERFD_SETTIME = 353 + SYS_TIMERFD_GETTIME = 354 + SYS_SIGNALFD4 = 355 + SYS_EVENTFD2 = 356 + SYS_EPOLL_CREATE1 = 357 + SYS_DUP3 = 358 + SYS_PIPE2 = 359 + SYS_INOTIFY_INIT1 = 360 + SYS_PREADV = 361 + SYS_PWRITEV = 362 + SYS_RT_TGSIGQUEUEINFO = 363 + SYS_PERF_EVENT_OPEN = 364 + SYS_RECVMMSG = 365 + SYS_ACCEPT4 = 366 + SYS_FANOTIFY_INIT = 367 + SYS_FANOTIFY_MARK = 368 + SYS_PRLIMIT64 = 369 + SYS_NAME_TO_HANDLE_AT = 370 + SYS_OPEN_BY_HANDLE_AT = 371 + SYS_CLOCK_ADJTIME = 372 + SYS_SYNCFS = 373 + SYS_SENDMMSG = 374 + SYS_SETNS = 375 + SYS_PROCESS_VM_READV = 376 + SYS_PROCESS_VM_WRITEV = 377 + SYS_KCMP = 378 + SYS_FINIT_MODULE = 379 + SYS_SCHED_SETATTR = 380 + SYS_SCHED_GETATTR = 381 + SYS_RENAMEAT2 = 382 + SYS_SECCOMP = 383 + SYS_GETRANDOM = 384 + SYS_MEMFD_CREATE = 385 + SYS_BPF = 386 + SYS_EXECVEAT = 387 + SYS_USERFAULTFD = 388 + SYS_MEMBARRIER = 389 + SYS_MLOCK2 = 390 + SYS_COPY_FILE_RANGE = 391 + SYS_PREADV2 = 392 + SYS_PWRITEV2 = 393 + SYS_PKEY_MPROTECT = 394 + SYS_PKEY_ALLOC = 395 + SYS_PKEY_FREE = 396 + SYS_STATX = 397 + SYS_RSEQ = 398 + SYS_IO_PGETEVENTS = 399 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go new file mode 100644 index 00000000000..f9157e1924e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -0,0 +1,288 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_RENAMEAT = 38 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 + SYS_IO_PGETEVENTS = 292 + SYS_RSEQ = 293 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go new file mode 100644 index 00000000000..16714491a73 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -0,0 +1,377 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +package unix + +const ( + SYS_SYSCALL = 4000 + SYS_EXIT = 4001 + SYS_FORK = 4002 + SYS_READ = 4003 + SYS_WRITE = 4004 + SYS_OPEN = 4005 + SYS_CLOSE = 4006 + SYS_WAITPID = 4007 + SYS_CREAT = 4008 + SYS_LINK = 4009 + SYS_UNLINK = 4010 + SYS_EXECVE = 4011 + SYS_CHDIR = 4012 + SYS_TIME = 4013 + SYS_MKNOD = 4014 + SYS_CHMOD = 4015 + SYS_LCHOWN = 4016 + SYS_BREAK = 4017 + SYS_UNUSED18 = 4018 + SYS_LSEEK = 4019 + SYS_GETPID = 4020 + SYS_MOUNT = 4021 + SYS_UMOUNT = 4022 + SYS_SETUID = 4023 + SYS_GETUID = 4024 + SYS_STIME = 4025 + SYS_PTRACE = 4026 + SYS_ALARM = 4027 + SYS_UNUSED28 = 4028 + SYS_PAUSE = 4029 + SYS_UTIME = 4030 + SYS_STTY = 4031 + SYS_GTTY = 4032 + SYS_ACCESS = 4033 + SYS_NICE = 4034 + SYS_FTIME = 4035 + SYS_SYNC = 4036 + SYS_KILL = 4037 + SYS_RENAME = 4038 + SYS_MKDIR = 4039 + SYS_RMDIR = 4040 + SYS_DUP = 4041 + SYS_PIPE = 4042 + SYS_TIMES = 4043 + SYS_PROF = 4044 + SYS_BRK = 4045 + SYS_SETGID = 4046 + SYS_GETGID = 4047 + SYS_SIGNAL = 4048 + SYS_GETEUID = 4049 + SYS_GETEGID = 4050 + SYS_ACCT = 4051 + SYS_UMOUNT2 = 4052 + SYS_LOCK = 4053 + SYS_IOCTL = 4054 + SYS_FCNTL = 4055 + SYS_MPX = 4056 + SYS_SETPGID = 4057 + SYS_ULIMIT = 4058 + SYS_UNUSED59 = 4059 + SYS_UMASK = 4060 + SYS_CHROOT = 4061 + SYS_USTAT = 4062 + SYS_DUP2 = 4063 + SYS_GETPPID = 4064 + SYS_GETPGRP = 4065 + SYS_SETSID = 4066 + SYS_SIGACTION = 4067 + SYS_SGETMASK = 4068 + SYS_SSETMASK = 4069 + SYS_SETREUID = 4070 + SYS_SETREGID = 4071 + SYS_SIGSUSPEND = 4072 + SYS_SIGPENDING = 4073 + SYS_SETHOSTNAME = 4074 + SYS_SETRLIMIT = 4075 + SYS_GETRLIMIT = 4076 + SYS_GETRUSAGE = 4077 + SYS_GETTIMEOFDAY = 4078 + SYS_SETTIMEOFDAY = 4079 + SYS_GETGROUPS = 4080 + SYS_SETGROUPS = 4081 + SYS_RESERVED82 = 4082 + SYS_SYMLINK = 4083 + SYS_UNUSED84 = 4084 + SYS_READLINK = 4085 + SYS_USELIB = 4086 + SYS_SWAPON = 4087 + SYS_REBOOT = 4088 + SYS_READDIR = 4089 + SYS_MMAP = 4090 + SYS_MUNMAP = 4091 + SYS_TRUNCATE = 4092 + SYS_FTRUNCATE = 4093 + SYS_FCHMOD = 4094 + SYS_FCHOWN = 4095 + SYS_GETPRIORITY = 4096 + SYS_SETPRIORITY = 4097 + SYS_PROFIL = 4098 + SYS_STATFS = 4099 + SYS_FSTATFS = 4100 + SYS_IOPERM = 4101 + SYS_SOCKETCALL = 4102 + SYS_SYSLOG = 4103 + SYS_SETITIMER = 4104 + SYS_GETITIMER = 4105 + SYS_STAT = 4106 + SYS_LSTAT = 4107 + SYS_FSTAT = 4108 + SYS_UNUSED109 = 4109 + SYS_IOPL = 4110 + SYS_VHANGUP = 4111 + SYS_IDLE = 4112 + SYS_VM86 = 4113 + SYS_WAIT4 = 4114 + SYS_SWAPOFF = 4115 + SYS_SYSINFO = 4116 + SYS_IPC = 4117 + SYS_FSYNC = 4118 + SYS_SIGRETURN = 4119 + SYS_CLONE = 4120 + SYS_SETDOMAINNAME = 4121 + SYS_UNAME = 4122 + SYS_MODIFY_LDT = 4123 + SYS_ADJTIMEX = 4124 + SYS_MPROTECT = 4125 + SYS_SIGPROCMASK = 4126 + SYS_CREATE_MODULE = 4127 + SYS_INIT_MODULE = 4128 + SYS_DELETE_MODULE = 4129 + SYS_GET_KERNEL_SYMS = 4130 + SYS_QUOTACTL = 4131 + SYS_GETPGID = 4132 + SYS_FCHDIR = 4133 + SYS_BDFLUSH = 4134 + SYS_SYSFS = 4135 + SYS_PERSONALITY = 4136 + SYS_AFS_SYSCALL = 4137 + SYS_SETFSUID = 4138 + SYS_SETFSGID = 4139 + SYS__LLSEEK = 4140 + SYS_GETDENTS = 4141 + SYS__NEWSELECT = 4142 + SYS_FLOCK = 4143 + SYS_MSYNC = 4144 + SYS_READV = 4145 + SYS_WRITEV = 4146 + SYS_CACHEFLUSH = 4147 + SYS_CACHECTL = 4148 + SYS_SYSMIPS = 4149 + SYS_UNUSED150 = 4150 + SYS_GETSID = 4151 + SYS_FDATASYNC = 4152 + SYS__SYSCTL = 4153 + SYS_MLOCK = 4154 + SYS_MUNLOCK = 4155 + SYS_MLOCKALL = 4156 + SYS_MUNLOCKALL = 4157 + SYS_SCHED_SETPARAM = 4158 + SYS_SCHED_GETPARAM = 4159 + SYS_SCHED_SETSCHEDULER = 4160 + SYS_SCHED_GETSCHEDULER = 4161 + SYS_SCHED_YIELD = 4162 + SYS_SCHED_GET_PRIORITY_MAX = 4163 + SYS_SCHED_GET_PRIORITY_MIN = 4164 + SYS_SCHED_RR_GET_INTERVAL = 4165 + SYS_NANOSLEEP = 4166 + SYS_MREMAP = 4167 + SYS_ACCEPT = 4168 + SYS_BIND = 4169 + SYS_CONNECT = 4170 + SYS_GETPEERNAME = 4171 + SYS_GETSOCKNAME = 4172 + SYS_GETSOCKOPT = 4173 + SYS_LISTEN = 4174 + SYS_RECV = 4175 + SYS_RECVFROM = 4176 + SYS_RECVMSG = 4177 + SYS_SEND = 4178 + SYS_SENDMSG = 4179 + SYS_SENDTO = 4180 + SYS_SETSOCKOPT = 4181 + SYS_SHUTDOWN = 4182 + SYS_SOCKET = 4183 + SYS_SOCKETPAIR = 4184 + SYS_SETRESUID = 4185 + SYS_GETRESUID = 4186 + SYS_QUERY_MODULE = 4187 + SYS_POLL = 4188 + SYS_NFSSERVCTL = 4189 + SYS_SETRESGID = 4190 + SYS_GETRESGID = 4191 + SYS_PRCTL = 4192 + SYS_RT_SIGRETURN = 4193 + SYS_RT_SIGACTION = 4194 + SYS_RT_SIGPROCMASK = 4195 + SYS_RT_SIGPENDING = 4196 + SYS_RT_SIGTIMEDWAIT = 4197 + SYS_RT_SIGQUEUEINFO = 4198 + SYS_RT_SIGSUSPEND = 4199 + SYS_PREAD64 = 4200 + SYS_PWRITE64 = 4201 + SYS_CHOWN = 4202 + SYS_GETCWD = 4203 + SYS_CAPGET = 4204 + SYS_CAPSET = 4205 + SYS_SIGALTSTACK = 4206 + SYS_SENDFILE = 4207 + SYS_GETPMSG = 4208 + SYS_PUTPMSG = 4209 + SYS_MMAP2 = 4210 + SYS_TRUNCATE64 = 4211 + SYS_FTRUNCATE64 = 4212 + SYS_STAT64 = 4213 + SYS_LSTAT64 = 4214 + SYS_FSTAT64 = 4215 + SYS_PIVOT_ROOT = 4216 + SYS_MINCORE = 4217 + SYS_MADVISE = 4218 + SYS_GETDENTS64 = 4219 + SYS_FCNTL64 = 4220 + SYS_RESERVED221 = 4221 + SYS_GETTID = 4222 + SYS_READAHEAD = 4223 + SYS_SETXATTR = 4224 + SYS_LSETXATTR = 4225 + SYS_FSETXATTR = 4226 + SYS_GETXATTR = 4227 + SYS_LGETXATTR = 4228 + SYS_FGETXATTR = 4229 + SYS_LISTXATTR = 4230 + SYS_LLISTXATTR = 4231 + SYS_FLISTXATTR = 4232 + SYS_REMOVEXATTR = 4233 + SYS_LREMOVEXATTR = 4234 + SYS_FREMOVEXATTR = 4235 + SYS_TKILL = 4236 + SYS_SENDFILE64 = 4237 + SYS_FUTEX = 4238 + SYS_SCHED_SETAFFINITY = 4239 + SYS_SCHED_GETAFFINITY = 4240 + SYS_IO_SETUP = 4241 + SYS_IO_DESTROY = 4242 + SYS_IO_GETEVENTS = 4243 + SYS_IO_SUBMIT = 4244 + SYS_IO_CANCEL = 4245 + SYS_EXIT_GROUP = 4246 + SYS_LOOKUP_DCOOKIE = 4247 + SYS_EPOLL_CREATE = 4248 + SYS_EPOLL_CTL = 4249 + SYS_EPOLL_WAIT = 4250 + SYS_REMAP_FILE_PAGES = 4251 + SYS_SET_TID_ADDRESS = 4252 + SYS_RESTART_SYSCALL = 4253 + SYS_FADVISE64 = 4254 + SYS_STATFS64 = 4255 + SYS_FSTATFS64 = 4256 + SYS_TIMER_CREATE = 4257 + SYS_TIMER_SETTIME = 4258 + SYS_TIMER_GETTIME = 4259 + SYS_TIMER_GETOVERRUN = 4260 + SYS_TIMER_DELETE = 4261 + SYS_CLOCK_SETTIME = 4262 + SYS_CLOCK_GETTIME = 4263 + SYS_CLOCK_GETRES = 4264 + SYS_CLOCK_NANOSLEEP = 4265 + SYS_TGKILL = 4266 + SYS_UTIMES = 4267 + SYS_MBIND = 4268 + SYS_GET_MEMPOLICY = 4269 + SYS_SET_MEMPOLICY = 4270 + SYS_MQ_OPEN = 4271 + SYS_MQ_UNLINK = 4272 + SYS_MQ_TIMEDSEND = 4273 + SYS_MQ_TIMEDRECEIVE = 4274 + SYS_MQ_NOTIFY = 4275 + SYS_MQ_GETSETATTR = 4276 + SYS_VSERVER = 4277 + SYS_WAITID = 4278 + SYS_ADD_KEY = 4280 + SYS_REQUEST_KEY = 4281 + SYS_KEYCTL = 4282 + SYS_SET_THREAD_AREA = 4283 + SYS_INOTIFY_INIT = 4284 + SYS_INOTIFY_ADD_WATCH = 4285 + SYS_INOTIFY_RM_WATCH = 4286 + SYS_MIGRATE_PAGES = 4287 + SYS_OPENAT = 4288 + SYS_MKDIRAT = 4289 + SYS_MKNODAT = 4290 + SYS_FCHOWNAT = 4291 + SYS_FUTIMESAT = 4292 + SYS_FSTATAT64 = 4293 + SYS_UNLINKAT = 4294 + SYS_RENAMEAT = 4295 + SYS_LINKAT = 4296 + SYS_SYMLINKAT = 4297 + SYS_READLINKAT = 4298 + SYS_FCHMODAT = 4299 + SYS_FACCESSAT = 4300 + SYS_PSELECT6 = 4301 + SYS_PPOLL = 4302 + SYS_UNSHARE = 4303 + SYS_SPLICE = 4304 + SYS_SYNC_FILE_RANGE = 4305 + SYS_TEE = 4306 + SYS_VMSPLICE = 4307 + SYS_MOVE_PAGES = 4308 + SYS_SET_ROBUST_LIST = 4309 + SYS_GET_ROBUST_LIST = 4310 + SYS_KEXEC_LOAD = 4311 + SYS_GETCPU = 4312 + SYS_EPOLL_PWAIT = 4313 + SYS_IOPRIO_SET = 4314 + SYS_IOPRIO_GET = 4315 + SYS_UTIMENSAT = 4316 + SYS_SIGNALFD = 4317 + SYS_TIMERFD = 4318 + SYS_EVENTFD = 4319 + SYS_FALLOCATE = 4320 + SYS_TIMERFD_CREATE = 4321 + SYS_TIMERFD_GETTIME = 4322 + SYS_TIMERFD_SETTIME = 4323 + SYS_SIGNALFD4 = 4324 + SYS_EVENTFD2 = 4325 + SYS_EPOLL_CREATE1 = 4326 + SYS_DUP3 = 4327 + SYS_PIPE2 = 4328 + SYS_INOTIFY_INIT1 = 4329 + SYS_PREADV = 4330 + SYS_PWRITEV = 4331 + SYS_RT_TGSIGQUEUEINFO = 4332 + SYS_PERF_EVENT_OPEN = 4333 + SYS_ACCEPT4 = 4334 + SYS_RECVMMSG = 4335 + SYS_FANOTIFY_INIT = 4336 + SYS_FANOTIFY_MARK = 4337 + SYS_PRLIMIT64 = 4338 + SYS_NAME_TO_HANDLE_AT = 4339 + SYS_OPEN_BY_HANDLE_AT = 4340 + SYS_CLOCK_ADJTIME = 4341 + SYS_SYNCFS = 4342 + SYS_SENDMMSG = 4343 + SYS_SETNS = 4344 + SYS_PROCESS_VM_READV = 4345 + SYS_PROCESS_VM_WRITEV = 4346 + SYS_KCMP = 4347 + SYS_FINIT_MODULE = 4348 + SYS_SCHED_SETATTR = 4349 + SYS_SCHED_GETATTR = 4350 + SYS_RENAMEAT2 = 4351 + SYS_SECCOMP = 4352 + SYS_GETRANDOM = 4353 + SYS_MEMFD_CREATE = 4354 + SYS_BPF = 4355 + SYS_EXECVEAT = 4356 + SYS_USERFAULTFD = 4357 + SYS_MEMBARRIER = 4358 + SYS_MLOCK2 = 4359 + SYS_COPY_FILE_RANGE = 4360 + SYS_PREADV2 = 4361 + SYS_PWRITEV2 = 4362 + SYS_PKEY_MPROTECT = 4363 + SYS_PKEY_ALLOC = 4364 + SYS_PKEY_FREE = 4365 + SYS_STATX = 4366 + SYS_RSEQ = 4367 + SYS_IO_PGETEVENTS = 4368 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go new file mode 100644 index 00000000000..1270a1c90b2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -0,0 +1,337 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 + SYS_RSEQ = 5327 + SYS_IO_PGETEVENTS = 5328 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go new file mode 100644 index 00000000000..93980be13b0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -0,0 +1,337 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 + SYS_RSEQ = 5327 + SYS_IO_PGETEVENTS = 5328 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go new file mode 100644 index 00000000000..0fc7726195e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -0,0 +1,377 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +package unix + +const ( + SYS_SYSCALL = 4000 + SYS_EXIT = 4001 + SYS_FORK = 4002 + SYS_READ = 4003 + SYS_WRITE = 4004 + SYS_OPEN = 4005 + SYS_CLOSE = 4006 + SYS_WAITPID = 4007 + SYS_CREAT = 4008 + SYS_LINK = 4009 + SYS_UNLINK = 4010 + SYS_EXECVE = 4011 + SYS_CHDIR = 4012 + SYS_TIME = 4013 + SYS_MKNOD = 4014 + SYS_CHMOD = 4015 + SYS_LCHOWN = 4016 + SYS_BREAK = 4017 + SYS_UNUSED18 = 4018 + SYS_LSEEK = 4019 + SYS_GETPID = 4020 + SYS_MOUNT = 4021 + SYS_UMOUNT = 4022 + SYS_SETUID = 4023 + SYS_GETUID = 4024 + SYS_STIME = 4025 + SYS_PTRACE = 4026 + SYS_ALARM = 4027 + SYS_UNUSED28 = 4028 + SYS_PAUSE = 4029 + SYS_UTIME = 4030 + SYS_STTY = 4031 + SYS_GTTY = 4032 + SYS_ACCESS = 4033 + SYS_NICE = 4034 + SYS_FTIME = 4035 + SYS_SYNC = 4036 + SYS_KILL = 4037 + SYS_RENAME = 4038 + SYS_MKDIR = 4039 + SYS_RMDIR = 4040 + SYS_DUP = 4041 + SYS_PIPE = 4042 + SYS_TIMES = 4043 + SYS_PROF = 4044 + SYS_BRK = 4045 + SYS_SETGID = 4046 + SYS_GETGID = 4047 + SYS_SIGNAL = 4048 + SYS_GETEUID = 4049 + SYS_GETEGID = 4050 + SYS_ACCT = 4051 + SYS_UMOUNT2 = 4052 + SYS_LOCK = 4053 + SYS_IOCTL = 4054 + SYS_FCNTL = 4055 + SYS_MPX = 4056 + SYS_SETPGID = 4057 + SYS_ULIMIT = 4058 + SYS_UNUSED59 = 4059 + SYS_UMASK = 4060 + SYS_CHROOT = 4061 + SYS_USTAT = 4062 + SYS_DUP2 = 4063 + SYS_GETPPID = 4064 + SYS_GETPGRP = 4065 + SYS_SETSID = 4066 + SYS_SIGACTION = 4067 + SYS_SGETMASK = 4068 + SYS_SSETMASK = 4069 + SYS_SETREUID = 4070 + SYS_SETREGID = 4071 + SYS_SIGSUSPEND = 4072 + SYS_SIGPENDING = 4073 + SYS_SETHOSTNAME = 4074 + SYS_SETRLIMIT = 4075 + SYS_GETRLIMIT = 4076 + SYS_GETRUSAGE = 4077 + SYS_GETTIMEOFDAY = 4078 + SYS_SETTIMEOFDAY = 4079 + SYS_GETGROUPS = 4080 + SYS_SETGROUPS = 4081 + SYS_RESERVED82 = 4082 + SYS_SYMLINK = 4083 + SYS_UNUSED84 = 4084 + SYS_READLINK = 4085 + SYS_USELIB = 4086 + SYS_SWAPON = 4087 + SYS_REBOOT = 4088 + SYS_READDIR = 4089 + SYS_MMAP = 4090 + SYS_MUNMAP = 4091 + SYS_TRUNCATE = 4092 + SYS_FTRUNCATE = 4093 + SYS_FCHMOD = 4094 + SYS_FCHOWN = 4095 + SYS_GETPRIORITY = 4096 + SYS_SETPRIORITY = 4097 + SYS_PROFIL = 4098 + SYS_STATFS = 4099 + SYS_FSTATFS = 4100 + SYS_IOPERM = 4101 + SYS_SOCKETCALL = 4102 + SYS_SYSLOG = 4103 + SYS_SETITIMER = 4104 + SYS_GETITIMER = 4105 + SYS_STAT = 4106 + SYS_LSTAT = 4107 + SYS_FSTAT = 4108 + SYS_UNUSED109 = 4109 + SYS_IOPL = 4110 + SYS_VHANGUP = 4111 + SYS_IDLE = 4112 + SYS_VM86 = 4113 + SYS_WAIT4 = 4114 + SYS_SWAPOFF = 4115 + SYS_SYSINFO = 4116 + SYS_IPC = 4117 + SYS_FSYNC = 4118 + SYS_SIGRETURN = 4119 + SYS_CLONE = 4120 + SYS_SETDOMAINNAME = 4121 + SYS_UNAME = 4122 + SYS_MODIFY_LDT = 4123 + SYS_ADJTIMEX = 4124 + SYS_MPROTECT = 4125 + SYS_SIGPROCMASK = 4126 + SYS_CREATE_MODULE = 4127 + SYS_INIT_MODULE = 4128 + SYS_DELETE_MODULE = 4129 + SYS_GET_KERNEL_SYMS = 4130 + SYS_QUOTACTL = 4131 + SYS_GETPGID = 4132 + SYS_FCHDIR = 4133 + SYS_BDFLUSH = 4134 + SYS_SYSFS = 4135 + SYS_PERSONALITY = 4136 + SYS_AFS_SYSCALL = 4137 + SYS_SETFSUID = 4138 + SYS_SETFSGID = 4139 + SYS__LLSEEK = 4140 + SYS_GETDENTS = 4141 + SYS__NEWSELECT = 4142 + SYS_FLOCK = 4143 + SYS_MSYNC = 4144 + SYS_READV = 4145 + SYS_WRITEV = 4146 + SYS_CACHEFLUSH = 4147 + SYS_CACHECTL = 4148 + SYS_SYSMIPS = 4149 + SYS_UNUSED150 = 4150 + SYS_GETSID = 4151 + SYS_FDATASYNC = 4152 + SYS__SYSCTL = 4153 + SYS_MLOCK = 4154 + SYS_MUNLOCK = 4155 + SYS_MLOCKALL = 4156 + SYS_MUNLOCKALL = 4157 + SYS_SCHED_SETPARAM = 4158 + SYS_SCHED_GETPARAM = 4159 + SYS_SCHED_SETSCHEDULER = 4160 + SYS_SCHED_GETSCHEDULER = 4161 + SYS_SCHED_YIELD = 4162 + SYS_SCHED_GET_PRIORITY_MAX = 4163 + SYS_SCHED_GET_PRIORITY_MIN = 4164 + SYS_SCHED_RR_GET_INTERVAL = 4165 + SYS_NANOSLEEP = 4166 + SYS_MREMAP = 4167 + SYS_ACCEPT = 4168 + SYS_BIND = 4169 + SYS_CONNECT = 4170 + SYS_GETPEERNAME = 4171 + SYS_GETSOCKNAME = 4172 + SYS_GETSOCKOPT = 4173 + SYS_LISTEN = 4174 + SYS_RECV = 4175 + SYS_RECVFROM = 4176 + SYS_RECVMSG = 4177 + SYS_SEND = 4178 + SYS_SENDMSG = 4179 + SYS_SENDTO = 4180 + SYS_SETSOCKOPT = 4181 + SYS_SHUTDOWN = 4182 + SYS_SOCKET = 4183 + SYS_SOCKETPAIR = 4184 + SYS_SETRESUID = 4185 + SYS_GETRESUID = 4186 + SYS_QUERY_MODULE = 4187 + SYS_POLL = 4188 + SYS_NFSSERVCTL = 4189 + SYS_SETRESGID = 4190 + SYS_GETRESGID = 4191 + SYS_PRCTL = 4192 + SYS_RT_SIGRETURN = 4193 + SYS_RT_SIGACTION = 4194 + SYS_RT_SIGPROCMASK = 4195 + SYS_RT_SIGPENDING = 4196 + SYS_RT_SIGTIMEDWAIT = 4197 + SYS_RT_SIGQUEUEINFO = 4198 + SYS_RT_SIGSUSPEND = 4199 + SYS_PREAD64 = 4200 + SYS_PWRITE64 = 4201 + SYS_CHOWN = 4202 + SYS_GETCWD = 4203 + SYS_CAPGET = 4204 + SYS_CAPSET = 4205 + SYS_SIGALTSTACK = 4206 + SYS_SENDFILE = 4207 + SYS_GETPMSG = 4208 + SYS_PUTPMSG = 4209 + SYS_MMAP2 = 4210 + SYS_TRUNCATE64 = 4211 + SYS_FTRUNCATE64 = 4212 + SYS_STAT64 = 4213 + SYS_LSTAT64 = 4214 + SYS_FSTAT64 = 4215 + SYS_PIVOT_ROOT = 4216 + SYS_MINCORE = 4217 + SYS_MADVISE = 4218 + SYS_GETDENTS64 = 4219 + SYS_FCNTL64 = 4220 + SYS_RESERVED221 = 4221 + SYS_GETTID = 4222 + SYS_READAHEAD = 4223 + SYS_SETXATTR = 4224 + SYS_LSETXATTR = 4225 + SYS_FSETXATTR = 4226 + SYS_GETXATTR = 4227 + SYS_LGETXATTR = 4228 + SYS_FGETXATTR = 4229 + SYS_LISTXATTR = 4230 + SYS_LLISTXATTR = 4231 + SYS_FLISTXATTR = 4232 + SYS_REMOVEXATTR = 4233 + SYS_LREMOVEXATTR = 4234 + SYS_FREMOVEXATTR = 4235 + SYS_TKILL = 4236 + SYS_SENDFILE64 = 4237 + SYS_FUTEX = 4238 + SYS_SCHED_SETAFFINITY = 4239 + SYS_SCHED_GETAFFINITY = 4240 + SYS_IO_SETUP = 4241 + SYS_IO_DESTROY = 4242 + SYS_IO_GETEVENTS = 4243 + SYS_IO_SUBMIT = 4244 + SYS_IO_CANCEL = 4245 + SYS_EXIT_GROUP = 4246 + SYS_LOOKUP_DCOOKIE = 4247 + SYS_EPOLL_CREATE = 4248 + SYS_EPOLL_CTL = 4249 + SYS_EPOLL_WAIT = 4250 + SYS_REMAP_FILE_PAGES = 4251 + SYS_SET_TID_ADDRESS = 4252 + SYS_RESTART_SYSCALL = 4253 + SYS_FADVISE64 = 4254 + SYS_STATFS64 = 4255 + SYS_FSTATFS64 = 4256 + SYS_TIMER_CREATE = 4257 + SYS_TIMER_SETTIME = 4258 + SYS_TIMER_GETTIME = 4259 + SYS_TIMER_GETOVERRUN = 4260 + SYS_TIMER_DELETE = 4261 + SYS_CLOCK_SETTIME = 4262 + SYS_CLOCK_GETTIME = 4263 + SYS_CLOCK_GETRES = 4264 + SYS_CLOCK_NANOSLEEP = 4265 + SYS_TGKILL = 4266 + SYS_UTIMES = 4267 + SYS_MBIND = 4268 + SYS_GET_MEMPOLICY = 4269 + SYS_SET_MEMPOLICY = 4270 + SYS_MQ_OPEN = 4271 + SYS_MQ_UNLINK = 4272 + SYS_MQ_TIMEDSEND = 4273 + SYS_MQ_TIMEDRECEIVE = 4274 + SYS_MQ_NOTIFY = 4275 + SYS_MQ_GETSETATTR = 4276 + SYS_VSERVER = 4277 + SYS_WAITID = 4278 + SYS_ADD_KEY = 4280 + SYS_REQUEST_KEY = 4281 + SYS_KEYCTL = 4282 + SYS_SET_THREAD_AREA = 4283 + SYS_INOTIFY_INIT = 4284 + SYS_INOTIFY_ADD_WATCH = 4285 + SYS_INOTIFY_RM_WATCH = 4286 + SYS_MIGRATE_PAGES = 4287 + SYS_OPENAT = 4288 + SYS_MKDIRAT = 4289 + SYS_MKNODAT = 4290 + SYS_FCHOWNAT = 4291 + SYS_FUTIMESAT = 4292 + SYS_FSTATAT64 = 4293 + SYS_UNLINKAT = 4294 + SYS_RENAMEAT = 4295 + SYS_LINKAT = 4296 + SYS_SYMLINKAT = 4297 + SYS_READLINKAT = 4298 + SYS_FCHMODAT = 4299 + SYS_FACCESSAT = 4300 + SYS_PSELECT6 = 4301 + SYS_PPOLL = 4302 + SYS_UNSHARE = 4303 + SYS_SPLICE = 4304 + SYS_SYNC_FILE_RANGE = 4305 + SYS_TEE = 4306 + SYS_VMSPLICE = 4307 + SYS_MOVE_PAGES = 4308 + SYS_SET_ROBUST_LIST = 4309 + SYS_GET_ROBUST_LIST = 4310 + SYS_KEXEC_LOAD = 4311 + SYS_GETCPU = 4312 + SYS_EPOLL_PWAIT = 4313 + SYS_IOPRIO_SET = 4314 + SYS_IOPRIO_GET = 4315 + SYS_UTIMENSAT = 4316 + SYS_SIGNALFD = 4317 + SYS_TIMERFD = 4318 + SYS_EVENTFD = 4319 + SYS_FALLOCATE = 4320 + SYS_TIMERFD_CREATE = 4321 + SYS_TIMERFD_GETTIME = 4322 + SYS_TIMERFD_SETTIME = 4323 + SYS_SIGNALFD4 = 4324 + SYS_EVENTFD2 = 4325 + SYS_EPOLL_CREATE1 = 4326 + SYS_DUP3 = 4327 + SYS_PIPE2 = 4328 + SYS_INOTIFY_INIT1 = 4329 + SYS_PREADV = 4330 + SYS_PWRITEV = 4331 + SYS_RT_TGSIGQUEUEINFO = 4332 + SYS_PERF_EVENT_OPEN = 4333 + SYS_ACCEPT4 = 4334 + SYS_RECVMMSG = 4335 + SYS_FANOTIFY_INIT = 4336 + SYS_FANOTIFY_MARK = 4337 + SYS_PRLIMIT64 = 4338 + SYS_NAME_TO_HANDLE_AT = 4339 + SYS_OPEN_BY_HANDLE_AT = 4340 + SYS_CLOCK_ADJTIME = 4341 + SYS_SYNCFS = 4342 + SYS_SENDMMSG = 4343 + SYS_SETNS = 4344 + SYS_PROCESS_VM_READV = 4345 + SYS_PROCESS_VM_WRITEV = 4346 + SYS_KCMP = 4347 + SYS_FINIT_MODULE = 4348 + SYS_SCHED_SETATTR = 4349 + SYS_SCHED_GETATTR = 4350 + SYS_RENAMEAT2 = 4351 + SYS_SECCOMP = 4352 + SYS_GETRANDOM = 4353 + SYS_MEMFD_CREATE = 4354 + SYS_BPF = 4355 + SYS_EXECVEAT = 4356 + SYS_USERFAULTFD = 4357 + SYS_MEMBARRIER = 4358 + SYS_MLOCK2 = 4359 + SYS_COPY_FILE_RANGE = 4360 + SYS_PREADV2 = 4361 + SYS_PWRITEV2 = 4362 + SYS_PKEY_MPROTECT = 4363 + SYS_PKEY_ALLOC = 4364 + SYS_PKEY_FREE = 4365 + SYS_STATX = 4366 + SYS_RSEQ = 4367 + SYS_IO_PGETEVENTS = 4368 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go new file mode 100644 index 00000000000..a5c5f3def56 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -0,0 +1,375 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 + SYS_PKEY_ALLOC = 384 + SYS_PKEY_FREE = 385 + SYS_PKEY_MPROTECT = 386 + SYS_RSEQ = 387 + SYS_IO_PGETEVENTS = 388 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go new file mode 100644 index 00000000000..5470eadbf80 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -0,0 +1,375 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 + SYS_PKEY_ALLOC = 384 + SYS_PKEY_FREE = 385 + SYS_PKEY_MPROTECT = 386 + SYS_RSEQ = 387 + SYS_IO_PGETEVENTS = 388 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go new file mode 100644 index 00000000000..a5d9919152b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -0,0 +1,287 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build riscv64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 + SYS_IO_PGETEVENTS = 292 + SYS_RSEQ = 293 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go new file mode 100644 index 00000000000..de0245a9250 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -0,0 +1,337 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +package unix + +const ( + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_RESTART_SYSCALL = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SIGNAL = 48 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_LOOKUP_DCOOKIE = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_GETDENTS = 141 + SYS_SELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_GETRLIMIT = 191 + SYS_LCHOWN = 198 + SYS_GETUID = 199 + SYS_GETGID = 200 + SYS_GETEUID = 201 + SYS_GETEGID = 202 + SYS_SETREUID = 203 + SYS_SETREGID = 204 + SYS_GETGROUPS = 205 + SYS_SETGROUPS = 206 + SYS_FCHOWN = 207 + SYS_SETRESUID = 208 + SYS_GETRESUID = 209 + SYS_SETRESGID = 210 + SYS_GETRESGID = 211 + SYS_CHOWN = 212 + SYS_SETUID = 213 + SYS_SETGID = 214 + SYS_SETFSUID = 215 + SYS_SETFSGID = 216 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_READAHEAD = 222 + SYS_SETXATTR = 224 + SYS_LSETXATTR = 225 + SYS_FSETXATTR = 226 + SYS_GETXATTR = 227 + SYS_LGETXATTR = 228 + SYS_FGETXATTR = 229 + SYS_LISTXATTR = 230 + SYS_LLISTXATTR = 231 + SYS_FLISTXATTR = 232 + SYS_REMOVEXATTR = 233 + SYS_LREMOVEXATTR = 234 + SYS_FREMOVEXATTR = 235 + SYS_GETTID = 236 + SYS_TKILL = 237 + SYS_FUTEX = 238 + SYS_SCHED_SETAFFINITY = 239 + SYS_SCHED_GETAFFINITY = 240 + SYS_TGKILL = 241 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_EPOLL_CREATE = 249 + SYS_EPOLL_CTL = 250 + SYS_EPOLL_WAIT = 251 + SYS_SET_TID_ADDRESS = 252 + SYS_FADVISE64 = 253 + SYS_TIMER_CREATE = 254 + SYS_TIMER_SETTIME = 255 + SYS_TIMER_GETTIME = 256 + SYS_TIMER_GETOVERRUN = 257 + SYS_TIMER_DELETE = 258 + SYS_CLOCK_SETTIME = 259 + SYS_CLOCK_GETTIME = 260 + SYS_CLOCK_GETRES = 261 + SYS_CLOCK_NANOSLEEP = 262 + SYS_STATFS64 = 265 + SYS_FSTATFS64 = 266 + SYS_REMAP_FILE_PAGES = 267 + SYS_MBIND = 268 + SYS_GET_MEMPOLICY = 269 + SYS_SET_MEMPOLICY = 270 + SYS_MQ_OPEN = 271 + SYS_MQ_UNLINK = 272 + SYS_MQ_TIMEDSEND = 273 + SYS_MQ_TIMEDRECEIVE = 274 + SYS_MQ_NOTIFY = 275 + SYS_MQ_GETSETATTR = 276 + SYS_KEXEC_LOAD = 277 + SYS_ADD_KEY = 278 + SYS_REQUEST_KEY = 279 + SYS_KEYCTL = 280 + SYS_WAITID = 281 + SYS_IOPRIO_SET = 282 + SYS_IOPRIO_GET = 283 + SYS_INOTIFY_INIT = 284 + SYS_INOTIFY_ADD_WATCH = 285 + SYS_INOTIFY_RM_WATCH = 286 + SYS_MIGRATE_PAGES = 287 + SYS_OPENAT = 288 + SYS_MKDIRAT = 289 + SYS_MKNODAT = 290 + SYS_FCHOWNAT = 291 + SYS_FUTIMESAT = 292 + SYS_NEWFSTATAT = 293 + SYS_UNLINKAT = 294 + SYS_RENAMEAT = 295 + SYS_LINKAT = 296 + SYS_SYMLINKAT = 297 + SYS_READLINKAT = 298 + SYS_FCHMODAT = 299 + SYS_FACCESSAT = 300 + SYS_PSELECT6 = 301 + SYS_PPOLL = 302 + SYS_UNSHARE = 303 + SYS_SET_ROBUST_LIST = 304 + SYS_GET_ROBUST_LIST = 305 + SYS_SPLICE = 306 + SYS_SYNC_FILE_RANGE = 307 + SYS_TEE = 308 + SYS_VMSPLICE = 309 + SYS_MOVE_PAGES = 310 + SYS_GETCPU = 311 + SYS_EPOLL_PWAIT = 312 + SYS_UTIMES = 313 + SYS_FALLOCATE = 314 + SYS_UTIMENSAT = 315 + SYS_SIGNALFD = 316 + SYS_TIMERFD = 317 + SYS_EVENTFD = 318 + SYS_TIMERFD_CREATE = 319 + SYS_TIMERFD_SETTIME = 320 + SYS_TIMERFD_GETTIME = 321 + SYS_SIGNALFD4 = 322 + SYS_EVENTFD2 = 323 + SYS_INOTIFY_INIT1 = 324 + SYS_PIPE2 = 325 + SYS_DUP3 = 326 + SYS_EPOLL_CREATE1 = 327 + SYS_PREADV = 328 + SYS_PWRITEV = 329 + SYS_RT_TGSIGQUEUEINFO = 330 + SYS_PERF_EVENT_OPEN = 331 + SYS_FANOTIFY_INIT = 332 + SYS_FANOTIFY_MARK = 333 + SYS_PRLIMIT64 = 334 + SYS_NAME_TO_HANDLE_AT = 335 + SYS_OPEN_BY_HANDLE_AT = 336 + SYS_CLOCK_ADJTIME = 337 + SYS_SYNCFS = 338 + SYS_SETNS = 339 + SYS_PROCESS_VM_READV = 340 + SYS_PROCESS_VM_WRITEV = 341 + SYS_S390_RUNTIME_INSTR = 342 + SYS_KCMP = 343 + SYS_FINIT_MODULE = 344 + SYS_SCHED_SETATTR = 345 + SYS_SCHED_GETATTR = 346 + SYS_RENAMEAT2 = 347 + SYS_SECCOMP = 348 + SYS_GETRANDOM = 349 + SYS_MEMFD_CREATE = 350 + SYS_BPF = 351 + SYS_S390_PCI_MMIO_WRITE = 352 + SYS_S390_PCI_MMIO_READ = 353 + SYS_EXECVEAT = 354 + SYS_USERFAULTFD = 355 + SYS_MEMBARRIER = 356 + SYS_RECVMMSG = 357 + SYS_SENDMMSG = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_MLOCK2 = 374 + SYS_COPY_FILE_RANGE = 375 + SYS_PREADV2 = 376 + SYS_PWRITEV2 = 377 + SYS_S390_GUARDED_STORAGE = 378 + SYS_STATX = 379 + SYS_S390_STHYI = 380 + SYS_KEXEC_FILE_LOAD = 381 + SYS_IO_PGETEVENTS = 382 + SYS_RSEQ = 383 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go new file mode 100644 index 00000000000..2d099367215 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -0,0 +1,348 @@ +// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__arch64__ linux/usr/include/asm/unistd.h +// Code generated by the command above; DO NOT EDIT. + +// +build sparc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECV = 11 + SYS_CHDIR = 12 + SYS_CHOWN = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BRK = 17 + SYS_PERFCTR = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_CAPGET = 21 + SYS_CAPSET = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_VMSPLICE = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_SIGALTSTACK = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_STAT = 38 + SYS_SENDFILE = 39 + SYS_LSTAT = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_UMOUNT2 = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_MEMORY_ORDERING = 52 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_FSTAT = 62 + SYS_FSTAT64 = 63 + SYS_GETPAGESIZE = 64 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_MMAP = 71 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_VHANGUP = 76 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_SETHOSTNAME = 88 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_ACCEPT = 99 + SYS_GETPRIORITY = 100 + SYS_RT_SIGRETURN = 101 + SYS_RT_SIGACTION = 102 + SYS_RT_SIGPROCMASK = 103 + SYS_RT_SIGPENDING = 104 + SYS_RT_SIGTIMEDWAIT = 105 + SYS_RT_SIGQUEUEINFO = 106 + SYS_RT_SIGSUSPEND = 107 + SYS_SETRESUID = 108 + SYS_GETRESUID = 109 + SYS_SETRESGID = 110 + SYS_GETRESGID = 111 + SYS_RECVMSG = 113 + SYS_SENDMSG = 114 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_GETCWD = 119 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_RECVFROM = 125 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_TRUNCATE = 129 + SYS_FTRUNCATE = 130 + SYS_FLOCK = 131 + SYS_LSTAT64 = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_STAT64 = 139 + SYS_SENDFILE64 = 140 + SYS_GETPEERNAME = 141 + SYS_FUTEX = 142 + SYS_GETTID = 143 + SYS_GETRLIMIT = 144 + SYS_SETRLIMIT = 145 + SYS_PIVOT_ROOT = 146 + SYS_PRCTL = 147 + SYS_PCICONFIG_READ = 148 + SYS_PCICONFIG_WRITE = 149 + SYS_GETSOCKNAME = 150 + SYS_INOTIFY_INIT = 151 + SYS_INOTIFY_ADD_WATCH = 152 + SYS_POLL = 153 + SYS_GETDENTS64 = 154 + SYS_INOTIFY_RM_WATCH = 156 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UMOUNT = 159 + SYS_SCHED_SET_AFFINITY = 160 + SYS_SCHED_GET_AFFINITY = 161 + SYS_GETDOMAINNAME = 162 + SYS_SETDOMAINNAME = 163 + SYS_UTRAP_INSTALL = 164 + SYS_QUOTACTL = 165 + SYS_SET_TID_ADDRESS = 166 + SYS_MOUNT = 167 + SYS_USTAT = 168 + SYS_SETXATTR = 169 + SYS_LSETXATTR = 170 + SYS_FSETXATTR = 171 + SYS_GETXATTR = 172 + SYS_LGETXATTR = 173 + SYS_GETDENTS = 174 + SYS_SETSID = 175 + SYS_FCHDIR = 176 + SYS_FGETXATTR = 177 + SYS_LISTXATTR = 178 + SYS_LLISTXATTR = 179 + SYS_FLISTXATTR = 180 + SYS_REMOVEXATTR = 181 + SYS_LREMOVEXATTR = 182 + SYS_SIGPENDING = 183 + SYS_QUERY_MODULE = 184 + SYS_SETPGID = 185 + SYS_FREMOVEXATTR = 186 + SYS_TKILL = 187 + SYS_EXIT_GROUP = 188 + SYS_UNAME = 189 + SYS_INIT_MODULE = 190 + SYS_PERSONALITY = 191 + SYS_REMAP_FILE_PAGES = 192 + SYS_EPOLL_CREATE = 193 + SYS_EPOLL_CTL = 194 + SYS_EPOLL_WAIT = 195 + SYS_IOPRIO_SET = 196 + SYS_GETPPID = 197 + SYS_SIGACTION = 198 + SYS_SGETMASK = 199 + SYS_SSETMASK = 200 + SYS_SIGSUSPEND = 201 + SYS_OLDLSTAT = 202 + SYS_USELIB = 203 + SYS_READDIR = 204 + SYS_READAHEAD = 205 + SYS_SOCKETCALL = 206 + SYS_SYSLOG = 207 + SYS_LOOKUP_DCOOKIE = 208 + SYS_FADVISE64 = 209 + SYS_FADVISE64_64 = 210 + SYS_TGKILL = 211 + SYS_WAITPID = 212 + SYS_SWAPOFF = 213 + SYS_SYSINFO = 214 + SYS_IPC = 215 + SYS_SIGRETURN = 216 + SYS_CLONE = 217 + SYS_IOPRIO_GET = 218 + SYS_ADJTIMEX = 219 + SYS_SIGPROCMASK = 220 + SYS_CREATE_MODULE = 221 + SYS_DELETE_MODULE = 222 + SYS_GET_KERNEL_SYMS = 223 + SYS_GETPGID = 224 + SYS_BDFLUSH = 225 + SYS_SYSFS = 226 + SYS_AFS_SYSCALL = 227 + SYS_SETFSUID = 228 + SYS_SETFSGID = 229 + SYS__NEWSELECT = 230 + SYS_SPLICE = 232 + SYS_STIME = 233 + SYS_STATFS64 = 234 + SYS_FSTATFS64 = 235 + SYS__LLSEEK = 236 + SYS_MLOCK = 237 + SYS_MUNLOCK = 238 + SYS_MLOCKALL = 239 + SYS_MUNLOCKALL = 240 + SYS_SCHED_SETPARAM = 241 + SYS_SCHED_GETPARAM = 242 + SYS_SCHED_SETSCHEDULER = 243 + SYS_SCHED_GETSCHEDULER = 244 + SYS_SCHED_YIELD = 245 + SYS_SCHED_GET_PRIORITY_MAX = 246 + SYS_SCHED_GET_PRIORITY_MIN = 247 + SYS_SCHED_RR_GET_INTERVAL = 248 + SYS_NANOSLEEP = 249 + SYS_MREMAP = 250 + SYS__SYSCTL = 251 + SYS_GETSID = 252 + SYS_FDATASYNC = 253 + SYS_NFSSERVCTL = 254 + SYS_SYNC_FILE_RANGE = 255 + SYS_CLOCK_SETTIME = 256 + SYS_CLOCK_GETTIME = 257 + SYS_CLOCK_GETRES = 258 + SYS_CLOCK_NANOSLEEP = 259 + SYS_SCHED_GETAFFINITY = 260 + SYS_SCHED_SETAFFINITY = 261 + SYS_TIMER_SETTIME = 262 + SYS_TIMER_GETTIME = 263 + SYS_TIMER_GETOVERRUN = 264 + SYS_TIMER_DELETE = 265 + SYS_TIMER_CREATE = 266 + SYS_IO_SETUP = 268 + SYS_IO_DESTROY = 269 + SYS_IO_SUBMIT = 270 + SYS_IO_CANCEL = 271 + SYS_IO_GETEVENTS = 272 + SYS_MQ_OPEN = 273 + SYS_MQ_UNLINK = 274 + SYS_MQ_TIMEDSEND = 275 + SYS_MQ_TIMEDRECEIVE = 276 + SYS_MQ_NOTIFY = 277 + SYS_MQ_GETSETATTR = 278 + SYS_WAITID = 279 + SYS_TEE = 280 + SYS_ADD_KEY = 281 + SYS_REQUEST_KEY = 282 + SYS_KEYCTL = 283 + SYS_OPENAT = 284 + SYS_MKDIRAT = 285 + SYS_MKNODAT = 286 + SYS_FCHOWNAT = 287 + SYS_FUTIMESAT = 288 + SYS_FSTATAT64 = 289 + SYS_UNLINKAT = 290 + SYS_RENAMEAT = 291 + SYS_LINKAT = 292 + SYS_SYMLINKAT = 293 + SYS_READLINKAT = 294 + SYS_FCHMODAT = 295 + SYS_FACCESSAT = 296 + SYS_PSELECT6 = 297 + SYS_PPOLL = 298 + SYS_UNSHARE = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_GET_ROBUST_LIST = 301 + SYS_MIGRATE_PAGES = 302 + SYS_MBIND = 303 + SYS_GET_MEMPOLICY = 304 + SYS_SET_MEMPOLICY = 305 + SYS_KEXEC_LOAD = 306 + SYS_MOVE_PAGES = 307 + SYS_GETCPU = 308 + SYS_EPOLL_PWAIT = 309 + SYS_UTIMENSAT = 310 + SYS_SIGNALFD = 311 + SYS_TIMERFD_CREATE = 312 + SYS_EVENTFD = 313 + SYS_FALLOCATE = 314 + SYS_TIMERFD_SETTIME = 315 + SYS_TIMERFD_GETTIME = 316 + SYS_SIGNALFD4 = 317 + SYS_EVENTFD2 = 318 + SYS_EPOLL_CREATE1 = 319 + SYS_DUP3 = 320 + SYS_PIPE2 = 321 + SYS_INOTIFY_INIT1 = 322 + SYS_ACCEPT4 = 323 + SYS_PREADV = 324 + SYS_PWRITEV = 325 + SYS_RT_TGSIGQUEUEINFO = 326 + SYS_PERF_EVENT_OPEN = 327 + SYS_RECVMMSG = 328 + SYS_FANOTIFY_INIT = 329 + SYS_FANOTIFY_MARK = 330 + SYS_PRLIMIT64 = 331 + SYS_NAME_TO_HANDLE_AT = 332 + SYS_OPEN_BY_HANDLE_AT = 333 + SYS_CLOCK_ADJTIME = 334 + SYS_SYNCFS = 335 + SYS_SENDMMSG = 336 + SYS_SETNS = 337 + SYS_PROCESS_VM_READV = 338 + SYS_PROCESS_VM_WRITEV = 339 + SYS_KERN_FEATURES = 340 + SYS_KCMP = 341 + SYS_FINIT_MODULE = 342 + SYS_SCHED_SETATTR = 343 + SYS_SCHED_GETATTR = 344 + SYS_RENAMEAT2 = 345 + SYS_SECCOMP = 346 + SYS_GETRANDOM = 347 + SYS_MEMFD_CREATE = 348 + SYS_BPF = 349 + SYS_EXECVEAT = 350 + SYS_MEMBARRIER = 351 + SYS_USERFAULTFD = 352 + SYS_BIND = 353 + SYS_LISTEN = 354 + SYS_SETSOCKOPT = 355 + SYS_MLOCK2 = 356 + SYS_COPY_FILE_RANGE = 357 + SYS_PREADV2 = 358 + SYS_PWRITEV2 = 359 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go new file mode 100644 index 00000000000..f0daa05a9cb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go @@ -0,0 +1,274 @@ +// mksysnum_netbsd.pl +// Code generated by the command above; DO NOT EDIT. + +// +build 386,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go new file mode 100644 index 00000000000..ddb25b94f36 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go @@ -0,0 +1,274 @@ +// mksysnum_netbsd.pl +// Code generated by the command above; DO NOT EDIT. + +// +build amd64,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go new file mode 100644 index 00000000000..315bd63f890 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go @@ -0,0 +1,274 @@ +// mksysnum_netbsd.pl +// Code generated by the command above; DO NOT EDIT. + +// +build arm,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go new file mode 100644 index 00000000000..f93f391d26b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go @@ -0,0 +1,218 @@ +// mksysnum_openbsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, \ + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \ + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \ + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, \ + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, \ + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, \ + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go new file mode 100644 index 00000000000..bc7fa57956a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go @@ -0,0 +1,218 @@ +// mksysnum_openbsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, \ + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \ + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \ + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, \ + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, \ + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, \ + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go new file mode 100644 index 00000000000..be1198d9163 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go @@ -0,0 +1,218 @@ +// mksysnum_openbsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, \ + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \ + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \ + SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, \ + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, \ + SYS_UNVEIL = 114 // { int sys_unveil(const char *path, \ + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); } + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); } + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go new file mode 100644 index 00000000000..cedc9b0f26d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go @@ -0,0 +1,345 @@ +// cgo -godefs types_aix.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc,aix + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 + PathMax = 0x3ff +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type off64 int64 +type off int32 +type Mode_t uint32 + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type StTimespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Timex struct{} + +type Time_t int32 + +type Tms struct{} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Timezone struct { + Minuteswest int32 + Dsttime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type Pid_t int32 + +type _Gid_t uint32 + +type dev_t uint32 + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint32 + Nlink int16 + Flag uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Size int32 + Atim StTimespec + Mtim StTimespec + Ctim StTimespec + Blksize int32 + Blocks int32 + Vfstype int32 + Vfs uint32 + Type uint32 + Gen uint32 + Reserved [9]uint32 +} + +type StatxTimestamp struct{} + +type Statx_t struct{} + +type Dirent struct { + Offset uint32 + Ino uint32 + Reclen uint16 + Namlen uint16 + Name [256]uint8 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [1023]uint8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [1012]uint8 +} + +type _Socklen uint32 + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x404 + SizeofSockaddrUnix = 0x401 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofICMPv6Filter = 0x20 +) + +const ( + SizeofIfMsghdr = 0x10 +) + +type IfMsgHdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Addrlen uint8 + _ [1]byte +} + +type FdSet struct { + Bits [2048]int32 +} + +type Utsname struct { + Sysname [32]byte + Nodename [32]byte + Release [32]byte + Version [32]byte + Machine [32]byte +} + +type Ustat_t struct{} + +type Sigset_t struct { + Losigs uint32 + Hisigs uint32 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x1 + AT_SYMLINK_NOFOLLOW = 0x1 +) + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [16]uint8 +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line uint8 + Cc [8]uint8 + _ [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type PollFd struct { + Fd int32 + Events uint16 + Revents uint16 +} + +const ( + POLLERR = 0x4000 + POLLHUP = 0x2000 + POLLIN = 0x1 + POLLNVAL = 0x8000 + POLLOUT = 0x2 + POLLPRI = 0x4 + POLLRDBAND = 0x20 + POLLRDNORM = 0x10 + POLLWRBAND = 0x40 + POLLWRNORM = 0x2 +) + +type Flock_t struct { + Type int16 + Whence int16 + Sysid uint32 + Pid int32 + Vfs int32 + Start int64 + Len int64 +} + +type Fsid_t struct { + Val [2]uint32 +} +type Fsid64_t struct { + Val [2]uint64 +} + +type Statfs_t struct { + Version int32 + Type int32 + Bsize uint32 + Blocks uint32 + Bfree uint32 + Bavail uint32 + Files uint32 + Ffree uint32 + Fsid Fsid_t + Vfstype int32 + Fsize uint32 + Vfsnumber int32 + Vfsoff int32 + Vfslen int32 + Vfsvers int32 + Fname [32]uint8 + Fpack [32]uint8 + Name_max int32 +} + +const RNDGETENTCNT = 0x80045200 diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go new file mode 100644 index 00000000000..f46482d272e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go @@ -0,0 +1,354 @@ +// cgo -godefs types_aix.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,aix + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x3ff +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type off64 int64 +type off int64 +type Mode_t uint32 + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type StTimespec struct { + Sec int64 + Nsec int32 + _ [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Timex struct{} + +type Time_t int64 + +type Tms struct{} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Timezone struct { + Minuteswest int32 + Dsttime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type Pid_t int32 + +type _Gid_t uint32 + +type dev_t uint64 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink int16 + Flag uint16 + Uid uint32 + Gid uint32 + Rdev uint64 + Ssize int32 + _ [4]byte + Atim StTimespec + Mtim StTimespec + Ctim StTimespec + Blksize int64 + Blocks int64 + Vfstype int32 + Vfs uint32 + Type uint32 + Gen uint32 + Reserved [9]uint32 + Padto_ll uint32 + Size int64 +} + +type StatxTimestamp struct{} + +type Statx_t struct{} + +type Dirent struct { + Offset uint64 + Ino uint64 + Reclen uint16 + Namlen uint16 + Name [256]uint8 + _ [4]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [1023]uint8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [1012]uint8 +} + +type _Socklen uint32 + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen int32 + _ [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x404 + SizeofSockaddrUnix = 0x401 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofICMPv6Filter = 0x20 +) + +const ( + SizeofIfMsghdr = 0x10 +) + +type IfMsgHdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Addrlen uint8 + _ [1]byte +} + +type FdSet struct { + Bits [1024]int64 +} + +type Utsname struct { + Sysname [32]byte + Nodename [32]byte + Release [32]byte + Version [32]byte + Machine [32]byte +} + +type Ustat_t struct{} + +type Sigset_t struct { + Set [4]uint64 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x1 + AT_SYMLINK_NOFOLLOW = 0x1 +) + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [16]uint8 +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line uint8 + Cc [8]uint8 + _ [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type PollFd struct { + Fd int32 + Events uint16 + Revents uint16 +} + +const ( + POLLERR = 0x4000 + POLLHUP = 0x2000 + POLLIN = 0x1 + POLLNVAL = 0x8000 + POLLOUT = 0x2 + POLLPRI = 0x4 + POLLRDBAND = 0x20 + POLLRDNORM = 0x10 + POLLWRBAND = 0x40 + POLLWRNORM = 0x2 +) + +type Flock_t struct { + Type int16 + Whence int16 + Sysid uint32 + Pid int32 + Vfs int32 + Start int64 + Len int64 +} + +type Fsid_t struct { + Val [2]uint32 +} +type Fsid64_t struct { + Val [2]uint64 +} + +type Statfs_t struct { + Version int32 + Type int32 + Bsize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid64_t + Vfstype int32 + _ [4]byte + Fsize uint64 + Vfsnumber int32 + Vfsoff int32 + Vfslen int32 + Vfsvers int32 + Fname [32]uint8 + Fpack [32]uint8 + Name_max int32 + _ [4]byte +} + +const RNDGETENTCNT = 0x80045200 diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go new file mode 100644 index 00000000000..2aeb52a886d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go @@ -0,0 +1,489 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,darwin + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 struct{} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint32 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Contigbytes int64 + Devoffset int64 +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go new file mode 100644 index 00000000000..0d0d9f2ccb7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -0,0 +1,499 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,darwin + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + _ [4]byte + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + _ [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + _ [8]byte + _ [8]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen int32 + _ [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + _ [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + _ [4]byte + Ispeed uint64 + Ospeed uint64 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go new file mode 100644 index 00000000000..04e344b78d8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go @@ -0,0 +1,490 @@ +// NOTE: cgo can't generate struct Stat_t and struct Statfs_t yet +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +// +build arm,darwin + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 [0]byte + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint32 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Contigbytes int64 + Devoffset int64 +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go new file mode 100644 index 00000000000..9fec185c180 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -0,0 +1,499 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,darwin + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + _ [4]byte + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + _ [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + _ [8]byte + _ [8]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + _ [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen int32 + _ [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + _ [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + _ [4]byte + Ispeed uint64 + Ospeed uint64 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go new file mode 100644 index 00000000000..7b34e2e2c68 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go @@ -0,0 +1,469 @@ +// cgo -godefs types_dragonfly.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Ino uint64 + Nlink uint32 + Dev uint32 + Mode uint16 + Padding1 uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare1 int64 + Qspare2 int64 +} + +type Statfs_t struct { + Spare2 int64 + Bsize int64 + Iosize int64 + Blocks int64 + Bfree int64 + Bavail int64 + Files int64 + Ffree int64 + Fsid Fsid + Owner uint32 + Type int32 + Flags int32 + _ [4]byte + Syncwrites int64 + Asyncwrites int64 + Fstypename [16]int8 + Mntonname [80]int8 + Syncreads int64 + Asyncreads int64 + Spares1 int16 + Mntfromname [80]int8 + Spares2 int16 + _ [4]byte + Spare [2]int64 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Namlen uint16 + Type uint8 + Unused1 uint8 + Unused2 uint32 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen int32 + _ [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [16]uint64 +} + +const ( + SizeofIfMsghdr = 0xb0 + SizeofIfData = 0xa0 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + _ [2]byte + Mtu uint64 + Metric uint64 + Link_state uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Oqdrops uint64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Pksent uint64 + Expire uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Recvpipe uint64 + Hopcount uint64 + Mssopt uint16 + Pad uint16 + _ [4]byte + Msl uint64 + Iwmaxsegs uint64 + Iwcapsegs uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + _ [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = 0xfffafdcd + AT_SYMLINK_NOFOLLOW = 0x1 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Utsname struct { + Sysname [32]byte + Nodename [32]byte + Release [32]byte + Version [32]byte + Machine [32]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go new file mode 100644 index 00000000000..28ef5242f88 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -0,0 +1,603 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,freebsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + _statfsVersion = 0x20140518 + _dirblksiz = 0x400 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint16 + _0 int16 + Uid uint32 + Gid uint32 + _1 int32 + Rdev uint64 + Atim_ext int32 + Atim Timespec + Mtim_ext int32 + Mtim Timespec + Ctim_ext int32 + Ctim Timespec + Btim_ext int32 + Birthtim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint64 + Spare [10]uint64 +} + +type stat_freebsd11_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtim Timespec + _ [8]byte +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [1024]int8 + Mntonname [1024]int8 +} + +type statfs_freebsd11_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Pad0 uint8 + Namlen uint16 + Pad1 uint16 + Name [256]int8 +} + +type dirent_freebsd11 struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + _ [32]uint32 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0x60 + sizeofIfData = 0x98 + SizeofIfData = 0x50 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + _ [8]byte + _ [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + Epoch int32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + _ [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go new file mode 100644 index 00000000000..e2d984a48e3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -0,0 +1,602 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + _statfsVersion = 0x20140518 + _dirblksiz = 0x400 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint16 + _0 int16 + Uid uint32 + Gid uint32 + _1 int32 + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Birthtim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint64 + Spare [10]uint64 +} + +type stat_freebsd11_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtim Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [1024]int8 + Mntonname [1024]int8 +} + +type statfs_freebsd11_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + _ [4]byte +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Pad0 uint8 + Namlen uint16 + Pad1 uint16 + Name [256]int8 +} + +type dirent_freebsd11 struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen int32 + _ [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + _ [16]uint64 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0xa8 + sizeofIfData = 0x98 + SizeofIfData = 0x98 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + _ [8]byte + _ [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Expire uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Pksent uint64 + Weight uint64 + Filler [3]uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0x18 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint64 +} + +type BpfProgram struct { + Len uint32 + _ [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + _ [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go new file mode 100644 index 00000000000..9b415aba4d0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -0,0 +1,602 @@ +// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,freebsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + _ [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + _ [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + _statfsVersion = 0x20140518 + _dirblksiz = 0x400 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint16 + _0 int16 + Uid uint32 + Gid uint32 + _1 int32 + Rdev uint64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Birthtim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint64 + Spare [10]uint64 +} + +type stat_freebsd11_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtim Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [1024]int8 + Mntonname [1024]int8 +} + +type statfs_freebsd11_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + _ [4]byte +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Pad0 uint8 + Namlen uint16 + Pad1 uint16 + Name [256]int8 +} + +type dirent_freebsd11 struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + _ [32]uint32 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0x70 + sizeofIfData = 0x98 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + _ [8]byte + _ [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + _ [4]byte + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + _ [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_386.go new file mode 100644 index 00000000000..5f8f03492b1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -0,0 +1,1988 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + _ uint16 + _ [2]byte + _ uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint16 + _ [2]byte + Size int64 + Blksize int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [1]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]int8 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint32 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x20 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]int8 + _ uint32 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x18 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 +} + +const ( + BLKPG = 0x1269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go new file mode 100644 index 00000000000..aa52a439d7b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -0,0 +1,2010 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [3]int64 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + _ [4]byte + Start uint64 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x20 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + _ [4]byte + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go new file mode 100644 index 00000000000..23c8438be1e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -0,0 +1,1978 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + _ uint16 + _ [2]byte + _ uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint16 + _ [6]byte + Size int64 + Blksize int32 + _ [4]byte + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Uregs [18]uint32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]uint8 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]uint8 + Fpack [6]uint8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint32 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x20 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]uint8 + _ uint32 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 + _ [4]byte +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x18 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go new file mode 100644 index 00000000000..d7a993e25f0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -0,0 +1,1989 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint64 + Size int64 + Blksize int32 + _ int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [2]int32 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + _ [4]byte + Start uint64 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x20 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + _ [4]byte + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go new file mode 100644 index 00000000000..b8c3d0a4d68 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -0,0 +1,1983 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]int32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad4 int32 + Blocks int64 + Pad5 [14]int32 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]int8 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint32 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x20 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]int8 + _ uint32 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Frsize int32 + _ [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + _ [4]byte +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x18 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go new file mode 100644 index 00000000000..a6f76149aee --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -0,0 +1,1991 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]uint32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + _ [4]byte + Start uint64 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x20 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + _ [4]byte + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go new file mode 100644 index 00000000000..3dd194176bb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -0,0 +1,1991 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]uint32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + _ [4]byte + Start uint64 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x20 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + _ [4]byte + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go new file mode 100644 index 00000000000..210de76cc1b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -0,0 +1,1983 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + _ [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]int32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad4 int32 + Blocks int64 + Pad5 [14]int32 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + _ [8]int8 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [32]uint32 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint32 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x20 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [122]int8 + _ uint32 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint32 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Frsize int32 + _ [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + _ [4]byte +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x18 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int32 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go new file mode 100644 index 00000000000..b46d54e37a3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -0,0 +1,1999 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 + _ uint64 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]uint8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]uint8 + _ uint64 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + _ [4]byte + Start uint64 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x20 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + _ [4]byte + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go new file mode 100644 index 00000000000..6ee799cef17 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -0,0 +1,1999 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 + _ uint64 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]uint8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]uint8 + _ uint64 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + _ [4]byte + Start uint64 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x20 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + _ [4]byte + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x20001269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go new file mode 100644 index 00000000000..60ae71e62aa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -0,0 +1,2016 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build riscv64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint64 + Size int64 + Blksize int32 + _ int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [2]int32 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]uint8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Pc uint64 + Ra uint64 + Sp uint64 + Gp uint64 + Tp uint64 + T0 uint64 + T1 uint64 + T2 uint64 + S0 uint64 + S1 uint64 + A0 uint64 + A1 uint64 + A2 uint64 + A3 uint64 + A4 uint64 + A5 uint64 + A6 uint64 + A7 uint64 + S2 uint64 + S3 uint64 + S4 uint64 + S5 uint64 + S6 uint64 + S7 uint64 + S8 uint64 + S9 uint64 + S10 uint64 + S11 uint64 + T3 uint64 + T4 uint64 + T5 uint64 + T6 uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]uint8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]uint8 + _ uint64 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + _ [4]byte + Start uint64 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x20 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + _ [4]byte + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go new file mode 100644 index 00000000000..dea88f7bbce --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -0,0 +1,2016 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int64 + Blocks int64 + _ [3]int64 +} + +type StatxTimestamp struct { + Sec int64 + Nsec uint32 + _ int32 +} + +type Statx_t struct { + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + _ [14]uint64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x6 + FADV_NOREUSE = 0x7 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrL2 struct { + Family uint16 + Psm uint16 + Bdaddr [6]uint8 + Cid uint16 + Bdaddr_type uint8 + _ [1]byte +} + +type RawSockaddrRFCOMM struct { + Family uint16 + Bdaddr [6]uint8 + Channel uint8 + _ [1]byte +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddrXDP struct { + Family uint16 + Flags uint16 + Ifindex uint32 + Queue_id uint32 + Shared_umem_fd uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrL2 = 0xe + SizeofSockaddrRFCOMM = 0xa + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofSockaddrXDP = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_INFO_KIND = 0x1 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x33 + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTA_MARK = 0x10 + RTA_MFC_STATS = 0x11 + RTA_VIA = 0x12 + RTA_NEWDST = 0x13 + RTA_PREF = 0x14 + RTA_ENCAP_TYPE = 0x15 + RTA_ENCAP = 0x16 + RTA_EXPIRES = 0x17 + RTA_PAD = 0x18 + RTA_UID = 0x19 + RTA_TTL_PROPAGATE = 0x1a + RTA_IP_PROTO = 0x1b + RTA_SPORT = 0x1c + RTA_DPORT = 0x1d + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Psw PtracePsw + Gprs [16]uint64 + Acrs [16]uint32 + Orig_gpr2 uint64 + Fp_regs PtraceFpregs + Per_info PtracePer + Ieee_instruction_pointer uint64 +} + +type PtracePsw struct { + Mask uint64 + Addr uint64 +} + +type PtraceFpregs struct { + Fpc uint32 + _ [4]byte + Fprs [16]float64 +} + +type PtracePer struct { + _ [0]uint64 + _ [24]byte + _ [8]byte + Starting_addr uint64 + Ending_addr uint64 + Perc_atmid uint16 + _ [6]byte + Address uint64 + Access_id uint8 + _ [7]byte +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + AT_EMPTY_PATH = 0x1000 + AT_FDCWD = -0x64 + AT_NO_AUTOMOUNT = 0x800 + AT_REMOVEDIR = 0x200 + + AT_STATX_SYNC_AS_STAT = 0x0 + AT_STATX_FORCE_SYNC = 0x2000 + AT_STATX_DONT_SYNC = 0x4000 + + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 + + AT_EACCESS = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type CGroupStats struct { + Sleeping uint64 + Running uint64 + Stopped uint64 + Uninterruptible uint64 + Io_wait uint64 +} + +const ( + CGROUPSTATS_CMD_UNSPEC = 0x3 + CGROUPSTATS_CMD_GET = 0x4 + CGROUPSTATS_CMD_NEW = 0x5 + CGROUPSTATS_TYPE_UNSPEC = 0x0 + CGROUPSTATS_TYPE_CGROUP_STATS = 0x1 + CGROUPSTATS_CMD_ATTR_UNSPEC = 0x0 + CGROUPSTATS_CMD_ATTR_FD = 0x1 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) + +type cpuMask uint64 + +const ( + _CPU_SETSIZE = 0x400 + _NCPUBITS = 0x40 +) + +const ( + BDADDR_BREDR = 0x0 + BDADDR_LE_PUBLIC = 0x1 + BDADDR_LE_RANDOM = 0x2 +) + +type PerfEventAttr struct { + Type uint32 + Size uint32 + Config uint64 + Sample uint64 + Sample_type uint64 + Read_format uint64 + Bits uint64 + Wakeup uint32 + Bp_type uint32 + Ext1 uint64 + Ext2 uint64 + Branch_sample_type uint64 + Sample_regs_user uint64 + Sample_stack_user uint32 + Clockid int32 + Sample_regs_intr uint64 + Aux_watermark uint32 + _ uint32 +} + +type PerfEventMmapPage struct { + Version uint32 + Compat_version uint32 + Lock uint32 + Index uint32 + Offset int64 + Time_enabled uint64 + Time_running uint64 + Capabilities uint64 + Pmc_width uint16 + Time_shift uint16 + Time_mult uint32 + Time_offset uint64 + Time_zero uint64 + Size uint32 + _ [948]uint8 + Data_head uint64 + Data_tail uint64 + Data_offset uint64 + Data_size uint64 + Aux_head uint64 + Aux_tail uint64 + Aux_offset uint64 + Aux_size uint64 +} + +const ( + PerfBitDisabled uint64 = CBitFieldMaskBit0 + PerfBitInherit = CBitFieldMaskBit1 + PerfBitPinned = CBitFieldMaskBit2 + PerfBitExclusive = CBitFieldMaskBit3 + PerfBitExcludeUser = CBitFieldMaskBit4 + PerfBitExcludeKernel = CBitFieldMaskBit5 + PerfBitExcludeHv = CBitFieldMaskBit6 + PerfBitExcludeIdle = CBitFieldMaskBit7 + PerfBitMmap = CBitFieldMaskBit8 + PerfBitComm = CBitFieldMaskBit9 + PerfBitFreq = CBitFieldMaskBit10 + PerfBitInheritStat = CBitFieldMaskBit11 + PerfBitEnableOnExec = CBitFieldMaskBit12 + PerfBitTask = CBitFieldMaskBit13 + PerfBitWatermark = CBitFieldMaskBit14 + PerfBitPreciseIPBit1 = CBitFieldMaskBit15 + PerfBitPreciseIPBit2 = CBitFieldMaskBit16 + PerfBitMmapData = CBitFieldMaskBit17 + PerfBitSampleIDAll = CBitFieldMaskBit18 + PerfBitExcludeHost = CBitFieldMaskBit19 + PerfBitExcludeGuest = CBitFieldMaskBit20 + PerfBitExcludeCallchainKernel = CBitFieldMaskBit21 + PerfBitExcludeCallchainUser = CBitFieldMaskBit22 + PerfBitMmap2 = CBitFieldMaskBit23 + PerfBitCommExec = CBitFieldMaskBit24 + PerfBitUseClockID = CBitFieldMaskBit25 + PerfBitContextSwitch = CBitFieldMaskBit26 +) + +const ( + PERF_TYPE_HARDWARE = 0x0 + PERF_TYPE_SOFTWARE = 0x1 + PERF_TYPE_TRACEPOINT = 0x2 + PERF_TYPE_HW_CACHE = 0x3 + PERF_TYPE_RAW = 0x4 + PERF_TYPE_BREAKPOINT = 0x5 + + PERF_COUNT_HW_CPU_CYCLES = 0x0 + PERF_COUNT_HW_INSTRUCTIONS = 0x1 + PERF_COUNT_HW_CACHE_REFERENCES = 0x2 + PERF_COUNT_HW_CACHE_MISSES = 0x3 + PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 0x4 + PERF_COUNT_HW_BRANCH_MISSES = 0x5 + PERF_COUNT_HW_BUS_CYCLES = 0x6 + PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7 + PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 0x8 + PERF_COUNT_HW_REF_CPU_CYCLES = 0x9 + + PERF_COUNT_HW_CACHE_L1D = 0x0 + PERF_COUNT_HW_CACHE_L1I = 0x1 + PERF_COUNT_HW_CACHE_LL = 0x2 + PERF_COUNT_HW_CACHE_DTLB = 0x3 + PERF_COUNT_HW_CACHE_ITLB = 0x4 + PERF_COUNT_HW_CACHE_BPU = 0x5 + PERF_COUNT_HW_CACHE_NODE = 0x6 + + PERF_COUNT_HW_CACHE_OP_READ = 0x0 + PERF_COUNT_HW_CACHE_OP_WRITE = 0x1 + PERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2 + + PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0 + PERF_COUNT_HW_CACHE_RESULT_MISS = 0x1 + + PERF_COUNT_SW_CPU_CLOCK = 0x0 + PERF_COUNT_SW_TASK_CLOCK = 0x1 + PERF_COUNT_SW_PAGE_FAULTS = 0x2 + PERF_COUNT_SW_CONTEXT_SWITCHES = 0x3 + PERF_COUNT_SW_CPU_MIGRATIONS = 0x4 + PERF_COUNT_SW_PAGE_FAULTS_MIN = 0x5 + PERF_COUNT_SW_PAGE_FAULTS_MAJ = 0x6 + PERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7 + PERF_COUNT_SW_EMULATION_FAULTS = 0x8 + PERF_COUNT_SW_DUMMY = 0x9 + + PERF_SAMPLE_IP = 0x1 + PERF_SAMPLE_TID = 0x2 + PERF_SAMPLE_TIME = 0x4 + PERF_SAMPLE_ADDR = 0x8 + PERF_SAMPLE_READ = 0x10 + PERF_SAMPLE_CALLCHAIN = 0x20 + PERF_SAMPLE_ID = 0x40 + PERF_SAMPLE_CPU = 0x80 + PERF_SAMPLE_PERIOD = 0x100 + PERF_SAMPLE_STREAM_ID = 0x200 + PERF_SAMPLE_RAW = 0x400 + PERF_SAMPLE_BRANCH_STACK = 0x800 + + PERF_SAMPLE_BRANCH_USER = 0x1 + PERF_SAMPLE_BRANCH_KERNEL = 0x2 + PERF_SAMPLE_BRANCH_HV = 0x4 + PERF_SAMPLE_BRANCH_ANY = 0x8 + PERF_SAMPLE_BRANCH_ANY_CALL = 0x10 + PERF_SAMPLE_BRANCH_ANY_RETURN = 0x20 + PERF_SAMPLE_BRANCH_IND_CALL = 0x40 + + PERF_FORMAT_TOTAL_TIME_ENABLED = 0x1 + PERF_FORMAT_TOTAL_TIME_RUNNING = 0x2 + PERF_FORMAT_ID = 0x4 + PERF_FORMAT_GROUP = 0x8 + + PERF_RECORD_MMAP = 0x1 + PERF_RECORD_LOST = 0x2 + PERF_RECORD_COMM = 0x3 + PERF_RECORD_EXIT = 0x4 + PERF_RECORD_THROTTLE = 0x5 + PERF_RECORD_UNTHROTTLE = 0x6 + PERF_RECORD_FORK = 0x7 + PERF_RECORD_READ = 0x8 + PERF_RECORD_SAMPLE = 0x9 + + PERF_CONTEXT_HV = -0x20 + PERF_CONTEXT_KERNEL = -0x80 + PERF_CONTEXT_USER = -0x200 + + PERF_CONTEXT_GUEST = -0x800 + PERF_CONTEXT_GUEST_KERNEL = -0x880 + PERF_CONTEXT_GUEST_USER = -0xa00 + + PERF_FLAG_FD_NO_GROUP = 0x1 + PERF_FLAG_FD_OUTPUT = 0x2 + PERF_FLAG_PID_CGROUP = 0x4 +) + +const ( + CBitFieldMaskBit0 = 0x8000000000000000 + CBitFieldMaskBit1 = 0x4000000000000000 + CBitFieldMaskBit2 = 0x2000000000000000 + CBitFieldMaskBit3 = 0x1000000000000000 + CBitFieldMaskBit4 = 0x800000000000000 + CBitFieldMaskBit5 = 0x400000000000000 + CBitFieldMaskBit6 = 0x200000000000000 + CBitFieldMaskBit7 = 0x100000000000000 + CBitFieldMaskBit8 = 0x80000000000000 + CBitFieldMaskBit9 = 0x40000000000000 + CBitFieldMaskBit10 = 0x20000000000000 + CBitFieldMaskBit11 = 0x10000000000000 + CBitFieldMaskBit12 = 0x8000000000000 + CBitFieldMaskBit13 = 0x4000000000000 + CBitFieldMaskBit14 = 0x2000000000000 + CBitFieldMaskBit15 = 0x1000000000000 + CBitFieldMaskBit16 = 0x800000000000 + CBitFieldMaskBit17 = 0x400000000000 + CBitFieldMaskBit18 = 0x200000000000 + CBitFieldMaskBit19 = 0x100000000000 + CBitFieldMaskBit20 = 0x80000000000 + CBitFieldMaskBit21 = 0x40000000000 + CBitFieldMaskBit22 = 0x20000000000 + CBitFieldMaskBit23 = 0x10000000000 + CBitFieldMaskBit24 = 0x8000000000 + CBitFieldMaskBit25 = 0x4000000000 + CBitFieldMaskBit26 = 0x2000000000 + CBitFieldMaskBit27 = 0x1000000000 + CBitFieldMaskBit28 = 0x800000000 + CBitFieldMaskBit29 = 0x400000000 + CBitFieldMaskBit30 = 0x200000000 + CBitFieldMaskBit31 = 0x100000000 + CBitFieldMaskBit32 = 0x80000000 + CBitFieldMaskBit33 = 0x40000000 + CBitFieldMaskBit34 = 0x20000000 + CBitFieldMaskBit35 = 0x10000000 + CBitFieldMaskBit36 = 0x8000000 + CBitFieldMaskBit37 = 0x4000000 + CBitFieldMaskBit38 = 0x2000000 + CBitFieldMaskBit39 = 0x1000000 + CBitFieldMaskBit40 = 0x800000 + CBitFieldMaskBit41 = 0x400000 + CBitFieldMaskBit42 = 0x200000 + CBitFieldMaskBit43 = 0x100000 + CBitFieldMaskBit44 = 0x80000 + CBitFieldMaskBit45 = 0x40000 + CBitFieldMaskBit46 = 0x20000 + CBitFieldMaskBit47 = 0x10000 + CBitFieldMaskBit48 = 0x8000 + CBitFieldMaskBit49 = 0x4000 + CBitFieldMaskBit50 = 0x2000 + CBitFieldMaskBit51 = 0x1000 + CBitFieldMaskBit52 = 0x800 + CBitFieldMaskBit53 = 0x400 + CBitFieldMaskBit54 = 0x200 + CBitFieldMaskBit55 = 0x100 + CBitFieldMaskBit56 = 0x80 + CBitFieldMaskBit57 = 0x40 + CBitFieldMaskBit58 = 0x20 + CBitFieldMaskBit59 = 0x10 + CBitFieldMaskBit60 = 0x8 + CBitFieldMaskBit61 = 0x4 + CBitFieldMaskBit62 = 0x2 + CBitFieldMaskBit63 = 0x1 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type TCPMD5Sig struct { + Addr SockaddrStorage + Flags uint8 + Prefixlen uint8 + Keylen uint16 + _ uint32 + Key [80]uint8 +} + +type HDDriveCmdHdr struct { + Command uint8 + Number uint8 + Feature uint8 + Count uint8 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + _ [4]byte + Start uint64 +} + +type HDDriveID struct { + Config uint16 + Cyls uint16 + Reserved2 uint16 + Heads uint16 + Track_bytes uint16 + Sector_bytes uint16 + Sectors uint16 + Vendor0 uint16 + Vendor1 uint16 + Vendor2 uint16 + Serial_no [20]uint8 + Buf_type uint16 + Buf_size uint16 + Ecc_bytes uint16 + Fw_rev [8]uint8 + Model [40]uint8 + Max_multsect uint8 + Vendor3 uint8 + Dword_io uint16 + Vendor4 uint8 + Capability uint8 + Reserved50 uint16 + Vendor5 uint8 + TPIO uint8 + Vendor6 uint8 + TDMA uint8 + Field_valid uint16 + Cur_cyls uint16 + Cur_heads uint16 + Cur_sectors uint16 + Cur_capacity0 uint16 + Cur_capacity1 uint16 + Multsect uint8 + Multsect_valid uint8 + Lba_capacity uint32 + Dma_1word uint16 + Dma_mword uint16 + Eide_pio_modes uint16 + Eide_dma_min uint16 + Eide_dma_time uint16 + Eide_pio uint16 + Eide_pio_iordy uint16 + Words69_70 [2]uint16 + Words71_74 [4]uint16 + Queue_depth uint16 + Words76_79 [4]uint16 + Major_rev_num uint16 + Minor_rev_num uint16 + Command_set_1 uint16 + Command_set_2 uint16 + Cfsse uint16 + Cfs_enable_1 uint16 + Cfs_enable_2 uint16 + Csf_default uint16 + Dma_ultra uint16 + Trseuc uint16 + TrsEuc uint16 + CurAPMvalues uint16 + Mprc uint16 + Hw_config uint16 + Acoustic uint16 + Msrqs uint16 + Sxfert uint16 + Sal uint16 + Spg uint32 + Lba_capacity_2 uint64 + Words104_125 [22]uint16 + Last_lun uint16 + Word127 uint16 + Dlf uint16 + Csfo uint16 + Words130_155 [26]uint16 + Word156 uint16 + Words157_159 [3]uint16 + Cfa_power uint16 + Words161_175 [15]uint16 + Words176_205 [30]uint16 + Words206_254 [49]uint16 + Integrity_word uint16 +} + +type Statfs_t struct { + Type uint32 + Bsize uint32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen uint32 + Frsize uint32 + Flags uint32 + Spare [4]uint32 + _ [4]byte +} + +const ( + ST_MANDLOCK = 0x40 + ST_NOATIME = 0x400 + ST_NODEV = 0x4 + ST_NODIRATIME = 0x800 + ST_NOEXEC = 0x8 + ST_NOSUID = 0x2 + ST_RDONLY = 0x1 + ST_RELATIME = 0x1000 + ST_SYNCHRONOUS = 0x10 +) + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +type Tpacket2Hdr struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Nsec uint32 + Vlan_tci uint16 + Vlan_tpid uint16 + _ [4]uint8 +} + +type Tpacket3Hdr struct { + Next_offset uint32 + Sec uint32 + Nsec uint32 + Snaplen uint32 + Len uint32 + Status uint32 + Mac uint16 + Net uint16 + Hv1 TpacketHdrVariant1 + _ [8]uint8 +} + +type TpacketHdrVariant1 struct { + Rxhash uint32 + Vlan_tci uint32 + Vlan_tpid uint16 + _ uint16 +} + +type TpacketBlockDesc struct { + Version uint32 + To_priv uint32 + Hdr [40]byte +} + +type TpacketReq struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 +} + +type TpacketReq3 struct { + Block_size uint32 + Block_nr uint32 + Frame_size uint32 + Frame_nr uint32 + Retire_blk_tov uint32 + Sizeof_priv uint32 + Feature_req_word uint32 +} + +type TpacketStats struct { + Packets uint32 + Drops uint32 +} + +type TpacketStatsV3 struct { + Packets uint32 + Drops uint32 + Freeze_q_cnt uint32 +} + +type TpacketAuxdata struct { + Status uint32 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Vlan_tci uint16 + Vlan_tpid uint16 +} + +const ( + TPACKET_V1 = 0x0 + TPACKET_V2 = 0x1 + TPACKET_V3 = 0x2 +) + +const ( + SizeofTpacketHdr = 0x20 + SizeofTpacket2Hdr = 0x20 + SizeofTpacket3Hdr = 0x30 +) + +const ( + NF_INET_PRE_ROUTING = 0x0 + NF_INET_LOCAL_IN = 0x1 + NF_INET_FORWARD = 0x2 + NF_INET_LOCAL_OUT = 0x3 + NF_INET_POST_ROUTING = 0x4 + NF_INET_NUMHOOKS = 0x5 +) + +const ( + NF_NETDEV_INGRESS = 0x0 + NF_NETDEV_NUMHOOKS = 0x1 +) + +const ( + NFPROTO_UNSPEC = 0x0 + NFPROTO_INET = 0x1 + NFPROTO_IPV4 = 0x2 + NFPROTO_ARP = 0x3 + NFPROTO_NETDEV = 0x5 + NFPROTO_BRIDGE = 0x7 + NFPROTO_IPV6 = 0xa + NFPROTO_DECNET = 0xc + NFPROTO_NUMPROTO = 0xd +) + +type Nfgenmsg struct { + Nfgen_family uint8 + Version uint8 + Res_id uint16 +} + +const ( + NFNL_BATCH_UNSPEC = 0x0 + NFNL_BATCH_GENID = 0x1 +) + +const ( + NFT_REG_VERDICT = 0x0 + NFT_REG_1 = 0x1 + NFT_REG_2 = 0x2 + NFT_REG_3 = 0x3 + NFT_REG_4 = 0x4 + NFT_REG32_00 = 0x8 + NFT_REG32_01 = 0x9 + NFT_REG32_02 = 0xa + NFT_REG32_03 = 0xb + NFT_REG32_04 = 0xc + NFT_REG32_05 = 0xd + NFT_REG32_06 = 0xe + NFT_REG32_07 = 0xf + NFT_REG32_08 = 0x10 + NFT_REG32_09 = 0x11 + NFT_REG32_10 = 0x12 + NFT_REG32_11 = 0x13 + NFT_REG32_12 = 0x14 + NFT_REG32_13 = 0x15 + NFT_REG32_14 = 0x16 + NFT_REG32_15 = 0x17 + NFT_CONTINUE = -0x1 + NFT_BREAK = -0x2 + NFT_JUMP = -0x3 + NFT_GOTO = -0x4 + NFT_RETURN = -0x5 + NFT_MSG_NEWTABLE = 0x0 + NFT_MSG_GETTABLE = 0x1 + NFT_MSG_DELTABLE = 0x2 + NFT_MSG_NEWCHAIN = 0x3 + NFT_MSG_GETCHAIN = 0x4 + NFT_MSG_DELCHAIN = 0x5 + NFT_MSG_NEWRULE = 0x6 + NFT_MSG_GETRULE = 0x7 + NFT_MSG_DELRULE = 0x8 + NFT_MSG_NEWSET = 0x9 + NFT_MSG_GETSET = 0xa + NFT_MSG_DELSET = 0xb + NFT_MSG_NEWSETELEM = 0xc + NFT_MSG_GETSETELEM = 0xd + NFT_MSG_DELSETELEM = 0xe + NFT_MSG_NEWGEN = 0xf + NFT_MSG_GETGEN = 0x10 + NFT_MSG_TRACE = 0x11 + NFT_MSG_NEWOBJ = 0x12 + NFT_MSG_GETOBJ = 0x13 + NFT_MSG_DELOBJ = 0x14 + NFT_MSG_GETOBJ_RESET = 0x15 + NFT_MSG_MAX = 0x19 + NFTA_LIST_UNPEC = 0x0 + NFTA_LIST_ELEM = 0x1 + NFTA_HOOK_UNSPEC = 0x0 + NFTA_HOOK_HOOKNUM = 0x1 + NFTA_HOOK_PRIORITY = 0x2 + NFTA_HOOK_DEV = 0x3 + NFT_TABLE_F_DORMANT = 0x1 + NFTA_TABLE_UNSPEC = 0x0 + NFTA_TABLE_NAME = 0x1 + NFTA_TABLE_FLAGS = 0x2 + NFTA_TABLE_USE = 0x3 + NFTA_CHAIN_UNSPEC = 0x0 + NFTA_CHAIN_TABLE = 0x1 + NFTA_CHAIN_HANDLE = 0x2 + NFTA_CHAIN_NAME = 0x3 + NFTA_CHAIN_HOOK = 0x4 + NFTA_CHAIN_POLICY = 0x5 + NFTA_CHAIN_USE = 0x6 + NFTA_CHAIN_TYPE = 0x7 + NFTA_CHAIN_COUNTERS = 0x8 + NFTA_CHAIN_PAD = 0x9 + NFTA_RULE_UNSPEC = 0x0 + NFTA_RULE_TABLE = 0x1 + NFTA_RULE_CHAIN = 0x2 + NFTA_RULE_HANDLE = 0x3 + NFTA_RULE_EXPRESSIONS = 0x4 + NFTA_RULE_COMPAT = 0x5 + NFTA_RULE_POSITION = 0x6 + NFTA_RULE_USERDATA = 0x7 + NFTA_RULE_PAD = 0x8 + NFTA_RULE_ID = 0x9 + NFT_RULE_COMPAT_F_INV = 0x2 + NFT_RULE_COMPAT_F_MASK = 0x2 + NFTA_RULE_COMPAT_UNSPEC = 0x0 + NFTA_RULE_COMPAT_PROTO = 0x1 + NFTA_RULE_COMPAT_FLAGS = 0x2 + NFT_SET_ANONYMOUS = 0x1 + NFT_SET_CONSTANT = 0x2 + NFT_SET_INTERVAL = 0x4 + NFT_SET_MAP = 0x8 + NFT_SET_TIMEOUT = 0x10 + NFT_SET_EVAL = 0x20 + NFT_SET_OBJECT = 0x40 + NFT_SET_POL_PERFORMANCE = 0x0 + NFT_SET_POL_MEMORY = 0x1 + NFTA_SET_DESC_UNSPEC = 0x0 + NFTA_SET_DESC_SIZE = 0x1 + NFTA_SET_UNSPEC = 0x0 + NFTA_SET_TABLE = 0x1 + NFTA_SET_NAME = 0x2 + NFTA_SET_FLAGS = 0x3 + NFTA_SET_KEY_TYPE = 0x4 + NFTA_SET_KEY_LEN = 0x5 + NFTA_SET_DATA_TYPE = 0x6 + NFTA_SET_DATA_LEN = 0x7 + NFTA_SET_POLICY = 0x8 + NFTA_SET_DESC = 0x9 + NFTA_SET_ID = 0xa + NFTA_SET_TIMEOUT = 0xb + NFTA_SET_GC_INTERVAL = 0xc + NFTA_SET_USERDATA = 0xd + NFTA_SET_PAD = 0xe + NFTA_SET_OBJ_TYPE = 0xf + NFT_SET_ELEM_INTERVAL_END = 0x1 + NFTA_SET_ELEM_UNSPEC = 0x0 + NFTA_SET_ELEM_KEY = 0x1 + NFTA_SET_ELEM_DATA = 0x2 + NFTA_SET_ELEM_FLAGS = 0x3 + NFTA_SET_ELEM_TIMEOUT = 0x4 + NFTA_SET_ELEM_EXPIRATION = 0x5 + NFTA_SET_ELEM_USERDATA = 0x6 + NFTA_SET_ELEM_EXPR = 0x7 + NFTA_SET_ELEM_PAD = 0x8 + NFTA_SET_ELEM_OBJREF = 0x9 + NFTA_SET_ELEM_LIST_UNSPEC = 0x0 + NFTA_SET_ELEM_LIST_TABLE = 0x1 + NFTA_SET_ELEM_LIST_SET = 0x2 + NFTA_SET_ELEM_LIST_ELEMENTS = 0x3 + NFTA_SET_ELEM_LIST_SET_ID = 0x4 + NFT_DATA_VALUE = 0x0 + NFT_DATA_VERDICT = 0xffffff00 + NFTA_DATA_UNSPEC = 0x0 + NFTA_DATA_VALUE = 0x1 + NFTA_DATA_VERDICT = 0x2 + NFTA_VERDICT_UNSPEC = 0x0 + NFTA_VERDICT_CODE = 0x1 + NFTA_VERDICT_CHAIN = 0x2 + NFTA_EXPR_UNSPEC = 0x0 + NFTA_EXPR_NAME = 0x1 + NFTA_EXPR_DATA = 0x2 + NFTA_IMMEDIATE_UNSPEC = 0x0 + NFTA_IMMEDIATE_DREG = 0x1 + NFTA_IMMEDIATE_DATA = 0x2 + NFTA_BITWISE_UNSPEC = 0x0 + NFTA_BITWISE_SREG = 0x1 + NFTA_BITWISE_DREG = 0x2 + NFTA_BITWISE_LEN = 0x3 + NFTA_BITWISE_MASK = 0x4 + NFTA_BITWISE_XOR = 0x5 + NFT_BYTEORDER_NTOH = 0x0 + NFT_BYTEORDER_HTON = 0x1 + NFTA_BYTEORDER_UNSPEC = 0x0 + NFTA_BYTEORDER_SREG = 0x1 + NFTA_BYTEORDER_DREG = 0x2 + NFTA_BYTEORDER_OP = 0x3 + NFTA_BYTEORDER_LEN = 0x4 + NFTA_BYTEORDER_SIZE = 0x5 + NFT_CMP_EQ = 0x0 + NFT_CMP_NEQ = 0x1 + NFT_CMP_LT = 0x2 + NFT_CMP_LTE = 0x3 + NFT_CMP_GT = 0x4 + NFT_CMP_GTE = 0x5 + NFTA_CMP_UNSPEC = 0x0 + NFTA_CMP_SREG = 0x1 + NFTA_CMP_OP = 0x2 + NFTA_CMP_DATA = 0x3 + NFT_RANGE_EQ = 0x0 + NFT_RANGE_NEQ = 0x1 + NFTA_RANGE_UNSPEC = 0x0 + NFTA_RANGE_SREG = 0x1 + NFTA_RANGE_OP = 0x2 + NFTA_RANGE_FROM_DATA = 0x3 + NFTA_RANGE_TO_DATA = 0x4 + NFT_LOOKUP_F_INV = 0x1 + NFTA_LOOKUP_UNSPEC = 0x0 + NFTA_LOOKUP_SET = 0x1 + NFTA_LOOKUP_SREG = 0x2 + NFTA_LOOKUP_DREG = 0x3 + NFTA_LOOKUP_SET_ID = 0x4 + NFTA_LOOKUP_FLAGS = 0x5 + NFT_DYNSET_OP_ADD = 0x0 + NFT_DYNSET_OP_UPDATE = 0x1 + NFT_DYNSET_F_INV = 0x1 + NFTA_DYNSET_UNSPEC = 0x0 + NFTA_DYNSET_SET_NAME = 0x1 + NFTA_DYNSET_SET_ID = 0x2 + NFTA_DYNSET_OP = 0x3 + NFTA_DYNSET_SREG_KEY = 0x4 + NFTA_DYNSET_SREG_DATA = 0x5 + NFTA_DYNSET_TIMEOUT = 0x6 + NFTA_DYNSET_EXPR = 0x7 + NFTA_DYNSET_PAD = 0x8 + NFTA_DYNSET_FLAGS = 0x9 + NFT_PAYLOAD_LL_HEADER = 0x0 + NFT_PAYLOAD_NETWORK_HEADER = 0x1 + NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_CSUM_NONE = 0x0 + NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 + NFTA_PAYLOAD_UNSPEC = 0x0 + NFTA_PAYLOAD_DREG = 0x1 + NFTA_PAYLOAD_BASE = 0x2 + NFTA_PAYLOAD_OFFSET = 0x3 + NFTA_PAYLOAD_LEN = 0x4 + NFTA_PAYLOAD_SREG = 0x5 + NFTA_PAYLOAD_CSUM_TYPE = 0x6 + NFTA_PAYLOAD_CSUM_OFFSET = 0x7 + NFTA_PAYLOAD_CSUM_FLAGS = 0x8 + NFT_EXTHDR_F_PRESENT = 0x1 + NFT_EXTHDR_OP_IPV6 = 0x0 + NFT_EXTHDR_OP_TCPOPT = 0x1 + NFTA_EXTHDR_UNSPEC = 0x0 + NFTA_EXTHDR_DREG = 0x1 + NFTA_EXTHDR_TYPE = 0x2 + NFTA_EXTHDR_OFFSET = 0x3 + NFTA_EXTHDR_LEN = 0x4 + NFTA_EXTHDR_FLAGS = 0x5 + NFTA_EXTHDR_OP = 0x6 + NFTA_EXTHDR_SREG = 0x7 + NFT_META_LEN = 0x0 + NFT_META_PROTOCOL = 0x1 + NFT_META_PRIORITY = 0x2 + NFT_META_MARK = 0x3 + NFT_META_IIF = 0x4 + NFT_META_OIF = 0x5 + NFT_META_IIFNAME = 0x6 + NFT_META_OIFNAME = 0x7 + NFT_META_IIFTYPE = 0x8 + NFT_META_OIFTYPE = 0x9 + NFT_META_SKUID = 0xa + NFT_META_SKGID = 0xb + NFT_META_NFTRACE = 0xc + NFT_META_RTCLASSID = 0xd + NFT_META_SECMARK = 0xe + NFT_META_NFPROTO = 0xf + NFT_META_L4PROTO = 0x10 + NFT_META_BRI_IIFNAME = 0x11 + NFT_META_BRI_OIFNAME = 0x12 + NFT_META_PKTTYPE = 0x13 + NFT_META_CPU = 0x14 + NFT_META_IIFGROUP = 0x15 + NFT_META_OIFGROUP = 0x16 + NFT_META_CGROUP = 0x17 + NFT_META_PRANDOM = 0x18 + NFT_RT_CLASSID = 0x0 + NFT_RT_NEXTHOP4 = 0x1 + NFT_RT_NEXTHOP6 = 0x2 + NFT_RT_TCPMSS = 0x3 + NFT_HASH_JENKINS = 0x0 + NFT_HASH_SYM = 0x1 + NFTA_HASH_UNSPEC = 0x0 + NFTA_HASH_SREG = 0x1 + NFTA_HASH_DREG = 0x2 + NFTA_HASH_LEN = 0x3 + NFTA_HASH_MODULUS = 0x4 + NFTA_HASH_SEED = 0x5 + NFTA_HASH_OFFSET = 0x6 + NFTA_HASH_TYPE = 0x7 + NFTA_META_UNSPEC = 0x0 + NFTA_META_DREG = 0x1 + NFTA_META_KEY = 0x2 + NFTA_META_SREG = 0x3 + NFTA_RT_UNSPEC = 0x0 + NFTA_RT_DREG = 0x1 + NFTA_RT_KEY = 0x2 + NFT_CT_STATE = 0x0 + NFT_CT_DIRECTION = 0x1 + NFT_CT_STATUS = 0x2 + NFT_CT_MARK = 0x3 + NFT_CT_SECMARK = 0x4 + NFT_CT_EXPIRATION = 0x5 + NFT_CT_HELPER = 0x6 + NFT_CT_L3PROTOCOL = 0x7 + NFT_CT_SRC = 0x8 + NFT_CT_DST = 0x9 + NFT_CT_PROTOCOL = 0xa + NFT_CT_PROTO_SRC = 0xb + NFT_CT_PROTO_DST = 0xc + NFT_CT_LABELS = 0xd + NFT_CT_PKTS = 0xe + NFT_CT_BYTES = 0xf + NFT_CT_AVGPKT = 0x10 + NFT_CT_ZONE = 0x11 + NFT_CT_EVENTMASK = 0x12 + NFTA_CT_UNSPEC = 0x0 + NFTA_CT_DREG = 0x1 + NFTA_CT_KEY = 0x2 + NFTA_CT_DIRECTION = 0x3 + NFTA_CT_SREG = 0x4 + NFT_LIMIT_PKTS = 0x0 + NFT_LIMIT_PKT_BYTES = 0x1 + NFT_LIMIT_F_INV = 0x1 + NFTA_LIMIT_UNSPEC = 0x0 + NFTA_LIMIT_RATE = 0x1 + NFTA_LIMIT_UNIT = 0x2 + NFTA_LIMIT_BURST = 0x3 + NFTA_LIMIT_TYPE = 0x4 + NFTA_LIMIT_FLAGS = 0x5 + NFTA_LIMIT_PAD = 0x6 + NFTA_COUNTER_UNSPEC = 0x0 + NFTA_COUNTER_BYTES = 0x1 + NFTA_COUNTER_PACKETS = 0x2 + NFTA_COUNTER_PAD = 0x3 + NFTA_LOG_UNSPEC = 0x0 + NFTA_LOG_GROUP = 0x1 + NFTA_LOG_PREFIX = 0x2 + NFTA_LOG_SNAPLEN = 0x3 + NFTA_LOG_QTHRESHOLD = 0x4 + NFTA_LOG_LEVEL = 0x5 + NFTA_LOG_FLAGS = 0x6 + NFTA_QUEUE_UNSPEC = 0x0 + NFTA_QUEUE_NUM = 0x1 + NFTA_QUEUE_TOTAL = 0x2 + NFTA_QUEUE_FLAGS = 0x3 + NFTA_QUEUE_SREG_QNUM = 0x4 + NFT_QUOTA_F_INV = 0x1 + NFT_QUOTA_F_DEPLETED = 0x2 + NFTA_QUOTA_UNSPEC = 0x0 + NFTA_QUOTA_BYTES = 0x1 + NFTA_QUOTA_FLAGS = 0x2 + NFTA_QUOTA_PAD = 0x3 + NFTA_QUOTA_CONSUMED = 0x4 + NFT_REJECT_ICMP_UNREACH = 0x0 + NFT_REJECT_TCP_RST = 0x1 + NFT_REJECT_ICMPX_UNREACH = 0x2 + NFT_REJECT_ICMPX_NO_ROUTE = 0x0 + NFT_REJECT_ICMPX_PORT_UNREACH = 0x1 + NFT_REJECT_ICMPX_HOST_UNREACH = 0x2 + NFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3 + NFTA_REJECT_UNSPEC = 0x0 + NFTA_REJECT_TYPE = 0x1 + NFTA_REJECT_ICMP_CODE = 0x2 + NFT_NAT_SNAT = 0x0 + NFT_NAT_DNAT = 0x1 + NFTA_NAT_UNSPEC = 0x0 + NFTA_NAT_TYPE = 0x1 + NFTA_NAT_FAMILY = 0x2 + NFTA_NAT_REG_ADDR_MIN = 0x3 + NFTA_NAT_REG_ADDR_MAX = 0x4 + NFTA_NAT_REG_PROTO_MIN = 0x5 + NFTA_NAT_REG_PROTO_MAX = 0x6 + NFTA_NAT_FLAGS = 0x7 + NFTA_MASQ_UNSPEC = 0x0 + NFTA_MASQ_FLAGS = 0x1 + NFTA_MASQ_REG_PROTO_MIN = 0x2 + NFTA_MASQ_REG_PROTO_MAX = 0x3 + NFTA_REDIR_UNSPEC = 0x0 + NFTA_REDIR_REG_PROTO_MIN = 0x1 + NFTA_REDIR_REG_PROTO_MAX = 0x2 + NFTA_REDIR_FLAGS = 0x3 + NFTA_DUP_UNSPEC = 0x0 + NFTA_DUP_SREG_ADDR = 0x1 + NFTA_DUP_SREG_DEV = 0x2 + NFTA_FWD_UNSPEC = 0x0 + NFTA_FWD_SREG_DEV = 0x1 + NFTA_OBJREF_UNSPEC = 0x0 + NFTA_OBJREF_IMM_TYPE = 0x1 + NFTA_OBJREF_IMM_NAME = 0x2 + NFTA_OBJREF_SET_SREG = 0x3 + NFTA_OBJREF_SET_NAME = 0x4 + NFTA_OBJREF_SET_ID = 0x5 + NFTA_GEN_UNSPEC = 0x0 + NFTA_GEN_ID = 0x1 + NFTA_GEN_PROC_PID = 0x2 + NFTA_GEN_PROC_NAME = 0x3 + NFTA_FIB_UNSPEC = 0x0 + NFTA_FIB_DREG = 0x1 + NFTA_FIB_RESULT = 0x2 + NFTA_FIB_FLAGS = 0x3 + NFT_FIB_RESULT_UNSPEC = 0x0 + NFT_FIB_RESULT_OIF = 0x1 + NFT_FIB_RESULT_OIFNAME = 0x2 + NFT_FIB_RESULT_ADDRTYPE = 0x3 + NFTA_FIB_F_SADDR = 0x1 + NFTA_FIB_F_DADDR = 0x2 + NFTA_FIB_F_MARK = 0x4 + NFTA_FIB_F_IIF = 0x8 + NFTA_FIB_F_OIF = 0x10 + NFTA_FIB_F_PRESENT = 0x20 + NFTA_CT_HELPER_UNSPEC = 0x0 + NFTA_CT_HELPER_NAME = 0x1 + NFTA_CT_HELPER_L3PROTO = 0x2 + NFTA_CT_HELPER_L4PROTO = 0x3 + NFTA_OBJ_UNSPEC = 0x0 + NFTA_OBJ_TABLE = 0x1 + NFTA_OBJ_NAME = 0x2 + NFTA_OBJ_TYPE = 0x3 + NFTA_OBJ_DATA = 0x4 + NFTA_OBJ_USE = 0x5 + NFTA_TRACE_UNSPEC = 0x0 + NFTA_TRACE_TABLE = 0x1 + NFTA_TRACE_CHAIN = 0x2 + NFTA_TRACE_RULE_HANDLE = 0x3 + NFTA_TRACE_TYPE = 0x4 + NFTA_TRACE_VERDICT = 0x5 + NFTA_TRACE_ID = 0x6 + NFTA_TRACE_LL_HEADER = 0x7 + NFTA_TRACE_NETWORK_HEADER = 0x8 + NFTA_TRACE_TRANSPORT_HEADER = 0x9 + NFTA_TRACE_IIF = 0xa + NFTA_TRACE_IIFTYPE = 0xb + NFTA_TRACE_OIF = 0xc + NFTA_TRACE_OIFTYPE = 0xd + NFTA_TRACE_MARK = 0xe + NFTA_TRACE_NFPROTO = 0xf + NFTA_TRACE_POLICY = 0x10 + NFTA_TRACE_PAD = 0x11 + NFT_TRACETYPE_UNSPEC = 0x0 + NFT_TRACETYPE_POLICY = 0x1 + NFT_TRACETYPE_RETURN = 0x2 + NFT_TRACETYPE_RULE = 0x3 + NFTA_NG_UNSPEC = 0x0 + NFTA_NG_DREG = 0x1 + NFTA_NG_MODULUS = 0x2 + NFTA_NG_TYPE = 0x3 + NFTA_NG_OFFSET = 0x4 + NFT_NG_INCREMENTAL = 0x0 + NFT_NG_RANDOM = 0x1 +) + +type RTCTime struct { + Sec int32 + Min int32 + Hour int32 + Mday int32 + Mon int32 + Year int32 + Wday int32 + Yday int32 + Isdst int32 +} + +type RTCWkAlrm struct { + Enabled uint8 + Pending uint8 + _ [2]byte + Time RTCTime +} + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgIoctlArg struct { + Op int32 + Flags int32 + Datalen int32 + _ [4]byte + Data *byte +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 + BLKPG_ADD_PARTITION = 0x1 + BLKPG_DEL_PARTITION = 0x2 + BLKPG_RESIZE_PARTITION = 0x3 +) + +const ( + NETNSA_NONE = 0x0 + NETNSA_NSID = 0x1 + NETNSA_PID = 0x2 + NETNSA_FD = 0x3 +) + +type XDPRingOffset struct { + Producer uint64 + Consumer uint64 + Desc uint64 +} + +type XDPMmapOffsets struct { + Rx XDPRingOffset + Tx XDPRingOffset + Fr XDPRingOffset + Cr XDPRingOffset +} + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 +} + +type XDPStatistics struct { + Rx_dropped uint64 + Rx_invalid_descs uint64 + Tx_invalid_descs uint64 +} + +type XDPDesc struct { + Addr uint64 + Len uint32 + Options uint32 +} + +const ( + NCSI_CMD_UNSPEC = 0x0 + NCSI_CMD_PKG_INFO = 0x1 + NCSI_CMD_SET_INTERFACE = 0x2 + NCSI_CMD_CLEAR_INTERFACE = 0x3 + NCSI_ATTR_UNSPEC = 0x0 + NCSI_ATTR_IFINDEX = 0x1 + NCSI_ATTR_PACKAGE_LIST = 0x2 + NCSI_ATTR_PACKAGE_ID = 0x3 + NCSI_ATTR_CHANNEL_ID = 0x4 + NCSI_PKG_ATTR_UNSPEC = 0x0 + NCSI_PKG_ATTR = 0x1 + NCSI_PKG_ATTR_ID = 0x2 + NCSI_PKG_ATTR_FORCED = 0x3 + NCSI_PKG_ATTR_CHANNEL_LIST = 0x4 + NCSI_CHANNEL_ATTR_UNSPEC = 0x0 + NCSI_CHANNEL_ATTR = 0x1 + NCSI_CHANNEL_ATTR_ID = 0x2 + NCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3 + NCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4 + NCSI_CHANNEL_ATTR_VERSION_STR = 0x5 + NCSI_CHANNEL_ATTR_LINK_STATE = 0x6 + NCSI_CHANNEL_ATTR_ACTIVE = 0x7 + NCSI_CHANNEL_ATTR_FORCED = 0x8 + NCSI_CHANNEL_ATTR_VLAN_LIST = 0x9 + NCSI_CHANNEL_ATTR_VLAN_ID = 0xa +) + +const ( + SOF_TIMESTAMPING_TX_HARDWARE = 0x1 + SOF_TIMESTAMPING_TX_SOFTWARE = 0x2 + SOF_TIMESTAMPING_RX_HARDWARE = 0x4 + SOF_TIMESTAMPING_RX_SOFTWARE = 0x8 + SOF_TIMESTAMPING_SOFTWARE = 0x10 + SOF_TIMESTAMPING_SYS_HARDWARE = 0x20 + SOF_TIMESTAMPING_RAW_HARDWARE = 0x40 + SOF_TIMESTAMPING_OPT_ID = 0x80 + SOF_TIMESTAMPING_TX_SCHED = 0x100 + SOF_TIMESTAMPING_TX_ACK = 0x200 + SOF_TIMESTAMPING_OPT_CMSG = 0x400 + SOF_TIMESTAMPING_OPT_TSONLY = 0x800 + SOF_TIMESTAMPING_OPT_STATS = 0x1000 + SOF_TIMESTAMPING_OPT_PKTINFO = 0x2000 + SOF_TIMESTAMPING_OPT_TX_SWHW = 0x4000 + + SOF_TIMESTAMPING_LAST = 0x4000 + SOF_TIMESTAMPING_MASK = 0x7fff +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go new file mode 100644 index 00000000000..1fc7f7dea9c --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -0,0 +1,690 @@ +// +build sparc64,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go | go run mkpost.go + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [6]byte + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [6]byte + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + X__glibc_reserved4 uint64 + X__glibc_reserved5 uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + X__glibc_reserved int16 + Pad_cgo_1 [2]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_NUM_VF = 0x15 + IFLA_VFINFO_LIST = 0x16 + IFLA_STATS64 = 0x17 + IFLA_VF_PORTS = 0x18 + IFLA_PORT_SELF = 0x19 + IFLA_AF_SPEC = 0x1a + IFLA_GROUP = 0x1b + IFLA_NET_NS_FD = 0x1c + IFLA_EXT_MASK = 0x1d + IFLA_PROMISCUITY = 0x1e + IFLA_NUM_TX_QUEUES = 0x1f + IFLA_NUM_RX_QUEUES = 0x20 + IFLA_CARRIER = 0x21 + IFLA_PHYS_PORT_ID = 0x22 + IFLA_CARRIER_CHANGES = 0x23 + IFLA_PHYS_SWITCH_ID = 0x24 + IFLA_LINK_NETNSID = 0x25 + IFLA_PHYS_PORT_NAME = 0x26 + IFLA_PROTO_DOWN = 0x27 + IFLA_GSO_MAX_SEGS = 0x28 + IFLA_GSO_MAX_SIZE = 0x29 + IFLA_PAD = 0x2a + IFLA_XDP = 0x2b + IFLA_EVENT = 0x2c + IFLA_NEW_NETNSID = 0x2d + IFLA_IF_NETNSID = 0x2e + IFLA_MAX = 0x2e + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [16]uint64 + Tstate uint64 + Tpc uint64 + Tnpc uint64 + Y uint32 + Magic uint32 +} + +type ptracePsw struct { +} + +type ptraceFpregs struct { +} + +type ptracePer struct { +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x800 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go new file mode 100644 index 00000000000..1fdc5fd211d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go @@ -0,0 +1,458 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,netbsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x84 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData + Pad_cgo_1 [4]byte +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go new file mode 100644 index 00000000000..711f780675a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go @@ -0,0 +1,465 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,netbsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Pad_cgo_0 [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Pad_cgo_1 [4]byte + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + Pad_cgo_2 [4]byte +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter uint32 + Flags uint32 + Fflags uint32 + Pad_cgo_0 [4]byte + Data int64 + Udata int64 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfTimeval struct { + Sec int64 + Usec int64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go new file mode 100644 index 00000000000..fa1a16bae13 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -0,0 +1,463 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,netbsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + Pad_cgo_0 [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Pad_cgo_0 [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Pad_cgo_1 [4]byte + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + Pad_cgo_2 [4]byte +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +const ( + PathMax = 0x400 +) + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 + Pad_cgo_0 [4]byte +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofClockinfo = 0x14 + +type Clockinfo struct { + Hz int32 + Tick int32 + Tickadj int32 + Stathz int32 + Profhz int32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go new file mode 100644 index 00000000000..8b37d83992b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -0,0 +1,560 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,openbsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + Pad_cgo_0 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xec + SizeofIfData = 0xd4 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval + Mclpool [7]Mclpool +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct { + Grown int32 + Alive uint16 + Hwm uint16 + Cwm uint16 + Lwm uint16 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Anonpages int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Nanonneeded int32 + Nfreeanon int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Obsolete_swapins int32 + Obsolete_swapouts int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Zeroaborts int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Pdreanon int32 + Pdrevnode int32 + Pdrevtext int32 + Fpswtch int32 + Kmapent int32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go new file mode 100644 index 00000000000..6efea463559 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -0,0 +1,560 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,openbsd + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + _ [4]byte + _ Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + _ [4]byte + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + _ [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + _ [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint32 + _ [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xa8 + SizeofIfData = 0x90 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Rdomain uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Capabilities uint32 + _ [4]byte + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + _ [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Anonpages int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Nanonneeded int32 + Nfreeanon int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Obsolete_swapins int32 + Obsolete_swapouts int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Zeroaborts int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Pdreanon int32 + Pdrevnode int32 + Pdrevtext int32 + Fpswtch int32 + Kmapent int32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go new file mode 100644 index 00000000000..87a637e3f14 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -0,0 +1,553 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,openbsd + +package unix + +const ( + SizeofPtr = 0x4 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x4 + SizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]uint8 + F_mntonname [90]uint8 + F_mntfromname [90]uint8 + F_mntfromspec [90]uint8 + Pad_cgo_0 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]uint8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + PathMax = 0x400 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x80 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]uint8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sigset_t uint32 + +type Utsname struct { + Sysname [256]byte + Nodename [256]byte + Release [256]byte + Version [256]byte + Machine [256]byte +} + +const SizeofUvmexp = 0x158 + +type Uvmexp struct { + Pagesize int32 + Pagemask int32 + Pageshift int32 + Npages int32 + Free int32 + Active int32 + Inactive int32 + Paging int32 + Wired int32 + Zeropages int32 + Reserve_pagedaemon int32 + Reserve_kernel int32 + Anonpages int32 + Vnodepages int32 + Vtextpages int32 + Freemin int32 + Freetarg int32 + Inactarg int32 + Wiredmax int32 + Anonmin int32 + Vtextmin int32 + Vnodemin int32 + Anonminpct int32 + Vtextminpct int32 + Vnodeminpct int32 + Nswapdev int32 + Swpages int32 + Swpginuse int32 + Swpgonly int32 + Nswget int32 + Nanon int32 + Nanonneeded int32 + Nfreeanon int32 + Faults int32 + Traps int32 + Intrs int32 + Swtch int32 + Softs int32 + Syscalls int32 + Pageins int32 + Obsolete_swapins int32 + Obsolete_swapouts int32 + Pgswapin int32 + Pgswapout int32 + Forks int32 + Forks_ppwait int32 + Forks_sharevm int32 + Pga_zerohit int32 + Pga_zeromiss int32 + Zeroaborts int32 + Fltnoram int32 + Fltnoanon int32 + Fltnoamap int32 + Fltpgwait int32 + Fltpgrele int32 + Fltrelck int32 + Fltrelckok int32 + Fltanget int32 + Fltanretry int32 + Fltamcopy int32 + Fltnamap int32 + Fltnomap int32 + Fltlget int32 + Fltget int32 + Flt_anon int32 + Flt_acow int32 + Flt_obj int32 + Flt_prcopy int32 + Flt_przero int32 + Pdwoke int32 + Pdrevs int32 + Pdswout int32 + Pdfreed int32 + Pdscans int32 + Pdanscan int32 + Pdobscan int32 + Pdreact int32 + Pdbusy int32 + Pdpageouts int32 + Pdpending int32 + Pddeact int32 + Pdreanon int32 + Pdrevnode int32 + Pdrevtext int32 + Fpswtch int32 + Kmapent int32 +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go new file mode 100644 index 00000000000..8531a190f26 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -0,0 +1,442 @@ +// cgo -godefs types_solaris.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,solaris + +package unix + +const ( + SizeofPtr = 0x8 + SizeofShort = 0x2 + SizeofInt = 0x4 + SizeofLong = 0x8 + SizeofLongLong = 0x8 + PathMax = 0x400 + MaxHostNameLen = 0x100 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + _ [4]byte + Blocks int64 + Fstype [16]int8 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Sysid int32 + Pid int32 + Pad [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Name [1]int8 + _ [5]byte +} + +type _Fsblkcnt_t uint64 + +type Statvfs_t struct { + Bsize uint64 + Frsize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Favail uint64 + Fsid uint64 + Basetype [16]int8 + Flag uint64 + Namemax uint64 + Fstr [32]int8 +} + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [236]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *int8 + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen int32 + _ [4]byte + Accrights *int8 + Accrightslen int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + X__icmp6_filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x20 + SizeofSockaddrAny = 0xfc + SizeofSockaddrUnix = 0x6e + SizeofSockaddrDatalink = 0xfc + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x24 + SizeofICMPv6Filter = 0x20 +) + +type FdSet struct { + Bits [1024]int64 +} + +type Utsname struct { + Sysname [257]byte + Nodename [257]byte + Release [257]byte + Version [257]byte + Machine [257]byte +} + +type Ustat_t struct { + Tfree int64 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +const ( + AT_FDCWD = 0xffd19553 + AT_SYMLINK_NOFOLLOW = 0x1000 + AT_SYMLINK_FOLLOW = 0x2000 + AT_REMOVEDIR = 0x1 + AT_EACCESS = 0x4 +) + +const ( + SizeofIfMsghdr = 0x54 + SizeofIfData = 0x44 + SizeofIfaMsghdr = 0x14 + SizeofRtMsghdr = 0x4c + SizeofRtMetrics = 0x28 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + _ [1]byte + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Lastchange Timeval32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + _ [2]byte + Metric int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + _ [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + _ [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + _ [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + _ [1]byte +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line int8 + Cc [8]uint8 + _ [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/vendor.json b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/vendor.json new file mode 100644 index 00000000000..618e27844e0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/mdns/vendor/vendor.json @@ -0,0 +1,17 @@ +{ + "comment": "", + "ignore": "test", + "package": [ + {"path":"github.com/hashicorp/mdns","checksumSHA1":"UiYueihlBaZoI/l5ITXALLdYvio=","revision":"06dd1a31b32c42d4d6c2cf8dbce70597d1118f54","revisionTime":"2019-03-27T18:46:37Z","version":"v1.0.1","versionExact":"v1.0.1"}, + {"path":"github.com/miekg/dns","checksumSHA1":"Q8FCOsiSqWVVY6ZYYBTH3gl/8ps=","revision":"915ca3d5ffd945235828a097c917311a9d86ebb4","revisionTime":"2018-10-20T15:55:55Z","version":"v1.0.14","versionExact":"v1.0.14"}, + {"path":"golang.org/x/crypto/ed25519","checksumSHA1":"2LpxYGSf068307b7bhAuVjvzLLc=","revision":"45a5f77698d342a8c2ef8423abdf0ba6880b008a","revisionTime":"2018-10-29T01:35:03Z"}, + {"path":"golang.org/x/crypto/ed25519/internal/edwards25519","checksumSHA1":"0JTAFXPkankmWcZGQJGScLDiaN8=","revision":"45a5f77698d342a8c2ef8423abdf0ba6880b008a","revisionTime":"2018-10-29T01:35:03Z"}, + {"path":"golang.org/x/net/bpf","checksumSHA1":"Pa6ivEz5fid3ECb1hptNbC+USfA=","revision":"9b4f9f5ad5197c79fd623a3638e70d8b26cef344","revisionTime":"2018-10-23T11:20:58Z"}, + {"path":"golang.org/x/net/internal/iana","checksumSHA1":"8oJoT8rfokzpkJ19eNhRs2JgRxI=","revision":"9b4f9f5ad5197c79fd623a3638e70d8b26cef344","revisionTime":"2018-10-23T11:20:58Z"}, + {"path":"golang.org/x/net/internal/socket","checksumSHA1":"YsXlbexuTtUXHyhSv927ILOkf6A=","revision":"9b4f9f5ad5197c79fd623a3638e70d8b26cef344","revisionTime":"2018-10-23T11:20:58Z"}, + {"path":"golang.org/x/net/ipv4","checksumSHA1":"K4XNY0c60IPBpv5sO6aiCuB8o/0=","revision":"9b4f9f5ad5197c79fd623a3638e70d8b26cef344","revisionTime":"2018-10-23T11:20:58Z"}, + {"path":"golang.org/x/net/ipv6","checksumSHA1":"hDszlYGI8m9puPsEIDr59ccTiF8=","revision":"9b4f9f5ad5197c79fd623a3638e70d8b26cef344","revisionTime":"2018-10-23T11:20:58Z"}, + {"path":"golang.org/x/sys/unix","checksumSHA1":"jj/eU15RpGLEwyueuTzsS0r5ONw=","revision":"95b1ffbd15a57cc5abb3f04402b9e8ec0016a52c","revisionTime":"2018-10-26T08:28:59Z"} + ], + "rootPath": "github.com/hashicorp/go-discover/provider/mdns" +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/os/os_discover.go b/vendor/github.com/hashicorp/go-discover/provider/os/os_discover.go index 10ba38096de..27800357914 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/os/os_discover.go +++ b/vendor/github.com/hashicorp/go-discover/provider/os/os_discover.go @@ -18,7 +18,13 @@ import ( "github.com/gophercloud/gophercloud/pagination" ) -type Provider struct{} +type Provider struct { + userAgent string +} + +func (p *Provider) SetUserAgent(s string) { + p.userAgent = s +} func (p *Provider) Help() string { return `Openstack: @@ -67,6 +73,10 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error return nil, err } + if p.userAgent != "" { + client.UserAgent.Prepend(p.userAgent) + } + pager := servers.List(client, ListOpts{ListOpts: servers.ListOpts{Status: "ACTIVE"}, ProjectID: projectID}) if err := pager.Err; err != nil { return nil, fmt.Errorf("discover-os: ListServers failed: %s", err) @@ -118,16 +128,16 @@ func newClient(args map[string]string, l *log.Logger) (*gophercloud.ServiceClien } projectID := argsOrEnv(args, "project_id", "OS_PROJECT_ID") insecure := argsOrEnv(args, "insecure", "OS_INSECURE") + domain_id := argsOrEnv(args, "domain_id", "OS_DOMAIN_ID") + domain_name := argsOrEnv(args, "domain_name", "OS_DOMAIN_NAME") if url == "" { return nil, fmt.Errorf("discover-os: Auth url must be provided") } ao := gophercloud.AuthOptions{ - // "domain_id": OS_DOMAIN_ID - DomainID: "", - // "domain_name": OS_DOMAIN_NAME - DomainName: "", + DomainID: domain_id, + DomainName: domain_name, IdentityEndpoint: url, Username: username, Password: password, diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/packet_discover.go b/vendor/github.com/hashicorp/go-discover/provider/packet/packet_discover.go new file mode 100644 index 00000000000..285697057f8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/packet_discover.go @@ -0,0 +1,147 @@ +package packet + +import ( + "fmt" + "log" + "os" + "strings" + + "github.com/packethost/packngo" +) + +const baseURL = "https://api.packet.net/" + +// Provider struct +type Provider struct { + userAgent string +} + +// SetUserAgent setter +func (p *Provider) SetUserAgent(s string) { + p.userAgent = s +} + +// Help function +func (p *Provider) Help() string { + return `Packet: + provider: "packet" + project: UUID of packet project. Required + auth_token: Packet authentication token. Required + url: Packet REST URL. Optional + address_type: "private_v4", "public_v4" or "public_v6". Defaults to "private_v4". Optional + facility: Filter for specific facility (Examples: "ewr1,ams1") + tag: Filter by tag (Examples: "tag1,tag2") + + Variables can also be provided by environmental variables: + export PACKET_PROJECT for project + export PACKET_URL for url + export PACKET_AUTH_TOKEN for auth_token +` +} + +// Addrs function +func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error) { + authToken := argsOrEnv(args, "auth_token", "PACKET_AUTH_TOKEN") + projectID := argsOrEnv(args, "project", "PACKET_PROJECT") + packetURL := argsOrEnv(args, "url", "PACKET_URL") + addressType := args["address_type"] + packetFacilities := args["facility"] + packetTags := args["tag"] + + if addressType != "private_v4" && addressType != "public_v4" && addressType != "public_v6" { + l.Printf("[INFO] discover-packet: Address type %s is not supported. Valid values are {private_v4,public_v4,public_v6}. Falling back to 'private_v4'", addressType) + addressType = "private_v4" + } + + includeFacilities := includeArgs(packetFacilities) + includeTags := includeArgs(packetTags) + + c, err := client(p.userAgent, packetURL, authToken) + if err != nil { + return nil, fmt.Errorf("discover-packet: Initializing Packet client failed: %s", err) + } + + var devices []packngo.Device + + if projectID == "" { + return nil, fmt.Errorf("discover-packet: 'project' parameter must be provider") + } + + devices, _, err = c.Devices.List(projectID, nil) + if err != nil { + return nil, fmt.Errorf("discover-packet: Fetching Packet devices failed: %s", err) + } + + var addrs []string + for _, d := range devices { + + if len(includeFacilities) > 0 && !Include(includeFacilities, d.Facility.Code) { + continue + } + + if len(includeTags) > 0 && !Any(d.Tags, func(v string) bool { return Include(includeTags, v) }) { + continue + } + + addressFamily := 4 + if addressType == "public_v6" { + addressFamily = 6 + } + for _, n := range d.Network { + + if (n.Public == (addressType == "public_v4" || addressType == "public_v6")) && n.AddressFamily == addressFamily { + addrs = append(addrs, n.Address) + } + } + } + return addrs, nil +} + +func client(useragent, url, token string) (*packngo.Client, error) { + if url == "" { + url = baseURL + } + + return packngo.NewClientWithBaseURL(useragent, token, nil, url) +} +func argsOrEnv(args map[string]string, key, env string) string { + if value := args[key]; value != "" { + return value + } + return os.Getenv(env) +} + +func includeArgs(s string) []string { + var include []string + for _, localstring := range strings.Split(s, ",") { + if len(localstring) > 0 { + include = append(include, localstring) + } + } + return include +} + +// Index returns the first index of the target string t, or -1 if no match is found. +func Index(vs []string, t string) int { + for i, v := range vs { + if v == t { + return i + } + } + return -1 +} + +// Include returns true if the target string t is in the slice. +func Include(vs []string, t string) bool { + return Index(vs, t) >= 0 +} + +//Any returns true if one of the strings in the slice satisfies the predicate f. +func Any(vs []string, f func(string) bool) bool { + for _, v := range vs { + if f(v) { + return true + } + } + return false +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/CHANGELOG.md b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/CHANGELOG.md new file mode 100644 index 00000000000..34e5d311404 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/CHANGELOG.md @@ -0,0 +1,54 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). +This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +This release contains a bunch of fixes to the package api after some more real +world use. There a few breaks in backwards compatibility, but we are tying to +minimize them and move towards a 1.0 release. + +### Added +- "acceptance" tests which run against production api (will incur charges) +- HardwareReservation to Device +- RootPassword to Device +- Spot market support +- Management and Manageable fields to discern between Elastic IPs and device unique IP +- Support for Volume attachments to Device and Volume +- Support for ProvisionEvents +- DoRequest sugar to Client +- Add ListProject function to the SSHKeys interface +- Operations for switching between Network Modes, aka "L2 support" + Support for Organization, Payment Method and Billing address resources + +### Fixed +- User.Emails json tag is fixed to match api response +- Single error object api response is now handled correctly + +### Changed +- IPService was split to DeviceIPService and ProjectIPService +- Renamed Device.IPXEScriptUrl -> Device.IPXEScriptURL +- Renamed DeviceCreateRequest.HostName -> DeviceCreateRequest.Hostname +- Renamed DeviceCreateRequest.IPXEScriptUrl -> DeviceCreateRequest.IPXEScriptURL +- Renamed DeviceUpdateRequest.HostName -> DeviceUpdateRequest.Hostname +- Renamed DeviceUpdateRequest.IPXEScriptUrl -> DeviceUpdateRequest.IPXEScriptURL +- Sync with packet.net api change to /projects/{id}/ips which no longer returns + the address in CIDR form +- Removed package level exported functions that should have never existed + +## [0.1.0] - 2017-08-17 + +Initial release, supports most of the api for interacting with: + +- Plans +- Users +- Emails +- SSH Keys +- Devices +- Projects +- Facilities +- Operating Systems +- IP Reservations +- Volumes diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/LICENSE.txt b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/LICENSE.txt new file mode 100644 index 00000000000..57c50110ca2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/LICENSE.txt @@ -0,0 +1,56 @@ +Copyright (c) 2014 The packngo AUTHORS. All rights reserved. + +MIT License + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +====================== +Portions of the client are based on code at: +https://github.com/google/go-github/ and +https://github.com/digitalocean/godo + +Copyright (c) 2013 The go-github AUTHORS. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/README.md b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/README.md new file mode 100644 index 00000000000..a63faf5a9e3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/README.md @@ -0,0 +1,72 @@ +# packngo +Packet Go Api Client + +![](https://www.packet.net/media/images/xeiw-packettwitterprofilew.png) + + +Installation +------------ + +`go get github.com/packethost/packngo` + +Usage +----- + +To authenticate to the Packet API, you must have your API token exported in env var `PACKET_API_TOKEN`. + +This code snippet initializes Packet API client, and lists your Projects: + +```go +package main + +import ( + "log" + + "github.com/packethost/packngo" +) + +func main() { + c, err := packngo.NewClient() + if err != nil { + log.Fatal(err) + } + + ps, _, err := c.Projects.List(nil) + if err != nil { + log.Fatal(err) + } + for _, p := range ps { + log.Println(p.ID, p.Name) + } +} + +``` + +This lib is used by the official [terraform-provider-packet](https://github.com/terraform-providers/terraform-provider-packet). + +You can also learn a lot from the `*_test.go` sources. Almost all out tests touch the Packet API, so you can see how auth, querying and POSTing works. For example [devices_test.go](devices_test.go). + + + +Acceptance Tests +---------------- + +If you want to run tests against the actual Packet API, you must set envvar `PACKET_TEST_ACTUAL_API` to non-empty string for the `go test`. The device tests wait for the device creation, so it's best to run a few in parallel. + +To run a particular test, you can do + +``` +$ PACKNGO_TEST_ACTUAL_API=1 go test -v -run=TestAccDeviceBasic +``` + +If you want to see HTTP requests, set the `PACKNGO_DEBUG` env var to non-empty string, for example: + +``` +$ PACKNGO_DEBUG=1 PACKNGO_TEST_ACTUAL_API=1 go test -v -run=TestAccVolumeUpdate +``` + + +Committing +---------- + +Before committing, it's a good idea to run `gofmt -w *.go`. ([gofmt](https://golang.org/cmd/gofmt/)) diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/billing_address.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/billing_address.go new file mode 100644 index 00000000000..93255b32290 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/billing_address.go @@ -0,0 +1,7 @@ +package packngo + +type BillingAddress struct { + StreetAddress string `json:"street_address,omitempty"` + PostalCode string `json:"postal_code,omitempty"` + CountryCode string `json:"country_code_alpha2,omitempty"` +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/devices.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/devices.go new file mode 100644 index 00000000000..b41bcf070aa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/devices.go @@ -0,0 +1,257 @@ +package packngo + +import ( + "fmt" + "strings" +) + +const deviceBasePath = "/devices" + +// DeviceService interface defines available device methods +type DeviceService interface { + List(ProjectID string, listOpt *ListOptions) ([]Device, *Response, error) + Get(string) (*Device, *Response, error) + GetExtra(deviceID string, includes, excludes []string) (*Device, *Response, error) + Create(*DeviceCreateRequest) (*Device, *Response, error) + Update(string, *DeviceUpdateRequest) (*Device, *Response, error) + Delete(string) (*Response, error) + Reboot(string) (*Response, error) + PowerOff(string) (*Response, error) + PowerOn(string) (*Response, error) + Lock(string) (*Response, error) + Unlock(string) (*Response, error) +} + +type devicesRoot struct { + Devices []Device `json:"devices"` + Meta meta `json:"meta"` +} + +// Device represents a Packet device +type Device struct { + ID string `json:"id"` + Href string `json:"href,omitempty"` + Hostname string `json:"hostname,omitempty"` + State string `json:"state,omitempty"` + Created string `json:"created_at,omitempty"` + Updated string `json:"updated_at,omitempty"` + Locked bool `json:"locked,omitempty"` + BillingCycle string `json:"billing_cycle,omitempty"` + Storage map[string]interface{} `json:"storage,omitempty"` + Tags []string `json:"tags,omitempty"` + Network []*IPAddressAssignment `json:"ip_addresses"` + Volumes []*Volume `json:"volumes"` + OS *OS `json:"operating_system,omitempty"` + Plan *Plan `json:"plan,omitempty"` + Facility *Facility `json:"facility,omitempty"` + Project *Project `json:"project,omitempty"` + ProvisionEvents []*ProvisionEvent `json:"provisioning_events,omitempty"` + ProvisionPer float32 `json:"provisioning_percentage,omitempty"` + UserData string `json:"userdata,omitempty"` + RootPassword string `json:"root_password,omitempty"` + IPXEScriptURL string `json:"ipxe_script_url,omitempty"` + AlwaysPXE bool `json:"always_pxe,omitempty"` + HardwareReservation Href `json:"hardware_reservation,omitempty"` + SpotInstance bool `json:"spot_instance,omitempty"` + SpotPriceMax float64 `json:"spot_price_max,omitempty"` + TerminationTime *Timestamp `json:"termination_time,omitempty"` + NetworkPorts []Port `json:"network_ports,omitempty"` + CustomData map[string]interface{} `json:"customdata,omitempty"` +} + +type ProvisionEvent struct { + ID string `json:"id"` + Body string `json:"body"` + CreatedAt *Timestamp `json:"created_at,omitempty"` + Href string `json:"href"` + Interpolated string `json:"interpolated"` + Relationships []Href `json:"relationships"` + State string `json:"state"` + Type string `json:"type"` +} + +func (d Device) String() string { + return Stringify(d) +} + +// DeviceCreateRequest type used to create a Packet device +type DeviceCreateRequest struct { + Hostname string `json:"hostname"` + Plan string `json:"plan"` + Facility string `json:"facility"` + OS string `json:"operating_system"` + BillingCycle string `json:"billing_cycle"` + ProjectID string `json:"project_id"` + UserData string `json:"userdata"` + Storage string `json:"storage,omitempty"` + Tags []string `json:"tags"` + IPXEScriptURL string `json:"ipxe_script_url,omitempty"` + PublicIPv4SubnetSize int `json:"public_ipv4_subnet_size,omitempty"` + AlwaysPXE bool `json:"always_pxe,omitempty"` + HardwareReservationID string `json:"hardware_reservation_id,omitempty"` + SpotInstance bool `json:"spot_instance,omitempty"` + SpotPriceMax float64 `json:"spot_price_max,omitempty,string"` + TerminationTime *Timestamp `json:"termination_time,omitempty"` + CustomData string `json:"customdata,omitempty"` +} + +// DeviceUpdateRequest type used to update a Packet device +type DeviceUpdateRequest struct { + Hostname *string `json:"hostname,omitempty"` + Description *string `json:"description,omitempty"` + UserData *string `json:"userdata,omitempty"` + Locked *bool `json:"locked,omitempty"` + Tags *[]string `json:"tags,omitempty"` + AlwaysPXE *bool `json:"always_pxe,omitempty"` + IPXEScriptURL *string `json:"ipxe_script_url,omitempty"` + CustomData *string `json:"customdata,omitempty"` +} + +func (d DeviceCreateRequest) String() string { + return Stringify(d) +} + +// DeviceActionRequest type used to execute actions on devices +type DeviceActionRequest struct { + Type string `json:"type"` +} + +func (d DeviceActionRequest) String() string { + return Stringify(d) +} + +// DeviceServiceOp implements DeviceService +type DeviceServiceOp struct { + client *Client +} + +// List returns devices on a project +func (s *DeviceServiceOp) List(projectID string, listOpt *ListOptions) (devices []Device, resp *Response, err error) { + params := "include=facility" + if listOpt != nil { + params = listOpt.createURL() + } + path := fmt.Sprintf("%s/%s%s?%s", projectBasePath, projectID, deviceBasePath, params) + + for { + subset := new(devicesRoot) + + resp, err = s.client.DoRequest("GET", path, nil, subset) + if err != nil { + return nil, resp, err + } + + devices = append(devices, subset.Devices...) + + if subset.Meta.Next != nil && (listOpt == nil || listOpt.Page == 0) { + path = subset.Meta.Next.Href + if params != "" { + path = fmt.Sprintf("%s&%s", path, params) + } + continue + } + + return + } +} + +// Get returns a device by id +func (s *DeviceServiceOp) Get(deviceID string) (*Device, *Response, error) { + return s.GetExtra(deviceID, []string{"facility"}, nil) +} + +// GetExtra returns a device by id. Specifying either includes/excludes provides more or less desired +// detailed information about resources which would otherwise be represented with an href link +func (s *DeviceServiceOp) GetExtra(deviceID string, includes, excludes []string) (*Device, *Response, error) { + path := fmt.Sprintf("%s/%s", deviceBasePath, deviceID) + if includes != nil { + path += fmt.Sprintf("?include=%s", strings.Join(includes, ",")) + } else if excludes != nil { + path += fmt.Sprintf("?exclude=%s", strings.Join(excludes, ",")) + } + device := new(Device) + + resp, err := s.client.DoRequest("GET", path, nil, device) + if err != nil { + return nil, resp, err + } + + return device, resp, err +} + +// Create creates a new device +func (s *DeviceServiceOp) Create(createRequest *DeviceCreateRequest) (*Device, *Response, error) { + path := fmt.Sprintf("%s/%s%s", projectBasePath, createRequest.ProjectID, deviceBasePath) + device := new(Device) + + resp, err := s.client.DoRequest("POST", path, createRequest, device) + if err != nil { + return nil, resp, err + } + + return device, resp, err +} + +// Update updates an existing device +func (s *DeviceServiceOp) Update(deviceID string, updateRequest *DeviceUpdateRequest) (*Device, *Response, error) { + path := fmt.Sprintf("%s/%s?include=facility", deviceBasePath, deviceID) + device := new(Device) + + resp, err := s.client.DoRequest("PUT", path, updateRequest, device) + if err != nil { + return nil, resp, err + } + + return device, resp, err +} + +// Delete deletes a device +func (s *DeviceServiceOp) Delete(deviceID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", deviceBasePath, deviceID) + + return s.client.DoRequest("DELETE", path, nil, nil) +} + +// Reboot reboots on a device +func (s *DeviceServiceOp) Reboot(deviceID string) (*Response, error) { + path := fmt.Sprintf("%s/%s/actions", deviceBasePath, deviceID) + action := &DeviceActionRequest{Type: "reboot"} + + return s.client.DoRequest("POST", path, action, nil) +} + +// PowerOff powers on a device +func (s *DeviceServiceOp) PowerOff(deviceID string) (*Response, error) { + path := fmt.Sprintf("%s/%s/actions", deviceBasePath, deviceID) + action := &DeviceActionRequest{Type: "power_off"} + + return s.client.DoRequest("POST", path, action, nil) +} + +// PowerOn powers on a device +func (s *DeviceServiceOp) PowerOn(deviceID string) (*Response, error) { + path := fmt.Sprintf("%s/%s/actions", deviceBasePath, deviceID) + action := &DeviceActionRequest{Type: "power_on"} + + return s.client.DoRequest("POST", path, action, nil) +} + +type lockType struct { + Locked bool `json:"locked"` +} + +// Lock sets a device to "locked" +func (s *DeviceServiceOp) Lock(deviceID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", deviceBasePath, deviceID) + action := lockType{Locked: true} + + return s.client.DoRequest("PATCH", path, action, nil) +} + +// Unlock sets a device to "unlocked" +func (s *DeviceServiceOp) Unlock(deviceID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", deviceBasePath, deviceID) + action := lockType{Locked: false} + + return s.client.DoRequest("PATCH", path, action, nil) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/email.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/email.go new file mode 100644 index 00000000000..4c77d0f6077 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/email.go @@ -0,0 +1,37 @@ +package packngo + +const emailBasePath = "/emails" + +// EmailService interface defines available email methods +type EmailService interface { + Get(string) (*Email, *Response, error) +} + +// Email represents a user's email address +type Email struct { + ID string `json:"id"` + Address string `json:"address"` + Default bool `json:"default,omitempty"` + URL string `json:"href,omitempty"` +} + +func (e Email) String() string { + return Stringify(e) +} + +// EmailServiceOp implements EmailService +type EmailServiceOp struct { + client *Client +} + +// Get retrieves an email by id +func (s *EmailServiceOp) Get(emailID string) (*Email, *Response, error) { + email := new(Email) + + resp, err := s.client.DoRequest("GET", emailBasePath, nil, email) + if err != nil { + return nil, resp, err + } + + return email, resp, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/facilities.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/facilities.go new file mode 100644 index 00000000000..12aac9198b6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/facilities.go @@ -0,0 +1,52 @@ +package packngo + +const facilityBasePath = "/facilities" + +// FacilityService interface defines available facility methods +type FacilityService interface { + List() ([]Facility, *Response, error) +} + +type facilityRoot struct { + Facilities []Facility `json:"facilities"` +} + +// Facility represents a Packet facility +type Facility struct { + ID string `json:"id"` + Name string `json:"name,omitempty"` + Code string `json:"code,omitempty"` + Features []string `json:"features,omitempty"` + Address *Address `json:"address,omitempty"` + URL string `json:"href,omitempty"` +} + +func (f Facility) String() string { + return Stringify(f) +} + +// Address - the physical address of the facility +type Address struct { + ID string `json:"id,omitempty"` +} + +func (a Address) String() string { + return Stringify(a) +} + +// FacilityServiceOp implements FacilityService +type FacilityServiceOp struct { + client *Client +} + +// List returns all available Packet facilities +func (s *FacilityServiceOp) List() ([]Facility, *Response, error) { + root := new(facilityRoot) + + resp, err := s.client.DoRequest("GET", facilityBasePath, nil, root) + if err != nil { + return nil, resp, err + } + + return root.Facilities, resp, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/ip.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/ip.go new file mode 100644 index 00000000000..671eea60c21 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/ip.go @@ -0,0 +1,194 @@ +package packngo + +import ( + "fmt" +) + +const ipBasePath = "/ips" + +// DeviceIPService handles assignment of addresses from reserved blocks to instances in a project. +type DeviceIPService interface { + Assign(deviceID string, assignRequest *AddressStruct) (*IPAddressAssignment, *Response, error) + Unassign(assignmentID string) (*Response, error) + Get(assignmentID string) (*IPAddressAssignment, *Response, error) +} + +// ProjectIPService handles reservation of IP address blocks for a project. +type ProjectIPService interface { + Get(reservationID string) (*IPAddressReservation, *Response, error) + List(projectID string) ([]IPAddressReservation, *Response, error) + Request(projectID string, ipReservationReq *IPReservationRequest) (*IPAddressReservation, *Response, error) + Remove(ipReservationID string) (*Response, error) + AvailableAddresses(ipReservationID string, r *AvailableRequest) ([]string, *Response, error) +} + +type ipAddressCommon struct { + ID string `json:"id"` + Address string `json:"address"` + Gateway string `json:"gateway"` + Network string `json:"network"` + AddressFamily int `json:"address_family"` + Netmask string `json:"netmask"` + Public bool `json:"public"` + CIDR int `json:"cidr"` + Created string `json:"created_at,omitempty"` + Updated string `json:"updated_at,omitempty"` + Href string `json:"href"` + Management bool `json:"management"` + Manageable bool `json:"manageable"` + Project Href `json:"project"` +} + +// IPAddressReservation is created when user sends IP reservation request for a project (considering it's within quota). +type IPAddressReservation struct { + ipAddressCommon + Assignments []Href `json:"assignments"` + Facility Facility `json:"facility,omitempty"` + Available string `json:"available"` + Addon bool `json:"addon"` + Bill bool `json:"bill"` +} + +// AvailableResponse is a type for listing of available addresses from a reserved block. +type AvailableResponse struct { + Available []string `json:"available"` +} + +// AvailableRequest is a type for listing available addresses from a reserved block. +type AvailableRequest struct { + CIDR int `json:"cidr"` +} + +// IPAddressAssignment is created when an IP address from reservation block is assigned to a device. +type IPAddressAssignment struct { + ipAddressCommon + AssignedTo Href `json:"assigned_to"` +} + +// IPReservationRequest represents the body of a reservation request. +type IPReservationRequest struct { + Type string `json:"type"` + Quantity int `json:"quantity"` + Comments string `json:"comments"` + Facility string `json:"facility"` +} + +// AddressStruct is a helper type for request/response with dict like {"address": ... } +type AddressStruct struct { + Address string `json:"address"` +} + +func deleteFromIP(client *Client, resourceID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", ipBasePath, resourceID) + + return client.DoRequest("DELETE", path, nil, nil) +} + +func (i IPAddressReservation) String() string { + return Stringify(i) +} + +func (i IPAddressAssignment) String() string { + return Stringify(i) +} + +// DeviceIPServiceOp is interface for IP-address assignment methods. +type DeviceIPServiceOp struct { + client *Client +} + +// Unassign unassigns an IP address from the device to which it is currently assigned. +// This will remove the relationship between an IP and the device and will make the IP +// address available to be assigned to another device. +func (i *DeviceIPServiceOp) Unassign(assignmentID string) (*Response, error) { + return deleteFromIP(i.client, assignmentID) +} + +// Assign assigns an IP address to a device. +// The IP address must be in one of the IP ranges assigned to the device’s project. +func (i *DeviceIPServiceOp) Assign(deviceID string, assignRequest *AddressStruct) (*IPAddressAssignment, *Response, error) { + path := fmt.Sprintf("%s/%s%s", deviceBasePath, deviceID, ipBasePath) + ipa := new(IPAddressAssignment) + + resp, err := i.client.DoRequest("POST", path, assignRequest, ipa) + if err != nil { + return nil, resp, err + } + + return ipa, resp, err +} + +// Get returns assignment by ID. +func (i *DeviceIPServiceOp) Get(assignmentID string) (*IPAddressAssignment, *Response, error) { + path := fmt.Sprintf("%s/%s", ipBasePath, assignmentID) + ipa := new(IPAddressAssignment) + + resp, err := i.client.DoRequest("GET", path, nil, ipa) + if err != nil { + return nil, resp, err + } + + return ipa, resp, err +} + +// ProjectIPServiceOp is interface for IP assignment methods. +type ProjectIPServiceOp struct { + client *Client +} + +// Get returns reservation by ID. +func (i *ProjectIPServiceOp) Get(reservationID string) (*IPAddressReservation, *Response, error) { + path := fmt.Sprintf("%s/%s", ipBasePath, reservationID) + ipr := new(IPAddressReservation) + + resp, err := i.client.DoRequest("GET", path, nil, ipr) + if err != nil { + return nil, resp, err + } + + return ipr, resp, err +} + +// List provides a list of IP resevations for a single project. +func (i *ProjectIPServiceOp) List(projectID string) ([]IPAddressReservation, *Response, error) { + path := fmt.Sprintf("%s/%s%s", projectBasePath, projectID, ipBasePath) + reservations := new(struct { + Reservations []IPAddressReservation `json:"ip_addresses"` + }) + + resp, err := i.client.DoRequest("GET", path, nil, reservations) + if err != nil { + return nil, resp, err + } + return reservations.Reservations, resp, nil +} + +// Request requests more IP space for a project in order to have additional IP addresses to assign to devices. +func (i *ProjectIPServiceOp) Request(projectID string, ipReservationReq *IPReservationRequest) (*IPAddressReservation, *Response, error) { + path := fmt.Sprintf("%s/%s%s", projectBasePath, projectID, ipBasePath) + ipr := new(IPAddressReservation) + + resp, err := i.client.DoRequest("POST", path, ipReservationReq, ipr) + if err != nil { + return nil, resp, err + } + return ipr, resp, err +} + +// Remove removes an IP reservation from the project. +func (i *ProjectIPServiceOp) Remove(ipReservationID string) (*Response, error) { + return deleteFromIP(i.client, ipReservationID) +} + +// AvailableAddresses lists addresses available from a reserved block +func (i *ProjectIPServiceOp) AvailableAddresses(ipReservationID string, r *AvailableRequest) ([]string, *Response, error) { + path := fmt.Sprintf("%s/%s/available?cidr=%d", ipBasePath, ipReservationID, r.CIDR) + ar := new(AvailableResponse) + + resp, err := i.client.DoRequest("GET", path, r, ar) + if err != nil { + return nil, resp, err + } + return ar.Available, resp, nil + +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/operatingsystems.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/operatingsystems.go new file mode 100644 index 00000000000..7fd7f27ad2f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/operatingsystems.go @@ -0,0 +1,41 @@ +package packngo + +const osBasePath = "/operating-systems" + +// OSService interface defines available operating_systems methods +type OSService interface { + List() ([]OS, *Response, error) +} + +type osRoot struct { + OperatingSystems []OS `json:"operating_systems"` +} + +// OS represents a Packet operating system +type OS struct { + Name string `json:"name"` + Slug string `json:"slug"` + Distro string `json:"distro"` + Version string `json:"version"` +} + +func (o OS) String() string { + return Stringify(o) +} + +// OSServiceOp implements OSService +type OSServiceOp struct { + client *Client +} + +// List returns all available operating systems +func (s *OSServiceOp) List() ([]OS, *Response, error) { + root := new(osRoot) + + resp, err := s.client.DoRequest("GET", osBasePath, nil, root) + if err != nil { + return nil, resp, err + } + + return root.OperatingSystems, resp, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/organizations.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/organizations.go new file mode 100644 index 00000000000..36e76f1a2a0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/organizations.go @@ -0,0 +1,147 @@ +package packngo + +import "fmt" + +// API documentation https://www.packet.net/developers/api/organizations/ +const organizationBasePath = "/organizations" + +// OrganizationService interface defines available organization methods +type OrganizationService interface { + List() ([]Organization, *Response, error) + Get(string) (*Organization, *Response, error) + Create(*OrganizationCreateRequest) (*Organization, *Response, error) + Update(string, *OrganizationUpdateRequest) (*Organization, *Response, error) + Delete(string) (*Response, error) + ListPaymentMethods(string) ([]PaymentMethod, *Response, error) +} + +type organizationsRoot struct { + Organizations []Organization `json:"organizations"` +} + +// Organization represents a Packet organization +type Organization struct { + ID string `json:"id"` + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Website string `json:"website,omitempty"` + Twitter string `json:"twitter,omitempty"` + Created string `json:"created_at,omitempty"` + Updated string `json:"updated_at,omitempty"` + Address Address `json:"address,omitempty"` + TaxID string `json:"tax_id,omitempty"` + MainPhone string `json:"main_phone,omitempty"` + BillingPhone string `json:"billing_phone,omitempty"` + CreditAmount float64 `json:"credit_amount,omitempty"` + Logo string `json:"logo,omitempty"` + LogoThumb string `json:"logo_thumb,omitempty"` + Projects []Project `json:"projects,omitempty"` + URL string `json:"href,omitempty"` + Users []User `json:"members,omitempty"` + Owners []User `json:"owners,omitempty"` +} + +func (o Organization) String() string { + return Stringify(o) +} + +// OrganizationCreateRequest type used to create a Packet organization +type OrganizationCreateRequest struct { + Name string `json:"name"` + Description string `json:"description"` + Website string `json:"website"` + Twitter string `json:"twitter"` + Logo string `json:"logo"` +} + +func (o OrganizationCreateRequest) String() string { + return Stringify(o) +} + +// OrganizationUpdateRequest type used to update a Packet organization +type OrganizationUpdateRequest struct { + Name *string `json:"name,omitempty"` + Description *string `json:"description,omitempty"` + Website *string `json:"website,omitempty"` + Twitter *string `json:"twitter,omitempty"` + Logo *string `json:"logo,omitempty"` +} + +func (o OrganizationUpdateRequest) String() string { + return Stringify(o) +} + +// OrganizationServiceOp implements OrganizationService +type OrganizationServiceOp struct { + client *Client +} + +// List returns the user's organizations +func (s *OrganizationServiceOp) List() ([]Organization, *Response, error) { + root := new(organizationsRoot) + + resp, err := s.client.DoRequest("GET", organizationBasePath, nil, root) + if err != nil { + return nil, resp, err + } + + return root.Organizations, resp, err +} + +// Get returns a organization by id +func (s *OrganizationServiceOp) Get(organizationID string) (*Organization, *Response, error) { + path := fmt.Sprintf("%s/%s", organizationBasePath, organizationID) + organization := new(Organization) + + resp, err := s.client.DoRequest("GET", path, nil, organization) + if err != nil { + return nil, resp, err + } + + return organization, resp, err +} + +// Create creates a new organization +func (s *OrganizationServiceOp) Create(createRequest *OrganizationCreateRequest) (*Organization, *Response, error) { + organization := new(Organization) + + resp, err := s.client.DoRequest("POST", organizationBasePath, createRequest, organization) + if err != nil { + return nil, resp, err + } + + return organization, resp, err +} + +// Update updates an organization +func (s *OrganizationServiceOp) Update(id string, updateRequest *OrganizationUpdateRequest) (*Organization, *Response, error) { + path := fmt.Sprintf("%s/%s", organizationBasePath, id) + organization := new(Organization) + + resp, err := s.client.DoRequest("PATCH", path, updateRequest, organization) + if err != nil { + return nil, resp, err + } + + return organization, resp, err +} + +// Delete deletes an organizationID +func (s *OrganizationServiceOp) Delete(organizationID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", organizationBasePath, organizationID) + + return s.client.DoRequest("DELETE", path, nil, nil) +} + +// ListPaymentMethods returns PaymentMethods for an organization +func (s *OrganizationServiceOp) ListPaymentMethods(organizationID string) ([]PaymentMethod, *Response, error) { + url := fmt.Sprintf("%s/%s%s", organizationBasePath, organizationID, paymentMethodBasePath) + root := new(paymentMethodsRoot) + + resp, err := s.client.DoRequest("GET", url, nil, root) + if err != nil { + return nil, resp, err + } + + return root.PaymentMethods, resp, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/packngo.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/packngo.go new file mode 100644 index 00000000000..37b6c23a106 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/packngo.go @@ -0,0 +1,306 @@ +package packngo + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "log" + "net/http" + "net/http/httputil" + "net/url" + "os" + "strconv" + "strings" + "time" +) + +const ( + packetTokenEnvVar = "PACKET_AUTH_TOKEN" + libraryVersion = "0.1.0" + baseURL = "https://api.packet.net/" + userAgent = "packngo/" + libraryVersion + mediaType = "application/json" + debugEnvVar = "PACKNGO_DEBUG" + + headerRateLimit = "X-RateLimit-Limit" + headerRateRemaining = "X-RateLimit-Remaining" + headerRateReset = "X-RateLimit-Reset" +) + +// ListOptions specifies optional global API parameters +type ListOptions struct { + // for paginated result sets, page of results to retrieve + Page int `url:"page,omitempty"` + + // for paginated result sets, the number of results to return per page + PerPage int `url:"per_page,omitempty"` + + // specify which resources you want to return as collections instead of references + Includes string +} + +func (l *ListOptions) createURL() (url string) { + if l.Includes != "" { + url += fmt.Sprintf("include=%s", l.Includes) + } + + if l.Page != 0 { + if url != "" { + url += "&" + } + url += fmt.Sprintf("page=%d", l.Page) + } + + if l.PerPage != 0 { + if url != "" { + url += "&" + } + url += fmt.Sprintf("per_page=%d", l.PerPage) + } + + return +} + +// meta contains pagination information +type meta struct { + Self *Href `json:"self"` + First *Href `json:"first"` + Last *Href `json:"last"` + Previous *Href `json:"previous,omitempty"` + Next *Href `json:"next,omitempty"` + Total int `json:"total"` + CurrentPageNum int `json:"current_page"` + LastPageNum int `json:"last_page"` +} + +// Response is the http response from api calls +type Response struct { + *http.Response + Rate +} + +// Href is an API link +type Href struct { + Href string `json:"href"` +} + +func (r *Response) populateRate() { + // parse the rate limit headers and populate Response.Rate + if limit := r.Header.Get(headerRateLimit); limit != "" { + r.Rate.RequestLimit, _ = strconv.Atoi(limit) + } + if remaining := r.Header.Get(headerRateRemaining); remaining != "" { + r.Rate.RequestsRemaining, _ = strconv.Atoi(remaining) + } + if reset := r.Header.Get(headerRateReset); reset != "" { + if v, _ := strconv.ParseInt(reset, 10, 64); v != 0 { + r.Rate.Reset = Timestamp{time.Unix(v, 0)} + } + } +} + +// ErrorResponse is the http response used on errors +type ErrorResponse struct { + Response *http.Response + Errors []string `json:"errors"` + SingleError string `json:"error"` +} + +func (r *ErrorResponse) Error() string { + return fmt.Sprintf("%v %v: %d %v %v", + r.Response.Request.Method, r.Response.Request.URL, r.Response.StatusCode, strings.Join(r.Errors, ", "), r.SingleError) +} + +// Client is the base API Client +type Client struct { + client *http.Client + debug bool + + BaseURL *url.URL + + UserAgent string + ConsumerToken string + APIKey string + + RateLimit Rate + + // Packet Api Objects + Plans PlanService + Users UserService + Emails EmailService + SSHKeys SSHKeyService + Devices DeviceService + Projects ProjectService + Facilities FacilityService + OperatingSystems OSService + DeviceIPs DeviceIPService + DevicePorts DevicePortService + ProjectIPs ProjectIPService + ProjectVirtualNetworks ProjectVirtualNetworkService + Volumes VolumeService + VolumeAttachments VolumeAttachmentService + SpotMarket SpotMarketService + Organizations OrganizationService +} + +// NewRequest inits a new http request with the proper headers +func (c *Client) NewRequest(method, path string, body interface{}) (*http.Request, error) { + // relative path to append to the endpoint url, no leading slash please + rel, err := url.Parse(path) + if err != nil { + return nil, err + } + + u := c.BaseURL.ResolveReference(rel) + + // json encode the request body, if any + buf := new(bytes.Buffer) + if body != nil { + err := json.NewEncoder(buf).Encode(body) + if err != nil { + return nil, err + } + } + + req, err := http.NewRequest(method, u.String(), buf) + if err != nil { + return nil, err + } + + req.Close = true + + req.Header.Add("X-Auth-Token", c.APIKey) + req.Header.Add("X-Consumer-Token", c.ConsumerToken) + + req.Header.Add("Content-Type", mediaType) + req.Header.Add("Accept", mediaType) + req.Header.Add("User-Agent", userAgent) + return req, nil +} + +// Do executes the http request +func (c *Client) Do(req *http.Request, v interface{}) (*Response, error) { + resp, err := c.client.Do(req) + if err != nil { + return nil, err + } + + defer resp.Body.Close() + + response := Response{Response: resp} + response.populateRate() + if c.debug { + o, _ := httputil.DumpResponse(response.Response, true) + log.Printf("\n=======[RESPONSE]============\n%s\n\n", string(o)) + } + c.RateLimit = response.Rate + + err = checkResponse(resp) + // if the response is an error, return the ErrorResponse + if err != nil { + return &response, err + } + + if v != nil { + // if v implements the io.Writer interface, return the raw response + if w, ok := v.(io.Writer); ok { + io.Copy(w, resp.Body) + } else { + err = json.NewDecoder(resp.Body).Decode(v) + if err != nil { + return &response, err + } + } + } + + return &response, err +} + +// DoRequest is a convenience method, it calls NewRequest followed by Do +// v is the interface to unmarshal the response JSON into +func (c *Client) DoRequest(method, path string, body, v interface{}) (*Response, error) { + req, err := c.NewRequest(method, path, body) + if c.debug { + o, _ := httputil.DumpRequestOut(req, true) + log.Printf("\n=======[REQUEST]=============\n%s\n", string(o)) + } + if err != nil { + return nil, err + } + return c.Do(req, v) +} + +func NewClient() (*Client, error) { + apiToken := os.Getenv(packetTokenEnvVar) + if apiToken == "" { + return nil, fmt.Errorf("you must export %s.", packetTokenEnvVar) + } + c := NewClientWithAuth("packngo lib", apiToken, nil) + return c, nil + +} + +// NewClientWithAuth initializes and returns a Client, use this to get an API Client to operate on +// N.B.: Packet's API certificate requires Go 1.5+ to successfully parse. If you are using +// an older version of Go, pass in a custom http.Client with a custom TLS configuration +// that sets "InsecureSkipVerify" to "true" +func NewClientWithAuth(consumerToken string, apiKey string, httpClient *http.Client) *Client { + client, _ := NewClientWithBaseURL(consumerToken, apiKey, httpClient, baseURL) + return client +} + +// NewClientWithBaseURL returns a Client pointing to nonstandard API URL, e.g. +// for mocking the remote API +func NewClientWithBaseURL(consumerToken string, apiKey string, httpClient *http.Client, apiBaseURL string) (*Client, error) { + if httpClient == nil { + // Don't fall back on http.DefaultClient as it's not nice to adjust state + // implicitly. If the client wants to use http.DefaultClient, they can + // pass it in explicitly. + httpClient = &http.Client{} + } + + u, err := url.Parse(apiBaseURL) + if err != nil { + return nil, err + } + + c := &Client{client: httpClient, BaseURL: u, UserAgent: userAgent, ConsumerToken: consumerToken, APIKey: apiKey} + c.debug = os.Getenv(debugEnvVar) != "" + c.Plans = &PlanServiceOp{client: c} + c.Organizations = &OrganizationServiceOp{client: c} + c.Users = &UserServiceOp{client: c} + c.Emails = &EmailServiceOp{client: c} + c.SSHKeys = &SSHKeyServiceOp{client: c} + c.Devices = &DeviceServiceOp{client: c} + c.Projects = &ProjectServiceOp{client: c} + c.Facilities = &FacilityServiceOp{client: c} + c.OperatingSystems = &OSServiceOp{client: c} + c.DeviceIPs = &DeviceIPServiceOp{client: c} + c.DevicePorts = &DevicePortServiceOp{client: c} + c.ProjectVirtualNetworks = &ProjectVirtualNetworkServiceOp{client: c} + c.ProjectIPs = &ProjectIPServiceOp{client: c} + c.Volumes = &VolumeServiceOp{client: c} + c.VolumeAttachments = &VolumeAttachmentServiceOp{client: c} + c.SpotMarket = &SpotMarketServiceOp{client: c} + + return c, nil +} + +func checkResponse(r *http.Response) error { + // return if http status code is within 200 range + if c := r.StatusCode; c >= 200 && c <= 299 { + // response is good, return + return nil + } + + errorResponse := &ErrorResponse{Response: r} + data, err := ioutil.ReadAll(r.Body) + // if the response has a body, populate the message in errorResponse + if err == nil && len(data) > 0 { + json.Unmarshal(data, errorResponse) + } + + return errorResponse +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/payment_methods.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/payment_methods.go new file mode 100644 index 00000000000..3479f0920ba --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/payment_methods.go @@ -0,0 +1,72 @@ +package packngo + +// API documentation https://www.packet.net/developers/api/paymentmethods/ +const paymentMethodBasePath = "/payment-methods" + +// ProjectService interface defines available project methods +type PaymentMethodService interface { + List() ([]PaymentMethod, *Response, error) + Get(string) (*PaymentMethod, *Response, error) + Create(*PaymentMethodCreateRequest) (*PaymentMethod, *Response, error) + Update(string, *PaymentMethodUpdateRequest) (*PaymentMethod, *Response, error) + Delete(string) (*Response, error) +} + +type paymentMethodsRoot struct { + PaymentMethods []PaymentMethod `json:"payment_methods"` +} + +// PaymentMethod represents a Packet payment method of an organization +type PaymentMethod struct { + ID string `json:"id"` + Name string `json:"name,omitempty"` + Created string `json:"created_at,omitempty"` + Updated string `json:"updated_at,omitempty"` + Nonce string `json:"nonce,omitempty"` + Default bool `json:"default,omitempty"` + Organization Organization `json:"organization,omitempty"` + Projects []Project `json:"projects,omitempty"` + Type string `json:"type,omitempty"` + CardholderName string `json:"cardholder_name,omitempty"` + ExpMonth string `json:"expiration_month,omitempty"` + ExpYear string `json:"expiration_year,omitempty"` + Last4 string `json:"last_4,omitempty"` + BillingAddress BillingAddress `json:"billing_address,omitempty"` + URL string `json:"href,omitempty"` +} + +func (pm PaymentMethod) String() string { + return Stringify(pm) +} + +// PaymentMethodCreateRequest type used to create a Packet payment method of an organization +type PaymentMethodCreateRequest struct { + Name string `json:"name"` + Nonce string `json:"name"` + CardholderName string `json:"cardholder_name,omitempty"` + ExpMonth string `json:"expiration_month,omitempty"` + ExpYear string `json:"expiration_year,omitempty"` + BillingAddress string `json:"billing_address,omitempty"` +} + +func (pm PaymentMethodCreateRequest) String() string { + return Stringify(pm) +} + +// PaymentMethodUpdateRequest type used to update a Packet payment method of an organization +type PaymentMethodUpdateRequest struct { + Name *string `json:"name,omitempty"` + CardholderName *string `json:"cardholder_name,omitempty"` + ExpMonth *string `json:"expiration_month,omitempty"` + ExpYear *string `json:"expiration_year,omitempty"` + BillingAddress *string `json:"billing_address,omitempty"` +} + +func (pm PaymentMethodUpdateRequest) String() string { + return Stringify(pm) +} + +// PaymentMethodServiceOp implements PaymentMethodService +type PaymentMethodServiceOp struct { + client *Client +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/plans.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/plans.go new file mode 100644 index 00000000000..148a2a5ce7a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/plans.go @@ -0,0 +1,117 @@ +package packngo + +const planBasePath = "/plans" + +// PlanService interface defines available plan methods +type PlanService interface { + List() ([]Plan, *Response, error) +} + +type planRoot struct { + Plans []Plan `json:"plans"` +} + +// Plan represents a Packet service plan +type Plan struct { + ID string `json:"id"` + Slug string `json:"slug,omitempty"` + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Line string `json:"line,omitempty"` + Specs *Specs `json:"specs,omitempty"` + Pricing *Pricing `json:"pricing,omitempty"` +} + +func (p Plan) String() string { + return Stringify(p) +} + +// Specs - the server specs for a plan +type Specs struct { + Cpus []*Cpus `json:"cpus,omitempty"` + Memory *Memory `json:"memory,omitempty"` + Drives []*Drives `json:"drives,omitempty"` + Nics []*Nics `json:"nics,omitempty"` + Features *Features `json:"features,omitempty"` +} + +func (s Specs) String() string { + return Stringify(s) +} + +// Cpus - the CPU config details for specs on a plan +type Cpus struct { + Count int `json:"count,omitempty"` + Type string `json:"type,omitempty"` +} + +func (c Cpus) String() string { + return Stringify(c) +} + +// Memory - the RAM config details for specs on a plan +type Memory struct { + Total string `json:"total,omitempty"` +} + +func (m Memory) String() string { + return Stringify(m) +} + +// Drives - the storage config details for specs on a plan +type Drives struct { + Count int `json:"count,omitempty"` + Size string `json:"size,omitempty"` + Type string `json:"type,omitempty"` +} + +func (d Drives) String() string { + return Stringify(d) +} + +// Nics - the network hardware details for specs on a plan +type Nics struct { + Count int `json:"count,omitempty"` + Type string `json:"type,omitempty"` +} + +func (n Nics) String() string { + return Stringify(n) +} + +// Features - other features in the specs for a plan +type Features struct { + Raid bool `json:"raid,omitempty"` + Txt bool `json:"txt,omitempty"` +} + +func (f Features) String() string { + return Stringify(f) +} + +// Pricing - the pricing options on a plan +type Pricing struct { + Hourly float32 `json:"hourly,omitempty"` + Monthly float32 `json:"monthly,omitempty"` +} + +func (p Pricing) String() string { + return Stringify(p) +} + +// PlanServiceOp implements PlanService +type PlanServiceOp struct { + client *Client +} + +// List method returns all available plans +func (s *PlanServiceOp) List() ([]Plan, *Response, error) { + root := new(planRoot) + + resp, err := s.client.DoRequest("GET", planBasePath, nil, root) + if err != nil { + return nil, resp, err + } + + return root.Plans, resp, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/ports.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/ports.go new file mode 100644 index 00000000000..c0f79d38edb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/ports.go @@ -0,0 +1,225 @@ +package packngo + +import ( + "fmt" +) + +const portBasePath = "/ports" + +type NetworkType int + +const ( + NetworkL3 NetworkType = iota + NetworkHybrid + NetworkL2Bonded + NetworkL2Individual + NetworkUnknown +) + +// DevicePortService handles operations on a port which belongs to a particular device +type DevicePortService interface { + Assign(*PortAssignRequest) (*Port, *Response, error) + Unassign(*PortAssignRequest) (*Port, *Response, error) + Bond(*BondRequest) (*Port, *Response, error) + Disbond(*DisbondRequest) (*Port, *Response, error) + PortToLayerTwo(string) (*Port, *Response, error) + PortToLayerThree(string) (*Port, *Response, error) + DeviceToLayerTwo(string) (*Device, error) + DeviceToLayerThree(string) (*Device, error) + DeviceNetworkType(string) (NetworkType, error) + GetBondPort(string) (*Port, error) + GetPortByName(string, string) (*Port, error) +} + +type PortData struct { + MAC string `json:"mac"` + Bonded bool `json:"bonded"` +} + +type Port struct { + ID string `json:"id"` + Type string `json:"type"` + Name string `json:"name"` + Data PortData `json:"data"` + AttachedVirtualNetworks []VirtualNetwork `json:"virtual_networks"` +} + +type AddressRequest struct { + AddressFamily int `json:"address_family"` + Public bool `json:"public"` +} + +type BackToL3Request struct { + RequestIPs []AddressRequest `json:"request_ips"` +} + +type DevicePortServiceOp struct { + client *Client +} + +type PortAssignRequest struct { + PortID string `json:"id"` + VirtualNetworkID string `json:"vnid"` +} + +type BondRequest struct { + PortID string `json:"id"` + BulkEnable bool `json:"bulk_enable"` +} + +type DisbondRequest struct { + PortID string `json:"id"` + BulkDisable bool `json:"bulk_disable"` +} + +func (i *DevicePortServiceOp) GetBondPort(deviceID string) (*Port, error) { + device, _, err := i.client.Devices.Get(deviceID) + if err != nil { + return nil, err + } + for _, port := range device.NetworkPorts { + if port.Type == "NetworkBondPort" { + return &port, nil + } + } + + return nil, fmt.Errorf("No bonded port found in device %s", deviceID) +} + +func (i *DevicePortServiceOp) GetPortByName(deviceID, name string) (*Port, error) { + device, _, err := i.client.Devices.Get(deviceID) + if err != nil { + return nil, err + } + for _, port := range device.NetworkPorts { + if port.Name == name { + return &port, nil + } + } + + return nil, fmt.Errorf("Port %s not found in device %s", name, deviceID) +} + +func (i *DevicePortServiceOp) Assign(par *PortAssignRequest) (*Port, *Response, error) { + path := fmt.Sprintf("%s/%s/assign", portBasePath, par.PortID) + return i.portAction(path, par) +} + +func (i *DevicePortServiceOp) Unassign(par *PortAssignRequest) (*Port, *Response, error) { + path := fmt.Sprintf("%s/%s/unassign", portBasePath, par.PortID) + return i.portAction(path, par) +} + +func (i *DevicePortServiceOp) Bond(br *BondRequest) (*Port, *Response, error) { + path := fmt.Sprintf("%s/%s/bond", portBasePath, br.PortID) + return i.portAction(path, br) +} + +func (i *DevicePortServiceOp) Disbond(dr *DisbondRequest) (*Port, *Response, error) { + path := fmt.Sprintf("%s/%s/disbond", portBasePath, dr.PortID) + return i.portAction(path, dr) +} + +func (i *DevicePortServiceOp) portAction(path string, req interface{}) (*Port, *Response, error) { + port := new(Port) + + resp, err := i.client.DoRequest("POST", path, req, port) + if err != nil { + return nil, resp, err + } + + return port, resp, err +} + +func (i *DevicePortServiceOp) PortToLayerTwo(portID string) (*Port, *Response, error) { + path := fmt.Sprintf("%s/%s/convert/layer-2", portBasePath, portID) + port := new(Port) + + resp, err := i.client.DoRequest("POST", path, nil, port) + if err != nil { + return nil, resp, err + } + + return port, resp, err +} + +func (i *DevicePortServiceOp) PortToLayerThree(portID string) (*Port, *Response, error) { + path := fmt.Sprintf("%s/%s/convert/layer-3", portBasePath, portID) + port := new(Port) + + req := BackToL3Request{ + RequestIPs: []AddressRequest{ + AddressRequest{AddressFamily: 4, Public: true}, + AddressRequest{AddressFamily: 4, Public: false}, + AddressRequest{AddressFamily: 6, Public: true}, + }, + } + + resp, err := i.client.DoRequest("POST", path, &req, port) + if err != nil { + return nil, resp, err + } + + return port, resp, err +} + +func (i *DevicePortServiceOp) DeviceNetworkType(deviceID string) (NetworkType, error) { + d, _, err := i.client.Devices.Get(deviceID) + if err != nil { + return NetworkUnknown, err + } + if d.Plan.Slug == "baremetal_0" || d.Plan.Slug == "baremetal_1" { + return NetworkL3, nil + } + if d.Plan.Slug == "baremetal_1e" { + return NetworkHybrid, nil + } + if len(d.NetworkPorts) < 1 { + // really? + return NetworkL2Individual, nil + } + if d.NetworkPorts[0].Data.Bonded { + if d.NetworkPorts[2].Data.Bonded { + for _, ip := range d.Network { + if ip.Management { + return NetworkL3, nil + } + } + return NetworkL2Bonded, nil + } else { + return NetworkHybrid, nil + } + } + return NetworkL2Individual, nil +} + +func (i *DevicePortServiceOp) DeviceToLayerThree(deviceID string) (*Device, error) { + // hopefull all the VLANs are unassigned at this point + bond0, err := i.client.DevicePorts.GetBondPort(deviceID) + if err != nil { + return nil, err + } + + bond0, _, err = i.client.DevicePorts.PortToLayerThree(bond0.ID) + if err != nil { + return nil, err + } + d, _, err := i.client.Devices.Get(deviceID) + return d, err +} + +// DeviceToLayerTwo converts device to L2 networking. Use bond0 to attach VLAN. +func (i *DevicePortServiceOp) DeviceToLayerTwo(deviceID string) (*Device, error) { + bond0, err := i.client.DevicePorts.GetBondPort(deviceID) + if err != nil { + return nil, err + } + + bond0, _, err = i.client.DevicePorts.PortToLayerTwo(bond0.ID) + if err != nil { + return nil, err + } + d, _, err := i.client.Devices.Get(deviceID) + return d, err + +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/projects.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/projects.go new file mode 100644 index 00000000000..814b5e3c1f2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/projects.go @@ -0,0 +1,138 @@ +package packngo + +import "fmt" + +const projectBasePath = "/projects" + +// ProjectService interface defines available project methods +type ProjectService interface { + List(listOpt *ListOptions) ([]Project, *Response, error) + Get(string) (*Project, *Response, error) + Create(*ProjectCreateRequest) (*Project, *Response, error) + Update(string, *ProjectUpdateRequest) (*Project, *Response, error) + Delete(string) (*Response, error) +} + +type projectsRoot struct { + Projects []Project `json:"projects"` + Meta meta `json:"meta"` +} + +// Project represents a Packet project +type Project struct { + ID string `json:"id"` + Name string `json:"name,omitempty"` + Organization Organization `json:"organization,omitempty"` + Created string `json:"created_at,omitempty"` + Updated string `json:"updated_at,omitempty"` + Users []User `json:"members,omitempty"` + Devices []Device `json:"devices,omitempty"` + SSHKeys []SSHKey `json:"ssh_keys,omitempty"` + URL string `json:"href,omitempty"` + PaymentMethod PaymentMethod `json:"payment_method,omitempty"` +} + +func (p Project) String() string { + return Stringify(p) +} + +// ProjectCreateRequest type used to create a Packet project +type ProjectCreateRequest struct { + Name string `json:"name"` + PaymentMethodID string `json:"payment_method_id,omitempty"` + OrganizationID string `json:"organization_id,omitempty"` +} + +func (p ProjectCreateRequest) String() string { + return Stringify(p) +} + +// ProjectUpdateRequest type used to update a Packet project +type ProjectUpdateRequest struct { + Name *string `json:"name,omitempty"` + PaymentMethodID *string `json:"payment_method_id,omitempty"` +} + +func (p ProjectUpdateRequest) String() string { + return Stringify(p) +} + +// ProjectServiceOp implements ProjectService +type ProjectServiceOp struct { + client *Client +} + +// List returns the user's projects +func (s *ProjectServiceOp) List(listOpt *ListOptions) (projects []Project, resp *Response, err error) { + var params string + if listOpt != nil { + params = listOpt.createURL() + } + root := new(projectsRoot) + + path := fmt.Sprintf("%s?%s", projectBasePath, params) + + for { + resp, err = s.client.DoRequest("GET", path, nil, root) + if err != nil { + return nil, resp, err + } + + projects = append(projects, root.Projects...) + + if root.Meta.Next != nil && (listOpt == nil || listOpt.Page == 0) { + path = root.Meta.Next.Href + if params != "" { + path = fmt.Sprintf("%s&%s", path, params) + } + continue + } + + return + } +} + +// Get returns a project by id +func (s *ProjectServiceOp) Get(projectID string) (*Project, *Response, error) { + path := fmt.Sprintf("%s/%s", projectBasePath, projectID) + project := new(Project) + + resp, err := s.client.DoRequest("GET", path, nil, project) + if err != nil { + return nil, resp, err + } + + return project, resp, err +} + +// Create creates a new project +func (s *ProjectServiceOp) Create(createRequest *ProjectCreateRequest) (*Project, *Response, error) { + project := new(Project) + + resp, err := s.client.DoRequest("POST", projectBasePath, createRequest, project) + if err != nil { + return nil, resp, err + } + + return project, resp, err +} + +// Update updates a project +func (s *ProjectServiceOp) Update(id string, updateRequest *ProjectUpdateRequest) (*Project, *Response, error) { + path := fmt.Sprintf("%s/%s", projectBasePath, id) + project := new(Project) + + resp, err := s.client.DoRequest("PATCH", path, updateRequest, project) + if err != nil { + return nil, resp, err + } + + return project, resp, err +} + +// Delete deletes a project +func (s *ProjectServiceOp) Delete(projectID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", projectBasePath, projectID) + + return s.client.DoRequest("DELETE", path, nil, nil) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/rate.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/rate.go new file mode 100644 index 00000000000..965967d4557 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/rate.go @@ -0,0 +1,12 @@ +package packngo + +// Rate provides the API request rate limit details +type Rate struct { + RequestLimit int `json:"request_limit"` + RequestsRemaining int `json:"requests_remaining"` + Reset Timestamp `json:"rate_reset"` +} + +func (r Rate) String() string { + return Stringify(r) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/spotmarket.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/spotmarket.go new file mode 100644 index 00000000000..5dfb7d559b1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/spotmarket.go @@ -0,0 +1,39 @@ +package packngo + +const spotMarketBasePath = "/market/spot/prices" + +// SpotMarketService expooses Spot Market methods +type SpotMarketService interface { + Prices() (PriceMap, *Response, error) +} + +// SpotMarketServiceOp implements SpotMarketService +type SpotMarketServiceOp struct { + client *Client +} + +// PriceMap is a map of [facility][plan]-> float Price +type PriceMap map[string]map[string]float64 + +// Prices gets current PriceMap from the API +func (s *SpotMarketServiceOp) Prices() (PriceMap, *Response, error) { + root := new(struct { + SMPs map[string]map[string]struct { + Price float64 `json:"price"` + } `json:"spot_market_prices"` + }) + + resp, err := s.client.DoRequest("GET", spotMarketBasePath, nil, root) + if err != nil { + return nil, resp, err + } + + prices := make(PriceMap) + for facility, planMap := range root.SMPs { + prices[facility] = map[string]float64{} + for plan, v := range planMap { + prices[facility][plan] = v.Price + } + } + return prices, resp, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/sshkeys.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/sshkeys.go new file mode 100644 index 00000000000..260bf087642 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/sshkeys.go @@ -0,0 +1,138 @@ +package packngo + +import "fmt" + +const ( + sshKeyBasePath = "/ssh-keys" +) + +// SSHKeyService interface defines available device methods +type SSHKeyService interface { + List() ([]SSHKey, *Response, error) + ProjectList(string) ([]SSHKey, *Response, error) + Get(string) (*SSHKey, *Response, error) + Create(*SSHKeyCreateRequest) (*SSHKey, *Response, error) + Update(string, *SSHKeyUpdateRequest) (*SSHKey, *Response, error) + Delete(string) (*Response, error) +} + +type sshKeyRoot struct { + SSHKeys []SSHKey `json:"ssh_keys"` +} + +// SSHKey represents a user's ssh key +type SSHKey struct { + ID string `json:"id"` + Label string `json:"label"` + Key string `json:"key"` + FingerPrint string `json:"fingerprint"` + Created string `json:"created_at"` + Updated string `json:"updated_at"` + User User `json:"user,omitempty"` + URL string `json:"href,omitempty"` +} + +func (s SSHKey) String() string { + return Stringify(s) +} + +// SSHKeyCreateRequest type used to create an ssh key +type SSHKeyCreateRequest struct { + Label string `json:"label"` + Key string `json:"key"` + ProjectID string `json:"-"` +} + +func (s SSHKeyCreateRequest) String() string { + return Stringify(s) +} + +// SSHKeyUpdateRequest type used to update an ssh key +type SSHKeyUpdateRequest struct { + Label *string `json:"label,omitempty"` + Key *string `json:"key,omitempty"` +} + +func (s SSHKeyUpdateRequest) String() string { + return Stringify(s) +} + +// SSHKeyServiceOp implements SSHKeyService +type SSHKeyServiceOp struct { + client *Client +} + +func (s *SSHKeyServiceOp) list(url string) ([]SSHKey, *Response, error) { + root := new(sshKeyRoot) + + resp, err := s.client.DoRequest("GET", url, nil, root) + if err != nil { + return nil, resp, err + } + + return root.SSHKeys, resp, err +} + +// ProjectList lists ssh keys of a project +func (s *SSHKeyServiceOp) ProjectList(projectID string) ([]SSHKey, *Response, error) { + return s.list(fmt.Sprintf("%s/%s%s", projectBasePath, projectID, sshKeyBasePath)) + +} + +// List returns a user's ssh keys +func (s *SSHKeyServiceOp) List() ([]SSHKey, *Response, error) { + return s.list(sshKeyBasePath) +} + +// Get returns an ssh key by id +func (s *SSHKeyServiceOp) Get(sshKeyID string) (*SSHKey, *Response, error) { + path := fmt.Sprintf("%s/%s", sshKeyBasePath, sshKeyID) + sshKey := new(SSHKey) + + resp, err := s.client.DoRequest("GET", path, nil, sshKey) + if err != nil { + return nil, resp, err + } + + return sshKey, resp, err +} + +// Create creates a new ssh key +func (s *SSHKeyServiceOp) Create(createRequest *SSHKeyCreateRequest) (*SSHKey, *Response, error) { + path := sshKeyBasePath + if createRequest.ProjectID != "" { + path = fmt.Sprintf("%s/%s%s", projectBasePath, createRequest.ProjectID, sshKeyBasePath) + } + sshKey := new(SSHKey) + + resp, err := s.client.DoRequest("POST", path, createRequest, sshKey) + if err != nil { + return nil, resp, err + } + + return sshKey, resp, err +} + +// Update updates an ssh key +func (s *SSHKeyServiceOp) Update(id string, updateRequest *SSHKeyUpdateRequest) (*SSHKey, *Response, error) { + if updateRequest.Label == nil && updateRequest.Key == nil { + return nil, nil, fmt.Errorf("You must set either Label or Key string for SSH Key update") + } + path := fmt.Sprintf("%s/%s", sshKeyBasePath, id) + + sshKey := new(SSHKey) + + resp, err := s.client.DoRequest("PATCH", path, updateRequest, sshKey) + if err != nil { + return nil, resp, err + } + + return sshKey, resp, err +} + +// Delete deletes an ssh key +func (s *SSHKeyServiceOp) Delete(sshKeyID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", sshKeyBasePath, sshKeyID) + + return s.client.DoRequest("DELETE", path, nil, nil) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/timestamp.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/timestamp.go new file mode 100644 index 00000000000..c3320ed62eb --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/timestamp.go @@ -0,0 +1,35 @@ +package packngo + +import ( + "strconv" + "time" +) + +// Timestamp represents a time that can be unmarshalled from a JSON string +// formatted as either an RFC3339 or Unix timestamp. All +// exported methods of time.Time can be called on Timestamp. +type Timestamp struct { + time.Time +} + +func (t Timestamp) String() string { + return t.Time.String() +} + +// UnmarshalJSON implements the json.Unmarshaler interface. +// Time is expected in RFC3339 or Unix format. +func (t *Timestamp) UnmarshalJSON(data []byte) (err error) { + str := string(data) + i, err := strconv.ParseInt(str, 10, 64) + if err == nil { + t.Time = time.Unix(i, 0) + } else { + t.Time, err = time.Parse(`"`+time.RFC3339+`"`, str) + } + return +} + +// Equal reports whether t and u are equal based on time.Equal +func (t Timestamp) Equal(u Timestamp) bool { + return t.Time.Equal(u.Time) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/user.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/user.go new file mode 100644 index 00000000000..412db905e4e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/user.go @@ -0,0 +1,64 @@ +package packngo + +const userBasePath = "/users" +const userPath = "/user" + +// UserService interface defines available user methods +type UserService interface { + Get(string) (*User, *Response, error) + Current() (*User, *Response, error) +} + +// User represents a Packet user +type User struct { + ID string `json:"id"` + FirstName string `json:"first_name,omitempty"` + LastName string `json:"last_name,omitempty"` + FullName string `json:"full_name,omitempty"` + Email string `json:"email,omitempty"` + TwoFactor string `json:"two_factor_auth,omitempty"` + DefaultOrganizationID string `json:"default_organization_id,omitempty"` + AvatarURL string `json:"avatar_url,omitempty"` + Facebook string `json:"twitter,omitempty"` + Twitter string `json:"facebook,omitempty"` + LinkedIn string `json:"linkedin,omitempty"` + Created string `json:"created_at,omitempty"` + Updated string `json:"updated_at,omitempty"` + TimeZone string `json:"timezone,omitempty"` + Emails []Email `json:"emails,omitempty"` + PhoneNumber string `json:"phone_number,omitempty"` + URL string `json:"href,omitempty"` +} + +func (u User) String() string { + return Stringify(u) +} + +// UserServiceOp implements UserService +type UserServiceOp struct { + client *Client +} + +// Get method gets a user by userID +func (s *UserServiceOp) Get(userID string) (*User, *Response, error) { + user := new(User) + + resp, err := s.client.DoRequest("GET", userBasePath, nil, user) + if err != nil { + return nil, resp, err + } + + return user, resp, err +} + +// Returns the user object for the currently logged-in user. +func (s *UserServiceOp) Current() (*User, *Response, error) { + user := new(User) + + resp, err := s.client.DoRequest("GET", userPath, nil, user) + if err != nil { + return nil, resp, err + } + + return user, resp, err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/utils.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/utils.go new file mode 100644 index 00000000000..57e5ef163a3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/utils.go @@ -0,0 +1,91 @@ +package packngo + +import ( + "bytes" + "fmt" + "io" + "reflect" +) + +var timestampType = reflect.TypeOf(Timestamp{}) + +// Stringify creates a string representation of the provided message +func Stringify(message interface{}) string { + var buf bytes.Buffer + v := reflect.ValueOf(message) + stringifyValue(&buf, v) + return buf.String() +} + +// StreamToString converts a reader to a string +func StreamToString(stream io.Reader) string { + buf := new(bytes.Buffer) + buf.ReadFrom(stream) + return buf.String() +} + +// stringifyValue was graciously cargoculted from the goprotubuf library +func stringifyValue(w io.Writer, val reflect.Value) { + if val.Kind() == reflect.Ptr && val.IsNil() { + w.Write([]byte("")) + return + } + + v := reflect.Indirect(val) + + switch v.Kind() { + case reflect.String: + fmt.Fprintf(w, `"%s"`, v) + case reflect.Slice: + w.Write([]byte{'['}) + for i := 0; i < v.Len(); i++ { + if i > 0 { + w.Write([]byte{' '}) + } + + stringifyValue(w, v.Index(i)) + } + + w.Write([]byte{']'}) + return + case reflect.Struct: + if v.Type().Name() != "" { + w.Write([]byte(v.Type().String())) + } + + // special handling of Timestamp values + if v.Type() == timestampType { + fmt.Fprintf(w, "{%s}", v.Interface()) + return + } + + w.Write([]byte{'{'}) + + var sep bool + for i := 0; i < v.NumField(); i++ { + fv := v.Field(i) + if fv.Kind() == reflect.Ptr && fv.IsNil() { + continue + } + if fv.Kind() == reflect.Slice && fv.IsNil() { + continue + } + + if sep { + w.Write([]byte(", ")) + } else { + sep = true + } + + w.Write([]byte(v.Type().Field(i).Name)) + w.Write([]byte{':'}) + stringifyValue(w, fv) + } + + w.Write([]byte{'}'}) + default: + if v.CanInterface() { + fmt.Fprint(w, v.Interface()) + } + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/virtualnetworks.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/virtualnetworks.go new file mode 100644 index 00000000000..ec0b9fc652e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/virtualnetworks.go @@ -0,0 +1,81 @@ +package packngo + +import ( + "fmt" +) + +const virtualNetworkBasePath = "/virtual-networks" + +// DevicePortService handles operations on a port which belongs to a particular device +type ProjectVirtualNetworkService interface { + List(projectID string) (*VirtualNetworkListResponse, *Response, error) + Create(*VirtualNetworkCreateRequest) (*VirtualNetwork, *Response, error) + Delete(virtualNetworkID string) (*Response, error) +} + +type VirtualNetwork struct { + ID string `json:"id"` + Description string `json:"description,omitempty"` + VXLAN int `json:"vxlan,omitempty"` + FacilityCode string `json:"facility_code,omitempty"` + CreatedAt string `json:"created_at,omitempty"` + Href string `json:"href"` +} + +type ProjectVirtualNetworkServiceOp struct { + client *Client +} + +type VirtualNetworkListResponse struct { + VirtualNetworks []VirtualNetwork `json:"virtual_networks"` +} + +func (i *ProjectVirtualNetworkServiceOp) List(projectID string) (*VirtualNetworkListResponse, *Response, error) { + path := fmt.Sprintf("%s/%s%s", projectBasePath, projectID, virtualNetworkBasePath) + output := new(VirtualNetworkListResponse) + + resp, err := i.client.DoRequest("GET", path, nil, output) + if err != nil { + return nil, nil, err + } + + return output, resp, nil +} + +type VirtualNetworkCreateRequest struct { + ProjectID string `json:"project_id"` + Description string `json:"description"` + Facility string `json:"facility"` + VXLAN int `json:"vxlan"` + VLAN int `json:"vlan"` +} + +type VirtualNetworkCreateResponse struct { + VirtualNetwork VirtualNetwork `json:"virtual_networks"` +} + +func (i *ProjectVirtualNetworkServiceOp) Create(input *VirtualNetworkCreateRequest) (*VirtualNetwork, *Response, error) { + // TODO: May need to add timestamp to output from 'post' request + // for the 'created_at' attribute of VirtualNetwork struct since + // API response doesn't include it + path := fmt.Sprintf("%s/%s%s", projectBasePath, input.ProjectID, virtualNetworkBasePath) + output := new(VirtualNetwork) + + resp, err := i.client.DoRequest("POST", path, input, output) + if err != nil { + return nil, nil, err + } + + return output, resp, nil +} + +func (i *ProjectVirtualNetworkServiceOp) Delete(virtualNetworkID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", virtualNetworkBasePath, virtualNetworkID) + + resp, err := i.client.DoRequest("DELETE", path, nil, nil) + if err != nil { + return nil, err + } + + return resp, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/volumes.go b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/volumes.go new file mode 100644 index 00000000000..772672a37b2 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/github.com/packethost/packngo/volumes.go @@ -0,0 +1,239 @@ +package packngo + +import "fmt" + +const ( + volumeBasePath = "/storage" + attachmentsBasePath = "/attachments" +) + +// VolumeService interface defines available Volume methods +type VolumeService interface { + List(string, *ListOptions) ([]Volume, *Response, error) + Get(string) (*Volume, *Response, error) + Update(string, *VolumeUpdateRequest) (*Volume, *Response, error) + Delete(string) (*Response, error) + Create(*VolumeCreateRequest, string) (*Volume, *Response, error) + Lock(string) (*Response, error) + Unlock(string) (*Response, error) +} + +// VolumeAttachmentService defines attachment methdods +type VolumeAttachmentService interface { + Get(string) (*VolumeAttachment, *Response, error) + Create(string, string) (*VolumeAttachment, *Response, error) + Delete(string) (*Response, error) +} + +type volumesRoot struct { + Volumes []Volume `json:"volumes"` + Meta meta `json:"meta"` +} + +// Volume represents a volume +type Volume struct { + Attachments []*VolumeAttachment `json:"attachments,omitempty"` + BillingCycle string `json:"billing_cycle,omitempty"` + Created string `json:"created_at,omitempty"` + Description string `json:"description,omitempty"` + Facility *Facility `json:"facility,omitempty"` + Href string `json:"href,omitempty"` + ID string `json:"id"` + Locked bool `json:"locked,omitempty"` + Name string `json:"name,omitempty"` + Plan *Plan `json:"plan,omitempty"` + Project *Project `json:"project,omitempty"` + Size int `json:"size,omitempty"` + SnapshotPolicies []*SnapshotPolicy `json:"snapshot_policies,omitempty"` + State string `json:"state,omitempty"` + Updated string `json:"updated_at,omitempty"` +} + +// SnapshotPolicy used to execute actions on volume +type SnapshotPolicy struct { + ID string `json:"id"` + Href string `json:"href"` + SnapshotFrequency string `json:"snapshot_frequency,omitempty"` + SnapshotCount int `json:"snapshot_count,omitempty"` +} + +func (v Volume) String() string { + return Stringify(v) +} + +// VolumeCreateRequest type used to create a Packet volume +type VolumeCreateRequest struct { + BillingCycle string `json:"billing_cycle"` + Description string `json:"description,omitempty"` + Locked bool `json:"locked,omitempty"` + Size int `json:"size"` + PlanID string `json:"plan_id"` + FacilityID string `json:"facility_id"` + SnapshotPolicies []*SnapshotPolicy `json:"snapshot_policies,omitempty"` +} + +func (v VolumeCreateRequest) String() string { + return Stringify(v) +} + +// VolumeUpdateRequest type used to update a Packet volume +type VolumeUpdateRequest struct { + Description *string `json:"description,omitempty"` + PlanID *string `json:"plan_id,omitempty"` + Size *int `json:"size,omitempty"` + BillingCycle *string `json:"billing_cycle,omitempty"` +} + +// VolumeAttachment is a type from Packet API +type VolumeAttachment struct { + Href string `json:"href"` + ID string `json:"id"` + Volume Volume `json:"volume"` + Device Device `json:"device"` +} + +func (v VolumeUpdateRequest) String() string { + return Stringify(v) +} + +// VolumeAttachmentServiceOp implements VolumeService +type VolumeAttachmentServiceOp struct { + client *Client +} + +// VolumeServiceOp implements VolumeService +type VolumeServiceOp struct { + client *Client +} + +// List returns the volumes for a project +func (v *VolumeServiceOp) List(projectID string, listOpt *ListOptions) (volumes []Volume, resp *Response, err error) { + url := fmt.Sprintf("%s/%s%s", projectBasePath, projectID, volumeBasePath) + var params string + if listOpt != nil { + params = listOpt.createURL() + if params != "" { + url = fmt.Sprintf("%s?%s", url, params) + } + } + + for { + subset := new(volumesRoot) + + resp, err = v.client.DoRequest("GET", url, nil, subset) + if err != nil { + return nil, resp, err + } + + volumes = append(volumes, subset.Volumes...) + + if subset.Meta.Next != nil && (listOpt == nil || listOpt.Page == 0) { + url = subset.Meta.Next.Href + if params != "" { + url = fmt.Sprintf("%s&%s", url, params) + } + continue + } + + return + } +} + +// Get returns a volume by id +func (v *VolumeServiceOp) Get(volumeID string) (*Volume, *Response, error) { + path := fmt.Sprintf("%s/%s?include=facility,snapshot_policies,attachments.device", volumeBasePath, volumeID) + volume := new(Volume) + + resp, err := v.client.DoRequest("GET", path, nil, volume) + if err != nil { + return nil, resp, err + } + + return volume, resp, err +} + +// Update updates a volume +func (v *VolumeServiceOp) Update(id string, updateRequest *VolumeUpdateRequest) (*Volume, *Response, error) { + path := fmt.Sprintf("%s/%s", volumeBasePath, id) + volume := new(Volume) + + resp, err := v.client.DoRequest("PATCH", path, updateRequest, volume) + if err != nil { + return nil, resp, err + } + + return volume, resp, err +} + +// Delete deletes a volume +func (v *VolumeServiceOp) Delete(volumeID string) (*Response, error) { + path := fmt.Sprintf("%s/%s", volumeBasePath, volumeID) + + return v.client.DoRequest("DELETE", path, nil, nil) +} + +// Create creates a new volume for a project +func (v *VolumeServiceOp) Create(createRequest *VolumeCreateRequest, projectID string) (*Volume, *Response, error) { + url := fmt.Sprintf("%s/%s%s", projectBasePath, projectID, volumeBasePath) + volume := new(Volume) + + resp, err := v.client.DoRequest("POST", url, createRequest, volume) + if err != nil { + return nil, resp, err + } + + return volume, resp, err +} + +// Attachments + +// Create Attachment, i.e. attach volume to a device +func (v *VolumeAttachmentServiceOp) Create(volumeID, deviceID string) (*VolumeAttachment, *Response, error) { + url := fmt.Sprintf("%s/%s%s", volumeBasePath, volumeID, attachmentsBasePath) + volAttachParam := map[string]string{ + "device_id": deviceID, + } + volumeAttachment := new(VolumeAttachment) + + resp, err := v.client.DoRequest("POST", url, volAttachParam, volumeAttachment) + if err != nil { + return nil, resp, err + } + return volumeAttachment, resp, nil +} + +// Get gets attachment by id +func (v *VolumeAttachmentServiceOp) Get(attachmentID string) (*VolumeAttachment, *Response, error) { + path := fmt.Sprintf("%s%s/%s", volumeBasePath, attachmentsBasePath, attachmentID) + volumeAttachment := new(VolumeAttachment) + + resp, err := v.client.DoRequest("GET", path, nil, volumeAttachment) + if err != nil { + return nil, resp, err + } + + return volumeAttachment, resp, nil +} + +// Delete deletes attachment by id +func (v *VolumeAttachmentServiceOp) Delete(attachmentID string) (*Response, error) { + path := fmt.Sprintf("%s%s/%s", volumeBasePath, attachmentsBasePath, attachmentID) + + return v.client.DoRequest("DELETE", path, nil, nil) +} + +// Lock sets a volume to "locked" +func (s *VolumeServiceOp) Lock(id string) (*Response, error) { + path := fmt.Sprintf("%s/%s", volumeBasePath, id) + action := lockType{Locked: true} + + return s.client.DoRequest("PATCH", path, action, nil) +} + +// Unlock sets a volume to "unlocked" +func (s *VolumeServiceOp) Unlock(id string) (*Response, error) { + path := fmt.Sprintf("%s/%s", volumeBasePath, id) + action := lockType{Locked: false} + + return s.client.DoRequest("PATCH", path, action, nil) +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/vendor.json b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/vendor.json new file mode 100644 index 00000000000..fca041e34c6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/packet/vendor/vendor.json @@ -0,0 +1,13 @@ +{ + "comment": "", + "ignore": "test", + "package": [ + { + "checksumSHA1": "kItpnJu5G9MVC56waIyHLoQZt/s=", + "path": "github.com/packethost/packngo", + "revision": "b9cb5096f54c96687565b2f24be642483fb3fcf3", + "revisionTime": "2018-07-11T07:47:35Z" + } + ], + "rootPath": "github.com/hashicorp/go-discover/provider/packet" +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/scaleway_discover.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/scaleway_discover.go index 11bd2dab873..043cb2fe908 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/scaleway_discover.go +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/scaleway_discover.go @@ -6,7 +6,7 @@ import ( "io/ioutil" "log" - "github.com/nicolai86/scaleway-sdk/api" + api "github.com/nicolai86/scaleway-sdk" ) type Provider struct{} @@ -58,7 +58,7 @@ func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error // Filter servers by tag var addrs []string if servers != nil { - for _, server := range *servers { + for _, server := range servers { if stringInSlice(tagName, server.Tags) { l.Printf("[DEBUG] discover-scaleway: Found server (%s) - %s with private IP: %s", server.Name, server.Hostname, server.PrivateIP) diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/LICENSE.md b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/LICENSE.md index 7503a16ca20..12e056f64e0 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/LICENSE.md +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/LICENSE.md @@ -1,8 +1,6 @@ The MIT License =============== -Copyright (c) **2014-2016 Scaleway ([@scaleway](https://twitter.com/scaleway))** - Permission 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 diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/README.md b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/README.md new file mode 100644 index 00000000000..b0c8dc1fe19 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/README.md @@ -0,0 +1,9 @@ +# Scaleway SDK + +A fork of the scaleway cli repository which only aims at being an API SDK - nothing more. + +## Tests + +```bash +$ go test ./... +``` \ No newline at end of file diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api.go new file mode 100644 index 00000000000..fad62e78c3e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api.go @@ -0,0 +1,302 @@ +// Copyright (C) 2015 . All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE.md file. + +// Interact with API + +// Package api contains client and functions to interact with API +package api + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "os" + "strconv" + "strings" + + "golang.org/x/sync/errgroup" +) + +// https://cp-par1..com/products/servers +// https://cp-ams1..com/products/servers +// Default values +var ( + AccountAPI = "https://account.scaleway.com/" + MetadataAPI = "http://169.254.42.42/" + MarketplaceAPI = "https://api-marketplace.scaleway.com" + ComputeAPIPar1 = "https://cp-par1.scaleway.com/" + ComputeAPIAms1 = "https://cp-ams1.scaleway.com/" + + URLPublicDNS = ".pub.cloud.scaleway.com" + URLPrivateDNS = ".priv.cloud.scaleway.com" +) + +func init() { + if url := os.Getenv("SCW_ACCOUNT_API"); url != "" { + AccountAPI = url + } + if url := os.Getenv("SCW_METADATA_API"); url != "" { + MetadataAPI = url + } + if url := os.Getenv("SCW_MARKETPLACE_API"); url != "" { + MarketplaceAPI = url + } +} + +const ( + perPage = 50 +) + +// HTTPClient wraps the net/http Client Do method +type HTTPClient interface { + Do(*http.Request) (*http.Response, error) +} + +// API is the interface used to communicate with the API +type API struct { + Organization string // Organization is the identifier of the organization + Token string // Token is the authentication token for the organization + Client HTTPClient // Client is used for all HTTP interactions + + password string // Password is the authentication password + userAgent string + computeAPI string + + Region string +} + +// APIError represents a API Error +type APIError struct { + // Message is a human-friendly error message + APIMessage string `json:"message,omitempty"` + + // Type is a string code that defines the kind of error + Type string `json:"type,omitempty"` + + // Fields contains detail about validation error + Fields map[string][]string `json:"fields,omitempty"` + + // StatusCode is the HTTP status code received + StatusCode int `json:"-"` + + // Message + Message string `json:"-"` +} + +// Error returns a string representing the error +func (e APIError) Error() string { + var b bytes.Buffer + + fmt.Fprintf(&b, "StatusCode: %v, ", e.StatusCode) + fmt.Fprintf(&b, "Type: %v, ", e.Type) + fmt.Fprintf(&b, "APIMessage: \x1b[31m%v\x1b[0m", e.APIMessage) + if len(e.Fields) > 0 { + fmt.Fprintf(&b, ", Details: %v", e.Fields) + } + return b.String() +} + +// New creates a ready-to-use SDK client +func New(organization, token, region string, options ...func(*API)) (*API, error) { + s := &API{ + // exposed + Organization: organization, + Token: token, + Client: &http.Client{}, + + // internal + password: "", + userAgent: "-sdk", + } + for _, option := range options { + option(s) + } + switch region { + case "par1", "": + s.computeAPI = ComputeAPIPar1 + case "ams1": + s.computeAPI = ComputeAPIAms1 + default: + return nil, fmt.Errorf("%s isn't a valid region", region) + } + s.Region = region + if url := os.Getenv("SCW_COMPUTE_API"); url != "" { + s.computeAPI = url + } + return s, nil +} + +func (s *API) response(method, uri string, content io.Reader) (resp *http.Response, err error) { + var ( + req *http.Request + ) + + req, err = http.NewRequest(method, uri, content) + if err != nil { + err = fmt.Errorf("response %s %s", method, uri) + return + } + req.Header.Set("X-Auth-Token", s.Token) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("User-Agent", s.userAgent) + resp, err = s.Client.Do(req) + return +} + +// GetResponsePaginate fetchs all resources and returns an http.Response object for the requested resource +func (s *API) GetResponsePaginate(apiURL, resource string, values url.Values) (*http.Response, error) { + resp, err := s.response("HEAD", fmt.Sprintf("%s/%s?%s", strings.TrimRight(apiURL, "/"), resource, values.Encode()), nil) + if err != nil { + return nil, err + } + + count := resp.Header.Get("X-Total-Count") + var maxElem int + if count == "" { + maxElem = 0 + } else { + maxElem, err = strconv.Atoi(count) + if err != nil { + return nil, err + } + } + + get := maxElem / perPage + if (float32(maxElem) / perPage) > float32(get) { + get++ + } + + if get <= 1 { // If there is 0 or 1 page of result, the response is not paginated + if len(values) == 0 { + return s.response("GET", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), nil) + } + return s.response("GET", fmt.Sprintf("%s/%s?%s", strings.TrimRight(apiURL, "/"), resource, values.Encode()), nil) + } + + fetchAll := !(values.Get("per_page") != "" || values.Get("page") != "") + if fetchAll { + var g errgroup.Group + + ch := make(chan *http.Response, get) + for i := 1; i <= get; i++ { + i := i // closure tricks + g.Go(func() (err error) { + var resp *http.Response + + val := url.Values{} + val.Set("per_page", fmt.Sprintf("%v", perPage)) + val.Set("page", fmt.Sprintf("%v", i)) + resp, err = s.response("GET", fmt.Sprintf("%s/%s?%s", strings.TrimRight(apiURL, "/"), resource, val.Encode()), nil) + ch <- resp + return + }) + } + if err = g.Wait(); err != nil { + return nil, err + } + newBody := make(map[string][]json.RawMessage) + body := make(map[string][]json.RawMessage) + key := "" + for i := 0; i < get; i++ { + res := <-ch + if res.StatusCode != http.StatusOK { + return res, nil + } + content, err := ioutil.ReadAll(res.Body) + res.Body.Close() + if err != nil { + return nil, err + } + if err := json.Unmarshal(content, &body); err != nil { + return nil, err + } + + if i == 0 { + resp = res + for k := range body { + key = k + break + } + } + newBody[key] = append(newBody[key], body[key]...) + } + payload := new(bytes.Buffer) + if err := json.NewEncoder(payload).Encode(newBody); err != nil { + return nil, err + } + resp.Body = ioutil.NopCloser(payload) + } else { + resp, err = s.response("GET", fmt.Sprintf("%s/%s?%s", strings.TrimRight(apiURL, "/"), resource, values.Encode()), nil) + } + return resp, err +} + +// PostResponse returns an http.Response object for the updated resource +func (s *API) PostResponse(apiURL, resource string, data interface{}) (*http.Response, error) { + payload := new(bytes.Buffer) + if err := json.NewEncoder(payload).Encode(data); err != nil { + return nil, err + } + return s.response("POST", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), payload) +} + +// PatchResponse returns an http.Response object for the updated resource +func (s *API) PatchResponse(apiURL, resource string, data interface{}) (*http.Response, error) { + payload := new(bytes.Buffer) + if err := json.NewEncoder(payload).Encode(data); err != nil { + return nil, err + } + return s.response("PATCH", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), payload) +} + +// PutResponse returns an http.Response object for the updated resource +func (s *API) PutResponse(apiURL, resource string, data interface{}) (*http.Response, error) { + payload := new(bytes.Buffer) + if err := json.NewEncoder(payload).Encode(data); err != nil { + return nil, err + } + return s.response("PUT", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), payload) +} + +// DeleteResponse returns an http.Response object for the deleted resource +func (s *API) DeleteResponse(apiURL, resource string) (*http.Response, error) { + return s.response("DELETE", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), nil) +} + +// handleHTTPError checks the statusCode and displays the error +func (s *API) handleHTTPError(goodStatusCode []int, resp *http.Response) ([]byte, error) { + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + if resp.StatusCode >= http.StatusInternalServerError { + return nil, errors.New(string(body)) + } + + for _, code := range goodStatusCode { + if code == resp.StatusCode { + return body, nil + } + } + + var scwError APIError + scwError.StatusCode = resp.StatusCode + if len(body) > 0 { + if err := json.Unmarshal(body, &scwError); err != nil { + return nil, err + } + } + return nil, scwError +} + +// SetPassword register the password +func (s *API) SetPassword(password string) { + s.password = password +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/api.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/api.go deleted file mode 100644 index 82ddd25ad9a..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/api.go +++ /dev/null @@ -1,317 +0,0 @@ -// Copyright (C) 2015 Scaleway. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE.md file. - -// Interact with Scaleway API - -// Package api contains client and functions to interact with Scaleway API -package api - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/url" - "os" - "strconv" - "strings" - - "golang.org/x/sync/errgroup" -) - -// https://cp-par1.scaleway.com/products/servers -// https://cp-ams1.scaleway.com/products/servers -// Default values -var ( - AccountAPI = "https://account.scaleway.com/" - MetadataAPI = "http://169.254.42.42/" - MarketplaceAPI = "https://api-marketplace.scaleway.com" - ComputeAPIPar1 = "https://cp-par1.scaleway.com/" - ComputeAPIAms1 = "https://cp-ams1.scaleway.com/" - AvailabilityAPIPar1 = "https://availability.scaleway.com/" - AvailabilityAPIAms1 = "https://availability-ams1.scaleway.com/" - - URLPublicDNS = ".pub.cloud.scaleway.com" - URLPrivateDNS = ".priv.cloud.scaleway.com" -) - -func init() { - if url := os.Getenv("SCW_ACCOUNT_API"); url != "" { - AccountAPI = url - } - if url := os.Getenv("SCW_METADATA_API"); url != "" { - MetadataAPI = url - } - if url := os.Getenv("SCW_MARKETPLACE_API"); url != "" { - MarketplaceAPI = url - } -} - -const ( - perPage = 50 -) - -// HTTPClient wraps the net/http Client Do method -type HTTPClient interface { - Do(*http.Request) (*http.Response, error) -} - -// ScalewayAPI is the interface used to communicate with the Scaleway API -type ScalewayAPI struct { - // Organization is the identifier of the Scaleway organization - Organization string - - // Token is the authentication token for the Scaleway organization - Token string - - // Password is the authentication password - password string - - userAgent string - - client HTTPClient - computeAPI string - availabilityAPI string - - Region string -} - -// ScalewayAPIError represents a Scaleway API Error -type ScalewayAPIError struct { - // Message is a human-friendly error message - APIMessage string `json:"message,omitempty"` - - // Type is a string code that defines the kind of error - Type string `json:"type,omitempty"` - - // Fields contains detail about validation error - Fields map[string][]string `json:"fields,omitempty"` - - // StatusCode is the HTTP status code received - StatusCode int `json:"-"` - - // Message - Message string `json:"-"` -} - -// Error returns a string representing the error -func (e ScalewayAPIError) Error() string { - var b bytes.Buffer - - fmt.Fprintf(&b, "StatusCode: %v, ", e.StatusCode) - fmt.Fprintf(&b, "Type: %v, ", e.Type) - fmt.Fprintf(&b, "APIMessage: \x1b[31m%v\x1b[0m", e.APIMessage) - if len(e.Fields) > 0 { - fmt.Fprintf(&b, ", Details: %v", e.Fields) - } - return b.String() -} - -// New creates a ready-to-use Scaleway SDK client -func New(organization, token, region string, options ...func(*ScalewayAPI)) (*ScalewayAPI, error) { - s := &ScalewayAPI{ - // exposed - Organization: organization, - Token: token, - - // internal - client: &http.Client{}, - password: "", - userAgent: "scaleway-sdk", - } - for _, option := range options { - option(s) - } - switch region { - case "par1", "": - s.computeAPI = ComputeAPIPar1 - s.availabilityAPI = AvailabilityAPIPar1 - case "ams1": - s.computeAPI = ComputeAPIAms1 - s.availabilityAPI = AvailabilityAPIAms1 - default: - return nil, fmt.Errorf("%s isn't a valid region", region) - } - s.Region = region - if url := os.Getenv("SCW_COMPUTE_API"); url != "" { - s.computeAPI = url - } - if url := os.Getenv("SCW_AVAILABILITY_API"); url != "" { - s.availabilityAPI = url - } - return s, nil -} - -func (s *ScalewayAPI) response(method, uri string, content io.Reader) (resp *http.Response, err error) { - var ( - req *http.Request - ) - - req, err = http.NewRequest(method, uri, content) - if err != nil { - err = fmt.Errorf("response %s %s", method, uri) - return - } - req.Header.Set("X-Auth-Token", s.Token) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("User-Agent", s.userAgent) - resp, err = s.client.Do(req) - return -} - -// GetResponsePaginate fetchs all resources and returns an http.Response object for the requested resource -func (s *ScalewayAPI) GetResponsePaginate(apiURL, resource string, values url.Values) (*http.Response, error) { - resp, err := s.response("HEAD", fmt.Sprintf("%s/%s?%s", strings.TrimRight(apiURL, "/"), resource, values.Encode()), nil) - if err != nil { - return nil, err - } - - count := resp.Header.Get("X-Total-Count") - var maxElem int - if count == "" { - maxElem = 0 - } else { - maxElem, err = strconv.Atoi(count) - if err != nil { - return nil, err - } - } - - get := maxElem / perPage - if (float32(maxElem) / perPage) > float32(get) { - get++ - } - - if get <= 1 { // If there is 0 or 1 page of result, the response is not paginated - if len(values) == 0 { - return s.response("GET", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), nil) - } - return s.response("GET", fmt.Sprintf("%s/%s?%s", strings.TrimRight(apiURL, "/"), resource, values.Encode()), nil) - } - - fetchAll := !(values.Get("per_page") != "" || values.Get("page") != "") - if fetchAll { - var g errgroup.Group - - ch := make(chan *http.Response, get) - for i := 1; i <= get; i++ { - i := i // closure tricks - g.Go(func() (err error) { - var resp *http.Response - - val := url.Values{} - val.Set("per_page", fmt.Sprintf("%v", perPage)) - val.Set("page", fmt.Sprintf("%v", i)) - resp, err = s.response("GET", fmt.Sprintf("%s/%s?%s", strings.TrimRight(apiURL, "/"), resource, val.Encode()), nil) - ch <- resp - return - }) - } - if err = g.Wait(); err != nil { - return nil, err - } - newBody := make(map[string][]json.RawMessage) - body := make(map[string][]json.RawMessage) - key := "" - for i := 0; i < get; i++ { - res := <-ch - if res.StatusCode != http.StatusOK { - return res, nil - } - content, err := ioutil.ReadAll(res.Body) - res.Body.Close() - if err != nil { - return nil, err - } - if err := json.Unmarshal(content, &body); err != nil { - return nil, err - } - - if i == 0 { - resp = res - for k := range body { - key = k - break - } - } - newBody[key] = append(newBody[key], body[key]...) - } - payload := new(bytes.Buffer) - if err := json.NewEncoder(payload).Encode(newBody); err != nil { - return nil, err - } - resp.Body = ioutil.NopCloser(payload) - } else { - resp, err = s.response("GET", fmt.Sprintf("%s/%s?%s", strings.TrimRight(apiURL, "/"), resource, values.Encode()), nil) - } - return resp, err -} - -// PostResponse returns an http.Response object for the updated resource -func (s *ScalewayAPI) PostResponse(apiURL, resource string, data interface{}) (*http.Response, error) { - payload := new(bytes.Buffer) - if err := json.NewEncoder(payload).Encode(data); err != nil { - return nil, err - } - return s.response("POST", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), payload) -} - -// PatchResponse returns an http.Response object for the updated resource -func (s *ScalewayAPI) PatchResponse(apiURL, resource string, data interface{}) (*http.Response, error) { - payload := new(bytes.Buffer) - if err := json.NewEncoder(payload).Encode(data); err != nil { - return nil, err - } - return s.response("PATCH", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), payload) -} - -// PutResponse returns an http.Response object for the updated resource -func (s *ScalewayAPI) PutResponse(apiURL, resource string, data interface{}) (*http.Response, error) { - payload := new(bytes.Buffer) - if err := json.NewEncoder(payload).Encode(data); err != nil { - return nil, err - } - return s.response("PUT", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), payload) -} - -// DeleteResponse returns an http.Response object for the deleted resource -func (s *ScalewayAPI) DeleteResponse(apiURL, resource string) (*http.Response, error) { - return s.response("DELETE", fmt.Sprintf("%s/%s", strings.TrimRight(apiURL, "/"), resource), nil) -} - -// handleHTTPError checks the statusCode and displays the error -func (s *ScalewayAPI) handleHTTPError(goodStatusCode []int, resp *http.Response) ([]byte, error) { - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, err - } - - if resp.StatusCode >= http.StatusInternalServerError { - return nil, errors.New(string(body)) - } - good := false - for _, code := range goodStatusCode { - if code == resp.StatusCode { - good = true - } - } - if !good { - var scwError ScalewayAPIError - - if err := json.Unmarshal(body, &scwError); err != nil { - return nil, err - } - scwError.StatusCode = resp.StatusCode - return nil, scwError - } - return body, nil -} - -// SetPassword register the password -func (s *ScalewayAPI) SetPassword(password string) { - s.password = password -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/availability.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/availability.go deleted file mode 100644 index fe5e23ac14b..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/availability.go +++ /dev/null @@ -1,37 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "io/ioutil" -) - -type ServerAvailabilities map[string]interface{} - -func (a ServerAvailabilities) CommercialTypes() []string { - types := []string{} - for k, v := range a { - if _, ok := v.(bool); !ok { - continue - } - types = append(types, k) - } - return types -} - -func (s *ScalewayAPI) GetServerAvailabilities() (ServerAvailabilities, error) { - resp, err := s.response("GET", fmt.Sprintf("%s/availability.json", s.availabilityAPI), nil) - if err != nil { - return nil, err - } - defer resp.Body.Close() - bs, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, err - } - content := ServerAvailabilities{} - if err := json.Unmarshal(bs, &content); err != nil { - return nil, err - } - return content, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/bootscript.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/bootscript.go deleted file mode 100644 index 67849c6946b..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/bootscript.go +++ /dev/null @@ -1,86 +0,0 @@ -package api - -import ( - "encoding/json" - "net/http" - "net/url" -) - -// ScalewayBootscript represents a Scaleway Bootscript -type ScalewayBootscript struct { - Bootcmdargs string `json:"bootcmdargs,omitempty"` - Dtb string `json:"dtb,omitempty"` - Initrd string `json:"initrd,omitempty"` - Kernel string `json:"kernel,omitempty"` - - // Arch is the architecture target of the bootscript - Arch string `json:"architecture,omitempty"` - - // Identifier is a unique identifier for the bootscript - Identifier string `json:"id,omitempty"` - - // Organization is the owner of the bootscript - Organization string `json:"organization,omitempty"` - - // Name is a user-defined name for the bootscript - Title string `json:"title,omitempty"` - - // Public is true for public bootscripts and false for user bootscripts - Public bool `json:"public,omitempty"` - - Default bool `json:"default,omitempty"` -} - -// ScalewayOneBootscript represents the response of a GET /bootscripts/UUID API call -type ScalewayOneBootscript struct { - Bootscript ScalewayBootscript `json:"bootscript,omitempty"` -} - -// ScalewayBootscripts represents a group of Scaleway bootscripts -type ScalewayBootscripts struct { - // Bootscripts holds Scaleway bootscripts of the response - Bootscripts []ScalewayBootscript `json:"bootscripts,omitempty"` -} - -// GetBootscripts gets the list of bootscripts from the ScalewayAPI -func (s *ScalewayAPI) GetBootscripts() (*[]ScalewayBootscript, error) { - query := url.Values{} - - resp, err := s.GetResponsePaginate(s.computeAPI, "bootscripts", query) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var bootscripts ScalewayBootscripts - - if err = json.Unmarshal(body, &bootscripts); err != nil { - return nil, err - } - return &bootscripts.Bootscripts, nil -} - -// GetBootscript gets a bootscript from the ScalewayAPI -func (s *ScalewayAPI) GetBootscript(bootscriptID string) (*ScalewayBootscript, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, "bootscripts/"+bootscriptID, url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var oneBootscript ScalewayOneBootscript - - if err = json.Unmarshal(body, &oneBootscript); err != nil { - return nil, err - } - // FIXME region, arch, owner, title - return &oneBootscript.Bootscript, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/container.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/container.go deleted file mode 100644 index d1173b20fc0..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/container.go +++ /dev/null @@ -1,72 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewayContainerData represents a Scaleway container data (S3) -type ScalewayContainerData struct { - LastModified string `json:"last_modified"` - Name string `json:"name"` - Size string `json:"size"` -} - -// ScalewayGetContainerDatas represents a list of Scaleway containers data (S3) -type ScalewayGetContainerDatas struct { - Container []ScalewayContainerData `json:"container"` -} - -// ScalewayContainer represents a Scaleway container (S3) -type ScalewayContainer struct { - ScalewayOrganizationDefinition `json:"organization"` - Name string `json:"name"` - Size string `json:"size"` -} - -// ScalewayGetContainers represents a list of Scaleway containers (S3) -type ScalewayGetContainers struct { - Containers []ScalewayContainer `json:"containers"` -} - -// GetContainers returns a ScalewayGetContainers -func (s *ScalewayAPI) GetContainers() (*ScalewayGetContainers, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, "containers", url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var containers ScalewayGetContainers - - if err = json.Unmarshal(body, &containers); err != nil { - return nil, err - } - return &containers, nil -} - -// GetContainerDatas returns a ScalewayGetContainerDatas -func (s *ScalewayAPI) GetContainerDatas(container string) (*ScalewayGetContainerDatas, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("containers/%s", container), url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var datas ScalewayGetContainerDatas - - if err = json.Unmarshal(body, &datas); err != nil { - return nil, err - } - return &datas, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/dashboard.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/dashboard.go deleted file mode 100644 index 6835ab4b401..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/dashboard.go +++ /dev/null @@ -1,42 +0,0 @@ -package api - -import ( - "encoding/json" - "net/http" - "net/url" -) - -// ScalewayDashboardResp represents a dashboard received from the API -type ScalewayDashboardResp struct { - Dashboard ScalewayDashboard -} - -// ScalewayDashboard represents a dashboard -type ScalewayDashboard struct { - VolumesCount int `json:"volumes_count"` - RunningServersCount int `json:"running_servers_count"` - ImagesCount int `json:"images_count"` - SnapshotsCount int `json:"snapshots_count"` - ServersCount int `json:"servers_count"` - IPsCount int `json:"ips_count"` -} - -// GetDashboard returns the dashboard -func (s *ScalewayAPI) GetDashboard() (*ScalewayDashboard, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, "dashboard", url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var dashboard ScalewayDashboardResp - - if err = json.Unmarshal(body, &dashboard); err != nil { - return nil, err - } - return &dashboard.Dashboard, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/ip.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/ip.go deleted file mode 100644 index cd746453ce3..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/ip.go +++ /dev/null @@ -1,166 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewayIPV6Definition represents a Scaleway ipv6 -type ScalewayIPV6Definition struct { - Netmask string `json:"netmask"` - Gateway string `json:"gateway"` - Address string `json:"address"` -} - -// ScalewayIPDefinition represents the IP's fields -type ScalewayIPDefinition struct { - Organization string `json:"organization"` - Reverse *string `json:"reverse"` - ID string `json:"id"` - Server *struct { - Identifier string `json:"id,omitempty"` - Name string `json:"name,omitempty"` - } `json:"server"` - Address string `json:"address"` -} - -// ScalewayIPAddress represents a Scaleway IP address -type ScalewayIPAddress struct { - // Identifier is a unique identifier for the IP address - Identifier string `json:"id,omitempty"` - - // IP is an IPv4 address - IP string `json:"address,omitempty"` - - // Dynamic is a flag that defines an IP that change on each reboot - Dynamic *bool `json:"dynamic,omitempty"` -} - -// ScalewayGetIPS represents the response of a GET /ips/ -type ScalewayGetIPS struct { - IPS []ScalewayIPDefinition `json:"ips"` -} - -// ScalewayGetIP represents the response of a GET /ips/{id_ip} -type ScalewayGetIP struct { - IP ScalewayIPDefinition `json:"ip"` -} - -// GetIP returns a ScalewayGetIP -func (s *ScalewayAPI) GetIP(ipID string) (*ScalewayGetIP, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("ips/%s", ipID), url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var ip ScalewayGetIP - - if err = json.Unmarshal(body, &ip); err != nil { - return nil, err - } - return &ip, nil -} - -// GetIPS returns a ScalewayGetIPS -func (s *ScalewayAPI) GetIPS() (*ScalewayGetIPS, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, "ips", url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var ips ScalewayGetIPS - - if err = json.Unmarshal(body, &ips); err != nil { - return nil, err - } - return &ips, nil -} - -// NewIP returns a new IP -func (s *ScalewayAPI) NewIP() (*ScalewayGetIP, error) { - var orga struct { - Organization string `json:"organization"` - } - orga.Organization = s.Organization - resp, err := s.PostResponse(s.computeAPI, "ips", orga) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) - if err != nil { - return nil, err - } - var ip ScalewayGetIP - - if err = json.Unmarshal(body, &ip); err != nil { - return nil, err - } - return &ip, nil -} - -// AttachIP attachs an IP to a server -func (s *ScalewayAPI) AttachIP(ipID, serverID string) error { - var update struct { - Address string `json:"address"` - ID string `json:"id"` - Reverse *string `json:"reverse"` - Organization string `json:"organization"` - Server string `json:"server"` - } - - ip, err := s.GetIP(ipID) - if err != nil { - return err - } - update.Address = ip.IP.Address - update.ID = ip.IP.ID - update.Organization = ip.IP.Organization - update.Server = serverID - resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("ips/%s", ipID), update) - if err != nil { - return err - } - _, err = s.handleHTTPError([]int{http.StatusOK}, resp) - return err -} - -// DetachIP detaches an IP from a server -func (s *ScalewayAPI) DetachIP(ipID string) error { - ip, err := s.GetIP(ipID) - if err != nil { - return err - } - ip.IP.Server = nil - resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("ips/%s", ipID), ip.IP) - if err != nil { - return err - } - defer resp.Body.Close() - _, err = s.handleHTTPError([]int{http.StatusOK}, resp) - return err -} - -// DeleteIP deletes an IP -func (s *ScalewayAPI) DeleteIP(ipID string) error { - resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("ips/%s", ipID)) - if err != nil { - return err - } - defer resp.Body.Close() - _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp) - return err -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/organization.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/organization.go deleted file mode 100644 index 29e4b436fb8..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/organization.go +++ /dev/null @@ -1,39 +0,0 @@ -package api - -import ( - "encoding/json" - "net/http" - "net/url" -) - -// ScalewayOrganizationDefinition represents a Scaleway Organization -type ScalewayOrganizationDefinition struct { - ID string `json:"id"` - Name string `json:"name"` - Users []ScalewayUserDefinition `json:"users"` -} - -// ScalewayOrganizationsDefinition represents a Scaleway Organizations -type ScalewayOrganizationsDefinition struct { - Organizations []ScalewayOrganizationDefinition `json:"organizations"` -} - -// GetOrganization returns Organization -func (s *ScalewayAPI) GetOrganization() (*ScalewayOrganizationsDefinition, error) { - resp, err := s.GetResponsePaginate(AccountAPI, "organizations", url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var data ScalewayOrganizationsDefinition - - if err = json.Unmarshal(body, &data); err != nil { - return nil, err - } - return &data, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/permissions.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/permissions.go deleted file mode 100644 index c3cdaaa4760..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/permissions.go +++ /dev/null @@ -1,39 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewayPermissions represents the response of GET /permissions -type ScalewayPermissions map[string]ScalewayPermCategory - -// ScalewayPermCategory represents ScalewayPermissions's fields -type ScalewayPermCategory map[string][]string - -// ScalewayPermissionDefinition represents the permissions -type ScalewayPermissionDefinition struct { - Permissions ScalewayPermissions `json:"permissions"` -} - -// GetPermissions returns the permissions -func (s *ScalewayAPI) GetPermissions() (*ScalewayPermissionDefinition, error) { - resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("tokens/%s/permissions", s.Token), url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var permissions ScalewayPermissionDefinition - - if err = json.Unmarshal(body, &permissions); err != nil { - return nil, err - } - return &permissions, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/quota.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/quota.go deleted file mode 100644 index a83023670e8..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/quota.go +++ /dev/null @@ -1,36 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewayQuota represents a map of quota (name, value) -type ScalewayQuota map[string]int - -// ScalewayGetQuotas represents the response of GET /organizations/{orga_id}/quotas -type ScalewayGetQuotas struct { - Quotas ScalewayQuota `json:"quotas"` -} - -// GetQuotas returns a ScalewayGetQuotas -func (s *ScalewayAPI) GetQuotas() (*ScalewayGetQuotas, error) { - resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("organizations/%s/quotas", s.Organization), url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var quotas ScalewayGetQuotas - - if err = json.Unmarshal(body, "as); err != nil { - return nil, err - } - return "as, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/security_group.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/security_group.go deleted file mode 100644 index 26b5cef4e6c..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/security_group.go +++ /dev/null @@ -1,129 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewaySecurityGroups definition -type ScalewaySecurityGroups struct { - Description string `json:"description"` - ID string `json:"id"` - Organization string `json:"organization"` - Name string `json:"name"` - Servers []ScalewaySecurityGroup `json:"servers"` - EnableDefaultSecurity bool `json:"enable_default_security"` - OrganizationDefault bool `json:"organization_default"` -} - -// ScalewayGetSecurityGroups represents the response of a GET /security_groups/ -type ScalewayGetSecurityGroups struct { - SecurityGroups []ScalewaySecurityGroups `json:"security_groups"` -} - -// ScalewayGetSecurityGroup represents the response of a GET /security_groups/{groupID} -type ScalewayGetSecurityGroup struct { - SecurityGroups ScalewaySecurityGroups `json:"security_group"` -} - -// ScalewaySecurityGroup represents a Scaleway security group -type ScalewaySecurityGroup struct { - // Identifier is a unique identifier for the security group - Identifier string `json:"id,omitempty"` - - // Name is the user-defined name of the security group - Name string `json:"name,omitempty"` -} - -// ScalewayNewSecurityGroup definition POST request /security_groups -type ScalewayNewSecurityGroup struct { - Organization string `json:"organization"` - Name string `json:"name"` - Description string `json:"description"` -} - -// ScalewayUpdateSecurityGroup definition PUT request /security_groups -type ScalewayUpdateSecurityGroup struct { - Organization string `json:"organization"` - Name string `json:"name"` - Description string `json:"description"` - OrganizationDefault bool `json:"organization_default"` -} - -// DeleteSecurityGroup deletes a SecurityGroup -func (s *ScalewayAPI) DeleteSecurityGroup(securityGroupID string) error { - resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("security_groups/%s", securityGroupID)) - if err != nil { - return err - } - defer resp.Body.Close() - - _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp) - return err -} - -// PutSecurityGroup updates a SecurityGroup -func (s *ScalewayAPI) PutSecurityGroup(group ScalewayUpdateSecurityGroup, securityGroupID string) error { - resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("security_groups/%s", securityGroupID), group) - if err != nil { - return err - } - defer resp.Body.Close() - - _, err = s.handleHTTPError([]int{http.StatusOK}, resp) - return err -} - -// GetASecurityGroup returns a ScalewaySecurityGroup -func (s *ScalewayAPI) GetASecurityGroup(groupsID string) (*ScalewayGetSecurityGroup, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("security_groups/%s", groupsID), url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var securityGroups ScalewayGetSecurityGroup - - if err = json.Unmarshal(body, &securityGroups); err != nil { - return nil, err - } - return &securityGroups, nil -} - -// PostSecurityGroup posts a group on a server -func (s *ScalewayAPI) PostSecurityGroup(group ScalewayNewSecurityGroup) error { - resp, err := s.PostResponse(s.computeAPI, "security_groups", group) - if err != nil { - return err - } - defer resp.Body.Close() - - _, err = s.handleHTTPError([]int{http.StatusCreated}, resp) - return err -} - -// GetSecurityGroups returns a ScalewaySecurityGroups -func (s *ScalewayAPI) GetSecurityGroups() (*ScalewayGetSecurityGroups, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, "security_groups", url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var securityGroups ScalewayGetSecurityGroups - - if err = json.Unmarshal(body, &securityGroups); err != nil { - return nil, err - } - return &securityGroups, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/security_group_rule.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/security_group_rule.go deleted file mode 100644 index 0735c8d380a..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/security_group_rule.go +++ /dev/null @@ -1,116 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewaySecurityGroupRule definition -type ScalewaySecurityGroupRule struct { - Direction string `json:"direction"` - Protocol string `json:"protocol"` - IPRange string `json:"ip_range"` - DestPortFrom int `json:"dest_port_from,omitempty"` - Action string `json:"action"` - Position int `json:"position"` - DestPortTo string `json:"dest_port_to"` - Editable bool `json:"editable"` - ID string `json:"id"` -} - -// ScalewayGetSecurityGroupRules represents the response of a GET /security_group/{groupID}/rules -type ScalewayGetSecurityGroupRules struct { - Rules []ScalewaySecurityGroupRule `json:"rules"` -} - -// ScalewayGetSecurityGroupRule represents the response of a GET /security_group/{groupID}/rules/{ruleID} -type ScalewayGetSecurityGroupRule struct { - Rules ScalewaySecurityGroupRule `json:"rule"` -} - -// ScalewayNewSecurityGroupRule definition POST/PUT request /security_group/{groupID} -type ScalewayNewSecurityGroupRule struct { - Action string `json:"action"` - Direction string `json:"direction"` - IPRange string `json:"ip_range"` - Protocol string `json:"protocol"` - DestPortFrom int `json:"dest_port_from,omitempty"` -} - -// GetSecurityGroupRules returns a ScalewaySecurityGroupRules -func (s *ScalewayAPI) GetSecurityGroupRules(groupID string) (*ScalewayGetSecurityGroupRules, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("security_groups/%s/rules", groupID), url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var securityGroupRules ScalewayGetSecurityGroupRules - - if err = json.Unmarshal(body, &securityGroupRules); err != nil { - return nil, err - } - return &securityGroupRules, nil -} - -// GetASecurityGroupRule returns a ScalewaySecurityGroupRule -func (s *ScalewayAPI) GetASecurityGroupRule(groupID string, rulesID string) (*ScalewayGetSecurityGroupRule, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("security_groups/%s/rules/%s", groupID, rulesID), url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var securityGroupRules ScalewayGetSecurityGroupRule - - if err = json.Unmarshal(body, &securityGroupRules); err != nil { - return nil, err - } - return &securityGroupRules, nil -} - -// PostSecurityGroupRule posts a rule on a server -func (s *ScalewayAPI) PostSecurityGroupRule(SecurityGroupID string, rules ScalewayNewSecurityGroupRule) error { - resp, err := s.PostResponse(s.computeAPI, fmt.Sprintf("security_groups/%s/rules", SecurityGroupID), rules) - if err != nil { - return err - } - defer resp.Body.Close() - - _, err = s.handleHTTPError([]int{http.StatusCreated}, resp) - return err -} - -// PutSecurityGroupRule updates a SecurityGroupRule -func (s *ScalewayAPI) PutSecurityGroupRule(rules ScalewayNewSecurityGroupRule, securityGroupID, RuleID string) error { - resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("security_groups/%s/rules/%s", securityGroupID, RuleID), rules) - if err != nil { - return err - } - defer resp.Body.Close() - - _, err = s.handleHTTPError([]int{http.StatusOK}, resp) - return err -} - -// DeleteSecurityGroupRule deletes a SecurityGroupRule -func (s *ScalewayAPI) DeleteSecurityGroupRule(SecurityGroupID, RuleID string) error { - resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("security_groups/%s/rules/%s", SecurityGroupID, RuleID)) - if err != nil { - return err - } - defer resp.Body.Close() - - _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp) - return err -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/server.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/server.go deleted file mode 100644 index 53fa6b45264..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/server.go +++ /dev/null @@ -1,332 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" - "time" - - "golang.org/x/sync/errgroup" -) - -// ScalewayServer represents a Scaleway server -type ScalewayServer struct { - // Arch is the architecture target of the server - Arch string `json:"arch,omitempty"` - - // Identifier is a unique identifier for the server - Identifier string `json:"id,omitempty"` - - // Name is the user-defined name of the server - Name string `json:"name,omitempty"` - - // CreationDate is the creation date of the server - CreationDate string `json:"creation_date,omitempty"` - - // ModificationDate is the date of the last modification of the server - ModificationDate string `json:"modification_date,omitempty"` - - // Image is the image used by the server - Image ScalewayImage `json:"image,omitempty"` - - // DynamicIPRequired is a flag that defines a server with a dynamic ip address attached - DynamicIPRequired *bool `json:"dynamic_ip_required,omitempty"` - - // PublicIP is the public IP address bound to the server - PublicAddress ScalewayIPAddress `json:"public_ip,omitempty"` - - // State is the current status of the server - State string `json:"state,omitempty"` - - // StateDetail is the detailed status of the server - StateDetail string `json:"state_detail,omitempty"` - - // PrivateIP represents the private IPV4 attached to the server (changes on each boot) - PrivateIP string `json:"private_ip,omitempty"` - - // Bootscript is the unique identifier of the selected bootscript - Bootscript *ScalewayBootscript `json:"bootscript,omitempty"` - - // Hostname represents the ServerName in a format compatible with unix's hostname - Hostname string `json:"hostname,omitempty"` - - // Tags represents user-defined tags - Tags []string `json:"tags,omitempty"` - - // Volumes are the attached volumes - Volumes map[string]ScalewayVolume `json:"volumes,omitempty"` - - // SecurityGroup is the selected security group object - SecurityGroup ScalewaySecurityGroup `json:"security_group,omitempty"` - - // Organization is the owner of the server - Organization string `json:"organization,omitempty"` - - // CommercialType is the commercial type of the server (i.e: C1, C2[SML], VC1S) - CommercialType string `json:"commercial_type,omitempty"` - - // Location of the server - Location struct { - Platform string `json:"platform_id,omitempty"` - Chassis string `json:"chassis_id,omitempty"` - Cluster string `json:"cluster_id,omitempty"` - Hypervisor string `json:"hypervisor_id,omitempty"` - Blade string `json:"blade_id,omitempty"` - Node string `json:"node_id,omitempty"` - ZoneID string `json:"zone_id,omitempty"` - } `json:"location,omitempty"` - - IPV6 *ScalewayIPV6Definition `json:"ipv6,omitempty"` - - EnableIPV6 bool `json:"enable_ipv6,omitempty"` - - // This fields are not returned by the API, we generate it - DNSPublic string `json:"dns_public,omitempty"` - DNSPrivate string `json:"dns_private,omitempty"` -} - -// ScalewayServerPatchDefinition represents a Scaleway server with nullable fields (for PATCH) -type ScalewayServerPatchDefinition struct { - Arch *string `json:"arch,omitempty"` - Name *string `json:"name,omitempty"` - CreationDate *string `json:"creation_date,omitempty"` - ModificationDate *string `json:"modification_date,omitempty"` - Image *ScalewayImage `json:"image,omitempty"` - DynamicIPRequired *bool `json:"dynamic_ip_required,omitempty"` - PublicAddress *ScalewayIPAddress `json:"public_ip,omitempty"` - State *string `json:"state,omitempty"` - StateDetail *string `json:"state_detail,omitempty"` - PrivateIP *string `json:"private_ip,omitempty"` - Bootscript *string `json:"bootscript,omitempty"` - Hostname *string `json:"hostname,omitempty"` - Volumes *map[string]ScalewayVolume `json:"volumes,omitempty"` - SecurityGroup *ScalewaySecurityGroup `json:"security_group,omitempty"` - Organization *string `json:"organization,omitempty"` - Tags *[]string `json:"tags,omitempty"` - IPV6 *ScalewayIPV6Definition `json:"ipv6,omitempty"` - EnableIPV6 *bool `json:"enable_ipv6,omitempty"` -} - -// ScalewayServerDefinition represents a Scaleway server with image definition -type ScalewayServerDefinition struct { - // Name is the user-defined name of the server - Name string `json:"name"` - - // Image is the image used by the server - Image *string `json:"image,omitempty"` - - // Volumes are the attached volumes - Volumes map[string]string `json:"volumes,omitempty"` - - // DynamicIPRequired is a flag that defines a server with a dynamic ip address attached - DynamicIPRequired *bool `json:"dynamic_ip_required,omitempty"` - - // Bootscript is the bootscript used by the server - Bootscript *string `json:"bootscript"` - - // Tags are the metadata tags attached to the server - Tags []string `json:"tags,omitempty"` - - // Organization is the owner of the server - Organization string `json:"organization"` - - // CommercialType is the commercial type of the server (i.e: C1, C2[SML], VC1S) - CommercialType string `json:"commercial_type"` - - PublicIP string `json:"public_ip,omitempty"` - - EnableIPV6 bool `json:"enable_ipv6,omitempty"` - - SecurityGroup string `json:"security_group,omitempty"` -} - -// ScalewayServers represents a group of Scaleway servers -type ScalewayServers struct { - // Servers holds scaleway servers of the response - Servers []ScalewayServer `json:"servers,omitempty"` -} - -// ScalewayServerAction represents an action to perform on a Scaleway server -type ScalewayServerAction struct { - // Action is the name of the action to trigger - Action string `json:"action,omitempty"` -} - -// ScalewayOneServer represents the response of a GET /servers/UUID API call -type ScalewayOneServer struct { - Server ScalewayServer `json:"server,omitempty"` -} - -// PatchServer updates a server -func (s *ScalewayAPI) PatchServer(serverID string, definition ScalewayServerPatchDefinition) error { - resp, err := s.PatchResponse(s.computeAPI, fmt.Sprintf("servers/%s", serverID), definition) - if err != nil { - return err - } - defer resp.Body.Close() - - if _, err := s.handleHTTPError([]int{http.StatusOK}, resp); err != nil { - return err - } - return nil -} - -// GetServers gets the list of servers from the ScalewayAPI -func (s *ScalewayAPI) GetServers(all bool, limit int) (*[]ScalewayServer, error) { - query := url.Values{} - if !all { - query.Set("state", "running") - } - if limit > 0 { - // FIXME: wait for the API to be ready - // query.Set("per_page", strconv.Itoa(limit)) - panic("Not implemented yet") - } - - var ( - g errgroup.Group - apis = []string{ - ComputeAPIPar1, - ComputeAPIAms1, - } - ) - - serverChan := make(chan ScalewayServers, 2) - for _, api := range apis { - g.Go(s.fetchServers(api, query, serverChan)) - } - - if err := g.Wait(); err != nil { - return nil, err - } - close(serverChan) - var servers ScalewayServers - - for server := range serverChan { - servers.Servers = append(servers.Servers, server.Servers...) - } - - for i, server := range servers.Servers { - servers.Servers[i].DNSPublic = server.Identifier + URLPublicDNS - servers.Servers[i].DNSPrivate = server.Identifier + URLPrivateDNS - } - return &servers.Servers, nil -} - -// ScalewaySortServers represents a wrapper to sort by CreationDate the servers -type ScalewaySortServers []ScalewayServer - -func (s ScalewaySortServers) Len() int { - return len(s) -} - -func (s ScalewaySortServers) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s ScalewaySortServers) Less(i, j int) bool { - date1, _ := time.Parse("2006-01-02T15:04:05.000000+00:00", s[i].CreationDate) - date2, _ := time.Parse("2006-01-02T15:04:05.000000+00:00", s[j].CreationDate) - return date2.Before(date1) -} - -// GetServer gets a server from the ScalewayAPI -func (s *ScalewayAPI) GetServer(serverID string) (*ScalewayServer, error) { - if serverID == "" { - return nil, fmt.Errorf("cannot get server without serverID") - } - resp, err := s.GetResponsePaginate(s.computeAPI, "servers/"+serverID, url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - - var oneServer ScalewayOneServer - - if err = json.Unmarshal(body, &oneServer); err != nil { - return nil, err - } - // FIXME arch, owner, title - oneServer.Server.DNSPublic = oneServer.Server.Identifier + URLPublicDNS - oneServer.Server.DNSPrivate = oneServer.Server.Identifier + URLPrivateDNS - return &oneServer.Server, nil -} - -// PostServerAction posts an action on a server -func (s *ScalewayAPI) PostServerAction(serverID, action string) error { - data := ScalewayServerAction{ - Action: action, - } - resp, err := s.PostResponse(s.computeAPI, fmt.Sprintf("servers/%s/action", serverID), data) - if err != nil { - return err - } - defer resp.Body.Close() - - _, err = s.handleHTTPError([]int{http.StatusAccepted}, resp) - return err -} - -func (s *ScalewayAPI) fetchServers(api string, query url.Values, out chan<- ScalewayServers) func() error { - return func() error { - resp, err := s.GetResponsePaginate(api, "servers", query) - if err != nil { - return err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return err - } - var servers ScalewayServers - - if err = json.Unmarshal(body, &servers); err != nil { - return err - } - out <- servers - return nil - } -} - -// DeleteServer deletes a server -func (s *ScalewayAPI) DeleteServer(serverID string) error { - resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("servers/%s", serverID)) - if err != nil { - return err - } - defer resp.Body.Close() - - if _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp); err != nil { - return err - } - return nil -} - -// PostServer creates a new server -func (s *ScalewayAPI) PostServer(definition ScalewayServerDefinition) (string, error) { - definition.Organization = s.Organization - - resp, err := s.PostResponse(s.computeAPI, "servers", definition) - if err != nil { - return "", err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) - if err != nil { - return "", err - } - var server ScalewayOneServer - - if err = json.Unmarshal(body, &server); err != nil { - return "", err - } - return server.Server.Identifier, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/snapshot.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/snapshot.go deleted file mode 100644 index 6148b7d3b10..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/snapshot.go +++ /dev/null @@ -1,138 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewaySnapshotDefinition represents a Scaleway snapshot definition -type ScalewaySnapshotDefinition struct { - VolumeIDentifier string `json:"volume_id"` - Name string `json:"name,omitempty"` - Organization string `json:"organization"` -} - -// ScalewaySnapshot represents a Scaleway Snapshot -type ScalewaySnapshot struct { - // Identifier is a unique identifier for the snapshot - Identifier string `json:"id,omitempty"` - - // Name is a user-defined name for the snapshot - Name string `json:"name,omitempty"` - - // CreationDate is the creation date of the snapshot - CreationDate string `json:"creation_date,omitempty"` - - // ModificationDate is the date of the last modification of the snapshot - ModificationDate string `json:"modification_date,omitempty"` - - // Size is the allocated size of the volume - Size uint64 `json:"size,omitempty"` - - // Organization is the owner of the snapshot - Organization string `json:"organization"` - - // State is the current state of the snapshot - State string `json:"state"` - - // VolumeType is the kind of volume behind the snapshot - VolumeType string `json:"volume_type"` - - // BaseVolume is the volume from which the snapshot inherits - BaseVolume ScalewayVolume `json:"base_volume,omitempty"` -} - -// ScalewayOneSnapshot represents the response of a GET /snapshots/UUID API call -type ScalewayOneSnapshot struct { - Snapshot ScalewaySnapshot `json:"snapshot,omitempty"` -} - -// ScalewaySnapshots represents a group of Scaleway snapshots -type ScalewaySnapshots struct { - // Snapshots holds scaleway snapshots of the response - Snapshots []ScalewaySnapshot `json:"snapshots,omitempty"` -} - -// PostSnapshot creates a new snapshot -func (s *ScalewayAPI) PostSnapshot(volumeID string, name string) (string, error) { - definition := ScalewaySnapshotDefinition{ - VolumeIDentifier: volumeID, - Name: name, - Organization: s.Organization, - } - resp, err := s.PostResponse(s.computeAPI, "snapshots", definition) - if err != nil { - return "", err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) - if err != nil { - return "", err - } - var snapshot ScalewayOneSnapshot - - if err = json.Unmarshal(body, &snapshot); err != nil { - return "", err - } - return snapshot.Snapshot.Identifier, nil -} - -// DeleteSnapshot deletes a snapshot -func (s *ScalewayAPI) DeleteSnapshot(snapshotID string) error { - resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("snapshots/%s", snapshotID)) - if err != nil { - return err - } - defer resp.Body.Close() - - if _, err := s.handleHTTPError([]int{http.StatusNoContent}, resp); err != nil { - return err - } - return nil -} - -// GetSnapshots gets the list of snapshots from the ScalewayAPI -func (s *ScalewayAPI) GetSnapshots() (*[]ScalewaySnapshot, error) { - query := url.Values{} - - resp, err := s.GetResponsePaginate(s.computeAPI, "snapshots", query) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var snapshots ScalewaySnapshots - - if err = json.Unmarshal(body, &snapshots); err != nil { - return nil, err - } - return &snapshots.Snapshots, nil -} - -// GetSnapshot gets a snapshot from the ScalewayAPI -func (s *ScalewayAPI) GetSnapshot(snapshotID string) (*ScalewaySnapshot, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, "snapshots/"+snapshotID, url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var oneSnapshot ScalewayOneSnapshot - - if err = json.Unmarshal(body, &oneSnapshot); err != nil { - return nil, err - } - // FIXME region, arch, owner, title - return &oneSnapshot.Snapshot, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/tasks.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/tasks.go deleted file mode 100644 index 3cadbad94d9..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/tasks.go +++ /dev/null @@ -1,59 +0,0 @@ -package api - -import ( - "encoding/json" - "net/http" - "net/url" -) - -// ScalewayTask represents a Scaleway Task -type ScalewayTask struct { - // Identifier is a unique identifier for the task - Identifier string `json:"id,omitempty"` - - // StartDate is the start date of the task - StartDate string `json:"started_at,omitempty"` - - // TerminationDate is the termination date of the task - TerminationDate string `json:"terminated_at,omitempty"` - - HrefFrom string `json:"href_from,omitempty"` - - Description string `json:"description,omitempty"` - - Status string `json:"status,omitempty"` - - Progress int `json:"progress,omitempty"` -} - -// ScalewayOneTask represents the response of a GET /tasks/UUID API call -type ScalewayOneTask struct { - Task ScalewayTask `json:"task,omitempty"` -} - -// ScalewayTasks represents a group of Scaleway tasks -type ScalewayTasks struct { - // Tasks holds scaleway tasks of the response - Tasks []ScalewayTask `json:"tasks,omitempty"` -} - -// GetTasks get the list of tasks from the ScalewayAPI -func (s *ScalewayAPI) GetTasks() (*[]ScalewayTask, error) { - query := url.Values{} - resp, err := s.GetResponsePaginate(s.computeAPI, "tasks", query) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var tasks ScalewayTasks - - if err = json.Unmarshal(body, &tasks); err != nil { - return nil, err - } - return &tasks.Tasks, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/user.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/user.go deleted file mode 100644 index 3a4371f6bad..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/user.go +++ /dev/null @@ -1,121 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewayTokenDefinition represents a Scaleway Token -type ScalewayTokenDefinition struct { - UserID string `json:"user_id"` - Description string `json:"description,omitempty"` - Roles ScalewayRoleDefinition `json:"roles"` - Expires string `json:"expires"` - InheritsUsersPerms bool `json:"inherits_user_perms"` - ID string `json:"id"` -} - -// ScalewayTokensDefinition represents a Scaleway Tokens -type ScalewayTokensDefinition struct { - Token ScalewayTokenDefinition `json:"token"` -} - -// ScalewayGetTokens represents a list of Scaleway Tokens -type ScalewayGetTokens struct { - Tokens []ScalewayTokenDefinition `json:"tokens"` -} - -// ScalewayRoleDefinition represents a Scaleway Token UserId Role -type ScalewayRoleDefinition struct { - Organization ScalewayOrganizationDefinition `json:"organization,omitempty"` - Role string `json:"role,omitempty"` -} - -// ScalewayUserDefinition represents a Scaleway User -type ScalewayUserDefinition struct { - Email string `json:"email"` - Firstname string `json:"firstname"` - Fullname string `json:"fullname"` - ID string `json:"id"` - Lastname string `json:"lastname"` - Organizations []ScalewayOrganizationDefinition `json:"organizations"` - Roles []ScalewayRoleDefinition `json:"roles"` - SSHPublicKeys []ScalewayKeyDefinition `json:"ssh_public_keys"` -} - -// ScalewayKeyDefinition represents a key -type ScalewayKeyDefinition struct { - Key string `json:"key"` - Fingerprint string `json:"fingerprint,omitempty"` -} - -// ScalewayUsersDefinition represents the response of a GET /user -type ScalewayUsersDefinition struct { - User ScalewayUserDefinition `json:"user"` -} - -// ScalewayUserPatchSSHKeyDefinition represents a User Patch -type ScalewayUserPatchSSHKeyDefinition struct { - SSHPublicKeys []ScalewayKeyDefinition `json:"ssh_public_keys"` -} - -// PatchUserSSHKey updates a user -func (s *ScalewayAPI) PatchUserSSHKey(UserID string, definition ScalewayUserPatchSSHKeyDefinition) error { - resp, err := s.PatchResponse(AccountAPI, fmt.Sprintf("users/%s", UserID), definition) - if err != nil { - return err - } - - defer resp.Body.Close() - - if _, err := s.handleHTTPError([]int{http.StatusOK}, resp); err != nil { - return err - } - return nil -} - -// GetUserID returns the userID -func (s *ScalewayAPI) GetUserID() (string, error) { - resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("tokens/%s", s.Token), url.Values{}) - if err != nil { - return "", err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return "", err - } - var token ScalewayTokensDefinition - - if err = json.Unmarshal(body, &token); err != nil { - return "", err - } - return token.Token.UserID, nil -} - -// GetUser returns the user -func (s *ScalewayAPI) GetUser() (*ScalewayUserDefinition, error) { - userID, err := s.GetUserID() - if err != nil { - return nil, err - } - resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("users/%s", userID), url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var user ScalewayUsersDefinition - - if err = json.Unmarshal(body, &user); err != nil { - return nil, err - } - return &user.User, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/volume.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/volume.go deleted file mode 100644 index e7b1adc9fd3..00000000000 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/volume.go +++ /dev/null @@ -1,175 +0,0 @@ -package api - -import ( - "encoding/json" - "fmt" - "net/http" - "net/url" -) - -// ScalewayVolume represents a Scaleway Volume -type ScalewayVolume struct { - // Identifier is a unique identifier for the volume - Identifier string `json:"id,omitempty"` - - // Size is the allocated size of the volume - Size uint64 `json:"size,omitempty"` - - // CreationDate is the creation date of the volume - CreationDate string `json:"creation_date,omitempty"` - - // ModificationDate is the date of the last modification of the volume - ModificationDate string `json:"modification_date,omitempty"` - - // Organization is the organization owning the volume - Organization string `json:"organization,omitempty"` - - // Name is the name of the volume - Name string `json:"name,omitempty"` - - // Server is the server using this image - Server *struct { - Identifier string `json:"id,omitempty"` - Name string `json:"name,omitempty"` - } `json:"server,omitempty"` - - // VolumeType is a Scaleway identifier for the kind of volume (default: l_ssd) - VolumeType string `json:"volume_type,omitempty"` - - // ExportURI represents the url used by initrd/scripts to attach the volume - ExportURI string `json:"export_uri,omitempty"` -} - -type volumeResponse struct { - Volume ScalewayVolume `json:"volume,omitempty"` -} - -// ScalewayVolumeDefinition represents a Scaleway volume definition -type ScalewayVolumeDefinition struct { - // Name is the user-defined name of the volume - Name string `json:"name"` - - // Image is the image used by the volume - Size uint64 `json:"size"` - - // Bootscript is the bootscript used by the volume - Type string `json:"volume_type"` - - // Organization is the owner of the volume - Organization string `json:"organization"` -} - -// ScalewayVolumePutDefinition represents a Scaleway volume with nullable fields (for PUT) -type ScalewayVolumePutDefinition struct { - Identifier *string `json:"id,omitempty"` - Size *uint64 `json:"size,omitempty"` - CreationDate *string `json:"creation_date,omitempty"` - ModificationDate *string `json:"modification_date,omitempty"` - Organization *string `json:"organization,omitempty"` - Name *string `json:"name,omitempty"` - Server struct { - Identifier *string `json:"id,omitempty"` - Name *string `json:"name,omitempty"` - } `json:"server,omitempty"` - VolumeType *string `json:"volume_type,omitempty"` - ExportURI *string `json:"export_uri,omitempty"` -} - -// PostVolume creates a new volume -func (s *ScalewayAPI) PostVolume(definition ScalewayVolumeDefinition) (string, error) { - definition.Organization = s.Organization - if definition.Type == "" { - definition.Type = "l_ssd" - } - - resp, err := s.PostResponse(s.computeAPI, "volumes", definition) - if err != nil { - return "", err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) - if err != nil { - return "", err - } - var volume volumeResponse - - if err = json.Unmarshal(body, &volume); err != nil { - return "", err - } - return volume.Volume.Identifier, nil -} - -// PutVolume updates a volume -func (s *ScalewayAPI) PutVolume(volumeID string, definition ScalewayVolumePutDefinition) error { - resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("volumes/%s", volumeID), definition) - if err != nil { - return err - } - defer resp.Body.Close() - - _, err = s.handleHTTPError([]int{http.StatusOK}, resp) - return err -} - -// DeleteVolume deletes a volume -func (s *ScalewayAPI) DeleteVolume(volumeID string) error { - resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("volumes/%s", volumeID)) - if err != nil { - return err - } - defer resp.Body.Close() - - if _, err := s.handleHTTPError([]int{http.StatusNoContent}, resp); err != nil { - return err - } - return nil -} - -type volumesResponse struct { - Volumes []ScalewayVolume `json:"volumes,omitempty"` -} - -// GetVolumes gets the list of volumes from the ScalewayAPI -func (s *ScalewayAPI) GetVolumes() (*[]ScalewayVolume, error) { - query := url.Values{} - - resp, err := s.GetResponsePaginate(s.computeAPI, "volumes", query) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - - var volumes volumesResponse - - if err = json.Unmarshal(body, &volumes); err != nil { - return nil, err - } - return &volumes.Volumes, nil -} - -// GetVolume gets a volume from the ScalewayAPI -func (s *ScalewayAPI) GetVolume(volumeID string) (*ScalewayVolume, error) { - resp, err := s.GetResponsePaginate(s.computeAPI, "volumes/"+volumeID, url.Values{}) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := s.handleHTTPError([]int{http.StatusOK}, resp) - if err != nil { - return nil, err - } - var oneVolume volumeResponse - - if err = json.Unmarshal(body, &oneVolume); err != nil { - return nil, err - } - // FIXME region, arch, owner, title - return &oneVolume.Volume, nil -} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/availability.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/availability.go new file mode 100644 index 00000000000..58977127d0d --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/availability.go @@ -0,0 +1,50 @@ +package api + +import ( + "encoding/json" + "fmt" + "io/ioutil" +) + +type InstanceTypeAvailability string + +var ( + InstanceTypeAvailable InstanceTypeAvailability = "available" + InstanceTypeScarce InstanceTypeAvailability = "scarce" + InstanceTypeShortage InstanceTypeAvailability = "shortage" +) + +type ServerAvailability struct { + Availability InstanceTypeAvailability `json:"availability"` +} + +type ServerAvailabilities map[string]ServerAvailability + +func (a ServerAvailabilities) CommercialTypes() []string { + types := []string{} + for k, _ := range a { + types = append(types, k) + } + return types +} + +type availabilityResponse struct { + Servers ServerAvailabilities +} + +func (s *API) GetServerAvailabilities() (ServerAvailabilities, error) { + resp, err := s.response("GET", fmt.Sprintf("%s/products/servers/availability", s.computeAPI), nil) + if err != nil { + return nil, err + } + defer resp.Body.Close() + bs, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + content := availabilityResponse{} + if err := json.Unmarshal(bs, &content); err != nil { + return nil, err + } + return content.Servers, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/bootscript.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/bootscript.go new file mode 100644 index 00000000000..b10ced6e3ca --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/bootscript.go @@ -0,0 +1,83 @@ +package api + +import ( + "encoding/json" + "net/http" + "net/url" +) + +// Bootscript represents a Bootscript +type Bootscript struct { + Bootcmdargs string `json:"bootcmdargs,omitempty"` + Dtb string `json:"dtb,omitempty"` + Initrd string `json:"initrd,omitempty"` + Kernel string `json:"kernel,omitempty"` + + // Arch is the architecture target of the bootscript + Arch string `json:"architecture,omitempty"` + + // Identifier is a unique identifier for the bootscript + Identifier string `json:"id,omitempty"` + + // Organization is the owner of the bootscript + Organization string `json:"organization,omitempty"` + + // Name is a user-defined name for the bootscript + Title string `json:"title,omitempty"` + + // Public is true for public bootscripts and false for user bootscripts + Public bool `json:"public,omitempty"` + + Default bool `json:"default,omitempty"` +} + +type getBootscriptResponse struct { + Bootscript Bootscript `json:"bootscript,omitempty"` +} + +type getBootscriptsResponse struct { + Bootscripts []Bootscript `json:"bootscripts,omitempty"` +} + +// GetBootscripts gets the list of bootscripts from the API +func (s *API) GetBootscripts() ([]Bootscript, error) { + query := url.Values{} + + resp, err := s.GetResponsePaginate(s.computeAPI, "bootscripts", query) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var bootscripts getBootscriptsResponse + + if err = json.Unmarshal(body, &bootscripts); err != nil { + return nil, err + } + return bootscripts.Bootscripts, nil +} + +// GetBootscript gets a bootscript from the API +func (s *API) GetBootscript(bootscriptID string) (*Bootscript, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, "bootscripts/"+bootscriptID, url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var oneBootscript getBootscriptResponse + + if err = json.Unmarshal(body, &oneBootscript); err != nil { + return nil, err + } + // FIXME region, arch, owner, title + return &oneBootscript.Bootscript, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/container.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/container.go new file mode 100644 index 00000000000..e7a5abc49e9 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/container.go @@ -0,0 +1,70 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// ContainerData represents a container data (S3) +type ContainerData struct { + LastModified string `json:"last_modified"` + Name string `json:"name"` + Size string `json:"size"` +} + +type getContainerDatas struct { + Container []*ContainerData `json:"container"` +} + +// Container represents a container (S3) +type Container struct { + Organization `json:"organization"` + Name string `json:"name"` + Size string `json:"size"` +} + +type getContainers struct { + Containers []*Container `json:"containers"` +} + +// GetContainers returns a GetContainers +func (s *API) GetContainers() ([]*Container, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, "containers", url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var containers getContainers + + if err = json.Unmarshal(body, &containers); err != nil { + return nil, err + } + return containers.Containers, nil +} + +// GetContainerDatas returns a GetContainerDatas +func (s *API) GetContainerDatas(container string) ([]*ContainerData, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("containers/%s", container), url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var datas getContainerDatas + + if err = json.Unmarshal(body, &datas); err != nil { + return nil, err + } + return datas.Container, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/dashboard.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/dashboard.go new file mode 100644 index 00000000000..a66cea6faa1 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/dashboard.go @@ -0,0 +1,42 @@ +package api + +import ( + "encoding/json" + "net/http" + "net/url" +) + +// DashboardResp represents a dashboard received from the API +type DashboardResp struct { + Dashboard Dashboard +} + +// Dashboard represents a dashboard +type Dashboard struct { + VolumesCount int `json:"volumes_count"` + RunningServersCount int `json:"running_servers_count"` + ImagesCount int `json:"images_count"` + SnapshotsCount int `json:"snapshots_count"` + ServersCount int `json:"servers_count"` + IPsCount int `json:"ips_count"` +} + +// GetDashboard returns the dashboard +func (s *API) GetDashboard() (*Dashboard, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, "dashboard", url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var dashboard DashboardResp + + if err = json.Unmarshal(body, &dashboard); err != nil { + return nil, err + } + return &dashboard.Dashboard, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/image.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/image.go similarity index 78% rename from vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/image.go rename to vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/image.go index 0a2fba1819e..e8e644e3218 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/image.go +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/image.go @@ -7,8 +7,8 @@ import ( "net/url" ) -// ScalewayImageDefinition represents a Scaleway image definition -type ScalewayImageDefinition struct { +// ImageDefinition represents a image definition +type ImageDefinition struct { SnapshotIDentifier string `json:"root_volume"` Name string `json:"name,omitempty"` Organization string `json:"organization"` @@ -16,8 +16,8 @@ type ScalewayImageDefinition struct { DefaultBootscript *string `json:"default_bootscript,omitempty"` } -// ScalewayImage represents a Scaleway Image -type ScalewayImage struct { +// Image represents a Image +type Image struct { // Identifier is a unique identifier for the image Identifier string `json:"id,omitempty"` @@ -31,13 +31,13 @@ type ScalewayImage struct { ModificationDate string `json:"modification_date,omitempty"` // RootVolume is the root volume bound to the image - RootVolume ScalewayVolume `json:"root_volume,omitempty"` + RootVolume Volume `json:"root_volume,omitempty"` // Public is true for public images and false for user images Public bool `json:"public,omitempty"` // Bootscript is the bootscript bound to the image - DefaultBootscript *ScalewayBootscript `json:"default_bootscript,omitempty"` + DefaultBootscript *Bootscript `json:"default_bootscript,omitempty"` // Organization is the owner of the image Organization string `json:"organization,omitempty"` @@ -48,23 +48,23 @@ type ScalewayImage struct { // FIXME: extra_volumes } -// ScalewayImageIdentifier represents a Scaleway Image Identifier -type ScalewayImageIdentifier struct { +// ImageIdentifier represents a Image Identifier +type ImageIdentifier struct { Identifier string Arch string Region string Owner string } -// ScalewayOneImage represents the response of a GET /images/UUID API call -type ScalewayOneImage struct { - Image ScalewayImage `json:"image,omitempty"` +// OneImage represents the response of a GET /images/UUID API call +type OneImage struct { + Image Image `json:"image,omitempty"` } -// ScalewayImages represents a group of Scaleway images -type ScalewayImages struct { - // Images holds scaleway images of the response - Images []ScalewayImage `json:"images,omitempty"` +// Images represents a group of images +type Images struct { + // Images holds images of the response + Images []Image `json:"images,omitempty"` } // MarketImages represents MarketPlace images @@ -130,9 +130,9 @@ type MarketImage struct { MarketVersions } -// PostImage creates a new image -func (s *ScalewayAPI) PostImage(volumeID string, name string, bootscript string, arch string) (string, error) { - definition := ScalewayImageDefinition{ +// CreateImage creates a new image +func (s *API) CreateImage(volumeID string, name string, bootscript string, arch string) (*Image, error) { + definition := ImageDefinition{ SnapshotIDentifier: volumeID, Name: name, Organization: s.Organization, @@ -144,24 +144,24 @@ func (s *ScalewayAPI) PostImage(volumeID string, name string, bootscript string, resp, err := s.PostResponse(s.computeAPI, "images", definition) if err != nil { - return "", err + return nil, err } defer resp.Body.Close() body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) if err != nil { - return "", err + return nil, err } - var image ScalewayOneImage + var image OneImage if err = json.Unmarshal(body, &image); err != nil { - return "", err + return nil, err } - return image.Image.Identifier, nil + return &image.Image, nil } -// GetImages gets the list of images from the ScalewayAPI -func (s *ScalewayAPI) GetImages() (*[]MarketImage, error) { +// GetImages gets the list of images from the API +func (s *API) GetImages() (*[]MarketImage, error) { images, err := s.GetMarketPlaceImages("") if err != nil { return nil, err @@ -187,7 +187,7 @@ func (s *ScalewayAPI) GetImages() (*[]MarketImage, error) { if err != nil { return nil, err } - var OrgaImages ScalewayImages + var OrgaImages Images if err = json.Unmarshal(body, &OrgaImages); err != nil { return nil, err @@ -225,8 +225,8 @@ func (s *ScalewayAPI) GetImages() (*[]MarketImage, error) { return &images.Images, nil } -// GetImage gets an image from the ScalewayAPI -func (s *ScalewayAPI) GetImage(imageID string) (*ScalewayImage, error) { +// GetImage gets an image from the API +func (s *API) GetImage(imageID string) (*Image, error) { resp, err := s.GetResponsePaginate(s.computeAPI, "images/"+imageID, url.Values{}) if err != nil { return nil, err @@ -237,7 +237,7 @@ func (s *ScalewayAPI) GetImage(imageID string) (*ScalewayImage, error) { if err != nil { return nil, err } - var oneImage ScalewayOneImage + var oneImage OneImage if err = json.Unmarshal(body, &oneImage); err != nil { return nil, err @@ -247,7 +247,7 @@ func (s *ScalewayAPI) GetImage(imageID string) (*ScalewayImage, error) { } // DeleteImage deletes a image -func (s *ScalewayAPI) DeleteImage(imageID string) error { +func (s *API) DeleteImage(imageID string) error { resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("images/%s", imageID)) if err != nil { return err @@ -261,7 +261,7 @@ func (s *ScalewayAPI) DeleteImage(imageID string) error { } // GetMarketPlaceImages returns images from marketplace -func (s *ScalewayAPI) GetMarketPlaceImages(uuidImage string) (*MarketImages, error) { +func (s *API) GetMarketPlaceImages(uuidImage string) (*MarketImages, error) { resp, err := s.GetResponsePaginate(MarketplaceAPI, fmt.Sprintf("images/%s", uuidImage), url.Values{}) if err != nil { return nil, err @@ -292,7 +292,7 @@ func (s *ScalewayAPI) GetMarketPlaceImages(uuidImage string) (*MarketImages, err } // GetMarketPlaceImageVersions returns image version -func (s *ScalewayAPI) GetMarketPlaceImageVersions(uuidImage, uuidVersion string) (*MarketVersions, error) { +func (s *API) GetMarketPlaceImageVersions(uuidImage, uuidVersion string) (*MarketVersions, error) { resp, err := s.GetResponsePaginate(MarketplaceAPI, fmt.Sprintf("images/%v/versions/%s", uuidImage, uuidVersion), url.Values{}) if err != nil { return nil, err @@ -322,7 +322,7 @@ func (s *ScalewayAPI) GetMarketPlaceImageVersions(uuidImage, uuidVersion string) } // GetMarketPlaceImageCurrentVersion return the image current version -func (s *ScalewayAPI) GetMarketPlaceImageCurrentVersion(uuidImage string) (*MarketVersion, error) { +func (s *API) GetMarketPlaceImageCurrentVersion(uuidImage string) (*MarketVersion, error) { resp, err := s.GetResponsePaginate(MarketplaceAPI, fmt.Sprintf("images/%v/versions/current", uuidImage), url.Values{}) if err != nil { return nil, err @@ -342,7 +342,7 @@ func (s *ScalewayAPI) GetMarketPlaceImageCurrentVersion(uuidImage string) (*Mark } // GetMarketPlaceLocalImages returns images from local region -func (s *ScalewayAPI) GetMarketPlaceLocalImages(uuidImage, uuidVersion, uuidLocalImage string) (*MarketLocalImages, error) { +func (s *API) GetMarketPlaceLocalImages(uuidImage, uuidVersion, uuidLocalImage string) (*MarketLocalImages, error) { resp, err := s.GetResponsePaginate(MarketplaceAPI, fmt.Sprintf("images/%v/versions/%s/local_images/%s", uuidImage, uuidVersion, uuidLocalImage), url.Values{}) if err != nil { return nil, err @@ -369,8 +369,8 @@ func (s *ScalewayAPI) GetMarketPlaceLocalImages(uuidImage, uuidVersion, uuidLoca return &ret, nil } -// PostMarketPlaceImage adds new image -func (s *ScalewayAPI) PostMarketPlaceImage(images MarketImage) error { +// CreateMarketPlaceImage adds new image +func (s *API) CreateMarketPlaceImage(images MarketImage) error { resp, err := s.PostResponse(MarketplaceAPI, "images/", images) if err != nil { return err @@ -380,8 +380,8 @@ func (s *ScalewayAPI) PostMarketPlaceImage(images MarketImage) error { return err } -// PostMarketPlaceImageVersion adds new image version -func (s *ScalewayAPI) PostMarketPlaceImageVersion(uuidImage string, version MarketVersion) error { +// CreateMarketPlaceImageVersion adds new image version +func (s *API) CreateMarketPlaceImageVersion(uuidImage string, version MarketVersion) error { resp, err := s.PostResponse(MarketplaceAPI, fmt.Sprintf("images/%v/versions", uuidImage), version) if err != nil { return err @@ -391,8 +391,8 @@ func (s *ScalewayAPI) PostMarketPlaceImageVersion(uuidImage string, version Mark return err } -// PostMarketPlaceLocalImage adds new local image -func (s *ScalewayAPI) PostMarketPlaceLocalImage(uuidImage, uuidVersion, uuidLocalImage string, local MarketLocalImage) error { +// CreateMarketPlaceLocalImage adds new local image +func (s *API) CreateMarketPlaceLocalImage(uuidImage, uuidVersion, uuidLocalImage string, local MarketLocalImage) error { resp, err := s.PostResponse(MarketplaceAPI, fmt.Sprintf("images/%v/versions/%s/local_images/%v", uuidImage, uuidVersion, uuidLocalImage), local) if err != nil { return err @@ -402,8 +402,8 @@ func (s *ScalewayAPI) PostMarketPlaceLocalImage(uuidImage, uuidVersion, uuidLoca return err } -// PutMarketPlaceImage updates image -func (s *ScalewayAPI) PutMarketPlaceImage(uudiImage string, images MarketImage) error { +// UpdateMarketPlaceImage updates image +func (s *API) UpdateMarketPlaceImage(uudiImage string, images MarketImage) error { resp, err := s.PutResponse(MarketplaceAPI, fmt.Sprintf("images/%v", uudiImage), images) if err != nil { return err @@ -413,8 +413,8 @@ func (s *ScalewayAPI) PutMarketPlaceImage(uudiImage string, images MarketImage) return err } -// PutMarketPlaceImageVersion updates image version -func (s *ScalewayAPI) PutMarketPlaceImageVersion(uuidImage, uuidVersion string, version MarketVersion) error { +// UpdateMarketPlaceImageVersion updates image version +func (s *API) UpdateMarketPlaceImageVersion(uuidImage, uuidVersion string, version MarketVersion) error { resp, err := s.PutResponse(MarketplaceAPI, fmt.Sprintf("images/%v/versions/%v", uuidImage, uuidVersion), version) if err != nil { return err @@ -424,8 +424,8 @@ func (s *ScalewayAPI) PutMarketPlaceImageVersion(uuidImage, uuidVersion string, return err } -// PutMarketPlaceLocalImage updates local image -func (s *ScalewayAPI) PutMarketPlaceLocalImage(uuidImage, uuidVersion, uuidLocalImage string, local MarketLocalImage) error { +// UpdateMarketPlaceLocalImage updates local image +func (s *API) UpdateMarketPlaceLocalImage(uuidImage, uuidVersion, uuidLocalImage string, local MarketLocalImage) error { resp, err := s.PostResponse(MarketplaceAPI, fmt.Sprintf("images/%v/versions/%s/local_images/%v", uuidImage, uuidVersion, uuidLocalImage), local) if err != nil { return err @@ -436,7 +436,7 @@ func (s *ScalewayAPI) PutMarketPlaceLocalImage(uuidImage, uuidVersion, uuidLocal } // DeleteMarketPlaceImage deletes image -func (s *ScalewayAPI) DeleteMarketPlaceImage(uudImage string) error { +func (s *API) DeleteMarketPlaceImage(uudImage string) error { resp, err := s.DeleteResponse(MarketplaceAPI, fmt.Sprintf("images/%v", uudImage)) if err != nil { return err @@ -447,7 +447,7 @@ func (s *ScalewayAPI) DeleteMarketPlaceImage(uudImage string) error { } // DeleteMarketPlaceImageVersion delete image version -func (s *ScalewayAPI) DeleteMarketPlaceImageVersion(uuidImage, uuidVersion string) error { +func (s *API) DeleteMarketPlaceImageVersion(uuidImage, uuidVersion string) error { resp, err := s.DeleteResponse(MarketplaceAPI, fmt.Sprintf("images/%v/versions/%v", uuidImage, uuidVersion)) if err != nil { return err @@ -458,7 +458,7 @@ func (s *ScalewayAPI) DeleteMarketPlaceImageVersion(uuidImage, uuidVersion strin } // DeleteMarketPlaceLocalImage deletes local image -func (s *ScalewayAPI) DeleteMarketPlaceLocalImage(uuidImage, uuidVersion, uuidLocalImage string) error { +func (s *API) DeleteMarketPlaceLocalImage(uuidImage, uuidVersion, uuidLocalImage string) error { resp, err := s.DeleteResponse(MarketplaceAPI, fmt.Sprintf("images/%v/versions/%s/local_images/%v", uuidImage, uuidVersion, uuidLocalImage)) if err != nil { return err diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/ip.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/ip.go new file mode 100644 index 00000000000..04d1dd0205a --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/ip.go @@ -0,0 +1,209 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// IPV6 represents a ipv6 +type IPV6 struct { + Netmask string `json:"netmask"` + Gateway string `json:"gateway"` + Address string `json:"address"` +} + +// IPV4 represents the IPs fields +type IPV4 struct { + Organization string `json:"organization"` + Reverse *string `json:"reverse"` + ID string `json:"id"` + Server *struct { + Identifier string `json:"id,omitempty"` + Name string `json:"name,omitempty"` + } `json:"server"` + Address string `json:"address"` +} + +// IPAddress represents a IP address +type IPAddress struct { + // Identifier is a unique identifier for the IP address + Identifier string `json:"id,omitempty"` + + // IP is an IPv4 address + IP string `json:"address,omitempty"` + + // Dynamic is a flag that defines an IP that change on each reboot + Dynamic *bool `json:"dynamic,omitempty"` +} + +// GetIPS represents the response of a GET /ips/ +type GetIPS struct { + IPS []IPV4 `json:"ips"` +} + +// GetIP represents the response of a GET /ips/{id_ip} +type GetIP struct { + IP IPV4 `json:"ip"` +} + +// GetIP returns a GetIP +func (s *API) GetIP(ipID string) (*IPV4, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("ips/%s", ipID), url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var ip GetIP + + if err = json.Unmarshal(body, &ip); err != nil { + return nil, err + } + return &ip.IP, nil +} + +type UpdateIPRequest struct { + ID string + Reverse string +} + +func (s *API) UpdateIP(req UpdateIPRequest) (*IPV4, error) { + var update struct { + Address string `json:"address"` + ID string `json:"id"` + Reverse *string `json:"reverse"` + Organization string `json:"organization"` + Server *string `json:"server"` + } + + ip, err := s.GetIP(req.ID) + if err != nil { + return nil, err + } + update.Address = ip.Address + update.ID = ip.ID + update.Organization = ip.Organization + update.Server = nil + if ip.Server != nil { + update.Server = &ip.Server.Identifier + } + update.Reverse = nil + if req.Reverse != "" { + update.Reverse = &req.Reverse + } + resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("ips/%s", req.ID), update) + if err != nil { + return nil, err + } + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + var data GetIP + + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return &data.IP, nil +} + +// GetIPS returns a GetIPS +func (s *API) GetIPS() ([]IPV4, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, "ips", url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var ips GetIPS + + if err = json.Unmarshal(body, &ips); err != nil { + return nil, err + } + return ips.IPS, nil +} + +// CreateIP returns a new IP +func (s *API) CreateIP() (*IPV4, error) { + var orga struct { + Organization string `json:"organization"` + } + orga.Organization = s.Organization + resp, err := s.PostResponse(s.computeAPI, "ips", orga) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) + if err != nil { + return nil, err + } + var ip GetIP + + if err = json.Unmarshal(body, &ip); err != nil { + return nil, err + } + return &ip.IP, nil +} + +// AttachIP attachs an IP to a server +func (s *API) AttachIP(ipID, serverID string) error { + var update struct { + Address string `json:"address"` + ID string `json:"id"` + Reverse *string `json:"reverse"` + Organization string `json:"organization"` + Server string `json:"server"` + } + + ip, err := s.GetIP(ipID) + if err != nil { + return err + } + update.Address = ip.Address + update.ID = ip.ID + update.Organization = ip.Organization + update.Server = serverID + resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("ips/%s", ipID), update) + if err != nil { + return err + } + _, err = s.handleHTTPError([]int{http.StatusOK}, resp) + return err +} + +// DetachIP detaches an IP from a server +func (s *API) DetachIP(ipID string) error { + ip, err := s.GetIP(ipID) + if err != nil { + return err + } + ip.Server = nil + resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("ips/%s", ipID), ip) + if err != nil { + return err + } + defer resp.Body.Close() + _, err = s.handleHTTPError([]int{http.StatusOK}, resp) + return err +} + +// DeleteIP deletes an IP +func (s *API) DeleteIP(ipID string) error { + resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("ips/%s", ipID)) + if err != nil { + return err + } + defer resp.Body.Close() + _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/organization.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/organization.go new file mode 100644 index 00000000000..7110edb590e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/organization.go @@ -0,0 +1,39 @@ +package api + +import ( + "encoding/json" + "net/http" + "net/url" +) + +// Organization represents a Organization +type Organization struct { + ID string `json:"id"` + Name string `json:"name"` + Users []User `json:"users"` +} + +// organizationsDefinition represents a Organizations +type organizationsDefinition struct { + Organizations []Organization `json:"organizations"` +} + +// GetOrganization returns Organization +func (s *API) GetOrganization() ([]Organization, error) { + resp, err := s.GetResponsePaginate(AccountAPI, "organizations", url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var data organizationsDefinition + + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return data.Organizations, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/permissions.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/permissions.go new file mode 100644 index 00000000000..5e493ef69ee --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/permissions.go @@ -0,0 +1,39 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// Permissions represents the response of GET /permissions +type Permissions map[string]PermCategory + +// PermCategory represents Permissions's fields +type PermCategory map[string][]string + +// permissions represents the permissions +type permissionsResponse struct { + Permissions Permissions `json:"permissions"` +} + +// GetPermissions returns the permissions +func (s *API) GetPermissions() (Permissions, error) { + resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("tokens/%s/permissions", s.Token), url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var permissions permissionsResponse + + if err = json.Unmarshal(body, &permissions); err != nil { + return nil, err + } + return permissions.Permissions, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/quota.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/quota.go new file mode 100644 index 00000000000..0ee7cff0066 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/quota.go @@ -0,0 +1,36 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// Quota represents a map of quota (name, value) +type Quotas map[string]int + +// GetQuotas represents the response of GET /organizations/{orga_id}/quotas +type GetQuotas struct { + Quotas Quotas `json:"quotas"` +} + +// GetQuotas returns a GetQuotas +func (s *API) GetQuotas() (Quotas, error) { + resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("organizations/%s/quotas", s.Organization), url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var quotas GetQuotas + + if err = json.Unmarshal(body, "as); err != nil { + return nil, err + } + return quotas.Quotas, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/security_group.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/security_group.go new file mode 100644 index 00000000000..d0bdb6dc07e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/security_group.go @@ -0,0 +1,146 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// SecurityGroup definition +type SecurityGroup struct { + Description string `json:"description"` + ID string `json:"id"` + Organization string `json:"organization"` + Name string `json:"name"` + Servers []ServerRef `json:"servers"` + EnableDefaultSecurity bool `json:"enable_default_security"` + OrganizationDefault bool `json:"organization_default"` +} + +type SecurityGroupRef struct { + Identifier string `json:"id,omitempty"` + Name string `json:"name,omitempty"` +} + +type ServerRef struct { + Identifier string `json:"id,omitempty"` + Name string `json:"name,omitempty"` +} + +// getSecurityGroups represents the response of a GET /security_groups/ +type getSecurityGroups struct { + SecurityGroups []SecurityGroup `json:"security_groups"` +} + +// getSecurityGroup represents the response of a GET /security_groups/{groupID} +type getSecurityGroup struct { + SecurityGroup SecurityGroup `json:"security_group"` +} + +// NewSecurityGroup definition POST request /security_groups +type NewSecurityGroup struct { + Organization string `json:"organization"` + Name string `json:"name"` + Description string `json:"description"` + EnableDefaultSecurity bool `json:"enable_default_security"` +} + +// UpdateSecurityGroup definition PUT request /security_groups +type UpdateSecurityGroup struct { + Organization string `json:"organization"` + Name string `json:"name"` + Description string `json:"description"` + OrganizationDefault bool `json:"organization_default"` +} + +// DeleteSecurityGroup deletes a SecurityGroup +func (s *API) DeleteSecurityGroup(securityGroupID string) error { + resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("security_groups/%s", securityGroupID)) + if err != nil { + return err + } + defer resp.Body.Close() + + _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp) + return err +} + +// UpdateSecurityGroup updates a SecurityGroup +func (s *API) UpdateSecurityGroup(group UpdateSecurityGroup, securityGroupID string) (*SecurityGroup, error) { + resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("security_groups/%s", securityGroupID), group) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var data getSecurityGroup + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return &data.SecurityGroup, err +} + +// GetSecurityGroup returns a SecurityGroup +func (s *API) GetSecurityGroup(groupsID string) (*SecurityGroup, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("security_groups/%s", groupsID), url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var securityGroups getSecurityGroup + + if err = json.Unmarshal(body, &securityGroups); err != nil { + return nil, err + } + return &securityGroups.SecurityGroup, nil +} + +// CreateSecurityGroup posts a group on a server +func (s *API) CreateSecurityGroup(group NewSecurityGroup) (*SecurityGroup, error) { + resp, err := s.PostResponse(s.computeAPI, "security_groups", group) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) + if err != nil { + return nil, err + } + var securityGroups getSecurityGroup + + if err = json.Unmarshal(body, &securityGroups); err != nil { + return nil, err + } + return &securityGroups.SecurityGroup, nil +} + +// GetSecurityGroups returns a SecurityGroups +func (s *API) GetSecurityGroups() ([]SecurityGroup, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, "security_groups", url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var securityGroups getSecurityGroups + + if err = json.Unmarshal(body, &securityGroups); err != nil { + return nil, err + } + return securityGroups.SecurityGroups, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/security_group_rule.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/security_group_rule.go new file mode 100644 index 00000000000..492e3cefe89 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/security_group_rule.go @@ -0,0 +1,140 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// SecurityGroupRule definition +type SecurityGroupRule struct { + Direction string `json:"direction"` + Protocol string `json:"protocol"` + IPRange string `json:"ip_range"` + DestPortFrom int `json:"dest_port_from,omitempty"` + Action string `json:"action"` + Position int `json:"position"` + DestPortTo string `json:"dest_port_to"` + Editable bool `json:"editable"` + ID string `json:"id"` +} + +// getSecurityGroupRules represents the response of a GET /_group/{groupID}/rules +type getSecurityGroupRules struct { + Rules []SecurityGroupRule `json:"rules"` +} + +// getSecurityGroupRule represents the response of a GET /_group/{groupID}/rules/{ruleID} +type getSecurityGroupRule struct { + Rules SecurityGroupRule `json:"rule"` +} + +// NewSecurityGroupRule definition POST/PUT request /_group/{groupID} +type NewSecurityGroupRule struct { + Action string `json:"action"` + Direction string `json:"direction"` + IPRange string `json:"ip_range"` + Protocol string `json:"protocol"` + DestPortFrom int `json:"dest_port_from,omitempty"` +} + +// UpdateSecurityGroupRule definition POST/PUT request /_group/{groupID} +type UpdateSecurityGroupRule struct { + Action string `json:"action"` + Direction string `json:"direction"` + IPRange string `json:"ip_range"` + Protocol string `json:"protocol"` + Position int `json:"position"` + DestPortFrom int `json:"dest_port_from,omitempty"` +} + +// GetSecurityGroupRules returns a GroupRules +func (s *API) GetSecurityGroupRules(groupID string) ([]SecurityGroupRule, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("security_groups/%s/rules", groupID), url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var data getSecurityGroupRules + + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return data.Rules, nil +} + +// GetASecurityGroupRule returns a SecurityGroupRule +func (s *API) GetSecurityGroupRule(groupID string, rulesID string) (*SecurityGroupRule, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("security_groups/%s/rules/%s", groupID, rulesID), url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var data getSecurityGroupRule + + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return &data.Rules, nil +} + +type postGroupRuleResponse struct { + SecurityGroupRule SecurityGroupRule `json:"rule"` +} + +// CreateSecurityGroupRule posts a rule on a server +func (s *API) CreateSecurityGroupRule(GroupID string, rules NewSecurityGroupRule) (*SecurityGroupRule, error) { + resp, err := s.PostResponse(s.computeAPI, fmt.Sprintf("security_groups/%s/rules", GroupID), rules) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + data, err := s.handleHTTPError([]int{http.StatusCreated}, resp) + if err != nil { + return nil, err + } + var res postGroupRuleResponse + err = json.Unmarshal(data, &res) + return &res.SecurityGroupRule, err +} + +// UpdateSecurityGroupRule updates a SecurityGroupRule +func (s *API) UpdateSecurityGroupRule(rules UpdateSecurityGroupRule, GroupID, RuleID string) (*SecurityGroupRule, error) { + resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("security_groups/%s/rules/%s", GroupID, RuleID), rules) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var res postGroupRuleResponse + err = json.Unmarshal(body, &res) + return &res.SecurityGroupRule, err +} + +// DeleteSecurityGroupRule deletes a SecurityGroupRule +func (s *API) DeleteSecurityGroupRule(GroupID, RuleID string) error { + resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("security_groups/%s/rules/%s", GroupID, RuleID)) + if err != nil { + return err + } + defer resp.Body.Close() + + _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp) + return err +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/server.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/server.go new file mode 100644 index 00000000000..6e76dfa8523 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/server.go @@ -0,0 +1,324 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" + "time" +) + +// Server represents a server +type Server struct { + // Arch is the architecture target of the server + Arch string `json:"arch,omitempty"` + + // Identifier is a unique identifier for the server + Identifier string `json:"id,omitempty"` + + // Name is the user-defined name of the server + Name string `json:"name,omitempty"` + + // CreationDate is the creation date of the server + CreationDate string `json:"creation_date,omitempty"` + + // ModificationDate is the date of the last modification of the server + ModificationDate string `json:"modification_date,omitempty"` + + // Image is the image used by the server + Image Image `json:"image,omitempty"` + + // DynamicIPRequired is a flag that defines a server with a dynamic ip address attached + DynamicIPRequired *bool `json:"dynamic_ip_required,omitempty"` + + // PublicIP is the public IP address bound to the server + PublicAddress IPAddress `json:"public_ip,omitempty"` + + // State is the current status of the server + State string `json:"state,omitempty"` + + // StateDetail is the detailed status of the server + StateDetail string `json:"state_detail,omitempty"` + + // PrivateIP represents the private IPV4 attached to the server (changes on each boot) + PrivateIP string `json:"private_ip,omitempty"` + + // Bootscript is the unique identifier of the selected bootscript + Bootscript *Bootscript `json:"bootscript,omitempty"` + + // BootType defines the type of boot. Can be local or bootscript + BootType string `json:"boot_type,omitempty"` + + // Hostname represents the ServerName in a format compatible with unix's hostname + Hostname string `json:"hostname,omitempty"` + + // Tags represents user-defined tags + Tags []string `json:"tags,omitempty"` + + // Volumes are the attached volumes + Volumes map[string]Volume `json:"volumes,omitempty"` + + // SecurityGroup is the selected security group object + SecurityGroup SecurityGroupRef `json:"security_group,omitempty"` + + // Organization is the owner of the server + Organization string `json:"organization,omitempty"` + + // CommercialType is the commercial type of the server (i.e: C1, C2[SML], VC1S) + CommercialType string `json:"commercial_type,omitempty"` + + // Location of the server + Location struct { + Platform string `json:"platform_id,omitempty"` + Chassis string `json:"chassis_id,omitempty"` + Cluster string `json:"cluster_id,omitempty"` + Hypervisor string `json:"hypervisor_id,omitempty"` + Blade string `json:"blade_id,omitempty"` + Node string `json:"node_id,omitempty"` + ZoneID string `json:"zone_id,omitempty"` + } `json:"location,omitempty"` + + IPV6 *IPV6 `json:"ipv6,omitempty"` + + EnableIPV6 bool `json:"enable_ipv6,omitempty"` + + // This fields are not returned by the API, we generate it + DNSPublic string `json:"dns_public,omitempty"` + DNSPrivate string `json:"dns_private,omitempty"` +} + +// ServerPatchDefinition represents a server with nullable fields (for PATCH) +type ServerPatchDefinition struct { + Arch *string `json:"arch,omitempty"` + Name *string `json:"name,omitempty"` + CreationDate *string `json:"creation_date,omitempty"` + ModificationDate *string `json:"modification_date,omitempty"` + Image *Image `json:"image,omitempty"` + DynamicIPRequired *bool `json:"dynamic_ip_required,omitempty"` + PublicAddress *IPAddress `json:"public_ip,omitempty"` + State *string `json:"state,omitempty"` + StateDetail *string `json:"state_detail,omitempty"` + PrivateIP *string `json:"private_ip,omitempty"` + Bootscript *string `json:"bootscript,omitempty"` + Hostname *string `json:"hostname,omitempty"` + Volumes *map[string]Volume `json:"volumes,omitempty"` + SecurityGroup *SecurityGroupRef `json:"security_group,omitempty"` + Organization *string `json:"organization,omitempty"` + Tags *[]string `json:"tags,omitempty"` + IPV6 *IPV6 `json:"ipv6,omitempty"` + EnableIPV6 *bool `json:"enable_ipv6,omitempty"` +} + +// ServerDefinition represents a server with image definition +type ServerDefinition struct { + // Name is the user-defined name of the server + Name string `json:"name"` + + // Image is the image used by the server + Image *string `json:"image,omitempty"` + + // Volumes are the attached volumes + Volumes map[string]string `json:"volumes,omitempty"` + + // DynamicIPRequired is a flag that defines a server with a dynamic ip address attached + DynamicIPRequired *bool `json:"dynamic_ip_required,omitempty"` + + // Bootscript is the bootscript used by the server + Bootscript *string `json:"bootscript"` + + // Tags are the metadata tags attached to the server + Tags []string `json:"tags,omitempty"` + + // Organization is the owner of the server + Organization string `json:"organization"` + + // CommercialType is the commercial type of the server (i.e: C1, C2[SML], VC1S) + CommercialType string `json:"commercial_type"` + + // BootType defines the type of boot. Can be local or bootscript + BootType string `json:"boot_type,omitempty"` + + PublicIP string `json:"public_ip,omitempty"` + + EnableIPV6 bool `json:"enable_ipv6,omitempty"` + + SecurityGroup string `json:"security_group,omitempty"` +} + +// Servers represents a group of servers +type Servers struct { + // Servers holds servers of the response + Servers []Server `json:"servers,omitempty"` +} + +// ServerAction represents an action to perform on a server +type ServerAction struct { + // Action is the name of the action to trigger + Action string `json:"action,omitempty"` +} + +// OneServer represents the response of a GET /servers/UUID API call +type OneServer struct { + Server Server `json:"server,omitempty"` +} + +// PatchServer updates a server +func (s *API) PatchServer(serverID string, definition ServerPatchDefinition) error { + resp, err := s.PatchResponse(s.computeAPI, fmt.Sprintf("servers/%s", serverID), definition) + if err != nil { + return err + } + defer resp.Body.Close() + + if _, err := s.handleHTTPError([]int{http.StatusOK}, resp); err != nil { + return err + } + return nil +} + +// GetServers gets the list of servers from the API +func (s *API) GetServers(all bool, limit int) ([]Server, error) { + query := url.Values{} + if !all { + query.Set("state", "running") + } + // TODO per_page=20&page=2&state=running + if limit > 0 { + // FIXME: wait for the API to be ready + // query.Set("per_page", strconv.Itoa(limit)) + panic("Not implemented yet") + } + + servers, err := s.fetchServers(query) + if err != nil { + return nil, err + } + + for i, server := range servers.Servers { + servers.Servers[i].DNSPublic = server.Identifier + URLPublicDNS + servers.Servers[i].DNSPrivate = server.Identifier + URLPrivateDNS + } + return servers.Servers, nil +} + +// SortServers represents a wrapper to sort by CreationDate the servers +type SortServers []Server + +func (s SortServers) Len() int { + return len(s) +} + +func (s SortServers) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +func (s SortServers) Less(i, j int) bool { + date1, _ := time.Parse("2006-01-02T15:04:05.000000+00:00", s[i].CreationDate) + date2, _ := time.Parse("2006-01-02T15:04:05.000000+00:00", s[j].CreationDate) + return date2.Before(date1) +} + +// GetServer gets a server from the API +func (s *API) GetServer(serverID string) (*Server, error) { + if serverID == "" { + return nil, fmt.Errorf("cannot get server without serverID") + } + resp, err := s.GetResponsePaginate(s.computeAPI, "servers/"+serverID, url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + + var oneServer OneServer + + if err = json.Unmarshal(body, &oneServer); err != nil { + return nil, err + } + // FIXME arch, owner, title + oneServer.Server.DNSPublic = oneServer.Server.Identifier + URLPublicDNS + oneServer.Server.DNSPrivate = oneServer.Server.Identifier + URLPrivateDNS + return &oneServer.Server, nil +} + +// PostServerAction posts an action on a server +func (s *API) PostServerAction(serverID, action string) (*Task, error) { + data := ServerAction{ + Action: action, + } + resp, err := s.PostResponse(s.computeAPI, fmt.Sprintf("servers/%s/action", serverID), data) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusAccepted}, resp) + if err != nil { + return nil, err + } + + var t oneTask + if err = json.Unmarshal(body, &t); err != nil { + return nil, err + } + return &t.Task, err +} + +func (s *API) fetchServers(query url.Values) (*Servers, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, "servers", query) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var servers Servers + + if err = json.Unmarshal(body, &servers); err != nil { + return nil, err + } + return &servers, nil +} + +// DeleteServer deletes a server +func (s *API) DeleteServer(serverID string) error { + resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("servers/%s", serverID)) + if err != nil { + return err + } + defer resp.Body.Close() + + if _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp); err != nil { + return err + } + return nil +} + +// CreateServer creates a new server +func (s *API) CreateServer(definition ServerDefinition) (*Server, error) { + definition.Organization = s.Organization + + resp, err := s.PostResponse(s.computeAPI, "servers", definition) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) + if err != nil { + return nil, err + } + var data OneServer + + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return &data.Server, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/snapshot.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/snapshot.go new file mode 100644 index 00000000000..99571eb5283 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/snapshot.go @@ -0,0 +1,138 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// SnapshotDefinition represents a snapshot definition +type SnapshotDefinition struct { + VolumeIDentifier string `json:"volume_id"` + Name string `json:"name,omitempty"` + Organization string `json:"organization"` +} + +// Snapshot represents a Snapshot +type Snapshot struct { + // Identifier is a unique identifier for the snapshot + Identifier string `json:"id,omitempty"` + + // Name is a user-defined name for the snapshot + Name string `json:"name,omitempty"` + + // CreationDate is the creation date of the snapshot + CreationDate string `json:"creation_date,omitempty"` + + // ModificationDate is the date of the last modification of the snapshot + ModificationDate string `json:"modification_date,omitempty"` + + // Size is the allocated size of the volume + Size uint64 `json:"size,omitempty"` + + // Organization is the owner of the snapshot + Organization string `json:"organization"` + + // State is the current state of the snapshot + State string `json:"state"` + + // VolumeType is the kind of volume behind the snapshot + VolumeType string `json:"volume_type"` + + // BaseVolume is the volume from which the snapshot inherits + BaseVolume Volume `json:"base_volume,omitempty"` +} + +// oneSnapshot represents the response of a GET /snapshots/UUID API call +type oneSnapshot struct { + Snapshot Snapshot `json:"snapshot,omitempty"` +} + +// Snapshots represents a group of snapshots +type Snapshots struct { + // Snapshots holds snapshots of the response + Snapshots []Snapshot `json:"snapshots,omitempty"` +} + +// CreateSnapshot creates a new snapshot +func (s *API) CreateSnapshot(volumeID string, name string) (*Snapshot, error) { + definition := SnapshotDefinition{ + VolumeIDentifier: volumeID, + Name: name, + Organization: s.Organization, + } + resp, err := s.PostResponse(s.computeAPI, "snapshots", definition) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) + if err != nil { + return nil, err + } + var snapshot oneSnapshot + + if err = json.Unmarshal(body, &snapshot); err != nil { + return nil, err + } + return &snapshot.Snapshot, nil +} + +// DeleteSnapshot deletes a snapshot +func (s *API) DeleteSnapshot(snapshotID string) error { + resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("snapshots/%s", snapshotID)) + if err != nil { + return err + } + defer resp.Body.Close() + + if _, err := s.handleHTTPError([]int{http.StatusNoContent}, resp); err != nil { + return err + } + return nil +} + +// GetSnapshots gets the list of snapshots from the API +func (s *API) GetSnapshots() ([]Snapshot, error) { + query := url.Values{} + + resp, err := s.GetResponsePaginate(s.computeAPI, "snapshots", query) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var snapshots Snapshots + + if err = json.Unmarshal(body, &snapshots); err != nil { + return nil, err + } + return snapshots.Snapshots, nil +} + +// GetSnapshot gets a snapshot from the API +func (s *API) GetSnapshot(snapshotID string) (*Snapshot, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, "snapshots/"+snapshotID, url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var oneSnapshot oneSnapshot + + if err = json.Unmarshal(body, &oneSnapshot); err != nil { + return nil, err + } + // FIXME region, arch, owner, title + return &oneSnapshot.Snapshot, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/tasks.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/tasks.go new file mode 100644 index 00000000000..70b502a077b --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/tasks.go @@ -0,0 +1,82 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// Task represents a Task +type Task struct { + // Identifier is a unique identifier for the task + Identifier string `json:"id,omitempty"` + + // StartDate is the start date of the task + StartDate string `json:"started_at,omitempty"` + + // TerminationDate is the termination date of the task + TerminationDate string `json:"terminated_at,omitempty"` + + HrefFrom string `json:"href_from,omitempty"` + + Description string `json:"description,omitempty"` + + Status string `json:"status,omitempty"` + + Progress int `json:"progress,omitempty"` +} + +// oneTask represents the response of a GET /tasks/UUID API call +type oneTask struct { + Task Task `json:"task,omitempty"` +} + +// Tasks represents a group of tasks +type Tasks struct { + // Tasks holds tasks of the response + Tasks []Task `json:"tasks,omitempty"` +} + +// GetTasks get the list of tasks from the API +func (s *API) GetTasks() ([]Task, error) { + query := url.Values{} + // TODO per_page=20&page=2 + resp, err := s.GetResponsePaginate(s.computeAPI, "tasks", query) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var tasks Tasks + + if err = json.Unmarshal(body, &tasks); err != nil { + return nil, err + } + return tasks.Tasks, nil +} + +// GetTask fetches a specific task +func (s *API) GetTask(id string) (*Task, error) { + query := url.Values{} + resp, err := s.GetResponsePaginate(s.computeAPI, fmt.Sprintf("tasks/%s", id), query) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + + var t oneTask + if err = json.Unmarshal(body, &t); err != nil { + return nil, err + } + return &t.Task, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/tokens.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/tokens.go new file mode 100644 index 00000000000..b3dff56bb80 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/tokens.go @@ -0,0 +1,135 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// Token represents a Token +type Token struct { + UserID string `json:"user_id"` + Description string `json:"description,omitempty"` + Roles Role `json:"roles"` + Expires string `json:"expires"` + InheritsUsersPerms bool `json:"inherits_user_perms"` + ID string `json:"id"` +} + +// Role represents a Token UserId Role +type Role struct { + Organization Organization `json:"organization,omitempty"` + Role string `json:"role,omitempty"` +} + +type getTokenResponse struct { + Token Token `json:"token"` +} + +type getTokensResponse struct { + Tokens []Token `json:"tokens"` +} + +func (s *API) GetTokens() ([]Token, error) { + query := url.Values{} + // TODO per_page=20&page=2 + resp, err := s.GetResponsePaginate(s.computeAPI, "tokens", query) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var token getTokensResponse + + if err = json.Unmarshal(body, &token); err != nil { + return nil, err + } + return token.Tokens, nil +} + +type CreateTokenRequest struct { + Email string `json:"email"` + Password string `json:"password,omitempty"` + Expires bool `json:"expires"` +} + +func (s *API) CreateToken(req *CreateTokenRequest) (*Token, error) { + resp, err := s.PostResponse(AccountAPI, "tokens", req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) + if err != nil { + return nil, err + } + var data getTokenResponse + + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return &data.Token, nil +} + +type UpdateTokenRequest struct { + Description string `json:"description,omitempty"` + Expires bool `json:"expires"` + ID string `json:"-"` +} + +func (s *API) UpdateToken(req *UpdateTokenRequest) (*Token, error) { + resp, err := s.PatchResponse(AccountAPI, fmt.Sprintf("tokens/%s", req.ID), req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var data getTokenResponse + + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return &data.Token, nil +} + +func (s *API) GetToken(id string) (*Token, error) { + query := url.Values{} + resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("tokens/%s", id), query) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var data getTokenResponse + + if err = json.Unmarshal(body, &data); err != nil { + return nil, err + } + return &data.Token, nil +} + +func (s *API) DeleteToken(id string) error { + resp, err := s.DeleteResponse(AccountAPI, fmt.Sprintf("tokens/%s", id)) + if err != nil { + return err + } + + if _, err = s.handleHTTPError([]int{http.StatusNoContent}, resp); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/user.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/user.go new file mode 100644 index 00000000000..5c07cdbcdfd --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/user.go @@ -0,0 +1,101 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// User represents a User +type User struct { + Email string `json:"email"` + Firstname string `json:"firstname"` + Fullname string `json:"fullname"` + ID string `json:"id"` + Lastname string `json:"lastname"` + Organizations []Organization `json:"organizations"` + Roles []Role `json:"roles"` + SSHPublicKeys []KeyDefinition `json:"ssh_public_keys"` +} + +// KeyDefinition represents a key +type KeyDefinition struct { + Key string `json:"key"` + Fingerprint string `json:"fingerprint,omitempty"` +} + +// UsersDefinition represents the response of a GET /user +type UsersDefinition struct { + User User `json:"user"` +} + +// UserPatchSSHKeyDefinition represents a User Patch +type UserPatchSSHKeyDefinition struct { + SSHPublicKeys []KeyDefinition `json:"ssh_public_keys"` +} + +// PatchUserSSHKey updates a user +func (s *API) PatchUserSSHKey(UserID string, definition UserPatchSSHKeyDefinition) (*User, error) { + resp, err := s.PatchResponse(AccountAPI, fmt.Sprintf("users/%s", UserID), definition) + if err != nil { + return nil, err + } + + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var user UsersDefinition + + if err = json.Unmarshal(body, &user); err != nil { + return nil, err + } + return &user.User, nil +} + +// GetUserID returns the userID +func (s *API) GetUserID() (string, error) { + resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("tokens/%s", s.Token), url.Values{}) + if err != nil { + return "", err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return "", err + } + var token getTokenResponse + + if err = json.Unmarshal(body, &token); err != nil { + return "", err + } + return token.Token.UserID, nil +} + +// GetUser returns the user +func (s *API) GetUser() (*User, error) { + userID, err := s.GetUserID() + if err != nil { + return nil, err + } + resp, err := s.GetResponsePaginate(AccountAPI, fmt.Sprintf("users/%s", userID), url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var user UsersDefinition + + if err = json.Unmarshal(body, &user); err != nil { + return nil, err + } + return &user.User, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/user_data.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/user_data.go similarity index 79% rename from vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/user_data.go rename to vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/user_data.go index c404959babb..61608b8dbe1 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/api/user_data.go +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/user_data.go @@ -10,16 +10,16 @@ import ( "strings" ) -// ScalewayUserdatas represents the response of a GET /user_data -type ScalewayUserdatas struct { +// Userdatas represents the response of a GET /user_data +type Userdatas struct { UserData []string `json:"user_data"` } -// ScalewayUserdata represents []byte -type ScalewayUserdata []byte +// Userdata represents []byte +type Userdata []byte // GetUserdatas gets list of userdata for a server -func (s *ScalewayAPI) GetUserdatas(serverID string, metadata bool) (*ScalewayUserdatas, error) { +func (s *API) GetUserdatas(serverID string, metadata bool) (*Userdatas, error) { var uri, endpoint string endpoint = s.computeAPI @@ -40,7 +40,7 @@ func (s *ScalewayAPI) GetUserdatas(serverID string, metadata bool) (*ScalewayUse if err != nil { return nil, err } - var userdatas ScalewayUserdatas + var userdatas Userdatas if err = json.Unmarshal(body, &userdatas); err != nil { return nil, err @@ -48,12 +48,12 @@ func (s *ScalewayAPI) GetUserdatas(serverID string, metadata bool) (*ScalewayUse return &userdatas, nil } -func (s *ScalewayUserdata) String() string { +func (s *Userdata) String() string { return string(*s) } // GetUserdata gets a specific userdata for a server -func (s *ScalewayAPI) GetUserdata(serverID, key string, metadata bool) (*ScalewayUserdata, error) { +func (s *API) GetUserdata(serverID, key string, metadata bool) (*Userdata, error) { var uri, endpoint string endpoint = s.computeAPI @@ -74,13 +74,13 @@ func (s *ScalewayAPI) GetUserdata(serverID, key string, metadata bool) (*Scalewa if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("no such user_data %q (%d)", key, resp.StatusCode) } - var data ScalewayUserdata + var data Userdata data, err = ioutil.ReadAll(resp.Body) return &data, err } // PatchUserdata sets a user data -func (s *ScalewayAPI) PatchUserdata(serverID, key string, value []byte, metadata bool) error { +func (s *API) PatchUserdata(serverID, key string, value []byte, metadata bool) error { var resource, endpoint string endpoint = s.computeAPI @@ -104,7 +104,7 @@ func (s *ScalewayAPI) PatchUserdata(serverID, key string, value []byte, metadata req.Header.Set("Content-Type", "text/plain") req.Header.Set("User-Agent", s.userAgent) - resp, err := s.client.Do(req) + resp, err := s.Client.Do(req) if err != nil { return err } @@ -118,7 +118,7 @@ func (s *ScalewayAPI) PatchUserdata(serverID, key string, value []byte, metadata } // DeleteUserdata deletes a server user_data -func (s *ScalewayAPI) DeleteUserdata(serverID, key string, metadata bool) error { +func (s *API) DeleteUserdata(serverID, key string, metadata bool) error { var url, endpoint string endpoint = s.computeAPI diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/volume.go b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/volume.go new file mode 100644 index 00000000000..e4284cce564 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/github.com/nicolai86/scaleway-sdk/volume.go @@ -0,0 +1,183 @@ +package api + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" +) + +// Volume represents a Volume +type Volume struct { + // Identifier is a unique identifier for the volume + Identifier string `json:"id,omitempty"` + + // Size is the allocated size of the volume + Size uint64 `json:"size,omitempty"` + + // CreationDate is the creation date of the volume + CreationDate string `json:"creation_date,omitempty"` + + // ModificationDate is the date of the last modification of the volume + ModificationDate string `json:"modification_date,omitempty"` + + // Organization is the organization owning the volume + Organization string `json:"organization,omitempty"` + + // Name is the name of the volume + Name string `json:"name,omitempty"` + + // Server is the server using this image + Server *struct { + Identifier string `json:"id,omitempty"` + Name string `json:"name,omitempty"` + } `json:"server,omitempty"` + + // VolumeType is a identifier for the kind of volume (default: l_ssd) + VolumeType string `json:"volume_type,omitempty"` + + // ExportURI represents the url used by initrd/scripts to attach the volume + ExportURI string `json:"export_uri,omitempty"` +} + +type volumeResponse struct { + Volume Volume `json:"volume,omitempty"` +} + +// VolumeDefinition represents a volume definition +type VolumeDefinition struct { + // Name is the user-defined name of the volume + Name string `json:"name"` + + // Image is the image used by the volume + Size uint64 `json:"size"` + + // Bootscript is the bootscript used by the volume + Type string `json:"volume_type"` + + // Organization is the owner of the volume + Organization string `json:"organization"` +} + +// VolumePutDefinition represents a volume with nullable fields (for PUT) +type VolumePutDefinition struct { + Identifier *string `json:"id,omitempty"` + Size *uint64 `json:"size,omitempty"` + CreationDate *string `json:"creation_date,omitempty"` + ModificationDate *string `json:"modification_date,omitempty"` + Organization *string `json:"organization,omitempty"` + Name *string `json:"name,omitempty"` + Server struct { + Identifier *string `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + } `json:"server,omitempty"` + VolumeType *string `json:"volume_type,omitempty"` + ExportURI *string `json:"export_uri,omitempty"` +} + +// CreateVolume creates a new volume +func (s *API) CreateVolume(definition VolumeDefinition) (*Volume, error) { + definition.Organization = s.Organization + if definition.Type == "" { + definition.Type = "l_ssd" + } + + resp, err := s.PostResponse(s.computeAPI, "volumes", definition) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusCreated}, resp) + if err != nil { + return nil, err + } + var volume volumeResponse + + if err = json.Unmarshal(body, &volume); err != nil { + return nil, err + } + return &volume.Volume, nil +} + +// UpdateVolume updates a volume +func (s *API) UpdateVolume(volumeID string, definition VolumePutDefinition) (*Volume, error) { + resp, err := s.PutResponse(s.computeAPI, fmt.Sprintf("volumes/%s", volumeID), definition) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var volume volumeResponse + + if err = json.Unmarshal(body, &volume); err != nil { + return nil, err + } + return &volume.Volume, nil +} + +// DeleteVolume deletes a volume +func (s *API) DeleteVolume(volumeID string) error { + resp, err := s.DeleteResponse(s.computeAPI, fmt.Sprintf("volumes/%s", volumeID)) + if err != nil { + return err + } + defer resp.Body.Close() + + if _, err := s.handleHTTPError([]int{http.StatusNoContent}, resp); err != nil { + return err + } + return nil +} + +type volumesResponse struct { + Volumes []Volume `json:"volumes,omitempty"` +} + +// GetVolumes gets the list of volumes from the API +func (s *API) GetVolumes() (*[]Volume, error) { + query := url.Values{} + + resp, err := s.GetResponsePaginate(s.computeAPI, "volumes", query) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + + var volumes volumesResponse + + if err = json.Unmarshal(body, &volumes); err != nil { + return nil, err + } + return &volumes.Volumes, nil +} + +// GetVolume gets a volume from the API +func (s *API) GetVolume(volumeID string) (*Volume, error) { + resp, err := s.GetResponsePaginate(s.computeAPI, "volumes/"+volumeID, url.Values{}) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := s.handleHTTPError([]int{http.StatusOK}, resp) + if err != nil { + return nil, err + } + var volume volumeResponse + + if err = json.Unmarshal(body, &volume); err != nil { + return nil, err + } + // FIXME region, arch, owner, title + return &volume.Volume, nil +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/vendor.json b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/vendor.json index 4d3bfab6fb7..dfe73626d80 100644 --- a/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/vendor.json +++ b/vendor/github.com/hashicorp/go-discover/provider/scaleway/vendor/vendor.json @@ -2,7 +2,7 @@ "comment": "", "ignore": "test", "package": [ - {"path":"github.com/nicolai86/scaleway-sdk/api","checksumSHA1":"ROp7ZtwHdxYKpmwycOxbOOXNnzo=","revision":"33df10cad9fff60467a3dcb992d5340c2b9a8046","revisionTime":"2017-09-17T18:57:50Z"}, + {"path":"github.com/nicolai86/scaleway-sdk","checksumSHA1":"w5i5Tximdwrgf2TDbyVr0KmNO9Q=","revision":"798f60e20bb2466bc3d8f36f1cf4f98410e49b6a","revisionTime":"2018-06-28T01:02:48Z"}, {"path":"golang.org/x/net/context","checksumSHA1":"GtamqiJoL7PGHsN454AoffBFMa8=","revision":"c73622c77280266305273cb545f54516ced95b93","revisionTime":"2017-06-11T01:16:46Z"}, {"path":"golang.org/x/sync/errgroup","checksumSHA1":"S0DP7Pn7sZUmXc55IzZnNvERu6s=","revision":"8e0aa688b654ef28caa72506fa5ec8dba9fc7690","revisionTime":"2017-07-19T03:38:01Z"} ], diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/tencentcloud_discover.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/tencentcloud_discover.go new file mode 100644 index 00000000000..57e195678f4 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/tencentcloud_discover.go @@ -0,0 +1,134 @@ +// Package tencentcloud provides node discovery for TencentCloud. +package tencentcloud + +import ( + "fmt" + "io/ioutil" + "log" + + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" + cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" +) + +type Provider struct { + userAgent string +} + +func (p *Provider) SetUserAgent(s string) { + p.userAgent = s +} + +func (p *Provider) Help() string { + return `TencentCloud: + + provider: "tencentcloud" + region: The TencentCloud region + tag_key: The tag key to filter on + tag_value: The tag value to filter on + address_type: "private_v4", "public_v4". (default: "private_v4") + access_key_id: The secret id of TencentCloud + access_key_secret: The secret key of TencentCloud + + This required permission to 'cvm:DescribeInstances'. + It is recommended you make a dedicated key used only for auto-joining. +` +} + +func (p *Provider) Addrs(args map[string]string, l *log.Logger) ([]string, error) { + if args["provider"] != "tencentcloud" { + return nil, fmt.Errorf("discover-tencentcloud: invalid provider " + args["provider"]) + } + + if l == nil { + l = log.New(ioutil.Discard, "", 0) + } + + region := args["region"] + tagKey := args["tag_key"] + tagValue := args["tag_value"] + addressType := args["address_type"] + accessKeyID := args["access_key_id"] + accessKeySecret := args["access_key_secret"] + + l.Printf("[DEBUG] discover-tencentcloud: Using region=%s, tag_key=%s, tag_value=%s", region, tagKey, tagValue) + if accessKeyID == "" { + l.Printf("[DEBUG] discover-tencentcloud: No static credentials provided") + } else { + l.Printf("[DEBUG] discover-tencentcloud: Static credentials provided") + } + + if region == "" { + l.Printf("[DEBUG] discover-tencentcloud: Region not provided") + return nil, fmt.Errorf("discover-tencentcloud: region missing") + } + l.Printf("[DEBUG] discover-tencentcloud: region is %s", region) + + if addressType == "" { + addressType = "private_v4" + } + + if addressType != "private_v4" && addressType != "public_v4" { + l.Printf("[DEBUG] discover-tencentcloud: Address type %s invalid", addressType) + return nil, fmt.Errorf("discover-tencentcloud: invalid address_type " + addressType) + } + l.Printf("[DEBUG] discover-tencentcloud: address type is %s", addressType) + + credential := common.NewCredential( + accessKeyID, + accessKeySecret, + ) + + cpf := profile.NewClientProfile() + cpf.HttpProfile.ReqMethod = "POST" + cpf.HttpProfile.ReqTimeout = 300 + cpf.Language = "en-US" + cvmClient, _ := cvm.NewClient(credential, region, cpf) + + l.Printf("[DEBUG] discover-tencentcloud: Filter instances with %s=%s", tagKey, tagValue) + request := cvm.NewDescribeInstancesRequest() + request.Filters = []*cvm.Filter{ + { + Name: stringToPointer("instance-state"), + Values: []*string{stringToPointer("RUNNING")}, + }, + { + Name: stringToPointer("tag:" + tagKey), + Values: []*string{stringToPointer(tagValue)}, + }, + } + + response, err := cvmClient.DescribeInstances(request) + if err != nil { + l.Printf("[DEBUG] discover-tencentcloud: DescribeInstances failed, %s", err) + return nil, fmt.Errorf("discover-tencentcloud: DescribeInstances failed, %s", err) + } + l.Printf("[DEBUG] discover-tencentcloud: Found %d instances", len(response.Response.InstanceSet)) + + var addrs []string + for _, v := range response.Response.InstanceSet { + switch addressType { + case "public_v4": + if len(v.PublicIpAddresses) == 0 { + l.Printf("[DEBUG] discover-tencentcloud: Instance %s has no public_v4", *v.InstanceId) + continue + } + l.Printf("[DEBUG] discover-tencentcloud: Instance %s has public_v4 %v", *v.InstanceId, *v.PublicIpAddresses[0]) + addrs = append(addrs, *v.PublicIpAddresses[0]) + case "private_v4": + if len(v.PrivateIpAddresses) == 0 { + l.Printf("[DEBUG] discover-tencentcloud: Instance %s has no private_v4", *v.InstanceId) + continue + } + l.Printf("[DEBUG] discover-tencentcloud: Instance %s has private_v4 %v", *v.InstanceId, *v.PrivateIpAddresses[0]) + addrs = append(addrs, *v.PrivateIpAddresses[0]) + } + } + + l.Printf("[DEBUG] discover-tencentcloud: Found address: %v", addrs) + return addrs, nil +} + +func stringToPointer(s string) *string { + return &s +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/LICENSE new file mode 100644 index 00000000000..efc75a2253e --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2017-2018 Tencent Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/client.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/client.go new file mode 100644 index 00000000000..96a9644b1c7 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/client.go @@ -0,0 +1,264 @@ +package common + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "log" + "net/http" + "net/http/httputil" + "strconv" + "strings" + "time" + + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" +) + +type Client struct { + region string + httpClient *http.Client + httpProfile *profile.HttpProfile + profile *profile.ClientProfile + credential *Credential + signMethod string + unsignedPayload bool + debug bool +} + +func (c *Client) Send(request tchttp.Request, response tchttp.Response) (err error) { + if request.GetDomain() == "" { + domain := c.httpProfile.Endpoint + if domain == "" { + domain = tchttp.GetServiceDomain(request.GetService()) + } + request.SetDomain(domain) + } + + if request.GetHttpMethod() == "" { + request.SetHttpMethod(c.httpProfile.ReqMethod) + } + + tchttp.CompleteCommonParams(request, c.GetRegion()) + + if c.signMethod == "HmacSHA1" || c.signMethod == "HmacSHA256" { + return c.sendWithSignatureV1(request, response) + } else { + return c.sendWithSignatureV3(request, response) + } +} + +func (c *Client) sendWithSignatureV1(request tchttp.Request, response tchttp.Response) (err error) { + // TODO: not an elegant way, it should be done in common params, but finally it need to refactor + request.GetParams()["Language"] = c.profile.Language + err = tchttp.ConstructParams(request) + if err != nil { + return err + } + err = signRequest(request, c.credential, c.signMethod) + if err != nil { + return err + } + httpRequest, err := http.NewRequest(request.GetHttpMethod(), request.GetUrl(), request.GetBodyReader()) + if err != nil { + return err + } + if request.GetHttpMethod() == "POST" { + httpRequest.Header["Content-Type"] = []string{"application/x-www-form-urlencoded"} + } + if c.debug { + outbytes, err := httputil.DumpRequest(httpRequest, true) + if err != nil { + log.Printf("[ERROR] dump request failed because %s", err) + return err + } + log.Printf("[DEBUG] http request = %s", outbytes) + } + httpResponse, err := c.httpClient.Do(httpRequest) + if err != nil { + msg := fmt.Sprintf("Fail to get response because %s", err) + return errors.NewTencentCloudSDKError("ClientError.NetworkError", msg, "") + } + err = tchttp.ParseFromHttpResponse(httpResponse, response) + return err +} + +func (c *Client) sendWithSignatureV3(request tchttp.Request, response tchttp.Response) (err error) { + headers := map[string]string{ + "Host": request.GetDomain(), + "X-TC-Action": request.GetAction(), + "X-TC-Version": request.GetVersion(), + "X-TC-Timestamp": request.GetParams()["Timestamp"], + "X-TC-RequestClient": request.GetParams()["RequestClient"], + "X-TC-Language": c.profile.Language, + } + if c.region != "" { + headers["X-TC-Region"] = c.region + } + if c.credential.Token != "" { + headers["X-TC-Token"] = c.credential.Token + } + if request.GetHttpMethod() == "GET" { + headers["Content-Type"] = "application/x-www-form-urlencoded" + } else { + headers["Content-Type"] = "application/json" + } + + // start signature v3 process + + // build canonical request string + httpRequestMethod := request.GetHttpMethod() + canonicalURI := "/" + canonicalQueryString := "" + if httpRequestMethod == "GET" { + err = tchttp.ConstructParams(request) + if err != nil { + return err + } + params := make(map[string]string) + for key, value := range request.GetParams() { + params[key] = value + } + delete(params, "Action") + delete(params, "Version") + delete(params, "Nonce") + delete(params, "Region") + delete(params, "RequestClient") + delete(params, "Timestamp") + canonicalQueryString = tchttp.GetUrlQueriesEncoded(params) + } + canonicalHeaders := fmt.Sprintf("content-type:%s\nhost:%s\n", headers["Content-Type"], headers["Host"]) + signedHeaders := "content-type;host" + requestPayload := "" + if httpRequestMethod == "POST" { + b, err := json.Marshal(request) + if err != nil { + return err + } + requestPayload = string(b) + } + hashedRequestPayload := "" + if c.unsignedPayload { + hashedRequestPayload = sha256hex("UNSIGNED-PAYLOAD") + headers["X-TC-Content-SHA256"] = "UNSIGNED-PAYLOAD" + } else { + hashedRequestPayload = sha256hex(requestPayload) + } + canonicalRequest := fmt.Sprintf("%s\n%s\n%s\n%s\n%s\n%s", + httpRequestMethod, + canonicalURI, + canonicalQueryString, + canonicalHeaders, + signedHeaders, + hashedRequestPayload) + //log.Println("canonicalRequest:", canonicalRequest) + + // build string to sign + algorithm := "TC3-HMAC-SHA256" + requestTimestamp := headers["X-TC-Timestamp"] + timestamp, _ := strconv.ParseInt(requestTimestamp, 10, 64) + t := time.Unix(timestamp, 0).UTC() + // must be the format 2006-01-02, ref to package time for more info + date := t.Format("2006-01-02") + credentialScope := fmt.Sprintf("%s/%s/tc3_request", date, request.GetService()) + hashedCanonicalRequest := sha256hex(canonicalRequest) + string2sign := fmt.Sprintf("%s\n%s\n%s\n%s", + algorithm, + requestTimestamp, + credentialScope, + hashedCanonicalRequest) + //log.Println("string2sign", string2sign) + + // sign string + secretDate := hmacsha256(date, "TC3"+c.credential.SecretKey) + secretService := hmacsha256(request.GetService(), secretDate) + secretKey := hmacsha256("tc3_request", secretService) + signature := hex.EncodeToString([]byte(hmacsha256(string2sign, secretKey))) + //log.Println("signature", signature) + + // build authorization + authorization := fmt.Sprintf("%s Credential=%s/%s, SignedHeaders=%s, Signature=%s", + algorithm, + c.credential.SecretId, + credentialScope, + signedHeaders, + signature) + //log.Println("authorization", authorization) + + headers["Authorization"] = authorization + url := "https://" + request.GetDomain() + request.GetPath() + if canonicalQueryString != "" { + url = url + "?" + canonicalQueryString + } + httpRequest, err := http.NewRequest(httpRequestMethod, url, strings.NewReader(requestPayload)) + if err != nil { + return err + } + for k, v := range headers { + httpRequest.Header[k] = []string{v} + } + if c.debug { + outbytes, err := httputil.DumpRequest(httpRequest, true) + if err != nil { + log.Printf("[ERROR] dump request failed because %s", err) + return err + } + log.Printf("[DEBUG] http request = %s", outbytes) + } + httpResponse, err := c.httpClient.Do(httpRequest) + if err != nil { + msg := fmt.Sprintf("Fail to get response because %s", err) + return errors.NewTencentCloudSDKError("ClientError.NetworkError", msg, "") + } + err = tchttp.ParseFromHttpResponse(httpResponse, response) + return err +} + +func (c *Client) GetRegion() string { + return c.region +} + +func (c *Client) Init(region string) *Client { + c.httpClient = &http.Client{} + c.region = region + c.signMethod = "TC3-HMAC-SHA256" + c.debug = false + log.SetFlags(log.LstdFlags | log.Lshortfile) + return c +} + +func (c *Client) WithSecretId(secretId, secretKey string) *Client { + c.credential = NewCredential(secretId, secretKey) + return c +} + +func (c *Client) WithCredential(cred *Credential) *Client { + c.credential = cred + return c +} + +func (c *Client) WithProfile(clientProfile *profile.ClientProfile) *Client { + c.profile = clientProfile + c.signMethod = clientProfile.SignMethod + c.unsignedPayload = clientProfile.UnsignedPayload + c.httpProfile = clientProfile.HttpProfile + c.httpClient.Timeout = time.Duration(c.httpProfile.ReqTimeout) * time.Second + return c +} + +func (c *Client) WithSignatureMethod(method string) *Client { + c.signMethod = method + return c +} + +func (c *Client) WithHttpTransport(transport http.RoundTripper) *Client { + c.httpClient.Transport = transport + return c +} + +func NewClientWithSecretId(secretId, secretKey, region string) (client *Client, err error) { + client = &Client{} + client.Init(region).WithSecretId(secretId, secretKey) + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/credentials.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/credentials.go new file mode 100644 index 00000000000..b734c137346 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/credentials.go @@ -0,0 +1,58 @@ +package common + +type Credential struct { + SecretId string + SecretKey string + Token string +} + +func NewCredential(secretId, secretKey string) *Credential { + return &Credential{ + SecretId: secretId, + SecretKey: secretKey, + } +} + +func NewTokenCredential(secretId, secretKey, token string) *Credential { + return &Credential{ + SecretId: secretId, + SecretKey: secretKey, + Token: token, + } +} + +func (c *Credential) GetCredentialParams() map[string]string { + p := map[string]string{ + "SecretId": c.SecretId, + } + if c.Token != "" { + p["Token"] = c.Token + } + return p +} + +// Nowhere use them and we haven't well designed these structures and +// underlying method, which leads to the situation that it is hard to +// refactor it to interfaces. +// Hence they are removed and merged into Credential. + +//type TokenCredential struct { +// SecretId string +// SecretKey string +// Token string +//} + +//func NewTokenCredential(secretId, secretKey, token string) *TokenCredential { +// return &TokenCredential{ +// SecretId: secretId, +// SecretKey: secretKey, +// Token: token, +// } +//} + +//func (c *TokenCredential) GetCredentialParams() map[string]string { +// return map[string]string{ +// "SecretId": c.SecretId, +// "Token": c.Token, +// } +//} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors/errors.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors/errors.go new file mode 100644 index 00000000000..27589e59a16 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors/errors.go @@ -0,0 +1,35 @@ +package errors + +import ( + "fmt" +) + +type TencentCloudSDKError struct { + Code string + Message string + RequestId string +} + +func (e *TencentCloudSDKError) Error() string { + return fmt.Sprintf("[TencentCloudSDKError] Code=%s, Message=%s, RequestId=%s", e.Code, e.Message, e.RequestId) +} + +func NewTencentCloudSDKError(code, message, requestId string) error { + return &TencentCloudSDKError{ + Code: code, + Message: message, + RequestId: requestId, + } +} + +func (e *TencentCloudSDKError) GetCode() string { + return e.Code +} + +func (e *TencentCloudSDKError) GetMessage() string { + return e.Message +} + +func (e *TencentCloudSDKError) GetRequestId() string { + return e.RequestId +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go new file mode 100644 index 00000000000..67943599cb0 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go @@ -0,0 +1,233 @@ +package common + +import ( + "io" + //"log" + "math/rand" + "net/url" + "reflect" + "strconv" + "strings" + "time" +) + +const ( + POST = "POST" + GET = "GET" + + RootDomain = "tencentcloudapi.com" + Path = "/" +) + +type Request interface { + GetAction() string + GetBodyReader() io.Reader + GetDomain() string + GetHttpMethod() string + GetParams() map[string]string + GetPath() string + GetService() string + GetUrl() string + GetVersion() string + SetDomain(string) + SetHttpMethod(string) +} + +type BaseRequest struct { + httpMethod string + domain string + path string + params map[string]string + formParams map[string]string + + service string + version string + action string +} + +func (r *BaseRequest) GetAction() string { + return r.action +} + +func (r *BaseRequest) GetHttpMethod() string { + return r.httpMethod +} + +func (r *BaseRequest) GetParams() map[string]string { + return r.params +} + +func (r *BaseRequest) GetPath() string { + return r.path +} + +func (r *BaseRequest) GetDomain() string { + return r.domain +} + +func (r *BaseRequest) SetDomain(domain string) { + r.domain = domain +} + +func (r *BaseRequest) SetHttpMethod(method string) { + switch strings.ToUpper(method) { + case POST: + { + r.httpMethod = POST + } + case GET: + { + r.httpMethod = GET + } + default: + { + r.httpMethod = GET + } + } +} + +func (r *BaseRequest) GetService() string { + return r.service +} + +func (r *BaseRequest) GetUrl() string { + if r.httpMethod == GET { + return "https://" + r.domain + r.path + "?" + GetUrlQueriesEncoded(r.params) + } else if r.httpMethod == POST { + return "https://" + r.domain + r.path + } else { + return "" + } +} + +func (r *BaseRequest) GetVersion() string { + return r.version +} + +func GetUrlQueriesEncoded(params map[string]string) string { + values := url.Values{} + for key, value := range params { + if value != "" { + values.Add(key, value) + } + } + return values.Encode() +} + +func (r *BaseRequest) GetBodyReader() io.Reader { + if r.httpMethod == POST { + s := GetUrlQueriesEncoded(r.params) + return strings.NewReader(s) + } else { + return strings.NewReader("") + } +} + +func (r *BaseRequest) Init() *BaseRequest { + r.domain = "" + r.path = Path + r.params = make(map[string]string) + r.formParams = make(map[string]string) + return r +} + +func (r *BaseRequest) WithApiInfo(service, version, action string) *BaseRequest { + r.service = service + r.version = version + r.action = action + return r +} + +func GetServiceDomain(service string) (domain string) { + domain = service + "." + RootDomain + return +} + +func CompleteCommonParams(request Request, region string) { + params := request.GetParams() + params["Region"] = region + if request.GetVersion() != "" { + params["Version"] = request.GetVersion() + } + params["Action"] = request.GetAction() + params["Timestamp"] = strconv.FormatInt(time.Now().Unix(), 10) + params["Nonce"] = strconv.Itoa(rand.Int()) + params["RequestClient"] = "SDK_GO_3.0.84" +} + +func ConstructParams(req Request) (err error) { + value := reflect.ValueOf(req).Elem() + err = flatStructure(value, req, "") + //log.Printf("[DEBUG] params=%s", req.GetParams()) + return +} + +func flatStructure(value reflect.Value, request Request, prefix string) (err error) { + //log.Printf("[DEBUG] reflect value: %v", value.Type()) + valueType := value.Type() + for i := 0; i < valueType.NumField(); i++ { + tag := valueType.Field(i).Tag + nameTag, hasNameTag := tag.Lookup("name") + if !hasNameTag { + continue + } + field := value.Field(i) + kind := field.Kind() + if kind == reflect.Ptr && field.IsNil() { + continue + } + if kind == reflect.Ptr { + field = field.Elem() + kind = field.Kind() + } + key := prefix + nameTag + if kind == reflect.String { + s := field.String() + if s != "" { + request.GetParams()[key] = s + } + } else if kind == reflect.Bool { + request.GetParams()[key] = strconv.FormatBool(field.Bool()) + } else if kind == reflect.Int || kind == reflect.Int64 { + request.GetParams()[key] = strconv.FormatInt(field.Int(), 10) + } else if kind == reflect.Uint || kind == reflect.Uint64 { + request.GetParams()[key] = strconv.FormatUint(field.Uint(), 10) + } else if kind == reflect.Float64 { + request.GetParams()[key] = strconv.FormatFloat(field.Float(), 'f', -1, 64) + } else if kind == reflect.Slice { + list := value.Field(i) + for j := 0; j < list.Len(); j++ { + vj := list.Index(j) + key := prefix + nameTag + "." + strconv.Itoa(j) + kind = vj.Kind() + if kind == reflect.Ptr && vj.IsNil() { + continue + } + if kind == reflect.Ptr { + vj = vj.Elem() + kind = vj.Kind() + } + if kind == reflect.String { + request.GetParams()[key] = vj.String() + } else if kind == reflect.Bool { + request.GetParams()[key] = strconv.FormatBool(vj.Bool()) + } else if kind == reflect.Int || kind == reflect.Int64 { + request.GetParams()[key] = strconv.FormatInt(vj.Int(), 10) + } else if kind == reflect.Uint || kind == reflect.Uint64 { + request.GetParams()[key] = strconv.FormatUint(vj.Uint(), 10) + } else if kind == reflect.Float64 { + request.GetParams()[key] = strconv.FormatFloat(vj.Float(), 'f', -1, 64) + } else { + if err = flatStructure(vj, request, key+"."); err != nil { + return + } + } + } + } else { + if err = flatStructure(reflect.ValueOf(field.Interface()), request, prefix+nameTag+"."); err != nil { + return + } + } + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/response.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/response.go new file mode 100644 index 00000000000..288f21bdf65 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/response.go @@ -0,0 +1,81 @@ +package common + +import ( + "encoding/json" + "fmt" + "io/ioutil" + //"log" + "net/http" + + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +) + +type Response interface { + ParseErrorFromHTTPResponse(body []byte) error +} + +type BaseResponse struct { +} + +type ErrorResponse struct { + Response struct { + Error struct { + Code string `json:"Code"` + Message string `json:"Message"` + } `json:"Error" omitempty` + RequestId string `json:"RequestId"` + } `json:"Response"` +} + +type DeprecatedAPIErrorResponse struct { + Code int `json:"code"` + Message string `json:"message"` + CodeDesc string `json:"codeDesc"` +} + +func (r *BaseResponse) ParseErrorFromHTTPResponse(body []byte) (err error) { + resp := &ErrorResponse{} + err = json.Unmarshal(body, resp) + if err != nil { + msg := fmt.Sprintf("Fail to parse json content: %s, because: %s", body, err) + return errors.NewTencentCloudSDKError("ClientError.ParseJsonError", msg, "") + } + if resp.Response.Error.Code != "" { + return errors.NewTencentCloudSDKError(resp.Response.Error.Code, resp.Response.Error.Message, resp.Response.RequestId) + } + + deprecated := &DeprecatedAPIErrorResponse{} + err = json.Unmarshal(body, deprecated) + if err != nil { + msg := fmt.Sprintf("Fail to parse json content: %s, because: %s", body, err) + return errors.NewTencentCloudSDKError("ClientError.ParseJsonError", msg, "") + } + if deprecated.Code != 0 { + return errors.NewTencentCloudSDKError(deprecated.CodeDesc, deprecated.Message, "") + } + return nil +} + +func ParseFromHttpResponse(hr *http.Response, response Response) (err error) { + defer hr.Body.Close() + body, err := ioutil.ReadAll(hr.Body) + if err != nil { + msg := fmt.Sprintf("Fail to read response body because %s", err) + return errors.NewTencentCloudSDKError("ClientError.IOError", msg, "") + } + if hr.StatusCode != 200 { + msg := fmt.Sprintf("Request fail with http status code: %s, with body: %s", hr.Status, body) + return errors.NewTencentCloudSDKError("ClientError.HttpStatusCodeError", msg, "") + } + //log.Printf("[DEBUG] Response Body=%s", body) + err = response.ParseErrorFromHTTPResponse(body) + if err != nil { + return + } + err = json.Unmarshal(body, &response) + if err != nil { + msg := fmt.Sprintf("Fail to parse json content: %s, because: %s", body, err) + return errors.NewTencentCloudSDKError("ClientError.ParseJsonError", msg, "") + } + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/client_profile.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/client_profile.go new file mode 100644 index 00000000000..21069ff99de --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/client_profile.go @@ -0,0 +1,21 @@ +package profile + +type ClientProfile struct { + HttpProfile *HttpProfile + // Valid choices: HmacSHA1, HmacSHA256, TC3-HMAC-SHA256. + // Default value is TC3-HMAC-SHA256. + SignMethod string + UnsignedPayload bool + // Valid choices: zh-CN, en-US. + // Default value is zh-CN. + Language string +} + +func NewClientProfile() *ClientProfile { + return &ClientProfile{ + HttpProfile: NewHttpProfile(), + SignMethod: "TC3-HMAC-SHA256", + UnsignedPayload: false, + Language: "zh-CN", + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/http_profile.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/http_profile.go new file mode 100644 index 00000000000..8d4bf8f57b8 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile/http_profile.go @@ -0,0 +1,17 @@ +package profile + +type HttpProfile struct { + ReqMethod string + ReqTimeout int + Endpoint string + Protocol string +} + +func NewHttpProfile() *HttpProfile { + return &HttpProfile{ + ReqMethod: "POST", + ReqTimeout: 60, + Endpoint: "", + Protocol: "HTTPS", + } +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/sign.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/sign.go new file mode 100644 index 00000000000..0aa7b735571 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/sign.go @@ -0,0 +1,94 @@ +package common + +import ( + "bytes" + "crypto/hmac" + "crypto/sha1" + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "sort" + + tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" +) + +const ( + SHA256 = "HmacSHA256" + SHA1 = "HmacSHA1" +) + +func Sign(s, secretKey, method string) string { + hashed := hmac.New(sha1.New, []byte(secretKey)) + if method == SHA256 { + hashed = hmac.New(sha256.New, []byte(secretKey)) + } + hashed.Write([]byte(s)) + + return base64.StdEncoding.EncodeToString(hashed.Sum(nil)) +} + +func sha256hex(s string) string { + b := sha256.Sum256([]byte(s)) + return hex.EncodeToString(b[:]) +} + +func hmacsha256(s, key string) string { + hashed := hmac.New(sha256.New, []byte(key)) + hashed.Write([]byte(s)) + return string(hashed.Sum(nil)) +} + +func signRequest(request tchttp.Request, credential *Credential, method string) (err error) { + if method != SHA256 { + method = SHA1 + } + checkAuthParams(request, credential, method) + s := getStringToSign(request) + signature := Sign(s, credential.SecretKey, method) + request.GetParams()["Signature"] = signature + return +} + +func checkAuthParams(request tchttp.Request, credential *Credential, method string) { + params := request.GetParams() + credentialParams := credential.GetCredentialParams() + for key, value := range credentialParams { + params[key] = value + } + params["SignatureMethod"] = method + delete(params, "Signature") +} + +func getStringToSign(request tchttp.Request) string { + method := request.GetHttpMethod() + domain := request.GetDomain() + path := request.GetPath() + + var buf bytes.Buffer + buf.WriteString(method) + buf.WriteString(domain) + buf.WriteString(path) + buf.WriteString("?") + + params := request.GetParams() + // sort params + keys := make([]string, 0, len(params)) + for k, _ := range params { + keys = append(keys, k) + } + sort.Strings(keys) + + for i := range keys { + k := keys[i] + // TODO: check if server side allows empty value in url. + if params[k] == "" { + continue + } + buf.WriteString(k) + buf.WriteString("=") + buf.WriteString(params[k]) + buf.WriteString("&") + } + buf.Truncate(buf.Len() - 1) + return buf.String() +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/types.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/types.go new file mode 100644 index 00000000000..ec2c786dbf3 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/types.go @@ -0,0 +1,47 @@ +package common + +func IntPtr(v int) *int { + return &v +} + +func Int64Ptr(v int64) *int64 { + return &v +} + +func UintPtr(v uint) *uint { + return &v +} + +func Uint64Ptr(v uint64) *uint64 { + return &v +} + +func Float64Ptr(v float64) *float64 { + return &v +} + +func StringPtr(v string) *string { + return &v +} + +func StringValues(ptrs []*string) []string { + values := make([]string, len(ptrs)) + for i := 0; i < len(ptrs); i++ { + if ptrs[i] != nil { + values[i] = *ptrs[i] + } + } + return values +} + +func StringPtrs(vals []string) []*string { + ptrs := make([]*string, len(vals)) + for i := 0; i < len(vals); i++ { + ptrs[i] = &vals[i] + } + return ptrs +} + +func BoolPtr(v bool) *bool { + return &v +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/client.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/client.go new file mode 100644 index 00000000000..da06118ed86 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/client.go @@ -0,0 +1,1758 @@ +// Copyright (c) 2017-2018 THL A29 Limited, a Tencent company. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v20170312 + +import ( + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" +) + +const APIVersion = "2017-03-12" + +type Client struct { + common.Client +} + +// Deprecated +func NewClientWithSecretId(secretId, secretKey, region string) (client *Client, err error) { + cpf := profile.NewClientProfile() + client = &Client{} + client.Init(region).WithSecretId(secretId, secretKey).WithProfile(cpf) + return +} + +func NewClient(credential *common.Credential, region string, clientProfile *profile.ClientProfile) (client *Client, err error) { + client = &Client{} + client.Init(region). + WithCredential(credential). + WithProfile(clientProfile) + return +} + + +func NewAllocateHostsRequest() (request *AllocateHostsRequest) { + request = &AllocateHostsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "AllocateHosts") + return +} + +func NewAllocateHostsResponse() (response *AllocateHostsResponse) { + response = &AllocateHostsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (AllocateHosts) 用于创建一个或多个指定配置的CDH实例。 +// * 当HostChargeType为PREPAID时,必须指定HostChargePrepaid参数。 +func (c *Client) AllocateHosts(request *AllocateHostsRequest) (response *AllocateHostsResponse, err error) { + if request == nil { + request = NewAllocateHostsRequest() + } + response = NewAllocateHostsResponse() + err = c.Send(request, response) + return +} + +func NewAssociateInstancesKeyPairsRequest() (request *AssociateInstancesKeyPairsRequest) { + request = &AssociateInstancesKeyPairsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "AssociateInstancesKeyPairs") + return +} + +func NewAssociateInstancesKeyPairsResponse() (response *AssociateInstancesKeyPairsResponse) { + response = &AssociateInstancesKeyPairsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (AssociateInstancesKeyPairs) 用于将密钥绑定到实例上。 +// +// * 将密钥的公钥写入到实例的`SSH`配置当中,用户就可以通过该密钥的私钥来登录实例。 +// * 如果实例原来绑定过密钥,那么原来的密钥将失效。 +// * 如果实例原来是通过密码登录,绑定密钥后无法使用密码登录。 +// * 支持批量操作。每次请求批量实例的上限为100。如果批量实例存在不允许操作的实例,操作会以特定错误码返回。 +func (c *Client) AssociateInstancesKeyPairs(request *AssociateInstancesKeyPairsRequest) (response *AssociateInstancesKeyPairsResponse, err error) { + if request == nil { + request = NewAssociateInstancesKeyPairsRequest() + } + response = NewAssociateInstancesKeyPairsResponse() + err = c.Send(request, response) + return +} + +func NewAssociateSecurityGroupsRequest() (request *AssociateSecurityGroupsRequest) { + request = &AssociateSecurityGroupsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "AssociateSecurityGroups") + return +} + +func NewAssociateSecurityGroupsResponse() (response *AssociateSecurityGroupsResponse) { + response = &AssociateSecurityGroupsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (AssociateSecurityGroups) 用于绑定安全组到指定实例。 +func (c *Client) AssociateSecurityGroups(request *AssociateSecurityGroupsRequest) (response *AssociateSecurityGroupsResponse, err error) { + if request == nil { + request = NewAssociateSecurityGroupsRequest() + } + response = NewAssociateSecurityGroupsResponse() + err = c.Send(request, response) + return +} + +func NewCreateDisasterRecoverGroupRequest() (request *CreateDisasterRecoverGroupRequest) { + request = &CreateDisasterRecoverGroupRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "CreateDisasterRecoverGroup") + return +} + +func NewCreateDisasterRecoverGroupResponse() (response *CreateDisasterRecoverGroupResponse) { + response = &CreateDisasterRecoverGroupResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (CreateDisasterRecoverGroup)用于创建[分散置放群组](https://cloud.tencent.com/document/product/213/15486)。创建好的置放群组,可在[创建实例](https://cloud.tencent.com/document/api/213/15730)时指定。 +func (c *Client) CreateDisasterRecoverGroup(request *CreateDisasterRecoverGroupRequest) (response *CreateDisasterRecoverGroupResponse, err error) { + if request == nil { + request = NewCreateDisasterRecoverGroupRequest() + } + response = NewCreateDisasterRecoverGroupResponse() + err = c.Send(request, response) + return +} + +func NewCreateImageRequest() (request *CreateImageRequest) { + request = &CreateImageRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "CreateImage") + return +} + +func NewCreateImageResponse() (response *CreateImageResponse) { + response = &CreateImageResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(CreateImage)用于将实例的系统盘制作为新镜像,创建后的镜像可以用于创建实例。 +func (c *Client) CreateImage(request *CreateImageRequest) (response *CreateImageResponse, err error) { + if request == nil { + request = NewCreateImageRequest() + } + response = NewCreateImageResponse() + err = c.Send(request, response) + return +} + +func NewCreateKeyPairRequest() (request *CreateKeyPairRequest) { + request = &CreateKeyPairRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "CreateKeyPair") + return +} + +func NewCreateKeyPairResponse() (response *CreateKeyPairResponse) { + response = &CreateKeyPairResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (CreateKeyPair) 用于创建一个 `OpenSSH RSA` 密钥对,可以用于登录 `Linux` 实例。 +// +// * 开发者只需指定密钥对名称,即可由系统自动创建密钥对,并返回所生成的密钥对的 `ID` 及其公钥、私钥的内容。 +// * 密钥对名称不能和已经存在的密钥对的名称重复。 +// * 私钥的内容可以保存到文件中作为 `SSH` 的一种认证方式。 +// * 腾讯云不会保存用户的私钥,请妥善保管。 +func (c *Client) CreateKeyPair(request *CreateKeyPairRequest) (response *CreateKeyPairResponse, err error) { + if request == nil { + request = NewCreateKeyPairRequest() + } + response = NewCreateKeyPairResponse() + err = c.Send(request, response) + return +} + +func NewDeleteDisasterRecoverGroupsRequest() (request *DeleteDisasterRecoverGroupsRequest) { + request = &DeleteDisasterRecoverGroupsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DeleteDisasterRecoverGroups") + return +} + +func NewDeleteDisasterRecoverGroupsResponse() (response *DeleteDisasterRecoverGroupsResponse) { + response = &DeleteDisasterRecoverGroupsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DeleteDisasterRecoverGroups)用于删除[分散置放群组](https://cloud.tencent.com/document/product/213/15486)。只有空的置放群组才能被删除,非空的群组需要先销毁组内所有云主机,才能执行删除操作,不然会产生删除置放群组失败的错误。 +func (c *Client) DeleteDisasterRecoverGroups(request *DeleteDisasterRecoverGroupsRequest) (response *DeleteDisasterRecoverGroupsResponse, err error) { + if request == nil { + request = NewDeleteDisasterRecoverGroupsRequest() + } + response = NewDeleteDisasterRecoverGroupsResponse() + err = c.Send(request, response) + return +} + +func NewDeleteImagesRequest() (request *DeleteImagesRequest) { + request = &DeleteImagesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DeleteImages") + return +} + +func NewDeleteImagesResponse() (response *DeleteImagesResponse) { + response = &DeleteImagesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DeleteImages)用于删除一个或多个镜像。 +// +// * 当[镜像状态](https://cloud.tencent.com/document/api/213/9452#image_state)为`创建中`和`使用中`时, 不允许删除。镜像状态可以通过[DescribeImages](https://cloud.tencent.com/document/api/213/9418)获取。 +// * 每个地域最多只支持创建10个自定义镜像,删除镜像可以释放账户的配额。 +// * 当镜像正在被其它账户分享时,不允许删除。 +func (c *Client) DeleteImages(request *DeleteImagesRequest) (response *DeleteImagesResponse, err error) { + if request == nil { + request = NewDeleteImagesRequest() + } + response = NewDeleteImagesResponse() + err = c.Send(request, response) + return +} + +func NewDeleteKeyPairsRequest() (request *DeleteKeyPairsRequest) { + request = &DeleteKeyPairsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DeleteKeyPairs") + return +} + +func NewDeleteKeyPairsResponse() (response *DeleteKeyPairsResponse) { + response = &DeleteKeyPairsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DeleteKeyPairs) 用于删除已在腾讯云托管的密钥对。 +// +// * 可以同时删除多个密钥对。 +// * 不能删除已被实例或镜像引用的密钥对,所以需要独立判断是否所有密钥对都被成功删除。 +func (c *Client) DeleteKeyPairs(request *DeleteKeyPairsRequest) (response *DeleteKeyPairsResponse, err error) { + if request == nil { + request = NewDeleteKeyPairsRequest() + } + response = NewDeleteKeyPairsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDisasterRecoverGroupQuotaRequest() (request *DescribeDisasterRecoverGroupQuotaRequest) { + request = &DescribeDisasterRecoverGroupQuotaRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeDisasterRecoverGroupQuota") + return +} + +func NewDescribeDisasterRecoverGroupQuotaResponse() (response *DescribeDisasterRecoverGroupQuotaResponse) { + response = &DescribeDisasterRecoverGroupQuotaResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeDisasterRecoverGroupQuota)用于查询[分散置放群组](https://cloud.tencent.com/document/product/213/15486)配额。 +func (c *Client) DescribeDisasterRecoverGroupQuota(request *DescribeDisasterRecoverGroupQuotaRequest) (response *DescribeDisasterRecoverGroupQuotaResponse, err error) { + if request == nil { + request = NewDescribeDisasterRecoverGroupQuotaRequest() + } + response = NewDescribeDisasterRecoverGroupQuotaResponse() + err = c.Send(request, response) + return +} + +func NewDescribeDisasterRecoverGroupsRequest() (request *DescribeDisasterRecoverGroupsRequest) { + request = &DescribeDisasterRecoverGroupsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeDisasterRecoverGroups") + return +} + +func NewDescribeDisasterRecoverGroupsResponse() (response *DescribeDisasterRecoverGroupsResponse) { + response = &DescribeDisasterRecoverGroupsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeDisasterRecoverGroups)用于查询[分散置放群组](https://cloud.tencent.com/document/product/213/15486)信息。 +func (c *Client) DescribeDisasterRecoverGroups(request *DescribeDisasterRecoverGroupsRequest) (response *DescribeDisasterRecoverGroupsResponse, err error) { + if request == nil { + request = NewDescribeDisasterRecoverGroupsRequest() + } + response = NewDescribeDisasterRecoverGroupsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeHostsRequest() (request *DescribeHostsRequest) { + request = &DescribeHostsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeHosts") + return +} + +func NewDescribeHostsResponse() (response *DescribeHostsResponse) { + response = &DescribeHostsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeHosts) 用于获取一个或多个CDH实例的详细信息。 +func (c *Client) DescribeHosts(request *DescribeHostsRequest) (response *DescribeHostsResponse, err error) { + if request == nil { + request = NewDescribeHostsRequest() + } + response = NewDescribeHostsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeImageQuotaRequest() (request *DescribeImageQuotaRequest) { + request = &DescribeImageQuotaRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeImageQuota") + return +} + +func NewDescribeImageQuotaResponse() (response *DescribeImageQuotaResponse) { + response = &DescribeImageQuotaResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeImageQuota)用于查询用户帐号的镜像配额。 +func (c *Client) DescribeImageQuota(request *DescribeImageQuotaRequest) (response *DescribeImageQuotaResponse, err error) { + if request == nil { + request = NewDescribeImageQuotaRequest() + } + response = NewDescribeImageQuotaResponse() + err = c.Send(request, response) + return +} + +func NewDescribeImageSharePermissionRequest() (request *DescribeImageSharePermissionRequest) { + request = &DescribeImageSharePermissionRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeImageSharePermission") + return +} + +func NewDescribeImageSharePermissionResponse() (response *DescribeImageSharePermissionResponse) { + response = &DescribeImageSharePermissionResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeImageSharePermission)用于查询镜像分享信息。 +func (c *Client) DescribeImageSharePermission(request *DescribeImageSharePermissionRequest) (response *DescribeImageSharePermissionResponse, err error) { + if request == nil { + request = NewDescribeImageSharePermissionRequest() + } + response = NewDescribeImageSharePermissionResponse() + err = c.Send(request, response) + return +} + +func NewDescribeImagesRequest() (request *DescribeImagesRequest) { + request = &DescribeImagesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeImages") + return +} + +func NewDescribeImagesResponse() (response *DescribeImagesResponse) { + response = &DescribeImagesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeImages) 用于查看镜像列表。 +// +// * 可以通过指定镜像ID来查询指定镜像的详细信息,或通过设定过滤器来查询满足过滤条件的镜像的详细信息。 +// * 指定偏移(Offset)和限制(Limit)来选择结果中的一部分,默认返回满足条件的前20个镜像信息。 +func (c *Client) DescribeImages(request *DescribeImagesRequest) (response *DescribeImagesResponse, err error) { + if request == nil { + request = NewDescribeImagesRequest() + } + response = NewDescribeImagesResponse() + err = c.Send(request, response) + return +} + +func NewDescribeImportImageOsRequest() (request *DescribeImportImageOsRequest) { + request = &DescribeImportImageOsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeImportImageOs") + return +} + +func NewDescribeImportImageOsResponse() (response *DescribeImportImageOsResponse) { + response = &DescribeImportImageOsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 查看可以导入的镜像操作系统信息。 +func (c *Client) DescribeImportImageOs(request *DescribeImportImageOsRequest) (response *DescribeImportImageOsResponse, err error) { + if request == nil { + request = NewDescribeImportImageOsRequest() + } + response = NewDescribeImportImageOsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInstanceFamilyConfigsRequest() (request *DescribeInstanceFamilyConfigsRequest) { + request = &DescribeInstanceFamilyConfigsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstanceFamilyConfigs") + return +} + +func NewDescribeInstanceFamilyConfigsResponse() (response *DescribeInstanceFamilyConfigsResponse) { + response = &DescribeInstanceFamilyConfigsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeInstanceFamilyConfigs)查询当前用户和地域所支持的机型族列表信息。 +func (c *Client) DescribeInstanceFamilyConfigs(request *DescribeInstanceFamilyConfigsRequest) (response *DescribeInstanceFamilyConfigsResponse, err error) { + if request == nil { + request = NewDescribeInstanceFamilyConfigsRequest() + } + response = NewDescribeInstanceFamilyConfigsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInstanceInternetBandwidthConfigsRequest() (request *DescribeInstanceInternetBandwidthConfigsRequest) { + request = &DescribeInstanceInternetBandwidthConfigsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstanceInternetBandwidthConfigs") + return +} + +func NewDescribeInstanceInternetBandwidthConfigsResponse() (response *DescribeInstanceInternetBandwidthConfigsResponse) { + response = &DescribeInstanceInternetBandwidthConfigsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeInstanceInternetBandwidthConfigs) 用于查询实例带宽配置。 +// +// * 只支持查询`BANDWIDTH_PREPAID`计费模式的带宽配置。 +// * 接口返回实例的所有带宽配置信息(包含历史的带宽配置信息)。 +func (c *Client) DescribeInstanceInternetBandwidthConfigs(request *DescribeInstanceInternetBandwidthConfigsRequest) (response *DescribeInstanceInternetBandwidthConfigsResponse, err error) { + if request == nil { + request = NewDescribeInstanceInternetBandwidthConfigsRequest() + } + response = NewDescribeInstanceInternetBandwidthConfigsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInstanceTypeConfigsRequest() (request *DescribeInstanceTypeConfigsRequest) { + request = &DescribeInstanceTypeConfigsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstanceTypeConfigs") + return +} + +func NewDescribeInstanceTypeConfigsResponse() (response *DescribeInstanceTypeConfigsResponse) { + response = &DescribeInstanceTypeConfigsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeInstanceTypeConfigs) 用于查询实例机型配置。 +// +// * 可以根据`zone`、`instance-family`来查询实例机型配置。过滤条件详见过滤器`Filter`。 +// * 如果参数为空,返回指定地域的所有实例机型配置。 +func (c *Client) DescribeInstanceTypeConfigs(request *DescribeInstanceTypeConfigsRequest) (response *DescribeInstanceTypeConfigsResponse, err error) { + if request == nil { + request = NewDescribeInstanceTypeConfigsRequest() + } + response = NewDescribeInstanceTypeConfigsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInstanceVncUrlRequest() (request *DescribeInstanceVncUrlRequest) { + request = &DescribeInstanceVncUrlRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstanceVncUrl") + return +} + +func NewDescribeInstanceVncUrlResponse() (response *DescribeInstanceVncUrlResponse) { + response = &DescribeInstanceVncUrlResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 ( DescribeInstanceVncUrl ) 用于查询实例管理终端地址。 +// +// * 处于 `STOPPED` 状态的机器无法使用此功能。 +// * 管理终端地址的有效期为 15 秒,调用接口成功后如果 15 秒内不使用该链接进行访问,管理终端地址自动失效,您需要重新查询。 +// * 管理终端地址一旦被访问,将自动失效,您需要重新查询。 +// * 如果连接断开,每分钟内重新连接的次数不能超过 30 次。 +// * 获取到 `InstanceVncUrl` 后,您需要在在链接 末尾加上参数 `InstanceVncUrl=xxxx` 。 +// - 参数 `InstanceVncUrl` :调用接口成功后会返回的 `InstanceVncUrl` 的值。 +// +// 最后组成的 URL 格式如下: +// +// ``` +// https://img.qcloud.com/qcloud/app/active_vnc/index.html?InstanceVncUrl=wss%3A%2F%2Fbjvnc.qcloud.com%3A26789%2Fvnc%3Fs%3DaHpjWnRVMFNhYmxKdDM5MjRHNlVTSVQwajNUSW0wb2tBbmFtREFCTmFrcy8vUUNPMG0wSHZNOUUxRm5PMmUzWmFDcWlOdDJIbUJxSTZDL0RXcHZxYnZZMmRkWWZWcEZia2lyb09XMzdKNmM9 +// ``` +func (c *Client) DescribeInstanceVncUrl(request *DescribeInstanceVncUrlRequest) (response *DescribeInstanceVncUrlResponse, err error) { + if request == nil { + request = NewDescribeInstanceVncUrlRequest() + } + response = NewDescribeInstanceVncUrlResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInstancesRequest() (request *DescribeInstancesRequest) { + request = &DescribeInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstances") + return +} + +func NewDescribeInstancesResponse() (response *DescribeInstancesResponse) { + response = &DescribeInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeInstances) 用于查询一个或多个实例的详细信息。 +// +// * 可以根据实例`ID`、实例名称或者实例计费模式等信息来查询实例的详细信息。过滤信息详细请见过滤器`Filter`。 +// * 如果参数为空,返回当前用户一定数量(`Limit`所指定的数量,默认为20)的实例。 +func (c *Client) DescribeInstances(request *DescribeInstancesRequest) (response *DescribeInstancesResponse, err error) { + if request == nil { + request = NewDescribeInstancesRequest() + } + response = NewDescribeInstancesResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInstancesOperationLimitRequest() (request *DescribeInstancesOperationLimitRequest) { + request = &DescribeInstancesOperationLimitRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstancesOperationLimit") + return +} + +func NewDescribeInstancesOperationLimitResponse() (response *DescribeInstancesOperationLimitResponse) { + response = &DescribeInstancesOperationLimitResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeInstancesOperationLimit)用于查询实例操作限制。 +// +// * 目前支持调整配置操作限制次数查询。 +func (c *Client) DescribeInstancesOperationLimit(request *DescribeInstancesOperationLimitRequest) (response *DescribeInstancesOperationLimitResponse, err error) { + if request == nil { + request = NewDescribeInstancesOperationLimitRequest() + } + response = NewDescribeInstancesOperationLimitResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInstancesStatusRequest() (request *DescribeInstancesStatusRequest) { + request = &DescribeInstancesStatusRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInstancesStatus") + return +} + +func NewDescribeInstancesStatusResponse() (response *DescribeInstancesStatusResponse) { + response = &DescribeInstancesStatusResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeInstancesStatus) 用于查询一个或多个实例的状态。 +// +// * 可以根据实例`ID`来查询实例的状态。 +// * 如果参数为空,返回当前用户一定数量(Limit所指定的数量,默认为20)的实例状态。 +func (c *Client) DescribeInstancesStatus(request *DescribeInstancesStatusRequest) (response *DescribeInstancesStatusResponse, err error) { + if request == nil { + request = NewDescribeInstancesStatusRequest() + } + response = NewDescribeInstancesStatusResponse() + err = c.Send(request, response) + return +} + +func NewDescribeInternetChargeTypeConfigsRequest() (request *DescribeInternetChargeTypeConfigsRequest) { + request = &DescribeInternetChargeTypeConfigsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeInternetChargeTypeConfigs") + return +} + +func NewDescribeInternetChargeTypeConfigsResponse() (response *DescribeInternetChargeTypeConfigsResponse) { + response = &DescribeInternetChargeTypeConfigsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeInternetChargeTypeConfigs)用于查询网络的计费类型。 +func (c *Client) DescribeInternetChargeTypeConfigs(request *DescribeInternetChargeTypeConfigsRequest) (response *DescribeInternetChargeTypeConfigsResponse, err error) { + if request == nil { + request = NewDescribeInternetChargeTypeConfigsRequest() + } + response = NewDescribeInternetChargeTypeConfigsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeKeyPairsRequest() (request *DescribeKeyPairsRequest) { + request = &DescribeKeyPairsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeKeyPairs") + return +} + +func NewDescribeKeyPairsResponse() (response *DescribeKeyPairsResponse) { + response = &DescribeKeyPairsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DescribeKeyPairs) 用于查询密钥对信息。 +// +// * 密钥对是通过一种算法生成的一对密钥,在生成的密钥对中,一个向外界公开,称为公钥;另一个用户自己保留,称为私钥。密钥对的公钥内容可以通过这个接口查询,但私钥内容系统不保留。 +func (c *Client) DescribeKeyPairs(request *DescribeKeyPairsRequest) (response *DescribeKeyPairsResponse, err error) { + if request == nil { + request = NewDescribeKeyPairsRequest() + } + response = NewDescribeKeyPairsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeRegionsRequest() (request *DescribeRegionsRequest) { + request = &DescribeRegionsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeRegions") + return +} + +func NewDescribeRegionsResponse() (response *DescribeRegionsResponse) { + response = &DescribeRegionsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeRegions)用于查询地域信息。 +func (c *Client) DescribeRegions(request *DescribeRegionsRequest) (response *DescribeRegionsResponse, err error) { + if request == nil { + request = NewDescribeRegionsRequest() + } + response = NewDescribeRegionsResponse() + err = c.Send(request, response) + return +} + +func NewDescribeZoneInstanceConfigInfosRequest() (request *DescribeZoneInstanceConfigInfosRequest) { + request = &DescribeZoneInstanceConfigInfosRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeZoneInstanceConfigInfos") + return +} + +func NewDescribeZoneInstanceConfigInfosResponse() (response *DescribeZoneInstanceConfigInfosResponse) { + response = &DescribeZoneInstanceConfigInfosResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeZoneInstanceConfigInfos) 获取可用区的机型信息。 +func (c *Client) DescribeZoneInstanceConfigInfos(request *DescribeZoneInstanceConfigInfosRequest) (response *DescribeZoneInstanceConfigInfosResponse, err error) { + if request == nil { + request = NewDescribeZoneInstanceConfigInfosRequest() + } + response = NewDescribeZoneInstanceConfigInfosResponse() + err = c.Send(request, response) + return +} + +func NewDescribeZonesRequest() (request *DescribeZonesRequest) { + request = &DescribeZonesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DescribeZones") + return +} + +func NewDescribeZonesResponse() (response *DescribeZonesResponse) { + response = &DescribeZonesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(DescribeZones)用于查询可用区信息。 +func (c *Client) DescribeZones(request *DescribeZonesRequest) (response *DescribeZonesResponse, err error) { + if request == nil { + request = NewDescribeZonesRequest() + } + response = NewDescribeZonesResponse() + err = c.Send(request, response) + return +} + +func NewDisassociateInstancesKeyPairsRequest() (request *DisassociateInstancesKeyPairsRequest) { + request = &DisassociateInstancesKeyPairsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DisassociateInstancesKeyPairs") + return +} + +func NewDisassociateInstancesKeyPairsResponse() (response *DisassociateInstancesKeyPairsResponse) { + response = &DisassociateInstancesKeyPairsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DisassociateInstancesKeyPairs) 用于解除实例的密钥绑定关系。 +// +// * 只支持[`STOPPED`](https://cloud.tencent.com/document/api/213/9452#INSTANCE_STATE)状态的`Linux`操作系统的实例。 +// * 解绑密钥后,实例可以通过原来设置的密码登录。 +// * 如果原来没有设置密码,解绑后将无法使用 `SSH` 登录。可以调用 [ResetInstancesPassword](https://cloud.tencent.com/document/api/213/15736) 接口来设置登录密码。 +// * 支持批量操作。每次请求批量实例的上限为100。如果批量实例存在不允许操作的实例,操作会以特定错误码返回。 +func (c *Client) DisassociateInstancesKeyPairs(request *DisassociateInstancesKeyPairsRequest) (response *DisassociateInstancesKeyPairsResponse, err error) { + if request == nil { + request = NewDisassociateInstancesKeyPairsRequest() + } + response = NewDisassociateInstancesKeyPairsResponse() + err = c.Send(request, response) + return +} + +func NewDisassociateSecurityGroupsRequest() (request *DisassociateSecurityGroupsRequest) { + request = &DisassociateSecurityGroupsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "DisassociateSecurityGroups") + return +} + +func NewDisassociateSecurityGroupsResponse() (response *DisassociateSecurityGroupsResponse) { + response = &DisassociateSecurityGroupsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (DisassociateSecurityGroups) 用于解绑实例的指定安全组。 +func (c *Client) DisassociateSecurityGroups(request *DisassociateSecurityGroupsRequest) (response *DisassociateSecurityGroupsResponse, err error) { + if request == nil { + request = NewDisassociateSecurityGroupsRequest() + } + response = NewDisassociateSecurityGroupsResponse() + err = c.Send(request, response) + return +} + +func NewImportImageRequest() (request *ImportImageRequest) { + request = &ImportImageRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ImportImage") + return +} + +func NewImportImageResponse() (response *ImportImageResponse) { + response = &ImportImageResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ImportImage)用于导入镜像,导入后的镜像可用于创建实例。 +func (c *Client) ImportImage(request *ImportImageRequest) (response *ImportImageResponse, err error) { + if request == nil { + request = NewImportImageRequest() + } + response = NewImportImageResponse() + err = c.Send(request, response) + return +} + +func NewImportKeyPairRequest() (request *ImportKeyPairRequest) { + request = &ImportKeyPairRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ImportKeyPair") + return +} + +func NewImportKeyPairResponse() (response *ImportKeyPairResponse) { + response = &ImportKeyPairResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ImportKeyPair) 用于导入密钥对。 +// +// * 本接口的功能是将密钥对导入到用户账户,并不会自动绑定到实例。如需绑定可以使用[AssociasteInstancesKeyPair](https://cloud.tencent.com/document/api/213/9404)接口。 +// * 需指定密钥对名称以及该密钥对的公钥文本。 +// * 如果用户只有私钥,可以通过 `SSL` 工具将私钥转换成公钥后再导入。 +func (c *Client) ImportKeyPair(request *ImportKeyPairRequest) (response *ImportKeyPairResponse, err error) { + if request == nil { + request = NewImportKeyPairRequest() + } + response = NewImportKeyPairResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceModifyInstancesChargeTypeRequest() (request *InquiryPriceModifyInstancesChargeTypeRequest) { + request = &InquiryPriceModifyInstancesChargeTypeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceModifyInstancesChargeType") + return +} + +func NewInquiryPriceModifyInstancesChargeTypeResponse() (response *InquiryPriceModifyInstancesChargeTypeResponse) { + response = &InquiryPriceModifyInstancesChargeTypeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (InquiryPriceModifyInstancesChargeType) 用于切换实例的计费模式询价。 +// +// * 只支持从 `POSTPAID_BY_HOUR` 计费模式切换为`PREPAID`计费模式。 +// * 关机不收费的实例、`BC1`和`BS1`机型族的实例、设置定时销毁的实例不支持该操作。 +func (c *Client) InquiryPriceModifyInstancesChargeType(request *InquiryPriceModifyInstancesChargeTypeRequest) (response *InquiryPriceModifyInstancesChargeTypeResponse, err error) { + if request == nil { + request = NewInquiryPriceModifyInstancesChargeTypeRequest() + } + response = NewInquiryPriceModifyInstancesChargeTypeResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceRenewInstancesRequest() (request *InquiryPriceRenewInstancesRequest) { + request = &InquiryPriceRenewInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceRenewInstances") + return +} + +func NewInquiryPriceRenewInstancesResponse() (response *InquiryPriceRenewInstancesResponse) { + response = &InquiryPriceRenewInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (InquiryPriceRenewInstances) 用于续费包年包月实例询价。 +// +// * 只支持查询包年包月实例的续费价格。 +func (c *Client) InquiryPriceRenewInstances(request *InquiryPriceRenewInstancesRequest) (response *InquiryPriceRenewInstancesResponse, err error) { + if request == nil { + request = NewInquiryPriceRenewInstancesRequest() + } + response = NewInquiryPriceRenewInstancesResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceResetInstanceRequest() (request *InquiryPriceResetInstanceRequest) { + request = &InquiryPriceResetInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceResetInstance") + return +} + +func NewInquiryPriceResetInstanceResponse() (response *InquiryPriceResetInstanceResponse) { + response = &InquiryPriceResetInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (InquiryPriceResetInstance) 用于重装实例询价。* 如果指定了`ImageId`参数,则使用指定的镜像进行重装询价;否则按照当前实例使用的镜像进行重装询价。* 目前只支持[系统盘类型](/document/api/213/9452#block_device)是`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`类型的实例使用该接口实现`Linux`和`Windows`操作系统切换的重装询价。* 目前不支持海外地域的实例使用该接口实现`Linux`和`Windows`操作系统切换的重装询价。 +func (c *Client) InquiryPriceResetInstance(request *InquiryPriceResetInstanceRequest) (response *InquiryPriceResetInstanceResponse, err error) { + if request == nil { + request = NewInquiryPriceResetInstanceRequest() + } + response = NewInquiryPriceResetInstanceResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceResetInstancesInternetMaxBandwidthRequest() (request *InquiryPriceResetInstancesInternetMaxBandwidthRequest) { + request = &InquiryPriceResetInstancesInternetMaxBandwidthRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceResetInstancesInternetMaxBandwidth") + return +} + +func NewInquiryPriceResetInstancesInternetMaxBandwidthResponse() (response *InquiryPriceResetInstancesInternetMaxBandwidthResponse) { + response = &InquiryPriceResetInstancesInternetMaxBandwidthResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (InquiryPriceResetInstancesInternetMaxBandwidth) 用于调整实例公网带宽上限询价。 +// +// * 不同机型带宽上限范围不一致,具体限制详见[购买网络带宽](https://cloud.tencent.com/document/product/213/509)。 +// * 对于`BANDWIDTH_PREPAID`计费方式的带宽,需要输入参数`StartTime`和`EndTime`,指定调整后的带宽的生效时间段。在这种场景下目前不支持调小带宽,会涉及扣费,请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397)接口查询账户余额。 +// * 对于 `TRAFFIC_POSTPAID_BY_HOUR`、 `BANDWIDTH_POSTPAID_BY_HOUR` 和 `BANDWIDTH_PACKAGE` 计费方式的带宽,使用该接口调整带宽上限是实时生效的,可以在带宽允许的范围内调大或者调小带宽,不支持输入参数 `StartTime` 和 `EndTime` 。 +// * 接口不支持调整`BANDWIDTH_POSTPAID_BY_MONTH`计费方式的带宽。 +// * 接口不支持批量调整 `BANDWIDTH_PREPAID` 和 `BANDWIDTH_POSTPAID_BY_HOUR` 计费方式的带宽。 +// * 接口不支持批量调整混合计费方式的带宽。例如不支持同时调整`TRAFFIC_POSTPAID_BY_HOUR`和`BANDWIDTH_PACKAGE`计费方式的带宽。 +func (c *Client) InquiryPriceResetInstancesInternetMaxBandwidth(request *InquiryPriceResetInstancesInternetMaxBandwidthRequest) (response *InquiryPriceResetInstancesInternetMaxBandwidthResponse, err error) { + if request == nil { + request = NewInquiryPriceResetInstancesInternetMaxBandwidthRequest() + } + response = NewInquiryPriceResetInstancesInternetMaxBandwidthResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceResetInstancesTypeRequest() (request *InquiryPriceResetInstancesTypeRequest) { + request = &InquiryPriceResetInstancesTypeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceResetInstancesType") + return +} + +func NewInquiryPriceResetInstancesTypeResponse() (response *InquiryPriceResetInstancesTypeResponse) { + response = &InquiryPriceResetInstancesTypeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (InquiryPriceResetInstancesType) 用于调整实例的机型询价。 +// +// * 目前只支持[系统盘类型](https://cloud.tencent.com/document/api/213/9452#block_device)是`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`类型的实例使用该接口进行调整机型询价。 +// * 目前不支持[CDH](https://cloud.tencent.com/document/product/416)实例使用该接口调整机型询价。 +// * 对于包年包月实例,使用该接口会涉及扣费,请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397)接口查询账户余额。 +func (c *Client) InquiryPriceResetInstancesType(request *InquiryPriceResetInstancesTypeRequest) (response *InquiryPriceResetInstancesTypeResponse, err error) { + if request == nil { + request = NewInquiryPriceResetInstancesTypeRequest() + } + response = NewInquiryPriceResetInstancesTypeResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceResizeInstanceDisksRequest() (request *InquiryPriceResizeInstanceDisksRequest) { + request = &InquiryPriceResizeInstanceDisksRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceResizeInstanceDisks") + return +} + +func NewInquiryPriceResizeInstanceDisksResponse() (response *InquiryPriceResizeInstanceDisksResponse) { + response = &InquiryPriceResizeInstanceDisksResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (InquiryPriceResizeInstanceDisks) 用于扩容实例的数据盘询价。 +// +// * 目前只支持扩容非弹性数据盘([`DescribeDisks`](https://cloud.tencent.com/document/api/362/16315)接口返回值中的`Portable`为`false`表示非弹性)询价,且[数据盘类型](/document/api/213/9452#block_device)为:`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`。 +// * 目前不支持[CDH](https://cloud.tencent.com/document/product/416)实例使用该接口扩容数据盘询价。* 仅支持包年包月实例随机器购买的数据盘。* 目前只支持扩容一块数据盘询价。 +func (c *Client) InquiryPriceResizeInstanceDisks(request *InquiryPriceResizeInstanceDisksRequest) (response *InquiryPriceResizeInstanceDisksResponse, err error) { + if request == nil { + request = NewInquiryPriceResizeInstanceDisksRequest() + } + response = NewInquiryPriceResizeInstanceDisksResponse() + err = c.Send(request, response) + return +} + +func NewInquiryPriceRunInstancesRequest() (request *InquiryPriceRunInstancesRequest) { + request = &InquiryPriceRunInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "InquiryPriceRunInstances") + return +} + +func NewInquiryPriceRunInstancesResponse() (response *InquiryPriceRunInstancesResponse) { + response = &InquiryPriceRunInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(InquiryPriceRunInstances)用于创建实例询价。本接口仅允许针对购买限制范围内的实例配置进行询价, 详见:[创建实例](https://cloud.tencent.com/document/api/213/15730)。 +func (c *Client) InquiryPriceRunInstances(request *InquiryPriceRunInstancesRequest) (response *InquiryPriceRunInstancesResponse, err error) { + if request == nil { + request = NewInquiryPriceRunInstancesRequest() + } + response = NewInquiryPriceRunInstancesResponse() + err = c.Send(request, response) + return +} + +func NewModifyDisasterRecoverGroupAttributeRequest() (request *ModifyDisasterRecoverGroupAttributeRequest) { + request = &ModifyDisasterRecoverGroupAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyDisasterRecoverGroupAttribute") + return +} + +func NewModifyDisasterRecoverGroupAttributeResponse() (response *ModifyDisasterRecoverGroupAttributeResponse) { + response = &ModifyDisasterRecoverGroupAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ModifyDisasterRecoverGroupAttribute)用于修改[分散置放群组](https://cloud.tencent.com/document/product/213/15486)属性。 +func (c *Client) ModifyDisasterRecoverGroupAttribute(request *ModifyDisasterRecoverGroupAttributeRequest) (response *ModifyDisasterRecoverGroupAttributeResponse, err error) { + if request == nil { + request = NewModifyDisasterRecoverGroupAttributeRequest() + } + response = NewModifyDisasterRecoverGroupAttributeResponse() + err = c.Send(request, response) + return +} + +func NewModifyHostsAttributeRequest() (request *ModifyHostsAttributeRequest) { + request = &ModifyHostsAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyHostsAttribute") + return +} + +func NewModifyHostsAttributeResponse() (response *ModifyHostsAttributeResponse) { + response = &ModifyHostsAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ModifyHostsAttribute)用于修改CDH实例的属性,如实例名称和续费标记等。参数HostName和RenewFlag必须设置其中一个,但不能同时设置。 +func (c *Client) ModifyHostsAttribute(request *ModifyHostsAttributeRequest) (response *ModifyHostsAttributeResponse, err error) { + if request == nil { + request = NewModifyHostsAttributeRequest() + } + response = NewModifyHostsAttributeResponse() + err = c.Send(request, response) + return +} + +func NewModifyImageAttributeRequest() (request *ModifyImageAttributeRequest) { + request = &ModifyImageAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyImageAttribute") + return +} + +func NewModifyImageAttributeResponse() (response *ModifyImageAttributeResponse) { + response = &ModifyImageAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ModifyImageAttribute)用于修改镜像属性。 +// +// * 已分享的镜像无法修改属性。 +func (c *Client) ModifyImageAttribute(request *ModifyImageAttributeRequest) (response *ModifyImageAttributeResponse, err error) { + if request == nil { + request = NewModifyImageAttributeRequest() + } + response = NewModifyImageAttributeResponse() + err = c.Send(request, response) + return +} + +func NewModifyImageSharePermissionRequest() (request *ModifyImageSharePermissionRequest) { + request = &ModifyImageSharePermissionRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyImageSharePermission") + return +} + +func NewModifyImageSharePermissionResponse() (response *ModifyImageSharePermissionResponse) { + response = &ModifyImageSharePermissionResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ModifyImageSharePermission)用于修改镜像分享信息。 +// +// * 分享镜像后,被分享账户可以通过该镜像创建实例。 +// * 每个自定义镜像最多可共享给50个账户。 +// * 分享镜像无法更改名称,描述,仅可用于创建实例。 +// * 只支持分享到对方账户相同地域。 +func (c *Client) ModifyImageSharePermission(request *ModifyImageSharePermissionRequest) (response *ModifyImageSharePermissionResponse, err error) { + if request == nil { + request = NewModifyImageSharePermissionRequest() + } + response = NewModifyImageSharePermissionResponse() + err = c.Send(request, response) + return +} + +func NewModifyInstancesAttributeRequest() (request *ModifyInstancesAttributeRequest) { + request = &ModifyInstancesAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesAttribute") + return +} + +func NewModifyInstancesAttributeResponse() (response *ModifyInstancesAttributeResponse) { + response = &ModifyInstancesAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ModifyInstancesAttribute) 用于修改实例的属性(目前只支持修改实例的名称和关联的安全组)。 +// +// * “实例名称”仅为方便用户自己管理之用,腾讯云并不以此名称作为提交工单或是进行实例管理操作的依据。 +// * 支持批量操作。每次请求批量实例的上限为100。 +// * 修改关联安全组时,子机原来关联的安全组会被解绑。 +func (c *Client) ModifyInstancesAttribute(request *ModifyInstancesAttributeRequest) (response *ModifyInstancesAttributeResponse, err error) { + if request == nil { + request = NewModifyInstancesAttributeRequest() + } + response = NewModifyInstancesAttributeResponse() + err = c.Send(request, response) + return +} + +func NewModifyInstancesChargeTypeRequest() (request *ModifyInstancesChargeTypeRequest) { + request = &ModifyInstancesChargeTypeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesChargeType") + return +} + +func NewModifyInstancesChargeTypeResponse() (response *ModifyInstancesChargeTypeResponse) { + response = &ModifyInstancesChargeTypeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ModifyInstancesChargeType) 用于切换实例的计费模式。 +// +// * 只支持从 `POSTPAID_BY_HOUR` 计费模式切换为`PREPAID`计费模式。 +// * 关机不收费的实例、`BC1`和`BS1`机型族的实例、设置定时销毁的实例不支持该操作。 +func (c *Client) ModifyInstancesChargeType(request *ModifyInstancesChargeTypeRequest) (response *ModifyInstancesChargeTypeResponse, err error) { + if request == nil { + request = NewModifyInstancesChargeTypeRequest() + } + response = NewModifyInstancesChargeTypeResponse() + err = c.Send(request, response) + return +} + +func NewModifyInstancesProjectRequest() (request *ModifyInstancesProjectRequest) { + request = &ModifyInstancesProjectRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesProject") + return +} + +func NewModifyInstancesProjectResponse() (response *ModifyInstancesProjectResponse) { + response = &ModifyInstancesProjectResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ModifyInstancesProject) 用于修改实例所属项目。 +// +// * 项目为一个虚拟概念,用户可以在一个账户下面建立多个项目,每个项目中管理不同的资源;将多个不同实例分属到不同项目中,后续使用 [`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口查询实例,项目ID可用于过滤结果。 +// * 绑定负载均衡的实例不支持修改实例所属项目,请先使用[`DeregisterInstancesFromLoadBalancer`](https://cloud.tencent.com/document/api/214/1258)接口解绑负载均衡。 +// * 修改实例所属项目会自动解关联实例原来关联的安全组,修改完成后可能使用[`ModifySecurityGroupsOfInstance`](https://cloud.tencent.com/document/api/213/1367)接口关联安全组。 +// * 支持批量操作。每次请求批量实例的上限为100。 +func (c *Client) ModifyInstancesProject(request *ModifyInstancesProjectRequest) (response *ModifyInstancesProjectResponse, err error) { + if request == nil { + request = NewModifyInstancesProjectRequest() + } + response = NewModifyInstancesProjectResponse() + err = c.Send(request, response) + return +} + +func NewModifyInstancesRenewFlagRequest() (request *ModifyInstancesRenewFlagRequest) { + request = &ModifyInstancesRenewFlagRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesRenewFlag") + return +} + +func NewModifyInstancesRenewFlagResponse() (response *ModifyInstancesRenewFlagResponse) { + response = &ModifyInstancesRenewFlagResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ModifyInstancesRenewFlag) 用于修改包年包月实例续费标识。 +// +// * 实例被标识为自动续费后,每次在实例到期时,会自动续费一个月。 +// * 支持批量操作。每次请求批量实例的上限为100。 +func (c *Client) ModifyInstancesRenewFlag(request *ModifyInstancesRenewFlagRequest) (response *ModifyInstancesRenewFlagResponse, err error) { + if request == nil { + request = NewModifyInstancesRenewFlagRequest() + } + response = NewModifyInstancesRenewFlagResponse() + err = c.Send(request, response) + return +} + +func NewModifyInstancesVpcAttributeRequest() (request *ModifyInstancesVpcAttributeRequest) { + request = &ModifyInstancesVpcAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyInstancesVpcAttribute") + return +} + +func NewModifyInstancesVpcAttributeResponse() (response *ModifyInstancesVpcAttributeResponse) { + response = &ModifyInstancesVpcAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(ModifyInstancesVpcAttribute)用于修改实例vpc属性,如私有网络ip。 +// * 此操作默认会关闭实例,完成后再启动。 +// * 当指定私有网络ID和子网ID(子网必须在实例所在的可用区)与指定实例所在私有网络不一致时,会将实例迁移至指定的私有网络的子网下。执行此操作前请确保指定的实例上没有绑定[弹性网卡](https://cloud.tencent.com/document/product/576)和[负载均衡](https://cloud.tencent.com/document/product/214)。 +func (c *Client) ModifyInstancesVpcAttribute(request *ModifyInstancesVpcAttributeRequest) (response *ModifyInstancesVpcAttributeResponse, err error) { + if request == nil { + request = NewModifyInstancesVpcAttributeRequest() + } + response = NewModifyInstancesVpcAttributeResponse() + err = c.Send(request, response) + return +} + +func NewModifyKeyPairAttributeRequest() (request *ModifyKeyPairAttributeRequest) { + request = &ModifyKeyPairAttributeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ModifyKeyPairAttribute") + return +} + +func NewModifyKeyPairAttributeResponse() (response *ModifyKeyPairAttributeResponse) { + response = &ModifyKeyPairAttributeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ModifyKeyPairAttribute) 用于修改密钥对属性。 +// +// * 修改密钥对ID所指定的密钥对的名称和描述信息。 +// * 密钥对名称不能和已经存在的密钥对的名称重复。 +// * 密钥对ID是密钥对的唯一标识,不可修改。 +func (c *Client) ModifyKeyPairAttribute(request *ModifyKeyPairAttributeRequest) (response *ModifyKeyPairAttributeResponse, err error) { + if request == nil { + request = NewModifyKeyPairAttributeRequest() + } + response = NewModifyKeyPairAttributeResponse() + err = c.Send(request, response) + return +} + +func NewRebootInstancesRequest() (request *RebootInstancesRequest) { + request = &RebootInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "RebootInstances") + return +} + +func NewRebootInstancesResponse() (response *RebootInstancesResponse) { + response = &RebootInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (RebootInstances) 用于重启实例。 +// +// * 只有状态为`RUNNING`的实例才可以进行此操作。 +// * 接口调用成功时,实例会进入`REBOOTING`状态;重启实例成功时,实例会进入`RUNNING`状态。 +// * 支持强制重启。强制重启的效果等同于关闭物理计算机的电源开关再重新启动。强制重启可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常重启时使用。 +// * 支持批量操作,每次请求批量实例的上限为100。 +func (c *Client) RebootInstances(request *RebootInstancesRequest) (response *RebootInstancesResponse, err error) { + if request == nil { + request = NewRebootInstancesRequest() + } + response = NewRebootInstancesResponse() + err = c.Send(request, response) + return +} + +func NewRenewHostsRequest() (request *RenewHostsRequest) { + request = &RenewHostsRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "RenewHosts") + return +} + +func NewRenewHostsResponse() (response *RenewHostsResponse) { + response = &RenewHostsResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (RenewHosts) 用于续费包年包月CDH实例。 +// +// * 只支持操作包年包月实例,否则操作会以特定[错误码](#4.-.E9.94.99.E8.AF.AF.E7.A0.81)返回。 +// * 续费时请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397)接口查询账户余额。 +func (c *Client) RenewHosts(request *RenewHostsRequest) (response *RenewHostsResponse, err error) { + if request == nil { + request = NewRenewHostsRequest() + } + response = NewRenewHostsResponse() + err = c.Send(request, response) + return +} + +func NewRenewInstancesRequest() (request *RenewInstancesRequest) { + request = &RenewInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "RenewInstances") + return +} + +func NewRenewInstancesResponse() (response *RenewInstancesResponse) { + response = &RenewInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (RenewInstances) 用于续费包年包月实例。 +// +// * 只支持操作包年包月实例。 +// * 续费时请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397)接口查询账户余额。 +func (c *Client) RenewInstances(request *RenewInstancesRequest) (response *RenewInstancesResponse, err error) { + if request == nil { + request = NewRenewInstancesRequest() + } + response = NewRenewInstancesResponse() + err = c.Send(request, response) + return +} + +func NewResetInstanceRequest() (request *ResetInstanceRequest) { + request = &ResetInstanceRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ResetInstance") + return +} + +func NewResetInstanceResponse() (response *ResetInstanceResponse) { + response = &ResetInstanceResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ResetInstance) 用于重装指定实例上的操作系统。 +// +// * 如果指定了`ImageId`参数,则使用指定的镜像重装;否则按照当前实例使用的镜像进行重装。 +// * 系统盘将会被格式化,并重置;请确保系统盘中无重要文件。 +// * `Linux`和`Windows`系统互相切换时,该实例系统盘`ID`将发生变化,系统盘关联快照将无法回滚、恢复数据。 +// * 密码不指定将会通过站内信下发随机密码。 +// * 目前只支持[系统盘类型](https://cloud.tencent.com/document/api/213/9452#block_device)是`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`类型的实例使用该接口实现`Linux`和`Windows`操作系统切换。 +// * 目前不支持海外地域的实例使用该接口实现`Linux`和`Windows`操作系统切换。 +func (c *Client) ResetInstance(request *ResetInstanceRequest) (response *ResetInstanceResponse, err error) { + if request == nil { + request = NewResetInstanceRequest() + } + response = NewResetInstanceResponse() + err = c.Send(request, response) + return +} + +func NewResetInstancesInternetMaxBandwidthRequest() (request *ResetInstancesInternetMaxBandwidthRequest) { + request = &ResetInstancesInternetMaxBandwidthRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ResetInstancesInternetMaxBandwidth") + return +} + +func NewResetInstancesInternetMaxBandwidthResponse() (response *ResetInstancesInternetMaxBandwidthResponse) { + response = &ResetInstancesInternetMaxBandwidthResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ResetInstancesInternetMaxBandwidth) 用于调整实例公网带宽上限。 +// +// * 不同机型带宽上限范围不一致,具体限制详见[购买网络带宽](https://cloud.tencent.com/document/product/213/509)。 +// * 对于 `BANDWIDTH_PREPAID` 计费方式的带宽,需要输入参数 `StartTime` 和 `EndTime` ,指定调整后的带宽的生效时间段。在这种场景下目前不支持调小带宽,会涉及扣费,请确保账户余额充足。可通过 [`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397) 接口查询账户余额。 +// * 对于 `TRAFFIC_POSTPAID_BY_HOUR` 、 `BANDWIDTH_POSTPAID_BY_HOUR` 和 `BANDWIDTH_PACKAGE` 计费方式的带宽,使用该接口调整带宽上限是实时生效的,可以在带宽允许的范围内调大或者调小带宽,不支持输入参数 `StartTime` 和 `EndTime` 。 +// * 接口不支持调整 `BANDWIDTH_POSTPAID_BY_MONTH` 计费方式的带宽。 +// * 接口不支持批量调整 `BANDWIDTH_PREPAID` 和 `BANDWIDTH_POSTPAID_BY_HOUR` 计费方式的带宽。 +// * 接口不支持批量调整混合计费方式的带宽。例如不支持同时调整 `TRAFFIC_POSTPAID_BY_HOUR` 和 `BANDWIDTH_PACKAGE` 计费方式的带宽。 +func (c *Client) ResetInstancesInternetMaxBandwidth(request *ResetInstancesInternetMaxBandwidthRequest) (response *ResetInstancesInternetMaxBandwidthResponse, err error) { + if request == nil { + request = NewResetInstancesInternetMaxBandwidthRequest() + } + response = NewResetInstancesInternetMaxBandwidthResponse() + err = c.Send(request, response) + return +} + +func NewResetInstancesPasswordRequest() (request *ResetInstancesPasswordRequest) { + request = &ResetInstancesPasswordRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ResetInstancesPassword") + return +} + +func NewResetInstancesPasswordResponse() (response *ResetInstancesPasswordResponse) { + response = &ResetInstancesPasswordResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ResetInstancesPassword) 用于将实例操作系统的密码重置为用户指定的密码。 +// +// * 只修改管理员帐号的密码。实例的操作系统不同,管理员帐号也会不一样(`Windows`为`Administrator`,`Ubuntu`为`ubuntu`,其它系统为`root`)。 +// * 重置处于运行中状态的实例,需要显式指定强制关机参数`ForceStop`。如果没有显式指定强制关机参数,则只有处于关机状态的实例才允许执行重置密码操作。 +// * 支持批量操作。将多个实例操作系统的密码重置为相同的密码。每次请求批量实例的上限为100。 +func (c *Client) ResetInstancesPassword(request *ResetInstancesPasswordRequest) (response *ResetInstancesPasswordResponse, err error) { + if request == nil { + request = NewResetInstancesPasswordRequest() + } + response = NewResetInstancesPasswordResponse() + err = c.Send(request, response) + return +} + +func NewResetInstancesTypeRequest() (request *ResetInstancesTypeRequest) { + request = &ResetInstancesTypeRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ResetInstancesType") + return +} + +func NewResetInstancesTypeResponse() (response *ResetInstancesTypeResponse) { + response = &ResetInstancesTypeResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ResetInstancesType) 用于调整实例的机型。 +// * 目前只支持[系统盘类型](/document/api/213/9452#block_device)是`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`类型的实例使用该接口进行机型调整。 +// * 目前不支持[CDH](https://cloud.tencent.com/document/product/416)实例使用该接口调整机型。对于包年包月实例,使用该接口会涉及扣费,请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397)接口查询账户余额。 +func (c *Client) ResetInstancesType(request *ResetInstancesTypeRequest) (response *ResetInstancesTypeResponse, err error) { + if request == nil { + request = NewResetInstancesTypeRequest() + } + response = NewResetInstancesTypeResponse() + err = c.Send(request, response) + return +} + +func NewResizeInstanceDisksRequest() (request *ResizeInstanceDisksRequest) { + request = &ResizeInstanceDisksRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "ResizeInstanceDisks") + return +} + +func NewResizeInstanceDisksResponse() (response *ResizeInstanceDisksResponse) { + response = &ResizeInstanceDisksResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (ResizeInstanceDisks) 用于扩容实例的数据盘。 +// +// * 目前只支持扩容非弹性数据盘([`DescribeDisks`](https://cloud.tencent.com/document/api/362/16315)接口返回值中的`Portable`为`false`表示非弹性),且[数据盘类型](/document/api/213/9452#block_device)为:`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`。 +// * 目前不支持[CDH](https://cloud.tencent.com/document/product/416)实例使用该接口扩容数据盘。 +// * 对于包年包月实例,使用该接口会涉及扣费,请确保账户余额充足。可通过[`DescribeAccountBalance`](https://cloud.tencent.com/document/product/378/4397)接口查询账户余额。 +// * 目前只支持扩容一块数据盘。 +func (c *Client) ResizeInstanceDisks(request *ResizeInstanceDisksRequest) (response *ResizeInstanceDisksResponse, err error) { + if request == nil { + request = NewResizeInstanceDisksRequest() + } + response = NewResizeInstanceDisksResponse() + err = c.Send(request, response) + return +} + +func NewRunInstancesRequest() (request *RunInstancesRequest) { + request = &RunInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "RunInstances") + return +} + +func NewRunInstancesResponse() (response *RunInstancesResponse) { + response = &RunInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (RunInstances) 用于创建一个或多个指定配置的实例。 +// +// * 实例创建成功后将自动开机启动,[实例状态](/document/api/213/9452#instance_state)变为“运行中”。 +// * 预付费实例的购买会预先扣除本次实例购买所需金额,按小时后付费实例购买会预先冻结本次实例购买一小时内所需金额,在调用本接口前请确保账户余额充足。 +// * 本接口允许购买的实例数量遵循[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664),所创建的实例和官网入口创建的实例共用配额。 +// * 本接口为异步接口,当创建请求下发成功后会返回一个实例`ID`列表,此时实例的创建并立即未完成。在此期间实例的状态将会处于“准备中”,可以通过调用 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) 接口查询对应实例的状态,来判断创建有没有最终成功。如果实例的状态由“准备中”变为“运行中”,则为创建成功。 +func (c *Client) RunInstances(request *RunInstancesRequest) (response *RunInstancesResponse, err error) { + if request == nil { + request = NewRunInstancesRequest() + } + response = NewRunInstancesResponse() + err = c.Send(request, response) + return +} + +func NewStartInstancesRequest() (request *StartInstancesRequest) { + request = &StartInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "StartInstances") + return +} + +func NewStartInstancesResponse() (response *StartInstancesResponse) { + response = &StartInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (StartInstances) 用于启动一个或多个实例。 +// +// * 只有状态为`STOPPED`的实例才可以进行此操作。 +// * 接口调用成功时,实例会进入`STARTING`状态;启动实例成功时,实例会进入`RUNNING`状态。 +// * 支持批量操作。每次请求批量实例的上限为100。 +func (c *Client) StartInstances(request *StartInstancesRequest) (response *StartInstancesResponse, err error) { + if request == nil { + request = NewStartInstancesRequest() + } + response = NewStartInstancesResponse() + err = c.Send(request, response) + return +} + +func NewStopInstancesRequest() (request *StopInstancesRequest) { + request = &StopInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "StopInstances") + return +} + +func NewStopInstancesResponse() (response *StopInstancesResponse) { + response = &StopInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (StopInstances) 用于关闭一个或多个实例。 +// +// * 只有状态为`RUNNING`的实例才可以进行此操作。 +// * 接口调用成功时,实例会进入`STOPPING`状态;关闭实例成功时,实例会进入`STOPPED`状态。 +// * 支持强制关闭。强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 +// * 支持批量操作。每次请求批量实例的上限为100。 +func (c *Client) StopInstances(request *StopInstancesRequest) (response *StopInstancesResponse, err error) { + if request == nil { + request = NewStopInstancesRequest() + } + response = NewStopInstancesResponse() + err = c.Send(request, response) + return +} + +func NewSyncImagesRequest() (request *SyncImagesRequest) { + request = &SyncImagesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "SyncImages") + return +} + +func NewSyncImagesResponse() (response *SyncImagesResponse) { + response = &SyncImagesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口(SyncImages)用于将自定义镜像同步到其它地区。 +// +// * 该接口每次调用只支持同步一个镜像。 +// * 该接口支持多个同步地域。 +// * 单个帐号在每个地域最多支持存在10个自定义镜像。 +func (c *Client) SyncImages(request *SyncImagesRequest) (response *SyncImagesResponse, err error) { + if request == nil { + request = NewSyncImagesRequest() + } + response = NewSyncImagesResponse() + err = c.Send(request, response) + return +} + +func NewTerminateInstancesRequest() (request *TerminateInstancesRequest) { + request = &TerminateInstancesRequest{ + BaseRequest: &tchttp.BaseRequest{}, + } + request.Init().WithApiInfo("cvm", APIVersion, "TerminateInstances") + return +} + +func NewTerminateInstancesResponse() (response *TerminateInstancesResponse) { + response = &TerminateInstancesResponse{ + BaseResponse: &tchttp.BaseResponse{}, + } + return +} + +// 本接口 (TerminateInstances) 用于主动退还实例。 +// +// * 不再使用的实例,可通过本接口主动退还。 +// * 按量计费的实例通过本接口可直接退还;包年包月实例如符合[退还规则](https://cloud.tencent.com/document/product/213/9711),也可通过本接口主动退还。 +// * 支持批量操作,每次请求批量实例的上限为100。 +func (c *Client) TerminateInstances(request *TerminateInstancesRequest) (response *TerminateInstancesResponse, err error) { + if request == nil { + request = NewTerminateInstancesRequest() + } + response = NewTerminateInstancesResponse() + err = c.Send(request, response) + return +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/models.go b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/models.go new file mode 100644 index 00000000000..b985b8a7eaa --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312/models.go @@ -0,0 +1,3490 @@ +// Copyright (c) 2017-2018 THL A29 Limited, a Tencent company. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v20170312 + +import ( + "encoding/json" + + tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" +) + +type ActionTimer struct { + + // 扩展数据 + Externals *Externals `json:"Externals,omitempty" name:"Externals"` + + // 定时器名称,目前仅支持销毁一个值:TerminateInstances。 + TimerAction *string `json:"TimerAction,omitempty" name:"TimerAction"` + + // 执行时间,格式形如:2018-5-29 11:26:40,执行时间必须大于当前时间5分钟。 + ActionTime *string `json:"ActionTime,omitempty" name:"ActionTime"` +} + +type AllocateHostsRequest struct { + *tchttp.BaseRequest + + // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目等属性。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 用于保证请求幂等性的字符串。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + HostChargePrepaid *ChargePrepaid `json:"HostChargePrepaid,omitempty" name:"HostChargePrepaid"` + + // 实例计费类型。目前仅支持:PREPAID(预付费,即包年包月模式)。 + HostChargeType *string `json:"HostChargeType,omitempty" name:"HostChargeType"` + + // CDH实例机型,默认为:'HS1'。 + HostType *string `json:"HostType,omitempty" name:"HostType"` + + // 购买CDH实例数量。 + HostCount *uint64 `json:"HostCount,omitempty" name:"HostCount"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification" list` +} + +func (r *AllocateHostsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *AllocateHostsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type AllocateHostsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 新创建云子机的实例id列表。 + HostIdSet []*string `json:"HostIdSet,omitempty" name:"HostIdSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *AllocateHostsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *AllocateHostsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type AssociateInstancesKeyPairsRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID,每次请求批量实例的上限为100。
可以通过以下方式获取可用的实例ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/index)查询实例ID。
  • 通过调用接口 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) ,取返回信息中的`InstanceId`获取实例ID。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 一个或多个待操作的密钥对ID,每次请求批量密钥对的上限为100。密钥对ID形如:`skey-3glfot13`。
    可以通过以下方式获取可用的密钥ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/sshkey)查询密钥ID。
  • 通过调用接口 [DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699) ,取返回信息中的`KeyId`获取密钥对ID。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds" list` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再绑定密钥。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机。
  • FALSE:表示在正常关机失败后不进行强制关机。
    默认取值:FALSE。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + +func (r *AssociateInstancesKeyPairsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *AssociateInstancesKeyPairsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type AssociateInstancesKeyPairsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *AssociateInstancesKeyPairsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *AssociateInstancesKeyPairsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type AssociateSecurityGroupsRequest struct { + *tchttp.BaseRequest + + // 要绑定的`安全组ID`,类似sg-efil73jd,只支持绑定单个安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds" list` + + // 被绑定的`实例ID`,类似ins-lesecurk,支持指定多个实例。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` +} + +func (r *AssociateSecurityGroupsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *AssociateSecurityGroupsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type AssociateSecurityGroupsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *AssociateSecurityGroupsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *AssociateSecurityGroupsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ChargePrepaid struct { + + // 购买实例的时长,单位:月。取值范围:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36。 + Period *uint64 `json:"Period,omitempty" name:"Period"` + + // 自动续费标识。取值范围:
  • NOTIFY_AND_AUTO_RENEW:通知过期且自动续费
  • NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费
  • DISABLE_NOTIFY_AND_MANUAL_RENEW:不通知过期不自动续费

    默认取值:NOTIFY_AND_AUTO_RENEW。若该参数指定为NOTIFY_AND_AUTO_RENEW,在账户余额充足的情况下,实例到期后将按月自动续费。 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` +} + +type CreateDisasterRecoverGroupRequest struct { + *tchttp.BaseRequest + + // 分散置放群组名称,长度1-60个字符,支持中、英文。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 分散置放群组类型,取值范围:
  • HOST:物理机
  • SW:交换机
  • RACK:机架 + Type *string `json:"Type,omitempty" name:"Type"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` +} + +func (r *CreateDisasterRecoverGroupRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateDisasterRecoverGroupRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateDisasterRecoverGroupResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 分散置放群组ID列表。 + DisasterRecoverGroupId *string `json:"DisasterRecoverGroupId,omitempty" name:"DisasterRecoverGroupId"` + + // 分散置放群组类型,取值范围:
  • HOST:物理机
  • SW:交换机
  • RACK:机架 + Type *string `json:"Type,omitempty" name:"Type"` + + // 分散置放群组名称,长度1-60个字符,支持中、英文。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 置放群组内可容纳的云主机数量。 + CvmQuotaTotal *int64 `json:"CvmQuotaTotal,omitempty" name:"CvmQuotaTotal"` + + // 置放群组内已有的云主机数量。 + CurrentNum *int64 `json:"CurrentNum,omitempty" name:"CurrentNum"` + + // 置放群组创建时间。 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *CreateDisasterRecoverGroupResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateDisasterRecoverGroupResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateImageRequest struct { + *tchttp.BaseRequest + + // 镜像名称 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 需要制作镜像的实例ID + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 镜像描述 + ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` + + // 软关机失败时是否执行强制关机以制作镜像 + ForcePoweroff *string `json:"ForcePoweroff,omitempty" name:"ForcePoweroff"` + + // 创建Windows镜像时是否启用Sysprep + Sysprep *string `json:"Sysprep,omitempty" name:"Sysprep"` + + // 实例处于运行中时,是否允许关机执行制作镜像任务。 + Reboot *string `json:"Reboot,omitempty" name:"Reboot"` + + // 实例需要制作镜像的数据盘Id + DataDiskIds []*string `json:"DataDiskIds,omitempty" name:"DataDiskIds" list` + + // 需要制作镜像的快照Id,必须包含一个系统盘快照 + SnapshotIds []*string `json:"SnapshotIds,omitempty" name:"SnapshotIds" list` + + // 检测请求的合法性,但不会对操作的资源产生任何影响 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` +} + +func (r *CreateImageRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateImageRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateImageResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *CreateImageResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateImageResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateKeyPairRequest struct { + *tchttp.BaseRequest + + // 密钥对名称,可由数字,字母和下划线组成,长度不超过25个字符。 + KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + + // 密钥对创建后所属的项目ID。 + // 可以通过以下方式获取项目ID: + //
  • 通过项目列表查询项目ID。 + //
  • 通过调用接口DescribeProject,取返回信息中的`projectId `获取项目ID。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` +} + +func (r *CreateKeyPairRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateKeyPairRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type CreateKeyPairResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 密钥对信息。 + KeyPair *KeyPair `json:"KeyPair,omitempty" name:"KeyPair"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *CreateKeyPairResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *CreateKeyPairResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DataDisk struct { + + // 数据盘大小,单位:GB。最小调整步长为10G,不同数据盘类型取值范围不同,具体限制详见:[CVM实例配置](/document/product/213/2177)。默认值为0,表示不购买数据盘。更多限制详见产品文档。 + DiskSize *int64 `json:"DiskSize,omitempty" name:"DiskSize"` + + // 数据盘类型。数据盘类型限制详见[CVM实例配置](/document/product/213/2177)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_PREMIUM:高性能云硬盘
  • CLOUD_SSD:SSD云硬盘

    默认取值:LOCAL_BASIC。

    该参数对`ResizeInstanceDisk`接口无效。 + DiskType *string `json:"DiskType,omitempty" name:"DiskType"` + + // 数据盘ID。LOCAL_BASIC 和 LOCAL_SSD 类型没有ID。暂时不支持该参数。 + DiskId *string `json:"DiskId,omitempty" name:"DiskId"` + + // 数据盘是否随子机销毁。取值范围: + //
  • TRUE:子机销毁时,销毁数据盘,只支持按小时后付费云盘 + //
  • FALSE:子机销毁时,保留数据盘
    + // 默认取值:TRUE
    + // 该参数目前仅用于 `RunInstances` 接口。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DeleteWithInstance *bool `json:"DeleteWithInstance,omitempty" name:"DeleteWithInstance"` + + // 数据盘快照ID。选择的数据盘快照大小需小于数据盘大小。 + // 注意:此字段可能返回 null,表示取不到有效值。 + SnapshotId *string `json:"SnapshotId,omitempty" name:"SnapshotId"` +} + +type DeleteDisasterRecoverGroupsRequest struct { + *tchttp.BaseRequest + + // 分散置放群组ID列表,可通过[DescribeDisasterRecoverGroups](https://cloud.tencent.com/document/api/213/17810)接口获取。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds" list` +} + +func (r *DeleteDisasterRecoverGroupsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DeleteDisasterRecoverGroupsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DeleteDisasterRecoverGroupsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DeleteDisasterRecoverGroupsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DeleteDisasterRecoverGroupsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DeleteImagesRequest struct { + *tchttp.BaseRequest + + // 准备删除的镜像Id列表 + ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds" list` +} + +func (r *DeleteImagesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DeleteImagesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DeleteImagesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DeleteImagesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DeleteImagesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DeleteKeyPairsRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的密钥对ID。每次请求批量密钥对的上限为100。
    可以通过以下方式获取可用的密钥ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/sshkey)查询密钥ID。
  • 通过调用接口 [DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699) ,取返回信息中的 `KeyId` 获取密钥对ID。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds" list` +} + +func (r *DeleteKeyPairsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DeleteKeyPairsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DeleteKeyPairsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DeleteKeyPairsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DeleteKeyPairsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDisasterRecoverGroupQuotaRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeDisasterRecoverGroupQuotaRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDisasterRecoverGroupQuotaRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDisasterRecoverGroupQuotaResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 可创建置放群组数量的上限。 + GroupQuota *int64 `json:"GroupQuota,omitempty" name:"GroupQuota"` + + // 当前用户已经创建的置放群组数量。 + CurrentNum *int64 `json:"CurrentNum,omitempty" name:"CurrentNum"` + + // 物理机类型容灾组内实例的配额数。 + CvmInHostGroupQuota *int64 `json:"CvmInHostGroupQuota,omitempty" name:"CvmInHostGroupQuota"` + + // 交换机类型容灾组内实例的配额数。 + CvmInSwGroupQuota *int64 `json:"CvmInSwGroupQuota,omitempty" name:"CvmInSwGroupQuota"` + + // 机架类型容灾组内实例的配额数。 + CvmInRackGroupQuota *int64 `json:"CvmInRackGroupQuota,omitempty" name:"CvmInRackGroupQuota"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDisasterRecoverGroupQuotaResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDisasterRecoverGroupQuotaResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDisasterRecoverGroupsRequest struct { + *tchttp.BaseRequest + + // 分散置放群组ID列表。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds" list` + + // 分散置放群组名称,支持模糊匹配。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeDisasterRecoverGroupsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDisasterRecoverGroupsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeDisasterRecoverGroupsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 分散置放群组信息列表。 + DisasterRecoverGroupSet []*DisasterRecoverGroup `json:"DisasterRecoverGroupSet,omitempty" name:"DisasterRecoverGroupSet" list` + + // 用户置放群组总量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeDisasterRecoverGroupsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeDisasterRecoverGroupsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeHostsRequest struct { + *tchttp.BaseRequest + + // 过滤条件。 + //
  • zone - String - 是否必填:否 - (过滤条件)按照可用区过滤。
  • + //
  • project-id - Integer - 是否必填:否 - (过滤条件)按照项目ID过滤。可通过调用 DescribeProject 查询已创建的项目列表或登录控制台进行查看;也可以调用 AddProject 创建新的项目。
  • + //
  • host-id - String - 是否必填:否 - (过滤条件)按照CDH ID过滤。CDH ID形如:host-11112222。
  • + //
  • host-name - String - 是否必填:否 - (过滤条件)按照CDH实例名称过滤。
  • + //
  • host-state - String - 是否必填:否 - (过滤条件)按照CDH实例状态进行过滤。(PENDING:创建中|LAUNCH_FAILURE:创建失败|RUNNING:运行中|EXPIRED:已过期)
  • + Filters []*Filter `json:"Filters,omitempty" name:"Filters" list` + + // 偏移量,默认为0。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeHostsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeHostsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeHostsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 符合查询条件的cdh实例总数 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // cdh实例详细信息列表 + HostSet []*HostItem `json:"HostSet,omitempty" name:"HostSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeHostsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeHostsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeImageQuotaRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeImageQuotaRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeImageQuotaRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeImageQuotaResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 账户的镜像配额 + ImageNumQuota *int64 `json:"ImageNumQuota,omitempty" name:"ImageNumQuota"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeImageQuotaResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeImageQuotaResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeImageSharePermissionRequest struct { + *tchttp.BaseRequest + + // 需要共享的镜像Id + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` +} + +func (r *DescribeImageSharePermissionRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeImageSharePermissionRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeImageSharePermissionResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 镜像共享信息 + SharePermissionSet []*SharePermission `json:"SharePermissionSet,omitempty" name:"SharePermissionSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeImageSharePermissionResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeImageSharePermissionResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeImagesRequest struct { + *tchttp.BaseRequest + + // 镜像ID列表 。镜像ID如:`img-gvbnzy6f`。array型参数的格式可以参考[API简介](https://cloud.tencent.com/document/api/213/15688)。镜像ID可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。 + ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds" list` + + // 过滤条件,每次请求的`Filters`的上限为0,`Filters.Values`的上限为5。参数不可以同时指定`ImageIds`和`Filters`。详细的过滤条件如下: + //
  • image-id - String - 是否必填: 否 - (过滤条件)按照镜像ID进行过滤
  • + //
  • image-type - String - 是否必填: 否 - (过滤条件)按照镜像类型进行过滤。取值范围: + // PRIVATE_IMAGE: 私有镜像 (本帐户创建的镜像) + // PUBLIC_IMAGE: 公共镜像 (腾讯云官方镜像) + // MARKET_IMAGE: 服务市场 (服务市场提供的镜像) + // SHARED_IMAGE: 共享镜像(其他账户共享给本帐户的镜像) 。
  • + Filters []*Filter `json:"Filters,omitempty" name:"Filters" list` + + // 偏移量,默认为0。关于Offset详见[API简介](/document/api/213/568#.E8.BE.93.E5.85.A5.E5.8F.82.E6.95.B0.E4.B8.8E.E8.BF.94.E5.9B.9E.E5.8F.82.E6.95.B0.E9.87.8A.E4.B9.89)。 + Offset *uint64 `json:"Offset,omitempty" name:"Offset"` + + // 数量限制,默认为20,最大值为100。关于Limit详见[API简介](/document/api/213/568#.E8.BE.93.E5.85.A5.E5.8F.82.E6.95.B0.E4.B8.8E.E8.BF.94.E5.9B.9E.E5.8F.82.E6.95.B0.E9.87.8A.E4.B9.89)。 + Limit *uint64 `json:"Limit,omitempty" name:"Limit"` + + // 实例类型,如 `S1.SMALL1` + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` +} + +func (r *DescribeImagesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeImagesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeImagesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 一个关于镜像详细信息的结构体,主要包括镜像的主要状态与属性。 + ImageSet []*Image `json:"ImageSet,omitempty" name:"ImageSet" list` + + // 符合要求的镜像数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeImagesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeImagesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeImportImageOsRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeImportImageOsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeImportImageOsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeImportImageOsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 支持的导入镜像的操作系统类型。 + ImportImageOsListSupported *ImageOsList `json:"ImportImageOsListSupported,omitempty" name:"ImportImageOsListSupported"` + + // 支持的导入镜像的操作系统版本。 + ImportImageOsVersionSet []*OsVersion `json:"ImportImageOsVersionSet,omitempty" name:"ImportImageOsVersionSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeImportImageOsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeImportImageOsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstanceFamilyConfigsRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeInstanceFamilyConfigsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstanceFamilyConfigsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstanceFamilyConfigsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 实例机型组配置的列表信息 + InstanceFamilyConfigSet []*InstanceFamilyConfig `json:"InstanceFamilyConfigSet,omitempty" name:"InstanceFamilyConfigSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeInstanceFamilyConfigsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstanceFamilyConfigsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstanceInternetBandwidthConfigsRequest struct { + *tchttp.BaseRequest + + // 待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + +func (r *DescribeInstanceInternetBandwidthConfigsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstanceInternetBandwidthConfigsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstanceInternetBandwidthConfigsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 带宽配置信息列表。 + InternetBandwidthConfigSet []*InternetBandwidthConfig `json:"InternetBandwidthConfigSet,omitempty" name:"InternetBandwidthConfigSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeInstanceInternetBandwidthConfigsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstanceInternetBandwidthConfigsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstanceTypeConfigsRequest struct { + *tchttp.BaseRequest + + // 过滤条件。 + //
  • zone - String - 是否必填:否 -(过滤条件)按照[可用区](https://cloud.tencent.com/document/api/213/9452#zone)过滤。
  • + //
  • instance-family - String - 是否必填:否 -(过滤条件)按照实例机型系列过滤。实例机型系列形如:S1、I1、M1等。
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为1。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters" list` +} + +func (r *DescribeInstanceTypeConfigsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstanceTypeConfigsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstanceTypeConfigsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 实例机型配置列表。 + InstanceTypeConfigSet []*InstanceTypeConfig `json:"InstanceTypeConfigSet,omitempty" name:"InstanceTypeConfigSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeInstanceTypeConfigsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstanceTypeConfigsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstanceVncUrlRequest struct { + *tchttp.BaseRequest + + // 一个操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` +} + +func (r *DescribeInstanceVncUrlRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstanceVncUrlRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstanceVncUrlResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 实例的管理终端地址。 + InstanceVncUrl *string `json:"InstanceVncUrl,omitempty" name:"InstanceVncUrl"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeInstanceVncUrlResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstanceVncUrlResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstancesOperationLimitRequest struct { + *tchttp.BaseRequest + + // 按照一个或者多个实例ID查询,可通过[DescribeInstances](https://cloud.tencent.com/document/api/213/9388)API返回值中的InstanceId获取。实例ID形如:ins-xxxxxxxx。(此参数的具体格式可参考API[简介](https://cloud.tencent.com/document/api/213/15688)的id.N一节)。每次请求的实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 实例操作。 + //
  • INSTANCE_DEGRADE:实例降配操作
  • + Operation *string `json:"Operation,omitempty" name:"Operation"` +} + +func (r *DescribeInstancesOperationLimitRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstancesOperationLimitRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstancesOperationLimitResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 该参数表示调整配置操作(降配)限制次数查询。 + InstanceOperationLimitSet []*OperationCountLimit `json:"InstanceOperationLimitSet,omitempty" name:"InstanceOperationLimitSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeInstancesOperationLimitResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstancesOperationLimitResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstancesRequest struct { + *tchttp.BaseRequest + + // 按照一个或者多个实例ID查询。实例ID形如:`ins-xxxxxxxx`。(此参数的具体格式可参考API[简介](https://cloud.tencent.com/document/api/213/15688)的`id.N`一节)。每次请求的实例的上限为100。参数不支持同时指定`InstanceIds`和`Filters`。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 过滤条件。 + //
  • zone - String - 是否必填:否 -(过滤条件)按照可用区过滤。
  • + //
  • project-id - Integer - 是否必填:否 -(过滤条件)按照项目ID过滤。可通过调用[DescribeProject](https://cloud.tencent.com/document/api/378/4400)查询已创建的项目列表或登录[控制台](https://console.cloud.tencent.com/cvm/index)进行查看;也可以调用[AddProject](https://cloud.tencent.com/document/api/378/4398)创建新的项目。
  • + //
  • host-id - String - 是否必填:否 - (过滤条件)按照[CDH](https://cloud.tencent.com/document/product/416) ID过滤。[CDH](https://cloud.tencent.com/document/product/416) ID形如:host-xxxxxxxx。
  • + //
  • vpc-id - String - 是否必填:否 - (过滤条件)按照VPC ID进行过滤。VPC ID形如:vpc-xxxxxxxx。
  • + //
  • subnet-id - String - 是否必填:否 - (过滤条件)按照子网ID进行过滤。子网ID形如:subnet-xxxxxxxx。
  • + //
  • instance-id - String - 是否必填:否 - (过滤条件)按照实例ID过滤。实例ID形如:ins-xxxxxxxx。
  • + //
  • security-group-id - String - 是否必填:否 - (过滤条件)按照安全组ID过滤,安全组ID形如: sg-8jlk3f3r。
  • + //
  • instance-name - String - 是否必填:否 - (过滤条件)按照实例名称过滤。
  • + //
  • instance-charge-type - String - 是否必填:否 -(过滤条件)按照实例计费模式过滤。 (PREPAID:表示预付费,即包年包月 | POSTPAID_BY_HOUR:表示后付费,即按量计费 | CDHPAID:表示[CDH](https://cloud.tencent.com/document/product/416)付费,即只对[CDH](https://cloud.tencent.com/document/product/416)计费,不对[CDH](https://cloud.tencent.com/document/product/416)上的实例计费。 )
  • + //
  • private-ip-address - String - 是否必填:否 - (过滤条件)按照实例主网卡的内网IP过滤。
  • + //
  • public-ip-address - String - 是否必填:否 - (过滤条件)按照实例主网卡的公网IP过滤,包含实例创建时自动分配的IP和实例创建后手动绑定的弹性IP。
  • + //
  • tag-key - String - 是否必填:否 - (过滤条件)按照标签键进行过滤。
  • + //
  • tag-value - String - 是否必填:否 - (过滤条件)按照标签值进行过滤。
  • + //
  • tag:tag-key - String - 是否必填:否 - (过滤条件)按照标签键值对进行过滤。 tag-key使用具体的标签键进行替换。使用请参考示例2。
  • + // 每次请求的`Filters`的上限为10,`Filter.Values`的上限为5。参数不支持同时指定`InstanceIds`和`Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters" list` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 符合条件的实例数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 实例详细信息列表。 + InstanceSet []*Instance `json:"InstanceSet,omitempty" name:"InstanceSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstancesStatusRequest struct { + *tchttp.BaseRequest + + // 按照一个或者多个实例ID查询。实例ID形如:`ins-11112222`。此参数的具体格式可参考API[简介](https://cloud.tencent.com/document/api/213/15688)的`id.N`一节)。每次请求的实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 偏移量,默认为0。关于`Offset`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于`Limit`的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeInstancesStatusRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstancesStatusRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInstancesStatusResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 符合条件的实例状态数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // [实例状态](https://cloud.tencent.com/document/api/213/15738) 列表。 + InstanceStatusSet []*InstanceStatus `json:"InstanceStatusSet,omitempty" name:"InstanceStatusSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeInstancesStatusResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInstancesStatusResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInternetChargeTypeConfigsRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeInternetChargeTypeConfigsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInternetChargeTypeConfigsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeInternetChargeTypeConfigsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 网络计费类型配置。 + InternetChargeTypeConfigSet []*InternetChargeTypeConfig `json:"InternetChargeTypeConfigSet,omitempty" name:"InternetChargeTypeConfigSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeInternetChargeTypeConfigsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeInternetChargeTypeConfigsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeKeyPairsRequest struct { + *tchttp.BaseRequest + + // 密钥对ID,密钥对ID形如:`skey-11112222`(此接口支持同时传入多个ID进行过滤。此参数的具体格式可参考 API [简介](https://cloud.tencent.com/document/api/213/15688)的 `id.N` 一节)。参数不支持同时指定 `KeyIds` 和 `Filters`。密钥对ID可以通过登录[控制台](https://console.cloud.tencent.com/cvm/index)查询。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds" list` + + // 过滤条件。 + //
  • project-id - Integer - 是否必填:否 -(过滤条件)按照项目ID过滤。可以通过[项目列表](https://console.cloud.tencent.com/project)查询项目ID,或者调用接口 [DescribeProject](https://cloud.tencent.com/document/api/378/4400),取返回信息中的projectId获取项目ID。
  • + //
  • key-name - String - 是否必填:否 -(过滤条件)按照密钥对名称过滤。
  • 参数不支持同时指定 `KeyIds` 和 `Filters`。 + Filters []*Filter `json:"Filters,omitempty" name:"Filters" list` + + // 偏移量,默认为0。关于 `Offset` 的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。返回数量,默认为20,最大值为100。关于 `Limit` 的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Offset *int64 `json:"Offset,omitempty" name:"Offset"` + + // 返回数量,默认为20,最大值为100。关于 `Limit` 的更进一步介绍请参考 API [简介](https://cloud.tencent.com/document/api/213/15688)中的相关小节。 + Limit *int64 `json:"Limit,omitempty" name:"Limit"` +} + +func (r *DescribeKeyPairsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeKeyPairsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeKeyPairsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 符合条件的密钥对数量。 + TotalCount *int64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 密钥对详细信息列表。 + KeyPairSet []*KeyPair `json:"KeyPairSet,omitempty" name:"KeyPairSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeKeyPairsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeKeyPairsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeRegionsRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeRegionsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeRegionsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeRegionsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 地域数量 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 地域列表信息 + RegionSet []*RegionInfo `json:"RegionSet,omitempty" name:"RegionSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeRegionsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeRegionsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeZoneInstanceConfigInfosRequest struct { + *tchttp.BaseRequest + + // 过滤条件。 + // + //
  • zone - String - 是否必填:否 -(过滤条件)按照可用区过滤。
  • + // + //
  • instance-family String - 是否必填:否 -(过滤条件)按照机型系列过滤。按照实例机型系列过滤。实例机型系列形如:S1、I1、M1等。
  • + // + //
  • instance-type - String - 是否必填:否 - (过滤条件)按照机型过滤。按照实例机型过滤。不同实例机型指定了不同的资源规格,具体取值可通过调用接口 DescribeInstanceTypeConfigs 来获得最新的规格表或参见实例类型描述。若不指定该参数,则默认机型为S1.SMALL1。
  • + // + //
  • instance-charge-type - String - 是否必填:否 -(过滤条件)按照实例计费模式过滤。 (PREPAID:表示预付费,即包年包月 | POSTPAID_BY_HOUR:表示后付费,即按量计费 | CDHPAID:表示CDH付费,即只对CDH计费,不对CDH上的实例计费。 )
  • + Filters []*Filter `json:"Filters,omitempty" name:"Filters" list` +} + +func (r *DescribeZoneInstanceConfigInfosRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeZoneInstanceConfigInfosRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeZoneInstanceConfigInfosResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 可用区机型配置列表。 + InstanceTypeQuotaSet []*InstanceTypeQuotaItem `json:"InstanceTypeQuotaSet,omitempty" name:"InstanceTypeQuotaSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeZoneInstanceConfigInfosResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeZoneInstanceConfigInfosResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeZonesRequest struct { + *tchttp.BaseRequest +} + +func (r *DescribeZonesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeZonesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DescribeZonesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 可用区数量。 + TotalCount *uint64 `json:"TotalCount,omitempty" name:"TotalCount"` + + // 可用区列表信息。 + ZoneSet []*ZoneInfo `json:"ZoneSet,omitempty" name:"ZoneSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DescribeZonesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DescribeZonesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DisassociateInstancesKeyPairsRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID,每次请求批量实例的上限为100。

    可以通过以下方式获取可用的实例ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/index)查询实例ID。
  • 通过调用接口 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) ,取返回信息中的 `InstanceId` 获取实例ID。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 密钥对ID列表,每次请求批量密钥对的上限为100。密钥对ID形如:`skey-11112222`。

    可以通过以下方式获取可用的密钥ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/sshkey)查询密钥ID。
  • 通过调用接口 [DescribeKeyPairs](https://cloud.tencent.com/document/api/213/15699) ,取返回信息中的 `KeyId` 获取密钥对ID。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds" list` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再解绑密钥。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机。
  • FALSE:表示在正常关机失败后不进行强制关机。

    默认取值:FALSE。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + +func (r *DisassociateInstancesKeyPairsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DisassociateInstancesKeyPairsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DisassociateInstancesKeyPairsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DisassociateInstancesKeyPairsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DisassociateInstancesKeyPairsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DisassociateSecurityGroupsRequest struct { + *tchttp.BaseRequest + + // 要解绑的`安全组ID`,类似sg-efil73jd,只支持解绑单个安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds" list` + + // 被解绑的`实例ID`,类似ins-lesecurk,支持指定多个实例 。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` +} + +func (r *DisassociateSecurityGroupsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DisassociateSecurityGroupsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DisassociateSecurityGroupsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *DisassociateSecurityGroupsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *DisassociateSecurityGroupsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type DisasterRecoverGroup struct { + + // 分散置放群组id。 + DisasterRecoverGroupId *string `json:"DisasterRecoverGroupId,omitempty" name:"DisasterRecoverGroupId"` + + // 分散置放群组名称,长度1-60个字符。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 分散置放群组类型,取值范围:
  • HOST:物理机
  • SW:交换机
  • RACK:机架 + Type *string `json:"Type,omitempty" name:"Type"` + + // 分散置放群组内最大容纳云主机数量。 + CvmQuotaTotal *int64 `json:"CvmQuotaTotal,omitempty" name:"CvmQuotaTotal"` + + // 分散置放群组内云主机当前数量。 + CurrentNum *int64 `json:"CurrentNum,omitempty" name:"CurrentNum"` + + // 分散置放群组内,云主机id列表。 + // 注意:此字段可能返回 null,表示取不到有效值。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 分散置放群组创建时间。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CreateTime *string `json:"CreateTime,omitempty" name:"CreateTime"` +} + +type EnhancedService struct { + + // 开启云安全服务。若不指定该参数,则默认开启云安全服务。 + SecurityService *RunSecurityServiceEnabled `json:"SecurityService,omitempty" name:"SecurityService"` + + // 开启云监控服务。若不指定该参数,则默认开启云监控服务。 + MonitorService *RunMonitorServiceEnabled `json:"MonitorService,omitempty" name:"MonitorService"` +} + +type Externals struct { + + // 释放地址 + // 注意:此字段可能返回 null,表示取不到有效值。 + ReleaseAddress *bool `json:"ReleaseAddress,omitempty" name:"ReleaseAddress"` + + // 不支持的网络类型 + // 注意:此字段可能返回 null,表示取不到有效值。 + UnsupportNetworks []*string `json:"UnsupportNetworks,omitempty" name:"UnsupportNetworks" list` + + // HDD本地存储属性 + // 注意:此字段可能返回 null,表示取不到有效值。 + StorageBlockAttr *StorageBlock `json:"StorageBlockAttr,omitempty" name:"StorageBlockAttr"` +} + +type Filter struct { + + // 需要过滤的字段。 + Name *string `json:"Name,omitempty" name:"Name"` + + // 字段的过滤值。 + Values []*string `json:"Values,omitempty" name:"Values" list` +} + +type HostItem struct { + + // cdh实例所在的位置。通过该参数可以指定实例所属可用区,所属项目等属性。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // cdh实例id + HostId *string `json:"HostId,omitempty" name:"HostId"` + + // cdh实例类型 + HostType *string `json:"HostType,omitempty" name:"HostType"` + + // cdh实例名称 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // cdh实例付费模式 + HostChargeType *string `json:"HostChargeType,omitempty" name:"HostChargeType"` + + // cdh实例自动续费标记 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` + + // cdh实例创建时间 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // cdh实例过期时间 + ExpiredTime *string `json:"ExpiredTime,omitempty" name:"ExpiredTime"` + + // cdh实例上已创建云子机的实例id列表 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // cdh实例状态 + HostState *string `json:"HostState,omitempty" name:"HostState"` + + // cdh实例ip + HostIp *string `json:"HostIp,omitempty" name:"HostIp"` + + // cdh实例资源信息 + HostResource *HostResource `json:"HostResource,omitempty" name:"HostResource"` + + // 专用宿主机所属的围笼ID。该字段仅对金融专区围笼内的专用宿主机有效。 + // 注意:此字段可能返回 null,表示取不到有效值。 + CageId *string `json:"CageId,omitempty" name:"CageId"` +} + +type HostResource struct { + + // cdh实例总cpu核数 + CpuTotal *uint64 `json:"CpuTotal,omitempty" name:"CpuTotal"` + + // cdh实例可用cpu核数 + CpuAvailable *uint64 `json:"CpuAvailable,omitempty" name:"CpuAvailable"` + + // cdh实例总内存大小(单位为:GiB) + MemTotal *float64 `json:"MemTotal,omitempty" name:"MemTotal"` + + // cdh实例可用内存大小(单位为:GiB) + MemAvailable *float64 `json:"MemAvailable,omitempty" name:"MemAvailable"` + + // cdh实例总磁盘大小(单位为:GiB) + DiskTotal *uint64 `json:"DiskTotal,omitempty" name:"DiskTotal"` + + // cdh实例可用磁盘大小(单位为:GiB) + DiskAvailable *uint64 `json:"DiskAvailable,omitempty" name:"DiskAvailable"` +} + +type Image struct { + + // 镜像ID + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 镜像操作系统 + OsName *string `json:"OsName,omitempty" name:"OsName"` + + // 镜像类型 + ImageType *string `json:"ImageType,omitempty" name:"ImageType"` + + // 镜像创建时间 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // 镜像名称 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 镜像描述 + ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` + + // 镜像大小 + ImageSize *int64 `json:"ImageSize,omitempty" name:"ImageSize"` + + // 镜像架构 + Architecture *string `json:"Architecture,omitempty" name:"Architecture"` + + // 镜像状态 + ImageState *string `json:"ImageState,omitempty" name:"ImageState"` + + // 镜像来源平台 + Platform *string `json:"Platform,omitempty" name:"Platform"` + + // 镜像创建者 + ImageCreator *string `json:"ImageCreator,omitempty" name:"ImageCreator"` + + // 镜像来源 + ImageSource *string `json:"ImageSource,omitempty" name:"ImageSource"` + + // 同步百分比 + // 注意:此字段可能返回 null,表示取不到有效值。 + SyncPercent *int64 `json:"SyncPercent,omitempty" name:"SyncPercent"` + + // 镜像是否支持cloud-init + // 注意:此字段可能返回 null,表示取不到有效值。 + IsSupportCloudinit *bool `json:"IsSupportCloudinit,omitempty" name:"IsSupportCloudinit"` + + // 镜像关联的快照信息 + // 注意:此字段可能返回 null,表示取不到有效值。 + SnapshotSet []*Snapshot `json:"SnapshotSet,omitempty" name:"SnapshotSet" list` +} + +type ImageOsList struct { + + // 支持的windows操作系统。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Windows []*string `json:"Windows,omitempty" name:"Windows" list` + + // 支持的linux操作系统 + // 注意:此字段可能返回 null,表示取不到有效值。 + Linux []*string `json:"Linux,omitempty" name:"Linux" list` +} + +type ImportImageRequest struct { + *tchttp.BaseRequest + + // 导入镜像的操作系统架构,`x86_64` 或 `i386` + Architecture *string `json:"Architecture,omitempty" name:"Architecture"` + + // 导入镜像的操作系统类型,通过`DescribeImportImageOs`获取 + OsType *string `json:"OsType,omitempty" name:"OsType"` + + // 导入镜像的操作系统版本,通过`DescribeImportImageOs`获取 + OsVersion *string `json:"OsVersion,omitempty" name:"OsVersion"` + + // 导入镜像存放的cos地址 + ImageUrl *string `json:"ImageUrl,omitempty" name:"ImageUrl"` + + // 镜像名称 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 镜像描述 + ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` + + // 只检查参数,不执行任务 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 是否强制导入,参考[强制导入镜像](https://cloud.tencent.com/document/product/213/12849) + Force *bool `json:"Force,omitempty" name:"Force"` +} + +func (r *ImportImageRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ImportImageRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ImportImageResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ImportImageResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ImportImageResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ImportKeyPairRequest struct { + *tchttp.BaseRequest + + // 密钥对名称,可由数字,字母和下划线组成,长度不超过25个字符。 + KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + + // 密钥对创建后所属的[项目](/document/product/378/10863)ID。

    可以通过以下方式获取项目ID:
  • 通过[项目列表](https://console.cloud.tencent.com/project)查询项目ID。
  • 通过调用接口 [DescribeProject](https://cloud.tencent.com/document/api/378/4400),取返回信息中的 `projectId ` 获取项目ID。 + // + // 如果是默认项目,直接填0就可以。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 密钥对的公钥内容,`OpenSSH RSA` 格式。 + PublicKey *string `json:"PublicKey,omitempty" name:"PublicKey"` +} + +func (r *ImportKeyPairRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ImportKeyPairRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ImportKeyPairResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 密钥对ID。 + KeyId *string `json:"KeyId,omitempty" name:"KeyId"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ImportKeyPairResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ImportKeyPairResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceModifyInstancesChargeTypeRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的续费时长、是否设置自动续费等属性。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` +} + +func (r *InquiryPriceModifyInstancesChargeTypeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceModifyInstancesChargeTypeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceModifyInstancesChargeTypeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 该参数表示对应配置实例转换计费模式的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceModifyInstancesChargeTypeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceModifyInstancesChargeTypeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceRenewInstancesRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的续费时长、是否设置自动续费等属性。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 试运行。 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` + + // 是否续费弹性数据盘。取值范围:
  • TRUE:表示续费包年包月实例同时续费其挂载的弹性数据盘
  • FALSE:表示续费包年包月实例同时不再续费其挂载的弹性数据盘

    默认取值:TRUE。 + RenewPortableDataDisk *bool `json:"RenewPortableDataDisk,omitempty" name:"RenewPortableDataDisk"` +} + +func (r *InquiryPriceRenewInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceRenewInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceRenewInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 该参数表示对应配置实例的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceRenewInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceRenewInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceResetInstanceRequest struct { + *tchttp.BaseRequest + + // 实例ID。可通过 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 指定有效的[镜像](/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例系统盘配置信息。系统盘为云盘的实例可以通过该参数指定重装后的系统盘大小来实现对系统盘的扩容操作,若不指定则默认系统盘大小保持不变。系统盘大小只支持扩容不支持缩容;重装只支持修改系统盘的大小,不能修改系统盘的类型。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` +} + +func (r *InquiryPriceResetInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceResetInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceResetInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 该参数表示重装成对应配置实例的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceResetInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceResetInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceResetInstancesInternetMaxBandwidthRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。当调整 `BANDWIDTH_PREPAID` 和 `BANDWIDTH_POSTPAID_BY_HOUR` 计费方式的带宽时,只支持一个实例。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 公网出带宽配置。不同机型带宽上限范围不一致,具体限制详见带宽限制对账表。暂时只支持`InternetMaxBandwidthOut`参数。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 带宽生效的起始时间。格式:`YYYY-MM-DD`,例如:`2016-10-30`。起始时间不能早于当前时间。如果起始时间是今天则新设置的带宽立即生效。该参数只对包年包月带宽有效,其他模式带宽不支持该参数,否则接口会以相应错误码返回。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 带宽生效的终止时间。格式:`YYYY-MM-DD`,例如:`2016-10-30`。新设置的带宽的有效期包含终止时间此日期。终止时间不能晚于包年包月实例的到期时间。实例的到期时间可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`ExpiredTime`获取。该参数只对包年包月带宽有效,其他模式带宽不支持该参数,否则接口会以相应错误码返回。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` +} + +func (r *InquiryPriceResetInstancesInternetMaxBandwidthRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceResetInstancesInternetMaxBandwidthRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceResetInstancesInternetMaxBandwidthResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 该参数表示带宽调整为对应大小之后的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceResetInstancesInternetMaxBandwidthResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceResetInstancesInternetMaxBandwidthResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceResetInstancesTypeRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为1。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 实例机型。不同实例机型指定了不同的资源规格,具体取值可参见附表实例资源规格对照表,也可以调用查询实例资源规格列表接口获得最新的规格表。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` +} + +func (r *InquiryPriceResetInstancesTypeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceResetInstancesTypeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceResetInstancesTypeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 该参数表示调整成对应机型实例的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceResetInstancesTypeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceResetInstancesTypeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceResizeInstanceDisksRequest struct { + *tchttp.BaseRequest + + // 待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 待扩容的数据盘配置信息。只支持扩容非弹性数据盘([`DescribeDisks`](https://cloud.tencent.com/document/api/362/16315)接口返回值中的`Portable`为`false`表示非弹性),且[数据盘类型](/document/api/213/9452#block_device)为:`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`。数据盘容量单位:GB。最小扩容步长:10G。关于数据盘类型的选择请参考硬盘产品简介。可选数据盘类型受到实例类型`InstanceType`限制。另外允许扩容的最大容量也因数据盘类型的不同而有所差异。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks" list` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再重置用户密码。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机
  • FALSE:表示在正常关机失败后不进行强制关机

    默认取值:FALSE。

    强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + +func (r *InquiryPriceResizeInstanceDisksRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceResizeInstanceDisksRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceResizeInstanceDisksResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 该参数表示磁盘扩容成对应配置的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceResizeInstanceDisksResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceResizeInstanceDisksResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceRunInstancesRequest struct { + *tchttp.BaseRequest + + // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目等属性。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月
  • POSTPAID_BY_HOUR:按小时后付费
    默认值:POSTPAID_BY_HOUR。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例机型。不同实例机型指定了不同的资源规格,具体取值可通过调用接口[DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/api/213/15749)来获得最新的规格表或参见[CVM实例配置](https://cloud.tencent.com/document/product/213/2177)描述。若不指定该参数,则默认机型为S1.SMALL1。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘。支持购买的时候指定11块数据盘,其中最多包含1块LOCAL_BASIC数据盘或者LOCAL_SSD数据盘,最多包含10块CLOUD_BASIC数据盘、CLOUD_PREMIUM数据盘或者CLOUD_SSD数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks" list` + + // 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。若不指定该参数,则默认使用基础网络。若在此参数中指定了私有网络ip,那么InstanceCount参数只能为1。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 购买实例数量。取值范围:[1,100]。默认取值:1。指定购买实例的数量不能超过用户所能购买的剩余配额数量,具体配额相关限制详见[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664)。 + InstanceCount *int64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server_{R:3}`,购买1台时,实例显示名称为`server_3`;购买2台时,实例显示名称分别为`server_3`,`server_4`。支持指定多个模式串`{R:x}`。
  • 购买多台实例,如果不指定模式串,则在实例显示名称添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server_`,购买2台时,实例显示名称分别为`server_1`,`server_2`。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的sgId字段来获取。若不指定该参数,则默认不绑定安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds" list` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 云服务器的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:字符长度为[2, 30],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例,当前仅支持绑定标签到云主机实例。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification" list` + + // 实例的市场相关选项,如竞价实例相关参数 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` +} + +func (r *InquiryPriceRunInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceRunInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InquiryPriceRunInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 该参数表示对应配置实例的价格。 + Price *Price `json:"Price,omitempty" name:"Price"` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *InquiryPriceRunInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InquiryPriceRunInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type Instance struct { + + // 实例所在的位置。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 实例`ID`。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 实例机型。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例的CPU核数,单位:核。 + CPU *int64 `json:"CPU,omitempty" name:"CPU"` + + // 实例内存容量,单位:`GB`。 + Memory *int64 `json:"Memory,omitempty" name:"Memory"` + + // 实例业务状态。取值范围:
  • NORMAL:表示正常状态的实例
  • EXPIRED:表示过期的实例
  • PROTECTIVELY_ISOLATED:表示被安全隔离的实例。 + RestrictState *string `json:"RestrictState,omitempty" name:"RestrictState"` + + // 实例名称。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 实例计费模式。取值范围:
  • `PREPAID`:表示预付费,即包年包月
  • `POSTPAID_BY_HOUR`:表示后付费,即按量计费
  • `CDHPAID`:`CDH`付费,即只对`CDH`计费,不对`CDH`上的实例计费。
  • `SPOTPAID`:表示竞价实例付费。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 实例系统盘信息。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例数据盘信息。只包含随实例购买的数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks" list` + + // 实例主网卡的内网`IP`列表。 + PrivateIpAddresses []*string `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses" list` + + // 实例主网卡的公网`IP`列表。 + // 注意:此字段可能返回 null,表示取不到有效值。 + PublicIpAddresses []*string `json:"PublicIpAddresses,omitempty" name:"PublicIpAddresses" list` + + // 实例带宽信息。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 实例所属虚拟私有网络信息。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 生产实例所使用的镜像`ID`。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 自动续费标识。取值范围:
  • `NOTIFY_AND_MANUAL_RENEW`:表示通知即将过期,但不自动续费
  • `NOTIFY_AND_AUTO_RENEW`:表示通知即将过期,而且自动续费
  • `DISABLE_NOTIFY_AND_MANUAL_RENEW`:表示不通知即将过期,也不自动续费。 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` + + // 创建时间。按照`ISO8601`标准表示,并且使用`UTC`时间。格式为:`YYYY-MM-DDThh:mm:ssZ`。 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // 到期时间。按照`ISO8601`标准表示,并且使用`UTC`时间。格式为:`YYYY-MM-DDThh:mm:ssZ`。 + ExpiredTime *string `json:"ExpiredTime,omitempty" name:"ExpiredTime"` + + // 操作系统名称。 + OsName *string `json:"OsName,omitempty" name:"OsName"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的sgId字段来获取。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds" list` + + // 实例登录设置。目前只返回实例所关联的密钥。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 实例状态。取值范围:
  • PENDING:表示创建中
  • LAUNCH_FAILED:表示创建失败
  • RUNNING:表示运行中
  • STOPPED:表示关机
  • STARTING:表示开机中
  • STOPPING:表示关机中
  • REBOOTING:表示重启中
  • SHUTDOWN:表示停止待销毁
  • TERMINATING:表示销毁中。
  • + InstanceState *string `json:"InstanceState,omitempty" name:"InstanceState"` + + // 实例关联的标签列表。 + Tags []*Tag `json:"Tags,omitempty" name:"Tags" list` + + // 实例的关机计费模式。 + // 取值范围:
  • KEEP_CHARGING:关机继续收费
  • STOP_CHARGING:关机停止收费
  • NOT_APPLICABLE:实例处于非关机状态或者不适用关机停止计费的条件
    + StopChargingMode *string `json:"StopChargingMode,omitempty" name:"StopChargingMode"` +} + +type InstanceChargePrepaid struct { + + // 购买实例的时长,单位:月。取值范围:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36。 + Period *int64 `json:"Period,omitempty" name:"Period"` + + // 自动续费标识。取值范围:
  • NOTIFY_AND_AUTO_RENEW:通知过期且自动续费
  • NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费
  • DISABLE_NOTIFY_AND_MANUAL_RENEW:不通知过期不自动续费

    默认取值:NOTIFY_AND_MANUAL_RENEW。若该参数指定为NOTIFY_AND_AUTO_RENEW,在账户余额充足的情况下,实例到期后将按月自动续费。 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` +} + +type InstanceFamilyConfig struct { + + // 机型族名称的中文全称。 + InstanceFamilyName *string `json:"InstanceFamilyName,omitempty" name:"InstanceFamilyName"` + + // 机型族名称的英文简称。 + InstanceFamily *string `json:"InstanceFamily,omitempty" name:"InstanceFamily"` +} + +type InstanceMarketOptionsRequest struct { + *tchttp.BaseRequest + + // 竞价相关选项 + SpotOptions *SpotMarketOptions `json:"SpotOptions,omitempty" name:"SpotOptions"` + + // 市场选项类型,当前只支持取值:spot + MarketType *string `json:"MarketType,omitempty" name:"MarketType"` +} + +func (r *InstanceMarketOptionsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *InstanceMarketOptionsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type InstanceStatus struct { + + // 实例`ID`。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // [实例状态](/document/api/213/9452#INSTANCE_STATE)。 + InstanceState *string `json:"InstanceState,omitempty" name:"InstanceState"` +} + +type InstanceTypeConfig struct { + + // 可用区。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 实例机型。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例机型系列。 + InstanceFamily *string `json:"InstanceFamily,omitempty" name:"InstanceFamily"` + + // GPU核数,单位:核。 + GPU *int64 `json:"GPU,omitempty" name:"GPU"` + + // CPU核数,单位:核。 + CPU *int64 `json:"CPU,omitempty" name:"CPU"` + + // 内存容量,单位:`GB`。 + Memory *int64 `json:"Memory,omitempty" name:"Memory"` +} + +type InstanceTypeQuotaItem struct { + + // 可用区。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 实例机型。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例计费模式。取值范围:
  • PREPAID:表示预付费,即包年包月
  • POSTPAID_BY_HOUR:表示后付费,即按量计费
  • CDHPAID:表示[CDH](https://cloud.tencent.com/document/product/416)付费,即只对CDH计费,不对CDH上的实例计费。
  • `SPOTPAID`:表示竞价实例付费。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 网卡类型,例如:25代表25G网卡 + NetworkCard *int64 `json:"NetworkCard,omitempty" name:"NetworkCard"` + + // 扩展属性。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Externals *Externals `json:"Externals,omitempty" name:"Externals"` + + // 实例的CPU核数,单位:核。 + Cpu *int64 `json:"Cpu,omitempty" name:"Cpu"` + + // 实例内存容量,单位:`GB`。 + Memory *int64 `json:"Memory,omitempty" name:"Memory"` + + // 实例机型系列。 + InstanceFamily *string `json:"InstanceFamily,omitempty" name:"InstanceFamily"` + + // 机型名称。 + TypeName *string `json:"TypeName,omitempty" name:"TypeName"` + + // 本地磁盘规格列表。当该参数返回为空值时,表示当前情况下无法创建本地盘。 + LocalDiskTypeList []*LocalDiskType `json:"LocalDiskTypeList,omitempty" name:"LocalDiskTypeList" list` + + // 实例是否售卖。取值范围:
  • SELL:表示实例可购买
  • SOLD_OUT:表示实例已售罄。 + Status *string `json:"Status,omitempty" name:"Status"` + + // 实例的售卖价格。 + Price *ItemPrice `json:"Price,omitempty" name:"Price"` +} + +type InternetAccessible struct { + + // 网络计费类型。取值范围:
  • BANDWIDTH_PREPAID:预付费按带宽结算
  • TRAFFIC_POSTPAID_BY_HOUR:流量按小时后付费
  • BANDWIDTH_POSTPAID_BY_HOUR:带宽按小时后付费
  • BANDWIDTH_PACKAGE:带宽包用户
    默认取值:非带宽包用户默认与子机付费类型保持一致。 + InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` + + // 公网出带宽上限,单位:Mbps。默认值:0Mbps。不同机型带宽上限范围不一致,具体限制详见[购买网络带宽](/document/product/213/509)。 + InternetMaxBandwidthOut *int64 `json:"InternetMaxBandwidthOut,omitempty" name:"InternetMaxBandwidthOut"` + + // 是否分配公网IP。取值范围:
  • TRUE:表示分配公网IP
  • FALSE:表示不分配公网IP

    当公网带宽大于0Mbps时,可自由选择开通与否,默认开通公网IP;当公网带宽为0,则不允许分配公网IP。 + PublicIpAssigned *bool `json:"PublicIpAssigned,omitempty" name:"PublicIpAssigned"` + + // 带宽包ID。可通过[`DescribeBandwidthPackages`](https://cloud.tencent.com/document/api/215/19209)接口返回值中的`BandwidthPackageId`获取。 + BandwidthPackageId *string `json:"BandwidthPackageId,omitempty" name:"BandwidthPackageId"` +} + +type InternetBandwidthConfig struct { + + // 开始时间。按照`ISO8601`标准表示,并且使用`UTC`时间。格式为:`YYYY-MM-DDThh:mm:ssZ`。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 结束时间。按照`ISO8601`标准表示,并且使用`UTC`时间。格式为:`YYYY-MM-DDThh:mm:ssZ`。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` + + // 实例带宽信息。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` +} + +type InternetChargeTypeConfig struct { + + // 网络计费模式。 + InternetChargeType *string `json:"InternetChargeType,omitempty" name:"InternetChargeType"` + + // 网络计费模式描述信息。 + Description *string `json:"Description,omitempty" name:"Description"` +} + +type ItemPrice struct { + + // 后续单价,单位:元。 + // 注意:此字段可能返回 null,表示取不到有效值。 + UnitPrice *float64 `json:"UnitPrice,omitempty" name:"UnitPrice"` + + // 后续计价单元,可取值范围:
  • HOUR:表示计价单元是按每小时来计算。当前涉及该计价单元的场景有:实例按小时后付费(POSTPAID_BY_HOUR)、带宽按小时后付费(BANDWIDTH_POSTPAID_BY_HOUR):
  • GB:表示计价单元是按每GB来计算。当前涉及该计价单元的场景有:流量按小时后付费(TRAFFIC_POSTPAID_BY_HOUR)。 + // 注意:此字段可能返回 null,表示取不到有效值。 + ChargeUnit *string `json:"ChargeUnit,omitempty" name:"ChargeUnit"` + + // 预支费用的原价,单位:元。 + // 注意:此字段可能返回 null,表示取不到有效值。 + OriginalPrice *float64 `json:"OriginalPrice,omitempty" name:"OriginalPrice"` + + // 预支费用的折扣价,单位:元。 + // 注意:此字段可能返回 null,表示取不到有效值。 + DiscountPrice *float64 `json:"DiscountPrice,omitempty" name:"DiscountPrice"` +} + +type KeyPair struct { + + // 密钥对的`ID`,是密钥对的唯一标识。 + KeyId *string `json:"KeyId,omitempty" name:"KeyId"` + + // 密钥对名称。 + KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + + // 密钥对所属的项目`ID`。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 密钥对描述信息。 + Description *string `json:"Description,omitempty" name:"Description"` + + // 密钥对的纯文本公钥。 + PublicKey *string `json:"PublicKey,omitempty" name:"PublicKey"` + + // 密钥对的纯文本私钥。腾讯云不会保管私钥,请用户自行妥善保存。 + PrivateKey *string `json:"PrivateKey,omitempty" name:"PrivateKey"` + + // 密钥关联的实例`ID`列表。 + AssociatedInstanceIds []*string `json:"AssociatedInstanceIds,omitempty" name:"AssociatedInstanceIds" list` + + // 创建时间。按照`ISO8601`标准表示,并且使用`UTC`时间。格式为:`YYYY-MM-DDThh:mm:ssZ`。 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` +} + +type LocalDiskType struct { + + // 本地磁盘类型。 + Type *string `json:"Type,omitempty" name:"Type"` + + // 本地磁盘属性。 + PartitionType *string `json:"PartitionType,omitempty" name:"PartitionType"` + + // 本地磁盘最小值。 + MinSize *int64 `json:"MinSize,omitempty" name:"MinSize"` + + // 本地磁盘最大值。 + MaxSize *int64 `json:"MaxSize,omitempty" name:"MaxSize"` +} + +type LoginSettings struct { + + // 实例登录密码。不同操作系统类型密码复杂度限制不一样,具体如下:
  • Linux实例密码必须8到16位,至少包括两项[a-z,A-Z]、[0-9] 和 [( ) ` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? / ]中的特殊符号。
  • Windows实例密码必须12到16位,至少包括三项[a-z],[A-Z],[0-9] 和 [( ) ` ~ ! @ # $ % ^ & * - + = { } [ ] : ; ' , . ? /]中的特殊符号。

    若不指定该参数,则由系统随机生成密码,并通过站内信方式通知到用户。 + // 注意:此字段可能返回 null,表示取不到有效值。 + Password *string `json:"Password,omitempty" name:"Password"` + + // 密钥ID列表。关联密钥后,就可以通过对应的私钥来访问实例;KeyId可通过接口DescribeKeyPairs获取,密钥与密码不能同时指定,同时Windows操作系统不支持指定密钥。当前仅支持购买的时候指定一个密钥。 + // 注意:此字段可能返回 null,表示取不到有效值。 + KeyIds []*string `json:"KeyIds,omitempty" name:"KeyIds" list` + + // 保持镜像的原始设置。该参数与Password或KeyIds.N不能同时指定。只有使用自定义镜像、共享镜像或外部导入镜像创建实例时才能指定该参数为TRUE。取值范围:
  • TRUE:表示保持镜像的登录设置
  • FALSE:表示不保持镜像的登录设置

    默认取值:FALSE。 + // 注意:此字段可能返回 null,表示取不到有效值。 + KeepImageLogin *string `json:"KeepImageLogin,omitempty" name:"KeepImageLogin"` +} + +type ModifyDisasterRecoverGroupAttributeRequest struct { + *tchttp.BaseRequest + + // 分散置放群组ID,可使用[DescribeDisasterRecoverGroups](https://cloud.tencent.com/document/api/213/17810)接口获取。 + DisasterRecoverGroupId *string `json:"DisasterRecoverGroupId,omitempty" name:"DisasterRecoverGroupId"` + + // 分散置放群组名称,长度1-60个字符,支持中、英文。 + Name *string `json:"Name,omitempty" name:"Name"` +} + +func (r *ModifyDisasterRecoverGroupAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyDisasterRecoverGroupAttributeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyDisasterRecoverGroupAttributeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyDisasterRecoverGroupAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyDisasterRecoverGroupAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyHostsAttributeRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的CDH实例ID。 + HostIds []*string `json:"HostIds,omitempty" name:"HostIds" list` + + // CDH实例显示名称。可任意命名,但不得超过60个字符。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 自动续费标识。取值范围:
  • NOTIFY_AND_AUTO_RENEW:通知过期且自动续费
  • NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费
  • DISABLE_NOTIFY_AND_MANUAL_RENEW:不通知过期不自动续费

    若该参数指定为NOTIFY_AND_AUTO_RENEW,在账户余额充足的情况下,实例到期后将按月自动续费。 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` +} + +func (r *ModifyHostsAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyHostsAttributeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyHostsAttributeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyHostsAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyHostsAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyImageAttributeRequest struct { + *tchttp.BaseRequest + + // 镜像ID,形如`img-gvbnzy6f`。镜像ID可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 设置新的镜像名称;必须满足下列限制:
  • 不得超过20个字符。
  • 镜像名称不能与已有镜像重复。 + ImageName *string `json:"ImageName,omitempty" name:"ImageName"` + + // 设置新的镜像描述;必须满足下列限制:
  • 不得超过60个字符。 + ImageDescription *string `json:"ImageDescription,omitempty" name:"ImageDescription"` +} + +func (r *ModifyImageAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyImageAttributeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyImageAttributeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyImageAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyImageAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyImageSharePermissionRequest struct { + *tchttp.BaseRequest + + // 镜像ID,形如`img-gvbnzy6f`。镜像Id可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。
    镜像ID必须指定为状态为`NORMAL`的镜像。镜像状态请参考[镜像数据表](/document/api/213/9452#image_state)。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 接收分享镜像的账号Id列表,array型参数的格式可以参考[API简介](/document/api/213/568)。帐号ID不同于QQ号,查询用户帐号ID请查看[帐号信息](https://console.cloud.tencent.com/developer)中的帐号ID栏。 + AccountIds []*string `json:"AccountIds,omitempty" name:"AccountIds" list` + + // 操作,包括 `SHARE`,`CANCEL`。其中`SHARE`代表分享操作,`CANCEL`代表取消分享操作。 + Permission *string `json:"Permission,omitempty" name:"Permission"` +} + +func (r *ModifyImageSharePermissionRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyImageSharePermissionRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyImageSharePermissionResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyImageSharePermissionResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyImageSharePermissionResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesAttributeRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 实例名称。可任意命名,但不得超过60个字符。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 指定实例的安全组Id列表,子机将重新关联指定列表的安全组,原本关联的安全组会被解绑。 + SecurityGroups []*string `json:"SecurityGroups,omitempty" name:"SecurityGroups" list` +} + +func (r *ModifyInstancesAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesAttributeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesAttributeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyInstancesAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesChargeTypeRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` +} + +func (r *ModifyInstancesChargeTypeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesChargeTypeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesChargeTypeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyInstancesChargeTypeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesChargeTypeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesProjectRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 项目ID。项目可以使用[AddProject](https://cloud.tencent.com/doc/api/403/4398)接口创建。后续使用[DescribeInstances](https://cloud.tencent.com/document/api/213/9388)接口查询实例时,项目ID可用于过滤结果。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` +} + +func (r *ModifyInstancesProjectRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesProjectRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesProjectResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyInstancesProjectResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesProjectResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesRenewFlagRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 自动续费标识。取值范围:
  • NOTIFY_AND_AUTO_RENEW:通知过期且自动续费
  • NOTIFY_AND_MANUAL_RENEW:通知过期不自动续费
  • DISABLE_NOTIFY_AND_MANUAL_RENEW:不通知过期不自动续费

    若该参数指定为NOTIFY_AND_AUTO_RENEW,在账户余额充足的情况下,实例到期后将按月自动续费。 + RenewFlag *string `json:"RenewFlag,omitempty" name:"RenewFlag"` +} + +func (r *ModifyInstancesRenewFlagRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesRenewFlagRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesRenewFlagResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyInstancesRenewFlagResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesRenewFlagResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesVpcAttributeRequest struct { + *tchttp.BaseRequest + + // 待操作的实例ID数组。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 私有网络相关信息配置。通过该参数指定私有网络的ID,子网ID,私有网络ip等信息。当指定私有网络ID和子网ID(子网必须在实例所在的可用区)与指定实例所在私有网络不一致时,会将实例迁移至指定的私有网络的子网下。可通过`PrivateIpAddresses`指定私有网络子网IP,若需指定则所有已指定的实例均需要指定子网IP,此时`InstanceIds`与`PrivateIpAddresses`一一对应。不指定`PrivateIpAddresses`时随机分配私有网络子网IP。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 是否对运行中的实例选择强制关机。默认为TRUE。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` + + // 是否保留主机名。默认为FALSE。 + ReserveHostName *bool `json:"ReserveHostName,omitempty" name:"ReserveHostName"` +} + +func (r *ModifyInstancesVpcAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesVpcAttributeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyInstancesVpcAttributeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyInstancesVpcAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyInstancesVpcAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyKeyPairAttributeRequest struct { + *tchttp.BaseRequest + + // 密钥对ID,密钥对ID形如:`skey-xxxxxxxx`。

    可以通过以下方式获取可用的密钥 ID:
  • 通过登录[控制台](https://console.cloud.tencent.com/cvm/sshkey)查询密钥 ID。
  • 通过调用接口 [DescribeKeyPairs](https://cloud.tencent.com/document/api/213/9403) ,取返回信息中的 `KeyId` 获取密钥对 ID。 + KeyId *string `json:"KeyId,omitempty" name:"KeyId"` + + // 修改后的密钥对名称,可由数字,字母和下划线组成,长度不超过25个字符。 + KeyName *string `json:"KeyName,omitempty" name:"KeyName"` + + // 修改后的密钥对描述信息。可任意命名,但不得超过60个字符。 + Description *string `json:"Description,omitempty" name:"Description"` +} + +func (r *ModifyKeyPairAttributeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyKeyPairAttributeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ModifyKeyPairAttributeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ModifyKeyPairAttributeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ModifyKeyPairAttributeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type OperationCountLimit struct { + + // 实例操作。 + Operation *string `json:"Operation,omitempty" name:"Operation"` + + // 实例ID。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 当前已使用次数,如果返回值为-1表示该操作无次数限制。 + CurrentCount *int64 `json:"CurrentCount,omitempty" name:"CurrentCount"` + + // 操作次数最高额度,如果返回值为-1表示该操作无次数限制,如果返回值为0表示不支持调整配置。 + LimitCount *int64 `json:"LimitCount,omitempty" name:"LimitCount"` +} + +type OsVersion struct { + + // 操作系统类型 + OsName *string `json:"OsName,omitempty" name:"OsName"` + + // 支持的操作系统版本 + OsVersions []*string `json:"OsVersions,omitempty" name:"OsVersions" list` + + // 支持的操作系统架构 + Architecture []*string `json:"Architecture,omitempty" name:"Architecture" list` +} + +type Placement struct { + + // 实例所属的[可用区](/document/product/213/9452#zone)ID。该参数也可以通过调用 [DescribeZones](/document/api/213/9455) 的返回值中的Zone字段来获取。 + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 实例所属项目ID。该参数可以通过调用 [DescribeProject](/document/api/378/4400) 的返回值中的 projectId 字段来获取。不填为默认项目。 + ProjectId *int64 `json:"ProjectId,omitempty" name:"ProjectId"` + + // 实例所属的专用宿主机ID列表。如果您有购买专用宿主机并且指定了该参数,则您购买的实例就会随机的部署在这些专用宿主机上。 + HostIds []*string `json:"HostIds,omitempty" name:"HostIds" list` + + // 指定母机ip生产子机 + HostIps []*string `json:"HostIps,omitempty" name:"HostIps" list` +} + +type Price struct { + + // 描述了实例价格。 + InstancePrice *ItemPrice `json:"InstancePrice,omitempty" name:"InstancePrice"` + + // 描述了网络价格。 + BandwidthPrice *ItemPrice `json:"BandwidthPrice,omitempty" name:"BandwidthPrice"` +} + +type RebootInstancesRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 是否在正常重启失败后选择强制重启实例。取值范围:
  • TRUE:表示在正常重启失败后进行强制重启
  • FALSE:表示在正常重启失败后不进行强制重启

    默认取值:FALSE。 + ForceReboot *bool `json:"ForceReboot,omitempty" name:"ForceReboot"` + + // 关机类型。取值范围:
  • SOFT:表示软关机
  • HARD:表示硬关机
  • SOFT_FIRST:表示优先软关机,失败再执行硬关机

    默认取值:SOFT。 + StopType *string `json:"StopType,omitempty" name:"StopType"` +} + +func (r *RebootInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RebootInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RebootInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *RebootInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RebootInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RegionInfo struct { + + // 地域名称,例如,ap-guangzhou + Region *string `json:"Region,omitempty" name:"Region"` + + // 地域描述,例如,华南地区(广州) + RegionName *string `json:"RegionName,omitempty" name:"RegionName"` + + // 地域是否可用状态 + RegionState *string `json:"RegionState,omitempty" name:"RegionState"` +} + +type RenewHostsRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的CDH实例ID。 + HostIds []*string `json:"HostIds,omitempty" name:"HostIds" list` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + HostChargePrepaid *ChargePrepaid `json:"HostChargePrepaid,omitempty" name:"HostChargePrepaid"` +} + +func (r *RenewHostsRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RenewHostsRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RenewHostsResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *RenewHostsResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RenewHostsResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RenewInstancesRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的续费时长、是否设置自动续费等属性。包年包月实例该参数为必传参数。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 是否续费弹性数据盘。取值范围:
  • TRUE:表示续费包年包月实例同时续费其挂载的弹性数据盘
  • FALSE:表示续费包年包月实例同时不再续费其挂载的弹性数据盘

    默认取值:TRUE。 + RenewPortableDataDisk *bool `json:"RenewPortableDataDisk,omitempty" name:"RenewPortableDataDisk"` +} + +func (r *RenewInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RenewInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RenewInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *RenewInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RenewInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetInstanceRequest struct { + *tchttp.BaseRequest + + // 实例ID。可通过 [DescribeInstances](https://cloud.tencent.com/document/api/213/9388) API返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/9418) ,取返回信息中的`ImageId`字段。
  • + //
    默认取值:默认使用当前镜像。 + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例系统盘配置信息。系统盘为云盘的实例可以通过该参数指定重装后的系统盘大小来实现对系统盘的扩容操作,若不指定则默认系统盘大小保持不变。系统盘大小只支持扩容不支持缩容;重装只支持修改系统盘的大小,不能修改系统盘的类型。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 重装系统时,可以指定修改实例的HostName。 + HostName *string `json:"HostName,omitempty" name:"HostName"` +} + +func (r *ResetInstanceRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetInstanceRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetInstanceResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ResetInstanceResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetInstanceResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetInstancesInternetMaxBandwidthRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口返回值中的 `InstanceId` 获取。 每次请求批量实例的上限为100。当调整 `BANDWIDTH_PREPAID` 和 `BANDWIDTH_POSTPAID_BY_HOUR` 计费方式的带宽时,只支持一个实例。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 公网出带宽配置。不同机型带宽上限范围不一致,具体限制详见带宽限制对账表。暂时只支持 `InternetMaxBandwidthOut` 参数。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 带宽生效的起始时间。格式:`YYYY-MM-DD`,例如:`2016-10-30`。起始时间不能早于当前时间。如果起始时间是今天则新设置的带宽立即生效。该参数只对包年包月带宽有效,其他模式带宽不支持该参数,否则接口会以相应错误码返回。 + StartTime *string `json:"StartTime,omitempty" name:"StartTime"` + + // 带宽生效的终止时间。格式: `YYYY-MM-DD` ,例如:`2016-10-30` 。新设置的带宽的有效期包含终止时间此日期。终止时间不能晚于包年包月实例的到期时间。实例的到期时间可通过 [`DescribeInstances`](https://cloud.tencent.com/document/api/213/9388)接口返回值中的`ExpiredTime`获取。该参数只对包年包月带宽有效,其他模式带宽不支持该参数,否则接口会以相应错误码返回。 + EndTime *string `json:"EndTime,omitempty" name:"EndTime"` +} + +func (r *ResetInstancesInternetMaxBandwidthRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetInstancesInternetMaxBandwidthRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetInstancesInternetMaxBandwidthResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ResetInstancesInternetMaxBandwidthResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetInstancesInternetMaxBandwidthResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetInstancesPasswordRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728) API返回值中的`InstanceId`获取。每次请求允许操作的实例数量上限是100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 实例登录密码。不同操作系统类型密码复杂度限制不一样,具体如下: + // Linux实例密码必须8-30位,推荐使用12位以上密码,不能以“/”开头,至少包含以下字符中的三种不同字符,字符种类:
  • 小写字母:[a-z]
  • 大写字母:[A-Z]
  • 数字:0-9
  • 特殊字符: ()\`~!@#$%^&\*-+=\_|{}[]:;'<>,.?/: + // Windows实例密码必须12~30位,不能以“/”开头且不包括用户名,至少包含以下字符中的三种不同字符
  • 小写字母:[a-z]
  • 大写字母:[A-Z]
  • 数字: 0-9
  • 特殊字符:()\`~!@#$%^&\*-+=\_|{}[]:;' <>,.?/:
  • 如果实例即包含`Linux`实例又包含`Windows`实例,则密码复杂度限制按照`Windows`实例的限制。 + Password *string `json:"Password,omitempty" name:"Password"` + + // 待重置密码的实例操作系统用户名。不得超过64个字符。 + UserName *string `json:"UserName,omitempty" name:"UserName"` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再重置用户密码。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机
  • FALSE:表示在正常关机失败后不进行强制关机

    默认取值:FALSE。

    强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + +func (r *ResetInstancesPasswordRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetInstancesPasswordRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetInstancesPasswordResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ResetInstancesPasswordResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetInstancesPasswordResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetInstancesTypeRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为1。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 实例机型。不同实例机型指定了不同的资源规格,具体取值可通过调用接口[`DescribeInstanceTypeConfigs`](https://cloud.tencent.com/document/api/213/15749)来获得最新的规格表或参见[实例类型](https://cloud.tencent.com/document/product/213/11518)描述。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再重置用户密码。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机
  • FALSE:表示在正常关机失败后不进行强制关机

    默认取值:FALSE。

    强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + +func (r *ResetInstancesTypeRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetInstancesTypeRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResetInstancesTypeResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ResetInstancesTypeResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResetInstancesTypeResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResizeInstanceDisksRequest struct { + *tchttp.BaseRequest + + // 待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。 + InstanceId *string `json:"InstanceId,omitempty" name:"InstanceId"` + + // 待扩容的数据盘配置信息。只支持扩容非弹性数据盘([`DescribeDisks`](https://cloud.tencent.com/document/api/362/16315)接口返回值中的`Portable`为`false`表示非弹性),且[数据盘类型](/document/api/213/9452#block_device)为:`CLOUD_BASIC`、`CLOUD_PREMIUM`、`CLOUD_SSD`。数据盘容量单位:GB。最小扩容步长:10G。关于数据盘类型的选择请参考硬盘产品简介。可选数据盘类型受到实例类型`InstanceType`限制。另外允许扩容的最大容量也因数据盘类型的不同而有所差异。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks" list` + + // 是否对运行中的实例选择强制关机。建议对运行中的实例先手动关机,然后再重置用户密码。取值范围:
  • TRUE:表示在正常关机失败后进行强制关机
  • FALSE:表示在正常关机失败后不进行强制关机

    默认取值:FALSE。

    强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏,请仅在服务器不能正常关机时使用。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` +} + +func (r *ResizeInstanceDisksRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResizeInstanceDisksRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type ResizeInstanceDisksResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *ResizeInstanceDisksResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *ResizeInstanceDisksResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RunInstancesRequest struct { + *tchttp.BaseRequest + + // 实例所在的位置。通过该参数可以指定实例所属可用区,所属项目,所属宿主机(在专用宿主机上创建子机时指定)等属性。 + Placement *Placement `json:"Placement,omitempty" name:"Placement"` + + // 指定有效的[镜像](https://cloud.tencent.com/document/product/213/4940)ID,格式形如`img-xxx`。镜像类型分为四种:
  • 公共镜像
  • 自定义镜像
  • 共享镜像
  • 服务市场镜像

  • 可通过以下方式获取可用的镜像ID:
  • `公共镜像`、`自定义镜像`、`共享镜像`的镜像ID可通过登录[控制台](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE)查询;`服务镜像市场`的镜像ID可通过[云市场](https://market.cloud.tencent.com/list)查询。
  • 通过调用接口 [DescribeImages](https://cloud.tencent.com/document/api/213/15715) ,取返回信息中的`ImageId`字段。
  • + ImageId *string `json:"ImageId,omitempty" name:"ImageId"` + + // 实例[计费类型](https://cloud.tencent.com/document/product/213/2180)。
  • PREPAID:预付费,即包年包月
  • POSTPAID_BY_HOUR:按小时后付费
  • CDHPAID:独享子机(基于专用宿主机创建,宿主机部分的资源不收费)
  • SPOTPAID:竞价付费
    默认值:POSTPAID_BY_HOUR。 + InstanceChargeType *string `json:"InstanceChargeType,omitempty" name:"InstanceChargeType"` + + // 预付费模式,即包年包月相关参数设置。通过该参数可以指定包年包月实例的购买时长、是否设置自动续费等属性。若指定实例的付费模式为预付费则该参数必传。 + InstanceChargePrepaid *InstanceChargePrepaid `json:"InstanceChargePrepaid,omitempty" name:"InstanceChargePrepaid"` + + // 实例机型。不同实例机型指定了不同的资源规格。 + //
  • 对于付费模式为PREPAID或POSTPAID\_BY\_HOUR的实例创建,具体取值可通过调用接口[DescribeInstanceTypeConfigs](https://cloud.tencent.com/document/api/213/15749)来获得最新的规格表或参见[实例类型](https://cloud.tencent.com/document/product/213/11518)描述。若不指定该参数,则默认机型为S1.SMALL1。
  • 对于付费模式为CDHPAID的实例创建,该参数以"CDH_"为前缀,根据cpu和内存配置生成,具体形式为:CDH_XCXG,例如对于创建cpu为1核,内存为1G大小的专用宿主机的实例,该参数应该为CDH_1C1G。 + InstanceType *string `json:"InstanceType,omitempty" name:"InstanceType"` + + // 实例系统盘配置信息。若不指定该参数,则按照系统默认值进行分配。 + SystemDisk *SystemDisk `json:"SystemDisk,omitempty" name:"SystemDisk"` + + // 实例数据盘配置信息。若不指定该参数,则默认不购买数据盘。支持购买的时候指定11块数据盘,其中最多包含1块LOCAL_BASIC数据盘或者LOCAL_SSD数据盘,最多包含10块CLOUD_BASIC数据盘、CLOUD_PREMIUM数据盘或者CLOUD_SSD数据盘。 + DataDisks []*DataDisk `json:"DataDisks,omitempty" name:"DataDisks" list` + + // 私有网络相关信息配置。通过该参数可以指定私有网络的ID,子网ID等信息。若不指定该参数,则默认使用基础网络。若在此参数中指定了私有网络ip,表示每个实例的主网卡ip,而且InstanceCount参数必须与私有网络ip的个数一致。 + VirtualPrivateCloud *VirtualPrivateCloud `json:"VirtualPrivateCloud,omitempty" name:"VirtualPrivateCloud"` + + // 公网带宽相关信息设置。若不指定该参数,则默认公网带宽为0Mbps。 + InternetAccessible *InternetAccessible `json:"InternetAccessible,omitempty" name:"InternetAccessible"` + + // 购买实例数量。包年包月实例取值范围:[1,300],按量计费实例取值范围:[1,100]。默认取值:1。指定购买实例的数量不能超过用户所能购买的剩余配额数量,具体配额相关限制详见[CVM实例购买限制](https://cloud.tencent.com/document/product/213/2664)。 + InstanceCount *int64 `json:"InstanceCount,omitempty" name:"InstanceCount"` + + // 实例显示名称。
  • 不指定实例显示名称则默认显示‘未命名’。
  • 购买多台实例,如果指定模式串`{R:x}`,表示生成数字`[x, x+n-1]`,其中`n`表示购买实例的数量,例如`server_{R:3}`,购买1台时,实例显示名称为`server_3`;购买2台时,实例显示名称分别为`server_3`,`server_4`。支持指定多个模式串`{R:x}`。
  • 购买多台实例,如果不指定模式串,则在实例显示名称添加后缀`1、2...n`,其中`n`表示购买实例的数量,例如`server_`,购买2台时,实例显示名称分别为`server_1`,`server_2`。 + InstanceName *string `json:"InstanceName,omitempty" name:"InstanceName"` + + // 实例登录设置。通过该参数可以设置实例的登录方式密码、密钥或保持镜像的原始登录设置。默认情况下会随机生成密码,并以站内信方式知会到用户。 + LoginSettings *LoginSettings `json:"LoginSettings,omitempty" name:"LoginSettings"` + + // 实例所属安全组。该参数可以通过调用 [DescribeSecurityGroups](https://cloud.tencent.com/document/api/215/15808) 的返回值中的sgId字段来获取。若不指定该参数,则绑定默认安全组。 + SecurityGroupIds []*string `json:"SecurityGroupIds,omitempty" name:"SecurityGroupIds" list` + + // 增强服务。通过该参数可以指定是否开启云安全、云监控等服务。若不指定该参数,则默认开启云监控、云安全服务。 + EnhancedService *EnhancedService `json:"EnhancedService,omitempty" name:"EnhancedService"` + + // 用于保证请求幂等性的字符串。该字符串由客户生成,需保证不同请求之间唯一,最大值不超过64个ASCII字符。若不指定该参数,则无法保证请求的幂等性。
    更多详细信息请参阅:如何保证幂等性。 + ClientToken *string `json:"ClientToken,omitempty" name:"ClientToken"` + + // 云服务器的主机名。
  • 点号(.)和短横线(-)不能作为 HostName 的首尾字符,不能连续使用。
  • Windows 实例:名字符长度为[2, 15],允许字母(不限制大小写)、数字和短横线(-)组成,不支持点号(.),不能全是数字。
  • 其他类型(Linux 等)实例:字符长度为[2, 60],允许支持多个点号,点之间为一段,每段允许字母(不限制大小写)、数字和短横线(-)组成。 + HostName *string `json:"HostName,omitempty" name:"HostName"` + + // 定时任务。通过该参数可以为实例指定定时任务,目前仅支持定时销毁。 + ActionTimer *ActionTimer `json:"ActionTimer,omitempty" name:"ActionTimer"` + + // 置放群组id,仅支持指定一个。 + DisasterRecoverGroupIds []*string `json:"DisasterRecoverGroupIds,omitempty" name:"DisasterRecoverGroupIds" list` + + // 标签描述列表。通过指定该参数可以同时绑定标签到相应的资源实例,当前仅支持绑定标签到云主机实例。 + TagSpecification []*TagSpecification `json:"TagSpecification,omitempty" name:"TagSpecification" list` + + // 实例的市场相关选项,如竞价实例相关参数,若指定实例的付费模式为竞价付费则该参数必传。 + InstanceMarketOptions *InstanceMarketOptionsRequest `json:"InstanceMarketOptions,omitempty" name:"InstanceMarketOptions"` + + // 提供给实例使用的用户数据,需要以 base64 方式编码,支持的最大数据大小为 16KB。关于获取此参数的详细介绍,请参阅[Windows](https://cloud.tencent.com/document/product/213/17526)和[Linux](https://cloud.tencent.com/document/product/213/17525)启动时运行命令。 + UserData *string `json:"UserData,omitempty" name:"UserData"` + + // 是否只预检此次请求。 + // true:发送检查请求,不会创建实例。检查项包括是否填写了必需参数,请求格式,业务限制和云服务器库存。 + // 如果检查不通过,则返回对应错误码; + // 如果检查通过,则返回RequestId. + // false(默认):发送正常请求,通过检查后直接创建实例 + DryRun *bool `json:"DryRun,omitempty" name:"DryRun"` +} + +func (r *RunInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RunInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RunInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 当通过本接口来创建实例时会返回该参数,表示一个或多个实例`ID`。返回实例`ID`列表并不代表实例创建成功,可根据 [DescribeInstances](https://cloud.tencent.com/document/api/213/15728) 接口查询返回的InstancesSet中对应实例的`ID`的状态来判断创建是否完成;如果实例状态由“准备中”变为“正在运行”,则为创建成功。 + InstanceIdSet []*string `json:"InstanceIdSet,omitempty" name:"InstanceIdSet" list` + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *RunInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *RunInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type RunMonitorServiceEnabled struct { + + // 是否开启[云监控](/document/product/248)服务。取值范围:
  • TRUE:表示开启云监控服务
  • FALSE:表示不开启云监控服务

    默认取值:TRUE。 + Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` +} + +type RunSecurityServiceEnabled struct { + + // 是否开启[云安全](/document/product/296)服务。取值范围:
  • TRUE:表示开启云安全服务
  • FALSE:表示不开启云安全服务

    默认取值:TRUE。 + Enabled *bool `json:"Enabled,omitempty" name:"Enabled"` +} + +type SharePermission struct { + + // 镜像分享时间 + CreatedTime *string `json:"CreatedTime,omitempty" name:"CreatedTime"` + + // 镜像分享的账户ID + AccountId *string `json:"AccountId,omitempty" name:"AccountId"` +} + +type Snapshot struct { + + // 快照Id。 + SnapshotId *string `json:"SnapshotId,omitempty" name:"SnapshotId"` + + // 创建此快照的云硬盘类型。取值范围: + // SYSTEM_DISK:系统盘 + // DATA_DISK:数据盘。 + DiskUsage *string `json:"DiskUsage,omitempty" name:"DiskUsage"` + + // 创建此快照的云硬盘大小,单位GB。 + DiskSize *int64 `json:"DiskSize,omitempty" name:"DiskSize"` +} + +type SpotMarketOptions struct { + + // 竞价出价 + MaxPrice *string `json:"MaxPrice,omitempty" name:"MaxPrice"` + + // 竞价请求类型,当前仅支持类型:one-time + SpotInstanceType *string `json:"SpotInstanceType,omitempty" name:"SpotInstanceType"` +} + +type StartInstancesRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` +} + +func (r *StartInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *StartInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type StartInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *StartInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *StartInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type StopInstancesRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` + + // 是否在正常关闭失败后选择强制关闭实例。取值范围:
  • TRUE:表示在正常关闭失败后进行强制关闭
  • FALSE:表示在正常关闭失败后不进行强制关闭

    默认取值:FALSE。 + ForceStop *bool `json:"ForceStop,omitempty" name:"ForceStop"` + + // 实例的关闭模式。取值范围:
  • SOFT_FIRST:表示在正常关闭失败后进行强制关闭
  • HARD:直接强制关闭
  • SOFT:仅软关机
    默认取值:SOFT。 + StopType *string `json:"StopType,omitempty" name:"StopType"` + + // 按量计费实例关机收费模式。 + // 取值范围:
  • KEEP_CHARGING:关机继续收费
  • STOP_CHARGING:关机停止收费
    默认取值:KEEP_CHARGING。 + // 该参数只针对部分按量计费云硬盘实例生效,详情参考[按量计费实例关机不收费说明](https://cloud.tencent.com/document/product/213/19918) + StoppedMode *string `json:"StoppedMode,omitempty" name:"StoppedMode"` +} + +func (r *StopInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *StopInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type StopInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *StopInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *StopInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type StorageBlock struct { + + // HDD本地存储类型,值为:LOCAL_PRO. + // 注意:此字段可能返回 null,表示取不到有效值。 + Type *string `json:"Type,omitempty" name:"Type"` + + // HDD本地存储的最小容量 + // 注意:此字段可能返回 null,表示取不到有效值。 + MinSize *int64 `json:"MinSize,omitempty" name:"MinSize"` + + // HDD本地存储的最大容量 + // 注意:此字段可能返回 null,表示取不到有效值。 + MaxSize *int64 `json:"MaxSize,omitempty" name:"MaxSize"` +} + +type SyncImagesRequest struct { + *tchttp.BaseRequest + + // 镜像ID列表 ,镜像ID可以通过如下方式获取:
  • 通过[DescribeImages](https://cloud.tencent.com/document/api/213/15715)接口返回的`ImageId`获取。
  • 通过[镜像控制台](https://console.cloud.tencent.com/cvm/image)获取。
    镜像ID必须满足限制:
  • 镜像ID对应的镜像状态必须为`NORMAL`。
  • 镜像大小小于50GB。
    镜像状态请参考[镜像数据表](/document/api/213/9452#image_state)。 + ImageIds []*string `json:"ImageIds,omitempty" name:"ImageIds" list` + + // 目的同步地域列表;必须满足限制:
  • 不能为源地域,
  • 必须是一个合法的Region。
  • 暂不支持部分地域同步。
    具体地域参数请参考[Region](https://cloud.tencent.com/document/product/213/6091)。 + DestinationRegions []*string `json:"DestinationRegions,omitempty" name:"DestinationRegions" list` +} + +func (r *SyncImagesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *SyncImagesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type SyncImagesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *SyncImagesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *SyncImagesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type SystemDisk struct { + + // 系统盘类型。系统盘类型限制详见[CVM实例配置](/document/product/213/2177)。取值范围:
  • LOCAL_BASIC:本地硬盘
  • LOCAL_SSD:本地SSD硬盘
  • CLOUD_BASIC:普通云硬盘
  • CLOUD_SSD:SSD云硬盘
  • CLOUD_PREMIUM:高性能云硬盘

    默认取值:CLOUD_BASIC。 + DiskType *string `json:"DiskType,omitempty" name:"DiskType"` + + // 系统盘ID。LOCAL_BASIC 和 LOCAL_SSD 类型没有ID。暂时不支持该参数。 + DiskId *string `json:"DiskId,omitempty" name:"DiskId"` + + // 系统盘大小,单位:GB。默认值为 50 + DiskSize *int64 `json:"DiskSize,omitempty" name:"DiskSize"` +} + +type Tag struct { + + // 标签键 + Key *string `json:"Key,omitempty" name:"Key"` + + // 标签值 + Value *string `json:"Value,omitempty" name:"Value"` +} + +type TagSpecification struct { + + // 标签绑定的资源类型,当前支持类型:"instance"和"host" + ResourceType *string `json:"ResourceType,omitempty" name:"ResourceType"` + + // 标签对列表 + Tags []*Tag `json:"Tags,omitempty" name:"Tags" list` +} + +type TerminateInstancesRequest struct { + *tchttp.BaseRequest + + // 一个或多个待操作的实例ID。可通过[`DescribeInstances`](https://cloud.tencent.com/document/api/213/15728)接口返回值中的`InstanceId`获取。每次请求批量实例的上限为100。 + InstanceIds []*string `json:"InstanceIds,omitempty" name:"InstanceIds" list` +} + +func (r *TerminateInstancesRequest) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *TerminateInstancesRequest) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type TerminateInstancesResponse struct { + *tchttp.BaseResponse + Response *struct { + + // 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` + } `json:"Response"` +} + +func (r *TerminateInstancesResponse) ToJsonString() string { + b, _ := json.Marshal(r) + return string(b) +} + +func (r *TerminateInstancesResponse) FromJsonString(s string) error { + return json.Unmarshal([]byte(s), &r) +} + +type VirtualPrivateCloud struct { + + // 私有网络ID,形如`vpc-xxx`。有效的VpcId可通过登录[控制台](https://console.cloud.tencent.com/vpc/vpc?rid=1)查询;也可以调用接口 [DescribeVpcEx](/document/api/215/1372) ,从接口返回中的`unVpcId`字段获取。若在创建子机时VpcId与SubnetId同时传入`DEFAULT`,则强制使用默认vpc网络。 + VpcId *string `json:"VpcId,omitempty" name:"VpcId"` + + // 私有网络子网ID,形如`subnet-xxx`。有效的私有网络子网ID可通过登录[控制台](https://console.cloud.tencent.com/vpc/subnet?rid=1)查询;也可以调用接口 [DescribeSubnets](/document/api/215/15784) ,从接口返回中的`unSubnetId`字段获取。若在创建子机时SubnetId与VpcId同时传入`DEFAULT`,则强制使用默认vpc网络。 + SubnetId *string `json:"SubnetId,omitempty" name:"SubnetId"` + + // 是否用作公网网关。公网网关只有在实例拥有公网IP以及处于私有网络下时才能正常使用。取值范围:
  • TRUE:表示用作公网网关
  • FALSE:表示不用作公网网关

    默认取值:FALSE。 + AsVpcGateway *bool `json:"AsVpcGateway,omitempty" name:"AsVpcGateway"` + + // 私有网络子网 IP 数组,在创建实例、修改实例vpc属性操作中可使用此参数。当前仅批量创建多台实例时支持传入相同子网的多个 IP。 + PrivateIpAddresses []*string `json:"PrivateIpAddresses,omitempty" name:"PrivateIpAddresses" list` +} + +type ZoneInfo struct { + + // 可用区名称,例如,ap-guangzhou-3 + // 全网可用区名称如下: + //
  • ap-chongqing-1
  • + //
  • ap-seoul-1
  • + //
  • ap-chengdu-1
  • + //
  • ap-chengdu-2
  • + //
  • ap-hongkong-1
  • + //
  • ap-hongkong-2
  • + //
  • ap-shenzhen-fsi-1
  • + //
  • ap-shenzhen-fsi-2
  • + //
  • ap-shenzhen-fsi-3
  • + //
  • ap-guangzhou-1(售罄)
  • + //
  • ap-guangzhou-2(售罄)
  • + //
  • ap-guangzhou-3
  • + //
  • ap-guangzhou-4
  • + //
  • ap-tokyo-1
  • + //
  • ap-singapore-1
  • + //
  • ap-shanghai-fsi-1
  • + //
  • ap-shanghai-fsi-2
  • + //
  • ap-shanghai-fsi-3
  • + //
  • ap-bangkok-1
  • + //
  • ap-shanghai-1(售罄)
  • + //
  • ap-shanghai-2
  • + //
  • ap-shanghai-3
  • + //
  • ap-shanghai-4
  • + //
  • ap-mumbai-1
  • + //
  • ap-mumbai-2
  • + //
  • eu-moscow-1
  • + //
  • ap-beijing-1
  • + //
  • ap-beijing-2
  • + //
  • ap-beijing-3
  • + //
  • ap-beijing-4
  • + //
  • na-siliconvalley-1
  • + //
  • na-siliconvalley-2
  • + //
  • eu-frankfurt-1
  • + //
  • na-toronto-1
  • + //
  • na-ashburn-1
  • + //
  • na-ashburn-2
  • + Zone *string `json:"Zone,omitempty" name:"Zone"` + + // 可用区描述,例如,广州三区 + ZoneName *string `json:"ZoneName,omitempty" name:"ZoneName"` + + // 可用区ID + ZoneId *string `json:"ZoneId,omitempty" name:"ZoneId"` + + // 可用区状态,包含AVAILABLE和UNAVAILABLE。AVAILABLE代表可用,UNAVAILABLE代表不可用。 + ZoneState *string `json:"ZoneState,omitempty" name:"ZoneState"` +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/vendor.json b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/vendor.json new file mode 100644 index 00000000000..2ffa3b52b23 --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/tencentcloud/vendor/vendor.json @@ -0,0 +1,37 @@ +{ + "comment": "", + "ignore": "test", + "package": [ + { + "checksumSHA1": "ifNJy64Rl23Bo9KMkQPTygEM1fQ=", + "path": "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common", + "revision": "7fbfcf6be3e322b2a3d35f4df9fc53c339d991a2", + "revisionTime": "2019-08-30T03:48:19Z" + }, + { + "checksumSHA1": "q+o6CYdmE6zUexIu50LJ8m5V9M8=", + "path": "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors", + "revision": "7fbfcf6be3e322b2a3d35f4df9fc53c339d991a2", + "revisionTime": "2019-08-30T03:48:19Z" + }, + { + "checksumSHA1": "HIMpmn/RgpifmKOFdOgh0/9vBtY=", + "path": "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http", + "revision": "7fbfcf6be3e322b2a3d35f4df9fc53c339d991a2", + "revisionTime": "2019-08-30T03:48:19Z" + }, + { + "checksumSHA1": "LjtkxgcL4JvLEuLUE71G1v2z3Bg=", + "path": "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile", + "revision": "7fbfcf6be3e322b2a3d35f4df9fc53c339d991a2", + "revisionTime": "2019-08-30T03:48:19Z" + }, + { + "checksumSHA1": "YPkw+lZhljqf2sgHchwD7yaNnoA=", + "path": "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312", + "revision": "7fbfcf6be3e322b2a3d35f4df9fc53c339d991a2", + "revisionTime": "2019-08-30T03:48:19Z" + } + ], + "rootPath": "github.com/hashicorp/go-discover/provider/tencentcloud" +} diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/LICENSE new file mode 100644 index 00000000000..cc9a0c7146f --- /dev/null +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/LICENSE @@ -0,0 +1,24135 @@ +open_source_licenses.txt + +vSphere Integrated Containers Engine 1.5.2 GA + +====================================================================== + +Copyright (c) 2016-2019 VMware, Inc. All rights reserved. + +This product is licensed to you under the Apache License version 2.0 (the License). You may not use this product except in compliance with the License. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +====================================================================== + +vSphere Integrated Containers Engine v1.5.2 GA includes a number of +components with separate copyright notices and license terms. This +product does not necessarily use all the open source components referred +to below. Your use of the source code for these components is subject to +the terms and conditions of the following licenses. + +====================================================================== + +The following copyright statements and licenses apply to various open +source software packages (or portions thereof) that are distributed with +this VMware Product. + +The VMware Product may also include other VMware components, which may +contain additional open source software packages. One or more such +open_source_licenses.txt files may therefore accompany this VMware +Product. + +The VMware Product that includes this file does not necessarily use all +the open source software packages referred to below and may also only +use portions of a given package. + + +=============== TABLE OF CONTENTS ============================= + +The following is a listing of the open source components detailed in +this document. This list is provided for your convenience; please read +further if you wish to review the copyright notice(s) and the full text +of the license associated with each component. + +PART 1. VIRTUAL APPLIANCE: APPLICATION LAYER + + +SECTION 1: Apache License, V2.0 + + >>> appengine-ca59ef35f409df61fa4a5f8290ff289b37eccfb8 + >>> aws_aws-sdk-go_aws-master + >>> coreos_etcd_client-781196fa8746d6c34ace2a62898051af6dc46002 + >>> coreos_etcd_version-781196fa8746d6c34ace2a62898051af6dc46002 + >>> coreos_go-semver_semver-5e3acbb5668c4c3deb4842615c4098eb61fb6b1e + >>> docker_distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc + >>> docker_go-events-aa2e3b613fbbfdddbe055a7b9e3ce271cfd83eca + >>> docker_libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd + >>> docker_libtrust-9cbd2a1374f46905c68a4eb3694a130610adc62a + >>> go-openapi_analysis-d5a75b7d751ca3f11ad5d93cfe97405f2c3f6a47 + >>> go-openapi_errors-fc3f73a224499b047eda7191e5d22e1e9631e86f + >>> go-openapi_jsonpointer-779f45308c19820f1a69e9a4cd965f496e0da10f + >>> go-openapi_jsonreference-36d33bfe519efae5632669801b180bf1a245da3b + >>> go-openapi_loads-6bb6486231e079ea125c0f39994ed3d0c53399ed + >>> go-openapi_runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854 + >>> go-openapi_spec-e072eb2390d3a03736a6eb617d30f48369160447 + >>> go-openapi_strfmt-0cb3db44c13bad3b3f567b762a66751972a310cc + >>> go-openapi_swag-96d7b9ebd181a1735a1c9ac87914f2b32fbf56c9 + >>> go-openapi_validate-035dcd74f1f61e83debe1c22950dc53556e7e4b2 + >>> go_compute_metadata-cd0da878c66091060d2e7403abd62192b3e387e0 + >>> go_internal-cd0da878c66091060d2e7403abd62192b3e387e0 + >>> golang_glog-23def4e6c14b4da8ac2ed8007337bc5eb5007998 + >>> golang_groupcache_lru-72d04f9fcdec7d3821820cc4a6f150eae553639a + >>> govmomi-v0.17.1 + >>> maruel_panicparse_stack-25bcac0d793cf4109483505a0d66e066a3a90a80 + >>> oxtoacart/bpool-4e1c5567d7c2dd59fa4c7c83d34c2f3528b025d6 + >>> syncutil_singleflight-7ce08ca145dbe0e66a127c447b80ee7914f3e4f9 + >>> vdemeester_shakers-24d7f1d6a71aa5d9cbe7390e4afb66b7eef9e1b3 + >>> vishvananda_netlink-482f7a52b758233521878cb6c5904b6bd63f3457 + >>> vishvananda_netns-604eaf189ee867d8c147fafc28def2394e878d25 + >>> yaml_v2-4c78c975fe7c825c6d1466c42be594d1d6f3aba6 + + +SECTION 2: BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES + + >>> agl_ed25519-master + >>> airbrake_gobrake_v2-c9d51adc624b5cc4c1bf8de730a09af4878ffe2d + >>> api_compute_v1-dfa61ae24628a06502b9c2805d983b57e89399b5 + >>> api_gensupport-dfa61ae24628a06502b9c2805d983b57e89399b5 + >>> api_googleapi-dfa61ae24628a06502b9c2805d983b57e89399b5 + >>> armon_go-metrics-f303b03b91d770a11a39677f1d3b55da4002bbcb + >>> armon_go-radix-4239b77079c7b5d1243b7b4736304ce8ddb6f0f2 + >>> asaskevich_govalidator-9699ab6b38bee2e02cd3fe8b99ecf67665395c96 + >>> azure_go-ansiterm-70b2c90b260171e829f1ebd7c17f600c11858dbe + >>> boltdb_bolt-b514920f8f2e0a68f857e5a12c774f385a59aef9 + >>> cenkalti_backoff-b02f2bbce11d7ea6b97f282ef1771b0fe2f65ef3 + >>> client9_misspell-9a1fc2456ac9e8c9b4cbe9d005b6e7adac0d357f + >>> codegangsta/inject-33e0aa1cb7c019ccc3fbe049a8262a6403d30504 + >>> codegangsta_cli-master + >>> cpuguy83_go-md2man_md2man-a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa + >>> d2g_dhcp4-f0e4d29ff0231dce36e250b2ed9ff08412584bca + >>> deckarep_golang-set-1f0f4ff8d3fbef9328522993ce71c35890f67554 + >>> dustin_go-humanize-259d2a102b871d17f30e3cd9881a642961a1e486 + >>> gemnasium_logrus-airbrake-hook_v2-31e6fd4bd5a98d8ee7673d24bc54ec73c31810dd + >>> gizak_termui-798ffb9cbbe4073ef1f88e6069ca4a2c6aa6676b + >>> go-check_check-20d25e2804050c1cd24a7eea1e7a6447dd0e74ec + >>> go-martini/martini-22fa46961aabd2665cf3f1343b146d20028f5071 + >>> go-nfs-client-42fca177a36031d648551c751de1daf5f55dd4f0 + >>> godbus_dbus-230e4b23db2fd81c53eaa0073f76659d4849ce51 + >>> gogo_protobuf_gogoproto-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + >>> gogo_protobuf_proto-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + >>> gogo_protobuf_protoc-gen-gogo_descriptor-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + >>> gogo_protobuf_sortkeys-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + >>> gogo_protobuf_types-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + >>> goji/param-d7f49fd7d1ed53fd562e737a8b5bbcc7e3d925e2 + >>> golang_lint-cb00e5669539f047b2f4c53a421a01b0c8e172c6 + >>> google_go-github_github-7a51fb928f52a196d5f31daefb8a489453ef54ff + >>> google_go-querystring_query-53e6ce116135b80d037921a7fdd5138cf32d7a8a + >>> google_uuid-f3f4b54b2fabcf1f11dcc939025bb0c109b00ed8 + >>> googleapis_gax-go-da06d194a00e19ce00d9011a13931c3f6f6887c7 + >>> gorilla_context-1c83b3eabd45b6d76072b66b746c20815fb2872d + >>> gorilla_mux-acf3be1b335c8ce30b2c8d51300984666f0ceefa + >>> gorilla_securecookie-fa5329f913702981df43dcb2a380bac429c810b5 + >>> gorilla_sessions-ca9ada44574153444b00d3fd9c8559e4cc95f896 + >>> gorilla_websocket-a91eba7f97777409bc2c443f5534d41dd20c5720 + >>> graylog2_go-gelf_gelf-master + >>> grpc-b1a2821ca5a4fd6b6e48ddfbb7d6d7584d839d21 + >>> hpcloud_tail-a30252cb686a21eb2d0b98132633053ec2f7f1e5 + >>> jessevdk_go-flags-97448c91aac742cbca3d020b3e769013a420a06f + >>> julienschmidt/httprouter-975b5c4c7c21c0e3d2764200bf2aa8e34657ae6e + >>> justinas/alice-1051eaf52fcafdd87ead59d28b065f1fcb8274ec + >>> kr_pty-f7ee69f31298ecbe5d2b349c711e2547a617d398 + >>> mailru_easyjson-99e922cf9de1bc0ab38310c277cff32c2147e747 + >>> martini-contrib/render-ec18f8345a1181146728238980606fb1d6f40e8c + >>> matryer_resync-d39c09a11215c84aab0b65e323fc47dd6e276af1 + >>> mattn_go-runewidth-14207d285c6c197daabb5c9793d63e7af9ab2d50 + >>> mdlayher/arp-7140e8e22da120cb3efc8e1096f299933624024e + >>> mdlayher/ethernet-e72cf8343052938936194daba1914fd1bb33d2fe + >>> mdlayher/raw-c83864e487652c25edc58048eafdc1dfa2f142c7 + >>> microsoft_go-winio-24a3e3d3fc7451805e09d11e11e95d9a0a4f205e + >>> microsoft_hcsshim-d327ca738085de7d617aa1df16d98fe7a64c2455 + >>> miekg_dns-ca336a1f95a6b89be9c250df26c7a41742eb4a6f + >>> mitchellh_go-wordwrap-ad45545899c7b13c020ea92b2072220eefad42b8 + >>> mitchellh_mapstructure-5a0325d7fafaac12dda6e7fb8bd222ec1b69875e + >>> mreiferson_go-httpclient-31f0106b4474f14bc441575c19d3a5fa21aa1f6c + >>> naoina_denco-9af2ba0e24214bac003821f4a501b131b2e04c75 + >>> nlopes_slack-f243c7602fdf906248fc1f165284daa4e4d2d09e + >>> nsf_termbox-go-91bae1bb5fa9ee504905ecbe7043fa30e92feaa3 + >>> opennota_urlesc-5fa9ff0392746aeae1c4b37fcc42c65afa7a9587 + >>> pkg_profile-8a808a6967b79da66deacfe508b26d398a69518f + >>> puerkitobio_purell-d69616f51cdfcd7514d6a380847a152dfc2a749d + >>> racksec_srslog-a974ba6f7fb527d2ddc73ee9c05d3e2ccc0af0dc + >>> rs/cors-8dd4211afb5d08dbb39a533b9bb9e4b486351df6 + >>> ryanuber_go-glob-256dc444b735e061061cf46c809487313d5b0065 + >>> sirupsen_logrus-d26492970760ca5d33129d2d799e34be5c4782eb + >>> smartystreets_assertions-287b4346dc4e71a038c346375a9d572453bc469b + >>> smartystreets_assertions_internal_oglematchers-287b4346dc4e71a038c346375a9d572453bc469b + >>> smartystreets_assertions_internal_oglemock-287b4346dc4e71a038c346375a9d572453bc469b + >>> smartystreets_assertions_internal_ogletest-287b4346dc4e71a038c346375a9d572453bc469b + >>> smartystreets_assertions_internal_reqtrace-287b4346dc4e71a038c346375a9d572453bc469b + >>> stretchr_objx-1a9d0bb9f541897e62256577b352fdbc1fb4fd94 + >>> tomb_v1-dd632973f1e7218eb1089048e0798ec9ae7dceb8 + >>> tylerb/graceful.v1-4654dfbb6ad53cb5e27f37d99b02e16c1872fbbb + >>> tylerb_graceful-d7d7a205e779a4738d38eda0671fff8bfc965f14 + >>> ugorji_go_codec-708a42d246822952f38190a8d8c4e6b16a0e600c + >>> urfave/negroni-ccc4a14984828dcb944e6f17fa4a967b18624f2b + >>> urfave_cli_v1-0bdeddeeb0f650497d603c4ad7b20cfe685682f6 + >>> x_crypto_acme-728b753d0135da6801d45a38e6f43ff55779c5c2 + >>> x_crypto_curve25519-728b753d0135da6801d45a38e6f43ff55779c5c2 + >>> x_crypto_ed25519-728b753d0135da6801d45a38e6f43ff55779c5c2 + >>> x_crypto_nacl_secretbox-728b753d0135da6801d45a38e6f43ff55779c5c2 + >>> x_crypto_poly1305-728b753d0135da6801d45a38e6f43ff55779c5c2 + >>> x_crypto_salsa20_salsa-728b753d0135da6801d45a38e6f43ff55779c5c2 + >>> x_crypto_ssh-728b753d0135da6801d45a38e6f43ff55779c5c2 + >>> x_net_context-a6577fac2d73be281a500b310739095313165611 + >>> x_net_http2-a6577fac2d73be281a500b310739095313165611 + >>> x_net_idna-a6577fac2d73be281a500b310739095313165611 + >>> x_net_internal_timeseries-a6577fac2d73be281a500b310739095313165611 + >>> x_net_lex_httplex-a6577fac2d73be281a500b310739095313165611 + >>> x_net_proxy-a6577fac2d73be281a500b310739095313165611 + >>> x_net_trace-a6577fac2d73be281a500b310739095313165611 + >>> x_net_websocket-a6577fac2d73be281a500b310739095313165611 + >>> x_oauth2-1611bb46e67abc64a71ecc5c3ae67f1cbbc2b921 + >>> x_sync_singleflight-5a06fca2c336a4b2b2fcb45702e8c47621b2aa2c + >>> x_sys_unix-99f16d856c9836c42d24e7ab64ea72916925fa97 + >>> x_sys_windows-99f16d856c9836c42d24e7ab64ea72916925fa97 + >>> x_text_internal-f28f36722d5ef2f9655ad3de1f248e3e52ad5ebd + >>> x_text_language-f28f36722d5ef2f9655ad3de1f248e3e52ad5ebd + >>> x_text_message-f28f36722d5ef2f9655ad3de1f248e3e52ad5ebd + >>> x_tools_go_ast_astutil-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + >>> x_tools_go_buildutil-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + >>> x_tools_go_gcexportdata-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + >>> x_tools_go_gcimporter15-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + >>> x_tools_go_loader-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + >>> x_tools_imports-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + >>> zenazn/goji-c05078ca81941f8e801bba3ddc0e6b86b7fdc893 + + +SECTION 3: Mozilla Public License, V2.0 + + >>> d2g_dhcp4client-master + >>> hashicorp_go-cleanhttp-875fb671b3ddc66f8e2f0acc33829c8cb989a38d + >>> hashicorp_memberlist-cef12ad58224d55cf26caa9e3d239c2fcb3432a2 + + +PART 2. VIRTUAL APPLIANCE: OPERATING SYSTEM LAYER + + +SECTION 1: Academic Free License, V2.1 + + >>> dbus-1.11.12-1.ph2 + + +SECTION 2: Apache License, V2.0 + + >>> photon-release-2.0-2.ph2 + + +SECTION 3: BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES + + >>> bzip2-1.0.6-8.ph2 + >>> curl-7.59.0-4.ph2 + >>> expat-2.2.4-1.ph2 + >>> iputils-20151218-4.ph2 + >>> krb5-1.16-2.ph2 + >>> libarchive-3.3.1-2.ph2 + >>> libcap-2.25-7.ph2 + >>> libdb-5.3.28-1.ph2 + >>> libffi-3.2.1-5.ph2 + >>> libsolv-0.6.26-3.ph2 + >>> libssh2-1.8.0-1.ph2 + >>> libtirpc-1.0.1-8.ph2 + >>> linux-pam-1.3.0-1.ph2 + >>> lsof-4.89-2.ph2 + >>> ncurses-6.0-14.ph2 + >>> openssh-7.5p1-11.ph2 + >>> openssl-1.0.2q-1.ph2 + >>> pcre-8.41-1.ph2 + >>> popt-1.16-5.ph2 + >>> shadow-4.2.1-16.ph2 + >>> sqlite-3.22.0-3.ph2 + >>> sudo-1.8.20p2-5.ph2 + >>> vim-8.0.0533-6.ph2 + >>> xz-5.2.3-2.ph2 + >>> zlib-1.2.11-1.ph2 + + +SECTION 4: GNU General Public License, V2.0 + + >>> e2fsprogs-1.43.4-2.ph2 + >>> gcc-6.3.0-7.ph2 + >>> iproute2-4.10.0-3.ph2 + >>> iptables-1.6.1-4.ph2 + >>> linux-esx-4.9.154-1.ph2 + >>> logrotate-3.11.0-3.ph2 + >>> mingetty-1.08-2.ph2 + >>> net-tools-1.60-11.ph2 + >>> procps-ng-3.3.15-2.ph2 + >>> rpm-4.13.0.2-1.ph2 + >>> tdnf-1.2.3-6.ph2 + >>> util-linux-2.32-1.ph2 + + +SECTION 5: GNU General Public License, V3.0 + + >>> bash-4.4.12-3.ph2 + >>> coreutils-8.27-3.ph2 + >>> elfutils-0.169-3.ph2 + >>> grep-3.0-4.ph2 + >>> gzip-1.8-1.ph2 + >>> haveged-1.9.1-4.ph2 + >>> readline-7.0-2.ph2 + + +SECTION 6: GNU Lesser General Public License, V2.1 + + >>> cracklib-2.9.6-8.ph2 + >>> glibc-2.26-13.ph2 + >>> hawkey-2017.1-6.ph2 + >>> kmod-24-3.ph2 + >>> libgcrypt-1.8.1-2.ph2 + >>> libgpg-error-1.27-1.ph2 + >>> systemd-233-18.ph2 + + +SECTION 7: GNU Lesser General Public License, V3.0 + + >>> gmp-6.1.2-2.ph2 + + +SECTION 8: GNU Library General Public License, V2.0 + + >>> glib-2.52.1-3.ph2 + + +SECTION 9: Mozilla Public License, V2.0 + + >>> ca-certificates-20180919-1.ph2 + >>> nspr-4.15-1.ph2 + >>> nss-3.31.1-1.ph2 + + +APPENDIX. Standard License Files + + >>> Apache License, V2.0 + + >>> GNU General Public License, V2.0 + + >>> GNU General Public License, V3.0 + + >>> GNU Library General Public License, V2.0 + + >>> GNU Lesser General Public License, V2.1 + + >>> GNU Lesser General Public License, V3.0 + + >>> Mozilla Public License, V2.0 + + >>> GNU General Public License, V1.0 + + >>> GNU Free Documentation License V1.1 + + >>> GNU Free Documentation License V1.2 + + >>> GNU Free Documentation License V1.3 + + >>> Artistic License, V1.0 + + >>> Artistic License, V2.0 + + >>> Microsoft Permissive Public License + + >>> Microsoft Limited Public License + + >>> Creative Commons Attribution License, V3.0 + + >>> Creative Commons Attribution 4.0 International + + >>> Creative Commons Attribution-ShareAlike, V4.0 + + >>> Creative Commons Attribution-ShareAlike, V3.0 + + >>> Academic Free License, V2.1 + + >>> SIL Open Font License, V1.1 + + >>> LaTeX Project Public License v1.3c + + >>> Open Software License 1.1 + + >>> Creative Commons Attribution Share Alike 2.0 Generic + + >>> LDP GENERAL PUBLIC LICENSE v1 + + + +====================PART 1. VIRTUAL APPLIANCE: APPLICATION LAYER ==================== + + +--------------- SECTION 1: Apache License, V2.0 ---------- + +Apache License, V2.0 is applicable to the following component(s). + + +>>> appengine-ca59ef35f409df61fa4a5f8290ff289b37eccfb8 + +Copyright 2015 Google Inc. All rights reserved. +Use of this source code is governed by the Apache 2.0 +license that can be found in the LICENSE file. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-Style + +appengine-ca59ef35f409df61fa4a5f8290ff289b37eccfb8.tar.gz\appengine-ca59ef35f409df61fa4a5f8290ff289b37eccfb8.tar\appengine-ca59ef35f409df61fa4a5f8290ff289b37eccfb8\cmd\aefix\typecheck.go + +Copyright 2011 The Go Authors. All rights reserved. +Use of this source code is governed by a BSD-style +license that can be found in the LICENSE file. + +>>> aws_aws-sdk-go_aws-master + +AWS SDK for Go +Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. +Copyright 2014-2015 Stripe, Inc. +Copyright 2015 James Saryerwinnie + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +ADDITIONAL LICENSE INFORMATION: + +>BSD-2 + +aws-sdk-go-master.tar.gz\aws-sdk-go-master.tar\aws-sdk-go-master\awsmigrate\awsmigrate-renamer\vendor\golang.org\x\tools\LICENSE + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>MIT + +aws-sdk-go-master.tar.gz\aws-sdk-go-master.tar\aws-sdk-go-master\doc-src\aws-godoc\templates\jquery.js + +jQuery v1.8.2 jquery.com | jquery.org/license + +>MIT + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MIT. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +aws-sdk-go-master.tar.gz\aws-sdk-go-master.tar\aws-sdk-go-master\doc-src\aws-godoc\templates\jquery.treeview.js + +http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ +http://docs.jquery.com/Plugins/Treeview + +Copyright (c) 2007 Jörn Zaefferer + +Dual licensed under the MIT and GPL licenses: +http://www.opensource.org/licenses/mit-license.php +http://www.gnu.org/licenses/gpl.html + +>>> coreos_etcd_client-781196fa8746d6c34ace2a62898051af6dc46002 + +CoreOS Project +Copyright 2014 CoreOS, Inc + +This product includes software developed at CoreOS, Inc. +(http://www.coreos.com/). + +Copyright 2016 The etcd Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ADDITIONAL LICENSE INFORMATION: + +> BSD + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\client\cancelreq.go + +Copyright 2015 The Go Authors. All rights reserved. +Use of this source code is governed by a BSD-style +license that can be found in the LICENSE file. + +> MIT + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\beorn7\perks\LICENSE + +Copyright (C) 2013 Blake Mizerany + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +> MIT-Style + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\davecgh\go-spew\spew\dump.go + +Copyright (c) 2013 Dave Collins + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +> BSD-3 Style + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\gogo\protobuf\proto\text_parser.go + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http://github.com/gogo/protobuf + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> BSD-2 Clause + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\gogo\protobuf\proto\text_gogo.go + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http://github.com/gogo/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\prometheus\client_golang\NOTICE + +Prometheus instrumentation library for Go applications +Copyright 2012-2015 The Prometheus Authors + +This product includes software developed at +SoundCloud Ltd. (http://soundcloud.com/). + + +The following components are included in this product: + +perks - a fork of https://github.com/bmizerany/perks +https://github.com/beorn7/perks +Copyright 2013-2015 Blake Mizerany, Björn Rabenstein +See https://github.com/beorn7/perks/blob/master/README.md for license details. + +Go support for Protocol Buffers - Google's data interchange format +http://github.com/golang/protobuf/ +Copyright 2010 The Go Authors +See source code for license details. + +Support for streaming Protocol Buffer messages for the Go language (golang). +https://github.com/matttproud/golang_protobuf_extensions +Copyright 2013 Matt T. Proud +Licensed under the Apache License, Version 2.0 + +> BSD-3 (WITH GOOGLE PATENT) + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\golang.org\x\crypto\LICENSE + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +> LGPL 3.0 (WITH LINKING EXCEPTION) + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\gopkg.in\yaml.v2\LICENSE + +Copyright (c) 2011-2014 - Canonical Inc. + +This software is licensed under the LGPLv3, included below. + +As a special exception to the GNU Lesser General Public License version 3 +("LGPL3"), the copyright holders of this Library give you permission to +convey to a third party a Combined Work that links statically or dynamically +to this Library without providing any Minimal Corresponding Source or +Minimal Application Code as set out in 4d or providing the installation +information set out in section 4e, provided that you comply with the other +provisions of LGPL3 and provided that you meet, for the Application the +terms and conditions of the license(s) which apply to the Application. + +Except as stated in this special exception, the provisions of LGPL3 will +continue to comply in full to this Library. If you modify this Library, you +may apply this exception to your version of this Library, but you are not +obliged to do so. If you do not wish to do so, delete this exception +statement from your version. This exception does not (and cannot) modify any +license terms which apply to the Application, with which you must still +comply. + +>>> coreos_etcd_version-781196fa8746d6c34ace2a62898051af6dc46002 + +CoreOS Project +Copyright 2014 CoreOS, Inc + +This product includes software developed at CoreOS, Inc. +(http://www.coreos.com/). + +Copyright 2016 The etcd Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ADDITIONAL LICENSE INFORMATION: + +> BSD + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\client\cancelreq.go + +Copyright 2015 The Go Authors. All rights reserved. +Use of this source code is governed by a BSD-style +license that can be found in the LICENSE file. + +> MIT + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\beorn7\perks\LICENSE + +Copyright (C) 2013 Blake Mizerany + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +> MIT-Style + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\davecgh\go-spew\spew\dump.go + +Copyright (c) 2013 Dave Collins + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +> BSD-3 Style + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\gogo\protobuf\proto\text_parser.go + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http://github.com/gogo/protobuf + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> BSD-2 Clause + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\gogo\protobuf\proto\text_gogo.go + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http://github.com/gogo/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\github.com\prometheus\client_golang\NOTICE + +Prometheus instrumentation library for Go applications +Copyright 2012-2015 The Prometheus Authors + +This product includes software developed at +SoundCloud Ltd. (http://soundcloud.com/). + + +The following components are included in this product: + +perks - a fork of https://github.com/bmizerany/perks +https://github.com/beorn7/perks +Copyright 2013-2015 Blake Mizerany, Björn Rabenstein +See https://github.com/beorn7/perks/blob/master/README.md for license details. + +Go support for Protocol Buffers - Google's data interchange format +http://github.com/golang/protobuf/ +Copyright 2010 The Go Authors +See source code for license details. + +Support for streaming Protocol Buffer messages for the Go language (golang). +https://github.com/matttproud/golang_protobuf_extensions +Copyright 2013 Matt T. Proud +Licensed under the Apache License, Version 2.0 + +> BSD-3 (WITH GOOGLE PATENT) + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\golang.org\x\crypto\LICENSE + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +> LGPL 3.0 (WITH LINKING EXCEPTION) + +etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar.gz\etcd-781196fa8746d6c34ace2a62898051af6dc46002.tar\etcd-781196fa8746d6c34ace2a62898051af6dc46002\cmd\vendor\gopkg.in\yaml.v2\LICENSE + +Copyright (c) 2011-2014 - Canonical Inc. + +This software is licensed under the LGPLv3, included below. + +As a special exception to the GNU Lesser General Public License version 3 +("LGPL3"), the copyright holders of this Library give you permission to +convey to a third party a Combined Work that links statically or dynamically +to this Library without providing any Minimal Corresponding Source or +Minimal Application Code as set out in 4d or providing the installation +information set out in section 4e, provided that you comply with the other +provisions of LGPL3 and provided that you meet, for the Application the +terms and conditions of the license(s) which apply to the Application. + +Except as stated in this special exception, the provisions of LGPL3 will +continue to comply in full to this Library. If you modify this Library, you +may apply this exception to your version of this Library, but you are not +obliged to do so. If you do not wish to do so, delete this exception +statement from your version. This exception does not (and cannot) modify any +license terms which apply to the Application, with which you must still +comply. + +>>> coreos_go-semver_semver-5e3acbb5668c4c3deb4842615c4098eb61fb6b1e + +Copyright 2013-2015 CoreOS, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> docker_distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc + +Copyright 2012 Gary Burd + +Licensed under the Apache License, Version 2.0 (the "License"): you may +not use this file except in compliance with the License. You may obtain +a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +License for the specific language governing permissions and limitations +under the License. + +ADDITIONAL LICENSE INFORMATION: + + +> MIT + + +distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar.gz\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc\registry\storage\driver\s3-aws\s3_v2_signer.go + + +Copyright (c) 2013 Damien Le Berrigaud and Nick Wade + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + + +> MIT Style + + +distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar.gz\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc\vendor\github.com\bugsnag\osext\LICENSE + + +Copyright (c) 2012 Daniel Theophanes + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. + + + +> LGPL 3.0 (With linking exception) + + +distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar.gz\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc\vendor\github.com\docker\goamz\LICENSE + + +This software is licensed under the LGPLv3, included below. + +As a special exception to the GNU Lesser General Public License version 3 +("LGPL3"), the copyright holders of this Library give you permission to +convey to a third party a Combined Work that links statically or dynamically +to this Library without providing any Minimal Corresponding Source or +Minimal Application Code as set out in 4d or providing the installation +information set out in section 4e, provided that you comply with the other +provisions of LGPL3 and provided that you meet, for the Application the +terms and conditions of the license(s) which apply to the Application. + +Except as stated in this special exception, the provisions of LGPL3 will +continue to comply in full to this Library. If you modify this Library, you +may apply this exception to your version of this Library, but you are not +obliged to do so. If you do not wish to do so, delete this exception +statement from your version. This exception does not (and cannot) modify any +license terms which apply to the Application, with which you must still +comply. + + +> BSD 3 Clause + + +distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar.gz\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc\vendor\golang.org\x\crypto\LICENSE + + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + +> BSD 2 Clause + + +distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar.gz\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc.tar\distribution-28602af35aceda2f8d571bad7ca37a54cf0250bc\vendor\github.com\gorilla\handlers\LICENSE + + +Copyright (c) 2013 The Gorilla Handlers Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> docker_go-events-aa2e3b613fbbfdddbe055a7b9e3ce271cfd83eca + +License: Apache 2.0 + +>>> docker_libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd + +Copyright 2015 CoreOS, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.orglicensesLICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ADDITIONAL LICENSE INFORMATION: + +> BSD 3 Clause + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\client\mflag\LICENSE + +Copyright (c) 2014-2016 The Docker & Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation andor other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> MIT + + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\Godeps\_workspace\src\github.com\armon\go-metrics\LICENSE + +The MIT License (MIT) + +Copyright (c) 2013 Armon Dadgar + +Permission 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, andor sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + + +> WTFPL(MIT Stle) + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\Godeps\_workspace\src\github.com\BurntSushi\toml\COPYING + +DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE +Version 2, December 2004 + +Copyright (C) 2004 Sam Hocevar + +Everyone is permitted to copy and distribute verbatim or modified +copies of this license document, and changing it is allowed as long +as the name is changed. + +DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. You just DO WHAT THE FUCK YOU WANT TO. + +> BSD Style + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\Godeps\_workspace\src\github.com\BurntSushi\toml\type_fields.go + +Copyright 2010 The Go Authors. All rights reserved. +Use of this source code is governed by a BSD-style +license that can be found in the Go distribution. + +> CC-Attribution share alike 4.0 + + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\Godeps\_workspace\src\github.com\docker\go-units\README.md + +Copyright and license + +Copyright © 2015 Docker, Inc. All rights reserved, except as follows. Code +is released under the Apache 2.0 license. The README.md file, and files in the +"docs" folder are licensed under the Creative Commons Attribution 4.0 +International License under the terms and conditions set forth in the file +"LICENSE.docs". You may obtain a duplicate copy of the same license, titled +CC-BY-SA-4.0, at http:creativecommons.orglicensesby4.0. + +> BSD2 Clause + + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\Godeps\_workspace\src\github.com\godbus\dbus\LICENSE + + +Copyright (c) 2013, Georg Reinke (), Google +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation andor other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> MPL2.0 + + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\Godeps\_workspace\src\github.com\hashicorp\consul\LICENSE + +License: MPL2.0 + + +> CC- Attribution 4.0 + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\README.md + +Copyright and license +Code and documentation copyright 2015 Docker, inc. Code released under the Apache 2.0 license. Docs released under Creative commons. + + +> BSD 3 with IP Rights Grant + + +libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar.gz\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd.tar\libnetwork-fd27f22aaa35e3d57f88688f919d05b744f431fd\Godeps\_workspace\src\golang.org\x\net\LICENSE + + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> docker_libtrust-9cbd2a1374f46905c68a4eb3694a130610adc62a + +License : Apache 2.0 + +>>> go-openapi_analysis-d5a75b7d751ca3f11ad5d93cfe97405f2c3f6a47 + +Copyright 2015 go-swagger maintainers + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> go-openapi_errors-fc3f73a224499b047eda7191e5d22e1e9631e86f + +Copyright 2015 go-swagger maintainers + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> go-openapi_jsonpointer-779f45308c19820f1a69e9a4cd965f496e0da10f + +Copyright 2013 sigu-399 ( https:github.com/sigu-399 ) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> go-openapi_jsonreference-36d33bfe519efae5632669801b180bf1a245da3b + +Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> go-openapi_loads-6bb6486231e079ea125c0f39994ed3d0c53399ed + +Copyright 2015 go-swagger maintainers + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http:www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +>>> go-openapi_runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854 + +Copyright 2015 go-swagger maintainers + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854.tar.gz\runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854.tar\runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854\middleware\denco\LICENSE + +Copyright (c) 2014 Naoya Inada + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +> CC-Attribution 4.0 + +runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854.tar.gz\runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854.tar\runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854\internal\testing\data.go + +License name: Creative Commons 4.0 International, +url: http://creativecommons.org/licenses/by/4.0/ + +> BSD-3 clause + +runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854.tar.gz\runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854.tar\runtime-3b13ebb46790d871d74a6c2450fa4b1280f90854\middleware\negotiate_test.go + +Copyright 2013 The Go Authors. All rights reserved. + +Use of this source code is governed by a BSD-style +license that can be found in the LICENSE file or at +https://developers.google.com/open-source/licenses/bsd. + +>>> go-openapi_spec-e072eb2390d3a03736a6eb617d30f48369160447 + +Copyright 2015 go-swagger maintainers + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ADDITIONAL LICENSE INFORMATION: + +> CC-Attribution 4.0 + +spec-e072eb2390d3a03736a6eb617d30f48369160447.tar.gz\spec-e072eb2390d3a03736a6eb617d30f48369160447.tar\spec-e072eb2390d3a03736a6eb617d30f48369160447\fixtures\expansion\invalid-refs.json + +license: +Creative Commons 4.0 International +http://creativecommons.org/licenses/by/4.0/ + +> MIT + +spec-e072eb2390d3a03736a6eb617d30f48369160447.tar.gz\spec-e072eb2390d3a03736a6eb617d30f48369160447.tar\spec-e072eb2390d3a03736a6eb617d30f48369160447\fixtures\expansion\all-the-things.json + +License: MIT + +>>> go-openapi_strfmt-0cb3db44c13bad3b3f567b762a66751972a310cc + +Copyright 2015 go-swagger maintainers + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> go-openapi_swag-96d7b9ebd181a1735a1c9ac87914f2b32fbf56c9 + +Copyright 2015 go-swagger maintainers + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> go-openapi_validate-035dcd74f1f61e83debe1c22950dc53556e7e4b2 + +Copyright 2015 go-swagger maintainers + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> go_compute_metadata-cd0da878c66091060d2e7403abd62192b3e387e0 + +Copyright 2015 go-swagger maintainers + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http:www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +>>> go_internal-cd0da878c66091060d2e7403abd62192b3e387e0 + +Copyright 2016 Google Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> golang_glog-23def4e6c14b4da8ac2ed8007337bc5eb5007998 + +Go support for leveled logs, analogous to https:code.google.compgoogle-glog + +Copyright 2013 Google Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.orglicensesLICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> golang_groupcache_lru-72d04f9fcdec7d3821820cc4a6f150eae553639a + +Copyright 2013 Google Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> govmomi-v0.17.1 + +Copyright (c) 2016 VMware, Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ADDITIONAL LICENSE INFORMATION: + +> MIT- Style + +govmomi-0.17.1.tar.gz\govmomi-0.17.1.tar\govmomi-0.17.1\vendor\github.com\davecgh\go-xdr\LICENSE + +Copyright (c) 2012-2014 Dave Collins + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +> BSD- 3 Clause + +govmomi-0.17.1.tar.gz\govmomi-0.17.1.tar\govmomi-0.17.1\vim25\xml\LICENSE + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> maruel_panicparse_stack-25bcac0d793cf4109483505a0d66e066a3a90a80 + +Copyright 2015 Marc-Antoine Ruel. All rights reserved. +Use of this source code is governed under the Apache License, Version 2.0 +that can be found in the LICENSE file. + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +panicparse-25bcac0d793cf4109483505a0d66e066a3a90a80.tar.gz\panicparse-25bcac0d793cf4109483505a0d66e066a3a90a80.tar\panicparse-25bcac0d793cf4109483505a0d66e066a3a90a80\vendor\github.com\kr\pretty\License + +The MIT License (MIT) + +Copyright 2012 Keith Rarick + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +> BSD-3 Clause + +panicparse-25bcac0d793cf4109483505a0d66e066a3a90a80.tar.gz\panicparse-25bcac0d793cf4109483505a0d66e066a3a90a80.tar\panicparse-25bcac0d793cf4109483505a0d66e066a3a90a80\vendor\github.com\pmezard\go-difflib\LICENSE + +Copyright (c) 2013, Patrick Mezard +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +The names of its contributors may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> oxtoacart/bpool-4e1c5567d7c2dd59fa4c7c83d34c2f3528b025d6 + +Copyright 2014 Percy Wegmann + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> syncutil_singleflight-7ce08ca145dbe0e66a127c447b80ee7914f3e4f9 + +Copyright 2014 The Camlistore Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-Style + +go4-7ce08ca145dbe0e66a127c447b80ee7914f3e4f9.tar.gz\go4-7ce08ca145dbe0e66a127c447b80ee7914f3e4f9.tar\go4-7ce08ca145dbe0e66a127c447b80ee7914f3e4f9\reflectutil\swapper_unsafe_15.go + +Copyright 2016 The Go Authors. All rights reserved. +Use of this source code is governed by a BSD-style +license that can be found in the LICENSE file. + +>>> vdemeester_shakers-24d7f1d6a71aa5d9cbe7390e4afb66b7eef9e1b3 + +License : Apache 2.0 + +>>> vishvananda_netlink-482f7a52b758233521878cb6c5904b6bd63f3457 + +License: Apache 2.0 + +>>> vishvananda_netns-604eaf189ee867d8c147fafc28def2394e878d25 + +Copyright 2014 Vishvananda Ishaya. +Copyright 2014 Docker, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> yaml_v2-4c78c975fe7c825c6d1466c42be594d1d6f3aba6 + +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +ADDITIONAL LICENSE INFORMATION: + + +> MIT + +yaml-4c78c975fe7c825c6d1466c42be594d1d6f3aba6.tar.gz\yaml-4c78c975fe7c825c6d1466c42be594d1d6f3aba6.tar\yaml-4c78c975fe7c825c6d1466c42be594d1d6f3aba6\LICENSE.libyaml + +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original copyright and license: + + apic.go + emitterc.go + parserc.go + readerc.go + scannerc.go + writerc.go + yamlh.go + yamlprivateh.go + +Copyright (c) 2006 Kirill Simonov + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +--------------- SECTION 2: BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES ---------- + +BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES are applicable to the following component(s). + + +>>> agl_ed25519-master + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> airbrake_gobrake_v2-c9d51adc624b5cc4c1bf8de730a09af4878ffe2d + +Copyright (c) 2014 The Gobrake Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> api_compute_v1-dfa61ae24628a06502b9c2805d983b57e89399b5 + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> api_gensupport-dfa61ae24628a06502b9c2805d983b57e89399b5 + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +> Apache 2.0 + +google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5.tar.gz\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5.tar\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5\examples\pubsub.go + +Copyright 2017 Google Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +> BSD + +google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5.tar.gz\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5.tar\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5\examples\mapsengine.go + +Copyright 2014 The Go Authors. All rights reserved. +Use of this source code is governed by a BSD-style +license that can be found in the LICENSE file. + +> MIT + +google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5.tar.gz\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5.tar\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5\googleapi\internal\uritemplates\LICENSE + +Copyright (c) 2013 Joshua Tacoma + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> api_googleapi-dfa61ae24628a06502b9c2805d983b57e89399b5 + +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5.tar.gz\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5(1).tar\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5\googleapi\internal\uritemplates\LICENSE + +Copyright (c) 2013 Joshua Tacoma + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +> Apache 2.0 + +google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5.tar.gz\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5(1).tar\google-api-go-client-dfa61ae24628a06502b9c2805d983b57e89399b5\examples\compute.go + +Copyright 2017 Google Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> armon_go-metrics-f303b03b91d770a11a39677f1d3b55da4002bbcb + +The MIT License (MIT) + +Copyright (c) 2013 Armon Dadgar + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> armon_go-radix-4239b77079c7b5d1243b7b4736304ce8ddb6f0f2 + +The MIT License (MIT) + +Copyright (c) 2014 Armon Dadgar + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> asaskevich_govalidator-9699ab6b38bee2e02cd3fe8b99ecf67665395c96 + +The MIT License (MIT) + +Copyright (c) 2014 Alex Saskevich + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> azure_go-ansiterm-70b2c90b260171e829f1ebd7c17f600c11858dbe + +The MIT License (MIT) + +Copyright (c) 2015 Microsoft Corporation + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +>>> boltdb_bolt-b514920f8f2e0a68f857e5a12c774f385a59aef9 + +The MIT License (MIT) + +Copyright (c) 2013 Ben Johnson + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> cenkalti_backoff-b02f2bbce11d7ea6b97f282ef1771b0fe2f65ef3 + +The MIT License (MIT) + +Copyright (c) 2014 Cenk Alti + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> client9_misspell-9a1fc2456ac9e8c9b4cbe9d005b6e7adac0d357f + +The MIT License (MIT) + +Copyright (c) 2015-2016 Nick Galbreath + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +ADDITIONAL LICENSE INFORMATION: + +> BSD-3 Clause + +misspell-9a1fc2456ac9e8c9b4cbe9d005b6e7adac0d357f.tar.gz\misspell-9a1fc2456ac9e8c9b4cbe9d005b6e7adac0d357f.tar\misspell-9a1fc2456ac9e8c9b4cbe9d005b6e7adac0d357f\stringreplacer\LICENSE + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> codegangsta/inject-33e0aa1cb7c019ccc3fbe049a8262a6403d30504 + +The MIT License (MIT) + +Copyright (c) 2013 Jeremy Saenz + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> codegangsta_cli-master + +MIT License + +Copyright (c) 2016 Jeremy Saenz & Contributors + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> cpuguy83_go-md2man_md2man-a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa + +The MIT License (MIT) + +Copyright (c) 2014 Brian Goff + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-2 + +go-md2man-a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa.tar.gz\go-md2man-a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa.tar\go-md2man-a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa\vendor\github.com\russross\blackfriday\LICENSE.txt + +Copyright © 2011 Russ Ross +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided with +the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +>>> d2g_dhcp4-f0e4d29ff0231dce36e250b2ed9ff08412584bca + +Copyright (c) 2013 Skagerrak Software Limited. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Skagerrak Software Limited nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> deckarep_golang-set-1f0f4ff8d3fbef9328522993ce71c35890f67554 + +Open Source Initiative OSI - The MIT License (MIT):Licensing + +The MIT License (MIT) +Copyright (c) 2013 Ralph Caraveo (deckarep@gmail.com) + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> dustin_go-humanize-259d2a102b871d17f30e3cd9881a642961a1e486 + +Copyright (c) 2005-2008 Dustin Sallings + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + + + +>>> gemnasium_logrus-airbrake-hook_v2-31e6fd4bd5a98d8ee7673d24bc54ec73c31810dd + +The MIT License (MIT) + +Copyright (c) 2015 Gemnasium + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +>>> gizak_termui-798ffb9cbbe4073ef1f88e6069ca4a2c6aa6676b + +The MIT License (MIT) + +Copyright (c) 2015 Zack Guo + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> go-check_check-20d25e2804050c1cd24a7eea1e7a6447dd0e74ec + +Gocheck - A rich testing framework for Go + +Copyright (c) 2010-2013 Gustavo Niemeyer + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +> BSD 3 + +check-20d25e2804050c1cd24a7eea1e7a6447dd0e74ec.tar.gz\check-20d25e2804050c1cd24a7eea1e7a6447dd0e74ec.tar\check-20d25e2804050c1cd24a7eea1e7a6447dd0e74ec\benchmark.go + + Copyright (c) 2012 The Go Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> go-martini/martini-22fa46961aabd2665cf3f1343b146d20028f5071 + +The MIT License (MIT) + +Copyright (c) 2015 Jeremy Saenz + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> go-nfs-client-42fca177a36031d648551c751de1daf5f55dd4f0 + +Go-nfs-client version 0.1 + +Copyright © 2017 VMware, Inc. All rights reserved + +The BSD-2 license (the “License”) set forth below applies to all parts of the Go-nfs-client +project. You may not use this file except in compliance with the License. + +BSD-2 License + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +• Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +• Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +> Apache 2.0 + +go-nfs-client-42fca177a36031d648551c751de1daf5f55dd4f0.tar.gz\go-nfs-client-42fca177a36031d648551c751de1daf5f55dd4f0.tar\go-nfs-client-42fca177a36031d648551c751de1daf5f55dd4f0\nfs\util\log.go + + +Copyright © 2017 VMware, Inc. All Rights Reserved. +SPDX-License-Identifier: BSD-2-Clause + +Copyright 2016 VMware, Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> godbus_dbus-230e4b23db2fd81c53eaa0073f76659d4849ce51 + +Copyright (c) 2013, Georg Reinke (), Google +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gogo_protobuf_gogoproto-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + +Protocol Buffers for Go with Gadgets + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http:github.com/gogo/protobuf + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https:github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +> BSD 2 + +protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar.gz\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7\vanity\test\proto3.proto + + Protocol Buffers for Go with Gadgets + + Copyright (c) 2015, The GoGo Authors. All rights reserved. + http:github.com/gogo/protobuf + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gogo_protobuf_proto-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + +Protocol Buffers for Go with Gadgets + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http://github.com/gogo/protobuf + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-2 + +protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar.gz\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7\plugin\compare\compare.go + +Protocol Buffers for Go with Gadgets + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http:github.com/gogo/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gogo_protobuf_protoc-gen-gogo_descriptor-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + +Protocol Buffers for Go with Gadgets + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http:github.com/gogo/protobuf + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https:github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +> BSD-2 clause + +protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar.gz\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7\codec\codec.go + +Copyright (c) 2015, The GoGo Authors. All rights reserved. +http:github.com/gogo/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gogo_protobuf_sortkeys-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + +Protocol Buffers for Go with Gadgets + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http://github.com/gogo/protobuf + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICNSE INFORMATION : + +> BSD-2 + +protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar.gz\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7\codec\codec.go + +Copyright (c) 2015, The GoGo Authors. All rights reserved. +http:github.com/gogo/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gogo_protobuf_types-6a92c871a8f5333cf106b2cdf937567208dbb2b7 + +Protocol Buffers for Go with Gadgets + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http://github.com/gogo/protobuf + +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-2 + +protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar.gz\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7.tar\protobuf-6a92c871a8f5333cf106b2cdf937567208dbb2b7\plugin\compare\compare.go + +Protocol Buffers for Go with Gadgets + +Copyright (c) 2013, The GoGo Authors. All rights reserved. +http:github.com/gogo/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> goji/param-d7f49fd7d1ed53fd562e737a8b5bbcc7e3d925e2 + +Copyright (c) 2014, 2015 Carl Jackson (carl@avtok.com) + +MIT License + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> golang_lint-cb00e5669539f047b2f4c53a421a01b0c8e172c6 + +Copyright (c) 2013 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> google_go-github_github-7a51fb928f52a196d5f31daefb8a489453ef54ff + +Copyright (c) 2013 The go-github AUTHORS. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------- + +Some documentation is taken from the GitHub Developer site +, which is available under the following Creative +Commons Attribution 3.0 License. This applies only to the go-github source +code and would not apply to any compiled binaries. + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + e. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + f. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + g. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + h. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + i. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(b), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(b), as requested. + b. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4 (b) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + c. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at http://creativecommons.org/. + +>>> google_go-querystring_query-53e6ce116135b80d037921a7fdd5138cf32d7a8a + +Copyright (c) 2013 Google. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> google_uuid-f3f4b54b2fabcf1f11dcc939025bb0c109b00ed8 + +Copyright (c) 2009,2014 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD Style + +uuid-f3f4b54b2fabcf1f11dcc939025bb0c109b00ed8.tar.gz\uuid-f3f4b54b2fabcf1f11dcc939025bb0c109b00ed8.tar\uuid-f3f4b54b2fabcf1f11dcc939025bb0c109b00ed8\dce.go + +Copyright 2016 Google Inc. All rights reserved. +Use of this source code is governed by a BSD-style +license that can be found in the LICENSE file. + +>>> googleapis_gax-go-da06d194a00e19ce00d9011a13931c3f6f6887c7 + +Copyright 2016, Google Inc. +All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gorilla_context-1c83b3eabd45b6d76072b66b746c20815fb2872d + +Copyright (c) 2012 Rodrigo Moraes. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gorilla_mux-acf3be1b335c8ce30b2c8d51300984666f0ceefa + +Copyright (c) 2012 Rodrigo Moraes. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gorilla_securecookie-fa5329f913702981df43dcb2a380bac429c810b5 + +Copyright (c) 2012 Rodrigo Moraes. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gorilla_sessions-ca9ada44574153444b00d3fd9c8559e4cc95f896 + +Copyright (c) 2012 Rodrigo Moraes. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> gorilla_websocket-a91eba7f97777409bc2c443f5534d41dd20c5720 + +Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> graylog2_go-gelf_gelf-master + +Copyright 2012 SocialCode + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +>>> grpc-b1a2821ca5a4fd6b6e48ddfbb7d6d7584d839d21 + +Copyright 2014, Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the gRPC project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of gRPC, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of gRPC. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of gRPC or any code incorporated within this +implementation of gRPC constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of gRPC +shall terminate as of the date such litigation is filed. + +>>> hpcloud_tail-a30252cb686a21eb2d0b98132633053ec2f7f1e5 + +The MIT License (MIT) + +© Copyright 2015 Hewlett Packard Enterprise Development LP +Copyright (c) 2014 ActiveState + +Permission 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: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +ADDITIONAL LICENSE INFORMATION: + +> BSD-3 clause + +tail-a30252cb686a21eb2d0b98132633053ec2f7f1e5.tar.gz\tail-a30252cb686a21eb2d0b98132633053ec2f7f1e5.tar\tail-a30252cb686a21eb2d0b98132633053ec2f7f1e5\vendor\gopkg.in\fsnotify.v1\LICENSE + +Copyright (c) 2012 The Go Authors. All rights reserved. +Copyright (c) 2012 fsnotify Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> jessevdk_go-flags-97448c91aac742cbca3d020b3e769013a420a06f + +Copyright (c) 2012 Jesse van den Kieboom. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> julienschmidt/httprouter-975b5c4c7c21c0e3d2764200bf2aa8e34657ae6e + +Copyright (c) 2013 Julien Schmidt. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +The names of the contributors may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL JULIEN SCHMIDT BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> justinas/alice-1051eaf52fcafdd87ead59d28b065f1fcb8274ec + +The MIT License (MIT) + +Copyright (c) 2014 Justinas Stankevicius + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> kr_pty-f7ee69f31298ecbe5d2b349c711e2547a617d398 + +Copyright (c) 2011 Keith Rarick + +Permission 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: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE 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. + +>>> mailru_easyjson-99e922cf9de1bc0ab38310c277cff32c2147e747 + +Copyright (c) 2016 Mail.Ru Group + +Permission 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: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE 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. + +>>> martini-contrib/render-ec18f8345a1181146728238980606fb1d6f40e8c + +The MIT License (MIT) + +Copyright (c) 2013 Jeremy Saenz + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> matryer_resync-d39c09a11215c84aab0b65e323fc47dd6e276af1 + +The MIT License (MIT) + +Copyright (c) 2016 Mat Ryer + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> mattn_go-runewidth-14207d285c6c197daabb5c9793d63e7af9ab2d50 + +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> mdlayher/arp-7140e8e22da120cb3efc8e1096f299933624024e + +MIT License +=========== + +Copyright (C) 2015 Matt Layher + +Permission 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: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE 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. + +ADDITIONAL LICENSE INFORMATION: + +> BSD-3 Clause + +arp-master.zip\arp-master\client.go + +Copyright (c) 2012 The Go Authors. All rights reserved. +Source code in this file is based on src/net/interface_linux.go, +from the Go standard library. The Go license can be found here: +https://golang.org/LICENSE. + +>>> mdlayher/ethernet-e72cf8343052938936194daba1914fd1bb33d2fe + +MIT License +=========== + +Copyright (C) 2015 Matt Layher + +Permission 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: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE 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. + +>>> mdlayher/raw-c83864e487652c25edc58048eafdc1dfa2f142c7 + +MIT License +=========== + +Copyright (C) 2015 Matt Layher + +Permission 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: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE 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. + +ADDITIONAL LICENSE INFORMATION: + +> BSD- 3 Clause + +raw-master.zip\raw-master\raw.go + +Copyright (c) 2012 The Go Authors. All rights reserved. +Source code in this file is based on src/net/interface_linux.go, +from the Go standard library. The Go license can be found here: +https://golang.org/LICENSE. + +>>> microsoft_go-winio-24a3e3d3fc7451805e09d11e11e95d9a0a4f205e + +The MIT License (MIT) + +Copyright (c) 2015 Microsoft + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +ADDITIONAL LICENSE INFORMATION: + +> BSD-Style + +go-winio-24a3e3d3fc7451805e09d11e11e95d9a0a4f205e.tar.gz\go-winio-24a3e3d3fc7451805e09d11e11e95d9a0a4f205e.tar\go-winio-24a3e3d3fc7451805e09d11e11e95d9a0a4f205e\archive\tar\LICENSE + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> microsoft_hcsshim-d327ca738085de7d617aa1df16d98fe7a64c2455 + +The MIT License (MIT) + +Copyright (c) 2015 Microsoft + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> miekg_dns-ca336a1f95a6b89be9c250df26c7a41742eb4a6f + +Extensions of the original work are copyright (c) 2011 Miek Gieben + +As this is fork of the official Go code the same license applies: + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> mitchellh_go-wordwrap-ad45545899c7b13c020ea92b2072220eefad42b8 + +The MIT License (MIT) + +Copyright (c) 2014 Mitchell Hashimoto + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +>>> mitchellh_mapstructure-5a0325d7fafaac12dda6e7fb8bd222ec1b69875e + +The MIT License (MIT) + +Copyright (c) 2013 Mitchell Hashimoto + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +>>> mreiferson_go-httpclient-31f0106b4474f14bc441575c19d3a5fa21aa1f6c + +The MIT License (MIT) + +Copyright (c) 2012 Matt Reiferson + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +>>> naoina_denco-9af2ba0e24214bac003821f4a501b131b2e04c75 + +Copyright (c) 2014 Naoya Inada + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +>>> nlopes_slack-f243c7602fdf906248fc1f165284daa4e4d2d09e + +Copyright (c) 2015, Norberto Lopes +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> nsf_termbox-go-91bae1bb5fa9ee504905ecbe7043fa30e92feaa3 + +Copyright (C) 2012 termbox-go authors + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +>>> opennota_urlesc-5fa9ff0392746aeae1c4b37fcc42c65afa7a9587 + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> pkg_profile-8a808a6967b79da66deacfe508b26d398a69518f + +Copyright (c) 2013 Dave Cheney. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> puerkitobio_purell-d69616f51cdfcd7514d6a380847a152dfc2a749d + +Copyright (c) 2012, Martin Angers +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> racksec_srslog-a974ba6f7fb527d2ddc73ee9c05d3e2ccc0af0dc + +Copyright (c) 2015 Rackspace. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> rs/cors-8dd4211afb5d08dbb39a533b9bb9e4b486351df6 + +Copyright (c) 2014 Olivier Poitrey + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> ryanuber_go-glob-256dc444b735e061061cf46c809487313d5b0065 + +The MIT License (MIT) + +Copyright (c) 2014 Ryan Uber + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> sirupsen_logrus-d26492970760ca5d33129d2d799e34be5c4782eb + +The MIT License (MIT) + +Copyright (c) 2014 Simon Eskildsen + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +ADDITIONAL LICENSE INFORMATION: + +>BSD – Style + +logrus-master.zip\logrus-master\terminal_notwindows.go + +Copyright 2011 The Go Authors. All rights reserved. +Use of this source code is governed by a BSD-style +license that can be found in the LICENSE file. + +>>> smartystreets_assertions-287b4346dc4e71a038c346375a9d572453bc469b + +Copyright (c) 2015 SmartyStreets, LLC + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +NOTE: Various optional and subordinate components carry their own licensing +requirements and restrictions. Use of those components is subject to the terms +and conditions outlined the respective license of each component. + +ADDITIONAL LICENSE INFORMATION: + +> Apache 2.0 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\reqtrace\reqtrace.go + + Copyright 2015 Google Inc. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http:www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +> BSD 3 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\go-render\LICENSE + + Copyright (c) 2015 The Chromium Authors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> smartystreets_assertions_internal_oglematchers-287b4346dc4e71a038c346375a9d572453bc469b + +Copyright (c) 2015 SmartyStreets, LLC + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +NOTE: Various optional and subordinate components carry their own licensing +requirements and restrictions. Use of those components is subject to the terms +and conditions outlined the respective license of each component. + + +ADDITIONAL LICENSE INFORMATION: + +> Apache 2.0 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\reqtrace\reqtrace.go + +Copyright 2015 Google Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +> BSD-3 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\go-render\LICENSE + +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> smartystreets_assertions_internal_oglemock-287b4346dc4e71a038c346375a9d572453bc469b + +Copyright (c) 2015 SmartyStreets, LLC + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +NOTE: Various optional and subordinate components carry their own licensing +requirements and restrictions. Use of those components is subject to the terms +and conditions outlined the respective license of each component. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-3 Clause + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\go-render\LICENSE + + +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> Apache 2.0 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\oglematchers\all_of.go + +Copyright 2011 Aaron Jacobs. All Rights Reserved. +Author: aaronjjacobs@gmail.com (Aaron Jacobs) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> smartystreets_assertions_internal_ogletest-287b4346dc4e71a038c346375a9d572453bc469b + +Copyright (c) 2015 SmartyStreets, LLC + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +NOTE: Various optional and subordinate components carry their own licensing +requirements and restrictions. Use of those components is subject to the terms +and conditions outlined the respective license of each component. + + +ADDITIONAL LICENSE INFORMATION: + +> Apache 2.0 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\reqtrace\reqtrace.go + +Copyright 2015 Google Inc. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +> BSD-3 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\go-render\LICENSE + +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> smartystreets_assertions_internal_reqtrace-287b4346dc4e71a038c346375a9d572453bc469b + +Copyright (c) 2015 SmartyStreets, LLC + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +NOTE: Various optional and subordinate components carry their own licensing +requirements and restrictions. Use of those components is subject to the terms +and conditions outlined the respective license of each component. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-3 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\go-render\LICENSE + +Copyright (c) 2015 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> Apache 2.0 + +assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar.gz\assertions-287b4346dc4e71a038c346375a9d572453bc469b.tar\assertions-287b4346dc4e71a038c346375a9d572453bc469b\internal\oglematchers\transform_description.go + +Copyright 2011 Aaron Jacobs. All Rights Reserved. +Author: aaronjjacobs@gmail.com (Aaron Jacobs) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> stretchr_objx-1a9d0bb9f541897e62256577b352fdbc1fb4fd94 + +objx - by Mat Ryer and Tyler Bunnell + +The MIT License (MIT) + +Copyright (c) 2014 Stretchr, Inc. + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> tomb_v1-dd632973f1e7218eb1089048e0798ec9ae7dceb8 + +tomb - support for clean goroutine termination in Go. + +Copyright (c) 2010-2011 - Gustavo Niemeyer + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> tylerb/graceful.v1-4654dfbb6ad53cb5e27f37d99b02e16c1872fbbb + +The MIT License (MIT) + +Copyright (c) 2014 Tyler Bunnell + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + + +ADDITIONAL LICENSE INFORMATION: + +> Apache 2.0 + +graceful-1.2.15.zip\graceful-1.2.15\limit_listen.go + + +Copyright 2013 The etcd Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> tylerb_graceful-d7d7a205e779a4738d38eda0671fff8bfc965f14 + +The MIT License (MIT) + +Copyright (c) 2014 Tyler Bunnell + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + + +ADDITIONAL LICENSE INFORMATION: + + + +> Apache 2.0 + + +graceful-d7d7a205e779a4738d38eda0671fff8bfc965f14.tar.gz\graceful-d7d7a205e779a4738d38eda0671fff8bfc965f14.tar\graceful-d7d7a205e779a4738d38eda0671fff8bfc965f14\limit_listen.go + + +Copyright 2013 The etcd Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http:www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>>> ugorji_go_codec-708a42d246822952f38190a8d8c4e6b16a0e600c + +The MIT License (MIT) + +Copyright (c) 2012-2015 Ugorji Nwoke. +All rights reserved. + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> urfave/negroni-ccc4a14984828dcb944e6f17fa4a967b18624f2b + +The MIT License (MIT) + +Copyright (c) 2014 Jeremy Saenz + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> urfave_cli_v1-0bdeddeeb0f650497d603c4ad7b20cfe685682f6 + +MIT License + +Copyright (c) 2016 Jeremy Saenz & Contributors + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +>>> x_crypto_acme-728b753d0135da6801d45a38e6f43ff55779c5c2 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\pkcs12\internal\rc2\rc2.go + +This code is licensed under the MIT license. + +>>> x_crypto_curve25519-728b753d0135da6801d45a38e6f43ff55779c5c2 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + +ADDITIONAL LICENSE INFORMATION: + +> Public Domain + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\curve25519\square_amd64.s + +This code was translated into a form compatible with 6a from the public +domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + + +> MIT + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\pkcs12\internal\rc2\rc2.go + +https://www.ietf.org/rfc/rfc2268.txt +http://people.csail.mit.edu/rivest/pubs/KRRR98.pdf + +This code is licensed under the MIT license. + +>>> x_crypto_ed25519-728b753d0135da6801d45a38e6f43ff55779c5c2 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\pkcs12\internal\rc2\rc2.go + +This code is licensed under the MIT license. + + +> PUBLIC DOMAIN + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\twofish\twofish.go + +This code is a port of the LibTom C implementation. +See http://libtom.org/?page=features&newsitems=5&whatfile=crypt. +LibTomCrypt is free for all purposes under the public domain. +It was heavily inspired by the go blowfish package. + +>>> x_crypto_nacl_secretbox-728b753d0135da6801d45a38e6f43ff55779c5c2 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\pkcs12\internal\rc2\rc2.go + +This code is licensed under the MIT license. + +>>> x_crypto_poly1305-728b753d0135da6801d45a38e6f43ff55779c5c2 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + +ADDITIONAL LICENSE INFORMATION: + +> Public Domain + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\curve25519\square_amd64.s + +This code was translated into a form compatible with 6a from the public +domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + + +> MIT + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\pkcs12\internal\rc2\rc2.go + +https://www.ietf.org/rfc/rfc2268.txt +http://people.csail.mit.edu/rivest/pubs/KRRR98.pdf + +This code is licensed under the MIT license. + +>>> x_crypto_salsa20_salsa-728b753d0135da6801d45a38e6f43ff55779c5c2 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + + +ADDITIONAL LICENSE INFORMATION: + + +> Public Domain + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\ed25519\internal\edwards25519\const.go + + +These values are from the public domain + +>>> x_crypto_ssh-728b753d0135da6801d45a38e6f43ff55779c5c2 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + +ADDITIONAL LICENSE INFORMATION: + +> Public Domain + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\curve25519\square_amd64.s + +This code was translated into a form compatible with 6a from the public +domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html + + +> MIT + +crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar.gz\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2.tar\crypto-728b753d0135da6801d45a38e6f43ff55779c5c2\pkcs12\internal\rc2\rc2.go + +https://www.ietf.org/rfc/rfc2268.txt +http://people.csail.mit.edu/rivest/pubs/KRRR98.pdf + +This code is licensed under the MIT license. + +>>> x_net_context-a6577fac2d73be281a500b310739095313165611 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + + +ADDITIONAL LICENSE INFORMATION: + + +> BSD 2 Clause + +net-a6577fac2d73be281a500b310739095313165611.tar.gz\net-a6577fac2d73be281a500b310739095313165611.tar\net-a6577fac2d73be281a500b310739095313165611\html\testdata\webkit\README + + +The *.dat files in this directory are copied from The WebKit Open Source +Project, specifically $WEBKITROOT/LayoutTests/html5lib/resources. +WebKit is licensed under a BSD style license. +http://webkit.org/coding/bsd-license.html says: + +Copyright (C) 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> x_net_http2-a6577fac2d73be281a500b310739095313165611 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + + +ADDITIONAL LICENSE INFORMATION: + +> BSD2 + +net-a6577fac2d73be281a500b310739095313165611.tar.gz\net-a6577fac2d73be281a500b310739095313165611.tar\net-a6577fac2d73be281a500b310739095313165611\html\testdata\webkit\README + +Copyright (C) 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> x_net_idna-a6577fac2d73be281a500b310739095313165611 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +ADDITIONAL LICENSE INFORMATION: + +> W3C 3-clause BSD License + +net-a6577fac2d73be281a500b310739095313165611.tar.gz\net-a6577fac2d73be281a500b310739095313165611.tar\net-a6577fac2d73be281a500b310739095313165611\html\charset\testdata\README + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE W3C 3-clause BSD License. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +These test cases come from +http://www.w3.org/International/tests/repository/html5/the-input-byte-stream/results-basics + +Distributed under both the W3C Test Suite License +(http://www.w3.org/Consortium/Legal/2008/04-testsuite-license) +and the W3C 3-clause BSD License +(http://www.w3.org/Consortium/Legal/2008/03-bsd-license). +To contribute to a W3C Test Suite, see the policies and contribution +forms (http://www.w3.org/2004/10/27-testcases). + +> BSD-2 clause + +net-a6577fac2d73be281a500b310739095313165611.tar.gz\net-a6577fac2d73be281a500b310739095313165611.tar\net-a6577fac2d73be281a500b310739095313165611\html\testdata\webkit\README + +The *.dat files in this directory are copied from The WebKit Open Source +Project, specifically $WEBKITROOT/LayoutTests/html5lib/resources. +WebKit is licensed under a BSD style license. +http://webkit.org/coding/bsd-license.html says: + +Copyright (C) 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> x_net_internal_timeseries-a6577fac2d73be281a500b310739095313165611 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-2 + +net-a6577fac2d73be281a500b310739095313165611.tar.gz\net-a6577fac2d73be281a500b310739095313165611.tar\net-a6577fac2d73be281a500b310739095313165611\html\testdata\webkit\README + +The *.dat files in this directory are copied from The WebKit Open Source +Project, specifically $WEBKITROOT/LayoutTests/html5lib/resources. +WebKit is licensed under a BSD style license. +http://webkit.org/coding/bsd-license.html says: + +Copyright (C) 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> x_net_lex_httplex-a6577fac2d73be281a500b310739095313165611 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> x_net_proxy-a6577fac2d73be281a500b310739095313165611 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-2 + +net-a6577fac2d73be281a500b310739095313165611.tar.gz\net-a6577fac2d73be281a500b310739095313165611.tar\net-a6577fac2d73be281a500b310739095313165611\html\testdata\webkit\README + +The *.dat files in this directory are copied from The WebKit Open Source +Project, specifically $WEBKITROOT/LayoutTests/html5lib/resources. +WebKit is licensed under a BSD style license. +http://webkit.org/coding/bsd-license.html says: + +Copyright (C) 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> x_net_trace-a6577fac2d73be281a500b310739095313165611 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> x_net_websocket-a6577fac2d73be281a500b310739095313165611 + +License: BSD-3 clause with Google Patents + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +ADDITIONAL LICENSE INFORMATION: + +> BSD-2 clause + +net-a6577fac2d73be281a500b310739095313165611.tar.gz\net-a6577fac2d73be281a500b310739095313165611.tar\net-a6577fac2d73be281a500b310739095313165611\html\testdata\webkit\README + +Copyright (C) 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> x_oauth2-1611bb46e67abc64a71ecc5c3ae67f1cbbc2b921 + +Copyright (c) 2009 The oauth2 Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>>> x_sync_singleflight-5a06fca2c336a4b2b2fcb45702e8c47621b2aa2c + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> x_sys_unix-99f16d856c9836c42d24e7ab64ea72916925fa97 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> x_sys_windows-99f16d856c9836c42d24e7ab64ea72916925fa97 + +License: BSD-3 clause with Google Patents + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> x_text_internal-f28f36722d5ef2f9655ad3de1f248e3e52ad5ebd + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> x_text_language-f28f36722d5ef2f9655ad3de1f248e3e52ad5ebd + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> x_text_message-f28f36722d5ef2f9655ad3de1f248e3e52ad5ebd + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +>>> x_tools_go_ast_astutil-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\cmd\goyacc\yacc.go + + Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. + Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) + Portions Copyright © 1997-1999 Vita Nuova Limited + Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com) + Portions Copyright © 2004,2006 Bruce Ellis + Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) + Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others + Portions Copyright © 2009 The Go Authors. All rights reserved. + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + + +> MIT + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\godoc\static\jquery.treeview.js + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MIT LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright (c) 2007 Jörn Zaefferer + +Dual licensed under the MIT and GPL licenses: +http://www.opensource.org/licenses/mit-license.php +http://www.gnu.org/licenses/gpl.html + + +> Apache 2.0 + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\third_party\typescript\typescript.js + +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. + +>>> x_tools_go_buildutil-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + +License: BSD-3 clause with Google Patents + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\third_party\moduleloader\ + +Copyright (c) 2013-2016 Guy Bedford, Luke Hoban, Addy Osmani + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +> Apache 2.0 + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\third_party\typescript\typescript.js + +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. + +>>> x_tools_go_gcexportdata-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\cmd\goyacc\yacc.go + + Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. + Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) + Portions Copyright © 1997-1999 Vita Nuova Limited + Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com) + Portions Copyright © 2004,2006 Bruce Ellis + Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) + Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others + Portions Copyright © 2009 The Go Authors. All rights reserved. + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + + +> MIT + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\godoc\static\jquery.treeview.js + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MIT LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright (c) 2007 Jörn Zaefferer + +Dual licensed under the MIT and GPL licenses: +http://www.opensource.org/licenses/mit-license.php +http://www.gnu.org/licenses/gpl.html + + +> Apache 2.0 + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\third_party\typescript\typescript.js + +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. + +>>> x_tools_go_gcimporter15-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +* Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + +> MIT + + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\cmd\goyacc\yacc.go + + +Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. +Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) +Portions Copyright © 1997-1999 Vita Nuova Limited +Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com) +Portions Copyright © 2004,2006 Bruce Ellis +Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) +Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others +Portions Copyright © 2009 The Go Authors. All rights reserved. + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + + +> CC Attribution 3.0 + + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\cmd\present\templates\dir.tmpl + + +Except as noted, +the content of this page is licensed under the +Creative Commons Attribution 3.0 License, +and code is licensed under a BSD license.
    +Terms of Service | +Privacy Policy + + + +> BSD + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\cmd\present\templates\dir.tmpl + +code is licensed under a BSD license.
    +Terms of Service | +Privacy Policy + + + +> Apache 2.0 + + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\godoc\short\short.go + + +Copyright 2015 The Go Authors. All rights reserved. +Use of this source code is governed by the Apache 2.0 +license that can be found in the LICENSE file. + ++build appengine + +Package short implements a simple URL shortener, serving an administrative +interface at /s and shortened urls from /s/key. +It is designed to run only on the instance of godoc that serves golang.org. +package short + + +> MIT + + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\godoc\static\jquery.treeview.js + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MIT LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + + +Copyright (c) 2007 Jörn Zaefferer + +Dual licensed under the MIT and GPL licenses: +http://www.opensource.org/licenses/mit-license.php +http://www.gnu.org/licenses/gpl.html + +>>> x_tools_go_loader-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + + + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\cmd\goyacc\yacc.go + + Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved. + Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net) + Portions Copyright © 1997-1999 Vita Nuova Limited + Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com) + Portions Copyright © 2004,2006 Bruce Ellis + Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net) + Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others + Portions Copyright © 2009 The Go Authors. All rights reserved. + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + + +> MIT + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\godoc\static\jquery.treeview.js + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MIT LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright (c) 2007 Jörn Zaefferer + +Dual licensed under the MIT and GPL licenses: +http://www.opensource.org/licenses/mit-license.php +http://www.gnu.org/licenses/gpl.html + + +> Apache 2.0 + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\third_party\typescript\typescript.js + +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. + +>>> x_tools_imports-381149a2d6e5d8f319ccf04bfefc71e03a78b868 + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +ADDITIONAL LICENSE INFORMATION: + + +> Apache 2.0 + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\third_party\typescript\typescript.js + +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. + +> MIT + +tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar.gz\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868.tar\tools-381149a2d6e5d8f319ccf04bfefc71e03a78b868\third_party\moduleloader\LICENSE + +Copyright (c) 2013-2016 Guy Bedford, Luke Hoban, Addy Osmani + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +>>> zenazn/goji-c05078ca81941f8e801bba3ddc0e6b86b7fdc893 + +Copyright (c) 2014, 2015, 2016 Carl Jackson (carl@avtok.com) + +MIT License + +Permission 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: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE 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. + +--------------- SECTION 3: Mozilla Public License, V2.0 ---------- + +Mozilla Public License, V2.0 is applicable to the following component(s). + + +>>> d2g_dhcp4client-master + +LICENSE: MPL 2.0 + +>>> hashicorp_go-cleanhttp-875fb671b3ddc66f8e2f0acc33829c8cb989a38d + +LICENSE: MPL 2.0 + +>>> hashicorp_memberlist-cef12ad58224d55cf26caa9e3d239c2fcb3432a2 + +License: MPL 2.0 + +====================PART 2. VIRTUAL APPLIANCE: OPERATING SYSTEM LAYER ==================== + + +--------------- SECTION 1: Academic Free License, V2.1 ---------- + +Academic Free License, V2.1 is applicable to the following component(s). + + +>>> dbus-1.11.12-1.ph2 + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE AFL 2.1 LICENSE. PLEASE SEE APPENDIX FOR THE FULL TEXT OF THE AFL 2.1 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +D-Bus is licensed to you under your choice of the Academic Free +License version 2.1, or the GNU General Public License version 2 +(or, at your option any later version). + +Both licenses are included here. Some of the standalone binaries are +under the GPL only; in particular, but not limited to, +tools/dbus-cleanup-sockets.c and test/decode-gcov.c. Each source code +file is marked with the proper copyright information - if you find a +file that isn't marked please bring it to our attention. + + +ADDITIONAL LICENSE INFORMATION: + +> BSD-3 + +dbus-1.11.12.tar.gz\dbus-1.11.12.tar\dbus-1.11.12\cmake\modules\COPYING-CMAKE-SCRIPTS + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +> Sun Microsystems License (MIT-Style) + +dbus-1.11.12.tar.gz\dbus-1.11.12.tar\dbus-1.11.12\dbus\dbus-hash.c + +Copyright (c) 1991-1993 The Regents of the University of California. +Copyright (c) 1994 Sun Microsystems, Inc. + +This software is copyrighted by the Regents of the University of +California, Sun Microsystems, Inc., Scriptics Corporation, and +other parties. The following terms apply to all files associated +with the software unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, +distribute, and license this software and its documentation for any +purpose, provided that existing copyright notices are retained in +all copies and that this notice is included verbatim in any +distributions. No written agreement, license, or royalty fee is +required for any of the authorized uses. Modifications to this +software may be copyrighted by their authors and need not follow +the licensing terms described here, provided that the new terms are +clearly indicated on the first page of each file where they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY +PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, +OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND +NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, +AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE +MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, +the software shall be classified as "Commercial Computer Software" +and the Government shall have only "Restricted Rights" as defined +in Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the +foregoing, the authors grant the U.S. Government and others acting +in its behalf permission to use and distribute the software in +accordance with the terms specified in this license. + + +> MIT + +dbus-1.11.12.tar.gz\dbus-1.11.12.tar\dbus-1.11.12\dbus\dbus-server-launchd.c + +Copyright (C) 2007, Tanner Lovelace +Copyright (C) 2008, Colin Walters +Copyright (C) 2008-2009, Benjamin Reed +Copyright (C) 2009, Jonas Bähr + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + + +> GPL 2.0 + +dbus-1.11.12.tar.gz\dbus-1.11.12.tar\dbus-1.11.12\doc\introspect.dtd + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE GPL 2.0 LICENSE. PLEASE SEE APPENDIX FOR THE FULL TEXT OF THE GPL 2.0 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +(C) 2005-02-02 David A. Wheeler; released under the D-Bus licenses, +GNU GPL version 2 (or greater) and AFL 1.1 (or greater) + + +> LGPL 3.0 + +dbus-1.11.12.tar.gz\dbus-1.11.12.tar\dbus-1.11.12\tools\dbus-cleanup-sockets.c + +Copyright (C) 2003 Red Hat, Inc. +Copyright (C) 2002 Michael Meeks + +Note that this file is NOT licensed under the Academic Free License, +as it is based on linc-cleanup-sockets which is LGPL. + + +> GPL 2.0 + +dbus-1.11.12.tar.gz\dbus-1.11.12.tar\dbus-1.11.12\tools\dbus-echo.c + +Copyright © 2003 Philip Blundell +Copyright © 2011 Nokia Corporation +Copyright © 2014 Collabora Ltd. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +--------------- SECTION 2: Apache License, V2.0 ---------- + +Apache License, V2.0 is applicable to the following component(s). + + +>>> photon-release-2.0-2.ph2 + +License: Apache License + +--------------- SECTION 3: BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES ---------- + +BSD-STYLE, MIT-STYLE, OR SIMILAR STYLE LICENSES are applicable to the following component(s). + + +>>> bzip2-1.0.6-8.ph2 + +This program, "bzip2", the associated library "libbzip2", and all +documentation, are copyright (C) 1996-2010 Julian R Seward. All +rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product +documentation would be appreciated but is not required. + +3. Altered source versions must be plainly marked as such, and must +not be misrepresented as being the original software. + +4. The name of the author may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Julian Seward, jseward@bzip.org +bzip2/libbzip2 version 1.0.6 of 6 September 2010 + +ADDITIONAL LICENSE INFORMATION : + +> GPL 3.0 + +bzip2_1.0.6-1.debian.tar.bz2\bzip2_1.0.6-1.debian.tar\debian\copyright.in + +This package (bzip2) was created by Philippe Troin . +It is currently mantained by Anibal Monsalve Salazar . +This package is Copyright (C) 1999, 2000, 2001, 2002 Philippe Troin + and Copyright (C) 2004-2007 Anibal Monsalve Salazar. +It is licensed under the GNU General Public License which can be +found in /usr/share/common-licenses/GPL. + +It was downloaded from +http://www.bzip.org/downloads.html + +For more information about bzip2, please visit: +http://www.bzip.org/ + +>>> curl-7.59.0-4.ph2 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2018, Daniel Stenberg, , and many +contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE 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 OF THIRD PARTY RIGHTS. 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. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. + +ADDITIONAL LICENSE INFORMATION: + +> Openssl + +curl-7.59.0-4.ph2.src.rpm\curl-7.59.0-4.ph2.src.cpio\curl-7.59.0.tar.gz\curl-7.59.0.tar\curl-7.59.0\docs\examples\curlx.c + +Copyright (c) 2003 The OpenEvidence Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions, the following disclaimer, +and the original OpenSSL and SSLeay Licences below. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions, the following disclaimer +and the original OpenSSL and SSLeay Licences below in +the documentation and/or other materials provided with the +distribution. + +3. All advertising materials mentioning features or use of this +software must display the following acknowledgments: +"This product includes software developed by the Openevidence Project +for use in the OpenEvidence Toolkit. (http://www.openevidence.org/)" +This product includes software developed by the OpenSSL Project +for use in the OpenSSL Toolkit (https://www.openssl.org/)" +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim +Hudson (tjh@cryptsoft.com)." + +4. The names "OpenEvidence Toolkit" and "OpenEvidence Project" must not be +used to endorse or promote products derived from this software without +prior written permission. For written permission, please contact +openevidence-core@openevidence.org. + +5. Products derived from this software may not be called "OpenEvidence" +nor may "OpenEvidence" appear in their names without prior written +permission of the OpenEvidence Project. + +6. Redistributions of any form whatsoever must retain the following +acknowledgments: +"This product includes software developed by the OpenEvidence Project +for use in the OpenEvidence Toolkit (http://www.openevidence.org/) +This product includes software developed by the OpenSSL Project +for use in the OpenSSL Toolkit (https://www.openssl.org/)" +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim +Hudson (tjh@cryptsoft.com)." + +THIS SOFTWARE IS PROVIDED BY THE OpenEvidence PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenEvidence PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +This product includes software developed by the OpenSSL Project +for use in the OpenSSL Toolkit (https://www.openssl.org/) +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim +Hudson (tjh@cryptsoft.com). + +> BSD-3 + +curl-7.59.0-4.ph2.src.rpm\curl-7.59.0-4.ph2.src.cpio\curl-7.59.0.tar.gz\curl-7.59.0.tar\curl-7.59.0\docs\examples\fopen.c + +Copyright (c) 2003, 2017 Simtec Electronics + +Re-implemented by Vincent Sanders with extensive +reference to original curl example code + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> Public Domain + +curl-7.59.0-4.ph2.src.rpm\curl-7.59.0-4.ph2.src.cpio\curl-7.59.0.tar.gz\curl-7.59.0.tar\curl-7.59.0\lib\md4.c + +Author: +Alexander Peslyak, better known as Solar Designer + +This software was written by Alexander Peslyak in 2001. No copyright is +claimed, and the software is hereby placed in the public domain. In case +this attempt to disclaim copyright and place the software in the public +domain is deemed null and void, then the software is Copyright (c) 2001 +Alexander Peslyak and it is hereby released to the general public under the +following terms: + +Redistribution and use in source and binary forms, with or without +modification, are permitted. + +There's ABSOLUTELY NO WARRANTY, express or implied. + +>>> expat-2.2.4-1.ph2 + +Copyright (c) 1997-2000 Thai Open Source Software Center Ltd + Copyright (c) 2000-2017 Expat development team + Licensed under the MIT license: + + Permission 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: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE 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. + +>>> iputils-20151218-4.ph2 + +Copyright (c) 1989 The Regents of the University of California. +All rights reserved. + +This code is derived from software contributed to Berkeley by +Mike Muuss. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + + +> GPL 2.0 + +iputils-s20151218.tar.bz2\iputils-s20151218.tar\iputils-s20151218\arping.c + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version +2 of the License, or (at your option) any later version. + +Authors: Alexey Kuznetsov, +YOSHIFUJI Hideaki yoshfuji@linux-ipv6.org + + +> MIT-Style + +iputils-s20151218.tar.bz2\iputils-s20151218.tar\iputils-s20151218\rdisc.c + + +Rdisc (this program) was developed by Sun Microsystems, Inc. and is +provided for unrestricted use provided that this legend is included on +all tape media and as a part of the software program in whole or part. +Users may copy or modify Rdisc without charge, and they may freely +distribute it. + +RDISC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE +WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR +PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. + +Rdisc is provided with no support and without any obligation on the +part of Sun Microsystems, Inc. to assist in its use, correction, +modification or enhancement. + +SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE +INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY RDISC +OR ANY PART THEREOF. + +In no event will Sun Microsystems, Inc. be liable for any lost revenue +or profits or other special, indirect and consequential damages, even if +Sun has been advised of the possibility of such damages. + +Sun Microsystems, Inc. +2550 Garcia Avenue +Mountain View, California 94043. + +>>> krb5-1.16-2.ph2 + +Copyright (c) 2004 Sun Microsystems, Inc. + +Permission 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: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE 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. + + +ADDITIONAL LICENSE INFORMATION: + + +Copyright (C) 1985-2017 by the Massachusetts Institute of Technology. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Downloading of this software may constitute an export of cryptographic +software from the United States of America that is subject to the +United States Export Administration Regulations (EAR), 15 CFR 730-774. +Additional laws or regulations may apply. It is the responsibility of +the person or entity contemplating export to comply with all +applicable export laws and regulations, including obtaining any +required license from the U.S. government. + +The U.S. government prohibits export of encryption source code to +certain countries and individuals, including, but not limited to, the +countries of Cuba, Iran, North Korea, Sudan, Syria, and residents and +nationals of those countries. + +Documentation components of this software distribution are licensed +under a Creative Commons Attribution-ShareAlike 3.0 Unported License. +(http://creativecommons.org/licenses/by-sa/3.0/) + +Individual source code files are copyright MIT, Cygnus Support, +Novell, OpenVision Technologies, Oracle, Red Hat, Sun Microsystems, +FundsXpress, and others. + +Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, +and Zephyr are trademarks of the Massachusetts Institute of Technology +(MIT). No commercial use of these trademarks may be made without +prior written permission of MIT. + +"Commercial use" means use of a name in a product or other for-profit +manner. It does NOT prevent a commercial firm from referring to the +MIT trademarks in order to convey information (although in doing so, +recognition of their trademark status should be given). + +====================================================================== + +The following copyright and permission notice applies to the +OpenVision Kerberos Administration system located in "kadmin/create", +"kadmin/dbutil", "kadmin/passwd", "kadmin/server", "lib/kadm5", and +portions of "lib/rpc": + +Copyright, OpenVision Technologies, Inc., 1993-1996, All Rights +Reserved + +WARNING: Retrieving the OpenVision Kerberos Administration system +source code, as described below, indicates your acceptance of the +following terms. If you do not agree to the following terms, do +not retrieve the OpenVision Kerberos administration system. + +You may freely use and distribute the Source Code and Object Code +compiled from it, with or without modification, but this Source +Code is provided to you "AS IS" EXCLUSIVE OF ANY WARRANTY, +INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY OR +FITNESS FOR A PARTICULAR PURPOSE, OR ANY OTHER WARRANTY, WHETHER +EXPRESS OR IMPLIED. IN NO EVENT WILL OPENVISION HAVE ANY LIABILITY +FOR ANY LOST PROFITS, LOSS OF DATA OR COSTS OF PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES, OR FOR ANY SPECIAL, INDIRECT, OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, INCLUDING, +WITHOUT LIMITATION, THOSE RESULTING FROM THE USE OF THE SOURCE +CODE, OR THE FAILURE OF THE SOURCE CODE TO PERFORM, OR FOR ANY +OTHER REASON. + +OpenVision retains all copyrights in the donated Source Code. +OpenVision also retains copyright to derivative works of the Source +Code, whether created by OpenVision or by a third party. The +OpenVision copyright notice must be preserved if derivative works +are made based on the donated Source Code. + +OpenVision Technologies, Inc. has donated this Kerberos +Administration system to MIT for inclusion in the standard Kerberos +5 distribution. This donation underscores our commitment to +continuing Kerberos technology development and our gratitude for +the valuable work which has been performed by MIT and the Kerberos +community. + +====================================================================== + +Portions contributed by Matt Crawford "crawdad@fnal.gov" were work +performed at Fermi National Accelerator Laboratory, which is +operated by Universities Research Association, Inc., under contract +DE-AC02-76CHO3000 with the U.S. Department of Energy. + +====================================================================== + +Portions of "src/lib/crypto" have the following copyright: + +Copyright (C) 1998 by the FundsXpress, INC. + +All rights reserved. + +Export of this software from the United States of America may +require a specific license from the United States Government. +It is the responsibility of any person or organization +contemplating export to obtain such a license before exporting. + +WITHIN THAT CONSTRAINT, permission to use, copy, modify, and +distribute this software and its documentation for any purpose and +without fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright notice and +this permission notice appear in supporting documentation, and that +the name of FundsXpress. not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. FundsXpress makes no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +====================================================================== + +The implementation of the AES encryption algorithm in +"src/lib/crypto/builtin/aes" has the following copyright: + +Copyright (C) 2001, Dr Brian Gladman "brg@gladman.uk.net", Worcester, UK. +All rights reserved. + +LICENSE TERMS + +The free distribution and use of this software in both source and +binary form is allowed (with or without changes) provided that: + +1. distributions of this source code include the above copyright +notice, this list of conditions and the following disclaimer; + +2. distributions in binary form include the above copyright notice, +this list of conditions and the following disclaimer in the +documentation and/or other associated materials; + +3. the copyright holder's name is not used to endorse products +built using this software without specific written permission. + +DISCLAIMER + +This software is provided 'as is' with no explcit or implied +warranties in respect of any properties, including, but not limited +to, correctness and fitness for purpose. + +====================================================================== + +Portions contributed by Red Hat, including the pre-authentication +plug-in framework and the NSS crypto implementation, contain the +following copyright: + +Copyright (C) 2006 Red Hat, Inc. +Portions copyright (C) 2006 Massachusetts Institute of Technology +All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +Neither the name of Red Hat, Inc., nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +====================================================================== + +The bundled verto source code is subject to the following license: + +Copyright 2011 Red Hat, Inc. + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +====================================================================== + +The MS-KKDCP client implementation has the following copyright: + +Copyright 2013,2014 Red Hat, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above +copyright notice, this list of conditions and the following +disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials +provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +====================================================================== + +The implementations of GSSAPI mechglue in GSSAPI-SPNEGO in +"src/lib/gssapi", including the following files: + +lib/gssapi/generic/gssapi_err_generic.et +lib/gssapi/mechglue/g_accept_sec_context.c +lib/gssapi/mechglue/g_acquire_cred.c +lib/gssapi/mechglue/g_canon_name.c +lib/gssapi/mechglue/g_compare_name.c +lib/gssapi/mechglue/g_context_time.c +lib/gssapi/mechglue/g_delete_sec_context.c +lib/gssapi/mechglue/g_dsp_name.c +lib/gssapi/mechglue/g_dsp_status.c +lib/gssapi/mechglue/g_dup_name.c +lib/gssapi/mechglue/g_exp_sec_context.c +lib/gssapi/mechglue/g_export_name.c +lib/gssapi/mechglue/g_glue.c +lib/gssapi/mechglue/g_imp_name.c +lib/gssapi/mechglue/g_imp_sec_context.c +lib/gssapi/mechglue/g_init_sec_context.c +lib/gssapi/mechglue/g_initialize.c +lib/gssapi/mechglue/g_inquire_context.c +lib/gssapi/mechglue/g_inquire_cred.c +lib/gssapi/mechglue/g_inquire_names.c +lib/gssapi/mechglue/g_process_context.c +lib/gssapi/mechglue/g_rel_buffer.c +lib/gssapi/mechglue/g_rel_cred.c +lib/gssapi/mechglue/g_rel_name.c +lib/gssapi/mechglue/g_rel_oid_set.c +lib/gssapi/mechglue/g_seal.c +lib/gssapi/mechglue/g_sign.c +lib/gssapi/mechglue/g_store_cred.c +lib/gssapi/mechglue/g_unseal.c +lib/gssapi/mechglue/g_userok.c +lib/gssapi/mechglue/g_utils.c +lib/gssapi/mechglue/g_verify.c +lib/gssapi/mechglue/gssd_pname_to_uid.c +lib/gssapi/mechglue/mglueP.h +lib/gssapi/mechglue/oid_ops.c +lib/gssapi/spnego/gssapiP_spnego.h +lib/gssapi/spnego/spnego_mech.c + +and the initial implementation of incremental propagation, including +the following new or changed files: + +include/iprop_hdr.h +kadmin/server/ipropd_svc.c +lib/kdb/iprop.x +lib/kdb/kdb_convert.c +lib/kdb/kdb_log.c +lib/kdb/kdb_log.h +lib/krb5/error_tables/kdb5_err.et +slave/kpropd_rpc.c +slave/kproplog.c + +are subject to the following license: + +Copyright (C) 2004 Sun Microsystems, Inc. + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +====================================================================== + +Kerberos V5 includes documentation and software developed at the +University of California at Berkeley, which includes this copyright +notice: + +Copyright (C) 1983 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +3. Neither the name of the University nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +====================================================================== + +Portions contributed by Novell, Inc., including the LDAP database +backend, are subject to the following license: + +Copyright (C) 2004-2005, Novell, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +The copyright holder's name is not used to endorse or promote +products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +====================================================================== + +Portions funded by Sandia National Laboratory and developed by the +University of Michigan's Center for Information Technology +Integration, including the PKINIT implementation, are subject to the +following license: + +COPYRIGHT (C) 2006-2007 +THE REGENTS OF THE UNIVERSITY OF MICHIGAN +ALL RIGHTS RESERVED + +Permission is granted to use, copy, create derivative works and +redistribute this software and such derivative works for any +purpose, so long as the name of The University of Michigan is not +used in any advertising or publicity pertaining to the use of +distribution of this software without specific, written prior +authorization. If the above copyright notice or any other +identification of the University of Michigan is included in any +copy of any portion of this software, then the disclaimer below +must also be included. + +THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE +UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND +WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER +EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE FOR +ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL, OR +CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OF OR +IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR +IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +====================================================================== + +The pkcs11.h file included in the PKINIT code has the following +license: + +Copyright 2006 g10 Code GmbH +Copyright 2006 Andreas Jellinghaus + +This file is free software; as a special exception the author gives +unlimited permission to copy and/or distribute it, with or without +modifications, as long as this notice is preserved. + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY, to the extent permitted by law; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. + +====================================================================== + +Portions contributed by Apple Inc. are subject to the following +license: + +Copyright 2004-2008 Apple Inc. All Rights Reserved. + +Export of this software from the United States of America may +require a specific license from the United States Government. +It is the responsibility of any person or organization +contemplating export to obtain such a license before exporting. + +WITHIN THAT CONSTRAINT, permission to use, copy, modify, and +distribute this software and its documentation for any purpose and +without fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright notice and +this permission notice appear in supporting documentation, and that +the name of Apple Inc. not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. Apple Inc. makes no representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +====================================================================== + +The implementations of UTF-8 string handling in src/util/support and +src/lib/krb5/unicode are subject to the following copyright and +permission notice: + +The OpenLDAP Public License +Version 2.8, 17 August 2003 + +Redistribution and use of this software and associated +documentation ("Software"), with or without modification, are +permitted provided that the following conditions are met: + +1. Redistributions in source form must retain copyright statements +and notices, + +2. Redistributions in binary form must reproduce applicable +copyright statements and notices, this list of conditions, and +the following disclaimer in the documentation and/or other +materials provided with the distribution, and + +3. Redistributions must contain a verbatim copy of this document. + +The OpenLDAP Foundation may revise this license from time to time. +Each revision is distinguished by a version number. You may use +this Software under terms of this license revision or under the +terms of any subsequent revision of the license. + +THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS +CONTRIBUTORS "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE OPENLDAP FOUNDATION, ITS +CONTRIBUTORS, OR THE AUTHOR(S) OR OWNER(S) OF THE SOFTWARE BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +The names of the authors and copyright holders must not be used in +advertising or otherwise to promote the sale, use or other dealing +in this Software without specific, written prior permission. Title +to copyright in this Software shall at all times remain with +copyright holders. + +OpenLDAP is a registered trademark of the OpenLDAP Foundation. + +Copyright 1999-2003 The OpenLDAP Foundation, Redwood City, +California, USA. All Rights Reserved. Permission to copy and +distribute verbatim copies of this document is granted. + +====================================================================== + +Marked test programs in src/lib/krb5/krb have the following copyright: + +Copyright (C) 2006 Kungliga Tekniska Högskola +(Royal Institute of Technology, Stockholm, Sweden). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +3. Neither the name of KTH nor the names of its contributors may be +used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +====================================================================== + +The KCM Mach RPC definition file used on macOS has the following +copyright: + +Copyright (C) 2009 Kungliga Tekniska Högskola +(Royal Institute of Technology, Stockholm, Sweden). +All rights reserved. + +Portions Copyright (C) 2009 Apple Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above +copyright notice, this list of conditions and the following +disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +3. Neither the name of the Institute nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +====================================================================== + +Portions of the RPC implementation in src/lib/rpc and +src/include/gssrpc have the following copyright and permission notice: + +Copyright (C) 2010, Oracle America, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +3. Neither the name of the "Oracle America, Inc." nor the names of +its contributors may be used to endorse or promote products +derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +====================================================================== + +Copyright (C) 2006,2007,2009 NTT (Nippon Telegraph and Telephone +Corporation). All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer as +the first lines of this file unmodified. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +THIS SOFTWARE IS PROVIDED BY NTT "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL NTT BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +====================================================================== + +Copyright 2000 by Carnegie Mellon University + +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that copyright notice and this permission +notice appear in supporting documentation, and that the name of +Carnegie Mellon University not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. + +CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +====================================================================== + +Copyright (C) 2002 Naval Research Laboratory (NRL/CCS) + +Permission to use, copy, modify and distribute this software and +its documentation is hereby granted, provided that both the +copyright notice and this permission notice appear in all copies of +the software, derivative works or modified versions, and any +portions thereof. + +NRL ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND +DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER +RESULTING FROM THE USE OF THIS SOFTWARE. + +====================================================================== + +Portions extracted from Internet RFCs have the following copyright +notice: + +Copyright (C) The Internet Society (2006). + +This document is subject to the rights, licenses and restrictions +contained in BCP 78, and except as set forth therein, the authors +retain all their rights. + +This document and the information contained herein are provided on +an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE +REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND +THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT +THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR +ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A +PARTICULAR PURPOSE. + +====================================================================== + +Copyright (C) 1991, 1992, 1994 by Cygnus Support. + +Permission to use, copy, modify, and distribute this software and +its documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appear in all +copies and that both that copyright notice and this permission +notice appear in supporting documentation. Cygnus Support makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied +warranty. + +====================================================================== + +Copyright (C) 2006 Secure Endpoints Inc. + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +====================================================================== + +Portions of the implementation of the Fortuna-like PRNG are subject to +the following notice: + +Copyright (C) 2005 Marko Kreen +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Copyright (C) 1994 by the University of Southern California + +EXPORT OF THIS SOFTWARE from the United States of America may +require a specific license from the United States Government. It +is the responsibility of any person or organization +contemplating export to obtain such a license before exporting. + +WITHIN THAT CONSTRAINT, permission to copy, modify, and distribute +this software and its documentation in source and binary forms is +hereby granted, provided that any documentation or other materials +related to such distribution or use acknowledge that the software +was developed by the University of Southern California. + +DISCLAIMER OF WARRANTY. THIS SOFTWARE IS PROVIDED "AS IS". The +University of Southern California MAKES NO REPRESENTATIONS OR +WARRANTIES, EXPRESS OR IMPLIED. By way of example, but not +limitation, the University of Southern California MAKES NO +REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY +PARTICULAR PURPOSE. The University of Southern California shall not +be held liable for any liability nor for any direct, indirect, or +consequential damages with respect to any claim by the user or +distributor of the ksu software. + +====================================================================== + +Copyright (C) 1995 +The President and Fellows of Harvard University + +This code is derived from software contributed to Harvard by Jeremy +Rassen. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +3. All advertising materials mentioning features or use of this +software must display the following acknowledgement: + +This product includes software developed by the University of +California, Berkeley and its contributors. + +4. Neither the name of the University nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +====================================================================== + +Copyright (C) 2008 by the Massachusetts Institute of Technology. +Copyright 1995 by Richard P. Basch. All Rights Reserved. +Copyright 1995 by Lehman Brothers, Inc. All Rights Reserved. + +Export of this software from the United States of America may +require a specific license from the United States Government. It +is the responsibility of any person or organization +contemplating export to obtain such a license before exporting. + +WITHIN THAT CONSTRAINT, permission to use, copy, modify, and +distribute this software and its documentation for any purpose and +without fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright notice and +this permission notice appear in supporting documentation, and that +the name of Richard P. Basch, Lehman Brothers and M.I.T. not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. Richard P. +Basch, Lehman Brothers and M.I.T. make no representations about the +suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. + +====================================================================== + +The following notice applies to "src/lib/krb5/krb/strptime.c" and +"src/include/k5-queue.h". + +Copyright (C) 1997, 1998 The NetBSD Foundation, Inc. +All rights reserved. + +This code was contributed to The NetBSD Foundation by Klaus Klein. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +3. All advertising materials mentioning features or use of this +software must display the following acknowledgement: + +This product includes software developed by the NetBSD +Foundation, Inc. and its contributors. + +4. Neither the name of The NetBSD Foundation nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +====================================================================== + +The following notice applies to Unicode library files in +"src/lib/krb5/unicode": + +Copyright 1997, 1998, 1999 Computing Research Labs, +New Mexico State University + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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 COMPUTING RESEARCH LAB OR +NEW MEXICO STATE UNIVERSITY 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. + +====================================================================== + +The following notice applies to "src/util/support/strlcpy.c": + +Copyright (C) 1998 Todd C. Miller "Todd.Miller@courtesan.com" + +Permission to use, copy, modify, and distribute this software for +any purpose with or without fee is hereby granted, provided that +the above copyright notice and this permission notice appear in all +copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +====================================================================== + +The following notice applies to "src/util/profile/argv_parse.c" and +"src/util/profile/argv_parse.h": + +Copyright 1999 by Theodore Ts'o. + +Permission to use, copy, modify, and distribute this software for +any purpose with or without fee is hereby granted, provided that +the above copyright notice and this permission notice appear in all +copies. THE SOFTWARE IS PROVIDED "AS IS" AND THEODORE TS'O (THE +AUTHOR) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN +NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. (Isn't +it sick that the U.S. culture of lawsuit-happy lawyers requires +this kind of disclaimer?) + +====================================================================== + +The following notice applies to SWIG-generated code in +"src/util/profile/profile_tcl.c": + +Copyright (C) 1999-2000, The University of Chicago + +This file may be freely redistributed without license or fee +provided this copyright message remains intact. + +====================================================================== + +The following notice applies to portiions of "src/lib/rpc" and +"src/include/gssrpc": + +Copyright (C) 2000 The Regents of the University of Michigan. All +rights reserved. + +Copyright (C) 2000 Dug Song "dugsong@UMICH.EDU". All rights +reserved, all wrongs reversed. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +3. Neither the name of the University nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +====================================================================== + +Implementations of the MD4 algorithm are subject to the following +notice: + +Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD4 Message Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD4 Message Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + +====================================================================== + +Implementations of the MD5 algorithm are subject to the following +notice: + +Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD5 Message- Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD5 Message-Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + +====================================================================== + +The following notice applies to +"src/lib/crypto/crypto_tests/t_mddriver.c": + +Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All +rights reserved. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" without +express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + +====================================================================== + +Portions of "src/lib/krb5" are subject to the following notice: + +Copyright (C) 1994 CyberSAFE Corporation. +Copyright 1990,1991,2007,2008 by the Massachusetts Institute of Technology. +All Rights Reserved. + +Export of this software from the United States of America may +require a specific license from the United States Government. It +is the responsibility of any person or organization +contemplating export to obtain such a license before exporting. + +WITHIN THAT CONSTRAINT, permission to use, copy, modify, and +distribute this software and its documentation for any purpose and +without fee is hereby granted, provided that the above copyright +notice appear in all copies and that both that copyright notice and +this permission notice appear in supporting documentation, and that +the name of M.I.T. not be used in advertising or publicity +pertaining to distribution of the software without specific, +written prior permission. Furthermore if you modify this software +you must label your software as modified software and not +distribute it in such a fashion that it might be confused with the +original M.I.T. software. Neither M.I.T., the Open Computing +Security Group, nor CyberSAFE Corporation make any representations +about the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. + +====================================================================== + +Portions contributed by PADL Software are subject to the following +license: + +Copyright (c) 2011, PADL Software Pty Ltd. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +3. Neither the name of PADL Software nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY PADL SOFTWARE AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PADL SOFTWARE +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +====================================================================== + +The bundled libev source code is subject to the following license: + +All files in libev are Copyright (C)2007,2008,2009 Marc Alexander +Lehmann. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +Alternatively, the contents of this package may be used under the +terms of the GNU General Public License ("GPL") version 2 or any +later version, in which case the provisions of the GPL are +applicable instead of the above. If you wish to allow the use of +your version of this package only under the terms of the GPL and +not to allow others to use your version of this file under the BSD +license, indicate your decision by deleting the provisions above +and replace them with the notice and other provisions required by +the GPL in this and the other files of this package. If you do not +delete the provisions above, a recipient may use your version of +this file under either the BSD or the GPL. + +====================================================================== + +Files copied from the Intel AESNI Sample Library are subject to the +following license: + +Copyright (C) 2010, Intel Corporation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials +provided with the distribution. + +Neither the name of Intel Corporation nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +====================================================================== + +The following notice applies to +"src/ccapi/common/win/OldCC/autolock.hxx": + +Copyright (C) 1998 by Danilo Almeida. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials provided +with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +> LPPL 1.3c + +krb5-1.16-2.ph2.src.rpm\krb5-1.16-2.ph2.src.cpio\krb5-1.16.tar.gz\krb5-1.16.tar\krb5-1.16\doc\pdf\tabulary.sty + + +Copyright (C) 1995 1996 2003 2008 David Carlisle +This file may be distributed under the terms of the LPPL. +See 00readme.txt for details. + + +> BSD- 4 Clause + + +krb5-1.16-2.ph2.src.rpm\krb5-1.16-2.ph2.src.cpio\krb5-1.16.tar.gz\krb5-1.16.tar\krb5-1.16\src\lib\apputils\daemon.c + + +Copyright (c) 1990 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +> Public Domain + +krb5-1.16-2.ph2.src.rpm\krb5-1.16-2.ph2.src.cpio\krb5-1.16.tar.gz\krb5-1.16.tar\krb5-1.16\src\lib\krb5\rcache\rc_base.c + +This file of the Kerberos V5 software is derived from public-domain code +contributed by Daniel J. Bernstein, . + +>>> libarchive-3.3.1-2.ph2 + +Copyright (c) 2003-2009 +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer +in this position and unchanged. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +>MIT Style + +libarchive-3.3.1.tar.gz\libarchive-3.3.1.tar\libarchive-3.3.1\build\autoconf\ax_require_defined.m4 + +Copyright (c) 2014 Mike Frysinger + +Copying and distribution of this file, with or without modification, are +permitted in any medium without royalty provided the copyright notice +and this notice are preserved. This file is offered as-is, without any +warranty. + +>Apache 2.0 + +libarchive-3.3.1.tar.gz\libarchive-3.3.1.tar\libarchive-3.3.1\contrib\android\Android.mk + +Copyright (C) 2014 Trevor Drake + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +>BSD – 4Clause + +libarchive-3.3.1.tar.gz\libarchive-3.3.1.tar\libarchive-3.3.1\contrib\shar\shar.1 + +Copyright (c) 1990, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +>MIT + +libarchive-3.3.1.tar.gz\libarchive-3.3.1.tar\libarchive-3.3.1\doc\mdoc2man.awk + +Copyright (c) 2003 Peter Stuge + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +>Public Domain + +libarchive-3.3.1.tar.gz\libarchive-3.3.1.tar\libarchive-3.3.1\libarchive\archive_getdate.c + +This code is in the public domain and has no copyright. + +This is a plain C recursive-descent translation of an old +public-domain YACC grammar that has been used for parsing dates in +very many open-source projects. + +Since the original authors were generous enough to donate their +work to the public domain, I feel compelled to match their +generosity. + +Tim Kientzle, February 2009. + +>BSD – 3Clause + +libarchive-3.3.1.tar.gz\libarchive-3.3.1.tar\libarchive-3.3.1\libarchive\mtree.5 + +Copyright (c) 1989, 1990, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +>>> libcap-2.25-7.ph2 + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD-3. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Unless otherwise *explicitly* stated the following text describes the +licensed conditions under which the contents of this module release +may be distributed: + +------------------------------------------------------------------------- +Redistribution and use in source and binary forms of this module, with +or without modification, are permitted provided that the following +conditions are met: + +1. Redistributions of source code must retain any existing copyright + notice, and this entire permission notice in its entirety, + including the disclaimer of warranties. + +2. Redistributions in binary form must reproduce all prior and current + copyright notices, this list of conditions, and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +3. The name of any author may not be used to endorse or promote + products derived from this software without their specific prior + written permission. + +ALTERNATIVELY, this product may be distributed under the terms of the +GNU Library General Public License, in which case the provisions of +the GNU LGPL are required INSTEAD OF the above restrictions. (This +clause is necessary due to a potential conflict between the GNU LGPL +and the restrictions contained in a BSD-style copyright.) + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +>>> libdb-5.3.28-1.ph2 + +The following is the license that applies to this copy of the Berkeley DB +software. For a license to use the Berkeley DB software under conditions +other than those described here, or to purchase support for this software, +please contact Oracle at berkeleydb-info_us@oracle.com. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Redistributions in any form must be accompanied by information on +how to obtain complete source code for the DB software and any +accompanying software that uses the DB software. The source code +must either be included in the distribution or be available for no +more than the cost of distribution plus a nominal fee, and must be +freely redistributable under reasonable conditions. For an +executable file, complete source code means the source code for all +modules it contains. It does not include source code for modules or +files that typically accompany the major components of the operating +system on which the executable file runs. + +THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR +NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Copyright (c) 1990, 1993, 1994, 1995 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + +Copyright (c) 1995, 1996 +The President and Fellows of Harvard University. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +ASM: a very small and fast Java bytecode manipulation framework +Copyright (c) 2000-2005 INRIA, France Telecom +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holders nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + + +ADDITIONAL LICENSE INFORMATION: + +>BSD-4 + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\src\clib\atol.c + +Copyright (c) 1988, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +>ARTISTIC 2.0 + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\src\crypto\mersenne\mt19937db.c + +This library is free software under the Artistic license: +see the file COPYING distributed together with this code. +For the verification of the code, its output sequence file +mt19937int.out is attached (2001/4/2) + +>PUBLIC DOMAIN + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\src\crypto\rijndael\rijndael-alg-fst.c + + +rijndael-alg-fst.c + +@version 3.0 (December 2000) + +Optimised ANSI C code for the Rijndael cipher (now AES) + +@author Vincent Rijmen +@author Antoon Bosselaers +@author Paulo Barreto + +This code is hereby placed in the public domain. + +THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +>PUBLIC DOMAIN + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\src\hmac\sha1.c + +SHA-1 in C +By Steve Reid +100% Public Domain +>MS-PL + + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\docs\csharp\TOC.js + + +Note : Copyright 2006-2009, Eric Woodruff, All rights reserved +Compiler: JavaScript + +This file contains the methods necessary to implement a simple tree view +for the table of content with a resizable splitter and Ajax support to +load tree nodes on demand. It also contains the script necessary to do +full-text searches. + +This code is published under the Microsoft Public License (Ms-PL). A copy +of the license should be distributed with the code. It can also be found +at the project website: http://SHFB.CodePlex.com. This notice, the +author's name, and all copyright notices must remain intact in all +applications, documentation, and source files. + +>MIT + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\dist\aclocal\ltoptions.m4 + +Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +Inc. +Written by Gary V. Vaughan, 2004 + +This file is free software; the Free Software Foundation gives +unlimited permission to copy and/or distribute it, with or without +modifications, as long as this notice is preserved. + +>GPL 2.0 + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\lang\perl\BerkeleyDB\BerkeleyDB.pm + +[VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS SUBCOMPONENT UNDER THE TERMS OF THE GPL v2 LICENSE THE TEXT OF WHICH IS SET FORTH IN THE APPENDIX. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright (c) 1997-2011 Paul Marquess. All rights reserved. +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + + +>APACHE 2.0 + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\lang\php_db4\db4.cpp + +Copyright (c) 2004, 2013 Oracle and/or its affiliates. All rights reserved. + +http://www.apache.org/licenses/LICENSE-2.0.txt + +authors: George Schlossnagle george@omniti.com + +>MIT STYLE + +libdb-5.3.28-1.ph2.src.rpm\libdb-5.3.28-1.ph2.src.cpio\db-5.3.28.tar.gz\db-5.3.28.tar\db-5.3.28\lang\sql\jdbc\license.terms + +This software is copyrighted by Christian Werner and others. +The following terms apply to all files associated with the software +unless explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +>>> libffi-3.2.1-5.ph2 + +libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + + +ADDITIONAL LICENSE INFORMATION: + +> GPL 2.0 + +libffi-3.2.1.tar.gz\libffi-3.2.1.tar\libffi-3.2.1\libtool-ldflags + +Copyright (C) 2005 Free Software Foundation, Inc. + +This file is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +MA 02110-1301, USA. + + +> LGPL 2.1 + +libffi-3.2.1.tar.gz\libffi-3.2.1.tar\libffi-3.2.1\msvcc.sh + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE LGPL 2.1 LICENSE. PLEASE SEE APPENDIX FOR THE FULL TEXT OF THE LGPL 2.1 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +***** BEGIN LICENSE BLOCK ***** +Version: MPL 1.1/GPL 2.0/LGPL 2.1 + +The contents of this file are subject to the Mozilla Public License Version +1.1 (the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at +http://www.mozilla.org/MPL/ + +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +for the specific language governing rights and limitations under the +License. + +The Original Code is the MSVC wrappificator. + +The Initial Developer of the Original Code is +Timothy Wall . +Portions created by the Initial Developer are Copyright (C) 2009 +the Initial Developer. All Rights Reserved. + +Contributor(s): +Daniel Witte + +Alternatively, the contents of this file may be used under the terms of +either the GNU General Public License Version 2 or later (the "GPL"), or +the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +in which case the provisions of the GPL or the LGPL are applicable instead +of those above. If you wish to allow use of your version of this file only +under the terms of either the GPL or the LGPL, and not to allow others to +use your version of this file under the terms of the MPL, indicate your +decision by deleting the provisions above and replace them with the notice +and other provisions required by the GPL or the LGPL. If you do not delete +the provisions above, a recipient may use your version of this file under +the terms of any one of the MPL, the GPL or the LGPL. + +***** END LICENSE BLOCK ***** + + +> Public Domain + +libffi-3.2.1.tar.gz\libffi-3.2.1.tar\libffi-3.2.1\src\dlmalloc.c + +This is a version (aka dlmalloc) of malloc/free/realloc written by +Doug Lea and released to the public domain, as explained at +http://creativecommons.org/licenses/publicdomain. Send questions, +comments, complaints, performance data, etc to dl@cs.oswego.edu + +>>> libsolv-0.6.26-3.ph2 + +Copyright (c) 2000-2001, Aaron D. Gifford +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +> Public Domain + +libsolv-0.6.26.tar.gz\libsolv-0.6.26.tar\libsolv-0.6.26\src\sha1.h + +this file is in the public domain + +>>> libssh2-1.8.0-1.ph2 + +Copyright (c) 2004-2007 Sara Golemon + Copyright (c) 2005,2006 Mikhail Gusarov + Copyright (c) 2006-2007 The Written Word, Inc. + Copyright (c) 2007 Eli Fant + Copyright (c) 2009-2014 Daniel Stenberg + Copyright (C) 2008, 2009 Simon Josefsson + All rights reserved. + + Redistribution and use in source and binary forms, + with or without modification, are permitted provided + that the following conditions are met: + + Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + + Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + Neither the name of the copyright holder nor the names + of any other contributors may be used to endorse or + promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + OF SUCH DAMAGE. + +>>> libtirpc-1.0.1-8.ph2 + +Copyright (c) Copyright (c) Bull S.A. 2005 All Rights Reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +ADDITIONAL LICENSE INFORMATION: + +>GPL 2.0 + +libtirpc-1.0.1\src\debug.h + +Copyright (C) 2014 Red Hat, Steve Dickson + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. + +>LGPL 2.1 + +libtirpc-1.0.1\src\des_impl.c + +Copyright (C) 1992 Eric Young +Collected from libdes and modified for SECURE RPC by Martin Kuck 1994 +This file is distributed under the terms of the GNU Lesser General +Public License, version 2.1 or later - see the file COPYING.LIB for details. +If you did not receive a copy of the license with this program, please +see to obtain a copy. + +>Sun Microsystem (MIT-Style) + +libtirpc-1.0.1\tirpc\rpc\key_prot.h + +Sun RPC is a product of Sun Microsystems, Inc. and is provided for +unrestricted use provided that this legend is included on all tape +media and as a part of the software program in whole or part. Users +may copy or modify Sun RPC without charge, but are not authorized +to license or distribute it to anyone else except as part of a product or +program developed by the user. +SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE +WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR +PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. +Sun RPC is provided with no support and without any obligation on the +part of Sun Microsystems, Inc. to assist in its use, correction, +modification or enhancement. +SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE +INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC +OR ANY PART THEREOF. +In no event will Sun Microsystems, Inc. be liable for any lost revenue +or profits or other special, indirect and consequential damages, even if +Sun has been advised of the possibility of such damages. +Sun Microsystems, Inc. +2550 Garcia Avenue +Mountain View, California 94043. + +>>> linux-pam-1.3.0-1.ph2 + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD-3 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Unless otherwise *explicitly* stated the following text describes the +licensed conditions under which the contents of this Linux-PAM release +may be distributed: + +------------------------------------------------------------------------- +Redistribution and use in source and binary forms of Linux-PAM, with +or without modification, are permitted provided that the following +conditions are met: + +1. Redistributions of source code must retain any existing copyright + notice, and this entire permission notice in its entirety, + including the disclaimer of warranties. + +2. Redistributions in binary form must reproduce all prior and current + copyright notices, this list of conditions, and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +3. The name of any author may not be used to endorse or promote + products derived from this software without their specific prior + written permission. + +ALTERNATIVELY, this product may be distributed under the terms of the +GNU General Public License, in which case the provisions of the GNU +GPL are required INSTEAD OF the above restrictions. (This clause is +necessary due to a potential conflict between the GNU GPL and the +restrictions contained in a BSD-style copyright.) + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. +------------------------------------------------------------------------- + + +ADDITIONAL LICENSE INFORMATION: + +> GPL 3.0 with Bison Parser Exception + +Linux-PAM-1.3.0.tar.bz2\Linux-PAM-1.3.0.tar\Linux-PAM-1.3.0\conf\pam_conv1\pam_conv_y.c + +Bison implementation for Yacc-like parsers in C + +Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +As a special exception, you may create a larger work that contains +part or all of the Bison parser skeleton and distribute that work +under terms of your choice, so long as that work isn't itself a +parser generator using the skeleton or a modified version thereof +as a parser skeleton. Alternatively, if you modify or redistribute +the parser skeleton itself, you may (at your option) remove this +special exception, which will cause the skeleton and the resulting +Bison output files to be licensed under the GNU General Public +License without this special exception. + +This special exception was added by the Free Software Foundation in +version 2.2 of Bison. + + +> BSD + +Linux-PAM-1.3.0.tar.bz2\Linux-PAM-1.3.0.tar\Linux-PAM-1.3.0\modules\pam_access\pam_access.c + +Copyright 1995 by Wietse Venema. All rights reserved. Individual files +may be covered by other copyrights (as noted in the file itself.) + +This material was originally written and compiled by Wietse Venema at +Eindhoven University of Technology, The Netherlands, in 1990, 1991, +1992, 1993, 1994 and 1995. + +Redistribution and use in source and binary forms are permitted +provided that this entire copyright notice is duplicated in all such +copies. + +This software is provided "as is" and without any expressed or implied +warranties, including, without limitation, the implied warranties of +merchantibility and fitness for any particular purpose. + + +> LGPL 2.0 + +Linux-PAM-1.3.0.tar.bz2\Linux-PAM-1.3.0.tar\Linux-PAM-1.3.0\modules\pam_issue\pam_issue.c + +Copyright 1999 by Ben Collins +Released under the GNU LGPL version 2 or later + + +> GPL 2.0 + +Linux-PAM-1.3.0.tar.bz2\Linux-PAM-1.3.0.tar\Linux-PAM-1.3.0\modules\pam_loginuid\pam_loginuid.c + +Copyright 2005 Red Hat Inc., Durham, North Carolina. +All Rights Reserved. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Suite 500 +Boston, MA 02110-1335 USA + + +> Public Domain + +Linux-PAM-1.3.0.tar.bz2\Linux-PAM-1.3.0.tar\Linux-PAM-1.3.0\modules\pam_namespace\md5.c + +This code implements the MD5 message-digest algorithm. +The algorithm is due to Ron Rivest. This code was +written by Colin Plumb in 1993, no copyright is claimed. +This code is in the public domain; do with it what you wish. + + +> MIT + +Linux-PAM-1.3.0.tar.bz2\Linux-PAM-1.3.0.tar\Linux-PAM-1.3.0\modules\pam_namespace\argv_parse.c + +Copyright 1999 by Theodore Ts'o. + +Permission to use, copy, modify, and distribute this software for +any purpose with or without fee is hereby granted, provided that +the above copyright notice and this permission notice appear in all +copies. THE SOFTWARE IS PROVIDED "AS IS" AND THEODORE TS'O (THE +AUTHOR) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +> BSD-3 + +Linux-PAM-1.3.0.tar.bz2\Linux-PAM-1.3.0.tar\Linux-PAM-1.3.0\modules\pam_tally2\pam_tally2.c + +Portions Copyright 2006, Red Hat, Inc. +Portions Copyright 1989 - 1993, Julianne Frances Haugh +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of Julianne F. Haugh nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + +> Beer-Ware License (MIT-Style) + +Linux-PAM-1.3.0.tar.bz2\Linux-PAM-1.3.0.tar\Linux-PAM-1.3.0\modules\pam_unix\md5_crypt.c + +"THE BEER-WARE LICENSE" (Revision 42): + wrote this file. As long as you retain this notice you +can do whatever you want with this stuff. If we meet some day, and you think +this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp + +>>> lsof-4.89-2.ph2 + +Copyright 1994 Purdue Research Foundation, West Lafayette, Indiana +47907. All rights reserved. + +Written by Victor A. Abell + +This software is not subject to any license of the American Telephone +and Telegraph Company or the Regents of the University of California. + +Permission is granted to anyone to use this software for any purpose on +any computer system, and to alter it and redistribute it freely, subject +to the following restrictions: + +1. Neither the authors nor Purdue University are responsible for any +consequences of the use of this software. + +2. The origin of this software must not be misrepresented, either by +explicit claim or by omission. Credit to the authors and Purdue +University must appear in documentation and sources. + +3. Altered versions must be plainly marked as such, and must not be +misrepresented as being the original software. + +4. This notice may not be removed or altered. + +ADDITIONAL LICENSE INFORMATION: + +> BSD + +lsof_4.89.tar.gz\lsof_4.89.tar\lsof_4.89\lsof_4.89_src.tar\lsof_4.89_src\dialects\freebsd\include\procfs\pfsnode.h + +Copyright (c) 1993 Paul Kranenburg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by Paul Kranenburg. +4. The name of the author may not be used to endorse or promote products +derived from this software withough specific prior written permission + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> GPL 2.0 + +lsof_4.89.tar.gz\lsof_4.89.tar\lsof_4.89\lsof_4.89_src.tar\lsof_4.89_src\scripts\sort_res.perl5 + +Copyright (c) 2004, 2005 - Fabian Frederick + +This program/include file is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program/include file is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty +of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program (in the main directory of the Linux-NTFS +distribution in the file COPYING); if not, write to the Free Software +Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +>>> ncurses-6.0-14.ph2 + +Upstream source http://invisible-island.net/ncurses/ncurses-examples.html + +Current ncurses maintainer: Thomas Dickey + +------------------------------------------------------------------------------- +Files: * +Copyright: 1998-2016,2017 Free Software Foundation, Inc. +Licence: X11 + +Files: aclocal.m4 package +Copyright: 2010-2016,2017 by Thomas E. Dickey +Licence: X11 + + Permission 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, distribute with modifications, 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: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE 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 ABOVE 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. + + Except as contained in this notice, the name(s) of the above copyright + holders shall not be used in advertising or otherwise to promote the + sale, use or other dealings in this Software without prior written + authorization. + +------------------------------------------------------------------------------- +Files: install-sh +Copyright: 1994 X Consortium +Licence: X11 + + Permission 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: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE 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 + X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- + TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of the X Consortium shall not + be used in advertising or otherwise to promote the sale, use or other deal- + ings in this Software without prior written authorization from the X Consor- + tium. + + FSF changes to this file are in the public domain. + + Calling this script install-sh is preferred over install.sh, to prevent + `make' implicit rules from creating a file called install from it + when there is no Makefile. + + This script is compatible with the BSD install script, but was written + from scratch. It can only install one file at a time, a restriction + shared with many OS's install programs. + +On Debian systems, the complete text of the GNU General +Public License can be found in '/usr/share/common-licenses/GPL-2' + +-- vile: txtmode file-encoding=utf-8 + +>>> openssh-7.5p1-11.ph2 + +This file is part of the OpenSSH software. + +The licences which components of this software fall under are as +follows. First, we will summarize and say that all components +are under a BSD licence, or a licence more free than that. + +OpenSSH contains no GPL code. + +1) +Copyright (c) 1995 Tatu Ylonen , Espoo, Finland +All rights reserved + +As far as I am concerned, the code I have written for this software +can be used freely for any purpose. Any derived versions of this +software must be clearly marked as such, and if the derived work is +incompatible with the protocol description in the RFC file, it must be +called by a name other than "ssh" or "Secure Shell". + +[Tatu continues] +However, I am not implying to give any licenses to any patents or +copyrights held by third parties, and the software includes parts that +are not under my direct control. As far as I know, all included +source code is used in accordance with the relevant license agreements +and can be used freely for any purpose (the GNU license being the most +restrictive); see below for details. + +[However, none of that term is relevant at this point in time. All of +these restrictively licenced software components which he talks about +have been removed from OpenSSH, i.e., + +- RSA is no longer included, found in the OpenSSL library +- IDEA is no longer included, its use is deprecated +- DES is now external, in the OpenSSL library +- GMP is no longer used, and instead we call BN code from OpenSSL +- Zlib is now external, in a library +- The make-ssh-known-hosts script is no longer included +- TSS has been removed +- MD5 is now external, in the OpenSSL library +- RC4 support has been replaced with ARC4 support from OpenSSL +- Blowfish is now external, in the OpenSSL library + +[The licence continues] + +Note that any information and cryptographic algorithms used in this +software are publicly available on the Internet and at any major +bookstore, scientific library, and patent office worldwide. More +information can be found e.g. at "http://www.cs.hut.fi/crypto". + +The legal status of this program is some combination of all these +permissions and restrictions. Use only at your own responsibility. +You will be responsible for any legal consequences yourself; I am not +making any claims whether possessing or using this is legal or not in +your country, and I am not taking any responsibility on your behalf. + + +NO WARRANTY + +BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +2) +The 32-bit CRC compensation attack detector in deattack.c was +contributed by CORE SDI S.A. under a BSD-style license. + +Cryptographic attack detector for ssh - source code + +Copyright (c) 1998 CORE SDI S.A., Buenos Aires, Argentina. + +All rights reserved. Redistribution and use in source and binary +forms, with or without modification, are permitted provided that +this copyright notice is retained. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES ARE DISCLAIMED. IN NO EVENT SHALL CORE SDI S.A. BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY OR +CONSEQUENTIAL DAMAGES RESULTING FROM THE USE OR MISUSE OF THIS +SOFTWARE. + +Ariel Futoransky + + +3) +ssh-keyscan was contributed by David Mazieres under a BSD-style +license. + +Copyright 1995, 1996 by David Mazieres . + +Modification and redistribution in source and binary forms is +permitted provided that due credit is given to the author and the +OpenBSD project by leaving this copyright notice intact. + +4) +The Rijndael implementation by Vincent Rijmen, Antoon Bosselaers +and Paulo Barreto is in the public domain and distributed +with the following license: + +@version 3.0 (December 2000) + +Optimised ANSI C code for the Rijndael cipher (now AES) + +@author Vincent Rijmen +@author Antoon Bosselaers +@author Paulo Barreto + +This code is hereby placed in the public domain. + +THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +5) +One component of the ssh source code is under a 3-clause BSD license, +held by the University of California, since we pulled these parts from +original Berkeley code. + +Copyright (c) 1983, 1990, 1992, 1993, 1995 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +6) +Remaining components of the software are provided under a standard +2-term BSD licence with the following names as copyright holders: + +Markus Friedl +Theo de Raadt +Niels Provos +Dug Song +Aaron Campbell +Damien Miller +Kevin Steves +Daniel Kouril +Wesley Griffin +Per Allansson +Nils Nordman +Simon Wilkinson + +Portable OpenSSH additionally includes code from the following copyright +holders, also under the 2-term BSD license: + +Ben Lindstrom +Tim Rice +Andre Lucas +Chris Adams +Corinna Vinschen +Cray Inc. +Denis Parker +Gert Doering +Jakob Schlyter +Jason Downs +Juha Yrjölä +Michael Stone +Networks Associates Technology, Inc. +Solar Designer +Todd C. Miller +Wayne Schroeder +William Jones +Darren Tucker +Sun Microsystems +The SCO Group +Daniel Walsh +Red Hat, Inc +Simon Vallet / Genoscope + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +8) Portable OpenSSH contains the following additional licenses: + +a) md5crypt.c, md5crypt.h + +"THE BEER-WARE LICENSE" (Revision 42): + wrote this file. As long as you retain this +notice you can do whatever you want with this stuff. If we meet +some day, and you think this stuff is worth it, you can buy me a +beer in return. Poul-Henning Kamp + +b) snprintf replacement + +Copyright Patrick Powell 1995 +This code is based on code written by Patrick Powell +(papowell@astart.com) It may be used for any purpose as long as this +notice remains intact on all source code distributions + +c) Compatibility code (openbsd-compat) + +Apart from the previously mentioned licenses, various pieces of code +in the openbsd-compat/ subdirectory are licensed as follows: + +Some code is licensed under a 3-term BSD license, to the following +copyright holders: + +Todd C. Miller +Theo de Raadt +Damien Miller +Eric P. Allman +The Regents of the University of California +Constantin S. Svintsoff + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Some code is licensed under an ISC-style license, to the following +copyright holders: + +Internet Software Consortium. +Todd C. Miller +Reyk Floeter +Chad Mynhier + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE +FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Some code is licensed under a MIT-style license to the following +copyright holders: + +Free Software Foundation, Inc. + +Permission 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, distribute with modifications, 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: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE 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 ABOVE 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. + +Except as contained in this notice, the name(s) of the above copyright +holders shall not be used in advertising or otherwise to promote the +sale, use or other dealings in this Software without prior written +authorization. +------ +$OpenBSD: LICENCE,v 1.19 2004/08/30 09:18:08 markus Exp $ + +>>> openssl-1.0.2q-1.ph2 + +LICENSE ISSUES +============== + +The OpenSSL toolkit stays under a double license, i.e. both the conditions of +the OpenSSL License and the original SSLeay license apply to the toolkit. +See below for the actual license texts. Actually both licenses are BSD-style +Open Source licenses. In case of any license issues related to OpenSSL +please contact openssl-core@openssl.org. + +OpenSSL License +--------------- + +/ ==================================================================== +Copyright (c) 1998-2018 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +3. All advertising materials mentioning features or use of this +software must display the following acknowledgment: +"This product includes software developed by the OpenSSL Project +for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to +endorse or promote products derived from this software without +prior written permission. For written permission, please contact +openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" +nor may "OpenSSL" appear in their names without prior written +permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following +acknowledgment: +"This product includes software developed by the OpenSSL Project +for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. +==================================================================== + +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim +Hudson (tjh@cryptsoft.com). + +/ + +Original SSLeay License +----------------------- + +/ Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an SSL implementation written +by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with Netscapes SSL. + +This library is free for commercial and non-commercial use as long as +the following conditions are aheared to. The following conditions +apply to all code found in this distribution, be it the RC4, RSA, +lhash, DES, etc., code; not just the SSL code. The SSL documentation +included with this distribution is covered by the same copyright terms +except that the holder is Tim Hudson (tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of the parts of the library used. +This can be in the form of a textual message at program startup or +in documentation (online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +"This product includes cryptographic software written by +Eric Young (eay@cryptsoft.com)" +The word 'cryptographic' can be left out if the rouines from the library +being used are not cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from +the apps directory (application code) you must include an acknowledgement: +"This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence +[including the GNU Public Licence.] + + +ADDITIONAL LICENSE INFORMATION: + +> Public Domain + +openssl-1.0.2q.tar.gz\openssl-1.0.2q.tar\openssl-1.0.2q\crypto\aes\asm\vpaes-x86.pl + +By Mike Hamburg (Stanford University), 2009 +Public domain. + +For details see http://shiftleft.org/papers/vector_aes/ and +http://crypto.stanford.edu/vpaes/. + +> OpenSSL + +openssl-1.0.2m.tar.gz\openssl-1.0.2m.tar\openssl-1.0.2m\crypto\aes\asm\bsaes-armv7.pl + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS SUBCOMPONENT UNDER THE TERMS OF THE OPENSSL LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Written by Andy Polyakov for the OpenSSL +project. The module is, however, dual licensed under OpenSSL and +CRYPTOGAMS licenses depending on where you obtain it. For further +details see http://www.openssl.org/~appro/cryptogams/. + +Specific modes and adaptation for Linux kernel by Ard Biesheuvel +. Permission to use under GPL terms is +granted. + +> BSD + +openssl-1.0.2q.tar.gz\openssl-1.0.2q.tar\openssl-1.0.2q\crypto\camellia\asm\cmll-x86_64.pl + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS SUBCOMPONENT UNDER THE TERMS OF THE BSD LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE] + +Copyright (c) 2008 Andy Polyakov + +This module may be used under the terms of either the GNU General +Public License version 2 or later, the GNU Lesser General Public +License version 2.1 or later, the Mozilla Public License version +1.1 or the BSD License. The exact terms of either license are +distributed along with this module. For further details see +http://www.openssl.org/~appro/camellia/. + +> Apache 2.0 + +openssl-1.0.2q.tar.gz\openssl-1.0.2q.tar\openssl-1.0.2q\crypto\ec\ecp_nistputil.c + +Copyright 2011 Google Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); + +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +> MIT + +openssl-1.0.2q.tar.gz\openssl-1.0.2q.tar\openssl-1.0.2q\crypto\md5\asm\md5-ia64.S + +Copyright (c) 2005 Hewlett-Packard Development Company, L.P. + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +> BSD-3 Clause + +openssl-1.0.2q.tar.gz\openssl-1.0.2q.tar\openssl-1.0.2q\crypto\x509v3\v3_pci.c + +Copyright (c) 2004 Kungliga Tekniska Högskolan +(Royal Institute of Technology, Stockholm, Sweden). +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +3. Neither the name of the Institute nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +> BSD- Style + +openssl-1.0.2q.tar.gz\openssl-1.0.2q.tar\openssl-1.0.2q\demos\easy_tls\easy-tls.c + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD STYLE LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright 1999 Bodo Moeller. All rights reserved. + +This is free software; you can redistributed and/or modify it +unter the terms of either +- the GNU General Public License as published by the +Free Software Foundation, version 1, or (at your option) +any later version, +or +- the following license: +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that each of the following +conditions is met: + +1. Redistributions qualify as "freeware" or "Open Source Software" under +one of the following terms: + +(a) Redistributions are made at no charge beyond the reasonable cost of +materials and delivery. + +(b) Redistributions are accompanied by a copy of the Source Code +or by an irrevocable offer to provide a copy of the Source Code +for up to three years at the cost of materials and delivery. +Such redistributions must allow further use, modification, and +redistribution of the Source Code under substantially the same +terms as this license. + +2. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +3. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +4. All advertising materials mentioning features or use of this +software must display the following acknowledgment: +"This product includes software developed by Bodo Moeller." +(If available, substitute umlauted o for oe.) + +5. Redistributions of any form whatsoever must retain the following +acknowledgment: +"This product includes software developed by Bodo Moeller." + +THIS SOFTWARE IS PROVIDED BY BODO MOELLER ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BODO MOELLER OR +HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +> BSD- 2 Clause + +openssl-1.0.2q.tar.gz\openssl-1.0.2q.tar\openssl-1.0.2q\crypto\seed\seed.c + +Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Neither the name of author nor the names of its contributors may +be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + +> Creative Commons Attribution 4.0 + +openssl-1.0.2q.tar.gz\openssl-1.0.2q.tar\openssl-1.0.2q\ssl\heartbeat_test.c + +Creative Commons Attribution 4.0 International (CC By 4.0) +http://creativecommons.org/licenses/by/4.0/deed.en_US + +>>> pcre-8.41-1.ph2 + +PCRE LICENCE +------------ + +PCRE is a library of functions to support regular expressions whose syntax +and semantics are as close as possible to those of the Perl 5 language. + +Release 8 of PCRE is distributed under the terms of the "BSD" licence, as +specified below. The documentation for PCRE, supplied in the "doc" +directory, is distributed under the same terms as the software itself. The data +in the testdata directory is not copyrighted and is in the public domain. + +The basic library functions are written in C and are freestanding. Also +included in the distribution is a set of C++ wrapper functions, and a +just-in-time compiler that can be used to optimize pattern matching. These +are both optional features that can be omitted when the library is built. + + +THE BASIC LIBRARY FUNCTIONS +--------------------------- + +Written by: Philip Hazel +Email local part: ph10 +Email domain: cam.ac.uk + +University of Cambridge Computing Service, +Cambridge, England. + +Copyright (c) 1997-2017 University of Cambridge +All rights reserved. + + +PCRE JUST-IN-TIME COMPILATION SUPPORT +------------------------------------- + +Written by: Zoltan Herczeg +Email local part: hzmester +Emain domain: freemail.hu + +Copyright(c) 2010-2017 Zoltan Herczeg +All rights reserved. + + +STACK-LESS JUST-IN-TIME COMPILER +-------------------------------- + +Written by: Zoltan Herczeg +Email local part: hzmester +Emain domain: freemail.hu + +Copyright(c) 2009-2017 Zoltan Herczeg +All rights reserved. + + +THE C++ WRAPPER FUNCTIONS +------------------------- + +Contributed by: Google Inc. + +Copyright (c) 2007-2012, Google Inc. +All rights reserved. + + +THE "BSD" LICENCE +----------------- + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +Neither the name of the University of Cambridge nor the name of Google +Inc. nor the names of their contributors may be used to endorse or +promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +End + +ADDITIONAL LICENSE INFORMATION: + +> BSD 2 clause + +pcre-8.41.tar.bz2\pcre-8.41.tar\pcre-8.41\sljit\sljitConfigInternal.h + +Copyright Zoltan Herczeg (hzmester@freemail.hu). All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are +permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of +conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list +of conditions and the following disclaimer in the documentation and/or other materials +provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER(S) OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +>MIT STYLE + +pcre-8.41.tar.bz2\pcre-8.41.tar\pcre-8.41\aclocal.m4 + +Copyright (C) 1996-2014 Free Software Foundation, Inc. + +Copyright (C) 1996-2014 Free Software Foundation, Inc. + +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, to the extent permitted by law; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + +>>> popt-1.16-5.ph2 + +Copyright (c) 1998 Red Hat Software + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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 +X CONSORTIUM 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. + +Except as contained in this notice, the name of the X Consortium shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from the X Consortium. + +>>> shadow-4.2.1-16.ph2 + +Copyright (c) 1991 - 1994, Julianne Frances Haugh +Copyright (c) 1996 - 2000, Marek Michalkiewicz +Copyright (c) 2000 - 2006, Tomasz Kloczko +Copyright (c) 2007 - 2011, Nicolas François +All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1 Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer +2 Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution +3 The name of the copyright holders or contributors may not be used to +endorse or promote products derived from this software without +specific prior written permission + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED IN NO EVENT SHALL THE COPYRIGHT +HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE + + +ADDITIONAL LICENSE INFORMATION: + +> GPL 2.0 + +shadow-421tarxz\shadow-421tar\shadow-421\src\vipwc + +Copyright (c) 1997 , Guy Maor +Copyright (c) 1999 - 2000, Marek Michalkiewicz +Copyright (c) 2002 - 2006, Tomasz Kloczko +Copyright (c) 2007 - 2013, Nicolas François +All rights reserved + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE See the GNU +General Public License for more details + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc, 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA + + +udbachktgz + + +> BSD Style + +shadow-421tarxz\shadow-421tar\shadow-421\src\login_nopamc + +Copyright 1995 by Wietse Venema All rights reserved Individual files +may be covered by other copyrights (as noted in the file itself) + +This material was originally written and compiled by Wietse Venema at +Eindhoven University of Technology, The Netherlands, in 1990, 1991, +1992, 1993, 1994 and 1995 + +Redistribution and use in source and binary forms are permitted +provided that this entire copyright notice is duplicated in all such +copies + +This software is provided "as is" and without any expressed or implied +warranties, including, without limitation, the implied warranties of +merchantibility and fitness for any particular purpose + + +> Public Domain + +shadow-421tarxz\shadow-421tar\shadow-421\man\zh_TW\man1\newgrp1 + +Original author unknown This man page is in the public domain +Modified Sat Oct 9 17:46:48 1993 by faith@csuncedu +TH NEWGRP 1 "9 October 1993" "Linux 12" "Linux Programmer's Manual" + + +> GPL 3.0 + +shadow-421tarxz\shadow-421tar\shadow-421\man\tr\man1\chfn.1 + +chfn.1 -- change your finger information +(c) 1994 by salvatore valente +this program is free software. you can redistribute it and +modify it under the terms of the gnu general public license. +there is no warranty. + +> MIT-Style + +shadow-421tarxz\shadow-421tar\shadow-421\aclocalm4 + +Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +Inc +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, to the extent permitted by law; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE + + +> BSD + +[PLEASE NOTE: VMWARE, INC ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD LICENSE THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE] + +shadow-421tarxz\shadow-421tar\shadow-421\man\tr\man1\passwd1 + +Copyright Red Hat, Inc, 1998, 1999, 2002 + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1 Redistributions of source code must retain the above copyright +notice, and the entire permission notice in its entirety, +including the disclaimer of warranties +2 Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution +3 The name of the author may not be used to endorse or promote +products derived from this software without specific prior +written permission + +ALTERNATIVELY, this product may be distributed under the terms of +the GNU Public License, in which case the provisions of the GPL are +required INSTEAD OF the above restrictions (This clause is +necessary due to a potential bad interaction between the GPL and +the restrictions contained in a BSD-style copyright) + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE + +Copyright (c) Cristian Gafton, 1998, + + + +> LDP General Public License 1.0 + +shadow-421tarxz\shadow-421tar\shadow-421\man\hu\man1\su1 + +You may copy, distribute and modify under the terms of the LDP General +Public License as specified in the LICENSE file that comes with the +gnumaniak distribution + +The author kindly requests that no comments regarding the "better" +suitability or up\-to\-date notices of any info documentation alternative +is added without contacting him first + +(C) 1999 Ragnar Hojland Espinosa + +GNU su man page +man pages are NOT obsolete! + +TH su 1 "18 August 1999" "GNU Shell Utilities 20" + +>>> sqlite-3.22.0-3.ph2 + +The author disclaims copyright to this source code. In place of +a legal notice, here is a blessing: + +May you do good and not evil. +May you find forgiveness for yourself and forgive others. +May you share freely, never taking more than you give. + +ADDITIONAL LICENSE INFORMATION: + +> MIT-Style + +sqlite-autoconf-3220000.tar.gz\sqlite-autoconf-3220000.tar\sqlite-autoconf-3220000\aclocal.m4 + +Copyright (C) 1996-2014 Free Software Foundation, Inc. + +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, to the extent permitted by law; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + +>>> sudo-1.8.20p2-5.ph2 + +Sudo is distributed under the following license: + +Copyright (c) 1994-1996, 1998-2017 +Todd C. Miller + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Sponsored in part by the Defense Advanced Research Projects +Agency (DARPA) and Air Force Research Laboratory, Air Force +Materiel Command, USAF, under agreement number F39502-99-1-0512. + +The file redblack.c bears the following license: + +Copyright (c) 2001 Emin Martinian + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that neither the name of Emin +Martinian nor the names of any contributors are be used to endorse or +promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The file reallocarray.c bears the following license: + +Copyright (c) 2008 Otto Moerbeek + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +The files getcwd.c, glob.c, glob.h, snprintf.c and sudo_queue.h bear the +following license: + +Copyright (c) 1989, 1990, 1991, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The file fnmatch.c bears the following license: + +Copyright (c) 2011, VMware, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +Neither the name of the VMware, Inc. nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL VMWARE, INC. OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The file getopt_long.c bears the following license: + + +Copyright (c) 2000 The NetBSD Foundation, Inc. +All rights reserved. + +This code is derived from software contributed to The NetBSD Foundation +by Dieter Baron and Thomas Klausner. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +The file inet_pton.c bears the following license: + +Copyright (c) 1996 by Internet Software Consortium. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE +CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +The embedded copy of zlib bears the following license: + +Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu + +> PUBLIC DOMAIN + +sudo-1.8.20p2.tar.gz\sudo-1.8.20p2.tar\sudo-1.8.20p2\lib\util\regress\glob\globtest.c + +Public domain, 2008, Todd C. Miller Todd.Miller@courtesan.com + +>>> vim-8.0.0533-6.ph2 + +Vim is Charityware. You can use and copy it as much as you like, but you are +encouraged to make a donation to help orphans in Uganda. Please read the file +"runtime/doc/uganda.txt" for details (do ":help uganda" inside Vim). + +Summary of the license: There are no restrictions on using or distributing an +unmodified copy of Vim. Parts of Vim may also be distributed, but the license +text must always be included. For modified versions a few restrictions apply. +The license is GPL compatible, you may compile Vim with GPL libraries and +distribute it. + +ADDITIONAL LICENSE INFORMATION: + +>MIT + +vim-8.0.0533\runtime\autoload\netrwFileHandlers.vim + +Copyright (C) 1999-2012 Charles E. Campbell {{{1 +Permission is hereby granted to use and distribute this code, +with or without modifications, provided that this copyright +notice is copied with it. Like anything else that's free, +netrwFileHandlers.vim is provided *as is* and comes with no +warranty of any kind, either expressed or implied. In no +event will the copyright holder be liable for any damages +resulting from the use of this software. + +>GPL 3.0 + +vim-8.0.0533\runtime\plugin\tarPlugin.vim + +tarPlugin.vim -- a Vim plugin for browsing tarfiles +Original was copyright (c) 2002, Michael C. Toren +Modified by Charles E. Campbell +Distributed under the GNU General Public License. + +>GPL 2.0 + +vim-8.0.0533\runtime\tools\efm_perl.pl + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE GPL 2.PLEASE SEE THE APPENDIX TO REVIEW THE FULL TEXT OF THE GPL 2.0. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright (c) 2001 by Joerg Ziefle +You may use and distribute this software under the same terms as Perl itself. + +>Public Domain + +vim-8.0.0533\src\tee\tee.c + +Copyright (c) 1996, Paul Slootman + +Author: Paul Slootman +(paul@wurtel.hobby.nl, paul@murphy.nl, paulS@toecompst.nl) +Modifications for MSVC: Yasuhiro Matsumoto + +This source code is released into the public domain. It is provided on an +as-is basis and no responsibility is accepted for its failure to perform +as expected. It is worth at least as much as you paid for it! + +>>> xz-5.2.3-2.ph2 + +Author: Lasse Collin +This file has been put into the public domain. +You can do whatever you want with this file. + +ADDITIONAL LICENSE INFORMATION: + +> GPL 2.0 + +xz-5.2.3.tar.xz\xz-5.2.3.tar\xz-5.2.3\src\scripts\xzmore.in + +Copyright (C) 2001, 2002, 2007 Free Software Foundation +Copyright (C) 1992, 1993 Jean-loup Gailly + +Modified for XZ Utils by Andrew Dudman and Lasse Collin. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +> MIT-Style + +xz-5.2.3.tar.xz\xz-5.2.3.tar\xz-5.2.3\m4\visibility.m4 + +Copyright (C) 2005, 2008-2010 Free Software Foundation, Inc. +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. + +> LGPL 2.1 + +xz-5.2.3.tar.xz\xz-5.2.3.tar\xz-5.2.3\lib\ getopt1.c + +Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006 +Free Software Foundation, Inc. +This file is part of the GNU C Library. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +> GPL 3.0 + +xz-5.2.3.tar.xz\xz-5.2.3.tar\xz-5.2.3\COPYING.GPLv3 + +License: GPL 3.0 + +>>> zlib-1.2.11-1.ph2 + +Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu + +ADDITIONAL LICENSE INFORMATION: + +> GPL 2.0 + +zlib-1.2.11.tar.gz\zlib-1.2.11.tar\zlib-1.2.11\contrib\ada\zlib.ads + +Copyright (C) 20022004 Dmitriy Anisimkov + +This library is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + +This library is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this library; if not, write to the Free Software Foundation, +Inc., 59 Temple Place Suite 330, Boston, MA 021111307, USA. + +As a special exception, if other files instantiate generics from this +unit, or you link this unit with other files to produce an executable, +this unit does not by itself cause the resulting executable to be +covered by the GNU General Public License. This exception does not +however invalidate any other reasons why the executable file might be +covered by the GNU Public License. + +> BSD-Style + +zlib-1.2.11.tar.gz\zlib-1.2.11.tar\zlib-1.2.11\contrib\amd64\ amd64-match.S + +This is free software; you can redistribute it and/or modify it +under the terms of the BSD License. Use by owners of Che Guevarra +parafernalia is prohibited, where possible, and highly discouraged +elsewhere. + +> MIT-Style (Boost Software License) + +zlib-1.2.11.tar.gz\zlib-1.2.11.tar\zlib-1.2.11\contrib\dotzlib\LICENSE_1_0.txt + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +> Public Domain + +zlib-1.2.11.tar.gz\zlib-1.2.11.tar\zlib-1.2.11\examples\ fitblk.c + +fitblk.c: example of fitting compressed output to a specified size +Not copyrighted -- provided to the public domain +Version 1.1 25 November 2004 Mark Adler + +--------------- SECTION 4: GNU General Public License, V2.0 ---------- + +GNU General Public License, V2.0 is applicable to the following component(s). + + +>>> e2fsprogs-1.43.4-2.ph2 + +Written by Theodore Ts'o, Copyright 2007, 2008, 2009. + +This file may be redistributed under the terms of the GNU Public License, version 2. + +ADDITIONAL LICENSE INFORMATION : + +> GPL 3.0 + +e2fsprogs-1.43.4.tar.gz\e2fsprogs-1.43.4.tar\e2fsprogs-1.43.4\contrib\fallocate.c + +Copyright (C) 2008 Red Hat, Inc. All rights reserved. +Written by Eric Sandeen + +cvtnum routine taken from xfsprogs, +Copyright (c) 2003-2005 Silicon Graphics, Inc. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as +published by the Free Software Foundation. + +This program is distributed in the hope that it would be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + +> Public Domain + +e2fsprogs-1.43.4.tar.gz\e2fsprogs-1.43.4.tar\e2fsprogs-1.43.4\config\mkinstalldirs + +mkinstalldirs --- make directory hierarchy +Author: Noah Friedman +Created: 1993-05-16 +Public domain. + +> LGPL 2.0 + +e2fsprogs-1.43.4.tar.gz\e2fsprogs-1.43.4.tar\e2fsprogs-1.43.4\e2fsck\mtrace.c + +Copyright (C) 1991, 1992 Free Software Foundation, Inc. +Written April 2, 1991 by John Gilmore of Cygnus Support. +Based on mcheck.c by Mike Haertel. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with this library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. + +> MIT-Style + +e2fsprogs-1.43.4.tar.gz\e2fsprogs-1.43.4.tar\e2fsprogs-1.43.4\aclocal.m4 + +Copyright (C) 1996-2013 Free Software Foundation, Inc. + +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, to the extent permitted by law; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + +> BSD-3 Clause + +e2fsprogs-1.43.4.tar.gz\e2fsprogs-1.43.4.tar\e2fsprogs-1.43.4\lib\uuid\COPYING + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +> LGPL 3.0 + +e2fsprogs-1.43.4.tar.gz\e2fsprogs-1.43.4.tar\e2fsprogs-1.43.4\lib\blkid\blkid.h.in + +Copyright (C) 2001 Andreas Dilger +Copyright (C) 2003 Theodore Ts'o + +This file may be redistributed under the terms of the GNU Lesser General Public License. + +>>> gcc-6.3.0-7.ph2 + +Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING. If not, write to +the Free Software Foundation, 51 Franklin Street, Fifth Floor, +Boston MA 02110-1301, USA. + +ADDITIONAL LICENSE INFORMATION: + +> MIT-Style + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\boehm-gc\cord\cordbscs.c + +Copyright (c) 1993-1994 by Xerox Corporation. All rights reserved. + +THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + +Permission is hereby granted to use or copy this program +for any purpose, provided the above notices are retained on all copies. +Permission to modify the code and to distribute modified code is granted, +provided the above notices are retained, and a notice that the code was +modified is included with the above copyright notice. + +> GPL 3.0 + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\boehm-gc\testsuite\boehm-gc.c\c.exp + +Copyright (C) 2011 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING3. If not see +. + +> GFDL 1.3 + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\gcc\doc\gcov.texi + +Copyright (C) 1996-2013 Free Software Foundation, Inc. +This is part of the GCC manual. +For copying conditions, see the file gcc.texi. + +Copyright @copyright{} 1996-2013 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``GNU General Public License'' and ``Funding +Free Software'', the Front-Cover texts being (a) (see below), and with +the Back-Cover Texts being (b) (see below). A copy of the license is +included in the gfdl(7) man page. + +> BSD with Patent grant + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\gcc\go\gofrontend\LICENSE + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. +Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. + +> LGPL 2.1 + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\gcc\testsuite\gcc.dg\compat\generate-random.h + +Copyright (C) 2004 Free Software Foundation + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with the GNU C Library; if not, write to the Free +Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +> LGPL 3.0 + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\gcc\stab.def + +Table of DBX symbol codes for the GNU system. +Copyright (C) 1988-2013 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 3 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING3. If +not see . + +> LGPL 2.0 + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\include\demangle.h + +Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002, +2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License +as published by the Free Software Foundation; either version 2, or +(at your option) any later version. + +In addition to the permissions in the GNU Library General Public +License, the Free Software Foundation gives you unlimited +permission to link the compiled version of this file into +combinations with other programs, and to distribute those +combinations without any restriction coming from the use of this +file. (The Library Public License restrictions do apply in other +respects; for example, they cover modification of the file, and +distribution when not linked into a combined executable.) + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +02110-1301, USA. + +> Public Domain + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libffi\src\dlmalloc.c + +This is a version (aka dlmalloc) of malloc/free/realloc written by +Doug Lea and released to the public domain, as explained at +http://creativecommons.org/licenses/publicdomain. Send questions, +comments, complaints, performance data, etc to dl@cs.oswego.edu. + +> MIT + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libffi\LICENSE + +Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others. +See source files for details. + +Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +> LGPL 2.1 + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libffi\msvcc.sh + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE LGPL 2.1 LICENSE THE TEXT OF WHICH IS SET FORTH IN THE APPENDIX. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +BEGIN LICENSE BLOCK +Version: MPL 1.1/GPL 2.0/LGPL 2.1 + +The contents of this file are subject to the Mozilla Public License Version +1.1 (the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at +http://www.mozilla.org/MPL/ + +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +for the specific language governing rights and limitations under the +License. + +The Original Code is the MSVC wrappificator. + +The Initial Developer of the Original Code is +Timothy Wall . +Portions created by the Initial Developer are Copyright (C) 2009 +the Initial Developer. All Rights Reserved. + +Contributor(s): +Daniel Witte + +Alternatively, the contents of this file may be used under the terms of +either the GNU General Public License Version 2 or later (the "GPL"), or +the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +in which case the provisions of the GPL or the LGPL are applicable instead +of those above. If you wish to allow use of your version of this file only +under the terms of either the GPL or the LGPL, and not to allow others to +use your version of this file under the terms of the MPL, indicate your +decision by deleting the provisions above and replace them with the notice +and other provisions required by the GPL or the LGPL. If you do not delete +the provisions above, a recipient may use your version of this file under +the terms of any one of the MPL, the GPL or the LGPL. + +END LICENSE BLOCK + +> GPL 3.0 (with runtime library exception) + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libgcc\config\aarch64\crti.S + +Machine description for AArch64 architecture. +Copyright (C) 2009-2013 Free Software Foundation, Inc. +Contributed by ARM Ltd. + +This file is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3, or (at your option) any +later version. + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +. + +> LGPL 2.1(with linking exception) + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libgcc\config\c6x\sfp-machine.h + +Copyright (C) 2010-2013 Free Software Foundation, Inc. + +This files is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +In addition to the permissions in the GNU Lesser General Public +License, the Free Software Foundation gives you unlimited +permission to link the compiled version of this file into +combinations with other programs, and to distribute those +combinations without any restriction coming from the use of this +file. (The Lesser General Public License restrictions do apply in +other respects; for example, they cover modification of the file, +and distribution when not linked into a combine executable.) + +This file is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with GCC; see the file COPYING.LIB. If not see +. + +> GPL 2.0 (with linking exception) + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libiberty\testsuite\test-expandargv.c + +Copyright (C) 2006 Free Software Foundation, Inc. +Written by Carlos O'Donell + +This file is part of the libiberty library, which is part of GCC. + +This file is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combined +executable.) + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +> MIT-Style + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libjava\classpath\external\jsr166\readme + +Copyright 2002-2004 Sun Microsystems, Inc. All rights reserved. Use is +subject to the following license terms. + +"Sun hereby grants you a non-exclusive, worldwide, non-transferrable +license to use and distribute the Java Software technologies as part +of a larger work in source and binary forms, with or without +modification, provided that the following conditions are met: + +-Neither the name of or trademarks of Sun may be used to endorse or +promote products derived from the Java Software technology without +specific prior written permission. + +-Redistributions of source or binary code must be accompanied by the +following notice and disclaimers: + +Portions copyright Sun Microsystems, Inc. Used with kind permission. + +This software is provided AS IS, without a warranty of any kind. ALL +EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND +WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PUPOSE OR +NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN +MICROSYSTEMS, INC. AND ITS LICENSORS SHALL NOT BE LIABLE +FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF +USING, MODIFYING OR DISTRIBUTING THE SOFTWARE OR ITS +DERIVATIVES. IN NO EVENT WILL SUN MICROSYSTEMS, INC. OR +ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR +DATA, OR FOR DIRECT, INDIRECT,CONSQUENTIAL, INCIDENTAL +OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF +THE THEORY OR LIABILITY, ARISING OUT OF THE USE OF OR +INABILITY TO USE SOFTWARE, EVEN IF SUN MICROSYSTEMS, INC. +HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +You acknowledge that Software is not designed, licensed or intended for +use in the design, construction, operation or maintenance of any nuclear +facility." + +> MIT + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libsanitizer\LICENSE.TXT + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MIT LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +============================================================================== +compiler_rt License +============================================================================== +The compiler_rt library is dual licensed under both the University of Illinois +"BSD-Like" license and the MIT license. As a user of this code you may choose +to use it under either license. As a contributor, you agree to allow your code +to be used under both. + +Full text of the relevant licenses is included below. +============================================================================== +University of Illinois/NCSA +Open Source License + +Copyright (c) 2009-2012 by the contributors listed in CREDITS.TXT + +All rights reserved. + +Developed by: + +LLVM Team + +University of Illinois at Urbana-Champaign + +http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +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: + +Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimers. + +Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimers in the +documentation and/or other materials provided with the distribution. + +Neither the names of the LLVM Team, University of Illinois at +Urbana-Champaign, nor the names of its contributors may be used to +endorse or promote products derived from this Software without specific +prior written permission. + +THE 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 +CONTRIBUTORS 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 WITH THE +SOFTWARE. +============================================================================== +Copyright (c) 2009-2012 by the contributors listed in CREDITS.TXT + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. +============================================================================== +Copyrights and Licenses for Third Party Software Distributed with LLVM: +============================================================================== +The LLVM software contains code written by third parties. Such software will +have its own individual LICENSE.TXT file in the directory in which it appears. +This file will describe the copyrights, license, and restrictions which apply +to that code. + +The disclaimer of warranty in the University of Illinois Open Source License +applies to all code in the LLVM Distribution, and nothing in any of the +other licenses gives permission to use the names of the LLVM Team or the +University of Illinois to endorse or promote products derived from this +Software. + +The following pieces of software have additional or alternate copyrights, +licenses, and/or restrictions: + +Program Directory +------- --------- +mach_override lib/interception/mach_override + +> GFDL 1.2 + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libstdc++-v3\doc\html\index.html + +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation +License, Version 1.2 or any later version published by the +Free Software Foundation; with no Invariant Sections, with no +Front-Cover Texts, and with no Back-Cover Texts. + +> Project Gutenberg license + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\libgo\go\compress\testdata\Mark.Twain- +Tom.Sawyer.txt + +The Project Gutenberg EBook of The Adventures of Tom Sawyer, Complete +by Mark Twain (Samuel Clemens) + +This eBook is for the use of anyone anywhere at no cost and with +almost no restrictions whatsoever. You may copy it, give it away or +re-use it under the terms of the Project Gutenberg License included +with this eBook or online at www.gutenberg.net + +> BSD + +gcc-6.3.0.tar.bz2\gcc-6.3.0.tar\gcc-6.3.0\mkdep + +Copyright (c) 1987 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +advertising materials, and other materials related to such +distribution and use acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +>>> iproute2-4.10.0-3.ph2 + +Copyright (C) 1999 Pavel Golubev +Copyright (C) 2001-2004 Lubomir Bulej + +chkconfig: 2345 11 89 +description: sets up CBQ-based traffic control + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, see . + +ADDITIONAL LICENSE INFORMATION: + +> GPL 3.0 + +iproute2-4.10.0.tar.xz\iproute2-4.10.0.tar\iproute2-4.10.0\include\linux\if_bonding.h + +(c) Copyright 1999, Thomas Davis, tadavis@lbl.gov + +This software may be used and distributed according to the terms +of the GNU Public License, incorporated herein by reference. + +> BSD- 3 Clause + +iproute2-4.10.0.tar.xz\iproute2-4.10.0.tar\iproute2-4.10.0\include\linux\can.h + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD- 3 CLAUSE LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Authors: Oliver Hartkopp +Urs Thuermann +Copyright (c) 2002-2007 Volkswagen Group Electronic Research +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of Volkswagen nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +Alternatively, provided that this notice is retained in full, this +software may be distributed under the terms of the GNU General +Public License ("GPL") version 2, in which case the provisions of the +GPL apply INSTEAD OF those given above. + +The provided data structures and external interfaces from this code +are not restricted to be used by modules with a GPL compatible license. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +> BSD- 3 Clause + +iproute2-4.10.0.tar.xz\iproute2-4.10.0.tar\iproute2-4.10.0\include\netinet\tcp.h + +Copyright (c) 1982, 1986, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +> Public Domain + +iproute2-4.10.0.tar.xz\iproute2-4.10.0.tar\iproute2-4.10.0\ip\routel + +Script created by: Stephen R. van den Berg , 1999/04/18 +Donated to the public domain. + +>>> iptables-1.6.1-4.ph2 + +Copyright (C) 2000-2002 Joakim Axelsson +Patrick Schaaf +Martin Josefsson +Copyright (C) 2003-2011 Jozsef Kadlecsik + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License version 2 as +published by the Free Software Foundation. + +ADDITIONAL LICENSE INFORMATION: + +> GPL 3.0 + +iptables-1.6.1.tar.bz2\iptables-1.6.1.tar\iptables-1.6.1\extensions\libip6t_HL.c + +IPv6 Hop Limit Target module +Maciej Soltysiak +Based on HW's ttl target +This program is distributed under the terms of GNU GPL. + +> LGPL 2.0 + +iptables-1.6.1.tar.bz2\iptables-1.6.1.tar\iptables-1.6.1\iptables\getethertype.c + +This file was part of the NYS Library. + +The NYS Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +> Artistic 2.0 + +iptables-1.6.1.tar.bz2\iptables-1.6.1.tar\iptables-1.6.1\iptables\iptables-apply + +Copyright © Martin F. Krafft +Released under the terms of the Artistic Licence 2.0 + +> MIT + +iptables-1.6.1.tar.bz2\iptables-1.6.1.tar\iptables-1.6.1\utils\pf.os + +SYN signatures. Those signatures work for SYN packets only (duh!). + +(C) Copyright 2000-2003 by Michal Zalewski +(C) Copyright 2003 by Mike Frantzen + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +>>> linux-esx-4.9.154-1.ph2 + +Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. +Written by David Howells (dhowells@redhat.com) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public Licence +as published by the Free Software Foundation; either version +2 of the Licence, or (at your option) any later version. + +ADDITIONAL LICENSE INFORMATION: + +> MIT + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\arm\boot\dts\arm-realview-pb1176.dts + +Copyright 2014 Linaro Ltd + +Permission 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: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE 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. + +> OpenSSL + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\linux-4.9.154\arch\arm\crypto\aes-armv4.S + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE OPENSSL LICENSE.PLEASE SEE BELOW FOR THE FULL TEXT OF THE OPENSSL LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE]. + +Written by Andy Polyakov for the OpenSSL +project. The module is, however, dual licensed under OpenSSL and +CRYPTOGAMS licenses depending on where you obtain it. For further +details see http://www.openssl.org/~appro/cryptogams/. + + +> GPL 3.0 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\linux-4.9.154\arch\arm\mach-imx\pm-imx27.c + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License. + +> LGPL 2.0 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\linux-4.9.154\arch\arm\mach-orion5x\dns323-setup.c + +Copyright (C) 2010 Benjamin Herrenschmidt + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +> BSD- Style + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\arm\nwfpe\milieu.h + +his C header file is part of the SoftFloat IEC/IEEE Floating-point +Arithmetic Package, Release 2. + +Written by John R. Hauser. This work was made possible in part by the +International Computer Science Institute, located at Suite 600, 1947 Center +Street, Berkeley, California 94704. Funding was partially provided by the +National Science Foundation under grant MIP-9311980. The original version +of this code was written as part of a project to build a fixed-point vector +processor in collaboration with the University of California at Berkeley, +overseen by Profs. Nelson Morgan and John Wawrzynek. More information +is available through the Web page +http://www.jhauser.us/arithmetic/SoftFloat-2b/SoftFloat-source.txt + +THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort +has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT +TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO +PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY +AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE. + +Derivative works are acceptable, even for commercial purposes, so long as +(1) they include prominent notice that the work is derivative, and (2) they +include prominent notice akin to these three paragraphs for those parts of +this code that are retained. + +> BSD- 3 Clause + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\blackfin\Clear_BSD.txt + +Copyright (c) 2012, Analog Devices, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the +disclaimer below) provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the +distribution. + +* Neither the name of Analog Devices, Inc. nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE +GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT +HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> BSD-3 Clause + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\blackfin\include\asm\bfin_pfmon.h + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD- 3 CLAUSE LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright 2005-2011 Analog Devices Inc. + +Licensed under the Clear BSD license or GPL-2 (or later). + +> BSD- 2 Clause + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\cris\arch-v10\lib\memset.c + +Copyright (C) 1999-2005 Axis Communications. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Neither the name of Axis Communications nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS +COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +ena_linux_1.1.3.tar.gz, linux-4.4.111.tar.xz + +> MIT- Style + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\m68k\fpsp040\README + +M68040 Software Package Copyright (c) 1993, 1994 Motorola Inc. +All rights reserved. + +THE SOFTWARE is provided on an "AS IS" basis and without warranty. +To the maximum extent permitted by applicable law, +MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, +INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A +PARTICULAR PURPOSE and any warranty against infringement with +regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) +and any accompanying written materials. + +To the maximum extent permitted by applicable law, +IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER +(INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS +PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR +OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE +SOFTWARE. Motorola assumes no responsibility for the maintenance +and support of the SOFTWARE. + +You are hereby granted a copyright license to use, modify, and +distribute the SOFTWARE so long as this entire notice is retained +without alteration in any modified and/or redistributed versions, +and that such modified versions are clearly identified as such. +No licenses are granted by implication, estoppel or otherwise +under any patents or trademarks of Motorola, Inc. + +> GPL 2.0 with Special Exception + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\m68k\lib\divsi3.S + +Copyright (C) 1994, 1996, 1997, 1998 Free Software Foundation, Inc. + +This file is part of GNU CC. + +GNU CC is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file with other programs, and to distribute +those programs without any restriction coming from the use of this +file. (The General Public License restrictions do apply in other +respects; for example, they cover modification of the file, and +distribution when not linked into another program.) + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + +As a special exception, if you link this library with files +compiled with GCC to produce an executable, this does not cause +the resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why +the executable file might be covered by the GNU General Public License. + +> MIT- Style + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\m68k\math-emu\fp_log.c + +Copyright (c) 1998-1999 David Huggins-Daines / Roman Zippel. + +I hereby give permission, free of charge, to copy, modify, and +redistribute this software, in source or binary form, provided that +the above copyright notice and the following disclaimer are included +in all such copies. + +THIS SOFTWARE IS PROVIDED "AS IS", WITH ABSOLUTELY NO WARRANTY, REAL +OR IMPLIED. + +> Third Party + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\microblaze\lib\memcpy.c + +Copyright (C) 2008-2009 Michal Simek +Copyright (C) 2008-2009 PetaLogix +Copyright (C) 2007 John Williams + +Reasonably optimised generic C-code for memcpy on Microblaze +This is generic C code to do efficient, alignment-aware memcpy. + +It is based on demo code originally Copyright 2001 by Intel Corp, taken from +http://www.embedded.com/showArticle.jhtml?articleID=19205567 + +Attempts were made, unsuccessfully, to contact the original +author of this code (Michael Morrow, Intel). Below is the original +copyright notice. + +This software has been developed by Intel Corporation. +Intel specifically disclaims all warranties, express or +implied, and all liability, including consequential and +other indirect damages, for the use of this program, including +liability for infringement of any proprietary rights, +and including the warranties of merchantability and fitness +for a particular purpose. Intel does not assume any +responsibility for and errors which may appear in this program +not any responsibility to update it. + +> BSD- 2 Clause + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\mips\include\asm\netlogic\xlp-hal\bridge.h + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD- 2 CLAUSE LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright 2003-2011 NetLogic Microsystems, Inc. (NetLogic). All rights +reserved. + +This software is available to you under a choice of one of two +licenses. You may choose to be licensed under the terms of the GNU +General Public License (GPL) Version 2, available from the file +COPYING in the main directory of this source tree, or the NetLogic +license below: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY NETLOGIC ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL NETLOGIC OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +> BSD + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\mips\sgi-ip22\ip22-eisa.c + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +(C) 2002 Pascal Dameme +and Marc Zyngier + +This code is released under both the GPL version 2 and BSD +licenses. Either license may be used. + +This code offers a very basic support for this EISA bus present in +the SGI Indigo-2. It currently only supports PIO (forget about DMA +for the time being). This is enough for a low-end ethernet card, +but forget about your favorite SCSI card... + +> LGPL 2.1 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\linux-4.9.97\arch\parisc\lib\memset.c + +Copyright (C) 1991, 1997 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with the GNU C Library; if not, write to the Free +Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +> GPL 1.0 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\arch\powerpc\xmon\ppc.h + +Copyright 1994, 1995, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +Free Software Foundation, Inc. +Written by Ian Lance Taylor, Cygnus Support + +This file is part of GDB, GAS, and the GNU binutils. + +GDB, GAS, and the GNU binutils are free software; you can redistribute +them and/or modify them under the terms of the GNU General Public +License as published by the Free Software Foundation; either version +1, or (at your option) any later version. + +GDB, GAS, and the GNU binutils are distributed in the hope that they +will be useful, but WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this file; see the file COPYING. If not, write to the Free +Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +> BSD- 3 Clause + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\crypto\drbg.c + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD- 3 Clause LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright Stephan Mueller , 2014 + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, and the entire permission notice in its entirety, +including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote +products derived from this software without specific prior +written permission. + +ALTERNATIVELY, this product may be distributed under the terms of +the GNU General Public License, in which case the provisions of the GPL are +required INSTEAD OF the above restrictions. (This clause is +necessary due to a potential bad interaction between the GPL and +the restrictions contained in a BSD-style copyright.) + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +> GFDL 1.1 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\Documentation\DocBook\media_api.tmpl + +Copyright 2009-2012 +LinuxTV Developers + +Permission is granted to copy, distribute and/or modify +this document under the terms of the GNU Free Documentation License, +Version 1.1 or any later version published by the Free Software +Foundation. A copy of the license is included in the chapter entitled +"GNU Free Documentation License". + +> Open Software License1.1 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\Documentation\DocBook\libata.tmpl + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE OPEN SOFTWARE LICENSE1.1 LICENSE]. PLEASE SEE APPENDIX FOR THE FULL TEXT OF THE OPEN SOFTWARE LICENSE1.1 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE] + +Copyright + +The contents of this file are subject to the Open Software License version 1.1 that can be found at +"http://fedoraproject.org/wiki/Licensing:OSL1.1" and is included herein by reference. + +Alternatively, the contents of this file may be used under the terms +of the GNU General Public License version 2 (the "GPL") as distributed +in the kernel source COPYING file, in which case the provisions of +the GPL are applicable instead of the above. If you wish to allow +the use of your version of this file only under the terms of the +GPL and not to allow others to use your version of this file under +the OSL, indicate your decision by deleting the provisions above and +replace them with the notice and other provisions required by the GPL. +If you do not delete the provisions above, a recipient may use your +version of this file under either the OSL or the GPL. + +> CC-Attribution-ShareAlike 2.0 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\Documentation\PCI\pci.txt + +A more complete resource is the third edition of "Linux Device Drivers" +by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman. +LDD3 is available for free (under Creative Commons License) from: + +http://lwn.net/Kernel/LDD3/ + +However, keep in mind that all documents are subject to "bit rot". +Refer to the source code if things are not working as described here. + +Please send questions/comments/patches about Linux PCI API to the +"Linux PCI" mailing list. + +> BSD- Style + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\Documentation\scsi\dpti.txt + +Redistribution and use in source form, with or without modification, are +permitted provided that redistributions of source code must retain the +above copyright notice, this list of conditions and the following disclaimer. + +This software is provided `as is' by Adaptec and +any express or implied warranties, including, but not limited to, the +implied warranties of merchantability and fitness for a particular purpose, +are disclaimed. In no event shall Adaptec be +liable for any direct, indirect, incidental, special, exemplary or +consequential damages (including, but not limited to, procurement of +substitute goods or services; loss of use, data, or profits; or business +interruptions) however caused and on any theory of liability, whether in +contract, strict liability, or tort (including negligence or otherwise) +arising in any way out of the use of this driver software, even if advised +of the possibility of such damage. + +> GFDL 1.2 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\Documentation\trace\ftrace.txt + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE GFDL 1.2 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright 2008 Red Hat Inc. +Author: Steven Rostedt +License: The GNU Free Documentation License, Version 1.2 +(dual licensed under the GPL v2) + +> MS-LPL + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\Documentation\usb\linux-cdc-acm.inf + +Based on INF template which was: +Copyright (c) 2000 Microsoft Corporation +Copyright (c) 2007 Microchip Technology Inc. +likely to be covered by the MLPL as found at: + + +> Public Domain + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\Documentation\vDSO\parse_vdso.c + +Written by Andrew Lutomirski, 2011-2014. + +This code is meant to be linked in to various programs that run on Linux. +As such, it is available with as few restrictions as possible. This file +is licensed under the Creative Commons Zero License, version 1.0, +available at http://creativecommons.org/publicdomain/zero/1.0/legalcode + +> GPL 2.0 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\drivers\ide\ide-cs.c + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE GPL 2.0 LICENSE. PLEASE SEE APPENDIX FOR THE FULL TEXT OF THE GPL 2.0 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +The contents of this file are subject to the Mozilla Public +License Version 1.1 (the "License"); you may not use this file +except in compliance with the License. You may obtain a copy of +the License at http://www.mozilla.org/MPL/ + +Software distributed under the License is distributed on an "AS +IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +implied. See the License for the specific language governing +rights and limitations under the License. + +The initial developer of the original code is David A. Hinds +. Portions created by David A. Hinds +are Copyright (C) 1999 David A. Hinds. All Rights Reserved. + +Alternatively, the contents of this file may be used under the +terms of the GNU General Public License version 2 (the "GPL"), in +which case the provisions of the GPL are applicable instead of the +above. If you wish to allow the use of your version of this file +only under the terms of the GPL and not to allow others to use +your version of this file under the MPL, indicate your decision +by deleting the provisions above and replace them with the notice +and other provisions required by the GPL. If you do not delete +the provisions above, a recipient may use your version of this +file under either the MPL or the GPL. + +> Apache 2.0 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\drivers\staging\android\ashmem.h + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE APACHE 2.0 LICENSE. PLEASE SEE APPENDIX FOR THE FULL TEXT OF THE APACHE 2.0 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright 2008 Google Inc. +Author: Robert Love + +This file is dual licensed. It may be redistributed and/or modified +under the terms of the Apache 2.0 License OR version 2 of the GNU +General Public License. + +> BSD- 2 Clause + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\drivers\input\keyboard\hil_kbd.c + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD- 2 Clause LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright (c) 2001 Brian S. Julin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions, and the following disclaimer, +without modification. +2. The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +Alternatively, this software may be distributed under the terms of the +GNU General Public License ("GPL"). + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + +> BSD- 4 Clause + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\drivers\net\ppp\bsd_comp.c + +Copyright (c) 1985, 1986 The Regents of the University of California. +All rights reserved. + +This code is derived from software contributed to Berkeley by +James A. Woods, derived from original work by Spencer Thomas +and Joseph Orost. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +> GPL 2.0 with Special Exception + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\fs\jffs2\LICENCE + +Copyright © 2001-2007 Red Hat, Inc. and others + +JFFS2 is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2 or (at your option) any later +version. + +JFFS2 is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with JFFS2; if not, write to the Free Software Foundation, Inc., +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + +As a special exception, if other files instantiate templates or use +macros or inline functions from these files, or you compile these +files and link them with other works to produce a work based on these +files, these files do not by themselves cause the resulting work to be +covered by the GNU General Public License. However the source code for +these files must still be made available in accordance with section (3) +of the GNU General Public License. + +This exception does not invalidate any other reasons why a work based on +this file might be covered by the GNU General Public License. + +> MIT + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\include\dt-bindings\clock\sun4i-a10-pll2.h + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MIT LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright 2015 Maxime Ripard + +Maxime Ripard + +This file is dual-licensed: you can use it either under the terms +of the GPL or the X11 license, at your option. Note that this dual +licensing only applies to this file, and not this project as a +whole. + +a) This file is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +This file is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Or, alternatively, + +b) Permission 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: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE 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. + +> LGPL 3.0 + +linux-esx-4.9.154-1.ph2.src.rpm\linux-esx-4.9.154-1.ph2.src.cpio\linux-4.9.154.tar.xz\linux-4.9.154.tar\include\uapi\linux\dm-ioctl.h + +Copyright (C) 2001 - 2003 Sistina Software (UK) Limited. +Copyright (C) 2004 - 2009 Red Hat, Inc. All rights reserved. + +This file is released under the LGPL. + +>>> logrotate-3.11.0-3.ph2 + +Copyright (c) 2006-2012 Novell, Inc. All Rights Reserved. + + +This program is free software; you can redistribute it and/or modify it under +the terms of version 2 of the GNU General Public License as published by the +Free Software Foundation. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, contact Novell, Inc. + +To contact Novell about this file by physical or electronic mail, you may find +current contact information at www.novell.com. + +ADDITIONAL LICENSE INFORMATION: + +> BSD-3 + +logrotate-3.11.0-3.ph2.src-1.rpm\logrotate-3.11.0-3.ph2.src.cpio\logrotate-3.11.0.tar.gz\logrotate-3.11.0.tar\logrotate-3.11.0\queue.h + + +Copyright (c) 1991, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +> GPL 3.0 + +logrotate-3.11.0-3.ph2.src-1.rpm\logrotate-3.11.0-3.ph2.src.cpio\logrotate-3.11.0.tar.gz\logrotate-3.11.0.tar\logrotate-3.11.0\logrotate.c + + +Copyright (C) 1995-2001 Red Hat, Inc.\n"); +fprintf(stderr, +"This may be freely redistributed under the terms of " +"the GNU Public License + +>>> mingetty-1.08-2.ph2 + +Copyright (C) 1996 Florian La Roche +Copyright (C) 2002, 2003 Red Hat, Inc +This getty can only be used as a small console getty. Look at mgetty +for a real modem getty. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version +2 of the License, or (at your option) any later version. + +>>> net-tools-1.60-11.ph2 + +Version: $Id: ax25_gr.c,v 1.4 1999/01/05 20:53:21 philip Exp $ + +Author: Bernd Eckenfels, +Copyright 1999 Bernd Eckenfels, Germany +base on Code from Jonathan Naylor + +This program is free software; you can redistribute it +and/or modify it under the terms of the GNU General +Public License as published by the Free Software +Foundation; either version 2 of the License, or (at +your option) any later version. + +>>> procps-ng-3.3.15-2.ph2 + +Copyright (C) 2010 Karel Zak +Copyright (C) 2010 Davidlohr Bueso + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + + +ADDITIONAL LICENSE INFORMATION: + +> Public Domain + +procps-ng-3.3.15.tar.xz\procps-ng-3.3.15.tar\procps-ng-3.3.15\mkinstalldirs + +mkinstalldirs --- make directory hierarchy +Author: Noah Friedman +Created: 1993-05-16 +Public domain + + +> LGPL 2.1 + +procps-ng-3.3.15.tar.xz\procps-ng-3.3.15.tar\procps-ng-3.3.15\pmap.c + +pmap.c - print process memory mapping +Copyright 2002 Albert Cahalan + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + +> LGPL 2.0 + +procps-ng-3.3.15.tar.xz\procps-ng-3.3.15.tar\procps-ng-3.3.15\proc\sig.h + +Copyright 1998-2003 by Albert Cahalan; all rights resered. +This file may be used subject to the terms and conditions of the +GNU Library General Public License Version 2, or any later version +at your option, as published by the Free Software Foundation. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Library General Public License for more details. + + +> GPL 3.0 + +procps-ng-3.3.15.tar.xz\procps-ng-3.3.15.tar\procps-ng-3.3.15\misc\git-version-gen + +Copyright (C) 2007-2011 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +>>> rpm-4.13.0.2-1.ph2 + +Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. + +NOTE: The canonical source of this file is maintained with the GNU C Library. +Bugs can be reported to bug-glibc@prep.ai.mit.edu. + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +USA. + +ADDITIONAL LICENSE INFORMATION: + +> BSD-3 + +rpm-4.13.0.2-1.ph2.src.rpm\rpm-4.13.0.2-1.ph2.src.cpio\rpm-4.13.0.2-release.tar.gz\rpm-4.13.0.2-release.tar\rpm-rpm-4.13.0.2-release\misc\fts.h + +Copyright (c) 1989, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +> LGPL 2.1 + +rpm-4.13.0.2-1.ph2.src.rpm\rpm-4.13.0.2-1.ph2.src.cpio\rpm-4.13.0.2-release.tar.gz\rpm-4.13.0.2-release.tar\rpm-rpm-4.13.0.2-release\misc\fnmatch.h + +Copyright (C) 1991,92,93,96,97,98,99,2001 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with the GNU C Library; if not, write to the Free +Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +> LGPL 2.0 + +rpm-4.13.0.2-1.ph2.src.rpm\rpm-4.13.0.2-1.ph2.src.cpio\rpm-4.13.0.2-release.tar.gz\rpm-4.13.0.2-release.tar\rpm-rpm-4.13.0.2-release\misc\fnmatch.c + +Copyright (C) 1991-1993, 1996-1999, 2000 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with this library; see the file COPYING.LIB. If not, +write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. + +> GPL 3.0 + +rpm-4.13.0.2-1.ph2.src.rpm\rpm-4.13.0.2-1.ph2.src.cpio\rpm-4.13.0.2-release.tar.gz\rpm-4.13.0.2-release.tar\rpm-rpm-4.13.0.2-release\tools\sepdebugcrcfix.c + +Copyright (C) 2013 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +> Public Domain + +rpm-4.13.0.2-1.ph2.src.rpm\rpm-4.13.0.2-1.ph2.src.cpio\rpm-4.13.0.2-release.tar.gz\rpm-4.13.0.2-release.tar\rpm-rpm-4.13.0.2-release\tools\mkinstalldirs + +Original author: Noah Friedman +Created: 1993-05-16 +Public domain. + +>>> tdnf-1.2.3-6.ph2 + +Copyright (C) 2015 VMware, Inc. All Rights Reserved. + +Licensed under the GNU General Public License v2 (the "License"); +you may not use this file except in compliance with the License. The terms +of the License are located in the COPYING file of this distribution. + +ADDITIONAL LICENSE INFORMATION: + +> LGPL2.1 + +tdnf-1.2.3.tar.gz\tdnf-1.2.3.tar\tdnf-1.2.3\tools\cli\lib\api.c + +Copyright (C) 2017 VMware, Inc. All Rights Reserved. + +Licensed under the GNU Lesser General Public License v2.1 (the "License"); +you may not use this file except in compliance with the License. The terms +of the License are located in the COPYING file of this distribution. + +>>> util-linux-2.32-1.ph2 + +Copyright (C) 2008, Karel Zak +Copyright (C) 2008, James Youngman + +This file is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This file is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + + +Based on scriptreplay.pl by Joey Hess + + +ADDITIONAL LICENSE INFORMATION: + +> GPL 3.0 + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\tools\git-version-gen + +Copyright (C) 2007-2011 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +> BSD 4 + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\text-utils\ul.c + +Copyright (c) 1980, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +> PUBLIC DOMAIN + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\text-utils\line.c + +line - read one line + +Gunnar Ritter, Freiburg i. Br., Germany, December 2000. + +Public Domain. + + +> BSD + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\text-utils\more.c + +Copyright (C) 1980 The Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms are permitted +provided that the above copyright notice and this paragraph are +duplicated in all such forms and that any documentation, +advertising materials, and other materials related to such +distribution and use acknowledge that the software was developed +by the University of California, Berkeley. The name of the +University may not be used to endorse or promote products derived +from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +> MIT + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\sys-utils\flock.1 + +Copyright 2003-2006 H. Peter Anvin - All Rights Reserved + +Permission 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: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the Software. + +THE 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. + +> BSD 3 + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\misc-utils\uuidparse.c + +uuidparse.c --- Interpret uuid encoded information. This program +violates the UUID abstraction barrier by reaching into the +guts of a UUID. + +Based on libuuid/src/uuid_time.c +Copyright (C) 1998, 1999 Theodore Ts'o. + +All alterations (C) 2017 Sami Kerola +The 3-Clause BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, and the entire permission notice in its entirety, +including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote +products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +> MIT STYLE + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\m4\compiler.m4 + +Copyright (C) 2008-2011 Free Software Foundation, Inc. +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. + +From Simon Josefsson +-- derivated from coreutils m4/warnings.m4 + +> LGPL 2.0 + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\login-utils\setpwnam.c +setpwnam.c -- edit an entry in a password database. + +(c) 1994 Salvatore Valente +This file is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +Edited 11/10/96 (DD/MM/YY ;-) by Nicolai Langfeldt (janl@math.uio.no) +to read /etc/passwd directly so that passwd, chsh and chfn can work on +machines that run NIS (previously YP). Changes will not be made to +usernames starting with +. + +This file is distributed with no warranty. + +Usage: +1) get a struct passwd from getpwnam(). +You should assume a struct passwd has an infinite number of fields, so +you should not try to create one from scratch. +2) edit the fields you want to edit. +3) call setpwnam() with the edited struct passwd. + +A _normal user_ program should never directly manipulate etc/passwd but +/use getpwnam() and (family, as well as) setpwnam(). + +But, setpwnam was made to _edit_ the password file. For use by chfn, +chsh and passwd. _I_ _HAVE_ to read and write /etc/passwd directly. Let +those who say nay be forever silent and think about how getpwnam (and +family) works on a machine running YP. + +Added checks for failure of malloc() and removed error reporting to +stderr, this is a library function and should not print on the screen, +but return appropriate error codes. +27-Jan-97 - poe@daimi.aau.dk + +Thanks to "two guys named Ian". + +$Author: poer $ +$Revision: 1.13 $ +$Date: 1997/06/23 08:26:29 $ + +> LGPL 2.1 + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\libsmartcols\COPYING + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later +version. + +The complete text of the license is available in the +../Documentation/licenses/COPYING.LGPLv2.1 file. + +> LGPL 3.0 + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\libmount\python\pylibmount.c + +Python bindings for the libmount library. + +Copyright (C) 2013, Red Hat, Inc. All rights reserved. +Written by Ondrej Oprala and Karel Zak + +This file is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version. + +This file is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this file; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +> GPL 3.0 WITH BISON PARSER EXCEPTION + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\lib\parse-date.c + +Bison implementation for Yacc-like parsers in C + +Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +As a special exception, you may create a larger work that contains +part or all of the Bison parser skeleton and distribute that work +under terms of your choice, so long as that work isn't itself a +parser generator using the skeleton or a modified version thereof +as a parser skeleton. Alternatively, if you modify or redistribute +the parser skeleton itself, you may (at your option) remove this +special exception, which will cause the skeleton and the resulting +Bison output files to be licensed under the GNU General Public +License without this special exception. + +This special exception was added by the Free Software Foundation in +version 2.2 of Bison. + +> GPL 1.0 + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\disk-utils\fdisk.c + +Copyright (C) 1992 A. V. Le Blanc (LeBlanc@mcc.ac.uk) +Copyright (C) 2012 Davidlohr Bueso + +Copyright (C) 2007-2013 Karel Zak + +This program is free software. You can redistribute it and/or +modify it under the terms of the GNU General Public License as +published by the Free Software Foundation: either version 1 or +(at your option) any later version. + +> MIT STYLE + +util-linux-2.32-1.ph2.src.rpm\util-linux-2.32-1.ph2.src.cpio\util-linux-2.32.tar.xz\util-linux-2.32.tar\util-linux-2.32\disk-utils\cfdisk.8 + +Copyright 1994 Kevin E. Martin (martin@cs.unc.edu) +Copyright (C) 2014 Karel Zak + +Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +--------------- SECTION 5: GNU General Public License, V3.0 ---------- + +GNU General Public License, V3.0 is applicable to the following component(s). + + +>>> bash-4.4.12-3.ph2 + +error.c -- Functions for handling errors. + +Copyright (C) 1993-2009 Free Software Foundation, Inc. + +This file is part of GNU Bash, the Bourne Again SHell. + +Bash is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Bash is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Bash. If not, see . + + + +ADDITIONAL LICENSE INFORMATION: + + +>GPL 3.0 WITH BISON PARSER EXCEPTION + + +bash-4.4.tar.gz\bash-4.4.tar\bash-4.4\parser-built + + +A Bison parser, made by GNU Bison 3.0.4. + +Bison interface for Yacc-like parsers in C + +Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +As a special exception, you may create a larger work that contains +part or all of the Bison parser skeleton and distribute that work +under terms of your choice, so long as that work isn't itself a +parser generator using the skeleton or a modified version thereof +as a parser skeleton. Alternatively, if you modify or redistribute +the parser skeleton itself, you may (at your option) remove this +special exception, which will cause the skeleton and the resulting +Bison output files to be licensed under the GNU General Public +License without this special exception. + +This special exception was added by the Free Software Foundation in +version 2.2 of Bison. + + +>MIT STYLE + + +bash-4.4.tar.gz\bash-4.4.tar\bash-4.4\README + + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without any warranty. + + +>GFDL 1.3 + + +bash-4.4.tar.gz\bash-4.4.tar\bash-4.4\doc\bashref.texi + + +Copyright @copyright{} 1988--2016 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. +A copy of the license is included in the section entitled +``GNU Free Documentation License''. +@end quotation + + +>SIL OPEN FONT LICENSE 1.1 + +bash-4.4.tar.gz\bash-4.4.tar\bash-4.4\doc\bashref.ps + +Copyright: Copyright (c) 1997, 2009 American Mathematical Society +Copyright: (), with Reserved Font Name CMR9. +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is in the accompanying file OFL.txt, and is also +available with a FAQ at: http://scripts.sil.org/OFL. + + +>GPL 2.0 + + +bash-4.4.tar.gz\bash-4.4.tar\bash-4.4\examples\complete\complete-examples + + + +Copyright 2002 Chester Ramey + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +TThis program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +>PUBLIC DOMAIN + + +bash-4.4.tar.gz\bash-4.4.tar\bash-4.4\support\mkinstalldirs + + +Author: Noah Friedman +Created: 1993-05-16 +Public domain + + +>BSD-4 + + +bash-4.4.tar.gz\bash-4.4.tar\bash-4.4\lib\sh\inet_aton.c + + +Copyright (c) 1983, 1990, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software +must display the following acknowledgement: +This product includes software developed by the University of +California, Berkeley and its contributors. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +- + + + +>BSD + + +bash-4.4.tar.gz\bash-4.4.tar\bash-4.4\lib\sh\inet_aton. + + +Portions Copyright (c) 1993 by Digital Equipment Corporation. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies, and that +the name of Digital Equipment Corporation not be used in advertising or +publicity pertaining to distribution of the document or software without +specific, written prior permission. + +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. +- + +>>> coreutils-8.27-3.ph2 + +Copyright (C) 2003-2017 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +ADDITIONAL LICENSE INFORMATION: + +>GFDL 1.3 + +coreutils-8.27.tar.xz\coreutils-8.27.tar\coreutils-8.27\README + + +Copyright (C) 1998-2017 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the "GNU Free +Documentation License" file as part of this distribution. + +>MIT + +coreutils-8.27.tar.xz\coreutils-8.27.tar\coreutils-8.27\gnulib-tests\inet_pton.c + + +Copyright (c) 1996,1999 by Internet Software Consortium. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE +CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + + +>BSD-3 + +coreutils-8.27.tar.xz\coreutils-8.27.tar\coreutils-8.27\lib\fts.c + +Copyright (c) 1990, 1993, 1994 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + +>GPL 3.0 WITH BISON PARSER EXCEPTION + + +coreutils-8.27.tar.xz\coreutils-8.27.tar\coreutils-8.27\lib\parse-datetime.c + +/ Bison implementation for Yacc-like parsers in C + +Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . / + +/ As a special exception, you may create a larger work that contains +part or all of the Bison parser skeleton and distribute that work +under terms of your choice, so long as that work isn't itself a +parser generator using the skeleton or a modified version thereof +as a parser skeleton. Alternatively, if you modify or redistribute +the parser skeleton itself, you may (at your option) remove this +special exception, which will cause the skeleton and the resulting +Bison output files to be licensed under the GNU General Public +License without this special exception. + +This special exception was added by the Free Software Foundation in +version 2.2 of Bison. / + +>PUBLIC DOMAIN + +coreutils-8.27.tar.xz\coreutils-8.27.tar\coreutils-8.27\lib\alloca.c + +(Mostly) portable public-domain implementation -- D A Gwyn + +This implementation of the PWB library alloca function, +which is used to allocate space off the run-time stack so +that it is automatically reclaimed upon procedure exit, +was inspired by discussions with J. Q. Johnson of Cornell. +J.Otto Tennant contributed the Cray support. + +There are some preprocessor constants that can +be defined when compiling for your specific system, for +improved efficiency; however, the defaults should be okay. + +The general concept of this implementation is to keep +track of all alloca-allocated blocks, and reclaim any +that are found to be deeper in the stack than the current +invocation. This heuristic does not reclaim storage as +soon as it becomes invalid, but it will do so eventually. + +>>> elfutils-0.169-3.ph2 + +Copyright (C) 2000, 2002, 2005 Red Hat, Inc. +This file is part of elfutils. +Written by Ulrich Drepper , 2000. + +This file is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +elfutils is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +ADDITIONAL LICENSE INFORMATION + +> LGPL 3.0 + +elfutils-0.169.tar.bz2\elfutils-0.169.tar\elfutils-0.169\lib\color.c + +[PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE LGPL 3.0 LICENSE. PLEASE SEE THE APPENDIX FOR THE FULL TEXT OF THE LGPL 3.0 LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + +Copyright (C) 2008 Red Hat, Inc. + +This file is part of elfutils. + +This file is free software; you can redistribute it and/or modify +it under the terms of either + +the GNU Lesser General Public License as published by the Free +Software Foundation; either version 3 of the License, or (at +your option) any later version + +or + +the GNU General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at +your option) any later version + +or both in parallel, as here. + +elfutils is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received copies of the GNU General Public License and +the GNU Lesser General Public License along with this program. If +not, see . + +> MIT-Style + +elfutils-0.169.tar.bz2\elfutils-0.169.tar\elfutils-0.169\aclocal.m4 + +Copyright (C) 1996-2013 Free Software Foundation, Inc. + +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, to the extent permitted by law; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + + +> LGPL 2.1 + +elfutils-0.169.tar.bz2\elfutils-0.169.tar\elfutils-0.169\libelf\elf.h + +Copyright (C) 1995-2014 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with the GNU C Library; if not, see +. + +>>> grep-3.0-4.ph2 + +Copyright (C) 2002-2017 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +ADDITIONAL LICENSE INFORMATION: + +> MIT- Style + +grep-3.0.tar.xz\grep-3.0.tar\grep-3.0\aclocal.m4 + +Copyright (C) 1996-2015 Free Software Foundation, Inc. + +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, to the extent permitted by law; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + +> GFDL 1.3 + +grep-3.0.tar.xz\grep-3.0.tar\grep-3.0\doc\grep.info + +Copyright © 1999-2002, 2005, 2008-2017 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.3 or any later version published by the Free Software +Foundation; with no Invariant Sections, with no Front-Cover Texts, +and with no Back-Cover Texts. A copy of the license is included in +the section entitled “GNU Free Documentation License”. + +> Public Domain + +grep-3.0.tar.xz\grep-3.0.tar\grep-3.0\lib\alloca.c + +alloca.c -- allocate automatically reclaimed memory +(Mostly) portable public-domain implementation -- D A Gwyn + +This implementation of the PWB library alloca function, +which is used to allocate space off the run-time stack so +that it is automatically reclaimed upon procedure exit, +was inspired by discussions with J. Q. Johnson of Cornell. +J.Otto Tennant contributed the Cray support. + +There are some preprocessor constants that can +be defined when compiling for your specific system, for +improved efficiency; however, the defaults should be okay. + +The general concept of this implementation is to keep +track of all alloca-allocated blocks, and reclaim any +that are found to be deeper in the stack than the current +invocation. This heuristic does not reclaim storage as +soon as it becomes invalid, but it will do so eventually. + +As a special case, alloca(0) reclaims storage without +allocating any. It is a good idea to use alloca(0) in +your main control loop, etc. to force garbage collection. + +> BSD- 3 Clause + +grep-3.0.tar.xz\grep-3.0.tar\grep-3.0\lib\fts.c + + +Copyright (c) 1990, 1993, 1994 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +>>> gzip-1.8-1.ph2 + +Copyright (C) 2010-2016 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +ADDITIONAL LICENSE INFORMATION: + +> GFDL 1.3 + +gzip-1.8.tar.xz\gzip-1.8.tar\gzip-1.8\doc\gzip.info + +Copyright © 1992, 1993 Jean-loup Gailly + +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.3 or any later version published by the Free Software +Foundation; with no Invariant Sections, with no Front-Cover Texts, +and with no Back-Cover Texts. A copy of the license is included in +the section entitled “GNU Free Documentation License”. + +> MIT-Style + +gzip-1.8.tar.xz\gzip-1.8.tar\gzip-1.8\zless.1 + +Copyright \(co 2006-2007, 2015-2016 Free Software Foundation, Inc. + +Copyright \(co 1992, 1993 Jean-loup Gailly + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to process this file through troff and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. + +> Public Domain + +gzip-1.8.tar.xz\gzip-1.8.tar\gzip-1.8\unlzh.c + +The code in this file is directly derived from the public domain 'ar002' +written by Haruhiko Okumura. + +>>> haveged-1.9.1-4.ph2 + +Copyright 2009-2011 Gary Wuertz gary@issiweb.com +Copyright 2011 BenEleventh Consulting manolson@beneleventh.com + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +ADDITIONAL LICENSE INFORMATION: + +> MIT-Style + +haveged-1.9.1.tar.gz\haveged-1.9.1.tar\haveged-1.9.1\aclocal.m4 + +Copyright (C) 1996-2012 Free Software Foundation, Inc. + +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY, to the extent permitted by law; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + + +> LGPL 2.1 + +haveged-1.9.1.tar.gz\haveged-1.9.1.tar\haveged-1.9.1\src\oneiteration.h + +This source is an adaptation of work released as + +Copyright (C) 2006 - André Seznec - Olivier Rochecouste + +under version 2.1 of the GNU Lesser General Public License + +The original form is retained with minor variable renames for +more consistent macro itilization. See havegecollect.c for +details. + +>>> readline-7.0-2.ph2 + +Copyright (C) 1987-2015 Free Software Foundation, Inc. + +This file is part of the GNU Readline Library (Readline), a library +for reading lines of text with interactive input and history editing. + +Readline is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Readline is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Readline. If not, see . + +ADDITIONAL LICENSE INFORMATION: + +> GFDL 1.3 + +readline-7.0.tar.gz\readline-7.0.tar\readline-7.0\doc\history.info + +Copyright (C) 1988-2016 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, +Version 1.3 or any later version published by the Free Software +Foundation; with no Invariant Sections, no Front-Cover Texts, and +no Back-Cover Texts. A copy of the license is included in the +section entitled "GNU Free Documentation License". + + +> GPL 2.0 + +readline-7.0.tar.gz\readline-7.0.tar\readline-7.0\examples\rlfe\extern.h + +Copyright (c) 1993-2002 +Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) +Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) +Copyright (c) 1987 Oliver Laumann + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program (see the file COPYING); if not, write to the +Free Software Foundation, Inc., +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +rlwrap-0.30.tar.gz + +> LGPL 2.1 + +readline-7.0.tar.gz\readline-7.0.tar\readline-7.0\examples\rlwrap-0.30.tar.gz\rlwrap-0.30.tar\rlwrap-0.30\src\redblack.h + +Copyright (C) Damian Ivereigh 2000 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. See the file COPYING for details. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +> Public Domain + +readline-7.0.tar.gz\readline-7.0.tar\readline-7.0\support\mkinstalldirs + +Author: Noah Friedman +Created: 1993-05-16 +Public domain + +readline-7.0.tar.gz + +> MIT + +readline-7.0.tar.gz\readline-7.0.tar\readline-7.0\support\wcwidth.c + +Markus Kuhn -- 2007-05-26 (Unicode 5.0) + +Permission to use, copy, modify, and distribute this software +for any purpose and without fee is hereby granted. The author +disclaims all warranties with regard to this software. + +Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + +--------------- SECTION 6: GNU Lesser General Public License, V2.1 ---------- + +GNU Lesser General Public License, V2.1 is applicable to the following component(s). + + +>>> cracklib-2.9.6-8.ph2 + +A Python binding for cracklib. + +Parts of this code are based on work Copyright (c) 2003 by Domenico +Andreoli. + +Copyright (c) 2008, 2009, 2012 Jan Dittberner + +This file is part of cracklib. + +This library is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free +Software Foundation; either version 2.1 of the License, or (at your option) +any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. + +You should have received a copy of the GNU Lesser General Public License +along with this library; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +ADDITIONAL LICENSE INFORMATION: + +> Public Domain + +cracklib-2.9.6.tar.gz\cracklib-2.9.6.tar\cracklib-2.9.6\po\es.po + +translation of cracklib.po to +This file is put in the public domain. +, 2003 + +>>> glibc-2.26-13.ph2 + +Copyright (C) 1991-2017 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with the GNU C Library; if not, see +. + + +ADDITIONAL LICENSE INFORMATION: + +> + +glibc-2.26.tar.xz\glibc-2.26.tar\glibc-2.26\LICENSES + +This file contains the copying permission notices for various files in the +GNU C Library distribution that have copyright owners other than the Free +Software Foundation. These notices all require that a copy of the notice +be included in the accompanying documentation and be distributed with +binary distributions of the code, so be sure to include this file along +with any binary distributions derived from the GNU C Library. +All code incorporated from 4.4 BSD is distributed under the following +license: + +Copyright (C) 1991 Regents of the University of California. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. [This condition was removed.] +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +The DNS resolver code, taken from BIND 4.9.5, is copyrighted by UC +Berkeley, by Digital Equipment Corporation and by Internet Software +Consortium. The DEC portions are under the following license: + +Portions Copyright (C) 1993 by Digital Equipment Corporation. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies, and +that the name of Digital Equipment Corporation not be used in +advertising or publicity pertaining to distribution of the document or +software without specific, written prior permission. + +THE SOFTWARE IS PROVIDED ``AS IS'' AND DIGITAL EQUIPMENT CORP. +DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +The ISC portions are under the following license: + +Portions Copyright (c) 1996-1999 by Internet Software Consortium. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS +ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE +CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. +The Sun RPC support (from rpcsrc-4.0) is covered by the following +license: + +Copyright (c) 2010, Oracle America, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following +disclaimer in the documentation and/or other materials +provided with the distribution. + +Neither the name of the "Oracle America, Inc." nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +The following CMU license covers some of the support code for Mach, +derived from Mach 3.0: + +Mach Operating System +Copyright (C) 1991,1990,1989 Carnegie Mellon University +All Rights Reserved. + +Permission to use, copy, modify and distribute this software and its +documentation is hereby granted, provided that both the copyright +notice and this permission notice appear in all copies of the +software, derivative works or modified versions, and any portions +thereof, and that both notices appear in supporting documentation. + +CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS ``AS IS'' +CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR +ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + +Carnegie Mellon requests users of this software to return to + +Software Distribution Coordinator +School of Computer Science +Carnegie Mellon University +Pittsburgh PA 15213-3890 + +or Software.Distribution@CS.CMU.EDU any improvements or +extensions that they make and grant Carnegie Mellon the rights to +redistribute these changes. +The file if_ppp.h is under the following CMU license: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY AND +CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +The following license covers the files from Intel's "Highly Optimized +Mathematical Functions for Itanium" collection: + +Intel License Agreement + +Copyright (c) 2000, Intel Corporation + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +The name of Intel Corporation may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +The files inet/getnameinfo.c and sysdeps/posix/getaddrinfo.c are copyright +(C) by Craig Metz and are distributed under the following license: + +/ The Inner Net License, Version 2.00 + +The author(s) grant permission for redistribution and use in source and +binary forms, with or without modification, of the software and documentation +provided that the following conditions are met: + +0. If you receive a version of the software that is specifically labelled +as not being for redistribution (check the version message and/or README), +you are not permitted to redistribute that version of the software in any +way or form. +1. All terms of the all other applicable copyrights and licenses must be +followed. +2. Redistributions of source code must retain the authors' copyright +notice(s), this list of conditions, and the following disclaimer. + +3. Redistributions in binary form must reproduce the authors' copyright +notice(s), this list of conditions, and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +4. [The copyright holder has authorized the removal of this clause.] + +5. Neither the name(s) of the author(s) nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY ITS AUTHORS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +If these license terms cause you a real problem, contact the author. / +The file sunrpc/des_impl.c is copyright Eric Young: + +Copyright (C) 1992 Eric Young + +Collected from libdes and modified for SECURE RPC by Martin Kuck 1994 +This file is distributed under the terms of the GNU Lesser General +Public License, version 2.1 or later - see the file COPYING.LIB for details. +If you did not receive a copy of the license with this program, please +see to obtain a copy. + +The libidn code is copyright Simon Josefsson, with portions copyright +The Internet Society, Tom Tromey and Red Hat, Inc.: + +Copyright (C) 2002, 2003, 2004, 2011 Simon Josefsson + +This file is part of GNU Libidn. + +GNU Libidn is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +GNU Libidn is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with GNU Libidn; if not, see . + +The following notice applies to portions of libidn/nfkc.c: + +This file contains functions from GLIB, including gutf8.c and +gunidecomp.c, all licensed under LGPL and copyright hold by: + +Copyright (C) 1999, 2000 Tom Tromey +Copyright 2000 Red Hat, Inc. + +The following applies to portions of libidn/punycode.c and +libidn/punycode.h: + +This file is derived from RFC 3492bis written by Adam M. Costello. + +Disclaimer and license: Regarding this entire document or any +portion of it (including the pseudocode and C code), the author +makes no guarantees and is not responsible for any damage resulting +from its use. The author grants irrevocable permission to anyone +to use, modify, and distribute it in any way that does not diminish +the rights of anyone else to use, modify, and distribute it, +provided that redistributed derivative works do not contain +misleading author or version information. Derivative works need +not be licensed under similar terms. +Copyright (C) The Internet Society (2003). All Rights Reserved. + +This document and translations of it may be copied and furnished to +others, and derivative works that comment on or otherwise explain it +or assist in its implementation may be prepared, copied, published +and distributed, in whole or in part, without restriction of any +kind, provided that the above copyright notice and this paragraph are +included on all such copies and derivative works. However, this +document itself may not be modified in any way, such as by removing +the copyright notice or references to the Internet Society or other +Internet organizations, except as needed for the purpose of +developing Internet standards in which case the procedures for +copyrights defined in the Internet Standards process must be +followed, or as required to translate it into languages other than +English. + +The limited permissions granted above are perpetual and will not be +revoked by the Internet Society or its successors or assigns. + +This document and the information contained herein is provided on an +"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING +TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION +HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF +MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. +The file inet/rcmd.c is under a UCB copyright and the following: + +Copyright (C) 1998 WIDE Project. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +3. Neither the name of the project nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The file posix/runtests.c is copyright Tom Lord: + +Copyright 1995 by Tom Lord + +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of the copyright holder not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +Tom Lord DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL TOM LORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +The posix/rxspencer tests are copyright Henry Spencer: + +Copyright 1992, 1993, 1994, 1997 Henry Spencer. All rights reserved. +This software is not subject to any license of the American Telephone +and Telegraph Company or of the Regents of the University of California. + +Permission is granted to anyone to use this software for any purpose on +any computer system, and to alter it and redistribute it, subject +to the following restrictions: + +1. The author is not responsible for the consequences of use of this +software, no matter how awful, even if they arise from flaws in it. + +2. The origin of this software must not be misrepresented, either by +explicit claim or by omission. Since few users ever read sources, +credits must appear in the documentation. + +3. Altered versions must be plainly marked as such, and must not be +misrepresented as being the original software. Since few users +ever read sources, credits must appear in the documentation. + +4. This notice may not be removed or altered. + +The file posix/PCRE.tests is copyright University of Cambridge: + +Copyright (c) 1997-2003 University of Cambridge + +Permission is granted to anyone to use this software for any purpose on any +computer system, and to redistribute it freely, subject to the following +restrictions: + +1. This software is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +2. The origin of this software must not be misrepresented, either by +explicit claim or by omission. In practice, this means that if you use +PCRE in software that you distribute to others, commercially or +otherwise, you must put a sentence like this + +Regular expression support is provided by the PCRE library package, +which is open source software, written by Philip Hazel, and copyright +by the University of Cambridge, England. + +somewhere reasonably visible in your documentation and in any relevant +files or online help data or similar. A reference to the ftp site for +the source, that is, to + +ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ + +should also be given in the documentation. However, this condition is not +intended to apply to whole chains of software. If package A includes PCRE, +it must acknowledge it, but if package B is software that includes package +A, the condition is not imposed on package B (unless it uses PCRE +independently). + +3. Altered versions must be plainly marked as such, and must not be +misrepresented as being the original software. + +4. If PCRE is embedded in any software that is released under the GNU +General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL), +then the terms of that licence shall supersede any condition above with +which it is incompatible. + +Files from Sun fdlibm are copyright Sun Microsystems, Inc.: + +Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + +Developed at SunPro, a Sun Microsystems, Inc. business. +Permission to use, copy, modify, and distribute this +software is freely granted, provided that this notice +is preserved. + +Part of stdio-common/tst-printf.c is copyright C E Chew: + +(C) Copyright C E Chew + +Feel free to copy, use and distribute this software provided: + +1. you do not pretend that you wrote it +2. you leave this copyright notice intact. + +Various long double libm functions are copyright Stephen L. Moshier: + +Copyright 2001 by Stephen L. Moshier + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, see +. / + +>LGPL 2.1 WITH SPECIAL EXCEPTION + +glibc-2.26.tar.xz\glibc-2.26.tar\glibc-2.26\wcsmbs\isoc99_vswscanf.c + +/ Copyright (C) 1993-2017 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with the GNU C Library; if not, see +. + +As a special exception, if you link the code in this file with +files compiled with a GNU compiler to produce an executable, +that does not cause the resulting executable to be covered by +the GNU Lesser General Public License. This exception does not +however invalidate any other reasons why the executable file +might be covered by the GNU Lesser General Public License. +This exception applies to code released by its copyright holders +in files containing the exception. + +>BSD-3 + +glibc-2.26.tar.xz\glibc-2.26.tar\glibc-2.26\termios\sys\ttychars.h + +Copyright (c) 1982, 1986, 1990, 1993 +The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +4. Neither the name of the University nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + + +>GPL 2.0 + +glibc-2.26.tar.xz\glibc-2.26.tar\glibc-2.26\catgets\xopen-msg.awk + +Copyright (C) 2012-2017 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, see . + +>GPL 3.0 WITH BISON PARSER EXCEPTION + +glibc-2.26.tar.xz\glibc-2.26.tar\glibc-2.26\intl\plural.c + +/ A Bison parser, made by GNU Bison 2.7. / + +/ Bison implementation for Yacc-like parsers in C + +Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . / + +/ As a special exception, you may create a larger work that contains +part or all of the Bison parser skeleton and distribute that work +under terms of your choice, so long as that work isn't itself a +parser generator using the skeleton or a modified version thereof +as a parser skeleton. Alternatively, if you modify or redistribute +the parser skeleton itself, you may (at your option) remove this +special exception, which will cause the skeleton and the resulting +Bison output files to be licensed under the GNU General Public +License without this special exception. + +This special exception was added by the Free Software Foundation in +version 2.2 of Bison. / + +>GFDL 1.3 + +glibc-2.26.tar.xz\glibc-2.26.tar\glibc-2.26\manual\fdl-1.3.texi + +LICENSE: GFDL 1.3 + + +>LGPL 2.0 + + +glibc-2.26.tar.xz\glibc-2.26.tar\glibc-2.26\sysdeps\powerpc\power5+\fpu\s_modf.c + + +Copyright (C) 2013-2017 Free Software Foundation, Inc. +This file is part of the GNU C Library + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, see . + + +> PUBLIC DOMAIN + +glibc-2.26.tar.xz\glibc-2.26.tar\glibc-2.26\timezone\zone.tab + +
    +@(#)zone.tab	8.28
    +This file is in the public domain, so clarified as of
    +2009-05-17 by Arthur David Olson.
    +
    +>>> hawkey-2017.1-6.ph2
    +
    +Copyright (C) 2014 Red Hat, Inc.
    +
    +Licensed under the GNU Lesser General Public License Version 2.1
    +
    +This library is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this library; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +> GPL 2.0
    +
    +hawkey-2017.1.tar.gz\hawkey-2017.1.tar\hawkey-hawkey-0.6.4-1\doc\changes.rst
    +
    +Copyright (C) 2014-2015  Red Hat, Inc.
    +
    +This copyrighted material is made available to anyone wishing to use,
    +modify, copy, or redistribute it subject to the terms and conditions of
    +the GNU General Public License v.2, or (at your option) any later version.
    +This program is distributed in the hope that it will be useful, but WITHOUT
    +ANY WARRANTY expressed or implied, including the implied warranties of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
    +Public License for more details.  You should have received a copy of the
    +GNU General Public License along with this program; if not, write to the
    +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    +02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
    +source code or documentation are not subject to the GNU General Public
    +License and may only be used or replicated with the express permission of
    +Red Hat, Inc.
    +
    +>>> kmod-24-3.ph2
    +
    +Copyright (C) 2012-2013  ProFUSION embedded systems
    +
    +This program is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this library; if not, see .
    +
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +> GPL 2.0
    +
    +kmod-24.tar.xz\kmod-24.tar\kmod-24\tools\rmmod.c
    +
    +kmod-insert - insert a module into the kernel.
    +
    +Copyright (C) 2015 Intel Corporation. All rights reserved.
    +Copyright (C) 2011-2013  ProFUSION embedded systems
    +
    +This program is free software: you can redistribute it and/or modify
    +it under the terms of the GNU General Public License as published by
    +the Free Software Foundation, either version 2 of the License, or
    +(at your option) any later version.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +GNU General Public License for more details.
    +
    +You should have received a copy of the GNU General Public License
    +along with this program.  If not, see .
    +
    +>>> libgcrypt-1.8.1-2.ph2
    +
    +Copyright (C) 2013 g10 Code GmbH
    +
    +This file is part of Libgcrypt.
    +
    +Libgcrypt is free software; you can redistribute it and/or modify
    +it under the terms of the GNU Lesser General Public License as
    +published by the Free Software Foundation; either version 2.1 of
    +the License, or (at your option) any later version.
    +
    +Libgcrypt is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +GNU Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this program; if not, write to the Free Software
    +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +>
    +
    +libgcrypt-1.8.1.tar.bz2\libgcrypt-1.8.1.tar\libgcrypt-1.8.1\LICENSES
    +
    +Additional license notices for Libgcrypt.                    -- org --
    +
    +This file contains the copying permission notices for various files in
    +the Libgcrypt distribution which are not covered by the GNU Lesser
    +General Public License (LGPL) or the GNU General Public License (GPL).
    +
    +These notices all require that a copy of the notice be included
    +in the accompanying documentation and be distributed with binary
    +distributions of the code, so be sure to include this file along
    +with any binary distributions derived from the GNU C Library.
    +
    +BSD_3Clause
    +
    +For files:
    +- cipher/sha256-avx-amd64.S
    +- cipher/sha256-avx2-bmi2-amd64.S
    +- cipher/sha256-ssse3-amd64.S
    +- cipher/sha512-avx-amd64.S
    +- cipher/sha512-avx2-bmi2-amd64.S
    +- cipher/sha512-ssse3-amd64.S
    +
    ++begin_quote
    +Copyright (c) 2012, Intel Corporation
    +
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +
    +Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the
    +distribution.
    +
    +Neither the name of the Intel Corporation nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +
    +THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY
    +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR
    +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    ++end_quote
    +
    +
    +For files:
    +- random/jitterentropy-base.c
    +- random/jitterentropy.h
    +- random/rndjent.c (plus common Libgcrypt copyright holders)
    +
    ++begin_quote
    +Copyright Stephan Mueller , 2013
    +
    +[PLEASE NOTE:  VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD LICENSE.  THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.]
    +
    +License
    +=======
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, and the entire permission notice in its entirety,
    +including the disclaimer of warranties.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote
    +products derived from this software without specific prior
    +written permission.
    +
    +ALTERNATIVELY, this product may be distributed under the terms of
    +the GNU General Public License, in which case the provisions of the GPL are
    +required INSTEAD OF the above restrictions.  (This clause is
    +necessary due to a potential bad interaction between the GPL and
    +the restrictions contained in a BSD-style copyright.)
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
    +WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
    +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
    +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
    +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGE.
    ++end_quote
    +
    +X License
    +
    +For files:
    +- install.sh
    +
    ++begin_quote
    +Copyright (C) 1994 X Consortium
    +
    +Permission 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:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE 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
    +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
    +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
    +TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +
    +Except as contained in this notice, the name of the X Consortium shall not
    +be used in advertising or otherwise to promote the sale, use or other deal-
    +ings in this Software without prior written authorization from the X Consor-
    +tium.
    ++end_quote
    +
    +Public domain
    +
    +For files:
    +- cipher/arcfour-amd64.S
    +
    ++begin_quote
    +Author: Marc Bevand 
    +Licence: I hereby disclaim the copyright on this code and place it
    +in the public domain.
    ++end_quote
    +
    +OCB license 1
    +
    +For files:
    +- cipher/cipher-ocb.c
    +
    ++begin_quote
    +OCB is covered by several patents but may be used freely by most
    +software.  See http://web.cs.ucdavis.edu/~rogaway/ocb/license.htm .
    +In particular license 1 is suitable for Libgcrypt: See
    +http://web.cs.ucdavis.edu/~rogaway/ocb/license1.pdf for the full
    +license document; it basically says:
    +
    +License 1 — License for Open-Source Software Implementations of OCB
    +(Jan 9, 2013)
    +
    +Under this license, you are authorized to make, use, and
    +distribute open-source software implementations of OCB. This
    +license terminates for you if you sue someone over their
    +open-source software implementation of OCB claiming that you have
    +a patent covering their implementation.
    +
    +
    +
    +License for Open Source Software Implementations of OCB
    +January 9, 2013
    +
    +1 Definitions
    +
    +1.1 “Licensor” means Phillip Rogaway.
    +
    +1.2 “Licensed Patents” means any patent that claims priority to United
    +States Patent Application No. 09/918,615 entitled “Method and Apparatus
    +for Facilitating Efficient Authenticated Encryption,” and any utility,
    +divisional, provisional, continuation, continuations-in-part, reexamination,
    +reissue, or foreign counterpart patents that may issue with respect to the
    +aforesaid patent application. This includes, but is not limited to, United
    +States Patent No. 7,046,802; United States Patent No. 7,200,227; United
    +States Patent No. 7,949,129; United States Patent No. 8,321,675 ; and any
    +patent that issues out of United States Patent Application No. 13/669,114.
    +
    +1.3 “Use” means any practice of any invention claimed in the Licensed Patents.
    +
    +1.4 “Software Implementation” means any practice of any invention
    +claimed in the Licensed Patents that takes the form of software executing on
    +a user-programmable, general-purpose computer or that takes the form of a
    +computer-readable medium storing such software. Software Implementation does
    +not include, for example, application-specific integrated circuits (ASICs),
    +field-programmable gate arrays (FPGAs), embedded systems, or IP cores.
    +
    +1.5 “Open Source Software” means software whose source code is published
    +and made available for inspection and use by anyone because either (a) the
    +source code is subject to a license that permits recipients to copy, modify,
    +and distribute the source code without payment of fees or royalties, or
    +(b) the source code is in the public domain, including code released for
    +public use through a CC0 waiver. All licenses certified by the Open Source
    +Initiative at opensource.org as of January 9, 2013 and all Creative Commons
    +licenses identified on the creativecommons.org website as of January 9,
    +2013, including the Public License Fallback of the CC0 waiver, satisfy these
    +requirements for the purposes of this license.
    +
    +1.6 “Open Source Software Implementation” means a Software
    +Implementation in which the software implicating the Licensed Patents is
    +Open Source Software. Open Source Software Implementation does not include
    +any Software Implementation in which the software implicating the Licensed
    +Patents is combined, so as to form a larger program, with software that is
    +not Open Source Software.
    +
    +2 License Grant
    +
    +2.1 License. Subject to your compliance with the term s of this license,
    +including the restriction set forth in Section 2.2, Licensor hereby
    +grants to you a perpetual, worldwide, non-exclusive, non-transferable,
    +non-sublicenseable, no-charge, royalty-free, irrevocable license to practice
    +any invention claimed in the Licensed Patents in any Open Source Software
    +Implementation.
    +
    +2.2 Restriction. If you or your affiliates institute patent litigation
    +(including, but not limited to, a cross-claim or counterclaim in a lawsuit)
    +against any entity alleging that any Use authorized by this license
    +infringes another patent, then any rights granted to you under this license
    +automatically terminate as of the date such litigation is filed.
    +
    +3 Disclaimer
    +YOUR USE OF THE LICENSED PATENTS IS AT YOUR OWN RISK AND UNLESS REQUIRED
    +BY APPLICABLE LAW, LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
    +KIND CONCERNING THE LICENSED PATENTS OR ANY PRODUCT EMBODYING ANY LICENSED
    +PATENT, EXPRESS OR IMPLIED, STATUT ORY OR OTHERWISE, INCLUDING, WITHOUT
    +LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR
    +PURPOSE, OR NONINFRINGEMENT. IN NO EVENT WILL LICENSOR BE LIABLE FOR ANY
    +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
    +ARISING FROM OR RELATED TO ANY USE OF THE LICENSED PATENTS, INCLUDING,
    +WITHOUT LIMITATION, DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, PUNITIVE
    +OR SPECIAL DAMAGES, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGES PRIOR TO SUCH AN OCCURRENCE.
    ++end_quote
    +
    +
    +>MIT
    +
    +
    +Copyright 1997, 1998, 1999, 2001 Werner Koch (dd9jn)
    +Copyright 2013 g10 Code GmbH
    +
    +Permission 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:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE 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
    +WERNER KOCH 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.
    +
    +>GPL 2.0
    +
    +libgcrypt-1.8.1.tar.bz2\libgcrypt-1.8.1.tar\libgcrypt-1.8.1\doc\gpl.texi
    +
    +LICENSE: GPL 2.0
    +
    +
    +>GPL 3.0
    +
    +libgcrypt-1.8.1.tar.bz2\libgcrypt-1.8.1.tar\libgcrypt-1.8.1\doc\yat2m.c
    +
    +Copyright (C) 2005, 2013, 2015, 2016 g10 Code GmbH
    +Copyright (C) 2006, 2008, 2011 Free Software Foundation, Inc.
    +
    +This program is free software; you can redistribute it and/or modify
    +it under the terms of the GNU General Public License as published by
    +the Free Software Foundation; either version 3 of the License, or
    +(at your option) any later version.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +GNU General Public License for more details.
    +
    +You should have received a copy of the GNU General Public License
    +along with this program; if not, see .
    +
    +>BSD-3
    +
    +[PLEASE NOTE:  VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD LICENSE.  THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.]
    +
    +libgcrypt-1.8.1.tar.bz2\libgcrypt-1.8.1.tar\libgcrypt-1.8.1\random\jitterentropy-base.c
    +
    +Copyright Peter Gutmann, Paul Kendall, and Chris Wedgwood 1996-1999.
    +Heavily modified for GnuPG by Werner Koch
    +
    +
    +/
    +
    +/ This module is part of the cryptlib continuously seeded pseudorandom
    +number generator.  For usage conditions, see lib_rand.c
    +
    +[Here is the notice from lib_rand.c:]
    +
    +This module and the misc/rnd.c modules represent the cryptlib
    +continuously seeded pseudorandom number generator (CSPRNG) as described in
    +my 1998 Usenix Security Symposium paper "The generation of random numbers
    +for cryptographic purposes".
    +
    +The CSPRNG code is copyright Peter Gutmann (and various others) 1996,
    +1997, 1998, 1999, all rights reserved.  Redistribution of the CSPRNG
    +modules and use in source and binary forms, with or without modification,
    +are permitted provided that the following conditions are met:
    +
    +1. Redistributions of source code must retain the above copyright notice
    +and this permission notice in its entirety.
    +
    +2. Redistributions in binary form must reproduce the copyright notice in
    +the documentation and/or other materials provided with the distribution.
    +
    +3. A copy of any bugfixes or enhancements made must be provided to the
    +author,  to allow them to be added to the
    +baseline version of the code.
    +
    +ALTERNATIVELY, the code may be distributed under the terms of the
    +GNU Lesser General Public License, version 2.1 or any later version
    +published by the Free Software Foundation, in which case the
    +provisions of the GNU LGPL are required INSTEAD OF the above
    +restrictions.
    +
    +Although not required under the terms of the LGPL, it would still be
    +nice if you could make any changes available to the author to allow
    +a consistent code base to be maintained.  /
    +
    +>BSD-3
    +
    +[PLEASE NOTE:  VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD LICENSE.  THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.]
    +
    +libgcrypt-1.8.1.tar.bz2\libgcrypt-1.8.1.tar\libgcrypt-1.8.1\random\random-drbg.c
    +
    +Copyright 2014 Stephan Mueller 
    +
    +DRBG: Deterministic Random Bits Generator
    +Based on NIST Recommended DRBG from NIST SP800-90A with the following
    +properties:
    +CTR DRBG with DF with AES-128, AES-192, AES-256 cores
    +Hash DRBG with DF with SHA-1, SHA-256, SHA-384, SHA-512 cores
    +HMAC DRBG with DF with SHA-1, SHA-256, SHA-384, SHA-512 cores
    +with and without prediction resistance
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, and the entire permission notice in its entirety,
    +including the disclaimer of warranties.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote
    +products derived from this software without specific prior
    +written permission.
    +
    +ALTERNATIVELY, this product may be distributed under the terms of
    +LGPLv2+, in which case the provisions of the LGPL are
    +required INSTEAD OF the above restrictions.  (This clause is
    +necessary due to a potential bad interaction between the LGPL and
    +the restrictions contained in a BSD-style copyright.)
    +
    +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
    +WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
    +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
    +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
    +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGE.
    +
    +>>> libgpg-error-1.27-1.ph2
    +
    +Copyright (C) 2003-2004, 2010, 2013-2016 g10 Code GmbH
    +
    +This file is part of libgpg-error.
    +
    +libgpg-error is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public License
    +as published by the Free Software Foundation; either version 2.1 of
    +the License, or (at your option) any later version.
    +
    +libgpg-error is distributed in the hope that it will be useful, but
    +WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this program; if not, see .
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +>GPL 2.0
    +
    +libgpg-error-1.27.tar.bz2\libgpg-error-1.27.tar\libgpg-error-1.27\doc\gpgrt.info
    +
    +Copyright (C) 2014 g10 Code GmbH
    +
    +Permission is granted to copy, distribute and/or modify this
    +document under the terms of the GNU General Public License as
    +published by the Free Software Foundation; either version 2 of the
    +License, or (at your option) any later version.  The text of the
    +license can be found in the section entitled "GNU General Public
    +License".
    +
    +>GPL 3.0
    +
    +libgpg-error-1.27.tar.bz2\libgpg-error-1.27.tar\libgpg-error-1.27\doc\yat2m.c
    +
    +Copyright (C) 2005, 2013, 2015, 2016 g10 Code GmbH
    +Copyright (C) 2006, 2008, 2011 Free Software Foundation, Inc.
    +
    +This program is free software; you can redistribute it and/or modify
    +it under the terms of the GNU General Public License as published by
    +the Free Software Foundation; either version 3 of the License, or
    +(at your option) any later version.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +GNU General Public License for more details.
    +
    +You should have received a copy of the GNU General Public License
    +along with this program; if not, see .
    +
    +>MIT STYLE
    +
    +libgpg-error-1.27.tar.bz2\libgpg-error-1.27.tar\libgpg-error-1.27\src\mkheader.c
    +
    +Copyright (C) 2010 Free Software Foundation, Inc.
    +Copyright (C) 2014 g10 Code GmbH
    +
    +This file is free software; as a special exception the author gives
    +unlimited permission to copy and/or distribute it, with or without
    +modifications, as long as this notice is preserved.
    +
    +This file is distributed in the hope that it will be useful, but
    +WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
    +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    +
    +>BSD-3 Clause
    +
    +[PLEASE NOTE:  VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE BSD-3 CLAUSE LICENSE. THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.]
    +
    +libgpg-error-1.27.tar.bz2\libgpg-error-1.27.tar\libgpg-error-1.27\src\mkheader.c
    +
    +estream.c - Extended Stream I/O Library
    +Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011,
    +2014, 2015, 2016, 2017 g10 Code GmbH
    +
    +This file is part of Libestream.
    +
    +Libestream is free software; you can redistribute it and/or modify
    +it under the terms of the GNU Lesser General Public License as
    +published by the Free Software Foundation; either version 2.1 of
    +the License, or (at your option) any later version.
    +
    +Libestream is distributed in the hope that it will be useful, but
    +WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with Libestream; if not, see .
    +
    +ALTERNATIVELY, Libestream may be distributed under the terms of the
    +following license, in which case the provisions of this license are
    +required INSTEAD OF the GNU General Public License. If you wish to
    +allow use of your version of this file only under the terms of the
    +GNU General Public License, and not to allow others to use your
    +version of this file under the terms of the following license,
    +indicate your decision by deleting this paragraph and the license
    +below.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, and the entire permission notice in its entirety,
    +including the disclaimer of warranties.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +3. The name of the author may not be used to endorse or promote
    +products derived from this software without specific prior
    +written permission.
    +
    +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
    +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
    +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
    +OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +>LGPL 2.0
    +
    +libgpg-error-1.27.tar.bz2\libgpg-error-1.27.tar\libgpg-error-1.27\src\gettext.h
    +
    +Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
    +
    +This program is free software; you can redistribute it and/or modify it
    +under the terms of the GNU Library General Public License as published
    +by the Free Software Foundation; either version 2, or (at your option)
    +any later version.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Library General Public License for more details.
    +
    +You should have received a copy of the GNU Library General Public
    +License along with this program; if not, write to the Free Software
    +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
    +USA.
    +
    +>>> systemd-233-18.ph2
    +
    +This file is part of systemd.
    +
    +Copyright 2008-2011 Kay Sievers
    +Copyright 2012 Lennart Poettering
    +
    +systemd is free software; you can redistribute it and/or modify it
    +under the terms of the GNU Lesser General Public License as published by
    +the Free Software Foundation; either version 2.1 of the License, or
    +(at your option) any later version.
    +
    +systemd is distributed in the hope that it will be useful, but
    +WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public License
    +along with systemd; If not, see .
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +> GPL 2.0
    +
    +systemd-233.tar.gz\systemd-233.tar\systemd-233\LICENSE.GPL2
    +
    +License: GPL 2.0
    +
    +> MIT
    +
    +systemd-233.tar.gz\systemd-233.tar\systemd-233\man\glib-event-glue.c
    +
    +Copyright 2014 Tom Gundersen
    +
    +Permission 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:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +THE 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.
    +
    +> Public Domain
    +
    +systemd-233.tar.gz\systemd-233.tar\systemd-233\src\basic\MurmurHash2.c
    +
    +MurmurHash2 was written by Austin Appleby, and is placed in the public
    +domain. The author hereby disclaims copyright to this source code.
    +
    +> LGPL 2.0
    +
    +systemd-233.tar.gz\systemd-233.tar\systemd-233\src\basic\utf8.c
    +
    +Copyright (C) 1999 Tom Tromey
    +Copyright (C) 2000 Red Hat, Inc.
    +
    +This library is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Library General Public
    +License as published by the Free Software Foundation; either
    +version 2 of the License, or (at your option) any later version.
    +
    +This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Library General Public License for more details.
    +
    +You should have received a copy of the GNU Library General Public
    +License along with this library; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +--------------- SECTION 7: GNU Lesser General Public License, V3.0 ----------
    +
    +GNU Lesser General Public License, V3.0 is applicable to the following component(s).
    +
    +
    +>>> gmp-6.1.2-2.ph2
    +
    +'[PLEASE NOTE:  VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE LGPL 3.0.  PLEASE SEE APPENDIX FOR THE FULL TEXT OF THE LGPL3.0.  THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.]
    +
    +Copyright 2000-2002, 2004 Free Software Foundation, Inc.
    +
    +This file is part of the GNU MP Library.
    +
    +The GNU MP Library is free software; you can redistribute it and/or modify
    +it under the terms of either:
    +
    +* the GNU Lesser General Public License as published by the Free
    +Software Foundation; either version 3 of the License, or (at your
    +option) any later version.
    +
    +or
    +
    +* the GNU General Public License as published by the Free Software
    +Foundation; either version 2 of the License, or (at your option) any
    +later version.
    +
    +or both in parallel, as here.
    +
    +The GNU MP Library is distributed in the hope that it will be useful, but
    +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    +or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    +for more details.
    +
    +You should have received copies of the GNU General Public License and the
    +GNU Lesser General Public License along with the GNU MP Library.  If not,
    +see https://www.gnu.org/licenses/.
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +> GPL3.0
    +
    +gmp-6.1.2.tar.xz\gmp-6.1.2.tar\gmp-6.1.2\demos\factorize.c
    +
    +Factoring with Pollard's rho method.
    +
    +Copyright 1995, 1997-2003, 2005, 2009, 2012, 2015 Free Software
    +Foundation, Inc.
    +
    +This program is free software; you can redistribute it and/or modify it under
    +the terms of the GNU General Public License as published by the Free Software
    +Foundation; either version 3 of the License, or (at your option) any later
    +version.
    +
    +This program is distributed in the hope that it will be useful, but WITHOUT ANY
    +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
    +PARTICULAR PURPOSE.  See the GNU General Public License for more details.
    +
    +You should have received a copy of the GNU General Public License along with
    +this program.  If not, see https://www.gnu.org/licenses/.
    +
    +> GPL3.0 with Bison Parser Exception
    +
    +gmp-6.1.2.tar.xz\gmp-6.1.2.tar\gmp-6.1.2\demos\calc\calc.c
    +
    +Bison implementation for Yacc-like parsers in C
    +
    +Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
    +
    +This program is free software: you can redistribute it and/or modify
    +it under the terms of the GNU General Public License as published by
    +the Free Software Foundation, either version 3 of the License, or
    +(at your option) any later version.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +GNU General Public License for more details.
    +
    +You should have received a copy of the GNU General Public License
    +along with this program.  If not, see .  */
    +
    +/* As a special exception, you may create a larger work that contains
    +part or all of the Bison parser skeleton and distribute that work
    +under terms of your choice, so long as that work isn't itself a
    +parser generator using the skeleton or a modified version thereof
    +as a parser skeleton.  Alternatively, if you modify or redistribute
    +the parser skeleton itself, you may (at your option) remove this
    +special exception, which will cause the skeleton and the resulting
    +Bison output files to be licensed under the GNU General Public
    +License without this special exception.
    +
    +This special exception was added by the Free Software Foundation in
    +version 2.2 of Bison.
    +
    +> GFDL 1.3
    +
    +gmp-6.1.2.tar.xz\gmp-6.1.2.tar\gmp-6.1.2\doc\gmp.info
    +
    +Copyright 1991, 1993-2016 Free Software Foundation, Inc.
    +
    +Permission is granted to copy, distribute and/or modify this document
    +under the terms of the GNU Free Documentation License, Version 1.3 or
    +any later version published by the Free Software Foundation; with no
    +Invariant Sections, with the Front-Cover Texts being "A GNU Manual", and
    +with the Back-Cover Texts being "You have freedom to copy and modify
    +this GNU Manual, like GNU software".  A copy of the license is included
    +in *note GNU Free Documentation License::.
    +
    +> GPL2.0
    +
    +gmp-6.1.2.tar.xz\gmp-6.1.2.tar\gmp-6.1.2\mini-gmp\tests\run-tests
    +
    +Copyright (C) 2000-2002, 2004, 2005, 2011, 2012, 2016  Niels Möller
    +
    +This program is free software; you can redistribute it and/or modify
    +it under the terms of the GNU General Public License as published by
    +the Free Software Foundation; either version 2 of the License, or
    +(at your option) any later version.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +GNU General Public License for more details.
    +
    +You should have received a copy of the GNU General Public License along
    +with this program; if not, write to the Free Software Foundation, Inc.,
    +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +> MIT Style
    +
    +gmp-6.1.2.tar.xz\gmp-6.1.2.tar\gmp-6.1.2\aclocal.m4
    +
    +Copyright (C) 1996-2014 Free Software Foundation, Inc.
    +
    +This file is free software; the Free Software Foundation
    +gives unlimited permission to copy and/or distribute it,
    +with or without modifications, as long as this notice is preserved.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY, to the extent permitted by law; without
    +even the implied warranty of MERCHANTABILITY or FITNESS FOR A
    +PARTICULAR PURPOSE.
    +
    +--------------- SECTION 8: GNU Library General Public License, V2.0 ----------
    +
    +GNU Library General Public License, V2.0 is applicable to the following component(s).
    +
    +
    +>>> glib-2.52.1-3.ph2
    +
    +Copyright © 2015 Canonical Limited
    +
    +This library is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2 of the License, or (at your option) any later version.
    +
    +This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General
    +Public License along with this library; if not, see .
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +> Public Domain
    +
    +glib-2.52.1.tar.xz\glib-2.52.1.tar\glib-2.52.1\build\win32\dirent\dirent.h
    +
    +This file has no copyright assigned and is placed in the Public Domain.
    +This file is a part of the mingw-runtime package.
    +No warranty is given; refer to the file DISCLAIMER within the package.
    +
    +> LGPL 3.0
    +
    +glib-2.52.1.tar.xz\glib-2.52.1.tar\glib-2.52.1\docs\reference\glib\html\glib-resources.html
    +
    +If you develop a bugfix or enhancement for GLib, please file that in Bugzilla as well. Bugzilla allows you to attach files; please attach a patch generated by the utility, using the option to make the patch more readable. All patches must be offered under the terms of the GNU LGPL license, so be sure you are authorized to give us the patch under those terms.
    +
    +> MIT
    +
    +glib-2.52.1.tar.xz\glib-2.52.1.tar\glib-2.52.1\gio\kqueue\kqueue-sub.h
    +
    +Copyright (c) 2011, 2012 Dmitry Matveev 
    +
    +Permission 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:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE 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.
    +
    +> LGPL 2.0
    +
    +glib-2.52.1.tar.xz\glib-2.52.1.tar\glib-2.52.1\gio\xdgmime\xdgmimeparent.c
    +
    +[PLEASE NOTE:  VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE LGPL 2.0.  PLEASE SEE THE APPENDIX TO REVIEW THE FULL TEXT OF THE LGPL 2.0.  THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.]
    +
    +Copyright (C) 2004  Red Hat, Inc.
    +Copyright (C) 2004  Matthias Clasen 
    +
    +Licensed under the Academic Free License version 2.0
    +Or under the following terms:
    +
    +This library is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2 of the License, or (at your option) any later version.
    +
    +This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this library; if not, see .
    +
    +> GPL 2.0
    +
    +glib-2.52.1.tar.xz\glib-2.52.1.tar\glib-2.52.1\glib\gen-unicode-tables.pl
    +
    +Copyright (C) 1998, 1999 Tom Tromey
    +Copyright (C) 2001 Red Hat Software
    +
    +This program is free software; you can redistribute it and/or modify
    +it under the terms of the GNU General Public License as published by
    +the Free Software Foundation; either version 2, or (at your option)
    +any later version.
    +
    +This program is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +GNU General Public License for more details.
    +
    +You should have received a copy of the GNU General Public License
    +along with this program; if not, see .
    +
    +> LGPL 2.1
    +
    +glib-2.52.1.tar.xz\glib-2.52.1.tar\glib-2.52.1\gio\win32\winhttp.h
    +
    +Copyright (C) 2007 Francois Gouget
    +
    +This library is free software; you can redistribute it and/or
    +modify it under the terms of the GNU Lesser General Public
    +License as published by the Free Software Foundation; either
    +version 2.1 of the License, or (at your option) any later version.
    +
    +This library is distributed in the hope that it will be useful,
    +but WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +Lesser General Public License for more details.
    +
    +You should have received a copy of the GNU Lesser General Public
    +License along with this library; if not, write to the Free Software
    +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
    +
    +> BSD-3 CLAUSE
    +
    +glib-2.52.1.tar.xz\glib-2.52.1.tar\glib-2.52.1\glib\pcre\pcre.h
    +
    +Copyright (c) 1997-2012 University of Cambridge
    +-----------------------------------------------------------------------------
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice,
    +this list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +* Neither the name of the University of Cambridge nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
    +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGE.
    +
    +> BSD-4
    +
    +glib-2.52.1.tar.xz\glib-2.52.1.tar\glib-2.52.1\glib\valgrind.h
    +
    +   Notice that the following BSD-style license applies to this one
    +   file (valgrind.h) only.  The rest of Valgrind is licensed under the
    +   terms of the GNU General Public License, version 2, unless
    +   otherwise indicated.  See the COPYING file in the source
    +   distribution for details.
    +---------------------------------------------------------------
    +   This file is part of Valgrind, a dynamic binary instrumentation
    +   framework.
    +
    +   Copyright (C) 2000-2013 Julian Seward.  All rights reserved.
    +
    +   Redistribution and use in source and binary forms, with or without
    +   modification, are permitted provided that the following conditions
    +   are met:
    +
    +   1. Redistributions of source code must retain the above copyright
    +      notice, this list of conditions and the following disclaimer.
    +
    +   2. The origin of this software must not be misrepresented; you must 
    +      not claim that you wrote the original software.  If you use this 
    +      software in a product, an acknowledgment in the product 
    +      documentation would be appreciated but is not required.
    +
    +   3. Altered source versions must be plainly marked as such, and must
    +      not be misrepresented as being the original software.
    +
    +   4. The name of the author may not be used to endorse or promote 
    +      products derived from this software without specific prior written 
    +      permission.
    +
    +   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
    +   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    +   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
    +   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
    +   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    +   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
    +   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    +   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    +   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +----------------------------------------------------------------
    +   Notice that the above BSD-style license applies to this one file
    +   (valgrind.h) only.  The entire rest of Valgrind is licensed under
    +   the terms of the GNU General Public License, version 2.  See the
    +   COPYING file in the source distribution for details.
    +
    +--------------- SECTION 9: Mozilla Public License, V2.0 ----------
    +
    +Mozilla Public License, V2.0 is applicable to the following component(s).
    +
    +
    +>>> ca-certificates-20180919-1.ph2
    +
    +This Source Code Form is subject to the terms of the Mozilla Public
    + License, v. 2.0. If a copy of the MPL was not distributed with this
    + file, You can obtain one at http://mozilla.org/MPL/2.0/.
    +
    +>>> nspr-4.15-1.ph2
    +
    +This Source Code Form is subject to the terms of the Mozilla Public
    +License, v. 2.0. If a copy of the MPL was not distributed with this
    +file, You can obtain one at http://mozilla.org/MPL/2.0/.
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +> MPL 2.0
    +
    +[PLEASE NOTE:  VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MPL 2.0.  PLEASE SEE THE APPENDIX TO REVIEW THE FULL TEXT OF THE MPL 2.0.  THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.]
    +
    +
    +nspr-4.15.tar.gz\..\stage\v4.15\src\nspr-4.15.tar\nspr-4.15\nspr\pkg\linux\sun-nspr.spec
    +
    +Under "MPL/GPL" license.
    +
    +>BEER-WARE LICENSE
    +
    +nspr-4.15.tar.gz\..\stage\v4.15\src\nspr-4.15.tar\nspr-4.15\nspr\pr\src\malloc\prmalloc.c
    +
    +"THE BEER-WARE LICENSE" (Revision 42):
    + wrote this file.  As long as you retain this notice you
    +can do whatever you want with this stuff. If we meet some day, and you think
    +this stuff is worth it, you can buy me a beer in return.   Poul-Henning
    +
    +>BSD-3
    +
    +nspr-4.15.tar.gz\..\stage\v4.15\src\nspr-4.15.tar\nspr-4.15\nspr\pr\src\misc\prcountr.c
    +
    +Copyright (c) 1983, 1990, 1993
    +The Regents of the University of California.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions
    +are met:
    +1. Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +2. Redistributions in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +4. Neither the name of the University nor the names of its contributors
    +may be used to endorse or promote products derived from this software
    +without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
    +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    +ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGE.
    +
    +
    +>MIT
    +
    +
    +nspr-4.15.tar.gz\..\stage\v4.15\src\nspr-4.15.tar\nspr-4.15\nspr\pr\src\misc\prcountr.c
    +
    +Portions Copyright (c) 1993 by Digital Equipment Corporation.
    +
    +Permission to use, copy, modify, and distribute this software for any
    +purpose with or without fee is hereby granted, provided that the above
    +copyright notice and this permission notice appear in all copies, and that
    +the name of Digital Equipment Corporation not be used in advertising or
    +publicity pertaining to distribution of the document or software without
    +specific, written prior permission.
    +
    +THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
    +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
    +OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
    +CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
    +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
    +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
    +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
    +SOFTWARE.
    +
    +>>> nss-3.31.1-1.ph2
    +
    +This Source Code Form is subject to the terms of the Mozilla Public
    +License, v. 2.0. If a copy of the MPL was not distributed with this
    +file, You can obtain one at http://mozilla.org/MPL/2.0/.
    +
    +ADDITIONAL LICENSE INFORMATION:
    +
    +> BSD-2
    +
    +nss-3.31.1.tar.gz\..\stage\NSS_3_31_1_RTM\src\nss-3.31.1.tar\nss-3.31.1\nss\cmd\libpkix\pkix_pl\module\test_socket.c
    +
    +Test Socket Type
    +
    +Copyright 2004-2005 Sun Microsystems, Inc.  All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +1. Redistribution of source code must retain the above copyright notice,
    +this list of conditions and the following disclaimer.
    +
    +2. Redistribution in binary form must reproduce the above copyright
    +notice, this list of conditions and the following disclaimer in the
    +documentation and/or other materials provided with the distribution.
    +
    +Neither the name of Sun Microsystems, Inc. or the names of contributors may
    +be used to endorse or promote products derived from this software without
    +specific prior written permission.
    +
    +This software is provided "AS IS," without a warranty of any kind. ALL
    +EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
    +ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
    +OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
    +AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
    +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
    +DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
    +REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
    +INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
    +OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
    +EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
    +
    +You acknowledge that this software is not designed or intended for use in
    +the design, construction, operation or maintenance of any nuclear facility.
    +
    +
    +> MIT
    +
    +nss-3.31.1.tar.gz\..\stage\NSS_3_31_1_RTM\src\nss-3.31.1.tar\nss-3.31.1\nss\coreconf\mkdepend\def.h
    +
    +Copyright (c) 1993, 1994, 1998 The Open Group.
    +
    +Permission to use, copy, modify, distribute, and sell this software and its
    +documentation for any purpose is hereby granted without fee, provided that
    +the above copyright notice appear in all copies and that both that
    +copyright notice and this permission notice appear in supporting
    +documentation.
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE 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
    +OPEN GROUP 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.
    +
    +> BSD-3
    +
    +nss-3.31.1.tar.gz\..\stage\NSS_3_31_1_RTM\src\nss-3.31.1.tar\nss-3.31.1\nss\gtests\google_test\gtest\include\gtest\internal\gtest-death-test-internal.h
    +
    +Copyright 2005, Google Inc.
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +>Public Domain
    +
    +nss-3.31.1.tar.gz\..\stage\NSS_3_31_1_RTM\src\nss-3.31.1.tar\nss-3.31.1\nss\lib\dbm\src\dirent.h
    +
    +A public domain implementation of BSD directory routines for
    +MS-DOS.  Written by Michael Rendell ({uunet,utai}michael@garfield),
    +August 1897
    +
    +
    +> MIT- Style
    +
    +nss-3.31.1.tar.gz\..\stage\NSS_3_31_1_RTM\src\nss-3.31.1.tar\nss-3.31.1\nss\lib\jar\jzlib.h
    +
    +Copyright (C) 1995-1996 Jean-loup Gailly and Mark Adler
    +
    +This software is provided 'as-is', without any express or implied
    +warranty.  In no event will the authors be held liable for any damages
    +arising from the use of this software.
    +
    +Permission is granted to anyone to use this software for any purpose,
    +including commercial applications, and to alter it and redistribute it
    +freely, subject to the following restrictions:
    +
    +1. The origin of this software must not be misrepresented; you must not
    +claim that you wrote the original software. If you use this software
    +in a product, an acknowledgment in the product documentation would be
    +appreciated but is not required.
    +2. Altered source versions must be plainly marked as such, and must not be
    +misrepresented as being the original software.
    +3. This notice may not be removed or altered from any source distribution.
    +
    +Jean-loup Gailly        Mark Adler
    +gzip@prep.ai.mit.edu    madler@alumni.caltech.edu
    +
    +
    +>MPL 2.0
    +
    +[PLEASE NOTE:  VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT UNDER THE TERMS OF THE MPL 2.0.  PLEASE SEE THE APPENDIX TO REVIEW THE FULL TEXT OF THE MPL 2.0.  THE ORIGINAL LICENSE TERMS ARE REPRODUCED BELOW ONLY AS A REFERENCE.]
    +
    +
    +nss-3.31.1.tar.gz\..\stage\NSS_3_31_1_RTM\src\nss-3.31.1.tar\nss-3.31.1\nss\pkg\linux\sun-nss.spec
    +
    +Under "MPL/GPL" license.
    +
    +
    +=============== APPENDIX. Standard License Files ============== 
    +
    +
    +--------------- SECTION 1: Apache License, V2.0 -----------
    +
    +Apache License 
    +
    +
    +
    +Version 2.0, January 2004 
    +
    +http://www.apache.org/licenses/ 
    +
    +
    +
    +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 
    +
    +
    +
    +1. Definitions.
    +
    +
    +
    +"License" shall mean the terms and conditions for use, reproduction,
    +
    +and distribution as defined by Sections 1 through 9 of this document.
    +
    +
    +
    +"Licensor" shall mean the copyright owner or entity authorized by the
    +
    +copyright owner that is granting the License.  
    +
    +
    +
    +"Legal Entity" shall mean the union of the acting entity and all other
    +
    +entities that control, are controlled by, or are under common control
    +
    +with that entity. For the purposes of this definition, "control" means
    +
    +(i) the power, direct or indirect, to cause the direction or management
    +
    +of such entity, whether by contract or otherwise, or (ii) ownership
    +
    +of fifty percent (50) or more of the outstanding shares, or (iii)
    +
    +beneficial ownership of such entity.
    +
    +
    +
    +"You" (or "Your") shall mean an individual or Legal Entity exercising
    +
    +permissions granted by this License.  
    +
    +
    +
    +"Source" form shall mean the preferred form for making modifications,
    +
    +including but not limited to software source code, documentation source,
    +
    +and configuration files.
    +
    +
    +
    +"Object" form shall mean any form resulting from mechanical transformation
    +
    +or translation of a Source form, including but not limited to compiled
    +
    +object code, generated documentation, and conversions to other media
    +
    +types.  
    +
    +
    +
    +"Work" shall mean the work of authorship, whether in Source or
    +
    +Object form, made available under the License, as indicated by a copyright
    +
    +notice that is included in or attached to the work (an example is provided
    +
    +in the Appendix below).  
    +
    +
    +
    +"Derivative Works" shall mean any work, whether in Source or Object form,
    +
    +that is based on (or derived from) the Work and for which the editorial
    +
    +revisions, annotations, elaborations, or other modifications represent,
    +
    +as a whole, an original work of authorship. For the purposes of this
    +
    +License, Derivative Works shall not include works that remain separable
    +
    +from, or merely link (or bind by name) to the interfaces of, the Work
    +
    +and Derivative Works thereof.
    +
    +
    +
    +"Contribution" shall mean any work of authorship, including the
    +
    +original version of the Work and any modifications or additions to
    +
    +that Work or Derivative Works thereof, that is intentionally submitted
    +
    +to Licensor for inclusion in the Work by the copyright owner or by an
    +
    +individual or Legal Entity authorized to submit on behalf of the copyright
    +
    +owner. For the purposes of this definition, "submitted" means any form of
    +
    +electronic, verbal, or written communication sent to the Licensor or its
    +
    +representatives, including but not limited to communication on electronic
    +
    +mailing lists, source code control systems, and issue tracking systems
    +
    +that are managed by, or on behalf of, the Licensor for the purpose of
    +
    +discussing and improving the Work, but excluding communication that is
    +
    +conspicuously marked or otherwise designated in writing by the copyright
    +
    +owner as "Not a Contribution."
    +
    +
    +
    +"Contributor" shall mean Licensor and any individual or Legal Entity
    +
    +on behalf of whom a Contribution has been received by Licensor and
    +
    +subsequently incorporated within the Work.
    +
    +
    +
    +2. Grant of Copyright License.
    +
    +Subject to the terms and conditions of this License, each Contributor
    +
    +hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
    +
    +royalty-free, irrevocable copyright license to reproduce, prepare
    +
    +Derivative Works of, publicly display, publicly perform, sublicense, and
    +
    +distribute the Work and such Derivative Works in Source or Object form.
    +
    +
    +
    +3. Grant of Patent License.
    +
    +Subject to the terms and conditions of this License, each Contributor
    +
    +hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
    +
    +royalty- free, irrevocable (except as stated in this section) patent
    +
    +license to make, have made, use, offer to sell, sell, import, and
    +
    +otherwise transfer the Work, where such license applies only to those
    +
    +patent claims licensable by such Contributor that are necessarily
    +
    +infringed by their Contribution(s) alone or by combination of
    +
    +their Contribution(s) with the Work to which such Contribution(s)
    +
    +was submitted. If You institute patent litigation against any entity
    +
    +(including a cross-claim or counterclaim in a lawsuit) alleging that the
    +
    +Work or a Contribution incorporated within the Work constitutes direct
    +
    +or contributory patent infringement, then any patent licenses granted
    +
    +to You under this License for that Work shall terminate as of the date
    +
    +such litigation is filed.
    +
    +
    +
    +4. Redistribution.
    +
    +You may reproduce and distribute copies of the Work or Derivative Works
    +
    +thereof in any medium, with or without modifications, and in Source or
    +
    +Object form, provided that You meet the following conditions:
    +
    +
    +
    +  a. You must give any other recipients of the Work or Derivative Works
    +
    +     a copy of this License; and
    +
    +
    +
    +  b. You must cause any modified files to carry prominent notices stating
    +
    +     that You changed the files; and
    +
    +
    +
    +  c. You must retain, in the Source form of any Derivative Works that
    +
    +     You distribute, all copyright, patent, trademark, and attribution
    +
    +     notices from the Source form of the Work, excluding those notices
    +
    +     that do not pertain to any part of the Derivative Works; and
    +
    +
    +
    +  d. If the Work includes a "NOTICE" text file as part of its
    +
    +     distribution, then any Derivative Works that You distribute must
    +
    +     include a readable copy of the attribution notices contained
    +
    +     within such NOTICE file, excluding those notices that do not
    +
    +     pertain to any part of the Derivative Works, in at least one of
    +
    +     the following places: within a NOTICE text file distributed as part
    +
    +     of the Derivative Works; within the Source form or documentation,
    +
    +     if provided along with the Derivative Works; or, within a display
    +
    +     generated by the Derivative Works, if and wherever such third-party
    +
    +     notices normally appear. The contents of the NOTICE file are for
    +
    +     informational purposes only and do not modify the License. You
    +
    +     may add Your own attribution notices within Derivative Works that
    +
    +     You distribute, alongside or as an addendum to the NOTICE text
    +
    +     from the Work, provided that such additional attribution notices
    +
    +     cannot be construed as modifying the License.  You may add Your own
    +
    +     copyright statement to Your modifications and may provide additional
    +
    +     or different license terms and conditions for use, reproduction, or
    +
    +     distribution of Your modifications, or for any such Derivative Works
    +
    +     as a whole, provided Your use, reproduction, and distribution of the
    +
    +     Work otherwise complies with the conditions stated in this License.
    +
    +
    +
    +5. Submission of Contributions.
    +
    +Unless You explicitly state otherwise, any Contribution intentionally
    +
    +submitted for inclusion in the Work by You to the Licensor shall be
    +
    +under the terms and conditions of this License, without any additional
    +
    +terms or conditions.  Notwithstanding the above, nothing herein shall
    +
    +supersede or modify the terms of any separate license agreement you may
    +
    +have executed with Licensor regarding such Contributions.
    +
    +
    +
    +6. Trademarks.
    +
    +This License does not grant permission to use the trade names, trademarks,
    +
    +service marks, or product names of the Licensor, except as required for
    +
    +reasonable and customary use in describing the origin of the Work and
    +
    +reproducing the content of the NOTICE file.
    +
    +
    +
    +7. Disclaimer of Warranty.
    +
    +Unless required by applicable law or agreed to in writing, Licensor
    +
    +provides the Work (and each Contributor provides its Contributions) on
    +
    +an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
    +
    +express or implied, including, without limitation, any warranties or
    +
    +conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR
    +
    +A PARTICULAR PURPOSE. You are solely responsible for determining the
    +
    +appropriateness of using or redistributing the Work and assume any risks
    +
    +associated with Your exercise of permissions under this License.
    +
    +
    +
    +8. Limitation of Liability.
    +
    +In no event and under no legal theory, whether in tort (including
    +
    +negligence), contract, or otherwise, unless required by applicable law
    +
    +(such as deliberate and grossly negligent acts) or agreed to in writing,
    +
    +shall any Contributor be liable to You for damages, including any direct,
    +
    +indirect, special, incidental, or consequential damages of any character
    +
    +arising as a result of this License or out of the use or inability to
    +
    +use the Work (including but not limited to damages for loss of goodwill,
    +
    +work stoppage, computer failure or malfunction, or any and all other
    +
    +commercial damages or losses), even if such Contributor has been advised
    +
    +of the possibility of such damages.
    +
    +
    +
    +9. Accepting Warranty or Additional Liability.
    +
    +While redistributing the Work or Derivative Works thereof, You may
    +
    +choose to offer, and charge a fee for, acceptance of support, warranty,
    +
    +indemnity, or other liability obligations and/or rights consistent with
    +
    +this License. However, in accepting such obligations, You may act only
    +
    +on Your own behalf and on Your sole responsibility, not on behalf of
    +
    +any other Contributor, and only if You agree to indemnify, defend, and
    +
    +hold each Contributor harmless for any liability incurred by, or claims
    +
    +asserted against, such Contributor by reason of your accepting any such
    +
    +warranty or additional liability.
    +
    +
    +
    +END OF TERMS AND CONDITIONS 
    +
    +
    +
    +--------------- SECTION 2: GNU General Public License, V2.0 -----------
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
    + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Lesser General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	    How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    
    +    Copyright (C)   
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 2 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License along
    +    with this program; if not, write to the Free Software Foundation, Inc.,
    +    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) year name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +parts of the General Public License.  Of course, the commands you use may
    +be called something other than `show w' and `show c'; they could even be
    +mouse-clicks or menu items--whatever suits your program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
    +
    +  , 1 April 1989
    +  Ty Coon, President of Vice
    +
    +This General Public License does not permit incorporating your program into
    +proprietary programs.  If your program is a subroutine library, you may
    +consider it more useful to permit linking proprietary applications with the
    +library.  If this is what you want to do, use the GNU Lesser General
    +Public License instead of this License.
    +
    +
    +
    +--------------- SECTION 3: GNU General Public License, V3.0 -----------
    +
    +                    GNU GENERAL PUBLIC LICENSE
    +
    +                       Version 3, 29 June 2007
    +
    +
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. 
    +
    + Everyone is permitted to copy and distribute verbatim copies
    +
    + of this license document, but changing it is not allowed.
    +
    +
    +
    +                            Preamble
    +
    +
    +
    +  The GNU General Public License is a free, copyleft license for
    +
    +software and other kinds of works.
    +
    +
    +
    +  The licenses for most software and other practical works are designed
    +
    +to take away your freedom to share and change the works.  By contrast,
    +
    +the GNU General Public License is intended to guarantee your freedom to
    +
    +share and change all versions of a program--to make sure it remains free
    +
    +software for all its users.  We, the Free Software Foundation, use the
    +
    +GNU General Public License for most of our software; it applies also to
    +
    +any other work released this way by its authors.  You can apply it to
    +
    +your programs, too.
    +
    +
    +
    +  When we speak of free software, we are referring to freedom, not
    +
    +price.  Our General Public Licenses are designed to make sure that you
    +
    +have the freedom to distribute copies of free software (and charge for
    +
    +them if you wish), that you receive source code or can get it if you
    +
    +want it, that you can change the software or use pieces of it in new
    +
    +free programs, and that you know you can do these things.
    +
    +
    +
    +  To protect your rights, we need to prevent others from denying you
    +
    +these rights or asking you to surrender the rights.  Therefore, you have
    +
    +certain responsibilities if you distribute copies of the software, or if
    +
    +you modify it: responsibilities to respect the freedom of others.
    +
    +
    +
    +  For example, if you distribute copies of such a program, whether
    +
    +gratis or for a fee, you must pass on to the recipients the same
    +
    +freedoms that you received.  You must make sure that they, too, receive
    +
    +or can get the source code.  And you must show them these terms so they
    +
    +know their rights.
    +
    +
    +
    +  Developers that use the GNU GPL protect your rights with two steps:
    +
    +(1) assert copyright on the software, and (2) offer you this License
    +
    +giving you legal permission to copy, distribute and/or modify it.
    +
    +
    +
    +  For the developers' and authors' protection, the GPL clearly explains
    +
    +that there is no warranty for this free software.  For both users' and
    +
    +authors' sake, the GPL requires that modified versions be marked as
    +
    +changed, so that their problems will not be attributed erroneously to
    +
    +authors of previous versions.
    +
    +
    +
    +  Some devices are designed to deny users access to install or run
    +
    +modified versions of the software inside them, although the manufacturer
    +
    +can do so.  This is fundamentally incompatible with the aim of
    +
    +protecting users' freedom to change the software.  The systematic
    +
    +pattern of such abuse occurs in the area of products for individuals to
    +
    +use, which is precisely where it is most unacceptable.  Therefore, we
    +
    +have designed this version of the GPL to prohibit the practice for those
    +
    +products.  If such problems arise substantially in other domains, we
    +
    +stand ready to extend this provision to those domains in future versions
    +
    +of the GPL, as needed to protect the freedom of users.
    +
    +
    +
    +  Finally, every program is threatened constantly by software patents.
    +
    +States should not allow patents to restrict development and use of
    +
    +software on general-purpose computers, but in those that do, we wish to
    +
    +avoid the special danger that patents applied to a free program could
    +
    +make it effectively proprietary.  To prevent this, the GPL assures that
    +
    +patents cannot be used to render the program non-free.
    +
    +
    +
    +  The precise terms and conditions for copying, distribution and
    +
    +modification follow.
    +
    +
    +
    +                       TERMS AND CONDITIONS
    +
    +
    +
    +  0. Definitions.
    +
    +
    +
    +  "This License" refers to version 3 of the GNU General Public License.
    +
    +
    +
    +  "Copyright" also means copyright-like laws that apply to other kinds of
    +
    +works, such as semiconductor masks.
    +
    +
    +
    +  "The Program" refers to any copyrightable work licensed under this
    +
    +License.  Each licensee is addressed as "you".  "Licensees" and
    +
    +"recipients" may be individuals or organizations.
    +
    +
    +
    +  To "modify" a work means to copy from or adapt all or part of the work
    +
    +in a fashion requiring copyright permission, other than the making of an
    +
    +exact copy.  The resulting work is called a "modified version" of the
    +
    +earlier work or a work "based on" the earlier work.
    +
    +
    +
    +  A "covered work" means either the unmodified Program or a work based
    +
    +on the Program.
    +
    +
    +
    +  To "propagate" a work means to do anything with it that, without
    +
    +permission, would make you directly or secondarily liable for
    +
    +infringement under applicable copyright law, except executing it on a
    +
    +computer or modifying a private copy.  Propagation includes copying,
    +
    +distribution (with or without modification), making available to the
    +
    +public, and in some countries other activities as well.
    +
    +
    +
    +  To "convey" a work means any kind of propagation that enables other
    +
    +parties to make or receive copies.  Mere interaction with a user through
    +
    +a computer network, with no transfer of a copy, is not conveying.
    +
    +
    +
    +  An interactive user interface displays "Appropriate Legal Notices"
    +
    +to the extent that it includes a convenient and prominently visible
    +
    +feature that (1) displays an appropriate copyright notice, and (2)
    +
    +tells the user that there is no warranty for the work (except to the
    +
    +extent that warranties are provided), that licensees may convey the
    +
    +work under this License, and how to view a copy of this License.  If
    +
    +the interface presents a list of user commands or options, such as a
    +
    +menu, a prominent item in the list meets this criterion.
    +
    +
    +
    +  1. Source Code.
    +
    +
    +
    +  The "source code" for a work means the preferred form of the work
    +
    +for making modifications to it.  "Object code" means any non-source
    +
    +form of a work.
    +
    +
    +
    +  A "Standard Interface" means an interface that either is an official
    +
    +standard defined by a recognized standards body, or, in the case of
    +
    +interfaces specified for a particular programming language, one that
    +
    +is widely used among developers working in that language.
    +
    +
    +
    +  The "System Libraries" of an executable work include anything, other
    +
    +than the work as a whole, that (a) is included in the normal form of
    +
    +packaging a Major Component, but which is not part of that Major
    +
    +Component, and (b) serves only to enable use of the work with that
    +
    +Major Component, or to implement a Standard Interface for which an
    +
    +implementation is available to the public in source code form.  A
    +
    +"Major Component", in this context, means a major essential component
    +
    +(kernel, window system, and so on) of the specific operating system
    +
    +(if any) on which the executable work runs, or a compiler used to
    +
    +produce the work, or an object code interpreter used to run it.
    +
    +
    +
    +  The "Corresponding Source" for a work in object code form means all
    +
    +the source code needed to generate, install, and (for an executable
    +
    +work) run the object code and to modify the work, including scripts to
    +
    +control those activities.  However, it does not include the work's
    +
    +System Libraries, or general-purpose tools or generally available free
    +
    +programs which are used unmodified in performing those activities but
    +
    +which are not part of the work.  For example, Corresponding Source
    +
    +includes interface definition files associated with source files for
    +
    +the work, and the source code for shared libraries and dynamically
    +
    +linked subprograms that the work is specifically designed to require,
    +
    +such as by intimate data communication or control flow between those
    +
    +subprograms and other parts of the work.
    +
    +
    +
    +  The Corresponding Source need not include anything that users
    +
    +can regenerate automatically from other parts of the Corresponding
    +
    +Source.
    +
    +
    +
    +  The Corresponding Source for a work in source code form is that
    +
    +same work.
    +
    +
    +
    +  2. Basic Permissions.
    +
    +
    +
    +  All rights granted under this License are granted for the term of
    +
    +copyright on the Program, and are irrevocable provided the stated
    +
    +conditions are met.  This License explicitly affirms your unlimited
    +
    +permission to run the unmodified Program.  The output from running a
    +
    +covered work is covered by this License only if the output, given its
    +
    +content, constitutes a covered work.  This License acknowledges your
    +
    +rights of fair use or other equivalent, as provided by copyright law.
    +
    +
    +
    +  You may make, run and propagate covered works that you do not
    +
    +convey, without conditions so long as your license otherwise remains
    +
    +in force.  You may convey covered works to others for the sole purpose
    +
    +of having them make modifications exclusively for you, or provide you
    +
    +with facilities for running those works, provided that you comply with
    +
    +the terms of this License in conveying all material for which you do
    +
    +not control copyright.  Those thus making or running the covered works
    +
    +for you must do so exclusively on your behalf, under your direction
    +
    +and control, on terms that prohibit them from making any copies of
    +
    +your copyrighted material outside their relationship with you.
    +
    +
    +
    +  Conveying under any other circumstances is permitted solely under
    +
    +the conditions stated below.  Sublicensing is not allowed; section 10
    +
    +makes it unnecessary.
    +
    +
    +
    +  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    +
    +
    +
    +  No covered work shall be deemed part of an effective technological
    +
    +measure under any applicable law fulfilling obligations under article
    +
    +11 of the WIPO copyright treaty adopted on 20 December 1996, or
    +
    +similar laws prohibiting or restricting circumvention of such
    +
    +measures.
    +
    +
    +
    +  When you convey a covered work, you waive any legal power to forbid
    +
    +circumvention of technological measures to the extent such circumvention
    +
    +is effected by exercising rights under this License with respect to
    +
    +the covered work, and you disclaim any intention to limit operation or
    +
    +modification of the work as a means of enforcing, against the work's
    +
    +users, your or third parties' legal rights to forbid circumvention of
    +
    +technological measures.
    +
    +
    +
    +  4. Conveying Verbatim Copies.
    +
    +
    +
    +  You may convey verbatim copies of the Program's source code as you
    +
    +receive it, in any medium, provided that you conspicuously and
    +
    +appropriately publish on each copy an appropriate copyright notice;
    +
    +keep intact all notices stating that this License and any
    +
    +non-permissive terms added in accord with section 7 apply to the code;
    +
    +keep intact all notices of the absence of any warranty; and give all
    +
    +recipients a copy of this License along with the Program.
    +
    +
    +
    +  You may charge any price or no price for each copy that you convey,
    +
    +and you may offer support or warranty protection for a fee.
    +
    +
    +
    +  5. Conveying Modified Source Versions.
    +
    +
    +
    +  You may convey a work based on the Program, or the modifications to
    +
    +produce it from the Program, in the form of source code under the
    +
    +terms of section 4, provided that you also meet all of these conditions:
    +
    +
    +
    +    a) The work must carry prominent notices stating that you modified
    +
    +    it, and giving a relevant date.
    +
    +
    +
    +    b) The work must carry prominent notices stating that it is
    +
    +    released under this License and any conditions added under section
    +
    +    7.  This requirement modifies the requirement in section 4 to
    +
    +    "keep intact all notices".
    +
    +
    +
    +    c) You must license the entire work, as a whole, under this
    +
    +    License to anyone who comes into possession of a copy.  This
    +
    +    License will therefore apply, along with any applicable section 7
    +
    +    additional terms, to the whole of the work, and all its parts,
    +
    +    regardless of how they are packaged.  This License gives no
    +
    +    permission to license the work in any other way, but it does not
    +
    +    invalidate such permission if you have separately received it.
    +
    +
    +
    +    d) If the work has interactive user interfaces, each must display
    +
    +    Appropriate Legal Notices; however, if the Program has interactive
    +
    +    interfaces that do not display Appropriate Legal Notices, your
    +
    +    work need not make them do so.
    +
    +
    +
    +  A compilation of a covered work with other separate and independent
    +
    +works, which are not by their nature extensions of the covered work,
    +
    +and which are not combined with it such as to form a larger program,
    +
    +in or on a volume of a storage or distribution medium, is called an
    +
    +"aggregate" if the compilation and its resulting copyright are not
    +
    +used to limit the access or legal rights of the compilation's users
    +
    +beyond what the individual works permit.  Inclusion of a covered work
    +
    +in an aggregate does not cause this License to apply to the other
    +
    +parts of the aggregate.
    +
    +
    +
    +  6. Conveying Non-Source Forms.
    +
    +
    +
    +  You may convey a covered work in object code form under the terms
    +
    +of sections 4 and 5, provided that you also convey the
    +
    +machine-readable Corresponding Source under the terms of this License,
    +
    +in one of these ways:
    +
    +
    +
    +    a) Convey the object code in, or embodied in, a physical product
    +
    +    (including a physical distribution medium), accompanied by the
    +
    +    Corresponding Source fixed on a durable physical medium
    +
    +    customarily used for software interchange.
    +
    +
    +
    +    b) Convey the object code in, or embodied in, a physical product
    +
    +    (including a physical distribution medium), accompanied by a
    +
    +    written offer, valid for at least three years and valid for as
    +
    +    long as you offer spare parts or customer support for that product
    +
    +    model, to give anyone who possesses the object code either (1) a
    +
    +    copy of the Corresponding Source for all the software in the
    +
    +    product that is covered by this License, on a durable physical
    +
    +    medium customarily used for software interchange, for a price no
    +
    +    more than your reasonable cost of physically performing this
    +
    +    conveying of source, or (2) access to copy the
    +
    +    Corresponding Source from a network server at no charge.
    +
    +
    +
    +    c) Convey individual copies of the object code with a copy of the
    +
    +    written offer to provide the Corresponding Source.  This
    +
    +    alternative is allowed only occasionally and noncommercially, and
    +
    +    only if you received the object code with such an offer, in accord
    +
    +    with subsection 6b.
    +
    +
    +
    +    d) Convey the object code by offering access from a designated
    +
    +    place (gratis or for a charge), and offer equivalent access to the
    +
    +    Corresponding Source in the same way through the same place at no
    +
    +    further charge.  You need not require recipients to copy the
    +
    +    Corresponding Source along with the object code.  If the place to
    +
    +    copy the object code is a network server, the Corresponding Source
    +
    +    may be on a different server (operated by you or a third party)
    +
    +    that supports equivalent copying facilities, provided you maintain
    +
    +    clear directions next to the object code saying where to find the
    +
    +    Corresponding Source.  Regardless of what server hosts the
    +
    +    Corresponding Source, you remain obligated to ensure that it is
    +
    +    available for as long as needed to satisfy these requirements.
    +
    +
    +
    +    e) Convey the object code using peer-to-peer transmission, provided
    +
    +    you inform other peers where the object code and Corresponding
    +
    +    Source of the work are being offered to the general public at no
    +
    +    charge under subsection 6d.
    +
    +
    +
    +  A separable portion of the object code, whose source code is excluded
    +
    +from the Corresponding Source as a System Library, need not be
    +
    +included in conveying the object code work.
    +
    +
    +
    +  A "User Product" is either (1) a "consumer product", which means any
    +
    +tangible personal property which is normally used for personal, family,
    +
    +or household purposes, or (2) anything designed or sold for incorporation
    +
    +into a dwelling.  In determining whether a product is a consumer product,
    +
    +doubtful cases shall be resolved in favor of coverage.  For a particular
    +
    +product received by a particular user, "normally used" refers to a
    +
    +typical or common use of that class of product, regardless of the status
    +
    +of the particular user or of the way in which the particular user
    +
    +actually uses, or expects or is expected to use, the product.  A product
    +
    +is a consumer product regardless of whether the product has substantial
    +
    +commercial, industrial or non-consumer uses, unless such uses represent
    +
    +the only significant mode of use of the product.
    +
    +
    +
    +  "Installation Information" for a User Product means any methods,
    +
    +procedures, authorization keys, or other information required to install
    +
    +and execute modified versions of a covered work in that User Product from
    +
    +a modified version of its Corresponding Source.  The information must
    +
    +suffice to ensure that the continued functioning of the modified object
    +
    +code is in no case prevented or interfered with solely because
    +
    +modification has been made.
    +
    +
    +
    +  If you convey an object code work under this section in, or with, or
    +
    +specifically for use in, a User Product, and the conveying occurs as
    +
    +part of a transaction in which the right of possession and use of the
    +
    +User Product is transferred to the recipient in perpetuity or for a
    +
    +fixed term (regardless of how the transaction is characterized), the
    +
    +Corresponding Source conveyed under this section must be accompanied
    +
    +by the Installation Information.  But this requirement does not apply
    +
    +if neither you nor any third party retains the ability to install
    +
    +modified object code on the User Product (for example, the work has
    +
    +been installed in ROM).
    +
    +
    +
    +  The requirement to provide Installation Information does not include a
    +
    +requirement to continue to provide support service, warranty, or updates
    +
    +for a work that has been modified or installed by the recipient, or for
    +
    +the User Product in which it has been modified or installed.  Access to a
    +
    +network may be denied when the modification itself materially and
    +
    +adversely affects the operation of the network or violates the rules and
    +
    +protocols for communication across the network.
    +
    +
    +
    +  Corresponding Source conveyed, and Installation Information provided,
    +
    +in accord with this section must be in a format that is publicly
    +
    +documented (and with an implementation available to the public in
    +
    +source code form), and must require no special password or key for
    +
    +unpacking, reading or copying.
    +
    +
    +
    +  7. Additional Terms.
    +
    +
    +
    +  "Additional permissions" are terms that supplement the terms of this
    +
    +License by making exceptions from one or more of its conditions.
    +
    +Additional permissions that are applicable to the entire Program shall
    +
    +be treated as though they were included in this License, to the extent
    +
    +that they are valid under applicable law.  If additional permissions
    +
    +apply only to part of the Program, that part may be used separately
    +
    +under those permissions, but the entire Program remains governed by
    +
    +this License without regard to the additional permissions.
    +
    +
    +
    +  When you convey a copy of a covered work, you may at your option
    +
    +remove any additional permissions from that copy, or from any part of
    +
    +it.  (Additional permissions may be written to require their own
    +
    +removal in certain cases when you modify the work.)  You may place
    +
    +additional permissions on material, added by you to a covered work,
    +
    +for which you have or can give appropriate copyright permission.
    +
    +
    +
    +  Notwithstanding any other provision of this License, for material you
    +
    +add to a covered work, you may (if authorized by the copyright holders of
    +
    +that material) supplement the terms of this License with terms:
    +
    +
    +
    +    a) Disclaiming warranty or limiting liability differently from the
    +
    +    terms of sections 15 and 16 of this License; or
    +
    +
    +
    +    b) Requiring preservation of specified reasonable legal notices or
    +
    +    author attributions in that material or in the Appropriate Legal
    +
    +    Notices displayed by works containing it; or
    +
    +
    +
    +    c) Prohibiting misrepresentation of the origin of that material, or
    +
    +    requiring that modified versions of such material be marked in
    +
    +    reasonable ways as different from the original version; or
    +
    +
    +
    +    d) Limiting the use for publicity purposes of names of licensors or
    +
    +    authors of the material; or
    +
    +
    +
    +    e) Declining to grant rights under trademark law for use of some
    +
    +    trade names, trademarks, or service marks; or
    +
    +
    +
    +    f) Requiring indemnification of licensors and authors of that
    +
    +    material by anyone who conveys the material (or modified versions of
    +
    +    it) with contractual assumptions of liability to the recipient, for
    +
    +    any liability that these contractual assumptions directly impose on
    +
    +    those licensors and authors.
    +
    +
    +
    +  All other non-permissive additional terms are considered "further
    +
    +restrictions" within the meaning of section 10.  If the Program as you
    +
    +received it, or any part of it, contains a notice stating that it is
    +
    +governed by this License along with a term that is a further
    +
    +restriction, you may remove that term.  If a license document contains
    +
    +a further restriction but permits relicensing or conveying under this
    +
    +License, you may add to a covered work material governed by the terms
    +
    +of that license document, provided that the further restriction does
    +
    +not survive such relicensing or conveying.
    +
    +
    +
    +  If you add terms to a covered work in accord with this section, you
    +
    +must place, in the relevant source files, a statement of the
    +
    +additional terms that apply to those files, or a notice indicating
    +
    +where to find the applicable terms.
    +
    +
    +
    +  Additional terms, permissive or non-permissive, may be stated in the
    +
    +form of a separately written license, or stated as exceptions;
    +
    +the above requirements apply either way.
    +
    +
    +
    +  8. Termination.
    +
    +
    +
    +  You may not propagate or modify a covered work except as expressly
    +
    +provided under this License.  Any attempt otherwise to propagate or
    +
    +modify it is void, and will automatically terminate your rights under
    +
    +this License (including any patent licenses granted under the third
    +
    +paragraph of section 11).
    +
    +
    +
    +  However, if you cease all violation of this License, then your
    +
    +license from a particular copyright holder is reinstated (a)
    +
    +provisionally, unless and until the copyright holder explicitly and
    +
    +finally terminates your license, and (b) permanently, if the copyright
    +
    +holder fails to notify you of the violation by some reasonable means
    +
    +prior to 60 days after the cessation.
    +
    +
    +
    +  Moreover, your license from a particular copyright holder is
    +
    +reinstated permanently if the copyright holder notifies you of the
    +
    +violation by some reasonable means, this is the first time you have
    +
    +received notice of violation of this License (for any work) from that
    +
    +copyright holder, and you cure the violation prior to 30 days after
    +
    +your receipt of the notice.
    +
    +
    +
    +  Termination of your rights under this section does not terminate the
    +
    +licenses of parties who have received copies or rights from you under
    +
    +this License.  If your rights have been terminated and not permanently
    +
    +reinstated, you do not qualify to receive new licenses for the same
    +
    +material under section 10.
    +
    +
    +
    +  9. Acceptance Not Required for Having Copies.
    +
    +
    +
    +  You are not required to accept this License in order to receive or
    +
    +run a copy of the Program.  Ancillary propagation of a covered work
    +
    +occurring solely as a consequence of using peer-to-peer transmission
    +
    +to receive a copy likewise does not require acceptance.  However,
    +
    +nothing other than this License grants you permission to propagate or
    +
    +modify any covered work.  These actions infringe copyright if you do
    +
    +not accept this License.  Therefore, by modifying or propagating a
    +
    +covered work, you indicate your acceptance of this License to do so.
    +
    +
    +
    +  10. Automatic Licensing of Downstream Recipients.
    +
    +
    +
    +  Each time you convey a covered work, the recipient automatically
    +
    +receives a license from the original licensors, to run, modify and
    +
    +propagate that work, subject to this License.  You are not responsible
    +
    +for enforcing compliance by third parties with this License.
    +
    +
    +
    +  An "entity transaction" is a transaction transferring control of an
    +
    +organization, or substantially all assets of one, or subdividing an
    +
    +organization, or merging organizations.  If propagation of a covered
    +
    +work results from an entity transaction, each party to that
    +
    +transaction who receives a copy of the work also receives whatever
    +
    +licenses to the work the party's predecessor in interest had or could
    +
    +give under the previous paragraph, plus a right to possession of the
    +
    +Corresponding Source of the work from the predecessor in interest, if
    +
    +the predecessor has it or can get it with reasonable efforts.
    +
    +
    +
    +  You may not impose any further restrictions on the exercise of the
    +
    +rights granted or affirmed under this License.  For example, you may
    +
    +not impose a license fee, royalty, or other charge for exercise of
    +
    +rights granted under this License, and you may not initiate litigation
    +
    +(including a cross-claim or counterclaim in a lawsuit) alleging that
    +
    +any patent claim is infringed by making, using, selling, offering for
    +
    +sale, or importing the Program or any portion of it.
    +
    +
    +
    +  11. Patents.
    +
    +
    +
    +  A "contributor" is a copyright holder who authorizes use under this
    +
    +License of the Program or a work on which the Program is based.  The
    +
    +work thus licensed is called the contributor's "contributor version".
    +
    +
    +
    +  A contributor's "essential patent claims" are all patent claims
    +
    +owned or controlled by the contributor, whether already acquired or
    +
    +hereafter acquired, that would be infringed by some manner, permitted
    +
    +by this License, of making, using, or selling its contributor version,
    +
    +but do not include claims that would be infringed only as a
    +
    +consequence of further modification of the contributor version.  For
    +
    +purposes of this definition, "control" includes the right to grant
    +
    +patent sublicenses in a manner consistent with the requirements of
    +
    +this License.
    +
    +
    +
    +  Each contributor grants you a non-exclusive, worldwide, royalty-free
    +
    +patent license under the contributor's essential patent claims, to
    +
    +make, use, sell, offer for sale, import and otherwise run, modify and
    +
    +propagate the contents of its contributor version.
    +
    +
    +
    +  In the following three paragraphs, a "patent license" is any express
    +
    +agreement or commitment, however denominated, not to enforce a patent
    +
    +(such as an express permission to practice a patent or covenant not to
    +
    +sue for patent infringement).  To "grant" such a patent license to a
    +
    +party means to make such an agreement or commitment not to enforce a
    +
    +patent against the party.
    +
    +
    +
    +  If you convey a covered work, knowingly relying on a patent license,
    +
    +and the Corresponding Source of the work is not available for anyone
    +
    +to copy, free of charge and under the terms of this License, through a
    +
    +publicly available network server or other readily accessible means,
    +
    +then you must either (1) cause the Corresponding Source to be so
    +
    +available, or (2) arrange to deprive yourself of the benefit of the
    +
    +patent license for this particular work, or (3) arrange, in a manner
    +
    +consistent with the requirements of this License, to extend the patent
    +
    +license to downstream recipients.  "Knowingly relying" means you have
    +
    +actual knowledge that, but for the patent license, your conveying the
    +
    +covered work in a country, or your recipient's use of the covered work
    +
    +in a country, would infringe one or more identifiable patents in that
    +
    +country that you have reason to believe are valid.
    +
    +
    +
    +  If, pursuant to or in connection with a single transaction or
    +
    +arrangement, you convey, or propagate by procuring conveyance of, a
    +
    +covered work, and grant a patent license to some of the parties
    +
    +receiving the covered work authorizing them to use, propagate, modify
    +
    +or convey a specific copy of the covered work, then the patent license
    +
    +you grant is automatically extended to all recipients of the covered
    +
    +work and works based on it.
    +
    +
    +
    +  A patent license is "discriminatory" if it does not include within
    +
    +the scope of its coverage, prohibits the exercise of, or is
    +
    +conditioned on the non-exercise of one or more of the rights that are
    +
    +specifically granted under this License.  You may not convey a covered
    +
    +work if you are a party to an arrangement with a third party that is
    +
    +in the business of distributing software, under which you make payment
    +
    +to the third party based on the extent of your activity of conveying
    +
    +the work, and under which the third party grants, to any of the
    +
    +parties who would receive the covered work from you, a discriminatory
    +
    +patent license (a) in connection with copies of the covered work
    +
    +conveyed by you (or copies made from those copies), or (b) primarily
    +
    +for and in connection with specific products or compilations that
    +
    +contain the covered work, unless you entered into that arrangement,
    +
    +or that patent license was granted, prior to 28 March 2007.
    +
    +
    +
    +  Nothing in this License shall be construed as excluding or limiting
    +
    +any implied license or other defenses to infringement that may
    +
    +otherwise be available to you under applicable patent law.
    +
    +
    +
    +  12. No Surrender of Others' Freedom.
    +
    +
    +
    +  If conditions are imposed on you (whether by court order, agreement or
    +
    +otherwise) that contradict the conditions of this License, they do not
    +
    +excuse you from the conditions of this License.  If you cannot convey a
    +
    +covered work so as to satisfy simultaneously your obligations under this
    +
    +License and any other pertinent obligations, then as a consequence you may
    +
    +not convey it at all.  For example, if you agree to terms that obligate you
    +
    +to collect a royalty for further conveying from those to whom you convey
    +
    +the Program, the only way you could satisfy both those terms and this
    +
    +License would be to refrain entirely from conveying the Program.
    +
    +
    +
    +  13. Use with the GNU Affero General Public License.
    +
    +
    +
    +  Notwithstanding any other provision of this License, you have
    +
    +permission to link or combine any covered work with a work licensed
    +
    +under version 3 of the GNU Affero General Public License into a single
    +
    +combined work, and to convey the resulting work.  The terms of this
    +
    +License will continue to apply to the part which is the covered work,
    +
    +but the special requirements of the GNU Affero General Public License,
    +
    +section 13, concerning interaction through a network will apply to the
    +
    +combination as such.
    +
    +
    +
    +  14. Revised Versions of this License.
    +
    +
    +
    +  The Free Software Foundation may publish revised and/or new versions of
    +
    +the GNU General Public License from time to time.  Such new versions will
    +
    +be similar in spirit to the present version, but may differ in detail to
    +
    +address new problems or concerns.
    +
    +
    +
    +  Each version is given a distinguishing version number.  If the
    +
    +Program specifies that a certain numbered version of the GNU General
    +
    +Public License "or any later version" applies to it, you have the
    +
    +option of following the terms and conditions either of that numbered
    +
    +version or of any later version published by the Free Software
    +
    +Foundation.  If the Program does not specify a version number of the
    +
    +GNU General Public License, you may choose any version ever published
    +
    +by the Free Software Foundation.
    +
    +
    +
    +  If the Program specifies that a proxy can decide which future
    +
    +versions of the GNU General Public License can be used, that proxy's
    +
    +public statement of acceptance of a version permanently authorizes you
    +
    +to choose that version for the Program.
    +
    +
    +
    +  Later license versions may give you additional or different
    +
    +permissions.  However, no additional obligations are imposed on any
    +
    +author or copyright holder as a result of your choosing to follow a
    +
    +later version.
    +
    +
    +
    +  15. Disclaimer of Warranty.
    +
    +
    +
    +  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    +
    +APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    +
    +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
    +
    +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
    +
    +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
    +
    +IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
    +
    +ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +
    +
    +  16. Limitation of Liability.
    +
    +
    +
    +  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
    +
    +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
    +
    +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
    +
    +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
    +
    +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
    +
    +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
    +
    +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
    +
    +SUCH DAMAGES.
    +
    +
    +
    +  17. Interpretation of Sections 15 and 16.
    +
    +
    +
    +  If the disclaimer of warranty and limitation of liability provided
    +
    +above cannot be given local legal effect according to their terms,
    +
    +reviewing courts shall apply local law that most closely approximates
    +
    +an absolute waiver of all civil liability in connection with the
    +
    +Program, unless a warranty or assumption of liability accompanies a
    +
    +copy of the Program in return for a fee.
    +
    +
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +
    +
    +            How to Apply These Terms to Your New Programs
    +
    +
    +
    +  If you develop a new program, and you want it to be of the greatest
    +
    +possible use to the public, the best way to achieve this is to make it
    +
    +free software which everyone can redistribute and change under these terms.
    +
    +
    +
    +  To do so, attach the following notices to the program.  It is safest
    +
    +to attach them to the start of each source file to most effectively
    +
    +state the exclusion of warranty; and each file should have at least
    +
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +
    +
    +    
    +
    +    Copyright (C)   
    +
    +
    +
    +    This program is free software: you can redistribute it and/or modify
    +
    +    it under the terms of the GNU General Public License as published by
    +
    +    the Free Software Foundation, either version 3 of the License, or
    +
    +    (at your option) any later version.
    +
    +
    +
    +    This program is distributed in the hope that it will be useful,
    +
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +
    +    GNU General Public License for more details.
    +
    +
    +
    +    You should have received a copy of the GNU General Public License
    +
    +    along with this program.  If not, see .
    +
    +
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +
    +
    +  If the program does terminal interaction, make it output a short
    +
    +notice like this when it starts in an interactive mode:
    +
    +
    +
    +      Copyright (C)   
    +
    +    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +
    +    This is free software, and you are welcome to redistribute it
    +
    +    under certain conditions; type `show c' for details.
    +
    +
    +
    +The hypothetical commands `show w' and `show c' should show the appropriate
    +
    +parts of the General Public License.  Of course, your program's commands
    +
    +might be different; for a GUI interface, you would use an "about box".
    +
    +
    +
    +  You should also get your employer (if you work as a programmer) or school,
    +
    +if any, to sign a "copyright disclaimer" for the program, if necessary.
    +
    +For more information on this, and how to apply and follow the GNU GPL, see
    +
    +.
    +
    +
    +
    +  The GNU General Public License does not permit incorporating your program
    +
    +into proprietary programs.  If your program is a subroutine library, you
    +
    +may consider it more useful to permit linking proprietary applications with
    +
    +the library.  If this is what you want to do, use the GNU Lesser General
    +
    +Public License instead of this License.  But first, please read
    +
    +.
    +
    +
    +
    +--------------- SECTION 4: GNU Library General Public License, V2.0 -----------
    +
    +		  GNU LIBRARY GENERAL PUBLIC LICENSE
    +		       Version 2, June 1991
    +
    + Copyright (C) 1991 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the library GPL.  It is
    + numbered 2 because it goes with version 2 of the ordinary GPL.]
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Library General Public License, applies to some
    +specially designated Free Software Foundation software, and to any
    +other libraries whose authors decide to use it.  You can use it for
    +your libraries, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if
    +you distribute copies of the library, or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link a program with the library, you must provide
    +complete object files to the recipients so that they can relink them
    +with the library, after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  Our method of protecting your rights has two steps: (1) copyright
    +the library, and (2) offer you this license which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  Also, for each distributor's protection, we want to make certain
    +that everyone understands that there is no warranty for this free
    +library.  If the library is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original
    +version, so that any problems introduced by others will not reflect on
    +the original authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that companies distributing free
    +software will individually obtain patent licenses, thus in effect
    +transforming the program into proprietary software.  To prevent this,
    +we have made it clear that any patent must be licensed for everyone's
    +free use or not licensed at all.
    +
    +  Most GNU software, including some libraries, is covered by the ordinary
    +GNU General Public License, which was designed for utility programs.  This
    +license, the GNU Library General Public License, applies to certain
    +designated libraries.  This license is quite different from the ordinary
    +one; be sure to read it in full, and don't assume that anything in it is
    +the same as in the ordinary license.
    +
    +  The reason we have a separate public license for some libraries is that
    +they blur the distinction we usually make between modifying or adding to a
    +program and simply using it.  Linking a program with a library, without
    +changing the library, is in some sense simply using the library, and is
    +analogous to running a utility program or application program.  However, in
    +a textual and legal sense, the linked executable is a combined work, a
    +derivative of the original library, and the ordinary General Public License
    +treats it as such.
    +
    +  Because of this blurred distinction, using the ordinary General
    +Public License for libraries did not effectively promote software
    +sharing, because most developers did not use the libraries.  We
    +concluded that weaker conditions might promote sharing better.
    +
    +  However, unrestricted linking of non-free programs would deprive the
    +users of those programs of all benefit from the free status of the
    +libraries themselves.  This Library General Public License is intended to
    +permit developers of non-free programs to use free libraries, while
    +preserving your freedom as a user of such programs to change the free
    +libraries that are incorporated in them.  (We have not seen how to achieve
    +this as regards changes in header files, but we have achieved it as regards
    +changes in the actual functions of the Library.)  The hope is that this
    +will lead to faster development of free libraries.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, while the latter only
    +works together with the library.
    +
    +  Note that it is possible for a library to be covered by the ordinary
    +General Public License rather than by this special one.
    +
    +		  GNU LIBRARY GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library which
    +contains a notice placed by the copyright holder or other authorized
    +party saying it may be distributed under the terms of this Library
    +General Public License (also called "this License").  Each licensee is
    +addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +  
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also compile or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    c) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    d) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the source code distributed need not include anything that is normally
    +distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Library General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    
    +    Copyright (C)   
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Library General Public
    +    License as published by the Free Software Foundation; either
    +    version 2 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Library General Public License for more details.
    +
    +    You should have received a copy of the GNU Library General Public
    +    License along with this library; if not, write to the Free
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  , 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +--------------- SECTION 5: GNU Lesser General Public License, V2.1 -----------
    +
    +		  GNU LESSER GENERAL PUBLIC LICENSE
    +		       Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +			    Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software--to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages--typically libraries--of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +		  GNU LESSER GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +           How to Apply These Terms to Your New Libraries
    +
    +  If you develop a new library, and you want it to be of the greatest
    +possible use to the public, we recommend making it free software that
    +everyone can redistribute and change.  You can do so by permitting
    +redistribution under these terms (or, alternatively, under the terms of the
    +ordinary General Public License).
    +
    +  To apply these terms, attach the following notices to the library.  It is
    +safest to attach them to the start of each source file to most effectively
    +convey the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    
    +    Copyright (C)   
    +
    +    This library is free software; you can redistribute it and/or
    +    modify it under the terms of the GNU Lesser General Public
    +    License as published by the Free Software Foundation; either
    +    version 2.1 of the License, or (at your option) any later version.
    +
    +    This library is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +    Lesser General Public License for more details.
    +
    +    You should have received a copy of the GNU Lesser General Public
    +    License along with this library; if not, write to the Free Software
    +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the library, if
    +necessary.  Here is a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
    +
    +  , 1 April 1990
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +--------------- SECTION 6: GNU Lesser General Public License, V3.0 -----------
    +
    +		   GNU LESSER GENERAL PUBLIC LICENSE
    +
    +                       Version 3, 29 June 2007
    +
    +
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. 
    +
    + Everyone is permitted to copy and distribute verbatim copies
    +
    + of this license document, but changing it is not allowed.
    +
    +
    +
    +
    +
    +  This version of the GNU Lesser General Public License incorporates
    +
    +the terms and conditions of version 3 of the GNU General Public
    +
    +License, supplemented by the additional permissions listed below.
    +
    +
    +
    +  0. Additional Definitions.
    +
    +
    +
    +  As used herein, "this License" refers to version 3 of the GNU Lesser
    +
    +General Public License, and the "GNU GPL" refers to version 3 of the GNU
    +
    +General Public License.
    +
    +
    +
    +  "The Library" refers to a covered work governed by this License,
    +
    +other than an Application or a Combined Work as defined below.
    +
    +
    +
    +  An "Application" is any work that makes use of an interface provided
    +
    +by the Library, but which is not otherwise based on the Library.
    +
    +Defining a subclass of a class defined by the Library is deemed a mode
    +
    +of using an interface provided by the Library.
    +
    +
    +
    +  A "Combined Work" is a work produced by combining or linking an
    +
    +Application with the Library.  The particular version of the Library
    +
    +with which the Combined Work was made is also called the "Linked
    +
    +Version".
    +
    +
    +
    +  The "Minimal Corresponding Source" for a Combined Work means the
    +
    +Corresponding Source for the Combined Work, excluding any source code
    +
    +for portions of the Combined Work that, considered in isolation, are
    +
    +based on the Application, and not on the Linked Version.
    +
    +
    +
    +  The "Corresponding Application Code" for a Combined Work means the
    +
    +object code and/or source code for the Application, including any data
    +
    +and utility programs needed for reproducing the Combined Work from the
    +
    +Application, but excluding the System Libraries of the Combined Work.
    +
    +
    +
    +  1. Exception to Section 3 of the GNU GPL.
    +
    +
    +
    +  You may convey a covered work under sections 3 and 4 of this License
    +
    +without being bound by section 3 of the GNU GPL.
    +
    +
    +
    +  2. Conveying Modified Versions.
    +
    +
    +
    +  If you modify a copy of the Library, and, in your modifications, a
    +
    +facility refers to a function or data to be supplied by an Application
    +
    +that uses the facility (other than as an argument passed when the
    +
    +facility is invoked), then you may convey a copy of the modified
    +
    +version:
    +
    +
    +
    +   a) under this License, provided that you make a good faith effort to
    +
    +   ensure that, in the event an Application does not supply the
    +
    +   function or data, the facility still operates, and performs
    +
    +   whatever part of its purpose remains meaningful, or
    +
    +
    +
    +   b) under the GNU GPL, with none of the additional permissions of
    +
    +   this License applicable to that copy.
    +
    +
    +
    +  3. Object Code Incorporating Material from Library Header Files.
    +
    +
    +
    +  The object code form of an Application may incorporate material from
    +
    +a header file that is part of the Library.  You may convey such object
    +
    +code under terms of your choice, provided that, if the incorporated
    +
    +material is not limited to numerical parameters, data structure
    +
    +layouts and accessors, or small macros, inline functions and templates
    +
    +(ten or fewer lines in length), you do both of the following:
    +
    +
    +
    +   a) Give prominent notice with each copy of the object code that the
    +
    +   Library is used in it and that the Library and its use are
    +
    +   covered by this License.
    +
    +
    +
    +   b) Accompany the object code with a copy of the GNU GPL and this license
    +
    +   document.
    +
    +
    +
    +  4. Combined Works.
    +
    +
    +
    +  You may convey a Combined Work under terms of your choice that,
    +
    +taken together, effectively do not restrict modification of the
    +
    +portions of the Library contained in the Combined Work and reverse
    +
    +engineering for debugging such modifications, if you also do each of
    +
    +the following:
    +
    +
    +
    +   a) Give prominent notice with each copy of the Combined Work that
    +
    +   the Library is used in it and that the Library and its use are
    +
    +   covered by this License.
    +
    +
    +
    +   b) Accompany the Combined Work with a copy of the GNU GPL and this license
    +
    +   document.
    +
    +
    +
    +   c) For a Combined Work that displays copyright notices during
    +
    +   execution, include the copyright notice for the Library among
    +
    +   these notices, as well as a reference directing the user to the
    +
    +   copies of the GNU GPL and this license document.
    +
    +
    +
    +   d) Do one of the following:
    +
    +
    +
    +       0) Convey the Minimal Corresponding Source under the terms of this
    +
    +       License, and the Corresponding Application Code in a form
    +
    +       suitable for, and under terms that permit, the user to
    +
    +       recombine or relink the Application with a modified version of
    +
    +       the Linked Version to produce a modified Combined Work, in the
    +
    +       manner specified by section 6 of the GNU GPL for conveying
    +
    +       Corresponding Source.
    +
    +
    +
    +       1) Use a suitable shared library mechanism for linking with the
    +
    +       Library.  A suitable mechanism is one that (a) uses at run time
    +
    +       a copy of the Library already present on the user's computer
    +
    +       system, and (b) will operate properly with a modified version
    +
    +       of the Library that is interface-compatible with the Linked
    +
    +       Version.
    +
    +
    +
    +   e) Provide Installation Information, but only if you would otherwise
    +
    +   be required to provide such information under section 6 of the
    +
    +   GNU GPL, and only to the extent that such information is
    +
    +   necessary to install and execute a modified version of the
    +
    +   Combined Work produced by recombining or relinking the
    +
    +   Application with a modified version of the Linked Version. (If
    +
    +   you use option 4d0, the Installation Information must accompany
    +
    +   the Minimal Corresponding Source and Corresponding Application
    +
    +   Code. If you use option 4d1, you must provide the Installation
    +
    +   Information in the manner specified by section 6 of the GNU GPL
    +
    +   for conveying Corresponding Source.)
    +
    +
    +
    +  5. Combined Libraries.
    +
    +
    +
    +  You may place library facilities that are a work based on the
    +
    +Library side by side in a single library together with other library
    +
    +facilities that are not Applications and are not covered by this
    +
    +License, and convey such a combined library under terms of your
    +
    +choice, if you do both of the following:
    +
    +
    +
    +   a) Accompany the combined library with a copy of the same work based
    +
    +   on the Library, uncombined with any other library facilities,
    +
    +   conveyed under the terms of this License.
    +
    +
    +
    +   b) Give prominent notice with the combined library that part of it
    +
    +   is a work based on the Library, and explaining where to find the
    +
    +   accompanying uncombined form of the same work.
    +
    +
    +
    +  6. Revised Versions of the GNU Lesser General Public License.
    +
    +
    +
    +  The Free Software Foundation may publish revised and/or new versions
    +
    +of the GNU Lesser General Public License from time to time. Such new
    +
    +versions will be similar in spirit to the present version, but may
    +
    +differ in detail to address new problems or concerns.
    +
    +
    +
    +  Each version is given a distinguishing version number. If the
    +
    +Library as you received it specifies that a certain numbered version
    +
    +of the GNU Lesser General Public License "or any later version"
    +
    +applies to it, you have the option of following the terms and
    +
    +conditions either of that published version or of any later version
    +
    +published by the Free Software Foundation. If the Library as you
    +
    +received it does not specify a version number of the GNU Lesser
    +
    +General Public License, you may choose any version of the GNU Lesser
    +
    +General Public License ever published by the Free Software Foundation.
    +
    +
    +
    +  If the Library as you received it specifies that a proxy can decide
    +
    +whether future versions of the GNU Lesser General Public License shall
    +
    +apply, that proxy's public statement of acceptance of any version is
    +
    +permanent authorization for you to choose that version for the
    +
    +Library.
    +
    +
    +
    +--------------- SECTION 7: Mozilla Public License, V2.0 -----------
    +
    +Mozilla Public License
    +
    +Version 2.0
    +
    +
    +
    +1. Definitions
    +
    +
    +
    +1.1. “Contributor”
    +
    +means each individual or legal entity that creates, contributes to the creation of, or owns Covered Software.
    +
    +
    +
    +1.2. “Contributor Version”
    +
    +means the combination of the Contributions of others (if any) used by a Contributor and that particular Contributor’s Contribution.
    +
    +
    +
    +1.3. “Contribution”
    +
    +means Covered Software of a particular Contributor.
    +
    +
    +
    +1.4. “Covered Software”
    +
    +means Source Code Form to which the initial Contributor has attached the notice in Exhibit A, the Executable Form of such Source Code Form, and Modifications of such Source Code Form, in each case including portions thereof.
    +
    +
    +
    +1.5. “Incompatible With Secondary Licenses”
    +
    +means
    +
    +
    +
    +that the initial Contributor has attached the notice described in Exhibit B to the Covered Software; or
    +
    +
    +
    +that the Covered Software was made available under the terms of version 1.1 or earlier of the License, but not also under the terms of a Secondary License.
    +
    +
    +
    +1.6. “Executable Form”
    +
    +means any form of the work other than Source Code Form.
    +
    +
    +
    +1.7. “Larger Work”
    +
    +means a work that combines Covered Software with other material, in a separate file or files, that is not Covered Software.
    +
    +
    +
    +1.8. “License”
    +
    +means this document.
    +
    +
    +
    +1.9. “Licensable”
    +
    +means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently, any and all of the rights conveyed by this License.
    +
    +
    +
    +1.10. “Modifications”
    +
    +means any of the following:
    +
    +
    +
    +any file in Source Code Form that results from an addition to, deletion from, or modification of the contents of Covered Software; or
    +
    +
    +
    +any new file in Source Code Form that contains any Covered Software.
    +
    +
    +
    +1.11. “Patent Claims” of a Contributor
    +
    +means any patent claim(s), including without limitation, method, process, and apparatus claims, in any patent Licensable by such Contributor that would be infringed, but for the grant of the License, by the making, using, selling, offering for sale, having made, import, or transfer of either its Contributions or its Contributor Version.
    +
    +
    +
    +1.12. “Secondary License”
    +
    +means either the GNU General Public License, Version 2.0, the GNU Lesser General Public License, Version 2.1, the GNU Affero General Public License, Version 3.0, or any later versions of those licenses.
    +
    +
    +
    +1.13. “Source Code Form”
    +
    +means the form of the work preferred for making modifications.
    +
    +
    +
    +1.14. “You” (or “Your”)
    +
    +means an individual or a legal entity exercising rights under this License. For legal entities, “You” includes any entity that controls, is controlled by, or is under common control with You. For purposes of this definition, “control” means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50) of the outstanding shares or beneficial ownership of such entity.
    +
    +
    +
    +2. License Grants and Conditions
    +
    +
    +
    +2.1. Grants
    +
    +
    +
    +Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
    +
    +
    +
    +under intellectual property rights (other than patent or trademark) Licensable by such Contributor to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit its Contributions, either on an unmodified basis, with Modifications, or as part of a Larger Work; and
    +
    +
    +
    +under Patent Claims of such Contributor to make, use, sell, offer for sale, have made, import, and otherwise transfer either its Contributions or its Contributor Version.
    +
    +
    +
    +2.2. Effective Date
    +
    +
    +
    +The licenses granted in Section 2.1 with respect to any Contribution become effective for each Contribution on the date the Contributor first distributes such Contribution.
    +
    +
    +
    +2.3. Limitations on Grant Scope
    +
    +
    +
    +The licenses granted in this Section 2 are the only rights granted under this License. No additional rights or licenses will be implied from the distribution or licensing of Covered Software under this License. Notwithstanding Section 2.1(b) above, no patent license is granted by a Contributor:
    +
    +
    +
    +for any code that a Contributor has removed from Covered Software; or
    +
    +
    +
    +for infringements caused by: (i) Your and any other third party’s modifications of Covered Software, or (ii) the combination of its Contributions with other software (except as part of its Contributor Version); or
    +
    +
    +
    +under Patent Claims infringed by Covered Software in the absence of its Contributions.
    +
    +
    +
    +This License does not grant any rights in the trademarks, service marks, or logos of any Contributor (except as may be necessary to comply with the notice requirements in Section 3.4).
    +
    +
    +
    +2.4. Subsequent Licenses
    +
    +
    +
    +No Contributor makes additional grants as a result of Your choice to distribute the Covered Software under a subsequent version of this License (see Section 10.2) or under the terms of a Secondary License (if permitted under the terms of Section 3.3).
    +
    +
    +
    +2.5. Representation
    +
    +
    +
    +Each Contributor represents that the Contributor believes its Contributions are its original creation(s) or it has sufficient rights to grant the rights to its Contributions conveyed by this License.
    +
    +
    +
    +2.6. Fair Use
    +
    +
    +
    +This License is not intended to limit any rights You have under applicable copyright doctrines of fair use, fair dealing, or other equivalents.
    +
    +
    +
    +2.7. Conditions
    +
    +
    +
    +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in Section 2.1.
    +
    +
    +
    +3. Responsibilities
    +
    +
    +
    +3.1. Distribution of Source Form
    +
    +
    +
    +All distribution of Covered Software in Source Code Form, including any Modifications that You create or to which You contribute, must be under the terms of this License. You must inform recipients that the Source Code Form of the Covered Software is governed by the terms of this License, and how they can obtain a copy of this License. You may not attempt to alter or restrict the recipients’ rights in the Source Code Form.
    +
    +
    +
    +3.2. Distribution of Executable Form
    +
    +
    +
    +If You distribute Covered Software in Executable Form then:
    +
    +
    +
    +such Covered Software must also be made available in Source Code Form, as described in Section 3.1, and You must inform recipients of the Executable Form how they can obtain a copy of such Source Code Form by reasonable means in a timely manner, at a charge no more than the cost of distribution to the recipient; and
    +
    +
    +
    +You may distribute such Executable Form under the terms of this License, or sublicense it under different terms, provided that the license for the Executable Form does not attempt to limit or alter the recipients’ rights in the Source Code Form under this License.
    +
    +
    +
    +3.3. Distribution of a Larger Work
    +
    +
    +
    +You may create and distribute a Larger Work under terms of Your choice, provided that You also comply with the requirements of this License for the Covered Software. If the Larger Work is a combination of Covered Software with a work governed by one or more Secondary Licenses, and the Covered Software is not Incompatible With Secondary Licenses, this License permits You to additionally distribute such Covered Software under the terms of such Secondary License(s), so that the recipient of the Larger Work may, at their option, further distribute the Covered Software under the terms of either this License or such Secondary License(s).
    +
    +
    +
    +3.4. Notices
    +
    +
    +
    +You may not remove or alter the substance of any license notices (including copyright notices, patent notices, disclaimers of warranty, or limitations of liability) contained within the Source Code Form of the Covered Software, except that You may alter any license notices to the extent required to remedy known factual inaccuracies.
    +
    +
    +
    +3.5. Application of Additional Terms
    +
    +
    +
    +You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, You may do so only on Your own behalf, and not on behalf of any Contributor. You must make it absolutely clear that any such warranty, support, indemnity, or liability obligation is offered by You alone, and You hereby agree to indemnify every Contributor for any liability incurred by such Contributor as a result of warranty, support, indemnity or liability terms You offer. You may include additional disclaimers of warranty and limitations of liability specific to any jurisdiction.
    +
    +
    +
    +4. Inability to Comply Due to Statute or Regulation
    +
    +
    +
    +If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Software due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be placed in a text file included with all distributions of the Covered Software under this License. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it.
    +
    +
    +
    +5. Termination
    +
    +
    +
    +5.1. The rights granted under this License will terminate automatically if You fail to comply with any of its terms. However, if You become compliant, then the rights granted under this License from a particular Contributor are reinstated (a) provisionally, unless and until such Contributor explicitly and finally terminates Your grants, and (b) on an ongoing basis, if such Contributor fails to notify You of the non-compliance by some reasonable means prior to 60 days after You have come back into compliance. Moreover, Your grants from a particular Contributor are reinstated on an ongoing basis if such Contributor notifies You of the non-compliance by some reasonable means, this is the first time You have received notice of non-compliance with this License from such Contributor, and You become compliant prior to 30 days after Your receipt of the notice.
    +
    +
    +
    +5.2. If You initiate litigation against any entity by asserting a patent infringement claim (excluding declaratory judgment actions, counter-claims, and cross-claims) alleging that a Contributor Version directly or indirectly infringes any patent, then the rights granted to You by any and all Contributors for the Covered Software under Section 2.1 of this License shall terminate.
    +
    +
    +
    +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or Your distributors under this License prior to termination shall survive termination.
    +
    +
    +
    +6. Disclaimer of Warranty
    +
    +
    +
    +Covered Software is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the Covered Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Covered Software is with You. Should any Covered Software prove defective in any respect, You (not any Contributor) assume the cost of any necessary servicing, repair, or correction. This disclaimer of warranty constitutes an essential part of this License. No use of any Covered Software is authorized under this License except under this disclaimer.
    +
    +
    +
    +7. Limitation of Liability
    +
    +
    +
    +Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall any Contributor, or anyone who distributes Covered Software as permitted above, be liable to You for any direct, indirect, special, incidental, or consequential damages of any character including, without limitation, damages for lost profits, loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages. This limitation of liability shall not apply to liability for death or personal injury resulting from such party’s negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You.
    +
    +
    +
    +8. Litigation
    +
    +
    +
    +Any litigation relating to this License may be brought only in the courts of a jurisdiction where the defendant maintains its principal place of business and such litigation shall be governed by laws of that jurisdiction, without reference to its conflict-of-law provisions. Nothing in this Section shall prevent a party’s ability to bring cross-claims or counter-claims.
    +
    +
    +
    +9. Miscellaneous
    +
    +
    +
    +This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not be used to construe this License against a Contributor.
    +
    +
    +
    +10. Versions of the License
    +
    +
    +
    +10.1. New Versions
    +
    +
    +
    +Mozilla Foundation is the license steward. Except as provided in Section 10.3, no one other than the license steward has the right to modify or publish new versions of this License. Each version will be given a distinguishing version number.
    +
    +
    +
    +10.2. Effect of New Versions
    +
    +
    +
    +You may distribute the Covered Software under the terms of the version of the License under which You originally received the Covered Software, or under the terms of any subsequent version published by the license steward.
    +
    +
    +
    +10.3. Modified Versions
    +
    +
    +
    +If you create software not governed by this License, and you want to create a new license for such software, you may create and use a modified version of this License if you rename the license and remove any references to the name of the license steward (except to note that such modified license differs from this License).
    +
    +
    +
    +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses
    +
    +
    +
    +If You choose to distribute Source Code Form that is Incompatible With Secondary Licenses under the terms of this version of the License, the notice described in Exhibit B of this License must be attached.
    +
    +
    +
    +Exhibit A - Source Code Form License Notice
    +
    +
    +
    +This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
    +
    +
    +
    +If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
    +
    +
    +
    +You may add additional accurate notices of copyright ownership.
    +
    +
    +
    +Exhibit B - “Incompatible With Secondary Licenses” Notice
    +
    +
    +
    +This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0.
    +
    +
    +
    +--------------- SECTION 8: GNU General Public License, V1.0 -----------
    +
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +		     Version 1, February 1989
    +
    + Copyright (C) 1989 Free Software Foundation, Inc.
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +			    Preamble
    +
    +  The license agreements of most software companies try to keep users
    +at the mercy of those companies.  By contrast, our General Public
    +License is intended to guarantee your freedom to share and change free
    +software--to make sure the software is free for all its users.  The
    +General Public License applies to the Free Software Foundation's
    +software and to any other program whose authors commit to using it.
    +You can use it for your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Specifically, the General Public License is designed to make
    +sure that you have the freedom to give away or sell copies of free
    +software, that you receive source code or can get it if you want it,
    +that you can change the software or use pieces of it in new free
    +programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of a such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must tell them their rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +		    GNU GENERAL PUBLIC LICENSE
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any program or other work which
    +contains a notice placed by the copyright holder saying it may be
    +distributed under the terms of this General Public License.  The
    +"Program", below, refers to any such program or work, and a "work based
    +on the Program" means either the Program or any work containing the
    +Program or a portion of it, either verbatim or with modifications.  Each
    +licensee is addressed as "you".
    +
    +  1. You may copy and distribute verbatim copies of the Program's source
    +code as you receive it, in any medium, provided that you conspicuously and
    +appropriately publish on each copy an appropriate copyright notice and
    +disclaimer of warranty; keep intact all the notices that refer to this
    +General Public License and to the absence of any warranty; and give any
    +other recipients of the Program a copy of this General Public License
    +along with the Program.  You may charge a fee for the physical act of
    +transferring a copy.
    +
    +  2. You may modify your copy or copies of the Program or any portion of
    +it, and copy and distribute such modifications under the terms of Paragraph
    +1 above, provided that you also do the following:
    +
    +    a) cause the modified files to carry prominent notices stating that
    +    you changed the files and the date of any change; and
    +
    +    b) cause the whole of any work that you distribute or publish, that
    +    in whole or in part contains the Program or any part thereof, either
    +    with or without modifications, to be licensed at no charge to all
    +    third parties under the terms of this General Public License (except
    +    that you may choose to grant warranty protection to some or all
    +    third parties, at your option).
    +
    +    c) If the modified program normally reads commands interactively when
    +    run, you must cause it, when started running for such interactive use
    +    in the simplest and most usual way, to print or display an
    +    announcement including an appropriate copyright notice and a notice
    +    that there is no warranty (or else, saying that you provide a
    +    warranty) and that users may redistribute the program under these
    +    conditions, and telling the user how to view a copy of this General
    +    Public License.
    +
    +    d) You may charge a fee for the physical act of transferring a
    +    copy, and you may at your option offer warranty protection in
    +    exchange for a fee.
    +
    +Mere aggregation of another independent work with the Program (or its
    +derivative) on a volume of a storage or distribution medium does not bring
    +the other work under the scope of these terms.
    +
    +  3. You may copy and distribute the Program (or a portion or derivative of
    +it, under Paragraph 2) in object code or executable form under the terms of
    +Paragraphs 1 and 2 above provided that you also do one of the following:
    +
    +    a) accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of
    +    Paragraphs 1 and 2 above; or,
    +
    +    b) accompany it with a written offer, valid for at least three
    +    years, to give any third party free (except for a nominal charge
    +    for the cost of distribution) a complete machine-readable copy of the
    +    corresponding source code, to be distributed under the terms of
    +    Paragraphs 1 and 2 above; or,
    +
    +    c) accompany it with the information you received as to where the
    +    corresponding source code may be obtained.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form alone.)
    +
    +Source code for a work means the preferred form of the work for making
    +modifications to it.  For an executable file, complete source code means
    +all the source code for all modules it contains; but, as a special
    +exception, it need not include source code for modules which are standard
    +libraries that accompany the operating system on which the executable
    +file runs, or for standard header files or definitions files that
    +accompany that operating system.
    +
    +  4. You may not copy, modify, sublicense, distribute or transfer the
    +Program except as expressly provided under this General Public License.
    +Any attempt otherwise to copy, modify, sublicense, distribute or transfer
    +the Program is void, and will automatically terminate your rights to use
    +the Program under this License.  However, parties who have received
    +copies, or rights to use copies, from you under this General Public
    +License will not have their licenses terminated so long as such parties
    +remain in full compliance.
    +
    +  5. By copying, distributing or modifying the Program (or any work based
    +on the Program) you indicate your acceptance of this license to do so,
    +and all its terms and conditions.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the original
    +licensor to copy, distribute or modify the Program subject to these
    +terms and conditions.  You may not impose any further restrictions on the
    +recipients' exercise of the rights granted herein.
    +
    +  7. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of the license which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +the license, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  8. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +			    NO WARRANTY
    +
    +  9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +		     END OF TERMS AND CONDITIONS
    +
    +	Appendix: How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to humanity, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these
    +terms.
    +
    +  To do so, attach the following notices to the program.  It is safest to
    +attach them to the start of each source file to most effectively convey
    +the exclusion of warranty; and each file should have at least the
    +"copyright" line and a pointer to where the full notice is found.
    +
    +    
    +    Copyright (C) 19yy  
    +
    +    This program is free software; you can redistribute it and/or modify
    +    it under the terms of the GNU General Public License as published by
    +    the Free Software Foundation; either version 1, or (at your option)
    +    any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU General Public License for more details.
    +
    +    You should have received a copy of the GNU General Public License
    +    along with this program; if not, write to the Free Software
    +    Foundation, Inc.
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +If the program is interactive, make it output a short notice like this
    +when it starts in an interactive mode:
    +
    +    Gnomovision version 69, Copyright (C) 19xx name of author
    +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    +    This is free software, and you are welcome to redistribute it
    +    under certain conditions; type `show c' for details.
    +
    +The hypothetical commands `show w' and `show c' should show the
    +appropriate parts of the General Public License.  Of course, the
    +commands you use may be called something other than `show w' and `show
    +c'; they could even be mouse-clicks or menu items--whatever suits your
    +program.
    +
    +You should also get your employer (if you work as a programmer) or your
    +school, if any, to sign a "copyright disclaimer" for the program, if
    +necessary.  Here a sample; alter the names:
    +
    +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
    +  program `Gnomovision' (a program to direct compilers to make passes
    +  at assemblers) written by James Hacker.
    +
    +  , 1 April 1989
    +  Ty Coon, President of Vice
    +
    +That's all there is to it!
    +
    +
    +
    +--------------- SECTION 9: GNU Free Documentation License V1.1 -----------
    +
    +
    +		GNU Free Documentation License
    +		   Version 1.1, March 2000
    +
    + Copyright (C) 2000  Free Software Foundation, Inc.
    +     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +
    +0. PREAMBLE
    +
    +The purpose of this License is to make a manual, textbook, or other
    +written document "free" in the sense of freedom: to assure everyone
    +the effective freedom to copy and redistribute it, with or without
    +modifying it, either commercially or noncommercially.  Secondarily,
    +this License preserves for the author and publisher a way to get
    +credit for their work, while not being considered responsible for
    +modifications made by others.
    +
    +This License is a kind of "copyleft", which means that derivative
    +works of the document must themselves be free in the same sense.  It
    +complements the GNU General Public License, which is a copyleft
    +license designed for free software.
    +
    +We have designed this License in order to use it for manuals for free
    +software, because free software needs free documentation: a free
    +program should come with manuals providing the same freedoms that the
    +software does.  But this License is not limited to software manuals;
    +it can be used for any textual work, regardless of subject matter or
    +whether it is published as a printed book.  We recommend this License
    +principally for works whose purpose is instruction or reference.
    +
    +
    +1. APPLICABILITY AND DEFINITIONS
    +
    +This License applies to any manual or other work that contains a
    +notice placed by the copyright holder saying it can be distributed
    +under the terms of this License.  The "Document", below, refers to any
    +such manual or work.  Any member of the public is a licensee, and is
    +addressed as "you".
    +
    +A "Modified Version" of the Document means any work containing the
    +Document or a portion of it, either copied verbatim, or with
    +modifications and/or translated into another language.
    +
    +A "Secondary Section" is a named appendix or a front-matter section of
    +the Document that deals exclusively with the relationship of the
    +publishers or authors of the Document to the Document's overall subject
    +(or to related matters) and contains nothing that could fall directly
    +within that overall subject.  (For example, if the Document is in part a
    +textbook of mathematics, a Secondary Section may not explain any
    +mathematics.)  The relationship could be a matter of historical
    +connection with the subject or with related matters, or of legal,
    +commercial, philosophical, ethical or political position regarding
    +them.
    +
    +The "Invariant Sections" are certain Secondary Sections whose titles
    +are designated, as being those of Invariant Sections, in the notice
    +that says that the Document is released under this License.
    +
    +The "Cover Texts" are certain short passages of text that are listed,
    +as Front-Cover Texts or Back-Cover Texts, in the notice that says that
    +the Document is released under this License.
    +
    +A "Transparent" copy of the Document means a machine-readable copy,
    +represented in a format whose specification is available to the
    +general public, whose contents can be viewed and edited directly and
    +straightforwardly with generic text editors or (for images composed of
    +pixels) generic paint programs or (for drawings) some widely available
    +drawing editor, and that is suitable for input to text formatters or
    +for automatic translation to a variety of formats suitable for input
    +to text formatters.  A copy made in an otherwise Transparent file
    +format whose markup has been designed to thwart or discourage
    +subsequent modification by readers is not Transparent.  A copy that is
    +not "Transparent" is called "Opaque".
    +
    +Examples of suitable formats for Transparent copies include plain
    +ASCII without markup, Texinfo input format, LaTeX input format, SGML
    +or XML using a publicly available DTD, and standard-conforming simple
    +HTML designed for human modification.  Opaque formats include
    +PostScript, PDF, proprietary formats that can be read and edited only
    +by proprietary word processors, SGML or XML for which the DTD and/or
    +processing tools are not generally available, and the
    +machine-generated HTML produced by some word processors for output
    +purposes only.
    +
    +The "Title Page" means, for a printed book, the title page itself,
    +plus such following pages as are needed to hold, legibly, the material
    +this License requires to appear in the title page.  For works in
    +formats which do not have any title page as such, "Title Page" means
    +the text near the most prominent appearance of the work's title,
    +preceding the beginning of the body of the text.
    +
    +
    +2. VERBATIM COPYING
    +
    +You may copy and distribute the Document in any medium, either
    +commercially or noncommercially, provided that this License, the
    +copyright notices, and the license notice saying this License applies
    +to the Document are reproduced in all copies, and that you add no other
    +conditions whatsoever to those of this License.  You may not use
    +technical measures to obstruct or control the reading or further
    +copying of the copies you make or distribute.  However, you may accept
    +compensation in exchange for copies.  If you distribute a large enough
    +number of copies you must also follow the conditions in section 3.
    +
    +You may also lend copies, under the same conditions stated above, and
    +you may publicly display copies.
    +
    +
    +3. COPYING IN QUANTITY
    +
    +If you publish printed copies of the Document numbering more than 100,
    +and the Document's license notice requires Cover Texts, you must enclose
    +the copies in covers that carry, clearly and legibly, all these Cover
    +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
    +the back cover.  Both covers must also clearly and legibly identify
    +you as the publisher of these copies.  The front cover must present
    +the full title with all words of the title equally prominent and
    +visible.  You may add other material on the covers in addition.
    +Copying with changes limited to the covers, as long as they preserve
    +the title of the Document and satisfy these conditions, can be treated
    +as verbatim copying in other respects.
    +
    +If the required texts for either cover are too voluminous to fit
    +legibly, you should put the first ones listed (as many as fit
    +reasonably) on the actual cover, and continue the rest onto adjacent
    +pages.
    +
    +If you publish or distribute Opaque copies of the Document numbering
    +more than 100, you must either include a machine-readable Transparent
    +copy along with each Opaque copy, or state in or with each Opaque copy
    +a publicly-accessible computer-network location containing a complete
    +Transparent copy of the Document, free of added material, which the
    +general network-using public has access to download anonymously at no
    +charge using public-standard network protocols.  If you use the latter
    +option, you must take reasonably prudent steps, when you begin
    +distribution of Opaque copies in quantity, to ensure that this
    +Transparent copy will remain thus accessible at the stated location
    +until at least one year after the last time you distribute an Opaque
    +copy (directly or through your agents or retailers) of that edition to
    +the public.
    +
    +It is requested, but not required, that you contact the authors of the
    +Document well before redistributing any large number of copies, to give
    +them a chance to provide you with an updated version of the Document.
    +
    +
    +4. MODIFICATIONS
    +
    +You may copy and distribute a Modified Version of the Document under
    +the conditions of sections 2 and 3 above, provided that you release
    +the Modified Version under precisely this License, with the Modified
    +Version filling the role of the Document, thus licensing distribution
    +and modification of the Modified Version to whoever possesses a copy
    +of it.  In addition, you must do these things in the Modified Version:
    +
    +A. Use in the Title Page (and on the covers, if any) a title distinct
    +   from that of the Document, and from those of previous versions
    +   (which should, if there were any, be listed in the History section
    +   of the Document).  You may use the same title as a previous version
    +   if the original publisher of that version gives permission.
    +B. List on the Title Page, as authors, one or more persons or entities
    +   responsible for authorship of the modifications in the Modified
    +   Version, together with at least five of the principal authors of the
    +   Document (all of its principal authors, if it has less than five).
    +C. State on the Title page the name of the publisher of the
    +   Modified Version, as the publisher.
    +D. Preserve all the copyright notices of the Document.
    +E. Add an appropriate copyright notice for your modifications
    +   adjacent to the other copyright notices.
    +F. Include, immediately after the copyright notices, a license notice
    +   giving the public permission to use the Modified Version under the
    +   terms of this License, in the form shown in the Addendum below.
    +G. Preserve in that license notice the full lists of Invariant Sections
    +   and required Cover Texts given in the Document's license notice.
    +H. Include an unaltered copy of this License.
    +I. Preserve the section entitled "History", and its title, and add to
    +   it an item stating at least the title, year, new authors, and
    +   publisher of the Modified Version as given on the Title Page.  If
    +   there is no section entitled "History" in the Document, create one
    +   stating the title, year, authors, and publisher of the Document as
    +   given on its Title Page, then add an item describing the Modified
    +   Version as stated in the previous sentence.
    +J. Preserve the network location, if any, given in the Document for
    +   public access to a Transparent copy of the Document, and likewise
    +   the network locations given in the Document for previous versions
    +   it was based on.  These may be placed in the "History" section.
    +   You may omit a network location for a work that was published at
    +   least four years before the Document itself, or if the original
    +   publisher of the version it refers to gives permission.
    +K. In any section entitled "Acknowledgements" or "Dedications",
    +   preserve the section's title, and preserve in the section all the
    +   substance and tone of each of the contributor acknowledgements
    +   and/or dedications given therein.
    +L. Preserve all the Invariant Sections of the Document,
    +   unaltered in their text and in their titles.  Section numbers
    +   or the equivalent are not considered part of the section titles.
    +M. Delete any section entitled "Endorsements".  Such a section
    +   may not be included in the Modified Version.
    +N. Do not retitle any existing section as "Endorsements"
    +   or to conflict in title with any Invariant Section.
    +
    +If the Modified Version includes new front-matter sections or
    +appendices that qualify as Secondary Sections and contain no material
    +copied from the Document, you may at your option designate some or all
    +of these sections as invariant.  To do this, add their titles to the
    +list of Invariant Sections in the Modified Version's license notice.
    +These titles must be distinct from any other section titles.
    +
    +You may add a section entitled "Endorsements", provided it contains
    +nothing but endorsements of your Modified Version by various
    +parties--for example, statements of peer review or that the text has
    +been approved by an organization as the authoritative definition of a
    +standard.
    +
    +You may add a passage of up to five words as a Front-Cover Text, and a
    +passage of up to 25 words as a Back-Cover Text, to the end of the list
    +of Cover Texts in the Modified Version.  Only one passage of
    +Front-Cover Text and one of Back-Cover Text may be added by (or
    +through arrangements made by) any one entity.  If the Document already
    +includes a cover text for the same cover, previously added by you or
    +by arrangement made by the same entity you are acting on behalf of,
    +you may not add another; but you may replace the old one, on explicit
    +permission from the previous publisher that added the old one.
    +
    +The author(s) and publisher(s) of the Document do not by this License
    +give permission to use their names for publicity for or to assert or
    +imply endorsement of any Modified Version.
    +
    +
    +5. COMBINING DOCUMENTS
    +
    +You may combine the Document with other documents released under this
    +License, under the terms defined in section 4 above for modified
    +versions, provided that you include in the combination all of the
    +Invariant Sections of all of the original documents, unmodified, and
    +list them all as Invariant Sections of your combined work in its
    +license notice.
    +
    +The combined work need only contain one copy of this License, and
    +multiple identical Invariant Sections may be replaced with a single
    +copy.  If there are multiple Invariant Sections with the same name but
    +different contents, make the title of each such section unique by
    +adding at the end of it, in parentheses, the name of the original
    +author or publisher of that section if known, or else a unique number.
    +Make the same adjustment to the section titles in the list of
    +Invariant Sections in the license notice of the combined work.
    +
    +In the combination, you must combine any sections entitled "History"
    +in the various original documents, forming one section entitled
    +"History"; likewise combine any sections entitled "Acknowledgements",
    +and any sections entitled "Dedications".  You must delete all sections
    +entitled "Endorsements."
    +
    +
    +6. COLLECTIONS OF DOCUMENTS
    +
    +You may make a collection consisting of the Document and other documents
    +released under this License, and replace the individual copies of this
    +License in the various documents with a single copy that is included in
    +the collection, provided that you follow the rules of this License for
    +verbatim copying of each of the documents in all other respects.
    +
    +You may extract a single document from such a collection, and distribute
    +it individually under this License, provided you insert a copy of this
    +License into the extracted document, and follow this License in all
    +other respects regarding verbatim copying of that document.
    +
    +
    +7. AGGREGATION WITH INDEPENDENT WORKS
    +
    +A compilation of the Document or its derivatives with other separate
    +and independent documents or works, in or on a volume of a storage or
    +distribution medium, does not as a whole count as a Modified Version
    +of the Document, provided no compilation copyright is claimed for the
    +compilation.  Such a compilation is called an "aggregate", and this
    +License does not apply to the other self-contained works thus compiled
    +with the Document, on account of their being thus compiled, if they
    +are not themselves derivative works of the Document.
    +
    +If the Cover Text requirement of section 3 is applicable to these
    +copies of the Document, then if the Document is less than one quarter
    +of the entire aggregate, the Document's Cover Texts may be placed on
    +covers that surround only the Document within the aggregate.
    +Otherwise they must appear on covers around the whole aggregate.
    +
    +
    +8. TRANSLATION
    +
    +Translation is considered a kind of modification, so you may
    +distribute translations of the Document under the terms of section 4.
    +Replacing Invariant Sections with translations requires special
    +permission from their copyright holders, but you may include
    +translations of some or all Invariant Sections in addition to the
    +original versions of these Invariant Sections.  You may include a
    +translation of this License provided that you also include the
    +original English version of this License.  In case of a disagreement
    +between the translation and the original English version of this
    +License, the original English version will prevail.
    +
    +
    +9. TERMINATION
    +
    +You may not copy, modify, sublicense, or distribute the Document except
    +as expressly provided for under this License.  Any other attempt to
    +copy, modify, sublicense or distribute the Document is void, and will
    +automatically terminate your rights under this License.  However,
    +parties who have received copies, or rights, from you under this
    +License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +
    +10. FUTURE REVISIONS OF THIS LICENSE
    +
    +The Free Software Foundation may publish new, revised versions
    +of the GNU Free Documentation License from time to time.  Such new
    +versions will be similar in spirit to the present version, but may
    +differ in detail to address new problems or concerns.  See
    +http://www.gnu.org/copyleft/.
    +
    +Each version of the License is given a distinguishing version number.
    +If the Document specifies that a particular numbered version of this
    +License "or any later version" applies to it, you have the option of
    +following the terms and conditions either of that specified version or
    +of any later version that has been published (not as a draft) by the
    +Free Software Foundation.  If the Document does not specify a version
    +number of this License, you may choose any version ever published (not
    +as a draft) by the Free Software Foundation.
    +
    +
    +ADDENDUM: How to use this License for your documents
    +
    +To use this License in a document you have written, include a copy of
    +the License in the document and put the following copyright and
    +license notices just after the title page:
    +
    +      Copyright (c)  YEAR  YOUR NAME.
    +      Permission is granted to copy, distribute and/or modify this document
    +      under the terms of the GNU Free Documentation License, Version 1.1
    +      or any later version published by the Free Software Foundation;
    +      with the Invariant Sections being LIST THEIR TITLES, with the
    +      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
    +      A copy of the license is included in the section entitled "GNU
    +      Free Documentation License".
    +
    +If you have no Invariant Sections, write "with no Invariant Sections"
    +instead of saying which ones are invariant.  If you have no
    +Front-Cover Texts, write "no Front-Cover Texts" instead of
    +"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
    +
    +If your document contains nontrivial examples of program code, we
    +recommend releasing these examples in parallel under your choice of
    +free software license, such as the GNU General Public License,
    +to permit their use in free software.
    +
    +
    +
    +--------------- SECTION 10: GNU Free Documentation License V1.2 -----------
    +
    +
    +                GNU Free Documentation License
    +                  Version 1.2, November 2002
    +
    +
    + Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.
    +     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +
    +0. PREAMBLE
    +
    +The purpose of this License is to make a manual, textbook, or other
    +functional and useful document "free" in the sense of freedom: to
    +assure everyone the effective freedom to copy and redistribute it,
    +with or without modifying it, either commercially or noncommercially.
    +Secondarily, this License preserves for the author and publisher a way
    +to get credit for their work, while not being considered responsible
    +for modifications made by others.
    +
    +This License is a kind of "copyleft", which means that derivative
    +works of the document must themselves be free in the same sense.  It
    +complements the GNU General Public License, which is a copyleft
    +license designed for free software.
    +
    +We have designed this License in order to use it for manuals for free
    +software, because free software needs free documentation: a free
    +program should come with manuals providing the same freedoms that the
    +software does.  But this License is not limited to software manuals;
    +it can be used for any textual work, regardless of subject matter or
    +whether it is published as a printed book.  We recommend this License
    +principally for works whose purpose is instruction or reference.
    +
    +
    +1. APPLICABILITY AND DEFINITIONS
    +
    +This License applies to any manual or other work, in any medium, that
    +contains a notice placed by the copyright holder saying it can be
    +distributed under the terms of this License.  Such a notice grants a
    +world-wide, royalty-free license, unlimited in duration, to use that
    +work under the conditions stated herein.  The "Document", below,
    +refers to any such manual or work.  Any member of the public is a
    +licensee, and is addressed as "you".  You accept the license if you
    +copy, modify or distribute the work in a way requiring permission
    +under copyright law.
    +
    +A "Modified Version" of the Document means any work containing the
    +Document or a portion of it, either copied verbatim, or with
    +modifications and/or translated into another language.
    +
    +A "Secondary Section" is a named appendix or a front-matter section of
    +the Document that deals exclusively with the relationship of the
    +publishers or authors of the Document to the Document's overall subject
    +(or to related matters) and contains nothing that could fall directly
    +within that overall subject.  (Thus, if the Document is in part a
    +textbook of mathematics, a Secondary Section may not explain any
    +mathematics.)  The relationship could be a matter of historical
    +connection with the subject or with related matters, or of legal,
    +commercial, philosophical, ethical or political position regarding
    +them.
    +
    +The "Invariant Sections" are certain Secondary Sections whose titles
    +are designated, as being those of Invariant Sections, in the notice
    +that says that the Document is released under this License.  If a
    +section does not fit the above definition of Secondary then it is not
    +allowed to be designated as Invariant.  The Document may contain zero
    +Invariant Sections.  If the Document does not identify any Invariant
    +Sections then there are none.
    +
    +The "Cover Texts" are certain short passages of text that are listed,
    +as Front-Cover Texts or Back-Cover Texts, in the notice that says that
    +the Document is released under this License.  A Front-Cover Text may
    +be at most 5 words, and a Back-Cover Text may be at most 25 words.
    +
    +A "Transparent" copy of the Document means a machine-readable copy,
    +represented in a format whose specification is available to the
    +general public, that is suitable for revising the document
    +straightforwardly with generic text editors or (for images composed of
    +pixels) generic paint programs or (for drawings) some widely available
    +drawing editor, and that is suitable for input to text formatters or
    +for automatic translation to a variety of formats suitable for input
    +to text formatters.  A copy made in an otherwise Transparent file
    +format whose markup, or absence of markup, has been arranged to thwart
    +or discourage subsequent modification by readers is not Transparent.
    +An image format is not Transparent if used for any substantial amount
    +of text.  A copy that is not "Transparent" is called "Opaque".
    +
    +Examples of suitable formats for Transparent copies include plain
    +ASCII without markup, Texinfo input format, LaTeX input format, SGML
    +or XML using a publicly available DTD, and standard-conforming simple
    +HTML, PostScript or PDF designed for human modification.  Examples of
    +transparent image formats include PNG, XCF and JPG.  Opaque formats
    +include proprietary formats that can be read and edited only by
    +proprietary word processors, SGML or XML for which the DTD and/or
    +processing tools are not generally available, and the
    +machine-generated HTML, PostScript or PDF produced by some word
    +processors for output purposes only.
    +
    +The "Title Page" means, for a printed book, the title page itself,
    +plus such following pages as are needed to hold, legibly, the material
    +this License requires to appear in the title page.  For works in
    +formats which do not have any title page as such, "Title Page" means
    +the text near the most prominent appearance of the work's title,
    +preceding the beginning of the body of the text.
    +
    +A section "Entitled XYZ" means a named subunit of the Document whose
    +title either is precisely XYZ or contains XYZ in parentheses following
    +text that translates XYZ in another language.  (Here XYZ stands for a
    +specific section name mentioned below, such as "Acknowledgements",
    +"Dedications", "Endorsements", or "History".)  To "Preserve the Title"
    +of such a section when you modify the Document means that it remains a
    +section "Entitled XYZ" according to this definition.
    +
    +The Document may include Warranty Disclaimers next to the notice which
    +states that this License applies to the Document.  These Warranty
    +Disclaimers are considered to be included by reference in this
    +License, but only as regards disclaiming warranties: any other
    +implication that these Warranty Disclaimers may have is void and has
    +no effect on the meaning of this License.
    +
    +
    +2. VERBATIM COPYING
    +
    +You may copy and distribute the Document in any medium, either
    +commercially or noncommercially, provided that this License, the
    +copyright notices, and the license notice saying this License applies
    +to the Document are reproduced in all copies, and that you add no other
    +conditions whatsoever to those of this License.  You may not use
    +technical measures to obstruct or control the reading or further
    +copying of the copies you make or distribute.  However, you may accept
    +compensation in exchange for copies.  If you distribute a large enough
    +number of copies you must also follow the conditions in section 3.
    +
    +You may also lend copies, under the same conditions stated above, and
    +you may publicly display copies.
    +
    +
    +3. COPYING IN QUANTITY
    +
    +If you publish printed copies (or copies in media that commonly have
    +printed covers) of the Document, numbering more than 100, and the
    +Document's license notice requires Cover Texts, you must enclose the
    +copies in covers that carry, clearly and legibly, all these Cover
    +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
    +the back cover.  Both covers must also clearly and legibly identify
    +you as the publisher of these copies.  The front cover must present
    +the full title with all words of the title equally prominent and
    +visible.  You may add other material on the covers in addition.
    +Copying with changes limited to the covers, as long as they preserve
    +the title of the Document and satisfy these conditions, can be treated
    +as verbatim copying in other respects.
    +
    +If the required texts for either cover are too voluminous to fit
    +legibly, you should put the first ones listed (as many as fit
    +reasonably) on the actual cover, and continue the rest onto adjacent
    +pages.
    +
    +If you publish or distribute Opaque copies of the Document numbering
    +more than 100, you must either include a machine-readable Transparent
    +copy along with each Opaque copy, or state in or with each Opaque copy
    +a computer-network location from which the general network-using
    +public has access to download using public-standard network protocols
    +a complete Transparent copy of the Document, free of added material.
    +If you use the latter option, you must take reasonably prudent steps,
    +when you begin distribution of Opaque copies in quantity, to ensure
    +that this Transparent copy will remain thus accessible at the stated
    +location until at least one year after the last time you distribute an
    +Opaque copy (directly or through your agents or retailers) of that
    +edition to the public.
    +
    +It is requested, but not required, that you contact the authors of the
    +Document well before redistributing any large number of copies, to give
    +them a chance to provide you with an updated version of the Document.
    +
    +
    +4. MODIFICATIONS
    +
    +You may copy and distribute a Modified Version of the Document under
    +the conditions of sections 2 and 3 above, provided that you release
    +the Modified Version under precisely this License, with the Modified
    +Version filling the role of the Document, thus licensing distribution
    +and modification of the Modified Version to whoever possesses a copy
    +of it.  In addition, you must do these things in the Modified Version:
    +
    +A. Use in the Title Page (and on the covers, if any) a title distinct
    +   from that of the Document, and from those of previous versions
    +   (which should, if there were any, be listed in the History section
    +   of the Document).  You may use the same title as a previous version
    +   if the original publisher of that version gives permission.
    +B. List on the Title Page, as authors, one or more persons or entities
    +   responsible for authorship of the modifications in the Modified
    +   Version, together with at least five of the principal authors of the
    +   Document (all of its principal authors, if it has fewer than five),
    +   unless they release you from this requirement.
    +C. State on the Title page the name of the publisher of the
    +   Modified Version, as the publisher.
    +D. Preserve all the copyright notices of the Document.
    +E. Add an appropriate copyright notice for your modifications
    +   adjacent to the other copyright notices.
    +F. Include, immediately after the copyright notices, a license notice
    +   giving the public permission to use the Modified Version under the
    +   terms of this License, in the form shown in the Addendum below.
    +G. Preserve in that license notice the full lists of Invariant Sections
    +   and required Cover Texts given in the Document's license notice.
    +H. Include an unaltered copy of this License.
    +I. Preserve the section Entitled "History", Preserve its Title, and add
    +   to it an item stating at least the title, year, new authors, and
    +   publisher of the Modified Version as given on the Title Page.  If
    +   there is no section Entitled "History" in the Document, create one
    +   stating the title, year, authors, and publisher of the Document as
    +   given on its Title Page, then add an item describing the Modified
    +   Version as stated in the previous sentence.
    +J. Preserve the network location, if any, given in the Document for
    +   public access to a Transparent copy of the Document, and likewise
    +   the network locations given in the Document for previous versions
    +   it was based on.  These may be placed in the "History" section.
    +   You may omit a network location for a work that was published at
    +   least four years before the Document itself, or if the original
    +   publisher of the version it refers to gives permission.
    +K. For any section Entitled "Acknowledgements" or "Dedications",
    +   Preserve the Title of the section, and preserve in the section all
    +   the substance and tone of each of the contributor acknowledgements
    +   and/or dedications given therein.
    +L. Preserve all the Invariant Sections of the Document,
    +   unaltered in their text and in their titles.  Section numbers
    +   or the equivalent are not considered part of the section titles.
    +M. Delete any section Entitled "Endorsements".  Such a section
    +   may not be included in the Modified Version.
    +N. Do not retitle any existing section to be Entitled "Endorsements"
    +   or to conflict in title with any Invariant Section.
    +O. Preserve any Warranty Disclaimers.
    +
    +If the Modified Version includes new front-matter sections or
    +appendices that qualify as Secondary Sections and contain no material
    +copied from the Document, you may at your option designate some or all
    +of these sections as invariant.  To do this, add their titles to the
    +list of Invariant Sections in the Modified Version's license notice.
    +These titles must be distinct from any other section titles.
    +
    +You may add a section Entitled "Endorsements", provided it contains
    +nothing but endorsements of your Modified Version by various
    +parties--for example, statements of peer review or that the text has
    +been approved by an organization as the authoritative definition of a
    +standard.
    +
    +You may add a passage of up to five words as a Front-Cover Text, and a
    +passage of up to 25 words as a Back-Cover Text, to the end of the list
    +of Cover Texts in the Modified Version.  Only one passage of
    +Front-Cover Text and one of Back-Cover Text may be added by (or
    +through arrangements made by) any one entity.  If the Document already
    +includes a cover text for the same cover, previously added by you or
    +by arrangement made by the same entity you are acting on behalf of,
    +you may not add another; but you may replace the old one, on explicit
    +permission from the previous publisher that added the old one.
    +
    +The author(s) and publisher(s) of the Document do not by this License
    +give permission to use their names for publicity for or to assert or
    +imply endorsement of any Modified Version.
    +
    +
    +5. COMBINING DOCUMENTS
    +
    +You may combine the Document with other documents released under this
    +License, under the terms defined in section 4 above for modified
    +versions, provided that you include in the combination all of the
    +Invariant Sections of all of the original documents, unmodified, and
    +list them all as Invariant Sections of your combined work in its
    +license notice, and that you preserve all their Warranty Disclaimers.
    +
    +The combined work need only contain one copy of this License, and
    +multiple identical Invariant Sections may be replaced with a single
    +copy.  If there are multiple Invariant Sections with the same name but
    +different contents, make the title of each such section unique by
    +adding at the end of it, in parentheses, the name of the original
    +author or publisher of that section if known, or else a unique number.
    +Make the same adjustment to the section titles in the list of
    +Invariant Sections in the license notice of the combined work.
    +
    +In the combination, you must combine any sections Entitled "History"
    +in the various original documents, forming one section Entitled
    +"History"; likewise combine any sections Entitled "Acknowledgements",
    +and any sections Entitled "Dedications".  You must delete all sections
    +Entitled "Endorsements".
    +
    +
    +6. COLLECTIONS OF DOCUMENTS
    +
    +You may make a collection consisting of the Document and other documents
    +released under this License, and replace the individual copies of this
    +License in the various documents with a single copy that is included in
    +the collection, provided that you follow the rules of this License for
    +verbatim copying of each of the documents in all other respects.
    +
    +You may extract a single document from such a collection, and distribute
    +it individually under this License, provided you insert a copy of this
    +License into the extracted document, and follow this License in all
    +other respects regarding verbatim copying of that document.
    +
    +
    +7. AGGREGATION WITH INDEPENDENT WORKS
    +
    +A compilation of the Document or its derivatives with other separate
    +and independent documents or works, in or on a volume of a storage or
    +distribution medium, is called an "aggregate" if the copyright
    +resulting from the compilation is not used to limit the legal rights
    +of the compilation's users beyond what the individual works permit.
    +When the Document is included in an aggregate, this License does not
    +apply to the other works in the aggregate which are not themselves
    +derivative works of the Document.
    +
    +If the Cover Text requirement of section 3 is applicable to these
    +copies of the Document, then if the Document is less than one half of
    +the entire aggregate, the Document's Cover Texts may be placed on
    +covers that bracket the Document within the aggregate, or the
    +electronic equivalent of covers if the Document is in electronic form.
    +Otherwise they must appear on printed covers that bracket the whole
    +aggregate.
    +
    +
    +8. TRANSLATION
    +
    +Translation is considered a kind of modification, so you may
    +distribute translations of the Document under the terms of section 4.
    +Replacing Invariant Sections with translations requires special
    +permission from their copyright holders, but you may include
    +translations of some or all Invariant Sections in addition to the
    +original versions of these Invariant Sections.  You may include a
    +translation of this License, and all the license notices in the
    +Document, and any Warranty Disclaimers, provided that you also include
    +the original English version of this License and the original versions
    +of those notices and disclaimers.  In case of a disagreement between
    +the translation and the original version of this License or a notice
    +or disclaimer, the original version will prevail.
    +
    +If a section in the Document is Entitled "Acknowledgements",
    +"Dedications", or "History", the requirement (section 4) to Preserve
    +its Title (section 1) will typically require changing the actual
    +title.
    +
    +
    +9. TERMINATION
    +
    +You may not copy, modify, sublicense, or distribute the Document except
    +as expressly provided for under this License.  Any other attempt to
    +copy, modify, sublicense or distribute the Document is void, and will
    +automatically terminate your rights under this License.  However,
    +parties who have received copies, or rights, from you under this
    +License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +
    +10. FUTURE REVISIONS OF THIS LICENSE
    +
    +The Free Software Foundation may publish new, revised versions
    +of the GNU Free Documentation License from time to time.  Such new
    +versions will be similar in spirit to the present version, but may
    +differ in detail to address new problems or concerns.  See
    +http://www.gnu.org/copyleft/.
    +
    +Each version of the License is given a distinguishing version number.
    +If the Document specifies that a particular numbered version of this
    +License "or any later version" applies to it, you have the option of
    +following the terms and conditions either of that specified version or
    +of any later version that has been published (not as a draft) by the
    +Free Software Foundation.  If the Document does not specify a version
    +number of this License, you may choose any version ever published (not
    +as a draft) by the Free Software Foundation.
    +
    +
    +ADDENDUM: How to use this License for your documents
    +
    +To use this License in a document you have written, include a copy of
    +the License in the document and put the following copyright and
    +license notices just after the title page:
    +
    +    Copyright (c)  YEAR  YOUR NAME.
    +    Permission is granted to copy, distribute and/or modify this document
    +    under the terms of the GNU Free Documentation License, Version 1.2
    +    or any later version published by the Free Software Foundation;
    +    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    +    A copy of the license is included in the section entitled "GNU
    +    Free Documentation License".
    +
    +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
    +replace the "with...Texts." line with this:
    +
    +    with the Invariant Sections being LIST THEIR TITLES, with the
    +    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
    +
    +If you have Invariant Sections without Cover Texts, or some other
    +combination of the three, merge those two alternatives to suit the
    +situation.
    +
    +If your document contains nontrivial examples of program code, we
    +recommend releasing these examples in parallel under your choice of
    +free software license, such as the GNU General Public License,
    +to permit their use in free software.
    +
    +
    +
    +--------------- SECTION 11: GNU Free Documentation License V1.3 -----------
    +
    +
    +GNU Free Documentation License
    +
    +Version 1.3, 3 November 2008
    +
    +Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 
    +
    +Everyone is permitted to copy and distribute verbatim copies of this
    +license document, but changing it is not allowed.
    +
    +0. PREAMBLE
    +
    +The purpose of this License is to make a manual, textbook, or other
    +functional and useful document "free" in the sense of freedom: to assure
    +everyone the effective freedom to copy and redistribute it, with or
    +without modifying it, either commercially or noncommercially. Secondarily,
    +this License preserves for the author and publisher a way to get credit
    +for their work, while not being considered responsible for modifications
    +made by others.
    +
    +This License is a kind of "copyleft", which means that derivative works
    +of the document must themselves be free in the same sense. It complements
    +the GNU General Public License, which is a copyleft license designed
    +for free software.
    +
    +We have designed this License in order to use it for manuals for free
    +software, because free software needs free documentation: a free program
    +should come with manuals providing the same freedoms that the software
    +does. But this License is not limited to software manuals; it can be
    +used for any textual work, regardless of subject matter or whether it
    +is published as a printed book. We recommend this License principally
    +for works whose purpose is instruction or reference.
    +
    +1. APPLICABILITY AND DEFINITIONS
    +
    +This License applies to any manual or other work, in any medium,
    +that contains a notice placed by the copyright holder saying it can
    +be distributed under the terms of this License. Such a notice grants
    +a world-wide, royalty-free license, unlimited in duration, to use that
    +work under the conditions stated herein. The "Document", below, refers
    +to any such manual or work. Any member of the public is a licensee,
    +and is addressed as "you". You accept the license if you copy, modify
    +or distribute the work in a way requiring permission under copyright law.
    +
    +A "Modified Version" of the Document means any work containing the
    +Document or a portion of it, either copied verbatim, or with modifications
    +and/or translated into another language.
    +
    +A "Secondary Section" is a named appendix or a front-matter section
    +of the Document that deals exclusively with the relationship of the
    +publishers or authors of the Document to the Document's overall subject
    +(or to related matters) and contains nothing that could fall directly
    +within that overall subject. (Thus, if the Document is in part a textbook
    +of mathematics, a Secondary Section may not explain any mathematics.) The
    +relationship could be a matter of historical connection with the subject
    +or with related matters, or of legal, commercial, philosophical, ethical
    +or political position regarding them.
    +
    +The "Invariant Sections" are certain Secondary Sections whose titles are
    +designated, as being those of Invariant Sections, in the notice that
    +says that the Document is released under this License. If a section
    +does not fit the above definition of Secondary then it is not allowed
    +to be designated as Invariant. The Document may contain zero Invariant
    +Sections. If the Document does not identify any Invariant Sections then
    +there are none.
    +
    +The "Cover Texts" are certain short passages of text that are listed,
    +as Front-Cover Texts or Back-Cover Texts, in the notice that says that
    +the Document is released under this License. A Front-Cover Text may be
    +at most 5 words, and a Back-Cover Text may be at most 25 words.
    +
    +A "Transparent" copy of the Document means a machine-readable copy,
    +represented in a format whose specification is available to the general
    +public, that is suitable for revising the document straightforwardly with
    +generic text editors or (for images composed of pixels) generic paint
    +programs or (for drawings) some widely available drawing editor, and that
    +is suitable for input to text formatters or for automatic translation to a
    +variety of formats suitable for input to text formatters. A copy made in
    +an otherwise Transparent file format whose markup, or absence of markup,
    +has been arranged to thwart or discourage subsequent modification by
    +readers is not Transparent. An image format is not Transparent if used
    +for any substantial amount of text. A copy that is not "Transparent"
    +is called "Opaque".
    +
    +Examples of suitable formats for Transparent copies include plain ASCII
    +without markup, Texinfo input format, LaTeX input format, SGML or XML
    +using a publicly available DTD, and standard-conforming simple HTML,
    +PostScript or PDF designed for human modification. Examples of transparent
    +image formats include PNG, XCF and JPG. Opaque formats include proprietary
    +formats that can be read and edited only by proprietary word processors,
    +SGML or XML for which the DTD and/or processing tools are not generally
    +available, and the machine-generated HTML, PostScript or PDF produced
    +by some word processors for output purposes only.
    +
    +The "Title Page" means, for a printed book, the title page itself,
    +plus such following pages as are needed to hold, legibly, the material
    +this License requires to appear in the title page. For works in formats
    +which do not have any title page as such, "Title Page" means the text
    +near the most prominent appearance of the work's title, preceding the
    +beginning of the body of the text.
    +
    +The "publisher" means any person or entity that distributes copies of
    +the Document to the public.
    +
    +A section "Entitled XYZ" means a named subunit of the Document whose
    +title either is precisely XYZ or contains XYZ in parentheses following
    +text that translates XYZ in another language. (Here XYZ stands for
    +a specific section name mentioned below, such as "Acknowledgements",
    +"Dedications", "Endorsements", or "History".) To "Preserve the Title"
    +of such a section when you modify the Document means that it remains a
    +section "Entitled XYZ" according to this definition.
    +
    +The Document may include Warranty Disclaimers next to the notice
    +which states that this License applies to the Document. These Warranty
    +Disclaimers are considered to be included by reference in this License,
    +but only as regards disclaiming warranties: any other implication that
    +these Warranty Disclaimers may have is void and has no effect on the
    +meaning of this License.
    +
    +2. VERBATIM COPYING
    +
    +You may copy and distribute the Document in any medium, either
    +commercially or noncommercially, provided that this License, the
    +copyright notices, and the license notice saying this License applies
    +to the Document are reproduced in all copies, and that you add no other
    +conditions whatsoever to those of this License. You may not use technical
    +measures to obstruct or control the reading or further copying of the
    +copies you make or distribute. However, you may accept compensation in
    +exchange for copies. If you distribute a large enough number of copies
    +you must also follow the conditions in section 3.
    +
    +You may also lend copies, under the same conditions stated above, and
    +you may publicly display copies.
    +
    +3. COPYING IN QUANTITY
    +
    +If you publish printed copies (or copies in media that commonly have
    +printed covers) of the Document, numbering more than 100, and the
    +Document's license notice requires Cover Texts, you must enclose the
    +copies in covers that carry, clearly and legibly, all these Cover Texts:
    +Front-Cover Texts on the front cover, and Back-Cover Texts on the back
    +cover. Both covers must also clearly and legibly identify you as the
    +publisher of these copies. The front cover must present the full title
    +with all words of the title equally prominent and visible. You may add
    +other material on the covers in addition. Copying with changes limited to
    +the covers, as long as they preserve the title of the Document and satisfy
    +these conditions, can be treated as verbatim copying in other respects.
    +
    +If the required texts for either cover are too voluminous to fit legibly,
    +you should put the first ones listed (as many as fit reasonably) on the
    +actual cover, and continue the rest onto adjacent pages.
    +
    +If you publish or distribute Opaque copies of the Document numbering
    +more than 100, you must either include a machine-readable Transparent
    +copy along with each Opaque copy, or state in or with each Opaque copy
    +a computer-network location from which the general network-using public
    +has access to download using public-standard network protocols a complete
    +Transparent copy of the Document, free of added material. If you use the
    +latter option, you must take reasonably prudent steps, when you begin
    +distribution of Opaque copies in quantity, to ensure that this Transparent
    +copy will remain thus accessible at the stated location until at least
    +one year after the last time you distribute an Opaque copy (directly or
    +through your agents or retailers) of that edition to the public.
    +
    +It is requested, but not required, that you contact the authors of the
    +Document well before redistributing any large number of copies, to give
    +them a chance to provide you with an updated version of the Document.
    +
    +4. MODIFICATIONS
    +
    +You may copy and distribute a Modified Version of the Document under
    +the conditions of sections 2 and 3 above, provided that you release
    +the Modified Version under precisely this License, with the Modified
    +Version filling the role of the Document, thus licensing distribution
    +and modification of the Modified Version to whoever possesses a copy of
    +it. In addition, you must do these things in the Modified Version:
    +
    +    * A. Use in the Title Page (and on the covers, if any) a title
    +    distinct from that of the Document, and from those of previous
    +    versions (which should, if there were any, be listed in the History
    +    section of the Document). You may use the same title as a previous
    +    version if the original publisher of that version gives permission.
    +
    +    * B. List on the Title Page, as authors, one or more persons or
    +    entities responsible for authorship of the modifications in the
    +    Modified Version, together with at least five of the principal authors
    +    of the Document (all of its principal authors, if it has fewer than
    +    five), unless they release you from this requirement.
    +
    +    * C. State on the Title page the name of the publisher of the Modified
    +    Version, as the publisher.
    +
    +    * D. Preserve all the copyright notices of the Document.
    +
    +    * E. Add an appropriate copyright notice for your modifications
    +    adjacent to the other copyright notices.
    +
    +    * F. Include, immediately after the copyright notices, a license
    +    notice giving the public permission to use the Modified Version under
    +    the terms of this License, in the form shown in the Addendum below.
    +
    +    * G. Preserve in that license notice the full lists of Invariant
    +    Sections and required Cover Texts given in the Document's license
    +    notice.
    +
    +    * H. Include an unaltered copy of this License.
    +
    +    * I. Preserve the section Entitled "History", Preserve its Title,
    +    and add to it an item stating at least the title, year, new authors,
    +    and publisher of the Modified Version as given on the Title Page. If
    +    there is no section Entitled "History" in the Document, create one
    +    stating the title, year, authors, and publisher of the Document as
    +    given on its Title Page, then add an item describing the Modified
    +    Version as stated in the previous sentence.
    +
    +    * J. Preserve the network location, if any, given in the Document for
    +    public access to a Transparent copy of the Document, and likewise
    +    the network locations given in the Document for previous versions
    +    it was based on. These may be placed in the "History" section. You
    +    may omit a network location for a work that was published at least
    +    four years before the Document itself, or if the original publisher
    +    of the version it refers to gives permission.
    +
    +    * K. For any section Entitled "Acknowledgements" or "Dedications",
    +    Preserve the Title of the section, and preserve in the section all
    +    the substance and tone of each of the contributor acknowledgements
    +    and/or dedications given therein.
    +
    +    * L. Preserve all the Invariant Sections of the Document, unaltered
    +    in their text and in their titles. Section numbers or the equivalent
    +    are not considered part of the section titles.
    +
    +    * M. Delete any section Entitled "Endorsements". Such a section may
    +    not be included in the Modified Version.
    +
    +    * N. Do not retitle any existing section to be Entitled "Endorsements"
    +    or to conflict in title with any Invariant Section.
    +
    +    * O. Preserve any Warranty Disclaimers.
    +
    +If the Modified Version includes new front-matter sections or appendices
    +that qualify as Secondary Sections and contain no material copied
    +from the Document, you may at your option designate some or all of
    +these sections as invariant. To do this, add their titles to the list
    +of Invariant Sections in the Modified Version's license notice. These
    +titles must be distinct from any other section titles.
    +
    +You may add a section Entitled "Endorsements", provided it contains
    +nothing but endorsements of your Modified Version by various parties, for
    +example, statements of peer review or that the text has been approved
    +by an organization as the authoritative definition of a standard.
    +
    +You may add a passage of up to five words as a Front-Cover Text, and a
    +passage of up to 25 words as a Back-Cover Text, to the end of the list
    +of Cover Texts in the Modified Version. Only one passage of Front-Cover
    +Text and one of Back-Cover Text may be added by (or through arrangements
    +made by) any one entity. If the Document already includes a cover text
    +for the same cover, previously added by you or by arrangement made by
    +the same entity you are acting on behalf of, you may not add another;
    +but you may replace the old one, on explicit permission from the previous
    +publisher that added the old one.
    +
    +The author(s) and publisher(s) of the Document do not by this License
    +give permission to use their names for publicity for or to assert or
    +imply endorsement of any Modified Version.
    +
    +5. COMBINING DOCUMENTS
    +
    +You may combine the Document with other documents released under this
    +License, under the terms defined in section 4 above for modified versions,
    +provided that you include in the combination all of the Invariant
    +Sections of all of the original documents, unmodified, and list them
    +all as Invariant Sections of your combined work in its license notice,
    +and that you preserve all their Warranty Disclaimers.
    +
    +The combined work need only contain one copy of this License, and multiple
    +identical Invariant Sections may be replaced with a single copy. If there
    +are multiple Invariant Sections with the same name but different contents,
    +make the title of each such section unique by adding at the end of it,
    +in parentheses, the name of the original author or publisher of that
    +section if known, or else a unique number. Make the same adjustment
    +to the section titles in the list of Invariant Sections in the license
    +notice of the combined work.
    +
    +In the combination, you must combine any sections Entitled "History" in
    +the various original documents, forming one section Entitled "History";
    +likewise combine any sections Entitled "Acknowledgements", and any
    +sections Entitled "Dedications". You must delete all sections Entitled
    +"Endorsements".
    +
    +6. COLLECTIONS OF DOCUMENTS
    +
    +You may make a collection consisting of the Document and other documents
    +released under this License, and replace the individual copies of this
    +License in the various documents with a single copy that is included in
    +the collection, provided that you follow the rules of this License for
    +verbatim copying of each of the documents in all other respects.
    +
    +You may extract a single document from such a collection, and distribute
    +it individually under this License, provided you insert a copy of this
    +License into the extracted document, and follow this License in all
    +other respects regarding verbatim copying of that document.
    +
    +7. AGGREGATION WITH INDEPENDENT WORKS
    +
    +A compilation of the Document or its derivatives with other separate
    +and independent documents or works, in or on a volume of a storage
    +or distribution medium, is called an "aggregate" if the copyright
    +resulting from the compilation is not used to limit the legal rights of
    +the compilation's users beyond what the individual works permit. When
    +the Document is included in an aggregate, this License does not apply
    +to the other works in the aggregate which are not themselves derivative
    +works of the Document.
    +
    +If the Cover Text requirement of section 3 is applicable to these copies
    +of the Document, then if the Document is less than one half of the
    +entire aggregate, the Document's Cover Texts may be placed on covers that
    +bracket the Document within the aggregate, or the electronic equivalent
    +of covers if the Document is in electronic form. Otherwise they must
    +appear on printed covers that bracket the whole aggregate.
    +
    +8. TRANSLATION
    +
    +Translation is considered a kind of modification, so you may distribute
    +translations of the Document under the terms of section 4. Replacing
    +Invariant Sections with translations requires special permission from
    +their copyright holders, but you may include translations of some or all
    +Invariant Sections in addition to the original versions of these Invariant
    +Sections. You may include a translation of this License, and all the
    +license notices in the Document, and any Warranty Disclaimers, provided
    +that you also include the original English version of this License and
    +the original versions of those notices and disclaimers. In case of a
    +disagreement between the translation and the original version of this
    +License or a notice or disclaimer, the original version will prevail.
    +
    +If a section in the Document is Entitled "Acknowledgements",
    +"Dedications", or "History", the requirement (section 4) to Preserve
    +its Title (section 1) will typically require changing the actual title.
    +
    +9. TERMINATION
    +
    +You may not copy, modify, sublicense, or distribute the Document except
    +as expressly provided under this License. Any attempt otherwise to copy,
    +modify, sublicense, or distribute it is void, and will automatically
    +terminate your rights under this License.
    +
    +However, if you cease all violation of this License, then your license
    +from a particular copyright holder is reinstated (a) provisionally,
    +unless and until the copyright holder explicitly and finally terminates
    +your license, and (b) permanently, if the copyright holder fails to
    +notify you of the violation by some reasonable means prior to 60 days
    +after the cessation.
    +
    +Moreover, your license from a particular copyright holder is reinstated
    +permanently if the copyright holder notifies you of the violation by
    +some reasonable means, this is the first time you have received notice of
    +violation of this License (for any work) from that copyright holder, and
    +you cure the violation prior to 30 days after your receipt of the notice.
    +
    +Termination of your rights under this section does not terminate the
    +licenses of parties who have received copies or rights from you under
    +this License. If your rights have been terminated and not permanently
    +reinstated, receipt of a copy of some or all of the same material does
    +not give you any rights to use it.
    +
    +10. FUTURE REVISIONS OF THIS LICENSE
    +
    +The Free Software Foundation may publish new, revised versions of the
    +GNU Free Documentation License from time to time. Such new versions will
    +be similar in spirit to the present version, but may differ in detail
    +to address new problems or concerns. See http://www.gnu.org/copyleft/.
    +
    +Each version of the License is given a distinguishing version number. If
    +the Document specifies that a particular numbered version of this License
    +"or any later version" applies to it, you have the option of following
    +the terms and conditions either of that specified version or of any later
    +version that has been published (not as a draft) by the Free Software
    +Foundation. If the Document does not specify a version number of this
    +License, you may choose any version ever published (not as a draft) by
    +the Free Software Foundation. If the Document specifies that a proxy can
    +decide which future versions of this License can be used, that proxy's
    +public statement of acceptance of a version permanently authorizes you
    +to choose that version for the Document.
    +
    +11. RELICENSING
    +
    +"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
    +World Wide Web server that publishes copyrightable works and also
    +provides prominent facilities for anybody to edit those works. A public
    +wiki that anybody can edit is an example of such a server. A "Massive
    +Multiauthor Collaboration" (or "MMC") contained in the site means any
    +set of copyrightable works thus published on the MMC site.
    +
    +"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license
    +published by Creative Commons Corporation, a not-for-profit corporation
    +with a principal place of business in San Francisco, California, as
    +well as future copyleft versions of that license published by that same
    +organization.
    +
    +"Incorporate" means to publish or republish a Document, in whole or in
    +part, as part of another Document.
    +
    +An MMC is "eligible for relicensing" if it is licensed under this License,
    +and if all works that were first published under this License somewhere
    +other than this MMC, and subsequently incorporated in whole or in part
    +into the MMC, (1) had no cover texts or invariant sections, and (2)
    +were thus incorporated prior to November 1, 2008.
    +
    +The operator of an MMC Site may republish an MMC contained in the site
    +under CC-BY-SA on the same site at any time before August 1, 2009,
    +provided the MMC is eligible for relicensing.
    +
    +ADDENDUM: How to use this License for your documents
    +
    +To use this License in a document you have written, include a copy of
    +the License in the document and put the following copyright and license
    +notices just after the title page:
    +
    +    Copyright (C)  YEAR  YOUR NAME.
    +    Permission is granted to copy, distribute and/or modify this document
    +    under the terms of the GNU Free Documentation License, Version 1.3
    +    or any later version published by the Free Software Foundation;
    +    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    +    A copy of the license is included in the section entitled "GNU
    +    Free Documentation License".
    +
    +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
    +replace the "with ... Texts." line with this:
    +
    +    with the Invariant Sections being LIST THEIR TITLES, with the
    +    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
    +
    +If you have Invariant Sections without Cover Texts, or some other
    +combination of the three, merge those two alternatives to suit the
    +situation.
    +
    +If your document contains nontrivial examples of program code, we
    +recommend releasing these examples in parallel under your choice of
    +free software license, such as the GNU General Public License, to permit
    +their use in free software.
    +
    +
    +
    +--------------- SECTION 12: Artistic License, V1.0 -----------
    +
    +
    +The Artistic License
    +
    +Preamble
    +
    +The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
    +
    +Definitions:
    +
    +"Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification.
    +
    +"Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder.
    +
    +"Copyright Holder" is whoever is named in the copyright or copyrights for the package.
    +
    +"You" is you, if you're thinking about copying or distributing this Package.
    +
    +"Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.)
    +
    +"Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
    +
    +1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
    +
    +2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
    +
    +3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
    +
    +a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
    +
    +b) use the modified Package only within your corporation or organization.
    +
    +c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
    +
    +d) make other distribution arrangements with the Copyright Holder.
    +
    +4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
    +
    +a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
    +
    +b) accompany the distribution with the machine-readable source of the Package with your modifications.
    +
    +c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
    +
    +d) make other distribution arrangements with the Copyright Holder.
    +
    +5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
    +
    +6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
    +
    +7. C or perl subroutines supplied by you and linked into this Package shall not be considered part of this Package.
    +
    +8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
    +
    +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
    +
    +The End
    +
    +
    +
    +--------------- SECTION 13: Artistic License, V2.0 -----------
    +
    +
    +Artistic License 2.0
    +
    +Copyright (c) 2000-2006, The Perl Foundation.
    +
    +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
    +
    +Preamble
    +This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software.
    +
    +You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement.
    +
    +Definitions
    +
    +"Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package.
    +
    +"Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures.
    +
    +"You" and "your" means any person who would like to copy, distribute, or modify the Package.
    +
    +"Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version.
    +
    +"Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization.
    +
    +"Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees.
    +
    +"Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder.
    +
    +"Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder.
    +
    +"Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future.
    +
    +"Source" form means the source code, documentation source, and configuration files for the Package.
    +
    +"Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form.
    +Permission for Use and Modification Without Distribution
    +
    +(1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version.
    +
    +Permissions for Redistribution of the Standard Version
    +
    +(2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package.
    +
    +(3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License.
    +
    +Distribution of Modified Versions of the Package as Source
    +
    +(4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of 
    +the following:
    +
    +(a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version. 
    +
    +(b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version. 
    +
    +(c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under 
    +
    +(i) the Original License or 
    +(ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed.
    +
    +Distribution of Compiled Forms of the Standard Version or Modified Versions 
    +without the Source
    +
    +(5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license.
    +
    +(6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version.
    +
    +Aggregating or Linking the Package
    +
    +(7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation.
    +
    +(8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package.
    +
    +Items That are Not Considered Part of a Modified Version
    +
    +(9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license.
    +
    +General Provisions
    +
    +(10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license.
    +
    +(11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license.
    +
    +(12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder.
    +
    +(13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. 
    +
    +If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed.
    +
    +(14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER 
    +AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED 
    +WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
    +PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT 
    +PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT 
    +HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, 
    +INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE 
    +USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    +
    +
    +
    +--------------- SECTION 14: Microsoft Permissive Public License -----------
    +
    +
    +Microsoft Public License (Ms-PL)
    +
    +This license governs use of the accompanying software. If you use the
    +software, you accept this license. If you do not accept the license,
    +do not use the software.
    +
    +1. Definitions
    +
    +The terms "reproduce," "reproduction," "derivative works," and
    +"distribution" have the same meaning here as under U.S. copyright law.
    +
    +A "contribution" is the original software, or any additions or changes
    +to the software.
    +
    +A "contributor" is any person that distributes its contribution under
    +this license.
    +
    +"Licensed patents" are a contributor's patent claims that read directly
    +on its contribution.
    +
    +2. Grant of Rights
    +
    +(A) Copyright Grant- Subject to the terms of this license, including
    +the license conditions and limitations in section 3, each contributor
    +grants you a non-exclusive, worldwide, royalty-free copyright license to
    +reproduce its contribution, prepare derivative works of its contribution,
    +and distribute its contribution or any derivative works that you create.
    +
    +(B) Patent Grant- Subject to the terms of this license, including the
    +license conditions and limitations in section 3, each contributor grants
    +you a non-exclusive, worldwide, royalty-free license under its licensed
    +patents to make, have made, use, sell, offer for sale, import, and/or
    +otherwise dispose of its contribution in the software or derivative
    +works of the contribution in the software.
    +
    +3. Conditions and Limitations
    +
    +(A) No Trademark License- This license does not grant you rights to use
    +any contributors' name, logo, or trademarks.
    +
    +(B) If you bring a patent claim against any contributor over patents
    +that you claim are infringed by the software, your patent license from
    +such contributor to the software ends automatically.
    +
    +(C) If you distribute any portion of the software, you must retain all
    +copyright, patent, trademark, and attribution notices that are present
    +in the software.
    +
    +(D) If you distribute any portion of the software in source code form,
    +you may do so only under this license by including a complete copy of
    +this license with your distribution. If you distribute any portion of
    +the software in compiled or object code form, you may only do so under
    +a license that complies with this license.
    +
    +(E) The software is licensed "as-is." You bear the risk of using it. The
    +contributors give no express warranties, guarantees or conditions. You
    +may have additional consumer rights under your local laws which this
    +license cannot change. To the extent permitted under your local laws,
    +the contributors exclude the implied warranties of merchantability,
    +fitness for a particular purpose and non-infringement.
    +
    +
    +
    +--------------- SECTION 15: Microsoft Limited Public License -----------
    +
    +
    +Microsoft Limited Public License (Ms-LPL)
    +Published: October 12, 2006
    +
    +This license governs use of the accompanying software. If you use the
    +software, you accept this license. If you do not accept the license,
    +do not use the software.
    +
    +1. Definitions
    +
    +The terms "reproduce," "reproduction," "derivative works," and
    +"distribution" have the same meaning here as under U.S. copyright law.
    +
    +A "contribution" is the original software, or any additions or changes
    +to the software.
    +
    +A "contributor" is any person that distributes its contribution under
    +this license.
    +
    +"Licensed patents" are a contributor's patent claims that read directly
    +on its contribution.
    +
    +Top of pageTop of page
    +2. Grant of Rights
    +
    +(A) Copyright Grant- Subject to the terms of this license, including
    +the license conditions and limitations in section 3, each contributor
    +grants you a non-exclusive, worldwide, royalty-free copyright license to
    +reproduce its contribution, prepare derivative works of its contribution,
    +and distribute its contribution or any derivative works that you create.
    +
    +(B) Patent Grant- Subject to the terms of this license, including the
    +license conditions and limitations in section 3, each contributor grants
    +you a non-exclusive, worldwide, royalty-free license under its licensed
    +patents to make, have made, use, sell, offer for sale, import, and/or
    +otherwise dispose of its contribution in the software or derivative
    +works of the contribution in the software.  Top of pageTop of page
    +
    +3. Conditions and Limitations
    +
    +(A) No Trademark License- This license does not grant you rights to use
    +any contributors' name, logo, or trademarks.
    +
    +(B) If you bring a patent claim against any contributor over patents
    +that you claim are infringed by the software, your patent license from
    +such contributor to the software ends automatically.
    +
    +(C) If you distribute any portion of the software, you must retain all
    +copyright, patent, trademark, and attribution notices that are present
    +in the software.
    +
    +(D) If you distribute any portion of the software in source code form,
    +you may do so only under this license by including a complete copy of
    +this license with your distribution. If you distribute any portion of
    +the software in compiled or object code form, you may only do so under
    +a license that complies with this license.
    +
    +(E) The software is licensed "as-is." You bear the risk of using it. The
    +contributors give no express warranties, guarantees or conditions. You
    +may have additional consumer rights under your local laws which this
    +license cannot change. To the extent permitted under your local laws,
    +the contributors exclude the implied warranties of merchantability,
    +fitness for a particular purpose and non-infringement.
    +
    +(F) Platform Limitation- The licenses granted in sections 2(A) & 2(B)
    +extend only to the software or derivative works that you create that
    +run on a Microsoft Windows operating system product.
    +
    +
    +
    +--------------- SECTION 16: Creative Commons Attribution License, V3.0 -----------
    +
    +
    +Creative Commons Attribution 3.0 Unported
    +
    +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL
    +SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT
    +RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS"
    +BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION
    +PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
    +
    +License
    +
    +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
    +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
    +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN
    +AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
    +
    +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
    +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE
    +MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
    +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
    +CONDITIONS.
    +
    +1. Definitions
    +
    +   a. "Adaptation" means a work based upon the Work, or upon the Work
    +   and other pre-existing works, such as a translation, adaptation,
    +   derivative work, arrangement of music or other alterations of a
    +   literary or artistic work, or phonogram or performance and includes
    +   cinematographic adaptations or any other form in which the Work may
    +   be recast, transformed, or adapted including in any form recognizably
    +   derived from the original, except that a work that constitutes a
    +   Collection will not be considered an Adaptation for the purpose of
    +   this License. For the avoidance of doubt, where the Work is a musical
    +   work, performance or phonogram, the synchronization of the Work in
    +   timed-relation with a moving image ("synching") will be considered
    +   an Adaptation for the purpose of this License.
    +
    +   b. "Collection" means a collection of literary or artistic works,
    +   such as encyclopedias and anthologies, or performances, phonograms or
    +   broadcasts, or other works or subject matter other than works listed in
    +   Section 1(f) below, which, by reason of the selection and arrangement
    +   of their contents, constitute intellectual creations, in which the
    +   Work is included in its entirety in unmodified form along with one or
    +   more other contributions, each constituting separate and independent
    +   works in themselves, which together are assembled into a collective
    +   whole. A work that constitutes a Collection will not be considered
    +   an Adaptation (as defined above) for the purposes of this License.
    +
    +   c. "Distribute" means to make available to the public the original
    +   and copies of the Work or Adaptation, as appropriate, through sale
    +   or other transfer of ownership.
    +
    +   d. "Licensor" means the individual, individuals, entity or entities
    +   that offer(s) the Work under the terms of this License.
    +
    +   e. "Original Author" means, in the case of a literary or artistic
    +   work, the individual, individuals, entity or entities who created the
    +   Work or if no individual or entity can be identified, the publisher;
    +   and in addition (i) in the case of a performance the actors, singers,
    +   musicians, dancers, and other persons who act, sing, deliver, declaim,
    +   play in, interpret or otherwise perform literary or artistic works or
    +   expressions of folklore; (ii) in the case of a phonogram the producer
    +   being the person or legal entity who first fixes the sounds of a
    +   performance or other sounds; and, (iii) in the case of broadcasts,
    +   the organization that transmits the broadcast.
    +
    +   f. "Work" means the literary and/or artistic work offered under the
    +   terms of this License including without limitation any production
    +   in the literary, scientific and artistic domain, whatever may be
    +   the mode or form of its expression including digital form, such
    +   as a book, pamphlet and other writing; a lecture, address, sermon
    +   or other work of the same nature; a dramatic or dramatico-musical
    +   work; a choreographic work or entertainment in dumb show; a musical
    +   composition with or without words; a cinematographic work to which are
    +   assimilated works expressed by a process analogous to cinematography;
    +   a work of drawing, painting, architecture, sculpture, engraving
    +   or lithography; a photographic work to which are assimilated works
    +   expressed by a process analogous to photography; a work of applied art;
    +   an illustration, map, plan, sketch or three-dimensional work relative
    +   to geography, topography, architecture or science; a performance;
    +   a broadcast; a phonogram; a compilation of data to the extent it is
    +   protected as a copyrightable work; or a work performed by a variety
    +   or circus performer to the extent it is not otherwise considered a
    +   literary or artistic work.
    +
    +   g. "You" means an individual or entity exercising rights under this
    +   License who has not previously violated the terms of this License
    +   with respect to the Work, or who has received express permission
    +   from the Licensor to exercise rights under this License despite a
    +   previous violation.
    +
    +   h. "Publicly Perform" means to perform public recitations of the
    +   Work and to communicate to the public those public recitations, by
    +   any means or process, including by wire or wireless means or public
    +   digital performances; to make available to the public Works in such
    +   a way that members of the public may access these Works from a place
    +   and at a place individually chosen by them; to perform the Work to the
    +   public by any means or process and the communication to the public of
    +   the performances of the Work, including by public digital performance;
    +   to broadcast and rebroadcast the Work by any means including signs,
    +   sounds or images.
    +
    +   i. "Reproduce" means to make copies of the Work by any means including
    +   without limitation by sound or visual recordings and the right of
    +   fixation and reproducing fixations of the Work, including storage
    +   of a protected performance or phonogram in digital form or other
    +   electronic medium.
    +
    +2. Fair Dealing Rights. Nothing in this License is intended to reduce,
    +limit, or restrict any uses free from copyright or rights arising from
    +limitations or exceptions that are provided for in connection with the
    +copyright protection under copyright law or other applicable laws.
    +
    +3. License Grant. Subject to the terms and conditions of this License,
    +Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
    +perpetual (for the duration of the applicable copyright) license to
    +exercise the rights in the Work as stated below:
    +
    +   a. to Reproduce the Work, to incorporate the Work into one or
    +   more Collections, and to Reproduce the Work as incorporated in the
    +   Collections;
    +
    +   b. to create and Reproduce Adaptations provided that any such
    +   Adaptation, including any translation in any medium, takes reasonable
    +   steps to clearly label, demarcate or otherwise identify that changes
    +   were made to the original Work. For example, a translation could be
    +   marked "The original work was translated from English to Spanish," or
    +   a modification could indicate "The original work has been modified.";
    +
    +   c. to Distribute and Publicly Perform the Work including as
    +   incorporated in Collections; and,
    +
    +   d. to Distribute and Publicly Perform Adaptations.
    +
    +   e. For the avoidance of doubt:
    +
    +      i. Non-waivable Compulsory License Schemes. In those jurisdictions
    +      in which the right to collect royalties through any statutory or
    +      compulsory licensing scheme cannot be waived, the Licensor reserves
    +      the exclusive right to collect such royalties for any exercise by
    +      You of the rights granted under this License;
    +
    +      ii. Waivable Compulsory License Schemes. In those jurisdictions
    +      in which the right to collect royalties through any statutory or
    +      compulsory licensing scheme can be waived, the Licensor waives the
    +      exclusive right to collect such royalties for any exercise by You
    +      of the rights granted under this License; and,
    +
    +      iii. Voluntary License Schemes. The Licensor waives the right
    +      to collect royalties, whether individually or, in the event that
    +      the Licensor is a member of a collecting society that administers
    +      voluntary licensing schemes, via that society, from any exercise
    +      by You of the rights granted under this License.  The above rights
    +      may be exercised in all media and formats whether now known or
    +      hereafter devised. The above rights include the right to make such
    +      modifications as are technically necessary to exercise the rights
    +      in other media and formats. Subject to Section 8(f), all rights
    +      not expressly granted by Licensor are hereby reserved.
    +
    +4. Restrictions. The license granted in Section 3 above is expressly
    +made subject to and limited by the following restrictions:
    +
    +   a. You may Distribute or Publicly Perform the Work only under the
    +   terms of this License.  You must include a copy of, or the Uniform
    +   Resource Identifier (URI) for, this License with every copy of the
    +   Work You Distribute or Publicly Perform. You may not offer or impose
    +   any terms on the Work that restrict the terms of this License or the
    +   ability of the recipient of the Work to exercise the rights granted to
    +   that recipient under the terms of the License. You may not sublicense
    +   the Work. You must keep intact all notices that refer to this License
    +   and to the disclaimer of warranties with every copy of the Work You
    +   Distribute or Publicly Perform. When You Distribute or Publicly Perform
    +   the Work, You may not impose any effective technological measures on
    +   the Work that restrict the ability of a recipient of the Work from
    +   You to exercise the rights granted to that recipient under the terms
    +   of the License. This Section 4(a) applies to the Work as incorporated
    +   in a Collection, but this does not require the Collection apart from
    +   the Work itself to be made subject to the terms of this License. If
    +   You create a Collection, upon notice from any Licensor You must,
    +   to the extent practicable, remove from the Collection any credit as
    +   required by Section 4(b), as requested. If You create an Adaptation,
    +   upon notice from any Licensor You must, to the extent practicable,
    +   remove from the Adaptation any credit as required by Section 4(b),
    +   as requested.
    +
    +   b. If You Distribute, or Publicly Perform the Work or any Adaptations
    +   or Collections, You must, unless a request has been made pursuant
    +   to Section 4(a), keep intact all copyright notices for the Work and
    +   provide, reasonable to the medium or means You are utilizing: (i) the
    +   name of the Original Author (or pseudonym, if applicable) if supplied,
    +   and/or if the Original Author and/or Licensor designate another party
    +   or parties (e.g., a sponsor institute, publishing entity, journal)
    +   for attribution ("Attribution Parties") in Licensor's copyright
    +   notice, terms of service or by other reasonable means, the name of
    +   such party or parties; (ii) the title of the Work if supplied; (iii)
    +   to the extent reasonably practicable, the URI, if any, that Licensor
    +   specifies to be associated with the Work, unless such URI does not
    +   refer to the copyright notice or licensing information for the Work;
    +   and (iv) , consistent with Section 3(b), in the case of an Adaptation,
    +   a credit identifying the use of the Work in the Adaptation (e.g.,
    +   "French translation of the Work by Original Author," or "Screenplay
    +   based on original Work by Original Author"). The credit required
    +   by this Section 4 (b) may be implemented in any reasonable manner;
    +   provided, however, that in the case of a Adaptation or Collection, at
    +   a minimum such credit will appear, if a credit for all contributing
    +   authors of the Adaptation or Collection appears, then as part of
    +   these credits and in a manner at least as prominent as the credits
    +   for the other contributing authors. For the avoidance of doubt, You
    +   may only use the credit required by this Section for the purpose of
    +   attribution in the manner set out above and, by exercising Your rights
    +   under this License, You may not implicitly or explicitly assert or
    +   imply any connection with, sponsorship or endorsement by the Original
    +   Author, Licensor and/or Attribution Parties, as appropriate, of You
    +   or Your use of the Work, without the separate, express prior written
    +   permission of the Original Author, Licensor and/or Attribution Parties.
    +
    +   c. Except as otherwise agreed in writing by the Licensor or as may be
    +   otherwise permitted by applicable law, if You Reproduce, Distribute
    +   or Publicly Perform the Work either by itself or as part of any
    +   Adaptations or Collections, You must not distort, mutilate, modify
    +   or take other derogatory action in relation to the Work which would
    +   be prejudicial to the Original Author's honor or reputation. Licensor
    +   agrees that in those jurisdictions (e.g. Japan), in which any exercise
    +   of the right granted in Section 3(b) of this License (the right to
    +   make Adaptations) would be deemed to be a distortion, mutilation,
    +   modification or other derogatory action prejudicial to the Original
    +   Author's honor and reputation, the Licensor will waive or not assert,
    +   as appropriate, this Section, to the fullest extent permitted by the
    +   applicable national law, to enable You to reasonably exercise Your
    +   right under Section 3(b) of this License (right to make Adaptations)
    +   but not otherwise.
    +
    +5. Representations, Warranties and Disclaimer
    +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
    +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
    +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
    +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
    +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
    +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
    +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
    +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
    +
    +6. Limitation on Liability.
    +EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR
    +BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL,
    +CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS
    +LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF
    +THE POSSIBILITY OF SUCH DAMAGES.
    +
    +7. Termination
    +
    +   a. This License and the rights granted hereunder will terminate
    +   automatically upon any breach by You of the terms of this
    +   License. Individuals or entities who have received Adaptations or
    +   Collections from You under this License, however, will not have their
    +   licenses terminated provided such individuals or entities remain in
    +   full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8
    +   will survive any termination of this License.
    +
    +   b. Subject to the above terms and conditions, the license granted
    +   here is perpetual (for the duration of the applicable copyright in
    +   the Work). Notwithstanding the above, Licensor reserves the right to
    +   release the Work under different license terms or to stop distributing
    +   the Work at any time; provided, however that any such election will not
    +   serve to withdraw this License (or any other license that has been,
    +   or is required to be, granted under the terms of this License), and
    +   this License will continue in full force and effect unless terminated
    +   as stated above.
    +
    +8. Miscellaneous
    +
    +   a. Each time You Distribute or Publicly Perform the Work or a
    +   Collection, the Licensor offers to the recipient a license to the
    +   Work on the same terms and conditions as the license granted to You
    +   under this License.
    +
    +   b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
    +   offers to the recipient a license to the original Work on the same
    +   terms and conditions as the license granted to You under this License.
    +
    +   c. If any provision of this License is invalid or unenforceable under
    +   applicable law, it shall not affect the validity or enforceability
    +   of the remainder of the terms of this License, and without further
    +   action by the parties to this agreement, such provision shall be
    +   reformed to the minimum extent necessary to make such provision valid
    +   and enforceable.
    +
    +   d. No term or provision of this License shall be deemed waived and no
    +   breach consented to unless such waiver or consent shall be in writing
    +   and signed by the party to be charged with such waiver or consent.
    +
    +   e. This License constitutes the entire agreement between the parties
    +   with respect to the Work licensed here. There are no understandings,
    +   agreements or representations with respect to the Work not specified
    +   here. Licensor shall not be bound by any additional provisions that
    +   may appear in any communication from You. This License may not be
    +   modified without the mutual written agreement of the Licensor and You.
    +
    +   f. The rights granted under, and the subject matter referenced, in this
    +   License were drafted utilizing the terminology of the Berne Convention
    +   for the Protection of Literary and Artistic Works (as amended on
    +   September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
    +   Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
    +   the Universal Copyright Convention (as revised on July 24, 1971). These
    +   rights and subject matter take effect in the relevant jurisdiction
    +   in which the License terms are sought to be enforced according to
    +   the corresponding provisions of the implementation of those treaty
    +   provisions in the applicable national law. If the standard suite of
    +   rights granted under applicable copyright law includes additional
    +   rights not granted under this License, such additional rights are
    +   deemed to be included in the License; this License is not intended
    +   to restrict the license of any rights under applicable law.
    +
    +
    +
    +--------------- SECTION 17: Creative Commons Attribution 4.0 International -----------
    +
    +
    +Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
    +
    +Using Creative Commons Public Licenses
    +
    +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
    +
    +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
    +
    +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
    +
    +Creative Commons Attribution 4.0 International Public License
    +
    +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
    +
    +Section 1 – Definitions.
    +
    +Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
    +Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
    +Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
    +Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
    +Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
    +Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
    +Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
    +Licensor means the individual(s) or entity(ies) granting rights under this Public License.
    +Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
    +Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
    +You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
    +
    +Section 2 – Scope.
    +
    +License grant.
    +Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
    +reproduce and Share the Licensed Material, in whole or in part; and
    +produce, reproduce, and Share Adapted Material.
    +Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
    +Term. The term of this Public License is specified in Section 6(a).
    +Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
    +Downstream recipients.
    +Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
    +No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
    +No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
    +
    +Other rights.
    +Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
    +Patent and trademark rights are not licensed under this Public License.
    +To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
    +
    +Section 3 – License Conditions.
    +
    +Your exercise of the Licensed Rights is expressly made subject to the following conditions.
    +
    +Attribution.
    +
    +If You Share the Licensed Material (including in modified form), You must:
    +retain the following if it is supplied by the Licensor with the Licensed Material:
    +identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
    +a copyright notice;
    +a notice that refers to this Public License;
    +a notice that refers to the disclaimer of warranties;
    +a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
    +indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
    +indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
    +You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
    +If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
    +If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
    +
    +Section 4 – Sui Generis Database Rights.
    +
    +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
    +
    +for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
    +if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
    +You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
    +
    +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
    +
    +Section 5 – Disclaimer of Warranties and Limitation of Liability.
    +
    +Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
    +To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
    +
    +The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
    +
    +Section 6 – Term and Termination.
    +
    +This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
    +
    +Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
    +automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
    +upon express reinstatement by the Licensor.
    +For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
    +For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
    +Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
    +
    +Section 7 – Other Terms and Conditions.
    +
    +The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
    +Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
    +
    +Section 8 – Interpretation.
    +
    +For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
    +To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
    +No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
    +Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
    +
    +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
    +
    +Creative Commons may be contacted at creativecommons.org.
    +
    +
    +
    +--------------- SECTION 18: Creative Commons Attribution-ShareAlike, V4.0 -----------
    +
    +
    +Creative Commons Attribution-ShareAlike 4.0 International Public License
    +
    +Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
    +
    +Using Creative Commons Public Licenses
    +
    +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
    +
    +    Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
    +
    +    Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
    +
    +Creative Commons Attribution-ShareAlike 4.0 International Public License
    +
    +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
    +
    +Section 1 – Definitions.
    +
    +    Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
    +    Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
    +    BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.
    +    Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
    +    Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
    +    Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
    +    License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike.
    +    Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
    +    Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
    +    Licensor means the individual(s) or entity(ies) granting rights under this Public License.
    +    Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
    +    Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
    +    You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
    +
    +Section 2 – Scope.
    +
    +    License grant.
    +        Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
    +            reproduce and Share the Licensed Material, in whole or in part; and
    +            produce, reproduce, and Share Adapted Material.
    +        Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
    +        Term. The term of this Public License is specified in Section 6(a).
    +        Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
    +        Downstream recipients.
    +            Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
    +            Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.
    +            No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
    +        No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
    +
    +    Other rights.
    +        Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
    +        Patent and trademark rights are not licensed under this Public License.
    +        To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
    +
    +Section 3 – License Conditions.
    +
    +Your exercise of the Licensed Rights is expressly made subject to the following conditions.
    +
    +    Attribution.
    +
    +        If You Share the Licensed Material (including in modified form), You must:
    +            retain the following if it is supplied by the Licensor with the Licensed Material:
    +                identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
    +                a copyright notice;
    +                a notice that refers to this Public License;
    +                a notice that refers to the disclaimer of warranties;
    +                a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
    +            indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
    +            indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
    +        You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
    +        If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
    +    ShareAlike.
    +
    +    In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
    +        The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License.
    +        You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
    +        You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
    +
    +Section 4 – Sui Generis Database Rights.
    +
    +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
    +
    +    for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
    +    if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
    +    You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
    +
    +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
    +
    +Section 5 – Disclaimer of Warranties and Limitation of Liability.
    +
    +    Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
    +    To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
    +
    +    The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
    +
    +Section 6 – Term and Termination.
    +
    +    This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
    +
    +    Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
    +        automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
    +        upon express reinstatement by the Licensor.
    +    For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
    +    For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
    +    Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
    +
    +Section 7 – Other Terms and Conditions.
    +
    +    The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
    +    Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
    +
    +Section 8 – Interpretation.
    +
    +    For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
    +    To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
    +    No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
    +    Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
    +
    +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” The text of the Creative Commons public licenses is dedicated to the public domain under the CC0 Public Domain Dedication. Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
    +
    +Creative Commons may be contacted at creativecommons.org.
    +
    +
    +
    +--------------- SECTION 19: Creative Commons Attribution-ShareAlike, V3.0 -----------
    +
    +
    +Creative Commons Attribution-ShareAlike 3.0 Unported
    +
    +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL
    +SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT
    +RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS"
    +BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION
    +PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
    +
    +License
    +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
    +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED
    +BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER
    +THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
    +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
    +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE
    +MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
    +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
    +CONDITIONS.
    +
    +1. Definitions
    +
    +   a. "Adaptation" means a work based upon the Work, or upon the Work
    +   and other pre-existing works, such as a translation, adaptation,
    +   derivative work, arrangement of music or other alterations of a
    +   literary or artistic work, or phonogram or performance and includes
    +   cinematographic adaptations or any other form in which the Work may
    +   be recast, transformed, or adapted including in any form recognizably
    +   derived from the original, except that a work that constitutes a
    +   Collection will not be considered an Adaptation for the purpose of
    +   this License. For the avoidance of doubt, where the Work is a musical
    +   work, performance or phonogram, the synchronization of the Work in
    +   timed-relation with a moving image ("synching") will be considered
    +   an Adaptation for the purpose of this License.
    +
    +   b. "Collection" means a collection of literary or artistic works,
    +   such as encyclopedias and anthologies, or performances, phonograms or
    +   broadcasts, or other works or subject matter other than works listed in
    +   Section 1(f) below, which, by reason of the selection and arrangement
    +   of their contents, constitute intellectual creations, in which the
    +   Work is included in its entirety in unmodified form along with one or
    +   more other contributions, each constituting separate and independent
    +   works in themselves, which together are assembled into a collective
    +   whole. A work that constitutes a Collection will not be considered
    +   an Adaptation (as defined below) for the purposes of this License.
    +
    +   c. "Creative Commons Compatible License" means a license that is
    +   listed at http://creativecommons.org/compatiblelicenses that has
    +   been approved by Creative Commons as being essentially equivalent
    +   to this License, including, at a minimum, because that license: (i)
    +   contains terms that have the same purpose, meaning and effect as the
    +   License Elements of this License; and, (ii) explicitly permits the
    +   relicensing of adaptations of works made available under that license
    +   under this License or a Creative Commons jurisdiction license with
    +   the same License Elements as this License.
    +
    +   d. "Distribute" means to make available to the public the original
    +   and copies of the Work or Adaptation, as appropriate, through sale
    +   or other transfer of ownership.
    +
    +   e. "License Elements" means the following high-level license attributes
    +   as selected by Licensor and indicated in the title of this License:
    +   Attribution, ShareAlike.
    +
    +   f. "Licensor" means the individual, individuals, entity or entities
    +   that offer(s) the Work under the terms of this License.
    +
    +   g. "Original Author" means, in the case of a literary or artistic
    +   work, the individual, individuals, entity or entities who created the
    +   Work or if no individual or entity can be identified, the publisher;
    +   and in addition (i) in the case of a performance the actors, singers,
    +   musicians, dancers, and other persons who act, sing, deliver, declaim,
    +   play in, interpret or otherwise perform literary or artistic works or
    +   expressions of folklore; (ii) in the case of a phonogram the producer
    +   being the person or legal entity who first fixes the sounds of a
    +   performance or other sounds; and, (iii) in the case of broadcasts,
    +   the organization that transmits the broadcast.
    +
    +   h. "Work" means the literary and/or artistic work offered under the
    +   terms of this License including without limitation any production
    +   in the literary, scientific and artistic domain, whatever may be
    +   the mode or form of its expression including digital form, such
    +   as a book, pamphlet and other writing; a lecture, address, sermon
    +   or other work of the same nature; a dramatic or dramatico-musical
    +   work; a choreographic work or entertainment in dumb show; a musical
    +   composition with or without words; a cinematographic work to which are
    +   assimilated works expressed by a process analogous to cinematography;
    +   a work of drawing, painting, architecture, sculpture, engraving
    +   or lithography; a photographic work to which are assimilated works
    +   expressed by a process analogous to photography; a work of applied art;
    +   an illustration, map, plan, sketch or three-dimensional work relative
    +   to geography, topography, architecture or science; a performance;
    +   a broadcast; a phonogram; a compilation of data to the extent it is
    +   protected as a copyrightable work; or a work performed by a variety
    +   or circus performer to the extent it is not otherwise considered a
    +   literary or artistic work.
    +
    +   i. "You" means an individual or entity exercising rights under this
    +   License who has not previously violated the terms of this License
    +   with respect to the Work, or who has received express permission
    +   from the Licensor to exercise rights under this License despite a
    +   previous violation.
    +
    +   j. "Publicly Perform" means to perform public recitations of the
    +   Work and to communicate to the public those public recitations, by
    +   any means or process, including by wire or wireless means or public
    +   digital performances; to make available to the public Works in such
    +   a way that members of the public may access these Works from a place
    +   and at a place individually chosen by them; to perform the Work to the
    +   public by any means or process and the communication to the public of
    +   the performances of the Work, including by public digital performance;
    +   to broadcast and rebroadcast the Work by any means including signs,
    +   sounds or images.
    +
    +   k. "Reproduce" means to make copies of the Work by any means including
    +   without limitation by sound or visual recordings and the right of
    +   fixation and reproducing fixations of the Work, including storage
    +   of a protected performance or phonogram in digital form or other
    +   electronic medium.
    +
    +2. Fair Dealing Rights.
    +Nothing in this License is intended to reduce, limit, or restrict any
    +uses free from copyright or rights arising from limitations or exceptions
    +that are provided for in connection with the copyright protection under
    +copyright law or other applicable laws.
    +
    +3. License Grant.
    +Subject to the terms and conditions of this License, Licensor hereby
    +grants You a worldwide, royalty-free, non-exclusive, perpetual (for the
    +duration of the applicable copyright) license to exercise the rights in
    +the Work as stated below:
    +
    +   a. to Reproduce the Work, to incorporate the Work into one or
    +   more Collections, and to Reproduce the Work as incorporated in the
    +   Collections;
    +
    +   b. to create and Reproduce Adaptations provided that any such
    +   Adaptation, including any translation in any medium, takes reasonable
    +   steps to clearly label, demarcate or otherwise identify that changes
    +   were made to the original Work. For example, a translation could be
    +   marked "The original work was translated from English to Spanish," or
    +   a modification could indicate "The original work has been modified.";
    +
    +   c. to Distribute and Publicly Perform the Work including as
    +   incorporated in Collections; and,
    +
    +   d. to Distribute and Publicly Perform Adaptations.
    +
    +   e. For the avoidance of doubt:
    +
    +      i. Non-waivable Compulsory License Schemes. In those jurisdictions
    +      in which the right to collect royalties through any statutory or
    +      compulsory licensing scheme cannot be waived, the Licensor reserves
    +      the exclusive right to collect such royalties for any exercise by
    +      You of the rights granted under this License;
    +
    +      ii. Waivable Compulsory License Schemes. In those jurisdictions
    +      in which the right to collect royalties through any statutory or
    +      compulsory licensing scheme can be waived, the Licensor waives the
    +      exclusive right to collect such royalties for any exercise by You
    +      of the rights granted under this License; and,
    +
    +      iii. Voluntary License Schemes. The Licensor waives the right
    +      to collect royalties, whether individually or, in the event that
    +      the Licensor is a member of a collecting society that administers
    +      voluntary licensing schemes, via that society, from any exercise
    +      by You of the rights granted under this License.  The above rights
    +      may be exercised in all media and formats whether now known or
    +      hereafter devised. The above rights include the right to make such
    +      modifications as are technically necessary to exercise the rights
    +      in other media and formats. Subject to Section 8(f), all rights
    +      not expressly granted by Licensor are hereby reserved.
    +
    +4. Restrictions.
    +The license granted in Section 3 above is expressly made subject to and
    +limited by the following restrictions:
    +
    +   a. You may Distribute or Publicly Perform the Work only under the
    +   terms of this License.  You must include a copy of, or the Uniform
    +   Resource Identifier (URI) for, this License with every copy of the
    +   Work You Distribute or Publicly Perform. You may not offer or impose
    +   any terms on the Work that restrict the terms of this License or the
    +   ability of the recipient of the Work to exercise the rights granted to
    +   that recipient under the terms of the License. You may not sublicense
    +   the Work. You must keep intact all notices that refer to this License
    +   and to the disclaimer of warranties with every copy of the Work You
    +   Distribute or Publicly Perform. When You Distribute or Publicly Perform
    +   the Work, You may not impose any effective technological measures on
    +   the Work that restrict the ability of a recipient of the Work from
    +   You to exercise the rights granted to that recipient under the terms
    +   of the License. This Section 4(a) applies to the Work as incorporated
    +   in a Collection, but this does not require the Collection apart from
    +   the Work itself to be made subject to the terms of this License. If
    +   You create a Collection, upon notice from any Licensor You must,
    +   to the extent practicable, remove from the Collection any credit as
    +   required by Section 4(c), as requested. If You create an Adaptation,
    +   upon notice from any Licensor You must, to the extent practicable,
    +   remove from the Adaptation any credit as required by Section 4(c),
    +   as requested.
    +
    +   b. You may Distribute or Publicly Perform an Adaptation only under the
    +   terms of: (i) this License; (ii) a later version of this License with
    +   the same License Elements as this License; (iii) a Creative Commons
    +   jurisdiction license (either this or a later license version) that
    +   contains the same License Elements as this License (e.g., Attribution-
    +   ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If
    +   you license the Adaptation under one of the licenses mentioned in
    +   (iv), you must comply with the terms of that license. If you license
    +   the Adaptation under the terms of any of the licenses mentioned in
    +   (i), (ii) or (iii) (the "Applicable License"), you must comply with
    +   the terms of the Applicable License generally and the following
    +   provisions: (I) You must include a copy of, or the URI for, the
    +   Applicable License with every copy of each Adaptation You Distribute
    +   or Publicly Perform; (II) You may not offer or impose any terms on
    +   the Adaptation that restrict the terms of the Applicable License or
    +   the ability of the recipient of the Adaptation to exercise the rights
    +   granted to that recipient under the terms of the Applicable License;
    +   (III) You must keep intact all notices that refer to the Applicable
    +   License and to the disclaimer of warranties with every copy of the
    +   Work as included in the Adaptation You Distribute or Publicly Perform;
    +   (IV) when You Distribute or Publicly Perform the Adaptation, You may
    +   not impose any effective technological measures on the Adaptation
    +   that restrict the ability of a recipient of the Adaptation from You
    +   to exercise the rights granted to that recipient under the terms of
    +   the Applicable License. This Section 4(b) applies to the Adaptation as
    +   incorporated in a Collection, but this does not require the Collection
    +   apart from the Adaptation itself to be made subject to the terms of
    +   the Applicable License.
    +
    +   c. If You Distribute, or Publicly Perform the Work or any Adaptations
    +   or Collections, You must, unless a request has been made pursuant
    +   to Section 4(a), keep intact all copyright notices for the Work and
    +   provide, reasonable to the medium or means You are utilizing: (i) the
    +   name of the Original Author (or pseudonym, if applicable) if supplied,
    +   and/or if the Original Author and/or Licensor designate another party
    +   or parties (e.g., a sponsor institute, publishing entity, journal)
    +   for attribution ("Attribution Parties") in Licensor's copyright
    +   notice, terms of service or by other reasonable means, the name of
    +   such party or parties; (ii) the title of the Work if supplied; (iii)
    +   to the extent reasonably practicable, the URI, if any, that Licensor
    +   specifies to be associated with the Work, unless such URI does not
    +   refer to the copyright notice or licensing information for the Work;
    +   and (iv) , consistent with Ssection 3(b), in the case of an Adaptation,
    +   a credit identifying the use of the Work in the Adaptation (e.g.,
    +   "French translation of the Work by Original Author," or "Screenplay
    +   based on original Work by Original Author"). The credit required
    +   by this Section 4(c) may be implemented in any reasonable manner;
    +   provided, however, that in the case of a Adaptation or Collection, at
    +   a minimum such credit will appear, if a credit for all contributing
    +   authors of the Adaptation or Collection appears, then as part of
    +   these credits and in a manner at least as prominent as the credits
    +   for the other contributing authors. For the avoidance of doubt, You
    +   may only use the credit required by this Section for the purpose of
    +   attribution in the manner set out above and, by exercising Your rights
    +   under this License, You may not implicitly or explicitly assert or
    +   imply any connection with, sponsorship or endorsement by the Original
    +   Author, Licensor and/or Attribution Parties, as appropriate, of You
    +   or Your use of the Work, without the separate, express prior written
    +   permission of the Original Author, Licensor and/or Attribution Parties.
    +
    +   d. Except as otherwise agreed in writing by the Licensor or as may be
    +   otherwise permitted by applicable law, if You Reproduce, Distribute
    +   or Publicly Perform the Work either by itself or as part of any
    +   Adaptations or Collections, You must not distort, mutilate, modify
    +   or take other derogatory action in relation to the Work which would
    +   be prejudicial to the Original Author's honor or reputation. Licensor
    +   agrees that in those jurisdictions (e.g. Japan), in which any exercise
    +   of the right granted in Section 3(b) of this License (the right to
    +   make Adaptations) would be deemed to be a distortion, mutilation,
    +   modification or other derogatory action prejudicial to the Original
    +   Author's honor and reputation, the Licensor will waive or not assert,
    +   as appropriate, this Section, to the fullest extent permitted by the
    +   applicable national law, to enable You to reasonably exercise Your
    +   right under Section 3(b) of this License (right to make Adaptations)
    +   but not otherwise.
    +
    +5. Representations, Warranties and Disclaimer
    +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
    +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
    +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
    +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
    +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
    +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
    +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
    +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
    +
    +6. Limitation on Liability.
    +EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR
    +BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL,
    +CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS
    +LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF
    +THE POSSIBILITY OF SUCH DAMAGES.
    +
    +7. Termination
    +
    +   a. This License and the rights granted hereunder will terminate
    +   automatically upon any breach by You of the terms of this
    +   License. Individuals or entities who have received Adaptations or
    +   Collections from You under this License, however, will not have their
    +   licenses terminated provided such individuals or entities remain in
    +   full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8
    +   will survive any termination of this License.
    +
    +   b. Subject to the above terms and conditions, the license granted
    +   here is perpetual (for the duration of the applicable copyright in
    +   the Work). Notwithstanding the above, Licensor reserves the right to
    +   release the Work under different license terms or to stop distributing
    +   the Work at any time; provided, however that any such election will not
    +   serve to withdraw this License (or any other license that has been,
    +   or is required to be, granted under the terms of this License), and
    +   this License will continue in full force and effect unless terminated
    +   as stated above.
    +
    +8. Miscellaneous
    +
    +   a. Each time You Distribute or Publicly Perform the Work or a
    +   Collection, the Licensor offers to the recipient a license to the
    +   Work on the same terms and conditions as the license granted to You
    +   under this License.
    +
    +   b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
    +   offers to the recipient a license to the original Work on the same
    +   terms and conditions as the license granted to You under this License.
    +
    +   c. If any provision of this License is invalid or unenforceable under
    +   applicable law, it shall not affect the validity or enforceability
    +   of the remainder of the terms of this License, and without further
    +   action by the parties to this agreement, such provision shall be
    +   reformed to the minimum extent necessary to make such provision valid
    +   and enforceable.
    +
    +   d. No term or provision of this License shall be deemed waived and no
    +   breach consented to unless such waiver or consent shall be in writing
    +   and signed by the party to be charged with such waiver or consent.
    +
    +   e. This License constitutes the entire agreement between the parties
    +   with respect to the Work licensed here. There are no understandings,
    +   agreements or representations with respect to the Work not specified
    +   here. Licensor shall not be bound by any additional provisions that
    +   may appear in any communication from You. This License may not be
    +   modified without the mutual written agreement of the Licensor and You.
    +
    +   f. The rights granted under, and the subject matter referenced, in this
    +   License were drafted utilizing the terminology of the Berne Convention
    +   for the Protection of Literary and Artistic Works (as amended on
    +   September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
    +   Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
    +   the Universal Copyright Convention (as revised on July 24, 1971). These
    +   rights and subject matter take effect in the relevant jurisdiction
    +   in which the License terms are sought to be enforced according to
    +   the corresponding provisions of the implementation of those treaty
    +   provisions in the applicable national law. If the standard suite of
    +   rights granted under applicable copyright law includes additional
    +   rights not granted under this License, such additional rights are
    +   deemed to be included in the License; this License is not intended
    +   to restrict the license of any rights under applicable law.
    +
    +
    +
    +--------------- SECTION 20: Academic Free License, V2.1 -----------
    +
    +The Academic Free License v. 2.1
    +
    +This Academic Free License (the "License") applies to any original work of 
    +authorship (the "Original Work") whose owner (the "Licensor") has placed the 
    +following notice immediately following the copyright notice for the Original 
    +Work:
    +
    +Licensed under the Academic Free License version 2.1
    +
    +1) Grant of Copyright License.
    +Licensor hereby grants You a world-wide, royalty-free, non-exclusive,
    +perpetual, sublicenseable license to do the following:
    +
    +  a) to reproduce the Original Work in copies;
    +
    +  b) to prepare derivative works ("Derivative Works") based upon the
    +     Original Work;
    +
    +  c) to distribute copies of the Original Work and Derivative Works to
    +     the public;
    +
    +  d) to perform the Original Work publicly; and
    +
    +  e) to display the Original Work publicly.
    +
    +2) Grant of Patent License.
    +Licensor hereby grants You a world-wide, royalty- free, non-exclusive,
    +perpetual, sublicenseable license, under patent claims owned or controlled
    +by the Licensor that are embodied in the Original Work as furnished by
    +the Licensor, to make, use, sell and offer for sale the Original Work
    +and Derivative Works.
    +
    +3) Grant of Source Code License.
    +The term "Source Code" means the preferred form of the Original Work for
    +making modifications to it and all available documentation describing
    +how to modify the Original Work. Licensor hereby agrees to provide a
    +machine-readable copy of the Source Code of the Original Work along with
    +each copy of the Original Work that Licensor distributes.  Licensor
    +reserves the right to satisfy this obligation by placing a machine-
    +readable copy of the Source Code in an information repository reasonably
    +calculated to permit inexpensive and convenient access by You for as long
    +as Licensor continues to distribute the Original Work, and by publishing
    +the address of that information repository in a notice immediately
    +following the copyright notice that applies to the Original Work.
    +
    +4) Exclusions From License Grant.
    +Neither the names of Licensor, nor the names of any contributors to the
    +Original Work, nor any of their trademarks or service marks, may be used
    +to endorse or promote products derived from this Original Work without
    +express prior written permission of the Licensor.  Nothing in this
    +License shall be deemed to grant any rights to trademarks, copyrights,
    +patents, trade secrets or any other intellectual property of Licensor
    +except as expressly stated herein. No patent license is granted to make,
    +use, sell or offer to sell embodiments of any patent claims other than
    +the licensed claims defined in Section 2. No right is granted to the
    +trademarks of Licensor even if such marks are included in the Original
    +Work.  Nothing in this License shall be interpreted to prohibit Licensor
    +from licensing under different terms from this License any Original Work
    +that Licensor otherwise would have a right to license.
    +
    +5) This section intentionally omitted.
    +
    +6) Attribution Rights.
    +You must retain, in the Source Code of any Derivative Works that You
    +create, all copyright, patent or trademark notices from the Source
    +Code of the Original Work, as well as any notices of licensing and any
    +descriptive text identified therein as an "Attribution Notice." You must
    +cause the Source Code for any Derivative Works that You create to carry
    +a prominent Attribution Notice reasonably calculated to inform recipients
    +that You have modified the Original Work.
    +
    +7) Warranty of Provenance and Disclaimer of Warranty.
    +Licensor warrants that the copyright in and to the Original Work and the
    +patent rights granted herein by Licensor are owned by the Licensor or are
    +sublicensed to You under the terms of this License with the permission
    +of the contributor(s) of those copyrights and patent rights. Except as
    +expressly stated in the immediately proceeding sentence, the Original
    +Work is provided under this License on an "AS IS" BASIS and WITHOUT
    +WARRANTY, either express or implied, including, without limitation,
    +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A
    +PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL
    +WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential
    +part of this License. No license to Original Work is granted hereunder
    +except under this disclaimer.
    +
    +8) Limitation of Liability.
    +Under no circumstances and under no legal theory, whether in tort
    +(including negligence), contract, or otherwise, shall the Licensor be
    +liable to any person for any direct, indirect, special, incidental, or
    +consequential damages of any character arising as a result of this License
    +or the use of the Original Work including, without limitation, damages
    +for loss of goodwill, work stoppage, computer failure or malfunction,
    +or any and all other commercial damages or losses. This limitation of
    +liability shall not apply to liability for death or personal injury
    +resulting from Licensor's negligence to the extent applicable law
    +prohibits such limitation. Some jurisdictions do not allow the exclusion
    +or limitation of incidental or consequential damages, so this exclusion
    +and limitation may not apply to You.
    +
    +9) Acceptance and Termination.
    +If You distribute copies of the Original Work or a Derivative Work,
    +You must make a reasonable effort under the circumstances to obtain the
    +express assent of recipients to the terms of this License. Nothing else
    +but this License (or another written agreement between Licensor and You)
    +grants You permission to create Derivative Works based upon the Original
    +Work or to exercise any of the rights granted in Section 1 herein, and
    +any attempt to do so except under the terms of this License (or another
    +written agreement between Licensor and You) is expressly prohibited
    +by U.S. copyright law, the equivalent laws of other countries, and by
    +international treaty. Therefore, by exercising any of the rights granted
    +to You in Section 1 herein, You indicate Your acceptance of this License
    +and all of its terms and conditions.
    +
    +10) Termination for Patent Action.
    +This License shall terminate automatically and You may no longer exercise
    +any of the rights granted to You by this License as of the date You
    +commence an action, including a cross-claim or counterclaim, against
    +Licensor or any licensee alleging that the Original Work infringes
    +a patent. This termination provision shall not apply for an action
    +alleging patent infringement by combinations of the Original Work with
    +other software or hardware.
    +
    +11) Jurisdiction, Venue and Governing Law.
    +Any action or suit relating to this License may be brought only in
    +the courts of a jurisdiction wherein the Licensor resides or in which
    +Licensor conducts its primary business, and under the laws of that
    +jurisdiction excluding its conflict-of-law provisions. The application
    +of the United Nations Convention on Contracts for the International Sale
    +of Goods is expressly excluded. Any use of the Original Work outside
    +the scope of this License or after its termination shall be subject
    +to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C.
    +§ 101 et seq., the equivalent laws of other countries, and international
    +treaty. This section shall survive the termination of this License.
    +
    +12) Attorneys Fees.
    +In any action to enforce the terms of this License or seeking damages
    +relating thereto, the prevailing party shall be entitled to recover its
    +costs and expenses, including, without limitation, reasonable attorneys'
    +fees and costs incurred in connection with such action, including any
    +appeal of such action. This section shall survive the termination of
    +this License.
    +
    +13) Miscellaneous.
    +This License represents the complete agreement concerning the
    +subject matter hereof. If any provision of this License is held to
    +be unenforceable, such provision shall be reformed only to the extent
    +necessary to make it enforceable.
    +
    +14) Definition of "You" in This License.
    +"You" throughout this License, whether in upper or lower case, means an
    +individual or a legal entity exercising rights under, and complying with
    +all of the terms of, this License.  For legal entities, "You" includes
    +any entity that controls, is controlled by, or is under common control
    +with you. For purposes of this definition, "control" means (i) the power,
    +direct or indirect, to cause the direction or management of such entity,
    +whether by contract or otherwise, or (ii) ownership of fifty percent
    +(50%) or more of the outstanding shares, or (iii) beneficial ownership
    +of such entity.
    +
    +15) Right to Use.
    +You may use the Original Work in all ways not otherwise restricted or
    +conditioned by this License or by law, and Licensor promises not to
    +interfere with or be responsible for such uses by You.
    +
    +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights
    +reserved. Permission is hereby granted to copy and distribute this
    +license without modification. This license may not be modified without
    +the express written permission of its copyright owner.
    +
    +
    +
    +--------------- SECTION 21: SIL Open Font License, V1.1 -----------
    +
    +
    +SIL OPEN FONT LICENSE
    +
    +Version 1.1 - 26 February 2007
    +PREAMBLE
    +
    +The goals of the Open Font License (OFL) are to stimulate worldwide
    +development of collaborative font projects, to support the font creation
    +efforts of academic and linguistic communities, and to provide a free and
    +open framework in which fonts may be shared and improved in partnership
    +with others.
    +
    +The OFL allows the licensed fonts to be used, studied, modified and
    +redistributed freely as long as they are not sold by themselves. The
    +fonts, including any derivative works, can be bundled, embedded,
    +redistributed and/or sold with any software provided that any reserved
    +names are not used by derivative works. The fonts and derivatives,
    +however, cannot be released under any other type of license. The
    +requirement for fonts to remain under this license does not apply
    +to any document created using the fonts or their derivatives.
    +DEFINITIONS
    +
    +"Font Software" refers to the set of files released by the Copyright
    +Holder(s) under this license and clearly marked as such. This may
    +include source files, build scripts and documentation.
    +
    +"Reserved Font Name" refers to any names specified as such after the
    +copyright statement(s).
    +
    +"Original Version" refers to the collection of Font Software components as
    +distributed by the Copyright Holder(s).
    +
    +"Modified Version" refers to any derivative made by adding to, deleting,
    +or substituting - in part or in whole - any of the components of the
    +Original Version, by changing formats or by porting the Font Software to a
    +new environment.
    +
    +"Author" refers to any designer, engineer, programmer, technical
    +writer or other person who contributed to the Font Software.
    +PERMISSION & CONDITIONS
    +
    +Permission is hereby granted, free of charge, to any person obtaining
    +a copy of the Font Software, to use, study, copy, merge, embed, modify,
    +redistribute, and sell modified and unmodified copies of the Font
    +Software, subject to the following conditions:
    +
    +1) Neither the Font Software nor any of its individual components,
    +in Original or Modified Versions, may be sold by itself.
    +
    +2) Original or Modified Versions of the Font Software may be bundled,
    +redistributed and/or sold with any software, provided that each copy
    +contains the above copyright notice and this license. These can be
    +included either as stand-alone text files, human-readable headers or
    +in the appropriate machine-readable metadata fields within text or
    +binary files as long as those fields can be easily viewed by the user.
    +
    +3) No Modified Version of the Font Software may use the Reserved Font
    +Name(s) unless explicit written permission is granted by the corresponding
    +Copyright Holder. This restriction only applies to the primary font name as
    +presented to the users.
    +
    +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
    +Software shall not be used to promote, endorse or advertise any
    +Modified Version, except to acknowledge the contribution(s) of the
    +Copyright Holder(s) and the Author(s) or with their explicit written
    +permission.
    +
    +5) The Font Software, modified or unmodified, in part or in whole,
    +must be distributed entirely under this license, and must not be
    +distributed under any other license. The requirement for fonts to
    +remain under this license does not apply to any document created
    +using the Font Software.
    +TERMINATION
    +
    +This license becomes null and void if any of the above conditions are
    +not met.
    +DISCLAIMER
    +
    +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
    +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
    +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
    +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
    +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
    +OTHER DEALINGS IN THE FONT SOFTWARE.
    +
    +
    +
    +--------------- SECTION 22: LaTeX Project Public License v1.3c -----------
    +
    +
    +The LaTeX Project Public License 
    +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    +LPPL Version 1.3c 2008-05-04
    +Copyright 1999 2002-2008 LaTeX3 Project
    +Everyone is allowed to distribute verbatim copies of this license document, but modification of it is not allowed.
    +PREAMBLE 
    +======== 
    +The LaTeX Project Public License (LPPL) is the primary license under which the LaTeX kernel and the base LaTeX packages are distributed.
    +You may use this license for any work of which you hold the copyright and which you wish to distribute. This license may be particularly suitable if your work is TeX-related (such as a LaTeX package), but it is written in such a way that you can use it even if your work is unrelated to TeX.
    +The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE', below, gives instructions, examples, and recommendations for authors who are considering distributing their works under this license.
    +This license gives conditions under which a work may be distributed and modified, as well as conditions under which modified versions of that work may be distributed.
    +We, the LaTeX3 Project, believe that the conditions below give you the freedom to make and distribute modified versions of your work that conform with whatever technical specifications you wish while maintaining the availability, integrity, and reliability of that work. If you do not see how to achieve your goal while meeting these conditions, then read the document `cfgguide.tex' and `modguide.tex' in the base LaTeX distribution for suggestions.
    +DEFINITIONS 
    +=========== 
    +In this license document the following terms are used:
    +`Work' Any work being distributed under this License. `Derived Work' Any work that under any applicable law is derived from the Work.
    +`Modification' Any procedure that produces a Derived Work under any applicable law -- for example, the production of a file containing an original file associated with the Work or a significant portion of such a file, either verbatim or with modifications and/or translated into another language.
    +`Modify' To apply any procedure that produces a Derived Work under any applicable law. `Distribution' Making copies of the Work available from one person to another, in whole or in part. Distribution includes (but is not limited to) making any electronic components of the Work accessible by file transfer protocols such as FTP or HTTP or by shared file systems such as Sun's Network File System (NFS).
    +`Compiled Work' A version of the Work that has been processed into a form where it is directly usable on a computer system. This processing may include using installation facilities provided by the Work, transformations of the Work, copying of components of the Work, or other activities. Note that modification of any installation facilities provided by the Work constitutes modification of the Work.
    +`Current Maintainer' A person or persons nominated as such within the Work. If there is no such explicit nomination then it is the `Copyright Holder' under any applicable law.
    +`Base Interpreter' A program or process that is normally needed for running or interpreting a part or the whole of the Work.
    +A Base Interpreter may depend on external components but these are not considered part of the Base Interpreter provided that each external component clearly identifies itself whenever it is used interactively. Unless explicitly specified when applying the license to the Work, the only applicable Base Interpreter is a `LaTeX-Format' or in the case of files belonging to the `LaTeX-format' a program implementing the `TeX language'.
    +CONDITIONS ON DISTRIBUTION AND MODIFICATION 
    +=========================================== 
    +	1. Activities other than distribution and/or modification of the Work are not covered by this license; they are outside its scope. In particular, the act of running the Work is not restricted and no requirements are made concerning any offers of support for the Work. 
    +	2. You may distribute a complete, unmodified copy of the Work as you received it. Distribution of only part of the Work is considered modification of the Work, and no right to distribute such a Derived Work may be assumed under the terms of this clause. 
    +	3. You may distribute a Compiled Work that has been generated from a complete, unmodified copy of the Work as distributed under Clause 2 above, as long as that Compiled Work is distributed in such a way that the recipients may install the Compiled Work on their system exactly as it would have been installed if they generated a Compiled Work directly from the Work. 
    +	4. If you are the Current Maintainer of the Work, you may, without restriction, modify the Work, thus creating a Derived Work. You may also distribute the Derived Work without restriction, including Compiled Works generated from the Derived Work. Derived Works distributed in this manner by the Current Maintainer are considered to be updated versions of the Work. 
    +	5. If you are not the Current Maintainer of the Work, you may modify your copy of the Work, thus creating a Derived Work based on the Work, and compile this Derived Work, thus creating a Compiled Work based on the Derived Work. 
    +	6. If you are not the Current Maintainer of the Work, you may distribute a Derived Work provided the following conditions are met for every component of the Work unless that component clearly states in the copyright notice that it is exempt from that condition. Only the Current Maintainer is allowed to add such statements of exemption to a component of the Work. 
    +	a. If a component of this Derived Work can be a direct replacement for a component of the Work when that component is used with the Base Interpreter, then, wherever this component of the Work identifies itself to the user when used interactively with that Base Interpreter, the replacement component of this Derived Work clearly and unambiguously identifies itself as a modified version of this component to the user when used interactively with that Base Interpreter. 
    +	b. Every component of the Derived Work contains prominent notices detailing the nature of the changes to that component, or a prominent reference to another file that is distributed as part of the Derived Work and that contains a complete and accurate log of the changes. 
    +	c. No information in the Derived Work implies that any persons, including (but not limited to) the authors of the original version of the Work, provide any support, including (but not limited to) the reporting and handling of errors, to recipients of the Derived Work unless those persons have stated explicitly that they do provide such support for the Derived Work. 
    +	d. You distribute at least one of the following with the Derived Work: 
    +	1. A complete, unmodified copy of the Work; if your distribution of a modified component is made by offering access to copy the modified component from a designated place, then offering equivalent access to copy the Work from the same or some similar place meets this condition, even though third parties are not compelled to copy the Work along with the modified component; 
    +	2. Information that is sufficient to obtain a complete, unmodified copy of the Work. 
    +	7. If you are not the Current Maintainer of the Work, you may distribute a Compiled Work generated from a Derived Work, as long as the Derived Work is distributed to all recipients of the Compiled Work, and as long as the conditions of Clause 6, above, are met with regard to the Derived Work. 
    +	8. The conditions above are not intended to prohibit, and hence do not apply to, the modification, by any method, of any component so that it becomes identical to an updated version of that component of the Work as it is distributed by the Current Maintainer under Clause 4, above. 
    +	9. Distribution of the Work or any Derived Work in an alternative format, where the Work or that Derived Work (in whole or in part) is then produced by applying some process to that format, does not relax or nullify any sections of this license as they pertain to the results of applying that process. 
    +	10. 
    +	a. A Derived Work may be distributed under a different license provided that license itself honors the conditions listed in Clause 6 above, in regard to the Work, though it does not have to honor the rest of the conditions in this license. 
    +	b. If a Derived Work is distributed under a different license, that Derived Work must provide sufficient documentation as part of itself to allow each recipient of that Derived Work to honor the restrictions in Clause 6 above, concerning changes from the Work. 
    +	11. This license places no restrictions on works that are unrelated to the Work, nor does this license place any restrictions on aggregating such works with the Work by any means. 
    +	12. Nothing in this license is intended to, or may be used to, prevent complete compliance by all parties with all applicable laws. 
    +NO WARRANTY 
    +=========== 
    +There is no warranty for the Work. Except when otherwise stated in writing, the Copyright Holder provides the Work `as is', without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the Work is with you. Should the Work prove defective, you assume the cost of all necessary servicing, repair, or correction.
    +In no event unless required by applicable law or agreed to in writing will The Copyright Holder, or any author named in the components of the Work, or any other party who may distribute and/or modify the Work as permitted above, be liable to you for damages, including any general, special, incidental or consequential damages arising out of any use of the Work or out of inability to use the Work (including, but not limited to, loss of data, data being rendered inaccurate, or losses sustained by anyone as a result of any failure of the Work to operate with any other programs), even if the Copyright Holder or said author or said other party has been advised of the possibility of such damages.
    +MAINTENANCE OF THE WORK 
    +======================= 
    +The Work has the status `author-maintained' if the Copyright Holder explicitly and prominently states near the primary copyright notice in the Work that the Work can only be maintained by the Copyright Holder or simply that it is `author-maintained'.
    +The Work has the status `maintained' if there is a Current Maintainer who has indicated in the Work that they are willing to receive error reports for the Work (for example, by supplying a valid e-mail address). It is not required for the Current Maintainer to acknowledge or act upon these error reports.
    +The Work changes from status `maintained' to `unmaintained' if there is no Current Maintainer, or the person stated to be Current Maintainer of the work cannot be reached through the indicated means of communication for a period of six months, and there are no other significant signs of active maintenance.
    +You can become the Current Maintainer of the Work by agreement with any existing Current Maintainer to take over this role.
    +If the Work is unmaintained, you can become the Current Maintainer of the Work through the following steps:
    +	1. Make a reasonable attempt to trace the Current Maintainer (and the Copyright Holder, if the two differ) through the means of an Internet or similar search. 
    +	2. If this search is successful, then enquire whether the Work is still maintained. 
    +	a. If it is being maintained, then ask the Current Maintainer to update their communication data within one month. 
    +	b. If the search is unsuccessful or no action to resume active maintenance is taken by the Current Maintainer, then announce within the pertinent community your intention to take over maintenance. (If the Work is a LaTeX work, this could be done, for example, by posting to comp.text.tex.) 
    +	3a. If the Current Maintainer is reachable and agrees to pass maintenance of the Work to you, then this takes effect immediately upon announcement. 
    +	b. If the Current Maintainer is not reachable and the Copyright Holder agrees that maintenance of the Work be passed to you, then this takes effect immediately upon announcement. 
    +	4. If you make an `intention announcement' as described in 2b. above and after three months your intention is challenged neither by the Current Maintainer nor by the Copyright Holder nor by other people, then you may arrange for the Work to be changed so as to name you as the (new) Current Maintainer. 
    +	5. If the previously unreachable Current Maintainer becomes reachable once more within three months of a change completed under the terms of 3b) or 4), then that Current Maintainer must become or remain the Current Maintainer upon request provided they then update their communication data within one month. 
    +A change in the Current Maintainer does not, of itself, alter the fact that the Work is distributed under the LPPL license.
    +If you become the Current Maintainer of the Work, you should immediately provide, within the Work, a prominent and unambiguous statement of your status as Current Maintainer. You should also announce your new status to the same pertinent community as in 2b) above.
    +WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE 
    +====================================================== 
    +This section contains important instructions, examples, and recommendations for authors who are considering distributing their works under this license. These authors are addressed as `you' in this section.
    +Choosing This License or Another License 
    +---------------------------------------- 
    +If for any part of your work you want or need to use *distribution* conditions that differ significantly from those in this license, then do not refer to this license anywhere in your work but, instead, distribute your work under a different license. You may use the text of this license as a model for your own license, but your license should not refer to the LPPL or otherwise give the impression that your work is distributed under the LPPL.
    +The document `modguide.tex' in the base LaTeX distribution explains the motivation behind the conditions of this license. It explains, for example, why distributing LaTeX under the GNU General Public License (GPL) was considered inappropriate. Even if your work is unrelated to LaTeX, the discussion in `modguide.tex' may still be relevant, and authors intending to distribute their works under any license are encouraged to read it.
    +A Recommendation on Modification Without Distribution 
    +----------------------------------------------------- 
    +It is wise never to modify a component of the Work, even for your own personal use, without also meeting the above conditions for distributing the modified component. While you might intend that such modifications will never be distributed, often this will happen by accident -- you may forget that you have modified that component; or it may not occur to you when allowing others to access the modified version that you are thus distributing it and violating the conditions of this license in ways that could have legal implications and, worse, cause problems for the community. It is therefore usually in your best interest to keep your copy of the Work identical with the public one. Many works provide ways to control the behavior of that work without altering any of its licensed components.
    +How to Use This License 
    +----------------------- 
    +To use this license, place in each of the components of your work both an explicit copyright notice including your name and the year the work was authored and/or last substantially modified. Include also a statement that the distribution and/or modification of that component is constrained by the conditions in this license.
    +Here is an example of such a notice and statement:
    + pig.dtx 
    + Copyright 2005 M. Y. Name 
    + 
    + This work may be distributed and/or modified under the 
    + conditions of the LaTeX Project Public License, either version 1.3 
    + of this license or (at your option) any later version. 
    + The latest version of this license is in 
    + http://www.latex-project.org/lppl.txt 
    + and version 1.3 or later is part of all distributions of LaTeX 
    + version 2005/12/01 or later. 
    + 
    + This work has the LPPL maintenance status " maintained". 
    + 
    + The Current Maintainer of this work is M. Y. Name. 
    + 
    + This work consists of the files pig.dtx and pig.ins 
    + and the derived file pig.sty. 
    +Given such a notice and statement in a file, the conditions given in this license document would apply, with the `Work' referring to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being generated from `pig.dtx' using `pig.ins'), the `Base Interpreter' referring to any `LaTeX-Format', and both `Copyright Holder' and `Current Maintainer' referring to the person `M. Y. Name'.
    +If you do not want the Maintenance section of LPPL to apply to your Work, change `maintained' above into `author-maintained'. However, we recommend that you use `maintained', as the Maintenance section was added in order to ensure that your Work remains useful to the community even when you can no longer maintain and support it yourself.
    +Derived Works That Are Not Replacements 
    +--------------------------------------- 
    +Several clauses of the LPPL specify means to provide reliability and stability for the user community. They therefore concern themselves with the case that a Derived Work is intended to be used as a (compatible or incompatible) replacement of the original Work. If this is not the case (e.g., if a few lines of code are reused for a completely different task), then clauses 6b and 6d shall not apply.
    +Important Recommendations 
    +------------------------- 
    +Defining What Constitutes the Work
    +The LPPL requires that distributions of the Work contain all the files of the Work. It is therefore important that you provide a way for the licensee to determine which files constitute the Work. This could, for example, be achieved by explicitly listing all the files of the Work near the copyright notice of each file or by using a line such as:
    + This work consists of all files listed in manifest.txt.
    +in that place. In the absence of an unequivocal list it might be impossible for the licensee to determine what is considered by you to comprise the Work and, in such a case, the licensee would be entitled to make reasonable conjectures as to which files comprise the Work.
    +
    +
    +
    +--------------- SECTION 23: Open Software License 1.1 -----------
    +
    +
    +The Open Software License v. 1.1
    +This Open Software License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work:
    +Licensed under the Open Software License version 1.1
    +	1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, non-sublicenseable license to do the following: 
    +	a) to reproduce the Original Work in copies; 
    +	b) to prepare derivative works ("Derivative Works") based upon the Original Work; 
    +	c) to distribute copies of the Original Work and Derivative Works to the public, with the proviso that copies of Original Work or Derivative Works that You distribute shall be licensed under the Open Software License; 
    +	d) to perform the Original Work publicly; and 
    +	e) to display the Original Work publicly. 
    +	2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, non-sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor ("Licensed Claims") to make, use, sell and offer for sale the Original Work. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, non-sublicenseable license under the Licensed Claims to make, use, sell and offer for sale Derivative Works. 
    +	3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work. 
    +	4) Exclusions From License Grant. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the Licensed Claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license. 
    +	5) External Deployment. The term "External Deployment" means the use or distribution of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether the Original Work or Derivative Works are distributed to those persons or made available as an application intended for use over a computer network. As an express condition for the grants of license hereunder, You agree that any External Deployment by You of a Derivative Work shall be deemed a distribution and shall be licensed to all under the terms of this License, as prescribed in section 1(c) herein. 
    +	6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. 
    +	7) Warranty and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work is owned by the Licensor or that the Original Work is distributed by Licensor under a valid current license from the copyright owner. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer. 
    +	8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. 
    +	9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express and volitional assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Sections 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Sections 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. This License shall terminate immediately and you may no longer exercise any of the rights granted to You by this License upon Your failure to honor the proviso in Section 1(c) herein. 
    +	10) Mutual Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License if You file a lawsuit in any court alleging that any OSI Certified open source software that is licensed under any license containing this "Mutual Termination for Patent Action" clause infringes any patent claims that are essential to use that software. 
    +	11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. å¤ 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License. 
    +	12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. 
    +	13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. 
    +	14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. 
    +	15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. 
    +This license is Copyright (C) 2002 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner.
    +
    +
    +
    +--------------- SECTION 24: Creative Commons Attribution Share Alike 2.0 Generic -----------
    +
    +
    +Creative Commons Attribution-ShareAlike 2.0
    +CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
    +License
    +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
    +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
    +	1. Definitions 
    +	a. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License. 
    +	b. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License. 
    +	c. "Licensor" means the individual or entity that offers the Work under the terms of this License. 
    +	d. "Original Author" means the individual or entity who created the Work. 
    +	e. "Work" means the copyrightable work of authorship offered under the terms of this License. 
    +	f. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. 
    +	g. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. 
    +	2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. 
    +	3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: 
    +	a. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works; 
    +	b. to create and reproduce Derivative Works; 
    +	c. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works; 
    +	d. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works. 
    +	e. For the avoidance of doubt, where the work is a musical composition: 
    +	i. Performance Royalties Under Blanket Licenses. Licensor waives the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work. 
    +	ii. Mechanical Rights and Statutory Royalties. Licensor waives the exclusive right to collect, whether individually or via a music rights society or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions). 
    +	f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor waives the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions). 
    +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved.
    +	4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: 
    +	a. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any reference to such Licensor or the Original Author, as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any reference to such Licensor or the Original Author, as requested. 
    +	b. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-ShareAlike 2.0 Japan). You must include a copy of, or the Uniform Resource Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License. 
    +	c. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and give the Original Author credit reasonable to the medium or means You are utilizing by conveying the name (or pseudonym if applicable) of the Original Author if supplied; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit. 
    +	5. Representations, Warranties and Disclaimer 
    +UNLESS OTHERWISE AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE MATERIALS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
    +	6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 
    +	7. Termination 
    +	a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. 
    +	b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 
    +	8. Miscellaneous 
    +	a. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. 
    +	b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. 
    +	c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. 
    +	d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. 
    +	e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. 
    +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
    +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time.
    +Creative Commons may be contacted at http://creativecommons.org/.
    +
    +
    +
    +--------------- SECTION 25:  LDP GENERAL PUBLIC LICENSE v1 -----------
    +
    +
    +  LDP GENERAL PUBLIC LICENSE
    +                   Version 1, September 1998
    +
    +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any document which contains a notice
    +placed by the copyright holder saying it may be distributed
    +under the terms of this LDP General Public License.
    +The "Document" below refers to any such document, and
    +"work based on the Document" means either the Document
    +or any derivative work under copyright law: that is to say,
    +a work containing the Document or part of it, either verbatim
    +or with modifications and/or translated into another language.
    +(Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.
    +
    +  1. You may copy and distribute verbatim copies of the Document's
    +source code as you receive it, in any medium, provided that you
    +appropriately publish on each copy an appropriate copyright notice
    +and disclaimer of warranty; keep intact all the notices that refer
    +to this License and to the absence of any warranty; and give any
    +other recipients of the Document a copy of this License along with
    +the Document.
    +
    +You may charge a fee for the physical act of producing or transferring
    +a copy.
    +
    +  2. You may modify your copy or copies of the Document or any portion
    +of it, thus forming a work based on the Document, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Document or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) You must not add notes to the Document implying that the
    +    reader had better read something produced using Texinfo.
    +
    +  3. You may copy and distribute the Document (or a work based on it,
    +under Section 2) in any form under the terms of Sections 1 and 2 above
    +provided that you also either accompany it with the complete corresponding
    +machine-readable source code, or provide an URL, valid for at least
    +three months, where this complete corresponding machine-readable source code
    +is available, and can be retrieved by any anonymous user.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Document
    +except as expressly provided under this License.
    +
    +  5. Each time you redistribute the Document (or any work based on the
    +Document), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Document subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +
    +
    +
    +======================================================================
    +
    +To the extent any open source components are licensed under the GPL
    +and/or LGPL, or other similar licenses that require the source code
    +and/or modifications to source code to be made available (as would be
    +noted above), you may obtain a copy of the source code corresponding to
    +the binaries for such open source components and modifications thereto,
    +if any, (the "Source Files"), by downloading the Source Files from
    +VMware's github site, or by sending a request, with your name and address to: 
    +VMware, Inc., 3401 Hillview Avenue, Palo Alto, CA 94304, United States of America. 
    +All such requests should clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. 
    +VMware shall mail a copy of the Source Files to you on a CD or equivalent physical medium. 
    +This offer to obtain a copy of the Source Files is valid for three years from the date you acquired this Software product. 
    +
    +[VIC152GAMS030419]
    \ No newline at end of file
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/categories.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/categories.go
    new file mode 100644
    index 00000000000..8d5e6fd603a
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/categories.go
    @@ -0,0 +1,212 @@
    +// Copyright 2017 VMware, Inc. All Rights Reserved.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//    http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +package tags
    +
    +import (
    +	"context"
    +	"encoding/json"
    +	"fmt"
    +	"net/http"
    +	"strings"
    +
    +	"github.com/pkg/errors"
    +)
    +
    +const (
    +	CategoryURL      = "/com/vmware/cis/tagging/category"
    +	ErrAlreadyExists = "already_exists"
    +)
    +
    +type CategoryCreateSpec struct {
    +	CreateSpec CategoryCreate `json:"create_spec"`
    +}
    +
    +type CategoryUpdateSpec struct {
    +	UpdateSpec CategoryUpdate `json:"update_spec"`
    +}
    +
    +type CategoryCreate struct {
    +	AssociableTypes []string `json:"associable_types"`
    +	Cardinality     string   `json:"cardinality"`
    +	Description     string   `json:"description"`
    +	Name            string   `json:"name"`
    +}
    +
    +type CategoryUpdate struct {
    +	AssociableTypes []string `json:"associable_types"`
    +	Cardinality     string   `json:"cardinality"`
    +	Description     string   `json:"description"`
    +	Name            string   `json:"name"`
    +}
    +
    +type Category struct {
    +	ID              string   `json:"id"`
    +	Description     string   `json:"description"`
    +	Name            string   `json:"name"`
    +	Cardinality     string   `json:"cardinality"`
    +	AssociableTypes []string `json:"associable_types"`
    +	UsedBy          []string `json:"used_by"`
    +}
    +
    +func (c *RestClient) CreateCategoryIfNotExist(ctx context.Context, name string, description string, categoryType string, multiValue bool) (*string, error) {
    +	categories, err := c.GetCategoriesByName(ctx, name)
    +	if err != nil {
    +		return nil, errors.Wrapf(err, "failed to query category for %s", name)
    +	}
    +
    +	if categories == nil {
    +		var multiValueStr string
    +		if multiValue {
    +			multiValueStr = "MULTIPLE"
    +		} else {
    +			multiValueStr = "SINGLE"
    +		}
    +		categoryCreate := CategoryCreate{[]string{categoryType}, multiValueStr, description, name}
    +		spec := CategoryCreateSpec{categoryCreate}
    +		id, err := c.CreateCategory(ctx, &spec)
    +		if err != nil {
    +			// in case there are two docker daemon try to create inventory category, query the category once again
    +			if strings.Contains(err.Error(), "ErrAlreadyExists") {
    +				if categories, err = c.GetCategoriesByName(ctx, name); err != nil {
    +					Logger.Debugf("Failed to get inventory category for %s", errors.WithStack(err))
    +					return nil, errors.Wrap(err, "create inventory category failed")
    +				}
    +			} else {
    +				Logger.Debugf("Failed to create inventory category for %s", errors.WithStack(err))
    +				return nil, errors.Wrap(err, "create inventory category failed")
    +			}
    +		} else {
    +			return id, nil
    +		}
    +	}
    +	if categories != nil {
    +		return &categories[0].ID, nil
    +	}
    +	// should not happen
    +	Logger.Debugf("Failed to create inventory for it's existed, but could not query back. Please check system")
    +	return nil, errors.Errorf("Failed to create inventory for it's existed, but could not query back. Please check system")
    +}
    +
    +func (c *RestClient) CreateCategory(ctx context.Context, spec *CategoryCreateSpec) (*string, error) {
    +	Logger.Debugf("Create category %v", spec)
    +	stream, _, status, err := c.call(ctx, "POST", CategoryURL, spec, nil)
    +
    +	Logger.Debugf("Get status code: %d", status)
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Create category failed with status code: %d, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "Status code: %d", status)
    +	}
    +
    +	type RespValue struct {
    +		Value string
    +	}
    +
    +	var pID RespValue
    +	if err := json.NewDecoder(stream).Decode(&pID); err != nil {
    +		Logger.Debugf("Decode response body failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrap(err, "create category failed")
    +	}
    +	return &(pID.Value), nil
    +}
    +
    +func (c *RestClient) GetCategory(ctx context.Context, id string) (*Category, error) {
    +	Logger.Debugf("Get category %s", id)
    +
    +	stream, _, status, err := c.call(ctx, "GET", fmt.Sprintf("%s/id:%s", CategoryURL, id), nil, nil)
    +
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Get category failed with status code: %s, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Errorf("Status code: %d, error: %s", status, err)
    +	}
    +
    +	type RespValue struct {
    +		Value Category
    +	}
    +
    +	var pCategory RespValue
    +	if err := json.NewDecoder(stream).Decode(&pCategory); err != nil {
    +		Logger.Debugf("Decode response body failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "get category %s failed", id)
    +	}
    +	return &(pCategory.Value), nil
    +}
    +
    +func (c *RestClient) UpdateCategory(ctx context.Context, id string, spec *CategoryUpdateSpec) error {
    +	Logger.Debugf("Update category %v", spec)
    +	_, _, status, err := c.call(ctx, "PATCH", fmt.Sprintf("%s/id:%s", CategoryURL, id), spec, nil)
    +
    +	Logger.Debugf("Get status code: %d", status)
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Update category failed with status code: %d, error message: %s", status, errors.WithStack(err))
    +		return errors.Wrapf(err, "Status code: %d", status)
    +	}
    +
    +	return nil
    +}
    +
    +func (c *RestClient) DeleteCategory(ctx context.Context, id string) error {
    +	Logger.Debugf("Delete category %s", id)
    +
    +	_, _, status, err := c.call(ctx, "DELETE", fmt.Sprintf("%s/id:%s", CategoryURL, id), nil, nil)
    +
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Delete category failed with status code: %s, error message: %s", status, errors.WithStack(err))
    +		return errors.Errorf("Status code: %d, error: %s", status, err)
    +	}
    +	return nil
    +}
    +
    +func (c *RestClient) ListCategories(ctx context.Context) ([]string, error) {
    +	Logger.Debugf("List all categories")
    +
    +	stream, _, status, err := c.call(ctx, "GET", CategoryURL, nil, nil)
    +
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Get categories failed with status code: %s, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Errorf("Status code: %d, error: %s", status, err)
    +	}
    +
    +	type Categories struct {
    +		Value []string
    +	}
    +
    +	var pCategories Categories
    +	if err := json.NewDecoder(stream).Decode(&pCategories); err != nil {
    +		Logger.Debugf("Decode response body failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrap(err, "list categories failed")
    +	}
    +	return pCategories.Value, nil
    +}
    +
    +func (c *RestClient) GetCategoriesByName(ctx context.Context, name string) ([]Category, error) {
    +	Logger.Debugf("Get category %s", name)
    +	categoryIds, err := c.ListCategories(ctx)
    +	if err != nil {
    +		Logger.Debugf("Get category failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "get categories by name %s failed", name)
    +	}
    +
    +	var categories []Category
    +	for _, cID := range categoryIds {
    +		category, err := c.GetCategory(ctx, cID)
    +		if err != nil {
    +			Logger.Debugf("Get category %s failed for %s", cID, errors.WithStack(err))
    +		}
    +		if category.Name == name {
    +			categories = append(categories, *category)
    +		}
    +	}
    +	return categories, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/rest_client.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/rest_client.go
    new file mode 100644
    index 00000000000..d2fd972d6ae
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/rest_client.go
    @@ -0,0 +1,278 @@
    +// Copyright 2017 VMware, Inc. All Rights Reserved.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//    http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +package tags
    +
    +import (
    +	"bytes"
    +	"context"
    +	"encoding/json"
    +	"io"
    +	"io/ioutil"
    +	"net/http"
    +	"net/url"
    +	"strings"
    +	"sync"
    +
    +	"github.com/pkg/errors"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +)
    +
    +const (
    +	RestPrefix          = "/rest"
    +	loginURL            = "/com/vmware/cis/session"
    +	sessionIDCookieName = "vmware-api-session-id"
    +)
    +
    +type RestClient struct {
    +	mu       sync.Mutex
    +	host     string
    +	scheme   string
    +	endpoint *url.URL
    +	user     *url.Userinfo
    +	HTTP     *http.Client
    +	cookies  []*http.Cookie
    +}
    +
    +func NewClient(u *url.URL, insecure bool, thumbprint string) *RestClient {
    +	endpoint := &url.URL{}
    +	*endpoint = *u
    +	Logger.Debugf("Create rest client")
    +	endpoint.Path = RestPrefix
    +
    +	sc := soap.NewClient(endpoint, insecure)
    +	if thumbprint != "" {
    +		sc.SetThumbprint(endpoint.Host, thumbprint)
    +	}
    +
    +	user := endpoint.User
    +	endpoint.User = nil
    +
    +	return &RestClient{
    +		endpoint: endpoint,
    +		user:     user,
    +		host:     endpoint.Host,
    +		scheme:   endpoint.Scheme,
    +		HTTP:     &sc.Client,
    +	}
    +}
    +
    +// NewClientWithSessionID creates a new REST client with a supplied session ID
    +// to re-connect to existing sessions.
    +//
    +// Note that the session is not checked for validity - to check for a valid
    +// session after creating the client, use the Valid method. If the session is
    +// no longer valid and the session needs to be re-saved, Login should be called
    +// again before calling SessionID to extract the new session ID. Clients
    +// created with this function function work in the exact same way as clients
    +// created with NewClient, including supporting re-login on invalid sessions on
    +// all SDK calls.
    +func NewClientWithSessionID(u *url.URL, insecure bool, thumbprint string, sessionID string) *RestClient {
    +	c := NewClient(u, insecure, thumbprint)
    +	c.setSessionID(sessionID)
    +
    +	return c
    +}
    +
    +func (c *RestClient) encodeData(data interface{}) (*bytes.Buffer, error) {
    +	params := bytes.NewBuffer(nil)
    +	if data != nil {
    +		if err := json.NewEncoder(params).Encode(data); err != nil {
    +			return nil, errors.Wrap(err, "failed to encode json data")
    +		}
    +	}
    +	return params, nil
    +}
    +
    +func (c *RestClient) call(ctx context.Context, method, path string, data interface{}, headers map[string][]string) (io.ReadCloser, http.Header, int, error) {
    +	//	Logger.Debugf("%s: %s, headers: %+v", method, path, headers)
    +	params, err := c.encodeData(data)
    +	if err != nil {
    +		return nil, nil, -1, errors.Wrap(err, "call failed")
    +	}
    +
    +	if data != nil {
    +		if headers == nil {
    +			headers = make(map[string][]string)
    +		}
    +		headers["Content-Type"] = []string{"application/json"}
    +	}
    +
    +	body, hdr, statusCode, err := c.clientRequest(ctx, method, path, params, headers)
    +	if statusCode == http.StatusUnauthorized && strings.Contains(err.Error(), "This method requires authentication") {
    +		c.Login(ctx)
    +		Logger.Debugf("Rerun request after login")
    +		return c.clientRequest(ctx, method, path, params, headers)
    +	}
    +
    +	return body, hdr, statusCode, errors.Wrap(err, "call failed")
    +}
    +
    +func (c *RestClient) clientRequest(ctx context.Context, method, path string, in io.Reader, headers map[string][]string) (io.ReadCloser, http.Header, int, error) {
    +	expectedPayload := (method == "POST" || method == "PUT")
    +	if expectedPayload && in == nil {
    +		in = bytes.NewReader([]byte{})
    +	}
    +
    +	req, err := c.newRequest(method, path, in)
    +	if err != nil {
    +		return nil, nil, -1, errors.Wrap(err, "failed to create request")
    +	}
    +
    +	req = req.WithContext(ctx)
    +	c.mu.Lock()
    +	if c.cookies != nil {
    +		req.AddCookie(c.cookies[0])
    +	}
    +	c.mu.Unlock()
    +
    +	if headers != nil {
    +		for k, v := range headers {
    +			req.Header[k] = v
    +		}
    +	}
    +
    +	if expectedPayload && req.Header.Get("Content-Type") == "" {
    +		req.Header.Set("Content-Type", "application/json")
    +	}
    +	req.Header.Set("Accept", "application/json")
    +
    +	resp, err := c.HTTP.Do(req)
    +	return c.handleResponse(resp, err)
    +}
    +
    +func (c *RestClient) handleResponse(resp *http.Response, err error) (io.ReadCloser, http.Header, int, error) {
    +	statusCode := -1
    +	if resp != nil {
    +		statusCode = resp.StatusCode
    +	}
    +	if err != nil {
    +		if strings.Contains(err.Error(), "connection refused") {
    +			return nil, nil, statusCode, errors.Errorf("Cannot connect to endpoint %s. Is vCloud Suite API running on this server?", c.host)
    +		}
    +		return nil, nil, statusCode, errors.Wrap(err, "error occurred trying to connect")
    +	}
    +
    +	if statusCode < http.StatusOK || statusCode >= http.StatusBadRequest {
    +		body, err := ioutil.ReadAll(resp.Body)
    +		resp.Body.Close()
    +		if err != nil {
    +			return nil, nil, statusCode, errors.Wrap(err, "error reading response")
    +		}
    +		if len(body) == 0 {
    +			return nil, nil, statusCode, errors.Errorf("Error: request returned %s", http.StatusText(statusCode))
    +		}
    +		Logger.Debugf("Error response: %s", bytes.TrimSpace(body))
    +		return nil, nil, statusCode, errors.Errorf("Error response from vCloud Suite API: %s", bytes.TrimSpace(body))
    +	}
    +
    +	return resp.Body, resp.Header, statusCode, nil
    +}
    +
    +func (c *RestClient) Login(ctx context.Context) error {
    +	c.mu.Lock()
    +	defer c.mu.Unlock()
    +
    +	Logger.Debugf("Login to %s through rest API.", c.host)
    +
    +	request, err := c.newRequest("POST", loginURL, nil)
    +	if err != nil {
    +		return errors.Wrap(err, "login failed")
    +	}
    +	if c.user != nil {
    +		password, _ := c.user.Password()
    +		request.SetBasicAuth(c.user.Username(), password)
    +	}
    +	resp, err := c.HTTP.Do(request)
    +	if err != nil {
    +		return errors.Wrap(err, "login failed")
    +	}
    +	if resp == nil {
    +		return errors.New("response is nil in Login")
    +	}
    +	if resp.StatusCode != http.StatusOK {
    +		// #nosec: Errors unhandled.
    +		body, _ := ioutil.ReadAll(resp.Body)
    +		resp.Body.Close()
    +		return errors.Errorf("Login failed: body: %s, status: %s", bytes.TrimSpace(body), resp.Status)
    +	}
    +
    +	c.cookies = resp.Cookies()
    +
    +	Logger.Debugf("Login succeeded")
    +	return nil
    +}
    +
    +func (c *RestClient) newRequest(method, urlStr string, body io.Reader) (*http.Request, error) {
    +	return http.NewRequest(method, c.endpoint.String()+urlStr, body)
    +}
    +
    +// SessionID returns the current session ID of the REST client. An empty string
    +// means there was no session cookie currently loaded.
    +func (c *RestClient) SessionID() string {
    +	for _, cookie := range c.cookies {
    +		if cookie.Name == sessionIDCookieName {
    +			return cookie.Value
    +		}
    +	}
    +	return ""
    +}
    +
    +// setSessionID sets the session cookie with the supplied session ID.
    +//
    +// This does not necessarily mean the session is valid. The session should be
    +// checked with Valid before proceeding, and logged back in if it has expired.
    +//
    +// This function will overwrite any existing session.
    +func (c *RestClient) setSessionID(sessionID string) {
    +	Logger.Debugf("Setting existing session ID %q", sessionID)
    +	idx := -1
    +	for i, cookie := range c.cookies {
    +		if cookie.Name == sessionIDCookieName {
    +			idx = i
    +		}
    +	}
    +	sessionCookie := &http.Cookie{
    +		Name:  sessionIDCookieName,
    +		Value: sessionID,
    +		Path:  RestPrefix,
    +	}
    +	if idx > -1 {
    +		c.cookies[idx] = sessionCookie
    +	} else {
    +		c.cookies = append(c.cookies, sessionCookie)
    +	}
    +}
    +
    +// Valid checks to see if the session cookies in a REST client are still valid.
    +// This should be used when restoring a session to determine if a new login is
    +// necessary.
    +func (c *RestClient) Valid(ctx context.Context) bool {
    +	sessionID := c.SessionID()
    +	Logger.Debugf("Checking if session ID %q is still valid", sessionID)
    +
    +	_, _, statusCode, err := c.clientRequest(ctx, "POST", loginURL+"?~action=get", nil, nil)
    +	if err != nil {
    +		Logger.Debugf("Error getting current session information for ID %q - session is invalid (%d - %s)", sessionID, statusCode, err)
    +	}
    +
    +	if statusCode == http.StatusOK {
    +		Logger.Debugf("Session ID %q is valid", sessionID)
    +		return true
    +	}
    +
    +	Logger.Debugf("Session is invalid for %v (%d)", sessionID, statusCode)
    +	return false
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/tag_association.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/tag_association.go
    new file mode 100644
    index 00000000000..4eb0cd50b06
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/tag_association.go
    @@ -0,0 +1,135 @@
    +// Copyright 2017 VMware, Inc. All Rights Reserved.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//    http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +package tags
    +
    +import (
    +	"context"
    +	"encoding/json"
    +	"fmt"
    +	"net/http"
    +
    +	"github.com/pkg/errors"
    +)
    +
    +const (
    +	TagAssociationURL = "/com/vmware/cis/tagging/tag-association"
    +)
    +
    +type AssociatedObject struct {
    +	ID   *string `json:"id"`
    +	Type *string `json:"type"`
    +}
    +
    +type TagAssociationSpec struct {
    +	ObjectID *AssociatedObject `json:"object_id,omitempty"`
    +	TagID    *string           `json:"tag_id,omitempty"`
    +}
    +
    +func (c *RestClient) getAssociatedObject(objID *string, objType *string) *AssociatedObject {
    +	if objID == nil && objType == nil {
    +		return nil
    +	}
    +	object := AssociatedObject{
    +		ID:   objID,
    +		Type: objType,
    +	}
    +	return &object
    +}
    +
    +func (c *RestClient) getAssociationSpec(tagID *string, objID *string, objType *string) *TagAssociationSpec {
    +	object := c.getAssociatedObject(objID, objType)
    +	spec := TagAssociationSpec{
    +		TagID:    tagID,
    +		ObjectID: object,
    +	}
    +	return &spec
    +}
    +
    +func (c *RestClient) AttachTagToObject(ctx context.Context, tagID string, objID string, objType string) error {
    +	Logger.Debugf("Attach Tag %s to object id: %s, type: %s", tagID, objID, objType)
    +
    +	spec := c.getAssociationSpec(&tagID, &objID, &objType)
    +	_, _, status, err := c.call(ctx, "POST", fmt.Sprintf("%s?~action=attach", TagAssociationURL), *spec, nil)
    +
    +	Logger.Debugf("Get status code: %d", status)
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Attach tag failed with status code: %d, error message: %s", status, errors.WithStack(err))
    +		return errors.Wrapf(err, "Get unexpected status code: %d", status)
    +	}
    +	return nil
    +}
    +
    +func (c *RestClient) DetachTagFromObject(ctx context.Context, tagID string, objID string, objType string) error {
    +	Logger.Debugf("Detach Tag %s to object id: %s, type: %s", tagID, objID, objType)
    +
    +	spec := c.getAssociationSpec(&tagID, &objID, &objType)
    +	_, _, status, err := c.call(ctx, "POST", fmt.Sprintf("%s?~action=detach", TagAssociationURL), *spec, nil)
    +
    +	Logger.Debugf("Get status code: %d", status)
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Detach tag failed with status code: %d, error message: %s", status, errors.WithStack(err))
    +		return errors.Wrapf(err, "Get unexpected status code: %d", status)
    +	}
    +	return nil
    +}
    +
    +func (c *RestClient) ListAttachedTags(ctx context.Context, objID string, objType string) ([]string, error) {
    +	Logger.Debugf("List attached tags of object id: %s, type: %s", objID, objType)
    +
    +	spec := c.getAssociationSpec(nil, &objID, &objType)
    +	stream, _, status, err := c.call(ctx, "POST", fmt.Sprintf("%s?~action=list-attached-tags", TagAssociationURL), *spec, nil)
    +
    +	Logger.Debugf("Get status code: %d", status)
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Detach tag failed with status code: %d, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "Get unexpected status code: %d", status)
    +	}
    +
    +	type RespValue struct {
    +		Value []string
    +	}
    +
    +	var pTag RespValue
    +	if err := json.NewDecoder(stream).Decode(&pTag); err != nil {
    +		Logger.Debugf("Decode response body failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrap(err, "list attached tags failed")
    +	}
    +	return pTag.Value, nil
    +}
    +
    +func (c *RestClient) ListAttachedObjects(ctx context.Context, tagID string) ([]AssociatedObject, error) {
    +	Logger.Debugf("List attached objects of tag: %s", tagID)
    +
    +	spec := c.getAssociationSpec(&tagID, nil, nil)
    +	Logger.Debugf("List attached objects for tag %v", *spec)
    +	//	stream, _, status, err := c.call("POST", fmt.Sprintf("%s?~action=list-attached-objects", TagAssociationURL), *spec, nil)
    +	stream, _, status, err := c.call(ctx, "POST", fmt.Sprintf("%s?~action=list-attached-objects", TagAssociationURL), *spec, nil)
    +	Logger.Debugf("Get status code: %d", status)
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("List object failed with status code: %d, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "Get unexpected status code: %d", status)
    +	}
    +
    +	type RespValue struct {
    +		Value []AssociatedObject
    +	}
    +
    +	var pTag RespValue
    +	if err := json.NewDecoder(stream).Decode(&pTag); err != nil {
    +		Logger.Debugf("Decode response body failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrap(err, "list attached tags failed")
    +	}
    +	return pTag.Value, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/tags.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/tags.go
    new file mode 100644
    index 00000000000..6e0c60fd9f0
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/hashicorp/vic/pkg/vsphere/tags/tags.go
    @@ -0,0 +1,255 @@
    +// Copyright 2017 VMware, Inc. All Rights Reserved.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//    http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +package tags
    +
    +import (
    +	"context"
    +	"encoding/json"
    +	"fmt"
    +	"io"
    +	"net/http"
    +	"regexp"
    +	"strings"
    +
    +	"github.com/sirupsen/logrus"
    +	"github.com/pkg/errors"
    +)
    +
    +const (
    +	TagURL = "/com/vmware/cis/tagging/tag"
    +)
    +
    +type TagCreateSpec struct {
    +	CreateSpec TagCreate `json:"create_spec"`
    +}
    +
    +type TagCreate struct {
    +	CategoryID  string `json:"category_id"`
    +	Description string `json:"description"`
    +	Name        string `json:"name"`
    +}
    +
    +type TagUpdateSpec struct {
    +	UpdateSpec TagUpdate `json:"update_spec"`
    +}
    +
    +type TagUpdate struct {
    +	Description string `json:"description"`
    +	Name        string `json:"name"`
    +}
    +
    +type Tag struct {
    +	ID          string   `json:"id"`
    +	Description string   `json:"description"`
    +	Name        string   `json:"name"`
    +	CategoryID  string   `json:"category_id"`
    +	UsedBy      []string `json:"used_by"`
    +}
    +
    +var Logger = logrus.New()
    +
    +func (c *RestClient) CreateTagIfNotExist(ctx context.Context, name string, description string, categoryID string) (*string, error) {
    +	tagCreate := TagCreate{categoryID, description, name}
    +	spec := TagCreateSpec{tagCreate}
    +	id, err := c.CreateTag(ctx, &spec)
    +	if err == nil {
    +		return id, nil
    +	}
    +	Logger.Debugf("Created tag %s failed for %s", errors.WithStack(err))
    +	// if already exists, query back
    +	if strings.Contains(err.Error(), ErrAlreadyExists) {
    +		tagObjs, err := c.GetTagByNameForCategory(ctx, name, categoryID)
    +		if err != nil {
    +			return nil, errors.Wrapf(err, "failed to query tag %s for category %s", name, categoryID)
    +		}
    +		if tagObjs != nil {
    +			return &tagObjs[0].ID, nil
    +		}
    +
    +		// should not happen
    +		return nil, errors.New("Failed to create tag for it's existed, but could not query back. Please check system")
    +	}
    +
    +	return nil, errors.Wrap(err, "failed to create tag")
    +}
    +
    +func (c *RestClient) DeleteTagIfNoObjectAttached(ctx context.Context, id string) error {
    +	objs, err := c.ListAttachedObjects(ctx, id)
    +	if err != nil {
    +		return errors.Wrap(err, "failed to delete tag")
    +	}
    +	if objs != nil && len(objs) > 0 {
    +		Logger.Debugf("tag %s related objects is not empty, do not delete it.", id)
    +		return nil
    +	}
    +	return c.DeleteTag(ctx, id)
    +}
    +
    +func (c *RestClient) CreateTag(ctx context.Context, spec *TagCreateSpec) (*string, error) {
    +	Logger.Debugf("Create Tag %v", spec)
    +	stream, _, status, err := c.call(ctx, "POST", TagURL, spec, nil)
    +
    +	Logger.Debugf("Get status code: %d", status)
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Create tag failed with status code: %d, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "Status code: %d", status)
    +	}
    +
    +	type RespValue struct {
    +		Value string
    +	}
    +
    +	var pID RespValue
    +	if err := json.NewDecoder(stream).Decode(&pID); err != nil {
    +		Logger.Debugf("Decode response body failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrap(err, "create tag failed")
    +	}
    +	return &pID.Value, nil
    +}
    +
    +func (c *RestClient) GetTag(ctx context.Context, id string) (*Tag, error) {
    +	Logger.Debugf("Get tag %s", id)
    +
    +	stream, _, status, err := c.call(ctx, "GET", fmt.Sprintf("%s/id:%s", TagURL, id), nil, nil)
    +
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Get tag failed with status code: %s, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "Status code: %d", status)
    +	}
    +
    +	type RespValue struct {
    +		Value Tag
    +	}
    +
    +	var pTag RespValue
    +	if err := json.NewDecoder(stream).Decode(&pTag); err != nil {
    +		Logger.Debugf("Decode response body failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "failed to get tag %s", id)
    +	}
    +	return &(pTag.Value), nil
    +}
    +
    +func (c *RestClient) UpdateTag(ctx context.Context, id string, spec *TagUpdateSpec) error {
    +	Logger.Debugf("Update tag %v", spec)
    +	_, _, status, err := c.call(ctx, "PATCH", fmt.Sprintf("%s/id:%s", TagURL, id), spec, nil)
    +
    +	Logger.Debugf("Get status code: %d", status)
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Update tag failed with status code: %d, error message: %s", status, errors.WithStack(err))
    +		return errors.Wrapf(err, "Status code: %d", status)
    +	}
    +
    +	return nil
    +}
    +
    +func (c *RestClient) DeleteTag(ctx context.Context, id string) error {
    +	Logger.Debugf("Delete tag %s", id)
    +
    +	_, _, status, err := c.call(ctx, "DELETE", fmt.Sprintf("%s/id:%s", TagURL, id), nil, nil)
    +
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Delete tag failed with status code: %s, error message: %s", status, errors.WithStack(err))
    +		return errors.Wrapf(err, "Status code: %d", status)
    +	}
    +	return nil
    +}
    +
    +func (c *RestClient) ListTags(ctx context.Context) ([]string, error) {
    +	Logger.Debugf("List all tags")
    +
    +	stream, _, status, err := c.call(ctx, "GET", TagURL, nil, nil)
    +
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("Get tags failed with status code: %s, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "Status code: %d", status)
    +	}
    +
    +	return c.handleTagIDList(stream)
    +}
    +
    +func (c *RestClient) ListTagsForCategory(ctx context.Context, id string) ([]string, error) {
    +	Logger.Debugf("List tags for category: %s", id)
    +
    +	type PostCategory struct {
    +		CId string `json:"category_id"`
    +	}
    +	spec := PostCategory{id}
    +	stream, _, status, err := c.call(ctx, "POST", fmt.Sprintf("%s/id:%s?~action=list-tags-for-category", TagURL, id), spec, nil)
    +
    +	if status != http.StatusOK || err != nil {
    +		Logger.Debugf("List tags for category failed with status code: %s, error message: %s", status, errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "Status code: %d", status)
    +	}
    +
    +	return c.handleTagIDList(stream)
    +}
    +
    +func (c *RestClient) handleTagIDList(stream io.ReadCloser) ([]string, error) {
    +	type Tags struct {
    +		Value []string
    +	}
    +
    +	var pTags Tags
    +	if err := json.NewDecoder(stream).Decode(&pTags); err != nil {
    +		Logger.Debugf("Decode response body failed for: %s", errors.WithStack(err))
    +		return nil, errors.Wrap(err, "failed to decode json")
    +	}
    +	return pTags.Value, nil
    +}
    +
    +// Get tag through tag name and category id
    +func (c *RestClient) GetTagByNameForCategory(ctx context.Context, name string, id string) ([]Tag, error) {
    +	Logger.Debugf("Get tag %s for category %s", name, id)
    +	tagIds, err := c.ListTagsForCategory(ctx, id)
    +	if err != nil {
    +		Logger.Debugf("Get tag failed for %s", errors.WithStack(err))
    +		return nil, errors.Wrapf(err, "get tag failed for name %s category %s", name, id)
    +	}
    +
    +	var tags []Tag
    +	for _, tID := range tagIds {
    +		tag, err := c.GetTag(ctx, tID)
    +		if err != nil {
    +			Logger.Debugf("Get tag %s failed for %s", tID, errors.WithStack(err))
    +			return nil, errors.Wrapf(err, "get tag failed for name %s category %s", name, id)
    +		}
    +		if tag.Name == name {
    +			tags = append(tags, *tag)
    +		}
    +	}
    +	return tags, nil
    +}
    +
    +// Get attached tags through tag name pattern
    +func (c *RestClient) GetAttachedTagsByNamePattern(ctx context.Context, namePattern string, objID string, objType string) ([]Tag, error) {
    +	tagIds, err := c.ListAttachedTags(ctx, objID, objType)
    +	if err != nil {
    +		Logger.Debugf("Get attached tags failed for %s", errors.WithStack(err))
    +		return nil, errors.Wrap(err, "get attached tags failed")
    +	}
    +
    +	var validName = regexp.MustCompile(namePattern)
    +	var tags []Tag
    +	for _, tID := range tagIds {
    +		tag, err := c.GetTag(ctx, tID)
    +		if err != nil {
    +			Logger.Debugf("Get tag %s failed for %s", tID, errors.WithStack(err))
    +		}
    +		if validName.MatchString(tag.Name) {
    +			tags = append(tags, *tag)
    +		}
    +	}
    +	return tags, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/LICENSE
    new file mode 100644
    index 00000000000..835ba3e755c
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/LICENSE
    @@ -0,0 +1,23 @@
    +Copyright (c) 2015, Dave Cheney 
    +All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are met:
    +
    +* Redistributions of source code must retain the above copyright notice, this
    +  list of conditions and the following disclaimer.
    +
    +* Redistributions in binary form must reproduce the above copyright notice,
    +  this list of conditions and the following disclaimer in the documentation
    +  and/or other materials provided with the distribution.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
    +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/README.md b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/README.md
    new file mode 100644
    index 00000000000..6483ba2afb5
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/README.md
    @@ -0,0 +1,52 @@
    +# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge)
    +
    +Package errors provides simple error handling primitives.
    +
    +`go get github.com/pkg/errors`
    +
    +The traditional error handling idiom in Go is roughly akin to
    +```go
    +if err != nil {
    +        return err
    +}
    +```
    +which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error.
    +
    +## Adding context to an error
    +
    +The errors.Wrap function returns a new error that adds context to the original error. For example
    +```go
    +_, err := ioutil.ReadAll(r)
    +if err != nil {
    +        return errors.Wrap(err, "read failed")
    +}
    +```
    +## Retrieving the cause of an error
    +
    +Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`.
    +```go
    +type causer interface {
    +        Cause() error
    +}
    +```
    +`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example:
    +```go
    +switch err := errors.Cause(err).(type) {
    +case *MyError:
    +        // handle specifically
    +default:
    +        // unknown error
    +}
    +```
    +
    +[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors).
    +
    +## Contributing
    +
    +We welcome pull requests, bug fixes and issue reports. With that said, the bar for adding new symbols to this package is intentionally set high.
    +
    +Before proposing a change, please discuss your change by raising an issue.
    +
    +## License
    +
    +BSD-2-Clause
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/appveyor.yml b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/appveyor.yml
    new file mode 100644
    index 00000000000..a932eade024
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/appveyor.yml
    @@ -0,0 +1,32 @@
    +version: build-{build}.{branch}
    +
    +clone_folder: C:\gopath\src\github.com\pkg\errors
    +shallow_clone: true # for startup speed
    +
    +environment:
    +  GOPATH: C:\gopath
    +
    +platform:
    +  - x64
    +
    +# http://www.appveyor.com/docs/installed-software
    +install:
    +  # some helpful output for debugging builds
    +  - go version
    +  - go env
    +  # pre-installed MinGW at C:\MinGW is 32bit only
    +  # but MSYS2 at C:\msys64 has mingw64
    +  - set PATH=C:\msys64\mingw64\bin;%PATH%
    +  - gcc --version
    +  - g++ --version
    +
    +build_script:
    +  - go install -v ./...
    +
    +test_script:
    +  - set PATH=C:\gopath\bin;%PATH%
    +  - go test -v ./...
    +
    +#artifacts:
    +#  - path: '%GOPATH%\bin\*.exe'
    +deploy: off
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/errors.go
    new file mode 100644
    index 00000000000..842ee80456d
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/errors.go
    @@ -0,0 +1,269 @@
    +// Package errors provides simple error handling primitives.
    +//
    +// The traditional error handling idiom in Go is roughly akin to
    +//
    +//     if err != nil {
    +//             return err
    +//     }
    +//
    +// which applied recursively up the call stack results in error reports
    +// without context or debugging information. The errors package allows
    +// programmers to add context to the failure path in their code in a way
    +// that does not destroy the original value of the error.
    +//
    +// Adding context to an error
    +//
    +// The errors.Wrap function returns a new error that adds context to the
    +// original error by recording a stack trace at the point Wrap is called,
    +// and the supplied message. For example
    +//
    +//     _, err := ioutil.ReadAll(r)
    +//     if err != nil {
    +//             return errors.Wrap(err, "read failed")
    +//     }
    +//
    +// If additional control is required the errors.WithStack and errors.WithMessage
    +// functions destructure errors.Wrap into its component operations of annotating
    +// an error with a stack trace and an a message, respectively.
    +//
    +// Retrieving the cause of an error
    +//
    +// Using errors.Wrap constructs a stack of errors, adding context to the
    +// preceding error. Depending on the nature of the error it may be necessary
    +// to reverse the operation of errors.Wrap to retrieve the original error
    +// for inspection. Any error value which implements this interface
    +//
    +//     type causer interface {
    +//             Cause() error
    +//     }
    +//
    +// can be inspected by errors.Cause. errors.Cause will recursively retrieve
    +// the topmost error which does not implement causer, which is assumed to be
    +// the original cause. For example:
    +//
    +//     switch err := errors.Cause(err).(type) {
    +//     case *MyError:
    +//             // handle specifically
    +//     default:
    +//             // unknown error
    +//     }
    +//
    +// causer interface is not exported by this package, but is considered a part
    +// of stable public API.
    +//
    +// Formatted printing of errors
    +//
    +// All error values returned from this package implement fmt.Formatter and can
    +// be formatted by the fmt package. The following verbs are supported
    +//
    +//     %s    print the error. If the error has a Cause it will be
    +//           printed recursively
    +//     %v    see %s
    +//     %+v   extended format. Each Frame of the error's StackTrace will
    +//           be printed in detail.
    +//
    +// Retrieving the stack trace of an error or wrapper
    +//
    +// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are
    +// invoked. This information can be retrieved with the following interface.
    +//
    +//     type stackTracer interface {
    +//             StackTrace() errors.StackTrace
    +//     }
    +//
    +// Where errors.StackTrace is defined as
    +//
    +//     type StackTrace []Frame
    +//
    +// The Frame type represents a call site in the stack trace. Frame supports
    +// the fmt.Formatter interface that can be used for printing information about
    +// the stack trace of this error. For example:
    +//
    +//     if err, ok := err.(stackTracer); ok {
    +//             for _, f := range err.StackTrace() {
    +//                     fmt.Printf("%+s:%d", f)
    +//             }
    +//     }
    +//
    +// stackTracer interface is not exported by this package, but is considered a part
    +// of stable public API.
    +//
    +// See the documentation for Frame.Format for more details.
    +package errors
    +
    +import (
    +	"fmt"
    +	"io"
    +)
    +
    +// New returns an error with the supplied message.
    +// New also records the stack trace at the point it was called.
    +func New(message string) error {
    +	return &fundamental{
    +		msg:   message,
    +		stack: callers(),
    +	}
    +}
    +
    +// Errorf formats according to a format specifier and returns the string
    +// as a value that satisfies error.
    +// Errorf also records the stack trace at the point it was called.
    +func Errorf(format string, args ...interface{}) error {
    +	return &fundamental{
    +		msg:   fmt.Sprintf(format, args...),
    +		stack: callers(),
    +	}
    +}
    +
    +// fundamental is an error that has a message and a stack, but no caller.
    +type fundamental struct {
    +	msg string
    +	*stack
    +}
    +
    +func (f *fundamental) Error() string { return f.msg }
    +
    +func (f *fundamental) Format(s fmt.State, verb rune) {
    +	switch verb {
    +	case 'v':
    +		if s.Flag('+') {
    +			io.WriteString(s, f.msg)
    +			f.stack.Format(s, verb)
    +			return
    +		}
    +		fallthrough
    +	case 's':
    +		io.WriteString(s, f.msg)
    +	case 'q':
    +		fmt.Fprintf(s, "%q", f.msg)
    +	}
    +}
    +
    +// WithStack annotates err with a stack trace at the point WithStack was called.
    +// If err is nil, WithStack returns nil.
    +func WithStack(err error) error {
    +	if err == nil {
    +		return nil
    +	}
    +	return &withStack{
    +		err,
    +		callers(),
    +	}
    +}
    +
    +type withStack struct {
    +	error
    +	*stack
    +}
    +
    +func (w *withStack) Cause() error { return w.error }
    +
    +func (w *withStack) Format(s fmt.State, verb rune) {
    +	switch verb {
    +	case 'v':
    +		if s.Flag('+') {
    +			fmt.Fprintf(s, "%+v", w.Cause())
    +			w.stack.Format(s, verb)
    +			return
    +		}
    +		fallthrough
    +	case 's':
    +		io.WriteString(s, w.Error())
    +	case 'q':
    +		fmt.Fprintf(s, "%q", w.Error())
    +	}
    +}
    +
    +// Wrap returns an error annotating err with a stack trace
    +// at the point Wrap is called, and the supplied message.
    +// If err is nil, Wrap returns nil.
    +func Wrap(err error, message string) error {
    +	if err == nil {
    +		return nil
    +	}
    +	err = &withMessage{
    +		cause: err,
    +		msg:   message,
    +	}
    +	return &withStack{
    +		err,
    +		callers(),
    +	}
    +}
    +
    +// Wrapf returns an error annotating err with a stack trace
    +// at the point Wrapf is call, and the format specifier.
    +// If err is nil, Wrapf returns nil.
    +func Wrapf(err error, format string, args ...interface{}) error {
    +	if err == nil {
    +		return nil
    +	}
    +	err = &withMessage{
    +		cause: err,
    +		msg:   fmt.Sprintf(format, args...),
    +	}
    +	return &withStack{
    +		err,
    +		callers(),
    +	}
    +}
    +
    +// WithMessage annotates err with a new message.
    +// If err is nil, WithMessage returns nil.
    +func WithMessage(err error, message string) error {
    +	if err == nil {
    +		return nil
    +	}
    +	return &withMessage{
    +		cause: err,
    +		msg:   message,
    +	}
    +}
    +
    +type withMessage struct {
    +	cause error
    +	msg   string
    +}
    +
    +func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() }
    +func (w *withMessage) Cause() error  { return w.cause }
    +
    +func (w *withMessage) Format(s fmt.State, verb rune) {
    +	switch verb {
    +	case 'v':
    +		if s.Flag('+') {
    +			fmt.Fprintf(s, "%+v\n", w.Cause())
    +			io.WriteString(s, w.msg)
    +			return
    +		}
    +		fallthrough
    +	case 's', 'q':
    +		io.WriteString(s, w.Error())
    +	}
    +}
    +
    +// Cause returns the underlying cause of the error, if possible.
    +// An error value has a cause if it implements the following
    +// interface:
    +//
    +//     type causer interface {
    +//            Cause() error
    +//     }
    +//
    +// If the error does not implement Cause, the original error will
    +// be returned. If the error is nil, nil will be returned without further
    +// investigation.
    +func Cause(err error) error {
    +	type causer interface {
    +		Cause() error
    +	}
    +
    +	for err != nil {
    +		cause, ok := err.(causer)
    +		if !ok {
    +			break
    +		}
    +		err = cause.Cause()
    +	}
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/stack.go
    new file mode 100644
    index 00000000000..2874a048cf3
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/pkg/errors/stack.go
    @@ -0,0 +1,147 @@
    +package errors
    +
    +import (
    +	"fmt"
    +	"io"
    +	"path"
    +	"runtime"
    +	"strings"
    +)
    +
    +// Frame represents a program counter inside a stack frame.
    +type Frame uintptr
    +
    +// pc returns the program counter for this frame;
    +// multiple frames may have the same PC value.
    +func (f Frame) pc() uintptr { return uintptr(f) - 1 }
    +
    +// file returns the full path to the file that contains the
    +// function for this Frame's pc.
    +func (f Frame) file() string {
    +	fn := runtime.FuncForPC(f.pc())
    +	if fn == nil {
    +		return "unknown"
    +	}
    +	file, _ := fn.FileLine(f.pc())
    +	return file
    +}
    +
    +// line returns the line number of source code of the
    +// function for this Frame's pc.
    +func (f Frame) line() int {
    +	fn := runtime.FuncForPC(f.pc())
    +	if fn == nil {
    +		return 0
    +	}
    +	_, line := fn.FileLine(f.pc())
    +	return line
    +}
    +
    +// Format formats the frame according to the fmt.Formatter interface.
    +//
    +//    %s    source file
    +//    %d    source line
    +//    %n    function name
    +//    %v    equivalent to %s:%d
    +//
    +// Format accepts flags that alter the printing of some verbs, as follows:
    +//
    +//    %+s   function name and path of source file relative to the compile time
    +//          GOPATH separated by \n\t (\n\t)
    +//    %+v   equivalent to %+s:%d
    +func (f Frame) Format(s fmt.State, verb rune) {
    +	switch verb {
    +	case 's':
    +		switch {
    +		case s.Flag('+'):
    +			pc := f.pc()
    +			fn := runtime.FuncForPC(pc)
    +			if fn == nil {
    +				io.WriteString(s, "unknown")
    +			} else {
    +				file, _ := fn.FileLine(pc)
    +				fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file)
    +			}
    +		default:
    +			io.WriteString(s, path.Base(f.file()))
    +		}
    +	case 'd':
    +		fmt.Fprintf(s, "%d", f.line())
    +	case 'n':
    +		name := runtime.FuncForPC(f.pc()).Name()
    +		io.WriteString(s, funcname(name))
    +	case 'v':
    +		f.Format(s, 's')
    +		io.WriteString(s, ":")
    +		f.Format(s, 'd')
    +	}
    +}
    +
    +// StackTrace is stack of Frames from innermost (newest) to outermost (oldest).
    +type StackTrace []Frame
    +
    +// Format formats the stack of Frames according to the fmt.Formatter interface.
    +//
    +//    %s	lists source files for each Frame in the stack
    +//    %v	lists the source file and line number for each Frame in the stack
    +//
    +// Format accepts flags that alter the printing of some verbs, as follows:
    +//
    +//    %+v   Prints filename, function, and line number for each Frame in the stack.
    +func (st StackTrace) Format(s fmt.State, verb rune) {
    +	switch verb {
    +	case 'v':
    +		switch {
    +		case s.Flag('+'):
    +			for _, f := range st {
    +				fmt.Fprintf(s, "\n%+v", f)
    +			}
    +		case s.Flag('#'):
    +			fmt.Fprintf(s, "%#v", []Frame(st))
    +		default:
    +			fmt.Fprintf(s, "%v", []Frame(st))
    +		}
    +	case 's':
    +		fmt.Fprintf(s, "%s", []Frame(st))
    +	}
    +}
    +
    +// stack represents a stack of program counters.
    +type stack []uintptr
    +
    +func (s *stack) Format(st fmt.State, verb rune) {
    +	switch verb {
    +	case 'v':
    +		switch {
    +		case st.Flag('+'):
    +			for _, pc := range *s {
    +				f := Frame(pc)
    +				fmt.Fprintf(st, "\n%+v", f)
    +			}
    +		}
    +	}
    +}
    +
    +func (s *stack) StackTrace() StackTrace {
    +	f := make([]Frame, len(*s))
    +	for i := 0; i < len(f); i++ {
    +		f[i] = Frame((*s)[i])
    +	}
    +	return f
    +}
    +
    +func callers() *stack {
    +	const depth = 32
    +	var pcs [depth]uintptr
    +	n := runtime.Callers(3, pcs[:])
    +	var st stack = pcs[0:n]
    +	return &st
    +}
    +
    +// funcname removes the path prefix component of a function's name reported by func.Name().
    +func funcname(name string) string {
    +	i := strings.LastIndex(name, "/")
    +	name = name[i+1:]
    +	i = strings.Index(name, ".")
    +	return name[i+1:]
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/CHANGELOG.md b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/CHANGELOG.md
    new file mode 100644
    index 00000000000..1bd1deb2947
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/CHANGELOG.md
    @@ -0,0 +1,123 @@
    +# 1.0.5
    +
    +* Fix hooks race (#707)
    +* Fix panic deadlock (#695)
    +
    +# 1.0.4
    +
    +* Fix race when adding hooks (#612)
    +* Fix terminal check in AppEngine (#635)
    +
    +# 1.0.3
    +
    +* Replace example files with testable examples
    +
    +# 1.0.2
    +
    +* bug: quote non-string values in text formatter (#583)
    +* Make (*Logger) SetLevel a public method
    +
    +# 1.0.1
    +
    +* bug: fix escaping in text formatter (#575)
    +
    +# 1.0.0
    +
    +* Officially changed name to lower-case
    +* bug: colors on Windows 10 (#541)
    +* bug: fix race in accessing level (#512)
    +
    +# 0.11.5
    +
    +* feature: add writer and writerlevel to entry (#372)
    +
    +# 0.11.4
    +
    +* bug: fix undefined variable on solaris (#493)
    +
    +# 0.11.3
    +
    +* formatter: configure quoting of empty values (#484)
    +* formatter: configure quoting character (default is `"`) (#484)
    +* bug: fix not importing io correctly in non-linux environments (#481)
    +
    +# 0.11.2
    +
    +* bug: fix windows terminal detection (#476)
    +
    +# 0.11.1
    +
    +* bug: fix tty detection with custom out (#471)
    +
    +# 0.11.0
    +
    +* performance: Use bufferpool to allocate (#370)
    +* terminal: terminal detection for app-engine (#343)
    +* feature: exit handler (#375)
    +
    +# 0.10.0
    +
    +* feature: Add a test hook (#180)
    +* feature: `ParseLevel` is now case-insensitive (#326)
    +* feature: `FieldLogger` interface that generalizes `Logger` and `Entry` (#308)
    +* performance: avoid re-allocations on `WithFields` (#335)
    +
    +# 0.9.0
    +
    +* logrus/text_formatter: don't emit empty msg
    +* logrus/hooks/airbrake: move out of main repository
    +* logrus/hooks/sentry: move out of main repository
    +* logrus/hooks/papertrail: move out of main repository
    +* logrus/hooks/bugsnag: move out of main repository
    +* logrus/core: run tests with `-race`
    +* logrus/core: detect TTY based on `stderr`
    +* logrus/core: support `WithError` on logger
    +* logrus/core: Solaris support
    +
    +# 0.8.7
    +
    +* logrus/core: fix possible race (#216)
    +* logrus/doc: small typo fixes and doc improvements
    +
    +
    +# 0.8.6
    +
    +* hooks/raven: allow passing an initialized client
    +
    +# 0.8.5
    +
    +* logrus/core: revert #208
    +
    +# 0.8.4
    +
    +* formatter/text: fix data race (#218)
    +
    +# 0.8.3
    +
    +* logrus/core: fix entry log level (#208)
    +* logrus/core: improve performance of text formatter by 40%
    +* logrus/core: expose `LevelHooks` type
    +* logrus/core: add support for DragonflyBSD and NetBSD
    +* formatter/text: print structs more verbosely
    +
    +# 0.8.2
    +
    +* logrus: fix more Fatal family functions
    +
    +# 0.8.1
    +
    +* logrus: fix not exiting on `Fatalf` and `Fatalln`
    +
    +# 0.8.0
    +
    +* logrus: defaults to stderr instead of stdout
    +* hooks/sentry: add special field for `*http.Request`
    +* formatter/text: ignore Windows for colors
    +
    +# 0.7.3
    +
    +* formatter/\*: allow configuration of timestamp layout
    +
    +# 0.7.2
    +
    +* formatter/text: Add configuration option for time format (#158)
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/LICENSE
    new file mode 100644
    index 00000000000..f090cb42f37
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/LICENSE
    @@ -0,0 +1,21 @@
    +The MIT License (MIT)
    +
    +Copyright (c) 2014 Simon Eskildsen
    +
    +Permission 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:
    +
    +The above copyright notice and this permission notice shall be included in
    +all copies or substantial portions of the Software.
    +
    +THE 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.
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/README.md b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/README.md
    new file mode 100644
    index 00000000000..072e99be313
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/README.md
    @@ -0,0 +1,461 @@
    +# Logrus :walrus: [![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus) [![GoDoc](https://godoc.org/github.com/sirupsen/logrus?status.svg)](https://godoc.org/github.com/sirupsen/logrus)
    +
    +Logrus is a structured logger for Go (golang), completely API compatible with
    +the standard library logger.
    +
    +**Seeing weird case-sensitive problems?** It's in the past been possible to
    +import Logrus as both upper- and lower-case. Due to the Go package environment,
    +this caused issues in the community and we needed a standard. Some environments
    +experienced problems with the upper-case variant, so the lower-case was decided.
    +Everything using `logrus` will need to use the lower-case:
    +`github.com/sirupsen/logrus`. Any package that isn't, should be changed.
    +
    +To fix Glide, see [these
    +comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437).
    +For an in-depth explanation of the casing issue, see [this
    +comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276).
    +
    +**Are you interested in assisting in maintaining Logrus?** Currently I have a
    +lot of obligations, and I am unable to provide Logrus with the maintainership it
    +needs. If you'd like to help, please reach out to me at `simon at author's
    +username dot com`.
    +
    +Nicely color-coded in development (when a TTY is attached, otherwise just
    +plain text):
    +
    +![Colored](http://i.imgur.com/PY7qMwd.png)
    +
    +With `log.SetFormatter(&log.JSONFormatter{})`, for easy parsing by logstash
    +or Splunk:
    +
    +```json
    +{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the
    +ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"}
    +
    +{"level":"warning","msg":"The group's number increased tremendously!",
    +"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"}
    +
    +{"animal":"walrus","level":"info","msg":"A giant walrus appears!",
    +"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"}
    +
    +{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.",
    +"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"}
    +
    +{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true,
    +"time":"2014-03-10 19:57:38.562543128 -0400 EDT"}
    +```
    +
    +With the default `log.SetFormatter(&log.TextFormatter{})` when a TTY is not
    +attached, the output is compatible with the
    +[logfmt](http://godoc.org/github.com/kr/logfmt) format:
    +
    +```text
    +time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8
    +time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10
    +time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true
    +time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4
    +time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009
    +time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true
    +exit status 1
    +```
    +
    +#### Case-sensitivity
    +
    +The organization's name was changed to lower-case--and this will not be changed
    +back. If you are getting import conflicts due to case sensitivity, please use
    +the lower-case import: `github.com/sirupsen/logrus`.
    +
    +#### Example
    +
    +The simplest way to use Logrus is simply the package-level exported logger:
    +
    +```go
    +package main
    +
    +import (
    +  log "github.com/sirupsen/logrus"
    +)
    +
    +func main() {
    +  log.WithFields(log.Fields{
    +    "animal": "walrus",
    +  }).Info("A walrus appears")
    +}
    +```
    +
    +Note that it's completely api-compatible with the stdlib logger, so you can
    +replace your `log` imports everywhere with `log "github.com/sirupsen/logrus"`
    +and you'll now have the flexibility of Logrus. You can customize it all you
    +want:
    +
    +```go
    +package main
    +
    +import (
    +  "os"
    +  log "github.com/sirupsen/logrus"
    +)
    +
    +func init() {
    +  // Log as JSON instead of the default ASCII formatter.
    +  log.SetFormatter(&log.JSONFormatter{})
    +
    +  // Output to stdout instead of the default stderr
    +  // Can be any io.Writer, see below for File example
    +  log.SetOutput(os.Stdout)
    +
    +  // Only log the warning severity or above.
    +  log.SetLevel(log.WarnLevel)
    +}
    +
    +func main() {
    +  log.WithFields(log.Fields{
    +    "animal": "walrus",
    +    "size":   10,
    +  }).Info("A group of walrus emerges from the ocean")
    +
    +  log.WithFields(log.Fields{
    +    "omg":    true,
    +    "number": 122,
    +  }).Warn("The group's number increased tremendously!")
    +
    +  log.WithFields(log.Fields{
    +    "omg":    true,
    +    "number": 100,
    +  }).Fatal("The ice breaks!")
    +
    +  // A common pattern is to re-use fields between logging statements by re-using
    +  // the logrus.Entry returned from WithFields()
    +  contextLogger := log.WithFields(log.Fields{
    +    "common": "this is a common field",
    +    "other": "I also should be logged always",
    +  })
    +
    +  contextLogger.Info("I'll be logged with common and other field")
    +  contextLogger.Info("Me too")
    +}
    +```
    +
    +For more advanced usage such as logging to multiple locations from the same
    +application, you can also create an instance of the `logrus` Logger:
    +
    +```go
    +package main
    +
    +import (
    +  "os"
    +  "github.com/sirupsen/logrus"
    +)
    +
    +// Create a new instance of the logger. You can have any number of instances.
    +var log = logrus.New()
    +
    +func main() {
    +  // The API for setting attributes is a little different than the package level
    +  // exported logger. See Godoc.
    +  log.Out = os.Stdout
    +
    +  // You could set this to any `io.Writer` such as a file
    +  // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666)
    +  // if err == nil {
    +  //  log.Out = file
    +  // } else {
    +  //  log.Info("Failed to log to file, using default stderr")
    +  // }
    +
    +  log.WithFields(logrus.Fields{
    +    "animal": "walrus",
    +    "size":   10,
    +  }).Info("A group of walrus emerges from the ocean")
    +}
    +```
    +
    +#### Fields
    +
    +Logrus encourages careful, structured logging through logging fields instead of
    +long, unparseable error messages. For example, instead of: `log.Fatalf("Failed
    +to send event %s to topic %s with key %d")`, you should log the much more
    +discoverable:
    +
    +```go
    +log.WithFields(log.Fields{
    +  "event": event,
    +  "topic": topic,
    +  "key": key,
    +}).Fatal("Failed to send event")
    +```
    +
    +We've found this API forces you to think about logging in a way that produces
    +much more useful logging messages. We've been in countless situations where just
    +a single added field to a log statement that was already there would've saved us
    +hours. The `WithFields` call is optional.
    +
    +In general, with Logrus using any of the `printf`-family functions should be
    +seen as a hint you should add a field, however, you can still use the
    +`printf`-family functions with Logrus.
    +
    +#### Default Fields
    +
    +Often it's helpful to have fields _always_ attached to log statements in an
    +application or parts of one. For example, you may want to always log the
    +`request_id` and `user_ip` in the context of a request. Instead of writing
    +`log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})` on
    +every line, you can create a `logrus.Entry` to pass around instead:
    +
    +```go
    +requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
    +requestLogger.Info("something happened on that request") # will log request_id and user_ip
    +requestLogger.Warn("something not great happened")
    +```
    +
    +#### Hooks
    +
    +You can add hooks for logging levels. For example to send errors to an exception
    +tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to
    +multiple places simultaneously, e.g. syslog.
    +
    +Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in
    +`init`:
    +
    +```go
    +import (
    +  log "github.com/sirupsen/logrus"
    +  "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake"
    +  logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
    +  "log/syslog"
    +)
    +
    +func init() {
    +
    +  // Use the Airbrake hook to report errors that have Error severity or above to
    +  // an exception tracker. You can create custom hooks, see the Hooks section.
    +  log.AddHook(airbrake.NewHook(123, "xyz", "production"))
    +
    +  hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
    +  if err != nil {
    +    log.Error("Unable to connect to local syslog daemon")
    +  } else {
    +    log.AddHook(hook)
    +  }
    +}
    +```
    +Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the [syslog hook README](hooks/syslog/README.md).
    +
    +A list of currently known of service hook can be found in this wiki [page](https://github.com/sirupsen/logrus/wiki/Hooks)
    +
    +
    +#### Level logging
    +
    +Logrus has six logging levels: Debug, Info, Warning, Error, Fatal and Panic.
    +
    +```go
    +log.Debug("Useful debugging information.")
    +log.Info("Something noteworthy happened!")
    +log.Warn("You should probably take a look at this.")
    +log.Error("Something failed but I'm not quitting.")
    +// Calls os.Exit(1) after logging
    +log.Fatal("Bye.")
    +// Calls panic() after logging
    +log.Panic("I'm bailing.")
    +```
    +
    +You can set the logging level on a `Logger`, then it will only log entries with
    +that severity or anything above it:
    +
    +```go
    +// Will log anything that is info or above (warn, error, fatal, panic). Default.
    +log.SetLevel(log.InfoLevel)
    +```
    +
    +It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose
    +environment if your application has that.
    +
    +#### Entries
    +
    +Besides the fields added with `WithField` or `WithFields` some fields are
    +automatically added to all logging events:
    +
    +1. `time`. The timestamp when the entry was created.
    +2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after
    +   the `AddFields` call. E.g. `Failed to send event.`
    +3. `level`. The logging level. E.g. `info`.
    +
    +#### Environments
    +
    +Logrus has no notion of environment.
    +
    +If you wish for hooks and formatters to only be used in specific environments,
    +you should handle that yourself. For example, if your application has a global
    +variable `Environment`, which is a string representation of the environment you
    +could do:
    +
    +```go
    +import (
    +  log "github.com/sirupsen/logrus"
    +)
    +
    +init() {
    +  // do something here to set environment depending on an environment variable
    +  // or command-line flag
    +  if Environment == "production" {
    +    log.SetFormatter(&log.JSONFormatter{})
    +  } else {
    +    // The TextFormatter is default, you don't actually have to do this.
    +    log.SetFormatter(&log.TextFormatter{})
    +  }
    +}
    +```
    +
    +This configuration is how `logrus` was intended to be used, but JSON in
    +production is mostly only useful if you do log aggregation with tools like
    +Splunk or Logstash.
    +
    +#### Formatters
    +
    +The built-in logging formatters are:
    +
    +* `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise
    +  without colors.
    +  * *Note:* to force colored output when there is no TTY, set the `ForceColors`
    +    field to `true`.  To force no colored output even if there is a TTY  set the
    +    `DisableColors` field to `true`. For Windows, see
    +    [github.com/mattn/go-colorable](https://github.com/mattn/go-colorable).
    +  * When colors are enabled, levels are truncated to 4 characters by default. To disable
    +    truncation set the `DisableLevelTruncation` field to `true`.
    +  * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#TextFormatter).
    +* `logrus.JSONFormatter`. Logs fields as JSON.
    +  * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#JSONFormatter).
    +
    +Third party logging formatters:
    +
    +* [`FluentdFormatter`](https://github.com/joonix/log). Formats entries that can be parsed by Kubernetes and Google Container Engine.
    +* [`logstash`](https://github.com/bshuster-repo/logrus-logstash-hook). Logs fields as [Logstash](http://logstash.net) Events.
    +* [`prefixed`](https://github.com/x-cray/logrus-prefixed-formatter). Displays log entry source along with alternative layout.
    +* [`zalgo`](https://github.com/aybabtme/logzalgo). Invoking the P͉̫o̳̼̊w̖͈̰͎e̬͔̭͂r͚̼̹̲ ̫͓͉̳͈ō̠͕͖̚f̝͍̠ ͕̲̞͖͑Z̖̫̤̫ͪa͉̬͈̗l͖͎g̳̥o̰̥̅!̣͔̲̻͊̄ ̙̘̦̹̦.
    +
    +You can define your formatter by implementing the `Formatter` interface,
    +requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a
    +`Fields` type (`map[string]interface{}`) with all your fields as well as the
    +default ones (see Entries section above):
    +
    +```go
    +type MyJSONFormatter struct {
    +}
    +
    +log.SetFormatter(new(MyJSONFormatter))
    +
    +func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) {
    +  // Note this doesn't include Time, Level and Message which are available on
    +  // the Entry. Consult `godoc` on information about those fields or read the
    +  // source of the official loggers.
    +  serialized, err := json.Marshal(entry.Data)
    +    if err != nil {
    +      return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
    +    }
    +  return append(serialized, '\n'), nil
    +}
    +```
    +
    +#### Logger as an `io.Writer`
    +
    +Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it.
    +
    +```go
    +w := logger.Writer()
    +defer w.Close()
    +
    +srv := http.Server{
    +    // create a stdlib log.Logger that writes to
    +    // logrus.Logger.
    +    ErrorLog: log.New(w, "", 0),
    +}
    +```
    +
    +Each line written to that writer will be printed the usual way, using formatters
    +and hooks. The level for those entries is `info`.
    +
    +This means that we can override the standard library logger easily:
    +
    +```go
    +logger := logrus.New()
    +logger.Formatter = &logrus.JSONFormatter{}
    +
    +// Use logrus for standard log output
    +// Note that `log` here references stdlib's log
    +// Not logrus imported under the name `log`.
    +log.SetOutput(logger.Writer())
    +```
    +
    +#### Rotation
    +
    +Log rotation is not provided with Logrus. Log rotation should be done by an
    +external program (like `logrotate(8)`) that can compress and delete old log
    +entries. It should not be a feature of the application-level logger.
    +
    +#### Tools
    +
    +| Tool | Description |
    +| ---- | ----------- |
    +|[Logrus Mate](https://github.com/gogap/logrus_mate)|Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will generated with different config at different environment.|
    +|[Logrus Viper Helper](https://github.com/heirko/go-contrib/tree/master/logrusHelper)|An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of [Logrus Mate](https://github.com/gogap/logrus_mate). [sample](https://github.com/heirko/iris-contrib/blob/master/middleware/logrus-logger/example) |
    +
    +#### Testing
    +
    +Logrus has a built in facility for asserting the presence of log messages. This is implemented through the `test` hook and provides:
    +
    +* decorators for existing logger (`test.NewLocal` and `test.NewGlobal`) which basically just add the `test` hook
    +* a test logger (`test.NewNullLogger`) that just records log messages (and does not output any):
    +
    +```go
    +import(
    +  "github.com/sirupsen/logrus"
    +  "github.com/sirupsen/logrus/hooks/test"
    +  "github.com/stretchr/testify/assert"
    +  "testing"
    +)
    +
    +func TestSomething(t*testing.T){
    +  logger, hook := test.NewNullLogger()
    +  logger.Error("Helloerror")
    +
    +  assert.Equal(t, 1, len(hook.Entries))
    +  assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level)
    +  assert.Equal(t, "Helloerror", hook.LastEntry().Message)
    +
    +  hook.Reset()
    +  assert.Nil(t, hook.LastEntry())
    +}
    +```
    +
    +#### Fatal handlers
    +
    +Logrus can register one or more functions that will be called when any `fatal`
    +level message is logged. The registered handlers will be executed before
    +logrus performs a `os.Exit(1)`. This behavior may be helpful if callers need
    +to gracefully shutdown. Unlike a `panic("Something went wrong...")` call which can be intercepted with a deferred `recover` a call to `os.Exit(1)` can not be intercepted.
    +
    +```
    +...
    +handler := func() {
    +  // gracefully shutdown something...
    +}
    +logrus.RegisterExitHandler(handler)
    +...
    +```
    +
    +#### Thread safety
    +
    +By default, Logger is protected by a mutex for concurrent writes. The mutex is held when calling hooks and writing logs.
    +If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking.
    +
    +Situation when locking is not needed includes:
    +
    +* You have no hooks registered, or hooks calling is already thread-safe.
    +
    +* Writing to logger.Out is already thread-safe, for example:
    +
    +  1) logger.Out is protected by locks.
    +
    +  2) logger.Out is a os.File handler opened with `O_APPEND` flag, and every write is smaller than 4k. (This allow multi-thread/multi-process writing)
    +
    +     (Refer to http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/)
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/alt_exit.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/alt_exit.go
    new file mode 100644
    index 00000000000..8af90637a99
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/alt_exit.go
    @@ -0,0 +1,64 @@
    +package logrus
    +
    +// The following code was sourced and modified from the
    +// https://github.com/tebeka/atexit package governed by the following license:
    +//
    +// Copyright (c) 2012 Miki Tebeka .
    +//
    +// Permission 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:
    +//
    +// The above copyright notice and this permission notice shall be included in all
    +// copies or substantial portions of the Software.
    +//
    +// THE 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.
    +
    +import (
    +	"fmt"
    +	"os"
    +)
    +
    +var handlers = []func(){}
    +
    +func runHandler(handler func()) {
    +	defer func() {
    +		if err := recover(); err != nil {
    +			fmt.Fprintln(os.Stderr, "Error: Logrus exit handler error:", err)
    +		}
    +	}()
    +
    +	handler()
    +}
    +
    +func runHandlers() {
    +	for _, handler := range handlers {
    +		runHandler(handler)
    +	}
    +}
    +
    +// Exit runs all the Logrus atexit handlers and then terminates the program using os.Exit(code)
    +func Exit(code int) {
    +	runHandlers()
    +	os.Exit(code)
    +}
    +
    +// RegisterExitHandler adds a Logrus Exit handler, call logrus.Exit to invoke
    +// all handlers. The handlers will also be invoked when any Fatal log entry is
    +// made.
    +//
    +// This method is useful when a caller wishes to use logrus to log a fatal
    +// message but also needs to gracefully shutdown. An example usecase could be
    +// closing database connections, or sending a alert that the application is
    +// closing.
    +func RegisterExitHandler(handler func()) {
    +	handlers = append(handlers, handler)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/appveyor.yml b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/appveyor.yml
    new file mode 100644
    index 00000000000..96c2ce15f84
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/appveyor.yml
    @@ -0,0 +1,14 @@
    +version: "{build}"
    +platform: x64
    +clone_folder: c:\gopath\src\github.com\sirupsen\logrus
    +environment:  
    +  GOPATH: c:\gopath
    +branches:  
    +  only:
    +    - master
    +install:  
    +  - set PATH=%GOPATH%\bin;c:\go\bin;%PATH%
    +  - go version
    +build_script:  
    +  - go get -t
    +  - go test
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/doc.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/doc.go
    new file mode 100644
    index 00000000000..da67aba06de
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/doc.go
    @@ -0,0 +1,26 @@
    +/*
    +Package logrus is a structured logger for Go, completely API compatible with the standard library logger.
    +
    +
    +The simplest way to use Logrus is simply the package-level exported logger:
    +
    +  package main
    +
    +  import (
    +    log "github.com/sirupsen/logrus"
    +  )
    +
    +  func main() {
    +    log.WithFields(log.Fields{
    +      "animal": "walrus",
    +      "number": 1,
    +      "size":   10,
    +    }).Info("A walrus appears")
    +  }
    +
    +Output:
    +  time="2015-09-07T08:48:33Z" level=info msg="A walrus appears" animal=walrus number=1 size=10
    +
    +For a full guide visit https://github.com/sirupsen/logrus
    +*/
    +package logrus
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/entry.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/entry.go
    new file mode 100644
    index 00000000000..473bd1a0d3b
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/entry.go
    @@ -0,0 +1,300 @@
    +package logrus
    +
    +import (
    +	"bytes"
    +	"fmt"
    +	"os"
    +	"sync"
    +	"time"
    +)
    +
    +var bufferPool *sync.Pool
    +
    +func init() {
    +	bufferPool = &sync.Pool{
    +		New: func() interface{} {
    +			return new(bytes.Buffer)
    +		},
    +	}
    +}
    +
    +// Defines the key when adding errors using WithError.
    +var ErrorKey = "error"
    +
    +// An entry is the final or intermediate Logrus logging entry. It contains all
    +// the fields passed with WithField{,s}. It's finally logged when Debug, Info,
    +// Warn, Error, Fatal or Panic is called on it. These objects can be reused and
    +// passed around as much as you wish to avoid field duplication.
    +type Entry struct {
    +	Logger *Logger
    +
    +	// Contains all the fields set by the user.
    +	Data Fields
    +
    +	// Time at which the log entry was created
    +	Time time.Time
    +
    +	// Level the log entry was logged at: Debug, Info, Warn, Error, Fatal or Panic
    +	// This field will be set on entry firing and the value will be equal to the one in Logger struct field.
    +	Level Level
    +
    +	// Message passed to Debug, Info, Warn, Error, Fatal or Panic
    +	Message string
    +
    +	// When formatter is called in entry.log(), an Buffer may be set to entry
    +	Buffer *bytes.Buffer
    +}
    +
    +func NewEntry(logger *Logger) *Entry {
    +	return &Entry{
    +		Logger: logger,
    +		// Default is five fields, give a little extra room
    +		Data: make(Fields, 5),
    +	}
    +}
    +
    +// Returns the string representation from the reader and ultimately the
    +// formatter.
    +func (entry *Entry) String() (string, error) {
    +	serialized, err := entry.Logger.Formatter.Format(entry)
    +	if err != nil {
    +		return "", err
    +	}
    +	str := string(serialized)
    +	return str, nil
    +}
    +
    +// Add an error as single field (using the key defined in ErrorKey) to the Entry.
    +func (entry *Entry) WithError(err error) *Entry {
    +	return entry.WithField(ErrorKey, err)
    +}
    +
    +// Add a single field to the Entry.
    +func (entry *Entry) WithField(key string, value interface{}) *Entry {
    +	return entry.WithFields(Fields{key: value})
    +}
    +
    +// Add a map of fields to the Entry.
    +func (entry *Entry) WithFields(fields Fields) *Entry {
    +	data := make(Fields, len(entry.Data)+len(fields))
    +	for k, v := range entry.Data {
    +		data[k] = v
    +	}
    +	for k, v := range fields {
    +		data[k] = v
    +	}
    +	return &Entry{Logger: entry.Logger, Data: data, Time: entry.Time}
    +}
    +
    +// Overrides the time of the Entry.
    +func (entry *Entry) WithTime(t time.Time) *Entry {
    +	return &Entry{Logger: entry.Logger, Data: entry.Data, Time: t}
    +}
    +
    +// This function is not declared with a pointer value because otherwise
    +// race conditions will occur when using multiple goroutines
    +func (entry Entry) log(level Level, msg string) {
    +	var buffer *bytes.Buffer
    +
    +	// Default to now, but allow users to override if they want.
    +	//
    +	// We don't have to worry about polluting future calls to Entry#log()
    +	// with this assignment because this function is declared with a
    +	// non-pointer receiver.
    +	if entry.Time.IsZero() {
    +		entry.Time = time.Now()
    +	}
    +
    +	entry.Level = level
    +	entry.Message = msg
    +
    +	entry.fireHooks()
    +
    +	buffer = bufferPool.Get().(*bytes.Buffer)
    +	buffer.Reset()
    +	defer bufferPool.Put(buffer)
    +	entry.Buffer = buffer
    +
    +	entry.write()
    +
    +	entry.Buffer = nil
    +
    +	// To avoid Entry#log() returning a value that only would make sense for
    +	// panic() to use in Entry#Panic(), we avoid the allocation by checking
    +	// directly here.
    +	if level <= PanicLevel {
    +		panic(&entry)
    +	}
    +}
    +
    +func (entry *Entry) fireHooks() {
    +	entry.Logger.mu.Lock()
    +	defer entry.Logger.mu.Unlock()
    +	err := entry.Logger.Hooks.Fire(entry.Level, entry)
    +	if err != nil {
    +		fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err)
    +	}
    +}
    +
    +func (entry *Entry) write() {
    +	serialized, err := entry.Logger.Formatter.Format(entry)
    +	entry.Logger.mu.Lock()
    +	defer entry.Logger.mu.Unlock()
    +	if err != nil {
    +		fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err)
    +	} else {
    +		_, err = entry.Logger.Out.Write(serialized)
    +		if err != nil {
    +			fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err)
    +		}
    +	}
    +}
    +
    +func (entry *Entry) Debug(args ...interface{}) {
    +	if entry.Logger.level() >= DebugLevel {
    +		entry.log(DebugLevel, fmt.Sprint(args...))
    +	}
    +}
    +
    +func (entry *Entry) Print(args ...interface{}) {
    +	entry.Info(args...)
    +}
    +
    +func (entry *Entry) Info(args ...interface{}) {
    +	if entry.Logger.level() >= InfoLevel {
    +		entry.log(InfoLevel, fmt.Sprint(args...))
    +	}
    +}
    +
    +func (entry *Entry) Warn(args ...interface{}) {
    +	if entry.Logger.level() >= WarnLevel {
    +		entry.log(WarnLevel, fmt.Sprint(args...))
    +	}
    +}
    +
    +func (entry *Entry) Warning(args ...interface{}) {
    +	entry.Warn(args...)
    +}
    +
    +func (entry *Entry) Error(args ...interface{}) {
    +	if entry.Logger.level() >= ErrorLevel {
    +		entry.log(ErrorLevel, fmt.Sprint(args...))
    +	}
    +}
    +
    +func (entry *Entry) Fatal(args ...interface{}) {
    +	if entry.Logger.level() >= FatalLevel {
    +		entry.log(FatalLevel, fmt.Sprint(args...))
    +	}
    +	Exit(1)
    +}
    +
    +func (entry *Entry) Panic(args ...interface{}) {
    +	if entry.Logger.level() >= PanicLevel {
    +		entry.log(PanicLevel, fmt.Sprint(args...))
    +	}
    +	panic(fmt.Sprint(args...))
    +}
    +
    +// Entry Printf family functions
    +
    +func (entry *Entry) Debugf(format string, args ...interface{}) {
    +	if entry.Logger.level() >= DebugLevel {
    +		entry.Debug(fmt.Sprintf(format, args...))
    +	}
    +}
    +
    +func (entry *Entry) Infof(format string, args ...interface{}) {
    +	if entry.Logger.level() >= InfoLevel {
    +		entry.Info(fmt.Sprintf(format, args...))
    +	}
    +}
    +
    +func (entry *Entry) Printf(format string, args ...interface{}) {
    +	entry.Infof(format, args...)
    +}
    +
    +func (entry *Entry) Warnf(format string, args ...interface{}) {
    +	if entry.Logger.level() >= WarnLevel {
    +		entry.Warn(fmt.Sprintf(format, args...))
    +	}
    +}
    +
    +func (entry *Entry) Warningf(format string, args ...interface{}) {
    +	entry.Warnf(format, args...)
    +}
    +
    +func (entry *Entry) Errorf(format string, args ...interface{}) {
    +	if entry.Logger.level() >= ErrorLevel {
    +		entry.Error(fmt.Sprintf(format, args...))
    +	}
    +}
    +
    +func (entry *Entry) Fatalf(format string, args ...interface{}) {
    +	if entry.Logger.level() >= FatalLevel {
    +		entry.Fatal(fmt.Sprintf(format, args...))
    +	}
    +	Exit(1)
    +}
    +
    +func (entry *Entry) Panicf(format string, args ...interface{}) {
    +	if entry.Logger.level() >= PanicLevel {
    +		entry.Panic(fmt.Sprintf(format, args...))
    +	}
    +}
    +
    +// Entry Println family functions
    +
    +func (entry *Entry) Debugln(args ...interface{}) {
    +	if entry.Logger.level() >= DebugLevel {
    +		entry.Debug(entry.sprintlnn(args...))
    +	}
    +}
    +
    +func (entry *Entry) Infoln(args ...interface{}) {
    +	if entry.Logger.level() >= InfoLevel {
    +		entry.Info(entry.sprintlnn(args...))
    +	}
    +}
    +
    +func (entry *Entry) Println(args ...interface{}) {
    +	entry.Infoln(args...)
    +}
    +
    +func (entry *Entry) Warnln(args ...interface{}) {
    +	if entry.Logger.level() >= WarnLevel {
    +		entry.Warn(entry.sprintlnn(args...))
    +	}
    +}
    +
    +func (entry *Entry) Warningln(args ...interface{}) {
    +	entry.Warnln(args...)
    +}
    +
    +func (entry *Entry) Errorln(args ...interface{}) {
    +	if entry.Logger.level() >= ErrorLevel {
    +		entry.Error(entry.sprintlnn(args...))
    +	}
    +}
    +
    +func (entry *Entry) Fatalln(args ...interface{}) {
    +	if entry.Logger.level() >= FatalLevel {
    +		entry.Fatal(entry.sprintlnn(args...))
    +	}
    +	Exit(1)
    +}
    +
    +func (entry *Entry) Panicln(args ...interface{}) {
    +	if entry.Logger.level() >= PanicLevel {
    +		entry.Panic(entry.sprintlnn(args...))
    +	}
    +}
    +
    +// Sprintlnn => Sprint no newline. This is to get the behavior of how
    +// fmt.Sprintln where spaces are always added between operands, regardless of
    +// their type. Instead of vendoring the Sprintln implementation to spare a
    +// string allocation, we do the simplest thing.
    +func (entry *Entry) sprintlnn(args ...interface{}) string {
    +	msg := fmt.Sprintln(args...)
    +	return msg[:len(msg)-1]
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/exported.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/exported.go
    new file mode 100644
    index 00000000000..eb612a6f3e8
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/exported.go
    @@ -0,0 +1,201 @@
    +package logrus
    +
    +import (
    +	"io"
    +	"time"
    +)
    +
    +var (
    +	// std is the name of the standard logger in stdlib `log`
    +	std = New()
    +)
    +
    +func StandardLogger() *Logger {
    +	return std
    +}
    +
    +// SetOutput sets the standard logger output.
    +func SetOutput(out io.Writer) {
    +	std.SetOutput(out)
    +}
    +
    +// SetFormatter sets the standard logger formatter.
    +func SetFormatter(formatter Formatter) {
    +	std.mu.Lock()
    +	defer std.mu.Unlock()
    +	std.Formatter = formatter
    +}
    +
    +// SetLevel sets the standard logger level.
    +func SetLevel(level Level) {
    +	std.mu.Lock()
    +	defer std.mu.Unlock()
    +	std.SetLevel(level)
    +}
    +
    +// GetLevel returns the standard logger level.
    +func GetLevel() Level {
    +	std.mu.Lock()
    +	defer std.mu.Unlock()
    +	return std.level()
    +}
    +
    +// AddHook adds a hook to the standard logger hooks.
    +func AddHook(hook Hook) {
    +	std.mu.Lock()
    +	defer std.mu.Unlock()
    +	std.Hooks.Add(hook)
    +}
    +
    +// WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key.
    +func WithError(err error) *Entry {
    +	return std.WithField(ErrorKey, err)
    +}
    +
    +// WithField creates an entry from the standard logger and adds a field to
    +// it. If you want multiple fields, use `WithFields`.
    +//
    +// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
    +// or Panic on the Entry it returns.
    +func WithField(key string, value interface{}) *Entry {
    +	return std.WithField(key, value)
    +}
    +
    +// WithFields creates an entry from the standard logger and adds multiple
    +// fields to it. This is simply a helper for `WithField`, invoking it
    +// once for each field.
    +//
    +// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
    +// or Panic on the Entry it returns.
    +func WithFields(fields Fields) *Entry {
    +	return std.WithFields(fields)
    +}
    +
    +// WithTime creats an entry from the standard logger and overrides the time of
    +// logs generated with it.
    +//
    +// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal
    +// or Panic on the Entry it returns.
    +func WithTime(t time.Time) *Entry {
    +	return std.WithTime(t)
    +}
    +
    +// Debug logs a message at level Debug on the standard logger.
    +func Debug(args ...interface{}) {
    +	std.Debug(args...)
    +}
    +
    +// Print logs a message at level Info on the standard logger.
    +func Print(args ...interface{}) {
    +	std.Print(args...)
    +}
    +
    +// Info logs a message at level Info on the standard logger.
    +func Info(args ...interface{}) {
    +	std.Info(args...)
    +}
    +
    +// Warn logs a message at level Warn on the standard logger.
    +func Warn(args ...interface{}) {
    +	std.Warn(args...)
    +}
    +
    +// Warning logs a message at level Warn on the standard logger.
    +func Warning(args ...interface{}) {
    +	std.Warning(args...)
    +}
    +
    +// Error logs a message at level Error on the standard logger.
    +func Error(args ...interface{}) {
    +	std.Error(args...)
    +}
    +
    +// Panic logs a message at level Panic on the standard logger.
    +func Panic(args ...interface{}) {
    +	std.Panic(args...)
    +}
    +
    +// Fatal logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
    +func Fatal(args ...interface{}) {
    +	std.Fatal(args...)
    +}
    +
    +// Debugf logs a message at level Debug on the standard logger.
    +func Debugf(format string, args ...interface{}) {
    +	std.Debugf(format, args...)
    +}
    +
    +// Printf logs a message at level Info on the standard logger.
    +func Printf(format string, args ...interface{}) {
    +	std.Printf(format, args...)
    +}
    +
    +// Infof logs a message at level Info on the standard logger.
    +func Infof(format string, args ...interface{}) {
    +	std.Infof(format, args...)
    +}
    +
    +// Warnf logs a message at level Warn on the standard logger.
    +func Warnf(format string, args ...interface{}) {
    +	std.Warnf(format, args...)
    +}
    +
    +// Warningf logs a message at level Warn on the standard logger.
    +func Warningf(format string, args ...interface{}) {
    +	std.Warningf(format, args...)
    +}
    +
    +// Errorf logs a message at level Error on the standard logger.
    +func Errorf(format string, args ...interface{}) {
    +	std.Errorf(format, args...)
    +}
    +
    +// Panicf logs a message at level Panic on the standard logger.
    +func Panicf(format string, args ...interface{}) {
    +	std.Panicf(format, args...)
    +}
    +
    +// Fatalf logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
    +func Fatalf(format string, args ...interface{}) {
    +	std.Fatalf(format, args...)
    +}
    +
    +// Debugln logs a message at level Debug on the standard logger.
    +func Debugln(args ...interface{}) {
    +	std.Debugln(args...)
    +}
    +
    +// Println logs a message at level Info on the standard logger.
    +func Println(args ...interface{}) {
    +	std.Println(args...)
    +}
    +
    +// Infoln logs a message at level Info on the standard logger.
    +func Infoln(args ...interface{}) {
    +	std.Infoln(args...)
    +}
    +
    +// Warnln logs a message at level Warn on the standard logger.
    +func Warnln(args ...interface{}) {
    +	std.Warnln(args...)
    +}
    +
    +// Warningln logs a message at level Warn on the standard logger.
    +func Warningln(args ...interface{}) {
    +	std.Warningln(args...)
    +}
    +
    +// Errorln logs a message at level Error on the standard logger.
    +func Errorln(args ...interface{}) {
    +	std.Errorln(args...)
    +}
    +
    +// Panicln logs a message at level Panic on the standard logger.
    +func Panicln(args ...interface{}) {
    +	std.Panicln(args...)
    +}
    +
    +// Fatalln logs a message at level Fatal on the standard logger then the process will exit with status set to 1.
    +func Fatalln(args ...interface{}) {
    +	std.Fatalln(args...)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/formatter.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/formatter.go
    new file mode 100644
    index 00000000000..83c74947bea
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/formatter.go
    @@ -0,0 +1,51 @@
    +package logrus
    +
    +import "time"
    +
    +const defaultTimestampFormat = time.RFC3339
    +
    +// The Formatter interface is used to implement a custom Formatter. It takes an
    +// `Entry`. It exposes all the fields, including the default ones:
    +//
    +// * `entry.Data["msg"]`. The message passed from Info, Warn, Error ..
    +// * `entry.Data["time"]`. The timestamp.
    +// * `entry.Data["level"]. The level the entry was logged at.
    +//
    +// Any additional fields added with `WithField` or `WithFields` are also in
    +// `entry.Data`. Format is expected to return an array of bytes which are then
    +// logged to `logger.Out`.
    +type Formatter interface {
    +	Format(*Entry) ([]byte, error)
    +}
    +
    +// This is to not silently overwrite `time`, `msg` and `level` fields when
    +// dumping it. If this code wasn't there doing:
    +//
    +//  logrus.WithField("level", 1).Info("hello")
    +//
    +// Would just silently drop the user provided level. Instead with this code
    +// it'll logged as:
    +//
    +//  {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."}
    +//
    +// It's not exported because it's still using Data in an opinionated way. It's to
    +// avoid code duplication between the two default formatters.
    +func prefixFieldClashes(data Fields, fieldMap FieldMap) {
    +	timeKey := fieldMap.resolve(FieldKeyTime)
    +	if t, ok := data[timeKey]; ok {
    +		data["fields."+timeKey] = t
    +		delete(data, timeKey)
    +	}
    +
    +	msgKey := fieldMap.resolve(FieldKeyMsg)
    +	if m, ok := data[msgKey]; ok {
    +		data["fields."+msgKey] = m
    +		delete(data, msgKey)
    +	}
    +
    +	levelKey := fieldMap.resolve(FieldKeyLevel)
    +	if l, ok := data[levelKey]; ok {
    +		data["fields."+levelKey] = l
    +		delete(data, levelKey)
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/hooks.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/hooks.go
    new file mode 100644
    index 00000000000..3f151cdc392
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/hooks.go
    @@ -0,0 +1,34 @@
    +package logrus
    +
    +// A hook to be fired when logging on the logging levels returned from
    +// `Levels()` on your implementation of the interface. Note that this is not
    +// fired in a goroutine or a channel with workers, you should handle such
    +// functionality yourself if your call is non-blocking and you don't wish for
    +// the logging calls for levels returned from `Levels()` to block.
    +type Hook interface {
    +	Levels() []Level
    +	Fire(*Entry) error
    +}
    +
    +// Internal type for storing the hooks on a logger instance.
    +type LevelHooks map[Level][]Hook
    +
    +// Add a hook to an instance of logger. This is called with
    +// `log.Hooks.Add(new(MyHook))` where `MyHook` implements the `Hook` interface.
    +func (hooks LevelHooks) Add(hook Hook) {
    +	for _, level := range hook.Levels() {
    +		hooks[level] = append(hooks[level], hook)
    +	}
    +}
    +
    +// Fire all the hooks for the passed level. Used by `entry.log` to fire
    +// appropriate hooks for a log entry.
    +func (hooks LevelHooks) Fire(level Level, entry *Entry) error {
    +	for _, hook := range hooks[level] {
    +		if err := hook.Fire(entry); err != nil {
    +			return err
    +		}
    +	}
    +
    +	return nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/json_formatter.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/json_formatter.go
    new file mode 100644
    index 00000000000..dab17610f17
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/json_formatter.go
    @@ -0,0 +1,89 @@
    +package logrus
    +
    +import (
    +	"encoding/json"
    +	"fmt"
    +)
    +
    +type fieldKey string
    +
    +// FieldMap allows customization of the key names for default fields.
    +type FieldMap map[fieldKey]string
    +
    +// Default key names for the default fields
    +const (
    +	FieldKeyMsg   = "msg"
    +	FieldKeyLevel = "level"
    +	FieldKeyTime  = "time"
    +)
    +
    +func (f FieldMap) resolve(key fieldKey) string {
    +	if k, ok := f[key]; ok {
    +		return k
    +	}
    +
    +	return string(key)
    +}
    +
    +// JSONFormatter formats logs into parsable json
    +type JSONFormatter struct {
    +	// TimestampFormat sets the format used for marshaling timestamps.
    +	TimestampFormat string
    +
    +	// DisableTimestamp allows disabling automatic timestamps in output
    +	DisableTimestamp bool
    +
    +	// DataKey allows users to put all the log entry parameters into a nested dictionary at a given key.
    +	DataKey string
    +
    +	// FieldMap allows users to customize the names of keys for default fields.
    +	// As an example:
    +	// formatter := &JSONFormatter{
    +	//   	FieldMap: FieldMap{
    +	// 		 FieldKeyTime: "@timestamp",
    +	// 		 FieldKeyLevel: "@level",
    +	// 		 FieldKeyMsg: "@message",
    +	//    },
    +	// }
    +	FieldMap FieldMap
    +}
    +
    +// Format renders a single log entry
    +func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) {
    +	data := make(Fields, len(entry.Data)+3)
    +	for k, v := range entry.Data {
    +		switch v := v.(type) {
    +		case error:
    +			// Otherwise errors are ignored by `encoding/json`
    +			// https://github.com/sirupsen/logrus/issues/137
    +			data[k] = v.Error()
    +		default:
    +			data[k] = v
    +		}
    +	}
    +
    +	if f.DataKey != "" {
    +		newData := make(Fields, 4)
    +		newData[f.DataKey] = data
    +		data = newData
    +	}
    +
    +	prefixFieldClashes(data, f.FieldMap)
    +
    +	timestampFormat := f.TimestampFormat
    +	if timestampFormat == "" {
    +		timestampFormat = defaultTimestampFormat
    +	}
    +
    +	if !f.DisableTimestamp {
    +		data[f.FieldMap.resolve(FieldKeyTime)] = entry.Time.Format(timestampFormat)
    +	}
    +	data[f.FieldMap.resolve(FieldKeyMsg)] = entry.Message
    +	data[f.FieldMap.resolve(FieldKeyLevel)] = entry.Level.String()
    +
    +	serialized, err := json.Marshal(data)
    +	if err != nil {
    +		return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
    +	}
    +	return append(serialized, '\n'), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/logger.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/logger.go
    new file mode 100644
    index 00000000000..342f7977d85
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/logger.go
    @@ -0,0 +1,337 @@
    +package logrus
    +
    +import (
    +	"io"
    +	"os"
    +	"sync"
    +	"sync/atomic"
    +	"time"
    +)
    +
    +type Logger struct {
    +	// The logs are `io.Copy`'d to this in a mutex. It's common to set this to a
    +	// file, or leave it default which is `os.Stderr`. You can also set this to
    +	// something more adventorous, such as logging to Kafka.
    +	Out io.Writer
    +	// Hooks for the logger instance. These allow firing events based on logging
    +	// levels and log entries. For example, to send errors to an error tracking
    +	// service, log to StatsD or dump the core on fatal errors.
    +	Hooks LevelHooks
    +	// All log entries pass through the formatter before logged to Out. The
    +	// included formatters are `TextFormatter` and `JSONFormatter` for which
    +	// TextFormatter is the default. In development (when a TTY is attached) it
    +	// logs with colors, but to a file it wouldn't. You can easily implement your
    +	// own that implements the `Formatter` interface, see the `README` or included
    +	// formatters for examples.
    +	Formatter Formatter
    +	// The logging level the logger should log at. This is typically (and defaults
    +	// to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be
    +	// logged.
    +	Level Level
    +	// Used to sync writing to the log. Locking is enabled by Default
    +	mu MutexWrap
    +	// Reusable empty entry
    +	entryPool sync.Pool
    +}
    +
    +type MutexWrap struct {
    +	lock     sync.Mutex
    +	disabled bool
    +}
    +
    +func (mw *MutexWrap) Lock() {
    +	if !mw.disabled {
    +		mw.lock.Lock()
    +	}
    +}
    +
    +func (mw *MutexWrap) Unlock() {
    +	if !mw.disabled {
    +		mw.lock.Unlock()
    +	}
    +}
    +
    +func (mw *MutexWrap) Disable() {
    +	mw.disabled = true
    +}
    +
    +// Creates a new logger. Configuration should be set by changing `Formatter`,
    +// `Out` and `Hooks` directly on the default logger instance. You can also just
    +// instantiate your own:
    +//
    +//    var log = &Logger{
    +//      Out: os.Stderr,
    +//      Formatter: new(JSONFormatter),
    +//      Hooks: make(LevelHooks),
    +//      Level: logrus.DebugLevel,
    +//    }
    +//
    +// It's recommended to make this a global instance called `log`.
    +func New() *Logger {
    +	return &Logger{
    +		Out:       os.Stderr,
    +		Formatter: new(TextFormatter),
    +		Hooks:     make(LevelHooks),
    +		Level:     InfoLevel,
    +	}
    +}
    +
    +func (logger *Logger) newEntry() *Entry {
    +	entry, ok := logger.entryPool.Get().(*Entry)
    +	if ok {
    +		return entry
    +	}
    +	return NewEntry(logger)
    +}
    +
    +func (logger *Logger) releaseEntry(entry *Entry) {
    +	logger.entryPool.Put(entry)
    +}
    +
    +// Adds a field to the log entry, note that it doesn't log until you call
    +// Debug, Print, Info, Warn, Error, Fatal or Panic. It only creates a log entry.
    +// If you want multiple fields, use `WithFields`.
    +func (logger *Logger) WithField(key string, value interface{}) *Entry {
    +	entry := logger.newEntry()
    +	defer logger.releaseEntry(entry)
    +	return entry.WithField(key, value)
    +}
    +
    +// Adds a struct of fields to the log entry. All it does is call `WithField` for
    +// each `Field`.
    +func (logger *Logger) WithFields(fields Fields) *Entry {
    +	entry := logger.newEntry()
    +	defer logger.releaseEntry(entry)
    +	return entry.WithFields(fields)
    +}
    +
    +// Add an error as single field to the log entry.  All it does is call
    +// `WithError` for the given `error`.
    +func (logger *Logger) WithError(err error) *Entry {
    +	entry := logger.newEntry()
    +	defer logger.releaseEntry(entry)
    +	return entry.WithError(err)
    +}
    +
    +// Overrides the time of the log entry.
    +func (logger *Logger) WithTime(t time.Time) *Entry {
    +	entry := logger.newEntry()
    +	defer logger.releaseEntry(entry)
    +	return entry.WithTime(t)
    +}
    +
    +func (logger *Logger) Debugf(format string, args ...interface{}) {
    +	if logger.level() >= DebugLevel {
    +		entry := logger.newEntry()
    +		entry.Debugf(format, args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Infof(format string, args ...interface{}) {
    +	if logger.level() >= InfoLevel {
    +		entry := logger.newEntry()
    +		entry.Infof(format, args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Printf(format string, args ...interface{}) {
    +	entry := logger.newEntry()
    +	entry.Printf(format, args...)
    +	logger.releaseEntry(entry)
    +}
    +
    +func (logger *Logger) Warnf(format string, args ...interface{}) {
    +	if logger.level() >= WarnLevel {
    +		entry := logger.newEntry()
    +		entry.Warnf(format, args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Warningf(format string, args ...interface{}) {
    +	if logger.level() >= WarnLevel {
    +		entry := logger.newEntry()
    +		entry.Warnf(format, args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Errorf(format string, args ...interface{}) {
    +	if logger.level() >= ErrorLevel {
    +		entry := logger.newEntry()
    +		entry.Errorf(format, args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Fatalf(format string, args ...interface{}) {
    +	if logger.level() >= FatalLevel {
    +		entry := logger.newEntry()
    +		entry.Fatalf(format, args...)
    +		logger.releaseEntry(entry)
    +	}
    +	Exit(1)
    +}
    +
    +func (logger *Logger) Panicf(format string, args ...interface{}) {
    +	if logger.level() >= PanicLevel {
    +		entry := logger.newEntry()
    +		entry.Panicf(format, args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Debug(args ...interface{}) {
    +	if logger.level() >= DebugLevel {
    +		entry := logger.newEntry()
    +		entry.Debug(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Info(args ...interface{}) {
    +	if logger.level() >= InfoLevel {
    +		entry := logger.newEntry()
    +		entry.Info(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Print(args ...interface{}) {
    +	entry := logger.newEntry()
    +	entry.Info(args...)
    +	logger.releaseEntry(entry)
    +}
    +
    +func (logger *Logger) Warn(args ...interface{}) {
    +	if logger.level() >= WarnLevel {
    +		entry := logger.newEntry()
    +		entry.Warn(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Warning(args ...interface{}) {
    +	if logger.level() >= WarnLevel {
    +		entry := logger.newEntry()
    +		entry.Warn(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Error(args ...interface{}) {
    +	if logger.level() >= ErrorLevel {
    +		entry := logger.newEntry()
    +		entry.Error(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Fatal(args ...interface{}) {
    +	if logger.level() >= FatalLevel {
    +		entry := logger.newEntry()
    +		entry.Fatal(args...)
    +		logger.releaseEntry(entry)
    +	}
    +	Exit(1)
    +}
    +
    +func (logger *Logger) Panic(args ...interface{}) {
    +	if logger.level() >= PanicLevel {
    +		entry := logger.newEntry()
    +		entry.Panic(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Debugln(args ...interface{}) {
    +	if logger.level() >= DebugLevel {
    +		entry := logger.newEntry()
    +		entry.Debugln(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Infoln(args ...interface{}) {
    +	if logger.level() >= InfoLevel {
    +		entry := logger.newEntry()
    +		entry.Infoln(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Println(args ...interface{}) {
    +	entry := logger.newEntry()
    +	entry.Println(args...)
    +	logger.releaseEntry(entry)
    +}
    +
    +func (logger *Logger) Warnln(args ...interface{}) {
    +	if logger.level() >= WarnLevel {
    +		entry := logger.newEntry()
    +		entry.Warnln(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Warningln(args ...interface{}) {
    +	if logger.level() >= WarnLevel {
    +		entry := logger.newEntry()
    +		entry.Warnln(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Errorln(args ...interface{}) {
    +	if logger.level() >= ErrorLevel {
    +		entry := logger.newEntry()
    +		entry.Errorln(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +func (logger *Logger) Fatalln(args ...interface{}) {
    +	if logger.level() >= FatalLevel {
    +		entry := logger.newEntry()
    +		entry.Fatalln(args...)
    +		logger.releaseEntry(entry)
    +	}
    +	Exit(1)
    +}
    +
    +func (logger *Logger) Panicln(args ...interface{}) {
    +	if logger.level() >= PanicLevel {
    +		entry := logger.newEntry()
    +		entry.Panicln(args...)
    +		logger.releaseEntry(entry)
    +	}
    +}
    +
    +//When file is opened with appending mode, it's safe to
    +//write concurrently to a file (within 4k message on Linux).
    +//In these cases user can choose to disable the lock.
    +func (logger *Logger) SetNoLock() {
    +	logger.mu.Disable()
    +}
    +
    +func (logger *Logger) level() Level {
    +	return Level(atomic.LoadUint32((*uint32)(&logger.Level)))
    +}
    +
    +func (logger *Logger) SetLevel(level Level) {
    +	atomic.StoreUint32((*uint32)(&logger.Level), uint32(level))
    +}
    +
    +func (logger *Logger) SetOutput(out io.Writer) {
    +	logger.mu.Lock()
    +	defer logger.mu.Unlock()
    +	logger.Out = out
    +}
    +
    +func (logger *Logger) AddHook(hook Hook) {
    +	logger.mu.Lock()
    +	defer logger.mu.Unlock()
    +	logger.Hooks.Add(hook)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/logrus.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/logrus.go
    new file mode 100644
    index 00000000000..dd38999741e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/logrus.go
    @@ -0,0 +1,143 @@
    +package logrus
    +
    +import (
    +	"fmt"
    +	"log"
    +	"strings"
    +)
    +
    +// Fields type, used to pass to `WithFields`.
    +type Fields map[string]interface{}
    +
    +// Level type
    +type Level uint32
    +
    +// Convert the Level to a string. E.g. PanicLevel becomes "panic".
    +func (level Level) String() string {
    +	switch level {
    +	case DebugLevel:
    +		return "debug"
    +	case InfoLevel:
    +		return "info"
    +	case WarnLevel:
    +		return "warning"
    +	case ErrorLevel:
    +		return "error"
    +	case FatalLevel:
    +		return "fatal"
    +	case PanicLevel:
    +		return "panic"
    +	}
    +
    +	return "unknown"
    +}
    +
    +// ParseLevel takes a string level and returns the Logrus log level constant.
    +func ParseLevel(lvl string) (Level, error) {
    +	switch strings.ToLower(lvl) {
    +	case "panic":
    +		return PanicLevel, nil
    +	case "fatal":
    +		return FatalLevel, nil
    +	case "error":
    +		return ErrorLevel, nil
    +	case "warn", "warning":
    +		return WarnLevel, nil
    +	case "info":
    +		return InfoLevel, nil
    +	case "debug":
    +		return DebugLevel, nil
    +	}
    +
    +	var l Level
    +	return l, fmt.Errorf("not a valid logrus Level: %q", lvl)
    +}
    +
    +// A constant exposing all logging levels
    +var AllLevels = []Level{
    +	PanicLevel,
    +	FatalLevel,
    +	ErrorLevel,
    +	WarnLevel,
    +	InfoLevel,
    +	DebugLevel,
    +}
    +
    +// These are the different logging levels. You can set the logging level to log
    +// on your instance of logger, obtained with `logrus.New()`.
    +const (
    +	// PanicLevel level, highest level of severity. Logs and then calls panic with the
    +	// message passed to Debug, Info, ...
    +	PanicLevel Level = iota
    +	// FatalLevel level. Logs and then calls `os.Exit(1)`. It will exit even if the
    +	// logging level is set to Panic.
    +	FatalLevel
    +	// ErrorLevel level. Logs. Used for errors that should definitely be noted.
    +	// Commonly used for hooks to send errors to an error tracking service.
    +	ErrorLevel
    +	// WarnLevel level. Non-critical entries that deserve eyes.
    +	WarnLevel
    +	// InfoLevel level. General operational entries about what's going on inside the
    +	// application.
    +	InfoLevel
    +	// DebugLevel level. Usually only enabled when debugging. Very verbose logging.
    +	DebugLevel
    +)
    +
    +// Won't compile if StdLogger can't be realized by a log.Logger
    +var (
    +	_ StdLogger = &log.Logger{}
    +	_ StdLogger = &Entry{}
    +	_ StdLogger = &Logger{}
    +)
    +
    +// StdLogger is what your logrus-enabled library should take, that way
    +// it'll accept a stdlib logger and a logrus logger. There's no standard
    +// interface, this is the closest we get, unfortunately.
    +type StdLogger interface {
    +	Print(...interface{})
    +	Printf(string, ...interface{})
    +	Println(...interface{})
    +
    +	Fatal(...interface{})
    +	Fatalf(string, ...interface{})
    +	Fatalln(...interface{})
    +
    +	Panic(...interface{})
    +	Panicf(string, ...interface{})
    +	Panicln(...interface{})
    +}
    +
    +// The FieldLogger interface generalizes the Entry and Logger types
    +type FieldLogger interface {
    +	WithField(key string, value interface{}) *Entry
    +	WithFields(fields Fields) *Entry
    +	WithError(err error) *Entry
    +
    +	Debugf(format string, args ...interface{})
    +	Infof(format string, args ...interface{})
    +	Printf(format string, args ...interface{})
    +	Warnf(format string, args ...interface{})
    +	Warningf(format string, args ...interface{})
    +	Errorf(format string, args ...interface{})
    +	Fatalf(format string, args ...interface{})
    +	Panicf(format string, args ...interface{})
    +
    +	Debug(args ...interface{})
    +	Info(args ...interface{})
    +	Print(args ...interface{})
    +	Warn(args ...interface{})
    +	Warning(args ...interface{})
    +	Error(args ...interface{})
    +	Fatal(args ...interface{})
    +	Panic(args ...interface{})
    +
    +	Debugln(args ...interface{})
    +	Infoln(args ...interface{})
    +	Println(args ...interface{})
    +	Warnln(args ...interface{})
    +	Warningln(args ...interface{})
    +	Errorln(args ...interface{})
    +	Fatalln(args ...interface{})
    +	Panicln(args ...interface{})
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_bsd.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_bsd.go
    new file mode 100644
    index 00000000000..4880d13d26d
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_bsd.go
    @@ -0,0 +1,10 @@
    +// +build darwin freebsd openbsd netbsd dragonfly
    +// +build !appengine,!gopherjs
    +
    +package logrus
    +
    +import "golang.org/x/sys/unix"
    +
    +const ioctlReadTermios = unix.TIOCGETA
    +
    +type Termios unix.Termios
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go
    new file mode 100644
    index 00000000000..3de08e802fd
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_check_appengine.go
    @@ -0,0 +1,11 @@
    +// +build appengine gopherjs
    +
    +package logrus
    +
    +import (
    +	"io"
    +)
    +
    +func checkIfTerminal(w io.Writer) bool {
    +	return true
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go
    new file mode 100644
    index 00000000000..067047a1233
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_check_notappengine.go
    @@ -0,0 +1,19 @@
    +// +build !appengine,!gopherjs
    +
    +package logrus
    +
    +import (
    +	"io"
    +	"os"
    +
    +	"golang.org/x/crypto/ssh/terminal"
    +)
    +
    +func checkIfTerminal(w io.Writer) bool {
    +	switch v := w.(type) {
    +	case *os.File:
    +		return terminal.IsTerminal(int(v.Fd()))
    +	default:
    +		return false
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_linux.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_linux.go
    new file mode 100644
    index 00000000000..f29a0097c81
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/terminal_linux.go
    @@ -0,0 +1,14 @@
    +// Based on ssh/terminal:
    +// Copyright 2013 The Go Authors. All rights reserved.
    +// Use of this source code is governed by a BSD-style
    +// license that can be found in the LICENSE file.
    +
    +// +build !appengine,!gopherjs
    +
    +package logrus
    +
    +import "golang.org/x/sys/unix"
    +
    +const ioctlReadTermios = unix.TCGETS
    +
    +type Termios unix.Termios
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/text_formatter.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/text_formatter.go
    new file mode 100644
    index 00000000000..3e55040304d
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/text_formatter.go
    @@ -0,0 +1,195 @@
    +package logrus
    +
    +import (
    +	"bytes"
    +	"fmt"
    +	"sort"
    +	"strings"
    +	"sync"
    +	"time"
    +)
    +
    +const (
    +	nocolor = 0
    +	red     = 31
    +	green   = 32
    +	yellow  = 33
    +	blue    = 36
    +	gray    = 37
    +)
    +
    +var (
    +	baseTimestamp time.Time
    +	emptyFieldMap FieldMap
    +)
    +
    +func init() {
    +	baseTimestamp = time.Now()
    +}
    +
    +// TextFormatter formats logs into text
    +type TextFormatter struct {
    +	// Set to true to bypass checking for a TTY before outputting colors.
    +	ForceColors bool
    +
    +	// Force disabling colors.
    +	DisableColors bool
    +
    +	// Disable timestamp logging. useful when output is redirected to logging
    +	// system that already adds timestamps.
    +	DisableTimestamp bool
    +
    +	// Enable logging the full timestamp when a TTY is attached instead of just
    +	// the time passed since beginning of execution.
    +	FullTimestamp bool
    +
    +	// TimestampFormat to use for display when a full timestamp is printed
    +	TimestampFormat string
    +
    +	// The fields are sorted by default for a consistent output. For applications
    +	// that log extremely frequently and don't use the JSON formatter this may not
    +	// be desired.
    +	DisableSorting bool
    +
    +	// Disables the truncation of the level text to 4 characters.
    +	DisableLevelTruncation bool
    +
    +	// QuoteEmptyFields will wrap empty fields in quotes if true
    +	QuoteEmptyFields bool
    +
    +	// Whether the logger's out is to a terminal
    +	isTerminal bool
    +
    +	// FieldMap allows users to customize the names of keys for default fields.
    +	// As an example:
    +	// formatter := &TextFormatter{
    +	//     FieldMap: FieldMap{
    +	//         FieldKeyTime:  "@timestamp",
    +	//         FieldKeyLevel: "@level",
    +	//         FieldKeyMsg:   "@message"}}
    +	FieldMap FieldMap
    +
    +	sync.Once
    +}
    +
    +func (f *TextFormatter) init(entry *Entry) {
    +	if entry.Logger != nil {
    +		f.isTerminal = checkIfTerminal(entry.Logger.Out)
    +	}
    +}
    +
    +// Format renders a single log entry
    +func (f *TextFormatter) Format(entry *Entry) ([]byte, error) {
    +	prefixFieldClashes(entry.Data, f.FieldMap)
    +
    +	keys := make([]string, 0, len(entry.Data))
    +	for k := range entry.Data {
    +		keys = append(keys, k)
    +	}
    +
    +	if !f.DisableSorting {
    +		sort.Strings(keys)
    +	}
    +
    +	var b *bytes.Buffer
    +	if entry.Buffer != nil {
    +		b = entry.Buffer
    +	} else {
    +		b = &bytes.Buffer{}
    +	}
    +
    +	f.Do(func() { f.init(entry) })
    +
    +	isColored := (f.ForceColors || f.isTerminal) && !f.DisableColors
    +
    +	timestampFormat := f.TimestampFormat
    +	if timestampFormat == "" {
    +		timestampFormat = defaultTimestampFormat
    +	}
    +	if isColored {
    +		f.printColored(b, entry, keys, timestampFormat)
    +	} else {
    +		if !f.DisableTimestamp {
    +			f.appendKeyValue(b, f.FieldMap.resolve(FieldKeyTime), entry.Time.Format(timestampFormat))
    +		}
    +		f.appendKeyValue(b, f.FieldMap.resolve(FieldKeyLevel), entry.Level.String())
    +		if entry.Message != "" {
    +			f.appendKeyValue(b, f.FieldMap.resolve(FieldKeyMsg), entry.Message)
    +		}
    +		for _, key := range keys {
    +			f.appendKeyValue(b, key, entry.Data[key])
    +		}
    +	}
    +
    +	b.WriteByte('\n')
    +	return b.Bytes(), nil
    +}
    +
    +func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, timestampFormat string) {
    +	var levelColor int
    +	switch entry.Level {
    +	case DebugLevel:
    +		levelColor = gray
    +	case WarnLevel:
    +		levelColor = yellow
    +	case ErrorLevel, FatalLevel, PanicLevel:
    +		levelColor = red
    +	default:
    +		levelColor = blue
    +	}
    +
    +	levelText := strings.ToUpper(entry.Level.String())
    +	if !f.DisableLevelTruncation {
    +		levelText = levelText[0:4]
    +	}
    +
    +	if f.DisableTimestamp {
    +		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m %-44s ", levelColor, levelText, entry.Message)
    +	} else if !f.FullTimestamp {
    +		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d] %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), entry.Message)
    +	} else {
    +		fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s] %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), entry.Message)
    +	}
    +	for _, k := range keys {
    +		v := entry.Data[k]
    +		fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=", levelColor, k)
    +		f.appendValue(b, v)
    +	}
    +}
    +
    +func (f *TextFormatter) needsQuoting(text string) bool {
    +	if f.QuoteEmptyFields && len(text) == 0 {
    +		return true
    +	}
    +	for _, ch := range text {
    +		if !((ch >= 'a' && ch <= 'z') ||
    +			(ch >= 'A' && ch <= 'Z') ||
    +			(ch >= '0' && ch <= '9') ||
    +			ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') {
    +			return true
    +		}
    +	}
    +	return false
    +}
    +
    +func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interface{}) {
    +	if b.Len() > 0 {
    +		b.WriteByte(' ')
    +	}
    +	b.WriteString(key)
    +	b.WriteByte('=')
    +	f.appendValue(b, value)
    +}
    +
    +func (f *TextFormatter) appendValue(b *bytes.Buffer, value interface{}) {
    +	stringVal, ok := value.(string)
    +	if !ok {
    +		stringVal = fmt.Sprint(value)
    +	}
    +
    +	if !f.needsQuoting(stringVal) {
    +		b.WriteString(stringVal)
    +	} else {
    +		b.WriteString(fmt.Sprintf("%q", stringVal))
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/writer.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/writer.go
    new file mode 100644
    index 00000000000..7bdebedc60b
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/sirupsen/logrus/writer.go
    @@ -0,0 +1,62 @@
    +package logrus
    +
    +import (
    +	"bufio"
    +	"io"
    +	"runtime"
    +)
    +
    +func (logger *Logger) Writer() *io.PipeWriter {
    +	return logger.WriterLevel(InfoLevel)
    +}
    +
    +func (logger *Logger) WriterLevel(level Level) *io.PipeWriter {
    +	return NewEntry(logger).WriterLevel(level)
    +}
    +
    +func (entry *Entry) Writer() *io.PipeWriter {
    +	return entry.WriterLevel(InfoLevel)
    +}
    +
    +func (entry *Entry) WriterLevel(level Level) *io.PipeWriter {
    +	reader, writer := io.Pipe()
    +
    +	var printFunc func(args ...interface{})
    +
    +	switch level {
    +	case DebugLevel:
    +		printFunc = entry.Debug
    +	case InfoLevel:
    +		printFunc = entry.Info
    +	case WarnLevel:
    +		printFunc = entry.Warn
    +	case ErrorLevel:
    +		printFunc = entry.Error
    +	case FatalLevel:
    +		printFunc = entry.Fatal
    +	case PanicLevel:
    +		printFunc = entry.Panic
    +	default:
    +		printFunc = entry.Print
    +	}
    +
    +	go entry.writerScanner(reader, printFunc)
    +	runtime.SetFinalizer(writer, writerFinalizer)
    +
    +	return writer
    +}
    +
    +func (entry *Entry) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) {
    +	scanner := bufio.NewScanner(reader)
    +	for scanner.Scan() {
    +		printFunc(scanner.Text())
    +	}
    +	if err := scanner.Err(); err != nil {
    +		entry.Errorf("Error while reading from Writer: %s", err)
    +	}
    +	reader.Close()
    +}
    +
    +func writerFinalizer(writer *io.PipeWriter) {
    +	writer.Close()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CHANGELOG.md b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CHANGELOG.md
    new file mode 100644
    index 00000000000..1e0c1618b8d
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CHANGELOG.md
    @@ -0,0 +1,313 @@
    +# changelog
    +
    +### 0.18.0 (2018-05-24)
    +
    +* Add VirtualDiskManager wrapper to set UUID
    +
    +* Add vmxnet2, pcnet32 and sriov to VirtualDeviceList.EthernetCardTypes
    +
    +* Add new vSphere 6.7 APIs
    +
    +* Decrease LoginExtensionByCertificate tunnel usage
    +
    +* SAML token authentication support via SessionManager.LoginByToken
    +
    +* New SSO admin client for managing users
    +
    +* New STS client for issuing and renewing SAML tokens
    +
    +* New Lookup Service client for discovering endpoints such as STS and ssoadmin
    +
    +* Switch from gvt to go dep for managing dependencies
    +
    +### 0.17.1 (2018-03-19)
    +
    +* vcsim: add Destroy method for Folder and Datacenter types
    +
    +* In progress.Reader emit final report on EOF.
    +
    +* vcsim: add EventManager.QueryEvents
    +
    +### 0.17.0 (2018-02-28)
    +
    +* Add HostStorageSystem.AttachScsiLun method
    +
    +* Avoid possible panic in Datastore.Stat (#969)
    +
    +* Destroy event history collectors (#962)
    +
    +* Add VirtualDiskManager.CreateChildDisk method
    +
    +### 0.16.0 (2017-11-08)
    +
    +* Add support for SOAP request operation ID header
    +
    +* Moved ovf helpers from govc import.ovf command to ovf and nfc packages
    +
    +* Added guest/toolbox (client) package
    +
    +* Added toolbox package and toolbox command
    +
    +* Added simulator package and vcsim command
    +
    +### 0.15.0 (2017-06-19)
    +
    +* WaitOptions.MaxWaitSeconds is now optional
    +
    +* Support removal of ExtraConfig entries
    +
    +* GuestPosixFileAttributes OwnerId and GroupId fields are now pointers,
    +  rather than omitempty ints to allow chown with root uid:gid
    +
    +* Updated examples/ using view package
    +
    +* Add DatastoreFile.TailFunc method
    +
    +* Export VirtualMachine.FindSnapshot method
    +
    +* Add AuthorizationManager {Enable,Disable}Methods
    +
    +* Add PBM client
    +
    +### 0.14.0 (2017-04-08)
    +
    +* Add view.ContainerView type and methods
    +
    +* Add Collector.RetrieveWithFilter method
    +
    +* Add property.Filter type
    +
    +* Implement EthernetCardBackingInfo for OpaqueNetwork
    +
    +* Finder: support changing object root in find mode
    +
    +* Add VirtualDiskManager.QueryVirtualDiskInfo
    +
    +* Add performance.Manager APIs
    +
    +### 0.13.0 (2017-03-02)
    +
    +* Add DatastoreFileManager API wrapper
    +
    +* Add HostVsanInternalSystem API wrappers
    +
    +* Add Container support to view package
    +
    +* Finder supports Folder recursion without specifying a path
    +
    +* Add VirtualMachine.QueryConfigTarget method
    +
    +* Add device option to VirtualMachine.WaitForNetIP
    +
    +* Remove _Task suffix from vapp methods
    +
    +### 0.12.1 (2016-12-19)
    +
    +* Add DiagnosticLog helper
    +
    +* Add DatastorePath helper
    +
    +### 0.12.0 (2016-12-01)
    +
    +* Disable use of service ticket for datastore HTTP access by default
    +
    +* Attach context to HTTP requests for cancellations
    +
    +* Update to vim25/6.5 API
    +
    +### 0.11.4 (2016-11-15)
    +
    +* Add object.AuthorizationManager methods: RetrieveRolePermissions, RetrieveAllPermissions, AddRole, RemoveRole, UpdateRole
    +
    +### 0.11.3 (2016-11-08)
    +
    +* Allow DatastoreFile.Follow reader to drain current body after stopping
    +
    +### 0.11.2 (2016-11-01)
    +
    +* Avoid possible NPE in VirtualMachine.Device method
    +
    +* Add support for OpaqueNetwork type to Finder
    +
    +* Add HostConfigManager.AccountManager support for ESX 5.5
    +
    +### 0.11.1 (2016-10-27)
    +
    +* Add Finder.ResourcePoolListAll method
    +
    +### 0.11.0 (2016-10-25)
    +
    +* Add object.DistributedVirtualPortgroup.Reconfigure method
    +
    +### 0.10.0 (2016-10-20)
    +
    +* Add option to set soap.Client.UserAgent
    +
    +* Add service ticket thumbprint validation
    +
    +* Update use of http.DefaultTransport fields to 1.7
    +
    +* Set default locale to en_US (override with GOVMOMI_LOCALE env var)
    +
    +* Add object.HostCertificateInfo (types.HostCertificateManagerCertificateInfo helpers)
    +
    +* Add object.HostCertificateManager type and HostConfigManager.CertificateManager method
    +
    +* Add soap.Client SetRootCAs and SetDialTLS methods
    +
    +### 0.9.0 (2016-09-09)
    +
    +* Add object.DatastoreFile helpers for streaming and tailing datastore files
    +
    +* Add object VirtualMachine.Unregister method
    +
    +* Add object.ListView methods: Add, Remove, Reset
    +
    +* Update to Go 1.7 - using stdlib's context package
    +
    +### 0.8.0 (2016-06-30)
    +
    +* Add session.Manager.AcquireLocalTicket
    +
    +* Include StoragePod in Finder.FolderList
    +
    +* Add Finder methods for finding by ManagedObjectReference: Element, ObjectReference
    +
    +* Add mo.ManagedObjectReference methods: Reference, String, FromString
    +
    +* Add support using SessionManagerGenericServiceTicket.HostName for Datastore HTTP access
    +
    +### 0.7.1 (2016-06-03)
    +
    +* Fix object.ObjectName method
    +
    +### 0.7.0 (2016-06-02)
    +
    +* Move InventoryPath field to object.Common
    +
    +* Add HostDatastoreSystem.CreateLocalDatastore method
    +
    +* Add DatastoreNamespaceManager methods: CreateDirectory, DeleteDirectory
    +
    +* Add HostServiceSystem
    +
    +* Add HostStorageSystem methods: MarkAsSdd, MarkAsNonSdd, MarkAsLocal, MarkAsNonLocal
    +
    +* Add HostStorageSystem.RescanAllHba method
    +
    +### 0.6.2 (2016-05-11)
    +
    +* Get complete file details in Datastore.Stat
    +
    +* SOAP decoding fixes
    +
    +* Add VirtualMachine.RemoveAllSnapshot
    +
    +### 0.6.1 (2016-04-30)
    +
    +* Fix mo.Entity interface
    +
    +### 0.6.0 (2016-04-29)
    +
    +* Add Common.Rename method
    +
    +* Add mo.Entity interface
    +
    +* Add OptionManager
    +
    +* Add Finder.FolderList method
    +
    +* Add VirtualMachine.WaitForNetIP method
    +
    +* Add VirtualMachine.RevertToSnapshot method
    +
    +* Add Datastore.Download method
    +
    +### 0.5.0 (2016-03-30)
    +
    +Generated fields using xsd type 'int' change to Go type 'int32'
    +
    +VirtualDevice.UnitNumber field changed to pointer type
    +
    +### 0.4.0 (2016-02-26)
    +
    +* Add method to convert virtual device list to array with virtual device
    +  changes that can be used in the VirtualMachineConfigSpec.
    +
    +* Make datastore cluster traversable in lister
    +
    +* Add finder.DatastoreCluster methods (also known as storage pods)
    +
    +* Add Drone CI check
    +
    +* Add object.Datastore Type and AttachedClusterHosts methods
    +
    +* Add finder.*OrDefault methods
    +
    +### 0.3.0 (2016-01-16)
    +
    +* Add object.VirtualNicManager wrapper
    +
    +* Add object.HostVsanSystem wrapper
    +
    +* Add object.HostSystem methods: EnterMaintenanceMode, ExitMaintenanceMode, Disconnect, Reconnect
    +
    +* Add finder.Folder method
    +
    +* Add object.Common.Destroy method
    +
    +* Add object.ComputeResource.Reconfigure method
    +
    +* Add license.AssignmentManager wrapper
    +
    +* Add object.HostFirewallSystem wrapper
    +
    +* Add object.DiagnosticManager wrapper
    +
    +* Add LoginExtensionByCertificate support
    +
    +* Add object.ExtensionManager
    +
    +...
    +
    +### 0.2.0 (2015-09-15)
    +
    +* Update to vim25/6.0 API
    +
    +* Stop returning children from `ManagedObjectList`
    +
    +    Change the `ManagedObjectList` function in the `find` package to only
    +    return the managed objects specified by the path argument and not their
    +    children. The original behavior was used by govc's `ls` command and is
    +    now available in the newly added function `ManagedObjectListChildren`.
    +
    +* Add retry functionality to vim25 package
    +
    +* Change finder functions to no longer take varargs
    +
    +    The `find` package had functions to return a list of objects, given a
    +    variable number of patterns. This makes it impossible to distinguish which
    +    patterns produced results and which ones didn't.
    +
    +    In particular for govc, where multiple arguments can be passed from the
    +    command line, it is useful to let the user know which ones produce results
    +    and which ones don't.
    +
    +    To evaluate multiple patterns, the user should call the find functions
    +    multiple times (either serially or in parallel).
    +
    +* Make optional boolean fields pointers (`vim25/types`).
    +
    +    False is the zero value of a boolean field, which means they are not serialized
    +    if the field is marked "omitempty". If the field is a pointer instead, the zero
    +    value will be the nil pointer, and both true and false values are serialized.
    +
    +### 0.1.0 (2015-03-17)
    +
    +Prior to this version the API of this library was in flux.
    +
    +Notable changes w.r.t. the state of this library before March 2015 are:
    +
    +* All functions that may execute a request take a `context.Context` parameter.
    +* The `vim25` package contains a minimal client implementation.
    +* The property collector and its convenience functions live in the `property` package.
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CONTRIBUTING.md b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CONTRIBUTING.md
    new file mode 100644
    index 00000000000..f6645cbf4f1
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CONTRIBUTING.md
    @@ -0,0 +1,101 @@
    +# Contributing to govmomi
    +
    +## Getting started
    +
    +First, fork the repository on GitHub to your personal account.
    +
    +Note that _GOPATH_ can be any directory, the example below uses _$HOME/govmomi_.
    +Change _$USER_ below to your github username if they are not the same.
    +
    +``` shell
    +export GOPATH=$HOME/govmomi
    +go get github.com/vmware/govmomi
    +cd $GOPATH/src/github.com/vmware/govmomi
    +git config push.default nothing # anything to avoid pushing to vmware/govmomi by default
    +git remote rename origin vmware
    +git remote add $USER git@github.com:$USER/govmomi.git
    +git fetch $USER
    +```
    +
    +## Installing from source
    +
    +Compile the govmomi libraries and install govc using:
    +
    +``` shell
    +go install -v github.com/vmware/govmomi/govc
    +```
    +
    +Note that **govc/build.sh** is only used for building release binaries.
    +
    +## Contribution flow
    +
    +This is a rough outline of what a contributor's workflow looks like:
    +
    +- Create a topic branch from where you want to base your work.
    +- Make commits of logical units.
    +- Make sure your commit messages are in the proper format (see below).
    +- Update CHANGELOG.md and/or govc/CHANGELOG.md when appropriate.
    +- Push your changes to a topic branch in your fork of the repository.
    +- Submit a pull request to vmware/govmomi.
    +
    +Example:
    +
    +``` shell
    +git checkout -b my-new-feature vmware/master
    +git commit -a
    +git push $USER my-new-feature
    +```
    +
    +### Stay in sync with upstream
    +
    +When your branch gets out of sync with the vmware/master branch, use the following to update:
    +
    +``` shell
    +git checkout my-new-feature
    +git fetch -a
    +git rebase vmware/master
    +git push --force-with-lease $USER my-new-feature
    +```
    +
    +### Updating pull requests
    +
    +If your PR fails to pass CI or needs changes based on code review, you'll most likely want to squash these changes into
    +existing commits.
    +
    +If your pull request contains a single commit or your changes are related to the most recent commit, you can simply
    +amend the commit.
    +
    +``` shell
    +git add .
    +git commit --amend
    +git push --force-with-lease $USER my-new-feature
    +```
    +
    +If you need to squash changes into an earlier commit, you can use:
    +
    +``` shell
    +git add .
    +git commit --fixup 
    +git rebase -i --autosquash vmware/master
    +git push --force-with-lease $USER my-new-feature
    +```
    +
    +Be sure to add a comment to the PR indicating your new changes are ready to review, as github does not generate a
    +notification when you git push.
    +
    +### Code style
    +
    +The coding style suggested by the Golang community is used in govmomi. See the
    +[style doc](https://github.com/golang/go/wiki/CodeReviewComments) for details.
    +
    +Try to limit column width to 120 characters for both code and markdown documents such as this one.
    +
    +### Format of the Commit Message
    +
    +We follow the conventions on [How to Write a Git Commit Message](http://chris.beams.io/posts/git-commit/).
    +
    +Be sure to include any related GitHub issue references in the commit message.
    +
    +## Reporting Bugs and Creating Issues
    +
    +When opening a new issue, try to roughly follow the commit message format conventions above.
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CONTRIBUTORS b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CONTRIBUTORS
    new file mode 100644
    index 00000000000..1fd37b609d1
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/CONTRIBUTORS
    @@ -0,0 +1,83 @@
    +# People who can (and typically have) contributed to this repository.
    +#
    +# This script is generated by contributors.sh
    +#
    +
    +Abhijeet Kasurde 
    +abrarshivani 
    +Adam Shannon 
    +akutz 
    +Alessandro Cortiana 
    +Alex Bozhenko 
    +Alvaro Miranda 
    +amandahla 
    +Amanda H. L. de Andrade 
    +Amit Bathla 
    +amit bezalel 
    +Andrew Chin 
    +Anfernee Yongkun Gui 
    +aniketGslab 
    +Arran Walker 
    +Aryeh Weinreb 
    +Austin Parker 
    +Balu Dontu 
    +bastienbc 
    +Bob Killen 
    +Brad Fitzpatrick 
    +Bruce Downs 
    +Cédric Blomart 
    +Chris Marchesi 
    +Christian Höltje 
    +Clint Greenwood 
    +Danny Lockard 
    +Dave Tucker 
    +Davide Agnello 
    +David Stark 
    +Deric Crago 
    +Doug MacEachern 
    +Eloy Coto 
    +Eric Gray 
    +Eric Yutao 
    +Erik Hollensbe 
    +Fabio Rapposelli 
    +Faiyaz Ahmed 
    +forkbomber 
    +Gavin Gray 
    +Gavrie Philipson 
    +George Hicken 
    +Gerrit Renker 
    +gthombare 
    +Hasan Mahmood 
    +Henrik Hodne 
    +Isaac Rodman 
    +Ivan Porto Carrero 
    +Jason Kincl 
    +Jeremy Canady 
    +jeremy-clerc 
    +João Pereira 
    +Jorge Sevilla 
    +leslie-qiwa 
    +Louie Jiang 
    +Marc Carmier 
    +Matthew Cosgrove 
    +Mevan Samaratunga 
    +Nicolas Lamirault 
    +Omar Kohl 
    +Parham Alvani 
    +Pieter Noordhuis 
    +runner.mei 
    +S.Çağlar Onur 
    +Sergey Ignatov 
    +Steve Purcell 
    +Takaaki Furukawa 
    +tanishi 
    +Ted Zlatanov 
    +Thibaut Ackermann 
    +Trevor Dawe 
    +Vadim Egorov 
    +Volodymyr Bobyr 
    +Witold Krecicki 
    +Yang Yang 
    +Yuya Kusakabe 
    +Zach Tucker 
    +Zee Yang 
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Dockerfile b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Dockerfile
    new file mode 100644
    index 00000000000..4f84fadaafb
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Dockerfile
    @@ -0,0 +1,4 @@
    +FROM scratch
    +LABEL maintainer="fabio@vmware.com"
    +COPY govc /
    +ENTRYPOINT [ "/govc" ]
    \ No newline at end of file
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Gopkg.lock b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Gopkg.lock
    new file mode 100644
    index 00000000000..0f9a8f8c265
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Gopkg.lock
    @@ -0,0 +1,44 @@
    +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
    +
    +
    +[[projects]]
    +  branch = "improvements"
    +  name = "github.com/davecgh/go-xdr"
    +  packages = ["xdr2"]
    +  revision = "4930550ba2e22f87187498acfd78348b15f4e7a8"
    +  source = "https://github.com/rasky/go-xdr"
    +
    +[[projects]]
    +  name = "github.com/google/uuid"
    +  packages = ["."]
    +  revision = "6a5e28554805e78ea6141142aba763936c4761c0"
    +
    +[[projects]]
    +  branch = "govmomi"
    +  name = "github.com/kr/pretty"
    +  packages = ["."]
    +  revision = "2ee9d7453c02ef7fa518a83ae23644eb8872186a"
    +  source = "https://github.com/dougm/pretty"
    +
    +[[projects]]
    +  branch = "master"
    +  name = "github.com/kr/text"
    +  packages = ["."]
    +  revision = "7cafcd837844e784b526369c9bce262804aebc60"
    +
    +[[projects]]
    +  branch = "master"
    +  name = "github.com/vmware/vmw-guestinfo"
    +  packages = [
    +    "bdoor",
    +    "message",
    +    "vmcheck"
    +  ]
    +  revision = "25eff159a728be87e103a0b8045e08273f4dbec4"
    +
    +[solve-meta]
    +  analyzer-name = "dep"
    +  analyzer-version = 1
    +  inputs-digest = "376638fa6c0621cbd980caf8fc53494d880886f100663da8de47ecb6e596e439"
    +  solver-name = "gps-cdcl"
    +  solver-version = 1
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Gopkg.toml b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Gopkg.toml
    new file mode 100644
    index 00000000000..4c4d6765e6f
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Gopkg.toml
    @@ -0,0 +1,19 @@
    +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
    +# for detailed Gopkg.toml documentation.
    +#
    +# Refer to https://github.com/toml-lang/toml for detailed TOML docs.
    +
    +[prune]
    +  non-go = true
    +  go-tests = true
    +  unused-packages = true
    +
    +[[constraint]]
    +  branch = "improvements"
    +  name = "github.com/davecgh/go-xdr"
    +  source = "https://github.com/rasky/go-xdr"
    +
    +[[constraint]]
    +  branch = "govmomi"
    +  name = "github.com/kr/pretty"
    +  source = "https://github.com/dougm/pretty"
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/LICENSE.txt b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/LICENSE.txt
    new file mode 100644
    index 00000000000..d6456956733
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/LICENSE.txt
    @@ -0,0 +1,202 @@
    +
    +                                 Apache License
    +                           Version 2.0, January 2004
    +                        http://www.apache.org/licenses/
    +
    +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    +
    +   1. Definitions.
    +
    +      "License" shall mean the terms and conditions for use, reproduction,
    +      and distribution as defined by Sections 1 through 9 of this document.
    +
    +      "Licensor" shall mean the copyright owner or entity authorized by
    +      the copyright owner that is granting the License.
    +
    +      "Legal Entity" shall mean the union of the acting entity and all
    +      other entities that control, are controlled by, or are under common
    +      control with that entity. For the purposes of this definition,
    +      "control" means (i) the power, direct or indirect, to cause the
    +      direction or management of such entity, whether by contract or
    +      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    +      outstanding shares, or (iii) beneficial ownership of such entity.
    +
    +      "You" (or "Your") shall mean an individual or Legal Entity
    +      exercising permissions granted by this License.
    +
    +      "Source" form shall mean the preferred form for making modifications,
    +      including but not limited to software source code, documentation
    +      source, and configuration files.
    +
    +      "Object" form shall mean any form resulting from mechanical
    +      transformation or translation of a Source form, including but
    +      not limited to compiled object code, generated documentation,
    +      and conversions to other media types.
    +
    +      "Work" shall mean the work of authorship, whether in Source or
    +      Object form, made available under the License, as indicated by a
    +      copyright notice that is included in or attached to the work
    +      (an example is provided in the Appendix below).
    +
    +      "Derivative Works" shall mean any work, whether in Source or Object
    +      form, that is based on (or derived from) the Work and for which the
    +      editorial revisions, annotations, elaborations, or other modifications
    +      represent, as a whole, an original work of authorship. For the purposes
    +      of this License, Derivative Works shall not include works that remain
    +      separable from, or merely link (or bind by name) to the interfaces of,
    +      the Work and Derivative Works thereof.
    +
    +      "Contribution" shall mean any work of authorship, including
    +      the original version of the Work and any modifications or additions
    +      to that Work or Derivative Works thereof, that is intentionally
    +      submitted to Licensor for inclusion in the Work by the copyright owner
    +      or by an individual or Legal Entity authorized to submit on behalf of
    +      the copyright owner. For the purposes of this definition, "submitted"
    +      means any form of electronic, verbal, or written communication sent
    +      to the Licensor or its representatives, including but not limited to
    +      communication on electronic mailing lists, source code control systems,
    +      and issue tracking systems that are managed by, or on behalf of, the
    +      Licensor for the purpose of discussing and improving the Work, but
    +      excluding communication that is conspicuously marked or otherwise
    +      designated in writing by the copyright owner as "Not a Contribution."
    +
    +      "Contributor" shall mean Licensor and any individual or Legal Entity
    +      on behalf of whom a Contribution has been received by Licensor and
    +      subsequently incorporated within the Work.
    +
    +   2. Grant of Copyright License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      copyright license to reproduce, prepare Derivative Works of,
    +      publicly display, publicly perform, sublicense, and distribute the
    +      Work and such Derivative Works in Source or Object form.
    +
    +   3. Grant of Patent License. Subject to the terms and conditions of
    +      this License, each Contributor hereby grants to You a perpetual,
    +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    +      (except as stated in this section) patent license to make, have made,
    +      use, offer to sell, sell, import, and otherwise transfer the Work,
    +      where such license applies only to those patent claims licensable
    +      by such Contributor that are necessarily infringed by their
    +      Contribution(s) alone or by combination of their Contribution(s)
    +      with the Work to which such Contribution(s) was submitted. If You
    +      institute patent litigation against any entity (including a
    +      cross-claim or counterclaim in a lawsuit) alleging that the Work
    +      or a Contribution incorporated within the Work constitutes direct
    +      or contributory patent infringement, then any patent licenses
    +      granted to You under this License for that Work shall terminate
    +      as of the date such litigation is filed.
    +
    +   4. Redistribution. You may reproduce and distribute copies of the
    +      Work or Derivative Works thereof in any medium, with or without
    +      modifications, and in Source or Object form, provided that You
    +      meet the following conditions:
    +
    +      (a) You must give any other recipients of the Work or
    +          Derivative Works a copy of this License; and
    +
    +      (b) You must cause any modified files to carry prominent notices
    +          stating that You changed the files; and
    +
    +      (c) You must retain, in the Source form of any Derivative Works
    +          that You distribute, all copyright, patent, trademark, and
    +          attribution notices from the Source form of the Work,
    +          excluding those notices that do not pertain to any part of
    +          the Derivative Works; and
    +
    +      (d) If the Work includes a "NOTICE" text file as part of its
    +          distribution, then any Derivative Works that You distribute must
    +          include a readable copy of the attribution notices contained
    +          within such NOTICE file, excluding those notices that do not
    +          pertain to any part of the Derivative Works, in at least one
    +          of the following places: within a NOTICE text file distributed
    +          as part of the Derivative Works; within the Source form or
    +          documentation, if provided along with the Derivative Works; or,
    +          within a display generated by the Derivative Works, if and
    +          wherever such third-party notices normally appear. The contents
    +          of the NOTICE file are for informational purposes only and
    +          do not modify the License. You may add Your own attribution
    +          notices within Derivative Works that You distribute, alongside
    +          or as an addendum to the NOTICE text from the Work, provided
    +          that such additional attribution notices cannot be construed
    +          as modifying the License.
    +
    +      You may add Your own copyright statement to Your modifications and
    +      may provide additional or different license terms and conditions
    +      for use, reproduction, or distribution of Your modifications, or
    +      for any such Derivative Works as a whole, provided Your use,
    +      reproduction, and distribution of the Work otherwise complies with
    +      the conditions stated in this License.
    +
    +   5. Submission of Contributions. Unless You explicitly state otherwise,
    +      any Contribution intentionally submitted for inclusion in the Work
    +      by You to the Licensor shall be under the terms and conditions of
    +      this License, without any additional terms or conditions.
    +      Notwithstanding the above, nothing herein shall supersede or modify
    +      the terms of any separate license agreement you may have executed
    +      with Licensor regarding such Contributions.
    +
    +   6. Trademarks. This License does not grant permission to use the trade
    +      names, trademarks, service marks, or product names of the Licensor,
    +      except as required for reasonable and customary use in describing the
    +      origin of the Work and reproducing the content of the NOTICE file.
    +
    +   7. Disclaimer of Warranty. Unless required by applicable law or
    +      agreed to in writing, Licensor provides the Work (and each
    +      Contributor provides its Contributions) on an "AS IS" BASIS,
    +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    +      implied, including, without limitation, any warranties or conditions
    +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    +      PARTICULAR PURPOSE. You are solely responsible for determining the
    +      appropriateness of using or redistributing the Work and assume any
    +      risks associated with Your exercise of permissions under this License.
    +
    +   8. Limitation of Liability. In no event and under no legal theory,
    +      whether in tort (including negligence), contract, or otherwise,
    +      unless required by applicable law (such as deliberate and grossly
    +      negligent acts) or agreed to in writing, shall any Contributor be
    +      liable to You for damages, including any direct, indirect, special,
    +      incidental, or consequential damages of any character arising as a
    +      result of this License or out of the use or inability to use the
    +      Work (including but not limited to damages for loss of goodwill,
    +      work stoppage, computer failure or malfunction, or any and all
    +      other commercial damages or losses), even if such Contributor
    +      has been advised of the possibility of such damages.
    +
    +   9. Accepting Warranty or Additional Liability. While redistributing
    +      the Work or Derivative Works thereof, You may choose to offer,
    +      and charge a fee for, acceptance of support, warranty, indemnity,
    +      or other liability obligations and/or rights consistent with this
    +      License. However, in accepting such obligations, You may act only
    +      on Your own behalf and on Your sole responsibility, not on behalf
    +      of any other Contributor, and only if You agree to indemnify,
    +      defend, and hold each Contributor harmless for any liability
    +      incurred by, or claims asserted against, such Contributor by reason
    +      of your accepting any such warranty or additional liability.
    +
    +   END OF TERMS AND CONDITIONS
    +
    +   APPENDIX: How to apply the Apache License to your work.
    +
    +      To apply the Apache License to your work, attach the following
    +      boilerplate notice, with the fields enclosed by brackets "[]"
    +      replaced with your own identifying information. (Don't include
    +      the brackets!)  The text should be enclosed in the appropriate
    +      comment syntax for the file format. We also recommend that a
    +      file or class name and description of purpose be included on the
    +      same "printed page" as the copyright notice for easier
    +      identification within third-party archives.
    +
    +   Copyright [yyyy] [name of copyright owner]
    +
    +   Licensed under the Apache License, Version 2.0 (the "License");
    +   you may not use this file except in compliance with the License.
    +   You may obtain a copy of the License at
    +
    +       http://www.apache.org/licenses/LICENSE-2.0
    +
    +   Unless required by applicable law or agreed to in writing, software
    +   distributed under the License is distributed on an "AS IS" BASIS,
    +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +   See the License for the specific language governing permissions and
    +   limitations under the License.
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Makefile b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Makefile
    new file mode 100644
    index 00000000000..e0e03ecd3f5
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/Makefile
    @@ -0,0 +1,29 @@
    +.PHONY: test
    +
    +all: check test
    +
    +check: goimports govet
    +
    +goimports:
    +	@echo checking go imports...
    +	@go get golang.org/x/tools/cmd/goimports
    +	@! goimports -d . 2>&1 | egrep -v '^$$'
    +
    +govet:
    +	@echo checking go vet...
    +	@go tool vet -structtags=false -methods=false $$(find . -mindepth 1 -maxdepth 1 -type d -not -name vendor)
    +
    +install:
    +	go install -v github.com/vmware/govmomi/govc
    +	go install -v github.com/vmware/govmomi/vcsim
    +
    +go-test:
    +	go test -race -v $(TEST_OPTS) ./...
    +
    +govc-test: install
    +	(cd govc/test && ./vendor/github.com/sstephenson/bats/libexec/bats -t .)
    +
    +test: go-test govc-test
    +
    +doc: install
    +	./govc/usage.sh > ./govc/USAGE.md
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/README.md b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/README.md
    new file mode 100644
    index 00000000000..08bc8df8089
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/README.md
    @@ -0,0 +1,86 @@
    +[![Build Status](https://travis-ci.org/vmware/govmomi.png?branch=master)](https://travis-ci.org/vmware/govmomi)
    +[![Go Report Card](https://goreportcard.com/badge/github.com/vmware/govmomi)](https://goreportcard.com/report/github.com/vmware/govmomi)
    +
    +# govmomi
    +
    +A Go library for interacting with VMware vSphere APIs (ESXi and/or vCenter).
    +
    +In addition to the vSphere API client, this repository includes:
    +
    +* [govc](./govc) - vSphere CLI
    +
    +* [vcsim](./vcsim) - vSphere API mock framework
    +
    +* [toolbox](./toolbox) - VM guest tools framework
    +
    +## Compatibility
    +
    +This library is built for and tested against ESXi and vCenter 6.0, 6.5 and 6.7.
    +
    +It may work with versions 5.5 and 5.1, but neither are officially supported.
    +
    +## Documentation
    +
    +The APIs exposed by this library very closely follow the API described in the [VMware vSphere API Reference Documentation][apiref].
    +Refer to this document to become familiar with the upstream API.
    +
    +The code in the `govmomi` package is a wrapper for the code that is generated from the vSphere API description.
    +It primarily provides convenience functions for working with the vSphere API.
    +See [godoc.org][godoc] for documentation.
    +
    +[apiref]:http://pubs.vmware.com/vsphere-6-5/index.jsp#com.vmware.wssdk.apiref.doc/right-pane.html
    +[godoc]:http://godoc.org/github.com/vmware/govmomi
    +
    +## Installation
    +
    +```sh
    +go get -u github.com/vmware/govmomi
    +```
    +
    +## Discussion
    +
    +Contributors and users are encouraged to collaborate using GitHub issues and/or
    +[Slack](https://vmwarecode.slack.com/messages/govmomi).
    +Access to Slack requires a [VMware {code} membership](https://code.vmware.com/join/).
    +
    +## Status
    +
    +Changes to the API are subject to [semantic versioning](http://semver.org).
    +
    +Refer to the [CHANGELOG](CHANGELOG.md) for version to version changes.
    +
    +## Projects using govmomi
    +
    +* [Docker Machine](https://github.com/docker/machine/tree/master/drivers/vmwarevsphere)
    +
    +* [Docker InfraKit](https://github.com/docker/infrakit/tree/master/pkg/provider/vsphere)
    +
    +* [Docker LinuxKit](https://github.com/linuxkit/linuxkit/tree/master/src/cmd/linuxkit)
    +
    +* [Kubernetes](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/vsphere)
    +
    +* [Kubernetes kops](https://github.com/kubernetes/kops/tree/master/upup/pkg/fi/cloudup/vsphere)
    +
    +* [Terraform](https://github.com/terraform-providers/terraform-provider-vsphere)
    +
    +* [Packer](https://github.com/jetbrains-infra/packer-builder-vsphere)
    +
    +* [VMware VIC Engine](https://github.com/vmware/vic)
    +
    +* [Travis CI](https://github.com/travis-ci/jupiter-brain)
    +
    +* [collectd-vsphere](https://github.com/travis-ci/collectd-vsphere)
    +
    +* [Gru](https://github.com/dnaeon/gru)
    +
    +* [Libretto](https://github.com/apcera/libretto/tree/master/virtualmachine/vsphere)
    +
    +## Related projects
    +
    +* [rbvmomi](https://github.com/vmware/rbvmomi)
    +
    +* [pyvmomi](https://github.com/vmware/pyvmomi)
    +
    +## License
    +
    +govmomi is available under the [Apache 2 license](LICENSE).
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/client.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/client.go
    new file mode 100644
    index 00000000000..ad49fe6bf7d
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/client.go
    @@ -0,0 +1,136 @@
    +/*
    +Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +/*
    +This package is the root package of the govmomi library.
    +
    +The library is structured as follows:
    +
    +Package vim25
    +
    +The minimal usable functionality is available through the vim25 package.
    +It contains subpackages that contain generated types, managed objects, and all
    +available methods. The vim25 package is entirely independent of the other
    +packages in the govmomi tree -- it has no dependencies on its peers.
    +
    +The vim25 package itself contains a client structure that is
    +passed around throughout the entire library. It abstracts a session and its
    +immutable state. See the vim25 package for more information.
    +
    +Package session
    +
    +The session package contains an abstraction for the session manager that allows
    +a user to login and logout. It also provides access to the current session
    +(i.e. to determine if the user is in fact logged in)
    +
    +Package object
    +
    +The object package contains wrappers for a selection of managed objects. The
    +constructors of these objects all take a *vim25.Client, which they pass along
    +to derived objects, if applicable.
    +
    +Package govc
    +
    +The govc package contains the govc CLI. The code in this tree is not intended
    +to be used as a library. Any functionality that govc contains that _could_ be
    +used as a library function but isn't, _should_ live in a root level package.
    +
    +Other packages
    +
    +Other packages, such as "event", "guest", or "license", provide wrappers for
    +the respective subsystems. They are typically not needed in normal workflows so
    +are kept outside the object package.
    +*/
    +package govmomi
    +
    +import (
    +	"context"
    +	"net/url"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/session"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type Client struct {
    +	*vim25.Client
    +
    +	SessionManager *session.Manager
    +}
    +
    +// NewClient creates a new client from a URL. The client authenticates with the
    +// server with username/password before returning if the URL contains user information.
    +func NewClient(ctx context.Context, u *url.URL, insecure bool) (*Client, error) {
    +	soapClient := soap.NewClient(u, insecure)
    +	vimClient, err := vim25.NewClient(ctx, soapClient)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	c := &Client{
    +		Client:         vimClient,
    +		SessionManager: session.NewManager(vimClient),
    +	}
    +
    +	// Only login if the URL contains user information.
    +	if u.User != nil {
    +		err = c.Login(ctx, u.User)
    +		if err != nil {
    +			return nil, err
    +		}
    +	}
    +
    +	return c, nil
    +}
    +
    +// Login dispatches to the SessionManager.
    +func (c *Client) Login(ctx context.Context, u *url.Userinfo) error {
    +	return c.SessionManager.Login(ctx, u)
    +}
    +
    +// Logout dispatches to the SessionManager.
    +func (c *Client) Logout(ctx context.Context) error {
    +	// Close any idle connections after logging out.
    +	defer c.Client.CloseIdleConnections()
    +	return c.SessionManager.Logout(ctx)
    +}
    +
    +// PropertyCollector returns the session's default property collector.
    +func (c *Client) PropertyCollector() *property.Collector {
    +	return property.DefaultCollector(c.Client)
    +}
    +
    +// RetrieveOne dispatches to the Retrieve function on the default property collector.
    +func (c *Client) RetrieveOne(ctx context.Context, obj types.ManagedObjectReference, p []string, dst interface{}) error {
    +	return c.PropertyCollector().RetrieveOne(ctx, obj, p, dst)
    +}
    +
    +// Retrieve dispatches to the Retrieve function on the default property collector.
    +func (c *Client) Retrieve(ctx context.Context, objs []types.ManagedObjectReference, p []string, dst interface{}) error {
    +	return c.PropertyCollector().Retrieve(ctx, objs, p, dst)
    +}
    +
    +// Wait dispatches to property.Wait.
    +func (c *Client) Wait(ctx context.Context, obj types.ManagedObjectReference, ps []string, f func([]types.PropertyChange) bool) error {
    +	return property.Wait(ctx, c.PropertyCollector(), obj, ps, f)
    +}
    +
    +// IsVC returns true if we are connected to a vCenter
    +func (c *Client) IsVC() bool {
    +	return c.Client.IsVC()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/doc.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/doc.go
    new file mode 100644
    index 00000000000..0c8acee0163
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/doc.go
    @@ -0,0 +1,37 @@
    +/*
    +Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +/*
    +Package find implements inventory listing and searching.
    +
    +The Finder is an alternative to the object.SearchIndex FindByInventoryPath() and FindChild() methods.
    +SearchIndex.FindByInventoryPath requires an absolute path, whereas the Finder also supports relative paths
    +and patterns via path.Match.
    +SearchIndex.FindChild requires a parent to find the child, whereas the Finder also supports an ancestor via
    +recursive object traversal.
    +
    +The various Finder methods accept a "path" argument, which can absolute or relative to the Folder for the object type.
    +The Finder supports two modes, "list" and "find".  The "list" mode behaves like the "ls" command, only searching within
    +the immediate path.  The "find" mode behaves like the "find" command, with the search starting at the immediate path but
    +also recursing into sub Folders relative to the Datacenter.  The default mode is "list" if the given path contains a "/",
    +otherwise "find" mode is used.
    +
    +The exception is to use a "..." wildcard with a path to find all objects recursively underneath any root object.
    +For example: VirtualMachineList("/DC1/...")
    +
    +See also: https://github.com/vmware/govmomi/blob/master/govc/README.md#usage
    +*/
    +package find
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/error.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/error.go
    new file mode 100644
    index 00000000000..684526dab76
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/error.go
    @@ -0,0 +1,64 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package find
    +
    +import "fmt"
    +
    +type NotFoundError struct {
    +	kind string
    +	path string
    +}
    +
    +func (e *NotFoundError) Error() string {
    +	return fmt.Sprintf("%s '%s' not found", e.kind, e.path)
    +}
    +
    +type MultipleFoundError struct {
    +	kind string
    +	path string
    +}
    +
    +func (e *MultipleFoundError) Error() string {
    +	return fmt.Sprintf("path '%s' resolves to multiple %ss", e.path, e.kind)
    +}
    +
    +type DefaultNotFoundError struct {
    +	kind string
    +}
    +
    +func (e *DefaultNotFoundError) Error() string {
    +	return fmt.Sprintf("no default %s found", e.kind)
    +}
    +
    +type DefaultMultipleFoundError struct {
    +	kind string
    +}
    +
    +func (e DefaultMultipleFoundError) Error() string {
    +	return fmt.Sprintf("default %s resolves to multiple instances, please specify", e.kind)
    +}
    +
    +func toDefaultError(err error) error {
    +	switch e := err.(type) {
    +	case *NotFoundError:
    +		return &DefaultNotFoundError{e.kind}
    +	case *MultipleFoundError:
    +		return &DefaultMultipleFoundError{e.kind}
    +	default:
    +		return err
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/finder.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/finder.go
    new file mode 100644
    index 00000000000..70a2b535945
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/finder.go
    @@ -0,0 +1,1042 @@
    +/*
    +Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package find
    +
    +import (
    +	"context"
    +	"errors"
    +	"path"
    +	"strings"
    +
    +	"github.com/vmware/govmomi/list"
    +	"github.com/vmware/govmomi/object"
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type Finder struct {
    +	client  *vim25.Client
    +	r       recurser
    +	dc      *object.Datacenter
    +	si      *object.SearchIndex
    +	folders *object.DatacenterFolders
    +}
    +
    +func NewFinder(client *vim25.Client, all bool) *Finder {
    +	f := &Finder{
    +		client: client,
    +		si:     object.NewSearchIndex(client),
    +		r: recurser{
    +			Collector: property.DefaultCollector(client),
    +			All:       all,
    +		},
    +	}
    +
    +	return f
    +}
    +
    +func (f *Finder) SetDatacenter(dc *object.Datacenter) *Finder {
    +	f.dc = dc
    +	f.folders = nil
    +	return f
    +}
    +
    +// findRoot makes it possible to use "find" mode with a different root path.
    +// Example: ResourcePoolList("/dc1/host/cluster1/...")
    +func (f *Finder) findRoot(ctx context.Context, root *list.Element, parts []string) bool {
    +	if len(parts) == 0 {
    +		return false
    +	}
    +
    +	ix := len(parts) - 1
    +
    +	if parts[ix] != "..." {
    +		return false
    +	}
    +
    +	if ix == 0 {
    +		return true // We already have the Object for root.Path
    +	}
    +
    +	// Lookup the Object for the new root.Path
    +	rootPath := path.Join(root.Path, path.Join(parts[:ix]...))
    +
    +	ref, err := f.si.FindByInventoryPath(ctx, rootPath)
    +	if err != nil || ref == nil {
    +		// If we get an error or fail to match, fall through to find() with the original root and path
    +		return false
    +	}
    +
    +	root.Path = rootPath
    +	root.Object = ref
    +
    +	return true
    +}
    +
    +func (f *Finder) find(ctx context.Context, arg string, s *spec) ([]list.Element, error) {
    +	isPath := strings.Contains(arg, "/")
    +
    +	root := list.Element{
    +		Path:   "/",
    +		Object: object.NewRootFolder(f.client),
    +	}
    +
    +	parts := list.ToParts(arg)
    +
    +	if len(parts) > 0 {
    +		switch parts[0] {
    +		case "..": // Not supported; many edge case, little value
    +			return nil, errors.New("cannot traverse up a tree")
    +		case ".": // Relative to whatever
    +			pivot, err := s.Relative(ctx)
    +			if err != nil {
    +				return nil, err
    +			}
    +
    +			mes, err := mo.Ancestors(ctx, f.client, f.client.ServiceContent.PropertyCollector, pivot.Reference())
    +			if err != nil {
    +				return nil, err
    +			}
    +
    +			for _, me := range mes {
    +				// Skip root entity in building inventory path.
    +				if me.Parent == nil {
    +					continue
    +				}
    +				root.Path = path.Join(root.Path, me.Name)
    +			}
    +
    +			root.Object = pivot
    +			parts = parts[1:]
    +		}
    +	}
    +
    +	if s.listMode(isPath) {
    +		if f.findRoot(ctx, &root, parts) {
    +			parts = []string{"*"}
    +		} else {
    +			return f.r.List(ctx, s, root, parts)
    +		}
    +	}
    +
    +	s.Parents = append(s.Parents, s.Nested...)
    +
    +	return f.r.Find(ctx, s, root, parts)
    +}
    +
    +func (f *Finder) datacenter() (*object.Datacenter, error) {
    +	if f.dc == nil {
    +		return nil, errors.New("please specify a datacenter")
    +	}
    +
    +	return f.dc, nil
    +}
    +
    +// datacenterPath returns the absolute path to the Datacenter containing the given ref
    +func (f *Finder) datacenterPath(ctx context.Context, ref types.ManagedObjectReference) (string, error) {
    +	mes, err := mo.Ancestors(ctx, f.client, f.client.ServiceContent.PropertyCollector, ref)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	// Chop leaves under the Datacenter
    +	for i := len(mes) - 1; i > 0; i-- {
    +		if mes[i].Self.Type == "Datacenter" {
    +			break
    +		}
    +		mes = mes[:i]
    +	}
    +
    +	var p string
    +
    +	for _, me := range mes {
    +		// Skip root entity in building inventory path.
    +		if me.Parent == nil {
    +			continue
    +		}
    +
    +		p = p + "/" + me.Name
    +	}
    +
    +	return p, nil
    +}
    +
    +func (f *Finder) dcFolders(ctx context.Context) (*object.DatacenterFolders, error) {
    +	if f.folders != nil {
    +		return f.folders, nil
    +	}
    +
    +	dc, err := f.datacenter()
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	folders, err := dc.Folders(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	f.folders = folders
    +
    +	return f.folders, nil
    +}
    +
    +func (f *Finder) dcReference(_ context.Context) (object.Reference, error) {
    +	dc, err := f.datacenter()
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return dc, nil
    +}
    +
    +func (f *Finder) vmFolder(ctx context.Context) (object.Reference, error) {
    +	folders, err := f.dcFolders(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return folders.VmFolder, nil
    +}
    +
    +func (f *Finder) hostFolder(ctx context.Context) (object.Reference, error) {
    +	folders, err := f.dcFolders(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return folders.HostFolder, nil
    +}
    +
    +func (f *Finder) datastoreFolder(ctx context.Context) (object.Reference, error) {
    +	folders, err := f.dcFolders(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return folders.DatastoreFolder, nil
    +}
    +
    +func (f *Finder) networkFolder(ctx context.Context) (object.Reference, error) {
    +	folders, err := f.dcFolders(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return folders.NetworkFolder, nil
    +}
    +
    +func (f *Finder) rootFolder(_ context.Context) (object.Reference, error) {
    +	return object.NewRootFolder(f.client), nil
    +}
    +
    +func (f *Finder) managedObjectList(ctx context.Context, path string, tl bool, include []string) ([]list.Element, error) {
    +	fn := f.rootFolder
    +
    +	if f.dc != nil {
    +		fn = f.dcReference
    +	}
    +
    +	if len(path) == 0 {
    +		path = "."
    +	}
    +
    +	s := &spec{
    +		Relative: fn,
    +		Parents:  []string{"ComputeResource", "ClusterComputeResource", "HostSystem", "VirtualApp", "StoragePod"},
    +		Include:  include,
    +	}
    +
    +	if tl {
    +		s.Contents = true
    +		s.ListMode = types.NewBool(true)
    +	}
    +
    +	return f.find(ctx, path, s)
    +}
    +
    +// Element returns an Element for the given ManagedObjectReference
    +// This method is only useful for looking up the InventoryPath of a ManagedObjectReference.
    +func (f *Finder) Element(ctx context.Context, ref types.ManagedObjectReference) (*list.Element, error) {
    +	rl := func(_ context.Context) (object.Reference, error) {
    +		return ref, nil
    +	}
    +
    +	s := &spec{
    +		Relative: rl,
    +	}
    +
    +	e, err := f.find(ctx, "./", s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(e) == 0 {
    +		return nil, &NotFoundError{ref.Type, ref.Value}
    +	}
    +
    +	if len(e) > 1 {
    +		panic("ManagedObjectReference must be unique")
    +	}
    +
    +	return &e[0], nil
    +}
    +
    +// ObjectReference converts the given ManagedObjectReference to a type from the object package via object.NewReference
    +// with the object.Common.InventoryPath field set.
    +func (f *Finder) ObjectReference(ctx context.Context, ref types.ManagedObjectReference) (object.Reference, error) {
    +	e, err := f.Element(ctx, ref)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	r := object.NewReference(f.client, ref)
    +
    +	type common interface {
    +		SetInventoryPath(string)
    +	}
    +
    +	r.(common).SetInventoryPath(e.Path)
    +
    +	if f.dc != nil {
    +		if ds, ok := r.(*object.Datastore); ok {
    +			ds.DatacenterPath = f.dc.InventoryPath
    +		}
    +	}
    +
    +	return r, nil
    +}
    +
    +func (f *Finder) ManagedObjectList(ctx context.Context, path string, include ...string) ([]list.Element, error) {
    +	return f.managedObjectList(ctx, path, false, include)
    +}
    +
    +func (f *Finder) ManagedObjectListChildren(ctx context.Context, path string, include ...string) ([]list.Element, error) {
    +	return f.managedObjectList(ctx, path, true, include)
    +}
    +
    +func (f *Finder) DatacenterList(ctx context.Context, path string) ([]*object.Datacenter, error) {
    +	s := &spec{
    +		Relative: f.rootFolder,
    +		Include:  []string{"Datacenter"},
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var dcs []*object.Datacenter
    +	for _, e := range es {
    +		ref := e.Object.Reference()
    +		if ref.Type == "Datacenter" {
    +			dc := object.NewDatacenter(f.client, ref)
    +			dc.InventoryPath = e.Path
    +			dcs = append(dcs, dc)
    +		}
    +	}
    +
    +	if len(dcs) == 0 {
    +		return nil, &NotFoundError{"datacenter", path}
    +	}
    +
    +	return dcs, nil
    +}
    +
    +func (f *Finder) Datacenter(ctx context.Context, path string) (*object.Datacenter, error) {
    +	dcs, err := f.DatacenterList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(dcs) > 1 {
    +		return nil, &MultipleFoundError{"datacenter", path}
    +	}
    +
    +	return dcs[0], nil
    +}
    +
    +func (f *Finder) DefaultDatacenter(ctx context.Context) (*object.Datacenter, error) {
    +	dc, err := f.Datacenter(ctx, "*")
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +
    +	return dc, nil
    +}
    +
    +func (f *Finder) DatacenterOrDefault(ctx context.Context, path string) (*object.Datacenter, error) {
    +	if path != "" {
    +		dc, err := f.Datacenter(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return dc, nil
    +	}
    +
    +	return f.DefaultDatacenter(ctx)
    +}
    +
    +func (f *Finder) DatastoreList(ctx context.Context, path string) ([]*object.Datastore, error) {
    +	s := &spec{
    +		Relative: f.datastoreFolder,
    +		Parents:  []string{"StoragePod"},
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var dss []*object.Datastore
    +	for _, e := range es {
    +		ref := e.Object.Reference()
    +		if ref.Type == "Datastore" {
    +			ds := object.NewDatastore(f.client, ref)
    +			ds.InventoryPath = e.Path
    +
    +			if f.dc == nil {
    +				// In this case SetDatacenter was not called and path is absolute
    +				ds.DatacenterPath, err = f.datacenterPath(ctx, ref)
    +				if err != nil {
    +					return nil, err
    +				}
    +			} else {
    +				ds.DatacenterPath = f.dc.InventoryPath
    +			}
    +
    +			dss = append(dss, ds)
    +		}
    +	}
    +
    +	if len(dss) == 0 {
    +		return nil, &NotFoundError{"datastore", path}
    +	}
    +
    +	return dss, nil
    +}
    +
    +func (f *Finder) Datastore(ctx context.Context, path string) (*object.Datastore, error) {
    +	dss, err := f.DatastoreList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(dss) > 1 {
    +		return nil, &MultipleFoundError{"datastore", path}
    +	}
    +
    +	return dss[0], nil
    +}
    +
    +func (f *Finder) DefaultDatastore(ctx context.Context) (*object.Datastore, error) {
    +	ds, err := f.Datastore(ctx, "*")
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +
    +	return ds, nil
    +}
    +
    +func (f *Finder) DatastoreOrDefault(ctx context.Context, path string) (*object.Datastore, error) {
    +	if path != "" {
    +		ds, err := f.Datastore(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return ds, nil
    +	}
    +
    +	return f.DefaultDatastore(ctx)
    +}
    +
    +func (f *Finder) DatastoreClusterList(ctx context.Context, path string) ([]*object.StoragePod, error) {
    +	s := &spec{
    +		Relative: f.datastoreFolder,
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var sps []*object.StoragePod
    +	for _, e := range es {
    +		ref := e.Object.Reference()
    +		if ref.Type == "StoragePod" {
    +			sp := object.NewStoragePod(f.client, ref)
    +			sp.InventoryPath = e.Path
    +			sps = append(sps, sp)
    +		}
    +	}
    +
    +	if len(sps) == 0 {
    +		return nil, &NotFoundError{"datastore cluster", path}
    +	}
    +
    +	return sps, nil
    +}
    +
    +func (f *Finder) DatastoreCluster(ctx context.Context, path string) (*object.StoragePod, error) {
    +	sps, err := f.DatastoreClusterList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(sps) > 1 {
    +		return nil, &MultipleFoundError{"datastore cluster", path}
    +	}
    +
    +	return sps[0], nil
    +}
    +
    +func (f *Finder) DefaultDatastoreCluster(ctx context.Context) (*object.StoragePod, error) {
    +	sp, err := f.DatastoreCluster(ctx, "*")
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +
    +	return sp, nil
    +}
    +
    +func (f *Finder) DatastoreClusterOrDefault(ctx context.Context, path string) (*object.StoragePod, error) {
    +	if path != "" {
    +		sp, err := f.DatastoreCluster(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return sp, nil
    +	}
    +
    +	return f.DefaultDatastoreCluster(ctx)
    +}
    +
    +func (f *Finder) ComputeResourceList(ctx context.Context, path string) ([]*object.ComputeResource, error) {
    +	s := &spec{
    +		Relative: f.hostFolder,
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var crs []*object.ComputeResource
    +	for _, e := range es {
    +		var cr *object.ComputeResource
    +
    +		switch o := e.Object.(type) {
    +		case mo.ComputeResource, mo.ClusterComputeResource:
    +			cr = object.NewComputeResource(f.client, o.Reference())
    +		default:
    +			continue
    +		}
    +
    +		cr.InventoryPath = e.Path
    +		crs = append(crs, cr)
    +	}
    +
    +	if len(crs) == 0 {
    +		return nil, &NotFoundError{"compute resource", path}
    +	}
    +
    +	return crs, nil
    +}
    +
    +func (f *Finder) ComputeResource(ctx context.Context, path string) (*object.ComputeResource, error) {
    +	crs, err := f.ComputeResourceList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(crs) > 1 {
    +		return nil, &MultipleFoundError{"compute resource", path}
    +	}
    +
    +	return crs[0], nil
    +}
    +
    +func (f *Finder) DefaultComputeResource(ctx context.Context) (*object.ComputeResource, error) {
    +	cr, err := f.ComputeResource(ctx, "*")
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +
    +	return cr, nil
    +}
    +
    +func (f *Finder) ComputeResourceOrDefault(ctx context.Context, path string) (*object.ComputeResource, error) {
    +	if path != "" {
    +		cr, err := f.ComputeResource(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return cr, nil
    +	}
    +
    +	return f.DefaultComputeResource(ctx)
    +}
    +
    +func (f *Finder) ClusterComputeResourceList(ctx context.Context, path string) ([]*object.ClusterComputeResource, error) {
    +	s := &spec{
    +		Relative: f.hostFolder,
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var ccrs []*object.ClusterComputeResource
    +	for _, e := range es {
    +		var ccr *object.ClusterComputeResource
    +
    +		switch o := e.Object.(type) {
    +		case mo.ClusterComputeResource:
    +			ccr = object.NewClusterComputeResource(f.client, o.Reference())
    +		default:
    +			continue
    +		}
    +
    +		ccr.InventoryPath = e.Path
    +		ccrs = append(ccrs, ccr)
    +	}
    +
    +	if len(ccrs) == 0 {
    +		return nil, &NotFoundError{"cluster", path}
    +	}
    +
    +	return ccrs, nil
    +}
    +
    +func (f *Finder) DefaultClusterComputeResource(ctx context.Context) (*object.ClusterComputeResource, error) {
    +	cr, err := f.ClusterComputeResource(ctx, "*")
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +
    +	return cr, nil
    +}
    +
    +func (f *Finder) ClusterComputeResource(ctx context.Context, path string) (*object.ClusterComputeResource, error) {
    +	ccrs, err := f.ClusterComputeResourceList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(ccrs) > 1 {
    +		return nil, &MultipleFoundError{"cluster", path}
    +	}
    +
    +	return ccrs[0], nil
    +}
    +
    +func (f *Finder) ClusterComputeResourceOrDefault(ctx context.Context, path string) (*object.ClusterComputeResource, error) {
    +	if path != "" {
    +		cr, err := f.ClusterComputeResource(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return cr, nil
    +	}
    +
    +	return f.DefaultClusterComputeResource(ctx)
    +}
    +
    +func (f *Finder) HostSystemList(ctx context.Context, path string) ([]*object.HostSystem, error) {
    +	s := &spec{
    +		Relative: f.hostFolder,
    +		Parents:  []string{"ComputeResource", "ClusterComputeResource"},
    +		Include:  []string{"HostSystem"},
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var hss []*object.HostSystem
    +	for _, e := range es {
    +		var hs *object.HostSystem
    +
    +		switch o := e.Object.(type) {
    +		case mo.HostSystem:
    +			hs = object.NewHostSystem(f.client, o.Reference())
    +
    +			hs.InventoryPath = e.Path
    +			hss = append(hss, hs)
    +		case mo.ComputeResource, mo.ClusterComputeResource:
    +			cr := object.NewComputeResource(f.client, o.Reference())
    +
    +			cr.InventoryPath = e.Path
    +
    +			hosts, err := cr.Hosts(ctx)
    +			if err != nil {
    +				return nil, err
    +			}
    +
    +			hss = append(hss, hosts...)
    +		}
    +	}
    +
    +	if len(hss) == 0 {
    +		return nil, &NotFoundError{"host", path}
    +	}
    +
    +	return hss, nil
    +}
    +
    +func (f *Finder) HostSystem(ctx context.Context, path string) (*object.HostSystem, error) {
    +	hss, err := f.HostSystemList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(hss) > 1 {
    +		return nil, &MultipleFoundError{"host", path}
    +	}
    +
    +	return hss[0], nil
    +}
    +
    +func (f *Finder) DefaultHostSystem(ctx context.Context) (*object.HostSystem, error) {
    +	hs, err := f.HostSystem(ctx, "*")
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +
    +	return hs, nil
    +}
    +
    +func (f *Finder) HostSystemOrDefault(ctx context.Context, path string) (*object.HostSystem, error) {
    +	if path != "" {
    +		hs, err := f.HostSystem(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return hs, nil
    +	}
    +
    +	return f.DefaultHostSystem(ctx)
    +}
    +
    +func (f *Finder) NetworkList(ctx context.Context, path string) ([]object.NetworkReference, error) {
    +	s := &spec{
    +		Relative: f.networkFolder,
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var ns []object.NetworkReference
    +	for _, e := range es {
    +		ref := e.Object.Reference()
    +		switch ref.Type {
    +		case "Network":
    +			r := object.NewNetwork(f.client, ref)
    +			r.InventoryPath = e.Path
    +			ns = append(ns, r)
    +		case "OpaqueNetwork":
    +			r := object.NewOpaqueNetwork(f.client, ref)
    +			r.InventoryPath = e.Path
    +			ns = append(ns, r)
    +		case "DistributedVirtualPortgroup":
    +			r := object.NewDistributedVirtualPortgroup(f.client, ref)
    +			r.InventoryPath = e.Path
    +			ns = append(ns, r)
    +		case "DistributedVirtualSwitch", "VmwareDistributedVirtualSwitch":
    +			r := object.NewDistributedVirtualSwitch(f.client, ref)
    +			r.InventoryPath = e.Path
    +			ns = append(ns, r)
    +		}
    +	}
    +
    +	if len(ns) == 0 {
    +		return nil, &NotFoundError{"network", path}
    +	}
    +
    +	return ns, nil
    +}
    +
    +func (f *Finder) Network(ctx context.Context, path string) (object.NetworkReference, error) {
    +	networks, err := f.NetworkList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(networks) > 1 {
    +		return nil, &MultipleFoundError{"network", path}
    +	}
    +
    +	return networks[0], nil
    +}
    +
    +func (f *Finder) DefaultNetwork(ctx context.Context) (object.NetworkReference, error) {
    +	network, err := f.Network(ctx, "*")
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +
    +	return network, nil
    +}
    +
    +func (f *Finder) NetworkOrDefault(ctx context.Context, path string) (object.NetworkReference, error) {
    +	if path != "" {
    +		network, err := f.Network(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return network, nil
    +	}
    +
    +	return f.DefaultNetwork(ctx)
    +}
    +
    +func (f *Finder) ResourcePoolList(ctx context.Context, path string) ([]*object.ResourcePool, error) {
    +	s := &spec{
    +		Relative: f.hostFolder,
    +		Parents:  []string{"ComputeResource", "ClusterComputeResource", "VirtualApp"},
    +		Nested:   []string{"ResourcePool"},
    +		Contents: true,
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var rps []*object.ResourcePool
    +	for _, e := range es {
    +		var rp *object.ResourcePool
    +
    +		switch o := e.Object.(type) {
    +		case mo.ResourcePool:
    +			rp = object.NewResourcePool(f.client, o.Reference())
    +			rp.InventoryPath = e.Path
    +			rps = append(rps, rp)
    +		}
    +	}
    +
    +	if len(rps) == 0 {
    +		return nil, &NotFoundError{"resource pool", path}
    +	}
    +
    +	return rps, nil
    +}
    +
    +func (f *Finder) ResourcePool(ctx context.Context, path string) (*object.ResourcePool, error) {
    +	rps, err := f.ResourcePoolList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(rps) > 1 {
    +		return nil, &MultipleFoundError{"resource pool", path}
    +	}
    +
    +	return rps[0], nil
    +}
    +
    +func (f *Finder) DefaultResourcePool(ctx context.Context) (*object.ResourcePool, error) {
    +	rp, err := f.ResourcePool(ctx, "*/Resources")
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +
    +	return rp, nil
    +}
    +
    +func (f *Finder) ResourcePoolOrDefault(ctx context.Context, path string) (*object.ResourcePool, error) {
    +	if path != "" {
    +		rp, err := f.ResourcePool(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return rp, nil
    +	}
    +
    +	return f.DefaultResourcePool(ctx)
    +}
    +
    +// ResourcePoolListAll combines ResourcePoolList and VirtualAppList
    +// VirtualAppList is only called if ResourcePoolList does not find any pools with the given path.
    +func (f *Finder) ResourcePoolListAll(ctx context.Context, path string) ([]*object.ResourcePool, error) {
    +	pools, err := f.ResourcePoolList(ctx, path)
    +	if err != nil {
    +		if _, ok := err.(*NotFoundError); !ok {
    +			return nil, err
    +		}
    +
    +		vapps, _ := f.VirtualAppList(ctx, path)
    +
    +		if len(vapps) == 0 {
    +			return nil, err
    +		}
    +
    +		for _, vapp := range vapps {
    +			pools = append(pools, vapp.ResourcePool)
    +		}
    +	}
    +
    +	return pools, nil
    +}
    +
    +func (f *Finder) DefaultFolder(ctx context.Context) (*object.Folder, error) {
    +	ref, err := f.vmFolder(ctx)
    +	if err != nil {
    +		return nil, toDefaultError(err)
    +	}
    +	folder := object.NewFolder(f.client, ref.Reference())
    +
    +	return folder, nil
    +}
    +
    +func (f *Finder) FolderOrDefault(ctx context.Context, path string) (*object.Folder, error) {
    +	if path != "" {
    +		folder, err := f.Folder(ctx, path)
    +		if err != nil {
    +			return nil, err
    +		}
    +		return folder, nil
    +	}
    +	return f.DefaultFolder(ctx)
    +}
    +
    +func (f *Finder) VirtualMachineList(ctx context.Context, path string) ([]*object.VirtualMachine, error) {
    +	s := &spec{
    +		Relative: f.vmFolder,
    +		Parents:  []string{"VirtualApp"},
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var vms []*object.VirtualMachine
    +	for _, e := range es {
    +		switch o := e.Object.(type) {
    +		case mo.VirtualMachine:
    +			vm := object.NewVirtualMachine(f.client, o.Reference())
    +			vm.InventoryPath = e.Path
    +			vms = append(vms, vm)
    +		}
    +	}
    +
    +	if len(vms) == 0 {
    +		return nil, &NotFoundError{"vm", path}
    +	}
    +
    +	return vms, nil
    +}
    +
    +func (f *Finder) VirtualMachine(ctx context.Context, path string) (*object.VirtualMachine, error) {
    +	vms, err := f.VirtualMachineList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(vms) > 1 {
    +		return nil, &MultipleFoundError{"vm", path}
    +	}
    +
    +	return vms[0], nil
    +}
    +
    +func (f *Finder) VirtualAppList(ctx context.Context, path string) ([]*object.VirtualApp, error) {
    +	s := &spec{
    +		Relative: f.vmFolder,
    +	}
    +
    +	es, err := f.find(ctx, path, s)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var apps []*object.VirtualApp
    +	for _, e := range es {
    +		switch o := e.Object.(type) {
    +		case mo.VirtualApp:
    +			app := object.NewVirtualApp(f.client, o.Reference())
    +			app.InventoryPath = e.Path
    +			apps = append(apps, app)
    +		}
    +	}
    +
    +	if len(apps) == 0 {
    +		return nil, &NotFoundError{"app", path}
    +	}
    +
    +	return apps, nil
    +}
    +
    +func (f *Finder) VirtualApp(ctx context.Context, path string) (*object.VirtualApp, error) {
    +	apps, err := f.VirtualAppList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(apps) > 1 {
    +		return nil, &MultipleFoundError{"app", path}
    +	}
    +
    +	return apps[0], nil
    +}
    +
    +func (f *Finder) FolderList(ctx context.Context, path string) ([]*object.Folder, error) {
    +	es, err := f.ManagedObjectList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var folders []*object.Folder
    +
    +	for _, e := range es {
    +		switch o := e.Object.(type) {
    +		case mo.Folder, mo.StoragePod:
    +			folder := object.NewFolder(f.client, o.Reference())
    +			folder.InventoryPath = e.Path
    +			folders = append(folders, folder)
    +		case *object.Folder:
    +			// RootFolder
    +			folders = append(folders, o)
    +		}
    +	}
    +
    +	if len(folders) == 0 {
    +		return nil, &NotFoundError{"folder", path}
    +	}
    +
    +	return folders, nil
    +}
    +
    +func (f *Finder) Folder(ctx context.Context, path string) (*object.Folder, error) {
    +	folders, err := f.FolderList(ctx, path)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(folders) > 1 {
    +		return nil, &MultipleFoundError{"folder", path}
    +	}
    +
    +	return folders[0], nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/recurser.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/recurser.go
    new file mode 100644
    index 00000000000..80d958a264f
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/find/recurser.go
    @@ -0,0 +1,253 @@
    +/*
    +Copyright (c) 2014-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package find
    +
    +import (
    +	"context"
    +	"os"
    +	"path"
    +	"strings"
    +
    +	"github.com/vmware/govmomi/list"
    +	"github.com/vmware/govmomi/object"
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25/mo"
    +)
    +
    +// spec is used to specify per-search configuration, independent of the Finder instance.
    +type spec struct {
    +	// Relative returns the root object to resolve Relative paths (starts with ".")
    +	Relative func(ctx context.Context) (object.Reference, error)
    +
    +	// ListMode can be used to optionally force "ls" behavior, rather than "find" behavior
    +	ListMode *bool
    +
    +	// Contents configures the Recurser to list the Contents of traversable leaf nodes.
    +	// This is typically set to true when used from the ls command, where listing
    +	// a folder means listing its Contents. This is typically set to false for
    +	// commands that take managed entities that are not folders as input.
    +	Contents bool
    +
    +	// Parents specifies the types which can contain the child types being searched for.
    +	// for example, when searching for a HostSystem, parent types can be
    +	// "ComputeResource" or "ClusterComputeResource".
    +	Parents []string
    +
    +	// Include specifies which types to be included in the results, used only in "find" mode.
    +	Include []string
    +
    +	// Nested should be set to types that can be Nested, used only in "find" mode.
    +	Nested []string
    +
    +	// ChildType avoids traversing into folders that can't contain the Include types, used only in "find" mode.
    +	ChildType []string
    +}
    +
    +func (s *spec) traversable(o mo.Reference) bool {
    +	ref := o.Reference()
    +
    +	switch ref.Type {
    +	case "Datacenter":
    +		if len(s.Include) == 1 && s.Include[0] == "Datacenter" {
    +			// No point in traversing deeper as Datacenters cannot be nested
    +			return false
    +		}
    +		return true
    +	case "Folder":
    +		if f, ok := o.(mo.Folder); ok {
    +			// TODO: Not making use of this yet, but here we can optimize when searching the entire
    +			// inventory across Datacenters for specific types, for example: 'govc ls -t VirtualMachine /**'
    +			// should not traverse into a Datacenter's host, network or datatore folders.
    +			if !s.traversableChildType(f.ChildType) {
    +				return false
    +			}
    +		}
    +
    +		return true
    +	}
    +
    +	for _, kind := range s.Parents {
    +		if kind == ref.Type {
    +			return true
    +		}
    +	}
    +
    +	return false
    +}
    +
    +func (s *spec) traversableChildType(ctypes []string) bool {
    +	if len(s.ChildType) == 0 {
    +		return true
    +	}
    +
    +	for _, t := range ctypes {
    +		for _, c := range s.ChildType {
    +			if t == c {
    +				return true
    +			}
    +		}
    +	}
    +
    +	return false
    +}
    +
    +func (s *spec) wanted(e list.Element) bool {
    +	if len(s.Include) == 0 {
    +		return true
    +	}
    +
    +	w := e.Object.Reference().Type
    +
    +	for _, kind := range s.Include {
    +		if w == kind {
    +			return true
    +		}
    +	}
    +
    +	return false
    +}
    +
    +// listMode is a global option to revert to the original Finder behavior,
    +// disabling the newer "find" mode.
    +var listMode = os.Getenv("GOVMOMI_FINDER_LIST_MODE") == "true"
    +
    +func (s *spec) listMode(isPath bool) bool {
    +	if listMode {
    +		return true
    +	}
    +
    +	if s.ListMode != nil {
    +		return *s.ListMode
    +	}
    +
    +	return isPath
    +}
    +
    +type recurser struct {
    +	Collector *property.Collector
    +
    +	// All configures the recurses to fetch complete objects for leaf nodes.
    +	All bool
    +}
    +
    +func (r recurser) List(ctx context.Context, s *spec, root list.Element, parts []string) ([]list.Element, error) {
    +	if len(parts) == 0 {
    +		// Include non-traversable leaf elements in result. For example, consider
    +		// the pattern "./vm/my-vm-*", where the pattern should match the VMs and
    +		// not try to traverse them.
    +		//
    +		// Include traversable leaf elements in result, if the contents
    +		// field is set to false.
    +		//
    +		if !s.Contents || !s.traversable(root.Object.Reference()) {
    +			return []list.Element{root}, nil
    +		}
    +	}
    +
    +	k := list.Lister{
    +		Collector: r.Collector,
    +		Reference: root.Object.Reference(),
    +		Prefix:    root.Path,
    +	}
    +
    +	if r.All && len(parts) < 2 {
    +		k.All = true
    +	}
    +
    +	in, err := k.List(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	// This folder is a leaf as far as the glob goes.
    +	if len(parts) == 0 {
    +		return in, nil
    +	}
    +
    +	all := parts
    +	pattern := parts[0]
    +	parts = parts[1:]
    +
    +	var out []list.Element
    +	for _, e := range in {
    +		matched, err := path.Match(pattern, path.Base(e.Path))
    +		if err != nil {
    +			return nil, err
    +		}
    +
    +		if !matched {
    +			matched = strings.HasSuffix(e.Path, "/"+path.Join(all...))
    +			if matched {
    +				// name contains a '/'
    +				out = append(out, e)
    +			}
    +
    +			continue
    +		}
    +
    +		nres, err := r.List(ctx, s, e, parts)
    +		if err != nil {
    +			return nil, err
    +		}
    +
    +		out = append(out, nres...)
    +	}
    +
    +	return out, nil
    +}
    +
    +func (r recurser) Find(ctx context.Context, s *spec, root list.Element, parts []string) ([]list.Element, error) {
    +	var out []list.Element
    +
    +	if len(parts) > 0 {
    +		pattern := parts[0]
    +		matched, err := path.Match(pattern, path.Base(root.Path))
    +		if err != nil {
    +			return nil, err
    +		}
    +
    +		if matched && s.wanted(root) {
    +			out = append(out, root)
    +		}
    +	}
    +
    +	if !s.traversable(root.Object) {
    +		return out, nil
    +	}
    +
    +	k := list.Lister{
    +		Collector: r.Collector,
    +		Reference: root.Object.Reference(),
    +		Prefix:    root.Path,
    +	}
    +
    +	in, err := k.List(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	for _, e := range in {
    +		nres, err := r.Find(ctx, s, e, parts)
    +		if err != nil {
    +			return nil, err
    +		}
    +
    +		out = append(out, nres...)
    +	}
    +
    +	return out, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/list/lister.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/list/lister.go
    new file mode 100644
    index 00000000000..2ee32e6bc17
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/list/lister.go
    @@ -0,0 +1,563 @@
    +/*
    +Copyright (c) 2014-2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package list
    +
    +import (
    +	"context"
    +	"fmt"
    +	"path"
    +	"reflect"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type Element struct {
    +	Path   string
    +	Object mo.Reference
    +}
    +
    +func (e Element) String() string {
    +	return fmt.Sprintf("%s @ %s", e.Object.Reference(), e.Path)
    +}
    +
    +func ToElement(r mo.Reference, prefix string) Element {
    +	var name string
    +
    +	// Comments about types to be expected in folders copied from the
    +	// documentation of the Folder managed object:
    +	// http://pubs.vmware.com/vsphere-55/topic/com.vmware.wssdk.apiref.doc/vim.Folder.html
    +	switch m := r.(type) {
    +	case mo.Folder:
    +		name = m.Name
    +	case mo.StoragePod:
    +		name = m.Name
    +
    +	// { "vim.Datacenter" } - Identifies the root folder and its descendant
    +	// folders. Data center folders can contain child data center folders and
    +	// Datacenter managed objects. Datacenter objects contain virtual machine,
    +	// compute resource, network entity, and datastore folders.
    +	case mo.Datacenter:
    +		name = m.Name
    +
    +	// { "vim.Virtualmachine", "vim.VirtualApp" } - Identifies a virtual machine
    +	// folder. A virtual machine folder may contain child virtual machine
    +	// folders. It also can contain VirtualMachine managed objects, templates,
    +	// and VirtualApp managed objects.
    +	case mo.VirtualMachine:
    +		name = m.Name
    +	case mo.VirtualApp:
    +		name = m.Name
    +
    +	// { "vim.ComputeResource" } - Identifies a compute resource
    +	// folder, which contains child compute resource folders and ComputeResource
    +	// hierarchies.
    +	case mo.ComputeResource:
    +		name = m.Name
    +	case mo.ClusterComputeResource:
    +		name = m.Name
    +	case mo.HostSystem:
    +		name = m.Name
    +	case mo.ResourcePool:
    +		name = m.Name
    +
    +	// { "vim.Network" } - Identifies a network entity folder.
    +	// Network entity folders on a vCenter Server can contain Network,
    +	// DistributedVirtualSwitch, and DistributedVirtualPortgroup managed objects.
    +	// Network entity folders on an ESXi host can contain only Network objects.
    +	case mo.Network:
    +		name = m.Name
    +	case mo.OpaqueNetwork:
    +		name = m.Name
    +	case mo.DistributedVirtualSwitch:
    +		name = m.Name
    +	case mo.DistributedVirtualPortgroup:
    +		name = m.Name
    +	case mo.VmwareDistributedVirtualSwitch:
    +		name = m.Name
    +
    +	// { "vim.Datastore" } - Identifies a datastore folder. Datastore folders can
    +	// contain child datastore folders and Datastore managed objects.
    +	case mo.Datastore:
    +		name = m.Name
    +
    +	default:
    +		panic("not implemented for type " + reflect.TypeOf(r).String())
    +	}
    +
    +	e := Element{
    +		Path:   path.Join(prefix, name),
    +		Object: r,
    +	}
    +
    +	return e
    +}
    +
    +type Lister struct {
    +	Collector *property.Collector
    +	Reference types.ManagedObjectReference
    +	Prefix    string
    +	All       bool
    +}
    +
    +func (l Lister) retrieveProperties(ctx context.Context, req types.RetrieveProperties, dst *[]interface{}) error {
    +	res, err := l.Collector.RetrieveProperties(ctx, req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	// Instead of using mo.LoadRetrievePropertiesResponse, use a custom loop to
    +	// iterate over the results and ignore entries that have properties that
    +	// could not be retrieved (a non-empty `missingSet` property). Since the
    +	// returned objects are enumerated by vSphere in the first place, any object
    +	// that has a non-empty `missingSet` property is indicative of a race
    +	// condition in vSphere where the object was enumerated initially, but was
    +	// removed before its properties could be collected.
    +	for _, p := range res.Returnval {
    +		v, err := mo.ObjectContentToType(p)
    +		if err != nil {
    +			// Ignore fault if it is ManagedObjectNotFound
    +			if soap.IsVimFault(err) {
    +				switch soap.ToVimFault(err).(type) {
    +				case *types.ManagedObjectNotFound:
    +					continue
    +				}
    +			}
    +
    +			return err
    +		}
    +
    +		*dst = append(*dst, v)
    +	}
    +
    +	return nil
    +}
    +
    +func (l Lister) List(ctx context.Context) ([]Element, error) {
    +	switch l.Reference.Type {
    +	case "Folder", "StoragePod":
    +		return l.ListFolder(ctx)
    +	case "Datacenter":
    +		return l.ListDatacenter(ctx)
    +	case "ComputeResource", "ClusterComputeResource":
    +		// Treat ComputeResource and ClusterComputeResource as one and the same.
    +		// It doesn't matter from the perspective of the lister.
    +		return l.ListComputeResource(ctx)
    +	case "ResourcePool":
    +		return l.ListResourcePool(ctx)
    +	case "HostSystem":
    +		return l.ListHostSystem(ctx)
    +	case "VirtualApp":
    +		return l.ListVirtualApp(ctx)
    +	default:
    +		return nil, fmt.Errorf("cannot traverse type " + l.Reference.Type)
    +	}
    +}
    +
    +func (l Lister) ListFolder(ctx context.Context) ([]Element, error) {
    +	spec := types.PropertyFilterSpec{
    +		ObjectSet: []types.ObjectSpec{
    +			{
    +				Obj: l.Reference,
    +				SelectSet: []types.BaseSelectionSpec{
    +					&types.TraversalSpec{
    +						Path: "childEntity",
    +						Skip: types.NewBool(false),
    +						Type: "Folder",
    +					},
    +				},
    +				Skip: types.NewBool(true),
    +			},
    +		},
    +	}
    +
    +	// Retrieve all objects that we can deal with
    +	childTypes := []string{
    +		"Folder",
    +		"Datacenter",
    +		"VirtualApp",
    +		"VirtualMachine",
    +		"Network",
    +		"ComputeResource",
    +		"ClusterComputeResource",
    +		"Datastore",
    +		"DistributedVirtualSwitch",
    +	}
    +
    +	for _, t := range childTypes {
    +		pspec := types.PropertySpec{
    +			Type: t,
    +		}
    +
    +		if l.All {
    +			pspec.All = types.NewBool(true)
    +		} else {
    +			pspec.PathSet = []string{"name"}
    +
    +			// Additional basic properties.
    +			switch t {
    +			case "Folder":
    +				pspec.PathSet = append(pspec.PathSet, "childType")
    +			case "ComputeResource", "ClusterComputeResource":
    +				// The ComputeResource and ClusterComputeResource are dereferenced in
    +				// the ResourcePoolFlag. Make sure they always have their resourcePool
    +				// field populated.
    +				pspec.PathSet = append(pspec.PathSet, "resourcePool")
    +			}
    +		}
    +
    +		spec.PropSet = append(spec.PropSet, pspec)
    +	}
    +
    +	req := types.RetrieveProperties{
    +		SpecSet: []types.PropertyFilterSpec{spec},
    +	}
    +
    +	var dst []interface{}
    +
    +	err := l.retrieveProperties(ctx, req, &dst)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	es := []Element{}
    +	for _, v := range dst {
    +		es = append(es, ToElement(v.(mo.Reference), l.Prefix))
    +	}
    +
    +	return es, nil
    +}
    +
    +func (l Lister) ListDatacenter(ctx context.Context) ([]Element, error) {
    +	ospec := types.ObjectSpec{
    +		Obj:  l.Reference,
    +		Skip: types.NewBool(true),
    +	}
    +
    +	// Include every datastore folder in the select set
    +	fields := []string{
    +		"vmFolder",
    +		"hostFolder",
    +		"datastoreFolder",
    +		"networkFolder",
    +	}
    +
    +	for _, f := range fields {
    +		tspec := types.TraversalSpec{
    +			Path: f,
    +			Skip: types.NewBool(false),
    +			Type: "Datacenter",
    +		}
    +
    +		ospec.SelectSet = append(ospec.SelectSet, &tspec)
    +	}
    +
    +	pspec := types.PropertySpec{
    +		Type: "Folder",
    +	}
    +
    +	if l.All {
    +		pspec.All = types.NewBool(true)
    +	} else {
    +		pspec.PathSet = []string{"name", "childType"}
    +	}
    +
    +	req := types.RetrieveProperties{
    +		SpecSet: []types.PropertyFilterSpec{
    +			{
    +				ObjectSet: []types.ObjectSpec{ospec},
    +				PropSet:   []types.PropertySpec{pspec},
    +			},
    +		},
    +	}
    +
    +	var dst []interface{}
    +
    +	err := l.retrieveProperties(ctx, req, &dst)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	es := []Element{}
    +	for _, v := range dst {
    +		es = append(es, ToElement(v.(mo.Reference), l.Prefix))
    +	}
    +
    +	return es, nil
    +}
    +
    +func (l Lister) ListComputeResource(ctx context.Context) ([]Element, error) {
    +	ospec := types.ObjectSpec{
    +		Obj:  l.Reference,
    +		Skip: types.NewBool(true),
    +	}
    +
    +	fields := []string{
    +		"host",
    +		"resourcePool",
    +	}
    +
    +	for _, f := range fields {
    +		tspec := types.TraversalSpec{
    +			Path: f,
    +			Skip: types.NewBool(false),
    +			Type: "ComputeResource",
    +		}
    +
    +		ospec.SelectSet = append(ospec.SelectSet, &tspec)
    +	}
    +
    +	childTypes := []string{
    +		"HostSystem",
    +		"ResourcePool",
    +	}
    +
    +	var pspecs []types.PropertySpec
    +	for _, t := range childTypes {
    +		pspec := types.PropertySpec{
    +			Type: t,
    +		}
    +
    +		if l.All {
    +			pspec.All = types.NewBool(true)
    +		} else {
    +			pspec.PathSet = []string{"name"}
    +		}
    +
    +		pspecs = append(pspecs, pspec)
    +	}
    +
    +	req := types.RetrieveProperties{
    +		SpecSet: []types.PropertyFilterSpec{
    +			{
    +				ObjectSet: []types.ObjectSpec{ospec},
    +				PropSet:   pspecs,
    +			},
    +		},
    +	}
    +
    +	var dst []interface{}
    +
    +	err := l.retrieveProperties(ctx, req, &dst)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	es := []Element{}
    +	for _, v := range dst {
    +		es = append(es, ToElement(v.(mo.Reference), l.Prefix))
    +	}
    +
    +	return es, nil
    +}
    +
    +func (l Lister) ListResourcePool(ctx context.Context) ([]Element, error) {
    +	ospec := types.ObjectSpec{
    +		Obj:  l.Reference,
    +		Skip: types.NewBool(true),
    +	}
    +
    +	fields := []string{
    +		"resourcePool",
    +	}
    +
    +	for _, f := range fields {
    +		tspec := types.TraversalSpec{
    +			Path: f,
    +			Skip: types.NewBool(false),
    +			Type: "ResourcePool",
    +		}
    +
    +		ospec.SelectSet = append(ospec.SelectSet, &tspec)
    +	}
    +
    +	childTypes := []string{
    +		"ResourcePool",
    +	}
    +
    +	var pspecs []types.PropertySpec
    +	for _, t := range childTypes {
    +		pspec := types.PropertySpec{
    +			Type: t,
    +		}
    +
    +		if l.All {
    +			pspec.All = types.NewBool(true)
    +		} else {
    +			pspec.PathSet = []string{"name"}
    +		}
    +
    +		pspecs = append(pspecs, pspec)
    +	}
    +
    +	req := types.RetrieveProperties{
    +		SpecSet: []types.PropertyFilterSpec{
    +			{
    +				ObjectSet: []types.ObjectSpec{ospec},
    +				PropSet:   pspecs,
    +			},
    +		},
    +	}
    +
    +	var dst []interface{}
    +
    +	err := l.retrieveProperties(ctx, req, &dst)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	es := []Element{}
    +	for _, v := range dst {
    +		es = append(es, ToElement(v.(mo.Reference), l.Prefix))
    +	}
    +
    +	return es, nil
    +}
    +
    +func (l Lister) ListHostSystem(ctx context.Context) ([]Element, error) {
    +	ospec := types.ObjectSpec{
    +		Obj:  l.Reference,
    +		Skip: types.NewBool(true),
    +	}
    +
    +	fields := []string{
    +		"datastore",
    +		"network",
    +		"vm",
    +	}
    +
    +	for _, f := range fields {
    +		tspec := types.TraversalSpec{
    +			Path: f,
    +			Skip: types.NewBool(false),
    +			Type: "HostSystem",
    +		}
    +
    +		ospec.SelectSet = append(ospec.SelectSet, &tspec)
    +	}
    +
    +	childTypes := []string{
    +		"Datastore",
    +		"Network",
    +		"VirtualMachine",
    +	}
    +
    +	var pspecs []types.PropertySpec
    +	for _, t := range childTypes {
    +		pspec := types.PropertySpec{
    +			Type: t,
    +		}
    +
    +		if l.All {
    +			pspec.All = types.NewBool(true)
    +		} else {
    +			pspec.PathSet = []string{"name"}
    +		}
    +
    +		pspecs = append(pspecs, pspec)
    +	}
    +
    +	req := types.RetrieveProperties{
    +		SpecSet: []types.PropertyFilterSpec{
    +			{
    +				ObjectSet: []types.ObjectSpec{ospec},
    +				PropSet:   pspecs,
    +			},
    +		},
    +	}
    +
    +	var dst []interface{}
    +
    +	err := l.retrieveProperties(ctx, req, &dst)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	es := []Element{}
    +	for _, v := range dst {
    +		es = append(es, ToElement(v.(mo.Reference), l.Prefix))
    +	}
    +
    +	return es, nil
    +}
    +
    +func (l Lister) ListVirtualApp(ctx context.Context) ([]Element, error) {
    +	ospec := types.ObjectSpec{
    +		Obj:  l.Reference,
    +		Skip: types.NewBool(true),
    +	}
    +
    +	fields := []string{
    +		"resourcePool",
    +		"vm",
    +	}
    +
    +	for _, f := range fields {
    +		tspec := types.TraversalSpec{
    +			Path: f,
    +			Skip: types.NewBool(false),
    +			Type: "VirtualApp",
    +		}
    +
    +		ospec.SelectSet = append(ospec.SelectSet, &tspec)
    +	}
    +
    +	childTypes := []string{
    +		"ResourcePool",
    +		"VirtualMachine",
    +	}
    +
    +	var pspecs []types.PropertySpec
    +	for _, t := range childTypes {
    +		pspec := types.PropertySpec{
    +			Type: t,
    +		}
    +
    +		if l.All {
    +			pspec.All = types.NewBool(true)
    +		} else {
    +			pspec.PathSet = []string{"name"}
    +		}
    +
    +		pspecs = append(pspecs, pspec)
    +	}
    +
    +	req := types.RetrieveProperties{
    +		SpecSet: []types.PropertyFilterSpec{
    +			{
    +				ObjectSet: []types.ObjectSpec{ospec},
    +				PropSet:   pspecs,
    +			},
    +		},
    +	}
    +
    +	var dst []interface{}
    +
    +	err := l.retrieveProperties(ctx, req, &dst)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	es := []Element{}
    +	for _, v := range dst {
    +		es = append(es, ToElement(v.(mo.Reference), l.Prefix))
    +	}
    +
    +	return es, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/list/path.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/list/path.go
    new file mode 100644
    index 00000000000..f3a10652015
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/list/path.go
    @@ -0,0 +1,44 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package list
    +
    +import (
    +	"path"
    +	"strings"
    +)
    +
    +func ToParts(p string) []string {
    +	p = path.Clean(p)
    +	if p == "/" {
    +		return []string{}
    +	}
    +
    +	if len(p) > 0 {
    +		// Prefix ./ if relative
    +		if p[0] != '/' && p[0] != '.' {
    +			p = "./" + p
    +		}
    +	}
    +
    +	ps := strings.Split(p, "/")
    +	if ps[0] == "" {
    +		// Start at root
    +		ps = ps[1:]
    +	}
    +
    +	return ps
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/nfc/lease.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/nfc/lease.go
    new file mode 100644
    index 00000000000..3fb85ee6f6e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/nfc/lease.go
    @@ -0,0 +1,238 @@
    +/*
    +Copyright (c) 2015-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package nfc
    +
    +import (
    +	"context"
    +	"errors"
    +	"fmt"
    +	"io"
    +	"path"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/progress"
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type Lease struct {
    +	types.ManagedObjectReference
    +
    +	c *vim25.Client
    +}
    +
    +func NewLease(c *vim25.Client, ref types.ManagedObjectReference) *Lease {
    +	return &Lease{ref, c}
    +}
    +
    +// Abort wraps methods.Abort
    +func (l *Lease) Abort(ctx context.Context, fault *types.LocalizedMethodFault) error {
    +	req := types.HttpNfcLeaseAbort{
    +		This:  l.Reference(),
    +		Fault: fault,
    +	}
    +
    +	_, err := methods.HttpNfcLeaseAbort(ctx, l.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// Complete wraps methods.Complete
    +func (l *Lease) Complete(ctx context.Context) error {
    +	req := types.HttpNfcLeaseComplete{
    +		This: l.Reference(),
    +	}
    +
    +	_, err := methods.HttpNfcLeaseComplete(ctx, l.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// GetManifest wraps methods.GetManifest
    +func (l *Lease) GetManifest(ctx context.Context) error {
    +	req := types.HttpNfcLeaseGetManifest{
    +		This: l.Reference(),
    +	}
    +
    +	_, err := methods.HttpNfcLeaseGetManifest(ctx, l.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// Progress wraps methods.Progress
    +func (l *Lease) Progress(ctx context.Context, percent int32) error {
    +	req := types.HttpNfcLeaseProgress{
    +		This:    l.Reference(),
    +		Percent: percent,
    +	}
    +
    +	_, err := methods.HttpNfcLeaseProgress(ctx, l.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +type LeaseInfo struct {
    +	types.HttpNfcLeaseInfo
    +
    +	Items []FileItem
    +}
    +
    +func (l *Lease) newLeaseInfo(li *types.HttpNfcLeaseInfo, items []types.OvfFileItem) (*LeaseInfo, error) {
    +	info := &LeaseInfo{
    +		HttpNfcLeaseInfo: *li,
    +	}
    +
    +	for _, device := range li.DeviceUrl {
    +		u, err := l.c.ParseURL(device.Url)
    +		if err != nil {
    +			return nil, err
    +		}
    +
    +		if device.SslThumbprint != "" {
    +			// TODO: prefer host management IP
    +			l.c.SetThumbprint(u.Host, device.SslThumbprint)
    +		}
    +
    +		if len(items) == 0 {
    +			// this is an export
    +			item := types.OvfFileItem{
    +				DeviceId: device.Key,
    +				Path:     device.TargetId,
    +				Size:     device.FileSize,
    +			}
    +
    +			if item.Size == 0 {
    +				item.Size = li.TotalDiskCapacityInKB * 1024
    +			}
    +
    +			if item.Path == "" {
    +				item.Path = path.Base(device.Url)
    +			}
    +
    +			info.Items = append(info.Items, NewFileItem(u, item))
    +
    +			continue
    +		}
    +
    +		// this is an import
    +		for _, item := range items {
    +			if device.ImportKey == item.DeviceId {
    +				info.Items = append(info.Items, NewFileItem(u, item))
    +				break
    +			}
    +		}
    +	}
    +
    +	return info, nil
    +}
    +
    +func (l *Lease) Wait(ctx context.Context, items []types.OvfFileItem) (*LeaseInfo, error) {
    +	var lease mo.HttpNfcLease
    +
    +	pc := property.DefaultCollector(l.c)
    +	err := property.Wait(ctx, pc, l.Reference(), []string{"state", "info", "error"}, func(pc []types.PropertyChange) bool {
    +		done := false
    +
    +		for _, c := range pc {
    +			if c.Val == nil {
    +				continue
    +			}
    +
    +			switch c.Name {
    +			case "error":
    +				val := c.Val.(types.LocalizedMethodFault)
    +				lease.Error = &val
    +				done = true
    +			case "info":
    +				val := c.Val.(types.HttpNfcLeaseInfo)
    +				lease.Info = &val
    +			case "state":
    +				lease.State = c.Val.(types.HttpNfcLeaseState)
    +				if lease.State != types.HttpNfcLeaseStateInitializing {
    +					done = true
    +				}
    +			}
    +		}
    +
    +		return done
    +	})
    +
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if lease.State == types.HttpNfcLeaseStateReady {
    +		return l.newLeaseInfo(lease.Info, items)
    +	}
    +
    +	if lease.Error != nil {
    +		return nil, errors.New(lease.Error.LocalizedMessage)
    +	}
    +
    +	return nil, fmt.Errorf("unexpected nfc lease state: %s", lease.State)
    +}
    +
    +func (l *Lease) StartUpdater(ctx context.Context, info *LeaseInfo) *LeaseUpdater {
    +	return newLeaseUpdater(ctx, l, info)
    +}
    +
    +func (l *Lease) Upload(ctx context.Context, item FileItem, f io.Reader, opts soap.Upload) error {
    +	if opts.Progress == nil {
    +		opts.Progress = item
    +	} else {
    +		opts.Progress = progress.Tee(item, opts.Progress)
    +	}
    +
    +	// Non-disk files (such as .iso) use the PUT method.
    +	// Overwrite: t header is also required in this case (ovftool does the same)
    +	if item.Create {
    +		opts.Method = "PUT"
    +		opts.Headers = map[string]string{
    +			"Overwrite": "t",
    +		}
    +	} else {
    +		opts.Method = "POST"
    +		opts.Type = "application/x-vnd.vmware-streamVmdk"
    +	}
    +
    +	return l.c.Upload(ctx, f, item.URL, &opts)
    +}
    +
    +func (l *Lease) DownloadFile(ctx context.Context, file string, item FileItem, opts soap.Download) error {
    +	if opts.Progress == nil {
    +		opts.Progress = item
    +	} else {
    +		opts.Progress = progress.Tee(item, opts.Progress)
    +	}
    +
    +	return l.c.DownloadFile(ctx, file, item.URL, &opts)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/nfc/lease_updater.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/nfc/lease_updater.go
    new file mode 100644
    index 00000000000..d3face81a4c
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/nfc/lease_updater.go
    @@ -0,0 +1,146 @@
    +/*
    +Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package nfc
    +
    +import (
    +	"context"
    +	"log"
    +	"net/url"
    +	"sync"
    +	"sync/atomic"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25/progress"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type FileItem struct {
    +	types.OvfFileItem
    +	URL *url.URL
    +
    +	ch chan progress.Report
    +}
    +
    +func NewFileItem(u *url.URL, item types.OvfFileItem) FileItem {
    +	return FileItem{
    +		OvfFileItem: item,
    +		URL:         u,
    +		ch:          make(chan progress.Report),
    +	}
    +}
    +
    +func (o FileItem) Sink() chan<- progress.Report {
    +	return o.ch
    +}
    +
    +// File converts the FileItem.OvfFileItem to an OvfFile
    +func (o FileItem) File() types.OvfFile {
    +	return types.OvfFile{
    +		DeviceId: o.DeviceId,
    +		Path:     o.Path,
    +		Size:     o.Size,
    +	}
    +}
    +
    +type LeaseUpdater struct {
    +	lease *Lease
    +
    +	pos   int64 // Number of bytes
    +	total int64 // Total number of bytes
    +
    +	done chan struct{} // When lease updater should stop
    +
    +	wg sync.WaitGroup // Track when update loop is done
    +}
    +
    +func newLeaseUpdater(ctx context.Context, lease *Lease, info *LeaseInfo) *LeaseUpdater {
    +	l := LeaseUpdater{
    +		lease: lease,
    +
    +		done: make(chan struct{}),
    +	}
    +
    +	for _, item := range info.Items {
    +		l.total += item.Size
    +		go l.waitForProgress(item)
    +	}
    +
    +	// Kickstart update loop
    +	l.wg.Add(1)
    +	go l.run()
    +
    +	return &l
    +}
    +
    +func (l *LeaseUpdater) waitForProgress(item FileItem) {
    +	var pos, total int64
    +
    +	total = item.Size
    +
    +	for {
    +		select {
    +		case <-l.done:
    +			return
    +		case p, ok := <-item.ch:
    +			// Return in case of error
    +			if ok && p.Error() != nil {
    +				return
    +			}
    +
    +			if !ok {
    +				// Last element on the channel, add to total
    +				atomic.AddInt64(&l.pos, total-pos)
    +				return
    +			}
    +
    +			// Approximate progress in number of bytes
    +			x := int64(float32(total) * (p.Percentage() / 100.0))
    +			atomic.AddInt64(&l.pos, x-pos)
    +			pos = x
    +		}
    +	}
    +}
    +
    +func (l *LeaseUpdater) run() {
    +	defer l.wg.Done()
    +
    +	tick := time.NewTicker(2 * time.Second)
    +	defer tick.Stop()
    +
    +	for {
    +		select {
    +		case <-l.done:
    +			return
    +		case <-tick.C:
    +			// From the vim api HttpNfcLeaseProgress(percent) doc, percent ==
    +			// "Completion status represented as an integer in the 0-100 range."
    +			// Always report the current value of percent, as it will renew the
    +			// lease even if the value hasn't changed or is 0.
    +			percent := int32(float32(100*atomic.LoadInt64(&l.pos)) / float32(l.total))
    +			err := l.lease.Progress(context.TODO(), percent)
    +			if err != nil {
    +				log.Printf("NFC lease progress: %s", err)
    +				return
    +			}
    +		}
    +	}
    +}
    +
    +func (l *LeaseUpdater) Done() {
    +	close(l.done)
    +	l.wg.Wait()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/authorization_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/authorization_manager.go
    new file mode 100644
    index 00000000000..b703258fe7a
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/authorization_manager.go
    @@ -0,0 +1,174 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type AuthorizationManager struct {
    +	Common
    +}
    +
    +func NewAuthorizationManager(c *vim25.Client) *AuthorizationManager {
    +	m := AuthorizationManager{
    +		Common: NewCommon(c, *c.ServiceContent.AuthorizationManager),
    +	}
    +
    +	return &m
    +}
    +
    +type AuthorizationRoleList []types.AuthorizationRole
    +
    +func (l AuthorizationRoleList) ById(id int32) *types.AuthorizationRole {
    +	for _, role := range l {
    +		if role.RoleId == id {
    +			return &role
    +		}
    +	}
    +
    +	return nil
    +}
    +
    +func (l AuthorizationRoleList) ByName(name string) *types.AuthorizationRole {
    +	for _, role := range l {
    +		if role.Name == name {
    +			return &role
    +		}
    +	}
    +
    +	return nil
    +}
    +
    +func (m AuthorizationManager) RoleList(ctx context.Context) (AuthorizationRoleList, error) {
    +	var am mo.AuthorizationManager
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"roleList"}, &am)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return AuthorizationRoleList(am.RoleList), nil
    +}
    +
    +func (m AuthorizationManager) RetrieveEntityPermissions(ctx context.Context, entity types.ManagedObjectReference, inherited bool) ([]types.Permission, error) {
    +	req := types.RetrieveEntityPermissions{
    +		This:      m.Reference(),
    +		Entity:    entity,
    +		Inherited: inherited,
    +	}
    +
    +	res, err := methods.RetrieveEntityPermissions(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (m AuthorizationManager) RemoveEntityPermission(ctx context.Context, entity types.ManagedObjectReference, user string, isGroup bool) error {
    +	req := types.RemoveEntityPermission{
    +		This:    m.Reference(),
    +		Entity:  entity,
    +		User:    user,
    +		IsGroup: isGroup,
    +	}
    +
    +	_, err := methods.RemoveEntityPermission(ctx, m.Client(), &req)
    +	return err
    +}
    +
    +func (m AuthorizationManager) SetEntityPermissions(ctx context.Context, entity types.ManagedObjectReference, permission []types.Permission) error {
    +	req := types.SetEntityPermissions{
    +		This:       m.Reference(),
    +		Entity:     entity,
    +		Permission: permission,
    +	}
    +
    +	_, err := methods.SetEntityPermissions(ctx, m.Client(), &req)
    +	return err
    +}
    +
    +func (m AuthorizationManager) RetrieveRolePermissions(ctx context.Context, id int32) ([]types.Permission, error) {
    +	req := types.RetrieveRolePermissions{
    +		This:   m.Reference(),
    +		RoleId: id,
    +	}
    +
    +	res, err := methods.RetrieveRolePermissions(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (m AuthorizationManager) RetrieveAllPermissions(ctx context.Context) ([]types.Permission, error) {
    +	req := types.RetrieveAllPermissions{
    +		This: m.Reference(),
    +	}
    +
    +	res, err := methods.RetrieveAllPermissions(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (m AuthorizationManager) AddRole(ctx context.Context, name string, ids []string) (int32, error) {
    +	req := types.AddAuthorizationRole{
    +		This:    m.Reference(),
    +		Name:    name,
    +		PrivIds: ids,
    +	}
    +
    +	res, err := methods.AddAuthorizationRole(ctx, m.Client(), &req)
    +	if err != nil {
    +		return -1, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (m AuthorizationManager) RemoveRole(ctx context.Context, id int32, failIfUsed bool) error {
    +	req := types.RemoveAuthorizationRole{
    +		This:       m.Reference(),
    +		RoleId:     id,
    +		FailIfUsed: failIfUsed,
    +	}
    +
    +	_, err := methods.RemoveAuthorizationRole(ctx, m.Client(), &req)
    +	return err
    +}
    +
    +func (m AuthorizationManager) UpdateRole(ctx context.Context, id int32, name string, ids []string) error {
    +	req := types.UpdateAuthorizationRole{
    +		This:    m.Reference(),
    +		RoleId:  id,
    +		NewName: name,
    +		PrivIds: ids,
    +	}
    +
    +	_, err := methods.UpdateAuthorizationRole(ctx, m.Client(), &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/authorization_manager_internal.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/authorization_manager_internal.go
    new file mode 100644
    index 00000000000..4fa520f5add
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/authorization_manager_internal.go
    @@ -0,0 +1,86 @@
    +/*
    +Copyright (c) 2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type DisabledMethodRequest struct {
    +	Method string `xml:"method"`
    +	Reason string `xml:"reasonId"`
    +}
    +
    +type disableMethodsRequest struct {
    +	This   types.ManagedObjectReference   `xml:"_this"`
    +	Entity []types.ManagedObjectReference `xml:"entity"`
    +	Method []DisabledMethodRequest        `xml:"method"`
    +	Source string                         `xml:"sourceId"`
    +	Scope  bool                           `xml:"sessionScope,omitempty"`
    +}
    +
    +type disableMethodsBody struct {
    +	Req *disableMethodsRequest `xml:"urn:internalvim25 DisableMethods,omitempty"`
    +	Res interface{}            `xml:"urn:vim25 DisableMethodsResponse,omitempty"`
    +	Err *soap.Fault            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *disableMethodsBody) Fault() *soap.Fault { return b.Err }
    +
    +func (m AuthorizationManager) DisableMethods(ctx context.Context, entity []types.ManagedObjectReference, method []DisabledMethodRequest, source string) error {
    +	var reqBody, resBody disableMethodsBody
    +
    +	reqBody.Req = &disableMethodsRequest{
    +		This:   m.Reference(),
    +		Entity: entity,
    +		Method: method,
    +		Source: source,
    +	}
    +
    +	return m.Client().RoundTrip(ctx, &reqBody, &resBody)
    +}
    +
    +type enableMethodsRequest struct {
    +	This   types.ManagedObjectReference   `xml:"_this"`
    +	Entity []types.ManagedObjectReference `xml:"entity"`
    +	Method []string                       `xml:"method"`
    +	Source string                         `xml:"sourceId"`
    +}
    +
    +type enableMethodsBody struct {
    +	Req *enableMethodsRequest `xml:"urn:internalvim25 EnableMethods,omitempty"`
    +	Res interface{}           `xml:"urn:vim25 EnableMethodsResponse,omitempty"`
    +	Err *soap.Fault           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *enableMethodsBody) Fault() *soap.Fault { return b.Err }
    +
    +func (m AuthorizationManager) EnableMethods(ctx context.Context, entity []types.ManagedObjectReference, method []string, source string) error {
    +	var reqBody, resBody enableMethodsBody
    +
    +	reqBody.Req = &enableMethodsRequest{
    +		This:   m.Reference(),
    +		Entity: entity,
    +		Method: method,
    +		Source: source,
    +	}
    +
    +	return m.Client().RoundTrip(ctx, &reqBody, &resBody)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/cluster_compute_resource.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/cluster_compute_resource.go
    new file mode 100644
    index 00000000000..c9fe3aa035b
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/cluster_compute_resource.go
    @@ -0,0 +1,70 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type ClusterComputeResource struct {
    +	ComputeResource
    +}
    +
    +func NewClusterComputeResource(c *vim25.Client, ref types.ManagedObjectReference) *ClusterComputeResource {
    +	return &ClusterComputeResource{
    +		ComputeResource: *NewComputeResource(c, ref),
    +	}
    +}
    +
    +func (c ClusterComputeResource) Configuration(ctx context.Context) (*types.ClusterConfigInfoEx, error) {
    +	var obj mo.ClusterComputeResource
    +
    +	err := c.Properties(ctx, c.Reference(), []string{"configurationEx"}, &obj)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return obj.ConfigurationEx.(*types.ClusterConfigInfoEx), nil
    +}
    +
    +func (c ClusterComputeResource) AddHost(ctx context.Context, spec types.HostConnectSpec, asConnected bool, license *string, resourcePool *types.ManagedObjectReference) (*Task, error) {
    +	req := types.AddHost_Task{
    +		This:        c.Reference(),
    +		Spec:        spec,
    +		AsConnected: asConnected,
    +	}
    +
    +	if license != nil {
    +		req.License = *license
    +	}
    +
    +	if resourcePool != nil {
    +		req.ResourcePool = resourcePool
    +	}
    +
    +	res, err := methods.AddHost_Task(ctx, c.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(c.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/common.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/common.go
    new file mode 100644
    index 00000000000..dfeee4a365e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/common.go
    @@ -0,0 +1,132 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"errors"
    +	"fmt"
    +	"path"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +var (
    +	ErrNotSupported = errors.New("product/version specific feature not supported by target")
    +)
    +
    +// Common contains the fields and functions common to all objects.
    +type Common struct {
    +	InventoryPath string
    +
    +	c *vim25.Client
    +	r types.ManagedObjectReference
    +}
    +
    +func (c Common) String() string {
    +	ref := fmt.Sprintf("%v", c.Reference())
    +
    +	if c.InventoryPath == "" {
    +		return ref
    +	}
    +
    +	return fmt.Sprintf("%s @ %s", ref, c.InventoryPath)
    +}
    +
    +func NewCommon(c *vim25.Client, r types.ManagedObjectReference) Common {
    +	return Common{c: c, r: r}
    +}
    +
    +func (c Common) Reference() types.ManagedObjectReference {
    +	return c.r
    +}
    +
    +func (c Common) Client() *vim25.Client {
    +	return c.c
    +}
    +
    +// Name returns the base name of the InventoryPath field
    +func (c Common) Name() string {
    +	if c.InventoryPath == "" {
    +		return ""
    +	}
    +	return path.Base(c.InventoryPath)
    +}
    +
    +func (c *Common) SetInventoryPath(p string) {
    +	c.InventoryPath = p
    +}
    +
    +// ObjectName returns the base name of the InventoryPath field if set,
    +// otherwise fetches the mo.ManagedEntity.Name field via the property collector.
    +func (c Common) ObjectName(ctx context.Context) (string, error) {
    +	var o mo.ManagedEntity
    +
    +	err := c.Properties(ctx, c.Reference(), []string{"name"}, &o)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	if o.Name != "" {
    +		return o.Name, nil
    +	}
    +
    +	// Network has its own "name" field...
    +	var n mo.Network
    +
    +	err = c.Properties(ctx, c.Reference(), []string{"name"}, &n)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return n.Name, nil
    +}
    +
    +func (c Common) Properties(ctx context.Context, r types.ManagedObjectReference, ps []string, dst interface{}) error {
    +	return property.DefaultCollector(c.c).RetrieveOne(ctx, r, ps, dst)
    +}
    +
    +func (c Common) Destroy(ctx context.Context) (*Task, error) {
    +	req := types.Destroy_Task{
    +		This: c.Reference(),
    +	}
    +
    +	res, err := methods.Destroy_Task(ctx, c.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(c.c, res.Returnval), nil
    +}
    +
    +func (c Common) Rename(ctx context.Context, name string) (*Task, error) {
    +	req := types.Rename_Task{
    +		This:    c.Reference(),
    +		NewName: name,
    +	}
    +
    +	res, err := methods.Rename_Task(ctx, c.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(c.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/compute_resource.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/compute_resource.go
    new file mode 100644
    index 00000000000..7645fddaf31
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/compute_resource.go
    @@ -0,0 +1,111 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"path"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type ComputeResource struct {
    +	Common
    +}
    +
    +func NewComputeResource(c *vim25.Client, ref types.ManagedObjectReference) *ComputeResource {
    +	return &ComputeResource{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (c ComputeResource) Hosts(ctx context.Context) ([]*HostSystem, error) {
    +	var cr mo.ComputeResource
    +
    +	err := c.Properties(ctx, c.Reference(), []string{"host"}, &cr)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if len(cr.Host) == 0 {
    +		return nil, nil
    +	}
    +
    +	var hs []mo.HostSystem
    +	pc := property.DefaultCollector(c.Client())
    +	err = pc.Retrieve(ctx, cr.Host, []string{"name"}, &hs)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var hosts []*HostSystem
    +
    +	for _, h := range hs {
    +		host := NewHostSystem(c.Client(), h.Reference())
    +		host.InventoryPath = path.Join(c.InventoryPath, h.Name)
    +		hosts = append(hosts, host)
    +	}
    +
    +	return hosts, nil
    +}
    +
    +func (c ComputeResource) Datastores(ctx context.Context) ([]*Datastore, error) {
    +	var cr mo.ComputeResource
    +
    +	err := c.Properties(ctx, c.Reference(), []string{"datastore"}, &cr)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var dss []*Datastore
    +	for _, ref := range cr.Datastore {
    +		ds := NewDatastore(c.c, ref)
    +		dss = append(dss, ds)
    +	}
    +
    +	return dss, nil
    +}
    +
    +func (c ComputeResource) ResourcePool(ctx context.Context) (*ResourcePool, error) {
    +	var cr mo.ComputeResource
    +
    +	err := c.Properties(ctx, c.Reference(), []string{"resourcePool"}, &cr)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewResourcePool(c.c, *cr.ResourcePool), nil
    +}
    +
    +func (c ComputeResource) Reconfigure(ctx context.Context, spec types.BaseComputeResourceConfigSpec, modify bool) (*Task, error) {
    +	req := types.ReconfigureComputeResource_Task{
    +		This:   c.Reference(),
    +		Spec:   spec,
    +		Modify: modify,
    +	}
    +
    +	res, err := methods.ReconfigureComputeResource_Task(ctx, c.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(c.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/custom_fields_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/custom_fields_manager.go
    new file mode 100644
    index 00000000000..ef748ef2c13
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/custom_fields_manager.go
    @@ -0,0 +1,146 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"errors"
    +	"strconv"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +var (
    +	ErrKeyNameNotFound = errors.New("key name not found")
    +)
    +
    +type CustomFieldsManager struct {
    +	Common
    +}
    +
    +// GetCustomFieldsManager wraps NewCustomFieldsManager, returning ErrNotSupported
    +// when the client is not connected to a vCenter instance.
    +func GetCustomFieldsManager(c *vim25.Client) (*CustomFieldsManager, error) {
    +	if c.ServiceContent.CustomFieldsManager == nil {
    +		return nil, ErrNotSupported
    +	}
    +	return NewCustomFieldsManager(c), nil
    +}
    +
    +func NewCustomFieldsManager(c *vim25.Client) *CustomFieldsManager {
    +	m := CustomFieldsManager{
    +		Common: NewCommon(c, *c.ServiceContent.CustomFieldsManager),
    +	}
    +
    +	return &m
    +}
    +
    +func (m CustomFieldsManager) Add(ctx context.Context, name string, moType string, fieldDefPolicy *types.PrivilegePolicyDef, fieldPolicy *types.PrivilegePolicyDef) (*types.CustomFieldDef, error) {
    +	req := types.AddCustomFieldDef{
    +		This:           m.Reference(),
    +		Name:           name,
    +		MoType:         moType,
    +		FieldDefPolicy: fieldDefPolicy,
    +		FieldPolicy:    fieldPolicy,
    +	}
    +
    +	res, err := methods.AddCustomFieldDef(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +func (m CustomFieldsManager) Remove(ctx context.Context, key int32) error {
    +	req := types.RemoveCustomFieldDef{
    +		This: m.Reference(),
    +		Key:  key,
    +	}
    +
    +	_, err := methods.RemoveCustomFieldDef(ctx, m.c, &req)
    +	return err
    +}
    +
    +func (m CustomFieldsManager) Rename(ctx context.Context, key int32, name string) error {
    +	req := types.RenameCustomFieldDef{
    +		This: m.Reference(),
    +		Key:  key,
    +		Name: name,
    +	}
    +
    +	_, err := methods.RenameCustomFieldDef(ctx, m.c, &req)
    +	return err
    +}
    +
    +func (m CustomFieldsManager) Set(ctx context.Context, entity types.ManagedObjectReference, key int32, value string) error {
    +	req := types.SetField{
    +		This:   m.Reference(),
    +		Entity: entity,
    +		Key:    key,
    +		Value:  value,
    +	}
    +
    +	_, err := methods.SetField(ctx, m.c, &req)
    +	return err
    +}
    +
    +type CustomFieldDefList []types.CustomFieldDef
    +
    +func (m CustomFieldsManager) Field(ctx context.Context) (CustomFieldDefList, error) {
    +	var fm mo.CustomFieldsManager
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"field"}, &fm)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return fm.Field, nil
    +}
    +
    +func (m CustomFieldsManager) FindKey(ctx context.Context, name string) (int32, error) {
    +	field, err := m.Field(ctx)
    +	if err != nil {
    +		return -1, err
    +	}
    +
    +	for _, def := range field {
    +		if def.Name == name {
    +			return def.Key, nil
    +		}
    +	}
    +
    +	k, err := strconv.Atoi(name)
    +	if err == nil {
    +		// assume literal int key
    +		return int32(k), nil
    +	}
    +
    +	return -1, ErrKeyNameNotFound
    +}
    +
    +func (l CustomFieldDefList) ByKey(key int32) *types.CustomFieldDef {
    +	for _, def := range l {
    +		if def.Key == key {
    +			return &def
    +		}
    +	}
    +	return nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/customization_spec_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/customization_spec_manager.go
    new file mode 100644
    index 00000000000..cb8b965dc6e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/customization_spec_manager.go
    @@ -0,0 +1,166 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type CustomizationSpecManager struct {
    +	Common
    +}
    +
    +func NewCustomizationSpecManager(c *vim25.Client) *CustomizationSpecManager {
    +	cs := CustomizationSpecManager{
    +		Common: NewCommon(c, *c.ServiceContent.CustomizationSpecManager),
    +	}
    +
    +	return &cs
    +}
    +
    +func (cs CustomizationSpecManager) DoesCustomizationSpecExist(ctx context.Context, name string) (bool, error) {
    +	req := types.DoesCustomizationSpecExist{
    +		This: cs.Reference(),
    +		Name: name,
    +	}
    +
    +	res, err := methods.DoesCustomizationSpecExist(ctx, cs.c, &req)
    +
    +	if err != nil {
    +		return false, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (cs CustomizationSpecManager) GetCustomizationSpec(ctx context.Context, name string) (*types.CustomizationSpecItem, error) {
    +	req := types.GetCustomizationSpec{
    +		This: cs.Reference(),
    +		Name: name,
    +	}
    +
    +	res, err := methods.GetCustomizationSpec(ctx, cs.c, &req)
    +
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +func (cs CustomizationSpecManager) CreateCustomizationSpec(ctx context.Context, item types.CustomizationSpecItem) error {
    +	req := types.CreateCustomizationSpec{
    +		This: cs.Reference(),
    +		Item: item,
    +	}
    +
    +	_, err := methods.CreateCustomizationSpec(ctx, cs.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (cs CustomizationSpecManager) OverwriteCustomizationSpec(ctx context.Context, item types.CustomizationSpecItem) error {
    +	req := types.OverwriteCustomizationSpec{
    +		This: cs.Reference(),
    +		Item: item,
    +	}
    +
    +	_, err := methods.OverwriteCustomizationSpec(ctx, cs.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (cs CustomizationSpecManager) DeleteCustomizationSpec(ctx context.Context, name string) error {
    +	req := types.DeleteCustomizationSpec{
    +		This: cs.Reference(),
    +		Name: name,
    +	}
    +
    +	_, err := methods.DeleteCustomizationSpec(ctx, cs.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (cs CustomizationSpecManager) DuplicateCustomizationSpec(ctx context.Context, name string, newName string) error {
    +	req := types.DuplicateCustomizationSpec{
    +		This:    cs.Reference(),
    +		Name:    name,
    +		NewName: newName,
    +	}
    +
    +	_, err := methods.DuplicateCustomizationSpec(ctx, cs.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (cs CustomizationSpecManager) RenameCustomizationSpec(ctx context.Context, name string, newName string) error {
    +	req := types.RenameCustomizationSpec{
    +		This:    cs.Reference(),
    +		Name:    name,
    +		NewName: newName,
    +	}
    +
    +	_, err := methods.RenameCustomizationSpec(ctx, cs.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (cs CustomizationSpecManager) CustomizationSpecItemToXml(ctx context.Context, item types.CustomizationSpecItem) (string, error) {
    +	req := types.CustomizationSpecItemToXml{
    +		This: cs.Reference(),
    +		Item: item,
    +	}
    +
    +	res, err := methods.CustomizationSpecItemToXml(ctx, cs.c, &req)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (cs CustomizationSpecManager) XmlToCustomizationSpecItem(ctx context.Context, xml string) (*types.CustomizationSpecItem, error) {
    +	req := types.XmlToCustomizationSpecItem{
    +		This:        cs.Reference(),
    +		SpecItemXml: xml,
    +	}
    +
    +	res, err := methods.XmlToCustomizationSpecItem(ctx, cs.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +	return &res.Returnval, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datacenter.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datacenter.go
    new file mode 100644
    index 00000000000..41fa3526571
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datacenter.go
    @@ -0,0 +1,129 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"fmt"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type DatacenterFolders struct {
    +	VmFolder        *Folder
    +	HostFolder      *Folder
    +	DatastoreFolder *Folder
    +	NetworkFolder   *Folder
    +}
    +
    +type Datacenter struct {
    +	Common
    +}
    +
    +func NewDatacenter(c *vim25.Client, ref types.ManagedObjectReference) *Datacenter {
    +	return &Datacenter{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (d *Datacenter) Folders(ctx context.Context) (*DatacenterFolders, error) {
    +	var md mo.Datacenter
    +
    +	ps := []string{"name", "vmFolder", "hostFolder", "datastoreFolder", "networkFolder"}
    +	err := d.Properties(ctx, d.Reference(), ps, &md)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	df := &DatacenterFolders{
    +		VmFolder:        NewFolder(d.c, md.VmFolder),
    +		HostFolder:      NewFolder(d.c, md.HostFolder),
    +		DatastoreFolder: NewFolder(d.c, md.DatastoreFolder),
    +		NetworkFolder:   NewFolder(d.c, md.NetworkFolder),
    +	}
    +
    +	paths := []struct {
    +		name string
    +		path *string
    +	}{
    +		{"vm", &df.VmFolder.InventoryPath},
    +		{"host", &df.HostFolder.InventoryPath},
    +		{"datastore", &df.DatastoreFolder.InventoryPath},
    +		{"network", &df.NetworkFolder.InventoryPath},
    +	}
    +
    +	for _, p := range paths {
    +		*p.path = fmt.Sprintf("/%s/%s", md.Name, p.name)
    +	}
    +
    +	return df, nil
    +}
    +
    +func (d Datacenter) Destroy(ctx context.Context) (*Task, error) {
    +	req := types.Destroy_Task{
    +		This: d.Reference(),
    +	}
    +
    +	res, err := methods.Destroy_Task(ctx, d.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(d.c, res.Returnval), nil
    +}
    +
    +// PowerOnVM powers on multiple virtual machines with a single vCenter call.
    +// If called against ESX, serially powers on the list of VMs and the returned *Task will always be nil.
    +func (d Datacenter) PowerOnVM(ctx context.Context, vm []types.ManagedObjectReference, option ...types.BaseOptionValue) (*Task, error) {
    +	if d.Client().IsVC() {
    +		req := types.PowerOnMultiVM_Task{
    +			This:   d.Reference(),
    +			Vm:     vm,
    +			Option: option,
    +		}
    +
    +		res, err := methods.PowerOnMultiVM_Task(ctx, d.c, &req)
    +		if err != nil {
    +			return nil, err
    +		}
    +
    +		return NewTask(d.c, res.Returnval), nil
    +	}
    +
    +	for _, ref := range vm {
    +		obj := NewVirtualMachine(d.Client(), ref)
    +		task, err := obj.PowerOn(ctx)
    +		if err != nil {
    +			return nil, err
    +		}
    +
    +		err = task.Wait(ctx)
    +		if err != nil {
    +			// Ignore any InvalidPowerState fault, as it indicates the VM is already powered on
    +			if f, ok := err.(types.HasFault); ok {
    +				if _, ok = f.Fault().(*types.InvalidPowerState); !ok {
    +					return nil, err
    +				}
    +			}
    +		}
    +	}
    +
    +	return nil, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore.go
    new file mode 100644
    index 00000000000..dfe6603aa5c
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore.go
    @@ -0,0 +1,435 @@
    +/*
    +Copyright (c) 2015-2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"fmt"
    +	"io"
    +	"math/rand"
    +	"os"
    +	"path"
    +	"strings"
    +
    +	"context"
    +	"net/http"
    +	"net/url"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/session"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// DatastoreNoSuchDirectoryError is returned when a directory could not be found.
    +type DatastoreNoSuchDirectoryError struct {
    +	verb    string
    +	subject string
    +}
    +
    +func (e DatastoreNoSuchDirectoryError) Error() string {
    +	return fmt.Sprintf("cannot %s '%s': No such directory", e.verb, e.subject)
    +}
    +
    +// DatastoreNoSuchFileError is returned when a file could not be found.
    +type DatastoreNoSuchFileError struct {
    +	verb    string
    +	subject string
    +}
    +
    +func (e DatastoreNoSuchFileError) Error() string {
    +	return fmt.Sprintf("cannot %s '%s': No such file", e.verb, e.subject)
    +}
    +
    +type Datastore struct {
    +	Common
    +
    +	DatacenterPath string
    +}
    +
    +func NewDatastore(c *vim25.Client, ref types.ManagedObjectReference) *Datastore {
    +	return &Datastore{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (d Datastore) Path(path string) string {
    +	return (&DatastorePath{
    +		Datastore: d.Name(),
    +		Path:      path,
    +	}).String()
    +}
    +
    +// NewURL constructs a url.URL with the given file path for datastore access over HTTP.
    +func (d Datastore) NewURL(path string) *url.URL {
    +	u := d.c.URL()
    +
    +	return &url.URL{
    +		Scheme: u.Scheme,
    +		Host:   u.Host,
    +		Path:   fmt.Sprintf("/folder/%s", path),
    +		RawQuery: url.Values{
    +			"dcPath": []string{d.DatacenterPath},
    +			"dsName": []string{d.Name()},
    +		}.Encode(),
    +	}
    +}
    +
    +// URL is deprecated, use NewURL instead.
    +func (d Datastore) URL(ctx context.Context, dc *Datacenter, path string) (*url.URL, error) {
    +	return d.NewURL(path), nil
    +}
    +
    +func (d Datastore) Browser(ctx context.Context) (*HostDatastoreBrowser, error) {
    +	var do mo.Datastore
    +
    +	err := d.Properties(ctx, d.Reference(), []string{"browser"}, &do)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewHostDatastoreBrowser(d.c, do.Browser), nil
    +}
    +
    +func (d Datastore) useServiceTicket() bool {
    +	// If connected to workstation, service ticketing not supported
    +	// If connected to ESX, service ticketing not needed
    +	if !d.c.IsVC() {
    +		return false
    +	}
    +
    +	key := "GOVMOMI_USE_SERVICE_TICKET"
    +
    +	val := d.c.URL().Query().Get(key)
    +	if val == "" {
    +		val = os.Getenv(key)
    +	}
    +
    +	if val == "1" || val == "true" {
    +		return true
    +	}
    +
    +	return false
    +}
    +
    +func (d Datastore) useServiceTicketHostName(name string) bool {
    +	// No need if talking directly to ESX.
    +	if !d.c.IsVC() {
    +		return false
    +	}
    +
    +	// If version happens to be < 5.1
    +	if name == "" {
    +		return false
    +	}
    +
    +	// If the HostSystem is using DHCP on a network without dynamic DNS,
    +	// HostSystem.Config.Network.DnsConfig.HostName is set to "localhost" by default.
    +	// This resolves to "localhost.localdomain" by default via /etc/hosts on ESX.
    +	// In that case, we will stick with the HostSystem.Name which is the IP address that
    +	// was used to connect the host to VC.
    +	if name == "localhost.localdomain" {
    +		return false
    +	}
    +
    +	// Still possible to have HostName that don't resolve via DNS,
    +	// so we default to false.
    +	key := "GOVMOMI_USE_SERVICE_TICKET_HOSTNAME"
    +
    +	val := d.c.URL().Query().Get(key)
    +	if val == "" {
    +		val = os.Getenv(key)
    +	}
    +
    +	if val == "1" || val == "true" {
    +		return true
    +	}
    +
    +	return false
    +}
    +
    +type datastoreServiceTicketHostKey struct{}
    +
    +// HostContext returns a Context where the given host will be used for datastore HTTP access
    +// via the ServiceTicket method.
    +func (d Datastore) HostContext(ctx context.Context, host *HostSystem) context.Context {
    +	return context.WithValue(ctx, datastoreServiceTicketHostKey{}, host)
    +}
    +
    +// ServiceTicket obtains a ticket via AcquireGenericServiceTicket and returns it an http.Cookie with the url.URL
    +// that can be used along with the ticket cookie to access the given path.  An host is chosen at random unless the
    +// the given Context was created with a specific host via the HostContext method.
    +func (d Datastore) ServiceTicket(ctx context.Context, path string, method string) (*url.URL, *http.Cookie, error) {
    +	u := d.NewURL(path)
    +
    +	host, ok := ctx.Value(datastoreServiceTicketHostKey{}).(*HostSystem)
    +
    +	if !ok {
    +		if !d.useServiceTicket() {
    +			return u, nil, nil
    +		}
    +
    +		hosts, err := d.AttachedHosts(ctx)
    +		if err != nil {
    +			return nil, nil, err
    +		}
    +
    +		if len(hosts) == 0 {
    +			// Fallback to letting vCenter choose a host
    +			return u, nil, nil
    +		}
    +
    +		// Pick a random attached host
    +		host = hosts[rand.Intn(len(hosts))]
    +	}
    +
    +	ips, err := host.ManagementIPs(ctx)
    +	if err != nil {
    +		return nil, nil, err
    +	}
    +
    +	if len(ips) > 0 {
    +		// prefer a ManagementIP
    +		u.Host = ips[0].String()
    +	} else {
    +		// fallback to inventory name
    +		u.Host, err = host.ObjectName(ctx)
    +		if err != nil {
    +			return nil, nil, err
    +		}
    +	}
    +
    +	// VC datacenter path will not be valid against ESX
    +	q := u.Query()
    +	delete(q, "dcPath")
    +	u.RawQuery = q.Encode()
    +
    +	spec := types.SessionManagerHttpServiceRequestSpec{
    +		Url: u.String(),
    +		// See SessionManagerHttpServiceRequestSpecMethod enum
    +		Method: fmt.Sprintf("http%s%s", method[0:1], strings.ToLower(method[1:])),
    +	}
    +
    +	sm := session.NewManager(d.Client())
    +
    +	ticket, err := sm.AcquireGenericServiceTicket(ctx, &spec)
    +	if err != nil {
    +		return nil, nil, err
    +	}
    +
    +	cookie := &http.Cookie{
    +		Name:  "vmware_cgi_ticket",
    +		Value: ticket.Id,
    +	}
    +
    +	if d.useServiceTicketHostName(ticket.HostName) {
    +		u.Host = ticket.HostName
    +	}
    +
    +	d.Client().SetThumbprint(u.Host, ticket.SslThumbprint)
    +
    +	return u, cookie, nil
    +}
    +
    +func (d Datastore) uploadTicket(ctx context.Context, path string, param *soap.Upload) (*url.URL, *soap.Upload, error) {
    +	p := soap.DefaultUpload
    +	if param != nil {
    +		p = *param // copy
    +	}
    +
    +	u, ticket, err := d.ServiceTicket(ctx, path, p.Method)
    +	if err != nil {
    +		return nil, nil, err
    +	}
    +
    +	p.Ticket = ticket
    +
    +	return u, &p, nil
    +}
    +
    +func (d Datastore) downloadTicket(ctx context.Context, path string, param *soap.Download) (*url.URL, *soap.Download, error) {
    +	p := soap.DefaultDownload
    +	if param != nil {
    +		p = *param // copy
    +	}
    +
    +	u, ticket, err := d.ServiceTicket(ctx, path, p.Method)
    +	if err != nil {
    +		return nil, nil, err
    +	}
    +
    +	p.Ticket = ticket
    +
    +	return u, &p, nil
    +}
    +
    +// Upload via soap.Upload with an http service ticket
    +func (d Datastore) Upload(ctx context.Context, f io.Reader, path string, param *soap.Upload) error {
    +	u, p, err := d.uploadTicket(ctx, path, param)
    +	if err != nil {
    +		return err
    +	}
    +	return d.Client().Upload(ctx, f, u, p)
    +}
    +
    +// UploadFile via soap.Upload with an http service ticket
    +func (d Datastore) UploadFile(ctx context.Context, file string, path string, param *soap.Upload) error {
    +	u, p, err := d.uploadTicket(ctx, path, param)
    +	if err != nil {
    +		return err
    +	}
    +	return d.Client().UploadFile(ctx, file, u, p)
    +}
    +
    +// Download via soap.Download with an http service ticket
    +func (d Datastore) Download(ctx context.Context, path string, param *soap.Download) (io.ReadCloser, int64, error) {
    +	u, p, err := d.downloadTicket(ctx, path, param)
    +	if err != nil {
    +		return nil, 0, err
    +	}
    +	return d.Client().Download(ctx, u, p)
    +}
    +
    +// DownloadFile via soap.Download with an http service ticket
    +func (d Datastore) DownloadFile(ctx context.Context, path string, file string, param *soap.Download) error {
    +	u, p, err := d.downloadTicket(ctx, path, param)
    +	if err != nil {
    +		return err
    +	}
    +	return d.Client().DownloadFile(ctx, file, u, p)
    +}
    +
    +// AttachedHosts returns hosts that have this Datastore attached, accessible and writable.
    +func (d Datastore) AttachedHosts(ctx context.Context) ([]*HostSystem, error) {
    +	var ds mo.Datastore
    +	var hosts []*HostSystem
    +
    +	pc := property.DefaultCollector(d.Client())
    +	err := pc.RetrieveOne(ctx, d.Reference(), []string{"host"}, &ds)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	mounts := make(map[types.ManagedObjectReference]types.DatastoreHostMount)
    +	var refs []types.ManagedObjectReference
    +	for _, host := range ds.Host {
    +		refs = append(refs, host.Key)
    +		mounts[host.Key] = host
    +	}
    +
    +	var hs []mo.HostSystem
    +	err = pc.Retrieve(ctx, refs, []string{"runtime.connectionState", "runtime.powerState"}, &hs)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	for _, host := range hs {
    +		if host.Runtime.ConnectionState == types.HostSystemConnectionStateConnected &&
    +			host.Runtime.PowerState == types.HostSystemPowerStatePoweredOn {
    +
    +			mount := mounts[host.Reference()]
    +			info := mount.MountInfo
    +
    +			if *info.Mounted && *info.Accessible && info.AccessMode == string(types.HostMountModeReadWrite) {
    +				hosts = append(hosts, NewHostSystem(d.Client(), mount.Key))
    +			}
    +		}
    +	}
    +
    +	return hosts, nil
    +}
    +
    +// AttachedClusterHosts returns hosts that have this Datastore attached, accessible and writable and are members of the given cluster.
    +func (d Datastore) AttachedClusterHosts(ctx context.Context, cluster *ComputeResource) ([]*HostSystem, error) {
    +	var hosts []*HostSystem
    +
    +	clusterHosts, err := cluster.Hosts(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	attachedHosts, err := d.AttachedHosts(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	refs := make(map[types.ManagedObjectReference]bool)
    +	for _, host := range attachedHosts {
    +		refs[host.Reference()] = true
    +	}
    +
    +	for _, host := range clusterHosts {
    +		if refs[host.Reference()] {
    +			hosts = append(hosts, host)
    +		}
    +	}
    +
    +	return hosts, nil
    +}
    +
    +func (d Datastore) Stat(ctx context.Context, file string) (types.BaseFileInfo, error) {
    +	b, err := d.Browser(ctx)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	spec := types.HostDatastoreBrowserSearchSpec{
    +		Details: &types.FileQueryFlags{
    +			FileType:     true,
    +			FileSize:     true,
    +			Modification: true,
    +			FileOwner:    types.NewBool(true),
    +		},
    +		MatchPattern: []string{path.Base(file)},
    +	}
    +
    +	dsPath := d.Path(path.Dir(file))
    +	task, err := b.SearchDatastore(ctx, dsPath, &spec)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	info, err := task.WaitForResult(ctx, nil)
    +	if err != nil {
    +		if types.IsFileNotFound(err) {
    +			// FileNotFound means the base path doesn't exist.
    +			return nil, DatastoreNoSuchDirectoryError{"stat", dsPath}
    +		}
    +
    +		return nil, err
    +	}
    +
    +	res := info.Result.(types.HostDatastoreBrowserSearchResults)
    +	if len(res.File) == 0 {
    +		// File doesn't exist
    +		return nil, DatastoreNoSuchFileError{"stat", d.Path(file)}
    +	}
    +
    +	return res.File[0], nil
    +
    +}
    +
    +// Type returns the type of file system volume.
    +func (d Datastore) Type(ctx context.Context) (types.HostFileSystemVolumeFileSystemType, error) {
    +	var mds mo.Datastore
    +
    +	if err := d.Properties(ctx, d.Reference(), []string{"summary.type"}, &mds); err != nil {
    +		return types.HostFileSystemVolumeFileSystemType(""), err
    +	}
    +	return types.HostFileSystemVolumeFileSystemType(mds.Summary.Type), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_file.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_file.go
    new file mode 100644
    index 00000000000..bc010fc36e8
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_file.go
    @@ -0,0 +1,414 @@
    +/*
    +Copyright (c) 2016-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"bytes"
    +	"context"
    +	"errors"
    +	"fmt"
    +	"io"
    +	"net/http"
    +	"os"
    +	"path"
    +	"sync"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +)
    +
    +// DatastoreFile implements io.Reader, io.Seeker and io.Closer interfaces for datastore file access.
    +type DatastoreFile struct {
    +	d    Datastore
    +	ctx  context.Context
    +	name string
    +
    +	buf    io.Reader
    +	body   io.ReadCloser
    +	length int64
    +	offset struct {
    +		read, seek int64
    +	}
    +}
    +
    +// Open opens the named file relative to the Datastore.
    +func (d Datastore) Open(ctx context.Context, name string) (*DatastoreFile, error) {
    +	return &DatastoreFile{
    +		d:      d,
    +		name:   name,
    +		length: -1,
    +		ctx:    ctx,
    +	}, nil
    +}
    +
    +// Read reads up to len(b) bytes from the DatastoreFile.
    +func (f *DatastoreFile) Read(b []byte) (int, error) {
    +	if f.offset.read != f.offset.seek {
    +		// A Seek() call changed the offset, we need to issue a new GET
    +		_ = f.Close()
    +
    +		f.offset.read = f.offset.seek
    +	} else if f.buf != nil {
    +		// f.buf + f behaves like an io.MultiReader
    +		n, err := f.buf.Read(b)
    +		if err == io.EOF {
    +			f.buf = nil // buffer has been drained
    +		}
    +		if n > 0 {
    +			return n, nil
    +		}
    +	}
    +
    +	body, err := f.get()
    +	if err != nil {
    +		return 0, err
    +	}
    +
    +	n, err := body.Read(b)
    +
    +	f.offset.read += int64(n)
    +	f.offset.seek += int64(n)
    +
    +	return n, err
    +}
    +
    +// Close closes the DatastoreFile.
    +func (f *DatastoreFile) Close() error {
    +	var err error
    +
    +	if f.body != nil {
    +		err = f.body.Close()
    +		f.body = nil
    +	}
    +
    +	f.buf = nil
    +
    +	return err
    +}
    +
    +// Seek sets the offset for the next Read on the DatastoreFile.
    +func (f *DatastoreFile) Seek(offset int64, whence int) (int64, error) {
    +	switch whence {
    +	case io.SeekStart:
    +	case io.SeekCurrent:
    +		offset += f.offset.seek
    +	case io.SeekEnd:
    +		if f.length < 0 {
    +			_, err := f.Stat()
    +			if err != nil {
    +				return 0, err
    +			}
    +		}
    +		offset += f.length
    +	default:
    +		return 0, errors.New("Seek: invalid whence")
    +	}
    +
    +	// allow negative SeekStart for initial Range request
    +	if offset < 0 {
    +		return 0, errors.New("Seek: invalid offset")
    +	}
    +
    +	f.offset.seek = offset
    +
    +	return offset, nil
    +}
    +
    +type fileStat struct {
    +	file   *DatastoreFile
    +	header http.Header
    +}
    +
    +func (s *fileStat) Name() string {
    +	return path.Base(s.file.name)
    +}
    +
    +func (s *fileStat) Size() int64 {
    +	return s.file.length
    +}
    +
    +func (s *fileStat) Mode() os.FileMode {
    +	return 0
    +}
    +
    +func (s *fileStat) ModTime() time.Time {
    +	return time.Now() // no Last-Modified
    +}
    +
    +func (s *fileStat) IsDir() bool {
    +	return false
    +}
    +
    +func (s *fileStat) Sys() interface{} {
    +	return s.header
    +}
    +
    +func statusError(res *http.Response) error {
    +	if res.StatusCode == http.StatusNotFound {
    +		return os.ErrNotExist
    +	}
    +	return errors.New(res.Status)
    +}
    +
    +// Stat returns the os.FileInfo interface describing file.
    +func (f *DatastoreFile) Stat() (os.FileInfo, error) {
    +	// TODO: consider using Datastore.Stat() instead
    +	u, p, err := f.d.downloadTicket(f.ctx, f.name, &soap.Download{Method: "HEAD"})
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	res, err := f.d.Client().DownloadRequest(f.ctx, u, p)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if res.StatusCode != http.StatusOK {
    +		return nil, statusError(res)
    +	}
    +
    +	f.length = res.ContentLength
    +
    +	return &fileStat{f, res.Header}, nil
    +}
    +
    +func (f *DatastoreFile) get() (io.Reader, error) {
    +	if f.body != nil {
    +		return f.body, nil
    +	}
    +
    +	u, p, err := f.d.downloadTicket(f.ctx, f.name, nil)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if f.offset.read != 0 {
    +		p.Headers = map[string]string{
    +			"Range": fmt.Sprintf("bytes=%d-", f.offset.read),
    +		}
    +	}
    +
    +	res, err := f.d.Client().DownloadRequest(f.ctx, u, p)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	switch res.StatusCode {
    +	case http.StatusOK:
    +		f.length = res.ContentLength
    +	case http.StatusPartialContent:
    +		var start, end int
    +		cr := res.Header.Get("Content-Range")
    +		_, err = fmt.Sscanf(cr, "bytes %d-%d/%d", &start, &end, &f.length)
    +		if err != nil {
    +			f.length = -1
    +		}
    +	case http.StatusRequestedRangeNotSatisfiable:
    +		// ok: Read() will return io.EOF
    +	default:
    +		return nil, statusError(res)
    +	}
    +
    +	if f.length < 0 {
    +		_ = res.Body.Close()
    +		return nil, errors.New("unable to determine file size")
    +	}
    +
    +	f.body = res.Body
    +
    +	return f.body, nil
    +}
    +
    +func lastIndexLines(s []byte, line *int, include func(l int, m string) bool) (int64, bool) {
    +	i := len(s) - 1
    +	done := false
    +
    +	for i > 0 {
    +		o := bytes.LastIndexByte(s[:i], '\n')
    +		if o < 0 {
    +			break
    +		}
    +
    +		msg := string(s[o+1 : i+1])
    +		if !include(*line, msg) {
    +			done = true
    +			break
    +		} else {
    +			i = o
    +			*line++
    +		}
    +	}
    +
    +	return int64(i), done
    +}
    +
    +// Tail seeks to the position of the last N lines of the file.
    +func (f *DatastoreFile) Tail(n int) error {
    +	return f.TailFunc(n, func(line int, _ string) bool { return n > line })
    +}
    +
    +// TailFunc will seek backwards in the datastore file until it hits a line that does
    +// not satisfy the supplied `include` function.
    +func (f *DatastoreFile) TailFunc(lines int, include func(line int, message string) bool) error {
    +	// Read the file in reverse using bsize chunks
    +	const bsize = int64(1024 * 16)
    +
    +	fsize, err := f.Seek(0, io.SeekEnd)
    +	if err != nil {
    +		return err
    +	}
    +
    +	if lines == 0 {
    +		return nil
    +	}
    +
    +	chunk := int64(-1)
    +
    +	buf := bytes.NewBuffer(make([]byte, 0, bsize))
    +	line := 0
    +
    +	for {
    +		var eof bool
    +		var pos int64
    +
    +		nread := bsize
    +
    +		offset := chunk * bsize
    +		remain := fsize + offset
    +
    +		if remain < 0 {
    +			if pos, err = f.Seek(0, io.SeekStart); err != nil {
    +				return err
    +			}
    +
    +			nread = bsize + remain
    +			eof = true
    +		} else {
    +			if pos, err = f.Seek(offset, io.SeekEnd); err != nil {
    +				return err
    +			}
    +		}
    +
    +		if _, err = io.CopyN(buf, f, nread); err != nil {
    +			if err != io.EOF {
    +				return err
    +			}
    +		}
    +
    +		b := buf.Bytes()
    +		idx, done := lastIndexLines(b, &line, include)
    +
    +		if done {
    +			if chunk == -1 {
    +				// We found all N lines in the last chunk of the file.
    +				// The seek offset is also now at the current end of file.
    +				// Save this buffer to avoid another GET request when Read() is called.
    +				buf.Next(int(idx + 1))
    +				f.buf = buf
    +				return nil
    +			}
    +
    +			if _, err = f.Seek(pos+idx+1, io.SeekStart); err != nil {
    +				return err
    +			}
    +
    +			break
    +		}
    +
    +		if eof {
    +			if remain < 0 {
    +				// We found < N lines in the entire file, so seek to the start.
    +				_, _ = f.Seek(0, io.SeekStart)
    +			}
    +			break
    +		}
    +
    +		chunk--
    +		buf.Reset()
    +	}
    +
    +	return nil
    +}
    +
    +type followDatastoreFile struct {
    +	r *DatastoreFile
    +	c chan struct{}
    +	i time.Duration
    +	o sync.Once
    +}
    +
    +// Read reads up to len(b) bytes from the DatastoreFile being followed.
    +// This method will block until data is read, an error other than io.EOF is returned or Close() is called.
    +func (f *followDatastoreFile) Read(p []byte) (int, error) {
    +	offset := f.r.offset.seek
    +	stop := false
    +
    +	for {
    +		n, err := f.r.Read(p)
    +		if err != nil && err == io.EOF {
    +			_ = f.r.Close() // GET request body has been drained.
    +			if stop {
    +				return n, err
    +			}
    +			err = nil
    +		}
    +
    +		if n > 0 {
    +			return n, err
    +		}
    +
    +		select {
    +		case <-f.c:
    +			// Wake up and stop polling once the body has been drained
    +			stop = true
    +		case <-time.After(f.i):
    +		}
    +
    +		info, serr := f.r.Stat()
    +		if serr != nil {
    +			// Return EOF rather than 404 if the file goes away
    +			if serr == os.ErrNotExist {
    +				_ = f.r.Close()
    +				return 0, io.EOF
    +			}
    +			return 0, serr
    +		}
    +
    +		if info.Size() < offset {
    +			// assume file has be truncated
    +			offset, err = f.r.Seek(0, io.SeekStart)
    +			if err != nil {
    +				return 0, err
    +			}
    +		}
    +	}
    +}
    +
    +// Close will stop Follow polling and close the underlying DatastoreFile.
    +func (f *followDatastoreFile) Close() error {
    +	f.o.Do(func() { close(f.c) })
    +	return nil
    +}
    +
    +// Follow returns an io.ReadCloser to stream the file contents as data is appended.
    +func (f *DatastoreFile) Follow(interval time.Duration) io.ReadCloser {
    +	return &followDatastoreFile{
    +		r: f,
    +		c: make(chan struct{}),
    +		i: interval,
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_file_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_file_manager.go
    new file mode 100644
    index 00000000000..a6e29c2c563
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_file_manager.go
    @@ -0,0 +1,228 @@
    +/*
    +Copyright (c) 2017-2018 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"bufio"
    +	"bytes"
    +	"context"
    +	"fmt"
    +	"io"
    +	"log"
    +	"path"
    +	"strings"
    +
    +	"github.com/vmware/govmomi/vim25/progress"
    +	"github.com/vmware/govmomi/vim25/soap"
    +)
    +
    +// DatastoreFileManager combines FileManager and VirtualDiskManager to manage files on a Datastore
    +type DatastoreFileManager struct {
    +	Datacenter         *Datacenter
    +	Datastore          *Datastore
    +	FileManager        *FileManager
    +	VirtualDiskManager *VirtualDiskManager
    +
    +	Force            bool
    +	DatacenterTarget *Datacenter
    +}
    +
    +// NewFileManager creates a new instance of DatastoreFileManager
    +func (d Datastore) NewFileManager(dc *Datacenter, force bool) *DatastoreFileManager {
    +	c := d.Client()
    +
    +	m := &DatastoreFileManager{
    +		Datacenter:         dc,
    +		Datastore:          &d,
    +		FileManager:        NewFileManager(c),
    +		VirtualDiskManager: NewVirtualDiskManager(c),
    +		Force:              force,
    +		DatacenterTarget:   dc,
    +	}
    +
    +	return m
    +}
    +
    +func (m *DatastoreFileManager) WithProgress(ctx context.Context, s progress.Sinker) context.Context {
    +	return context.WithValue(ctx, m, s)
    +}
    +
    +func (m *DatastoreFileManager) wait(ctx context.Context, task *Task) error {
    +	var logger progress.Sinker
    +	if s, ok := ctx.Value(m).(progress.Sinker); ok {
    +		logger = s
    +	}
    +	_, err := task.WaitForResult(ctx, logger)
    +	return err
    +}
    +
    +// Delete dispatches to the appropriate Delete method based on file name extension
    +func (m *DatastoreFileManager) Delete(ctx context.Context, name string) error {
    +	switch path.Ext(name) {
    +	case ".vmdk":
    +		return m.DeleteVirtualDisk(ctx, name)
    +	default:
    +		return m.DeleteFile(ctx, name)
    +	}
    +}
    +
    +// DeleteFile calls FileManager.DeleteDatastoreFile
    +func (m *DatastoreFileManager) DeleteFile(ctx context.Context, name string) error {
    +	p := m.Path(name)
    +
    +	task, err := m.FileManager.DeleteDatastoreFile(ctx, p.String(), m.Datacenter)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return m.wait(ctx, task)
    +}
    +
    +// DeleteVirtualDisk calls VirtualDiskManager.DeleteVirtualDisk
    +// Regardless of the Datastore type, DeleteVirtualDisk will fail if 'ddb.deletable=false',
    +// so if Force=true this method attempts to set 'ddb.deletable=true' before starting the delete task.
    +func (m *DatastoreFileManager) DeleteVirtualDisk(ctx context.Context, name string) error {
    +	p := m.Path(name)
    +
    +	var merr error
    +
    +	if m.Force {
    +		merr = m.markDiskAsDeletable(ctx, p)
    +	}
    +
    +	task, err := m.VirtualDiskManager.DeleteVirtualDisk(ctx, p.String(), m.Datacenter)
    +	if err != nil {
    +		log.Printf("markDiskAsDeletable(%s): %s", p, merr)
    +		return err
    +	}
    +
    +	return m.wait(ctx, task)
    +}
    +
    +// CopyFile calls FileManager.CopyDatastoreFile
    +func (m *DatastoreFileManager) CopyFile(ctx context.Context, src string, dst string) error {
    +	srcp := m.Path(src)
    +	dstp := m.Path(dst)
    +
    +	task, err := m.FileManager.CopyDatastoreFile(ctx, srcp.String(), m.Datacenter, dstp.String(), m.DatacenterTarget, m.Force)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return m.wait(ctx, task)
    +}
    +
    +// Copy dispatches to the appropriate FileManager or VirtualDiskManager Copy method based on file name extension
    +func (m *DatastoreFileManager) Copy(ctx context.Context, src string, dst string) error {
    +	srcp := m.Path(src)
    +	dstp := m.Path(dst)
    +
    +	f := m.FileManager.CopyDatastoreFile
    +
    +	if srcp.IsVMDK() {
    +		// types.VirtualDiskSpec=nil as it is not implemented by vCenter
    +		f = func(ctx context.Context, src string, srcDC *Datacenter, dst string, dstDC *Datacenter, force bool) (*Task, error) {
    +			return m.VirtualDiskManager.CopyVirtualDisk(ctx, src, srcDC, dst, dstDC, nil, force)
    +		}
    +	}
    +
    +	task, err := f(ctx, srcp.String(), m.Datacenter, dstp.String(), m.DatacenterTarget, m.Force)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return m.wait(ctx, task)
    +}
    +
    +// MoveFile calls FileManager.MoveDatastoreFile
    +func (m *DatastoreFileManager) MoveFile(ctx context.Context, src string, dst string) error {
    +	srcp := m.Path(src)
    +	dstp := m.Path(dst)
    +
    +	task, err := m.FileManager.MoveDatastoreFile(ctx, srcp.String(), m.Datacenter, dstp.String(), m.DatacenterTarget, m.Force)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return m.wait(ctx, task)
    +}
    +
    +// Move dispatches to the appropriate FileManager or VirtualDiskManager Move method based on file name extension
    +func (m *DatastoreFileManager) Move(ctx context.Context, src string, dst string) error {
    +	srcp := m.Path(src)
    +	dstp := m.Path(dst)
    +
    +	f := m.FileManager.MoveDatastoreFile
    +
    +	if srcp.IsVMDK() {
    +		f = m.VirtualDiskManager.MoveVirtualDisk
    +	}
    +
    +	task, err := f(ctx, srcp.String(), m.Datacenter, dstp.String(), m.DatacenterTarget, m.Force)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return m.wait(ctx, task)
    +}
    +
    +// Path converts path name to a DatastorePath
    +func (m *DatastoreFileManager) Path(name string) *DatastorePath {
    +	var p DatastorePath
    +
    +	if !p.FromString(name) {
    +		p.Path = name
    +		p.Datastore = m.Datastore.Name()
    +	}
    +
    +	return &p
    +}
    +
    +func (m *DatastoreFileManager) markDiskAsDeletable(ctx context.Context, path *DatastorePath) error {
    +	r, _, err := m.Datastore.Download(ctx, path.Path, &soap.DefaultDownload)
    +	if err != nil {
    +		return err
    +	}
    +
    +	defer r.Close()
    +
    +	hasFlag := false
    +	buf := new(bytes.Buffer)
    +
    +	s := bufio.NewScanner(&io.LimitedReader{R: r, N: 2048}) // should be only a few hundred bytes, limit to be sure
    +
    +	for s.Scan() {
    +		line := s.Text()
    +		if strings.HasPrefix(line, "ddb.deletable") {
    +			hasFlag = true
    +			continue
    +		}
    +
    +		fmt.Fprintln(buf, line)
    +	}
    +
    +	if err := s.Err(); err != nil {
    +		return err // any error other than EOF
    +	}
    +
    +	if !hasFlag {
    +		return nil // already deletable, so leave as-is
    +	}
    +
    +	// rewrite the .vmdk with ddb.deletable flag removed (the default is true)
    +	return m.Datastore.Upload(ctx, buf, path.Path, &soap.DefaultUpload)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_path.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_path.go
    new file mode 100644
    index 00000000000..1563ee1e11d
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/datastore_path.go
    @@ -0,0 +1,71 @@
    +/*
    +Copyright (c) 2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"fmt"
    +	"path"
    +	"strings"
    +)
    +
    +// DatastorePath contains the components of a datastore path.
    +type DatastorePath struct {
    +	Datastore string
    +	Path      string
    +}
    +
    +// FromString parses a datastore path.
    +// Returns true if the path could be parsed, false otherwise.
    +func (p *DatastorePath) FromString(s string) bool {
    +	if len(s) == 0 {
    +		return false
    +	}
    +
    +	s = strings.TrimSpace(s)
    +
    +	if !strings.HasPrefix(s, "[") {
    +		return false
    +	}
    +
    +	s = s[1:]
    +
    +	ix := strings.Index(s, "]")
    +	if ix < 0 {
    +		return false
    +	}
    +
    +	p.Datastore = s[:ix]
    +	p.Path = strings.TrimSpace(s[ix+1:])
    +
    +	return true
    +}
    +
    +// String formats a datastore path.
    +func (p *DatastorePath) String() string {
    +	s := fmt.Sprintf("[%s]", p.Datastore)
    +
    +	if p.Path == "" {
    +		return s
    +	}
    +
    +	return strings.Join([]string{s, p.Path}, " ")
    +}
    +
    +// IsVMDK returns true if Path has a ".vmdk" extension
    +func (p *DatastorePath) IsVMDK() bool {
    +	return path.Ext(p.Path) == ".vmdk"
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/diagnostic_log.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/diagnostic_log.go
    new file mode 100644
    index 00000000000..466d0ee915b
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/diagnostic_log.go
    @@ -0,0 +1,76 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"fmt"
    +	"io"
    +	"math"
    +)
    +
    +// DiagnosticLog wraps DiagnosticManager.BrowseLog
    +type DiagnosticLog struct {
    +	m DiagnosticManager
    +
    +	Key  string
    +	Host *HostSystem
    +
    +	Start int32
    +}
    +
    +// Seek to log position starting at the last nlines of the log
    +func (l *DiagnosticLog) Seek(ctx context.Context, nlines int32) error {
    +	h, err := l.m.BrowseLog(ctx, l.Host, l.Key, math.MaxInt32, 0)
    +	if err != nil {
    +		return err
    +	}
    +
    +	l.Start = h.LineEnd - nlines
    +
    +	return nil
    +}
    +
    +// Copy log starting from l.Start to the given io.Writer
    +// Returns on error or when end of log is reached.
    +func (l *DiagnosticLog) Copy(ctx context.Context, w io.Writer) (int, error) {
    +	const max = 500 // VC max == 500, ESX max == 1000
    +	written := 0
    +
    +	for {
    +		h, err := l.m.BrowseLog(ctx, l.Host, l.Key, l.Start, max)
    +		if err != nil {
    +			return 0, err
    +		}
    +
    +		for _, line := range h.LineText {
    +			n, err := fmt.Fprintln(w, line)
    +			written += n
    +			if err != nil {
    +				return written, err
    +			}
    +		}
    +
    +		l.Start += int32(len(h.LineText))
    +
    +		if l.Start >= h.LineEnd {
    +			break
    +		}
    +	}
    +
    +	return written, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/diagnostic_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/diagnostic_manager.go
    new file mode 100644
    index 00000000000..5baf1ad9038
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/diagnostic_manager.go
    @@ -0,0 +1,104 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type DiagnosticManager struct {
    +	Common
    +}
    +
    +func NewDiagnosticManager(c *vim25.Client) *DiagnosticManager {
    +	m := DiagnosticManager{
    +		Common: NewCommon(c, *c.ServiceContent.DiagnosticManager),
    +	}
    +
    +	return &m
    +}
    +
    +func (m DiagnosticManager) Log(ctx context.Context, host *HostSystem, key string) *DiagnosticLog {
    +	return &DiagnosticLog{
    +		m:    m,
    +		Key:  key,
    +		Host: host,
    +	}
    +}
    +
    +func (m DiagnosticManager) BrowseLog(ctx context.Context, host *HostSystem, key string, start, lines int32) (*types.DiagnosticManagerLogHeader, error) {
    +	req := types.BrowseDiagnosticLog{
    +		This:  m.Reference(),
    +		Key:   key,
    +		Start: start,
    +		Lines: lines,
    +	}
    +
    +	if host != nil {
    +		ref := host.Reference()
    +		req.Host = &ref
    +	}
    +
    +	res, err := methods.BrowseDiagnosticLog(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +func (m DiagnosticManager) GenerateLogBundles(ctx context.Context, includeDefault bool, host []*HostSystem) (*Task, error) {
    +	req := types.GenerateLogBundles_Task{
    +		This:           m.Reference(),
    +		IncludeDefault: includeDefault,
    +	}
    +
    +	if host != nil {
    +		for _, h := range host {
    +			req.Host = append(req.Host, h.Reference())
    +		}
    +	}
    +
    +	res, err := methods.GenerateLogBundles_Task(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(m.c, res.Returnval), nil
    +}
    +
    +func (m DiagnosticManager) QueryDescriptions(ctx context.Context, host *HostSystem) ([]types.DiagnosticManagerLogDescriptor, error) {
    +	req := types.QueryDescriptions{
    +		This: m.Reference(),
    +	}
    +
    +	if host != nil {
    +		ref := host.Reference()
    +		req.Host = &ref
    +	}
    +
    +	res, err := methods.QueryDescriptions(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/distributed_virtual_portgroup.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/distributed_virtual_portgroup.go
    new file mode 100644
    index 00000000000..f8ac5512c1f
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/distributed_virtual_portgroup.go
    @@ -0,0 +1,80 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"fmt"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type DistributedVirtualPortgroup struct {
    +	Common
    +}
    +
    +func NewDistributedVirtualPortgroup(c *vim25.Client, ref types.ManagedObjectReference) *DistributedVirtualPortgroup {
    +	return &DistributedVirtualPortgroup{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +// EthernetCardBackingInfo returns the VirtualDeviceBackingInfo for this DistributedVirtualPortgroup
    +func (p DistributedVirtualPortgroup) EthernetCardBackingInfo(ctx context.Context) (types.BaseVirtualDeviceBackingInfo, error) {
    +	var dvp mo.DistributedVirtualPortgroup
    +	var dvs mo.DistributedVirtualSwitch
    +	prop := "config.distributedVirtualSwitch"
    +
    +	if err := p.Properties(ctx, p.Reference(), []string{"key", prop}, &dvp); err != nil {
    +		return nil, err
    +	}
    +
    +	// "This property should always be set unless the user's setting does not have System.Read privilege on the object referred to by this property."
    +	if dvp.Config.DistributedVirtualSwitch == nil {
    +		return nil, fmt.Errorf("no System.Read privilege on: %s.%s", p.Reference(), prop)
    +	}
    +
    +	if err := p.Properties(ctx, *dvp.Config.DistributedVirtualSwitch, []string{"uuid"}, &dvs); err != nil {
    +		return nil, err
    +	}
    +
    +	backing := &types.VirtualEthernetCardDistributedVirtualPortBackingInfo{
    +		Port: types.DistributedVirtualSwitchPortConnection{
    +			PortgroupKey: dvp.Key,
    +			SwitchUuid:   dvs.Uuid,
    +		},
    +	}
    +
    +	return backing, nil
    +}
    +
    +func (p DistributedVirtualPortgroup) Reconfigure(ctx context.Context, spec types.DVPortgroupConfigSpec) (*Task, error) {
    +	req := types.ReconfigureDVPortgroup_Task{
    +		This: p.Reference(),
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.ReconfigureDVPortgroup_Task(ctx, p.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(p.Client(), res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/distributed_virtual_switch.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/distributed_virtual_switch.go
    new file mode 100644
    index 00000000000..526ce4bf787
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/distributed_virtual_switch.go
    @@ -0,0 +1,80 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type DistributedVirtualSwitch struct {
    +	Common
    +}
    +
    +func NewDistributedVirtualSwitch(c *vim25.Client, ref types.ManagedObjectReference) *DistributedVirtualSwitch {
    +	return &DistributedVirtualSwitch{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (s DistributedVirtualSwitch) EthernetCardBackingInfo(ctx context.Context) (types.BaseVirtualDeviceBackingInfo, error) {
    +	return nil, ErrNotSupported // TODO: just to satisfy NetworkReference interface for the finder
    +}
    +
    +func (s DistributedVirtualSwitch) Reconfigure(ctx context.Context, spec types.BaseDVSConfigSpec) (*Task, error) {
    +	req := types.ReconfigureDvs_Task{
    +		This: s.Reference(),
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.ReconfigureDvs_Task(ctx, s.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(s.Client(), res.Returnval), nil
    +}
    +
    +func (s DistributedVirtualSwitch) AddPortgroup(ctx context.Context, spec []types.DVPortgroupConfigSpec) (*Task, error) {
    +	req := types.AddDVPortgroup_Task{
    +		This: s.Reference(),
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.AddDVPortgroup_Task(ctx, s.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(s.Client(), res.Returnval), nil
    +}
    +
    +func (s DistributedVirtualSwitch) FetchDVPorts(ctx context.Context, criteria *types.DistributedVirtualSwitchPortCriteria) ([]types.DistributedVirtualPort, error) {
    +	req := &types.FetchDVPorts{
    +		This:     s.Reference(),
    +		Criteria: criteria,
    +	}
    +
    +	res, err := methods.FetchDVPorts(ctx, s.Client(), req)
    +	if err != nil {
    +		return nil, err
    +	}
    +	return res.Returnval, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/extension_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/extension_manager.go
    new file mode 100644
    index 00000000000..94ade017c2a
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/extension_manager.go
    @@ -0,0 +1,113 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type ExtensionManager struct {
    +	Common
    +}
    +
    +// GetExtensionManager wraps NewExtensionManager, returning ErrNotSupported
    +// when the client is not connected to a vCenter instance.
    +func GetExtensionManager(c *vim25.Client) (*ExtensionManager, error) {
    +	if c.ServiceContent.ExtensionManager == nil {
    +		return nil, ErrNotSupported
    +	}
    +	return NewExtensionManager(c), nil
    +}
    +
    +func NewExtensionManager(c *vim25.Client) *ExtensionManager {
    +	o := ExtensionManager{
    +		Common: NewCommon(c, *c.ServiceContent.ExtensionManager),
    +	}
    +
    +	return &o
    +}
    +
    +func (m ExtensionManager) List(ctx context.Context) ([]types.Extension, error) {
    +	var em mo.ExtensionManager
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"extensionList"}, &em)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return em.ExtensionList, nil
    +}
    +
    +func (m ExtensionManager) Find(ctx context.Context, key string) (*types.Extension, error) {
    +	req := types.FindExtension{
    +		This:         m.Reference(),
    +		ExtensionKey: key,
    +	}
    +
    +	res, err := methods.FindExtension(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (m ExtensionManager) Register(ctx context.Context, extension types.Extension) error {
    +	req := types.RegisterExtension{
    +		This:      m.Reference(),
    +		Extension: extension,
    +	}
    +
    +	_, err := methods.RegisterExtension(ctx, m.c, &req)
    +	return err
    +}
    +
    +func (m ExtensionManager) SetCertificate(ctx context.Context, key string, certificatePem string) error {
    +	req := types.SetExtensionCertificate{
    +		This:           m.Reference(),
    +		ExtensionKey:   key,
    +		CertificatePem: certificatePem,
    +	}
    +
    +	_, err := methods.SetExtensionCertificate(ctx, m.c, &req)
    +	return err
    +}
    +
    +func (m ExtensionManager) Unregister(ctx context.Context, key string) error {
    +	req := types.UnregisterExtension{
    +		This:         m.Reference(),
    +		ExtensionKey: key,
    +	}
    +
    +	_, err := methods.UnregisterExtension(ctx, m.c, &req)
    +	return err
    +}
    +
    +func (m ExtensionManager) Update(ctx context.Context, extension types.Extension) error {
    +	req := types.UpdateExtension{
    +		This:      m.Reference(),
    +		Extension: extension,
    +	}
    +
    +	_, err := methods.UpdateExtension(ctx, m.c, &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/file_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/file_manager.go
    new file mode 100644
    index 00000000000..ba947be20d9
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/file_manager.go
    @@ -0,0 +1,126 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type FileManager struct {
    +	Common
    +}
    +
    +func NewFileManager(c *vim25.Client) *FileManager {
    +	f := FileManager{
    +		Common: NewCommon(c, *c.ServiceContent.FileManager),
    +	}
    +
    +	return &f
    +}
    +
    +func (f FileManager) CopyDatastoreFile(ctx context.Context, sourceName string, sourceDatacenter *Datacenter, destinationName string, destinationDatacenter *Datacenter, force bool) (*Task, error) {
    +	req := types.CopyDatastoreFile_Task{
    +		This:            f.Reference(),
    +		SourceName:      sourceName,
    +		DestinationName: destinationName,
    +		Force:           types.NewBool(force),
    +	}
    +
    +	if sourceDatacenter != nil {
    +		ref := sourceDatacenter.Reference()
    +		req.SourceDatacenter = &ref
    +	}
    +
    +	if destinationDatacenter != nil {
    +		ref := destinationDatacenter.Reference()
    +		req.DestinationDatacenter = &ref
    +	}
    +
    +	res, err := methods.CopyDatastoreFile_Task(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(f.c, res.Returnval), nil
    +}
    +
    +// DeleteDatastoreFile deletes the specified file or folder from the datastore.
    +func (f FileManager) DeleteDatastoreFile(ctx context.Context, name string, dc *Datacenter) (*Task, error) {
    +	req := types.DeleteDatastoreFile_Task{
    +		This: f.Reference(),
    +		Name: name,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.DeleteDatastoreFile_Task(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(f.c, res.Returnval), nil
    +}
    +
    +// MakeDirectory creates a folder using the specified name.
    +func (f FileManager) MakeDirectory(ctx context.Context, name string, dc *Datacenter, createParentDirectories bool) error {
    +	req := types.MakeDirectory{
    +		This: f.Reference(),
    +		Name: name,
    +		CreateParentDirectories: types.NewBool(createParentDirectories),
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	_, err := methods.MakeDirectory(ctx, f.c, &req)
    +	return err
    +}
    +
    +func (f FileManager) MoveDatastoreFile(ctx context.Context, sourceName string, sourceDatacenter *Datacenter, destinationName string, destinationDatacenter *Datacenter, force bool) (*Task, error) {
    +	req := types.MoveDatastoreFile_Task{
    +		This:            f.Reference(),
    +		SourceName:      sourceName,
    +		DestinationName: destinationName,
    +		Force:           types.NewBool(force),
    +	}
    +
    +	if sourceDatacenter != nil {
    +		ref := sourceDatacenter.Reference()
    +		req.SourceDatacenter = &ref
    +	}
    +
    +	if destinationDatacenter != nil {
    +		ref := destinationDatacenter.Reference()
    +		req.DestinationDatacenter = &ref
    +	}
    +
    +	res, err := methods.MoveDatastoreFile_Task(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(f.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/folder.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/folder.go
    new file mode 100644
    index 00000000000..7a69949f95a
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/folder.go
    @@ -0,0 +1,227 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type Folder struct {
    +	Common
    +}
    +
    +func NewFolder(c *vim25.Client, ref types.ManagedObjectReference) *Folder {
    +	return &Folder{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func NewRootFolder(c *vim25.Client) *Folder {
    +	f := NewFolder(c, c.ServiceContent.RootFolder)
    +	f.InventoryPath = "/"
    +	return f
    +}
    +
    +func (f Folder) Children(ctx context.Context) ([]Reference, error) {
    +	var mf mo.Folder
    +
    +	err := f.Properties(ctx, f.Reference(), []string{"childEntity"}, &mf)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var rs []Reference
    +	for _, e := range mf.ChildEntity {
    +		if r := NewReference(f.c, e); r != nil {
    +			rs = append(rs, r)
    +		}
    +	}
    +
    +	return rs, nil
    +}
    +
    +func (f Folder) CreateDatacenter(ctx context.Context, datacenter string) (*Datacenter, error) {
    +	req := types.CreateDatacenter{
    +		This: f.Reference(),
    +		Name: datacenter,
    +	}
    +
    +	res, err := methods.CreateDatacenter(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	// Response will be nil if this is an ESX host that does not belong to a vCenter
    +	if res == nil {
    +		return nil, nil
    +	}
    +
    +	return NewDatacenter(f.c, res.Returnval), nil
    +}
    +
    +func (f Folder) CreateCluster(ctx context.Context, cluster string, spec types.ClusterConfigSpecEx) (*ClusterComputeResource, error) {
    +	req := types.CreateClusterEx{
    +		This: f.Reference(),
    +		Name: cluster,
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.CreateClusterEx(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	// Response will be nil if this is an ESX host that does not belong to a vCenter
    +	if res == nil {
    +		return nil, nil
    +	}
    +
    +	return NewClusterComputeResource(f.c, res.Returnval), nil
    +}
    +
    +func (f Folder) CreateFolder(ctx context.Context, name string) (*Folder, error) {
    +	req := types.CreateFolder{
    +		This: f.Reference(),
    +		Name: name,
    +	}
    +
    +	res, err := methods.CreateFolder(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewFolder(f.c, res.Returnval), err
    +}
    +
    +func (f Folder) CreateStoragePod(ctx context.Context, name string) (*StoragePod, error) {
    +	req := types.CreateStoragePod{
    +		This: f.Reference(),
    +		Name: name,
    +	}
    +
    +	res, err := methods.CreateStoragePod(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewStoragePod(f.c, res.Returnval), err
    +}
    +
    +func (f Folder) AddStandaloneHost(ctx context.Context, spec types.HostConnectSpec, addConnected bool, license *string, compResSpec *types.BaseComputeResourceConfigSpec) (*Task, error) {
    +	req := types.AddStandaloneHost_Task{
    +		This:         f.Reference(),
    +		Spec:         spec,
    +		AddConnected: addConnected,
    +	}
    +
    +	if license != nil {
    +		req.License = *license
    +	}
    +
    +	if compResSpec != nil {
    +		req.CompResSpec = *compResSpec
    +	}
    +
    +	res, err := methods.AddStandaloneHost_Task(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(f.c, res.Returnval), nil
    +}
    +
    +func (f Folder) CreateVM(ctx context.Context, config types.VirtualMachineConfigSpec, pool *ResourcePool, host *HostSystem) (*Task, error) {
    +	req := types.CreateVM_Task{
    +		This:   f.Reference(),
    +		Config: config,
    +		Pool:   pool.Reference(),
    +	}
    +
    +	if host != nil {
    +		ref := host.Reference()
    +		req.Host = &ref
    +	}
    +
    +	res, err := methods.CreateVM_Task(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(f.c, res.Returnval), nil
    +}
    +
    +func (f Folder) RegisterVM(ctx context.Context, path string, name string, asTemplate bool, pool *ResourcePool, host *HostSystem) (*Task, error) {
    +	req := types.RegisterVM_Task{
    +		This:       f.Reference(),
    +		Path:       path,
    +		AsTemplate: asTemplate,
    +	}
    +
    +	if name != "" {
    +		req.Name = name
    +	}
    +
    +	if host != nil {
    +		ref := host.Reference()
    +		req.Host = &ref
    +	}
    +
    +	if pool != nil {
    +		ref := pool.Reference()
    +		req.Pool = &ref
    +	}
    +
    +	res, err := methods.RegisterVM_Task(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(f.c, res.Returnval), nil
    +}
    +
    +func (f Folder) CreateDVS(ctx context.Context, spec types.DVSCreateSpec) (*Task, error) {
    +	req := types.CreateDVS_Task{
    +		This: f.Reference(),
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.CreateDVS_Task(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(f.c, res.Returnval), nil
    +}
    +
    +func (f Folder) MoveInto(ctx context.Context, list []types.ManagedObjectReference) (*Task, error) {
    +	req := types.MoveIntoFolder_Task{
    +		This: f.Reference(),
    +		List: list,
    +	}
    +
    +	res, err := methods.MoveIntoFolder_Task(ctx, f.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(f.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/history_collector.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/history_collector.go
    new file mode 100644
    index 00000000000..afdcab78b60
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/history_collector.go
    @@ -0,0 +1,72 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HistoryCollector struct {
    +	Common
    +}
    +
    +func NewHistoryCollector(c *vim25.Client, ref types.ManagedObjectReference) *HistoryCollector {
    +	return &HistoryCollector{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (h HistoryCollector) Destroy(ctx context.Context) error {
    +	req := types.DestroyCollector{
    +		This: h.Reference(),
    +	}
    +
    +	_, err := methods.DestroyCollector(ctx, h.c, &req)
    +	return err
    +}
    +
    +func (h HistoryCollector) Reset(ctx context.Context) error {
    +	req := types.ResetCollector{
    +		This: h.Reference(),
    +	}
    +
    +	_, err := methods.ResetCollector(ctx, h.c, &req)
    +	return err
    +}
    +
    +func (h HistoryCollector) Rewind(ctx context.Context) error {
    +	req := types.RewindCollector{
    +		This: h.Reference(),
    +	}
    +
    +	_, err := methods.RewindCollector(ctx, h.c, &req)
    +	return err
    +}
    +
    +func (h HistoryCollector) SetPageSize(ctx context.Context, maxCount int32) error {
    +	req := types.SetCollectorPageSize{
    +		This:     h.Reference(),
    +		MaxCount: maxCount,
    +	}
    +
    +	_, err := methods.SetCollectorPageSize(ctx, h.c, &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_account_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_account_manager.go
    new file mode 100644
    index 00000000000..640aff86031
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_account_manager.go
    @@ -0,0 +1,65 @@
    +/*
    +Copyright (c) 2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostAccountManager struct {
    +	Common
    +}
    +
    +func NewHostAccountManager(c *vim25.Client, ref types.ManagedObjectReference) *HostAccountManager {
    +	return &HostAccountManager{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (m HostAccountManager) Create(ctx context.Context, user *types.HostAccountSpec) error {
    +	req := types.CreateUser{
    +		This: m.Reference(),
    +		User: user,
    +	}
    +
    +	_, err := methods.CreateUser(ctx, m.Client(), &req)
    +	return err
    +}
    +
    +func (m HostAccountManager) Update(ctx context.Context, user *types.HostAccountSpec) error {
    +	req := types.UpdateUser{
    +		This: m.Reference(),
    +		User: user,
    +	}
    +
    +	_, err := methods.UpdateUser(ctx, m.Client(), &req)
    +	return err
    +}
    +
    +func (m HostAccountManager) Remove(ctx context.Context, userName string) error {
    +	req := types.RemoveUser{
    +		This:     m.Reference(),
    +		UserName: userName,
    +	}
    +
    +	_, err := methods.RemoveUser(ctx, m.Client(), &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_certificate_info.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_certificate_info.go
    new file mode 100644
    index 00000000000..52c26a9dd68
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_certificate_info.go
    @@ -0,0 +1,250 @@
    +/*
    +Copyright (c) 2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"crypto/sha256"
    +	"crypto/tls"
    +	"crypto/x509"
    +	"crypto/x509/pkix"
    +	"encoding/asn1"
    +	"fmt"
    +	"io"
    +	"net/url"
    +	"strings"
    +	"text/tabwriter"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// HostCertificateInfo provides helpers for types.HostCertificateManagerCertificateInfo
    +type HostCertificateInfo struct {
    +	types.HostCertificateManagerCertificateInfo
    +
    +	ThumbprintSHA1   string
    +	ThumbprintSHA256 string
    +
    +	Err         error
    +	Certificate *x509.Certificate `json:"-"`
    +
    +	subjectName *pkix.Name
    +	issuerName  *pkix.Name
    +}
    +
    +// FromCertificate converts x509.Certificate to HostCertificateInfo
    +func (info *HostCertificateInfo) FromCertificate(cert *x509.Certificate) *HostCertificateInfo {
    +	info.Certificate = cert
    +	info.subjectName = &cert.Subject
    +	info.issuerName = &cert.Issuer
    +
    +	info.Issuer = info.fromName(info.issuerName)
    +	info.NotBefore = &cert.NotBefore
    +	info.NotAfter = &cert.NotAfter
    +	info.Subject = info.fromName(info.subjectName)
    +
    +	info.ThumbprintSHA1 = soap.ThumbprintSHA1(cert)
    +
    +	// SHA-256 for info purposes only, API fields all use SHA-1
    +	sum := sha256.Sum256(cert.Raw)
    +	hex := make([]string, len(sum))
    +	for i, b := range sum {
    +		hex[i] = fmt.Sprintf("%02X", b)
    +	}
    +	info.ThumbprintSHA256 = strings.Join(hex, ":")
    +
    +	if info.Status == "" {
    +		info.Status = string(types.HostCertificateManagerCertificateInfoCertificateStatusUnknown)
    +	}
    +
    +	return info
    +}
    +
    +// FromURL connects to the given URL.Host via tls.Dial with the given tls.Config and populates the HostCertificateInfo
    +// via tls.ConnectionState.  If the certificate was verified with the given tls.Config, the Err field will be nil.
    +// Otherwise, Err will be set to the x509.UnknownAuthorityError or x509.HostnameError.
    +// If tls.Dial returns an error of any other type, that error is returned.
    +func (info *HostCertificateInfo) FromURL(u *url.URL, config *tls.Config) error {
    +	addr := u.Host
    +	if !(strings.LastIndex(addr, ":") > strings.LastIndex(addr, "]")) {
    +		addr += ":443"
    +	}
    +
    +	conn, err := tls.Dial("tcp", addr, config)
    +	if err != nil {
    +		switch err.(type) {
    +		case x509.UnknownAuthorityError:
    +		case x509.HostnameError:
    +		default:
    +			return err
    +		}
    +
    +		info.Err = err
    +
    +		conn, err = tls.Dial("tcp", addr, &tls.Config{InsecureSkipVerify: true})
    +		if err != nil {
    +			return err
    +		}
    +	} else {
    +		info.Status = string(types.HostCertificateManagerCertificateInfoCertificateStatusGood)
    +	}
    +
    +	state := conn.ConnectionState()
    +	_ = conn.Close()
    +	info.FromCertificate(state.PeerCertificates[0])
    +
    +	return nil
    +}
    +
    +var emailAddressOID = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 9, 1}
    +
    +func (info *HostCertificateInfo) fromName(name *pkix.Name) string {
    +	var attrs []string
    +
    +	oids := map[string]string{
    +		emailAddressOID.String(): "emailAddress",
    +	}
    +
    +	for _, attr := range name.Names {
    +		if key, ok := oids[attr.Type.String()]; ok {
    +			attrs = append(attrs, fmt.Sprintf("%s=%s", key, attr.Value))
    +		}
    +	}
    +
    +	attrs = append(attrs, fmt.Sprintf("CN=%s", name.CommonName))
    +
    +	add := func(key string, vals []string) {
    +		for _, val := range vals {
    +			attrs = append(attrs, fmt.Sprintf("%s=%s", key, val))
    +		}
    +	}
    +
    +	elts := []struct {
    +		key string
    +		val []string
    +	}{
    +		{"OU", name.OrganizationalUnit},
    +		{"O", name.Organization},
    +		{"L", name.Locality},
    +		{"ST", name.Province},
    +		{"C", name.Country},
    +	}
    +
    +	for _, elt := range elts {
    +		add(elt.key, elt.val)
    +	}
    +
    +	return strings.Join(attrs, ",")
    +}
    +
    +func (info *HostCertificateInfo) toName(s string) *pkix.Name {
    +	var name pkix.Name
    +
    +	for _, pair := range strings.Split(s, ",") {
    +		attr := strings.SplitN(pair, "=", 2)
    +		if len(attr) != 2 {
    +			continue
    +		}
    +
    +		v := attr[1]
    +
    +		switch strings.ToLower(attr[0]) {
    +		case "cn":
    +			name.CommonName = v
    +		case "ou":
    +			name.OrganizationalUnit = append(name.OrganizationalUnit, v)
    +		case "o":
    +			name.Organization = append(name.Organization, v)
    +		case "l":
    +			name.Locality = append(name.Locality, v)
    +		case "st":
    +			name.Province = append(name.Province, v)
    +		case "c":
    +			name.Country = append(name.Country, v)
    +		case "emailaddress":
    +			name.Names = append(name.Names, pkix.AttributeTypeAndValue{Type: emailAddressOID, Value: v})
    +		}
    +	}
    +
    +	return &name
    +}
    +
    +// SubjectName parses Subject into a pkix.Name
    +func (info *HostCertificateInfo) SubjectName() *pkix.Name {
    +	if info.subjectName != nil {
    +		return info.subjectName
    +	}
    +
    +	return info.toName(info.Subject)
    +}
    +
    +// IssuerName parses Issuer into a pkix.Name
    +func (info *HostCertificateInfo) IssuerName() *pkix.Name {
    +	if info.issuerName != nil {
    +		return info.issuerName
    +	}
    +
    +	return info.toName(info.Issuer)
    +}
    +
    +// Write outputs info similar to the Chrome Certificate Viewer.
    +func (info *HostCertificateInfo) Write(w io.Writer) error {
    +	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    +
    +	s := func(val string) string {
    +		if val != "" {
    +			return val
    +		}
    +		return ""
    +	}
    +
    +	ss := func(val []string) string {
    +		return s(strings.Join(val, ","))
    +	}
    +
    +	name := func(n *pkix.Name) {
    +		fmt.Fprintf(tw, "  Common Name (CN):\t%s\n", s(n.CommonName))
    +		fmt.Fprintf(tw, "  Organization (O):\t%s\n", ss(n.Organization))
    +		fmt.Fprintf(tw, "  Organizational Unit (OU):\t%s\n", ss(n.OrganizationalUnit))
    +	}
    +
    +	status := info.Status
    +	if info.Err != nil {
    +		status = fmt.Sprintf("ERROR %s", info.Err)
    +	}
    +	fmt.Fprintf(tw, "Certificate Status:\t%s\n", status)
    +
    +	fmt.Fprintln(tw, "Issued To:\t")
    +	name(info.SubjectName())
    +
    +	fmt.Fprintln(tw, "Issued By:\t")
    +	name(info.IssuerName())
    +
    +	fmt.Fprintln(tw, "Validity Period:\t")
    +	fmt.Fprintf(tw, "  Issued On:\t%s\n", info.NotBefore)
    +	fmt.Fprintf(tw, "  Expires On:\t%s\n", info.NotAfter)
    +
    +	if info.ThumbprintSHA1 != "" {
    +		fmt.Fprintln(tw, "Thumbprints:\t")
    +		if info.ThumbprintSHA256 != "" {
    +			fmt.Fprintf(tw, "  SHA-256 Thumbprint:\t%s\n", info.ThumbprintSHA256)
    +		}
    +		fmt.Fprintf(tw, "  SHA-1 Thumbprint:\t%s\n", info.ThumbprintSHA1)
    +	}
    +
    +	return tw.Flush()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_certificate_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_certificate_manager.go
    new file mode 100644
    index 00000000000..2875a9fc1ad
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_certificate_manager.go
    @@ -0,0 +1,162 @@
    +/*
    +Copyright (c) 2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// HostCertificateManager provides helper methods around the HostSystem.ConfigManager.CertificateManager
    +type HostCertificateManager struct {
    +	Common
    +	Host *HostSystem
    +}
    +
    +// NewHostCertificateManager creates a new HostCertificateManager helper
    +func NewHostCertificateManager(c *vim25.Client, ref types.ManagedObjectReference, host types.ManagedObjectReference) *HostCertificateManager {
    +	return &HostCertificateManager{
    +		Common: NewCommon(c, ref),
    +		Host:   NewHostSystem(c, host),
    +	}
    +}
    +
    +// CertificateInfo wraps the host CertificateManager certificateInfo property with the HostCertificateInfo helper.
    +// The ThumbprintSHA1 field is set to HostSystem.Summary.Config.SslThumbprint if the host system is managed by a vCenter.
    +func (m HostCertificateManager) CertificateInfo(ctx context.Context) (*HostCertificateInfo, error) {
    +	var hs mo.HostSystem
    +	var cm mo.HostCertificateManager
    +
    +	pc := property.DefaultCollector(m.Client())
    +
    +	err := pc.RetrieveOne(ctx, m.Reference(), []string{"certificateInfo"}, &cm)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	_ = pc.RetrieveOne(ctx, m.Host.Reference(), []string{"summary.config.sslThumbprint"}, &hs)
    +
    +	return &HostCertificateInfo{
    +		HostCertificateManagerCertificateInfo: cm.CertificateInfo,
    +		ThumbprintSHA1:                        hs.Summary.Config.SslThumbprint,
    +	}, nil
    +}
    +
    +// GenerateCertificateSigningRequest requests the host system to generate a certificate-signing request (CSR) for itself.
    +// The CSR is then typically provided to a Certificate Authority to sign and issue the SSL certificate for the host system.
    +// Use InstallServerCertificate to import this certificate.
    +func (m HostCertificateManager) GenerateCertificateSigningRequest(ctx context.Context, useIPAddressAsCommonName bool) (string, error) {
    +	req := types.GenerateCertificateSigningRequest{
    +		This: m.Reference(),
    +		UseIpAddressAsCommonName: useIPAddressAsCommonName,
    +	}
    +
    +	res, err := methods.GenerateCertificateSigningRequest(ctx, m.Client(), &req)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +// GenerateCertificateSigningRequestByDn requests the host system to generate a certificate-signing request (CSR) for itself.
    +// Alternative version similar to GenerateCertificateSigningRequest but takes a Distinguished Name (DN) as a parameter.
    +func (m HostCertificateManager) GenerateCertificateSigningRequestByDn(ctx context.Context, distinguishedName string) (string, error) {
    +	req := types.GenerateCertificateSigningRequestByDn{
    +		This:              m.Reference(),
    +		DistinguishedName: distinguishedName,
    +	}
    +
    +	res, err := methods.GenerateCertificateSigningRequestByDn(ctx, m.Client(), &req)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +// InstallServerCertificate imports the given SSL certificate to the host system.
    +func (m HostCertificateManager) InstallServerCertificate(ctx context.Context, cert string) error {
    +	req := types.InstallServerCertificate{
    +		This: m.Reference(),
    +		Cert: cert,
    +	}
    +
    +	_, err := methods.InstallServerCertificate(ctx, m.Client(), &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	// NotifyAffectedService is internal, not exposing as we don't have a use case other than with InstallServerCertificate
    +	// Without this call, hostd needs to be restarted to use the updated certificate
    +	// Note: using Refresh as it has the same struct/signature, we just need to use different xml name tags
    +	body := struct {
    +		Req *types.Refresh         `xml:"urn:vim25 NotifyAffectedServices,omitempty"`
    +		Res *types.RefreshResponse `xml:"urn:vim25 NotifyAffectedServicesResponse,omitempty"`
    +		methods.RefreshBody
    +	}{
    +		Req: &types.Refresh{This: m.Reference()},
    +	}
    +
    +	return m.Client().RoundTrip(ctx, &body, &body)
    +}
    +
    +// ListCACertificateRevocationLists returns the SSL CRLs of Certificate Authorities that are trusted by the host system.
    +func (m HostCertificateManager) ListCACertificateRevocationLists(ctx context.Context) ([]string, error) {
    +	req := types.ListCACertificateRevocationLists{
    +		This: m.Reference(),
    +	}
    +
    +	res, err := methods.ListCACertificateRevocationLists(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +// ListCACertificates returns the SSL certificates of Certificate Authorities that are trusted by the host system.
    +func (m HostCertificateManager) ListCACertificates(ctx context.Context) ([]string, error) {
    +	req := types.ListCACertificates{
    +		This: m.Reference(),
    +	}
    +
    +	res, err := methods.ListCACertificates(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +// ReplaceCACertificatesAndCRLs replaces the trusted CA certificates and CRL used by the host system.
    +// These determine whether the server can verify the identity of an external entity.
    +func (m HostCertificateManager) ReplaceCACertificatesAndCRLs(ctx context.Context, caCert []string, caCrl []string) error {
    +	req := types.ReplaceCACertificatesAndCRLs{
    +		This:   m.Reference(),
    +		CaCert: caCert,
    +		CaCrl:  caCrl,
    +	}
    +
    +	_, err := methods.ReplaceCACertificatesAndCRLs(ctx, m.Client(), &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_config_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_config_manager.go
    new file mode 100644
    index 00000000000..123227ecc70
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_config_manager.go
    @@ -0,0 +1,196 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostConfigManager struct {
    +	Common
    +}
    +
    +func NewHostConfigManager(c *vim25.Client, ref types.ManagedObjectReference) *HostConfigManager {
    +	return &HostConfigManager{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (m HostConfigManager) DatastoreSystem(ctx context.Context) (*HostDatastoreSystem, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.datastoreSystem"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewHostDatastoreSystem(m.c, *h.ConfigManager.DatastoreSystem), nil
    +}
    +
    +func (m HostConfigManager) NetworkSystem(ctx context.Context) (*HostNetworkSystem, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.networkSystem"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewHostNetworkSystem(m.c, *h.ConfigManager.NetworkSystem), nil
    +}
    +
    +func (m HostConfigManager) FirewallSystem(ctx context.Context) (*HostFirewallSystem, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.firewallSystem"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewHostFirewallSystem(m.c, *h.ConfigManager.FirewallSystem), nil
    +}
    +
    +func (m HostConfigManager) StorageSystem(ctx context.Context) (*HostStorageSystem, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.storageSystem"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewHostStorageSystem(m.c, *h.ConfigManager.StorageSystem), nil
    +}
    +
    +func (m HostConfigManager) VirtualNicManager(ctx context.Context) (*HostVirtualNicManager, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.virtualNicManager"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewHostVirtualNicManager(m.c, *h.ConfigManager.VirtualNicManager, m.Reference()), nil
    +}
    +
    +func (m HostConfigManager) VsanSystem(ctx context.Context) (*HostVsanSystem, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.vsanSystem"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	// Added in 5.5
    +	if h.ConfigManager.VsanSystem == nil {
    +		return nil, ErrNotSupported
    +	}
    +
    +	return NewHostVsanSystem(m.c, *h.ConfigManager.VsanSystem), nil
    +}
    +
    +func (m HostConfigManager) VsanInternalSystem(ctx context.Context) (*HostVsanInternalSystem, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.vsanInternalSystem"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	// Added in 5.5
    +	if h.ConfigManager.VsanInternalSystem == nil {
    +		return nil, ErrNotSupported
    +	}
    +
    +	return NewHostVsanInternalSystem(m.c, *h.ConfigManager.VsanInternalSystem), nil
    +}
    +
    +func (m HostConfigManager) AccountManager(ctx context.Context) (*HostAccountManager, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.accountManager"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	ref := h.ConfigManager.AccountManager // Added in 6.0
    +	if ref == nil {
    +		// Versions < 5.5 can use the ServiceContent ref,
    +		// but we can only use it when connected directly to ESX.
    +		c := m.Client()
    +		if !c.IsVC() {
    +			ref = c.ServiceContent.AccountManager
    +		}
    +
    +		if ref == nil {
    +			return nil, ErrNotSupported
    +		}
    +	}
    +
    +	return NewHostAccountManager(m.c, *ref), nil
    +}
    +
    +func (m HostConfigManager) OptionManager(ctx context.Context) (*OptionManager, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.advancedOption"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewOptionManager(m.c, *h.ConfigManager.AdvancedOption), nil
    +}
    +
    +func (m HostConfigManager) ServiceSystem(ctx context.Context) (*HostServiceSystem, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.serviceSystem"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewHostServiceSystem(m.c, *h.ConfigManager.ServiceSystem), nil
    +}
    +
    +func (m HostConfigManager) CertificateManager(ctx context.Context) (*HostCertificateManager, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.certificateManager"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	// Added in 6.0
    +	if h.ConfigManager.CertificateManager == nil {
    +		return nil, ErrNotSupported
    +	}
    +
    +	return NewHostCertificateManager(m.c, *h.ConfigManager.CertificateManager, m.Reference()), nil
    +}
    +
    +func (m HostConfigManager) DateTimeSystem(ctx context.Context) (*HostDateTimeSystem, error) {
    +	var h mo.HostSystem
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"configManager.dateTimeSystem"}, &h)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewHostDateTimeSystem(m.c, *h.ConfigManager.DateTimeSystem), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_datastore_browser.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_datastore_browser.go
    new file mode 100644
    index 00000000000..b0c9e08a12e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_datastore_browser.go
    @@ -0,0 +1,65 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostDatastoreBrowser struct {
    +	Common
    +}
    +
    +func NewHostDatastoreBrowser(c *vim25.Client, ref types.ManagedObjectReference) *HostDatastoreBrowser {
    +	return &HostDatastoreBrowser{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (b HostDatastoreBrowser) SearchDatastore(ctx context.Context, datastorePath string, searchSpec *types.HostDatastoreBrowserSearchSpec) (*Task, error) {
    +	req := types.SearchDatastore_Task{
    +		This:          b.Reference(),
    +		DatastorePath: datastorePath,
    +		SearchSpec:    searchSpec,
    +	}
    +
    +	res, err := methods.SearchDatastore_Task(ctx, b.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(b.c, res.Returnval), nil
    +}
    +
    +func (b HostDatastoreBrowser) SearchDatastoreSubFolders(ctx context.Context, datastorePath string, searchSpec *types.HostDatastoreBrowserSearchSpec) (*Task, error) {
    +	req := types.SearchDatastoreSubFolders_Task{
    +		This:          b.Reference(),
    +		DatastorePath: datastorePath,
    +		SearchSpec:    searchSpec,
    +	}
    +
    +	res, err := methods.SearchDatastoreSubFolders_Task(ctx, b.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(b.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_datastore_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_datastore_system.go
    new file mode 100644
    index 00000000000..7b738e611ed
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_datastore_system.go
    @@ -0,0 +1,119 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostDatastoreSystem struct {
    +	Common
    +}
    +
    +func NewHostDatastoreSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostDatastoreSystem {
    +	return &HostDatastoreSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (s HostDatastoreSystem) CreateLocalDatastore(ctx context.Context, name string, path string) (*Datastore, error) {
    +	req := types.CreateLocalDatastore{
    +		This: s.Reference(),
    +		Name: name,
    +		Path: path,
    +	}
    +
    +	res, err := methods.CreateLocalDatastore(ctx, s.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewDatastore(s.Client(), res.Returnval), nil
    +}
    +
    +func (s HostDatastoreSystem) CreateNasDatastore(ctx context.Context, spec types.HostNasVolumeSpec) (*Datastore, error) {
    +	req := types.CreateNasDatastore{
    +		This: s.Reference(),
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.CreateNasDatastore(ctx, s.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewDatastore(s.Client(), res.Returnval), nil
    +}
    +
    +func (s HostDatastoreSystem) CreateVmfsDatastore(ctx context.Context, spec types.VmfsDatastoreCreateSpec) (*Datastore, error) {
    +	req := types.CreateVmfsDatastore{
    +		This: s.Reference(),
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.CreateVmfsDatastore(ctx, s.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewDatastore(s.Client(), res.Returnval), nil
    +}
    +
    +func (s HostDatastoreSystem) Remove(ctx context.Context, ds *Datastore) error {
    +	req := types.RemoveDatastore{
    +		This:      s.Reference(),
    +		Datastore: ds.Reference(),
    +	}
    +
    +	_, err := methods.RemoveDatastore(ctx, s.Client(), &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (s HostDatastoreSystem) QueryAvailableDisksForVmfs(ctx context.Context) ([]types.HostScsiDisk, error) {
    +	req := types.QueryAvailableDisksForVmfs{
    +		This: s.Reference(),
    +	}
    +
    +	res, err := methods.QueryAvailableDisksForVmfs(ctx, s.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (s HostDatastoreSystem) QueryVmfsDatastoreCreateOptions(ctx context.Context, devicePath string) ([]types.VmfsDatastoreOption, error) {
    +	req := types.QueryVmfsDatastoreCreateOptions{
    +		This:       s.Reference(),
    +		DevicePath: devicePath,
    +	}
    +
    +	res, err := methods.QueryVmfsDatastoreCreateOptions(ctx, s.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_date_time_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_date_time_system.go
    new file mode 100644
    index 00000000000..7c9203d7b67
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_date_time_system.go
    @@ -0,0 +1,69 @@
    +/*
    +Copyright (c) 2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostDateTimeSystem struct {
    +	Common
    +}
    +
    +func NewHostDateTimeSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostDateTimeSystem {
    +	return &HostDateTimeSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (s HostDateTimeSystem) UpdateConfig(ctx context.Context, config types.HostDateTimeConfig) error {
    +	req := types.UpdateDateTimeConfig{
    +		This:   s.Reference(),
    +		Config: config,
    +	}
    +
    +	_, err := methods.UpdateDateTimeConfig(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostDateTimeSystem) Update(ctx context.Context, date time.Time) error {
    +	req := types.UpdateDateTime{
    +		This:     s.Reference(),
    +		DateTime: date,
    +	}
    +
    +	_, err := methods.UpdateDateTime(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostDateTimeSystem) Query(ctx context.Context) (*time.Time, error) {
    +	req := types.QueryDateTime{
    +		This: s.Reference(),
    +	}
    +
    +	res, err := methods.QueryDateTime(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_firewall_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_firewall_system.go
    new file mode 100644
    index 00000000000..0b14402531c
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_firewall_system.go
    @@ -0,0 +1,181 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"errors"
    +	"fmt"
    +	"strings"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostFirewallSystem struct {
    +	Common
    +}
    +
    +func NewHostFirewallSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostFirewallSystem {
    +	return &HostFirewallSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (s HostFirewallSystem) DisableRuleset(ctx context.Context, id string) error {
    +	req := types.DisableRuleset{
    +		This: s.Reference(),
    +		Id:   id,
    +	}
    +
    +	_, err := methods.DisableRuleset(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostFirewallSystem) EnableRuleset(ctx context.Context, id string) error {
    +	req := types.EnableRuleset{
    +		This: s.Reference(),
    +		Id:   id,
    +	}
    +
    +	_, err := methods.EnableRuleset(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostFirewallSystem) Refresh(ctx context.Context) error {
    +	req := types.RefreshFirewall{
    +		This: s.Reference(),
    +	}
    +
    +	_, err := methods.RefreshFirewall(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostFirewallSystem) Info(ctx context.Context) (*types.HostFirewallInfo, error) {
    +	var fs mo.HostFirewallSystem
    +
    +	err := s.Properties(ctx, s.Reference(), []string{"firewallInfo"}, &fs)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return fs.FirewallInfo, nil
    +}
    +
    +// HostFirewallRulesetList provides helpers for a slice of types.HostFirewallRuleset
    +type HostFirewallRulesetList []types.HostFirewallRuleset
    +
    +// ByRule returns a HostFirewallRulesetList where Direction, PortType and Protocol are equal and Port is within range
    +func (l HostFirewallRulesetList) ByRule(rule types.HostFirewallRule) HostFirewallRulesetList {
    +	var matches HostFirewallRulesetList
    +
    +	for _, rs := range l {
    +		for _, r := range rs.Rule {
    +			if r.PortType != rule.PortType ||
    +				r.Protocol != rule.Protocol ||
    +				r.Direction != rule.Direction {
    +				continue
    +			}
    +
    +			if r.EndPort == 0 && rule.Port == r.Port ||
    +				rule.Port >= r.Port && rule.Port <= r.EndPort {
    +				matches = append(matches, rs)
    +				break
    +			}
    +		}
    +	}
    +
    +	return matches
    +}
    +
    +// EnabledByRule returns a HostFirewallRulesetList with Match(rule) applied and filtered via Enabled()
    +// if enabled param is true, otherwise filtered via Disabled().
    +// An error is returned if the resulting list is empty.
    +func (l HostFirewallRulesetList) EnabledByRule(rule types.HostFirewallRule, enabled bool) (HostFirewallRulesetList, error) {
    +	var matched, skipped HostFirewallRulesetList
    +	var matchedKind, skippedKind string
    +
    +	l = l.ByRule(rule)
    +
    +	if enabled {
    +		matched = l.Enabled()
    +		matchedKind = "enabled"
    +
    +		skipped = l.Disabled()
    +		skippedKind = "disabled"
    +	} else {
    +		matched = l.Disabled()
    +		matchedKind = "disabled"
    +
    +		skipped = l.Enabled()
    +		skippedKind = "enabled"
    +	}
    +
    +	if len(matched) == 0 {
    +		msg := fmt.Sprintf("%d %s firewall rulesets match %s %s %s %d, %d %s rulesets match",
    +			len(matched), matchedKind,
    +			rule.Direction, rule.Protocol, rule.PortType, rule.Port,
    +			len(skipped), skippedKind)
    +
    +		if len(skipped) != 0 {
    +			msg += fmt.Sprintf(": %s", strings.Join(skipped.Keys(), ", "))
    +		}
    +
    +		return nil, errors.New(msg)
    +	}
    +
    +	return matched, nil
    +}
    +
    +// Enabled returns a HostFirewallRulesetList with enabled rules
    +func (l HostFirewallRulesetList) Enabled() HostFirewallRulesetList {
    +	var matches HostFirewallRulesetList
    +
    +	for _, rs := range l {
    +		if rs.Enabled {
    +			matches = append(matches, rs)
    +		}
    +	}
    +
    +	return matches
    +}
    +
    +// Disabled returns a HostFirewallRulesetList with disabled rules
    +func (l HostFirewallRulesetList) Disabled() HostFirewallRulesetList {
    +	var matches HostFirewallRulesetList
    +
    +	for _, rs := range l {
    +		if !rs.Enabled {
    +			matches = append(matches, rs)
    +		}
    +	}
    +
    +	return matches
    +}
    +
    +// Keys returns the HostFirewallRuleset.Key for each ruleset in the list
    +func (l HostFirewallRulesetList) Keys() []string {
    +	var keys []string
    +
    +	for _, rs := range l {
    +		keys = append(keys, rs.Key)
    +	}
    +
    +	return keys
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_network_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_network_system.go
    new file mode 100644
    index 00000000000..c21e1ec35d5
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_network_system.go
    @@ -0,0 +1,358 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostNetworkSystem struct {
    +	Common
    +}
    +
    +func NewHostNetworkSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostNetworkSystem {
    +	return &HostNetworkSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +// AddPortGroup wraps methods.AddPortGroup
    +func (o HostNetworkSystem) AddPortGroup(ctx context.Context, portgrp types.HostPortGroupSpec) error {
    +	req := types.AddPortGroup{
    +		This:    o.Reference(),
    +		Portgrp: portgrp,
    +	}
    +
    +	_, err := methods.AddPortGroup(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// AddServiceConsoleVirtualNic wraps methods.AddServiceConsoleVirtualNic
    +func (o HostNetworkSystem) AddServiceConsoleVirtualNic(ctx context.Context, portgroup string, nic types.HostVirtualNicSpec) (string, error) {
    +	req := types.AddServiceConsoleVirtualNic{
    +		This:      o.Reference(),
    +		Portgroup: portgroup,
    +		Nic:       nic,
    +	}
    +
    +	res, err := methods.AddServiceConsoleVirtualNic(ctx, o.c, &req)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +// AddVirtualNic wraps methods.AddVirtualNic
    +func (o HostNetworkSystem) AddVirtualNic(ctx context.Context, portgroup string, nic types.HostVirtualNicSpec) (string, error) {
    +	req := types.AddVirtualNic{
    +		This:      o.Reference(),
    +		Portgroup: portgroup,
    +		Nic:       nic,
    +	}
    +
    +	res, err := methods.AddVirtualNic(ctx, o.c, &req)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +// AddVirtualSwitch wraps methods.AddVirtualSwitch
    +func (o HostNetworkSystem) AddVirtualSwitch(ctx context.Context, vswitchName string, spec *types.HostVirtualSwitchSpec) error {
    +	req := types.AddVirtualSwitch{
    +		This:        o.Reference(),
    +		VswitchName: vswitchName,
    +		Spec:        spec,
    +	}
    +
    +	_, err := methods.AddVirtualSwitch(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// QueryNetworkHint wraps methods.QueryNetworkHint
    +func (o HostNetworkSystem) QueryNetworkHint(ctx context.Context, device []string) error {
    +	req := types.QueryNetworkHint{
    +		This:   o.Reference(),
    +		Device: device,
    +	}
    +
    +	_, err := methods.QueryNetworkHint(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// RefreshNetworkSystem wraps methods.RefreshNetworkSystem
    +func (o HostNetworkSystem) RefreshNetworkSystem(ctx context.Context) error {
    +	req := types.RefreshNetworkSystem{
    +		This: o.Reference(),
    +	}
    +
    +	_, err := methods.RefreshNetworkSystem(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// RemovePortGroup wraps methods.RemovePortGroup
    +func (o HostNetworkSystem) RemovePortGroup(ctx context.Context, pgName string) error {
    +	req := types.RemovePortGroup{
    +		This:   o.Reference(),
    +		PgName: pgName,
    +	}
    +
    +	_, err := methods.RemovePortGroup(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// RemoveServiceConsoleVirtualNic wraps methods.RemoveServiceConsoleVirtualNic
    +func (o HostNetworkSystem) RemoveServiceConsoleVirtualNic(ctx context.Context, device string) error {
    +	req := types.RemoveServiceConsoleVirtualNic{
    +		This:   o.Reference(),
    +		Device: device,
    +	}
    +
    +	_, err := methods.RemoveServiceConsoleVirtualNic(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// RemoveVirtualNic wraps methods.RemoveVirtualNic
    +func (o HostNetworkSystem) RemoveVirtualNic(ctx context.Context, device string) error {
    +	req := types.RemoveVirtualNic{
    +		This:   o.Reference(),
    +		Device: device,
    +	}
    +
    +	_, err := methods.RemoveVirtualNic(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// RemoveVirtualSwitch wraps methods.RemoveVirtualSwitch
    +func (o HostNetworkSystem) RemoveVirtualSwitch(ctx context.Context, vswitchName string) error {
    +	req := types.RemoveVirtualSwitch{
    +		This:        o.Reference(),
    +		VswitchName: vswitchName,
    +	}
    +
    +	_, err := methods.RemoveVirtualSwitch(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// RestartServiceConsoleVirtualNic wraps methods.RestartServiceConsoleVirtualNic
    +func (o HostNetworkSystem) RestartServiceConsoleVirtualNic(ctx context.Context, device string) error {
    +	req := types.RestartServiceConsoleVirtualNic{
    +		This:   o.Reference(),
    +		Device: device,
    +	}
    +
    +	_, err := methods.RestartServiceConsoleVirtualNic(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdateConsoleIpRouteConfig wraps methods.UpdateConsoleIpRouteConfig
    +func (o HostNetworkSystem) UpdateConsoleIpRouteConfig(ctx context.Context, config types.BaseHostIpRouteConfig) error {
    +	req := types.UpdateConsoleIpRouteConfig{
    +		This:   o.Reference(),
    +		Config: config,
    +	}
    +
    +	_, err := methods.UpdateConsoleIpRouteConfig(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdateDnsConfig wraps methods.UpdateDnsConfig
    +func (o HostNetworkSystem) UpdateDnsConfig(ctx context.Context, config types.BaseHostDnsConfig) error {
    +	req := types.UpdateDnsConfig{
    +		This:   o.Reference(),
    +		Config: config,
    +	}
    +
    +	_, err := methods.UpdateDnsConfig(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdateIpRouteConfig wraps methods.UpdateIpRouteConfig
    +func (o HostNetworkSystem) UpdateIpRouteConfig(ctx context.Context, config types.BaseHostIpRouteConfig) error {
    +	req := types.UpdateIpRouteConfig{
    +		This:   o.Reference(),
    +		Config: config,
    +	}
    +
    +	_, err := methods.UpdateIpRouteConfig(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdateIpRouteTableConfig wraps methods.UpdateIpRouteTableConfig
    +func (o HostNetworkSystem) UpdateIpRouteTableConfig(ctx context.Context, config types.HostIpRouteTableConfig) error {
    +	req := types.UpdateIpRouteTableConfig{
    +		This:   o.Reference(),
    +		Config: config,
    +	}
    +
    +	_, err := methods.UpdateIpRouteTableConfig(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdateNetworkConfig wraps methods.UpdateNetworkConfig
    +func (o HostNetworkSystem) UpdateNetworkConfig(ctx context.Context, config types.HostNetworkConfig, changeMode string) (*types.HostNetworkConfigResult, error) {
    +	req := types.UpdateNetworkConfig{
    +		This:       o.Reference(),
    +		Config:     config,
    +		ChangeMode: changeMode,
    +	}
    +
    +	res, err := methods.UpdateNetworkConfig(ctx, o.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +// UpdatePhysicalNicLinkSpeed wraps methods.UpdatePhysicalNicLinkSpeed
    +func (o HostNetworkSystem) UpdatePhysicalNicLinkSpeed(ctx context.Context, device string, linkSpeed *types.PhysicalNicLinkInfo) error {
    +	req := types.UpdatePhysicalNicLinkSpeed{
    +		This:      o.Reference(),
    +		Device:    device,
    +		LinkSpeed: linkSpeed,
    +	}
    +
    +	_, err := methods.UpdatePhysicalNicLinkSpeed(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdatePortGroup wraps methods.UpdatePortGroup
    +func (o HostNetworkSystem) UpdatePortGroup(ctx context.Context, pgName string, portgrp types.HostPortGroupSpec) error {
    +	req := types.UpdatePortGroup{
    +		This:    o.Reference(),
    +		PgName:  pgName,
    +		Portgrp: portgrp,
    +	}
    +
    +	_, err := methods.UpdatePortGroup(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdateServiceConsoleVirtualNic wraps methods.UpdateServiceConsoleVirtualNic
    +func (o HostNetworkSystem) UpdateServiceConsoleVirtualNic(ctx context.Context, device string, nic types.HostVirtualNicSpec) error {
    +	req := types.UpdateServiceConsoleVirtualNic{
    +		This:   o.Reference(),
    +		Device: device,
    +		Nic:    nic,
    +	}
    +
    +	_, err := methods.UpdateServiceConsoleVirtualNic(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdateVirtualNic wraps methods.UpdateVirtualNic
    +func (o HostNetworkSystem) UpdateVirtualNic(ctx context.Context, device string, nic types.HostVirtualNicSpec) error {
    +	req := types.UpdateVirtualNic{
    +		This:   o.Reference(),
    +		Device: device,
    +		Nic:    nic,
    +	}
    +
    +	_, err := methods.UpdateVirtualNic(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +// UpdateVirtualSwitch wraps methods.UpdateVirtualSwitch
    +func (o HostNetworkSystem) UpdateVirtualSwitch(ctx context.Context, vswitchName string, spec types.HostVirtualSwitchSpec) error {
    +	req := types.UpdateVirtualSwitch{
    +		This:        o.Reference(),
    +		VswitchName: vswitchName,
    +		Spec:        spec,
    +	}
    +
    +	_, err := methods.UpdateVirtualSwitch(ctx, o.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_service_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_service_system.go
    new file mode 100644
    index 00000000000..a66b32c17c1
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_service_system.go
    @@ -0,0 +1,88 @@
    +/*
    +Copyright (c) 2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostServiceSystem struct {
    +	Common
    +}
    +
    +func NewHostServiceSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostServiceSystem {
    +	return &HostServiceSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (s HostServiceSystem) Service(ctx context.Context) ([]types.HostService, error) {
    +	var ss mo.HostServiceSystem
    +
    +	err := s.Properties(ctx, s.Reference(), []string{"serviceInfo.service"}, &ss)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return ss.ServiceInfo.Service, nil
    +}
    +
    +func (s HostServiceSystem) Start(ctx context.Context, id string) error {
    +	req := types.StartService{
    +		This: s.Reference(),
    +		Id:   id,
    +	}
    +
    +	_, err := methods.StartService(ctx, s.Client(), &req)
    +	return err
    +}
    +
    +func (s HostServiceSystem) Stop(ctx context.Context, id string) error {
    +	req := types.StopService{
    +		This: s.Reference(),
    +		Id:   id,
    +	}
    +
    +	_, err := methods.StopService(ctx, s.Client(), &req)
    +	return err
    +}
    +
    +func (s HostServiceSystem) Restart(ctx context.Context, id string) error {
    +	req := types.RestartService{
    +		This: s.Reference(),
    +		Id:   id,
    +	}
    +
    +	_, err := methods.RestartService(ctx, s.Client(), &req)
    +	return err
    +}
    +
    +func (s HostServiceSystem) UpdatePolicy(ctx context.Context, id string, policy string) error {
    +	req := types.UpdateServicePolicy{
    +		This:   s.Reference(),
    +		Id:     id,
    +		Policy: policy,
    +	}
    +
    +	_, err := methods.UpdateServicePolicy(ctx, s.Client(), &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_storage_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_storage_system.go
    new file mode 100644
    index 00000000000..5990a1d4e6b
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_storage_system.go
    @@ -0,0 +1,174 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"errors"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostStorageSystem struct {
    +	Common
    +}
    +
    +func NewHostStorageSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostStorageSystem {
    +	return &HostStorageSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (s HostStorageSystem) RetrieveDiskPartitionInfo(ctx context.Context, devicePath string) (*types.HostDiskPartitionInfo, error) {
    +	req := types.RetrieveDiskPartitionInfo{
    +		This:       s.Reference(),
    +		DevicePath: []string{devicePath},
    +	}
    +
    +	res, err := methods.RetrieveDiskPartitionInfo(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if res.Returnval == nil || len(res.Returnval) == 0 {
    +		return nil, errors.New("no partition info")
    +	}
    +
    +	return &res.Returnval[0], nil
    +}
    +
    +func (s HostStorageSystem) ComputeDiskPartitionInfo(ctx context.Context, devicePath string, layout types.HostDiskPartitionLayout) (*types.HostDiskPartitionInfo, error) {
    +	req := types.ComputeDiskPartitionInfo{
    +		This:       s.Reference(),
    +		DevicePath: devicePath,
    +		Layout:     layout,
    +	}
    +
    +	res, err := methods.ComputeDiskPartitionInfo(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +func (s HostStorageSystem) UpdateDiskPartitionInfo(ctx context.Context, devicePath string, spec types.HostDiskPartitionSpec) error {
    +	req := types.UpdateDiskPartitions{
    +		This:       s.Reference(),
    +		DevicePath: devicePath,
    +		Spec:       spec,
    +	}
    +
    +	_, err := methods.UpdateDiskPartitions(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostStorageSystem) RescanAllHba(ctx context.Context) error {
    +	req := types.RescanAllHba{
    +		This: s.Reference(),
    +	}
    +
    +	_, err := methods.RescanAllHba(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostStorageSystem) Refresh(ctx context.Context) error {
    +	req := types.RefreshStorageSystem{
    +		This: s.Reference(),
    +	}
    +
    +	_, err := methods.RefreshStorageSystem(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostStorageSystem) RescanVmfs(ctx context.Context) error {
    +	req := types.RescanVmfs{
    +		This: s.Reference(),
    +	}
    +
    +	_, err := methods.RescanVmfs(ctx, s.c, &req)
    +	return err
    +}
    +
    +func (s HostStorageSystem) MarkAsSsd(ctx context.Context, uuid string) (*Task, error) {
    +	req := types.MarkAsSsd_Task{
    +		This:         s.Reference(),
    +		ScsiDiskUuid: uuid,
    +	}
    +
    +	res, err := methods.MarkAsSsd_Task(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(s.c, res.Returnval), nil
    +}
    +
    +func (s HostStorageSystem) MarkAsNonSsd(ctx context.Context, uuid string) (*Task, error) {
    +	req := types.MarkAsNonSsd_Task{
    +		This:         s.Reference(),
    +		ScsiDiskUuid: uuid,
    +	}
    +
    +	res, err := methods.MarkAsNonSsd_Task(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(s.c, res.Returnval), nil
    +}
    +
    +func (s HostStorageSystem) MarkAsLocal(ctx context.Context, uuid string) (*Task, error) {
    +	req := types.MarkAsLocal_Task{
    +		This:         s.Reference(),
    +		ScsiDiskUuid: uuid,
    +	}
    +
    +	res, err := methods.MarkAsLocal_Task(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(s.c, res.Returnval), nil
    +}
    +
    +func (s HostStorageSystem) MarkAsNonLocal(ctx context.Context, uuid string) (*Task, error) {
    +	req := types.MarkAsNonLocal_Task{
    +		This:         s.Reference(),
    +		ScsiDiskUuid: uuid,
    +	}
    +
    +	res, err := methods.MarkAsNonLocal_Task(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(s.c, res.Returnval), nil
    +}
    +
    +func (s HostStorageSystem) AttachScsiLun(ctx context.Context, uuid string) error {
    +	req := types.AttachScsiLun{
    +		This:    s.Reference(),
    +		LunUuid: uuid,
    +	}
    +
    +	_, err := methods.AttachScsiLun(ctx, s.c, &req)
    +
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_system.go
    new file mode 100644
    index 00000000000..a350edfdebd
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_system.go
    @@ -0,0 +1,153 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"fmt"
    +	"net"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostSystem struct {
    +	Common
    +}
    +
    +func NewHostSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostSystem {
    +	return &HostSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (h HostSystem) ConfigManager() *HostConfigManager {
    +	return NewHostConfigManager(h.c, h.Reference())
    +}
    +
    +func (h HostSystem) ResourcePool(ctx context.Context) (*ResourcePool, error) {
    +	var mh mo.HostSystem
    +
    +	err := h.Properties(ctx, h.Reference(), []string{"parent"}, &mh)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var mcr *mo.ComputeResource
    +	var parent interface{}
    +
    +	switch mh.Parent.Type {
    +	case "ComputeResource":
    +		mcr = new(mo.ComputeResource)
    +		parent = mcr
    +	case "ClusterComputeResource":
    +		mcc := new(mo.ClusterComputeResource)
    +		mcr = &mcc.ComputeResource
    +		parent = mcc
    +	default:
    +		return nil, fmt.Errorf("unknown host parent type: %s", mh.Parent.Type)
    +	}
    +
    +	err = h.Properties(ctx, *mh.Parent, []string{"resourcePool"}, parent)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	pool := NewResourcePool(h.c, *mcr.ResourcePool)
    +	return pool, nil
    +}
    +
    +func (h HostSystem) ManagementIPs(ctx context.Context) ([]net.IP, error) {
    +	var mh mo.HostSystem
    +
    +	err := h.Properties(ctx, h.Reference(), []string{"config.virtualNicManagerInfo.netConfig"}, &mh)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var ips []net.IP
    +	for _, nc := range mh.Config.VirtualNicManagerInfo.NetConfig {
    +		if nc.NicType == "management" && len(nc.CandidateVnic) > 0 {
    +			ip := net.ParseIP(nc.CandidateVnic[0].Spec.Ip.IpAddress)
    +			if ip != nil {
    +				ips = append(ips, ip)
    +			}
    +		}
    +	}
    +
    +	return ips, nil
    +}
    +
    +func (h HostSystem) Disconnect(ctx context.Context) (*Task, error) {
    +	req := types.DisconnectHost_Task{
    +		This: h.Reference(),
    +	}
    +
    +	res, err := methods.DisconnectHost_Task(ctx, h.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(h.c, res.Returnval), nil
    +}
    +
    +func (h HostSystem) Reconnect(ctx context.Context, cnxSpec *types.HostConnectSpec, reconnectSpec *types.HostSystemReconnectSpec) (*Task, error) {
    +	req := types.ReconnectHost_Task{
    +		This:          h.Reference(),
    +		CnxSpec:       cnxSpec,
    +		ReconnectSpec: reconnectSpec,
    +	}
    +
    +	res, err := methods.ReconnectHost_Task(ctx, h.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(h.c, res.Returnval), nil
    +}
    +
    +func (h HostSystem) EnterMaintenanceMode(ctx context.Context, timeout int32, evacuate bool, spec *types.HostMaintenanceSpec) (*Task, error) {
    +	req := types.EnterMaintenanceMode_Task{
    +		This:                  h.Reference(),
    +		Timeout:               timeout,
    +		EvacuatePoweredOffVms: types.NewBool(evacuate),
    +		MaintenanceSpec:       spec,
    +	}
    +
    +	res, err := methods.EnterMaintenanceMode_Task(ctx, h.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(h.c, res.Returnval), nil
    +}
    +
    +func (h HostSystem) ExitMaintenanceMode(ctx context.Context, timeout int32) (*Task, error) {
    +	req := types.ExitMaintenanceMode_Task{
    +		This:    h.Reference(),
    +		Timeout: timeout,
    +	}
    +
    +	res, err := methods.ExitMaintenanceMode_Task(ctx, h.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(h.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_virtual_nic_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_virtual_nic_manager.go
    new file mode 100644
    index 00000000000..01e7e9cd4b0
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_virtual_nic_manager.go
    @@ -0,0 +1,93 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostVirtualNicManager struct {
    +	Common
    +	Host *HostSystem
    +}
    +
    +func NewHostVirtualNicManager(c *vim25.Client, ref types.ManagedObjectReference, host types.ManagedObjectReference) *HostVirtualNicManager {
    +	return &HostVirtualNicManager{
    +		Common: NewCommon(c, ref),
    +		Host:   NewHostSystem(c, host),
    +	}
    +}
    +
    +func (m HostVirtualNicManager) Info(ctx context.Context) (*types.HostVirtualNicManagerInfo, error) {
    +	var vnm mo.HostVirtualNicManager
    +
    +	err := m.Properties(ctx, m.Reference(), []string{"info"}, &vnm)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &vnm.Info, nil
    +}
    +
    +func (m HostVirtualNicManager) DeselectVnic(ctx context.Context, nicType string, device string) error {
    +	if nicType == string(types.HostVirtualNicManagerNicTypeVsan) {
    +		// Avoid fault.NotSupported:
    +		// "Error deselecting device '$device': VSAN interfaces must be deselected using vim.host.VsanSystem"
    +		s, err := m.Host.ConfigManager().VsanSystem(ctx)
    +		if err != nil {
    +			return err
    +		}
    +
    +		return s.updateVnic(ctx, device, false)
    +	}
    +
    +	req := types.DeselectVnicForNicType{
    +		This:    m.Reference(),
    +		NicType: nicType,
    +		Device:  device,
    +	}
    +
    +	_, err := methods.DeselectVnicForNicType(ctx, m.Client(), &req)
    +	return err
    +}
    +
    +func (m HostVirtualNicManager) SelectVnic(ctx context.Context, nicType string, device string) error {
    +	if nicType == string(types.HostVirtualNicManagerNicTypeVsan) {
    +		// Avoid fault.NotSupported:
    +		// "Error selecting device '$device': VSAN interfaces must be selected using vim.host.VsanSystem"
    +		s, err := m.Host.ConfigManager().VsanSystem(ctx)
    +		if err != nil {
    +			return err
    +		}
    +
    +		return s.updateVnic(ctx, device, true)
    +	}
    +
    +	req := types.SelectVnicForNicType{
    +		This:    m.Reference(),
    +		NicType: nicType,
    +		Device:  device,
    +	}
    +
    +	_, err := methods.SelectVnicForNicType(ctx, m.Client(), &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_vsan_internal_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_vsan_internal_system.go
    new file mode 100644
    index 00000000000..1430e8a8822
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_vsan_internal_system.go
    @@ -0,0 +1,117 @@
    +/*
    +Copyright (c) 2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"encoding/json"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostVsanInternalSystem struct {
    +	Common
    +}
    +
    +func NewHostVsanInternalSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostVsanInternalSystem {
    +	m := HostVsanInternalSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +
    +	return &m
    +}
    +
    +// QueryVsanObjectUuidsByFilter returns vSAN DOM object uuids by filter.
    +func (m HostVsanInternalSystem) QueryVsanObjectUuidsByFilter(ctx context.Context, uuids []string, limit int32, version int32) ([]string, error) {
    +	req := types.QueryVsanObjectUuidsByFilter{
    +		This:    m.Reference(),
    +		Uuids:   uuids,
    +		Limit:   &limit,
    +		Version: version,
    +	}
    +
    +	res, err := methods.QueryVsanObjectUuidsByFilter(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +type VsanObjExtAttrs struct {
    +	Type  string `json:"Object type"`
    +	Class string `json:"Object class"`
    +	Size  string `json:"Object size"`
    +	Path  string `json:"Object path"`
    +	Name  string `json:"User friendly name"`
    +}
    +
    +func (a *VsanObjExtAttrs) DatastorePath(dir string) string {
    +	l := len(dir)
    +	path := a.Path
    +
    +	if len(path) >= l {
    +		path = a.Path[l:]
    +	}
    +
    +	if path != "" {
    +		return path
    +	}
    +
    +	return a.Name // vmnamespace
    +}
    +
    +// GetVsanObjExtAttrs is internal and intended for troubleshooting/debugging situations in the field.
    +// WARNING: This API can be slow because we do IOs (reads) to all the objects.
    +func (m HostVsanInternalSystem) GetVsanObjExtAttrs(ctx context.Context, uuids []string) (map[string]VsanObjExtAttrs, error) {
    +	req := types.GetVsanObjExtAttrs{
    +		This:  m.Reference(),
    +		Uuids: uuids,
    +	}
    +
    +	res, err := methods.GetVsanObjExtAttrs(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var attrs map[string]VsanObjExtAttrs
    +
    +	err = json.Unmarshal([]byte(res.Returnval), &attrs)
    +
    +	return attrs, err
    +}
    +
    +// DeleteVsanObjects is internal and intended for troubleshooting/debugging only.
    +// WARNING: This API can be slow because we do IOs to all the objects.
    +// DOM won't allow access to objects which have lost quorum. Such objects can be deleted with the optional "force" flag.
    +// These objects may however re-appear with quorum if the absent components come back (network partition gets resolved, etc.)
    +func (m HostVsanInternalSystem) DeleteVsanObjects(ctx context.Context, uuids []string, force *bool) ([]types.HostVsanInternalSystemDeleteVsanObjectsResult, error) {
    +	req := types.DeleteVsanObjects{
    +		This:  m.Reference(),
    +		Uuids: uuids,
    +		Force: force,
    +	}
    +
    +	res, err := methods.DeleteVsanObjects(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_vsan_system.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_vsan_system.go
    new file mode 100644
    index 00000000000..5ab234d5e53
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/host_vsan_system.go
    @@ -0,0 +1,88 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type HostVsanSystem struct {
    +	Common
    +}
    +
    +func NewHostVsanSystem(c *vim25.Client, ref types.ManagedObjectReference) *HostVsanSystem {
    +	return &HostVsanSystem{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (s HostVsanSystem) Update(ctx context.Context, config types.VsanHostConfigInfo) (*Task, error) {
    +	req := types.UpdateVsan_Task{
    +		This:   s.Reference(),
    +		Config: config,
    +	}
    +
    +	res, err := methods.UpdateVsan_Task(ctx, s.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(s.Client(), res.Returnval), nil
    +}
    +
    +// updateVnic in support of the HostVirtualNicManager.{SelectVnic,DeselectVnic} methods
    +func (s HostVsanSystem) updateVnic(ctx context.Context, device string, enable bool) error {
    +	var vsan mo.HostVsanSystem
    +
    +	err := s.Properties(ctx, s.Reference(), []string{"config.networkInfo.port"}, &vsan)
    +	if err != nil {
    +		return err
    +	}
    +
    +	info := vsan.Config
    +
    +	var port []types.VsanHostConfigInfoNetworkInfoPortConfig
    +
    +	for _, p := range info.NetworkInfo.Port {
    +		if p.Device == device {
    +			continue
    +		}
    +
    +		port = append(port, p)
    +	}
    +
    +	if enable {
    +		port = append(port, types.VsanHostConfigInfoNetworkInfoPortConfig{
    +			Device: device,
    +		})
    +	}
    +
    +	info.NetworkInfo.Port = port
    +
    +	task, err := s.Update(ctx, info)
    +	if err != nil {
    +		return err
    +	}
    +
    +	_, err = task.WaitForResult(ctx, nil)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/namespace_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/namespace_manager.go
    new file mode 100644
    index 00000000000..f463b368cde
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/namespace_manager.go
    @@ -0,0 +1,76 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type DatastoreNamespaceManager struct {
    +	Common
    +}
    +
    +func NewDatastoreNamespaceManager(c *vim25.Client) *DatastoreNamespaceManager {
    +	n := DatastoreNamespaceManager{
    +		Common: NewCommon(c, *c.ServiceContent.DatastoreNamespaceManager),
    +	}
    +
    +	return &n
    +}
    +
    +// CreateDirectory creates a top-level directory on the given vsan datastore, using
    +// the given user display name hint and opaque storage policy.
    +func (nm DatastoreNamespaceManager) CreateDirectory(ctx context.Context, ds *Datastore, displayName string, policy string) (string, error) {
    +
    +	req := &types.CreateDirectory{
    +		This:        nm.Reference(),
    +		Datastore:   ds.Reference(),
    +		DisplayName: displayName,
    +		Policy:      policy,
    +	}
    +
    +	resp, err := methods.CreateDirectory(ctx, nm.c, req)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return resp.Returnval, nil
    +}
    +
    +// DeleteDirectory deletes the given top-level directory from a vsan datastore.
    +func (nm DatastoreNamespaceManager) DeleteDirectory(ctx context.Context, dc *Datacenter, datastorePath string) error {
    +
    +	req := &types.DeleteDirectory{
    +		This:          nm.Reference(),
    +		DatastorePath: datastorePath,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	if _, err := methods.DeleteDirectory(ctx, nm.c, req); err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/network.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/network.go
    new file mode 100644
    index 00000000000..d1dc7ce01f6
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/network.go
    @@ -0,0 +1,56 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type Network struct {
    +	Common
    +}
    +
    +func NewNetwork(c *vim25.Client, ref types.ManagedObjectReference) *Network {
    +	return &Network{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +// EthernetCardBackingInfo returns the VirtualDeviceBackingInfo for this Network
    +func (n Network) EthernetCardBackingInfo(ctx context.Context) (types.BaseVirtualDeviceBackingInfo, error) {
    +	var e mo.Network
    +
    +	// Use Network.Name rather than Common.Name as the latter does not return the complete name if it contains a '/'
    +	// We can't use Common.ObjectName here either as we need the ManagedEntity.Name field is not set since mo.Network
    +	// has its own Name field.
    +	err := n.Properties(ctx, n.Reference(), []string{"name"}, &e)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	backing := &types.VirtualEthernetCardNetworkBackingInfo{
    +		VirtualDeviceDeviceBackingInfo: types.VirtualDeviceDeviceBackingInfo{
    +			DeviceName: e.Name,
    +		},
    +	}
    +
    +	return backing, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/network_reference.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/network_reference.go
    new file mode 100644
    index 00000000000..7716bdb38fa
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/network_reference.go
    @@ -0,0 +1,31 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// The NetworkReference interface is implemented by managed objects
    +// which can be used as the backing for a VirtualEthernetCard.
    +type NetworkReference interface {
    +	Reference
    +
    +	EthernetCardBackingInfo(ctx context.Context) (types.BaseVirtualDeviceBackingInfo, error)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/opaque_network.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/opaque_network.go
    new file mode 100644
    index 00000000000..47ce4cefe62
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/opaque_network.go
    @@ -0,0 +1,57 @@
    +/*
    +Copyright (c) 2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"fmt"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type OpaqueNetwork struct {
    +	Common
    +}
    +
    +func NewOpaqueNetwork(c *vim25.Client, ref types.ManagedObjectReference) *OpaqueNetwork {
    +	return &OpaqueNetwork{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +// EthernetCardBackingInfo returns the VirtualDeviceBackingInfo for this Network
    +func (n OpaqueNetwork) EthernetCardBackingInfo(ctx context.Context) (types.BaseVirtualDeviceBackingInfo, error) {
    +	var net mo.OpaqueNetwork
    +
    +	if err := n.Properties(ctx, n.Reference(), []string{"summary"}, &net); err != nil {
    +		return nil, err
    +	}
    +
    +	summary, ok := net.Summary.(*types.OpaqueNetworkSummary)
    +	if !ok {
    +		return nil, fmt.Errorf("%s unsupported network type: %T", n, net.Summary)
    +	}
    +
    +	backing := &types.VirtualEthernetCardOpaqueNetworkBackingInfo{
    +		OpaqueNetworkId:   summary.OpaqueNetworkId,
    +		OpaqueNetworkType: summary.OpaqueNetworkType,
    +	}
    +
    +	return backing, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/option_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/option_manager.go
    new file mode 100644
    index 00000000000..7f93273aac3
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/option_manager.go
    @@ -0,0 +1,59 @@
    +/*
    +Copyright (c) 2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type OptionManager struct {
    +	Common
    +}
    +
    +func NewOptionManager(c *vim25.Client, ref types.ManagedObjectReference) *OptionManager {
    +	return &OptionManager{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (m OptionManager) Query(ctx context.Context, name string) ([]types.BaseOptionValue, error) {
    +	req := types.QueryOptions{
    +		This: m.Reference(),
    +		Name: name,
    +	}
    +
    +	res, err := methods.QueryOptions(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (m OptionManager) Update(ctx context.Context, value []types.BaseOptionValue) error {
    +	req := types.UpdateOptions{
    +		This:         m.Reference(),
    +		ChangedValue: value,
    +	}
    +
    +	_, err := methods.UpdateOptions(ctx, m.Client(), &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/resource_pool.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/resource_pool.go
    new file mode 100644
    index 00000000000..55c2e2b2fde
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/resource_pool.go
    @@ -0,0 +1,138 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/nfc"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type ResourcePool struct {
    +	Common
    +}
    +
    +func NewResourcePool(c *vim25.Client, ref types.ManagedObjectReference) *ResourcePool {
    +	return &ResourcePool{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (p ResourcePool) ImportVApp(ctx context.Context, spec types.BaseImportSpec, folder *Folder, host *HostSystem) (*nfc.Lease, error) {
    +	req := types.ImportVApp{
    +		This: p.Reference(),
    +		Spec: spec,
    +	}
    +
    +	if folder != nil {
    +		ref := folder.Reference()
    +		req.Folder = &ref
    +	}
    +
    +	if host != nil {
    +		ref := host.Reference()
    +		req.Host = &ref
    +	}
    +
    +	res, err := methods.ImportVApp(ctx, p.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return nfc.NewLease(p.c, res.Returnval), nil
    +}
    +
    +func (p ResourcePool) Create(ctx context.Context, name string, spec types.ResourceConfigSpec) (*ResourcePool, error) {
    +	req := types.CreateResourcePool{
    +		This: p.Reference(),
    +		Name: name,
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.CreateResourcePool(ctx, p.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewResourcePool(p.c, res.Returnval), nil
    +}
    +
    +func (p ResourcePool) CreateVApp(ctx context.Context, name string, resSpec types.ResourceConfigSpec, configSpec types.VAppConfigSpec, folder *Folder) (*VirtualApp, error) {
    +	req := types.CreateVApp{
    +		This:       p.Reference(),
    +		Name:       name,
    +		ResSpec:    resSpec,
    +		ConfigSpec: configSpec,
    +	}
    +
    +	if folder != nil {
    +		ref := folder.Reference()
    +		req.VmFolder = &ref
    +	}
    +
    +	res, err := methods.CreateVApp(ctx, p.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewVirtualApp(p.c, res.Returnval), nil
    +}
    +
    +func (p ResourcePool) UpdateConfig(ctx context.Context, name string, config *types.ResourceConfigSpec) error {
    +	req := types.UpdateConfig{
    +		This:   p.Reference(),
    +		Name:   name,
    +		Config: config,
    +	}
    +
    +	if config != nil && config.Entity == nil {
    +		ref := p.Reference()
    +
    +		// Create copy of config so changes won't leak back to the caller
    +		newConfig := *config
    +		newConfig.Entity = &ref
    +		req.Config = &newConfig
    +	}
    +
    +	_, err := methods.UpdateConfig(ctx, p.c, &req)
    +	return err
    +}
    +
    +func (p ResourcePool) DestroyChildren(ctx context.Context) error {
    +	req := types.DestroyChildren{
    +		This: p.Reference(),
    +	}
    +
    +	_, err := methods.DestroyChildren(ctx, p.c, &req)
    +	return err
    +}
    +
    +func (p ResourcePool) Destroy(ctx context.Context) (*Task, error) {
    +	req := types.Destroy_Task{
    +		This: p.Reference(),
    +	}
    +
    +	res, err := methods.Destroy_Task(ctx, p.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(p.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/search_index.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/search_index.go
    new file mode 100644
    index 00000000000..4b0a525d528
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/search_index.go
    @@ -0,0 +1,163 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type SearchIndex struct {
    +	Common
    +}
    +
    +func NewSearchIndex(c *vim25.Client) *SearchIndex {
    +	s := SearchIndex{
    +		Common: NewCommon(c, *c.ServiceContent.SearchIndex),
    +	}
    +
    +	return &s
    +}
    +
    +// FindByDatastorePath finds a virtual machine by its location on a datastore.
    +func (s SearchIndex) FindByDatastorePath(ctx context.Context, dc *Datacenter, path string) (Reference, error) {
    +	req := types.FindByDatastorePath{
    +		This:       s.Reference(),
    +		Datacenter: dc.Reference(),
    +		Path:       path,
    +	}
    +
    +	res, err := methods.FindByDatastorePath(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if res.Returnval == nil {
    +		return nil, nil
    +	}
    +	return NewReference(s.c, *res.Returnval), nil
    +}
    +
    +// FindByDnsName finds a virtual machine or host by DNS name.
    +func (s SearchIndex) FindByDnsName(ctx context.Context, dc *Datacenter, dnsName string, vmSearch bool) (Reference, error) {
    +	req := types.FindByDnsName{
    +		This:     s.Reference(),
    +		DnsName:  dnsName,
    +		VmSearch: vmSearch,
    +	}
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.FindByDnsName(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if res.Returnval == nil {
    +		return nil, nil
    +	}
    +	return NewReference(s.c, *res.Returnval), nil
    +}
    +
    +// FindByInventoryPath finds a managed entity based on its location in the inventory.
    +func (s SearchIndex) FindByInventoryPath(ctx context.Context, path string) (Reference, error) {
    +	req := types.FindByInventoryPath{
    +		This:          s.Reference(),
    +		InventoryPath: path,
    +	}
    +
    +	res, err := methods.FindByInventoryPath(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if res.Returnval == nil {
    +		return nil, nil
    +	}
    +	return NewReference(s.c, *res.Returnval), nil
    +}
    +
    +// FindByIp finds a virtual machine or host by IP address.
    +func (s SearchIndex) FindByIp(ctx context.Context, dc *Datacenter, ip string, vmSearch bool) (Reference, error) {
    +	req := types.FindByIp{
    +		This:     s.Reference(),
    +		Ip:       ip,
    +		VmSearch: vmSearch,
    +	}
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.FindByIp(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if res.Returnval == nil {
    +		return nil, nil
    +	}
    +	return NewReference(s.c, *res.Returnval), nil
    +}
    +
    +// FindByUuid finds a virtual machine or host by UUID.
    +func (s SearchIndex) FindByUuid(ctx context.Context, dc *Datacenter, uuid string, vmSearch bool, instanceUuid *bool) (Reference, error) {
    +	req := types.FindByUuid{
    +		This:         s.Reference(),
    +		Uuid:         uuid,
    +		VmSearch:     vmSearch,
    +		InstanceUuid: instanceUuid,
    +	}
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.FindByUuid(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if res.Returnval == nil {
    +		return nil, nil
    +	}
    +	return NewReference(s.c, *res.Returnval), nil
    +}
    +
    +// FindChild finds a particular child based on a managed entity name.
    +func (s SearchIndex) FindChild(ctx context.Context, entity Reference, name string) (Reference, error) {
    +	req := types.FindChild{
    +		This:   s.Reference(),
    +		Entity: entity.Reference(),
    +		Name:   name,
    +	}
    +
    +	res, err := methods.FindChild(ctx, s.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if res.Returnval == nil {
    +		return nil, nil
    +	}
    +	return NewReference(s.c, *res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/storage_pod.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/storage_pod.go
    new file mode 100644
    index 00000000000..188b91a002e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/storage_pod.go
    @@ -0,0 +1,34 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type StoragePod struct {
    +	*Folder
    +}
    +
    +func NewStoragePod(c *vim25.Client, ref types.ManagedObjectReference) *StoragePod {
    +	return &StoragePod{
    +		Folder: &Folder{
    +			Common: NewCommon(c, ref),
    +		},
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/storage_resource_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/storage_resource_manager.go
    new file mode 100644
    index 00000000000..579bcd4d7ee
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/storage_resource_manager.go
    @@ -0,0 +1,179 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type StorageResourceManager struct {
    +	Common
    +}
    +
    +func NewStorageResourceManager(c *vim25.Client) *StorageResourceManager {
    +	sr := StorageResourceManager{
    +		Common: NewCommon(c, *c.ServiceContent.StorageResourceManager),
    +	}
    +
    +	return &sr
    +}
    +
    +func (sr StorageResourceManager) ApplyStorageDrsRecommendation(ctx context.Context, key []string) (*Task, error) {
    +	req := types.ApplyStorageDrsRecommendation_Task{
    +		This: sr.Reference(),
    +		Key:  key,
    +	}
    +
    +	res, err := methods.ApplyStorageDrsRecommendation_Task(ctx, sr.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(sr.c, res.Returnval), nil
    +}
    +
    +func (sr StorageResourceManager) ApplyStorageDrsRecommendationToPod(ctx context.Context, pod *StoragePod, key string) (*Task, error) {
    +	req := types.ApplyStorageDrsRecommendationToPod_Task{
    +		This: sr.Reference(),
    +		Key:  key,
    +	}
    +
    +	if pod != nil {
    +		req.Pod = pod.Reference()
    +	}
    +
    +	res, err := methods.ApplyStorageDrsRecommendationToPod_Task(ctx, sr.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(sr.c, res.Returnval), nil
    +}
    +
    +func (sr StorageResourceManager) CancelStorageDrsRecommendation(ctx context.Context, key []string) error {
    +	req := types.CancelStorageDrsRecommendation{
    +		This: sr.Reference(),
    +		Key:  key,
    +	}
    +
    +	_, err := methods.CancelStorageDrsRecommendation(ctx, sr.c, &req)
    +
    +	return err
    +}
    +
    +func (sr StorageResourceManager) ConfigureDatastoreIORM(ctx context.Context, datastore *Datastore, spec types.StorageIORMConfigSpec, key string) (*Task, error) {
    +	req := types.ConfigureDatastoreIORM_Task{
    +		This: sr.Reference(),
    +		Spec: spec,
    +	}
    +
    +	if datastore != nil {
    +		req.Datastore = datastore.Reference()
    +	}
    +
    +	res, err := methods.ConfigureDatastoreIORM_Task(ctx, sr.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(sr.c, res.Returnval), nil
    +}
    +
    +func (sr StorageResourceManager) ConfigureStorageDrsForPod(ctx context.Context, pod *StoragePod, spec types.StorageDrsConfigSpec, modify bool) (*Task, error) {
    +	req := types.ConfigureStorageDrsForPod_Task{
    +		This:   sr.Reference(),
    +		Spec:   spec,
    +		Modify: modify,
    +	}
    +
    +	if pod != nil {
    +		req.Pod = pod.Reference()
    +	}
    +
    +	res, err := methods.ConfigureStorageDrsForPod_Task(ctx, sr.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(sr.c, res.Returnval), nil
    +}
    +
    +func (sr StorageResourceManager) QueryDatastorePerformanceSummary(ctx context.Context, datastore *Datastore) ([]types.StoragePerformanceSummary, error) {
    +	req := types.QueryDatastorePerformanceSummary{
    +		This: sr.Reference(),
    +	}
    +
    +	if datastore != nil {
    +		req.Datastore = datastore.Reference()
    +	}
    +
    +	res, err := methods.QueryDatastorePerformanceSummary(ctx, sr.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (sr StorageResourceManager) QueryIORMConfigOption(ctx context.Context, host *HostSystem) (*types.StorageIORMConfigOption, error) {
    +	req := types.QueryIORMConfigOption{
    +		This: sr.Reference(),
    +	}
    +
    +	if host != nil {
    +		req.Host = host.Reference()
    +	}
    +
    +	res, err := methods.QueryIORMConfigOption(ctx, sr.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +func (sr StorageResourceManager) RecommendDatastores(ctx context.Context, storageSpec types.StoragePlacementSpec) (*types.StoragePlacementResult, error) {
    +	req := types.RecommendDatastores{
    +		This:        sr.Reference(),
    +		StorageSpec: storageSpec,
    +	}
    +
    +	res, err := methods.RecommendDatastores(ctx, sr.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +func (sr StorageResourceManager) RefreshStorageDrsRecommendation(ctx context.Context, pod *StoragePod) error {
    +	req := types.RefreshStorageDrsRecommendation{
    +		This: sr.Reference(),
    +	}
    +
    +	if pod != nil {
    +		req.Pod = pod.Reference()
    +	}
    +
    +	_, err := methods.RefreshStorageDrsRecommendation(ctx, sr.c, &req)
    +
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/task.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/task.go
    new file mode 100644
    index 00000000000..2b66aa93b7f
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/task.go
    @@ -0,0 +1,62 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/task"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/progress"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// Task is a convenience wrapper around task.Task that keeps a reference to
    +// the client that was used to create it. This allows users to call the Wait()
    +// function with only a context parameter, instead of a context parameter, a
    +// soap.RoundTripper, and reference to the root property collector.
    +type Task struct {
    +	Common
    +}
    +
    +func NewTask(c *vim25.Client, ref types.ManagedObjectReference) *Task {
    +	t := Task{
    +		Common: NewCommon(c, ref),
    +	}
    +
    +	return &t
    +}
    +
    +func (t *Task) Wait(ctx context.Context) error {
    +	_, err := t.WaitForResult(ctx, nil)
    +	return err
    +}
    +
    +func (t *Task) WaitForResult(ctx context.Context, s progress.Sinker) (*types.TaskInfo, error) {
    +	p := property.DefaultCollector(t.c)
    +	return task.Wait(ctx, t.Reference(), p, s)
    +}
    +
    +func (t *Task) Cancel(ctx context.Context) error {
    +	_, err := methods.CancelTask(ctx, t.Client(), &types.CancelTask{
    +		This: t.Reference(),
    +	})
    +
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/types.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/types.go
    new file mode 100644
    index 00000000000..4eb8d1b8bbf
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/types.go
    @@ -0,0 +1,67 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type Reference interface {
    +	Reference() types.ManagedObjectReference
    +}
    +
    +func NewReference(c *vim25.Client, e types.ManagedObjectReference) Reference {
    +	switch e.Type {
    +	case "Folder":
    +		return NewFolder(c, e)
    +	case "StoragePod":
    +		return &StoragePod{
    +			NewFolder(c, e),
    +		}
    +	case "Datacenter":
    +		return NewDatacenter(c, e)
    +	case "VirtualMachine":
    +		return NewVirtualMachine(c, e)
    +	case "VirtualApp":
    +		return &VirtualApp{
    +			NewResourcePool(c, e),
    +		}
    +	case "ComputeResource":
    +		return NewComputeResource(c, e)
    +	case "ClusterComputeResource":
    +		return NewClusterComputeResource(c, e)
    +	case "HostSystem":
    +		return NewHostSystem(c, e)
    +	case "Network":
    +		return NewNetwork(c, e)
    +	case "OpaqueNetwork":
    +		return NewOpaqueNetwork(c, e)
    +	case "ResourcePool":
    +		return NewResourcePool(c, e)
    +	case "DistributedVirtualSwitch":
    +		return NewDistributedVirtualSwitch(c, e)
    +	case "VmwareDistributedVirtualSwitch":
    +		return &VmwareDistributedVirtualSwitch{*NewDistributedVirtualSwitch(c, e)}
    +	case "DistributedVirtualPortgroup":
    +		return NewDistributedVirtualPortgroup(c, e)
    +	case "Datastore":
    +		return NewDatastore(c, e)
    +	default:
    +		panic("Unknown managed entity: " + e.Type)
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_app.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_app.go
    new file mode 100644
    index 00000000000..4811178f167
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_app.go
    @@ -0,0 +1,105 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type VirtualApp struct {
    +	*ResourcePool
    +}
    +
    +func NewVirtualApp(c *vim25.Client, ref types.ManagedObjectReference) *VirtualApp {
    +	return &VirtualApp{
    +		ResourcePool: NewResourcePool(c, ref),
    +	}
    +}
    +
    +func (p VirtualApp) CreateChildVM(ctx context.Context, config types.VirtualMachineConfigSpec, host *HostSystem) (*Task, error) {
    +	req := types.CreateChildVM_Task{
    +		This:   p.Reference(),
    +		Config: config,
    +	}
    +
    +	if host != nil {
    +		ref := host.Reference()
    +		req.Host = &ref
    +	}
    +
    +	res, err := methods.CreateChildVM_Task(ctx, p.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(p.c, res.Returnval), nil
    +}
    +
    +func (p VirtualApp) UpdateConfig(ctx context.Context, spec types.VAppConfigSpec) error {
    +	req := types.UpdateVAppConfig{
    +		This: p.Reference(),
    +		Spec: spec,
    +	}
    +
    +	_, err := methods.UpdateVAppConfig(ctx, p.c, &req)
    +	return err
    +}
    +
    +func (p VirtualApp) PowerOn(ctx context.Context) (*Task, error) {
    +	req := types.PowerOnVApp_Task{
    +		This: p.Reference(),
    +	}
    +
    +	res, err := methods.PowerOnVApp_Task(ctx, p.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(p.c, res.Returnval), nil
    +}
    +
    +func (p VirtualApp) PowerOff(ctx context.Context, force bool) (*Task, error) {
    +	req := types.PowerOffVApp_Task{
    +		This:  p.Reference(),
    +		Force: force,
    +	}
    +
    +	res, err := methods.PowerOffVApp_Task(ctx, p.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(p.c, res.Returnval), nil
    +
    +}
    +
    +func (p VirtualApp) Suspend(ctx context.Context) (*Task, error) {
    +	req := types.SuspendVApp_Task{
    +		This: p.Reference(),
    +	}
    +
    +	res, err := methods.SuspendVApp_Task(ctx, p.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(p.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_device_list.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_device_list.go
    new file mode 100644
    index 00000000000..e1c35eff88e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_device_list.go
    @@ -0,0 +1,935 @@
    +/*
    +Copyright (c) 2015-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"errors"
    +	"fmt"
    +	"path/filepath"
    +	"reflect"
    +	"regexp"
    +	"sort"
    +	"strings"
    +
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// Type values for use in BootOrder
    +const (
    +	DeviceTypeNone     = "-"
    +	DeviceTypeCdrom    = "cdrom"
    +	DeviceTypeDisk     = "disk"
    +	DeviceTypeEthernet = "ethernet"
    +	DeviceTypeFloppy   = "floppy"
    +)
    +
    +// VirtualDeviceList provides helper methods for working with a list of virtual devices.
    +type VirtualDeviceList []types.BaseVirtualDevice
    +
    +// SCSIControllerTypes are used for adding a new SCSI controller to a VM.
    +func SCSIControllerTypes() VirtualDeviceList {
    +	// Return a mutable list of SCSI controller types, initialized with defaults.
    +	return VirtualDeviceList([]types.BaseVirtualDevice{
    +		&types.VirtualLsiLogicController{},
    +		&types.VirtualBusLogicController{},
    +		&types.ParaVirtualSCSIController{},
    +		&types.VirtualLsiLogicSASController{},
    +	}).Select(func(device types.BaseVirtualDevice) bool {
    +		c := device.(types.BaseVirtualSCSIController).GetVirtualSCSIController()
    +		c.SharedBus = types.VirtualSCSISharingNoSharing
    +		c.BusNumber = -1
    +		return true
    +	})
    +}
    +
    +// EthernetCardTypes are used for adding a new ethernet card to a VM.
    +func EthernetCardTypes() VirtualDeviceList {
    +	return VirtualDeviceList([]types.BaseVirtualDevice{
    +		&types.VirtualE1000{},
    +		&types.VirtualE1000e{},
    +		&types.VirtualVmxnet2{},
    +		&types.VirtualVmxnet3{},
    +		&types.VirtualPCNet32{},
    +		&types.VirtualSriovEthernetCard{},
    +	}).Select(func(device types.BaseVirtualDevice) bool {
    +		c := device.(types.BaseVirtualEthernetCard).GetVirtualEthernetCard()
    +		c.GetVirtualDevice().Key = -1
    +		return true
    +	})
    +}
    +
    +// Select returns a new list containing all elements of the list for which the given func returns true.
    +func (l VirtualDeviceList) Select(f func(device types.BaseVirtualDevice) bool) VirtualDeviceList {
    +	var found VirtualDeviceList
    +
    +	for _, device := range l {
    +		if f(device) {
    +			found = append(found, device)
    +		}
    +	}
    +
    +	return found
    +}
    +
    +// SelectByType returns a new list with devices that are equal to or extend the given type.
    +func (l VirtualDeviceList) SelectByType(deviceType types.BaseVirtualDevice) VirtualDeviceList {
    +	dtype := reflect.TypeOf(deviceType)
    +	if dtype == nil {
    +		return nil
    +	}
    +	dname := dtype.Elem().Name()
    +
    +	return l.Select(func(device types.BaseVirtualDevice) bool {
    +		t := reflect.TypeOf(device)
    +
    +		if t == dtype {
    +			return true
    +		}
    +
    +		_, ok := t.Elem().FieldByName(dname)
    +
    +		return ok
    +	})
    +}
    +
    +// SelectByBackingInfo returns a new list with devices matching the given backing info.
    +// If the value of backing is nil, any device with a backing of the same type will be returned.
    +func (l VirtualDeviceList) SelectByBackingInfo(backing types.BaseVirtualDeviceBackingInfo) VirtualDeviceList {
    +	t := reflect.TypeOf(backing)
    +
    +	return l.Select(func(device types.BaseVirtualDevice) bool {
    +		db := device.GetVirtualDevice().Backing
    +		if db == nil {
    +			return false
    +		}
    +
    +		if reflect.TypeOf(db) != t {
    +			return false
    +		}
    +
    +		if reflect.ValueOf(backing).IsNil() {
    +			// selecting by backing type
    +			return true
    +		}
    +
    +		switch a := db.(type) {
    +		case *types.VirtualEthernetCardNetworkBackingInfo:
    +			b := backing.(*types.VirtualEthernetCardNetworkBackingInfo)
    +			return a.DeviceName == b.DeviceName
    +		case *types.VirtualEthernetCardDistributedVirtualPortBackingInfo:
    +			b := backing.(*types.VirtualEthernetCardDistributedVirtualPortBackingInfo)
    +			return a.Port.SwitchUuid == b.Port.SwitchUuid &&
    +				a.Port.PortgroupKey == b.Port.PortgroupKey
    +		case *types.VirtualDiskFlatVer2BackingInfo:
    +			b := backing.(*types.VirtualDiskFlatVer2BackingInfo)
    +			if a.Parent != nil && b.Parent != nil {
    +				return a.Parent.FileName == b.Parent.FileName
    +			}
    +			return a.FileName == b.FileName
    +		case *types.VirtualSerialPortURIBackingInfo:
    +			b := backing.(*types.VirtualSerialPortURIBackingInfo)
    +			return a.ServiceURI == b.ServiceURI
    +		case types.BaseVirtualDeviceFileBackingInfo:
    +			b := backing.(types.BaseVirtualDeviceFileBackingInfo)
    +			return a.GetVirtualDeviceFileBackingInfo().FileName == b.GetVirtualDeviceFileBackingInfo().FileName
    +		default:
    +			return false
    +		}
    +	})
    +}
    +
    +// Find returns the device matching the given name.
    +func (l VirtualDeviceList) Find(name string) types.BaseVirtualDevice {
    +	for _, device := range l {
    +		if l.Name(device) == name {
    +			return device
    +		}
    +	}
    +	return nil
    +}
    +
    +// FindByKey returns the device matching the given key.
    +func (l VirtualDeviceList) FindByKey(key int32) types.BaseVirtualDevice {
    +	for _, device := range l {
    +		if device.GetVirtualDevice().Key == key {
    +			return device
    +		}
    +	}
    +	return nil
    +}
    +
    +// FindIDEController will find the named IDE controller if given, otherwise will pick an available controller.
    +// An error is returned if the named controller is not found or not an IDE controller.  Or, if name is not
    +// given and no available controller can be found.
    +func (l VirtualDeviceList) FindIDEController(name string) (*types.VirtualIDEController, error) {
    +	if name != "" {
    +		d := l.Find(name)
    +		if d == nil {
    +			return nil, fmt.Errorf("device '%s' not found", name)
    +		}
    +		if c, ok := d.(*types.VirtualIDEController); ok {
    +			return c, nil
    +		}
    +		return nil, fmt.Errorf("%s is not an IDE controller", name)
    +	}
    +
    +	c := l.PickController((*types.VirtualIDEController)(nil))
    +	if c == nil {
    +		return nil, errors.New("no available IDE controller")
    +	}
    +
    +	return c.(*types.VirtualIDEController), nil
    +}
    +
    +// CreateIDEController creates a new IDE controller.
    +func (l VirtualDeviceList) CreateIDEController() (types.BaseVirtualDevice, error) {
    +	ide := &types.VirtualIDEController{}
    +	ide.Key = l.NewKey()
    +	return ide, nil
    +}
    +
    +// FindSCSIController will find the named SCSI controller if given, otherwise will pick an available controller.
    +// An error is returned if the named controller is not found or not an SCSI controller.  Or, if name is not
    +// given and no available controller can be found.
    +func (l VirtualDeviceList) FindSCSIController(name string) (*types.VirtualSCSIController, error) {
    +	if name != "" {
    +		d := l.Find(name)
    +		if d == nil {
    +			return nil, fmt.Errorf("device '%s' not found", name)
    +		}
    +		if c, ok := d.(types.BaseVirtualSCSIController); ok {
    +			return c.GetVirtualSCSIController(), nil
    +		}
    +		return nil, fmt.Errorf("%s is not an SCSI controller", name)
    +	}
    +
    +	c := l.PickController((*types.VirtualSCSIController)(nil))
    +	if c == nil {
    +		return nil, errors.New("no available SCSI controller")
    +	}
    +
    +	return c.(types.BaseVirtualSCSIController).GetVirtualSCSIController(), nil
    +}
    +
    +// CreateSCSIController creates a new SCSI controller of type name if given, otherwise defaults to lsilogic.
    +func (l VirtualDeviceList) CreateSCSIController(name string) (types.BaseVirtualDevice, error) {
    +	ctypes := SCSIControllerTypes()
    +
    +	if name == "scsi" || name == "" {
    +		name = ctypes.Type(ctypes[0])
    +	}
    +
    +	found := ctypes.Select(func(device types.BaseVirtualDevice) bool {
    +		return l.Type(device) == name
    +	})
    +
    +	if len(found) == 0 {
    +		return nil, fmt.Errorf("unknown SCSI controller type '%s'", name)
    +	}
    +
    +	c, ok := found[0].(types.BaseVirtualSCSIController)
    +	if !ok {
    +		return nil, fmt.Errorf("invalid SCSI controller type '%s'", name)
    +	}
    +
    +	scsi := c.GetVirtualSCSIController()
    +	scsi.BusNumber = l.newSCSIBusNumber()
    +	scsi.Key = l.NewKey()
    +	scsi.ScsiCtlrUnitNumber = 7
    +	return c.(types.BaseVirtualDevice), nil
    +}
    +
    +var scsiBusNumbers = []int{0, 1, 2, 3}
    +
    +// newSCSIBusNumber returns the bus number to use for adding a new SCSI bus device.
    +// -1 is returned if there are no bus numbers available.
    +func (l VirtualDeviceList) newSCSIBusNumber() int32 {
    +	var used []int
    +
    +	for _, d := range l.SelectByType((*types.VirtualSCSIController)(nil)) {
    +		num := d.(types.BaseVirtualSCSIController).GetVirtualSCSIController().BusNumber
    +		if num >= 0 {
    +			used = append(used, int(num))
    +		} // else caller is creating a new vm using SCSIControllerTypes
    +	}
    +
    +	sort.Ints(used)
    +
    +	for i, n := range scsiBusNumbers {
    +		if i == len(used) || n != used[i] {
    +			return int32(n)
    +		}
    +	}
    +
    +	return -1
    +}
    +
    +// FindNVMEController will find the named NVME controller if given, otherwise will pick an available controller.
    +// An error is returned if the named controller is not found or not an NVME controller.  Or, if name is not
    +// given and no available controller can be found.
    +func (l VirtualDeviceList) FindNVMEController(name string) (*types.VirtualNVMEController, error) {
    +	if name != "" {
    +		d := l.Find(name)
    +		if d == nil {
    +			return nil, fmt.Errorf("device '%s' not found", name)
    +		}
    +		if c, ok := d.(*types.VirtualNVMEController); ok {
    +			return c, nil
    +		}
    +		return nil, fmt.Errorf("%s is not an NVME controller", name)
    +	}
    +
    +	c := l.PickController((*types.VirtualNVMEController)(nil))
    +	if c == nil {
    +		return nil, errors.New("no available NVME controller")
    +	}
    +
    +	return c.(*types.VirtualNVMEController), nil
    +}
    +
    +// CreateNVMEController creates a new NVMWE controller.
    +func (l VirtualDeviceList) CreateNVMEController() (types.BaseVirtualDevice, error) {
    +	nvme := &types.VirtualNVMEController{}
    +	nvme.BusNumber = l.newNVMEBusNumber()
    +	nvme.Key = l.NewKey()
    +
    +	return nvme, nil
    +}
    +
    +var nvmeBusNumbers = []int{0, 1, 2, 3}
    +
    +// newNVMEBusNumber returns the bus number to use for adding a new NVME bus device.
    +// -1 is returned if there are no bus numbers available.
    +func (l VirtualDeviceList) newNVMEBusNumber() int32 {
    +	var used []int
    +
    +	for _, d := range l.SelectByType((*types.VirtualNVMEController)(nil)) {
    +		num := d.(types.BaseVirtualController).GetVirtualController().BusNumber
    +		if num >= 0 {
    +			used = append(used, int(num))
    +		} // else caller is creating a new vm using NVMEControllerTypes
    +	}
    +
    +	sort.Ints(used)
    +
    +	for i, n := range nvmeBusNumbers {
    +		if i == len(used) || n != used[i] {
    +			return int32(n)
    +		}
    +	}
    +
    +	return -1
    +}
    +
    +// FindDiskController will find an existing ide or scsi disk controller.
    +func (l VirtualDeviceList) FindDiskController(name string) (types.BaseVirtualController, error) {
    +	switch {
    +	case name == "ide":
    +		return l.FindIDEController("")
    +	case name == "scsi" || name == "":
    +		return l.FindSCSIController("")
    +	case name == "nvme":
    +		return l.FindNVMEController("")
    +	default:
    +		if c, ok := l.Find(name).(types.BaseVirtualController); ok {
    +			return c, nil
    +		}
    +		return nil, fmt.Errorf("%s is not a valid controller", name)
    +	}
    +}
    +
    +// PickController returns a controller of the given type(s).
    +// If no controllers are found or have no available slots, then nil is returned.
    +func (l VirtualDeviceList) PickController(kind types.BaseVirtualController) types.BaseVirtualController {
    +	l = l.SelectByType(kind.(types.BaseVirtualDevice)).Select(func(device types.BaseVirtualDevice) bool {
    +		num := len(device.(types.BaseVirtualController).GetVirtualController().Device)
    +
    +		switch device.(type) {
    +		case types.BaseVirtualSCSIController:
    +			return num < 15
    +		case *types.VirtualIDEController:
    +			return num < 2
    +		case *types.VirtualNVMEController:
    +			return num < 8
    +		default:
    +			return true
    +		}
    +	})
    +
    +	if len(l) == 0 {
    +		return nil
    +	}
    +
    +	return l[0].(types.BaseVirtualController)
    +}
    +
    +// newUnitNumber returns the unit number to use for attaching a new device to the given controller.
    +func (l VirtualDeviceList) newUnitNumber(c types.BaseVirtualController) int32 {
    +	units := make([]bool, 30)
    +
    +	switch sc := c.(type) {
    +	case types.BaseVirtualSCSIController:
    +		//  The SCSI controller sits on its own bus
    +		units[sc.GetVirtualSCSIController().ScsiCtlrUnitNumber] = true
    +	}
    +
    +	key := c.GetVirtualController().Key
    +
    +	for _, device := range l {
    +		d := device.GetVirtualDevice()
    +
    +		if d.ControllerKey == key && d.UnitNumber != nil {
    +			units[int(*d.UnitNumber)] = true
    +		}
    +	}
    +
    +	for unit, used := range units {
    +		if !used {
    +			return int32(unit)
    +		}
    +	}
    +
    +	return -1
    +}
    +
    +// NewKey returns the key to use for adding a new device to the device list.
    +// The device list we're working with here may not be complete (e.g. when
    +// we're only adding new devices), so any positive keys could conflict with device keys
    +// that are already in use. To avoid this type of conflict, we can use negative keys
    +// here, which will be resolved to positive keys by vSphere as the reconfiguration is done.
    +func (l VirtualDeviceList) NewKey() int32 {
    +	var key int32 = -200
    +
    +	for _, device := range l {
    +		d := device.GetVirtualDevice()
    +		if d.Key < key {
    +			key = d.Key
    +		}
    +	}
    +
    +	return key - 1
    +}
    +
    +// AssignController assigns a device to a controller.
    +func (l VirtualDeviceList) AssignController(device types.BaseVirtualDevice, c types.BaseVirtualController) {
    +	d := device.GetVirtualDevice()
    +	d.ControllerKey = c.GetVirtualController().Key
    +	d.UnitNumber = new(int32)
    +	*d.UnitNumber = l.newUnitNumber(c)
    +	if d.Key == 0 {
    +		d.Key = -1
    +	}
    +}
    +
    +// CreateDisk creates a new VirtualDisk device which can be added to a VM.
    +func (l VirtualDeviceList) CreateDisk(c types.BaseVirtualController, ds types.ManagedObjectReference, name string) *types.VirtualDisk {
    +	// If name is not specified, one will be chosen for you.
    +	// But if when given, make sure it ends in .vmdk, otherwise it will be treated as a directory.
    +	if len(name) > 0 && filepath.Ext(name) != ".vmdk" {
    +		name += ".vmdk"
    +	}
    +
    +	device := &types.VirtualDisk{
    +		VirtualDevice: types.VirtualDevice{
    +			Backing: &types.VirtualDiskFlatVer2BackingInfo{
    +				DiskMode:        string(types.VirtualDiskModePersistent),
    +				ThinProvisioned: types.NewBool(true),
    +				VirtualDeviceFileBackingInfo: types.VirtualDeviceFileBackingInfo{
    +					FileName:  name,
    +					Datastore: &ds,
    +				},
    +			},
    +		},
    +	}
    +
    +	l.AssignController(device, c)
    +	return device
    +}
    +
    +// ChildDisk creates a new VirtualDisk device, linked to the given parent disk, which can be added to a VM.
    +func (l VirtualDeviceList) ChildDisk(parent *types.VirtualDisk) *types.VirtualDisk {
    +	disk := *parent
    +	backing := disk.Backing.(*types.VirtualDiskFlatVer2BackingInfo)
    +	p := new(DatastorePath)
    +	p.FromString(backing.FileName)
    +	p.Path = ""
    +
    +	// Use specified disk as parent backing to a new disk.
    +	disk.Backing = &types.VirtualDiskFlatVer2BackingInfo{
    +		VirtualDeviceFileBackingInfo: types.VirtualDeviceFileBackingInfo{
    +			FileName:  p.String(),
    +			Datastore: backing.Datastore,
    +		},
    +		Parent:          backing,
    +		DiskMode:        backing.DiskMode,
    +		ThinProvisioned: backing.ThinProvisioned,
    +	}
    +
    +	return &disk
    +}
    +
    +func (l VirtualDeviceList) connectivity(device types.BaseVirtualDevice, v bool) error {
    +	c := device.GetVirtualDevice().Connectable
    +	if c == nil {
    +		return fmt.Errorf("%s is not connectable", l.Name(device))
    +	}
    +
    +	c.Connected = v
    +	c.StartConnected = v
    +
    +	return nil
    +}
    +
    +// Connect changes the device to connected, returns an error if the device is not connectable.
    +func (l VirtualDeviceList) Connect(device types.BaseVirtualDevice) error {
    +	return l.connectivity(device, true)
    +}
    +
    +// Disconnect changes the device to disconnected, returns an error if the device is not connectable.
    +func (l VirtualDeviceList) Disconnect(device types.BaseVirtualDevice) error {
    +	return l.connectivity(device, false)
    +}
    +
    +// FindCdrom finds a cdrom device with the given name, defaulting to the first cdrom device if any.
    +func (l VirtualDeviceList) FindCdrom(name string) (*types.VirtualCdrom, error) {
    +	if name != "" {
    +		d := l.Find(name)
    +		if d == nil {
    +			return nil, fmt.Errorf("device '%s' not found", name)
    +		}
    +		if c, ok := d.(*types.VirtualCdrom); ok {
    +			return c, nil
    +		}
    +		return nil, fmt.Errorf("%s is not a cdrom device", name)
    +	}
    +
    +	c := l.SelectByType((*types.VirtualCdrom)(nil))
    +	if len(c) == 0 {
    +		return nil, errors.New("no cdrom device found")
    +	}
    +
    +	return c[0].(*types.VirtualCdrom), nil
    +}
    +
    +// CreateCdrom creates a new VirtualCdrom device which can be added to a VM.
    +func (l VirtualDeviceList) CreateCdrom(c *types.VirtualIDEController) (*types.VirtualCdrom, error) {
    +	device := &types.VirtualCdrom{}
    +
    +	l.AssignController(device, c)
    +
    +	l.setDefaultCdromBacking(device)
    +
    +	device.Connectable = &types.VirtualDeviceConnectInfo{
    +		AllowGuestControl: true,
    +		Connected:         true,
    +		StartConnected:    true,
    +	}
    +
    +	return device, nil
    +}
    +
    +// InsertIso changes the cdrom device backing to use the given iso file.
    +func (l VirtualDeviceList) InsertIso(device *types.VirtualCdrom, iso string) *types.VirtualCdrom {
    +	device.Backing = &types.VirtualCdromIsoBackingInfo{
    +		VirtualDeviceFileBackingInfo: types.VirtualDeviceFileBackingInfo{
    +			FileName: iso,
    +		},
    +	}
    +
    +	return device
    +}
    +
    +// EjectIso removes the iso file based backing and replaces with the default cdrom backing.
    +func (l VirtualDeviceList) EjectIso(device *types.VirtualCdrom) *types.VirtualCdrom {
    +	l.setDefaultCdromBacking(device)
    +	return device
    +}
    +
    +func (l VirtualDeviceList) setDefaultCdromBacking(device *types.VirtualCdrom) {
    +	device.Backing = &types.VirtualCdromAtapiBackingInfo{
    +		VirtualDeviceDeviceBackingInfo: types.VirtualDeviceDeviceBackingInfo{
    +			DeviceName:    fmt.Sprintf("%s-%d-%d", DeviceTypeCdrom, device.ControllerKey, device.UnitNumber),
    +			UseAutoDetect: types.NewBool(false),
    +		},
    +	}
    +}
    +
    +// FindFloppy finds a floppy device with the given name, defaulting to the first floppy device if any.
    +func (l VirtualDeviceList) FindFloppy(name string) (*types.VirtualFloppy, error) {
    +	if name != "" {
    +		d := l.Find(name)
    +		if d == nil {
    +			return nil, fmt.Errorf("device '%s' not found", name)
    +		}
    +		if c, ok := d.(*types.VirtualFloppy); ok {
    +			return c, nil
    +		}
    +		return nil, fmt.Errorf("%s is not a floppy device", name)
    +	}
    +
    +	c := l.SelectByType((*types.VirtualFloppy)(nil))
    +	if len(c) == 0 {
    +		return nil, errors.New("no floppy device found")
    +	}
    +
    +	return c[0].(*types.VirtualFloppy), nil
    +}
    +
    +// CreateFloppy creates a new VirtualFloppy device which can be added to a VM.
    +func (l VirtualDeviceList) CreateFloppy() (*types.VirtualFloppy, error) {
    +	device := &types.VirtualFloppy{}
    +
    +	c := l.PickController((*types.VirtualSIOController)(nil))
    +	if c == nil {
    +		return nil, errors.New("no available SIO controller")
    +	}
    +
    +	l.AssignController(device, c)
    +
    +	l.setDefaultFloppyBacking(device)
    +
    +	device.Connectable = &types.VirtualDeviceConnectInfo{
    +		AllowGuestControl: true,
    +		Connected:         true,
    +		StartConnected:    true,
    +	}
    +
    +	return device, nil
    +}
    +
    +// InsertImg changes the floppy device backing to use the given img file.
    +func (l VirtualDeviceList) InsertImg(device *types.VirtualFloppy, img string) *types.VirtualFloppy {
    +	device.Backing = &types.VirtualFloppyImageBackingInfo{
    +		VirtualDeviceFileBackingInfo: types.VirtualDeviceFileBackingInfo{
    +			FileName: img,
    +		},
    +	}
    +
    +	return device
    +}
    +
    +// EjectImg removes the img file based backing and replaces with the default floppy backing.
    +func (l VirtualDeviceList) EjectImg(device *types.VirtualFloppy) *types.VirtualFloppy {
    +	l.setDefaultFloppyBacking(device)
    +	return device
    +}
    +
    +func (l VirtualDeviceList) setDefaultFloppyBacking(device *types.VirtualFloppy) {
    +	device.Backing = &types.VirtualFloppyDeviceBackingInfo{
    +		VirtualDeviceDeviceBackingInfo: types.VirtualDeviceDeviceBackingInfo{
    +			DeviceName:    fmt.Sprintf("%s-%d", DeviceTypeFloppy, device.UnitNumber),
    +			UseAutoDetect: types.NewBool(false),
    +		},
    +	}
    +}
    +
    +// FindSerialPort finds a serial port device with the given name, defaulting to the first serial port device if any.
    +func (l VirtualDeviceList) FindSerialPort(name string) (*types.VirtualSerialPort, error) {
    +	if name != "" {
    +		d := l.Find(name)
    +		if d == nil {
    +			return nil, fmt.Errorf("device '%s' not found", name)
    +		}
    +		if c, ok := d.(*types.VirtualSerialPort); ok {
    +			return c, nil
    +		}
    +		return nil, fmt.Errorf("%s is not a serial port device", name)
    +	}
    +
    +	c := l.SelectByType((*types.VirtualSerialPort)(nil))
    +	if len(c) == 0 {
    +		return nil, errors.New("no serial port device found")
    +	}
    +
    +	return c[0].(*types.VirtualSerialPort), nil
    +}
    +
    +// CreateSerialPort creates a new VirtualSerialPort device which can be added to a VM.
    +func (l VirtualDeviceList) CreateSerialPort() (*types.VirtualSerialPort, error) {
    +	device := &types.VirtualSerialPort{
    +		YieldOnPoll: true,
    +	}
    +
    +	c := l.PickController((*types.VirtualSIOController)(nil))
    +	if c == nil {
    +		return nil, errors.New("no available SIO controller")
    +	}
    +
    +	l.AssignController(device, c)
    +
    +	l.setDefaultSerialPortBacking(device)
    +
    +	return device, nil
    +}
    +
    +// ConnectSerialPort connects a serial port to a server or client uri.
    +func (l VirtualDeviceList) ConnectSerialPort(device *types.VirtualSerialPort, uri string, client bool, proxyuri string) *types.VirtualSerialPort {
    +	if strings.HasPrefix(uri, "[") {
    +		device.Backing = &types.VirtualSerialPortFileBackingInfo{
    +			VirtualDeviceFileBackingInfo: types.VirtualDeviceFileBackingInfo{
    +				FileName: uri,
    +			},
    +		}
    +
    +		return device
    +	}
    +
    +	direction := types.VirtualDeviceURIBackingOptionDirectionServer
    +	if client {
    +		direction = types.VirtualDeviceURIBackingOptionDirectionClient
    +	}
    +
    +	device.Backing = &types.VirtualSerialPortURIBackingInfo{
    +		VirtualDeviceURIBackingInfo: types.VirtualDeviceURIBackingInfo{
    +			Direction:  string(direction),
    +			ServiceURI: uri,
    +			ProxyURI:   proxyuri,
    +		},
    +	}
    +
    +	return device
    +}
    +
    +// DisconnectSerialPort disconnects the serial port backing.
    +func (l VirtualDeviceList) DisconnectSerialPort(device *types.VirtualSerialPort) *types.VirtualSerialPort {
    +	l.setDefaultSerialPortBacking(device)
    +	return device
    +}
    +
    +func (l VirtualDeviceList) setDefaultSerialPortBacking(device *types.VirtualSerialPort) {
    +	device.Backing = &types.VirtualSerialPortURIBackingInfo{
    +		VirtualDeviceURIBackingInfo: types.VirtualDeviceURIBackingInfo{
    +			Direction:  "client",
    +			ServiceURI: "localhost:0",
    +		},
    +	}
    +}
    +
    +// CreateEthernetCard creates a new VirtualEthernetCard of the given name name and initialized with the given backing.
    +func (l VirtualDeviceList) CreateEthernetCard(name string, backing types.BaseVirtualDeviceBackingInfo) (types.BaseVirtualDevice, error) {
    +	ctypes := EthernetCardTypes()
    +
    +	if name == "" {
    +		name = ctypes.deviceName(ctypes[0])
    +	}
    +
    +	found := ctypes.Select(func(device types.BaseVirtualDevice) bool {
    +		return l.deviceName(device) == name
    +	})
    +
    +	if len(found) == 0 {
    +		return nil, fmt.Errorf("unknown ethernet card type '%s'", name)
    +	}
    +
    +	c, ok := found[0].(types.BaseVirtualEthernetCard)
    +	if !ok {
    +		return nil, fmt.Errorf("invalid ethernet card type '%s'", name)
    +	}
    +
    +	c.GetVirtualEthernetCard().Backing = backing
    +
    +	return c.(types.BaseVirtualDevice), nil
    +}
    +
    +// PrimaryMacAddress returns the MacAddress field of the primary VirtualEthernetCard
    +func (l VirtualDeviceList) PrimaryMacAddress() string {
    +	eth0 := l.Find("ethernet-0")
    +
    +	if eth0 == nil {
    +		return ""
    +	}
    +
    +	return eth0.(types.BaseVirtualEthernetCard).GetVirtualEthernetCard().MacAddress
    +}
    +
    +// convert a BaseVirtualDevice to a BaseVirtualMachineBootOptionsBootableDevice
    +var bootableDevices = map[string]func(device types.BaseVirtualDevice) types.BaseVirtualMachineBootOptionsBootableDevice{
    +	DeviceTypeNone: func(types.BaseVirtualDevice) types.BaseVirtualMachineBootOptionsBootableDevice {
    +		return &types.VirtualMachineBootOptionsBootableDevice{}
    +	},
    +	DeviceTypeCdrom: func(types.BaseVirtualDevice) types.BaseVirtualMachineBootOptionsBootableDevice {
    +		return &types.VirtualMachineBootOptionsBootableCdromDevice{}
    +	},
    +	DeviceTypeDisk: func(d types.BaseVirtualDevice) types.BaseVirtualMachineBootOptionsBootableDevice {
    +		return &types.VirtualMachineBootOptionsBootableDiskDevice{
    +			DeviceKey: d.GetVirtualDevice().Key,
    +		}
    +	},
    +	DeviceTypeEthernet: func(d types.BaseVirtualDevice) types.BaseVirtualMachineBootOptionsBootableDevice {
    +		return &types.VirtualMachineBootOptionsBootableEthernetDevice{
    +			DeviceKey: d.GetVirtualDevice().Key,
    +		}
    +	},
    +	DeviceTypeFloppy: func(types.BaseVirtualDevice) types.BaseVirtualMachineBootOptionsBootableDevice {
    +		return &types.VirtualMachineBootOptionsBootableFloppyDevice{}
    +	},
    +}
    +
    +// BootOrder returns a list of devices which can be used to set boot order via VirtualMachine.SetBootOptions.
    +// The order can be any of "ethernet", "cdrom", "floppy" or "disk" or by specific device name.
    +// A value of "-" will clear the existing boot order on the VC/ESX side.
    +func (l VirtualDeviceList) BootOrder(order []string) []types.BaseVirtualMachineBootOptionsBootableDevice {
    +	var devices []types.BaseVirtualMachineBootOptionsBootableDevice
    +
    +	for _, name := range order {
    +		if kind, ok := bootableDevices[name]; ok {
    +			if name == DeviceTypeNone {
    +				// Not covered in the API docs, nor obvious, but this clears the boot order on the VC/ESX side.
    +				devices = append(devices, new(types.VirtualMachineBootOptionsBootableDevice))
    +				continue
    +			}
    +
    +			for _, device := range l {
    +				if l.Type(device) == name {
    +					devices = append(devices, kind(device))
    +				}
    +			}
    +			continue
    +		}
    +
    +		if d := l.Find(name); d != nil {
    +			if kind, ok := bootableDevices[l.Type(d)]; ok {
    +				devices = append(devices, kind(d))
    +			}
    +		}
    +	}
    +
    +	return devices
    +}
    +
    +// SelectBootOrder returns an ordered list of devices matching the given bootable device order
    +func (l VirtualDeviceList) SelectBootOrder(order []types.BaseVirtualMachineBootOptionsBootableDevice) VirtualDeviceList {
    +	var devices VirtualDeviceList
    +
    +	for _, bd := range order {
    +		for _, device := range l {
    +			if kind, ok := bootableDevices[l.Type(device)]; ok {
    +				if reflect.DeepEqual(kind(device), bd) {
    +					devices = append(devices, device)
    +				}
    +			}
    +		}
    +	}
    +
    +	return devices
    +}
    +
    +// TypeName returns the vmodl type name of the device
    +func (l VirtualDeviceList) TypeName(device types.BaseVirtualDevice) string {
    +	dtype := reflect.TypeOf(device)
    +	if dtype == nil {
    +		return ""
    +	}
    +	return dtype.Elem().Name()
    +}
    +
    +var deviceNameRegexp = regexp.MustCompile(`(?:Virtual)?(?:Machine)?(\w+?)(?:Card|EthernetCard|Device|Controller)?$`)
    +
    +func (l VirtualDeviceList) deviceName(device types.BaseVirtualDevice) string {
    +	name := "device"
    +	typeName := l.TypeName(device)
    +
    +	m := deviceNameRegexp.FindStringSubmatch(typeName)
    +	if len(m) == 2 {
    +		name = strings.ToLower(m[1])
    +	}
    +
    +	return name
    +}
    +
    +// Type returns a human-readable name for the given device
    +func (l VirtualDeviceList) Type(device types.BaseVirtualDevice) string {
    +	switch device.(type) {
    +	case types.BaseVirtualEthernetCard:
    +		return DeviceTypeEthernet
    +	case *types.ParaVirtualSCSIController:
    +		return "pvscsi"
    +	case *types.VirtualLsiLogicSASController:
    +		return "lsilogic-sas"
    +	case *types.VirtualNVMEController:
    +		return "nvme"
    +	default:
    +		return l.deviceName(device)
    +	}
    +}
    +
    +// Name returns a stable, human-readable name for the given device
    +func (l VirtualDeviceList) Name(device types.BaseVirtualDevice) string {
    +	var key string
    +	var UnitNumber int32
    +	d := device.GetVirtualDevice()
    +	if d.UnitNumber != nil {
    +		UnitNumber = *d.UnitNumber
    +	}
    +
    +	dtype := l.Type(device)
    +	switch dtype {
    +	case DeviceTypeEthernet:
    +		key = fmt.Sprintf("%d", UnitNumber-7)
    +	case DeviceTypeDisk:
    +		key = fmt.Sprintf("%d-%d", d.ControllerKey, UnitNumber)
    +	default:
    +		key = fmt.Sprintf("%d", d.Key)
    +	}
    +
    +	return fmt.Sprintf("%s-%s", dtype, key)
    +}
    +
    +// ConfigSpec creates a virtual machine configuration spec for
    +// the specified operation, for the list of devices in the device list.
    +func (l VirtualDeviceList) ConfigSpec(op types.VirtualDeviceConfigSpecOperation) ([]types.BaseVirtualDeviceConfigSpec, error) {
    +	var fop types.VirtualDeviceConfigSpecFileOperation
    +	switch op {
    +	case types.VirtualDeviceConfigSpecOperationAdd:
    +		fop = types.VirtualDeviceConfigSpecFileOperationCreate
    +	case types.VirtualDeviceConfigSpecOperationEdit:
    +		fop = types.VirtualDeviceConfigSpecFileOperationReplace
    +	case types.VirtualDeviceConfigSpecOperationRemove:
    +		fop = types.VirtualDeviceConfigSpecFileOperationDestroy
    +	default:
    +		panic("unknown op")
    +	}
    +
    +	var res []types.BaseVirtualDeviceConfigSpec
    +	for _, device := range l {
    +		config := &types.VirtualDeviceConfigSpec{
    +			Device:    device,
    +			Operation: op,
    +		}
    +
    +		if disk, ok := device.(*types.VirtualDisk); ok {
    +			config.FileOperation = fop
    +
    +			// Special case to attach an existing disk
    +			if op == types.VirtualDeviceConfigSpecOperationAdd && disk.CapacityInKB == 0 {
    +				childDisk := false
    +				if b, ok := disk.Backing.(*types.VirtualDiskFlatVer2BackingInfo); ok {
    +					childDisk = b.Parent != nil
    +				}
    +
    +				if !childDisk {
    +					// Existing disk, clear file operation
    +					config.FileOperation = ""
    +				}
    +			}
    +		}
    +
    +		res = append(res, config)
    +	}
    +
    +	return res, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_disk_manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_disk_manager.go
    new file mode 100644
    index 00000000000..72439caf9c0
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_disk_manager.go
    @@ -0,0 +1,227 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type VirtualDiskManager struct {
    +	Common
    +}
    +
    +func NewVirtualDiskManager(c *vim25.Client) *VirtualDiskManager {
    +	m := VirtualDiskManager{
    +		Common: NewCommon(c, *c.ServiceContent.VirtualDiskManager),
    +	}
    +
    +	return &m
    +}
    +
    +// CopyVirtualDisk copies a virtual disk, performing conversions as specified in the spec.
    +func (m VirtualDiskManager) CopyVirtualDisk(
    +	ctx context.Context,
    +	sourceName string, sourceDatacenter *Datacenter,
    +	destName string, destDatacenter *Datacenter,
    +	destSpec *types.VirtualDiskSpec, force bool) (*Task, error) {
    +
    +	req := types.CopyVirtualDisk_Task{
    +		This:       m.Reference(),
    +		SourceName: sourceName,
    +		DestName:   destName,
    +		DestSpec:   destSpec,
    +		Force:      types.NewBool(force),
    +	}
    +
    +	if sourceDatacenter != nil {
    +		ref := sourceDatacenter.Reference()
    +		req.SourceDatacenter = &ref
    +	}
    +
    +	if destDatacenter != nil {
    +		ref := destDatacenter.Reference()
    +		req.DestDatacenter = &ref
    +	}
    +
    +	res, err := methods.CopyVirtualDisk_Task(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(m.c, res.Returnval), nil
    +}
    +
    +// CreateVirtualDisk creates a new virtual disk.
    +func (m VirtualDiskManager) CreateVirtualDisk(
    +	ctx context.Context,
    +	name string, datacenter *Datacenter,
    +	spec types.BaseVirtualDiskSpec) (*Task, error) {
    +
    +	req := types.CreateVirtualDisk_Task{
    +		This: m.Reference(),
    +		Name: name,
    +		Spec: spec,
    +	}
    +
    +	if datacenter != nil {
    +		ref := datacenter.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.CreateVirtualDisk_Task(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(m.c, res.Returnval), nil
    +}
    +
    +// MoveVirtualDisk moves a virtual disk.
    +func (m VirtualDiskManager) MoveVirtualDisk(
    +	ctx context.Context,
    +	sourceName string, sourceDatacenter *Datacenter,
    +	destName string, destDatacenter *Datacenter,
    +	force bool) (*Task, error) {
    +	req := types.MoveVirtualDisk_Task{
    +		This:       m.Reference(),
    +		SourceName: sourceName,
    +		DestName:   destName,
    +		Force:      types.NewBool(force),
    +	}
    +
    +	if sourceDatacenter != nil {
    +		ref := sourceDatacenter.Reference()
    +		req.SourceDatacenter = &ref
    +	}
    +
    +	if destDatacenter != nil {
    +		ref := destDatacenter.Reference()
    +		req.DestDatacenter = &ref
    +	}
    +
    +	res, err := methods.MoveVirtualDisk_Task(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(m.c, res.Returnval), nil
    +}
    +
    +// DeleteVirtualDisk deletes a virtual disk.
    +func (m VirtualDiskManager) DeleteVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) {
    +	req := types.DeleteVirtualDisk_Task{
    +		This: m.Reference(),
    +		Name: name,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.DeleteVirtualDisk_Task(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(m.c, res.Returnval), nil
    +}
    +
    +// InflateVirtualDisk inflates a virtual disk.
    +func (m VirtualDiskManager) InflateVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) {
    +	req := types.InflateVirtualDisk_Task{
    +		This: m.Reference(),
    +		Name: name,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.InflateVirtualDisk_Task(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(m.c, res.Returnval), nil
    +}
    +
    +// ShrinkVirtualDisk shrinks a virtual disk.
    +func (m VirtualDiskManager) ShrinkVirtualDisk(ctx context.Context, name string, dc *Datacenter, copy *bool) (*Task, error) {
    +	req := types.ShrinkVirtualDisk_Task{
    +		This: m.Reference(),
    +		Name: name,
    +		Copy: copy,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.ShrinkVirtualDisk_Task(ctx, m.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(m.c, res.Returnval), nil
    +}
    +
    +// Queries virtual disk uuid
    +func (m VirtualDiskManager) QueryVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter) (string, error) {
    +	req := types.QueryVirtualDiskUuid{
    +		This: m.Reference(),
    +		Name: name,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := methods.QueryVirtualDiskUuid(ctx, m.c, &req)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	if res == nil {
    +		return "", nil
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (m VirtualDiskManager) SetVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter, uuid string) error {
    +	req := types.SetVirtualDiskUuid{
    +		This: m.Reference(),
    +		Name: name,
    +		Uuid: uuid,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	_, err := methods.SetVirtualDiskUuid(ctx, m.c, &req)
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_disk_manager_internal.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_disk_manager_internal.go
    new file mode 100644
    index 00000000000..faa9ecad5c3
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_disk_manager_internal.go
    @@ -0,0 +1,166 @@
    +/*
    +Copyright (c) 2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"reflect"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +func init() {
    +	types.Add("ArrayOfVirtualDiskInfo", reflect.TypeOf((*arrayOfVirtualDiskInfo)(nil)).Elem())
    +
    +	types.Add("VirtualDiskInfo", reflect.TypeOf((*VirtualDiskInfo)(nil)).Elem())
    +}
    +
    +type arrayOfVirtualDiskInfo struct {
    +	VirtualDiskInfo []VirtualDiskInfo `xml:"VirtualDiskInfo,omitempty"`
    +}
    +
    +type queryVirtualDiskInfoTaskRequest struct {
    +	This           types.ManagedObjectReference  `xml:"_this"`
    +	Name           string                        `xml:"name"`
    +	Datacenter     *types.ManagedObjectReference `xml:"datacenter,omitempty"`
    +	IncludeParents bool                          `xml:"includeParents"`
    +}
    +
    +type queryVirtualDiskInfoTaskResponse struct {
    +	Returnval types.ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type queryVirtualDiskInfoTaskBody struct {
    +	Req         *queryVirtualDiskInfoTaskRequest  `xml:"urn:internalvim25 QueryVirtualDiskInfo_Task,omitempty"`
    +	Res         *queryVirtualDiskInfoTaskResponse `xml:"urn:vim25 QueryVirtualDiskInfo_TaskResponse,omitempty"`
    +	InternalRes *queryVirtualDiskInfoTaskResponse `xml:"urn:internalvim25 QueryVirtualDiskInfo_TaskResponse,omitempty"`
    +	Err         *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *queryVirtualDiskInfoTaskBody) Fault() *soap.Fault { return b.Err }
    +
    +func queryVirtualDiskInfoTask(ctx context.Context, r soap.RoundTripper, req *queryVirtualDiskInfoTaskRequest) (*queryVirtualDiskInfoTaskResponse, error) {
    +	var reqBody, resBody queryVirtualDiskInfoTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	if resBody.Res != nil {
    +		return resBody.Res, nil
    +	}
    +
    +	return resBody.InternalRes, nil
    +}
    +
    +type VirtualDiskInfo struct {
    +	Name     string `xml:"unit>name"`
    +	DiskType string `xml:"diskType"`
    +	Parent   string `xml:"parent,omitempty"`
    +}
    +
    +func (m VirtualDiskManager) QueryVirtualDiskInfo(ctx context.Context, name string, dc *Datacenter, includeParents bool) ([]VirtualDiskInfo, error) {
    +	req := queryVirtualDiskInfoTaskRequest{
    +		This:           m.Reference(),
    +		Name:           name,
    +		IncludeParents: includeParents,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.Datacenter = &ref
    +	}
    +
    +	res, err := queryVirtualDiskInfoTask(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	info, err := NewTask(m.Client(), res.Returnval).WaitForResult(ctx, nil)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return info.Result.(arrayOfVirtualDiskInfo).VirtualDiskInfo, nil
    +}
    +
    +type createChildDiskTaskRequest struct {
    +	This             types.ManagedObjectReference  `xml:"_this"`
    +	ChildName        string                        `xml:"childName"`
    +	ChildDatacenter  *types.ManagedObjectReference `xml:"childDatacenter,omitempty"`
    +	ParentName       string                        `xml:"parentName"`
    +	ParentDatacenter *types.ManagedObjectReference `xml:"parentDatacenter,omitempty"`
    +	IsLinkedClone    bool                          `xml:"isLinkedClone"`
    +}
    +
    +type createChildDiskTaskResponse struct {
    +	Returnval types.ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type createChildDiskTaskBody struct {
    +	Req         *createChildDiskTaskRequest  `xml:"urn:internalvim25 CreateChildDisk_Task,omitempty"`
    +	Res         *createChildDiskTaskResponse `xml:"urn:vim25 CreateChildDisk_TaskResponse,omitempty"`
    +	InternalRes *createChildDiskTaskResponse `xml:"urn:internalvim25 CreateChildDisk_TaskResponse,omitempty"`
    +	Err         *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *createChildDiskTaskBody) Fault() *soap.Fault { return b.Err }
    +
    +func createChildDiskTask(ctx context.Context, r soap.RoundTripper, req *createChildDiskTaskRequest) (*createChildDiskTaskResponse, error) {
    +	var reqBody, resBody createChildDiskTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	if resBody.Res != nil {
    +		return resBody.Res, nil // vim-version <= 6.5
    +	}
    +
    +	return resBody.InternalRes, nil // vim-version >= 6.7
    +}
    +
    +func (m VirtualDiskManager) CreateChildDisk(ctx context.Context, parent string, pdc *Datacenter, name string, dc *Datacenter, linked bool) (*Task, error) {
    +	req := createChildDiskTaskRequest{
    +		This:          m.Reference(),
    +		ChildName:     name,
    +		ParentName:    parent,
    +		IsLinkedClone: linked,
    +	}
    +
    +	if dc != nil {
    +		ref := dc.Reference()
    +		req.ChildDatacenter = &ref
    +	}
    +
    +	if pdc != nil {
    +		ref := pdc.Reference()
    +		req.ParentDatacenter = &ref
    +	}
    +
    +	res, err := createChildDiskTask(ctx, m.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(m.Client(), res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_machine.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_machine.go
    new file mode 100644
    index 00000000000..511f5572357
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/virtual_machine.go
    @@ -0,0 +1,801 @@
    +/*
    +Copyright (c) 2015-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +import (
    +	"context"
    +	"errors"
    +	"fmt"
    +	"net"
    +	"path"
    +
    +	"github.com/vmware/govmomi/nfc"
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +const (
    +	PropRuntimePowerState = "summary.runtime.powerState"
    +)
    +
    +type VirtualMachine struct {
    +	Common
    +}
    +
    +func NewVirtualMachine(c *vim25.Client, ref types.ManagedObjectReference) *VirtualMachine {
    +	return &VirtualMachine{
    +		Common: NewCommon(c, ref),
    +	}
    +}
    +
    +func (v VirtualMachine) PowerState(ctx context.Context) (types.VirtualMachinePowerState, error) {
    +	var o mo.VirtualMachine
    +
    +	err := v.Properties(ctx, v.Reference(), []string{PropRuntimePowerState}, &o)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return o.Summary.Runtime.PowerState, nil
    +}
    +
    +func (v VirtualMachine) PowerOn(ctx context.Context) (*Task, error) {
    +	req := types.PowerOnVM_Task{
    +		This: v.Reference(),
    +	}
    +
    +	res, err := methods.PowerOnVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) PowerOff(ctx context.Context) (*Task, error) {
    +	req := types.PowerOffVM_Task{
    +		This: v.Reference(),
    +	}
    +
    +	res, err := methods.PowerOffVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) Reset(ctx context.Context) (*Task, error) {
    +	req := types.ResetVM_Task{
    +		This: v.Reference(),
    +	}
    +
    +	res, err := methods.ResetVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) Suspend(ctx context.Context) (*Task, error) {
    +	req := types.SuspendVM_Task{
    +		This: v.Reference(),
    +	}
    +
    +	res, err := methods.SuspendVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) ShutdownGuest(ctx context.Context) error {
    +	req := types.ShutdownGuest{
    +		This: v.Reference(),
    +	}
    +
    +	_, err := methods.ShutdownGuest(ctx, v.c, &req)
    +	return err
    +}
    +
    +func (v VirtualMachine) RebootGuest(ctx context.Context) error {
    +	req := types.RebootGuest{
    +		This: v.Reference(),
    +	}
    +
    +	_, err := methods.RebootGuest(ctx, v.c, &req)
    +	return err
    +}
    +
    +func (v VirtualMachine) Destroy(ctx context.Context) (*Task, error) {
    +	req := types.Destroy_Task{
    +		This: v.Reference(),
    +	}
    +
    +	res, err := methods.Destroy_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) Clone(ctx context.Context, folder *Folder, name string, config types.VirtualMachineCloneSpec) (*Task, error) {
    +	req := types.CloneVM_Task{
    +		This:   v.Reference(),
    +		Folder: folder.Reference(),
    +		Name:   name,
    +		Spec:   config,
    +	}
    +
    +	res, err := methods.CloneVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) Customize(ctx context.Context, spec types.CustomizationSpec) (*Task, error) {
    +	req := types.CustomizeVM_Task{
    +		This: v.Reference(),
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.CustomizeVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) Relocate(ctx context.Context, config types.VirtualMachineRelocateSpec, priority types.VirtualMachineMovePriority) (*Task, error) {
    +	req := types.RelocateVM_Task{
    +		This:     v.Reference(),
    +		Spec:     config,
    +		Priority: priority,
    +	}
    +
    +	res, err := methods.RelocateVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) Reconfigure(ctx context.Context, config types.VirtualMachineConfigSpec) (*Task, error) {
    +	req := types.ReconfigVM_Task{
    +		This: v.Reference(),
    +		Spec: config,
    +	}
    +
    +	res, err := methods.ReconfigVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) WaitForIP(ctx context.Context) (string, error) {
    +	var ip string
    +
    +	p := property.DefaultCollector(v.c)
    +	err := property.Wait(ctx, p, v.Reference(), []string{"guest.ipAddress"}, func(pc []types.PropertyChange) bool {
    +		for _, c := range pc {
    +			if c.Name != "guest.ipAddress" {
    +				continue
    +			}
    +			if c.Op != types.PropertyChangeOpAssign {
    +				continue
    +			}
    +			if c.Val == nil {
    +				continue
    +			}
    +
    +			ip = c.Val.(string)
    +			return true
    +		}
    +
    +		return false
    +	})
    +
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return ip, nil
    +}
    +
    +// WaitForNetIP waits for the VM guest.net property to report an IP address for all VM NICs.
    +// Only consider IPv4 addresses if the v4 param is true.
    +// By default, wait for all NICs to get an IP address, unless 1 or more device is given.
    +// A device can be specified by the MAC address or the device name, e.g. "ethernet-0".
    +// Returns a map with MAC address as the key and IP address list as the value.
    +func (v VirtualMachine) WaitForNetIP(ctx context.Context, v4 bool, device ...string) (map[string][]string, error) {
    +	macs := make(map[string][]string)
    +	eths := make(map[string]string)
    +
    +	p := property.DefaultCollector(v.c)
    +
    +	// Wait for all NICs to have a MacAddress, which may not be generated yet.
    +	err := property.Wait(ctx, p, v.Reference(), []string{"config.hardware.device"}, func(pc []types.PropertyChange) bool {
    +		for _, c := range pc {
    +			if c.Op != types.PropertyChangeOpAssign {
    +				continue
    +			}
    +
    +			devices := VirtualDeviceList(c.Val.(types.ArrayOfVirtualDevice).VirtualDevice)
    +			for _, d := range devices {
    +				if nic, ok := d.(types.BaseVirtualEthernetCard); ok {
    +					mac := nic.GetVirtualEthernetCard().MacAddress
    +					if mac == "" {
    +						return false
    +					}
    +					macs[mac] = nil
    +					eths[devices.Name(d)] = mac
    +				}
    +			}
    +		}
    +
    +		return true
    +	})
    +
    +	if len(device) != 0 {
    +		// Only wait for specific NIC(s)
    +		macs = make(map[string][]string)
    +		for _, mac := range device {
    +			if eth, ok := eths[mac]; ok {
    +				mac = eth // device name, e.g. "ethernet-0"
    +			}
    +			macs[mac] = nil
    +		}
    +	}
    +
    +	err = property.Wait(ctx, p, v.Reference(), []string{"guest.net"}, func(pc []types.PropertyChange) bool {
    +		for _, c := range pc {
    +			if c.Op != types.PropertyChangeOpAssign {
    +				continue
    +			}
    +
    +			nics := c.Val.(types.ArrayOfGuestNicInfo).GuestNicInfo
    +			for _, nic := range nics {
    +				mac := nic.MacAddress
    +				if mac == "" || nic.IpConfig == nil {
    +					continue
    +				}
    +
    +				for _, ip := range nic.IpConfig.IpAddress {
    +					if _, ok := macs[mac]; !ok {
    +						continue // Ignore any that don't correspond to a VM device
    +					}
    +					if v4 && net.ParseIP(ip.IpAddress).To4() == nil {
    +						continue // Ignore non IPv4 address
    +					}
    +					macs[mac] = append(macs[mac], ip.IpAddress)
    +				}
    +			}
    +		}
    +
    +		for _, ips := range macs {
    +			if len(ips) == 0 {
    +				return false
    +			}
    +		}
    +
    +		return true
    +	})
    +
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return macs, nil
    +}
    +
    +// Device returns the VirtualMachine's config.hardware.device property.
    +func (v VirtualMachine) Device(ctx context.Context) (VirtualDeviceList, error) {
    +	var o mo.VirtualMachine
    +
    +	err := v.Properties(ctx, v.Reference(), []string{"config.hardware.device", "summary.runtime.connectionState"}, &o)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	// Quoting the SDK doc:
    +	//   The virtual machine configuration is not guaranteed to be available.
    +	//   For example, the configuration information would be unavailable if the server
    +	//   is unable to access the virtual machine files on disk, and is often also unavailable
    +	//   during the initial phases of virtual machine creation.
    +	if o.Config == nil {
    +		return nil, fmt.Errorf("%s Config is not available, connectionState=%s",
    +			v.Reference(), o.Summary.Runtime.ConnectionState)
    +	}
    +
    +	return VirtualDeviceList(o.Config.Hardware.Device), nil
    +}
    +
    +func (v VirtualMachine) HostSystem(ctx context.Context) (*HostSystem, error) {
    +	var o mo.VirtualMachine
    +
    +	err := v.Properties(ctx, v.Reference(), []string{"summary.runtime.host"}, &o)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	host := o.Summary.Runtime.Host
    +	if host == nil {
    +		return nil, errors.New("VM doesn't have a HostSystem")
    +	}
    +
    +	return NewHostSystem(v.c, *host), nil
    +}
    +
    +func (v VirtualMachine) ResourcePool(ctx context.Context) (*ResourcePool, error) {
    +	var o mo.VirtualMachine
    +
    +	err := v.Properties(ctx, v.Reference(), []string{"resourcePool"}, &o)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	rp := o.ResourcePool
    +	if rp == nil {
    +		return nil, errors.New("VM doesn't have a resourcePool")
    +	}
    +
    +	return NewResourcePool(v.c, *rp), nil
    +}
    +
    +func (v VirtualMachine) configureDevice(ctx context.Context, op types.VirtualDeviceConfigSpecOperation, fop types.VirtualDeviceConfigSpecFileOperation, devices ...types.BaseVirtualDevice) error {
    +	spec := types.VirtualMachineConfigSpec{}
    +
    +	for _, device := range devices {
    +		config := &types.VirtualDeviceConfigSpec{
    +			Device:    device,
    +			Operation: op,
    +		}
    +
    +		if disk, ok := device.(*types.VirtualDisk); ok {
    +			config.FileOperation = fop
    +
    +			// Special case to attach an existing disk
    +			if op == types.VirtualDeviceConfigSpecOperationAdd && disk.CapacityInKB == 0 {
    +				childDisk := false
    +				if b, ok := disk.Backing.(*types.VirtualDiskFlatVer2BackingInfo); ok {
    +					childDisk = b.Parent != nil
    +				}
    +
    +				if !childDisk {
    +					config.FileOperation = "" // existing disk
    +				}
    +			}
    +		}
    +
    +		spec.DeviceChange = append(spec.DeviceChange, config)
    +	}
    +
    +	task, err := v.Reconfigure(ctx, spec)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return task.Wait(ctx)
    +}
    +
    +// AddDevice adds the given devices to the VirtualMachine
    +func (v VirtualMachine) AddDevice(ctx context.Context, device ...types.BaseVirtualDevice) error {
    +	return v.configureDevice(ctx, types.VirtualDeviceConfigSpecOperationAdd, types.VirtualDeviceConfigSpecFileOperationCreate, device...)
    +}
    +
    +// EditDevice edits the given (existing) devices on the VirtualMachine
    +func (v VirtualMachine) EditDevice(ctx context.Context, device ...types.BaseVirtualDevice) error {
    +	return v.configureDevice(ctx, types.VirtualDeviceConfigSpecOperationEdit, types.VirtualDeviceConfigSpecFileOperationReplace, device...)
    +}
    +
    +// RemoveDevice removes the given devices on the VirtualMachine
    +func (v VirtualMachine) RemoveDevice(ctx context.Context, keepFiles bool, device ...types.BaseVirtualDevice) error {
    +	fop := types.VirtualDeviceConfigSpecFileOperationDestroy
    +	if keepFiles {
    +		fop = ""
    +	}
    +	return v.configureDevice(ctx, types.VirtualDeviceConfigSpecOperationRemove, fop, device...)
    +}
    +
    +// BootOptions returns the VirtualMachine's config.bootOptions property.
    +func (v VirtualMachine) BootOptions(ctx context.Context) (*types.VirtualMachineBootOptions, error) {
    +	var o mo.VirtualMachine
    +
    +	err := v.Properties(ctx, v.Reference(), []string{"config.bootOptions"}, &o)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return o.Config.BootOptions, nil
    +}
    +
    +// SetBootOptions reconfigures the VirtualMachine with the given options.
    +func (v VirtualMachine) SetBootOptions(ctx context.Context, options *types.VirtualMachineBootOptions) error {
    +	spec := types.VirtualMachineConfigSpec{}
    +
    +	spec.BootOptions = options
    +
    +	task, err := v.Reconfigure(ctx, spec)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return task.Wait(ctx)
    +}
    +
    +// Answer answers a pending question.
    +func (v VirtualMachine) Answer(ctx context.Context, id, answer string) error {
    +	req := types.AnswerVM{
    +		This:         v.Reference(),
    +		QuestionId:   id,
    +		AnswerChoice: answer,
    +	}
    +
    +	_, err := methods.AnswerVM(ctx, v.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (v VirtualMachine) AcquireTicket(ctx context.Context, kind string) (*types.VirtualMachineTicket, error) {
    +	req := types.AcquireTicket{
    +		This:       v.Reference(),
    +		TicketType: kind,
    +	}
    +
    +	res, err := methods.AcquireTicket(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +// CreateSnapshot creates a new snapshot of a virtual machine.
    +func (v VirtualMachine) CreateSnapshot(ctx context.Context, name string, description string, memory bool, quiesce bool) (*Task, error) {
    +	req := types.CreateSnapshot_Task{
    +		This:        v.Reference(),
    +		Name:        name,
    +		Description: description,
    +		Memory:      memory,
    +		Quiesce:     quiesce,
    +	}
    +
    +	res, err := methods.CreateSnapshot_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +// RemoveAllSnapshot removes all snapshots of a virtual machine
    +func (v VirtualMachine) RemoveAllSnapshot(ctx context.Context, consolidate *bool) (*Task, error) {
    +	req := types.RemoveAllSnapshots_Task{
    +		This:        v.Reference(),
    +		Consolidate: consolidate,
    +	}
    +
    +	res, err := methods.RemoveAllSnapshots_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +type snapshotMap map[string][]types.ManagedObjectReference
    +
    +func (m snapshotMap) add(parent string, tree []types.VirtualMachineSnapshotTree) {
    +	for i, st := range tree {
    +		sname := st.Name
    +		names := []string{sname, st.Snapshot.Value}
    +
    +		if parent != "" {
    +			sname = path.Join(parent, sname)
    +			// Add full path as an option to resolve duplicate names
    +			names = append(names, sname)
    +		}
    +
    +		for _, name := range names {
    +			m[name] = append(m[name], tree[i].Snapshot)
    +		}
    +
    +		m.add(sname, st.ChildSnapshotList)
    +	}
    +}
    +
    +// FindSnapshot supports snapshot lookup by name, where name can be:
    +// 1) snapshot ManagedObjectReference.Value (unique)
    +// 2) snapshot name (may not be unique)
    +// 3) snapshot tree path (may not be unique)
    +func (v VirtualMachine) FindSnapshot(ctx context.Context, name string) (*types.ManagedObjectReference, error) {
    +	var o mo.VirtualMachine
    +
    +	err := v.Properties(ctx, v.Reference(), []string{"snapshot"}, &o)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	if o.Snapshot == nil || len(o.Snapshot.RootSnapshotList) == 0 {
    +		return nil, errors.New("No snapshots for this VM")
    +	}
    +
    +	m := make(snapshotMap)
    +	m.add("", o.Snapshot.RootSnapshotList)
    +
    +	s := m[name]
    +	switch len(s) {
    +	case 0:
    +		return nil, fmt.Errorf("snapshot %q not found", name)
    +	case 1:
    +		return &s[0], nil
    +	default:
    +		return nil, fmt.Errorf("%q resolves to %d snapshots", name, len(s))
    +	}
    +}
    +
    +// RemoveSnapshot removes a named snapshot
    +func (v VirtualMachine) RemoveSnapshot(ctx context.Context, name string, removeChildren bool, consolidate *bool) (*Task, error) {
    +	snapshot, err := v.FindSnapshot(ctx, name)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	req := types.RemoveSnapshot_Task{
    +		This:           snapshot.Reference(),
    +		RemoveChildren: removeChildren,
    +		Consolidate:    consolidate,
    +	}
    +
    +	res, err := methods.RemoveSnapshot_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +// RevertToCurrentSnapshot reverts to the current snapshot
    +func (v VirtualMachine) RevertToCurrentSnapshot(ctx context.Context, suppressPowerOn bool) (*Task, error) {
    +	req := types.RevertToCurrentSnapshot_Task{
    +		This:            v.Reference(),
    +		SuppressPowerOn: types.NewBool(suppressPowerOn),
    +	}
    +
    +	res, err := methods.RevertToCurrentSnapshot_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +// RevertToSnapshot reverts to a named snapshot
    +func (v VirtualMachine) RevertToSnapshot(ctx context.Context, name string, suppressPowerOn bool) (*Task, error) {
    +	snapshot, err := v.FindSnapshot(ctx, name)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	req := types.RevertToSnapshot_Task{
    +		This:            snapshot.Reference(),
    +		SuppressPowerOn: types.NewBool(suppressPowerOn),
    +	}
    +
    +	res, err := methods.RevertToSnapshot_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +// IsToolsRunning returns true if VMware Tools is currently running in the guest OS, and false otherwise.
    +func (v VirtualMachine) IsToolsRunning(ctx context.Context) (bool, error) {
    +	var o mo.VirtualMachine
    +
    +	err := v.Properties(ctx, v.Reference(), []string{"guest.toolsRunningStatus"}, &o)
    +	if err != nil {
    +		return false, err
    +	}
    +
    +	return o.Guest.ToolsRunningStatus == string(types.VirtualMachineToolsRunningStatusGuestToolsRunning), nil
    +}
    +
    +// Wait for the VirtualMachine to change to the desired power state.
    +func (v VirtualMachine) WaitForPowerState(ctx context.Context, state types.VirtualMachinePowerState) error {
    +	p := property.DefaultCollector(v.c)
    +	err := property.Wait(ctx, p, v.Reference(), []string{PropRuntimePowerState}, func(pc []types.PropertyChange) bool {
    +		for _, c := range pc {
    +			if c.Name != PropRuntimePowerState {
    +				continue
    +			}
    +			if c.Val == nil {
    +				continue
    +			}
    +
    +			ps := c.Val.(types.VirtualMachinePowerState)
    +			if ps == state {
    +				return true
    +			}
    +		}
    +		return false
    +	})
    +
    +	return err
    +}
    +
    +func (v VirtualMachine) MarkAsTemplate(ctx context.Context) error {
    +	req := types.MarkAsTemplate{
    +		This: v.Reference(),
    +	}
    +
    +	_, err := methods.MarkAsTemplate(ctx, v.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (v VirtualMachine) MarkAsVirtualMachine(ctx context.Context, pool ResourcePool, host *HostSystem) error {
    +	req := types.MarkAsVirtualMachine{
    +		This: v.Reference(),
    +		Pool: pool.Reference(),
    +	}
    +
    +	if host != nil {
    +		ref := host.Reference()
    +		req.Host = &ref
    +	}
    +
    +	_, err := methods.MarkAsVirtualMachine(ctx, v.c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (v VirtualMachine) Migrate(ctx context.Context, pool *ResourcePool, host *HostSystem, priority types.VirtualMachineMovePriority, state types.VirtualMachinePowerState) (*Task, error) {
    +	req := types.MigrateVM_Task{
    +		This:     v.Reference(),
    +		Priority: priority,
    +		State:    state,
    +	}
    +
    +	if pool != nil {
    +		ref := pool.Reference()
    +		req.Pool = &ref
    +	}
    +
    +	if host != nil {
    +		ref := host.Reference()
    +		req.Host = &ref
    +	}
    +
    +	res, err := methods.MigrateVM_Task(ctx, v.c, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) Unregister(ctx context.Context) error {
    +	req := types.UnregisterVM{
    +		This: v.Reference(),
    +	}
    +
    +	_, err := methods.UnregisterVM(ctx, v.Client(), &req)
    +	return err
    +}
    +
    +// QueryEnvironmentBrowser is a helper to get the environmentBrowser property.
    +func (v VirtualMachine) QueryConfigTarget(ctx context.Context) (*types.ConfigTarget, error) {
    +	var vm mo.VirtualMachine
    +
    +	err := v.Properties(ctx, v.Reference(), []string{"environmentBrowser"}, &vm)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	req := types.QueryConfigTarget{
    +		This: vm.EnvironmentBrowser,
    +	}
    +
    +	res, err := methods.QueryConfigTarget(ctx, v.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (v VirtualMachine) MountToolsInstaller(ctx context.Context) error {
    +	req := types.MountToolsInstaller{
    +		This: v.Reference(),
    +	}
    +
    +	_, err := methods.MountToolsInstaller(ctx, v.Client(), &req)
    +	return err
    +}
    +
    +func (v VirtualMachine) UnmountToolsInstaller(ctx context.Context) error {
    +	req := types.UnmountToolsInstaller{
    +		This: v.Reference(),
    +	}
    +
    +	_, err := methods.UnmountToolsInstaller(ctx, v.Client(), &req)
    +	return err
    +}
    +
    +func (v VirtualMachine) UpgradeTools(ctx context.Context, options string) (*Task, error) {
    +	req := types.UpgradeTools_Task{
    +		This:             v.Reference(),
    +		InstallerOptions: options,
    +	}
    +
    +	res, err := methods.UpgradeTools_Task(ctx, v.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) Export(ctx context.Context) (*nfc.Lease, error) {
    +	req := types.ExportVm{
    +		This: v.Reference(),
    +	}
    +
    +	res, err := methods.ExportVm(ctx, v.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return nfc.NewLease(v.c, res.Returnval), nil
    +}
    +
    +func (v VirtualMachine) UpgradeVM(ctx context.Context, version string) (*Task, error) {
    +	req := types.UpgradeVM_Task{
    +		This:    v.Reference(),
    +		Version: version,
    +	}
    +
    +	res, err := methods.UpgradeVM_Task(ctx, v.Client(), &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return NewTask(v.c, res.Returnval), nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/vmware_distributed_virtual_switch.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/vmware_distributed_virtual_switch.go
    new file mode 100644
    index 00000000000..f6caf987083
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/object/vmware_distributed_virtual_switch.go
    @@ -0,0 +1,21 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package object
    +
    +type VmwareDistributedVirtualSwitch struct {
    +	DistributedVirtualSwitch
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/collector.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/collector.go
    new file mode 100644
    index 00000000000..ccf712cf9d3
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/collector.go
    @@ -0,0 +1,205 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package property
    +
    +import (
    +	"context"
    +	"errors"
    +
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// Collector models the PropertyCollector managed object.
    +//
    +// For more information, see:
    +// http://pubs.vmware.com/vsphere-60/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc%2Fvmodl.query.PropertyCollector.html
    +//
    +type Collector struct {
    +	roundTripper soap.RoundTripper
    +	reference    types.ManagedObjectReference
    +}
    +
    +// DefaultCollector returns the session's default property collector.
    +func DefaultCollector(c *vim25.Client) *Collector {
    +	p := Collector{
    +		roundTripper: c,
    +		reference:    c.ServiceContent.PropertyCollector,
    +	}
    +
    +	return &p
    +}
    +
    +func (p Collector) Reference() types.ManagedObjectReference {
    +	return p.reference
    +}
    +
    +// Create creates a new session-specific Collector that can be used to
    +// retrieve property updates independent of any other Collector.
    +func (p *Collector) Create(ctx context.Context) (*Collector, error) {
    +	req := types.CreatePropertyCollector{
    +		This: p.Reference(),
    +	}
    +
    +	res, err := methods.CreatePropertyCollector(ctx, p.roundTripper, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	newp := Collector{
    +		roundTripper: p.roundTripper,
    +		reference:    res.Returnval,
    +	}
    +
    +	return &newp, nil
    +}
    +
    +// Destroy destroys this Collector.
    +func (p *Collector) Destroy(ctx context.Context) error {
    +	req := types.DestroyPropertyCollector{
    +		This: p.Reference(),
    +	}
    +
    +	_, err := methods.DestroyPropertyCollector(ctx, p.roundTripper, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	p.reference = types.ManagedObjectReference{}
    +	return nil
    +}
    +
    +func (p *Collector) CreateFilter(ctx context.Context, req types.CreateFilter) error {
    +	req.This = p.Reference()
    +
    +	_, err := methods.CreateFilter(ctx, p.roundTripper, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return nil
    +}
    +
    +func (p *Collector) WaitForUpdates(ctx context.Context, v string) (*types.UpdateSet, error) {
    +	req := types.WaitForUpdatesEx{
    +		This:    p.Reference(),
    +		Version: v,
    +	}
    +
    +	res, err := methods.WaitForUpdatesEx(ctx, p.roundTripper, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (p *Collector) RetrieveProperties(ctx context.Context, req types.RetrieveProperties) (*types.RetrievePropertiesResponse, error) {
    +	req.This = p.Reference()
    +	return methods.RetrieveProperties(ctx, p.roundTripper, &req)
    +}
    +
    +// Retrieve loads properties for a slice of managed objects. The dst argument
    +// must be a pointer to a []interface{}, which is populated with the instances
    +// of the specified managed objects, with the relevant properties filled in. If
    +// the properties slice is nil, all properties are loaded.
    +func (p *Collector) Retrieve(ctx context.Context, objs []types.ManagedObjectReference, ps []string, dst interface{}) error {
    +	if len(objs) == 0 {
    +		return errors.New("object references is empty")
    +	}
    +
    +	var propSpec *types.PropertySpec
    +	var objectSet []types.ObjectSpec
    +
    +	for _, obj := range objs {
    +		// Ensure that all object reference types are the same
    +		if propSpec == nil {
    +			propSpec = &types.PropertySpec{
    +				Type: obj.Type,
    +			}
    +
    +			if ps == nil {
    +				propSpec.All = types.NewBool(true)
    +			} else {
    +				propSpec.PathSet = ps
    +			}
    +		} else {
    +			if obj.Type != propSpec.Type {
    +				return errors.New("object references must have the same type")
    +			}
    +		}
    +
    +		objectSpec := types.ObjectSpec{
    +			Obj:  obj,
    +			Skip: types.NewBool(false),
    +		}
    +
    +		objectSet = append(objectSet, objectSpec)
    +	}
    +
    +	req := types.RetrieveProperties{
    +		SpecSet: []types.PropertyFilterSpec{
    +			{
    +				ObjectSet: objectSet,
    +				PropSet:   []types.PropertySpec{*propSpec},
    +			},
    +		},
    +	}
    +
    +	res, err := p.RetrieveProperties(ctx, req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	if d, ok := dst.(*[]types.ObjectContent); ok {
    +		*d = res.Returnval
    +		return nil
    +	}
    +
    +	return mo.LoadRetrievePropertiesResponse(res, dst)
    +}
    +
    +// RetrieveWithFilter populates dst as Retrieve does, but only for entities matching the given filter.
    +func (p *Collector) RetrieveWithFilter(ctx context.Context, objs []types.ManagedObjectReference, ps []string, dst interface{}, filter Filter) error {
    +	if len(filter) == 0 {
    +		return p.Retrieve(ctx, objs, ps, dst)
    +	}
    +
    +	var content []types.ObjectContent
    +
    +	err := p.Retrieve(ctx, objs, filter.Keys(), &content)
    +	if err != nil {
    +		return err
    +	}
    +
    +	objs = filter.MatchObjectContent(content)
    +
    +	if len(objs) == 0 {
    +		return nil
    +	}
    +
    +	return p.Retrieve(ctx, objs, ps, dst)
    +}
    +
    +// RetrieveOne calls Retrieve with a single managed object reference.
    +func (p *Collector) RetrieveOne(ctx context.Context, obj types.ManagedObjectReference, ps []string, dst interface{}) error {
    +	var objs = []types.ManagedObjectReference{obj}
    +	return p.Retrieve(ctx, objs, ps, dst)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/filter.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/filter.go
    new file mode 100644
    index 00000000000..a4bf16d0555
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/filter.go
    @@ -0,0 +1,139 @@
    +/*
    +Copyright (c) 2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package property
    +
    +import (
    +	"fmt"
    +	"path"
    +	"reflect"
    +	"strconv"
    +	"strings"
    +
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// Filter provides methods for matching against types.DynamicProperty
    +type Filter map[string]types.AnyType
    +
    +// Keys returns the Filter map keys as a []string
    +func (f Filter) Keys() []string {
    +	keys := make([]string, 0, len(f))
    +
    +	for key := range f {
    +		keys = append(keys, key)
    +	}
    +
    +	return keys
    +}
    +
    +// MatchProperty returns true if a Filter entry matches the given prop.
    +func (f Filter) MatchProperty(prop types.DynamicProperty) bool {
    +	match, ok := f[prop.Name]
    +	if !ok {
    +		return false
    +	}
    +
    +	if match == prop.Val {
    +		return true
    +	}
    +
    +	ptype := reflect.TypeOf(prop.Val)
    +
    +	if strings.HasPrefix(ptype.Name(), "ArrayOf") {
    +		pval := reflect.ValueOf(prop.Val).Field(0)
    +
    +		for i := 0; i < pval.Len(); i++ {
    +			prop.Val = pval.Index(i).Interface()
    +
    +			if f.MatchProperty(prop) {
    +				return true
    +			}
    +		}
    +
    +		return false
    +	}
    +
    +	if reflect.TypeOf(match) != ptype {
    +		s, ok := match.(string)
    +		if !ok {
    +			return false
    +		}
    +
    +		// convert if we can
    +		switch prop.Val.(type) {
    +		case bool:
    +			match, _ = strconv.ParseBool(s)
    +		case int16:
    +			x, _ := strconv.ParseInt(s, 10, 16)
    +			match = int16(x)
    +		case int32:
    +			x, _ := strconv.ParseInt(s, 10, 32)
    +			match = int32(x)
    +		case int64:
    +			match, _ = strconv.ParseInt(s, 10, 64)
    +		case float32:
    +			x, _ := strconv.ParseFloat(s, 32)
    +			match = float32(x)
    +		case float64:
    +			match, _ = strconv.ParseFloat(s, 64)
    +		case fmt.Stringer:
    +			prop.Val = prop.Val.(fmt.Stringer).String()
    +		default:
    +			if ptype.Kind() != reflect.String {
    +				return false
    +			}
    +			// An enum type we can convert to a string type
    +			prop.Val = reflect.ValueOf(prop.Val).String()
    +		}
    +	}
    +
    +	switch pval := prop.Val.(type) {
    +	case string:
    +		s := match.(string)
    +		if s == "*" {
    +			return true // TODO: path.Match fails if s contains a '/'
    +		}
    +		m, _ := path.Match(s, pval)
    +		return m
    +	default:
    +		return reflect.DeepEqual(match, pval)
    +	}
    +}
    +
    +// MatchPropertyList returns true if all given props match the Filter.
    +func (f Filter) MatchPropertyList(props []types.DynamicProperty) bool {
    +	for _, p := range props {
    +		if !f.MatchProperty(p) {
    +			return false
    +		}
    +	}
    +
    +	return len(f) == len(props) // false if a property such as VM "guest" is unset
    +}
    +
    +// MatchObjectContent returns a list of ObjectContent.Obj where the ObjectContent.PropSet matches the Filter.
    +func (f Filter) MatchObjectContent(objects []types.ObjectContent) []types.ManagedObjectReference {
    +	var refs []types.ManagedObjectReference
    +
    +	for _, o := range objects {
    +		if f.MatchPropertyList(o.PropSet) {
    +			refs = append(refs, o.Obj)
    +		}
    +	}
    +
    +	return refs
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/wait.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/wait.go
    new file mode 100644
    index 00000000000..fe847926ce9
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/property/wait.go
    @@ -0,0 +1,115 @@
    +/*
    +Copyright (c) 2015-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package property
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// WaitFilter provides helpers to construct a types.CreateFilter for use with property.Wait
    +type WaitFilter struct {
    +	types.CreateFilter
    +}
    +
    +// Add a new ObjectSpec and PropertySpec to the WaitFilter
    +func (f *WaitFilter) Add(obj types.ManagedObjectReference, kind string, ps []string, set ...types.BaseSelectionSpec) *WaitFilter {
    +	spec := types.ObjectSpec{
    +		Obj:       obj,
    +		SelectSet: set,
    +	}
    +
    +	pset := types.PropertySpec{
    +		Type:    kind,
    +		PathSet: ps,
    +	}
    +
    +	if len(ps) == 0 {
    +		pset.All = types.NewBool(true)
    +	}
    +
    +	f.Spec.ObjectSet = append(f.Spec.ObjectSet, spec)
    +
    +	f.Spec.PropSet = append(f.Spec.PropSet, pset)
    +
    +	return f
    +}
    +
    +// Wait creates a new WaitFilter and calls the specified function for each ObjectUpdate via WaitForUpdates
    +func Wait(ctx context.Context, c *Collector, obj types.ManagedObjectReference, ps []string, f func([]types.PropertyChange) bool) error {
    +	filter := new(WaitFilter).Add(obj, obj.Type, ps)
    +
    +	return WaitForUpdates(ctx, c, filter, func(updates []types.ObjectUpdate) bool {
    +		for _, update := range updates {
    +			if f(update.ChangeSet) {
    +				return true
    +			}
    +		}
    +
    +		return false
    +	})
    +}
    +
    +// WaitForUpdates waits for any of the specified properties of the specified managed
    +// object to change. It calls the specified function for every update it
    +// receives. If this function returns false, it continues waiting for
    +// subsequent updates. If this function returns true, it stops waiting and
    +// returns.
    +//
    +// To only receive updates for the specified managed object, the function
    +// creates a new property collector and calls CreateFilter. A new property
    +// collector is required because filters can only be added, not removed.
    +//
    +// The newly created collector is destroyed before this function returns (both
    +// in case of success or error).
    +//
    +func WaitForUpdates(ctx context.Context, c *Collector, filter *WaitFilter, f func([]types.ObjectUpdate) bool) error {
    +	p, err := c.Create(ctx)
    +	if err != nil {
    +		return err
    +	}
    +
    +	// Attempt to destroy the collector using the background context, as the
    +	// specified context may have timed out or have been cancelled.
    +	defer p.Destroy(context.Background())
    +
    +	err = p.CreateFilter(ctx, filter.CreateFilter)
    +	if err != nil {
    +		return err
    +	}
    +
    +	for version := ""; ; {
    +		res, err := p.WaitForUpdates(ctx, version)
    +		if err != nil {
    +			return err
    +		}
    +
    +		// Retry if the result came back empty
    +		if res == nil {
    +			continue
    +		}
    +
    +		version = res.Version
    +
    +		for _, fs := range res.FilterSet {
    +			if f(fs.ObjectSet) {
    +				return nil
    +			}
    +		}
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/session/keep_alive.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/session/keep_alive.go
    new file mode 100644
    index 00000000000..a9d4c141c92
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/session/keep_alive.go
    @@ -0,0 +1,127 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package session
    +
    +import (
    +	"context"
    +	"sync"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/soap"
    +)
    +
    +type keepAlive struct {
    +	sync.Mutex
    +
    +	roundTripper    soap.RoundTripper
    +	idleTime        time.Duration
    +	notifyRequest   chan struct{}
    +	notifyStop      chan struct{}
    +	notifyWaitGroup sync.WaitGroup
    +
    +	// keepAlive executes a request in the background with the purpose of
    +	// keeping the session active. The response for this request is discarded.
    +	keepAlive func(soap.RoundTripper) error
    +}
    +
    +func defaultKeepAlive(roundTripper soap.RoundTripper) error {
    +	_, _ = methods.GetCurrentTime(context.Background(), roundTripper)
    +	return nil
    +}
    +
    +// KeepAlive wraps the specified soap.RoundTripper and executes a meaningless
    +// API request in the background after the RoundTripper has been idle for the
    +// specified amount of idle time. The keep alive process only starts once a
    +// user logs in and runs until the user logs out again.
    +func KeepAlive(roundTripper soap.RoundTripper, idleTime time.Duration) soap.RoundTripper {
    +	return KeepAliveHandler(roundTripper, idleTime, defaultKeepAlive)
    +}
    +
    +// KeepAliveHandler works as KeepAlive() does, but the handler param can decide how to handle errors.
    +// For example, if connectivity to ESX/VC is down long enough for a session to expire, a handler can choose to
    +// Login() on a types.NotAuthenticated error.  If handler returns non-nil, the keep alive go routine will be stopped.
    +func KeepAliveHandler(roundTripper soap.RoundTripper, idleTime time.Duration, handler func(soap.RoundTripper) error) soap.RoundTripper {
    +	k := &keepAlive{
    +		roundTripper:  roundTripper,
    +		idleTime:      idleTime,
    +		notifyRequest: make(chan struct{}),
    +	}
    +
    +	k.keepAlive = handler
    +
    +	return k
    +}
    +
    +func (k *keepAlive) start() {
    +	k.Lock()
    +	defer k.Unlock()
    +
    +	if k.notifyStop != nil {
    +		return
    +	}
    +
    +	// This channel must be closed to terminate idle timer.
    +	k.notifyStop = make(chan struct{})
    +	k.notifyWaitGroup.Add(1)
    +
    +	go func() {
    +		defer k.notifyWaitGroup.Done()
    +
    +		for t := time.NewTimer(k.idleTime); ; {
    +			select {
    +			case <-k.notifyStop:
    +				return
    +			case <-k.notifyRequest:
    +				t.Reset(k.idleTime)
    +			case <-t.C:
    +				if err := k.keepAlive(k.roundTripper); err != nil {
    +					k.stop()
    +				}
    +				t = time.NewTimer(k.idleTime)
    +			}
    +		}
    +	}()
    +}
    +
    +func (k *keepAlive) stop() {
    +	k.Lock()
    +	defer k.Unlock()
    +
    +	if k.notifyStop != nil {
    +		close(k.notifyStop)
    +		k.notifyWaitGroup.Wait()
    +		k.notifyStop = nil
    +	}
    +}
    +
    +func (k *keepAlive) RoundTrip(ctx context.Context, req, res soap.HasFault) error {
    +	err := k.roundTripper.RoundTrip(ctx, req, res)
    +	if err != nil {
    +		return err
    +	}
    +
    +	// Start ticker on login, stop ticker on logout.
    +	switch req.(type) {
    +	case *methods.LoginBody, *methods.LoginExtensionByCertificateBody:
    +		k.start()
    +	case *methods.LogoutBody:
    +		k.stop()
    +	}
    +
    +	return nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/session/manager.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/session/manager.go
    new file mode 100644
    index 00000000000..ad3219716a4
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/session/manager.go
    @@ -0,0 +1,267 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package session
    +
    +import (
    +	"context"
    +	"net/http"
    +	"net/url"
    +	"os"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25"
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/mo"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// Locale defaults to "en_US" and can be overridden via this var or the GOVMOMI_LOCALE env var.
    +// A value of "_" uses the server locale setting.
    +var Locale = os.Getenv("GOVMOMI_LOCALE")
    +
    +func init() {
    +	if Locale == "_" {
    +		Locale = ""
    +	} else if Locale == "" {
    +		Locale = "en_US"
    +	}
    +}
    +
    +type Manager struct {
    +	client      *vim25.Client
    +	userSession *types.UserSession
    +}
    +
    +func NewManager(client *vim25.Client) *Manager {
    +	m := Manager{
    +		client: client,
    +	}
    +
    +	return &m
    +}
    +
    +func (sm Manager) Reference() types.ManagedObjectReference {
    +	return *sm.client.ServiceContent.SessionManager
    +}
    +
    +func (sm *Manager) SetLocale(ctx context.Context, locale string) error {
    +	req := types.SetLocale{
    +		This:   sm.Reference(),
    +		Locale: locale,
    +	}
    +
    +	_, err := methods.SetLocale(ctx, sm.client, &req)
    +	return err
    +}
    +
    +func (sm *Manager) Login(ctx context.Context, u *url.Userinfo) error {
    +	req := types.Login{
    +		This:   sm.Reference(),
    +		Locale: Locale,
    +	}
    +
    +	if u != nil {
    +		req.UserName = u.Username()
    +		if pw, ok := u.Password(); ok {
    +			req.Password = pw
    +		}
    +	}
    +
    +	login, err := methods.Login(ctx, sm.client, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	sm.userSession = &login.Returnval
    +	return nil
    +}
    +
    +// LoginExtensionByCertificate uses the vCenter SDK tunnel to login using a client certificate.
    +// The client certificate can be set using the soap.Client.SetCertificate method.
    +// See: https://kb.vmware.com/s/article/2004305
    +func (sm *Manager) LoginExtensionByCertificate(ctx context.Context, key string) error {
    +	c := sm.client
    +	u := c.URL()
    +	if u.Hostname() != "sdkTunnel" {
    +		sc := c.Tunnel()
    +		c = &vim25.Client{
    +			Client:         sc,
    +			RoundTripper:   sc,
    +			ServiceContent: c.ServiceContent,
    +		}
    +		// When http.Transport.Proxy is used, our thumbprint checker is bypassed, resulting in:
    +		// "Post https://sdkTunnel:8089/sdk: x509: certificate is valid for $vcenter_hostname, not sdkTunnel"
    +		// The only easy way around this is to disable verification for the call to LoginExtensionByCertificate().
    +		// TODO: find a way to avoid disabling InsecureSkipVerify.
    +		c.Transport.(*http.Transport).TLSClientConfig.InsecureSkipVerify = true
    +	}
    +
    +	req := types.LoginExtensionByCertificate{
    +		This:         sm.Reference(),
    +		ExtensionKey: key,
    +		Locale:       Locale,
    +	}
    +
    +	login, err := methods.LoginExtensionByCertificate(ctx, c, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	// Copy the session cookie
    +	sm.client.Jar.SetCookies(u, c.Jar.Cookies(c.URL()))
    +
    +	sm.userSession = &login.Returnval
    +	return nil
    +}
    +
    +func (sm *Manager) LoginByToken(ctx context.Context) error {
    +	req := types.LoginByToken{
    +		This:   sm.Reference(),
    +		Locale: Locale,
    +	}
    +
    +	login, err := methods.LoginByToken(ctx, sm.client, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	sm.userSession = &login.Returnval
    +	return nil
    +}
    +
    +func (sm *Manager) Logout(ctx context.Context) error {
    +	req := types.Logout{
    +		This: sm.Reference(),
    +	}
    +
    +	_, err := methods.Logout(ctx, sm.client, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	sm.userSession = nil
    +	return nil
    +}
    +
    +// UserSession retrieves and returns the SessionManager's CurrentSession field.
    +// Nil is returned if the session is not authenticated.
    +func (sm *Manager) UserSession(ctx context.Context) (*types.UserSession, error) {
    +	var mgr mo.SessionManager
    +
    +	pc := property.DefaultCollector(sm.client)
    +	err := pc.RetrieveOne(ctx, sm.Reference(), []string{"currentSession"}, &mgr)
    +	if err != nil {
    +		// It's OK if we can't retrieve properties because we're not authenticated
    +		if f, ok := err.(types.HasFault); ok {
    +			switch f.Fault().(type) {
    +			case *types.NotAuthenticated:
    +				return nil, nil
    +			}
    +		}
    +
    +		return nil, err
    +	}
    +
    +	return mgr.CurrentSession, nil
    +}
    +
    +func (sm *Manager) TerminateSession(ctx context.Context, sessionId []string) error {
    +	req := types.TerminateSession{
    +		This:      sm.Reference(),
    +		SessionId: sessionId,
    +	}
    +
    +	_, err := methods.TerminateSession(ctx, sm.client, &req)
    +	return err
    +}
    +
    +// SessionIsActive checks whether the session that was created at login is
    +// still valid. This function only works against vCenter.
    +func (sm *Manager) SessionIsActive(ctx context.Context) (bool, error) {
    +	if sm.userSession == nil {
    +		return false, nil
    +	}
    +
    +	req := types.SessionIsActive{
    +		This:      sm.Reference(),
    +		SessionID: sm.userSession.Key,
    +		UserName:  sm.userSession.UserName,
    +	}
    +
    +	active, err := methods.SessionIsActive(ctx, sm.client, &req)
    +	if err != nil {
    +		return false, err
    +	}
    +
    +	return active.Returnval, err
    +}
    +
    +func (sm *Manager) AcquireGenericServiceTicket(ctx context.Context, spec types.BaseSessionManagerServiceRequestSpec) (*types.SessionManagerGenericServiceTicket, error) {
    +	req := types.AcquireGenericServiceTicket{
    +		This: sm.Reference(),
    +		Spec: spec,
    +	}
    +
    +	res, err := methods.AcquireGenericServiceTicket(ctx, sm.client, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +func (sm *Manager) AcquireLocalTicket(ctx context.Context, userName string) (*types.SessionManagerLocalTicket, error) {
    +	req := types.AcquireLocalTicket{
    +		This:     sm.Reference(),
    +		UserName: userName,
    +	}
    +
    +	res, err := methods.AcquireLocalTicket(ctx, sm.client, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    +
    +func (sm *Manager) AcquireCloneTicket(ctx context.Context) (string, error) {
    +	req := types.AcquireCloneTicket{
    +		This: sm.Reference(),
    +	}
    +
    +	res, err := methods.AcquireCloneTicket(ctx, sm.client, &req)
    +	if err != nil {
    +		return "", err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func (sm *Manager) CloneSession(ctx context.Context, ticket string) error {
    +	req := types.CloneSession{
    +		This:        sm.Reference(),
    +		CloneTicket: ticket,
    +	}
    +
    +	res, err := methods.CloneSession(ctx, sm.client, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	sm.userSession = &res.Returnval
    +	return nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/task/error.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/task/error.go
    new file mode 100644
    index 00000000000..5f6b8503f5b
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/task/error.go
    @@ -0,0 +1,32 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package task
    +
    +import "github.com/vmware/govmomi/vim25/types"
    +
    +type Error struct {
    +	*types.LocalizedMethodFault
    +}
    +
    +// Error returns the task's localized fault message.
    +func (e Error) Error() string {
    +	return e.LocalizedMethodFault.LocalizedMessage
    +}
    +
    +func (e Error) Fault() types.BaseMethodFault {
    +	return e.LocalizedMethodFault.Fault
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/task/wait.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/task/wait.go
    new file mode 100644
    index 00000000000..19fee538463
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/task/wait.go
    @@ -0,0 +1,132 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package task
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/property"
    +	"github.com/vmware/govmomi/vim25/progress"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type taskProgress struct {
    +	info *types.TaskInfo
    +}
    +
    +func (t taskProgress) Percentage() float32 {
    +	return float32(t.info.Progress)
    +}
    +
    +func (t taskProgress) Detail() string {
    +	return ""
    +}
    +
    +func (t taskProgress) Error() error {
    +	if t.info.Error != nil {
    +		return Error{t.info.Error}
    +	}
    +
    +	return nil
    +}
    +
    +type taskCallback struct {
    +	ch   chan<- progress.Report
    +	info *types.TaskInfo
    +	err  error
    +}
    +
    +func (t *taskCallback) fn(pc []types.PropertyChange) bool {
    +	for _, c := range pc {
    +		if c.Name != "info" {
    +			continue
    +		}
    +
    +		if c.Op != types.PropertyChangeOpAssign {
    +			continue
    +		}
    +
    +		if c.Val == nil {
    +			continue
    +		}
    +
    +		ti := c.Val.(types.TaskInfo)
    +		t.info = &ti
    +	}
    +
    +	// t.info could be nil if pc can't satify the rules above
    +	if t.info == nil {
    +		return false
    +	}
    +
    +	pr := taskProgress{t.info}
    +
    +	// Store copy of error, so Wait() can return it as well.
    +	t.err = pr.Error()
    +
    +	switch t.info.State {
    +	case types.TaskInfoStateQueued, types.TaskInfoStateRunning:
    +		if t.ch != nil {
    +			// Don't care if this is dropped
    +			select {
    +			case t.ch <- pr:
    +			default:
    +			}
    +		}
    +		return false
    +	case types.TaskInfoStateSuccess, types.TaskInfoStateError:
    +		if t.ch != nil {
    +			// Last one must always be delivered
    +			t.ch <- pr
    +		}
    +		return true
    +	default:
    +		panic("unknown state: " + t.info.State)
    +	}
    +}
    +
    +// Wait waits for a task to finish with either success or failure. It does so
    +// by waiting for the "info" property of task managed object to change. The
    +// function returns when it finds the task in the "success" or "error" state.
    +// In the former case, the return value is nil. In the latter case the return
    +// value is an instance of this package's Error struct.
    +//
    +// Any error returned while waiting for property changes causes the function to
    +// return immediately and propagate the error.
    +//
    +// If the progress.Sinker argument is specified, any progress updates for the
    +// task are sent here. The completion percentage is passed through directly.
    +// The detail for the progress update is set to an empty string. If the task
    +// finishes in the error state, the error instance is passed through as well.
    +// Note that this error is the same error that is returned by this function.
    +//
    +func Wait(ctx context.Context, ref types.ManagedObjectReference, pc *property.Collector, s progress.Sinker) (*types.TaskInfo, error) {
    +	cb := &taskCallback{}
    +
    +	// Include progress sink if specified
    +	if s != nil {
    +		cb.ch = s.Sink()
    +		defer close(cb.ch)
    +	}
    +
    +	err := property.Wait(ctx, pc, ref, []string{"info"}, cb.fn)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return cb.info, cb.err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/client.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/client.go
    new file mode 100644
    index 00000000000..1d26fb8b6a7
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/client.go
    @@ -0,0 +1,146 @@
    +/*
    +Copyright (c) 2015-2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package vim25
    +
    +import (
    +	"context"
    +	"encoding/json"
    +	"strings"
    +
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +const (
    +	Namespace = "vim25"
    +	Version   = "6.7"
    +	Path      = "/sdk"
    +)
    +
    +var (
    +	ServiceInstance = types.ManagedObjectReference{
    +		Type:  "ServiceInstance",
    +		Value: "ServiceInstance",
    +	}
    +)
    +
    +// Client is a tiny wrapper around the vim25/soap Client that stores session
    +// specific state (i.e. state that only needs to be retrieved once after the
    +// client has been created). This means the client can be reused after
    +// serialization without performing additional requests for initialization.
    +type Client struct {
    +	*soap.Client
    +
    +	ServiceContent types.ServiceContent
    +
    +	// RoundTripper is a separate field such that the client's implementation of
    +	// the RoundTripper interface can be wrapped by separate implementations for
    +	// extra functionality (for example, reauthentication on session timeout).
    +	RoundTripper soap.RoundTripper
    +}
    +
    +// NewClient creates and returns a new client wirh the ServiceContent field
    +// filled in.
    +func NewClient(ctx context.Context, rt soap.RoundTripper) (*Client, error) {
    +	c := Client{
    +		RoundTripper: rt,
    +	}
    +
    +	// Set client if it happens to be a soap.Client
    +	if sc, ok := rt.(*soap.Client); ok {
    +		c.Client = sc
    +
    +		if c.Namespace == "" {
    +			c.Namespace = "urn:" + Namespace
    +		} else if strings.Index(c.Namespace, ":") < 0 {
    +			c.Namespace = "urn:" + c.Namespace // ensure valid URI format
    +		}
    +		if c.Version == "" {
    +			c.Version = Version
    +		}
    +	}
    +
    +	var err error
    +	c.ServiceContent, err = methods.GetServiceContent(ctx, rt)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &c, nil
    +}
    +
    +// RoundTrip dispatches to the RoundTripper field.
    +func (c *Client) RoundTrip(ctx context.Context, req, res soap.HasFault) error {
    +	return c.RoundTripper.RoundTrip(ctx, req, res)
    +}
    +
    +type marshaledClient struct {
    +	SoapClient     *soap.Client
    +	ServiceContent types.ServiceContent
    +}
    +
    +func (c *Client) MarshalJSON() ([]byte, error) {
    +	m := marshaledClient{
    +		SoapClient:     c.Client,
    +		ServiceContent: c.ServiceContent,
    +	}
    +
    +	return json.Marshal(m)
    +}
    +
    +func (c *Client) UnmarshalJSON(b []byte) error {
    +	var m marshaledClient
    +
    +	err := json.Unmarshal(b, &m)
    +	if err != nil {
    +		return err
    +	}
    +
    +	*c = Client{
    +		Client:         m.SoapClient,
    +		ServiceContent: m.ServiceContent,
    +		RoundTripper:   m.SoapClient,
    +	}
    +
    +	return nil
    +}
    +
    +// Valid returns whether or not the client is valid and ready for use.
    +// This should be called after unmarshalling the client.
    +func (c *Client) Valid() bool {
    +	if c == nil {
    +		return false
    +	}
    +
    +	if c.Client == nil {
    +		return false
    +	}
    +
    +	// Use arbitrary pointer field in the service content.
    +	// Doesn't matter which one, as long as it is populated by default.
    +	if c.ServiceContent.SessionManager == nil {
    +		return false
    +	}
    +
    +	return true
    +}
    +
    +// IsVC returns true if we are connected to a vCenter
    +func (c *Client) IsVC() bool {
    +	return c.ServiceContent.About.ApiType == "VirtualCenter"
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/debug/debug.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/debug/debug.go
    new file mode 100644
    index 00000000000..22d54717846
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/debug/debug.go
    @@ -0,0 +1,81 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package debug
    +
    +import (
    +	"io"
    +	"os"
    +	"path"
    +)
    +
    +// Provider specified the interface types must implement to be used as a
    +// debugging sink. Having multiple such sink implementations allows it to be
    +// changed externally (for example when running tests).
    +type Provider interface {
    +	NewFile(s string) io.WriteCloser
    +	Flush()
    +}
    +
    +var currentProvider Provider = nil
    +
    +func SetProvider(p Provider) {
    +	if currentProvider != nil {
    +		currentProvider.Flush()
    +	}
    +	currentProvider = p
    +}
    +
    +// Enabled returns whether debugging is enabled or not.
    +func Enabled() bool {
    +	return currentProvider != nil
    +}
    +
    +// NewFile dispatches to the current provider's NewFile function.
    +func NewFile(s string) io.WriteCloser {
    +	return currentProvider.NewFile(s)
    +}
    +
    +// Flush dispatches to the current provider's Flush function.
    +func Flush() {
    +	currentProvider.Flush()
    +}
    +
    +// FileProvider implements a debugging provider that creates a real file for
    +// every call to NewFile. It maintains a list of all files that it creates,
    +// such that it can close them when its Flush function is called.
    +type FileProvider struct {
    +	Path string
    +
    +	files []*os.File
    +}
    +
    +func (fp *FileProvider) NewFile(p string) io.WriteCloser {
    +	f, err := os.Create(path.Join(fp.Path, p))
    +	if err != nil {
    +		panic(err)
    +	}
    +
    +	fp.files = append(fp.files, f)
    +
    +	return f
    +}
    +
    +func (fp *FileProvider) Flush() {
    +	for _, f := range fp.files {
    +		f.Close()
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/doc.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/doc.go
    new file mode 100644
    index 00000000000..acb2c9f64dd
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/doc.go
    @@ -0,0 +1,29 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +/*
    +Package vim25 provides a minimal client implementation to use with other
    +packages in the vim25 tree. The code in this package intentionally does not
    +take any dependendies outside the vim25 tree.
    +
    +The client implementation in this package embeds the soap.Client structure.
    +Additionally, it stores the value of the session's ServiceContent object. This
    +object stores references to a variety of subsystems, such as the root property
    +collector, the session manager, and the search index. The client is fully
    +functional after serialization and deserialization, without the need for
    +additional requests for initialization.
    +*/
    +package vim25
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/methods/methods.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/methods/methods.go
    new file mode 100644
    index 00000000000..c3ad23eefb4
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/methods/methods.go
    @@ -0,0 +1,17284 @@
    +/*
    +Copyright (c) 2014-2018 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package methods
    +
    +import (
    +	"context"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type AbdicateDomOwnershipBody struct {
    +	Req    *types.AbdicateDomOwnership         `xml:"urn:vim25 AbdicateDomOwnership,omitempty"`
    +	Res    *types.AbdicateDomOwnershipResponse `xml:"urn:vim25 AbdicateDomOwnershipResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AbdicateDomOwnershipBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AbdicateDomOwnership(ctx context.Context, r soap.RoundTripper, req *types.AbdicateDomOwnership) (*types.AbdicateDomOwnershipResponse, error) {
    +	var reqBody, resBody AbdicateDomOwnershipBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AcknowledgeAlarmBody struct {
    +	Req    *types.AcknowledgeAlarm         `xml:"urn:vim25 AcknowledgeAlarm,omitempty"`
    +	Res    *types.AcknowledgeAlarmResponse `xml:"urn:vim25 AcknowledgeAlarmResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AcknowledgeAlarmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AcknowledgeAlarm(ctx context.Context, r soap.RoundTripper, req *types.AcknowledgeAlarm) (*types.AcknowledgeAlarmResponse, error) {
    +	var reqBody, resBody AcknowledgeAlarmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AcquireCimServicesTicketBody struct {
    +	Req    *types.AcquireCimServicesTicket         `xml:"urn:vim25 AcquireCimServicesTicket,omitempty"`
    +	Res    *types.AcquireCimServicesTicketResponse `xml:"urn:vim25 AcquireCimServicesTicketResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AcquireCimServicesTicketBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AcquireCimServicesTicket(ctx context.Context, r soap.RoundTripper, req *types.AcquireCimServicesTicket) (*types.AcquireCimServicesTicketResponse, error) {
    +	var reqBody, resBody AcquireCimServicesTicketBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AcquireCloneTicketBody struct {
    +	Req    *types.AcquireCloneTicket         `xml:"urn:vim25 AcquireCloneTicket,omitempty"`
    +	Res    *types.AcquireCloneTicketResponse `xml:"urn:vim25 AcquireCloneTicketResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AcquireCloneTicketBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AcquireCloneTicket(ctx context.Context, r soap.RoundTripper, req *types.AcquireCloneTicket) (*types.AcquireCloneTicketResponse, error) {
    +	var reqBody, resBody AcquireCloneTicketBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AcquireCredentialsInGuestBody struct {
    +	Req    *types.AcquireCredentialsInGuest         `xml:"urn:vim25 AcquireCredentialsInGuest,omitempty"`
    +	Res    *types.AcquireCredentialsInGuestResponse `xml:"urn:vim25 AcquireCredentialsInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AcquireCredentialsInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AcquireCredentialsInGuest(ctx context.Context, r soap.RoundTripper, req *types.AcquireCredentialsInGuest) (*types.AcquireCredentialsInGuestResponse, error) {
    +	var reqBody, resBody AcquireCredentialsInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AcquireGenericServiceTicketBody struct {
    +	Req    *types.AcquireGenericServiceTicket         `xml:"urn:vim25 AcquireGenericServiceTicket,omitempty"`
    +	Res    *types.AcquireGenericServiceTicketResponse `xml:"urn:vim25 AcquireGenericServiceTicketResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AcquireGenericServiceTicketBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AcquireGenericServiceTicket(ctx context.Context, r soap.RoundTripper, req *types.AcquireGenericServiceTicket) (*types.AcquireGenericServiceTicketResponse, error) {
    +	var reqBody, resBody AcquireGenericServiceTicketBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AcquireLocalTicketBody struct {
    +	Req    *types.AcquireLocalTicket         `xml:"urn:vim25 AcquireLocalTicket,omitempty"`
    +	Res    *types.AcquireLocalTicketResponse `xml:"urn:vim25 AcquireLocalTicketResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AcquireLocalTicketBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AcquireLocalTicket(ctx context.Context, r soap.RoundTripper, req *types.AcquireLocalTicket) (*types.AcquireLocalTicketResponse, error) {
    +	var reqBody, resBody AcquireLocalTicketBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AcquireMksTicketBody struct {
    +	Req    *types.AcquireMksTicket         `xml:"urn:vim25 AcquireMksTicket,omitempty"`
    +	Res    *types.AcquireMksTicketResponse `xml:"urn:vim25 AcquireMksTicketResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AcquireMksTicketBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AcquireMksTicket(ctx context.Context, r soap.RoundTripper, req *types.AcquireMksTicket) (*types.AcquireMksTicketResponse, error) {
    +	var reqBody, resBody AcquireMksTicketBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AcquireTicketBody struct {
    +	Req    *types.AcquireTicket         `xml:"urn:vim25 AcquireTicket,omitempty"`
    +	Res    *types.AcquireTicketResponse `xml:"urn:vim25 AcquireTicketResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AcquireTicketBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AcquireTicket(ctx context.Context, r soap.RoundTripper, req *types.AcquireTicket) (*types.AcquireTicketResponse, error) {
    +	var reqBody, resBody AcquireTicketBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddAuthorizationRoleBody struct {
    +	Req    *types.AddAuthorizationRole         `xml:"urn:vim25 AddAuthorizationRole,omitempty"`
    +	Res    *types.AddAuthorizationRoleResponse `xml:"urn:vim25 AddAuthorizationRoleResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddAuthorizationRoleBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddAuthorizationRole(ctx context.Context, r soap.RoundTripper, req *types.AddAuthorizationRole) (*types.AddAuthorizationRoleResponse, error) {
    +	var reqBody, resBody AddAuthorizationRoleBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddCustomFieldDefBody struct {
    +	Req    *types.AddCustomFieldDef         `xml:"urn:vim25 AddCustomFieldDef,omitempty"`
    +	Res    *types.AddCustomFieldDefResponse `xml:"urn:vim25 AddCustomFieldDefResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddCustomFieldDefBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddCustomFieldDef(ctx context.Context, r soap.RoundTripper, req *types.AddCustomFieldDef) (*types.AddCustomFieldDefResponse, error) {
    +	var reqBody, resBody AddCustomFieldDefBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddDVPortgroup_TaskBody struct {
    +	Req    *types.AddDVPortgroup_Task         `xml:"urn:vim25 AddDVPortgroup_Task,omitempty"`
    +	Res    *types.AddDVPortgroup_TaskResponse `xml:"urn:vim25 AddDVPortgroup_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddDVPortgroup_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddDVPortgroup_Task(ctx context.Context, r soap.RoundTripper, req *types.AddDVPortgroup_Task) (*types.AddDVPortgroup_TaskResponse, error) {
    +	var reqBody, resBody AddDVPortgroup_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddDisks_TaskBody struct {
    +	Req    *types.AddDisks_Task         `xml:"urn:vim25 AddDisks_Task,omitempty"`
    +	Res    *types.AddDisks_TaskResponse `xml:"urn:vim25 AddDisks_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddDisks_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddDisks_Task(ctx context.Context, r soap.RoundTripper, req *types.AddDisks_Task) (*types.AddDisks_TaskResponse, error) {
    +	var reqBody, resBody AddDisks_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddFilterBody struct {
    +	Req    *types.AddFilter         `xml:"urn:vim25 AddFilter,omitempty"`
    +	Res    *types.AddFilterResponse `xml:"urn:vim25 AddFilterResponse,omitempty"`
    +	Fault_ *soap.Fault              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddFilterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddFilter(ctx context.Context, r soap.RoundTripper, req *types.AddFilter) (*types.AddFilterResponse, error) {
    +	var reqBody, resBody AddFilterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddFilterEntitiesBody struct {
    +	Req    *types.AddFilterEntities         `xml:"urn:vim25 AddFilterEntities,omitempty"`
    +	Res    *types.AddFilterEntitiesResponse `xml:"urn:vim25 AddFilterEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddFilterEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddFilterEntities(ctx context.Context, r soap.RoundTripper, req *types.AddFilterEntities) (*types.AddFilterEntitiesResponse, error) {
    +	var reqBody, resBody AddFilterEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddGuestAliasBody struct {
    +	Req    *types.AddGuestAlias         `xml:"urn:vim25 AddGuestAlias,omitempty"`
    +	Res    *types.AddGuestAliasResponse `xml:"urn:vim25 AddGuestAliasResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddGuestAliasBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddGuestAlias(ctx context.Context, r soap.RoundTripper, req *types.AddGuestAlias) (*types.AddGuestAliasResponse, error) {
    +	var reqBody, resBody AddGuestAliasBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddHost_TaskBody struct {
    +	Req    *types.AddHost_Task         `xml:"urn:vim25 AddHost_Task,omitempty"`
    +	Res    *types.AddHost_TaskResponse `xml:"urn:vim25 AddHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddHost_Task(ctx context.Context, r soap.RoundTripper, req *types.AddHost_Task) (*types.AddHost_TaskResponse, error) {
    +	var reqBody, resBody AddHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddInternetScsiSendTargetsBody struct {
    +	Req    *types.AddInternetScsiSendTargets         `xml:"urn:vim25 AddInternetScsiSendTargets,omitempty"`
    +	Res    *types.AddInternetScsiSendTargetsResponse `xml:"urn:vim25 AddInternetScsiSendTargetsResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddInternetScsiSendTargetsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddInternetScsiSendTargets(ctx context.Context, r soap.RoundTripper, req *types.AddInternetScsiSendTargets) (*types.AddInternetScsiSendTargetsResponse, error) {
    +	var reqBody, resBody AddInternetScsiSendTargetsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddInternetScsiStaticTargetsBody struct {
    +	Req    *types.AddInternetScsiStaticTargets         `xml:"urn:vim25 AddInternetScsiStaticTargets,omitempty"`
    +	Res    *types.AddInternetScsiStaticTargetsResponse `xml:"urn:vim25 AddInternetScsiStaticTargetsResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddInternetScsiStaticTargetsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddInternetScsiStaticTargets(ctx context.Context, r soap.RoundTripper, req *types.AddInternetScsiStaticTargets) (*types.AddInternetScsiStaticTargetsResponse, error) {
    +	var reqBody, resBody AddInternetScsiStaticTargetsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddKeyBody struct {
    +	Req    *types.AddKey         `xml:"urn:vim25 AddKey,omitempty"`
    +	Res    *types.AddKeyResponse `xml:"urn:vim25 AddKeyResponse,omitempty"`
    +	Fault_ *soap.Fault           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddKeyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddKey(ctx context.Context, r soap.RoundTripper, req *types.AddKey) (*types.AddKeyResponse, error) {
    +	var reqBody, resBody AddKeyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddKeysBody struct {
    +	Req    *types.AddKeys         `xml:"urn:vim25 AddKeys,omitempty"`
    +	Res    *types.AddKeysResponse `xml:"urn:vim25 AddKeysResponse,omitempty"`
    +	Fault_ *soap.Fault            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddKeysBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddKeys(ctx context.Context, r soap.RoundTripper, req *types.AddKeys) (*types.AddKeysResponse, error) {
    +	var reqBody, resBody AddKeysBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddLicenseBody struct {
    +	Req    *types.AddLicense         `xml:"urn:vim25 AddLicense,omitempty"`
    +	Res    *types.AddLicenseResponse `xml:"urn:vim25 AddLicenseResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddLicenseBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddLicense(ctx context.Context, r soap.RoundTripper, req *types.AddLicense) (*types.AddLicenseResponse, error) {
    +	var reqBody, resBody AddLicenseBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddMonitoredEntitiesBody struct {
    +	Req    *types.AddMonitoredEntities         `xml:"urn:vim25 AddMonitoredEntities,omitempty"`
    +	Res    *types.AddMonitoredEntitiesResponse `xml:"urn:vim25 AddMonitoredEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddMonitoredEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddMonitoredEntities(ctx context.Context, r soap.RoundTripper, req *types.AddMonitoredEntities) (*types.AddMonitoredEntitiesResponse, error) {
    +	var reqBody, resBody AddMonitoredEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddNetworkResourcePoolBody struct {
    +	Req    *types.AddNetworkResourcePool         `xml:"urn:vim25 AddNetworkResourcePool,omitempty"`
    +	Res    *types.AddNetworkResourcePoolResponse `xml:"urn:vim25 AddNetworkResourcePoolResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddNetworkResourcePoolBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddNetworkResourcePool(ctx context.Context, r soap.RoundTripper, req *types.AddNetworkResourcePool) (*types.AddNetworkResourcePoolResponse, error) {
    +	var reqBody, resBody AddNetworkResourcePoolBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddPortGroupBody struct {
    +	Req    *types.AddPortGroup         `xml:"urn:vim25 AddPortGroup,omitempty"`
    +	Res    *types.AddPortGroupResponse `xml:"urn:vim25 AddPortGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddPortGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddPortGroup(ctx context.Context, r soap.RoundTripper, req *types.AddPortGroup) (*types.AddPortGroupResponse, error) {
    +	var reqBody, resBody AddPortGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddServiceConsoleVirtualNicBody struct {
    +	Req    *types.AddServiceConsoleVirtualNic         `xml:"urn:vim25 AddServiceConsoleVirtualNic,omitempty"`
    +	Res    *types.AddServiceConsoleVirtualNicResponse `xml:"urn:vim25 AddServiceConsoleVirtualNicResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddServiceConsoleVirtualNicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddServiceConsoleVirtualNic(ctx context.Context, r soap.RoundTripper, req *types.AddServiceConsoleVirtualNic) (*types.AddServiceConsoleVirtualNicResponse, error) {
    +	var reqBody, resBody AddServiceConsoleVirtualNicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddStandaloneHost_TaskBody struct {
    +	Req    *types.AddStandaloneHost_Task         `xml:"urn:vim25 AddStandaloneHost_Task,omitempty"`
    +	Res    *types.AddStandaloneHost_TaskResponse `xml:"urn:vim25 AddStandaloneHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddStandaloneHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddStandaloneHost_Task(ctx context.Context, r soap.RoundTripper, req *types.AddStandaloneHost_Task) (*types.AddStandaloneHost_TaskResponse, error) {
    +	var reqBody, resBody AddStandaloneHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddVirtualNicBody struct {
    +	Req    *types.AddVirtualNic         `xml:"urn:vim25 AddVirtualNic,omitempty"`
    +	Res    *types.AddVirtualNicResponse `xml:"urn:vim25 AddVirtualNicResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddVirtualNicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddVirtualNic(ctx context.Context, r soap.RoundTripper, req *types.AddVirtualNic) (*types.AddVirtualNicResponse, error) {
    +	var reqBody, resBody AddVirtualNicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AddVirtualSwitchBody struct {
    +	Req    *types.AddVirtualSwitch         `xml:"urn:vim25 AddVirtualSwitch,omitempty"`
    +	Res    *types.AddVirtualSwitchResponse `xml:"urn:vim25 AddVirtualSwitchResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AddVirtualSwitchBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AddVirtualSwitch(ctx context.Context, r soap.RoundTripper, req *types.AddVirtualSwitch) (*types.AddVirtualSwitchResponse, error) {
    +	var reqBody, resBody AddVirtualSwitchBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AllocateIpv4AddressBody struct {
    +	Req    *types.AllocateIpv4Address         `xml:"urn:vim25 AllocateIpv4Address,omitempty"`
    +	Res    *types.AllocateIpv4AddressResponse `xml:"urn:vim25 AllocateIpv4AddressResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AllocateIpv4AddressBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AllocateIpv4Address(ctx context.Context, r soap.RoundTripper, req *types.AllocateIpv4Address) (*types.AllocateIpv4AddressResponse, error) {
    +	var reqBody, resBody AllocateIpv4AddressBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AllocateIpv6AddressBody struct {
    +	Req    *types.AllocateIpv6Address         `xml:"urn:vim25 AllocateIpv6Address,omitempty"`
    +	Res    *types.AllocateIpv6AddressResponse `xml:"urn:vim25 AllocateIpv6AddressResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AllocateIpv6AddressBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AllocateIpv6Address(ctx context.Context, r soap.RoundTripper, req *types.AllocateIpv6Address) (*types.AllocateIpv6AddressResponse, error) {
    +	var reqBody, resBody AllocateIpv6AddressBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AnswerVMBody struct {
    +	Req    *types.AnswerVM         `xml:"urn:vim25 AnswerVM,omitempty"`
    +	Res    *types.AnswerVMResponse `xml:"urn:vim25 AnswerVMResponse,omitempty"`
    +	Fault_ *soap.Fault             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AnswerVMBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AnswerVM(ctx context.Context, r soap.RoundTripper, req *types.AnswerVM) (*types.AnswerVMResponse, error) {
    +	var reqBody, resBody AnswerVMBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ApplyEntitiesConfig_TaskBody struct {
    +	Req    *types.ApplyEntitiesConfig_Task         `xml:"urn:vim25 ApplyEntitiesConfig_Task,omitempty"`
    +	Res    *types.ApplyEntitiesConfig_TaskResponse `xml:"urn:vim25 ApplyEntitiesConfig_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ApplyEntitiesConfig_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ApplyEntitiesConfig_Task(ctx context.Context, r soap.RoundTripper, req *types.ApplyEntitiesConfig_Task) (*types.ApplyEntitiesConfig_TaskResponse, error) {
    +	var reqBody, resBody ApplyEntitiesConfig_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ApplyEvcModeVM_TaskBody struct {
    +	Req    *types.ApplyEvcModeVM_Task         `xml:"urn:vim25 ApplyEvcModeVM_Task,omitempty"`
    +	Res    *types.ApplyEvcModeVM_TaskResponse `xml:"urn:vim25 ApplyEvcModeVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ApplyEvcModeVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ApplyEvcModeVM_Task(ctx context.Context, r soap.RoundTripper, req *types.ApplyEvcModeVM_Task) (*types.ApplyEvcModeVM_TaskResponse, error) {
    +	var reqBody, resBody ApplyEvcModeVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ApplyHostConfig_TaskBody struct {
    +	Req    *types.ApplyHostConfig_Task         `xml:"urn:vim25 ApplyHostConfig_Task,omitempty"`
    +	Res    *types.ApplyHostConfig_TaskResponse `xml:"urn:vim25 ApplyHostConfig_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ApplyHostConfig_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ApplyHostConfig_Task(ctx context.Context, r soap.RoundTripper, req *types.ApplyHostConfig_Task) (*types.ApplyHostConfig_TaskResponse, error) {
    +	var reqBody, resBody ApplyHostConfig_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ApplyRecommendationBody struct {
    +	Req    *types.ApplyRecommendation         `xml:"urn:vim25 ApplyRecommendation,omitempty"`
    +	Res    *types.ApplyRecommendationResponse `xml:"urn:vim25 ApplyRecommendationResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ApplyRecommendationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ApplyRecommendation(ctx context.Context, r soap.RoundTripper, req *types.ApplyRecommendation) (*types.ApplyRecommendationResponse, error) {
    +	var reqBody, resBody ApplyRecommendationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ApplyStorageDrsRecommendationToPod_TaskBody struct {
    +	Req    *types.ApplyStorageDrsRecommendationToPod_Task         `xml:"urn:vim25 ApplyStorageDrsRecommendationToPod_Task,omitempty"`
    +	Res    *types.ApplyStorageDrsRecommendationToPod_TaskResponse `xml:"urn:vim25 ApplyStorageDrsRecommendationToPod_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ApplyStorageDrsRecommendationToPod_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ApplyStorageDrsRecommendationToPod_Task(ctx context.Context, r soap.RoundTripper, req *types.ApplyStorageDrsRecommendationToPod_Task) (*types.ApplyStorageDrsRecommendationToPod_TaskResponse, error) {
    +	var reqBody, resBody ApplyStorageDrsRecommendationToPod_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ApplyStorageDrsRecommendation_TaskBody struct {
    +	Req    *types.ApplyStorageDrsRecommendation_Task         `xml:"urn:vim25 ApplyStorageDrsRecommendation_Task,omitempty"`
    +	Res    *types.ApplyStorageDrsRecommendation_TaskResponse `xml:"urn:vim25 ApplyStorageDrsRecommendation_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ApplyStorageDrsRecommendation_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ApplyStorageDrsRecommendation_Task(ctx context.Context, r soap.RoundTripper, req *types.ApplyStorageDrsRecommendation_Task) (*types.ApplyStorageDrsRecommendation_TaskResponse, error) {
    +	var reqBody, resBody ApplyStorageDrsRecommendation_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AreAlarmActionsEnabledBody struct {
    +	Req    *types.AreAlarmActionsEnabled         `xml:"urn:vim25 AreAlarmActionsEnabled,omitempty"`
    +	Res    *types.AreAlarmActionsEnabledResponse `xml:"urn:vim25 AreAlarmActionsEnabledResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AreAlarmActionsEnabledBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AreAlarmActionsEnabled(ctx context.Context, r soap.RoundTripper, req *types.AreAlarmActionsEnabled) (*types.AreAlarmActionsEnabledResponse, error) {
    +	var reqBody, resBody AreAlarmActionsEnabledBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AssignUserToGroupBody struct {
    +	Req    *types.AssignUserToGroup         `xml:"urn:vim25 AssignUserToGroup,omitempty"`
    +	Res    *types.AssignUserToGroupResponse `xml:"urn:vim25 AssignUserToGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AssignUserToGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AssignUserToGroup(ctx context.Context, r soap.RoundTripper, req *types.AssignUserToGroup) (*types.AssignUserToGroupResponse, error) {
    +	var reqBody, resBody AssignUserToGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AssociateProfileBody struct {
    +	Req    *types.AssociateProfile         `xml:"urn:vim25 AssociateProfile,omitempty"`
    +	Res    *types.AssociateProfileResponse `xml:"urn:vim25 AssociateProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AssociateProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AssociateProfile(ctx context.Context, r soap.RoundTripper, req *types.AssociateProfile) (*types.AssociateProfileResponse, error) {
    +	var reqBody, resBody AssociateProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AttachDisk_TaskBody struct {
    +	Req    *types.AttachDisk_Task         `xml:"urn:vim25 AttachDisk_Task,omitempty"`
    +	Res    *types.AttachDisk_TaskResponse `xml:"urn:vim25 AttachDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AttachDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AttachDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.AttachDisk_Task) (*types.AttachDisk_TaskResponse, error) {
    +	var reqBody, resBody AttachDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AttachScsiLunBody struct {
    +	Req    *types.AttachScsiLun         `xml:"urn:vim25 AttachScsiLun,omitempty"`
    +	Res    *types.AttachScsiLunResponse `xml:"urn:vim25 AttachScsiLunResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AttachScsiLunBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AttachScsiLun(ctx context.Context, r soap.RoundTripper, req *types.AttachScsiLun) (*types.AttachScsiLunResponse, error) {
    +	var reqBody, resBody AttachScsiLunBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AttachScsiLunEx_TaskBody struct {
    +	Req    *types.AttachScsiLunEx_Task         `xml:"urn:vim25 AttachScsiLunEx_Task,omitempty"`
    +	Res    *types.AttachScsiLunEx_TaskResponse `xml:"urn:vim25 AttachScsiLunEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AttachScsiLunEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AttachScsiLunEx_Task(ctx context.Context, r soap.RoundTripper, req *types.AttachScsiLunEx_Task) (*types.AttachScsiLunEx_TaskResponse, error) {
    +	var reqBody, resBody AttachScsiLunEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AttachTagToVStorageObjectBody struct {
    +	Req    *types.AttachTagToVStorageObject         `xml:"urn:vim25 AttachTagToVStorageObject,omitempty"`
    +	Res    *types.AttachTagToVStorageObjectResponse `xml:"urn:vim25 AttachTagToVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AttachTagToVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AttachTagToVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.AttachTagToVStorageObject) (*types.AttachTagToVStorageObjectResponse, error) {
    +	var reqBody, resBody AttachTagToVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AttachVmfsExtentBody struct {
    +	Req    *types.AttachVmfsExtent         `xml:"urn:vim25 AttachVmfsExtent,omitempty"`
    +	Res    *types.AttachVmfsExtentResponse `xml:"urn:vim25 AttachVmfsExtentResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AttachVmfsExtentBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AttachVmfsExtent(ctx context.Context, r soap.RoundTripper, req *types.AttachVmfsExtent) (*types.AttachVmfsExtentResponse, error) {
    +	var reqBody, resBody AttachVmfsExtentBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AutoStartPowerOffBody struct {
    +	Req    *types.AutoStartPowerOff         `xml:"urn:vim25 AutoStartPowerOff,omitempty"`
    +	Res    *types.AutoStartPowerOffResponse `xml:"urn:vim25 AutoStartPowerOffResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AutoStartPowerOffBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AutoStartPowerOff(ctx context.Context, r soap.RoundTripper, req *types.AutoStartPowerOff) (*types.AutoStartPowerOffResponse, error) {
    +	var reqBody, resBody AutoStartPowerOffBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type AutoStartPowerOnBody struct {
    +	Req    *types.AutoStartPowerOn         `xml:"urn:vim25 AutoStartPowerOn,omitempty"`
    +	Res    *types.AutoStartPowerOnResponse `xml:"urn:vim25 AutoStartPowerOnResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *AutoStartPowerOnBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func AutoStartPowerOn(ctx context.Context, r soap.RoundTripper, req *types.AutoStartPowerOn) (*types.AutoStartPowerOnResponse, error) {
    +	var reqBody, resBody AutoStartPowerOnBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type BackupFirmwareConfigurationBody struct {
    +	Req    *types.BackupFirmwareConfiguration         `xml:"urn:vim25 BackupFirmwareConfiguration,omitempty"`
    +	Res    *types.BackupFirmwareConfigurationResponse `xml:"urn:vim25 BackupFirmwareConfigurationResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *BackupFirmwareConfigurationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func BackupFirmwareConfiguration(ctx context.Context, r soap.RoundTripper, req *types.BackupFirmwareConfiguration) (*types.BackupFirmwareConfigurationResponse, error) {
    +	var reqBody, resBody BackupFirmwareConfigurationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type BindVnicBody struct {
    +	Req    *types.BindVnic         `xml:"urn:vim25 BindVnic,omitempty"`
    +	Res    *types.BindVnicResponse `xml:"urn:vim25 BindVnicResponse,omitempty"`
    +	Fault_ *soap.Fault             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *BindVnicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func BindVnic(ctx context.Context, r soap.RoundTripper, req *types.BindVnic) (*types.BindVnicResponse, error) {
    +	var reqBody, resBody BindVnicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type BrowseDiagnosticLogBody struct {
    +	Req    *types.BrowseDiagnosticLog         `xml:"urn:vim25 BrowseDiagnosticLog,omitempty"`
    +	Res    *types.BrowseDiagnosticLogResponse `xml:"urn:vim25 BrowseDiagnosticLogResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *BrowseDiagnosticLogBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func BrowseDiagnosticLog(ctx context.Context, r soap.RoundTripper, req *types.BrowseDiagnosticLog) (*types.BrowseDiagnosticLogResponse, error) {
    +	var reqBody, resBody BrowseDiagnosticLogBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CanProvisionObjectsBody struct {
    +	Req    *types.CanProvisionObjects         `xml:"urn:vim25 CanProvisionObjects,omitempty"`
    +	Res    *types.CanProvisionObjectsResponse `xml:"urn:vim25 CanProvisionObjectsResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CanProvisionObjectsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CanProvisionObjects(ctx context.Context, r soap.RoundTripper, req *types.CanProvisionObjects) (*types.CanProvisionObjectsResponse, error) {
    +	var reqBody, resBody CanProvisionObjectsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CancelRecommendationBody struct {
    +	Req    *types.CancelRecommendation         `xml:"urn:vim25 CancelRecommendation,omitempty"`
    +	Res    *types.CancelRecommendationResponse `xml:"urn:vim25 CancelRecommendationResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CancelRecommendationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CancelRecommendation(ctx context.Context, r soap.RoundTripper, req *types.CancelRecommendation) (*types.CancelRecommendationResponse, error) {
    +	var reqBody, resBody CancelRecommendationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CancelRetrievePropertiesExBody struct {
    +	Req    *types.CancelRetrievePropertiesEx         `xml:"urn:vim25 CancelRetrievePropertiesEx,omitempty"`
    +	Res    *types.CancelRetrievePropertiesExResponse `xml:"urn:vim25 CancelRetrievePropertiesExResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CancelRetrievePropertiesExBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CancelRetrievePropertiesEx(ctx context.Context, r soap.RoundTripper, req *types.CancelRetrievePropertiesEx) (*types.CancelRetrievePropertiesExResponse, error) {
    +	var reqBody, resBody CancelRetrievePropertiesExBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CancelStorageDrsRecommendationBody struct {
    +	Req    *types.CancelStorageDrsRecommendation         `xml:"urn:vim25 CancelStorageDrsRecommendation,omitempty"`
    +	Res    *types.CancelStorageDrsRecommendationResponse `xml:"urn:vim25 CancelStorageDrsRecommendationResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CancelStorageDrsRecommendationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CancelStorageDrsRecommendation(ctx context.Context, r soap.RoundTripper, req *types.CancelStorageDrsRecommendation) (*types.CancelStorageDrsRecommendationResponse, error) {
    +	var reqBody, resBody CancelStorageDrsRecommendationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CancelTaskBody struct {
    +	Req    *types.CancelTask         `xml:"urn:vim25 CancelTask,omitempty"`
    +	Res    *types.CancelTaskResponse `xml:"urn:vim25 CancelTaskResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CancelTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CancelTask(ctx context.Context, r soap.RoundTripper, req *types.CancelTask) (*types.CancelTaskResponse, error) {
    +	var reqBody, resBody CancelTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CancelWaitForUpdatesBody struct {
    +	Req    *types.CancelWaitForUpdates         `xml:"urn:vim25 CancelWaitForUpdates,omitempty"`
    +	Res    *types.CancelWaitForUpdatesResponse `xml:"urn:vim25 CancelWaitForUpdatesResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CancelWaitForUpdatesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CancelWaitForUpdates(ctx context.Context, r soap.RoundTripper, req *types.CancelWaitForUpdates) (*types.CancelWaitForUpdatesResponse, error) {
    +	var reqBody, resBody CancelWaitForUpdatesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CertMgrRefreshCACertificatesAndCRLs_TaskBody struct {
    +	Req    *types.CertMgrRefreshCACertificatesAndCRLs_Task         `xml:"urn:vim25 CertMgrRefreshCACertificatesAndCRLs_Task,omitempty"`
    +	Res    *types.CertMgrRefreshCACertificatesAndCRLs_TaskResponse `xml:"urn:vim25 CertMgrRefreshCACertificatesAndCRLs_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CertMgrRefreshCACertificatesAndCRLs_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CertMgrRefreshCACertificatesAndCRLs_Task(ctx context.Context, r soap.RoundTripper, req *types.CertMgrRefreshCACertificatesAndCRLs_Task) (*types.CertMgrRefreshCACertificatesAndCRLs_TaskResponse, error) {
    +	var reqBody, resBody CertMgrRefreshCACertificatesAndCRLs_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CertMgrRefreshCertificates_TaskBody struct {
    +	Req    *types.CertMgrRefreshCertificates_Task         `xml:"urn:vim25 CertMgrRefreshCertificates_Task,omitempty"`
    +	Res    *types.CertMgrRefreshCertificates_TaskResponse `xml:"urn:vim25 CertMgrRefreshCertificates_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CertMgrRefreshCertificates_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CertMgrRefreshCertificates_Task(ctx context.Context, r soap.RoundTripper, req *types.CertMgrRefreshCertificates_Task) (*types.CertMgrRefreshCertificates_TaskResponse, error) {
    +	var reqBody, resBody CertMgrRefreshCertificates_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CertMgrRevokeCertificates_TaskBody struct {
    +	Req    *types.CertMgrRevokeCertificates_Task         `xml:"urn:vim25 CertMgrRevokeCertificates_Task,omitempty"`
    +	Res    *types.CertMgrRevokeCertificates_TaskResponse `xml:"urn:vim25 CertMgrRevokeCertificates_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CertMgrRevokeCertificates_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CertMgrRevokeCertificates_Task(ctx context.Context, r soap.RoundTripper, req *types.CertMgrRevokeCertificates_Task) (*types.CertMgrRevokeCertificates_TaskResponse, error) {
    +	var reqBody, resBody CertMgrRevokeCertificates_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ChangeAccessModeBody struct {
    +	Req    *types.ChangeAccessMode         `xml:"urn:vim25 ChangeAccessMode,omitempty"`
    +	Res    *types.ChangeAccessModeResponse `xml:"urn:vim25 ChangeAccessModeResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ChangeAccessModeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ChangeAccessMode(ctx context.Context, r soap.RoundTripper, req *types.ChangeAccessMode) (*types.ChangeAccessModeResponse, error) {
    +	var reqBody, resBody ChangeAccessModeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ChangeFileAttributesInGuestBody struct {
    +	Req    *types.ChangeFileAttributesInGuest         `xml:"urn:vim25 ChangeFileAttributesInGuest,omitempty"`
    +	Res    *types.ChangeFileAttributesInGuestResponse `xml:"urn:vim25 ChangeFileAttributesInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ChangeFileAttributesInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ChangeFileAttributesInGuest(ctx context.Context, r soap.RoundTripper, req *types.ChangeFileAttributesInGuest) (*types.ChangeFileAttributesInGuestResponse, error) {
    +	var reqBody, resBody ChangeFileAttributesInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ChangeKey_TaskBody struct {
    +	Req    *types.ChangeKey_Task         `xml:"urn:vim25 ChangeKey_Task,omitempty"`
    +	Res    *types.ChangeKey_TaskResponse `xml:"urn:vim25 ChangeKey_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ChangeKey_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ChangeKey_Task(ctx context.Context, r soap.RoundTripper, req *types.ChangeKey_Task) (*types.ChangeKey_TaskResponse, error) {
    +	var reqBody, resBody ChangeKey_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ChangeLockdownModeBody struct {
    +	Req    *types.ChangeLockdownMode         `xml:"urn:vim25 ChangeLockdownMode,omitempty"`
    +	Res    *types.ChangeLockdownModeResponse `xml:"urn:vim25 ChangeLockdownModeResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ChangeLockdownModeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ChangeLockdownMode(ctx context.Context, r soap.RoundTripper, req *types.ChangeLockdownMode) (*types.ChangeLockdownModeResponse, error) {
    +	var reqBody, resBody ChangeLockdownModeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ChangeNFSUserPasswordBody struct {
    +	Req    *types.ChangeNFSUserPassword         `xml:"urn:vim25 ChangeNFSUserPassword,omitempty"`
    +	Res    *types.ChangeNFSUserPasswordResponse `xml:"urn:vim25 ChangeNFSUserPasswordResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ChangeNFSUserPasswordBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ChangeNFSUserPassword(ctx context.Context, r soap.RoundTripper, req *types.ChangeNFSUserPassword) (*types.ChangeNFSUserPasswordResponse, error) {
    +	var reqBody, resBody ChangeNFSUserPasswordBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ChangeOwnerBody struct {
    +	Req    *types.ChangeOwner         `xml:"urn:vim25 ChangeOwner,omitempty"`
    +	Res    *types.ChangeOwnerResponse `xml:"urn:vim25 ChangeOwnerResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ChangeOwnerBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ChangeOwner(ctx context.Context, r soap.RoundTripper, req *types.ChangeOwner) (*types.ChangeOwnerResponse, error) {
    +	var reqBody, resBody ChangeOwnerBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckAddHostEvc_TaskBody struct {
    +	Req    *types.CheckAddHostEvc_Task         `xml:"urn:vim25 CheckAddHostEvc_Task,omitempty"`
    +	Res    *types.CheckAddHostEvc_TaskResponse `xml:"urn:vim25 CheckAddHostEvc_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckAddHostEvc_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckAddHostEvc_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckAddHostEvc_Task) (*types.CheckAddHostEvc_TaskResponse, error) {
    +	var reqBody, resBody CheckAddHostEvc_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckAnswerFileStatus_TaskBody struct {
    +	Req    *types.CheckAnswerFileStatus_Task         `xml:"urn:vim25 CheckAnswerFileStatus_Task,omitempty"`
    +	Res    *types.CheckAnswerFileStatus_TaskResponse `xml:"urn:vim25 CheckAnswerFileStatus_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckAnswerFileStatus_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckAnswerFileStatus_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckAnswerFileStatus_Task) (*types.CheckAnswerFileStatus_TaskResponse, error) {
    +	var reqBody, resBody CheckAnswerFileStatus_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckClone_TaskBody struct {
    +	Req    *types.CheckClone_Task         `xml:"urn:vim25 CheckClone_Task,omitempty"`
    +	Res    *types.CheckClone_TaskResponse `xml:"urn:vim25 CheckClone_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckClone_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckClone_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckClone_Task) (*types.CheckClone_TaskResponse, error) {
    +	var reqBody, resBody CheckClone_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckCompatibility_TaskBody struct {
    +	Req    *types.CheckCompatibility_Task         `xml:"urn:vim25 CheckCompatibility_Task,omitempty"`
    +	Res    *types.CheckCompatibility_TaskResponse `xml:"urn:vim25 CheckCompatibility_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckCompatibility_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckCompatibility_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckCompatibility_Task) (*types.CheckCompatibility_TaskResponse, error) {
    +	var reqBody, resBody CheckCompatibility_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckCompliance_TaskBody struct {
    +	Req    *types.CheckCompliance_Task         `xml:"urn:vim25 CheckCompliance_Task,omitempty"`
    +	Res    *types.CheckCompliance_TaskResponse `xml:"urn:vim25 CheckCompliance_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckCompliance_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckCompliance_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckCompliance_Task) (*types.CheckCompliance_TaskResponse, error) {
    +	var reqBody, resBody CheckCompliance_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckConfigureEvcMode_TaskBody struct {
    +	Req    *types.CheckConfigureEvcMode_Task         `xml:"urn:vim25 CheckConfigureEvcMode_Task,omitempty"`
    +	Res    *types.CheckConfigureEvcMode_TaskResponse `xml:"urn:vim25 CheckConfigureEvcMode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckConfigureEvcMode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckConfigureEvcMode_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckConfigureEvcMode_Task) (*types.CheckConfigureEvcMode_TaskResponse, error) {
    +	var reqBody, resBody CheckConfigureEvcMode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckCustomizationResourcesBody struct {
    +	Req    *types.CheckCustomizationResources         `xml:"urn:vim25 CheckCustomizationResources,omitempty"`
    +	Res    *types.CheckCustomizationResourcesResponse `xml:"urn:vim25 CheckCustomizationResourcesResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckCustomizationResourcesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckCustomizationResources(ctx context.Context, r soap.RoundTripper, req *types.CheckCustomizationResources) (*types.CheckCustomizationResourcesResponse, error) {
    +	var reqBody, resBody CheckCustomizationResourcesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckCustomizationSpecBody struct {
    +	Req    *types.CheckCustomizationSpec         `xml:"urn:vim25 CheckCustomizationSpec,omitempty"`
    +	Res    *types.CheckCustomizationSpecResponse `xml:"urn:vim25 CheckCustomizationSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckCustomizationSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckCustomizationSpec(ctx context.Context, r soap.RoundTripper, req *types.CheckCustomizationSpec) (*types.CheckCustomizationSpecResponse, error) {
    +	var reqBody, resBody CheckCustomizationSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckForUpdatesBody struct {
    +	Req    *types.CheckForUpdates         `xml:"urn:vim25 CheckForUpdates,omitempty"`
    +	Res    *types.CheckForUpdatesResponse `xml:"urn:vim25 CheckForUpdatesResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckForUpdatesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckForUpdates(ctx context.Context, r soap.RoundTripper, req *types.CheckForUpdates) (*types.CheckForUpdatesResponse, error) {
    +	var reqBody, resBody CheckForUpdatesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckHostPatch_TaskBody struct {
    +	Req    *types.CheckHostPatch_Task         `xml:"urn:vim25 CheckHostPatch_Task,omitempty"`
    +	Res    *types.CheckHostPatch_TaskResponse `xml:"urn:vim25 CheckHostPatch_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckHostPatch_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckHostPatch_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckHostPatch_Task) (*types.CheckHostPatch_TaskResponse, error) {
    +	var reqBody, resBody CheckHostPatch_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckInstantClone_TaskBody struct {
    +	Req    *types.CheckInstantClone_Task         `xml:"urn:vim25 CheckInstantClone_Task,omitempty"`
    +	Res    *types.CheckInstantClone_TaskResponse `xml:"urn:vim25 CheckInstantClone_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckInstantClone_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckInstantClone_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckInstantClone_Task) (*types.CheckInstantClone_TaskResponse, error) {
    +	var reqBody, resBody CheckInstantClone_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckLicenseFeatureBody struct {
    +	Req    *types.CheckLicenseFeature         `xml:"urn:vim25 CheckLicenseFeature,omitempty"`
    +	Res    *types.CheckLicenseFeatureResponse `xml:"urn:vim25 CheckLicenseFeatureResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckLicenseFeatureBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckLicenseFeature(ctx context.Context, r soap.RoundTripper, req *types.CheckLicenseFeature) (*types.CheckLicenseFeatureResponse, error) {
    +	var reqBody, resBody CheckLicenseFeatureBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckMigrate_TaskBody struct {
    +	Req    *types.CheckMigrate_Task         `xml:"urn:vim25 CheckMigrate_Task,omitempty"`
    +	Res    *types.CheckMigrate_TaskResponse `xml:"urn:vim25 CheckMigrate_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckMigrate_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckMigrate_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckMigrate_Task) (*types.CheckMigrate_TaskResponse, error) {
    +	var reqBody, resBody CheckMigrate_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckPowerOn_TaskBody struct {
    +	Req    *types.CheckPowerOn_Task         `xml:"urn:vim25 CheckPowerOn_Task,omitempty"`
    +	Res    *types.CheckPowerOn_TaskResponse `xml:"urn:vim25 CheckPowerOn_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckPowerOn_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckPowerOn_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckPowerOn_Task) (*types.CheckPowerOn_TaskResponse, error) {
    +	var reqBody, resBody CheckPowerOn_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckProfileCompliance_TaskBody struct {
    +	Req    *types.CheckProfileCompliance_Task         `xml:"urn:vim25 CheckProfileCompliance_Task,omitempty"`
    +	Res    *types.CheckProfileCompliance_TaskResponse `xml:"urn:vim25 CheckProfileCompliance_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckProfileCompliance_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckProfileCompliance_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckProfileCompliance_Task) (*types.CheckProfileCompliance_TaskResponse, error) {
    +	var reqBody, resBody CheckProfileCompliance_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckRelocate_TaskBody struct {
    +	Req    *types.CheckRelocate_Task         `xml:"urn:vim25 CheckRelocate_Task,omitempty"`
    +	Res    *types.CheckRelocate_TaskResponse `xml:"urn:vim25 CheckRelocate_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckRelocate_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckRelocate_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckRelocate_Task) (*types.CheckRelocate_TaskResponse, error) {
    +	var reqBody, resBody CheckRelocate_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CheckVmConfig_TaskBody struct {
    +	Req    *types.CheckVmConfig_Task         `xml:"urn:vim25 CheckVmConfig_Task,omitempty"`
    +	Res    *types.CheckVmConfig_TaskResponse `xml:"urn:vim25 CheckVmConfig_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CheckVmConfig_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CheckVmConfig_Task(ctx context.Context, r soap.RoundTripper, req *types.CheckVmConfig_Task) (*types.CheckVmConfig_TaskResponse, error) {
    +	var reqBody, resBody CheckVmConfig_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ClearComplianceStatusBody struct {
    +	Req    *types.ClearComplianceStatus         `xml:"urn:vim25 ClearComplianceStatus,omitempty"`
    +	Res    *types.ClearComplianceStatusResponse `xml:"urn:vim25 ClearComplianceStatusResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ClearComplianceStatusBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ClearComplianceStatus(ctx context.Context, r soap.RoundTripper, req *types.ClearComplianceStatus) (*types.ClearComplianceStatusResponse, error) {
    +	var reqBody, resBody ClearComplianceStatusBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ClearNFSUserBody struct {
    +	Req    *types.ClearNFSUser         `xml:"urn:vim25 ClearNFSUser,omitempty"`
    +	Res    *types.ClearNFSUserResponse `xml:"urn:vim25 ClearNFSUserResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ClearNFSUserBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ClearNFSUser(ctx context.Context, r soap.RoundTripper, req *types.ClearNFSUser) (*types.ClearNFSUserResponse, error) {
    +	var reqBody, resBody ClearNFSUserBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ClearSystemEventLogBody struct {
    +	Req    *types.ClearSystemEventLog         `xml:"urn:vim25 ClearSystemEventLog,omitempty"`
    +	Res    *types.ClearSystemEventLogResponse `xml:"urn:vim25 ClearSystemEventLogResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ClearSystemEventLogBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ClearSystemEventLog(ctx context.Context, r soap.RoundTripper, req *types.ClearSystemEventLog) (*types.ClearSystemEventLogResponse, error) {
    +	var reqBody, resBody ClearSystemEventLogBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ClearTriggeredAlarmsBody struct {
    +	Req    *types.ClearTriggeredAlarms         `xml:"urn:vim25 ClearTriggeredAlarms,omitempty"`
    +	Res    *types.ClearTriggeredAlarmsResponse `xml:"urn:vim25 ClearTriggeredAlarmsResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ClearTriggeredAlarmsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ClearTriggeredAlarms(ctx context.Context, r soap.RoundTripper, req *types.ClearTriggeredAlarms) (*types.ClearTriggeredAlarmsResponse, error) {
    +	var reqBody, resBody ClearTriggeredAlarmsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ClearVStorageObjectControlFlagsBody struct {
    +	Req    *types.ClearVStorageObjectControlFlags         `xml:"urn:vim25 ClearVStorageObjectControlFlags,omitempty"`
    +	Res    *types.ClearVStorageObjectControlFlagsResponse `xml:"urn:vim25 ClearVStorageObjectControlFlagsResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ClearVStorageObjectControlFlagsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ClearVStorageObjectControlFlags(ctx context.Context, r soap.RoundTripper, req *types.ClearVStorageObjectControlFlags) (*types.ClearVStorageObjectControlFlagsResponse, error) {
    +	var reqBody, resBody ClearVStorageObjectControlFlagsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CloneSessionBody struct {
    +	Req    *types.CloneSession         `xml:"urn:vim25 CloneSession,omitempty"`
    +	Res    *types.CloneSessionResponse `xml:"urn:vim25 CloneSessionResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CloneSessionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CloneSession(ctx context.Context, r soap.RoundTripper, req *types.CloneSession) (*types.CloneSessionResponse, error) {
    +	var reqBody, resBody CloneSessionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CloneVApp_TaskBody struct {
    +	Req    *types.CloneVApp_Task         `xml:"urn:vim25 CloneVApp_Task,omitempty"`
    +	Res    *types.CloneVApp_TaskResponse `xml:"urn:vim25 CloneVApp_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CloneVApp_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CloneVApp_Task(ctx context.Context, r soap.RoundTripper, req *types.CloneVApp_Task) (*types.CloneVApp_TaskResponse, error) {
    +	var reqBody, resBody CloneVApp_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CloneVM_TaskBody struct {
    +	Req    *types.CloneVM_Task         `xml:"urn:vim25 CloneVM_Task,omitempty"`
    +	Res    *types.CloneVM_TaskResponse `xml:"urn:vim25 CloneVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CloneVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CloneVM_Task(ctx context.Context, r soap.RoundTripper, req *types.CloneVM_Task) (*types.CloneVM_TaskResponse, error) {
    +	var reqBody, resBody CloneVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CloneVStorageObject_TaskBody struct {
    +	Req    *types.CloneVStorageObject_Task         `xml:"urn:vim25 CloneVStorageObject_Task,omitempty"`
    +	Res    *types.CloneVStorageObject_TaskResponse `xml:"urn:vim25 CloneVStorageObject_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CloneVStorageObject_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CloneVStorageObject_Task(ctx context.Context, r soap.RoundTripper, req *types.CloneVStorageObject_Task) (*types.CloneVStorageObject_TaskResponse, error) {
    +	var reqBody, resBody CloneVStorageObject_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CloseInventoryViewFolderBody struct {
    +	Req    *types.CloseInventoryViewFolder         `xml:"urn:vim25 CloseInventoryViewFolder,omitempty"`
    +	Res    *types.CloseInventoryViewFolderResponse `xml:"urn:vim25 CloseInventoryViewFolderResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CloseInventoryViewFolderBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CloseInventoryViewFolder(ctx context.Context, r soap.RoundTripper, req *types.CloseInventoryViewFolder) (*types.CloseInventoryViewFolderResponse, error) {
    +	var reqBody, resBody CloseInventoryViewFolderBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ClusterEnterMaintenanceModeBody struct {
    +	Req    *types.ClusterEnterMaintenanceMode         `xml:"urn:vim25 ClusterEnterMaintenanceMode,omitempty"`
    +	Res    *types.ClusterEnterMaintenanceModeResponse `xml:"urn:vim25 ClusterEnterMaintenanceModeResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ClusterEnterMaintenanceModeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ClusterEnterMaintenanceMode(ctx context.Context, r soap.RoundTripper, req *types.ClusterEnterMaintenanceMode) (*types.ClusterEnterMaintenanceModeResponse, error) {
    +	var reqBody, resBody ClusterEnterMaintenanceModeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CompositeHostProfile_TaskBody struct {
    +	Req    *types.CompositeHostProfile_Task         `xml:"urn:vim25 CompositeHostProfile_Task,omitempty"`
    +	Res    *types.CompositeHostProfile_TaskResponse `xml:"urn:vim25 CompositeHostProfile_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CompositeHostProfile_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CompositeHostProfile_Task(ctx context.Context, r soap.RoundTripper, req *types.CompositeHostProfile_Task) (*types.CompositeHostProfile_TaskResponse, error) {
    +	var reqBody, resBody CompositeHostProfile_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ComputeDiskPartitionInfoBody struct {
    +	Req    *types.ComputeDiskPartitionInfo         `xml:"urn:vim25 ComputeDiskPartitionInfo,omitempty"`
    +	Res    *types.ComputeDiskPartitionInfoResponse `xml:"urn:vim25 ComputeDiskPartitionInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ComputeDiskPartitionInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ComputeDiskPartitionInfo(ctx context.Context, r soap.RoundTripper, req *types.ComputeDiskPartitionInfo) (*types.ComputeDiskPartitionInfoResponse, error) {
    +	var reqBody, resBody ComputeDiskPartitionInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ComputeDiskPartitionInfoForResizeBody struct {
    +	Req    *types.ComputeDiskPartitionInfoForResize         `xml:"urn:vim25 ComputeDiskPartitionInfoForResize,omitempty"`
    +	Res    *types.ComputeDiskPartitionInfoForResizeResponse `xml:"urn:vim25 ComputeDiskPartitionInfoForResizeResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ComputeDiskPartitionInfoForResizeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ComputeDiskPartitionInfoForResize(ctx context.Context, r soap.RoundTripper, req *types.ComputeDiskPartitionInfoForResize) (*types.ComputeDiskPartitionInfoForResizeResponse, error) {
    +	var reqBody, resBody ComputeDiskPartitionInfoForResizeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureCryptoKeyBody struct {
    +	Req    *types.ConfigureCryptoKey         `xml:"urn:vim25 ConfigureCryptoKey,omitempty"`
    +	Res    *types.ConfigureCryptoKeyResponse `xml:"urn:vim25 ConfigureCryptoKeyResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureCryptoKeyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureCryptoKey(ctx context.Context, r soap.RoundTripper, req *types.ConfigureCryptoKey) (*types.ConfigureCryptoKeyResponse, error) {
    +	var reqBody, resBody ConfigureCryptoKeyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureDatastoreIORM_TaskBody struct {
    +	Req    *types.ConfigureDatastoreIORM_Task         `xml:"urn:vim25 ConfigureDatastoreIORM_Task,omitempty"`
    +	Res    *types.ConfigureDatastoreIORM_TaskResponse `xml:"urn:vim25 ConfigureDatastoreIORM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureDatastoreIORM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureDatastoreIORM_Task(ctx context.Context, r soap.RoundTripper, req *types.ConfigureDatastoreIORM_Task) (*types.ConfigureDatastoreIORM_TaskResponse, error) {
    +	var reqBody, resBody ConfigureDatastoreIORM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureDatastorePrincipalBody struct {
    +	Req    *types.ConfigureDatastorePrincipal         `xml:"urn:vim25 ConfigureDatastorePrincipal,omitempty"`
    +	Res    *types.ConfigureDatastorePrincipalResponse `xml:"urn:vim25 ConfigureDatastorePrincipalResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureDatastorePrincipalBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureDatastorePrincipal(ctx context.Context, r soap.RoundTripper, req *types.ConfigureDatastorePrincipal) (*types.ConfigureDatastorePrincipalResponse, error) {
    +	var reqBody, resBody ConfigureDatastorePrincipalBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureEvcMode_TaskBody struct {
    +	Req    *types.ConfigureEvcMode_Task         `xml:"urn:vim25 ConfigureEvcMode_Task,omitempty"`
    +	Res    *types.ConfigureEvcMode_TaskResponse `xml:"urn:vim25 ConfigureEvcMode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureEvcMode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureEvcMode_Task(ctx context.Context, r soap.RoundTripper, req *types.ConfigureEvcMode_Task) (*types.ConfigureEvcMode_TaskResponse, error) {
    +	var reqBody, resBody ConfigureEvcMode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureHostCache_TaskBody struct {
    +	Req    *types.ConfigureHostCache_Task         `xml:"urn:vim25 ConfigureHostCache_Task,omitempty"`
    +	Res    *types.ConfigureHostCache_TaskResponse `xml:"urn:vim25 ConfigureHostCache_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureHostCache_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureHostCache_Task(ctx context.Context, r soap.RoundTripper, req *types.ConfigureHostCache_Task) (*types.ConfigureHostCache_TaskResponse, error) {
    +	var reqBody, resBody ConfigureHostCache_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureLicenseSourceBody struct {
    +	Req    *types.ConfigureLicenseSource         `xml:"urn:vim25 ConfigureLicenseSource,omitempty"`
    +	Res    *types.ConfigureLicenseSourceResponse `xml:"urn:vim25 ConfigureLicenseSourceResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureLicenseSourceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureLicenseSource(ctx context.Context, r soap.RoundTripper, req *types.ConfigureLicenseSource) (*types.ConfigureLicenseSourceResponse, error) {
    +	var reqBody, resBody ConfigureLicenseSourceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigurePowerPolicyBody struct {
    +	Req    *types.ConfigurePowerPolicy         `xml:"urn:vim25 ConfigurePowerPolicy,omitempty"`
    +	Res    *types.ConfigurePowerPolicyResponse `xml:"urn:vim25 ConfigurePowerPolicyResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigurePowerPolicyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigurePowerPolicy(ctx context.Context, r soap.RoundTripper, req *types.ConfigurePowerPolicy) (*types.ConfigurePowerPolicyResponse, error) {
    +	var reqBody, resBody ConfigurePowerPolicyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureStorageDrsForPod_TaskBody struct {
    +	Req    *types.ConfigureStorageDrsForPod_Task         `xml:"urn:vim25 ConfigureStorageDrsForPod_Task,omitempty"`
    +	Res    *types.ConfigureStorageDrsForPod_TaskResponse `xml:"urn:vim25 ConfigureStorageDrsForPod_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureStorageDrsForPod_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureStorageDrsForPod_Task(ctx context.Context, r soap.RoundTripper, req *types.ConfigureStorageDrsForPod_Task) (*types.ConfigureStorageDrsForPod_TaskResponse, error) {
    +	var reqBody, resBody ConfigureStorageDrsForPod_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureVFlashResourceEx_TaskBody struct {
    +	Req    *types.ConfigureVFlashResourceEx_Task         `xml:"urn:vim25 ConfigureVFlashResourceEx_Task,omitempty"`
    +	Res    *types.ConfigureVFlashResourceEx_TaskResponse `xml:"urn:vim25 ConfigureVFlashResourceEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureVFlashResourceEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureVFlashResourceEx_Task(ctx context.Context, r soap.RoundTripper, req *types.ConfigureVFlashResourceEx_Task) (*types.ConfigureVFlashResourceEx_TaskResponse, error) {
    +	var reqBody, resBody ConfigureVFlashResourceEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConsolidateVMDisks_TaskBody struct {
    +	Req    *types.ConsolidateVMDisks_Task         `xml:"urn:vim25 ConsolidateVMDisks_Task,omitempty"`
    +	Res    *types.ConsolidateVMDisks_TaskResponse `xml:"urn:vim25 ConsolidateVMDisks_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConsolidateVMDisks_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConsolidateVMDisks_Task(ctx context.Context, r soap.RoundTripper, req *types.ConsolidateVMDisks_Task) (*types.ConsolidateVMDisks_TaskResponse, error) {
    +	var reqBody, resBody ConsolidateVMDisks_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ContinueRetrievePropertiesExBody struct {
    +	Req    *types.ContinueRetrievePropertiesEx         `xml:"urn:vim25 ContinueRetrievePropertiesEx,omitempty"`
    +	Res    *types.ContinueRetrievePropertiesExResponse `xml:"urn:vim25 ContinueRetrievePropertiesExResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ContinueRetrievePropertiesExBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ContinueRetrievePropertiesEx(ctx context.Context, r soap.RoundTripper, req *types.ContinueRetrievePropertiesEx) (*types.ContinueRetrievePropertiesExResponse, error) {
    +	var reqBody, resBody ContinueRetrievePropertiesExBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConvertNamespacePathToUuidPathBody struct {
    +	Req    *types.ConvertNamespacePathToUuidPath         `xml:"urn:vim25 ConvertNamespacePathToUuidPath,omitempty"`
    +	Res    *types.ConvertNamespacePathToUuidPathResponse `xml:"urn:vim25 ConvertNamespacePathToUuidPathResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConvertNamespacePathToUuidPathBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConvertNamespacePathToUuidPath(ctx context.Context, r soap.RoundTripper, req *types.ConvertNamespacePathToUuidPath) (*types.ConvertNamespacePathToUuidPathResponse, error) {
    +	var reqBody, resBody ConvertNamespacePathToUuidPathBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CopyDatastoreFile_TaskBody struct {
    +	Req    *types.CopyDatastoreFile_Task         `xml:"urn:vim25 CopyDatastoreFile_Task,omitempty"`
    +	Res    *types.CopyDatastoreFile_TaskResponse `xml:"urn:vim25 CopyDatastoreFile_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CopyDatastoreFile_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CopyDatastoreFile_Task(ctx context.Context, r soap.RoundTripper, req *types.CopyDatastoreFile_Task) (*types.CopyDatastoreFile_TaskResponse, error) {
    +	var reqBody, resBody CopyDatastoreFile_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CopyVirtualDisk_TaskBody struct {
    +	Req    *types.CopyVirtualDisk_Task         `xml:"urn:vim25 CopyVirtualDisk_Task,omitempty"`
    +	Res    *types.CopyVirtualDisk_TaskResponse `xml:"urn:vim25 CopyVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CopyVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CopyVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.CopyVirtualDisk_Task) (*types.CopyVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody CopyVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateAlarmBody struct {
    +	Req    *types.CreateAlarm         `xml:"urn:vim25 CreateAlarm,omitempty"`
    +	Res    *types.CreateAlarmResponse `xml:"urn:vim25 CreateAlarmResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateAlarmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateAlarm(ctx context.Context, r soap.RoundTripper, req *types.CreateAlarm) (*types.CreateAlarmResponse, error) {
    +	var reqBody, resBody CreateAlarmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateChildVM_TaskBody struct {
    +	Req    *types.CreateChildVM_Task         `xml:"urn:vim25 CreateChildVM_Task,omitempty"`
    +	Res    *types.CreateChildVM_TaskResponse `xml:"urn:vim25 CreateChildVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateChildVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateChildVM_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateChildVM_Task) (*types.CreateChildVM_TaskResponse, error) {
    +	var reqBody, resBody CreateChildVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateClusterBody struct {
    +	Req    *types.CreateCluster         `xml:"urn:vim25 CreateCluster,omitempty"`
    +	Res    *types.CreateClusterResponse `xml:"urn:vim25 CreateClusterResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateClusterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateCluster(ctx context.Context, r soap.RoundTripper, req *types.CreateCluster) (*types.CreateClusterResponse, error) {
    +	var reqBody, resBody CreateClusterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateClusterExBody struct {
    +	Req    *types.CreateClusterEx         `xml:"urn:vim25 CreateClusterEx,omitempty"`
    +	Res    *types.CreateClusterExResponse `xml:"urn:vim25 CreateClusterExResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateClusterExBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateClusterEx(ctx context.Context, r soap.RoundTripper, req *types.CreateClusterEx) (*types.CreateClusterExResponse, error) {
    +	var reqBody, resBody CreateClusterExBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateCollectorForEventsBody struct {
    +	Req    *types.CreateCollectorForEvents         `xml:"urn:vim25 CreateCollectorForEvents,omitempty"`
    +	Res    *types.CreateCollectorForEventsResponse `xml:"urn:vim25 CreateCollectorForEventsResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateCollectorForEventsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateCollectorForEvents(ctx context.Context, r soap.RoundTripper, req *types.CreateCollectorForEvents) (*types.CreateCollectorForEventsResponse, error) {
    +	var reqBody, resBody CreateCollectorForEventsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateCollectorForTasksBody struct {
    +	Req    *types.CreateCollectorForTasks         `xml:"urn:vim25 CreateCollectorForTasks,omitempty"`
    +	Res    *types.CreateCollectorForTasksResponse `xml:"urn:vim25 CreateCollectorForTasksResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateCollectorForTasksBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateCollectorForTasks(ctx context.Context, r soap.RoundTripper, req *types.CreateCollectorForTasks) (*types.CreateCollectorForTasksResponse, error) {
    +	var reqBody, resBody CreateCollectorForTasksBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateContainerViewBody struct {
    +	Req    *types.CreateContainerView         `xml:"urn:vim25 CreateContainerView,omitempty"`
    +	Res    *types.CreateContainerViewResponse `xml:"urn:vim25 CreateContainerViewResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateContainerViewBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateContainerView(ctx context.Context, r soap.RoundTripper, req *types.CreateContainerView) (*types.CreateContainerViewResponse, error) {
    +	var reqBody, resBody CreateContainerViewBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateCustomizationSpecBody struct {
    +	Req    *types.CreateCustomizationSpec         `xml:"urn:vim25 CreateCustomizationSpec,omitempty"`
    +	Res    *types.CreateCustomizationSpecResponse `xml:"urn:vim25 CreateCustomizationSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateCustomizationSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateCustomizationSpec(ctx context.Context, r soap.RoundTripper, req *types.CreateCustomizationSpec) (*types.CreateCustomizationSpecResponse, error) {
    +	var reqBody, resBody CreateCustomizationSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDVPortgroup_TaskBody struct {
    +	Req    *types.CreateDVPortgroup_Task         `xml:"urn:vim25 CreateDVPortgroup_Task,omitempty"`
    +	Res    *types.CreateDVPortgroup_TaskResponse `xml:"urn:vim25 CreateDVPortgroup_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDVPortgroup_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDVPortgroup_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateDVPortgroup_Task) (*types.CreateDVPortgroup_TaskResponse, error) {
    +	var reqBody, resBody CreateDVPortgroup_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDVS_TaskBody struct {
    +	Req    *types.CreateDVS_Task         `xml:"urn:vim25 CreateDVS_Task,omitempty"`
    +	Res    *types.CreateDVS_TaskResponse `xml:"urn:vim25 CreateDVS_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDVS_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDVS_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateDVS_Task) (*types.CreateDVS_TaskResponse, error) {
    +	var reqBody, resBody CreateDVS_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDatacenterBody struct {
    +	Req    *types.CreateDatacenter         `xml:"urn:vim25 CreateDatacenter,omitempty"`
    +	Res    *types.CreateDatacenterResponse `xml:"urn:vim25 CreateDatacenterResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDatacenterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDatacenter(ctx context.Context, r soap.RoundTripper, req *types.CreateDatacenter) (*types.CreateDatacenterResponse, error) {
    +	var reqBody, resBody CreateDatacenterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDefaultProfileBody struct {
    +	Req    *types.CreateDefaultProfile         `xml:"urn:vim25 CreateDefaultProfile,omitempty"`
    +	Res    *types.CreateDefaultProfileResponse `xml:"urn:vim25 CreateDefaultProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDefaultProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDefaultProfile(ctx context.Context, r soap.RoundTripper, req *types.CreateDefaultProfile) (*types.CreateDefaultProfileResponse, error) {
    +	var reqBody, resBody CreateDefaultProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDescriptorBody struct {
    +	Req    *types.CreateDescriptor         `xml:"urn:vim25 CreateDescriptor,omitempty"`
    +	Res    *types.CreateDescriptorResponse `xml:"urn:vim25 CreateDescriptorResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDescriptorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDescriptor(ctx context.Context, r soap.RoundTripper, req *types.CreateDescriptor) (*types.CreateDescriptorResponse, error) {
    +	var reqBody, resBody CreateDescriptorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDiagnosticPartitionBody struct {
    +	Req    *types.CreateDiagnosticPartition         `xml:"urn:vim25 CreateDiagnosticPartition,omitempty"`
    +	Res    *types.CreateDiagnosticPartitionResponse `xml:"urn:vim25 CreateDiagnosticPartitionResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDiagnosticPartitionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDiagnosticPartition(ctx context.Context, r soap.RoundTripper, req *types.CreateDiagnosticPartition) (*types.CreateDiagnosticPartitionResponse, error) {
    +	var reqBody, resBody CreateDiagnosticPartitionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDirectoryBody struct {
    +	Req    *types.CreateDirectory         `xml:"urn:vim25 CreateDirectory,omitempty"`
    +	Res    *types.CreateDirectoryResponse `xml:"urn:vim25 CreateDirectoryResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDirectoryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDirectory(ctx context.Context, r soap.RoundTripper, req *types.CreateDirectory) (*types.CreateDirectoryResponse, error) {
    +	var reqBody, resBody CreateDirectoryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDiskFromSnapshot_TaskBody struct {
    +	Req    *types.CreateDiskFromSnapshot_Task         `xml:"urn:vim25 CreateDiskFromSnapshot_Task,omitempty"`
    +	Res    *types.CreateDiskFromSnapshot_TaskResponse `xml:"urn:vim25 CreateDiskFromSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDiskFromSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDiskFromSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateDiskFromSnapshot_Task) (*types.CreateDiskFromSnapshot_TaskResponse, error) {
    +	var reqBody, resBody CreateDiskFromSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateDisk_TaskBody struct {
    +	Req    *types.CreateDisk_Task         `xml:"urn:vim25 CreateDisk_Task,omitempty"`
    +	Res    *types.CreateDisk_TaskResponse `xml:"urn:vim25 CreateDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateDisk_Task) (*types.CreateDisk_TaskResponse, error) {
    +	var reqBody, resBody CreateDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateFilterBody struct {
    +	Req    *types.CreateFilter         `xml:"urn:vim25 CreateFilter,omitempty"`
    +	Res    *types.CreateFilterResponse `xml:"urn:vim25 CreateFilterResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateFilterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateFilter(ctx context.Context, r soap.RoundTripper, req *types.CreateFilter) (*types.CreateFilterResponse, error) {
    +	var reqBody, resBody CreateFilterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateFolderBody struct {
    +	Req    *types.CreateFolder         `xml:"urn:vim25 CreateFolder,omitempty"`
    +	Res    *types.CreateFolderResponse `xml:"urn:vim25 CreateFolderResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateFolderBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateFolder(ctx context.Context, r soap.RoundTripper, req *types.CreateFolder) (*types.CreateFolderResponse, error) {
    +	var reqBody, resBody CreateFolderBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateGroupBody struct {
    +	Req    *types.CreateGroup         `xml:"urn:vim25 CreateGroup,omitempty"`
    +	Res    *types.CreateGroupResponse `xml:"urn:vim25 CreateGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateGroup(ctx context.Context, r soap.RoundTripper, req *types.CreateGroup) (*types.CreateGroupResponse, error) {
    +	var reqBody, resBody CreateGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateImportSpecBody struct {
    +	Req    *types.CreateImportSpec         `xml:"urn:vim25 CreateImportSpec,omitempty"`
    +	Res    *types.CreateImportSpecResponse `xml:"urn:vim25 CreateImportSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateImportSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateImportSpec(ctx context.Context, r soap.RoundTripper, req *types.CreateImportSpec) (*types.CreateImportSpecResponse, error) {
    +	var reqBody, resBody CreateImportSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateInventoryViewBody struct {
    +	Req    *types.CreateInventoryView         `xml:"urn:vim25 CreateInventoryView,omitempty"`
    +	Res    *types.CreateInventoryViewResponse `xml:"urn:vim25 CreateInventoryViewResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateInventoryViewBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateInventoryView(ctx context.Context, r soap.RoundTripper, req *types.CreateInventoryView) (*types.CreateInventoryViewResponse, error) {
    +	var reqBody, resBody CreateInventoryViewBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateIpPoolBody struct {
    +	Req    *types.CreateIpPool         `xml:"urn:vim25 CreateIpPool,omitempty"`
    +	Res    *types.CreateIpPoolResponse `xml:"urn:vim25 CreateIpPoolResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateIpPoolBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateIpPool(ctx context.Context, r soap.RoundTripper, req *types.CreateIpPool) (*types.CreateIpPoolResponse, error) {
    +	var reqBody, resBody CreateIpPoolBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateListViewBody struct {
    +	Req    *types.CreateListView         `xml:"urn:vim25 CreateListView,omitempty"`
    +	Res    *types.CreateListViewResponse `xml:"urn:vim25 CreateListViewResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateListViewBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateListView(ctx context.Context, r soap.RoundTripper, req *types.CreateListView) (*types.CreateListViewResponse, error) {
    +	var reqBody, resBody CreateListViewBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateListViewFromViewBody struct {
    +	Req    *types.CreateListViewFromView         `xml:"urn:vim25 CreateListViewFromView,omitempty"`
    +	Res    *types.CreateListViewFromViewResponse `xml:"urn:vim25 CreateListViewFromViewResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateListViewFromViewBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateListViewFromView(ctx context.Context, r soap.RoundTripper, req *types.CreateListViewFromView) (*types.CreateListViewFromViewResponse, error) {
    +	var reqBody, resBody CreateListViewFromViewBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateLocalDatastoreBody struct {
    +	Req    *types.CreateLocalDatastore         `xml:"urn:vim25 CreateLocalDatastore,omitempty"`
    +	Res    *types.CreateLocalDatastoreResponse `xml:"urn:vim25 CreateLocalDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateLocalDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateLocalDatastore(ctx context.Context, r soap.RoundTripper, req *types.CreateLocalDatastore) (*types.CreateLocalDatastoreResponse, error) {
    +	var reqBody, resBody CreateLocalDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateNasDatastoreBody struct {
    +	Req    *types.CreateNasDatastore         `xml:"urn:vim25 CreateNasDatastore,omitempty"`
    +	Res    *types.CreateNasDatastoreResponse `xml:"urn:vim25 CreateNasDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateNasDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateNasDatastore(ctx context.Context, r soap.RoundTripper, req *types.CreateNasDatastore) (*types.CreateNasDatastoreResponse, error) {
    +	var reqBody, resBody CreateNasDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateNvdimmNamespace_TaskBody struct {
    +	Req    *types.CreateNvdimmNamespace_Task         `xml:"urn:vim25 CreateNvdimmNamespace_Task,omitempty"`
    +	Res    *types.CreateNvdimmNamespace_TaskResponse `xml:"urn:vim25 CreateNvdimmNamespace_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateNvdimmNamespace_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateNvdimmNamespace_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateNvdimmNamespace_Task) (*types.CreateNvdimmNamespace_TaskResponse, error) {
    +	var reqBody, resBody CreateNvdimmNamespace_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateObjectScheduledTaskBody struct {
    +	Req    *types.CreateObjectScheduledTask         `xml:"urn:vim25 CreateObjectScheduledTask,omitempty"`
    +	Res    *types.CreateObjectScheduledTaskResponse `xml:"urn:vim25 CreateObjectScheduledTaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateObjectScheduledTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateObjectScheduledTask(ctx context.Context, r soap.RoundTripper, req *types.CreateObjectScheduledTask) (*types.CreateObjectScheduledTaskResponse, error) {
    +	var reqBody, resBody CreateObjectScheduledTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreatePerfIntervalBody struct {
    +	Req    *types.CreatePerfInterval         `xml:"urn:vim25 CreatePerfInterval,omitempty"`
    +	Res    *types.CreatePerfIntervalResponse `xml:"urn:vim25 CreatePerfIntervalResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreatePerfIntervalBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreatePerfInterval(ctx context.Context, r soap.RoundTripper, req *types.CreatePerfInterval) (*types.CreatePerfIntervalResponse, error) {
    +	var reqBody, resBody CreatePerfIntervalBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateProfileBody struct {
    +	Req    *types.CreateProfile         `xml:"urn:vim25 CreateProfile,omitempty"`
    +	Res    *types.CreateProfileResponse `xml:"urn:vim25 CreateProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateProfile(ctx context.Context, r soap.RoundTripper, req *types.CreateProfile) (*types.CreateProfileResponse, error) {
    +	var reqBody, resBody CreateProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreatePropertyCollectorBody struct {
    +	Req    *types.CreatePropertyCollector         `xml:"urn:vim25 CreatePropertyCollector,omitempty"`
    +	Res    *types.CreatePropertyCollectorResponse `xml:"urn:vim25 CreatePropertyCollectorResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreatePropertyCollectorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreatePropertyCollector(ctx context.Context, r soap.RoundTripper, req *types.CreatePropertyCollector) (*types.CreatePropertyCollectorResponse, error) {
    +	var reqBody, resBody CreatePropertyCollectorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateRegistryKeyInGuestBody struct {
    +	Req    *types.CreateRegistryKeyInGuest         `xml:"urn:vim25 CreateRegistryKeyInGuest,omitempty"`
    +	Res    *types.CreateRegistryKeyInGuestResponse `xml:"urn:vim25 CreateRegistryKeyInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateRegistryKeyInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateRegistryKeyInGuest(ctx context.Context, r soap.RoundTripper, req *types.CreateRegistryKeyInGuest) (*types.CreateRegistryKeyInGuestResponse, error) {
    +	var reqBody, resBody CreateRegistryKeyInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateResourcePoolBody struct {
    +	Req    *types.CreateResourcePool         `xml:"urn:vim25 CreateResourcePool,omitempty"`
    +	Res    *types.CreateResourcePoolResponse `xml:"urn:vim25 CreateResourcePoolResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateResourcePoolBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateResourcePool(ctx context.Context, r soap.RoundTripper, req *types.CreateResourcePool) (*types.CreateResourcePoolResponse, error) {
    +	var reqBody, resBody CreateResourcePoolBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateScheduledTaskBody struct {
    +	Req    *types.CreateScheduledTask         `xml:"urn:vim25 CreateScheduledTask,omitempty"`
    +	Res    *types.CreateScheduledTaskResponse `xml:"urn:vim25 CreateScheduledTaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateScheduledTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateScheduledTask(ctx context.Context, r soap.RoundTripper, req *types.CreateScheduledTask) (*types.CreateScheduledTaskResponse, error) {
    +	var reqBody, resBody CreateScheduledTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateScreenshot_TaskBody struct {
    +	Req    *types.CreateScreenshot_Task         `xml:"urn:vim25 CreateScreenshot_Task,omitempty"`
    +	Res    *types.CreateScreenshot_TaskResponse `xml:"urn:vim25 CreateScreenshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateScreenshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateScreenshot_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateScreenshot_Task) (*types.CreateScreenshot_TaskResponse, error) {
    +	var reqBody, resBody CreateScreenshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateSecondaryVMEx_TaskBody struct {
    +	Req    *types.CreateSecondaryVMEx_Task         `xml:"urn:vim25 CreateSecondaryVMEx_Task,omitempty"`
    +	Res    *types.CreateSecondaryVMEx_TaskResponse `xml:"urn:vim25 CreateSecondaryVMEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateSecondaryVMEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateSecondaryVMEx_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateSecondaryVMEx_Task) (*types.CreateSecondaryVMEx_TaskResponse, error) {
    +	var reqBody, resBody CreateSecondaryVMEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateSecondaryVM_TaskBody struct {
    +	Req    *types.CreateSecondaryVM_Task         `xml:"urn:vim25 CreateSecondaryVM_Task,omitempty"`
    +	Res    *types.CreateSecondaryVM_TaskResponse `xml:"urn:vim25 CreateSecondaryVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateSecondaryVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateSecondaryVM_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateSecondaryVM_Task) (*types.CreateSecondaryVM_TaskResponse, error) {
    +	var reqBody, resBody CreateSecondaryVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateSnapshotEx_TaskBody struct {
    +	Req    *types.CreateSnapshotEx_Task         `xml:"urn:vim25 CreateSnapshotEx_Task,omitempty"`
    +	Res    *types.CreateSnapshotEx_TaskResponse `xml:"urn:vim25 CreateSnapshotEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateSnapshotEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateSnapshotEx_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateSnapshotEx_Task) (*types.CreateSnapshotEx_TaskResponse, error) {
    +	var reqBody, resBody CreateSnapshotEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateSnapshot_TaskBody struct {
    +	Req    *types.CreateSnapshot_Task         `xml:"urn:vim25 CreateSnapshot_Task,omitempty"`
    +	Res    *types.CreateSnapshot_TaskResponse `xml:"urn:vim25 CreateSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateSnapshot_Task) (*types.CreateSnapshot_TaskResponse, error) {
    +	var reqBody, resBody CreateSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateStoragePodBody struct {
    +	Req    *types.CreateStoragePod         `xml:"urn:vim25 CreateStoragePod,omitempty"`
    +	Res    *types.CreateStoragePodResponse `xml:"urn:vim25 CreateStoragePodResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateStoragePodBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateStoragePod(ctx context.Context, r soap.RoundTripper, req *types.CreateStoragePod) (*types.CreateStoragePodResponse, error) {
    +	var reqBody, resBody CreateStoragePodBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateTaskBody struct {
    +	Req    *types.CreateTask         `xml:"urn:vim25 CreateTask,omitempty"`
    +	Res    *types.CreateTaskResponse `xml:"urn:vim25 CreateTaskResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateTask(ctx context.Context, r soap.RoundTripper, req *types.CreateTask) (*types.CreateTaskResponse, error) {
    +	var reqBody, resBody CreateTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateTemporaryDirectoryInGuestBody struct {
    +	Req    *types.CreateTemporaryDirectoryInGuest         `xml:"urn:vim25 CreateTemporaryDirectoryInGuest,omitempty"`
    +	Res    *types.CreateTemporaryDirectoryInGuestResponse `xml:"urn:vim25 CreateTemporaryDirectoryInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateTemporaryDirectoryInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateTemporaryDirectoryInGuest(ctx context.Context, r soap.RoundTripper, req *types.CreateTemporaryDirectoryInGuest) (*types.CreateTemporaryDirectoryInGuestResponse, error) {
    +	var reqBody, resBody CreateTemporaryDirectoryInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateTemporaryFileInGuestBody struct {
    +	Req    *types.CreateTemporaryFileInGuest         `xml:"urn:vim25 CreateTemporaryFileInGuest,omitempty"`
    +	Res    *types.CreateTemporaryFileInGuestResponse `xml:"urn:vim25 CreateTemporaryFileInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateTemporaryFileInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateTemporaryFileInGuest(ctx context.Context, r soap.RoundTripper, req *types.CreateTemporaryFileInGuest) (*types.CreateTemporaryFileInGuestResponse, error) {
    +	var reqBody, resBody CreateTemporaryFileInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateUserBody struct {
    +	Req    *types.CreateUser         `xml:"urn:vim25 CreateUser,omitempty"`
    +	Res    *types.CreateUserResponse `xml:"urn:vim25 CreateUserResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateUserBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateUser(ctx context.Context, r soap.RoundTripper, req *types.CreateUser) (*types.CreateUserResponse, error) {
    +	var reqBody, resBody CreateUserBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateVAppBody struct {
    +	Req    *types.CreateVApp         `xml:"urn:vim25 CreateVApp,omitempty"`
    +	Res    *types.CreateVAppResponse `xml:"urn:vim25 CreateVAppResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateVAppBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateVApp(ctx context.Context, r soap.RoundTripper, req *types.CreateVApp) (*types.CreateVAppResponse, error) {
    +	var reqBody, resBody CreateVAppBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateVM_TaskBody struct {
    +	Req    *types.CreateVM_Task         `xml:"urn:vim25 CreateVM_Task,omitempty"`
    +	Res    *types.CreateVM_TaskResponse `xml:"urn:vim25 CreateVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateVM_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateVM_Task) (*types.CreateVM_TaskResponse, error) {
    +	var reqBody, resBody CreateVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateVirtualDisk_TaskBody struct {
    +	Req    *types.CreateVirtualDisk_Task         `xml:"urn:vim25 CreateVirtualDisk_Task,omitempty"`
    +	Res    *types.CreateVirtualDisk_TaskResponse `xml:"urn:vim25 CreateVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateVirtualDisk_Task) (*types.CreateVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody CreateVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateVmfsDatastoreBody struct {
    +	Req    *types.CreateVmfsDatastore         `xml:"urn:vim25 CreateVmfsDatastore,omitempty"`
    +	Res    *types.CreateVmfsDatastoreResponse `xml:"urn:vim25 CreateVmfsDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateVmfsDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateVmfsDatastore(ctx context.Context, r soap.RoundTripper, req *types.CreateVmfsDatastore) (*types.CreateVmfsDatastoreResponse, error) {
    +	var reqBody, resBody CreateVmfsDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateVvolDatastoreBody struct {
    +	Req    *types.CreateVvolDatastore         `xml:"urn:vim25 CreateVvolDatastore,omitempty"`
    +	Res    *types.CreateVvolDatastoreResponse `xml:"urn:vim25 CreateVvolDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateVvolDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateVvolDatastore(ctx context.Context, r soap.RoundTripper, req *types.CreateVvolDatastore) (*types.CreateVvolDatastoreResponse, error) {
    +	var reqBody, resBody CreateVvolDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CryptoManagerHostEnableBody struct {
    +	Req    *types.CryptoManagerHostEnable         `xml:"urn:vim25 CryptoManagerHostEnable,omitempty"`
    +	Res    *types.CryptoManagerHostEnableResponse `xml:"urn:vim25 CryptoManagerHostEnableResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CryptoManagerHostEnableBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CryptoManagerHostEnable(ctx context.Context, r soap.RoundTripper, req *types.CryptoManagerHostEnable) (*types.CryptoManagerHostEnableResponse, error) {
    +	var reqBody, resBody CryptoManagerHostEnableBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CryptoManagerHostPrepareBody struct {
    +	Req    *types.CryptoManagerHostPrepare         `xml:"urn:vim25 CryptoManagerHostPrepare,omitempty"`
    +	Res    *types.CryptoManagerHostPrepareResponse `xml:"urn:vim25 CryptoManagerHostPrepareResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CryptoManagerHostPrepareBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CryptoManagerHostPrepare(ctx context.Context, r soap.RoundTripper, req *types.CryptoManagerHostPrepare) (*types.CryptoManagerHostPrepareResponse, error) {
    +	var reqBody, resBody CryptoManagerHostPrepareBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CryptoUnlock_TaskBody struct {
    +	Req    *types.CryptoUnlock_Task         `xml:"urn:vim25 CryptoUnlock_Task,omitempty"`
    +	Res    *types.CryptoUnlock_TaskResponse `xml:"urn:vim25 CryptoUnlock_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CryptoUnlock_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CryptoUnlock_Task(ctx context.Context, r soap.RoundTripper, req *types.CryptoUnlock_Task) (*types.CryptoUnlock_TaskResponse, error) {
    +	var reqBody, resBody CryptoUnlock_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CurrentTimeBody struct {
    +	Req    *types.CurrentTime         `xml:"urn:vim25 CurrentTime,omitempty"`
    +	Res    *types.CurrentTimeResponse `xml:"urn:vim25 CurrentTimeResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CurrentTimeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CurrentTime(ctx context.Context, r soap.RoundTripper, req *types.CurrentTime) (*types.CurrentTimeResponse, error) {
    +	var reqBody, resBody CurrentTimeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CustomizationSpecItemToXmlBody struct {
    +	Req    *types.CustomizationSpecItemToXml         `xml:"urn:vim25 CustomizationSpecItemToXml,omitempty"`
    +	Res    *types.CustomizationSpecItemToXmlResponse `xml:"urn:vim25 CustomizationSpecItemToXmlResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CustomizationSpecItemToXmlBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CustomizationSpecItemToXml(ctx context.Context, r soap.RoundTripper, req *types.CustomizationSpecItemToXml) (*types.CustomizationSpecItemToXmlResponse, error) {
    +	var reqBody, resBody CustomizationSpecItemToXmlBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CustomizeVM_TaskBody struct {
    +	Req    *types.CustomizeVM_Task         `xml:"urn:vim25 CustomizeVM_Task,omitempty"`
    +	Res    *types.CustomizeVM_TaskResponse `xml:"urn:vim25 CustomizeVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CustomizeVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CustomizeVM_Task(ctx context.Context, r soap.RoundTripper, req *types.CustomizeVM_Task) (*types.CustomizeVM_TaskResponse, error) {
    +	var reqBody, resBody CustomizeVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DVPortgroupRollback_TaskBody struct {
    +	Req    *types.DVPortgroupRollback_Task         `xml:"urn:vim25 DVPortgroupRollback_Task,omitempty"`
    +	Res    *types.DVPortgroupRollback_TaskResponse `xml:"urn:vim25 DVPortgroupRollback_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DVPortgroupRollback_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DVPortgroupRollback_Task(ctx context.Context, r soap.RoundTripper, req *types.DVPortgroupRollback_Task) (*types.DVPortgroupRollback_TaskResponse, error) {
    +	var reqBody, resBody DVPortgroupRollback_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DVSManagerExportEntity_TaskBody struct {
    +	Req    *types.DVSManagerExportEntity_Task         `xml:"urn:vim25 DVSManagerExportEntity_Task,omitempty"`
    +	Res    *types.DVSManagerExportEntity_TaskResponse `xml:"urn:vim25 DVSManagerExportEntity_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DVSManagerExportEntity_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DVSManagerExportEntity_Task(ctx context.Context, r soap.RoundTripper, req *types.DVSManagerExportEntity_Task) (*types.DVSManagerExportEntity_TaskResponse, error) {
    +	var reqBody, resBody DVSManagerExportEntity_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DVSManagerImportEntity_TaskBody struct {
    +	Req    *types.DVSManagerImportEntity_Task         `xml:"urn:vim25 DVSManagerImportEntity_Task,omitempty"`
    +	Res    *types.DVSManagerImportEntity_TaskResponse `xml:"urn:vim25 DVSManagerImportEntity_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DVSManagerImportEntity_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DVSManagerImportEntity_Task(ctx context.Context, r soap.RoundTripper, req *types.DVSManagerImportEntity_Task) (*types.DVSManagerImportEntity_TaskResponse, error) {
    +	var reqBody, resBody DVSManagerImportEntity_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DVSManagerLookupDvPortGroupBody struct {
    +	Req    *types.DVSManagerLookupDvPortGroup         `xml:"urn:vim25 DVSManagerLookupDvPortGroup,omitempty"`
    +	Res    *types.DVSManagerLookupDvPortGroupResponse `xml:"urn:vim25 DVSManagerLookupDvPortGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DVSManagerLookupDvPortGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DVSManagerLookupDvPortGroup(ctx context.Context, r soap.RoundTripper, req *types.DVSManagerLookupDvPortGroup) (*types.DVSManagerLookupDvPortGroupResponse, error) {
    +	var reqBody, resBody DVSManagerLookupDvPortGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DVSRollback_TaskBody struct {
    +	Req    *types.DVSRollback_Task         `xml:"urn:vim25 DVSRollback_Task,omitempty"`
    +	Res    *types.DVSRollback_TaskResponse `xml:"urn:vim25 DVSRollback_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DVSRollback_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DVSRollback_Task(ctx context.Context, r soap.RoundTripper, req *types.DVSRollback_Task) (*types.DVSRollback_TaskResponse, error) {
    +	var reqBody, resBody DVSRollback_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DatastoreEnterMaintenanceModeBody struct {
    +	Req    *types.DatastoreEnterMaintenanceMode         `xml:"urn:vim25 DatastoreEnterMaintenanceMode,omitempty"`
    +	Res    *types.DatastoreEnterMaintenanceModeResponse `xml:"urn:vim25 DatastoreEnterMaintenanceModeResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DatastoreEnterMaintenanceModeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DatastoreEnterMaintenanceMode(ctx context.Context, r soap.RoundTripper, req *types.DatastoreEnterMaintenanceMode) (*types.DatastoreEnterMaintenanceModeResponse, error) {
    +	var reqBody, resBody DatastoreEnterMaintenanceModeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DatastoreExitMaintenanceMode_TaskBody struct {
    +	Req    *types.DatastoreExitMaintenanceMode_Task         `xml:"urn:vim25 DatastoreExitMaintenanceMode_Task,omitempty"`
    +	Res    *types.DatastoreExitMaintenanceMode_TaskResponse `xml:"urn:vim25 DatastoreExitMaintenanceMode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DatastoreExitMaintenanceMode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DatastoreExitMaintenanceMode_Task(ctx context.Context, r soap.RoundTripper, req *types.DatastoreExitMaintenanceMode_Task) (*types.DatastoreExitMaintenanceMode_TaskResponse, error) {
    +	var reqBody, resBody DatastoreExitMaintenanceMode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DecodeLicenseBody struct {
    +	Req    *types.DecodeLicense         `xml:"urn:vim25 DecodeLicense,omitempty"`
    +	Res    *types.DecodeLicenseResponse `xml:"urn:vim25 DecodeLicenseResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DecodeLicenseBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DecodeLicense(ctx context.Context, r soap.RoundTripper, req *types.DecodeLicense) (*types.DecodeLicenseResponse, error) {
    +	var reqBody, resBody DecodeLicenseBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DefragmentAllDisksBody struct {
    +	Req    *types.DefragmentAllDisks         `xml:"urn:vim25 DefragmentAllDisks,omitempty"`
    +	Res    *types.DefragmentAllDisksResponse `xml:"urn:vim25 DefragmentAllDisksResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DefragmentAllDisksBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DefragmentAllDisks(ctx context.Context, r soap.RoundTripper, req *types.DefragmentAllDisks) (*types.DefragmentAllDisksResponse, error) {
    +	var reqBody, resBody DefragmentAllDisksBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DefragmentVirtualDisk_TaskBody struct {
    +	Req    *types.DefragmentVirtualDisk_Task         `xml:"urn:vim25 DefragmentVirtualDisk_Task,omitempty"`
    +	Res    *types.DefragmentVirtualDisk_TaskResponse `xml:"urn:vim25 DefragmentVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DefragmentVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DefragmentVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.DefragmentVirtualDisk_Task) (*types.DefragmentVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody DefragmentVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteCustomizationSpecBody struct {
    +	Req    *types.DeleteCustomizationSpec         `xml:"urn:vim25 DeleteCustomizationSpec,omitempty"`
    +	Res    *types.DeleteCustomizationSpecResponse `xml:"urn:vim25 DeleteCustomizationSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteCustomizationSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteCustomizationSpec(ctx context.Context, r soap.RoundTripper, req *types.DeleteCustomizationSpec) (*types.DeleteCustomizationSpecResponse, error) {
    +	var reqBody, resBody DeleteCustomizationSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteDatastoreFile_TaskBody struct {
    +	Req    *types.DeleteDatastoreFile_Task         `xml:"urn:vim25 DeleteDatastoreFile_Task,omitempty"`
    +	Res    *types.DeleteDatastoreFile_TaskResponse `xml:"urn:vim25 DeleteDatastoreFile_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteDatastoreFile_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteDatastoreFile_Task(ctx context.Context, r soap.RoundTripper, req *types.DeleteDatastoreFile_Task) (*types.DeleteDatastoreFile_TaskResponse, error) {
    +	var reqBody, resBody DeleteDatastoreFile_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteDirectoryBody struct {
    +	Req    *types.DeleteDirectory         `xml:"urn:vim25 DeleteDirectory,omitempty"`
    +	Res    *types.DeleteDirectoryResponse `xml:"urn:vim25 DeleteDirectoryResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteDirectoryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteDirectory(ctx context.Context, r soap.RoundTripper, req *types.DeleteDirectory) (*types.DeleteDirectoryResponse, error) {
    +	var reqBody, resBody DeleteDirectoryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteDirectoryInGuestBody struct {
    +	Req    *types.DeleteDirectoryInGuest         `xml:"urn:vim25 DeleteDirectoryInGuest,omitempty"`
    +	Res    *types.DeleteDirectoryInGuestResponse `xml:"urn:vim25 DeleteDirectoryInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteDirectoryInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteDirectoryInGuest(ctx context.Context, r soap.RoundTripper, req *types.DeleteDirectoryInGuest) (*types.DeleteDirectoryInGuestResponse, error) {
    +	var reqBody, resBody DeleteDirectoryInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteFileBody struct {
    +	Req    *types.DeleteFile         `xml:"urn:vim25 DeleteFile,omitempty"`
    +	Res    *types.DeleteFileResponse `xml:"urn:vim25 DeleteFileResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteFileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteFile(ctx context.Context, r soap.RoundTripper, req *types.DeleteFile) (*types.DeleteFileResponse, error) {
    +	var reqBody, resBody DeleteFileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteFileInGuestBody struct {
    +	Req    *types.DeleteFileInGuest         `xml:"urn:vim25 DeleteFileInGuest,omitempty"`
    +	Res    *types.DeleteFileInGuestResponse `xml:"urn:vim25 DeleteFileInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteFileInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteFileInGuest(ctx context.Context, r soap.RoundTripper, req *types.DeleteFileInGuest) (*types.DeleteFileInGuestResponse, error) {
    +	var reqBody, resBody DeleteFileInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteHostSpecificationBody struct {
    +	Req    *types.DeleteHostSpecification         `xml:"urn:vim25 DeleteHostSpecification,omitempty"`
    +	Res    *types.DeleteHostSpecificationResponse `xml:"urn:vim25 DeleteHostSpecificationResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteHostSpecificationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteHostSpecification(ctx context.Context, r soap.RoundTripper, req *types.DeleteHostSpecification) (*types.DeleteHostSpecificationResponse, error) {
    +	var reqBody, resBody DeleteHostSpecificationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteHostSubSpecificationBody struct {
    +	Req    *types.DeleteHostSubSpecification         `xml:"urn:vim25 DeleteHostSubSpecification,omitempty"`
    +	Res    *types.DeleteHostSubSpecificationResponse `xml:"urn:vim25 DeleteHostSubSpecificationResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteHostSubSpecificationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteHostSubSpecification(ctx context.Context, r soap.RoundTripper, req *types.DeleteHostSubSpecification) (*types.DeleteHostSubSpecificationResponse, error) {
    +	var reqBody, resBody DeleteHostSubSpecificationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteNvdimmBlockNamespaces_TaskBody struct {
    +	Req    *types.DeleteNvdimmBlockNamespaces_Task         `xml:"urn:vim25 DeleteNvdimmBlockNamespaces_Task,omitempty"`
    +	Res    *types.DeleteNvdimmBlockNamespaces_TaskResponse `xml:"urn:vim25 DeleteNvdimmBlockNamespaces_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteNvdimmBlockNamespaces_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteNvdimmBlockNamespaces_Task(ctx context.Context, r soap.RoundTripper, req *types.DeleteNvdimmBlockNamespaces_Task) (*types.DeleteNvdimmBlockNamespaces_TaskResponse, error) {
    +	var reqBody, resBody DeleteNvdimmBlockNamespaces_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteNvdimmNamespace_TaskBody struct {
    +	Req    *types.DeleteNvdimmNamespace_Task         `xml:"urn:vim25 DeleteNvdimmNamespace_Task,omitempty"`
    +	Res    *types.DeleteNvdimmNamespace_TaskResponse `xml:"urn:vim25 DeleteNvdimmNamespace_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteNvdimmNamespace_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteNvdimmNamespace_Task(ctx context.Context, r soap.RoundTripper, req *types.DeleteNvdimmNamespace_Task) (*types.DeleteNvdimmNamespace_TaskResponse, error) {
    +	var reqBody, resBody DeleteNvdimmNamespace_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteRegistryKeyInGuestBody struct {
    +	Req    *types.DeleteRegistryKeyInGuest         `xml:"urn:vim25 DeleteRegistryKeyInGuest,omitempty"`
    +	Res    *types.DeleteRegistryKeyInGuestResponse `xml:"urn:vim25 DeleteRegistryKeyInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteRegistryKeyInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteRegistryKeyInGuest(ctx context.Context, r soap.RoundTripper, req *types.DeleteRegistryKeyInGuest) (*types.DeleteRegistryKeyInGuestResponse, error) {
    +	var reqBody, resBody DeleteRegistryKeyInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteRegistryValueInGuestBody struct {
    +	Req    *types.DeleteRegistryValueInGuest         `xml:"urn:vim25 DeleteRegistryValueInGuest,omitempty"`
    +	Res    *types.DeleteRegistryValueInGuestResponse `xml:"urn:vim25 DeleteRegistryValueInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteRegistryValueInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteRegistryValueInGuest(ctx context.Context, r soap.RoundTripper, req *types.DeleteRegistryValueInGuest) (*types.DeleteRegistryValueInGuestResponse, error) {
    +	var reqBody, resBody DeleteRegistryValueInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteScsiLunStateBody struct {
    +	Req    *types.DeleteScsiLunState         `xml:"urn:vim25 DeleteScsiLunState,omitempty"`
    +	Res    *types.DeleteScsiLunStateResponse `xml:"urn:vim25 DeleteScsiLunStateResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteScsiLunStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteScsiLunState(ctx context.Context, r soap.RoundTripper, req *types.DeleteScsiLunState) (*types.DeleteScsiLunStateResponse, error) {
    +	var reqBody, resBody DeleteScsiLunStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteSnapshot_TaskBody struct {
    +	Req    *types.DeleteSnapshot_Task         `xml:"urn:vim25 DeleteSnapshot_Task,omitempty"`
    +	Res    *types.DeleteSnapshot_TaskResponse `xml:"urn:vim25 DeleteSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.DeleteSnapshot_Task) (*types.DeleteSnapshot_TaskResponse, error) {
    +	var reqBody, resBody DeleteSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteVStorageObject_TaskBody struct {
    +	Req    *types.DeleteVStorageObject_Task         `xml:"urn:vim25 DeleteVStorageObject_Task,omitempty"`
    +	Res    *types.DeleteVStorageObject_TaskResponse `xml:"urn:vim25 DeleteVStorageObject_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteVStorageObject_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteVStorageObject_Task(ctx context.Context, r soap.RoundTripper, req *types.DeleteVStorageObject_Task) (*types.DeleteVStorageObject_TaskResponse, error) {
    +	var reqBody, resBody DeleteVStorageObject_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteVffsVolumeStateBody struct {
    +	Req    *types.DeleteVffsVolumeState         `xml:"urn:vim25 DeleteVffsVolumeState,omitempty"`
    +	Res    *types.DeleteVffsVolumeStateResponse `xml:"urn:vim25 DeleteVffsVolumeStateResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteVffsVolumeStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteVffsVolumeState(ctx context.Context, r soap.RoundTripper, req *types.DeleteVffsVolumeState) (*types.DeleteVffsVolumeStateResponse, error) {
    +	var reqBody, resBody DeleteVffsVolumeStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteVirtualDisk_TaskBody struct {
    +	Req    *types.DeleteVirtualDisk_Task         `xml:"urn:vim25 DeleteVirtualDisk_Task,omitempty"`
    +	Res    *types.DeleteVirtualDisk_TaskResponse `xml:"urn:vim25 DeleteVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.DeleteVirtualDisk_Task) (*types.DeleteVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody DeleteVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteVmfsVolumeStateBody struct {
    +	Req    *types.DeleteVmfsVolumeState         `xml:"urn:vim25 DeleteVmfsVolumeState,omitempty"`
    +	Res    *types.DeleteVmfsVolumeStateResponse `xml:"urn:vim25 DeleteVmfsVolumeStateResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteVmfsVolumeStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteVmfsVolumeState(ctx context.Context, r soap.RoundTripper, req *types.DeleteVmfsVolumeState) (*types.DeleteVmfsVolumeStateResponse, error) {
    +	var reqBody, resBody DeleteVmfsVolumeStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeleteVsanObjectsBody struct {
    +	Req    *types.DeleteVsanObjects         `xml:"urn:vim25 DeleteVsanObjects,omitempty"`
    +	Res    *types.DeleteVsanObjectsResponse `xml:"urn:vim25 DeleteVsanObjectsResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeleteVsanObjectsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeleteVsanObjects(ctx context.Context, r soap.RoundTripper, req *types.DeleteVsanObjects) (*types.DeleteVsanObjectsResponse, error) {
    +	var reqBody, resBody DeleteVsanObjectsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeselectVnicBody struct {
    +	Req    *types.DeselectVnic         `xml:"urn:vim25 DeselectVnic,omitempty"`
    +	Res    *types.DeselectVnicResponse `xml:"urn:vim25 DeselectVnicResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeselectVnicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeselectVnic(ctx context.Context, r soap.RoundTripper, req *types.DeselectVnic) (*types.DeselectVnicResponse, error) {
    +	var reqBody, resBody DeselectVnicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeselectVnicForNicTypeBody struct {
    +	Req    *types.DeselectVnicForNicType         `xml:"urn:vim25 DeselectVnicForNicType,omitempty"`
    +	Res    *types.DeselectVnicForNicTypeResponse `xml:"urn:vim25 DeselectVnicForNicTypeResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeselectVnicForNicTypeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeselectVnicForNicType(ctx context.Context, r soap.RoundTripper, req *types.DeselectVnicForNicType) (*types.DeselectVnicForNicTypeResponse, error) {
    +	var reqBody, resBody DeselectVnicForNicTypeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyChildrenBody struct {
    +	Req    *types.DestroyChildren         `xml:"urn:vim25 DestroyChildren,omitempty"`
    +	Res    *types.DestroyChildrenResponse `xml:"urn:vim25 DestroyChildrenResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyChildrenBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyChildren(ctx context.Context, r soap.RoundTripper, req *types.DestroyChildren) (*types.DestroyChildrenResponse, error) {
    +	var reqBody, resBody DestroyChildrenBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyCollectorBody struct {
    +	Req    *types.DestroyCollector         `xml:"urn:vim25 DestroyCollector,omitempty"`
    +	Res    *types.DestroyCollectorResponse `xml:"urn:vim25 DestroyCollectorResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyCollectorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyCollector(ctx context.Context, r soap.RoundTripper, req *types.DestroyCollector) (*types.DestroyCollectorResponse, error) {
    +	var reqBody, resBody DestroyCollectorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyDatastoreBody struct {
    +	Req    *types.DestroyDatastore         `xml:"urn:vim25 DestroyDatastore,omitempty"`
    +	Res    *types.DestroyDatastoreResponse `xml:"urn:vim25 DestroyDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyDatastore(ctx context.Context, r soap.RoundTripper, req *types.DestroyDatastore) (*types.DestroyDatastoreResponse, error) {
    +	var reqBody, resBody DestroyDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyIpPoolBody struct {
    +	Req    *types.DestroyIpPool         `xml:"urn:vim25 DestroyIpPool,omitempty"`
    +	Res    *types.DestroyIpPoolResponse `xml:"urn:vim25 DestroyIpPoolResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyIpPoolBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyIpPool(ctx context.Context, r soap.RoundTripper, req *types.DestroyIpPool) (*types.DestroyIpPoolResponse, error) {
    +	var reqBody, resBody DestroyIpPoolBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyNetworkBody struct {
    +	Req    *types.DestroyNetwork         `xml:"urn:vim25 DestroyNetwork,omitempty"`
    +	Res    *types.DestroyNetworkResponse `xml:"urn:vim25 DestroyNetworkResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyNetworkBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyNetwork(ctx context.Context, r soap.RoundTripper, req *types.DestroyNetwork) (*types.DestroyNetworkResponse, error) {
    +	var reqBody, resBody DestroyNetworkBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyProfileBody struct {
    +	Req    *types.DestroyProfile         `xml:"urn:vim25 DestroyProfile,omitempty"`
    +	Res    *types.DestroyProfileResponse `xml:"urn:vim25 DestroyProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyProfile(ctx context.Context, r soap.RoundTripper, req *types.DestroyProfile) (*types.DestroyProfileResponse, error) {
    +	var reqBody, resBody DestroyProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyPropertyCollectorBody struct {
    +	Req    *types.DestroyPropertyCollector         `xml:"urn:vim25 DestroyPropertyCollector,omitempty"`
    +	Res    *types.DestroyPropertyCollectorResponse `xml:"urn:vim25 DestroyPropertyCollectorResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyPropertyCollectorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyPropertyCollector(ctx context.Context, r soap.RoundTripper, req *types.DestroyPropertyCollector) (*types.DestroyPropertyCollectorResponse, error) {
    +	var reqBody, resBody DestroyPropertyCollectorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyPropertyFilterBody struct {
    +	Req    *types.DestroyPropertyFilter         `xml:"urn:vim25 DestroyPropertyFilter,omitempty"`
    +	Res    *types.DestroyPropertyFilterResponse `xml:"urn:vim25 DestroyPropertyFilterResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyPropertyFilterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyPropertyFilter(ctx context.Context, r soap.RoundTripper, req *types.DestroyPropertyFilter) (*types.DestroyPropertyFilterResponse, error) {
    +	var reqBody, resBody DestroyPropertyFilterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyVffsBody struct {
    +	Req    *types.DestroyVffs         `xml:"urn:vim25 DestroyVffs,omitempty"`
    +	Res    *types.DestroyVffsResponse `xml:"urn:vim25 DestroyVffsResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyVffsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyVffs(ctx context.Context, r soap.RoundTripper, req *types.DestroyVffs) (*types.DestroyVffsResponse, error) {
    +	var reqBody, resBody DestroyVffsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyViewBody struct {
    +	Req    *types.DestroyView         `xml:"urn:vim25 DestroyView,omitempty"`
    +	Res    *types.DestroyViewResponse `xml:"urn:vim25 DestroyViewResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyViewBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyView(ctx context.Context, r soap.RoundTripper, req *types.DestroyView) (*types.DestroyViewResponse, error) {
    +	var reqBody, resBody DestroyViewBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type Destroy_TaskBody struct {
    +	Req    *types.Destroy_Task         `xml:"urn:vim25 Destroy_Task,omitempty"`
    +	Res    *types.Destroy_TaskResponse `xml:"urn:vim25 Destroy_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *Destroy_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func Destroy_Task(ctx context.Context, r soap.RoundTripper, req *types.Destroy_Task) (*types.Destroy_TaskResponse, error) {
    +	var reqBody, resBody Destroy_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DetachDisk_TaskBody struct {
    +	Req    *types.DetachDisk_Task         `xml:"urn:vim25 DetachDisk_Task,omitempty"`
    +	Res    *types.DetachDisk_TaskResponse `xml:"urn:vim25 DetachDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DetachDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DetachDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.DetachDisk_Task) (*types.DetachDisk_TaskResponse, error) {
    +	var reqBody, resBody DetachDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DetachScsiLunBody struct {
    +	Req    *types.DetachScsiLun         `xml:"urn:vim25 DetachScsiLun,omitempty"`
    +	Res    *types.DetachScsiLunResponse `xml:"urn:vim25 DetachScsiLunResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DetachScsiLunBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DetachScsiLun(ctx context.Context, r soap.RoundTripper, req *types.DetachScsiLun) (*types.DetachScsiLunResponse, error) {
    +	var reqBody, resBody DetachScsiLunBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DetachScsiLunEx_TaskBody struct {
    +	Req    *types.DetachScsiLunEx_Task         `xml:"urn:vim25 DetachScsiLunEx_Task,omitempty"`
    +	Res    *types.DetachScsiLunEx_TaskResponse `xml:"urn:vim25 DetachScsiLunEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DetachScsiLunEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DetachScsiLunEx_Task(ctx context.Context, r soap.RoundTripper, req *types.DetachScsiLunEx_Task) (*types.DetachScsiLunEx_TaskResponse, error) {
    +	var reqBody, resBody DetachScsiLunEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DetachTagFromVStorageObjectBody struct {
    +	Req    *types.DetachTagFromVStorageObject         `xml:"urn:vim25 DetachTagFromVStorageObject,omitempty"`
    +	Res    *types.DetachTagFromVStorageObjectResponse `xml:"urn:vim25 DetachTagFromVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DetachTagFromVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DetachTagFromVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.DetachTagFromVStorageObject) (*types.DetachTagFromVStorageObjectResponse, error) {
    +	var reqBody, resBody DetachTagFromVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DisableEvcMode_TaskBody struct {
    +	Req    *types.DisableEvcMode_Task         `xml:"urn:vim25 DisableEvcMode_Task,omitempty"`
    +	Res    *types.DisableEvcMode_TaskResponse `xml:"urn:vim25 DisableEvcMode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DisableEvcMode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DisableEvcMode_Task(ctx context.Context, r soap.RoundTripper, req *types.DisableEvcMode_Task) (*types.DisableEvcMode_TaskResponse, error) {
    +	var reqBody, resBody DisableEvcMode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DisableFeatureBody struct {
    +	Req    *types.DisableFeature         `xml:"urn:vim25 DisableFeature,omitempty"`
    +	Res    *types.DisableFeatureResponse `xml:"urn:vim25 DisableFeatureResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DisableFeatureBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DisableFeature(ctx context.Context, r soap.RoundTripper, req *types.DisableFeature) (*types.DisableFeatureResponse, error) {
    +	var reqBody, resBody DisableFeatureBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DisableHyperThreadingBody struct {
    +	Req    *types.DisableHyperThreading         `xml:"urn:vim25 DisableHyperThreading,omitempty"`
    +	Res    *types.DisableHyperThreadingResponse `xml:"urn:vim25 DisableHyperThreadingResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DisableHyperThreadingBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DisableHyperThreading(ctx context.Context, r soap.RoundTripper, req *types.DisableHyperThreading) (*types.DisableHyperThreadingResponse, error) {
    +	var reqBody, resBody DisableHyperThreadingBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DisableMultipathPathBody struct {
    +	Req    *types.DisableMultipathPath         `xml:"urn:vim25 DisableMultipathPath,omitempty"`
    +	Res    *types.DisableMultipathPathResponse `xml:"urn:vim25 DisableMultipathPathResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DisableMultipathPathBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DisableMultipathPath(ctx context.Context, r soap.RoundTripper, req *types.DisableMultipathPath) (*types.DisableMultipathPathResponse, error) {
    +	var reqBody, resBody DisableMultipathPathBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DisableRulesetBody struct {
    +	Req    *types.DisableRuleset         `xml:"urn:vim25 DisableRuleset,omitempty"`
    +	Res    *types.DisableRulesetResponse `xml:"urn:vim25 DisableRulesetResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DisableRulesetBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DisableRuleset(ctx context.Context, r soap.RoundTripper, req *types.DisableRuleset) (*types.DisableRulesetResponse, error) {
    +	var reqBody, resBody DisableRulesetBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DisableSecondaryVM_TaskBody struct {
    +	Req    *types.DisableSecondaryVM_Task         `xml:"urn:vim25 DisableSecondaryVM_Task,omitempty"`
    +	Res    *types.DisableSecondaryVM_TaskResponse `xml:"urn:vim25 DisableSecondaryVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DisableSecondaryVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DisableSecondaryVM_Task(ctx context.Context, r soap.RoundTripper, req *types.DisableSecondaryVM_Task) (*types.DisableSecondaryVM_TaskResponse, error) {
    +	var reqBody, resBody DisableSecondaryVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DisableSmartCardAuthenticationBody struct {
    +	Req    *types.DisableSmartCardAuthentication         `xml:"urn:vim25 DisableSmartCardAuthentication,omitempty"`
    +	Res    *types.DisableSmartCardAuthenticationResponse `xml:"urn:vim25 DisableSmartCardAuthenticationResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DisableSmartCardAuthenticationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DisableSmartCardAuthentication(ctx context.Context, r soap.RoundTripper, req *types.DisableSmartCardAuthentication) (*types.DisableSmartCardAuthenticationResponse, error) {
    +	var reqBody, resBody DisableSmartCardAuthenticationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DisconnectHost_TaskBody struct {
    +	Req    *types.DisconnectHost_Task         `xml:"urn:vim25 DisconnectHost_Task,omitempty"`
    +	Res    *types.DisconnectHost_TaskResponse `xml:"urn:vim25 DisconnectHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DisconnectHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DisconnectHost_Task(ctx context.Context, r soap.RoundTripper, req *types.DisconnectHost_Task) (*types.DisconnectHost_TaskResponse, error) {
    +	var reqBody, resBody DisconnectHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DiscoverFcoeHbasBody struct {
    +	Req    *types.DiscoverFcoeHbas         `xml:"urn:vim25 DiscoverFcoeHbas,omitempty"`
    +	Res    *types.DiscoverFcoeHbasResponse `xml:"urn:vim25 DiscoverFcoeHbasResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DiscoverFcoeHbasBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DiscoverFcoeHbas(ctx context.Context, r soap.RoundTripper, req *types.DiscoverFcoeHbas) (*types.DiscoverFcoeHbasResponse, error) {
    +	var reqBody, resBody DiscoverFcoeHbasBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DissociateProfileBody struct {
    +	Req    *types.DissociateProfile         `xml:"urn:vim25 DissociateProfile,omitempty"`
    +	Res    *types.DissociateProfileResponse `xml:"urn:vim25 DissociateProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DissociateProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DissociateProfile(ctx context.Context, r soap.RoundTripper, req *types.DissociateProfile) (*types.DissociateProfileResponse, error) {
    +	var reqBody, resBody DissociateProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DoesCustomizationSpecExistBody struct {
    +	Req    *types.DoesCustomizationSpecExist         `xml:"urn:vim25 DoesCustomizationSpecExist,omitempty"`
    +	Res    *types.DoesCustomizationSpecExistResponse `xml:"urn:vim25 DoesCustomizationSpecExistResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DoesCustomizationSpecExistBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DoesCustomizationSpecExist(ctx context.Context, r soap.RoundTripper, req *types.DoesCustomizationSpecExist) (*types.DoesCustomizationSpecExistResponse, error) {
    +	var reqBody, resBody DoesCustomizationSpecExistBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DuplicateCustomizationSpecBody struct {
    +	Req    *types.DuplicateCustomizationSpec         `xml:"urn:vim25 DuplicateCustomizationSpec,omitempty"`
    +	Res    *types.DuplicateCustomizationSpecResponse `xml:"urn:vim25 DuplicateCustomizationSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DuplicateCustomizationSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DuplicateCustomizationSpec(ctx context.Context, r soap.RoundTripper, req *types.DuplicateCustomizationSpec) (*types.DuplicateCustomizationSpecResponse, error) {
    +	var reqBody, resBody DuplicateCustomizationSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DvsReconfigureVmVnicNetworkResourcePool_TaskBody struct {
    +	Req    *types.DvsReconfigureVmVnicNetworkResourcePool_Task         `xml:"urn:vim25 DvsReconfigureVmVnicNetworkResourcePool_Task,omitempty"`
    +	Res    *types.DvsReconfigureVmVnicNetworkResourcePool_TaskResponse `xml:"urn:vim25 DvsReconfigureVmVnicNetworkResourcePool_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DvsReconfigureVmVnicNetworkResourcePool_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DvsReconfigureVmVnicNetworkResourcePool_Task(ctx context.Context, r soap.RoundTripper, req *types.DvsReconfigureVmVnicNetworkResourcePool_Task) (*types.DvsReconfigureVmVnicNetworkResourcePool_TaskResponse, error) {
    +	var reqBody, resBody DvsReconfigureVmVnicNetworkResourcePool_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EagerZeroVirtualDisk_TaskBody struct {
    +	Req    *types.EagerZeroVirtualDisk_Task         `xml:"urn:vim25 EagerZeroVirtualDisk_Task,omitempty"`
    +	Res    *types.EagerZeroVirtualDisk_TaskResponse `xml:"urn:vim25 EagerZeroVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EagerZeroVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EagerZeroVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.EagerZeroVirtualDisk_Task) (*types.EagerZeroVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody EagerZeroVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableAlarmActionsBody struct {
    +	Req    *types.EnableAlarmActions         `xml:"urn:vim25 EnableAlarmActions,omitempty"`
    +	Res    *types.EnableAlarmActionsResponse `xml:"urn:vim25 EnableAlarmActionsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableAlarmActionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableAlarmActions(ctx context.Context, r soap.RoundTripper, req *types.EnableAlarmActions) (*types.EnableAlarmActionsResponse, error) {
    +	var reqBody, resBody EnableAlarmActionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableCryptoBody struct {
    +	Req    *types.EnableCrypto         `xml:"urn:vim25 EnableCrypto,omitempty"`
    +	Res    *types.EnableCryptoResponse `xml:"urn:vim25 EnableCryptoResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableCryptoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableCrypto(ctx context.Context, r soap.RoundTripper, req *types.EnableCrypto) (*types.EnableCryptoResponse, error) {
    +	var reqBody, resBody EnableCryptoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableFeatureBody struct {
    +	Req    *types.EnableFeature         `xml:"urn:vim25 EnableFeature,omitempty"`
    +	Res    *types.EnableFeatureResponse `xml:"urn:vim25 EnableFeatureResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableFeatureBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableFeature(ctx context.Context, r soap.RoundTripper, req *types.EnableFeature) (*types.EnableFeatureResponse, error) {
    +	var reqBody, resBody EnableFeatureBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableHyperThreadingBody struct {
    +	Req    *types.EnableHyperThreading         `xml:"urn:vim25 EnableHyperThreading,omitempty"`
    +	Res    *types.EnableHyperThreadingResponse `xml:"urn:vim25 EnableHyperThreadingResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableHyperThreadingBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableHyperThreading(ctx context.Context, r soap.RoundTripper, req *types.EnableHyperThreading) (*types.EnableHyperThreadingResponse, error) {
    +	var reqBody, resBody EnableHyperThreadingBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableMultipathPathBody struct {
    +	Req    *types.EnableMultipathPath         `xml:"urn:vim25 EnableMultipathPath,omitempty"`
    +	Res    *types.EnableMultipathPathResponse `xml:"urn:vim25 EnableMultipathPathResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableMultipathPathBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableMultipathPath(ctx context.Context, r soap.RoundTripper, req *types.EnableMultipathPath) (*types.EnableMultipathPathResponse, error) {
    +	var reqBody, resBody EnableMultipathPathBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableNetworkResourceManagementBody struct {
    +	Req    *types.EnableNetworkResourceManagement         `xml:"urn:vim25 EnableNetworkResourceManagement,omitempty"`
    +	Res    *types.EnableNetworkResourceManagementResponse `xml:"urn:vim25 EnableNetworkResourceManagementResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableNetworkResourceManagementBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableNetworkResourceManagement(ctx context.Context, r soap.RoundTripper, req *types.EnableNetworkResourceManagement) (*types.EnableNetworkResourceManagementResponse, error) {
    +	var reqBody, resBody EnableNetworkResourceManagementBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableRulesetBody struct {
    +	Req    *types.EnableRuleset         `xml:"urn:vim25 EnableRuleset,omitempty"`
    +	Res    *types.EnableRulesetResponse `xml:"urn:vim25 EnableRulesetResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableRulesetBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableRuleset(ctx context.Context, r soap.RoundTripper, req *types.EnableRuleset) (*types.EnableRulesetResponse, error) {
    +	var reqBody, resBody EnableRulesetBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableSecondaryVM_TaskBody struct {
    +	Req    *types.EnableSecondaryVM_Task         `xml:"urn:vim25 EnableSecondaryVM_Task,omitempty"`
    +	Res    *types.EnableSecondaryVM_TaskResponse `xml:"urn:vim25 EnableSecondaryVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableSecondaryVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableSecondaryVM_Task(ctx context.Context, r soap.RoundTripper, req *types.EnableSecondaryVM_Task) (*types.EnableSecondaryVM_TaskResponse, error) {
    +	var reqBody, resBody EnableSecondaryVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnableSmartCardAuthenticationBody struct {
    +	Req    *types.EnableSmartCardAuthentication         `xml:"urn:vim25 EnableSmartCardAuthentication,omitempty"`
    +	Res    *types.EnableSmartCardAuthenticationResponse `xml:"urn:vim25 EnableSmartCardAuthenticationResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnableSmartCardAuthenticationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnableSmartCardAuthentication(ctx context.Context, r soap.RoundTripper, req *types.EnableSmartCardAuthentication) (*types.EnableSmartCardAuthenticationResponse, error) {
    +	var reqBody, resBody EnableSmartCardAuthenticationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnterLockdownModeBody struct {
    +	Req    *types.EnterLockdownMode         `xml:"urn:vim25 EnterLockdownMode,omitempty"`
    +	Res    *types.EnterLockdownModeResponse `xml:"urn:vim25 EnterLockdownModeResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnterLockdownModeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnterLockdownMode(ctx context.Context, r soap.RoundTripper, req *types.EnterLockdownMode) (*types.EnterLockdownModeResponse, error) {
    +	var reqBody, resBody EnterLockdownModeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EnterMaintenanceMode_TaskBody struct {
    +	Req    *types.EnterMaintenanceMode_Task         `xml:"urn:vim25 EnterMaintenanceMode_Task,omitempty"`
    +	Res    *types.EnterMaintenanceMode_TaskResponse `xml:"urn:vim25 EnterMaintenanceMode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EnterMaintenanceMode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EnterMaintenanceMode_Task(ctx context.Context, r soap.RoundTripper, req *types.EnterMaintenanceMode_Task) (*types.EnterMaintenanceMode_TaskResponse, error) {
    +	var reqBody, resBody EnterMaintenanceMode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EstimateDatabaseSizeBody struct {
    +	Req    *types.EstimateDatabaseSize         `xml:"urn:vim25 EstimateDatabaseSize,omitempty"`
    +	Res    *types.EstimateDatabaseSizeResponse `xml:"urn:vim25 EstimateDatabaseSizeResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EstimateDatabaseSizeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EstimateDatabaseSize(ctx context.Context, r soap.RoundTripper, req *types.EstimateDatabaseSize) (*types.EstimateDatabaseSizeResponse, error) {
    +	var reqBody, resBody EstimateDatabaseSizeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EstimateStorageForConsolidateSnapshots_TaskBody struct {
    +	Req    *types.EstimateStorageForConsolidateSnapshots_Task         `xml:"urn:vim25 EstimateStorageForConsolidateSnapshots_Task,omitempty"`
    +	Res    *types.EstimateStorageForConsolidateSnapshots_TaskResponse `xml:"urn:vim25 EstimateStorageForConsolidateSnapshots_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EstimateStorageForConsolidateSnapshots_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EstimateStorageForConsolidateSnapshots_Task(ctx context.Context, r soap.RoundTripper, req *types.EstimateStorageForConsolidateSnapshots_Task) (*types.EstimateStorageForConsolidateSnapshots_TaskResponse, error) {
    +	var reqBody, resBody EstimateStorageForConsolidateSnapshots_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EsxAgentHostManagerUpdateConfigBody struct {
    +	Req    *types.EsxAgentHostManagerUpdateConfig         `xml:"urn:vim25 EsxAgentHostManagerUpdateConfig,omitempty"`
    +	Res    *types.EsxAgentHostManagerUpdateConfigResponse `xml:"urn:vim25 EsxAgentHostManagerUpdateConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EsxAgentHostManagerUpdateConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EsxAgentHostManagerUpdateConfig(ctx context.Context, r soap.RoundTripper, req *types.EsxAgentHostManagerUpdateConfig) (*types.EsxAgentHostManagerUpdateConfigResponse, error) {
    +	var reqBody, resBody EsxAgentHostManagerUpdateConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EvacuateVsanNode_TaskBody struct {
    +	Req    *types.EvacuateVsanNode_Task         `xml:"urn:vim25 EvacuateVsanNode_Task,omitempty"`
    +	Res    *types.EvacuateVsanNode_TaskResponse `xml:"urn:vim25 EvacuateVsanNode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EvacuateVsanNode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EvacuateVsanNode_Task(ctx context.Context, r soap.RoundTripper, req *types.EvacuateVsanNode_Task) (*types.EvacuateVsanNode_TaskResponse, error) {
    +	var reqBody, resBody EvacuateVsanNode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type EvcManagerBody struct {
    +	Req    *types.EvcManager         `xml:"urn:vim25 EvcManager,omitempty"`
    +	Res    *types.EvcManagerResponse `xml:"urn:vim25 EvcManagerResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *EvcManagerBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func EvcManager(ctx context.Context, r soap.RoundTripper, req *types.EvcManager) (*types.EvcManagerResponse, error) {
    +	var reqBody, resBody EvcManagerBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExecuteHostProfileBody struct {
    +	Req    *types.ExecuteHostProfile         `xml:"urn:vim25 ExecuteHostProfile,omitempty"`
    +	Res    *types.ExecuteHostProfileResponse `xml:"urn:vim25 ExecuteHostProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExecuteHostProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExecuteHostProfile(ctx context.Context, r soap.RoundTripper, req *types.ExecuteHostProfile) (*types.ExecuteHostProfileResponse, error) {
    +	var reqBody, resBody ExecuteHostProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExecuteSimpleCommandBody struct {
    +	Req    *types.ExecuteSimpleCommand         `xml:"urn:vim25 ExecuteSimpleCommand,omitempty"`
    +	Res    *types.ExecuteSimpleCommandResponse `xml:"urn:vim25 ExecuteSimpleCommandResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExecuteSimpleCommandBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExecuteSimpleCommand(ctx context.Context, r soap.RoundTripper, req *types.ExecuteSimpleCommand) (*types.ExecuteSimpleCommandResponse, error) {
    +	var reqBody, resBody ExecuteSimpleCommandBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExitLockdownModeBody struct {
    +	Req    *types.ExitLockdownMode         `xml:"urn:vim25 ExitLockdownMode,omitempty"`
    +	Res    *types.ExitLockdownModeResponse `xml:"urn:vim25 ExitLockdownModeResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExitLockdownModeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExitLockdownMode(ctx context.Context, r soap.RoundTripper, req *types.ExitLockdownMode) (*types.ExitLockdownModeResponse, error) {
    +	var reqBody, resBody ExitLockdownModeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExitMaintenanceMode_TaskBody struct {
    +	Req    *types.ExitMaintenanceMode_Task         `xml:"urn:vim25 ExitMaintenanceMode_Task,omitempty"`
    +	Res    *types.ExitMaintenanceMode_TaskResponse `xml:"urn:vim25 ExitMaintenanceMode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExitMaintenanceMode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExitMaintenanceMode_Task(ctx context.Context, r soap.RoundTripper, req *types.ExitMaintenanceMode_Task) (*types.ExitMaintenanceMode_TaskResponse, error) {
    +	var reqBody, resBody ExitMaintenanceMode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExpandVmfsDatastoreBody struct {
    +	Req    *types.ExpandVmfsDatastore         `xml:"urn:vim25 ExpandVmfsDatastore,omitempty"`
    +	Res    *types.ExpandVmfsDatastoreResponse `xml:"urn:vim25 ExpandVmfsDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExpandVmfsDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExpandVmfsDatastore(ctx context.Context, r soap.RoundTripper, req *types.ExpandVmfsDatastore) (*types.ExpandVmfsDatastoreResponse, error) {
    +	var reqBody, resBody ExpandVmfsDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExpandVmfsExtentBody struct {
    +	Req    *types.ExpandVmfsExtent         `xml:"urn:vim25 ExpandVmfsExtent,omitempty"`
    +	Res    *types.ExpandVmfsExtentResponse `xml:"urn:vim25 ExpandVmfsExtentResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExpandVmfsExtentBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExpandVmfsExtent(ctx context.Context, r soap.RoundTripper, req *types.ExpandVmfsExtent) (*types.ExpandVmfsExtentResponse, error) {
    +	var reqBody, resBody ExpandVmfsExtentBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExportAnswerFile_TaskBody struct {
    +	Req    *types.ExportAnswerFile_Task         `xml:"urn:vim25 ExportAnswerFile_Task,omitempty"`
    +	Res    *types.ExportAnswerFile_TaskResponse `xml:"urn:vim25 ExportAnswerFile_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExportAnswerFile_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExportAnswerFile_Task(ctx context.Context, r soap.RoundTripper, req *types.ExportAnswerFile_Task) (*types.ExportAnswerFile_TaskResponse, error) {
    +	var reqBody, resBody ExportAnswerFile_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExportProfileBody struct {
    +	Req    *types.ExportProfile         `xml:"urn:vim25 ExportProfile,omitempty"`
    +	Res    *types.ExportProfileResponse `xml:"urn:vim25 ExportProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExportProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExportProfile(ctx context.Context, r soap.RoundTripper, req *types.ExportProfile) (*types.ExportProfileResponse, error) {
    +	var reqBody, resBody ExportProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExportSnapshotBody struct {
    +	Req    *types.ExportSnapshot         `xml:"urn:vim25 ExportSnapshot,omitempty"`
    +	Res    *types.ExportSnapshotResponse `xml:"urn:vim25 ExportSnapshotResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExportSnapshotBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExportSnapshot(ctx context.Context, r soap.RoundTripper, req *types.ExportSnapshot) (*types.ExportSnapshotResponse, error) {
    +	var reqBody, resBody ExportSnapshotBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExportVAppBody struct {
    +	Req    *types.ExportVApp         `xml:"urn:vim25 ExportVApp,omitempty"`
    +	Res    *types.ExportVAppResponse `xml:"urn:vim25 ExportVAppResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExportVAppBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExportVApp(ctx context.Context, r soap.RoundTripper, req *types.ExportVApp) (*types.ExportVAppResponse, error) {
    +	var reqBody, resBody ExportVAppBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExportVmBody struct {
    +	Req    *types.ExportVm         `xml:"urn:vim25 ExportVm,omitempty"`
    +	Res    *types.ExportVmResponse `xml:"urn:vim25 ExportVmResponse,omitempty"`
    +	Fault_ *soap.Fault             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExportVmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExportVm(ctx context.Context, r soap.RoundTripper, req *types.ExportVm) (*types.ExportVmResponse, error) {
    +	var reqBody, resBody ExportVmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExtendDisk_TaskBody struct {
    +	Req    *types.ExtendDisk_Task         `xml:"urn:vim25 ExtendDisk_Task,omitempty"`
    +	Res    *types.ExtendDisk_TaskResponse `xml:"urn:vim25 ExtendDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExtendDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExtendDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.ExtendDisk_Task) (*types.ExtendDisk_TaskResponse, error) {
    +	var reqBody, resBody ExtendDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExtendVffsBody struct {
    +	Req    *types.ExtendVffs         `xml:"urn:vim25 ExtendVffs,omitempty"`
    +	Res    *types.ExtendVffsResponse `xml:"urn:vim25 ExtendVffsResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExtendVffsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExtendVffs(ctx context.Context, r soap.RoundTripper, req *types.ExtendVffs) (*types.ExtendVffsResponse, error) {
    +	var reqBody, resBody ExtendVffsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExtendVirtualDisk_TaskBody struct {
    +	Req    *types.ExtendVirtualDisk_Task         `xml:"urn:vim25 ExtendVirtualDisk_Task,omitempty"`
    +	Res    *types.ExtendVirtualDisk_TaskResponse `xml:"urn:vim25 ExtendVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExtendVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExtendVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.ExtendVirtualDisk_Task) (*types.ExtendVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody ExtendVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExtendVmfsDatastoreBody struct {
    +	Req    *types.ExtendVmfsDatastore         `xml:"urn:vim25 ExtendVmfsDatastore,omitempty"`
    +	Res    *types.ExtendVmfsDatastoreResponse `xml:"urn:vim25 ExtendVmfsDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExtendVmfsDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExtendVmfsDatastore(ctx context.Context, r soap.RoundTripper, req *types.ExtendVmfsDatastore) (*types.ExtendVmfsDatastoreResponse, error) {
    +	var reqBody, resBody ExtendVmfsDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ExtractOvfEnvironmentBody struct {
    +	Req    *types.ExtractOvfEnvironment         `xml:"urn:vim25 ExtractOvfEnvironment,omitempty"`
    +	Res    *types.ExtractOvfEnvironmentResponse `xml:"urn:vim25 ExtractOvfEnvironmentResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ExtractOvfEnvironmentBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ExtractOvfEnvironment(ctx context.Context, r soap.RoundTripper, req *types.ExtractOvfEnvironment) (*types.ExtractOvfEnvironmentResponse, error) {
    +	var reqBody, resBody ExtractOvfEnvironmentBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FetchDVPortKeysBody struct {
    +	Req    *types.FetchDVPortKeys         `xml:"urn:vim25 FetchDVPortKeys,omitempty"`
    +	Res    *types.FetchDVPortKeysResponse `xml:"urn:vim25 FetchDVPortKeysResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FetchDVPortKeysBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FetchDVPortKeys(ctx context.Context, r soap.RoundTripper, req *types.FetchDVPortKeys) (*types.FetchDVPortKeysResponse, error) {
    +	var reqBody, resBody FetchDVPortKeysBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FetchDVPortsBody struct {
    +	Req    *types.FetchDVPorts         `xml:"urn:vim25 FetchDVPorts,omitempty"`
    +	Res    *types.FetchDVPortsResponse `xml:"urn:vim25 FetchDVPortsResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FetchDVPortsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FetchDVPorts(ctx context.Context, r soap.RoundTripper, req *types.FetchDVPorts) (*types.FetchDVPortsResponse, error) {
    +	var reqBody, resBody FetchDVPortsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FetchSystemEventLogBody struct {
    +	Req    *types.FetchSystemEventLog         `xml:"urn:vim25 FetchSystemEventLog,omitempty"`
    +	Res    *types.FetchSystemEventLogResponse `xml:"urn:vim25 FetchSystemEventLogResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FetchSystemEventLogBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FetchSystemEventLog(ctx context.Context, r soap.RoundTripper, req *types.FetchSystemEventLog) (*types.FetchSystemEventLogResponse, error) {
    +	var reqBody, resBody FetchSystemEventLogBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FetchUserPrivilegeOnEntitiesBody struct {
    +	Req    *types.FetchUserPrivilegeOnEntities         `xml:"urn:vim25 FetchUserPrivilegeOnEntities,omitempty"`
    +	Res    *types.FetchUserPrivilegeOnEntitiesResponse `xml:"urn:vim25 FetchUserPrivilegeOnEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FetchUserPrivilegeOnEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FetchUserPrivilegeOnEntities(ctx context.Context, r soap.RoundTripper, req *types.FetchUserPrivilegeOnEntities) (*types.FetchUserPrivilegeOnEntitiesResponse, error) {
    +	var reqBody, resBody FetchUserPrivilegeOnEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindAllByDnsNameBody struct {
    +	Req    *types.FindAllByDnsName         `xml:"urn:vim25 FindAllByDnsName,omitempty"`
    +	Res    *types.FindAllByDnsNameResponse `xml:"urn:vim25 FindAllByDnsNameResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindAllByDnsNameBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindAllByDnsName(ctx context.Context, r soap.RoundTripper, req *types.FindAllByDnsName) (*types.FindAllByDnsNameResponse, error) {
    +	var reqBody, resBody FindAllByDnsNameBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindAllByIpBody struct {
    +	Req    *types.FindAllByIp         `xml:"urn:vim25 FindAllByIp,omitempty"`
    +	Res    *types.FindAllByIpResponse `xml:"urn:vim25 FindAllByIpResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindAllByIpBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindAllByIp(ctx context.Context, r soap.RoundTripper, req *types.FindAllByIp) (*types.FindAllByIpResponse, error) {
    +	var reqBody, resBody FindAllByIpBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindAllByUuidBody struct {
    +	Req    *types.FindAllByUuid         `xml:"urn:vim25 FindAllByUuid,omitempty"`
    +	Res    *types.FindAllByUuidResponse `xml:"urn:vim25 FindAllByUuidResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindAllByUuidBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindAllByUuid(ctx context.Context, r soap.RoundTripper, req *types.FindAllByUuid) (*types.FindAllByUuidResponse, error) {
    +	var reqBody, resBody FindAllByUuidBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindAssociatedProfileBody struct {
    +	Req    *types.FindAssociatedProfile         `xml:"urn:vim25 FindAssociatedProfile,omitempty"`
    +	Res    *types.FindAssociatedProfileResponse `xml:"urn:vim25 FindAssociatedProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindAssociatedProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindAssociatedProfile(ctx context.Context, r soap.RoundTripper, req *types.FindAssociatedProfile) (*types.FindAssociatedProfileResponse, error) {
    +	var reqBody, resBody FindAssociatedProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindByDatastorePathBody struct {
    +	Req    *types.FindByDatastorePath         `xml:"urn:vim25 FindByDatastorePath,omitempty"`
    +	Res    *types.FindByDatastorePathResponse `xml:"urn:vim25 FindByDatastorePathResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindByDatastorePathBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindByDatastorePath(ctx context.Context, r soap.RoundTripper, req *types.FindByDatastorePath) (*types.FindByDatastorePathResponse, error) {
    +	var reqBody, resBody FindByDatastorePathBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindByDnsNameBody struct {
    +	Req    *types.FindByDnsName         `xml:"urn:vim25 FindByDnsName,omitempty"`
    +	Res    *types.FindByDnsNameResponse `xml:"urn:vim25 FindByDnsNameResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindByDnsNameBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindByDnsName(ctx context.Context, r soap.RoundTripper, req *types.FindByDnsName) (*types.FindByDnsNameResponse, error) {
    +	var reqBody, resBody FindByDnsNameBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindByInventoryPathBody struct {
    +	Req    *types.FindByInventoryPath         `xml:"urn:vim25 FindByInventoryPath,omitempty"`
    +	Res    *types.FindByInventoryPathResponse `xml:"urn:vim25 FindByInventoryPathResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindByInventoryPathBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindByInventoryPath(ctx context.Context, r soap.RoundTripper, req *types.FindByInventoryPath) (*types.FindByInventoryPathResponse, error) {
    +	var reqBody, resBody FindByInventoryPathBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindByIpBody struct {
    +	Req    *types.FindByIp         `xml:"urn:vim25 FindByIp,omitempty"`
    +	Res    *types.FindByIpResponse `xml:"urn:vim25 FindByIpResponse,omitempty"`
    +	Fault_ *soap.Fault             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindByIpBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindByIp(ctx context.Context, r soap.RoundTripper, req *types.FindByIp) (*types.FindByIpResponse, error) {
    +	var reqBody, resBody FindByIpBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindByUuidBody struct {
    +	Req    *types.FindByUuid         `xml:"urn:vim25 FindByUuid,omitempty"`
    +	Res    *types.FindByUuidResponse `xml:"urn:vim25 FindByUuidResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindByUuidBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindByUuid(ctx context.Context, r soap.RoundTripper, req *types.FindByUuid) (*types.FindByUuidResponse, error) {
    +	var reqBody, resBody FindByUuidBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindChildBody struct {
    +	Req    *types.FindChild         `xml:"urn:vim25 FindChild,omitempty"`
    +	Res    *types.FindChildResponse `xml:"urn:vim25 FindChildResponse,omitempty"`
    +	Fault_ *soap.Fault              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindChildBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindChild(ctx context.Context, r soap.RoundTripper, req *types.FindChild) (*types.FindChildResponse, error) {
    +	var reqBody, resBody FindChildBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindExtensionBody struct {
    +	Req    *types.FindExtension         `xml:"urn:vim25 FindExtension,omitempty"`
    +	Res    *types.FindExtensionResponse `xml:"urn:vim25 FindExtensionResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindExtensionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindExtension(ctx context.Context, r soap.RoundTripper, req *types.FindExtension) (*types.FindExtensionResponse, error) {
    +	var reqBody, resBody FindExtensionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FindRulesForVmBody struct {
    +	Req    *types.FindRulesForVm         `xml:"urn:vim25 FindRulesForVm,omitempty"`
    +	Res    *types.FindRulesForVmResponse `xml:"urn:vim25 FindRulesForVmResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FindRulesForVmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FindRulesForVm(ctx context.Context, r soap.RoundTripper, req *types.FindRulesForVm) (*types.FindRulesForVmResponse, error) {
    +	var reqBody, resBody FindRulesForVmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FormatVffsBody struct {
    +	Req    *types.FormatVffs         `xml:"urn:vim25 FormatVffs,omitempty"`
    +	Res    *types.FormatVffsResponse `xml:"urn:vim25 FormatVffsResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FormatVffsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FormatVffs(ctx context.Context, r soap.RoundTripper, req *types.FormatVffs) (*types.FormatVffsResponse, error) {
    +	var reqBody, resBody FormatVffsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FormatVmfsBody struct {
    +	Req    *types.FormatVmfs         `xml:"urn:vim25 FormatVmfs,omitempty"`
    +	Res    *types.FormatVmfsResponse `xml:"urn:vim25 FormatVmfsResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FormatVmfsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FormatVmfs(ctx context.Context, r soap.RoundTripper, req *types.FormatVmfs) (*types.FormatVmfsResponse, error) {
    +	var reqBody, resBody FormatVmfsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateCertificateSigningRequestBody struct {
    +	Req    *types.GenerateCertificateSigningRequest         `xml:"urn:vim25 GenerateCertificateSigningRequest,omitempty"`
    +	Res    *types.GenerateCertificateSigningRequestResponse `xml:"urn:vim25 GenerateCertificateSigningRequestResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateCertificateSigningRequestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateCertificateSigningRequest(ctx context.Context, r soap.RoundTripper, req *types.GenerateCertificateSigningRequest) (*types.GenerateCertificateSigningRequestResponse, error) {
    +	var reqBody, resBody GenerateCertificateSigningRequestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateCertificateSigningRequestByDnBody struct {
    +	Req    *types.GenerateCertificateSigningRequestByDn         `xml:"urn:vim25 GenerateCertificateSigningRequestByDn,omitempty"`
    +	Res    *types.GenerateCertificateSigningRequestByDnResponse `xml:"urn:vim25 GenerateCertificateSigningRequestByDnResponse,omitempty"`
    +	Fault_ *soap.Fault                                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateCertificateSigningRequestByDnBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateCertificateSigningRequestByDn(ctx context.Context, r soap.RoundTripper, req *types.GenerateCertificateSigningRequestByDn) (*types.GenerateCertificateSigningRequestByDnResponse, error) {
    +	var reqBody, resBody GenerateCertificateSigningRequestByDnBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateClientCsrBody struct {
    +	Req    *types.GenerateClientCsr         `xml:"urn:vim25 GenerateClientCsr,omitempty"`
    +	Res    *types.GenerateClientCsrResponse `xml:"urn:vim25 GenerateClientCsrResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateClientCsrBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateClientCsr(ctx context.Context, r soap.RoundTripper, req *types.GenerateClientCsr) (*types.GenerateClientCsrResponse, error) {
    +	var reqBody, resBody GenerateClientCsrBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateConfigTaskListBody struct {
    +	Req    *types.GenerateConfigTaskList         `xml:"urn:vim25 GenerateConfigTaskList,omitempty"`
    +	Res    *types.GenerateConfigTaskListResponse `xml:"urn:vim25 GenerateConfigTaskListResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateConfigTaskListBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateConfigTaskList(ctx context.Context, r soap.RoundTripper, req *types.GenerateConfigTaskList) (*types.GenerateConfigTaskListResponse, error) {
    +	var reqBody, resBody GenerateConfigTaskListBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateHostConfigTaskSpec_TaskBody struct {
    +	Req    *types.GenerateHostConfigTaskSpec_Task         `xml:"urn:vim25 GenerateHostConfigTaskSpec_Task,omitempty"`
    +	Res    *types.GenerateHostConfigTaskSpec_TaskResponse `xml:"urn:vim25 GenerateHostConfigTaskSpec_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateHostConfigTaskSpec_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateHostConfigTaskSpec_Task(ctx context.Context, r soap.RoundTripper, req *types.GenerateHostConfigTaskSpec_Task) (*types.GenerateHostConfigTaskSpec_TaskResponse, error) {
    +	var reqBody, resBody GenerateHostConfigTaskSpec_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateHostProfileTaskList_TaskBody struct {
    +	Req    *types.GenerateHostProfileTaskList_Task         `xml:"urn:vim25 GenerateHostProfileTaskList_Task,omitempty"`
    +	Res    *types.GenerateHostProfileTaskList_TaskResponse `xml:"urn:vim25 GenerateHostProfileTaskList_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateHostProfileTaskList_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateHostProfileTaskList_Task(ctx context.Context, r soap.RoundTripper, req *types.GenerateHostProfileTaskList_Task) (*types.GenerateHostProfileTaskList_TaskResponse, error) {
    +	var reqBody, resBody GenerateHostProfileTaskList_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateKeyBody struct {
    +	Req    *types.GenerateKey         `xml:"urn:vim25 GenerateKey,omitempty"`
    +	Res    *types.GenerateKeyResponse `xml:"urn:vim25 GenerateKeyResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateKeyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateKey(ctx context.Context, r soap.RoundTripper, req *types.GenerateKey) (*types.GenerateKeyResponse, error) {
    +	var reqBody, resBody GenerateKeyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateLogBundles_TaskBody struct {
    +	Req    *types.GenerateLogBundles_Task         `xml:"urn:vim25 GenerateLogBundles_Task,omitempty"`
    +	Res    *types.GenerateLogBundles_TaskResponse `xml:"urn:vim25 GenerateLogBundles_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateLogBundles_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateLogBundles_Task(ctx context.Context, r soap.RoundTripper, req *types.GenerateLogBundles_Task) (*types.GenerateLogBundles_TaskResponse, error) {
    +	var reqBody, resBody GenerateLogBundles_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GenerateSelfSignedClientCertBody struct {
    +	Req    *types.GenerateSelfSignedClientCert         `xml:"urn:vim25 GenerateSelfSignedClientCert,omitempty"`
    +	Res    *types.GenerateSelfSignedClientCertResponse `xml:"urn:vim25 GenerateSelfSignedClientCertResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GenerateSelfSignedClientCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GenerateSelfSignedClientCert(ctx context.Context, r soap.RoundTripper, req *types.GenerateSelfSignedClientCert) (*types.GenerateSelfSignedClientCertResponse, error) {
    +	var reqBody, resBody GenerateSelfSignedClientCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetAlarmBody struct {
    +	Req    *types.GetAlarm         `xml:"urn:vim25 GetAlarm,omitempty"`
    +	Res    *types.GetAlarmResponse `xml:"urn:vim25 GetAlarmResponse,omitempty"`
    +	Fault_ *soap.Fault             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetAlarmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetAlarm(ctx context.Context, r soap.RoundTripper, req *types.GetAlarm) (*types.GetAlarmResponse, error) {
    +	var reqBody, resBody GetAlarmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetAlarmStateBody struct {
    +	Req    *types.GetAlarmState         `xml:"urn:vim25 GetAlarmState,omitempty"`
    +	Res    *types.GetAlarmStateResponse `xml:"urn:vim25 GetAlarmStateResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetAlarmStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetAlarmState(ctx context.Context, r soap.RoundTripper, req *types.GetAlarmState) (*types.GetAlarmStateResponse, error) {
    +	var reqBody, resBody GetAlarmStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetCustomizationSpecBody struct {
    +	Req    *types.GetCustomizationSpec         `xml:"urn:vim25 GetCustomizationSpec,omitempty"`
    +	Res    *types.GetCustomizationSpecResponse `xml:"urn:vim25 GetCustomizationSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetCustomizationSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetCustomizationSpec(ctx context.Context, r soap.RoundTripper, req *types.GetCustomizationSpec) (*types.GetCustomizationSpecResponse, error) {
    +	var reqBody, resBody GetCustomizationSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetPublicKeyBody struct {
    +	Req    *types.GetPublicKey         `xml:"urn:vim25 GetPublicKey,omitempty"`
    +	Res    *types.GetPublicKeyResponse `xml:"urn:vim25 GetPublicKeyResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetPublicKeyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetPublicKey(ctx context.Context, r soap.RoundTripper, req *types.GetPublicKey) (*types.GetPublicKeyResponse, error) {
    +	var reqBody, resBody GetPublicKeyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetResourceUsageBody struct {
    +	Req    *types.GetResourceUsage         `xml:"urn:vim25 GetResourceUsage,omitempty"`
    +	Res    *types.GetResourceUsageResponse `xml:"urn:vim25 GetResourceUsageResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetResourceUsageBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetResourceUsage(ctx context.Context, r soap.RoundTripper, req *types.GetResourceUsage) (*types.GetResourceUsageResponse, error) {
    +	var reqBody, resBody GetResourceUsageBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetVchaClusterHealthBody struct {
    +	Req    *types.GetVchaClusterHealth         `xml:"urn:vim25 GetVchaClusterHealth,omitempty"`
    +	Res    *types.GetVchaClusterHealthResponse `xml:"urn:vim25 GetVchaClusterHealthResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetVchaClusterHealthBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetVchaClusterHealth(ctx context.Context, r soap.RoundTripper, req *types.GetVchaClusterHealth) (*types.GetVchaClusterHealthResponse, error) {
    +	var reqBody, resBody GetVchaClusterHealthBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetVsanObjExtAttrsBody struct {
    +	Req    *types.GetVsanObjExtAttrs         `xml:"urn:vim25 GetVsanObjExtAttrs,omitempty"`
    +	Res    *types.GetVsanObjExtAttrsResponse `xml:"urn:vim25 GetVsanObjExtAttrsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetVsanObjExtAttrsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetVsanObjExtAttrs(ctx context.Context, r soap.RoundTripper, req *types.GetVsanObjExtAttrs) (*types.GetVsanObjExtAttrsResponse, error) {
    +	var reqBody, resBody GetVsanObjExtAttrsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HasMonitoredEntityBody struct {
    +	Req    *types.HasMonitoredEntity         `xml:"urn:vim25 HasMonitoredEntity,omitempty"`
    +	Res    *types.HasMonitoredEntityResponse `xml:"urn:vim25 HasMonitoredEntityResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HasMonitoredEntityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HasMonitoredEntity(ctx context.Context, r soap.RoundTripper, req *types.HasMonitoredEntity) (*types.HasMonitoredEntityResponse, error) {
    +	var reqBody, resBody HasMonitoredEntityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HasPrivilegeOnEntitiesBody struct {
    +	Req    *types.HasPrivilegeOnEntities         `xml:"urn:vim25 HasPrivilegeOnEntities,omitempty"`
    +	Res    *types.HasPrivilegeOnEntitiesResponse `xml:"urn:vim25 HasPrivilegeOnEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HasPrivilegeOnEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HasPrivilegeOnEntities(ctx context.Context, r soap.RoundTripper, req *types.HasPrivilegeOnEntities) (*types.HasPrivilegeOnEntitiesResponse, error) {
    +	var reqBody, resBody HasPrivilegeOnEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HasPrivilegeOnEntityBody struct {
    +	Req    *types.HasPrivilegeOnEntity         `xml:"urn:vim25 HasPrivilegeOnEntity,omitempty"`
    +	Res    *types.HasPrivilegeOnEntityResponse `xml:"urn:vim25 HasPrivilegeOnEntityResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HasPrivilegeOnEntityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HasPrivilegeOnEntity(ctx context.Context, r soap.RoundTripper, req *types.HasPrivilegeOnEntity) (*types.HasPrivilegeOnEntityResponse, error) {
    +	var reqBody, resBody HasPrivilegeOnEntityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HasProviderBody struct {
    +	Req    *types.HasProvider         `xml:"urn:vim25 HasProvider,omitempty"`
    +	Res    *types.HasProviderResponse `xml:"urn:vim25 HasProviderResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HasProviderBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HasProvider(ctx context.Context, r soap.RoundTripper, req *types.HasProvider) (*types.HasProviderResponse, error) {
    +	var reqBody, resBody HasProviderBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HasUserPrivilegeOnEntitiesBody struct {
    +	Req    *types.HasUserPrivilegeOnEntities         `xml:"urn:vim25 HasUserPrivilegeOnEntities,omitempty"`
    +	Res    *types.HasUserPrivilegeOnEntitiesResponse `xml:"urn:vim25 HasUserPrivilegeOnEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HasUserPrivilegeOnEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HasUserPrivilegeOnEntities(ctx context.Context, r soap.RoundTripper, req *types.HasUserPrivilegeOnEntities) (*types.HasUserPrivilegeOnEntitiesResponse, error) {
    +	var reqBody, resBody HasUserPrivilegeOnEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostClearVStorageObjectControlFlagsBody struct {
    +	Req    *types.HostClearVStorageObjectControlFlags         `xml:"urn:vim25 HostClearVStorageObjectControlFlags,omitempty"`
    +	Res    *types.HostClearVStorageObjectControlFlagsResponse `xml:"urn:vim25 HostClearVStorageObjectControlFlagsResponse,omitempty"`
    +	Fault_ *soap.Fault                                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostClearVStorageObjectControlFlagsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostClearVStorageObjectControlFlags(ctx context.Context, r soap.RoundTripper, req *types.HostClearVStorageObjectControlFlags) (*types.HostClearVStorageObjectControlFlagsResponse, error) {
    +	var reqBody, resBody HostClearVStorageObjectControlFlagsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostCloneVStorageObject_TaskBody struct {
    +	Req    *types.HostCloneVStorageObject_Task         `xml:"urn:vim25 HostCloneVStorageObject_Task,omitempty"`
    +	Res    *types.HostCloneVStorageObject_TaskResponse `xml:"urn:vim25 HostCloneVStorageObject_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostCloneVStorageObject_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostCloneVStorageObject_Task(ctx context.Context, r soap.RoundTripper, req *types.HostCloneVStorageObject_Task) (*types.HostCloneVStorageObject_TaskResponse, error) {
    +	var reqBody, resBody HostCloneVStorageObject_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostConfigVFlashCacheBody struct {
    +	Req    *types.HostConfigVFlashCache         `xml:"urn:vim25 HostConfigVFlashCache,omitempty"`
    +	Res    *types.HostConfigVFlashCacheResponse `xml:"urn:vim25 HostConfigVFlashCacheResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostConfigVFlashCacheBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostConfigVFlashCache(ctx context.Context, r soap.RoundTripper, req *types.HostConfigVFlashCache) (*types.HostConfigVFlashCacheResponse, error) {
    +	var reqBody, resBody HostConfigVFlashCacheBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostConfigureVFlashResourceBody struct {
    +	Req    *types.HostConfigureVFlashResource         `xml:"urn:vim25 HostConfigureVFlashResource,omitempty"`
    +	Res    *types.HostConfigureVFlashResourceResponse `xml:"urn:vim25 HostConfigureVFlashResourceResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostConfigureVFlashResourceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostConfigureVFlashResource(ctx context.Context, r soap.RoundTripper, req *types.HostConfigureVFlashResource) (*types.HostConfigureVFlashResourceResponse, error) {
    +	var reqBody, resBody HostConfigureVFlashResourceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostCreateDisk_TaskBody struct {
    +	Req    *types.HostCreateDisk_Task         `xml:"urn:vim25 HostCreateDisk_Task,omitempty"`
    +	Res    *types.HostCreateDisk_TaskResponse `xml:"urn:vim25 HostCreateDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostCreateDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostCreateDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.HostCreateDisk_Task) (*types.HostCreateDisk_TaskResponse, error) {
    +	var reqBody, resBody HostCreateDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostDeleteVStorageObject_TaskBody struct {
    +	Req    *types.HostDeleteVStorageObject_Task         `xml:"urn:vim25 HostDeleteVStorageObject_Task,omitempty"`
    +	Res    *types.HostDeleteVStorageObject_TaskResponse `xml:"urn:vim25 HostDeleteVStorageObject_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostDeleteVStorageObject_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostDeleteVStorageObject_Task(ctx context.Context, r soap.RoundTripper, req *types.HostDeleteVStorageObject_Task) (*types.HostDeleteVStorageObject_TaskResponse, error) {
    +	var reqBody, resBody HostDeleteVStorageObject_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostExtendDisk_TaskBody struct {
    +	Req    *types.HostExtendDisk_Task         `xml:"urn:vim25 HostExtendDisk_Task,omitempty"`
    +	Res    *types.HostExtendDisk_TaskResponse `xml:"urn:vim25 HostExtendDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostExtendDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostExtendDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.HostExtendDisk_Task) (*types.HostExtendDisk_TaskResponse, error) {
    +	var reqBody, resBody HostExtendDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostGetVFlashModuleDefaultConfigBody struct {
    +	Req    *types.HostGetVFlashModuleDefaultConfig         `xml:"urn:vim25 HostGetVFlashModuleDefaultConfig,omitempty"`
    +	Res    *types.HostGetVFlashModuleDefaultConfigResponse `xml:"urn:vim25 HostGetVFlashModuleDefaultConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostGetVFlashModuleDefaultConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostGetVFlashModuleDefaultConfig(ctx context.Context, r soap.RoundTripper, req *types.HostGetVFlashModuleDefaultConfig) (*types.HostGetVFlashModuleDefaultConfigResponse, error) {
    +	var reqBody, resBody HostGetVFlashModuleDefaultConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostImageConfigGetAcceptanceBody struct {
    +	Req    *types.HostImageConfigGetAcceptance         `xml:"urn:vim25 HostImageConfigGetAcceptance,omitempty"`
    +	Res    *types.HostImageConfigGetAcceptanceResponse `xml:"urn:vim25 HostImageConfigGetAcceptanceResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostImageConfigGetAcceptanceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostImageConfigGetAcceptance(ctx context.Context, r soap.RoundTripper, req *types.HostImageConfigGetAcceptance) (*types.HostImageConfigGetAcceptanceResponse, error) {
    +	var reqBody, resBody HostImageConfigGetAcceptanceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostImageConfigGetProfileBody struct {
    +	Req    *types.HostImageConfigGetProfile         `xml:"urn:vim25 HostImageConfigGetProfile,omitempty"`
    +	Res    *types.HostImageConfigGetProfileResponse `xml:"urn:vim25 HostImageConfigGetProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostImageConfigGetProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostImageConfigGetProfile(ctx context.Context, r soap.RoundTripper, req *types.HostImageConfigGetProfile) (*types.HostImageConfigGetProfileResponse, error) {
    +	var reqBody, resBody HostImageConfigGetProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostInflateDisk_TaskBody struct {
    +	Req    *types.HostInflateDisk_Task         `xml:"urn:vim25 HostInflateDisk_Task,omitempty"`
    +	Res    *types.HostInflateDisk_TaskResponse `xml:"urn:vim25 HostInflateDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostInflateDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostInflateDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.HostInflateDisk_Task) (*types.HostInflateDisk_TaskResponse, error) {
    +	var reqBody, resBody HostInflateDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostListVStorageObjectBody struct {
    +	Req    *types.HostListVStorageObject         `xml:"urn:vim25 HostListVStorageObject,omitempty"`
    +	Res    *types.HostListVStorageObjectResponse `xml:"urn:vim25 HostListVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostListVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostListVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.HostListVStorageObject) (*types.HostListVStorageObjectResponse, error) {
    +	var reqBody, resBody HostListVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostProfileResetValidationStateBody struct {
    +	Req    *types.HostProfileResetValidationState         `xml:"urn:vim25 HostProfileResetValidationState,omitempty"`
    +	Res    *types.HostProfileResetValidationStateResponse `xml:"urn:vim25 HostProfileResetValidationStateResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostProfileResetValidationStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostProfileResetValidationState(ctx context.Context, r soap.RoundTripper, req *types.HostProfileResetValidationState) (*types.HostProfileResetValidationStateResponse, error) {
    +	var reqBody, resBody HostProfileResetValidationStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostReconcileDatastoreInventory_TaskBody struct {
    +	Req    *types.HostReconcileDatastoreInventory_Task         `xml:"urn:vim25 HostReconcileDatastoreInventory_Task,omitempty"`
    +	Res    *types.HostReconcileDatastoreInventory_TaskResponse `xml:"urn:vim25 HostReconcileDatastoreInventory_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostReconcileDatastoreInventory_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostReconcileDatastoreInventory_Task(ctx context.Context, r soap.RoundTripper, req *types.HostReconcileDatastoreInventory_Task) (*types.HostReconcileDatastoreInventory_TaskResponse, error) {
    +	var reqBody, resBody HostReconcileDatastoreInventory_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostRegisterDiskBody struct {
    +	Req    *types.HostRegisterDisk         `xml:"urn:vim25 HostRegisterDisk,omitempty"`
    +	Res    *types.HostRegisterDiskResponse `xml:"urn:vim25 HostRegisterDiskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostRegisterDiskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostRegisterDisk(ctx context.Context, r soap.RoundTripper, req *types.HostRegisterDisk) (*types.HostRegisterDiskResponse, error) {
    +	var reqBody, resBody HostRegisterDiskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostRelocateVStorageObject_TaskBody struct {
    +	Req    *types.HostRelocateVStorageObject_Task         `xml:"urn:vim25 HostRelocateVStorageObject_Task,omitempty"`
    +	Res    *types.HostRelocateVStorageObject_TaskResponse `xml:"urn:vim25 HostRelocateVStorageObject_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostRelocateVStorageObject_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostRelocateVStorageObject_Task(ctx context.Context, r soap.RoundTripper, req *types.HostRelocateVStorageObject_Task) (*types.HostRelocateVStorageObject_TaskResponse, error) {
    +	var reqBody, resBody HostRelocateVStorageObject_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostRemoveVFlashResourceBody struct {
    +	Req    *types.HostRemoveVFlashResource         `xml:"urn:vim25 HostRemoveVFlashResource,omitempty"`
    +	Res    *types.HostRemoveVFlashResourceResponse `xml:"urn:vim25 HostRemoveVFlashResourceResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostRemoveVFlashResourceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostRemoveVFlashResource(ctx context.Context, r soap.RoundTripper, req *types.HostRemoveVFlashResource) (*types.HostRemoveVFlashResourceResponse, error) {
    +	var reqBody, resBody HostRemoveVFlashResourceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostRenameVStorageObjectBody struct {
    +	Req    *types.HostRenameVStorageObject         `xml:"urn:vim25 HostRenameVStorageObject,omitempty"`
    +	Res    *types.HostRenameVStorageObjectResponse `xml:"urn:vim25 HostRenameVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostRenameVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostRenameVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.HostRenameVStorageObject) (*types.HostRenameVStorageObjectResponse, error) {
    +	var reqBody, resBody HostRenameVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostRetrieveVStorageInfrastructureObjectPolicyBody struct {
    +	Req    *types.HostRetrieveVStorageInfrastructureObjectPolicy         `xml:"urn:vim25 HostRetrieveVStorageInfrastructureObjectPolicy,omitempty"`
    +	Res    *types.HostRetrieveVStorageInfrastructureObjectPolicyResponse `xml:"urn:vim25 HostRetrieveVStorageInfrastructureObjectPolicyResponse,omitempty"`
    +	Fault_ *soap.Fault                                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostRetrieveVStorageInfrastructureObjectPolicyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostRetrieveVStorageInfrastructureObjectPolicy(ctx context.Context, r soap.RoundTripper, req *types.HostRetrieveVStorageInfrastructureObjectPolicy) (*types.HostRetrieveVStorageInfrastructureObjectPolicyResponse, error) {
    +	var reqBody, resBody HostRetrieveVStorageInfrastructureObjectPolicyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostRetrieveVStorageObjectBody struct {
    +	Req    *types.HostRetrieveVStorageObject         `xml:"urn:vim25 HostRetrieveVStorageObject,omitempty"`
    +	Res    *types.HostRetrieveVStorageObjectResponse `xml:"urn:vim25 HostRetrieveVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostRetrieveVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostRetrieveVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.HostRetrieveVStorageObject) (*types.HostRetrieveVStorageObjectResponse, error) {
    +	var reqBody, resBody HostRetrieveVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostRetrieveVStorageObjectStateBody struct {
    +	Req    *types.HostRetrieveVStorageObjectState         `xml:"urn:vim25 HostRetrieveVStorageObjectState,omitempty"`
    +	Res    *types.HostRetrieveVStorageObjectStateResponse `xml:"urn:vim25 HostRetrieveVStorageObjectStateResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostRetrieveVStorageObjectStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostRetrieveVStorageObjectState(ctx context.Context, r soap.RoundTripper, req *types.HostRetrieveVStorageObjectState) (*types.HostRetrieveVStorageObjectStateResponse, error) {
    +	var reqBody, resBody HostRetrieveVStorageObjectStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostScheduleReconcileDatastoreInventoryBody struct {
    +	Req    *types.HostScheduleReconcileDatastoreInventory         `xml:"urn:vim25 HostScheduleReconcileDatastoreInventory,omitempty"`
    +	Res    *types.HostScheduleReconcileDatastoreInventoryResponse `xml:"urn:vim25 HostScheduleReconcileDatastoreInventoryResponse,omitempty"`
    +	Fault_ *soap.Fault                                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostScheduleReconcileDatastoreInventoryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostScheduleReconcileDatastoreInventory(ctx context.Context, r soap.RoundTripper, req *types.HostScheduleReconcileDatastoreInventory) (*types.HostScheduleReconcileDatastoreInventoryResponse, error) {
    +	var reqBody, resBody HostScheduleReconcileDatastoreInventoryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostSetVStorageObjectControlFlagsBody struct {
    +	Req    *types.HostSetVStorageObjectControlFlags         `xml:"urn:vim25 HostSetVStorageObjectControlFlags,omitempty"`
    +	Res    *types.HostSetVStorageObjectControlFlagsResponse `xml:"urn:vim25 HostSetVStorageObjectControlFlagsResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostSetVStorageObjectControlFlagsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostSetVStorageObjectControlFlags(ctx context.Context, r soap.RoundTripper, req *types.HostSetVStorageObjectControlFlags) (*types.HostSetVStorageObjectControlFlagsResponse, error) {
    +	var reqBody, resBody HostSetVStorageObjectControlFlagsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostSpecGetUpdatedHostsBody struct {
    +	Req    *types.HostSpecGetUpdatedHosts         `xml:"urn:vim25 HostSpecGetUpdatedHosts,omitempty"`
    +	Res    *types.HostSpecGetUpdatedHostsResponse `xml:"urn:vim25 HostSpecGetUpdatedHostsResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostSpecGetUpdatedHostsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostSpecGetUpdatedHosts(ctx context.Context, r soap.RoundTripper, req *types.HostSpecGetUpdatedHosts) (*types.HostSpecGetUpdatedHostsResponse, error) {
    +	var reqBody, resBody HostSpecGetUpdatedHostsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostVStorageObjectCreateDiskFromSnapshot_TaskBody struct {
    +	Req    *types.HostVStorageObjectCreateDiskFromSnapshot_Task         `xml:"urn:vim25 HostVStorageObjectCreateDiskFromSnapshot_Task,omitempty"`
    +	Res    *types.HostVStorageObjectCreateDiskFromSnapshot_TaskResponse `xml:"urn:vim25 HostVStorageObjectCreateDiskFromSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostVStorageObjectCreateDiskFromSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostVStorageObjectCreateDiskFromSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.HostVStorageObjectCreateDiskFromSnapshot_Task) (*types.HostVStorageObjectCreateDiskFromSnapshot_TaskResponse, error) {
    +	var reqBody, resBody HostVStorageObjectCreateDiskFromSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostVStorageObjectCreateSnapshot_TaskBody struct {
    +	Req    *types.HostVStorageObjectCreateSnapshot_Task         `xml:"urn:vim25 HostVStorageObjectCreateSnapshot_Task,omitempty"`
    +	Res    *types.HostVStorageObjectCreateSnapshot_TaskResponse `xml:"urn:vim25 HostVStorageObjectCreateSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostVStorageObjectCreateSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostVStorageObjectCreateSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.HostVStorageObjectCreateSnapshot_Task) (*types.HostVStorageObjectCreateSnapshot_TaskResponse, error) {
    +	var reqBody, resBody HostVStorageObjectCreateSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostVStorageObjectDeleteSnapshot_TaskBody struct {
    +	Req    *types.HostVStorageObjectDeleteSnapshot_Task         `xml:"urn:vim25 HostVStorageObjectDeleteSnapshot_Task,omitempty"`
    +	Res    *types.HostVStorageObjectDeleteSnapshot_TaskResponse `xml:"urn:vim25 HostVStorageObjectDeleteSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostVStorageObjectDeleteSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostVStorageObjectDeleteSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.HostVStorageObjectDeleteSnapshot_Task) (*types.HostVStorageObjectDeleteSnapshot_TaskResponse, error) {
    +	var reqBody, resBody HostVStorageObjectDeleteSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostVStorageObjectRetrieveSnapshotInfoBody struct {
    +	Req    *types.HostVStorageObjectRetrieveSnapshotInfo         `xml:"urn:vim25 HostVStorageObjectRetrieveSnapshotInfo,omitempty"`
    +	Res    *types.HostVStorageObjectRetrieveSnapshotInfoResponse `xml:"urn:vim25 HostVStorageObjectRetrieveSnapshotInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostVStorageObjectRetrieveSnapshotInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostVStorageObjectRetrieveSnapshotInfo(ctx context.Context, r soap.RoundTripper, req *types.HostVStorageObjectRetrieveSnapshotInfo) (*types.HostVStorageObjectRetrieveSnapshotInfoResponse, error) {
    +	var reqBody, resBody HostVStorageObjectRetrieveSnapshotInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HostVStorageObjectRevert_TaskBody struct {
    +	Req    *types.HostVStorageObjectRevert_Task         `xml:"urn:vim25 HostVStorageObjectRevert_Task,omitempty"`
    +	Res    *types.HostVStorageObjectRevert_TaskResponse `xml:"urn:vim25 HostVStorageObjectRevert_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HostVStorageObjectRevert_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HostVStorageObjectRevert_Task(ctx context.Context, r soap.RoundTripper, req *types.HostVStorageObjectRevert_Task) (*types.HostVStorageObjectRevert_TaskResponse, error) {
    +	var reqBody, resBody HostVStorageObjectRevert_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HttpNfcLeaseAbortBody struct {
    +	Req    *types.HttpNfcLeaseAbort         `xml:"urn:vim25 HttpNfcLeaseAbort,omitempty"`
    +	Res    *types.HttpNfcLeaseAbortResponse `xml:"urn:vim25 HttpNfcLeaseAbortResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HttpNfcLeaseAbortBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HttpNfcLeaseAbort(ctx context.Context, r soap.RoundTripper, req *types.HttpNfcLeaseAbort) (*types.HttpNfcLeaseAbortResponse, error) {
    +	var reqBody, resBody HttpNfcLeaseAbortBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HttpNfcLeaseCompleteBody struct {
    +	Req    *types.HttpNfcLeaseComplete         `xml:"urn:vim25 HttpNfcLeaseComplete,omitempty"`
    +	Res    *types.HttpNfcLeaseCompleteResponse `xml:"urn:vim25 HttpNfcLeaseCompleteResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HttpNfcLeaseCompleteBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HttpNfcLeaseComplete(ctx context.Context, r soap.RoundTripper, req *types.HttpNfcLeaseComplete) (*types.HttpNfcLeaseCompleteResponse, error) {
    +	var reqBody, resBody HttpNfcLeaseCompleteBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HttpNfcLeaseGetManifestBody struct {
    +	Req    *types.HttpNfcLeaseGetManifest         `xml:"urn:vim25 HttpNfcLeaseGetManifest,omitempty"`
    +	Res    *types.HttpNfcLeaseGetManifestResponse `xml:"urn:vim25 HttpNfcLeaseGetManifestResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HttpNfcLeaseGetManifestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HttpNfcLeaseGetManifest(ctx context.Context, r soap.RoundTripper, req *types.HttpNfcLeaseGetManifest) (*types.HttpNfcLeaseGetManifestResponse, error) {
    +	var reqBody, resBody HttpNfcLeaseGetManifestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HttpNfcLeaseProgressBody struct {
    +	Req    *types.HttpNfcLeaseProgress         `xml:"urn:vim25 HttpNfcLeaseProgress,omitempty"`
    +	Res    *types.HttpNfcLeaseProgressResponse `xml:"urn:vim25 HttpNfcLeaseProgressResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HttpNfcLeaseProgressBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HttpNfcLeaseProgress(ctx context.Context, r soap.RoundTripper, req *types.HttpNfcLeaseProgress) (*types.HttpNfcLeaseProgressResponse, error) {
    +	var reqBody, resBody HttpNfcLeaseProgressBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HttpNfcLeasePullFromUrls_TaskBody struct {
    +	Req    *types.HttpNfcLeasePullFromUrls_Task         `xml:"urn:vim25 HttpNfcLeasePullFromUrls_Task,omitempty"`
    +	Res    *types.HttpNfcLeasePullFromUrls_TaskResponse `xml:"urn:vim25 HttpNfcLeasePullFromUrls_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HttpNfcLeasePullFromUrls_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HttpNfcLeasePullFromUrls_Task(ctx context.Context, r soap.RoundTripper, req *types.HttpNfcLeasePullFromUrls_Task) (*types.HttpNfcLeasePullFromUrls_TaskResponse, error) {
    +	var reqBody, resBody HttpNfcLeasePullFromUrls_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type HttpNfcLeaseSetManifestChecksumTypeBody struct {
    +	Req    *types.HttpNfcLeaseSetManifestChecksumType         `xml:"urn:vim25 HttpNfcLeaseSetManifestChecksumType,omitempty"`
    +	Res    *types.HttpNfcLeaseSetManifestChecksumTypeResponse `xml:"urn:vim25 HttpNfcLeaseSetManifestChecksumTypeResponse,omitempty"`
    +	Fault_ *soap.Fault                                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *HttpNfcLeaseSetManifestChecksumTypeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func HttpNfcLeaseSetManifestChecksumType(ctx context.Context, r soap.RoundTripper, req *types.HttpNfcLeaseSetManifestChecksumType) (*types.HttpNfcLeaseSetManifestChecksumTypeResponse, error) {
    +	var reqBody, resBody HttpNfcLeaseSetManifestChecksumTypeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ImpersonateUserBody struct {
    +	Req    *types.ImpersonateUser         `xml:"urn:vim25 ImpersonateUser,omitempty"`
    +	Res    *types.ImpersonateUserResponse `xml:"urn:vim25 ImpersonateUserResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ImpersonateUserBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ImpersonateUser(ctx context.Context, r soap.RoundTripper, req *types.ImpersonateUser) (*types.ImpersonateUserResponse, error) {
    +	var reqBody, resBody ImpersonateUserBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ImportCertificateForCAM_TaskBody struct {
    +	Req    *types.ImportCertificateForCAM_Task         `xml:"urn:vim25 ImportCertificateForCAM_Task,omitempty"`
    +	Res    *types.ImportCertificateForCAM_TaskResponse `xml:"urn:vim25 ImportCertificateForCAM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ImportCertificateForCAM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ImportCertificateForCAM_Task(ctx context.Context, r soap.RoundTripper, req *types.ImportCertificateForCAM_Task) (*types.ImportCertificateForCAM_TaskResponse, error) {
    +	var reqBody, resBody ImportCertificateForCAM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ImportUnmanagedSnapshotBody struct {
    +	Req    *types.ImportUnmanagedSnapshot         `xml:"urn:vim25 ImportUnmanagedSnapshot,omitempty"`
    +	Res    *types.ImportUnmanagedSnapshotResponse `xml:"urn:vim25 ImportUnmanagedSnapshotResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ImportUnmanagedSnapshotBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ImportUnmanagedSnapshot(ctx context.Context, r soap.RoundTripper, req *types.ImportUnmanagedSnapshot) (*types.ImportUnmanagedSnapshotResponse, error) {
    +	var reqBody, resBody ImportUnmanagedSnapshotBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ImportVAppBody struct {
    +	Req    *types.ImportVApp         `xml:"urn:vim25 ImportVApp,omitempty"`
    +	Res    *types.ImportVAppResponse `xml:"urn:vim25 ImportVAppResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ImportVAppBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ImportVApp(ctx context.Context, r soap.RoundTripper, req *types.ImportVApp) (*types.ImportVAppResponse, error) {
    +	var reqBody, resBody ImportVAppBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InflateDisk_TaskBody struct {
    +	Req    *types.InflateDisk_Task         `xml:"urn:vim25 InflateDisk_Task,omitempty"`
    +	Res    *types.InflateDisk_TaskResponse `xml:"urn:vim25 InflateDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InflateDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InflateDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.InflateDisk_Task) (*types.InflateDisk_TaskResponse, error) {
    +	var reqBody, resBody InflateDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InflateVirtualDisk_TaskBody struct {
    +	Req    *types.InflateVirtualDisk_Task         `xml:"urn:vim25 InflateVirtualDisk_Task,omitempty"`
    +	Res    *types.InflateVirtualDisk_TaskResponse `xml:"urn:vim25 InflateVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InflateVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InflateVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.InflateVirtualDisk_Task) (*types.InflateVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody InflateVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InitializeDisks_TaskBody struct {
    +	Req    *types.InitializeDisks_Task         `xml:"urn:vim25 InitializeDisks_Task,omitempty"`
    +	Res    *types.InitializeDisks_TaskResponse `xml:"urn:vim25 InitializeDisks_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InitializeDisks_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InitializeDisks_Task(ctx context.Context, r soap.RoundTripper, req *types.InitializeDisks_Task) (*types.InitializeDisks_TaskResponse, error) {
    +	var reqBody, resBody InitializeDisks_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InitiateFileTransferFromGuestBody struct {
    +	Req    *types.InitiateFileTransferFromGuest         `xml:"urn:vim25 InitiateFileTransferFromGuest,omitempty"`
    +	Res    *types.InitiateFileTransferFromGuestResponse `xml:"urn:vim25 InitiateFileTransferFromGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InitiateFileTransferFromGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InitiateFileTransferFromGuest(ctx context.Context, r soap.RoundTripper, req *types.InitiateFileTransferFromGuest) (*types.InitiateFileTransferFromGuestResponse, error) {
    +	var reqBody, resBody InitiateFileTransferFromGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InitiateFileTransferToGuestBody struct {
    +	Req    *types.InitiateFileTransferToGuest         `xml:"urn:vim25 InitiateFileTransferToGuest,omitempty"`
    +	Res    *types.InitiateFileTransferToGuestResponse `xml:"urn:vim25 InitiateFileTransferToGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InitiateFileTransferToGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InitiateFileTransferToGuest(ctx context.Context, r soap.RoundTripper, req *types.InitiateFileTransferToGuest) (*types.InitiateFileTransferToGuestResponse, error) {
    +	var reqBody, resBody InitiateFileTransferToGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InstallHostPatchV2_TaskBody struct {
    +	Req    *types.InstallHostPatchV2_Task         `xml:"urn:vim25 InstallHostPatchV2_Task,omitempty"`
    +	Res    *types.InstallHostPatchV2_TaskResponse `xml:"urn:vim25 InstallHostPatchV2_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InstallHostPatchV2_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InstallHostPatchV2_Task(ctx context.Context, r soap.RoundTripper, req *types.InstallHostPatchV2_Task) (*types.InstallHostPatchV2_TaskResponse, error) {
    +	var reqBody, resBody InstallHostPatchV2_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InstallHostPatch_TaskBody struct {
    +	Req    *types.InstallHostPatch_Task         `xml:"urn:vim25 InstallHostPatch_Task,omitempty"`
    +	Res    *types.InstallHostPatch_TaskResponse `xml:"urn:vim25 InstallHostPatch_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InstallHostPatch_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InstallHostPatch_Task(ctx context.Context, r soap.RoundTripper, req *types.InstallHostPatch_Task) (*types.InstallHostPatch_TaskResponse, error) {
    +	var reqBody, resBody InstallHostPatch_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InstallIoFilter_TaskBody struct {
    +	Req    *types.InstallIoFilter_Task         `xml:"urn:vim25 InstallIoFilter_Task,omitempty"`
    +	Res    *types.InstallIoFilter_TaskResponse `xml:"urn:vim25 InstallIoFilter_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InstallIoFilter_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InstallIoFilter_Task(ctx context.Context, r soap.RoundTripper, req *types.InstallIoFilter_Task) (*types.InstallIoFilter_TaskResponse, error) {
    +	var reqBody, resBody InstallIoFilter_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InstallServerCertificateBody struct {
    +	Req    *types.InstallServerCertificate         `xml:"urn:vim25 InstallServerCertificate,omitempty"`
    +	Res    *types.InstallServerCertificateResponse `xml:"urn:vim25 InstallServerCertificateResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InstallServerCertificateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InstallServerCertificate(ctx context.Context, r soap.RoundTripper, req *types.InstallServerCertificate) (*types.InstallServerCertificateResponse, error) {
    +	var reqBody, resBody InstallServerCertificateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InstallSmartCardTrustAnchorBody struct {
    +	Req    *types.InstallSmartCardTrustAnchor         `xml:"urn:vim25 InstallSmartCardTrustAnchor,omitempty"`
    +	Res    *types.InstallSmartCardTrustAnchorResponse `xml:"urn:vim25 InstallSmartCardTrustAnchorResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InstallSmartCardTrustAnchorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InstallSmartCardTrustAnchor(ctx context.Context, r soap.RoundTripper, req *types.InstallSmartCardTrustAnchor) (*types.InstallSmartCardTrustAnchorResponse, error) {
    +	var reqBody, resBody InstallSmartCardTrustAnchorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InstantClone_TaskBody struct {
    +	Req    *types.InstantClone_Task         `xml:"urn:vim25 InstantClone_Task,omitempty"`
    +	Res    *types.InstantClone_TaskResponse `xml:"urn:vim25 InstantClone_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InstantClone_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InstantClone_Task(ctx context.Context, r soap.RoundTripper, req *types.InstantClone_Task) (*types.InstantClone_TaskResponse, error) {
    +	var reqBody, resBody InstantClone_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type IsSharedGraphicsActiveBody struct {
    +	Req    *types.IsSharedGraphicsActive         `xml:"urn:vim25 IsSharedGraphicsActive,omitempty"`
    +	Res    *types.IsSharedGraphicsActiveResponse `xml:"urn:vim25 IsSharedGraphicsActiveResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *IsSharedGraphicsActiveBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func IsSharedGraphicsActive(ctx context.Context, r soap.RoundTripper, req *types.IsSharedGraphicsActive) (*types.IsSharedGraphicsActiveResponse, error) {
    +	var reqBody, resBody IsSharedGraphicsActiveBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type JoinDomainWithCAM_TaskBody struct {
    +	Req    *types.JoinDomainWithCAM_Task         `xml:"urn:vim25 JoinDomainWithCAM_Task,omitempty"`
    +	Res    *types.JoinDomainWithCAM_TaskResponse `xml:"urn:vim25 JoinDomainWithCAM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *JoinDomainWithCAM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func JoinDomainWithCAM_Task(ctx context.Context, r soap.RoundTripper, req *types.JoinDomainWithCAM_Task) (*types.JoinDomainWithCAM_TaskResponse, error) {
    +	var reqBody, resBody JoinDomainWithCAM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type JoinDomain_TaskBody struct {
    +	Req    *types.JoinDomain_Task         `xml:"urn:vim25 JoinDomain_Task,omitempty"`
    +	Res    *types.JoinDomain_TaskResponse `xml:"urn:vim25 JoinDomain_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *JoinDomain_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func JoinDomain_Task(ctx context.Context, r soap.RoundTripper, req *types.JoinDomain_Task) (*types.JoinDomain_TaskResponse, error) {
    +	var reqBody, resBody JoinDomain_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LeaveCurrentDomain_TaskBody struct {
    +	Req    *types.LeaveCurrentDomain_Task         `xml:"urn:vim25 LeaveCurrentDomain_Task,omitempty"`
    +	Res    *types.LeaveCurrentDomain_TaskResponse `xml:"urn:vim25 LeaveCurrentDomain_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LeaveCurrentDomain_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func LeaveCurrentDomain_Task(ctx context.Context, r soap.RoundTripper, req *types.LeaveCurrentDomain_Task) (*types.LeaveCurrentDomain_TaskResponse, error) {
    +	var reqBody, resBody LeaveCurrentDomain_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListCACertificateRevocationListsBody struct {
    +	Req    *types.ListCACertificateRevocationLists         `xml:"urn:vim25 ListCACertificateRevocationLists,omitempty"`
    +	Res    *types.ListCACertificateRevocationListsResponse `xml:"urn:vim25 ListCACertificateRevocationListsResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListCACertificateRevocationListsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListCACertificateRevocationLists(ctx context.Context, r soap.RoundTripper, req *types.ListCACertificateRevocationLists) (*types.ListCACertificateRevocationListsResponse, error) {
    +	var reqBody, resBody ListCACertificateRevocationListsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListCACertificatesBody struct {
    +	Req    *types.ListCACertificates         `xml:"urn:vim25 ListCACertificates,omitempty"`
    +	Res    *types.ListCACertificatesResponse `xml:"urn:vim25 ListCACertificatesResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListCACertificatesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListCACertificates(ctx context.Context, r soap.RoundTripper, req *types.ListCACertificates) (*types.ListCACertificatesResponse, error) {
    +	var reqBody, resBody ListCACertificatesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListFilesInGuestBody struct {
    +	Req    *types.ListFilesInGuest         `xml:"urn:vim25 ListFilesInGuest,omitempty"`
    +	Res    *types.ListFilesInGuestResponse `xml:"urn:vim25 ListFilesInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListFilesInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListFilesInGuest(ctx context.Context, r soap.RoundTripper, req *types.ListFilesInGuest) (*types.ListFilesInGuestResponse, error) {
    +	var reqBody, resBody ListFilesInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListGuestAliasesBody struct {
    +	Req    *types.ListGuestAliases         `xml:"urn:vim25 ListGuestAliases,omitempty"`
    +	Res    *types.ListGuestAliasesResponse `xml:"urn:vim25 ListGuestAliasesResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListGuestAliasesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListGuestAliases(ctx context.Context, r soap.RoundTripper, req *types.ListGuestAliases) (*types.ListGuestAliasesResponse, error) {
    +	var reqBody, resBody ListGuestAliasesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListGuestMappedAliasesBody struct {
    +	Req    *types.ListGuestMappedAliases         `xml:"urn:vim25 ListGuestMappedAliases,omitempty"`
    +	Res    *types.ListGuestMappedAliasesResponse `xml:"urn:vim25 ListGuestMappedAliasesResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListGuestMappedAliasesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListGuestMappedAliases(ctx context.Context, r soap.RoundTripper, req *types.ListGuestMappedAliases) (*types.ListGuestMappedAliasesResponse, error) {
    +	var reqBody, resBody ListGuestMappedAliasesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListKeysBody struct {
    +	Req    *types.ListKeys         `xml:"urn:vim25 ListKeys,omitempty"`
    +	Res    *types.ListKeysResponse `xml:"urn:vim25 ListKeysResponse,omitempty"`
    +	Fault_ *soap.Fault             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListKeysBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListKeys(ctx context.Context, r soap.RoundTripper, req *types.ListKeys) (*types.ListKeysResponse, error) {
    +	var reqBody, resBody ListKeysBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListKmipServersBody struct {
    +	Req    *types.ListKmipServers         `xml:"urn:vim25 ListKmipServers,omitempty"`
    +	Res    *types.ListKmipServersResponse `xml:"urn:vim25 ListKmipServersResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListKmipServersBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListKmipServers(ctx context.Context, r soap.RoundTripper, req *types.ListKmipServers) (*types.ListKmipServersResponse, error) {
    +	var reqBody, resBody ListKmipServersBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListProcessesInGuestBody struct {
    +	Req    *types.ListProcessesInGuest         `xml:"urn:vim25 ListProcessesInGuest,omitempty"`
    +	Res    *types.ListProcessesInGuestResponse `xml:"urn:vim25 ListProcessesInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListProcessesInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListProcessesInGuest(ctx context.Context, r soap.RoundTripper, req *types.ListProcessesInGuest) (*types.ListProcessesInGuestResponse, error) {
    +	var reqBody, resBody ListProcessesInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListRegistryKeysInGuestBody struct {
    +	Req    *types.ListRegistryKeysInGuest         `xml:"urn:vim25 ListRegistryKeysInGuest,omitempty"`
    +	Res    *types.ListRegistryKeysInGuestResponse `xml:"urn:vim25 ListRegistryKeysInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListRegistryKeysInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListRegistryKeysInGuest(ctx context.Context, r soap.RoundTripper, req *types.ListRegistryKeysInGuest) (*types.ListRegistryKeysInGuestResponse, error) {
    +	var reqBody, resBody ListRegistryKeysInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListRegistryValuesInGuestBody struct {
    +	Req    *types.ListRegistryValuesInGuest         `xml:"urn:vim25 ListRegistryValuesInGuest,omitempty"`
    +	Res    *types.ListRegistryValuesInGuestResponse `xml:"urn:vim25 ListRegistryValuesInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListRegistryValuesInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListRegistryValuesInGuest(ctx context.Context, r soap.RoundTripper, req *types.ListRegistryValuesInGuest) (*types.ListRegistryValuesInGuestResponse, error) {
    +	var reqBody, resBody ListRegistryValuesInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListSmartCardTrustAnchorsBody struct {
    +	Req    *types.ListSmartCardTrustAnchors         `xml:"urn:vim25 ListSmartCardTrustAnchors,omitempty"`
    +	Res    *types.ListSmartCardTrustAnchorsResponse `xml:"urn:vim25 ListSmartCardTrustAnchorsResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListSmartCardTrustAnchorsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListSmartCardTrustAnchors(ctx context.Context, r soap.RoundTripper, req *types.ListSmartCardTrustAnchors) (*types.ListSmartCardTrustAnchorsResponse, error) {
    +	var reqBody, resBody ListSmartCardTrustAnchorsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListTagsAttachedToVStorageObjectBody struct {
    +	Req    *types.ListTagsAttachedToVStorageObject         `xml:"urn:vim25 ListTagsAttachedToVStorageObject,omitempty"`
    +	Res    *types.ListTagsAttachedToVStorageObjectResponse `xml:"urn:vim25 ListTagsAttachedToVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListTagsAttachedToVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListTagsAttachedToVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.ListTagsAttachedToVStorageObject) (*types.ListTagsAttachedToVStorageObjectResponse, error) {
    +	var reqBody, resBody ListTagsAttachedToVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListVStorageObjectBody struct {
    +	Req    *types.ListVStorageObject         `xml:"urn:vim25 ListVStorageObject,omitempty"`
    +	Res    *types.ListVStorageObjectResponse `xml:"urn:vim25 ListVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.ListVStorageObject) (*types.ListVStorageObjectResponse, error) {
    +	var reqBody, resBody ListVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ListVStorageObjectsAttachedToTagBody struct {
    +	Req    *types.ListVStorageObjectsAttachedToTag         `xml:"urn:vim25 ListVStorageObjectsAttachedToTag,omitempty"`
    +	Res    *types.ListVStorageObjectsAttachedToTagResponse `xml:"urn:vim25 ListVStorageObjectsAttachedToTagResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ListVStorageObjectsAttachedToTagBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ListVStorageObjectsAttachedToTag(ctx context.Context, r soap.RoundTripper, req *types.ListVStorageObjectsAttachedToTag) (*types.ListVStorageObjectsAttachedToTagResponse, error) {
    +	var reqBody, resBody ListVStorageObjectsAttachedToTagBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LogUserEventBody struct {
    +	Req    *types.LogUserEvent         `xml:"urn:vim25 LogUserEvent,omitempty"`
    +	Res    *types.LogUserEventResponse `xml:"urn:vim25 LogUserEventResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LogUserEventBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func LogUserEvent(ctx context.Context, r soap.RoundTripper, req *types.LogUserEvent) (*types.LogUserEventResponse, error) {
    +	var reqBody, resBody LogUserEventBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LoginBody struct {
    +	Req    *types.Login         `xml:"urn:vim25 Login,omitempty"`
    +	Res    *types.LoginResponse `xml:"urn:vim25 LoginResponse,omitempty"`
    +	Fault_ *soap.Fault          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LoginBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func Login(ctx context.Context, r soap.RoundTripper, req *types.Login) (*types.LoginResponse, error) {
    +	var reqBody, resBody LoginBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LoginBySSPIBody struct {
    +	Req    *types.LoginBySSPI         `xml:"urn:vim25 LoginBySSPI,omitempty"`
    +	Res    *types.LoginBySSPIResponse `xml:"urn:vim25 LoginBySSPIResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LoginBySSPIBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func LoginBySSPI(ctx context.Context, r soap.RoundTripper, req *types.LoginBySSPI) (*types.LoginBySSPIResponse, error) {
    +	var reqBody, resBody LoginBySSPIBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LoginByTokenBody struct {
    +	Req    *types.LoginByToken         `xml:"urn:vim25 LoginByToken,omitempty"`
    +	Res    *types.LoginByTokenResponse `xml:"urn:vim25 LoginByTokenResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LoginByTokenBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func LoginByToken(ctx context.Context, r soap.RoundTripper, req *types.LoginByToken) (*types.LoginByTokenResponse, error) {
    +	var reqBody, resBody LoginByTokenBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LoginExtensionByCertificateBody struct {
    +	Req    *types.LoginExtensionByCertificate         `xml:"urn:vim25 LoginExtensionByCertificate,omitempty"`
    +	Res    *types.LoginExtensionByCertificateResponse `xml:"urn:vim25 LoginExtensionByCertificateResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LoginExtensionByCertificateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func LoginExtensionByCertificate(ctx context.Context, r soap.RoundTripper, req *types.LoginExtensionByCertificate) (*types.LoginExtensionByCertificateResponse, error) {
    +	var reqBody, resBody LoginExtensionByCertificateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LoginExtensionBySubjectNameBody struct {
    +	Req    *types.LoginExtensionBySubjectName         `xml:"urn:vim25 LoginExtensionBySubjectName,omitempty"`
    +	Res    *types.LoginExtensionBySubjectNameResponse `xml:"urn:vim25 LoginExtensionBySubjectNameResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LoginExtensionBySubjectNameBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func LoginExtensionBySubjectName(ctx context.Context, r soap.RoundTripper, req *types.LoginExtensionBySubjectName) (*types.LoginExtensionBySubjectNameResponse, error) {
    +	var reqBody, resBody LoginExtensionBySubjectNameBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LogoutBody struct {
    +	Req    *types.Logout         `xml:"urn:vim25 Logout,omitempty"`
    +	Res    *types.LogoutResponse `xml:"urn:vim25 LogoutResponse,omitempty"`
    +	Fault_ *soap.Fault           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LogoutBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func Logout(ctx context.Context, r soap.RoundTripper, req *types.Logout) (*types.LogoutResponse, error) {
    +	var reqBody, resBody LogoutBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LookupDvPortGroupBody struct {
    +	Req    *types.LookupDvPortGroup         `xml:"urn:vim25 LookupDvPortGroup,omitempty"`
    +	Res    *types.LookupDvPortGroupResponse `xml:"urn:vim25 LookupDvPortGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LookupDvPortGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func LookupDvPortGroup(ctx context.Context, r soap.RoundTripper, req *types.LookupDvPortGroup) (*types.LookupDvPortGroupResponse, error) {
    +	var reqBody, resBody LookupDvPortGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type LookupVmOverheadMemoryBody struct {
    +	Req    *types.LookupVmOverheadMemory         `xml:"urn:vim25 LookupVmOverheadMemory,omitempty"`
    +	Res    *types.LookupVmOverheadMemoryResponse `xml:"urn:vim25 LookupVmOverheadMemoryResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *LookupVmOverheadMemoryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func LookupVmOverheadMemory(ctx context.Context, r soap.RoundTripper, req *types.LookupVmOverheadMemory) (*types.LookupVmOverheadMemoryResponse, error) {
    +	var reqBody, resBody LookupVmOverheadMemoryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MakeDirectoryBody struct {
    +	Req    *types.MakeDirectory         `xml:"urn:vim25 MakeDirectory,omitempty"`
    +	Res    *types.MakeDirectoryResponse `xml:"urn:vim25 MakeDirectoryResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MakeDirectoryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MakeDirectory(ctx context.Context, r soap.RoundTripper, req *types.MakeDirectory) (*types.MakeDirectoryResponse, error) {
    +	var reqBody, resBody MakeDirectoryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MakeDirectoryInGuestBody struct {
    +	Req    *types.MakeDirectoryInGuest         `xml:"urn:vim25 MakeDirectoryInGuest,omitempty"`
    +	Res    *types.MakeDirectoryInGuestResponse `xml:"urn:vim25 MakeDirectoryInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MakeDirectoryInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MakeDirectoryInGuest(ctx context.Context, r soap.RoundTripper, req *types.MakeDirectoryInGuest) (*types.MakeDirectoryInGuestResponse, error) {
    +	var reqBody, resBody MakeDirectoryInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MakePrimaryVM_TaskBody struct {
    +	Req    *types.MakePrimaryVM_Task         `xml:"urn:vim25 MakePrimaryVM_Task,omitempty"`
    +	Res    *types.MakePrimaryVM_TaskResponse `xml:"urn:vim25 MakePrimaryVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MakePrimaryVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MakePrimaryVM_Task(ctx context.Context, r soap.RoundTripper, req *types.MakePrimaryVM_Task) (*types.MakePrimaryVM_TaskResponse, error) {
    +	var reqBody, resBody MakePrimaryVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MarkAsLocal_TaskBody struct {
    +	Req    *types.MarkAsLocal_Task         `xml:"urn:vim25 MarkAsLocal_Task,omitempty"`
    +	Res    *types.MarkAsLocal_TaskResponse `xml:"urn:vim25 MarkAsLocal_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MarkAsLocal_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MarkAsLocal_Task(ctx context.Context, r soap.RoundTripper, req *types.MarkAsLocal_Task) (*types.MarkAsLocal_TaskResponse, error) {
    +	var reqBody, resBody MarkAsLocal_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MarkAsNonLocal_TaskBody struct {
    +	Req    *types.MarkAsNonLocal_Task         `xml:"urn:vim25 MarkAsNonLocal_Task,omitempty"`
    +	Res    *types.MarkAsNonLocal_TaskResponse `xml:"urn:vim25 MarkAsNonLocal_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MarkAsNonLocal_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MarkAsNonLocal_Task(ctx context.Context, r soap.RoundTripper, req *types.MarkAsNonLocal_Task) (*types.MarkAsNonLocal_TaskResponse, error) {
    +	var reqBody, resBody MarkAsNonLocal_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MarkAsNonSsd_TaskBody struct {
    +	Req    *types.MarkAsNonSsd_Task         `xml:"urn:vim25 MarkAsNonSsd_Task,omitempty"`
    +	Res    *types.MarkAsNonSsd_TaskResponse `xml:"urn:vim25 MarkAsNonSsd_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MarkAsNonSsd_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MarkAsNonSsd_Task(ctx context.Context, r soap.RoundTripper, req *types.MarkAsNonSsd_Task) (*types.MarkAsNonSsd_TaskResponse, error) {
    +	var reqBody, resBody MarkAsNonSsd_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MarkAsSsd_TaskBody struct {
    +	Req    *types.MarkAsSsd_Task         `xml:"urn:vim25 MarkAsSsd_Task,omitempty"`
    +	Res    *types.MarkAsSsd_TaskResponse `xml:"urn:vim25 MarkAsSsd_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MarkAsSsd_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MarkAsSsd_Task(ctx context.Context, r soap.RoundTripper, req *types.MarkAsSsd_Task) (*types.MarkAsSsd_TaskResponse, error) {
    +	var reqBody, resBody MarkAsSsd_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MarkAsTemplateBody struct {
    +	Req    *types.MarkAsTemplate         `xml:"urn:vim25 MarkAsTemplate,omitempty"`
    +	Res    *types.MarkAsTemplateResponse `xml:"urn:vim25 MarkAsTemplateResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MarkAsTemplateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MarkAsTemplate(ctx context.Context, r soap.RoundTripper, req *types.MarkAsTemplate) (*types.MarkAsTemplateResponse, error) {
    +	var reqBody, resBody MarkAsTemplateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MarkAsVirtualMachineBody struct {
    +	Req    *types.MarkAsVirtualMachine         `xml:"urn:vim25 MarkAsVirtualMachine,omitempty"`
    +	Res    *types.MarkAsVirtualMachineResponse `xml:"urn:vim25 MarkAsVirtualMachineResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MarkAsVirtualMachineBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MarkAsVirtualMachine(ctx context.Context, r soap.RoundTripper, req *types.MarkAsVirtualMachine) (*types.MarkAsVirtualMachineResponse, error) {
    +	var reqBody, resBody MarkAsVirtualMachineBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MarkDefaultBody struct {
    +	Req    *types.MarkDefault         `xml:"urn:vim25 MarkDefault,omitempty"`
    +	Res    *types.MarkDefaultResponse `xml:"urn:vim25 MarkDefaultResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MarkDefaultBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MarkDefault(ctx context.Context, r soap.RoundTripper, req *types.MarkDefault) (*types.MarkDefaultResponse, error) {
    +	var reqBody, resBody MarkDefaultBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MarkForRemovalBody struct {
    +	Req    *types.MarkForRemoval         `xml:"urn:vim25 MarkForRemoval,omitempty"`
    +	Res    *types.MarkForRemovalResponse `xml:"urn:vim25 MarkForRemovalResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MarkForRemovalBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MarkForRemoval(ctx context.Context, r soap.RoundTripper, req *types.MarkForRemoval) (*types.MarkForRemovalResponse, error) {
    +	var reqBody, resBody MarkForRemovalBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MergeDvs_TaskBody struct {
    +	Req    *types.MergeDvs_Task         `xml:"urn:vim25 MergeDvs_Task,omitempty"`
    +	Res    *types.MergeDvs_TaskResponse `xml:"urn:vim25 MergeDvs_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MergeDvs_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MergeDvs_Task(ctx context.Context, r soap.RoundTripper, req *types.MergeDvs_Task) (*types.MergeDvs_TaskResponse, error) {
    +	var reqBody, resBody MergeDvs_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MergePermissionsBody struct {
    +	Req    *types.MergePermissions         `xml:"urn:vim25 MergePermissions,omitempty"`
    +	Res    *types.MergePermissionsResponse `xml:"urn:vim25 MergePermissionsResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MergePermissionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MergePermissions(ctx context.Context, r soap.RoundTripper, req *types.MergePermissions) (*types.MergePermissionsResponse, error) {
    +	var reqBody, resBody MergePermissionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MigrateVM_TaskBody struct {
    +	Req    *types.MigrateVM_Task         `xml:"urn:vim25 MigrateVM_Task,omitempty"`
    +	Res    *types.MigrateVM_TaskResponse `xml:"urn:vim25 MigrateVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MigrateVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MigrateVM_Task(ctx context.Context, r soap.RoundTripper, req *types.MigrateVM_Task) (*types.MigrateVM_TaskResponse, error) {
    +	var reqBody, resBody MigrateVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ModifyListViewBody struct {
    +	Req    *types.ModifyListView         `xml:"urn:vim25 ModifyListView,omitempty"`
    +	Res    *types.ModifyListViewResponse `xml:"urn:vim25 ModifyListViewResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ModifyListViewBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ModifyListView(ctx context.Context, r soap.RoundTripper, req *types.ModifyListView) (*types.ModifyListViewResponse, error) {
    +	var reqBody, resBody ModifyListViewBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MountToolsInstallerBody struct {
    +	Req    *types.MountToolsInstaller         `xml:"urn:vim25 MountToolsInstaller,omitempty"`
    +	Res    *types.MountToolsInstallerResponse `xml:"urn:vim25 MountToolsInstallerResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MountToolsInstallerBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MountToolsInstaller(ctx context.Context, r soap.RoundTripper, req *types.MountToolsInstaller) (*types.MountToolsInstallerResponse, error) {
    +	var reqBody, resBody MountToolsInstallerBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MountVffsVolumeBody struct {
    +	Req    *types.MountVffsVolume         `xml:"urn:vim25 MountVffsVolume,omitempty"`
    +	Res    *types.MountVffsVolumeResponse `xml:"urn:vim25 MountVffsVolumeResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MountVffsVolumeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MountVffsVolume(ctx context.Context, r soap.RoundTripper, req *types.MountVffsVolume) (*types.MountVffsVolumeResponse, error) {
    +	var reqBody, resBody MountVffsVolumeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MountVmfsVolumeBody struct {
    +	Req    *types.MountVmfsVolume         `xml:"urn:vim25 MountVmfsVolume,omitempty"`
    +	Res    *types.MountVmfsVolumeResponse `xml:"urn:vim25 MountVmfsVolumeResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MountVmfsVolumeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MountVmfsVolume(ctx context.Context, r soap.RoundTripper, req *types.MountVmfsVolume) (*types.MountVmfsVolumeResponse, error) {
    +	var reqBody, resBody MountVmfsVolumeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MountVmfsVolumeEx_TaskBody struct {
    +	Req    *types.MountVmfsVolumeEx_Task         `xml:"urn:vim25 MountVmfsVolumeEx_Task,omitempty"`
    +	Res    *types.MountVmfsVolumeEx_TaskResponse `xml:"urn:vim25 MountVmfsVolumeEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MountVmfsVolumeEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MountVmfsVolumeEx_Task(ctx context.Context, r soap.RoundTripper, req *types.MountVmfsVolumeEx_Task) (*types.MountVmfsVolumeEx_TaskResponse, error) {
    +	var reqBody, resBody MountVmfsVolumeEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveDVPort_TaskBody struct {
    +	Req    *types.MoveDVPort_Task         `xml:"urn:vim25 MoveDVPort_Task,omitempty"`
    +	Res    *types.MoveDVPort_TaskResponse `xml:"urn:vim25 MoveDVPort_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveDVPort_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveDVPort_Task(ctx context.Context, r soap.RoundTripper, req *types.MoveDVPort_Task) (*types.MoveDVPort_TaskResponse, error) {
    +	var reqBody, resBody MoveDVPort_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveDatastoreFile_TaskBody struct {
    +	Req    *types.MoveDatastoreFile_Task         `xml:"urn:vim25 MoveDatastoreFile_Task,omitempty"`
    +	Res    *types.MoveDatastoreFile_TaskResponse `xml:"urn:vim25 MoveDatastoreFile_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveDatastoreFile_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveDatastoreFile_Task(ctx context.Context, r soap.RoundTripper, req *types.MoveDatastoreFile_Task) (*types.MoveDatastoreFile_TaskResponse, error) {
    +	var reqBody, resBody MoveDatastoreFile_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveDirectoryInGuestBody struct {
    +	Req    *types.MoveDirectoryInGuest         `xml:"urn:vim25 MoveDirectoryInGuest,omitempty"`
    +	Res    *types.MoveDirectoryInGuestResponse `xml:"urn:vim25 MoveDirectoryInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveDirectoryInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveDirectoryInGuest(ctx context.Context, r soap.RoundTripper, req *types.MoveDirectoryInGuest) (*types.MoveDirectoryInGuestResponse, error) {
    +	var reqBody, resBody MoveDirectoryInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveFileInGuestBody struct {
    +	Req    *types.MoveFileInGuest         `xml:"urn:vim25 MoveFileInGuest,omitempty"`
    +	Res    *types.MoveFileInGuestResponse `xml:"urn:vim25 MoveFileInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveFileInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveFileInGuest(ctx context.Context, r soap.RoundTripper, req *types.MoveFileInGuest) (*types.MoveFileInGuestResponse, error) {
    +	var reqBody, resBody MoveFileInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveHostInto_TaskBody struct {
    +	Req    *types.MoveHostInto_Task         `xml:"urn:vim25 MoveHostInto_Task,omitempty"`
    +	Res    *types.MoveHostInto_TaskResponse `xml:"urn:vim25 MoveHostInto_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveHostInto_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveHostInto_Task(ctx context.Context, r soap.RoundTripper, req *types.MoveHostInto_Task) (*types.MoveHostInto_TaskResponse, error) {
    +	var reqBody, resBody MoveHostInto_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveIntoFolder_TaskBody struct {
    +	Req    *types.MoveIntoFolder_Task         `xml:"urn:vim25 MoveIntoFolder_Task,omitempty"`
    +	Res    *types.MoveIntoFolder_TaskResponse `xml:"urn:vim25 MoveIntoFolder_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveIntoFolder_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveIntoFolder_Task(ctx context.Context, r soap.RoundTripper, req *types.MoveIntoFolder_Task) (*types.MoveIntoFolder_TaskResponse, error) {
    +	var reqBody, resBody MoveIntoFolder_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveIntoResourcePoolBody struct {
    +	Req    *types.MoveIntoResourcePool         `xml:"urn:vim25 MoveIntoResourcePool,omitempty"`
    +	Res    *types.MoveIntoResourcePoolResponse `xml:"urn:vim25 MoveIntoResourcePoolResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveIntoResourcePoolBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveIntoResourcePool(ctx context.Context, r soap.RoundTripper, req *types.MoveIntoResourcePool) (*types.MoveIntoResourcePoolResponse, error) {
    +	var reqBody, resBody MoveIntoResourcePoolBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveInto_TaskBody struct {
    +	Req    *types.MoveInto_Task         `xml:"urn:vim25 MoveInto_Task,omitempty"`
    +	Res    *types.MoveInto_TaskResponse `xml:"urn:vim25 MoveInto_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveInto_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveInto_Task(ctx context.Context, r soap.RoundTripper, req *types.MoveInto_Task) (*types.MoveInto_TaskResponse, error) {
    +	var reqBody, resBody MoveInto_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type MoveVirtualDisk_TaskBody struct {
    +	Req    *types.MoveVirtualDisk_Task         `xml:"urn:vim25 MoveVirtualDisk_Task,omitempty"`
    +	Res    *types.MoveVirtualDisk_TaskResponse `xml:"urn:vim25 MoveVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *MoveVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func MoveVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.MoveVirtualDisk_Task) (*types.MoveVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody MoveVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type OpenInventoryViewFolderBody struct {
    +	Req    *types.OpenInventoryViewFolder         `xml:"urn:vim25 OpenInventoryViewFolder,omitempty"`
    +	Res    *types.OpenInventoryViewFolderResponse `xml:"urn:vim25 OpenInventoryViewFolderResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *OpenInventoryViewFolderBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func OpenInventoryViewFolder(ctx context.Context, r soap.RoundTripper, req *types.OpenInventoryViewFolder) (*types.OpenInventoryViewFolderResponse, error) {
    +	var reqBody, resBody OpenInventoryViewFolderBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type OverwriteCustomizationSpecBody struct {
    +	Req    *types.OverwriteCustomizationSpec         `xml:"urn:vim25 OverwriteCustomizationSpec,omitempty"`
    +	Res    *types.OverwriteCustomizationSpecResponse `xml:"urn:vim25 OverwriteCustomizationSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *OverwriteCustomizationSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func OverwriteCustomizationSpec(ctx context.Context, r soap.RoundTripper, req *types.OverwriteCustomizationSpec) (*types.OverwriteCustomizationSpecResponse, error) {
    +	var reqBody, resBody OverwriteCustomizationSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ParseDescriptorBody struct {
    +	Req    *types.ParseDescriptor         `xml:"urn:vim25 ParseDescriptor,omitempty"`
    +	Res    *types.ParseDescriptorResponse `xml:"urn:vim25 ParseDescriptorResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ParseDescriptorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ParseDescriptor(ctx context.Context, r soap.RoundTripper, req *types.ParseDescriptor) (*types.ParseDescriptorResponse, error) {
    +	var reqBody, resBody ParseDescriptorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PerformDvsProductSpecOperation_TaskBody struct {
    +	Req    *types.PerformDvsProductSpecOperation_Task         `xml:"urn:vim25 PerformDvsProductSpecOperation_Task,omitempty"`
    +	Res    *types.PerformDvsProductSpecOperation_TaskResponse `xml:"urn:vim25 PerformDvsProductSpecOperation_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PerformDvsProductSpecOperation_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PerformDvsProductSpecOperation_Task(ctx context.Context, r soap.RoundTripper, req *types.PerformDvsProductSpecOperation_Task) (*types.PerformDvsProductSpecOperation_TaskResponse, error) {
    +	var reqBody, resBody PerformDvsProductSpecOperation_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PerformVsanUpgradePreflightCheckBody struct {
    +	Req    *types.PerformVsanUpgradePreflightCheck         `xml:"urn:vim25 PerformVsanUpgradePreflightCheck,omitempty"`
    +	Res    *types.PerformVsanUpgradePreflightCheckResponse `xml:"urn:vim25 PerformVsanUpgradePreflightCheckResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PerformVsanUpgradePreflightCheckBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PerformVsanUpgradePreflightCheck(ctx context.Context, r soap.RoundTripper, req *types.PerformVsanUpgradePreflightCheck) (*types.PerformVsanUpgradePreflightCheckResponse, error) {
    +	var reqBody, resBody PerformVsanUpgradePreflightCheckBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PerformVsanUpgrade_TaskBody struct {
    +	Req    *types.PerformVsanUpgrade_Task         `xml:"urn:vim25 PerformVsanUpgrade_Task,omitempty"`
    +	Res    *types.PerformVsanUpgrade_TaskResponse `xml:"urn:vim25 PerformVsanUpgrade_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PerformVsanUpgrade_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PerformVsanUpgrade_Task(ctx context.Context, r soap.RoundTripper, req *types.PerformVsanUpgrade_Task) (*types.PerformVsanUpgrade_TaskResponse, error) {
    +	var reqBody, resBody PerformVsanUpgrade_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PlaceVmBody struct {
    +	Req    *types.PlaceVm         `xml:"urn:vim25 PlaceVm,omitempty"`
    +	Res    *types.PlaceVmResponse `xml:"urn:vim25 PlaceVmResponse,omitempty"`
    +	Fault_ *soap.Fault            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PlaceVmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PlaceVm(ctx context.Context, r soap.RoundTripper, req *types.PlaceVm) (*types.PlaceVmResponse, error) {
    +	var reqBody, resBody PlaceVmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PostEventBody struct {
    +	Req    *types.PostEvent         `xml:"urn:vim25 PostEvent,omitempty"`
    +	Res    *types.PostEventResponse `xml:"urn:vim25 PostEventResponse,omitempty"`
    +	Fault_ *soap.Fault              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PostEventBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PostEvent(ctx context.Context, r soap.RoundTripper, req *types.PostEvent) (*types.PostEventResponse, error) {
    +	var reqBody, resBody PostEventBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PostHealthUpdatesBody struct {
    +	Req    *types.PostHealthUpdates         `xml:"urn:vim25 PostHealthUpdates,omitempty"`
    +	Res    *types.PostHealthUpdatesResponse `xml:"urn:vim25 PostHealthUpdatesResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PostHealthUpdatesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PostHealthUpdates(ctx context.Context, r soap.RoundTripper, req *types.PostHealthUpdates) (*types.PostHealthUpdatesResponse, error) {
    +	var reqBody, resBody PostHealthUpdatesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PowerDownHostToStandBy_TaskBody struct {
    +	Req    *types.PowerDownHostToStandBy_Task         `xml:"urn:vim25 PowerDownHostToStandBy_Task,omitempty"`
    +	Res    *types.PowerDownHostToStandBy_TaskResponse `xml:"urn:vim25 PowerDownHostToStandBy_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PowerDownHostToStandBy_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PowerDownHostToStandBy_Task(ctx context.Context, r soap.RoundTripper, req *types.PowerDownHostToStandBy_Task) (*types.PowerDownHostToStandBy_TaskResponse, error) {
    +	var reqBody, resBody PowerDownHostToStandBy_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PowerOffVApp_TaskBody struct {
    +	Req    *types.PowerOffVApp_Task         `xml:"urn:vim25 PowerOffVApp_Task,omitempty"`
    +	Res    *types.PowerOffVApp_TaskResponse `xml:"urn:vim25 PowerOffVApp_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PowerOffVApp_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PowerOffVApp_Task(ctx context.Context, r soap.RoundTripper, req *types.PowerOffVApp_Task) (*types.PowerOffVApp_TaskResponse, error) {
    +	var reqBody, resBody PowerOffVApp_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PowerOffVM_TaskBody struct {
    +	Req    *types.PowerOffVM_Task         `xml:"urn:vim25 PowerOffVM_Task,omitempty"`
    +	Res    *types.PowerOffVM_TaskResponse `xml:"urn:vim25 PowerOffVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PowerOffVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PowerOffVM_Task(ctx context.Context, r soap.RoundTripper, req *types.PowerOffVM_Task) (*types.PowerOffVM_TaskResponse, error) {
    +	var reqBody, resBody PowerOffVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PowerOnMultiVM_TaskBody struct {
    +	Req    *types.PowerOnMultiVM_Task         `xml:"urn:vim25 PowerOnMultiVM_Task,omitempty"`
    +	Res    *types.PowerOnMultiVM_TaskResponse `xml:"urn:vim25 PowerOnMultiVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PowerOnMultiVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PowerOnMultiVM_Task(ctx context.Context, r soap.RoundTripper, req *types.PowerOnMultiVM_Task) (*types.PowerOnMultiVM_TaskResponse, error) {
    +	var reqBody, resBody PowerOnMultiVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PowerOnVApp_TaskBody struct {
    +	Req    *types.PowerOnVApp_Task         `xml:"urn:vim25 PowerOnVApp_Task,omitempty"`
    +	Res    *types.PowerOnVApp_TaskResponse `xml:"urn:vim25 PowerOnVApp_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PowerOnVApp_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PowerOnVApp_Task(ctx context.Context, r soap.RoundTripper, req *types.PowerOnVApp_Task) (*types.PowerOnVApp_TaskResponse, error) {
    +	var reqBody, resBody PowerOnVApp_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PowerOnVM_TaskBody struct {
    +	Req    *types.PowerOnVM_Task         `xml:"urn:vim25 PowerOnVM_Task,omitempty"`
    +	Res    *types.PowerOnVM_TaskResponse `xml:"urn:vim25 PowerOnVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PowerOnVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PowerOnVM_Task(ctx context.Context, r soap.RoundTripper, req *types.PowerOnVM_Task) (*types.PowerOnVM_TaskResponse, error) {
    +	var reqBody, resBody PowerOnVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PowerUpHostFromStandBy_TaskBody struct {
    +	Req    *types.PowerUpHostFromStandBy_Task         `xml:"urn:vim25 PowerUpHostFromStandBy_Task,omitempty"`
    +	Res    *types.PowerUpHostFromStandBy_TaskResponse `xml:"urn:vim25 PowerUpHostFromStandBy_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PowerUpHostFromStandBy_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PowerUpHostFromStandBy_Task(ctx context.Context, r soap.RoundTripper, req *types.PowerUpHostFromStandBy_Task) (*types.PowerUpHostFromStandBy_TaskResponse, error) {
    +	var reqBody, resBody PowerUpHostFromStandBy_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PrepareCryptoBody struct {
    +	Req    *types.PrepareCrypto         `xml:"urn:vim25 PrepareCrypto,omitempty"`
    +	Res    *types.PrepareCryptoResponse `xml:"urn:vim25 PrepareCryptoResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PrepareCryptoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PrepareCrypto(ctx context.Context, r soap.RoundTripper, req *types.PrepareCrypto) (*types.PrepareCryptoResponse, error) {
    +	var reqBody, resBody PrepareCryptoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PromoteDisks_TaskBody struct {
    +	Req    *types.PromoteDisks_Task         `xml:"urn:vim25 PromoteDisks_Task,omitempty"`
    +	Res    *types.PromoteDisks_TaskResponse `xml:"urn:vim25 PromoteDisks_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PromoteDisks_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PromoteDisks_Task(ctx context.Context, r soap.RoundTripper, req *types.PromoteDisks_Task) (*types.PromoteDisks_TaskResponse, error) {
    +	var reqBody, resBody PromoteDisks_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PutUsbScanCodesBody struct {
    +	Req    *types.PutUsbScanCodes         `xml:"urn:vim25 PutUsbScanCodes,omitempty"`
    +	Res    *types.PutUsbScanCodesResponse `xml:"urn:vim25 PutUsbScanCodesResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PutUsbScanCodesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PutUsbScanCodes(ctx context.Context, r soap.RoundTripper, req *types.PutUsbScanCodes) (*types.PutUsbScanCodesResponse, error) {
    +	var reqBody, resBody PutUsbScanCodesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryAnswerFileStatusBody struct {
    +	Req    *types.QueryAnswerFileStatus         `xml:"urn:vim25 QueryAnswerFileStatus,omitempty"`
    +	Res    *types.QueryAnswerFileStatusResponse `xml:"urn:vim25 QueryAnswerFileStatusResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryAnswerFileStatusBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryAnswerFileStatus(ctx context.Context, r soap.RoundTripper, req *types.QueryAnswerFileStatus) (*types.QueryAnswerFileStatusResponse, error) {
    +	var reqBody, resBody QueryAnswerFileStatusBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryAssignedLicensesBody struct {
    +	Req    *types.QueryAssignedLicenses         `xml:"urn:vim25 QueryAssignedLicenses,omitempty"`
    +	Res    *types.QueryAssignedLicensesResponse `xml:"urn:vim25 QueryAssignedLicensesResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryAssignedLicensesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryAssignedLicenses(ctx context.Context, r soap.RoundTripper, req *types.QueryAssignedLicenses) (*types.QueryAssignedLicensesResponse, error) {
    +	var reqBody, resBody QueryAssignedLicensesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryAvailableDisksForVmfsBody struct {
    +	Req    *types.QueryAvailableDisksForVmfs         `xml:"urn:vim25 QueryAvailableDisksForVmfs,omitempty"`
    +	Res    *types.QueryAvailableDisksForVmfsResponse `xml:"urn:vim25 QueryAvailableDisksForVmfsResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryAvailableDisksForVmfsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryAvailableDisksForVmfs(ctx context.Context, r soap.RoundTripper, req *types.QueryAvailableDisksForVmfs) (*types.QueryAvailableDisksForVmfsResponse, error) {
    +	var reqBody, resBody QueryAvailableDisksForVmfsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryAvailableDvsSpecBody struct {
    +	Req    *types.QueryAvailableDvsSpec         `xml:"urn:vim25 QueryAvailableDvsSpec,omitempty"`
    +	Res    *types.QueryAvailableDvsSpecResponse `xml:"urn:vim25 QueryAvailableDvsSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryAvailableDvsSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryAvailableDvsSpec(ctx context.Context, r soap.RoundTripper, req *types.QueryAvailableDvsSpec) (*types.QueryAvailableDvsSpecResponse, error) {
    +	var reqBody, resBody QueryAvailableDvsSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryAvailablePartitionBody struct {
    +	Req    *types.QueryAvailablePartition         `xml:"urn:vim25 QueryAvailablePartition,omitempty"`
    +	Res    *types.QueryAvailablePartitionResponse `xml:"urn:vim25 QueryAvailablePartitionResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryAvailablePartitionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryAvailablePartition(ctx context.Context, r soap.RoundTripper, req *types.QueryAvailablePartition) (*types.QueryAvailablePartitionResponse, error) {
    +	var reqBody, resBody QueryAvailablePartitionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryAvailablePerfMetricBody struct {
    +	Req    *types.QueryAvailablePerfMetric         `xml:"urn:vim25 QueryAvailablePerfMetric,omitempty"`
    +	Res    *types.QueryAvailablePerfMetricResponse `xml:"urn:vim25 QueryAvailablePerfMetricResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryAvailablePerfMetricBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryAvailablePerfMetric(ctx context.Context, r soap.RoundTripper, req *types.QueryAvailablePerfMetric) (*types.QueryAvailablePerfMetricResponse, error) {
    +	var reqBody, resBody QueryAvailablePerfMetricBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryAvailableSsdsBody struct {
    +	Req    *types.QueryAvailableSsds         `xml:"urn:vim25 QueryAvailableSsds,omitempty"`
    +	Res    *types.QueryAvailableSsdsResponse `xml:"urn:vim25 QueryAvailableSsdsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryAvailableSsdsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryAvailableSsds(ctx context.Context, r soap.RoundTripper, req *types.QueryAvailableSsds) (*types.QueryAvailableSsdsResponse, error) {
    +	var reqBody, resBody QueryAvailableSsdsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryAvailableTimeZonesBody struct {
    +	Req    *types.QueryAvailableTimeZones         `xml:"urn:vim25 QueryAvailableTimeZones,omitempty"`
    +	Res    *types.QueryAvailableTimeZonesResponse `xml:"urn:vim25 QueryAvailableTimeZonesResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryAvailableTimeZonesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryAvailableTimeZones(ctx context.Context, r soap.RoundTripper, req *types.QueryAvailableTimeZones) (*types.QueryAvailableTimeZonesResponse, error) {
    +	var reqBody, resBody QueryAvailableTimeZonesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryBootDevicesBody struct {
    +	Req    *types.QueryBootDevices         `xml:"urn:vim25 QueryBootDevices,omitempty"`
    +	Res    *types.QueryBootDevicesResponse `xml:"urn:vim25 QueryBootDevicesResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryBootDevicesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryBootDevices(ctx context.Context, r soap.RoundTripper, req *types.QueryBootDevices) (*types.QueryBootDevicesResponse, error) {
    +	var reqBody, resBody QueryBootDevicesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryBoundVnicsBody struct {
    +	Req    *types.QueryBoundVnics         `xml:"urn:vim25 QueryBoundVnics,omitempty"`
    +	Res    *types.QueryBoundVnicsResponse `xml:"urn:vim25 QueryBoundVnicsResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryBoundVnicsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryBoundVnics(ctx context.Context, r soap.RoundTripper, req *types.QueryBoundVnics) (*types.QueryBoundVnicsResponse, error) {
    +	var reqBody, resBody QueryBoundVnicsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryCandidateNicsBody struct {
    +	Req    *types.QueryCandidateNics         `xml:"urn:vim25 QueryCandidateNics,omitempty"`
    +	Res    *types.QueryCandidateNicsResponse `xml:"urn:vim25 QueryCandidateNicsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryCandidateNicsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryCandidateNics(ctx context.Context, r soap.RoundTripper, req *types.QueryCandidateNics) (*types.QueryCandidateNicsResponse, error) {
    +	var reqBody, resBody QueryCandidateNicsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryChangedDiskAreasBody struct {
    +	Req    *types.QueryChangedDiskAreas         `xml:"urn:vim25 QueryChangedDiskAreas,omitempty"`
    +	Res    *types.QueryChangedDiskAreasResponse `xml:"urn:vim25 QueryChangedDiskAreasResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryChangedDiskAreasBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryChangedDiskAreas(ctx context.Context, r soap.RoundTripper, req *types.QueryChangedDiskAreas) (*types.QueryChangedDiskAreasResponse, error) {
    +	var reqBody, resBody QueryChangedDiskAreasBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryCmmdsBody struct {
    +	Req    *types.QueryCmmds         `xml:"urn:vim25 QueryCmmds,omitempty"`
    +	Res    *types.QueryCmmdsResponse `xml:"urn:vim25 QueryCmmdsResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryCmmdsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryCmmds(ctx context.Context, r soap.RoundTripper, req *types.QueryCmmds) (*types.QueryCmmdsResponse, error) {
    +	var reqBody, resBody QueryCmmdsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryCompatibleHostForExistingDvsBody struct {
    +	Req    *types.QueryCompatibleHostForExistingDvs         `xml:"urn:vim25 QueryCompatibleHostForExistingDvs,omitempty"`
    +	Res    *types.QueryCompatibleHostForExistingDvsResponse `xml:"urn:vim25 QueryCompatibleHostForExistingDvsResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryCompatibleHostForExistingDvsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryCompatibleHostForExistingDvs(ctx context.Context, r soap.RoundTripper, req *types.QueryCompatibleHostForExistingDvs) (*types.QueryCompatibleHostForExistingDvsResponse, error) {
    +	var reqBody, resBody QueryCompatibleHostForExistingDvsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryCompatibleHostForNewDvsBody struct {
    +	Req    *types.QueryCompatibleHostForNewDvs         `xml:"urn:vim25 QueryCompatibleHostForNewDvs,omitempty"`
    +	Res    *types.QueryCompatibleHostForNewDvsResponse `xml:"urn:vim25 QueryCompatibleHostForNewDvsResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryCompatibleHostForNewDvsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryCompatibleHostForNewDvs(ctx context.Context, r soap.RoundTripper, req *types.QueryCompatibleHostForNewDvs) (*types.QueryCompatibleHostForNewDvsResponse, error) {
    +	var reqBody, resBody QueryCompatibleHostForNewDvsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryComplianceStatusBody struct {
    +	Req    *types.QueryComplianceStatus         `xml:"urn:vim25 QueryComplianceStatus,omitempty"`
    +	Res    *types.QueryComplianceStatusResponse `xml:"urn:vim25 QueryComplianceStatusResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryComplianceStatusBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryComplianceStatus(ctx context.Context, r soap.RoundTripper, req *types.QueryComplianceStatus) (*types.QueryComplianceStatusResponse, error) {
    +	var reqBody, resBody QueryComplianceStatusBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryConfigOptionBody struct {
    +	Req    *types.QueryConfigOption         `xml:"urn:vim25 QueryConfigOption,omitempty"`
    +	Res    *types.QueryConfigOptionResponse `xml:"urn:vim25 QueryConfigOptionResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryConfigOptionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryConfigOption(ctx context.Context, r soap.RoundTripper, req *types.QueryConfigOption) (*types.QueryConfigOptionResponse, error) {
    +	var reqBody, resBody QueryConfigOptionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryConfigOptionDescriptorBody struct {
    +	Req    *types.QueryConfigOptionDescriptor         `xml:"urn:vim25 QueryConfigOptionDescriptor,omitempty"`
    +	Res    *types.QueryConfigOptionDescriptorResponse `xml:"urn:vim25 QueryConfigOptionDescriptorResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryConfigOptionDescriptorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryConfigOptionDescriptor(ctx context.Context, r soap.RoundTripper, req *types.QueryConfigOptionDescriptor) (*types.QueryConfigOptionDescriptorResponse, error) {
    +	var reqBody, resBody QueryConfigOptionDescriptorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryConfigOptionExBody struct {
    +	Req    *types.QueryConfigOptionEx         `xml:"urn:vim25 QueryConfigOptionEx,omitempty"`
    +	Res    *types.QueryConfigOptionExResponse `xml:"urn:vim25 QueryConfigOptionExResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryConfigOptionExBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryConfigOptionEx(ctx context.Context, r soap.RoundTripper, req *types.QueryConfigOptionEx) (*types.QueryConfigOptionExResponse, error) {
    +	var reqBody, resBody QueryConfigOptionExBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryConfigTargetBody struct {
    +	Req    *types.QueryConfigTarget         `xml:"urn:vim25 QueryConfigTarget,omitempty"`
    +	Res    *types.QueryConfigTargetResponse `xml:"urn:vim25 QueryConfigTargetResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryConfigTargetBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryConfigTarget(ctx context.Context, r soap.RoundTripper, req *types.QueryConfigTarget) (*types.QueryConfigTargetResponse, error) {
    +	var reqBody, resBody QueryConfigTargetBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryConfiguredModuleOptionStringBody struct {
    +	Req    *types.QueryConfiguredModuleOptionString         `xml:"urn:vim25 QueryConfiguredModuleOptionString,omitempty"`
    +	Res    *types.QueryConfiguredModuleOptionStringResponse `xml:"urn:vim25 QueryConfiguredModuleOptionStringResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryConfiguredModuleOptionStringBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryConfiguredModuleOptionString(ctx context.Context, r soap.RoundTripper, req *types.QueryConfiguredModuleOptionString) (*types.QueryConfiguredModuleOptionStringResponse, error) {
    +	var reqBody, resBody QueryConfiguredModuleOptionStringBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryConnectionInfoBody struct {
    +	Req    *types.QueryConnectionInfo         `xml:"urn:vim25 QueryConnectionInfo,omitempty"`
    +	Res    *types.QueryConnectionInfoResponse `xml:"urn:vim25 QueryConnectionInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryConnectionInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryConnectionInfo(ctx context.Context, r soap.RoundTripper, req *types.QueryConnectionInfo) (*types.QueryConnectionInfoResponse, error) {
    +	var reqBody, resBody QueryConnectionInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryConnectionInfoViaSpecBody struct {
    +	Req    *types.QueryConnectionInfoViaSpec         `xml:"urn:vim25 QueryConnectionInfoViaSpec,omitempty"`
    +	Res    *types.QueryConnectionInfoViaSpecResponse `xml:"urn:vim25 QueryConnectionInfoViaSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryConnectionInfoViaSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryConnectionInfoViaSpec(ctx context.Context, r soap.RoundTripper, req *types.QueryConnectionInfoViaSpec) (*types.QueryConnectionInfoViaSpecResponse, error) {
    +	var reqBody, resBody QueryConnectionInfoViaSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDatastorePerformanceSummaryBody struct {
    +	Req    *types.QueryDatastorePerformanceSummary         `xml:"urn:vim25 QueryDatastorePerformanceSummary,omitempty"`
    +	Res    *types.QueryDatastorePerformanceSummaryResponse `xml:"urn:vim25 QueryDatastorePerformanceSummaryResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDatastorePerformanceSummaryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDatastorePerformanceSummary(ctx context.Context, r soap.RoundTripper, req *types.QueryDatastorePerformanceSummary) (*types.QueryDatastorePerformanceSummaryResponse, error) {
    +	var reqBody, resBody QueryDatastorePerformanceSummaryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDateTimeBody struct {
    +	Req    *types.QueryDateTime         `xml:"urn:vim25 QueryDateTime,omitempty"`
    +	Res    *types.QueryDateTimeResponse `xml:"urn:vim25 QueryDateTimeResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDateTimeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDateTime(ctx context.Context, r soap.RoundTripper, req *types.QueryDateTime) (*types.QueryDateTimeResponse, error) {
    +	var reqBody, resBody QueryDateTimeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDescriptionsBody struct {
    +	Req    *types.QueryDescriptions         `xml:"urn:vim25 QueryDescriptions,omitempty"`
    +	Res    *types.QueryDescriptionsResponse `xml:"urn:vim25 QueryDescriptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDescriptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDescriptions(ctx context.Context, r soap.RoundTripper, req *types.QueryDescriptions) (*types.QueryDescriptionsResponse, error) {
    +	var reqBody, resBody QueryDescriptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDisksForVsanBody struct {
    +	Req    *types.QueryDisksForVsan         `xml:"urn:vim25 QueryDisksForVsan,omitempty"`
    +	Res    *types.QueryDisksForVsanResponse `xml:"urn:vim25 QueryDisksForVsanResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDisksForVsanBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDisksForVsan(ctx context.Context, r soap.RoundTripper, req *types.QueryDisksForVsan) (*types.QueryDisksForVsanResponse, error) {
    +	var reqBody, resBody QueryDisksForVsanBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDisksUsingFilterBody struct {
    +	Req    *types.QueryDisksUsingFilter         `xml:"urn:vim25 QueryDisksUsingFilter,omitempty"`
    +	Res    *types.QueryDisksUsingFilterResponse `xml:"urn:vim25 QueryDisksUsingFilterResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDisksUsingFilterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDisksUsingFilter(ctx context.Context, r soap.RoundTripper, req *types.QueryDisksUsingFilter) (*types.QueryDisksUsingFilterResponse, error) {
    +	var reqBody, resBody QueryDisksUsingFilterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDvsByUuidBody struct {
    +	Req    *types.QueryDvsByUuid         `xml:"urn:vim25 QueryDvsByUuid,omitempty"`
    +	Res    *types.QueryDvsByUuidResponse `xml:"urn:vim25 QueryDvsByUuidResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDvsByUuidBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDvsByUuid(ctx context.Context, r soap.RoundTripper, req *types.QueryDvsByUuid) (*types.QueryDvsByUuidResponse, error) {
    +	var reqBody, resBody QueryDvsByUuidBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDvsCheckCompatibilityBody struct {
    +	Req    *types.QueryDvsCheckCompatibility         `xml:"urn:vim25 QueryDvsCheckCompatibility,omitempty"`
    +	Res    *types.QueryDvsCheckCompatibilityResponse `xml:"urn:vim25 QueryDvsCheckCompatibilityResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDvsCheckCompatibilityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDvsCheckCompatibility(ctx context.Context, r soap.RoundTripper, req *types.QueryDvsCheckCompatibility) (*types.QueryDvsCheckCompatibilityResponse, error) {
    +	var reqBody, resBody QueryDvsCheckCompatibilityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDvsCompatibleHostSpecBody struct {
    +	Req    *types.QueryDvsCompatibleHostSpec         `xml:"urn:vim25 QueryDvsCompatibleHostSpec,omitempty"`
    +	Res    *types.QueryDvsCompatibleHostSpecResponse `xml:"urn:vim25 QueryDvsCompatibleHostSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDvsCompatibleHostSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDvsCompatibleHostSpec(ctx context.Context, r soap.RoundTripper, req *types.QueryDvsCompatibleHostSpec) (*types.QueryDvsCompatibleHostSpecResponse, error) {
    +	var reqBody, resBody QueryDvsCompatibleHostSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDvsConfigTargetBody struct {
    +	Req    *types.QueryDvsConfigTarget         `xml:"urn:vim25 QueryDvsConfigTarget,omitempty"`
    +	Res    *types.QueryDvsConfigTargetResponse `xml:"urn:vim25 QueryDvsConfigTargetResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDvsConfigTargetBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDvsConfigTarget(ctx context.Context, r soap.RoundTripper, req *types.QueryDvsConfigTarget) (*types.QueryDvsConfigTargetResponse, error) {
    +	var reqBody, resBody QueryDvsConfigTargetBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDvsFeatureCapabilityBody struct {
    +	Req    *types.QueryDvsFeatureCapability         `xml:"urn:vim25 QueryDvsFeatureCapability,omitempty"`
    +	Res    *types.QueryDvsFeatureCapabilityResponse `xml:"urn:vim25 QueryDvsFeatureCapabilityResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDvsFeatureCapabilityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDvsFeatureCapability(ctx context.Context, r soap.RoundTripper, req *types.QueryDvsFeatureCapability) (*types.QueryDvsFeatureCapabilityResponse, error) {
    +	var reqBody, resBody QueryDvsFeatureCapabilityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryEventsBody struct {
    +	Req    *types.QueryEvents         `xml:"urn:vim25 QueryEvents,omitempty"`
    +	Res    *types.QueryEventsResponse `xml:"urn:vim25 QueryEventsResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryEventsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryEvents(ctx context.Context, r soap.RoundTripper, req *types.QueryEvents) (*types.QueryEventsResponse, error) {
    +	var reqBody, resBody QueryEventsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryExpressionMetadataBody struct {
    +	Req    *types.QueryExpressionMetadata         `xml:"urn:vim25 QueryExpressionMetadata,omitempty"`
    +	Res    *types.QueryExpressionMetadataResponse `xml:"urn:vim25 QueryExpressionMetadataResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryExpressionMetadataBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryExpressionMetadata(ctx context.Context, r soap.RoundTripper, req *types.QueryExpressionMetadata) (*types.QueryExpressionMetadataResponse, error) {
    +	var reqBody, resBody QueryExpressionMetadataBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryExtensionIpAllocationUsageBody struct {
    +	Req    *types.QueryExtensionIpAllocationUsage         `xml:"urn:vim25 QueryExtensionIpAllocationUsage,omitempty"`
    +	Res    *types.QueryExtensionIpAllocationUsageResponse `xml:"urn:vim25 QueryExtensionIpAllocationUsageResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryExtensionIpAllocationUsageBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryExtensionIpAllocationUsage(ctx context.Context, r soap.RoundTripper, req *types.QueryExtensionIpAllocationUsage) (*types.QueryExtensionIpAllocationUsageResponse, error) {
    +	var reqBody, resBody QueryExtensionIpAllocationUsageBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryFaultToleranceCompatibilityBody struct {
    +	Req    *types.QueryFaultToleranceCompatibility         `xml:"urn:vim25 QueryFaultToleranceCompatibility,omitempty"`
    +	Res    *types.QueryFaultToleranceCompatibilityResponse `xml:"urn:vim25 QueryFaultToleranceCompatibilityResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryFaultToleranceCompatibilityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryFaultToleranceCompatibility(ctx context.Context, r soap.RoundTripper, req *types.QueryFaultToleranceCompatibility) (*types.QueryFaultToleranceCompatibilityResponse, error) {
    +	var reqBody, resBody QueryFaultToleranceCompatibilityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryFaultToleranceCompatibilityExBody struct {
    +	Req    *types.QueryFaultToleranceCompatibilityEx         `xml:"urn:vim25 QueryFaultToleranceCompatibilityEx,omitempty"`
    +	Res    *types.QueryFaultToleranceCompatibilityExResponse `xml:"urn:vim25 QueryFaultToleranceCompatibilityExResponse,omitempty"`
    +	Fault_ *soap.Fault                                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryFaultToleranceCompatibilityExBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryFaultToleranceCompatibilityEx(ctx context.Context, r soap.RoundTripper, req *types.QueryFaultToleranceCompatibilityEx) (*types.QueryFaultToleranceCompatibilityExResponse, error) {
    +	var reqBody, resBody QueryFaultToleranceCompatibilityExBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryFilterEntitiesBody struct {
    +	Req    *types.QueryFilterEntities         `xml:"urn:vim25 QueryFilterEntities,omitempty"`
    +	Res    *types.QueryFilterEntitiesResponse `xml:"urn:vim25 QueryFilterEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryFilterEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryFilterEntities(ctx context.Context, r soap.RoundTripper, req *types.QueryFilterEntities) (*types.QueryFilterEntitiesResponse, error) {
    +	var reqBody, resBody QueryFilterEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryFilterInfoIdsBody struct {
    +	Req    *types.QueryFilterInfoIds         `xml:"urn:vim25 QueryFilterInfoIds,omitempty"`
    +	Res    *types.QueryFilterInfoIdsResponse `xml:"urn:vim25 QueryFilterInfoIdsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryFilterInfoIdsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryFilterInfoIds(ctx context.Context, r soap.RoundTripper, req *types.QueryFilterInfoIds) (*types.QueryFilterInfoIdsResponse, error) {
    +	var reqBody, resBody QueryFilterInfoIdsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryFilterListBody struct {
    +	Req    *types.QueryFilterList         `xml:"urn:vim25 QueryFilterList,omitempty"`
    +	Res    *types.QueryFilterListResponse `xml:"urn:vim25 QueryFilterListResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryFilterListBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryFilterList(ctx context.Context, r soap.RoundTripper, req *types.QueryFilterList) (*types.QueryFilterListResponse, error) {
    +	var reqBody, resBody QueryFilterListBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryFilterNameBody struct {
    +	Req    *types.QueryFilterName         `xml:"urn:vim25 QueryFilterName,omitempty"`
    +	Res    *types.QueryFilterNameResponse `xml:"urn:vim25 QueryFilterNameResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryFilterNameBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryFilterName(ctx context.Context, r soap.RoundTripper, req *types.QueryFilterName) (*types.QueryFilterNameResponse, error) {
    +	var reqBody, resBody QueryFilterNameBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryFirmwareConfigUploadURLBody struct {
    +	Req    *types.QueryFirmwareConfigUploadURL         `xml:"urn:vim25 QueryFirmwareConfigUploadURL,omitempty"`
    +	Res    *types.QueryFirmwareConfigUploadURLResponse `xml:"urn:vim25 QueryFirmwareConfigUploadURLResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryFirmwareConfigUploadURLBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryFirmwareConfigUploadURL(ctx context.Context, r soap.RoundTripper, req *types.QueryFirmwareConfigUploadURL) (*types.QueryFirmwareConfigUploadURLResponse, error) {
    +	var reqBody, resBody QueryFirmwareConfigUploadURLBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryHealthUpdateInfosBody struct {
    +	Req    *types.QueryHealthUpdateInfos         `xml:"urn:vim25 QueryHealthUpdateInfos,omitempty"`
    +	Res    *types.QueryHealthUpdateInfosResponse `xml:"urn:vim25 QueryHealthUpdateInfosResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryHealthUpdateInfosBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryHealthUpdateInfos(ctx context.Context, r soap.RoundTripper, req *types.QueryHealthUpdateInfos) (*types.QueryHealthUpdateInfosResponse, error) {
    +	var reqBody, resBody QueryHealthUpdateInfosBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryHealthUpdatesBody struct {
    +	Req    *types.QueryHealthUpdates         `xml:"urn:vim25 QueryHealthUpdates,omitempty"`
    +	Res    *types.QueryHealthUpdatesResponse `xml:"urn:vim25 QueryHealthUpdatesResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryHealthUpdatesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryHealthUpdates(ctx context.Context, r soap.RoundTripper, req *types.QueryHealthUpdates) (*types.QueryHealthUpdatesResponse, error) {
    +	var reqBody, resBody QueryHealthUpdatesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryHostConnectionInfoBody struct {
    +	Req    *types.QueryHostConnectionInfo         `xml:"urn:vim25 QueryHostConnectionInfo,omitempty"`
    +	Res    *types.QueryHostConnectionInfoResponse `xml:"urn:vim25 QueryHostConnectionInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryHostConnectionInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryHostConnectionInfo(ctx context.Context, r soap.RoundTripper, req *types.QueryHostConnectionInfo) (*types.QueryHostConnectionInfoResponse, error) {
    +	var reqBody, resBody QueryHostConnectionInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryHostPatch_TaskBody struct {
    +	Req    *types.QueryHostPatch_Task         `xml:"urn:vim25 QueryHostPatch_Task,omitempty"`
    +	Res    *types.QueryHostPatch_TaskResponse `xml:"urn:vim25 QueryHostPatch_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryHostPatch_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryHostPatch_Task(ctx context.Context, r soap.RoundTripper, req *types.QueryHostPatch_Task) (*types.QueryHostPatch_TaskResponse, error) {
    +	var reqBody, resBody QueryHostPatch_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryHostProfileMetadataBody struct {
    +	Req    *types.QueryHostProfileMetadata         `xml:"urn:vim25 QueryHostProfileMetadata,omitempty"`
    +	Res    *types.QueryHostProfileMetadataResponse `xml:"urn:vim25 QueryHostProfileMetadataResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryHostProfileMetadataBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryHostProfileMetadata(ctx context.Context, r soap.RoundTripper, req *types.QueryHostProfileMetadata) (*types.QueryHostProfileMetadataResponse, error) {
    +	var reqBody, resBody QueryHostProfileMetadataBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryHostStatusBody struct {
    +	Req    *types.QueryHostStatus         `xml:"urn:vim25 QueryHostStatus,omitempty"`
    +	Res    *types.QueryHostStatusResponse `xml:"urn:vim25 QueryHostStatusResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryHostStatusBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryHostStatus(ctx context.Context, r soap.RoundTripper, req *types.QueryHostStatus) (*types.QueryHostStatusResponse, error) {
    +	var reqBody, resBody QueryHostStatusBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryIORMConfigOptionBody struct {
    +	Req    *types.QueryIORMConfigOption         `xml:"urn:vim25 QueryIORMConfigOption,omitempty"`
    +	Res    *types.QueryIORMConfigOptionResponse `xml:"urn:vim25 QueryIORMConfigOptionResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryIORMConfigOptionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryIORMConfigOption(ctx context.Context, r soap.RoundTripper, req *types.QueryIORMConfigOption) (*types.QueryIORMConfigOptionResponse, error) {
    +	var reqBody, resBody QueryIORMConfigOptionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryIPAllocationsBody struct {
    +	Req    *types.QueryIPAllocations         `xml:"urn:vim25 QueryIPAllocations,omitempty"`
    +	Res    *types.QueryIPAllocationsResponse `xml:"urn:vim25 QueryIPAllocationsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryIPAllocationsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryIPAllocations(ctx context.Context, r soap.RoundTripper, req *types.QueryIPAllocations) (*types.QueryIPAllocationsResponse, error) {
    +	var reqBody, resBody QueryIPAllocationsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryIoFilterInfoBody struct {
    +	Req    *types.QueryIoFilterInfo         `xml:"urn:vim25 QueryIoFilterInfo,omitempty"`
    +	Res    *types.QueryIoFilterInfoResponse `xml:"urn:vim25 QueryIoFilterInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryIoFilterInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryIoFilterInfo(ctx context.Context, r soap.RoundTripper, req *types.QueryIoFilterInfo) (*types.QueryIoFilterInfoResponse, error) {
    +	var reqBody, resBody QueryIoFilterInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryIoFilterIssuesBody struct {
    +	Req    *types.QueryIoFilterIssues         `xml:"urn:vim25 QueryIoFilterIssues,omitempty"`
    +	Res    *types.QueryIoFilterIssuesResponse `xml:"urn:vim25 QueryIoFilterIssuesResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryIoFilterIssuesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryIoFilterIssues(ctx context.Context, r soap.RoundTripper, req *types.QueryIoFilterIssues) (*types.QueryIoFilterIssuesResponse, error) {
    +	var reqBody, resBody QueryIoFilterIssuesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryIpPoolsBody struct {
    +	Req    *types.QueryIpPools         `xml:"urn:vim25 QueryIpPools,omitempty"`
    +	Res    *types.QueryIpPoolsResponse `xml:"urn:vim25 QueryIpPoolsResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryIpPoolsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryIpPools(ctx context.Context, r soap.RoundTripper, req *types.QueryIpPools) (*types.QueryIpPoolsResponse, error) {
    +	var reqBody, resBody QueryIpPoolsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryLicenseSourceAvailabilityBody struct {
    +	Req    *types.QueryLicenseSourceAvailability         `xml:"urn:vim25 QueryLicenseSourceAvailability,omitempty"`
    +	Res    *types.QueryLicenseSourceAvailabilityResponse `xml:"urn:vim25 QueryLicenseSourceAvailabilityResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryLicenseSourceAvailabilityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryLicenseSourceAvailability(ctx context.Context, r soap.RoundTripper, req *types.QueryLicenseSourceAvailability) (*types.QueryLicenseSourceAvailabilityResponse, error) {
    +	var reqBody, resBody QueryLicenseSourceAvailabilityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryLicenseUsageBody struct {
    +	Req    *types.QueryLicenseUsage         `xml:"urn:vim25 QueryLicenseUsage,omitempty"`
    +	Res    *types.QueryLicenseUsageResponse `xml:"urn:vim25 QueryLicenseUsageResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryLicenseUsageBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryLicenseUsage(ctx context.Context, r soap.RoundTripper, req *types.QueryLicenseUsage) (*types.QueryLicenseUsageResponse, error) {
    +	var reqBody, resBody QueryLicenseUsageBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryLockdownExceptionsBody struct {
    +	Req    *types.QueryLockdownExceptions         `xml:"urn:vim25 QueryLockdownExceptions,omitempty"`
    +	Res    *types.QueryLockdownExceptionsResponse `xml:"urn:vim25 QueryLockdownExceptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryLockdownExceptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryLockdownExceptions(ctx context.Context, r soap.RoundTripper, req *types.QueryLockdownExceptions) (*types.QueryLockdownExceptionsResponse, error) {
    +	var reqBody, resBody QueryLockdownExceptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryManagedByBody struct {
    +	Req    *types.QueryManagedBy         `xml:"urn:vim25 QueryManagedBy,omitempty"`
    +	Res    *types.QueryManagedByResponse `xml:"urn:vim25 QueryManagedByResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryManagedByBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryManagedBy(ctx context.Context, r soap.RoundTripper, req *types.QueryManagedBy) (*types.QueryManagedByResponse, error) {
    +	var reqBody, resBody QueryManagedByBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryMemoryOverheadBody struct {
    +	Req    *types.QueryMemoryOverhead         `xml:"urn:vim25 QueryMemoryOverhead,omitempty"`
    +	Res    *types.QueryMemoryOverheadResponse `xml:"urn:vim25 QueryMemoryOverheadResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryMemoryOverheadBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryMemoryOverhead(ctx context.Context, r soap.RoundTripper, req *types.QueryMemoryOverhead) (*types.QueryMemoryOverheadResponse, error) {
    +	var reqBody, resBody QueryMemoryOverheadBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryMemoryOverheadExBody struct {
    +	Req    *types.QueryMemoryOverheadEx         `xml:"urn:vim25 QueryMemoryOverheadEx,omitempty"`
    +	Res    *types.QueryMemoryOverheadExResponse `xml:"urn:vim25 QueryMemoryOverheadExResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryMemoryOverheadExBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryMemoryOverheadEx(ctx context.Context, r soap.RoundTripper, req *types.QueryMemoryOverheadEx) (*types.QueryMemoryOverheadExResponse, error) {
    +	var reqBody, resBody QueryMemoryOverheadExBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryMigrationDependenciesBody struct {
    +	Req    *types.QueryMigrationDependencies         `xml:"urn:vim25 QueryMigrationDependencies,omitempty"`
    +	Res    *types.QueryMigrationDependenciesResponse `xml:"urn:vim25 QueryMigrationDependenciesResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryMigrationDependenciesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryMigrationDependencies(ctx context.Context, r soap.RoundTripper, req *types.QueryMigrationDependencies) (*types.QueryMigrationDependenciesResponse, error) {
    +	var reqBody, resBody QueryMigrationDependenciesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryModulesBody struct {
    +	Req    *types.QueryModules         `xml:"urn:vim25 QueryModules,omitempty"`
    +	Res    *types.QueryModulesResponse `xml:"urn:vim25 QueryModulesResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryModulesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryModules(ctx context.Context, r soap.RoundTripper, req *types.QueryModules) (*types.QueryModulesResponse, error) {
    +	var reqBody, resBody QueryModulesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryMonitoredEntitiesBody struct {
    +	Req    *types.QueryMonitoredEntities         `xml:"urn:vim25 QueryMonitoredEntities,omitempty"`
    +	Res    *types.QueryMonitoredEntitiesResponse `xml:"urn:vim25 QueryMonitoredEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryMonitoredEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryMonitoredEntities(ctx context.Context, r soap.RoundTripper, req *types.QueryMonitoredEntities) (*types.QueryMonitoredEntitiesResponse, error) {
    +	var reqBody, resBody QueryMonitoredEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryNFSUserBody struct {
    +	Req    *types.QueryNFSUser         `xml:"urn:vim25 QueryNFSUser,omitempty"`
    +	Res    *types.QueryNFSUserResponse `xml:"urn:vim25 QueryNFSUserResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryNFSUserBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryNFSUser(ctx context.Context, r soap.RoundTripper, req *types.QueryNFSUser) (*types.QueryNFSUserResponse, error) {
    +	var reqBody, resBody QueryNFSUserBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryNetConfigBody struct {
    +	Req    *types.QueryNetConfig         `xml:"urn:vim25 QueryNetConfig,omitempty"`
    +	Res    *types.QueryNetConfigResponse `xml:"urn:vim25 QueryNetConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryNetConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryNetConfig(ctx context.Context, r soap.RoundTripper, req *types.QueryNetConfig) (*types.QueryNetConfigResponse, error) {
    +	var reqBody, resBody QueryNetConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryNetworkHintBody struct {
    +	Req    *types.QueryNetworkHint         `xml:"urn:vim25 QueryNetworkHint,omitempty"`
    +	Res    *types.QueryNetworkHintResponse `xml:"urn:vim25 QueryNetworkHintResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryNetworkHintBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryNetworkHint(ctx context.Context, r soap.RoundTripper, req *types.QueryNetworkHint) (*types.QueryNetworkHintResponse, error) {
    +	var reqBody, resBody QueryNetworkHintBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryObjectsOnPhysicalVsanDiskBody struct {
    +	Req    *types.QueryObjectsOnPhysicalVsanDisk         `xml:"urn:vim25 QueryObjectsOnPhysicalVsanDisk,omitempty"`
    +	Res    *types.QueryObjectsOnPhysicalVsanDiskResponse `xml:"urn:vim25 QueryObjectsOnPhysicalVsanDiskResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryObjectsOnPhysicalVsanDiskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryObjectsOnPhysicalVsanDisk(ctx context.Context, r soap.RoundTripper, req *types.QueryObjectsOnPhysicalVsanDisk) (*types.QueryObjectsOnPhysicalVsanDiskResponse, error) {
    +	var reqBody, resBody QueryObjectsOnPhysicalVsanDiskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryOptionsBody struct {
    +	Req    *types.QueryOptions         `xml:"urn:vim25 QueryOptions,omitempty"`
    +	Res    *types.QueryOptionsResponse `xml:"urn:vim25 QueryOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryOptions(ctx context.Context, r soap.RoundTripper, req *types.QueryOptions) (*types.QueryOptionsResponse, error) {
    +	var reqBody, resBody QueryOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPartitionCreateDescBody struct {
    +	Req    *types.QueryPartitionCreateDesc         `xml:"urn:vim25 QueryPartitionCreateDesc,omitempty"`
    +	Res    *types.QueryPartitionCreateDescResponse `xml:"urn:vim25 QueryPartitionCreateDescResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPartitionCreateDescBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPartitionCreateDesc(ctx context.Context, r soap.RoundTripper, req *types.QueryPartitionCreateDesc) (*types.QueryPartitionCreateDescResponse, error) {
    +	var reqBody, resBody QueryPartitionCreateDescBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPartitionCreateOptionsBody struct {
    +	Req    *types.QueryPartitionCreateOptions         `xml:"urn:vim25 QueryPartitionCreateOptions,omitempty"`
    +	Res    *types.QueryPartitionCreateOptionsResponse `xml:"urn:vim25 QueryPartitionCreateOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPartitionCreateOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPartitionCreateOptions(ctx context.Context, r soap.RoundTripper, req *types.QueryPartitionCreateOptions) (*types.QueryPartitionCreateOptionsResponse, error) {
    +	var reqBody, resBody QueryPartitionCreateOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPathSelectionPolicyOptionsBody struct {
    +	Req    *types.QueryPathSelectionPolicyOptions         `xml:"urn:vim25 QueryPathSelectionPolicyOptions,omitempty"`
    +	Res    *types.QueryPathSelectionPolicyOptionsResponse `xml:"urn:vim25 QueryPathSelectionPolicyOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPathSelectionPolicyOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPathSelectionPolicyOptions(ctx context.Context, r soap.RoundTripper, req *types.QueryPathSelectionPolicyOptions) (*types.QueryPathSelectionPolicyOptionsResponse, error) {
    +	var reqBody, resBody QueryPathSelectionPolicyOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPerfBody struct {
    +	Req    *types.QueryPerf         `xml:"urn:vim25 QueryPerf,omitempty"`
    +	Res    *types.QueryPerfResponse `xml:"urn:vim25 QueryPerfResponse,omitempty"`
    +	Fault_ *soap.Fault              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPerfBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPerf(ctx context.Context, r soap.RoundTripper, req *types.QueryPerf) (*types.QueryPerfResponse, error) {
    +	var reqBody, resBody QueryPerfBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPerfCompositeBody struct {
    +	Req    *types.QueryPerfComposite         `xml:"urn:vim25 QueryPerfComposite,omitempty"`
    +	Res    *types.QueryPerfCompositeResponse `xml:"urn:vim25 QueryPerfCompositeResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPerfCompositeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPerfComposite(ctx context.Context, r soap.RoundTripper, req *types.QueryPerfComposite) (*types.QueryPerfCompositeResponse, error) {
    +	var reqBody, resBody QueryPerfCompositeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPerfCounterBody struct {
    +	Req    *types.QueryPerfCounter         `xml:"urn:vim25 QueryPerfCounter,omitempty"`
    +	Res    *types.QueryPerfCounterResponse `xml:"urn:vim25 QueryPerfCounterResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPerfCounterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPerfCounter(ctx context.Context, r soap.RoundTripper, req *types.QueryPerfCounter) (*types.QueryPerfCounterResponse, error) {
    +	var reqBody, resBody QueryPerfCounterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPerfCounterByLevelBody struct {
    +	Req    *types.QueryPerfCounterByLevel         `xml:"urn:vim25 QueryPerfCounterByLevel,omitempty"`
    +	Res    *types.QueryPerfCounterByLevelResponse `xml:"urn:vim25 QueryPerfCounterByLevelResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPerfCounterByLevelBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPerfCounterByLevel(ctx context.Context, r soap.RoundTripper, req *types.QueryPerfCounterByLevel) (*types.QueryPerfCounterByLevelResponse, error) {
    +	var reqBody, resBody QueryPerfCounterByLevelBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPerfProviderSummaryBody struct {
    +	Req    *types.QueryPerfProviderSummary         `xml:"urn:vim25 QueryPerfProviderSummary,omitempty"`
    +	Res    *types.QueryPerfProviderSummaryResponse `xml:"urn:vim25 QueryPerfProviderSummaryResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPerfProviderSummaryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPerfProviderSummary(ctx context.Context, r soap.RoundTripper, req *types.QueryPerfProviderSummary) (*types.QueryPerfProviderSummaryResponse, error) {
    +	var reqBody, resBody QueryPerfProviderSummaryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPhysicalVsanDisksBody struct {
    +	Req    *types.QueryPhysicalVsanDisks         `xml:"urn:vim25 QueryPhysicalVsanDisks,omitempty"`
    +	Res    *types.QueryPhysicalVsanDisksResponse `xml:"urn:vim25 QueryPhysicalVsanDisksResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPhysicalVsanDisksBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPhysicalVsanDisks(ctx context.Context, r soap.RoundTripper, req *types.QueryPhysicalVsanDisks) (*types.QueryPhysicalVsanDisksResponse, error) {
    +	var reqBody, resBody QueryPhysicalVsanDisksBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPnicStatusBody struct {
    +	Req    *types.QueryPnicStatus         `xml:"urn:vim25 QueryPnicStatus,omitempty"`
    +	Res    *types.QueryPnicStatusResponse `xml:"urn:vim25 QueryPnicStatusResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPnicStatusBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPnicStatus(ctx context.Context, r soap.RoundTripper, req *types.QueryPnicStatus) (*types.QueryPnicStatusResponse, error) {
    +	var reqBody, resBody QueryPnicStatusBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryPolicyMetadataBody struct {
    +	Req    *types.QueryPolicyMetadata         `xml:"urn:vim25 QueryPolicyMetadata,omitempty"`
    +	Res    *types.QueryPolicyMetadataResponse `xml:"urn:vim25 QueryPolicyMetadataResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryPolicyMetadataBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryPolicyMetadata(ctx context.Context, r soap.RoundTripper, req *types.QueryPolicyMetadata) (*types.QueryPolicyMetadataResponse, error) {
    +	var reqBody, resBody QueryPolicyMetadataBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryProfileStructureBody struct {
    +	Req    *types.QueryProfileStructure         `xml:"urn:vim25 QueryProfileStructure,omitempty"`
    +	Res    *types.QueryProfileStructureResponse `xml:"urn:vim25 QueryProfileStructureResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryProfileStructureBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryProfileStructure(ctx context.Context, r soap.RoundTripper, req *types.QueryProfileStructure) (*types.QueryProfileStructureResponse, error) {
    +	var reqBody, resBody QueryProfileStructureBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryProviderListBody struct {
    +	Req    *types.QueryProviderList         `xml:"urn:vim25 QueryProviderList,omitempty"`
    +	Res    *types.QueryProviderListResponse `xml:"urn:vim25 QueryProviderListResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryProviderListBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryProviderList(ctx context.Context, r soap.RoundTripper, req *types.QueryProviderList) (*types.QueryProviderListResponse, error) {
    +	var reqBody, resBody QueryProviderListBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryProviderNameBody struct {
    +	Req    *types.QueryProviderName         `xml:"urn:vim25 QueryProviderName,omitempty"`
    +	Res    *types.QueryProviderNameResponse `xml:"urn:vim25 QueryProviderNameResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryProviderNameBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryProviderName(ctx context.Context, r soap.RoundTripper, req *types.QueryProviderName) (*types.QueryProviderNameResponse, error) {
    +	var reqBody, resBody QueryProviderNameBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryResourceConfigOptionBody struct {
    +	Req    *types.QueryResourceConfigOption         `xml:"urn:vim25 QueryResourceConfigOption,omitempty"`
    +	Res    *types.QueryResourceConfigOptionResponse `xml:"urn:vim25 QueryResourceConfigOptionResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryResourceConfigOptionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryResourceConfigOption(ctx context.Context, r soap.RoundTripper, req *types.QueryResourceConfigOption) (*types.QueryResourceConfigOptionResponse, error) {
    +	var reqBody, resBody QueryResourceConfigOptionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryServiceListBody struct {
    +	Req    *types.QueryServiceList         `xml:"urn:vim25 QueryServiceList,omitempty"`
    +	Res    *types.QueryServiceListResponse `xml:"urn:vim25 QueryServiceListResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryServiceListBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryServiceList(ctx context.Context, r soap.RoundTripper, req *types.QueryServiceList) (*types.QueryServiceListResponse, error) {
    +	var reqBody, resBody QueryServiceListBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryStorageArrayTypePolicyOptionsBody struct {
    +	Req    *types.QueryStorageArrayTypePolicyOptions         `xml:"urn:vim25 QueryStorageArrayTypePolicyOptions,omitempty"`
    +	Res    *types.QueryStorageArrayTypePolicyOptionsResponse `xml:"urn:vim25 QueryStorageArrayTypePolicyOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryStorageArrayTypePolicyOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryStorageArrayTypePolicyOptions(ctx context.Context, r soap.RoundTripper, req *types.QueryStorageArrayTypePolicyOptions) (*types.QueryStorageArrayTypePolicyOptionsResponse, error) {
    +	var reqBody, resBody QueryStorageArrayTypePolicyOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QuerySupportedFeaturesBody struct {
    +	Req    *types.QuerySupportedFeatures         `xml:"urn:vim25 QuerySupportedFeatures,omitempty"`
    +	Res    *types.QuerySupportedFeaturesResponse `xml:"urn:vim25 QuerySupportedFeaturesResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QuerySupportedFeaturesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QuerySupportedFeatures(ctx context.Context, r soap.RoundTripper, req *types.QuerySupportedFeatures) (*types.QuerySupportedFeaturesResponse, error) {
    +	var reqBody, resBody QuerySupportedFeaturesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QuerySyncingVsanObjectsBody struct {
    +	Req    *types.QuerySyncingVsanObjects         `xml:"urn:vim25 QuerySyncingVsanObjects,omitempty"`
    +	Res    *types.QuerySyncingVsanObjectsResponse `xml:"urn:vim25 QuerySyncingVsanObjectsResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QuerySyncingVsanObjectsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QuerySyncingVsanObjects(ctx context.Context, r soap.RoundTripper, req *types.QuerySyncingVsanObjects) (*types.QuerySyncingVsanObjectsResponse, error) {
    +	var reqBody, resBody QuerySyncingVsanObjectsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QuerySystemUsersBody struct {
    +	Req    *types.QuerySystemUsers         `xml:"urn:vim25 QuerySystemUsers,omitempty"`
    +	Res    *types.QuerySystemUsersResponse `xml:"urn:vim25 QuerySystemUsersResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QuerySystemUsersBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QuerySystemUsers(ctx context.Context, r soap.RoundTripper, req *types.QuerySystemUsers) (*types.QuerySystemUsersResponse, error) {
    +	var reqBody, resBody QuerySystemUsersBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryTargetCapabilitiesBody struct {
    +	Req    *types.QueryTargetCapabilities         `xml:"urn:vim25 QueryTargetCapabilities,omitempty"`
    +	Res    *types.QueryTargetCapabilitiesResponse `xml:"urn:vim25 QueryTargetCapabilitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryTargetCapabilitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryTargetCapabilities(ctx context.Context, r soap.RoundTripper, req *types.QueryTargetCapabilities) (*types.QueryTargetCapabilitiesResponse, error) {
    +	var reqBody, resBody QueryTargetCapabilitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryTpmAttestationReportBody struct {
    +	Req    *types.QueryTpmAttestationReport         `xml:"urn:vim25 QueryTpmAttestationReport,omitempty"`
    +	Res    *types.QueryTpmAttestationReportResponse `xml:"urn:vim25 QueryTpmAttestationReportResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryTpmAttestationReportBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryTpmAttestationReport(ctx context.Context, r soap.RoundTripper, req *types.QueryTpmAttestationReport) (*types.QueryTpmAttestationReportResponse, error) {
    +	var reqBody, resBody QueryTpmAttestationReportBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryUnmonitoredHostsBody struct {
    +	Req    *types.QueryUnmonitoredHosts         `xml:"urn:vim25 QueryUnmonitoredHosts,omitempty"`
    +	Res    *types.QueryUnmonitoredHostsResponse `xml:"urn:vim25 QueryUnmonitoredHostsResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryUnmonitoredHostsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryUnmonitoredHosts(ctx context.Context, r soap.RoundTripper, req *types.QueryUnmonitoredHosts) (*types.QueryUnmonitoredHostsResponse, error) {
    +	var reqBody, resBody QueryUnmonitoredHostsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryUnownedFilesBody struct {
    +	Req    *types.QueryUnownedFiles         `xml:"urn:vim25 QueryUnownedFiles,omitempty"`
    +	Res    *types.QueryUnownedFilesResponse `xml:"urn:vim25 QueryUnownedFilesResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryUnownedFilesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryUnownedFiles(ctx context.Context, r soap.RoundTripper, req *types.QueryUnownedFiles) (*types.QueryUnownedFilesResponse, error) {
    +	var reqBody, resBody QueryUnownedFilesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryUnresolvedVmfsVolumeBody struct {
    +	Req    *types.QueryUnresolvedVmfsVolume         `xml:"urn:vim25 QueryUnresolvedVmfsVolume,omitempty"`
    +	Res    *types.QueryUnresolvedVmfsVolumeResponse `xml:"urn:vim25 QueryUnresolvedVmfsVolumeResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryUnresolvedVmfsVolumeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryUnresolvedVmfsVolume(ctx context.Context, r soap.RoundTripper, req *types.QueryUnresolvedVmfsVolume) (*types.QueryUnresolvedVmfsVolumeResponse, error) {
    +	var reqBody, resBody QueryUnresolvedVmfsVolumeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryUnresolvedVmfsVolumesBody struct {
    +	Req    *types.QueryUnresolvedVmfsVolumes         `xml:"urn:vim25 QueryUnresolvedVmfsVolumes,omitempty"`
    +	Res    *types.QueryUnresolvedVmfsVolumesResponse `xml:"urn:vim25 QueryUnresolvedVmfsVolumesResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryUnresolvedVmfsVolumesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryUnresolvedVmfsVolumes(ctx context.Context, r soap.RoundTripper, req *types.QueryUnresolvedVmfsVolumes) (*types.QueryUnresolvedVmfsVolumesResponse, error) {
    +	var reqBody, resBody QueryUnresolvedVmfsVolumesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryUsedVlanIdInDvsBody struct {
    +	Req    *types.QueryUsedVlanIdInDvs         `xml:"urn:vim25 QueryUsedVlanIdInDvs,omitempty"`
    +	Res    *types.QueryUsedVlanIdInDvsResponse `xml:"urn:vim25 QueryUsedVlanIdInDvsResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryUsedVlanIdInDvsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryUsedVlanIdInDvs(ctx context.Context, r soap.RoundTripper, req *types.QueryUsedVlanIdInDvs) (*types.QueryUsedVlanIdInDvsResponse, error) {
    +	var reqBody, resBody QueryUsedVlanIdInDvsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVMotionCompatibilityBody struct {
    +	Req    *types.QueryVMotionCompatibility         `xml:"urn:vim25 QueryVMotionCompatibility,omitempty"`
    +	Res    *types.QueryVMotionCompatibilityResponse `xml:"urn:vim25 QueryVMotionCompatibilityResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVMotionCompatibilityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVMotionCompatibility(ctx context.Context, r soap.RoundTripper, req *types.QueryVMotionCompatibility) (*types.QueryVMotionCompatibilityResponse, error) {
    +	var reqBody, resBody QueryVMotionCompatibilityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVMotionCompatibilityEx_TaskBody struct {
    +	Req    *types.QueryVMotionCompatibilityEx_Task         `xml:"urn:vim25 QueryVMotionCompatibilityEx_Task,omitempty"`
    +	Res    *types.QueryVMotionCompatibilityEx_TaskResponse `xml:"urn:vim25 QueryVMotionCompatibilityEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVMotionCompatibilityEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVMotionCompatibilityEx_Task(ctx context.Context, r soap.RoundTripper, req *types.QueryVMotionCompatibilityEx_Task) (*types.QueryVMotionCompatibilityEx_TaskResponse, error) {
    +	var reqBody, resBody QueryVMotionCompatibilityEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVirtualDiskFragmentationBody struct {
    +	Req    *types.QueryVirtualDiskFragmentation         `xml:"urn:vim25 QueryVirtualDiskFragmentation,omitempty"`
    +	Res    *types.QueryVirtualDiskFragmentationResponse `xml:"urn:vim25 QueryVirtualDiskFragmentationResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVirtualDiskFragmentationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVirtualDiskFragmentation(ctx context.Context, r soap.RoundTripper, req *types.QueryVirtualDiskFragmentation) (*types.QueryVirtualDiskFragmentationResponse, error) {
    +	var reqBody, resBody QueryVirtualDiskFragmentationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVirtualDiskGeometryBody struct {
    +	Req    *types.QueryVirtualDiskGeometry         `xml:"urn:vim25 QueryVirtualDiskGeometry,omitempty"`
    +	Res    *types.QueryVirtualDiskGeometryResponse `xml:"urn:vim25 QueryVirtualDiskGeometryResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVirtualDiskGeometryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVirtualDiskGeometry(ctx context.Context, r soap.RoundTripper, req *types.QueryVirtualDiskGeometry) (*types.QueryVirtualDiskGeometryResponse, error) {
    +	var reqBody, resBody QueryVirtualDiskGeometryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVirtualDiskUuidBody struct {
    +	Req    *types.QueryVirtualDiskUuid         `xml:"urn:vim25 QueryVirtualDiskUuid,omitempty"`
    +	Res    *types.QueryVirtualDiskUuidResponse `xml:"urn:vim25 QueryVirtualDiskUuidResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVirtualDiskUuidBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVirtualDiskUuid(ctx context.Context, r soap.RoundTripper, req *types.QueryVirtualDiskUuid) (*types.QueryVirtualDiskUuidResponse, error) {
    +	var reqBody, resBody QueryVirtualDiskUuidBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVmfsConfigOptionBody struct {
    +	Req    *types.QueryVmfsConfigOption         `xml:"urn:vim25 QueryVmfsConfigOption,omitempty"`
    +	Res    *types.QueryVmfsConfigOptionResponse `xml:"urn:vim25 QueryVmfsConfigOptionResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVmfsConfigOptionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVmfsConfigOption(ctx context.Context, r soap.RoundTripper, req *types.QueryVmfsConfigOption) (*types.QueryVmfsConfigOptionResponse, error) {
    +	var reqBody, resBody QueryVmfsConfigOptionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVmfsDatastoreCreateOptionsBody struct {
    +	Req    *types.QueryVmfsDatastoreCreateOptions         `xml:"urn:vim25 QueryVmfsDatastoreCreateOptions,omitempty"`
    +	Res    *types.QueryVmfsDatastoreCreateOptionsResponse `xml:"urn:vim25 QueryVmfsDatastoreCreateOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVmfsDatastoreCreateOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVmfsDatastoreCreateOptions(ctx context.Context, r soap.RoundTripper, req *types.QueryVmfsDatastoreCreateOptions) (*types.QueryVmfsDatastoreCreateOptionsResponse, error) {
    +	var reqBody, resBody QueryVmfsDatastoreCreateOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVmfsDatastoreExpandOptionsBody struct {
    +	Req    *types.QueryVmfsDatastoreExpandOptions         `xml:"urn:vim25 QueryVmfsDatastoreExpandOptions,omitempty"`
    +	Res    *types.QueryVmfsDatastoreExpandOptionsResponse `xml:"urn:vim25 QueryVmfsDatastoreExpandOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVmfsDatastoreExpandOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVmfsDatastoreExpandOptions(ctx context.Context, r soap.RoundTripper, req *types.QueryVmfsDatastoreExpandOptions) (*types.QueryVmfsDatastoreExpandOptionsResponse, error) {
    +	var reqBody, resBody QueryVmfsDatastoreExpandOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVmfsDatastoreExtendOptionsBody struct {
    +	Req    *types.QueryVmfsDatastoreExtendOptions         `xml:"urn:vim25 QueryVmfsDatastoreExtendOptions,omitempty"`
    +	Res    *types.QueryVmfsDatastoreExtendOptionsResponse `xml:"urn:vim25 QueryVmfsDatastoreExtendOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVmfsDatastoreExtendOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVmfsDatastoreExtendOptions(ctx context.Context, r soap.RoundTripper, req *types.QueryVmfsDatastoreExtendOptions) (*types.QueryVmfsDatastoreExtendOptionsResponse, error) {
    +	var reqBody, resBody QueryVmfsDatastoreExtendOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVnicStatusBody struct {
    +	Req    *types.QueryVnicStatus         `xml:"urn:vim25 QueryVnicStatus,omitempty"`
    +	Res    *types.QueryVnicStatusResponse `xml:"urn:vim25 QueryVnicStatusResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVnicStatusBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVnicStatus(ctx context.Context, r soap.RoundTripper, req *types.QueryVnicStatus) (*types.QueryVnicStatusResponse, error) {
    +	var reqBody, resBody QueryVnicStatusBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVsanObjectUuidsByFilterBody struct {
    +	Req    *types.QueryVsanObjectUuidsByFilter         `xml:"urn:vim25 QueryVsanObjectUuidsByFilter,omitempty"`
    +	Res    *types.QueryVsanObjectUuidsByFilterResponse `xml:"urn:vim25 QueryVsanObjectUuidsByFilterResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVsanObjectUuidsByFilterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVsanObjectUuidsByFilter(ctx context.Context, r soap.RoundTripper, req *types.QueryVsanObjectUuidsByFilter) (*types.QueryVsanObjectUuidsByFilterResponse, error) {
    +	var reqBody, resBody QueryVsanObjectUuidsByFilterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVsanObjectsBody struct {
    +	Req    *types.QueryVsanObjects         `xml:"urn:vim25 QueryVsanObjects,omitempty"`
    +	Res    *types.QueryVsanObjectsResponse `xml:"urn:vim25 QueryVsanObjectsResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVsanObjectsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVsanObjects(ctx context.Context, r soap.RoundTripper, req *types.QueryVsanObjects) (*types.QueryVsanObjectsResponse, error) {
    +	var reqBody, resBody QueryVsanObjectsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVsanStatisticsBody struct {
    +	Req    *types.QueryVsanStatistics         `xml:"urn:vim25 QueryVsanStatistics,omitempty"`
    +	Res    *types.QueryVsanStatisticsResponse `xml:"urn:vim25 QueryVsanStatisticsResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVsanStatisticsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVsanStatistics(ctx context.Context, r soap.RoundTripper, req *types.QueryVsanStatistics) (*types.QueryVsanStatisticsResponse, error) {
    +	var reqBody, resBody QueryVsanStatisticsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryVsanUpgradeStatusBody struct {
    +	Req    *types.QueryVsanUpgradeStatus         `xml:"urn:vim25 QueryVsanUpgradeStatus,omitempty"`
    +	Res    *types.QueryVsanUpgradeStatusResponse `xml:"urn:vim25 QueryVsanUpgradeStatusResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryVsanUpgradeStatusBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryVsanUpgradeStatus(ctx context.Context, r soap.RoundTripper, req *types.QueryVsanUpgradeStatus) (*types.QueryVsanUpgradeStatusResponse, error) {
    +	var reqBody, resBody QueryVsanUpgradeStatusBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReadEnvironmentVariableInGuestBody struct {
    +	Req    *types.ReadEnvironmentVariableInGuest         `xml:"urn:vim25 ReadEnvironmentVariableInGuest,omitempty"`
    +	Res    *types.ReadEnvironmentVariableInGuestResponse `xml:"urn:vim25 ReadEnvironmentVariableInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReadEnvironmentVariableInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReadEnvironmentVariableInGuest(ctx context.Context, r soap.RoundTripper, req *types.ReadEnvironmentVariableInGuest) (*types.ReadEnvironmentVariableInGuestResponse, error) {
    +	var reqBody, resBody ReadEnvironmentVariableInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReadNextEventsBody struct {
    +	Req    *types.ReadNextEvents         `xml:"urn:vim25 ReadNextEvents,omitempty"`
    +	Res    *types.ReadNextEventsResponse `xml:"urn:vim25 ReadNextEventsResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReadNextEventsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReadNextEvents(ctx context.Context, r soap.RoundTripper, req *types.ReadNextEvents) (*types.ReadNextEventsResponse, error) {
    +	var reqBody, resBody ReadNextEventsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReadNextTasksBody struct {
    +	Req    *types.ReadNextTasks         `xml:"urn:vim25 ReadNextTasks,omitempty"`
    +	Res    *types.ReadNextTasksResponse `xml:"urn:vim25 ReadNextTasksResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReadNextTasksBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReadNextTasks(ctx context.Context, r soap.RoundTripper, req *types.ReadNextTasks) (*types.ReadNextTasksResponse, error) {
    +	var reqBody, resBody ReadNextTasksBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReadPreviousEventsBody struct {
    +	Req    *types.ReadPreviousEvents         `xml:"urn:vim25 ReadPreviousEvents,omitempty"`
    +	Res    *types.ReadPreviousEventsResponse `xml:"urn:vim25 ReadPreviousEventsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReadPreviousEventsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReadPreviousEvents(ctx context.Context, r soap.RoundTripper, req *types.ReadPreviousEvents) (*types.ReadPreviousEventsResponse, error) {
    +	var reqBody, resBody ReadPreviousEventsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReadPreviousTasksBody struct {
    +	Req    *types.ReadPreviousTasks         `xml:"urn:vim25 ReadPreviousTasks,omitempty"`
    +	Res    *types.ReadPreviousTasksResponse `xml:"urn:vim25 ReadPreviousTasksResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReadPreviousTasksBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReadPreviousTasks(ctx context.Context, r soap.RoundTripper, req *types.ReadPreviousTasks) (*types.ReadPreviousTasksResponse, error) {
    +	var reqBody, resBody ReadPreviousTasksBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RebootGuestBody struct {
    +	Req    *types.RebootGuest         `xml:"urn:vim25 RebootGuest,omitempty"`
    +	Res    *types.RebootGuestResponse `xml:"urn:vim25 RebootGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RebootGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RebootGuest(ctx context.Context, r soap.RoundTripper, req *types.RebootGuest) (*types.RebootGuestResponse, error) {
    +	var reqBody, resBody RebootGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RebootHost_TaskBody struct {
    +	Req    *types.RebootHost_Task         `xml:"urn:vim25 RebootHost_Task,omitempty"`
    +	Res    *types.RebootHost_TaskResponse `xml:"urn:vim25 RebootHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RebootHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RebootHost_Task(ctx context.Context, r soap.RoundTripper, req *types.RebootHost_Task) (*types.RebootHost_TaskResponse, error) {
    +	var reqBody, resBody RebootHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RecommendDatastoresBody struct {
    +	Req    *types.RecommendDatastores         `xml:"urn:vim25 RecommendDatastores,omitempty"`
    +	Res    *types.RecommendDatastoresResponse `xml:"urn:vim25 RecommendDatastoresResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RecommendDatastoresBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RecommendDatastores(ctx context.Context, r soap.RoundTripper, req *types.RecommendDatastores) (*types.RecommendDatastoresResponse, error) {
    +	var reqBody, resBody RecommendDatastoresBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RecommendHostsForVmBody struct {
    +	Req    *types.RecommendHostsForVm         `xml:"urn:vim25 RecommendHostsForVm,omitempty"`
    +	Res    *types.RecommendHostsForVmResponse `xml:"urn:vim25 RecommendHostsForVmResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RecommendHostsForVmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RecommendHostsForVm(ctx context.Context, r soap.RoundTripper, req *types.RecommendHostsForVm) (*types.RecommendHostsForVmResponse, error) {
    +	var reqBody, resBody RecommendHostsForVmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RecommissionVsanNode_TaskBody struct {
    +	Req    *types.RecommissionVsanNode_Task         `xml:"urn:vim25 RecommissionVsanNode_Task,omitempty"`
    +	Res    *types.RecommissionVsanNode_TaskResponse `xml:"urn:vim25 RecommissionVsanNode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RecommissionVsanNode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RecommissionVsanNode_Task(ctx context.Context, r soap.RoundTripper, req *types.RecommissionVsanNode_Task) (*types.RecommissionVsanNode_TaskResponse, error) {
    +	var reqBody, resBody RecommissionVsanNode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconcileDatastoreInventory_TaskBody struct {
    +	Req    *types.ReconcileDatastoreInventory_Task         `xml:"urn:vim25 ReconcileDatastoreInventory_Task,omitempty"`
    +	Res    *types.ReconcileDatastoreInventory_TaskResponse `xml:"urn:vim25 ReconcileDatastoreInventory_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconcileDatastoreInventory_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconcileDatastoreInventory_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconcileDatastoreInventory_Task) (*types.ReconcileDatastoreInventory_TaskResponse, error) {
    +	var reqBody, resBody ReconcileDatastoreInventory_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigVM_TaskBody struct {
    +	Req    *types.ReconfigVM_Task         `xml:"urn:vim25 ReconfigVM_Task,omitempty"`
    +	Res    *types.ReconfigVM_TaskResponse `xml:"urn:vim25 ReconfigVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigVM_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconfigVM_Task) (*types.ReconfigVM_TaskResponse, error) {
    +	var reqBody, resBody ReconfigVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigurationSatisfiableBody struct {
    +	Req    *types.ReconfigurationSatisfiable         `xml:"urn:vim25 ReconfigurationSatisfiable,omitempty"`
    +	Res    *types.ReconfigurationSatisfiableResponse `xml:"urn:vim25 ReconfigurationSatisfiableResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigurationSatisfiableBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigurationSatisfiable(ctx context.Context, r soap.RoundTripper, req *types.ReconfigurationSatisfiable) (*types.ReconfigurationSatisfiableResponse, error) {
    +	var reqBody, resBody ReconfigurationSatisfiableBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureAlarmBody struct {
    +	Req    *types.ReconfigureAlarm         `xml:"urn:vim25 ReconfigureAlarm,omitempty"`
    +	Res    *types.ReconfigureAlarmResponse `xml:"urn:vim25 ReconfigureAlarmResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureAlarmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureAlarm(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureAlarm) (*types.ReconfigureAlarmResponse, error) {
    +	var reqBody, resBody ReconfigureAlarmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureAutostartBody struct {
    +	Req    *types.ReconfigureAutostart         `xml:"urn:vim25 ReconfigureAutostart,omitempty"`
    +	Res    *types.ReconfigureAutostartResponse `xml:"urn:vim25 ReconfigureAutostartResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureAutostartBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureAutostart(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureAutostart) (*types.ReconfigureAutostartResponse, error) {
    +	var reqBody, resBody ReconfigureAutostartBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureCluster_TaskBody struct {
    +	Req    *types.ReconfigureCluster_Task         `xml:"urn:vim25 ReconfigureCluster_Task,omitempty"`
    +	Res    *types.ReconfigureCluster_TaskResponse `xml:"urn:vim25 ReconfigureCluster_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureCluster_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureCluster_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureCluster_Task) (*types.ReconfigureCluster_TaskResponse, error) {
    +	var reqBody, resBody ReconfigureCluster_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureComputeResource_TaskBody struct {
    +	Req    *types.ReconfigureComputeResource_Task         `xml:"urn:vim25 ReconfigureComputeResource_Task,omitempty"`
    +	Res    *types.ReconfigureComputeResource_TaskResponse `xml:"urn:vim25 ReconfigureComputeResource_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureComputeResource_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureComputeResource_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureComputeResource_Task) (*types.ReconfigureComputeResource_TaskResponse, error) {
    +	var reqBody, resBody ReconfigureComputeResource_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureDVPort_TaskBody struct {
    +	Req    *types.ReconfigureDVPort_Task         `xml:"urn:vim25 ReconfigureDVPort_Task,omitempty"`
    +	Res    *types.ReconfigureDVPort_TaskResponse `xml:"urn:vim25 ReconfigureDVPort_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureDVPort_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureDVPort_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureDVPort_Task) (*types.ReconfigureDVPort_TaskResponse, error) {
    +	var reqBody, resBody ReconfigureDVPort_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureDVPortgroup_TaskBody struct {
    +	Req    *types.ReconfigureDVPortgroup_Task         `xml:"urn:vim25 ReconfigureDVPortgroup_Task,omitempty"`
    +	Res    *types.ReconfigureDVPortgroup_TaskResponse `xml:"urn:vim25 ReconfigureDVPortgroup_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureDVPortgroup_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureDVPortgroup_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureDVPortgroup_Task) (*types.ReconfigureDVPortgroup_TaskResponse, error) {
    +	var reqBody, resBody ReconfigureDVPortgroup_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureDatacenter_TaskBody struct {
    +	Req    *types.ReconfigureDatacenter_Task         `xml:"urn:vim25 ReconfigureDatacenter_Task,omitempty"`
    +	Res    *types.ReconfigureDatacenter_TaskResponse `xml:"urn:vim25 ReconfigureDatacenter_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureDatacenter_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureDatacenter_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureDatacenter_Task) (*types.ReconfigureDatacenter_TaskResponse, error) {
    +	var reqBody, resBody ReconfigureDatacenter_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureDomObjectBody struct {
    +	Req    *types.ReconfigureDomObject         `xml:"urn:vim25 ReconfigureDomObject,omitempty"`
    +	Res    *types.ReconfigureDomObjectResponse `xml:"urn:vim25 ReconfigureDomObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureDomObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureDomObject(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureDomObject) (*types.ReconfigureDomObjectResponse, error) {
    +	var reqBody, resBody ReconfigureDomObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureDvs_TaskBody struct {
    +	Req    *types.ReconfigureDvs_Task         `xml:"urn:vim25 ReconfigureDvs_Task,omitempty"`
    +	Res    *types.ReconfigureDvs_TaskResponse `xml:"urn:vim25 ReconfigureDvs_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureDvs_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureDvs_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureDvs_Task) (*types.ReconfigureDvs_TaskResponse, error) {
    +	var reqBody, resBody ReconfigureDvs_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureHostForDAS_TaskBody struct {
    +	Req    *types.ReconfigureHostForDAS_Task         `xml:"urn:vim25 ReconfigureHostForDAS_Task,omitempty"`
    +	Res    *types.ReconfigureHostForDAS_TaskResponse `xml:"urn:vim25 ReconfigureHostForDAS_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureHostForDAS_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureHostForDAS_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureHostForDAS_Task) (*types.ReconfigureHostForDAS_TaskResponse, error) {
    +	var reqBody, resBody ReconfigureHostForDAS_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureScheduledTaskBody struct {
    +	Req    *types.ReconfigureScheduledTask         `xml:"urn:vim25 ReconfigureScheduledTask,omitempty"`
    +	Res    *types.ReconfigureScheduledTaskResponse `xml:"urn:vim25 ReconfigureScheduledTaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureScheduledTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureScheduledTask(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureScheduledTask) (*types.ReconfigureScheduledTaskResponse, error) {
    +	var reqBody, resBody ReconfigureScheduledTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureServiceConsoleReservationBody struct {
    +	Req    *types.ReconfigureServiceConsoleReservation         `xml:"urn:vim25 ReconfigureServiceConsoleReservation,omitempty"`
    +	Res    *types.ReconfigureServiceConsoleReservationResponse `xml:"urn:vim25 ReconfigureServiceConsoleReservationResponse,omitempty"`
    +	Fault_ *soap.Fault                                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureServiceConsoleReservationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureServiceConsoleReservation(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureServiceConsoleReservation) (*types.ReconfigureServiceConsoleReservationResponse, error) {
    +	var reqBody, resBody ReconfigureServiceConsoleReservationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureSnmpAgentBody struct {
    +	Req    *types.ReconfigureSnmpAgent         `xml:"urn:vim25 ReconfigureSnmpAgent,omitempty"`
    +	Res    *types.ReconfigureSnmpAgentResponse `xml:"urn:vim25 ReconfigureSnmpAgentResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureSnmpAgentBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureSnmpAgent(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureSnmpAgent) (*types.ReconfigureSnmpAgentResponse, error) {
    +	var reqBody, resBody ReconfigureSnmpAgentBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconfigureVirtualMachineReservationBody struct {
    +	Req    *types.ReconfigureVirtualMachineReservation         `xml:"urn:vim25 ReconfigureVirtualMachineReservation,omitempty"`
    +	Res    *types.ReconfigureVirtualMachineReservationResponse `xml:"urn:vim25 ReconfigureVirtualMachineReservationResponse,omitempty"`
    +	Fault_ *soap.Fault                                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconfigureVirtualMachineReservationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconfigureVirtualMachineReservation(ctx context.Context, r soap.RoundTripper, req *types.ReconfigureVirtualMachineReservation) (*types.ReconfigureVirtualMachineReservationResponse, error) {
    +	var reqBody, resBody ReconfigureVirtualMachineReservationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReconnectHost_TaskBody struct {
    +	Req    *types.ReconnectHost_Task         `xml:"urn:vim25 ReconnectHost_Task,omitempty"`
    +	Res    *types.ReconnectHost_TaskResponse `xml:"urn:vim25 ReconnectHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReconnectHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReconnectHost_Task(ctx context.Context, r soap.RoundTripper, req *types.ReconnectHost_Task) (*types.ReconnectHost_TaskResponse, error) {
    +	var reqBody, resBody ReconnectHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RectifyDvsHost_TaskBody struct {
    +	Req    *types.RectifyDvsHost_Task         `xml:"urn:vim25 RectifyDvsHost_Task,omitempty"`
    +	Res    *types.RectifyDvsHost_TaskResponse `xml:"urn:vim25 RectifyDvsHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RectifyDvsHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RectifyDvsHost_Task(ctx context.Context, r soap.RoundTripper, req *types.RectifyDvsHost_Task) (*types.RectifyDvsHost_TaskResponse, error) {
    +	var reqBody, resBody RectifyDvsHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RectifyDvsOnHost_TaskBody struct {
    +	Req    *types.RectifyDvsOnHost_Task         `xml:"urn:vim25 RectifyDvsOnHost_Task,omitempty"`
    +	Res    *types.RectifyDvsOnHost_TaskResponse `xml:"urn:vim25 RectifyDvsOnHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RectifyDvsOnHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RectifyDvsOnHost_Task(ctx context.Context, r soap.RoundTripper, req *types.RectifyDvsOnHost_Task) (*types.RectifyDvsOnHost_TaskResponse, error) {
    +	var reqBody, resBody RectifyDvsOnHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshBody struct {
    +	Req    *types.Refresh         `xml:"urn:vim25 Refresh,omitempty"`
    +	Res    *types.RefreshResponse `xml:"urn:vim25 RefreshResponse,omitempty"`
    +	Fault_ *soap.Fault            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func Refresh(ctx context.Context, r soap.RoundTripper, req *types.Refresh) (*types.RefreshResponse, error) {
    +	var reqBody, resBody RefreshBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshDVPortStateBody struct {
    +	Req    *types.RefreshDVPortState         `xml:"urn:vim25 RefreshDVPortState,omitempty"`
    +	Res    *types.RefreshDVPortStateResponse `xml:"urn:vim25 RefreshDVPortStateResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshDVPortStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshDVPortState(ctx context.Context, r soap.RoundTripper, req *types.RefreshDVPortState) (*types.RefreshDVPortStateResponse, error) {
    +	var reqBody, resBody RefreshDVPortStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshDatastoreBody struct {
    +	Req    *types.RefreshDatastore         `xml:"urn:vim25 RefreshDatastore,omitempty"`
    +	Res    *types.RefreshDatastoreResponse `xml:"urn:vim25 RefreshDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshDatastore(ctx context.Context, r soap.RoundTripper, req *types.RefreshDatastore) (*types.RefreshDatastoreResponse, error) {
    +	var reqBody, resBody RefreshDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshDatastoreStorageInfoBody struct {
    +	Req    *types.RefreshDatastoreStorageInfo         `xml:"urn:vim25 RefreshDatastoreStorageInfo,omitempty"`
    +	Res    *types.RefreshDatastoreStorageInfoResponse `xml:"urn:vim25 RefreshDatastoreStorageInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshDatastoreStorageInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshDatastoreStorageInfo(ctx context.Context, r soap.RoundTripper, req *types.RefreshDatastoreStorageInfo) (*types.RefreshDatastoreStorageInfoResponse, error) {
    +	var reqBody, resBody RefreshDatastoreStorageInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshDateTimeSystemBody struct {
    +	Req    *types.RefreshDateTimeSystem         `xml:"urn:vim25 RefreshDateTimeSystem,omitempty"`
    +	Res    *types.RefreshDateTimeSystemResponse `xml:"urn:vim25 RefreshDateTimeSystemResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshDateTimeSystemBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshDateTimeSystem(ctx context.Context, r soap.RoundTripper, req *types.RefreshDateTimeSystem) (*types.RefreshDateTimeSystemResponse, error) {
    +	var reqBody, resBody RefreshDateTimeSystemBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshFirewallBody struct {
    +	Req    *types.RefreshFirewall         `xml:"urn:vim25 RefreshFirewall,omitempty"`
    +	Res    *types.RefreshFirewallResponse `xml:"urn:vim25 RefreshFirewallResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshFirewallBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshFirewall(ctx context.Context, r soap.RoundTripper, req *types.RefreshFirewall) (*types.RefreshFirewallResponse, error) {
    +	var reqBody, resBody RefreshFirewallBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshGraphicsManagerBody struct {
    +	Req    *types.RefreshGraphicsManager         `xml:"urn:vim25 RefreshGraphicsManager,omitempty"`
    +	Res    *types.RefreshGraphicsManagerResponse `xml:"urn:vim25 RefreshGraphicsManagerResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshGraphicsManagerBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshGraphicsManager(ctx context.Context, r soap.RoundTripper, req *types.RefreshGraphicsManager) (*types.RefreshGraphicsManagerResponse, error) {
    +	var reqBody, resBody RefreshGraphicsManagerBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshHealthStatusSystemBody struct {
    +	Req    *types.RefreshHealthStatusSystem         `xml:"urn:vim25 RefreshHealthStatusSystem,omitempty"`
    +	Res    *types.RefreshHealthStatusSystemResponse `xml:"urn:vim25 RefreshHealthStatusSystemResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshHealthStatusSystemBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshHealthStatusSystem(ctx context.Context, r soap.RoundTripper, req *types.RefreshHealthStatusSystem) (*types.RefreshHealthStatusSystemResponse, error) {
    +	var reqBody, resBody RefreshHealthStatusSystemBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshNetworkSystemBody struct {
    +	Req    *types.RefreshNetworkSystem         `xml:"urn:vim25 RefreshNetworkSystem,omitempty"`
    +	Res    *types.RefreshNetworkSystemResponse `xml:"urn:vim25 RefreshNetworkSystemResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshNetworkSystemBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshNetworkSystem(ctx context.Context, r soap.RoundTripper, req *types.RefreshNetworkSystem) (*types.RefreshNetworkSystemResponse, error) {
    +	var reqBody, resBody RefreshNetworkSystemBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshRecommendationBody struct {
    +	Req    *types.RefreshRecommendation         `xml:"urn:vim25 RefreshRecommendation,omitempty"`
    +	Res    *types.RefreshRecommendationResponse `xml:"urn:vim25 RefreshRecommendationResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshRecommendationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshRecommendation(ctx context.Context, r soap.RoundTripper, req *types.RefreshRecommendation) (*types.RefreshRecommendationResponse, error) {
    +	var reqBody, resBody RefreshRecommendationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshRuntimeBody struct {
    +	Req    *types.RefreshRuntime         `xml:"urn:vim25 RefreshRuntime,omitempty"`
    +	Res    *types.RefreshRuntimeResponse `xml:"urn:vim25 RefreshRuntimeResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshRuntimeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshRuntime(ctx context.Context, r soap.RoundTripper, req *types.RefreshRuntime) (*types.RefreshRuntimeResponse, error) {
    +	var reqBody, resBody RefreshRuntimeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshServicesBody struct {
    +	Req    *types.RefreshServices         `xml:"urn:vim25 RefreshServices,omitempty"`
    +	Res    *types.RefreshServicesResponse `xml:"urn:vim25 RefreshServicesResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshServicesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshServices(ctx context.Context, r soap.RoundTripper, req *types.RefreshServices) (*types.RefreshServicesResponse, error) {
    +	var reqBody, resBody RefreshServicesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshStorageDrsRecommendationBody struct {
    +	Req    *types.RefreshStorageDrsRecommendation         `xml:"urn:vim25 RefreshStorageDrsRecommendation,omitempty"`
    +	Res    *types.RefreshStorageDrsRecommendationResponse `xml:"urn:vim25 RefreshStorageDrsRecommendationResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshStorageDrsRecommendationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshStorageDrsRecommendation(ctx context.Context, r soap.RoundTripper, req *types.RefreshStorageDrsRecommendation) (*types.RefreshStorageDrsRecommendationResponse, error) {
    +	var reqBody, resBody RefreshStorageDrsRecommendationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshStorageDrsRecommendationsForPod_TaskBody struct {
    +	Req    *types.RefreshStorageDrsRecommendationsForPod_Task         `xml:"urn:vim25 RefreshStorageDrsRecommendationsForPod_Task,omitempty"`
    +	Res    *types.RefreshStorageDrsRecommendationsForPod_TaskResponse `xml:"urn:vim25 RefreshStorageDrsRecommendationsForPod_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshStorageDrsRecommendationsForPod_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshStorageDrsRecommendationsForPod_Task(ctx context.Context, r soap.RoundTripper, req *types.RefreshStorageDrsRecommendationsForPod_Task) (*types.RefreshStorageDrsRecommendationsForPod_TaskResponse, error) {
    +	var reqBody, resBody RefreshStorageDrsRecommendationsForPod_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshStorageInfoBody struct {
    +	Req    *types.RefreshStorageInfo         `xml:"urn:vim25 RefreshStorageInfo,omitempty"`
    +	Res    *types.RefreshStorageInfoResponse `xml:"urn:vim25 RefreshStorageInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshStorageInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshStorageInfo(ctx context.Context, r soap.RoundTripper, req *types.RefreshStorageInfo) (*types.RefreshStorageInfoResponse, error) {
    +	var reqBody, resBody RefreshStorageInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RefreshStorageSystemBody struct {
    +	Req    *types.RefreshStorageSystem         `xml:"urn:vim25 RefreshStorageSystem,omitempty"`
    +	Res    *types.RefreshStorageSystemResponse `xml:"urn:vim25 RefreshStorageSystemResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RefreshStorageSystemBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RefreshStorageSystem(ctx context.Context, r soap.RoundTripper, req *types.RefreshStorageSystem) (*types.RefreshStorageSystemResponse, error) {
    +	var reqBody, resBody RefreshStorageSystemBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RegisterChildVM_TaskBody struct {
    +	Req    *types.RegisterChildVM_Task         `xml:"urn:vim25 RegisterChildVM_Task,omitempty"`
    +	Res    *types.RegisterChildVM_TaskResponse `xml:"urn:vim25 RegisterChildVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RegisterChildVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RegisterChildVM_Task(ctx context.Context, r soap.RoundTripper, req *types.RegisterChildVM_Task) (*types.RegisterChildVM_TaskResponse, error) {
    +	var reqBody, resBody RegisterChildVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RegisterDiskBody struct {
    +	Req    *types.RegisterDisk         `xml:"urn:vim25 RegisterDisk,omitempty"`
    +	Res    *types.RegisterDiskResponse `xml:"urn:vim25 RegisterDiskResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RegisterDiskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RegisterDisk(ctx context.Context, r soap.RoundTripper, req *types.RegisterDisk) (*types.RegisterDiskResponse, error) {
    +	var reqBody, resBody RegisterDiskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RegisterExtensionBody struct {
    +	Req    *types.RegisterExtension         `xml:"urn:vim25 RegisterExtension,omitempty"`
    +	Res    *types.RegisterExtensionResponse `xml:"urn:vim25 RegisterExtensionResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RegisterExtensionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RegisterExtension(ctx context.Context, r soap.RoundTripper, req *types.RegisterExtension) (*types.RegisterExtensionResponse, error) {
    +	var reqBody, resBody RegisterExtensionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RegisterHealthUpdateProviderBody struct {
    +	Req    *types.RegisterHealthUpdateProvider         `xml:"urn:vim25 RegisterHealthUpdateProvider,omitempty"`
    +	Res    *types.RegisterHealthUpdateProviderResponse `xml:"urn:vim25 RegisterHealthUpdateProviderResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RegisterHealthUpdateProviderBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RegisterHealthUpdateProvider(ctx context.Context, r soap.RoundTripper, req *types.RegisterHealthUpdateProvider) (*types.RegisterHealthUpdateProviderResponse, error) {
    +	var reqBody, resBody RegisterHealthUpdateProviderBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RegisterKmipServerBody struct {
    +	Req    *types.RegisterKmipServer         `xml:"urn:vim25 RegisterKmipServer,omitempty"`
    +	Res    *types.RegisterKmipServerResponse `xml:"urn:vim25 RegisterKmipServerResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RegisterKmipServerBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RegisterKmipServer(ctx context.Context, r soap.RoundTripper, req *types.RegisterKmipServer) (*types.RegisterKmipServerResponse, error) {
    +	var reqBody, resBody RegisterKmipServerBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RegisterVM_TaskBody struct {
    +	Req    *types.RegisterVM_Task         `xml:"urn:vim25 RegisterVM_Task,omitempty"`
    +	Res    *types.RegisterVM_TaskResponse `xml:"urn:vim25 RegisterVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RegisterVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RegisterVM_Task(ctx context.Context, r soap.RoundTripper, req *types.RegisterVM_Task) (*types.RegisterVM_TaskResponse, error) {
    +	var reqBody, resBody RegisterVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReleaseCredentialsInGuestBody struct {
    +	Req    *types.ReleaseCredentialsInGuest         `xml:"urn:vim25 ReleaseCredentialsInGuest,omitempty"`
    +	Res    *types.ReleaseCredentialsInGuestResponse `xml:"urn:vim25 ReleaseCredentialsInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReleaseCredentialsInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReleaseCredentialsInGuest(ctx context.Context, r soap.RoundTripper, req *types.ReleaseCredentialsInGuest) (*types.ReleaseCredentialsInGuestResponse, error) {
    +	var reqBody, resBody ReleaseCredentialsInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReleaseIpAllocationBody struct {
    +	Req    *types.ReleaseIpAllocation         `xml:"urn:vim25 ReleaseIpAllocation,omitempty"`
    +	Res    *types.ReleaseIpAllocationResponse `xml:"urn:vim25 ReleaseIpAllocationResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReleaseIpAllocationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReleaseIpAllocation(ctx context.Context, r soap.RoundTripper, req *types.ReleaseIpAllocation) (*types.ReleaseIpAllocationResponse, error) {
    +	var reqBody, resBody ReleaseIpAllocationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReleaseManagedSnapshotBody struct {
    +	Req    *types.ReleaseManagedSnapshot         `xml:"urn:vim25 ReleaseManagedSnapshot,omitempty"`
    +	Res    *types.ReleaseManagedSnapshotResponse `xml:"urn:vim25 ReleaseManagedSnapshotResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReleaseManagedSnapshotBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReleaseManagedSnapshot(ctx context.Context, r soap.RoundTripper, req *types.ReleaseManagedSnapshot) (*types.ReleaseManagedSnapshotResponse, error) {
    +	var reqBody, resBody ReleaseManagedSnapshotBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReloadBody struct {
    +	Req    *types.Reload         `xml:"urn:vim25 Reload,omitempty"`
    +	Res    *types.ReloadResponse `xml:"urn:vim25 ReloadResponse,omitempty"`
    +	Fault_ *soap.Fault           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReloadBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func Reload(ctx context.Context, r soap.RoundTripper, req *types.Reload) (*types.ReloadResponse, error) {
    +	var reqBody, resBody ReloadBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RelocateVM_TaskBody struct {
    +	Req    *types.RelocateVM_Task         `xml:"urn:vim25 RelocateVM_Task,omitempty"`
    +	Res    *types.RelocateVM_TaskResponse `xml:"urn:vim25 RelocateVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RelocateVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RelocateVM_Task(ctx context.Context, r soap.RoundTripper, req *types.RelocateVM_Task) (*types.RelocateVM_TaskResponse, error) {
    +	var reqBody, resBody RelocateVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RelocateVStorageObject_TaskBody struct {
    +	Req    *types.RelocateVStorageObject_Task         `xml:"urn:vim25 RelocateVStorageObject_Task,omitempty"`
    +	Res    *types.RelocateVStorageObject_TaskResponse `xml:"urn:vim25 RelocateVStorageObject_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RelocateVStorageObject_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RelocateVStorageObject_Task(ctx context.Context, r soap.RoundTripper, req *types.RelocateVStorageObject_Task) (*types.RelocateVStorageObject_TaskResponse, error) {
    +	var reqBody, resBody RelocateVStorageObject_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveAlarmBody struct {
    +	Req    *types.RemoveAlarm         `xml:"urn:vim25 RemoveAlarm,omitempty"`
    +	Res    *types.RemoveAlarmResponse `xml:"urn:vim25 RemoveAlarmResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveAlarmBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveAlarm(ctx context.Context, r soap.RoundTripper, req *types.RemoveAlarm) (*types.RemoveAlarmResponse, error) {
    +	var reqBody, resBody RemoveAlarmBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveAllSnapshots_TaskBody struct {
    +	Req    *types.RemoveAllSnapshots_Task         `xml:"urn:vim25 RemoveAllSnapshots_Task,omitempty"`
    +	Res    *types.RemoveAllSnapshots_TaskResponse `xml:"urn:vim25 RemoveAllSnapshots_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveAllSnapshots_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveAllSnapshots_Task(ctx context.Context, r soap.RoundTripper, req *types.RemoveAllSnapshots_Task) (*types.RemoveAllSnapshots_TaskResponse, error) {
    +	var reqBody, resBody RemoveAllSnapshots_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveAssignedLicenseBody struct {
    +	Req    *types.RemoveAssignedLicense         `xml:"urn:vim25 RemoveAssignedLicense,omitempty"`
    +	Res    *types.RemoveAssignedLicenseResponse `xml:"urn:vim25 RemoveAssignedLicenseResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveAssignedLicenseBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveAssignedLicense(ctx context.Context, r soap.RoundTripper, req *types.RemoveAssignedLicense) (*types.RemoveAssignedLicenseResponse, error) {
    +	var reqBody, resBody RemoveAssignedLicenseBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveAuthorizationRoleBody struct {
    +	Req    *types.RemoveAuthorizationRole         `xml:"urn:vim25 RemoveAuthorizationRole,omitempty"`
    +	Res    *types.RemoveAuthorizationRoleResponse `xml:"urn:vim25 RemoveAuthorizationRoleResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveAuthorizationRoleBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveAuthorizationRole(ctx context.Context, r soap.RoundTripper, req *types.RemoveAuthorizationRole) (*types.RemoveAuthorizationRoleResponse, error) {
    +	var reqBody, resBody RemoveAuthorizationRoleBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveCustomFieldDefBody struct {
    +	Req    *types.RemoveCustomFieldDef         `xml:"urn:vim25 RemoveCustomFieldDef,omitempty"`
    +	Res    *types.RemoveCustomFieldDefResponse `xml:"urn:vim25 RemoveCustomFieldDefResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveCustomFieldDefBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveCustomFieldDef(ctx context.Context, r soap.RoundTripper, req *types.RemoveCustomFieldDef) (*types.RemoveCustomFieldDefResponse, error) {
    +	var reqBody, resBody RemoveCustomFieldDefBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveDatastoreBody struct {
    +	Req    *types.RemoveDatastore         `xml:"urn:vim25 RemoveDatastore,omitempty"`
    +	Res    *types.RemoveDatastoreResponse `xml:"urn:vim25 RemoveDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveDatastore(ctx context.Context, r soap.RoundTripper, req *types.RemoveDatastore) (*types.RemoveDatastoreResponse, error) {
    +	var reqBody, resBody RemoveDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveDatastoreEx_TaskBody struct {
    +	Req    *types.RemoveDatastoreEx_Task         `xml:"urn:vim25 RemoveDatastoreEx_Task,omitempty"`
    +	Res    *types.RemoveDatastoreEx_TaskResponse `xml:"urn:vim25 RemoveDatastoreEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveDatastoreEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveDatastoreEx_Task(ctx context.Context, r soap.RoundTripper, req *types.RemoveDatastoreEx_Task) (*types.RemoveDatastoreEx_TaskResponse, error) {
    +	var reqBody, resBody RemoveDatastoreEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveDiskMapping_TaskBody struct {
    +	Req    *types.RemoveDiskMapping_Task         `xml:"urn:vim25 RemoveDiskMapping_Task,omitempty"`
    +	Res    *types.RemoveDiskMapping_TaskResponse `xml:"urn:vim25 RemoveDiskMapping_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveDiskMapping_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveDiskMapping_Task(ctx context.Context, r soap.RoundTripper, req *types.RemoveDiskMapping_Task) (*types.RemoveDiskMapping_TaskResponse, error) {
    +	var reqBody, resBody RemoveDiskMapping_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveDisk_TaskBody struct {
    +	Req    *types.RemoveDisk_Task         `xml:"urn:vim25 RemoveDisk_Task,omitempty"`
    +	Res    *types.RemoveDisk_TaskResponse `xml:"urn:vim25 RemoveDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.RemoveDisk_Task) (*types.RemoveDisk_TaskResponse, error) {
    +	var reqBody, resBody RemoveDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveEntityPermissionBody struct {
    +	Req    *types.RemoveEntityPermission         `xml:"urn:vim25 RemoveEntityPermission,omitempty"`
    +	Res    *types.RemoveEntityPermissionResponse `xml:"urn:vim25 RemoveEntityPermissionResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveEntityPermissionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveEntityPermission(ctx context.Context, r soap.RoundTripper, req *types.RemoveEntityPermission) (*types.RemoveEntityPermissionResponse, error) {
    +	var reqBody, resBody RemoveEntityPermissionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveFilterBody struct {
    +	Req    *types.RemoveFilter         `xml:"urn:vim25 RemoveFilter,omitempty"`
    +	Res    *types.RemoveFilterResponse `xml:"urn:vim25 RemoveFilterResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveFilterBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveFilter(ctx context.Context, r soap.RoundTripper, req *types.RemoveFilter) (*types.RemoveFilterResponse, error) {
    +	var reqBody, resBody RemoveFilterBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveFilterEntitiesBody struct {
    +	Req    *types.RemoveFilterEntities         `xml:"urn:vim25 RemoveFilterEntities,omitempty"`
    +	Res    *types.RemoveFilterEntitiesResponse `xml:"urn:vim25 RemoveFilterEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveFilterEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveFilterEntities(ctx context.Context, r soap.RoundTripper, req *types.RemoveFilterEntities) (*types.RemoveFilterEntitiesResponse, error) {
    +	var reqBody, resBody RemoveFilterEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveGroupBody struct {
    +	Req    *types.RemoveGroup         `xml:"urn:vim25 RemoveGroup,omitempty"`
    +	Res    *types.RemoveGroupResponse `xml:"urn:vim25 RemoveGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveGroup(ctx context.Context, r soap.RoundTripper, req *types.RemoveGroup) (*types.RemoveGroupResponse, error) {
    +	var reqBody, resBody RemoveGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveGuestAliasBody struct {
    +	Req    *types.RemoveGuestAlias         `xml:"urn:vim25 RemoveGuestAlias,omitempty"`
    +	Res    *types.RemoveGuestAliasResponse `xml:"urn:vim25 RemoveGuestAliasResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveGuestAliasBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveGuestAlias(ctx context.Context, r soap.RoundTripper, req *types.RemoveGuestAlias) (*types.RemoveGuestAliasResponse, error) {
    +	var reqBody, resBody RemoveGuestAliasBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveGuestAliasByCertBody struct {
    +	Req    *types.RemoveGuestAliasByCert         `xml:"urn:vim25 RemoveGuestAliasByCert,omitempty"`
    +	Res    *types.RemoveGuestAliasByCertResponse `xml:"urn:vim25 RemoveGuestAliasByCertResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveGuestAliasByCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveGuestAliasByCert(ctx context.Context, r soap.RoundTripper, req *types.RemoveGuestAliasByCert) (*types.RemoveGuestAliasByCertResponse, error) {
    +	var reqBody, resBody RemoveGuestAliasByCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveInternetScsiSendTargetsBody struct {
    +	Req    *types.RemoveInternetScsiSendTargets         `xml:"urn:vim25 RemoveInternetScsiSendTargets,omitempty"`
    +	Res    *types.RemoveInternetScsiSendTargetsResponse `xml:"urn:vim25 RemoveInternetScsiSendTargetsResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveInternetScsiSendTargetsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveInternetScsiSendTargets(ctx context.Context, r soap.RoundTripper, req *types.RemoveInternetScsiSendTargets) (*types.RemoveInternetScsiSendTargetsResponse, error) {
    +	var reqBody, resBody RemoveInternetScsiSendTargetsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveInternetScsiStaticTargetsBody struct {
    +	Req    *types.RemoveInternetScsiStaticTargets         `xml:"urn:vim25 RemoveInternetScsiStaticTargets,omitempty"`
    +	Res    *types.RemoveInternetScsiStaticTargetsResponse `xml:"urn:vim25 RemoveInternetScsiStaticTargetsResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveInternetScsiStaticTargetsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveInternetScsiStaticTargets(ctx context.Context, r soap.RoundTripper, req *types.RemoveInternetScsiStaticTargets) (*types.RemoveInternetScsiStaticTargetsResponse, error) {
    +	var reqBody, resBody RemoveInternetScsiStaticTargetsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveKeyBody struct {
    +	Req    *types.RemoveKey         `xml:"urn:vim25 RemoveKey,omitempty"`
    +	Res    *types.RemoveKeyResponse `xml:"urn:vim25 RemoveKeyResponse,omitempty"`
    +	Fault_ *soap.Fault              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveKeyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveKey(ctx context.Context, r soap.RoundTripper, req *types.RemoveKey) (*types.RemoveKeyResponse, error) {
    +	var reqBody, resBody RemoveKeyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveKeysBody struct {
    +	Req    *types.RemoveKeys         `xml:"urn:vim25 RemoveKeys,omitempty"`
    +	Res    *types.RemoveKeysResponse `xml:"urn:vim25 RemoveKeysResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveKeysBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveKeys(ctx context.Context, r soap.RoundTripper, req *types.RemoveKeys) (*types.RemoveKeysResponse, error) {
    +	var reqBody, resBody RemoveKeysBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveKmipServerBody struct {
    +	Req    *types.RemoveKmipServer         `xml:"urn:vim25 RemoveKmipServer,omitempty"`
    +	Res    *types.RemoveKmipServerResponse `xml:"urn:vim25 RemoveKmipServerResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveKmipServerBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveKmipServer(ctx context.Context, r soap.RoundTripper, req *types.RemoveKmipServer) (*types.RemoveKmipServerResponse, error) {
    +	var reqBody, resBody RemoveKmipServerBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveLicenseBody struct {
    +	Req    *types.RemoveLicense         `xml:"urn:vim25 RemoveLicense,omitempty"`
    +	Res    *types.RemoveLicenseResponse `xml:"urn:vim25 RemoveLicenseResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveLicenseBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveLicense(ctx context.Context, r soap.RoundTripper, req *types.RemoveLicense) (*types.RemoveLicenseResponse, error) {
    +	var reqBody, resBody RemoveLicenseBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveLicenseLabelBody struct {
    +	Req    *types.RemoveLicenseLabel         `xml:"urn:vim25 RemoveLicenseLabel,omitempty"`
    +	Res    *types.RemoveLicenseLabelResponse `xml:"urn:vim25 RemoveLicenseLabelResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveLicenseLabelBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveLicenseLabel(ctx context.Context, r soap.RoundTripper, req *types.RemoveLicenseLabel) (*types.RemoveLicenseLabelResponse, error) {
    +	var reqBody, resBody RemoveLicenseLabelBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveMonitoredEntitiesBody struct {
    +	Req    *types.RemoveMonitoredEntities         `xml:"urn:vim25 RemoveMonitoredEntities,omitempty"`
    +	Res    *types.RemoveMonitoredEntitiesResponse `xml:"urn:vim25 RemoveMonitoredEntitiesResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveMonitoredEntitiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveMonitoredEntities(ctx context.Context, r soap.RoundTripper, req *types.RemoveMonitoredEntities) (*types.RemoveMonitoredEntitiesResponse, error) {
    +	var reqBody, resBody RemoveMonitoredEntitiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveNetworkResourcePoolBody struct {
    +	Req    *types.RemoveNetworkResourcePool         `xml:"urn:vim25 RemoveNetworkResourcePool,omitempty"`
    +	Res    *types.RemoveNetworkResourcePoolResponse `xml:"urn:vim25 RemoveNetworkResourcePoolResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveNetworkResourcePoolBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveNetworkResourcePool(ctx context.Context, r soap.RoundTripper, req *types.RemoveNetworkResourcePool) (*types.RemoveNetworkResourcePoolResponse, error) {
    +	var reqBody, resBody RemoveNetworkResourcePoolBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemovePerfIntervalBody struct {
    +	Req    *types.RemovePerfInterval         `xml:"urn:vim25 RemovePerfInterval,omitempty"`
    +	Res    *types.RemovePerfIntervalResponse `xml:"urn:vim25 RemovePerfIntervalResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemovePerfIntervalBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemovePerfInterval(ctx context.Context, r soap.RoundTripper, req *types.RemovePerfInterval) (*types.RemovePerfIntervalResponse, error) {
    +	var reqBody, resBody RemovePerfIntervalBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemovePortGroupBody struct {
    +	Req    *types.RemovePortGroup         `xml:"urn:vim25 RemovePortGroup,omitempty"`
    +	Res    *types.RemovePortGroupResponse `xml:"urn:vim25 RemovePortGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemovePortGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemovePortGroup(ctx context.Context, r soap.RoundTripper, req *types.RemovePortGroup) (*types.RemovePortGroupResponse, error) {
    +	var reqBody, resBody RemovePortGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveScheduledTaskBody struct {
    +	Req    *types.RemoveScheduledTask         `xml:"urn:vim25 RemoveScheduledTask,omitempty"`
    +	Res    *types.RemoveScheduledTaskResponse `xml:"urn:vim25 RemoveScheduledTaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveScheduledTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveScheduledTask(ctx context.Context, r soap.RoundTripper, req *types.RemoveScheduledTask) (*types.RemoveScheduledTaskResponse, error) {
    +	var reqBody, resBody RemoveScheduledTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveServiceConsoleVirtualNicBody struct {
    +	Req    *types.RemoveServiceConsoleVirtualNic         `xml:"urn:vim25 RemoveServiceConsoleVirtualNic,omitempty"`
    +	Res    *types.RemoveServiceConsoleVirtualNicResponse `xml:"urn:vim25 RemoveServiceConsoleVirtualNicResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveServiceConsoleVirtualNicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveServiceConsoleVirtualNic(ctx context.Context, r soap.RoundTripper, req *types.RemoveServiceConsoleVirtualNic) (*types.RemoveServiceConsoleVirtualNicResponse, error) {
    +	var reqBody, resBody RemoveServiceConsoleVirtualNicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveSmartCardTrustAnchorBody struct {
    +	Req    *types.RemoveSmartCardTrustAnchor         `xml:"urn:vim25 RemoveSmartCardTrustAnchor,omitempty"`
    +	Res    *types.RemoveSmartCardTrustAnchorResponse `xml:"urn:vim25 RemoveSmartCardTrustAnchorResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveSmartCardTrustAnchorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveSmartCardTrustAnchor(ctx context.Context, r soap.RoundTripper, req *types.RemoveSmartCardTrustAnchor) (*types.RemoveSmartCardTrustAnchorResponse, error) {
    +	var reqBody, resBody RemoveSmartCardTrustAnchorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveSmartCardTrustAnchorByFingerprintBody struct {
    +	Req    *types.RemoveSmartCardTrustAnchorByFingerprint         `xml:"urn:vim25 RemoveSmartCardTrustAnchorByFingerprint,omitempty"`
    +	Res    *types.RemoveSmartCardTrustAnchorByFingerprintResponse `xml:"urn:vim25 RemoveSmartCardTrustAnchorByFingerprintResponse,omitempty"`
    +	Fault_ *soap.Fault                                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveSmartCardTrustAnchorByFingerprintBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveSmartCardTrustAnchorByFingerprint(ctx context.Context, r soap.RoundTripper, req *types.RemoveSmartCardTrustAnchorByFingerprint) (*types.RemoveSmartCardTrustAnchorByFingerprintResponse, error) {
    +	var reqBody, resBody RemoveSmartCardTrustAnchorByFingerprintBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveSnapshot_TaskBody struct {
    +	Req    *types.RemoveSnapshot_Task         `xml:"urn:vim25 RemoveSnapshot_Task,omitempty"`
    +	Res    *types.RemoveSnapshot_TaskResponse `xml:"urn:vim25 RemoveSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.RemoveSnapshot_Task) (*types.RemoveSnapshot_TaskResponse, error) {
    +	var reqBody, resBody RemoveSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveUserBody struct {
    +	Req    *types.RemoveUser         `xml:"urn:vim25 RemoveUser,omitempty"`
    +	Res    *types.RemoveUserResponse `xml:"urn:vim25 RemoveUserResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveUserBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveUser(ctx context.Context, r soap.RoundTripper, req *types.RemoveUser) (*types.RemoveUserResponse, error) {
    +	var reqBody, resBody RemoveUserBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveVirtualNicBody struct {
    +	Req    *types.RemoveVirtualNic         `xml:"urn:vim25 RemoveVirtualNic,omitempty"`
    +	Res    *types.RemoveVirtualNicResponse `xml:"urn:vim25 RemoveVirtualNicResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveVirtualNicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveVirtualNic(ctx context.Context, r soap.RoundTripper, req *types.RemoveVirtualNic) (*types.RemoveVirtualNicResponse, error) {
    +	var reqBody, resBody RemoveVirtualNicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RemoveVirtualSwitchBody struct {
    +	Req    *types.RemoveVirtualSwitch         `xml:"urn:vim25 RemoveVirtualSwitch,omitempty"`
    +	Res    *types.RemoveVirtualSwitchResponse `xml:"urn:vim25 RemoveVirtualSwitchResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RemoveVirtualSwitchBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RemoveVirtualSwitch(ctx context.Context, r soap.RoundTripper, req *types.RemoveVirtualSwitch) (*types.RemoveVirtualSwitchResponse, error) {
    +	var reqBody, resBody RemoveVirtualSwitchBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RenameCustomFieldDefBody struct {
    +	Req    *types.RenameCustomFieldDef         `xml:"urn:vim25 RenameCustomFieldDef,omitempty"`
    +	Res    *types.RenameCustomFieldDefResponse `xml:"urn:vim25 RenameCustomFieldDefResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RenameCustomFieldDefBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RenameCustomFieldDef(ctx context.Context, r soap.RoundTripper, req *types.RenameCustomFieldDef) (*types.RenameCustomFieldDefResponse, error) {
    +	var reqBody, resBody RenameCustomFieldDefBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RenameCustomizationSpecBody struct {
    +	Req    *types.RenameCustomizationSpec         `xml:"urn:vim25 RenameCustomizationSpec,omitempty"`
    +	Res    *types.RenameCustomizationSpecResponse `xml:"urn:vim25 RenameCustomizationSpecResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RenameCustomizationSpecBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RenameCustomizationSpec(ctx context.Context, r soap.RoundTripper, req *types.RenameCustomizationSpec) (*types.RenameCustomizationSpecResponse, error) {
    +	var reqBody, resBody RenameCustomizationSpecBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RenameDatastoreBody struct {
    +	Req    *types.RenameDatastore         `xml:"urn:vim25 RenameDatastore,omitempty"`
    +	Res    *types.RenameDatastoreResponse `xml:"urn:vim25 RenameDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RenameDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RenameDatastore(ctx context.Context, r soap.RoundTripper, req *types.RenameDatastore) (*types.RenameDatastoreResponse, error) {
    +	var reqBody, resBody RenameDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RenameSnapshotBody struct {
    +	Req    *types.RenameSnapshot         `xml:"urn:vim25 RenameSnapshot,omitempty"`
    +	Res    *types.RenameSnapshotResponse `xml:"urn:vim25 RenameSnapshotResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RenameSnapshotBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RenameSnapshot(ctx context.Context, r soap.RoundTripper, req *types.RenameSnapshot) (*types.RenameSnapshotResponse, error) {
    +	var reqBody, resBody RenameSnapshotBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RenameVStorageObjectBody struct {
    +	Req    *types.RenameVStorageObject         `xml:"urn:vim25 RenameVStorageObject,omitempty"`
    +	Res    *types.RenameVStorageObjectResponse `xml:"urn:vim25 RenameVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RenameVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RenameVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.RenameVStorageObject) (*types.RenameVStorageObjectResponse, error) {
    +	var reqBody, resBody RenameVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type Rename_TaskBody struct {
    +	Req    *types.Rename_Task         `xml:"urn:vim25 Rename_Task,omitempty"`
    +	Res    *types.Rename_TaskResponse `xml:"urn:vim25 Rename_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *Rename_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func Rename_Task(ctx context.Context, r soap.RoundTripper, req *types.Rename_Task) (*types.Rename_TaskResponse, error) {
    +	var reqBody, resBody Rename_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReplaceCACertificatesAndCRLsBody struct {
    +	Req    *types.ReplaceCACertificatesAndCRLs         `xml:"urn:vim25 ReplaceCACertificatesAndCRLs,omitempty"`
    +	Res    *types.ReplaceCACertificatesAndCRLsResponse `xml:"urn:vim25 ReplaceCACertificatesAndCRLsResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReplaceCACertificatesAndCRLsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReplaceCACertificatesAndCRLs(ctx context.Context, r soap.RoundTripper, req *types.ReplaceCACertificatesAndCRLs) (*types.ReplaceCACertificatesAndCRLsResponse, error) {
    +	var reqBody, resBody ReplaceCACertificatesAndCRLsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReplaceSmartCardTrustAnchorsBody struct {
    +	Req    *types.ReplaceSmartCardTrustAnchors         `xml:"urn:vim25 ReplaceSmartCardTrustAnchors,omitempty"`
    +	Res    *types.ReplaceSmartCardTrustAnchorsResponse `xml:"urn:vim25 ReplaceSmartCardTrustAnchorsResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReplaceSmartCardTrustAnchorsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReplaceSmartCardTrustAnchors(ctx context.Context, r soap.RoundTripper, req *types.ReplaceSmartCardTrustAnchors) (*types.ReplaceSmartCardTrustAnchorsResponse, error) {
    +	var reqBody, resBody ReplaceSmartCardTrustAnchorsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RescanAllHbaBody struct {
    +	Req    *types.RescanAllHba         `xml:"urn:vim25 RescanAllHba,omitempty"`
    +	Res    *types.RescanAllHbaResponse `xml:"urn:vim25 RescanAllHbaResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RescanAllHbaBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RescanAllHba(ctx context.Context, r soap.RoundTripper, req *types.RescanAllHba) (*types.RescanAllHbaResponse, error) {
    +	var reqBody, resBody RescanAllHbaBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RescanHbaBody struct {
    +	Req    *types.RescanHba         `xml:"urn:vim25 RescanHba,omitempty"`
    +	Res    *types.RescanHbaResponse `xml:"urn:vim25 RescanHbaResponse,omitempty"`
    +	Fault_ *soap.Fault              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RescanHbaBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RescanHba(ctx context.Context, r soap.RoundTripper, req *types.RescanHba) (*types.RescanHbaResponse, error) {
    +	var reqBody, resBody RescanHbaBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RescanVffsBody struct {
    +	Req    *types.RescanVffs         `xml:"urn:vim25 RescanVffs,omitempty"`
    +	Res    *types.RescanVffsResponse `xml:"urn:vim25 RescanVffsResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RescanVffsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RescanVffs(ctx context.Context, r soap.RoundTripper, req *types.RescanVffs) (*types.RescanVffsResponse, error) {
    +	var reqBody, resBody RescanVffsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RescanVmfsBody struct {
    +	Req    *types.RescanVmfs         `xml:"urn:vim25 RescanVmfs,omitempty"`
    +	Res    *types.RescanVmfsResponse `xml:"urn:vim25 RescanVmfsResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RescanVmfsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RescanVmfs(ctx context.Context, r soap.RoundTripper, req *types.RescanVmfs) (*types.RescanVmfsResponse, error) {
    +	var reqBody, resBody RescanVmfsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetCollectorBody struct {
    +	Req    *types.ResetCollector         `xml:"urn:vim25 ResetCollector,omitempty"`
    +	Res    *types.ResetCollectorResponse `xml:"urn:vim25 ResetCollectorResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetCollectorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetCollector(ctx context.Context, r soap.RoundTripper, req *types.ResetCollector) (*types.ResetCollectorResponse, error) {
    +	var reqBody, resBody ResetCollectorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetCounterLevelMappingBody struct {
    +	Req    *types.ResetCounterLevelMapping         `xml:"urn:vim25 ResetCounterLevelMapping,omitempty"`
    +	Res    *types.ResetCounterLevelMappingResponse `xml:"urn:vim25 ResetCounterLevelMappingResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetCounterLevelMappingBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetCounterLevelMapping(ctx context.Context, r soap.RoundTripper, req *types.ResetCounterLevelMapping) (*types.ResetCounterLevelMappingResponse, error) {
    +	var reqBody, resBody ResetCounterLevelMappingBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetEntityPermissionsBody struct {
    +	Req    *types.ResetEntityPermissions         `xml:"urn:vim25 ResetEntityPermissions,omitempty"`
    +	Res    *types.ResetEntityPermissionsResponse `xml:"urn:vim25 ResetEntityPermissionsResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetEntityPermissionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetEntityPermissions(ctx context.Context, r soap.RoundTripper, req *types.ResetEntityPermissions) (*types.ResetEntityPermissionsResponse, error) {
    +	var reqBody, resBody ResetEntityPermissionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetFirmwareToFactoryDefaultsBody struct {
    +	Req    *types.ResetFirmwareToFactoryDefaults         `xml:"urn:vim25 ResetFirmwareToFactoryDefaults,omitempty"`
    +	Res    *types.ResetFirmwareToFactoryDefaultsResponse `xml:"urn:vim25 ResetFirmwareToFactoryDefaultsResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetFirmwareToFactoryDefaultsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetFirmwareToFactoryDefaults(ctx context.Context, r soap.RoundTripper, req *types.ResetFirmwareToFactoryDefaults) (*types.ResetFirmwareToFactoryDefaultsResponse, error) {
    +	var reqBody, resBody ResetFirmwareToFactoryDefaultsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetGuestInformationBody struct {
    +	Req    *types.ResetGuestInformation         `xml:"urn:vim25 ResetGuestInformation,omitempty"`
    +	Res    *types.ResetGuestInformationResponse `xml:"urn:vim25 ResetGuestInformationResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetGuestInformationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetGuestInformation(ctx context.Context, r soap.RoundTripper, req *types.ResetGuestInformation) (*types.ResetGuestInformationResponse, error) {
    +	var reqBody, resBody ResetGuestInformationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetListViewBody struct {
    +	Req    *types.ResetListView         `xml:"urn:vim25 ResetListView,omitempty"`
    +	Res    *types.ResetListViewResponse `xml:"urn:vim25 ResetListViewResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetListViewBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetListView(ctx context.Context, r soap.RoundTripper, req *types.ResetListView) (*types.ResetListViewResponse, error) {
    +	var reqBody, resBody ResetListViewBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetListViewFromViewBody struct {
    +	Req    *types.ResetListViewFromView         `xml:"urn:vim25 ResetListViewFromView,omitempty"`
    +	Res    *types.ResetListViewFromViewResponse `xml:"urn:vim25 ResetListViewFromViewResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetListViewFromViewBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetListViewFromView(ctx context.Context, r soap.RoundTripper, req *types.ResetListViewFromView) (*types.ResetListViewFromViewResponse, error) {
    +	var reqBody, resBody ResetListViewFromViewBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetSystemHealthInfoBody struct {
    +	Req    *types.ResetSystemHealthInfo         `xml:"urn:vim25 ResetSystemHealthInfo,omitempty"`
    +	Res    *types.ResetSystemHealthInfoResponse `xml:"urn:vim25 ResetSystemHealthInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetSystemHealthInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetSystemHealthInfo(ctx context.Context, r soap.RoundTripper, req *types.ResetSystemHealthInfo) (*types.ResetSystemHealthInfoResponse, error) {
    +	var reqBody, resBody ResetSystemHealthInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResetVM_TaskBody struct {
    +	Req    *types.ResetVM_Task         `xml:"urn:vim25 ResetVM_Task,omitempty"`
    +	Res    *types.ResetVM_TaskResponse `xml:"urn:vim25 ResetVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResetVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResetVM_Task(ctx context.Context, r soap.RoundTripper, req *types.ResetVM_Task) (*types.ResetVM_TaskResponse, error) {
    +	var reqBody, resBody ResetVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResignatureUnresolvedVmfsVolume_TaskBody struct {
    +	Req    *types.ResignatureUnresolvedVmfsVolume_Task         `xml:"urn:vim25 ResignatureUnresolvedVmfsVolume_Task,omitempty"`
    +	Res    *types.ResignatureUnresolvedVmfsVolume_TaskResponse `xml:"urn:vim25 ResignatureUnresolvedVmfsVolume_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResignatureUnresolvedVmfsVolume_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResignatureUnresolvedVmfsVolume_Task(ctx context.Context, r soap.RoundTripper, req *types.ResignatureUnresolvedVmfsVolume_Task) (*types.ResignatureUnresolvedVmfsVolume_TaskResponse, error) {
    +	var reqBody, resBody ResignatureUnresolvedVmfsVolume_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResolveInstallationErrorsOnCluster_TaskBody struct {
    +	Req    *types.ResolveInstallationErrorsOnCluster_Task         `xml:"urn:vim25 ResolveInstallationErrorsOnCluster_Task,omitempty"`
    +	Res    *types.ResolveInstallationErrorsOnCluster_TaskResponse `xml:"urn:vim25 ResolveInstallationErrorsOnCluster_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResolveInstallationErrorsOnCluster_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResolveInstallationErrorsOnCluster_Task(ctx context.Context, r soap.RoundTripper, req *types.ResolveInstallationErrorsOnCluster_Task) (*types.ResolveInstallationErrorsOnCluster_TaskResponse, error) {
    +	var reqBody, resBody ResolveInstallationErrorsOnCluster_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResolveInstallationErrorsOnHost_TaskBody struct {
    +	Req    *types.ResolveInstallationErrorsOnHost_Task         `xml:"urn:vim25 ResolveInstallationErrorsOnHost_Task,omitempty"`
    +	Res    *types.ResolveInstallationErrorsOnHost_TaskResponse `xml:"urn:vim25 ResolveInstallationErrorsOnHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResolveInstallationErrorsOnHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResolveInstallationErrorsOnHost_Task(ctx context.Context, r soap.RoundTripper, req *types.ResolveInstallationErrorsOnHost_Task) (*types.ResolveInstallationErrorsOnHost_TaskResponse, error) {
    +	var reqBody, resBody ResolveInstallationErrorsOnHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResolveMultipleUnresolvedVmfsVolumesBody struct {
    +	Req    *types.ResolveMultipleUnresolvedVmfsVolumes         `xml:"urn:vim25 ResolveMultipleUnresolvedVmfsVolumes,omitempty"`
    +	Res    *types.ResolveMultipleUnresolvedVmfsVolumesResponse `xml:"urn:vim25 ResolveMultipleUnresolvedVmfsVolumesResponse,omitempty"`
    +	Fault_ *soap.Fault                                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResolveMultipleUnresolvedVmfsVolumesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResolveMultipleUnresolvedVmfsVolumes(ctx context.Context, r soap.RoundTripper, req *types.ResolveMultipleUnresolvedVmfsVolumes) (*types.ResolveMultipleUnresolvedVmfsVolumesResponse, error) {
    +	var reqBody, resBody ResolveMultipleUnresolvedVmfsVolumesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ResolveMultipleUnresolvedVmfsVolumesEx_TaskBody struct {
    +	Req    *types.ResolveMultipleUnresolvedVmfsVolumesEx_Task         `xml:"urn:vim25 ResolveMultipleUnresolvedVmfsVolumesEx_Task,omitempty"`
    +	Res    *types.ResolveMultipleUnresolvedVmfsVolumesEx_TaskResponse `xml:"urn:vim25 ResolveMultipleUnresolvedVmfsVolumesEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ResolveMultipleUnresolvedVmfsVolumesEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ResolveMultipleUnresolvedVmfsVolumesEx_Task(ctx context.Context, r soap.RoundTripper, req *types.ResolveMultipleUnresolvedVmfsVolumesEx_Task) (*types.ResolveMultipleUnresolvedVmfsVolumesEx_TaskResponse, error) {
    +	var reqBody, resBody ResolveMultipleUnresolvedVmfsVolumesEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RestartServiceBody struct {
    +	Req    *types.RestartService         `xml:"urn:vim25 RestartService,omitempty"`
    +	Res    *types.RestartServiceResponse `xml:"urn:vim25 RestartServiceResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RestartServiceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RestartService(ctx context.Context, r soap.RoundTripper, req *types.RestartService) (*types.RestartServiceResponse, error) {
    +	var reqBody, resBody RestartServiceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RestartServiceConsoleVirtualNicBody struct {
    +	Req    *types.RestartServiceConsoleVirtualNic         `xml:"urn:vim25 RestartServiceConsoleVirtualNic,omitempty"`
    +	Res    *types.RestartServiceConsoleVirtualNicResponse `xml:"urn:vim25 RestartServiceConsoleVirtualNicResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RestartServiceConsoleVirtualNicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RestartServiceConsoleVirtualNic(ctx context.Context, r soap.RoundTripper, req *types.RestartServiceConsoleVirtualNic) (*types.RestartServiceConsoleVirtualNicResponse, error) {
    +	var reqBody, resBody RestartServiceConsoleVirtualNicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RestoreFirmwareConfigurationBody struct {
    +	Req    *types.RestoreFirmwareConfiguration         `xml:"urn:vim25 RestoreFirmwareConfiguration,omitempty"`
    +	Res    *types.RestoreFirmwareConfigurationResponse `xml:"urn:vim25 RestoreFirmwareConfigurationResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RestoreFirmwareConfigurationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RestoreFirmwareConfiguration(ctx context.Context, r soap.RoundTripper, req *types.RestoreFirmwareConfiguration) (*types.RestoreFirmwareConfigurationResponse, error) {
    +	var reqBody, resBody RestoreFirmwareConfigurationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveAllPermissionsBody struct {
    +	Req    *types.RetrieveAllPermissions         `xml:"urn:vim25 RetrieveAllPermissions,omitempty"`
    +	Res    *types.RetrieveAllPermissionsResponse `xml:"urn:vim25 RetrieveAllPermissionsResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveAllPermissionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveAllPermissions(ctx context.Context, r soap.RoundTripper, req *types.RetrieveAllPermissions) (*types.RetrieveAllPermissionsResponse, error) {
    +	var reqBody, resBody RetrieveAllPermissionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveAnswerFileBody struct {
    +	Req    *types.RetrieveAnswerFile         `xml:"urn:vim25 RetrieveAnswerFile,omitempty"`
    +	Res    *types.RetrieveAnswerFileResponse `xml:"urn:vim25 RetrieveAnswerFileResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveAnswerFileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveAnswerFile(ctx context.Context, r soap.RoundTripper, req *types.RetrieveAnswerFile) (*types.RetrieveAnswerFileResponse, error) {
    +	var reqBody, resBody RetrieveAnswerFileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveAnswerFileForProfileBody struct {
    +	Req    *types.RetrieveAnswerFileForProfile         `xml:"urn:vim25 RetrieveAnswerFileForProfile,omitempty"`
    +	Res    *types.RetrieveAnswerFileForProfileResponse `xml:"urn:vim25 RetrieveAnswerFileForProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveAnswerFileForProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveAnswerFileForProfile(ctx context.Context, r soap.RoundTripper, req *types.RetrieveAnswerFileForProfile) (*types.RetrieveAnswerFileForProfileResponse, error) {
    +	var reqBody, resBody RetrieveAnswerFileForProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveArgumentDescriptionBody struct {
    +	Req    *types.RetrieveArgumentDescription         `xml:"urn:vim25 RetrieveArgumentDescription,omitempty"`
    +	Res    *types.RetrieveArgumentDescriptionResponse `xml:"urn:vim25 RetrieveArgumentDescriptionResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveArgumentDescriptionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveArgumentDescription(ctx context.Context, r soap.RoundTripper, req *types.RetrieveArgumentDescription) (*types.RetrieveArgumentDescriptionResponse, error) {
    +	var reqBody, resBody RetrieveArgumentDescriptionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveClientCertBody struct {
    +	Req    *types.RetrieveClientCert         `xml:"urn:vim25 RetrieveClientCert,omitempty"`
    +	Res    *types.RetrieveClientCertResponse `xml:"urn:vim25 RetrieveClientCertResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveClientCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveClientCert(ctx context.Context, r soap.RoundTripper, req *types.RetrieveClientCert) (*types.RetrieveClientCertResponse, error) {
    +	var reqBody, resBody RetrieveClientCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveClientCsrBody struct {
    +	Req    *types.RetrieveClientCsr         `xml:"urn:vim25 RetrieveClientCsr,omitempty"`
    +	Res    *types.RetrieveClientCsrResponse `xml:"urn:vim25 RetrieveClientCsrResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveClientCsrBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveClientCsr(ctx context.Context, r soap.RoundTripper, req *types.RetrieveClientCsr) (*types.RetrieveClientCsrResponse, error) {
    +	var reqBody, resBody RetrieveClientCsrBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveDasAdvancedRuntimeInfoBody struct {
    +	Req    *types.RetrieveDasAdvancedRuntimeInfo         `xml:"urn:vim25 RetrieveDasAdvancedRuntimeInfo,omitempty"`
    +	Res    *types.RetrieveDasAdvancedRuntimeInfoResponse `xml:"urn:vim25 RetrieveDasAdvancedRuntimeInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveDasAdvancedRuntimeInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveDasAdvancedRuntimeInfo(ctx context.Context, r soap.RoundTripper, req *types.RetrieveDasAdvancedRuntimeInfo) (*types.RetrieveDasAdvancedRuntimeInfoResponse, error) {
    +	var reqBody, resBody RetrieveDasAdvancedRuntimeInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveDescriptionBody struct {
    +	Req    *types.RetrieveDescription         `xml:"urn:vim25 RetrieveDescription,omitempty"`
    +	Res    *types.RetrieveDescriptionResponse `xml:"urn:vim25 RetrieveDescriptionResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveDescriptionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveDescription(ctx context.Context, r soap.RoundTripper, req *types.RetrieveDescription) (*types.RetrieveDescriptionResponse, error) {
    +	var reqBody, resBody RetrieveDescriptionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveDiskPartitionInfoBody struct {
    +	Req    *types.RetrieveDiskPartitionInfo         `xml:"urn:vim25 RetrieveDiskPartitionInfo,omitempty"`
    +	Res    *types.RetrieveDiskPartitionInfoResponse `xml:"urn:vim25 RetrieveDiskPartitionInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveDiskPartitionInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveDiskPartitionInfo(ctx context.Context, r soap.RoundTripper, req *types.RetrieveDiskPartitionInfo) (*types.RetrieveDiskPartitionInfoResponse, error) {
    +	var reqBody, resBody RetrieveDiskPartitionInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveEntityPermissionsBody struct {
    +	Req    *types.RetrieveEntityPermissions         `xml:"urn:vim25 RetrieveEntityPermissions,omitempty"`
    +	Res    *types.RetrieveEntityPermissionsResponse `xml:"urn:vim25 RetrieveEntityPermissionsResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveEntityPermissionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveEntityPermissions(ctx context.Context, r soap.RoundTripper, req *types.RetrieveEntityPermissions) (*types.RetrieveEntityPermissionsResponse, error) {
    +	var reqBody, resBody RetrieveEntityPermissionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveEntityScheduledTaskBody struct {
    +	Req    *types.RetrieveEntityScheduledTask         `xml:"urn:vim25 RetrieveEntityScheduledTask,omitempty"`
    +	Res    *types.RetrieveEntityScheduledTaskResponse `xml:"urn:vim25 RetrieveEntityScheduledTaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveEntityScheduledTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveEntityScheduledTask(ctx context.Context, r soap.RoundTripper, req *types.RetrieveEntityScheduledTask) (*types.RetrieveEntityScheduledTaskResponse, error) {
    +	var reqBody, resBody RetrieveEntityScheduledTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveHardwareUptimeBody struct {
    +	Req    *types.RetrieveHardwareUptime         `xml:"urn:vim25 RetrieveHardwareUptime,omitempty"`
    +	Res    *types.RetrieveHardwareUptimeResponse `xml:"urn:vim25 RetrieveHardwareUptimeResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveHardwareUptimeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveHardwareUptime(ctx context.Context, r soap.RoundTripper, req *types.RetrieveHardwareUptime) (*types.RetrieveHardwareUptimeResponse, error) {
    +	var reqBody, resBody RetrieveHardwareUptimeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveHostAccessControlEntriesBody struct {
    +	Req    *types.RetrieveHostAccessControlEntries         `xml:"urn:vim25 RetrieveHostAccessControlEntries,omitempty"`
    +	Res    *types.RetrieveHostAccessControlEntriesResponse `xml:"urn:vim25 RetrieveHostAccessControlEntriesResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveHostAccessControlEntriesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveHostAccessControlEntries(ctx context.Context, r soap.RoundTripper, req *types.RetrieveHostAccessControlEntries) (*types.RetrieveHostAccessControlEntriesResponse, error) {
    +	var reqBody, resBody RetrieveHostAccessControlEntriesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveHostCustomizationsBody struct {
    +	Req    *types.RetrieveHostCustomizations         `xml:"urn:vim25 RetrieveHostCustomizations,omitempty"`
    +	Res    *types.RetrieveHostCustomizationsResponse `xml:"urn:vim25 RetrieveHostCustomizationsResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveHostCustomizationsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveHostCustomizations(ctx context.Context, r soap.RoundTripper, req *types.RetrieveHostCustomizations) (*types.RetrieveHostCustomizationsResponse, error) {
    +	var reqBody, resBody RetrieveHostCustomizationsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveHostCustomizationsForProfileBody struct {
    +	Req    *types.RetrieveHostCustomizationsForProfile         `xml:"urn:vim25 RetrieveHostCustomizationsForProfile,omitempty"`
    +	Res    *types.RetrieveHostCustomizationsForProfileResponse `xml:"urn:vim25 RetrieveHostCustomizationsForProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveHostCustomizationsForProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveHostCustomizationsForProfile(ctx context.Context, r soap.RoundTripper, req *types.RetrieveHostCustomizationsForProfile) (*types.RetrieveHostCustomizationsForProfileResponse, error) {
    +	var reqBody, resBody RetrieveHostCustomizationsForProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveHostSpecificationBody struct {
    +	Req    *types.RetrieveHostSpecification         `xml:"urn:vim25 RetrieveHostSpecification,omitempty"`
    +	Res    *types.RetrieveHostSpecificationResponse `xml:"urn:vim25 RetrieveHostSpecificationResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveHostSpecificationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveHostSpecification(ctx context.Context, r soap.RoundTripper, req *types.RetrieveHostSpecification) (*types.RetrieveHostSpecificationResponse, error) {
    +	var reqBody, resBody RetrieveHostSpecificationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveKmipServerCertBody struct {
    +	Req    *types.RetrieveKmipServerCert         `xml:"urn:vim25 RetrieveKmipServerCert,omitempty"`
    +	Res    *types.RetrieveKmipServerCertResponse `xml:"urn:vim25 RetrieveKmipServerCertResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveKmipServerCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveKmipServerCert(ctx context.Context, r soap.RoundTripper, req *types.RetrieveKmipServerCert) (*types.RetrieveKmipServerCertResponse, error) {
    +	var reqBody, resBody RetrieveKmipServerCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveKmipServersStatus_TaskBody struct {
    +	Req    *types.RetrieveKmipServersStatus_Task         `xml:"urn:vim25 RetrieveKmipServersStatus_Task,omitempty"`
    +	Res    *types.RetrieveKmipServersStatus_TaskResponse `xml:"urn:vim25 RetrieveKmipServersStatus_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveKmipServersStatus_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveKmipServersStatus_Task(ctx context.Context, r soap.RoundTripper, req *types.RetrieveKmipServersStatus_Task) (*types.RetrieveKmipServersStatus_TaskResponse, error) {
    +	var reqBody, resBody RetrieveKmipServersStatus_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveObjectScheduledTaskBody struct {
    +	Req    *types.RetrieveObjectScheduledTask         `xml:"urn:vim25 RetrieveObjectScheduledTask,omitempty"`
    +	Res    *types.RetrieveObjectScheduledTaskResponse `xml:"urn:vim25 RetrieveObjectScheduledTaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveObjectScheduledTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveObjectScheduledTask(ctx context.Context, r soap.RoundTripper, req *types.RetrieveObjectScheduledTask) (*types.RetrieveObjectScheduledTaskResponse, error) {
    +	var reqBody, resBody RetrieveObjectScheduledTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveProductComponentsBody struct {
    +	Req    *types.RetrieveProductComponents         `xml:"urn:vim25 RetrieveProductComponents,omitempty"`
    +	Res    *types.RetrieveProductComponentsResponse `xml:"urn:vim25 RetrieveProductComponentsResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveProductComponentsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveProductComponents(ctx context.Context, r soap.RoundTripper, req *types.RetrieveProductComponents) (*types.RetrieveProductComponentsResponse, error) {
    +	var reqBody, resBody RetrieveProductComponentsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrievePropertiesBody struct {
    +	Req    *types.RetrieveProperties         `xml:"urn:vim25 RetrieveProperties,omitempty"`
    +	Res    *types.RetrievePropertiesResponse `xml:"urn:vim25 RetrievePropertiesResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrievePropertiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveProperties(ctx context.Context, r soap.RoundTripper, req *types.RetrieveProperties) (*types.RetrievePropertiesResponse, error) {
    +	var reqBody, resBody RetrievePropertiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrievePropertiesExBody struct {
    +	Req    *types.RetrievePropertiesEx         `xml:"urn:vim25 RetrievePropertiesEx,omitempty"`
    +	Res    *types.RetrievePropertiesExResponse `xml:"urn:vim25 RetrievePropertiesExResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrievePropertiesExBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrievePropertiesEx(ctx context.Context, r soap.RoundTripper, req *types.RetrievePropertiesEx) (*types.RetrievePropertiesExResponse, error) {
    +	var reqBody, resBody RetrievePropertiesExBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveRolePermissionsBody struct {
    +	Req    *types.RetrieveRolePermissions         `xml:"urn:vim25 RetrieveRolePermissions,omitempty"`
    +	Res    *types.RetrieveRolePermissionsResponse `xml:"urn:vim25 RetrieveRolePermissionsResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveRolePermissionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveRolePermissions(ctx context.Context, r soap.RoundTripper, req *types.RetrieveRolePermissions) (*types.RetrieveRolePermissionsResponse, error) {
    +	var reqBody, resBody RetrieveRolePermissionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveSelfSignedClientCertBody struct {
    +	Req    *types.RetrieveSelfSignedClientCert         `xml:"urn:vim25 RetrieveSelfSignedClientCert,omitempty"`
    +	Res    *types.RetrieveSelfSignedClientCertResponse `xml:"urn:vim25 RetrieveSelfSignedClientCertResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveSelfSignedClientCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveSelfSignedClientCert(ctx context.Context, r soap.RoundTripper, req *types.RetrieveSelfSignedClientCert) (*types.RetrieveSelfSignedClientCertResponse, error) {
    +	var reqBody, resBody RetrieveSelfSignedClientCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveServiceContentBody struct {
    +	Req    *types.RetrieveServiceContent         `xml:"urn:vim25 RetrieveServiceContent,omitempty"`
    +	Res    *types.RetrieveServiceContentResponse `xml:"urn:vim25 RetrieveServiceContentResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveServiceContentBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveServiceContent(ctx context.Context, r soap.RoundTripper, req *types.RetrieveServiceContent) (*types.RetrieveServiceContentResponse, error) {
    +	var reqBody, resBody RetrieveServiceContentBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveSnapshotInfoBody struct {
    +	Req    *types.RetrieveSnapshotInfo         `xml:"urn:vim25 RetrieveSnapshotInfo,omitempty"`
    +	Res    *types.RetrieveSnapshotInfoResponse `xml:"urn:vim25 RetrieveSnapshotInfoResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveSnapshotInfoBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveSnapshotInfo(ctx context.Context, r soap.RoundTripper, req *types.RetrieveSnapshotInfo) (*types.RetrieveSnapshotInfoResponse, error) {
    +	var reqBody, resBody RetrieveSnapshotInfoBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveUserGroupsBody struct {
    +	Req    *types.RetrieveUserGroups         `xml:"urn:vim25 RetrieveUserGroups,omitempty"`
    +	Res    *types.RetrieveUserGroupsResponse `xml:"urn:vim25 RetrieveUserGroupsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveUserGroupsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveUserGroups(ctx context.Context, r soap.RoundTripper, req *types.RetrieveUserGroups) (*types.RetrieveUserGroupsResponse, error) {
    +	var reqBody, resBody RetrieveUserGroupsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveVStorageInfrastructureObjectPolicyBody struct {
    +	Req    *types.RetrieveVStorageInfrastructureObjectPolicy         `xml:"urn:vim25 RetrieveVStorageInfrastructureObjectPolicy,omitempty"`
    +	Res    *types.RetrieveVStorageInfrastructureObjectPolicyResponse `xml:"urn:vim25 RetrieveVStorageInfrastructureObjectPolicyResponse,omitempty"`
    +	Fault_ *soap.Fault                                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveVStorageInfrastructureObjectPolicyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveVStorageInfrastructureObjectPolicy(ctx context.Context, r soap.RoundTripper, req *types.RetrieveVStorageInfrastructureObjectPolicy) (*types.RetrieveVStorageInfrastructureObjectPolicyResponse, error) {
    +	var reqBody, resBody RetrieveVStorageInfrastructureObjectPolicyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveVStorageObjectBody struct {
    +	Req    *types.RetrieveVStorageObject         `xml:"urn:vim25 RetrieveVStorageObject,omitempty"`
    +	Res    *types.RetrieveVStorageObjectResponse `xml:"urn:vim25 RetrieveVStorageObjectResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveVStorageObjectBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveVStorageObject(ctx context.Context, r soap.RoundTripper, req *types.RetrieveVStorageObject) (*types.RetrieveVStorageObjectResponse, error) {
    +	var reqBody, resBody RetrieveVStorageObjectBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveVStorageObjectAssociationsBody struct {
    +	Req    *types.RetrieveVStorageObjectAssociations         `xml:"urn:vim25 RetrieveVStorageObjectAssociations,omitempty"`
    +	Res    *types.RetrieveVStorageObjectAssociationsResponse `xml:"urn:vim25 RetrieveVStorageObjectAssociationsResponse,omitempty"`
    +	Fault_ *soap.Fault                                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveVStorageObjectAssociationsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveVStorageObjectAssociations(ctx context.Context, r soap.RoundTripper, req *types.RetrieveVStorageObjectAssociations) (*types.RetrieveVStorageObjectAssociationsResponse, error) {
    +	var reqBody, resBody RetrieveVStorageObjectAssociationsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RetrieveVStorageObjectStateBody struct {
    +	Req    *types.RetrieveVStorageObjectState         `xml:"urn:vim25 RetrieveVStorageObjectState,omitempty"`
    +	Res    *types.RetrieveVStorageObjectStateResponse `xml:"urn:vim25 RetrieveVStorageObjectStateResponse,omitempty"`
    +	Fault_ *soap.Fault                                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RetrieveVStorageObjectStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RetrieveVStorageObjectState(ctx context.Context, r soap.RoundTripper, req *types.RetrieveVStorageObjectState) (*types.RetrieveVStorageObjectStateResponse, error) {
    +	var reqBody, resBody RetrieveVStorageObjectStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RevertToCurrentSnapshot_TaskBody struct {
    +	Req    *types.RevertToCurrentSnapshot_Task         `xml:"urn:vim25 RevertToCurrentSnapshot_Task,omitempty"`
    +	Res    *types.RevertToCurrentSnapshot_TaskResponse `xml:"urn:vim25 RevertToCurrentSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RevertToCurrentSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RevertToCurrentSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.RevertToCurrentSnapshot_Task) (*types.RevertToCurrentSnapshot_TaskResponse, error) {
    +	var reqBody, resBody RevertToCurrentSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RevertToSnapshot_TaskBody struct {
    +	Req    *types.RevertToSnapshot_Task         `xml:"urn:vim25 RevertToSnapshot_Task,omitempty"`
    +	Res    *types.RevertToSnapshot_TaskResponse `xml:"urn:vim25 RevertToSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RevertToSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RevertToSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.RevertToSnapshot_Task) (*types.RevertToSnapshot_TaskResponse, error) {
    +	var reqBody, resBody RevertToSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RevertVStorageObject_TaskBody struct {
    +	Req    *types.RevertVStorageObject_Task         `xml:"urn:vim25 RevertVStorageObject_Task,omitempty"`
    +	Res    *types.RevertVStorageObject_TaskResponse `xml:"urn:vim25 RevertVStorageObject_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RevertVStorageObject_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RevertVStorageObject_Task(ctx context.Context, r soap.RoundTripper, req *types.RevertVStorageObject_Task) (*types.RevertVStorageObject_TaskResponse, error) {
    +	var reqBody, resBody RevertVStorageObject_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RewindCollectorBody struct {
    +	Req    *types.RewindCollector         `xml:"urn:vim25 RewindCollector,omitempty"`
    +	Res    *types.RewindCollectorResponse `xml:"urn:vim25 RewindCollectorResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RewindCollectorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RewindCollector(ctx context.Context, r soap.RoundTripper, req *types.RewindCollector) (*types.RewindCollectorResponse, error) {
    +	var reqBody, resBody RewindCollectorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RunScheduledTaskBody struct {
    +	Req    *types.RunScheduledTask         `xml:"urn:vim25 RunScheduledTask,omitempty"`
    +	Res    *types.RunScheduledTaskResponse `xml:"urn:vim25 RunScheduledTaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RunScheduledTaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RunScheduledTask(ctx context.Context, r soap.RoundTripper, req *types.RunScheduledTask) (*types.RunScheduledTaskResponse, error) {
    +	var reqBody, resBody RunScheduledTaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type RunVsanPhysicalDiskDiagnosticsBody struct {
    +	Req    *types.RunVsanPhysicalDiskDiagnostics         `xml:"urn:vim25 RunVsanPhysicalDiskDiagnostics,omitempty"`
    +	Res    *types.RunVsanPhysicalDiskDiagnosticsResponse `xml:"urn:vim25 RunVsanPhysicalDiskDiagnosticsResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *RunVsanPhysicalDiskDiagnosticsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func RunVsanPhysicalDiskDiagnostics(ctx context.Context, r soap.RoundTripper, req *types.RunVsanPhysicalDiskDiagnostics) (*types.RunVsanPhysicalDiskDiagnosticsResponse, error) {
    +	var reqBody, resBody RunVsanPhysicalDiskDiagnosticsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ScanHostPatchV2_TaskBody struct {
    +	Req    *types.ScanHostPatchV2_Task         `xml:"urn:vim25 ScanHostPatchV2_Task,omitempty"`
    +	Res    *types.ScanHostPatchV2_TaskResponse `xml:"urn:vim25 ScanHostPatchV2_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ScanHostPatchV2_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ScanHostPatchV2_Task(ctx context.Context, r soap.RoundTripper, req *types.ScanHostPatchV2_Task) (*types.ScanHostPatchV2_TaskResponse, error) {
    +	var reqBody, resBody ScanHostPatchV2_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ScanHostPatch_TaskBody struct {
    +	Req    *types.ScanHostPatch_Task         `xml:"urn:vim25 ScanHostPatch_Task,omitempty"`
    +	Res    *types.ScanHostPatch_TaskResponse `xml:"urn:vim25 ScanHostPatch_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ScanHostPatch_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ScanHostPatch_Task(ctx context.Context, r soap.RoundTripper, req *types.ScanHostPatch_Task) (*types.ScanHostPatch_TaskResponse, error) {
    +	var reqBody, resBody ScanHostPatch_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ScheduleReconcileDatastoreInventoryBody struct {
    +	Req    *types.ScheduleReconcileDatastoreInventory         `xml:"urn:vim25 ScheduleReconcileDatastoreInventory,omitempty"`
    +	Res    *types.ScheduleReconcileDatastoreInventoryResponse `xml:"urn:vim25 ScheduleReconcileDatastoreInventoryResponse,omitempty"`
    +	Fault_ *soap.Fault                                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ScheduleReconcileDatastoreInventoryBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ScheduleReconcileDatastoreInventory(ctx context.Context, r soap.RoundTripper, req *types.ScheduleReconcileDatastoreInventory) (*types.ScheduleReconcileDatastoreInventoryResponse, error) {
    +	var reqBody, resBody ScheduleReconcileDatastoreInventoryBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SearchDatastoreSubFolders_TaskBody struct {
    +	Req    *types.SearchDatastoreSubFolders_Task         `xml:"urn:vim25 SearchDatastoreSubFolders_Task,omitempty"`
    +	Res    *types.SearchDatastoreSubFolders_TaskResponse `xml:"urn:vim25 SearchDatastoreSubFolders_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SearchDatastoreSubFolders_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SearchDatastoreSubFolders_Task(ctx context.Context, r soap.RoundTripper, req *types.SearchDatastoreSubFolders_Task) (*types.SearchDatastoreSubFolders_TaskResponse, error) {
    +	var reqBody, resBody SearchDatastoreSubFolders_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SearchDatastore_TaskBody struct {
    +	Req    *types.SearchDatastore_Task         `xml:"urn:vim25 SearchDatastore_Task,omitempty"`
    +	Res    *types.SearchDatastore_TaskResponse `xml:"urn:vim25 SearchDatastore_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SearchDatastore_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SearchDatastore_Task(ctx context.Context, r soap.RoundTripper, req *types.SearchDatastore_Task) (*types.SearchDatastore_TaskResponse, error) {
    +	var reqBody, resBody SearchDatastore_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SelectActivePartitionBody struct {
    +	Req    *types.SelectActivePartition         `xml:"urn:vim25 SelectActivePartition,omitempty"`
    +	Res    *types.SelectActivePartitionResponse `xml:"urn:vim25 SelectActivePartitionResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SelectActivePartitionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SelectActivePartition(ctx context.Context, r soap.RoundTripper, req *types.SelectActivePartition) (*types.SelectActivePartitionResponse, error) {
    +	var reqBody, resBody SelectActivePartitionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SelectVnicBody struct {
    +	Req    *types.SelectVnic         `xml:"urn:vim25 SelectVnic,omitempty"`
    +	Res    *types.SelectVnicResponse `xml:"urn:vim25 SelectVnicResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SelectVnicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SelectVnic(ctx context.Context, r soap.RoundTripper, req *types.SelectVnic) (*types.SelectVnicResponse, error) {
    +	var reqBody, resBody SelectVnicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SelectVnicForNicTypeBody struct {
    +	Req    *types.SelectVnicForNicType         `xml:"urn:vim25 SelectVnicForNicType,omitempty"`
    +	Res    *types.SelectVnicForNicTypeResponse `xml:"urn:vim25 SelectVnicForNicTypeResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SelectVnicForNicTypeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SelectVnicForNicType(ctx context.Context, r soap.RoundTripper, req *types.SelectVnicForNicType) (*types.SelectVnicForNicTypeResponse, error) {
    +	var reqBody, resBody SelectVnicForNicTypeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SendNMIBody struct {
    +	Req    *types.SendNMI         `xml:"urn:vim25 SendNMI,omitempty"`
    +	Res    *types.SendNMIResponse `xml:"urn:vim25 SendNMIResponse,omitempty"`
    +	Fault_ *soap.Fault            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SendNMIBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SendNMI(ctx context.Context, r soap.RoundTripper, req *types.SendNMI) (*types.SendNMIResponse, error) {
    +	var reqBody, resBody SendNMIBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SendTestNotificationBody struct {
    +	Req    *types.SendTestNotification         `xml:"urn:vim25 SendTestNotification,omitempty"`
    +	Res    *types.SendTestNotificationResponse `xml:"urn:vim25 SendTestNotificationResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SendTestNotificationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SendTestNotification(ctx context.Context, r soap.RoundTripper, req *types.SendTestNotification) (*types.SendTestNotificationResponse, error) {
    +	var reqBody, resBody SendTestNotificationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SessionIsActiveBody struct {
    +	Req    *types.SessionIsActive         `xml:"urn:vim25 SessionIsActive,omitempty"`
    +	Res    *types.SessionIsActiveResponse `xml:"urn:vim25 SessionIsActiveResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SessionIsActiveBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SessionIsActive(ctx context.Context, r soap.RoundTripper, req *types.SessionIsActive) (*types.SessionIsActiveResponse, error) {
    +	var reqBody, resBody SessionIsActiveBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetCollectorPageSizeBody struct {
    +	Req    *types.SetCollectorPageSize         `xml:"urn:vim25 SetCollectorPageSize,omitempty"`
    +	Res    *types.SetCollectorPageSizeResponse `xml:"urn:vim25 SetCollectorPageSizeResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetCollectorPageSizeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetCollectorPageSize(ctx context.Context, r soap.RoundTripper, req *types.SetCollectorPageSize) (*types.SetCollectorPageSizeResponse, error) {
    +	var reqBody, resBody SetCollectorPageSizeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetDisplayTopologyBody struct {
    +	Req    *types.SetDisplayTopology         `xml:"urn:vim25 SetDisplayTopology,omitempty"`
    +	Res    *types.SetDisplayTopologyResponse `xml:"urn:vim25 SetDisplayTopologyResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetDisplayTopologyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetDisplayTopology(ctx context.Context, r soap.RoundTripper, req *types.SetDisplayTopology) (*types.SetDisplayTopologyResponse, error) {
    +	var reqBody, resBody SetDisplayTopologyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetEntityPermissionsBody struct {
    +	Req    *types.SetEntityPermissions         `xml:"urn:vim25 SetEntityPermissions,omitempty"`
    +	Res    *types.SetEntityPermissionsResponse `xml:"urn:vim25 SetEntityPermissionsResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetEntityPermissionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetEntityPermissions(ctx context.Context, r soap.RoundTripper, req *types.SetEntityPermissions) (*types.SetEntityPermissionsResponse, error) {
    +	var reqBody, resBody SetEntityPermissionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetExtensionCertificateBody struct {
    +	Req    *types.SetExtensionCertificate         `xml:"urn:vim25 SetExtensionCertificate,omitempty"`
    +	Res    *types.SetExtensionCertificateResponse `xml:"urn:vim25 SetExtensionCertificateResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetExtensionCertificateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetExtensionCertificate(ctx context.Context, r soap.RoundTripper, req *types.SetExtensionCertificate) (*types.SetExtensionCertificateResponse, error) {
    +	var reqBody, resBody SetExtensionCertificateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetFieldBody struct {
    +	Req    *types.SetField         `xml:"urn:vim25 SetField,omitempty"`
    +	Res    *types.SetFieldResponse `xml:"urn:vim25 SetFieldResponse,omitempty"`
    +	Fault_ *soap.Fault             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetFieldBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetField(ctx context.Context, r soap.RoundTripper, req *types.SetField) (*types.SetFieldResponse, error) {
    +	var reqBody, resBody SetFieldBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetLicenseEditionBody struct {
    +	Req    *types.SetLicenseEdition         `xml:"urn:vim25 SetLicenseEdition,omitempty"`
    +	Res    *types.SetLicenseEditionResponse `xml:"urn:vim25 SetLicenseEditionResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetLicenseEditionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetLicenseEdition(ctx context.Context, r soap.RoundTripper, req *types.SetLicenseEdition) (*types.SetLicenseEditionResponse, error) {
    +	var reqBody, resBody SetLicenseEditionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetLocaleBody struct {
    +	Req    *types.SetLocale         `xml:"urn:vim25 SetLocale,omitempty"`
    +	Res    *types.SetLocaleResponse `xml:"urn:vim25 SetLocaleResponse,omitempty"`
    +	Fault_ *soap.Fault              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetLocaleBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetLocale(ctx context.Context, r soap.RoundTripper, req *types.SetLocale) (*types.SetLocaleResponse, error) {
    +	var reqBody, resBody SetLocaleBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetMultipathLunPolicyBody struct {
    +	Req    *types.SetMultipathLunPolicy         `xml:"urn:vim25 SetMultipathLunPolicy,omitempty"`
    +	Res    *types.SetMultipathLunPolicyResponse `xml:"urn:vim25 SetMultipathLunPolicyResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetMultipathLunPolicyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetMultipathLunPolicy(ctx context.Context, r soap.RoundTripper, req *types.SetMultipathLunPolicy) (*types.SetMultipathLunPolicyResponse, error) {
    +	var reqBody, resBody SetMultipathLunPolicyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetNFSUserBody struct {
    +	Req    *types.SetNFSUser         `xml:"urn:vim25 SetNFSUser,omitempty"`
    +	Res    *types.SetNFSUserResponse `xml:"urn:vim25 SetNFSUserResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetNFSUserBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetNFSUser(ctx context.Context, r soap.RoundTripper, req *types.SetNFSUser) (*types.SetNFSUserResponse, error) {
    +	var reqBody, resBody SetNFSUserBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetPublicKeyBody struct {
    +	Req    *types.SetPublicKey         `xml:"urn:vim25 SetPublicKey,omitempty"`
    +	Res    *types.SetPublicKeyResponse `xml:"urn:vim25 SetPublicKeyResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetPublicKeyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetPublicKey(ctx context.Context, r soap.RoundTripper, req *types.SetPublicKey) (*types.SetPublicKeyResponse, error) {
    +	var reqBody, resBody SetPublicKeyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetRegistryValueInGuestBody struct {
    +	Req    *types.SetRegistryValueInGuest         `xml:"urn:vim25 SetRegistryValueInGuest,omitempty"`
    +	Res    *types.SetRegistryValueInGuestResponse `xml:"urn:vim25 SetRegistryValueInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetRegistryValueInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetRegistryValueInGuest(ctx context.Context, r soap.RoundTripper, req *types.SetRegistryValueInGuest) (*types.SetRegistryValueInGuestResponse, error) {
    +	var reqBody, resBody SetRegistryValueInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetScreenResolutionBody struct {
    +	Req    *types.SetScreenResolution         `xml:"urn:vim25 SetScreenResolution,omitempty"`
    +	Res    *types.SetScreenResolutionResponse `xml:"urn:vim25 SetScreenResolutionResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetScreenResolutionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetScreenResolution(ctx context.Context, r soap.RoundTripper, req *types.SetScreenResolution) (*types.SetScreenResolutionResponse, error) {
    +	var reqBody, resBody SetScreenResolutionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetTaskDescriptionBody struct {
    +	Req    *types.SetTaskDescription         `xml:"urn:vim25 SetTaskDescription,omitempty"`
    +	Res    *types.SetTaskDescriptionResponse `xml:"urn:vim25 SetTaskDescriptionResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetTaskDescriptionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetTaskDescription(ctx context.Context, r soap.RoundTripper, req *types.SetTaskDescription) (*types.SetTaskDescriptionResponse, error) {
    +	var reqBody, resBody SetTaskDescriptionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetTaskStateBody struct {
    +	Req    *types.SetTaskState         `xml:"urn:vim25 SetTaskState,omitempty"`
    +	Res    *types.SetTaskStateResponse `xml:"urn:vim25 SetTaskStateResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetTaskStateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetTaskState(ctx context.Context, r soap.RoundTripper, req *types.SetTaskState) (*types.SetTaskStateResponse, error) {
    +	var reqBody, resBody SetTaskStateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetVStorageObjectControlFlagsBody struct {
    +	Req    *types.SetVStorageObjectControlFlags         `xml:"urn:vim25 SetVStorageObjectControlFlags,omitempty"`
    +	Res    *types.SetVStorageObjectControlFlagsResponse `xml:"urn:vim25 SetVStorageObjectControlFlagsResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetVStorageObjectControlFlagsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetVStorageObjectControlFlags(ctx context.Context, r soap.RoundTripper, req *types.SetVStorageObjectControlFlags) (*types.SetVStorageObjectControlFlagsResponse, error) {
    +	var reqBody, resBody SetVStorageObjectControlFlagsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetVirtualDiskUuidBody struct {
    +	Req    *types.SetVirtualDiskUuid         `xml:"urn:vim25 SetVirtualDiskUuid,omitempty"`
    +	Res    *types.SetVirtualDiskUuidResponse `xml:"urn:vim25 SetVirtualDiskUuidResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetVirtualDiskUuidBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetVirtualDiskUuid(ctx context.Context, r soap.RoundTripper, req *types.SetVirtualDiskUuid) (*types.SetVirtualDiskUuidResponse, error) {
    +	var reqBody, resBody SetVirtualDiskUuidBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ShrinkVirtualDisk_TaskBody struct {
    +	Req    *types.ShrinkVirtualDisk_Task         `xml:"urn:vim25 ShrinkVirtualDisk_Task,omitempty"`
    +	Res    *types.ShrinkVirtualDisk_TaskResponse `xml:"urn:vim25 ShrinkVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ShrinkVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ShrinkVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.ShrinkVirtualDisk_Task) (*types.ShrinkVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody ShrinkVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ShutdownGuestBody struct {
    +	Req    *types.ShutdownGuest         `xml:"urn:vim25 ShutdownGuest,omitempty"`
    +	Res    *types.ShutdownGuestResponse `xml:"urn:vim25 ShutdownGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ShutdownGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ShutdownGuest(ctx context.Context, r soap.RoundTripper, req *types.ShutdownGuest) (*types.ShutdownGuestResponse, error) {
    +	var reqBody, resBody ShutdownGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ShutdownHost_TaskBody struct {
    +	Req    *types.ShutdownHost_Task         `xml:"urn:vim25 ShutdownHost_Task,omitempty"`
    +	Res    *types.ShutdownHost_TaskResponse `xml:"urn:vim25 ShutdownHost_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ShutdownHost_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ShutdownHost_Task(ctx context.Context, r soap.RoundTripper, req *types.ShutdownHost_Task) (*types.ShutdownHost_TaskResponse, error) {
    +	var reqBody, resBody ShutdownHost_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StageHostPatch_TaskBody struct {
    +	Req    *types.StageHostPatch_Task         `xml:"urn:vim25 StageHostPatch_Task,omitempty"`
    +	Res    *types.StageHostPatch_TaskResponse `xml:"urn:vim25 StageHostPatch_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StageHostPatch_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StageHostPatch_Task(ctx context.Context, r soap.RoundTripper, req *types.StageHostPatch_Task) (*types.StageHostPatch_TaskResponse, error) {
    +	var reqBody, resBody StageHostPatch_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StampAllRulesWithUuid_TaskBody struct {
    +	Req    *types.StampAllRulesWithUuid_Task         `xml:"urn:vim25 StampAllRulesWithUuid_Task,omitempty"`
    +	Res    *types.StampAllRulesWithUuid_TaskResponse `xml:"urn:vim25 StampAllRulesWithUuid_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StampAllRulesWithUuid_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StampAllRulesWithUuid_Task(ctx context.Context, r soap.RoundTripper, req *types.StampAllRulesWithUuid_Task) (*types.StampAllRulesWithUuid_TaskResponse, error) {
    +	var reqBody, resBody StampAllRulesWithUuid_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StandbyGuestBody struct {
    +	Req    *types.StandbyGuest         `xml:"urn:vim25 StandbyGuest,omitempty"`
    +	Res    *types.StandbyGuestResponse `xml:"urn:vim25 StandbyGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StandbyGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StandbyGuest(ctx context.Context, r soap.RoundTripper, req *types.StandbyGuest) (*types.StandbyGuestResponse, error) {
    +	var reqBody, resBody StandbyGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StartProgramInGuestBody struct {
    +	Req    *types.StartProgramInGuest         `xml:"urn:vim25 StartProgramInGuest,omitempty"`
    +	Res    *types.StartProgramInGuestResponse `xml:"urn:vim25 StartProgramInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StartProgramInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StartProgramInGuest(ctx context.Context, r soap.RoundTripper, req *types.StartProgramInGuest) (*types.StartProgramInGuestResponse, error) {
    +	var reqBody, resBody StartProgramInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StartRecording_TaskBody struct {
    +	Req    *types.StartRecording_Task         `xml:"urn:vim25 StartRecording_Task,omitempty"`
    +	Res    *types.StartRecording_TaskResponse `xml:"urn:vim25 StartRecording_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StartRecording_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StartRecording_Task(ctx context.Context, r soap.RoundTripper, req *types.StartRecording_Task) (*types.StartRecording_TaskResponse, error) {
    +	var reqBody, resBody StartRecording_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StartReplaying_TaskBody struct {
    +	Req    *types.StartReplaying_Task         `xml:"urn:vim25 StartReplaying_Task,omitempty"`
    +	Res    *types.StartReplaying_TaskResponse `xml:"urn:vim25 StartReplaying_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StartReplaying_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StartReplaying_Task(ctx context.Context, r soap.RoundTripper, req *types.StartReplaying_Task) (*types.StartReplaying_TaskResponse, error) {
    +	var reqBody, resBody StartReplaying_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StartServiceBody struct {
    +	Req    *types.StartService         `xml:"urn:vim25 StartService,omitempty"`
    +	Res    *types.StartServiceResponse `xml:"urn:vim25 StartServiceResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StartServiceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StartService(ctx context.Context, r soap.RoundTripper, req *types.StartService) (*types.StartServiceResponse, error) {
    +	var reqBody, resBody StartServiceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StopRecording_TaskBody struct {
    +	Req    *types.StopRecording_Task         `xml:"urn:vim25 StopRecording_Task,omitempty"`
    +	Res    *types.StopRecording_TaskResponse `xml:"urn:vim25 StopRecording_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StopRecording_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StopRecording_Task(ctx context.Context, r soap.RoundTripper, req *types.StopRecording_Task) (*types.StopRecording_TaskResponse, error) {
    +	var reqBody, resBody StopRecording_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StopReplaying_TaskBody struct {
    +	Req    *types.StopReplaying_Task         `xml:"urn:vim25 StopReplaying_Task,omitempty"`
    +	Res    *types.StopReplaying_TaskResponse `xml:"urn:vim25 StopReplaying_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StopReplaying_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StopReplaying_Task(ctx context.Context, r soap.RoundTripper, req *types.StopReplaying_Task) (*types.StopReplaying_TaskResponse, error) {
    +	var reqBody, resBody StopReplaying_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type StopServiceBody struct {
    +	Req    *types.StopService         `xml:"urn:vim25 StopService,omitempty"`
    +	Res    *types.StopServiceResponse `xml:"urn:vim25 StopServiceResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *StopServiceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func StopService(ctx context.Context, r soap.RoundTripper, req *types.StopService) (*types.StopServiceResponse, error) {
    +	var reqBody, resBody StopServiceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SuspendVApp_TaskBody struct {
    +	Req    *types.SuspendVApp_Task         `xml:"urn:vim25 SuspendVApp_Task,omitempty"`
    +	Res    *types.SuspendVApp_TaskResponse `xml:"urn:vim25 SuspendVApp_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SuspendVApp_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SuspendVApp_Task(ctx context.Context, r soap.RoundTripper, req *types.SuspendVApp_Task) (*types.SuspendVApp_TaskResponse, error) {
    +	var reqBody, resBody SuspendVApp_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SuspendVM_TaskBody struct {
    +	Req    *types.SuspendVM_Task         `xml:"urn:vim25 SuspendVM_Task,omitempty"`
    +	Res    *types.SuspendVM_TaskResponse `xml:"urn:vim25 SuspendVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SuspendVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SuspendVM_Task(ctx context.Context, r soap.RoundTripper, req *types.SuspendVM_Task) (*types.SuspendVM_TaskResponse, error) {
    +	var reqBody, resBody SuspendVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type TerminateFaultTolerantVM_TaskBody struct {
    +	Req    *types.TerminateFaultTolerantVM_Task         `xml:"urn:vim25 TerminateFaultTolerantVM_Task,omitempty"`
    +	Res    *types.TerminateFaultTolerantVM_TaskResponse `xml:"urn:vim25 TerminateFaultTolerantVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *TerminateFaultTolerantVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func TerminateFaultTolerantVM_Task(ctx context.Context, r soap.RoundTripper, req *types.TerminateFaultTolerantVM_Task) (*types.TerminateFaultTolerantVM_TaskResponse, error) {
    +	var reqBody, resBody TerminateFaultTolerantVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type TerminateProcessInGuestBody struct {
    +	Req    *types.TerminateProcessInGuest         `xml:"urn:vim25 TerminateProcessInGuest,omitempty"`
    +	Res    *types.TerminateProcessInGuestResponse `xml:"urn:vim25 TerminateProcessInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *TerminateProcessInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func TerminateProcessInGuest(ctx context.Context, r soap.RoundTripper, req *types.TerminateProcessInGuest) (*types.TerminateProcessInGuestResponse, error) {
    +	var reqBody, resBody TerminateProcessInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type TerminateSessionBody struct {
    +	Req    *types.TerminateSession         `xml:"urn:vim25 TerminateSession,omitempty"`
    +	Res    *types.TerminateSessionResponse `xml:"urn:vim25 TerminateSessionResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *TerminateSessionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func TerminateSession(ctx context.Context, r soap.RoundTripper, req *types.TerminateSession) (*types.TerminateSessionResponse, error) {
    +	var reqBody, resBody TerminateSessionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type TerminateVMBody struct {
    +	Req    *types.TerminateVM         `xml:"urn:vim25 TerminateVM,omitempty"`
    +	Res    *types.TerminateVMResponse `xml:"urn:vim25 TerminateVMResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *TerminateVMBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func TerminateVM(ctx context.Context, r soap.RoundTripper, req *types.TerminateVM) (*types.TerminateVMResponse, error) {
    +	var reqBody, resBody TerminateVMBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type TurnDiskLocatorLedOff_TaskBody struct {
    +	Req    *types.TurnDiskLocatorLedOff_Task         `xml:"urn:vim25 TurnDiskLocatorLedOff_Task,omitempty"`
    +	Res    *types.TurnDiskLocatorLedOff_TaskResponse `xml:"urn:vim25 TurnDiskLocatorLedOff_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *TurnDiskLocatorLedOff_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func TurnDiskLocatorLedOff_Task(ctx context.Context, r soap.RoundTripper, req *types.TurnDiskLocatorLedOff_Task) (*types.TurnDiskLocatorLedOff_TaskResponse, error) {
    +	var reqBody, resBody TurnDiskLocatorLedOff_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type TurnDiskLocatorLedOn_TaskBody struct {
    +	Req    *types.TurnDiskLocatorLedOn_Task         `xml:"urn:vim25 TurnDiskLocatorLedOn_Task,omitempty"`
    +	Res    *types.TurnDiskLocatorLedOn_TaskResponse `xml:"urn:vim25 TurnDiskLocatorLedOn_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *TurnDiskLocatorLedOn_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func TurnDiskLocatorLedOn_Task(ctx context.Context, r soap.RoundTripper, req *types.TurnDiskLocatorLedOn_Task) (*types.TurnDiskLocatorLedOn_TaskResponse, error) {
    +	var reqBody, resBody TurnDiskLocatorLedOn_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type TurnOffFaultToleranceForVM_TaskBody struct {
    +	Req    *types.TurnOffFaultToleranceForVM_Task         `xml:"urn:vim25 TurnOffFaultToleranceForVM_Task,omitempty"`
    +	Res    *types.TurnOffFaultToleranceForVM_TaskResponse `xml:"urn:vim25 TurnOffFaultToleranceForVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *TurnOffFaultToleranceForVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func TurnOffFaultToleranceForVM_Task(ctx context.Context, r soap.RoundTripper, req *types.TurnOffFaultToleranceForVM_Task) (*types.TurnOffFaultToleranceForVM_TaskResponse, error) {
    +	var reqBody, resBody TurnOffFaultToleranceForVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnassignUserFromGroupBody struct {
    +	Req    *types.UnassignUserFromGroup         `xml:"urn:vim25 UnassignUserFromGroup,omitempty"`
    +	Res    *types.UnassignUserFromGroupResponse `xml:"urn:vim25 UnassignUserFromGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnassignUserFromGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnassignUserFromGroup(ctx context.Context, r soap.RoundTripper, req *types.UnassignUserFromGroup) (*types.UnassignUserFromGroupResponse, error) {
    +	var reqBody, resBody UnassignUserFromGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnbindVnicBody struct {
    +	Req    *types.UnbindVnic         `xml:"urn:vim25 UnbindVnic,omitempty"`
    +	Res    *types.UnbindVnicResponse `xml:"urn:vim25 UnbindVnicResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnbindVnicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnbindVnic(ctx context.Context, r soap.RoundTripper, req *types.UnbindVnic) (*types.UnbindVnicResponse, error) {
    +	var reqBody, resBody UnbindVnicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UninstallHostPatch_TaskBody struct {
    +	Req    *types.UninstallHostPatch_Task         `xml:"urn:vim25 UninstallHostPatch_Task,omitempty"`
    +	Res    *types.UninstallHostPatch_TaskResponse `xml:"urn:vim25 UninstallHostPatch_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UninstallHostPatch_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UninstallHostPatch_Task(ctx context.Context, r soap.RoundTripper, req *types.UninstallHostPatch_Task) (*types.UninstallHostPatch_TaskResponse, error) {
    +	var reqBody, resBody UninstallHostPatch_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UninstallIoFilter_TaskBody struct {
    +	Req    *types.UninstallIoFilter_Task         `xml:"urn:vim25 UninstallIoFilter_Task,omitempty"`
    +	Res    *types.UninstallIoFilter_TaskResponse `xml:"urn:vim25 UninstallIoFilter_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UninstallIoFilter_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UninstallIoFilter_Task(ctx context.Context, r soap.RoundTripper, req *types.UninstallIoFilter_Task) (*types.UninstallIoFilter_TaskResponse, error) {
    +	var reqBody, resBody UninstallIoFilter_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UninstallServiceBody struct {
    +	Req    *types.UninstallService         `xml:"urn:vim25 UninstallService,omitempty"`
    +	Res    *types.UninstallServiceResponse `xml:"urn:vim25 UninstallServiceResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UninstallServiceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UninstallService(ctx context.Context, r soap.RoundTripper, req *types.UninstallService) (*types.UninstallServiceResponse, error) {
    +	var reqBody, resBody UninstallServiceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnmapVmfsVolumeEx_TaskBody struct {
    +	Req    *types.UnmapVmfsVolumeEx_Task         `xml:"urn:vim25 UnmapVmfsVolumeEx_Task,omitempty"`
    +	Res    *types.UnmapVmfsVolumeEx_TaskResponse `xml:"urn:vim25 UnmapVmfsVolumeEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnmapVmfsVolumeEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnmapVmfsVolumeEx_Task(ctx context.Context, r soap.RoundTripper, req *types.UnmapVmfsVolumeEx_Task) (*types.UnmapVmfsVolumeEx_TaskResponse, error) {
    +	var reqBody, resBody UnmapVmfsVolumeEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnmountDiskMapping_TaskBody struct {
    +	Req    *types.UnmountDiskMapping_Task         `xml:"urn:vim25 UnmountDiskMapping_Task,omitempty"`
    +	Res    *types.UnmountDiskMapping_TaskResponse `xml:"urn:vim25 UnmountDiskMapping_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnmountDiskMapping_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnmountDiskMapping_Task(ctx context.Context, r soap.RoundTripper, req *types.UnmountDiskMapping_Task) (*types.UnmountDiskMapping_TaskResponse, error) {
    +	var reqBody, resBody UnmountDiskMapping_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnmountForceMountedVmfsVolumeBody struct {
    +	Req    *types.UnmountForceMountedVmfsVolume         `xml:"urn:vim25 UnmountForceMountedVmfsVolume,omitempty"`
    +	Res    *types.UnmountForceMountedVmfsVolumeResponse `xml:"urn:vim25 UnmountForceMountedVmfsVolumeResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnmountForceMountedVmfsVolumeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnmountForceMountedVmfsVolume(ctx context.Context, r soap.RoundTripper, req *types.UnmountForceMountedVmfsVolume) (*types.UnmountForceMountedVmfsVolumeResponse, error) {
    +	var reqBody, resBody UnmountForceMountedVmfsVolumeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnmountToolsInstallerBody struct {
    +	Req    *types.UnmountToolsInstaller         `xml:"urn:vim25 UnmountToolsInstaller,omitempty"`
    +	Res    *types.UnmountToolsInstallerResponse `xml:"urn:vim25 UnmountToolsInstallerResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnmountToolsInstallerBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnmountToolsInstaller(ctx context.Context, r soap.RoundTripper, req *types.UnmountToolsInstaller) (*types.UnmountToolsInstallerResponse, error) {
    +	var reqBody, resBody UnmountToolsInstallerBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnmountVffsVolumeBody struct {
    +	Req    *types.UnmountVffsVolume         `xml:"urn:vim25 UnmountVffsVolume,omitempty"`
    +	Res    *types.UnmountVffsVolumeResponse `xml:"urn:vim25 UnmountVffsVolumeResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnmountVffsVolumeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnmountVffsVolume(ctx context.Context, r soap.RoundTripper, req *types.UnmountVffsVolume) (*types.UnmountVffsVolumeResponse, error) {
    +	var reqBody, resBody UnmountVffsVolumeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnmountVmfsVolumeBody struct {
    +	Req    *types.UnmountVmfsVolume         `xml:"urn:vim25 UnmountVmfsVolume,omitempty"`
    +	Res    *types.UnmountVmfsVolumeResponse `xml:"urn:vim25 UnmountVmfsVolumeResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnmountVmfsVolumeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnmountVmfsVolume(ctx context.Context, r soap.RoundTripper, req *types.UnmountVmfsVolume) (*types.UnmountVmfsVolumeResponse, error) {
    +	var reqBody, resBody UnmountVmfsVolumeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnmountVmfsVolumeEx_TaskBody struct {
    +	Req    *types.UnmountVmfsVolumeEx_Task         `xml:"urn:vim25 UnmountVmfsVolumeEx_Task,omitempty"`
    +	Res    *types.UnmountVmfsVolumeEx_TaskResponse `xml:"urn:vim25 UnmountVmfsVolumeEx_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnmountVmfsVolumeEx_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnmountVmfsVolumeEx_Task(ctx context.Context, r soap.RoundTripper, req *types.UnmountVmfsVolumeEx_Task) (*types.UnmountVmfsVolumeEx_TaskResponse, error) {
    +	var reqBody, resBody UnmountVmfsVolumeEx_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnregisterAndDestroy_TaskBody struct {
    +	Req    *types.UnregisterAndDestroy_Task         `xml:"urn:vim25 UnregisterAndDestroy_Task,omitempty"`
    +	Res    *types.UnregisterAndDestroy_TaskResponse `xml:"urn:vim25 UnregisterAndDestroy_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnregisterAndDestroy_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnregisterAndDestroy_Task(ctx context.Context, r soap.RoundTripper, req *types.UnregisterAndDestroy_Task) (*types.UnregisterAndDestroy_TaskResponse, error) {
    +	var reqBody, resBody UnregisterAndDestroy_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnregisterExtensionBody struct {
    +	Req    *types.UnregisterExtension         `xml:"urn:vim25 UnregisterExtension,omitempty"`
    +	Res    *types.UnregisterExtensionResponse `xml:"urn:vim25 UnregisterExtensionResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnregisterExtensionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnregisterExtension(ctx context.Context, r soap.RoundTripper, req *types.UnregisterExtension) (*types.UnregisterExtensionResponse, error) {
    +	var reqBody, resBody UnregisterExtensionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnregisterHealthUpdateProviderBody struct {
    +	Req    *types.UnregisterHealthUpdateProvider         `xml:"urn:vim25 UnregisterHealthUpdateProvider,omitempty"`
    +	Res    *types.UnregisterHealthUpdateProviderResponse `xml:"urn:vim25 UnregisterHealthUpdateProviderResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnregisterHealthUpdateProviderBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnregisterHealthUpdateProvider(ctx context.Context, r soap.RoundTripper, req *types.UnregisterHealthUpdateProvider) (*types.UnregisterHealthUpdateProviderResponse, error) {
    +	var reqBody, resBody UnregisterHealthUpdateProviderBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnregisterVMBody struct {
    +	Req    *types.UnregisterVM         `xml:"urn:vim25 UnregisterVM,omitempty"`
    +	Res    *types.UnregisterVMResponse `xml:"urn:vim25 UnregisterVMResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnregisterVMBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnregisterVM(ctx context.Context, r soap.RoundTripper, req *types.UnregisterVM) (*types.UnregisterVMResponse, error) {
    +	var reqBody, resBody UnregisterVMBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateAnswerFile_TaskBody struct {
    +	Req    *types.UpdateAnswerFile_Task         `xml:"urn:vim25 UpdateAnswerFile_Task,omitempty"`
    +	Res    *types.UpdateAnswerFile_TaskResponse `xml:"urn:vim25 UpdateAnswerFile_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateAnswerFile_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateAnswerFile_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateAnswerFile_Task) (*types.UpdateAnswerFile_TaskResponse, error) {
    +	var reqBody, resBody UpdateAnswerFile_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateAssignedLicenseBody struct {
    +	Req    *types.UpdateAssignedLicense         `xml:"urn:vim25 UpdateAssignedLicense,omitempty"`
    +	Res    *types.UpdateAssignedLicenseResponse `xml:"urn:vim25 UpdateAssignedLicenseResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateAssignedLicenseBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateAssignedLicense(ctx context.Context, r soap.RoundTripper, req *types.UpdateAssignedLicense) (*types.UpdateAssignedLicenseResponse, error) {
    +	var reqBody, resBody UpdateAssignedLicenseBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateAuthorizationRoleBody struct {
    +	Req    *types.UpdateAuthorizationRole         `xml:"urn:vim25 UpdateAuthorizationRole,omitempty"`
    +	Res    *types.UpdateAuthorizationRoleResponse `xml:"urn:vim25 UpdateAuthorizationRoleResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateAuthorizationRoleBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateAuthorizationRole(ctx context.Context, r soap.RoundTripper, req *types.UpdateAuthorizationRole) (*types.UpdateAuthorizationRoleResponse, error) {
    +	var reqBody, resBody UpdateAuthorizationRoleBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateBootDeviceBody struct {
    +	Req    *types.UpdateBootDevice         `xml:"urn:vim25 UpdateBootDevice,omitempty"`
    +	Res    *types.UpdateBootDeviceResponse `xml:"urn:vim25 UpdateBootDeviceResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateBootDeviceBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateBootDevice(ctx context.Context, r soap.RoundTripper, req *types.UpdateBootDevice) (*types.UpdateBootDeviceResponse, error) {
    +	var reqBody, resBody UpdateBootDeviceBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateChildResourceConfigurationBody struct {
    +	Req    *types.UpdateChildResourceConfiguration         `xml:"urn:vim25 UpdateChildResourceConfiguration,omitempty"`
    +	Res    *types.UpdateChildResourceConfigurationResponse `xml:"urn:vim25 UpdateChildResourceConfigurationResponse,omitempty"`
    +	Fault_ *soap.Fault                                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateChildResourceConfigurationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateChildResourceConfiguration(ctx context.Context, r soap.RoundTripper, req *types.UpdateChildResourceConfiguration) (*types.UpdateChildResourceConfigurationResponse, error) {
    +	var reqBody, resBody UpdateChildResourceConfigurationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateClusterProfileBody struct {
    +	Req    *types.UpdateClusterProfile         `xml:"urn:vim25 UpdateClusterProfile,omitempty"`
    +	Res    *types.UpdateClusterProfileResponse `xml:"urn:vim25 UpdateClusterProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateClusterProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateClusterProfile(ctx context.Context, r soap.RoundTripper, req *types.UpdateClusterProfile) (*types.UpdateClusterProfileResponse, error) {
    +	var reqBody, resBody UpdateClusterProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateConfigBody struct {
    +	Req    *types.UpdateConfig         `xml:"urn:vim25 UpdateConfig,omitempty"`
    +	Res    *types.UpdateConfigResponse `xml:"urn:vim25 UpdateConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateConfig) (*types.UpdateConfigResponse, error) {
    +	var reqBody, resBody UpdateConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateConsoleIpRouteConfigBody struct {
    +	Req    *types.UpdateConsoleIpRouteConfig         `xml:"urn:vim25 UpdateConsoleIpRouteConfig,omitempty"`
    +	Res    *types.UpdateConsoleIpRouteConfigResponse `xml:"urn:vim25 UpdateConsoleIpRouteConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateConsoleIpRouteConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateConsoleIpRouteConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateConsoleIpRouteConfig) (*types.UpdateConsoleIpRouteConfigResponse, error) {
    +	var reqBody, resBody UpdateConsoleIpRouteConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateCounterLevelMappingBody struct {
    +	Req    *types.UpdateCounterLevelMapping         `xml:"urn:vim25 UpdateCounterLevelMapping,omitempty"`
    +	Res    *types.UpdateCounterLevelMappingResponse `xml:"urn:vim25 UpdateCounterLevelMappingResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateCounterLevelMappingBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateCounterLevelMapping(ctx context.Context, r soap.RoundTripper, req *types.UpdateCounterLevelMapping) (*types.UpdateCounterLevelMappingResponse, error) {
    +	var reqBody, resBody UpdateCounterLevelMappingBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateDVSHealthCheckConfig_TaskBody struct {
    +	Req    *types.UpdateDVSHealthCheckConfig_Task         `xml:"urn:vim25 UpdateDVSHealthCheckConfig_Task,omitempty"`
    +	Res    *types.UpdateDVSHealthCheckConfig_TaskResponse `xml:"urn:vim25 UpdateDVSHealthCheckConfig_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateDVSHealthCheckConfig_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateDVSHealthCheckConfig_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateDVSHealthCheckConfig_Task) (*types.UpdateDVSHealthCheckConfig_TaskResponse, error) {
    +	var reqBody, resBody UpdateDVSHealthCheckConfig_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateDVSLacpGroupConfig_TaskBody struct {
    +	Req    *types.UpdateDVSLacpGroupConfig_Task         `xml:"urn:vim25 UpdateDVSLacpGroupConfig_Task,omitempty"`
    +	Res    *types.UpdateDVSLacpGroupConfig_TaskResponse `xml:"urn:vim25 UpdateDVSLacpGroupConfig_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateDVSLacpGroupConfig_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateDVSLacpGroupConfig_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateDVSLacpGroupConfig_Task) (*types.UpdateDVSLacpGroupConfig_TaskResponse, error) {
    +	var reqBody, resBody UpdateDVSLacpGroupConfig_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateDateTimeBody struct {
    +	Req    *types.UpdateDateTime         `xml:"urn:vim25 UpdateDateTime,omitempty"`
    +	Res    *types.UpdateDateTimeResponse `xml:"urn:vim25 UpdateDateTimeResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateDateTimeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateDateTime(ctx context.Context, r soap.RoundTripper, req *types.UpdateDateTime) (*types.UpdateDateTimeResponse, error) {
    +	var reqBody, resBody UpdateDateTimeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateDateTimeConfigBody struct {
    +	Req    *types.UpdateDateTimeConfig         `xml:"urn:vim25 UpdateDateTimeConfig,omitempty"`
    +	Res    *types.UpdateDateTimeConfigResponse `xml:"urn:vim25 UpdateDateTimeConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateDateTimeConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateDateTimeConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateDateTimeConfig) (*types.UpdateDateTimeConfigResponse, error) {
    +	var reqBody, resBody UpdateDateTimeConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateDefaultPolicyBody struct {
    +	Req    *types.UpdateDefaultPolicy         `xml:"urn:vim25 UpdateDefaultPolicy,omitempty"`
    +	Res    *types.UpdateDefaultPolicyResponse `xml:"urn:vim25 UpdateDefaultPolicyResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateDefaultPolicyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateDefaultPolicy(ctx context.Context, r soap.RoundTripper, req *types.UpdateDefaultPolicy) (*types.UpdateDefaultPolicyResponse, error) {
    +	var reqBody, resBody UpdateDefaultPolicyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateDiskPartitionsBody struct {
    +	Req    *types.UpdateDiskPartitions         `xml:"urn:vim25 UpdateDiskPartitions,omitempty"`
    +	Res    *types.UpdateDiskPartitionsResponse `xml:"urn:vim25 UpdateDiskPartitionsResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateDiskPartitionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateDiskPartitions(ctx context.Context, r soap.RoundTripper, req *types.UpdateDiskPartitions) (*types.UpdateDiskPartitionsResponse, error) {
    +	var reqBody, resBody UpdateDiskPartitionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateDnsConfigBody struct {
    +	Req    *types.UpdateDnsConfig         `xml:"urn:vim25 UpdateDnsConfig,omitempty"`
    +	Res    *types.UpdateDnsConfigResponse `xml:"urn:vim25 UpdateDnsConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateDnsConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateDnsConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateDnsConfig) (*types.UpdateDnsConfigResponse, error) {
    +	var reqBody, resBody UpdateDnsConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateDvsCapabilityBody struct {
    +	Req    *types.UpdateDvsCapability         `xml:"urn:vim25 UpdateDvsCapability,omitempty"`
    +	Res    *types.UpdateDvsCapabilityResponse `xml:"urn:vim25 UpdateDvsCapabilityResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateDvsCapabilityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateDvsCapability(ctx context.Context, r soap.RoundTripper, req *types.UpdateDvsCapability) (*types.UpdateDvsCapabilityResponse, error) {
    +	var reqBody, resBody UpdateDvsCapabilityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateExtensionBody struct {
    +	Req    *types.UpdateExtension         `xml:"urn:vim25 UpdateExtension,omitempty"`
    +	Res    *types.UpdateExtensionResponse `xml:"urn:vim25 UpdateExtensionResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateExtensionBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateExtension(ctx context.Context, r soap.RoundTripper, req *types.UpdateExtension) (*types.UpdateExtensionResponse, error) {
    +	var reqBody, resBody UpdateExtensionBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateFlagsBody struct {
    +	Req    *types.UpdateFlags         `xml:"urn:vim25 UpdateFlags,omitempty"`
    +	Res    *types.UpdateFlagsResponse `xml:"urn:vim25 UpdateFlagsResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateFlagsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateFlags(ctx context.Context, r soap.RoundTripper, req *types.UpdateFlags) (*types.UpdateFlagsResponse, error) {
    +	var reqBody, resBody UpdateFlagsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateGraphicsConfigBody struct {
    +	Req    *types.UpdateGraphicsConfig         `xml:"urn:vim25 UpdateGraphicsConfig,omitempty"`
    +	Res    *types.UpdateGraphicsConfigResponse `xml:"urn:vim25 UpdateGraphicsConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateGraphicsConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateGraphicsConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateGraphicsConfig) (*types.UpdateGraphicsConfigResponse, error) {
    +	var reqBody, resBody UpdateGraphicsConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateHostCustomizations_TaskBody struct {
    +	Req    *types.UpdateHostCustomizations_Task         `xml:"urn:vim25 UpdateHostCustomizations_Task,omitempty"`
    +	Res    *types.UpdateHostCustomizations_TaskResponse `xml:"urn:vim25 UpdateHostCustomizations_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateHostCustomizations_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateHostCustomizations_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateHostCustomizations_Task) (*types.UpdateHostCustomizations_TaskResponse, error) {
    +	var reqBody, resBody UpdateHostCustomizations_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateHostImageAcceptanceLevelBody struct {
    +	Req    *types.UpdateHostImageAcceptanceLevel         `xml:"urn:vim25 UpdateHostImageAcceptanceLevel,omitempty"`
    +	Res    *types.UpdateHostImageAcceptanceLevelResponse `xml:"urn:vim25 UpdateHostImageAcceptanceLevelResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateHostImageAcceptanceLevelBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateHostImageAcceptanceLevel(ctx context.Context, r soap.RoundTripper, req *types.UpdateHostImageAcceptanceLevel) (*types.UpdateHostImageAcceptanceLevelResponse, error) {
    +	var reqBody, resBody UpdateHostImageAcceptanceLevelBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateHostProfileBody struct {
    +	Req    *types.UpdateHostProfile         `xml:"urn:vim25 UpdateHostProfile,omitempty"`
    +	Res    *types.UpdateHostProfileResponse `xml:"urn:vim25 UpdateHostProfileResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateHostProfileBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateHostProfile(ctx context.Context, r soap.RoundTripper, req *types.UpdateHostProfile) (*types.UpdateHostProfileResponse, error) {
    +	var reqBody, resBody UpdateHostProfileBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateHostSpecificationBody struct {
    +	Req    *types.UpdateHostSpecification         `xml:"urn:vim25 UpdateHostSpecification,omitempty"`
    +	Res    *types.UpdateHostSpecificationResponse `xml:"urn:vim25 UpdateHostSpecificationResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateHostSpecificationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateHostSpecification(ctx context.Context, r soap.RoundTripper, req *types.UpdateHostSpecification) (*types.UpdateHostSpecificationResponse, error) {
    +	var reqBody, resBody UpdateHostSpecificationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateHostSubSpecificationBody struct {
    +	Req    *types.UpdateHostSubSpecification         `xml:"urn:vim25 UpdateHostSubSpecification,omitempty"`
    +	Res    *types.UpdateHostSubSpecificationResponse `xml:"urn:vim25 UpdateHostSubSpecificationResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateHostSubSpecificationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateHostSubSpecification(ctx context.Context, r soap.RoundTripper, req *types.UpdateHostSubSpecification) (*types.UpdateHostSubSpecificationResponse, error) {
    +	var reqBody, resBody UpdateHostSubSpecificationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateInternetScsiAdvancedOptionsBody struct {
    +	Req    *types.UpdateInternetScsiAdvancedOptions         `xml:"urn:vim25 UpdateInternetScsiAdvancedOptions,omitempty"`
    +	Res    *types.UpdateInternetScsiAdvancedOptionsResponse `xml:"urn:vim25 UpdateInternetScsiAdvancedOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateInternetScsiAdvancedOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateInternetScsiAdvancedOptions(ctx context.Context, r soap.RoundTripper, req *types.UpdateInternetScsiAdvancedOptions) (*types.UpdateInternetScsiAdvancedOptionsResponse, error) {
    +	var reqBody, resBody UpdateInternetScsiAdvancedOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateInternetScsiAliasBody struct {
    +	Req    *types.UpdateInternetScsiAlias         `xml:"urn:vim25 UpdateInternetScsiAlias,omitempty"`
    +	Res    *types.UpdateInternetScsiAliasResponse `xml:"urn:vim25 UpdateInternetScsiAliasResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateInternetScsiAliasBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateInternetScsiAlias(ctx context.Context, r soap.RoundTripper, req *types.UpdateInternetScsiAlias) (*types.UpdateInternetScsiAliasResponse, error) {
    +	var reqBody, resBody UpdateInternetScsiAliasBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateInternetScsiAuthenticationPropertiesBody struct {
    +	Req    *types.UpdateInternetScsiAuthenticationProperties         `xml:"urn:vim25 UpdateInternetScsiAuthenticationProperties,omitempty"`
    +	Res    *types.UpdateInternetScsiAuthenticationPropertiesResponse `xml:"urn:vim25 UpdateInternetScsiAuthenticationPropertiesResponse,omitempty"`
    +	Fault_ *soap.Fault                                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateInternetScsiAuthenticationPropertiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateInternetScsiAuthenticationProperties(ctx context.Context, r soap.RoundTripper, req *types.UpdateInternetScsiAuthenticationProperties) (*types.UpdateInternetScsiAuthenticationPropertiesResponse, error) {
    +	var reqBody, resBody UpdateInternetScsiAuthenticationPropertiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateInternetScsiDigestPropertiesBody struct {
    +	Req    *types.UpdateInternetScsiDigestProperties         `xml:"urn:vim25 UpdateInternetScsiDigestProperties,omitempty"`
    +	Res    *types.UpdateInternetScsiDigestPropertiesResponse `xml:"urn:vim25 UpdateInternetScsiDigestPropertiesResponse,omitempty"`
    +	Fault_ *soap.Fault                                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateInternetScsiDigestPropertiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateInternetScsiDigestProperties(ctx context.Context, r soap.RoundTripper, req *types.UpdateInternetScsiDigestProperties) (*types.UpdateInternetScsiDigestPropertiesResponse, error) {
    +	var reqBody, resBody UpdateInternetScsiDigestPropertiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateInternetScsiDiscoveryPropertiesBody struct {
    +	Req    *types.UpdateInternetScsiDiscoveryProperties         `xml:"urn:vim25 UpdateInternetScsiDiscoveryProperties,omitempty"`
    +	Res    *types.UpdateInternetScsiDiscoveryPropertiesResponse `xml:"urn:vim25 UpdateInternetScsiDiscoveryPropertiesResponse,omitempty"`
    +	Fault_ *soap.Fault                                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateInternetScsiDiscoveryPropertiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateInternetScsiDiscoveryProperties(ctx context.Context, r soap.RoundTripper, req *types.UpdateInternetScsiDiscoveryProperties) (*types.UpdateInternetScsiDiscoveryPropertiesResponse, error) {
    +	var reqBody, resBody UpdateInternetScsiDiscoveryPropertiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateInternetScsiIPPropertiesBody struct {
    +	Req    *types.UpdateInternetScsiIPProperties         `xml:"urn:vim25 UpdateInternetScsiIPProperties,omitempty"`
    +	Res    *types.UpdateInternetScsiIPPropertiesResponse `xml:"urn:vim25 UpdateInternetScsiIPPropertiesResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateInternetScsiIPPropertiesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateInternetScsiIPProperties(ctx context.Context, r soap.RoundTripper, req *types.UpdateInternetScsiIPProperties) (*types.UpdateInternetScsiIPPropertiesResponse, error) {
    +	var reqBody, resBody UpdateInternetScsiIPPropertiesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateInternetScsiNameBody struct {
    +	Req    *types.UpdateInternetScsiName         `xml:"urn:vim25 UpdateInternetScsiName,omitempty"`
    +	Res    *types.UpdateInternetScsiNameResponse `xml:"urn:vim25 UpdateInternetScsiNameResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateInternetScsiNameBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateInternetScsiName(ctx context.Context, r soap.RoundTripper, req *types.UpdateInternetScsiName) (*types.UpdateInternetScsiNameResponse, error) {
    +	var reqBody, resBody UpdateInternetScsiNameBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateIpConfigBody struct {
    +	Req    *types.UpdateIpConfig         `xml:"urn:vim25 UpdateIpConfig,omitempty"`
    +	Res    *types.UpdateIpConfigResponse `xml:"urn:vim25 UpdateIpConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateIpConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateIpConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateIpConfig) (*types.UpdateIpConfigResponse, error) {
    +	var reqBody, resBody UpdateIpConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateIpPoolBody struct {
    +	Req    *types.UpdateIpPool         `xml:"urn:vim25 UpdateIpPool,omitempty"`
    +	Res    *types.UpdateIpPoolResponse `xml:"urn:vim25 UpdateIpPoolResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateIpPoolBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateIpPool(ctx context.Context, r soap.RoundTripper, req *types.UpdateIpPool) (*types.UpdateIpPoolResponse, error) {
    +	var reqBody, resBody UpdateIpPoolBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateIpRouteConfigBody struct {
    +	Req    *types.UpdateIpRouteConfig         `xml:"urn:vim25 UpdateIpRouteConfig,omitempty"`
    +	Res    *types.UpdateIpRouteConfigResponse `xml:"urn:vim25 UpdateIpRouteConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateIpRouteConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateIpRouteConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateIpRouteConfig) (*types.UpdateIpRouteConfigResponse, error) {
    +	var reqBody, resBody UpdateIpRouteConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateIpRouteTableConfigBody struct {
    +	Req    *types.UpdateIpRouteTableConfig         `xml:"urn:vim25 UpdateIpRouteTableConfig,omitempty"`
    +	Res    *types.UpdateIpRouteTableConfigResponse `xml:"urn:vim25 UpdateIpRouteTableConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateIpRouteTableConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateIpRouteTableConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateIpRouteTableConfig) (*types.UpdateIpRouteTableConfigResponse, error) {
    +	var reqBody, resBody UpdateIpRouteTableConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateIpmiBody struct {
    +	Req    *types.UpdateIpmi         `xml:"urn:vim25 UpdateIpmi,omitempty"`
    +	Res    *types.UpdateIpmiResponse `xml:"urn:vim25 UpdateIpmiResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateIpmiBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateIpmi(ctx context.Context, r soap.RoundTripper, req *types.UpdateIpmi) (*types.UpdateIpmiResponse, error) {
    +	var reqBody, resBody UpdateIpmiBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateKmipServerBody struct {
    +	Req    *types.UpdateKmipServer         `xml:"urn:vim25 UpdateKmipServer,omitempty"`
    +	Res    *types.UpdateKmipServerResponse `xml:"urn:vim25 UpdateKmipServerResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateKmipServerBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateKmipServer(ctx context.Context, r soap.RoundTripper, req *types.UpdateKmipServer) (*types.UpdateKmipServerResponse, error) {
    +	var reqBody, resBody UpdateKmipServerBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateKmsSignedCsrClientCertBody struct {
    +	Req    *types.UpdateKmsSignedCsrClientCert         `xml:"urn:vim25 UpdateKmsSignedCsrClientCert,omitempty"`
    +	Res    *types.UpdateKmsSignedCsrClientCertResponse `xml:"urn:vim25 UpdateKmsSignedCsrClientCertResponse,omitempty"`
    +	Fault_ *soap.Fault                                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateKmsSignedCsrClientCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateKmsSignedCsrClientCert(ctx context.Context, r soap.RoundTripper, req *types.UpdateKmsSignedCsrClientCert) (*types.UpdateKmsSignedCsrClientCertResponse, error) {
    +	var reqBody, resBody UpdateKmsSignedCsrClientCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateLicenseBody struct {
    +	Req    *types.UpdateLicense         `xml:"urn:vim25 UpdateLicense,omitempty"`
    +	Res    *types.UpdateLicenseResponse `xml:"urn:vim25 UpdateLicenseResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateLicenseBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateLicense(ctx context.Context, r soap.RoundTripper, req *types.UpdateLicense) (*types.UpdateLicenseResponse, error) {
    +	var reqBody, resBody UpdateLicenseBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateLicenseLabelBody struct {
    +	Req    *types.UpdateLicenseLabel         `xml:"urn:vim25 UpdateLicenseLabel,omitempty"`
    +	Res    *types.UpdateLicenseLabelResponse `xml:"urn:vim25 UpdateLicenseLabelResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateLicenseLabelBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateLicenseLabel(ctx context.Context, r soap.RoundTripper, req *types.UpdateLicenseLabel) (*types.UpdateLicenseLabelResponse, error) {
    +	var reqBody, resBody UpdateLicenseLabelBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateLinkedChildrenBody struct {
    +	Req    *types.UpdateLinkedChildren         `xml:"urn:vim25 UpdateLinkedChildren,omitempty"`
    +	Res    *types.UpdateLinkedChildrenResponse `xml:"urn:vim25 UpdateLinkedChildrenResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateLinkedChildrenBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateLinkedChildren(ctx context.Context, r soap.RoundTripper, req *types.UpdateLinkedChildren) (*types.UpdateLinkedChildrenResponse, error) {
    +	var reqBody, resBody UpdateLinkedChildrenBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateLocalSwapDatastoreBody struct {
    +	Req    *types.UpdateLocalSwapDatastore         `xml:"urn:vim25 UpdateLocalSwapDatastore,omitempty"`
    +	Res    *types.UpdateLocalSwapDatastoreResponse `xml:"urn:vim25 UpdateLocalSwapDatastoreResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateLocalSwapDatastoreBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateLocalSwapDatastore(ctx context.Context, r soap.RoundTripper, req *types.UpdateLocalSwapDatastore) (*types.UpdateLocalSwapDatastoreResponse, error) {
    +	var reqBody, resBody UpdateLocalSwapDatastoreBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateLockdownExceptionsBody struct {
    +	Req    *types.UpdateLockdownExceptions         `xml:"urn:vim25 UpdateLockdownExceptions,omitempty"`
    +	Res    *types.UpdateLockdownExceptionsResponse `xml:"urn:vim25 UpdateLockdownExceptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateLockdownExceptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateLockdownExceptions(ctx context.Context, r soap.RoundTripper, req *types.UpdateLockdownExceptions) (*types.UpdateLockdownExceptionsResponse, error) {
    +	var reqBody, resBody UpdateLockdownExceptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateModuleOptionStringBody struct {
    +	Req    *types.UpdateModuleOptionString         `xml:"urn:vim25 UpdateModuleOptionString,omitempty"`
    +	Res    *types.UpdateModuleOptionStringResponse `xml:"urn:vim25 UpdateModuleOptionStringResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateModuleOptionStringBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateModuleOptionString(ctx context.Context, r soap.RoundTripper, req *types.UpdateModuleOptionString) (*types.UpdateModuleOptionStringResponse, error) {
    +	var reqBody, resBody UpdateModuleOptionStringBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateNetworkConfigBody struct {
    +	Req    *types.UpdateNetworkConfig         `xml:"urn:vim25 UpdateNetworkConfig,omitempty"`
    +	Res    *types.UpdateNetworkConfigResponse `xml:"urn:vim25 UpdateNetworkConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateNetworkConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateNetworkConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateNetworkConfig) (*types.UpdateNetworkConfigResponse, error) {
    +	var reqBody, resBody UpdateNetworkConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateNetworkResourcePoolBody struct {
    +	Req    *types.UpdateNetworkResourcePool         `xml:"urn:vim25 UpdateNetworkResourcePool,omitempty"`
    +	Res    *types.UpdateNetworkResourcePoolResponse `xml:"urn:vim25 UpdateNetworkResourcePoolResponse,omitempty"`
    +	Fault_ *soap.Fault                              `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateNetworkResourcePoolBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateNetworkResourcePool(ctx context.Context, r soap.RoundTripper, req *types.UpdateNetworkResourcePool) (*types.UpdateNetworkResourcePoolResponse, error) {
    +	var reqBody, resBody UpdateNetworkResourcePoolBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateOptionsBody struct {
    +	Req    *types.UpdateOptions         `xml:"urn:vim25 UpdateOptions,omitempty"`
    +	Res    *types.UpdateOptionsResponse `xml:"urn:vim25 UpdateOptionsResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateOptionsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateOptions(ctx context.Context, r soap.RoundTripper, req *types.UpdateOptions) (*types.UpdateOptionsResponse, error) {
    +	var reqBody, resBody UpdateOptionsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdatePassthruConfigBody struct {
    +	Req    *types.UpdatePassthruConfig         `xml:"urn:vim25 UpdatePassthruConfig,omitempty"`
    +	Res    *types.UpdatePassthruConfigResponse `xml:"urn:vim25 UpdatePassthruConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdatePassthruConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdatePassthruConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdatePassthruConfig) (*types.UpdatePassthruConfigResponse, error) {
    +	var reqBody, resBody UpdatePassthruConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdatePerfIntervalBody struct {
    +	Req    *types.UpdatePerfInterval         `xml:"urn:vim25 UpdatePerfInterval,omitempty"`
    +	Res    *types.UpdatePerfIntervalResponse `xml:"urn:vim25 UpdatePerfIntervalResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdatePerfIntervalBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdatePerfInterval(ctx context.Context, r soap.RoundTripper, req *types.UpdatePerfInterval) (*types.UpdatePerfIntervalResponse, error) {
    +	var reqBody, resBody UpdatePerfIntervalBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdatePhysicalNicLinkSpeedBody struct {
    +	Req    *types.UpdatePhysicalNicLinkSpeed         `xml:"urn:vim25 UpdatePhysicalNicLinkSpeed,omitempty"`
    +	Res    *types.UpdatePhysicalNicLinkSpeedResponse `xml:"urn:vim25 UpdatePhysicalNicLinkSpeedResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdatePhysicalNicLinkSpeedBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdatePhysicalNicLinkSpeed(ctx context.Context, r soap.RoundTripper, req *types.UpdatePhysicalNicLinkSpeed) (*types.UpdatePhysicalNicLinkSpeedResponse, error) {
    +	var reqBody, resBody UpdatePhysicalNicLinkSpeedBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdatePortGroupBody struct {
    +	Req    *types.UpdatePortGroup         `xml:"urn:vim25 UpdatePortGroup,omitempty"`
    +	Res    *types.UpdatePortGroupResponse `xml:"urn:vim25 UpdatePortGroupResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdatePortGroupBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdatePortGroup(ctx context.Context, r soap.RoundTripper, req *types.UpdatePortGroup) (*types.UpdatePortGroupResponse, error) {
    +	var reqBody, resBody UpdatePortGroupBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateProgressBody struct {
    +	Req    *types.UpdateProgress         `xml:"urn:vim25 UpdateProgress,omitempty"`
    +	Res    *types.UpdateProgressResponse `xml:"urn:vim25 UpdateProgressResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateProgressBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateProgress(ctx context.Context, r soap.RoundTripper, req *types.UpdateProgress) (*types.UpdateProgressResponse, error) {
    +	var reqBody, resBody UpdateProgressBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateReferenceHostBody struct {
    +	Req    *types.UpdateReferenceHost         `xml:"urn:vim25 UpdateReferenceHost,omitempty"`
    +	Res    *types.UpdateReferenceHostResponse `xml:"urn:vim25 UpdateReferenceHostResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateReferenceHostBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateReferenceHost(ctx context.Context, r soap.RoundTripper, req *types.UpdateReferenceHost) (*types.UpdateReferenceHostResponse, error) {
    +	var reqBody, resBody UpdateReferenceHostBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateRulesetBody struct {
    +	Req    *types.UpdateRuleset         `xml:"urn:vim25 UpdateRuleset,omitempty"`
    +	Res    *types.UpdateRulesetResponse `xml:"urn:vim25 UpdateRulesetResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateRulesetBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateRuleset(ctx context.Context, r soap.RoundTripper, req *types.UpdateRuleset) (*types.UpdateRulesetResponse, error) {
    +	var reqBody, resBody UpdateRulesetBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateScsiLunDisplayNameBody struct {
    +	Req    *types.UpdateScsiLunDisplayName         `xml:"urn:vim25 UpdateScsiLunDisplayName,omitempty"`
    +	Res    *types.UpdateScsiLunDisplayNameResponse `xml:"urn:vim25 UpdateScsiLunDisplayNameResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateScsiLunDisplayNameBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateScsiLunDisplayName(ctx context.Context, r soap.RoundTripper, req *types.UpdateScsiLunDisplayName) (*types.UpdateScsiLunDisplayNameResponse, error) {
    +	var reqBody, resBody UpdateScsiLunDisplayNameBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateSelfSignedClientCertBody struct {
    +	Req    *types.UpdateSelfSignedClientCert         `xml:"urn:vim25 UpdateSelfSignedClientCert,omitempty"`
    +	Res    *types.UpdateSelfSignedClientCertResponse `xml:"urn:vim25 UpdateSelfSignedClientCertResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateSelfSignedClientCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateSelfSignedClientCert(ctx context.Context, r soap.RoundTripper, req *types.UpdateSelfSignedClientCert) (*types.UpdateSelfSignedClientCertResponse, error) {
    +	var reqBody, resBody UpdateSelfSignedClientCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateServiceConsoleVirtualNicBody struct {
    +	Req    *types.UpdateServiceConsoleVirtualNic         `xml:"urn:vim25 UpdateServiceConsoleVirtualNic,omitempty"`
    +	Res    *types.UpdateServiceConsoleVirtualNicResponse `xml:"urn:vim25 UpdateServiceConsoleVirtualNicResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateServiceConsoleVirtualNicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateServiceConsoleVirtualNic(ctx context.Context, r soap.RoundTripper, req *types.UpdateServiceConsoleVirtualNic) (*types.UpdateServiceConsoleVirtualNicResponse, error) {
    +	var reqBody, resBody UpdateServiceConsoleVirtualNicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateServiceMessageBody struct {
    +	Req    *types.UpdateServiceMessage         `xml:"urn:vim25 UpdateServiceMessage,omitempty"`
    +	Res    *types.UpdateServiceMessageResponse `xml:"urn:vim25 UpdateServiceMessageResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateServiceMessageBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateServiceMessage(ctx context.Context, r soap.RoundTripper, req *types.UpdateServiceMessage) (*types.UpdateServiceMessageResponse, error) {
    +	var reqBody, resBody UpdateServiceMessageBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateServicePolicyBody struct {
    +	Req    *types.UpdateServicePolicy         `xml:"urn:vim25 UpdateServicePolicy,omitempty"`
    +	Res    *types.UpdateServicePolicyResponse `xml:"urn:vim25 UpdateServicePolicyResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateServicePolicyBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateServicePolicy(ctx context.Context, r soap.RoundTripper, req *types.UpdateServicePolicy) (*types.UpdateServicePolicyResponse, error) {
    +	var reqBody, resBody UpdateServicePolicyBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateSoftwareInternetScsiEnabledBody struct {
    +	Req    *types.UpdateSoftwareInternetScsiEnabled         `xml:"urn:vim25 UpdateSoftwareInternetScsiEnabled,omitempty"`
    +	Res    *types.UpdateSoftwareInternetScsiEnabledResponse `xml:"urn:vim25 UpdateSoftwareInternetScsiEnabledResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateSoftwareInternetScsiEnabledBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateSoftwareInternetScsiEnabled(ctx context.Context, r soap.RoundTripper, req *types.UpdateSoftwareInternetScsiEnabled) (*types.UpdateSoftwareInternetScsiEnabledResponse, error) {
    +	var reqBody, resBody UpdateSoftwareInternetScsiEnabledBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateSystemResourcesBody struct {
    +	Req    *types.UpdateSystemResources         `xml:"urn:vim25 UpdateSystemResources,omitempty"`
    +	Res    *types.UpdateSystemResourcesResponse `xml:"urn:vim25 UpdateSystemResourcesResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateSystemResourcesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateSystemResources(ctx context.Context, r soap.RoundTripper, req *types.UpdateSystemResources) (*types.UpdateSystemResourcesResponse, error) {
    +	var reqBody, resBody UpdateSystemResourcesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateSystemSwapConfigurationBody struct {
    +	Req    *types.UpdateSystemSwapConfiguration         `xml:"urn:vim25 UpdateSystemSwapConfiguration,omitempty"`
    +	Res    *types.UpdateSystemSwapConfigurationResponse `xml:"urn:vim25 UpdateSystemSwapConfigurationResponse,omitempty"`
    +	Fault_ *soap.Fault                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateSystemSwapConfigurationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateSystemSwapConfiguration(ctx context.Context, r soap.RoundTripper, req *types.UpdateSystemSwapConfiguration) (*types.UpdateSystemSwapConfigurationResponse, error) {
    +	var reqBody, resBody UpdateSystemSwapConfigurationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateSystemUsersBody struct {
    +	Req    *types.UpdateSystemUsers         `xml:"urn:vim25 UpdateSystemUsers,omitempty"`
    +	Res    *types.UpdateSystemUsersResponse `xml:"urn:vim25 UpdateSystemUsersResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateSystemUsersBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateSystemUsers(ctx context.Context, r soap.RoundTripper, req *types.UpdateSystemUsers) (*types.UpdateSystemUsersResponse, error) {
    +	var reqBody, resBody UpdateSystemUsersBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateUserBody struct {
    +	Req    *types.UpdateUser         `xml:"urn:vim25 UpdateUser,omitempty"`
    +	Res    *types.UpdateUserResponse `xml:"urn:vim25 UpdateUserResponse,omitempty"`
    +	Fault_ *soap.Fault               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateUserBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateUser(ctx context.Context, r soap.RoundTripper, req *types.UpdateUser) (*types.UpdateUserResponse, error) {
    +	var reqBody, resBody UpdateUserBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVAppConfigBody struct {
    +	Req    *types.UpdateVAppConfig         `xml:"urn:vim25 UpdateVAppConfig,omitempty"`
    +	Res    *types.UpdateVAppConfigResponse `xml:"urn:vim25 UpdateVAppConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVAppConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVAppConfig(ctx context.Context, r soap.RoundTripper, req *types.UpdateVAppConfig) (*types.UpdateVAppConfigResponse, error) {
    +	var reqBody, resBody UpdateVAppConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVStorageInfrastructureObjectPolicy_TaskBody struct {
    +	Req    *types.UpdateVStorageInfrastructureObjectPolicy_Task         `xml:"urn:vim25 UpdateVStorageInfrastructureObjectPolicy_Task,omitempty"`
    +	Res    *types.UpdateVStorageInfrastructureObjectPolicy_TaskResponse `xml:"urn:vim25 UpdateVStorageInfrastructureObjectPolicy_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVStorageInfrastructureObjectPolicy_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVStorageInfrastructureObjectPolicy_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateVStorageInfrastructureObjectPolicy_Task) (*types.UpdateVStorageInfrastructureObjectPolicy_TaskResponse, error) {
    +	var reqBody, resBody UpdateVStorageInfrastructureObjectPolicy_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVStorageObjectPolicy_TaskBody struct {
    +	Req    *types.UpdateVStorageObjectPolicy_Task         `xml:"urn:vim25 UpdateVStorageObjectPolicy_Task,omitempty"`
    +	Res    *types.UpdateVStorageObjectPolicy_TaskResponse `xml:"urn:vim25 UpdateVStorageObjectPolicy_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVStorageObjectPolicy_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVStorageObjectPolicy_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateVStorageObjectPolicy_Task) (*types.UpdateVStorageObjectPolicy_TaskResponse, error) {
    +	var reqBody, resBody UpdateVStorageObjectPolicy_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVVolVirtualMachineFiles_TaskBody struct {
    +	Req    *types.UpdateVVolVirtualMachineFiles_Task         `xml:"urn:vim25 UpdateVVolVirtualMachineFiles_Task,omitempty"`
    +	Res    *types.UpdateVVolVirtualMachineFiles_TaskResponse `xml:"urn:vim25 UpdateVVolVirtualMachineFiles_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVVolVirtualMachineFiles_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVVolVirtualMachineFiles_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateVVolVirtualMachineFiles_Task) (*types.UpdateVVolVirtualMachineFiles_TaskResponse, error) {
    +	var reqBody, resBody UpdateVVolVirtualMachineFiles_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVirtualMachineFiles_TaskBody struct {
    +	Req    *types.UpdateVirtualMachineFiles_Task         `xml:"urn:vim25 UpdateVirtualMachineFiles_Task,omitempty"`
    +	Res    *types.UpdateVirtualMachineFiles_TaskResponse `xml:"urn:vim25 UpdateVirtualMachineFiles_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVirtualMachineFiles_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVirtualMachineFiles_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateVirtualMachineFiles_Task) (*types.UpdateVirtualMachineFiles_TaskResponse, error) {
    +	var reqBody, resBody UpdateVirtualMachineFiles_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVirtualNicBody struct {
    +	Req    *types.UpdateVirtualNic         `xml:"urn:vim25 UpdateVirtualNic,omitempty"`
    +	Res    *types.UpdateVirtualNicResponse `xml:"urn:vim25 UpdateVirtualNicResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVirtualNicBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVirtualNic(ctx context.Context, r soap.RoundTripper, req *types.UpdateVirtualNic) (*types.UpdateVirtualNicResponse, error) {
    +	var reqBody, resBody UpdateVirtualNicBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVirtualSwitchBody struct {
    +	Req    *types.UpdateVirtualSwitch         `xml:"urn:vim25 UpdateVirtualSwitch,omitempty"`
    +	Res    *types.UpdateVirtualSwitchResponse `xml:"urn:vim25 UpdateVirtualSwitchResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVirtualSwitchBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVirtualSwitch(ctx context.Context, r soap.RoundTripper, req *types.UpdateVirtualSwitch) (*types.UpdateVirtualSwitchResponse, error) {
    +	var reqBody, resBody UpdateVirtualSwitchBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVmfsUnmapBandwidthBody struct {
    +	Req    *types.UpdateVmfsUnmapBandwidth         `xml:"urn:vim25 UpdateVmfsUnmapBandwidth,omitempty"`
    +	Res    *types.UpdateVmfsUnmapBandwidthResponse `xml:"urn:vim25 UpdateVmfsUnmapBandwidthResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVmfsUnmapBandwidthBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVmfsUnmapBandwidth(ctx context.Context, r soap.RoundTripper, req *types.UpdateVmfsUnmapBandwidth) (*types.UpdateVmfsUnmapBandwidthResponse, error) {
    +	var reqBody, resBody UpdateVmfsUnmapBandwidthBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVmfsUnmapPriorityBody struct {
    +	Req    *types.UpdateVmfsUnmapPriority         `xml:"urn:vim25 UpdateVmfsUnmapPriority,omitempty"`
    +	Res    *types.UpdateVmfsUnmapPriorityResponse `xml:"urn:vim25 UpdateVmfsUnmapPriorityResponse,omitempty"`
    +	Fault_ *soap.Fault                            `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVmfsUnmapPriorityBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVmfsUnmapPriority(ctx context.Context, r soap.RoundTripper, req *types.UpdateVmfsUnmapPriority) (*types.UpdateVmfsUnmapPriorityResponse, error) {
    +	var reqBody, resBody UpdateVmfsUnmapPriorityBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpdateVsan_TaskBody struct {
    +	Req    *types.UpdateVsan_Task         `xml:"urn:vim25 UpdateVsan_Task,omitempty"`
    +	Res    *types.UpdateVsan_TaskResponse `xml:"urn:vim25 UpdateVsan_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpdateVsan_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpdateVsan_Task(ctx context.Context, r soap.RoundTripper, req *types.UpdateVsan_Task) (*types.UpdateVsan_TaskResponse, error) {
    +	var reqBody, resBody UpdateVsan_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpgradeIoFilter_TaskBody struct {
    +	Req    *types.UpgradeIoFilter_Task         `xml:"urn:vim25 UpgradeIoFilter_Task,omitempty"`
    +	Res    *types.UpgradeIoFilter_TaskResponse `xml:"urn:vim25 UpgradeIoFilter_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpgradeIoFilter_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpgradeIoFilter_Task(ctx context.Context, r soap.RoundTripper, req *types.UpgradeIoFilter_Task) (*types.UpgradeIoFilter_TaskResponse, error) {
    +	var reqBody, resBody UpgradeIoFilter_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpgradeTools_TaskBody struct {
    +	Req    *types.UpgradeTools_Task         `xml:"urn:vim25 UpgradeTools_Task,omitempty"`
    +	Res    *types.UpgradeTools_TaskResponse `xml:"urn:vim25 UpgradeTools_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpgradeTools_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpgradeTools_Task(ctx context.Context, r soap.RoundTripper, req *types.UpgradeTools_Task) (*types.UpgradeTools_TaskResponse, error) {
    +	var reqBody, resBody UpgradeTools_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpgradeVM_TaskBody struct {
    +	Req    *types.UpgradeVM_Task         `xml:"urn:vim25 UpgradeVM_Task,omitempty"`
    +	Res    *types.UpgradeVM_TaskResponse `xml:"urn:vim25 UpgradeVM_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpgradeVM_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpgradeVM_Task(ctx context.Context, r soap.RoundTripper, req *types.UpgradeVM_Task) (*types.UpgradeVM_TaskResponse, error) {
    +	var reqBody, resBody UpgradeVM_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpgradeVmLayoutBody struct {
    +	Req    *types.UpgradeVmLayout         `xml:"urn:vim25 UpgradeVmLayout,omitempty"`
    +	Res    *types.UpgradeVmLayoutResponse `xml:"urn:vim25 UpgradeVmLayoutResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpgradeVmLayoutBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpgradeVmLayout(ctx context.Context, r soap.RoundTripper, req *types.UpgradeVmLayout) (*types.UpgradeVmLayoutResponse, error) {
    +	var reqBody, resBody UpgradeVmLayoutBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpgradeVmfsBody struct {
    +	Req    *types.UpgradeVmfs         `xml:"urn:vim25 UpgradeVmfs,omitempty"`
    +	Res    *types.UpgradeVmfsResponse `xml:"urn:vim25 UpgradeVmfsResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpgradeVmfsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpgradeVmfs(ctx context.Context, r soap.RoundTripper, req *types.UpgradeVmfs) (*types.UpgradeVmfsResponse, error) {
    +	var reqBody, resBody UpgradeVmfsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UpgradeVsanObjectsBody struct {
    +	Req    *types.UpgradeVsanObjects         `xml:"urn:vim25 UpgradeVsanObjects,omitempty"`
    +	Res    *types.UpgradeVsanObjectsResponse `xml:"urn:vim25 UpgradeVsanObjectsResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UpgradeVsanObjectsBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UpgradeVsanObjects(ctx context.Context, r soap.RoundTripper, req *types.UpgradeVsanObjects) (*types.UpgradeVsanObjectsResponse, error) {
    +	var reqBody, resBody UpgradeVsanObjectsBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UploadClientCertBody struct {
    +	Req    *types.UploadClientCert         `xml:"urn:vim25 UploadClientCert,omitempty"`
    +	Res    *types.UploadClientCertResponse `xml:"urn:vim25 UploadClientCertResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UploadClientCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UploadClientCert(ctx context.Context, r soap.RoundTripper, req *types.UploadClientCert) (*types.UploadClientCertResponse, error) {
    +	var reqBody, resBody UploadClientCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UploadKmipServerCertBody struct {
    +	Req    *types.UploadKmipServerCert         `xml:"urn:vim25 UploadKmipServerCert,omitempty"`
    +	Res    *types.UploadKmipServerCertResponse `xml:"urn:vim25 UploadKmipServerCertResponse,omitempty"`
    +	Fault_ *soap.Fault                         `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UploadKmipServerCertBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UploadKmipServerCert(ctx context.Context, r soap.RoundTripper, req *types.UploadKmipServerCert) (*types.UploadKmipServerCertResponse, error) {
    +	var reqBody, resBody UploadKmipServerCertBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type VStorageObjectCreateSnapshot_TaskBody struct {
    +	Req    *types.VStorageObjectCreateSnapshot_Task         `xml:"urn:vim25 VStorageObjectCreateSnapshot_Task,omitempty"`
    +	Res    *types.VStorageObjectCreateSnapshot_TaskResponse `xml:"urn:vim25 VStorageObjectCreateSnapshot_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *VStorageObjectCreateSnapshot_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func VStorageObjectCreateSnapshot_Task(ctx context.Context, r soap.RoundTripper, req *types.VStorageObjectCreateSnapshot_Task) (*types.VStorageObjectCreateSnapshot_TaskResponse, error) {
    +	var reqBody, resBody VStorageObjectCreateSnapshot_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ValidateCredentialsInGuestBody struct {
    +	Req    *types.ValidateCredentialsInGuest         `xml:"urn:vim25 ValidateCredentialsInGuest,omitempty"`
    +	Res    *types.ValidateCredentialsInGuestResponse `xml:"urn:vim25 ValidateCredentialsInGuestResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ValidateCredentialsInGuestBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ValidateCredentialsInGuest(ctx context.Context, r soap.RoundTripper, req *types.ValidateCredentialsInGuest) (*types.ValidateCredentialsInGuestResponse, error) {
    +	var reqBody, resBody ValidateCredentialsInGuestBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ValidateHostBody struct {
    +	Req    *types.ValidateHost         `xml:"urn:vim25 ValidateHost,omitempty"`
    +	Res    *types.ValidateHostResponse `xml:"urn:vim25 ValidateHostResponse,omitempty"`
    +	Fault_ *soap.Fault                 `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ValidateHostBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ValidateHost(ctx context.Context, r soap.RoundTripper, req *types.ValidateHost) (*types.ValidateHostResponse, error) {
    +	var reqBody, resBody ValidateHostBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ValidateHostProfileComposition_TaskBody struct {
    +	Req    *types.ValidateHostProfileComposition_Task         `xml:"urn:vim25 ValidateHostProfileComposition_Task,omitempty"`
    +	Res    *types.ValidateHostProfileComposition_TaskResponse `xml:"urn:vim25 ValidateHostProfileComposition_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ValidateHostProfileComposition_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ValidateHostProfileComposition_Task(ctx context.Context, r soap.RoundTripper, req *types.ValidateHostProfileComposition_Task) (*types.ValidateHostProfileComposition_TaskResponse, error) {
    +	var reqBody, resBody ValidateHostProfileComposition_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ValidateMigrationBody struct {
    +	Req    *types.ValidateMigration         `xml:"urn:vim25 ValidateMigration,omitempty"`
    +	Res    *types.ValidateMigrationResponse `xml:"urn:vim25 ValidateMigrationResponse,omitempty"`
    +	Fault_ *soap.Fault                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ValidateMigrationBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ValidateMigration(ctx context.Context, r soap.RoundTripper, req *types.ValidateMigration) (*types.ValidateMigrationResponse, error) {
    +	var reqBody, resBody ValidateMigrationBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ValidateStoragePodConfigBody struct {
    +	Req    *types.ValidateStoragePodConfig         `xml:"urn:vim25 ValidateStoragePodConfig,omitempty"`
    +	Res    *types.ValidateStoragePodConfigResponse `xml:"urn:vim25 ValidateStoragePodConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ValidateStoragePodConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ValidateStoragePodConfig(ctx context.Context, r soap.RoundTripper, req *types.ValidateStoragePodConfig) (*types.ValidateStoragePodConfigResponse, error) {
    +	var reqBody, resBody ValidateStoragePodConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type WaitForUpdatesBody struct {
    +	Req    *types.WaitForUpdates         `xml:"urn:vim25 WaitForUpdates,omitempty"`
    +	Res    *types.WaitForUpdatesResponse `xml:"urn:vim25 WaitForUpdatesResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *WaitForUpdatesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func WaitForUpdates(ctx context.Context, r soap.RoundTripper, req *types.WaitForUpdates) (*types.WaitForUpdatesResponse, error) {
    +	var reqBody, resBody WaitForUpdatesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type WaitForUpdatesExBody struct {
    +	Req    *types.WaitForUpdatesEx         `xml:"urn:vim25 WaitForUpdatesEx,omitempty"`
    +	Res    *types.WaitForUpdatesExResponse `xml:"urn:vim25 WaitForUpdatesExResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *WaitForUpdatesExBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func WaitForUpdatesEx(ctx context.Context, r soap.RoundTripper, req *types.WaitForUpdatesEx) (*types.WaitForUpdatesExResponse, error) {
    +	var reqBody, resBody WaitForUpdatesExBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type XmlToCustomizationSpecItemBody struct {
    +	Req    *types.XmlToCustomizationSpecItem         `xml:"urn:vim25 XmlToCustomizationSpecItem,omitempty"`
    +	Res    *types.XmlToCustomizationSpecItemResponse `xml:"urn:vim25 XmlToCustomizationSpecItemResponse,omitempty"`
    +	Fault_ *soap.Fault                               `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *XmlToCustomizationSpecItemBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func XmlToCustomizationSpecItem(ctx context.Context, r soap.RoundTripper, req *types.XmlToCustomizationSpecItem) (*types.XmlToCustomizationSpecItemResponse, error) {
    +	var reqBody, resBody XmlToCustomizationSpecItemBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ZeroFillVirtualDisk_TaskBody struct {
    +	Req    *types.ZeroFillVirtualDisk_Task         `xml:"urn:vim25 ZeroFillVirtualDisk_Task,omitempty"`
    +	Res    *types.ZeroFillVirtualDisk_TaskResponse `xml:"urn:vim25 ZeroFillVirtualDisk_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                             `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ZeroFillVirtualDisk_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ZeroFillVirtualDisk_Task(ctx context.Context, r soap.RoundTripper, req *types.ZeroFillVirtualDisk_Task) (*types.ZeroFillVirtualDisk_TaskResponse, error) {
    +	var reqBody, resBody ZeroFillVirtualDisk_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ConfigureVcha_TaskBody struct {
    +	Req    *types.ConfigureVcha_Task         `xml:"urn:vim25 configureVcha_Task,omitempty"`
    +	Res    *types.ConfigureVcha_TaskResponse `xml:"urn:vim25 configureVcha_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ConfigureVcha_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ConfigureVcha_Task(ctx context.Context, r soap.RoundTripper, req *types.ConfigureVcha_Task) (*types.ConfigureVcha_TaskResponse, error) {
    +	var reqBody, resBody ConfigureVcha_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreatePassiveNode_TaskBody struct {
    +	Req    *types.CreatePassiveNode_Task         `xml:"urn:vim25 createPassiveNode_Task,omitempty"`
    +	Res    *types.CreatePassiveNode_TaskResponse `xml:"urn:vim25 createPassiveNode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreatePassiveNode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreatePassiveNode_Task(ctx context.Context, r soap.RoundTripper, req *types.CreatePassiveNode_Task) (*types.CreatePassiveNode_TaskResponse, error) {
    +	var reqBody, resBody CreatePassiveNode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type CreateWitnessNode_TaskBody struct {
    +	Req    *types.CreateWitnessNode_Task         `xml:"urn:vim25 createWitnessNode_Task,omitempty"`
    +	Res    *types.CreateWitnessNode_TaskResponse `xml:"urn:vim25 createWitnessNode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                           `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *CreateWitnessNode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func CreateWitnessNode_Task(ctx context.Context, r soap.RoundTripper, req *types.CreateWitnessNode_Task) (*types.CreateWitnessNode_TaskResponse, error) {
    +	var reqBody, resBody CreateWitnessNode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DeployVcha_TaskBody struct {
    +	Req    *types.DeployVcha_Task         `xml:"urn:vim25 deployVcha_Task,omitempty"`
    +	Res    *types.DeployVcha_TaskResponse `xml:"urn:vim25 deployVcha_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                    `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DeployVcha_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DeployVcha_Task(ctx context.Context, r soap.RoundTripper, req *types.DeployVcha_Task) (*types.DeployVcha_TaskResponse, error) {
    +	var reqBody, resBody DeployVcha_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type DestroyVcha_TaskBody struct {
    +	Req    *types.DestroyVcha_Task         `xml:"urn:vim25 destroyVcha_Task,omitempty"`
    +	Res    *types.DestroyVcha_TaskResponse `xml:"urn:vim25 destroyVcha_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *DestroyVcha_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func DestroyVcha_Task(ctx context.Context, r soap.RoundTripper, req *types.DestroyVcha_Task) (*types.DestroyVcha_TaskResponse, error) {
    +	var reqBody, resBody DestroyVcha_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type FetchSoftwarePackagesBody struct {
    +	Req    *types.FetchSoftwarePackages         `xml:"urn:vim25 fetchSoftwarePackages,omitempty"`
    +	Res    *types.FetchSoftwarePackagesResponse `xml:"urn:vim25 fetchSoftwarePackagesResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *FetchSoftwarePackagesBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func FetchSoftwarePackages(ctx context.Context, r soap.RoundTripper, req *types.FetchSoftwarePackages) (*types.FetchSoftwarePackagesResponse, error) {
    +	var reqBody, resBody FetchSoftwarePackagesBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetClusterModeBody struct {
    +	Req    *types.GetClusterMode         `xml:"urn:vim25 getClusterMode,omitempty"`
    +	Res    *types.GetClusterModeResponse `xml:"urn:vim25 getClusterModeResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetClusterModeBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetClusterMode(ctx context.Context, r soap.RoundTripper, req *types.GetClusterMode) (*types.GetClusterModeResponse, error) {
    +	var reqBody, resBody GetClusterModeBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type GetVchaConfigBody struct {
    +	Req    *types.GetVchaConfig         `xml:"urn:vim25 getVchaConfig,omitempty"`
    +	Res    *types.GetVchaConfigResponse `xml:"urn:vim25 getVchaConfigResponse,omitempty"`
    +	Fault_ *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *GetVchaConfigBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func GetVchaConfig(ctx context.Context, r soap.RoundTripper, req *types.GetVchaConfig) (*types.GetVchaConfigResponse, error) {
    +	var reqBody, resBody GetVchaConfigBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InitiateFailover_TaskBody struct {
    +	Req    *types.InitiateFailover_Task         `xml:"urn:vim25 initiateFailover_Task,omitempty"`
    +	Res    *types.InitiateFailover_TaskResponse `xml:"urn:vim25 initiateFailover_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InitiateFailover_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InitiateFailover_Task(ctx context.Context, r soap.RoundTripper, req *types.InitiateFailover_Task) (*types.InitiateFailover_TaskResponse, error) {
    +	var reqBody, resBody InitiateFailover_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type InstallDateBody struct {
    +	Req    *types.InstallDate         `xml:"urn:vim25 installDate,omitempty"`
    +	Res    *types.InstallDateResponse `xml:"urn:vim25 installDateResponse,omitempty"`
    +	Fault_ *soap.Fault                `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *InstallDateBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func InstallDate(ctx context.Context, r soap.RoundTripper, req *types.InstallDate) (*types.InstallDateResponse, error) {
    +	var reqBody, resBody InstallDateBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type PrepareVcha_TaskBody struct {
    +	Req    *types.PrepareVcha_Task         `xml:"urn:vim25 prepareVcha_Task,omitempty"`
    +	Res    *types.PrepareVcha_TaskResponse `xml:"urn:vim25 prepareVcha_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                     `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *PrepareVcha_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func PrepareVcha_Task(ctx context.Context, r soap.RoundTripper, req *types.PrepareVcha_Task) (*types.PrepareVcha_TaskResponse, error) {
    +	var reqBody, resBody PrepareVcha_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type QueryDatacenterConfigOptionDescriptorBody struct {
    +	Req    *types.QueryDatacenterConfigOptionDescriptor         `xml:"urn:vim25 queryDatacenterConfigOptionDescriptor,omitempty"`
    +	Res    *types.QueryDatacenterConfigOptionDescriptorResponse `xml:"urn:vim25 queryDatacenterConfigOptionDescriptorResponse,omitempty"`
    +	Fault_ *soap.Fault                                          `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *QueryDatacenterConfigOptionDescriptorBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func QueryDatacenterConfigOptionDescriptor(ctx context.Context, r soap.RoundTripper, req *types.QueryDatacenterConfigOptionDescriptor) (*types.QueryDatacenterConfigOptionDescriptorResponse, error) {
    +	var reqBody, resBody QueryDatacenterConfigOptionDescriptorBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type ReloadVirtualMachineFromPath_TaskBody struct {
    +	Req    *types.ReloadVirtualMachineFromPath_Task         `xml:"urn:vim25 reloadVirtualMachineFromPath_Task,omitempty"`
    +	Res    *types.ReloadVirtualMachineFromPath_TaskResponse `xml:"urn:vim25 reloadVirtualMachineFromPath_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                                      `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *ReloadVirtualMachineFromPath_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func ReloadVirtualMachineFromPath_Task(ctx context.Context, r soap.RoundTripper, req *types.ReloadVirtualMachineFromPath_Task) (*types.ReloadVirtualMachineFromPath_TaskResponse, error) {
    +	var reqBody, resBody ReloadVirtualMachineFromPath_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetClusterMode_TaskBody struct {
    +	Req    *types.SetClusterMode_Task         `xml:"urn:vim25 setClusterMode_Task,omitempty"`
    +	Res    *types.SetClusterMode_TaskResponse `xml:"urn:vim25 setClusterMode_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetClusterMode_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetClusterMode_Task(ctx context.Context, r soap.RoundTripper, req *types.SetClusterMode_Task) (*types.SetClusterMode_TaskResponse, error) {
    +	var reqBody, resBody SetClusterMode_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type SetCustomValueBody struct {
    +	Req    *types.SetCustomValue         `xml:"urn:vim25 setCustomValue,omitempty"`
    +	Res    *types.SetCustomValueResponse `xml:"urn:vim25 setCustomValueResponse,omitempty"`
    +	Fault_ *soap.Fault                   `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *SetCustomValueBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func SetCustomValue(ctx context.Context, r soap.RoundTripper, req *types.SetCustomValue) (*types.SetCustomValueResponse, error) {
    +	var reqBody, resBody SetCustomValueBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    +
    +type UnregisterVApp_TaskBody struct {
    +	Req    *types.UnregisterVApp_Task         `xml:"urn:vim25 unregisterVApp_Task,omitempty"`
    +	Res    *types.UnregisterVApp_TaskResponse `xml:"urn:vim25 unregisterVApp_TaskResponse,omitempty"`
    +	Fault_ *soap.Fault                        `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
    +}
    +
    +func (b *UnregisterVApp_TaskBody) Fault() *soap.Fault { return b.Fault_ }
    +
    +func UnregisterVApp_Task(ctx context.Context, r soap.RoundTripper, req *types.UnregisterVApp_Task) (*types.UnregisterVApp_TaskResponse, error) {
    +	var reqBody, resBody UnregisterVApp_TaskBody
    +
    +	reqBody.Req = req
    +
    +	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
    +		return nil, err
    +	}
    +
    +	return resBody.Res, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/methods/service_content.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/methods/service_content.go
    new file mode 100644
    index 00000000000..401646598d4
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/methods/service_content.go
    @@ -0,0 +1,57 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package methods
    +
    +import (
    +	"context"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// copy of vim25.ServiceInstance to avoid import cycle
    +var serviceInstance = types.ManagedObjectReference{
    +	Type:  "ServiceInstance",
    +	Value: "ServiceInstance",
    +}
    +
    +func GetServiceContent(ctx context.Context, r soap.RoundTripper) (types.ServiceContent, error) {
    +	req := types.RetrieveServiceContent{
    +		This: serviceInstance,
    +	}
    +
    +	res, err := RetrieveServiceContent(ctx, r, &req)
    +	if err != nil {
    +		return types.ServiceContent{}, err
    +	}
    +
    +	return res.Returnval, nil
    +}
    +
    +func GetCurrentTime(ctx context.Context, r soap.RoundTripper) (*time.Time, error) {
    +	req := types.CurrentTime{
    +		This: serviceInstance,
    +	}
    +
    +	res, err := CurrentTime(ctx, r, &req)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return &res.Returnval, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/ancestors.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/ancestors.go
    new file mode 100644
    index 00000000000..d3da5b1847c
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/ancestors.go
    @@ -0,0 +1,137 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package mo
    +
    +import (
    +	"context"
    +	"fmt"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +// Ancestors returns the entire ancestry tree of a specified managed object.
    +// The return value includes the root node and the specified object itself.
    +func Ancestors(ctx context.Context, rt soap.RoundTripper, pc, obj types.ManagedObjectReference) ([]ManagedEntity, error) {
    +	ospec := types.ObjectSpec{
    +		Obj: obj,
    +		SelectSet: []types.BaseSelectionSpec{
    +			&types.TraversalSpec{
    +				SelectionSpec: types.SelectionSpec{Name: "traverseParent"},
    +				Type:          "ManagedEntity",
    +				Path:          "parent",
    +				Skip:          types.NewBool(false),
    +				SelectSet: []types.BaseSelectionSpec{
    +					&types.SelectionSpec{Name: "traverseParent"},
    +				},
    +			},
    +			&types.TraversalSpec{
    +				SelectionSpec: types.SelectionSpec{},
    +				Type:          "VirtualMachine",
    +				Path:          "parentVApp",
    +				Skip:          types.NewBool(false),
    +				SelectSet: []types.BaseSelectionSpec{
    +					&types.SelectionSpec{Name: "traverseParent"},
    +				},
    +			},
    +		},
    +		Skip: types.NewBool(false),
    +	}
    +
    +	pspec := []types.PropertySpec{
    +		{
    +			Type:    "ManagedEntity",
    +			PathSet: []string{"name", "parent"},
    +		},
    +		{
    +			Type:    "VirtualMachine",
    +			PathSet: []string{"parentVApp"},
    +		},
    +	}
    +
    +	req := types.RetrieveProperties{
    +		This: pc,
    +		SpecSet: []types.PropertyFilterSpec{
    +			{
    +				ObjectSet: []types.ObjectSpec{ospec},
    +				PropSet:   pspec,
    +			},
    +		},
    +	}
    +
    +	var ifaces []interface{}
    +	err := RetrievePropertiesForRequest(ctx, rt, req, &ifaces)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	var out []ManagedEntity
    +
    +	// Build ancestry tree by iteratively finding a new child.
    +	for len(out) < len(ifaces) {
    +		var find types.ManagedObjectReference
    +
    +		if len(out) > 0 {
    +			find = out[len(out)-1].Self
    +		}
    +
    +		// Find entity we're looking for given the last entity in the current tree.
    +		for _, iface := range ifaces {
    +			me := iface.(IsManagedEntity).GetManagedEntity()
    +
    +			if me.Name == "" {
    +				// The types below have their own 'Name' field, so ManagedEntity.Name (me.Name) is empty.
    +				// We only hit this case when the 'obj' param is one of these types.
    +				// In most cases, 'obj' is a Folder so Name isn't collected in this call.
    +				switch x := iface.(type) {
    +				case Network:
    +					me.Name = x.Name
    +				case DistributedVirtualSwitch:
    +					me.Name = x.Name
    +				case DistributedVirtualPortgroup:
    +					me.Name = x.Name
    +				case OpaqueNetwork:
    +					me.Name = x.Name
    +				default:
    +					// ManagedEntity always has a Name, if we hit this point we missed a case above.
    +					panic(fmt.Sprintf("%#v Name is empty", me.Reference()))
    +				}
    +			}
    +
    +			if me.Parent == nil {
    +				// Special case for VirtualMachine within VirtualApp,
    +				// unlikely to hit this other than via Finder.Element()
    +				switch x := iface.(type) {
    +				case VirtualMachine:
    +					me.Parent = x.ParentVApp
    +				}
    +			}
    +
    +			if me.Parent == nil {
    +				out = append(out, me)
    +				break
    +			}
    +
    +			if *me.Parent == find {
    +				out = append(out, me)
    +				break
    +			}
    +		}
    +	}
    +
    +	return out, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/entity.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/entity.go
    new file mode 100644
    index 00000000000..193e6f71ea1
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/entity.go
    @@ -0,0 +1,24 @@
    +/*
    +Copyright (c) 2016 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package mo
    +
    +// Entity is the interface that is implemented by all managed objects
    +// that extend ManagedEntity.
    +type Entity interface {
    +	Reference
    +	Entity() *ManagedEntity
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/extra.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/extra.go
    new file mode 100644
    index 00000000000..254ef35949b
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/extra.go
    @@ -0,0 +1,61 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package mo
    +
    +type IsManagedEntity interface {
    +	GetManagedEntity() ManagedEntity
    +}
    +
    +func (m ComputeResource) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m Datacenter) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m Datastore) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m DistributedVirtualSwitch) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m DistributedVirtualPortgroup) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m Folder) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m HostSystem) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m Network) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m ResourcePool) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    +
    +func (m VirtualMachine) GetManagedEntity() ManagedEntity {
    +	return m.ManagedEntity
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/mo.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/mo.go
    new file mode 100644
    index 00000000000..4f19988e36d
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/mo.go
    @@ -0,0 +1,1801 @@
    +/*
    +Copyright (c) 2014-2018 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package mo
    +
    +import (
    +	"reflect"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type Alarm struct {
    +	ExtensibleManagedObject
    +
    +	Info types.AlarmInfo `mo:"info"`
    +}
    +
    +func init() {
    +	t["Alarm"] = reflect.TypeOf((*Alarm)(nil)).Elem()
    +}
    +
    +type AlarmManager struct {
    +	Self types.ManagedObjectReference
    +
    +	DefaultExpression []types.BaseAlarmExpression `mo:"defaultExpression"`
    +	Description       types.AlarmDescription      `mo:"description"`
    +}
    +
    +func (m AlarmManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["AlarmManager"] = reflect.TypeOf((*AlarmManager)(nil)).Elem()
    +}
    +
    +type AuthorizationManager struct {
    +	Self types.ManagedObjectReference
    +
    +	PrivilegeList []types.AuthorizationPrivilege `mo:"privilegeList"`
    +	RoleList      []types.AuthorizationRole      `mo:"roleList"`
    +	Description   types.AuthorizationDescription `mo:"description"`
    +}
    +
    +func (m AuthorizationManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["AuthorizationManager"] = reflect.TypeOf((*AuthorizationManager)(nil)).Elem()
    +}
    +
    +type CertificateManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m CertificateManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["CertificateManager"] = reflect.TypeOf((*CertificateManager)(nil)).Elem()
    +}
    +
    +type ClusterComputeResource struct {
    +	ComputeResource
    +
    +	Configuration     types.ClusterConfigInfo          `mo:"configuration"`
    +	Recommendation    []types.ClusterRecommendation    `mo:"recommendation"`
    +	DrsRecommendation []types.ClusterDrsRecommendation `mo:"drsRecommendation"`
    +	MigrationHistory  []types.ClusterDrsMigration      `mo:"migrationHistory"`
    +	ActionHistory     []types.ClusterActionHistory     `mo:"actionHistory"`
    +	DrsFault          []types.ClusterDrsFaults         `mo:"drsFault"`
    +}
    +
    +func init() {
    +	t["ClusterComputeResource"] = reflect.TypeOf((*ClusterComputeResource)(nil)).Elem()
    +}
    +
    +type ClusterEVCManager struct {
    +	ExtensibleManagedObject
    +
    +	ManagedCluster types.ManagedObjectReference    `mo:"managedCluster"`
    +	EvcState       types.ClusterEVCManagerEVCState `mo:"evcState"`
    +}
    +
    +func init() {
    +	t["ClusterEVCManager"] = reflect.TypeOf((*ClusterEVCManager)(nil)).Elem()
    +}
    +
    +type ClusterProfile struct {
    +	Profile
    +}
    +
    +func init() {
    +	t["ClusterProfile"] = reflect.TypeOf((*ClusterProfile)(nil)).Elem()
    +}
    +
    +type ClusterProfileManager struct {
    +	ProfileManager
    +}
    +
    +func init() {
    +	t["ClusterProfileManager"] = reflect.TypeOf((*ClusterProfileManager)(nil)).Elem()
    +}
    +
    +type ComputeResource struct {
    +	ManagedEntity
    +
    +	ResourcePool       *types.ManagedObjectReference       `mo:"resourcePool"`
    +	Host               []types.ManagedObjectReference      `mo:"host"`
    +	Datastore          []types.ManagedObjectReference      `mo:"datastore"`
    +	Network            []types.ManagedObjectReference      `mo:"network"`
    +	Summary            types.BaseComputeResourceSummary    `mo:"summary"`
    +	EnvironmentBrowser *types.ManagedObjectReference       `mo:"environmentBrowser"`
    +	ConfigurationEx    types.BaseComputeResourceConfigInfo `mo:"configurationEx"`
    +}
    +
    +func (m *ComputeResource) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["ComputeResource"] = reflect.TypeOf((*ComputeResource)(nil)).Elem()
    +}
    +
    +type ContainerView struct {
    +	ManagedObjectView
    +
    +	Container types.ManagedObjectReference `mo:"container"`
    +	Type      []string                     `mo:"type"`
    +	Recursive bool                         `mo:"recursive"`
    +}
    +
    +func init() {
    +	t["ContainerView"] = reflect.TypeOf((*ContainerView)(nil)).Elem()
    +}
    +
    +type CryptoManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Enabled bool `mo:"enabled"`
    +}
    +
    +func (m CryptoManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["CryptoManager"] = reflect.TypeOf((*CryptoManager)(nil)).Elem()
    +}
    +
    +type CryptoManagerHost struct {
    +	CryptoManager
    +}
    +
    +func init() {
    +	t["CryptoManagerHost"] = reflect.TypeOf((*CryptoManagerHost)(nil)).Elem()
    +}
    +
    +type CryptoManagerHostKMS struct {
    +	CryptoManagerHost
    +}
    +
    +func init() {
    +	t["CryptoManagerHostKMS"] = reflect.TypeOf((*CryptoManagerHostKMS)(nil)).Elem()
    +}
    +
    +type CryptoManagerKmip struct {
    +	CryptoManager
    +
    +	KmipServers []types.KmipClusterInfo `mo:"kmipServers"`
    +}
    +
    +func init() {
    +	t["CryptoManagerKmip"] = reflect.TypeOf((*CryptoManagerKmip)(nil)).Elem()
    +}
    +
    +type CustomFieldsManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Field []types.CustomFieldDef `mo:"field"`
    +}
    +
    +func (m CustomFieldsManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["CustomFieldsManager"] = reflect.TypeOf((*CustomFieldsManager)(nil)).Elem()
    +}
    +
    +type CustomizationSpecManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Info          []types.CustomizationSpecInfo `mo:"info"`
    +	EncryptionKey []byte                        `mo:"encryptionKey"`
    +}
    +
    +func (m CustomizationSpecManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["CustomizationSpecManager"] = reflect.TypeOf((*CustomizationSpecManager)(nil)).Elem()
    +}
    +
    +type Datacenter struct {
    +	ManagedEntity
    +
    +	VmFolder        types.ManagedObjectReference   `mo:"vmFolder"`
    +	HostFolder      types.ManagedObjectReference   `mo:"hostFolder"`
    +	DatastoreFolder types.ManagedObjectReference   `mo:"datastoreFolder"`
    +	NetworkFolder   types.ManagedObjectReference   `mo:"networkFolder"`
    +	Datastore       []types.ManagedObjectReference `mo:"datastore"`
    +	Network         []types.ManagedObjectReference `mo:"network"`
    +	Configuration   types.DatacenterConfigInfo     `mo:"configuration"`
    +}
    +
    +func (m *Datacenter) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["Datacenter"] = reflect.TypeOf((*Datacenter)(nil)).Elem()
    +}
    +
    +type Datastore struct {
    +	ManagedEntity
    +
    +	Info              types.BaseDatastoreInfo        `mo:"info"`
    +	Summary           types.DatastoreSummary         `mo:"summary"`
    +	Host              []types.DatastoreHostMount     `mo:"host"`
    +	Vm                []types.ManagedObjectReference `mo:"vm"`
    +	Browser           types.ManagedObjectReference   `mo:"browser"`
    +	Capability        types.DatastoreCapability      `mo:"capability"`
    +	IormConfiguration *types.StorageIORMInfo         `mo:"iormConfiguration"`
    +}
    +
    +func (m *Datastore) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["Datastore"] = reflect.TypeOf((*Datastore)(nil)).Elem()
    +}
    +
    +type DatastoreNamespaceManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m DatastoreNamespaceManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["DatastoreNamespaceManager"] = reflect.TypeOf((*DatastoreNamespaceManager)(nil)).Elem()
    +}
    +
    +type DiagnosticManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m DiagnosticManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["DiagnosticManager"] = reflect.TypeOf((*DiagnosticManager)(nil)).Elem()
    +}
    +
    +type DistributedVirtualPortgroup struct {
    +	Network
    +
    +	Key      string                      `mo:"key"`
    +	Config   types.DVPortgroupConfigInfo `mo:"config"`
    +	PortKeys []string                    `mo:"portKeys"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualPortgroup"] = reflect.TypeOf((*DistributedVirtualPortgroup)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitch struct {
    +	ManagedEntity
    +
    +	Uuid                string                         `mo:"uuid"`
    +	Capability          types.DVSCapability            `mo:"capability"`
    +	Summary             types.DVSSummary               `mo:"summary"`
    +	Config              types.BaseDVSConfigInfo        `mo:"config"`
    +	NetworkResourcePool []types.DVSNetworkResourcePool `mo:"networkResourcePool"`
    +	Portgroup           []types.ManagedObjectReference `mo:"portgroup"`
    +	Runtime             *types.DVSRuntimeInfo          `mo:"runtime"`
    +}
    +
    +func (m *DistributedVirtualSwitch) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitch"] = reflect.TypeOf((*DistributedVirtualSwitch)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m DistributedVirtualSwitchManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManager"] = reflect.TypeOf((*DistributedVirtualSwitchManager)(nil)).Elem()
    +}
    +
    +type EnvironmentBrowser struct {
    +	Self types.ManagedObjectReference
    +
    +	DatastoreBrowser *types.ManagedObjectReference `mo:"datastoreBrowser"`
    +}
    +
    +func (m EnvironmentBrowser) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["EnvironmentBrowser"] = reflect.TypeOf((*EnvironmentBrowser)(nil)).Elem()
    +}
    +
    +type EventHistoryCollector struct {
    +	HistoryCollector
    +
    +	LatestPage []types.BaseEvent `mo:"latestPage"`
    +}
    +
    +func init() {
    +	t["EventHistoryCollector"] = reflect.TypeOf((*EventHistoryCollector)(nil)).Elem()
    +}
    +
    +type EventManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Description  types.EventDescription `mo:"description"`
    +	LatestEvent  types.BaseEvent        `mo:"latestEvent"`
    +	MaxCollector int32                  `mo:"maxCollector"`
    +}
    +
    +func (m EventManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["EventManager"] = reflect.TypeOf((*EventManager)(nil)).Elem()
    +}
    +
    +type ExtensibleManagedObject struct {
    +	Self types.ManagedObjectReference
    +
    +	Value          []types.BaseCustomFieldValue `mo:"value"`
    +	AvailableField []types.CustomFieldDef       `mo:"availableField"`
    +}
    +
    +func (m ExtensibleManagedObject) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ExtensibleManagedObject"] = reflect.TypeOf((*ExtensibleManagedObject)(nil)).Elem()
    +}
    +
    +type ExtensionManager struct {
    +	Self types.ManagedObjectReference
    +
    +	ExtensionList []types.Extension `mo:"extensionList"`
    +}
    +
    +func (m ExtensionManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ExtensionManager"] = reflect.TypeOf((*ExtensionManager)(nil)).Elem()
    +}
    +
    +type FailoverClusterConfigurator struct {
    +	Self types.ManagedObjectReference
    +
    +	DisabledConfigureMethod []string `mo:"disabledConfigureMethod"`
    +}
    +
    +func (m FailoverClusterConfigurator) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["FailoverClusterConfigurator"] = reflect.TypeOf((*FailoverClusterConfigurator)(nil)).Elem()
    +}
    +
    +type FailoverClusterManager struct {
    +	Self types.ManagedObjectReference
    +
    +	DisabledClusterMethod []string `mo:"disabledClusterMethod"`
    +}
    +
    +func (m FailoverClusterManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["FailoverClusterManager"] = reflect.TypeOf((*FailoverClusterManager)(nil)).Elem()
    +}
    +
    +type FileManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m FileManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["FileManager"] = reflect.TypeOf((*FileManager)(nil)).Elem()
    +}
    +
    +type Folder struct {
    +	ManagedEntity
    +
    +	ChildType   []string                       `mo:"childType"`
    +	ChildEntity []types.ManagedObjectReference `mo:"childEntity"`
    +}
    +
    +func (m *Folder) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["Folder"] = reflect.TypeOf((*Folder)(nil)).Elem()
    +}
    +
    +type GuestAliasManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m GuestAliasManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["GuestAliasManager"] = reflect.TypeOf((*GuestAliasManager)(nil)).Elem()
    +}
    +
    +type GuestAuthManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m GuestAuthManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["GuestAuthManager"] = reflect.TypeOf((*GuestAuthManager)(nil)).Elem()
    +}
    +
    +type GuestFileManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m GuestFileManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["GuestFileManager"] = reflect.TypeOf((*GuestFileManager)(nil)).Elem()
    +}
    +
    +type GuestOperationsManager struct {
    +	Self types.ManagedObjectReference
    +
    +	AuthManager                 *types.ManagedObjectReference `mo:"authManager"`
    +	FileManager                 *types.ManagedObjectReference `mo:"fileManager"`
    +	ProcessManager              *types.ManagedObjectReference `mo:"processManager"`
    +	GuestWindowsRegistryManager *types.ManagedObjectReference `mo:"guestWindowsRegistryManager"`
    +	AliasManager                *types.ManagedObjectReference `mo:"aliasManager"`
    +}
    +
    +func (m GuestOperationsManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["GuestOperationsManager"] = reflect.TypeOf((*GuestOperationsManager)(nil)).Elem()
    +}
    +
    +type GuestProcessManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m GuestProcessManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["GuestProcessManager"] = reflect.TypeOf((*GuestProcessManager)(nil)).Elem()
    +}
    +
    +type GuestWindowsRegistryManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m GuestWindowsRegistryManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["GuestWindowsRegistryManager"] = reflect.TypeOf((*GuestWindowsRegistryManager)(nil)).Elem()
    +}
    +
    +type HealthUpdateManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HealthUpdateManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HealthUpdateManager"] = reflect.TypeOf((*HealthUpdateManager)(nil)).Elem()
    +}
    +
    +type HistoryCollector struct {
    +	Self types.ManagedObjectReference
    +
    +	Filter types.AnyType `mo:"filter"`
    +}
    +
    +func (m HistoryCollector) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HistoryCollector"] = reflect.TypeOf((*HistoryCollector)(nil)).Elem()
    +}
    +
    +type HostAccessManager struct {
    +	Self types.ManagedObjectReference
    +
    +	LockdownMode types.HostLockdownMode `mo:"lockdownMode"`
    +}
    +
    +func (m HostAccessManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostAccessManager"] = reflect.TypeOf((*HostAccessManager)(nil)).Elem()
    +}
    +
    +type HostActiveDirectoryAuthentication struct {
    +	HostDirectoryStore
    +}
    +
    +func init() {
    +	t["HostActiveDirectoryAuthentication"] = reflect.TypeOf((*HostActiveDirectoryAuthentication)(nil)).Elem()
    +}
    +
    +type HostAuthenticationManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Info           types.HostAuthenticationManagerInfo `mo:"info"`
    +	SupportedStore []types.ManagedObjectReference      `mo:"supportedStore"`
    +}
    +
    +func (m HostAuthenticationManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostAuthenticationManager"] = reflect.TypeOf((*HostAuthenticationManager)(nil)).Elem()
    +}
    +
    +type HostAuthenticationStore struct {
    +	Self types.ManagedObjectReference
    +
    +	Info types.BaseHostAuthenticationStoreInfo `mo:"info"`
    +}
    +
    +func (m HostAuthenticationStore) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostAuthenticationStore"] = reflect.TypeOf((*HostAuthenticationStore)(nil)).Elem()
    +}
    +
    +type HostAutoStartManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Config types.HostAutoStartManagerConfig `mo:"config"`
    +}
    +
    +func (m HostAutoStartManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostAutoStartManager"] = reflect.TypeOf((*HostAutoStartManager)(nil)).Elem()
    +}
    +
    +type HostBootDeviceSystem struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HostBootDeviceSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostBootDeviceSystem"] = reflect.TypeOf((*HostBootDeviceSystem)(nil)).Elem()
    +}
    +
    +type HostCacheConfigurationManager struct {
    +	Self types.ManagedObjectReference
    +
    +	CacheConfigurationInfo []types.HostCacheConfigurationInfo `mo:"cacheConfigurationInfo"`
    +}
    +
    +func (m HostCacheConfigurationManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostCacheConfigurationManager"] = reflect.TypeOf((*HostCacheConfigurationManager)(nil)).Elem()
    +}
    +
    +type HostCertificateManager struct {
    +	Self types.ManagedObjectReference
    +
    +	CertificateInfo types.HostCertificateManagerCertificateInfo `mo:"certificateInfo"`
    +}
    +
    +func (m HostCertificateManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostCertificateManager"] = reflect.TypeOf((*HostCertificateManager)(nil)).Elem()
    +}
    +
    +type HostCpuSchedulerSystem struct {
    +	ExtensibleManagedObject
    +
    +	HyperthreadInfo *types.HostHyperThreadScheduleInfo `mo:"hyperthreadInfo"`
    +}
    +
    +func init() {
    +	t["HostCpuSchedulerSystem"] = reflect.TypeOf((*HostCpuSchedulerSystem)(nil)).Elem()
    +}
    +
    +type HostDatastoreBrowser struct {
    +	Self types.ManagedObjectReference
    +
    +	Datastore     []types.ManagedObjectReference `mo:"datastore"`
    +	SupportedType []types.BaseFileQuery          `mo:"supportedType"`
    +}
    +
    +func (m HostDatastoreBrowser) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostDatastoreBrowser"] = reflect.TypeOf((*HostDatastoreBrowser)(nil)).Elem()
    +}
    +
    +type HostDatastoreSystem struct {
    +	Self types.ManagedObjectReference
    +
    +	Datastore    []types.ManagedObjectReference        `mo:"datastore"`
    +	Capabilities types.HostDatastoreSystemCapabilities `mo:"capabilities"`
    +}
    +
    +func (m HostDatastoreSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostDatastoreSystem"] = reflect.TypeOf((*HostDatastoreSystem)(nil)).Elem()
    +}
    +
    +type HostDateTimeSystem struct {
    +	Self types.ManagedObjectReference
    +
    +	DateTimeInfo types.HostDateTimeInfo `mo:"dateTimeInfo"`
    +}
    +
    +func (m HostDateTimeSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostDateTimeSystem"] = reflect.TypeOf((*HostDateTimeSystem)(nil)).Elem()
    +}
    +
    +type HostDiagnosticSystem struct {
    +	Self types.ManagedObjectReference
    +
    +	ActivePartition *types.HostDiagnosticPartition `mo:"activePartition"`
    +}
    +
    +func (m HostDiagnosticSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostDiagnosticSystem"] = reflect.TypeOf((*HostDiagnosticSystem)(nil)).Elem()
    +}
    +
    +type HostDirectoryStore struct {
    +	HostAuthenticationStore
    +}
    +
    +func init() {
    +	t["HostDirectoryStore"] = reflect.TypeOf((*HostDirectoryStore)(nil)).Elem()
    +}
    +
    +type HostEsxAgentHostManager struct {
    +	Self types.ManagedObjectReference
    +
    +	ConfigInfo types.HostEsxAgentHostManagerConfigInfo `mo:"configInfo"`
    +}
    +
    +func (m HostEsxAgentHostManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostEsxAgentHostManager"] = reflect.TypeOf((*HostEsxAgentHostManager)(nil)).Elem()
    +}
    +
    +type HostFirewallSystem struct {
    +	ExtensibleManagedObject
    +
    +	FirewallInfo *types.HostFirewallInfo `mo:"firewallInfo"`
    +}
    +
    +func init() {
    +	t["HostFirewallSystem"] = reflect.TypeOf((*HostFirewallSystem)(nil)).Elem()
    +}
    +
    +type HostFirmwareSystem struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HostFirmwareSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostFirmwareSystem"] = reflect.TypeOf((*HostFirmwareSystem)(nil)).Elem()
    +}
    +
    +type HostGraphicsManager struct {
    +	ExtensibleManagedObject
    +
    +	GraphicsInfo           []types.HostGraphicsInfo          `mo:"graphicsInfo"`
    +	GraphicsConfig         *types.HostGraphicsConfig         `mo:"graphicsConfig"`
    +	SharedPassthruGpuTypes []string                          `mo:"sharedPassthruGpuTypes"`
    +	SharedGpuCapabilities  []types.HostSharedGpuCapabilities `mo:"sharedGpuCapabilities"`
    +}
    +
    +func init() {
    +	t["HostGraphicsManager"] = reflect.TypeOf((*HostGraphicsManager)(nil)).Elem()
    +}
    +
    +type HostHealthStatusSystem struct {
    +	Self types.ManagedObjectReference
    +
    +	Runtime types.HealthSystemRuntime `mo:"runtime"`
    +}
    +
    +func (m HostHealthStatusSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostHealthStatusSystem"] = reflect.TypeOf((*HostHealthStatusSystem)(nil)).Elem()
    +}
    +
    +type HostImageConfigManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HostImageConfigManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostImageConfigManager"] = reflect.TypeOf((*HostImageConfigManager)(nil)).Elem()
    +}
    +
    +type HostKernelModuleSystem struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HostKernelModuleSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostKernelModuleSystem"] = reflect.TypeOf((*HostKernelModuleSystem)(nil)).Elem()
    +}
    +
    +type HostLocalAccountManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HostLocalAccountManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostLocalAccountManager"] = reflect.TypeOf((*HostLocalAccountManager)(nil)).Elem()
    +}
    +
    +type HostLocalAuthentication struct {
    +	HostAuthenticationStore
    +}
    +
    +func init() {
    +	t["HostLocalAuthentication"] = reflect.TypeOf((*HostLocalAuthentication)(nil)).Elem()
    +}
    +
    +type HostMemorySystem struct {
    +	ExtensibleManagedObject
    +
    +	ConsoleReservationInfo        *types.ServiceConsoleReservationInfo       `mo:"consoleReservationInfo"`
    +	VirtualMachineReservationInfo *types.VirtualMachineMemoryReservationInfo `mo:"virtualMachineReservationInfo"`
    +}
    +
    +func init() {
    +	t["HostMemorySystem"] = reflect.TypeOf((*HostMemorySystem)(nil)).Elem()
    +}
    +
    +type HostNetworkSystem struct {
    +	ExtensibleManagedObject
    +
    +	Capabilities         *types.HostNetCapabilities        `mo:"capabilities"`
    +	NetworkInfo          *types.HostNetworkInfo            `mo:"networkInfo"`
    +	OffloadCapabilities  *types.HostNetOffloadCapabilities `mo:"offloadCapabilities"`
    +	NetworkConfig        *types.HostNetworkConfig          `mo:"networkConfig"`
    +	DnsConfig            types.BaseHostDnsConfig           `mo:"dnsConfig"`
    +	IpRouteConfig        types.BaseHostIpRouteConfig       `mo:"ipRouteConfig"`
    +	ConsoleIpRouteConfig types.BaseHostIpRouteConfig       `mo:"consoleIpRouteConfig"`
    +}
    +
    +func init() {
    +	t["HostNetworkSystem"] = reflect.TypeOf((*HostNetworkSystem)(nil)).Elem()
    +}
    +
    +type HostNvdimmSystem struct {
    +	Self types.ManagedObjectReference
    +
    +	NvdimmSystemInfo types.NvdimmSystemInfo `mo:"nvdimmSystemInfo"`
    +}
    +
    +func (m HostNvdimmSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostNvdimmSystem"] = reflect.TypeOf((*HostNvdimmSystem)(nil)).Elem()
    +}
    +
    +type HostPatchManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HostPatchManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostPatchManager"] = reflect.TypeOf((*HostPatchManager)(nil)).Elem()
    +}
    +
    +type HostPciPassthruSystem struct {
    +	ExtensibleManagedObject
    +
    +	PciPassthruInfo     []types.BaseHostPciPassthruInfo     `mo:"pciPassthruInfo"`
    +	SriovDevicePoolInfo []types.BaseHostSriovDevicePoolInfo `mo:"sriovDevicePoolInfo"`
    +}
    +
    +func init() {
    +	t["HostPciPassthruSystem"] = reflect.TypeOf((*HostPciPassthruSystem)(nil)).Elem()
    +}
    +
    +type HostPowerSystem struct {
    +	Self types.ManagedObjectReference
    +
    +	Capability types.PowerSystemCapability `mo:"capability"`
    +	Info       types.PowerSystemInfo       `mo:"info"`
    +}
    +
    +func (m HostPowerSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostPowerSystem"] = reflect.TypeOf((*HostPowerSystem)(nil)).Elem()
    +}
    +
    +type HostProfile struct {
    +	Profile
    +
    +	ValidationState           *string                                 `mo:"validationState"`
    +	ValidationStateUpdateTime *time.Time                              `mo:"validationStateUpdateTime"`
    +	ValidationFailureInfo     *types.HostProfileValidationFailureInfo `mo:"validationFailureInfo"`
    +	ReferenceHost             *types.ManagedObjectReference           `mo:"referenceHost"`
    +}
    +
    +func init() {
    +	t["HostProfile"] = reflect.TypeOf((*HostProfile)(nil)).Elem()
    +}
    +
    +type HostProfileManager struct {
    +	ProfileManager
    +}
    +
    +func init() {
    +	t["HostProfileManager"] = reflect.TypeOf((*HostProfileManager)(nil)).Elem()
    +}
    +
    +type HostServiceSystem struct {
    +	ExtensibleManagedObject
    +
    +	ServiceInfo types.HostServiceInfo `mo:"serviceInfo"`
    +}
    +
    +func init() {
    +	t["HostServiceSystem"] = reflect.TypeOf((*HostServiceSystem)(nil)).Elem()
    +}
    +
    +type HostSnmpSystem struct {
    +	Self types.ManagedObjectReference
    +
    +	Configuration types.HostSnmpConfigSpec        `mo:"configuration"`
    +	Limits        types.HostSnmpSystemAgentLimits `mo:"limits"`
    +}
    +
    +func (m HostSnmpSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostSnmpSystem"] = reflect.TypeOf((*HostSnmpSystem)(nil)).Elem()
    +}
    +
    +type HostSpecificationManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HostSpecificationManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostSpecificationManager"] = reflect.TypeOf((*HostSpecificationManager)(nil)).Elem()
    +}
    +
    +type HostStorageSystem struct {
    +	ExtensibleManagedObject
    +
    +	StorageDeviceInfo    *types.HostStorageDeviceInfo   `mo:"storageDeviceInfo"`
    +	FileSystemVolumeInfo types.HostFileSystemVolumeInfo `mo:"fileSystemVolumeInfo"`
    +	SystemFile           []string                       `mo:"systemFile"`
    +	MultipathStateInfo   *types.HostMultipathStateInfo  `mo:"multipathStateInfo"`
    +}
    +
    +func init() {
    +	t["HostStorageSystem"] = reflect.TypeOf((*HostStorageSystem)(nil)).Elem()
    +}
    +
    +type HostSystem struct {
    +	ManagedEntity
    +
    +	Runtime                    types.HostRuntimeInfo                      `mo:"runtime"`
    +	Summary                    types.HostListSummary                      `mo:"summary"`
    +	Hardware                   *types.HostHardwareInfo                    `mo:"hardware"`
    +	Capability                 *types.HostCapability                      `mo:"capability"`
    +	LicensableResource         types.HostLicensableResourceInfo           `mo:"licensableResource"`
    +	RemediationState           *types.HostSystemRemediationState          `mo:"remediationState"`
    +	PrecheckRemediationResult  *types.ApplyHostProfileConfigurationSpec   `mo:"precheckRemediationResult"`
    +	RemediationResult          *types.ApplyHostProfileConfigurationResult `mo:"remediationResult"`
    +	ComplianceCheckState       *types.HostSystemComplianceCheckState      `mo:"complianceCheckState"`
    +	ComplianceCheckResult      *types.ComplianceResult                    `mo:"complianceCheckResult"`
    +	ConfigManager              types.HostConfigManager                    `mo:"configManager"`
    +	Config                     *types.HostConfigInfo                      `mo:"config"`
    +	Vm                         []types.ManagedObjectReference             `mo:"vm"`
    +	Datastore                  []types.ManagedObjectReference             `mo:"datastore"`
    +	Network                    []types.ManagedObjectReference             `mo:"network"`
    +	DatastoreBrowser           types.ManagedObjectReference               `mo:"datastoreBrowser"`
    +	SystemResources            *types.HostSystemResourceInfo              `mo:"systemResources"`
    +	AnswerFileValidationState  *types.AnswerFileStatusResult              `mo:"answerFileValidationState"`
    +	AnswerFileValidationResult *types.AnswerFileStatusResult              `mo:"answerFileValidationResult"`
    +}
    +
    +func (m *HostSystem) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["HostSystem"] = reflect.TypeOf((*HostSystem)(nil)).Elem()
    +}
    +
    +type HostVFlashManager struct {
    +	Self types.ManagedObjectReference
    +
    +	VFlashConfigInfo *types.HostVFlashManagerVFlashConfigInfo `mo:"vFlashConfigInfo"`
    +}
    +
    +func (m HostVFlashManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostVFlashManager"] = reflect.TypeOf((*HostVFlashManager)(nil)).Elem()
    +}
    +
    +type HostVMotionSystem struct {
    +	ExtensibleManagedObject
    +
    +	NetConfig *types.HostVMotionNetConfig `mo:"netConfig"`
    +	IpConfig  *types.HostIpConfig         `mo:"ipConfig"`
    +}
    +
    +func init() {
    +	t["HostVMotionSystem"] = reflect.TypeOf((*HostVMotionSystem)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectManager struct {
    +	VStorageObjectManagerBase
    +}
    +
    +func init() {
    +	t["HostVStorageObjectManager"] = reflect.TypeOf((*HostVStorageObjectManager)(nil)).Elem()
    +}
    +
    +type HostVirtualNicManager struct {
    +	ExtensibleManagedObject
    +
    +	Info types.HostVirtualNicManagerInfo `mo:"info"`
    +}
    +
    +func init() {
    +	t["HostVirtualNicManager"] = reflect.TypeOf((*HostVirtualNicManager)(nil)).Elem()
    +}
    +
    +type HostVsanInternalSystem struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m HostVsanInternalSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostVsanInternalSystem"] = reflect.TypeOf((*HostVsanInternalSystem)(nil)).Elem()
    +}
    +
    +type HostVsanSystem struct {
    +	Self types.ManagedObjectReference
    +
    +	Config types.VsanHostConfigInfo `mo:"config"`
    +}
    +
    +func (m HostVsanSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HostVsanSystem"] = reflect.TypeOf((*HostVsanSystem)(nil)).Elem()
    +}
    +
    +type HttpNfcLease struct {
    +	Self types.ManagedObjectReference
    +
    +	InitializeProgress int32                          `mo:"initializeProgress"`
    +	TransferProgress   int32                          `mo:"transferProgress"`
    +	Mode               string                         `mo:"mode"`
    +	Capabilities       types.HttpNfcLeaseCapabilities `mo:"capabilities"`
    +	Info               *types.HttpNfcLeaseInfo        `mo:"info"`
    +	State              types.HttpNfcLeaseState        `mo:"state"`
    +	Error              *types.LocalizedMethodFault    `mo:"error"`
    +}
    +
    +func (m HttpNfcLease) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["HttpNfcLease"] = reflect.TypeOf((*HttpNfcLease)(nil)).Elem()
    +}
    +
    +type InventoryView struct {
    +	ManagedObjectView
    +}
    +
    +func init() {
    +	t["InventoryView"] = reflect.TypeOf((*InventoryView)(nil)).Elem()
    +}
    +
    +type IoFilterManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m IoFilterManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["IoFilterManager"] = reflect.TypeOf((*IoFilterManager)(nil)).Elem()
    +}
    +
    +type IpPoolManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m IpPoolManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["IpPoolManager"] = reflect.TypeOf((*IpPoolManager)(nil)).Elem()
    +}
    +
    +type IscsiManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m IscsiManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["IscsiManager"] = reflect.TypeOf((*IscsiManager)(nil)).Elem()
    +}
    +
    +type LicenseAssignmentManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m LicenseAssignmentManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["LicenseAssignmentManager"] = reflect.TypeOf((*LicenseAssignmentManager)(nil)).Elem()
    +}
    +
    +type LicenseManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Source                   types.BaseLicenseSource            `mo:"source"`
    +	SourceAvailable          bool                               `mo:"sourceAvailable"`
    +	Diagnostics              *types.LicenseDiagnostics          `mo:"diagnostics"`
    +	FeatureInfo              []types.LicenseFeatureInfo         `mo:"featureInfo"`
    +	LicensedEdition          string                             `mo:"licensedEdition"`
    +	Licenses                 []types.LicenseManagerLicenseInfo  `mo:"licenses"`
    +	LicenseAssignmentManager *types.ManagedObjectReference      `mo:"licenseAssignmentManager"`
    +	Evaluation               types.LicenseManagerEvaluationInfo `mo:"evaluation"`
    +}
    +
    +func (m LicenseManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["LicenseManager"] = reflect.TypeOf((*LicenseManager)(nil)).Elem()
    +}
    +
    +type ListView struct {
    +	ManagedObjectView
    +}
    +
    +func init() {
    +	t["ListView"] = reflect.TypeOf((*ListView)(nil)).Elem()
    +}
    +
    +type LocalizationManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Catalog []types.LocalizationManagerMessageCatalog `mo:"catalog"`
    +}
    +
    +func (m LocalizationManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["LocalizationManager"] = reflect.TypeOf((*LocalizationManager)(nil)).Elem()
    +}
    +
    +type ManagedEntity struct {
    +	ExtensibleManagedObject
    +
    +	Parent              *types.ManagedObjectReference  `mo:"parent"`
    +	CustomValue         []types.BaseCustomFieldValue   `mo:"customValue"`
    +	OverallStatus       types.ManagedEntityStatus      `mo:"overallStatus"`
    +	ConfigStatus        types.ManagedEntityStatus      `mo:"configStatus"`
    +	ConfigIssue         []types.BaseEvent              `mo:"configIssue"`
    +	EffectiveRole       []int32                        `mo:"effectiveRole"`
    +	Permission          []types.Permission             `mo:"permission"`
    +	Name                string                         `mo:"name"`
    +	DisabledMethod      []string                       `mo:"disabledMethod"`
    +	RecentTask          []types.ManagedObjectReference `mo:"recentTask"`
    +	DeclaredAlarmState  []types.AlarmState             `mo:"declaredAlarmState"`
    +	TriggeredAlarmState []types.AlarmState             `mo:"triggeredAlarmState"`
    +	AlarmActionsEnabled *bool                          `mo:"alarmActionsEnabled"`
    +	Tag                 []types.Tag                    `mo:"tag"`
    +}
    +
    +func init() {
    +	t["ManagedEntity"] = reflect.TypeOf((*ManagedEntity)(nil)).Elem()
    +}
    +
    +type ManagedObjectView struct {
    +	Self types.ManagedObjectReference
    +
    +	View []types.ManagedObjectReference `mo:"view"`
    +}
    +
    +func (m ManagedObjectView) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ManagedObjectView"] = reflect.TypeOf((*ManagedObjectView)(nil)).Elem()
    +}
    +
    +type MessageBusProxy struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m MessageBusProxy) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["MessageBusProxy"] = reflect.TypeOf((*MessageBusProxy)(nil)).Elem()
    +}
    +
    +type Network struct {
    +	ManagedEntity
    +
    +	Name    string                         `mo:"name"`
    +	Summary types.BaseNetworkSummary       `mo:"summary"`
    +	Host    []types.ManagedObjectReference `mo:"host"`
    +	Vm      []types.ManagedObjectReference `mo:"vm"`
    +}
    +
    +func (m *Network) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["Network"] = reflect.TypeOf((*Network)(nil)).Elem()
    +}
    +
    +type OpaqueNetwork struct {
    +	Network
    +
    +	Capability  *types.OpaqueNetworkCapability `mo:"capability"`
    +	ExtraConfig []types.BaseOptionValue        `mo:"extraConfig"`
    +}
    +
    +func init() {
    +	t["OpaqueNetwork"] = reflect.TypeOf((*OpaqueNetwork)(nil)).Elem()
    +}
    +
    +type OptionManager struct {
    +	Self types.ManagedObjectReference
    +
    +	SupportedOption []types.OptionDef       `mo:"supportedOption"`
    +	Setting         []types.BaseOptionValue `mo:"setting"`
    +}
    +
    +func (m OptionManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["OptionManager"] = reflect.TypeOf((*OptionManager)(nil)).Elem()
    +}
    +
    +type OverheadMemoryManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m OverheadMemoryManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["OverheadMemoryManager"] = reflect.TypeOf((*OverheadMemoryManager)(nil)).Elem()
    +}
    +
    +type OvfManager struct {
    +	Self types.ManagedObjectReference
    +
    +	OvfImportOption []types.OvfOptionInfo `mo:"ovfImportOption"`
    +	OvfExportOption []types.OvfOptionInfo `mo:"ovfExportOption"`
    +}
    +
    +func (m OvfManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["OvfManager"] = reflect.TypeOf((*OvfManager)(nil)).Elem()
    +}
    +
    +type PerformanceManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Description        types.PerformanceDescription `mo:"description"`
    +	HistoricalInterval []types.PerfInterval         `mo:"historicalInterval"`
    +	PerfCounter        []types.PerfCounterInfo      `mo:"perfCounter"`
    +}
    +
    +func (m PerformanceManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["PerformanceManager"] = reflect.TypeOf((*PerformanceManager)(nil)).Elem()
    +}
    +
    +type Profile struct {
    +	Self types.ManagedObjectReference
    +
    +	Config           types.BaseProfileConfigInfo    `mo:"config"`
    +	Description      *types.ProfileDescription      `mo:"description"`
    +	Name             string                         `mo:"name"`
    +	CreatedTime      time.Time                      `mo:"createdTime"`
    +	ModifiedTime     time.Time                      `mo:"modifiedTime"`
    +	Entity           []types.ManagedObjectReference `mo:"entity"`
    +	ComplianceStatus string                         `mo:"complianceStatus"`
    +}
    +
    +func (m Profile) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["Profile"] = reflect.TypeOf((*Profile)(nil)).Elem()
    +}
    +
    +type ProfileComplianceManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m ProfileComplianceManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ProfileComplianceManager"] = reflect.TypeOf((*ProfileComplianceManager)(nil)).Elem()
    +}
    +
    +type ProfileManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Profile []types.ManagedObjectReference `mo:"profile"`
    +}
    +
    +func (m ProfileManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ProfileManager"] = reflect.TypeOf((*ProfileManager)(nil)).Elem()
    +}
    +
    +type PropertyCollector struct {
    +	Self types.ManagedObjectReference
    +
    +	Filter []types.ManagedObjectReference `mo:"filter"`
    +}
    +
    +func (m PropertyCollector) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["PropertyCollector"] = reflect.TypeOf((*PropertyCollector)(nil)).Elem()
    +}
    +
    +type PropertyFilter struct {
    +	Self types.ManagedObjectReference
    +
    +	Spec           types.PropertyFilterSpec `mo:"spec"`
    +	PartialUpdates bool                     `mo:"partialUpdates"`
    +}
    +
    +func (m PropertyFilter) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["PropertyFilter"] = reflect.TypeOf((*PropertyFilter)(nil)).Elem()
    +}
    +
    +type ResourcePlanningManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m ResourcePlanningManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ResourcePlanningManager"] = reflect.TypeOf((*ResourcePlanningManager)(nil)).Elem()
    +}
    +
    +type ResourcePool struct {
    +	ManagedEntity
    +
    +	Summary            types.BaseResourcePoolSummary  `mo:"summary"`
    +	Runtime            types.ResourcePoolRuntimeInfo  `mo:"runtime"`
    +	Owner              types.ManagedObjectReference   `mo:"owner"`
    +	ResourcePool       []types.ManagedObjectReference `mo:"resourcePool"`
    +	Vm                 []types.ManagedObjectReference `mo:"vm"`
    +	Config             types.ResourceConfigSpec       `mo:"config"`
    +	ChildConfiguration []types.ResourceConfigSpec     `mo:"childConfiguration"`
    +}
    +
    +func (m *ResourcePool) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["ResourcePool"] = reflect.TypeOf((*ResourcePool)(nil)).Elem()
    +}
    +
    +type ScheduledTask struct {
    +	ExtensibleManagedObject
    +
    +	Info types.ScheduledTaskInfo `mo:"info"`
    +}
    +
    +func init() {
    +	t["ScheduledTask"] = reflect.TypeOf((*ScheduledTask)(nil)).Elem()
    +}
    +
    +type ScheduledTaskManager struct {
    +	Self types.ManagedObjectReference
    +
    +	ScheduledTask []types.ManagedObjectReference `mo:"scheduledTask"`
    +	Description   types.ScheduledTaskDescription `mo:"description"`
    +}
    +
    +func (m ScheduledTaskManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ScheduledTaskManager"] = reflect.TypeOf((*ScheduledTaskManager)(nil)).Elem()
    +}
    +
    +type SearchIndex struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m SearchIndex) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["SearchIndex"] = reflect.TypeOf((*SearchIndex)(nil)).Elem()
    +}
    +
    +type ServiceInstance struct {
    +	Self types.ManagedObjectReference
    +
    +	ServerClock time.Time            `mo:"serverClock"`
    +	Capability  types.Capability     `mo:"capability"`
    +	Content     types.ServiceContent `mo:"content"`
    +}
    +
    +func (m ServiceInstance) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ServiceInstance"] = reflect.TypeOf((*ServiceInstance)(nil)).Elem()
    +}
    +
    +type ServiceManager struct {
    +	Self types.ManagedObjectReference
    +
    +	Service []types.ServiceManagerServiceInfo `mo:"service"`
    +}
    +
    +func (m ServiceManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ServiceManager"] = reflect.TypeOf((*ServiceManager)(nil)).Elem()
    +}
    +
    +type SessionManager struct {
    +	Self types.ManagedObjectReference
    +
    +	SessionList         []types.UserSession `mo:"sessionList"`
    +	CurrentSession      *types.UserSession  `mo:"currentSession"`
    +	Message             *string             `mo:"message"`
    +	MessageLocaleList   []string            `mo:"messageLocaleList"`
    +	SupportedLocaleList []string            `mo:"supportedLocaleList"`
    +	DefaultLocale       string              `mo:"defaultLocale"`
    +}
    +
    +func (m SessionManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["SessionManager"] = reflect.TypeOf((*SessionManager)(nil)).Elem()
    +}
    +
    +type SimpleCommand struct {
    +	Self types.ManagedObjectReference
    +
    +	EncodingType types.SimpleCommandEncoding     `mo:"encodingType"`
    +	Entity       types.ServiceManagerServiceInfo `mo:"entity"`
    +}
    +
    +func (m SimpleCommand) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["SimpleCommand"] = reflect.TypeOf((*SimpleCommand)(nil)).Elem()
    +}
    +
    +type StoragePod struct {
    +	Folder
    +
    +	Summary            *types.StoragePodSummary  `mo:"summary"`
    +	PodStorageDrsEntry *types.PodStorageDrsEntry `mo:"podStorageDrsEntry"`
    +}
    +
    +func init() {
    +	t["StoragePod"] = reflect.TypeOf((*StoragePod)(nil)).Elem()
    +}
    +
    +type StorageResourceManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m StorageResourceManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["StorageResourceManager"] = reflect.TypeOf((*StorageResourceManager)(nil)).Elem()
    +}
    +
    +type Task struct {
    +	ExtensibleManagedObject
    +
    +	Info types.TaskInfo `mo:"info"`
    +}
    +
    +func init() {
    +	t["Task"] = reflect.TypeOf((*Task)(nil)).Elem()
    +}
    +
    +type TaskHistoryCollector struct {
    +	HistoryCollector
    +
    +	LatestPage []types.TaskInfo `mo:"latestPage"`
    +}
    +
    +func init() {
    +	t["TaskHistoryCollector"] = reflect.TypeOf((*TaskHistoryCollector)(nil)).Elem()
    +}
    +
    +type TaskManager struct {
    +	Self types.ManagedObjectReference
    +
    +	RecentTask   []types.ManagedObjectReference `mo:"recentTask"`
    +	Description  types.TaskDescription          `mo:"description"`
    +	MaxCollector int32                          `mo:"maxCollector"`
    +}
    +
    +func (m TaskManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["TaskManager"] = reflect.TypeOf((*TaskManager)(nil)).Elem()
    +}
    +
    +type UserDirectory struct {
    +	Self types.ManagedObjectReference
    +
    +	DomainList []string `mo:"domainList"`
    +}
    +
    +func (m UserDirectory) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["UserDirectory"] = reflect.TypeOf((*UserDirectory)(nil)).Elem()
    +}
    +
    +type VStorageObjectManagerBase struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m VStorageObjectManagerBase) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["VStorageObjectManagerBase"] = reflect.TypeOf((*VStorageObjectManagerBase)(nil)).Elem()
    +}
    +
    +type VcenterVStorageObjectManager struct {
    +	VStorageObjectManagerBase
    +}
    +
    +func init() {
    +	t["VcenterVStorageObjectManager"] = reflect.TypeOf((*VcenterVStorageObjectManager)(nil)).Elem()
    +}
    +
    +type View struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m View) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["View"] = reflect.TypeOf((*View)(nil)).Elem()
    +}
    +
    +type ViewManager struct {
    +	Self types.ManagedObjectReference
    +
    +	ViewList []types.ManagedObjectReference `mo:"viewList"`
    +}
    +
    +func (m ViewManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["ViewManager"] = reflect.TypeOf((*ViewManager)(nil)).Elem()
    +}
    +
    +type VirtualApp struct {
    +	ResourcePool
    +
    +	ParentFolder *types.ManagedObjectReference  `mo:"parentFolder"`
    +	Datastore    []types.ManagedObjectReference `mo:"datastore"`
    +	Network      []types.ManagedObjectReference `mo:"network"`
    +	VAppConfig   *types.VAppConfigInfo          `mo:"vAppConfig"`
    +	ParentVApp   *types.ManagedObjectReference  `mo:"parentVApp"`
    +	ChildLink    []types.VirtualAppLinkInfo     `mo:"childLink"`
    +}
    +
    +func init() {
    +	t["VirtualApp"] = reflect.TypeOf((*VirtualApp)(nil)).Elem()
    +}
    +
    +type VirtualDiskManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m VirtualDiskManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["VirtualDiskManager"] = reflect.TypeOf((*VirtualDiskManager)(nil)).Elem()
    +}
    +
    +type VirtualMachine struct {
    +	ManagedEntity
    +
    +	Capability           types.VirtualMachineCapability    `mo:"capability"`
    +	Config               *types.VirtualMachineConfigInfo   `mo:"config"`
    +	Layout               *types.VirtualMachineFileLayout   `mo:"layout"`
    +	LayoutEx             *types.VirtualMachineFileLayoutEx `mo:"layoutEx"`
    +	Storage              *types.VirtualMachineStorageInfo  `mo:"storage"`
    +	EnvironmentBrowser   types.ManagedObjectReference      `mo:"environmentBrowser"`
    +	ResourcePool         *types.ManagedObjectReference     `mo:"resourcePool"`
    +	ParentVApp           *types.ManagedObjectReference     `mo:"parentVApp"`
    +	ResourceConfig       *types.ResourceConfigSpec         `mo:"resourceConfig"`
    +	Runtime              types.VirtualMachineRuntimeInfo   `mo:"runtime"`
    +	Guest                *types.GuestInfo                  `mo:"guest"`
    +	Summary              types.VirtualMachineSummary       `mo:"summary"`
    +	Datastore            []types.ManagedObjectReference    `mo:"datastore"`
    +	Network              []types.ManagedObjectReference    `mo:"network"`
    +	Snapshot             *types.VirtualMachineSnapshotInfo `mo:"snapshot"`
    +	RootSnapshot         []types.ManagedObjectReference    `mo:"rootSnapshot"`
    +	GuestHeartbeatStatus types.ManagedEntityStatus         `mo:"guestHeartbeatStatus"`
    +}
    +
    +func (m *VirtualMachine) Entity() *ManagedEntity {
    +	return &m.ManagedEntity
    +}
    +
    +func init() {
    +	t["VirtualMachine"] = reflect.TypeOf((*VirtualMachine)(nil)).Elem()
    +}
    +
    +type VirtualMachineCompatibilityChecker struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m VirtualMachineCompatibilityChecker) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["VirtualMachineCompatibilityChecker"] = reflect.TypeOf((*VirtualMachineCompatibilityChecker)(nil)).Elem()
    +}
    +
    +type VirtualMachineProvisioningChecker struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m VirtualMachineProvisioningChecker) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["VirtualMachineProvisioningChecker"] = reflect.TypeOf((*VirtualMachineProvisioningChecker)(nil)).Elem()
    +}
    +
    +type VirtualMachineSnapshot struct {
    +	ExtensibleManagedObject
    +
    +	Config        types.VirtualMachineConfigInfo `mo:"config"`
    +	ChildSnapshot []types.ManagedObjectReference `mo:"childSnapshot"`
    +	Vm            types.ManagedObjectReference   `mo:"vm"`
    +}
    +
    +func init() {
    +	t["VirtualMachineSnapshot"] = reflect.TypeOf((*VirtualMachineSnapshot)(nil)).Elem()
    +}
    +
    +type VirtualizationManager struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m VirtualizationManager) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["VirtualizationManager"] = reflect.TypeOf((*VirtualizationManager)(nil)).Elem()
    +}
    +
    +type VmwareDistributedVirtualSwitch struct {
    +	DistributedVirtualSwitch
    +}
    +
    +func init() {
    +	t["VmwareDistributedVirtualSwitch"] = reflect.TypeOf((*VmwareDistributedVirtualSwitch)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystem struct {
    +	Self types.ManagedObjectReference
    +}
    +
    +func (m VsanUpgradeSystem) Reference() types.ManagedObjectReference {
    +	return m.Self
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystem"] = reflect.TypeOf((*VsanUpgradeSystem)(nil)).Elem()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/reference.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/reference.go
    new file mode 100644
    index 00000000000..465edbe8072
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/reference.go
    @@ -0,0 +1,26 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package mo
    +
    +import "github.com/vmware/govmomi/vim25/types"
    +
    +// Reference is the interface that is implemented by all the managed objects
    +// defined in this package. It specifies that these managed objects have a
    +// function that returns the managed object reference to themselves.
    +type Reference interface {
    +	Reference() types.ManagedObjectReference
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/registry.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/registry.go
    new file mode 100644
    index 00000000000..deacf508bba
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/registry.go
    @@ -0,0 +1,21 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package mo
    +
    +import "reflect"
    +
    +var t = map[string]reflect.Type{}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/retrieve.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/retrieve.go
    new file mode 100644
    index 00000000000..e7ffc32cec1
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/retrieve.go
    @@ -0,0 +1,174 @@
    +/*
    +Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package mo
    +
    +import (
    +	"context"
    +	"reflect"
    +
    +	"github.com/vmware/govmomi/vim25/methods"
    +	"github.com/vmware/govmomi/vim25/soap"
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +func ignoreMissingProperty(ref types.ManagedObjectReference, p types.MissingProperty) bool {
    +	switch ref.Type {
    +	case "VirtualMachine":
    +		switch p.Path {
    +		case "environmentBrowser":
    +			// See https://github.com/vmware/govmomi/pull/242
    +			return true
    +		case "alarmActionsEnabled":
    +			// Seen with vApp child VM
    +			return true
    +		}
    +	}
    +
    +	return false
    +}
    +
    +// ObjectContentToType loads an ObjectContent value into the value it
    +// represents. If the ObjectContent value has a non-empty 'MissingSet' field,
    +// it returns the first fault it finds there as error. If the 'MissingSet'
    +// field is empty, it returns a pointer to a reflect.Value. It handles contain
    +// nested properties, such as 'guest.ipAddress' or 'config.hardware'.
    +func ObjectContentToType(o types.ObjectContent) (interface{}, error) {
    +	// Expect no properties in the missing set
    +	for _, p := range o.MissingSet {
    +		if ignoreMissingProperty(o.Obj, p) {
    +			continue
    +		}
    +
    +		return nil, soap.WrapVimFault(p.Fault.Fault)
    +	}
    +
    +	ti := typeInfoForType(o.Obj.Type)
    +	v, err := ti.LoadFromObjectContent(o)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	return v.Elem().Interface(), nil
    +}
    +
    +// LoadRetrievePropertiesResponse converts the response of a call to
    +// RetrieveProperties to one or more managed objects.
    +func LoadRetrievePropertiesResponse(res *types.RetrievePropertiesResponse, dst interface{}) error {
    +	rt := reflect.TypeOf(dst)
    +	if rt == nil || rt.Kind() != reflect.Ptr {
    +		panic("need pointer")
    +	}
    +
    +	rv := reflect.ValueOf(dst).Elem()
    +	if !rv.CanSet() {
    +		panic("cannot set dst")
    +	}
    +
    +	isSlice := false
    +	switch rt.Elem().Kind() {
    +	case reflect.Struct:
    +	case reflect.Slice:
    +		isSlice = true
    +	default:
    +		panic("unexpected type")
    +	}
    +
    +	if isSlice {
    +		for _, p := range res.Returnval {
    +			v, err := ObjectContentToType(p)
    +			if err != nil {
    +				return err
    +			}
    +
    +			vt := reflect.TypeOf(v)
    +
    +			if !rv.Type().AssignableTo(vt) {
    +				// For example: dst is []ManagedEntity, res is []HostSystem
    +				if field, ok := vt.FieldByName(rt.Elem().Elem().Name()); ok && field.Anonymous {
    +					rv.Set(reflect.Append(rv, reflect.ValueOf(v).FieldByIndex(field.Index)))
    +					continue
    +				}
    +			}
    +
    +			rv.Set(reflect.Append(rv, reflect.ValueOf(v)))
    +		}
    +	} else {
    +		switch len(res.Returnval) {
    +		case 0:
    +		case 1:
    +			v, err := ObjectContentToType(res.Returnval[0])
    +			if err != nil {
    +				return err
    +			}
    +
    +			vt := reflect.TypeOf(v)
    +
    +			if !rv.Type().AssignableTo(vt) {
    +				// For example: dst is ComputeResource, res is ClusterComputeResource
    +				if field, ok := vt.FieldByName(rt.Elem().Name()); ok && field.Anonymous {
    +					rv.Set(reflect.ValueOf(v).FieldByIndex(field.Index))
    +					return nil
    +				}
    +			}
    +
    +			rv.Set(reflect.ValueOf(v))
    +		default:
    +			// If dst is not a slice, expect to receive 0 or 1 results
    +			panic("more than 1 result")
    +		}
    +	}
    +
    +	return nil
    +}
    +
    +// RetrievePropertiesForRequest calls the RetrieveProperties method with the
    +// specified request and decodes the response struct into the value pointed to
    +// by dst.
    +func RetrievePropertiesForRequest(ctx context.Context, r soap.RoundTripper, req types.RetrieveProperties, dst interface{}) error {
    +	res, err := methods.RetrieveProperties(ctx, r, &req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return LoadRetrievePropertiesResponse(res, dst)
    +}
    +
    +// RetrieveProperties retrieves the properties of the managed object specified
    +// as obj and decodes the response struct into the value pointed to by dst.
    +func RetrieveProperties(ctx context.Context, r soap.RoundTripper, pc, obj types.ManagedObjectReference, dst interface{}) error {
    +	req := types.RetrieveProperties{
    +		This: pc,
    +		SpecSet: []types.PropertyFilterSpec{
    +			{
    +				ObjectSet: []types.ObjectSpec{
    +					{
    +						Obj:  obj,
    +						Skip: types.NewBool(false),
    +					},
    +				},
    +				PropSet: []types.PropertySpec{
    +					{
    +						All:  types.NewBool(true),
    +						Type: obj.Type,
    +					},
    +				},
    +			},
    +		},
    +	}
    +
    +	return RetrievePropertiesForRequest(ctx, r, req, dst)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/type_info.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/type_info.go
    new file mode 100644
    index 00000000000..0c9e5b03488
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/mo/type_info.go
    @@ -0,0 +1,247 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package mo
    +
    +import (
    +	"fmt"
    +	"reflect"
    +	"regexp"
    +	"strings"
    +	"sync"
    +
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type typeInfo struct {
    +	typ reflect.Type
    +
    +	// Field indices of "Self" field.
    +	self []int
    +
    +	// Map property names to field indices.
    +	props map[string][]int
    +}
    +
    +var typeInfoLock sync.RWMutex
    +var typeInfoMap = make(map[string]*typeInfo)
    +
    +func typeInfoForType(tname string) *typeInfo {
    +	typeInfoLock.RLock()
    +	ti, ok := typeInfoMap[tname]
    +	typeInfoLock.RUnlock()
    +
    +	if ok {
    +		return ti
    +	}
    +
    +	// Create new typeInfo for type.
    +	if typ, ok := t[tname]; !ok {
    +		panic("unknown type: " + tname)
    +	} else {
    +		// Multiple routines may race to set it, but the result is the same.
    +		typeInfoLock.Lock()
    +		ti = newTypeInfo(typ)
    +		typeInfoMap[tname] = ti
    +		typeInfoLock.Unlock()
    +	}
    +
    +	return ti
    +}
    +
    +func newTypeInfo(typ reflect.Type) *typeInfo {
    +	t := typeInfo{
    +		typ:   typ,
    +		props: make(map[string][]int),
    +	}
    +
    +	t.build(typ, "", []int{})
    +
    +	return &t
    +}
    +
    +var managedObjectRefType = reflect.TypeOf((*types.ManagedObjectReference)(nil)).Elem()
    +
    +func buildName(fn string, f reflect.StructField) string {
    +	if fn != "" {
    +		fn += "."
    +	}
    +
    +	motag := f.Tag.Get("mo")
    +	if motag != "" {
    +		return fn + motag
    +	}
    +
    +	xmltag := f.Tag.Get("xml")
    +	if xmltag != "" {
    +		tokens := strings.Split(xmltag, ",")
    +		if tokens[0] != "" {
    +			return fn + tokens[0]
    +		}
    +	}
    +
    +	return ""
    +}
    +
    +func (t *typeInfo) build(typ reflect.Type, fn string, fi []int) {
    +	if typ.Kind() == reflect.Ptr {
    +		typ = typ.Elem()
    +	}
    +
    +	if typ.Kind() != reflect.Struct {
    +		panic("need struct")
    +	}
    +
    +	for i := 0; i < typ.NumField(); i++ {
    +		f := typ.Field(i)
    +		ftyp := f.Type
    +
    +		// Copy field indices so they can be passed along.
    +		fic := make([]int, len(fi)+1)
    +		copy(fic, fi)
    +		fic[len(fi)] = i
    +
    +		// Recurse into embedded field.
    +		if f.Anonymous {
    +			t.build(ftyp, fn, fic)
    +			continue
    +		}
    +
    +		// Top level type has a "Self" field.
    +		if f.Name == "Self" && ftyp == managedObjectRefType {
    +			t.self = fic
    +			continue
    +		}
    +
    +		fnc := buildName(fn, f)
    +		if fnc == "" {
    +			continue
    +		}
    +
    +		t.props[fnc] = fic
    +
    +		// Dereference pointer.
    +		if ftyp.Kind() == reflect.Ptr {
    +			ftyp = ftyp.Elem()
    +		}
    +
    +		// Slices are not addressable by `foo.bar.qux`.
    +		if ftyp.Kind() == reflect.Slice {
    +			continue
    +		}
    +
    +		// Skip the managed reference type.
    +		if ftyp == managedObjectRefType {
    +			continue
    +		}
    +
    +		// Recurse into structs.
    +		if ftyp.Kind() == reflect.Struct {
    +			t.build(ftyp, fnc, fic)
    +		}
    +	}
    +}
    +
    +// assignValue assignes a value 'pv' to the struct pointed to by 'val', given a
    +// slice of field indices. It recurses into the struct until it finds the field
    +// specified by the indices. It creates new values for pointer types where
    +// needed.
    +func assignValue(val reflect.Value, fi []int, pv reflect.Value) {
    +	// Create new value if necessary.
    +	if val.Kind() == reflect.Ptr {
    +		if val.IsNil() {
    +			val.Set(reflect.New(val.Type().Elem()))
    +		}
    +
    +		val = val.Elem()
    +	}
    +
    +	rv := val.Field(fi[0])
    +	fi = fi[1:]
    +	if len(fi) == 0 {
    +		rt := rv.Type()
    +		pt := pv.Type()
    +
    +		// If type is a pointer, create new instance of type.
    +		if rt.Kind() == reflect.Ptr {
    +			rv.Set(reflect.New(rt.Elem()))
    +			rv = rv.Elem()
    +			rt = rv.Type()
    +		}
    +
    +		// If type is an interface, check if pv implements it.
    +		if rt.Kind() == reflect.Interface && !pt.Implements(rt) {
    +			// Check if pointer to pv implements it.
    +			if reflect.PtrTo(pt).Implements(rt) {
    +				npv := reflect.New(pt)
    +				npv.Elem().Set(pv)
    +				pv = npv
    +				pt = pv.Type()
    +			} else {
    +				panic(fmt.Sprintf("type %s doesn't implement %s", pt.Name(), rt.Name()))
    +			}
    +		}
    +
    +		if pt.AssignableTo(rt) {
    +			rv.Set(pv)
    +		} else if rt.ConvertibleTo(pt) {
    +			rv.Set(pv.Convert(rt))
    +		} else {
    +			panic(fmt.Sprintf("cannot assign %s (%s) to %s (%s)", rt.Name(), rt.Kind(), pt.Name(), pt.Kind()))
    +		}
    +
    +		return
    +	}
    +
    +	assignValue(rv, fi, pv)
    +}
    +
    +var arrayOfRegexp = regexp.MustCompile("ArrayOf(.*)$")
    +
    +func anyTypeToValue(t interface{}) reflect.Value {
    +	rt := reflect.TypeOf(t)
    +	rv := reflect.ValueOf(t)
    +
    +	// Dereference if ArrayOfXYZ type
    +	m := arrayOfRegexp.FindStringSubmatch(rt.Name())
    +	if len(m) > 0 {
    +		// ArrayOfXYZ type has single field named XYZ
    +		rv = rv.FieldByName(m[1])
    +		if !rv.IsValid() {
    +			panic(fmt.Sprintf("expected %s type to have field %s", m[0], m[1]))
    +		}
    +	}
    +
    +	return rv
    +}
    +
    +// LoadObjectFromContent loads properties from the 'PropSet' field in the
    +// specified ObjectContent value into the value it represents, which is
    +// returned as a reflect.Value.
    +func (t *typeInfo) LoadFromObjectContent(o types.ObjectContent) (reflect.Value, error) {
    +	v := reflect.New(t.typ)
    +	assignValue(v, t.self, reflect.ValueOf(o.Obj))
    +
    +	for _, p := range o.PropSet {
    +		rv, ok := t.props[p.Name]
    +		if !ok {
    +			continue
    +		}
    +		assignValue(v, rv, anyTypeToValue(p.Val))
    +	}
    +
    +	return v, nil
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/aggregator.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/aggregator.go
    new file mode 100644
    index 00000000000..24cb3d59a97
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/aggregator.go
    @@ -0,0 +1,73 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package progress
    +
    +import "sync"
    +
    +type Aggregator struct {
    +	downstream Sinker
    +	upstream   chan (<-chan Report)
    +
    +	done chan struct{}
    +	w    sync.WaitGroup
    +}
    +
    +func NewAggregator(s Sinker) *Aggregator {
    +	a := &Aggregator{
    +		downstream: s,
    +		upstream:   make(chan (<-chan Report)),
    +
    +		done: make(chan struct{}),
    +	}
    +
    +	a.w.Add(1)
    +	go a.loop()
    +
    +	return a
    +}
    +
    +func (a *Aggregator) loop() {
    +	defer a.w.Done()
    +
    +	dch := a.downstream.Sink()
    +	defer close(dch)
    +
    +	for {
    +		select {
    +		case uch := <-a.upstream:
    +			// Drain upstream channel
    +			for e := range uch {
    +				dch <- e
    +			}
    +		case <-a.done:
    +			return
    +		}
    +	}
    +}
    +
    +func (a *Aggregator) Sink() chan<- Report {
    +	ch := make(chan Report)
    +	a.upstream <- ch
    +	return ch
    +}
    +
    +// Done marks the aggregator as done. No more calls to Sink() may be made and
    +// the downstream progress report channel will be closed when Done() returns.
    +func (a *Aggregator) Done() {
    +	close(a.done)
    +	a.w.Wait()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/doc.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/doc.go
    new file mode 100644
    index 00000000000..a0458dd5cc9
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/doc.go
    @@ -0,0 +1,32 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package progress
    +
    +/*
    +The progress package contains functionality to deal with progress reporting.
    +The functionality is built to serve progress reporting for infrastructure
    +operations when talking the vSphere API, but is generic enough to be used
    +elsewhere.
    +
    +At the core of this progress reporting API lies the Sinker interface. This
    +interface is implemented by any object that can act as a sink for progress
    +reports. Callers of the Sink() function receives a send-only channel for
    +progress reports. They are responsible for closing the channel when done.
    +This semantic makes it easy to keep track of multiple progress report channels;
    +they are only created when Sink() is called and assumed closed when any
    +function that receives a Sinker parameter returns.
    +*/
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/prefix.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/prefix.go
    new file mode 100644
    index 00000000000..4f842ad951f
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/prefix.go
    @@ -0,0 +1,54 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package progress
    +
    +import "fmt"
    +
    +type prefixedReport struct {
    +	Report
    +	prefix string
    +}
    +
    +func (r prefixedReport) Detail() string {
    +	if d := r.Report.Detail(); d != "" {
    +		return fmt.Sprintf("%s: %s", r.prefix, d)
    +	}
    +
    +	return r.prefix
    +}
    +
    +func prefixLoop(upstream <-chan Report, downstream chan<- Report, prefix string) {
    +	defer close(downstream)
    +
    +	for r := range upstream {
    +		downstream <- prefixedReport{
    +			Report: r,
    +			prefix: prefix,
    +		}
    +	}
    +}
    +
    +func Prefix(s Sinker, prefix string) Sinker {
    +	fn := func() chan<- Report {
    +		upstream := make(chan Report)
    +		downstream := s.Sink()
    +		go prefixLoop(upstream, downstream, prefix)
    +		return upstream
    +	}
    +
    +	return SinkFunc(fn)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/reader.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/reader.go
    new file mode 100644
    index 00000000000..9d67bc65258
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/reader.go
    @@ -0,0 +1,185 @@
    +/*
    +Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package progress
    +
    +import (
    +	"container/list"
    +	"context"
    +	"fmt"
    +	"io"
    +	"sync/atomic"
    +	"time"
    +)
    +
    +type readerReport struct {
    +	t time.Time
    +
    +	pos  int64
    +	size int64
    +	bps  *uint64
    +
    +	err error
    +}
    +
    +func (r readerReport) Percentage() float32 {
    +	return 100.0 * float32(r.pos) / float32(r.size)
    +}
    +
    +func (r readerReport) Detail() string {
    +	const (
    +		KiB = 1024
    +		MiB = 1024 * KiB
    +		GiB = 1024 * MiB
    +	)
    +
    +	// Use the reader's bps field, so this report returns an up-to-date number.
    +	//
    +	// For example: if there hasn't been progress for the last 5 seconds, the
    +	// most recent report should return "0B/s".
    +	//
    +	bps := atomic.LoadUint64(r.bps)
    +
    +	switch {
    +	case bps >= GiB:
    +		return fmt.Sprintf("%.1fGiB/s", float32(bps)/float32(GiB))
    +	case bps >= MiB:
    +		return fmt.Sprintf("%.1fMiB/s", float32(bps)/float32(MiB))
    +	case bps >= KiB:
    +		return fmt.Sprintf("%.1fKiB/s", float32(bps)/float32(KiB))
    +	default:
    +		return fmt.Sprintf("%dB/s", bps)
    +	}
    +}
    +
    +func (p readerReport) Error() error {
    +	return p.err
    +}
    +
    +// reader wraps an io.Reader and sends a progress report over a channel for
    +// every read it handles.
    +type reader struct {
    +	r io.Reader
    +
    +	pos  int64
    +	size int64
    +	bps  uint64
    +
    +	ch  chan<- Report
    +	ctx context.Context
    +}
    +
    +func NewReader(ctx context.Context, s Sinker, r io.Reader, size int64) *reader {
    +	pr := reader{
    +		r:    r,
    +		ctx:  ctx,
    +		size: size,
    +	}
    +
    +	// Reports must be sent downstream and to the bps computation loop.
    +	pr.ch = Tee(s, newBpsLoop(&pr.bps)).Sink()
    +
    +	return &pr
    +}
    +
    +// Read calls the Read function on the underlying io.Reader. Additionally,
    +// every read causes a progress report to be sent to the progress reader's
    +// underlying channel.
    +func (r *reader) Read(b []byte) (int, error) {
    +	n, err := r.r.Read(b)
    +	r.pos += int64(n)
    +
    +	if err != nil && err != io.EOF {
    +		return n, err
    +	}
    +
    +	q := readerReport{
    +		t:    time.Now(),
    +		pos:  r.pos,
    +		size: r.size,
    +		bps:  &r.bps,
    +	}
    +
    +	select {
    +	case r.ch <- q:
    +	case <-r.ctx.Done():
    +	}
    +
    +	return n, err
    +}
    +
    +// Done marks the progress reader as done, optionally including an error in the
    +// progress report. After sending it, the underlying channel is closed.
    +func (r *reader) Done(err error) {
    +	q := readerReport{
    +		t:    time.Now(),
    +		pos:  r.pos,
    +		size: r.size,
    +		bps:  &r.bps,
    +		err:  err,
    +	}
    +
    +	select {
    +	case r.ch <- q:
    +		close(r.ch)
    +	case <-r.ctx.Done():
    +	}
    +}
    +
    +// newBpsLoop returns a sink that monitors and stores throughput.
    +func newBpsLoop(dst *uint64) SinkFunc {
    +	fn := func() chan<- Report {
    +		sink := make(chan Report)
    +		go bpsLoop(sink, dst)
    +		return sink
    +	}
    +
    +	return fn
    +}
    +
    +func bpsLoop(ch <-chan Report, dst *uint64) {
    +	l := list.New()
    +
    +	for {
    +		var tch <-chan time.Time
    +
    +		// Setup timer for front of list to become stale.
    +		if e := l.Front(); e != nil {
    +			dt := time.Second - time.Now().Sub(e.Value.(readerReport).t)
    +			tch = time.After(dt)
    +		}
    +
    +		select {
    +		case q, ok := <-ch:
    +			if !ok {
    +				return
    +			}
    +
    +			l.PushBack(q)
    +		case <-tch:
    +			l.Remove(l.Front())
    +		}
    +
    +		// Compute new bps
    +		if l.Len() == 0 {
    +			atomic.StoreUint64(dst, 0)
    +		} else {
    +			f := l.Front().Value.(readerReport)
    +			b := l.Back().Value.(readerReport)
    +			atomic.StoreUint64(dst, uint64(b.pos-f.pos))
    +		}
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/report.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/report.go
    new file mode 100644
    index 00000000000..bf80263ff5c
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/report.go
    @@ -0,0 +1,26 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package progress
    +
    +// Report defines the interface for types that can deliver progress reports.
    +// Examples include uploads/downloads in the http client and the task info
    +// field in the task managed object.
    +type Report interface {
    +	Percentage() float32
    +	Detail() string
    +	Error() error
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/scale.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/scale.go
    new file mode 100644
    index 00000000000..98808392068
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/scale.go
    @@ -0,0 +1,76 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package progress
    +
    +type scaledReport struct {
    +	Report
    +	n int
    +	i int
    +}
    +
    +func (r scaledReport) Percentage() float32 {
    +	b := 100 * float32(r.i) / float32(r.n)
    +	return b + (r.Report.Percentage() / float32(r.n))
    +}
    +
    +type scaleOne struct {
    +	s Sinker
    +	n int
    +	i int
    +}
    +
    +func (s scaleOne) Sink() chan<- Report {
    +	upstream := make(chan Report)
    +	downstream := s.s.Sink()
    +	go s.loop(upstream, downstream)
    +	return upstream
    +}
    +
    +func (s scaleOne) loop(upstream <-chan Report, downstream chan<- Report) {
    +	defer close(downstream)
    +
    +	for r := range upstream {
    +		downstream <- scaledReport{
    +			Report: r,
    +			n:      s.n,
    +			i:      s.i,
    +		}
    +	}
    +}
    +
    +type scaleMany struct {
    +	s Sinker
    +	n int
    +	i int
    +}
    +
    +func Scale(s Sinker, n int) Sinker {
    +	return &scaleMany{
    +		s: s,
    +		n: n,
    +	}
    +}
    +
    +func (s *scaleMany) Sink() chan<- Report {
    +	if s.i == s.n {
    +		s.n++
    +	}
    +
    +	ch := scaleOne{s: s.s, n: s.n, i: s.i}.Sink()
    +	s.i++
    +	return ch
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/sinker.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/sinker.go
    new file mode 100644
    index 00000000000..0bd35a47f75
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/sinker.go
    @@ -0,0 +1,33 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package progress
    +
    +// Sinker defines what is expected of a type that can act as a sink for
    +// progress reports. The semantics are as follows. If you call Sink(), you are
    +// responsible for closing the returned channel. Closing this channel means
    +// that the related task is done, or resulted in error.
    +type Sinker interface {
    +	Sink() chan<- Report
    +}
    +
    +// SinkFunc defines a function that returns a progress report channel.
    +type SinkFunc func() chan<- Report
    +
    +// Sink makes the SinkFunc implement the Sinker interface.
    +func (fn SinkFunc) Sink() chan<- Report {
    +	return fn()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/tee.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/tee.go
    new file mode 100644
    index 00000000000..ab4607842b0
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/progress/tee.go
    @@ -0,0 +1,41 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package progress
    +
    +// Tee works like Unix tee; it forwards all progress reports it receives to the
    +// specified sinks
    +func Tee(s1, s2 Sinker) Sinker {
    +	fn := func() chan<- Report {
    +		d1 := s1.Sink()
    +		d2 := s2.Sink()
    +		u := make(chan Report)
    +		go tee(u, d1, d2)
    +		return u
    +	}
    +
    +	return SinkFunc(fn)
    +}
    +
    +func tee(u <-chan Report, d1, d2 chan<- Report) {
    +	defer close(d1)
    +	defer close(d2)
    +
    +	for r := range u {
    +		d1 <- r
    +		d2 <- r
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/retry.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/retry.go
    new file mode 100644
    index 00000000000..b8807eef319
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/retry.go
    @@ -0,0 +1,105 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package vim25
    +
    +import (
    +	"context"
    +	"net"
    +	"net/url"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25/soap"
    +)
    +
    +type RetryFunc func(err error) (retry bool, delay time.Duration)
    +
    +// TemporaryNetworkError returns a RetryFunc that retries up to a maximum of n
    +// times, only if the error returned by the RoundTrip function is a temporary
    +// network error (for example: a connect timeout).
    +func TemporaryNetworkError(n int) RetryFunc {
    +	return func(err error) (retry bool, delay time.Duration) {
    +		var nerr net.Error
    +		var ok bool
    +
    +		// Never retry if this is not a network error.
    +		switch rerr := err.(type) {
    +		case *url.Error:
    +			if nerr, ok = rerr.Err.(net.Error); !ok {
    +				return false, 0
    +			}
    +		case net.Error:
    +			nerr = rerr
    +		default:
    +			return false, 0
    +		}
    +
    +		if !nerr.Temporary() {
    +			return false, 0
    +		}
    +
    +		// Don't retry if we're out of tries.
    +		if n--; n <= 0 {
    +			return false, 0
    +		}
    +
    +		return true, 0
    +	}
    +}
    +
    +type retry struct {
    +	roundTripper soap.RoundTripper
    +
    +	// fn is a custom function that is called when an error occurs.
    +	// It returns whether or not to retry, and if so, how long to
    +	// delay before retrying.
    +	fn RetryFunc
    +}
    +
    +// Retry wraps the specified soap.RoundTripper and invokes the
    +// specified RetryFunc. The RetryFunc returns whether or not to
    +// retry the call, and if so, how long to wait before retrying. If
    +// the result of this function is to not retry, the original error
    +// is returned from the RoundTrip function.
    +func Retry(roundTripper soap.RoundTripper, fn RetryFunc) soap.RoundTripper {
    +	r := &retry{
    +		roundTripper: roundTripper,
    +		fn:           fn,
    +	}
    +
    +	return r
    +}
    +
    +func (r *retry) RoundTrip(ctx context.Context, req, res soap.HasFault) error {
    +	var err error
    +
    +	for {
    +		err = r.roundTripper.RoundTrip(ctx, req, res)
    +		if err == nil {
    +			break
    +		}
    +
    +		// Invoke retry function to see if another attempt should be made.
    +		if retry, delay := r.fn(err); retry {
    +			time.Sleep(delay)
    +			continue
    +		}
    +
    +		break
    +	}
    +
    +	return err
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/client.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/client.go
    new file mode 100644
    index 00000000000..d94b6a05658
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/client.go
    @@ -0,0 +1,775 @@
    +/*
    +Copyright (c) 2014-2018 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package soap
    +
    +import (
    +	"bufio"
    +	"bytes"
    +	"context"
    +	"crypto/sha1"
    +	"crypto/tls"
    +	"crypto/x509"
    +	"encoding/json"
    +	"errors"
    +	"fmt"
    +	"io"
    +	"io/ioutil"
    +	"log"
    +	"net"
    +	"net/http"
    +	"net/http/cookiejar"
    +	"net/url"
    +	"os"
    +	"path/filepath"
    +	"regexp"
    +	"strings"
    +	"sync"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25/progress"
    +	"github.com/vmware/govmomi/vim25/types"
    +	"github.com/vmware/govmomi/vim25/xml"
    +)
    +
    +type HasFault interface {
    +	Fault() *Fault
    +}
    +
    +type RoundTripper interface {
    +	RoundTrip(ctx context.Context, req, res HasFault) error
    +}
    +
    +const (
    +	SessionCookieName = "vmware_soap_session"
    +)
    +
    +type Client struct {
    +	http.Client
    +
    +	u *url.URL
    +	k bool // Named after curl's -k flag
    +	d *debugContainer
    +	t *http.Transport
    +
    +	hostsMu sync.Mutex
    +	hosts   map[string]string
    +
    +	Namespace string // Vim namespace
    +	Version   string // Vim version
    +	UserAgent string
    +
    +	cookie string
    +}
    +
    +var schemeMatch = regexp.MustCompile(`^\w+://`)
    +
    +// ParseURL is wrapper around url.Parse, where Scheme defaults to "https" and Path defaults to "/sdk"
    +func ParseURL(s string) (*url.URL, error) {
    +	var err error
    +	var u *url.URL
    +
    +	if s != "" {
    +		// Default the scheme to https
    +		if !schemeMatch.MatchString(s) {
    +			s = "https://" + s
    +		}
    +
    +		u, err = url.Parse(s)
    +		if err != nil {
    +			return nil, err
    +		}
    +
    +		// Default the path to /sdk
    +		if u.Path == "" {
    +			u.Path = "/sdk"
    +		}
    +
    +		if u.User == nil {
    +			u.User = url.UserPassword("", "")
    +		}
    +	}
    +
    +	return u, nil
    +}
    +
    +func NewClient(u *url.URL, insecure bool) *Client {
    +	c := Client{
    +		u: u,
    +		k: insecure,
    +		d: newDebug(),
    +	}
    +
    +	// Initialize http.RoundTripper on client, so we can customize it below
    +	if t, ok := http.DefaultTransport.(*http.Transport); ok {
    +		c.t = &http.Transport{
    +			Proxy:                 t.Proxy,
    +			DialContext:           t.DialContext,
    +			MaxIdleConns:          t.MaxIdleConns,
    +			IdleConnTimeout:       t.IdleConnTimeout,
    +			TLSHandshakeTimeout:   t.TLSHandshakeTimeout,
    +			ExpectContinueTimeout: t.ExpectContinueTimeout,
    +		}
    +	} else {
    +		c.t = new(http.Transport)
    +	}
    +
    +	c.hosts = make(map[string]string)
    +	c.t.TLSClientConfig = &tls.Config{InsecureSkipVerify: c.k}
    +	// Don't bother setting DialTLS if InsecureSkipVerify=true
    +	if !c.k {
    +		c.t.DialTLS = c.dialTLS
    +	}
    +
    +	c.Client.Transport = c.t
    +	c.Client.Jar, _ = cookiejar.New(nil)
    +
    +	// Remove user information from a copy of the URL
    +	c.u = c.URL()
    +	c.u.User = nil
    +
    +	return &c
    +}
    +
    +// NewServiceClient creates a NewClient with the given URL.Path and namespace.
    +func (c *Client) NewServiceClient(path string, namespace string) *Client {
    +	vc := c.URL()
    +	u, err := url.Parse(path)
    +	if err != nil {
    +		log.Panicf("url.Parse(%q): %s", path, err)
    +	}
    +	if u.Host == "" {
    +		u.Scheme = vc.Scheme
    +		u.Host = vc.Host
    +	}
    +
    +	client := NewClient(u, c.k)
    +	client.Namespace = "urn:" + namespace
    +	if cert := c.Certificate(); cert != nil {
    +		client.SetCertificate(*cert)
    +	}
    +
    +	// Copy the trusted thumbprints
    +	c.hostsMu.Lock()
    +	for k, v := range c.hosts {
    +		client.hosts[k] = v
    +	}
    +	c.hostsMu.Unlock()
    +
    +	// Copy the cookies
    +	client.Client.Jar.SetCookies(u, c.Client.Jar.Cookies(u))
    +
    +	// Set SOAP Header cookie
    +	for _, cookie := range client.Jar.Cookies(u) {
    +		if cookie.Name == SessionCookieName {
    +			client.cookie = cookie.Value
    +			break
    +		}
    +	}
    +
    +	// Copy any query params (e.g. GOVMOMI_TUNNEL_PROXY_PORT used in testing)
    +	client.u.RawQuery = vc.RawQuery
    +
    +	return client
    +}
    +
    +// SetRootCAs defines the set of root certificate authorities
    +// that clients use when verifying server certificates.
    +// By default TLS uses the host's root CA set.
    +//
    +// See: http.Client.Transport.TLSClientConfig.RootCAs
    +func (c *Client) SetRootCAs(file string) error {
    +	pool := x509.NewCertPool()
    +
    +	for _, name := range filepath.SplitList(file) {
    +		pem, err := ioutil.ReadFile(name)
    +		if err != nil {
    +			return err
    +		}
    +
    +		pool.AppendCertsFromPEM(pem)
    +	}
    +
    +	c.t.TLSClientConfig.RootCAs = pool
    +
    +	return nil
    +}
    +
    +// Add default https port if missing
    +func hostAddr(addr string) string {
    +	_, port := splitHostPort(addr)
    +	if port == "" {
    +		return addr + ":443"
    +	}
    +	return addr
    +}
    +
    +// SetThumbprint sets the known certificate thumbprint for the given host.
    +// A custom DialTLS function is used to support thumbprint based verification.
    +// We first try tls.Dial with the default tls.Config, only falling back to thumbprint verification
    +// if it fails with an x509.UnknownAuthorityError or x509.HostnameError
    +//
    +// See: http.Client.Transport.DialTLS
    +func (c *Client) SetThumbprint(host string, thumbprint string) {
    +	host = hostAddr(host)
    +
    +	c.hostsMu.Lock()
    +	if thumbprint == "" {
    +		delete(c.hosts, host)
    +	} else {
    +		c.hosts[host] = thumbprint
    +	}
    +	c.hostsMu.Unlock()
    +}
    +
    +// Thumbprint returns the certificate thumbprint for the given host if known to this client.
    +func (c *Client) Thumbprint(host string) string {
    +	host = hostAddr(host)
    +	c.hostsMu.Lock()
    +	defer c.hostsMu.Unlock()
    +	return c.hosts[host]
    +}
    +
    +// LoadThumbprints from file with the give name.
    +// If name is empty or name does not exist this function will return nil.
    +func (c *Client) LoadThumbprints(file string) error {
    +	if file == "" {
    +		return nil
    +	}
    +
    +	for _, name := range filepath.SplitList(file) {
    +		err := c.loadThumbprints(name)
    +		if err != nil {
    +			return err
    +		}
    +	}
    +
    +	return nil
    +}
    +
    +func (c *Client) loadThumbprints(name string) error {
    +	f, err := os.Open(name)
    +	if err != nil {
    +		if os.IsNotExist(err) {
    +			return nil
    +		}
    +		return err
    +	}
    +
    +	scanner := bufio.NewScanner(f)
    +
    +	for scanner.Scan() {
    +		e := strings.SplitN(scanner.Text(), " ", 2)
    +		if len(e) != 2 {
    +			continue
    +		}
    +
    +		c.SetThumbprint(e[0], e[1])
    +	}
    +
    +	_ = f.Close()
    +
    +	return scanner.Err()
    +}
    +
    +// ThumbprintSHA1 returns the thumbprint of the given cert in the same format used by the SDK and Client.SetThumbprint.
    +//
    +// See: SSLVerifyFault.Thumbprint, SessionManagerGenericServiceTicket.Thumbprint, HostConnectSpec.SslThumbprint
    +func ThumbprintSHA1(cert *x509.Certificate) string {
    +	sum := sha1.Sum(cert.Raw)
    +	hex := make([]string, len(sum))
    +	for i, b := range sum {
    +		hex[i] = fmt.Sprintf("%02X", b)
    +	}
    +	return strings.Join(hex, ":")
    +}
    +
    +func (c *Client) dialTLS(network string, addr string) (net.Conn, error) {
    +	// Would be nice if there was a tls.Config.Verify func,
    +	// see tls.clientHandshakeState.doFullHandshake
    +
    +	conn, err := tls.Dial(network, addr, c.t.TLSClientConfig)
    +
    +	if err == nil {
    +		return conn, nil
    +	}
    +
    +	switch err.(type) {
    +	case x509.UnknownAuthorityError:
    +	case x509.HostnameError:
    +	default:
    +		return nil, err
    +	}
    +
    +	thumbprint := c.Thumbprint(addr)
    +	if thumbprint == "" {
    +		return nil, err
    +	}
    +
    +	config := &tls.Config{InsecureSkipVerify: true}
    +	conn, err = tls.Dial(network, addr, config)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	cert := conn.ConnectionState().PeerCertificates[0]
    +	peer := ThumbprintSHA1(cert)
    +	if thumbprint != peer {
    +		_ = conn.Close()
    +
    +		return nil, fmt.Errorf("Host %q thumbprint does not match %q", addr, thumbprint)
    +	}
    +
    +	return conn, nil
    +}
    +
    +// splitHostPort is similar to net.SplitHostPort,
    +// but rather than return error if there isn't a ':port',
    +// return an empty string for the port.
    +func splitHostPort(host string) (string, string) {
    +	ix := strings.LastIndex(host, ":")
    +
    +	if ix <= strings.LastIndex(host, "]") {
    +		return host, ""
    +	}
    +
    +	name := host[:ix]
    +	port := host[ix+1:]
    +
    +	return name, port
    +}
    +
    +const sdkTunnel = "sdkTunnel:8089"
    +
    +func (c *Client) Certificate() *tls.Certificate {
    +	certs := c.t.TLSClientConfig.Certificates
    +	if len(certs) == 0 {
    +		return nil
    +	}
    +	return &certs[0]
    +}
    +
    +func (c *Client) SetCertificate(cert tls.Certificate) {
    +	t := c.Client.Transport.(*http.Transport)
    +
    +	// Extension or HoK certificate
    +	t.TLSClientConfig.Certificates = []tls.Certificate{cert}
    +}
    +
    +// Tunnel returns a Client configured to proxy requests through vCenter's http port 80,
    +// to the SDK tunnel virtual host.  Use of the SDK tunnel is required by LoginExtensionByCertificate()
    +// and optional for other methods.
    +func (c *Client) Tunnel() *Client {
    +	tunnel := c.NewServiceClient(c.u.Path, c.Namespace)
    +	t := tunnel.Client.Transport.(*http.Transport)
    +	// Proxy to vCenter host on port 80
    +	host := tunnel.u.Hostname()
    +	// Should be no reason to change the default port other than testing
    +	key := "GOVMOMI_TUNNEL_PROXY_PORT"
    +
    +	port := tunnel.URL().Query().Get(key)
    +	if port == "" {
    +		port = os.Getenv(key)
    +	}
    +
    +	if port != "" {
    +		host += ":" + port
    +	}
    +
    +	t.Proxy = http.ProxyURL(&url.URL{
    +		Scheme: "http",
    +		Host:   host,
    +	})
    +
    +	// Rewrite url Host to use the sdk tunnel, required for a certificate request.
    +	tunnel.u.Host = sdkTunnel
    +	return tunnel
    +}
    +
    +func (c *Client) URL() *url.URL {
    +	urlCopy := *c.u
    +	return &urlCopy
    +}
    +
    +type marshaledClient struct {
    +	Cookies  []*http.Cookie
    +	URL      *url.URL
    +	Insecure bool
    +}
    +
    +func (c *Client) MarshalJSON() ([]byte, error) {
    +	m := marshaledClient{
    +		Cookies:  c.Jar.Cookies(c.u),
    +		URL:      c.u,
    +		Insecure: c.k,
    +	}
    +
    +	return json.Marshal(m)
    +}
    +
    +func (c *Client) UnmarshalJSON(b []byte) error {
    +	var m marshaledClient
    +
    +	err := json.Unmarshal(b, &m)
    +	if err != nil {
    +		return err
    +	}
    +
    +	*c = *NewClient(m.URL, m.Insecure)
    +	c.Jar.SetCookies(m.URL, m.Cookies)
    +
    +	return nil
    +}
    +
    +func (c *Client) do(ctx context.Context, req *http.Request) (*http.Response, error) {
    +	if nil == ctx || nil == ctx.Done() { // ctx.Done() is for ctx
    +		return c.Client.Do(req)
    +	}
    +
    +	return c.Client.Do(req.WithContext(ctx))
    +}
    +
    +// Signer can be implemented by soap.Header.Security to sign requests.
    +// If the soap.Header.Security field is set to an implementation of Signer via WithHeader(),
    +// then Client.RoundTrip will call Sign() to marshal the SOAP request.
    +type Signer interface {
    +	Sign(Envelope) ([]byte, error)
    +}
    +
    +type headerContext struct{}
    +
    +// WithHeader can be used to modify the outgoing request soap.Header fields.
    +func (c *Client) WithHeader(ctx context.Context, header Header) context.Context {
    +	return context.WithValue(ctx, headerContext{}, header)
    +}
    +
    +func (c *Client) RoundTrip(ctx context.Context, reqBody, resBody HasFault) error {
    +	var err error
    +	var b []byte
    +
    +	reqEnv := Envelope{Body: reqBody}
    +	resEnv := Envelope{Body: resBody}
    +
    +	h, ok := ctx.Value(headerContext{}).(Header)
    +	if !ok {
    +		h = Header{}
    +	}
    +
    +	// We added support for OperationID before soap.Header was exported.
    +	if id, ok := ctx.Value(types.ID{}).(string); ok {
    +		h.ID = id
    +	}
    +
    +	h.Cookie = c.cookie
    +	if h.Cookie != "" || h.ID != "" || h.Security != nil {
    +		reqEnv.Header = &h // XML marshal header only if a field is set
    +	}
    +
    +	// Create debugging context for this round trip
    +	d := c.d.newRoundTrip()
    +	if d.enabled() {
    +		defer d.done()
    +	}
    +
    +	if signer, ok := h.Security.(Signer); ok {
    +		b, err = signer.Sign(reqEnv)
    +		if err != nil {
    +			return err
    +		}
    +	} else {
    +		b, err = xml.Marshal(reqEnv)
    +		if err != nil {
    +			panic(err)
    +		}
    +	}
    +
    +	rawReqBody := io.MultiReader(strings.NewReader(xml.Header), bytes.NewReader(b))
    +	req, err := http.NewRequest("POST", c.u.String(), rawReqBody)
    +	if err != nil {
    +		panic(err)
    +	}
    +
    +	req = req.WithContext(ctx)
    +
    +	req.Header.Set(`Content-Type`, `text/xml; charset="utf-8"`)
    +
    +	action := h.Action
    +	if action == "" {
    +		action = fmt.Sprintf("%s/%s", c.Namespace, c.Version)
    +	}
    +	req.Header.Set(`SOAPAction`, action)
    +
    +	if c.UserAgent != "" {
    +		req.Header.Set(`User-Agent`, c.UserAgent)
    +	}
    +
    +	if d.enabled() {
    +		d.debugRequest(req)
    +	}
    +
    +	tstart := time.Now()
    +	res, err := c.do(ctx, req)
    +	tstop := time.Now()
    +
    +	if d.enabled() {
    +		d.logf("%6dms (%T)", tstop.Sub(tstart)/time.Millisecond, resBody)
    +	}
    +
    +	if err != nil {
    +		return err
    +	}
    +
    +	if d.enabled() {
    +		d.debugResponse(res)
    +	}
    +
    +	// Close response regardless of what happens next
    +	defer res.Body.Close()
    +
    +	switch res.StatusCode {
    +	case http.StatusOK:
    +		// OK
    +	case http.StatusInternalServerError:
    +		// Error, but typically includes a body explaining the error
    +	default:
    +		return errors.New(res.Status)
    +	}
    +
    +	dec := xml.NewDecoder(res.Body)
    +	dec.TypeFunc = types.TypeFunc()
    +	err = dec.Decode(&resEnv)
    +	if err != nil {
    +		return err
    +	}
    +
    +	if f := resBody.Fault(); f != nil {
    +		return WrapSoapFault(f)
    +	}
    +
    +	return err
    +}
    +
    +func (c *Client) CloseIdleConnections() {
    +	c.t.CloseIdleConnections()
    +}
    +
    +// ParseURL wraps url.Parse to rewrite the URL.Host field
    +// In the case of VM guest uploads or NFC lease URLs, a Host
    +// field with a value of "*" is rewritten to the Client's URL.Host.
    +func (c *Client) ParseURL(urlStr string) (*url.URL, error) {
    +	u, err := url.Parse(urlStr)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	host, _ := splitHostPort(u.Host)
    +	if host == "*" {
    +		// Also use Client's port, to support port forwarding
    +		u.Host = c.URL().Host
    +	}
    +
    +	return u, nil
    +}
    +
    +type Upload struct {
    +	Type          string
    +	Method        string
    +	ContentLength int64
    +	Headers       map[string]string
    +	Ticket        *http.Cookie
    +	Progress      progress.Sinker
    +}
    +
    +var DefaultUpload = Upload{
    +	Type:   "application/octet-stream",
    +	Method: "PUT",
    +}
    +
    +// Upload PUTs the local file to the given URL
    +func (c *Client) Upload(ctx context.Context, f io.Reader, u *url.URL, param *Upload) error {
    +	var err error
    +
    +	if param.Progress != nil {
    +		pr := progress.NewReader(ctx, param.Progress, f, param.ContentLength)
    +		f = pr
    +
    +		// Mark progress reader as done when returning from this function.
    +		defer func() {
    +			pr.Done(err)
    +		}()
    +	}
    +
    +	req, err := http.NewRequest(param.Method, u.String(), f)
    +	if err != nil {
    +		return err
    +	}
    +
    +	req = req.WithContext(ctx)
    +
    +	req.ContentLength = param.ContentLength
    +	req.Header.Set("Content-Type", param.Type)
    +
    +	for k, v := range param.Headers {
    +		req.Header.Add(k, v)
    +	}
    +
    +	if param.Ticket != nil {
    +		req.AddCookie(param.Ticket)
    +	}
    +
    +	res, err := c.Client.Do(req)
    +	if err != nil {
    +		return err
    +	}
    +
    +	switch res.StatusCode {
    +	case http.StatusOK:
    +	case http.StatusCreated:
    +	default:
    +		err = errors.New(res.Status)
    +	}
    +
    +	return err
    +}
    +
    +// UploadFile PUTs the local file to the given URL
    +func (c *Client) UploadFile(ctx context.Context, file string, u *url.URL, param *Upload) error {
    +	if param == nil {
    +		p := DefaultUpload // Copy since we set ContentLength
    +		param = &p
    +	}
    +
    +	s, err := os.Stat(file)
    +	if err != nil {
    +		return err
    +	}
    +
    +	f, err := os.Open(file)
    +	if err != nil {
    +		return err
    +	}
    +	defer f.Close()
    +
    +	param.ContentLength = s.Size()
    +
    +	return c.Upload(ctx, f, u, param)
    +}
    +
    +type Download struct {
    +	Method   string
    +	Headers  map[string]string
    +	Ticket   *http.Cookie
    +	Progress progress.Sinker
    +	Writer   io.Writer
    +}
    +
    +var DefaultDownload = Download{
    +	Method: "GET",
    +}
    +
    +// DownloadRequest wraps http.Client.Do, returning the http.Response without checking its StatusCode
    +func (c *Client) DownloadRequest(ctx context.Context, u *url.URL, param *Download) (*http.Response, error) {
    +	req, err := http.NewRequest(param.Method, u.String(), nil)
    +	if err != nil {
    +		return nil, err
    +	}
    +
    +	req = req.WithContext(ctx)
    +
    +	for k, v := range param.Headers {
    +		req.Header.Add(k, v)
    +	}
    +
    +	if param.Ticket != nil {
    +		req.AddCookie(param.Ticket)
    +	}
    +
    +	return c.Client.Do(req)
    +}
    +
    +// Download GETs the remote file from the given URL
    +func (c *Client) Download(ctx context.Context, u *url.URL, param *Download) (io.ReadCloser, int64, error) {
    +	res, err := c.DownloadRequest(ctx, u, param)
    +	if err != nil {
    +		return nil, 0, err
    +	}
    +
    +	switch res.StatusCode {
    +	case http.StatusOK:
    +	default:
    +		err = errors.New(res.Status)
    +	}
    +
    +	if err != nil {
    +		return nil, 0, err
    +	}
    +
    +	r := res.Body
    +
    +	return r, res.ContentLength, nil
    +}
    +
    +func (c *Client) WriteFile(ctx context.Context, file string, src io.Reader, size int64, s progress.Sinker, w io.Writer) error {
    +	var err error
    +
    +	r := src
    +
    +	fh, err := os.Create(file)
    +	if err != nil {
    +		return err
    +	}
    +
    +	if s != nil {
    +		pr := progress.NewReader(ctx, s, src, size)
    +		src = pr
    +
    +		// Mark progress reader as done when returning from this function.
    +		defer func() {
    +			pr.Done(err)
    +		}()
    +	}
    +
    +	if w == nil {
    +		w = fh
    +	} else {
    +		w = io.MultiWriter(w, fh)
    +	}
    +
    +	_, err = io.Copy(w, r)
    +
    +	cerr := fh.Close()
    +
    +	if err == nil {
    +		err = cerr
    +	}
    +
    +	return err
    +}
    +
    +// DownloadFile GETs the given URL to a local file
    +func (c *Client) DownloadFile(ctx context.Context, file string, u *url.URL, param *Download) error {
    +	var err error
    +	if param == nil {
    +		param = &DefaultDownload
    +	}
    +
    +	rc, contentLength, err := c.Download(ctx, u, param)
    +	if err != nil {
    +		return err
    +	}
    +
    +	return c.WriteFile(ctx, file, rc, contentLength, param.Progress, param.Writer)
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/debug.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/debug.go
    new file mode 100644
    index 00000000000..63518abca3a
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/debug.go
    @@ -0,0 +1,149 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package soap
    +
    +import (
    +	"fmt"
    +	"io"
    +	"net/http"
    +	"net/http/httputil"
    +	"sync/atomic"
    +	"time"
    +
    +	"github.com/vmware/govmomi/vim25/debug"
    +)
    +
    +// teeReader wraps io.TeeReader and patches through the Close() function.
    +type teeReader struct {
    +	io.Reader
    +	io.Closer
    +}
    +
    +func newTeeReader(rc io.ReadCloser, w io.Writer) io.ReadCloser {
    +	return teeReader{
    +		Reader: io.TeeReader(rc, w),
    +		Closer: rc,
    +	}
    +}
    +
    +// debugRoundTrip contains state and logic needed to debug a single round trip.
    +type debugRoundTrip struct {
    +	cn  uint64         // Client number
    +	rn  uint64         // Request number
    +	log io.WriteCloser // Request log
    +	cs  []io.Closer    // Files that need closing when done
    +}
    +
    +func (d *debugRoundTrip) logf(format string, a ...interface{}) {
    +	now := time.Now().Format("2006-01-02T15-04-05.000000000")
    +	fmt.Fprintf(d.log, "%s - %04d: ", now, d.rn)
    +	fmt.Fprintf(d.log, format, a...)
    +	fmt.Fprintf(d.log, "\n")
    +}
    +
    +func (d *debugRoundTrip) enabled() bool {
    +	return d != nil
    +}
    +
    +func (d *debugRoundTrip) done() {
    +	for _, c := range d.cs {
    +		c.Close()
    +	}
    +}
    +
    +func (d *debugRoundTrip) newFile(suffix string) io.WriteCloser {
    +	return debug.NewFile(fmt.Sprintf("%d-%04d.%s", d.cn, d.rn, suffix))
    +}
    +
    +func (d *debugRoundTrip) debugRequest(req *http.Request) {
    +	if d == nil {
    +		return
    +	}
    +
    +	var wc io.WriteCloser
    +
    +	// Capture headers
    +	wc = d.newFile("req.headers")
    +	b, _ := httputil.DumpRequest(req, false)
    +	wc.Write(b)
    +	wc.Close()
    +
    +	// Capture body
    +	wc = d.newFile("req.xml")
    +	req.Body = newTeeReader(req.Body, wc)
    +
    +	// Delay closing until marked done
    +	d.cs = append(d.cs, wc)
    +}
    +
    +func (d *debugRoundTrip) debugResponse(res *http.Response) {
    +	if d == nil {
    +		return
    +	}
    +
    +	var wc io.WriteCloser
    +
    +	// Capture headers
    +	wc = d.newFile("res.headers")
    +	b, _ := httputil.DumpResponse(res, false)
    +	wc.Write(b)
    +	wc.Close()
    +
    +	// Capture body
    +	wc = d.newFile("res.xml")
    +	res.Body = newTeeReader(res.Body, wc)
    +
    +	// Delay closing until marked done
    +	d.cs = append(d.cs, wc)
    +}
    +
    +var cn uint64 // Client counter
    +
    +// debugContainer wraps the debugging state for a single client.
    +type debugContainer struct {
    +	cn  uint64         // Client number
    +	rn  uint64         // Request counter
    +	log io.WriteCloser // Request log
    +}
    +
    +func newDebug() *debugContainer {
    +	d := debugContainer{
    +		cn: atomic.AddUint64(&cn, 1),
    +		rn: 0,
    +	}
    +
    +	if !debug.Enabled() {
    +		return nil
    +	}
    +
    +	d.log = debug.NewFile(fmt.Sprintf("%d-client.log", d.cn))
    +	return &d
    +}
    +
    +func (d *debugContainer) newRoundTrip() *debugRoundTrip {
    +	if d == nil {
    +		return nil
    +	}
    +
    +	drt := debugRoundTrip{
    +		cn:  d.cn,
    +		rn:  atomic.AddUint64(&d.rn, 1),
    +		log: d.log,
    +	}
    +
    +	return &drt
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/error.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/error.go
    new file mode 100644
    index 00000000000..d89208522a9
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/error.go
    @@ -0,0 +1,115 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package soap
    +
    +import (
    +	"fmt"
    +	"reflect"
    +
    +	"github.com/vmware/govmomi/vim25/types"
    +)
    +
    +type regularError struct {
    +	err error
    +}
    +
    +func (r regularError) Error() string {
    +	return r.err.Error()
    +}
    +
    +type soapFaultError struct {
    +	fault *Fault
    +}
    +
    +func (s soapFaultError) Error() string {
    +	msg := s.fault.String
    +
    +	if msg == "" {
    +		msg = reflect.TypeOf(s.fault.Detail.Fault).Name()
    +	}
    +
    +	return fmt.Sprintf("%s: %s", s.fault.Code, msg)
    +}
    +
    +type vimFaultError struct {
    +	fault types.BaseMethodFault
    +}
    +
    +func (v vimFaultError) Error() string {
    +	typ := reflect.TypeOf(v.fault)
    +	for typ.Kind() == reflect.Ptr {
    +		typ = typ.Elem()
    +	}
    +
    +	return typ.Name()
    +}
    +
    +func (v vimFaultError) Fault() types.BaseMethodFault {
    +	return v.fault
    +}
    +
    +func Wrap(err error) error {
    +	switch err.(type) {
    +	case regularError:
    +		return err
    +	case soapFaultError:
    +		return err
    +	case vimFaultError:
    +		return err
    +	}
    +
    +	return WrapRegularError(err)
    +}
    +
    +func WrapRegularError(err error) error {
    +	return regularError{err}
    +}
    +
    +func IsRegularError(err error) bool {
    +	_, ok := err.(regularError)
    +	return ok
    +}
    +
    +func ToRegularError(err error) error {
    +	return err.(regularError).err
    +}
    +
    +func WrapSoapFault(f *Fault) error {
    +	return soapFaultError{f}
    +}
    +
    +func IsSoapFault(err error) bool {
    +	_, ok := err.(soapFaultError)
    +	return ok
    +}
    +
    +func ToSoapFault(err error) *Fault {
    +	return err.(soapFaultError).fault
    +}
    +
    +func WrapVimFault(v types.BaseMethodFault) error {
    +	return vimFaultError{v}
    +}
    +
    +func IsVimFault(err error) bool {
    +	_, ok := err.(vimFaultError)
    +	return ok
    +}
    +
    +func ToVimFault(err error) types.BaseMethodFault {
    +	return err.(vimFaultError).fault
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/soap.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/soap.go
    new file mode 100644
    index 00000000000..a8dc121baad
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/soap/soap.go
    @@ -0,0 +1,49 @@
    +/*
    +Copyright (c) 2014-2018 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package soap
    +
    +import (
    +	"github.com/vmware/govmomi/vim25/types"
    +	"github.com/vmware/govmomi/vim25/xml"
    +)
    +
    +// Header includes optional soap Header fields.
    +type Header struct {
    +	Action   string      `xml:"-"`                         // Action is the 'SOAPAction' HTTP header value. Defaults to "Client.Namespace/Client.Version".
    +	Cookie   string      `xml:"vcSessionCookie,omitempty"` // Cookie is a vCenter session cookie that can be used with other SDK endpoints (e.g. pbm).
    +	ID       string      `xml:"operationID,omitempty"`     // ID is the operationID used by ESX/vCenter logging for correlation.
    +	Security interface{} `xml:",omitempty"`                // Security is used for SAML token authentication and request signing.
    +}
    +
    +type Envelope struct {
    +	XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Envelope"`
    +	Header  *Header  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Header,omitempty"`
    +	Body    interface{}
    +}
    +
    +type Fault struct {
    +	XMLName xml.Name `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault"`
    +	Code    string   `xml:"faultcode"`
    +	String  string   `xml:"faultstring"`
    +	Detail  struct {
    +		Fault types.AnyType `xml:",any,typeattr"`
    +	} `xml:"detail"`
    +}
    +
    +func (f *Fault) VimFault() types.AnyType {
    +	return f.Detail.Fault
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/base.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/base.go
    new file mode 100644
    index 00000000000..3bb12b7412e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/base.go
    @@ -0,0 +1,19 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package types
    +
    +type AnyType interface{}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/enum.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/enum.go
    new file mode 100644
    index 00000000000..c8c5977526e
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/enum.go
    @@ -0,0 +1,4824 @@
    +/*
    +Copyright (c) 2014-2018 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package types
    +
    +import "reflect"
    +
    +type ActionParameter string
    +
    +const (
    +	ActionParameterTargetName        = ActionParameter("targetName")
    +	ActionParameterAlarmName         = ActionParameter("alarmName")
    +	ActionParameterOldStatus         = ActionParameter("oldStatus")
    +	ActionParameterNewStatus         = ActionParameter("newStatus")
    +	ActionParameterTriggeringSummary = ActionParameter("triggeringSummary")
    +	ActionParameterDeclaringSummary  = ActionParameter("declaringSummary")
    +	ActionParameterEventDescription  = ActionParameter("eventDescription")
    +	ActionParameterTarget            = ActionParameter("target")
    +	ActionParameterAlarm             = ActionParameter("alarm")
    +)
    +
    +func init() {
    +	t["ActionParameter"] = reflect.TypeOf((*ActionParameter)(nil)).Elem()
    +}
    +
    +type ActionType string
    +
    +const (
    +	ActionTypeMigrationV1         = ActionType("MigrationV1")
    +	ActionTypeVmPowerV1           = ActionType("VmPowerV1")
    +	ActionTypeHostPowerV1         = ActionType("HostPowerV1")
    +	ActionTypeHostMaintenanceV1   = ActionType("HostMaintenanceV1")
    +	ActionTypeStorageMigrationV1  = ActionType("StorageMigrationV1")
    +	ActionTypeStoragePlacementV1  = ActionType("StoragePlacementV1")
    +	ActionTypePlacementV1         = ActionType("PlacementV1")
    +	ActionTypeHostInfraUpdateHaV1 = ActionType("HostInfraUpdateHaV1")
    +)
    +
    +func init() {
    +	t["ActionType"] = reflect.TypeOf((*ActionType)(nil)).Elem()
    +}
    +
    +type AffinityType string
    +
    +const (
    +	AffinityTypeMemory = AffinityType("memory")
    +	AffinityTypeCpu    = AffinityType("cpu")
    +)
    +
    +func init() {
    +	t["AffinityType"] = reflect.TypeOf((*AffinityType)(nil)).Elem()
    +}
    +
    +type AgentInstallFailedReason string
    +
    +const (
    +	AgentInstallFailedReasonNotEnoughSpaceOnDevice      = AgentInstallFailedReason("NotEnoughSpaceOnDevice")
    +	AgentInstallFailedReasonPrepareToUpgradeFailed      = AgentInstallFailedReason("PrepareToUpgradeFailed")
    +	AgentInstallFailedReasonAgentNotRunning             = AgentInstallFailedReason("AgentNotRunning")
    +	AgentInstallFailedReasonAgentNotReachable           = AgentInstallFailedReason("AgentNotReachable")
    +	AgentInstallFailedReasonInstallTimedout             = AgentInstallFailedReason("InstallTimedout")
    +	AgentInstallFailedReasonSignatureVerificationFailed = AgentInstallFailedReason("SignatureVerificationFailed")
    +	AgentInstallFailedReasonAgentUploadFailed           = AgentInstallFailedReason("AgentUploadFailed")
    +	AgentInstallFailedReasonAgentUploadTimedout         = AgentInstallFailedReason("AgentUploadTimedout")
    +	AgentInstallFailedReasonUnknownInstallerError       = AgentInstallFailedReason("UnknownInstallerError")
    +)
    +
    +func init() {
    +	t["AgentInstallFailedReason"] = reflect.TypeOf((*AgentInstallFailedReason)(nil)).Elem()
    +}
    +
    +type AlarmFilterSpecAlarmTypeByEntity string
    +
    +const (
    +	AlarmFilterSpecAlarmTypeByEntityEntityTypeAll  = AlarmFilterSpecAlarmTypeByEntity("entityTypeAll")
    +	AlarmFilterSpecAlarmTypeByEntityEntityTypeHost = AlarmFilterSpecAlarmTypeByEntity("entityTypeHost")
    +	AlarmFilterSpecAlarmTypeByEntityEntityTypeVm   = AlarmFilterSpecAlarmTypeByEntity("entityTypeVm")
    +)
    +
    +func init() {
    +	t["AlarmFilterSpecAlarmTypeByEntity"] = reflect.TypeOf((*AlarmFilterSpecAlarmTypeByEntity)(nil)).Elem()
    +}
    +
    +type AlarmFilterSpecAlarmTypeByTrigger string
    +
    +const (
    +	AlarmFilterSpecAlarmTypeByTriggerTriggerTypeAll    = AlarmFilterSpecAlarmTypeByTrigger("triggerTypeAll")
    +	AlarmFilterSpecAlarmTypeByTriggerTriggerTypeEvent  = AlarmFilterSpecAlarmTypeByTrigger("triggerTypeEvent")
    +	AlarmFilterSpecAlarmTypeByTriggerTriggerTypeMetric = AlarmFilterSpecAlarmTypeByTrigger("triggerTypeMetric")
    +)
    +
    +func init() {
    +	t["AlarmFilterSpecAlarmTypeByTrigger"] = reflect.TypeOf((*AlarmFilterSpecAlarmTypeByTrigger)(nil)).Elem()
    +}
    +
    +type AnswerFileValidationInfoStatus string
    +
    +const (
    +	AnswerFileValidationInfoStatusSuccess         = AnswerFileValidationInfoStatus("success")
    +	AnswerFileValidationInfoStatusFailed          = AnswerFileValidationInfoStatus("failed")
    +	AnswerFileValidationInfoStatusFailed_defaults = AnswerFileValidationInfoStatus("failed_defaults")
    +)
    +
    +func init() {
    +	t["AnswerFileValidationInfoStatus"] = reflect.TypeOf((*AnswerFileValidationInfoStatus)(nil)).Elem()
    +}
    +
    +type ApplyHostProfileConfigurationResultStatus string
    +
    +const (
    +	ApplyHostProfileConfigurationResultStatusSuccess                     = ApplyHostProfileConfigurationResultStatus("success")
    +	ApplyHostProfileConfigurationResultStatusFailed                      = ApplyHostProfileConfigurationResultStatus("failed")
    +	ApplyHostProfileConfigurationResultStatusReboot_failed               = ApplyHostProfileConfigurationResultStatus("reboot_failed")
    +	ApplyHostProfileConfigurationResultStatusStateless_reboot_failed     = ApplyHostProfileConfigurationResultStatus("stateless_reboot_failed")
    +	ApplyHostProfileConfigurationResultStatusCheck_compliance_failed     = ApplyHostProfileConfigurationResultStatus("check_compliance_failed")
    +	ApplyHostProfileConfigurationResultStatusState_not_satisfied         = ApplyHostProfileConfigurationResultStatus("state_not_satisfied")
    +	ApplyHostProfileConfigurationResultStatusExit_maintenancemode_failed = ApplyHostProfileConfigurationResultStatus("exit_maintenancemode_failed")
    +	ApplyHostProfileConfigurationResultStatusCanceled                    = ApplyHostProfileConfigurationResultStatus("canceled")
    +)
    +
    +func init() {
    +	t["ApplyHostProfileConfigurationResultStatus"] = reflect.TypeOf((*ApplyHostProfileConfigurationResultStatus)(nil)).Elem()
    +}
    +
    +type ArrayUpdateOperation string
    +
    +const (
    +	ArrayUpdateOperationAdd    = ArrayUpdateOperation("add")
    +	ArrayUpdateOperationRemove = ArrayUpdateOperation("remove")
    +	ArrayUpdateOperationEdit   = ArrayUpdateOperation("edit")
    +)
    +
    +func init() {
    +	t["ArrayUpdateOperation"] = reflect.TypeOf((*ArrayUpdateOperation)(nil)).Elem()
    +}
    +
    +type AutoStartAction string
    +
    +const (
    +	AutoStartActionNone          = AutoStartAction("none")
    +	AutoStartActionSystemDefault = AutoStartAction("systemDefault")
    +	AutoStartActionPowerOn       = AutoStartAction("powerOn")
    +	AutoStartActionPowerOff      = AutoStartAction("powerOff")
    +	AutoStartActionGuestShutdown = AutoStartAction("guestShutdown")
    +	AutoStartActionSuspend       = AutoStartAction("suspend")
    +)
    +
    +func init() {
    +	t["AutoStartAction"] = reflect.TypeOf((*AutoStartAction)(nil)).Elem()
    +}
    +
    +type AutoStartWaitHeartbeatSetting string
    +
    +const (
    +	AutoStartWaitHeartbeatSettingYes           = AutoStartWaitHeartbeatSetting("yes")
    +	AutoStartWaitHeartbeatSettingNo            = AutoStartWaitHeartbeatSetting("no")
    +	AutoStartWaitHeartbeatSettingSystemDefault = AutoStartWaitHeartbeatSetting("systemDefault")
    +)
    +
    +func init() {
    +	t["AutoStartWaitHeartbeatSetting"] = reflect.TypeOf((*AutoStartWaitHeartbeatSetting)(nil)).Elem()
    +}
    +
    +type BaseConfigInfoDiskFileBackingInfoProvisioningType string
    +
    +const (
    +	BaseConfigInfoDiskFileBackingInfoProvisioningTypeThin             = BaseConfigInfoDiskFileBackingInfoProvisioningType("thin")
    +	BaseConfigInfoDiskFileBackingInfoProvisioningTypeEagerZeroedThick = BaseConfigInfoDiskFileBackingInfoProvisioningType("eagerZeroedThick")
    +	BaseConfigInfoDiskFileBackingInfoProvisioningTypeLazyZeroedThick  = BaseConfigInfoDiskFileBackingInfoProvisioningType("lazyZeroedThick")
    +)
    +
    +func init() {
    +	t["BaseConfigInfoDiskFileBackingInfoProvisioningType"] = reflect.TypeOf((*BaseConfigInfoDiskFileBackingInfoProvisioningType)(nil)).Elem()
    +}
    +
    +type BatchResultResult string
    +
    +const (
    +	BatchResultResultSuccess = BatchResultResult("success")
    +	BatchResultResultFail    = BatchResultResult("fail")
    +)
    +
    +func init() {
    +	t["BatchResultResult"] = reflect.TypeOf((*BatchResultResult)(nil)).Elem()
    +}
    +
    +type CannotEnableVmcpForClusterReason string
    +
    +const (
    +	CannotEnableVmcpForClusterReasonAPDTimeoutDisabled      = CannotEnableVmcpForClusterReason("APDTimeoutDisabled")
    +	CannotEnableVmcpForClusterReasonIncompatibleHostVersion = CannotEnableVmcpForClusterReason("IncompatibleHostVersion")
    +)
    +
    +func init() {
    +	t["CannotEnableVmcpForClusterReason"] = reflect.TypeOf((*CannotEnableVmcpForClusterReason)(nil)).Elem()
    +}
    +
    +type CannotMoveFaultToleranceVmMoveType string
    +
    +const (
    +	CannotMoveFaultToleranceVmMoveTypeResourcePool = CannotMoveFaultToleranceVmMoveType("resourcePool")
    +	CannotMoveFaultToleranceVmMoveTypeCluster      = CannotMoveFaultToleranceVmMoveType("cluster")
    +)
    +
    +func init() {
    +	t["CannotMoveFaultToleranceVmMoveType"] = reflect.TypeOf((*CannotMoveFaultToleranceVmMoveType)(nil)).Elem()
    +}
    +
    +type CannotPowerOffVmInClusterOperation string
    +
    +const (
    +	CannotPowerOffVmInClusterOperationSuspend       = CannotPowerOffVmInClusterOperation("suspend")
    +	CannotPowerOffVmInClusterOperationPowerOff      = CannotPowerOffVmInClusterOperation("powerOff")
    +	CannotPowerOffVmInClusterOperationGuestShutdown = CannotPowerOffVmInClusterOperation("guestShutdown")
    +	CannotPowerOffVmInClusterOperationGuestSuspend  = CannotPowerOffVmInClusterOperation("guestSuspend")
    +)
    +
    +func init() {
    +	t["CannotPowerOffVmInClusterOperation"] = reflect.TypeOf((*CannotPowerOffVmInClusterOperation)(nil)).Elem()
    +}
    +
    +type CannotUseNetworkReason string
    +
    +const (
    +	CannotUseNetworkReasonNetworkReservationNotSupported  = CannotUseNetworkReason("NetworkReservationNotSupported")
    +	CannotUseNetworkReasonMismatchedNetworkPolicies       = CannotUseNetworkReason("MismatchedNetworkPolicies")
    +	CannotUseNetworkReasonMismatchedDvsVersionOrVendor    = CannotUseNetworkReason("MismatchedDvsVersionOrVendor")
    +	CannotUseNetworkReasonVMotionToUnsupportedNetworkType = CannotUseNetworkReason("VMotionToUnsupportedNetworkType")
    +)
    +
    +func init() {
    +	t["CannotUseNetworkReason"] = reflect.TypeOf((*CannotUseNetworkReason)(nil)).Elem()
    +}
    +
    +type CheckTestType string
    +
    +const (
    +	CheckTestTypeSourceTests       = CheckTestType("sourceTests")
    +	CheckTestTypeHostTests         = CheckTestType("hostTests")
    +	CheckTestTypeResourcePoolTests = CheckTestType("resourcePoolTests")
    +	CheckTestTypeDatastoreTests    = CheckTestType("datastoreTests")
    +	CheckTestTypeNetworkTests      = CheckTestType("networkTests")
    +)
    +
    +func init() {
    +	t["CheckTestType"] = reflect.TypeOf((*CheckTestType)(nil)).Elem()
    +}
    +
    +type ClusterDasAamNodeStateDasState string
    +
    +const (
    +	ClusterDasAamNodeStateDasStateUninitialized = ClusterDasAamNodeStateDasState("uninitialized")
    +	ClusterDasAamNodeStateDasStateInitialized   = ClusterDasAamNodeStateDasState("initialized")
    +	ClusterDasAamNodeStateDasStateConfiguring   = ClusterDasAamNodeStateDasState("configuring")
    +	ClusterDasAamNodeStateDasStateUnconfiguring = ClusterDasAamNodeStateDasState("unconfiguring")
    +	ClusterDasAamNodeStateDasStateRunning       = ClusterDasAamNodeStateDasState("running")
    +	ClusterDasAamNodeStateDasStateError         = ClusterDasAamNodeStateDasState("error")
    +	ClusterDasAamNodeStateDasStateAgentShutdown = ClusterDasAamNodeStateDasState("agentShutdown")
    +	ClusterDasAamNodeStateDasStateNodeFailed    = ClusterDasAamNodeStateDasState("nodeFailed")
    +)
    +
    +func init() {
    +	t["ClusterDasAamNodeStateDasState"] = reflect.TypeOf((*ClusterDasAamNodeStateDasState)(nil)).Elem()
    +}
    +
    +type ClusterDasConfigInfoHBDatastoreCandidate string
    +
    +const (
    +	ClusterDasConfigInfoHBDatastoreCandidateUserSelectedDs                  = ClusterDasConfigInfoHBDatastoreCandidate("userSelectedDs")
    +	ClusterDasConfigInfoHBDatastoreCandidateAllFeasibleDs                   = ClusterDasConfigInfoHBDatastoreCandidate("allFeasibleDs")
    +	ClusterDasConfigInfoHBDatastoreCandidateAllFeasibleDsWithUserPreference = ClusterDasConfigInfoHBDatastoreCandidate("allFeasibleDsWithUserPreference")
    +)
    +
    +func init() {
    +	t["ClusterDasConfigInfoHBDatastoreCandidate"] = reflect.TypeOf((*ClusterDasConfigInfoHBDatastoreCandidate)(nil)).Elem()
    +}
    +
    +type ClusterDasConfigInfoServiceState string
    +
    +const (
    +	ClusterDasConfigInfoServiceStateDisabled = ClusterDasConfigInfoServiceState("disabled")
    +	ClusterDasConfigInfoServiceStateEnabled  = ClusterDasConfigInfoServiceState("enabled")
    +)
    +
    +func init() {
    +	t["ClusterDasConfigInfoServiceState"] = reflect.TypeOf((*ClusterDasConfigInfoServiceState)(nil)).Elem()
    +}
    +
    +type ClusterDasConfigInfoVmMonitoringState string
    +
    +const (
    +	ClusterDasConfigInfoVmMonitoringStateVmMonitoringDisabled = ClusterDasConfigInfoVmMonitoringState("vmMonitoringDisabled")
    +	ClusterDasConfigInfoVmMonitoringStateVmMonitoringOnly     = ClusterDasConfigInfoVmMonitoringState("vmMonitoringOnly")
    +	ClusterDasConfigInfoVmMonitoringStateVmAndAppMonitoring   = ClusterDasConfigInfoVmMonitoringState("vmAndAppMonitoring")
    +)
    +
    +func init() {
    +	t["ClusterDasConfigInfoVmMonitoringState"] = reflect.TypeOf((*ClusterDasConfigInfoVmMonitoringState)(nil)).Elem()
    +}
    +
    +type ClusterDasFdmAvailabilityState string
    +
    +const (
    +	ClusterDasFdmAvailabilityStateUninitialized                = ClusterDasFdmAvailabilityState("uninitialized")
    +	ClusterDasFdmAvailabilityStateElection                     = ClusterDasFdmAvailabilityState("election")
    +	ClusterDasFdmAvailabilityStateMaster                       = ClusterDasFdmAvailabilityState("master")
    +	ClusterDasFdmAvailabilityStateConnectedToMaster            = ClusterDasFdmAvailabilityState("connectedToMaster")
    +	ClusterDasFdmAvailabilityStateNetworkPartitionedFromMaster = ClusterDasFdmAvailabilityState("networkPartitionedFromMaster")
    +	ClusterDasFdmAvailabilityStateNetworkIsolated              = ClusterDasFdmAvailabilityState("networkIsolated")
    +	ClusterDasFdmAvailabilityStateHostDown                     = ClusterDasFdmAvailabilityState("hostDown")
    +	ClusterDasFdmAvailabilityStateInitializationError          = ClusterDasFdmAvailabilityState("initializationError")
    +	ClusterDasFdmAvailabilityStateUninitializationError        = ClusterDasFdmAvailabilityState("uninitializationError")
    +	ClusterDasFdmAvailabilityStateFdmUnreachable               = ClusterDasFdmAvailabilityState("fdmUnreachable")
    +)
    +
    +func init() {
    +	t["ClusterDasFdmAvailabilityState"] = reflect.TypeOf((*ClusterDasFdmAvailabilityState)(nil)).Elem()
    +}
    +
    +type ClusterDasVmSettingsIsolationResponse string
    +
    +const (
    +	ClusterDasVmSettingsIsolationResponseNone                     = ClusterDasVmSettingsIsolationResponse("none")
    +	ClusterDasVmSettingsIsolationResponsePowerOff                 = ClusterDasVmSettingsIsolationResponse("powerOff")
    +	ClusterDasVmSettingsIsolationResponseShutdown                 = ClusterDasVmSettingsIsolationResponse("shutdown")
    +	ClusterDasVmSettingsIsolationResponseClusterIsolationResponse = ClusterDasVmSettingsIsolationResponse("clusterIsolationResponse")
    +)
    +
    +func init() {
    +	t["ClusterDasVmSettingsIsolationResponse"] = reflect.TypeOf((*ClusterDasVmSettingsIsolationResponse)(nil)).Elem()
    +}
    +
    +type ClusterDasVmSettingsRestartPriority string
    +
    +const (
    +	ClusterDasVmSettingsRestartPriorityDisabled               = ClusterDasVmSettingsRestartPriority("disabled")
    +	ClusterDasVmSettingsRestartPriorityLowest                 = ClusterDasVmSettingsRestartPriority("lowest")
    +	ClusterDasVmSettingsRestartPriorityLow                    = ClusterDasVmSettingsRestartPriority("low")
    +	ClusterDasVmSettingsRestartPriorityMedium                 = ClusterDasVmSettingsRestartPriority("medium")
    +	ClusterDasVmSettingsRestartPriorityHigh                   = ClusterDasVmSettingsRestartPriority("high")
    +	ClusterDasVmSettingsRestartPriorityHighest                = ClusterDasVmSettingsRestartPriority("highest")
    +	ClusterDasVmSettingsRestartPriorityClusterRestartPriority = ClusterDasVmSettingsRestartPriority("clusterRestartPriority")
    +)
    +
    +func init() {
    +	t["ClusterDasVmSettingsRestartPriority"] = reflect.TypeOf((*ClusterDasVmSettingsRestartPriority)(nil)).Elem()
    +}
    +
    +type ClusterHostInfraUpdateHaModeActionOperationType string
    +
    +const (
    +	ClusterHostInfraUpdateHaModeActionOperationTypeEnterQuarantine  = ClusterHostInfraUpdateHaModeActionOperationType("enterQuarantine")
    +	ClusterHostInfraUpdateHaModeActionOperationTypeExitQuarantine   = ClusterHostInfraUpdateHaModeActionOperationType("exitQuarantine")
    +	ClusterHostInfraUpdateHaModeActionOperationTypeEnterMaintenance = ClusterHostInfraUpdateHaModeActionOperationType("enterMaintenance")
    +)
    +
    +func init() {
    +	t["ClusterHostInfraUpdateHaModeActionOperationType"] = reflect.TypeOf((*ClusterHostInfraUpdateHaModeActionOperationType)(nil)).Elem()
    +}
    +
    +type ClusterInfraUpdateHaConfigInfoBehaviorType string
    +
    +const (
    +	ClusterInfraUpdateHaConfigInfoBehaviorTypeManual    = ClusterInfraUpdateHaConfigInfoBehaviorType("Manual")
    +	ClusterInfraUpdateHaConfigInfoBehaviorTypeAutomated = ClusterInfraUpdateHaConfigInfoBehaviorType("Automated")
    +)
    +
    +func init() {
    +	t["ClusterInfraUpdateHaConfigInfoBehaviorType"] = reflect.TypeOf((*ClusterInfraUpdateHaConfigInfoBehaviorType)(nil)).Elem()
    +}
    +
    +type ClusterInfraUpdateHaConfigInfoRemediationType string
    +
    +const (
    +	ClusterInfraUpdateHaConfigInfoRemediationTypeQuarantineMode  = ClusterInfraUpdateHaConfigInfoRemediationType("QuarantineMode")
    +	ClusterInfraUpdateHaConfigInfoRemediationTypeMaintenanceMode = ClusterInfraUpdateHaConfigInfoRemediationType("MaintenanceMode")
    +)
    +
    +func init() {
    +	t["ClusterInfraUpdateHaConfigInfoRemediationType"] = reflect.TypeOf((*ClusterInfraUpdateHaConfigInfoRemediationType)(nil)).Elem()
    +}
    +
    +type ClusterPowerOnVmOption string
    +
    +const (
    +	ClusterPowerOnVmOptionOverrideAutomationLevel = ClusterPowerOnVmOption("OverrideAutomationLevel")
    +	ClusterPowerOnVmOptionReserveResources        = ClusterPowerOnVmOption("ReserveResources")
    +)
    +
    +func init() {
    +	t["ClusterPowerOnVmOption"] = reflect.TypeOf((*ClusterPowerOnVmOption)(nil)).Elem()
    +}
    +
    +type ClusterProfileServiceType string
    +
    +const (
    +	ClusterProfileServiceTypeDRS = ClusterProfileServiceType("DRS")
    +	ClusterProfileServiceTypeHA  = ClusterProfileServiceType("HA")
    +	ClusterProfileServiceTypeDPM = ClusterProfileServiceType("DPM")
    +	ClusterProfileServiceTypeFT  = ClusterProfileServiceType("FT")
    +)
    +
    +func init() {
    +	t["ClusterProfileServiceType"] = reflect.TypeOf((*ClusterProfileServiceType)(nil)).Elem()
    +}
    +
    +type ClusterVmComponentProtectionSettingsStorageVmReaction string
    +
    +const (
    +	ClusterVmComponentProtectionSettingsStorageVmReactionDisabled            = ClusterVmComponentProtectionSettingsStorageVmReaction("disabled")
    +	ClusterVmComponentProtectionSettingsStorageVmReactionWarning             = ClusterVmComponentProtectionSettingsStorageVmReaction("warning")
    +	ClusterVmComponentProtectionSettingsStorageVmReactionRestartConservative = ClusterVmComponentProtectionSettingsStorageVmReaction("restartConservative")
    +	ClusterVmComponentProtectionSettingsStorageVmReactionRestartAggressive   = ClusterVmComponentProtectionSettingsStorageVmReaction("restartAggressive")
    +	ClusterVmComponentProtectionSettingsStorageVmReactionClusterDefault      = ClusterVmComponentProtectionSettingsStorageVmReaction("clusterDefault")
    +)
    +
    +func init() {
    +	t["ClusterVmComponentProtectionSettingsStorageVmReaction"] = reflect.TypeOf((*ClusterVmComponentProtectionSettingsStorageVmReaction)(nil)).Elem()
    +}
    +
    +type ClusterVmComponentProtectionSettingsVmReactionOnAPDCleared string
    +
    +const (
    +	ClusterVmComponentProtectionSettingsVmReactionOnAPDClearedNone              = ClusterVmComponentProtectionSettingsVmReactionOnAPDCleared("none")
    +	ClusterVmComponentProtectionSettingsVmReactionOnAPDClearedReset             = ClusterVmComponentProtectionSettingsVmReactionOnAPDCleared("reset")
    +	ClusterVmComponentProtectionSettingsVmReactionOnAPDClearedUseClusterDefault = ClusterVmComponentProtectionSettingsVmReactionOnAPDCleared("useClusterDefault")
    +)
    +
    +func init() {
    +	t["ClusterVmComponentProtectionSettingsVmReactionOnAPDCleared"] = reflect.TypeOf((*ClusterVmComponentProtectionSettingsVmReactionOnAPDCleared)(nil)).Elem()
    +}
    +
    +type ClusterVmReadinessReadyCondition string
    +
    +const (
    +	ClusterVmReadinessReadyConditionNone               = ClusterVmReadinessReadyCondition("none")
    +	ClusterVmReadinessReadyConditionPoweredOn          = ClusterVmReadinessReadyCondition("poweredOn")
    +	ClusterVmReadinessReadyConditionGuestHbStatusGreen = ClusterVmReadinessReadyCondition("guestHbStatusGreen")
    +	ClusterVmReadinessReadyConditionAppHbStatusGreen   = ClusterVmReadinessReadyCondition("appHbStatusGreen")
    +	ClusterVmReadinessReadyConditionUseClusterDefault  = ClusterVmReadinessReadyCondition("useClusterDefault")
    +)
    +
    +func init() {
    +	t["ClusterVmReadinessReadyCondition"] = reflect.TypeOf((*ClusterVmReadinessReadyCondition)(nil)).Elem()
    +}
    +
    +type ComplianceResultStatus string
    +
    +const (
    +	ComplianceResultStatusCompliant    = ComplianceResultStatus("compliant")
    +	ComplianceResultStatusNonCompliant = ComplianceResultStatus("nonCompliant")
    +	ComplianceResultStatusUnknown      = ComplianceResultStatus("unknown")
    +	ComplianceResultStatusRunning      = ComplianceResultStatus("running")
    +)
    +
    +func init() {
    +	t["ComplianceResultStatus"] = reflect.TypeOf((*ComplianceResultStatus)(nil)).Elem()
    +}
    +
    +type ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseState string
    +
    +const (
    +	ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseStateLicensed   = ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseState("licensed")
    +	ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseStateUnlicensed = ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseState("unlicensed")
    +	ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseStateUnknown    = ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseState("unknown")
    +)
    +
    +func init() {
    +	t["ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseState"] = reflect.TypeOf((*ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseState)(nil)).Elem()
    +}
    +
    +type ConfigSpecOperation string
    +
    +const (
    +	ConfigSpecOperationAdd    = ConfigSpecOperation("add")
    +	ConfigSpecOperationEdit   = ConfigSpecOperation("edit")
    +	ConfigSpecOperationRemove = ConfigSpecOperation("remove")
    +)
    +
    +func init() {
    +	t["ConfigSpecOperation"] = reflect.TypeOf((*ConfigSpecOperation)(nil)).Elem()
    +}
    +
    +type CustomizationLicenseDataMode string
    +
    +const (
    +	CustomizationLicenseDataModePerServer = CustomizationLicenseDataMode("perServer")
    +	CustomizationLicenseDataModePerSeat   = CustomizationLicenseDataMode("perSeat")
    +)
    +
    +func init() {
    +	t["CustomizationLicenseDataMode"] = reflect.TypeOf((*CustomizationLicenseDataMode)(nil)).Elem()
    +}
    +
    +type CustomizationNetBIOSMode string
    +
    +const (
    +	CustomizationNetBIOSModeEnableNetBIOSViaDhcp = CustomizationNetBIOSMode("enableNetBIOSViaDhcp")
    +	CustomizationNetBIOSModeEnableNetBIOS        = CustomizationNetBIOSMode("enableNetBIOS")
    +	CustomizationNetBIOSModeDisableNetBIOS       = CustomizationNetBIOSMode("disableNetBIOS")
    +)
    +
    +func init() {
    +	t["CustomizationNetBIOSMode"] = reflect.TypeOf((*CustomizationNetBIOSMode)(nil)).Elem()
    +}
    +
    +type CustomizationSysprepRebootOption string
    +
    +const (
    +	CustomizationSysprepRebootOptionReboot   = CustomizationSysprepRebootOption("reboot")
    +	CustomizationSysprepRebootOptionNoreboot = CustomizationSysprepRebootOption("noreboot")
    +	CustomizationSysprepRebootOptionShutdown = CustomizationSysprepRebootOption("shutdown")
    +)
    +
    +func init() {
    +	t["CustomizationSysprepRebootOption"] = reflect.TypeOf((*CustomizationSysprepRebootOption)(nil)).Elem()
    +}
    +
    +type DVPortStatusVmDirectPathGen2InactiveReasonNetwork string
    +
    +const (
    +	DVPortStatusVmDirectPathGen2InactiveReasonNetworkPortNptIncompatibleDvs             = DVPortStatusVmDirectPathGen2InactiveReasonNetwork("portNptIncompatibleDvs")
    +	DVPortStatusVmDirectPathGen2InactiveReasonNetworkPortNptNoCompatibleNics            = DVPortStatusVmDirectPathGen2InactiveReasonNetwork("portNptNoCompatibleNics")
    +	DVPortStatusVmDirectPathGen2InactiveReasonNetworkPortNptNoVirtualFunctionsAvailable = DVPortStatusVmDirectPathGen2InactiveReasonNetwork("portNptNoVirtualFunctionsAvailable")
    +	DVPortStatusVmDirectPathGen2InactiveReasonNetworkPortNptDisabledForPort             = DVPortStatusVmDirectPathGen2InactiveReasonNetwork("portNptDisabledForPort")
    +)
    +
    +func init() {
    +	t["DVPortStatusVmDirectPathGen2InactiveReasonNetwork"] = reflect.TypeOf((*DVPortStatusVmDirectPathGen2InactiveReasonNetwork)(nil)).Elem()
    +}
    +
    +type DVPortStatusVmDirectPathGen2InactiveReasonOther string
    +
    +const (
    +	DVPortStatusVmDirectPathGen2InactiveReasonOtherPortNptIncompatibleHost      = DVPortStatusVmDirectPathGen2InactiveReasonOther("portNptIncompatibleHost")
    +	DVPortStatusVmDirectPathGen2InactiveReasonOtherPortNptIncompatibleConnectee = DVPortStatusVmDirectPathGen2InactiveReasonOther("portNptIncompatibleConnectee")
    +)
    +
    +func init() {
    +	t["DVPortStatusVmDirectPathGen2InactiveReasonOther"] = reflect.TypeOf((*DVPortStatusVmDirectPathGen2InactiveReasonOther)(nil)).Elem()
    +}
    +
    +type DVSMacLimitPolicyType string
    +
    +const (
    +	DVSMacLimitPolicyTypeAllow = DVSMacLimitPolicyType("allow")
    +	DVSMacLimitPolicyTypeDrop  = DVSMacLimitPolicyType("drop")
    +)
    +
    +func init() {
    +	t["DVSMacLimitPolicyType"] = reflect.TypeOf((*DVSMacLimitPolicyType)(nil)).Elem()
    +}
    +
    +type DasConfigFaultDasConfigFaultReason string
    +
    +const (
    +	DasConfigFaultDasConfigFaultReasonHostNetworkMisconfiguration = DasConfigFaultDasConfigFaultReason("HostNetworkMisconfiguration")
    +	DasConfigFaultDasConfigFaultReasonHostMisconfiguration        = DasConfigFaultDasConfigFaultReason("HostMisconfiguration")
    +	DasConfigFaultDasConfigFaultReasonInsufficientPrivileges      = DasConfigFaultDasConfigFaultReason("InsufficientPrivileges")
    +	DasConfigFaultDasConfigFaultReasonNoPrimaryAgentAvailable     = DasConfigFaultDasConfigFaultReason("NoPrimaryAgentAvailable")
    +	DasConfigFaultDasConfigFaultReasonOther                       = DasConfigFaultDasConfigFaultReason("Other")
    +	DasConfigFaultDasConfigFaultReasonNoDatastoresConfigured      = DasConfigFaultDasConfigFaultReason("NoDatastoresConfigured")
    +	DasConfigFaultDasConfigFaultReasonCreateConfigVvolFailed      = DasConfigFaultDasConfigFaultReason("CreateConfigVvolFailed")
    +	DasConfigFaultDasConfigFaultReasonVSanNotSupportedOnHost      = DasConfigFaultDasConfigFaultReason("VSanNotSupportedOnHost")
    +	DasConfigFaultDasConfigFaultReasonDasNetworkMisconfiguration  = DasConfigFaultDasConfigFaultReason("DasNetworkMisconfiguration")
    +)
    +
    +func init() {
    +	t["DasConfigFaultDasConfigFaultReason"] = reflect.TypeOf((*DasConfigFaultDasConfigFaultReason)(nil)).Elem()
    +}
    +
    +type DasVmPriority string
    +
    +const (
    +	DasVmPriorityDisabled = DasVmPriority("disabled")
    +	DasVmPriorityLow      = DasVmPriority("low")
    +	DasVmPriorityMedium   = DasVmPriority("medium")
    +	DasVmPriorityHigh     = DasVmPriority("high")
    +)
    +
    +func init() {
    +	t["DasVmPriority"] = reflect.TypeOf((*DasVmPriority)(nil)).Elem()
    +}
    +
    +type DatastoreAccessible string
    +
    +const (
    +	DatastoreAccessibleTrue  = DatastoreAccessible("True")
    +	DatastoreAccessibleFalse = DatastoreAccessible("False")
    +)
    +
    +func init() {
    +	t["DatastoreAccessible"] = reflect.TypeOf((*DatastoreAccessible)(nil)).Elem()
    +}
    +
    +type DatastoreSummaryMaintenanceModeState string
    +
    +const (
    +	DatastoreSummaryMaintenanceModeStateNormal              = DatastoreSummaryMaintenanceModeState("normal")
    +	DatastoreSummaryMaintenanceModeStateEnteringMaintenance = DatastoreSummaryMaintenanceModeState("enteringMaintenance")
    +	DatastoreSummaryMaintenanceModeStateInMaintenance       = DatastoreSummaryMaintenanceModeState("inMaintenance")
    +)
    +
    +func init() {
    +	t["DatastoreSummaryMaintenanceModeState"] = reflect.TypeOf((*DatastoreSummaryMaintenanceModeState)(nil)).Elem()
    +}
    +
    +type DayOfWeek string
    +
    +const (
    +	DayOfWeekSunday    = DayOfWeek("sunday")
    +	DayOfWeekMonday    = DayOfWeek("monday")
    +	DayOfWeekTuesday   = DayOfWeek("tuesday")
    +	DayOfWeekWednesday = DayOfWeek("wednesday")
    +	DayOfWeekThursday  = DayOfWeek("thursday")
    +	DayOfWeekFriday    = DayOfWeek("friday")
    +	DayOfWeekSaturday  = DayOfWeek("saturday")
    +)
    +
    +func init() {
    +	t["DayOfWeek"] = reflect.TypeOf((*DayOfWeek)(nil)).Elem()
    +}
    +
    +type DeviceNotSupportedReason string
    +
    +const (
    +	DeviceNotSupportedReasonHost  = DeviceNotSupportedReason("host")
    +	DeviceNotSupportedReasonGuest = DeviceNotSupportedReason("guest")
    +)
    +
    +func init() {
    +	t["DeviceNotSupportedReason"] = reflect.TypeOf((*DeviceNotSupportedReason)(nil)).Elem()
    +}
    +
    +type DiagnosticManagerLogCreator string
    +
    +const (
    +	DiagnosticManagerLogCreatorVpxd      = DiagnosticManagerLogCreator("vpxd")
    +	DiagnosticManagerLogCreatorVpxa      = DiagnosticManagerLogCreator("vpxa")
    +	DiagnosticManagerLogCreatorHostd     = DiagnosticManagerLogCreator("hostd")
    +	DiagnosticManagerLogCreatorServerd   = DiagnosticManagerLogCreator("serverd")
    +	DiagnosticManagerLogCreatorInstall   = DiagnosticManagerLogCreator("install")
    +	DiagnosticManagerLogCreatorVpxClient = DiagnosticManagerLogCreator("vpxClient")
    +	DiagnosticManagerLogCreatorRecordLog = DiagnosticManagerLogCreator("recordLog")
    +)
    +
    +func init() {
    +	t["DiagnosticManagerLogCreator"] = reflect.TypeOf((*DiagnosticManagerLogCreator)(nil)).Elem()
    +}
    +
    +type DiagnosticManagerLogFormat string
    +
    +const (
    +	DiagnosticManagerLogFormatPlain = DiagnosticManagerLogFormat("plain")
    +)
    +
    +func init() {
    +	t["DiagnosticManagerLogFormat"] = reflect.TypeOf((*DiagnosticManagerLogFormat)(nil)).Elem()
    +}
    +
    +type DiagnosticPartitionStorageType string
    +
    +const (
    +	DiagnosticPartitionStorageTypeDirectAttached  = DiagnosticPartitionStorageType("directAttached")
    +	DiagnosticPartitionStorageTypeNetworkAttached = DiagnosticPartitionStorageType("networkAttached")
    +)
    +
    +func init() {
    +	t["DiagnosticPartitionStorageType"] = reflect.TypeOf((*DiagnosticPartitionStorageType)(nil)).Elem()
    +}
    +
    +type DiagnosticPartitionType string
    +
    +const (
    +	DiagnosticPartitionTypeSingleHost = DiagnosticPartitionType("singleHost")
    +	DiagnosticPartitionTypeMultiHost  = DiagnosticPartitionType("multiHost")
    +)
    +
    +func init() {
    +	t["DiagnosticPartitionType"] = reflect.TypeOf((*DiagnosticPartitionType)(nil)).Elem()
    +}
    +
    +type DisallowedChangeByServiceDisallowedChange string
    +
    +const (
    +	DisallowedChangeByServiceDisallowedChangeHotExtendDisk = DisallowedChangeByServiceDisallowedChange("hotExtendDisk")
    +)
    +
    +func init() {
    +	t["DisallowedChangeByServiceDisallowedChange"] = reflect.TypeOf((*DisallowedChangeByServiceDisallowedChange)(nil)).Elem()
    +}
    +
    +type DistributedVirtualPortgroupMetaTagName string
    +
    +const (
    +	DistributedVirtualPortgroupMetaTagNameDvsName       = DistributedVirtualPortgroupMetaTagName("dvsName")
    +	DistributedVirtualPortgroupMetaTagNamePortgroupName = DistributedVirtualPortgroupMetaTagName("portgroupName")
    +	DistributedVirtualPortgroupMetaTagNamePortIndex     = DistributedVirtualPortgroupMetaTagName("portIndex")
    +)
    +
    +func init() {
    +	t["DistributedVirtualPortgroupMetaTagName"] = reflect.TypeOf((*DistributedVirtualPortgroupMetaTagName)(nil)).Elem()
    +}
    +
    +type DistributedVirtualPortgroupPortgroupType string
    +
    +const (
    +	DistributedVirtualPortgroupPortgroupTypeEarlyBinding = DistributedVirtualPortgroupPortgroupType("earlyBinding")
    +	DistributedVirtualPortgroupPortgroupTypeLateBinding  = DistributedVirtualPortgroupPortgroupType("lateBinding")
    +	DistributedVirtualPortgroupPortgroupTypeEphemeral    = DistributedVirtualPortgroupPortgroupType("ephemeral")
    +)
    +
    +func init() {
    +	t["DistributedVirtualPortgroupPortgroupType"] = reflect.TypeOf((*DistributedVirtualPortgroupPortgroupType)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostInfrastructureTrafficClass string
    +
    +const (
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassManagement     = DistributedVirtualSwitchHostInfrastructureTrafficClass("management")
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassFaultTolerance = DistributedVirtualSwitchHostInfrastructureTrafficClass("faultTolerance")
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassVmotion        = DistributedVirtualSwitchHostInfrastructureTrafficClass("vmotion")
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassVirtualMachine = DistributedVirtualSwitchHostInfrastructureTrafficClass("virtualMachine")
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassISCSI          = DistributedVirtualSwitchHostInfrastructureTrafficClass("iSCSI")
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassNfs            = DistributedVirtualSwitchHostInfrastructureTrafficClass("nfs")
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassHbr            = DistributedVirtualSwitchHostInfrastructureTrafficClass("hbr")
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassVsan           = DistributedVirtualSwitchHostInfrastructureTrafficClass("vsan")
    +	DistributedVirtualSwitchHostInfrastructureTrafficClassVdp            = DistributedVirtualSwitchHostInfrastructureTrafficClass("vdp")
    +)
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostInfrastructureTrafficClass"] = reflect.TypeOf((*DistributedVirtualSwitchHostInfrastructureTrafficClass)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostMemberHostComponentState string
    +
    +const (
    +	DistributedVirtualSwitchHostMemberHostComponentStateUp           = DistributedVirtualSwitchHostMemberHostComponentState("up")
    +	DistributedVirtualSwitchHostMemberHostComponentStatePending      = DistributedVirtualSwitchHostMemberHostComponentState("pending")
    +	DistributedVirtualSwitchHostMemberHostComponentStateOutOfSync    = DistributedVirtualSwitchHostMemberHostComponentState("outOfSync")
    +	DistributedVirtualSwitchHostMemberHostComponentStateWarning      = DistributedVirtualSwitchHostMemberHostComponentState("warning")
    +	DistributedVirtualSwitchHostMemberHostComponentStateDisconnected = DistributedVirtualSwitchHostMemberHostComponentState("disconnected")
    +	DistributedVirtualSwitchHostMemberHostComponentStateDown         = DistributedVirtualSwitchHostMemberHostComponentState("down")
    +)
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostMemberHostComponentState"] = reflect.TypeOf((*DistributedVirtualSwitchHostMemberHostComponentState)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchNetworkResourceControlVersion string
    +
    +const (
    +	DistributedVirtualSwitchNetworkResourceControlVersionVersion2 = DistributedVirtualSwitchNetworkResourceControlVersion("version2")
    +	DistributedVirtualSwitchNetworkResourceControlVersionVersion3 = DistributedVirtualSwitchNetworkResourceControlVersion("version3")
    +)
    +
    +func init() {
    +	t["DistributedVirtualSwitchNetworkResourceControlVersion"] = reflect.TypeOf((*DistributedVirtualSwitchNetworkResourceControlVersion)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchNicTeamingPolicyMode string
    +
    +const (
    +	DistributedVirtualSwitchNicTeamingPolicyModeLoadbalance_ip        = DistributedVirtualSwitchNicTeamingPolicyMode("loadbalance_ip")
    +	DistributedVirtualSwitchNicTeamingPolicyModeLoadbalance_srcmac    = DistributedVirtualSwitchNicTeamingPolicyMode("loadbalance_srcmac")
    +	DistributedVirtualSwitchNicTeamingPolicyModeLoadbalance_srcid     = DistributedVirtualSwitchNicTeamingPolicyMode("loadbalance_srcid")
    +	DistributedVirtualSwitchNicTeamingPolicyModeFailover_explicit     = DistributedVirtualSwitchNicTeamingPolicyMode("failover_explicit")
    +	DistributedVirtualSwitchNicTeamingPolicyModeLoadbalance_loadbased = DistributedVirtualSwitchNicTeamingPolicyMode("loadbalance_loadbased")
    +)
    +
    +func init() {
    +	t["DistributedVirtualSwitchNicTeamingPolicyMode"] = reflect.TypeOf((*DistributedVirtualSwitchNicTeamingPolicyMode)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchPortConnecteeConnecteeType string
    +
    +const (
    +	DistributedVirtualSwitchPortConnecteeConnecteeTypePnic            = DistributedVirtualSwitchPortConnecteeConnecteeType("pnic")
    +	DistributedVirtualSwitchPortConnecteeConnecteeTypeVmVnic          = DistributedVirtualSwitchPortConnecteeConnecteeType("vmVnic")
    +	DistributedVirtualSwitchPortConnecteeConnecteeTypeHostConsoleVnic = DistributedVirtualSwitchPortConnecteeConnecteeType("hostConsoleVnic")
    +	DistributedVirtualSwitchPortConnecteeConnecteeTypeHostVmkVnic     = DistributedVirtualSwitchPortConnecteeConnecteeType("hostVmkVnic")
    +)
    +
    +func init() {
    +	t["DistributedVirtualSwitchPortConnecteeConnecteeType"] = reflect.TypeOf((*DistributedVirtualSwitchPortConnecteeConnecteeType)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchProductSpecOperationType string
    +
    +const (
    +	DistributedVirtualSwitchProductSpecOperationTypePreInstall             = DistributedVirtualSwitchProductSpecOperationType("preInstall")
    +	DistributedVirtualSwitchProductSpecOperationTypeUpgrade                = DistributedVirtualSwitchProductSpecOperationType("upgrade")
    +	DistributedVirtualSwitchProductSpecOperationTypeNotifyAvailableUpgrade = DistributedVirtualSwitchProductSpecOperationType("notifyAvailableUpgrade")
    +	DistributedVirtualSwitchProductSpecOperationTypeProceedWithUpgrade     = DistributedVirtualSwitchProductSpecOperationType("proceedWithUpgrade")
    +	DistributedVirtualSwitchProductSpecOperationTypeUpdateBundleInfo       = DistributedVirtualSwitchProductSpecOperationType("updateBundleInfo")
    +)
    +
    +func init() {
    +	t["DistributedVirtualSwitchProductSpecOperationType"] = reflect.TypeOf((*DistributedVirtualSwitchProductSpecOperationType)(nil)).Elem()
    +}
    +
    +type DpmBehavior string
    +
    +const (
    +	DpmBehaviorManual    = DpmBehavior("manual")
    +	DpmBehaviorAutomated = DpmBehavior("automated")
    +)
    +
    +func init() {
    +	t["DpmBehavior"] = reflect.TypeOf((*DpmBehavior)(nil)).Elem()
    +}
    +
    +type DrsBehavior string
    +
    +const (
    +	DrsBehaviorManual             = DrsBehavior("manual")
    +	DrsBehaviorPartiallyAutomated = DrsBehavior("partiallyAutomated")
    +	DrsBehaviorFullyAutomated     = DrsBehavior("fullyAutomated")
    +)
    +
    +func init() {
    +	t["DrsBehavior"] = reflect.TypeOf((*DrsBehavior)(nil)).Elem()
    +}
    +
    +type DrsInjectorWorkloadCorrelationState string
    +
    +const (
    +	DrsInjectorWorkloadCorrelationStateCorrelated   = DrsInjectorWorkloadCorrelationState("Correlated")
    +	DrsInjectorWorkloadCorrelationStateUncorrelated = DrsInjectorWorkloadCorrelationState("Uncorrelated")
    +)
    +
    +func init() {
    +	t["DrsInjectorWorkloadCorrelationState"] = reflect.TypeOf((*DrsInjectorWorkloadCorrelationState)(nil)).Elem()
    +}
    +
    +type DrsRecommendationReasonCode string
    +
    +const (
    +	DrsRecommendationReasonCodeFairnessCpuAvg = DrsRecommendationReasonCode("fairnessCpuAvg")
    +	DrsRecommendationReasonCodeFairnessMemAvg = DrsRecommendationReasonCode("fairnessMemAvg")
    +	DrsRecommendationReasonCodeJointAffin     = DrsRecommendationReasonCode("jointAffin")
    +	DrsRecommendationReasonCodeAntiAffin      = DrsRecommendationReasonCode("antiAffin")
    +	DrsRecommendationReasonCodeHostMaint      = DrsRecommendationReasonCode("hostMaint")
    +)
    +
    +func init() {
    +	t["DrsRecommendationReasonCode"] = reflect.TypeOf((*DrsRecommendationReasonCode)(nil)).Elem()
    +}
    +
    +type DvsEventPortBlockState string
    +
    +const (
    +	DvsEventPortBlockStateUnset     = DvsEventPortBlockState("unset")
    +	DvsEventPortBlockStateBlocked   = DvsEventPortBlockState("blocked")
    +	DvsEventPortBlockStateUnblocked = DvsEventPortBlockState("unblocked")
    +	DvsEventPortBlockStateUnknown   = DvsEventPortBlockState("unknown")
    +)
    +
    +func init() {
    +	t["DvsEventPortBlockState"] = reflect.TypeOf((*DvsEventPortBlockState)(nil)).Elem()
    +}
    +
    +type DvsFilterOnFailure string
    +
    +const (
    +	DvsFilterOnFailureFailOpen   = DvsFilterOnFailure("failOpen")
    +	DvsFilterOnFailureFailClosed = DvsFilterOnFailure("failClosed")
    +)
    +
    +func init() {
    +	t["DvsFilterOnFailure"] = reflect.TypeOf((*DvsFilterOnFailure)(nil)).Elem()
    +}
    +
    +type DvsNetworkRuleDirectionType string
    +
    +const (
    +	DvsNetworkRuleDirectionTypeIncomingPackets = DvsNetworkRuleDirectionType("incomingPackets")
    +	DvsNetworkRuleDirectionTypeOutgoingPackets = DvsNetworkRuleDirectionType("outgoingPackets")
    +	DvsNetworkRuleDirectionTypeBoth            = DvsNetworkRuleDirectionType("both")
    +)
    +
    +func init() {
    +	t["DvsNetworkRuleDirectionType"] = reflect.TypeOf((*DvsNetworkRuleDirectionType)(nil)).Elem()
    +}
    +
    +type EntityImportType string
    +
    +const (
    +	EntityImportTypeCreateEntityWithNewIdentifier      = EntityImportType("createEntityWithNewIdentifier")
    +	EntityImportTypeCreateEntityWithOriginalIdentifier = EntityImportType("createEntityWithOriginalIdentifier")
    +	EntityImportTypeApplyToEntitySpecified             = EntityImportType("applyToEntitySpecified")
    +)
    +
    +func init() {
    +	t["EntityImportType"] = reflect.TypeOf((*EntityImportType)(nil)).Elem()
    +}
    +
    +type EntityType string
    +
    +const (
    +	EntityTypeDistributedVirtualSwitch    = EntityType("distributedVirtualSwitch")
    +	EntityTypeDistributedVirtualPortgroup = EntityType("distributedVirtualPortgroup")
    +)
    +
    +func init() {
    +	t["EntityType"] = reflect.TypeOf((*EntityType)(nil)).Elem()
    +}
    +
    +type EventAlarmExpressionComparisonOperator string
    +
    +const (
    +	EventAlarmExpressionComparisonOperatorEquals           = EventAlarmExpressionComparisonOperator("equals")
    +	EventAlarmExpressionComparisonOperatorNotEqualTo       = EventAlarmExpressionComparisonOperator("notEqualTo")
    +	EventAlarmExpressionComparisonOperatorStartsWith       = EventAlarmExpressionComparisonOperator("startsWith")
    +	EventAlarmExpressionComparisonOperatorDoesNotStartWith = EventAlarmExpressionComparisonOperator("doesNotStartWith")
    +	EventAlarmExpressionComparisonOperatorEndsWith         = EventAlarmExpressionComparisonOperator("endsWith")
    +	EventAlarmExpressionComparisonOperatorDoesNotEndWith   = EventAlarmExpressionComparisonOperator("doesNotEndWith")
    +)
    +
    +func init() {
    +	t["EventAlarmExpressionComparisonOperator"] = reflect.TypeOf((*EventAlarmExpressionComparisonOperator)(nil)).Elem()
    +}
    +
    +type EventCategory string
    +
    +const (
    +	EventCategoryInfo    = EventCategory("info")
    +	EventCategoryWarning = EventCategory("warning")
    +	EventCategoryError   = EventCategory("error")
    +	EventCategoryUser    = EventCategory("user")
    +)
    +
    +func init() {
    +	t["EventCategory"] = reflect.TypeOf((*EventCategory)(nil)).Elem()
    +}
    +
    +type EventEventSeverity string
    +
    +const (
    +	EventEventSeverityError   = EventEventSeverity("error")
    +	EventEventSeverityWarning = EventEventSeverity("warning")
    +	EventEventSeverityInfo    = EventEventSeverity("info")
    +	EventEventSeverityUser    = EventEventSeverity("user")
    +)
    +
    +func init() {
    +	t["EventEventSeverity"] = reflect.TypeOf((*EventEventSeverity)(nil)).Elem()
    +}
    +
    +type EventFilterSpecRecursionOption string
    +
    +const (
    +	EventFilterSpecRecursionOptionSelf     = EventFilterSpecRecursionOption("self")
    +	EventFilterSpecRecursionOptionChildren = EventFilterSpecRecursionOption("children")
    +	EventFilterSpecRecursionOptionAll      = EventFilterSpecRecursionOption("all")
    +)
    +
    +func init() {
    +	t["EventFilterSpecRecursionOption"] = reflect.TypeOf((*EventFilterSpecRecursionOption)(nil)).Elem()
    +}
    +
    +type FibreChannelPortType string
    +
    +const (
    +	FibreChannelPortTypeFabric       = FibreChannelPortType("fabric")
    +	FibreChannelPortTypeLoop         = FibreChannelPortType("loop")
    +	FibreChannelPortTypePointToPoint = FibreChannelPortType("pointToPoint")
    +	FibreChannelPortTypeUnknown      = FibreChannelPortType("unknown")
    +)
    +
    +func init() {
    +	t["FibreChannelPortType"] = reflect.TypeOf((*FibreChannelPortType)(nil)).Elem()
    +}
    +
    +type FileSystemMountInfoVStorageSupportStatus string
    +
    +const (
    +	FileSystemMountInfoVStorageSupportStatusVStorageSupported   = FileSystemMountInfoVStorageSupportStatus("vStorageSupported")
    +	FileSystemMountInfoVStorageSupportStatusVStorageUnsupported = FileSystemMountInfoVStorageSupportStatus("vStorageUnsupported")
    +	FileSystemMountInfoVStorageSupportStatusVStorageUnknown     = FileSystemMountInfoVStorageSupportStatus("vStorageUnknown")
    +)
    +
    +func init() {
    +	t["FileSystemMountInfoVStorageSupportStatus"] = reflect.TypeOf((*FileSystemMountInfoVStorageSupportStatus)(nil)).Elem()
    +}
    +
    +type FtIssuesOnHostHostSelectionType string
    +
    +const (
    +	FtIssuesOnHostHostSelectionTypeUser = FtIssuesOnHostHostSelectionType("user")
    +	FtIssuesOnHostHostSelectionTypeVc   = FtIssuesOnHostHostSelectionType("vc")
    +	FtIssuesOnHostHostSelectionTypeDrs  = FtIssuesOnHostHostSelectionType("drs")
    +)
    +
    +func init() {
    +	t["FtIssuesOnHostHostSelectionType"] = reflect.TypeOf((*FtIssuesOnHostHostSelectionType)(nil)).Elem()
    +}
    +
    +type GuestFileType string
    +
    +const (
    +	GuestFileTypeFile      = GuestFileType("file")
    +	GuestFileTypeDirectory = GuestFileType("directory")
    +	GuestFileTypeSymlink   = GuestFileType("symlink")
    +)
    +
    +func init() {
    +	t["GuestFileType"] = reflect.TypeOf((*GuestFileType)(nil)).Elem()
    +}
    +
    +type GuestInfoAppStateType string
    +
    +const (
    +	GuestInfoAppStateTypeNone              = GuestInfoAppStateType("none")
    +	GuestInfoAppStateTypeAppStateOk        = GuestInfoAppStateType("appStateOk")
    +	GuestInfoAppStateTypeAppStateNeedReset = GuestInfoAppStateType("appStateNeedReset")
    +)
    +
    +func init() {
    +	t["GuestInfoAppStateType"] = reflect.TypeOf((*GuestInfoAppStateType)(nil)).Elem()
    +}
    +
    +type GuestOsDescriptorFirmwareType string
    +
    +const (
    +	GuestOsDescriptorFirmwareTypeBios = GuestOsDescriptorFirmwareType("bios")
    +	GuestOsDescriptorFirmwareTypeEfi  = GuestOsDescriptorFirmwareType("efi")
    +)
    +
    +func init() {
    +	t["GuestOsDescriptorFirmwareType"] = reflect.TypeOf((*GuestOsDescriptorFirmwareType)(nil)).Elem()
    +}
    +
    +type GuestOsDescriptorSupportLevel string
    +
    +const (
    +	GuestOsDescriptorSupportLevelExperimental = GuestOsDescriptorSupportLevel("experimental")
    +	GuestOsDescriptorSupportLevelLegacy       = GuestOsDescriptorSupportLevel("legacy")
    +	GuestOsDescriptorSupportLevelTerminated   = GuestOsDescriptorSupportLevel("terminated")
    +	GuestOsDescriptorSupportLevelSupported    = GuestOsDescriptorSupportLevel("supported")
    +	GuestOsDescriptorSupportLevelUnsupported  = GuestOsDescriptorSupportLevel("unsupported")
    +	GuestOsDescriptorSupportLevelDeprecated   = GuestOsDescriptorSupportLevel("deprecated")
    +	GuestOsDescriptorSupportLevelTechPreview  = GuestOsDescriptorSupportLevel("techPreview")
    +)
    +
    +func init() {
    +	t["GuestOsDescriptorSupportLevel"] = reflect.TypeOf((*GuestOsDescriptorSupportLevel)(nil)).Elem()
    +}
    +
    +type GuestRegKeyWowSpec string
    +
    +const (
    +	GuestRegKeyWowSpecWOWNative = GuestRegKeyWowSpec("WOWNative")
    +	GuestRegKeyWowSpecWOW32     = GuestRegKeyWowSpec("WOW32")
    +	GuestRegKeyWowSpecWOW64     = GuestRegKeyWowSpec("WOW64")
    +)
    +
    +func init() {
    +	t["GuestRegKeyWowSpec"] = reflect.TypeOf((*GuestRegKeyWowSpec)(nil)).Elem()
    +}
    +
    +type HealthUpdateInfoComponentType string
    +
    +const (
    +	HealthUpdateInfoComponentTypeMemory  = HealthUpdateInfoComponentType("Memory")
    +	HealthUpdateInfoComponentTypePower   = HealthUpdateInfoComponentType("Power")
    +	HealthUpdateInfoComponentTypeFan     = HealthUpdateInfoComponentType("Fan")
    +	HealthUpdateInfoComponentTypeNetwork = HealthUpdateInfoComponentType("Network")
    +	HealthUpdateInfoComponentTypeStorage = HealthUpdateInfoComponentType("Storage")
    +)
    +
    +func init() {
    +	t["HealthUpdateInfoComponentType"] = reflect.TypeOf((*HealthUpdateInfoComponentType)(nil)).Elem()
    +}
    +
    +type HostAccessMode string
    +
    +const (
    +	HostAccessModeAccessNone     = HostAccessMode("accessNone")
    +	HostAccessModeAccessAdmin    = HostAccessMode("accessAdmin")
    +	HostAccessModeAccessNoAccess = HostAccessMode("accessNoAccess")
    +	HostAccessModeAccessReadOnly = HostAccessMode("accessReadOnly")
    +	HostAccessModeAccessOther    = HostAccessMode("accessOther")
    +)
    +
    +func init() {
    +	t["HostAccessMode"] = reflect.TypeOf((*HostAccessMode)(nil)).Elem()
    +}
    +
    +type HostActiveDirectoryAuthenticationCertificateDigest string
    +
    +const (
    +	HostActiveDirectoryAuthenticationCertificateDigestSHA1 = HostActiveDirectoryAuthenticationCertificateDigest("SHA1")
    +)
    +
    +func init() {
    +	t["HostActiveDirectoryAuthenticationCertificateDigest"] = reflect.TypeOf((*HostActiveDirectoryAuthenticationCertificateDigest)(nil)).Elem()
    +}
    +
    +type HostActiveDirectoryInfoDomainMembershipStatus string
    +
    +const (
    +	HostActiveDirectoryInfoDomainMembershipStatusUnknown           = HostActiveDirectoryInfoDomainMembershipStatus("unknown")
    +	HostActiveDirectoryInfoDomainMembershipStatusOk                = HostActiveDirectoryInfoDomainMembershipStatus("ok")
    +	HostActiveDirectoryInfoDomainMembershipStatusNoServers         = HostActiveDirectoryInfoDomainMembershipStatus("noServers")
    +	HostActiveDirectoryInfoDomainMembershipStatusClientTrustBroken = HostActiveDirectoryInfoDomainMembershipStatus("clientTrustBroken")
    +	HostActiveDirectoryInfoDomainMembershipStatusServerTrustBroken = HostActiveDirectoryInfoDomainMembershipStatus("serverTrustBroken")
    +	HostActiveDirectoryInfoDomainMembershipStatusInconsistentTrust = HostActiveDirectoryInfoDomainMembershipStatus("inconsistentTrust")
    +	HostActiveDirectoryInfoDomainMembershipStatusOtherProblem      = HostActiveDirectoryInfoDomainMembershipStatus("otherProblem")
    +)
    +
    +func init() {
    +	t["HostActiveDirectoryInfoDomainMembershipStatus"] = reflect.TypeOf((*HostActiveDirectoryInfoDomainMembershipStatus)(nil)).Elem()
    +}
    +
    +type HostCapabilityFtUnsupportedReason string
    +
    +const (
    +	HostCapabilityFtUnsupportedReasonVMotionNotLicensed  = HostCapabilityFtUnsupportedReason("vMotionNotLicensed")
    +	HostCapabilityFtUnsupportedReasonMissingVMotionNic   = HostCapabilityFtUnsupportedReason("missingVMotionNic")
    +	HostCapabilityFtUnsupportedReasonMissingFTLoggingNic = HostCapabilityFtUnsupportedReason("missingFTLoggingNic")
    +	HostCapabilityFtUnsupportedReasonFtNotLicensed       = HostCapabilityFtUnsupportedReason("ftNotLicensed")
    +	HostCapabilityFtUnsupportedReasonHaAgentIssue        = HostCapabilityFtUnsupportedReason("haAgentIssue")
    +	HostCapabilityFtUnsupportedReasonUnsupportedProduct  = HostCapabilityFtUnsupportedReason("unsupportedProduct")
    +	HostCapabilityFtUnsupportedReasonCpuHvUnsupported    = HostCapabilityFtUnsupportedReason("cpuHvUnsupported")
    +	HostCapabilityFtUnsupportedReasonCpuHwmmuUnsupported = HostCapabilityFtUnsupportedReason("cpuHwmmuUnsupported")
    +	HostCapabilityFtUnsupportedReasonCpuHvDisabled       = HostCapabilityFtUnsupportedReason("cpuHvDisabled")
    +)
    +
    +func init() {
    +	t["HostCapabilityFtUnsupportedReason"] = reflect.TypeOf((*HostCapabilityFtUnsupportedReason)(nil)).Elem()
    +}
    +
    +type HostCapabilityUnmapMethodSupported string
    +
    +const (
    +	HostCapabilityUnmapMethodSupportedPriority = HostCapabilityUnmapMethodSupported("priority")
    +	HostCapabilityUnmapMethodSupportedFixed    = HostCapabilityUnmapMethodSupported("fixed")
    +	HostCapabilityUnmapMethodSupportedDynamic  = HostCapabilityUnmapMethodSupported("dynamic")
    +)
    +
    +func init() {
    +	t["HostCapabilityUnmapMethodSupported"] = reflect.TypeOf((*HostCapabilityUnmapMethodSupported)(nil)).Elem()
    +}
    +
    +type HostCapabilityVmDirectPathGen2UnsupportedReason string
    +
    +const (
    +	HostCapabilityVmDirectPathGen2UnsupportedReasonHostNptIncompatibleProduct  = HostCapabilityVmDirectPathGen2UnsupportedReason("hostNptIncompatibleProduct")
    +	HostCapabilityVmDirectPathGen2UnsupportedReasonHostNptIncompatibleHardware = HostCapabilityVmDirectPathGen2UnsupportedReason("hostNptIncompatibleHardware")
    +	HostCapabilityVmDirectPathGen2UnsupportedReasonHostNptDisabled             = HostCapabilityVmDirectPathGen2UnsupportedReason("hostNptDisabled")
    +)
    +
    +func init() {
    +	t["HostCapabilityVmDirectPathGen2UnsupportedReason"] = reflect.TypeOf((*HostCapabilityVmDirectPathGen2UnsupportedReason)(nil)).Elem()
    +}
    +
    +type HostCertificateManagerCertificateInfoCertificateStatus string
    +
    +const (
    +	HostCertificateManagerCertificateInfoCertificateStatusUnknown            = HostCertificateManagerCertificateInfoCertificateStatus("unknown")
    +	HostCertificateManagerCertificateInfoCertificateStatusExpired            = HostCertificateManagerCertificateInfoCertificateStatus("expired")
    +	HostCertificateManagerCertificateInfoCertificateStatusExpiring           = HostCertificateManagerCertificateInfoCertificateStatus("expiring")
    +	HostCertificateManagerCertificateInfoCertificateStatusExpiringShortly    = HostCertificateManagerCertificateInfoCertificateStatus("expiringShortly")
    +	HostCertificateManagerCertificateInfoCertificateStatusExpirationImminent = HostCertificateManagerCertificateInfoCertificateStatus("expirationImminent")
    +	HostCertificateManagerCertificateInfoCertificateStatusGood               = HostCertificateManagerCertificateInfoCertificateStatus("good")
    +)
    +
    +func init() {
    +	t["HostCertificateManagerCertificateInfoCertificateStatus"] = reflect.TypeOf((*HostCertificateManagerCertificateInfoCertificateStatus)(nil)).Elem()
    +}
    +
    +type HostConfigChangeMode string
    +
    +const (
    +	HostConfigChangeModeModify  = HostConfigChangeMode("modify")
    +	HostConfigChangeModeReplace = HostConfigChangeMode("replace")
    +)
    +
    +func init() {
    +	t["HostConfigChangeMode"] = reflect.TypeOf((*HostConfigChangeMode)(nil)).Elem()
    +}
    +
    +type HostConfigChangeOperation string
    +
    +const (
    +	HostConfigChangeOperationAdd    = HostConfigChangeOperation("add")
    +	HostConfigChangeOperationRemove = HostConfigChangeOperation("remove")
    +	HostConfigChangeOperationEdit   = HostConfigChangeOperation("edit")
    +	HostConfigChangeOperationIgnore = HostConfigChangeOperation("ignore")
    +)
    +
    +func init() {
    +	t["HostConfigChangeOperation"] = reflect.TypeOf((*HostConfigChangeOperation)(nil)).Elem()
    +}
    +
    +type HostCpuPackageVendor string
    +
    +const (
    +	HostCpuPackageVendorUnknown = HostCpuPackageVendor("unknown")
    +	HostCpuPackageVendorIntel   = HostCpuPackageVendor("intel")
    +	HostCpuPackageVendorAmd     = HostCpuPackageVendor("amd")
    +)
    +
    +func init() {
    +	t["HostCpuPackageVendor"] = reflect.TypeOf((*HostCpuPackageVendor)(nil)).Elem()
    +}
    +
    +type HostCpuPowerManagementInfoPolicyType string
    +
    +const (
    +	HostCpuPowerManagementInfoPolicyTypeOff           = HostCpuPowerManagementInfoPolicyType("off")
    +	HostCpuPowerManagementInfoPolicyTypeStaticPolicy  = HostCpuPowerManagementInfoPolicyType("staticPolicy")
    +	HostCpuPowerManagementInfoPolicyTypeDynamicPolicy = HostCpuPowerManagementInfoPolicyType("dynamicPolicy")
    +)
    +
    +func init() {
    +	t["HostCpuPowerManagementInfoPolicyType"] = reflect.TypeOf((*HostCpuPowerManagementInfoPolicyType)(nil)).Elem()
    +}
    +
    +type HostCryptoState string
    +
    +const (
    +	HostCryptoStateIncapable = HostCryptoState("incapable")
    +	HostCryptoStatePrepared  = HostCryptoState("prepared")
    +	HostCryptoStateSafe      = HostCryptoState("safe")
    +)
    +
    +func init() {
    +	t["HostCryptoState"] = reflect.TypeOf((*HostCryptoState)(nil)).Elem()
    +}
    +
    +type HostDasErrorEventHostDasErrorReason string
    +
    +const (
    +	HostDasErrorEventHostDasErrorReasonConfigFailed               = HostDasErrorEventHostDasErrorReason("configFailed")
    +	HostDasErrorEventHostDasErrorReasonTimeout                    = HostDasErrorEventHostDasErrorReason("timeout")
    +	HostDasErrorEventHostDasErrorReasonCommunicationInitFailed    = HostDasErrorEventHostDasErrorReason("communicationInitFailed")
    +	HostDasErrorEventHostDasErrorReasonHealthCheckScriptFailed    = HostDasErrorEventHostDasErrorReason("healthCheckScriptFailed")
    +	HostDasErrorEventHostDasErrorReasonAgentFailed                = HostDasErrorEventHostDasErrorReason("agentFailed")
    +	HostDasErrorEventHostDasErrorReasonAgentShutdown              = HostDasErrorEventHostDasErrorReason("agentShutdown")
    +	HostDasErrorEventHostDasErrorReasonIsolationAddressUnpingable = HostDasErrorEventHostDasErrorReason("isolationAddressUnpingable")
    +	HostDasErrorEventHostDasErrorReasonOther                      = HostDasErrorEventHostDasErrorReason("other")
    +)
    +
    +func init() {
    +	t["HostDasErrorEventHostDasErrorReason"] = reflect.TypeOf((*HostDasErrorEventHostDasErrorReason)(nil)).Elem()
    +}
    +
    +type HostDigestInfoDigestMethodType string
    +
    +const (
    +	HostDigestInfoDigestMethodTypeSHA1    = HostDigestInfoDigestMethodType("SHA1")
    +	HostDigestInfoDigestMethodTypeMD5     = HostDigestInfoDigestMethodType("MD5")
    +	HostDigestInfoDigestMethodTypeSHA256  = HostDigestInfoDigestMethodType("SHA256")
    +	HostDigestInfoDigestMethodTypeSHA384  = HostDigestInfoDigestMethodType("SHA384")
    +	HostDigestInfoDigestMethodTypeSHA512  = HostDigestInfoDigestMethodType("SHA512")
    +	HostDigestInfoDigestMethodTypeSM3_256 = HostDigestInfoDigestMethodType("SM3_256")
    +)
    +
    +func init() {
    +	t["HostDigestInfoDigestMethodType"] = reflect.TypeOf((*HostDigestInfoDigestMethodType)(nil)).Elem()
    +}
    +
    +type HostDisconnectedEventReasonCode string
    +
    +const (
    +	HostDisconnectedEventReasonCodeSslThumbprintVerifyFailed = HostDisconnectedEventReasonCode("sslThumbprintVerifyFailed")
    +	HostDisconnectedEventReasonCodeLicenseExpired            = HostDisconnectedEventReasonCode("licenseExpired")
    +	HostDisconnectedEventReasonCodeAgentUpgrade              = HostDisconnectedEventReasonCode("agentUpgrade")
    +	HostDisconnectedEventReasonCodeUserRequest               = HostDisconnectedEventReasonCode("userRequest")
    +	HostDisconnectedEventReasonCodeInsufficientLicenses      = HostDisconnectedEventReasonCode("insufficientLicenses")
    +	HostDisconnectedEventReasonCodeAgentOutOfDate            = HostDisconnectedEventReasonCode("agentOutOfDate")
    +	HostDisconnectedEventReasonCodePasswordDecryptFailure    = HostDisconnectedEventReasonCode("passwordDecryptFailure")
    +	HostDisconnectedEventReasonCodeUnknown                   = HostDisconnectedEventReasonCode("unknown")
    +	HostDisconnectedEventReasonCodeVcVRAMCapacityExceeded    = HostDisconnectedEventReasonCode("vcVRAMCapacityExceeded")
    +)
    +
    +func init() {
    +	t["HostDisconnectedEventReasonCode"] = reflect.TypeOf((*HostDisconnectedEventReasonCode)(nil)).Elem()
    +}
    +
    +type HostDiskPartitionInfoPartitionFormat string
    +
    +const (
    +	HostDiskPartitionInfoPartitionFormatGpt     = HostDiskPartitionInfoPartitionFormat("gpt")
    +	HostDiskPartitionInfoPartitionFormatMbr     = HostDiskPartitionInfoPartitionFormat("mbr")
    +	HostDiskPartitionInfoPartitionFormatUnknown = HostDiskPartitionInfoPartitionFormat("unknown")
    +)
    +
    +func init() {
    +	t["HostDiskPartitionInfoPartitionFormat"] = reflect.TypeOf((*HostDiskPartitionInfoPartitionFormat)(nil)).Elem()
    +}
    +
    +type HostDiskPartitionInfoType string
    +
    +const (
    +	HostDiskPartitionInfoTypeNone          = HostDiskPartitionInfoType("none")
    +	HostDiskPartitionInfoTypeVmfs          = HostDiskPartitionInfoType("vmfs")
    +	HostDiskPartitionInfoTypeLinuxNative   = HostDiskPartitionInfoType("linuxNative")
    +	HostDiskPartitionInfoTypeLinuxSwap     = HostDiskPartitionInfoType("linuxSwap")
    +	HostDiskPartitionInfoTypeExtended      = HostDiskPartitionInfoType("extended")
    +	HostDiskPartitionInfoTypeNtfs          = HostDiskPartitionInfoType("ntfs")
    +	HostDiskPartitionInfoTypeVmkDiagnostic = HostDiskPartitionInfoType("vmkDiagnostic")
    +	HostDiskPartitionInfoTypeVffs          = HostDiskPartitionInfoType("vffs")
    +)
    +
    +func init() {
    +	t["HostDiskPartitionInfoType"] = reflect.TypeOf((*HostDiskPartitionInfoType)(nil)).Elem()
    +}
    +
    +type HostFeatureVersionKey string
    +
    +const (
    +	HostFeatureVersionKeyFaultTolerance = HostFeatureVersionKey("faultTolerance")
    +)
    +
    +func init() {
    +	t["HostFeatureVersionKey"] = reflect.TypeOf((*HostFeatureVersionKey)(nil)).Elem()
    +}
    +
    +type HostFileSystemVolumeFileSystemType string
    +
    +const (
    +	HostFileSystemVolumeFileSystemTypeVMFS  = HostFileSystemVolumeFileSystemType("VMFS")
    +	HostFileSystemVolumeFileSystemTypeNFS   = HostFileSystemVolumeFileSystemType("NFS")
    +	HostFileSystemVolumeFileSystemTypeNFS41 = HostFileSystemVolumeFileSystemType("NFS41")
    +	HostFileSystemVolumeFileSystemTypeCIFS  = HostFileSystemVolumeFileSystemType("CIFS")
    +	HostFileSystemVolumeFileSystemTypeVsan  = HostFileSystemVolumeFileSystemType("vsan")
    +	HostFileSystemVolumeFileSystemTypeVFFS  = HostFileSystemVolumeFileSystemType("VFFS")
    +	HostFileSystemVolumeFileSystemTypeVVOL  = HostFileSystemVolumeFileSystemType("VVOL")
    +	HostFileSystemVolumeFileSystemTypePMEM  = HostFileSystemVolumeFileSystemType("PMEM")
    +	HostFileSystemVolumeFileSystemTypeOTHER = HostFileSystemVolumeFileSystemType("OTHER")
    +)
    +
    +func init() {
    +	t["HostFileSystemVolumeFileSystemType"] = reflect.TypeOf((*HostFileSystemVolumeFileSystemType)(nil)).Elem()
    +}
    +
    +type HostFirewallRuleDirection string
    +
    +const (
    +	HostFirewallRuleDirectionInbound  = HostFirewallRuleDirection("inbound")
    +	HostFirewallRuleDirectionOutbound = HostFirewallRuleDirection("outbound")
    +)
    +
    +func init() {
    +	t["HostFirewallRuleDirection"] = reflect.TypeOf((*HostFirewallRuleDirection)(nil)).Elem()
    +}
    +
    +type HostFirewallRulePortType string
    +
    +const (
    +	HostFirewallRulePortTypeSrc = HostFirewallRulePortType("src")
    +	HostFirewallRulePortTypeDst = HostFirewallRulePortType("dst")
    +)
    +
    +func init() {
    +	t["HostFirewallRulePortType"] = reflect.TypeOf((*HostFirewallRulePortType)(nil)).Elem()
    +}
    +
    +type HostFirewallRuleProtocol string
    +
    +const (
    +	HostFirewallRuleProtocolTcp = HostFirewallRuleProtocol("tcp")
    +	HostFirewallRuleProtocolUdp = HostFirewallRuleProtocol("udp")
    +)
    +
    +func init() {
    +	t["HostFirewallRuleProtocol"] = reflect.TypeOf((*HostFirewallRuleProtocol)(nil)).Elem()
    +}
    +
    +type HostGraphicsConfigGraphicsType string
    +
    +const (
    +	HostGraphicsConfigGraphicsTypeShared       = HostGraphicsConfigGraphicsType("shared")
    +	HostGraphicsConfigGraphicsTypeSharedDirect = HostGraphicsConfigGraphicsType("sharedDirect")
    +)
    +
    +func init() {
    +	t["HostGraphicsConfigGraphicsType"] = reflect.TypeOf((*HostGraphicsConfigGraphicsType)(nil)).Elem()
    +}
    +
    +type HostGraphicsConfigSharedPassthruAssignmentPolicy string
    +
    +const (
    +	HostGraphicsConfigSharedPassthruAssignmentPolicyPerformance   = HostGraphicsConfigSharedPassthruAssignmentPolicy("performance")
    +	HostGraphicsConfigSharedPassthruAssignmentPolicyConsolidation = HostGraphicsConfigSharedPassthruAssignmentPolicy("consolidation")
    +)
    +
    +func init() {
    +	t["HostGraphicsConfigSharedPassthruAssignmentPolicy"] = reflect.TypeOf((*HostGraphicsConfigSharedPassthruAssignmentPolicy)(nil)).Elem()
    +}
    +
    +type HostGraphicsInfoGraphicsType string
    +
    +const (
    +	HostGraphicsInfoGraphicsTypeBasic        = HostGraphicsInfoGraphicsType("basic")
    +	HostGraphicsInfoGraphicsTypeShared       = HostGraphicsInfoGraphicsType("shared")
    +	HostGraphicsInfoGraphicsTypeDirect       = HostGraphicsInfoGraphicsType("direct")
    +	HostGraphicsInfoGraphicsTypeSharedDirect = HostGraphicsInfoGraphicsType("sharedDirect")
    +)
    +
    +func init() {
    +	t["HostGraphicsInfoGraphicsType"] = reflect.TypeOf((*HostGraphicsInfoGraphicsType)(nil)).Elem()
    +}
    +
    +type HostHardwareElementStatus string
    +
    +const (
    +	HostHardwareElementStatusUnknown = HostHardwareElementStatus("Unknown")
    +	HostHardwareElementStatusGreen   = HostHardwareElementStatus("Green")
    +	HostHardwareElementStatusYellow  = HostHardwareElementStatus("Yellow")
    +	HostHardwareElementStatusRed     = HostHardwareElementStatus("Red")
    +)
    +
    +func init() {
    +	t["HostHardwareElementStatus"] = reflect.TypeOf((*HostHardwareElementStatus)(nil)).Elem()
    +}
    +
    +type HostHasComponentFailureHostComponentType string
    +
    +const (
    +	HostHasComponentFailureHostComponentTypeDatastore = HostHasComponentFailureHostComponentType("Datastore")
    +)
    +
    +func init() {
    +	t["HostHasComponentFailureHostComponentType"] = reflect.TypeOf((*HostHasComponentFailureHostComponentType)(nil)).Elem()
    +}
    +
    +type HostImageAcceptanceLevel string
    +
    +const (
    +	HostImageAcceptanceLevelVmware_certified = HostImageAcceptanceLevel("vmware_certified")
    +	HostImageAcceptanceLevelVmware_accepted  = HostImageAcceptanceLevel("vmware_accepted")
    +	HostImageAcceptanceLevelPartner          = HostImageAcceptanceLevel("partner")
    +	HostImageAcceptanceLevelCommunity        = HostImageAcceptanceLevel("community")
    +)
    +
    +func init() {
    +	t["HostImageAcceptanceLevel"] = reflect.TypeOf((*HostImageAcceptanceLevel)(nil)).Elem()
    +}
    +
    +type HostIncompatibleForFaultToleranceReason string
    +
    +const (
    +	HostIncompatibleForFaultToleranceReasonProduct   = HostIncompatibleForFaultToleranceReason("product")
    +	HostIncompatibleForFaultToleranceReasonProcessor = HostIncompatibleForFaultToleranceReason("processor")
    +)
    +
    +func init() {
    +	t["HostIncompatibleForFaultToleranceReason"] = reflect.TypeOf((*HostIncompatibleForFaultToleranceReason)(nil)).Elem()
    +}
    +
    +type HostIncompatibleForRecordReplayReason string
    +
    +const (
    +	HostIncompatibleForRecordReplayReasonProduct   = HostIncompatibleForRecordReplayReason("product")
    +	HostIncompatibleForRecordReplayReasonProcessor = HostIncompatibleForRecordReplayReason("processor")
    +)
    +
    +func init() {
    +	t["HostIncompatibleForRecordReplayReason"] = reflect.TypeOf((*HostIncompatibleForRecordReplayReason)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaChapAuthenticationType string
    +
    +const (
    +	HostInternetScsiHbaChapAuthenticationTypeChapProhibited  = HostInternetScsiHbaChapAuthenticationType("chapProhibited")
    +	HostInternetScsiHbaChapAuthenticationTypeChapDiscouraged = HostInternetScsiHbaChapAuthenticationType("chapDiscouraged")
    +	HostInternetScsiHbaChapAuthenticationTypeChapPreferred   = HostInternetScsiHbaChapAuthenticationType("chapPreferred")
    +	HostInternetScsiHbaChapAuthenticationTypeChapRequired    = HostInternetScsiHbaChapAuthenticationType("chapRequired")
    +)
    +
    +func init() {
    +	t["HostInternetScsiHbaChapAuthenticationType"] = reflect.TypeOf((*HostInternetScsiHbaChapAuthenticationType)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaDigestType string
    +
    +const (
    +	HostInternetScsiHbaDigestTypeDigestProhibited  = HostInternetScsiHbaDigestType("digestProhibited")
    +	HostInternetScsiHbaDigestTypeDigestDiscouraged = HostInternetScsiHbaDigestType("digestDiscouraged")
    +	HostInternetScsiHbaDigestTypeDigestPreferred   = HostInternetScsiHbaDigestType("digestPreferred")
    +	HostInternetScsiHbaDigestTypeDigestRequired    = HostInternetScsiHbaDigestType("digestRequired")
    +)
    +
    +func init() {
    +	t["HostInternetScsiHbaDigestType"] = reflect.TypeOf((*HostInternetScsiHbaDigestType)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationType string
    +
    +const (
    +	HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationTypeDHCP           = HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationType("DHCP")
    +	HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationTypeAutoConfigured = HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationType("AutoConfigured")
    +	HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationTypeStatic         = HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationType("Static")
    +	HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationTypeOther          = HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationType("Other")
    +)
    +
    +func init() {
    +	t["HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationType"] = reflect.TypeOf((*HostInternetScsiHbaIscsiIpv6AddressAddressConfigurationType)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaIscsiIpv6AddressIPv6AddressOperation string
    +
    +const (
    +	HostInternetScsiHbaIscsiIpv6AddressIPv6AddressOperationAdd    = HostInternetScsiHbaIscsiIpv6AddressIPv6AddressOperation("add")
    +	HostInternetScsiHbaIscsiIpv6AddressIPv6AddressOperationRemove = HostInternetScsiHbaIscsiIpv6AddressIPv6AddressOperation("remove")
    +)
    +
    +func init() {
    +	t["HostInternetScsiHbaIscsiIpv6AddressIPv6AddressOperation"] = reflect.TypeOf((*HostInternetScsiHbaIscsiIpv6AddressIPv6AddressOperation)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaNetworkBindingSupportType string
    +
    +const (
    +	HostInternetScsiHbaNetworkBindingSupportTypeNotsupported = HostInternetScsiHbaNetworkBindingSupportType("notsupported")
    +	HostInternetScsiHbaNetworkBindingSupportTypeOptional     = HostInternetScsiHbaNetworkBindingSupportType("optional")
    +	HostInternetScsiHbaNetworkBindingSupportTypeRequired     = HostInternetScsiHbaNetworkBindingSupportType("required")
    +)
    +
    +func init() {
    +	t["HostInternetScsiHbaNetworkBindingSupportType"] = reflect.TypeOf((*HostInternetScsiHbaNetworkBindingSupportType)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaStaticTargetTargetDiscoveryMethod string
    +
    +const (
    +	HostInternetScsiHbaStaticTargetTargetDiscoveryMethodStaticMethod     = HostInternetScsiHbaStaticTargetTargetDiscoveryMethod("staticMethod")
    +	HostInternetScsiHbaStaticTargetTargetDiscoveryMethodSendTargetMethod = HostInternetScsiHbaStaticTargetTargetDiscoveryMethod("sendTargetMethod")
    +	HostInternetScsiHbaStaticTargetTargetDiscoveryMethodSlpMethod        = HostInternetScsiHbaStaticTargetTargetDiscoveryMethod("slpMethod")
    +	HostInternetScsiHbaStaticTargetTargetDiscoveryMethodIsnsMethod       = HostInternetScsiHbaStaticTargetTargetDiscoveryMethod("isnsMethod")
    +	HostInternetScsiHbaStaticTargetTargetDiscoveryMethodUnknownMethod    = HostInternetScsiHbaStaticTargetTargetDiscoveryMethod("unknownMethod")
    +)
    +
    +func init() {
    +	t["HostInternetScsiHbaStaticTargetTargetDiscoveryMethod"] = reflect.TypeOf((*HostInternetScsiHbaStaticTargetTargetDiscoveryMethod)(nil)).Elem()
    +}
    +
    +type HostIpConfigIpV6AddressConfigType string
    +
    +const (
    +	HostIpConfigIpV6AddressConfigTypeOther     = HostIpConfigIpV6AddressConfigType("other")
    +	HostIpConfigIpV6AddressConfigTypeManual    = HostIpConfigIpV6AddressConfigType("manual")
    +	HostIpConfigIpV6AddressConfigTypeDhcp      = HostIpConfigIpV6AddressConfigType("dhcp")
    +	HostIpConfigIpV6AddressConfigTypeLinklayer = HostIpConfigIpV6AddressConfigType("linklayer")
    +	HostIpConfigIpV6AddressConfigTypeRandom    = HostIpConfigIpV6AddressConfigType("random")
    +)
    +
    +func init() {
    +	t["HostIpConfigIpV6AddressConfigType"] = reflect.TypeOf((*HostIpConfigIpV6AddressConfigType)(nil)).Elem()
    +}
    +
    +type HostIpConfigIpV6AddressStatus string
    +
    +const (
    +	HostIpConfigIpV6AddressStatusPreferred    = HostIpConfigIpV6AddressStatus("preferred")
    +	HostIpConfigIpV6AddressStatusDeprecated   = HostIpConfigIpV6AddressStatus("deprecated")
    +	HostIpConfigIpV6AddressStatusInvalid      = HostIpConfigIpV6AddressStatus("invalid")
    +	HostIpConfigIpV6AddressStatusInaccessible = HostIpConfigIpV6AddressStatus("inaccessible")
    +	HostIpConfigIpV6AddressStatusUnknown      = HostIpConfigIpV6AddressStatus("unknown")
    +	HostIpConfigIpV6AddressStatusTentative    = HostIpConfigIpV6AddressStatus("tentative")
    +	HostIpConfigIpV6AddressStatusDuplicate    = HostIpConfigIpV6AddressStatus("duplicate")
    +)
    +
    +func init() {
    +	t["HostIpConfigIpV6AddressStatus"] = reflect.TypeOf((*HostIpConfigIpV6AddressStatus)(nil)).Elem()
    +}
    +
    +type HostLicensableResourceKey string
    +
    +const (
    +	HostLicensableResourceKeyNumCpuPackages = HostLicensableResourceKey("numCpuPackages")
    +	HostLicensableResourceKeyNumCpuCores    = HostLicensableResourceKey("numCpuCores")
    +	HostLicensableResourceKeyMemorySize     = HostLicensableResourceKey("memorySize")
    +	HostLicensableResourceKeyMemoryForVms   = HostLicensableResourceKey("memoryForVms")
    +	HostLicensableResourceKeyNumVmsStarted  = HostLicensableResourceKey("numVmsStarted")
    +	HostLicensableResourceKeyNumVmsStarting = HostLicensableResourceKey("numVmsStarting")
    +)
    +
    +func init() {
    +	t["HostLicensableResourceKey"] = reflect.TypeOf((*HostLicensableResourceKey)(nil)).Elem()
    +}
    +
    +type HostLockdownMode string
    +
    +const (
    +	HostLockdownModeLockdownDisabled = HostLockdownMode("lockdownDisabled")
    +	HostLockdownModeLockdownNormal   = HostLockdownMode("lockdownNormal")
    +	HostLockdownModeLockdownStrict   = HostLockdownMode("lockdownStrict")
    +)
    +
    +func init() {
    +	t["HostLockdownMode"] = reflect.TypeOf((*HostLockdownMode)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerFileType string
    +
    +const (
    +	HostLowLevelProvisioningManagerFileTypeFile        = HostLowLevelProvisioningManagerFileType("File")
    +	HostLowLevelProvisioningManagerFileTypeVirtualDisk = HostLowLevelProvisioningManagerFileType("VirtualDisk")
    +	HostLowLevelProvisioningManagerFileTypeDirectory   = HostLowLevelProvisioningManagerFileType("Directory")
    +)
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerFileType"] = reflect.TypeOf((*HostLowLevelProvisioningManagerFileType)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerReloadTarget string
    +
    +const (
    +	HostLowLevelProvisioningManagerReloadTargetCurrentConfig  = HostLowLevelProvisioningManagerReloadTarget("currentConfig")
    +	HostLowLevelProvisioningManagerReloadTargetSnapshotConfig = HostLowLevelProvisioningManagerReloadTarget("snapshotConfig")
    +)
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerReloadTarget"] = reflect.TypeOf((*HostLowLevelProvisioningManagerReloadTarget)(nil)).Elem()
    +}
    +
    +type HostMountInfoInaccessibleReason string
    +
    +const (
    +	HostMountInfoInaccessibleReasonAllPathsDown_Start   = HostMountInfoInaccessibleReason("AllPathsDown_Start")
    +	HostMountInfoInaccessibleReasonAllPathsDown_Timeout = HostMountInfoInaccessibleReason("AllPathsDown_Timeout")
    +	HostMountInfoInaccessibleReasonPermanentDeviceLoss  = HostMountInfoInaccessibleReason("PermanentDeviceLoss")
    +)
    +
    +func init() {
    +	t["HostMountInfoInaccessibleReason"] = reflect.TypeOf((*HostMountInfoInaccessibleReason)(nil)).Elem()
    +}
    +
    +type HostMountMode string
    +
    +const (
    +	HostMountModeReadWrite = HostMountMode("readWrite")
    +	HostMountModeReadOnly  = HostMountMode("readOnly")
    +)
    +
    +func init() {
    +	t["HostMountMode"] = reflect.TypeOf((*HostMountMode)(nil)).Elem()
    +}
    +
    +type HostNasVolumeSecurityType string
    +
    +const (
    +	HostNasVolumeSecurityTypeAUTH_SYS  = HostNasVolumeSecurityType("AUTH_SYS")
    +	HostNasVolumeSecurityTypeSEC_KRB5  = HostNasVolumeSecurityType("SEC_KRB5")
    +	HostNasVolumeSecurityTypeSEC_KRB5I = HostNasVolumeSecurityType("SEC_KRB5I")
    +)
    +
    +func init() {
    +	t["HostNasVolumeSecurityType"] = reflect.TypeOf((*HostNasVolumeSecurityType)(nil)).Elem()
    +}
    +
    +type HostNetStackInstanceCongestionControlAlgorithmType string
    +
    +const (
    +	HostNetStackInstanceCongestionControlAlgorithmTypeNewreno = HostNetStackInstanceCongestionControlAlgorithmType("newreno")
    +	HostNetStackInstanceCongestionControlAlgorithmTypeCubic   = HostNetStackInstanceCongestionControlAlgorithmType("cubic")
    +)
    +
    +func init() {
    +	t["HostNetStackInstanceCongestionControlAlgorithmType"] = reflect.TypeOf((*HostNetStackInstanceCongestionControlAlgorithmType)(nil)).Elem()
    +}
    +
    +type HostNetStackInstanceSystemStackKey string
    +
    +const (
    +	HostNetStackInstanceSystemStackKeyDefaultTcpipStack   = HostNetStackInstanceSystemStackKey("defaultTcpipStack")
    +	HostNetStackInstanceSystemStackKeyVmotion             = HostNetStackInstanceSystemStackKey("vmotion")
    +	HostNetStackInstanceSystemStackKeyVSphereProvisioning = HostNetStackInstanceSystemStackKey("vSphereProvisioning")
    +)
    +
    +func init() {
    +	t["HostNetStackInstanceSystemStackKey"] = reflect.TypeOf((*HostNetStackInstanceSystemStackKey)(nil)).Elem()
    +}
    +
    +type HostNumericSensorHealthState string
    +
    +const (
    +	HostNumericSensorHealthStateUnknown = HostNumericSensorHealthState("unknown")
    +	HostNumericSensorHealthStateGreen   = HostNumericSensorHealthState("green")
    +	HostNumericSensorHealthStateYellow  = HostNumericSensorHealthState("yellow")
    +	HostNumericSensorHealthStateRed     = HostNumericSensorHealthState("red")
    +)
    +
    +func init() {
    +	t["HostNumericSensorHealthState"] = reflect.TypeOf((*HostNumericSensorHealthState)(nil)).Elem()
    +}
    +
    +type HostNumericSensorType string
    +
    +const (
    +	HostNumericSensorTypeFan         = HostNumericSensorType("fan")
    +	HostNumericSensorTypePower       = HostNumericSensorType("power")
    +	HostNumericSensorTypeTemperature = HostNumericSensorType("temperature")
    +	HostNumericSensorTypeVoltage     = HostNumericSensorType("voltage")
    +	HostNumericSensorTypeOther       = HostNumericSensorType("other")
    +	HostNumericSensorTypeProcessor   = HostNumericSensorType("processor")
    +	HostNumericSensorTypeMemory      = HostNumericSensorType("memory")
    +	HostNumericSensorTypeStorage     = HostNumericSensorType("storage")
    +	HostNumericSensorTypeSystemBoard = HostNumericSensorType("systemBoard")
    +	HostNumericSensorTypeBattery     = HostNumericSensorType("battery")
    +	HostNumericSensorTypeBios        = HostNumericSensorType("bios")
    +	HostNumericSensorTypeCable       = HostNumericSensorType("cable")
    +	HostNumericSensorTypeWatchdog    = HostNumericSensorType("watchdog")
    +)
    +
    +func init() {
    +	t["HostNumericSensorType"] = reflect.TypeOf((*HostNumericSensorType)(nil)).Elem()
    +}
    +
    +type HostOpaqueSwitchOpaqueSwitchState string
    +
    +const (
    +	HostOpaqueSwitchOpaqueSwitchStateUp      = HostOpaqueSwitchOpaqueSwitchState("up")
    +	HostOpaqueSwitchOpaqueSwitchStateWarning = HostOpaqueSwitchOpaqueSwitchState("warning")
    +	HostOpaqueSwitchOpaqueSwitchStateDown    = HostOpaqueSwitchOpaqueSwitchState("down")
    +)
    +
    +func init() {
    +	t["HostOpaqueSwitchOpaqueSwitchState"] = reflect.TypeOf((*HostOpaqueSwitchOpaqueSwitchState)(nil)).Elem()
    +}
    +
    +type HostPatchManagerInstallState string
    +
    +const (
    +	HostPatchManagerInstallStateHostRestarted = HostPatchManagerInstallState("hostRestarted")
    +	HostPatchManagerInstallStateImageActive   = HostPatchManagerInstallState("imageActive")
    +)
    +
    +func init() {
    +	t["HostPatchManagerInstallState"] = reflect.TypeOf((*HostPatchManagerInstallState)(nil)).Elem()
    +}
    +
    +type HostPatchManagerIntegrityStatus string
    +
    +const (
    +	HostPatchManagerIntegrityStatusValidated           = HostPatchManagerIntegrityStatus("validated")
    +	HostPatchManagerIntegrityStatusKeyNotFound         = HostPatchManagerIntegrityStatus("keyNotFound")
    +	HostPatchManagerIntegrityStatusKeyRevoked          = HostPatchManagerIntegrityStatus("keyRevoked")
    +	HostPatchManagerIntegrityStatusKeyExpired          = HostPatchManagerIntegrityStatus("keyExpired")
    +	HostPatchManagerIntegrityStatusDigestMismatch      = HostPatchManagerIntegrityStatus("digestMismatch")
    +	HostPatchManagerIntegrityStatusNotEnoughSignatures = HostPatchManagerIntegrityStatus("notEnoughSignatures")
    +	HostPatchManagerIntegrityStatusValidationError     = HostPatchManagerIntegrityStatus("validationError")
    +)
    +
    +func init() {
    +	t["HostPatchManagerIntegrityStatus"] = reflect.TypeOf((*HostPatchManagerIntegrityStatus)(nil)).Elem()
    +}
    +
    +type HostPatchManagerReason string
    +
    +const (
    +	HostPatchManagerReasonObsoleted         = HostPatchManagerReason("obsoleted")
    +	HostPatchManagerReasonMissingPatch      = HostPatchManagerReason("missingPatch")
    +	HostPatchManagerReasonMissingLib        = HostPatchManagerReason("missingLib")
    +	HostPatchManagerReasonHasDependentPatch = HostPatchManagerReason("hasDependentPatch")
    +	HostPatchManagerReasonConflictPatch     = HostPatchManagerReason("conflictPatch")
    +	HostPatchManagerReasonConflictLib       = HostPatchManagerReason("conflictLib")
    +)
    +
    +func init() {
    +	t["HostPatchManagerReason"] = reflect.TypeOf((*HostPatchManagerReason)(nil)).Elem()
    +}
    +
    +type HostPowerOperationType string
    +
    +const (
    +	HostPowerOperationTypePowerOn  = HostPowerOperationType("powerOn")
    +	HostPowerOperationTypePowerOff = HostPowerOperationType("powerOff")
    +)
    +
    +func init() {
    +	t["HostPowerOperationType"] = reflect.TypeOf((*HostPowerOperationType)(nil)).Elem()
    +}
    +
    +type HostProfileManagerAnswerFileStatus string
    +
    +const (
    +	HostProfileManagerAnswerFileStatusValid   = HostProfileManagerAnswerFileStatus("valid")
    +	HostProfileManagerAnswerFileStatusInvalid = HostProfileManagerAnswerFileStatus("invalid")
    +	HostProfileManagerAnswerFileStatusUnknown = HostProfileManagerAnswerFileStatus("unknown")
    +)
    +
    +func init() {
    +	t["HostProfileManagerAnswerFileStatus"] = reflect.TypeOf((*HostProfileManagerAnswerFileStatus)(nil)).Elem()
    +}
    +
    +type HostProfileManagerCompositionResultResultElementStatus string
    +
    +const (
    +	HostProfileManagerCompositionResultResultElementStatusSuccess = HostProfileManagerCompositionResultResultElementStatus("success")
    +	HostProfileManagerCompositionResultResultElementStatusError   = HostProfileManagerCompositionResultResultElementStatus("error")
    +)
    +
    +func init() {
    +	t["HostProfileManagerCompositionResultResultElementStatus"] = reflect.TypeOf((*HostProfileManagerCompositionResultResultElementStatus)(nil)).Elem()
    +}
    +
    +type HostProfileManagerCompositionValidationResultResultElementStatus string
    +
    +const (
    +	HostProfileManagerCompositionValidationResultResultElementStatusSuccess = HostProfileManagerCompositionValidationResultResultElementStatus("success")
    +	HostProfileManagerCompositionValidationResultResultElementStatusError   = HostProfileManagerCompositionValidationResultResultElementStatus("error")
    +)
    +
    +func init() {
    +	t["HostProfileManagerCompositionValidationResultResultElementStatus"] = reflect.TypeOf((*HostProfileManagerCompositionValidationResultResultElementStatus)(nil)).Elem()
    +}
    +
    +type HostProfileManagerTaskListRequirement string
    +
    +const (
    +	HostProfileManagerTaskListRequirementMaintenanceModeRequired = HostProfileManagerTaskListRequirement("maintenanceModeRequired")
    +	HostProfileManagerTaskListRequirementRebootRequired          = HostProfileManagerTaskListRequirement("rebootRequired")
    +)
    +
    +func init() {
    +	t["HostProfileManagerTaskListRequirement"] = reflect.TypeOf((*HostProfileManagerTaskListRequirement)(nil)).Elem()
    +}
    +
    +type HostProfileValidationFailureInfoUpdateType string
    +
    +const (
    +	HostProfileValidationFailureInfoUpdateTypeHostBased = HostProfileValidationFailureInfoUpdateType("HostBased")
    +	HostProfileValidationFailureInfoUpdateTypeImport    = HostProfileValidationFailureInfoUpdateType("Import")
    +	HostProfileValidationFailureInfoUpdateTypeEdit      = HostProfileValidationFailureInfoUpdateType("Edit")
    +	HostProfileValidationFailureInfoUpdateTypeCompose   = HostProfileValidationFailureInfoUpdateType("Compose")
    +)
    +
    +func init() {
    +	t["HostProfileValidationFailureInfoUpdateType"] = reflect.TypeOf((*HostProfileValidationFailureInfoUpdateType)(nil)).Elem()
    +}
    +
    +type HostProfileValidationState string
    +
    +const (
    +	HostProfileValidationStateReady   = HostProfileValidationState("Ready")
    +	HostProfileValidationStateRunning = HostProfileValidationState("Running")
    +	HostProfileValidationStateFailed  = HostProfileValidationState("Failed")
    +)
    +
    +func init() {
    +	t["HostProfileValidationState"] = reflect.TypeOf((*HostProfileValidationState)(nil)).Elem()
    +}
    +
    +type HostProtocolEndpointPEType string
    +
    +const (
    +	HostProtocolEndpointPETypeBlock = HostProtocolEndpointPEType("block")
    +	HostProtocolEndpointPETypeNas   = HostProtocolEndpointPEType("nas")
    +)
    +
    +func init() {
    +	t["HostProtocolEndpointPEType"] = reflect.TypeOf((*HostProtocolEndpointPEType)(nil)).Elem()
    +}
    +
    +type HostProtocolEndpointProtocolEndpointType string
    +
    +const (
    +	HostProtocolEndpointProtocolEndpointTypeScsi  = HostProtocolEndpointProtocolEndpointType("scsi")
    +	HostProtocolEndpointProtocolEndpointTypeNfs   = HostProtocolEndpointProtocolEndpointType("nfs")
    +	HostProtocolEndpointProtocolEndpointTypeNfs4x = HostProtocolEndpointProtocolEndpointType("nfs4x")
    +)
    +
    +func init() {
    +	t["HostProtocolEndpointProtocolEndpointType"] = reflect.TypeOf((*HostProtocolEndpointProtocolEndpointType)(nil)).Elem()
    +}
    +
    +type HostReplayUnsupportedReason string
    +
    +const (
    +	HostReplayUnsupportedReasonIncompatibleProduct = HostReplayUnsupportedReason("incompatibleProduct")
    +	HostReplayUnsupportedReasonIncompatibleCpu     = HostReplayUnsupportedReason("incompatibleCpu")
    +	HostReplayUnsupportedReasonHvDisabled          = HostReplayUnsupportedReason("hvDisabled")
    +	HostReplayUnsupportedReasonCpuidLimitSet       = HostReplayUnsupportedReason("cpuidLimitSet")
    +	HostReplayUnsupportedReasonOldBIOS             = HostReplayUnsupportedReason("oldBIOS")
    +	HostReplayUnsupportedReasonUnknown             = HostReplayUnsupportedReason("unknown")
    +)
    +
    +func init() {
    +	t["HostReplayUnsupportedReason"] = reflect.TypeOf((*HostReplayUnsupportedReason)(nil)).Elem()
    +}
    +
    +type HostRuntimeInfoNetStackInstanceRuntimeInfoState string
    +
    +const (
    +	HostRuntimeInfoNetStackInstanceRuntimeInfoStateInactive     = HostRuntimeInfoNetStackInstanceRuntimeInfoState("inactive")
    +	HostRuntimeInfoNetStackInstanceRuntimeInfoStateActive       = HostRuntimeInfoNetStackInstanceRuntimeInfoState("active")
    +	HostRuntimeInfoNetStackInstanceRuntimeInfoStateDeactivating = HostRuntimeInfoNetStackInstanceRuntimeInfoState("deactivating")
    +	HostRuntimeInfoNetStackInstanceRuntimeInfoStateActivating   = HostRuntimeInfoNetStackInstanceRuntimeInfoState("activating")
    +)
    +
    +func init() {
    +	t["HostRuntimeInfoNetStackInstanceRuntimeInfoState"] = reflect.TypeOf((*HostRuntimeInfoNetStackInstanceRuntimeInfoState)(nil)).Elem()
    +}
    +
    +type HostServicePolicy string
    +
    +const (
    +	HostServicePolicyOn        = HostServicePolicy("on")
    +	HostServicePolicyAutomatic = HostServicePolicy("automatic")
    +	HostServicePolicyOff       = HostServicePolicy("off")
    +)
    +
    +func init() {
    +	t["HostServicePolicy"] = reflect.TypeOf((*HostServicePolicy)(nil)).Elem()
    +}
    +
    +type HostSnmpAgentCapability string
    +
    +const (
    +	HostSnmpAgentCapabilityCOMPLETE      = HostSnmpAgentCapability("COMPLETE")
    +	HostSnmpAgentCapabilityDIAGNOSTICS   = HostSnmpAgentCapability("DIAGNOSTICS")
    +	HostSnmpAgentCapabilityCONFIGURATION = HostSnmpAgentCapability("CONFIGURATION")
    +)
    +
    +func init() {
    +	t["HostSnmpAgentCapability"] = reflect.TypeOf((*HostSnmpAgentCapability)(nil)).Elem()
    +}
    +
    +type HostStandbyMode string
    +
    +const (
    +	HostStandbyModeEntering = HostStandbyMode("entering")
    +	HostStandbyModeExiting  = HostStandbyMode("exiting")
    +	HostStandbyModeIn       = HostStandbyMode("in")
    +	HostStandbyModeNone     = HostStandbyMode("none")
    +)
    +
    +func init() {
    +	t["HostStandbyMode"] = reflect.TypeOf((*HostStandbyMode)(nil)).Elem()
    +}
    +
    +type HostSystemConnectionState string
    +
    +const (
    +	HostSystemConnectionStateConnected     = HostSystemConnectionState("connected")
    +	HostSystemConnectionStateNotResponding = HostSystemConnectionState("notResponding")
    +	HostSystemConnectionStateDisconnected  = HostSystemConnectionState("disconnected")
    +)
    +
    +func init() {
    +	t["HostSystemConnectionState"] = reflect.TypeOf((*HostSystemConnectionState)(nil)).Elem()
    +}
    +
    +type HostSystemIdentificationInfoIdentifier string
    +
    +const (
    +	HostSystemIdentificationInfoIdentifierAssetTag          = HostSystemIdentificationInfoIdentifier("AssetTag")
    +	HostSystemIdentificationInfoIdentifierServiceTag        = HostSystemIdentificationInfoIdentifier("ServiceTag")
    +	HostSystemIdentificationInfoIdentifierOemSpecificString = HostSystemIdentificationInfoIdentifier("OemSpecificString")
    +)
    +
    +func init() {
    +	t["HostSystemIdentificationInfoIdentifier"] = reflect.TypeOf((*HostSystemIdentificationInfoIdentifier)(nil)).Elem()
    +}
    +
    +type HostSystemPowerState string
    +
    +const (
    +	HostSystemPowerStatePoweredOn  = HostSystemPowerState("poweredOn")
    +	HostSystemPowerStatePoweredOff = HostSystemPowerState("poweredOff")
    +	HostSystemPowerStateStandBy    = HostSystemPowerState("standBy")
    +	HostSystemPowerStateUnknown    = HostSystemPowerState("unknown")
    +)
    +
    +func init() {
    +	t["HostSystemPowerState"] = reflect.TypeOf((*HostSystemPowerState)(nil)).Elem()
    +}
    +
    +type HostSystemRemediationStateState string
    +
    +const (
    +	HostSystemRemediationStateStateRemediationReady            = HostSystemRemediationStateState("remediationReady")
    +	HostSystemRemediationStateStatePrecheckRemediationRunning  = HostSystemRemediationStateState("precheckRemediationRunning")
    +	HostSystemRemediationStateStatePrecheckRemediationComplete = HostSystemRemediationStateState("precheckRemediationComplete")
    +	HostSystemRemediationStateStatePrecheckRemediationFailed   = HostSystemRemediationStateState("precheckRemediationFailed")
    +	HostSystemRemediationStateStateRemediationRunning          = HostSystemRemediationStateState("remediationRunning")
    +	HostSystemRemediationStateStateRemediationFailed           = HostSystemRemediationStateState("remediationFailed")
    +)
    +
    +func init() {
    +	t["HostSystemRemediationStateState"] = reflect.TypeOf((*HostSystemRemediationStateState)(nil)).Elem()
    +}
    +
    +type HostTpmAttestationInfoAcceptanceStatus string
    +
    +const (
    +	HostTpmAttestationInfoAcceptanceStatusNotAccepted = HostTpmAttestationInfoAcceptanceStatus("notAccepted")
    +	HostTpmAttestationInfoAcceptanceStatusAccepted    = HostTpmAttestationInfoAcceptanceStatus("accepted")
    +)
    +
    +func init() {
    +	t["HostTpmAttestationInfoAcceptanceStatus"] = reflect.TypeOf((*HostTpmAttestationInfoAcceptanceStatus)(nil)).Elem()
    +}
    +
    +type HostUnresolvedVmfsExtentUnresolvedReason string
    +
    +const (
    +	HostUnresolvedVmfsExtentUnresolvedReasonDiskIdMismatch = HostUnresolvedVmfsExtentUnresolvedReason("diskIdMismatch")
    +	HostUnresolvedVmfsExtentUnresolvedReasonUuidConflict   = HostUnresolvedVmfsExtentUnresolvedReason("uuidConflict")
    +)
    +
    +func init() {
    +	t["HostUnresolvedVmfsExtentUnresolvedReason"] = reflect.TypeOf((*HostUnresolvedVmfsExtentUnresolvedReason)(nil)).Elem()
    +}
    +
    +type HostUnresolvedVmfsResolutionSpecVmfsUuidResolution string
    +
    +const (
    +	HostUnresolvedVmfsResolutionSpecVmfsUuidResolutionResignature = HostUnresolvedVmfsResolutionSpecVmfsUuidResolution("resignature")
    +	HostUnresolvedVmfsResolutionSpecVmfsUuidResolutionForceMount  = HostUnresolvedVmfsResolutionSpecVmfsUuidResolution("forceMount")
    +)
    +
    +func init() {
    +	t["HostUnresolvedVmfsResolutionSpecVmfsUuidResolution"] = reflect.TypeOf((*HostUnresolvedVmfsResolutionSpecVmfsUuidResolution)(nil)).Elem()
    +}
    +
    +type HostVirtualNicManagerNicType string
    +
    +const (
    +	HostVirtualNicManagerNicTypeVmotion               = HostVirtualNicManagerNicType("vmotion")
    +	HostVirtualNicManagerNicTypeFaultToleranceLogging = HostVirtualNicManagerNicType("faultToleranceLogging")
    +	HostVirtualNicManagerNicTypeVSphereReplication    = HostVirtualNicManagerNicType("vSphereReplication")
    +	HostVirtualNicManagerNicTypeVSphereReplicationNFC = HostVirtualNicManagerNicType("vSphereReplicationNFC")
    +	HostVirtualNicManagerNicTypeManagement            = HostVirtualNicManagerNicType("management")
    +	HostVirtualNicManagerNicTypeVsan                  = HostVirtualNicManagerNicType("vsan")
    +	HostVirtualNicManagerNicTypeVSphereProvisioning   = HostVirtualNicManagerNicType("vSphereProvisioning")
    +	HostVirtualNicManagerNicTypeVsanWitness           = HostVirtualNicManagerNicType("vsanWitness")
    +)
    +
    +func init() {
    +	t["HostVirtualNicManagerNicType"] = reflect.TypeOf((*HostVirtualNicManagerNicType)(nil)).Elem()
    +}
    +
    +type HostVmciAccessManagerMode string
    +
    +const (
    +	HostVmciAccessManagerModeGrant   = HostVmciAccessManagerMode("grant")
    +	HostVmciAccessManagerModeReplace = HostVmciAccessManagerMode("replace")
    +	HostVmciAccessManagerModeRevoke  = HostVmciAccessManagerMode("revoke")
    +)
    +
    +func init() {
    +	t["HostVmciAccessManagerMode"] = reflect.TypeOf((*HostVmciAccessManagerMode)(nil)).Elem()
    +}
    +
    +type HostVmfsVolumeUnmapBandwidthPolicy string
    +
    +const (
    +	HostVmfsVolumeUnmapBandwidthPolicyFixed   = HostVmfsVolumeUnmapBandwidthPolicy("fixed")
    +	HostVmfsVolumeUnmapBandwidthPolicyDynamic = HostVmfsVolumeUnmapBandwidthPolicy("dynamic")
    +)
    +
    +func init() {
    +	t["HostVmfsVolumeUnmapBandwidthPolicy"] = reflect.TypeOf((*HostVmfsVolumeUnmapBandwidthPolicy)(nil)).Elem()
    +}
    +
    +type HostVmfsVolumeUnmapPriority string
    +
    +const (
    +	HostVmfsVolumeUnmapPriorityNone = HostVmfsVolumeUnmapPriority("none")
    +	HostVmfsVolumeUnmapPriorityLow  = HostVmfsVolumeUnmapPriority("low")
    +)
    +
    +func init() {
    +	t["HostVmfsVolumeUnmapPriority"] = reflect.TypeOf((*HostVmfsVolumeUnmapPriority)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseManifestEntryChecksumType string
    +
    +const (
    +	HttpNfcLeaseManifestEntryChecksumTypeSha1   = HttpNfcLeaseManifestEntryChecksumType("sha1")
    +	HttpNfcLeaseManifestEntryChecksumTypeSha256 = HttpNfcLeaseManifestEntryChecksumType("sha256")
    +)
    +
    +func init() {
    +	t["HttpNfcLeaseManifestEntryChecksumType"] = reflect.TypeOf((*HttpNfcLeaseManifestEntryChecksumType)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseMode string
    +
    +const (
    +	HttpNfcLeaseModePushOrGet = HttpNfcLeaseMode("pushOrGet")
    +	HttpNfcLeaseModePull      = HttpNfcLeaseMode("pull")
    +)
    +
    +func init() {
    +	t["HttpNfcLeaseMode"] = reflect.TypeOf((*HttpNfcLeaseMode)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseState string
    +
    +const (
    +	HttpNfcLeaseStateInitializing = HttpNfcLeaseState("initializing")
    +	HttpNfcLeaseStateReady        = HttpNfcLeaseState("ready")
    +	HttpNfcLeaseStateDone         = HttpNfcLeaseState("done")
    +	HttpNfcLeaseStateError        = HttpNfcLeaseState("error")
    +)
    +
    +func init() {
    +	t["HttpNfcLeaseState"] = reflect.TypeOf((*HttpNfcLeaseState)(nil)).Elem()
    +}
    +
    +type IncompatibleHostForVmReplicationIncompatibleReason string
    +
    +const (
    +	IncompatibleHostForVmReplicationIncompatibleReasonRpo            = IncompatibleHostForVmReplicationIncompatibleReason("rpo")
    +	IncompatibleHostForVmReplicationIncompatibleReasonNetCompression = IncompatibleHostForVmReplicationIncompatibleReason("netCompression")
    +)
    +
    +func init() {
    +	t["IncompatibleHostForVmReplicationIncompatibleReason"] = reflect.TypeOf((*IncompatibleHostForVmReplicationIncompatibleReason)(nil)).Elem()
    +}
    +
    +type InternetScsiSnsDiscoveryMethod string
    +
    +const (
    +	InternetScsiSnsDiscoveryMethodIsnsStatic = InternetScsiSnsDiscoveryMethod("isnsStatic")
    +	InternetScsiSnsDiscoveryMethodIsnsDhcp   = InternetScsiSnsDiscoveryMethod("isnsDhcp")
    +	InternetScsiSnsDiscoveryMethodIsnsSlp    = InternetScsiSnsDiscoveryMethod("isnsSlp")
    +)
    +
    +func init() {
    +	t["InternetScsiSnsDiscoveryMethod"] = reflect.TypeOf((*InternetScsiSnsDiscoveryMethod)(nil)).Elem()
    +}
    +
    +type InvalidDasConfigArgumentEntryForInvalidArgument string
    +
    +const (
    +	InvalidDasConfigArgumentEntryForInvalidArgumentAdmissionControl = InvalidDasConfigArgumentEntryForInvalidArgument("admissionControl")
    +	InvalidDasConfigArgumentEntryForInvalidArgumentUserHeartbeatDs  = InvalidDasConfigArgumentEntryForInvalidArgument("userHeartbeatDs")
    +	InvalidDasConfigArgumentEntryForInvalidArgumentVmConfig         = InvalidDasConfigArgumentEntryForInvalidArgument("vmConfig")
    +)
    +
    +func init() {
    +	t["InvalidDasConfigArgumentEntryForInvalidArgument"] = reflect.TypeOf((*InvalidDasConfigArgumentEntryForInvalidArgument)(nil)).Elem()
    +}
    +
    +type InvalidProfileReferenceHostReason string
    +
    +const (
    +	InvalidProfileReferenceHostReasonIncompatibleVersion  = InvalidProfileReferenceHostReason("incompatibleVersion")
    +	InvalidProfileReferenceHostReasonMissingReferenceHost = InvalidProfileReferenceHostReason("missingReferenceHost")
    +)
    +
    +func init() {
    +	t["InvalidProfileReferenceHostReason"] = reflect.TypeOf((*InvalidProfileReferenceHostReason)(nil)).Elem()
    +}
    +
    +type IoFilterOperation string
    +
    +const (
    +	IoFilterOperationInstall   = IoFilterOperation("install")
    +	IoFilterOperationUninstall = IoFilterOperation("uninstall")
    +	IoFilterOperationUpgrade   = IoFilterOperation("upgrade")
    +)
    +
    +func init() {
    +	t["IoFilterOperation"] = reflect.TypeOf((*IoFilterOperation)(nil)).Elem()
    +}
    +
    +type IoFilterType string
    +
    +const (
    +	IoFilterTypeCache              = IoFilterType("cache")
    +	IoFilterTypeReplication        = IoFilterType("replication")
    +	IoFilterTypeEncryption         = IoFilterType("encryption")
    +	IoFilterTypeCompression        = IoFilterType("compression")
    +	IoFilterTypeInspection         = IoFilterType("inspection")
    +	IoFilterTypeDatastoreIoControl = IoFilterType("datastoreIoControl")
    +	IoFilterTypeDataProvider       = IoFilterType("dataProvider")
    +)
    +
    +func init() {
    +	t["IoFilterType"] = reflect.TypeOf((*IoFilterType)(nil)).Elem()
    +}
    +
    +type IscsiPortInfoPathStatus string
    +
    +const (
    +	IscsiPortInfoPathStatusNotUsed    = IscsiPortInfoPathStatus("notUsed")
    +	IscsiPortInfoPathStatusActive     = IscsiPortInfoPathStatus("active")
    +	IscsiPortInfoPathStatusStandBy    = IscsiPortInfoPathStatus("standBy")
    +	IscsiPortInfoPathStatusLastActive = IscsiPortInfoPathStatus("lastActive")
    +)
    +
    +func init() {
    +	t["IscsiPortInfoPathStatus"] = reflect.TypeOf((*IscsiPortInfoPathStatus)(nil)).Elem()
    +}
    +
    +type LatencySensitivitySensitivityLevel string
    +
    +const (
    +	LatencySensitivitySensitivityLevelLow    = LatencySensitivitySensitivityLevel("low")
    +	LatencySensitivitySensitivityLevelNormal = LatencySensitivitySensitivityLevel("normal")
    +	LatencySensitivitySensitivityLevelMedium = LatencySensitivitySensitivityLevel("medium")
    +	LatencySensitivitySensitivityLevelHigh   = LatencySensitivitySensitivityLevel("high")
    +	LatencySensitivitySensitivityLevelCustom = LatencySensitivitySensitivityLevel("custom")
    +)
    +
    +func init() {
    +	t["LatencySensitivitySensitivityLevel"] = reflect.TypeOf((*LatencySensitivitySensitivityLevel)(nil)).Elem()
    +}
    +
    +type LicenseAssignmentFailedReason string
    +
    +const (
    +	LicenseAssignmentFailedReasonKeyEntityMismatch                                    = LicenseAssignmentFailedReason("keyEntityMismatch")
    +	LicenseAssignmentFailedReasonDowngradeDisallowed                                  = LicenseAssignmentFailedReason("downgradeDisallowed")
    +	LicenseAssignmentFailedReasonInventoryNotManageableByVirtualCenter                = LicenseAssignmentFailedReason("inventoryNotManageableByVirtualCenter")
    +	LicenseAssignmentFailedReasonHostsUnmanageableByVirtualCenterWithoutLicenseServer = LicenseAssignmentFailedReason("hostsUnmanageableByVirtualCenterWithoutLicenseServer")
    +)
    +
    +func init() {
    +	t["LicenseAssignmentFailedReason"] = reflect.TypeOf((*LicenseAssignmentFailedReason)(nil)).Elem()
    +}
    +
    +type LicenseFeatureInfoSourceRestriction string
    +
    +const (
    +	LicenseFeatureInfoSourceRestrictionUnrestricted = LicenseFeatureInfoSourceRestriction("unrestricted")
    +	LicenseFeatureInfoSourceRestrictionServed       = LicenseFeatureInfoSourceRestriction("served")
    +	LicenseFeatureInfoSourceRestrictionFile         = LicenseFeatureInfoSourceRestriction("file")
    +)
    +
    +func init() {
    +	t["LicenseFeatureInfoSourceRestriction"] = reflect.TypeOf((*LicenseFeatureInfoSourceRestriction)(nil)).Elem()
    +}
    +
    +type LicenseFeatureInfoState string
    +
    +const (
    +	LicenseFeatureInfoStateEnabled  = LicenseFeatureInfoState("enabled")
    +	LicenseFeatureInfoStateDisabled = LicenseFeatureInfoState("disabled")
    +	LicenseFeatureInfoStateOptional = LicenseFeatureInfoState("optional")
    +)
    +
    +func init() {
    +	t["LicenseFeatureInfoState"] = reflect.TypeOf((*LicenseFeatureInfoState)(nil)).Elem()
    +}
    +
    +type LicenseFeatureInfoUnit string
    +
    +const (
    +	LicenseFeatureInfoUnitHost       = LicenseFeatureInfoUnit("host")
    +	LicenseFeatureInfoUnitCpuCore    = LicenseFeatureInfoUnit("cpuCore")
    +	LicenseFeatureInfoUnitCpuPackage = LicenseFeatureInfoUnit("cpuPackage")
    +	LicenseFeatureInfoUnitServer     = LicenseFeatureInfoUnit("server")
    +	LicenseFeatureInfoUnitVm         = LicenseFeatureInfoUnit("vm")
    +)
    +
    +func init() {
    +	t["LicenseFeatureInfoUnit"] = reflect.TypeOf((*LicenseFeatureInfoUnit)(nil)).Elem()
    +}
    +
    +type LicenseManagerLicenseKey string
    +
    +const (
    +	LicenseManagerLicenseKeyEsxFull    = LicenseManagerLicenseKey("esxFull")
    +	LicenseManagerLicenseKeyEsxVmtn    = LicenseManagerLicenseKey("esxVmtn")
    +	LicenseManagerLicenseKeyEsxExpress = LicenseManagerLicenseKey("esxExpress")
    +	LicenseManagerLicenseKeySan        = LicenseManagerLicenseKey("san")
    +	LicenseManagerLicenseKeyIscsi      = LicenseManagerLicenseKey("iscsi")
    +	LicenseManagerLicenseKeyNas        = LicenseManagerLicenseKey("nas")
    +	LicenseManagerLicenseKeyVsmp       = LicenseManagerLicenseKey("vsmp")
    +	LicenseManagerLicenseKeyBackup     = LicenseManagerLicenseKey("backup")
    +	LicenseManagerLicenseKeyVc         = LicenseManagerLicenseKey("vc")
    +	LicenseManagerLicenseKeyVcExpress  = LicenseManagerLicenseKey("vcExpress")
    +	LicenseManagerLicenseKeyEsxHost    = LicenseManagerLicenseKey("esxHost")
    +	LicenseManagerLicenseKeyGsxHost    = LicenseManagerLicenseKey("gsxHost")
    +	LicenseManagerLicenseKeyServerHost = LicenseManagerLicenseKey("serverHost")
    +	LicenseManagerLicenseKeyDrsPower   = LicenseManagerLicenseKey("drsPower")
    +	LicenseManagerLicenseKeyVmotion    = LicenseManagerLicenseKey("vmotion")
    +	LicenseManagerLicenseKeyDrs        = LicenseManagerLicenseKey("drs")
    +	LicenseManagerLicenseKeyDas        = LicenseManagerLicenseKey("das")
    +)
    +
    +func init() {
    +	t["LicenseManagerLicenseKey"] = reflect.TypeOf((*LicenseManagerLicenseKey)(nil)).Elem()
    +}
    +
    +type LicenseManagerState string
    +
    +const (
    +	LicenseManagerStateInitializing = LicenseManagerState("initializing")
    +	LicenseManagerStateNormal       = LicenseManagerState("normal")
    +	LicenseManagerStateMarginal     = LicenseManagerState("marginal")
    +	LicenseManagerStateFault        = LicenseManagerState("fault")
    +)
    +
    +func init() {
    +	t["LicenseManagerState"] = reflect.TypeOf((*LicenseManagerState)(nil)).Elem()
    +}
    +
    +type LicenseReservationInfoState string
    +
    +const (
    +	LicenseReservationInfoStateNotUsed       = LicenseReservationInfoState("notUsed")
    +	LicenseReservationInfoStateNoLicense     = LicenseReservationInfoState("noLicense")
    +	LicenseReservationInfoStateUnlicensedUse = LicenseReservationInfoState("unlicensedUse")
    +	LicenseReservationInfoStateLicensed      = LicenseReservationInfoState("licensed")
    +)
    +
    +func init() {
    +	t["LicenseReservationInfoState"] = reflect.TypeOf((*LicenseReservationInfoState)(nil)).Elem()
    +}
    +
    +type LinkDiscoveryProtocolConfigOperationType string
    +
    +const (
    +	LinkDiscoveryProtocolConfigOperationTypeNone      = LinkDiscoveryProtocolConfigOperationType("none")
    +	LinkDiscoveryProtocolConfigOperationTypeListen    = LinkDiscoveryProtocolConfigOperationType("listen")
    +	LinkDiscoveryProtocolConfigOperationTypeAdvertise = LinkDiscoveryProtocolConfigOperationType("advertise")
    +	LinkDiscoveryProtocolConfigOperationTypeBoth      = LinkDiscoveryProtocolConfigOperationType("both")
    +)
    +
    +func init() {
    +	t["LinkDiscoveryProtocolConfigOperationType"] = reflect.TypeOf((*LinkDiscoveryProtocolConfigOperationType)(nil)).Elem()
    +}
    +
    +type LinkDiscoveryProtocolConfigProtocolType string
    +
    +const (
    +	LinkDiscoveryProtocolConfigProtocolTypeCdp  = LinkDiscoveryProtocolConfigProtocolType("cdp")
    +	LinkDiscoveryProtocolConfigProtocolTypeLldp = LinkDiscoveryProtocolConfigProtocolType("lldp")
    +)
    +
    +func init() {
    +	t["LinkDiscoveryProtocolConfigProtocolType"] = reflect.TypeOf((*LinkDiscoveryProtocolConfigProtocolType)(nil)).Elem()
    +}
    +
    +type ManagedEntityStatus string
    +
    +const (
    +	ManagedEntityStatusGray   = ManagedEntityStatus("gray")
    +	ManagedEntityStatusGreen  = ManagedEntityStatus("green")
    +	ManagedEntityStatusYellow = ManagedEntityStatus("yellow")
    +	ManagedEntityStatusRed    = ManagedEntityStatus("red")
    +)
    +
    +func init() {
    +	t["ManagedEntityStatus"] = reflect.TypeOf((*ManagedEntityStatus)(nil)).Elem()
    +}
    +
    +type MetricAlarmOperator string
    +
    +const (
    +	MetricAlarmOperatorIsAbove = MetricAlarmOperator("isAbove")
    +	MetricAlarmOperatorIsBelow = MetricAlarmOperator("isBelow")
    +)
    +
    +func init() {
    +	t["MetricAlarmOperator"] = reflect.TypeOf((*MetricAlarmOperator)(nil)).Elem()
    +}
    +
    +type MultipathState string
    +
    +const (
    +	MultipathStateStandby  = MultipathState("standby")
    +	MultipathStateActive   = MultipathState("active")
    +	MultipathStateDisabled = MultipathState("disabled")
    +	MultipathStateDead     = MultipathState("dead")
    +	MultipathStateUnknown  = MultipathState("unknown")
    +)
    +
    +func init() {
    +	t["MultipathState"] = reflect.TypeOf((*MultipathState)(nil)).Elem()
    +}
    +
    +type NetBIOSConfigInfoMode string
    +
    +const (
    +	NetBIOSConfigInfoModeUnknown        = NetBIOSConfigInfoMode("unknown")
    +	NetBIOSConfigInfoModeEnabled        = NetBIOSConfigInfoMode("enabled")
    +	NetBIOSConfigInfoModeDisabled       = NetBIOSConfigInfoMode("disabled")
    +	NetBIOSConfigInfoModeEnabledViaDHCP = NetBIOSConfigInfoMode("enabledViaDHCP")
    +)
    +
    +func init() {
    +	t["NetBIOSConfigInfoMode"] = reflect.TypeOf((*NetBIOSConfigInfoMode)(nil)).Elem()
    +}
    +
    +type NetIpConfigInfoIpAddressOrigin string
    +
    +const (
    +	NetIpConfigInfoIpAddressOriginOther     = NetIpConfigInfoIpAddressOrigin("other")
    +	NetIpConfigInfoIpAddressOriginManual    = NetIpConfigInfoIpAddressOrigin("manual")
    +	NetIpConfigInfoIpAddressOriginDhcp      = NetIpConfigInfoIpAddressOrigin("dhcp")
    +	NetIpConfigInfoIpAddressOriginLinklayer = NetIpConfigInfoIpAddressOrigin("linklayer")
    +	NetIpConfigInfoIpAddressOriginRandom    = NetIpConfigInfoIpAddressOrigin("random")
    +)
    +
    +func init() {
    +	t["NetIpConfigInfoIpAddressOrigin"] = reflect.TypeOf((*NetIpConfigInfoIpAddressOrigin)(nil)).Elem()
    +}
    +
    +type NetIpConfigInfoIpAddressStatus string
    +
    +const (
    +	NetIpConfigInfoIpAddressStatusPreferred    = NetIpConfigInfoIpAddressStatus("preferred")
    +	NetIpConfigInfoIpAddressStatusDeprecated   = NetIpConfigInfoIpAddressStatus("deprecated")
    +	NetIpConfigInfoIpAddressStatusInvalid      = NetIpConfigInfoIpAddressStatus("invalid")
    +	NetIpConfigInfoIpAddressStatusInaccessible = NetIpConfigInfoIpAddressStatus("inaccessible")
    +	NetIpConfigInfoIpAddressStatusUnknown      = NetIpConfigInfoIpAddressStatus("unknown")
    +	NetIpConfigInfoIpAddressStatusTentative    = NetIpConfigInfoIpAddressStatus("tentative")
    +	NetIpConfigInfoIpAddressStatusDuplicate    = NetIpConfigInfoIpAddressStatus("duplicate")
    +)
    +
    +func init() {
    +	t["NetIpConfigInfoIpAddressStatus"] = reflect.TypeOf((*NetIpConfigInfoIpAddressStatus)(nil)).Elem()
    +}
    +
    +type NetIpStackInfoEntryType string
    +
    +const (
    +	NetIpStackInfoEntryTypeOther   = NetIpStackInfoEntryType("other")
    +	NetIpStackInfoEntryTypeInvalid = NetIpStackInfoEntryType("invalid")
    +	NetIpStackInfoEntryTypeDynamic = NetIpStackInfoEntryType("dynamic")
    +	NetIpStackInfoEntryTypeManual  = NetIpStackInfoEntryType("manual")
    +)
    +
    +func init() {
    +	t["NetIpStackInfoEntryType"] = reflect.TypeOf((*NetIpStackInfoEntryType)(nil)).Elem()
    +}
    +
    +type NetIpStackInfoPreference string
    +
    +const (
    +	NetIpStackInfoPreferenceReserved = NetIpStackInfoPreference("reserved")
    +	NetIpStackInfoPreferenceLow      = NetIpStackInfoPreference("low")
    +	NetIpStackInfoPreferenceMedium   = NetIpStackInfoPreference("medium")
    +	NetIpStackInfoPreferenceHigh     = NetIpStackInfoPreference("high")
    +)
    +
    +func init() {
    +	t["NetIpStackInfoPreference"] = reflect.TypeOf((*NetIpStackInfoPreference)(nil)).Elem()
    +}
    +
    +type NotSupportedDeviceForFTDeviceType string
    +
    +const (
    +	NotSupportedDeviceForFTDeviceTypeVirtualVmxnet3            = NotSupportedDeviceForFTDeviceType("virtualVmxnet3")
    +	NotSupportedDeviceForFTDeviceTypeParaVirtualSCSIController = NotSupportedDeviceForFTDeviceType("paraVirtualSCSIController")
    +)
    +
    +func init() {
    +	t["NotSupportedDeviceForFTDeviceType"] = reflect.TypeOf((*NotSupportedDeviceForFTDeviceType)(nil)).Elem()
    +}
    +
    +type NumVirtualCpusIncompatibleReason string
    +
    +const (
    +	NumVirtualCpusIncompatibleReasonRecordReplay   = NumVirtualCpusIncompatibleReason("recordReplay")
    +	NumVirtualCpusIncompatibleReasonFaultTolerance = NumVirtualCpusIncompatibleReason("faultTolerance")
    +)
    +
    +func init() {
    +	t["NumVirtualCpusIncompatibleReason"] = reflect.TypeOf((*NumVirtualCpusIncompatibleReason)(nil)).Elem()
    +}
    +
    +type NvdimmInterleaveSetState string
    +
    +const (
    +	NvdimmInterleaveSetStateInvalid = NvdimmInterleaveSetState("invalid")
    +	NvdimmInterleaveSetStateActive  = NvdimmInterleaveSetState("active")
    +)
    +
    +func init() {
    +	t["NvdimmInterleaveSetState"] = reflect.TypeOf((*NvdimmInterleaveSetState)(nil)).Elem()
    +}
    +
    +type NvdimmNamespaceHealthStatus string
    +
    +const (
    +	NvdimmNamespaceHealthStatusNormal            = NvdimmNamespaceHealthStatus("normal")
    +	NvdimmNamespaceHealthStatusMissing           = NvdimmNamespaceHealthStatus("missing")
    +	NvdimmNamespaceHealthStatusLabelMissing      = NvdimmNamespaceHealthStatus("labelMissing")
    +	NvdimmNamespaceHealthStatusInterleaveBroken  = NvdimmNamespaceHealthStatus("interleaveBroken")
    +	NvdimmNamespaceHealthStatusLabelInconsistent = NvdimmNamespaceHealthStatus("labelInconsistent")
    +	NvdimmNamespaceHealthStatusBttCorrupt        = NvdimmNamespaceHealthStatus("bttCorrupt")
    +	NvdimmNamespaceHealthStatusBadBlockSize      = NvdimmNamespaceHealthStatus("badBlockSize")
    +)
    +
    +func init() {
    +	t["NvdimmNamespaceHealthStatus"] = reflect.TypeOf((*NvdimmNamespaceHealthStatus)(nil)).Elem()
    +}
    +
    +type NvdimmNamespaceState string
    +
    +const (
    +	NvdimmNamespaceStateInvalid  = NvdimmNamespaceState("invalid")
    +	NvdimmNamespaceStateNotInUse = NvdimmNamespaceState("notInUse")
    +	NvdimmNamespaceStateInUse    = NvdimmNamespaceState("inUse")
    +)
    +
    +func init() {
    +	t["NvdimmNamespaceState"] = reflect.TypeOf((*NvdimmNamespaceState)(nil)).Elem()
    +}
    +
    +type NvdimmNamespaceType string
    +
    +const (
    +	NvdimmNamespaceTypeBlockNamespace      = NvdimmNamespaceType("blockNamespace")
    +	NvdimmNamespaceTypePersistentNamespace = NvdimmNamespaceType("persistentNamespace")
    +)
    +
    +func init() {
    +	t["NvdimmNamespaceType"] = reflect.TypeOf((*NvdimmNamespaceType)(nil)).Elem()
    +}
    +
    +type NvdimmNvdimmHealthInfoState string
    +
    +const (
    +	NvdimmNvdimmHealthInfoStateNormal = NvdimmNvdimmHealthInfoState("normal")
    +	NvdimmNvdimmHealthInfoStateError  = NvdimmNvdimmHealthInfoState("error")
    +)
    +
    +func init() {
    +	t["NvdimmNvdimmHealthInfoState"] = reflect.TypeOf((*NvdimmNvdimmHealthInfoState)(nil)).Elem()
    +}
    +
    +type NvdimmRangeType string
    +
    +const (
    +	NvdimmRangeTypeVolatileRange              = NvdimmRangeType("volatileRange")
    +	NvdimmRangeTypePersistentRange            = NvdimmRangeType("persistentRange")
    +	NvdimmRangeTypeControlRange               = NvdimmRangeType("controlRange")
    +	NvdimmRangeTypeBlockRange                 = NvdimmRangeType("blockRange")
    +	NvdimmRangeTypeVolatileVirtualDiskRange   = NvdimmRangeType("volatileVirtualDiskRange")
    +	NvdimmRangeTypeVolatileVirtualCDRange     = NvdimmRangeType("volatileVirtualCDRange")
    +	NvdimmRangeTypePersistentVirtualDiskRange = NvdimmRangeType("persistentVirtualDiskRange")
    +	NvdimmRangeTypePersistentVirtualCDRange   = NvdimmRangeType("persistentVirtualCDRange")
    +)
    +
    +func init() {
    +	t["NvdimmRangeType"] = reflect.TypeOf((*NvdimmRangeType)(nil)).Elem()
    +}
    +
    +type ObjectUpdateKind string
    +
    +const (
    +	ObjectUpdateKindModify = ObjectUpdateKind("modify")
    +	ObjectUpdateKindEnter  = ObjectUpdateKind("enter")
    +	ObjectUpdateKindLeave  = ObjectUpdateKind("leave")
    +)
    +
    +func init() {
    +	t["ObjectUpdateKind"] = reflect.TypeOf((*ObjectUpdateKind)(nil)).Elem()
    +}
    +
    +type OvfConsumerOstNodeType string
    +
    +const (
    +	OvfConsumerOstNodeTypeEnvelope                = OvfConsumerOstNodeType("envelope")
    +	OvfConsumerOstNodeTypeVirtualSystem           = OvfConsumerOstNodeType("virtualSystem")
    +	OvfConsumerOstNodeTypeVirtualSystemCollection = OvfConsumerOstNodeType("virtualSystemCollection")
    +)
    +
    +func init() {
    +	t["OvfConsumerOstNodeType"] = reflect.TypeOf((*OvfConsumerOstNodeType)(nil)).Elem()
    +}
    +
    +type OvfCreateImportSpecParamsDiskProvisioningType string
    +
    +const (
    +	OvfCreateImportSpecParamsDiskProvisioningTypeMonolithicSparse     = OvfCreateImportSpecParamsDiskProvisioningType("monolithicSparse")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeMonolithicFlat       = OvfCreateImportSpecParamsDiskProvisioningType("monolithicFlat")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeTwoGbMaxExtentSparse = OvfCreateImportSpecParamsDiskProvisioningType("twoGbMaxExtentSparse")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeTwoGbMaxExtentFlat   = OvfCreateImportSpecParamsDiskProvisioningType("twoGbMaxExtentFlat")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeThin                 = OvfCreateImportSpecParamsDiskProvisioningType("thin")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeThick                = OvfCreateImportSpecParamsDiskProvisioningType("thick")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeSeSparse             = OvfCreateImportSpecParamsDiskProvisioningType("seSparse")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeEagerZeroedThick     = OvfCreateImportSpecParamsDiskProvisioningType("eagerZeroedThick")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeSparse               = OvfCreateImportSpecParamsDiskProvisioningType("sparse")
    +	OvfCreateImportSpecParamsDiskProvisioningTypeFlat                 = OvfCreateImportSpecParamsDiskProvisioningType("flat")
    +)
    +
    +func init() {
    +	t["OvfCreateImportSpecParamsDiskProvisioningType"] = reflect.TypeOf((*OvfCreateImportSpecParamsDiskProvisioningType)(nil)).Elem()
    +}
    +
    +type PerfFormat string
    +
    +const (
    +	PerfFormatNormal = PerfFormat("normal")
    +	PerfFormatCsv    = PerfFormat("csv")
    +)
    +
    +func init() {
    +	t["PerfFormat"] = reflect.TypeOf((*PerfFormat)(nil)).Elem()
    +}
    +
    +type PerfStatsType string
    +
    +const (
    +	PerfStatsTypeAbsolute = PerfStatsType("absolute")
    +	PerfStatsTypeDelta    = PerfStatsType("delta")
    +	PerfStatsTypeRate     = PerfStatsType("rate")
    +)
    +
    +func init() {
    +	t["PerfStatsType"] = reflect.TypeOf((*PerfStatsType)(nil)).Elem()
    +}
    +
    +type PerfSummaryType string
    +
    +const (
    +	PerfSummaryTypeAverage   = PerfSummaryType("average")
    +	PerfSummaryTypeMaximum   = PerfSummaryType("maximum")
    +	PerfSummaryTypeMinimum   = PerfSummaryType("minimum")
    +	PerfSummaryTypeLatest    = PerfSummaryType("latest")
    +	PerfSummaryTypeSummation = PerfSummaryType("summation")
    +	PerfSummaryTypeNone      = PerfSummaryType("none")
    +)
    +
    +func init() {
    +	t["PerfSummaryType"] = reflect.TypeOf((*PerfSummaryType)(nil)).Elem()
    +}
    +
    +type PerformanceManagerUnit string
    +
    +const (
    +	PerformanceManagerUnitPercent            = PerformanceManagerUnit("percent")
    +	PerformanceManagerUnitKiloBytes          = PerformanceManagerUnit("kiloBytes")
    +	PerformanceManagerUnitMegaBytes          = PerformanceManagerUnit("megaBytes")
    +	PerformanceManagerUnitMegaHertz          = PerformanceManagerUnit("megaHertz")
    +	PerformanceManagerUnitNumber             = PerformanceManagerUnit("number")
    +	PerformanceManagerUnitMicrosecond        = PerformanceManagerUnit("microsecond")
    +	PerformanceManagerUnitMillisecond        = PerformanceManagerUnit("millisecond")
    +	PerformanceManagerUnitSecond             = PerformanceManagerUnit("second")
    +	PerformanceManagerUnitKiloBytesPerSecond = PerformanceManagerUnit("kiloBytesPerSecond")
    +	PerformanceManagerUnitMegaBytesPerSecond = PerformanceManagerUnit("megaBytesPerSecond")
    +	PerformanceManagerUnitWatt               = PerformanceManagerUnit("watt")
    +	PerformanceManagerUnitJoule              = PerformanceManagerUnit("joule")
    +	PerformanceManagerUnitTeraBytes          = PerformanceManagerUnit("teraBytes")
    +)
    +
    +func init() {
    +	t["PerformanceManagerUnit"] = reflect.TypeOf((*PerformanceManagerUnit)(nil)).Elem()
    +}
    +
    +type PhysicalNicResourcePoolSchedulerDisallowedReason string
    +
    +const (
    +	PhysicalNicResourcePoolSchedulerDisallowedReasonUserOptOut          = PhysicalNicResourcePoolSchedulerDisallowedReason("userOptOut")
    +	PhysicalNicResourcePoolSchedulerDisallowedReasonHardwareUnsupported = PhysicalNicResourcePoolSchedulerDisallowedReason("hardwareUnsupported")
    +)
    +
    +func init() {
    +	t["PhysicalNicResourcePoolSchedulerDisallowedReason"] = reflect.TypeOf((*PhysicalNicResourcePoolSchedulerDisallowedReason)(nil)).Elem()
    +}
    +
    +type PhysicalNicVmDirectPathGen2SupportedMode string
    +
    +const (
    +	PhysicalNicVmDirectPathGen2SupportedModeUpt = PhysicalNicVmDirectPathGen2SupportedMode("upt")
    +)
    +
    +func init() {
    +	t["PhysicalNicVmDirectPathGen2SupportedMode"] = reflect.TypeOf((*PhysicalNicVmDirectPathGen2SupportedMode)(nil)).Elem()
    +}
    +
    +type PlacementAffinityRuleRuleScope string
    +
    +const (
    +	PlacementAffinityRuleRuleScopeCluster    = PlacementAffinityRuleRuleScope("cluster")
    +	PlacementAffinityRuleRuleScopeHost       = PlacementAffinityRuleRuleScope("host")
    +	PlacementAffinityRuleRuleScopeStoragePod = PlacementAffinityRuleRuleScope("storagePod")
    +	PlacementAffinityRuleRuleScopeDatastore  = PlacementAffinityRuleRuleScope("datastore")
    +)
    +
    +func init() {
    +	t["PlacementAffinityRuleRuleScope"] = reflect.TypeOf((*PlacementAffinityRuleRuleScope)(nil)).Elem()
    +}
    +
    +type PlacementAffinityRuleRuleType string
    +
    +const (
    +	PlacementAffinityRuleRuleTypeAffinity         = PlacementAffinityRuleRuleType("affinity")
    +	PlacementAffinityRuleRuleTypeAntiAffinity     = PlacementAffinityRuleRuleType("antiAffinity")
    +	PlacementAffinityRuleRuleTypeSoftAffinity     = PlacementAffinityRuleRuleType("softAffinity")
    +	PlacementAffinityRuleRuleTypeSoftAntiAffinity = PlacementAffinityRuleRuleType("softAntiAffinity")
    +)
    +
    +func init() {
    +	t["PlacementAffinityRuleRuleType"] = reflect.TypeOf((*PlacementAffinityRuleRuleType)(nil)).Elem()
    +}
    +
    +type PlacementSpecPlacementType string
    +
    +const (
    +	PlacementSpecPlacementTypeCreate      = PlacementSpecPlacementType("create")
    +	PlacementSpecPlacementTypeReconfigure = PlacementSpecPlacementType("reconfigure")
    +	PlacementSpecPlacementTypeRelocate    = PlacementSpecPlacementType("relocate")
    +	PlacementSpecPlacementTypeClone       = PlacementSpecPlacementType("clone")
    +)
    +
    +func init() {
    +	t["PlacementSpecPlacementType"] = reflect.TypeOf((*PlacementSpecPlacementType)(nil)).Elem()
    +}
    +
    +type PortGroupConnecteeType string
    +
    +const (
    +	PortGroupConnecteeTypeVirtualMachine   = PortGroupConnecteeType("virtualMachine")
    +	PortGroupConnecteeTypeSystemManagement = PortGroupConnecteeType("systemManagement")
    +	PortGroupConnecteeTypeHost             = PortGroupConnecteeType("host")
    +	PortGroupConnecteeTypeUnknown          = PortGroupConnecteeType("unknown")
    +)
    +
    +func init() {
    +	t["PortGroupConnecteeType"] = reflect.TypeOf((*PortGroupConnecteeType)(nil)).Elem()
    +}
    +
    +type ProfileExecuteResultStatus string
    +
    +const (
    +	ProfileExecuteResultStatusSuccess   = ProfileExecuteResultStatus("success")
    +	ProfileExecuteResultStatusNeedInput = ProfileExecuteResultStatus("needInput")
    +	ProfileExecuteResultStatusError     = ProfileExecuteResultStatus("error")
    +)
    +
    +func init() {
    +	t["ProfileExecuteResultStatus"] = reflect.TypeOf((*ProfileExecuteResultStatus)(nil)).Elem()
    +}
    +
    +type ProfileNumericComparator string
    +
    +const (
    +	ProfileNumericComparatorLessThan         = ProfileNumericComparator("lessThan")
    +	ProfileNumericComparatorLessThanEqual    = ProfileNumericComparator("lessThanEqual")
    +	ProfileNumericComparatorEqual            = ProfileNumericComparator("equal")
    +	ProfileNumericComparatorNotEqual         = ProfileNumericComparator("notEqual")
    +	ProfileNumericComparatorGreaterThanEqual = ProfileNumericComparator("greaterThanEqual")
    +	ProfileNumericComparatorGreaterThan      = ProfileNumericComparator("greaterThan")
    +)
    +
    +func init() {
    +	t["ProfileNumericComparator"] = reflect.TypeOf((*ProfileNumericComparator)(nil)).Elem()
    +}
    +
    +type ProfileParameterMetadataRelationType string
    +
    +const (
    +	ProfileParameterMetadataRelationTypeDynamic_relation     = ProfileParameterMetadataRelationType("dynamic_relation")
    +	ProfileParameterMetadataRelationTypeExtensible_relation  = ProfileParameterMetadataRelationType("extensible_relation")
    +	ProfileParameterMetadataRelationTypeLocalizable_relation = ProfileParameterMetadataRelationType("localizable_relation")
    +	ProfileParameterMetadataRelationTypeStatic_relation      = ProfileParameterMetadataRelationType("static_relation")
    +	ProfileParameterMetadataRelationTypeValidation_relation  = ProfileParameterMetadataRelationType("validation_relation")
    +)
    +
    +func init() {
    +	t["ProfileParameterMetadataRelationType"] = reflect.TypeOf((*ProfileParameterMetadataRelationType)(nil)).Elem()
    +}
    +
    +type PropertyChangeOp string
    +
    +const (
    +	PropertyChangeOpAdd            = PropertyChangeOp("add")
    +	PropertyChangeOpRemove         = PropertyChangeOp("remove")
    +	PropertyChangeOpAssign         = PropertyChangeOp("assign")
    +	PropertyChangeOpIndirectRemove = PropertyChangeOp("indirectRemove")
    +)
    +
    +func init() {
    +	t["PropertyChangeOp"] = reflect.TypeOf((*PropertyChangeOp)(nil)).Elem()
    +}
    +
    +type QuarantineModeFaultFaultType string
    +
    +const (
    +	QuarantineModeFaultFaultTypeNoCompatibleNonQuarantinedHost = QuarantineModeFaultFaultType("NoCompatibleNonQuarantinedHost")
    +	QuarantineModeFaultFaultTypeCorrectionDisallowed           = QuarantineModeFaultFaultType("CorrectionDisallowed")
    +	QuarantineModeFaultFaultTypeCorrectionImpact               = QuarantineModeFaultFaultType("CorrectionImpact")
    +)
    +
    +func init() {
    +	t["QuarantineModeFaultFaultType"] = reflect.TypeOf((*QuarantineModeFaultFaultType)(nil)).Elem()
    +}
    +
    +type QuiesceMode string
    +
    +const (
    +	QuiesceModeApplication = QuiesceMode("application")
    +	QuiesceModeFilesystem  = QuiesceMode("filesystem")
    +	QuiesceModeNone        = QuiesceMode("none")
    +)
    +
    +func init() {
    +	t["QuiesceMode"] = reflect.TypeOf((*QuiesceMode)(nil)).Elem()
    +}
    +
    +type RecommendationReasonCode string
    +
    +const (
    +	RecommendationReasonCodeFairnessCpuAvg                  = RecommendationReasonCode("fairnessCpuAvg")
    +	RecommendationReasonCodeFairnessMemAvg                  = RecommendationReasonCode("fairnessMemAvg")
    +	RecommendationReasonCodeJointAffin                      = RecommendationReasonCode("jointAffin")
    +	RecommendationReasonCodeAntiAffin                       = RecommendationReasonCode("antiAffin")
    +	RecommendationReasonCodeHostMaint                       = RecommendationReasonCode("hostMaint")
    +	RecommendationReasonCodeEnterStandby                    = RecommendationReasonCode("enterStandby")
    +	RecommendationReasonCodeReservationCpu                  = RecommendationReasonCode("reservationCpu")
    +	RecommendationReasonCodeReservationMem                  = RecommendationReasonCode("reservationMem")
    +	RecommendationReasonCodePowerOnVm                       = RecommendationReasonCode("powerOnVm")
    +	RecommendationReasonCodePowerSaving                     = RecommendationReasonCode("powerSaving")
    +	RecommendationReasonCodeIncreaseCapacity                = RecommendationReasonCode("increaseCapacity")
    +	RecommendationReasonCodeCheckResource                   = RecommendationReasonCode("checkResource")
    +	RecommendationReasonCodeUnreservedCapacity              = RecommendationReasonCode("unreservedCapacity")
    +	RecommendationReasonCodeVmHostHardAffinity              = RecommendationReasonCode("vmHostHardAffinity")
    +	RecommendationReasonCodeVmHostSoftAffinity              = RecommendationReasonCode("vmHostSoftAffinity")
    +	RecommendationReasonCodeBalanceDatastoreSpaceUsage      = RecommendationReasonCode("balanceDatastoreSpaceUsage")
    +	RecommendationReasonCodeBalanceDatastoreIOLoad          = RecommendationReasonCode("balanceDatastoreIOLoad")
    +	RecommendationReasonCodeBalanceDatastoreIOPSReservation = RecommendationReasonCode("balanceDatastoreIOPSReservation")
    +	RecommendationReasonCodeDatastoreMaint                  = RecommendationReasonCode("datastoreMaint")
    +	RecommendationReasonCodeVirtualDiskJointAffin           = RecommendationReasonCode("virtualDiskJointAffin")
    +	RecommendationReasonCodeVirtualDiskAntiAffin            = RecommendationReasonCode("virtualDiskAntiAffin")
    +	RecommendationReasonCodeDatastoreSpaceOutage            = RecommendationReasonCode("datastoreSpaceOutage")
    +	RecommendationReasonCodeStoragePlacement                = RecommendationReasonCode("storagePlacement")
    +	RecommendationReasonCodeIolbDisabledInternal            = RecommendationReasonCode("iolbDisabledInternal")
    +	RecommendationReasonCodeXvmotionPlacement               = RecommendationReasonCode("xvmotionPlacement")
    +	RecommendationReasonCodeNetworkBandwidthReservation     = RecommendationReasonCode("networkBandwidthReservation")
    +	RecommendationReasonCodeHostInDegradation               = RecommendationReasonCode("hostInDegradation")
    +	RecommendationReasonCodeHostExitDegradation             = RecommendationReasonCode("hostExitDegradation")
    +	RecommendationReasonCodeMaxVmsConstraint                = RecommendationReasonCode("maxVmsConstraint")
    +	RecommendationReasonCodeFtConstraints                   = RecommendationReasonCode("ftConstraints")
    +)
    +
    +func init() {
    +	t["RecommendationReasonCode"] = reflect.TypeOf((*RecommendationReasonCode)(nil)).Elem()
    +}
    +
    +type RecommendationType string
    +
    +const (
    +	RecommendationTypeV1 = RecommendationType("V1")
    +)
    +
    +func init() {
    +	t["RecommendationType"] = reflect.TypeOf((*RecommendationType)(nil)).Elem()
    +}
    +
    +type ReplicationDiskConfigFaultReasonForFault string
    +
    +const (
    +	ReplicationDiskConfigFaultReasonForFaultDiskNotFound                           = ReplicationDiskConfigFaultReasonForFault("diskNotFound")
    +	ReplicationDiskConfigFaultReasonForFaultDiskTypeNotSupported                   = ReplicationDiskConfigFaultReasonForFault("diskTypeNotSupported")
    +	ReplicationDiskConfigFaultReasonForFaultInvalidDiskKey                         = ReplicationDiskConfigFaultReasonForFault("invalidDiskKey")
    +	ReplicationDiskConfigFaultReasonForFaultInvalidDiskReplicationId               = ReplicationDiskConfigFaultReasonForFault("invalidDiskReplicationId")
    +	ReplicationDiskConfigFaultReasonForFaultDuplicateDiskReplicationId             = ReplicationDiskConfigFaultReasonForFault("duplicateDiskReplicationId")
    +	ReplicationDiskConfigFaultReasonForFaultInvalidPersistentFilePath              = ReplicationDiskConfigFaultReasonForFault("invalidPersistentFilePath")
    +	ReplicationDiskConfigFaultReasonForFaultReconfigureDiskReplicationIdNotAllowed = ReplicationDiskConfigFaultReasonForFault("reconfigureDiskReplicationIdNotAllowed")
    +)
    +
    +func init() {
    +	t["ReplicationDiskConfigFaultReasonForFault"] = reflect.TypeOf((*ReplicationDiskConfigFaultReasonForFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmConfigFaultReasonForFault string
    +
    +const (
    +	ReplicationVmConfigFaultReasonForFaultIncompatibleHwVersion                    = ReplicationVmConfigFaultReasonForFault("incompatibleHwVersion")
    +	ReplicationVmConfigFaultReasonForFaultInvalidVmReplicationId                   = ReplicationVmConfigFaultReasonForFault("invalidVmReplicationId")
    +	ReplicationVmConfigFaultReasonForFaultInvalidGenerationNumber                  = ReplicationVmConfigFaultReasonForFault("invalidGenerationNumber")
    +	ReplicationVmConfigFaultReasonForFaultOutOfBoundsRpoValue                      = ReplicationVmConfigFaultReasonForFault("outOfBoundsRpoValue")
    +	ReplicationVmConfigFaultReasonForFaultInvalidDestinationIpAddress              = ReplicationVmConfigFaultReasonForFault("invalidDestinationIpAddress")
    +	ReplicationVmConfigFaultReasonForFaultInvalidDestinationPort                   = ReplicationVmConfigFaultReasonForFault("invalidDestinationPort")
    +	ReplicationVmConfigFaultReasonForFaultInvalidExtraVmOptions                    = ReplicationVmConfigFaultReasonForFault("invalidExtraVmOptions")
    +	ReplicationVmConfigFaultReasonForFaultStaleGenerationNumber                    = ReplicationVmConfigFaultReasonForFault("staleGenerationNumber")
    +	ReplicationVmConfigFaultReasonForFaultReconfigureVmReplicationIdNotAllowed     = ReplicationVmConfigFaultReasonForFault("reconfigureVmReplicationIdNotAllowed")
    +	ReplicationVmConfigFaultReasonForFaultCannotRetrieveVmReplicationConfiguration = ReplicationVmConfigFaultReasonForFault("cannotRetrieveVmReplicationConfiguration")
    +	ReplicationVmConfigFaultReasonForFaultReplicationAlreadyEnabled                = ReplicationVmConfigFaultReasonForFault("replicationAlreadyEnabled")
    +	ReplicationVmConfigFaultReasonForFaultInvalidPriorConfiguration                = ReplicationVmConfigFaultReasonForFault("invalidPriorConfiguration")
    +	ReplicationVmConfigFaultReasonForFaultReplicationNotEnabled                    = ReplicationVmConfigFaultReasonForFault("replicationNotEnabled")
    +	ReplicationVmConfigFaultReasonForFaultReplicationConfigurationFailed           = ReplicationVmConfigFaultReasonForFault("replicationConfigurationFailed")
    +	ReplicationVmConfigFaultReasonForFaultEncryptedVm                              = ReplicationVmConfigFaultReasonForFault("encryptedVm")
    +	ReplicationVmConfigFaultReasonForFaultInvalidThumbprint                        = ReplicationVmConfigFaultReasonForFault("invalidThumbprint")
    +	ReplicationVmConfigFaultReasonForFaultIncompatibleDevice                       = ReplicationVmConfigFaultReasonForFault("incompatibleDevice")
    +)
    +
    +func init() {
    +	t["ReplicationVmConfigFaultReasonForFault"] = reflect.TypeOf((*ReplicationVmConfigFaultReasonForFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmFaultReasonForFault string
    +
    +const (
    +	ReplicationVmFaultReasonForFaultNotConfigured      = ReplicationVmFaultReasonForFault("notConfigured")
    +	ReplicationVmFaultReasonForFaultPoweredOff         = ReplicationVmFaultReasonForFault("poweredOff")
    +	ReplicationVmFaultReasonForFaultSuspended          = ReplicationVmFaultReasonForFault("suspended")
    +	ReplicationVmFaultReasonForFaultPoweredOn          = ReplicationVmFaultReasonForFault("poweredOn")
    +	ReplicationVmFaultReasonForFaultOfflineReplicating = ReplicationVmFaultReasonForFault("offlineReplicating")
    +	ReplicationVmFaultReasonForFaultInvalidState       = ReplicationVmFaultReasonForFault("invalidState")
    +	ReplicationVmFaultReasonForFaultInvalidInstanceId  = ReplicationVmFaultReasonForFault("invalidInstanceId")
    +	ReplicationVmFaultReasonForFaultCloseDiskError     = ReplicationVmFaultReasonForFault("closeDiskError")
    +	ReplicationVmFaultReasonForFaultGroupExist         = ReplicationVmFaultReasonForFault("groupExist")
    +)
    +
    +func init() {
    +	t["ReplicationVmFaultReasonForFault"] = reflect.TypeOf((*ReplicationVmFaultReasonForFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmInProgressFaultActivity string
    +
    +const (
    +	ReplicationVmInProgressFaultActivityFullSync = ReplicationVmInProgressFaultActivity("fullSync")
    +	ReplicationVmInProgressFaultActivityDelta    = ReplicationVmInProgressFaultActivity("delta")
    +)
    +
    +func init() {
    +	t["ReplicationVmInProgressFaultActivity"] = reflect.TypeOf((*ReplicationVmInProgressFaultActivity)(nil)).Elem()
    +}
    +
    +type ReplicationVmState string
    +
    +const (
    +	ReplicationVmStateNone    = ReplicationVmState("none")
    +	ReplicationVmStatePaused  = ReplicationVmState("paused")
    +	ReplicationVmStateSyncing = ReplicationVmState("syncing")
    +	ReplicationVmStateIdle    = ReplicationVmState("idle")
    +	ReplicationVmStateActive  = ReplicationVmState("active")
    +	ReplicationVmStateError   = ReplicationVmState("error")
    +)
    +
    +func init() {
    +	t["ReplicationVmState"] = reflect.TypeOf((*ReplicationVmState)(nil)).Elem()
    +}
    +
    +type ScheduledHardwareUpgradeInfoHardwareUpgradePolicy string
    +
    +const (
    +	ScheduledHardwareUpgradeInfoHardwareUpgradePolicyNever          = ScheduledHardwareUpgradeInfoHardwareUpgradePolicy("never")
    +	ScheduledHardwareUpgradeInfoHardwareUpgradePolicyOnSoftPowerOff = ScheduledHardwareUpgradeInfoHardwareUpgradePolicy("onSoftPowerOff")
    +	ScheduledHardwareUpgradeInfoHardwareUpgradePolicyAlways         = ScheduledHardwareUpgradeInfoHardwareUpgradePolicy("always")
    +)
    +
    +func init() {
    +	t["ScheduledHardwareUpgradeInfoHardwareUpgradePolicy"] = reflect.TypeOf((*ScheduledHardwareUpgradeInfoHardwareUpgradePolicy)(nil)).Elem()
    +}
    +
    +type ScheduledHardwareUpgradeInfoHardwareUpgradeStatus string
    +
    +const (
    +	ScheduledHardwareUpgradeInfoHardwareUpgradeStatusNone    = ScheduledHardwareUpgradeInfoHardwareUpgradeStatus("none")
    +	ScheduledHardwareUpgradeInfoHardwareUpgradeStatusPending = ScheduledHardwareUpgradeInfoHardwareUpgradeStatus("pending")
    +	ScheduledHardwareUpgradeInfoHardwareUpgradeStatusSuccess = ScheduledHardwareUpgradeInfoHardwareUpgradeStatus("success")
    +	ScheduledHardwareUpgradeInfoHardwareUpgradeStatusFailed  = ScheduledHardwareUpgradeInfoHardwareUpgradeStatus("failed")
    +)
    +
    +func init() {
    +	t["ScheduledHardwareUpgradeInfoHardwareUpgradeStatus"] = reflect.TypeOf((*ScheduledHardwareUpgradeInfoHardwareUpgradeStatus)(nil)).Elem()
    +}
    +
    +type ScsiDiskType string
    +
    +const (
    +	ScsiDiskTypeNative512          = ScsiDiskType("native512")
    +	ScsiDiskTypeEmulated512        = ScsiDiskType("emulated512")
    +	ScsiDiskTypeNative4k           = ScsiDiskType("native4k")
    +	ScsiDiskTypeSoftwareEmulated4k = ScsiDiskType("SoftwareEmulated4k")
    +	ScsiDiskTypeUnknown            = ScsiDiskType("unknown")
    +)
    +
    +func init() {
    +	t["ScsiDiskType"] = reflect.TypeOf((*ScsiDiskType)(nil)).Elem()
    +}
    +
    +type ScsiLunDescriptorQuality string
    +
    +const (
    +	ScsiLunDescriptorQualityHighQuality    = ScsiLunDescriptorQuality("highQuality")
    +	ScsiLunDescriptorQualityMediumQuality  = ScsiLunDescriptorQuality("mediumQuality")
    +	ScsiLunDescriptorQualityLowQuality     = ScsiLunDescriptorQuality("lowQuality")
    +	ScsiLunDescriptorQualityUnknownQuality = ScsiLunDescriptorQuality("unknownQuality")
    +)
    +
    +func init() {
    +	t["ScsiLunDescriptorQuality"] = reflect.TypeOf((*ScsiLunDescriptorQuality)(nil)).Elem()
    +}
    +
    +type ScsiLunState string
    +
    +const (
    +	ScsiLunStateUnknownState      = ScsiLunState("unknownState")
    +	ScsiLunStateOk                = ScsiLunState("ok")
    +	ScsiLunStateError             = ScsiLunState("error")
    +	ScsiLunStateOff               = ScsiLunState("off")
    +	ScsiLunStateQuiesced          = ScsiLunState("quiesced")
    +	ScsiLunStateDegraded          = ScsiLunState("degraded")
    +	ScsiLunStateLostCommunication = ScsiLunState("lostCommunication")
    +	ScsiLunStateTimeout           = ScsiLunState("timeout")
    +)
    +
    +func init() {
    +	t["ScsiLunState"] = reflect.TypeOf((*ScsiLunState)(nil)).Elem()
    +}
    +
    +type ScsiLunType string
    +
    +const (
    +	ScsiLunTypeDisk                   = ScsiLunType("disk")
    +	ScsiLunTypeTape                   = ScsiLunType("tape")
    +	ScsiLunTypePrinter                = ScsiLunType("printer")
    +	ScsiLunTypeProcessor              = ScsiLunType("processor")
    +	ScsiLunTypeWorm                   = ScsiLunType("worm")
    +	ScsiLunTypeCdrom                  = ScsiLunType("cdrom")
    +	ScsiLunTypeScanner                = ScsiLunType("scanner")
    +	ScsiLunTypeOpticalDevice          = ScsiLunType("opticalDevice")
    +	ScsiLunTypeMediaChanger           = ScsiLunType("mediaChanger")
    +	ScsiLunTypeCommunications         = ScsiLunType("communications")
    +	ScsiLunTypeStorageArrayController = ScsiLunType("storageArrayController")
    +	ScsiLunTypeEnclosure              = ScsiLunType("enclosure")
    +	ScsiLunTypeUnknown                = ScsiLunType("unknown")
    +)
    +
    +func init() {
    +	t["ScsiLunType"] = reflect.TypeOf((*ScsiLunType)(nil)).Elem()
    +}
    +
    +type ScsiLunVStorageSupportStatus string
    +
    +const (
    +	ScsiLunVStorageSupportStatusVStorageSupported   = ScsiLunVStorageSupportStatus("vStorageSupported")
    +	ScsiLunVStorageSupportStatusVStorageUnsupported = ScsiLunVStorageSupportStatus("vStorageUnsupported")
    +	ScsiLunVStorageSupportStatusVStorageUnknown     = ScsiLunVStorageSupportStatus("vStorageUnknown")
    +)
    +
    +func init() {
    +	t["ScsiLunVStorageSupportStatus"] = reflect.TypeOf((*ScsiLunVStorageSupportStatus)(nil)).Elem()
    +}
    +
    +type SessionManagerHttpServiceRequestSpecMethod string
    +
    +const (
    +	SessionManagerHttpServiceRequestSpecMethodHttpOptions = SessionManagerHttpServiceRequestSpecMethod("httpOptions")
    +	SessionManagerHttpServiceRequestSpecMethodHttpGet     = SessionManagerHttpServiceRequestSpecMethod("httpGet")
    +	SessionManagerHttpServiceRequestSpecMethodHttpHead    = SessionManagerHttpServiceRequestSpecMethod("httpHead")
    +	SessionManagerHttpServiceRequestSpecMethodHttpPost    = SessionManagerHttpServiceRequestSpecMethod("httpPost")
    +	SessionManagerHttpServiceRequestSpecMethodHttpPut     = SessionManagerHttpServiceRequestSpecMethod("httpPut")
    +	SessionManagerHttpServiceRequestSpecMethodHttpDelete  = SessionManagerHttpServiceRequestSpecMethod("httpDelete")
    +	SessionManagerHttpServiceRequestSpecMethodHttpTrace   = SessionManagerHttpServiceRequestSpecMethod("httpTrace")
    +	SessionManagerHttpServiceRequestSpecMethodHttpConnect = SessionManagerHttpServiceRequestSpecMethod("httpConnect")
    +)
    +
    +func init() {
    +	t["SessionManagerHttpServiceRequestSpecMethod"] = reflect.TypeOf((*SessionManagerHttpServiceRequestSpecMethod)(nil)).Elem()
    +}
    +
    +type SharesLevel string
    +
    +const (
    +	SharesLevelLow    = SharesLevel("low")
    +	SharesLevelNormal = SharesLevel("normal")
    +	SharesLevelHigh   = SharesLevel("high")
    +	SharesLevelCustom = SharesLevel("custom")
    +)
    +
    +func init() {
    +	t["SharesLevel"] = reflect.TypeOf((*SharesLevel)(nil)).Elem()
    +}
    +
    +type SimpleCommandEncoding string
    +
    +const (
    +	SimpleCommandEncodingCSV    = SimpleCommandEncoding("CSV")
    +	SimpleCommandEncodingHEX    = SimpleCommandEncoding("HEX")
    +	SimpleCommandEncodingSTRING = SimpleCommandEncoding("STRING")
    +)
    +
    +func init() {
    +	t["SimpleCommandEncoding"] = reflect.TypeOf((*SimpleCommandEncoding)(nil)).Elem()
    +}
    +
    +type SlpDiscoveryMethod string
    +
    +const (
    +	SlpDiscoveryMethodSlpDhcp          = SlpDiscoveryMethod("slpDhcp")
    +	SlpDiscoveryMethodSlpAutoUnicast   = SlpDiscoveryMethod("slpAutoUnicast")
    +	SlpDiscoveryMethodSlpAutoMulticast = SlpDiscoveryMethod("slpAutoMulticast")
    +	SlpDiscoveryMethodSlpManual        = SlpDiscoveryMethod("slpManual")
    +)
    +
    +func init() {
    +	t["SlpDiscoveryMethod"] = reflect.TypeOf((*SlpDiscoveryMethod)(nil)).Elem()
    +}
    +
    +type SoftwarePackageConstraint string
    +
    +const (
    +	SoftwarePackageConstraintEquals           = SoftwarePackageConstraint("equals")
    +	SoftwarePackageConstraintLessThan         = SoftwarePackageConstraint("lessThan")
    +	SoftwarePackageConstraintLessThanEqual    = SoftwarePackageConstraint("lessThanEqual")
    +	SoftwarePackageConstraintGreaterThanEqual = SoftwarePackageConstraint("greaterThanEqual")
    +	SoftwarePackageConstraintGreaterThan      = SoftwarePackageConstraint("greaterThan")
    +)
    +
    +func init() {
    +	t["SoftwarePackageConstraint"] = reflect.TypeOf((*SoftwarePackageConstraint)(nil)).Elem()
    +}
    +
    +type SoftwarePackageVibType string
    +
    +const (
    +	SoftwarePackageVibTypeBootbank = SoftwarePackageVibType("bootbank")
    +	SoftwarePackageVibTypeTools    = SoftwarePackageVibType("tools")
    +	SoftwarePackageVibTypeMeta     = SoftwarePackageVibType("meta")
    +)
    +
    +func init() {
    +	t["SoftwarePackageVibType"] = reflect.TypeOf((*SoftwarePackageVibType)(nil)).Elem()
    +}
    +
    +type StateAlarmOperator string
    +
    +const (
    +	StateAlarmOperatorIsEqual   = StateAlarmOperator("isEqual")
    +	StateAlarmOperatorIsUnequal = StateAlarmOperator("isUnequal")
    +)
    +
    +func init() {
    +	t["StateAlarmOperator"] = reflect.TypeOf((*StateAlarmOperator)(nil)).Elem()
    +}
    +
    +type StorageDrsPodConfigInfoBehavior string
    +
    +const (
    +	StorageDrsPodConfigInfoBehaviorManual    = StorageDrsPodConfigInfoBehavior("manual")
    +	StorageDrsPodConfigInfoBehaviorAutomated = StorageDrsPodConfigInfoBehavior("automated")
    +)
    +
    +func init() {
    +	t["StorageDrsPodConfigInfoBehavior"] = reflect.TypeOf((*StorageDrsPodConfigInfoBehavior)(nil)).Elem()
    +}
    +
    +type StorageDrsSpaceLoadBalanceConfigSpaceThresholdMode string
    +
    +const (
    +	StorageDrsSpaceLoadBalanceConfigSpaceThresholdModeUtilization = StorageDrsSpaceLoadBalanceConfigSpaceThresholdMode("utilization")
    +	StorageDrsSpaceLoadBalanceConfigSpaceThresholdModeFreeSpace   = StorageDrsSpaceLoadBalanceConfigSpaceThresholdMode("freeSpace")
    +)
    +
    +func init() {
    +	t["StorageDrsSpaceLoadBalanceConfigSpaceThresholdMode"] = reflect.TypeOf((*StorageDrsSpaceLoadBalanceConfigSpaceThresholdMode)(nil)).Elem()
    +}
    +
    +type StorageIORMThresholdMode string
    +
    +const (
    +	StorageIORMThresholdModeAutomatic = StorageIORMThresholdMode("automatic")
    +	StorageIORMThresholdModeManual    = StorageIORMThresholdMode("manual")
    +)
    +
    +func init() {
    +	t["StorageIORMThresholdMode"] = reflect.TypeOf((*StorageIORMThresholdMode)(nil)).Elem()
    +}
    +
    +type StoragePlacementSpecPlacementType string
    +
    +const (
    +	StoragePlacementSpecPlacementTypeCreate      = StoragePlacementSpecPlacementType("create")
    +	StoragePlacementSpecPlacementTypeReconfigure = StoragePlacementSpecPlacementType("reconfigure")
    +	StoragePlacementSpecPlacementTypeRelocate    = StoragePlacementSpecPlacementType("relocate")
    +	StoragePlacementSpecPlacementTypeClone       = StoragePlacementSpecPlacementType("clone")
    +)
    +
    +func init() {
    +	t["StoragePlacementSpecPlacementType"] = reflect.TypeOf((*StoragePlacementSpecPlacementType)(nil)).Elem()
    +}
    +
    +type TaskFilterSpecRecursionOption string
    +
    +const (
    +	TaskFilterSpecRecursionOptionSelf     = TaskFilterSpecRecursionOption("self")
    +	TaskFilterSpecRecursionOptionChildren = TaskFilterSpecRecursionOption("children")
    +	TaskFilterSpecRecursionOptionAll      = TaskFilterSpecRecursionOption("all")
    +)
    +
    +func init() {
    +	t["TaskFilterSpecRecursionOption"] = reflect.TypeOf((*TaskFilterSpecRecursionOption)(nil)).Elem()
    +}
    +
    +type TaskFilterSpecTimeOption string
    +
    +const (
    +	TaskFilterSpecTimeOptionQueuedTime    = TaskFilterSpecTimeOption("queuedTime")
    +	TaskFilterSpecTimeOptionStartedTime   = TaskFilterSpecTimeOption("startedTime")
    +	TaskFilterSpecTimeOptionCompletedTime = TaskFilterSpecTimeOption("completedTime")
    +)
    +
    +func init() {
    +	t["TaskFilterSpecTimeOption"] = reflect.TypeOf((*TaskFilterSpecTimeOption)(nil)).Elem()
    +}
    +
    +type TaskInfoState string
    +
    +const (
    +	TaskInfoStateQueued  = TaskInfoState("queued")
    +	TaskInfoStateRunning = TaskInfoState("running")
    +	TaskInfoStateSuccess = TaskInfoState("success")
    +	TaskInfoStateError   = TaskInfoState("error")
    +)
    +
    +func init() {
    +	t["TaskInfoState"] = reflect.TypeOf((*TaskInfoState)(nil)).Elem()
    +}
    +
    +type ThirdPartyLicenseAssignmentFailedReason string
    +
    +const (
    +	ThirdPartyLicenseAssignmentFailedReasonLicenseAssignmentFailed = ThirdPartyLicenseAssignmentFailedReason("licenseAssignmentFailed")
    +	ThirdPartyLicenseAssignmentFailedReasonModuleNotInstalled      = ThirdPartyLicenseAssignmentFailedReason("moduleNotInstalled")
    +)
    +
    +func init() {
    +	t["ThirdPartyLicenseAssignmentFailedReason"] = reflect.TypeOf((*ThirdPartyLicenseAssignmentFailedReason)(nil)).Elem()
    +}
    +
    +type UpgradePolicy string
    +
    +const (
    +	UpgradePolicyManual              = UpgradePolicy("manual")
    +	UpgradePolicyUpgradeAtPowerCycle = UpgradePolicy("upgradeAtPowerCycle")
    +)
    +
    +func init() {
    +	t["UpgradePolicy"] = reflect.TypeOf((*UpgradePolicy)(nil)).Elem()
    +}
    +
    +type VAppAutoStartAction string
    +
    +const (
    +	VAppAutoStartActionNone          = VAppAutoStartAction("none")
    +	VAppAutoStartActionPowerOn       = VAppAutoStartAction("powerOn")
    +	VAppAutoStartActionPowerOff      = VAppAutoStartAction("powerOff")
    +	VAppAutoStartActionGuestShutdown = VAppAutoStartAction("guestShutdown")
    +	VAppAutoStartActionSuspend       = VAppAutoStartAction("suspend")
    +)
    +
    +func init() {
    +	t["VAppAutoStartAction"] = reflect.TypeOf((*VAppAutoStartAction)(nil)).Elem()
    +}
    +
    +type VAppCloneSpecProvisioningType string
    +
    +const (
    +	VAppCloneSpecProvisioningTypeSameAsSource = VAppCloneSpecProvisioningType("sameAsSource")
    +	VAppCloneSpecProvisioningTypeThin         = VAppCloneSpecProvisioningType("thin")
    +	VAppCloneSpecProvisioningTypeThick        = VAppCloneSpecProvisioningType("thick")
    +)
    +
    +func init() {
    +	t["VAppCloneSpecProvisioningType"] = reflect.TypeOf((*VAppCloneSpecProvisioningType)(nil)).Elem()
    +}
    +
    +type VAppIPAssignmentInfoAllocationSchemes string
    +
    +const (
    +	VAppIPAssignmentInfoAllocationSchemesDhcp   = VAppIPAssignmentInfoAllocationSchemes("dhcp")
    +	VAppIPAssignmentInfoAllocationSchemesOvfenv = VAppIPAssignmentInfoAllocationSchemes("ovfenv")
    +)
    +
    +func init() {
    +	t["VAppIPAssignmentInfoAllocationSchemes"] = reflect.TypeOf((*VAppIPAssignmentInfoAllocationSchemes)(nil)).Elem()
    +}
    +
    +type VAppIPAssignmentInfoIpAllocationPolicy string
    +
    +const (
    +	VAppIPAssignmentInfoIpAllocationPolicyDhcpPolicy           = VAppIPAssignmentInfoIpAllocationPolicy("dhcpPolicy")
    +	VAppIPAssignmentInfoIpAllocationPolicyTransientPolicy      = VAppIPAssignmentInfoIpAllocationPolicy("transientPolicy")
    +	VAppIPAssignmentInfoIpAllocationPolicyFixedPolicy          = VAppIPAssignmentInfoIpAllocationPolicy("fixedPolicy")
    +	VAppIPAssignmentInfoIpAllocationPolicyFixedAllocatedPolicy = VAppIPAssignmentInfoIpAllocationPolicy("fixedAllocatedPolicy")
    +)
    +
    +func init() {
    +	t["VAppIPAssignmentInfoIpAllocationPolicy"] = reflect.TypeOf((*VAppIPAssignmentInfoIpAllocationPolicy)(nil)).Elem()
    +}
    +
    +type VAppIPAssignmentInfoProtocols string
    +
    +const (
    +	VAppIPAssignmentInfoProtocolsIPv4 = VAppIPAssignmentInfoProtocols("IPv4")
    +	VAppIPAssignmentInfoProtocolsIPv6 = VAppIPAssignmentInfoProtocols("IPv6")
    +)
    +
    +func init() {
    +	t["VAppIPAssignmentInfoProtocols"] = reflect.TypeOf((*VAppIPAssignmentInfoProtocols)(nil)).Elem()
    +}
    +
    +type VFlashModuleNotSupportedReason string
    +
    +const (
    +	VFlashModuleNotSupportedReasonCacheModeNotSupported            = VFlashModuleNotSupportedReason("CacheModeNotSupported")
    +	VFlashModuleNotSupportedReasonCacheConsistencyTypeNotSupported = VFlashModuleNotSupportedReason("CacheConsistencyTypeNotSupported")
    +	VFlashModuleNotSupportedReasonCacheBlockSizeNotSupported       = VFlashModuleNotSupportedReason("CacheBlockSizeNotSupported")
    +	VFlashModuleNotSupportedReasonCacheReservationNotSupported     = VFlashModuleNotSupportedReason("CacheReservationNotSupported")
    +	VFlashModuleNotSupportedReasonDiskSizeNotSupported             = VFlashModuleNotSupportedReason("DiskSizeNotSupported")
    +)
    +
    +func init() {
    +	t["VFlashModuleNotSupportedReason"] = reflect.TypeOf((*VFlashModuleNotSupportedReason)(nil)).Elem()
    +}
    +
    +type VMotionCompatibilityType string
    +
    +const (
    +	VMotionCompatibilityTypeCpu      = VMotionCompatibilityType("cpu")
    +	VMotionCompatibilityTypeSoftware = VMotionCompatibilityType("software")
    +)
    +
    +func init() {
    +	t["VMotionCompatibilityType"] = reflect.TypeOf((*VMotionCompatibilityType)(nil)).Elem()
    +}
    +
    +type VMwareDVSTeamingMatchStatus string
    +
    +const (
    +	VMwareDVSTeamingMatchStatusIphashMatch       = VMwareDVSTeamingMatchStatus("iphashMatch")
    +	VMwareDVSTeamingMatchStatusNonIphashMatch    = VMwareDVSTeamingMatchStatus("nonIphashMatch")
    +	VMwareDVSTeamingMatchStatusIphashMismatch    = VMwareDVSTeamingMatchStatus("iphashMismatch")
    +	VMwareDVSTeamingMatchStatusNonIphashMismatch = VMwareDVSTeamingMatchStatus("nonIphashMismatch")
    +)
    +
    +func init() {
    +	t["VMwareDVSTeamingMatchStatus"] = reflect.TypeOf((*VMwareDVSTeamingMatchStatus)(nil)).Elem()
    +}
    +
    +type VMwareDVSVspanSessionEncapType string
    +
    +const (
    +	VMwareDVSVspanSessionEncapTypeGre     = VMwareDVSVspanSessionEncapType("gre")
    +	VMwareDVSVspanSessionEncapTypeErspan2 = VMwareDVSVspanSessionEncapType("erspan2")
    +	VMwareDVSVspanSessionEncapTypeErspan3 = VMwareDVSVspanSessionEncapType("erspan3")
    +)
    +
    +func init() {
    +	t["VMwareDVSVspanSessionEncapType"] = reflect.TypeOf((*VMwareDVSVspanSessionEncapType)(nil)).Elem()
    +}
    +
    +type VMwareDVSVspanSessionType string
    +
    +const (
    +	VMwareDVSVspanSessionTypeMixedDestMirror                = VMwareDVSVspanSessionType("mixedDestMirror")
    +	VMwareDVSVspanSessionTypeDvPortMirror                   = VMwareDVSVspanSessionType("dvPortMirror")
    +	VMwareDVSVspanSessionTypeRemoteMirrorSource             = VMwareDVSVspanSessionType("remoteMirrorSource")
    +	VMwareDVSVspanSessionTypeRemoteMirrorDest               = VMwareDVSVspanSessionType("remoteMirrorDest")
    +	VMwareDVSVspanSessionTypeEncapsulatedRemoteMirrorSource = VMwareDVSVspanSessionType("encapsulatedRemoteMirrorSource")
    +)
    +
    +func init() {
    +	t["VMwareDVSVspanSessionType"] = reflect.TypeOf((*VMwareDVSVspanSessionType)(nil)).Elem()
    +}
    +
    +type VMwareDvsLacpApiVersion string
    +
    +const (
    +	VMwareDvsLacpApiVersionSingleLag   = VMwareDvsLacpApiVersion("singleLag")
    +	VMwareDvsLacpApiVersionMultipleLag = VMwareDvsLacpApiVersion("multipleLag")
    +)
    +
    +func init() {
    +	t["VMwareDvsLacpApiVersion"] = reflect.TypeOf((*VMwareDvsLacpApiVersion)(nil)).Elem()
    +}
    +
    +type VMwareDvsLacpLoadBalanceAlgorithm string
    +
    +const (
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcMac                  = VMwareDvsLacpLoadBalanceAlgorithm("srcMac")
    +	VMwareDvsLacpLoadBalanceAlgorithmDestMac                 = VMwareDvsLacpLoadBalanceAlgorithm("destMac")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcDestMac              = VMwareDvsLacpLoadBalanceAlgorithm("srcDestMac")
    +	VMwareDvsLacpLoadBalanceAlgorithmDestIpVlan              = VMwareDvsLacpLoadBalanceAlgorithm("destIpVlan")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcIpVlan               = VMwareDvsLacpLoadBalanceAlgorithm("srcIpVlan")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcDestIpVlan           = VMwareDvsLacpLoadBalanceAlgorithm("srcDestIpVlan")
    +	VMwareDvsLacpLoadBalanceAlgorithmDestTcpUdpPort          = VMwareDvsLacpLoadBalanceAlgorithm("destTcpUdpPort")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcTcpUdpPort           = VMwareDvsLacpLoadBalanceAlgorithm("srcTcpUdpPort")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcDestTcpUdpPort       = VMwareDvsLacpLoadBalanceAlgorithm("srcDestTcpUdpPort")
    +	VMwareDvsLacpLoadBalanceAlgorithmDestIpTcpUdpPort        = VMwareDvsLacpLoadBalanceAlgorithm("destIpTcpUdpPort")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcIpTcpUdpPort         = VMwareDvsLacpLoadBalanceAlgorithm("srcIpTcpUdpPort")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcDestIpTcpUdpPort     = VMwareDvsLacpLoadBalanceAlgorithm("srcDestIpTcpUdpPort")
    +	VMwareDvsLacpLoadBalanceAlgorithmDestIpTcpUdpPortVlan    = VMwareDvsLacpLoadBalanceAlgorithm("destIpTcpUdpPortVlan")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcIpTcpUdpPortVlan     = VMwareDvsLacpLoadBalanceAlgorithm("srcIpTcpUdpPortVlan")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcDestIpTcpUdpPortVlan = VMwareDvsLacpLoadBalanceAlgorithm("srcDestIpTcpUdpPortVlan")
    +	VMwareDvsLacpLoadBalanceAlgorithmDestIp                  = VMwareDvsLacpLoadBalanceAlgorithm("destIp")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcIp                   = VMwareDvsLacpLoadBalanceAlgorithm("srcIp")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcDestIp               = VMwareDvsLacpLoadBalanceAlgorithm("srcDestIp")
    +	VMwareDvsLacpLoadBalanceAlgorithmVlan                    = VMwareDvsLacpLoadBalanceAlgorithm("vlan")
    +	VMwareDvsLacpLoadBalanceAlgorithmSrcPortId               = VMwareDvsLacpLoadBalanceAlgorithm("srcPortId")
    +)
    +
    +func init() {
    +	t["VMwareDvsLacpLoadBalanceAlgorithm"] = reflect.TypeOf((*VMwareDvsLacpLoadBalanceAlgorithm)(nil)).Elem()
    +}
    +
    +type VMwareDvsMulticastFilteringMode string
    +
    +const (
    +	VMwareDvsMulticastFilteringModeLegacyFiltering = VMwareDvsMulticastFilteringMode("legacyFiltering")
    +	VMwareDvsMulticastFilteringModeSnooping        = VMwareDvsMulticastFilteringMode("snooping")
    +)
    +
    +func init() {
    +	t["VMwareDvsMulticastFilteringMode"] = reflect.TypeOf((*VMwareDvsMulticastFilteringMode)(nil)).Elem()
    +}
    +
    +type VMwareUplinkLacpMode string
    +
    +const (
    +	VMwareUplinkLacpModeActive  = VMwareUplinkLacpMode("active")
    +	VMwareUplinkLacpModePassive = VMwareUplinkLacpMode("passive")
    +)
    +
    +func init() {
    +	t["VMwareUplinkLacpMode"] = reflect.TypeOf((*VMwareUplinkLacpMode)(nil)).Elem()
    +}
    +
    +type VStorageObjectConsumptionType string
    +
    +const (
    +	VStorageObjectConsumptionTypeDisk = VStorageObjectConsumptionType("disk")
    +)
    +
    +func init() {
    +	t["VStorageObjectConsumptionType"] = reflect.TypeOf((*VStorageObjectConsumptionType)(nil)).Elem()
    +}
    +
    +type ValidateMigrationTestType string
    +
    +const (
    +	ValidateMigrationTestTypeSourceTests            = ValidateMigrationTestType("sourceTests")
    +	ValidateMigrationTestTypeCompatibilityTests     = ValidateMigrationTestType("compatibilityTests")
    +	ValidateMigrationTestTypeDiskAccessibilityTests = ValidateMigrationTestType("diskAccessibilityTests")
    +	ValidateMigrationTestTypeResourceTests          = ValidateMigrationTestType("resourceTests")
    +)
    +
    +func init() {
    +	t["ValidateMigrationTestType"] = reflect.TypeOf((*ValidateMigrationTestType)(nil)).Elem()
    +}
    +
    +type VchaClusterMode string
    +
    +const (
    +	VchaClusterModeEnabled     = VchaClusterMode("enabled")
    +	VchaClusterModeDisabled    = VchaClusterMode("disabled")
    +	VchaClusterModeMaintenance = VchaClusterMode("maintenance")
    +)
    +
    +func init() {
    +	t["VchaClusterMode"] = reflect.TypeOf((*VchaClusterMode)(nil)).Elem()
    +}
    +
    +type VchaClusterState string
    +
    +const (
    +	VchaClusterStateHealthy  = VchaClusterState("healthy")
    +	VchaClusterStateDegraded = VchaClusterState("degraded")
    +	VchaClusterStateIsolated = VchaClusterState("isolated")
    +)
    +
    +func init() {
    +	t["VchaClusterState"] = reflect.TypeOf((*VchaClusterState)(nil)).Elem()
    +}
    +
    +type VchaNodeRole string
    +
    +const (
    +	VchaNodeRoleActive  = VchaNodeRole("active")
    +	VchaNodeRolePassive = VchaNodeRole("passive")
    +	VchaNodeRoleWitness = VchaNodeRole("witness")
    +)
    +
    +func init() {
    +	t["VchaNodeRole"] = reflect.TypeOf((*VchaNodeRole)(nil)).Elem()
    +}
    +
    +type VchaNodeState string
    +
    +const (
    +	VchaNodeStateUp   = VchaNodeState("up")
    +	VchaNodeStateDown = VchaNodeState("down")
    +)
    +
    +func init() {
    +	t["VchaNodeState"] = reflect.TypeOf((*VchaNodeState)(nil)).Elem()
    +}
    +
    +type VchaState string
    +
    +const (
    +	VchaStateConfigured    = VchaState("configured")
    +	VchaStateNotConfigured = VchaState("notConfigured")
    +	VchaStateInvalid       = VchaState("invalid")
    +	VchaStatePrepared      = VchaState("prepared")
    +)
    +
    +func init() {
    +	t["VchaState"] = reflect.TypeOf((*VchaState)(nil)).Elem()
    +}
    +
    +type VirtualAppVAppState string
    +
    +const (
    +	VirtualAppVAppStateStarted  = VirtualAppVAppState("started")
    +	VirtualAppVAppStateStopped  = VirtualAppVAppState("stopped")
    +	VirtualAppVAppStateStarting = VirtualAppVAppState("starting")
    +	VirtualAppVAppStateStopping = VirtualAppVAppState("stopping")
    +)
    +
    +func init() {
    +	t["VirtualAppVAppState"] = reflect.TypeOf((*VirtualAppVAppState)(nil)).Elem()
    +}
    +
    +type VirtualDeviceConfigSpecFileOperation string
    +
    +const (
    +	VirtualDeviceConfigSpecFileOperationCreate  = VirtualDeviceConfigSpecFileOperation("create")
    +	VirtualDeviceConfigSpecFileOperationDestroy = VirtualDeviceConfigSpecFileOperation("destroy")
    +	VirtualDeviceConfigSpecFileOperationReplace = VirtualDeviceConfigSpecFileOperation("replace")
    +)
    +
    +func init() {
    +	t["VirtualDeviceConfigSpecFileOperation"] = reflect.TypeOf((*VirtualDeviceConfigSpecFileOperation)(nil)).Elem()
    +}
    +
    +type VirtualDeviceConfigSpecOperation string
    +
    +const (
    +	VirtualDeviceConfigSpecOperationAdd    = VirtualDeviceConfigSpecOperation("add")
    +	VirtualDeviceConfigSpecOperationRemove = VirtualDeviceConfigSpecOperation("remove")
    +	VirtualDeviceConfigSpecOperationEdit   = VirtualDeviceConfigSpecOperation("edit")
    +)
    +
    +func init() {
    +	t["VirtualDeviceConfigSpecOperation"] = reflect.TypeOf((*VirtualDeviceConfigSpecOperation)(nil)).Elem()
    +}
    +
    +type VirtualDeviceConnectInfoMigrateConnectOp string
    +
    +const (
    +	VirtualDeviceConnectInfoMigrateConnectOpConnect    = VirtualDeviceConnectInfoMigrateConnectOp("connect")
    +	VirtualDeviceConnectInfoMigrateConnectOpDisconnect = VirtualDeviceConnectInfoMigrateConnectOp("disconnect")
    +	VirtualDeviceConnectInfoMigrateConnectOpUnset      = VirtualDeviceConnectInfoMigrateConnectOp("unset")
    +)
    +
    +func init() {
    +	t["VirtualDeviceConnectInfoMigrateConnectOp"] = reflect.TypeOf((*VirtualDeviceConnectInfoMigrateConnectOp)(nil)).Elem()
    +}
    +
    +type VirtualDeviceConnectInfoStatus string
    +
    +const (
    +	VirtualDeviceConnectInfoStatusOk                 = VirtualDeviceConnectInfoStatus("ok")
    +	VirtualDeviceConnectInfoStatusRecoverableError   = VirtualDeviceConnectInfoStatus("recoverableError")
    +	VirtualDeviceConnectInfoStatusUnrecoverableError = VirtualDeviceConnectInfoStatus("unrecoverableError")
    +	VirtualDeviceConnectInfoStatusUntried            = VirtualDeviceConnectInfoStatus("untried")
    +)
    +
    +func init() {
    +	t["VirtualDeviceConnectInfoStatus"] = reflect.TypeOf((*VirtualDeviceConnectInfoStatus)(nil)).Elem()
    +}
    +
    +type VirtualDeviceFileExtension string
    +
    +const (
    +	VirtualDeviceFileExtensionIso  = VirtualDeviceFileExtension("iso")
    +	VirtualDeviceFileExtensionFlp  = VirtualDeviceFileExtension("flp")
    +	VirtualDeviceFileExtensionVmdk = VirtualDeviceFileExtension("vmdk")
    +	VirtualDeviceFileExtensionDsk  = VirtualDeviceFileExtension("dsk")
    +	VirtualDeviceFileExtensionRdm  = VirtualDeviceFileExtension("rdm")
    +)
    +
    +func init() {
    +	t["VirtualDeviceFileExtension"] = reflect.TypeOf((*VirtualDeviceFileExtension)(nil)).Elem()
    +}
    +
    +type VirtualDeviceURIBackingOptionDirection string
    +
    +const (
    +	VirtualDeviceURIBackingOptionDirectionServer = VirtualDeviceURIBackingOptionDirection("server")
    +	VirtualDeviceURIBackingOptionDirectionClient = VirtualDeviceURIBackingOptionDirection("client")
    +)
    +
    +func init() {
    +	t["VirtualDeviceURIBackingOptionDirection"] = reflect.TypeOf((*VirtualDeviceURIBackingOptionDirection)(nil)).Elem()
    +}
    +
    +type VirtualDiskAdapterType string
    +
    +const (
    +	VirtualDiskAdapterTypeIde      = VirtualDiskAdapterType("ide")
    +	VirtualDiskAdapterTypeBusLogic = VirtualDiskAdapterType("busLogic")
    +	VirtualDiskAdapterTypeLsiLogic = VirtualDiskAdapterType("lsiLogic")
    +)
    +
    +func init() {
    +	t["VirtualDiskAdapterType"] = reflect.TypeOf((*VirtualDiskAdapterType)(nil)).Elem()
    +}
    +
    +type VirtualDiskCompatibilityMode string
    +
    +const (
    +	VirtualDiskCompatibilityModeVirtualMode  = VirtualDiskCompatibilityMode("virtualMode")
    +	VirtualDiskCompatibilityModePhysicalMode = VirtualDiskCompatibilityMode("physicalMode")
    +)
    +
    +func init() {
    +	t["VirtualDiskCompatibilityMode"] = reflect.TypeOf((*VirtualDiskCompatibilityMode)(nil)).Elem()
    +}
    +
    +type VirtualDiskDeltaDiskFormat string
    +
    +const (
    +	VirtualDiskDeltaDiskFormatRedoLogFormat  = VirtualDiskDeltaDiskFormat("redoLogFormat")
    +	VirtualDiskDeltaDiskFormatNativeFormat   = VirtualDiskDeltaDiskFormat("nativeFormat")
    +	VirtualDiskDeltaDiskFormatSeSparseFormat = VirtualDiskDeltaDiskFormat("seSparseFormat")
    +)
    +
    +func init() {
    +	t["VirtualDiskDeltaDiskFormat"] = reflect.TypeOf((*VirtualDiskDeltaDiskFormat)(nil)).Elem()
    +}
    +
    +type VirtualDiskDeltaDiskFormatVariant string
    +
    +const (
    +	VirtualDiskDeltaDiskFormatVariantVmfsSparseVariant = VirtualDiskDeltaDiskFormatVariant("vmfsSparseVariant")
    +	VirtualDiskDeltaDiskFormatVariantVsanSparseVariant = VirtualDiskDeltaDiskFormatVariant("vsanSparseVariant")
    +)
    +
    +func init() {
    +	t["VirtualDiskDeltaDiskFormatVariant"] = reflect.TypeOf((*VirtualDiskDeltaDiskFormatVariant)(nil)).Elem()
    +}
    +
    +type VirtualDiskMode string
    +
    +const (
    +	VirtualDiskModePersistent                = VirtualDiskMode("persistent")
    +	VirtualDiskModeNonpersistent             = VirtualDiskMode("nonpersistent")
    +	VirtualDiskModeUndoable                  = VirtualDiskMode("undoable")
    +	VirtualDiskModeIndependent_persistent    = VirtualDiskMode("independent_persistent")
    +	VirtualDiskModeIndependent_nonpersistent = VirtualDiskMode("independent_nonpersistent")
    +	VirtualDiskModeAppend                    = VirtualDiskMode("append")
    +)
    +
    +func init() {
    +	t["VirtualDiskMode"] = reflect.TypeOf((*VirtualDiskMode)(nil)).Elem()
    +}
    +
    +type VirtualDiskRuleSpecRuleType string
    +
    +const (
    +	VirtualDiskRuleSpecRuleTypeAffinity     = VirtualDiskRuleSpecRuleType("affinity")
    +	VirtualDiskRuleSpecRuleTypeAntiAffinity = VirtualDiskRuleSpecRuleType("antiAffinity")
    +	VirtualDiskRuleSpecRuleTypeDisabled     = VirtualDiskRuleSpecRuleType("disabled")
    +)
    +
    +func init() {
    +	t["VirtualDiskRuleSpecRuleType"] = reflect.TypeOf((*VirtualDiskRuleSpecRuleType)(nil)).Elem()
    +}
    +
    +type VirtualDiskSharing string
    +
    +const (
    +	VirtualDiskSharingSharingNone        = VirtualDiskSharing("sharingNone")
    +	VirtualDiskSharingSharingMultiWriter = VirtualDiskSharing("sharingMultiWriter")
    +)
    +
    +func init() {
    +	t["VirtualDiskSharing"] = reflect.TypeOf((*VirtualDiskSharing)(nil)).Elem()
    +}
    +
    +type VirtualDiskType string
    +
    +const (
    +	VirtualDiskTypePreallocated     = VirtualDiskType("preallocated")
    +	VirtualDiskTypeThin             = VirtualDiskType("thin")
    +	VirtualDiskTypeSeSparse         = VirtualDiskType("seSparse")
    +	VirtualDiskTypeRdm              = VirtualDiskType("rdm")
    +	VirtualDiskTypeRdmp             = VirtualDiskType("rdmp")
    +	VirtualDiskTypeRaw              = VirtualDiskType("raw")
    +	VirtualDiskTypeDelta            = VirtualDiskType("delta")
    +	VirtualDiskTypeSparse2Gb        = VirtualDiskType("sparse2Gb")
    +	VirtualDiskTypeThick2Gb         = VirtualDiskType("thick2Gb")
    +	VirtualDiskTypeEagerZeroedThick = VirtualDiskType("eagerZeroedThick")
    +	VirtualDiskTypeSparseMonolithic = VirtualDiskType("sparseMonolithic")
    +	VirtualDiskTypeFlatMonolithic   = VirtualDiskType("flatMonolithic")
    +	VirtualDiskTypeThick            = VirtualDiskType("thick")
    +)
    +
    +func init() {
    +	t["VirtualDiskType"] = reflect.TypeOf((*VirtualDiskType)(nil)).Elem()
    +}
    +
    +type VirtualDiskVFlashCacheConfigInfoCacheConsistencyType string
    +
    +const (
    +	VirtualDiskVFlashCacheConfigInfoCacheConsistencyTypeStrong = VirtualDiskVFlashCacheConfigInfoCacheConsistencyType("strong")
    +	VirtualDiskVFlashCacheConfigInfoCacheConsistencyTypeWeak   = VirtualDiskVFlashCacheConfigInfoCacheConsistencyType("weak")
    +)
    +
    +func init() {
    +	t["VirtualDiskVFlashCacheConfigInfoCacheConsistencyType"] = reflect.TypeOf((*VirtualDiskVFlashCacheConfigInfoCacheConsistencyType)(nil)).Elem()
    +}
    +
    +type VirtualDiskVFlashCacheConfigInfoCacheMode string
    +
    +const (
    +	VirtualDiskVFlashCacheConfigInfoCacheModeWrite_thru = VirtualDiskVFlashCacheConfigInfoCacheMode("write_thru")
    +	VirtualDiskVFlashCacheConfigInfoCacheModeWrite_back = VirtualDiskVFlashCacheConfigInfoCacheMode("write_back")
    +)
    +
    +func init() {
    +	t["VirtualDiskVFlashCacheConfigInfoCacheMode"] = reflect.TypeOf((*VirtualDiskVFlashCacheConfigInfoCacheMode)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardLegacyNetworkDeviceName string
    +
    +const (
    +	VirtualEthernetCardLegacyNetworkDeviceNameBridged  = VirtualEthernetCardLegacyNetworkDeviceName("bridged")
    +	VirtualEthernetCardLegacyNetworkDeviceNameNat      = VirtualEthernetCardLegacyNetworkDeviceName("nat")
    +	VirtualEthernetCardLegacyNetworkDeviceNameHostonly = VirtualEthernetCardLegacyNetworkDeviceName("hostonly")
    +)
    +
    +func init() {
    +	t["VirtualEthernetCardLegacyNetworkDeviceName"] = reflect.TypeOf((*VirtualEthernetCardLegacyNetworkDeviceName)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardMacType string
    +
    +const (
    +	VirtualEthernetCardMacTypeManual    = VirtualEthernetCardMacType("manual")
    +	VirtualEthernetCardMacTypeGenerated = VirtualEthernetCardMacType("generated")
    +	VirtualEthernetCardMacTypeAssigned  = VirtualEthernetCardMacType("assigned")
    +)
    +
    +func init() {
    +	t["VirtualEthernetCardMacType"] = reflect.TypeOf((*VirtualEthernetCardMacType)(nil)).Elem()
    +}
    +
    +type VirtualMachineAppHeartbeatStatusType string
    +
    +const (
    +	VirtualMachineAppHeartbeatStatusTypeAppStatusGray  = VirtualMachineAppHeartbeatStatusType("appStatusGray")
    +	VirtualMachineAppHeartbeatStatusTypeAppStatusGreen = VirtualMachineAppHeartbeatStatusType("appStatusGreen")
    +	VirtualMachineAppHeartbeatStatusTypeAppStatusRed   = VirtualMachineAppHeartbeatStatusType("appStatusRed")
    +)
    +
    +func init() {
    +	t["VirtualMachineAppHeartbeatStatusType"] = reflect.TypeOf((*VirtualMachineAppHeartbeatStatusType)(nil)).Elem()
    +}
    +
    +type VirtualMachineBootOptionsNetworkBootProtocolType string
    +
    +const (
    +	VirtualMachineBootOptionsNetworkBootProtocolTypeIpv4 = VirtualMachineBootOptionsNetworkBootProtocolType("ipv4")
    +	VirtualMachineBootOptionsNetworkBootProtocolTypeIpv6 = VirtualMachineBootOptionsNetworkBootProtocolType("ipv6")
    +)
    +
    +func init() {
    +	t["VirtualMachineBootOptionsNetworkBootProtocolType"] = reflect.TypeOf((*VirtualMachineBootOptionsNetworkBootProtocolType)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigInfoNpivWwnType string
    +
    +const (
    +	VirtualMachineConfigInfoNpivWwnTypeVc       = VirtualMachineConfigInfoNpivWwnType("vc")
    +	VirtualMachineConfigInfoNpivWwnTypeHost     = VirtualMachineConfigInfoNpivWwnType("host")
    +	VirtualMachineConfigInfoNpivWwnTypeExternal = VirtualMachineConfigInfoNpivWwnType("external")
    +)
    +
    +func init() {
    +	t["VirtualMachineConfigInfoNpivWwnType"] = reflect.TypeOf((*VirtualMachineConfigInfoNpivWwnType)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigInfoSwapPlacementType string
    +
    +const (
    +	VirtualMachineConfigInfoSwapPlacementTypeInherit     = VirtualMachineConfigInfoSwapPlacementType("inherit")
    +	VirtualMachineConfigInfoSwapPlacementTypeVmDirectory = VirtualMachineConfigInfoSwapPlacementType("vmDirectory")
    +	VirtualMachineConfigInfoSwapPlacementTypeHostLocal   = VirtualMachineConfigInfoSwapPlacementType("hostLocal")
    +)
    +
    +func init() {
    +	t["VirtualMachineConfigInfoSwapPlacementType"] = reflect.TypeOf((*VirtualMachineConfigInfoSwapPlacementType)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigSpecEncryptedVMotionModes string
    +
    +const (
    +	VirtualMachineConfigSpecEncryptedVMotionModesDisabled      = VirtualMachineConfigSpecEncryptedVMotionModes("disabled")
    +	VirtualMachineConfigSpecEncryptedVMotionModesOpportunistic = VirtualMachineConfigSpecEncryptedVMotionModes("opportunistic")
    +	VirtualMachineConfigSpecEncryptedVMotionModesRequired      = VirtualMachineConfigSpecEncryptedVMotionModes("required")
    +)
    +
    +func init() {
    +	t["VirtualMachineConfigSpecEncryptedVMotionModes"] = reflect.TypeOf((*VirtualMachineConfigSpecEncryptedVMotionModes)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigSpecNpivWwnOp string
    +
    +const (
    +	VirtualMachineConfigSpecNpivWwnOpGenerate = VirtualMachineConfigSpecNpivWwnOp("generate")
    +	VirtualMachineConfigSpecNpivWwnOpSet      = VirtualMachineConfigSpecNpivWwnOp("set")
    +	VirtualMachineConfigSpecNpivWwnOpRemove   = VirtualMachineConfigSpecNpivWwnOp("remove")
    +	VirtualMachineConfigSpecNpivWwnOpExtend   = VirtualMachineConfigSpecNpivWwnOp("extend")
    +)
    +
    +func init() {
    +	t["VirtualMachineConfigSpecNpivWwnOp"] = reflect.TypeOf((*VirtualMachineConfigSpecNpivWwnOp)(nil)).Elem()
    +}
    +
    +type VirtualMachineConnectionState string
    +
    +const (
    +	VirtualMachineConnectionStateConnected    = VirtualMachineConnectionState("connected")
    +	VirtualMachineConnectionStateDisconnected = VirtualMachineConnectionState("disconnected")
    +	VirtualMachineConnectionStateOrphaned     = VirtualMachineConnectionState("orphaned")
    +	VirtualMachineConnectionStateInaccessible = VirtualMachineConnectionState("inaccessible")
    +	VirtualMachineConnectionStateInvalid      = VirtualMachineConnectionState("invalid")
    +)
    +
    +func init() {
    +	t["VirtualMachineConnectionState"] = reflect.TypeOf((*VirtualMachineConnectionState)(nil)).Elem()
    +}
    +
    +type VirtualMachineCryptoState string
    +
    +const (
    +	VirtualMachineCryptoStateUnlocked = VirtualMachineCryptoState("unlocked")
    +	VirtualMachineCryptoStateLocked   = VirtualMachineCryptoState("locked")
    +)
    +
    +func init() {
    +	t["VirtualMachineCryptoState"] = reflect.TypeOf((*VirtualMachineCryptoState)(nil)).Elem()
    +}
    +
    +type VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonOther string
    +
    +const (
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonOtherVmNptIncompatibleHost    = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonOther("vmNptIncompatibleHost")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonOtherVmNptIncompatibleNetwork = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonOther("vmNptIncompatibleNetwork")
    +)
    +
    +func init() {
    +	t["VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonOther"] = reflect.TypeOf((*VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonOther)(nil)).Elem()
    +}
    +
    +type VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm string
    +
    +const (
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptIncompatibleGuest                      = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptIncompatibleGuest")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptIncompatibleGuestDriver                = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptIncompatibleGuestDriver")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptIncompatibleAdapterType                = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptIncompatibleAdapterType")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptDisabledOrDisconnectedAdapter          = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptDisabledOrDisconnectedAdapter")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptIncompatibleAdapterFeatures            = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptIncompatibleAdapterFeatures")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptIncompatibleBackingType                = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptIncompatibleBackingType")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptInsufficientMemoryReservation          = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptInsufficientMemoryReservation")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptFaultToleranceOrRecordReplayConfigured = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptFaultToleranceOrRecordReplayConfigured")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptConflictingIOChainConfigured           = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptConflictingIOChainConfigured")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptMonitorBlocks                          = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptMonitorBlocks")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptConflictingOperationInProgress         = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptConflictingOperationInProgress")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptRuntimeError                           = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptRuntimeError")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptOutOfIntrVector                        = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptOutOfIntrVector")
    +	VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVmVmNptVMCIActive                             = VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm("vmNptVMCIActive")
    +)
    +
    +func init() {
    +	t["VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm"] = reflect.TypeOf((*VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeStateVmDirectPathGen2InactiveReasonVm)(nil)).Elem()
    +}
    +
    +type VirtualMachineFaultToleranceState string
    +
    +const (
    +	VirtualMachineFaultToleranceStateNotConfigured = VirtualMachineFaultToleranceState("notConfigured")
    +	VirtualMachineFaultToleranceStateDisabled      = VirtualMachineFaultToleranceState("disabled")
    +	VirtualMachineFaultToleranceStateEnabled       = VirtualMachineFaultToleranceState("enabled")
    +	VirtualMachineFaultToleranceStateNeedSecondary = VirtualMachineFaultToleranceState("needSecondary")
    +	VirtualMachineFaultToleranceStateStarting      = VirtualMachineFaultToleranceState("starting")
    +	VirtualMachineFaultToleranceStateRunning       = VirtualMachineFaultToleranceState("running")
    +)
    +
    +func init() {
    +	t["VirtualMachineFaultToleranceState"] = reflect.TypeOf((*VirtualMachineFaultToleranceState)(nil)).Elem()
    +}
    +
    +type VirtualMachineFaultToleranceType string
    +
    +const (
    +	VirtualMachineFaultToleranceTypeUnset         = VirtualMachineFaultToleranceType("unset")
    +	VirtualMachineFaultToleranceTypeRecordReplay  = VirtualMachineFaultToleranceType("recordReplay")
    +	VirtualMachineFaultToleranceTypeCheckpointing = VirtualMachineFaultToleranceType("checkpointing")
    +)
    +
    +func init() {
    +	t["VirtualMachineFaultToleranceType"] = reflect.TypeOf((*VirtualMachineFaultToleranceType)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayoutExFileType string
    +
    +const (
    +	VirtualMachineFileLayoutExFileTypeConfig               = VirtualMachineFileLayoutExFileType("config")
    +	VirtualMachineFileLayoutExFileTypeExtendedConfig       = VirtualMachineFileLayoutExFileType("extendedConfig")
    +	VirtualMachineFileLayoutExFileTypeDiskDescriptor       = VirtualMachineFileLayoutExFileType("diskDescriptor")
    +	VirtualMachineFileLayoutExFileTypeDiskExtent           = VirtualMachineFileLayoutExFileType("diskExtent")
    +	VirtualMachineFileLayoutExFileTypeDigestDescriptor     = VirtualMachineFileLayoutExFileType("digestDescriptor")
    +	VirtualMachineFileLayoutExFileTypeDigestExtent         = VirtualMachineFileLayoutExFileType("digestExtent")
    +	VirtualMachineFileLayoutExFileTypeDiskReplicationState = VirtualMachineFileLayoutExFileType("diskReplicationState")
    +	VirtualMachineFileLayoutExFileTypeLog                  = VirtualMachineFileLayoutExFileType("log")
    +	VirtualMachineFileLayoutExFileTypeStat                 = VirtualMachineFileLayoutExFileType("stat")
    +	VirtualMachineFileLayoutExFileTypeNamespaceData        = VirtualMachineFileLayoutExFileType("namespaceData")
    +	VirtualMachineFileLayoutExFileTypeNvram                = VirtualMachineFileLayoutExFileType("nvram")
    +	VirtualMachineFileLayoutExFileTypeSnapshotData         = VirtualMachineFileLayoutExFileType("snapshotData")
    +	VirtualMachineFileLayoutExFileTypeSnapshotMemory       = VirtualMachineFileLayoutExFileType("snapshotMemory")
    +	VirtualMachineFileLayoutExFileTypeSnapshotList         = VirtualMachineFileLayoutExFileType("snapshotList")
    +	VirtualMachineFileLayoutExFileTypeSnapshotManifestList = VirtualMachineFileLayoutExFileType("snapshotManifestList")
    +	VirtualMachineFileLayoutExFileTypeSuspend              = VirtualMachineFileLayoutExFileType("suspend")
    +	VirtualMachineFileLayoutExFileTypeSuspendMemory        = VirtualMachineFileLayoutExFileType("suspendMemory")
    +	VirtualMachineFileLayoutExFileTypeSwap                 = VirtualMachineFileLayoutExFileType("swap")
    +	VirtualMachineFileLayoutExFileTypeUwswap               = VirtualMachineFileLayoutExFileType("uwswap")
    +	VirtualMachineFileLayoutExFileTypeCore                 = VirtualMachineFileLayoutExFileType("core")
    +	VirtualMachineFileLayoutExFileTypeScreenshot           = VirtualMachineFileLayoutExFileType("screenshot")
    +	VirtualMachineFileLayoutExFileTypeFtMetadata           = VirtualMachineFileLayoutExFileType("ftMetadata")
    +	VirtualMachineFileLayoutExFileTypeGuestCustomization   = VirtualMachineFileLayoutExFileType("guestCustomization")
    +)
    +
    +func init() {
    +	t["VirtualMachineFileLayoutExFileType"] = reflect.TypeOf((*VirtualMachineFileLayoutExFileType)(nil)).Elem()
    +}
    +
    +type VirtualMachineFlagInfoMonitorType string
    +
    +const (
    +	VirtualMachineFlagInfoMonitorTypeRelease = VirtualMachineFlagInfoMonitorType("release")
    +	VirtualMachineFlagInfoMonitorTypeDebug   = VirtualMachineFlagInfoMonitorType("debug")
    +	VirtualMachineFlagInfoMonitorTypeStats   = VirtualMachineFlagInfoMonitorType("stats")
    +)
    +
    +func init() {
    +	t["VirtualMachineFlagInfoMonitorType"] = reflect.TypeOf((*VirtualMachineFlagInfoMonitorType)(nil)).Elem()
    +}
    +
    +type VirtualMachineFlagInfoVirtualExecUsage string
    +
    +const (
    +	VirtualMachineFlagInfoVirtualExecUsageHvAuto = VirtualMachineFlagInfoVirtualExecUsage("hvAuto")
    +	VirtualMachineFlagInfoVirtualExecUsageHvOn   = VirtualMachineFlagInfoVirtualExecUsage("hvOn")
    +	VirtualMachineFlagInfoVirtualExecUsageHvOff  = VirtualMachineFlagInfoVirtualExecUsage("hvOff")
    +)
    +
    +func init() {
    +	t["VirtualMachineFlagInfoVirtualExecUsage"] = reflect.TypeOf((*VirtualMachineFlagInfoVirtualExecUsage)(nil)).Elem()
    +}
    +
    +type VirtualMachineFlagInfoVirtualMmuUsage string
    +
    +const (
    +	VirtualMachineFlagInfoVirtualMmuUsageAutomatic = VirtualMachineFlagInfoVirtualMmuUsage("automatic")
    +	VirtualMachineFlagInfoVirtualMmuUsageOn        = VirtualMachineFlagInfoVirtualMmuUsage("on")
    +	VirtualMachineFlagInfoVirtualMmuUsageOff       = VirtualMachineFlagInfoVirtualMmuUsage("off")
    +)
    +
    +func init() {
    +	t["VirtualMachineFlagInfoVirtualMmuUsage"] = reflect.TypeOf((*VirtualMachineFlagInfoVirtualMmuUsage)(nil)).Elem()
    +}
    +
    +type VirtualMachineForkConfigInfoChildType string
    +
    +const (
    +	VirtualMachineForkConfigInfoChildTypeNone          = VirtualMachineForkConfigInfoChildType("none")
    +	VirtualMachineForkConfigInfoChildTypePersistent    = VirtualMachineForkConfigInfoChildType("persistent")
    +	VirtualMachineForkConfigInfoChildTypeNonpersistent = VirtualMachineForkConfigInfoChildType("nonpersistent")
    +)
    +
    +func init() {
    +	t["VirtualMachineForkConfigInfoChildType"] = reflect.TypeOf((*VirtualMachineForkConfigInfoChildType)(nil)).Elem()
    +}
    +
    +type VirtualMachineGuestOsFamily string
    +
    +const (
    +	VirtualMachineGuestOsFamilyWindowsGuest      = VirtualMachineGuestOsFamily("windowsGuest")
    +	VirtualMachineGuestOsFamilyLinuxGuest        = VirtualMachineGuestOsFamily("linuxGuest")
    +	VirtualMachineGuestOsFamilyNetwareGuest      = VirtualMachineGuestOsFamily("netwareGuest")
    +	VirtualMachineGuestOsFamilySolarisGuest      = VirtualMachineGuestOsFamily("solarisGuest")
    +	VirtualMachineGuestOsFamilyDarwinGuestFamily = VirtualMachineGuestOsFamily("darwinGuestFamily")
    +	VirtualMachineGuestOsFamilyOtherGuestFamily  = VirtualMachineGuestOsFamily("otherGuestFamily")
    +)
    +
    +func init() {
    +	t["VirtualMachineGuestOsFamily"] = reflect.TypeOf((*VirtualMachineGuestOsFamily)(nil)).Elem()
    +}
    +
    +type VirtualMachineGuestOsIdentifier string
    +
    +const (
    +	VirtualMachineGuestOsIdentifierDosGuest                = VirtualMachineGuestOsIdentifier("dosGuest")
    +	VirtualMachineGuestOsIdentifierWin31Guest              = VirtualMachineGuestOsIdentifier("win31Guest")
    +	VirtualMachineGuestOsIdentifierWin95Guest              = VirtualMachineGuestOsIdentifier("win95Guest")
    +	VirtualMachineGuestOsIdentifierWin98Guest              = VirtualMachineGuestOsIdentifier("win98Guest")
    +	VirtualMachineGuestOsIdentifierWinMeGuest              = VirtualMachineGuestOsIdentifier("winMeGuest")
    +	VirtualMachineGuestOsIdentifierWinNTGuest              = VirtualMachineGuestOsIdentifier("winNTGuest")
    +	VirtualMachineGuestOsIdentifierWin2000ProGuest         = VirtualMachineGuestOsIdentifier("win2000ProGuest")
    +	VirtualMachineGuestOsIdentifierWin2000ServGuest        = VirtualMachineGuestOsIdentifier("win2000ServGuest")
    +	VirtualMachineGuestOsIdentifierWin2000AdvServGuest     = VirtualMachineGuestOsIdentifier("win2000AdvServGuest")
    +	VirtualMachineGuestOsIdentifierWinXPHomeGuest          = VirtualMachineGuestOsIdentifier("winXPHomeGuest")
    +	VirtualMachineGuestOsIdentifierWinXPProGuest           = VirtualMachineGuestOsIdentifier("winXPProGuest")
    +	VirtualMachineGuestOsIdentifierWinXPPro64Guest         = VirtualMachineGuestOsIdentifier("winXPPro64Guest")
    +	VirtualMachineGuestOsIdentifierWinNetWebGuest          = VirtualMachineGuestOsIdentifier("winNetWebGuest")
    +	VirtualMachineGuestOsIdentifierWinNetStandardGuest     = VirtualMachineGuestOsIdentifier("winNetStandardGuest")
    +	VirtualMachineGuestOsIdentifierWinNetEnterpriseGuest   = VirtualMachineGuestOsIdentifier("winNetEnterpriseGuest")
    +	VirtualMachineGuestOsIdentifierWinNetDatacenterGuest   = VirtualMachineGuestOsIdentifier("winNetDatacenterGuest")
    +	VirtualMachineGuestOsIdentifierWinNetBusinessGuest     = VirtualMachineGuestOsIdentifier("winNetBusinessGuest")
    +	VirtualMachineGuestOsIdentifierWinNetStandard64Guest   = VirtualMachineGuestOsIdentifier("winNetStandard64Guest")
    +	VirtualMachineGuestOsIdentifierWinNetEnterprise64Guest = VirtualMachineGuestOsIdentifier("winNetEnterprise64Guest")
    +	VirtualMachineGuestOsIdentifierWinLonghornGuest        = VirtualMachineGuestOsIdentifier("winLonghornGuest")
    +	VirtualMachineGuestOsIdentifierWinLonghorn64Guest      = VirtualMachineGuestOsIdentifier("winLonghorn64Guest")
    +	VirtualMachineGuestOsIdentifierWinNetDatacenter64Guest = VirtualMachineGuestOsIdentifier("winNetDatacenter64Guest")
    +	VirtualMachineGuestOsIdentifierWinVistaGuest           = VirtualMachineGuestOsIdentifier("winVistaGuest")
    +	VirtualMachineGuestOsIdentifierWinVista64Guest         = VirtualMachineGuestOsIdentifier("winVista64Guest")
    +	VirtualMachineGuestOsIdentifierWindows7Guest           = VirtualMachineGuestOsIdentifier("windows7Guest")
    +	VirtualMachineGuestOsIdentifierWindows7_64Guest        = VirtualMachineGuestOsIdentifier("windows7_64Guest")
    +	VirtualMachineGuestOsIdentifierWindows7Server64Guest   = VirtualMachineGuestOsIdentifier("windows7Server64Guest")
    +	VirtualMachineGuestOsIdentifierWindows8Guest           = VirtualMachineGuestOsIdentifier("windows8Guest")
    +	VirtualMachineGuestOsIdentifierWindows8_64Guest        = VirtualMachineGuestOsIdentifier("windows8_64Guest")
    +	VirtualMachineGuestOsIdentifierWindows8Server64Guest   = VirtualMachineGuestOsIdentifier("windows8Server64Guest")
    +	VirtualMachineGuestOsIdentifierWindows9Guest           = VirtualMachineGuestOsIdentifier("windows9Guest")
    +	VirtualMachineGuestOsIdentifierWindows9_64Guest        = VirtualMachineGuestOsIdentifier("windows9_64Guest")
    +	VirtualMachineGuestOsIdentifierWindows9Server64Guest   = VirtualMachineGuestOsIdentifier("windows9Server64Guest")
    +	VirtualMachineGuestOsIdentifierWindowsHyperVGuest      = VirtualMachineGuestOsIdentifier("windowsHyperVGuest")
    +	VirtualMachineGuestOsIdentifierFreebsdGuest            = VirtualMachineGuestOsIdentifier("freebsdGuest")
    +	VirtualMachineGuestOsIdentifierFreebsd64Guest          = VirtualMachineGuestOsIdentifier("freebsd64Guest")
    +	VirtualMachineGuestOsIdentifierFreebsd11Guest          = VirtualMachineGuestOsIdentifier("freebsd11Guest")
    +	VirtualMachineGuestOsIdentifierFreebsd11_64Guest       = VirtualMachineGuestOsIdentifier("freebsd11_64Guest")
    +	VirtualMachineGuestOsIdentifierFreebsd12Guest          = VirtualMachineGuestOsIdentifier("freebsd12Guest")
    +	VirtualMachineGuestOsIdentifierFreebsd12_64Guest       = VirtualMachineGuestOsIdentifier("freebsd12_64Guest")
    +	VirtualMachineGuestOsIdentifierRedhatGuest             = VirtualMachineGuestOsIdentifier("redhatGuest")
    +	VirtualMachineGuestOsIdentifierRhel2Guest              = VirtualMachineGuestOsIdentifier("rhel2Guest")
    +	VirtualMachineGuestOsIdentifierRhel3Guest              = VirtualMachineGuestOsIdentifier("rhel3Guest")
    +	VirtualMachineGuestOsIdentifierRhel3_64Guest           = VirtualMachineGuestOsIdentifier("rhel3_64Guest")
    +	VirtualMachineGuestOsIdentifierRhel4Guest              = VirtualMachineGuestOsIdentifier("rhel4Guest")
    +	VirtualMachineGuestOsIdentifierRhel4_64Guest           = VirtualMachineGuestOsIdentifier("rhel4_64Guest")
    +	VirtualMachineGuestOsIdentifierRhel5Guest              = VirtualMachineGuestOsIdentifier("rhel5Guest")
    +	VirtualMachineGuestOsIdentifierRhel5_64Guest           = VirtualMachineGuestOsIdentifier("rhel5_64Guest")
    +	VirtualMachineGuestOsIdentifierRhel6Guest              = VirtualMachineGuestOsIdentifier("rhel6Guest")
    +	VirtualMachineGuestOsIdentifierRhel6_64Guest           = VirtualMachineGuestOsIdentifier("rhel6_64Guest")
    +	VirtualMachineGuestOsIdentifierRhel7Guest              = VirtualMachineGuestOsIdentifier("rhel7Guest")
    +	VirtualMachineGuestOsIdentifierRhel7_64Guest           = VirtualMachineGuestOsIdentifier("rhel7_64Guest")
    +	VirtualMachineGuestOsIdentifierRhel8_64Guest           = VirtualMachineGuestOsIdentifier("rhel8_64Guest")
    +	VirtualMachineGuestOsIdentifierCentosGuest             = VirtualMachineGuestOsIdentifier("centosGuest")
    +	VirtualMachineGuestOsIdentifierCentos64Guest           = VirtualMachineGuestOsIdentifier("centos64Guest")
    +	VirtualMachineGuestOsIdentifierCentos6Guest            = VirtualMachineGuestOsIdentifier("centos6Guest")
    +	VirtualMachineGuestOsIdentifierCentos6_64Guest         = VirtualMachineGuestOsIdentifier("centos6_64Guest")
    +	VirtualMachineGuestOsIdentifierCentos7Guest            = VirtualMachineGuestOsIdentifier("centos7Guest")
    +	VirtualMachineGuestOsIdentifierCentos7_64Guest         = VirtualMachineGuestOsIdentifier("centos7_64Guest")
    +	VirtualMachineGuestOsIdentifierCentos8_64Guest         = VirtualMachineGuestOsIdentifier("centos8_64Guest")
    +	VirtualMachineGuestOsIdentifierOracleLinuxGuest        = VirtualMachineGuestOsIdentifier("oracleLinuxGuest")
    +	VirtualMachineGuestOsIdentifierOracleLinux64Guest      = VirtualMachineGuestOsIdentifier("oracleLinux64Guest")
    +	VirtualMachineGuestOsIdentifierOracleLinux6Guest       = VirtualMachineGuestOsIdentifier("oracleLinux6Guest")
    +	VirtualMachineGuestOsIdentifierOracleLinux6_64Guest    = VirtualMachineGuestOsIdentifier("oracleLinux6_64Guest")
    +	VirtualMachineGuestOsIdentifierOracleLinux7Guest       = VirtualMachineGuestOsIdentifier("oracleLinux7Guest")
    +	VirtualMachineGuestOsIdentifierOracleLinux7_64Guest    = VirtualMachineGuestOsIdentifier("oracleLinux7_64Guest")
    +	VirtualMachineGuestOsIdentifierOracleLinux8_64Guest    = VirtualMachineGuestOsIdentifier("oracleLinux8_64Guest")
    +	VirtualMachineGuestOsIdentifierSuseGuest               = VirtualMachineGuestOsIdentifier("suseGuest")
    +	VirtualMachineGuestOsIdentifierSuse64Guest             = VirtualMachineGuestOsIdentifier("suse64Guest")
    +	VirtualMachineGuestOsIdentifierSlesGuest               = VirtualMachineGuestOsIdentifier("slesGuest")
    +	VirtualMachineGuestOsIdentifierSles64Guest             = VirtualMachineGuestOsIdentifier("sles64Guest")
    +	VirtualMachineGuestOsIdentifierSles10Guest             = VirtualMachineGuestOsIdentifier("sles10Guest")
    +	VirtualMachineGuestOsIdentifierSles10_64Guest          = VirtualMachineGuestOsIdentifier("sles10_64Guest")
    +	VirtualMachineGuestOsIdentifierSles11Guest             = VirtualMachineGuestOsIdentifier("sles11Guest")
    +	VirtualMachineGuestOsIdentifierSles11_64Guest          = VirtualMachineGuestOsIdentifier("sles11_64Guest")
    +	VirtualMachineGuestOsIdentifierSles12Guest             = VirtualMachineGuestOsIdentifier("sles12Guest")
    +	VirtualMachineGuestOsIdentifierSles12_64Guest          = VirtualMachineGuestOsIdentifier("sles12_64Guest")
    +	VirtualMachineGuestOsIdentifierSles15_64Guest          = VirtualMachineGuestOsIdentifier("sles15_64Guest")
    +	VirtualMachineGuestOsIdentifierNld9Guest               = VirtualMachineGuestOsIdentifier("nld9Guest")
    +	VirtualMachineGuestOsIdentifierOesGuest                = VirtualMachineGuestOsIdentifier("oesGuest")
    +	VirtualMachineGuestOsIdentifierSjdsGuest               = VirtualMachineGuestOsIdentifier("sjdsGuest")
    +	VirtualMachineGuestOsIdentifierMandrakeGuest           = VirtualMachineGuestOsIdentifier("mandrakeGuest")
    +	VirtualMachineGuestOsIdentifierMandrivaGuest           = VirtualMachineGuestOsIdentifier("mandrivaGuest")
    +	VirtualMachineGuestOsIdentifierMandriva64Guest         = VirtualMachineGuestOsIdentifier("mandriva64Guest")
    +	VirtualMachineGuestOsIdentifierTurboLinuxGuest         = VirtualMachineGuestOsIdentifier("turboLinuxGuest")
    +	VirtualMachineGuestOsIdentifierTurboLinux64Guest       = VirtualMachineGuestOsIdentifier("turboLinux64Guest")
    +	VirtualMachineGuestOsIdentifierUbuntuGuest             = VirtualMachineGuestOsIdentifier("ubuntuGuest")
    +	VirtualMachineGuestOsIdentifierUbuntu64Guest           = VirtualMachineGuestOsIdentifier("ubuntu64Guest")
    +	VirtualMachineGuestOsIdentifierDebian4Guest            = VirtualMachineGuestOsIdentifier("debian4Guest")
    +	VirtualMachineGuestOsIdentifierDebian4_64Guest         = VirtualMachineGuestOsIdentifier("debian4_64Guest")
    +	VirtualMachineGuestOsIdentifierDebian5Guest            = VirtualMachineGuestOsIdentifier("debian5Guest")
    +	VirtualMachineGuestOsIdentifierDebian5_64Guest         = VirtualMachineGuestOsIdentifier("debian5_64Guest")
    +	VirtualMachineGuestOsIdentifierDebian6Guest            = VirtualMachineGuestOsIdentifier("debian6Guest")
    +	VirtualMachineGuestOsIdentifierDebian6_64Guest         = VirtualMachineGuestOsIdentifier("debian6_64Guest")
    +	VirtualMachineGuestOsIdentifierDebian7Guest            = VirtualMachineGuestOsIdentifier("debian7Guest")
    +	VirtualMachineGuestOsIdentifierDebian7_64Guest         = VirtualMachineGuestOsIdentifier("debian7_64Guest")
    +	VirtualMachineGuestOsIdentifierDebian8Guest            = VirtualMachineGuestOsIdentifier("debian8Guest")
    +	VirtualMachineGuestOsIdentifierDebian8_64Guest         = VirtualMachineGuestOsIdentifier("debian8_64Guest")
    +	VirtualMachineGuestOsIdentifierDebian9Guest            = VirtualMachineGuestOsIdentifier("debian9Guest")
    +	VirtualMachineGuestOsIdentifierDebian9_64Guest         = VirtualMachineGuestOsIdentifier("debian9_64Guest")
    +	VirtualMachineGuestOsIdentifierDebian10Guest           = VirtualMachineGuestOsIdentifier("debian10Guest")
    +	VirtualMachineGuestOsIdentifierDebian10_64Guest        = VirtualMachineGuestOsIdentifier("debian10_64Guest")
    +	VirtualMachineGuestOsIdentifierAsianux3Guest           = VirtualMachineGuestOsIdentifier("asianux3Guest")
    +	VirtualMachineGuestOsIdentifierAsianux3_64Guest        = VirtualMachineGuestOsIdentifier("asianux3_64Guest")
    +	VirtualMachineGuestOsIdentifierAsianux4Guest           = VirtualMachineGuestOsIdentifier("asianux4Guest")
    +	VirtualMachineGuestOsIdentifierAsianux4_64Guest        = VirtualMachineGuestOsIdentifier("asianux4_64Guest")
    +	VirtualMachineGuestOsIdentifierAsianux5_64Guest        = VirtualMachineGuestOsIdentifier("asianux5_64Guest")
    +	VirtualMachineGuestOsIdentifierAsianux7_64Guest        = VirtualMachineGuestOsIdentifier("asianux7_64Guest")
    +	VirtualMachineGuestOsIdentifierAsianux8_64Guest        = VirtualMachineGuestOsIdentifier("asianux8_64Guest")
    +	VirtualMachineGuestOsIdentifierOpensuseGuest           = VirtualMachineGuestOsIdentifier("opensuseGuest")
    +	VirtualMachineGuestOsIdentifierOpensuse64Guest         = VirtualMachineGuestOsIdentifier("opensuse64Guest")
    +	VirtualMachineGuestOsIdentifierFedoraGuest             = VirtualMachineGuestOsIdentifier("fedoraGuest")
    +	VirtualMachineGuestOsIdentifierFedora64Guest           = VirtualMachineGuestOsIdentifier("fedora64Guest")
    +	VirtualMachineGuestOsIdentifierCoreos64Guest           = VirtualMachineGuestOsIdentifier("coreos64Guest")
    +	VirtualMachineGuestOsIdentifierVmwarePhoton64Guest     = VirtualMachineGuestOsIdentifier("vmwarePhoton64Guest")
    +	VirtualMachineGuestOsIdentifierOther24xLinuxGuest      = VirtualMachineGuestOsIdentifier("other24xLinuxGuest")
    +	VirtualMachineGuestOsIdentifierOther26xLinuxGuest      = VirtualMachineGuestOsIdentifier("other26xLinuxGuest")
    +	VirtualMachineGuestOsIdentifierOtherLinuxGuest         = VirtualMachineGuestOsIdentifier("otherLinuxGuest")
    +	VirtualMachineGuestOsIdentifierOther3xLinuxGuest       = VirtualMachineGuestOsIdentifier("other3xLinuxGuest")
    +	VirtualMachineGuestOsIdentifierOther4xLinuxGuest       = VirtualMachineGuestOsIdentifier("other4xLinuxGuest")
    +	VirtualMachineGuestOsIdentifierGenericLinuxGuest       = VirtualMachineGuestOsIdentifier("genericLinuxGuest")
    +	VirtualMachineGuestOsIdentifierOther24xLinux64Guest    = VirtualMachineGuestOsIdentifier("other24xLinux64Guest")
    +	VirtualMachineGuestOsIdentifierOther26xLinux64Guest    = VirtualMachineGuestOsIdentifier("other26xLinux64Guest")
    +	VirtualMachineGuestOsIdentifierOther3xLinux64Guest     = VirtualMachineGuestOsIdentifier("other3xLinux64Guest")
    +	VirtualMachineGuestOsIdentifierOther4xLinux64Guest     = VirtualMachineGuestOsIdentifier("other4xLinux64Guest")
    +	VirtualMachineGuestOsIdentifierOtherLinux64Guest       = VirtualMachineGuestOsIdentifier("otherLinux64Guest")
    +	VirtualMachineGuestOsIdentifierSolaris6Guest           = VirtualMachineGuestOsIdentifier("solaris6Guest")
    +	VirtualMachineGuestOsIdentifierSolaris7Guest           = VirtualMachineGuestOsIdentifier("solaris7Guest")
    +	VirtualMachineGuestOsIdentifierSolaris8Guest           = VirtualMachineGuestOsIdentifier("solaris8Guest")
    +	VirtualMachineGuestOsIdentifierSolaris9Guest           = VirtualMachineGuestOsIdentifier("solaris9Guest")
    +	VirtualMachineGuestOsIdentifierSolaris10Guest          = VirtualMachineGuestOsIdentifier("solaris10Guest")
    +	VirtualMachineGuestOsIdentifierSolaris10_64Guest       = VirtualMachineGuestOsIdentifier("solaris10_64Guest")
    +	VirtualMachineGuestOsIdentifierSolaris11_64Guest       = VirtualMachineGuestOsIdentifier("solaris11_64Guest")
    +	VirtualMachineGuestOsIdentifierOs2Guest                = VirtualMachineGuestOsIdentifier("os2Guest")
    +	VirtualMachineGuestOsIdentifierEComStationGuest        = VirtualMachineGuestOsIdentifier("eComStationGuest")
    +	VirtualMachineGuestOsIdentifierEComStation2Guest       = VirtualMachineGuestOsIdentifier("eComStation2Guest")
    +	VirtualMachineGuestOsIdentifierNetware4Guest           = VirtualMachineGuestOsIdentifier("netware4Guest")
    +	VirtualMachineGuestOsIdentifierNetware5Guest           = VirtualMachineGuestOsIdentifier("netware5Guest")
    +	VirtualMachineGuestOsIdentifierNetware6Guest           = VirtualMachineGuestOsIdentifier("netware6Guest")
    +	VirtualMachineGuestOsIdentifierOpenServer5Guest        = VirtualMachineGuestOsIdentifier("openServer5Guest")
    +	VirtualMachineGuestOsIdentifierOpenServer6Guest        = VirtualMachineGuestOsIdentifier("openServer6Guest")
    +	VirtualMachineGuestOsIdentifierUnixWare7Guest          = VirtualMachineGuestOsIdentifier("unixWare7Guest")
    +	VirtualMachineGuestOsIdentifierDarwinGuest             = VirtualMachineGuestOsIdentifier("darwinGuest")
    +	VirtualMachineGuestOsIdentifierDarwin64Guest           = VirtualMachineGuestOsIdentifier("darwin64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin10Guest           = VirtualMachineGuestOsIdentifier("darwin10Guest")
    +	VirtualMachineGuestOsIdentifierDarwin10_64Guest        = VirtualMachineGuestOsIdentifier("darwin10_64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin11Guest           = VirtualMachineGuestOsIdentifier("darwin11Guest")
    +	VirtualMachineGuestOsIdentifierDarwin11_64Guest        = VirtualMachineGuestOsIdentifier("darwin11_64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin12_64Guest        = VirtualMachineGuestOsIdentifier("darwin12_64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin13_64Guest        = VirtualMachineGuestOsIdentifier("darwin13_64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin14_64Guest        = VirtualMachineGuestOsIdentifier("darwin14_64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin15_64Guest        = VirtualMachineGuestOsIdentifier("darwin15_64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin16_64Guest        = VirtualMachineGuestOsIdentifier("darwin16_64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin17_64Guest        = VirtualMachineGuestOsIdentifier("darwin17_64Guest")
    +	VirtualMachineGuestOsIdentifierDarwin18_64Guest        = VirtualMachineGuestOsIdentifier("darwin18_64Guest")
    +	VirtualMachineGuestOsIdentifierVmkernelGuest           = VirtualMachineGuestOsIdentifier("vmkernelGuest")
    +	VirtualMachineGuestOsIdentifierVmkernel5Guest          = VirtualMachineGuestOsIdentifier("vmkernel5Guest")
    +	VirtualMachineGuestOsIdentifierVmkernel6Guest          = VirtualMachineGuestOsIdentifier("vmkernel6Guest")
    +	VirtualMachineGuestOsIdentifierVmkernel65Guest         = VirtualMachineGuestOsIdentifier("vmkernel65Guest")
    +	VirtualMachineGuestOsIdentifierOtherGuest              = VirtualMachineGuestOsIdentifier("otherGuest")
    +	VirtualMachineGuestOsIdentifierOtherGuest64            = VirtualMachineGuestOsIdentifier("otherGuest64")
    +)
    +
    +func init() {
    +	t["VirtualMachineGuestOsIdentifier"] = reflect.TypeOf((*VirtualMachineGuestOsIdentifier)(nil)).Elem()
    +}
    +
    +type VirtualMachineGuestState string
    +
    +const (
    +	VirtualMachineGuestStateRunning      = VirtualMachineGuestState("running")
    +	VirtualMachineGuestStateShuttingDown = VirtualMachineGuestState("shuttingDown")
    +	VirtualMachineGuestStateResetting    = VirtualMachineGuestState("resetting")
    +	VirtualMachineGuestStateStandby      = VirtualMachineGuestState("standby")
    +	VirtualMachineGuestStateNotRunning   = VirtualMachineGuestState("notRunning")
    +	VirtualMachineGuestStateUnknown      = VirtualMachineGuestState("unknown")
    +)
    +
    +func init() {
    +	t["VirtualMachineGuestState"] = reflect.TypeOf((*VirtualMachineGuestState)(nil)).Elem()
    +}
    +
    +type VirtualMachineHtSharing string
    +
    +const (
    +	VirtualMachineHtSharingAny      = VirtualMachineHtSharing("any")
    +	VirtualMachineHtSharingNone     = VirtualMachineHtSharing("none")
    +	VirtualMachineHtSharingInternal = VirtualMachineHtSharing("internal")
    +)
    +
    +func init() {
    +	t["VirtualMachineHtSharing"] = reflect.TypeOf((*VirtualMachineHtSharing)(nil)).Elem()
    +}
    +
    +type VirtualMachineMemoryAllocationPolicy string
    +
    +const (
    +	VirtualMachineMemoryAllocationPolicySwapNone = VirtualMachineMemoryAllocationPolicy("swapNone")
    +	VirtualMachineMemoryAllocationPolicySwapSome = VirtualMachineMemoryAllocationPolicy("swapSome")
    +	VirtualMachineMemoryAllocationPolicySwapMost = VirtualMachineMemoryAllocationPolicy("swapMost")
    +)
    +
    +func init() {
    +	t["VirtualMachineMemoryAllocationPolicy"] = reflect.TypeOf((*VirtualMachineMemoryAllocationPolicy)(nil)).Elem()
    +}
    +
    +type VirtualMachineMetadataManagerVmMetadataOp string
    +
    +const (
    +	VirtualMachineMetadataManagerVmMetadataOpUpdate = VirtualMachineMetadataManagerVmMetadataOp("Update")
    +	VirtualMachineMetadataManagerVmMetadataOpRemove = VirtualMachineMetadataManagerVmMetadataOp("Remove")
    +)
    +
    +func init() {
    +	t["VirtualMachineMetadataManagerVmMetadataOp"] = reflect.TypeOf((*VirtualMachineMetadataManagerVmMetadataOp)(nil)).Elem()
    +}
    +
    +type VirtualMachineMetadataManagerVmMetadataOwnerOwner string
    +
    +const (
    +	VirtualMachineMetadataManagerVmMetadataOwnerOwnerComVmwareVsphereHA = VirtualMachineMetadataManagerVmMetadataOwnerOwner("ComVmwareVsphereHA")
    +)
    +
    +func init() {
    +	t["VirtualMachineMetadataManagerVmMetadataOwnerOwner"] = reflect.TypeOf((*VirtualMachineMetadataManagerVmMetadataOwnerOwner)(nil)).Elem()
    +}
    +
    +type VirtualMachineMovePriority string
    +
    +const (
    +	VirtualMachineMovePriorityLowPriority     = VirtualMachineMovePriority("lowPriority")
    +	VirtualMachineMovePriorityHighPriority    = VirtualMachineMovePriority("highPriority")
    +	VirtualMachineMovePriorityDefaultPriority = VirtualMachineMovePriority("defaultPriority")
    +)
    +
    +func init() {
    +	t["VirtualMachineMovePriority"] = reflect.TypeOf((*VirtualMachineMovePriority)(nil)).Elem()
    +}
    +
    +type VirtualMachineNeedSecondaryReason string
    +
    +const (
    +	VirtualMachineNeedSecondaryReasonInitializing           = VirtualMachineNeedSecondaryReason("initializing")
    +	VirtualMachineNeedSecondaryReasonDivergence             = VirtualMachineNeedSecondaryReason("divergence")
    +	VirtualMachineNeedSecondaryReasonLostConnection         = VirtualMachineNeedSecondaryReason("lostConnection")
    +	VirtualMachineNeedSecondaryReasonPartialHardwareFailure = VirtualMachineNeedSecondaryReason("partialHardwareFailure")
    +	VirtualMachineNeedSecondaryReasonUserAction             = VirtualMachineNeedSecondaryReason("userAction")
    +	VirtualMachineNeedSecondaryReasonCheckpointError        = VirtualMachineNeedSecondaryReason("checkpointError")
    +	VirtualMachineNeedSecondaryReasonOther                  = VirtualMachineNeedSecondaryReason("other")
    +)
    +
    +func init() {
    +	t["VirtualMachineNeedSecondaryReason"] = reflect.TypeOf((*VirtualMachineNeedSecondaryReason)(nil)).Elem()
    +}
    +
    +type VirtualMachinePowerOffBehavior string
    +
    +const (
    +	VirtualMachinePowerOffBehaviorPowerOff = VirtualMachinePowerOffBehavior("powerOff")
    +	VirtualMachinePowerOffBehaviorRevert   = VirtualMachinePowerOffBehavior("revert")
    +	VirtualMachinePowerOffBehaviorPrompt   = VirtualMachinePowerOffBehavior("prompt")
    +	VirtualMachinePowerOffBehaviorTake     = VirtualMachinePowerOffBehavior("take")
    +)
    +
    +func init() {
    +	t["VirtualMachinePowerOffBehavior"] = reflect.TypeOf((*VirtualMachinePowerOffBehavior)(nil)).Elem()
    +}
    +
    +type VirtualMachinePowerOpType string
    +
    +const (
    +	VirtualMachinePowerOpTypeSoft   = VirtualMachinePowerOpType("soft")
    +	VirtualMachinePowerOpTypeHard   = VirtualMachinePowerOpType("hard")
    +	VirtualMachinePowerOpTypePreset = VirtualMachinePowerOpType("preset")
    +)
    +
    +func init() {
    +	t["VirtualMachinePowerOpType"] = reflect.TypeOf((*VirtualMachinePowerOpType)(nil)).Elem()
    +}
    +
    +type VirtualMachinePowerState string
    +
    +const (
    +	VirtualMachinePowerStatePoweredOff = VirtualMachinePowerState("poweredOff")
    +	VirtualMachinePowerStatePoweredOn  = VirtualMachinePowerState("poweredOn")
    +	VirtualMachinePowerStateSuspended  = VirtualMachinePowerState("suspended")
    +)
    +
    +func init() {
    +	t["VirtualMachinePowerState"] = reflect.TypeOf((*VirtualMachinePowerState)(nil)).Elem()
    +}
    +
    +type VirtualMachineRecordReplayState string
    +
    +const (
    +	VirtualMachineRecordReplayStateRecording = VirtualMachineRecordReplayState("recording")
    +	VirtualMachineRecordReplayStateReplaying = VirtualMachineRecordReplayState("replaying")
    +	VirtualMachineRecordReplayStateInactive  = VirtualMachineRecordReplayState("inactive")
    +)
    +
    +func init() {
    +	t["VirtualMachineRecordReplayState"] = reflect.TypeOf((*VirtualMachineRecordReplayState)(nil)).Elem()
    +}
    +
    +type VirtualMachineRelocateDiskMoveOptions string
    +
    +const (
    +	VirtualMachineRelocateDiskMoveOptionsMoveAllDiskBackingsAndAllowSharing    = VirtualMachineRelocateDiskMoveOptions("moveAllDiskBackingsAndAllowSharing")
    +	VirtualMachineRelocateDiskMoveOptionsMoveAllDiskBackingsAndDisallowSharing = VirtualMachineRelocateDiskMoveOptions("moveAllDiskBackingsAndDisallowSharing")
    +	VirtualMachineRelocateDiskMoveOptionsMoveChildMostDiskBacking              = VirtualMachineRelocateDiskMoveOptions("moveChildMostDiskBacking")
    +	VirtualMachineRelocateDiskMoveOptionsCreateNewChildDiskBacking             = VirtualMachineRelocateDiskMoveOptions("createNewChildDiskBacking")
    +	VirtualMachineRelocateDiskMoveOptionsMoveAllDiskBackingsAndConsolidate     = VirtualMachineRelocateDiskMoveOptions("moveAllDiskBackingsAndConsolidate")
    +)
    +
    +func init() {
    +	t["VirtualMachineRelocateDiskMoveOptions"] = reflect.TypeOf((*VirtualMachineRelocateDiskMoveOptions)(nil)).Elem()
    +}
    +
    +type VirtualMachineRelocateTransformation string
    +
    +const (
    +	VirtualMachineRelocateTransformationFlat   = VirtualMachineRelocateTransformation("flat")
    +	VirtualMachineRelocateTransformationSparse = VirtualMachineRelocateTransformation("sparse")
    +)
    +
    +func init() {
    +	t["VirtualMachineRelocateTransformation"] = reflect.TypeOf((*VirtualMachineRelocateTransformation)(nil)).Elem()
    +}
    +
    +type VirtualMachineScsiPassthroughType string
    +
    +const (
    +	VirtualMachineScsiPassthroughTypeDisk      = VirtualMachineScsiPassthroughType("disk")
    +	VirtualMachineScsiPassthroughTypeTape      = VirtualMachineScsiPassthroughType("tape")
    +	VirtualMachineScsiPassthroughTypePrinter   = VirtualMachineScsiPassthroughType("printer")
    +	VirtualMachineScsiPassthroughTypeProcessor = VirtualMachineScsiPassthroughType("processor")
    +	VirtualMachineScsiPassthroughTypeWorm      = VirtualMachineScsiPassthroughType("worm")
    +	VirtualMachineScsiPassthroughTypeCdrom     = VirtualMachineScsiPassthroughType("cdrom")
    +	VirtualMachineScsiPassthroughTypeScanner   = VirtualMachineScsiPassthroughType("scanner")
    +	VirtualMachineScsiPassthroughTypeOptical   = VirtualMachineScsiPassthroughType("optical")
    +	VirtualMachineScsiPassthroughTypeMedia     = VirtualMachineScsiPassthroughType("media")
    +	VirtualMachineScsiPassthroughTypeCom       = VirtualMachineScsiPassthroughType("com")
    +	VirtualMachineScsiPassthroughTypeRaid      = VirtualMachineScsiPassthroughType("raid")
    +	VirtualMachineScsiPassthroughTypeUnknown   = VirtualMachineScsiPassthroughType("unknown")
    +)
    +
    +func init() {
    +	t["VirtualMachineScsiPassthroughType"] = reflect.TypeOf((*VirtualMachineScsiPassthroughType)(nil)).Elem()
    +}
    +
    +type VirtualMachineStandbyActionType string
    +
    +const (
    +	VirtualMachineStandbyActionTypeCheckpoint     = VirtualMachineStandbyActionType("checkpoint")
    +	VirtualMachineStandbyActionTypePowerOnSuspend = VirtualMachineStandbyActionType("powerOnSuspend")
    +)
    +
    +func init() {
    +	t["VirtualMachineStandbyActionType"] = reflect.TypeOf((*VirtualMachineStandbyActionType)(nil)).Elem()
    +}
    +
    +type VirtualMachineTargetInfoConfigurationTag string
    +
    +const (
    +	VirtualMachineTargetInfoConfigurationTagCompliant   = VirtualMachineTargetInfoConfigurationTag("compliant")
    +	VirtualMachineTargetInfoConfigurationTagClusterWide = VirtualMachineTargetInfoConfigurationTag("clusterWide")
    +)
    +
    +func init() {
    +	t["VirtualMachineTargetInfoConfigurationTag"] = reflect.TypeOf((*VirtualMachineTargetInfoConfigurationTag)(nil)).Elem()
    +}
    +
    +type VirtualMachineTicketType string
    +
    +const (
    +	VirtualMachineTicketTypeMks            = VirtualMachineTicketType("mks")
    +	VirtualMachineTicketTypeDevice         = VirtualMachineTicketType("device")
    +	VirtualMachineTicketTypeGuestControl   = VirtualMachineTicketType("guestControl")
    +	VirtualMachineTicketTypeWebmks         = VirtualMachineTicketType("webmks")
    +	VirtualMachineTicketTypeGuestIntegrity = VirtualMachineTicketType("guestIntegrity")
    +)
    +
    +func init() {
    +	t["VirtualMachineTicketType"] = reflect.TypeOf((*VirtualMachineTicketType)(nil)).Elem()
    +}
    +
    +type VirtualMachineToolsInstallType string
    +
    +const (
    +	VirtualMachineToolsInstallTypeGuestToolsTypeUnknown     = VirtualMachineToolsInstallType("guestToolsTypeUnknown")
    +	VirtualMachineToolsInstallTypeGuestToolsTypeMSI         = VirtualMachineToolsInstallType("guestToolsTypeMSI")
    +	VirtualMachineToolsInstallTypeGuestToolsTypeTar         = VirtualMachineToolsInstallType("guestToolsTypeTar")
    +	VirtualMachineToolsInstallTypeGuestToolsTypeOSP         = VirtualMachineToolsInstallType("guestToolsTypeOSP")
    +	VirtualMachineToolsInstallTypeGuestToolsTypeOpenVMTools = VirtualMachineToolsInstallType("guestToolsTypeOpenVMTools")
    +)
    +
    +func init() {
    +	t["VirtualMachineToolsInstallType"] = reflect.TypeOf((*VirtualMachineToolsInstallType)(nil)).Elem()
    +}
    +
    +type VirtualMachineToolsRunningStatus string
    +
    +const (
    +	VirtualMachineToolsRunningStatusGuestToolsNotRunning       = VirtualMachineToolsRunningStatus("guestToolsNotRunning")
    +	VirtualMachineToolsRunningStatusGuestToolsRunning          = VirtualMachineToolsRunningStatus("guestToolsRunning")
    +	VirtualMachineToolsRunningStatusGuestToolsExecutingScripts = VirtualMachineToolsRunningStatus("guestToolsExecutingScripts")
    +)
    +
    +func init() {
    +	t["VirtualMachineToolsRunningStatus"] = reflect.TypeOf((*VirtualMachineToolsRunningStatus)(nil)).Elem()
    +}
    +
    +type VirtualMachineToolsStatus string
    +
    +const (
    +	VirtualMachineToolsStatusToolsNotInstalled = VirtualMachineToolsStatus("toolsNotInstalled")
    +	VirtualMachineToolsStatusToolsNotRunning   = VirtualMachineToolsStatus("toolsNotRunning")
    +	VirtualMachineToolsStatusToolsOld          = VirtualMachineToolsStatus("toolsOld")
    +	VirtualMachineToolsStatusToolsOk           = VirtualMachineToolsStatus("toolsOk")
    +)
    +
    +func init() {
    +	t["VirtualMachineToolsStatus"] = reflect.TypeOf((*VirtualMachineToolsStatus)(nil)).Elem()
    +}
    +
    +type VirtualMachineToolsVersionStatus string
    +
    +const (
    +	VirtualMachineToolsVersionStatusGuestToolsNotInstalled = VirtualMachineToolsVersionStatus("guestToolsNotInstalled")
    +	VirtualMachineToolsVersionStatusGuestToolsNeedUpgrade  = VirtualMachineToolsVersionStatus("guestToolsNeedUpgrade")
    +	VirtualMachineToolsVersionStatusGuestToolsCurrent      = VirtualMachineToolsVersionStatus("guestToolsCurrent")
    +	VirtualMachineToolsVersionStatusGuestToolsUnmanaged    = VirtualMachineToolsVersionStatus("guestToolsUnmanaged")
    +	VirtualMachineToolsVersionStatusGuestToolsTooOld       = VirtualMachineToolsVersionStatus("guestToolsTooOld")
    +	VirtualMachineToolsVersionStatusGuestToolsSupportedOld = VirtualMachineToolsVersionStatus("guestToolsSupportedOld")
    +	VirtualMachineToolsVersionStatusGuestToolsSupportedNew = VirtualMachineToolsVersionStatus("guestToolsSupportedNew")
    +	VirtualMachineToolsVersionStatusGuestToolsTooNew       = VirtualMachineToolsVersionStatus("guestToolsTooNew")
    +	VirtualMachineToolsVersionStatusGuestToolsBlacklisted  = VirtualMachineToolsVersionStatus("guestToolsBlacklisted")
    +)
    +
    +func init() {
    +	t["VirtualMachineToolsVersionStatus"] = reflect.TypeOf((*VirtualMachineToolsVersionStatus)(nil)).Elem()
    +}
    +
    +type VirtualMachineUsbInfoFamily string
    +
    +const (
    +	VirtualMachineUsbInfoFamilyAudio           = VirtualMachineUsbInfoFamily("audio")
    +	VirtualMachineUsbInfoFamilyHid             = VirtualMachineUsbInfoFamily("hid")
    +	VirtualMachineUsbInfoFamilyHid_bootable    = VirtualMachineUsbInfoFamily("hid_bootable")
    +	VirtualMachineUsbInfoFamilyPhysical        = VirtualMachineUsbInfoFamily("physical")
    +	VirtualMachineUsbInfoFamilyCommunication   = VirtualMachineUsbInfoFamily("communication")
    +	VirtualMachineUsbInfoFamilyImaging         = VirtualMachineUsbInfoFamily("imaging")
    +	VirtualMachineUsbInfoFamilyPrinter         = VirtualMachineUsbInfoFamily("printer")
    +	VirtualMachineUsbInfoFamilyStorage         = VirtualMachineUsbInfoFamily("storage")
    +	VirtualMachineUsbInfoFamilyHub             = VirtualMachineUsbInfoFamily("hub")
    +	VirtualMachineUsbInfoFamilySmart_card      = VirtualMachineUsbInfoFamily("smart_card")
    +	VirtualMachineUsbInfoFamilySecurity        = VirtualMachineUsbInfoFamily("security")
    +	VirtualMachineUsbInfoFamilyVideo           = VirtualMachineUsbInfoFamily("video")
    +	VirtualMachineUsbInfoFamilyWireless        = VirtualMachineUsbInfoFamily("wireless")
    +	VirtualMachineUsbInfoFamilyBluetooth       = VirtualMachineUsbInfoFamily("bluetooth")
    +	VirtualMachineUsbInfoFamilyWusb            = VirtualMachineUsbInfoFamily("wusb")
    +	VirtualMachineUsbInfoFamilyPda             = VirtualMachineUsbInfoFamily("pda")
    +	VirtualMachineUsbInfoFamilyVendor_specific = VirtualMachineUsbInfoFamily("vendor_specific")
    +	VirtualMachineUsbInfoFamilyOther           = VirtualMachineUsbInfoFamily("other")
    +	VirtualMachineUsbInfoFamilyUnknownFamily   = VirtualMachineUsbInfoFamily("unknownFamily")
    +)
    +
    +func init() {
    +	t["VirtualMachineUsbInfoFamily"] = reflect.TypeOf((*VirtualMachineUsbInfoFamily)(nil)).Elem()
    +}
    +
    +type VirtualMachineUsbInfoSpeed string
    +
    +const (
    +	VirtualMachineUsbInfoSpeedLow          = VirtualMachineUsbInfoSpeed("low")
    +	VirtualMachineUsbInfoSpeedFull         = VirtualMachineUsbInfoSpeed("full")
    +	VirtualMachineUsbInfoSpeedHigh         = VirtualMachineUsbInfoSpeed("high")
    +	VirtualMachineUsbInfoSpeedSuperSpeed   = VirtualMachineUsbInfoSpeed("superSpeed")
    +	VirtualMachineUsbInfoSpeedUnknownSpeed = VirtualMachineUsbInfoSpeed("unknownSpeed")
    +)
    +
    +func init() {
    +	t["VirtualMachineUsbInfoSpeed"] = reflect.TypeOf((*VirtualMachineUsbInfoSpeed)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMCIDeviceAction string
    +
    +const (
    +	VirtualMachineVMCIDeviceActionAllow = VirtualMachineVMCIDeviceAction("allow")
    +	VirtualMachineVMCIDeviceActionDeny  = VirtualMachineVMCIDeviceAction("deny")
    +)
    +
    +func init() {
    +	t["VirtualMachineVMCIDeviceAction"] = reflect.TypeOf((*VirtualMachineVMCIDeviceAction)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMCIDeviceDirection string
    +
    +const (
    +	VirtualMachineVMCIDeviceDirectionGuest        = VirtualMachineVMCIDeviceDirection("guest")
    +	VirtualMachineVMCIDeviceDirectionHost         = VirtualMachineVMCIDeviceDirection("host")
    +	VirtualMachineVMCIDeviceDirectionAnyDirection = VirtualMachineVMCIDeviceDirection("anyDirection")
    +)
    +
    +func init() {
    +	t["VirtualMachineVMCIDeviceDirection"] = reflect.TypeOf((*VirtualMachineVMCIDeviceDirection)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMCIDeviceProtocol string
    +
    +const (
    +	VirtualMachineVMCIDeviceProtocolHypervisor  = VirtualMachineVMCIDeviceProtocol("hypervisor")
    +	VirtualMachineVMCIDeviceProtocolDoorbell    = VirtualMachineVMCIDeviceProtocol("doorbell")
    +	VirtualMachineVMCIDeviceProtocolQueuepair   = VirtualMachineVMCIDeviceProtocol("queuepair")
    +	VirtualMachineVMCIDeviceProtocolDatagram    = VirtualMachineVMCIDeviceProtocol("datagram")
    +	VirtualMachineVMCIDeviceProtocolStream      = VirtualMachineVMCIDeviceProtocol("stream")
    +	VirtualMachineVMCIDeviceProtocolAnyProtocol = VirtualMachineVMCIDeviceProtocol("anyProtocol")
    +)
    +
    +func init() {
    +	t["VirtualMachineVMCIDeviceProtocol"] = reflect.TypeOf((*VirtualMachineVMCIDeviceProtocol)(nil)).Elem()
    +}
    +
    +type VirtualMachineVideoCardUse3dRenderer string
    +
    +const (
    +	VirtualMachineVideoCardUse3dRendererAutomatic = VirtualMachineVideoCardUse3dRenderer("automatic")
    +	VirtualMachineVideoCardUse3dRendererSoftware  = VirtualMachineVideoCardUse3dRenderer("software")
    +	VirtualMachineVideoCardUse3dRendererHardware  = VirtualMachineVideoCardUse3dRenderer("hardware")
    +)
    +
    +func init() {
    +	t["VirtualMachineVideoCardUse3dRenderer"] = reflect.TypeOf((*VirtualMachineVideoCardUse3dRenderer)(nil)).Elem()
    +}
    +
    +type VirtualMachineWindowsQuiesceSpecVssBackupContext string
    +
    +const (
    +	VirtualMachineWindowsQuiesceSpecVssBackupContextCtx_auto              = VirtualMachineWindowsQuiesceSpecVssBackupContext("ctx_auto")
    +	VirtualMachineWindowsQuiesceSpecVssBackupContextCtx_backup            = VirtualMachineWindowsQuiesceSpecVssBackupContext("ctx_backup")
    +	VirtualMachineWindowsQuiesceSpecVssBackupContextCtx_file_share_backup = VirtualMachineWindowsQuiesceSpecVssBackupContext("ctx_file_share_backup")
    +)
    +
    +func init() {
    +	t["VirtualMachineWindowsQuiesceSpecVssBackupContext"] = reflect.TypeOf((*VirtualMachineWindowsQuiesceSpecVssBackupContext)(nil)).Elem()
    +}
    +
    +type VirtualPointingDeviceHostChoice string
    +
    +const (
    +	VirtualPointingDeviceHostChoiceAutodetect           = VirtualPointingDeviceHostChoice("autodetect")
    +	VirtualPointingDeviceHostChoiceIntellimouseExplorer = VirtualPointingDeviceHostChoice("intellimouseExplorer")
    +	VirtualPointingDeviceHostChoiceIntellimousePs2      = VirtualPointingDeviceHostChoice("intellimousePs2")
    +	VirtualPointingDeviceHostChoiceLogitechMouseman     = VirtualPointingDeviceHostChoice("logitechMouseman")
    +	VirtualPointingDeviceHostChoiceMicrosoft_serial     = VirtualPointingDeviceHostChoice("microsoft_serial")
    +	VirtualPointingDeviceHostChoiceMouseSystems         = VirtualPointingDeviceHostChoice("mouseSystems")
    +	VirtualPointingDeviceHostChoiceMousemanSerial       = VirtualPointingDeviceHostChoice("mousemanSerial")
    +	VirtualPointingDeviceHostChoicePs2                  = VirtualPointingDeviceHostChoice("ps2")
    +)
    +
    +func init() {
    +	t["VirtualPointingDeviceHostChoice"] = reflect.TypeOf((*VirtualPointingDeviceHostChoice)(nil)).Elem()
    +}
    +
    +type VirtualSCSISharing string
    +
    +const (
    +	VirtualSCSISharingNoSharing       = VirtualSCSISharing("noSharing")
    +	VirtualSCSISharingVirtualSharing  = VirtualSCSISharing("virtualSharing")
    +	VirtualSCSISharingPhysicalSharing = VirtualSCSISharing("physicalSharing")
    +)
    +
    +func init() {
    +	t["VirtualSCSISharing"] = reflect.TypeOf((*VirtualSCSISharing)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortEndPoint string
    +
    +const (
    +	VirtualSerialPortEndPointClient = VirtualSerialPortEndPoint("client")
    +	VirtualSerialPortEndPointServer = VirtualSerialPortEndPoint("server")
    +)
    +
    +func init() {
    +	t["VirtualSerialPortEndPoint"] = reflect.TypeOf((*VirtualSerialPortEndPoint)(nil)).Elem()
    +}
    +
    +type VirtualVmxnet3VrdmaOptionDeviceProtocols string
    +
    +const (
    +	VirtualVmxnet3VrdmaOptionDeviceProtocolsRocev1 = VirtualVmxnet3VrdmaOptionDeviceProtocols("rocev1")
    +	VirtualVmxnet3VrdmaOptionDeviceProtocolsRocev2 = VirtualVmxnet3VrdmaOptionDeviceProtocols("rocev2")
    +)
    +
    +func init() {
    +	t["VirtualVmxnet3VrdmaOptionDeviceProtocols"] = reflect.TypeOf((*VirtualVmxnet3VrdmaOptionDeviceProtocols)(nil)).Elem()
    +}
    +
    +type VmDasBeingResetEventReasonCode string
    +
    +const (
    +	VmDasBeingResetEventReasonCodeVmtoolsHeartbeatFailure  = VmDasBeingResetEventReasonCode("vmtoolsHeartbeatFailure")
    +	VmDasBeingResetEventReasonCodeAppHeartbeatFailure      = VmDasBeingResetEventReasonCode("appHeartbeatFailure")
    +	VmDasBeingResetEventReasonCodeAppImmediateResetRequest = VmDasBeingResetEventReasonCode("appImmediateResetRequest")
    +	VmDasBeingResetEventReasonCodeVmcpResetApdCleared      = VmDasBeingResetEventReasonCode("vmcpResetApdCleared")
    +)
    +
    +func init() {
    +	t["VmDasBeingResetEventReasonCode"] = reflect.TypeOf((*VmDasBeingResetEventReasonCode)(nil)).Elem()
    +}
    +
    +type VmFailedStartingSecondaryEventFailureReason string
    +
    +const (
    +	VmFailedStartingSecondaryEventFailureReasonIncompatibleHost = VmFailedStartingSecondaryEventFailureReason("incompatibleHost")
    +	VmFailedStartingSecondaryEventFailureReasonLoginFailed      = VmFailedStartingSecondaryEventFailureReason("loginFailed")
    +	VmFailedStartingSecondaryEventFailureReasonRegisterVmFailed = VmFailedStartingSecondaryEventFailureReason("registerVmFailed")
    +	VmFailedStartingSecondaryEventFailureReasonMigrateFailed    = VmFailedStartingSecondaryEventFailureReason("migrateFailed")
    +)
    +
    +func init() {
    +	t["VmFailedStartingSecondaryEventFailureReason"] = reflect.TypeOf((*VmFailedStartingSecondaryEventFailureReason)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceConfigIssueReasonForIssue string
    +
    +const (
    +	VmFaultToleranceConfigIssueReasonForIssueHaNotEnabled                   = VmFaultToleranceConfigIssueReasonForIssue("haNotEnabled")
    +	VmFaultToleranceConfigIssueReasonForIssueMoreThanOneSecondary           = VmFaultToleranceConfigIssueReasonForIssue("moreThanOneSecondary")
    +	VmFaultToleranceConfigIssueReasonForIssueRecordReplayNotSupported       = VmFaultToleranceConfigIssueReasonForIssue("recordReplayNotSupported")
    +	VmFaultToleranceConfigIssueReasonForIssueReplayNotSupported             = VmFaultToleranceConfigIssueReasonForIssue("replayNotSupported")
    +	VmFaultToleranceConfigIssueReasonForIssueTemplateVm                     = VmFaultToleranceConfigIssueReasonForIssue("templateVm")
    +	VmFaultToleranceConfigIssueReasonForIssueMultipleVCPU                   = VmFaultToleranceConfigIssueReasonForIssue("multipleVCPU")
    +	VmFaultToleranceConfigIssueReasonForIssueHostInactive                   = VmFaultToleranceConfigIssueReasonForIssue("hostInactive")
    +	VmFaultToleranceConfigIssueReasonForIssueFtUnsupportedHardware          = VmFaultToleranceConfigIssueReasonForIssue("ftUnsupportedHardware")
    +	VmFaultToleranceConfigIssueReasonForIssueFtUnsupportedProduct           = VmFaultToleranceConfigIssueReasonForIssue("ftUnsupportedProduct")
    +	VmFaultToleranceConfigIssueReasonForIssueMissingVMotionNic              = VmFaultToleranceConfigIssueReasonForIssue("missingVMotionNic")
    +	VmFaultToleranceConfigIssueReasonForIssueMissingFTLoggingNic            = VmFaultToleranceConfigIssueReasonForIssue("missingFTLoggingNic")
    +	VmFaultToleranceConfigIssueReasonForIssueThinDisk                       = VmFaultToleranceConfigIssueReasonForIssue("thinDisk")
    +	VmFaultToleranceConfigIssueReasonForIssueVerifySSLCertificateFlagNotSet = VmFaultToleranceConfigIssueReasonForIssue("verifySSLCertificateFlagNotSet")
    +	VmFaultToleranceConfigIssueReasonForIssueHasSnapshots                   = VmFaultToleranceConfigIssueReasonForIssue("hasSnapshots")
    +	VmFaultToleranceConfigIssueReasonForIssueNoConfig                       = VmFaultToleranceConfigIssueReasonForIssue("noConfig")
    +	VmFaultToleranceConfigIssueReasonForIssueFtSecondaryVm                  = VmFaultToleranceConfigIssueReasonForIssue("ftSecondaryVm")
    +	VmFaultToleranceConfigIssueReasonForIssueHasLocalDisk                   = VmFaultToleranceConfigIssueReasonForIssue("hasLocalDisk")
    +	VmFaultToleranceConfigIssueReasonForIssueEsxAgentVm                     = VmFaultToleranceConfigIssueReasonForIssue("esxAgentVm")
    +	VmFaultToleranceConfigIssueReasonForIssueVideo3dEnabled                 = VmFaultToleranceConfigIssueReasonForIssue("video3dEnabled")
    +	VmFaultToleranceConfigIssueReasonForIssueHasUnsupportedDisk             = VmFaultToleranceConfigIssueReasonForIssue("hasUnsupportedDisk")
    +	VmFaultToleranceConfigIssueReasonForIssueInsufficientBandwidth          = VmFaultToleranceConfigIssueReasonForIssue("insufficientBandwidth")
    +	VmFaultToleranceConfigIssueReasonForIssueHasNestedHVConfiguration       = VmFaultToleranceConfigIssueReasonForIssue("hasNestedHVConfiguration")
    +	VmFaultToleranceConfigIssueReasonForIssueHasVFlashConfiguration         = VmFaultToleranceConfigIssueReasonForIssue("hasVFlashConfiguration")
    +	VmFaultToleranceConfigIssueReasonForIssueUnsupportedProduct             = VmFaultToleranceConfigIssueReasonForIssue("unsupportedProduct")
    +	VmFaultToleranceConfigIssueReasonForIssueCpuHvUnsupported               = VmFaultToleranceConfigIssueReasonForIssue("cpuHvUnsupported")
    +	VmFaultToleranceConfigIssueReasonForIssueCpuHwmmuUnsupported            = VmFaultToleranceConfigIssueReasonForIssue("cpuHwmmuUnsupported")
    +	VmFaultToleranceConfigIssueReasonForIssueCpuHvDisabled                  = VmFaultToleranceConfigIssueReasonForIssue("cpuHvDisabled")
    +	VmFaultToleranceConfigIssueReasonForIssueHasEFIFirmware                 = VmFaultToleranceConfigIssueReasonForIssue("hasEFIFirmware")
    +	VmFaultToleranceConfigIssueReasonForIssueTooManyVCPUs                   = VmFaultToleranceConfigIssueReasonForIssue("tooManyVCPUs")
    +	VmFaultToleranceConfigIssueReasonForIssueTooMuchMemory                  = VmFaultToleranceConfigIssueReasonForIssue("tooMuchMemory")
    +)
    +
    +func init() {
    +	t["VmFaultToleranceConfigIssueReasonForIssue"] = reflect.TypeOf((*VmFaultToleranceConfigIssueReasonForIssue)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceInvalidFileBackingDeviceType string
    +
    +const (
    +	VmFaultToleranceInvalidFileBackingDeviceTypeVirtualFloppy       = VmFaultToleranceInvalidFileBackingDeviceType("virtualFloppy")
    +	VmFaultToleranceInvalidFileBackingDeviceTypeVirtualCdrom        = VmFaultToleranceInvalidFileBackingDeviceType("virtualCdrom")
    +	VmFaultToleranceInvalidFileBackingDeviceTypeVirtualSerialPort   = VmFaultToleranceInvalidFileBackingDeviceType("virtualSerialPort")
    +	VmFaultToleranceInvalidFileBackingDeviceTypeVirtualParallelPort = VmFaultToleranceInvalidFileBackingDeviceType("virtualParallelPort")
    +	VmFaultToleranceInvalidFileBackingDeviceTypeVirtualDisk         = VmFaultToleranceInvalidFileBackingDeviceType("virtualDisk")
    +)
    +
    +func init() {
    +	t["VmFaultToleranceInvalidFileBackingDeviceType"] = reflect.TypeOf((*VmFaultToleranceInvalidFileBackingDeviceType)(nil)).Elem()
    +}
    +
    +type VmShutdownOnIsolationEventOperation string
    +
    +const (
    +	VmShutdownOnIsolationEventOperationShutdown   = VmShutdownOnIsolationEventOperation("shutdown")
    +	VmShutdownOnIsolationEventOperationPoweredOff = VmShutdownOnIsolationEventOperation("poweredOff")
    +)
    +
    +func init() {
    +	t["VmShutdownOnIsolationEventOperation"] = reflect.TypeOf((*VmShutdownOnIsolationEventOperation)(nil)).Elem()
    +}
    +
    +type VmwareDistributedVirtualSwitchPvlanPortType string
    +
    +const (
    +	VmwareDistributedVirtualSwitchPvlanPortTypePromiscuous = VmwareDistributedVirtualSwitchPvlanPortType("promiscuous")
    +	VmwareDistributedVirtualSwitchPvlanPortTypeIsolated    = VmwareDistributedVirtualSwitchPvlanPortType("isolated")
    +	VmwareDistributedVirtualSwitchPvlanPortTypeCommunity   = VmwareDistributedVirtualSwitchPvlanPortType("community")
    +)
    +
    +func init() {
    +	t["VmwareDistributedVirtualSwitchPvlanPortType"] = reflect.TypeOf((*VmwareDistributedVirtualSwitchPvlanPortType)(nil)).Elem()
    +}
    +
    +type VsanDiskIssueType string
    +
    +const (
    +	VsanDiskIssueTypeNonExist      = VsanDiskIssueType("nonExist")
    +	VsanDiskIssueTypeStampMismatch = VsanDiskIssueType("stampMismatch")
    +	VsanDiskIssueTypeUnknown       = VsanDiskIssueType("unknown")
    +)
    +
    +func init() {
    +	t["VsanDiskIssueType"] = reflect.TypeOf((*VsanDiskIssueType)(nil)).Elem()
    +}
    +
    +type VsanHostDecommissionModeObjectAction string
    +
    +const (
    +	VsanHostDecommissionModeObjectActionNoAction                  = VsanHostDecommissionModeObjectAction("noAction")
    +	VsanHostDecommissionModeObjectActionEnsureObjectAccessibility = VsanHostDecommissionModeObjectAction("ensureObjectAccessibility")
    +	VsanHostDecommissionModeObjectActionEvacuateAllData           = VsanHostDecommissionModeObjectAction("evacuateAllData")
    +)
    +
    +func init() {
    +	t["VsanHostDecommissionModeObjectAction"] = reflect.TypeOf((*VsanHostDecommissionModeObjectAction)(nil)).Elem()
    +}
    +
    +type VsanHostDiskResultState string
    +
    +const (
    +	VsanHostDiskResultStateInUse      = VsanHostDiskResultState("inUse")
    +	VsanHostDiskResultStateEligible   = VsanHostDiskResultState("eligible")
    +	VsanHostDiskResultStateIneligible = VsanHostDiskResultState("ineligible")
    +)
    +
    +func init() {
    +	t["VsanHostDiskResultState"] = reflect.TypeOf((*VsanHostDiskResultState)(nil)).Elem()
    +}
    +
    +type VsanHostHealthState string
    +
    +const (
    +	VsanHostHealthStateUnknown   = VsanHostHealthState("unknown")
    +	VsanHostHealthStateHealthy   = VsanHostHealthState("healthy")
    +	VsanHostHealthStateUnhealthy = VsanHostHealthState("unhealthy")
    +)
    +
    +func init() {
    +	t["VsanHostHealthState"] = reflect.TypeOf((*VsanHostHealthState)(nil)).Elem()
    +}
    +
    +type VsanHostNodeState string
    +
    +const (
    +	VsanHostNodeStateError                   = VsanHostNodeState("error")
    +	VsanHostNodeStateDisabled                = VsanHostNodeState("disabled")
    +	VsanHostNodeStateAgent                   = VsanHostNodeState("agent")
    +	VsanHostNodeStateMaster                  = VsanHostNodeState("master")
    +	VsanHostNodeStateBackup                  = VsanHostNodeState("backup")
    +	VsanHostNodeStateStarting                = VsanHostNodeState("starting")
    +	VsanHostNodeStateStopping                = VsanHostNodeState("stopping")
    +	VsanHostNodeStateEnteringMaintenanceMode = VsanHostNodeState("enteringMaintenanceMode")
    +	VsanHostNodeStateExitingMaintenanceMode  = VsanHostNodeState("exitingMaintenanceMode")
    +	VsanHostNodeStateDecommissioning         = VsanHostNodeState("decommissioning")
    +)
    +
    +func init() {
    +	t["VsanHostNodeState"] = reflect.TypeOf((*VsanHostNodeState)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemUpgradeHistoryDiskGroupOpType string
    +
    +const (
    +	VsanUpgradeSystemUpgradeHistoryDiskGroupOpTypeAdd    = VsanUpgradeSystemUpgradeHistoryDiskGroupOpType("add")
    +	VsanUpgradeSystemUpgradeHistoryDiskGroupOpTypeRemove = VsanUpgradeSystemUpgradeHistoryDiskGroupOpType("remove")
    +)
    +
    +func init() {
    +	t["VsanUpgradeSystemUpgradeHistoryDiskGroupOpType"] = reflect.TypeOf((*VsanUpgradeSystemUpgradeHistoryDiskGroupOpType)(nil)).Elem()
    +}
    +
    +type WeekOfMonth string
    +
    +const (
    +	WeekOfMonthFirst  = WeekOfMonth("first")
    +	WeekOfMonthSecond = WeekOfMonth("second")
    +	WeekOfMonthThird  = WeekOfMonth("third")
    +	WeekOfMonthFourth = WeekOfMonth("fourth")
    +	WeekOfMonthLast   = WeekOfMonth("last")
    +)
    +
    +func init() {
    +	t["WeekOfMonth"] = reflect.TypeOf((*WeekOfMonth)(nil)).Elem()
    +}
    +
    +type WillLoseHAProtectionResolution string
    +
    +const (
    +	WillLoseHAProtectionResolutionSvmotion = WillLoseHAProtectionResolution("svmotion")
    +	WillLoseHAProtectionResolutionRelocate = WillLoseHAProtectionResolution("relocate")
    +)
    +
    +func init() {
    +	t["WillLoseHAProtectionResolution"] = reflect.TypeOf((*WillLoseHAProtectionResolution)(nil)).Elem()
    +}
    +
    +type VslmVStorageObjectControlFlag string
    +
    +const (
    +	VslmVStorageObjectControlFlagKeepAfterDeleteVm          = VslmVStorageObjectControlFlag("keepAfterDeleteVm")
    +	VslmVStorageObjectControlFlagDisableRelocation          = VslmVStorageObjectControlFlag("disableRelocation")
    +	VslmVStorageObjectControlFlagEnableChangedBlockTracking = VslmVStorageObjectControlFlag("enableChangedBlockTracking")
    +)
    +
    +func init() {
    +	t["vslmVStorageObjectControlFlag"] = reflect.TypeOf((*VslmVStorageObjectControlFlag)(nil)).Elem()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/fault.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/fault.go
    new file mode 100644
    index 00000000000..c2503fa5cb7
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/fault.go
    @@ -0,0 +1,32 @@
    +/*
    +Copyright (c) 2015 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package types
    +
    +type HasFault interface {
    +	Fault() BaseMethodFault
    +}
    +
    +func IsFileNotFound(err error) bool {
    +	if f, ok := err.(HasFault); ok {
    +		switch f.Fault().(type) {
    +		case *FileNotFound:
    +			return true
    +		}
    +	}
    +
    +	return false
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/helpers.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/helpers.go
    new file mode 100644
    index 00000000000..7ccfd29b634
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/helpers.go
    @@ -0,0 +1,95 @@
    +/*
    +Copyright (c) 2015-2017 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package types
    +
    +import (
    +	"reflect"
    +	"strings"
    +	"time"
    +)
    +
    +func NewBool(v bool) *bool {
    +	return &v
    +}
    +
    +func NewInt32(v int32) *int32 {
    +	return &v
    +}
    +
    +func NewInt64(v int64) *int64 {
    +	return &v
    +}
    +
    +func NewTime(v time.Time) *time.Time {
    +	return &v
    +}
    +
    +func NewReference(r ManagedObjectReference) *ManagedObjectReference {
    +	return &r
    +}
    +
    +func (r ManagedObjectReference) Reference() ManagedObjectReference {
    +	return r
    +}
    +
    +func (r ManagedObjectReference) String() string {
    +	return strings.Join([]string{r.Type, r.Value}, ":")
    +}
    +
    +func (r *ManagedObjectReference) FromString(o string) bool {
    +	s := strings.SplitN(o, ":", 2)
    +
    +	if len(s) < 2 {
    +		return false
    +	}
    +
    +	r.Type = s[0]
    +	r.Value = s[1]
    +
    +	return true
    +}
    +
    +func (c *PerfCounterInfo) Name() string {
    +	return c.GroupInfo.GetElementDescription().Key + "." + c.NameInfo.GetElementDescription().Key + "." + string(c.RollupType)
    +}
    +
    +func defaultResourceAllocationInfo() ResourceAllocationInfo {
    +	return ResourceAllocationInfo{
    +		Reservation:           NewInt64(0),
    +		ExpandableReservation: NewBool(true),
    +		Limit: NewInt64(-1),
    +		Shares: &SharesInfo{
    +			Level: SharesLevelNormal,
    +		},
    +	}
    +}
    +
    +// DefaultResourceConfigSpec returns a ResourceConfigSpec populated with the same default field values as vCenter.
    +// Note that the wsdl marks these fields as optional, but they are required to be set when creating a resource pool.
    +// They are only optional when updating a resource pool.
    +func DefaultResourceConfigSpec() ResourceConfigSpec {
    +	return ResourceConfigSpec{
    +		CpuAllocation:    defaultResourceAllocationInfo(),
    +		MemoryAllocation: defaultResourceAllocationInfo(),
    +	}
    +}
    +
    +func init() {
    +	// Known 6.5 issue where this event type is sent even though it is internal.
    +	// This workaround allows us to unmarshal and avoid NPEs.
    +	t["HostSubSpecificationUpdateEvent"] = reflect.TypeOf((*HostEvent)(nil)).Elem()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/if.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/if.go
    new file mode 100644
    index 00000000000..89d02f234bb
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/if.go
    @@ -0,0 +1,3449 @@
    +/*
    +Copyright (c) 2014-2018 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package types
    +
    +import "reflect"
    +
    +func (b *Action) GetAction() *Action { return b }
    +
    +type BaseAction interface {
    +	GetAction() *Action
    +}
    +
    +func init() {
    +	t["BaseAction"] = reflect.TypeOf((*Action)(nil)).Elem()
    +}
    +
    +func (b *ActiveDirectoryFault) GetActiveDirectoryFault() *ActiveDirectoryFault { return b }
    +
    +type BaseActiveDirectoryFault interface {
    +	GetActiveDirectoryFault() *ActiveDirectoryFault
    +}
    +
    +func init() {
    +	t["BaseActiveDirectoryFault"] = reflect.TypeOf((*ActiveDirectoryFault)(nil)).Elem()
    +}
    +
    +func (b *AlarmAction) GetAlarmAction() *AlarmAction { return b }
    +
    +type BaseAlarmAction interface {
    +	GetAlarmAction() *AlarmAction
    +}
    +
    +func init() {
    +	t["BaseAlarmAction"] = reflect.TypeOf((*AlarmAction)(nil)).Elem()
    +}
    +
    +func (b *AlarmEvent) GetAlarmEvent() *AlarmEvent { return b }
    +
    +type BaseAlarmEvent interface {
    +	GetAlarmEvent() *AlarmEvent
    +}
    +
    +func init() {
    +	t["BaseAlarmEvent"] = reflect.TypeOf((*AlarmEvent)(nil)).Elem()
    +}
    +
    +func (b *AlarmExpression) GetAlarmExpression() *AlarmExpression { return b }
    +
    +type BaseAlarmExpression interface {
    +	GetAlarmExpression() *AlarmExpression
    +}
    +
    +func init() {
    +	t["BaseAlarmExpression"] = reflect.TypeOf((*AlarmExpression)(nil)).Elem()
    +}
    +
    +func (b *AlarmSpec) GetAlarmSpec() *AlarmSpec { return b }
    +
    +type BaseAlarmSpec interface {
    +	GetAlarmSpec() *AlarmSpec
    +}
    +
    +func init() {
    +	t["BaseAlarmSpec"] = reflect.TypeOf((*AlarmSpec)(nil)).Elem()
    +}
    +
    +func (b *AnswerFileCreateSpec) GetAnswerFileCreateSpec() *AnswerFileCreateSpec { return b }
    +
    +type BaseAnswerFileCreateSpec interface {
    +	GetAnswerFileCreateSpec() *AnswerFileCreateSpec
    +}
    +
    +func init() {
    +	t["BaseAnswerFileCreateSpec"] = reflect.TypeOf((*AnswerFileCreateSpec)(nil)).Elem()
    +}
    +
    +func (b *ApplyProfile) GetApplyProfile() *ApplyProfile { return b }
    +
    +type BaseApplyProfile interface {
    +	GetApplyProfile() *ApplyProfile
    +}
    +
    +func init() {
    +	t["BaseApplyProfile"] = reflect.TypeOf((*ApplyProfile)(nil)).Elem()
    +}
    +
    +func (b *ArrayUpdateSpec) GetArrayUpdateSpec() *ArrayUpdateSpec { return b }
    +
    +type BaseArrayUpdateSpec interface {
    +	GetArrayUpdateSpec() *ArrayUpdateSpec
    +}
    +
    +func init() {
    +	t["BaseArrayUpdateSpec"] = reflect.TypeOf((*ArrayUpdateSpec)(nil)).Elem()
    +}
    +
    +func (b *AuthorizationEvent) GetAuthorizationEvent() *AuthorizationEvent { return b }
    +
    +type BaseAuthorizationEvent interface {
    +	GetAuthorizationEvent() *AuthorizationEvent
    +}
    +
    +func init() {
    +	t["BaseAuthorizationEvent"] = reflect.TypeOf((*AuthorizationEvent)(nil)).Elem()
    +}
    +
    +func (b *BaseConfigInfo) GetBaseConfigInfo() *BaseConfigInfo { return b }
    +
    +type BaseBaseConfigInfo interface {
    +	GetBaseConfigInfo() *BaseConfigInfo
    +}
    +
    +func init() {
    +	t["BaseBaseConfigInfo"] = reflect.TypeOf((*BaseConfigInfo)(nil)).Elem()
    +}
    +
    +func (b *BaseConfigInfoBackingInfo) GetBaseConfigInfoBackingInfo() *BaseConfigInfoBackingInfo {
    +	return b
    +}
    +
    +type BaseBaseConfigInfoBackingInfo interface {
    +	GetBaseConfigInfoBackingInfo() *BaseConfigInfoBackingInfo
    +}
    +
    +func init() {
    +	t["BaseBaseConfigInfoBackingInfo"] = reflect.TypeOf((*BaseConfigInfoBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *BaseConfigInfoFileBackingInfo) GetBaseConfigInfoFileBackingInfo() *BaseConfigInfoFileBackingInfo {
    +	return b
    +}
    +
    +type BaseBaseConfigInfoFileBackingInfo interface {
    +	GetBaseConfigInfoFileBackingInfo() *BaseConfigInfoFileBackingInfo
    +}
    +
    +func init() {
    +	t["BaseBaseConfigInfoFileBackingInfo"] = reflect.TypeOf((*BaseConfigInfoFileBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *CannotAccessNetwork) GetCannotAccessNetwork() *CannotAccessNetwork { return b }
    +
    +type BaseCannotAccessNetwork interface {
    +	GetCannotAccessNetwork() *CannotAccessNetwork
    +}
    +
    +func init() {
    +	t["BaseCannotAccessNetwork"] = reflect.TypeOf((*CannotAccessNetwork)(nil)).Elem()
    +}
    +
    +func (b *CannotAccessVmComponent) GetCannotAccessVmComponent() *CannotAccessVmComponent { return b }
    +
    +type BaseCannotAccessVmComponent interface {
    +	GetCannotAccessVmComponent() *CannotAccessVmComponent
    +}
    +
    +func init() {
    +	t["BaseCannotAccessVmComponent"] = reflect.TypeOf((*CannotAccessVmComponent)(nil)).Elem()
    +}
    +
    +func (b *CannotAccessVmDevice) GetCannotAccessVmDevice() *CannotAccessVmDevice { return b }
    +
    +type BaseCannotAccessVmDevice interface {
    +	GetCannotAccessVmDevice() *CannotAccessVmDevice
    +}
    +
    +func init() {
    +	t["BaseCannotAccessVmDevice"] = reflect.TypeOf((*CannotAccessVmDevice)(nil)).Elem()
    +}
    +
    +func (b *CannotAccessVmDisk) GetCannotAccessVmDisk() *CannotAccessVmDisk { return b }
    +
    +type BaseCannotAccessVmDisk interface {
    +	GetCannotAccessVmDisk() *CannotAccessVmDisk
    +}
    +
    +func init() {
    +	t["BaseCannotAccessVmDisk"] = reflect.TypeOf((*CannotAccessVmDisk)(nil)).Elem()
    +}
    +
    +func (b *CannotMoveVsanEnabledHost) GetCannotMoveVsanEnabledHost() *CannotMoveVsanEnabledHost {
    +	return b
    +}
    +
    +type BaseCannotMoveVsanEnabledHost interface {
    +	GetCannotMoveVsanEnabledHost() *CannotMoveVsanEnabledHost
    +}
    +
    +func init() {
    +	t["BaseCannotMoveVsanEnabledHost"] = reflect.TypeOf((*CannotMoveVsanEnabledHost)(nil)).Elem()
    +}
    +
    +func (b *ClusterAction) GetClusterAction() *ClusterAction { return b }
    +
    +type BaseClusterAction interface {
    +	GetClusterAction() *ClusterAction
    +}
    +
    +func init() {
    +	t["BaseClusterAction"] = reflect.TypeOf((*ClusterAction)(nil)).Elem()
    +}
    +
    +func (b *ClusterDasAdmissionControlInfo) GetClusterDasAdmissionControlInfo() *ClusterDasAdmissionControlInfo {
    +	return b
    +}
    +
    +type BaseClusterDasAdmissionControlInfo interface {
    +	GetClusterDasAdmissionControlInfo() *ClusterDasAdmissionControlInfo
    +}
    +
    +func init() {
    +	t["BaseClusterDasAdmissionControlInfo"] = reflect.TypeOf((*ClusterDasAdmissionControlInfo)(nil)).Elem()
    +}
    +
    +func (b *ClusterDasAdmissionControlPolicy) GetClusterDasAdmissionControlPolicy() *ClusterDasAdmissionControlPolicy {
    +	return b
    +}
    +
    +type BaseClusterDasAdmissionControlPolicy interface {
    +	GetClusterDasAdmissionControlPolicy() *ClusterDasAdmissionControlPolicy
    +}
    +
    +func init() {
    +	t["BaseClusterDasAdmissionControlPolicy"] = reflect.TypeOf((*ClusterDasAdmissionControlPolicy)(nil)).Elem()
    +}
    +
    +func (b *ClusterDasAdvancedRuntimeInfo) GetClusterDasAdvancedRuntimeInfo() *ClusterDasAdvancedRuntimeInfo {
    +	return b
    +}
    +
    +type BaseClusterDasAdvancedRuntimeInfo interface {
    +	GetClusterDasAdvancedRuntimeInfo() *ClusterDasAdvancedRuntimeInfo
    +}
    +
    +func init() {
    +	t["BaseClusterDasAdvancedRuntimeInfo"] = reflect.TypeOf((*ClusterDasAdvancedRuntimeInfo)(nil)).Elem()
    +}
    +
    +func (b *ClusterDasData) GetClusterDasData() *ClusterDasData { return b }
    +
    +type BaseClusterDasData interface {
    +	GetClusterDasData() *ClusterDasData
    +}
    +
    +func init() {
    +	t["BaseClusterDasData"] = reflect.TypeOf((*ClusterDasData)(nil)).Elem()
    +}
    +
    +func (b *ClusterDasHostInfo) GetClusterDasHostInfo() *ClusterDasHostInfo { return b }
    +
    +type BaseClusterDasHostInfo interface {
    +	GetClusterDasHostInfo() *ClusterDasHostInfo
    +}
    +
    +func init() {
    +	t["BaseClusterDasHostInfo"] = reflect.TypeOf((*ClusterDasHostInfo)(nil)).Elem()
    +}
    +
    +func (b *ClusterDrsFaultsFaultsByVm) GetClusterDrsFaultsFaultsByVm() *ClusterDrsFaultsFaultsByVm {
    +	return b
    +}
    +
    +type BaseClusterDrsFaultsFaultsByVm interface {
    +	GetClusterDrsFaultsFaultsByVm() *ClusterDrsFaultsFaultsByVm
    +}
    +
    +func init() {
    +	t["BaseClusterDrsFaultsFaultsByVm"] = reflect.TypeOf((*ClusterDrsFaultsFaultsByVm)(nil)).Elem()
    +}
    +
    +func (b *ClusterEvent) GetClusterEvent() *ClusterEvent { return b }
    +
    +type BaseClusterEvent interface {
    +	GetClusterEvent() *ClusterEvent
    +}
    +
    +func init() {
    +	t["BaseClusterEvent"] = reflect.TypeOf((*ClusterEvent)(nil)).Elem()
    +}
    +
    +func (b *ClusterGroupInfo) GetClusterGroupInfo() *ClusterGroupInfo { return b }
    +
    +type BaseClusterGroupInfo interface {
    +	GetClusterGroupInfo() *ClusterGroupInfo
    +}
    +
    +func init() {
    +	t["BaseClusterGroupInfo"] = reflect.TypeOf((*ClusterGroupInfo)(nil)).Elem()
    +}
    +
    +func (b *ClusterOvercommittedEvent) GetClusterOvercommittedEvent() *ClusterOvercommittedEvent {
    +	return b
    +}
    +
    +type BaseClusterOvercommittedEvent interface {
    +	GetClusterOvercommittedEvent() *ClusterOvercommittedEvent
    +}
    +
    +func init() {
    +	t["BaseClusterOvercommittedEvent"] = reflect.TypeOf((*ClusterOvercommittedEvent)(nil)).Elem()
    +}
    +
    +func (b *ClusterProfileConfigSpec) GetClusterProfileConfigSpec() *ClusterProfileConfigSpec { return b }
    +
    +type BaseClusterProfileConfigSpec interface {
    +	GetClusterProfileConfigSpec() *ClusterProfileConfigSpec
    +}
    +
    +func init() {
    +	t["BaseClusterProfileConfigSpec"] = reflect.TypeOf((*ClusterProfileConfigSpec)(nil)).Elem()
    +}
    +
    +func (b *ClusterProfileCreateSpec) GetClusterProfileCreateSpec() *ClusterProfileCreateSpec { return b }
    +
    +type BaseClusterProfileCreateSpec interface {
    +	GetClusterProfileCreateSpec() *ClusterProfileCreateSpec
    +}
    +
    +func init() {
    +	t["BaseClusterProfileCreateSpec"] = reflect.TypeOf((*ClusterProfileCreateSpec)(nil)).Elem()
    +}
    +
    +func (b *ClusterRuleInfo) GetClusterRuleInfo() *ClusterRuleInfo { return b }
    +
    +type BaseClusterRuleInfo interface {
    +	GetClusterRuleInfo() *ClusterRuleInfo
    +}
    +
    +func init() {
    +	t["BaseClusterRuleInfo"] = reflect.TypeOf((*ClusterRuleInfo)(nil)).Elem()
    +}
    +
    +func (b *ClusterSlotPolicy) GetClusterSlotPolicy() *ClusterSlotPolicy { return b }
    +
    +type BaseClusterSlotPolicy interface {
    +	GetClusterSlotPolicy() *ClusterSlotPolicy
    +}
    +
    +func init() {
    +	t["BaseClusterSlotPolicy"] = reflect.TypeOf((*ClusterSlotPolicy)(nil)).Elem()
    +}
    +
    +func (b *ClusterStatusChangedEvent) GetClusterStatusChangedEvent() *ClusterStatusChangedEvent {
    +	return b
    +}
    +
    +type BaseClusterStatusChangedEvent interface {
    +	GetClusterStatusChangedEvent() *ClusterStatusChangedEvent
    +}
    +
    +func init() {
    +	t["BaseClusterStatusChangedEvent"] = reflect.TypeOf((*ClusterStatusChangedEvent)(nil)).Elem()
    +}
    +
    +func (b *ComputeResourceConfigInfo) GetComputeResourceConfigInfo() *ComputeResourceConfigInfo {
    +	return b
    +}
    +
    +type BaseComputeResourceConfigInfo interface {
    +	GetComputeResourceConfigInfo() *ComputeResourceConfigInfo
    +}
    +
    +func init() {
    +	t["BaseComputeResourceConfigInfo"] = reflect.TypeOf((*ComputeResourceConfigInfo)(nil)).Elem()
    +}
    +
    +func (b *ComputeResourceConfigSpec) GetComputeResourceConfigSpec() *ComputeResourceConfigSpec {
    +	return b
    +}
    +
    +type BaseComputeResourceConfigSpec interface {
    +	GetComputeResourceConfigSpec() *ComputeResourceConfigSpec
    +}
    +
    +func init() {
    +	t["BaseComputeResourceConfigSpec"] = reflect.TypeOf((*ComputeResourceConfigSpec)(nil)).Elem()
    +}
    +
    +func (b *ComputeResourceSummary) GetComputeResourceSummary() *ComputeResourceSummary { return b }
    +
    +type BaseComputeResourceSummary interface {
    +	GetComputeResourceSummary() *ComputeResourceSummary
    +}
    +
    +func init() {
    +	t["BaseComputeResourceSummary"] = reflect.TypeOf((*ComputeResourceSummary)(nil)).Elem()
    +}
    +
    +func (b *CpuIncompatible) GetCpuIncompatible() *CpuIncompatible { return b }
    +
    +type BaseCpuIncompatible interface {
    +	GetCpuIncompatible() *CpuIncompatible
    +}
    +
    +func init() {
    +	t["BaseCpuIncompatible"] = reflect.TypeOf((*CpuIncompatible)(nil)).Elem()
    +}
    +
    +func (b *CryptoSpec) GetCryptoSpec() *CryptoSpec { return b }
    +
    +type BaseCryptoSpec interface {
    +	GetCryptoSpec() *CryptoSpec
    +}
    +
    +func init() {
    +	t["BaseCryptoSpec"] = reflect.TypeOf((*CryptoSpec)(nil)).Elem()
    +}
    +
    +func (b *CryptoSpecNoOp) GetCryptoSpecNoOp() *CryptoSpecNoOp { return b }
    +
    +type BaseCryptoSpecNoOp interface {
    +	GetCryptoSpecNoOp() *CryptoSpecNoOp
    +}
    +
    +func init() {
    +	t["BaseCryptoSpecNoOp"] = reflect.TypeOf((*CryptoSpecNoOp)(nil)).Elem()
    +}
    +
    +func (b *CustomFieldDefEvent) GetCustomFieldDefEvent() *CustomFieldDefEvent { return b }
    +
    +type BaseCustomFieldDefEvent interface {
    +	GetCustomFieldDefEvent() *CustomFieldDefEvent
    +}
    +
    +func init() {
    +	t["BaseCustomFieldDefEvent"] = reflect.TypeOf((*CustomFieldDefEvent)(nil)).Elem()
    +}
    +
    +func (b *CustomFieldEvent) GetCustomFieldEvent() *CustomFieldEvent { return b }
    +
    +type BaseCustomFieldEvent interface {
    +	GetCustomFieldEvent() *CustomFieldEvent
    +}
    +
    +func init() {
    +	t["BaseCustomFieldEvent"] = reflect.TypeOf((*CustomFieldEvent)(nil)).Elem()
    +}
    +
    +func (b *CustomFieldValue) GetCustomFieldValue() *CustomFieldValue { return b }
    +
    +type BaseCustomFieldValue interface {
    +	GetCustomFieldValue() *CustomFieldValue
    +}
    +
    +func init() {
    +	t["BaseCustomFieldValue"] = reflect.TypeOf((*CustomFieldValue)(nil)).Elem()
    +}
    +
    +func (b *CustomizationEvent) GetCustomizationEvent() *CustomizationEvent { return b }
    +
    +type BaseCustomizationEvent interface {
    +	GetCustomizationEvent() *CustomizationEvent
    +}
    +
    +func init() {
    +	t["BaseCustomizationEvent"] = reflect.TypeOf((*CustomizationEvent)(nil)).Elem()
    +}
    +
    +func (b *CustomizationFailed) GetCustomizationFailed() *CustomizationFailed { return b }
    +
    +type BaseCustomizationFailed interface {
    +	GetCustomizationFailed() *CustomizationFailed
    +}
    +
    +func init() {
    +	t["BaseCustomizationFailed"] = reflect.TypeOf((*CustomizationFailed)(nil)).Elem()
    +}
    +
    +func (b *CustomizationFault) GetCustomizationFault() *CustomizationFault { return b }
    +
    +type BaseCustomizationFault interface {
    +	GetCustomizationFault() *CustomizationFault
    +}
    +
    +func init() {
    +	t["BaseCustomizationFault"] = reflect.TypeOf((*CustomizationFault)(nil)).Elem()
    +}
    +
    +func (b *CustomizationIdentitySettings) GetCustomizationIdentitySettings() *CustomizationIdentitySettings {
    +	return b
    +}
    +
    +type BaseCustomizationIdentitySettings interface {
    +	GetCustomizationIdentitySettings() *CustomizationIdentitySettings
    +}
    +
    +func init() {
    +	t["BaseCustomizationIdentitySettings"] = reflect.TypeOf((*CustomizationIdentitySettings)(nil)).Elem()
    +}
    +
    +func (b *CustomizationIpGenerator) GetCustomizationIpGenerator() *CustomizationIpGenerator { return b }
    +
    +type BaseCustomizationIpGenerator interface {
    +	GetCustomizationIpGenerator() *CustomizationIpGenerator
    +}
    +
    +func init() {
    +	t["BaseCustomizationIpGenerator"] = reflect.TypeOf((*CustomizationIpGenerator)(nil)).Elem()
    +}
    +
    +func (b *CustomizationIpV6Generator) GetCustomizationIpV6Generator() *CustomizationIpV6Generator {
    +	return b
    +}
    +
    +type BaseCustomizationIpV6Generator interface {
    +	GetCustomizationIpV6Generator() *CustomizationIpV6Generator
    +}
    +
    +func init() {
    +	t["BaseCustomizationIpV6Generator"] = reflect.TypeOf((*CustomizationIpV6Generator)(nil)).Elem()
    +}
    +
    +func (b *CustomizationName) GetCustomizationName() *CustomizationName { return b }
    +
    +type BaseCustomizationName interface {
    +	GetCustomizationName() *CustomizationName
    +}
    +
    +func init() {
    +	t["BaseCustomizationName"] = reflect.TypeOf((*CustomizationName)(nil)).Elem()
    +}
    +
    +func (b *CustomizationOptions) GetCustomizationOptions() *CustomizationOptions { return b }
    +
    +type BaseCustomizationOptions interface {
    +	GetCustomizationOptions() *CustomizationOptions
    +}
    +
    +func init() {
    +	t["BaseCustomizationOptions"] = reflect.TypeOf((*CustomizationOptions)(nil)).Elem()
    +}
    +
    +func (b *DVPortSetting) GetDVPortSetting() *DVPortSetting { return b }
    +
    +type BaseDVPortSetting interface {
    +	GetDVPortSetting() *DVPortSetting
    +}
    +
    +func init() {
    +	t["BaseDVPortSetting"] = reflect.TypeOf((*DVPortSetting)(nil)).Elem()
    +}
    +
    +func (b *DVPortgroupEvent) GetDVPortgroupEvent() *DVPortgroupEvent { return b }
    +
    +type BaseDVPortgroupEvent interface {
    +	GetDVPortgroupEvent() *DVPortgroupEvent
    +}
    +
    +func init() {
    +	t["BaseDVPortgroupEvent"] = reflect.TypeOf((*DVPortgroupEvent)(nil)).Elem()
    +}
    +
    +func (b *DVPortgroupPolicy) GetDVPortgroupPolicy() *DVPortgroupPolicy { return b }
    +
    +type BaseDVPortgroupPolicy interface {
    +	GetDVPortgroupPolicy() *DVPortgroupPolicy
    +}
    +
    +func init() {
    +	t["BaseDVPortgroupPolicy"] = reflect.TypeOf((*DVPortgroupPolicy)(nil)).Elem()
    +}
    +
    +func (b *DVSConfigInfo) GetDVSConfigInfo() *DVSConfigInfo { return b }
    +
    +type BaseDVSConfigInfo interface {
    +	GetDVSConfigInfo() *DVSConfigInfo
    +}
    +
    +func init() {
    +	t["BaseDVSConfigInfo"] = reflect.TypeOf((*DVSConfigInfo)(nil)).Elem()
    +}
    +
    +func (b *DVSConfigSpec) GetDVSConfigSpec() *DVSConfigSpec { return b }
    +
    +type BaseDVSConfigSpec interface {
    +	GetDVSConfigSpec() *DVSConfigSpec
    +}
    +
    +func init() {
    +	t["BaseDVSConfigSpec"] = reflect.TypeOf((*DVSConfigSpec)(nil)).Elem()
    +}
    +
    +func (b *DVSFeatureCapability) GetDVSFeatureCapability() *DVSFeatureCapability { return b }
    +
    +type BaseDVSFeatureCapability interface {
    +	GetDVSFeatureCapability() *DVSFeatureCapability
    +}
    +
    +func init() {
    +	t["BaseDVSFeatureCapability"] = reflect.TypeOf((*DVSFeatureCapability)(nil)).Elem()
    +}
    +
    +func (b *DVSHealthCheckCapability) GetDVSHealthCheckCapability() *DVSHealthCheckCapability { return b }
    +
    +type BaseDVSHealthCheckCapability interface {
    +	GetDVSHealthCheckCapability() *DVSHealthCheckCapability
    +}
    +
    +func init() {
    +	t["BaseDVSHealthCheckCapability"] = reflect.TypeOf((*DVSHealthCheckCapability)(nil)).Elem()
    +}
    +
    +func (b *DVSHealthCheckConfig) GetDVSHealthCheckConfig() *DVSHealthCheckConfig { return b }
    +
    +type BaseDVSHealthCheckConfig interface {
    +	GetDVSHealthCheckConfig() *DVSHealthCheckConfig
    +}
    +
    +func init() {
    +	t["BaseDVSHealthCheckConfig"] = reflect.TypeOf((*DVSHealthCheckConfig)(nil)).Elem()
    +}
    +
    +func (b *DVSUplinkPortPolicy) GetDVSUplinkPortPolicy() *DVSUplinkPortPolicy { return b }
    +
    +type BaseDVSUplinkPortPolicy interface {
    +	GetDVSUplinkPortPolicy() *DVSUplinkPortPolicy
    +}
    +
    +func init() {
    +	t["BaseDVSUplinkPortPolicy"] = reflect.TypeOf((*DVSUplinkPortPolicy)(nil)).Elem()
    +}
    +
    +func (b *DailyTaskScheduler) GetDailyTaskScheduler() *DailyTaskScheduler { return b }
    +
    +type BaseDailyTaskScheduler interface {
    +	GetDailyTaskScheduler() *DailyTaskScheduler
    +}
    +
    +func init() {
    +	t["BaseDailyTaskScheduler"] = reflect.TypeOf((*DailyTaskScheduler)(nil)).Elem()
    +}
    +
    +func (b *DatacenterEvent) GetDatacenterEvent() *DatacenterEvent { return b }
    +
    +type BaseDatacenterEvent interface {
    +	GetDatacenterEvent() *DatacenterEvent
    +}
    +
    +func init() {
    +	t["BaseDatacenterEvent"] = reflect.TypeOf((*DatacenterEvent)(nil)).Elem()
    +}
    +
    +func (b *DatastoreEvent) GetDatastoreEvent() *DatastoreEvent { return b }
    +
    +type BaseDatastoreEvent interface {
    +	GetDatastoreEvent() *DatastoreEvent
    +}
    +
    +func init() {
    +	t["BaseDatastoreEvent"] = reflect.TypeOf((*DatastoreEvent)(nil)).Elem()
    +}
    +
    +func (b *DatastoreFileEvent) GetDatastoreFileEvent() *DatastoreFileEvent { return b }
    +
    +type BaseDatastoreFileEvent interface {
    +	GetDatastoreFileEvent() *DatastoreFileEvent
    +}
    +
    +func init() {
    +	t["BaseDatastoreFileEvent"] = reflect.TypeOf((*DatastoreFileEvent)(nil)).Elem()
    +}
    +
    +func (b *DatastoreInfo) GetDatastoreInfo() *DatastoreInfo { return b }
    +
    +type BaseDatastoreInfo interface {
    +	GetDatastoreInfo() *DatastoreInfo
    +}
    +
    +func init() {
    +	t["BaseDatastoreInfo"] = reflect.TypeOf((*DatastoreInfo)(nil)).Elem()
    +}
    +
    +func (b *DatastoreNotWritableOnHost) GetDatastoreNotWritableOnHost() *DatastoreNotWritableOnHost {
    +	return b
    +}
    +
    +type BaseDatastoreNotWritableOnHost interface {
    +	GetDatastoreNotWritableOnHost() *DatastoreNotWritableOnHost
    +}
    +
    +func init() {
    +	t["BaseDatastoreNotWritableOnHost"] = reflect.TypeOf((*DatastoreNotWritableOnHost)(nil)).Elem()
    +}
    +
    +func (b *Description) GetDescription() *Description { return b }
    +
    +type BaseDescription interface {
    +	GetDescription() *Description
    +}
    +
    +func init() {
    +	t["BaseDescription"] = reflect.TypeOf((*Description)(nil)).Elem()
    +}
    +
    +func (b *DeviceBackingNotSupported) GetDeviceBackingNotSupported() *DeviceBackingNotSupported {
    +	return b
    +}
    +
    +type BaseDeviceBackingNotSupported interface {
    +	GetDeviceBackingNotSupported() *DeviceBackingNotSupported
    +}
    +
    +func init() {
    +	t["BaseDeviceBackingNotSupported"] = reflect.TypeOf((*DeviceBackingNotSupported)(nil)).Elem()
    +}
    +
    +func (b *DeviceNotSupported) GetDeviceNotSupported() *DeviceNotSupported { return b }
    +
    +type BaseDeviceNotSupported interface {
    +	GetDeviceNotSupported() *DeviceNotSupported
    +}
    +
    +func init() {
    +	t["BaseDeviceNotSupported"] = reflect.TypeOf((*DeviceNotSupported)(nil)).Elem()
    +}
    +
    +func (b *DiskNotSupported) GetDiskNotSupported() *DiskNotSupported { return b }
    +
    +type BaseDiskNotSupported interface {
    +	GetDiskNotSupported() *DiskNotSupported
    +}
    +
    +func init() {
    +	t["BaseDiskNotSupported"] = reflect.TypeOf((*DiskNotSupported)(nil)).Elem()
    +}
    +
    +func (b *DistributedVirtualSwitchHostMemberBacking) GetDistributedVirtualSwitchHostMemberBacking() *DistributedVirtualSwitchHostMemberBacking {
    +	return b
    +}
    +
    +type BaseDistributedVirtualSwitchHostMemberBacking interface {
    +	GetDistributedVirtualSwitchHostMemberBacking() *DistributedVirtualSwitchHostMemberBacking
    +}
    +
    +func init() {
    +	t["BaseDistributedVirtualSwitchHostMemberBacking"] = reflect.TypeOf((*DistributedVirtualSwitchHostMemberBacking)(nil)).Elem()
    +}
    +
    +func (b *DistributedVirtualSwitchManagerHostDvsFilterSpec) GetDistributedVirtualSwitchManagerHostDvsFilterSpec() *DistributedVirtualSwitchManagerHostDvsFilterSpec {
    +	return b
    +}
    +
    +type BaseDistributedVirtualSwitchManagerHostDvsFilterSpec interface {
    +	GetDistributedVirtualSwitchManagerHostDvsFilterSpec() *DistributedVirtualSwitchManagerHostDvsFilterSpec
    +}
    +
    +func init() {
    +	t["BaseDistributedVirtualSwitchManagerHostDvsFilterSpec"] = reflect.TypeOf((*DistributedVirtualSwitchManagerHostDvsFilterSpec)(nil)).Elem()
    +}
    +
    +func (b *DvsEvent) GetDvsEvent() *DvsEvent { return b }
    +
    +type BaseDvsEvent interface {
    +	GetDvsEvent() *DvsEvent
    +}
    +
    +func init() {
    +	t["BaseDvsEvent"] = reflect.TypeOf((*DvsEvent)(nil)).Elem()
    +}
    +
    +func (b *DvsFault) GetDvsFault() *DvsFault { return b }
    +
    +type BaseDvsFault interface {
    +	GetDvsFault() *DvsFault
    +}
    +
    +func init() {
    +	t["BaseDvsFault"] = reflect.TypeOf((*DvsFault)(nil)).Elem()
    +}
    +
    +func (b *DvsFilterConfig) GetDvsFilterConfig() *DvsFilterConfig { return b }
    +
    +type BaseDvsFilterConfig interface {
    +	GetDvsFilterConfig() *DvsFilterConfig
    +}
    +
    +func init() {
    +	t["BaseDvsFilterConfig"] = reflect.TypeOf((*DvsFilterConfig)(nil)).Elem()
    +}
    +
    +func (b *DvsHealthStatusChangeEvent) GetDvsHealthStatusChangeEvent() *DvsHealthStatusChangeEvent {
    +	return b
    +}
    +
    +type BaseDvsHealthStatusChangeEvent interface {
    +	GetDvsHealthStatusChangeEvent() *DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["BaseDvsHealthStatusChangeEvent"] = reflect.TypeOf((*DvsHealthStatusChangeEvent)(nil)).Elem()
    +}
    +
    +func (b *DvsIpPort) GetDvsIpPort() *DvsIpPort { return b }
    +
    +type BaseDvsIpPort interface {
    +	GetDvsIpPort() *DvsIpPort
    +}
    +
    +func init() {
    +	t["BaseDvsIpPort"] = reflect.TypeOf((*DvsIpPort)(nil)).Elem()
    +}
    +
    +func (b *DvsNetworkRuleAction) GetDvsNetworkRuleAction() *DvsNetworkRuleAction { return b }
    +
    +type BaseDvsNetworkRuleAction interface {
    +	GetDvsNetworkRuleAction() *DvsNetworkRuleAction
    +}
    +
    +func init() {
    +	t["BaseDvsNetworkRuleAction"] = reflect.TypeOf((*DvsNetworkRuleAction)(nil)).Elem()
    +}
    +
    +func (b *DvsNetworkRuleQualifier) GetDvsNetworkRuleQualifier() *DvsNetworkRuleQualifier { return b }
    +
    +type BaseDvsNetworkRuleQualifier interface {
    +	GetDvsNetworkRuleQualifier() *DvsNetworkRuleQualifier
    +}
    +
    +func init() {
    +	t["BaseDvsNetworkRuleQualifier"] = reflect.TypeOf((*DvsNetworkRuleQualifier)(nil)).Elem()
    +}
    +
    +func (b *DvsTrafficFilterConfig) GetDvsTrafficFilterConfig() *DvsTrafficFilterConfig { return b }
    +
    +type BaseDvsTrafficFilterConfig interface {
    +	GetDvsTrafficFilterConfig() *DvsTrafficFilterConfig
    +}
    +
    +func init() {
    +	t["BaseDvsTrafficFilterConfig"] = reflect.TypeOf((*DvsTrafficFilterConfig)(nil)).Elem()
    +}
    +
    +func (b *DvsVNicProfile) GetDvsVNicProfile() *DvsVNicProfile { return b }
    +
    +type BaseDvsVNicProfile interface {
    +	GetDvsVNicProfile() *DvsVNicProfile
    +}
    +
    +func init() {
    +	t["BaseDvsVNicProfile"] = reflect.TypeOf((*DvsVNicProfile)(nil)).Elem()
    +}
    +
    +func (b *DynamicData) GetDynamicData() *DynamicData { return b }
    +
    +type BaseDynamicData interface {
    +	GetDynamicData() *DynamicData
    +}
    +
    +func init() {
    +	t["BaseDynamicData"] = reflect.TypeOf((*DynamicData)(nil)).Elem()
    +}
    +
    +func (b *EVCAdmissionFailed) GetEVCAdmissionFailed() *EVCAdmissionFailed { return b }
    +
    +type BaseEVCAdmissionFailed interface {
    +	GetEVCAdmissionFailed() *EVCAdmissionFailed
    +}
    +
    +func init() {
    +	t["BaseEVCAdmissionFailed"] = reflect.TypeOf((*EVCAdmissionFailed)(nil)).Elem()
    +}
    +
    +func (b *EVCConfigFault) GetEVCConfigFault() *EVCConfigFault { return b }
    +
    +type BaseEVCConfigFault interface {
    +	GetEVCConfigFault() *EVCConfigFault
    +}
    +
    +func init() {
    +	t["BaseEVCConfigFault"] = reflect.TypeOf((*EVCConfigFault)(nil)).Elem()
    +}
    +
    +func (b *ElementDescription) GetElementDescription() *ElementDescription { return b }
    +
    +type BaseElementDescription interface {
    +	GetElementDescription() *ElementDescription
    +}
    +
    +func init() {
    +	t["BaseElementDescription"] = reflect.TypeOf((*ElementDescription)(nil)).Elem()
    +}
    +
    +func (b *EnteredStandbyModeEvent) GetEnteredStandbyModeEvent() *EnteredStandbyModeEvent { return b }
    +
    +type BaseEnteredStandbyModeEvent interface {
    +	GetEnteredStandbyModeEvent() *EnteredStandbyModeEvent
    +}
    +
    +func init() {
    +	t["BaseEnteredStandbyModeEvent"] = reflect.TypeOf((*EnteredStandbyModeEvent)(nil)).Elem()
    +}
    +
    +func (b *EnteringStandbyModeEvent) GetEnteringStandbyModeEvent() *EnteringStandbyModeEvent { return b }
    +
    +type BaseEnteringStandbyModeEvent interface {
    +	GetEnteringStandbyModeEvent() *EnteringStandbyModeEvent
    +}
    +
    +func init() {
    +	t["BaseEnteringStandbyModeEvent"] = reflect.TypeOf((*EnteringStandbyModeEvent)(nil)).Elem()
    +}
    +
    +func (b *EntityEventArgument) GetEntityEventArgument() *EntityEventArgument { return b }
    +
    +type BaseEntityEventArgument interface {
    +	GetEntityEventArgument() *EntityEventArgument
    +}
    +
    +func init() {
    +	t["BaseEntityEventArgument"] = reflect.TypeOf((*EntityEventArgument)(nil)).Elem()
    +}
    +
    +func (b *Event) GetEvent() *Event { return b }
    +
    +type BaseEvent interface {
    +	GetEvent() *Event
    +}
    +
    +func init() {
    +	t["BaseEvent"] = reflect.TypeOf((*Event)(nil)).Elem()
    +}
    +
    +func (b *EventArgument) GetEventArgument() *EventArgument { return b }
    +
    +type BaseEventArgument interface {
    +	GetEventArgument() *EventArgument
    +}
    +
    +func init() {
    +	t["BaseEventArgument"] = reflect.TypeOf((*EventArgument)(nil)).Elem()
    +}
    +
    +func (b *ExitStandbyModeFailedEvent) GetExitStandbyModeFailedEvent() *ExitStandbyModeFailedEvent {
    +	return b
    +}
    +
    +type BaseExitStandbyModeFailedEvent interface {
    +	GetExitStandbyModeFailedEvent() *ExitStandbyModeFailedEvent
    +}
    +
    +func init() {
    +	t["BaseExitStandbyModeFailedEvent"] = reflect.TypeOf((*ExitStandbyModeFailedEvent)(nil)).Elem()
    +}
    +
    +func (b *ExitedStandbyModeEvent) GetExitedStandbyModeEvent() *ExitedStandbyModeEvent { return b }
    +
    +type BaseExitedStandbyModeEvent interface {
    +	GetExitedStandbyModeEvent() *ExitedStandbyModeEvent
    +}
    +
    +func init() {
    +	t["BaseExitedStandbyModeEvent"] = reflect.TypeOf((*ExitedStandbyModeEvent)(nil)).Elem()
    +}
    +
    +func (b *ExitingStandbyModeEvent) GetExitingStandbyModeEvent() *ExitingStandbyModeEvent { return b }
    +
    +type BaseExitingStandbyModeEvent interface {
    +	GetExitingStandbyModeEvent() *ExitingStandbyModeEvent
    +}
    +
    +func init() {
    +	t["BaseExitingStandbyModeEvent"] = reflect.TypeOf((*ExitingStandbyModeEvent)(nil)).Elem()
    +}
    +
    +func (b *ExpiredFeatureLicense) GetExpiredFeatureLicense() *ExpiredFeatureLicense { return b }
    +
    +type BaseExpiredFeatureLicense interface {
    +	GetExpiredFeatureLicense() *ExpiredFeatureLicense
    +}
    +
    +func init() {
    +	t["BaseExpiredFeatureLicense"] = reflect.TypeOf((*ExpiredFeatureLicense)(nil)).Elem()
    +}
    +
    +func (b *FaultToleranceConfigInfo) GetFaultToleranceConfigInfo() *FaultToleranceConfigInfo { return b }
    +
    +type BaseFaultToleranceConfigInfo interface {
    +	GetFaultToleranceConfigInfo() *FaultToleranceConfigInfo
    +}
    +
    +func init() {
    +	t["BaseFaultToleranceConfigInfo"] = reflect.TypeOf((*FaultToleranceConfigInfo)(nil)).Elem()
    +}
    +
    +func (b *FcoeFault) GetFcoeFault() *FcoeFault { return b }
    +
    +type BaseFcoeFault interface {
    +	GetFcoeFault() *FcoeFault
    +}
    +
    +func init() {
    +	t["BaseFcoeFault"] = reflect.TypeOf((*FcoeFault)(nil)).Elem()
    +}
    +
    +func (b *FileBackedVirtualDiskSpec) GetFileBackedVirtualDiskSpec() *FileBackedVirtualDiskSpec {
    +	return b
    +}
    +
    +type BaseFileBackedVirtualDiskSpec interface {
    +	GetFileBackedVirtualDiskSpec() *FileBackedVirtualDiskSpec
    +}
    +
    +func init() {
    +	t["BaseFileBackedVirtualDiskSpec"] = reflect.TypeOf((*FileBackedVirtualDiskSpec)(nil)).Elem()
    +}
    +
    +func (b *FileFault) GetFileFault() *FileFault { return b }
    +
    +type BaseFileFault interface {
    +	GetFileFault() *FileFault
    +}
    +
    +func init() {
    +	t["BaseFileFault"] = reflect.TypeOf((*FileFault)(nil)).Elem()
    +}
    +
    +func (b *FileInfo) GetFileInfo() *FileInfo { return b }
    +
    +type BaseFileInfo interface {
    +	GetFileInfo() *FileInfo
    +}
    +
    +func init() {
    +	t["BaseFileInfo"] = reflect.TypeOf((*FileInfo)(nil)).Elem()
    +}
    +
    +func (b *FileQuery) GetFileQuery() *FileQuery { return b }
    +
    +type BaseFileQuery interface {
    +	GetFileQuery() *FileQuery
    +}
    +
    +func init() {
    +	t["BaseFileQuery"] = reflect.TypeOf((*FileQuery)(nil)).Elem()
    +}
    +
    +func (b *GatewayConnectFault) GetGatewayConnectFault() *GatewayConnectFault { return b }
    +
    +type BaseGatewayConnectFault interface {
    +	GetGatewayConnectFault() *GatewayConnectFault
    +}
    +
    +func init() {
    +	t["BaseGatewayConnectFault"] = reflect.TypeOf((*GatewayConnectFault)(nil)).Elem()
    +}
    +
    +func (b *GatewayToHostConnectFault) GetGatewayToHostConnectFault() *GatewayToHostConnectFault {
    +	return b
    +}
    +
    +type BaseGatewayToHostConnectFault interface {
    +	GetGatewayToHostConnectFault() *GatewayToHostConnectFault
    +}
    +
    +func init() {
    +	t["BaseGatewayToHostConnectFault"] = reflect.TypeOf((*GatewayToHostConnectFault)(nil)).Elem()
    +}
    +
    +func (b *GeneralEvent) GetGeneralEvent() *GeneralEvent { return b }
    +
    +type BaseGeneralEvent interface {
    +	GetGeneralEvent() *GeneralEvent
    +}
    +
    +func init() {
    +	t["BaseGeneralEvent"] = reflect.TypeOf((*GeneralEvent)(nil)).Elem()
    +}
    +
    +func (b *GuestAuthSubject) GetGuestAuthSubject() *GuestAuthSubject { return b }
    +
    +type BaseGuestAuthSubject interface {
    +	GetGuestAuthSubject() *GuestAuthSubject
    +}
    +
    +func init() {
    +	t["BaseGuestAuthSubject"] = reflect.TypeOf((*GuestAuthSubject)(nil)).Elem()
    +}
    +
    +func (b *GuestAuthentication) GetGuestAuthentication() *GuestAuthentication { return b }
    +
    +type BaseGuestAuthentication interface {
    +	GetGuestAuthentication() *GuestAuthentication
    +}
    +
    +func init() {
    +	t["BaseGuestAuthentication"] = reflect.TypeOf((*GuestAuthentication)(nil)).Elem()
    +}
    +
    +func (b *GuestFileAttributes) GetGuestFileAttributes() *GuestFileAttributes { return b }
    +
    +type BaseGuestFileAttributes interface {
    +	GetGuestFileAttributes() *GuestFileAttributes
    +}
    +
    +func init() {
    +	t["BaseGuestFileAttributes"] = reflect.TypeOf((*GuestFileAttributes)(nil)).Elem()
    +}
    +
    +func (b *GuestOperationsFault) GetGuestOperationsFault() *GuestOperationsFault { return b }
    +
    +type BaseGuestOperationsFault interface {
    +	GetGuestOperationsFault() *GuestOperationsFault
    +}
    +
    +func init() {
    +	t["BaseGuestOperationsFault"] = reflect.TypeOf((*GuestOperationsFault)(nil)).Elem()
    +}
    +
    +func (b *GuestProgramSpec) GetGuestProgramSpec() *GuestProgramSpec { return b }
    +
    +type BaseGuestProgramSpec interface {
    +	GetGuestProgramSpec() *GuestProgramSpec
    +}
    +
    +func init() {
    +	t["BaseGuestProgramSpec"] = reflect.TypeOf((*GuestProgramSpec)(nil)).Elem()
    +}
    +
    +func (b *GuestRegValueDataSpec) GetGuestRegValueDataSpec() *GuestRegValueDataSpec { return b }
    +
    +type BaseGuestRegValueDataSpec interface {
    +	GetGuestRegValueDataSpec() *GuestRegValueDataSpec
    +}
    +
    +func init() {
    +	t["BaseGuestRegValueDataSpec"] = reflect.TypeOf((*GuestRegValueDataSpec)(nil)).Elem()
    +}
    +
    +func (b *GuestRegistryFault) GetGuestRegistryFault() *GuestRegistryFault { return b }
    +
    +type BaseGuestRegistryFault interface {
    +	GetGuestRegistryFault() *GuestRegistryFault
    +}
    +
    +func init() {
    +	t["BaseGuestRegistryFault"] = reflect.TypeOf((*GuestRegistryFault)(nil)).Elem()
    +}
    +
    +func (b *GuestRegistryKeyFault) GetGuestRegistryKeyFault() *GuestRegistryKeyFault { return b }
    +
    +type BaseGuestRegistryKeyFault interface {
    +	GetGuestRegistryKeyFault() *GuestRegistryKeyFault
    +}
    +
    +func init() {
    +	t["BaseGuestRegistryKeyFault"] = reflect.TypeOf((*GuestRegistryKeyFault)(nil)).Elem()
    +}
    +
    +func (b *GuestRegistryValueFault) GetGuestRegistryValueFault() *GuestRegistryValueFault { return b }
    +
    +type BaseGuestRegistryValueFault interface {
    +	GetGuestRegistryValueFault() *GuestRegistryValueFault
    +}
    +
    +func init() {
    +	t["BaseGuestRegistryValueFault"] = reflect.TypeOf((*GuestRegistryValueFault)(nil)).Elem()
    +}
    +
    +func (b *HostAccountSpec) GetHostAccountSpec() *HostAccountSpec { return b }
    +
    +type BaseHostAccountSpec interface {
    +	GetHostAccountSpec() *HostAccountSpec
    +}
    +
    +func init() {
    +	t["BaseHostAccountSpec"] = reflect.TypeOf((*HostAccountSpec)(nil)).Elem()
    +}
    +
    +func (b *HostAuthenticationStoreInfo) GetHostAuthenticationStoreInfo() *HostAuthenticationStoreInfo {
    +	return b
    +}
    +
    +type BaseHostAuthenticationStoreInfo interface {
    +	GetHostAuthenticationStoreInfo() *HostAuthenticationStoreInfo
    +}
    +
    +func init() {
    +	t["BaseHostAuthenticationStoreInfo"] = reflect.TypeOf((*HostAuthenticationStoreInfo)(nil)).Elem()
    +}
    +
    +func (b *HostCommunication) GetHostCommunication() *HostCommunication { return b }
    +
    +type BaseHostCommunication interface {
    +	GetHostCommunication() *HostCommunication
    +}
    +
    +func init() {
    +	t["BaseHostCommunication"] = reflect.TypeOf((*HostCommunication)(nil)).Elem()
    +}
    +
    +func (b *HostConfigFault) GetHostConfigFault() *HostConfigFault { return b }
    +
    +type BaseHostConfigFault interface {
    +	GetHostConfigFault() *HostConfigFault
    +}
    +
    +func init() {
    +	t["BaseHostConfigFault"] = reflect.TypeOf((*HostConfigFault)(nil)).Elem()
    +}
    +
    +func (b *HostConnectFault) GetHostConnectFault() *HostConnectFault { return b }
    +
    +type BaseHostConnectFault interface {
    +	GetHostConnectFault() *HostConnectFault
    +}
    +
    +func init() {
    +	t["BaseHostConnectFault"] = reflect.TypeOf((*HostConnectFault)(nil)).Elem()
    +}
    +
    +func (b *HostConnectInfoNetworkInfo) GetHostConnectInfoNetworkInfo() *HostConnectInfoNetworkInfo {
    +	return b
    +}
    +
    +type BaseHostConnectInfoNetworkInfo interface {
    +	GetHostConnectInfoNetworkInfo() *HostConnectInfoNetworkInfo
    +}
    +
    +func init() {
    +	t["BaseHostConnectInfoNetworkInfo"] = reflect.TypeOf((*HostConnectInfoNetworkInfo)(nil)).Elem()
    +}
    +
    +func (b *HostDasEvent) GetHostDasEvent() *HostDasEvent { return b }
    +
    +type BaseHostDasEvent interface {
    +	GetHostDasEvent() *HostDasEvent
    +}
    +
    +func init() {
    +	t["BaseHostDasEvent"] = reflect.TypeOf((*HostDasEvent)(nil)).Elem()
    +}
    +
    +func (b *HostDatastoreConnectInfo) GetHostDatastoreConnectInfo() *HostDatastoreConnectInfo { return b }
    +
    +type BaseHostDatastoreConnectInfo interface {
    +	GetHostDatastoreConnectInfo() *HostDatastoreConnectInfo
    +}
    +
    +func init() {
    +	t["BaseHostDatastoreConnectInfo"] = reflect.TypeOf((*HostDatastoreConnectInfo)(nil)).Elem()
    +}
    +
    +func (b *HostDevice) GetHostDevice() *HostDevice { return b }
    +
    +type BaseHostDevice interface {
    +	GetHostDevice() *HostDevice
    +}
    +
    +func init() {
    +	t["BaseHostDevice"] = reflect.TypeOf((*HostDevice)(nil)).Elem()
    +}
    +
    +func (b *HostDigestInfo) GetHostDigestInfo() *HostDigestInfo { return b }
    +
    +type BaseHostDigestInfo interface {
    +	GetHostDigestInfo() *HostDigestInfo
    +}
    +
    +func init() {
    +	t["BaseHostDigestInfo"] = reflect.TypeOf((*HostDigestInfo)(nil)).Elem()
    +}
    +
    +func (b *HostDirectoryStoreInfo) GetHostDirectoryStoreInfo() *HostDirectoryStoreInfo { return b }
    +
    +type BaseHostDirectoryStoreInfo interface {
    +	GetHostDirectoryStoreInfo() *HostDirectoryStoreInfo
    +}
    +
    +func init() {
    +	t["BaseHostDirectoryStoreInfo"] = reflect.TypeOf((*HostDirectoryStoreInfo)(nil)).Elem()
    +}
    +
    +func (b *HostDnsConfig) GetHostDnsConfig() *HostDnsConfig { return b }
    +
    +type BaseHostDnsConfig interface {
    +	GetHostDnsConfig() *HostDnsConfig
    +}
    +
    +func init() {
    +	t["BaseHostDnsConfig"] = reflect.TypeOf((*HostDnsConfig)(nil)).Elem()
    +}
    +
    +func (b *HostEvent) GetHostEvent() *HostEvent { return b }
    +
    +type BaseHostEvent interface {
    +	GetHostEvent() *HostEvent
    +}
    +
    +func init() {
    +	t["BaseHostEvent"] = reflect.TypeOf((*HostEvent)(nil)).Elem()
    +}
    +
    +func (b *HostFibreChannelHba) GetHostFibreChannelHba() *HostFibreChannelHba { return b }
    +
    +type BaseHostFibreChannelHba interface {
    +	GetHostFibreChannelHba() *HostFibreChannelHba
    +}
    +
    +func init() {
    +	t["BaseHostFibreChannelHba"] = reflect.TypeOf((*HostFibreChannelHba)(nil)).Elem()
    +}
    +
    +func (b *HostFibreChannelTargetTransport) GetHostFibreChannelTargetTransport() *HostFibreChannelTargetTransport {
    +	return b
    +}
    +
    +type BaseHostFibreChannelTargetTransport interface {
    +	GetHostFibreChannelTargetTransport() *HostFibreChannelTargetTransport
    +}
    +
    +func init() {
    +	t["BaseHostFibreChannelTargetTransport"] = reflect.TypeOf((*HostFibreChannelTargetTransport)(nil)).Elem()
    +}
    +
    +func (b *HostFileSystemVolume) GetHostFileSystemVolume() *HostFileSystemVolume { return b }
    +
    +type BaseHostFileSystemVolume interface {
    +	GetHostFileSystemVolume() *HostFileSystemVolume
    +}
    +
    +func init() {
    +	t["BaseHostFileSystemVolume"] = reflect.TypeOf((*HostFileSystemVolume)(nil)).Elem()
    +}
    +
    +func (b *HostHardwareElementInfo) GetHostHardwareElementInfo() *HostHardwareElementInfo { return b }
    +
    +type BaseHostHardwareElementInfo interface {
    +	GetHostHardwareElementInfo() *HostHardwareElementInfo
    +}
    +
    +func init() {
    +	t["BaseHostHardwareElementInfo"] = reflect.TypeOf((*HostHardwareElementInfo)(nil)).Elem()
    +}
    +
    +func (b *HostHostBusAdapter) GetHostHostBusAdapter() *HostHostBusAdapter { return b }
    +
    +type BaseHostHostBusAdapter interface {
    +	GetHostHostBusAdapter() *HostHostBusAdapter
    +}
    +
    +func init() {
    +	t["BaseHostHostBusAdapter"] = reflect.TypeOf((*HostHostBusAdapter)(nil)).Elem()
    +}
    +
    +func (b *HostIpRouteConfig) GetHostIpRouteConfig() *HostIpRouteConfig { return b }
    +
    +type BaseHostIpRouteConfig interface {
    +	GetHostIpRouteConfig() *HostIpRouteConfig
    +}
    +
    +func init() {
    +	t["BaseHostIpRouteConfig"] = reflect.TypeOf((*HostIpRouteConfig)(nil)).Elem()
    +}
    +
    +func (b *HostMemberHealthCheckResult) GetHostMemberHealthCheckResult() *HostMemberHealthCheckResult {
    +	return b
    +}
    +
    +type BaseHostMemberHealthCheckResult interface {
    +	GetHostMemberHealthCheckResult() *HostMemberHealthCheckResult
    +}
    +
    +func init() {
    +	t["BaseHostMemberHealthCheckResult"] = reflect.TypeOf((*HostMemberHealthCheckResult)(nil)).Elem()
    +}
    +
    +func (b *HostMemberUplinkHealthCheckResult) GetHostMemberUplinkHealthCheckResult() *HostMemberUplinkHealthCheckResult {
    +	return b
    +}
    +
    +type BaseHostMemberUplinkHealthCheckResult interface {
    +	GetHostMemberUplinkHealthCheckResult() *HostMemberUplinkHealthCheckResult
    +}
    +
    +func init() {
    +	t["BaseHostMemberUplinkHealthCheckResult"] = reflect.TypeOf((*HostMemberUplinkHealthCheckResult)(nil)).Elem()
    +}
    +
    +func (b *HostMultipathInfoLogicalUnitPolicy) GetHostMultipathInfoLogicalUnitPolicy() *HostMultipathInfoLogicalUnitPolicy {
    +	return b
    +}
    +
    +type BaseHostMultipathInfoLogicalUnitPolicy interface {
    +	GetHostMultipathInfoLogicalUnitPolicy() *HostMultipathInfoLogicalUnitPolicy
    +}
    +
    +func init() {
    +	t["BaseHostMultipathInfoLogicalUnitPolicy"] = reflect.TypeOf((*HostMultipathInfoLogicalUnitPolicy)(nil)).Elem()
    +}
    +
    +func (b *HostPciPassthruConfig) GetHostPciPassthruConfig() *HostPciPassthruConfig { return b }
    +
    +type BaseHostPciPassthruConfig interface {
    +	GetHostPciPassthruConfig() *HostPciPassthruConfig
    +}
    +
    +func init() {
    +	t["BaseHostPciPassthruConfig"] = reflect.TypeOf((*HostPciPassthruConfig)(nil)).Elem()
    +}
    +
    +func (b *HostPciPassthruInfo) GetHostPciPassthruInfo() *HostPciPassthruInfo { return b }
    +
    +type BaseHostPciPassthruInfo interface {
    +	GetHostPciPassthruInfo() *HostPciPassthruInfo
    +}
    +
    +func init() {
    +	t["BaseHostPciPassthruInfo"] = reflect.TypeOf((*HostPciPassthruInfo)(nil)).Elem()
    +}
    +
    +func (b *HostPowerOpFailed) GetHostPowerOpFailed() *HostPowerOpFailed { return b }
    +
    +type BaseHostPowerOpFailed interface {
    +	GetHostPowerOpFailed() *HostPowerOpFailed
    +}
    +
    +func init() {
    +	t["BaseHostPowerOpFailed"] = reflect.TypeOf((*HostPowerOpFailed)(nil)).Elem()
    +}
    +
    +func (b *HostProfileConfigSpec) GetHostProfileConfigSpec() *HostProfileConfigSpec { return b }
    +
    +type BaseHostProfileConfigSpec interface {
    +	GetHostProfileConfigSpec() *HostProfileConfigSpec
    +}
    +
    +func init() {
    +	t["BaseHostProfileConfigSpec"] = reflect.TypeOf((*HostProfileConfigSpec)(nil)).Elem()
    +}
    +
    +func (b *HostProfilesEntityCustomizations) GetHostProfilesEntityCustomizations() *HostProfilesEntityCustomizations {
    +	return b
    +}
    +
    +type BaseHostProfilesEntityCustomizations interface {
    +	GetHostProfilesEntityCustomizations() *HostProfilesEntityCustomizations
    +}
    +
    +func init() {
    +	t["BaseHostProfilesEntityCustomizations"] = reflect.TypeOf((*HostProfilesEntityCustomizations)(nil)).Elem()
    +}
    +
    +func (b *HostSriovDevicePoolInfo) GetHostSriovDevicePoolInfo() *HostSriovDevicePoolInfo { return b }
    +
    +type BaseHostSriovDevicePoolInfo interface {
    +	GetHostSriovDevicePoolInfo() *HostSriovDevicePoolInfo
    +}
    +
    +func init() {
    +	t["BaseHostSriovDevicePoolInfo"] = reflect.TypeOf((*HostSriovDevicePoolInfo)(nil)).Elem()
    +}
    +
    +func (b *HostSystemSwapConfigurationSystemSwapOption) GetHostSystemSwapConfigurationSystemSwapOption() *HostSystemSwapConfigurationSystemSwapOption {
    +	return b
    +}
    +
    +type BaseHostSystemSwapConfigurationSystemSwapOption interface {
    +	GetHostSystemSwapConfigurationSystemSwapOption() *HostSystemSwapConfigurationSystemSwapOption
    +}
    +
    +func init() {
    +	t["BaseHostSystemSwapConfigurationSystemSwapOption"] = reflect.TypeOf((*HostSystemSwapConfigurationSystemSwapOption)(nil)).Elem()
    +}
    +
    +func (b *HostTargetTransport) GetHostTargetTransport() *HostTargetTransport { return b }
    +
    +type BaseHostTargetTransport interface {
    +	GetHostTargetTransport() *HostTargetTransport
    +}
    +
    +func init() {
    +	t["BaseHostTargetTransport"] = reflect.TypeOf((*HostTargetTransport)(nil)).Elem()
    +}
    +
    +func (b *HostTpmEventDetails) GetHostTpmEventDetails() *HostTpmEventDetails { return b }
    +
    +type BaseHostTpmEventDetails interface {
    +	GetHostTpmEventDetails() *HostTpmEventDetails
    +}
    +
    +func init() {
    +	t["BaseHostTpmEventDetails"] = reflect.TypeOf((*HostTpmEventDetails)(nil)).Elem()
    +}
    +
    +func (b *HostVirtualSwitchBridge) GetHostVirtualSwitchBridge() *HostVirtualSwitchBridge { return b }
    +
    +type BaseHostVirtualSwitchBridge interface {
    +	GetHostVirtualSwitchBridge() *HostVirtualSwitchBridge
    +}
    +
    +func init() {
    +	t["BaseHostVirtualSwitchBridge"] = reflect.TypeOf((*HostVirtualSwitchBridge)(nil)).Elem()
    +}
    +
    +func (b *HourlyTaskScheduler) GetHourlyTaskScheduler() *HourlyTaskScheduler { return b }
    +
    +type BaseHourlyTaskScheduler interface {
    +	GetHourlyTaskScheduler() *HourlyTaskScheduler
    +}
    +
    +func init() {
    +	t["BaseHourlyTaskScheduler"] = reflect.TypeOf((*HourlyTaskScheduler)(nil)).Elem()
    +}
    +
    +func (b *ImportSpec) GetImportSpec() *ImportSpec { return b }
    +
    +type BaseImportSpec interface {
    +	GetImportSpec() *ImportSpec
    +}
    +
    +func init() {
    +	t["BaseImportSpec"] = reflect.TypeOf((*ImportSpec)(nil)).Elem()
    +}
    +
    +func (b *InaccessibleDatastore) GetInaccessibleDatastore() *InaccessibleDatastore { return b }
    +
    +type BaseInaccessibleDatastore interface {
    +	GetInaccessibleDatastore() *InaccessibleDatastore
    +}
    +
    +func init() {
    +	t["BaseInaccessibleDatastore"] = reflect.TypeOf((*InaccessibleDatastore)(nil)).Elem()
    +}
    +
    +func (b *InheritablePolicy) GetInheritablePolicy() *InheritablePolicy { return b }
    +
    +type BaseInheritablePolicy interface {
    +	GetInheritablePolicy() *InheritablePolicy
    +}
    +
    +func init() {
    +	t["BaseInheritablePolicy"] = reflect.TypeOf((*InheritablePolicy)(nil)).Elem()
    +}
    +
    +func (b *InsufficientHostCapacityFault) GetInsufficientHostCapacityFault() *InsufficientHostCapacityFault {
    +	return b
    +}
    +
    +type BaseInsufficientHostCapacityFault interface {
    +	GetInsufficientHostCapacityFault() *InsufficientHostCapacityFault
    +}
    +
    +func init() {
    +	t["BaseInsufficientHostCapacityFault"] = reflect.TypeOf((*InsufficientHostCapacityFault)(nil)).Elem()
    +}
    +
    +func (b *InsufficientResourcesFault) GetInsufficientResourcesFault() *InsufficientResourcesFault {
    +	return b
    +}
    +
    +type BaseInsufficientResourcesFault interface {
    +	GetInsufficientResourcesFault() *InsufficientResourcesFault
    +}
    +
    +func init() {
    +	t["BaseInsufficientResourcesFault"] = reflect.TypeOf((*InsufficientResourcesFault)(nil)).Elem()
    +}
    +
    +func (b *InsufficientStandbyResource) GetInsufficientStandbyResource() *InsufficientStandbyResource {
    +	return b
    +}
    +
    +type BaseInsufficientStandbyResource interface {
    +	GetInsufficientStandbyResource() *InsufficientStandbyResource
    +}
    +
    +func init() {
    +	t["BaseInsufficientStandbyResource"] = reflect.TypeOf((*InsufficientStandbyResource)(nil)).Elem()
    +}
    +
    +func (b *InvalidArgument) GetInvalidArgument() *InvalidArgument { return b }
    +
    +type BaseInvalidArgument interface {
    +	GetInvalidArgument() *InvalidArgument
    +}
    +
    +func init() {
    +	t["BaseInvalidArgument"] = reflect.TypeOf((*InvalidArgument)(nil)).Elem()
    +}
    +
    +func (b *InvalidCAMServer) GetInvalidCAMServer() *InvalidCAMServer { return b }
    +
    +type BaseInvalidCAMServer interface {
    +	GetInvalidCAMServer() *InvalidCAMServer
    +}
    +
    +func init() {
    +	t["BaseInvalidCAMServer"] = reflect.TypeOf((*InvalidCAMServer)(nil)).Elem()
    +}
    +
    +func (b *InvalidDatastore) GetInvalidDatastore() *InvalidDatastore { return b }
    +
    +type BaseInvalidDatastore interface {
    +	GetInvalidDatastore() *InvalidDatastore
    +}
    +
    +func init() {
    +	t["BaseInvalidDatastore"] = reflect.TypeOf((*InvalidDatastore)(nil)).Elem()
    +}
    +
    +func (b *InvalidDeviceSpec) GetInvalidDeviceSpec() *InvalidDeviceSpec { return b }
    +
    +type BaseInvalidDeviceSpec interface {
    +	GetInvalidDeviceSpec() *InvalidDeviceSpec
    +}
    +
    +func init() {
    +	t["BaseInvalidDeviceSpec"] = reflect.TypeOf((*InvalidDeviceSpec)(nil)).Elem()
    +}
    +
    +func (b *InvalidFolder) GetInvalidFolder() *InvalidFolder { return b }
    +
    +type BaseInvalidFolder interface {
    +	GetInvalidFolder() *InvalidFolder
    +}
    +
    +func init() {
    +	t["BaseInvalidFolder"] = reflect.TypeOf((*InvalidFolder)(nil)).Elem()
    +}
    +
    +func (b *InvalidFormat) GetInvalidFormat() *InvalidFormat { return b }
    +
    +type BaseInvalidFormat interface {
    +	GetInvalidFormat() *InvalidFormat
    +}
    +
    +func init() {
    +	t["BaseInvalidFormat"] = reflect.TypeOf((*InvalidFormat)(nil)).Elem()
    +}
    +
    +func (b *InvalidHostState) GetInvalidHostState() *InvalidHostState { return b }
    +
    +type BaseInvalidHostState interface {
    +	GetInvalidHostState() *InvalidHostState
    +}
    +
    +func init() {
    +	t["BaseInvalidHostState"] = reflect.TypeOf((*InvalidHostState)(nil)).Elem()
    +}
    +
    +func (b *InvalidLogin) GetInvalidLogin() *InvalidLogin { return b }
    +
    +type BaseInvalidLogin interface {
    +	GetInvalidLogin() *InvalidLogin
    +}
    +
    +func init() {
    +	t["BaseInvalidLogin"] = reflect.TypeOf((*InvalidLogin)(nil)).Elem()
    +}
    +
    +func (b *InvalidPropertyValue) GetInvalidPropertyValue() *InvalidPropertyValue { return b }
    +
    +type BaseInvalidPropertyValue interface {
    +	GetInvalidPropertyValue() *InvalidPropertyValue
    +}
    +
    +func init() {
    +	t["BaseInvalidPropertyValue"] = reflect.TypeOf((*InvalidPropertyValue)(nil)).Elem()
    +}
    +
    +func (b *InvalidRequest) GetInvalidRequest() *InvalidRequest { return b }
    +
    +type BaseInvalidRequest interface {
    +	GetInvalidRequest() *InvalidRequest
    +}
    +
    +func init() {
    +	t["BaseInvalidRequest"] = reflect.TypeOf((*InvalidRequest)(nil)).Elem()
    +}
    +
    +func (b *InvalidState) GetInvalidState() *InvalidState { return b }
    +
    +type BaseInvalidState interface {
    +	GetInvalidState() *InvalidState
    +}
    +
    +func init() {
    +	t["BaseInvalidState"] = reflect.TypeOf((*InvalidState)(nil)).Elem()
    +}
    +
    +func (b *InvalidVmConfig) GetInvalidVmConfig() *InvalidVmConfig { return b }
    +
    +type BaseInvalidVmConfig interface {
    +	GetInvalidVmConfig() *InvalidVmConfig
    +}
    +
    +func init() {
    +	t["BaseInvalidVmConfig"] = reflect.TypeOf((*InvalidVmConfig)(nil)).Elem()
    +}
    +
    +func (b *IoFilterInfo) GetIoFilterInfo() *IoFilterInfo { return b }
    +
    +type BaseIoFilterInfo interface {
    +	GetIoFilterInfo() *IoFilterInfo
    +}
    +
    +func init() {
    +	t["BaseIoFilterInfo"] = reflect.TypeOf((*IoFilterInfo)(nil)).Elem()
    +}
    +
    +func (b *IpAddress) GetIpAddress() *IpAddress { return b }
    +
    +type BaseIpAddress interface {
    +	GetIpAddress() *IpAddress
    +}
    +
    +func init() {
    +	t["BaseIpAddress"] = reflect.TypeOf((*IpAddress)(nil)).Elem()
    +}
    +
    +func (b *IscsiFault) GetIscsiFault() *IscsiFault { return b }
    +
    +type BaseIscsiFault interface {
    +	GetIscsiFault() *IscsiFault
    +}
    +
    +func init() {
    +	t["BaseIscsiFault"] = reflect.TypeOf((*IscsiFault)(nil)).Elem()
    +}
    +
    +func (b *LicenseEvent) GetLicenseEvent() *LicenseEvent { return b }
    +
    +type BaseLicenseEvent interface {
    +	GetLicenseEvent() *LicenseEvent
    +}
    +
    +func init() {
    +	t["BaseLicenseEvent"] = reflect.TypeOf((*LicenseEvent)(nil)).Elem()
    +}
    +
    +func (b *LicenseSource) GetLicenseSource() *LicenseSource { return b }
    +
    +type BaseLicenseSource interface {
    +	GetLicenseSource() *LicenseSource
    +}
    +
    +func init() {
    +	t["BaseLicenseSource"] = reflect.TypeOf((*LicenseSource)(nil)).Elem()
    +}
    +
    +func (b *MacAddress) GetMacAddress() *MacAddress { return b }
    +
    +type BaseMacAddress interface {
    +	GetMacAddress() *MacAddress
    +}
    +
    +func init() {
    +	t["BaseMacAddress"] = reflect.TypeOf((*MacAddress)(nil)).Elem()
    +}
    +
    +func (b *MethodFault) GetMethodFault() *MethodFault { return b }
    +
    +type BaseMethodFault interface {
    +	GetMethodFault() *MethodFault
    +}
    +
    +func init() {
    +	t["BaseMethodFault"] = reflect.TypeOf((*MethodFault)(nil)).Elem()
    +}
    +
    +func (b *MigrationEvent) GetMigrationEvent() *MigrationEvent { return b }
    +
    +type BaseMigrationEvent interface {
    +	GetMigrationEvent() *MigrationEvent
    +}
    +
    +func init() {
    +	t["BaseMigrationEvent"] = reflect.TypeOf((*MigrationEvent)(nil)).Elem()
    +}
    +
    +func (b *MigrationFault) GetMigrationFault() *MigrationFault { return b }
    +
    +type BaseMigrationFault interface {
    +	GetMigrationFault() *MigrationFault
    +}
    +
    +func init() {
    +	t["BaseMigrationFault"] = reflect.TypeOf((*MigrationFault)(nil)).Elem()
    +}
    +
    +func (b *MigrationFeatureNotSupported) GetMigrationFeatureNotSupported() *MigrationFeatureNotSupported {
    +	return b
    +}
    +
    +type BaseMigrationFeatureNotSupported interface {
    +	GetMigrationFeatureNotSupported() *MigrationFeatureNotSupported
    +}
    +
    +func init() {
    +	t["BaseMigrationFeatureNotSupported"] = reflect.TypeOf((*MigrationFeatureNotSupported)(nil)).Elem()
    +}
    +
    +func (b *MonthlyTaskScheduler) GetMonthlyTaskScheduler() *MonthlyTaskScheduler { return b }
    +
    +type BaseMonthlyTaskScheduler interface {
    +	GetMonthlyTaskScheduler() *MonthlyTaskScheduler
    +}
    +
    +func init() {
    +	t["BaseMonthlyTaskScheduler"] = reflect.TypeOf((*MonthlyTaskScheduler)(nil)).Elem()
    +}
    +
    +func (b *NasConfigFault) GetNasConfigFault() *NasConfigFault { return b }
    +
    +type BaseNasConfigFault interface {
    +	GetNasConfigFault() *NasConfigFault
    +}
    +
    +func init() {
    +	t["BaseNasConfigFault"] = reflect.TypeOf((*NasConfigFault)(nil)).Elem()
    +}
    +
    +func (b *NegatableExpression) GetNegatableExpression() *NegatableExpression { return b }
    +
    +type BaseNegatableExpression interface {
    +	GetNegatableExpression() *NegatableExpression
    +}
    +
    +func init() {
    +	t["BaseNegatableExpression"] = reflect.TypeOf((*NegatableExpression)(nil)).Elem()
    +}
    +
    +func (b *NetBIOSConfigInfo) GetNetBIOSConfigInfo() *NetBIOSConfigInfo { return b }
    +
    +type BaseNetBIOSConfigInfo interface {
    +	GetNetBIOSConfigInfo() *NetBIOSConfigInfo
    +}
    +
    +func init() {
    +	t["BaseNetBIOSConfigInfo"] = reflect.TypeOf((*NetBIOSConfigInfo)(nil)).Elem()
    +}
    +
    +func (b *NetworkSummary) GetNetworkSummary() *NetworkSummary { return b }
    +
    +type BaseNetworkSummary interface {
    +	GetNetworkSummary() *NetworkSummary
    +}
    +
    +func init() {
    +	t["BaseNetworkSummary"] = reflect.TypeOf((*NetworkSummary)(nil)).Elem()
    +}
    +
    +func (b *NoCompatibleHost) GetNoCompatibleHost() *NoCompatibleHost { return b }
    +
    +type BaseNoCompatibleHost interface {
    +	GetNoCompatibleHost() *NoCompatibleHost
    +}
    +
    +func init() {
    +	t["BaseNoCompatibleHost"] = reflect.TypeOf((*NoCompatibleHost)(nil)).Elem()
    +}
    +
    +func (b *NoPermission) GetNoPermission() *NoPermission { return b }
    +
    +type BaseNoPermission interface {
    +	GetNoPermission() *NoPermission
    +}
    +
    +func init() {
    +	t["BaseNoPermission"] = reflect.TypeOf((*NoPermission)(nil)).Elem()
    +}
    +
    +func (b *NodeDeploymentSpec) GetNodeDeploymentSpec() *NodeDeploymentSpec { return b }
    +
    +type BaseNodeDeploymentSpec interface {
    +	GetNodeDeploymentSpec() *NodeDeploymentSpec
    +}
    +
    +func init() {
    +	t["BaseNodeDeploymentSpec"] = reflect.TypeOf((*NodeDeploymentSpec)(nil)).Elem()
    +}
    +
    +func (b *NodeNetworkSpec) GetNodeNetworkSpec() *NodeNetworkSpec { return b }
    +
    +type BaseNodeNetworkSpec interface {
    +	GetNodeNetworkSpec() *NodeNetworkSpec
    +}
    +
    +func init() {
    +	t["BaseNodeNetworkSpec"] = reflect.TypeOf((*NodeNetworkSpec)(nil)).Elem()
    +}
    +
    +func (b *NotEnoughCpus) GetNotEnoughCpus() *NotEnoughCpus { return b }
    +
    +type BaseNotEnoughCpus interface {
    +	GetNotEnoughCpus() *NotEnoughCpus
    +}
    +
    +func init() {
    +	t["BaseNotEnoughCpus"] = reflect.TypeOf((*NotEnoughCpus)(nil)).Elem()
    +}
    +
    +func (b *NotEnoughLicenses) GetNotEnoughLicenses() *NotEnoughLicenses { return b }
    +
    +type BaseNotEnoughLicenses interface {
    +	GetNotEnoughLicenses() *NotEnoughLicenses
    +}
    +
    +func init() {
    +	t["BaseNotEnoughLicenses"] = reflect.TypeOf((*NotEnoughLicenses)(nil)).Elem()
    +}
    +
    +func (b *NotSupported) GetNotSupported() *NotSupported { return b }
    +
    +type BaseNotSupported interface {
    +	GetNotSupported() *NotSupported
    +}
    +
    +func init() {
    +	t["BaseNotSupported"] = reflect.TypeOf((*NotSupported)(nil)).Elem()
    +}
    +
    +func (b *NotSupportedHost) GetNotSupportedHost() *NotSupportedHost { return b }
    +
    +type BaseNotSupportedHost interface {
    +	GetNotSupportedHost() *NotSupportedHost
    +}
    +
    +func init() {
    +	t["BaseNotSupportedHost"] = reflect.TypeOf((*NotSupportedHost)(nil)).Elem()
    +}
    +
    +func (b *NotSupportedHostInCluster) GetNotSupportedHostInCluster() *NotSupportedHostInCluster {
    +	return b
    +}
    +
    +type BaseNotSupportedHostInCluster interface {
    +	GetNotSupportedHostInCluster() *NotSupportedHostInCluster
    +}
    +
    +func init() {
    +	t["BaseNotSupportedHostInCluster"] = reflect.TypeOf((*NotSupportedHostInCluster)(nil)).Elem()
    +}
    +
    +func (b *OptionType) GetOptionType() *OptionType { return b }
    +
    +type BaseOptionType interface {
    +	GetOptionType() *OptionType
    +}
    +
    +func init() {
    +	t["BaseOptionType"] = reflect.TypeOf((*OptionType)(nil)).Elem()
    +}
    +
    +func (b *OptionValue) GetOptionValue() *OptionValue { return b }
    +
    +type BaseOptionValue interface {
    +	GetOptionValue() *OptionValue
    +}
    +
    +func init() {
    +	t["BaseOptionValue"] = reflect.TypeOf((*OptionValue)(nil)).Elem()
    +}
    +
    +func (b *OvfAttribute) GetOvfAttribute() *OvfAttribute { return b }
    +
    +type BaseOvfAttribute interface {
    +	GetOvfAttribute() *OvfAttribute
    +}
    +
    +func init() {
    +	t["BaseOvfAttribute"] = reflect.TypeOf((*OvfAttribute)(nil)).Elem()
    +}
    +
    +func (b *OvfConnectedDevice) GetOvfConnectedDevice() *OvfConnectedDevice { return b }
    +
    +type BaseOvfConnectedDevice interface {
    +	GetOvfConnectedDevice() *OvfConnectedDevice
    +}
    +
    +func init() {
    +	t["BaseOvfConnectedDevice"] = reflect.TypeOf((*OvfConnectedDevice)(nil)).Elem()
    +}
    +
    +func (b *OvfConstraint) GetOvfConstraint() *OvfConstraint { return b }
    +
    +type BaseOvfConstraint interface {
    +	GetOvfConstraint() *OvfConstraint
    +}
    +
    +func init() {
    +	t["BaseOvfConstraint"] = reflect.TypeOf((*OvfConstraint)(nil)).Elem()
    +}
    +
    +func (b *OvfConsumerCallbackFault) GetOvfConsumerCallbackFault() *OvfConsumerCallbackFault { return b }
    +
    +type BaseOvfConsumerCallbackFault interface {
    +	GetOvfConsumerCallbackFault() *OvfConsumerCallbackFault
    +}
    +
    +func init() {
    +	t["BaseOvfConsumerCallbackFault"] = reflect.TypeOf((*OvfConsumerCallbackFault)(nil)).Elem()
    +}
    +
    +func (b *OvfElement) GetOvfElement() *OvfElement { return b }
    +
    +type BaseOvfElement interface {
    +	GetOvfElement() *OvfElement
    +}
    +
    +func init() {
    +	t["BaseOvfElement"] = reflect.TypeOf((*OvfElement)(nil)).Elem()
    +}
    +
    +func (b *OvfExport) GetOvfExport() *OvfExport { return b }
    +
    +type BaseOvfExport interface {
    +	GetOvfExport() *OvfExport
    +}
    +
    +func init() {
    +	t["BaseOvfExport"] = reflect.TypeOf((*OvfExport)(nil)).Elem()
    +}
    +
    +func (b *OvfFault) GetOvfFault() *OvfFault { return b }
    +
    +type BaseOvfFault interface {
    +	GetOvfFault() *OvfFault
    +}
    +
    +func init() {
    +	t["BaseOvfFault"] = reflect.TypeOf((*OvfFault)(nil)).Elem()
    +}
    +
    +func (b *OvfHardwareExport) GetOvfHardwareExport() *OvfHardwareExport { return b }
    +
    +type BaseOvfHardwareExport interface {
    +	GetOvfHardwareExport() *OvfHardwareExport
    +}
    +
    +func init() {
    +	t["BaseOvfHardwareExport"] = reflect.TypeOf((*OvfHardwareExport)(nil)).Elem()
    +}
    +
    +func (b *OvfImport) GetOvfImport() *OvfImport { return b }
    +
    +type BaseOvfImport interface {
    +	GetOvfImport() *OvfImport
    +}
    +
    +func init() {
    +	t["BaseOvfImport"] = reflect.TypeOf((*OvfImport)(nil)).Elem()
    +}
    +
    +func (b *OvfInvalidPackage) GetOvfInvalidPackage() *OvfInvalidPackage { return b }
    +
    +type BaseOvfInvalidPackage interface {
    +	GetOvfInvalidPackage() *OvfInvalidPackage
    +}
    +
    +func init() {
    +	t["BaseOvfInvalidPackage"] = reflect.TypeOf((*OvfInvalidPackage)(nil)).Elem()
    +}
    +
    +func (b *OvfInvalidValue) GetOvfInvalidValue() *OvfInvalidValue { return b }
    +
    +type BaseOvfInvalidValue interface {
    +	GetOvfInvalidValue() *OvfInvalidValue
    +}
    +
    +func init() {
    +	t["BaseOvfInvalidValue"] = reflect.TypeOf((*OvfInvalidValue)(nil)).Elem()
    +}
    +
    +func (b *OvfManagerCommonParams) GetOvfManagerCommonParams() *OvfManagerCommonParams { return b }
    +
    +type BaseOvfManagerCommonParams interface {
    +	GetOvfManagerCommonParams() *OvfManagerCommonParams
    +}
    +
    +func init() {
    +	t["BaseOvfManagerCommonParams"] = reflect.TypeOf((*OvfManagerCommonParams)(nil)).Elem()
    +}
    +
    +func (b *OvfMissingElement) GetOvfMissingElement() *OvfMissingElement { return b }
    +
    +type BaseOvfMissingElement interface {
    +	GetOvfMissingElement() *OvfMissingElement
    +}
    +
    +func init() {
    +	t["BaseOvfMissingElement"] = reflect.TypeOf((*OvfMissingElement)(nil)).Elem()
    +}
    +
    +func (b *OvfProperty) GetOvfProperty() *OvfProperty { return b }
    +
    +type BaseOvfProperty interface {
    +	GetOvfProperty() *OvfProperty
    +}
    +
    +func init() {
    +	t["BaseOvfProperty"] = reflect.TypeOf((*OvfProperty)(nil)).Elem()
    +}
    +
    +func (b *OvfSystemFault) GetOvfSystemFault() *OvfSystemFault { return b }
    +
    +type BaseOvfSystemFault interface {
    +	GetOvfSystemFault() *OvfSystemFault
    +}
    +
    +func init() {
    +	t["BaseOvfSystemFault"] = reflect.TypeOf((*OvfSystemFault)(nil)).Elem()
    +}
    +
    +func (b *OvfUnsupportedAttribute) GetOvfUnsupportedAttribute() *OvfUnsupportedAttribute { return b }
    +
    +type BaseOvfUnsupportedAttribute interface {
    +	GetOvfUnsupportedAttribute() *OvfUnsupportedAttribute
    +}
    +
    +func init() {
    +	t["BaseOvfUnsupportedAttribute"] = reflect.TypeOf((*OvfUnsupportedAttribute)(nil)).Elem()
    +}
    +
    +func (b *OvfUnsupportedElement) GetOvfUnsupportedElement() *OvfUnsupportedElement { return b }
    +
    +type BaseOvfUnsupportedElement interface {
    +	GetOvfUnsupportedElement() *OvfUnsupportedElement
    +}
    +
    +func init() {
    +	t["BaseOvfUnsupportedElement"] = reflect.TypeOf((*OvfUnsupportedElement)(nil)).Elem()
    +}
    +
    +func (b *OvfUnsupportedPackage) GetOvfUnsupportedPackage() *OvfUnsupportedPackage { return b }
    +
    +type BaseOvfUnsupportedPackage interface {
    +	GetOvfUnsupportedPackage() *OvfUnsupportedPackage
    +}
    +
    +func init() {
    +	t["BaseOvfUnsupportedPackage"] = reflect.TypeOf((*OvfUnsupportedPackage)(nil)).Elem()
    +}
    +
    +func (b *PatchMetadataInvalid) GetPatchMetadataInvalid() *PatchMetadataInvalid { return b }
    +
    +type BasePatchMetadataInvalid interface {
    +	GetPatchMetadataInvalid() *PatchMetadataInvalid
    +}
    +
    +func init() {
    +	t["BasePatchMetadataInvalid"] = reflect.TypeOf((*PatchMetadataInvalid)(nil)).Elem()
    +}
    +
    +func (b *PatchNotApplicable) GetPatchNotApplicable() *PatchNotApplicable { return b }
    +
    +type BasePatchNotApplicable interface {
    +	GetPatchNotApplicable() *PatchNotApplicable
    +}
    +
    +func init() {
    +	t["BasePatchNotApplicable"] = reflect.TypeOf((*PatchNotApplicable)(nil)).Elem()
    +}
    +
    +func (b *PerfEntityMetricBase) GetPerfEntityMetricBase() *PerfEntityMetricBase { return b }
    +
    +type BasePerfEntityMetricBase interface {
    +	GetPerfEntityMetricBase() *PerfEntityMetricBase
    +}
    +
    +func init() {
    +	t["BasePerfEntityMetricBase"] = reflect.TypeOf((*PerfEntityMetricBase)(nil)).Elem()
    +}
    +
    +func (b *PerfMetricSeries) GetPerfMetricSeries() *PerfMetricSeries { return b }
    +
    +type BasePerfMetricSeries interface {
    +	GetPerfMetricSeries() *PerfMetricSeries
    +}
    +
    +func init() {
    +	t["BasePerfMetricSeries"] = reflect.TypeOf((*PerfMetricSeries)(nil)).Elem()
    +}
    +
    +func (b *PermissionEvent) GetPermissionEvent() *PermissionEvent { return b }
    +
    +type BasePermissionEvent interface {
    +	GetPermissionEvent() *PermissionEvent
    +}
    +
    +func init() {
    +	t["BasePermissionEvent"] = reflect.TypeOf((*PermissionEvent)(nil)).Elem()
    +}
    +
    +func (b *PhysicalNicHint) GetPhysicalNicHint() *PhysicalNicHint { return b }
    +
    +type BasePhysicalNicHint interface {
    +	GetPhysicalNicHint() *PhysicalNicHint
    +}
    +
    +func init() {
    +	t["BasePhysicalNicHint"] = reflect.TypeOf((*PhysicalNicHint)(nil)).Elem()
    +}
    +
    +func (b *PlatformConfigFault) GetPlatformConfigFault() *PlatformConfigFault { return b }
    +
    +type BasePlatformConfigFault interface {
    +	GetPlatformConfigFault() *PlatformConfigFault
    +}
    +
    +func init() {
    +	t["BasePlatformConfigFault"] = reflect.TypeOf((*PlatformConfigFault)(nil)).Elem()
    +}
    +
    +func (b *PolicyOption) GetPolicyOption() *PolicyOption { return b }
    +
    +type BasePolicyOption interface {
    +	GetPolicyOption() *PolicyOption
    +}
    +
    +func init() {
    +	t["BasePolicyOption"] = reflect.TypeOf((*PolicyOption)(nil)).Elem()
    +}
    +
    +func (b *PortGroupProfile) GetPortGroupProfile() *PortGroupProfile { return b }
    +
    +type BasePortGroupProfile interface {
    +	GetPortGroupProfile() *PortGroupProfile
    +}
    +
    +func init() {
    +	t["BasePortGroupProfile"] = reflect.TypeOf((*PortGroupProfile)(nil)).Elem()
    +}
    +
    +func (b *ProfileConfigInfo) GetProfileConfigInfo() *ProfileConfigInfo { return b }
    +
    +type BaseProfileConfigInfo interface {
    +	GetProfileConfigInfo() *ProfileConfigInfo
    +}
    +
    +func init() {
    +	t["BaseProfileConfigInfo"] = reflect.TypeOf((*ProfileConfigInfo)(nil)).Elem()
    +}
    +
    +func (b *ProfileCreateSpec) GetProfileCreateSpec() *ProfileCreateSpec { return b }
    +
    +type BaseProfileCreateSpec interface {
    +	GetProfileCreateSpec() *ProfileCreateSpec
    +}
    +
    +func init() {
    +	t["BaseProfileCreateSpec"] = reflect.TypeOf((*ProfileCreateSpec)(nil)).Elem()
    +}
    +
    +func (b *ProfileEvent) GetProfileEvent() *ProfileEvent { return b }
    +
    +type BaseProfileEvent interface {
    +	GetProfileEvent() *ProfileEvent
    +}
    +
    +func init() {
    +	t["BaseProfileEvent"] = reflect.TypeOf((*ProfileEvent)(nil)).Elem()
    +}
    +
    +func (b *ProfileExecuteResult) GetProfileExecuteResult() *ProfileExecuteResult { return b }
    +
    +type BaseProfileExecuteResult interface {
    +	GetProfileExecuteResult() *ProfileExecuteResult
    +}
    +
    +func init() {
    +	t["BaseProfileExecuteResult"] = reflect.TypeOf((*ProfileExecuteResult)(nil)).Elem()
    +}
    +
    +func (b *ProfileExpression) GetProfileExpression() *ProfileExpression { return b }
    +
    +type BaseProfileExpression interface {
    +	GetProfileExpression() *ProfileExpression
    +}
    +
    +func init() {
    +	t["BaseProfileExpression"] = reflect.TypeOf((*ProfileExpression)(nil)).Elem()
    +}
    +
    +func (b *ProfilePolicyOptionMetadata) GetProfilePolicyOptionMetadata() *ProfilePolicyOptionMetadata {
    +	return b
    +}
    +
    +type BaseProfilePolicyOptionMetadata interface {
    +	GetProfilePolicyOptionMetadata() *ProfilePolicyOptionMetadata
    +}
    +
    +func init() {
    +	t["BaseProfilePolicyOptionMetadata"] = reflect.TypeOf((*ProfilePolicyOptionMetadata)(nil)).Elem()
    +}
    +
    +func (b *ProfileSerializedCreateSpec) GetProfileSerializedCreateSpec() *ProfileSerializedCreateSpec {
    +	return b
    +}
    +
    +type BaseProfileSerializedCreateSpec interface {
    +	GetProfileSerializedCreateSpec() *ProfileSerializedCreateSpec
    +}
    +
    +func init() {
    +	t["BaseProfileSerializedCreateSpec"] = reflect.TypeOf((*ProfileSerializedCreateSpec)(nil)).Elem()
    +}
    +
    +func (b *RDMNotSupported) GetRDMNotSupported() *RDMNotSupported { return b }
    +
    +type BaseRDMNotSupported interface {
    +	GetRDMNotSupported() *RDMNotSupported
    +}
    +
    +func init() {
    +	t["BaseRDMNotSupported"] = reflect.TypeOf((*RDMNotSupported)(nil)).Elem()
    +}
    +
    +func (b *RecurrentTaskScheduler) GetRecurrentTaskScheduler() *RecurrentTaskScheduler { return b }
    +
    +type BaseRecurrentTaskScheduler interface {
    +	GetRecurrentTaskScheduler() *RecurrentTaskScheduler
    +}
    +
    +func init() {
    +	t["BaseRecurrentTaskScheduler"] = reflect.TypeOf((*RecurrentTaskScheduler)(nil)).Elem()
    +}
    +
    +func (b *ReplicationConfigFault) GetReplicationConfigFault() *ReplicationConfigFault { return b }
    +
    +type BaseReplicationConfigFault interface {
    +	GetReplicationConfigFault() *ReplicationConfigFault
    +}
    +
    +func init() {
    +	t["BaseReplicationConfigFault"] = reflect.TypeOf((*ReplicationConfigFault)(nil)).Elem()
    +}
    +
    +func (b *ReplicationFault) GetReplicationFault() *ReplicationFault { return b }
    +
    +type BaseReplicationFault interface {
    +	GetReplicationFault() *ReplicationFault
    +}
    +
    +func init() {
    +	t["BaseReplicationFault"] = reflect.TypeOf((*ReplicationFault)(nil)).Elem()
    +}
    +
    +func (b *ReplicationVmFault) GetReplicationVmFault() *ReplicationVmFault { return b }
    +
    +type BaseReplicationVmFault interface {
    +	GetReplicationVmFault() *ReplicationVmFault
    +}
    +
    +func init() {
    +	t["BaseReplicationVmFault"] = reflect.TypeOf((*ReplicationVmFault)(nil)).Elem()
    +}
    +
    +func (b *ResourceInUse) GetResourceInUse() *ResourceInUse { return b }
    +
    +type BaseResourceInUse interface {
    +	GetResourceInUse() *ResourceInUse
    +}
    +
    +func init() {
    +	t["BaseResourceInUse"] = reflect.TypeOf((*ResourceInUse)(nil)).Elem()
    +}
    +
    +func (b *ResourcePoolEvent) GetResourcePoolEvent() *ResourcePoolEvent { return b }
    +
    +type BaseResourcePoolEvent interface {
    +	GetResourcePoolEvent() *ResourcePoolEvent
    +}
    +
    +func init() {
    +	t["BaseResourcePoolEvent"] = reflect.TypeOf((*ResourcePoolEvent)(nil)).Elem()
    +}
    +
    +func (b *ResourcePoolSummary) GetResourcePoolSummary() *ResourcePoolSummary { return b }
    +
    +type BaseResourcePoolSummary interface {
    +	GetResourcePoolSummary() *ResourcePoolSummary
    +}
    +
    +func init() {
    +	t["BaseResourcePoolSummary"] = reflect.TypeOf((*ResourcePoolSummary)(nil)).Elem()
    +}
    +
    +func (b *RoleEvent) GetRoleEvent() *RoleEvent { return b }
    +
    +type BaseRoleEvent interface {
    +	GetRoleEvent() *RoleEvent
    +}
    +
    +func init() {
    +	t["BaseRoleEvent"] = reflect.TypeOf((*RoleEvent)(nil)).Elem()
    +}
    +
    +func (b *RuntimeFault) GetRuntimeFault() *RuntimeFault { return b }
    +
    +type BaseRuntimeFault interface {
    +	GetRuntimeFault() *RuntimeFault
    +}
    +
    +func init() {
    +	t["BaseRuntimeFault"] = reflect.TypeOf((*RuntimeFault)(nil)).Elem()
    +}
    +
    +func (b *ScheduledTaskEvent) GetScheduledTaskEvent() *ScheduledTaskEvent { return b }
    +
    +type BaseScheduledTaskEvent interface {
    +	GetScheduledTaskEvent() *ScheduledTaskEvent
    +}
    +
    +func init() {
    +	t["BaseScheduledTaskEvent"] = reflect.TypeOf((*ScheduledTaskEvent)(nil)).Elem()
    +}
    +
    +func (b *ScheduledTaskSpec) GetScheduledTaskSpec() *ScheduledTaskSpec { return b }
    +
    +type BaseScheduledTaskSpec interface {
    +	GetScheduledTaskSpec() *ScheduledTaskSpec
    +}
    +
    +func init() {
    +	t["BaseScheduledTaskSpec"] = reflect.TypeOf((*ScheduledTaskSpec)(nil)).Elem()
    +}
    +
    +func (b *ScsiLun) GetScsiLun() *ScsiLun { return b }
    +
    +type BaseScsiLun interface {
    +	GetScsiLun() *ScsiLun
    +}
    +
    +func init() {
    +	t["BaseScsiLun"] = reflect.TypeOf((*ScsiLun)(nil)).Elem()
    +}
    +
    +func (b *SecurityError) GetSecurityError() *SecurityError { return b }
    +
    +type BaseSecurityError interface {
    +	GetSecurityError() *SecurityError
    +}
    +
    +func init() {
    +	t["BaseSecurityError"] = reflect.TypeOf((*SecurityError)(nil)).Elem()
    +}
    +
    +func (b *SelectionSet) GetSelectionSet() *SelectionSet { return b }
    +
    +type BaseSelectionSet interface {
    +	GetSelectionSet() *SelectionSet
    +}
    +
    +func init() {
    +	t["BaseSelectionSet"] = reflect.TypeOf((*SelectionSet)(nil)).Elem()
    +}
    +
    +func (b *SelectionSpec) GetSelectionSpec() *SelectionSpec { return b }
    +
    +type BaseSelectionSpec interface {
    +	GetSelectionSpec() *SelectionSpec
    +}
    +
    +func init() {
    +	t["BaseSelectionSpec"] = reflect.TypeOf((*SelectionSpec)(nil)).Elem()
    +}
    +
    +func (b *ServiceLocatorCredential) GetServiceLocatorCredential() *ServiceLocatorCredential { return b }
    +
    +type BaseServiceLocatorCredential interface {
    +	GetServiceLocatorCredential() *ServiceLocatorCredential
    +}
    +
    +func init() {
    +	t["BaseServiceLocatorCredential"] = reflect.TypeOf((*ServiceLocatorCredential)(nil)).Elem()
    +}
    +
    +func (b *SessionEvent) GetSessionEvent() *SessionEvent { return b }
    +
    +type BaseSessionEvent interface {
    +	GetSessionEvent() *SessionEvent
    +}
    +
    +func init() {
    +	t["BaseSessionEvent"] = reflect.TypeOf((*SessionEvent)(nil)).Elem()
    +}
    +
    +func (b *SessionManagerServiceRequestSpec) GetSessionManagerServiceRequestSpec() *SessionManagerServiceRequestSpec {
    +	return b
    +}
    +
    +type BaseSessionManagerServiceRequestSpec interface {
    +	GetSessionManagerServiceRequestSpec() *SessionManagerServiceRequestSpec
    +}
    +
    +func init() {
    +	t["BaseSessionManagerServiceRequestSpec"] = reflect.TypeOf((*SessionManagerServiceRequestSpec)(nil)).Elem()
    +}
    +
    +func (b *SnapshotCopyNotSupported) GetSnapshotCopyNotSupported() *SnapshotCopyNotSupported { return b }
    +
    +type BaseSnapshotCopyNotSupported interface {
    +	GetSnapshotCopyNotSupported() *SnapshotCopyNotSupported
    +}
    +
    +func init() {
    +	t["BaseSnapshotCopyNotSupported"] = reflect.TypeOf((*SnapshotCopyNotSupported)(nil)).Elem()
    +}
    +
    +func (b *SnapshotFault) GetSnapshotFault() *SnapshotFault { return b }
    +
    +type BaseSnapshotFault interface {
    +	GetSnapshotFault() *SnapshotFault
    +}
    +
    +func init() {
    +	t["BaseSnapshotFault"] = reflect.TypeOf((*SnapshotFault)(nil)).Elem()
    +}
    +
    +func (b *TaskEvent) GetTaskEvent() *TaskEvent { return b }
    +
    +type BaseTaskEvent interface {
    +	GetTaskEvent() *TaskEvent
    +}
    +
    +func init() {
    +	t["BaseTaskEvent"] = reflect.TypeOf((*TaskEvent)(nil)).Elem()
    +}
    +
    +func (b *TaskInProgress) GetTaskInProgress() *TaskInProgress { return b }
    +
    +type BaseTaskInProgress interface {
    +	GetTaskInProgress() *TaskInProgress
    +}
    +
    +func init() {
    +	t["BaseTaskInProgress"] = reflect.TypeOf((*TaskInProgress)(nil)).Elem()
    +}
    +
    +func (b *TaskReason) GetTaskReason() *TaskReason { return b }
    +
    +type BaseTaskReason interface {
    +	GetTaskReason() *TaskReason
    +}
    +
    +func init() {
    +	t["BaseTaskReason"] = reflect.TypeOf((*TaskReason)(nil)).Elem()
    +}
    +
    +func (b *TaskScheduler) GetTaskScheduler() *TaskScheduler { return b }
    +
    +type BaseTaskScheduler interface {
    +	GetTaskScheduler() *TaskScheduler
    +}
    +
    +func init() {
    +	t["BaseTaskScheduler"] = reflect.TypeOf((*TaskScheduler)(nil)).Elem()
    +}
    +
    +func (b *TemplateUpgradeEvent) GetTemplateUpgradeEvent() *TemplateUpgradeEvent { return b }
    +
    +type BaseTemplateUpgradeEvent interface {
    +	GetTemplateUpgradeEvent() *TemplateUpgradeEvent
    +}
    +
    +func init() {
    +	t["BaseTemplateUpgradeEvent"] = reflect.TypeOf((*TemplateUpgradeEvent)(nil)).Elem()
    +}
    +
    +func (b *Timedout) GetTimedout() *Timedout { return b }
    +
    +type BaseTimedout interface {
    +	GetTimedout() *Timedout
    +}
    +
    +func init() {
    +	t["BaseTimedout"] = reflect.TypeOf((*Timedout)(nil)).Elem()
    +}
    +
    +func (b *TypeDescription) GetTypeDescription() *TypeDescription { return b }
    +
    +type BaseTypeDescription interface {
    +	GetTypeDescription() *TypeDescription
    +}
    +
    +func init() {
    +	t["BaseTypeDescription"] = reflect.TypeOf((*TypeDescription)(nil)).Elem()
    +}
    +
    +func (b *UnsupportedDatastore) GetUnsupportedDatastore() *UnsupportedDatastore { return b }
    +
    +type BaseUnsupportedDatastore interface {
    +	GetUnsupportedDatastore() *UnsupportedDatastore
    +}
    +
    +func init() {
    +	t["BaseUnsupportedDatastore"] = reflect.TypeOf((*UnsupportedDatastore)(nil)).Elem()
    +}
    +
    +func (b *UpgradeEvent) GetUpgradeEvent() *UpgradeEvent { return b }
    +
    +type BaseUpgradeEvent interface {
    +	GetUpgradeEvent() *UpgradeEvent
    +}
    +
    +func init() {
    +	t["BaseUpgradeEvent"] = reflect.TypeOf((*UpgradeEvent)(nil)).Elem()
    +}
    +
    +func (b *UserSearchResult) GetUserSearchResult() *UserSearchResult { return b }
    +
    +type BaseUserSearchResult interface {
    +	GetUserSearchResult() *UserSearchResult
    +}
    +
    +func init() {
    +	t["BaseUserSearchResult"] = reflect.TypeOf((*UserSearchResult)(nil)).Elem()
    +}
    +
    +func (b *VAppConfigFault) GetVAppConfigFault() *VAppConfigFault { return b }
    +
    +type BaseVAppConfigFault interface {
    +	GetVAppConfigFault() *VAppConfigFault
    +}
    +
    +func init() {
    +	t["BaseVAppConfigFault"] = reflect.TypeOf((*VAppConfigFault)(nil)).Elem()
    +}
    +
    +func (b *VAppPropertyFault) GetVAppPropertyFault() *VAppPropertyFault { return b }
    +
    +type BaseVAppPropertyFault interface {
    +	GetVAppPropertyFault() *VAppPropertyFault
    +}
    +
    +func init() {
    +	t["BaseVAppPropertyFault"] = reflect.TypeOf((*VAppPropertyFault)(nil)).Elem()
    +}
    +
    +func (b *VMotionInterfaceIssue) GetVMotionInterfaceIssue() *VMotionInterfaceIssue { return b }
    +
    +type BaseVMotionInterfaceIssue interface {
    +	GetVMotionInterfaceIssue() *VMotionInterfaceIssue
    +}
    +
    +func init() {
    +	t["BaseVMotionInterfaceIssue"] = reflect.TypeOf((*VMotionInterfaceIssue)(nil)).Elem()
    +}
    +
    +func (b *VMwareDVSHealthCheckConfig) GetVMwareDVSHealthCheckConfig() *VMwareDVSHealthCheckConfig {
    +	return b
    +}
    +
    +type BaseVMwareDVSHealthCheckConfig interface {
    +	GetVMwareDVSHealthCheckConfig() *VMwareDVSHealthCheckConfig
    +}
    +
    +func init() {
    +	t["BaseVMwareDVSHealthCheckConfig"] = reflect.TypeOf((*VMwareDVSHealthCheckConfig)(nil)).Elem()
    +}
    +
    +func (b *VimFault) GetVimFault() *VimFault { return b }
    +
    +type BaseVimFault interface {
    +	GetVimFault() *VimFault
    +}
    +
    +func init() {
    +	t["BaseVimFault"] = reflect.TypeOf((*VimFault)(nil)).Elem()
    +}
    +
    +func (b *VirtualController) GetVirtualController() *VirtualController { return b }
    +
    +type BaseVirtualController interface {
    +	GetVirtualController() *VirtualController
    +}
    +
    +func init() {
    +	t["BaseVirtualController"] = reflect.TypeOf((*VirtualController)(nil)).Elem()
    +}
    +
    +func (b *VirtualControllerOption) GetVirtualControllerOption() *VirtualControllerOption { return b }
    +
    +type BaseVirtualControllerOption interface {
    +	GetVirtualControllerOption() *VirtualControllerOption
    +}
    +
    +func init() {
    +	t["BaseVirtualControllerOption"] = reflect.TypeOf((*VirtualControllerOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDevice) GetVirtualDevice() *VirtualDevice { return b }
    +
    +type BaseVirtualDevice interface {
    +	GetVirtualDevice() *VirtualDevice
    +}
    +
    +func init() {
    +	t["BaseVirtualDevice"] = reflect.TypeOf((*VirtualDevice)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceBackingInfo) GetVirtualDeviceBackingInfo() *VirtualDeviceBackingInfo { return b }
    +
    +type BaseVirtualDeviceBackingInfo interface {
    +	GetVirtualDeviceBackingInfo() *VirtualDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceBackingInfo"] = reflect.TypeOf((*VirtualDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceBackingOption) GetVirtualDeviceBackingOption() *VirtualDeviceBackingOption {
    +	return b
    +}
    +
    +type BaseVirtualDeviceBackingOption interface {
    +	GetVirtualDeviceBackingOption() *VirtualDeviceBackingOption
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceBackingOption"] = reflect.TypeOf((*VirtualDeviceBackingOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceBusSlotInfo) GetVirtualDeviceBusSlotInfo() *VirtualDeviceBusSlotInfo { return b }
    +
    +type BaseVirtualDeviceBusSlotInfo interface {
    +	GetVirtualDeviceBusSlotInfo() *VirtualDeviceBusSlotInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceBusSlotInfo"] = reflect.TypeOf((*VirtualDeviceBusSlotInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceConfigSpec) GetVirtualDeviceConfigSpec() *VirtualDeviceConfigSpec { return b }
    +
    +type BaseVirtualDeviceConfigSpec interface {
    +	GetVirtualDeviceConfigSpec() *VirtualDeviceConfigSpec
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceConfigSpec"] = reflect.TypeOf((*VirtualDeviceConfigSpec)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceDeviceBackingInfo) GetVirtualDeviceDeviceBackingInfo() *VirtualDeviceDeviceBackingInfo {
    +	return b
    +}
    +
    +type BaseVirtualDeviceDeviceBackingInfo interface {
    +	GetVirtualDeviceDeviceBackingInfo() *VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceDeviceBackingInfo"] = reflect.TypeOf((*VirtualDeviceDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceDeviceBackingOption) GetVirtualDeviceDeviceBackingOption() *VirtualDeviceDeviceBackingOption {
    +	return b
    +}
    +
    +type BaseVirtualDeviceDeviceBackingOption interface {
    +	GetVirtualDeviceDeviceBackingOption() *VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceDeviceBackingOption"] = reflect.TypeOf((*VirtualDeviceDeviceBackingOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceFileBackingInfo) GetVirtualDeviceFileBackingInfo() *VirtualDeviceFileBackingInfo {
    +	return b
    +}
    +
    +type BaseVirtualDeviceFileBackingInfo interface {
    +	GetVirtualDeviceFileBackingInfo() *VirtualDeviceFileBackingInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceFileBackingInfo"] = reflect.TypeOf((*VirtualDeviceFileBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceFileBackingOption) GetVirtualDeviceFileBackingOption() *VirtualDeviceFileBackingOption {
    +	return b
    +}
    +
    +type BaseVirtualDeviceFileBackingOption interface {
    +	GetVirtualDeviceFileBackingOption() *VirtualDeviceFileBackingOption
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceFileBackingOption"] = reflect.TypeOf((*VirtualDeviceFileBackingOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceOption) GetVirtualDeviceOption() *VirtualDeviceOption { return b }
    +
    +type BaseVirtualDeviceOption interface {
    +	GetVirtualDeviceOption() *VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceOption"] = reflect.TypeOf((*VirtualDeviceOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDevicePciBusSlotInfo) GetVirtualDevicePciBusSlotInfo() *VirtualDevicePciBusSlotInfo {
    +	return b
    +}
    +
    +type BaseVirtualDevicePciBusSlotInfo interface {
    +	GetVirtualDevicePciBusSlotInfo() *VirtualDevicePciBusSlotInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDevicePciBusSlotInfo"] = reflect.TypeOf((*VirtualDevicePciBusSlotInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDevicePipeBackingInfo) GetVirtualDevicePipeBackingInfo() *VirtualDevicePipeBackingInfo {
    +	return b
    +}
    +
    +type BaseVirtualDevicePipeBackingInfo interface {
    +	GetVirtualDevicePipeBackingInfo() *VirtualDevicePipeBackingInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDevicePipeBackingInfo"] = reflect.TypeOf((*VirtualDevicePipeBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDevicePipeBackingOption) GetVirtualDevicePipeBackingOption() *VirtualDevicePipeBackingOption {
    +	return b
    +}
    +
    +type BaseVirtualDevicePipeBackingOption interface {
    +	GetVirtualDevicePipeBackingOption() *VirtualDevicePipeBackingOption
    +}
    +
    +func init() {
    +	t["BaseVirtualDevicePipeBackingOption"] = reflect.TypeOf((*VirtualDevicePipeBackingOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceRemoteDeviceBackingInfo) GetVirtualDeviceRemoteDeviceBackingInfo() *VirtualDeviceRemoteDeviceBackingInfo {
    +	return b
    +}
    +
    +type BaseVirtualDeviceRemoteDeviceBackingInfo interface {
    +	GetVirtualDeviceRemoteDeviceBackingInfo() *VirtualDeviceRemoteDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceRemoteDeviceBackingInfo"] = reflect.TypeOf((*VirtualDeviceRemoteDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceRemoteDeviceBackingOption) GetVirtualDeviceRemoteDeviceBackingOption() *VirtualDeviceRemoteDeviceBackingOption {
    +	return b
    +}
    +
    +type BaseVirtualDeviceRemoteDeviceBackingOption interface {
    +	GetVirtualDeviceRemoteDeviceBackingOption() *VirtualDeviceRemoteDeviceBackingOption
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceRemoteDeviceBackingOption"] = reflect.TypeOf((*VirtualDeviceRemoteDeviceBackingOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceURIBackingInfo) GetVirtualDeviceURIBackingInfo() *VirtualDeviceURIBackingInfo {
    +	return b
    +}
    +
    +type BaseVirtualDeviceURIBackingInfo interface {
    +	GetVirtualDeviceURIBackingInfo() *VirtualDeviceURIBackingInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceURIBackingInfo"] = reflect.TypeOf((*VirtualDeviceURIBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDeviceURIBackingOption) GetVirtualDeviceURIBackingOption() *VirtualDeviceURIBackingOption {
    +	return b
    +}
    +
    +type BaseVirtualDeviceURIBackingOption interface {
    +	GetVirtualDeviceURIBackingOption() *VirtualDeviceURIBackingOption
    +}
    +
    +func init() {
    +	t["BaseVirtualDeviceURIBackingOption"] = reflect.TypeOf((*VirtualDeviceURIBackingOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDiskRawDiskVer2BackingInfo) GetVirtualDiskRawDiskVer2BackingInfo() *VirtualDiskRawDiskVer2BackingInfo {
    +	return b
    +}
    +
    +type BaseVirtualDiskRawDiskVer2BackingInfo interface {
    +	GetVirtualDiskRawDiskVer2BackingInfo() *VirtualDiskRawDiskVer2BackingInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualDiskRawDiskVer2BackingInfo"] = reflect.TypeOf((*VirtualDiskRawDiskVer2BackingInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualDiskRawDiskVer2BackingOption) GetVirtualDiskRawDiskVer2BackingOption() *VirtualDiskRawDiskVer2BackingOption {
    +	return b
    +}
    +
    +type BaseVirtualDiskRawDiskVer2BackingOption interface {
    +	GetVirtualDiskRawDiskVer2BackingOption() *VirtualDiskRawDiskVer2BackingOption
    +}
    +
    +func init() {
    +	t["BaseVirtualDiskRawDiskVer2BackingOption"] = reflect.TypeOf((*VirtualDiskRawDiskVer2BackingOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualDiskSpec) GetVirtualDiskSpec() *VirtualDiskSpec { return b }
    +
    +type BaseVirtualDiskSpec interface {
    +	GetVirtualDiskSpec() *VirtualDiskSpec
    +}
    +
    +func init() {
    +	t["BaseVirtualDiskSpec"] = reflect.TypeOf((*VirtualDiskSpec)(nil)).Elem()
    +}
    +
    +func (b *VirtualEthernetCard) GetVirtualEthernetCard() *VirtualEthernetCard { return b }
    +
    +type BaseVirtualEthernetCard interface {
    +	GetVirtualEthernetCard() *VirtualEthernetCard
    +}
    +
    +func init() {
    +	t["BaseVirtualEthernetCard"] = reflect.TypeOf((*VirtualEthernetCard)(nil)).Elem()
    +}
    +
    +func (b *VirtualEthernetCardOption) GetVirtualEthernetCardOption() *VirtualEthernetCardOption {
    +	return b
    +}
    +
    +type BaseVirtualEthernetCardOption interface {
    +	GetVirtualEthernetCardOption() *VirtualEthernetCardOption
    +}
    +
    +func init() {
    +	t["BaseVirtualEthernetCardOption"] = reflect.TypeOf((*VirtualEthernetCardOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualHardwareCompatibilityIssue) GetVirtualHardwareCompatibilityIssue() *VirtualHardwareCompatibilityIssue {
    +	return b
    +}
    +
    +type BaseVirtualHardwareCompatibilityIssue interface {
    +	GetVirtualHardwareCompatibilityIssue() *VirtualHardwareCompatibilityIssue
    +}
    +
    +func init() {
    +	t["BaseVirtualHardwareCompatibilityIssue"] = reflect.TypeOf((*VirtualHardwareCompatibilityIssue)(nil)).Elem()
    +}
    +
    +func (b *VirtualMachineBootOptionsBootableDevice) GetVirtualMachineBootOptionsBootableDevice() *VirtualMachineBootOptionsBootableDevice {
    +	return b
    +}
    +
    +type BaseVirtualMachineBootOptionsBootableDevice interface {
    +	GetVirtualMachineBootOptionsBootableDevice() *VirtualMachineBootOptionsBootableDevice
    +}
    +
    +func init() {
    +	t["BaseVirtualMachineBootOptionsBootableDevice"] = reflect.TypeOf((*VirtualMachineBootOptionsBootableDevice)(nil)).Elem()
    +}
    +
    +func (b *VirtualMachineDeviceRuntimeInfoDeviceRuntimeState) GetVirtualMachineDeviceRuntimeInfoDeviceRuntimeState() *VirtualMachineDeviceRuntimeInfoDeviceRuntimeState {
    +	return b
    +}
    +
    +type BaseVirtualMachineDeviceRuntimeInfoDeviceRuntimeState interface {
    +	GetVirtualMachineDeviceRuntimeInfoDeviceRuntimeState() *VirtualMachineDeviceRuntimeInfoDeviceRuntimeState
    +}
    +
    +func init() {
    +	t["BaseVirtualMachineDeviceRuntimeInfoDeviceRuntimeState"] = reflect.TypeOf((*VirtualMachineDeviceRuntimeInfoDeviceRuntimeState)(nil)).Elem()
    +}
    +
    +func (b *VirtualMachineDiskDeviceInfo) GetVirtualMachineDiskDeviceInfo() *VirtualMachineDiskDeviceInfo {
    +	return b
    +}
    +
    +type BaseVirtualMachineDiskDeviceInfo interface {
    +	GetVirtualMachineDiskDeviceInfo() *VirtualMachineDiskDeviceInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualMachineDiskDeviceInfo"] = reflect.TypeOf((*VirtualMachineDiskDeviceInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualMachineGuestQuiesceSpec) GetVirtualMachineGuestQuiesceSpec() *VirtualMachineGuestQuiesceSpec {
    +	return b
    +}
    +
    +type BaseVirtualMachineGuestQuiesceSpec interface {
    +	GetVirtualMachineGuestQuiesceSpec() *VirtualMachineGuestQuiesceSpec
    +}
    +
    +func init() {
    +	t["BaseVirtualMachineGuestQuiesceSpec"] = reflect.TypeOf((*VirtualMachineGuestQuiesceSpec)(nil)).Elem()
    +}
    +
    +func (b *VirtualMachinePciPassthroughInfo) GetVirtualMachinePciPassthroughInfo() *VirtualMachinePciPassthroughInfo {
    +	return b
    +}
    +
    +type BaseVirtualMachinePciPassthroughInfo interface {
    +	GetVirtualMachinePciPassthroughInfo() *VirtualMachinePciPassthroughInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualMachinePciPassthroughInfo"] = reflect.TypeOf((*VirtualMachinePciPassthroughInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualMachineProfileSpec) GetVirtualMachineProfileSpec() *VirtualMachineProfileSpec {
    +	return b
    +}
    +
    +type BaseVirtualMachineProfileSpec interface {
    +	GetVirtualMachineProfileSpec() *VirtualMachineProfileSpec
    +}
    +
    +func init() {
    +	t["BaseVirtualMachineProfileSpec"] = reflect.TypeOf((*VirtualMachineProfileSpec)(nil)).Elem()
    +}
    +
    +func (b *VirtualMachineSriovDevicePoolInfo) GetVirtualMachineSriovDevicePoolInfo() *VirtualMachineSriovDevicePoolInfo {
    +	return b
    +}
    +
    +type BaseVirtualMachineSriovDevicePoolInfo interface {
    +	GetVirtualMachineSriovDevicePoolInfo() *VirtualMachineSriovDevicePoolInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualMachineSriovDevicePoolInfo"] = reflect.TypeOf((*VirtualMachineSriovDevicePoolInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualMachineTargetInfo) GetVirtualMachineTargetInfo() *VirtualMachineTargetInfo { return b }
    +
    +type BaseVirtualMachineTargetInfo interface {
    +	GetVirtualMachineTargetInfo() *VirtualMachineTargetInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualMachineTargetInfo"] = reflect.TypeOf((*VirtualMachineTargetInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualPCIPassthroughPluginBackingInfo) GetVirtualPCIPassthroughPluginBackingInfo() *VirtualPCIPassthroughPluginBackingInfo {
    +	return b
    +}
    +
    +type BaseVirtualPCIPassthroughPluginBackingInfo interface {
    +	GetVirtualPCIPassthroughPluginBackingInfo() *VirtualPCIPassthroughPluginBackingInfo
    +}
    +
    +func init() {
    +	t["BaseVirtualPCIPassthroughPluginBackingInfo"] = reflect.TypeOf((*VirtualPCIPassthroughPluginBackingInfo)(nil)).Elem()
    +}
    +
    +func (b *VirtualPCIPassthroughPluginBackingOption) GetVirtualPCIPassthroughPluginBackingOption() *VirtualPCIPassthroughPluginBackingOption {
    +	return b
    +}
    +
    +type BaseVirtualPCIPassthroughPluginBackingOption interface {
    +	GetVirtualPCIPassthroughPluginBackingOption() *VirtualPCIPassthroughPluginBackingOption
    +}
    +
    +func init() {
    +	t["BaseVirtualPCIPassthroughPluginBackingOption"] = reflect.TypeOf((*VirtualPCIPassthroughPluginBackingOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualSATAController) GetVirtualSATAController() *VirtualSATAController { return b }
    +
    +type BaseVirtualSATAController interface {
    +	GetVirtualSATAController() *VirtualSATAController
    +}
    +
    +func init() {
    +	t["BaseVirtualSATAController"] = reflect.TypeOf((*VirtualSATAController)(nil)).Elem()
    +}
    +
    +func (b *VirtualSATAControllerOption) GetVirtualSATAControllerOption() *VirtualSATAControllerOption {
    +	return b
    +}
    +
    +type BaseVirtualSATAControllerOption interface {
    +	GetVirtualSATAControllerOption() *VirtualSATAControllerOption
    +}
    +
    +func init() {
    +	t["BaseVirtualSATAControllerOption"] = reflect.TypeOf((*VirtualSATAControllerOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualSCSIController) GetVirtualSCSIController() *VirtualSCSIController { return b }
    +
    +type BaseVirtualSCSIController interface {
    +	GetVirtualSCSIController() *VirtualSCSIController
    +}
    +
    +func init() {
    +	t["BaseVirtualSCSIController"] = reflect.TypeOf((*VirtualSCSIController)(nil)).Elem()
    +}
    +
    +func (b *VirtualSCSIControllerOption) GetVirtualSCSIControllerOption() *VirtualSCSIControllerOption {
    +	return b
    +}
    +
    +type BaseVirtualSCSIControllerOption interface {
    +	GetVirtualSCSIControllerOption() *VirtualSCSIControllerOption
    +}
    +
    +func init() {
    +	t["BaseVirtualSCSIControllerOption"] = reflect.TypeOf((*VirtualSCSIControllerOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualSoundCard) GetVirtualSoundCard() *VirtualSoundCard { return b }
    +
    +type BaseVirtualSoundCard interface {
    +	GetVirtualSoundCard() *VirtualSoundCard
    +}
    +
    +func init() {
    +	t["BaseVirtualSoundCard"] = reflect.TypeOf((*VirtualSoundCard)(nil)).Elem()
    +}
    +
    +func (b *VirtualSoundCardOption) GetVirtualSoundCardOption() *VirtualSoundCardOption { return b }
    +
    +type BaseVirtualSoundCardOption interface {
    +	GetVirtualSoundCardOption() *VirtualSoundCardOption
    +}
    +
    +func init() {
    +	t["BaseVirtualSoundCardOption"] = reflect.TypeOf((*VirtualSoundCardOption)(nil)).Elem()
    +}
    +
    +func (b *VirtualVmxnet) GetVirtualVmxnet() *VirtualVmxnet { return b }
    +
    +type BaseVirtualVmxnet interface {
    +	GetVirtualVmxnet() *VirtualVmxnet
    +}
    +
    +func init() {
    +	t["BaseVirtualVmxnet"] = reflect.TypeOf((*VirtualVmxnet)(nil)).Elem()
    +}
    +
    +func (b *VirtualVmxnet3) GetVirtualVmxnet3() *VirtualVmxnet3 { return b }
    +
    +type BaseVirtualVmxnet3 interface {
    +	GetVirtualVmxnet3() *VirtualVmxnet3
    +}
    +
    +func init() {
    +	t["BaseVirtualVmxnet3"] = reflect.TypeOf((*VirtualVmxnet3)(nil)).Elem()
    +}
    +
    +func (b *VirtualVmxnet3Option) GetVirtualVmxnet3Option() *VirtualVmxnet3Option { return b }
    +
    +type BaseVirtualVmxnet3Option interface {
    +	GetVirtualVmxnet3Option() *VirtualVmxnet3Option
    +}
    +
    +func init() {
    +	t["BaseVirtualVmxnet3Option"] = reflect.TypeOf((*VirtualVmxnet3Option)(nil)).Elem()
    +}
    +
    +func (b *VirtualVmxnetOption) GetVirtualVmxnetOption() *VirtualVmxnetOption { return b }
    +
    +type BaseVirtualVmxnetOption interface {
    +	GetVirtualVmxnetOption() *VirtualVmxnetOption
    +}
    +
    +func init() {
    +	t["BaseVirtualVmxnetOption"] = reflect.TypeOf((*VirtualVmxnetOption)(nil)).Elem()
    +}
    +
    +func (b *VmCloneEvent) GetVmCloneEvent() *VmCloneEvent { return b }
    +
    +type BaseVmCloneEvent interface {
    +	GetVmCloneEvent() *VmCloneEvent
    +}
    +
    +func init() {
    +	t["BaseVmCloneEvent"] = reflect.TypeOf((*VmCloneEvent)(nil)).Elem()
    +}
    +
    +func (b *VmConfigFault) GetVmConfigFault() *VmConfigFault { return b }
    +
    +type BaseVmConfigFault interface {
    +	GetVmConfigFault() *VmConfigFault
    +}
    +
    +func init() {
    +	t["BaseVmConfigFault"] = reflect.TypeOf((*VmConfigFault)(nil)).Elem()
    +}
    +
    +func (b *VmConfigFileInfo) GetVmConfigFileInfo() *VmConfigFileInfo { return b }
    +
    +type BaseVmConfigFileInfo interface {
    +	GetVmConfigFileInfo() *VmConfigFileInfo
    +}
    +
    +func init() {
    +	t["BaseVmConfigFileInfo"] = reflect.TypeOf((*VmConfigFileInfo)(nil)).Elem()
    +}
    +
    +func (b *VmConfigFileQuery) GetVmConfigFileQuery() *VmConfigFileQuery { return b }
    +
    +type BaseVmConfigFileQuery interface {
    +	GetVmConfigFileQuery() *VmConfigFileQuery
    +}
    +
    +func init() {
    +	t["BaseVmConfigFileQuery"] = reflect.TypeOf((*VmConfigFileQuery)(nil)).Elem()
    +}
    +
    +func (b *VmConfigInfo) GetVmConfigInfo() *VmConfigInfo { return b }
    +
    +type BaseVmConfigInfo interface {
    +	GetVmConfigInfo() *VmConfigInfo
    +}
    +
    +func init() {
    +	t["BaseVmConfigInfo"] = reflect.TypeOf((*VmConfigInfo)(nil)).Elem()
    +}
    +
    +func (b *VmConfigSpec) GetVmConfigSpec() *VmConfigSpec { return b }
    +
    +type BaseVmConfigSpec interface {
    +	GetVmConfigSpec() *VmConfigSpec
    +}
    +
    +func init() {
    +	t["BaseVmConfigSpec"] = reflect.TypeOf((*VmConfigSpec)(nil)).Elem()
    +}
    +
    +func (b *VmDasBeingResetEvent) GetVmDasBeingResetEvent() *VmDasBeingResetEvent { return b }
    +
    +type BaseVmDasBeingResetEvent interface {
    +	GetVmDasBeingResetEvent() *VmDasBeingResetEvent
    +}
    +
    +func init() {
    +	t["BaseVmDasBeingResetEvent"] = reflect.TypeOf((*VmDasBeingResetEvent)(nil)).Elem()
    +}
    +
    +func (b *VmEvent) GetVmEvent() *VmEvent { return b }
    +
    +type BaseVmEvent interface {
    +	GetVmEvent() *VmEvent
    +}
    +
    +func init() {
    +	t["BaseVmEvent"] = reflect.TypeOf((*VmEvent)(nil)).Elem()
    +}
    +
    +func (b *VmFaultToleranceIssue) GetVmFaultToleranceIssue() *VmFaultToleranceIssue { return b }
    +
    +type BaseVmFaultToleranceIssue interface {
    +	GetVmFaultToleranceIssue() *VmFaultToleranceIssue
    +}
    +
    +func init() {
    +	t["BaseVmFaultToleranceIssue"] = reflect.TypeOf((*VmFaultToleranceIssue)(nil)).Elem()
    +}
    +
    +func (b *VmMigratedEvent) GetVmMigratedEvent() *VmMigratedEvent { return b }
    +
    +type BaseVmMigratedEvent interface {
    +	GetVmMigratedEvent() *VmMigratedEvent
    +}
    +
    +func init() {
    +	t["BaseVmMigratedEvent"] = reflect.TypeOf((*VmMigratedEvent)(nil)).Elem()
    +}
    +
    +func (b *VmPoweredOffEvent) GetVmPoweredOffEvent() *VmPoweredOffEvent { return b }
    +
    +type BaseVmPoweredOffEvent interface {
    +	GetVmPoweredOffEvent() *VmPoweredOffEvent
    +}
    +
    +func init() {
    +	t["BaseVmPoweredOffEvent"] = reflect.TypeOf((*VmPoweredOffEvent)(nil)).Elem()
    +}
    +
    +func (b *VmPoweredOnEvent) GetVmPoweredOnEvent() *VmPoweredOnEvent { return b }
    +
    +type BaseVmPoweredOnEvent interface {
    +	GetVmPoweredOnEvent() *VmPoweredOnEvent
    +}
    +
    +func init() {
    +	t["BaseVmPoweredOnEvent"] = reflect.TypeOf((*VmPoweredOnEvent)(nil)).Elem()
    +}
    +
    +func (b *VmRelocateSpecEvent) GetVmRelocateSpecEvent() *VmRelocateSpecEvent { return b }
    +
    +type BaseVmRelocateSpecEvent interface {
    +	GetVmRelocateSpecEvent() *VmRelocateSpecEvent
    +}
    +
    +func init() {
    +	t["BaseVmRelocateSpecEvent"] = reflect.TypeOf((*VmRelocateSpecEvent)(nil)).Elem()
    +}
    +
    +func (b *VmStartingEvent) GetVmStartingEvent() *VmStartingEvent { return b }
    +
    +type BaseVmStartingEvent interface {
    +	GetVmStartingEvent() *VmStartingEvent
    +}
    +
    +func init() {
    +	t["BaseVmStartingEvent"] = reflect.TypeOf((*VmStartingEvent)(nil)).Elem()
    +}
    +
    +func (b *VmToolsUpgradeFault) GetVmToolsUpgradeFault() *VmToolsUpgradeFault { return b }
    +
    +type BaseVmToolsUpgradeFault interface {
    +	GetVmToolsUpgradeFault() *VmToolsUpgradeFault
    +}
    +
    +func init() {
    +	t["BaseVmToolsUpgradeFault"] = reflect.TypeOf((*VmToolsUpgradeFault)(nil)).Elem()
    +}
    +
    +func (b *VmfsDatastoreBaseOption) GetVmfsDatastoreBaseOption() *VmfsDatastoreBaseOption { return b }
    +
    +type BaseVmfsDatastoreBaseOption interface {
    +	GetVmfsDatastoreBaseOption() *VmfsDatastoreBaseOption
    +}
    +
    +func init() {
    +	t["BaseVmfsDatastoreBaseOption"] = reflect.TypeOf((*VmfsDatastoreBaseOption)(nil)).Elem()
    +}
    +
    +func (b *VmfsDatastoreSingleExtentOption) GetVmfsDatastoreSingleExtentOption() *VmfsDatastoreSingleExtentOption {
    +	return b
    +}
    +
    +type BaseVmfsDatastoreSingleExtentOption interface {
    +	GetVmfsDatastoreSingleExtentOption() *VmfsDatastoreSingleExtentOption
    +}
    +
    +func init() {
    +	t["BaseVmfsDatastoreSingleExtentOption"] = reflect.TypeOf((*VmfsDatastoreSingleExtentOption)(nil)).Elem()
    +}
    +
    +func (b *VmfsDatastoreSpec) GetVmfsDatastoreSpec() *VmfsDatastoreSpec { return b }
    +
    +type BaseVmfsDatastoreSpec interface {
    +	GetVmfsDatastoreSpec() *VmfsDatastoreSpec
    +}
    +
    +func init() {
    +	t["BaseVmfsDatastoreSpec"] = reflect.TypeOf((*VmfsDatastoreSpec)(nil)).Elem()
    +}
    +
    +func (b *VmfsMountFault) GetVmfsMountFault() *VmfsMountFault { return b }
    +
    +type BaseVmfsMountFault interface {
    +	GetVmfsMountFault() *VmfsMountFault
    +}
    +
    +func init() {
    +	t["BaseVmfsMountFault"] = reflect.TypeOf((*VmfsMountFault)(nil)).Elem()
    +}
    +
    +func (b *VmwareDistributedVirtualSwitchVlanSpec) GetVmwareDistributedVirtualSwitchVlanSpec() *VmwareDistributedVirtualSwitchVlanSpec {
    +	return b
    +}
    +
    +type BaseVmwareDistributedVirtualSwitchVlanSpec interface {
    +	GetVmwareDistributedVirtualSwitchVlanSpec() *VmwareDistributedVirtualSwitchVlanSpec
    +}
    +
    +func init() {
    +	t["BaseVmwareDistributedVirtualSwitchVlanSpec"] = reflect.TypeOf((*VmwareDistributedVirtualSwitchVlanSpec)(nil)).Elem()
    +}
    +
    +func (b *VsanDiskFault) GetVsanDiskFault() *VsanDiskFault { return b }
    +
    +type BaseVsanDiskFault interface {
    +	GetVsanDiskFault() *VsanDiskFault
    +}
    +
    +func init() {
    +	t["BaseVsanDiskFault"] = reflect.TypeOf((*VsanDiskFault)(nil)).Elem()
    +}
    +
    +func (b *VsanFault) GetVsanFault() *VsanFault { return b }
    +
    +type BaseVsanFault interface {
    +	GetVsanFault() *VsanFault
    +}
    +
    +func init() {
    +	t["BaseVsanFault"] = reflect.TypeOf((*VsanFault)(nil)).Elem()
    +}
    +
    +func (b *VsanUpgradeSystemPreflightCheckIssue) GetVsanUpgradeSystemPreflightCheckIssue() *VsanUpgradeSystemPreflightCheckIssue {
    +	return b
    +}
    +
    +type BaseVsanUpgradeSystemPreflightCheckIssue interface {
    +	GetVsanUpgradeSystemPreflightCheckIssue() *VsanUpgradeSystemPreflightCheckIssue
    +}
    +
    +func init() {
    +	t["BaseVsanUpgradeSystemPreflightCheckIssue"] = reflect.TypeOf((*VsanUpgradeSystemPreflightCheckIssue)(nil)).Elem()
    +}
    +
    +func (b *VsanUpgradeSystemUpgradeHistoryItem) GetVsanUpgradeSystemUpgradeHistoryItem() *VsanUpgradeSystemUpgradeHistoryItem {
    +	return b
    +}
    +
    +type BaseVsanUpgradeSystemUpgradeHistoryItem interface {
    +	GetVsanUpgradeSystemUpgradeHistoryItem() *VsanUpgradeSystemUpgradeHistoryItem
    +}
    +
    +func init() {
    +	t["BaseVsanUpgradeSystemUpgradeHistoryItem"] = reflect.TypeOf((*VsanUpgradeSystemUpgradeHistoryItem)(nil)).Elem()
    +}
    +
    +func (b *VslmCreateSpecBackingSpec) GetVslmCreateSpecBackingSpec() *VslmCreateSpecBackingSpec {
    +	return b
    +}
    +
    +type BaseVslmCreateSpecBackingSpec interface {
    +	GetVslmCreateSpecBackingSpec() *VslmCreateSpecBackingSpec
    +}
    +
    +func init() {
    +	t["BaseVslmCreateSpecBackingSpec"] = reflect.TypeOf((*VslmCreateSpecBackingSpec)(nil)).Elem()
    +}
    +
    +func (b *VslmMigrateSpec) GetVslmMigrateSpec() *VslmMigrateSpec { return b }
    +
    +type BaseVslmMigrateSpec interface {
    +	GetVslmMigrateSpec() *VslmMigrateSpec
    +}
    +
    +func init() {
    +	t["BaseVslmMigrateSpec"] = reflect.TypeOf((*VslmMigrateSpec)(nil)).Elem()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/registry.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/registry.go
    new file mode 100644
    index 00000000000..ff7c302d318
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/registry.go
    @@ -0,0 +1,43 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package types
    +
    +import (
    +	"reflect"
    +	"strings"
    +)
    +
    +var t = map[string]reflect.Type{}
    +
    +func Add(name string, kind reflect.Type) {
    +	t[name] = kind
    +}
    +
    +type Func func(string) (reflect.Type, bool)
    +
    +func TypeFunc() Func {
    +	return func(name string) (reflect.Type, bool) {
    +		typ, ok := t[name]
    +		if !ok {
    +			// The /sdk endpoint does not prefix types with the namespace,
    +			// but extension endpoints, such as /pbm/sdk do.
    +			name = strings.TrimPrefix(name, "vim25:")
    +			typ, ok = t[name]
    +		}
    +		return typ, ok
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/types.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/types.go
    new file mode 100644
    index 00000000000..e990e273e22
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/types/types.go
    @@ -0,0 +1,55433 @@
    +/*
    +Copyright (c) 2014-2018 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package types
    +
    +import (
    +	"reflect"
    +	"time"
    +)
    +
    +type AbdicateDomOwnership AbdicateDomOwnershipRequestType
    +
    +func init() {
    +	t["AbdicateDomOwnership"] = reflect.TypeOf((*AbdicateDomOwnership)(nil)).Elem()
    +}
    +
    +type AbdicateDomOwnershipRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Uuids []string               `xml:"uuids"`
    +}
    +
    +func init() {
    +	t["AbdicateDomOwnershipRequestType"] = reflect.TypeOf((*AbdicateDomOwnershipRequestType)(nil)).Elem()
    +}
    +
    +type AbdicateDomOwnershipResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type AboutInfo struct {
    +	DynamicData
    +
    +	Name                  string `xml:"name"`
    +	FullName              string `xml:"fullName"`
    +	Vendor                string `xml:"vendor"`
    +	Version               string `xml:"version"`
    +	Build                 string `xml:"build"`
    +	LocaleVersion         string `xml:"localeVersion,omitempty"`
    +	LocaleBuild           string `xml:"localeBuild,omitempty"`
    +	OsType                string `xml:"osType"`
    +	ProductLineId         string `xml:"productLineId"`
    +	ApiType               string `xml:"apiType"`
    +	ApiVersion            string `xml:"apiVersion"`
    +	InstanceUuid          string `xml:"instanceUuid,omitempty"`
    +	LicenseProductName    string `xml:"licenseProductName,omitempty"`
    +	LicenseProductVersion string `xml:"licenseProductVersion,omitempty"`
    +}
    +
    +func init() {
    +	t["AboutInfo"] = reflect.TypeOf((*AboutInfo)(nil)).Elem()
    +}
    +
    +type AccountCreatedEvent struct {
    +	HostEvent
    +
    +	Spec  BaseHostAccountSpec `xml:"spec,typeattr"`
    +	Group bool                `xml:"group"`
    +}
    +
    +func init() {
    +	t["AccountCreatedEvent"] = reflect.TypeOf((*AccountCreatedEvent)(nil)).Elem()
    +}
    +
    +type AccountRemovedEvent struct {
    +	HostEvent
    +
    +	Account string `xml:"account"`
    +	Group   bool   `xml:"group"`
    +}
    +
    +func init() {
    +	t["AccountRemovedEvent"] = reflect.TypeOf((*AccountRemovedEvent)(nil)).Elem()
    +}
    +
    +type AccountUpdatedEvent struct {
    +	HostEvent
    +
    +	Spec            BaseHostAccountSpec `xml:"spec,typeattr"`
    +	Group           bool                `xml:"group"`
    +	PrevDescription string              `xml:"prevDescription,omitempty"`
    +}
    +
    +func init() {
    +	t["AccountUpdatedEvent"] = reflect.TypeOf((*AccountUpdatedEvent)(nil)).Elem()
    +}
    +
    +type AcknowledgeAlarm AcknowledgeAlarmRequestType
    +
    +func init() {
    +	t["AcknowledgeAlarm"] = reflect.TypeOf((*AcknowledgeAlarm)(nil)).Elem()
    +}
    +
    +type AcknowledgeAlarmRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Alarm  ManagedObjectReference `xml:"alarm"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["AcknowledgeAlarmRequestType"] = reflect.TypeOf((*AcknowledgeAlarmRequestType)(nil)).Elem()
    +}
    +
    +type AcknowledgeAlarmResponse struct {
    +}
    +
    +type AcquireCimServicesTicket AcquireCimServicesTicketRequestType
    +
    +func init() {
    +	t["AcquireCimServicesTicket"] = reflect.TypeOf((*AcquireCimServicesTicket)(nil)).Elem()
    +}
    +
    +type AcquireCimServicesTicketRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["AcquireCimServicesTicketRequestType"] = reflect.TypeOf((*AcquireCimServicesTicketRequestType)(nil)).Elem()
    +}
    +
    +type AcquireCimServicesTicketResponse struct {
    +	Returnval HostServiceTicket `xml:"returnval"`
    +}
    +
    +type AcquireCloneTicket AcquireCloneTicketRequestType
    +
    +func init() {
    +	t["AcquireCloneTicket"] = reflect.TypeOf((*AcquireCloneTicket)(nil)).Elem()
    +}
    +
    +type AcquireCloneTicketRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["AcquireCloneTicketRequestType"] = reflect.TypeOf((*AcquireCloneTicketRequestType)(nil)).Elem()
    +}
    +
    +type AcquireCloneTicketResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type AcquireCredentialsInGuest AcquireCredentialsInGuestRequestType
    +
    +func init() {
    +	t["AcquireCredentialsInGuest"] = reflect.TypeOf((*AcquireCredentialsInGuest)(nil)).Elem()
    +}
    +
    +type AcquireCredentialsInGuestRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Vm            ManagedObjectReference  `xml:"vm"`
    +	RequestedAuth BaseGuestAuthentication `xml:"requestedAuth,typeattr"`
    +	SessionID     int64                   `xml:"sessionID,omitempty"`
    +}
    +
    +func init() {
    +	t["AcquireCredentialsInGuestRequestType"] = reflect.TypeOf((*AcquireCredentialsInGuestRequestType)(nil)).Elem()
    +}
    +
    +type AcquireCredentialsInGuestResponse struct {
    +	Returnval BaseGuestAuthentication `xml:"returnval,typeattr"`
    +}
    +
    +type AcquireGenericServiceTicket AcquireGenericServiceTicketRequestType
    +
    +func init() {
    +	t["AcquireGenericServiceTicket"] = reflect.TypeOf((*AcquireGenericServiceTicket)(nil)).Elem()
    +}
    +
    +type AcquireGenericServiceTicketRequestType struct {
    +	This ManagedObjectReference               `xml:"_this"`
    +	Spec BaseSessionManagerServiceRequestSpec `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["AcquireGenericServiceTicketRequestType"] = reflect.TypeOf((*AcquireGenericServiceTicketRequestType)(nil)).Elem()
    +}
    +
    +type AcquireGenericServiceTicketResponse struct {
    +	Returnval SessionManagerGenericServiceTicket `xml:"returnval"`
    +}
    +
    +type AcquireLocalTicket AcquireLocalTicketRequestType
    +
    +func init() {
    +	t["AcquireLocalTicket"] = reflect.TypeOf((*AcquireLocalTicket)(nil)).Elem()
    +}
    +
    +type AcquireLocalTicketRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	UserName string                 `xml:"userName"`
    +}
    +
    +func init() {
    +	t["AcquireLocalTicketRequestType"] = reflect.TypeOf((*AcquireLocalTicketRequestType)(nil)).Elem()
    +}
    +
    +type AcquireLocalTicketResponse struct {
    +	Returnval SessionManagerLocalTicket `xml:"returnval"`
    +}
    +
    +type AcquireMksTicket AcquireMksTicketRequestType
    +
    +func init() {
    +	t["AcquireMksTicket"] = reflect.TypeOf((*AcquireMksTicket)(nil)).Elem()
    +}
    +
    +type AcquireMksTicketRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["AcquireMksTicketRequestType"] = reflect.TypeOf((*AcquireMksTicketRequestType)(nil)).Elem()
    +}
    +
    +type AcquireMksTicketResponse struct {
    +	Returnval VirtualMachineMksTicket `xml:"returnval"`
    +}
    +
    +type AcquireTicket AcquireTicketRequestType
    +
    +func init() {
    +	t["AcquireTicket"] = reflect.TypeOf((*AcquireTicket)(nil)).Elem()
    +}
    +
    +type AcquireTicketRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	TicketType string                 `xml:"ticketType"`
    +}
    +
    +func init() {
    +	t["AcquireTicketRequestType"] = reflect.TypeOf((*AcquireTicketRequestType)(nil)).Elem()
    +}
    +
    +type AcquireTicketResponse struct {
    +	Returnval VirtualMachineTicket `xml:"returnval"`
    +}
    +
    +type Action struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["Action"] = reflect.TypeOf((*Action)(nil)).Elem()
    +}
    +
    +type ActiveDirectoryFault struct {
    +	VimFault
    +
    +	ErrorCode int32 `xml:"errorCode,omitempty"`
    +}
    +
    +func init() {
    +	t["ActiveDirectoryFault"] = reflect.TypeOf((*ActiveDirectoryFault)(nil)).Elem()
    +}
    +
    +type ActiveDirectoryFaultFault BaseActiveDirectoryFault
    +
    +func init() {
    +	t["ActiveDirectoryFaultFault"] = reflect.TypeOf((*ActiveDirectoryFaultFault)(nil)).Elem()
    +}
    +
    +type ActiveDirectoryProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["ActiveDirectoryProfile"] = reflect.TypeOf((*ActiveDirectoryProfile)(nil)).Elem()
    +}
    +
    +type ActiveVMsBlockingEVC struct {
    +	EVCConfigFault
    +
    +	EvcMode  string                   `xml:"evcMode,omitempty"`
    +	Host     []ManagedObjectReference `xml:"host,omitempty"`
    +	HostName []string                 `xml:"hostName,omitempty"`
    +}
    +
    +func init() {
    +	t["ActiveVMsBlockingEVC"] = reflect.TypeOf((*ActiveVMsBlockingEVC)(nil)).Elem()
    +}
    +
    +type ActiveVMsBlockingEVCFault ActiveVMsBlockingEVC
    +
    +func init() {
    +	t["ActiveVMsBlockingEVCFault"] = reflect.TypeOf((*ActiveVMsBlockingEVCFault)(nil)).Elem()
    +}
    +
    +type AddAuthorizationRole AddAuthorizationRoleRequestType
    +
    +func init() {
    +	t["AddAuthorizationRole"] = reflect.TypeOf((*AddAuthorizationRole)(nil)).Elem()
    +}
    +
    +type AddAuthorizationRoleRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Name    string                 `xml:"name"`
    +	PrivIds []string               `xml:"privIds,omitempty"`
    +}
    +
    +func init() {
    +	t["AddAuthorizationRoleRequestType"] = reflect.TypeOf((*AddAuthorizationRoleRequestType)(nil)).Elem()
    +}
    +
    +type AddAuthorizationRoleResponse struct {
    +	Returnval int32 `xml:"returnval"`
    +}
    +
    +type AddCustomFieldDef AddCustomFieldDefRequestType
    +
    +func init() {
    +	t["AddCustomFieldDef"] = reflect.TypeOf((*AddCustomFieldDef)(nil)).Elem()
    +}
    +
    +type AddCustomFieldDefRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	Name           string                 `xml:"name"`
    +	MoType         string                 `xml:"moType,omitempty"`
    +	FieldDefPolicy *PrivilegePolicyDef    `xml:"fieldDefPolicy,omitempty"`
    +	FieldPolicy    *PrivilegePolicyDef    `xml:"fieldPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["AddCustomFieldDefRequestType"] = reflect.TypeOf((*AddCustomFieldDefRequestType)(nil)).Elem()
    +}
    +
    +type AddCustomFieldDefResponse struct {
    +	Returnval CustomFieldDef `xml:"returnval"`
    +}
    +
    +type AddDVPortgroupRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Spec []DVPortgroupConfigSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["AddDVPortgroupRequestType"] = reflect.TypeOf((*AddDVPortgroupRequestType)(nil)).Elem()
    +}
    +
    +type AddDVPortgroup_Task AddDVPortgroupRequestType
    +
    +func init() {
    +	t["AddDVPortgroup_Task"] = reflect.TypeOf((*AddDVPortgroup_Task)(nil)).Elem()
    +}
    +
    +type AddDVPortgroup_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type AddDisksRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Disk []HostScsiDisk         `xml:"disk"`
    +}
    +
    +func init() {
    +	t["AddDisksRequestType"] = reflect.TypeOf((*AddDisksRequestType)(nil)).Elem()
    +}
    +
    +type AddDisks_Task AddDisksRequestType
    +
    +func init() {
    +	t["AddDisks_Task"] = reflect.TypeOf((*AddDisks_Task)(nil)).Elem()
    +}
    +
    +type AddDisks_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type AddFilter AddFilterRequestType
    +
    +func init() {
    +	t["AddFilter"] = reflect.TypeOf((*AddFilter)(nil)).Elem()
    +}
    +
    +type AddFilterEntities AddFilterEntitiesRequestType
    +
    +func init() {
    +	t["AddFilterEntities"] = reflect.TypeOf((*AddFilterEntities)(nil)).Elem()
    +}
    +
    +type AddFilterEntitiesRequestType struct {
    +	This     ManagedObjectReference   `xml:"_this"`
    +	FilterId string                   `xml:"filterId"`
    +	Entities []ManagedObjectReference `xml:"entities,omitempty"`
    +}
    +
    +func init() {
    +	t["AddFilterEntitiesRequestType"] = reflect.TypeOf((*AddFilterEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type AddFilterEntitiesResponse struct {
    +}
    +
    +type AddFilterRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +	FilterName string                 `xml:"filterName"`
    +	InfoIds    []string               `xml:"infoIds,omitempty"`
    +}
    +
    +func init() {
    +	t["AddFilterRequestType"] = reflect.TypeOf((*AddFilterRequestType)(nil)).Elem()
    +}
    +
    +type AddFilterResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type AddGuestAlias AddGuestAliasRequestType
    +
    +func init() {
    +	t["AddGuestAlias"] = reflect.TypeOf((*AddGuestAlias)(nil)).Elem()
    +}
    +
    +type AddGuestAliasRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Vm         ManagedObjectReference  `xml:"vm"`
    +	Auth       BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Username   string                  `xml:"username"`
    +	MapCert    bool                    `xml:"mapCert"`
    +	Base64Cert string                  `xml:"base64Cert"`
    +	AliasInfo  GuestAuthAliasInfo      `xml:"aliasInfo"`
    +}
    +
    +func init() {
    +	t["AddGuestAliasRequestType"] = reflect.TypeOf((*AddGuestAliasRequestType)(nil)).Elem()
    +}
    +
    +type AddGuestAliasResponse struct {
    +}
    +
    +type AddHostRequestType struct {
    +	This         ManagedObjectReference  `xml:"_this"`
    +	Spec         HostConnectSpec         `xml:"spec"`
    +	AsConnected  bool                    `xml:"asConnected"`
    +	ResourcePool *ManagedObjectReference `xml:"resourcePool,omitempty"`
    +	License      string                  `xml:"license,omitempty"`
    +}
    +
    +func init() {
    +	t["AddHostRequestType"] = reflect.TypeOf((*AddHostRequestType)(nil)).Elem()
    +}
    +
    +type AddHost_Task AddHostRequestType
    +
    +func init() {
    +	t["AddHost_Task"] = reflect.TypeOf((*AddHost_Task)(nil)).Elem()
    +}
    +
    +type AddHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type AddInternetScsiSendTargets AddInternetScsiSendTargetsRequestType
    +
    +func init() {
    +	t["AddInternetScsiSendTargets"] = reflect.TypeOf((*AddInternetScsiSendTargets)(nil)).Elem()
    +}
    +
    +type AddInternetScsiSendTargetsRequestType struct {
    +	This           ManagedObjectReference          `xml:"_this"`
    +	IScsiHbaDevice string                          `xml:"iScsiHbaDevice"`
    +	Targets        []HostInternetScsiHbaSendTarget `xml:"targets"`
    +}
    +
    +func init() {
    +	t["AddInternetScsiSendTargetsRequestType"] = reflect.TypeOf((*AddInternetScsiSendTargetsRequestType)(nil)).Elem()
    +}
    +
    +type AddInternetScsiSendTargetsResponse struct {
    +}
    +
    +type AddInternetScsiStaticTargets AddInternetScsiStaticTargetsRequestType
    +
    +func init() {
    +	t["AddInternetScsiStaticTargets"] = reflect.TypeOf((*AddInternetScsiStaticTargets)(nil)).Elem()
    +}
    +
    +type AddInternetScsiStaticTargetsRequestType struct {
    +	This           ManagedObjectReference            `xml:"_this"`
    +	IScsiHbaDevice string                            `xml:"iScsiHbaDevice"`
    +	Targets        []HostInternetScsiHbaStaticTarget `xml:"targets"`
    +}
    +
    +func init() {
    +	t["AddInternetScsiStaticTargetsRequestType"] = reflect.TypeOf((*AddInternetScsiStaticTargetsRequestType)(nil)).Elem()
    +}
    +
    +type AddInternetScsiStaticTargetsResponse struct {
    +}
    +
    +type AddKey AddKeyRequestType
    +
    +func init() {
    +	t["AddKey"] = reflect.TypeOf((*AddKey)(nil)).Elem()
    +}
    +
    +type AddKeyRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  CryptoKeyPlain         `xml:"key"`
    +}
    +
    +func init() {
    +	t["AddKeyRequestType"] = reflect.TypeOf((*AddKeyRequestType)(nil)).Elem()
    +}
    +
    +type AddKeyResponse struct {
    +}
    +
    +type AddKeys AddKeysRequestType
    +
    +func init() {
    +	t["AddKeys"] = reflect.TypeOf((*AddKeys)(nil)).Elem()
    +}
    +
    +type AddKeysRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Keys []CryptoKeyPlain       `xml:"keys,omitempty"`
    +}
    +
    +func init() {
    +	t["AddKeysRequestType"] = reflect.TypeOf((*AddKeysRequestType)(nil)).Elem()
    +}
    +
    +type AddKeysResponse struct {
    +	Returnval []CryptoKeyResult `xml:"returnval,omitempty"`
    +}
    +
    +type AddLicense AddLicenseRequestType
    +
    +func init() {
    +	t["AddLicense"] = reflect.TypeOf((*AddLicense)(nil)).Elem()
    +}
    +
    +type AddLicenseRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	LicenseKey string                 `xml:"licenseKey"`
    +	Labels     []KeyValue             `xml:"labels,omitempty"`
    +}
    +
    +func init() {
    +	t["AddLicenseRequestType"] = reflect.TypeOf((*AddLicenseRequestType)(nil)).Elem()
    +}
    +
    +type AddLicenseResponse struct {
    +	Returnval LicenseManagerLicenseInfo `xml:"returnval"`
    +}
    +
    +type AddMonitoredEntities AddMonitoredEntitiesRequestType
    +
    +func init() {
    +	t["AddMonitoredEntities"] = reflect.TypeOf((*AddMonitoredEntities)(nil)).Elem()
    +}
    +
    +type AddMonitoredEntitiesRequestType struct {
    +	This       ManagedObjectReference   `xml:"_this"`
    +	ProviderId string                   `xml:"providerId"`
    +	Entities   []ManagedObjectReference `xml:"entities,omitempty"`
    +}
    +
    +func init() {
    +	t["AddMonitoredEntitiesRequestType"] = reflect.TypeOf((*AddMonitoredEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type AddMonitoredEntitiesResponse struct {
    +}
    +
    +type AddNetworkResourcePool AddNetworkResourcePoolRequestType
    +
    +func init() {
    +	t["AddNetworkResourcePool"] = reflect.TypeOf((*AddNetworkResourcePool)(nil)).Elem()
    +}
    +
    +type AddNetworkResourcePoolRequestType struct {
    +	This       ManagedObjectReference             `xml:"_this"`
    +	ConfigSpec []DVSNetworkResourcePoolConfigSpec `xml:"configSpec"`
    +}
    +
    +func init() {
    +	t["AddNetworkResourcePoolRequestType"] = reflect.TypeOf((*AddNetworkResourcePoolRequestType)(nil)).Elem()
    +}
    +
    +type AddNetworkResourcePoolResponse struct {
    +}
    +
    +type AddPortGroup AddPortGroupRequestType
    +
    +func init() {
    +	t["AddPortGroup"] = reflect.TypeOf((*AddPortGroup)(nil)).Elem()
    +}
    +
    +type AddPortGroupRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Portgrp HostPortGroupSpec      `xml:"portgrp"`
    +}
    +
    +func init() {
    +	t["AddPortGroupRequestType"] = reflect.TypeOf((*AddPortGroupRequestType)(nil)).Elem()
    +}
    +
    +type AddPortGroupResponse struct {
    +}
    +
    +type AddServiceConsoleVirtualNic AddServiceConsoleVirtualNicRequestType
    +
    +func init() {
    +	t["AddServiceConsoleVirtualNic"] = reflect.TypeOf((*AddServiceConsoleVirtualNic)(nil)).Elem()
    +}
    +
    +type AddServiceConsoleVirtualNicRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Portgroup string                 `xml:"portgroup"`
    +	Nic       HostVirtualNicSpec     `xml:"nic"`
    +}
    +
    +func init() {
    +	t["AddServiceConsoleVirtualNicRequestType"] = reflect.TypeOf((*AddServiceConsoleVirtualNicRequestType)(nil)).Elem()
    +}
    +
    +type AddServiceConsoleVirtualNicResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type AddStandaloneHostRequestType struct {
    +	This         ManagedObjectReference        `xml:"_this"`
    +	Spec         HostConnectSpec               `xml:"spec"`
    +	CompResSpec  BaseComputeResourceConfigSpec `xml:"compResSpec,omitempty,typeattr"`
    +	AddConnected bool                          `xml:"addConnected"`
    +	License      string                        `xml:"license,omitempty"`
    +}
    +
    +func init() {
    +	t["AddStandaloneHostRequestType"] = reflect.TypeOf((*AddStandaloneHostRequestType)(nil)).Elem()
    +}
    +
    +type AddStandaloneHost_Task AddStandaloneHostRequestType
    +
    +func init() {
    +	t["AddStandaloneHost_Task"] = reflect.TypeOf((*AddStandaloneHost_Task)(nil)).Elem()
    +}
    +
    +type AddStandaloneHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type AddVirtualNic AddVirtualNicRequestType
    +
    +func init() {
    +	t["AddVirtualNic"] = reflect.TypeOf((*AddVirtualNic)(nil)).Elem()
    +}
    +
    +type AddVirtualNicRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Portgroup string                 `xml:"portgroup"`
    +	Nic       HostVirtualNicSpec     `xml:"nic"`
    +}
    +
    +func init() {
    +	t["AddVirtualNicRequestType"] = reflect.TypeOf((*AddVirtualNicRequestType)(nil)).Elem()
    +}
    +
    +type AddVirtualNicResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type AddVirtualSwitch AddVirtualSwitchRequestType
    +
    +func init() {
    +	t["AddVirtualSwitch"] = reflect.TypeOf((*AddVirtualSwitch)(nil)).Elem()
    +}
    +
    +type AddVirtualSwitchRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	VswitchName string                 `xml:"vswitchName"`
    +	Spec        *HostVirtualSwitchSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["AddVirtualSwitchRequestType"] = reflect.TypeOf((*AddVirtualSwitchRequestType)(nil)).Elem()
    +}
    +
    +type AddVirtualSwitchResponse struct {
    +}
    +
    +type AdminDisabled struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["AdminDisabled"] = reflect.TypeOf((*AdminDisabled)(nil)).Elem()
    +}
    +
    +type AdminDisabledFault AdminDisabled
    +
    +func init() {
    +	t["AdminDisabledFault"] = reflect.TypeOf((*AdminDisabledFault)(nil)).Elem()
    +}
    +
    +type AdminNotDisabled struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["AdminNotDisabled"] = reflect.TypeOf((*AdminNotDisabled)(nil)).Elem()
    +}
    +
    +type AdminNotDisabledFault AdminNotDisabled
    +
    +func init() {
    +	t["AdminNotDisabledFault"] = reflect.TypeOf((*AdminNotDisabledFault)(nil)).Elem()
    +}
    +
    +type AdminPasswordNotChangedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["AdminPasswordNotChangedEvent"] = reflect.TypeOf((*AdminPasswordNotChangedEvent)(nil)).Elem()
    +}
    +
    +type AffinityConfigured struct {
    +	MigrationFault
    +
    +	ConfiguredAffinity []string `xml:"configuredAffinity"`
    +}
    +
    +func init() {
    +	t["AffinityConfigured"] = reflect.TypeOf((*AffinityConfigured)(nil)).Elem()
    +}
    +
    +type AffinityConfiguredFault AffinityConfigured
    +
    +func init() {
    +	t["AffinityConfiguredFault"] = reflect.TypeOf((*AffinityConfiguredFault)(nil)).Elem()
    +}
    +
    +type AfterStartupTaskScheduler struct {
    +	TaskScheduler
    +
    +	Minute int32 `xml:"minute"`
    +}
    +
    +func init() {
    +	t["AfterStartupTaskScheduler"] = reflect.TypeOf((*AfterStartupTaskScheduler)(nil)).Elem()
    +}
    +
    +type AgentInstallFailed struct {
    +	HostConnectFault
    +
    +	Reason          string `xml:"reason,omitempty"`
    +	StatusCode      int32  `xml:"statusCode,omitempty"`
    +	InstallerOutput string `xml:"installerOutput,omitempty"`
    +}
    +
    +func init() {
    +	t["AgentInstallFailed"] = reflect.TypeOf((*AgentInstallFailed)(nil)).Elem()
    +}
    +
    +type AgentInstallFailedFault AgentInstallFailed
    +
    +func init() {
    +	t["AgentInstallFailedFault"] = reflect.TypeOf((*AgentInstallFailedFault)(nil)).Elem()
    +}
    +
    +type AlarmAcknowledgedEvent struct {
    +	AlarmEvent
    +
    +	Source ManagedEntityEventArgument `xml:"source"`
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +}
    +
    +func init() {
    +	t["AlarmAcknowledgedEvent"] = reflect.TypeOf((*AlarmAcknowledgedEvent)(nil)).Elem()
    +}
    +
    +type AlarmAction struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["AlarmAction"] = reflect.TypeOf((*AlarmAction)(nil)).Elem()
    +}
    +
    +type AlarmActionTriggeredEvent struct {
    +	AlarmEvent
    +
    +	Source ManagedEntityEventArgument `xml:"source"`
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +}
    +
    +func init() {
    +	t["AlarmActionTriggeredEvent"] = reflect.TypeOf((*AlarmActionTriggeredEvent)(nil)).Elem()
    +}
    +
    +type AlarmClearedEvent struct {
    +	AlarmEvent
    +
    +	Source ManagedEntityEventArgument `xml:"source"`
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +	From   string                     `xml:"from"`
    +}
    +
    +func init() {
    +	t["AlarmClearedEvent"] = reflect.TypeOf((*AlarmClearedEvent)(nil)).Elem()
    +}
    +
    +type AlarmCreatedEvent struct {
    +	AlarmEvent
    +
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +}
    +
    +func init() {
    +	t["AlarmCreatedEvent"] = reflect.TypeOf((*AlarmCreatedEvent)(nil)).Elem()
    +}
    +
    +type AlarmDescription struct {
    +	DynamicData
    +
    +	Expr                               []BaseTypeDescription    `xml:"expr,typeattr"`
    +	StateOperator                      []BaseElementDescription `xml:"stateOperator,typeattr"`
    +	MetricOperator                     []BaseElementDescription `xml:"metricOperator,typeattr"`
    +	HostSystemConnectionState          []BaseElementDescription `xml:"hostSystemConnectionState,typeattr"`
    +	VirtualMachinePowerState           []BaseElementDescription `xml:"virtualMachinePowerState,typeattr"`
    +	DatastoreConnectionState           []BaseElementDescription `xml:"datastoreConnectionState,omitempty,typeattr"`
    +	HostSystemPowerState               []BaseElementDescription `xml:"hostSystemPowerState,omitempty,typeattr"`
    +	VirtualMachineGuestHeartbeatStatus []BaseElementDescription `xml:"virtualMachineGuestHeartbeatStatus,omitempty,typeattr"`
    +	EntityStatus                       []BaseElementDescription `xml:"entityStatus,typeattr"`
    +	Action                             []BaseTypeDescription    `xml:"action,typeattr"`
    +}
    +
    +func init() {
    +	t["AlarmDescription"] = reflect.TypeOf((*AlarmDescription)(nil)).Elem()
    +}
    +
    +type AlarmEmailCompletedEvent struct {
    +	AlarmEvent
    +
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +	To     string                     `xml:"to"`
    +}
    +
    +func init() {
    +	t["AlarmEmailCompletedEvent"] = reflect.TypeOf((*AlarmEmailCompletedEvent)(nil)).Elem()
    +}
    +
    +type AlarmEmailFailedEvent struct {
    +	AlarmEvent
    +
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +	To     string                     `xml:"to"`
    +	Reason LocalizedMethodFault       `xml:"reason"`
    +}
    +
    +func init() {
    +	t["AlarmEmailFailedEvent"] = reflect.TypeOf((*AlarmEmailFailedEvent)(nil)).Elem()
    +}
    +
    +type AlarmEvent struct {
    +	Event
    +
    +	Alarm AlarmEventArgument `xml:"alarm"`
    +}
    +
    +func init() {
    +	t["AlarmEvent"] = reflect.TypeOf((*AlarmEvent)(nil)).Elem()
    +}
    +
    +type AlarmEventArgument struct {
    +	EntityEventArgument
    +
    +	Alarm ManagedObjectReference `xml:"alarm"`
    +}
    +
    +func init() {
    +	t["AlarmEventArgument"] = reflect.TypeOf((*AlarmEventArgument)(nil)).Elem()
    +}
    +
    +type AlarmExpression struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["AlarmExpression"] = reflect.TypeOf((*AlarmExpression)(nil)).Elem()
    +}
    +
    +type AlarmFilterSpec struct {
    +	DynamicData
    +
    +	Status      []ManagedEntityStatus `xml:"status,omitempty"`
    +	TypeEntity  string                `xml:"typeEntity,omitempty"`
    +	TypeTrigger string                `xml:"typeTrigger,omitempty"`
    +}
    +
    +func init() {
    +	t["AlarmFilterSpec"] = reflect.TypeOf((*AlarmFilterSpec)(nil)).Elem()
    +}
    +
    +type AlarmInfo struct {
    +	AlarmSpec
    +
    +	Key              string                 `xml:"key"`
    +	Alarm            ManagedObjectReference `xml:"alarm"`
    +	Entity           ManagedObjectReference `xml:"entity"`
    +	LastModifiedTime time.Time              `xml:"lastModifiedTime"`
    +	LastModifiedUser string                 `xml:"lastModifiedUser"`
    +	CreationEventId  int32                  `xml:"creationEventId"`
    +}
    +
    +func init() {
    +	t["AlarmInfo"] = reflect.TypeOf((*AlarmInfo)(nil)).Elem()
    +}
    +
    +type AlarmReconfiguredEvent struct {
    +	AlarmEvent
    +
    +	Entity        ManagedEntityEventArgument `xml:"entity"`
    +	ConfigChanges *ChangesInfoEventArgument  `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["AlarmReconfiguredEvent"] = reflect.TypeOf((*AlarmReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type AlarmRemovedEvent struct {
    +	AlarmEvent
    +
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +}
    +
    +func init() {
    +	t["AlarmRemovedEvent"] = reflect.TypeOf((*AlarmRemovedEvent)(nil)).Elem()
    +}
    +
    +type AlarmScriptCompleteEvent struct {
    +	AlarmEvent
    +
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +	Script string                     `xml:"script"`
    +}
    +
    +func init() {
    +	t["AlarmScriptCompleteEvent"] = reflect.TypeOf((*AlarmScriptCompleteEvent)(nil)).Elem()
    +}
    +
    +type AlarmScriptFailedEvent struct {
    +	AlarmEvent
    +
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +	Script string                     `xml:"script"`
    +	Reason LocalizedMethodFault       `xml:"reason"`
    +}
    +
    +func init() {
    +	t["AlarmScriptFailedEvent"] = reflect.TypeOf((*AlarmScriptFailedEvent)(nil)).Elem()
    +}
    +
    +type AlarmSetting struct {
    +	DynamicData
    +
    +	ToleranceRange     int32 `xml:"toleranceRange"`
    +	ReportingFrequency int32 `xml:"reportingFrequency"`
    +}
    +
    +func init() {
    +	t["AlarmSetting"] = reflect.TypeOf((*AlarmSetting)(nil)).Elem()
    +}
    +
    +type AlarmSnmpCompletedEvent struct {
    +	AlarmEvent
    +
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +}
    +
    +func init() {
    +	t["AlarmSnmpCompletedEvent"] = reflect.TypeOf((*AlarmSnmpCompletedEvent)(nil)).Elem()
    +}
    +
    +type AlarmSnmpFailedEvent struct {
    +	AlarmEvent
    +
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +	Reason LocalizedMethodFault       `xml:"reason"`
    +}
    +
    +func init() {
    +	t["AlarmSnmpFailedEvent"] = reflect.TypeOf((*AlarmSnmpFailedEvent)(nil)).Elem()
    +}
    +
    +type AlarmSpec struct {
    +	DynamicData
    +
    +	Name            string              `xml:"name"`
    +	SystemName      string              `xml:"systemName,omitempty"`
    +	Description     string              `xml:"description"`
    +	Enabled         bool                `xml:"enabled"`
    +	Expression      BaseAlarmExpression `xml:"expression,typeattr"`
    +	Action          BaseAlarmAction     `xml:"action,omitempty,typeattr"`
    +	ActionFrequency int32               `xml:"actionFrequency,omitempty"`
    +	Setting         *AlarmSetting       `xml:"setting,omitempty"`
    +}
    +
    +func init() {
    +	t["AlarmSpec"] = reflect.TypeOf((*AlarmSpec)(nil)).Elem()
    +}
    +
    +type AlarmState struct {
    +	DynamicData
    +
    +	Key                string                 `xml:"key"`
    +	Entity             ManagedObjectReference `xml:"entity"`
    +	Alarm              ManagedObjectReference `xml:"alarm"`
    +	OverallStatus      ManagedEntityStatus    `xml:"overallStatus"`
    +	Time               time.Time              `xml:"time"`
    +	Acknowledged       *bool                  `xml:"acknowledged"`
    +	AcknowledgedByUser string                 `xml:"acknowledgedByUser,omitempty"`
    +	AcknowledgedTime   *time.Time             `xml:"acknowledgedTime"`
    +	EventKey           int32                  `xml:"eventKey,omitempty"`
    +}
    +
    +func init() {
    +	t["AlarmState"] = reflect.TypeOf((*AlarmState)(nil)).Elem()
    +}
    +
    +type AlarmStatusChangedEvent struct {
    +	AlarmEvent
    +
    +	Source ManagedEntityEventArgument `xml:"source"`
    +	Entity ManagedEntityEventArgument `xml:"entity"`
    +	From   string                     `xml:"from"`
    +	To     string                     `xml:"to"`
    +}
    +
    +func init() {
    +	t["AlarmStatusChangedEvent"] = reflect.TypeOf((*AlarmStatusChangedEvent)(nil)).Elem()
    +}
    +
    +type AlarmTriggeringAction struct {
    +	AlarmAction
    +
    +	Action          BaseAction                            `xml:"action,typeattr"`
    +	TransitionSpecs []AlarmTriggeringActionTransitionSpec `xml:"transitionSpecs,omitempty"`
    +	Green2yellow    bool                                  `xml:"green2yellow"`
    +	Yellow2red      bool                                  `xml:"yellow2red"`
    +	Red2yellow      bool                                  `xml:"red2yellow"`
    +	Yellow2green    bool                                  `xml:"yellow2green"`
    +}
    +
    +func init() {
    +	t["AlarmTriggeringAction"] = reflect.TypeOf((*AlarmTriggeringAction)(nil)).Elem()
    +}
    +
    +type AlarmTriggeringActionTransitionSpec struct {
    +	DynamicData
    +
    +	StartState ManagedEntityStatus `xml:"startState"`
    +	FinalState ManagedEntityStatus `xml:"finalState"`
    +	Repeats    bool                `xml:"repeats"`
    +}
    +
    +func init() {
    +	t["AlarmTriggeringActionTransitionSpec"] = reflect.TypeOf((*AlarmTriggeringActionTransitionSpec)(nil)).Elem()
    +}
    +
    +type AllVirtualMachinesLicensedEvent struct {
    +	LicenseEvent
    +}
    +
    +func init() {
    +	t["AllVirtualMachinesLicensedEvent"] = reflect.TypeOf((*AllVirtualMachinesLicensedEvent)(nil)).Elem()
    +}
    +
    +type AllocateIpv4Address AllocateIpv4AddressRequestType
    +
    +func init() {
    +	t["AllocateIpv4Address"] = reflect.TypeOf((*AllocateIpv4Address)(nil)).Elem()
    +}
    +
    +type AllocateIpv4AddressRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Dc           ManagedObjectReference `xml:"dc"`
    +	PoolId       int32                  `xml:"poolId"`
    +	AllocationId string                 `xml:"allocationId"`
    +}
    +
    +func init() {
    +	t["AllocateIpv4AddressRequestType"] = reflect.TypeOf((*AllocateIpv4AddressRequestType)(nil)).Elem()
    +}
    +
    +type AllocateIpv4AddressResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type AllocateIpv6Address AllocateIpv6AddressRequestType
    +
    +func init() {
    +	t["AllocateIpv6Address"] = reflect.TypeOf((*AllocateIpv6Address)(nil)).Elem()
    +}
    +
    +type AllocateIpv6AddressRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Dc           ManagedObjectReference `xml:"dc"`
    +	PoolId       int32                  `xml:"poolId"`
    +	AllocationId string                 `xml:"allocationId"`
    +}
    +
    +func init() {
    +	t["AllocateIpv6AddressRequestType"] = reflect.TypeOf((*AllocateIpv6AddressRequestType)(nil)).Elem()
    +}
    +
    +type AllocateIpv6AddressResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type AlreadyAuthenticatedSessionEvent struct {
    +	SessionEvent
    +}
    +
    +func init() {
    +	t["AlreadyAuthenticatedSessionEvent"] = reflect.TypeOf((*AlreadyAuthenticatedSessionEvent)(nil)).Elem()
    +}
    +
    +type AlreadyBeingManaged struct {
    +	HostConnectFault
    +
    +	IpAddress string `xml:"ipAddress"`
    +}
    +
    +func init() {
    +	t["AlreadyBeingManaged"] = reflect.TypeOf((*AlreadyBeingManaged)(nil)).Elem()
    +}
    +
    +type AlreadyBeingManagedFault AlreadyBeingManaged
    +
    +func init() {
    +	t["AlreadyBeingManagedFault"] = reflect.TypeOf((*AlreadyBeingManagedFault)(nil)).Elem()
    +}
    +
    +type AlreadyConnected struct {
    +	HostConnectFault
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["AlreadyConnected"] = reflect.TypeOf((*AlreadyConnected)(nil)).Elem()
    +}
    +
    +type AlreadyConnectedFault AlreadyConnected
    +
    +func init() {
    +	t["AlreadyConnectedFault"] = reflect.TypeOf((*AlreadyConnectedFault)(nil)).Elem()
    +}
    +
    +type AlreadyExists struct {
    +	VimFault
    +
    +	Name string `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["AlreadyExists"] = reflect.TypeOf((*AlreadyExists)(nil)).Elem()
    +}
    +
    +type AlreadyExistsFault AlreadyExists
    +
    +func init() {
    +	t["AlreadyExistsFault"] = reflect.TypeOf((*AlreadyExistsFault)(nil)).Elem()
    +}
    +
    +type AlreadyUpgraded struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["AlreadyUpgraded"] = reflect.TypeOf((*AlreadyUpgraded)(nil)).Elem()
    +}
    +
    +type AlreadyUpgradedFault AlreadyUpgraded
    +
    +func init() {
    +	t["AlreadyUpgradedFault"] = reflect.TypeOf((*AlreadyUpgradedFault)(nil)).Elem()
    +}
    +
    +type AndAlarmExpression struct {
    +	AlarmExpression
    +
    +	Expression []BaseAlarmExpression `xml:"expression,typeattr"`
    +}
    +
    +func init() {
    +	t["AndAlarmExpression"] = reflect.TypeOf((*AndAlarmExpression)(nil)).Elem()
    +}
    +
    +type AnswerFile struct {
    +	DynamicData
    +
    +	UserInput    []ProfileDeferredPolicyOptionParameter `xml:"userInput,omitempty"`
    +	CreatedTime  time.Time                              `xml:"createdTime"`
    +	ModifiedTime time.Time                              `xml:"modifiedTime"`
    +}
    +
    +func init() {
    +	t["AnswerFile"] = reflect.TypeOf((*AnswerFile)(nil)).Elem()
    +}
    +
    +type AnswerFileCreateSpec struct {
    +	DynamicData
    +
    +	Validating *bool `xml:"validating"`
    +}
    +
    +func init() {
    +	t["AnswerFileCreateSpec"] = reflect.TypeOf((*AnswerFileCreateSpec)(nil)).Elem()
    +}
    +
    +type AnswerFileOptionsCreateSpec struct {
    +	AnswerFileCreateSpec
    +
    +	UserInput []ProfileDeferredPolicyOptionParameter `xml:"userInput,omitempty"`
    +}
    +
    +func init() {
    +	t["AnswerFileOptionsCreateSpec"] = reflect.TypeOf((*AnswerFileOptionsCreateSpec)(nil)).Elem()
    +}
    +
    +type AnswerFileSerializedCreateSpec struct {
    +	AnswerFileCreateSpec
    +
    +	AnswerFileConfigString string `xml:"answerFileConfigString"`
    +}
    +
    +func init() {
    +	t["AnswerFileSerializedCreateSpec"] = reflect.TypeOf((*AnswerFileSerializedCreateSpec)(nil)).Elem()
    +}
    +
    +type AnswerFileStatusError struct {
    +	DynamicData
    +
    +	UserInputPath ProfilePropertyPath `xml:"userInputPath"`
    +	ErrMsg        LocalizableMessage  `xml:"errMsg"`
    +}
    +
    +func init() {
    +	t["AnswerFileStatusError"] = reflect.TypeOf((*AnswerFileStatusError)(nil)).Elem()
    +}
    +
    +type AnswerFileStatusResult struct {
    +	DynamicData
    +
    +	CheckedTime time.Time               `xml:"checkedTime"`
    +	Host        ManagedObjectReference  `xml:"host"`
    +	Status      string                  `xml:"status"`
    +	Error       []AnswerFileStatusError `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["AnswerFileStatusResult"] = reflect.TypeOf((*AnswerFileStatusResult)(nil)).Elem()
    +}
    +
    +type AnswerFileUpdateFailed struct {
    +	VimFault
    +
    +	Failure []AnswerFileUpdateFailure `xml:"failure"`
    +}
    +
    +func init() {
    +	t["AnswerFileUpdateFailed"] = reflect.TypeOf((*AnswerFileUpdateFailed)(nil)).Elem()
    +}
    +
    +type AnswerFileUpdateFailedFault AnswerFileUpdateFailed
    +
    +func init() {
    +	t["AnswerFileUpdateFailedFault"] = reflect.TypeOf((*AnswerFileUpdateFailedFault)(nil)).Elem()
    +}
    +
    +type AnswerFileUpdateFailure struct {
    +	DynamicData
    +
    +	UserInputPath ProfilePropertyPath `xml:"userInputPath"`
    +	ErrMsg        LocalizableMessage  `xml:"errMsg"`
    +}
    +
    +func init() {
    +	t["AnswerFileUpdateFailure"] = reflect.TypeOf((*AnswerFileUpdateFailure)(nil)).Elem()
    +}
    +
    +type AnswerVM AnswerVMRequestType
    +
    +func init() {
    +	t["AnswerVM"] = reflect.TypeOf((*AnswerVM)(nil)).Elem()
    +}
    +
    +type AnswerVMRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	QuestionId   string                 `xml:"questionId"`
    +	AnswerChoice string                 `xml:"answerChoice"`
    +}
    +
    +func init() {
    +	t["AnswerVMRequestType"] = reflect.TypeOf((*AnswerVMRequestType)(nil)).Elem()
    +}
    +
    +type AnswerVMResponse struct {
    +}
    +
    +type ApplicationQuiesceFault struct {
    +	SnapshotFault
    +}
    +
    +func init() {
    +	t["ApplicationQuiesceFault"] = reflect.TypeOf((*ApplicationQuiesceFault)(nil)).Elem()
    +}
    +
    +type ApplicationQuiesceFaultFault ApplicationQuiesceFault
    +
    +func init() {
    +	t["ApplicationQuiesceFaultFault"] = reflect.TypeOf((*ApplicationQuiesceFaultFault)(nil)).Elem()
    +}
    +
    +type ApplyEntitiesConfigRequestType struct {
    +	This             ManagedObjectReference              `xml:"_this"`
    +	ApplyConfigSpecs []ApplyHostProfileConfigurationSpec `xml:"applyConfigSpecs,omitempty"`
    +}
    +
    +func init() {
    +	t["ApplyEntitiesConfigRequestType"] = reflect.TypeOf((*ApplyEntitiesConfigRequestType)(nil)).Elem()
    +}
    +
    +type ApplyEntitiesConfig_Task ApplyEntitiesConfigRequestType
    +
    +func init() {
    +	t["ApplyEntitiesConfig_Task"] = reflect.TypeOf((*ApplyEntitiesConfig_Task)(nil)).Elem()
    +}
    +
    +type ApplyEntitiesConfig_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ApplyEvcModeVMRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	Mask          []HostFeatureMask      `xml:"mask,omitempty"`
    +	CompleteMasks *bool                  `xml:"completeMasks"`
    +}
    +
    +func init() {
    +	t["ApplyEvcModeVMRequestType"] = reflect.TypeOf((*ApplyEvcModeVMRequestType)(nil)).Elem()
    +}
    +
    +type ApplyEvcModeVM_Task ApplyEvcModeVMRequestType
    +
    +func init() {
    +	t["ApplyEvcModeVM_Task"] = reflect.TypeOf((*ApplyEvcModeVM_Task)(nil)).Elem()
    +}
    +
    +type ApplyEvcModeVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ApplyHostConfigRequestType struct {
    +	This       ManagedObjectReference                 `xml:"_this"`
    +	Host       ManagedObjectReference                 `xml:"host"`
    +	ConfigSpec HostConfigSpec                         `xml:"configSpec"`
    +	UserInput  []ProfileDeferredPolicyOptionParameter `xml:"userInput,omitempty"`
    +}
    +
    +func init() {
    +	t["ApplyHostConfigRequestType"] = reflect.TypeOf((*ApplyHostConfigRequestType)(nil)).Elem()
    +}
    +
    +type ApplyHostConfig_Task ApplyHostConfigRequestType
    +
    +func init() {
    +	t["ApplyHostConfig_Task"] = reflect.TypeOf((*ApplyHostConfig_Task)(nil)).Elem()
    +}
    +
    +type ApplyHostConfig_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ApplyHostProfileConfigurationResult struct {
    +	DynamicData
    +
    +	StartTime    time.Time              `xml:"startTime"`
    +	CompleteTime time.Time              `xml:"completeTime"`
    +	Host         ManagedObjectReference `xml:"host"`
    +	Status       string                 `xml:"status"`
    +	Errors       []LocalizedMethodFault `xml:"errors,omitempty"`
    +}
    +
    +func init() {
    +	t["ApplyHostProfileConfigurationResult"] = reflect.TypeOf((*ApplyHostProfileConfigurationResult)(nil)).Elem()
    +}
    +
    +type ApplyHostProfileConfigurationSpec struct {
    +	ProfileExecuteResult
    +
    +	Host                ManagedObjectReference `xml:"host"`
    +	TaskListRequirement []string               `xml:"taskListRequirement,omitempty"`
    +	TaskDescription     []LocalizableMessage   `xml:"taskDescription,omitempty"`
    +	RebootStateless     *bool                  `xml:"rebootStateless"`
    +	RebootHost          *bool                  `xml:"rebootHost"`
    +	FaultData           *LocalizedMethodFault  `xml:"faultData,omitempty"`
    +}
    +
    +func init() {
    +	t["ApplyHostProfileConfigurationSpec"] = reflect.TypeOf((*ApplyHostProfileConfigurationSpec)(nil)).Elem()
    +}
    +
    +type ApplyProfile struct {
    +	DynamicData
    +
    +	Enabled          bool                          `xml:"enabled"`
    +	Policy           []ProfilePolicy               `xml:"policy,omitempty"`
    +	ProfileTypeName  string                        `xml:"profileTypeName,omitempty"`
    +	ProfileVersion   string                        `xml:"profileVersion,omitempty"`
    +	Property         []ProfileApplyProfileProperty `xml:"property,omitempty"`
    +	Favorite         *bool                         `xml:"favorite"`
    +	ToBeMerged       *bool                         `xml:"toBeMerged"`
    +	ToReplaceWith    *bool                         `xml:"toReplaceWith"`
    +	ToBeDeleted      *bool                         `xml:"toBeDeleted"`
    +	CopyEnableStatus *bool                         `xml:"copyEnableStatus"`
    +	Hidden           *bool                         `xml:"hidden"`
    +}
    +
    +func init() {
    +	t["ApplyProfile"] = reflect.TypeOf((*ApplyProfile)(nil)).Elem()
    +}
    +
    +type ApplyRecommendation ApplyRecommendationRequestType
    +
    +func init() {
    +	t["ApplyRecommendation"] = reflect.TypeOf((*ApplyRecommendation)(nil)).Elem()
    +}
    +
    +type ApplyRecommendationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  string                 `xml:"key"`
    +}
    +
    +func init() {
    +	t["ApplyRecommendationRequestType"] = reflect.TypeOf((*ApplyRecommendationRequestType)(nil)).Elem()
    +}
    +
    +type ApplyRecommendationResponse struct {
    +}
    +
    +type ApplyStorageDrsRecommendationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  []string               `xml:"key"`
    +}
    +
    +func init() {
    +	t["ApplyStorageDrsRecommendationRequestType"] = reflect.TypeOf((*ApplyStorageDrsRecommendationRequestType)(nil)).Elem()
    +}
    +
    +type ApplyStorageDrsRecommendationToPodRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Pod  ManagedObjectReference `xml:"pod"`
    +	Key  string                 `xml:"key"`
    +}
    +
    +func init() {
    +	t["ApplyStorageDrsRecommendationToPodRequestType"] = reflect.TypeOf((*ApplyStorageDrsRecommendationToPodRequestType)(nil)).Elem()
    +}
    +
    +type ApplyStorageDrsRecommendationToPod_Task ApplyStorageDrsRecommendationToPodRequestType
    +
    +func init() {
    +	t["ApplyStorageDrsRecommendationToPod_Task"] = reflect.TypeOf((*ApplyStorageDrsRecommendationToPod_Task)(nil)).Elem()
    +}
    +
    +type ApplyStorageDrsRecommendationToPod_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ApplyStorageDrsRecommendation_Task ApplyStorageDrsRecommendationRequestType
    +
    +func init() {
    +	t["ApplyStorageDrsRecommendation_Task"] = reflect.TypeOf((*ApplyStorageDrsRecommendation_Task)(nil)).Elem()
    +}
    +
    +type ApplyStorageDrsRecommendation_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ApplyStorageRecommendationResult struct {
    +	DynamicData
    +
    +	Vm *ManagedObjectReference `xml:"vm,omitempty"`
    +}
    +
    +func init() {
    +	t["ApplyStorageRecommendationResult"] = reflect.TypeOf((*ApplyStorageRecommendationResult)(nil)).Elem()
    +}
    +
    +type AreAlarmActionsEnabled AreAlarmActionsEnabledRequestType
    +
    +func init() {
    +	t["AreAlarmActionsEnabled"] = reflect.TypeOf((*AreAlarmActionsEnabled)(nil)).Elem()
    +}
    +
    +type AreAlarmActionsEnabledRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["AreAlarmActionsEnabledRequestType"] = reflect.TypeOf((*AreAlarmActionsEnabledRequestType)(nil)).Elem()
    +}
    +
    +type AreAlarmActionsEnabledResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type ArrayOfAlarmAction struct {
    +	AlarmAction []BaseAlarmAction `xml:"AlarmAction,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfAlarmAction"] = reflect.TypeOf((*ArrayOfAlarmAction)(nil)).Elem()
    +}
    +
    +type ArrayOfAlarmExpression struct {
    +	AlarmExpression []BaseAlarmExpression `xml:"AlarmExpression,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfAlarmExpression"] = reflect.TypeOf((*ArrayOfAlarmExpression)(nil)).Elem()
    +}
    +
    +type ArrayOfAlarmState struct {
    +	AlarmState []AlarmState `xml:"AlarmState,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAlarmState"] = reflect.TypeOf((*ArrayOfAlarmState)(nil)).Elem()
    +}
    +
    +type ArrayOfAlarmTriggeringActionTransitionSpec struct {
    +	AlarmTriggeringActionTransitionSpec []AlarmTriggeringActionTransitionSpec `xml:"AlarmTriggeringActionTransitionSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAlarmTriggeringActionTransitionSpec"] = reflect.TypeOf((*ArrayOfAlarmTriggeringActionTransitionSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfAnswerFileStatusError struct {
    +	AnswerFileStatusError []AnswerFileStatusError `xml:"AnswerFileStatusError,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAnswerFileStatusError"] = reflect.TypeOf((*ArrayOfAnswerFileStatusError)(nil)).Elem()
    +}
    +
    +type ArrayOfAnswerFileStatusResult struct {
    +	AnswerFileStatusResult []AnswerFileStatusResult `xml:"AnswerFileStatusResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAnswerFileStatusResult"] = reflect.TypeOf((*ArrayOfAnswerFileStatusResult)(nil)).Elem()
    +}
    +
    +type ArrayOfAnswerFileUpdateFailure struct {
    +	AnswerFileUpdateFailure []AnswerFileUpdateFailure `xml:"AnswerFileUpdateFailure,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAnswerFileUpdateFailure"] = reflect.TypeOf((*ArrayOfAnswerFileUpdateFailure)(nil)).Elem()
    +}
    +
    +type ArrayOfAnyType struct {
    +	AnyType []AnyType `xml:"anyType,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfAnyType"] = reflect.TypeOf((*ArrayOfAnyType)(nil)).Elem()
    +}
    +
    +type ArrayOfAnyURI struct {
    +	AnyURI []string `xml:"anyURI,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAnyURI"] = reflect.TypeOf((*ArrayOfAnyURI)(nil)).Elem()
    +}
    +
    +type ArrayOfApplyHostProfileConfigurationResult struct {
    +	ApplyHostProfileConfigurationResult []ApplyHostProfileConfigurationResult `xml:"ApplyHostProfileConfigurationResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfApplyHostProfileConfigurationResult"] = reflect.TypeOf((*ArrayOfApplyHostProfileConfigurationResult)(nil)).Elem()
    +}
    +
    +type ArrayOfApplyHostProfileConfigurationSpec struct {
    +	ApplyHostProfileConfigurationSpec []ApplyHostProfileConfigurationSpec `xml:"ApplyHostProfileConfigurationSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfApplyHostProfileConfigurationSpec"] = reflect.TypeOf((*ArrayOfApplyHostProfileConfigurationSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfApplyProfile struct {
    +	ApplyProfile []BaseApplyProfile `xml:"ApplyProfile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfApplyProfile"] = reflect.TypeOf((*ArrayOfApplyProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfAuthorizationPrivilege struct {
    +	AuthorizationPrivilege []AuthorizationPrivilege `xml:"AuthorizationPrivilege,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAuthorizationPrivilege"] = reflect.TypeOf((*ArrayOfAuthorizationPrivilege)(nil)).Elem()
    +}
    +
    +type ArrayOfAuthorizationRole struct {
    +	AuthorizationRole []AuthorizationRole `xml:"AuthorizationRole,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAuthorizationRole"] = reflect.TypeOf((*ArrayOfAuthorizationRole)(nil)).Elem()
    +}
    +
    +type ArrayOfAutoStartPowerInfo struct {
    +	AutoStartPowerInfo []AutoStartPowerInfo `xml:"AutoStartPowerInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfAutoStartPowerInfo"] = reflect.TypeOf((*ArrayOfAutoStartPowerInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfBase64Binary struct {
    +	Base64Binary [][]byte `xml:"base64Binary,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfBase64Binary"] = reflect.TypeOf((*ArrayOfBase64Binary)(nil)).Elem()
    +}
    +
    +type ArrayOfBoolean struct {
    +	Boolean []bool `xml:"boolean,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfBoolean"] = reflect.TypeOf((*ArrayOfBoolean)(nil)).Elem()
    +}
    +
    +type ArrayOfByte struct {
    +	Byte []byte `xml:"byte,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfByte"] = reflect.TypeOf((*ArrayOfByte)(nil)).Elem()
    +}
    +
    +type ArrayOfChangesInfoEventArgument struct {
    +	ChangesInfoEventArgument []ChangesInfoEventArgument `xml:"ChangesInfoEventArgument,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfChangesInfoEventArgument"] = reflect.TypeOf((*ArrayOfChangesInfoEventArgument)(nil)).Elem()
    +}
    +
    +type ArrayOfCheckResult struct {
    +	CheckResult []CheckResult `xml:"CheckResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCheckResult"] = reflect.TypeOf((*ArrayOfCheckResult)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterAction struct {
    +	ClusterAction []BaseClusterAction `xml:"ClusterAction,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterAction"] = reflect.TypeOf((*ArrayOfClusterAction)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterActionHistory struct {
    +	ClusterActionHistory []ClusterActionHistory `xml:"ClusterActionHistory,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterActionHistory"] = reflect.TypeOf((*ArrayOfClusterActionHistory)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterAttemptedVmInfo struct {
    +	ClusterAttemptedVmInfo []ClusterAttemptedVmInfo `xml:"ClusterAttemptedVmInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterAttemptedVmInfo"] = reflect.TypeOf((*ArrayOfClusterAttemptedVmInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDasAamNodeState struct {
    +	ClusterDasAamNodeState []ClusterDasAamNodeState `xml:"ClusterDasAamNodeState,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDasAamNodeState"] = reflect.TypeOf((*ArrayOfClusterDasAamNodeState)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots struct {
    +	ClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots []ClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots `xml:"ClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots"] = reflect.TypeOf((*ArrayOfClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots struct {
    +	ClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots []ClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots `xml:"ClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots"] = reflect.TypeOf((*ArrayOfClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDasVmConfigInfo struct {
    +	ClusterDasVmConfigInfo []ClusterDasVmConfigInfo `xml:"ClusterDasVmConfigInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDasVmConfigInfo"] = reflect.TypeOf((*ArrayOfClusterDasVmConfigInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDasVmConfigSpec struct {
    +	ClusterDasVmConfigSpec []ClusterDasVmConfigSpec `xml:"ClusterDasVmConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDasVmConfigSpec"] = reflect.TypeOf((*ArrayOfClusterDasVmConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDpmHostConfigInfo struct {
    +	ClusterDpmHostConfigInfo []ClusterDpmHostConfigInfo `xml:"ClusterDpmHostConfigInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDpmHostConfigInfo"] = reflect.TypeOf((*ArrayOfClusterDpmHostConfigInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDpmHostConfigSpec struct {
    +	ClusterDpmHostConfigSpec []ClusterDpmHostConfigSpec `xml:"ClusterDpmHostConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDpmHostConfigSpec"] = reflect.TypeOf((*ArrayOfClusterDpmHostConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDrsFaults struct {
    +	ClusterDrsFaults []ClusterDrsFaults `xml:"ClusterDrsFaults,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDrsFaults"] = reflect.TypeOf((*ArrayOfClusterDrsFaults)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDrsFaultsFaultsByVm struct {
    +	ClusterDrsFaultsFaultsByVm []BaseClusterDrsFaultsFaultsByVm `xml:"ClusterDrsFaultsFaultsByVm,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDrsFaultsFaultsByVm"] = reflect.TypeOf((*ArrayOfClusterDrsFaultsFaultsByVm)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDrsMigration struct {
    +	ClusterDrsMigration []ClusterDrsMigration `xml:"ClusterDrsMigration,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDrsMigration"] = reflect.TypeOf((*ArrayOfClusterDrsMigration)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDrsRecommendation struct {
    +	ClusterDrsRecommendation []ClusterDrsRecommendation `xml:"ClusterDrsRecommendation,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDrsRecommendation"] = reflect.TypeOf((*ArrayOfClusterDrsRecommendation)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDrsVmConfigInfo struct {
    +	ClusterDrsVmConfigInfo []ClusterDrsVmConfigInfo `xml:"ClusterDrsVmConfigInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDrsVmConfigInfo"] = reflect.TypeOf((*ArrayOfClusterDrsVmConfigInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterDrsVmConfigSpec struct {
    +	ClusterDrsVmConfigSpec []ClusterDrsVmConfigSpec `xml:"ClusterDrsVmConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterDrsVmConfigSpec"] = reflect.TypeOf((*ArrayOfClusterDrsVmConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterEVCManagerCheckResult struct {
    +	ClusterEVCManagerCheckResult []ClusterEVCManagerCheckResult `xml:"ClusterEVCManagerCheckResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterEVCManagerCheckResult"] = reflect.TypeOf((*ArrayOfClusterEVCManagerCheckResult)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterFailoverHostAdmissionControlInfoHostStatus struct {
    +	ClusterFailoverHostAdmissionControlInfoHostStatus []ClusterFailoverHostAdmissionControlInfoHostStatus `xml:"ClusterFailoverHostAdmissionControlInfoHostStatus,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterFailoverHostAdmissionControlInfoHostStatus"] = reflect.TypeOf((*ArrayOfClusterFailoverHostAdmissionControlInfoHostStatus)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterGroupInfo struct {
    +	ClusterGroupInfo []BaseClusterGroupInfo `xml:"ClusterGroupInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterGroupInfo"] = reflect.TypeOf((*ArrayOfClusterGroupInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterGroupSpec struct {
    +	ClusterGroupSpec []ClusterGroupSpec `xml:"ClusterGroupSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterGroupSpec"] = reflect.TypeOf((*ArrayOfClusterGroupSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterHostRecommendation struct {
    +	ClusterHostRecommendation []ClusterHostRecommendation `xml:"ClusterHostRecommendation,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterHostRecommendation"] = reflect.TypeOf((*ArrayOfClusterHostRecommendation)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterIoFilterInfo struct {
    +	ClusterIoFilterInfo []ClusterIoFilterInfo `xml:"ClusterIoFilterInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterIoFilterInfo"] = reflect.TypeOf((*ArrayOfClusterIoFilterInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterNotAttemptedVmInfo struct {
    +	ClusterNotAttemptedVmInfo []ClusterNotAttemptedVmInfo `xml:"ClusterNotAttemptedVmInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterNotAttemptedVmInfo"] = reflect.TypeOf((*ArrayOfClusterNotAttemptedVmInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterRecommendation struct {
    +	ClusterRecommendation []ClusterRecommendation `xml:"ClusterRecommendation,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterRecommendation"] = reflect.TypeOf((*ArrayOfClusterRecommendation)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterRuleInfo struct {
    +	ClusterRuleInfo []BaseClusterRuleInfo `xml:"ClusterRuleInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterRuleInfo"] = reflect.TypeOf((*ArrayOfClusterRuleInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterRuleSpec struct {
    +	ClusterRuleSpec []ClusterRuleSpec `xml:"ClusterRuleSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterRuleSpec"] = reflect.TypeOf((*ArrayOfClusterRuleSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterVmOrchestrationInfo struct {
    +	ClusterVmOrchestrationInfo []ClusterVmOrchestrationInfo `xml:"ClusterVmOrchestrationInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterVmOrchestrationInfo"] = reflect.TypeOf((*ArrayOfClusterVmOrchestrationInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfClusterVmOrchestrationSpec struct {
    +	ClusterVmOrchestrationSpec []ClusterVmOrchestrationSpec `xml:"ClusterVmOrchestrationSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfClusterVmOrchestrationSpec"] = reflect.TypeOf((*ArrayOfClusterVmOrchestrationSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfComplianceFailure struct {
    +	ComplianceFailure []ComplianceFailure `xml:"ComplianceFailure,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfComplianceFailure"] = reflect.TypeOf((*ArrayOfComplianceFailure)(nil)).Elem()
    +}
    +
    +type ArrayOfComplianceFailureComplianceFailureValues struct {
    +	ComplianceFailureComplianceFailureValues []ComplianceFailureComplianceFailureValues `xml:"ComplianceFailureComplianceFailureValues,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfComplianceFailureComplianceFailureValues"] = reflect.TypeOf((*ArrayOfComplianceFailureComplianceFailureValues)(nil)).Elem()
    +}
    +
    +type ArrayOfComplianceLocator struct {
    +	ComplianceLocator []ComplianceLocator `xml:"ComplianceLocator,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfComplianceLocator"] = reflect.TypeOf((*ArrayOfComplianceLocator)(nil)).Elem()
    +}
    +
    +type ArrayOfComplianceResult struct {
    +	ComplianceResult []ComplianceResult `xml:"ComplianceResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfComplianceResult"] = reflect.TypeOf((*ArrayOfComplianceResult)(nil)).Elem()
    +}
    +
    +type ArrayOfComputeResourceHostSPBMLicenseInfo struct {
    +	ComputeResourceHostSPBMLicenseInfo []ComputeResourceHostSPBMLicenseInfo `xml:"ComputeResourceHostSPBMLicenseInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfComputeResourceHostSPBMLicenseInfo"] = reflect.TypeOf((*ArrayOfComputeResourceHostSPBMLicenseInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfConflictingConfigurationConfig struct {
    +	ConflictingConfigurationConfig []ConflictingConfigurationConfig `xml:"ConflictingConfigurationConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfConflictingConfigurationConfig"] = reflect.TypeOf((*ArrayOfConflictingConfigurationConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfCryptoKeyId struct {
    +	CryptoKeyId []CryptoKeyId `xml:"CryptoKeyId,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCryptoKeyId"] = reflect.TypeOf((*ArrayOfCryptoKeyId)(nil)).Elem()
    +}
    +
    +type ArrayOfCryptoKeyPlain struct {
    +	CryptoKeyPlain []CryptoKeyPlain `xml:"CryptoKeyPlain,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCryptoKeyPlain"] = reflect.TypeOf((*ArrayOfCryptoKeyPlain)(nil)).Elem()
    +}
    +
    +type ArrayOfCryptoKeyResult struct {
    +	CryptoKeyResult []CryptoKeyResult `xml:"CryptoKeyResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCryptoKeyResult"] = reflect.TypeOf((*ArrayOfCryptoKeyResult)(nil)).Elem()
    +}
    +
    +type ArrayOfCryptoManagerKmipClusterStatus struct {
    +	CryptoManagerKmipClusterStatus []CryptoManagerKmipClusterStatus `xml:"CryptoManagerKmipClusterStatus,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCryptoManagerKmipClusterStatus"] = reflect.TypeOf((*ArrayOfCryptoManagerKmipClusterStatus)(nil)).Elem()
    +}
    +
    +type ArrayOfCryptoManagerKmipServerStatus struct {
    +	CryptoManagerKmipServerStatus []CryptoManagerKmipServerStatus `xml:"CryptoManagerKmipServerStatus,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCryptoManagerKmipServerStatus"] = reflect.TypeOf((*ArrayOfCryptoManagerKmipServerStatus)(nil)).Elem()
    +}
    +
    +type ArrayOfCustomFieldDef struct {
    +	CustomFieldDef []CustomFieldDef `xml:"CustomFieldDef,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCustomFieldDef"] = reflect.TypeOf((*ArrayOfCustomFieldDef)(nil)).Elem()
    +}
    +
    +type ArrayOfCustomFieldValue struct {
    +	CustomFieldValue []BaseCustomFieldValue `xml:"CustomFieldValue,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfCustomFieldValue"] = reflect.TypeOf((*ArrayOfCustomFieldValue)(nil)).Elem()
    +}
    +
    +type ArrayOfCustomizationAdapterMapping struct {
    +	CustomizationAdapterMapping []CustomizationAdapterMapping `xml:"CustomizationAdapterMapping,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCustomizationAdapterMapping"] = reflect.TypeOf((*ArrayOfCustomizationAdapterMapping)(nil)).Elem()
    +}
    +
    +type ArrayOfCustomizationIpV6Generator struct {
    +	CustomizationIpV6Generator []BaseCustomizationIpV6Generator `xml:"CustomizationIpV6Generator,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfCustomizationIpV6Generator"] = reflect.TypeOf((*ArrayOfCustomizationIpV6Generator)(nil)).Elem()
    +}
    +
    +type ArrayOfCustomizationSpecInfo struct {
    +	CustomizationSpecInfo []CustomizationSpecInfo `xml:"CustomizationSpecInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfCustomizationSpecInfo"] = reflect.TypeOf((*ArrayOfCustomizationSpecInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfDVPortConfigSpec struct {
    +	DVPortConfigSpec []DVPortConfigSpec `xml:"DVPortConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDVPortConfigSpec"] = reflect.TypeOf((*ArrayOfDVPortConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDVPortgroupConfigSpec struct {
    +	DVPortgroupConfigSpec []DVPortgroupConfigSpec `xml:"DVPortgroupConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDVPortgroupConfigSpec"] = reflect.TypeOf((*ArrayOfDVPortgroupConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDVSHealthCheckConfig struct {
    +	DVSHealthCheckConfig []BaseDVSHealthCheckConfig `xml:"DVSHealthCheckConfig,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfDVSHealthCheckConfig"] = reflect.TypeOf((*ArrayOfDVSHealthCheckConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfDVSNetworkResourcePool struct {
    +	DVSNetworkResourcePool []DVSNetworkResourcePool `xml:"DVSNetworkResourcePool,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDVSNetworkResourcePool"] = reflect.TypeOf((*ArrayOfDVSNetworkResourcePool)(nil)).Elem()
    +}
    +
    +type ArrayOfDVSNetworkResourcePoolConfigSpec struct {
    +	DVSNetworkResourcePoolConfigSpec []DVSNetworkResourcePoolConfigSpec `xml:"DVSNetworkResourcePoolConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDVSNetworkResourcePoolConfigSpec"] = reflect.TypeOf((*ArrayOfDVSNetworkResourcePoolConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDVSVmVnicNetworkResourcePool struct {
    +	DVSVmVnicNetworkResourcePool []DVSVmVnicNetworkResourcePool `xml:"DVSVmVnicNetworkResourcePool,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDVSVmVnicNetworkResourcePool"] = reflect.TypeOf((*ArrayOfDVSVmVnicNetworkResourcePool)(nil)).Elem()
    +}
    +
    +type ArrayOfDasHeartbeatDatastoreInfo struct {
    +	DasHeartbeatDatastoreInfo []DasHeartbeatDatastoreInfo `xml:"DasHeartbeatDatastoreInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDasHeartbeatDatastoreInfo"] = reflect.TypeOf((*ArrayOfDasHeartbeatDatastoreInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfDatacenterMismatchArgument struct {
    +	DatacenterMismatchArgument []DatacenterMismatchArgument `xml:"DatacenterMismatchArgument,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDatacenterMismatchArgument"] = reflect.TypeOf((*ArrayOfDatacenterMismatchArgument)(nil)).Elem()
    +}
    +
    +type ArrayOfDatastoreHostMount struct {
    +	DatastoreHostMount []DatastoreHostMount `xml:"DatastoreHostMount,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDatastoreHostMount"] = reflect.TypeOf((*ArrayOfDatastoreHostMount)(nil)).Elem()
    +}
    +
    +type ArrayOfDatastoreMountPathDatastorePair struct {
    +	DatastoreMountPathDatastorePair []DatastoreMountPathDatastorePair `xml:"DatastoreMountPathDatastorePair,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDatastoreMountPathDatastorePair"] = reflect.TypeOf((*ArrayOfDatastoreMountPathDatastorePair)(nil)).Elem()
    +}
    +
    +type ArrayOfDatastoreVVolContainerFailoverPair struct {
    +	DatastoreVVolContainerFailoverPair []DatastoreVVolContainerFailoverPair `xml:"DatastoreVVolContainerFailoverPair,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDatastoreVVolContainerFailoverPair"] = reflect.TypeOf((*ArrayOfDatastoreVVolContainerFailoverPair)(nil)).Elem()
    +}
    +
    +type ArrayOfDiagnosticManagerBundleInfo struct {
    +	DiagnosticManagerBundleInfo []DiagnosticManagerBundleInfo `xml:"DiagnosticManagerBundleInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDiagnosticManagerBundleInfo"] = reflect.TypeOf((*ArrayOfDiagnosticManagerBundleInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfDiagnosticManagerLogDescriptor struct {
    +	DiagnosticManagerLogDescriptor []DiagnosticManagerLogDescriptor `xml:"DiagnosticManagerLogDescriptor,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDiagnosticManagerLogDescriptor"] = reflect.TypeOf((*ArrayOfDiagnosticManagerLogDescriptor)(nil)).Elem()
    +}
    +
    +type ArrayOfDiskChangeExtent struct {
    +	DiskChangeExtent []DiskChangeExtent `xml:"DiskChangeExtent,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDiskChangeExtent"] = reflect.TypeOf((*ArrayOfDiskChangeExtent)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualPort struct {
    +	DistributedVirtualPort []DistributedVirtualPort `xml:"DistributedVirtualPort,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualPort"] = reflect.TypeOf((*ArrayOfDistributedVirtualPort)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualPortgroupInfo struct {
    +	DistributedVirtualPortgroupInfo []DistributedVirtualPortgroupInfo `xml:"DistributedVirtualPortgroupInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualPortgroupInfo"] = reflect.TypeOf((*ArrayOfDistributedVirtualPortgroupInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchHostMember struct {
    +	DistributedVirtualSwitchHostMember []DistributedVirtualSwitchHostMember `xml:"DistributedVirtualSwitchHostMember,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchHostMember"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchHostMember)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchHostMemberConfigSpec struct {
    +	DistributedVirtualSwitchHostMemberConfigSpec []DistributedVirtualSwitchHostMemberConfigSpec `xml:"DistributedVirtualSwitchHostMemberConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchHostMemberConfigSpec"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchHostMemberConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchHostMemberPnicSpec struct {
    +	DistributedVirtualSwitchHostMemberPnicSpec []DistributedVirtualSwitchHostMemberPnicSpec `xml:"DistributedVirtualSwitchHostMemberPnicSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchHostMemberPnicSpec"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchHostMemberPnicSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchHostProductSpec struct {
    +	DistributedVirtualSwitchHostProductSpec []DistributedVirtualSwitchHostProductSpec `xml:"DistributedVirtualSwitchHostProductSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchHostProductSpec"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchHostProductSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchInfo struct {
    +	DistributedVirtualSwitchInfo []DistributedVirtualSwitchInfo `xml:"DistributedVirtualSwitchInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchInfo"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchKeyedOpaqueBlob struct {
    +	DistributedVirtualSwitchKeyedOpaqueBlob []DistributedVirtualSwitchKeyedOpaqueBlob `xml:"DistributedVirtualSwitchKeyedOpaqueBlob,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchKeyedOpaqueBlob"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchKeyedOpaqueBlob)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchManagerCompatibilityResult struct {
    +	DistributedVirtualSwitchManagerCompatibilityResult []DistributedVirtualSwitchManagerCompatibilityResult `xml:"DistributedVirtualSwitchManagerCompatibilityResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchManagerCompatibilityResult"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchManagerCompatibilityResult)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchManagerHostDvsFilterSpec struct {
    +	DistributedVirtualSwitchManagerHostDvsFilterSpec []BaseDistributedVirtualSwitchManagerHostDvsFilterSpec `xml:"DistributedVirtualSwitchManagerHostDvsFilterSpec,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchManagerHostDvsFilterSpec"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchManagerHostDvsFilterSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDistributedVirtualSwitchProductSpec struct {
    +	DistributedVirtualSwitchProductSpec []DistributedVirtualSwitchProductSpec `xml:"DistributedVirtualSwitchProductSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDistributedVirtualSwitchProductSpec"] = reflect.TypeOf((*ArrayOfDistributedVirtualSwitchProductSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDouble struct {
    +	Double []float64 `xml:"double,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDouble"] = reflect.TypeOf((*ArrayOfDouble)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsApplyOperationFaultFaultOnObject struct {
    +	DvsApplyOperationFaultFaultOnObject []DvsApplyOperationFaultFaultOnObject `xml:"DvsApplyOperationFaultFaultOnObject,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsApplyOperationFaultFaultOnObject"] = reflect.TypeOf((*ArrayOfDvsApplyOperationFaultFaultOnObject)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsFilterConfig struct {
    +	DvsFilterConfig []BaseDvsFilterConfig `xml:"DvsFilterConfig,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsFilterConfig"] = reflect.TypeOf((*ArrayOfDvsFilterConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsHostInfrastructureTrafficResource struct {
    +	DvsHostInfrastructureTrafficResource []DvsHostInfrastructureTrafficResource `xml:"DvsHostInfrastructureTrafficResource,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsHostInfrastructureTrafficResource"] = reflect.TypeOf((*ArrayOfDvsHostInfrastructureTrafficResource)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsHostVNicProfile struct {
    +	DvsHostVNicProfile []DvsHostVNicProfile `xml:"DvsHostVNicProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsHostVNicProfile"] = reflect.TypeOf((*ArrayOfDvsHostVNicProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsNetworkRuleQualifier struct {
    +	DvsNetworkRuleQualifier []BaseDvsNetworkRuleQualifier `xml:"DvsNetworkRuleQualifier,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsNetworkRuleQualifier"] = reflect.TypeOf((*ArrayOfDvsNetworkRuleQualifier)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsOperationBulkFaultFaultOnHost struct {
    +	DvsOperationBulkFaultFaultOnHost []DvsOperationBulkFaultFaultOnHost `xml:"DvsOperationBulkFaultFaultOnHost,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsOperationBulkFaultFaultOnHost"] = reflect.TypeOf((*ArrayOfDvsOperationBulkFaultFaultOnHost)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsOutOfSyncHostArgument struct {
    +	DvsOutOfSyncHostArgument []DvsOutOfSyncHostArgument `xml:"DvsOutOfSyncHostArgument,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsOutOfSyncHostArgument"] = reflect.TypeOf((*ArrayOfDvsOutOfSyncHostArgument)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsProfile struct {
    +	DvsProfile []DvsProfile `xml:"DvsProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsProfile"] = reflect.TypeOf((*ArrayOfDvsProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsServiceConsoleVNicProfile struct {
    +	DvsServiceConsoleVNicProfile []DvsServiceConsoleVNicProfile `xml:"DvsServiceConsoleVNicProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsServiceConsoleVNicProfile"] = reflect.TypeOf((*ArrayOfDvsServiceConsoleVNicProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsTrafficRule struct {
    +	DvsTrafficRule []DvsTrafficRule `xml:"DvsTrafficRule,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsTrafficRule"] = reflect.TypeOf((*ArrayOfDvsTrafficRule)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsVmVnicNetworkResourcePoolRuntimeInfo struct {
    +	DvsVmVnicNetworkResourcePoolRuntimeInfo []DvsVmVnicNetworkResourcePoolRuntimeInfo `xml:"DvsVmVnicNetworkResourcePoolRuntimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsVmVnicNetworkResourcePoolRuntimeInfo"] = reflect.TypeOf((*ArrayOfDvsVmVnicNetworkResourcePoolRuntimeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsVmVnicResourcePoolConfigSpec struct {
    +	DvsVmVnicResourcePoolConfigSpec []DvsVmVnicResourcePoolConfigSpec `xml:"DvsVmVnicResourcePoolConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsVmVnicResourcePoolConfigSpec"] = reflect.TypeOf((*ArrayOfDvsVmVnicResourcePoolConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfDvsVnicAllocatedResource struct {
    +	DvsVnicAllocatedResource []DvsVnicAllocatedResource `xml:"DvsVnicAllocatedResource,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDvsVnicAllocatedResource"] = reflect.TypeOf((*ArrayOfDvsVnicAllocatedResource)(nil)).Elem()
    +}
    +
    +type ArrayOfDynamicProperty struct {
    +	DynamicProperty []DynamicProperty `xml:"DynamicProperty,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfDynamicProperty"] = reflect.TypeOf((*ArrayOfDynamicProperty)(nil)).Elem()
    +}
    +
    +type ArrayOfEVCMode struct {
    +	EVCMode []EVCMode `xml:"EVCMode,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfEVCMode"] = reflect.TypeOf((*ArrayOfEVCMode)(nil)).Elem()
    +}
    +
    +type ArrayOfElementDescription struct {
    +	ElementDescription []BaseElementDescription `xml:"ElementDescription,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfElementDescription"] = reflect.TypeOf((*ArrayOfElementDescription)(nil)).Elem()
    +}
    +
    +type ArrayOfEntityBackupConfig struct {
    +	EntityBackupConfig []EntityBackupConfig `xml:"EntityBackupConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfEntityBackupConfig"] = reflect.TypeOf((*ArrayOfEntityBackupConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfEntityPrivilege struct {
    +	EntityPrivilege []EntityPrivilege `xml:"EntityPrivilege,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfEntityPrivilege"] = reflect.TypeOf((*ArrayOfEntityPrivilege)(nil)).Elem()
    +}
    +
    +type ArrayOfEnumDescription struct {
    +	EnumDescription []EnumDescription `xml:"EnumDescription,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfEnumDescription"] = reflect.TypeOf((*ArrayOfEnumDescription)(nil)).Elem()
    +}
    +
    +type ArrayOfEvent struct {
    +	Event []BaseEvent `xml:"Event,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfEvent"] = reflect.TypeOf((*ArrayOfEvent)(nil)).Elem()
    +}
    +
    +type ArrayOfEventAlarmExpressionComparison struct {
    +	EventAlarmExpressionComparison []EventAlarmExpressionComparison `xml:"EventAlarmExpressionComparison,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfEventAlarmExpressionComparison"] = reflect.TypeOf((*ArrayOfEventAlarmExpressionComparison)(nil)).Elem()
    +}
    +
    +type ArrayOfEventArgDesc struct {
    +	EventArgDesc []EventArgDesc `xml:"EventArgDesc,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfEventArgDesc"] = reflect.TypeOf((*ArrayOfEventArgDesc)(nil)).Elem()
    +}
    +
    +type ArrayOfEventDescriptionEventDetail struct {
    +	EventDescriptionEventDetail []EventDescriptionEventDetail `xml:"EventDescriptionEventDetail,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfEventDescriptionEventDetail"] = reflect.TypeOf((*ArrayOfEventDescriptionEventDetail)(nil)).Elem()
    +}
    +
    +type ArrayOfExtManagedEntityInfo struct {
    +	ExtManagedEntityInfo []ExtManagedEntityInfo `xml:"ExtManagedEntityInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtManagedEntityInfo"] = reflect.TypeOf((*ArrayOfExtManagedEntityInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfExtSolutionManagerInfoTabInfo struct {
    +	ExtSolutionManagerInfoTabInfo []ExtSolutionManagerInfoTabInfo `xml:"ExtSolutionManagerInfoTabInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtSolutionManagerInfoTabInfo"] = reflect.TypeOf((*ArrayOfExtSolutionManagerInfoTabInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfExtendedEventPair struct {
    +	ExtendedEventPair []ExtendedEventPair `xml:"ExtendedEventPair,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtendedEventPair"] = reflect.TypeOf((*ArrayOfExtendedEventPair)(nil)).Elem()
    +}
    +
    +type ArrayOfExtension struct {
    +	Extension []Extension `xml:"Extension,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtension"] = reflect.TypeOf((*ArrayOfExtension)(nil)).Elem()
    +}
    +
    +type ArrayOfExtensionClientInfo struct {
    +	ExtensionClientInfo []ExtensionClientInfo `xml:"ExtensionClientInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtensionClientInfo"] = reflect.TypeOf((*ArrayOfExtensionClientInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfExtensionEventTypeInfo struct {
    +	ExtensionEventTypeInfo []ExtensionEventTypeInfo `xml:"ExtensionEventTypeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtensionEventTypeInfo"] = reflect.TypeOf((*ArrayOfExtensionEventTypeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfExtensionFaultTypeInfo struct {
    +	ExtensionFaultTypeInfo []ExtensionFaultTypeInfo `xml:"ExtensionFaultTypeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtensionFaultTypeInfo"] = reflect.TypeOf((*ArrayOfExtensionFaultTypeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfExtensionManagerIpAllocationUsage struct {
    +	ExtensionManagerIpAllocationUsage []ExtensionManagerIpAllocationUsage `xml:"ExtensionManagerIpAllocationUsage,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtensionManagerIpAllocationUsage"] = reflect.TypeOf((*ArrayOfExtensionManagerIpAllocationUsage)(nil)).Elem()
    +}
    +
    +type ArrayOfExtensionPrivilegeInfo struct {
    +	ExtensionPrivilegeInfo []ExtensionPrivilegeInfo `xml:"ExtensionPrivilegeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtensionPrivilegeInfo"] = reflect.TypeOf((*ArrayOfExtensionPrivilegeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfExtensionResourceInfo struct {
    +	ExtensionResourceInfo []ExtensionResourceInfo `xml:"ExtensionResourceInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtensionResourceInfo"] = reflect.TypeOf((*ArrayOfExtensionResourceInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfExtensionServerInfo struct {
    +	ExtensionServerInfo []ExtensionServerInfo `xml:"ExtensionServerInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtensionServerInfo"] = reflect.TypeOf((*ArrayOfExtensionServerInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfExtensionTaskTypeInfo struct {
    +	ExtensionTaskTypeInfo []ExtensionTaskTypeInfo `xml:"ExtensionTaskTypeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfExtensionTaskTypeInfo"] = reflect.TypeOf((*ArrayOfExtensionTaskTypeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfFaultToleranceDiskSpec struct {
    +	FaultToleranceDiskSpec []FaultToleranceDiskSpec `xml:"FaultToleranceDiskSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfFaultToleranceDiskSpec"] = reflect.TypeOf((*ArrayOfFaultToleranceDiskSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfFaultsByHost struct {
    +	FaultsByHost []FaultsByHost `xml:"FaultsByHost,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfFaultsByHost"] = reflect.TypeOf((*ArrayOfFaultsByHost)(nil)).Elem()
    +}
    +
    +type ArrayOfFaultsByVM struct {
    +	FaultsByVM []FaultsByVM `xml:"FaultsByVM,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfFaultsByVM"] = reflect.TypeOf((*ArrayOfFaultsByVM)(nil)).Elem()
    +}
    +
    +type ArrayOfFcoeConfigVlanRange struct {
    +	FcoeConfigVlanRange []FcoeConfigVlanRange `xml:"FcoeConfigVlanRange,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfFcoeConfigVlanRange"] = reflect.TypeOf((*ArrayOfFcoeConfigVlanRange)(nil)).Elem()
    +}
    +
    +type ArrayOfFileInfo struct {
    +	FileInfo []BaseFileInfo `xml:"FileInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfFileInfo"] = reflect.TypeOf((*ArrayOfFileInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfFileQuery struct {
    +	FileQuery []BaseFileQuery `xml:"FileQuery,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfFileQuery"] = reflect.TypeOf((*ArrayOfFileQuery)(nil)).Elem()
    +}
    +
    +type ArrayOfFirewallProfileRulesetProfile struct {
    +	FirewallProfileRulesetProfile []FirewallProfileRulesetProfile `xml:"FirewallProfileRulesetProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfFirewallProfileRulesetProfile"] = reflect.TypeOf((*ArrayOfFirewallProfileRulesetProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestAliases struct {
    +	GuestAliases []GuestAliases `xml:"GuestAliases,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestAliases"] = reflect.TypeOf((*ArrayOfGuestAliases)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestAuthAliasInfo struct {
    +	GuestAuthAliasInfo []GuestAuthAliasInfo `xml:"GuestAuthAliasInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestAuthAliasInfo"] = reflect.TypeOf((*ArrayOfGuestAuthAliasInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestAuthSubject struct {
    +	GuestAuthSubject []BaseGuestAuthSubject `xml:"GuestAuthSubject,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestAuthSubject"] = reflect.TypeOf((*ArrayOfGuestAuthSubject)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestDiskInfo struct {
    +	GuestDiskInfo []GuestDiskInfo `xml:"GuestDiskInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestDiskInfo"] = reflect.TypeOf((*ArrayOfGuestDiskInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestFileInfo struct {
    +	GuestFileInfo []GuestFileInfo `xml:"GuestFileInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestFileInfo"] = reflect.TypeOf((*ArrayOfGuestFileInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestInfoNamespaceGenerationInfo struct {
    +	GuestInfoNamespaceGenerationInfo []GuestInfoNamespaceGenerationInfo `xml:"GuestInfoNamespaceGenerationInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestInfoNamespaceGenerationInfo"] = reflect.TypeOf((*ArrayOfGuestInfoNamespaceGenerationInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestMappedAliases struct {
    +	GuestMappedAliases []GuestMappedAliases `xml:"GuestMappedAliases,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestMappedAliases"] = reflect.TypeOf((*ArrayOfGuestMappedAliases)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestNicInfo struct {
    +	GuestNicInfo []GuestNicInfo `xml:"GuestNicInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestNicInfo"] = reflect.TypeOf((*ArrayOfGuestNicInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestOsDescriptor struct {
    +	GuestOsDescriptor []GuestOsDescriptor `xml:"GuestOsDescriptor,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestOsDescriptor"] = reflect.TypeOf((*ArrayOfGuestOsDescriptor)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestProcessInfo struct {
    +	GuestProcessInfo []GuestProcessInfo `xml:"GuestProcessInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestProcessInfo"] = reflect.TypeOf((*ArrayOfGuestProcessInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestRegKeyRecordSpec struct {
    +	GuestRegKeyRecordSpec []GuestRegKeyRecordSpec `xml:"GuestRegKeyRecordSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestRegKeyRecordSpec"] = reflect.TypeOf((*ArrayOfGuestRegKeyRecordSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestRegValueSpec struct {
    +	GuestRegValueSpec []GuestRegValueSpec `xml:"GuestRegValueSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestRegValueSpec"] = reflect.TypeOf((*ArrayOfGuestRegValueSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfGuestStackInfo struct {
    +	GuestStackInfo []GuestStackInfo `xml:"GuestStackInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfGuestStackInfo"] = reflect.TypeOf((*ArrayOfGuestStackInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHbrManagerVmReplicationCapability struct {
    +	HbrManagerVmReplicationCapability []HbrManagerVmReplicationCapability `xml:"HbrManagerVmReplicationCapability,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHbrManagerVmReplicationCapability"] = reflect.TypeOf((*ArrayOfHbrManagerVmReplicationCapability)(nil)).Elem()
    +}
    +
    +type ArrayOfHealthUpdate struct {
    +	HealthUpdate []HealthUpdate `xml:"HealthUpdate,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHealthUpdate"] = reflect.TypeOf((*ArrayOfHealthUpdate)(nil)).Elem()
    +}
    +
    +type ArrayOfHealthUpdateInfo struct {
    +	HealthUpdateInfo []HealthUpdateInfo `xml:"HealthUpdateInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHealthUpdateInfo"] = reflect.TypeOf((*ArrayOfHealthUpdateInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostAccessControlEntry struct {
    +	HostAccessControlEntry []HostAccessControlEntry `xml:"HostAccessControlEntry,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostAccessControlEntry"] = reflect.TypeOf((*ArrayOfHostAccessControlEntry)(nil)).Elem()
    +}
    +
    +type ArrayOfHostAccountSpec struct {
    +	HostAccountSpec []BaseHostAccountSpec `xml:"HostAccountSpec,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostAccountSpec"] = reflect.TypeOf((*ArrayOfHostAccountSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostActiveDirectory struct {
    +	HostActiveDirectory []HostActiveDirectory `xml:"HostActiveDirectory,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostActiveDirectory"] = reflect.TypeOf((*ArrayOfHostActiveDirectory)(nil)).Elem()
    +}
    +
    +type ArrayOfHostAuthenticationStoreInfo struct {
    +	HostAuthenticationStoreInfo []BaseHostAuthenticationStoreInfo `xml:"HostAuthenticationStoreInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostAuthenticationStoreInfo"] = reflect.TypeOf((*ArrayOfHostAuthenticationStoreInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostBootDevice struct {
    +	HostBootDevice []HostBootDevice `xml:"HostBootDevice,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostBootDevice"] = reflect.TypeOf((*ArrayOfHostBootDevice)(nil)).Elem()
    +}
    +
    +type ArrayOfHostCacheConfigurationInfo struct {
    +	HostCacheConfigurationInfo []HostCacheConfigurationInfo `xml:"HostCacheConfigurationInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostCacheConfigurationInfo"] = reflect.TypeOf((*ArrayOfHostCacheConfigurationInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostConnectInfoNetworkInfo struct {
    +	HostConnectInfoNetworkInfo []BaseHostConnectInfoNetworkInfo `xml:"HostConnectInfoNetworkInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostConnectInfoNetworkInfo"] = reflect.TypeOf((*ArrayOfHostConnectInfoNetworkInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostCpuIdInfo struct {
    +	HostCpuIdInfo []HostCpuIdInfo `xml:"HostCpuIdInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostCpuIdInfo"] = reflect.TypeOf((*ArrayOfHostCpuIdInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostCpuPackage struct {
    +	HostCpuPackage []HostCpuPackage `xml:"HostCpuPackage,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostCpuPackage"] = reflect.TypeOf((*ArrayOfHostCpuPackage)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDatastoreBrowserSearchResults struct {
    +	HostDatastoreBrowserSearchResults []HostDatastoreBrowserSearchResults `xml:"HostDatastoreBrowserSearchResults,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDatastoreBrowserSearchResults"] = reflect.TypeOf((*ArrayOfHostDatastoreBrowserSearchResults)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDatastoreConnectInfo struct {
    +	HostDatastoreConnectInfo []BaseHostDatastoreConnectInfo `xml:"HostDatastoreConnectInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDatastoreConnectInfo"] = reflect.TypeOf((*ArrayOfHostDatastoreConnectInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDatastoreSystemDatastoreResult struct {
    +	HostDatastoreSystemDatastoreResult []HostDatastoreSystemDatastoreResult `xml:"HostDatastoreSystemDatastoreResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDatastoreSystemDatastoreResult"] = reflect.TypeOf((*ArrayOfHostDatastoreSystemDatastoreResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDateTimeSystemTimeZone struct {
    +	HostDateTimeSystemTimeZone []HostDateTimeSystemTimeZone `xml:"HostDateTimeSystemTimeZone,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDateTimeSystemTimeZone"] = reflect.TypeOf((*ArrayOfHostDateTimeSystemTimeZone)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDhcpService struct {
    +	HostDhcpService []HostDhcpService `xml:"HostDhcpService,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDhcpService"] = reflect.TypeOf((*ArrayOfHostDhcpService)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDhcpServiceConfig struct {
    +	HostDhcpServiceConfig []HostDhcpServiceConfig `xml:"HostDhcpServiceConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDhcpServiceConfig"] = reflect.TypeOf((*ArrayOfHostDhcpServiceConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDiagnosticPartition struct {
    +	HostDiagnosticPartition []HostDiagnosticPartition `xml:"HostDiagnosticPartition,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDiagnosticPartition"] = reflect.TypeOf((*ArrayOfHostDiagnosticPartition)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDiagnosticPartitionCreateOption struct {
    +	HostDiagnosticPartitionCreateOption []HostDiagnosticPartitionCreateOption `xml:"HostDiagnosticPartitionCreateOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDiagnosticPartitionCreateOption"] = reflect.TypeOf((*ArrayOfHostDiagnosticPartitionCreateOption)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDiskConfigurationResult struct {
    +	HostDiskConfigurationResult []HostDiskConfigurationResult `xml:"HostDiskConfigurationResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDiskConfigurationResult"] = reflect.TypeOf((*ArrayOfHostDiskConfigurationResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDiskMappingPartitionOption struct {
    +	HostDiskMappingPartitionOption []HostDiskMappingPartitionOption `xml:"HostDiskMappingPartitionOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDiskMappingPartitionOption"] = reflect.TypeOf((*ArrayOfHostDiskMappingPartitionOption)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDiskPartitionAttributes struct {
    +	HostDiskPartitionAttributes []HostDiskPartitionAttributes `xml:"HostDiskPartitionAttributes,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDiskPartitionAttributes"] = reflect.TypeOf((*ArrayOfHostDiskPartitionAttributes)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDiskPartitionBlockRange struct {
    +	HostDiskPartitionBlockRange []HostDiskPartitionBlockRange `xml:"HostDiskPartitionBlockRange,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDiskPartitionBlockRange"] = reflect.TypeOf((*ArrayOfHostDiskPartitionBlockRange)(nil)).Elem()
    +}
    +
    +type ArrayOfHostDiskPartitionInfo struct {
    +	HostDiskPartitionInfo []HostDiskPartitionInfo `xml:"HostDiskPartitionInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostDiskPartitionInfo"] = reflect.TypeOf((*ArrayOfHostDiskPartitionInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostEventArgument struct {
    +	HostEventArgument []HostEventArgument `xml:"HostEventArgument,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostEventArgument"] = reflect.TypeOf((*ArrayOfHostEventArgument)(nil)).Elem()
    +}
    +
    +type ArrayOfHostFeatureCapability struct {
    +	HostFeatureCapability []HostFeatureCapability `xml:"HostFeatureCapability,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostFeatureCapability"] = reflect.TypeOf((*ArrayOfHostFeatureCapability)(nil)).Elem()
    +}
    +
    +type ArrayOfHostFeatureMask struct {
    +	HostFeatureMask []HostFeatureMask `xml:"HostFeatureMask,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostFeatureMask"] = reflect.TypeOf((*ArrayOfHostFeatureMask)(nil)).Elem()
    +}
    +
    +type ArrayOfHostFeatureVersionInfo struct {
    +	HostFeatureVersionInfo []HostFeatureVersionInfo `xml:"HostFeatureVersionInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostFeatureVersionInfo"] = reflect.TypeOf((*ArrayOfHostFeatureVersionInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostFileSystemMountInfo struct {
    +	HostFileSystemMountInfo []HostFileSystemMountInfo `xml:"HostFileSystemMountInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostFileSystemMountInfo"] = reflect.TypeOf((*ArrayOfHostFileSystemMountInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostFirewallConfigRuleSetConfig struct {
    +	HostFirewallConfigRuleSetConfig []HostFirewallConfigRuleSetConfig `xml:"HostFirewallConfigRuleSetConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostFirewallConfigRuleSetConfig"] = reflect.TypeOf((*ArrayOfHostFirewallConfigRuleSetConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostFirewallRule struct {
    +	HostFirewallRule []HostFirewallRule `xml:"HostFirewallRule,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostFirewallRule"] = reflect.TypeOf((*ArrayOfHostFirewallRule)(nil)).Elem()
    +}
    +
    +type ArrayOfHostFirewallRuleset struct {
    +	HostFirewallRuleset []HostFirewallRuleset `xml:"HostFirewallRuleset,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostFirewallRuleset"] = reflect.TypeOf((*ArrayOfHostFirewallRuleset)(nil)).Elem()
    +}
    +
    +type ArrayOfHostFirewallRulesetIpNetwork struct {
    +	HostFirewallRulesetIpNetwork []HostFirewallRulesetIpNetwork `xml:"HostFirewallRulesetIpNetwork,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostFirewallRulesetIpNetwork"] = reflect.TypeOf((*ArrayOfHostFirewallRulesetIpNetwork)(nil)).Elem()
    +}
    +
    +type ArrayOfHostGraphicsConfigDeviceType struct {
    +	HostGraphicsConfigDeviceType []HostGraphicsConfigDeviceType `xml:"HostGraphicsConfigDeviceType,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostGraphicsConfigDeviceType"] = reflect.TypeOf((*ArrayOfHostGraphicsConfigDeviceType)(nil)).Elem()
    +}
    +
    +type ArrayOfHostGraphicsInfo struct {
    +	HostGraphicsInfo []HostGraphicsInfo `xml:"HostGraphicsInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostGraphicsInfo"] = reflect.TypeOf((*ArrayOfHostGraphicsInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostHardwareElementInfo struct {
    +	HostHardwareElementInfo []BaseHostHardwareElementInfo `xml:"HostHardwareElementInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostHardwareElementInfo"] = reflect.TypeOf((*ArrayOfHostHardwareElementInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostHostBusAdapter struct {
    +	HostHostBusAdapter []BaseHostHostBusAdapter `xml:"HostHostBusAdapter,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostHostBusAdapter"] = reflect.TypeOf((*ArrayOfHostHostBusAdapter)(nil)).Elem()
    +}
    +
    +type ArrayOfHostInternetScsiHbaIscsiIpv6Address struct {
    +	HostInternetScsiHbaIscsiIpv6Address []HostInternetScsiHbaIscsiIpv6Address `xml:"HostInternetScsiHbaIscsiIpv6Address,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostInternetScsiHbaIscsiIpv6Address"] = reflect.TypeOf((*ArrayOfHostInternetScsiHbaIscsiIpv6Address)(nil)).Elem()
    +}
    +
    +type ArrayOfHostInternetScsiHbaParamValue struct {
    +	HostInternetScsiHbaParamValue []HostInternetScsiHbaParamValue `xml:"HostInternetScsiHbaParamValue,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostInternetScsiHbaParamValue"] = reflect.TypeOf((*ArrayOfHostInternetScsiHbaParamValue)(nil)).Elem()
    +}
    +
    +type ArrayOfHostInternetScsiHbaSendTarget struct {
    +	HostInternetScsiHbaSendTarget []HostInternetScsiHbaSendTarget `xml:"HostInternetScsiHbaSendTarget,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostInternetScsiHbaSendTarget"] = reflect.TypeOf((*ArrayOfHostInternetScsiHbaSendTarget)(nil)).Elem()
    +}
    +
    +type ArrayOfHostInternetScsiHbaStaticTarget struct {
    +	HostInternetScsiHbaStaticTarget []HostInternetScsiHbaStaticTarget `xml:"HostInternetScsiHbaStaticTarget,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostInternetScsiHbaStaticTarget"] = reflect.TypeOf((*ArrayOfHostInternetScsiHbaStaticTarget)(nil)).Elem()
    +}
    +
    +type ArrayOfHostIoFilterInfo struct {
    +	HostIoFilterInfo []HostIoFilterInfo `xml:"HostIoFilterInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostIoFilterInfo"] = reflect.TypeOf((*ArrayOfHostIoFilterInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostIpConfigIpV6Address struct {
    +	HostIpConfigIpV6Address []HostIpConfigIpV6Address `xml:"HostIpConfigIpV6Address,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostIpConfigIpV6Address"] = reflect.TypeOf((*ArrayOfHostIpConfigIpV6Address)(nil)).Elem()
    +}
    +
    +type ArrayOfHostIpRouteEntry struct {
    +	HostIpRouteEntry []HostIpRouteEntry `xml:"HostIpRouteEntry,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostIpRouteEntry"] = reflect.TypeOf((*ArrayOfHostIpRouteEntry)(nil)).Elem()
    +}
    +
    +type ArrayOfHostIpRouteOp struct {
    +	HostIpRouteOp []HostIpRouteOp `xml:"HostIpRouteOp,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostIpRouteOp"] = reflect.TypeOf((*ArrayOfHostIpRouteOp)(nil)).Elem()
    +}
    +
    +type ArrayOfHostLowLevelProvisioningManagerDiskLayoutSpec struct {
    +	HostLowLevelProvisioningManagerDiskLayoutSpec []HostLowLevelProvisioningManagerDiskLayoutSpec `xml:"HostLowLevelProvisioningManagerDiskLayoutSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostLowLevelProvisioningManagerDiskLayoutSpec"] = reflect.TypeOf((*ArrayOfHostLowLevelProvisioningManagerDiskLayoutSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostLowLevelProvisioningManagerFileDeleteResult struct {
    +	HostLowLevelProvisioningManagerFileDeleteResult []HostLowLevelProvisioningManagerFileDeleteResult `xml:"HostLowLevelProvisioningManagerFileDeleteResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostLowLevelProvisioningManagerFileDeleteResult"] = reflect.TypeOf((*ArrayOfHostLowLevelProvisioningManagerFileDeleteResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostLowLevelProvisioningManagerFileDeleteSpec struct {
    +	HostLowLevelProvisioningManagerFileDeleteSpec []HostLowLevelProvisioningManagerFileDeleteSpec `xml:"HostLowLevelProvisioningManagerFileDeleteSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostLowLevelProvisioningManagerFileDeleteSpec"] = reflect.TypeOf((*ArrayOfHostLowLevelProvisioningManagerFileDeleteSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostLowLevelProvisioningManagerFileReserveResult struct {
    +	HostLowLevelProvisioningManagerFileReserveResult []HostLowLevelProvisioningManagerFileReserveResult `xml:"HostLowLevelProvisioningManagerFileReserveResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostLowLevelProvisioningManagerFileReserveResult"] = reflect.TypeOf((*ArrayOfHostLowLevelProvisioningManagerFileReserveResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostLowLevelProvisioningManagerFileReserveSpec struct {
    +	HostLowLevelProvisioningManagerFileReserveSpec []HostLowLevelProvisioningManagerFileReserveSpec `xml:"HostLowLevelProvisioningManagerFileReserveSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostLowLevelProvisioningManagerFileReserveSpec"] = reflect.TypeOf((*ArrayOfHostLowLevelProvisioningManagerFileReserveSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostLowLevelProvisioningManagerSnapshotLayoutSpec struct {
    +	HostLowLevelProvisioningManagerSnapshotLayoutSpec []HostLowLevelProvisioningManagerSnapshotLayoutSpec `xml:"HostLowLevelProvisioningManagerSnapshotLayoutSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostLowLevelProvisioningManagerSnapshotLayoutSpec"] = reflect.TypeOf((*ArrayOfHostLowLevelProvisioningManagerSnapshotLayoutSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostMemberHealthCheckResult struct {
    +	HostMemberHealthCheckResult []BaseHostMemberHealthCheckResult `xml:"HostMemberHealthCheckResult,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostMemberHealthCheckResult"] = reflect.TypeOf((*ArrayOfHostMemberHealthCheckResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostMemberRuntimeInfo struct {
    +	HostMemberRuntimeInfo []HostMemberRuntimeInfo `xml:"HostMemberRuntimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostMemberRuntimeInfo"] = reflect.TypeOf((*ArrayOfHostMemberRuntimeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostMultipathInfoLogicalUnit struct {
    +	HostMultipathInfoLogicalUnit []HostMultipathInfoLogicalUnit `xml:"HostMultipathInfoLogicalUnit,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostMultipathInfoLogicalUnit"] = reflect.TypeOf((*ArrayOfHostMultipathInfoLogicalUnit)(nil)).Elem()
    +}
    +
    +type ArrayOfHostMultipathInfoPath struct {
    +	HostMultipathInfoPath []HostMultipathInfoPath `xml:"HostMultipathInfoPath,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostMultipathInfoPath"] = reflect.TypeOf((*ArrayOfHostMultipathInfoPath)(nil)).Elem()
    +}
    +
    +type ArrayOfHostMultipathStateInfoPath struct {
    +	HostMultipathStateInfoPath []HostMultipathStateInfoPath `xml:"HostMultipathStateInfoPath,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostMultipathStateInfoPath"] = reflect.TypeOf((*ArrayOfHostMultipathStateInfoPath)(nil)).Elem()
    +}
    +
    +type ArrayOfHostNasVolumeConfig struct {
    +	HostNasVolumeConfig []HostNasVolumeConfig `xml:"HostNasVolumeConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostNasVolumeConfig"] = reflect.TypeOf((*ArrayOfHostNasVolumeConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostNatService struct {
    +	HostNatService []HostNatService `xml:"HostNatService,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostNatService"] = reflect.TypeOf((*ArrayOfHostNatService)(nil)).Elem()
    +}
    +
    +type ArrayOfHostNatServiceConfig struct {
    +	HostNatServiceConfig []HostNatServiceConfig `xml:"HostNatServiceConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostNatServiceConfig"] = reflect.TypeOf((*ArrayOfHostNatServiceConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostNatServicePortForwardSpec struct {
    +	HostNatServicePortForwardSpec []HostNatServicePortForwardSpec `xml:"HostNatServicePortForwardSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostNatServicePortForwardSpec"] = reflect.TypeOf((*ArrayOfHostNatServicePortForwardSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostNetStackInstance struct {
    +	HostNetStackInstance []HostNetStackInstance `xml:"HostNetStackInstance,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostNetStackInstance"] = reflect.TypeOf((*ArrayOfHostNetStackInstance)(nil)).Elem()
    +}
    +
    +type ArrayOfHostNetworkConfigNetStackSpec struct {
    +	HostNetworkConfigNetStackSpec []HostNetworkConfigNetStackSpec `xml:"HostNetworkConfigNetStackSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostNetworkConfigNetStackSpec"] = reflect.TypeOf((*ArrayOfHostNetworkConfigNetStackSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostNumaNode struct {
    +	HostNumaNode []HostNumaNode `xml:"HostNumaNode,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostNumaNode"] = reflect.TypeOf((*ArrayOfHostNumaNode)(nil)).Elem()
    +}
    +
    +type ArrayOfHostNumericSensorInfo struct {
    +	HostNumericSensorInfo []HostNumericSensorInfo `xml:"HostNumericSensorInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostNumericSensorInfo"] = reflect.TypeOf((*ArrayOfHostNumericSensorInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostOpaqueNetworkInfo struct {
    +	HostOpaqueNetworkInfo []HostOpaqueNetworkInfo `xml:"HostOpaqueNetworkInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostOpaqueNetworkInfo"] = reflect.TypeOf((*ArrayOfHostOpaqueNetworkInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostOpaqueSwitch struct {
    +	HostOpaqueSwitch []HostOpaqueSwitch `xml:"HostOpaqueSwitch,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostOpaqueSwitch"] = reflect.TypeOf((*ArrayOfHostOpaqueSwitch)(nil)).Elem()
    +}
    +
    +type ArrayOfHostOpaqueSwitchPhysicalNicZone struct {
    +	HostOpaqueSwitchPhysicalNicZone []HostOpaqueSwitchPhysicalNicZone `xml:"HostOpaqueSwitchPhysicalNicZone,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostOpaqueSwitchPhysicalNicZone"] = reflect.TypeOf((*ArrayOfHostOpaqueSwitchPhysicalNicZone)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPatchManagerStatus struct {
    +	HostPatchManagerStatus []HostPatchManagerStatus `xml:"HostPatchManagerStatus,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPatchManagerStatus"] = reflect.TypeOf((*ArrayOfHostPatchManagerStatus)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPatchManagerStatusPrerequisitePatch struct {
    +	HostPatchManagerStatusPrerequisitePatch []HostPatchManagerStatusPrerequisitePatch `xml:"HostPatchManagerStatusPrerequisitePatch,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPatchManagerStatusPrerequisitePatch"] = reflect.TypeOf((*ArrayOfHostPatchManagerStatusPrerequisitePatch)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPathSelectionPolicyOption struct {
    +	HostPathSelectionPolicyOption []HostPathSelectionPolicyOption `xml:"HostPathSelectionPolicyOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPathSelectionPolicyOption"] = reflect.TypeOf((*ArrayOfHostPathSelectionPolicyOption)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPciDevice struct {
    +	HostPciDevice []HostPciDevice `xml:"HostPciDevice,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPciDevice"] = reflect.TypeOf((*ArrayOfHostPciDevice)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPciPassthruConfig struct {
    +	HostPciPassthruConfig []BaseHostPciPassthruConfig `xml:"HostPciPassthruConfig,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPciPassthruConfig"] = reflect.TypeOf((*ArrayOfHostPciPassthruConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPciPassthruInfo struct {
    +	HostPciPassthruInfo []BaseHostPciPassthruInfo `xml:"HostPciPassthruInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPciPassthruInfo"] = reflect.TypeOf((*ArrayOfHostPciPassthruInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPlacedVirtualNicIdentifier struct {
    +	HostPlacedVirtualNicIdentifier []HostPlacedVirtualNicIdentifier `xml:"HostPlacedVirtualNicIdentifier,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPlacedVirtualNicIdentifier"] = reflect.TypeOf((*ArrayOfHostPlacedVirtualNicIdentifier)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPlugStoreTopologyAdapter struct {
    +	HostPlugStoreTopologyAdapter []HostPlugStoreTopologyAdapter `xml:"HostPlugStoreTopologyAdapter,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPlugStoreTopologyAdapter"] = reflect.TypeOf((*ArrayOfHostPlugStoreTopologyAdapter)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPlugStoreTopologyDevice struct {
    +	HostPlugStoreTopologyDevice []HostPlugStoreTopologyDevice `xml:"HostPlugStoreTopologyDevice,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPlugStoreTopologyDevice"] = reflect.TypeOf((*ArrayOfHostPlugStoreTopologyDevice)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPlugStoreTopologyPath struct {
    +	HostPlugStoreTopologyPath []HostPlugStoreTopologyPath `xml:"HostPlugStoreTopologyPath,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPlugStoreTopologyPath"] = reflect.TypeOf((*ArrayOfHostPlugStoreTopologyPath)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPlugStoreTopologyPlugin struct {
    +	HostPlugStoreTopologyPlugin []HostPlugStoreTopologyPlugin `xml:"HostPlugStoreTopologyPlugin,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPlugStoreTopologyPlugin"] = reflect.TypeOf((*ArrayOfHostPlugStoreTopologyPlugin)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPlugStoreTopologyTarget struct {
    +	HostPlugStoreTopologyTarget []HostPlugStoreTopologyTarget `xml:"HostPlugStoreTopologyTarget,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPlugStoreTopologyTarget"] = reflect.TypeOf((*ArrayOfHostPlugStoreTopologyTarget)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPnicNetworkResourceInfo struct {
    +	HostPnicNetworkResourceInfo []HostPnicNetworkResourceInfo `xml:"HostPnicNetworkResourceInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPnicNetworkResourceInfo"] = reflect.TypeOf((*ArrayOfHostPnicNetworkResourceInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPortGroup struct {
    +	HostPortGroup []HostPortGroup `xml:"HostPortGroup,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPortGroup"] = reflect.TypeOf((*ArrayOfHostPortGroup)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPortGroupConfig struct {
    +	HostPortGroupConfig []HostPortGroupConfig `xml:"HostPortGroupConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPortGroupConfig"] = reflect.TypeOf((*ArrayOfHostPortGroupConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPortGroupPort struct {
    +	HostPortGroupPort []HostPortGroupPort `xml:"HostPortGroupPort,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPortGroupPort"] = reflect.TypeOf((*ArrayOfHostPortGroupPort)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPortGroupProfile struct {
    +	HostPortGroupProfile []HostPortGroupProfile `xml:"HostPortGroupProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPortGroupProfile"] = reflect.TypeOf((*ArrayOfHostPortGroupProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfHostPowerPolicy struct {
    +	HostPowerPolicy []HostPowerPolicy `xml:"HostPowerPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostPowerPolicy"] = reflect.TypeOf((*ArrayOfHostPowerPolicy)(nil)).Elem()
    +}
    +
    +type ArrayOfHostProfileManagerCompositionResultResultElement struct {
    +	HostProfileManagerCompositionResultResultElement []HostProfileManagerCompositionResultResultElement `xml:"HostProfileManagerCompositionResultResultElement,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostProfileManagerCompositionResultResultElement"] = reflect.TypeOf((*ArrayOfHostProfileManagerCompositionResultResultElement)(nil)).Elem()
    +}
    +
    +type ArrayOfHostProfileManagerCompositionValidationResultResultElement struct {
    +	HostProfileManagerCompositionValidationResultResultElement []HostProfileManagerCompositionValidationResultResultElement `xml:"HostProfileManagerCompositionValidationResultResultElement,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostProfileManagerCompositionValidationResultResultElement"] = reflect.TypeOf((*ArrayOfHostProfileManagerCompositionValidationResultResultElement)(nil)).Elem()
    +}
    +
    +type ArrayOfHostProfileManagerHostToConfigSpecMap struct {
    +	HostProfileManagerHostToConfigSpecMap []HostProfileManagerHostToConfigSpecMap `xml:"HostProfileManagerHostToConfigSpecMap,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostProfileManagerHostToConfigSpecMap"] = reflect.TypeOf((*ArrayOfHostProfileManagerHostToConfigSpecMap)(nil)).Elem()
    +}
    +
    +type ArrayOfHostProfilesEntityCustomizations struct {
    +	HostProfilesEntityCustomizations []BaseHostProfilesEntityCustomizations `xml:"HostProfilesEntityCustomizations,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostProfilesEntityCustomizations"] = reflect.TypeOf((*ArrayOfHostProfilesEntityCustomizations)(nil)).Elem()
    +}
    +
    +type ArrayOfHostProtocolEndpoint struct {
    +	HostProtocolEndpoint []HostProtocolEndpoint `xml:"HostProtocolEndpoint,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostProtocolEndpoint"] = reflect.TypeOf((*ArrayOfHostProtocolEndpoint)(nil)).Elem()
    +}
    +
    +type ArrayOfHostProxySwitch struct {
    +	HostProxySwitch []HostProxySwitch `xml:"HostProxySwitch,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostProxySwitch"] = reflect.TypeOf((*ArrayOfHostProxySwitch)(nil)).Elem()
    +}
    +
    +type ArrayOfHostProxySwitchConfig struct {
    +	HostProxySwitchConfig []HostProxySwitchConfig `xml:"HostProxySwitchConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostProxySwitchConfig"] = reflect.TypeOf((*ArrayOfHostProxySwitchConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostProxySwitchHostLagConfig struct {
    +	HostProxySwitchHostLagConfig []HostProxySwitchHostLagConfig `xml:"HostProxySwitchHostLagConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostProxySwitchHostLagConfig"] = reflect.TypeOf((*ArrayOfHostProxySwitchHostLagConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostRuntimeInfoNetStackInstanceRuntimeInfo struct {
    +	HostRuntimeInfoNetStackInstanceRuntimeInfo []HostRuntimeInfoNetStackInstanceRuntimeInfo `xml:"HostRuntimeInfoNetStackInstanceRuntimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostRuntimeInfoNetStackInstanceRuntimeInfo"] = reflect.TypeOf((*ArrayOfHostRuntimeInfoNetStackInstanceRuntimeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostScsiDisk struct {
    +	HostScsiDisk []HostScsiDisk `xml:"HostScsiDisk,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostScsiDisk"] = reflect.TypeOf((*ArrayOfHostScsiDisk)(nil)).Elem()
    +}
    +
    +type ArrayOfHostScsiDiskPartition struct {
    +	HostScsiDiskPartition []HostScsiDiskPartition `xml:"HostScsiDiskPartition,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostScsiDiskPartition"] = reflect.TypeOf((*ArrayOfHostScsiDiskPartition)(nil)).Elem()
    +}
    +
    +type ArrayOfHostScsiTopologyInterface struct {
    +	HostScsiTopologyInterface []HostScsiTopologyInterface `xml:"HostScsiTopologyInterface,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostScsiTopologyInterface"] = reflect.TypeOf((*ArrayOfHostScsiTopologyInterface)(nil)).Elem()
    +}
    +
    +type ArrayOfHostScsiTopologyLun struct {
    +	HostScsiTopologyLun []HostScsiTopologyLun `xml:"HostScsiTopologyLun,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostScsiTopologyLun"] = reflect.TypeOf((*ArrayOfHostScsiTopologyLun)(nil)).Elem()
    +}
    +
    +type ArrayOfHostScsiTopologyTarget struct {
    +	HostScsiTopologyTarget []HostScsiTopologyTarget `xml:"HostScsiTopologyTarget,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostScsiTopologyTarget"] = reflect.TypeOf((*ArrayOfHostScsiTopologyTarget)(nil)).Elem()
    +}
    +
    +type ArrayOfHostService struct {
    +	HostService []HostService `xml:"HostService,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostService"] = reflect.TypeOf((*ArrayOfHostService)(nil)).Elem()
    +}
    +
    +type ArrayOfHostServiceConfig struct {
    +	HostServiceConfig []HostServiceConfig `xml:"HostServiceConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostServiceConfig"] = reflect.TypeOf((*ArrayOfHostServiceConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostSharedGpuCapabilities struct {
    +	HostSharedGpuCapabilities []HostSharedGpuCapabilities `xml:"HostSharedGpuCapabilities,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostSharedGpuCapabilities"] = reflect.TypeOf((*ArrayOfHostSharedGpuCapabilities)(nil)).Elem()
    +}
    +
    +type ArrayOfHostSnmpDestination struct {
    +	HostSnmpDestination []HostSnmpDestination `xml:"HostSnmpDestination,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostSnmpDestination"] = reflect.TypeOf((*ArrayOfHostSnmpDestination)(nil)).Elem()
    +}
    +
    +type ArrayOfHostSriovDevicePoolInfo struct {
    +	HostSriovDevicePoolInfo []BaseHostSriovDevicePoolInfo `xml:"HostSriovDevicePoolInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostSriovDevicePoolInfo"] = reflect.TypeOf((*ArrayOfHostSriovDevicePoolInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostSslThumbprintInfo struct {
    +	HostSslThumbprintInfo []HostSslThumbprintInfo `xml:"HostSslThumbprintInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostSslThumbprintInfo"] = reflect.TypeOf((*ArrayOfHostSslThumbprintInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostStorageArrayTypePolicyOption struct {
    +	HostStorageArrayTypePolicyOption []HostStorageArrayTypePolicyOption `xml:"HostStorageArrayTypePolicyOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostStorageArrayTypePolicyOption"] = reflect.TypeOf((*ArrayOfHostStorageArrayTypePolicyOption)(nil)).Elem()
    +}
    +
    +type ArrayOfHostStorageElementInfo struct {
    +	HostStorageElementInfo []HostStorageElementInfo `xml:"HostStorageElementInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostStorageElementInfo"] = reflect.TypeOf((*ArrayOfHostStorageElementInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostStorageOperationalInfo struct {
    +	HostStorageOperationalInfo []HostStorageOperationalInfo `xml:"HostStorageOperationalInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostStorageOperationalInfo"] = reflect.TypeOf((*ArrayOfHostStorageOperationalInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostStorageSystemDiskLocatorLedResult struct {
    +	HostStorageSystemDiskLocatorLedResult []HostStorageSystemDiskLocatorLedResult `xml:"HostStorageSystemDiskLocatorLedResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostStorageSystemDiskLocatorLedResult"] = reflect.TypeOf((*ArrayOfHostStorageSystemDiskLocatorLedResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostStorageSystemScsiLunResult struct {
    +	HostStorageSystemScsiLunResult []HostStorageSystemScsiLunResult `xml:"HostStorageSystemScsiLunResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostStorageSystemScsiLunResult"] = reflect.TypeOf((*ArrayOfHostStorageSystemScsiLunResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostStorageSystemVmfsVolumeResult struct {
    +	HostStorageSystemVmfsVolumeResult []HostStorageSystemVmfsVolumeResult `xml:"HostStorageSystemVmfsVolumeResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostStorageSystemVmfsVolumeResult"] = reflect.TypeOf((*ArrayOfHostStorageSystemVmfsVolumeResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostSubSpecification struct {
    +	HostSubSpecification []HostSubSpecification `xml:"HostSubSpecification,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostSubSpecification"] = reflect.TypeOf((*ArrayOfHostSubSpecification)(nil)).Elem()
    +}
    +
    +type ArrayOfHostSystemIdentificationInfo struct {
    +	HostSystemIdentificationInfo []HostSystemIdentificationInfo `xml:"HostSystemIdentificationInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostSystemIdentificationInfo"] = reflect.TypeOf((*ArrayOfHostSystemIdentificationInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostSystemResourceInfo struct {
    +	HostSystemResourceInfo []HostSystemResourceInfo `xml:"HostSystemResourceInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostSystemResourceInfo"] = reflect.TypeOf((*ArrayOfHostSystemResourceInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostSystemSwapConfigurationSystemSwapOption struct {
    +	HostSystemSwapConfigurationSystemSwapOption []BaseHostSystemSwapConfigurationSystemSwapOption `xml:"HostSystemSwapConfigurationSystemSwapOption,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostSystemSwapConfigurationSystemSwapOption"] = reflect.TypeOf((*ArrayOfHostSystemSwapConfigurationSystemSwapOption)(nil)).Elem()
    +}
    +
    +type ArrayOfHostTpmDigestInfo struct {
    +	HostTpmDigestInfo []HostTpmDigestInfo `xml:"HostTpmDigestInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostTpmDigestInfo"] = reflect.TypeOf((*ArrayOfHostTpmDigestInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHostTpmEventLogEntry struct {
    +	HostTpmEventLogEntry []HostTpmEventLogEntry `xml:"HostTpmEventLogEntry,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostTpmEventLogEntry"] = reflect.TypeOf((*ArrayOfHostTpmEventLogEntry)(nil)).Elem()
    +}
    +
    +type ArrayOfHostUnresolvedVmfsExtent struct {
    +	HostUnresolvedVmfsExtent []HostUnresolvedVmfsExtent `xml:"HostUnresolvedVmfsExtent,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostUnresolvedVmfsExtent"] = reflect.TypeOf((*ArrayOfHostUnresolvedVmfsExtent)(nil)).Elem()
    +}
    +
    +type ArrayOfHostUnresolvedVmfsResolutionResult struct {
    +	HostUnresolvedVmfsResolutionResult []HostUnresolvedVmfsResolutionResult `xml:"HostUnresolvedVmfsResolutionResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostUnresolvedVmfsResolutionResult"] = reflect.TypeOf((*ArrayOfHostUnresolvedVmfsResolutionResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostUnresolvedVmfsResolutionSpec struct {
    +	HostUnresolvedVmfsResolutionSpec []HostUnresolvedVmfsResolutionSpec `xml:"HostUnresolvedVmfsResolutionSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostUnresolvedVmfsResolutionSpec"] = reflect.TypeOf((*ArrayOfHostUnresolvedVmfsResolutionSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostUnresolvedVmfsVolume struct {
    +	HostUnresolvedVmfsVolume []HostUnresolvedVmfsVolume `xml:"HostUnresolvedVmfsVolume,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostUnresolvedVmfsVolume"] = reflect.TypeOf((*ArrayOfHostUnresolvedVmfsVolume)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption struct {
    +	HostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption []HostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption `xml:"HostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption"] = reflect.TypeOf((*ArrayOfHostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVMotionCompatibility struct {
    +	HostVMotionCompatibility []HostVMotionCompatibility `xml:"HostVMotionCompatibility,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVMotionCompatibility"] = reflect.TypeOf((*ArrayOfHostVMotionCompatibility)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVirtualNic struct {
    +	HostVirtualNic []HostVirtualNic `xml:"HostVirtualNic,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVirtualNic"] = reflect.TypeOf((*ArrayOfHostVirtualNic)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVirtualNicConfig struct {
    +	HostVirtualNicConfig []HostVirtualNicConfig `xml:"HostVirtualNicConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVirtualNicConfig"] = reflect.TypeOf((*ArrayOfHostVirtualNicConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVirtualNicManagerNicTypeSelection struct {
    +	HostVirtualNicManagerNicTypeSelection []HostVirtualNicManagerNicTypeSelection `xml:"HostVirtualNicManagerNicTypeSelection,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVirtualNicManagerNicTypeSelection"] = reflect.TypeOf((*ArrayOfHostVirtualNicManagerNicTypeSelection)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVirtualSwitch struct {
    +	HostVirtualSwitch []HostVirtualSwitch `xml:"HostVirtualSwitch,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVirtualSwitch"] = reflect.TypeOf((*ArrayOfHostVirtualSwitch)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVirtualSwitchConfig struct {
    +	HostVirtualSwitchConfig []HostVirtualSwitchConfig `xml:"HostVirtualSwitchConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVirtualSwitchConfig"] = reflect.TypeOf((*ArrayOfHostVirtualSwitchConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVmciAccessManagerAccessSpec struct {
    +	HostVmciAccessManagerAccessSpec []HostVmciAccessManagerAccessSpec `xml:"HostVmciAccessManagerAccessSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVmciAccessManagerAccessSpec"] = reflect.TypeOf((*ArrayOfHostVmciAccessManagerAccessSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVmfsRescanResult struct {
    +	HostVmfsRescanResult []HostVmfsRescanResult `xml:"HostVmfsRescanResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVmfsRescanResult"] = reflect.TypeOf((*ArrayOfHostVmfsRescanResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVsanInternalSystemCmmdsQuery struct {
    +	HostVsanInternalSystemCmmdsQuery []HostVsanInternalSystemCmmdsQuery `xml:"HostVsanInternalSystemCmmdsQuery,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVsanInternalSystemCmmdsQuery"] = reflect.TypeOf((*ArrayOfHostVsanInternalSystemCmmdsQuery)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVsanInternalSystemDeleteVsanObjectsResult struct {
    +	HostVsanInternalSystemDeleteVsanObjectsResult []HostVsanInternalSystemDeleteVsanObjectsResult `xml:"HostVsanInternalSystemDeleteVsanObjectsResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVsanInternalSystemDeleteVsanObjectsResult"] = reflect.TypeOf((*ArrayOfHostVsanInternalSystemDeleteVsanObjectsResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVsanInternalSystemVsanObjectOperationResult struct {
    +	HostVsanInternalSystemVsanObjectOperationResult []HostVsanInternalSystemVsanObjectOperationResult `xml:"HostVsanInternalSystemVsanObjectOperationResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVsanInternalSystemVsanObjectOperationResult"] = reflect.TypeOf((*ArrayOfHostVsanInternalSystemVsanObjectOperationResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult struct {
    +	HostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult []HostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult `xml:"HostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult"] = reflect.TypeOf((*ArrayOfHostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult)(nil)).Elem()
    +}
    +
    +type ArrayOfHttpNfcLeaseDatastoreLeaseInfo struct {
    +	HttpNfcLeaseDatastoreLeaseInfo []HttpNfcLeaseDatastoreLeaseInfo `xml:"HttpNfcLeaseDatastoreLeaseInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHttpNfcLeaseDatastoreLeaseInfo"] = reflect.TypeOf((*ArrayOfHttpNfcLeaseDatastoreLeaseInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHttpNfcLeaseDeviceUrl struct {
    +	HttpNfcLeaseDeviceUrl []HttpNfcLeaseDeviceUrl `xml:"HttpNfcLeaseDeviceUrl,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHttpNfcLeaseDeviceUrl"] = reflect.TypeOf((*ArrayOfHttpNfcLeaseDeviceUrl)(nil)).Elem()
    +}
    +
    +type ArrayOfHttpNfcLeaseHostInfo struct {
    +	HttpNfcLeaseHostInfo []HttpNfcLeaseHostInfo `xml:"HttpNfcLeaseHostInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHttpNfcLeaseHostInfo"] = reflect.TypeOf((*ArrayOfHttpNfcLeaseHostInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfHttpNfcLeaseManifestEntry struct {
    +	HttpNfcLeaseManifestEntry []HttpNfcLeaseManifestEntry `xml:"HttpNfcLeaseManifestEntry,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHttpNfcLeaseManifestEntry"] = reflect.TypeOf((*ArrayOfHttpNfcLeaseManifestEntry)(nil)).Elem()
    +}
    +
    +type ArrayOfHttpNfcLeaseSourceFile struct {
    +	HttpNfcLeaseSourceFile []HttpNfcLeaseSourceFile `xml:"HttpNfcLeaseSourceFile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfHttpNfcLeaseSourceFile"] = reflect.TypeOf((*ArrayOfHttpNfcLeaseSourceFile)(nil)).Elem()
    +}
    +
    +type ArrayOfID struct {
    +	ID []ID `xml:"ID,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfID"] = reflect.TypeOf((*ArrayOfID)(nil)).Elem()
    +}
    +
    +type ArrayOfImportOperationBulkFaultFaultOnImport struct {
    +	ImportOperationBulkFaultFaultOnImport []ImportOperationBulkFaultFaultOnImport `xml:"ImportOperationBulkFaultFaultOnImport,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfImportOperationBulkFaultFaultOnImport"] = reflect.TypeOf((*ArrayOfImportOperationBulkFaultFaultOnImport)(nil)).Elem()
    +}
    +
    +type ArrayOfImportSpec struct {
    +	ImportSpec []BaseImportSpec `xml:"ImportSpec,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfImportSpec"] = reflect.TypeOf((*ArrayOfImportSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfInt struct {
    +	Int []int32 `xml:"int,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfInt"] = reflect.TypeOf((*ArrayOfInt)(nil)).Elem()
    +}
    +
    +type ArrayOfIoFilterHostIssue struct {
    +	IoFilterHostIssue []IoFilterHostIssue `xml:"IoFilterHostIssue,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfIoFilterHostIssue"] = reflect.TypeOf((*ArrayOfIoFilterHostIssue)(nil)).Elem()
    +}
    +
    +type ArrayOfIpPool struct {
    +	IpPool []IpPool `xml:"IpPool,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfIpPool"] = reflect.TypeOf((*ArrayOfIpPool)(nil)).Elem()
    +}
    +
    +type ArrayOfIpPoolAssociation struct {
    +	IpPoolAssociation []IpPoolAssociation `xml:"IpPoolAssociation,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfIpPoolAssociation"] = reflect.TypeOf((*ArrayOfIpPoolAssociation)(nil)).Elem()
    +}
    +
    +type ArrayOfIpPoolManagerIpAllocation struct {
    +	IpPoolManagerIpAllocation []IpPoolManagerIpAllocation `xml:"IpPoolManagerIpAllocation,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfIpPoolManagerIpAllocation"] = reflect.TypeOf((*ArrayOfIpPoolManagerIpAllocation)(nil)).Elem()
    +}
    +
    +type ArrayOfIscsiDependencyEntity struct {
    +	IscsiDependencyEntity []IscsiDependencyEntity `xml:"IscsiDependencyEntity,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfIscsiDependencyEntity"] = reflect.TypeOf((*ArrayOfIscsiDependencyEntity)(nil)).Elem()
    +}
    +
    +type ArrayOfIscsiPortInfo struct {
    +	IscsiPortInfo []IscsiPortInfo `xml:"IscsiPortInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfIscsiPortInfo"] = reflect.TypeOf((*ArrayOfIscsiPortInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfKernelModuleInfo struct {
    +	KernelModuleInfo []KernelModuleInfo `xml:"KernelModuleInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfKernelModuleInfo"] = reflect.TypeOf((*ArrayOfKernelModuleInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfKeyAnyValue struct {
    +	KeyAnyValue []KeyAnyValue `xml:"KeyAnyValue,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfKeyAnyValue"] = reflect.TypeOf((*ArrayOfKeyAnyValue)(nil)).Elem()
    +}
    +
    +type ArrayOfKeyValue struct {
    +	KeyValue []KeyValue `xml:"KeyValue,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfKeyValue"] = reflect.TypeOf((*ArrayOfKeyValue)(nil)).Elem()
    +}
    +
    +type ArrayOfKmipClusterInfo struct {
    +	KmipClusterInfo []KmipClusterInfo `xml:"KmipClusterInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfKmipClusterInfo"] = reflect.TypeOf((*ArrayOfKmipClusterInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfKmipServerInfo struct {
    +	KmipServerInfo []KmipServerInfo `xml:"KmipServerInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfKmipServerInfo"] = reflect.TypeOf((*ArrayOfKmipServerInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfLicenseAssignmentManagerLicenseAssignment struct {
    +	LicenseAssignmentManagerLicenseAssignment []LicenseAssignmentManagerLicenseAssignment `xml:"LicenseAssignmentManagerLicenseAssignment,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfLicenseAssignmentManagerLicenseAssignment"] = reflect.TypeOf((*ArrayOfLicenseAssignmentManagerLicenseAssignment)(nil)).Elem()
    +}
    +
    +type ArrayOfLicenseAvailabilityInfo struct {
    +	LicenseAvailabilityInfo []LicenseAvailabilityInfo `xml:"LicenseAvailabilityInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfLicenseAvailabilityInfo"] = reflect.TypeOf((*ArrayOfLicenseAvailabilityInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfLicenseFeatureInfo struct {
    +	LicenseFeatureInfo []LicenseFeatureInfo `xml:"LicenseFeatureInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfLicenseFeatureInfo"] = reflect.TypeOf((*ArrayOfLicenseFeatureInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfLicenseManagerLicenseInfo struct {
    +	LicenseManagerLicenseInfo []LicenseManagerLicenseInfo `xml:"LicenseManagerLicenseInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfLicenseManagerLicenseInfo"] = reflect.TypeOf((*ArrayOfLicenseManagerLicenseInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfLicenseReservationInfo struct {
    +	LicenseReservationInfo []LicenseReservationInfo `xml:"LicenseReservationInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfLicenseReservationInfo"] = reflect.TypeOf((*ArrayOfLicenseReservationInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfLocalizableMessage struct {
    +	LocalizableMessage []LocalizableMessage `xml:"LocalizableMessage,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfLocalizableMessage"] = reflect.TypeOf((*ArrayOfLocalizableMessage)(nil)).Elem()
    +}
    +
    +type ArrayOfLocalizationManagerMessageCatalog struct {
    +	LocalizationManagerMessageCatalog []LocalizationManagerMessageCatalog `xml:"LocalizationManagerMessageCatalog,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfLocalizationManagerMessageCatalog"] = reflect.TypeOf((*ArrayOfLocalizationManagerMessageCatalog)(nil)).Elem()
    +}
    +
    +type ArrayOfLong struct {
    +	Long []int64 `xml:"long,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfLong"] = reflect.TypeOf((*ArrayOfLong)(nil)).Elem()
    +}
    +
    +type ArrayOfManagedEntityStatus struct {
    +	ManagedEntityStatus []ManagedEntityStatus `xml:"ManagedEntityStatus,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfManagedEntityStatus"] = reflect.TypeOf((*ArrayOfManagedEntityStatus)(nil)).Elem()
    +}
    +
    +type ArrayOfManagedObjectReference struct {
    +	ManagedObjectReference []ManagedObjectReference `xml:"ManagedObjectReference,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfManagedObjectReference"] = reflect.TypeOf((*ArrayOfManagedObjectReference)(nil)).Elem()
    +}
    +
    +type ArrayOfMethodActionArgument struct {
    +	MethodActionArgument []MethodActionArgument `xml:"MethodActionArgument,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfMethodActionArgument"] = reflect.TypeOf((*ArrayOfMethodActionArgument)(nil)).Elem()
    +}
    +
    +type ArrayOfMethodFault struct {
    +	MethodFault []BaseMethodFault `xml:"MethodFault,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfMethodFault"] = reflect.TypeOf((*ArrayOfMethodFault)(nil)).Elem()
    +}
    +
    +type ArrayOfMissingObject struct {
    +	MissingObject []MissingObject `xml:"MissingObject,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfMissingObject"] = reflect.TypeOf((*ArrayOfMissingObject)(nil)).Elem()
    +}
    +
    +type ArrayOfMissingProperty struct {
    +	MissingProperty []MissingProperty `xml:"MissingProperty,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfMissingProperty"] = reflect.TypeOf((*ArrayOfMissingProperty)(nil)).Elem()
    +}
    +
    +type ArrayOfMultipleCertificatesVerifyFaultThumbprintData struct {
    +	MultipleCertificatesVerifyFaultThumbprintData []MultipleCertificatesVerifyFaultThumbprintData `xml:"MultipleCertificatesVerifyFaultThumbprintData,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfMultipleCertificatesVerifyFaultThumbprintData"] = reflect.TypeOf((*ArrayOfMultipleCertificatesVerifyFaultThumbprintData)(nil)).Elem()
    +}
    +
    +type ArrayOfNasStorageProfile struct {
    +	NasStorageProfile []NasStorageProfile `xml:"NasStorageProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNasStorageProfile"] = reflect.TypeOf((*ArrayOfNasStorageProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfNetIpConfigInfoIpAddress struct {
    +	NetIpConfigInfoIpAddress []NetIpConfigInfoIpAddress `xml:"NetIpConfigInfoIpAddress,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNetIpConfigInfoIpAddress"] = reflect.TypeOf((*ArrayOfNetIpConfigInfoIpAddress)(nil)).Elem()
    +}
    +
    +type ArrayOfNetIpConfigSpecIpAddressSpec struct {
    +	NetIpConfigSpecIpAddressSpec []NetIpConfigSpecIpAddressSpec `xml:"NetIpConfigSpecIpAddressSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNetIpConfigSpecIpAddressSpec"] = reflect.TypeOf((*ArrayOfNetIpConfigSpecIpAddressSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfNetIpRouteConfigInfoIpRoute struct {
    +	NetIpRouteConfigInfoIpRoute []NetIpRouteConfigInfoIpRoute `xml:"NetIpRouteConfigInfoIpRoute,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNetIpRouteConfigInfoIpRoute"] = reflect.TypeOf((*ArrayOfNetIpRouteConfigInfoIpRoute)(nil)).Elem()
    +}
    +
    +type ArrayOfNetIpRouteConfigSpecIpRouteSpec struct {
    +	NetIpRouteConfigSpecIpRouteSpec []NetIpRouteConfigSpecIpRouteSpec `xml:"NetIpRouteConfigSpecIpRouteSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNetIpRouteConfigSpecIpRouteSpec"] = reflect.TypeOf((*ArrayOfNetIpRouteConfigSpecIpRouteSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfNetIpStackInfoDefaultRouter struct {
    +	NetIpStackInfoDefaultRouter []NetIpStackInfoDefaultRouter `xml:"NetIpStackInfoDefaultRouter,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNetIpStackInfoDefaultRouter"] = reflect.TypeOf((*ArrayOfNetIpStackInfoDefaultRouter)(nil)).Elem()
    +}
    +
    +type ArrayOfNetIpStackInfoNetToMedia struct {
    +	NetIpStackInfoNetToMedia []NetIpStackInfoNetToMedia `xml:"NetIpStackInfoNetToMedia,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNetIpStackInfoNetToMedia"] = reflect.TypeOf((*ArrayOfNetIpStackInfoNetToMedia)(nil)).Elem()
    +}
    +
    +type ArrayOfNetStackInstanceProfile struct {
    +	NetStackInstanceProfile []NetStackInstanceProfile `xml:"NetStackInstanceProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNetStackInstanceProfile"] = reflect.TypeOf((*ArrayOfNetStackInstanceProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfNsxHostVNicProfile struct {
    +	NsxHostVNicProfile []NsxHostVNicProfile `xml:"NsxHostVNicProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNsxHostVNicProfile"] = reflect.TypeOf((*ArrayOfNsxHostVNicProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfNumericRange struct {
    +	NumericRange []NumericRange `xml:"NumericRange,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNumericRange"] = reflect.TypeOf((*ArrayOfNumericRange)(nil)).Elem()
    +}
    +
    +type ArrayOfNvdimmDimmInfo struct {
    +	NvdimmDimmInfo []NvdimmDimmInfo `xml:"NvdimmDimmInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNvdimmDimmInfo"] = reflect.TypeOf((*ArrayOfNvdimmDimmInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfNvdimmGuid struct {
    +	NvdimmGuid []NvdimmGuid `xml:"NvdimmGuid,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNvdimmGuid"] = reflect.TypeOf((*ArrayOfNvdimmGuid)(nil)).Elem()
    +}
    +
    +type ArrayOfNvdimmInterleaveSetInfo struct {
    +	NvdimmInterleaveSetInfo []NvdimmInterleaveSetInfo `xml:"NvdimmInterleaveSetInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNvdimmInterleaveSetInfo"] = reflect.TypeOf((*ArrayOfNvdimmInterleaveSetInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfNvdimmNamespaceInfo struct {
    +	NvdimmNamespaceInfo []NvdimmNamespaceInfo `xml:"NvdimmNamespaceInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNvdimmNamespaceInfo"] = reflect.TypeOf((*ArrayOfNvdimmNamespaceInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfNvdimmRegionInfo struct {
    +	NvdimmRegionInfo []NvdimmRegionInfo `xml:"NvdimmRegionInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfNvdimmRegionInfo"] = reflect.TypeOf((*ArrayOfNvdimmRegionInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfObjectContent struct {
    +	ObjectContent []ObjectContent `xml:"ObjectContent,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfObjectContent"] = reflect.TypeOf((*ArrayOfObjectContent)(nil)).Elem()
    +}
    +
    +type ArrayOfObjectSpec struct {
    +	ObjectSpec []ObjectSpec `xml:"ObjectSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfObjectSpec"] = reflect.TypeOf((*ArrayOfObjectSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfObjectUpdate struct {
    +	ObjectUpdate []ObjectUpdate `xml:"ObjectUpdate,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfObjectUpdate"] = reflect.TypeOf((*ArrayOfObjectUpdate)(nil)).Elem()
    +}
    +
    +type ArrayOfOpaqueNetworkTargetInfo struct {
    +	OpaqueNetworkTargetInfo []OpaqueNetworkTargetInfo `xml:"OpaqueNetworkTargetInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOpaqueNetworkTargetInfo"] = reflect.TypeOf((*ArrayOfOpaqueNetworkTargetInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfOptionDef struct {
    +	OptionDef []OptionDef `xml:"OptionDef,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOptionDef"] = reflect.TypeOf((*ArrayOfOptionDef)(nil)).Elem()
    +}
    +
    +type ArrayOfOptionProfile struct {
    +	OptionProfile []OptionProfile `xml:"OptionProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOptionProfile"] = reflect.TypeOf((*ArrayOfOptionProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfOptionValue struct {
    +	OptionValue []BaseOptionValue `xml:"OptionValue,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfOptionValue"] = reflect.TypeOf((*ArrayOfOptionValue)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfConsumerOstNode struct {
    +	OvfConsumerOstNode []OvfConsumerOstNode `xml:"OvfConsumerOstNode,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfConsumerOstNode"] = reflect.TypeOf((*ArrayOfOvfConsumerOstNode)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfConsumerOvfSection struct {
    +	OvfConsumerOvfSection []OvfConsumerOvfSection `xml:"OvfConsumerOvfSection,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfConsumerOvfSection"] = reflect.TypeOf((*ArrayOfOvfConsumerOvfSection)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfDeploymentOption struct {
    +	OvfDeploymentOption []OvfDeploymentOption `xml:"OvfDeploymentOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfDeploymentOption"] = reflect.TypeOf((*ArrayOfOvfDeploymentOption)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfFile struct {
    +	OvfFile []OvfFile `xml:"OvfFile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfFile"] = reflect.TypeOf((*ArrayOfOvfFile)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfFileItem struct {
    +	OvfFileItem []OvfFileItem `xml:"OvfFileItem,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfFileItem"] = reflect.TypeOf((*ArrayOfOvfFileItem)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfNetworkInfo struct {
    +	OvfNetworkInfo []OvfNetworkInfo `xml:"OvfNetworkInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfNetworkInfo"] = reflect.TypeOf((*ArrayOfOvfNetworkInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfNetworkMapping struct {
    +	OvfNetworkMapping []OvfNetworkMapping `xml:"OvfNetworkMapping,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfNetworkMapping"] = reflect.TypeOf((*ArrayOfOvfNetworkMapping)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfOptionInfo struct {
    +	OvfOptionInfo []OvfOptionInfo `xml:"OvfOptionInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfOptionInfo"] = reflect.TypeOf((*ArrayOfOvfOptionInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfOvfResourceMap struct {
    +	OvfResourceMap []OvfResourceMap `xml:"OvfResourceMap,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfOvfResourceMap"] = reflect.TypeOf((*ArrayOfOvfResourceMap)(nil)).Elem()
    +}
    +
    +type ArrayOfPerfCounterInfo struct {
    +	PerfCounterInfo []PerfCounterInfo `xml:"PerfCounterInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerfCounterInfo"] = reflect.TypeOf((*ArrayOfPerfCounterInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfPerfEntityMetricBase struct {
    +	PerfEntityMetricBase []BasePerfEntityMetricBase `xml:"PerfEntityMetricBase,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerfEntityMetricBase"] = reflect.TypeOf((*ArrayOfPerfEntityMetricBase)(nil)).Elem()
    +}
    +
    +type ArrayOfPerfInterval struct {
    +	PerfInterval []PerfInterval `xml:"PerfInterval,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerfInterval"] = reflect.TypeOf((*ArrayOfPerfInterval)(nil)).Elem()
    +}
    +
    +type ArrayOfPerfMetricId struct {
    +	PerfMetricId []PerfMetricId `xml:"PerfMetricId,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerfMetricId"] = reflect.TypeOf((*ArrayOfPerfMetricId)(nil)).Elem()
    +}
    +
    +type ArrayOfPerfMetricSeries struct {
    +	PerfMetricSeries []BasePerfMetricSeries `xml:"PerfMetricSeries,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerfMetricSeries"] = reflect.TypeOf((*ArrayOfPerfMetricSeries)(nil)).Elem()
    +}
    +
    +type ArrayOfPerfMetricSeriesCSV struct {
    +	PerfMetricSeriesCSV []PerfMetricSeriesCSV `xml:"PerfMetricSeriesCSV,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerfMetricSeriesCSV"] = reflect.TypeOf((*ArrayOfPerfMetricSeriesCSV)(nil)).Elem()
    +}
    +
    +type ArrayOfPerfQuerySpec struct {
    +	PerfQuerySpec []PerfQuerySpec `xml:"PerfQuerySpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerfQuerySpec"] = reflect.TypeOf((*ArrayOfPerfQuerySpec)(nil)).Elem()
    +}
    +
    +type ArrayOfPerfSampleInfo struct {
    +	PerfSampleInfo []PerfSampleInfo `xml:"PerfSampleInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerfSampleInfo"] = reflect.TypeOf((*ArrayOfPerfSampleInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfPerformanceManagerCounterLevelMapping struct {
    +	PerformanceManagerCounterLevelMapping []PerformanceManagerCounterLevelMapping `xml:"PerformanceManagerCounterLevelMapping,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPerformanceManagerCounterLevelMapping"] = reflect.TypeOf((*ArrayOfPerformanceManagerCounterLevelMapping)(nil)).Elem()
    +}
    +
    +type ArrayOfPermission struct {
    +	Permission []Permission `xml:"Permission,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPermission"] = reflect.TypeOf((*ArrayOfPermission)(nil)).Elem()
    +}
    +
    +type ArrayOfPermissionProfile struct {
    +	PermissionProfile []PermissionProfile `xml:"PermissionProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPermissionProfile"] = reflect.TypeOf((*ArrayOfPermissionProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfPhysicalNic struct {
    +	PhysicalNic []PhysicalNic `xml:"PhysicalNic,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPhysicalNic"] = reflect.TypeOf((*ArrayOfPhysicalNic)(nil)).Elem()
    +}
    +
    +type ArrayOfPhysicalNicConfig struct {
    +	PhysicalNicConfig []PhysicalNicConfig `xml:"PhysicalNicConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPhysicalNicConfig"] = reflect.TypeOf((*ArrayOfPhysicalNicConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfPhysicalNicHintInfo struct {
    +	PhysicalNicHintInfo []PhysicalNicHintInfo `xml:"PhysicalNicHintInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPhysicalNicHintInfo"] = reflect.TypeOf((*ArrayOfPhysicalNicHintInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfPhysicalNicIpHint struct {
    +	PhysicalNicIpHint []PhysicalNicIpHint `xml:"PhysicalNicIpHint,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPhysicalNicIpHint"] = reflect.TypeOf((*ArrayOfPhysicalNicIpHint)(nil)).Elem()
    +}
    +
    +type ArrayOfPhysicalNicLinkInfo struct {
    +	PhysicalNicLinkInfo []PhysicalNicLinkInfo `xml:"PhysicalNicLinkInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPhysicalNicLinkInfo"] = reflect.TypeOf((*ArrayOfPhysicalNicLinkInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfPhysicalNicNameHint struct {
    +	PhysicalNicNameHint []PhysicalNicNameHint `xml:"PhysicalNicNameHint,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPhysicalNicNameHint"] = reflect.TypeOf((*ArrayOfPhysicalNicNameHint)(nil)).Elem()
    +}
    +
    +type ArrayOfPhysicalNicProfile struct {
    +	PhysicalNicProfile []PhysicalNicProfile `xml:"PhysicalNicProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPhysicalNicProfile"] = reflect.TypeOf((*ArrayOfPhysicalNicProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfPlacementAffinityRule struct {
    +	PlacementAffinityRule []PlacementAffinityRule `xml:"PlacementAffinityRule,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPlacementAffinityRule"] = reflect.TypeOf((*ArrayOfPlacementAffinityRule)(nil)).Elem()
    +}
    +
    +type ArrayOfPlacementSpec struct {
    +	PlacementSpec []PlacementSpec `xml:"PlacementSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPlacementSpec"] = reflect.TypeOf((*ArrayOfPlacementSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfPnicUplinkProfile struct {
    +	PnicUplinkProfile []PnicUplinkProfile `xml:"PnicUplinkProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPnicUplinkProfile"] = reflect.TypeOf((*ArrayOfPnicUplinkProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfPodDiskLocator struct {
    +	PodDiskLocator []PodDiskLocator `xml:"PodDiskLocator,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPodDiskLocator"] = reflect.TypeOf((*ArrayOfPodDiskLocator)(nil)).Elem()
    +}
    +
    +type ArrayOfPolicyOption struct {
    +	PolicyOption []BasePolicyOption `xml:"PolicyOption,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfPolicyOption"] = reflect.TypeOf((*ArrayOfPolicyOption)(nil)).Elem()
    +}
    +
    +type ArrayOfPrivilegeAvailability struct {
    +	PrivilegeAvailability []PrivilegeAvailability `xml:"PrivilegeAvailability,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPrivilegeAvailability"] = reflect.TypeOf((*ArrayOfPrivilegeAvailability)(nil)).Elem()
    +}
    +
    +type ArrayOfProductComponentInfo struct {
    +	ProductComponentInfo []ProductComponentInfo `xml:"ProductComponentInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProductComponentInfo"] = reflect.TypeOf((*ArrayOfProductComponentInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileApplyProfileProperty struct {
    +	ProfileApplyProfileProperty []ProfileApplyProfileProperty `xml:"ProfileApplyProfileProperty,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileApplyProfileProperty"] = reflect.TypeOf((*ArrayOfProfileApplyProfileProperty)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileDeferredPolicyOptionParameter struct {
    +	ProfileDeferredPolicyOptionParameter []ProfileDeferredPolicyOptionParameter `xml:"ProfileDeferredPolicyOptionParameter,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileDeferredPolicyOptionParameter"] = reflect.TypeOf((*ArrayOfProfileDeferredPolicyOptionParameter)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileDescriptionSection struct {
    +	ProfileDescriptionSection []ProfileDescriptionSection `xml:"ProfileDescriptionSection,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileDescriptionSection"] = reflect.TypeOf((*ArrayOfProfileDescriptionSection)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileExecuteError struct {
    +	ProfileExecuteError []ProfileExecuteError `xml:"ProfileExecuteError,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileExecuteError"] = reflect.TypeOf((*ArrayOfProfileExecuteError)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileExpression struct {
    +	ProfileExpression []BaseProfileExpression `xml:"ProfileExpression,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileExpression"] = reflect.TypeOf((*ArrayOfProfileExpression)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileExpressionMetadata struct {
    +	ProfileExpressionMetadata []ProfileExpressionMetadata `xml:"ProfileExpressionMetadata,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileExpressionMetadata"] = reflect.TypeOf((*ArrayOfProfileExpressionMetadata)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileMetadata struct {
    +	ProfileMetadata []ProfileMetadata `xml:"ProfileMetadata,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileMetadata"] = reflect.TypeOf((*ArrayOfProfileMetadata)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileMetadataProfileOperationMessage struct {
    +	ProfileMetadataProfileOperationMessage []ProfileMetadataProfileOperationMessage `xml:"ProfileMetadataProfileOperationMessage,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileMetadataProfileOperationMessage"] = reflect.TypeOf((*ArrayOfProfileMetadataProfileOperationMessage)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileMetadataProfileSortSpec struct {
    +	ProfileMetadataProfileSortSpec []ProfileMetadataProfileSortSpec `xml:"ProfileMetadataProfileSortSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileMetadataProfileSortSpec"] = reflect.TypeOf((*ArrayOfProfileMetadataProfileSortSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileParameterMetadata struct {
    +	ProfileParameterMetadata []ProfileParameterMetadata `xml:"ProfileParameterMetadata,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileParameterMetadata"] = reflect.TypeOf((*ArrayOfProfileParameterMetadata)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileParameterMetadataParameterRelationMetadata struct {
    +	ProfileParameterMetadataParameterRelationMetadata []ProfileParameterMetadataParameterRelationMetadata `xml:"ProfileParameterMetadataParameterRelationMetadata,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileParameterMetadataParameterRelationMetadata"] = reflect.TypeOf((*ArrayOfProfileParameterMetadataParameterRelationMetadata)(nil)).Elem()
    +}
    +
    +type ArrayOfProfilePolicy struct {
    +	ProfilePolicy []ProfilePolicy `xml:"ProfilePolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfilePolicy"] = reflect.TypeOf((*ArrayOfProfilePolicy)(nil)).Elem()
    +}
    +
    +type ArrayOfProfilePolicyMetadata struct {
    +	ProfilePolicyMetadata []ProfilePolicyMetadata `xml:"ProfilePolicyMetadata,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfilePolicyMetadata"] = reflect.TypeOf((*ArrayOfProfilePolicyMetadata)(nil)).Elem()
    +}
    +
    +type ArrayOfProfilePolicyOptionMetadata struct {
    +	ProfilePolicyOptionMetadata []BaseProfilePolicyOptionMetadata `xml:"ProfilePolicyOptionMetadata,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfilePolicyOptionMetadata"] = reflect.TypeOf((*ArrayOfProfilePolicyOptionMetadata)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileProfileStructureProperty struct {
    +	ProfileProfileStructureProperty []ProfileProfileStructureProperty `xml:"ProfileProfileStructureProperty,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileProfileStructureProperty"] = reflect.TypeOf((*ArrayOfProfileProfileStructureProperty)(nil)).Elem()
    +}
    +
    +type ArrayOfProfilePropertyPath struct {
    +	ProfilePropertyPath []ProfilePropertyPath `xml:"ProfilePropertyPath,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfilePropertyPath"] = reflect.TypeOf((*ArrayOfProfilePropertyPath)(nil)).Elem()
    +}
    +
    +type ArrayOfProfileUpdateFailedUpdateFailure struct {
    +	ProfileUpdateFailedUpdateFailure []ProfileUpdateFailedUpdateFailure `xml:"ProfileUpdateFailedUpdateFailure,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfProfileUpdateFailedUpdateFailure"] = reflect.TypeOf((*ArrayOfProfileUpdateFailedUpdateFailure)(nil)).Elem()
    +}
    +
    +type ArrayOfPropertyChange struct {
    +	PropertyChange []PropertyChange `xml:"PropertyChange,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPropertyChange"] = reflect.TypeOf((*ArrayOfPropertyChange)(nil)).Elem()
    +}
    +
    +type ArrayOfPropertyFilterSpec struct {
    +	PropertyFilterSpec []PropertyFilterSpec `xml:"PropertyFilterSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPropertyFilterSpec"] = reflect.TypeOf((*ArrayOfPropertyFilterSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfPropertyFilterUpdate struct {
    +	PropertyFilterUpdate []PropertyFilterUpdate `xml:"PropertyFilterUpdate,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPropertyFilterUpdate"] = reflect.TypeOf((*ArrayOfPropertyFilterUpdate)(nil)).Elem()
    +}
    +
    +type ArrayOfPropertySpec struct {
    +	PropertySpec []PropertySpec `xml:"PropertySpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfPropertySpec"] = reflect.TypeOf((*ArrayOfPropertySpec)(nil)).Elem()
    +}
    +
    +type ArrayOfRelation struct {
    +	Relation []Relation `xml:"Relation,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfRelation"] = reflect.TypeOf((*ArrayOfRelation)(nil)).Elem()
    +}
    +
    +type ArrayOfReplicationInfoDiskSettings struct {
    +	ReplicationInfoDiskSettings []ReplicationInfoDiskSettings `xml:"ReplicationInfoDiskSettings,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfReplicationInfoDiskSettings"] = reflect.TypeOf((*ArrayOfReplicationInfoDiskSettings)(nil)).Elem()
    +}
    +
    +type ArrayOfResourceConfigSpec struct {
    +	ResourceConfigSpec []ResourceConfigSpec `xml:"ResourceConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfResourceConfigSpec"] = reflect.TypeOf((*ArrayOfResourceConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfRetrieveVStorageObjSpec struct {
    +	RetrieveVStorageObjSpec []RetrieveVStorageObjSpec `xml:"RetrieveVStorageObjSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfRetrieveVStorageObjSpec"] = reflect.TypeOf((*ArrayOfRetrieveVStorageObjSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfScheduledTaskDetail struct {
    +	ScheduledTaskDetail []ScheduledTaskDetail `xml:"ScheduledTaskDetail,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfScheduledTaskDetail"] = reflect.TypeOf((*ArrayOfScheduledTaskDetail)(nil)).Elem()
    +}
    +
    +type ArrayOfScsiLun struct {
    +	ScsiLun []BaseScsiLun `xml:"ScsiLun,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfScsiLun"] = reflect.TypeOf((*ArrayOfScsiLun)(nil)).Elem()
    +}
    +
    +type ArrayOfScsiLunDescriptor struct {
    +	ScsiLunDescriptor []ScsiLunDescriptor `xml:"ScsiLunDescriptor,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfScsiLunDescriptor"] = reflect.TypeOf((*ArrayOfScsiLunDescriptor)(nil)).Elem()
    +}
    +
    +type ArrayOfScsiLunDurableName struct {
    +	ScsiLunDurableName []ScsiLunDurableName `xml:"ScsiLunDurableName,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfScsiLunDurableName"] = reflect.TypeOf((*ArrayOfScsiLunDurableName)(nil)).Elem()
    +}
    +
    +type ArrayOfSelectionSet struct {
    +	SelectionSet []BaseSelectionSet `xml:"SelectionSet,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfSelectionSet"] = reflect.TypeOf((*ArrayOfSelectionSet)(nil)).Elem()
    +}
    +
    +type ArrayOfSelectionSpec struct {
    +	SelectionSpec []BaseSelectionSpec `xml:"SelectionSpec,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfSelectionSpec"] = reflect.TypeOf((*ArrayOfSelectionSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfServiceConsolePortGroupProfile struct {
    +	ServiceConsolePortGroupProfile []ServiceConsolePortGroupProfile `xml:"ServiceConsolePortGroupProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfServiceConsolePortGroupProfile"] = reflect.TypeOf((*ArrayOfServiceConsolePortGroupProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfServiceLocator struct {
    +	ServiceLocator []ServiceLocator `xml:"ServiceLocator,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfServiceLocator"] = reflect.TypeOf((*ArrayOfServiceLocator)(nil)).Elem()
    +}
    +
    +type ArrayOfServiceManagerServiceInfo struct {
    +	ServiceManagerServiceInfo []ServiceManagerServiceInfo `xml:"ServiceManagerServiceInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfServiceManagerServiceInfo"] = reflect.TypeOf((*ArrayOfServiceManagerServiceInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfServiceProfile struct {
    +	ServiceProfile []ServiceProfile `xml:"ServiceProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfServiceProfile"] = reflect.TypeOf((*ArrayOfServiceProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfShort struct {
    +	Short []int16 `xml:"short,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfShort"] = reflect.TypeOf((*ArrayOfShort)(nil)).Elem()
    +}
    +
    +type ArrayOfSoftwarePackage struct {
    +	SoftwarePackage []SoftwarePackage `xml:"SoftwarePackage,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfSoftwarePackage"] = reflect.TypeOf((*ArrayOfSoftwarePackage)(nil)).Elem()
    +}
    +
    +type ArrayOfStaticRouteProfile struct {
    +	StaticRouteProfile []StaticRouteProfile `xml:"StaticRouteProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfStaticRouteProfile"] = reflect.TypeOf((*ArrayOfStaticRouteProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfStorageDrsOptionSpec struct {
    +	StorageDrsOptionSpec []StorageDrsOptionSpec `xml:"StorageDrsOptionSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfStorageDrsOptionSpec"] = reflect.TypeOf((*ArrayOfStorageDrsOptionSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfStorageDrsPlacementRankVmSpec struct {
    +	StorageDrsPlacementRankVmSpec []StorageDrsPlacementRankVmSpec `xml:"StorageDrsPlacementRankVmSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfStorageDrsPlacementRankVmSpec"] = reflect.TypeOf((*ArrayOfStorageDrsPlacementRankVmSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfStorageDrsVmConfigInfo struct {
    +	StorageDrsVmConfigInfo []StorageDrsVmConfigInfo `xml:"StorageDrsVmConfigInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfStorageDrsVmConfigInfo"] = reflect.TypeOf((*ArrayOfStorageDrsVmConfigInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfStorageDrsVmConfigSpec struct {
    +	StorageDrsVmConfigSpec []StorageDrsVmConfigSpec `xml:"StorageDrsVmConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfStorageDrsVmConfigSpec"] = reflect.TypeOf((*ArrayOfStorageDrsVmConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfStoragePerformanceSummary struct {
    +	StoragePerformanceSummary []StoragePerformanceSummary `xml:"StoragePerformanceSummary,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfStoragePerformanceSummary"] = reflect.TypeOf((*ArrayOfStoragePerformanceSummary)(nil)).Elem()
    +}
    +
    +type ArrayOfStorageRequirement struct {
    +	StorageRequirement []StorageRequirement `xml:"StorageRequirement,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfStorageRequirement"] = reflect.TypeOf((*ArrayOfStorageRequirement)(nil)).Elem()
    +}
    +
    +type ArrayOfString struct {
    +	String []string `xml:"string,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfString"] = reflect.TypeOf((*ArrayOfString)(nil)).Elem()
    +}
    +
    +type ArrayOfStructuredCustomizations struct {
    +	StructuredCustomizations []StructuredCustomizations `xml:"StructuredCustomizations,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfStructuredCustomizations"] = reflect.TypeOf((*ArrayOfStructuredCustomizations)(nil)).Elem()
    +}
    +
    +type ArrayOfSystemEventInfo struct {
    +	SystemEventInfo []SystemEventInfo `xml:"SystemEventInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfSystemEventInfo"] = reflect.TypeOf((*ArrayOfSystemEventInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfTag struct {
    +	Tag []Tag `xml:"Tag,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfTag"] = reflect.TypeOf((*ArrayOfTag)(nil)).Elem()
    +}
    +
    +type ArrayOfTaskInfo struct {
    +	TaskInfo []TaskInfo `xml:"TaskInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfTaskInfo"] = reflect.TypeOf((*ArrayOfTaskInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfTaskInfoState struct {
    +	TaskInfoState []TaskInfoState `xml:"TaskInfoState,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfTaskInfoState"] = reflect.TypeOf((*ArrayOfTaskInfoState)(nil)).Elem()
    +}
    +
    +type ArrayOfTypeDescription struct {
    +	TypeDescription []BaseTypeDescription `xml:"TypeDescription,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfTypeDescription"] = reflect.TypeOf((*ArrayOfTypeDescription)(nil)).Elem()
    +}
    +
    +type ArrayOfUpdateVirtualMachineFilesResultFailedVmFileInfo struct {
    +	UpdateVirtualMachineFilesResultFailedVmFileInfo []UpdateVirtualMachineFilesResultFailedVmFileInfo `xml:"UpdateVirtualMachineFilesResultFailedVmFileInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfUpdateVirtualMachineFilesResultFailedVmFileInfo"] = reflect.TypeOf((*ArrayOfUpdateVirtualMachineFilesResultFailedVmFileInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfUsbScanCodeSpecKeyEvent struct {
    +	UsbScanCodeSpecKeyEvent []UsbScanCodeSpecKeyEvent `xml:"UsbScanCodeSpecKeyEvent,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfUsbScanCodeSpecKeyEvent"] = reflect.TypeOf((*ArrayOfUsbScanCodeSpecKeyEvent)(nil)).Elem()
    +}
    +
    +type ArrayOfUserGroupProfile struct {
    +	UserGroupProfile []UserGroupProfile `xml:"UserGroupProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfUserGroupProfile"] = reflect.TypeOf((*ArrayOfUserGroupProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfUserPrivilegeResult struct {
    +	UserPrivilegeResult []UserPrivilegeResult `xml:"UserPrivilegeResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfUserPrivilegeResult"] = reflect.TypeOf((*ArrayOfUserPrivilegeResult)(nil)).Elem()
    +}
    +
    +type ArrayOfUserProfile struct {
    +	UserProfile []UserProfile `xml:"UserProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfUserProfile"] = reflect.TypeOf((*ArrayOfUserProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfUserSearchResult struct {
    +	UserSearchResult []BaseUserSearchResult `xml:"UserSearchResult,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfUserSearchResult"] = reflect.TypeOf((*ArrayOfUserSearchResult)(nil)).Elem()
    +}
    +
    +type ArrayOfUserSession struct {
    +	UserSession []UserSession `xml:"UserSession,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfUserSession"] = reflect.TypeOf((*ArrayOfUserSession)(nil)).Elem()
    +}
    +
    +type ArrayOfVASAStorageArray struct {
    +	VASAStorageArray []VASAStorageArray `xml:"VASAStorageArray,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVASAStorageArray"] = reflect.TypeOf((*ArrayOfVASAStorageArray)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppCloneSpecNetworkMappingPair struct {
    +	VAppCloneSpecNetworkMappingPair []VAppCloneSpecNetworkMappingPair `xml:"VAppCloneSpecNetworkMappingPair,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppCloneSpecNetworkMappingPair"] = reflect.TypeOf((*ArrayOfVAppCloneSpecNetworkMappingPair)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppCloneSpecResourceMap struct {
    +	VAppCloneSpecResourceMap []VAppCloneSpecResourceMap `xml:"VAppCloneSpecResourceMap,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppCloneSpecResourceMap"] = reflect.TypeOf((*ArrayOfVAppCloneSpecResourceMap)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppEntityConfigInfo struct {
    +	VAppEntityConfigInfo []VAppEntityConfigInfo `xml:"VAppEntityConfigInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppEntityConfigInfo"] = reflect.TypeOf((*ArrayOfVAppEntityConfigInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppOvfSectionInfo struct {
    +	VAppOvfSectionInfo []VAppOvfSectionInfo `xml:"VAppOvfSectionInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppOvfSectionInfo"] = reflect.TypeOf((*ArrayOfVAppOvfSectionInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppOvfSectionSpec struct {
    +	VAppOvfSectionSpec []VAppOvfSectionSpec `xml:"VAppOvfSectionSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppOvfSectionSpec"] = reflect.TypeOf((*ArrayOfVAppOvfSectionSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppProductInfo struct {
    +	VAppProductInfo []VAppProductInfo `xml:"VAppProductInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppProductInfo"] = reflect.TypeOf((*ArrayOfVAppProductInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppProductSpec struct {
    +	VAppProductSpec []VAppProductSpec `xml:"VAppProductSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppProductSpec"] = reflect.TypeOf((*ArrayOfVAppProductSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppPropertyInfo struct {
    +	VAppPropertyInfo []VAppPropertyInfo `xml:"VAppPropertyInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppPropertyInfo"] = reflect.TypeOf((*ArrayOfVAppPropertyInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVAppPropertySpec struct {
    +	VAppPropertySpec []VAppPropertySpec `xml:"VAppPropertySpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVAppPropertySpec"] = reflect.TypeOf((*ArrayOfVAppPropertySpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVMwareDVSPvlanConfigSpec struct {
    +	VMwareDVSPvlanConfigSpec []VMwareDVSPvlanConfigSpec `xml:"VMwareDVSPvlanConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVMwareDVSPvlanConfigSpec"] = reflect.TypeOf((*ArrayOfVMwareDVSPvlanConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVMwareDVSPvlanMapEntry struct {
    +	VMwareDVSPvlanMapEntry []VMwareDVSPvlanMapEntry `xml:"VMwareDVSPvlanMapEntry,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVMwareDVSPvlanMapEntry"] = reflect.TypeOf((*ArrayOfVMwareDVSPvlanMapEntry)(nil)).Elem()
    +}
    +
    +type ArrayOfVMwareDVSVspanConfigSpec struct {
    +	VMwareDVSVspanConfigSpec []VMwareDVSVspanConfigSpec `xml:"VMwareDVSVspanConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVMwareDVSVspanConfigSpec"] = reflect.TypeOf((*ArrayOfVMwareDVSVspanConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVMwareDvsLacpGroupConfig struct {
    +	VMwareDvsLacpGroupConfig []VMwareDvsLacpGroupConfig `xml:"VMwareDvsLacpGroupConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVMwareDvsLacpGroupConfig"] = reflect.TypeOf((*ArrayOfVMwareDvsLacpGroupConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfVMwareDvsLacpGroupSpec struct {
    +	VMwareDvsLacpGroupSpec []VMwareDvsLacpGroupSpec `xml:"VMwareDvsLacpGroupSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVMwareDvsLacpGroupSpec"] = reflect.TypeOf((*ArrayOfVMwareDvsLacpGroupSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVMwareVspanSession struct {
    +	VMwareVspanSession []VMwareVspanSession `xml:"VMwareVspanSession,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVMwareVspanSession"] = reflect.TypeOf((*ArrayOfVMwareVspanSession)(nil)).Elem()
    +}
    +
    +type ArrayOfVStorageObjectAssociations struct {
    +	VStorageObjectAssociations []VStorageObjectAssociations `xml:"VStorageObjectAssociations,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVStorageObjectAssociations"] = reflect.TypeOf((*ArrayOfVStorageObjectAssociations)(nil)).Elem()
    +}
    +
    +type ArrayOfVStorageObjectAssociationsVmDiskAssociations struct {
    +	VStorageObjectAssociationsVmDiskAssociations []VStorageObjectAssociationsVmDiskAssociations `xml:"VStorageObjectAssociationsVmDiskAssociations,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVStorageObjectAssociationsVmDiskAssociations"] = reflect.TypeOf((*ArrayOfVStorageObjectAssociationsVmDiskAssociations)(nil)).Elem()
    +}
    +
    +type ArrayOfVStorageObjectSnapshotInfoVStorageObjectSnapshot struct {
    +	VStorageObjectSnapshotInfoVStorageObjectSnapshot []VStorageObjectSnapshotInfoVStorageObjectSnapshot `xml:"VStorageObjectSnapshotInfoVStorageObjectSnapshot,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVStorageObjectSnapshotInfoVStorageObjectSnapshot"] = reflect.TypeOf((*ArrayOfVStorageObjectSnapshotInfoVStorageObjectSnapshot)(nil)).Elem()
    +}
    +
    +type ArrayOfVVolHostPE struct {
    +	VVolHostPE []VVolHostPE `xml:"VVolHostPE,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVVolHostPE"] = reflect.TypeOf((*ArrayOfVVolHostPE)(nil)).Elem()
    +}
    +
    +type ArrayOfVVolVmConfigFileUpdateResultFailedVmConfigFileInfo struct {
    +	VVolVmConfigFileUpdateResultFailedVmConfigFileInfo []VVolVmConfigFileUpdateResultFailedVmConfigFileInfo `xml:"VVolVmConfigFileUpdateResultFailedVmConfigFileInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVVolVmConfigFileUpdateResultFailedVmConfigFileInfo"] = reflect.TypeOf((*ArrayOfVVolVmConfigFileUpdateResultFailedVmConfigFileInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVchaNodeRuntimeInfo struct {
    +	VchaNodeRuntimeInfo []VchaNodeRuntimeInfo `xml:"VchaNodeRuntimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVchaNodeRuntimeInfo"] = reflect.TypeOf((*ArrayOfVchaNodeRuntimeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVimVasaProviderInfo struct {
    +	VimVasaProviderInfo []VimVasaProviderInfo `xml:"VimVasaProviderInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVimVasaProviderInfo"] = reflect.TypeOf((*ArrayOfVimVasaProviderInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVimVasaProviderStatePerArray struct {
    +	VimVasaProviderStatePerArray []VimVasaProviderStatePerArray `xml:"VimVasaProviderStatePerArray,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVimVasaProviderStatePerArray"] = reflect.TypeOf((*ArrayOfVimVasaProviderStatePerArray)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualAppLinkInfo struct {
    +	VirtualAppLinkInfo []VirtualAppLinkInfo `xml:"VirtualAppLinkInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualAppLinkInfo"] = reflect.TypeOf((*ArrayOfVirtualAppLinkInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualDevice struct {
    +	VirtualDevice []BaseVirtualDevice `xml:"VirtualDevice,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualDevice"] = reflect.TypeOf((*ArrayOfVirtualDevice)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualDeviceBackingOption struct {
    +	VirtualDeviceBackingOption []BaseVirtualDeviceBackingOption `xml:"VirtualDeviceBackingOption,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualDeviceBackingOption"] = reflect.TypeOf((*ArrayOfVirtualDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualDeviceConfigSpec struct {
    +	VirtualDeviceConfigSpec []BaseVirtualDeviceConfigSpec `xml:"VirtualDeviceConfigSpec,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualDeviceConfigSpec"] = reflect.TypeOf((*ArrayOfVirtualDeviceConfigSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualDeviceOption struct {
    +	VirtualDeviceOption []BaseVirtualDeviceOption `xml:"VirtualDeviceOption,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualDeviceOption"] = reflect.TypeOf((*ArrayOfVirtualDeviceOption)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualDisk struct {
    +	VirtualDisk []VirtualDisk `xml:"VirtualDisk,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualDisk"] = reflect.TypeOf((*ArrayOfVirtualDisk)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualDiskDeltaDiskFormatsSupported struct {
    +	VirtualDiskDeltaDiskFormatsSupported []VirtualDiskDeltaDiskFormatsSupported `xml:"VirtualDiskDeltaDiskFormatsSupported,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualDiskDeltaDiskFormatsSupported"] = reflect.TypeOf((*ArrayOfVirtualDiskDeltaDiskFormatsSupported)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualDiskId struct {
    +	VirtualDiskId []VirtualDiskId `xml:"VirtualDiskId,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualDiskId"] = reflect.TypeOf((*ArrayOfVirtualDiskId)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualDiskRuleSpec struct {
    +	VirtualDiskRuleSpec []VirtualDiskRuleSpec `xml:"VirtualDiskRuleSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualDiskRuleSpec"] = reflect.TypeOf((*ArrayOfVirtualDiskRuleSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineBootOptionsBootableDevice struct {
    +	VirtualMachineBootOptionsBootableDevice []BaseVirtualMachineBootOptionsBootableDevice `xml:"VirtualMachineBootOptionsBootableDevice,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineBootOptionsBootableDevice"] = reflect.TypeOf((*ArrayOfVirtualMachineBootOptionsBootableDevice)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineCdromInfo struct {
    +	VirtualMachineCdromInfo []VirtualMachineCdromInfo `xml:"VirtualMachineCdromInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineCdromInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineCdromInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineConfigInfoDatastoreUrlPair struct {
    +	VirtualMachineConfigInfoDatastoreUrlPair []VirtualMachineConfigInfoDatastoreUrlPair `xml:"VirtualMachineConfigInfoDatastoreUrlPair,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineConfigInfoDatastoreUrlPair"] = reflect.TypeOf((*ArrayOfVirtualMachineConfigInfoDatastoreUrlPair)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineConfigOptionDescriptor struct {
    +	VirtualMachineConfigOptionDescriptor []VirtualMachineConfigOptionDescriptor `xml:"VirtualMachineConfigOptionDescriptor,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineConfigOptionDescriptor"] = reflect.TypeOf((*ArrayOfVirtualMachineConfigOptionDescriptor)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineCpuIdInfoSpec struct {
    +	VirtualMachineCpuIdInfoSpec []VirtualMachineCpuIdInfoSpec `xml:"VirtualMachineCpuIdInfoSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineCpuIdInfoSpec"] = reflect.TypeOf((*ArrayOfVirtualMachineCpuIdInfoSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineDatastoreInfo struct {
    +	VirtualMachineDatastoreInfo []VirtualMachineDatastoreInfo `xml:"VirtualMachineDatastoreInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineDatastoreInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineDatastoreInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineDatastoreVolumeOption struct {
    +	VirtualMachineDatastoreVolumeOption []VirtualMachineDatastoreVolumeOption `xml:"VirtualMachineDatastoreVolumeOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineDatastoreVolumeOption"] = reflect.TypeOf((*ArrayOfVirtualMachineDatastoreVolumeOption)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineDeviceRuntimeInfo struct {
    +	VirtualMachineDeviceRuntimeInfo []VirtualMachineDeviceRuntimeInfo `xml:"VirtualMachineDeviceRuntimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineDeviceRuntimeInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineDeviceRuntimeInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineDisplayTopology struct {
    +	VirtualMachineDisplayTopology []VirtualMachineDisplayTopology `xml:"VirtualMachineDisplayTopology,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineDisplayTopology"] = reflect.TypeOf((*ArrayOfVirtualMachineDisplayTopology)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineFeatureRequirement struct {
    +	VirtualMachineFeatureRequirement []VirtualMachineFeatureRequirement `xml:"VirtualMachineFeatureRequirement,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineFeatureRequirement"] = reflect.TypeOf((*ArrayOfVirtualMachineFeatureRequirement)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineFileLayoutDiskLayout struct {
    +	VirtualMachineFileLayoutDiskLayout []VirtualMachineFileLayoutDiskLayout `xml:"VirtualMachineFileLayoutDiskLayout,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineFileLayoutDiskLayout"] = reflect.TypeOf((*ArrayOfVirtualMachineFileLayoutDiskLayout)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineFileLayoutExDiskLayout struct {
    +	VirtualMachineFileLayoutExDiskLayout []VirtualMachineFileLayoutExDiskLayout `xml:"VirtualMachineFileLayoutExDiskLayout,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineFileLayoutExDiskLayout"] = reflect.TypeOf((*ArrayOfVirtualMachineFileLayoutExDiskLayout)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineFileLayoutExDiskUnit struct {
    +	VirtualMachineFileLayoutExDiskUnit []VirtualMachineFileLayoutExDiskUnit `xml:"VirtualMachineFileLayoutExDiskUnit,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineFileLayoutExDiskUnit"] = reflect.TypeOf((*ArrayOfVirtualMachineFileLayoutExDiskUnit)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineFileLayoutExFileInfo struct {
    +	VirtualMachineFileLayoutExFileInfo []VirtualMachineFileLayoutExFileInfo `xml:"VirtualMachineFileLayoutExFileInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineFileLayoutExFileInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineFileLayoutExFileInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineFileLayoutExSnapshotLayout struct {
    +	VirtualMachineFileLayoutExSnapshotLayout []VirtualMachineFileLayoutExSnapshotLayout `xml:"VirtualMachineFileLayoutExSnapshotLayout,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineFileLayoutExSnapshotLayout"] = reflect.TypeOf((*ArrayOfVirtualMachineFileLayoutExSnapshotLayout)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineFileLayoutSnapshotLayout struct {
    +	VirtualMachineFileLayoutSnapshotLayout []VirtualMachineFileLayoutSnapshotLayout `xml:"VirtualMachineFileLayoutSnapshotLayout,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineFileLayoutSnapshotLayout"] = reflect.TypeOf((*ArrayOfVirtualMachineFileLayoutSnapshotLayout)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineFloppyInfo struct {
    +	VirtualMachineFloppyInfo []VirtualMachineFloppyInfo `xml:"VirtualMachineFloppyInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineFloppyInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineFloppyInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineIdeDiskDeviceInfo struct {
    +	VirtualMachineIdeDiskDeviceInfo []VirtualMachineIdeDiskDeviceInfo `xml:"VirtualMachineIdeDiskDeviceInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineIdeDiskDeviceInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineIdeDiskDeviceInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineIdeDiskDevicePartitionInfo struct {
    +	VirtualMachineIdeDiskDevicePartitionInfo []VirtualMachineIdeDiskDevicePartitionInfo `xml:"VirtualMachineIdeDiskDevicePartitionInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineIdeDiskDevicePartitionInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineIdeDiskDevicePartitionInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineLegacyNetworkSwitchInfo struct {
    +	VirtualMachineLegacyNetworkSwitchInfo []VirtualMachineLegacyNetworkSwitchInfo `xml:"VirtualMachineLegacyNetworkSwitchInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineLegacyNetworkSwitchInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineLegacyNetworkSwitchInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineMessage struct {
    +	VirtualMachineMessage []VirtualMachineMessage `xml:"VirtualMachineMessage,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineMessage"] = reflect.TypeOf((*ArrayOfVirtualMachineMessage)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineMetadataManagerVmMetadataInput struct {
    +	VirtualMachineMetadataManagerVmMetadataInput []VirtualMachineMetadataManagerVmMetadataInput `xml:"VirtualMachineMetadataManagerVmMetadataInput,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineMetadataManagerVmMetadataInput"] = reflect.TypeOf((*ArrayOfVirtualMachineMetadataManagerVmMetadataInput)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineMetadataManagerVmMetadataResult struct {
    +	VirtualMachineMetadataManagerVmMetadataResult []VirtualMachineMetadataManagerVmMetadataResult `xml:"VirtualMachineMetadataManagerVmMetadataResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineMetadataManagerVmMetadataResult"] = reflect.TypeOf((*ArrayOfVirtualMachineMetadataManagerVmMetadataResult)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineNetworkInfo struct {
    +	VirtualMachineNetworkInfo []VirtualMachineNetworkInfo `xml:"VirtualMachineNetworkInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineNetworkInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineNetworkInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineParallelInfo struct {
    +	VirtualMachineParallelInfo []VirtualMachineParallelInfo `xml:"VirtualMachineParallelInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineParallelInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineParallelInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachinePciPassthroughInfo struct {
    +	VirtualMachinePciPassthroughInfo []BaseVirtualMachinePciPassthroughInfo `xml:"VirtualMachinePciPassthroughInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachinePciPassthroughInfo"] = reflect.TypeOf((*ArrayOfVirtualMachinePciPassthroughInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachinePciSharedGpuPassthroughInfo struct {
    +	VirtualMachinePciSharedGpuPassthroughInfo []VirtualMachinePciSharedGpuPassthroughInfo `xml:"VirtualMachinePciSharedGpuPassthroughInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachinePciSharedGpuPassthroughInfo"] = reflect.TypeOf((*ArrayOfVirtualMachinePciSharedGpuPassthroughInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineProfileDetailsDiskProfileDetails struct {
    +	VirtualMachineProfileDetailsDiskProfileDetails []VirtualMachineProfileDetailsDiskProfileDetails `xml:"VirtualMachineProfileDetailsDiskProfileDetails,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineProfileDetailsDiskProfileDetails"] = reflect.TypeOf((*ArrayOfVirtualMachineProfileDetailsDiskProfileDetails)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineProfileSpec struct {
    +	VirtualMachineProfileSpec []BaseVirtualMachineProfileSpec `xml:"VirtualMachineProfileSpec,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineProfileSpec"] = reflect.TypeOf((*ArrayOfVirtualMachineProfileSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachinePropertyRelation struct {
    +	VirtualMachinePropertyRelation []VirtualMachinePropertyRelation `xml:"VirtualMachinePropertyRelation,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachinePropertyRelation"] = reflect.TypeOf((*ArrayOfVirtualMachinePropertyRelation)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineRelocateSpecDiskLocator struct {
    +	VirtualMachineRelocateSpecDiskLocator []VirtualMachineRelocateSpecDiskLocator `xml:"VirtualMachineRelocateSpecDiskLocator,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineRelocateSpecDiskLocator"] = reflect.TypeOf((*ArrayOfVirtualMachineRelocateSpecDiskLocator)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineScsiDiskDeviceInfo struct {
    +	VirtualMachineScsiDiskDeviceInfo []VirtualMachineScsiDiskDeviceInfo `xml:"VirtualMachineScsiDiskDeviceInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineScsiDiskDeviceInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineScsiDiskDeviceInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineScsiPassthroughInfo struct {
    +	VirtualMachineScsiPassthroughInfo []VirtualMachineScsiPassthroughInfo `xml:"VirtualMachineScsiPassthroughInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineScsiPassthroughInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineScsiPassthroughInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineSerialInfo struct {
    +	VirtualMachineSerialInfo []VirtualMachineSerialInfo `xml:"VirtualMachineSerialInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineSerialInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineSerialInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineSnapshotTree struct {
    +	VirtualMachineSnapshotTree []VirtualMachineSnapshotTree `xml:"VirtualMachineSnapshotTree,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineSnapshotTree"] = reflect.TypeOf((*ArrayOfVirtualMachineSnapshotTree)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineSoundInfo struct {
    +	VirtualMachineSoundInfo []VirtualMachineSoundInfo `xml:"VirtualMachineSoundInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineSoundInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineSoundInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineSriovInfo struct {
    +	VirtualMachineSriovInfo []VirtualMachineSriovInfo `xml:"VirtualMachineSriovInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineSriovInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineSriovInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineSummary struct {
    +	VirtualMachineSummary []VirtualMachineSummary `xml:"VirtualMachineSummary,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineSummary"] = reflect.TypeOf((*ArrayOfVirtualMachineSummary)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineUsageOnDatastore struct {
    +	VirtualMachineUsageOnDatastore []VirtualMachineUsageOnDatastore `xml:"VirtualMachineUsageOnDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineUsageOnDatastore"] = reflect.TypeOf((*ArrayOfVirtualMachineUsageOnDatastore)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineUsbInfo struct {
    +	VirtualMachineUsbInfo []VirtualMachineUsbInfo `xml:"VirtualMachineUsbInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineUsbInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineUsbInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineVFlashModuleInfo struct {
    +	VirtualMachineVFlashModuleInfo []VirtualMachineVFlashModuleInfo `xml:"VirtualMachineVFlashModuleInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineVFlashModuleInfo"] = reflect.TypeOf((*ArrayOfVirtualMachineVFlashModuleInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualMachineVMCIDeviceFilterSpec struct {
    +	VirtualMachineVMCIDeviceFilterSpec []VirtualMachineVMCIDeviceFilterSpec `xml:"VirtualMachineVMCIDeviceFilterSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualMachineVMCIDeviceFilterSpec"] = reflect.TypeOf((*ArrayOfVirtualMachineVMCIDeviceFilterSpec)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualNicManagerNetConfig struct {
    +	VirtualNicManagerNetConfig []VirtualNicManagerNetConfig `xml:"VirtualNicManagerNetConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualNicManagerNetConfig"] = reflect.TypeOf((*ArrayOfVirtualNicManagerNetConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualSCSISharing struct {
    +	VirtualSCSISharing []VirtualSCSISharing `xml:"VirtualSCSISharing,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualSCSISharing"] = reflect.TypeOf((*ArrayOfVirtualSCSISharing)(nil)).Elem()
    +}
    +
    +type ArrayOfVirtualSwitchProfile struct {
    +	VirtualSwitchProfile []VirtualSwitchProfile `xml:"VirtualSwitchProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVirtualSwitchProfile"] = reflect.TypeOf((*ArrayOfVirtualSwitchProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfVmEventArgument struct {
    +	VmEventArgument []VmEventArgument `xml:"VmEventArgument,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVmEventArgument"] = reflect.TypeOf((*ArrayOfVmEventArgument)(nil)).Elem()
    +}
    +
    +type ArrayOfVmPodConfigForPlacement struct {
    +	VmPodConfigForPlacement []VmPodConfigForPlacement `xml:"VmPodConfigForPlacement,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVmPodConfigForPlacement"] = reflect.TypeOf((*ArrayOfVmPodConfigForPlacement)(nil)).Elem()
    +}
    +
    +type ArrayOfVmPortGroupProfile struct {
    +	VmPortGroupProfile []VmPortGroupProfile `xml:"VmPortGroupProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVmPortGroupProfile"] = reflect.TypeOf((*ArrayOfVmPortGroupProfile)(nil)).Elem()
    +}
    +
    +type ArrayOfVmfsConfigOption struct {
    +	VmfsConfigOption []VmfsConfigOption `xml:"VmfsConfigOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVmfsConfigOption"] = reflect.TypeOf((*ArrayOfVmfsConfigOption)(nil)).Elem()
    +}
    +
    +type ArrayOfVmfsDatastoreOption struct {
    +	VmfsDatastoreOption []VmfsDatastoreOption `xml:"VmfsDatastoreOption,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVmfsDatastoreOption"] = reflect.TypeOf((*ArrayOfVmfsDatastoreOption)(nil)).Elem()
    +}
    +
    +type ArrayOfVnicPortArgument struct {
    +	VnicPortArgument []VnicPortArgument `xml:"VnicPortArgument,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVnicPortArgument"] = reflect.TypeOf((*ArrayOfVnicPortArgument)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanHostConfigInfo struct {
    +	VsanHostConfigInfo []VsanHostConfigInfo `xml:"VsanHostConfigInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanHostConfigInfo"] = reflect.TypeOf((*ArrayOfVsanHostConfigInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanHostConfigInfoNetworkInfoPortConfig struct {
    +	VsanHostConfigInfoNetworkInfoPortConfig []VsanHostConfigInfoNetworkInfoPortConfig `xml:"VsanHostConfigInfoNetworkInfoPortConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanHostConfigInfoNetworkInfoPortConfig"] = reflect.TypeOf((*ArrayOfVsanHostConfigInfoNetworkInfoPortConfig)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanHostDiskMapInfo struct {
    +	VsanHostDiskMapInfo []VsanHostDiskMapInfo `xml:"VsanHostDiskMapInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanHostDiskMapInfo"] = reflect.TypeOf((*ArrayOfVsanHostDiskMapInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanHostDiskMapResult struct {
    +	VsanHostDiskMapResult []VsanHostDiskMapResult `xml:"VsanHostDiskMapResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanHostDiskMapResult"] = reflect.TypeOf((*ArrayOfVsanHostDiskMapResult)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanHostDiskMapping struct {
    +	VsanHostDiskMapping []VsanHostDiskMapping `xml:"VsanHostDiskMapping,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanHostDiskMapping"] = reflect.TypeOf((*ArrayOfVsanHostDiskMapping)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanHostDiskResult struct {
    +	VsanHostDiskResult []VsanHostDiskResult `xml:"VsanHostDiskResult,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanHostDiskResult"] = reflect.TypeOf((*ArrayOfVsanHostDiskResult)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanHostMembershipInfo struct {
    +	VsanHostMembershipInfo []VsanHostMembershipInfo `xml:"VsanHostMembershipInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanHostMembershipInfo"] = reflect.TypeOf((*ArrayOfVsanHostMembershipInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanHostRuntimeInfoDiskIssue struct {
    +	VsanHostRuntimeInfoDiskIssue []VsanHostRuntimeInfoDiskIssue `xml:"VsanHostRuntimeInfoDiskIssue,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanHostRuntimeInfoDiskIssue"] = reflect.TypeOf((*ArrayOfVsanHostRuntimeInfoDiskIssue)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanNewPolicyBatch struct {
    +	VsanNewPolicyBatch []VsanNewPolicyBatch `xml:"VsanNewPolicyBatch,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanNewPolicyBatch"] = reflect.TypeOf((*ArrayOfVsanNewPolicyBatch)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanPolicyChangeBatch struct {
    +	VsanPolicyChangeBatch []VsanPolicyChangeBatch `xml:"VsanPolicyChangeBatch,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanPolicyChangeBatch"] = reflect.TypeOf((*ArrayOfVsanPolicyChangeBatch)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanPolicySatisfiability struct {
    +	VsanPolicySatisfiability []VsanPolicySatisfiability `xml:"VsanPolicySatisfiability,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanPolicySatisfiability"] = reflect.TypeOf((*ArrayOfVsanPolicySatisfiability)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanUpgradeSystemNetworkPartitionInfo struct {
    +	VsanUpgradeSystemNetworkPartitionInfo []VsanUpgradeSystemNetworkPartitionInfo `xml:"VsanUpgradeSystemNetworkPartitionInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanUpgradeSystemNetworkPartitionInfo"] = reflect.TypeOf((*ArrayOfVsanUpgradeSystemNetworkPartitionInfo)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanUpgradeSystemPreflightCheckIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue []BaseVsanUpgradeSystemPreflightCheckIssue `xml:"VsanUpgradeSystemPreflightCheckIssue,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanUpgradeSystemPreflightCheckIssue"] = reflect.TypeOf((*ArrayOfVsanUpgradeSystemPreflightCheckIssue)(nil)).Elem()
    +}
    +
    +type ArrayOfVsanUpgradeSystemUpgradeHistoryItem struct {
    +	VsanUpgradeSystemUpgradeHistoryItem []BaseVsanUpgradeSystemUpgradeHistoryItem `xml:"VsanUpgradeSystemUpgradeHistoryItem,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayOfVsanUpgradeSystemUpgradeHistoryItem"] = reflect.TypeOf((*ArrayOfVsanUpgradeSystemUpgradeHistoryItem)(nil)).Elem()
    +}
    +
    +type ArrayOfVslmTagEntry struct {
    +	VslmTagEntry []VslmTagEntry `xml:"VslmTagEntry,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfVslmTagEntry"] = reflect.TypeOf((*ArrayOfVslmTagEntry)(nil)).Elem()
    +}
    +
    +type ArrayOfVslmInfrastructureObjectPolicy struct {
    +	VslmInfrastructureObjectPolicy []VslmInfrastructureObjectPolicy `xml:"vslmInfrastructureObjectPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["ArrayOfvslmInfrastructureObjectPolicy"] = reflect.TypeOf((*ArrayOfVslmInfrastructureObjectPolicy)(nil)).Elem()
    +}
    +
    +type ArrayUpdateSpec struct {
    +	DynamicData
    +
    +	Operation ArrayUpdateOperation `xml:"operation"`
    +	RemoveKey AnyType              `xml:"removeKey,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ArrayUpdateSpec"] = reflect.TypeOf((*ArrayUpdateSpec)(nil)).Elem()
    +}
    +
    +type AssignUserToGroup AssignUserToGroupRequestType
    +
    +func init() {
    +	t["AssignUserToGroup"] = reflect.TypeOf((*AssignUserToGroup)(nil)).Elem()
    +}
    +
    +type AssignUserToGroupRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	User  string                 `xml:"user"`
    +	Group string                 `xml:"group"`
    +}
    +
    +func init() {
    +	t["AssignUserToGroupRequestType"] = reflect.TypeOf((*AssignUserToGroupRequestType)(nil)).Elem()
    +}
    +
    +type AssignUserToGroupResponse struct {
    +}
    +
    +type AssociateProfile AssociateProfileRequestType
    +
    +func init() {
    +	t["AssociateProfile"] = reflect.TypeOf((*AssociateProfile)(nil)).Elem()
    +}
    +
    +type AssociateProfileRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Entity []ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["AssociateProfileRequestType"] = reflect.TypeOf((*AssociateProfileRequestType)(nil)).Elem()
    +}
    +
    +type AssociateProfileResponse struct {
    +}
    +
    +type AttachDiskRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	DiskId        ID                     `xml:"diskId"`
    +	Datastore     ManagedObjectReference `xml:"datastore"`
    +	ControllerKey int32                  `xml:"controllerKey,omitempty"`
    +	UnitNumber    *int32                 `xml:"unitNumber"`
    +}
    +
    +func init() {
    +	t["AttachDiskRequestType"] = reflect.TypeOf((*AttachDiskRequestType)(nil)).Elem()
    +}
    +
    +type AttachDisk_Task AttachDiskRequestType
    +
    +func init() {
    +	t["AttachDisk_Task"] = reflect.TypeOf((*AttachDisk_Task)(nil)).Elem()
    +}
    +
    +type AttachDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type AttachScsiLun AttachScsiLunRequestType
    +
    +func init() {
    +	t["AttachScsiLun"] = reflect.TypeOf((*AttachScsiLun)(nil)).Elem()
    +}
    +
    +type AttachScsiLunExRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	LunUuid []string               `xml:"lunUuid"`
    +}
    +
    +func init() {
    +	t["AttachScsiLunExRequestType"] = reflect.TypeOf((*AttachScsiLunExRequestType)(nil)).Elem()
    +}
    +
    +type AttachScsiLunEx_Task AttachScsiLunExRequestType
    +
    +func init() {
    +	t["AttachScsiLunEx_Task"] = reflect.TypeOf((*AttachScsiLunEx_Task)(nil)).Elem()
    +}
    +
    +type AttachScsiLunEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type AttachScsiLunRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	LunUuid string                 `xml:"lunUuid"`
    +}
    +
    +func init() {
    +	t["AttachScsiLunRequestType"] = reflect.TypeOf((*AttachScsiLunRequestType)(nil)).Elem()
    +}
    +
    +type AttachScsiLunResponse struct {
    +}
    +
    +type AttachTagToVStorageObject AttachTagToVStorageObjectRequestType
    +
    +func init() {
    +	t["AttachTagToVStorageObject"] = reflect.TypeOf((*AttachTagToVStorageObject)(nil)).Elem()
    +}
    +
    +type AttachTagToVStorageObjectRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Id       ID                     `xml:"id"`
    +	Category string                 `xml:"category"`
    +	Tag      string                 `xml:"tag"`
    +}
    +
    +func init() {
    +	t["AttachTagToVStorageObjectRequestType"] = reflect.TypeOf((*AttachTagToVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type AttachTagToVStorageObjectResponse struct {
    +}
    +
    +type AttachVmfsExtent AttachVmfsExtentRequestType
    +
    +func init() {
    +	t["AttachVmfsExtent"] = reflect.TypeOf((*AttachVmfsExtent)(nil)).Elem()
    +}
    +
    +type AttachVmfsExtentRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsPath string                 `xml:"vmfsPath"`
    +	Extent   HostScsiDiskPartition  `xml:"extent"`
    +}
    +
    +func init() {
    +	t["AttachVmfsExtentRequestType"] = reflect.TypeOf((*AttachVmfsExtentRequestType)(nil)).Elem()
    +}
    +
    +type AttachVmfsExtentResponse struct {
    +}
    +
    +type AuthMinimumAdminPermission struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["AuthMinimumAdminPermission"] = reflect.TypeOf((*AuthMinimumAdminPermission)(nil)).Elem()
    +}
    +
    +type AuthMinimumAdminPermissionFault AuthMinimumAdminPermission
    +
    +func init() {
    +	t["AuthMinimumAdminPermissionFault"] = reflect.TypeOf((*AuthMinimumAdminPermissionFault)(nil)).Elem()
    +}
    +
    +type AuthenticationProfile struct {
    +	ApplyProfile
    +
    +	ActiveDirectory *ActiveDirectoryProfile `xml:"activeDirectory,omitempty"`
    +}
    +
    +func init() {
    +	t["AuthenticationProfile"] = reflect.TypeOf((*AuthenticationProfile)(nil)).Elem()
    +}
    +
    +type AuthorizationDescription struct {
    +	DynamicData
    +
    +	Privilege      []BaseElementDescription `xml:"privilege,typeattr"`
    +	PrivilegeGroup []BaseElementDescription `xml:"privilegeGroup,typeattr"`
    +}
    +
    +func init() {
    +	t["AuthorizationDescription"] = reflect.TypeOf((*AuthorizationDescription)(nil)).Elem()
    +}
    +
    +type AuthorizationEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["AuthorizationEvent"] = reflect.TypeOf((*AuthorizationEvent)(nil)).Elem()
    +}
    +
    +type AuthorizationPrivilege struct {
    +	DynamicData
    +
    +	PrivId        string `xml:"privId"`
    +	OnParent      bool   `xml:"onParent"`
    +	Name          string `xml:"name"`
    +	PrivGroupName string `xml:"privGroupName"`
    +}
    +
    +func init() {
    +	t["AuthorizationPrivilege"] = reflect.TypeOf((*AuthorizationPrivilege)(nil)).Elem()
    +}
    +
    +type AuthorizationRole struct {
    +	DynamicData
    +
    +	RoleId    int32           `xml:"roleId"`
    +	System    bool            `xml:"system"`
    +	Name      string          `xml:"name"`
    +	Info      BaseDescription `xml:"info,typeattr"`
    +	Privilege []string        `xml:"privilege,omitempty"`
    +}
    +
    +func init() {
    +	t["AuthorizationRole"] = reflect.TypeOf((*AuthorizationRole)(nil)).Elem()
    +}
    +
    +type AutoStartDefaults struct {
    +	DynamicData
    +
    +	Enabled          *bool  `xml:"enabled"`
    +	StartDelay       int32  `xml:"startDelay,omitempty"`
    +	StopDelay        int32  `xml:"stopDelay,omitempty"`
    +	WaitForHeartbeat *bool  `xml:"waitForHeartbeat"`
    +	StopAction       string `xml:"stopAction,omitempty"`
    +}
    +
    +func init() {
    +	t["AutoStartDefaults"] = reflect.TypeOf((*AutoStartDefaults)(nil)).Elem()
    +}
    +
    +type AutoStartPowerInfo struct {
    +	DynamicData
    +
    +	Key              ManagedObjectReference        `xml:"key"`
    +	StartOrder       int32                         `xml:"startOrder"`
    +	StartDelay       int32                         `xml:"startDelay"`
    +	WaitForHeartbeat AutoStartWaitHeartbeatSetting `xml:"waitForHeartbeat"`
    +	StartAction      string                        `xml:"startAction"`
    +	StopDelay        int32                         `xml:"stopDelay"`
    +	StopAction       string                        `xml:"stopAction"`
    +}
    +
    +func init() {
    +	t["AutoStartPowerInfo"] = reflect.TypeOf((*AutoStartPowerInfo)(nil)).Elem()
    +}
    +
    +type AutoStartPowerOff AutoStartPowerOffRequestType
    +
    +func init() {
    +	t["AutoStartPowerOff"] = reflect.TypeOf((*AutoStartPowerOff)(nil)).Elem()
    +}
    +
    +type AutoStartPowerOffRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["AutoStartPowerOffRequestType"] = reflect.TypeOf((*AutoStartPowerOffRequestType)(nil)).Elem()
    +}
    +
    +type AutoStartPowerOffResponse struct {
    +}
    +
    +type AutoStartPowerOn AutoStartPowerOnRequestType
    +
    +func init() {
    +	t["AutoStartPowerOn"] = reflect.TypeOf((*AutoStartPowerOn)(nil)).Elem()
    +}
    +
    +type AutoStartPowerOnRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["AutoStartPowerOnRequestType"] = reflect.TypeOf((*AutoStartPowerOnRequestType)(nil)).Elem()
    +}
    +
    +type AutoStartPowerOnResponse struct {
    +}
    +
    +type BackupBlobReadFailure struct {
    +	DvsFault
    +
    +	EntityName string               `xml:"entityName"`
    +	EntityType string               `xml:"entityType"`
    +	Fault      LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["BackupBlobReadFailure"] = reflect.TypeOf((*BackupBlobReadFailure)(nil)).Elem()
    +}
    +
    +type BackupBlobReadFailureFault BackupBlobReadFailure
    +
    +func init() {
    +	t["BackupBlobReadFailureFault"] = reflect.TypeOf((*BackupBlobReadFailureFault)(nil)).Elem()
    +}
    +
    +type BackupBlobWriteFailure struct {
    +	DvsFault
    +
    +	EntityName string               `xml:"entityName"`
    +	EntityType string               `xml:"entityType"`
    +	Fault      LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["BackupBlobWriteFailure"] = reflect.TypeOf((*BackupBlobWriteFailure)(nil)).Elem()
    +}
    +
    +type BackupBlobWriteFailureFault BackupBlobWriteFailure
    +
    +func init() {
    +	t["BackupBlobWriteFailureFault"] = reflect.TypeOf((*BackupBlobWriteFailureFault)(nil)).Elem()
    +}
    +
    +type BackupFirmwareConfiguration BackupFirmwareConfigurationRequestType
    +
    +func init() {
    +	t["BackupFirmwareConfiguration"] = reflect.TypeOf((*BackupFirmwareConfiguration)(nil)).Elem()
    +}
    +
    +type BackupFirmwareConfigurationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["BackupFirmwareConfigurationRequestType"] = reflect.TypeOf((*BackupFirmwareConfigurationRequestType)(nil)).Elem()
    +}
    +
    +type BackupFirmwareConfigurationResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type BadUsernameSessionEvent struct {
    +	SessionEvent
    +
    +	IpAddress string `xml:"ipAddress"`
    +}
    +
    +func init() {
    +	t["BadUsernameSessionEvent"] = reflect.TypeOf((*BadUsernameSessionEvent)(nil)).Elem()
    +}
    +
    +type BaseConfigInfo struct {
    +	DynamicData
    +
    +	Id                          ID                            `xml:"id"`
    +	Name                        string                        `xml:"name"`
    +	CreateTime                  time.Time                     `xml:"createTime"`
    +	KeepAfterDeleteVm           *bool                         `xml:"keepAfterDeleteVm"`
    +	RelocationDisabled          *bool                         `xml:"relocationDisabled"`
    +	NativeSnapshotSupported     *bool                         `xml:"nativeSnapshotSupported"`
    +	ChangedBlockTrackingEnabled *bool                         `xml:"changedBlockTrackingEnabled"`
    +	Backing                     BaseBaseConfigInfoBackingInfo `xml:"backing,typeattr"`
    +	Iofilter                    []string                      `xml:"iofilter,omitempty"`
    +}
    +
    +func init() {
    +	t["BaseConfigInfo"] = reflect.TypeOf((*BaseConfigInfo)(nil)).Elem()
    +}
    +
    +type BaseConfigInfoBackingInfo struct {
    +	DynamicData
    +
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["BaseConfigInfoBackingInfo"] = reflect.TypeOf((*BaseConfigInfoBackingInfo)(nil)).Elem()
    +}
    +
    +type BaseConfigInfoDiskFileBackingInfo struct {
    +	BaseConfigInfoFileBackingInfo
    +
    +	ProvisioningType string `xml:"provisioningType"`
    +}
    +
    +func init() {
    +	t["BaseConfigInfoDiskFileBackingInfo"] = reflect.TypeOf((*BaseConfigInfoDiskFileBackingInfo)(nil)).Elem()
    +}
    +
    +type BaseConfigInfoFileBackingInfo struct {
    +	BaseConfigInfoBackingInfo
    +
    +	FilePath        string                            `xml:"filePath"`
    +	BackingObjectId string                            `xml:"backingObjectId,omitempty"`
    +	Parent          BaseBaseConfigInfoFileBackingInfo `xml:"parent,omitempty,typeattr"`
    +	DeltaSizeInMB   int64                             `xml:"deltaSizeInMB,omitempty"`
    +}
    +
    +func init() {
    +	t["BaseConfigInfoFileBackingInfo"] = reflect.TypeOf((*BaseConfigInfoFileBackingInfo)(nil)).Elem()
    +}
    +
    +type BaseConfigInfoRawDiskMappingBackingInfo struct {
    +	BaseConfigInfoFileBackingInfo
    +
    +	LunUuid           string `xml:"lunUuid"`
    +	CompatibilityMode string `xml:"compatibilityMode"`
    +}
    +
    +func init() {
    +	t["BaseConfigInfoRawDiskMappingBackingInfo"] = reflect.TypeOf((*BaseConfigInfoRawDiskMappingBackingInfo)(nil)).Elem()
    +}
    +
    +type BatchResult struct {
    +	DynamicData
    +
    +	Result  string                  `xml:"result"`
    +	HostKey string                  `xml:"hostKey"`
    +	Ds      *ManagedObjectReference `xml:"ds,omitempty"`
    +	Fault   *LocalizedMethodFault   `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["BatchResult"] = reflect.TypeOf((*BatchResult)(nil)).Elem()
    +}
    +
    +type BindVnic BindVnicRequestType
    +
    +func init() {
    +	t["BindVnic"] = reflect.TypeOf((*BindVnic)(nil)).Elem()
    +}
    +
    +type BindVnicRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	IScsiHbaName string                 `xml:"iScsiHbaName"`
    +	VnicDevice   string                 `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["BindVnicRequestType"] = reflect.TypeOf((*BindVnicRequestType)(nil)).Elem()
    +}
    +
    +type BindVnicResponse struct {
    +}
    +
    +type BlockedByFirewall struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["BlockedByFirewall"] = reflect.TypeOf((*BlockedByFirewall)(nil)).Elem()
    +}
    +
    +type BlockedByFirewallFault BlockedByFirewall
    +
    +func init() {
    +	t["BlockedByFirewallFault"] = reflect.TypeOf((*BlockedByFirewallFault)(nil)).Elem()
    +}
    +
    +type BoolOption struct {
    +	OptionType
    +
    +	Supported    bool `xml:"supported"`
    +	DefaultValue bool `xml:"defaultValue"`
    +}
    +
    +func init() {
    +	t["BoolOption"] = reflect.TypeOf((*BoolOption)(nil)).Elem()
    +}
    +
    +type BoolPolicy struct {
    +	InheritablePolicy
    +
    +	Value *bool `xml:"value"`
    +}
    +
    +func init() {
    +	t["BoolPolicy"] = reflect.TypeOf((*BoolPolicy)(nil)).Elem()
    +}
    +
    +type BrowseDiagnosticLog BrowseDiagnosticLogRequestType
    +
    +func init() {
    +	t["BrowseDiagnosticLog"] = reflect.TypeOf((*BrowseDiagnosticLog)(nil)).Elem()
    +}
    +
    +type BrowseDiagnosticLogRequestType struct {
    +	This  ManagedObjectReference  `xml:"_this"`
    +	Host  *ManagedObjectReference `xml:"host,omitempty"`
    +	Key   string                  `xml:"key"`
    +	Start int32                   `xml:"start,omitempty"`
    +	Lines int32                   `xml:"lines,omitempty"`
    +}
    +
    +func init() {
    +	t["BrowseDiagnosticLogRequestType"] = reflect.TypeOf((*BrowseDiagnosticLogRequestType)(nil)).Elem()
    +}
    +
    +type BrowseDiagnosticLogResponse struct {
    +	Returnval DiagnosticManagerLogHeader `xml:"returnval"`
    +}
    +
    +type CAMServerRefusedConnection struct {
    +	InvalidCAMServer
    +}
    +
    +func init() {
    +	t["CAMServerRefusedConnection"] = reflect.TypeOf((*CAMServerRefusedConnection)(nil)).Elem()
    +}
    +
    +type CAMServerRefusedConnectionFault CAMServerRefusedConnection
    +
    +func init() {
    +	t["CAMServerRefusedConnectionFault"] = reflect.TypeOf((*CAMServerRefusedConnectionFault)(nil)).Elem()
    +}
    +
    +type CanProvisionObjects CanProvisionObjectsRequestType
    +
    +func init() {
    +	t["CanProvisionObjects"] = reflect.TypeOf((*CanProvisionObjects)(nil)).Elem()
    +}
    +
    +type CanProvisionObjectsRequestType struct {
    +	This                 ManagedObjectReference `xml:"_this"`
    +	Npbs                 []VsanNewPolicyBatch   `xml:"npbs"`
    +	IgnoreSatisfiability *bool                  `xml:"ignoreSatisfiability"`
    +}
    +
    +func init() {
    +	t["CanProvisionObjectsRequestType"] = reflect.TypeOf((*CanProvisionObjectsRequestType)(nil)).Elem()
    +}
    +
    +type CanProvisionObjectsResponse struct {
    +	Returnval []VsanPolicySatisfiability `xml:"returnval"`
    +}
    +
    +type CancelRecommendation CancelRecommendationRequestType
    +
    +func init() {
    +	t["CancelRecommendation"] = reflect.TypeOf((*CancelRecommendation)(nil)).Elem()
    +}
    +
    +type CancelRecommendationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  string                 `xml:"key"`
    +}
    +
    +func init() {
    +	t["CancelRecommendationRequestType"] = reflect.TypeOf((*CancelRecommendationRequestType)(nil)).Elem()
    +}
    +
    +type CancelRecommendationResponse struct {
    +}
    +
    +type CancelRetrievePropertiesEx CancelRetrievePropertiesExRequestType
    +
    +func init() {
    +	t["CancelRetrievePropertiesEx"] = reflect.TypeOf((*CancelRetrievePropertiesEx)(nil)).Elem()
    +}
    +
    +type CancelRetrievePropertiesExRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Token string                 `xml:"token"`
    +}
    +
    +func init() {
    +	t["CancelRetrievePropertiesExRequestType"] = reflect.TypeOf((*CancelRetrievePropertiesExRequestType)(nil)).Elem()
    +}
    +
    +type CancelRetrievePropertiesExResponse struct {
    +}
    +
    +type CancelStorageDrsRecommendation CancelStorageDrsRecommendationRequestType
    +
    +func init() {
    +	t["CancelStorageDrsRecommendation"] = reflect.TypeOf((*CancelStorageDrsRecommendation)(nil)).Elem()
    +}
    +
    +type CancelStorageDrsRecommendationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  []string               `xml:"key"`
    +}
    +
    +func init() {
    +	t["CancelStorageDrsRecommendationRequestType"] = reflect.TypeOf((*CancelStorageDrsRecommendationRequestType)(nil)).Elem()
    +}
    +
    +type CancelStorageDrsRecommendationResponse struct {
    +}
    +
    +type CancelTask CancelTaskRequestType
    +
    +func init() {
    +	t["CancelTask"] = reflect.TypeOf((*CancelTask)(nil)).Elem()
    +}
    +
    +type CancelTaskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["CancelTaskRequestType"] = reflect.TypeOf((*CancelTaskRequestType)(nil)).Elem()
    +}
    +
    +type CancelTaskResponse struct {
    +}
    +
    +type CancelWaitForUpdates CancelWaitForUpdatesRequestType
    +
    +func init() {
    +	t["CancelWaitForUpdates"] = reflect.TypeOf((*CancelWaitForUpdates)(nil)).Elem()
    +}
    +
    +type CancelWaitForUpdatesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["CancelWaitForUpdatesRequestType"] = reflect.TypeOf((*CancelWaitForUpdatesRequestType)(nil)).Elem()
    +}
    +
    +type CancelWaitForUpdatesResponse struct {
    +}
    +
    +type CanceledHostOperationEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["CanceledHostOperationEvent"] = reflect.TypeOf((*CanceledHostOperationEvent)(nil)).Elem()
    +}
    +
    +type CannotAccessFile struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["CannotAccessFile"] = reflect.TypeOf((*CannotAccessFile)(nil)).Elem()
    +}
    +
    +type CannotAccessFileFault CannotAccessFile
    +
    +func init() {
    +	t["CannotAccessFileFault"] = reflect.TypeOf((*CannotAccessFileFault)(nil)).Elem()
    +}
    +
    +type CannotAccessLocalSource struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["CannotAccessLocalSource"] = reflect.TypeOf((*CannotAccessLocalSource)(nil)).Elem()
    +}
    +
    +type CannotAccessLocalSourceFault CannotAccessLocalSource
    +
    +func init() {
    +	t["CannotAccessLocalSourceFault"] = reflect.TypeOf((*CannotAccessLocalSourceFault)(nil)).Elem()
    +}
    +
    +type CannotAccessNetwork struct {
    +	CannotAccessVmDevice
    +
    +	Network *ManagedObjectReference `xml:"network,omitempty"`
    +}
    +
    +func init() {
    +	t["CannotAccessNetwork"] = reflect.TypeOf((*CannotAccessNetwork)(nil)).Elem()
    +}
    +
    +type CannotAccessNetworkFault BaseCannotAccessNetwork
    +
    +func init() {
    +	t["CannotAccessNetworkFault"] = reflect.TypeOf((*CannotAccessNetworkFault)(nil)).Elem()
    +}
    +
    +type CannotAccessVmComponent struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["CannotAccessVmComponent"] = reflect.TypeOf((*CannotAccessVmComponent)(nil)).Elem()
    +}
    +
    +type CannotAccessVmComponentFault BaseCannotAccessVmComponent
    +
    +func init() {
    +	t["CannotAccessVmComponentFault"] = reflect.TypeOf((*CannotAccessVmComponentFault)(nil)).Elem()
    +}
    +
    +type CannotAccessVmConfig struct {
    +	CannotAccessVmComponent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["CannotAccessVmConfig"] = reflect.TypeOf((*CannotAccessVmConfig)(nil)).Elem()
    +}
    +
    +type CannotAccessVmConfigFault CannotAccessVmConfig
    +
    +func init() {
    +	t["CannotAccessVmConfigFault"] = reflect.TypeOf((*CannotAccessVmConfigFault)(nil)).Elem()
    +}
    +
    +type CannotAccessVmDevice struct {
    +	CannotAccessVmComponent
    +
    +	Device    string `xml:"device"`
    +	Backing   string `xml:"backing"`
    +	Connected bool   `xml:"connected"`
    +}
    +
    +func init() {
    +	t["CannotAccessVmDevice"] = reflect.TypeOf((*CannotAccessVmDevice)(nil)).Elem()
    +}
    +
    +type CannotAccessVmDeviceFault BaseCannotAccessVmDevice
    +
    +func init() {
    +	t["CannotAccessVmDeviceFault"] = reflect.TypeOf((*CannotAccessVmDeviceFault)(nil)).Elem()
    +}
    +
    +type CannotAccessVmDisk struct {
    +	CannotAccessVmDevice
    +
    +	Fault LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["CannotAccessVmDisk"] = reflect.TypeOf((*CannotAccessVmDisk)(nil)).Elem()
    +}
    +
    +type CannotAccessVmDiskFault BaseCannotAccessVmDisk
    +
    +func init() {
    +	t["CannotAccessVmDiskFault"] = reflect.TypeOf((*CannotAccessVmDiskFault)(nil)).Elem()
    +}
    +
    +type CannotAddHostWithFTVmAsStandalone struct {
    +	HostConnectFault
    +}
    +
    +func init() {
    +	t["CannotAddHostWithFTVmAsStandalone"] = reflect.TypeOf((*CannotAddHostWithFTVmAsStandalone)(nil)).Elem()
    +}
    +
    +type CannotAddHostWithFTVmAsStandaloneFault CannotAddHostWithFTVmAsStandalone
    +
    +func init() {
    +	t["CannotAddHostWithFTVmAsStandaloneFault"] = reflect.TypeOf((*CannotAddHostWithFTVmAsStandaloneFault)(nil)).Elem()
    +}
    +
    +type CannotAddHostWithFTVmToDifferentCluster struct {
    +	HostConnectFault
    +}
    +
    +func init() {
    +	t["CannotAddHostWithFTVmToDifferentCluster"] = reflect.TypeOf((*CannotAddHostWithFTVmToDifferentCluster)(nil)).Elem()
    +}
    +
    +type CannotAddHostWithFTVmToDifferentClusterFault CannotAddHostWithFTVmToDifferentCluster
    +
    +func init() {
    +	t["CannotAddHostWithFTVmToDifferentClusterFault"] = reflect.TypeOf((*CannotAddHostWithFTVmToDifferentClusterFault)(nil)).Elem()
    +}
    +
    +type CannotAddHostWithFTVmToNonHACluster struct {
    +	HostConnectFault
    +}
    +
    +func init() {
    +	t["CannotAddHostWithFTVmToNonHACluster"] = reflect.TypeOf((*CannotAddHostWithFTVmToNonHACluster)(nil)).Elem()
    +}
    +
    +type CannotAddHostWithFTVmToNonHAClusterFault CannotAddHostWithFTVmToNonHACluster
    +
    +func init() {
    +	t["CannotAddHostWithFTVmToNonHAClusterFault"] = reflect.TypeOf((*CannotAddHostWithFTVmToNonHAClusterFault)(nil)).Elem()
    +}
    +
    +type CannotChangeDrsBehaviorForFtSecondary struct {
    +	VmFaultToleranceIssue
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	VmName string                 `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["CannotChangeDrsBehaviorForFtSecondary"] = reflect.TypeOf((*CannotChangeDrsBehaviorForFtSecondary)(nil)).Elem()
    +}
    +
    +type CannotChangeDrsBehaviorForFtSecondaryFault CannotChangeDrsBehaviorForFtSecondary
    +
    +func init() {
    +	t["CannotChangeDrsBehaviorForFtSecondaryFault"] = reflect.TypeOf((*CannotChangeDrsBehaviorForFtSecondaryFault)(nil)).Elem()
    +}
    +
    +type CannotChangeHaSettingsForFtSecondary struct {
    +	VmFaultToleranceIssue
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	VmName string                 `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["CannotChangeHaSettingsForFtSecondary"] = reflect.TypeOf((*CannotChangeHaSettingsForFtSecondary)(nil)).Elem()
    +}
    +
    +type CannotChangeHaSettingsForFtSecondaryFault CannotChangeHaSettingsForFtSecondary
    +
    +func init() {
    +	t["CannotChangeHaSettingsForFtSecondaryFault"] = reflect.TypeOf((*CannotChangeHaSettingsForFtSecondaryFault)(nil)).Elem()
    +}
    +
    +type CannotChangeVsanClusterUuid struct {
    +	VsanFault
    +}
    +
    +func init() {
    +	t["CannotChangeVsanClusterUuid"] = reflect.TypeOf((*CannotChangeVsanClusterUuid)(nil)).Elem()
    +}
    +
    +type CannotChangeVsanClusterUuidFault CannotChangeVsanClusterUuid
    +
    +func init() {
    +	t["CannotChangeVsanClusterUuidFault"] = reflect.TypeOf((*CannotChangeVsanClusterUuidFault)(nil)).Elem()
    +}
    +
    +type CannotChangeVsanNodeUuid struct {
    +	VsanFault
    +}
    +
    +func init() {
    +	t["CannotChangeVsanNodeUuid"] = reflect.TypeOf((*CannotChangeVsanNodeUuid)(nil)).Elem()
    +}
    +
    +type CannotChangeVsanNodeUuidFault CannotChangeVsanNodeUuid
    +
    +func init() {
    +	t["CannotChangeVsanNodeUuidFault"] = reflect.TypeOf((*CannotChangeVsanNodeUuidFault)(nil)).Elem()
    +}
    +
    +type CannotComputeFTCompatibleHosts struct {
    +	VmFaultToleranceIssue
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	VmName string                 `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["CannotComputeFTCompatibleHosts"] = reflect.TypeOf((*CannotComputeFTCompatibleHosts)(nil)).Elem()
    +}
    +
    +type CannotComputeFTCompatibleHostsFault CannotComputeFTCompatibleHosts
    +
    +func init() {
    +	t["CannotComputeFTCompatibleHostsFault"] = reflect.TypeOf((*CannotComputeFTCompatibleHostsFault)(nil)).Elem()
    +}
    +
    +type CannotCreateFile struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["CannotCreateFile"] = reflect.TypeOf((*CannotCreateFile)(nil)).Elem()
    +}
    +
    +type CannotCreateFileFault CannotCreateFile
    +
    +func init() {
    +	t["CannotCreateFileFault"] = reflect.TypeOf((*CannotCreateFileFault)(nil)).Elem()
    +}
    +
    +type CannotDecryptPasswords struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["CannotDecryptPasswords"] = reflect.TypeOf((*CannotDecryptPasswords)(nil)).Elem()
    +}
    +
    +type CannotDecryptPasswordsFault CannotDecryptPasswords
    +
    +func init() {
    +	t["CannotDecryptPasswordsFault"] = reflect.TypeOf((*CannotDecryptPasswordsFault)(nil)).Elem()
    +}
    +
    +type CannotDeleteFile struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["CannotDeleteFile"] = reflect.TypeOf((*CannotDeleteFile)(nil)).Elem()
    +}
    +
    +type CannotDeleteFileFault CannotDeleteFile
    +
    +func init() {
    +	t["CannotDeleteFileFault"] = reflect.TypeOf((*CannotDeleteFileFault)(nil)).Elem()
    +}
    +
    +type CannotDisableDrsOnClustersWithVApps struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["CannotDisableDrsOnClustersWithVApps"] = reflect.TypeOf((*CannotDisableDrsOnClustersWithVApps)(nil)).Elem()
    +}
    +
    +type CannotDisableDrsOnClustersWithVAppsFault CannotDisableDrsOnClustersWithVApps
    +
    +func init() {
    +	t["CannotDisableDrsOnClustersWithVAppsFault"] = reflect.TypeOf((*CannotDisableDrsOnClustersWithVAppsFault)(nil)).Elem()
    +}
    +
    +type CannotDisableSnapshot struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["CannotDisableSnapshot"] = reflect.TypeOf((*CannotDisableSnapshot)(nil)).Elem()
    +}
    +
    +type CannotDisableSnapshotFault CannotDisableSnapshot
    +
    +func init() {
    +	t["CannotDisableSnapshotFault"] = reflect.TypeOf((*CannotDisableSnapshotFault)(nil)).Elem()
    +}
    +
    +type CannotDisconnectHostWithFaultToleranceVm struct {
    +	VimFault
    +
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["CannotDisconnectHostWithFaultToleranceVm"] = reflect.TypeOf((*CannotDisconnectHostWithFaultToleranceVm)(nil)).Elem()
    +}
    +
    +type CannotDisconnectHostWithFaultToleranceVmFault CannotDisconnectHostWithFaultToleranceVm
    +
    +func init() {
    +	t["CannotDisconnectHostWithFaultToleranceVmFault"] = reflect.TypeOf((*CannotDisconnectHostWithFaultToleranceVmFault)(nil)).Elem()
    +}
    +
    +type CannotEnableVmcpForCluster struct {
    +	VimFault
    +
    +	Host     *ManagedObjectReference `xml:"host,omitempty"`
    +	HostName string                  `xml:"hostName,omitempty"`
    +	Reason   string                  `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["CannotEnableVmcpForCluster"] = reflect.TypeOf((*CannotEnableVmcpForCluster)(nil)).Elem()
    +}
    +
    +type CannotEnableVmcpForClusterFault CannotEnableVmcpForCluster
    +
    +func init() {
    +	t["CannotEnableVmcpForClusterFault"] = reflect.TypeOf((*CannotEnableVmcpForClusterFault)(nil)).Elem()
    +}
    +
    +type CannotModifyConfigCpuRequirements struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["CannotModifyConfigCpuRequirements"] = reflect.TypeOf((*CannotModifyConfigCpuRequirements)(nil)).Elem()
    +}
    +
    +type CannotModifyConfigCpuRequirementsFault CannotModifyConfigCpuRequirements
    +
    +func init() {
    +	t["CannotModifyConfigCpuRequirementsFault"] = reflect.TypeOf((*CannotModifyConfigCpuRequirementsFault)(nil)).Elem()
    +}
    +
    +type CannotMoveFaultToleranceVm struct {
    +	VimFault
    +
    +	MoveType string `xml:"moveType"`
    +	VmName   string `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["CannotMoveFaultToleranceVm"] = reflect.TypeOf((*CannotMoveFaultToleranceVm)(nil)).Elem()
    +}
    +
    +type CannotMoveFaultToleranceVmFault CannotMoveFaultToleranceVm
    +
    +func init() {
    +	t["CannotMoveFaultToleranceVmFault"] = reflect.TypeOf((*CannotMoveFaultToleranceVmFault)(nil)).Elem()
    +}
    +
    +type CannotMoveHostWithFaultToleranceVm struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["CannotMoveHostWithFaultToleranceVm"] = reflect.TypeOf((*CannotMoveHostWithFaultToleranceVm)(nil)).Elem()
    +}
    +
    +type CannotMoveHostWithFaultToleranceVmFault CannotMoveHostWithFaultToleranceVm
    +
    +func init() {
    +	t["CannotMoveHostWithFaultToleranceVmFault"] = reflect.TypeOf((*CannotMoveHostWithFaultToleranceVmFault)(nil)).Elem()
    +}
    +
    +type CannotMoveVmWithDeltaDisk struct {
    +	MigrationFault
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["CannotMoveVmWithDeltaDisk"] = reflect.TypeOf((*CannotMoveVmWithDeltaDisk)(nil)).Elem()
    +}
    +
    +type CannotMoveVmWithDeltaDiskFault CannotMoveVmWithDeltaDisk
    +
    +func init() {
    +	t["CannotMoveVmWithDeltaDiskFault"] = reflect.TypeOf((*CannotMoveVmWithDeltaDiskFault)(nil)).Elem()
    +}
    +
    +type CannotMoveVmWithNativeDeltaDisk struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["CannotMoveVmWithNativeDeltaDisk"] = reflect.TypeOf((*CannotMoveVmWithNativeDeltaDisk)(nil)).Elem()
    +}
    +
    +type CannotMoveVmWithNativeDeltaDiskFault CannotMoveVmWithNativeDeltaDisk
    +
    +func init() {
    +	t["CannotMoveVmWithNativeDeltaDiskFault"] = reflect.TypeOf((*CannotMoveVmWithNativeDeltaDiskFault)(nil)).Elem()
    +}
    +
    +type CannotMoveVsanEnabledHost struct {
    +	VsanFault
    +}
    +
    +func init() {
    +	t["CannotMoveVsanEnabledHost"] = reflect.TypeOf((*CannotMoveVsanEnabledHost)(nil)).Elem()
    +}
    +
    +type CannotMoveVsanEnabledHostFault BaseCannotMoveVsanEnabledHost
    +
    +func init() {
    +	t["CannotMoveVsanEnabledHostFault"] = reflect.TypeOf((*CannotMoveVsanEnabledHostFault)(nil)).Elem()
    +}
    +
    +type CannotPlaceWithoutPrerequisiteMoves struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["CannotPlaceWithoutPrerequisiteMoves"] = reflect.TypeOf((*CannotPlaceWithoutPrerequisiteMoves)(nil)).Elem()
    +}
    +
    +type CannotPlaceWithoutPrerequisiteMovesFault CannotPlaceWithoutPrerequisiteMoves
    +
    +func init() {
    +	t["CannotPlaceWithoutPrerequisiteMovesFault"] = reflect.TypeOf((*CannotPlaceWithoutPrerequisiteMovesFault)(nil)).Elem()
    +}
    +
    +type CannotPowerOffVmInCluster struct {
    +	InvalidState
    +
    +	Operation string                 `xml:"operation"`
    +	Vm        ManagedObjectReference `xml:"vm"`
    +	VmName    string                 `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["CannotPowerOffVmInCluster"] = reflect.TypeOf((*CannotPowerOffVmInCluster)(nil)).Elem()
    +}
    +
    +type CannotPowerOffVmInClusterFault CannotPowerOffVmInCluster
    +
    +func init() {
    +	t["CannotPowerOffVmInClusterFault"] = reflect.TypeOf((*CannotPowerOffVmInClusterFault)(nil)).Elem()
    +}
    +
    +type CannotReconfigureVsanWhenHaEnabled struct {
    +	VsanFault
    +}
    +
    +func init() {
    +	t["CannotReconfigureVsanWhenHaEnabled"] = reflect.TypeOf((*CannotReconfigureVsanWhenHaEnabled)(nil)).Elem()
    +}
    +
    +type CannotReconfigureVsanWhenHaEnabledFault CannotReconfigureVsanWhenHaEnabled
    +
    +func init() {
    +	t["CannotReconfigureVsanWhenHaEnabledFault"] = reflect.TypeOf((*CannotReconfigureVsanWhenHaEnabledFault)(nil)).Elem()
    +}
    +
    +type CannotUseNetwork struct {
    +	VmConfigFault
    +
    +	Device    string                  `xml:"device"`
    +	Backing   string                  `xml:"backing"`
    +	Connected bool                    `xml:"connected"`
    +	Reason    string                  `xml:"reason"`
    +	Network   *ManagedObjectReference `xml:"network,omitempty"`
    +}
    +
    +func init() {
    +	t["CannotUseNetwork"] = reflect.TypeOf((*CannotUseNetwork)(nil)).Elem()
    +}
    +
    +type CannotUseNetworkFault CannotUseNetwork
    +
    +func init() {
    +	t["CannotUseNetworkFault"] = reflect.TypeOf((*CannotUseNetworkFault)(nil)).Elem()
    +}
    +
    +type Capability struct {
    +	DynamicData
    +
    +	ProvisioningSupported            bool      `xml:"provisioningSupported"`
    +	MultiHostSupported               bool      `xml:"multiHostSupported"`
    +	UserShellAccessSupported         bool      `xml:"userShellAccessSupported"`
    +	SupportedEVCMode                 []EVCMode `xml:"supportedEVCMode,omitempty"`
    +	NetworkBackupAndRestoreSupported *bool     `xml:"networkBackupAndRestoreSupported"`
    +	FtDrsWithoutEvcSupported         *bool     `xml:"ftDrsWithoutEvcSupported"`
    +}
    +
    +func init() {
    +	t["Capability"] = reflect.TypeOf((*Capability)(nil)).Elem()
    +}
    +
    +type CertMgrRefreshCACertificatesAndCRLsRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Host []ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["CertMgrRefreshCACertificatesAndCRLsRequestType"] = reflect.TypeOf((*CertMgrRefreshCACertificatesAndCRLsRequestType)(nil)).Elem()
    +}
    +
    +type CertMgrRefreshCACertificatesAndCRLs_Task CertMgrRefreshCACertificatesAndCRLsRequestType
    +
    +func init() {
    +	t["CertMgrRefreshCACertificatesAndCRLs_Task"] = reflect.TypeOf((*CertMgrRefreshCACertificatesAndCRLs_Task)(nil)).Elem()
    +}
    +
    +type CertMgrRefreshCACertificatesAndCRLs_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CertMgrRefreshCertificatesRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Host []ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["CertMgrRefreshCertificatesRequestType"] = reflect.TypeOf((*CertMgrRefreshCertificatesRequestType)(nil)).Elem()
    +}
    +
    +type CertMgrRefreshCertificates_Task CertMgrRefreshCertificatesRequestType
    +
    +func init() {
    +	t["CertMgrRefreshCertificates_Task"] = reflect.TypeOf((*CertMgrRefreshCertificates_Task)(nil)).Elem()
    +}
    +
    +type CertMgrRefreshCertificates_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CertMgrRevokeCertificatesRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Host []ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["CertMgrRevokeCertificatesRequestType"] = reflect.TypeOf((*CertMgrRevokeCertificatesRequestType)(nil)).Elem()
    +}
    +
    +type CertMgrRevokeCertificates_Task CertMgrRevokeCertificatesRequestType
    +
    +func init() {
    +	t["CertMgrRevokeCertificates_Task"] = reflect.TypeOf((*CertMgrRevokeCertificates_Task)(nil)).Elem()
    +}
    +
    +type CertMgrRevokeCertificates_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ChangeAccessMode ChangeAccessModeRequestType
    +
    +func init() {
    +	t["ChangeAccessMode"] = reflect.TypeOf((*ChangeAccessMode)(nil)).Elem()
    +}
    +
    +type ChangeAccessModeRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Principal  string                 `xml:"principal"`
    +	IsGroup    bool                   `xml:"isGroup"`
    +	AccessMode HostAccessMode         `xml:"accessMode"`
    +}
    +
    +func init() {
    +	t["ChangeAccessModeRequestType"] = reflect.TypeOf((*ChangeAccessModeRequestType)(nil)).Elem()
    +}
    +
    +type ChangeAccessModeResponse struct {
    +}
    +
    +type ChangeFileAttributesInGuest ChangeFileAttributesInGuestRequestType
    +
    +func init() {
    +	t["ChangeFileAttributesInGuest"] = reflect.TypeOf((*ChangeFileAttributesInGuest)(nil)).Elem()
    +}
    +
    +type ChangeFileAttributesInGuestRequestType struct {
    +	This           ManagedObjectReference  `xml:"_this"`
    +	Vm             ManagedObjectReference  `xml:"vm"`
    +	Auth           BaseGuestAuthentication `xml:"auth,typeattr"`
    +	GuestFilePath  string                  `xml:"guestFilePath"`
    +	FileAttributes BaseGuestFileAttributes `xml:"fileAttributes,typeattr"`
    +}
    +
    +func init() {
    +	t["ChangeFileAttributesInGuestRequestType"] = reflect.TypeOf((*ChangeFileAttributesInGuestRequestType)(nil)).Elem()
    +}
    +
    +type ChangeFileAttributesInGuestResponse struct {
    +}
    +
    +type ChangeKeyRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	NewKey CryptoKeyPlain         `xml:"newKey"`
    +}
    +
    +func init() {
    +	t["ChangeKeyRequestType"] = reflect.TypeOf((*ChangeKeyRequestType)(nil)).Elem()
    +}
    +
    +type ChangeKey_Task ChangeKeyRequestType
    +
    +func init() {
    +	t["ChangeKey_Task"] = reflect.TypeOf((*ChangeKey_Task)(nil)).Elem()
    +}
    +
    +type ChangeKey_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ChangeLockdownMode ChangeLockdownModeRequestType
    +
    +func init() {
    +	t["ChangeLockdownMode"] = reflect.TypeOf((*ChangeLockdownMode)(nil)).Elem()
    +}
    +
    +type ChangeLockdownModeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Mode HostLockdownMode       `xml:"mode"`
    +}
    +
    +func init() {
    +	t["ChangeLockdownModeRequestType"] = reflect.TypeOf((*ChangeLockdownModeRequestType)(nil)).Elem()
    +}
    +
    +type ChangeLockdownModeResponse struct {
    +}
    +
    +type ChangeNFSUserPassword ChangeNFSUserPasswordRequestType
    +
    +func init() {
    +	t["ChangeNFSUserPassword"] = reflect.TypeOf((*ChangeNFSUserPassword)(nil)).Elem()
    +}
    +
    +type ChangeNFSUserPasswordRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Password string                 `xml:"password"`
    +}
    +
    +func init() {
    +	t["ChangeNFSUserPasswordRequestType"] = reflect.TypeOf((*ChangeNFSUserPasswordRequestType)(nil)).Elem()
    +}
    +
    +type ChangeNFSUserPasswordResponse struct {
    +}
    +
    +type ChangeOwner ChangeOwnerRequestType
    +
    +func init() {
    +	t["ChangeOwner"] = reflect.TypeOf((*ChangeOwner)(nil)).Elem()
    +}
    +
    +type ChangeOwnerRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	Owner      string                  `xml:"owner"`
    +}
    +
    +func init() {
    +	t["ChangeOwnerRequestType"] = reflect.TypeOf((*ChangeOwnerRequestType)(nil)).Elem()
    +}
    +
    +type ChangeOwnerResponse struct {
    +}
    +
    +type ChangesInfoEventArgument struct {
    +	DynamicData
    +
    +	Modified string `xml:"modified,omitempty"`
    +	Added    string `xml:"added,omitempty"`
    +	Deleted  string `xml:"deleted,omitempty"`
    +}
    +
    +func init() {
    +	t["ChangesInfoEventArgument"] = reflect.TypeOf((*ChangesInfoEventArgument)(nil)).Elem()
    +}
    +
    +type CheckAddHostEvcRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	CnxSpec HostConnectSpec        `xml:"cnxSpec"`
    +}
    +
    +func init() {
    +	t["CheckAddHostEvcRequestType"] = reflect.TypeOf((*CheckAddHostEvcRequestType)(nil)).Elem()
    +}
    +
    +type CheckAddHostEvc_Task CheckAddHostEvcRequestType
    +
    +func init() {
    +	t["CheckAddHostEvc_Task"] = reflect.TypeOf((*CheckAddHostEvc_Task)(nil)).Elem()
    +}
    +
    +type CheckAddHostEvc_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckAnswerFileStatusRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Host []ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["CheckAnswerFileStatusRequestType"] = reflect.TypeOf((*CheckAnswerFileStatusRequestType)(nil)).Elem()
    +}
    +
    +type CheckAnswerFileStatus_Task CheckAnswerFileStatusRequestType
    +
    +func init() {
    +	t["CheckAnswerFileStatus_Task"] = reflect.TypeOf((*CheckAnswerFileStatus_Task)(nil)).Elem()
    +}
    +
    +type CheckAnswerFileStatus_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckCloneRequestType struct {
    +	This     ManagedObjectReference  `xml:"_this"`
    +	Vm       ManagedObjectReference  `xml:"vm"`
    +	Folder   ManagedObjectReference  `xml:"folder"`
    +	Name     string                  `xml:"name"`
    +	Spec     VirtualMachineCloneSpec `xml:"spec"`
    +	TestType []string                `xml:"testType,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckCloneRequestType"] = reflect.TypeOf((*CheckCloneRequestType)(nil)).Elem()
    +}
    +
    +type CheckClone_Task CheckCloneRequestType
    +
    +func init() {
    +	t["CheckClone_Task"] = reflect.TypeOf((*CheckClone_Task)(nil)).Elem()
    +}
    +
    +type CheckClone_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckCompatibilityRequestType struct {
    +	This     ManagedObjectReference  `xml:"_this"`
    +	Vm       ManagedObjectReference  `xml:"vm"`
    +	Host     *ManagedObjectReference `xml:"host,omitempty"`
    +	Pool     *ManagedObjectReference `xml:"pool,omitempty"`
    +	TestType []string                `xml:"testType,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckCompatibilityRequestType"] = reflect.TypeOf((*CheckCompatibilityRequestType)(nil)).Elem()
    +}
    +
    +type CheckCompatibility_Task CheckCompatibilityRequestType
    +
    +func init() {
    +	t["CheckCompatibility_Task"] = reflect.TypeOf((*CheckCompatibility_Task)(nil)).Elem()
    +}
    +
    +type CheckCompatibility_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckComplianceRequestType struct {
    +	This    ManagedObjectReference   `xml:"_this"`
    +	Profile []ManagedObjectReference `xml:"profile,omitempty"`
    +	Entity  []ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckComplianceRequestType"] = reflect.TypeOf((*CheckComplianceRequestType)(nil)).Elem()
    +}
    +
    +type CheckCompliance_Task CheckComplianceRequestType
    +
    +func init() {
    +	t["CheckCompliance_Task"] = reflect.TypeOf((*CheckCompliance_Task)(nil)).Elem()
    +}
    +
    +type CheckCompliance_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckConfigureEvcModeRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	EvcModeKey string                 `xml:"evcModeKey"`
    +}
    +
    +func init() {
    +	t["CheckConfigureEvcModeRequestType"] = reflect.TypeOf((*CheckConfigureEvcModeRequestType)(nil)).Elem()
    +}
    +
    +type CheckConfigureEvcMode_Task CheckConfigureEvcModeRequestType
    +
    +func init() {
    +	t["CheckConfigureEvcMode_Task"] = reflect.TypeOf((*CheckConfigureEvcMode_Task)(nil)).Elem()
    +}
    +
    +type CheckConfigureEvcMode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckCustomizationResources CheckCustomizationResourcesRequestType
    +
    +func init() {
    +	t["CheckCustomizationResources"] = reflect.TypeOf((*CheckCustomizationResources)(nil)).Elem()
    +}
    +
    +type CheckCustomizationResourcesRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	GuestOs string                 `xml:"guestOs"`
    +}
    +
    +func init() {
    +	t["CheckCustomizationResourcesRequestType"] = reflect.TypeOf((*CheckCustomizationResourcesRequestType)(nil)).Elem()
    +}
    +
    +type CheckCustomizationResourcesResponse struct {
    +}
    +
    +type CheckCustomizationSpec CheckCustomizationSpecRequestType
    +
    +func init() {
    +	t["CheckCustomizationSpec"] = reflect.TypeOf((*CheckCustomizationSpec)(nil)).Elem()
    +}
    +
    +type CheckCustomizationSpecRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec CustomizationSpec      `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CheckCustomizationSpecRequestType"] = reflect.TypeOf((*CheckCustomizationSpecRequestType)(nil)).Elem()
    +}
    +
    +type CheckCustomizationSpecResponse struct {
    +}
    +
    +type CheckForUpdates CheckForUpdatesRequestType
    +
    +func init() {
    +	t["CheckForUpdates"] = reflect.TypeOf((*CheckForUpdates)(nil)).Elem()
    +}
    +
    +type CheckForUpdatesRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Version string                 `xml:"version,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckForUpdatesRequestType"] = reflect.TypeOf((*CheckForUpdatesRequestType)(nil)).Elem()
    +}
    +
    +type CheckForUpdatesResponse struct {
    +	Returnval *UpdateSet `xml:"returnval,omitempty"`
    +}
    +
    +type CheckHostPatchRequestType struct {
    +	This       ManagedObjectReference                     `xml:"_this"`
    +	MetaUrls   []string                                   `xml:"metaUrls,omitempty"`
    +	BundleUrls []string                                   `xml:"bundleUrls,omitempty"`
    +	Spec       *HostPatchManagerPatchManagerOperationSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckHostPatchRequestType"] = reflect.TypeOf((*CheckHostPatchRequestType)(nil)).Elem()
    +}
    +
    +type CheckHostPatch_Task CheckHostPatchRequestType
    +
    +func init() {
    +	t["CheckHostPatch_Task"] = reflect.TypeOf((*CheckHostPatch_Task)(nil)).Elem()
    +}
    +
    +type CheckHostPatch_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckInstantCloneRequestType struct {
    +	This     ManagedObjectReference         `xml:"_this"`
    +	Vm       ManagedObjectReference         `xml:"vm"`
    +	Spec     VirtualMachineInstantCloneSpec `xml:"spec"`
    +	TestType []string                       `xml:"testType,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckInstantCloneRequestType"] = reflect.TypeOf((*CheckInstantCloneRequestType)(nil)).Elem()
    +}
    +
    +type CheckInstantClone_Task CheckInstantCloneRequestType
    +
    +func init() {
    +	t["CheckInstantClone_Task"] = reflect.TypeOf((*CheckInstantClone_Task)(nil)).Elem()
    +}
    +
    +type CheckInstantClone_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckLicenseFeature CheckLicenseFeatureRequestType
    +
    +func init() {
    +	t["CheckLicenseFeature"] = reflect.TypeOf((*CheckLicenseFeature)(nil)).Elem()
    +}
    +
    +type CheckLicenseFeatureRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Host       *ManagedObjectReference `xml:"host,omitempty"`
    +	FeatureKey string                  `xml:"featureKey"`
    +}
    +
    +func init() {
    +	t["CheckLicenseFeatureRequestType"] = reflect.TypeOf((*CheckLicenseFeatureRequestType)(nil)).Elem()
    +}
    +
    +type CheckLicenseFeatureResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type CheckMigrateRequestType struct {
    +	This     ManagedObjectReference   `xml:"_this"`
    +	Vm       ManagedObjectReference   `xml:"vm"`
    +	Host     *ManagedObjectReference  `xml:"host,omitempty"`
    +	Pool     *ManagedObjectReference  `xml:"pool,omitempty"`
    +	State    VirtualMachinePowerState `xml:"state,omitempty"`
    +	TestType []string                 `xml:"testType,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckMigrateRequestType"] = reflect.TypeOf((*CheckMigrateRequestType)(nil)).Elem()
    +}
    +
    +type CheckMigrate_Task CheckMigrateRequestType
    +
    +func init() {
    +	t["CheckMigrate_Task"] = reflect.TypeOf((*CheckMigrate_Task)(nil)).Elem()
    +}
    +
    +type CheckMigrate_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckPowerOnRequestType struct {
    +	This     ManagedObjectReference  `xml:"_this"`
    +	Vm       ManagedObjectReference  `xml:"vm"`
    +	Host     *ManagedObjectReference `xml:"host,omitempty"`
    +	Pool     *ManagedObjectReference `xml:"pool,omitempty"`
    +	TestType []string                `xml:"testType,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckPowerOnRequestType"] = reflect.TypeOf((*CheckPowerOnRequestType)(nil)).Elem()
    +}
    +
    +type CheckPowerOn_Task CheckPowerOnRequestType
    +
    +func init() {
    +	t["CheckPowerOn_Task"] = reflect.TypeOf((*CheckPowerOn_Task)(nil)).Elem()
    +}
    +
    +type CheckPowerOn_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckProfileComplianceRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Entity []ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckProfileComplianceRequestType"] = reflect.TypeOf((*CheckProfileComplianceRequestType)(nil)).Elem()
    +}
    +
    +type CheckProfileCompliance_Task CheckProfileComplianceRequestType
    +
    +func init() {
    +	t["CheckProfileCompliance_Task"] = reflect.TypeOf((*CheckProfileCompliance_Task)(nil)).Elem()
    +}
    +
    +type CheckProfileCompliance_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckRelocateRequestType struct {
    +	This     ManagedObjectReference     `xml:"_this"`
    +	Vm       ManagedObjectReference     `xml:"vm"`
    +	Spec     VirtualMachineRelocateSpec `xml:"spec"`
    +	TestType []string                   `xml:"testType,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckRelocateRequestType"] = reflect.TypeOf((*CheckRelocateRequestType)(nil)).Elem()
    +}
    +
    +type CheckRelocate_Task CheckRelocateRequestType
    +
    +func init() {
    +	t["CheckRelocate_Task"] = reflect.TypeOf((*CheckRelocate_Task)(nil)).Elem()
    +}
    +
    +type CheckRelocate_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CheckResult struct {
    +	DynamicData
    +
    +	Vm      *ManagedObjectReference `xml:"vm,omitempty"`
    +	Host    *ManagedObjectReference `xml:"host,omitempty"`
    +	Warning []LocalizedMethodFault  `xml:"warning,omitempty"`
    +	Error   []LocalizedMethodFault  `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckResult"] = reflect.TypeOf((*CheckResult)(nil)).Elem()
    +}
    +
    +type CheckVmConfigRequestType struct {
    +	This     ManagedObjectReference   `xml:"_this"`
    +	Spec     VirtualMachineConfigSpec `xml:"spec"`
    +	Vm       *ManagedObjectReference  `xml:"vm,omitempty"`
    +	Host     *ManagedObjectReference  `xml:"host,omitempty"`
    +	Pool     *ManagedObjectReference  `xml:"pool,omitempty"`
    +	TestType []string                 `xml:"testType,omitempty"`
    +}
    +
    +func init() {
    +	t["CheckVmConfigRequestType"] = reflect.TypeOf((*CheckVmConfigRequestType)(nil)).Elem()
    +}
    +
    +type CheckVmConfig_Task CheckVmConfigRequestType
    +
    +func init() {
    +	t["CheckVmConfig_Task"] = reflect.TypeOf((*CheckVmConfig_Task)(nil)).Elem()
    +}
    +
    +type CheckVmConfig_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ChoiceOption struct {
    +	OptionType
    +
    +	ChoiceInfo   []BaseElementDescription `xml:"choiceInfo,typeattr"`
    +	DefaultIndex int32                    `xml:"defaultIndex,omitempty"`
    +}
    +
    +func init() {
    +	t["ChoiceOption"] = reflect.TypeOf((*ChoiceOption)(nil)).Elem()
    +}
    +
    +type ClearComplianceStatus ClearComplianceStatusRequestType
    +
    +func init() {
    +	t["ClearComplianceStatus"] = reflect.TypeOf((*ClearComplianceStatus)(nil)).Elem()
    +}
    +
    +type ClearComplianceStatusRequestType struct {
    +	This    ManagedObjectReference   `xml:"_this"`
    +	Profile []ManagedObjectReference `xml:"profile,omitempty"`
    +	Entity  []ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["ClearComplianceStatusRequestType"] = reflect.TypeOf((*ClearComplianceStatusRequestType)(nil)).Elem()
    +}
    +
    +type ClearComplianceStatusResponse struct {
    +}
    +
    +type ClearNFSUser ClearNFSUserRequestType
    +
    +func init() {
    +	t["ClearNFSUser"] = reflect.TypeOf((*ClearNFSUser)(nil)).Elem()
    +}
    +
    +type ClearNFSUserRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ClearNFSUserRequestType"] = reflect.TypeOf((*ClearNFSUserRequestType)(nil)).Elem()
    +}
    +
    +type ClearNFSUserResponse struct {
    +}
    +
    +type ClearSystemEventLog ClearSystemEventLogRequestType
    +
    +func init() {
    +	t["ClearSystemEventLog"] = reflect.TypeOf((*ClearSystemEventLog)(nil)).Elem()
    +}
    +
    +type ClearSystemEventLogRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ClearSystemEventLogRequestType"] = reflect.TypeOf((*ClearSystemEventLogRequestType)(nil)).Elem()
    +}
    +
    +type ClearSystemEventLogResponse struct {
    +}
    +
    +type ClearTriggeredAlarms ClearTriggeredAlarmsRequestType
    +
    +func init() {
    +	t["ClearTriggeredAlarms"] = reflect.TypeOf((*ClearTriggeredAlarms)(nil)).Elem()
    +}
    +
    +type ClearTriggeredAlarmsRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Filter AlarmFilterSpec        `xml:"filter"`
    +}
    +
    +func init() {
    +	t["ClearTriggeredAlarmsRequestType"] = reflect.TypeOf((*ClearTriggeredAlarmsRequestType)(nil)).Elem()
    +}
    +
    +type ClearTriggeredAlarmsResponse struct {
    +}
    +
    +type ClearVStorageObjectControlFlags ClearVStorageObjectControlFlagsRequestType
    +
    +func init() {
    +	t["ClearVStorageObjectControlFlags"] = reflect.TypeOf((*ClearVStorageObjectControlFlags)(nil)).Elem()
    +}
    +
    +type ClearVStorageObjectControlFlagsRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Id           ID                     `xml:"id"`
    +	Datastore    ManagedObjectReference `xml:"datastore"`
    +	ControlFlags []string               `xml:"controlFlags,omitempty"`
    +}
    +
    +func init() {
    +	t["ClearVStorageObjectControlFlagsRequestType"] = reflect.TypeOf((*ClearVStorageObjectControlFlagsRequestType)(nil)).Elem()
    +}
    +
    +type ClearVStorageObjectControlFlagsResponse struct {
    +}
    +
    +type ClockSkew struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["ClockSkew"] = reflect.TypeOf((*ClockSkew)(nil)).Elem()
    +}
    +
    +type ClockSkewFault ClockSkew
    +
    +func init() {
    +	t["ClockSkewFault"] = reflect.TypeOf((*ClockSkewFault)(nil)).Elem()
    +}
    +
    +type CloneFromSnapshotNotSupported struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["CloneFromSnapshotNotSupported"] = reflect.TypeOf((*CloneFromSnapshotNotSupported)(nil)).Elem()
    +}
    +
    +type CloneFromSnapshotNotSupportedFault CloneFromSnapshotNotSupported
    +
    +func init() {
    +	t["CloneFromSnapshotNotSupportedFault"] = reflect.TypeOf((*CloneFromSnapshotNotSupportedFault)(nil)).Elem()
    +}
    +
    +type CloneSession CloneSessionRequestType
    +
    +func init() {
    +	t["CloneSession"] = reflect.TypeOf((*CloneSession)(nil)).Elem()
    +}
    +
    +type CloneSessionRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	CloneTicket string                 `xml:"cloneTicket"`
    +}
    +
    +func init() {
    +	t["CloneSessionRequestType"] = reflect.TypeOf((*CloneSessionRequestType)(nil)).Elem()
    +}
    +
    +type CloneSessionResponse struct {
    +	Returnval UserSession `xml:"returnval"`
    +}
    +
    +type CloneVAppRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Name   string                 `xml:"name"`
    +	Target ManagedObjectReference `xml:"target"`
    +	Spec   VAppCloneSpec          `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CloneVAppRequestType"] = reflect.TypeOf((*CloneVAppRequestType)(nil)).Elem()
    +}
    +
    +type CloneVApp_Task CloneVAppRequestType
    +
    +func init() {
    +	t["CloneVApp_Task"] = reflect.TypeOf((*CloneVApp_Task)(nil)).Elem()
    +}
    +
    +type CloneVApp_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CloneVMRequestType struct {
    +	This   ManagedObjectReference  `xml:"_this"`
    +	Folder ManagedObjectReference  `xml:"folder"`
    +	Name   string                  `xml:"name"`
    +	Spec   VirtualMachineCloneSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CloneVMRequestType"] = reflect.TypeOf((*CloneVMRequestType)(nil)).Elem()
    +}
    +
    +type CloneVM_Task CloneVMRequestType
    +
    +func init() {
    +	t["CloneVM_Task"] = reflect.TypeOf((*CloneVM_Task)(nil)).Elem()
    +}
    +
    +type CloneVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CloneVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	Spec      VslmCloneSpec          `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CloneVStorageObjectRequestType"] = reflect.TypeOf((*CloneVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type CloneVStorageObject_Task CloneVStorageObjectRequestType
    +
    +func init() {
    +	t["CloneVStorageObject_Task"] = reflect.TypeOf((*CloneVStorageObject_Task)(nil)).Elem()
    +}
    +
    +type CloneVStorageObject_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CloseInventoryViewFolder CloseInventoryViewFolderRequestType
    +
    +func init() {
    +	t["CloseInventoryViewFolder"] = reflect.TypeOf((*CloseInventoryViewFolder)(nil)).Elem()
    +}
    +
    +type CloseInventoryViewFolderRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Entity []ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["CloseInventoryViewFolderRequestType"] = reflect.TypeOf((*CloseInventoryViewFolderRequestType)(nil)).Elem()
    +}
    +
    +type CloseInventoryViewFolderResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type ClusterAction struct {
    +	DynamicData
    +
    +	Type   string                  `xml:"type"`
    +	Target *ManagedObjectReference `xml:"target,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterAction"] = reflect.TypeOf((*ClusterAction)(nil)).Elem()
    +}
    +
    +type ClusterActionHistory struct {
    +	DynamicData
    +
    +	Action BaseClusterAction `xml:"action,typeattr"`
    +	Time   time.Time         `xml:"time"`
    +}
    +
    +func init() {
    +	t["ClusterActionHistory"] = reflect.TypeOf((*ClusterActionHistory)(nil)).Elem()
    +}
    +
    +type ClusterAffinityRuleSpec struct {
    +	ClusterRuleInfo
    +
    +	Vm []ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["ClusterAffinityRuleSpec"] = reflect.TypeOf((*ClusterAffinityRuleSpec)(nil)).Elem()
    +}
    +
    +type ClusterAntiAffinityRuleSpec struct {
    +	ClusterRuleInfo
    +
    +	Vm []ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["ClusterAntiAffinityRuleSpec"] = reflect.TypeOf((*ClusterAntiAffinityRuleSpec)(nil)).Elem()
    +}
    +
    +type ClusterAttemptedVmInfo struct {
    +	DynamicData
    +
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Task *ManagedObjectReference `xml:"task,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterAttemptedVmInfo"] = reflect.TypeOf((*ClusterAttemptedVmInfo)(nil)).Elem()
    +}
    +
    +type ClusterComplianceCheckedEvent struct {
    +	ClusterEvent
    +
    +	Profile ProfileEventArgument `xml:"profile"`
    +}
    +
    +func init() {
    +	t["ClusterComplianceCheckedEvent"] = reflect.TypeOf((*ClusterComplianceCheckedEvent)(nil)).Elem()
    +}
    +
    +type ClusterComputeResourceSummary struct {
    +	ComputeResourceSummary
    +
    +	CurrentFailoverLevel int32                              `xml:"currentFailoverLevel"`
    +	AdmissionControlInfo BaseClusterDasAdmissionControlInfo `xml:"admissionControlInfo,omitempty,typeattr"`
    +	NumVmotions          int32                              `xml:"numVmotions"`
    +	TargetBalance        int32                              `xml:"targetBalance,omitempty"`
    +	CurrentBalance       int32                              `xml:"currentBalance,omitempty"`
    +	UsageSummary         *ClusterUsageSummary               `xml:"usageSummary,omitempty"`
    +	CurrentEVCModeKey    string                             `xml:"currentEVCModeKey,omitempty"`
    +	DasData              BaseClusterDasData                 `xml:"dasData,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterComputeResourceSummary"] = reflect.TypeOf((*ClusterComputeResourceSummary)(nil)).Elem()
    +}
    +
    +type ClusterConfigInfo struct {
    +	DynamicData
    +
    +	DasConfig   ClusterDasConfigInfo     `xml:"dasConfig"`
    +	DasVmConfig []ClusterDasVmConfigInfo `xml:"dasVmConfig,omitempty"`
    +	DrsConfig   ClusterDrsConfigInfo     `xml:"drsConfig"`
    +	DrsVmConfig []ClusterDrsVmConfigInfo `xml:"drsVmConfig,omitempty"`
    +	Rule        []BaseClusterRuleInfo    `xml:"rule,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterConfigInfo"] = reflect.TypeOf((*ClusterConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterConfigInfoEx struct {
    +	ComputeResourceConfigInfo
    +
    +	DasConfig           ClusterDasConfigInfo            `xml:"dasConfig"`
    +	DasVmConfig         []ClusterDasVmConfigInfo        `xml:"dasVmConfig,omitempty"`
    +	DrsConfig           ClusterDrsConfigInfo            `xml:"drsConfig"`
    +	DrsVmConfig         []ClusterDrsVmConfigInfo        `xml:"drsVmConfig,omitempty"`
    +	Rule                []BaseClusterRuleInfo           `xml:"rule,omitempty,typeattr"`
    +	Orchestration       *ClusterOrchestrationInfo       `xml:"orchestration,omitempty"`
    +	VmOrchestration     []ClusterVmOrchestrationInfo    `xml:"vmOrchestration,omitempty"`
    +	DpmConfigInfo       *ClusterDpmConfigInfo           `xml:"dpmConfigInfo,omitempty"`
    +	DpmHostConfig       []ClusterDpmHostConfigInfo      `xml:"dpmHostConfig,omitempty"`
    +	VsanConfigInfo      *VsanClusterConfigInfo          `xml:"vsanConfigInfo,omitempty"`
    +	VsanHostConfig      []VsanHostConfigInfo            `xml:"vsanHostConfig,omitempty"`
    +	Group               []BaseClusterGroupInfo          `xml:"group,omitempty,typeattr"`
    +	InfraUpdateHaConfig *ClusterInfraUpdateHaConfigInfo `xml:"infraUpdateHaConfig,omitempty"`
    +	ProactiveDrsConfig  *ClusterProactiveDrsConfigInfo  `xml:"proactiveDrsConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterConfigInfoEx"] = reflect.TypeOf((*ClusterConfigInfoEx)(nil)).Elem()
    +}
    +
    +type ClusterConfigSpec struct {
    +	DynamicData
    +
    +	DasConfig       *ClusterDasConfigInfo    `xml:"dasConfig,omitempty"`
    +	DasVmConfigSpec []ClusterDasVmConfigSpec `xml:"dasVmConfigSpec,omitempty"`
    +	DrsConfig       *ClusterDrsConfigInfo    `xml:"drsConfig,omitempty"`
    +	DrsVmConfigSpec []ClusterDrsVmConfigSpec `xml:"drsVmConfigSpec,omitempty"`
    +	RulesSpec       []ClusterRuleSpec        `xml:"rulesSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterConfigSpec"] = reflect.TypeOf((*ClusterConfigSpec)(nil)).Elem()
    +}
    +
    +type ClusterConfigSpecEx struct {
    +	ComputeResourceConfigSpec
    +
    +	DasConfig           *ClusterDasConfigInfo           `xml:"dasConfig,omitempty"`
    +	DasVmConfigSpec     []ClusterDasVmConfigSpec        `xml:"dasVmConfigSpec,omitempty"`
    +	DrsConfig           *ClusterDrsConfigInfo           `xml:"drsConfig,omitempty"`
    +	DrsVmConfigSpec     []ClusterDrsVmConfigSpec        `xml:"drsVmConfigSpec,omitempty"`
    +	RulesSpec           []ClusterRuleSpec               `xml:"rulesSpec,omitempty"`
    +	Orchestration       *ClusterOrchestrationInfo       `xml:"orchestration,omitempty"`
    +	VmOrchestrationSpec []ClusterVmOrchestrationSpec    `xml:"vmOrchestrationSpec,omitempty"`
    +	DpmConfig           *ClusterDpmConfigInfo           `xml:"dpmConfig,omitempty"`
    +	DpmHostConfigSpec   []ClusterDpmHostConfigSpec      `xml:"dpmHostConfigSpec,omitempty"`
    +	VsanConfig          *VsanClusterConfigInfo          `xml:"vsanConfig,omitempty"`
    +	VsanHostConfigSpec  []VsanHostConfigInfo            `xml:"vsanHostConfigSpec,omitempty"`
    +	GroupSpec           []ClusterGroupSpec              `xml:"groupSpec,omitempty"`
    +	InfraUpdateHaConfig *ClusterInfraUpdateHaConfigInfo `xml:"infraUpdateHaConfig,omitempty"`
    +	ProactiveDrsConfig  *ClusterProactiveDrsConfigInfo  `xml:"proactiveDrsConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterConfigSpecEx"] = reflect.TypeOf((*ClusterConfigSpecEx)(nil)).Elem()
    +}
    +
    +type ClusterCreatedEvent struct {
    +	ClusterEvent
    +
    +	Parent FolderEventArgument `xml:"parent"`
    +}
    +
    +func init() {
    +	t["ClusterCreatedEvent"] = reflect.TypeOf((*ClusterCreatedEvent)(nil)).Elem()
    +}
    +
    +type ClusterDasAamHostInfo struct {
    +	ClusterDasHostInfo
    +
    +	HostDasState []ClusterDasAamNodeState `xml:"hostDasState,omitempty"`
    +	PrimaryHosts []string                 `xml:"primaryHosts,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasAamHostInfo"] = reflect.TypeOf((*ClusterDasAamHostInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasAamNodeState struct {
    +	DynamicData
    +
    +	Host         ManagedObjectReference `xml:"host"`
    +	Name         string                 `xml:"name"`
    +	ConfigState  string                 `xml:"configState"`
    +	RuntimeState string                 `xml:"runtimeState"`
    +}
    +
    +func init() {
    +	t["ClusterDasAamNodeState"] = reflect.TypeOf((*ClusterDasAamNodeState)(nil)).Elem()
    +}
    +
    +type ClusterDasAdmissionControlInfo struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["ClusterDasAdmissionControlInfo"] = reflect.TypeOf((*ClusterDasAdmissionControlInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasAdmissionControlPolicy struct {
    +	DynamicData
    +
    +	ResourceReductionToToleratePercent int32 `xml:"resourceReductionToToleratePercent,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasAdmissionControlPolicy"] = reflect.TypeOf((*ClusterDasAdmissionControlPolicy)(nil)).Elem()
    +}
    +
    +type ClusterDasAdvancedRuntimeInfo struct {
    +	DynamicData
    +
    +	DasHostInfo            BaseClusterDasHostInfo                           `xml:"dasHostInfo,omitempty,typeattr"`
    +	VmcpSupported          *ClusterDasAdvancedRuntimeInfoVmcpCapabilityInfo `xml:"vmcpSupported,omitempty"`
    +	HeartbeatDatastoreInfo []DasHeartbeatDatastoreInfo                      `xml:"heartbeatDatastoreInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasAdvancedRuntimeInfo"] = reflect.TypeOf((*ClusterDasAdvancedRuntimeInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasAdvancedRuntimeInfoVmcpCapabilityInfo struct {
    +	DynamicData
    +
    +	StorageAPDSupported bool `xml:"storageAPDSupported"`
    +	StoragePDLSupported bool `xml:"storagePDLSupported"`
    +}
    +
    +func init() {
    +	t["ClusterDasAdvancedRuntimeInfoVmcpCapabilityInfo"] = reflect.TypeOf((*ClusterDasAdvancedRuntimeInfoVmcpCapabilityInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasConfigInfo struct {
    +	DynamicData
    +
    +	Enabled                    *bool                                `xml:"enabled"`
    +	VmMonitoring               string                               `xml:"vmMonitoring,omitempty"`
    +	HostMonitoring             string                               `xml:"hostMonitoring,omitempty"`
    +	VmComponentProtecting      string                               `xml:"vmComponentProtecting,omitempty"`
    +	FailoverLevel              int32                                `xml:"failoverLevel,omitempty"`
    +	AdmissionControlPolicy     BaseClusterDasAdmissionControlPolicy `xml:"admissionControlPolicy,omitempty,typeattr"`
    +	AdmissionControlEnabled    *bool                                `xml:"admissionControlEnabled"`
    +	DefaultVmSettings          *ClusterDasVmSettings                `xml:"defaultVmSettings,omitempty"`
    +	Option                     []BaseOptionValue                    `xml:"option,omitempty,typeattr"`
    +	HeartbeatDatastore         []ManagedObjectReference             `xml:"heartbeatDatastore,omitempty"`
    +	HBDatastoreCandidatePolicy string                               `xml:"hBDatastoreCandidatePolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasConfigInfo"] = reflect.TypeOf((*ClusterDasConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasData struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["ClusterDasData"] = reflect.TypeOf((*ClusterDasData)(nil)).Elem()
    +}
    +
    +type ClusterDasDataSummary struct {
    +	ClusterDasData
    +
    +	HostListVersion      int64 `xml:"hostListVersion"`
    +	ClusterConfigVersion int64 `xml:"clusterConfigVersion"`
    +	CompatListVersion    int64 `xml:"compatListVersion"`
    +}
    +
    +func init() {
    +	t["ClusterDasDataSummary"] = reflect.TypeOf((*ClusterDasDataSummary)(nil)).Elem()
    +}
    +
    +type ClusterDasFailoverLevelAdvancedRuntimeInfo struct {
    +	ClusterDasAdvancedRuntimeInfo
    +
    +	SlotInfo                  ClusterDasFailoverLevelAdvancedRuntimeInfoSlotInfo    `xml:"slotInfo"`
    +	TotalSlots                int32                                                 `xml:"totalSlots"`
    +	UsedSlots                 int32                                                 `xml:"usedSlots"`
    +	UnreservedSlots           int32                                                 `xml:"unreservedSlots"`
    +	TotalVms                  int32                                                 `xml:"totalVms"`
    +	TotalHosts                int32                                                 `xml:"totalHosts"`
    +	TotalGoodHosts            int32                                                 `xml:"totalGoodHosts"`
    +	HostSlots                 []ClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots `xml:"hostSlots,omitempty"`
    +	VmsRequiringMultipleSlots []ClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots   `xml:"vmsRequiringMultipleSlots,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasFailoverLevelAdvancedRuntimeInfo"] = reflect.TypeOf((*ClusterDasFailoverLevelAdvancedRuntimeInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots struct {
    +	DynamicData
    +
    +	Host  ManagedObjectReference `xml:"host"`
    +	Slots int32                  `xml:"slots"`
    +}
    +
    +func init() {
    +	t["ClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots"] = reflect.TypeOf((*ClusterDasFailoverLevelAdvancedRuntimeInfoHostSlots)(nil)).Elem()
    +}
    +
    +type ClusterDasFailoverLevelAdvancedRuntimeInfoSlotInfo struct {
    +	DynamicData
    +
    +	NumVcpus int32 `xml:"numVcpus"`
    +	CpuMHz   int32 `xml:"cpuMHz"`
    +	MemoryMB int32 `xml:"memoryMB"`
    +}
    +
    +func init() {
    +	t["ClusterDasFailoverLevelAdvancedRuntimeInfoSlotInfo"] = reflect.TypeOf((*ClusterDasFailoverLevelAdvancedRuntimeInfoSlotInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots struct {
    +	DynamicData
    +
    +	Vm    ManagedObjectReference `xml:"vm"`
    +	Slots int32                  `xml:"slots"`
    +}
    +
    +func init() {
    +	t["ClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots"] = reflect.TypeOf((*ClusterDasFailoverLevelAdvancedRuntimeInfoVmSlots)(nil)).Elem()
    +}
    +
    +type ClusterDasFdmHostState struct {
    +	DynamicData
    +
    +	State         string                  `xml:"state"`
    +	StateReporter *ManagedObjectReference `xml:"stateReporter,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasFdmHostState"] = reflect.TypeOf((*ClusterDasFdmHostState)(nil)).Elem()
    +}
    +
    +type ClusterDasHostInfo struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["ClusterDasHostInfo"] = reflect.TypeOf((*ClusterDasHostInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasHostRecommendation struct {
    +	DynamicData
    +
    +	Host      ManagedObjectReference `xml:"host"`
    +	DrsRating int32                  `xml:"drsRating,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasHostRecommendation"] = reflect.TypeOf((*ClusterDasHostRecommendation)(nil)).Elem()
    +}
    +
    +type ClusterDasVmConfigInfo struct {
    +	DynamicData
    +
    +	Key                 ManagedObjectReference `xml:"key"`
    +	RestartPriority     DasVmPriority          `xml:"restartPriority,omitempty"`
    +	PowerOffOnIsolation *bool                  `xml:"powerOffOnIsolation"`
    +	DasSettings         *ClusterDasVmSettings  `xml:"dasSettings,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasVmConfigInfo"] = reflect.TypeOf((*ClusterDasVmConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterDasVmConfigSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *ClusterDasVmConfigInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasVmConfigSpec"] = reflect.TypeOf((*ClusterDasVmConfigSpec)(nil)).Elem()
    +}
    +
    +type ClusterDasVmSettings struct {
    +	DynamicData
    +
    +	RestartPriority               string                                `xml:"restartPriority,omitempty"`
    +	RestartPriorityTimeout        int32                                 `xml:"restartPriorityTimeout,omitempty"`
    +	IsolationResponse             string                                `xml:"isolationResponse,omitempty"`
    +	VmToolsMonitoringSettings     *ClusterVmToolsMonitoringSettings     `xml:"vmToolsMonitoringSettings,omitempty"`
    +	VmComponentProtectionSettings *ClusterVmComponentProtectionSettings `xml:"vmComponentProtectionSettings,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDasVmSettings"] = reflect.TypeOf((*ClusterDasVmSettings)(nil)).Elem()
    +}
    +
    +type ClusterDependencyRuleInfo struct {
    +	ClusterRuleInfo
    +
    +	VmGroup          string `xml:"vmGroup"`
    +	DependsOnVmGroup string `xml:"dependsOnVmGroup"`
    +}
    +
    +func init() {
    +	t["ClusterDependencyRuleInfo"] = reflect.TypeOf((*ClusterDependencyRuleInfo)(nil)).Elem()
    +}
    +
    +type ClusterDestroyedEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["ClusterDestroyedEvent"] = reflect.TypeOf((*ClusterDestroyedEvent)(nil)).Elem()
    +}
    +
    +type ClusterDpmConfigInfo struct {
    +	DynamicData
    +
    +	Enabled             *bool             `xml:"enabled"`
    +	DefaultDpmBehavior  DpmBehavior       `xml:"defaultDpmBehavior,omitempty"`
    +	HostPowerActionRate int32             `xml:"hostPowerActionRate,omitempty"`
    +	Option              []BaseOptionValue `xml:"option,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterDpmConfigInfo"] = reflect.TypeOf((*ClusterDpmConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterDpmHostConfigInfo struct {
    +	DynamicData
    +
    +	Key      ManagedObjectReference `xml:"key"`
    +	Enabled  *bool                  `xml:"enabled"`
    +	Behavior DpmBehavior            `xml:"behavior,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDpmHostConfigInfo"] = reflect.TypeOf((*ClusterDpmHostConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterDpmHostConfigSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *ClusterDpmHostConfigInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDpmHostConfigSpec"] = reflect.TypeOf((*ClusterDpmHostConfigSpec)(nil)).Elem()
    +}
    +
    +type ClusterDrsConfigInfo struct {
    +	DynamicData
    +
    +	Enabled                   *bool             `xml:"enabled"`
    +	EnableVmBehaviorOverrides *bool             `xml:"enableVmBehaviorOverrides"`
    +	DefaultVmBehavior         DrsBehavior       `xml:"defaultVmBehavior,omitempty"`
    +	VmotionRate               int32             `xml:"vmotionRate,omitempty"`
    +	Option                    []BaseOptionValue `xml:"option,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterDrsConfigInfo"] = reflect.TypeOf((*ClusterDrsConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterDrsFaults struct {
    +	DynamicData
    +
    +	Reason     string                           `xml:"reason"`
    +	FaultsByVm []BaseClusterDrsFaultsFaultsByVm `xml:"faultsByVm,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterDrsFaults"] = reflect.TypeOf((*ClusterDrsFaults)(nil)).Elem()
    +}
    +
    +type ClusterDrsFaultsFaultsByVirtualDisk struct {
    +	ClusterDrsFaultsFaultsByVm
    +
    +	Disk *VirtualDiskId `xml:"disk,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDrsFaultsFaultsByVirtualDisk"] = reflect.TypeOf((*ClusterDrsFaultsFaultsByVirtualDisk)(nil)).Elem()
    +}
    +
    +type ClusterDrsFaultsFaultsByVm struct {
    +	DynamicData
    +
    +	Vm    *ManagedObjectReference `xml:"vm,omitempty"`
    +	Fault []LocalizedMethodFault  `xml:"fault"`
    +}
    +
    +func init() {
    +	t["ClusterDrsFaultsFaultsByVm"] = reflect.TypeOf((*ClusterDrsFaultsFaultsByVm)(nil)).Elem()
    +}
    +
    +type ClusterDrsMigration struct {
    +	DynamicData
    +
    +	Key                   string                 `xml:"key"`
    +	Time                  time.Time              `xml:"time"`
    +	Vm                    ManagedObjectReference `xml:"vm"`
    +	CpuLoad               int32                  `xml:"cpuLoad,omitempty"`
    +	MemoryLoad            int64                  `xml:"memoryLoad,omitempty"`
    +	Source                ManagedObjectReference `xml:"source"`
    +	SourceCpuLoad         int32                  `xml:"sourceCpuLoad,omitempty"`
    +	SourceMemoryLoad      int64                  `xml:"sourceMemoryLoad,omitempty"`
    +	Destination           ManagedObjectReference `xml:"destination"`
    +	DestinationCpuLoad    int32                  `xml:"destinationCpuLoad,omitempty"`
    +	DestinationMemoryLoad int64                  `xml:"destinationMemoryLoad,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDrsMigration"] = reflect.TypeOf((*ClusterDrsMigration)(nil)).Elem()
    +}
    +
    +type ClusterDrsRecommendation struct {
    +	DynamicData
    +
    +	Key           string                `xml:"key"`
    +	Rating        int32                 `xml:"rating"`
    +	Reason        string                `xml:"reason"`
    +	ReasonText    string                `xml:"reasonText"`
    +	MigrationList []ClusterDrsMigration `xml:"migrationList"`
    +}
    +
    +func init() {
    +	t["ClusterDrsRecommendation"] = reflect.TypeOf((*ClusterDrsRecommendation)(nil)).Elem()
    +}
    +
    +type ClusterDrsVmConfigInfo struct {
    +	DynamicData
    +
    +	Key      ManagedObjectReference `xml:"key"`
    +	Enabled  *bool                  `xml:"enabled"`
    +	Behavior DrsBehavior            `xml:"behavior,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDrsVmConfigInfo"] = reflect.TypeOf((*ClusterDrsVmConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterDrsVmConfigSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *ClusterDrsVmConfigInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterDrsVmConfigSpec"] = reflect.TypeOf((*ClusterDrsVmConfigSpec)(nil)).Elem()
    +}
    +
    +type ClusterEVCManagerCheckResult struct {
    +	DynamicData
    +
    +	EvcModeKey string                   `xml:"evcModeKey"`
    +	Error      LocalizedMethodFault     `xml:"error"`
    +	Host       []ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterEVCManagerCheckResult"] = reflect.TypeOf((*ClusterEVCManagerCheckResult)(nil)).Elem()
    +}
    +
    +type ClusterEVCManagerEVCState struct {
    +	DynamicData
    +
    +	SupportedEVCMode      []EVCMode                          `xml:"supportedEVCMode"`
    +	CurrentEVCModeKey     string                             `xml:"currentEVCModeKey,omitempty"`
    +	GuaranteedCPUFeatures []HostCpuIdInfo                    `xml:"guaranteedCPUFeatures,omitempty"`
    +	FeatureCapability     []HostFeatureCapability            `xml:"featureCapability,omitempty"`
    +	FeatureMask           []HostFeatureMask                  `xml:"featureMask,omitempty"`
    +	FeatureRequirement    []VirtualMachineFeatureRequirement `xml:"featureRequirement,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterEVCManagerEVCState"] = reflect.TypeOf((*ClusterEVCManagerEVCState)(nil)).Elem()
    +}
    +
    +type ClusterEnterMaintenanceMode ClusterEnterMaintenanceModeRequestType
    +
    +func init() {
    +	t["ClusterEnterMaintenanceMode"] = reflect.TypeOf((*ClusterEnterMaintenanceMode)(nil)).Elem()
    +}
    +
    +type ClusterEnterMaintenanceModeRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Host   []ManagedObjectReference `xml:"host"`
    +	Option []BaseOptionValue        `xml:"option,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterEnterMaintenanceModeRequestType"] = reflect.TypeOf((*ClusterEnterMaintenanceModeRequestType)(nil)).Elem()
    +}
    +
    +type ClusterEnterMaintenanceModeResponse struct {
    +	Returnval ClusterEnterMaintenanceResult `xml:"returnval"`
    +}
    +
    +type ClusterEnterMaintenanceResult struct {
    +	DynamicData
    +
    +	Recommendations []ClusterRecommendation `xml:"recommendations,omitempty"`
    +	Fault           *ClusterDrsFaults       `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterEnterMaintenanceResult"] = reflect.TypeOf((*ClusterEnterMaintenanceResult)(nil)).Elem()
    +}
    +
    +type ClusterEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["ClusterEvent"] = reflect.TypeOf((*ClusterEvent)(nil)).Elem()
    +}
    +
    +type ClusterFailoverHostAdmissionControlInfo struct {
    +	ClusterDasAdmissionControlInfo
    +
    +	HostStatus []ClusterFailoverHostAdmissionControlInfoHostStatus `xml:"hostStatus,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterFailoverHostAdmissionControlInfo"] = reflect.TypeOf((*ClusterFailoverHostAdmissionControlInfo)(nil)).Elem()
    +}
    +
    +type ClusterFailoverHostAdmissionControlInfoHostStatus struct {
    +	DynamicData
    +
    +	Host   ManagedObjectReference `xml:"host"`
    +	Status ManagedEntityStatus    `xml:"status"`
    +}
    +
    +func init() {
    +	t["ClusterFailoverHostAdmissionControlInfoHostStatus"] = reflect.TypeOf((*ClusterFailoverHostAdmissionControlInfoHostStatus)(nil)).Elem()
    +}
    +
    +type ClusterFailoverHostAdmissionControlPolicy struct {
    +	ClusterDasAdmissionControlPolicy
    +
    +	FailoverHosts []ManagedObjectReference `xml:"failoverHosts,omitempty"`
    +	FailoverLevel int32                    `xml:"failoverLevel,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterFailoverHostAdmissionControlPolicy"] = reflect.TypeOf((*ClusterFailoverHostAdmissionControlPolicy)(nil)).Elem()
    +}
    +
    +type ClusterFailoverLevelAdmissionControlInfo struct {
    +	ClusterDasAdmissionControlInfo
    +
    +	CurrentFailoverLevel int32 `xml:"currentFailoverLevel"`
    +}
    +
    +func init() {
    +	t["ClusterFailoverLevelAdmissionControlInfo"] = reflect.TypeOf((*ClusterFailoverLevelAdmissionControlInfo)(nil)).Elem()
    +}
    +
    +type ClusterFailoverLevelAdmissionControlPolicy struct {
    +	ClusterDasAdmissionControlPolicy
    +
    +	FailoverLevel int32                 `xml:"failoverLevel"`
    +	SlotPolicy    BaseClusterSlotPolicy `xml:"slotPolicy,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterFailoverLevelAdmissionControlPolicy"] = reflect.TypeOf((*ClusterFailoverLevelAdmissionControlPolicy)(nil)).Elem()
    +}
    +
    +type ClusterFailoverResourcesAdmissionControlInfo struct {
    +	ClusterDasAdmissionControlInfo
    +
    +	CurrentCpuFailoverResourcesPercent    int32 `xml:"currentCpuFailoverResourcesPercent"`
    +	CurrentMemoryFailoverResourcesPercent int32 `xml:"currentMemoryFailoverResourcesPercent"`
    +}
    +
    +func init() {
    +	t["ClusterFailoverResourcesAdmissionControlInfo"] = reflect.TypeOf((*ClusterFailoverResourcesAdmissionControlInfo)(nil)).Elem()
    +}
    +
    +type ClusterFailoverResourcesAdmissionControlPolicy struct {
    +	ClusterDasAdmissionControlPolicy
    +
    +	CpuFailoverResourcesPercent    int32 `xml:"cpuFailoverResourcesPercent"`
    +	MemoryFailoverResourcesPercent int32 `xml:"memoryFailoverResourcesPercent"`
    +	FailoverLevel                  int32 `xml:"failoverLevel,omitempty"`
    +	AutoComputePercentages         *bool `xml:"autoComputePercentages"`
    +}
    +
    +func init() {
    +	t["ClusterFailoverResourcesAdmissionControlPolicy"] = reflect.TypeOf((*ClusterFailoverResourcesAdmissionControlPolicy)(nil)).Elem()
    +}
    +
    +type ClusterFixedSizeSlotPolicy struct {
    +	ClusterSlotPolicy
    +
    +	Cpu    int32 `xml:"cpu"`
    +	Memory int32 `xml:"memory"`
    +}
    +
    +func init() {
    +	t["ClusterFixedSizeSlotPolicy"] = reflect.TypeOf((*ClusterFixedSizeSlotPolicy)(nil)).Elem()
    +}
    +
    +type ClusterGroupInfo struct {
    +	DynamicData
    +
    +	Name        string `xml:"name"`
    +	UserCreated *bool  `xml:"userCreated"`
    +	UniqueID    string `xml:"uniqueID,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterGroupInfo"] = reflect.TypeOf((*ClusterGroupInfo)(nil)).Elem()
    +}
    +
    +type ClusterGroupSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info BaseClusterGroupInfo `xml:"info,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterGroupSpec"] = reflect.TypeOf((*ClusterGroupSpec)(nil)).Elem()
    +}
    +
    +type ClusterHostGroup struct {
    +	ClusterGroupInfo
    +
    +	Host []ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterHostGroup"] = reflect.TypeOf((*ClusterHostGroup)(nil)).Elem()
    +}
    +
    +type ClusterHostInfraUpdateHaModeAction struct {
    +	ClusterAction
    +
    +	OperationType string `xml:"operationType"`
    +}
    +
    +func init() {
    +	t["ClusterHostInfraUpdateHaModeAction"] = reflect.TypeOf((*ClusterHostInfraUpdateHaModeAction)(nil)).Elem()
    +}
    +
    +type ClusterHostPowerAction struct {
    +	ClusterAction
    +
    +	OperationType        HostPowerOperationType `xml:"operationType"`
    +	PowerConsumptionWatt int32                  `xml:"powerConsumptionWatt,omitempty"`
    +	CpuCapacityMHz       int32                  `xml:"cpuCapacityMHz,omitempty"`
    +	MemCapacityMB        int32                  `xml:"memCapacityMB,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterHostPowerAction"] = reflect.TypeOf((*ClusterHostPowerAction)(nil)).Elem()
    +}
    +
    +type ClusterHostRecommendation struct {
    +	DynamicData
    +
    +	Host   ManagedObjectReference `xml:"host"`
    +	Rating int32                  `xml:"rating"`
    +}
    +
    +func init() {
    +	t["ClusterHostRecommendation"] = reflect.TypeOf((*ClusterHostRecommendation)(nil)).Elem()
    +}
    +
    +type ClusterInfraUpdateHaConfigInfo struct {
    +	DynamicData
    +
    +	Enabled             *bool    `xml:"enabled"`
    +	Behavior            string   `xml:"behavior,omitempty"`
    +	ModerateRemediation string   `xml:"moderateRemediation,omitempty"`
    +	SevereRemediation   string   `xml:"severeRemediation,omitempty"`
    +	Providers           []string `xml:"providers,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterInfraUpdateHaConfigInfo"] = reflect.TypeOf((*ClusterInfraUpdateHaConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterInitialPlacementAction struct {
    +	ClusterAction
    +
    +	TargetHost ManagedObjectReference  `xml:"targetHost"`
    +	Pool       *ManagedObjectReference `xml:"pool,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterInitialPlacementAction"] = reflect.TypeOf((*ClusterInitialPlacementAction)(nil)).Elem()
    +}
    +
    +type ClusterIoFilterInfo struct {
    +	IoFilterInfo
    +
    +	OpType string `xml:"opType"`
    +	VibUrl string `xml:"vibUrl,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterIoFilterInfo"] = reflect.TypeOf((*ClusterIoFilterInfo)(nil)).Elem()
    +}
    +
    +type ClusterMigrationAction struct {
    +	ClusterAction
    +
    +	DrsMigration *ClusterDrsMigration `xml:"drsMigration,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterMigrationAction"] = reflect.TypeOf((*ClusterMigrationAction)(nil)).Elem()
    +}
    +
    +type ClusterNetworkConfigSpec struct {
    +	DynamicData
    +
    +	NetworkPortGroup ManagedObjectReference  `xml:"networkPortGroup"`
    +	IpSettings       CustomizationIPSettings `xml:"ipSettings"`
    +}
    +
    +func init() {
    +	t["ClusterNetworkConfigSpec"] = reflect.TypeOf((*ClusterNetworkConfigSpec)(nil)).Elem()
    +}
    +
    +type ClusterNotAttemptedVmInfo struct {
    +	DynamicData
    +
    +	Vm    ManagedObjectReference `xml:"vm"`
    +	Fault LocalizedMethodFault   `xml:"fault"`
    +}
    +
    +func init() {
    +	t["ClusterNotAttemptedVmInfo"] = reflect.TypeOf((*ClusterNotAttemptedVmInfo)(nil)).Elem()
    +}
    +
    +type ClusterOrchestrationInfo struct {
    +	DynamicData
    +
    +	DefaultVmReadiness *ClusterVmReadiness `xml:"defaultVmReadiness,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterOrchestrationInfo"] = reflect.TypeOf((*ClusterOrchestrationInfo)(nil)).Elem()
    +}
    +
    +type ClusterOvercommittedEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["ClusterOvercommittedEvent"] = reflect.TypeOf((*ClusterOvercommittedEvent)(nil)).Elem()
    +}
    +
    +type ClusterPowerOnVmResult struct {
    +	DynamicData
    +
    +	Attempted       []ClusterAttemptedVmInfo    `xml:"attempted,omitempty"`
    +	NotAttempted    []ClusterNotAttemptedVmInfo `xml:"notAttempted,omitempty"`
    +	Recommendations []ClusterRecommendation     `xml:"recommendations,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterPowerOnVmResult"] = reflect.TypeOf((*ClusterPowerOnVmResult)(nil)).Elem()
    +}
    +
    +type ClusterProactiveDrsConfigInfo struct {
    +	DynamicData
    +
    +	Enabled *bool `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["ClusterProactiveDrsConfigInfo"] = reflect.TypeOf((*ClusterProactiveDrsConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterProfileCompleteConfigSpec struct {
    +	ClusterProfileConfigSpec
    +
    +	ComplyProfile *ComplianceProfile `xml:"complyProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterProfileCompleteConfigSpec"] = reflect.TypeOf((*ClusterProfileCompleteConfigSpec)(nil)).Elem()
    +}
    +
    +type ClusterProfileConfigInfo struct {
    +	ProfileConfigInfo
    +
    +	ComplyProfile *ComplianceProfile `xml:"complyProfile,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterProfileConfigInfo"] = reflect.TypeOf((*ClusterProfileConfigInfo)(nil)).Elem()
    +}
    +
    +type ClusterProfileConfigServiceCreateSpec struct {
    +	ClusterProfileConfigSpec
    +
    +	ServiceType []string `xml:"serviceType,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterProfileConfigServiceCreateSpec"] = reflect.TypeOf((*ClusterProfileConfigServiceCreateSpec)(nil)).Elem()
    +}
    +
    +type ClusterProfileConfigSpec struct {
    +	ClusterProfileCreateSpec
    +}
    +
    +func init() {
    +	t["ClusterProfileConfigSpec"] = reflect.TypeOf((*ClusterProfileConfigSpec)(nil)).Elem()
    +}
    +
    +type ClusterProfileCreateSpec struct {
    +	ProfileCreateSpec
    +}
    +
    +func init() {
    +	t["ClusterProfileCreateSpec"] = reflect.TypeOf((*ClusterProfileCreateSpec)(nil)).Elem()
    +}
    +
    +type ClusterRecommendation struct {
    +	DynamicData
    +
    +	Key            string                  `xml:"key"`
    +	Type           string                  `xml:"type"`
    +	Time           time.Time               `xml:"time"`
    +	Rating         int32                   `xml:"rating"`
    +	Reason         string                  `xml:"reason"`
    +	ReasonText     string                  `xml:"reasonText"`
    +	WarningText    string                  `xml:"warningText,omitempty"`
    +	WarningDetails *LocalizableMessage     `xml:"warningDetails,omitempty"`
    +	Prerequisite   []string                `xml:"prerequisite,omitempty"`
    +	Action         []BaseClusterAction     `xml:"action,omitempty,typeattr"`
    +	Target         *ManagedObjectReference `xml:"target,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterRecommendation"] = reflect.TypeOf((*ClusterRecommendation)(nil)).Elem()
    +}
    +
    +type ClusterReconfiguredEvent struct {
    +	ClusterEvent
    +
    +	ConfigChanges *ChangesInfoEventArgument `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterReconfiguredEvent"] = reflect.TypeOf((*ClusterReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type ClusterResourceUsageSummary struct {
    +	DynamicData
    +
    +	CpuUsedMHz        int32 `xml:"cpuUsedMHz"`
    +	CpuCapacityMHz    int32 `xml:"cpuCapacityMHz"`
    +	MemUsedMB         int32 `xml:"memUsedMB"`
    +	MemCapacityMB     int32 `xml:"memCapacityMB"`
    +	PMemAvailableMB   int64 `xml:"pMemAvailableMB,omitempty"`
    +	PMemCapacityMB    int64 `xml:"pMemCapacityMB,omitempty"`
    +	StorageUsedMB     int64 `xml:"storageUsedMB"`
    +	StorageCapacityMB int64 `xml:"storageCapacityMB"`
    +}
    +
    +func init() {
    +	t["ClusterResourceUsageSummary"] = reflect.TypeOf((*ClusterResourceUsageSummary)(nil)).Elem()
    +}
    +
    +type ClusterRuleInfo struct {
    +	DynamicData
    +
    +	Key          int32               `xml:"key,omitempty"`
    +	Status       ManagedEntityStatus `xml:"status,omitempty"`
    +	Enabled      *bool               `xml:"enabled"`
    +	Name         string              `xml:"name,omitempty"`
    +	Mandatory    *bool               `xml:"mandatory"`
    +	UserCreated  *bool               `xml:"userCreated"`
    +	InCompliance *bool               `xml:"inCompliance"`
    +	RuleUuid     string              `xml:"ruleUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterRuleInfo"] = reflect.TypeOf((*ClusterRuleInfo)(nil)).Elem()
    +}
    +
    +type ClusterRuleSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info BaseClusterRuleInfo `xml:"info,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ClusterRuleSpec"] = reflect.TypeOf((*ClusterRuleSpec)(nil)).Elem()
    +}
    +
    +type ClusterSlotPolicy struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["ClusterSlotPolicy"] = reflect.TypeOf((*ClusterSlotPolicy)(nil)).Elem()
    +}
    +
    +type ClusterStatusChangedEvent struct {
    +	ClusterEvent
    +
    +	OldStatus string `xml:"oldStatus"`
    +	NewStatus string `xml:"newStatus"`
    +}
    +
    +func init() {
    +	t["ClusterStatusChangedEvent"] = reflect.TypeOf((*ClusterStatusChangedEvent)(nil)).Elem()
    +}
    +
    +type ClusterUsageSummary struct {
    +	DynamicData
    +
    +	TotalCpuCapacityMhz         int32 `xml:"totalCpuCapacityMhz"`
    +	TotalMemCapacityMB          int32 `xml:"totalMemCapacityMB"`
    +	CpuReservationMhz           int32 `xml:"cpuReservationMhz"`
    +	MemReservationMB            int32 `xml:"memReservationMB"`
    +	PoweredOffCpuReservationMhz int32 `xml:"poweredOffCpuReservationMhz,omitempty"`
    +	PoweredOffMemReservationMB  int32 `xml:"poweredOffMemReservationMB,omitempty"`
    +	CpuDemandMhz                int32 `xml:"cpuDemandMhz"`
    +	MemDemandMB                 int32 `xml:"memDemandMB"`
    +	StatsGenNumber              int64 `xml:"statsGenNumber"`
    +	CpuEntitledMhz              int32 `xml:"cpuEntitledMhz"`
    +	MemEntitledMB               int32 `xml:"memEntitledMB"`
    +	PoweredOffVmCount           int32 `xml:"poweredOffVmCount"`
    +	TotalVmCount                int32 `xml:"totalVmCount"`
    +}
    +
    +func init() {
    +	t["ClusterUsageSummary"] = reflect.TypeOf((*ClusterUsageSummary)(nil)).Elem()
    +}
    +
    +type ClusterVmComponentProtectionSettings struct {
    +	DynamicData
    +
    +	VmStorageProtectionForAPD string `xml:"vmStorageProtectionForAPD,omitempty"`
    +	EnableAPDTimeoutForHosts  *bool  `xml:"enableAPDTimeoutForHosts"`
    +	VmTerminateDelayForAPDSec int32  `xml:"vmTerminateDelayForAPDSec,omitempty"`
    +	VmReactionOnAPDCleared    string `xml:"vmReactionOnAPDCleared,omitempty"`
    +	VmStorageProtectionForPDL string `xml:"vmStorageProtectionForPDL,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterVmComponentProtectionSettings"] = reflect.TypeOf((*ClusterVmComponentProtectionSettings)(nil)).Elem()
    +}
    +
    +type ClusterVmGroup struct {
    +	ClusterGroupInfo
    +
    +	Vm []ManagedObjectReference `xml:"vm,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterVmGroup"] = reflect.TypeOf((*ClusterVmGroup)(nil)).Elem()
    +}
    +
    +type ClusterVmHostRuleInfo struct {
    +	ClusterRuleInfo
    +
    +	VmGroupName             string `xml:"vmGroupName,omitempty"`
    +	AffineHostGroupName     string `xml:"affineHostGroupName,omitempty"`
    +	AntiAffineHostGroupName string `xml:"antiAffineHostGroupName,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterVmHostRuleInfo"] = reflect.TypeOf((*ClusterVmHostRuleInfo)(nil)).Elem()
    +}
    +
    +type ClusterVmOrchestrationInfo struct {
    +	DynamicData
    +
    +	Vm          ManagedObjectReference `xml:"vm"`
    +	VmReadiness ClusterVmReadiness     `xml:"vmReadiness"`
    +}
    +
    +func init() {
    +	t["ClusterVmOrchestrationInfo"] = reflect.TypeOf((*ClusterVmOrchestrationInfo)(nil)).Elem()
    +}
    +
    +type ClusterVmOrchestrationSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *ClusterVmOrchestrationInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterVmOrchestrationSpec"] = reflect.TypeOf((*ClusterVmOrchestrationSpec)(nil)).Elem()
    +}
    +
    +type ClusterVmReadiness struct {
    +	DynamicData
    +
    +	ReadyCondition string `xml:"readyCondition,omitempty"`
    +	PostReadyDelay int32  `xml:"postReadyDelay,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterVmReadiness"] = reflect.TypeOf((*ClusterVmReadiness)(nil)).Elem()
    +}
    +
    +type ClusterVmToolsMonitoringSettings struct {
    +	DynamicData
    +
    +	Enabled          *bool  `xml:"enabled"`
    +	VmMonitoring     string `xml:"vmMonitoring,omitempty"`
    +	ClusterSettings  *bool  `xml:"clusterSettings"`
    +	FailureInterval  int32  `xml:"failureInterval,omitempty"`
    +	MinUpTime        int32  `xml:"minUpTime,omitempty"`
    +	MaxFailures      int32  `xml:"maxFailures,omitempty"`
    +	MaxFailureWindow int32  `xml:"maxFailureWindow,omitempty"`
    +}
    +
    +func init() {
    +	t["ClusterVmToolsMonitoringSettings"] = reflect.TypeOf((*ClusterVmToolsMonitoringSettings)(nil)).Elem()
    +}
    +
    +type CollectorAddressUnset struct {
    +	DvsFault
    +}
    +
    +func init() {
    +	t["CollectorAddressUnset"] = reflect.TypeOf((*CollectorAddressUnset)(nil)).Elem()
    +}
    +
    +type CollectorAddressUnsetFault CollectorAddressUnset
    +
    +func init() {
    +	t["CollectorAddressUnsetFault"] = reflect.TypeOf((*CollectorAddressUnsetFault)(nil)).Elem()
    +}
    +
    +type ComplianceFailure struct {
    +	DynamicData
    +
    +	FailureType    string                                     `xml:"failureType"`
    +	Message        LocalizableMessage                         `xml:"message"`
    +	ExpressionName string                                     `xml:"expressionName,omitempty"`
    +	FailureValues  []ComplianceFailureComplianceFailureValues `xml:"failureValues,omitempty"`
    +}
    +
    +func init() {
    +	t["ComplianceFailure"] = reflect.TypeOf((*ComplianceFailure)(nil)).Elem()
    +}
    +
    +type ComplianceFailureComplianceFailureValues struct {
    +	DynamicData
    +
    +	ComparisonIdentifier string  `xml:"comparisonIdentifier"`
    +	ProfileInstance      string  `xml:"profileInstance,omitempty"`
    +	HostValue            AnyType `xml:"hostValue,omitempty,typeattr"`
    +	ProfileValue         AnyType `xml:"profileValue,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ComplianceFailureComplianceFailureValues"] = reflect.TypeOf((*ComplianceFailureComplianceFailureValues)(nil)).Elem()
    +}
    +
    +type ComplianceLocator struct {
    +	DynamicData
    +
    +	ExpressionName string              `xml:"expressionName"`
    +	ApplyPath      ProfilePropertyPath `xml:"applyPath"`
    +}
    +
    +func init() {
    +	t["ComplianceLocator"] = reflect.TypeOf((*ComplianceLocator)(nil)).Elem()
    +}
    +
    +type ComplianceProfile struct {
    +	DynamicData
    +
    +	Expression     []BaseProfileExpression `xml:"expression,typeattr"`
    +	RootExpression string                  `xml:"rootExpression"`
    +}
    +
    +func init() {
    +	t["ComplianceProfile"] = reflect.TypeOf((*ComplianceProfile)(nil)).Elem()
    +}
    +
    +type ComplianceResult struct {
    +	DynamicData
    +
    +	Profile          *ManagedObjectReference `xml:"profile,omitempty"`
    +	ComplianceStatus string                  `xml:"complianceStatus"`
    +	Entity           *ManagedObjectReference `xml:"entity,omitempty"`
    +	CheckTime        *time.Time              `xml:"checkTime"`
    +	Failure          []ComplianceFailure     `xml:"failure,omitempty"`
    +}
    +
    +func init() {
    +	t["ComplianceResult"] = reflect.TypeOf((*ComplianceResult)(nil)).Elem()
    +}
    +
    +type CompositeHostProfileRequestType struct {
    +	This                   ManagedObjectReference   `xml:"_this"`
    +	Source                 ManagedObjectReference   `xml:"source"`
    +	Targets                []ManagedObjectReference `xml:"targets,omitempty"`
    +	ToBeMerged             *HostApplyProfile        `xml:"toBeMerged,omitempty"`
    +	ToBeReplacedWith       *HostApplyProfile        `xml:"toBeReplacedWith,omitempty"`
    +	ToBeDeleted            *HostApplyProfile        `xml:"toBeDeleted,omitempty"`
    +	EnableStatusToBeCopied *HostApplyProfile        `xml:"enableStatusToBeCopied,omitempty"`
    +}
    +
    +func init() {
    +	t["CompositeHostProfileRequestType"] = reflect.TypeOf((*CompositeHostProfileRequestType)(nil)).Elem()
    +}
    +
    +type CompositeHostProfile_Task CompositeHostProfileRequestType
    +
    +func init() {
    +	t["CompositeHostProfile_Task"] = reflect.TypeOf((*CompositeHostProfile_Task)(nil)).Elem()
    +}
    +
    +type CompositeHostProfile_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CompositePolicyOption struct {
    +	PolicyOption
    +
    +	Option []BasePolicyOption `xml:"option,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["CompositePolicyOption"] = reflect.TypeOf((*CompositePolicyOption)(nil)).Elem()
    +}
    +
    +type ComputeDiskPartitionInfo ComputeDiskPartitionInfoRequestType
    +
    +func init() {
    +	t["ComputeDiskPartitionInfo"] = reflect.TypeOf((*ComputeDiskPartitionInfo)(nil)).Elem()
    +}
    +
    +type ComputeDiskPartitionInfoForResize ComputeDiskPartitionInfoForResizeRequestType
    +
    +func init() {
    +	t["ComputeDiskPartitionInfoForResize"] = reflect.TypeOf((*ComputeDiskPartitionInfoForResize)(nil)).Elem()
    +}
    +
    +type ComputeDiskPartitionInfoForResizeRequestType struct {
    +	This            ManagedObjectReference      `xml:"_this"`
    +	Partition       HostScsiDiskPartition       `xml:"partition"`
    +	BlockRange      HostDiskPartitionBlockRange `xml:"blockRange"`
    +	PartitionFormat string                      `xml:"partitionFormat,omitempty"`
    +}
    +
    +func init() {
    +	t["ComputeDiskPartitionInfoForResizeRequestType"] = reflect.TypeOf((*ComputeDiskPartitionInfoForResizeRequestType)(nil)).Elem()
    +}
    +
    +type ComputeDiskPartitionInfoForResizeResponse struct {
    +	Returnval HostDiskPartitionInfo `xml:"returnval"`
    +}
    +
    +type ComputeDiskPartitionInfoRequestType struct {
    +	This            ManagedObjectReference  `xml:"_this"`
    +	DevicePath      string                  `xml:"devicePath"`
    +	Layout          HostDiskPartitionLayout `xml:"layout"`
    +	PartitionFormat string                  `xml:"partitionFormat,omitempty"`
    +}
    +
    +func init() {
    +	t["ComputeDiskPartitionInfoRequestType"] = reflect.TypeOf((*ComputeDiskPartitionInfoRequestType)(nil)).Elem()
    +}
    +
    +type ComputeDiskPartitionInfoResponse struct {
    +	Returnval HostDiskPartitionInfo `xml:"returnval"`
    +}
    +
    +type ComputeResourceConfigInfo struct {
    +	DynamicData
    +
    +	VmSwapPlacement           string `xml:"vmSwapPlacement"`
    +	SpbmEnabled               *bool  `xml:"spbmEnabled"`
    +	DefaultHardwareVersionKey string `xml:"defaultHardwareVersionKey,omitempty"`
    +}
    +
    +func init() {
    +	t["ComputeResourceConfigInfo"] = reflect.TypeOf((*ComputeResourceConfigInfo)(nil)).Elem()
    +}
    +
    +type ComputeResourceConfigSpec struct {
    +	DynamicData
    +
    +	VmSwapPlacement           string `xml:"vmSwapPlacement,omitempty"`
    +	SpbmEnabled               *bool  `xml:"spbmEnabled"`
    +	DefaultHardwareVersionKey string `xml:"defaultHardwareVersionKey,omitempty"`
    +}
    +
    +func init() {
    +	t["ComputeResourceConfigSpec"] = reflect.TypeOf((*ComputeResourceConfigSpec)(nil)).Elem()
    +}
    +
    +type ComputeResourceEventArgument struct {
    +	EntityEventArgument
    +
    +	ComputeResource ManagedObjectReference `xml:"computeResource"`
    +}
    +
    +func init() {
    +	t["ComputeResourceEventArgument"] = reflect.TypeOf((*ComputeResourceEventArgument)(nil)).Elem()
    +}
    +
    +type ComputeResourceHostSPBMLicenseInfo struct {
    +	DynamicData
    +
    +	Host         ManagedObjectReference                                 `xml:"host"`
    +	LicenseState ComputeResourceHostSPBMLicenseInfoHostSPBMLicenseState `xml:"licenseState"`
    +}
    +
    +func init() {
    +	t["ComputeResourceHostSPBMLicenseInfo"] = reflect.TypeOf((*ComputeResourceHostSPBMLicenseInfo)(nil)).Elem()
    +}
    +
    +type ComputeResourceSummary struct {
    +	DynamicData
    +
    +	TotalCpu          int32               `xml:"totalCpu"`
    +	TotalMemory       int64               `xml:"totalMemory"`
    +	NumCpuCores       int16               `xml:"numCpuCores"`
    +	NumCpuThreads     int16               `xml:"numCpuThreads"`
    +	EffectiveCpu      int32               `xml:"effectiveCpu"`
    +	EffectiveMemory   int64               `xml:"effectiveMemory"`
    +	NumHosts          int32               `xml:"numHosts"`
    +	NumEffectiveHosts int32               `xml:"numEffectiveHosts"`
    +	OverallStatus     ManagedEntityStatus `xml:"overallStatus"`
    +}
    +
    +func init() {
    +	t["ComputeResourceSummary"] = reflect.TypeOf((*ComputeResourceSummary)(nil)).Elem()
    +}
    +
    +type ConcurrentAccess struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["ConcurrentAccess"] = reflect.TypeOf((*ConcurrentAccess)(nil)).Elem()
    +}
    +
    +type ConcurrentAccessFault ConcurrentAccess
    +
    +func init() {
    +	t["ConcurrentAccessFault"] = reflect.TypeOf((*ConcurrentAccessFault)(nil)).Elem()
    +}
    +
    +type ConfigTarget struct {
    +	DynamicData
    +
    +	NumCpus                                int32                                       `xml:"numCpus"`
    +	NumCpuCores                            int32                                       `xml:"numCpuCores"`
    +	NumNumaNodes                           int32                                       `xml:"numNumaNodes"`
    +	SmcPresent                             *bool                                       `xml:"smcPresent"`
    +	Datastore                              []VirtualMachineDatastoreInfo               `xml:"datastore,omitempty"`
    +	Network                                []VirtualMachineNetworkInfo                 `xml:"network,omitempty"`
    +	OpaqueNetwork                          []OpaqueNetworkTargetInfo                   `xml:"opaqueNetwork,omitempty"`
    +	DistributedVirtualPortgroup            []DistributedVirtualPortgroupInfo           `xml:"distributedVirtualPortgroup,omitempty"`
    +	DistributedVirtualSwitch               []DistributedVirtualSwitchInfo              `xml:"distributedVirtualSwitch,omitempty"`
    +	CdRom                                  []VirtualMachineCdromInfo                   `xml:"cdRom,omitempty"`
    +	Serial                                 []VirtualMachineSerialInfo                  `xml:"serial,omitempty"`
    +	Parallel                               []VirtualMachineParallelInfo                `xml:"parallel,omitempty"`
    +	Sound                                  []VirtualMachineSoundInfo                   `xml:"sound,omitempty"`
    +	Usb                                    []VirtualMachineUsbInfo                     `xml:"usb,omitempty"`
    +	Floppy                                 []VirtualMachineFloppyInfo                  `xml:"floppy,omitempty"`
    +	LegacyNetworkInfo                      []VirtualMachineLegacyNetworkSwitchInfo     `xml:"legacyNetworkInfo,omitempty"`
    +	ScsiPassthrough                        []VirtualMachineScsiPassthroughInfo         `xml:"scsiPassthrough,omitempty"`
    +	ScsiDisk                               []VirtualMachineScsiDiskDeviceInfo          `xml:"scsiDisk,omitempty"`
    +	IdeDisk                                []VirtualMachineIdeDiskDeviceInfo           `xml:"ideDisk,omitempty"`
    +	MaxMemMBOptimalPerf                    int32                                       `xml:"maxMemMBOptimalPerf"`
    +	ResourcePool                           *ResourcePoolRuntimeInfo                    `xml:"resourcePool,omitempty"`
    +	AutoVmotion                            *bool                                       `xml:"autoVmotion"`
    +	PciPassthrough                         []BaseVirtualMachinePciPassthroughInfo      `xml:"pciPassthrough,omitempty,typeattr"`
    +	Sriov                                  []VirtualMachineSriovInfo                   `xml:"sriov,omitempty"`
    +	VFlashModule                           []VirtualMachineVFlashModuleInfo            `xml:"vFlashModule,omitempty"`
    +	SharedGpuPassthroughTypes              []VirtualMachinePciSharedGpuPassthroughInfo `xml:"sharedGpuPassthroughTypes,omitempty"`
    +	AvailablePersistentMemoryReservationMB int64                                       `xml:"availablePersistentMemoryReservationMB,omitempty"`
    +}
    +
    +func init() {
    +	t["ConfigTarget"] = reflect.TypeOf((*ConfigTarget)(nil)).Elem()
    +}
    +
    +type ConfigureCryptoKey ConfigureCryptoKeyRequestType
    +
    +func init() {
    +	t["ConfigureCryptoKey"] = reflect.TypeOf((*ConfigureCryptoKey)(nil)).Elem()
    +}
    +
    +type ConfigureCryptoKeyRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	KeyId *CryptoKeyId           `xml:"keyId,omitempty"`
    +}
    +
    +func init() {
    +	t["ConfigureCryptoKeyRequestType"] = reflect.TypeOf((*ConfigureCryptoKeyRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureCryptoKeyResponse struct {
    +}
    +
    +type ConfigureDatastoreIORMRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	Spec      StorageIORMConfigSpec  `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ConfigureDatastoreIORMRequestType"] = reflect.TypeOf((*ConfigureDatastoreIORMRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureDatastoreIORM_Task ConfigureDatastoreIORMRequestType
    +
    +func init() {
    +	t["ConfigureDatastoreIORM_Task"] = reflect.TypeOf((*ConfigureDatastoreIORM_Task)(nil)).Elem()
    +}
    +
    +type ConfigureDatastoreIORM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ConfigureDatastorePrincipal ConfigureDatastorePrincipalRequestType
    +
    +func init() {
    +	t["ConfigureDatastorePrincipal"] = reflect.TypeOf((*ConfigureDatastorePrincipal)(nil)).Elem()
    +}
    +
    +type ConfigureDatastorePrincipalRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	UserName string                 `xml:"userName"`
    +	Password string                 `xml:"password,omitempty"`
    +}
    +
    +func init() {
    +	t["ConfigureDatastorePrincipalRequestType"] = reflect.TypeOf((*ConfigureDatastorePrincipalRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureDatastorePrincipalResponse struct {
    +}
    +
    +type ConfigureEvcModeRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	EvcModeKey string                 `xml:"evcModeKey"`
    +}
    +
    +func init() {
    +	t["ConfigureEvcModeRequestType"] = reflect.TypeOf((*ConfigureEvcModeRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureEvcMode_Task ConfigureEvcModeRequestType
    +
    +func init() {
    +	t["ConfigureEvcMode_Task"] = reflect.TypeOf((*ConfigureEvcMode_Task)(nil)).Elem()
    +}
    +
    +type ConfigureEvcMode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ConfigureHostCacheRequestType struct {
    +	This ManagedObjectReference     `xml:"_this"`
    +	Spec HostCacheConfigurationSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ConfigureHostCacheRequestType"] = reflect.TypeOf((*ConfigureHostCacheRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureHostCache_Task ConfigureHostCacheRequestType
    +
    +func init() {
    +	t["ConfigureHostCache_Task"] = reflect.TypeOf((*ConfigureHostCache_Task)(nil)).Elem()
    +}
    +
    +type ConfigureHostCache_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ConfigureLicenseSource ConfigureLicenseSourceRequestType
    +
    +func init() {
    +	t["ConfigureLicenseSource"] = reflect.TypeOf((*ConfigureLicenseSource)(nil)).Elem()
    +}
    +
    +type ConfigureLicenseSourceRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Host          *ManagedObjectReference `xml:"host,omitempty"`
    +	LicenseSource BaseLicenseSource       `xml:"licenseSource,typeattr"`
    +}
    +
    +func init() {
    +	t["ConfigureLicenseSourceRequestType"] = reflect.TypeOf((*ConfigureLicenseSourceRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureLicenseSourceResponse struct {
    +}
    +
    +type ConfigurePowerPolicy ConfigurePowerPolicyRequestType
    +
    +func init() {
    +	t["ConfigurePowerPolicy"] = reflect.TypeOf((*ConfigurePowerPolicy)(nil)).Elem()
    +}
    +
    +type ConfigurePowerPolicyRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  int32                  `xml:"key"`
    +}
    +
    +func init() {
    +	t["ConfigurePowerPolicyRequestType"] = reflect.TypeOf((*ConfigurePowerPolicyRequestType)(nil)).Elem()
    +}
    +
    +type ConfigurePowerPolicyResponse struct {
    +}
    +
    +type ConfigureStorageDrsForPodRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Pod    ManagedObjectReference `xml:"pod"`
    +	Spec   StorageDrsConfigSpec   `xml:"spec"`
    +	Modify bool                   `xml:"modify"`
    +}
    +
    +func init() {
    +	t["ConfigureStorageDrsForPodRequestType"] = reflect.TypeOf((*ConfigureStorageDrsForPodRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureStorageDrsForPod_Task ConfigureStorageDrsForPodRequestType
    +
    +func init() {
    +	t["ConfigureStorageDrsForPod_Task"] = reflect.TypeOf((*ConfigureStorageDrsForPod_Task)(nil)).Elem()
    +}
    +
    +type ConfigureStorageDrsForPod_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ConfigureVFlashResourceExRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	DevicePath []string               `xml:"devicePath,omitempty"`
    +}
    +
    +func init() {
    +	t["ConfigureVFlashResourceExRequestType"] = reflect.TypeOf((*ConfigureVFlashResourceExRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureVFlashResourceEx_Task ConfigureVFlashResourceExRequestType
    +
    +func init() {
    +	t["ConfigureVFlashResourceEx_Task"] = reflect.TypeOf((*ConfigureVFlashResourceEx_Task)(nil)).Elem()
    +}
    +
    +type ConfigureVFlashResourceEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ConflictingConfiguration struct {
    +	DvsFault
    +
    +	ConfigInConflict []ConflictingConfigurationConfig `xml:"configInConflict"`
    +}
    +
    +func init() {
    +	t["ConflictingConfiguration"] = reflect.TypeOf((*ConflictingConfiguration)(nil)).Elem()
    +}
    +
    +type ConflictingConfigurationConfig struct {
    +	DynamicData
    +
    +	Entity       *ManagedObjectReference `xml:"entity,omitempty"`
    +	PropertyPath string                  `xml:"propertyPath"`
    +}
    +
    +func init() {
    +	t["ConflictingConfigurationConfig"] = reflect.TypeOf((*ConflictingConfigurationConfig)(nil)).Elem()
    +}
    +
    +type ConflictingConfigurationFault ConflictingConfiguration
    +
    +func init() {
    +	t["ConflictingConfigurationFault"] = reflect.TypeOf((*ConflictingConfigurationFault)(nil)).Elem()
    +}
    +
    +type ConflictingDatastoreFound struct {
    +	RuntimeFault
    +
    +	Name string `xml:"name"`
    +	Url  string `xml:"url"`
    +}
    +
    +func init() {
    +	t["ConflictingDatastoreFound"] = reflect.TypeOf((*ConflictingDatastoreFound)(nil)).Elem()
    +}
    +
    +type ConflictingDatastoreFoundFault ConflictingDatastoreFound
    +
    +func init() {
    +	t["ConflictingDatastoreFoundFault"] = reflect.TypeOf((*ConflictingDatastoreFoundFault)(nil)).Elem()
    +}
    +
    +type ConnectedIso struct {
    +	OvfExport
    +
    +	Cdrom    VirtualCdrom `xml:"cdrom"`
    +	Filename string       `xml:"filename"`
    +}
    +
    +func init() {
    +	t["ConnectedIso"] = reflect.TypeOf((*ConnectedIso)(nil)).Elem()
    +}
    +
    +type ConnectedIsoFault ConnectedIso
    +
    +func init() {
    +	t["ConnectedIsoFault"] = reflect.TypeOf((*ConnectedIsoFault)(nil)).Elem()
    +}
    +
    +type ConsolidateVMDisksRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ConsolidateVMDisksRequestType"] = reflect.TypeOf((*ConsolidateVMDisksRequestType)(nil)).Elem()
    +}
    +
    +type ConsolidateVMDisks_Task ConsolidateVMDisksRequestType
    +
    +func init() {
    +	t["ConsolidateVMDisks_Task"] = reflect.TypeOf((*ConsolidateVMDisks_Task)(nil)).Elem()
    +}
    +
    +type ConsolidateVMDisks_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ContinueRetrievePropertiesEx ContinueRetrievePropertiesExRequestType
    +
    +func init() {
    +	t["ContinueRetrievePropertiesEx"] = reflect.TypeOf((*ContinueRetrievePropertiesEx)(nil)).Elem()
    +}
    +
    +type ContinueRetrievePropertiesExRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Token string                 `xml:"token"`
    +}
    +
    +func init() {
    +	t["ContinueRetrievePropertiesExRequestType"] = reflect.TypeOf((*ContinueRetrievePropertiesExRequestType)(nil)).Elem()
    +}
    +
    +type ContinueRetrievePropertiesExResponse struct {
    +	Returnval RetrieveResult `xml:"returnval"`
    +}
    +
    +type ConvertNamespacePathToUuidPath ConvertNamespacePathToUuidPathRequestType
    +
    +func init() {
    +	t["ConvertNamespacePathToUuidPath"] = reflect.TypeOf((*ConvertNamespacePathToUuidPath)(nil)).Elem()
    +}
    +
    +type ConvertNamespacePathToUuidPathRequestType struct {
    +	This         ManagedObjectReference  `xml:"_this"`
    +	Datacenter   *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	NamespaceUrl string                  `xml:"namespaceUrl"`
    +}
    +
    +func init() {
    +	t["ConvertNamespacePathToUuidPathRequestType"] = reflect.TypeOf((*ConvertNamespacePathToUuidPathRequestType)(nil)).Elem()
    +}
    +
    +type ConvertNamespacePathToUuidPathResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type CopyDatastoreFileRequestType struct {
    +	This                  ManagedObjectReference  `xml:"_this"`
    +	SourceName            string                  `xml:"sourceName"`
    +	SourceDatacenter      *ManagedObjectReference `xml:"sourceDatacenter,omitempty"`
    +	DestinationName       string                  `xml:"destinationName"`
    +	DestinationDatacenter *ManagedObjectReference `xml:"destinationDatacenter,omitempty"`
    +	Force                 *bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["CopyDatastoreFileRequestType"] = reflect.TypeOf((*CopyDatastoreFileRequestType)(nil)).Elem()
    +}
    +
    +type CopyDatastoreFile_Task CopyDatastoreFileRequestType
    +
    +func init() {
    +	t["CopyDatastoreFile_Task"] = reflect.TypeOf((*CopyDatastoreFile_Task)(nil)).Elem()
    +}
    +
    +type CopyDatastoreFile_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CopyVirtualDiskRequestType struct {
    +	This             ManagedObjectReference  `xml:"_this"`
    +	SourceName       string                  `xml:"sourceName"`
    +	SourceDatacenter *ManagedObjectReference `xml:"sourceDatacenter,omitempty"`
    +	DestName         string                  `xml:"destName"`
    +	DestDatacenter   *ManagedObjectReference `xml:"destDatacenter,omitempty"`
    +	DestSpec         BaseVirtualDiskSpec     `xml:"destSpec,omitempty,typeattr"`
    +	Force            *bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["CopyVirtualDiskRequestType"] = reflect.TypeOf((*CopyVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type CopyVirtualDisk_Task CopyVirtualDiskRequestType
    +
    +func init() {
    +	t["CopyVirtualDisk_Task"] = reflect.TypeOf((*CopyVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type CopyVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CpuCompatibilityUnknown struct {
    +	CpuIncompatible
    +}
    +
    +func init() {
    +	t["CpuCompatibilityUnknown"] = reflect.TypeOf((*CpuCompatibilityUnknown)(nil)).Elem()
    +}
    +
    +type CpuCompatibilityUnknownFault CpuCompatibilityUnknown
    +
    +func init() {
    +	t["CpuCompatibilityUnknownFault"] = reflect.TypeOf((*CpuCompatibilityUnknownFault)(nil)).Elem()
    +}
    +
    +type CpuHotPlugNotSupported struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["CpuHotPlugNotSupported"] = reflect.TypeOf((*CpuHotPlugNotSupported)(nil)).Elem()
    +}
    +
    +type CpuHotPlugNotSupportedFault CpuHotPlugNotSupported
    +
    +func init() {
    +	t["CpuHotPlugNotSupportedFault"] = reflect.TypeOf((*CpuHotPlugNotSupportedFault)(nil)).Elem()
    +}
    +
    +type CpuIncompatible struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	Level        int32                   `xml:"level"`
    +	RegisterName string                  `xml:"registerName"`
    +	RegisterBits string                  `xml:"registerBits,omitempty"`
    +	DesiredBits  string                  `xml:"desiredBits,omitempty"`
    +	Host         *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["CpuIncompatible"] = reflect.TypeOf((*CpuIncompatible)(nil)).Elem()
    +}
    +
    +type CpuIncompatible1ECX struct {
    +	CpuIncompatible
    +
    +	Sse3      bool  `xml:"sse3"`
    +	Pclmulqdq *bool `xml:"pclmulqdq"`
    +	Ssse3     bool  `xml:"ssse3"`
    +	Sse41     bool  `xml:"sse41"`
    +	Sse42     bool  `xml:"sse42"`
    +	Aes       *bool `xml:"aes"`
    +	Other     bool  `xml:"other"`
    +	OtherOnly bool  `xml:"otherOnly"`
    +}
    +
    +func init() {
    +	t["CpuIncompatible1ECX"] = reflect.TypeOf((*CpuIncompatible1ECX)(nil)).Elem()
    +}
    +
    +type CpuIncompatible1ECXFault CpuIncompatible1ECX
    +
    +func init() {
    +	t["CpuIncompatible1ECXFault"] = reflect.TypeOf((*CpuIncompatible1ECXFault)(nil)).Elem()
    +}
    +
    +type CpuIncompatible81EDX struct {
    +	CpuIncompatible
    +
    +	Nx        bool `xml:"nx"`
    +	Ffxsr     bool `xml:"ffxsr"`
    +	Rdtscp    bool `xml:"rdtscp"`
    +	Lm        bool `xml:"lm"`
    +	Other     bool `xml:"other"`
    +	OtherOnly bool `xml:"otherOnly"`
    +}
    +
    +func init() {
    +	t["CpuIncompatible81EDX"] = reflect.TypeOf((*CpuIncompatible81EDX)(nil)).Elem()
    +}
    +
    +type CpuIncompatible81EDXFault CpuIncompatible81EDX
    +
    +func init() {
    +	t["CpuIncompatible81EDXFault"] = reflect.TypeOf((*CpuIncompatible81EDXFault)(nil)).Elem()
    +}
    +
    +type CpuIncompatibleFault BaseCpuIncompatible
    +
    +func init() {
    +	t["CpuIncompatibleFault"] = reflect.TypeOf((*CpuIncompatibleFault)(nil)).Elem()
    +}
    +
    +type CreateAlarm CreateAlarmRequestType
    +
    +func init() {
    +	t["CreateAlarm"] = reflect.TypeOf((*CreateAlarm)(nil)).Elem()
    +}
    +
    +type CreateAlarmRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +	Spec   BaseAlarmSpec          `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["CreateAlarmRequestType"] = reflect.TypeOf((*CreateAlarmRequestType)(nil)).Elem()
    +}
    +
    +type CreateAlarmResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateChildVMRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Config VirtualMachineConfigSpec `xml:"config"`
    +	Host   *ManagedObjectReference  `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateChildVMRequestType"] = reflect.TypeOf((*CreateChildVMRequestType)(nil)).Elem()
    +}
    +
    +type CreateChildVM_Task CreateChildVMRequestType
    +
    +func init() {
    +	t["CreateChildVM_Task"] = reflect.TypeOf((*CreateChildVM_Task)(nil)).Elem()
    +}
    +
    +type CreateChildVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateCluster CreateClusterRequestType
    +
    +func init() {
    +	t["CreateCluster"] = reflect.TypeOf((*CreateCluster)(nil)).Elem()
    +}
    +
    +type CreateClusterEx CreateClusterExRequestType
    +
    +func init() {
    +	t["CreateClusterEx"] = reflect.TypeOf((*CreateClusterEx)(nil)).Elem()
    +}
    +
    +type CreateClusterExRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +	Spec ClusterConfigSpecEx    `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateClusterExRequestType"] = reflect.TypeOf((*CreateClusterExRequestType)(nil)).Elem()
    +}
    +
    +type CreateClusterExResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateClusterRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +	Spec ClusterConfigSpec      `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateClusterRequestType"] = reflect.TypeOf((*CreateClusterRequestType)(nil)).Elem()
    +}
    +
    +type CreateClusterResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateCollectorForEvents CreateCollectorForEventsRequestType
    +
    +func init() {
    +	t["CreateCollectorForEvents"] = reflect.TypeOf((*CreateCollectorForEvents)(nil)).Elem()
    +}
    +
    +type CreateCollectorForEventsRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Filter EventFilterSpec        `xml:"filter"`
    +}
    +
    +func init() {
    +	t["CreateCollectorForEventsRequestType"] = reflect.TypeOf((*CreateCollectorForEventsRequestType)(nil)).Elem()
    +}
    +
    +type CreateCollectorForEventsResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateCollectorForTasks CreateCollectorForTasksRequestType
    +
    +func init() {
    +	t["CreateCollectorForTasks"] = reflect.TypeOf((*CreateCollectorForTasks)(nil)).Elem()
    +}
    +
    +type CreateCollectorForTasksRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Filter TaskFilterSpec         `xml:"filter"`
    +}
    +
    +func init() {
    +	t["CreateCollectorForTasksRequestType"] = reflect.TypeOf((*CreateCollectorForTasksRequestType)(nil)).Elem()
    +}
    +
    +type CreateCollectorForTasksResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateContainerView CreateContainerViewRequestType
    +
    +func init() {
    +	t["CreateContainerView"] = reflect.TypeOf((*CreateContainerView)(nil)).Elem()
    +}
    +
    +type CreateContainerViewRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Container ManagedObjectReference `xml:"container"`
    +	Type      []string               `xml:"type,omitempty"`
    +	Recursive bool                   `xml:"recursive"`
    +}
    +
    +func init() {
    +	t["CreateContainerViewRequestType"] = reflect.TypeOf((*CreateContainerViewRequestType)(nil)).Elem()
    +}
    +
    +type CreateContainerViewResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateCustomizationSpec CreateCustomizationSpecRequestType
    +
    +func init() {
    +	t["CreateCustomizationSpec"] = reflect.TypeOf((*CreateCustomizationSpec)(nil)).Elem()
    +}
    +
    +type CreateCustomizationSpecRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Item CustomizationSpecItem  `xml:"item"`
    +}
    +
    +func init() {
    +	t["CreateCustomizationSpecRequestType"] = reflect.TypeOf((*CreateCustomizationSpecRequestType)(nil)).Elem()
    +}
    +
    +type CreateCustomizationSpecResponse struct {
    +}
    +
    +type CreateDVPortgroupRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec DVPortgroupConfigSpec  `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateDVPortgroupRequestType"] = reflect.TypeOf((*CreateDVPortgroupRequestType)(nil)).Elem()
    +}
    +
    +type CreateDVPortgroup_Task CreateDVPortgroupRequestType
    +
    +func init() {
    +	t["CreateDVPortgroup_Task"] = reflect.TypeOf((*CreateDVPortgroup_Task)(nil)).Elem()
    +}
    +
    +type CreateDVPortgroup_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateDVSRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec DVSCreateSpec          `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateDVSRequestType"] = reflect.TypeOf((*CreateDVSRequestType)(nil)).Elem()
    +}
    +
    +type CreateDVS_Task CreateDVSRequestType
    +
    +func init() {
    +	t["CreateDVS_Task"] = reflect.TypeOf((*CreateDVS_Task)(nil)).Elem()
    +}
    +
    +type CreateDVS_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateDatacenter CreateDatacenterRequestType
    +
    +func init() {
    +	t["CreateDatacenter"] = reflect.TypeOf((*CreateDatacenter)(nil)).Elem()
    +}
    +
    +type CreateDatacenterRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["CreateDatacenterRequestType"] = reflect.TypeOf((*CreateDatacenterRequestType)(nil)).Elem()
    +}
    +
    +type CreateDatacenterResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateDefaultProfile CreateDefaultProfileRequestType
    +
    +func init() {
    +	t["CreateDefaultProfile"] = reflect.TypeOf((*CreateDefaultProfile)(nil)).Elem()
    +}
    +
    +type CreateDefaultProfileRequestType struct {
    +	This            ManagedObjectReference  `xml:"_this"`
    +	ProfileType     string                  `xml:"profileType"`
    +	ProfileTypeName string                  `xml:"profileTypeName,omitempty"`
    +	Profile         *ManagedObjectReference `xml:"profile,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateDefaultProfileRequestType"] = reflect.TypeOf((*CreateDefaultProfileRequestType)(nil)).Elem()
    +}
    +
    +type CreateDefaultProfileResponse struct {
    +	Returnval BaseApplyProfile `xml:"returnval,typeattr"`
    +}
    +
    +type CreateDescriptor CreateDescriptorRequestType
    +
    +func init() {
    +	t["CreateDescriptor"] = reflect.TypeOf((*CreateDescriptor)(nil)).Elem()
    +}
    +
    +type CreateDescriptorRequestType struct {
    +	This ManagedObjectReference    `xml:"_this"`
    +	Obj  ManagedObjectReference    `xml:"obj"`
    +	Cdp  OvfCreateDescriptorParams `xml:"cdp"`
    +}
    +
    +func init() {
    +	t["CreateDescriptorRequestType"] = reflect.TypeOf((*CreateDescriptorRequestType)(nil)).Elem()
    +}
    +
    +type CreateDescriptorResponse struct {
    +	Returnval OvfCreateDescriptorResult `xml:"returnval"`
    +}
    +
    +type CreateDiagnosticPartition CreateDiagnosticPartitionRequestType
    +
    +func init() {
    +	t["CreateDiagnosticPartition"] = reflect.TypeOf((*CreateDiagnosticPartition)(nil)).Elem()
    +}
    +
    +type CreateDiagnosticPartitionRequestType struct {
    +	This ManagedObjectReference            `xml:"_this"`
    +	Spec HostDiagnosticPartitionCreateSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateDiagnosticPartitionRequestType"] = reflect.TypeOf((*CreateDiagnosticPartitionRequestType)(nil)).Elem()
    +}
    +
    +type CreateDiagnosticPartitionResponse struct {
    +}
    +
    +type CreateDirectory CreateDirectoryRequestType
    +
    +func init() {
    +	t["CreateDirectory"] = reflect.TypeOf((*CreateDirectory)(nil)).Elem()
    +}
    +
    +type CreateDirectoryRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Datastore   ManagedObjectReference `xml:"datastore"`
    +	DisplayName string                 `xml:"displayName,omitempty"`
    +	Policy      string                 `xml:"policy,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateDirectoryRequestType"] = reflect.TypeOf((*CreateDirectoryRequestType)(nil)).Elem()
    +}
    +
    +type CreateDirectoryResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type CreateDiskFromSnapshotRequestType struct {
    +	This       ManagedObjectReference          `xml:"_this"`
    +	Id         ID                              `xml:"id"`
    +	Datastore  ManagedObjectReference          `xml:"datastore"`
    +	SnapshotId ID                              `xml:"snapshotId"`
    +	Name       string                          `xml:"name"`
    +	Profile    []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +	Crypto     BaseCryptoSpec                  `xml:"crypto,omitempty,typeattr"`
    +	Path       string                          `xml:"path,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateDiskFromSnapshotRequestType"] = reflect.TypeOf((*CreateDiskFromSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type CreateDiskFromSnapshot_Task CreateDiskFromSnapshotRequestType
    +
    +func init() {
    +	t["CreateDiskFromSnapshot_Task"] = reflect.TypeOf((*CreateDiskFromSnapshot_Task)(nil)).Elem()
    +}
    +
    +type CreateDiskFromSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateDiskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec VslmCreateSpec         `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateDiskRequestType"] = reflect.TypeOf((*CreateDiskRequestType)(nil)).Elem()
    +}
    +
    +type CreateDisk_Task CreateDiskRequestType
    +
    +func init() {
    +	t["CreateDisk_Task"] = reflect.TypeOf((*CreateDisk_Task)(nil)).Elem()
    +}
    +
    +type CreateDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateFilter CreateFilterRequestType
    +
    +func init() {
    +	t["CreateFilter"] = reflect.TypeOf((*CreateFilter)(nil)).Elem()
    +}
    +
    +type CreateFilterRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	Spec           PropertyFilterSpec     `xml:"spec"`
    +	PartialUpdates bool                   `xml:"partialUpdates"`
    +}
    +
    +func init() {
    +	t["CreateFilterRequestType"] = reflect.TypeOf((*CreateFilterRequestType)(nil)).Elem()
    +}
    +
    +type CreateFilterResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateFolder CreateFolderRequestType
    +
    +func init() {
    +	t["CreateFolder"] = reflect.TypeOf((*CreateFolder)(nil)).Elem()
    +}
    +
    +type CreateFolderRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["CreateFolderRequestType"] = reflect.TypeOf((*CreateFolderRequestType)(nil)).Elem()
    +}
    +
    +type CreateFolderResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateGroup CreateGroupRequestType
    +
    +func init() {
    +	t["CreateGroup"] = reflect.TypeOf((*CreateGroup)(nil)).Elem()
    +}
    +
    +type CreateGroupRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Group BaseHostAccountSpec    `xml:"group,typeattr"`
    +}
    +
    +func init() {
    +	t["CreateGroupRequestType"] = reflect.TypeOf((*CreateGroupRequestType)(nil)).Elem()
    +}
    +
    +type CreateGroupResponse struct {
    +}
    +
    +type CreateImportSpec CreateImportSpecRequestType
    +
    +func init() {
    +	t["CreateImportSpec"] = reflect.TypeOf((*CreateImportSpec)(nil)).Elem()
    +}
    +
    +type CreateImportSpecRequestType struct {
    +	This          ManagedObjectReference    `xml:"_this"`
    +	OvfDescriptor string                    `xml:"ovfDescriptor"`
    +	ResourcePool  ManagedObjectReference    `xml:"resourcePool"`
    +	Datastore     ManagedObjectReference    `xml:"datastore"`
    +	Cisp          OvfCreateImportSpecParams `xml:"cisp"`
    +}
    +
    +func init() {
    +	t["CreateImportSpecRequestType"] = reflect.TypeOf((*CreateImportSpecRequestType)(nil)).Elem()
    +}
    +
    +type CreateImportSpecResponse struct {
    +	Returnval OvfCreateImportSpecResult `xml:"returnval"`
    +}
    +
    +type CreateInventoryView CreateInventoryViewRequestType
    +
    +func init() {
    +	t["CreateInventoryView"] = reflect.TypeOf((*CreateInventoryView)(nil)).Elem()
    +}
    +
    +type CreateInventoryViewRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["CreateInventoryViewRequestType"] = reflect.TypeOf((*CreateInventoryViewRequestType)(nil)).Elem()
    +}
    +
    +type CreateInventoryViewResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateIpPool CreateIpPoolRequestType
    +
    +func init() {
    +	t["CreateIpPool"] = reflect.TypeOf((*CreateIpPool)(nil)).Elem()
    +}
    +
    +type CreateIpPoolRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Dc   ManagedObjectReference `xml:"dc"`
    +	Pool IpPool                 `xml:"pool"`
    +}
    +
    +func init() {
    +	t["CreateIpPoolRequestType"] = reflect.TypeOf((*CreateIpPoolRequestType)(nil)).Elem()
    +}
    +
    +type CreateIpPoolResponse struct {
    +	Returnval int32 `xml:"returnval"`
    +}
    +
    +type CreateListView CreateListViewRequestType
    +
    +func init() {
    +	t["CreateListView"] = reflect.TypeOf((*CreateListView)(nil)).Elem()
    +}
    +
    +type CreateListViewFromView CreateListViewFromViewRequestType
    +
    +func init() {
    +	t["CreateListViewFromView"] = reflect.TypeOf((*CreateListViewFromView)(nil)).Elem()
    +}
    +
    +type CreateListViewFromViewRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	View ManagedObjectReference `xml:"view"`
    +}
    +
    +func init() {
    +	t["CreateListViewFromViewRequestType"] = reflect.TypeOf((*CreateListViewFromViewRequestType)(nil)).Elem()
    +}
    +
    +type CreateListViewFromViewResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateListViewRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Obj  []ManagedObjectReference `xml:"obj,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateListViewRequestType"] = reflect.TypeOf((*CreateListViewRequestType)(nil)).Elem()
    +}
    +
    +type CreateListViewResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateLocalDatastore CreateLocalDatastoreRequestType
    +
    +func init() {
    +	t["CreateLocalDatastore"] = reflect.TypeOf((*CreateLocalDatastore)(nil)).Elem()
    +}
    +
    +type CreateLocalDatastoreRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +	Path string                 `xml:"path"`
    +}
    +
    +func init() {
    +	t["CreateLocalDatastoreRequestType"] = reflect.TypeOf((*CreateLocalDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type CreateLocalDatastoreResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateNasDatastore CreateNasDatastoreRequestType
    +
    +func init() {
    +	t["CreateNasDatastore"] = reflect.TypeOf((*CreateNasDatastore)(nil)).Elem()
    +}
    +
    +type CreateNasDatastoreRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec HostNasVolumeSpec      `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateNasDatastoreRequestType"] = reflect.TypeOf((*CreateNasDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type CreateNasDatastoreResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateNvdimmNamespaceRequestType struct {
    +	This       ManagedObjectReference    `xml:"_this"`
    +	CreateSpec NvdimmNamespaceCreateSpec `xml:"createSpec"`
    +}
    +
    +func init() {
    +	t["CreateNvdimmNamespaceRequestType"] = reflect.TypeOf((*CreateNvdimmNamespaceRequestType)(nil)).Elem()
    +}
    +
    +type CreateNvdimmNamespace_Task CreateNvdimmNamespaceRequestType
    +
    +func init() {
    +	t["CreateNvdimmNamespace_Task"] = reflect.TypeOf((*CreateNvdimmNamespace_Task)(nil)).Elem()
    +}
    +
    +type CreateNvdimmNamespace_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateObjectScheduledTask CreateObjectScheduledTaskRequestType
    +
    +func init() {
    +	t["CreateObjectScheduledTask"] = reflect.TypeOf((*CreateObjectScheduledTask)(nil)).Elem()
    +}
    +
    +type CreateObjectScheduledTaskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Obj  ManagedObjectReference `xml:"obj"`
    +	Spec BaseScheduledTaskSpec  `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["CreateObjectScheduledTaskRequestType"] = reflect.TypeOf((*CreateObjectScheduledTaskRequestType)(nil)).Elem()
    +}
    +
    +type CreateObjectScheduledTaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreatePerfInterval CreatePerfIntervalRequestType
    +
    +func init() {
    +	t["CreatePerfInterval"] = reflect.TypeOf((*CreatePerfInterval)(nil)).Elem()
    +}
    +
    +type CreatePerfIntervalRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	IntervalId PerfInterval           `xml:"intervalId"`
    +}
    +
    +func init() {
    +	t["CreatePerfIntervalRequestType"] = reflect.TypeOf((*CreatePerfIntervalRequestType)(nil)).Elem()
    +}
    +
    +type CreatePerfIntervalResponse struct {
    +}
    +
    +type CreateProfile CreateProfileRequestType
    +
    +func init() {
    +	t["CreateProfile"] = reflect.TypeOf((*CreateProfile)(nil)).Elem()
    +}
    +
    +type CreateProfileRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	CreateSpec BaseProfileCreateSpec  `xml:"createSpec,typeattr"`
    +}
    +
    +func init() {
    +	t["CreateProfileRequestType"] = reflect.TypeOf((*CreateProfileRequestType)(nil)).Elem()
    +}
    +
    +type CreateProfileResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreatePropertyCollector CreatePropertyCollectorRequestType
    +
    +func init() {
    +	t["CreatePropertyCollector"] = reflect.TypeOf((*CreatePropertyCollector)(nil)).Elem()
    +}
    +
    +type CreatePropertyCollectorRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["CreatePropertyCollectorRequestType"] = reflect.TypeOf((*CreatePropertyCollectorRequestType)(nil)).Elem()
    +}
    +
    +type CreatePropertyCollectorResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateRegistryKeyInGuest CreateRegistryKeyInGuestRequestType
    +
    +func init() {
    +	t["CreateRegistryKeyInGuest"] = reflect.TypeOf((*CreateRegistryKeyInGuest)(nil)).Elem()
    +}
    +
    +type CreateRegistryKeyInGuestRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Vm         ManagedObjectReference  `xml:"vm"`
    +	Auth       BaseGuestAuthentication `xml:"auth,typeattr"`
    +	KeyName    GuestRegKeyNameSpec     `xml:"keyName"`
    +	IsVolatile bool                    `xml:"isVolatile"`
    +	ClassType  string                  `xml:"classType,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateRegistryKeyInGuestRequestType"] = reflect.TypeOf((*CreateRegistryKeyInGuestRequestType)(nil)).Elem()
    +}
    +
    +type CreateRegistryKeyInGuestResponse struct {
    +}
    +
    +type CreateResourcePool CreateResourcePoolRequestType
    +
    +func init() {
    +	t["CreateResourcePool"] = reflect.TypeOf((*CreateResourcePool)(nil)).Elem()
    +}
    +
    +type CreateResourcePoolRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +	Spec ResourceConfigSpec     `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateResourcePoolRequestType"] = reflect.TypeOf((*CreateResourcePoolRequestType)(nil)).Elem()
    +}
    +
    +type CreateResourcePoolResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateScheduledTask CreateScheduledTaskRequestType
    +
    +func init() {
    +	t["CreateScheduledTask"] = reflect.TypeOf((*CreateScheduledTask)(nil)).Elem()
    +}
    +
    +type CreateScheduledTaskRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +	Spec   BaseScheduledTaskSpec  `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["CreateScheduledTaskRequestType"] = reflect.TypeOf((*CreateScheduledTaskRequestType)(nil)).Elem()
    +}
    +
    +type CreateScheduledTaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateScreenshotRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["CreateScreenshotRequestType"] = reflect.TypeOf((*CreateScreenshotRequestType)(nil)).Elem()
    +}
    +
    +type CreateScreenshot_Task CreateScreenshotRequestType
    +
    +func init() {
    +	t["CreateScreenshot_Task"] = reflect.TypeOf((*CreateScreenshot_Task)(nil)).Elem()
    +}
    +
    +type CreateScreenshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateSecondaryVMExRequestType struct {
    +	This ManagedObjectReference    `xml:"_this"`
    +	Host *ManagedObjectReference   `xml:"host,omitempty"`
    +	Spec *FaultToleranceConfigSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateSecondaryVMExRequestType"] = reflect.TypeOf((*CreateSecondaryVMExRequestType)(nil)).Elem()
    +}
    +
    +type CreateSecondaryVMEx_Task CreateSecondaryVMExRequestType
    +
    +func init() {
    +	t["CreateSecondaryVMEx_Task"] = reflect.TypeOf((*CreateSecondaryVMEx_Task)(nil)).Elem()
    +}
    +
    +type CreateSecondaryVMEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateSecondaryVMRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateSecondaryVMRequestType"] = reflect.TypeOf((*CreateSecondaryVMRequestType)(nil)).Elem()
    +}
    +
    +type CreateSecondaryVM_Task CreateSecondaryVMRequestType
    +
    +func init() {
    +	t["CreateSecondaryVM_Task"] = reflect.TypeOf((*CreateSecondaryVM_Task)(nil)).Elem()
    +}
    +
    +type CreateSecondaryVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateSnapshotExRequestType struct {
    +	This        ManagedObjectReference             `xml:"_this"`
    +	Name        string                             `xml:"name"`
    +	Description string                             `xml:"description,omitempty"`
    +	Memory      bool                               `xml:"memory"`
    +	QuiesceSpec BaseVirtualMachineGuestQuiesceSpec `xml:"quiesceSpec,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["CreateSnapshotExRequestType"] = reflect.TypeOf((*CreateSnapshotExRequestType)(nil)).Elem()
    +}
    +
    +type CreateSnapshotEx_Task CreateSnapshotExRequestType
    +
    +func init() {
    +	t["CreateSnapshotEx_Task"] = reflect.TypeOf((*CreateSnapshotEx_Task)(nil)).Elem()
    +}
    +
    +type CreateSnapshotEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateSnapshotRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Name        string                 `xml:"name"`
    +	Description string                 `xml:"description,omitempty"`
    +	Memory      bool                   `xml:"memory"`
    +	Quiesce     bool                   `xml:"quiesce"`
    +}
    +
    +func init() {
    +	t["CreateSnapshotRequestType"] = reflect.TypeOf((*CreateSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type CreateSnapshot_Task CreateSnapshotRequestType
    +
    +func init() {
    +	t["CreateSnapshot_Task"] = reflect.TypeOf((*CreateSnapshot_Task)(nil)).Elem()
    +}
    +
    +type CreateSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateStoragePod CreateStoragePodRequestType
    +
    +func init() {
    +	t["CreateStoragePod"] = reflect.TypeOf((*CreateStoragePod)(nil)).Elem()
    +}
    +
    +type CreateStoragePodRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["CreateStoragePodRequestType"] = reflect.TypeOf((*CreateStoragePodRequestType)(nil)).Elem()
    +}
    +
    +type CreateStoragePodResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateTask CreateTaskRequestType
    +
    +func init() {
    +	t["CreateTask"] = reflect.TypeOf((*CreateTask)(nil)).Elem()
    +}
    +
    +type CreateTaskAction struct {
    +	Action
    +
    +	TaskTypeId string `xml:"taskTypeId"`
    +	Cancelable bool   `xml:"cancelable"`
    +}
    +
    +func init() {
    +	t["CreateTaskAction"] = reflect.TypeOf((*CreateTaskAction)(nil)).Elem()
    +}
    +
    +type CreateTaskRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	Obj           ManagedObjectReference `xml:"obj"`
    +	TaskTypeId    string                 `xml:"taskTypeId"`
    +	InitiatedBy   string                 `xml:"initiatedBy,omitempty"`
    +	Cancelable    bool                   `xml:"cancelable"`
    +	ParentTaskKey string                 `xml:"parentTaskKey,omitempty"`
    +	ActivationId  string                 `xml:"activationId,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateTaskRequestType"] = reflect.TypeOf((*CreateTaskRequestType)(nil)).Elem()
    +}
    +
    +type CreateTaskResponse struct {
    +	Returnval TaskInfo `xml:"returnval"`
    +}
    +
    +type CreateTemporaryDirectoryInGuest CreateTemporaryDirectoryInGuestRequestType
    +
    +func init() {
    +	t["CreateTemporaryDirectoryInGuest"] = reflect.TypeOf((*CreateTemporaryDirectoryInGuest)(nil)).Elem()
    +}
    +
    +type CreateTemporaryDirectoryInGuestRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Vm            ManagedObjectReference  `xml:"vm"`
    +	Auth          BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Prefix        string                  `xml:"prefix"`
    +	Suffix        string                  `xml:"suffix"`
    +	DirectoryPath string                  `xml:"directoryPath,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateTemporaryDirectoryInGuestRequestType"] = reflect.TypeOf((*CreateTemporaryDirectoryInGuestRequestType)(nil)).Elem()
    +}
    +
    +type CreateTemporaryDirectoryInGuestResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type CreateTemporaryFileInGuest CreateTemporaryFileInGuestRequestType
    +
    +func init() {
    +	t["CreateTemporaryFileInGuest"] = reflect.TypeOf((*CreateTemporaryFileInGuest)(nil)).Elem()
    +}
    +
    +type CreateTemporaryFileInGuestRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Vm            ManagedObjectReference  `xml:"vm"`
    +	Auth          BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Prefix        string                  `xml:"prefix"`
    +	Suffix        string                  `xml:"suffix"`
    +	DirectoryPath string                  `xml:"directoryPath,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateTemporaryFileInGuestRequestType"] = reflect.TypeOf((*CreateTemporaryFileInGuestRequestType)(nil)).Elem()
    +}
    +
    +type CreateTemporaryFileInGuestResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type CreateUser CreateUserRequestType
    +
    +func init() {
    +	t["CreateUser"] = reflect.TypeOf((*CreateUser)(nil)).Elem()
    +}
    +
    +type CreateUserRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	User BaseHostAccountSpec    `xml:"user,typeattr"`
    +}
    +
    +func init() {
    +	t["CreateUserRequestType"] = reflect.TypeOf((*CreateUserRequestType)(nil)).Elem()
    +}
    +
    +type CreateUserResponse struct {
    +}
    +
    +type CreateVApp CreateVAppRequestType
    +
    +func init() {
    +	t["CreateVApp"] = reflect.TypeOf((*CreateVApp)(nil)).Elem()
    +}
    +
    +type CreateVAppRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	ResSpec    ResourceConfigSpec      `xml:"resSpec"`
    +	ConfigSpec VAppConfigSpec          `xml:"configSpec"`
    +	VmFolder   *ManagedObjectReference `xml:"vmFolder,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateVAppRequestType"] = reflect.TypeOf((*CreateVAppRequestType)(nil)).Elem()
    +}
    +
    +type CreateVAppResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateVMRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Config VirtualMachineConfigSpec `xml:"config"`
    +	Pool   ManagedObjectReference   `xml:"pool"`
    +	Host   *ManagedObjectReference  `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["CreateVMRequestType"] = reflect.TypeOf((*CreateVMRequestType)(nil)).Elem()
    +}
    +
    +type CreateVM_Task CreateVMRequestType
    +
    +func init() {
    +	t["CreateVM_Task"] = reflect.TypeOf((*CreateVM_Task)(nil)).Elem()
    +}
    +
    +type CreateVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateVirtualDiskRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	Spec       BaseVirtualDiskSpec     `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["CreateVirtualDiskRequestType"] = reflect.TypeOf((*CreateVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type CreateVirtualDisk_Task CreateVirtualDiskRequestType
    +
    +func init() {
    +	t["CreateVirtualDisk_Task"] = reflect.TypeOf((*CreateVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type CreateVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateVmfsDatastore CreateVmfsDatastoreRequestType
    +
    +func init() {
    +	t["CreateVmfsDatastore"] = reflect.TypeOf((*CreateVmfsDatastore)(nil)).Elem()
    +}
    +
    +type CreateVmfsDatastoreRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Spec VmfsDatastoreCreateSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateVmfsDatastoreRequestType"] = reflect.TypeOf((*CreateVmfsDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type CreateVmfsDatastoreResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateVvolDatastore CreateVvolDatastoreRequestType
    +
    +func init() {
    +	t["CreateVvolDatastore"] = reflect.TypeOf((*CreateVvolDatastore)(nil)).Elem()
    +}
    +
    +type CreateVvolDatastoreRequestType struct {
    +	This ManagedObjectReference               `xml:"_this"`
    +	Spec HostDatastoreSystemVvolDatastoreSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CreateVvolDatastoreRequestType"] = reflect.TypeOf((*CreateVvolDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type CreateVvolDatastoreResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CryptoKeyId struct {
    +	DynamicData
    +
    +	KeyId      string         `xml:"keyId"`
    +	ProviderId *KeyProviderId `xml:"providerId,omitempty"`
    +}
    +
    +func init() {
    +	t["CryptoKeyId"] = reflect.TypeOf((*CryptoKeyId)(nil)).Elem()
    +}
    +
    +type CryptoKeyPlain struct {
    +	DynamicData
    +
    +	KeyId     CryptoKeyId `xml:"keyId"`
    +	Algorithm string      `xml:"algorithm"`
    +	KeyData   string      `xml:"keyData"`
    +}
    +
    +func init() {
    +	t["CryptoKeyPlain"] = reflect.TypeOf((*CryptoKeyPlain)(nil)).Elem()
    +}
    +
    +type CryptoKeyResult struct {
    +	DynamicData
    +
    +	KeyId   CryptoKeyId `xml:"keyId"`
    +	Success bool        `xml:"success"`
    +	Reason  string      `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["CryptoKeyResult"] = reflect.TypeOf((*CryptoKeyResult)(nil)).Elem()
    +}
    +
    +type CryptoManagerHostEnable CryptoManagerHostEnableRequestType
    +
    +func init() {
    +	t["CryptoManagerHostEnable"] = reflect.TypeOf((*CryptoManagerHostEnable)(nil)).Elem()
    +}
    +
    +type CryptoManagerHostEnableRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	InitialKey CryptoKeyPlain         `xml:"initialKey"`
    +}
    +
    +func init() {
    +	t["CryptoManagerHostEnableRequestType"] = reflect.TypeOf((*CryptoManagerHostEnableRequestType)(nil)).Elem()
    +}
    +
    +type CryptoManagerHostEnableResponse struct {
    +}
    +
    +type CryptoManagerHostPrepare CryptoManagerHostPrepareRequestType
    +
    +func init() {
    +	t["CryptoManagerHostPrepare"] = reflect.TypeOf((*CryptoManagerHostPrepare)(nil)).Elem()
    +}
    +
    +type CryptoManagerHostPrepareRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["CryptoManagerHostPrepareRequestType"] = reflect.TypeOf((*CryptoManagerHostPrepareRequestType)(nil)).Elem()
    +}
    +
    +type CryptoManagerHostPrepareResponse struct {
    +}
    +
    +type CryptoManagerKmipCertificateInfo struct {
    +	DynamicData
    +
    +	Subject             string    `xml:"subject"`
    +	Issuer              string    `xml:"issuer"`
    +	SerialNumber        string    `xml:"serialNumber"`
    +	NotBefore           time.Time `xml:"notBefore"`
    +	NotAfter            time.Time `xml:"notAfter"`
    +	Fingerprint         string    `xml:"fingerprint"`
    +	CheckTime           time.Time `xml:"checkTime"`
    +	SecondsSinceValid   int32     `xml:"secondsSinceValid,omitempty"`
    +	SecondsBeforeExpire int32     `xml:"secondsBeforeExpire,omitempty"`
    +}
    +
    +func init() {
    +	t["CryptoManagerKmipCertificateInfo"] = reflect.TypeOf((*CryptoManagerKmipCertificateInfo)(nil)).Elem()
    +}
    +
    +type CryptoManagerKmipClusterStatus struct {
    +	DynamicData
    +
    +	ClusterId      KeyProviderId                     `xml:"clusterId"`
    +	Servers        []CryptoManagerKmipServerStatus   `xml:"servers"`
    +	ClientCertInfo *CryptoManagerKmipCertificateInfo `xml:"clientCertInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["CryptoManagerKmipClusterStatus"] = reflect.TypeOf((*CryptoManagerKmipClusterStatus)(nil)).Elem()
    +}
    +
    +type CryptoManagerKmipServerCertInfo struct {
    +	DynamicData
    +
    +	Certificate       string                            `xml:"certificate"`
    +	CertInfo          *CryptoManagerKmipCertificateInfo `xml:"certInfo,omitempty"`
    +	ClientTrustServer *bool                             `xml:"clientTrustServer"`
    +}
    +
    +func init() {
    +	t["CryptoManagerKmipServerCertInfo"] = reflect.TypeOf((*CryptoManagerKmipServerCertInfo)(nil)).Elem()
    +}
    +
    +type CryptoManagerKmipServerStatus struct {
    +	DynamicData
    +
    +	Name              string                            `xml:"name"`
    +	Status            ManagedEntityStatus               `xml:"status"`
    +	ConnectionStatus  string                            `xml:"connectionStatus"`
    +	CertInfo          *CryptoManagerKmipCertificateInfo `xml:"certInfo,omitempty"`
    +	ClientTrustServer *bool                             `xml:"clientTrustServer"`
    +	ServerTrustClient *bool                             `xml:"serverTrustClient"`
    +}
    +
    +func init() {
    +	t["CryptoManagerKmipServerStatus"] = reflect.TypeOf((*CryptoManagerKmipServerStatus)(nil)).Elem()
    +}
    +
    +type CryptoSpec struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["CryptoSpec"] = reflect.TypeOf((*CryptoSpec)(nil)).Elem()
    +}
    +
    +type CryptoSpecDecrypt struct {
    +	CryptoSpec
    +}
    +
    +func init() {
    +	t["CryptoSpecDecrypt"] = reflect.TypeOf((*CryptoSpecDecrypt)(nil)).Elem()
    +}
    +
    +type CryptoSpecDeepRecrypt struct {
    +	CryptoSpec
    +
    +	NewKeyId CryptoKeyId `xml:"newKeyId"`
    +}
    +
    +func init() {
    +	t["CryptoSpecDeepRecrypt"] = reflect.TypeOf((*CryptoSpecDeepRecrypt)(nil)).Elem()
    +}
    +
    +type CryptoSpecEncrypt struct {
    +	CryptoSpec
    +
    +	CryptoKeyId CryptoKeyId `xml:"cryptoKeyId"`
    +}
    +
    +func init() {
    +	t["CryptoSpecEncrypt"] = reflect.TypeOf((*CryptoSpecEncrypt)(nil)).Elem()
    +}
    +
    +type CryptoSpecNoOp struct {
    +	CryptoSpec
    +}
    +
    +func init() {
    +	t["CryptoSpecNoOp"] = reflect.TypeOf((*CryptoSpecNoOp)(nil)).Elem()
    +}
    +
    +type CryptoSpecRegister struct {
    +	CryptoSpecNoOp
    +
    +	CryptoKeyId CryptoKeyId `xml:"cryptoKeyId"`
    +}
    +
    +func init() {
    +	t["CryptoSpecRegister"] = reflect.TypeOf((*CryptoSpecRegister)(nil)).Elem()
    +}
    +
    +type CryptoSpecShallowRecrypt struct {
    +	CryptoSpec
    +
    +	NewKeyId CryptoKeyId `xml:"newKeyId"`
    +}
    +
    +func init() {
    +	t["CryptoSpecShallowRecrypt"] = reflect.TypeOf((*CryptoSpecShallowRecrypt)(nil)).Elem()
    +}
    +
    +type CryptoUnlockRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["CryptoUnlockRequestType"] = reflect.TypeOf((*CryptoUnlockRequestType)(nil)).Elem()
    +}
    +
    +type CryptoUnlock_Task CryptoUnlockRequestType
    +
    +func init() {
    +	t["CryptoUnlock_Task"] = reflect.TypeOf((*CryptoUnlock_Task)(nil)).Elem()
    +}
    +
    +type CryptoUnlock_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CurrentTime CurrentTimeRequestType
    +
    +func init() {
    +	t["CurrentTime"] = reflect.TypeOf((*CurrentTime)(nil)).Elem()
    +}
    +
    +type CurrentTimeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["CurrentTimeRequestType"] = reflect.TypeOf((*CurrentTimeRequestType)(nil)).Elem()
    +}
    +
    +type CurrentTimeResponse struct {
    +	Returnval time.Time `xml:"returnval"`
    +}
    +
    +type CustomFieldDef struct {
    +	DynamicData
    +
    +	Key                     int32               `xml:"key"`
    +	Name                    string              `xml:"name"`
    +	Type                    string              `xml:"type"`
    +	ManagedObjectType       string              `xml:"managedObjectType,omitempty"`
    +	FieldDefPrivileges      *PrivilegePolicyDef `xml:"fieldDefPrivileges,omitempty"`
    +	FieldInstancePrivileges *PrivilegePolicyDef `xml:"fieldInstancePrivileges,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomFieldDef"] = reflect.TypeOf((*CustomFieldDef)(nil)).Elem()
    +}
    +
    +type CustomFieldDefAddedEvent struct {
    +	CustomFieldDefEvent
    +}
    +
    +func init() {
    +	t["CustomFieldDefAddedEvent"] = reflect.TypeOf((*CustomFieldDefAddedEvent)(nil)).Elem()
    +}
    +
    +type CustomFieldDefEvent struct {
    +	CustomFieldEvent
    +
    +	FieldKey int32  `xml:"fieldKey"`
    +	Name     string `xml:"name"`
    +}
    +
    +func init() {
    +	t["CustomFieldDefEvent"] = reflect.TypeOf((*CustomFieldDefEvent)(nil)).Elem()
    +}
    +
    +type CustomFieldDefRemovedEvent struct {
    +	CustomFieldDefEvent
    +}
    +
    +func init() {
    +	t["CustomFieldDefRemovedEvent"] = reflect.TypeOf((*CustomFieldDefRemovedEvent)(nil)).Elem()
    +}
    +
    +type CustomFieldDefRenamedEvent struct {
    +	CustomFieldDefEvent
    +
    +	NewName string `xml:"newName"`
    +}
    +
    +func init() {
    +	t["CustomFieldDefRenamedEvent"] = reflect.TypeOf((*CustomFieldDefRenamedEvent)(nil)).Elem()
    +}
    +
    +type CustomFieldEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["CustomFieldEvent"] = reflect.TypeOf((*CustomFieldEvent)(nil)).Elem()
    +}
    +
    +type CustomFieldStringValue struct {
    +	CustomFieldValue
    +
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["CustomFieldStringValue"] = reflect.TypeOf((*CustomFieldStringValue)(nil)).Elem()
    +}
    +
    +type CustomFieldValue struct {
    +	DynamicData
    +
    +	Key int32 `xml:"key"`
    +}
    +
    +func init() {
    +	t["CustomFieldValue"] = reflect.TypeOf((*CustomFieldValue)(nil)).Elem()
    +}
    +
    +type CustomFieldValueChangedEvent struct {
    +	CustomFieldEvent
    +
    +	Entity    ManagedEntityEventArgument `xml:"entity"`
    +	FieldKey  int32                      `xml:"fieldKey"`
    +	Name      string                     `xml:"name"`
    +	Value     string                     `xml:"value"`
    +	PrevState string                     `xml:"prevState,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomFieldValueChangedEvent"] = reflect.TypeOf((*CustomFieldValueChangedEvent)(nil)).Elem()
    +}
    +
    +type CustomizationAdapterMapping struct {
    +	DynamicData
    +
    +	MacAddress string                  `xml:"macAddress,omitempty"`
    +	Adapter    CustomizationIPSettings `xml:"adapter"`
    +}
    +
    +func init() {
    +	t["CustomizationAdapterMapping"] = reflect.TypeOf((*CustomizationAdapterMapping)(nil)).Elem()
    +}
    +
    +type CustomizationAutoIpV6Generator struct {
    +	CustomizationIpV6Generator
    +}
    +
    +func init() {
    +	t["CustomizationAutoIpV6Generator"] = reflect.TypeOf((*CustomizationAutoIpV6Generator)(nil)).Elem()
    +}
    +
    +type CustomizationCustomIpGenerator struct {
    +	CustomizationIpGenerator
    +
    +	Argument string `xml:"argument,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationCustomIpGenerator"] = reflect.TypeOf((*CustomizationCustomIpGenerator)(nil)).Elem()
    +}
    +
    +type CustomizationCustomIpV6Generator struct {
    +	CustomizationIpV6Generator
    +
    +	Argument string `xml:"argument,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationCustomIpV6Generator"] = reflect.TypeOf((*CustomizationCustomIpV6Generator)(nil)).Elem()
    +}
    +
    +type CustomizationCustomName struct {
    +	CustomizationName
    +
    +	Argument string `xml:"argument,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationCustomName"] = reflect.TypeOf((*CustomizationCustomName)(nil)).Elem()
    +}
    +
    +type CustomizationDhcpIpGenerator struct {
    +	CustomizationIpGenerator
    +}
    +
    +func init() {
    +	t["CustomizationDhcpIpGenerator"] = reflect.TypeOf((*CustomizationDhcpIpGenerator)(nil)).Elem()
    +}
    +
    +type CustomizationDhcpIpV6Generator struct {
    +	CustomizationIpV6Generator
    +}
    +
    +func init() {
    +	t["CustomizationDhcpIpV6Generator"] = reflect.TypeOf((*CustomizationDhcpIpV6Generator)(nil)).Elem()
    +}
    +
    +type CustomizationEvent struct {
    +	VmEvent
    +
    +	LogLocation string `xml:"logLocation,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationEvent"] = reflect.TypeOf((*CustomizationEvent)(nil)).Elem()
    +}
    +
    +type CustomizationFailed struct {
    +	CustomizationEvent
    +}
    +
    +func init() {
    +	t["CustomizationFailed"] = reflect.TypeOf((*CustomizationFailed)(nil)).Elem()
    +}
    +
    +type CustomizationFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["CustomizationFault"] = reflect.TypeOf((*CustomizationFault)(nil)).Elem()
    +}
    +
    +type CustomizationFaultFault BaseCustomizationFault
    +
    +func init() {
    +	t["CustomizationFaultFault"] = reflect.TypeOf((*CustomizationFaultFault)(nil)).Elem()
    +}
    +
    +type CustomizationFixedIp struct {
    +	CustomizationIpGenerator
    +
    +	IpAddress string `xml:"ipAddress"`
    +}
    +
    +func init() {
    +	t["CustomizationFixedIp"] = reflect.TypeOf((*CustomizationFixedIp)(nil)).Elem()
    +}
    +
    +type CustomizationFixedIpV6 struct {
    +	CustomizationIpV6Generator
    +
    +	IpAddress  string `xml:"ipAddress"`
    +	SubnetMask int32  `xml:"subnetMask"`
    +}
    +
    +func init() {
    +	t["CustomizationFixedIpV6"] = reflect.TypeOf((*CustomizationFixedIpV6)(nil)).Elem()
    +}
    +
    +type CustomizationFixedName struct {
    +	CustomizationName
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["CustomizationFixedName"] = reflect.TypeOf((*CustomizationFixedName)(nil)).Elem()
    +}
    +
    +type CustomizationGlobalIPSettings struct {
    +	DynamicData
    +
    +	DnsSuffixList []string `xml:"dnsSuffixList,omitempty"`
    +	DnsServerList []string `xml:"dnsServerList,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationGlobalIPSettings"] = reflect.TypeOf((*CustomizationGlobalIPSettings)(nil)).Elem()
    +}
    +
    +type CustomizationGuiRunOnce struct {
    +	DynamicData
    +
    +	CommandList []string `xml:"commandList"`
    +}
    +
    +func init() {
    +	t["CustomizationGuiRunOnce"] = reflect.TypeOf((*CustomizationGuiRunOnce)(nil)).Elem()
    +}
    +
    +type CustomizationGuiUnattended struct {
    +	DynamicData
    +
    +	Password       *CustomizationPassword `xml:"password,omitempty"`
    +	TimeZone       int32                  `xml:"timeZone"`
    +	AutoLogon      bool                   `xml:"autoLogon"`
    +	AutoLogonCount int32                  `xml:"autoLogonCount"`
    +}
    +
    +func init() {
    +	t["CustomizationGuiUnattended"] = reflect.TypeOf((*CustomizationGuiUnattended)(nil)).Elem()
    +}
    +
    +type CustomizationIPSettings struct {
    +	DynamicData
    +
    +	Ip            BaseCustomizationIpGenerator            `xml:"ip,typeattr"`
    +	SubnetMask    string                                  `xml:"subnetMask,omitempty"`
    +	Gateway       []string                                `xml:"gateway,omitempty"`
    +	IpV6Spec      *CustomizationIPSettingsIpV6AddressSpec `xml:"ipV6Spec,omitempty"`
    +	DnsServerList []string                                `xml:"dnsServerList,omitempty"`
    +	DnsDomain     string                                  `xml:"dnsDomain,omitempty"`
    +	PrimaryWINS   string                                  `xml:"primaryWINS,omitempty"`
    +	SecondaryWINS string                                  `xml:"secondaryWINS,omitempty"`
    +	NetBIOS       CustomizationNetBIOSMode                `xml:"netBIOS,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationIPSettings"] = reflect.TypeOf((*CustomizationIPSettings)(nil)).Elem()
    +}
    +
    +type CustomizationIPSettingsIpV6AddressSpec struct {
    +	DynamicData
    +
    +	Ip      []BaseCustomizationIpV6Generator `xml:"ip,typeattr"`
    +	Gateway []string                         `xml:"gateway,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationIPSettingsIpV6AddressSpec"] = reflect.TypeOf((*CustomizationIPSettingsIpV6AddressSpec)(nil)).Elem()
    +}
    +
    +type CustomizationIdentification struct {
    +	DynamicData
    +
    +	JoinWorkgroup       string                 `xml:"joinWorkgroup,omitempty"`
    +	JoinDomain          string                 `xml:"joinDomain,omitempty"`
    +	DomainAdmin         string                 `xml:"domainAdmin,omitempty"`
    +	DomainAdminPassword *CustomizationPassword `xml:"domainAdminPassword,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationIdentification"] = reflect.TypeOf((*CustomizationIdentification)(nil)).Elem()
    +}
    +
    +type CustomizationIdentitySettings struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["CustomizationIdentitySettings"] = reflect.TypeOf((*CustomizationIdentitySettings)(nil)).Elem()
    +}
    +
    +type CustomizationIpGenerator struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["CustomizationIpGenerator"] = reflect.TypeOf((*CustomizationIpGenerator)(nil)).Elem()
    +}
    +
    +type CustomizationIpV6Generator struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["CustomizationIpV6Generator"] = reflect.TypeOf((*CustomizationIpV6Generator)(nil)).Elem()
    +}
    +
    +type CustomizationLicenseFilePrintData struct {
    +	DynamicData
    +
    +	AutoMode  CustomizationLicenseDataMode `xml:"autoMode"`
    +	AutoUsers int32                        `xml:"autoUsers,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationLicenseFilePrintData"] = reflect.TypeOf((*CustomizationLicenseFilePrintData)(nil)).Elem()
    +}
    +
    +type CustomizationLinuxIdentityFailed struct {
    +	CustomizationFailed
    +}
    +
    +func init() {
    +	t["CustomizationLinuxIdentityFailed"] = reflect.TypeOf((*CustomizationLinuxIdentityFailed)(nil)).Elem()
    +}
    +
    +type CustomizationLinuxOptions struct {
    +	CustomizationOptions
    +}
    +
    +func init() {
    +	t["CustomizationLinuxOptions"] = reflect.TypeOf((*CustomizationLinuxOptions)(nil)).Elem()
    +}
    +
    +type CustomizationLinuxPrep struct {
    +	CustomizationIdentitySettings
    +
    +	HostName   BaseCustomizationName `xml:"hostName,typeattr"`
    +	Domain     string                `xml:"domain"`
    +	TimeZone   string                `xml:"timeZone,omitempty"`
    +	HwClockUTC *bool                 `xml:"hwClockUTC"`
    +}
    +
    +func init() {
    +	t["CustomizationLinuxPrep"] = reflect.TypeOf((*CustomizationLinuxPrep)(nil)).Elem()
    +}
    +
    +type CustomizationName struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["CustomizationName"] = reflect.TypeOf((*CustomizationName)(nil)).Elem()
    +}
    +
    +type CustomizationNetworkSetupFailed struct {
    +	CustomizationFailed
    +}
    +
    +func init() {
    +	t["CustomizationNetworkSetupFailed"] = reflect.TypeOf((*CustomizationNetworkSetupFailed)(nil)).Elem()
    +}
    +
    +type CustomizationOptions struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["CustomizationOptions"] = reflect.TypeOf((*CustomizationOptions)(nil)).Elem()
    +}
    +
    +type CustomizationPassword struct {
    +	DynamicData
    +
    +	Value     string `xml:"value"`
    +	PlainText bool   `xml:"plainText"`
    +}
    +
    +func init() {
    +	t["CustomizationPassword"] = reflect.TypeOf((*CustomizationPassword)(nil)).Elem()
    +}
    +
    +type CustomizationPending struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["CustomizationPending"] = reflect.TypeOf((*CustomizationPending)(nil)).Elem()
    +}
    +
    +type CustomizationPendingFault CustomizationPending
    +
    +func init() {
    +	t["CustomizationPendingFault"] = reflect.TypeOf((*CustomizationPendingFault)(nil)).Elem()
    +}
    +
    +type CustomizationPrefixName struct {
    +	CustomizationName
    +
    +	Base string `xml:"base"`
    +}
    +
    +func init() {
    +	t["CustomizationPrefixName"] = reflect.TypeOf((*CustomizationPrefixName)(nil)).Elem()
    +}
    +
    +type CustomizationSpec struct {
    +	DynamicData
    +
    +	Options          BaseCustomizationOptions          `xml:"options,omitempty,typeattr"`
    +	Identity         BaseCustomizationIdentitySettings `xml:"identity,typeattr"`
    +	GlobalIPSettings CustomizationGlobalIPSettings     `xml:"globalIPSettings"`
    +	NicSettingMap    []CustomizationAdapterMapping     `xml:"nicSettingMap,omitempty"`
    +	EncryptionKey    []byte                            `xml:"encryptionKey,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationSpec"] = reflect.TypeOf((*CustomizationSpec)(nil)).Elem()
    +}
    +
    +type CustomizationSpecInfo struct {
    +	DynamicData
    +
    +	Name           string     `xml:"name"`
    +	Description    string     `xml:"description"`
    +	Type           string     `xml:"type"`
    +	ChangeVersion  string     `xml:"changeVersion,omitempty"`
    +	LastUpdateTime *time.Time `xml:"lastUpdateTime"`
    +}
    +
    +func init() {
    +	t["CustomizationSpecInfo"] = reflect.TypeOf((*CustomizationSpecInfo)(nil)).Elem()
    +}
    +
    +type CustomizationSpecItem struct {
    +	DynamicData
    +
    +	Info CustomizationSpecInfo `xml:"info"`
    +	Spec CustomizationSpec     `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CustomizationSpecItem"] = reflect.TypeOf((*CustomizationSpecItem)(nil)).Elem()
    +}
    +
    +type CustomizationSpecItemToXml CustomizationSpecItemToXmlRequestType
    +
    +func init() {
    +	t["CustomizationSpecItemToXml"] = reflect.TypeOf((*CustomizationSpecItemToXml)(nil)).Elem()
    +}
    +
    +type CustomizationSpecItemToXmlRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Item CustomizationSpecItem  `xml:"item"`
    +}
    +
    +func init() {
    +	t["CustomizationSpecItemToXmlRequestType"] = reflect.TypeOf((*CustomizationSpecItemToXmlRequestType)(nil)).Elem()
    +}
    +
    +type CustomizationSpecItemToXmlResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type CustomizationStartedEvent struct {
    +	CustomizationEvent
    +}
    +
    +func init() {
    +	t["CustomizationStartedEvent"] = reflect.TypeOf((*CustomizationStartedEvent)(nil)).Elem()
    +}
    +
    +type CustomizationStatelessIpV6Generator struct {
    +	CustomizationIpV6Generator
    +}
    +
    +func init() {
    +	t["CustomizationStatelessIpV6Generator"] = reflect.TypeOf((*CustomizationStatelessIpV6Generator)(nil)).Elem()
    +}
    +
    +type CustomizationSucceeded struct {
    +	CustomizationEvent
    +}
    +
    +func init() {
    +	t["CustomizationSucceeded"] = reflect.TypeOf((*CustomizationSucceeded)(nil)).Elem()
    +}
    +
    +type CustomizationSysprep struct {
    +	CustomizationIdentitySettings
    +
    +	GuiUnattended        CustomizationGuiUnattended         `xml:"guiUnattended"`
    +	UserData             CustomizationUserData              `xml:"userData"`
    +	GuiRunOnce           *CustomizationGuiRunOnce           `xml:"guiRunOnce,omitempty"`
    +	Identification       CustomizationIdentification        `xml:"identification"`
    +	LicenseFilePrintData *CustomizationLicenseFilePrintData `xml:"licenseFilePrintData,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationSysprep"] = reflect.TypeOf((*CustomizationSysprep)(nil)).Elem()
    +}
    +
    +type CustomizationSysprepFailed struct {
    +	CustomizationFailed
    +
    +	SysprepVersion string `xml:"sysprepVersion"`
    +	SystemVersion  string `xml:"systemVersion"`
    +}
    +
    +func init() {
    +	t["CustomizationSysprepFailed"] = reflect.TypeOf((*CustomizationSysprepFailed)(nil)).Elem()
    +}
    +
    +type CustomizationSysprepText struct {
    +	CustomizationIdentitySettings
    +
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["CustomizationSysprepText"] = reflect.TypeOf((*CustomizationSysprepText)(nil)).Elem()
    +}
    +
    +type CustomizationUnknownFailure struct {
    +	CustomizationFailed
    +}
    +
    +func init() {
    +	t["CustomizationUnknownFailure"] = reflect.TypeOf((*CustomizationUnknownFailure)(nil)).Elem()
    +}
    +
    +type CustomizationUnknownIpGenerator struct {
    +	CustomizationIpGenerator
    +}
    +
    +func init() {
    +	t["CustomizationUnknownIpGenerator"] = reflect.TypeOf((*CustomizationUnknownIpGenerator)(nil)).Elem()
    +}
    +
    +type CustomizationUnknownIpV6Generator struct {
    +	CustomizationIpV6Generator
    +}
    +
    +func init() {
    +	t["CustomizationUnknownIpV6Generator"] = reflect.TypeOf((*CustomizationUnknownIpV6Generator)(nil)).Elem()
    +}
    +
    +type CustomizationUnknownName struct {
    +	CustomizationName
    +}
    +
    +func init() {
    +	t["CustomizationUnknownName"] = reflect.TypeOf((*CustomizationUnknownName)(nil)).Elem()
    +}
    +
    +type CustomizationUserData struct {
    +	DynamicData
    +
    +	FullName     string                `xml:"fullName"`
    +	OrgName      string                `xml:"orgName"`
    +	ComputerName BaseCustomizationName `xml:"computerName,typeattr"`
    +	ProductId    string                `xml:"productId"`
    +}
    +
    +func init() {
    +	t["CustomizationUserData"] = reflect.TypeOf((*CustomizationUserData)(nil)).Elem()
    +}
    +
    +type CustomizationVirtualMachineName struct {
    +	CustomizationName
    +}
    +
    +func init() {
    +	t["CustomizationVirtualMachineName"] = reflect.TypeOf((*CustomizationVirtualMachineName)(nil)).Elem()
    +}
    +
    +type CustomizationWinOptions struct {
    +	CustomizationOptions
    +
    +	ChangeSID      bool                             `xml:"changeSID"`
    +	DeleteAccounts bool                             `xml:"deleteAccounts"`
    +	Reboot         CustomizationSysprepRebootOption `xml:"reboot,omitempty"`
    +}
    +
    +func init() {
    +	t["CustomizationWinOptions"] = reflect.TypeOf((*CustomizationWinOptions)(nil)).Elem()
    +}
    +
    +type CustomizeVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec CustomizationSpec      `xml:"spec"`
    +}
    +
    +func init() {
    +	t["CustomizeVMRequestType"] = reflect.TypeOf((*CustomizeVMRequestType)(nil)).Elem()
    +}
    +
    +type CustomizeVM_Task CustomizeVMRequestType
    +
    +func init() {
    +	t["CustomizeVM_Task"] = reflect.TypeOf((*CustomizeVM_Task)(nil)).Elem()
    +}
    +
    +type CustomizeVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DVPortConfigInfo struct {
    +	DynamicData
    +
    +	Name          string                   `xml:"name,omitempty"`
    +	Scope         []ManagedObjectReference `xml:"scope,omitempty"`
    +	Description   string                   `xml:"description,omitempty"`
    +	Setting       BaseDVPortSetting        `xml:"setting,omitempty,typeattr"`
    +	ConfigVersion string                   `xml:"configVersion"`
    +}
    +
    +func init() {
    +	t["DVPortConfigInfo"] = reflect.TypeOf((*DVPortConfigInfo)(nil)).Elem()
    +}
    +
    +type DVPortConfigSpec struct {
    +	DynamicData
    +
    +	Operation     string                   `xml:"operation"`
    +	Key           string                   `xml:"key,omitempty"`
    +	Name          string                   `xml:"name,omitempty"`
    +	Scope         []ManagedObjectReference `xml:"scope,omitempty"`
    +	Description   string                   `xml:"description,omitempty"`
    +	Setting       BaseDVPortSetting        `xml:"setting,omitempty,typeattr"`
    +	ConfigVersion string                   `xml:"configVersion,omitempty"`
    +}
    +
    +func init() {
    +	t["DVPortConfigSpec"] = reflect.TypeOf((*DVPortConfigSpec)(nil)).Elem()
    +}
    +
    +type DVPortNotSupported struct {
    +	DeviceBackingNotSupported
    +}
    +
    +func init() {
    +	t["DVPortNotSupported"] = reflect.TypeOf((*DVPortNotSupported)(nil)).Elem()
    +}
    +
    +type DVPortNotSupportedFault DVPortNotSupported
    +
    +func init() {
    +	t["DVPortNotSupportedFault"] = reflect.TypeOf((*DVPortNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DVPortSetting struct {
    +	DynamicData
    +
    +	Blocked                 *BoolPolicy              `xml:"blocked,omitempty"`
    +	VmDirectPathGen2Allowed *BoolPolicy              `xml:"vmDirectPathGen2Allowed,omitempty"`
    +	InShapingPolicy         *DVSTrafficShapingPolicy `xml:"inShapingPolicy,omitempty"`
    +	OutShapingPolicy        *DVSTrafficShapingPolicy `xml:"outShapingPolicy,omitempty"`
    +	VendorSpecificConfig    *DVSVendorSpecificConfig `xml:"vendorSpecificConfig,omitempty"`
    +	NetworkResourcePoolKey  *StringPolicy            `xml:"networkResourcePoolKey,omitempty"`
    +	FilterPolicy            *DvsFilterPolicy         `xml:"filterPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["DVPortSetting"] = reflect.TypeOf((*DVPortSetting)(nil)).Elem()
    +}
    +
    +type DVPortState struct {
    +	DynamicData
    +
    +	RuntimeInfo         *DVPortStatus                             `xml:"runtimeInfo,omitempty"`
    +	Stats               DistributedVirtualSwitchPortStatistics    `xml:"stats"`
    +	VendorSpecificState []DistributedVirtualSwitchKeyedOpaqueBlob `xml:"vendorSpecificState,omitempty"`
    +}
    +
    +func init() {
    +	t["DVPortState"] = reflect.TypeOf((*DVPortState)(nil)).Elem()
    +}
    +
    +type DVPortStatus struct {
    +	DynamicData
    +
    +	LinkUp                                 bool           `xml:"linkUp"`
    +	Blocked                                bool           `xml:"blocked"`
    +	VlanIds                                []NumericRange `xml:"vlanIds,omitempty"`
    +	TrunkingMode                           *bool          `xml:"trunkingMode"`
    +	Mtu                                    int32          `xml:"mtu,omitempty"`
    +	LinkPeer                               string         `xml:"linkPeer,omitempty"`
    +	MacAddress                             string         `xml:"macAddress,omitempty"`
    +	StatusDetail                           string         `xml:"statusDetail,omitempty"`
    +	VmDirectPathGen2Active                 *bool          `xml:"vmDirectPathGen2Active"`
    +	VmDirectPathGen2InactiveReasonNetwork  []string       `xml:"vmDirectPathGen2InactiveReasonNetwork,omitempty"`
    +	VmDirectPathGen2InactiveReasonOther    []string       `xml:"vmDirectPathGen2InactiveReasonOther,omitempty"`
    +	VmDirectPathGen2InactiveReasonExtended string         `xml:"vmDirectPathGen2InactiveReasonExtended,omitempty"`
    +}
    +
    +func init() {
    +	t["DVPortStatus"] = reflect.TypeOf((*DVPortStatus)(nil)).Elem()
    +}
    +
    +type DVPortgroupConfigInfo struct {
    +	DynamicData
    +
    +	Key                          string                                    `xml:"key"`
    +	Name                         string                                    `xml:"name"`
    +	NumPorts                     int32                                     `xml:"numPorts"`
    +	DistributedVirtualSwitch     *ManagedObjectReference                   `xml:"distributedVirtualSwitch,omitempty"`
    +	DefaultPortConfig            BaseDVPortSetting                         `xml:"defaultPortConfig,omitempty,typeattr"`
    +	Description                  string                                    `xml:"description,omitempty"`
    +	Type                         string                                    `xml:"type"`
    +	Policy                       BaseDVPortgroupPolicy                     `xml:"policy,typeattr"`
    +	PortNameFormat               string                                    `xml:"portNameFormat,omitempty"`
    +	Scope                        []ManagedObjectReference                  `xml:"scope,omitempty"`
    +	VendorSpecificConfig         []DistributedVirtualSwitchKeyedOpaqueBlob `xml:"vendorSpecificConfig,omitempty"`
    +	ConfigVersion                string                                    `xml:"configVersion,omitempty"`
    +	AutoExpand                   *bool                                     `xml:"autoExpand"`
    +	VmVnicNetworkResourcePoolKey string                                    `xml:"vmVnicNetworkResourcePoolKey,omitempty"`
    +	Uplink                       *bool                                     `xml:"uplink"`
    +}
    +
    +func init() {
    +	t["DVPortgroupConfigInfo"] = reflect.TypeOf((*DVPortgroupConfigInfo)(nil)).Elem()
    +}
    +
    +type DVPortgroupConfigSpec struct {
    +	DynamicData
    +
    +	ConfigVersion                string                                    `xml:"configVersion,omitempty"`
    +	Name                         string                                    `xml:"name,omitempty"`
    +	NumPorts                     int32                                     `xml:"numPorts,omitempty"`
    +	PortNameFormat               string                                    `xml:"portNameFormat,omitempty"`
    +	DefaultPortConfig            BaseDVPortSetting                         `xml:"defaultPortConfig,omitempty,typeattr"`
    +	Description                  string                                    `xml:"description,omitempty"`
    +	Type                         string                                    `xml:"type,omitempty"`
    +	Scope                        []ManagedObjectReference                  `xml:"scope,omitempty"`
    +	Policy                       BaseDVPortgroupPolicy                     `xml:"policy,omitempty,typeattr"`
    +	VendorSpecificConfig         []DistributedVirtualSwitchKeyedOpaqueBlob `xml:"vendorSpecificConfig,omitempty"`
    +	AutoExpand                   *bool                                     `xml:"autoExpand"`
    +	VmVnicNetworkResourcePoolKey string                                    `xml:"vmVnicNetworkResourcePoolKey,omitempty"`
    +}
    +
    +func init() {
    +	t["DVPortgroupConfigSpec"] = reflect.TypeOf((*DVPortgroupConfigSpec)(nil)).Elem()
    +}
    +
    +type DVPortgroupCreatedEvent struct {
    +	DVPortgroupEvent
    +}
    +
    +func init() {
    +	t["DVPortgroupCreatedEvent"] = reflect.TypeOf((*DVPortgroupCreatedEvent)(nil)).Elem()
    +}
    +
    +type DVPortgroupDestroyedEvent struct {
    +	DVPortgroupEvent
    +}
    +
    +func init() {
    +	t["DVPortgroupDestroyedEvent"] = reflect.TypeOf((*DVPortgroupDestroyedEvent)(nil)).Elem()
    +}
    +
    +type DVPortgroupEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["DVPortgroupEvent"] = reflect.TypeOf((*DVPortgroupEvent)(nil)).Elem()
    +}
    +
    +type DVPortgroupPolicy struct {
    +	DynamicData
    +
    +	BlockOverrideAllowed               bool  `xml:"blockOverrideAllowed"`
    +	ShapingOverrideAllowed             bool  `xml:"shapingOverrideAllowed"`
    +	VendorConfigOverrideAllowed        bool  `xml:"vendorConfigOverrideAllowed"`
    +	LivePortMovingAllowed              bool  `xml:"livePortMovingAllowed"`
    +	PortConfigResetAtDisconnect        bool  `xml:"portConfigResetAtDisconnect"`
    +	NetworkResourcePoolOverrideAllowed *bool `xml:"networkResourcePoolOverrideAllowed"`
    +	TrafficFilterOverrideAllowed       *bool `xml:"trafficFilterOverrideAllowed"`
    +}
    +
    +func init() {
    +	t["DVPortgroupPolicy"] = reflect.TypeOf((*DVPortgroupPolicy)(nil)).Elem()
    +}
    +
    +type DVPortgroupReconfiguredEvent struct {
    +	DVPortgroupEvent
    +
    +	ConfigSpec    DVPortgroupConfigSpec     `xml:"configSpec"`
    +	ConfigChanges *ChangesInfoEventArgument `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["DVPortgroupReconfiguredEvent"] = reflect.TypeOf((*DVPortgroupReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type DVPortgroupRenamedEvent struct {
    +	DVPortgroupEvent
    +
    +	OldName string `xml:"oldName"`
    +	NewName string `xml:"newName"`
    +}
    +
    +func init() {
    +	t["DVPortgroupRenamedEvent"] = reflect.TypeOf((*DVPortgroupRenamedEvent)(nil)).Elem()
    +}
    +
    +type DVPortgroupRollbackRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	EntityBackup *EntityBackupConfig    `xml:"entityBackup,omitempty"`
    +}
    +
    +func init() {
    +	t["DVPortgroupRollbackRequestType"] = reflect.TypeOf((*DVPortgroupRollbackRequestType)(nil)).Elem()
    +}
    +
    +type DVPortgroupRollback_Task DVPortgroupRollbackRequestType
    +
    +func init() {
    +	t["DVPortgroupRollback_Task"] = reflect.TypeOf((*DVPortgroupRollback_Task)(nil)).Elem()
    +}
    +
    +type DVPortgroupRollback_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DVPortgroupSelection struct {
    +	SelectionSet
    +
    +	DvsUuid      string   `xml:"dvsUuid"`
    +	PortgroupKey []string `xml:"portgroupKey"`
    +}
    +
    +func init() {
    +	t["DVPortgroupSelection"] = reflect.TypeOf((*DVPortgroupSelection)(nil)).Elem()
    +}
    +
    +type DVSBackupRestoreCapability struct {
    +	DynamicData
    +
    +	BackupRestoreSupported bool `xml:"backupRestoreSupported"`
    +}
    +
    +func init() {
    +	t["DVSBackupRestoreCapability"] = reflect.TypeOf((*DVSBackupRestoreCapability)(nil)).Elem()
    +}
    +
    +type DVSCapability struct {
    +	DynamicData
    +
    +	DvsOperationSupported              *bool                                     `xml:"dvsOperationSupported"`
    +	DvPortGroupOperationSupported      *bool                                     `xml:"dvPortGroupOperationSupported"`
    +	DvPortOperationSupported           *bool                                     `xml:"dvPortOperationSupported"`
    +	CompatibleHostComponentProductInfo []DistributedVirtualSwitchHostProductSpec `xml:"compatibleHostComponentProductInfo,omitempty"`
    +	FeaturesSupported                  BaseDVSFeatureCapability                  `xml:"featuresSupported,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["DVSCapability"] = reflect.TypeOf((*DVSCapability)(nil)).Elem()
    +}
    +
    +type DVSConfigInfo struct {
    +	DynamicData
    +
    +	Uuid                                 string                                    `xml:"uuid"`
    +	Name                                 string                                    `xml:"name"`
    +	NumStandalonePorts                   int32                                     `xml:"numStandalonePorts"`
    +	NumPorts                             int32                                     `xml:"numPorts"`
    +	MaxPorts                             int32                                     `xml:"maxPorts"`
    +	UplinkPortPolicy                     BaseDVSUplinkPortPolicy                   `xml:"uplinkPortPolicy,typeattr"`
    +	UplinkPortgroup                      []ManagedObjectReference                  `xml:"uplinkPortgroup,omitempty"`
    +	DefaultPortConfig                    BaseDVPortSetting                         `xml:"defaultPortConfig,typeattr"`
    +	Host                                 []DistributedVirtualSwitchHostMember      `xml:"host,omitempty"`
    +	ProductInfo                          DistributedVirtualSwitchProductSpec       `xml:"productInfo"`
    +	TargetInfo                           *DistributedVirtualSwitchProductSpec      `xml:"targetInfo,omitempty"`
    +	ExtensionKey                         string                                    `xml:"extensionKey,omitempty"`
    +	VendorSpecificConfig                 []DistributedVirtualSwitchKeyedOpaqueBlob `xml:"vendorSpecificConfig,omitempty"`
    +	Policy                               *DVSPolicy                                `xml:"policy,omitempty"`
    +	Description                          string                                    `xml:"description,omitempty"`
    +	ConfigVersion                        string                                    `xml:"configVersion"`
    +	Contact                              DVSContactInfo                            `xml:"contact"`
    +	SwitchIpAddress                      string                                    `xml:"switchIpAddress,omitempty"`
    +	CreateTime                           time.Time                                 `xml:"createTime"`
    +	NetworkResourceManagementEnabled     *bool                                     `xml:"networkResourceManagementEnabled"`
    +	DefaultProxySwitchMaxNumPorts        int32                                     `xml:"defaultProxySwitchMaxNumPorts,omitempty"`
    +	HealthCheckConfig                    []BaseDVSHealthCheckConfig                `xml:"healthCheckConfig,omitempty,typeattr"`
    +	InfrastructureTrafficResourceConfig  []DvsHostInfrastructureTrafficResource    `xml:"infrastructureTrafficResourceConfig,omitempty"`
    +	NetResourcePoolTrafficResourceConfig []DvsHostInfrastructureTrafficResource    `xml:"netResourcePoolTrafficResourceConfig,omitempty"`
    +	NetworkResourceControlVersion        string                                    `xml:"networkResourceControlVersion,omitempty"`
    +	VmVnicNetworkResourcePool            []DVSVmVnicNetworkResourcePool            `xml:"vmVnicNetworkResourcePool,omitempty"`
    +	PnicCapacityRatioForReservation      int32                                     `xml:"pnicCapacityRatioForReservation,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSConfigInfo"] = reflect.TypeOf((*DVSConfigInfo)(nil)).Elem()
    +}
    +
    +type DVSConfigSpec struct {
    +	DynamicData
    +
    +	ConfigVersion                        string                                         `xml:"configVersion,omitempty"`
    +	Name                                 string                                         `xml:"name,omitempty"`
    +	NumStandalonePorts                   int32                                          `xml:"numStandalonePorts,omitempty"`
    +	MaxPorts                             int32                                          `xml:"maxPorts,omitempty"`
    +	UplinkPortPolicy                     BaseDVSUplinkPortPolicy                        `xml:"uplinkPortPolicy,omitempty,typeattr"`
    +	UplinkPortgroup                      []ManagedObjectReference                       `xml:"uplinkPortgroup,omitempty"`
    +	DefaultPortConfig                    BaseDVPortSetting                              `xml:"defaultPortConfig,omitempty,typeattr"`
    +	Host                                 []DistributedVirtualSwitchHostMemberConfigSpec `xml:"host,omitempty"`
    +	ExtensionKey                         string                                         `xml:"extensionKey,omitempty"`
    +	Description                          string                                         `xml:"description,omitempty"`
    +	Policy                               *DVSPolicy                                     `xml:"policy,omitempty"`
    +	VendorSpecificConfig                 []DistributedVirtualSwitchKeyedOpaqueBlob      `xml:"vendorSpecificConfig,omitempty"`
    +	Contact                              *DVSContactInfo                                `xml:"contact,omitempty"`
    +	SwitchIpAddress                      string                                         `xml:"switchIpAddress,omitempty"`
    +	DefaultProxySwitchMaxNumPorts        int32                                          `xml:"defaultProxySwitchMaxNumPorts,omitempty"`
    +	InfrastructureTrafficResourceConfig  []DvsHostInfrastructureTrafficResource         `xml:"infrastructureTrafficResourceConfig,omitempty"`
    +	NetResourcePoolTrafficResourceConfig []DvsHostInfrastructureTrafficResource         `xml:"netResourcePoolTrafficResourceConfig,omitempty"`
    +	NetworkResourceControlVersion        string                                         `xml:"networkResourceControlVersion,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSConfigSpec"] = reflect.TypeOf((*DVSConfigSpec)(nil)).Elem()
    +}
    +
    +type DVSContactInfo struct {
    +	DynamicData
    +
    +	Name    string `xml:"name,omitempty"`
    +	Contact string `xml:"contact,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSContactInfo"] = reflect.TypeOf((*DVSContactInfo)(nil)).Elem()
    +}
    +
    +type DVSCreateSpec struct {
    +	DynamicData
    +
    +	ConfigSpec  BaseDVSConfigSpec                    `xml:"configSpec,typeattr"`
    +	ProductInfo *DistributedVirtualSwitchProductSpec `xml:"productInfo,omitempty"`
    +	Capability  *DVSCapability                       `xml:"capability,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSCreateSpec"] = reflect.TypeOf((*DVSCreateSpec)(nil)).Elem()
    +}
    +
    +type DVSFailureCriteria struct {
    +	InheritablePolicy
    +
    +	CheckSpeed        *StringPolicy `xml:"checkSpeed,omitempty"`
    +	Speed             *IntPolicy    `xml:"speed,omitempty"`
    +	CheckDuplex       *BoolPolicy   `xml:"checkDuplex,omitempty"`
    +	FullDuplex        *BoolPolicy   `xml:"fullDuplex,omitempty"`
    +	CheckErrorPercent *BoolPolicy   `xml:"checkErrorPercent,omitempty"`
    +	Percentage        *IntPolicy    `xml:"percentage,omitempty"`
    +	CheckBeacon       *BoolPolicy   `xml:"checkBeacon,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSFailureCriteria"] = reflect.TypeOf((*DVSFailureCriteria)(nil)).Elem()
    +}
    +
    +type DVSFeatureCapability struct {
    +	DynamicData
    +
    +	NetworkResourceManagementSupported  bool                                    `xml:"networkResourceManagementSupported"`
    +	VmDirectPathGen2Supported           bool                                    `xml:"vmDirectPathGen2Supported"`
    +	NicTeamingPolicy                    []string                                `xml:"nicTeamingPolicy,omitempty"`
    +	NetworkResourcePoolHighShareValue   int32                                   `xml:"networkResourcePoolHighShareValue,omitempty"`
    +	NetworkResourceManagementCapability *DVSNetworkResourceManagementCapability `xml:"networkResourceManagementCapability,omitempty"`
    +	HealthCheckCapability               BaseDVSHealthCheckCapability            `xml:"healthCheckCapability,omitempty,typeattr"`
    +	RollbackCapability                  *DVSRollbackCapability                  `xml:"rollbackCapability,omitempty"`
    +	BackupRestoreCapability             *DVSBackupRestoreCapability             `xml:"backupRestoreCapability,omitempty"`
    +	NetworkFilterSupported              *bool                                   `xml:"networkFilterSupported"`
    +	MacLearningSupported                *bool                                   `xml:"macLearningSupported"`
    +}
    +
    +func init() {
    +	t["DVSFeatureCapability"] = reflect.TypeOf((*DVSFeatureCapability)(nil)).Elem()
    +}
    +
    +type DVSHealthCheckCapability struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["DVSHealthCheckCapability"] = reflect.TypeOf((*DVSHealthCheckCapability)(nil)).Elem()
    +}
    +
    +type DVSHealthCheckConfig struct {
    +	DynamicData
    +
    +	Enable   *bool `xml:"enable"`
    +	Interval int32 `xml:"interval,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSHealthCheckConfig"] = reflect.TypeOf((*DVSHealthCheckConfig)(nil)).Elem()
    +}
    +
    +type DVSHostLocalPortInfo struct {
    +	DynamicData
    +
    +	SwitchUuid string            `xml:"switchUuid"`
    +	PortKey    string            `xml:"portKey"`
    +	Setting    BaseDVPortSetting `xml:"setting,typeattr"`
    +	Vnic       string            `xml:"vnic"`
    +}
    +
    +func init() {
    +	t["DVSHostLocalPortInfo"] = reflect.TypeOf((*DVSHostLocalPortInfo)(nil)).Elem()
    +}
    +
    +type DVSMacLearningPolicy struct {
    +	InheritablePolicy
    +
    +	Enabled              bool   `xml:"enabled"`
    +	AllowUnicastFlooding *bool  `xml:"allowUnicastFlooding"`
    +	Limit                *int32 `xml:"limit"`
    +	LimitPolicy          string `xml:"limitPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSMacLearningPolicy"] = reflect.TypeOf((*DVSMacLearningPolicy)(nil)).Elem()
    +}
    +
    +type DVSMacManagementPolicy struct {
    +	InheritablePolicy
    +
    +	AllowPromiscuous  *bool                 `xml:"allowPromiscuous"`
    +	MacChanges        *bool                 `xml:"macChanges"`
    +	ForgedTransmits   *bool                 `xml:"forgedTransmits"`
    +	MacLearningPolicy *DVSMacLearningPolicy `xml:"macLearningPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSMacManagementPolicy"] = reflect.TypeOf((*DVSMacManagementPolicy)(nil)).Elem()
    +}
    +
    +type DVSManagerDvsConfigTarget struct {
    +	DynamicData
    +
    +	DistributedVirtualPortgroup []DistributedVirtualPortgroupInfo `xml:"distributedVirtualPortgroup,omitempty"`
    +	DistributedVirtualSwitch    []DistributedVirtualSwitchInfo    `xml:"distributedVirtualSwitch,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSManagerDvsConfigTarget"] = reflect.TypeOf((*DVSManagerDvsConfigTarget)(nil)).Elem()
    +}
    +
    +type DVSManagerExportEntityRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	SelectionSet []BaseSelectionSet     `xml:"selectionSet,typeattr"`
    +}
    +
    +func init() {
    +	t["DVSManagerExportEntityRequestType"] = reflect.TypeOf((*DVSManagerExportEntityRequestType)(nil)).Elem()
    +}
    +
    +type DVSManagerExportEntity_Task DVSManagerExportEntityRequestType
    +
    +func init() {
    +	t["DVSManagerExportEntity_Task"] = reflect.TypeOf((*DVSManagerExportEntity_Task)(nil)).Elem()
    +}
    +
    +type DVSManagerExportEntity_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DVSManagerImportEntityRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	EntityBackup []EntityBackupConfig   `xml:"entityBackup"`
    +	ImportType   string                 `xml:"importType"`
    +}
    +
    +func init() {
    +	t["DVSManagerImportEntityRequestType"] = reflect.TypeOf((*DVSManagerImportEntityRequestType)(nil)).Elem()
    +}
    +
    +type DVSManagerImportEntity_Task DVSManagerImportEntityRequestType
    +
    +func init() {
    +	t["DVSManagerImportEntity_Task"] = reflect.TypeOf((*DVSManagerImportEntity_Task)(nil)).Elem()
    +}
    +
    +type DVSManagerImportEntity_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DVSManagerLookupDvPortGroup DVSManagerLookupDvPortGroupRequestType
    +
    +func init() {
    +	t["DVSManagerLookupDvPortGroup"] = reflect.TypeOf((*DVSManagerLookupDvPortGroup)(nil)).Elem()
    +}
    +
    +type DVSManagerLookupDvPortGroupRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	SwitchUuid   string                 `xml:"switchUuid"`
    +	PortgroupKey string                 `xml:"portgroupKey"`
    +}
    +
    +func init() {
    +	t["DVSManagerLookupDvPortGroupRequestType"] = reflect.TypeOf((*DVSManagerLookupDvPortGroupRequestType)(nil)).Elem()
    +}
    +
    +type DVSManagerLookupDvPortGroupResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type DVSNameArrayUplinkPortPolicy struct {
    +	DVSUplinkPortPolicy
    +
    +	UplinkPortName []string `xml:"uplinkPortName"`
    +}
    +
    +func init() {
    +	t["DVSNameArrayUplinkPortPolicy"] = reflect.TypeOf((*DVSNameArrayUplinkPortPolicy)(nil)).Elem()
    +}
    +
    +type DVSNetworkResourceManagementCapability struct {
    +	DynamicData
    +
    +	NetworkResourceManagementSupported       bool  `xml:"networkResourceManagementSupported"`
    +	NetworkResourcePoolHighShareValue        int32 `xml:"networkResourcePoolHighShareValue"`
    +	QosSupported                             bool  `xml:"qosSupported"`
    +	UserDefinedNetworkResourcePoolsSupported bool  `xml:"userDefinedNetworkResourcePoolsSupported"`
    +	NetworkResourceControlVersion3Supported  *bool `xml:"networkResourceControlVersion3Supported"`
    +	UserDefinedInfraTrafficPoolSupported     *bool `xml:"userDefinedInfraTrafficPoolSupported"`
    +}
    +
    +func init() {
    +	t["DVSNetworkResourceManagementCapability"] = reflect.TypeOf((*DVSNetworkResourceManagementCapability)(nil)).Elem()
    +}
    +
    +type DVSNetworkResourcePool struct {
    +	DynamicData
    +
    +	Key            string                               `xml:"key"`
    +	Name           string                               `xml:"name,omitempty"`
    +	Description    string                               `xml:"description,omitempty"`
    +	ConfigVersion  string                               `xml:"configVersion"`
    +	AllocationInfo DVSNetworkResourcePoolAllocationInfo `xml:"allocationInfo"`
    +}
    +
    +func init() {
    +	t["DVSNetworkResourcePool"] = reflect.TypeOf((*DVSNetworkResourcePool)(nil)).Elem()
    +}
    +
    +type DVSNetworkResourcePoolAllocationInfo struct {
    +	DynamicData
    +
    +	Limit       *int64      `xml:"limit"`
    +	Shares      *SharesInfo `xml:"shares,omitempty"`
    +	PriorityTag int32       `xml:"priorityTag,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSNetworkResourcePoolAllocationInfo"] = reflect.TypeOf((*DVSNetworkResourcePoolAllocationInfo)(nil)).Elem()
    +}
    +
    +type DVSNetworkResourcePoolConfigSpec struct {
    +	DynamicData
    +
    +	Key            string                                `xml:"key"`
    +	ConfigVersion  string                                `xml:"configVersion,omitempty"`
    +	AllocationInfo *DVSNetworkResourcePoolAllocationInfo `xml:"allocationInfo,omitempty"`
    +	Name           string                                `xml:"name,omitempty"`
    +	Description    string                                `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSNetworkResourcePoolConfigSpec"] = reflect.TypeOf((*DVSNetworkResourcePoolConfigSpec)(nil)).Elem()
    +}
    +
    +type DVSPolicy struct {
    +	DynamicData
    +
    +	AutoPreInstallAllowed *bool `xml:"autoPreInstallAllowed"`
    +	AutoUpgradeAllowed    *bool `xml:"autoUpgradeAllowed"`
    +	PartialUpgradeAllowed *bool `xml:"partialUpgradeAllowed"`
    +}
    +
    +func init() {
    +	t["DVSPolicy"] = reflect.TypeOf((*DVSPolicy)(nil)).Elem()
    +}
    +
    +type DVSRollbackCapability struct {
    +	DynamicData
    +
    +	RollbackSupported bool `xml:"rollbackSupported"`
    +}
    +
    +func init() {
    +	t["DVSRollbackCapability"] = reflect.TypeOf((*DVSRollbackCapability)(nil)).Elem()
    +}
    +
    +type DVSRollbackRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	EntityBackup *EntityBackupConfig    `xml:"entityBackup,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSRollbackRequestType"] = reflect.TypeOf((*DVSRollbackRequestType)(nil)).Elem()
    +}
    +
    +type DVSRollback_Task DVSRollbackRequestType
    +
    +func init() {
    +	t["DVSRollback_Task"] = reflect.TypeOf((*DVSRollback_Task)(nil)).Elem()
    +}
    +
    +type DVSRollback_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DVSRuntimeInfo struct {
    +	DynamicData
    +
    +	HostMemberRuntime   []HostMemberRuntimeInfo `xml:"hostMemberRuntime,omitempty"`
    +	ResourceRuntimeInfo *DvsResourceRuntimeInfo `xml:"resourceRuntimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSRuntimeInfo"] = reflect.TypeOf((*DVSRuntimeInfo)(nil)).Elem()
    +}
    +
    +type DVSSecurityPolicy struct {
    +	InheritablePolicy
    +
    +	AllowPromiscuous *BoolPolicy `xml:"allowPromiscuous,omitempty"`
    +	MacChanges       *BoolPolicy `xml:"macChanges,omitempty"`
    +	ForgedTransmits  *BoolPolicy `xml:"forgedTransmits,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSSecurityPolicy"] = reflect.TypeOf((*DVSSecurityPolicy)(nil)).Elem()
    +}
    +
    +type DVSSelection struct {
    +	SelectionSet
    +
    +	DvsUuid string `xml:"dvsUuid"`
    +}
    +
    +func init() {
    +	t["DVSSelection"] = reflect.TypeOf((*DVSSelection)(nil)).Elem()
    +}
    +
    +type DVSSummary struct {
    +	DynamicData
    +
    +	Name          string                               `xml:"name"`
    +	Uuid          string                               `xml:"uuid"`
    +	NumPorts      int32                                `xml:"numPorts"`
    +	ProductInfo   *DistributedVirtualSwitchProductSpec `xml:"productInfo,omitempty"`
    +	HostMember    []ManagedObjectReference             `xml:"hostMember,omitempty"`
    +	Vm            []ManagedObjectReference             `xml:"vm,omitempty"`
    +	Host          []ManagedObjectReference             `xml:"host,omitempty"`
    +	PortgroupName []string                             `xml:"portgroupName,omitempty"`
    +	Description   string                               `xml:"description,omitempty"`
    +	Contact       *DVSContactInfo                      `xml:"contact,omitempty"`
    +	NumHosts      int32                                `xml:"numHosts,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSSummary"] = reflect.TypeOf((*DVSSummary)(nil)).Elem()
    +}
    +
    +type DVSTrafficShapingPolicy struct {
    +	InheritablePolicy
    +
    +	Enabled          *BoolPolicy `xml:"enabled,omitempty"`
    +	AverageBandwidth *LongPolicy `xml:"averageBandwidth,omitempty"`
    +	PeakBandwidth    *LongPolicy `xml:"peakBandwidth,omitempty"`
    +	BurstSize        *LongPolicy `xml:"burstSize,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSTrafficShapingPolicy"] = reflect.TypeOf((*DVSTrafficShapingPolicy)(nil)).Elem()
    +}
    +
    +type DVSUplinkPortPolicy struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["DVSUplinkPortPolicy"] = reflect.TypeOf((*DVSUplinkPortPolicy)(nil)).Elem()
    +}
    +
    +type DVSVendorSpecificConfig struct {
    +	InheritablePolicy
    +
    +	KeyValue []DistributedVirtualSwitchKeyedOpaqueBlob `xml:"keyValue,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSVendorSpecificConfig"] = reflect.TypeOf((*DVSVendorSpecificConfig)(nil)).Elem()
    +}
    +
    +type DVSVmVnicNetworkResourcePool struct {
    +	DynamicData
    +
    +	Key            string                       `xml:"key"`
    +	Name           string                       `xml:"name,omitempty"`
    +	Description    string                       `xml:"description,omitempty"`
    +	ConfigVersion  string                       `xml:"configVersion"`
    +	AllocationInfo *DvsVmVnicResourceAllocation `xml:"allocationInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["DVSVmVnicNetworkResourcePool"] = reflect.TypeOf((*DVSVmVnicNetworkResourcePool)(nil)).Elem()
    +}
    +
    +type DailyTaskScheduler struct {
    +	HourlyTaskScheduler
    +
    +	Hour int32 `xml:"hour"`
    +}
    +
    +func init() {
    +	t["DailyTaskScheduler"] = reflect.TypeOf((*DailyTaskScheduler)(nil)).Elem()
    +}
    +
    +type DasAdmissionControlDisabledEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DasAdmissionControlDisabledEvent"] = reflect.TypeOf((*DasAdmissionControlDisabledEvent)(nil)).Elem()
    +}
    +
    +type DasAdmissionControlEnabledEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DasAdmissionControlEnabledEvent"] = reflect.TypeOf((*DasAdmissionControlEnabledEvent)(nil)).Elem()
    +}
    +
    +type DasAgentFoundEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DasAgentFoundEvent"] = reflect.TypeOf((*DasAgentFoundEvent)(nil)).Elem()
    +}
    +
    +type DasAgentUnavailableEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DasAgentUnavailableEvent"] = reflect.TypeOf((*DasAgentUnavailableEvent)(nil)).Elem()
    +}
    +
    +type DasClusterIsolatedEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DasClusterIsolatedEvent"] = reflect.TypeOf((*DasClusterIsolatedEvent)(nil)).Elem()
    +}
    +
    +type DasConfigFault struct {
    +	VimFault
    +
    +	Reason string      `xml:"reason,omitempty"`
    +	Output string      `xml:"output,omitempty"`
    +	Event  []BaseEvent `xml:"event,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["DasConfigFault"] = reflect.TypeOf((*DasConfigFault)(nil)).Elem()
    +}
    +
    +type DasConfigFaultFault DasConfigFault
    +
    +func init() {
    +	t["DasConfigFaultFault"] = reflect.TypeOf((*DasConfigFaultFault)(nil)).Elem()
    +}
    +
    +type DasDisabledEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DasDisabledEvent"] = reflect.TypeOf((*DasDisabledEvent)(nil)).Elem()
    +}
    +
    +type DasEnabledEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DasEnabledEvent"] = reflect.TypeOf((*DasEnabledEvent)(nil)).Elem()
    +}
    +
    +type DasHeartbeatDatastoreInfo struct {
    +	DynamicData
    +
    +	Datastore ManagedObjectReference   `xml:"datastore"`
    +	Hosts     []ManagedObjectReference `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["DasHeartbeatDatastoreInfo"] = reflect.TypeOf((*DasHeartbeatDatastoreInfo)(nil)).Elem()
    +}
    +
    +type DasHostFailedEvent struct {
    +	ClusterEvent
    +
    +	FailedHost HostEventArgument `xml:"failedHost"`
    +}
    +
    +func init() {
    +	t["DasHostFailedEvent"] = reflect.TypeOf((*DasHostFailedEvent)(nil)).Elem()
    +}
    +
    +type DasHostIsolatedEvent struct {
    +	ClusterEvent
    +
    +	IsolatedHost HostEventArgument `xml:"isolatedHost"`
    +}
    +
    +func init() {
    +	t["DasHostIsolatedEvent"] = reflect.TypeOf((*DasHostIsolatedEvent)(nil)).Elem()
    +}
    +
    +type DatabaseError struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["DatabaseError"] = reflect.TypeOf((*DatabaseError)(nil)).Elem()
    +}
    +
    +type DatabaseErrorFault DatabaseError
    +
    +func init() {
    +	t["DatabaseErrorFault"] = reflect.TypeOf((*DatabaseErrorFault)(nil)).Elem()
    +}
    +
    +type DatabaseSizeEstimate struct {
    +	DynamicData
    +
    +	Size int64 `xml:"size"`
    +}
    +
    +func init() {
    +	t["DatabaseSizeEstimate"] = reflect.TypeOf((*DatabaseSizeEstimate)(nil)).Elem()
    +}
    +
    +type DatabaseSizeParam struct {
    +	DynamicData
    +
    +	InventoryDesc InventoryDescription              `xml:"inventoryDesc"`
    +	PerfStatsDesc *PerformanceStatisticsDescription `xml:"perfStatsDesc,omitempty"`
    +}
    +
    +func init() {
    +	t["DatabaseSizeParam"] = reflect.TypeOf((*DatabaseSizeParam)(nil)).Elem()
    +}
    +
    +type DatacenterConfigInfo struct {
    +	DynamicData
    +
    +	DefaultHardwareVersionKey string `xml:"defaultHardwareVersionKey,omitempty"`
    +}
    +
    +func init() {
    +	t["DatacenterConfigInfo"] = reflect.TypeOf((*DatacenterConfigInfo)(nil)).Elem()
    +}
    +
    +type DatacenterConfigSpec struct {
    +	DynamicData
    +
    +	DefaultHardwareVersionKey string `xml:"defaultHardwareVersionKey,omitempty"`
    +}
    +
    +func init() {
    +	t["DatacenterConfigSpec"] = reflect.TypeOf((*DatacenterConfigSpec)(nil)).Elem()
    +}
    +
    +type DatacenterCreatedEvent struct {
    +	DatacenterEvent
    +
    +	Parent FolderEventArgument `xml:"parent"`
    +}
    +
    +func init() {
    +	t["DatacenterCreatedEvent"] = reflect.TypeOf((*DatacenterCreatedEvent)(nil)).Elem()
    +}
    +
    +type DatacenterEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["DatacenterEvent"] = reflect.TypeOf((*DatacenterEvent)(nil)).Elem()
    +}
    +
    +type DatacenterEventArgument struct {
    +	EntityEventArgument
    +
    +	Datacenter ManagedObjectReference `xml:"datacenter"`
    +}
    +
    +func init() {
    +	t["DatacenterEventArgument"] = reflect.TypeOf((*DatacenterEventArgument)(nil)).Elem()
    +}
    +
    +type DatacenterMismatch struct {
    +	MigrationFault
    +
    +	InvalidArgument    []DatacenterMismatchArgument `xml:"invalidArgument"`
    +	ExpectedDatacenter ManagedObjectReference       `xml:"expectedDatacenter"`
    +}
    +
    +func init() {
    +	t["DatacenterMismatch"] = reflect.TypeOf((*DatacenterMismatch)(nil)).Elem()
    +}
    +
    +type DatacenterMismatchArgument struct {
    +	DynamicData
    +
    +	Entity          ManagedObjectReference  `xml:"entity"`
    +	InputDatacenter *ManagedObjectReference `xml:"inputDatacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["DatacenterMismatchArgument"] = reflect.TypeOf((*DatacenterMismatchArgument)(nil)).Elem()
    +}
    +
    +type DatacenterMismatchFault DatacenterMismatch
    +
    +func init() {
    +	t["DatacenterMismatchFault"] = reflect.TypeOf((*DatacenterMismatchFault)(nil)).Elem()
    +}
    +
    +type DatacenterRenamedEvent struct {
    +	DatacenterEvent
    +
    +	OldName string `xml:"oldName"`
    +	NewName string `xml:"newName"`
    +}
    +
    +func init() {
    +	t["DatacenterRenamedEvent"] = reflect.TypeOf((*DatacenterRenamedEvent)(nil)).Elem()
    +}
    +
    +type DatastoreCapability struct {
    +	DynamicData
    +
    +	DirectoryHierarchySupported      bool  `xml:"directoryHierarchySupported"`
    +	RawDiskMappingsSupported         bool  `xml:"rawDiskMappingsSupported"`
    +	PerFileThinProvisioningSupported bool  `xml:"perFileThinProvisioningSupported"`
    +	StorageIORMSupported             *bool `xml:"storageIORMSupported"`
    +	NativeSnapshotSupported          *bool `xml:"nativeSnapshotSupported"`
    +	TopLevelDirectoryCreateSupported *bool `xml:"topLevelDirectoryCreateSupported"`
    +	SeSparseSupported                *bool `xml:"seSparseSupported"`
    +	VmfsSparseSupported              *bool `xml:"vmfsSparseSupported"`
    +	VsanSparseSupported              *bool `xml:"vsanSparseSupported"`
    +	UpitSupported                    *bool `xml:"upitSupported"`
    +	VmdkExpandSupported              *bool `xml:"vmdkExpandSupported"`
    +}
    +
    +func init() {
    +	t["DatastoreCapability"] = reflect.TypeOf((*DatastoreCapability)(nil)).Elem()
    +}
    +
    +type DatastoreCapacityIncreasedEvent struct {
    +	DatastoreEvent
    +
    +	OldCapacity int64 `xml:"oldCapacity"`
    +	NewCapacity int64 `xml:"newCapacity"`
    +}
    +
    +func init() {
    +	t["DatastoreCapacityIncreasedEvent"] = reflect.TypeOf((*DatastoreCapacityIncreasedEvent)(nil)).Elem()
    +}
    +
    +type DatastoreDestroyedEvent struct {
    +	DatastoreEvent
    +}
    +
    +func init() {
    +	t["DatastoreDestroyedEvent"] = reflect.TypeOf((*DatastoreDestroyedEvent)(nil)).Elem()
    +}
    +
    +type DatastoreDiscoveredEvent struct {
    +	HostEvent
    +
    +	Datastore DatastoreEventArgument `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["DatastoreDiscoveredEvent"] = reflect.TypeOf((*DatastoreDiscoveredEvent)(nil)).Elem()
    +}
    +
    +type DatastoreDuplicatedEvent struct {
    +	DatastoreEvent
    +}
    +
    +func init() {
    +	t["DatastoreDuplicatedEvent"] = reflect.TypeOf((*DatastoreDuplicatedEvent)(nil)).Elem()
    +}
    +
    +type DatastoreEnterMaintenanceMode DatastoreEnterMaintenanceModeRequestType
    +
    +func init() {
    +	t["DatastoreEnterMaintenanceMode"] = reflect.TypeOf((*DatastoreEnterMaintenanceMode)(nil)).Elem()
    +}
    +
    +type DatastoreEnterMaintenanceModeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DatastoreEnterMaintenanceModeRequestType"] = reflect.TypeOf((*DatastoreEnterMaintenanceModeRequestType)(nil)).Elem()
    +}
    +
    +type DatastoreEnterMaintenanceModeResponse struct {
    +	Returnval StoragePlacementResult `xml:"returnval"`
    +}
    +
    +type DatastoreEvent struct {
    +	Event
    +
    +	Datastore *DatastoreEventArgument `xml:"datastore,omitempty"`
    +}
    +
    +func init() {
    +	t["DatastoreEvent"] = reflect.TypeOf((*DatastoreEvent)(nil)).Elem()
    +}
    +
    +type DatastoreEventArgument struct {
    +	EntityEventArgument
    +
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["DatastoreEventArgument"] = reflect.TypeOf((*DatastoreEventArgument)(nil)).Elem()
    +}
    +
    +type DatastoreExitMaintenanceModeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DatastoreExitMaintenanceModeRequestType"] = reflect.TypeOf((*DatastoreExitMaintenanceModeRequestType)(nil)).Elem()
    +}
    +
    +type DatastoreExitMaintenanceMode_Task DatastoreExitMaintenanceModeRequestType
    +
    +func init() {
    +	t["DatastoreExitMaintenanceMode_Task"] = reflect.TypeOf((*DatastoreExitMaintenanceMode_Task)(nil)).Elem()
    +}
    +
    +type DatastoreExitMaintenanceMode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DatastoreFileCopiedEvent struct {
    +	DatastoreFileEvent
    +
    +	SourceDatastore DatastoreEventArgument `xml:"sourceDatastore"`
    +	SourceFile      string                 `xml:"sourceFile"`
    +}
    +
    +func init() {
    +	t["DatastoreFileCopiedEvent"] = reflect.TypeOf((*DatastoreFileCopiedEvent)(nil)).Elem()
    +}
    +
    +type DatastoreFileDeletedEvent struct {
    +	DatastoreFileEvent
    +}
    +
    +func init() {
    +	t["DatastoreFileDeletedEvent"] = reflect.TypeOf((*DatastoreFileDeletedEvent)(nil)).Elem()
    +}
    +
    +type DatastoreFileEvent struct {
    +	DatastoreEvent
    +
    +	TargetFile        string `xml:"targetFile"`
    +	SourceOfOperation string `xml:"sourceOfOperation,omitempty"`
    +	Succeeded         *bool  `xml:"succeeded"`
    +}
    +
    +func init() {
    +	t["DatastoreFileEvent"] = reflect.TypeOf((*DatastoreFileEvent)(nil)).Elem()
    +}
    +
    +type DatastoreFileMovedEvent struct {
    +	DatastoreFileEvent
    +
    +	SourceDatastore DatastoreEventArgument `xml:"sourceDatastore"`
    +	SourceFile      string                 `xml:"sourceFile"`
    +}
    +
    +func init() {
    +	t["DatastoreFileMovedEvent"] = reflect.TypeOf((*DatastoreFileMovedEvent)(nil)).Elem()
    +}
    +
    +type DatastoreHostMount struct {
    +	DynamicData
    +
    +	Key       ManagedObjectReference `xml:"key"`
    +	MountInfo HostMountInfo          `xml:"mountInfo"`
    +}
    +
    +func init() {
    +	t["DatastoreHostMount"] = reflect.TypeOf((*DatastoreHostMount)(nil)).Elem()
    +}
    +
    +type DatastoreIORMReconfiguredEvent struct {
    +	DatastoreEvent
    +}
    +
    +func init() {
    +	t["DatastoreIORMReconfiguredEvent"] = reflect.TypeOf((*DatastoreIORMReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type DatastoreInfo struct {
    +	DynamicData
    +
    +	Name                   string     `xml:"name"`
    +	Url                    string     `xml:"url"`
    +	FreeSpace              int64      `xml:"freeSpace"`
    +	MaxFileSize            int64      `xml:"maxFileSize"`
    +	MaxVirtualDiskCapacity int64      `xml:"maxVirtualDiskCapacity,omitempty"`
    +	MaxMemoryFileSize      int64      `xml:"maxMemoryFileSize,omitempty"`
    +	Timestamp              *time.Time `xml:"timestamp"`
    +	ContainerId            string     `xml:"containerId,omitempty"`
    +}
    +
    +func init() {
    +	t["DatastoreInfo"] = reflect.TypeOf((*DatastoreInfo)(nil)).Elem()
    +}
    +
    +type DatastoreMountPathDatastorePair struct {
    +	DynamicData
    +
    +	OldMountPath string                 `xml:"oldMountPath"`
    +	Datastore    ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["DatastoreMountPathDatastorePair"] = reflect.TypeOf((*DatastoreMountPathDatastorePair)(nil)).Elem()
    +}
    +
    +type DatastoreNotWritableOnHost struct {
    +	InvalidDatastore
    +
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["DatastoreNotWritableOnHost"] = reflect.TypeOf((*DatastoreNotWritableOnHost)(nil)).Elem()
    +}
    +
    +type DatastoreNotWritableOnHostFault BaseDatastoreNotWritableOnHost
    +
    +func init() {
    +	t["DatastoreNotWritableOnHostFault"] = reflect.TypeOf((*DatastoreNotWritableOnHostFault)(nil)).Elem()
    +}
    +
    +type DatastoreOption struct {
    +	DynamicData
    +
    +	UnsupportedVolumes []VirtualMachineDatastoreVolumeOption `xml:"unsupportedVolumes,omitempty"`
    +}
    +
    +func init() {
    +	t["DatastoreOption"] = reflect.TypeOf((*DatastoreOption)(nil)).Elem()
    +}
    +
    +type DatastorePrincipalConfigured struct {
    +	HostEvent
    +
    +	DatastorePrincipal string `xml:"datastorePrincipal"`
    +}
    +
    +func init() {
    +	t["DatastorePrincipalConfigured"] = reflect.TypeOf((*DatastorePrincipalConfigured)(nil)).Elem()
    +}
    +
    +type DatastoreRemovedOnHostEvent struct {
    +	HostEvent
    +
    +	Datastore DatastoreEventArgument `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["DatastoreRemovedOnHostEvent"] = reflect.TypeOf((*DatastoreRemovedOnHostEvent)(nil)).Elem()
    +}
    +
    +type DatastoreRenamedEvent struct {
    +	DatastoreEvent
    +
    +	OldName string `xml:"oldName"`
    +	NewName string `xml:"newName"`
    +}
    +
    +func init() {
    +	t["DatastoreRenamedEvent"] = reflect.TypeOf((*DatastoreRenamedEvent)(nil)).Elem()
    +}
    +
    +type DatastoreRenamedOnHostEvent struct {
    +	HostEvent
    +
    +	OldName string `xml:"oldName"`
    +	NewName string `xml:"newName"`
    +}
    +
    +func init() {
    +	t["DatastoreRenamedOnHostEvent"] = reflect.TypeOf((*DatastoreRenamedOnHostEvent)(nil)).Elem()
    +}
    +
    +type DatastoreSummary struct {
    +	DynamicData
    +
    +	Datastore          *ManagedObjectReference `xml:"datastore,omitempty"`
    +	Name               string                  `xml:"name"`
    +	Url                string                  `xml:"url"`
    +	Capacity           int64                   `xml:"capacity"`
    +	FreeSpace          int64                   `xml:"freeSpace"`
    +	Uncommitted        int64                   `xml:"uncommitted,omitempty"`
    +	Accessible         bool                    `xml:"accessible"`
    +	MultipleHostAccess *bool                   `xml:"multipleHostAccess"`
    +	Type               string                  `xml:"type"`
    +	MaintenanceMode    string                  `xml:"maintenanceMode,omitempty"`
    +}
    +
    +func init() {
    +	t["DatastoreSummary"] = reflect.TypeOf((*DatastoreSummary)(nil)).Elem()
    +}
    +
    +type DatastoreVVolContainerFailoverPair struct {
    +	DynamicData
    +
    +	SrcContainer string     `xml:"srcContainer,omitempty"`
    +	TgtContainer string     `xml:"tgtContainer"`
    +	VvolMapping  []KeyValue `xml:"vvolMapping,omitempty"`
    +}
    +
    +func init() {
    +	t["DatastoreVVolContainerFailoverPair"] = reflect.TypeOf((*DatastoreVVolContainerFailoverPair)(nil)).Elem()
    +}
    +
    +type DateTimeProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["DateTimeProfile"] = reflect.TypeOf((*DateTimeProfile)(nil)).Elem()
    +}
    +
    +type DecodeLicense DecodeLicenseRequestType
    +
    +func init() {
    +	t["DecodeLicense"] = reflect.TypeOf((*DecodeLicense)(nil)).Elem()
    +}
    +
    +type DecodeLicenseRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	LicenseKey string                 `xml:"licenseKey"`
    +}
    +
    +func init() {
    +	t["DecodeLicenseRequestType"] = reflect.TypeOf((*DecodeLicenseRequestType)(nil)).Elem()
    +}
    +
    +type DecodeLicenseResponse struct {
    +	Returnval LicenseManagerLicenseInfo `xml:"returnval"`
    +}
    +
    +type DefragmentAllDisks DefragmentAllDisksRequestType
    +
    +func init() {
    +	t["DefragmentAllDisks"] = reflect.TypeOf((*DefragmentAllDisks)(nil)).Elem()
    +}
    +
    +type DefragmentAllDisksRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DefragmentAllDisksRequestType"] = reflect.TypeOf((*DefragmentAllDisksRequestType)(nil)).Elem()
    +}
    +
    +type DefragmentAllDisksResponse struct {
    +}
    +
    +type DefragmentVirtualDiskRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["DefragmentVirtualDiskRequestType"] = reflect.TypeOf((*DefragmentVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type DefragmentVirtualDisk_Task DefragmentVirtualDiskRequestType
    +
    +func init() {
    +	t["DefragmentVirtualDisk_Task"] = reflect.TypeOf((*DefragmentVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type DefragmentVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DeleteCustomizationSpec DeleteCustomizationSpecRequestType
    +
    +func init() {
    +	t["DeleteCustomizationSpec"] = reflect.TypeOf((*DeleteCustomizationSpec)(nil)).Elem()
    +}
    +
    +type DeleteCustomizationSpecRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["DeleteCustomizationSpecRequestType"] = reflect.TypeOf((*DeleteCustomizationSpecRequestType)(nil)).Elem()
    +}
    +
    +type DeleteCustomizationSpecResponse struct {
    +}
    +
    +type DeleteDatastoreFileRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["DeleteDatastoreFileRequestType"] = reflect.TypeOf((*DeleteDatastoreFileRequestType)(nil)).Elem()
    +}
    +
    +type DeleteDatastoreFile_Task DeleteDatastoreFileRequestType
    +
    +func init() {
    +	t["DeleteDatastoreFile_Task"] = reflect.TypeOf((*DeleteDatastoreFile_Task)(nil)).Elem()
    +}
    +
    +type DeleteDatastoreFile_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DeleteDirectory DeleteDirectoryRequestType
    +
    +func init() {
    +	t["DeleteDirectory"] = reflect.TypeOf((*DeleteDirectory)(nil)).Elem()
    +}
    +
    +type DeleteDirectoryInGuest DeleteDirectoryInGuestRequestType
    +
    +func init() {
    +	t["DeleteDirectoryInGuest"] = reflect.TypeOf((*DeleteDirectoryInGuest)(nil)).Elem()
    +}
    +
    +type DeleteDirectoryInGuestRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Vm            ManagedObjectReference  `xml:"vm"`
    +	Auth          BaseGuestAuthentication `xml:"auth,typeattr"`
    +	DirectoryPath string                  `xml:"directoryPath"`
    +	Recursive     bool                    `xml:"recursive"`
    +}
    +
    +func init() {
    +	t["DeleteDirectoryInGuestRequestType"] = reflect.TypeOf((*DeleteDirectoryInGuestRequestType)(nil)).Elem()
    +}
    +
    +type DeleteDirectoryInGuestResponse struct {
    +}
    +
    +type DeleteDirectoryRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Datacenter    *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	DatastorePath string                  `xml:"datastorePath"`
    +}
    +
    +func init() {
    +	t["DeleteDirectoryRequestType"] = reflect.TypeOf((*DeleteDirectoryRequestType)(nil)).Elem()
    +}
    +
    +type DeleteDirectoryResponse struct {
    +}
    +
    +type DeleteFile DeleteFileRequestType
    +
    +func init() {
    +	t["DeleteFile"] = reflect.TypeOf((*DeleteFile)(nil)).Elem()
    +}
    +
    +type DeleteFileInGuest DeleteFileInGuestRequestType
    +
    +func init() {
    +	t["DeleteFileInGuest"] = reflect.TypeOf((*DeleteFileInGuest)(nil)).Elem()
    +}
    +
    +type DeleteFileInGuestRequestType struct {
    +	This     ManagedObjectReference  `xml:"_this"`
    +	Vm       ManagedObjectReference  `xml:"vm"`
    +	Auth     BaseGuestAuthentication `xml:"auth,typeattr"`
    +	FilePath string                  `xml:"filePath"`
    +}
    +
    +func init() {
    +	t["DeleteFileInGuestRequestType"] = reflect.TypeOf((*DeleteFileInGuestRequestType)(nil)).Elem()
    +}
    +
    +type DeleteFileInGuestResponse struct {
    +}
    +
    +type DeleteFileRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	DatastorePath string                 `xml:"datastorePath"`
    +}
    +
    +func init() {
    +	t["DeleteFileRequestType"] = reflect.TypeOf((*DeleteFileRequestType)(nil)).Elem()
    +}
    +
    +type DeleteFileResponse struct {
    +}
    +
    +type DeleteHostSpecification DeleteHostSpecificationRequestType
    +
    +func init() {
    +	t["DeleteHostSpecification"] = reflect.TypeOf((*DeleteHostSpecification)(nil)).Elem()
    +}
    +
    +type DeleteHostSpecificationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["DeleteHostSpecificationRequestType"] = reflect.TypeOf((*DeleteHostSpecificationRequestType)(nil)).Elem()
    +}
    +
    +type DeleteHostSpecificationResponse struct {
    +}
    +
    +type DeleteHostSubSpecification DeleteHostSubSpecificationRequestType
    +
    +func init() {
    +	t["DeleteHostSubSpecification"] = reflect.TypeOf((*DeleteHostSubSpecification)(nil)).Elem()
    +}
    +
    +type DeleteHostSubSpecificationRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Host        ManagedObjectReference `xml:"host"`
    +	SubSpecName string                 `xml:"subSpecName"`
    +}
    +
    +func init() {
    +	t["DeleteHostSubSpecificationRequestType"] = reflect.TypeOf((*DeleteHostSubSpecificationRequestType)(nil)).Elem()
    +}
    +
    +type DeleteHostSubSpecificationResponse struct {
    +}
    +
    +type DeleteNvdimmBlockNamespacesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DeleteNvdimmBlockNamespacesRequestType"] = reflect.TypeOf((*DeleteNvdimmBlockNamespacesRequestType)(nil)).Elem()
    +}
    +
    +type DeleteNvdimmBlockNamespaces_Task DeleteNvdimmBlockNamespacesRequestType
    +
    +func init() {
    +	t["DeleteNvdimmBlockNamespaces_Task"] = reflect.TypeOf((*DeleteNvdimmBlockNamespaces_Task)(nil)).Elem()
    +}
    +
    +type DeleteNvdimmBlockNamespaces_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DeleteNvdimmNamespaceRequestType struct {
    +	This       ManagedObjectReference    `xml:"_this"`
    +	DeleteSpec NvdimmNamespaceDeleteSpec `xml:"deleteSpec"`
    +}
    +
    +func init() {
    +	t["DeleteNvdimmNamespaceRequestType"] = reflect.TypeOf((*DeleteNvdimmNamespaceRequestType)(nil)).Elem()
    +}
    +
    +type DeleteNvdimmNamespace_Task DeleteNvdimmNamespaceRequestType
    +
    +func init() {
    +	t["DeleteNvdimmNamespace_Task"] = reflect.TypeOf((*DeleteNvdimmNamespace_Task)(nil)).Elem()
    +}
    +
    +type DeleteNvdimmNamespace_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DeleteRegistryKeyInGuest DeleteRegistryKeyInGuestRequestType
    +
    +func init() {
    +	t["DeleteRegistryKeyInGuest"] = reflect.TypeOf((*DeleteRegistryKeyInGuest)(nil)).Elem()
    +}
    +
    +type DeleteRegistryKeyInGuestRequestType struct {
    +	This      ManagedObjectReference  `xml:"_this"`
    +	Vm        ManagedObjectReference  `xml:"vm"`
    +	Auth      BaseGuestAuthentication `xml:"auth,typeattr"`
    +	KeyName   GuestRegKeyNameSpec     `xml:"keyName"`
    +	Recursive bool                    `xml:"recursive"`
    +}
    +
    +func init() {
    +	t["DeleteRegistryKeyInGuestRequestType"] = reflect.TypeOf((*DeleteRegistryKeyInGuestRequestType)(nil)).Elem()
    +}
    +
    +type DeleteRegistryKeyInGuestResponse struct {
    +}
    +
    +type DeleteRegistryValueInGuest DeleteRegistryValueInGuestRequestType
    +
    +func init() {
    +	t["DeleteRegistryValueInGuest"] = reflect.TypeOf((*DeleteRegistryValueInGuest)(nil)).Elem()
    +}
    +
    +type DeleteRegistryValueInGuestRequestType struct {
    +	This      ManagedObjectReference  `xml:"_this"`
    +	Vm        ManagedObjectReference  `xml:"vm"`
    +	Auth      BaseGuestAuthentication `xml:"auth,typeattr"`
    +	ValueName GuestRegValueNameSpec   `xml:"valueName"`
    +}
    +
    +func init() {
    +	t["DeleteRegistryValueInGuestRequestType"] = reflect.TypeOf((*DeleteRegistryValueInGuestRequestType)(nil)).Elem()
    +}
    +
    +type DeleteRegistryValueInGuestResponse struct {
    +}
    +
    +type DeleteScsiLunState DeleteScsiLunStateRequestType
    +
    +func init() {
    +	t["DeleteScsiLunState"] = reflect.TypeOf((*DeleteScsiLunState)(nil)).Elem()
    +}
    +
    +type DeleteScsiLunStateRequestType struct {
    +	This             ManagedObjectReference `xml:"_this"`
    +	LunCanonicalName string                 `xml:"lunCanonicalName"`
    +}
    +
    +func init() {
    +	t["DeleteScsiLunStateRequestType"] = reflect.TypeOf((*DeleteScsiLunStateRequestType)(nil)).Elem()
    +}
    +
    +type DeleteScsiLunStateResponse struct {
    +}
    +
    +type DeleteSnapshotRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Id         ID                     `xml:"id"`
    +	Datastore  ManagedObjectReference `xml:"datastore"`
    +	SnapshotId ID                     `xml:"snapshotId"`
    +}
    +
    +func init() {
    +	t["DeleteSnapshotRequestType"] = reflect.TypeOf((*DeleteSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type DeleteSnapshot_Task DeleteSnapshotRequestType
    +
    +func init() {
    +	t["DeleteSnapshot_Task"] = reflect.TypeOf((*DeleteSnapshot_Task)(nil)).Elem()
    +}
    +
    +type DeleteSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DeleteVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["DeleteVStorageObjectRequestType"] = reflect.TypeOf((*DeleteVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type DeleteVStorageObject_Task DeleteVStorageObjectRequestType
    +
    +func init() {
    +	t["DeleteVStorageObject_Task"] = reflect.TypeOf((*DeleteVStorageObject_Task)(nil)).Elem()
    +}
    +
    +type DeleteVStorageObject_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DeleteVffsVolumeState DeleteVffsVolumeStateRequestType
    +
    +func init() {
    +	t["DeleteVffsVolumeState"] = reflect.TypeOf((*DeleteVffsVolumeState)(nil)).Elem()
    +}
    +
    +type DeleteVffsVolumeStateRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VffsUuid string                 `xml:"vffsUuid"`
    +}
    +
    +func init() {
    +	t["DeleteVffsVolumeStateRequestType"] = reflect.TypeOf((*DeleteVffsVolumeStateRequestType)(nil)).Elem()
    +}
    +
    +type DeleteVffsVolumeStateResponse struct {
    +}
    +
    +type DeleteVirtualDiskRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["DeleteVirtualDiskRequestType"] = reflect.TypeOf((*DeleteVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type DeleteVirtualDisk_Task DeleteVirtualDiskRequestType
    +
    +func init() {
    +	t["DeleteVirtualDisk_Task"] = reflect.TypeOf((*DeleteVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type DeleteVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DeleteVmfsVolumeState DeleteVmfsVolumeStateRequestType
    +
    +func init() {
    +	t["DeleteVmfsVolumeState"] = reflect.TypeOf((*DeleteVmfsVolumeState)(nil)).Elem()
    +}
    +
    +type DeleteVmfsVolumeStateRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsUuid string                 `xml:"vmfsUuid"`
    +}
    +
    +func init() {
    +	t["DeleteVmfsVolumeStateRequestType"] = reflect.TypeOf((*DeleteVmfsVolumeStateRequestType)(nil)).Elem()
    +}
    +
    +type DeleteVmfsVolumeStateResponse struct {
    +}
    +
    +type DeleteVsanObjects DeleteVsanObjectsRequestType
    +
    +func init() {
    +	t["DeleteVsanObjects"] = reflect.TypeOf((*DeleteVsanObjects)(nil)).Elem()
    +}
    +
    +type DeleteVsanObjectsRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Uuids []string               `xml:"uuids"`
    +	Force *bool                  `xml:"force"`
    +}
    +
    +func init() {
    +	t["DeleteVsanObjectsRequestType"] = reflect.TypeOf((*DeleteVsanObjectsRequestType)(nil)).Elem()
    +}
    +
    +type DeleteVsanObjectsResponse struct {
    +	Returnval []HostVsanInternalSystemDeleteVsanObjectsResult `xml:"returnval"`
    +}
    +
    +type DeltaDiskFormatNotSupported struct {
    +	VmConfigFault
    +
    +	Datastore       []ManagedObjectReference `xml:"datastore,omitempty"`
    +	DeltaDiskFormat string                   `xml:"deltaDiskFormat"`
    +}
    +
    +func init() {
    +	t["DeltaDiskFormatNotSupported"] = reflect.TypeOf((*DeltaDiskFormatNotSupported)(nil)).Elem()
    +}
    +
    +type DeltaDiskFormatNotSupportedFault DeltaDiskFormatNotSupported
    +
    +func init() {
    +	t["DeltaDiskFormatNotSupportedFault"] = reflect.TypeOf((*DeltaDiskFormatNotSupportedFault)(nil)).Elem()
    +}
    +
    +type Description struct {
    +	DynamicData
    +
    +	Label   string `xml:"label"`
    +	Summary string `xml:"summary"`
    +}
    +
    +func init() {
    +	t["Description"] = reflect.TypeOf((*Description)(nil)).Elem()
    +}
    +
    +type DeselectVnic DeselectVnicRequestType
    +
    +func init() {
    +	t["DeselectVnic"] = reflect.TypeOf((*DeselectVnic)(nil)).Elem()
    +}
    +
    +type DeselectVnicForNicType DeselectVnicForNicTypeRequestType
    +
    +func init() {
    +	t["DeselectVnicForNicType"] = reflect.TypeOf((*DeselectVnicForNicType)(nil)).Elem()
    +}
    +
    +type DeselectVnicForNicTypeRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	NicType string                 `xml:"nicType"`
    +	Device  string                 `xml:"device"`
    +}
    +
    +func init() {
    +	t["DeselectVnicForNicTypeRequestType"] = reflect.TypeOf((*DeselectVnicForNicTypeRequestType)(nil)).Elem()
    +}
    +
    +type DeselectVnicForNicTypeResponse struct {
    +}
    +
    +type DeselectVnicRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DeselectVnicRequestType"] = reflect.TypeOf((*DeselectVnicRequestType)(nil)).Elem()
    +}
    +
    +type DeselectVnicResponse struct {
    +}
    +
    +type DestinationSwitchFull struct {
    +	CannotAccessNetwork
    +}
    +
    +func init() {
    +	t["DestinationSwitchFull"] = reflect.TypeOf((*DestinationSwitchFull)(nil)).Elem()
    +}
    +
    +type DestinationSwitchFullFault DestinationSwitchFull
    +
    +func init() {
    +	t["DestinationSwitchFullFault"] = reflect.TypeOf((*DestinationSwitchFullFault)(nil)).Elem()
    +}
    +
    +type DestinationVsanDisabled struct {
    +	CannotMoveVsanEnabledHost
    +
    +	DestinationCluster string `xml:"destinationCluster"`
    +}
    +
    +func init() {
    +	t["DestinationVsanDisabled"] = reflect.TypeOf((*DestinationVsanDisabled)(nil)).Elem()
    +}
    +
    +type DestinationVsanDisabledFault DestinationVsanDisabled
    +
    +func init() {
    +	t["DestinationVsanDisabledFault"] = reflect.TypeOf((*DestinationVsanDisabledFault)(nil)).Elem()
    +}
    +
    +type DestroyChildren DestroyChildrenRequestType
    +
    +func init() {
    +	t["DestroyChildren"] = reflect.TypeOf((*DestroyChildren)(nil)).Elem()
    +}
    +
    +type DestroyChildrenRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyChildrenRequestType"] = reflect.TypeOf((*DestroyChildrenRequestType)(nil)).Elem()
    +}
    +
    +type DestroyChildrenResponse struct {
    +}
    +
    +type DestroyCollector DestroyCollectorRequestType
    +
    +func init() {
    +	t["DestroyCollector"] = reflect.TypeOf((*DestroyCollector)(nil)).Elem()
    +}
    +
    +type DestroyCollectorRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyCollectorRequestType"] = reflect.TypeOf((*DestroyCollectorRequestType)(nil)).Elem()
    +}
    +
    +type DestroyCollectorResponse struct {
    +}
    +
    +type DestroyDatastore DestroyDatastoreRequestType
    +
    +func init() {
    +	t["DestroyDatastore"] = reflect.TypeOf((*DestroyDatastore)(nil)).Elem()
    +}
    +
    +type DestroyDatastoreRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyDatastoreRequestType"] = reflect.TypeOf((*DestroyDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type DestroyDatastoreResponse struct {
    +}
    +
    +type DestroyIpPool DestroyIpPoolRequestType
    +
    +func init() {
    +	t["DestroyIpPool"] = reflect.TypeOf((*DestroyIpPool)(nil)).Elem()
    +}
    +
    +type DestroyIpPoolRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Dc    ManagedObjectReference `xml:"dc"`
    +	Id    int32                  `xml:"id"`
    +	Force bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["DestroyIpPoolRequestType"] = reflect.TypeOf((*DestroyIpPoolRequestType)(nil)).Elem()
    +}
    +
    +type DestroyIpPoolResponse struct {
    +}
    +
    +type DestroyNetwork DestroyNetworkRequestType
    +
    +func init() {
    +	t["DestroyNetwork"] = reflect.TypeOf((*DestroyNetwork)(nil)).Elem()
    +}
    +
    +type DestroyNetworkRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyNetworkRequestType"] = reflect.TypeOf((*DestroyNetworkRequestType)(nil)).Elem()
    +}
    +
    +type DestroyNetworkResponse struct {
    +}
    +
    +type DestroyProfile DestroyProfileRequestType
    +
    +func init() {
    +	t["DestroyProfile"] = reflect.TypeOf((*DestroyProfile)(nil)).Elem()
    +}
    +
    +type DestroyProfileRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyProfileRequestType"] = reflect.TypeOf((*DestroyProfileRequestType)(nil)).Elem()
    +}
    +
    +type DestroyProfileResponse struct {
    +}
    +
    +type DestroyPropertyCollector DestroyPropertyCollectorRequestType
    +
    +func init() {
    +	t["DestroyPropertyCollector"] = reflect.TypeOf((*DestroyPropertyCollector)(nil)).Elem()
    +}
    +
    +type DestroyPropertyCollectorRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyPropertyCollectorRequestType"] = reflect.TypeOf((*DestroyPropertyCollectorRequestType)(nil)).Elem()
    +}
    +
    +type DestroyPropertyCollectorResponse struct {
    +}
    +
    +type DestroyPropertyFilter DestroyPropertyFilterRequestType
    +
    +func init() {
    +	t["DestroyPropertyFilter"] = reflect.TypeOf((*DestroyPropertyFilter)(nil)).Elem()
    +}
    +
    +type DestroyPropertyFilterRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyPropertyFilterRequestType"] = reflect.TypeOf((*DestroyPropertyFilterRequestType)(nil)).Elem()
    +}
    +
    +type DestroyPropertyFilterResponse struct {
    +}
    +
    +type DestroyRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyRequestType"] = reflect.TypeOf((*DestroyRequestType)(nil)).Elem()
    +}
    +
    +type DestroyVffs DestroyVffsRequestType
    +
    +func init() {
    +	t["DestroyVffs"] = reflect.TypeOf((*DestroyVffs)(nil)).Elem()
    +}
    +
    +type DestroyVffsRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VffsPath string                 `xml:"vffsPath"`
    +}
    +
    +func init() {
    +	t["DestroyVffsRequestType"] = reflect.TypeOf((*DestroyVffsRequestType)(nil)).Elem()
    +}
    +
    +type DestroyVffsResponse struct {
    +}
    +
    +type DestroyView DestroyViewRequestType
    +
    +func init() {
    +	t["DestroyView"] = reflect.TypeOf((*DestroyView)(nil)).Elem()
    +}
    +
    +type DestroyViewRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DestroyViewRequestType"] = reflect.TypeOf((*DestroyViewRequestType)(nil)).Elem()
    +}
    +
    +type DestroyViewResponse struct {
    +}
    +
    +type Destroy_Task DestroyRequestType
    +
    +func init() {
    +	t["Destroy_Task"] = reflect.TypeOf((*Destroy_Task)(nil)).Elem()
    +}
    +
    +type Destroy_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DetachDiskRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	DiskId ID                     `xml:"diskId"`
    +}
    +
    +func init() {
    +	t["DetachDiskRequestType"] = reflect.TypeOf((*DetachDiskRequestType)(nil)).Elem()
    +}
    +
    +type DetachDisk_Task DetachDiskRequestType
    +
    +func init() {
    +	t["DetachDisk_Task"] = reflect.TypeOf((*DetachDisk_Task)(nil)).Elem()
    +}
    +
    +type DetachDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DetachScsiLun DetachScsiLunRequestType
    +
    +func init() {
    +	t["DetachScsiLun"] = reflect.TypeOf((*DetachScsiLun)(nil)).Elem()
    +}
    +
    +type DetachScsiLunExRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	LunUuid []string               `xml:"lunUuid"`
    +}
    +
    +func init() {
    +	t["DetachScsiLunExRequestType"] = reflect.TypeOf((*DetachScsiLunExRequestType)(nil)).Elem()
    +}
    +
    +type DetachScsiLunEx_Task DetachScsiLunExRequestType
    +
    +func init() {
    +	t["DetachScsiLunEx_Task"] = reflect.TypeOf((*DetachScsiLunEx_Task)(nil)).Elem()
    +}
    +
    +type DetachScsiLunEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DetachScsiLunRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	LunUuid string                 `xml:"lunUuid"`
    +}
    +
    +func init() {
    +	t["DetachScsiLunRequestType"] = reflect.TypeOf((*DetachScsiLunRequestType)(nil)).Elem()
    +}
    +
    +type DetachScsiLunResponse struct {
    +}
    +
    +type DetachTagFromVStorageObject DetachTagFromVStorageObjectRequestType
    +
    +func init() {
    +	t["DetachTagFromVStorageObject"] = reflect.TypeOf((*DetachTagFromVStorageObject)(nil)).Elem()
    +}
    +
    +type DetachTagFromVStorageObjectRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Id       ID                     `xml:"id"`
    +	Category string                 `xml:"category"`
    +	Tag      string                 `xml:"tag"`
    +}
    +
    +func init() {
    +	t["DetachTagFromVStorageObjectRequestType"] = reflect.TypeOf((*DetachTagFromVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type DetachTagFromVStorageObjectResponse struct {
    +}
    +
    +type DeviceBackedVirtualDiskSpec struct {
    +	VirtualDiskSpec
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["DeviceBackedVirtualDiskSpec"] = reflect.TypeOf((*DeviceBackedVirtualDiskSpec)(nil)).Elem()
    +}
    +
    +type DeviceBackingNotSupported struct {
    +	DeviceNotSupported
    +
    +	Backing string `xml:"backing"`
    +}
    +
    +func init() {
    +	t["DeviceBackingNotSupported"] = reflect.TypeOf((*DeviceBackingNotSupported)(nil)).Elem()
    +}
    +
    +type DeviceBackingNotSupportedFault BaseDeviceBackingNotSupported
    +
    +func init() {
    +	t["DeviceBackingNotSupportedFault"] = reflect.TypeOf((*DeviceBackingNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DeviceControllerNotSupported struct {
    +	DeviceNotSupported
    +
    +	Controller string `xml:"controller"`
    +}
    +
    +func init() {
    +	t["DeviceControllerNotSupported"] = reflect.TypeOf((*DeviceControllerNotSupported)(nil)).Elem()
    +}
    +
    +type DeviceControllerNotSupportedFault DeviceControllerNotSupported
    +
    +func init() {
    +	t["DeviceControllerNotSupportedFault"] = reflect.TypeOf((*DeviceControllerNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DeviceGroupId struct {
    +	DynamicData
    +
    +	Id string `xml:"id"`
    +}
    +
    +func init() {
    +	t["DeviceGroupId"] = reflect.TypeOf((*DeviceGroupId)(nil)).Elem()
    +}
    +
    +type DeviceHotPlugNotSupported struct {
    +	InvalidDeviceSpec
    +}
    +
    +func init() {
    +	t["DeviceHotPlugNotSupported"] = reflect.TypeOf((*DeviceHotPlugNotSupported)(nil)).Elem()
    +}
    +
    +type DeviceHotPlugNotSupportedFault DeviceHotPlugNotSupported
    +
    +func init() {
    +	t["DeviceHotPlugNotSupportedFault"] = reflect.TypeOf((*DeviceHotPlugNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DeviceNotFound struct {
    +	InvalidDeviceSpec
    +}
    +
    +func init() {
    +	t["DeviceNotFound"] = reflect.TypeOf((*DeviceNotFound)(nil)).Elem()
    +}
    +
    +type DeviceNotFoundFault DeviceNotFound
    +
    +func init() {
    +	t["DeviceNotFoundFault"] = reflect.TypeOf((*DeviceNotFoundFault)(nil)).Elem()
    +}
    +
    +type DeviceNotSupported struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	Device string `xml:"device"`
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["DeviceNotSupported"] = reflect.TypeOf((*DeviceNotSupported)(nil)).Elem()
    +}
    +
    +type DeviceNotSupportedFault BaseDeviceNotSupported
    +
    +func init() {
    +	t["DeviceNotSupportedFault"] = reflect.TypeOf((*DeviceNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DeviceUnsupportedForVmPlatform struct {
    +	InvalidDeviceSpec
    +}
    +
    +func init() {
    +	t["DeviceUnsupportedForVmPlatform"] = reflect.TypeOf((*DeviceUnsupportedForVmPlatform)(nil)).Elem()
    +}
    +
    +type DeviceUnsupportedForVmPlatformFault DeviceUnsupportedForVmPlatform
    +
    +func init() {
    +	t["DeviceUnsupportedForVmPlatformFault"] = reflect.TypeOf((*DeviceUnsupportedForVmPlatformFault)(nil)).Elem()
    +}
    +
    +type DeviceUnsupportedForVmVersion struct {
    +	InvalidDeviceSpec
    +
    +	CurrentVersion  string `xml:"currentVersion"`
    +	ExpectedVersion string `xml:"expectedVersion"`
    +}
    +
    +func init() {
    +	t["DeviceUnsupportedForVmVersion"] = reflect.TypeOf((*DeviceUnsupportedForVmVersion)(nil)).Elem()
    +}
    +
    +type DeviceUnsupportedForVmVersionFault DeviceUnsupportedForVmVersion
    +
    +func init() {
    +	t["DeviceUnsupportedForVmVersionFault"] = reflect.TypeOf((*DeviceUnsupportedForVmVersionFault)(nil)).Elem()
    +}
    +
    +type DiagnosticManagerBundleInfo struct {
    +	DynamicData
    +
    +	System *ManagedObjectReference `xml:"system,omitempty"`
    +	Url    string                  `xml:"url"`
    +}
    +
    +func init() {
    +	t["DiagnosticManagerBundleInfo"] = reflect.TypeOf((*DiagnosticManagerBundleInfo)(nil)).Elem()
    +}
    +
    +type DiagnosticManagerLogDescriptor struct {
    +	DynamicData
    +
    +	Key      string          `xml:"key"`
    +	FileName string          `xml:"fileName"`
    +	Creator  string          `xml:"creator"`
    +	Format   string          `xml:"format"`
    +	MimeType string          `xml:"mimeType"`
    +	Info     BaseDescription `xml:"info,typeattr"`
    +}
    +
    +func init() {
    +	t["DiagnosticManagerLogDescriptor"] = reflect.TypeOf((*DiagnosticManagerLogDescriptor)(nil)).Elem()
    +}
    +
    +type DiagnosticManagerLogHeader struct {
    +	DynamicData
    +
    +	LineStart int32    `xml:"lineStart"`
    +	LineEnd   int32    `xml:"lineEnd"`
    +	LineText  []string `xml:"lineText,omitempty"`
    +}
    +
    +func init() {
    +	t["DiagnosticManagerLogHeader"] = reflect.TypeOf((*DiagnosticManagerLogHeader)(nil)).Elem()
    +}
    +
    +type DigestNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["DigestNotSupported"] = reflect.TypeOf((*DigestNotSupported)(nil)).Elem()
    +}
    +
    +type DigestNotSupportedFault DigestNotSupported
    +
    +func init() {
    +	t["DigestNotSupportedFault"] = reflect.TypeOf((*DigestNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DirectoryNotEmpty struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["DirectoryNotEmpty"] = reflect.TypeOf((*DirectoryNotEmpty)(nil)).Elem()
    +}
    +
    +type DirectoryNotEmptyFault DirectoryNotEmpty
    +
    +func init() {
    +	t["DirectoryNotEmptyFault"] = reflect.TypeOf((*DirectoryNotEmptyFault)(nil)).Elem()
    +}
    +
    +type DisableAdminNotSupported struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["DisableAdminNotSupported"] = reflect.TypeOf((*DisableAdminNotSupported)(nil)).Elem()
    +}
    +
    +type DisableAdminNotSupportedFault DisableAdminNotSupported
    +
    +func init() {
    +	t["DisableAdminNotSupportedFault"] = reflect.TypeOf((*DisableAdminNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DisableEvcModeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DisableEvcModeRequestType"] = reflect.TypeOf((*DisableEvcModeRequestType)(nil)).Elem()
    +}
    +
    +type DisableEvcMode_Task DisableEvcModeRequestType
    +
    +func init() {
    +	t["DisableEvcMode_Task"] = reflect.TypeOf((*DisableEvcMode_Task)(nil)).Elem()
    +}
    +
    +type DisableEvcMode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DisableFeature DisableFeatureRequestType
    +
    +func init() {
    +	t["DisableFeature"] = reflect.TypeOf((*DisableFeature)(nil)).Elem()
    +}
    +
    +type DisableFeatureRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Host       *ManagedObjectReference `xml:"host,omitempty"`
    +	FeatureKey string                  `xml:"featureKey"`
    +}
    +
    +func init() {
    +	t["DisableFeatureRequestType"] = reflect.TypeOf((*DisableFeatureRequestType)(nil)).Elem()
    +}
    +
    +type DisableFeatureResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type DisableHyperThreading DisableHyperThreadingRequestType
    +
    +func init() {
    +	t["DisableHyperThreading"] = reflect.TypeOf((*DisableHyperThreading)(nil)).Elem()
    +}
    +
    +type DisableHyperThreadingRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DisableHyperThreadingRequestType"] = reflect.TypeOf((*DisableHyperThreadingRequestType)(nil)).Elem()
    +}
    +
    +type DisableHyperThreadingResponse struct {
    +}
    +
    +type DisableMultipathPath DisableMultipathPathRequestType
    +
    +func init() {
    +	t["DisableMultipathPath"] = reflect.TypeOf((*DisableMultipathPath)(nil)).Elem()
    +}
    +
    +type DisableMultipathPathRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	PathName string                 `xml:"pathName"`
    +}
    +
    +func init() {
    +	t["DisableMultipathPathRequestType"] = reflect.TypeOf((*DisableMultipathPathRequestType)(nil)).Elem()
    +}
    +
    +type DisableMultipathPathResponse struct {
    +}
    +
    +type DisableRuleset DisableRulesetRequestType
    +
    +func init() {
    +	t["DisableRuleset"] = reflect.TypeOf((*DisableRuleset)(nil)).Elem()
    +}
    +
    +type DisableRulesetRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   string                 `xml:"id"`
    +}
    +
    +func init() {
    +	t["DisableRulesetRequestType"] = reflect.TypeOf((*DisableRulesetRequestType)(nil)).Elem()
    +}
    +
    +type DisableRulesetResponse struct {
    +}
    +
    +type DisableSecondaryVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Vm   ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["DisableSecondaryVMRequestType"] = reflect.TypeOf((*DisableSecondaryVMRequestType)(nil)).Elem()
    +}
    +
    +type DisableSecondaryVM_Task DisableSecondaryVMRequestType
    +
    +func init() {
    +	t["DisableSecondaryVM_Task"] = reflect.TypeOf((*DisableSecondaryVM_Task)(nil)).Elem()
    +}
    +
    +type DisableSecondaryVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DisableSmartCardAuthentication DisableSmartCardAuthenticationRequestType
    +
    +func init() {
    +	t["DisableSmartCardAuthentication"] = reflect.TypeOf((*DisableSmartCardAuthentication)(nil)).Elem()
    +}
    +
    +type DisableSmartCardAuthenticationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DisableSmartCardAuthenticationRequestType"] = reflect.TypeOf((*DisableSmartCardAuthenticationRequestType)(nil)).Elem()
    +}
    +
    +type DisableSmartCardAuthenticationResponse struct {
    +}
    +
    +type DisallowedChangeByService struct {
    +	RuntimeFault
    +
    +	ServiceName      string `xml:"serviceName"`
    +	DisallowedChange string `xml:"disallowedChange,omitempty"`
    +}
    +
    +func init() {
    +	t["DisallowedChangeByService"] = reflect.TypeOf((*DisallowedChangeByService)(nil)).Elem()
    +}
    +
    +type DisallowedChangeByServiceFault DisallowedChangeByService
    +
    +func init() {
    +	t["DisallowedChangeByServiceFault"] = reflect.TypeOf((*DisallowedChangeByServiceFault)(nil)).Elem()
    +}
    +
    +type DisallowedDiskModeChange struct {
    +	InvalidDeviceSpec
    +}
    +
    +func init() {
    +	t["DisallowedDiskModeChange"] = reflect.TypeOf((*DisallowedDiskModeChange)(nil)).Elem()
    +}
    +
    +type DisallowedDiskModeChangeFault DisallowedDiskModeChange
    +
    +func init() {
    +	t["DisallowedDiskModeChangeFault"] = reflect.TypeOf((*DisallowedDiskModeChangeFault)(nil)).Elem()
    +}
    +
    +type DisallowedMigrationDeviceAttached struct {
    +	MigrationFault
    +
    +	Fault LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["DisallowedMigrationDeviceAttached"] = reflect.TypeOf((*DisallowedMigrationDeviceAttached)(nil)).Elem()
    +}
    +
    +type DisallowedMigrationDeviceAttachedFault DisallowedMigrationDeviceAttached
    +
    +func init() {
    +	t["DisallowedMigrationDeviceAttachedFault"] = reflect.TypeOf((*DisallowedMigrationDeviceAttachedFault)(nil)).Elem()
    +}
    +
    +type DisallowedOperationOnFailoverHost struct {
    +	RuntimeFault
    +
    +	Host     ManagedObjectReference `xml:"host"`
    +	Hostname string                 `xml:"hostname"`
    +}
    +
    +func init() {
    +	t["DisallowedOperationOnFailoverHost"] = reflect.TypeOf((*DisallowedOperationOnFailoverHost)(nil)).Elem()
    +}
    +
    +type DisallowedOperationOnFailoverHostFault DisallowedOperationOnFailoverHost
    +
    +func init() {
    +	t["DisallowedOperationOnFailoverHostFault"] = reflect.TypeOf((*DisallowedOperationOnFailoverHostFault)(nil)).Elem()
    +}
    +
    +type DisconnectHostRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["DisconnectHostRequestType"] = reflect.TypeOf((*DisconnectHostRequestType)(nil)).Elem()
    +}
    +
    +type DisconnectHost_Task DisconnectHostRequestType
    +
    +func init() {
    +	t["DisconnectHost_Task"] = reflect.TypeOf((*DisconnectHost_Task)(nil)).Elem()
    +}
    +
    +type DisconnectHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DisconnectedHostsBlockingEVC struct {
    +	EVCConfigFault
    +}
    +
    +func init() {
    +	t["DisconnectedHostsBlockingEVC"] = reflect.TypeOf((*DisconnectedHostsBlockingEVC)(nil)).Elem()
    +}
    +
    +type DisconnectedHostsBlockingEVCFault DisconnectedHostsBlockingEVC
    +
    +func init() {
    +	t["DisconnectedHostsBlockingEVCFault"] = reflect.TypeOf((*DisconnectedHostsBlockingEVCFault)(nil)).Elem()
    +}
    +
    +type DiscoverFcoeHbas DiscoverFcoeHbasRequestType
    +
    +func init() {
    +	t["DiscoverFcoeHbas"] = reflect.TypeOf((*DiscoverFcoeHbas)(nil)).Elem()
    +}
    +
    +type DiscoverFcoeHbasRequestType struct {
    +	This     ManagedObjectReference      `xml:"_this"`
    +	FcoeSpec FcoeConfigFcoeSpecification `xml:"fcoeSpec"`
    +}
    +
    +func init() {
    +	t["DiscoverFcoeHbasRequestType"] = reflect.TypeOf((*DiscoverFcoeHbasRequestType)(nil)).Elem()
    +}
    +
    +type DiscoverFcoeHbasResponse struct {
    +}
    +
    +type DiskChangeExtent struct {
    +	DynamicData
    +
    +	Start  int64 `xml:"start"`
    +	Length int64 `xml:"length"`
    +}
    +
    +func init() {
    +	t["DiskChangeExtent"] = reflect.TypeOf((*DiskChangeExtent)(nil)).Elem()
    +}
    +
    +type DiskChangeInfo struct {
    +	DynamicData
    +
    +	StartOffset int64              `xml:"startOffset"`
    +	Length      int64              `xml:"length"`
    +	ChangedArea []DiskChangeExtent `xml:"changedArea,omitempty"`
    +}
    +
    +func init() {
    +	t["DiskChangeInfo"] = reflect.TypeOf((*DiskChangeInfo)(nil)).Elem()
    +}
    +
    +type DiskHasPartitions struct {
    +	VsanDiskFault
    +}
    +
    +func init() {
    +	t["DiskHasPartitions"] = reflect.TypeOf((*DiskHasPartitions)(nil)).Elem()
    +}
    +
    +type DiskHasPartitionsFault DiskHasPartitions
    +
    +func init() {
    +	t["DiskHasPartitionsFault"] = reflect.TypeOf((*DiskHasPartitionsFault)(nil)).Elem()
    +}
    +
    +type DiskIsLastRemainingNonSSD struct {
    +	VsanDiskFault
    +}
    +
    +func init() {
    +	t["DiskIsLastRemainingNonSSD"] = reflect.TypeOf((*DiskIsLastRemainingNonSSD)(nil)).Elem()
    +}
    +
    +type DiskIsLastRemainingNonSSDFault DiskIsLastRemainingNonSSD
    +
    +func init() {
    +	t["DiskIsLastRemainingNonSSDFault"] = reflect.TypeOf((*DiskIsLastRemainingNonSSDFault)(nil)).Elem()
    +}
    +
    +type DiskIsNonLocal struct {
    +	VsanDiskFault
    +}
    +
    +func init() {
    +	t["DiskIsNonLocal"] = reflect.TypeOf((*DiskIsNonLocal)(nil)).Elem()
    +}
    +
    +type DiskIsNonLocalFault DiskIsNonLocal
    +
    +func init() {
    +	t["DiskIsNonLocalFault"] = reflect.TypeOf((*DiskIsNonLocalFault)(nil)).Elem()
    +}
    +
    +type DiskIsUSB struct {
    +	VsanDiskFault
    +}
    +
    +func init() {
    +	t["DiskIsUSB"] = reflect.TypeOf((*DiskIsUSB)(nil)).Elem()
    +}
    +
    +type DiskIsUSBFault DiskIsUSB
    +
    +func init() {
    +	t["DiskIsUSBFault"] = reflect.TypeOf((*DiskIsUSBFault)(nil)).Elem()
    +}
    +
    +type DiskMoveTypeNotSupported struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["DiskMoveTypeNotSupported"] = reflect.TypeOf((*DiskMoveTypeNotSupported)(nil)).Elem()
    +}
    +
    +type DiskMoveTypeNotSupportedFault DiskMoveTypeNotSupported
    +
    +func init() {
    +	t["DiskMoveTypeNotSupportedFault"] = reflect.TypeOf((*DiskMoveTypeNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DiskNotSupported struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	Disk int32 `xml:"disk"`
    +}
    +
    +func init() {
    +	t["DiskNotSupported"] = reflect.TypeOf((*DiskNotSupported)(nil)).Elem()
    +}
    +
    +type DiskNotSupportedFault BaseDiskNotSupported
    +
    +func init() {
    +	t["DiskNotSupportedFault"] = reflect.TypeOf((*DiskNotSupportedFault)(nil)).Elem()
    +}
    +
    +type DiskTooSmall struct {
    +	VsanDiskFault
    +}
    +
    +func init() {
    +	t["DiskTooSmall"] = reflect.TypeOf((*DiskTooSmall)(nil)).Elem()
    +}
    +
    +type DiskTooSmallFault DiskTooSmall
    +
    +func init() {
    +	t["DiskTooSmallFault"] = reflect.TypeOf((*DiskTooSmallFault)(nil)).Elem()
    +}
    +
    +type DissociateProfile DissociateProfileRequestType
    +
    +func init() {
    +	t["DissociateProfile"] = reflect.TypeOf((*DissociateProfile)(nil)).Elem()
    +}
    +
    +type DissociateProfileRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Entity []ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["DissociateProfileRequestType"] = reflect.TypeOf((*DissociateProfileRequestType)(nil)).Elem()
    +}
    +
    +type DissociateProfileResponse struct {
    +}
    +
    +type DistributedVirtualPort struct {
    +	DynamicData
    +
    +	Key              string                                 `xml:"key"`
    +	Config           DVPortConfigInfo                       `xml:"config"`
    +	DvsUuid          string                                 `xml:"dvsUuid"`
    +	PortgroupKey     string                                 `xml:"portgroupKey,omitempty"`
    +	ProxyHost        *ManagedObjectReference                `xml:"proxyHost,omitempty"`
    +	Connectee        *DistributedVirtualSwitchPortConnectee `xml:"connectee,omitempty"`
    +	Conflict         bool                                   `xml:"conflict"`
    +	ConflictPortKey  string                                 `xml:"conflictPortKey,omitempty"`
    +	State            *DVPortState                           `xml:"state,omitempty"`
    +	ConnectionCookie int32                                  `xml:"connectionCookie,omitempty"`
    +	LastStatusChange time.Time                              `xml:"lastStatusChange"`
    +	HostLocalPort    *bool                                  `xml:"hostLocalPort"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualPort"] = reflect.TypeOf((*DistributedVirtualPort)(nil)).Elem()
    +}
    +
    +type DistributedVirtualPortgroupInfo struct {
    +	DynamicData
    +
    +	SwitchName                  string                 `xml:"switchName"`
    +	SwitchUuid                  string                 `xml:"switchUuid"`
    +	PortgroupName               string                 `xml:"portgroupName"`
    +	PortgroupKey                string                 `xml:"portgroupKey"`
    +	PortgroupType               string                 `xml:"portgroupType"`
    +	UplinkPortgroup             bool                   `xml:"uplinkPortgroup"`
    +	Portgroup                   ManagedObjectReference `xml:"portgroup"`
    +	NetworkReservationSupported *bool                  `xml:"networkReservationSupported"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualPortgroupInfo"] = reflect.TypeOf((*DistributedVirtualPortgroupInfo)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostMember struct {
    +	DynamicData
    +
    +	RuntimeState  *DistributedVirtualSwitchHostMemberRuntimeState `xml:"runtimeState,omitempty"`
    +	Config        DistributedVirtualSwitchHostMemberConfigInfo    `xml:"config"`
    +	ProductInfo   *DistributedVirtualSwitchProductSpec            `xml:"productInfo,omitempty"`
    +	UplinkPortKey []string                                        `xml:"uplinkPortKey,omitempty"`
    +	Status        string                                          `xml:"status"`
    +	StatusDetail  string                                          `xml:"statusDetail,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostMember"] = reflect.TypeOf((*DistributedVirtualSwitchHostMember)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostMemberBacking struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostMemberBacking"] = reflect.TypeOf((*DistributedVirtualSwitchHostMemberBacking)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostMemberConfigInfo struct {
    +	DynamicData
    +
    +	Host                 *ManagedObjectReference                       `xml:"host,omitempty"`
    +	MaxProxySwitchPorts  int32                                         `xml:"maxProxySwitchPorts"`
    +	VendorSpecificConfig []DistributedVirtualSwitchKeyedOpaqueBlob     `xml:"vendorSpecificConfig,omitempty"`
    +	Backing              BaseDistributedVirtualSwitchHostMemberBacking `xml:"backing,typeattr"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostMemberConfigInfo"] = reflect.TypeOf((*DistributedVirtualSwitchHostMemberConfigInfo)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostMemberConfigSpec struct {
    +	DynamicData
    +
    +	Operation            string                                        `xml:"operation"`
    +	Host                 ManagedObjectReference                        `xml:"host"`
    +	Backing              BaseDistributedVirtualSwitchHostMemberBacking `xml:"backing,omitempty,typeattr"`
    +	MaxProxySwitchPorts  int32                                         `xml:"maxProxySwitchPorts,omitempty"`
    +	VendorSpecificConfig []DistributedVirtualSwitchKeyedOpaqueBlob     `xml:"vendorSpecificConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostMemberConfigSpec"] = reflect.TypeOf((*DistributedVirtualSwitchHostMemberConfigSpec)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostMemberPnicBacking struct {
    +	DistributedVirtualSwitchHostMemberBacking
    +
    +	PnicSpec []DistributedVirtualSwitchHostMemberPnicSpec `xml:"pnicSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostMemberPnicBacking"] = reflect.TypeOf((*DistributedVirtualSwitchHostMemberPnicBacking)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostMemberPnicSpec struct {
    +	DynamicData
    +
    +	PnicDevice         string `xml:"pnicDevice"`
    +	UplinkPortKey      string `xml:"uplinkPortKey,omitempty"`
    +	UplinkPortgroupKey string `xml:"uplinkPortgroupKey,omitempty"`
    +	ConnectionCookie   int32  `xml:"connectionCookie,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostMemberPnicSpec"] = reflect.TypeOf((*DistributedVirtualSwitchHostMemberPnicSpec)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostMemberRuntimeState struct {
    +	DynamicData
    +
    +	CurrentMaxProxySwitchPorts int32 `xml:"currentMaxProxySwitchPorts"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostMemberRuntimeState"] = reflect.TypeOf((*DistributedVirtualSwitchHostMemberRuntimeState)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchHostProductSpec struct {
    +	DynamicData
    +
    +	ProductLineId string `xml:"productLineId,omitempty"`
    +	Version       string `xml:"version,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchHostProductSpec"] = reflect.TypeOf((*DistributedVirtualSwitchHostProductSpec)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchInfo struct {
    +	DynamicData
    +
    +	SwitchName                  string                 `xml:"switchName"`
    +	SwitchUuid                  string                 `xml:"switchUuid"`
    +	DistributedVirtualSwitch    ManagedObjectReference `xml:"distributedVirtualSwitch"`
    +	NetworkReservationSupported *bool                  `xml:"networkReservationSupported"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchInfo"] = reflect.TypeOf((*DistributedVirtualSwitchInfo)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchKeyedOpaqueBlob struct {
    +	DynamicData
    +
    +	Key        string `xml:"key"`
    +	OpaqueData string `xml:"opaqueData"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchKeyedOpaqueBlob"] = reflect.TypeOf((*DistributedVirtualSwitchKeyedOpaqueBlob)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManagerCompatibilityResult struct {
    +	DynamicData
    +
    +	Host  ManagedObjectReference `xml:"host"`
    +	Error []LocalizedMethodFault `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManagerCompatibilityResult"] = reflect.TypeOf((*DistributedVirtualSwitchManagerCompatibilityResult)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManagerDvsProductSpec struct {
    +	DynamicData
    +
    +	NewSwitchProductSpec     *DistributedVirtualSwitchProductSpec `xml:"newSwitchProductSpec,omitempty"`
    +	DistributedVirtualSwitch *ManagedObjectReference              `xml:"distributedVirtualSwitch,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManagerDvsProductSpec"] = reflect.TypeOf((*DistributedVirtualSwitchManagerDvsProductSpec)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManagerHostArrayFilter struct {
    +	DistributedVirtualSwitchManagerHostDvsFilterSpec
    +
    +	Host []ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManagerHostArrayFilter"] = reflect.TypeOf((*DistributedVirtualSwitchManagerHostArrayFilter)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManagerHostContainer struct {
    +	DynamicData
    +
    +	Container ManagedObjectReference `xml:"container"`
    +	Recursive bool                   `xml:"recursive"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManagerHostContainer"] = reflect.TypeOf((*DistributedVirtualSwitchManagerHostContainer)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManagerHostContainerFilter struct {
    +	DistributedVirtualSwitchManagerHostDvsFilterSpec
    +
    +	HostContainer DistributedVirtualSwitchManagerHostContainer `xml:"hostContainer"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManagerHostContainerFilter"] = reflect.TypeOf((*DistributedVirtualSwitchManagerHostContainerFilter)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManagerHostDvsFilterSpec struct {
    +	DynamicData
    +
    +	Inclusive bool `xml:"inclusive"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManagerHostDvsFilterSpec"] = reflect.TypeOf((*DistributedVirtualSwitchManagerHostDvsFilterSpec)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManagerHostDvsMembershipFilter struct {
    +	DistributedVirtualSwitchManagerHostDvsFilterSpec
    +
    +	DistributedVirtualSwitch ManagedObjectReference `xml:"distributedVirtualSwitch"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManagerHostDvsMembershipFilter"] = reflect.TypeOf((*DistributedVirtualSwitchManagerHostDvsMembershipFilter)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchManagerImportResult struct {
    +	DynamicData
    +
    +	DistributedVirtualSwitch    []ManagedObjectReference                `xml:"distributedVirtualSwitch,omitempty"`
    +	DistributedVirtualPortgroup []ManagedObjectReference                `xml:"distributedVirtualPortgroup,omitempty"`
    +	ImportFault                 []ImportOperationBulkFaultFaultOnImport `xml:"importFault,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchManagerImportResult"] = reflect.TypeOf((*DistributedVirtualSwitchManagerImportResult)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchPortConnectee struct {
    +	DynamicData
    +
    +	ConnectedEntity *ManagedObjectReference `xml:"connectedEntity,omitempty"`
    +	NicKey          string                  `xml:"nicKey,omitempty"`
    +	Type            string                  `xml:"type,omitempty"`
    +	AddressHint     string                  `xml:"addressHint,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchPortConnectee"] = reflect.TypeOf((*DistributedVirtualSwitchPortConnectee)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchPortConnection struct {
    +	DynamicData
    +
    +	SwitchUuid       string `xml:"switchUuid"`
    +	PortgroupKey     string `xml:"portgroupKey,omitempty"`
    +	PortKey          string `xml:"portKey,omitempty"`
    +	ConnectionCookie int32  `xml:"connectionCookie,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchPortConnection"] = reflect.TypeOf((*DistributedVirtualSwitchPortConnection)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchPortCriteria struct {
    +	DynamicData
    +
    +	Connected    *bool                    `xml:"connected"`
    +	Active       *bool                    `xml:"active"`
    +	UplinkPort   *bool                    `xml:"uplinkPort"`
    +	Scope        *ManagedObjectReference  `xml:"scope,omitempty"`
    +	PortgroupKey []string                 `xml:"portgroupKey,omitempty"`
    +	Inside       *bool                    `xml:"inside"`
    +	PortKey      []string                 `xml:"portKey,omitempty"`
    +	Host         []ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchPortCriteria"] = reflect.TypeOf((*DistributedVirtualSwitchPortCriteria)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchPortStatistics struct {
    +	DynamicData
    +
    +	PacketsInMulticast  int64 `xml:"packetsInMulticast"`
    +	PacketsOutMulticast int64 `xml:"packetsOutMulticast"`
    +	BytesInMulticast    int64 `xml:"bytesInMulticast"`
    +	BytesOutMulticast   int64 `xml:"bytesOutMulticast"`
    +	PacketsInUnicast    int64 `xml:"packetsInUnicast"`
    +	PacketsOutUnicast   int64 `xml:"packetsOutUnicast"`
    +	BytesInUnicast      int64 `xml:"bytesInUnicast"`
    +	BytesOutUnicast     int64 `xml:"bytesOutUnicast"`
    +	PacketsInBroadcast  int64 `xml:"packetsInBroadcast"`
    +	PacketsOutBroadcast int64 `xml:"packetsOutBroadcast"`
    +	BytesInBroadcast    int64 `xml:"bytesInBroadcast"`
    +	BytesOutBroadcast   int64 `xml:"bytesOutBroadcast"`
    +	PacketsInDropped    int64 `xml:"packetsInDropped"`
    +	PacketsOutDropped   int64 `xml:"packetsOutDropped"`
    +	PacketsInException  int64 `xml:"packetsInException"`
    +	PacketsOutException int64 `xml:"packetsOutException"`
    +	BytesInFromPnic     int64 `xml:"bytesInFromPnic,omitempty"`
    +	BytesOutToPnic      int64 `xml:"bytesOutToPnic,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchPortStatistics"] = reflect.TypeOf((*DistributedVirtualSwitchPortStatistics)(nil)).Elem()
    +}
    +
    +type DistributedVirtualSwitchProductSpec struct {
    +	DynamicData
    +
    +	Name            string `xml:"name,omitempty"`
    +	Vendor          string `xml:"vendor,omitempty"`
    +	Version         string `xml:"version,omitempty"`
    +	Build           string `xml:"build,omitempty"`
    +	ForwardingClass string `xml:"forwardingClass,omitempty"`
    +	BundleId        string `xml:"bundleId,omitempty"`
    +	BundleUrl       string `xml:"bundleUrl,omitempty"`
    +}
    +
    +func init() {
    +	t["DistributedVirtualSwitchProductSpec"] = reflect.TypeOf((*DistributedVirtualSwitchProductSpec)(nil)).Elem()
    +}
    +
    +type DoesCustomizationSpecExist DoesCustomizationSpecExistRequestType
    +
    +func init() {
    +	t["DoesCustomizationSpecExist"] = reflect.TypeOf((*DoesCustomizationSpecExist)(nil)).Elem()
    +}
    +
    +type DoesCustomizationSpecExistRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["DoesCustomizationSpecExistRequestType"] = reflect.TypeOf((*DoesCustomizationSpecExistRequestType)(nil)).Elem()
    +}
    +
    +type DoesCustomizationSpecExistResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type DomainNotFound struct {
    +	ActiveDirectoryFault
    +
    +	DomainName string `xml:"domainName"`
    +}
    +
    +func init() {
    +	t["DomainNotFound"] = reflect.TypeOf((*DomainNotFound)(nil)).Elem()
    +}
    +
    +type DomainNotFoundFault DomainNotFound
    +
    +func init() {
    +	t["DomainNotFoundFault"] = reflect.TypeOf((*DomainNotFoundFault)(nil)).Elem()
    +}
    +
    +type DrsDisabledEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DrsDisabledEvent"] = reflect.TypeOf((*DrsDisabledEvent)(nil)).Elem()
    +}
    +
    +type DrsDisabledOnVm struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["DrsDisabledOnVm"] = reflect.TypeOf((*DrsDisabledOnVm)(nil)).Elem()
    +}
    +
    +type DrsDisabledOnVmFault DrsDisabledOnVm
    +
    +func init() {
    +	t["DrsDisabledOnVmFault"] = reflect.TypeOf((*DrsDisabledOnVmFault)(nil)).Elem()
    +}
    +
    +type DrsEnabledEvent struct {
    +	ClusterEvent
    +
    +	Behavior string `xml:"behavior"`
    +}
    +
    +func init() {
    +	t["DrsEnabledEvent"] = reflect.TypeOf((*DrsEnabledEvent)(nil)).Elem()
    +}
    +
    +type DrsEnteredStandbyModeEvent struct {
    +	EnteredStandbyModeEvent
    +}
    +
    +func init() {
    +	t["DrsEnteredStandbyModeEvent"] = reflect.TypeOf((*DrsEnteredStandbyModeEvent)(nil)).Elem()
    +}
    +
    +type DrsEnteringStandbyModeEvent struct {
    +	EnteringStandbyModeEvent
    +}
    +
    +func init() {
    +	t["DrsEnteringStandbyModeEvent"] = reflect.TypeOf((*DrsEnteringStandbyModeEvent)(nil)).Elem()
    +}
    +
    +type DrsExitStandbyModeFailedEvent struct {
    +	ExitStandbyModeFailedEvent
    +}
    +
    +func init() {
    +	t["DrsExitStandbyModeFailedEvent"] = reflect.TypeOf((*DrsExitStandbyModeFailedEvent)(nil)).Elem()
    +}
    +
    +type DrsExitedStandbyModeEvent struct {
    +	ExitedStandbyModeEvent
    +}
    +
    +func init() {
    +	t["DrsExitedStandbyModeEvent"] = reflect.TypeOf((*DrsExitedStandbyModeEvent)(nil)).Elem()
    +}
    +
    +type DrsExitingStandbyModeEvent struct {
    +	ExitingStandbyModeEvent
    +}
    +
    +func init() {
    +	t["DrsExitingStandbyModeEvent"] = reflect.TypeOf((*DrsExitingStandbyModeEvent)(nil)).Elem()
    +}
    +
    +type DrsInvocationFailedEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DrsInvocationFailedEvent"] = reflect.TypeOf((*DrsInvocationFailedEvent)(nil)).Elem()
    +}
    +
    +type DrsRecoveredFromFailureEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["DrsRecoveredFromFailureEvent"] = reflect.TypeOf((*DrsRecoveredFromFailureEvent)(nil)).Elem()
    +}
    +
    +type DrsResourceConfigureFailedEvent struct {
    +	HostEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["DrsResourceConfigureFailedEvent"] = reflect.TypeOf((*DrsResourceConfigureFailedEvent)(nil)).Elem()
    +}
    +
    +type DrsResourceConfigureSyncedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["DrsResourceConfigureSyncedEvent"] = reflect.TypeOf((*DrsResourceConfigureSyncedEvent)(nil)).Elem()
    +}
    +
    +type DrsRuleComplianceEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["DrsRuleComplianceEvent"] = reflect.TypeOf((*DrsRuleComplianceEvent)(nil)).Elem()
    +}
    +
    +type DrsRuleViolationEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["DrsRuleViolationEvent"] = reflect.TypeOf((*DrsRuleViolationEvent)(nil)).Elem()
    +}
    +
    +type DrsSoftRuleViolationEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["DrsSoftRuleViolationEvent"] = reflect.TypeOf((*DrsSoftRuleViolationEvent)(nil)).Elem()
    +}
    +
    +type DrsVmMigratedEvent struct {
    +	VmMigratedEvent
    +}
    +
    +func init() {
    +	t["DrsVmMigratedEvent"] = reflect.TypeOf((*DrsVmMigratedEvent)(nil)).Elem()
    +}
    +
    +type DrsVmPoweredOnEvent struct {
    +	VmPoweredOnEvent
    +}
    +
    +func init() {
    +	t["DrsVmPoweredOnEvent"] = reflect.TypeOf((*DrsVmPoweredOnEvent)(nil)).Elem()
    +}
    +
    +type DrsVmotionIncompatibleFault struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["DrsVmotionIncompatibleFault"] = reflect.TypeOf((*DrsVmotionIncompatibleFault)(nil)).Elem()
    +}
    +
    +type DrsVmotionIncompatibleFaultFault DrsVmotionIncompatibleFault
    +
    +func init() {
    +	t["DrsVmotionIncompatibleFaultFault"] = reflect.TypeOf((*DrsVmotionIncompatibleFaultFault)(nil)).Elem()
    +}
    +
    +type DuplicateCustomizationSpec DuplicateCustomizationSpecRequestType
    +
    +func init() {
    +	t["DuplicateCustomizationSpec"] = reflect.TypeOf((*DuplicateCustomizationSpec)(nil)).Elem()
    +}
    +
    +type DuplicateCustomizationSpecRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Name    string                 `xml:"name"`
    +	NewName string                 `xml:"newName"`
    +}
    +
    +func init() {
    +	t["DuplicateCustomizationSpecRequestType"] = reflect.TypeOf((*DuplicateCustomizationSpecRequestType)(nil)).Elem()
    +}
    +
    +type DuplicateCustomizationSpecResponse struct {
    +}
    +
    +type DuplicateDisks struct {
    +	VsanDiskFault
    +}
    +
    +func init() {
    +	t["DuplicateDisks"] = reflect.TypeOf((*DuplicateDisks)(nil)).Elem()
    +}
    +
    +type DuplicateDisksFault DuplicateDisks
    +
    +func init() {
    +	t["DuplicateDisksFault"] = reflect.TypeOf((*DuplicateDisksFault)(nil)).Elem()
    +}
    +
    +type DuplicateIpDetectedEvent struct {
    +	HostEvent
    +
    +	DuplicateIP string `xml:"duplicateIP"`
    +	MacAddress  string `xml:"macAddress"`
    +}
    +
    +func init() {
    +	t["DuplicateIpDetectedEvent"] = reflect.TypeOf((*DuplicateIpDetectedEvent)(nil)).Elem()
    +}
    +
    +type DuplicateName struct {
    +	VimFault
    +
    +	Name   string                 `xml:"name"`
    +	Object ManagedObjectReference `xml:"object"`
    +}
    +
    +func init() {
    +	t["DuplicateName"] = reflect.TypeOf((*DuplicateName)(nil)).Elem()
    +}
    +
    +type DuplicateNameFault DuplicateName
    +
    +func init() {
    +	t["DuplicateNameFault"] = reflect.TypeOf((*DuplicateNameFault)(nil)).Elem()
    +}
    +
    +type DuplicateVsanNetworkInterface struct {
    +	VsanFault
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["DuplicateVsanNetworkInterface"] = reflect.TypeOf((*DuplicateVsanNetworkInterface)(nil)).Elem()
    +}
    +
    +type DuplicateVsanNetworkInterfaceFault DuplicateVsanNetworkInterface
    +
    +func init() {
    +	t["DuplicateVsanNetworkInterfaceFault"] = reflect.TypeOf((*DuplicateVsanNetworkInterfaceFault)(nil)).Elem()
    +}
    +
    +type DvpgImportEvent struct {
    +	DVPortgroupEvent
    +
    +	ImportType string `xml:"importType"`
    +}
    +
    +func init() {
    +	t["DvpgImportEvent"] = reflect.TypeOf((*DvpgImportEvent)(nil)).Elem()
    +}
    +
    +type DvpgRestoreEvent struct {
    +	DVPortgroupEvent
    +}
    +
    +func init() {
    +	t["DvpgRestoreEvent"] = reflect.TypeOf((*DvpgRestoreEvent)(nil)).Elem()
    +}
    +
    +type DvsAcceptNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +}
    +
    +func init() {
    +	t["DvsAcceptNetworkRuleAction"] = reflect.TypeOf((*DvsAcceptNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsApplyOperationFault struct {
    +	DvsFault
    +
    +	ObjectFault []DvsApplyOperationFaultFaultOnObject `xml:"objectFault"`
    +}
    +
    +func init() {
    +	t["DvsApplyOperationFault"] = reflect.TypeOf((*DvsApplyOperationFault)(nil)).Elem()
    +}
    +
    +type DvsApplyOperationFaultFault DvsApplyOperationFault
    +
    +func init() {
    +	t["DvsApplyOperationFaultFault"] = reflect.TypeOf((*DvsApplyOperationFaultFault)(nil)).Elem()
    +}
    +
    +type DvsApplyOperationFaultFaultOnObject struct {
    +	DynamicData
    +
    +	ObjectId string               `xml:"objectId"`
    +	Type     string               `xml:"type"`
    +	Fault    LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["DvsApplyOperationFaultFaultOnObject"] = reflect.TypeOf((*DvsApplyOperationFaultFaultOnObject)(nil)).Elem()
    +}
    +
    +type DvsCopyNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +}
    +
    +func init() {
    +	t["DvsCopyNetworkRuleAction"] = reflect.TypeOf((*DvsCopyNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsCreatedEvent struct {
    +	DvsEvent
    +
    +	Parent FolderEventArgument `xml:"parent"`
    +}
    +
    +func init() {
    +	t["DvsCreatedEvent"] = reflect.TypeOf((*DvsCreatedEvent)(nil)).Elem()
    +}
    +
    +type DvsDestroyedEvent struct {
    +	DvsEvent
    +}
    +
    +func init() {
    +	t["DvsDestroyedEvent"] = reflect.TypeOf((*DvsDestroyedEvent)(nil)).Elem()
    +}
    +
    +type DvsDropNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +}
    +
    +func init() {
    +	t["DvsDropNetworkRuleAction"] = reflect.TypeOf((*DvsDropNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["DvsEvent"] = reflect.TypeOf((*DvsEvent)(nil)).Elem()
    +}
    +
    +type DvsEventArgument struct {
    +	EntityEventArgument
    +
    +	Dvs ManagedObjectReference `xml:"dvs"`
    +}
    +
    +func init() {
    +	t["DvsEventArgument"] = reflect.TypeOf((*DvsEventArgument)(nil)).Elem()
    +}
    +
    +type DvsFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["DvsFault"] = reflect.TypeOf((*DvsFault)(nil)).Elem()
    +}
    +
    +type DvsFaultFault BaseDvsFault
    +
    +func init() {
    +	t["DvsFaultFault"] = reflect.TypeOf((*DvsFaultFault)(nil)).Elem()
    +}
    +
    +type DvsFilterConfig struct {
    +	InheritablePolicy
    +
    +	Key        string              `xml:"key,omitempty"`
    +	AgentName  string              `xml:"agentName,omitempty"`
    +	SlotNumber string              `xml:"slotNumber,omitempty"`
    +	Parameters *DvsFilterParameter `xml:"parameters,omitempty"`
    +	OnFailure  string              `xml:"onFailure,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsFilterConfig"] = reflect.TypeOf((*DvsFilterConfig)(nil)).Elem()
    +}
    +
    +type DvsFilterConfigSpec struct {
    +	DvsFilterConfig
    +
    +	Operation string `xml:"operation"`
    +}
    +
    +func init() {
    +	t["DvsFilterConfigSpec"] = reflect.TypeOf((*DvsFilterConfigSpec)(nil)).Elem()
    +}
    +
    +type DvsFilterParameter struct {
    +	DynamicData
    +
    +	Parameters []string `xml:"parameters,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsFilterParameter"] = reflect.TypeOf((*DvsFilterParameter)(nil)).Elem()
    +}
    +
    +type DvsFilterPolicy struct {
    +	InheritablePolicy
    +
    +	FilterConfig []BaseDvsFilterConfig `xml:"filterConfig,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["DvsFilterPolicy"] = reflect.TypeOf((*DvsFilterPolicy)(nil)).Elem()
    +}
    +
    +type DvsGreEncapNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +
    +	EncapsulationIp SingleIp `xml:"encapsulationIp"`
    +}
    +
    +func init() {
    +	t["DvsGreEncapNetworkRuleAction"] = reflect.TypeOf((*DvsGreEncapNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsHealthStatusChangeEvent struct {
    +	HostEvent
    +
    +	SwitchUuid   string                          `xml:"switchUuid"`
    +	HealthResult BaseHostMemberHealthCheckResult `xml:"healthResult,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["DvsHealthStatusChangeEvent"] = reflect.TypeOf((*DvsHealthStatusChangeEvent)(nil)).Elem()
    +}
    +
    +type DvsHostBackInSyncEvent struct {
    +	DvsEvent
    +
    +	HostBackInSync HostEventArgument `xml:"hostBackInSync"`
    +}
    +
    +func init() {
    +	t["DvsHostBackInSyncEvent"] = reflect.TypeOf((*DvsHostBackInSyncEvent)(nil)).Elem()
    +}
    +
    +type DvsHostInfrastructureTrafficResource struct {
    +	DynamicData
    +
    +	Key            string                                         `xml:"key"`
    +	Description    string                                         `xml:"description,omitempty"`
    +	AllocationInfo DvsHostInfrastructureTrafficResourceAllocation `xml:"allocationInfo"`
    +}
    +
    +func init() {
    +	t["DvsHostInfrastructureTrafficResource"] = reflect.TypeOf((*DvsHostInfrastructureTrafficResource)(nil)).Elem()
    +}
    +
    +type DvsHostInfrastructureTrafficResourceAllocation struct {
    +	DynamicData
    +
    +	Limit       *int64      `xml:"limit"`
    +	Shares      *SharesInfo `xml:"shares,omitempty"`
    +	Reservation *int64      `xml:"reservation"`
    +}
    +
    +func init() {
    +	t["DvsHostInfrastructureTrafficResourceAllocation"] = reflect.TypeOf((*DvsHostInfrastructureTrafficResourceAllocation)(nil)).Elem()
    +}
    +
    +type DvsHostJoinedEvent struct {
    +	DvsEvent
    +
    +	HostJoined HostEventArgument `xml:"hostJoined"`
    +}
    +
    +func init() {
    +	t["DvsHostJoinedEvent"] = reflect.TypeOf((*DvsHostJoinedEvent)(nil)).Elem()
    +}
    +
    +type DvsHostLeftEvent struct {
    +	DvsEvent
    +
    +	HostLeft HostEventArgument `xml:"hostLeft"`
    +}
    +
    +func init() {
    +	t["DvsHostLeftEvent"] = reflect.TypeOf((*DvsHostLeftEvent)(nil)).Elem()
    +}
    +
    +type DvsHostStatusUpdated struct {
    +	DvsEvent
    +
    +	HostMember      HostEventArgument `xml:"hostMember"`
    +	OldStatus       string            `xml:"oldStatus,omitempty"`
    +	NewStatus       string            `xml:"newStatus,omitempty"`
    +	OldStatusDetail string            `xml:"oldStatusDetail,omitempty"`
    +	NewStatusDetail string            `xml:"newStatusDetail,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsHostStatusUpdated"] = reflect.TypeOf((*DvsHostStatusUpdated)(nil)).Elem()
    +}
    +
    +type DvsHostVNicProfile struct {
    +	DvsVNicProfile
    +}
    +
    +func init() {
    +	t["DvsHostVNicProfile"] = reflect.TypeOf((*DvsHostVNicProfile)(nil)).Elem()
    +}
    +
    +type DvsHostWentOutOfSyncEvent struct {
    +	DvsEvent
    +
    +	HostOutOfSync DvsOutOfSyncHostArgument `xml:"hostOutOfSync"`
    +}
    +
    +func init() {
    +	t["DvsHostWentOutOfSyncEvent"] = reflect.TypeOf((*DvsHostWentOutOfSyncEvent)(nil)).Elem()
    +}
    +
    +type DvsImportEvent struct {
    +	DvsEvent
    +
    +	ImportType string `xml:"importType"`
    +}
    +
    +func init() {
    +	t["DvsImportEvent"] = reflect.TypeOf((*DvsImportEvent)(nil)).Elem()
    +}
    +
    +type DvsIpNetworkRuleQualifier struct {
    +	DvsNetworkRuleQualifier
    +
    +	SourceAddress      BaseIpAddress  `xml:"sourceAddress,omitempty,typeattr"`
    +	DestinationAddress BaseIpAddress  `xml:"destinationAddress,omitempty,typeattr"`
    +	Protocol           *IntExpression `xml:"protocol,omitempty"`
    +	SourceIpPort       BaseDvsIpPort  `xml:"sourceIpPort,omitempty,typeattr"`
    +	DestinationIpPort  BaseDvsIpPort  `xml:"destinationIpPort,omitempty,typeattr"`
    +	TcpFlags           *IntExpression `xml:"tcpFlags,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsIpNetworkRuleQualifier"] = reflect.TypeOf((*DvsIpNetworkRuleQualifier)(nil)).Elem()
    +}
    +
    +type DvsIpPort struct {
    +	NegatableExpression
    +}
    +
    +func init() {
    +	t["DvsIpPort"] = reflect.TypeOf((*DvsIpPort)(nil)).Elem()
    +}
    +
    +type DvsIpPortRange struct {
    +	DvsIpPort
    +
    +	StartPortNumber int32 `xml:"startPortNumber"`
    +	EndPortNumber   int32 `xml:"endPortNumber"`
    +}
    +
    +func init() {
    +	t["DvsIpPortRange"] = reflect.TypeOf((*DvsIpPortRange)(nil)).Elem()
    +}
    +
    +type DvsLogNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +}
    +
    +func init() {
    +	t["DvsLogNetworkRuleAction"] = reflect.TypeOf((*DvsLogNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsMacNetworkRuleQualifier struct {
    +	DvsNetworkRuleQualifier
    +
    +	SourceAddress      BaseMacAddress `xml:"sourceAddress,omitempty,typeattr"`
    +	DestinationAddress BaseMacAddress `xml:"destinationAddress,omitempty,typeattr"`
    +	Protocol           *IntExpression `xml:"protocol,omitempty"`
    +	VlanId             *IntExpression `xml:"vlanId,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsMacNetworkRuleQualifier"] = reflect.TypeOf((*DvsMacNetworkRuleQualifier)(nil)).Elem()
    +}
    +
    +type DvsMacRewriteNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +
    +	RewriteMac string `xml:"rewriteMac"`
    +}
    +
    +func init() {
    +	t["DvsMacRewriteNetworkRuleAction"] = reflect.TypeOf((*DvsMacRewriteNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsMergedEvent struct {
    +	DvsEvent
    +
    +	SourceDvs      DvsEventArgument `xml:"sourceDvs"`
    +	DestinationDvs DvsEventArgument `xml:"destinationDvs"`
    +}
    +
    +func init() {
    +	t["DvsMergedEvent"] = reflect.TypeOf((*DvsMergedEvent)(nil)).Elem()
    +}
    +
    +type DvsNetworkRuleAction struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["DvsNetworkRuleAction"] = reflect.TypeOf((*DvsNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsNetworkRuleQualifier struct {
    +	DynamicData
    +
    +	Key string `xml:"key,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsNetworkRuleQualifier"] = reflect.TypeOf((*DvsNetworkRuleQualifier)(nil)).Elem()
    +}
    +
    +type DvsNotAuthorized struct {
    +	DvsFault
    +
    +	SessionExtensionKey string `xml:"sessionExtensionKey,omitempty"`
    +	DvsExtensionKey     string `xml:"dvsExtensionKey,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsNotAuthorized"] = reflect.TypeOf((*DvsNotAuthorized)(nil)).Elem()
    +}
    +
    +type DvsNotAuthorizedFault DvsNotAuthorized
    +
    +func init() {
    +	t["DvsNotAuthorizedFault"] = reflect.TypeOf((*DvsNotAuthorizedFault)(nil)).Elem()
    +}
    +
    +type DvsOperationBulkFault struct {
    +	DvsFault
    +
    +	HostFault []DvsOperationBulkFaultFaultOnHost `xml:"hostFault"`
    +}
    +
    +func init() {
    +	t["DvsOperationBulkFault"] = reflect.TypeOf((*DvsOperationBulkFault)(nil)).Elem()
    +}
    +
    +type DvsOperationBulkFaultFault DvsOperationBulkFault
    +
    +func init() {
    +	t["DvsOperationBulkFaultFault"] = reflect.TypeOf((*DvsOperationBulkFaultFault)(nil)).Elem()
    +}
    +
    +type DvsOperationBulkFaultFaultOnHost struct {
    +	DynamicData
    +
    +	Host  ManagedObjectReference `xml:"host"`
    +	Fault LocalizedMethodFault   `xml:"fault"`
    +}
    +
    +func init() {
    +	t["DvsOperationBulkFaultFaultOnHost"] = reflect.TypeOf((*DvsOperationBulkFaultFaultOnHost)(nil)).Elem()
    +}
    +
    +type DvsOutOfSyncHostArgument struct {
    +	DynamicData
    +
    +	OutOfSyncHost   HostEventArgument `xml:"outOfSyncHost"`
    +	ConfigParamters []string          `xml:"configParamters"`
    +}
    +
    +func init() {
    +	t["DvsOutOfSyncHostArgument"] = reflect.TypeOf((*DvsOutOfSyncHostArgument)(nil)).Elem()
    +}
    +
    +type DvsPortBlockedEvent struct {
    +	DvsEvent
    +
    +	PortKey        string        `xml:"portKey"`
    +	StatusDetail   string        `xml:"statusDetail,omitempty"`
    +	RuntimeInfo    *DVPortStatus `xml:"runtimeInfo,omitempty"`
    +	PrevBlockState string        `xml:"prevBlockState,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortBlockedEvent"] = reflect.TypeOf((*DvsPortBlockedEvent)(nil)).Elem()
    +}
    +
    +type DvsPortConnectedEvent struct {
    +	DvsEvent
    +
    +	PortKey   string                                 `xml:"portKey"`
    +	Connectee *DistributedVirtualSwitchPortConnectee `xml:"connectee,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortConnectedEvent"] = reflect.TypeOf((*DvsPortConnectedEvent)(nil)).Elem()
    +}
    +
    +type DvsPortCreatedEvent struct {
    +	DvsEvent
    +
    +	PortKey []string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["DvsPortCreatedEvent"] = reflect.TypeOf((*DvsPortCreatedEvent)(nil)).Elem()
    +}
    +
    +type DvsPortDeletedEvent struct {
    +	DvsEvent
    +
    +	PortKey []string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["DvsPortDeletedEvent"] = reflect.TypeOf((*DvsPortDeletedEvent)(nil)).Elem()
    +}
    +
    +type DvsPortDisconnectedEvent struct {
    +	DvsEvent
    +
    +	PortKey   string                                 `xml:"portKey"`
    +	Connectee *DistributedVirtualSwitchPortConnectee `xml:"connectee,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortDisconnectedEvent"] = reflect.TypeOf((*DvsPortDisconnectedEvent)(nil)).Elem()
    +}
    +
    +type DvsPortEnteredPassthruEvent struct {
    +	DvsEvent
    +
    +	PortKey     string        `xml:"portKey"`
    +	RuntimeInfo *DVPortStatus `xml:"runtimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortEnteredPassthruEvent"] = reflect.TypeOf((*DvsPortEnteredPassthruEvent)(nil)).Elem()
    +}
    +
    +type DvsPortExitedPassthruEvent struct {
    +	DvsEvent
    +
    +	PortKey     string        `xml:"portKey"`
    +	RuntimeInfo *DVPortStatus `xml:"runtimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortExitedPassthruEvent"] = reflect.TypeOf((*DvsPortExitedPassthruEvent)(nil)).Elem()
    +}
    +
    +type DvsPortJoinPortgroupEvent struct {
    +	DvsEvent
    +
    +	PortKey       string `xml:"portKey"`
    +	PortgroupKey  string `xml:"portgroupKey"`
    +	PortgroupName string `xml:"portgroupName"`
    +}
    +
    +func init() {
    +	t["DvsPortJoinPortgroupEvent"] = reflect.TypeOf((*DvsPortJoinPortgroupEvent)(nil)).Elem()
    +}
    +
    +type DvsPortLeavePortgroupEvent struct {
    +	DvsEvent
    +
    +	PortKey       string `xml:"portKey"`
    +	PortgroupKey  string `xml:"portgroupKey"`
    +	PortgroupName string `xml:"portgroupName"`
    +}
    +
    +func init() {
    +	t["DvsPortLeavePortgroupEvent"] = reflect.TypeOf((*DvsPortLeavePortgroupEvent)(nil)).Elem()
    +}
    +
    +type DvsPortLinkDownEvent struct {
    +	DvsEvent
    +
    +	PortKey     string        `xml:"portKey"`
    +	RuntimeInfo *DVPortStatus `xml:"runtimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortLinkDownEvent"] = reflect.TypeOf((*DvsPortLinkDownEvent)(nil)).Elem()
    +}
    +
    +type DvsPortLinkUpEvent struct {
    +	DvsEvent
    +
    +	PortKey     string        `xml:"portKey"`
    +	RuntimeInfo *DVPortStatus `xml:"runtimeInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortLinkUpEvent"] = reflect.TypeOf((*DvsPortLinkUpEvent)(nil)).Elem()
    +}
    +
    +type DvsPortReconfiguredEvent struct {
    +	DvsEvent
    +
    +	PortKey       []string                   `xml:"portKey"`
    +	ConfigChanges []ChangesInfoEventArgument `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortReconfiguredEvent"] = reflect.TypeOf((*DvsPortReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type DvsPortRuntimeChangeEvent struct {
    +	DvsEvent
    +
    +	PortKey     string       `xml:"portKey"`
    +	RuntimeInfo DVPortStatus `xml:"runtimeInfo"`
    +}
    +
    +func init() {
    +	t["DvsPortRuntimeChangeEvent"] = reflect.TypeOf((*DvsPortRuntimeChangeEvent)(nil)).Elem()
    +}
    +
    +type DvsPortUnblockedEvent struct {
    +	DvsEvent
    +
    +	PortKey        string        `xml:"portKey"`
    +	RuntimeInfo    *DVPortStatus `xml:"runtimeInfo,omitempty"`
    +	PrevBlockState string        `xml:"prevBlockState,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsPortUnblockedEvent"] = reflect.TypeOf((*DvsPortUnblockedEvent)(nil)).Elem()
    +}
    +
    +type DvsPortVendorSpecificStateChangeEvent struct {
    +	DvsEvent
    +
    +	PortKey string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["DvsPortVendorSpecificStateChangeEvent"] = reflect.TypeOf((*DvsPortVendorSpecificStateChangeEvent)(nil)).Elem()
    +}
    +
    +type DvsProfile struct {
    +	ApplyProfile
    +
    +	Key    string              `xml:"key"`
    +	Name   string              `xml:"name"`
    +	Uplink []PnicUplinkProfile `xml:"uplink,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsProfile"] = reflect.TypeOf((*DvsProfile)(nil)).Elem()
    +}
    +
    +type DvsPuntNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +}
    +
    +func init() {
    +	t["DvsPuntNetworkRuleAction"] = reflect.TypeOf((*DvsPuntNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsRateLimitNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +
    +	PacketsPerSecond int32 `xml:"packetsPerSecond"`
    +}
    +
    +func init() {
    +	t["DvsRateLimitNetworkRuleAction"] = reflect.TypeOf((*DvsRateLimitNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsReconfigureVmVnicNetworkResourcePoolRequestType struct {
    +	This       ManagedObjectReference            `xml:"_this"`
    +	ConfigSpec []DvsVmVnicResourcePoolConfigSpec `xml:"configSpec"`
    +}
    +
    +func init() {
    +	t["DvsReconfigureVmVnicNetworkResourcePoolRequestType"] = reflect.TypeOf((*DvsReconfigureVmVnicNetworkResourcePoolRequestType)(nil)).Elem()
    +}
    +
    +type DvsReconfigureVmVnicNetworkResourcePool_Task DvsReconfigureVmVnicNetworkResourcePoolRequestType
    +
    +func init() {
    +	t["DvsReconfigureVmVnicNetworkResourcePool_Task"] = reflect.TypeOf((*DvsReconfigureVmVnicNetworkResourcePool_Task)(nil)).Elem()
    +}
    +
    +type DvsReconfigureVmVnicNetworkResourcePool_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DvsReconfiguredEvent struct {
    +	DvsEvent
    +
    +	ConfigSpec    BaseDVSConfigSpec         `xml:"configSpec,typeattr"`
    +	ConfigChanges *ChangesInfoEventArgument `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsReconfiguredEvent"] = reflect.TypeOf((*DvsReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type DvsRenamedEvent struct {
    +	DvsEvent
    +
    +	OldName string `xml:"oldName"`
    +	NewName string `xml:"newName"`
    +}
    +
    +func init() {
    +	t["DvsRenamedEvent"] = reflect.TypeOf((*DvsRenamedEvent)(nil)).Elem()
    +}
    +
    +type DvsResourceRuntimeInfo struct {
    +	DynamicData
    +
    +	Capacity                         int32                                     `xml:"capacity,omitempty"`
    +	Usage                            int32                                     `xml:"usage,omitempty"`
    +	Available                        int32                                     `xml:"available,omitempty"`
    +	AllocatedResource                []DvsVnicAllocatedResource                `xml:"allocatedResource,omitempty"`
    +	VmVnicNetworkResourcePoolRuntime []DvsVmVnicNetworkResourcePoolRuntimeInfo `xml:"vmVnicNetworkResourcePoolRuntime,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsResourceRuntimeInfo"] = reflect.TypeOf((*DvsResourceRuntimeInfo)(nil)).Elem()
    +}
    +
    +type DvsRestoreEvent struct {
    +	DvsEvent
    +}
    +
    +func init() {
    +	t["DvsRestoreEvent"] = reflect.TypeOf((*DvsRestoreEvent)(nil)).Elem()
    +}
    +
    +type DvsScopeViolated struct {
    +	DvsFault
    +
    +	Scope  []ManagedObjectReference `xml:"scope"`
    +	Entity ManagedObjectReference   `xml:"entity"`
    +}
    +
    +func init() {
    +	t["DvsScopeViolated"] = reflect.TypeOf((*DvsScopeViolated)(nil)).Elem()
    +}
    +
    +type DvsScopeViolatedFault DvsScopeViolated
    +
    +func init() {
    +	t["DvsScopeViolatedFault"] = reflect.TypeOf((*DvsScopeViolatedFault)(nil)).Elem()
    +}
    +
    +type DvsServiceConsoleVNicProfile struct {
    +	DvsVNicProfile
    +}
    +
    +func init() {
    +	t["DvsServiceConsoleVNicProfile"] = reflect.TypeOf((*DvsServiceConsoleVNicProfile)(nil)).Elem()
    +}
    +
    +type DvsSingleIpPort struct {
    +	DvsIpPort
    +
    +	PortNumber int32 `xml:"portNumber"`
    +}
    +
    +func init() {
    +	t["DvsSingleIpPort"] = reflect.TypeOf((*DvsSingleIpPort)(nil)).Elem()
    +}
    +
    +type DvsSystemTrafficNetworkRuleQualifier struct {
    +	DvsNetworkRuleQualifier
    +
    +	TypeOfSystemTraffic *StringExpression `xml:"typeOfSystemTraffic,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsSystemTrafficNetworkRuleQualifier"] = reflect.TypeOf((*DvsSystemTrafficNetworkRuleQualifier)(nil)).Elem()
    +}
    +
    +type DvsTrafficFilterConfig struct {
    +	DvsFilterConfig
    +
    +	TrafficRuleset *DvsTrafficRuleset `xml:"trafficRuleset,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsTrafficFilterConfig"] = reflect.TypeOf((*DvsTrafficFilterConfig)(nil)).Elem()
    +}
    +
    +type DvsTrafficFilterConfigSpec struct {
    +	DvsTrafficFilterConfig
    +
    +	Operation string `xml:"operation"`
    +}
    +
    +func init() {
    +	t["DvsTrafficFilterConfigSpec"] = reflect.TypeOf((*DvsTrafficFilterConfigSpec)(nil)).Elem()
    +}
    +
    +type DvsTrafficRule struct {
    +	DynamicData
    +
    +	Key         string                        `xml:"key,omitempty"`
    +	Description string                        `xml:"description,omitempty"`
    +	Sequence    int32                         `xml:"sequence,omitempty"`
    +	Qualifier   []BaseDvsNetworkRuleQualifier `xml:"qualifier,omitempty,typeattr"`
    +	Action      BaseDvsNetworkRuleAction      `xml:"action,omitempty,typeattr"`
    +	Direction   string                        `xml:"direction,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsTrafficRule"] = reflect.TypeOf((*DvsTrafficRule)(nil)).Elem()
    +}
    +
    +type DvsTrafficRuleset struct {
    +	DynamicData
    +
    +	Key        string           `xml:"key,omitempty"`
    +	Enabled    *bool            `xml:"enabled"`
    +	Precedence int32            `xml:"precedence,omitempty"`
    +	Rules      []DvsTrafficRule `xml:"rules,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsTrafficRuleset"] = reflect.TypeOf((*DvsTrafficRuleset)(nil)).Elem()
    +}
    +
    +type DvsUpdateTagNetworkRuleAction struct {
    +	DvsNetworkRuleAction
    +
    +	QosTag  int32 `xml:"qosTag,omitempty"`
    +	DscpTag int32 `xml:"dscpTag,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsUpdateTagNetworkRuleAction"] = reflect.TypeOf((*DvsUpdateTagNetworkRuleAction)(nil)).Elem()
    +}
    +
    +type DvsUpgradeAvailableEvent struct {
    +	DvsEvent
    +
    +	ProductInfo DistributedVirtualSwitchProductSpec `xml:"productInfo"`
    +}
    +
    +func init() {
    +	t["DvsUpgradeAvailableEvent"] = reflect.TypeOf((*DvsUpgradeAvailableEvent)(nil)).Elem()
    +}
    +
    +type DvsUpgradeInProgressEvent struct {
    +	DvsEvent
    +
    +	ProductInfo DistributedVirtualSwitchProductSpec `xml:"productInfo"`
    +}
    +
    +func init() {
    +	t["DvsUpgradeInProgressEvent"] = reflect.TypeOf((*DvsUpgradeInProgressEvent)(nil)).Elem()
    +}
    +
    +type DvsUpgradeRejectedEvent struct {
    +	DvsEvent
    +
    +	ProductInfo DistributedVirtualSwitchProductSpec `xml:"productInfo"`
    +}
    +
    +func init() {
    +	t["DvsUpgradeRejectedEvent"] = reflect.TypeOf((*DvsUpgradeRejectedEvent)(nil)).Elem()
    +}
    +
    +type DvsUpgradedEvent struct {
    +	DvsEvent
    +
    +	ProductInfo DistributedVirtualSwitchProductSpec `xml:"productInfo"`
    +}
    +
    +func init() {
    +	t["DvsUpgradedEvent"] = reflect.TypeOf((*DvsUpgradedEvent)(nil)).Elem()
    +}
    +
    +type DvsVNicProfile struct {
    +	ApplyProfile
    +
    +	Key      string           `xml:"key"`
    +	IpConfig IpAddressProfile `xml:"ipConfig"`
    +}
    +
    +func init() {
    +	t["DvsVNicProfile"] = reflect.TypeOf((*DvsVNicProfile)(nil)).Elem()
    +}
    +
    +type DvsVmVnicNetworkResourcePoolRuntimeInfo struct {
    +	DynamicData
    +
    +	Key               string                     `xml:"key"`
    +	Name              string                     `xml:"name,omitempty"`
    +	Capacity          int32                      `xml:"capacity,omitempty"`
    +	Usage             int32                      `xml:"usage,omitempty"`
    +	Available         int32                      `xml:"available,omitempty"`
    +	Status            string                     `xml:"status"`
    +	AllocatedResource []DvsVnicAllocatedResource `xml:"allocatedResource,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsVmVnicNetworkResourcePoolRuntimeInfo"] = reflect.TypeOf((*DvsVmVnicNetworkResourcePoolRuntimeInfo)(nil)).Elem()
    +}
    +
    +type DvsVmVnicResourceAllocation struct {
    +	DynamicData
    +
    +	ReservationQuota int64 `xml:"reservationQuota,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsVmVnicResourceAllocation"] = reflect.TypeOf((*DvsVmVnicResourceAllocation)(nil)).Elem()
    +}
    +
    +type DvsVmVnicResourcePoolConfigSpec struct {
    +	DynamicData
    +
    +	Operation      string                       `xml:"operation"`
    +	Key            string                       `xml:"key,omitempty"`
    +	ConfigVersion  string                       `xml:"configVersion,omitempty"`
    +	AllocationInfo *DvsVmVnicResourceAllocation `xml:"allocationInfo,omitempty"`
    +	Name           string                       `xml:"name,omitempty"`
    +	Description    string                       `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["DvsVmVnicResourcePoolConfigSpec"] = reflect.TypeOf((*DvsVmVnicResourcePoolConfigSpec)(nil)).Elem()
    +}
    +
    +type DvsVnicAllocatedResource struct {
    +	DynamicData
    +
    +	Vm          ManagedObjectReference `xml:"vm"`
    +	VnicKey     string                 `xml:"vnicKey"`
    +	Reservation *int64                 `xml:"reservation"`
    +}
    +
    +func init() {
    +	t["DvsVnicAllocatedResource"] = reflect.TypeOf((*DvsVnicAllocatedResource)(nil)).Elem()
    +}
    +
    +type DynamicArray struct {
    +	Val []AnyType `xml:"val,typeattr"`
    +}
    +
    +func init() {
    +	t["DynamicArray"] = reflect.TypeOf((*DynamicArray)(nil)).Elem()
    +}
    +
    +type DynamicData struct {
    +}
    +
    +func init() {
    +	t["DynamicData"] = reflect.TypeOf((*DynamicData)(nil)).Elem()
    +}
    +
    +type DynamicProperty struct {
    +	Name string  `xml:"name"`
    +	Val  AnyType `xml:"val,typeattr"`
    +}
    +
    +func init() {
    +	t["DynamicProperty"] = reflect.TypeOf((*DynamicProperty)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailed struct {
    +	NotSupportedHostInCluster
    +
    +	Faults []LocalizedMethodFault `xml:"faults,omitempty"`
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailed"] = reflect.TypeOf((*EVCAdmissionFailed)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUFeaturesForMode struct {
    +	EVCAdmissionFailed
    +
    +	CurrentEVCModeKey string `xml:"currentEVCModeKey"`
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUFeaturesForMode"] = reflect.TypeOf((*EVCAdmissionFailedCPUFeaturesForMode)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUFeaturesForModeFault EVCAdmissionFailedCPUFeaturesForMode
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUFeaturesForModeFault"] = reflect.TypeOf((*EVCAdmissionFailedCPUFeaturesForModeFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUModel struct {
    +	EVCAdmissionFailed
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUModel"] = reflect.TypeOf((*EVCAdmissionFailedCPUModel)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUModelFault EVCAdmissionFailedCPUModel
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUModelFault"] = reflect.TypeOf((*EVCAdmissionFailedCPUModelFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUModelForMode struct {
    +	EVCAdmissionFailed
    +
    +	CurrentEVCModeKey string `xml:"currentEVCModeKey"`
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUModelForMode"] = reflect.TypeOf((*EVCAdmissionFailedCPUModelForMode)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUModelForModeFault EVCAdmissionFailedCPUModelForMode
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUModelForModeFault"] = reflect.TypeOf((*EVCAdmissionFailedCPUModelForModeFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUVendor struct {
    +	EVCAdmissionFailed
    +
    +	ClusterCPUVendor string `xml:"clusterCPUVendor"`
    +	HostCPUVendor    string `xml:"hostCPUVendor"`
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUVendor"] = reflect.TypeOf((*EVCAdmissionFailedCPUVendor)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUVendorFault EVCAdmissionFailedCPUVendor
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUVendorFault"] = reflect.TypeOf((*EVCAdmissionFailedCPUVendorFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUVendorUnknown struct {
    +	EVCAdmissionFailed
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUVendorUnknown"] = reflect.TypeOf((*EVCAdmissionFailedCPUVendorUnknown)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedCPUVendorUnknownFault EVCAdmissionFailedCPUVendorUnknown
    +
    +func init() {
    +	t["EVCAdmissionFailedCPUVendorUnknownFault"] = reflect.TypeOf((*EVCAdmissionFailedCPUVendorUnknownFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedFault BaseEVCAdmissionFailed
    +
    +func init() {
    +	t["EVCAdmissionFailedFault"] = reflect.TypeOf((*EVCAdmissionFailedFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedHostDisconnected struct {
    +	EVCAdmissionFailed
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedHostDisconnected"] = reflect.TypeOf((*EVCAdmissionFailedHostDisconnected)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedHostDisconnectedFault EVCAdmissionFailedHostDisconnected
    +
    +func init() {
    +	t["EVCAdmissionFailedHostDisconnectedFault"] = reflect.TypeOf((*EVCAdmissionFailedHostDisconnectedFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedHostSoftware struct {
    +	EVCAdmissionFailed
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedHostSoftware"] = reflect.TypeOf((*EVCAdmissionFailedHostSoftware)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedHostSoftwareFault EVCAdmissionFailedHostSoftware
    +
    +func init() {
    +	t["EVCAdmissionFailedHostSoftwareFault"] = reflect.TypeOf((*EVCAdmissionFailedHostSoftwareFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedHostSoftwareForMode struct {
    +	EVCAdmissionFailed
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedHostSoftwareForMode"] = reflect.TypeOf((*EVCAdmissionFailedHostSoftwareForMode)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedHostSoftwareForModeFault EVCAdmissionFailedHostSoftwareForMode
    +
    +func init() {
    +	t["EVCAdmissionFailedHostSoftwareForModeFault"] = reflect.TypeOf((*EVCAdmissionFailedHostSoftwareForModeFault)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedVmActive struct {
    +	EVCAdmissionFailed
    +}
    +
    +func init() {
    +	t["EVCAdmissionFailedVmActive"] = reflect.TypeOf((*EVCAdmissionFailedVmActive)(nil)).Elem()
    +}
    +
    +type EVCAdmissionFailedVmActiveFault EVCAdmissionFailedVmActive
    +
    +func init() {
    +	t["EVCAdmissionFailedVmActiveFault"] = reflect.TypeOf((*EVCAdmissionFailedVmActiveFault)(nil)).Elem()
    +}
    +
    +type EVCConfigFault struct {
    +	VimFault
    +
    +	Faults []LocalizedMethodFault `xml:"faults,omitempty"`
    +}
    +
    +func init() {
    +	t["EVCConfigFault"] = reflect.TypeOf((*EVCConfigFault)(nil)).Elem()
    +}
    +
    +type EVCConfigFaultFault BaseEVCConfigFault
    +
    +func init() {
    +	t["EVCConfigFaultFault"] = reflect.TypeOf((*EVCConfigFaultFault)(nil)).Elem()
    +}
    +
    +type EVCMode struct {
    +	ElementDescription
    +
    +	GuaranteedCPUFeatures []HostCpuIdInfo                    `xml:"guaranteedCPUFeatures,omitempty"`
    +	FeatureCapability     []HostFeatureCapability            `xml:"featureCapability,omitempty"`
    +	FeatureMask           []HostFeatureMask                  `xml:"featureMask,omitempty"`
    +	FeatureRequirement    []VirtualMachineFeatureRequirement `xml:"featureRequirement,omitempty"`
    +	Vendor                string                             `xml:"vendor"`
    +	Track                 []string                           `xml:"track,omitempty"`
    +	VendorTier            int32                              `xml:"vendorTier"`
    +}
    +
    +func init() {
    +	t["EVCMode"] = reflect.TypeOf((*EVCMode)(nil)).Elem()
    +}
    +
    +type EVCModeIllegalByVendor struct {
    +	EVCConfigFault
    +
    +	ClusterCPUVendor string `xml:"clusterCPUVendor"`
    +	ModeCPUVendor    string `xml:"modeCPUVendor"`
    +}
    +
    +func init() {
    +	t["EVCModeIllegalByVendor"] = reflect.TypeOf((*EVCModeIllegalByVendor)(nil)).Elem()
    +}
    +
    +type EVCModeIllegalByVendorFault EVCModeIllegalByVendor
    +
    +func init() {
    +	t["EVCModeIllegalByVendorFault"] = reflect.TypeOf((*EVCModeIllegalByVendorFault)(nil)).Elem()
    +}
    +
    +type EVCModeUnsupportedByHosts struct {
    +	EVCConfigFault
    +
    +	EvcMode  string                   `xml:"evcMode,omitempty"`
    +	Host     []ManagedObjectReference `xml:"host,omitempty"`
    +	HostName []string                 `xml:"hostName,omitempty"`
    +}
    +
    +func init() {
    +	t["EVCModeUnsupportedByHosts"] = reflect.TypeOf((*EVCModeUnsupportedByHosts)(nil)).Elem()
    +}
    +
    +type EVCModeUnsupportedByHostsFault EVCModeUnsupportedByHosts
    +
    +func init() {
    +	t["EVCModeUnsupportedByHostsFault"] = reflect.TypeOf((*EVCModeUnsupportedByHostsFault)(nil)).Elem()
    +}
    +
    +type EVCUnsupportedByHostHardware struct {
    +	EVCConfigFault
    +
    +	Host     []ManagedObjectReference `xml:"host"`
    +	HostName []string                 `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["EVCUnsupportedByHostHardware"] = reflect.TypeOf((*EVCUnsupportedByHostHardware)(nil)).Elem()
    +}
    +
    +type EVCUnsupportedByHostHardwareFault EVCUnsupportedByHostHardware
    +
    +func init() {
    +	t["EVCUnsupportedByHostHardwareFault"] = reflect.TypeOf((*EVCUnsupportedByHostHardwareFault)(nil)).Elem()
    +}
    +
    +type EVCUnsupportedByHostSoftware struct {
    +	EVCConfigFault
    +
    +	Host     []ManagedObjectReference `xml:"host"`
    +	HostName []string                 `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["EVCUnsupportedByHostSoftware"] = reflect.TypeOf((*EVCUnsupportedByHostSoftware)(nil)).Elem()
    +}
    +
    +type EVCUnsupportedByHostSoftwareFault EVCUnsupportedByHostSoftware
    +
    +func init() {
    +	t["EVCUnsupportedByHostSoftwareFault"] = reflect.TypeOf((*EVCUnsupportedByHostSoftwareFault)(nil)).Elem()
    +}
    +
    +type EagerZeroVirtualDiskRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["EagerZeroVirtualDiskRequestType"] = reflect.TypeOf((*EagerZeroVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type EagerZeroVirtualDisk_Task EagerZeroVirtualDiskRequestType
    +
    +func init() {
    +	t["EagerZeroVirtualDisk_Task"] = reflect.TypeOf((*EagerZeroVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type EagerZeroVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type EightHostLimitViolated struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["EightHostLimitViolated"] = reflect.TypeOf((*EightHostLimitViolated)(nil)).Elem()
    +}
    +
    +type EightHostLimitViolatedFault EightHostLimitViolated
    +
    +func init() {
    +	t["EightHostLimitViolatedFault"] = reflect.TypeOf((*EightHostLimitViolatedFault)(nil)).Elem()
    +}
    +
    +type ElementDescription struct {
    +	Description
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["ElementDescription"] = reflect.TypeOf((*ElementDescription)(nil)).Elem()
    +}
    +
    +type EnableAlarmActions EnableAlarmActionsRequestType
    +
    +func init() {
    +	t["EnableAlarmActions"] = reflect.TypeOf((*EnableAlarmActions)(nil)).Elem()
    +}
    +
    +type EnableAlarmActionsRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Entity  ManagedObjectReference `xml:"entity"`
    +	Enabled bool                   `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["EnableAlarmActionsRequestType"] = reflect.TypeOf((*EnableAlarmActionsRequestType)(nil)).Elem()
    +}
    +
    +type EnableAlarmActionsResponse struct {
    +}
    +
    +type EnableCrypto EnableCryptoRequestType
    +
    +func init() {
    +	t["EnableCrypto"] = reflect.TypeOf((*EnableCrypto)(nil)).Elem()
    +}
    +
    +type EnableCryptoRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	KeyPlain CryptoKeyPlain         `xml:"keyPlain"`
    +}
    +
    +func init() {
    +	t["EnableCryptoRequestType"] = reflect.TypeOf((*EnableCryptoRequestType)(nil)).Elem()
    +}
    +
    +type EnableCryptoResponse struct {
    +}
    +
    +type EnableFeature EnableFeatureRequestType
    +
    +func init() {
    +	t["EnableFeature"] = reflect.TypeOf((*EnableFeature)(nil)).Elem()
    +}
    +
    +type EnableFeatureRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Host       *ManagedObjectReference `xml:"host,omitempty"`
    +	FeatureKey string                  `xml:"featureKey"`
    +}
    +
    +func init() {
    +	t["EnableFeatureRequestType"] = reflect.TypeOf((*EnableFeatureRequestType)(nil)).Elem()
    +}
    +
    +type EnableFeatureResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type EnableHyperThreading EnableHyperThreadingRequestType
    +
    +func init() {
    +	t["EnableHyperThreading"] = reflect.TypeOf((*EnableHyperThreading)(nil)).Elem()
    +}
    +
    +type EnableHyperThreadingRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["EnableHyperThreadingRequestType"] = reflect.TypeOf((*EnableHyperThreadingRequestType)(nil)).Elem()
    +}
    +
    +type EnableHyperThreadingResponse struct {
    +}
    +
    +type EnableMultipathPath EnableMultipathPathRequestType
    +
    +func init() {
    +	t["EnableMultipathPath"] = reflect.TypeOf((*EnableMultipathPath)(nil)).Elem()
    +}
    +
    +type EnableMultipathPathRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	PathName string                 `xml:"pathName"`
    +}
    +
    +func init() {
    +	t["EnableMultipathPathRequestType"] = reflect.TypeOf((*EnableMultipathPathRequestType)(nil)).Elem()
    +}
    +
    +type EnableMultipathPathResponse struct {
    +}
    +
    +type EnableNetworkResourceManagement EnableNetworkResourceManagementRequestType
    +
    +func init() {
    +	t["EnableNetworkResourceManagement"] = reflect.TypeOf((*EnableNetworkResourceManagement)(nil)).Elem()
    +}
    +
    +type EnableNetworkResourceManagementRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Enable bool                   `xml:"enable"`
    +}
    +
    +func init() {
    +	t["EnableNetworkResourceManagementRequestType"] = reflect.TypeOf((*EnableNetworkResourceManagementRequestType)(nil)).Elem()
    +}
    +
    +type EnableNetworkResourceManagementResponse struct {
    +}
    +
    +type EnableRuleset EnableRulesetRequestType
    +
    +func init() {
    +	t["EnableRuleset"] = reflect.TypeOf((*EnableRuleset)(nil)).Elem()
    +}
    +
    +type EnableRulesetRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   string                 `xml:"id"`
    +}
    +
    +func init() {
    +	t["EnableRulesetRequestType"] = reflect.TypeOf((*EnableRulesetRequestType)(nil)).Elem()
    +}
    +
    +type EnableRulesetResponse struct {
    +}
    +
    +type EnableSecondaryVMRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["EnableSecondaryVMRequestType"] = reflect.TypeOf((*EnableSecondaryVMRequestType)(nil)).Elem()
    +}
    +
    +type EnableSecondaryVM_Task EnableSecondaryVMRequestType
    +
    +func init() {
    +	t["EnableSecondaryVM_Task"] = reflect.TypeOf((*EnableSecondaryVM_Task)(nil)).Elem()
    +}
    +
    +type EnableSecondaryVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type EnableSmartCardAuthentication EnableSmartCardAuthenticationRequestType
    +
    +func init() {
    +	t["EnableSmartCardAuthentication"] = reflect.TypeOf((*EnableSmartCardAuthentication)(nil)).Elem()
    +}
    +
    +type EnableSmartCardAuthenticationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["EnableSmartCardAuthenticationRequestType"] = reflect.TypeOf((*EnableSmartCardAuthenticationRequestType)(nil)).Elem()
    +}
    +
    +type EnableSmartCardAuthenticationResponse struct {
    +}
    +
    +type EncryptionKeyRequired struct {
    +	InvalidState
    +
    +	RequiredKey []CryptoKeyId `xml:"requiredKey,omitempty"`
    +}
    +
    +func init() {
    +	t["EncryptionKeyRequired"] = reflect.TypeOf((*EncryptionKeyRequired)(nil)).Elem()
    +}
    +
    +type EncryptionKeyRequiredFault EncryptionKeyRequired
    +
    +func init() {
    +	t["EncryptionKeyRequiredFault"] = reflect.TypeOf((*EncryptionKeyRequiredFault)(nil)).Elem()
    +}
    +
    +type EnterLockdownMode EnterLockdownModeRequestType
    +
    +func init() {
    +	t["EnterLockdownMode"] = reflect.TypeOf((*EnterLockdownMode)(nil)).Elem()
    +}
    +
    +type EnterLockdownModeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["EnterLockdownModeRequestType"] = reflect.TypeOf((*EnterLockdownModeRequestType)(nil)).Elem()
    +}
    +
    +type EnterLockdownModeResponse struct {
    +}
    +
    +type EnterMaintenanceModeRequestType struct {
    +	This                  ManagedObjectReference `xml:"_this"`
    +	Timeout               int32                  `xml:"timeout"`
    +	EvacuatePoweredOffVms *bool                  `xml:"evacuatePoweredOffVms"`
    +	MaintenanceSpec       *HostMaintenanceSpec   `xml:"maintenanceSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["EnterMaintenanceModeRequestType"] = reflect.TypeOf((*EnterMaintenanceModeRequestType)(nil)).Elem()
    +}
    +
    +type EnterMaintenanceMode_Task EnterMaintenanceModeRequestType
    +
    +func init() {
    +	t["EnterMaintenanceMode_Task"] = reflect.TypeOf((*EnterMaintenanceMode_Task)(nil)).Elem()
    +}
    +
    +type EnterMaintenanceMode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type EnteredMaintenanceModeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["EnteredMaintenanceModeEvent"] = reflect.TypeOf((*EnteredMaintenanceModeEvent)(nil)).Elem()
    +}
    +
    +type EnteredStandbyModeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["EnteredStandbyModeEvent"] = reflect.TypeOf((*EnteredStandbyModeEvent)(nil)).Elem()
    +}
    +
    +type EnteringMaintenanceModeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["EnteringMaintenanceModeEvent"] = reflect.TypeOf((*EnteringMaintenanceModeEvent)(nil)).Elem()
    +}
    +
    +type EnteringStandbyModeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["EnteringStandbyModeEvent"] = reflect.TypeOf((*EnteringStandbyModeEvent)(nil)).Elem()
    +}
    +
    +type EntityBackup struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["EntityBackup"] = reflect.TypeOf((*EntityBackup)(nil)).Elem()
    +}
    +
    +type EntityBackupConfig struct {
    +	DynamicData
    +
    +	EntityType    string                  `xml:"entityType"`
    +	ConfigBlob    []byte                  `xml:"configBlob"`
    +	Key           string                  `xml:"key,omitempty"`
    +	Name          string                  `xml:"name,omitempty"`
    +	Container     *ManagedObjectReference `xml:"container,omitempty"`
    +	ConfigVersion string                  `xml:"configVersion,omitempty"`
    +}
    +
    +func init() {
    +	t["EntityBackupConfig"] = reflect.TypeOf((*EntityBackupConfig)(nil)).Elem()
    +}
    +
    +type EntityEventArgument struct {
    +	EventArgument
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["EntityEventArgument"] = reflect.TypeOf((*EntityEventArgument)(nil)).Elem()
    +}
    +
    +type EntityPrivilege struct {
    +	DynamicData
    +
    +	Entity           ManagedObjectReference  `xml:"entity"`
    +	PrivAvailability []PrivilegeAvailability `xml:"privAvailability"`
    +}
    +
    +func init() {
    +	t["EntityPrivilege"] = reflect.TypeOf((*EntityPrivilege)(nil)).Elem()
    +}
    +
    +type EnumDescription struct {
    +	DynamicData
    +
    +	Key  string                   `xml:"key"`
    +	Tags []BaseElementDescription `xml:"tags,typeattr"`
    +}
    +
    +func init() {
    +	t["EnumDescription"] = reflect.TypeOf((*EnumDescription)(nil)).Elem()
    +}
    +
    +type EnvironmentBrowserConfigOptionQuerySpec struct {
    +	DynamicData
    +
    +	Key     string                  `xml:"key,omitempty"`
    +	Host    *ManagedObjectReference `xml:"host,omitempty"`
    +	GuestId []string                `xml:"guestId,omitempty"`
    +}
    +
    +func init() {
    +	t["EnvironmentBrowserConfigOptionQuerySpec"] = reflect.TypeOf((*EnvironmentBrowserConfigOptionQuerySpec)(nil)).Elem()
    +}
    +
    +type ErrorUpgradeEvent struct {
    +	UpgradeEvent
    +}
    +
    +func init() {
    +	t["ErrorUpgradeEvent"] = reflect.TypeOf((*ErrorUpgradeEvent)(nil)).Elem()
    +}
    +
    +type EstimateDatabaseSize EstimateDatabaseSizeRequestType
    +
    +func init() {
    +	t["EstimateDatabaseSize"] = reflect.TypeOf((*EstimateDatabaseSize)(nil)).Elem()
    +}
    +
    +type EstimateDatabaseSizeRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	DbSizeParam DatabaseSizeParam      `xml:"dbSizeParam"`
    +}
    +
    +func init() {
    +	t["EstimateDatabaseSizeRequestType"] = reflect.TypeOf((*EstimateDatabaseSizeRequestType)(nil)).Elem()
    +}
    +
    +type EstimateDatabaseSizeResponse struct {
    +	Returnval DatabaseSizeEstimate `xml:"returnval"`
    +}
    +
    +type EstimateStorageForConsolidateSnapshotsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["EstimateStorageForConsolidateSnapshotsRequestType"] = reflect.TypeOf((*EstimateStorageForConsolidateSnapshotsRequestType)(nil)).Elem()
    +}
    +
    +type EstimateStorageForConsolidateSnapshots_Task EstimateStorageForConsolidateSnapshotsRequestType
    +
    +func init() {
    +	t["EstimateStorageForConsolidateSnapshots_Task"] = reflect.TypeOf((*EstimateStorageForConsolidateSnapshots_Task)(nil)).Elem()
    +}
    +
    +type EstimateStorageForConsolidateSnapshots_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type EsxAgentHostManagerUpdateConfig EsxAgentHostManagerUpdateConfigRequestType
    +
    +func init() {
    +	t["EsxAgentHostManagerUpdateConfig"] = reflect.TypeOf((*EsxAgentHostManagerUpdateConfig)(nil)).Elem()
    +}
    +
    +type EsxAgentHostManagerUpdateConfigRequestType struct {
    +	This       ManagedObjectReference            `xml:"_this"`
    +	ConfigInfo HostEsxAgentHostManagerConfigInfo `xml:"configInfo"`
    +}
    +
    +func init() {
    +	t["EsxAgentHostManagerUpdateConfigRequestType"] = reflect.TypeOf((*EsxAgentHostManagerUpdateConfigRequestType)(nil)).Elem()
    +}
    +
    +type EsxAgentHostManagerUpdateConfigResponse struct {
    +}
    +
    +type EvacuateVsanNodeRequestType struct {
    +	This            ManagedObjectReference `xml:"_this"`
    +	MaintenanceSpec HostMaintenanceSpec    `xml:"maintenanceSpec"`
    +	Timeout         int32                  `xml:"timeout"`
    +}
    +
    +func init() {
    +	t["EvacuateVsanNodeRequestType"] = reflect.TypeOf((*EvacuateVsanNodeRequestType)(nil)).Elem()
    +}
    +
    +type EvacuateVsanNode_Task EvacuateVsanNodeRequestType
    +
    +func init() {
    +	t["EvacuateVsanNode_Task"] = reflect.TypeOf((*EvacuateVsanNode_Task)(nil)).Elem()
    +}
    +
    +type EvacuateVsanNode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type EvaluationLicenseSource struct {
    +	LicenseSource
    +
    +	RemainingHours int64 `xml:"remainingHours,omitempty"`
    +}
    +
    +func init() {
    +	t["EvaluationLicenseSource"] = reflect.TypeOf((*EvaluationLicenseSource)(nil)).Elem()
    +}
    +
    +type EvcManager EvcManagerRequestType
    +
    +func init() {
    +	t["EvcManager"] = reflect.TypeOf((*EvcManager)(nil)).Elem()
    +}
    +
    +type EvcManagerRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["EvcManagerRequestType"] = reflect.TypeOf((*EvcManagerRequestType)(nil)).Elem()
    +}
    +
    +type EvcManagerResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type Event struct {
    +	DynamicData
    +
    +	Key                  int32                         `xml:"key"`
    +	ChainId              int32                         `xml:"chainId"`
    +	CreatedTime          time.Time                     `xml:"createdTime"`
    +	UserName             string                        `xml:"userName"`
    +	Datacenter           *DatacenterEventArgument      `xml:"datacenter,omitempty"`
    +	ComputeResource      *ComputeResourceEventArgument `xml:"computeResource,omitempty"`
    +	Host                 *HostEventArgument            `xml:"host,omitempty"`
    +	Vm                   *VmEventArgument              `xml:"vm,omitempty"`
    +	Ds                   *DatastoreEventArgument       `xml:"ds,omitempty"`
    +	Net                  *NetworkEventArgument         `xml:"net,omitempty"`
    +	Dvs                  *DvsEventArgument             `xml:"dvs,omitempty"`
    +	FullFormattedMessage string                        `xml:"fullFormattedMessage,omitempty"`
    +	ChangeTag            string                        `xml:"changeTag,omitempty"`
    +}
    +
    +func init() {
    +	t["Event"] = reflect.TypeOf((*Event)(nil)).Elem()
    +}
    +
    +type EventAlarmExpression struct {
    +	AlarmExpression
    +
    +	Comparisons []EventAlarmExpressionComparison `xml:"comparisons,omitempty"`
    +	EventType   string                           `xml:"eventType"`
    +	EventTypeId string                           `xml:"eventTypeId,omitempty"`
    +	ObjectType  string                           `xml:"objectType,omitempty"`
    +	Status      ManagedEntityStatus              `xml:"status,omitempty"`
    +}
    +
    +func init() {
    +	t["EventAlarmExpression"] = reflect.TypeOf((*EventAlarmExpression)(nil)).Elem()
    +}
    +
    +type EventAlarmExpressionComparison struct {
    +	DynamicData
    +
    +	AttributeName string `xml:"attributeName"`
    +	Operator      string `xml:"operator"`
    +	Value         string `xml:"value"`
    +}
    +
    +func init() {
    +	t["EventAlarmExpressionComparison"] = reflect.TypeOf((*EventAlarmExpressionComparison)(nil)).Elem()
    +}
    +
    +type EventArgDesc struct {
    +	DynamicData
    +
    +	Name        string                 `xml:"name"`
    +	Type        string                 `xml:"type"`
    +	Description BaseElementDescription `xml:"description,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["EventArgDesc"] = reflect.TypeOf((*EventArgDesc)(nil)).Elem()
    +}
    +
    +type EventArgument struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["EventArgument"] = reflect.TypeOf((*EventArgument)(nil)).Elem()
    +}
    +
    +type EventDescription struct {
    +	DynamicData
    +
    +	Category        []BaseElementDescription      `xml:"category,typeattr"`
    +	EventInfo       []EventDescriptionEventDetail `xml:"eventInfo"`
    +	EnumeratedTypes []EnumDescription             `xml:"enumeratedTypes,omitempty"`
    +}
    +
    +func init() {
    +	t["EventDescription"] = reflect.TypeOf((*EventDescription)(nil)).Elem()
    +}
    +
    +type EventDescriptionEventDetail struct {
    +	DynamicData
    +
    +	Key                     string `xml:"key"`
    +	Description             string `xml:"description,omitempty"`
    +	Category                string `xml:"category"`
    +	FormatOnDatacenter      string `xml:"formatOnDatacenter"`
    +	FormatOnComputeResource string `xml:"formatOnComputeResource"`
    +	FormatOnHost            string `xml:"formatOnHost"`
    +	FormatOnVm              string `xml:"formatOnVm"`
    +	FullFormat              string `xml:"fullFormat"`
    +	LongDescription         string `xml:"longDescription,omitempty"`
    +}
    +
    +func init() {
    +	t["EventDescriptionEventDetail"] = reflect.TypeOf((*EventDescriptionEventDetail)(nil)).Elem()
    +}
    +
    +type EventEx struct {
    +	Event
    +
    +	EventTypeId string                `xml:"eventTypeId"`
    +	Severity    string                `xml:"severity,omitempty"`
    +	Message     string                `xml:"message,omitempty"`
    +	Arguments   []KeyAnyValue         `xml:"arguments,omitempty"`
    +	ObjectId    string                `xml:"objectId,omitempty"`
    +	ObjectType  string                `xml:"objectType,omitempty"`
    +	ObjectName  string                `xml:"objectName,omitempty"`
    +	Fault       *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["EventEx"] = reflect.TypeOf((*EventEx)(nil)).Elem()
    +}
    +
    +type EventFilterSpec struct {
    +	DynamicData
    +
    +	Entity             *EventFilterSpecByEntity   `xml:"entity,omitempty"`
    +	Time               *EventFilterSpecByTime     `xml:"time,omitempty"`
    +	UserName           *EventFilterSpecByUsername `xml:"userName,omitempty"`
    +	EventChainId       int32                      `xml:"eventChainId,omitempty"`
    +	Alarm              *ManagedObjectReference    `xml:"alarm,omitempty"`
    +	ScheduledTask      *ManagedObjectReference    `xml:"scheduledTask,omitempty"`
    +	DisableFullMessage *bool                      `xml:"disableFullMessage"`
    +	Category           []string                   `xml:"category,omitempty"`
    +	Type               []string                   `xml:"type,omitempty"`
    +	Tag                []string                   `xml:"tag,omitempty"`
    +	EventTypeId        []string                   `xml:"eventTypeId,omitempty"`
    +	MaxCount           int32                      `xml:"maxCount,omitempty"`
    +}
    +
    +func init() {
    +	t["EventFilterSpec"] = reflect.TypeOf((*EventFilterSpec)(nil)).Elem()
    +}
    +
    +type EventFilterSpecByEntity struct {
    +	DynamicData
    +
    +	Entity    ManagedObjectReference         `xml:"entity"`
    +	Recursion EventFilterSpecRecursionOption `xml:"recursion"`
    +}
    +
    +func init() {
    +	t["EventFilterSpecByEntity"] = reflect.TypeOf((*EventFilterSpecByEntity)(nil)).Elem()
    +}
    +
    +type EventFilterSpecByTime struct {
    +	DynamicData
    +
    +	BeginTime *time.Time `xml:"beginTime"`
    +	EndTime   *time.Time `xml:"endTime"`
    +}
    +
    +func init() {
    +	t["EventFilterSpecByTime"] = reflect.TypeOf((*EventFilterSpecByTime)(nil)).Elem()
    +}
    +
    +type EventFilterSpecByUsername struct {
    +	DynamicData
    +
    +	SystemUser bool     `xml:"systemUser"`
    +	UserList   []string `xml:"userList,omitempty"`
    +}
    +
    +func init() {
    +	t["EventFilterSpecByUsername"] = reflect.TypeOf((*EventFilterSpecByUsername)(nil)).Elem()
    +}
    +
    +type ExecuteHostProfile ExecuteHostProfileRequestType
    +
    +func init() {
    +	t["ExecuteHostProfile"] = reflect.TypeOf((*ExecuteHostProfile)(nil)).Elem()
    +}
    +
    +type ExecuteHostProfileRequestType struct {
    +	This          ManagedObjectReference                 `xml:"_this"`
    +	Host          ManagedObjectReference                 `xml:"host"`
    +	DeferredParam []ProfileDeferredPolicyOptionParameter `xml:"deferredParam,omitempty"`
    +}
    +
    +func init() {
    +	t["ExecuteHostProfileRequestType"] = reflect.TypeOf((*ExecuteHostProfileRequestType)(nil)).Elem()
    +}
    +
    +type ExecuteHostProfileResponse struct {
    +	Returnval BaseProfileExecuteResult `xml:"returnval,typeattr"`
    +}
    +
    +type ExecuteSimpleCommand ExecuteSimpleCommandRequestType
    +
    +func init() {
    +	t["ExecuteSimpleCommand"] = reflect.TypeOf((*ExecuteSimpleCommand)(nil)).Elem()
    +}
    +
    +type ExecuteSimpleCommandRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Arguments []string               `xml:"arguments,omitempty"`
    +}
    +
    +func init() {
    +	t["ExecuteSimpleCommandRequestType"] = reflect.TypeOf((*ExecuteSimpleCommandRequestType)(nil)).Elem()
    +}
    +
    +type ExecuteSimpleCommandResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type ExitLockdownMode ExitLockdownModeRequestType
    +
    +func init() {
    +	t["ExitLockdownMode"] = reflect.TypeOf((*ExitLockdownMode)(nil)).Elem()
    +}
    +
    +type ExitLockdownModeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ExitLockdownModeRequestType"] = reflect.TypeOf((*ExitLockdownModeRequestType)(nil)).Elem()
    +}
    +
    +type ExitLockdownModeResponse struct {
    +}
    +
    +type ExitMaintenanceModeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["ExitMaintenanceModeEvent"] = reflect.TypeOf((*ExitMaintenanceModeEvent)(nil)).Elem()
    +}
    +
    +type ExitMaintenanceModeRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Timeout int32                  `xml:"timeout"`
    +}
    +
    +func init() {
    +	t["ExitMaintenanceModeRequestType"] = reflect.TypeOf((*ExitMaintenanceModeRequestType)(nil)).Elem()
    +}
    +
    +type ExitMaintenanceMode_Task ExitMaintenanceModeRequestType
    +
    +func init() {
    +	t["ExitMaintenanceMode_Task"] = reflect.TypeOf((*ExitMaintenanceMode_Task)(nil)).Elem()
    +}
    +
    +type ExitMaintenanceMode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExitStandbyModeFailedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["ExitStandbyModeFailedEvent"] = reflect.TypeOf((*ExitStandbyModeFailedEvent)(nil)).Elem()
    +}
    +
    +type ExitedStandbyModeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["ExitedStandbyModeEvent"] = reflect.TypeOf((*ExitedStandbyModeEvent)(nil)).Elem()
    +}
    +
    +type ExitingStandbyModeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["ExitingStandbyModeEvent"] = reflect.TypeOf((*ExitingStandbyModeEvent)(nil)).Elem()
    +}
    +
    +type ExpandVmfsDatastore ExpandVmfsDatastoreRequestType
    +
    +func init() {
    +	t["ExpandVmfsDatastore"] = reflect.TypeOf((*ExpandVmfsDatastore)(nil)).Elem()
    +}
    +
    +type ExpandVmfsDatastoreRequestType struct {
    +	This      ManagedObjectReference  `xml:"_this"`
    +	Datastore ManagedObjectReference  `xml:"datastore"`
    +	Spec      VmfsDatastoreExpandSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ExpandVmfsDatastoreRequestType"] = reflect.TypeOf((*ExpandVmfsDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type ExpandVmfsDatastoreResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExpandVmfsExtent ExpandVmfsExtentRequestType
    +
    +func init() {
    +	t["ExpandVmfsExtent"] = reflect.TypeOf((*ExpandVmfsExtent)(nil)).Elem()
    +}
    +
    +type ExpandVmfsExtentRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsPath string                 `xml:"vmfsPath"`
    +	Extent   HostScsiDiskPartition  `xml:"extent"`
    +}
    +
    +func init() {
    +	t["ExpandVmfsExtentRequestType"] = reflect.TypeOf((*ExpandVmfsExtentRequestType)(nil)).Elem()
    +}
    +
    +type ExpandVmfsExtentResponse struct {
    +}
    +
    +type ExpiredAddonLicense struct {
    +	ExpiredFeatureLicense
    +}
    +
    +func init() {
    +	t["ExpiredAddonLicense"] = reflect.TypeOf((*ExpiredAddonLicense)(nil)).Elem()
    +}
    +
    +type ExpiredAddonLicenseFault ExpiredAddonLicense
    +
    +func init() {
    +	t["ExpiredAddonLicenseFault"] = reflect.TypeOf((*ExpiredAddonLicenseFault)(nil)).Elem()
    +}
    +
    +type ExpiredEditionLicense struct {
    +	ExpiredFeatureLicense
    +}
    +
    +func init() {
    +	t["ExpiredEditionLicense"] = reflect.TypeOf((*ExpiredEditionLicense)(nil)).Elem()
    +}
    +
    +type ExpiredEditionLicenseFault ExpiredEditionLicense
    +
    +func init() {
    +	t["ExpiredEditionLicenseFault"] = reflect.TypeOf((*ExpiredEditionLicenseFault)(nil)).Elem()
    +}
    +
    +type ExpiredFeatureLicense struct {
    +	NotEnoughLicenses
    +
    +	Feature        string    `xml:"feature"`
    +	Count          int32     `xml:"count"`
    +	ExpirationDate time.Time `xml:"expirationDate"`
    +}
    +
    +func init() {
    +	t["ExpiredFeatureLicense"] = reflect.TypeOf((*ExpiredFeatureLicense)(nil)).Elem()
    +}
    +
    +type ExpiredFeatureLicenseFault BaseExpiredFeatureLicense
    +
    +func init() {
    +	t["ExpiredFeatureLicenseFault"] = reflect.TypeOf((*ExpiredFeatureLicenseFault)(nil)).Elem()
    +}
    +
    +type ExportAnswerFileRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["ExportAnswerFileRequestType"] = reflect.TypeOf((*ExportAnswerFileRequestType)(nil)).Elem()
    +}
    +
    +type ExportAnswerFile_Task ExportAnswerFileRequestType
    +
    +func init() {
    +	t["ExportAnswerFile_Task"] = reflect.TypeOf((*ExportAnswerFile_Task)(nil)).Elem()
    +}
    +
    +type ExportAnswerFile_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExportProfile ExportProfileRequestType
    +
    +func init() {
    +	t["ExportProfile"] = reflect.TypeOf((*ExportProfile)(nil)).Elem()
    +}
    +
    +type ExportProfileRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ExportProfileRequestType"] = reflect.TypeOf((*ExportProfileRequestType)(nil)).Elem()
    +}
    +
    +type ExportProfileResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type ExportSnapshot ExportSnapshotRequestType
    +
    +func init() {
    +	t["ExportSnapshot"] = reflect.TypeOf((*ExportSnapshot)(nil)).Elem()
    +}
    +
    +type ExportSnapshotRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ExportSnapshotRequestType"] = reflect.TypeOf((*ExportSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type ExportSnapshotResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExportVApp ExportVAppRequestType
    +
    +func init() {
    +	t["ExportVApp"] = reflect.TypeOf((*ExportVApp)(nil)).Elem()
    +}
    +
    +type ExportVAppRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ExportVAppRequestType"] = reflect.TypeOf((*ExportVAppRequestType)(nil)).Elem()
    +}
    +
    +type ExportVAppResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExportVm ExportVmRequestType
    +
    +func init() {
    +	t["ExportVm"] = reflect.TypeOf((*ExportVm)(nil)).Elem()
    +}
    +
    +type ExportVmRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ExportVmRequestType"] = reflect.TypeOf((*ExportVmRequestType)(nil)).Elem()
    +}
    +
    +type ExportVmResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExtExtendedProductInfo struct {
    +	DynamicData
    +
    +	CompanyUrl    string                  `xml:"companyUrl,omitempty"`
    +	ProductUrl    string                  `xml:"productUrl,omitempty"`
    +	ManagementUrl string                  `xml:"managementUrl,omitempty"`
    +	Self          *ManagedObjectReference `xml:"self,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtExtendedProductInfo"] = reflect.TypeOf((*ExtExtendedProductInfo)(nil)).Elem()
    +}
    +
    +type ExtManagedEntityInfo struct {
    +	DynamicData
    +
    +	Type         string `xml:"type"`
    +	SmallIconUrl string `xml:"smallIconUrl,omitempty"`
    +	IconUrl      string `xml:"iconUrl,omitempty"`
    +	Description  string `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtManagedEntityInfo"] = reflect.TypeOf((*ExtManagedEntityInfo)(nil)).Elem()
    +}
    +
    +type ExtSolutionManagerInfo struct {
    +	DynamicData
    +
    +	Tab          []ExtSolutionManagerInfoTabInfo `xml:"tab,omitempty"`
    +	SmallIconUrl string                          `xml:"smallIconUrl,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtSolutionManagerInfo"] = reflect.TypeOf((*ExtSolutionManagerInfo)(nil)).Elem()
    +}
    +
    +type ExtSolutionManagerInfoTabInfo struct {
    +	DynamicData
    +
    +	Label string `xml:"label"`
    +	Url   string `xml:"url"`
    +}
    +
    +func init() {
    +	t["ExtSolutionManagerInfoTabInfo"] = reflect.TypeOf((*ExtSolutionManagerInfoTabInfo)(nil)).Elem()
    +}
    +
    +type ExtendDiskRequestType struct {
    +	This            ManagedObjectReference `xml:"_this"`
    +	Id              ID                     `xml:"id"`
    +	Datastore       ManagedObjectReference `xml:"datastore"`
    +	NewCapacityInMB int64                  `xml:"newCapacityInMB"`
    +}
    +
    +func init() {
    +	t["ExtendDiskRequestType"] = reflect.TypeOf((*ExtendDiskRequestType)(nil)).Elem()
    +}
    +
    +type ExtendDisk_Task ExtendDiskRequestType
    +
    +func init() {
    +	t["ExtendDisk_Task"] = reflect.TypeOf((*ExtendDisk_Task)(nil)).Elem()
    +}
    +
    +type ExtendDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExtendVffs ExtendVffsRequestType
    +
    +func init() {
    +	t["ExtendVffs"] = reflect.TypeOf((*ExtendVffs)(nil)).Elem()
    +}
    +
    +type ExtendVffsRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	VffsPath   string                 `xml:"vffsPath"`
    +	DevicePath string                 `xml:"devicePath"`
    +	Spec       *HostDiskPartitionSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtendVffsRequestType"] = reflect.TypeOf((*ExtendVffsRequestType)(nil)).Elem()
    +}
    +
    +type ExtendVffsResponse struct {
    +}
    +
    +type ExtendVirtualDiskRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Name          string                  `xml:"name"`
    +	Datacenter    *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	NewCapacityKb int64                   `xml:"newCapacityKb"`
    +	EagerZero     *bool                   `xml:"eagerZero"`
    +}
    +
    +func init() {
    +	t["ExtendVirtualDiskRequestType"] = reflect.TypeOf((*ExtendVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type ExtendVirtualDisk_Task ExtendVirtualDiskRequestType
    +
    +func init() {
    +	t["ExtendVirtualDisk_Task"] = reflect.TypeOf((*ExtendVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type ExtendVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExtendVmfsDatastore ExtendVmfsDatastoreRequestType
    +
    +func init() {
    +	t["ExtendVmfsDatastore"] = reflect.TypeOf((*ExtendVmfsDatastore)(nil)).Elem()
    +}
    +
    +type ExtendVmfsDatastoreRequestType struct {
    +	This      ManagedObjectReference  `xml:"_this"`
    +	Datastore ManagedObjectReference  `xml:"datastore"`
    +	Spec      VmfsDatastoreExtendSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ExtendVmfsDatastoreRequestType"] = reflect.TypeOf((*ExtendVmfsDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type ExtendVmfsDatastoreResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ExtendedDescription struct {
    +	Description
    +
    +	MessageCatalogKeyPrefix string        `xml:"messageCatalogKeyPrefix"`
    +	MessageArg              []KeyAnyValue `xml:"messageArg,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtendedDescription"] = reflect.TypeOf((*ExtendedDescription)(nil)).Elem()
    +}
    +
    +type ExtendedElementDescription struct {
    +	ElementDescription
    +
    +	MessageCatalogKeyPrefix string        `xml:"messageCatalogKeyPrefix"`
    +	MessageArg              []KeyAnyValue `xml:"messageArg,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtendedElementDescription"] = reflect.TypeOf((*ExtendedElementDescription)(nil)).Elem()
    +}
    +
    +type ExtendedEvent struct {
    +	GeneralEvent
    +
    +	EventTypeId   string                 `xml:"eventTypeId"`
    +	ManagedObject ManagedObjectReference `xml:"managedObject"`
    +	Data          []ExtendedEventPair    `xml:"data,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtendedEvent"] = reflect.TypeOf((*ExtendedEvent)(nil)).Elem()
    +}
    +
    +type ExtendedEventPair struct {
    +	DynamicData
    +
    +	Key   string `xml:"key"`
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["ExtendedEventPair"] = reflect.TypeOf((*ExtendedEventPair)(nil)).Elem()
    +}
    +
    +type ExtendedFault struct {
    +	VimFault
    +
    +	FaultTypeId string     `xml:"faultTypeId"`
    +	Data        []KeyValue `xml:"data,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtendedFault"] = reflect.TypeOf((*ExtendedFault)(nil)).Elem()
    +}
    +
    +type ExtendedFaultFault ExtendedFault
    +
    +func init() {
    +	t["ExtendedFaultFault"] = reflect.TypeOf((*ExtendedFaultFault)(nil)).Elem()
    +}
    +
    +type Extension struct {
    +	DynamicData
    +
    +	Description            BaseDescription           `xml:"description,typeattr"`
    +	Key                    string                    `xml:"key"`
    +	Company                string                    `xml:"company,omitempty"`
    +	Type                   string                    `xml:"type,omitempty"`
    +	Version                string                    `xml:"version"`
    +	SubjectName            string                    `xml:"subjectName,omitempty"`
    +	Server                 []ExtensionServerInfo     `xml:"server,omitempty"`
    +	Client                 []ExtensionClientInfo     `xml:"client,omitempty"`
    +	TaskList               []ExtensionTaskTypeInfo   `xml:"taskList,omitempty"`
    +	EventList              []ExtensionEventTypeInfo  `xml:"eventList,omitempty"`
    +	FaultList              []ExtensionFaultTypeInfo  `xml:"faultList,omitempty"`
    +	PrivilegeList          []ExtensionPrivilegeInfo  `xml:"privilegeList,omitempty"`
    +	ResourceList           []ExtensionResourceInfo   `xml:"resourceList,omitempty"`
    +	LastHeartbeatTime      time.Time                 `xml:"lastHeartbeatTime"`
    +	HealthInfo             *ExtensionHealthInfo      `xml:"healthInfo,omitempty"`
    +	OvfConsumerInfo        *ExtensionOvfConsumerInfo `xml:"ovfConsumerInfo,omitempty"`
    +	ExtendedProductInfo    *ExtExtendedProductInfo   `xml:"extendedProductInfo,omitempty"`
    +	ManagedEntityInfo      []ExtManagedEntityInfo    `xml:"managedEntityInfo,omitempty"`
    +	ShownInSolutionManager *bool                     `xml:"shownInSolutionManager"`
    +	SolutionManagerInfo    *ExtSolutionManagerInfo   `xml:"solutionManagerInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["Extension"] = reflect.TypeOf((*Extension)(nil)).Elem()
    +}
    +
    +type ExtensionClientInfo struct {
    +	DynamicData
    +
    +	Version     string          `xml:"version"`
    +	Description BaseDescription `xml:"description,typeattr"`
    +	Company     string          `xml:"company"`
    +	Type        string          `xml:"type"`
    +	Url         string          `xml:"url"`
    +}
    +
    +func init() {
    +	t["ExtensionClientInfo"] = reflect.TypeOf((*ExtensionClientInfo)(nil)).Elem()
    +}
    +
    +type ExtensionEventTypeInfo struct {
    +	DynamicData
    +
    +	EventID         string `xml:"eventID"`
    +	EventTypeSchema string `xml:"eventTypeSchema,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtensionEventTypeInfo"] = reflect.TypeOf((*ExtensionEventTypeInfo)(nil)).Elem()
    +}
    +
    +type ExtensionFaultTypeInfo struct {
    +	DynamicData
    +
    +	FaultID string `xml:"faultID"`
    +}
    +
    +func init() {
    +	t["ExtensionFaultTypeInfo"] = reflect.TypeOf((*ExtensionFaultTypeInfo)(nil)).Elem()
    +}
    +
    +type ExtensionHealthInfo struct {
    +	DynamicData
    +
    +	Url string `xml:"url"`
    +}
    +
    +func init() {
    +	t["ExtensionHealthInfo"] = reflect.TypeOf((*ExtensionHealthInfo)(nil)).Elem()
    +}
    +
    +type ExtensionManagerIpAllocationUsage struct {
    +	DynamicData
    +
    +	ExtensionKey string `xml:"extensionKey"`
    +	NumAddresses int32  `xml:"numAddresses"`
    +}
    +
    +func init() {
    +	t["ExtensionManagerIpAllocationUsage"] = reflect.TypeOf((*ExtensionManagerIpAllocationUsage)(nil)).Elem()
    +}
    +
    +type ExtensionOvfConsumerInfo struct {
    +	DynamicData
    +
    +	CallbackUrl string   `xml:"callbackUrl"`
    +	SectionType []string `xml:"sectionType"`
    +}
    +
    +func init() {
    +	t["ExtensionOvfConsumerInfo"] = reflect.TypeOf((*ExtensionOvfConsumerInfo)(nil)).Elem()
    +}
    +
    +type ExtensionPrivilegeInfo struct {
    +	DynamicData
    +
    +	PrivID        string `xml:"privID"`
    +	PrivGroupName string `xml:"privGroupName"`
    +}
    +
    +func init() {
    +	t["ExtensionPrivilegeInfo"] = reflect.TypeOf((*ExtensionPrivilegeInfo)(nil)).Elem()
    +}
    +
    +type ExtensionResourceInfo struct {
    +	DynamicData
    +
    +	Locale string     `xml:"locale"`
    +	Module string     `xml:"module"`
    +	Data   []KeyValue `xml:"data"`
    +}
    +
    +func init() {
    +	t["ExtensionResourceInfo"] = reflect.TypeOf((*ExtensionResourceInfo)(nil)).Elem()
    +}
    +
    +type ExtensionServerInfo struct {
    +	DynamicData
    +
    +	Url              string          `xml:"url"`
    +	Description      BaseDescription `xml:"description,typeattr"`
    +	Company          string          `xml:"company"`
    +	Type             string          `xml:"type"`
    +	AdminEmail       []string        `xml:"adminEmail"`
    +	ServerThumbprint string          `xml:"serverThumbprint,omitempty"`
    +}
    +
    +func init() {
    +	t["ExtensionServerInfo"] = reflect.TypeOf((*ExtensionServerInfo)(nil)).Elem()
    +}
    +
    +type ExtensionTaskTypeInfo struct {
    +	DynamicData
    +
    +	TaskID string `xml:"taskID"`
    +}
    +
    +func init() {
    +	t["ExtensionTaskTypeInfo"] = reflect.TypeOf((*ExtensionTaskTypeInfo)(nil)).Elem()
    +}
    +
    +type ExtractOvfEnvironment ExtractOvfEnvironmentRequestType
    +
    +func init() {
    +	t["ExtractOvfEnvironment"] = reflect.TypeOf((*ExtractOvfEnvironment)(nil)).Elem()
    +}
    +
    +type ExtractOvfEnvironmentRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ExtractOvfEnvironmentRequestType"] = reflect.TypeOf((*ExtractOvfEnvironmentRequestType)(nil)).Elem()
    +}
    +
    +type ExtractOvfEnvironmentResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type FailToEnableSPBM struct {
    +	NotEnoughLicenses
    +
    +	Cs                ManagedObjectReference               `xml:"cs"`
    +	CsName            string                               `xml:"csName"`
    +	HostLicenseStates []ComputeResourceHostSPBMLicenseInfo `xml:"hostLicenseStates"`
    +}
    +
    +func init() {
    +	t["FailToEnableSPBM"] = reflect.TypeOf((*FailToEnableSPBM)(nil)).Elem()
    +}
    +
    +type FailToEnableSPBMFault FailToEnableSPBM
    +
    +func init() {
    +	t["FailToEnableSPBMFault"] = reflect.TypeOf((*FailToEnableSPBMFault)(nil)).Elem()
    +}
    +
    +type FailToLockFaultToleranceVMs struct {
    +	RuntimeFault
    +
    +	VmName          string                 `xml:"vmName"`
    +	Vm              ManagedObjectReference `xml:"vm"`
    +	AlreadyLockedVm ManagedObjectReference `xml:"alreadyLockedVm"`
    +}
    +
    +func init() {
    +	t["FailToLockFaultToleranceVMs"] = reflect.TypeOf((*FailToLockFaultToleranceVMs)(nil)).Elem()
    +}
    +
    +type FailToLockFaultToleranceVMsFault FailToLockFaultToleranceVMs
    +
    +func init() {
    +	t["FailToLockFaultToleranceVMsFault"] = reflect.TypeOf((*FailToLockFaultToleranceVMsFault)(nil)).Elem()
    +}
    +
    +type FailoverLevelRestored struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["FailoverLevelRestored"] = reflect.TypeOf((*FailoverLevelRestored)(nil)).Elem()
    +}
    +
    +type FailoverNodeInfo struct {
    +	DynamicData
    +
    +	ClusterIpSettings CustomizationIPSettings  `xml:"clusterIpSettings"`
    +	FailoverIp        *CustomizationIPSettings `xml:"failoverIp,omitempty"`
    +	BiosUuid          string                   `xml:"biosUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["FailoverNodeInfo"] = reflect.TypeOf((*FailoverNodeInfo)(nil)).Elem()
    +}
    +
    +type FaultDomainId struct {
    +	DynamicData
    +
    +	Id string `xml:"id"`
    +}
    +
    +func init() {
    +	t["FaultDomainId"] = reflect.TypeOf((*FaultDomainId)(nil)).Elem()
    +}
    +
    +type FaultToleranceAntiAffinityViolated struct {
    +	MigrationFault
    +
    +	HostName string                 `xml:"hostName"`
    +	Host     ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["FaultToleranceAntiAffinityViolated"] = reflect.TypeOf((*FaultToleranceAntiAffinityViolated)(nil)).Elem()
    +}
    +
    +type FaultToleranceAntiAffinityViolatedFault FaultToleranceAntiAffinityViolated
    +
    +func init() {
    +	t["FaultToleranceAntiAffinityViolatedFault"] = reflect.TypeOf((*FaultToleranceAntiAffinityViolatedFault)(nil)).Elem()
    +}
    +
    +type FaultToleranceCannotEditMem struct {
    +	VmConfigFault
    +
    +	VmName string                 `xml:"vmName"`
    +	Vm     ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["FaultToleranceCannotEditMem"] = reflect.TypeOf((*FaultToleranceCannotEditMem)(nil)).Elem()
    +}
    +
    +type FaultToleranceCannotEditMemFault FaultToleranceCannotEditMem
    +
    +func init() {
    +	t["FaultToleranceCannotEditMemFault"] = reflect.TypeOf((*FaultToleranceCannotEditMemFault)(nil)).Elem()
    +}
    +
    +type FaultToleranceConfigInfo struct {
    +	DynamicData
    +
    +	Role          int32    `xml:"role"`
    +	InstanceUuids []string `xml:"instanceUuids"`
    +	ConfigPaths   []string `xml:"configPaths"`
    +	Orphaned      *bool    `xml:"orphaned"`
    +}
    +
    +func init() {
    +	t["FaultToleranceConfigInfo"] = reflect.TypeOf((*FaultToleranceConfigInfo)(nil)).Elem()
    +}
    +
    +type FaultToleranceConfigSpec struct {
    +	DynamicData
    +
    +	MetaDataPath    *FaultToleranceMetaSpec     `xml:"metaDataPath,omitempty"`
    +	SecondaryVmSpec *FaultToleranceVMConfigSpec `xml:"secondaryVmSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["FaultToleranceConfigSpec"] = reflect.TypeOf((*FaultToleranceConfigSpec)(nil)).Elem()
    +}
    +
    +type FaultToleranceCpuIncompatible struct {
    +	CpuIncompatible
    +
    +	Model    bool `xml:"model"`
    +	Family   bool `xml:"family"`
    +	Stepping bool `xml:"stepping"`
    +}
    +
    +func init() {
    +	t["FaultToleranceCpuIncompatible"] = reflect.TypeOf((*FaultToleranceCpuIncompatible)(nil)).Elem()
    +}
    +
    +type FaultToleranceCpuIncompatibleFault FaultToleranceCpuIncompatible
    +
    +func init() {
    +	t["FaultToleranceCpuIncompatibleFault"] = reflect.TypeOf((*FaultToleranceCpuIncompatibleFault)(nil)).Elem()
    +}
    +
    +type FaultToleranceDiskSpec struct {
    +	DynamicData
    +
    +	Disk      BaseVirtualDevice      `xml:"disk,typeattr"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["FaultToleranceDiskSpec"] = reflect.TypeOf((*FaultToleranceDiskSpec)(nil)).Elem()
    +}
    +
    +type FaultToleranceMetaSpec struct {
    +	DynamicData
    +
    +	MetaDataDatastore ManagedObjectReference `xml:"metaDataDatastore"`
    +}
    +
    +func init() {
    +	t["FaultToleranceMetaSpec"] = reflect.TypeOf((*FaultToleranceMetaSpec)(nil)).Elem()
    +}
    +
    +type FaultToleranceNeedsThickDisk struct {
    +	MigrationFault
    +
    +	VmName string `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["FaultToleranceNeedsThickDisk"] = reflect.TypeOf((*FaultToleranceNeedsThickDisk)(nil)).Elem()
    +}
    +
    +type FaultToleranceNeedsThickDiskFault FaultToleranceNeedsThickDisk
    +
    +func init() {
    +	t["FaultToleranceNeedsThickDiskFault"] = reflect.TypeOf((*FaultToleranceNeedsThickDiskFault)(nil)).Elem()
    +}
    +
    +type FaultToleranceNotLicensed struct {
    +	VmFaultToleranceIssue
    +
    +	HostName string `xml:"hostName,omitempty"`
    +}
    +
    +func init() {
    +	t["FaultToleranceNotLicensed"] = reflect.TypeOf((*FaultToleranceNotLicensed)(nil)).Elem()
    +}
    +
    +type FaultToleranceNotLicensedFault FaultToleranceNotLicensed
    +
    +func init() {
    +	t["FaultToleranceNotLicensedFault"] = reflect.TypeOf((*FaultToleranceNotLicensedFault)(nil)).Elem()
    +}
    +
    +type FaultToleranceNotSameBuild struct {
    +	MigrationFault
    +
    +	Build string `xml:"build"`
    +}
    +
    +func init() {
    +	t["FaultToleranceNotSameBuild"] = reflect.TypeOf((*FaultToleranceNotSameBuild)(nil)).Elem()
    +}
    +
    +type FaultToleranceNotSameBuildFault FaultToleranceNotSameBuild
    +
    +func init() {
    +	t["FaultToleranceNotSameBuildFault"] = reflect.TypeOf((*FaultToleranceNotSameBuildFault)(nil)).Elem()
    +}
    +
    +type FaultTolerancePrimaryConfigInfo struct {
    +	FaultToleranceConfigInfo
    +
    +	Secondaries []ManagedObjectReference `xml:"secondaries"`
    +}
    +
    +func init() {
    +	t["FaultTolerancePrimaryConfigInfo"] = reflect.TypeOf((*FaultTolerancePrimaryConfigInfo)(nil)).Elem()
    +}
    +
    +type FaultTolerancePrimaryPowerOnNotAttempted struct {
    +	VmFaultToleranceIssue
    +
    +	SecondaryVm ManagedObjectReference `xml:"secondaryVm"`
    +	PrimaryVm   ManagedObjectReference `xml:"primaryVm"`
    +}
    +
    +func init() {
    +	t["FaultTolerancePrimaryPowerOnNotAttempted"] = reflect.TypeOf((*FaultTolerancePrimaryPowerOnNotAttempted)(nil)).Elem()
    +}
    +
    +type FaultTolerancePrimaryPowerOnNotAttemptedFault FaultTolerancePrimaryPowerOnNotAttempted
    +
    +func init() {
    +	t["FaultTolerancePrimaryPowerOnNotAttemptedFault"] = reflect.TypeOf((*FaultTolerancePrimaryPowerOnNotAttemptedFault)(nil)).Elem()
    +}
    +
    +type FaultToleranceSecondaryConfigInfo struct {
    +	FaultToleranceConfigInfo
    +
    +	PrimaryVM ManagedObjectReference `xml:"primaryVM"`
    +}
    +
    +func init() {
    +	t["FaultToleranceSecondaryConfigInfo"] = reflect.TypeOf((*FaultToleranceSecondaryConfigInfo)(nil)).Elem()
    +}
    +
    +type FaultToleranceSecondaryOpResult struct {
    +	DynamicData
    +
    +	Vm               ManagedObjectReference  `xml:"vm"`
    +	PowerOnAttempted bool                    `xml:"powerOnAttempted"`
    +	PowerOnResult    *ClusterPowerOnVmResult `xml:"powerOnResult,omitempty"`
    +}
    +
    +func init() {
    +	t["FaultToleranceSecondaryOpResult"] = reflect.TypeOf((*FaultToleranceSecondaryOpResult)(nil)).Elem()
    +}
    +
    +type FaultToleranceVMConfigSpec struct {
    +	DynamicData
    +
    +	VmConfig *ManagedObjectReference  `xml:"vmConfig,omitempty"`
    +	Disks    []FaultToleranceDiskSpec `xml:"disks,omitempty"`
    +}
    +
    +func init() {
    +	t["FaultToleranceVMConfigSpec"] = reflect.TypeOf((*FaultToleranceVMConfigSpec)(nil)).Elem()
    +}
    +
    +type FaultToleranceVmNotDasProtected struct {
    +	VimFault
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	VmName string                 `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["FaultToleranceVmNotDasProtected"] = reflect.TypeOf((*FaultToleranceVmNotDasProtected)(nil)).Elem()
    +}
    +
    +type FaultToleranceVmNotDasProtectedFault FaultToleranceVmNotDasProtected
    +
    +func init() {
    +	t["FaultToleranceVmNotDasProtectedFault"] = reflect.TypeOf((*FaultToleranceVmNotDasProtectedFault)(nil)).Elem()
    +}
    +
    +type FaultsByHost struct {
    +	DynamicData
    +
    +	Host   ManagedObjectReference `xml:"host"`
    +	Faults []LocalizedMethodFault `xml:"faults,omitempty"`
    +}
    +
    +func init() {
    +	t["FaultsByHost"] = reflect.TypeOf((*FaultsByHost)(nil)).Elem()
    +}
    +
    +type FaultsByVM struct {
    +	DynamicData
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	Faults []LocalizedMethodFault `xml:"faults,omitempty"`
    +}
    +
    +func init() {
    +	t["FaultsByVM"] = reflect.TypeOf((*FaultsByVM)(nil)).Elem()
    +}
    +
    +type FcoeConfig struct {
    +	DynamicData
    +
    +	PriorityClass int32                      `xml:"priorityClass"`
    +	SourceMac     string                     `xml:"sourceMac"`
    +	VlanRange     []FcoeConfigVlanRange      `xml:"vlanRange"`
    +	Capabilities  FcoeConfigFcoeCapabilities `xml:"capabilities"`
    +	FcoeActive    bool                       `xml:"fcoeActive"`
    +}
    +
    +func init() {
    +	t["FcoeConfig"] = reflect.TypeOf((*FcoeConfig)(nil)).Elem()
    +}
    +
    +type FcoeConfigFcoeCapabilities struct {
    +	DynamicData
    +
    +	PriorityClass    bool `xml:"priorityClass"`
    +	SourceMacAddress bool `xml:"sourceMacAddress"`
    +	VlanRange        bool `xml:"vlanRange"`
    +}
    +
    +func init() {
    +	t["FcoeConfigFcoeCapabilities"] = reflect.TypeOf((*FcoeConfigFcoeCapabilities)(nil)).Elem()
    +}
    +
    +type FcoeConfigFcoeSpecification struct {
    +	DynamicData
    +
    +	UnderlyingPnic string                `xml:"underlyingPnic"`
    +	PriorityClass  int32                 `xml:"priorityClass,omitempty"`
    +	SourceMac      string                `xml:"sourceMac,omitempty"`
    +	VlanRange      []FcoeConfigVlanRange `xml:"vlanRange,omitempty"`
    +}
    +
    +func init() {
    +	t["FcoeConfigFcoeSpecification"] = reflect.TypeOf((*FcoeConfigFcoeSpecification)(nil)).Elem()
    +}
    +
    +type FcoeConfigVlanRange struct {
    +	DynamicData
    +
    +	VlanLow  int32 `xml:"vlanLow"`
    +	VlanHigh int32 `xml:"vlanHigh"`
    +}
    +
    +func init() {
    +	t["FcoeConfigVlanRange"] = reflect.TypeOf((*FcoeConfigVlanRange)(nil)).Elem()
    +}
    +
    +type FcoeFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["FcoeFault"] = reflect.TypeOf((*FcoeFault)(nil)).Elem()
    +}
    +
    +type FcoeFaultFault BaseFcoeFault
    +
    +func init() {
    +	t["FcoeFaultFault"] = reflect.TypeOf((*FcoeFaultFault)(nil)).Elem()
    +}
    +
    +type FcoeFaultPnicHasNoPortSet struct {
    +	FcoeFault
    +
    +	NicDevice string `xml:"nicDevice"`
    +}
    +
    +func init() {
    +	t["FcoeFaultPnicHasNoPortSet"] = reflect.TypeOf((*FcoeFaultPnicHasNoPortSet)(nil)).Elem()
    +}
    +
    +type FcoeFaultPnicHasNoPortSetFault FcoeFaultPnicHasNoPortSet
    +
    +func init() {
    +	t["FcoeFaultPnicHasNoPortSetFault"] = reflect.TypeOf((*FcoeFaultPnicHasNoPortSetFault)(nil)).Elem()
    +}
    +
    +type FeatureRequirementsNotMet struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	FeatureRequirement []VirtualMachineFeatureRequirement `xml:"featureRequirement,omitempty"`
    +	Vm                 *ManagedObjectReference            `xml:"vm,omitempty"`
    +	Host               *ManagedObjectReference            `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["FeatureRequirementsNotMet"] = reflect.TypeOf((*FeatureRequirementsNotMet)(nil)).Elem()
    +}
    +
    +type FeatureRequirementsNotMetFault FeatureRequirementsNotMet
    +
    +func init() {
    +	t["FeatureRequirementsNotMetFault"] = reflect.TypeOf((*FeatureRequirementsNotMetFault)(nil)).Elem()
    +}
    +
    +type FetchDVPortKeys FetchDVPortKeysRequestType
    +
    +func init() {
    +	t["FetchDVPortKeys"] = reflect.TypeOf((*FetchDVPortKeys)(nil)).Elem()
    +}
    +
    +type FetchDVPortKeysRequestType struct {
    +	This     ManagedObjectReference                `xml:"_this"`
    +	Criteria *DistributedVirtualSwitchPortCriteria `xml:"criteria,omitempty"`
    +}
    +
    +func init() {
    +	t["FetchDVPortKeysRequestType"] = reflect.TypeOf((*FetchDVPortKeysRequestType)(nil)).Elem()
    +}
    +
    +type FetchDVPortKeysResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type FetchDVPorts FetchDVPortsRequestType
    +
    +func init() {
    +	t["FetchDVPorts"] = reflect.TypeOf((*FetchDVPorts)(nil)).Elem()
    +}
    +
    +type FetchDVPortsRequestType struct {
    +	This     ManagedObjectReference                `xml:"_this"`
    +	Criteria *DistributedVirtualSwitchPortCriteria `xml:"criteria,omitempty"`
    +}
    +
    +func init() {
    +	t["FetchDVPortsRequestType"] = reflect.TypeOf((*FetchDVPortsRequestType)(nil)).Elem()
    +}
    +
    +type FetchDVPortsResponse struct {
    +	Returnval []DistributedVirtualPort `xml:"returnval,omitempty"`
    +}
    +
    +type FetchSystemEventLog FetchSystemEventLogRequestType
    +
    +func init() {
    +	t["FetchSystemEventLog"] = reflect.TypeOf((*FetchSystemEventLog)(nil)).Elem()
    +}
    +
    +type FetchSystemEventLogRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["FetchSystemEventLogRequestType"] = reflect.TypeOf((*FetchSystemEventLogRequestType)(nil)).Elem()
    +}
    +
    +type FetchSystemEventLogResponse struct {
    +	Returnval []SystemEventInfo `xml:"returnval,omitempty"`
    +}
    +
    +type FetchUserPrivilegeOnEntities FetchUserPrivilegeOnEntitiesRequestType
    +
    +func init() {
    +	t["FetchUserPrivilegeOnEntities"] = reflect.TypeOf((*FetchUserPrivilegeOnEntities)(nil)).Elem()
    +}
    +
    +type FetchUserPrivilegeOnEntitiesRequestType struct {
    +	This     ManagedObjectReference   `xml:"_this"`
    +	Entities []ManagedObjectReference `xml:"entities"`
    +	UserName string                   `xml:"userName"`
    +}
    +
    +func init() {
    +	t["FetchUserPrivilegeOnEntitiesRequestType"] = reflect.TypeOf((*FetchUserPrivilegeOnEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type FetchUserPrivilegeOnEntitiesResponse struct {
    +	Returnval []UserPrivilegeResult `xml:"returnval,omitempty"`
    +}
    +
    +type FileAlreadyExists struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["FileAlreadyExists"] = reflect.TypeOf((*FileAlreadyExists)(nil)).Elem()
    +}
    +
    +type FileAlreadyExistsFault FileAlreadyExists
    +
    +func init() {
    +	t["FileAlreadyExistsFault"] = reflect.TypeOf((*FileAlreadyExistsFault)(nil)).Elem()
    +}
    +
    +type FileBackedPortNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["FileBackedPortNotSupported"] = reflect.TypeOf((*FileBackedPortNotSupported)(nil)).Elem()
    +}
    +
    +type FileBackedPortNotSupportedFault FileBackedPortNotSupported
    +
    +func init() {
    +	t["FileBackedPortNotSupportedFault"] = reflect.TypeOf((*FileBackedPortNotSupportedFault)(nil)).Elem()
    +}
    +
    +type FileBackedVirtualDiskSpec struct {
    +	VirtualDiskSpec
    +
    +	CapacityKb int64                           `xml:"capacityKb"`
    +	Profile    []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +	Crypto     BaseCryptoSpec                  `xml:"crypto,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["FileBackedVirtualDiskSpec"] = reflect.TypeOf((*FileBackedVirtualDiskSpec)(nil)).Elem()
    +}
    +
    +type FileFault struct {
    +	VimFault
    +
    +	File string `xml:"file"`
    +}
    +
    +func init() {
    +	t["FileFault"] = reflect.TypeOf((*FileFault)(nil)).Elem()
    +}
    +
    +type FileFaultFault BaseFileFault
    +
    +func init() {
    +	t["FileFaultFault"] = reflect.TypeOf((*FileFaultFault)(nil)).Elem()
    +}
    +
    +type FileInfo struct {
    +	DynamicData
    +
    +	Path         string     `xml:"path"`
    +	FriendlyName string     `xml:"friendlyName,omitempty"`
    +	FileSize     int64      `xml:"fileSize,omitempty"`
    +	Modification *time.Time `xml:"modification"`
    +	Owner        string     `xml:"owner,omitempty"`
    +}
    +
    +func init() {
    +	t["FileInfo"] = reflect.TypeOf((*FileInfo)(nil)).Elem()
    +}
    +
    +type FileLocked struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["FileLocked"] = reflect.TypeOf((*FileLocked)(nil)).Elem()
    +}
    +
    +type FileLockedFault FileLocked
    +
    +func init() {
    +	t["FileLockedFault"] = reflect.TypeOf((*FileLockedFault)(nil)).Elem()
    +}
    +
    +type FileNameTooLong struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["FileNameTooLong"] = reflect.TypeOf((*FileNameTooLong)(nil)).Elem()
    +}
    +
    +type FileNameTooLongFault FileNameTooLong
    +
    +func init() {
    +	t["FileNameTooLongFault"] = reflect.TypeOf((*FileNameTooLongFault)(nil)).Elem()
    +}
    +
    +type FileNotFound struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["FileNotFound"] = reflect.TypeOf((*FileNotFound)(nil)).Elem()
    +}
    +
    +type FileNotFoundFault FileNotFound
    +
    +func init() {
    +	t["FileNotFoundFault"] = reflect.TypeOf((*FileNotFoundFault)(nil)).Elem()
    +}
    +
    +type FileNotWritable struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["FileNotWritable"] = reflect.TypeOf((*FileNotWritable)(nil)).Elem()
    +}
    +
    +type FileNotWritableFault FileNotWritable
    +
    +func init() {
    +	t["FileNotWritableFault"] = reflect.TypeOf((*FileNotWritableFault)(nil)).Elem()
    +}
    +
    +type FileQuery struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["FileQuery"] = reflect.TypeOf((*FileQuery)(nil)).Elem()
    +}
    +
    +type FileQueryFlags struct {
    +	DynamicData
    +
    +	FileType     bool  `xml:"fileType"`
    +	FileSize     bool  `xml:"fileSize"`
    +	Modification bool  `xml:"modification"`
    +	FileOwner    *bool `xml:"fileOwner"`
    +}
    +
    +func init() {
    +	t["FileQueryFlags"] = reflect.TypeOf((*FileQueryFlags)(nil)).Elem()
    +}
    +
    +type FileTooLarge struct {
    +	FileFault
    +
    +	Datastore   string `xml:"datastore"`
    +	FileSize    int64  `xml:"fileSize"`
    +	MaxFileSize int64  `xml:"maxFileSize,omitempty"`
    +}
    +
    +func init() {
    +	t["FileTooLarge"] = reflect.TypeOf((*FileTooLarge)(nil)).Elem()
    +}
    +
    +type FileTooLargeFault FileTooLarge
    +
    +func init() {
    +	t["FileTooLargeFault"] = reflect.TypeOf((*FileTooLargeFault)(nil)).Elem()
    +}
    +
    +type FileTransferInformation struct {
    +	DynamicData
    +
    +	Attributes BaseGuestFileAttributes `xml:"attributes,typeattr"`
    +	Size       int64                   `xml:"size"`
    +	Url        string                  `xml:"url"`
    +}
    +
    +func init() {
    +	t["FileTransferInformation"] = reflect.TypeOf((*FileTransferInformation)(nil)).Elem()
    +}
    +
    +type FilesystemQuiesceFault struct {
    +	SnapshotFault
    +}
    +
    +func init() {
    +	t["FilesystemQuiesceFault"] = reflect.TypeOf((*FilesystemQuiesceFault)(nil)).Elem()
    +}
    +
    +type FilesystemQuiesceFaultFault FilesystemQuiesceFault
    +
    +func init() {
    +	t["FilesystemQuiesceFaultFault"] = reflect.TypeOf((*FilesystemQuiesceFaultFault)(nil)).Elem()
    +}
    +
    +type FilterInUse struct {
    +	ResourceInUse
    +
    +	Disk []VirtualDiskId `xml:"disk,omitempty"`
    +}
    +
    +func init() {
    +	t["FilterInUse"] = reflect.TypeOf((*FilterInUse)(nil)).Elem()
    +}
    +
    +type FilterInUseFault FilterInUse
    +
    +func init() {
    +	t["FilterInUseFault"] = reflect.TypeOf((*FilterInUseFault)(nil)).Elem()
    +}
    +
    +type FindAllByDnsName FindAllByDnsNameRequestType
    +
    +func init() {
    +	t["FindAllByDnsName"] = reflect.TypeOf((*FindAllByDnsName)(nil)).Elem()
    +}
    +
    +type FindAllByDnsNameRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	DnsName    string                  `xml:"dnsName"`
    +	VmSearch   bool                    `xml:"vmSearch"`
    +}
    +
    +func init() {
    +	t["FindAllByDnsNameRequestType"] = reflect.TypeOf((*FindAllByDnsNameRequestType)(nil)).Elem()
    +}
    +
    +type FindAllByDnsNameResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type FindAllByIp FindAllByIpRequestType
    +
    +func init() {
    +	t["FindAllByIp"] = reflect.TypeOf((*FindAllByIp)(nil)).Elem()
    +}
    +
    +type FindAllByIpRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	Ip         string                  `xml:"ip"`
    +	VmSearch   bool                    `xml:"vmSearch"`
    +}
    +
    +func init() {
    +	t["FindAllByIpRequestType"] = reflect.TypeOf((*FindAllByIpRequestType)(nil)).Elem()
    +}
    +
    +type FindAllByIpResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type FindAllByUuid FindAllByUuidRequestType
    +
    +func init() {
    +	t["FindAllByUuid"] = reflect.TypeOf((*FindAllByUuid)(nil)).Elem()
    +}
    +
    +type FindAllByUuidRequestType struct {
    +	This         ManagedObjectReference  `xml:"_this"`
    +	Datacenter   *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	Uuid         string                  `xml:"uuid"`
    +	VmSearch     bool                    `xml:"vmSearch"`
    +	InstanceUuid *bool                   `xml:"instanceUuid"`
    +}
    +
    +func init() {
    +	t["FindAllByUuidRequestType"] = reflect.TypeOf((*FindAllByUuidRequestType)(nil)).Elem()
    +}
    +
    +type FindAllByUuidResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type FindAssociatedProfile FindAssociatedProfileRequestType
    +
    +func init() {
    +	t["FindAssociatedProfile"] = reflect.TypeOf((*FindAssociatedProfile)(nil)).Elem()
    +}
    +
    +type FindAssociatedProfileRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["FindAssociatedProfileRequestType"] = reflect.TypeOf((*FindAssociatedProfileRequestType)(nil)).Elem()
    +}
    +
    +type FindAssociatedProfileResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type FindByDatastorePath FindByDatastorePathRequestType
    +
    +func init() {
    +	t["FindByDatastorePath"] = reflect.TypeOf((*FindByDatastorePath)(nil)).Elem()
    +}
    +
    +type FindByDatastorePathRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Datacenter ManagedObjectReference `xml:"datacenter"`
    +	Path       string                 `xml:"path"`
    +}
    +
    +func init() {
    +	t["FindByDatastorePathRequestType"] = reflect.TypeOf((*FindByDatastorePathRequestType)(nil)).Elem()
    +}
    +
    +type FindByDatastorePathResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type FindByDnsName FindByDnsNameRequestType
    +
    +func init() {
    +	t["FindByDnsName"] = reflect.TypeOf((*FindByDnsName)(nil)).Elem()
    +}
    +
    +type FindByDnsNameRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	DnsName    string                  `xml:"dnsName"`
    +	VmSearch   bool                    `xml:"vmSearch"`
    +}
    +
    +func init() {
    +	t["FindByDnsNameRequestType"] = reflect.TypeOf((*FindByDnsNameRequestType)(nil)).Elem()
    +}
    +
    +type FindByDnsNameResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type FindByInventoryPath FindByInventoryPathRequestType
    +
    +func init() {
    +	t["FindByInventoryPath"] = reflect.TypeOf((*FindByInventoryPath)(nil)).Elem()
    +}
    +
    +type FindByInventoryPathRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	InventoryPath string                 `xml:"inventoryPath"`
    +}
    +
    +func init() {
    +	t["FindByInventoryPathRequestType"] = reflect.TypeOf((*FindByInventoryPathRequestType)(nil)).Elem()
    +}
    +
    +type FindByInventoryPathResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type FindByIp FindByIpRequestType
    +
    +func init() {
    +	t["FindByIp"] = reflect.TypeOf((*FindByIp)(nil)).Elem()
    +}
    +
    +type FindByIpRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	Ip         string                  `xml:"ip"`
    +	VmSearch   bool                    `xml:"vmSearch"`
    +}
    +
    +func init() {
    +	t["FindByIpRequestType"] = reflect.TypeOf((*FindByIpRequestType)(nil)).Elem()
    +}
    +
    +type FindByIpResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type FindByUuid FindByUuidRequestType
    +
    +func init() {
    +	t["FindByUuid"] = reflect.TypeOf((*FindByUuid)(nil)).Elem()
    +}
    +
    +type FindByUuidRequestType struct {
    +	This         ManagedObjectReference  `xml:"_this"`
    +	Datacenter   *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	Uuid         string                  `xml:"uuid"`
    +	VmSearch     bool                    `xml:"vmSearch"`
    +	InstanceUuid *bool                   `xml:"instanceUuid"`
    +}
    +
    +func init() {
    +	t["FindByUuidRequestType"] = reflect.TypeOf((*FindByUuidRequestType)(nil)).Elem()
    +}
    +
    +type FindByUuidResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type FindChild FindChildRequestType
    +
    +func init() {
    +	t["FindChild"] = reflect.TypeOf((*FindChild)(nil)).Elem()
    +}
    +
    +type FindChildRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +	Name   string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["FindChildRequestType"] = reflect.TypeOf((*FindChildRequestType)(nil)).Elem()
    +}
    +
    +type FindChildResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type FindExtension FindExtensionRequestType
    +
    +func init() {
    +	t["FindExtension"] = reflect.TypeOf((*FindExtension)(nil)).Elem()
    +}
    +
    +type FindExtensionRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ExtensionKey string                 `xml:"extensionKey"`
    +}
    +
    +func init() {
    +	t["FindExtensionRequestType"] = reflect.TypeOf((*FindExtensionRequestType)(nil)).Elem()
    +}
    +
    +type FindExtensionResponse struct {
    +	Returnval *Extension `xml:"returnval,omitempty"`
    +}
    +
    +type FindRulesForVm FindRulesForVmRequestType
    +
    +func init() {
    +	t["FindRulesForVm"] = reflect.TypeOf((*FindRulesForVm)(nil)).Elem()
    +}
    +
    +type FindRulesForVmRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Vm   ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["FindRulesForVmRequestType"] = reflect.TypeOf((*FindRulesForVmRequestType)(nil)).Elem()
    +}
    +
    +type FindRulesForVmResponse struct {
    +	Returnval []BaseClusterRuleInfo `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type FirewallProfile struct {
    +	ApplyProfile
    +
    +	Ruleset []FirewallProfileRulesetProfile `xml:"ruleset,omitempty"`
    +}
    +
    +func init() {
    +	t["FirewallProfile"] = reflect.TypeOf((*FirewallProfile)(nil)).Elem()
    +}
    +
    +type FirewallProfileRulesetProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["FirewallProfileRulesetProfile"] = reflect.TypeOf((*FirewallProfileRulesetProfile)(nil)).Elem()
    +}
    +
    +type FloatOption struct {
    +	OptionType
    +
    +	Min          float32 `xml:"min"`
    +	Max          float32 `xml:"max"`
    +	DefaultValue float32 `xml:"defaultValue"`
    +}
    +
    +func init() {
    +	t["FloatOption"] = reflect.TypeOf((*FloatOption)(nil)).Elem()
    +}
    +
    +type FloppyImageFileInfo struct {
    +	FileInfo
    +}
    +
    +func init() {
    +	t["FloppyImageFileInfo"] = reflect.TypeOf((*FloppyImageFileInfo)(nil)).Elem()
    +}
    +
    +type FloppyImageFileQuery struct {
    +	FileQuery
    +}
    +
    +func init() {
    +	t["FloppyImageFileQuery"] = reflect.TypeOf((*FloppyImageFileQuery)(nil)).Elem()
    +}
    +
    +type FolderEventArgument struct {
    +	EntityEventArgument
    +
    +	Folder ManagedObjectReference `xml:"folder"`
    +}
    +
    +func init() {
    +	t["FolderEventArgument"] = reflect.TypeOf((*FolderEventArgument)(nil)).Elem()
    +}
    +
    +type FolderFileInfo struct {
    +	FileInfo
    +}
    +
    +func init() {
    +	t["FolderFileInfo"] = reflect.TypeOf((*FolderFileInfo)(nil)).Elem()
    +}
    +
    +type FolderFileQuery struct {
    +	FileQuery
    +}
    +
    +func init() {
    +	t["FolderFileQuery"] = reflect.TypeOf((*FolderFileQuery)(nil)).Elem()
    +}
    +
    +type FormatVffs FormatVffsRequestType
    +
    +func init() {
    +	t["FormatVffs"] = reflect.TypeOf((*FormatVffs)(nil)).Elem()
    +}
    +
    +type FormatVffsRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	CreateSpec HostVffsSpec           `xml:"createSpec"`
    +}
    +
    +func init() {
    +	t["FormatVffsRequestType"] = reflect.TypeOf((*FormatVffsRequestType)(nil)).Elem()
    +}
    +
    +type FormatVffsResponse struct {
    +	Returnval HostVffsVolume `xml:"returnval"`
    +}
    +
    +type FormatVmfs FormatVmfsRequestType
    +
    +func init() {
    +	t["FormatVmfs"] = reflect.TypeOf((*FormatVmfs)(nil)).Elem()
    +}
    +
    +type FormatVmfsRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	CreateSpec HostVmfsSpec           `xml:"createSpec"`
    +}
    +
    +func init() {
    +	t["FormatVmfsRequestType"] = reflect.TypeOf((*FormatVmfsRequestType)(nil)).Elem()
    +}
    +
    +type FormatVmfsResponse struct {
    +	Returnval HostVmfsVolume `xml:"returnval"`
    +}
    +
    +type FtIssuesOnHost struct {
    +	VmFaultToleranceIssue
    +
    +	Host     ManagedObjectReference `xml:"host"`
    +	HostName string                 `xml:"hostName"`
    +	Errors   []LocalizedMethodFault `xml:"errors,omitempty"`
    +}
    +
    +func init() {
    +	t["FtIssuesOnHost"] = reflect.TypeOf((*FtIssuesOnHost)(nil)).Elem()
    +}
    +
    +type FtIssuesOnHostFault FtIssuesOnHost
    +
    +func init() {
    +	t["FtIssuesOnHostFault"] = reflect.TypeOf((*FtIssuesOnHostFault)(nil)).Elem()
    +}
    +
    +type FullStorageVMotionNotSupported struct {
    +	MigrationFeatureNotSupported
    +}
    +
    +func init() {
    +	t["FullStorageVMotionNotSupported"] = reflect.TypeOf((*FullStorageVMotionNotSupported)(nil)).Elem()
    +}
    +
    +type FullStorageVMotionNotSupportedFault FullStorageVMotionNotSupported
    +
    +func init() {
    +	t["FullStorageVMotionNotSupportedFault"] = reflect.TypeOf((*FullStorageVMotionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type GatewayConnectFault struct {
    +	HostConnectFault
    +
    +	GatewayType string              `xml:"gatewayType"`
    +	GatewayId   string              `xml:"gatewayId"`
    +	GatewayInfo string              `xml:"gatewayInfo"`
    +	Details     *LocalizableMessage `xml:"details,omitempty"`
    +}
    +
    +func init() {
    +	t["GatewayConnectFault"] = reflect.TypeOf((*GatewayConnectFault)(nil)).Elem()
    +}
    +
    +type GatewayConnectFaultFault BaseGatewayConnectFault
    +
    +func init() {
    +	t["GatewayConnectFaultFault"] = reflect.TypeOf((*GatewayConnectFaultFault)(nil)).Elem()
    +}
    +
    +type GatewayHostNotReachable struct {
    +	GatewayToHostConnectFault
    +}
    +
    +func init() {
    +	t["GatewayHostNotReachable"] = reflect.TypeOf((*GatewayHostNotReachable)(nil)).Elem()
    +}
    +
    +type GatewayHostNotReachableFault GatewayHostNotReachable
    +
    +func init() {
    +	t["GatewayHostNotReachableFault"] = reflect.TypeOf((*GatewayHostNotReachableFault)(nil)).Elem()
    +}
    +
    +type GatewayNotFound struct {
    +	GatewayConnectFault
    +}
    +
    +func init() {
    +	t["GatewayNotFound"] = reflect.TypeOf((*GatewayNotFound)(nil)).Elem()
    +}
    +
    +type GatewayNotFoundFault GatewayNotFound
    +
    +func init() {
    +	t["GatewayNotFoundFault"] = reflect.TypeOf((*GatewayNotFoundFault)(nil)).Elem()
    +}
    +
    +type GatewayNotReachable struct {
    +	GatewayConnectFault
    +}
    +
    +func init() {
    +	t["GatewayNotReachable"] = reflect.TypeOf((*GatewayNotReachable)(nil)).Elem()
    +}
    +
    +type GatewayNotReachableFault GatewayNotReachable
    +
    +func init() {
    +	t["GatewayNotReachableFault"] = reflect.TypeOf((*GatewayNotReachableFault)(nil)).Elem()
    +}
    +
    +type GatewayOperationRefused struct {
    +	GatewayConnectFault
    +}
    +
    +func init() {
    +	t["GatewayOperationRefused"] = reflect.TypeOf((*GatewayOperationRefused)(nil)).Elem()
    +}
    +
    +type GatewayOperationRefusedFault GatewayOperationRefused
    +
    +func init() {
    +	t["GatewayOperationRefusedFault"] = reflect.TypeOf((*GatewayOperationRefusedFault)(nil)).Elem()
    +}
    +
    +type GatewayToHostAuthFault struct {
    +	GatewayToHostConnectFault
    +
    +	InvalidProperties []string `xml:"invalidProperties"`
    +	MissingProperties []string `xml:"missingProperties"`
    +}
    +
    +func init() {
    +	t["GatewayToHostAuthFault"] = reflect.TypeOf((*GatewayToHostAuthFault)(nil)).Elem()
    +}
    +
    +type GatewayToHostAuthFaultFault GatewayToHostAuthFault
    +
    +func init() {
    +	t["GatewayToHostAuthFaultFault"] = reflect.TypeOf((*GatewayToHostAuthFaultFault)(nil)).Elem()
    +}
    +
    +type GatewayToHostConnectFault struct {
    +	GatewayConnectFault
    +
    +	Hostname string `xml:"hostname"`
    +	Port     int32  `xml:"port,omitempty"`
    +}
    +
    +func init() {
    +	t["GatewayToHostConnectFault"] = reflect.TypeOf((*GatewayToHostConnectFault)(nil)).Elem()
    +}
    +
    +type GatewayToHostConnectFaultFault BaseGatewayToHostConnectFault
    +
    +func init() {
    +	t["GatewayToHostConnectFaultFault"] = reflect.TypeOf((*GatewayToHostConnectFaultFault)(nil)).Elem()
    +}
    +
    +type GatewayToHostTrustVerifyFault struct {
    +	GatewayToHostConnectFault
    +
    +	VerificationToken  string     `xml:"verificationToken"`
    +	PropertiesToVerify []KeyValue `xml:"propertiesToVerify"`
    +}
    +
    +func init() {
    +	t["GatewayToHostTrustVerifyFault"] = reflect.TypeOf((*GatewayToHostTrustVerifyFault)(nil)).Elem()
    +}
    +
    +type GatewayToHostTrustVerifyFaultFault GatewayToHostTrustVerifyFault
    +
    +func init() {
    +	t["GatewayToHostTrustVerifyFaultFault"] = reflect.TypeOf((*GatewayToHostTrustVerifyFaultFault)(nil)).Elem()
    +}
    +
    +type GeneralEvent struct {
    +	Event
    +
    +	Message string `xml:"message"`
    +}
    +
    +func init() {
    +	t["GeneralEvent"] = reflect.TypeOf((*GeneralEvent)(nil)).Elem()
    +}
    +
    +type GeneralHostErrorEvent struct {
    +	GeneralEvent
    +}
    +
    +func init() {
    +	t["GeneralHostErrorEvent"] = reflect.TypeOf((*GeneralHostErrorEvent)(nil)).Elem()
    +}
    +
    +type GeneralHostInfoEvent struct {
    +	GeneralEvent
    +}
    +
    +func init() {
    +	t["GeneralHostInfoEvent"] = reflect.TypeOf((*GeneralHostInfoEvent)(nil)).Elem()
    +}
    +
    +type GeneralHostWarningEvent struct {
    +	GeneralEvent
    +}
    +
    +func init() {
    +	t["GeneralHostWarningEvent"] = reflect.TypeOf((*GeneralHostWarningEvent)(nil)).Elem()
    +}
    +
    +type GeneralUserEvent struct {
    +	GeneralEvent
    +
    +	Entity *ManagedEntityEventArgument `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["GeneralUserEvent"] = reflect.TypeOf((*GeneralUserEvent)(nil)).Elem()
    +}
    +
    +type GeneralVmErrorEvent struct {
    +	GeneralEvent
    +}
    +
    +func init() {
    +	t["GeneralVmErrorEvent"] = reflect.TypeOf((*GeneralVmErrorEvent)(nil)).Elem()
    +}
    +
    +type GeneralVmInfoEvent struct {
    +	GeneralEvent
    +}
    +
    +func init() {
    +	t["GeneralVmInfoEvent"] = reflect.TypeOf((*GeneralVmInfoEvent)(nil)).Elem()
    +}
    +
    +type GeneralVmWarningEvent struct {
    +	GeneralEvent
    +}
    +
    +func init() {
    +	t["GeneralVmWarningEvent"] = reflect.TypeOf((*GeneralVmWarningEvent)(nil)).Elem()
    +}
    +
    +type GenerateCertificateSigningRequest GenerateCertificateSigningRequestRequestType
    +
    +func init() {
    +	t["GenerateCertificateSigningRequest"] = reflect.TypeOf((*GenerateCertificateSigningRequest)(nil)).Elem()
    +}
    +
    +type GenerateCertificateSigningRequestByDn GenerateCertificateSigningRequestByDnRequestType
    +
    +func init() {
    +	t["GenerateCertificateSigningRequestByDn"] = reflect.TypeOf((*GenerateCertificateSigningRequestByDn)(nil)).Elem()
    +}
    +
    +type GenerateCertificateSigningRequestByDnRequestType struct {
    +	This              ManagedObjectReference `xml:"_this"`
    +	DistinguishedName string                 `xml:"distinguishedName"`
    +}
    +
    +func init() {
    +	t["GenerateCertificateSigningRequestByDnRequestType"] = reflect.TypeOf((*GenerateCertificateSigningRequestByDnRequestType)(nil)).Elem()
    +}
    +
    +type GenerateCertificateSigningRequestByDnResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type GenerateCertificateSigningRequestRequestType struct {
    +	This                     ManagedObjectReference `xml:"_this"`
    +	UseIpAddressAsCommonName bool                   `xml:"useIpAddressAsCommonName"`
    +}
    +
    +func init() {
    +	t["GenerateCertificateSigningRequestRequestType"] = reflect.TypeOf((*GenerateCertificateSigningRequestRequestType)(nil)).Elem()
    +}
    +
    +type GenerateCertificateSigningRequestResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type GenerateClientCsr GenerateClientCsrRequestType
    +
    +func init() {
    +	t["GenerateClientCsr"] = reflect.TypeOf((*GenerateClientCsr)(nil)).Elem()
    +}
    +
    +type GenerateClientCsrRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Cluster KeyProviderId          `xml:"cluster"`
    +}
    +
    +func init() {
    +	t["GenerateClientCsrRequestType"] = reflect.TypeOf((*GenerateClientCsrRequestType)(nil)).Elem()
    +}
    +
    +type GenerateClientCsrResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type GenerateConfigTaskList GenerateConfigTaskListRequestType
    +
    +func init() {
    +	t["GenerateConfigTaskList"] = reflect.TypeOf((*GenerateConfigTaskList)(nil)).Elem()
    +}
    +
    +type GenerateConfigTaskListRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ConfigSpec HostConfigSpec         `xml:"configSpec"`
    +	Host       ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["GenerateConfigTaskListRequestType"] = reflect.TypeOf((*GenerateConfigTaskListRequestType)(nil)).Elem()
    +}
    +
    +type GenerateConfigTaskListResponse struct {
    +	Returnval HostProfileManagerConfigTaskList `xml:"returnval"`
    +}
    +
    +type GenerateHostConfigTaskSpecRequestType struct {
    +	This      ManagedObjectReference     `xml:"_this"`
    +	HostsInfo []StructuredCustomizations `xml:"hostsInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["GenerateHostConfigTaskSpecRequestType"] = reflect.TypeOf((*GenerateHostConfigTaskSpecRequestType)(nil)).Elem()
    +}
    +
    +type GenerateHostConfigTaskSpec_Task GenerateHostConfigTaskSpecRequestType
    +
    +func init() {
    +	t["GenerateHostConfigTaskSpec_Task"] = reflect.TypeOf((*GenerateHostConfigTaskSpec_Task)(nil)).Elem()
    +}
    +
    +type GenerateHostConfigTaskSpec_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type GenerateHostProfileTaskListRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ConfigSpec HostConfigSpec         `xml:"configSpec"`
    +	Host       ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["GenerateHostProfileTaskListRequestType"] = reflect.TypeOf((*GenerateHostProfileTaskListRequestType)(nil)).Elem()
    +}
    +
    +type GenerateHostProfileTaskList_Task GenerateHostProfileTaskListRequestType
    +
    +func init() {
    +	t["GenerateHostProfileTaskList_Task"] = reflect.TypeOf((*GenerateHostProfileTaskList_Task)(nil)).Elem()
    +}
    +
    +type GenerateHostProfileTaskList_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type GenerateKey GenerateKeyRequestType
    +
    +func init() {
    +	t["GenerateKey"] = reflect.TypeOf((*GenerateKey)(nil)).Elem()
    +}
    +
    +type GenerateKeyRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	KeyProvider *KeyProviderId         `xml:"keyProvider,omitempty"`
    +}
    +
    +func init() {
    +	t["GenerateKeyRequestType"] = reflect.TypeOf((*GenerateKeyRequestType)(nil)).Elem()
    +}
    +
    +type GenerateKeyResponse struct {
    +	Returnval CryptoKeyResult `xml:"returnval"`
    +}
    +
    +type GenerateLogBundlesRequestType struct {
    +	This           ManagedObjectReference   `xml:"_this"`
    +	IncludeDefault bool                     `xml:"includeDefault"`
    +	Host           []ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["GenerateLogBundlesRequestType"] = reflect.TypeOf((*GenerateLogBundlesRequestType)(nil)).Elem()
    +}
    +
    +type GenerateLogBundles_Task GenerateLogBundlesRequestType
    +
    +func init() {
    +	t["GenerateLogBundles_Task"] = reflect.TypeOf((*GenerateLogBundles_Task)(nil)).Elem()
    +}
    +
    +type GenerateLogBundles_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type GenerateSelfSignedClientCert GenerateSelfSignedClientCertRequestType
    +
    +func init() {
    +	t["GenerateSelfSignedClientCert"] = reflect.TypeOf((*GenerateSelfSignedClientCert)(nil)).Elem()
    +}
    +
    +type GenerateSelfSignedClientCertRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Cluster KeyProviderId          `xml:"cluster"`
    +}
    +
    +func init() {
    +	t["GenerateSelfSignedClientCertRequestType"] = reflect.TypeOf((*GenerateSelfSignedClientCertRequestType)(nil)).Elem()
    +}
    +
    +type GenerateSelfSignedClientCertResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type GenericDrsFault struct {
    +	VimFault
    +
    +	HostFaults []LocalizedMethodFault `xml:"hostFaults,omitempty"`
    +}
    +
    +func init() {
    +	t["GenericDrsFault"] = reflect.TypeOf((*GenericDrsFault)(nil)).Elem()
    +}
    +
    +type GenericDrsFaultFault GenericDrsFault
    +
    +func init() {
    +	t["GenericDrsFaultFault"] = reflect.TypeOf((*GenericDrsFaultFault)(nil)).Elem()
    +}
    +
    +type GenericVmConfigFault struct {
    +	VmConfigFault
    +
    +	Reason string `xml:"reason"`
    +}
    +
    +func init() {
    +	t["GenericVmConfigFault"] = reflect.TypeOf((*GenericVmConfigFault)(nil)).Elem()
    +}
    +
    +type GenericVmConfigFaultFault GenericVmConfigFault
    +
    +func init() {
    +	t["GenericVmConfigFaultFault"] = reflect.TypeOf((*GenericVmConfigFaultFault)(nil)).Elem()
    +}
    +
    +type GetAlarm GetAlarmRequestType
    +
    +func init() {
    +	t["GetAlarm"] = reflect.TypeOf((*GetAlarm)(nil)).Elem()
    +}
    +
    +type GetAlarmRequestType struct {
    +	This   ManagedObjectReference  `xml:"_this"`
    +	Entity *ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["GetAlarmRequestType"] = reflect.TypeOf((*GetAlarmRequestType)(nil)).Elem()
    +}
    +
    +type GetAlarmResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type GetAlarmState GetAlarmStateRequestType
    +
    +func init() {
    +	t["GetAlarmState"] = reflect.TypeOf((*GetAlarmState)(nil)).Elem()
    +}
    +
    +type GetAlarmStateRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["GetAlarmStateRequestType"] = reflect.TypeOf((*GetAlarmStateRequestType)(nil)).Elem()
    +}
    +
    +type GetAlarmStateResponse struct {
    +	Returnval []AlarmState `xml:"returnval,omitempty"`
    +}
    +
    +type GetCustomizationSpec GetCustomizationSpecRequestType
    +
    +func init() {
    +	t["GetCustomizationSpec"] = reflect.TypeOf((*GetCustomizationSpec)(nil)).Elem()
    +}
    +
    +type GetCustomizationSpecRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["GetCustomizationSpecRequestType"] = reflect.TypeOf((*GetCustomizationSpecRequestType)(nil)).Elem()
    +}
    +
    +type GetCustomizationSpecResponse struct {
    +	Returnval CustomizationSpecItem `xml:"returnval"`
    +}
    +
    +type GetPublicKey GetPublicKeyRequestType
    +
    +func init() {
    +	t["GetPublicKey"] = reflect.TypeOf((*GetPublicKey)(nil)).Elem()
    +}
    +
    +type GetPublicKeyRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["GetPublicKeyRequestType"] = reflect.TypeOf((*GetPublicKeyRequestType)(nil)).Elem()
    +}
    +
    +type GetPublicKeyResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type GetResourceUsage GetResourceUsageRequestType
    +
    +func init() {
    +	t["GetResourceUsage"] = reflect.TypeOf((*GetResourceUsage)(nil)).Elem()
    +}
    +
    +type GetResourceUsageRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["GetResourceUsageRequestType"] = reflect.TypeOf((*GetResourceUsageRequestType)(nil)).Elem()
    +}
    +
    +type GetResourceUsageResponse struct {
    +	Returnval ClusterResourceUsageSummary `xml:"returnval"`
    +}
    +
    +type GetVchaClusterHealth GetVchaClusterHealthRequestType
    +
    +func init() {
    +	t["GetVchaClusterHealth"] = reflect.TypeOf((*GetVchaClusterHealth)(nil)).Elem()
    +}
    +
    +type GetVchaClusterHealthRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["GetVchaClusterHealthRequestType"] = reflect.TypeOf((*GetVchaClusterHealthRequestType)(nil)).Elem()
    +}
    +
    +type GetVchaClusterHealthResponse struct {
    +	Returnval VchaClusterHealth `xml:"returnval"`
    +}
    +
    +type GetVsanObjExtAttrs GetVsanObjExtAttrsRequestType
    +
    +func init() {
    +	t["GetVsanObjExtAttrs"] = reflect.TypeOf((*GetVsanObjExtAttrs)(nil)).Elem()
    +}
    +
    +type GetVsanObjExtAttrsRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Uuids []string               `xml:"uuids"`
    +}
    +
    +func init() {
    +	t["GetVsanObjExtAttrsRequestType"] = reflect.TypeOf((*GetVsanObjExtAttrsRequestType)(nil)).Elem()
    +}
    +
    +type GetVsanObjExtAttrsResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type GhostDvsProxySwitchDetectedEvent struct {
    +	HostEvent
    +
    +	SwitchUuid []string `xml:"switchUuid"`
    +}
    +
    +func init() {
    +	t["GhostDvsProxySwitchDetectedEvent"] = reflect.TypeOf((*GhostDvsProxySwitchDetectedEvent)(nil)).Elem()
    +}
    +
    +type GhostDvsProxySwitchRemovedEvent struct {
    +	HostEvent
    +
    +	SwitchUuid []string `xml:"switchUuid"`
    +}
    +
    +func init() {
    +	t["GhostDvsProxySwitchRemovedEvent"] = reflect.TypeOf((*GhostDvsProxySwitchRemovedEvent)(nil)).Elem()
    +}
    +
    +type GlobalMessageChangedEvent struct {
    +	SessionEvent
    +
    +	Message     string `xml:"message"`
    +	PrevMessage string `xml:"prevMessage,omitempty"`
    +}
    +
    +func init() {
    +	t["GlobalMessageChangedEvent"] = reflect.TypeOf((*GlobalMessageChangedEvent)(nil)).Elem()
    +}
    +
    +type GroupAlarmAction struct {
    +	AlarmAction
    +
    +	Action []BaseAlarmAction `xml:"action,typeattr"`
    +}
    +
    +func init() {
    +	t["GroupAlarmAction"] = reflect.TypeOf((*GroupAlarmAction)(nil)).Elem()
    +}
    +
    +type GuestAliases struct {
    +	DynamicData
    +
    +	Base64Cert string               `xml:"base64Cert"`
    +	Aliases    []GuestAuthAliasInfo `xml:"aliases"`
    +}
    +
    +func init() {
    +	t["GuestAliases"] = reflect.TypeOf((*GuestAliases)(nil)).Elem()
    +}
    +
    +type GuestAuthAliasInfo struct {
    +	DynamicData
    +
    +	Subject BaseGuestAuthSubject `xml:"subject,typeattr"`
    +	Comment string               `xml:"comment"`
    +}
    +
    +func init() {
    +	t["GuestAuthAliasInfo"] = reflect.TypeOf((*GuestAuthAliasInfo)(nil)).Elem()
    +}
    +
    +type GuestAuthAnySubject struct {
    +	GuestAuthSubject
    +}
    +
    +func init() {
    +	t["GuestAuthAnySubject"] = reflect.TypeOf((*GuestAuthAnySubject)(nil)).Elem()
    +}
    +
    +type GuestAuthNamedSubject struct {
    +	GuestAuthSubject
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["GuestAuthNamedSubject"] = reflect.TypeOf((*GuestAuthNamedSubject)(nil)).Elem()
    +}
    +
    +type GuestAuthSubject struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["GuestAuthSubject"] = reflect.TypeOf((*GuestAuthSubject)(nil)).Elem()
    +}
    +
    +type GuestAuthentication struct {
    +	DynamicData
    +
    +	InteractiveSession bool `xml:"interactiveSession"`
    +}
    +
    +func init() {
    +	t["GuestAuthentication"] = reflect.TypeOf((*GuestAuthentication)(nil)).Elem()
    +}
    +
    +type GuestAuthenticationChallenge struct {
    +	GuestOperationsFault
    +
    +	ServerChallenge BaseGuestAuthentication `xml:"serverChallenge,typeattr"`
    +	SessionID       int64                   `xml:"sessionID"`
    +}
    +
    +func init() {
    +	t["GuestAuthenticationChallenge"] = reflect.TypeOf((*GuestAuthenticationChallenge)(nil)).Elem()
    +}
    +
    +type GuestAuthenticationChallengeFault GuestAuthenticationChallenge
    +
    +func init() {
    +	t["GuestAuthenticationChallengeFault"] = reflect.TypeOf((*GuestAuthenticationChallengeFault)(nil)).Elem()
    +}
    +
    +type GuestComponentsOutOfDate struct {
    +	GuestOperationsFault
    +}
    +
    +func init() {
    +	t["GuestComponentsOutOfDate"] = reflect.TypeOf((*GuestComponentsOutOfDate)(nil)).Elem()
    +}
    +
    +type GuestComponentsOutOfDateFault GuestComponentsOutOfDate
    +
    +func init() {
    +	t["GuestComponentsOutOfDateFault"] = reflect.TypeOf((*GuestComponentsOutOfDateFault)(nil)).Elem()
    +}
    +
    +type GuestDiskInfo struct {
    +	DynamicData
    +
    +	DiskPath  string `xml:"diskPath,omitempty"`
    +	Capacity  int64  `xml:"capacity,omitempty"`
    +	FreeSpace int64  `xml:"freeSpace,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestDiskInfo"] = reflect.TypeOf((*GuestDiskInfo)(nil)).Elem()
    +}
    +
    +type GuestFileAttributes struct {
    +	DynamicData
    +
    +	ModificationTime *time.Time `xml:"modificationTime"`
    +	AccessTime       *time.Time `xml:"accessTime"`
    +	SymlinkTarget    string     `xml:"symlinkTarget,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestFileAttributes"] = reflect.TypeOf((*GuestFileAttributes)(nil)).Elem()
    +}
    +
    +type GuestFileInfo struct {
    +	DynamicData
    +
    +	Path       string                  `xml:"path"`
    +	Type       string                  `xml:"type"`
    +	Size       int64                   `xml:"size"`
    +	Attributes BaseGuestFileAttributes `xml:"attributes,typeattr"`
    +}
    +
    +func init() {
    +	t["GuestFileInfo"] = reflect.TypeOf((*GuestFileInfo)(nil)).Elem()
    +}
    +
    +type GuestInfo struct {
    +	DynamicData
    +
    +	ToolsStatus                     VirtualMachineToolsStatus          `xml:"toolsStatus,omitempty"`
    +	ToolsVersionStatus              string                             `xml:"toolsVersionStatus,omitempty"`
    +	ToolsVersionStatus2             string                             `xml:"toolsVersionStatus2,omitempty"`
    +	ToolsRunningStatus              string                             `xml:"toolsRunningStatus,omitempty"`
    +	ToolsVersion                    string                             `xml:"toolsVersion,omitempty"`
    +	ToolsInstallType                string                             `xml:"toolsInstallType,omitempty"`
    +	GuestId                         string                             `xml:"guestId,omitempty"`
    +	GuestFamily                     string                             `xml:"guestFamily,omitempty"`
    +	GuestFullName                   string                             `xml:"guestFullName,omitempty"`
    +	HostName                        string                             `xml:"hostName,omitempty"`
    +	IpAddress                       string                             `xml:"ipAddress,omitempty"`
    +	Net                             []GuestNicInfo                     `xml:"net,omitempty"`
    +	IpStack                         []GuestStackInfo                   `xml:"ipStack,omitempty"`
    +	Disk                            []GuestDiskInfo                    `xml:"disk,omitempty"`
    +	Screen                          *GuestScreenInfo                   `xml:"screen,omitempty"`
    +	GuestState                      string                             `xml:"guestState"`
    +	AppHeartbeatStatus              string                             `xml:"appHeartbeatStatus,omitempty"`
    +	GuestKernelCrashed              *bool                              `xml:"guestKernelCrashed"`
    +	AppState                        string                             `xml:"appState,omitempty"`
    +	GuestOperationsReady            *bool                              `xml:"guestOperationsReady"`
    +	InteractiveGuestOperationsReady *bool                              `xml:"interactiveGuestOperationsReady"`
    +	GuestStateChangeSupported       *bool                              `xml:"guestStateChangeSupported"`
    +	GenerationInfo                  []GuestInfoNamespaceGenerationInfo `xml:"generationInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestInfo"] = reflect.TypeOf((*GuestInfo)(nil)).Elem()
    +}
    +
    +type GuestInfoNamespaceGenerationInfo struct {
    +	DynamicData
    +
    +	Key          string `xml:"key"`
    +	GenerationNo int32  `xml:"generationNo"`
    +}
    +
    +func init() {
    +	t["GuestInfoNamespaceGenerationInfo"] = reflect.TypeOf((*GuestInfoNamespaceGenerationInfo)(nil)).Elem()
    +}
    +
    +type GuestListFileInfo struct {
    +	DynamicData
    +
    +	Files     []GuestFileInfo `xml:"files,omitempty"`
    +	Remaining int32           `xml:"remaining"`
    +}
    +
    +func init() {
    +	t["GuestListFileInfo"] = reflect.TypeOf((*GuestListFileInfo)(nil)).Elem()
    +}
    +
    +type GuestMappedAliases struct {
    +	DynamicData
    +
    +	Base64Cert string                 `xml:"base64Cert"`
    +	Username   string                 `xml:"username"`
    +	Subjects   []BaseGuestAuthSubject `xml:"subjects,typeattr"`
    +}
    +
    +func init() {
    +	t["GuestMappedAliases"] = reflect.TypeOf((*GuestMappedAliases)(nil)).Elem()
    +}
    +
    +type GuestMultipleMappings struct {
    +	GuestOperationsFault
    +}
    +
    +func init() {
    +	t["GuestMultipleMappings"] = reflect.TypeOf((*GuestMultipleMappings)(nil)).Elem()
    +}
    +
    +type GuestMultipleMappingsFault GuestMultipleMappings
    +
    +func init() {
    +	t["GuestMultipleMappingsFault"] = reflect.TypeOf((*GuestMultipleMappingsFault)(nil)).Elem()
    +}
    +
    +type GuestNicInfo struct {
    +	DynamicData
    +
    +	Network        string                `xml:"network,omitempty"`
    +	IpAddress      []string              `xml:"ipAddress,omitempty"`
    +	MacAddress     string                `xml:"macAddress,omitempty"`
    +	Connected      bool                  `xml:"connected"`
    +	DeviceConfigId int32                 `xml:"deviceConfigId"`
    +	DnsConfig      *NetDnsConfigInfo     `xml:"dnsConfig,omitempty"`
    +	IpConfig       *NetIpConfigInfo      `xml:"ipConfig,omitempty"`
    +	NetBIOSConfig  BaseNetBIOSConfigInfo `xml:"netBIOSConfig,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["GuestNicInfo"] = reflect.TypeOf((*GuestNicInfo)(nil)).Elem()
    +}
    +
    +type GuestOperationsFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["GuestOperationsFault"] = reflect.TypeOf((*GuestOperationsFault)(nil)).Elem()
    +}
    +
    +type GuestOperationsFaultFault BaseGuestOperationsFault
    +
    +func init() {
    +	t["GuestOperationsFaultFault"] = reflect.TypeOf((*GuestOperationsFaultFault)(nil)).Elem()
    +}
    +
    +type GuestOperationsUnavailable struct {
    +	GuestOperationsFault
    +}
    +
    +func init() {
    +	t["GuestOperationsUnavailable"] = reflect.TypeOf((*GuestOperationsUnavailable)(nil)).Elem()
    +}
    +
    +type GuestOperationsUnavailableFault GuestOperationsUnavailable
    +
    +func init() {
    +	t["GuestOperationsUnavailableFault"] = reflect.TypeOf((*GuestOperationsUnavailableFault)(nil)).Elem()
    +}
    +
    +type GuestOsDescriptor struct {
    +	DynamicData
    +
    +	Id                                      string          `xml:"id"`
    +	Family                                  string          `xml:"family"`
    +	FullName                                string          `xml:"fullName"`
    +	SupportedMaxCPUs                        int32           `xml:"supportedMaxCPUs"`
    +	NumSupportedPhysicalSockets             int32           `xml:"numSupportedPhysicalSockets,omitempty"`
    +	NumSupportedCoresPerSocket              int32           `xml:"numSupportedCoresPerSocket,omitempty"`
    +	SupportedMinMemMB                       int32           `xml:"supportedMinMemMB"`
    +	SupportedMaxMemMB                       int32           `xml:"supportedMaxMemMB"`
    +	RecommendedMemMB                        int32           `xml:"recommendedMemMB"`
    +	RecommendedColorDepth                   int32           `xml:"recommendedColorDepth"`
    +	SupportedDiskControllerList             []string        `xml:"supportedDiskControllerList"`
    +	RecommendedSCSIController               string          `xml:"recommendedSCSIController,omitempty"`
    +	RecommendedDiskController               string          `xml:"recommendedDiskController"`
    +	SupportedNumDisks                       int32           `xml:"supportedNumDisks"`
    +	RecommendedDiskSizeMB                   int32           `xml:"recommendedDiskSizeMB"`
    +	RecommendedCdromController              string          `xml:"recommendedCdromController,omitempty"`
    +	SupportedEthernetCard                   []string        `xml:"supportedEthernetCard"`
    +	RecommendedEthernetCard                 string          `xml:"recommendedEthernetCard,omitempty"`
    +	SupportsSlaveDisk                       *bool           `xml:"supportsSlaveDisk"`
    +	CpuFeatureMask                          []HostCpuIdInfo `xml:"cpuFeatureMask,omitempty"`
    +	SmcRequired                             *bool           `xml:"smcRequired"`
    +	SupportsWakeOnLan                       bool            `xml:"supportsWakeOnLan"`
    +	SupportsVMI                             *bool           `xml:"supportsVMI"`
    +	SupportsMemoryHotAdd                    *bool           `xml:"supportsMemoryHotAdd"`
    +	SupportsCpuHotAdd                       *bool           `xml:"supportsCpuHotAdd"`
    +	SupportsCpuHotRemove                    *bool           `xml:"supportsCpuHotRemove"`
    +	SupportedFirmware                       []string        `xml:"supportedFirmware,omitempty"`
    +	RecommendedFirmware                     string          `xml:"recommendedFirmware,omitempty"`
    +	SupportedUSBControllerList              []string        `xml:"supportedUSBControllerList,omitempty"`
    +	RecommendedUSBController                string          `xml:"recommendedUSBController,omitempty"`
    +	Supports3D                              *bool           `xml:"supports3D"`
    +	Recommended3D                           *bool           `xml:"recommended3D"`
    +	SmcRecommended                          *bool           `xml:"smcRecommended"`
    +	Ich7mRecommended                        *bool           `xml:"ich7mRecommended"`
    +	UsbRecommended                          *bool           `xml:"usbRecommended"`
    +	SupportLevel                            string          `xml:"supportLevel,omitempty"`
    +	SupportedForCreate                      *bool           `xml:"supportedForCreate"`
    +	VRAMSizeInKB                            *IntOption      `xml:"vRAMSizeInKB,omitempty"`
    +	NumSupportedFloppyDevices               int32           `xml:"numSupportedFloppyDevices,omitempty"`
    +	WakeOnLanEthernetCard                   []string        `xml:"wakeOnLanEthernetCard,omitempty"`
    +	SupportsPvscsiControllerForBoot         *bool           `xml:"supportsPvscsiControllerForBoot"`
    +	DiskUuidEnabled                         *bool           `xml:"diskUuidEnabled"`
    +	SupportsHotPlugPCI                      *bool           `xml:"supportsHotPlugPCI"`
    +	SupportsSecureBoot                      *bool           `xml:"supportsSecureBoot"`
    +	DefaultSecureBoot                       *bool           `xml:"defaultSecureBoot"`
    +	PersistentMemorySupported               *bool           `xml:"persistentMemorySupported"`
    +	SupportedMinPersistentMemoryMB          int64           `xml:"supportedMinPersistentMemoryMB,omitempty"`
    +	SupportedMaxPersistentMemoryMB          int64           `xml:"supportedMaxPersistentMemoryMB,omitempty"`
    +	RecommendedPersistentMemoryMB           int64           `xml:"recommendedPersistentMemoryMB,omitempty"`
    +	PersistentMemoryHotAddSupported         *bool           `xml:"persistentMemoryHotAddSupported"`
    +	PersistentMemoryHotRemoveSupported      *bool           `xml:"persistentMemoryHotRemoveSupported"`
    +	PersistentMemoryColdGrowthSupported     *bool           `xml:"persistentMemoryColdGrowthSupported"`
    +	PersistentMemoryColdGrowthGranularityMB int64           `xml:"persistentMemoryColdGrowthGranularityMB,omitempty"`
    +	PersistentMemoryHotGrowthSupported      *bool           `xml:"persistentMemoryHotGrowthSupported"`
    +	PersistentMemoryHotGrowthGranularityMB  int64           `xml:"persistentMemoryHotGrowthGranularityMB,omitempty"`
    +	NumRecommendedPhysicalSockets           int32           `xml:"numRecommendedPhysicalSockets,omitempty"`
    +	NumRecommendedCoresPerSocket            int32           `xml:"numRecommendedCoresPerSocket,omitempty"`
    +	VvtdSupported                           *BoolOption     `xml:"vvtdSupported,omitempty"`
    +	VbsSupported                            *BoolOption     `xml:"vbsSupported,omitempty"`
    +	SupportsTPM20                           *bool           `xml:"supportsTPM20"`
    +}
    +
    +func init() {
    +	t["GuestOsDescriptor"] = reflect.TypeOf((*GuestOsDescriptor)(nil)).Elem()
    +}
    +
    +type GuestPermissionDenied struct {
    +	GuestOperationsFault
    +}
    +
    +func init() {
    +	t["GuestPermissionDenied"] = reflect.TypeOf((*GuestPermissionDenied)(nil)).Elem()
    +}
    +
    +type GuestPermissionDeniedFault GuestPermissionDenied
    +
    +func init() {
    +	t["GuestPermissionDeniedFault"] = reflect.TypeOf((*GuestPermissionDeniedFault)(nil)).Elem()
    +}
    +
    +type GuestPosixFileAttributes struct {
    +	GuestFileAttributes
    +
    +	OwnerId     *int32 `xml:"ownerId"`
    +	GroupId     *int32 `xml:"groupId"`
    +	Permissions int64  `xml:"permissions,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestPosixFileAttributes"] = reflect.TypeOf((*GuestPosixFileAttributes)(nil)).Elem()
    +}
    +
    +type GuestProcessInfo struct {
    +	DynamicData
    +
    +	Name      string     `xml:"name"`
    +	Pid       int64      `xml:"pid"`
    +	Owner     string     `xml:"owner"`
    +	CmdLine   string     `xml:"cmdLine"`
    +	StartTime time.Time  `xml:"startTime"`
    +	EndTime   *time.Time `xml:"endTime"`
    +	ExitCode  int32      `xml:"exitCode,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestProcessInfo"] = reflect.TypeOf((*GuestProcessInfo)(nil)).Elem()
    +}
    +
    +type GuestProcessNotFound struct {
    +	GuestOperationsFault
    +
    +	Pid int64 `xml:"pid"`
    +}
    +
    +func init() {
    +	t["GuestProcessNotFound"] = reflect.TypeOf((*GuestProcessNotFound)(nil)).Elem()
    +}
    +
    +type GuestProcessNotFoundFault GuestProcessNotFound
    +
    +func init() {
    +	t["GuestProcessNotFoundFault"] = reflect.TypeOf((*GuestProcessNotFoundFault)(nil)).Elem()
    +}
    +
    +type GuestProgramSpec struct {
    +	DynamicData
    +
    +	ProgramPath      string   `xml:"programPath"`
    +	Arguments        string   `xml:"arguments"`
    +	WorkingDirectory string   `xml:"workingDirectory,omitempty"`
    +	EnvVariables     []string `xml:"envVariables,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestProgramSpec"] = reflect.TypeOf((*GuestProgramSpec)(nil)).Elem()
    +}
    +
    +type GuestRegKeyNameSpec struct {
    +	DynamicData
    +
    +	RegistryPath string `xml:"registryPath"`
    +	WowBitness   string `xml:"wowBitness"`
    +}
    +
    +func init() {
    +	t["GuestRegKeyNameSpec"] = reflect.TypeOf((*GuestRegKeyNameSpec)(nil)).Elem()
    +}
    +
    +type GuestRegKeyRecordSpec struct {
    +	DynamicData
    +
    +	Key   GuestRegKeySpec       `xml:"key"`
    +	Fault *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestRegKeyRecordSpec"] = reflect.TypeOf((*GuestRegKeyRecordSpec)(nil)).Elem()
    +}
    +
    +type GuestRegKeySpec struct {
    +	DynamicData
    +
    +	KeyName     GuestRegKeyNameSpec `xml:"keyName"`
    +	ClassType   string              `xml:"classType"`
    +	LastWritten time.Time           `xml:"lastWritten"`
    +}
    +
    +func init() {
    +	t["GuestRegKeySpec"] = reflect.TypeOf((*GuestRegKeySpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueBinarySpec struct {
    +	GuestRegValueDataSpec
    +
    +	Value []byte `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestRegValueBinarySpec"] = reflect.TypeOf((*GuestRegValueBinarySpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueDataSpec struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["GuestRegValueDataSpec"] = reflect.TypeOf((*GuestRegValueDataSpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueDwordSpec struct {
    +	GuestRegValueDataSpec
    +
    +	Value int32 `xml:"value"`
    +}
    +
    +func init() {
    +	t["GuestRegValueDwordSpec"] = reflect.TypeOf((*GuestRegValueDwordSpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueExpandStringSpec struct {
    +	GuestRegValueDataSpec
    +
    +	Value string `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestRegValueExpandStringSpec"] = reflect.TypeOf((*GuestRegValueExpandStringSpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueMultiStringSpec struct {
    +	GuestRegValueDataSpec
    +
    +	Value []string `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestRegValueMultiStringSpec"] = reflect.TypeOf((*GuestRegValueMultiStringSpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueNameSpec struct {
    +	DynamicData
    +
    +	KeyName GuestRegKeyNameSpec `xml:"keyName"`
    +	Name    string              `xml:"name"`
    +}
    +
    +func init() {
    +	t["GuestRegValueNameSpec"] = reflect.TypeOf((*GuestRegValueNameSpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueQwordSpec struct {
    +	GuestRegValueDataSpec
    +
    +	Value int64 `xml:"value"`
    +}
    +
    +func init() {
    +	t["GuestRegValueQwordSpec"] = reflect.TypeOf((*GuestRegValueQwordSpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueSpec struct {
    +	DynamicData
    +
    +	Name GuestRegValueNameSpec     `xml:"name"`
    +	Data BaseGuestRegValueDataSpec `xml:"data,typeattr"`
    +}
    +
    +func init() {
    +	t["GuestRegValueSpec"] = reflect.TypeOf((*GuestRegValueSpec)(nil)).Elem()
    +}
    +
    +type GuestRegValueStringSpec struct {
    +	GuestRegValueDataSpec
    +
    +	Value string `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestRegValueStringSpec"] = reflect.TypeOf((*GuestRegValueStringSpec)(nil)).Elem()
    +}
    +
    +type GuestRegistryFault struct {
    +	GuestOperationsFault
    +
    +	WindowsSystemErrorCode int64 `xml:"windowsSystemErrorCode"`
    +}
    +
    +func init() {
    +	t["GuestRegistryFault"] = reflect.TypeOf((*GuestRegistryFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryFaultFault BaseGuestRegistryFault
    +
    +func init() {
    +	t["GuestRegistryFaultFault"] = reflect.TypeOf((*GuestRegistryFaultFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyAlreadyExists struct {
    +	GuestRegistryKeyFault
    +}
    +
    +func init() {
    +	t["GuestRegistryKeyAlreadyExists"] = reflect.TypeOf((*GuestRegistryKeyAlreadyExists)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyAlreadyExistsFault GuestRegistryKeyAlreadyExists
    +
    +func init() {
    +	t["GuestRegistryKeyAlreadyExistsFault"] = reflect.TypeOf((*GuestRegistryKeyAlreadyExistsFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyFault struct {
    +	GuestRegistryFault
    +
    +	KeyName string `xml:"keyName"`
    +}
    +
    +func init() {
    +	t["GuestRegistryKeyFault"] = reflect.TypeOf((*GuestRegistryKeyFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyFaultFault BaseGuestRegistryKeyFault
    +
    +func init() {
    +	t["GuestRegistryKeyFaultFault"] = reflect.TypeOf((*GuestRegistryKeyFaultFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyHasSubkeys struct {
    +	GuestRegistryKeyFault
    +}
    +
    +func init() {
    +	t["GuestRegistryKeyHasSubkeys"] = reflect.TypeOf((*GuestRegistryKeyHasSubkeys)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyHasSubkeysFault GuestRegistryKeyHasSubkeys
    +
    +func init() {
    +	t["GuestRegistryKeyHasSubkeysFault"] = reflect.TypeOf((*GuestRegistryKeyHasSubkeysFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyInvalid struct {
    +	GuestRegistryKeyFault
    +}
    +
    +func init() {
    +	t["GuestRegistryKeyInvalid"] = reflect.TypeOf((*GuestRegistryKeyInvalid)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyInvalidFault GuestRegistryKeyInvalid
    +
    +func init() {
    +	t["GuestRegistryKeyInvalidFault"] = reflect.TypeOf((*GuestRegistryKeyInvalidFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyParentVolatile struct {
    +	GuestRegistryKeyFault
    +}
    +
    +func init() {
    +	t["GuestRegistryKeyParentVolatile"] = reflect.TypeOf((*GuestRegistryKeyParentVolatile)(nil)).Elem()
    +}
    +
    +type GuestRegistryKeyParentVolatileFault GuestRegistryKeyParentVolatile
    +
    +func init() {
    +	t["GuestRegistryKeyParentVolatileFault"] = reflect.TypeOf((*GuestRegistryKeyParentVolatileFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryValueFault struct {
    +	GuestRegistryFault
    +
    +	KeyName   string `xml:"keyName"`
    +	ValueName string `xml:"valueName"`
    +}
    +
    +func init() {
    +	t["GuestRegistryValueFault"] = reflect.TypeOf((*GuestRegistryValueFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryValueFaultFault BaseGuestRegistryValueFault
    +
    +func init() {
    +	t["GuestRegistryValueFaultFault"] = reflect.TypeOf((*GuestRegistryValueFaultFault)(nil)).Elem()
    +}
    +
    +type GuestRegistryValueNotFound struct {
    +	GuestRegistryValueFault
    +}
    +
    +func init() {
    +	t["GuestRegistryValueNotFound"] = reflect.TypeOf((*GuestRegistryValueNotFound)(nil)).Elem()
    +}
    +
    +type GuestRegistryValueNotFoundFault GuestRegistryValueNotFound
    +
    +func init() {
    +	t["GuestRegistryValueNotFoundFault"] = reflect.TypeOf((*GuestRegistryValueNotFoundFault)(nil)).Elem()
    +}
    +
    +type GuestScreenInfo struct {
    +	DynamicData
    +
    +	Width  int32 `xml:"width"`
    +	Height int32 `xml:"height"`
    +}
    +
    +func init() {
    +	t["GuestScreenInfo"] = reflect.TypeOf((*GuestScreenInfo)(nil)).Elem()
    +}
    +
    +type GuestStackInfo struct {
    +	DynamicData
    +
    +	DnsConfig     *NetDnsConfigInfo     `xml:"dnsConfig,omitempty"`
    +	IpRouteConfig *NetIpRouteConfigInfo `xml:"ipRouteConfig,omitempty"`
    +	IpStackConfig []KeyValue            `xml:"ipStackConfig,omitempty"`
    +	DhcpConfig    *NetDhcpConfigInfo    `xml:"dhcpConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["GuestStackInfo"] = reflect.TypeOf((*GuestStackInfo)(nil)).Elem()
    +}
    +
    +type GuestWindowsFileAttributes struct {
    +	GuestFileAttributes
    +
    +	Hidden     *bool      `xml:"hidden"`
    +	ReadOnly   *bool      `xml:"readOnly"`
    +	CreateTime *time.Time `xml:"createTime"`
    +}
    +
    +func init() {
    +	t["GuestWindowsFileAttributes"] = reflect.TypeOf((*GuestWindowsFileAttributes)(nil)).Elem()
    +}
    +
    +type GuestWindowsProgramSpec struct {
    +	GuestProgramSpec
    +
    +	StartMinimized bool `xml:"startMinimized"`
    +}
    +
    +func init() {
    +	t["GuestWindowsProgramSpec"] = reflect.TypeOf((*GuestWindowsProgramSpec)(nil)).Elem()
    +}
    +
    +type HAErrorsAtDest struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["HAErrorsAtDest"] = reflect.TypeOf((*HAErrorsAtDest)(nil)).Elem()
    +}
    +
    +type HAErrorsAtDestFault HAErrorsAtDest
    +
    +func init() {
    +	t["HAErrorsAtDestFault"] = reflect.TypeOf((*HAErrorsAtDestFault)(nil)).Elem()
    +}
    +
    +type HasMonitoredEntity HasMonitoredEntityRequestType
    +
    +func init() {
    +	t["HasMonitoredEntity"] = reflect.TypeOf((*HasMonitoredEntity)(nil)).Elem()
    +}
    +
    +type HasMonitoredEntityRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +	Entity     ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["HasMonitoredEntityRequestType"] = reflect.TypeOf((*HasMonitoredEntityRequestType)(nil)).Elem()
    +}
    +
    +type HasMonitoredEntityResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type HasPrivilegeOnEntities HasPrivilegeOnEntitiesRequestType
    +
    +func init() {
    +	t["HasPrivilegeOnEntities"] = reflect.TypeOf((*HasPrivilegeOnEntities)(nil)).Elem()
    +}
    +
    +type HasPrivilegeOnEntitiesRequestType struct {
    +	This      ManagedObjectReference   `xml:"_this"`
    +	Entity    []ManagedObjectReference `xml:"entity"`
    +	SessionId string                   `xml:"sessionId"`
    +	PrivId    []string                 `xml:"privId,omitempty"`
    +}
    +
    +func init() {
    +	t["HasPrivilegeOnEntitiesRequestType"] = reflect.TypeOf((*HasPrivilegeOnEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type HasPrivilegeOnEntitiesResponse struct {
    +	Returnval []EntityPrivilege `xml:"returnval,omitempty"`
    +}
    +
    +type HasPrivilegeOnEntity HasPrivilegeOnEntityRequestType
    +
    +func init() {
    +	t["HasPrivilegeOnEntity"] = reflect.TypeOf((*HasPrivilegeOnEntity)(nil)).Elem()
    +}
    +
    +type HasPrivilegeOnEntityRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Entity    ManagedObjectReference `xml:"entity"`
    +	SessionId string                 `xml:"sessionId"`
    +	PrivId    []string               `xml:"privId,omitempty"`
    +}
    +
    +func init() {
    +	t["HasPrivilegeOnEntityRequestType"] = reflect.TypeOf((*HasPrivilegeOnEntityRequestType)(nil)).Elem()
    +}
    +
    +type HasPrivilegeOnEntityResponse struct {
    +	Returnval []bool `xml:"returnval,omitempty"`
    +}
    +
    +type HasProvider HasProviderRequestType
    +
    +func init() {
    +	t["HasProvider"] = reflect.TypeOf((*HasProvider)(nil)).Elem()
    +}
    +
    +type HasProviderRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   string                 `xml:"id"`
    +}
    +
    +func init() {
    +	t["HasProviderRequestType"] = reflect.TypeOf((*HasProviderRequestType)(nil)).Elem()
    +}
    +
    +type HasProviderResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type HasUserPrivilegeOnEntities HasUserPrivilegeOnEntitiesRequestType
    +
    +func init() {
    +	t["HasUserPrivilegeOnEntities"] = reflect.TypeOf((*HasUserPrivilegeOnEntities)(nil)).Elem()
    +}
    +
    +type HasUserPrivilegeOnEntitiesRequestType struct {
    +	This     ManagedObjectReference   `xml:"_this"`
    +	Entities []ManagedObjectReference `xml:"entities"`
    +	UserName string                   `xml:"userName"`
    +	PrivId   []string                 `xml:"privId,omitempty"`
    +}
    +
    +func init() {
    +	t["HasUserPrivilegeOnEntitiesRequestType"] = reflect.TypeOf((*HasUserPrivilegeOnEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type HasUserPrivilegeOnEntitiesResponse struct {
    +	Returnval []EntityPrivilege `xml:"returnval,omitempty"`
    +}
    +
    +type HbrDiskMigrationAction struct {
    +	ClusterAction
    +
    +	CollectionId       string                 `xml:"collectionId"`
    +	CollectionName     string                 `xml:"collectionName"`
    +	DiskIds            []string               `xml:"diskIds"`
    +	Source             ManagedObjectReference `xml:"source"`
    +	Destination        ManagedObjectReference `xml:"destination"`
    +	SizeTransferred    int64                  `xml:"sizeTransferred"`
    +	SpaceUtilSrcBefore float32                `xml:"spaceUtilSrcBefore,omitempty"`
    +	SpaceUtilDstBefore float32                `xml:"spaceUtilDstBefore,omitempty"`
    +	SpaceUtilSrcAfter  float32                `xml:"spaceUtilSrcAfter,omitempty"`
    +	SpaceUtilDstAfter  float32                `xml:"spaceUtilDstAfter,omitempty"`
    +	IoLatencySrcBefore float32                `xml:"ioLatencySrcBefore,omitempty"`
    +	IoLatencyDstBefore float32                `xml:"ioLatencyDstBefore,omitempty"`
    +}
    +
    +func init() {
    +	t["HbrDiskMigrationAction"] = reflect.TypeOf((*HbrDiskMigrationAction)(nil)).Elem()
    +}
    +
    +type HbrManagerReplicationVmInfo struct {
    +	DynamicData
    +
    +	State        string                     `xml:"state"`
    +	ProgressInfo *ReplicationVmProgressInfo `xml:"progressInfo,omitempty"`
    +	ImageId      string                     `xml:"imageId,omitempty"`
    +	LastError    *LocalizedMethodFault      `xml:"lastError,omitempty"`
    +}
    +
    +func init() {
    +	t["HbrManagerReplicationVmInfo"] = reflect.TypeOf((*HbrManagerReplicationVmInfo)(nil)).Elem()
    +}
    +
    +type HbrManagerVmReplicationCapability struct {
    +	DynamicData
    +
    +	Vm                             ManagedObjectReference `xml:"vm"`
    +	SupportedQuiesceMode           string                 `xml:"supportedQuiesceMode"`
    +	CompressionSupported           bool                   `xml:"compressionSupported"`
    +	MaxSupportedSourceDiskCapacity int64                  `xml:"maxSupportedSourceDiskCapacity"`
    +	MinRpo                         int64                  `xml:"minRpo,omitempty"`
    +	Fault                          *LocalizedMethodFault  `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["HbrManagerVmReplicationCapability"] = reflect.TypeOf((*HbrManagerVmReplicationCapability)(nil)).Elem()
    +}
    +
    +type HealthStatusChangedEvent struct {
    +	Event
    +
    +	ComponentId   string `xml:"componentId"`
    +	OldStatus     string `xml:"oldStatus"`
    +	NewStatus     string `xml:"newStatus"`
    +	ComponentName string `xml:"componentName"`
    +	ServiceId     string `xml:"serviceId,omitempty"`
    +}
    +
    +func init() {
    +	t["HealthStatusChangedEvent"] = reflect.TypeOf((*HealthStatusChangedEvent)(nil)).Elem()
    +}
    +
    +type HealthSystemRuntime struct {
    +	DynamicData
    +
    +	SystemHealthInfo   *HostSystemHealthInfo   `xml:"systemHealthInfo,omitempty"`
    +	HardwareStatusInfo *HostHardwareStatusInfo `xml:"hardwareStatusInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["HealthSystemRuntime"] = reflect.TypeOf((*HealthSystemRuntime)(nil)).Elem()
    +}
    +
    +type HealthUpdate struct {
    +	DynamicData
    +
    +	Entity             ManagedObjectReference `xml:"entity"`
    +	HealthUpdateInfoId string                 `xml:"healthUpdateInfoId"`
    +	Id                 string                 `xml:"id"`
    +	Status             ManagedEntityStatus    `xml:"status"`
    +	Remediation        string                 `xml:"remediation"`
    +}
    +
    +func init() {
    +	t["HealthUpdate"] = reflect.TypeOf((*HealthUpdate)(nil)).Elem()
    +}
    +
    +type HealthUpdateInfo struct {
    +	DynamicData
    +
    +	Id            string `xml:"id"`
    +	ComponentType string `xml:"componentType"`
    +	Description   string `xml:"description"`
    +}
    +
    +func init() {
    +	t["HealthUpdateInfo"] = reflect.TypeOf((*HealthUpdateInfo)(nil)).Elem()
    +}
    +
    +type HeterogenousHostsBlockingEVC struct {
    +	EVCConfigFault
    +}
    +
    +func init() {
    +	t["HeterogenousHostsBlockingEVC"] = reflect.TypeOf((*HeterogenousHostsBlockingEVC)(nil)).Elem()
    +}
    +
    +type HeterogenousHostsBlockingEVCFault HeterogenousHostsBlockingEVC
    +
    +func init() {
    +	t["HeterogenousHostsBlockingEVCFault"] = reflect.TypeOf((*HeterogenousHostsBlockingEVCFault)(nil)).Elem()
    +}
    +
    +type HostAccessControlEntry struct {
    +	DynamicData
    +
    +	Principal  string         `xml:"principal"`
    +	Group      bool           `xml:"group"`
    +	AccessMode HostAccessMode `xml:"accessMode"`
    +}
    +
    +func init() {
    +	t["HostAccessControlEntry"] = reflect.TypeOf((*HostAccessControlEntry)(nil)).Elem()
    +}
    +
    +type HostAccessRestrictedToManagementServer struct {
    +	NotSupported
    +
    +	ManagementServer string `xml:"managementServer"`
    +}
    +
    +func init() {
    +	t["HostAccessRestrictedToManagementServer"] = reflect.TypeOf((*HostAccessRestrictedToManagementServer)(nil)).Elem()
    +}
    +
    +type HostAccessRestrictedToManagementServerFault HostAccessRestrictedToManagementServer
    +
    +func init() {
    +	t["HostAccessRestrictedToManagementServerFault"] = reflect.TypeOf((*HostAccessRestrictedToManagementServerFault)(nil)).Elem()
    +}
    +
    +type HostAccountSpec struct {
    +	DynamicData
    +
    +	Id          string `xml:"id"`
    +	Password    string `xml:"password,omitempty"`
    +	Description string `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["HostAccountSpec"] = reflect.TypeOf((*HostAccountSpec)(nil)).Elem()
    +}
    +
    +type HostActiveDirectory struct {
    +	DynamicData
    +
    +	ChangeOperation string                   `xml:"changeOperation"`
    +	Spec            *HostActiveDirectorySpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostActiveDirectory"] = reflect.TypeOf((*HostActiveDirectory)(nil)).Elem()
    +}
    +
    +type HostActiveDirectoryInfo struct {
    +	HostDirectoryStoreInfo
    +
    +	JoinedDomain                   string   `xml:"joinedDomain,omitempty"`
    +	TrustedDomain                  []string `xml:"trustedDomain,omitempty"`
    +	DomainMembershipStatus         string   `xml:"domainMembershipStatus,omitempty"`
    +	SmartCardAuthenticationEnabled *bool    `xml:"smartCardAuthenticationEnabled"`
    +}
    +
    +func init() {
    +	t["HostActiveDirectoryInfo"] = reflect.TypeOf((*HostActiveDirectoryInfo)(nil)).Elem()
    +}
    +
    +type HostActiveDirectorySpec struct {
    +	DynamicData
    +
    +	DomainName                     string   `xml:"domainName,omitempty"`
    +	UserName                       string   `xml:"userName,omitempty"`
    +	Password                       string   `xml:"password,omitempty"`
    +	CamServer                      string   `xml:"camServer,omitempty"`
    +	Thumbprint                     string   `xml:"thumbprint,omitempty"`
    +	SmartCardAuthenticationEnabled *bool    `xml:"smartCardAuthenticationEnabled"`
    +	SmartCardTrustAnchors          []string `xml:"smartCardTrustAnchors,omitempty"`
    +}
    +
    +func init() {
    +	t["HostActiveDirectorySpec"] = reflect.TypeOf((*HostActiveDirectorySpec)(nil)).Elem()
    +}
    +
    +type HostAddFailedEvent struct {
    +	HostEvent
    +
    +	Hostname string `xml:"hostname"`
    +}
    +
    +func init() {
    +	t["HostAddFailedEvent"] = reflect.TypeOf((*HostAddFailedEvent)(nil)).Elem()
    +}
    +
    +type HostAddedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostAddedEvent"] = reflect.TypeOf((*HostAddedEvent)(nil)).Elem()
    +}
    +
    +type HostAdminDisableEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostAdminDisableEvent"] = reflect.TypeOf((*HostAdminDisableEvent)(nil)).Elem()
    +}
    +
    +type HostAdminEnableEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostAdminEnableEvent"] = reflect.TypeOf((*HostAdminEnableEvent)(nil)).Elem()
    +}
    +
    +type HostApplyProfile struct {
    +	ApplyProfile
    +
    +	Memory           *HostMemoryProfile     `xml:"memory,omitempty"`
    +	Storage          *StorageProfile        `xml:"storage,omitempty"`
    +	Network          *NetworkProfile        `xml:"network,omitempty"`
    +	Datetime         *DateTimeProfile       `xml:"datetime,omitempty"`
    +	Firewall         *FirewallProfile       `xml:"firewall,omitempty"`
    +	Security         *SecurityProfile       `xml:"security,omitempty"`
    +	Service          []ServiceProfile       `xml:"service,omitempty"`
    +	Option           []OptionProfile        `xml:"option,omitempty"`
    +	UserAccount      []UserProfile          `xml:"userAccount,omitempty"`
    +	UsergroupAccount []UserGroupProfile     `xml:"usergroupAccount,omitempty"`
    +	Authentication   *AuthenticationProfile `xml:"authentication,omitempty"`
    +}
    +
    +func init() {
    +	t["HostApplyProfile"] = reflect.TypeOf((*HostApplyProfile)(nil)).Elem()
    +}
    +
    +type HostAuthenticationManagerInfo struct {
    +	DynamicData
    +
    +	AuthConfig []BaseHostAuthenticationStoreInfo `xml:"authConfig,typeattr"`
    +}
    +
    +func init() {
    +	t["HostAuthenticationManagerInfo"] = reflect.TypeOf((*HostAuthenticationManagerInfo)(nil)).Elem()
    +}
    +
    +type HostAuthenticationStoreInfo struct {
    +	DynamicData
    +
    +	Enabled bool `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["HostAuthenticationStoreInfo"] = reflect.TypeOf((*HostAuthenticationStoreInfo)(nil)).Elem()
    +}
    +
    +type HostAutoStartManagerConfig struct {
    +	DynamicData
    +
    +	Defaults  *AutoStartDefaults   `xml:"defaults,omitempty"`
    +	PowerInfo []AutoStartPowerInfo `xml:"powerInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["HostAutoStartManagerConfig"] = reflect.TypeOf((*HostAutoStartManagerConfig)(nil)).Elem()
    +}
    +
    +type HostBIOSInfo struct {
    +	DynamicData
    +
    +	BiosVersion          string     `xml:"biosVersion,omitempty"`
    +	ReleaseDate          *time.Time `xml:"releaseDate"`
    +	Vendor               string     `xml:"vendor,omitempty"`
    +	MajorRelease         int32      `xml:"majorRelease,omitempty"`
    +	MinorRelease         int32      `xml:"minorRelease,omitempty"`
    +	FirmwareMajorRelease int32      `xml:"firmwareMajorRelease,omitempty"`
    +	FirmwareMinorRelease int32      `xml:"firmwareMinorRelease,omitempty"`
    +}
    +
    +func init() {
    +	t["HostBIOSInfo"] = reflect.TypeOf((*HostBIOSInfo)(nil)).Elem()
    +}
    +
    +type HostBlockAdapterTargetTransport struct {
    +	HostTargetTransport
    +}
    +
    +func init() {
    +	t["HostBlockAdapterTargetTransport"] = reflect.TypeOf((*HostBlockAdapterTargetTransport)(nil)).Elem()
    +}
    +
    +type HostBlockHba struct {
    +	HostHostBusAdapter
    +}
    +
    +func init() {
    +	t["HostBlockHba"] = reflect.TypeOf((*HostBlockHba)(nil)).Elem()
    +}
    +
    +type HostBootDevice struct {
    +	DynamicData
    +
    +	Key         string `xml:"key"`
    +	Description string `xml:"description"`
    +}
    +
    +func init() {
    +	t["HostBootDevice"] = reflect.TypeOf((*HostBootDevice)(nil)).Elem()
    +}
    +
    +type HostBootDeviceInfo struct {
    +	DynamicData
    +
    +	BootDevices          []HostBootDevice `xml:"bootDevices,omitempty"`
    +	CurrentBootDeviceKey string           `xml:"currentBootDeviceKey,omitempty"`
    +}
    +
    +func init() {
    +	t["HostBootDeviceInfo"] = reflect.TypeOf((*HostBootDeviceInfo)(nil)).Elem()
    +}
    +
    +type HostCacheConfigurationInfo struct {
    +	DynamicData
    +
    +	Key      ManagedObjectReference `xml:"key"`
    +	SwapSize int64                  `xml:"swapSize"`
    +}
    +
    +func init() {
    +	t["HostCacheConfigurationInfo"] = reflect.TypeOf((*HostCacheConfigurationInfo)(nil)).Elem()
    +}
    +
    +type HostCacheConfigurationSpec struct {
    +	DynamicData
    +
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	SwapSize  int64                  `xml:"swapSize"`
    +}
    +
    +func init() {
    +	t["HostCacheConfigurationSpec"] = reflect.TypeOf((*HostCacheConfigurationSpec)(nil)).Elem()
    +}
    +
    +type HostCapability struct {
    +	DynamicData
    +
    +	RecursiveResourcePoolsSupported           bool            `xml:"recursiveResourcePoolsSupported"`
    +	CpuMemoryResourceConfigurationSupported   bool            `xml:"cpuMemoryResourceConfigurationSupported"`
    +	RebootSupported                           bool            `xml:"rebootSupported"`
    +	ShutdownSupported                         bool            `xml:"shutdownSupported"`
    +	VmotionSupported                          bool            `xml:"vmotionSupported"`
    +	StandbySupported                          bool            `xml:"standbySupported"`
    +	IpmiSupported                             *bool           `xml:"ipmiSupported"`
    +	MaxSupportedVMs                           int32           `xml:"maxSupportedVMs,omitempty"`
    +	MaxRunningVMs                             int32           `xml:"maxRunningVMs,omitempty"`
    +	MaxSupportedVcpus                         int32           `xml:"maxSupportedVcpus,omitempty"`
    +	MaxRegisteredVMs                          int32           `xml:"maxRegisteredVMs,omitempty"`
    +	DatastorePrincipalSupported               bool            `xml:"datastorePrincipalSupported"`
    +	SanSupported                              bool            `xml:"sanSupported"`
    +	NfsSupported                              bool            `xml:"nfsSupported"`
    +	IscsiSupported                            bool            `xml:"iscsiSupported"`
    +	VlanTaggingSupported                      bool            `xml:"vlanTaggingSupported"`
    +	NicTeamingSupported                       bool            `xml:"nicTeamingSupported"`
    +	HighGuestMemSupported                     bool            `xml:"highGuestMemSupported"`
    +	MaintenanceModeSupported                  bool            `xml:"maintenanceModeSupported"`
    +	SuspendedRelocateSupported                bool            `xml:"suspendedRelocateSupported"`
    +	RestrictedSnapshotRelocateSupported       bool            `xml:"restrictedSnapshotRelocateSupported"`
    +	PerVmSwapFiles                            bool            `xml:"perVmSwapFiles"`
    +	LocalSwapDatastoreSupported               bool            `xml:"localSwapDatastoreSupported"`
    +	UnsharedSwapVMotionSupported              bool            `xml:"unsharedSwapVMotionSupported"`
    +	BackgroundSnapshotsSupported              bool            `xml:"backgroundSnapshotsSupported"`
    +	PreAssignedPCIUnitNumbersSupported        bool            `xml:"preAssignedPCIUnitNumbersSupported"`
    +	ScreenshotSupported                       bool            `xml:"screenshotSupported"`
    +	ScaledScreenshotSupported                 bool            `xml:"scaledScreenshotSupported"`
    +	StorageVMotionSupported                   *bool           `xml:"storageVMotionSupported"`
    +	VmotionWithStorageVMotionSupported        *bool           `xml:"vmotionWithStorageVMotionSupported"`
    +	VmotionAcrossNetworkSupported             *bool           `xml:"vmotionAcrossNetworkSupported"`
    +	MaxNumDisksSVMotion                       int32           `xml:"maxNumDisksSVMotion,omitempty"`
    +	HbrNicSelectionSupported                  *bool           `xml:"hbrNicSelectionSupported"`
    +	VrNfcNicSelectionSupported                *bool           `xml:"vrNfcNicSelectionSupported"`
    +	RecordReplaySupported                     *bool           `xml:"recordReplaySupported"`
    +	FtSupported                               *bool           `xml:"ftSupported"`
    +	ReplayUnsupportedReason                   string          `xml:"replayUnsupportedReason,omitempty"`
    +	ReplayCompatibilityIssues                 []string        `xml:"replayCompatibilityIssues,omitempty"`
    +	SmpFtSupported                            *bool           `xml:"smpFtSupported"`
    +	FtCompatibilityIssues                     []string        `xml:"ftCompatibilityIssues,omitempty"`
    +	SmpFtCompatibilityIssues                  []string        `xml:"smpFtCompatibilityIssues,omitempty"`
    +	MaxVcpusPerFtVm                           int32           `xml:"maxVcpusPerFtVm,omitempty"`
    +	LoginBySSLThumbprintSupported             *bool           `xml:"loginBySSLThumbprintSupported"`
    +	CloneFromSnapshotSupported                *bool           `xml:"cloneFromSnapshotSupported"`
    +	DeltaDiskBackingsSupported                *bool           `xml:"deltaDiskBackingsSupported"`
    +	PerVMNetworkTrafficShapingSupported       *bool           `xml:"perVMNetworkTrafficShapingSupported"`
    +	TpmSupported                              *bool           `xml:"tpmSupported"`
    +	TpmVersion                                string          `xml:"tpmVersion,omitempty"`
    +	TxtEnabled                                *bool           `xml:"txtEnabled"`
    +	SupportedCpuFeature                       []HostCpuIdInfo `xml:"supportedCpuFeature,omitempty"`
    +	VirtualExecUsageSupported                 *bool           `xml:"virtualExecUsageSupported"`
    +	StorageIORMSupported                      *bool           `xml:"storageIORMSupported"`
    +	VmDirectPathGen2Supported                 *bool           `xml:"vmDirectPathGen2Supported"`
    +	VmDirectPathGen2UnsupportedReason         []string        `xml:"vmDirectPathGen2UnsupportedReason,omitempty"`
    +	VmDirectPathGen2UnsupportedReasonExtended string          `xml:"vmDirectPathGen2UnsupportedReasonExtended,omitempty"`
    +	SupportedVmfsMajorVersion                 []int32         `xml:"supportedVmfsMajorVersion,omitempty"`
    +	VStorageCapable                           *bool           `xml:"vStorageCapable"`
    +	SnapshotRelayoutSupported                 *bool           `xml:"snapshotRelayoutSupported"`
    +	FirewallIpRulesSupported                  *bool           `xml:"firewallIpRulesSupported"`
    +	ServicePackageInfoSupported               *bool           `xml:"servicePackageInfoSupported"`
    +	MaxHostRunningVms                         int32           `xml:"maxHostRunningVms,omitempty"`
    +	MaxHostSupportedVcpus                     int32           `xml:"maxHostSupportedVcpus,omitempty"`
    +	VmfsDatastoreMountCapable                 *bool           `xml:"vmfsDatastoreMountCapable"`
    +	EightPlusHostVmfsSharedAccessSupported    *bool           `xml:"eightPlusHostVmfsSharedAccessSupported"`
    +	NestedHVSupported                         *bool           `xml:"nestedHVSupported"`
    +	VPMCSupported                             *bool           `xml:"vPMCSupported"`
    +	InterVMCommunicationThroughVMCISupported  *bool           `xml:"interVMCommunicationThroughVMCISupported"`
    +	ScheduledHardwareUpgradeSupported         *bool           `xml:"scheduledHardwareUpgradeSupported"`
    +	FeatureCapabilitiesSupported              *bool           `xml:"featureCapabilitiesSupported"`
    +	LatencySensitivitySupported               *bool           `xml:"latencySensitivitySupported"`
    +	StoragePolicySupported                    *bool           `xml:"storagePolicySupported"`
    +	Accel3dSupported                          *bool           `xml:"accel3dSupported"`
    +	ReliableMemoryAware                       *bool           `xml:"reliableMemoryAware"`
    +	MultipleNetworkStackInstanceSupported     *bool           `xml:"multipleNetworkStackInstanceSupported"`
    +	MessageBusProxySupported                  *bool           `xml:"messageBusProxySupported"`
    +	VsanSupported                             *bool           `xml:"vsanSupported"`
    +	VFlashSupported                           *bool           `xml:"vFlashSupported"`
    +	HostAccessManagerSupported                *bool           `xml:"hostAccessManagerSupported"`
    +	ProvisioningNicSelectionSupported         *bool           `xml:"provisioningNicSelectionSupported"`
    +	Nfs41Supported                            *bool           `xml:"nfs41Supported"`
    +	Nfs41Krb5iSupported                       *bool           `xml:"nfs41Krb5iSupported"`
    +	TurnDiskLocatorLedSupported               *bool           `xml:"turnDiskLocatorLedSupported"`
    +	VirtualVolumeDatastoreSupported           *bool           `xml:"virtualVolumeDatastoreSupported"`
    +	MarkAsSsdSupported                        *bool           `xml:"markAsSsdSupported"`
    +	MarkAsLocalSupported                      *bool           `xml:"markAsLocalSupported"`
    +	SmartCardAuthenticationSupported          *bool           `xml:"smartCardAuthenticationSupported"`
    +	PMemSupported                             *bool           `xml:"pMemSupported"`
    +	PMemSnapshotSupported                     *bool           `xml:"pMemSnapshotSupported"`
    +	CryptoSupported                           *bool           `xml:"cryptoSupported"`
    +	OneKVolumeAPIsSupported                   *bool           `xml:"oneKVolumeAPIsSupported"`
    +	GatewayOnNicSupported                     *bool           `xml:"gatewayOnNicSupported"`
    +	UpitSupported                             *bool           `xml:"upitSupported"`
    +	CpuHwMmuSupported                         *bool           `xml:"cpuHwMmuSupported"`
    +	EncryptedVMotionSupported                 *bool           `xml:"encryptedVMotionSupported"`
    +	EncryptionChangeOnAddRemoveSupported      *bool           `xml:"encryptionChangeOnAddRemoveSupported"`
    +	EncryptionHotOperationSupported           *bool           `xml:"encryptionHotOperationSupported"`
    +	EncryptionWithSnapshotsSupported          *bool           `xml:"encryptionWithSnapshotsSupported"`
    +	EncryptionFaultToleranceSupported         *bool           `xml:"encryptionFaultToleranceSupported"`
    +	EncryptionMemorySaveSupported             *bool           `xml:"encryptionMemorySaveSupported"`
    +	EncryptionRDMSupported                    *bool           `xml:"encryptionRDMSupported"`
    +	EncryptionVFlashSupported                 *bool           `xml:"encryptionVFlashSupported"`
    +	EncryptionCBRCSupported                   *bool           `xml:"encryptionCBRCSupported"`
    +	EncryptionHBRSupported                    *bool           `xml:"encryptionHBRSupported"`
    +	FtEfiSupported                            *bool           `xml:"ftEfiSupported"`
    +	UnmapMethodSupported                      string          `xml:"unmapMethodSupported,omitempty"`
    +	MaxMemMBPerFtVm                           int32           `xml:"maxMemMBPerFtVm,omitempty"`
    +	VirtualMmuUsageIgnored                    *bool           `xml:"virtualMmuUsageIgnored"`
    +	VirtualExecUsageIgnored                   *bool           `xml:"virtualExecUsageIgnored"`
    +	VmCreateDateSupported                     *bool           `xml:"vmCreateDateSupported"`
    +	Vmfs3EOLSupported                         *bool           `xml:"vmfs3EOLSupported"`
    +	FtVmcpSupported                           *bool           `xml:"ftVmcpSupported"`
    +}
    +
    +func init() {
    +	t["HostCapability"] = reflect.TypeOf((*HostCapability)(nil)).Elem()
    +}
    +
    +type HostCertificateManagerCertificateInfo struct {
    +	DynamicData
    +
    +	Issuer    string     `xml:"issuer,omitempty"`
    +	NotBefore *time.Time `xml:"notBefore"`
    +	NotAfter  *time.Time `xml:"notAfter"`
    +	Subject   string     `xml:"subject,omitempty"`
    +	Status    string     `xml:"status"`
    +}
    +
    +func init() {
    +	t["HostCertificateManagerCertificateInfo"] = reflect.TypeOf((*HostCertificateManagerCertificateInfo)(nil)).Elem()
    +}
    +
    +type HostClearVStorageObjectControlFlags HostClearVStorageObjectControlFlagsRequestType
    +
    +func init() {
    +	t["HostClearVStorageObjectControlFlags"] = reflect.TypeOf((*HostClearVStorageObjectControlFlags)(nil)).Elem()
    +}
    +
    +type HostClearVStorageObjectControlFlagsRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Id           ID                     `xml:"id"`
    +	Datastore    ManagedObjectReference `xml:"datastore"`
    +	ControlFlags []string               `xml:"controlFlags,omitempty"`
    +}
    +
    +func init() {
    +	t["HostClearVStorageObjectControlFlagsRequestType"] = reflect.TypeOf((*HostClearVStorageObjectControlFlagsRequestType)(nil)).Elem()
    +}
    +
    +type HostClearVStorageObjectControlFlagsResponse struct {
    +}
    +
    +type HostCloneVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	Spec      VslmCloneSpec          `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostCloneVStorageObjectRequestType"] = reflect.TypeOf((*HostCloneVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type HostCloneVStorageObject_Task HostCloneVStorageObjectRequestType
    +
    +func init() {
    +	t["HostCloneVStorageObject_Task"] = reflect.TypeOf((*HostCloneVStorageObject_Task)(nil)).Elem()
    +}
    +
    +type HostCloneVStorageObject_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostCnxFailedAccountFailedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedAccountFailedEvent"] = reflect.TypeOf((*HostCnxFailedAccountFailedEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedAlreadyManagedEvent struct {
    +	HostEvent
    +
    +	ServerName string `xml:"serverName"`
    +}
    +
    +func init() {
    +	t["HostCnxFailedAlreadyManagedEvent"] = reflect.TypeOf((*HostCnxFailedAlreadyManagedEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedBadCcagentEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedBadCcagentEvent"] = reflect.TypeOf((*HostCnxFailedBadCcagentEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedBadUsernameEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedBadUsernameEvent"] = reflect.TypeOf((*HostCnxFailedBadUsernameEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedBadVersionEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedBadVersionEvent"] = reflect.TypeOf((*HostCnxFailedBadVersionEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedCcagentUpgradeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedCcagentUpgradeEvent"] = reflect.TypeOf((*HostCnxFailedCcagentUpgradeEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedEvent"] = reflect.TypeOf((*HostCnxFailedEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedNetworkErrorEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedNetworkErrorEvent"] = reflect.TypeOf((*HostCnxFailedNetworkErrorEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedNoAccessEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedNoAccessEvent"] = reflect.TypeOf((*HostCnxFailedNoAccessEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedNoConnectionEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedNoConnectionEvent"] = reflect.TypeOf((*HostCnxFailedNoConnectionEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedNoLicenseEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedNoLicenseEvent"] = reflect.TypeOf((*HostCnxFailedNoLicenseEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedNotFoundEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedNotFoundEvent"] = reflect.TypeOf((*HostCnxFailedNotFoundEvent)(nil)).Elem()
    +}
    +
    +type HostCnxFailedTimeoutEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCnxFailedTimeoutEvent"] = reflect.TypeOf((*HostCnxFailedTimeoutEvent)(nil)).Elem()
    +}
    +
    +type HostCommunication struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["HostCommunication"] = reflect.TypeOf((*HostCommunication)(nil)).Elem()
    +}
    +
    +type HostCommunicationFault BaseHostCommunication
    +
    +func init() {
    +	t["HostCommunicationFault"] = reflect.TypeOf((*HostCommunicationFault)(nil)).Elem()
    +}
    +
    +type HostComplianceCheckedEvent struct {
    +	HostEvent
    +
    +	Profile ProfileEventArgument `xml:"profile"`
    +}
    +
    +func init() {
    +	t["HostComplianceCheckedEvent"] = reflect.TypeOf((*HostComplianceCheckedEvent)(nil)).Elem()
    +}
    +
    +type HostCompliantEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostCompliantEvent"] = reflect.TypeOf((*HostCompliantEvent)(nil)).Elem()
    +}
    +
    +type HostConfigAppliedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostConfigAppliedEvent"] = reflect.TypeOf((*HostConfigAppliedEvent)(nil)).Elem()
    +}
    +
    +type HostConfigChange struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["HostConfigChange"] = reflect.TypeOf((*HostConfigChange)(nil)).Elem()
    +}
    +
    +type HostConfigFailed struct {
    +	HostConfigFault
    +
    +	Failure []LocalizedMethodFault `xml:"failure"`
    +}
    +
    +func init() {
    +	t["HostConfigFailed"] = reflect.TypeOf((*HostConfigFailed)(nil)).Elem()
    +}
    +
    +type HostConfigFailedFault HostConfigFailed
    +
    +func init() {
    +	t["HostConfigFailedFault"] = reflect.TypeOf((*HostConfigFailedFault)(nil)).Elem()
    +}
    +
    +type HostConfigFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["HostConfigFault"] = reflect.TypeOf((*HostConfigFault)(nil)).Elem()
    +}
    +
    +type HostConfigFaultFault BaseHostConfigFault
    +
    +func init() {
    +	t["HostConfigFaultFault"] = reflect.TypeOf((*HostConfigFaultFault)(nil)).Elem()
    +}
    +
    +type HostConfigInfo struct {
    +	DynamicData
    +
    +	Host                      ManagedObjectReference               `xml:"host"`
    +	Product                   AboutInfo                            `xml:"product"`
    +	DeploymentInfo            *HostDeploymentInfo                  `xml:"deploymentInfo,omitempty"`
    +	HyperThread               *HostHyperThreadScheduleInfo         `xml:"hyperThread,omitempty"`
    +	ConsoleReservation        *ServiceConsoleReservationInfo       `xml:"consoleReservation,omitempty"`
    +	VirtualMachineReservation *VirtualMachineMemoryReservationInfo `xml:"virtualMachineReservation,omitempty"`
    +	StorageDevice             *HostStorageDeviceInfo               `xml:"storageDevice,omitempty"`
    +	MultipathState            *HostMultipathStateInfo              `xml:"multipathState,omitempty"`
    +	FileSystemVolume          *HostFileSystemVolumeInfo            `xml:"fileSystemVolume,omitempty"`
    +	SystemFile                []string                             `xml:"systemFile,omitempty"`
    +	Network                   *HostNetworkInfo                     `xml:"network,omitempty"`
    +	Vmotion                   *HostVMotionInfo                     `xml:"vmotion,omitempty"`
    +	VirtualNicManagerInfo     *HostVirtualNicManagerInfo           `xml:"virtualNicManagerInfo,omitempty"`
    +	Capabilities              *HostNetCapabilities                 `xml:"capabilities,omitempty"`
    +	DatastoreCapabilities     *HostDatastoreSystemCapabilities     `xml:"datastoreCapabilities,omitempty"`
    +	OffloadCapabilities       *HostNetOffloadCapabilities          `xml:"offloadCapabilities,omitempty"`
    +	Service                   *HostServiceInfo                     `xml:"service,omitempty"`
    +	Firewall                  *HostFirewallInfo                    `xml:"firewall,omitempty"`
    +	AutoStart                 *HostAutoStartManagerConfig          `xml:"autoStart,omitempty"`
    +	ActiveDiagnosticPartition *HostDiagnosticPartition             `xml:"activeDiagnosticPartition,omitempty"`
    +	Option                    []BaseOptionValue                    `xml:"option,omitempty,typeattr"`
    +	OptionDef                 []OptionDef                          `xml:"optionDef,omitempty"`
    +	DatastorePrincipal        string                               `xml:"datastorePrincipal,omitempty"`
    +	LocalSwapDatastore        *ManagedObjectReference              `xml:"localSwapDatastore,omitempty"`
    +	SystemSwapConfiguration   *HostSystemSwapConfiguration         `xml:"systemSwapConfiguration,omitempty"`
    +	SystemResources           *HostSystemResourceInfo              `xml:"systemResources,omitempty"`
    +	DateTimeInfo              *HostDateTimeInfo                    `xml:"dateTimeInfo,omitempty"`
    +	Flags                     *HostFlagInfo                        `xml:"flags,omitempty"`
    +	AdminDisabled             *bool                                `xml:"adminDisabled"`
    +	LockdownMode              HostLockdownMode                     `xml:"lockdownMode,omitempty"`
    +	Ipmi                      *HostIpmiInfo                        `xml:"ipmi,omitempty"`
    +	SslThumbprintInfo         *HostSslThumbprintInfo               `xml:"sslThumbprintInfo,omitempty"`
    +	SslThumbprintData         []HostSslThumbprintInfo              `xml:"sslThumbprintData,omitempty"`
    +	Certificate               []byte                               `xml:"certificate,omitempty"`
    +	PciPassthruInfo           []BaseHostPciPassthruInfo            `xml:"pciPassthruInfo,omitempty,typeattr"`
    +	AuthenticationManagerInfo *HostAuthenticationManagerInfo       `xml:"authenticationManagerInfo,omitempty"`
    +	FeatureVersion            []HostFeatureVersionInfo             `xml:"featureVersion,omitempty"`
    +	PowerSystemCapability     *PowerSystemCapability               `xml:"powerSystemCapability,omitempty"`
    +	PowerSystemInfo           *PowerSystemInfo                     `xml:"powerSystemInfo,omitempty"`
    +	CacheConfigurationInfo    []HostCacheConfigurationInfo         `xml:"cacheConfigurationInfo,omitempty"`
    +	WakeOnLanCapable          *bool                                `xml:"wakeOnLanCapable"`
    +	FeatureCapability         []HostFeatureCapability              `xml:"featureCapability,omitempty"`
    +	MaskedFeatureCapability   []HostFeatureCapability              `xml:"maskedFeatureCapability,omitempty"`
    +	VFlashConfigInfo          *HostVFlashManagerVFlashConfigInfo   `xml:"vFlashConfigInfo,omitempty"`
    +	VsanHostConfig            *VsanHostConfigInfo                  `xml:"vsanHostConfig,omitempty"`
    +	DomainList                []string                             `xml:"domainList,omitempty"`
    +	ScriptCheckSum            []byte                               `xml:"scriptCheckSum,omitempty"`
    +	HostConfigCheckSum        []byte                               `xml:"hostConfigCheckSum,omitempty"`
    +	GraphicsInfo              []HostGraphicsInfo                   `xml:"graphicsInfo,omitempty"`
    +	SharedPassthruGpuTypes    []string                             `xml:"sharedPassthruGpuTypes,omitempty"`
    +	GraphicsConfig            *HostGraphicsConfig                  `xml:"graphicsConfig,omitempty"`
    +	SharedGpuCapabilities     []HostSharedGpuCapabilities          `xml:"sharedGpuCapabilities,omitempty"`
    +	IoFilterInfo              []HostIoFilterInfo                   `xml:"ioFilterInfo,omitempty"`
    +	SriovDevicePool           []BaseHostSriovDevicePoolInfo        `xml:"sriovDevicePool,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostConfigInfo"] = reflect.TypeOf((*HostConfigInfo)(nil)).Elem()
    +}
    +
    +type HostConfigManager struct {
    +	DynamicData
    +
    +	CpuScheduler              *ManagedObjectReference `xml:"cpuScheduler,omitempty"`
    +	DatastoreSystem           *ManagedObjectReference `xml:"datastoreSystem,omitempty"`
    +	MemoryManager             *ManagedObjectReference `xml:"memoryManager,omitempty"`
    +	StorageSystem             *ManagedObjectReference `xml:"storageSystem,omitempty"`
    +	NetworkSystem             *ManagedObjectReference `xml:"networkSystem,omitempty"`
    +	VmotionSystem             *ManagedObjectReference `xml:"vmotionSystem,omitempty"`
    +	VirtualNicManager         *ManagedObjectReference `xml:"virtualNicManager,omitempty"`
    +	ServiceSystem             *ManagedObjectReference `xml:"serviceSystem,omitempty"`
    +	FirewallSystem            *ManagedObjectReference `xml:"firewallSystem,omitempty"`
    +	AdvancedOption            *ManagedObjectReference `xml:"advancedOption,omitempty"`
    +	DiagnosticSystem          *ManagedObjectReference `xml:"diagnosticSystem,omitempty"`
    +	AutoStartManager          *ManagedObjectReference `xml:"autoStartManager,omitempty"`
    +	SnmpSystem                *ManagedObjectReference `xml:"snmpSystem,omitempty"`
    +	DateTimeSystem            *ManagedObjectReference `xml:"dateTimeSystem,omitempty"`
    +	PatchManager              *ManagedObjectReference `xml:"patchManager,omitempty"`
    +	ImageConfigManager        *ManagedObjectReference `xml:"imageConfigManager,omitempty"`
    +	BootDeviceSystem          *ManagedObjectReference `xml:"bootDeviceSystem,omitempty"`
    +	FirmwareSystem            *ManagedObjectReference `xml:"firmwareSystem,omitempty"`
    +	HealthStatusSystem        *ManagedObjectReference `xml:"healthStatusSystem,omitempty"`
    +	PciPassthruSystem         *ManagedObjectReference `xml:"pciPassthruSystem,omitempty"`
    +	LicenseManager            *ManagedObjectReference `xml:"licenseManager,omitempty"`
    +	KernelModuleSystem        *ManagedObjectReference `xml:"kernelModuleSystem,omitempty"`
    +	AuthenticationManager     *ManagedObjectReference `xml:"authenticationManager,omitempty"`
    +	PowerSystem               *ManagedObjectReference `xml:"powerSystem,omitempty"`
    +	CacheConfigurationManager *ManagedObjectReference `xml:"cacheConfigurationManager,omitempty"`
    +	EsxAgentHostManager       *ManagedObjectReference `xml:"esxAgentHostManager,omitempty"`
    +	IscsiManager              *ManagedObjectReference `xml:"iscsiManager,omitempty"`
    +	VFlashManager             *ManagedObjectReference `xml:"vFlashManager,omitempty"`
    +	VsanSystem                *ManagedObjectReference `xml:"vsanSystem,omitempty"`
    +	MessageBusProxy           *ManagedObjectReference `xml:"messageBusProxy,omitempty"`
    +	UserDirectory             *ManagedObjectReference `xml:"userDirectory,omitempty"`
    +	AccountManager            *ManagedObjectReference `xml:"accountManager,omitempty"`
    +	HostAccessManager         *ManagedObjectReference `xml:"hostAccessManager,omitempty"`
    +	GraphicsManager           *ManagedObjectReference `xml:"graphicsManager,omitempty"`
    +	VsanInternalSystem        *ManagedObjectReference `xml:"vsanInternalSystem,omitempty"`
    +	CertificateManager        *ManagedObjectReference `xml:"certificateManager,omitempty"`
    +	CryptoManager             *ManagedObjectReference `xml:"cryptoManager,omitempty"`
    +	NvdimmSystem              *ManagedObjectReference `xml:"nvdimmSystem,omitempty"`
    +}
    +
    +func init() {
    +	t["HostConfigManager"] = reflect.TypeOf((*HostConfigManager)(nil)).Elem()
    +}
    +
    +type HostConfigSpec struct {
    +	DynamicData
    +
    +	NasDatastore             []HostNasVolumeConfig                   `xml:"nasDatastore,omitempty"`
    +	Network                  *HostNetworkConfig                      `xml:"network,omitempty"`
    +	NicTypeSelection         []HostVirtualNicManagerNicTypeSelection `xml:"nicTypeSelection,omitempty"`
    +	Service                  []HostServiceConfig                     `xml:"service,omitempty"`
    +	Firewall                 *HostFirewallConfig                     `xml:"firewall,omitempty"`
    +	Option                   []BaseOptionValue                       `xml:"option,omitempty,typeattr"`
    +	DatastorePrincipal       string                                  `xml:"datastorePrincipal,omitempty"`
    +	DatastorePrincipalPasswd string                                  `xml:"datastorePrincipalPasswd,omitempty"`
    +	Datetime                 *HostDateTimeConfig                     `xml:"datetime,omitempty"`
    +	StorageDevice            *HostStorageDeviceInfo                  `xml:"storageDevice,omitempty"`
    +	License                  *HostLicenseSpec                        `xml:"license,omitempty"`
    +	Security                 *HostSecuritySpec                       `xml:"security,omitempty"`
    +	UserAccount              []BaseHostAccountSpec                   `xml:"userAccount,omitempty,typeattr"`
    +	UsergroupAccount         []BaseHostAccountSpec                   `xml:"usergroupAccount,omitempty,typeattr"`
    +	Memory                   *HostMemorySpec                         `xml:"memory,omitempty"`
    +	ActiveDirectory          []HostActiveDirectory                   `xml:"activeDirectory,omitempty"`
    +	GenericConfig            []KeyAnyValue                           `xml:"genericConfig,omitempty"`
    +	GraphicsConfig           *HostGraphicsConfig                     `xml:"graphicsConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["HostConfigSpec"] = reflect.TypeOf((*HostConfigSpec)(nil)).Elem()
    +}
    +
    +type HostConfigSummary struct {
    +	DynamicData
    +
    +	Name                  string                   `xml:"name"`
    +	Port                  int32                    `xml:"port"`
    +	SslThumbprint         string                   `xml:"sslThumbprint,omitempty"`
    +	Product               *AboutInfo               `xml:"product,omitempty"`
    +	VmotionEnabled        bool                     `xml:"vmotionEnabled"`
    +	FaultToleranceEnabled *bool                    `xml:"faultToleranceEnabled"`
    +	FeatureVersion        []HostFeatureVersionInfo `xml:"featureVersion,omitempty"`
    +	AgentVmDatastore      *ManagedObjectReference  `xml:"agentVmDatastore,omitempty"`
    +	AgentVmNetwork        *ManagedObjectReference  `xml:"agentVmNetwork,omitempty"`
    +}
    +
    +func init() {
    +	t["HostConfigSummary"] = reflect.TypeOf((*HostConfigSummary)(nil)).Elem()
    +}
    +
    +type HostConfigVFlashCache HostConfigVFlashCacheRequestType
    +
    +func init() {
    +	t["HostConfigVFlashCache"] = reflect.TypeOf((*HostConfigVFlashCache)(nil)).Elem()
    +}
    +
    +type HostConfigVFlashCacheRequestType struct {
    +	This ManagedObjectReference                 `xml:"_this"`
    +	Spec HostVFlashManagerVFlashCacheConfigSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostConfigVFlashCacheRequestType"] = reflect.TypeOf((*HostConfigVFlashCacheRequestType)(nil)).Elem()
    +}
    +
    +type HostConfigVFlashCacheResponse struct {
    +}
    +
    +type HostConfigureVFlashResource HostConfigureVFlashResourceRequestType
    +
    +func init() {
    +	t["HostConfigureVFlashResource"] = reflect.TypeOf((*HostConfigureVFlashResource)(nil)).Elem()
    +}
    +
    +type HostConfigureVFlashResourceRequestType struct {
    +	This ManagedObjectReference                    `xml:"_this"`
    +	Spec HostVFlashManagerVFlashResourceConfigSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostConfigureVFlashResourceRequestType"] = reflect.TypeOf((*HostConfigureVFlashResourceRequestType)(nil)).Elem()
    +}
    +
    +type HostConfigureVFlashResourceResponse struct {
    +}
    +
    +type HostConnectFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["HostConnectFault"] = reflect.TypeOf((*HostConnectFault)(nil)).Elem()
    +}
    +
    +type HostConnectFaultFault BaseHostConnectFault
    +
    +func init() {
    +	t["HostConnectFaultFault"] = reflect.TypeOf((*HostConnectFaultFault)(nil)).Elem()
    +}
    +
    +type HostConnectInfo struct {
    +	DynamicData
    +
    +	ServerIp               string                           `xml:"serverIp,omitempty"`
    +	InDasCluster           *bool                            `xml:"inDasCluster"`
    +	Host                   HostListSummary                  `xml:"host"`
    +	Vm                     []VirtualMachineSummary          `xml:"vm,omitempty"`
    +	VimAccountNameRequired *bool                            `xml:"vimAccountNameRequired"`
    +	ClusterSupported       *bool                            `xml:"clusterSupported"`
    +	Network                []BaseHostConnectInfoNetworkInfo `xml:"network,omitempty,typeattr"`
    +	Datastore              []BaseHostDatastoreConnectInfo   `xml:"datastore,omitempty,typeattr"`
    +	License                *HostLicenseConnectInfo          `xml:"license,omitempty"`
    +	Capability             *HostCapability                  `xml:"capability,omitempty"`
    +}
    +
    +func init() {
    +	t["HostConnectInfo"] = reflect.TypeOf((*HostConnectInfo)(nil)).Elem()
    +}
    +
    +type HostConnectInfoNetworkInfo struct {
    +	DynamicData
    +
    +	Summary BaseNetworkSummary `xml:"summary,typeattr"`
    +}
    +
    +func init() {
    +	t["HostConnectInfoNetworkInfo"] = reflect.TypeOf((*HostConnectInfoNetworkInfo)(nil)).Elem()
    +}
    +
    +type HostConnectSpec struct {
    +	DynamicData
    +
    +	HostName           string                  `xml:"hostName,omitempty"`
    +	Port               int32                   `xml:"port,omitempty"`
    +	SslThumbprint      string                  `xml:"sslThumbprint,omitempty"`
    +	UserName           string                  `xml:"userName,omitempty"`
    +	Password           string                  `xml:"password,omitempty"`
    +	VmFolder           *ManagedObjectReference `xml:"vmFolder,omitempty"`
    +	Force              bool                    `xml:"force"`
    +	VimAccountName     string                  `xml:"vimAccountName,omitempty"`
    +	VimAccountPassword string                  `xml:"vimAccountPassword,omitempty"`
    +	ManagementIp       string                  `xml:"managementIp,omitempty"`
    +	LockdownMode       HostLockdownMode        `xml:"lockdownMode,omitempty"`
    +	HostGateway        *HostGatewaySpec        `xml:"hostGateway,omitempty"`
    +}
    +
    +func init() {
    +	t["HostConnectSpec"] = reflect.TypeOf((*HostConnectSpec)(nil)).Elem()
    +}
    +
    +type HostConnectedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostConnectedEvent"] = reflect.TypeOf((*HostConnectedEvent)(nil)).Elem()
    +}
    +
    +type HostConnectionLostEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostConnectionLostEvent"] = reflect.TypeOf((*HostConnectionLostEvent)(nil)).Elem()
    +}
    +
    +type HostCpuIdInfo struct {
    +	DynamicData
    +
    +	Level  int32  `xml:"level"`
    +	Vendor string `xml:"vendor,omitempty"`
    +	Eax    string `xml:"eax,omitempty"`
    +	Ebx    string `xml:"ebx,omitempty"`
    +	Ecx    string `xml:"ecx,omitempty"`
    +	Edx    string `xml:"edx,omitempty"`
    +}
    +
    +func init() {
    +	t["HostCpuIdInfo"] = reflect.TypeOf((*HostCpuIdInfo)(nil)).Elem()
    +}
    +
    +type HostCpuInfo struct {
    +	DynamicData
    +
    +	NumCpuPackages int16 `xml:"numCpuPackages"`
    +	NumCpuCores    int16 `xml:"numCpuCores"`
    +	NumCpuThreads  int16 `xml:"numCpuThreads"`
    +	Hz             int64 `xml:"hz"`
    +}
    +
    +func init() {
    +	t["HostCpuInfo"] = reflect.TypeOf((*HostCpuInfo)(nil)).Elem()
    +}
    +
    +type HostCpuPackage struct {
    +	DynamicData
    +
    +	Index       int16           `xml:"index"`
    +	Vendor      string          `xml:"vendor"`
    +	Hz          int64           `xml:"hz"`
    +	BusHz       int64           `xml:"busHz"`
    +	Description string          `xml:"description"`
    +	ThreadId    []int16         `xml:"threadId"`
    +	CpuFeature  []HostCpuIdInfo `xml:"cpuFeature,omitempty"`
    +}
    +
    +func init() {
    +	t["HostCpuPackage"] = reflect.TypeOf((*HostCpuPackage)(nil)).Elem()
    +}
    +
    +type HostCpuPowerManagementInfo struct {
    +	DynamicData
    +
    +	CurrentPolicy   string `xml:"currentPolicy,omitempty"`
    +	HardwareSupport string `xml:"hardwareSupport,omitempty"`
    +}
    +
    +func init() {
    +	t["HostCpuPowerManagementInfo"] = reflect.TypeOf((*HostCpuPowerManagementInfo)(nil)).Elem()
    +}
    +
    +type HostCreateDiskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec VslmCreateSpec         `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostCreateDiskRequestType"] = reflect.TypeOf((*HostCreateDiskRequestType)(nil)).Elem()
    +}
    +
    +type HostCreateDisk_Task HostCreateDiskRequestType
    +
    +func init() {
    +	t["HostCreateDisk_Task"] = reflect.TypeOf((*HostCreateDisk_Task)(nil)).Elem()
    +}
    +
    +type HostCreateDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostDasDisabledEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostDasDisabledEvent"] = reflect.TypeOf((*HostDasDisabledEvent)(nil)).Elem()
    +}
    +
    +type HostDasDisablingEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostDasDisablingEvent"] = reflect.TypeOf((*HostDasDisablingEvent)(nil)).Elem()
    +}
    +
    +type HostDasEnabledEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostDasEnabledEvent"] = reflect.TypeOf((*HostDasEnabledEvent)(nil)).Elem()
    +}
    +
    +type HostDasEnablingEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostDasEnablingEvent"] = reflect.TypeOf((*HostDasEnablingEvent)(nil)).Elem()
    +}
    +
    +type HostDasErrorEvent struct {
    +	HostEvent
    +
    +	Message string `xml:"message,omitempty"`
    +	Reason  string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDasErrorEvent"] = reflect.TypeOf((*HostDasErrorEvent)(nil)).Elem()
    +}
    +
    +type HostDasEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostDasEvent"] = reflect.TypeOf((*HostDasEvent)(nil)).Elem()
    +}
    +
    +type HostDasOkEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostDasOkEvent"] = reflect.TypeOf((*HostDasOkEvent)(nil)).Elem()
    +}
    +
    +type HostDatastoreBrowserSearchResults struct {
    +	DynamicData
    +
    +	Datastore  *ManagedObjectReference `xml:"datastore,omitempty"`
    +	FolderPath string                  `xml:"folderPath,omitempty"`
    +	File       []BaseFileInfo          `xml:"file,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostDatastoreBrowserSearchResults"] = reflect.TypeOf((*HostDatastoreBrowserSearchResults)(nil)).Elem()
    +}
    +
    +type HostDatastoreBrowserSearchSpec struct {
    +	DynamicData
    +
    +	Query                 []BaseFileQuery `xml:"query,omitempty,typeattr"`
    +	Details               *FileQueryFlags `xml:"details,omitempty"`
    +	SearchCaseInsensitive *bool           `xml:"searchCaseInsensitive"`
    +	MatchPattern          []string        `xml:"matchPattern,omitempty"`
    +	SortFoldersFirst      *bool           `xml:"sortFoldersFirst"`
    +}
    +
    +func init() {
    +	t["HostDatastoreBrowserSearchSpec"] = reflect.TypeOf((*HostDatastoreBrowserSearchSpec)(nil)).Elem()
    +}
    +
    +type HostDatastoreConnectInfo struct {
    +	DynamicData
    +
    +	Summary DatastoreSummary `xml:"summary"`
    +}
    +
    +func init() {
    +	t["HostDatastoreConnectInfo"] = reflect.TypeOf((*HostDatastoreConnectInfo)(nil)).Elem()
    +}
    +
    +type HostDatastoreExistsConnectInfo struct {
    +	HostDatastoreConnectInfo
    +
    +	NewDatastoreName string `xml:"newDatastoreName"`
    +}
    +
    +func init() {
    +	t["HostDatastoreExistsConnectInfo"] = reflect.TypeOf((*HostDatastoreExistsConnectInfo)(nil)).Elem()
    +}
    +
    +type HostDatastoreNameConflictConnectInfo struct {
    +	HostDatastoreConnectInfo
    +
    +	NewDatastoreName string `xml:"newDatastoreName"`
    +}
    +
    +func init() {
    +	t["HostDatastoreNameConflictConnectInfo"] = reflect.TypeOf((*HostDatastoreNameConflictConnectInfo)(nil)).Elem()
    +}
    +
    +type HostDatastoreSystemCapabilities struct {
    +	DynamicData
    +
    +	NfsMountCreationRequired     bool  `xml:"nfsMountCreationRequired"`
    +	NfsMountCreationSupported    bool  `xml:"nfsMountCreationSupported"`
    +	LocalDatastoreSupported      bool  `xml:"localDatastoreSupported"`
    +	VmfsExtentExpansionSupported *bool `xml:"vmfsExtentExpansionSupported"`
    +}
    +
    +func init() {
    +	t["HostDatastoreSystemCapabilities"] = reflect.TypeOf((*HostDatastoreSystemCapabilities)(nil)).Elem()
    +}
    +
    +type HostDatastoreSystemDatastoreResult struct {
    +	DynamicData
    +
    +	Key   ManagedObjectReference `xml:"key"`
    +	Fault *LocalizedMethodFault  `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDatastoreSystemDatastoreResult"] = reflect.TypeOf((*HostDatastoreSystemDatastoreResult)(nil)).Elem()
    +}
    +
    +type HostDatastoreSystemVvolDatastoreSpec struct {
    +	DynamicData
    +
    +	Name string `xml:"name"`
    +	ScId string `xml:"scId"`
    +}
    +
    +func init() {
    +	t["HostDatastoreSystemVvolDatastoreSpec"] = reflect.TypeOf((*HostDatastoreSystemVvolDatastoreSpec)(nil)).Elem()
    +}
    +
    +type HostDateTimeConfig struct {
    +	DynamicData
    +
    +	TimeZone  string         `xml:"timeZone,omitempty"`
    +	NtpConfig *HostNtpConfig `xml:"ntpConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDateTimeConfig"] = reflect.TypeOf((*HostDateTimeConfig)(nil)).Elem()
    +}
    +
    +type HostDateTimeInfo struct {
    +	DynamicData
    +
    +	TimeZone  HostDateTimeSystemTimeZone `xml:"timeZone"`
    +	NtpConfig *HostNtpConfig             `xml:"ntpConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDateTimeInfo"] = reflect.TypeOf((*HostDateTimeInfo)(nil)).Elem()
    +}
    +
    +type HostDateTimeSystemTimeZone struct {
    +	DynamicData
    +
    +	Key         string `xml:"key"`
    +	Name        string `xml:"name"`
    +	Description string `xml:"description"`
    +	GmtOffset   int32  `xml:"gmtOffset"`
    +}
    +
    +func init() {
    +	t["HostDateTimeSystemTimeZone"] = reflect.TypeOf((*HostDateTimeSystemTimeZone)(nil)).Elem()
    +}
    +
    +type HostDeleteVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostDeleteVStorageObjectRequestType"] = reflect.TypeOf((*HostDeleteVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type HostDeleteVStorageObject_Task HostDeleteVStorageObjectRequestType
    +
    +func init() {
    +	t["HostDeleteVStorageObject_Task"] = reflect.TypeOf((*HostDeleteVStorageObject_Task)(nil)).Elem()
    +}
    +
    +type HostDeleteVStorageObject_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostDeploymentInfo struct {
    +	DynamicData
    +
    +	BootedFromStatelessCache *bool `xml:"bootedFromStatelessCache"`
    +}
    +
    +func init() {
    +	t["HostDeploymentInfo"] = reflect.TypeOf((*HostDeploymentInfo)(nil)).Elem()
    +}
    +
    +type HostDevice struct {
    +	DynamicData
    +
    +	DeviceName string `xml:"deviceName"`
    +	DeviceType string `xml:"deviceType"`
    +}
    +
    +func init() {
    +	t["HostDevice"] = reflect.TypeOf((*HostDevice)(nil)).Elem()
    +}
    +
    +type HostDhcpService struct {
    +	DynamicData
    +
    +	Key  string              `xml:"key"`
    +	Spec HostDhcpServiceSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostDhcpService"] = reflect.TypeOf((*HostDhcpService)(nil)).Elem()
    +}
    +
    +type HostDhcpServiceConfig struct {
    +	DynamicData
    +
    +	ChangeOperation string              `xml:"changeOperation,omitempty"`
    +	Key             string              `xml:"key"`
    +	Spec            HostDhcpServiceSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostDhcpServiceConfig"] = reflect.TypeOf((*HostDhcpServiceConfig)(nil)).Elem()
    +}
    +
    +type HostDhcpServiceSpec struct {
    +	DynamicData
    +
    +	VirtualSwitch        string `xml:"virtualSwitch"`
    +	DefaultLeaseDuration int32  `xml:"defaultLeaseDuration"`
    +	LeaseBeginIp         string `xml:"leaseBeginIp"`
    +	LeaseEndIp           string `xml:"leaseEndIp"`
    +	MaxLeaseDuration     int32  `xml:"maxLeaseDuration"`
    +	UnlimitedLease       bool   `xml:"unlimitedLease"`
    +	IpSubnetAddr         string `xml:"ipSubnetAddr"`
    +	IpSubnetMask         string `xml:"ipSubnetMask"`
    +}
    +
    +func init() {
    +	t["HostDhcpServiceSpec"] = reflect.TypeOf((*HostDhcpServiceSpec)(nil)).Elem()
    +}
    +
    +type HostDiagnosticPartition struct {
    +	DynamicData
    +
    +	StorageType    string                `xml:"storageType"`
    +	DiagnosticType string                `xml:"diagnosticType"`
    +	Slots          int32                 `xml:"slots"`
    +	Id             HostScsiDiskPartition `xml:"id"`
    +}
    +
    +func init() {
    +	t["HostDiagnosticPartition"] = reflect.TypeOf((*HostDiagnosticPartition)(nil)).Elem()
    +}
    +
    +type HostDiagnosticPartitionCreateDescription struct {
    +	DynamicData
    +
    +	Layout   HostDiskPartitionLayout           `xml:"layout"`
    +	DiskUuid string                            `xml:"diskUuid"`
    +	Spec     HostDiagnosticPartitionCreateSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostDiagnosticPartitionCreateDescription"] = reflect.TypeOf((*HostDiagnosticPartitionCreateDescription)(nil)).Elem()
    +}
    +
    +type HostDiagnosticPartitionCreateOption struct {
    +	DynamicData
    +
    +	StorageType    string       `xml:"storageType"`
    +	DiagnosticType string       `xml:"diagnosticType"`
    +	Disk           HostScsiDisk `xml:"disk"`
    +}
    +
    +func init() {
    +	t["HostDiagnosticPartitionCreateOption"] = reflect.TypeOf((*HostDiagnosticPartitionCreateOption)(nil)).Elem()
    +}
    +
    +type HostDiagnosticPartitionCreateSpec struct {
    +	DynamicData
    +
    +	StorageType    string                `xml:"storageType"`
    +	DiagnosticType string                `xml:"diagnosticType"`
    +	Id             HostScsiDiskPartition `xml:"id"`
    +	Partition      HostDiskPartitionSpec `xml:"partition"`
    +	Active         *bool                 `xml:"active"`
    +}
    +
    +func init() {
    +	t["HostDiagnosticPartitionCreateSpec"] = reflect.TypeOf((*HostDiagnosticPartitionCreateSpec)(nil)).Elem()
    +}
    +
    +type HostDigestInfo struct {
    +	DynamicData
    +
    +	DigestMethod string `xml:"digestMethod"`
    +	DigestValue  []byte `xml:"digestValue"`
    +	ObjectName   string `xml:"objectName,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDigestInfo"] = reflect.TypeOf((*HostDigestInfo)(nil)).Elem()
    +}
    +
    +type HostDirectoryStoreInfo struct {
    +	HostAuthenticationStoreInfo
    +}
    +
    +func init() {
    +	t["HostDirectoryStoreInfo"] = reflect.TypeOf((*HostDirectoryStoreInfo)(nil)).Elem()
    +}
    +
    +type HostDisconnectedEvent struct {
    +	HostEvent
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDisconnectedEvent"] = reflect.TypeOf((*HostDisconnectedEvent)(nil)).Elem()
    +}
    +
    +type HostDiskConfigurationResult struct {
    +	DynamicData
    +
    +	DevicePath string                `xml:"devicePath,omitempty"`
    +	Success    *bool                 `xml:"success"`
    +	Fault      *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDiskConfigurationResult"] = reflect.TypeOf((*HostDiskConfigurationResult)(nil)).Elem()
    +}
    +
    +type HostDiskDimensions struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["HostDiskDimensions"] = reflect.TypeOf((*HostDiskDimensions)(nil)).Elem()
    +}
    +
    +type HostDiskDimensionsChs struct {
    +	DynamicData
    +
    +	Cylinder int64 `xml:"cylinder"`
    +	Head     int32 `xml:"head"`
    +	Sector   int32 `xml:"sector"`
    +}
    +
    +func init() {
    +	t["HostDiskDimensionsChs"] = reflect.TypeOf((*HostDiskDimensionsChs)(nil)).Elem()
    +}
    +
    +type HostDiskDimensionsLba struct {
    +	DynamicData
    +
    +	BlockSize int32 `xml:"blockSize"`
    +	Block     int64 `xml:"block"`
    +}
    +
    +func init() {
    +	t["HostDiskDimensionsLba"] = reflect.TypeOf((*HostDiskDimensionsLba)(nil)).Elem()
    +}
    +
    +type HostDiskMappingInfo struct {
    +	DynamicData
    +
    +	PhysicalPartition *HostDiskMappingPartitionInfo `xml:"physicalPartition,omitempty"`
    +	Name              string                        `xml:"name"`
    +	Exclusive         *bool                         `xml:"exclusive"`
    +}
    +
    +func init() {
    +	t["HostDiskMappingInfo"] = reflect.TypeOf((*HostDiskMappingInfo)(nil)).Elem()
    +}
    +
    +type HostDiskMappingOption struct {
    +	DynamicData
    +
    +	PhysicalPartition []HostDiskMappingPartitionOption `xml:"physicalPartition,omitempty"`
    +	Name              string                           `xml:"name"`
    +}
    +
    +func init() {
    +	t["HostDiskMappingOption"] = reflect.TypeOf((*HostDiskMappingOption)(nil)).Elem()
    +}
    +
    +type HostDiskMappingPartitionInfo struct {
    +	DynamicData
    +
    +	Name         string `xml:"name"`
    +	FileSystem   string `xml:"fileSystem"`
    +	CapacityInKb int64  `xml:"capacityInKb"`
    +}
    +
    +func init() {
    +	t["HostDiskMappingPartitionInfo"] = reflect.TypeOf((*HostDiskMappingPartitionInfo)(nil)).Elem()
    +}
    +
    +type HostDiskMappingPartitionOption struct {
    +	DynamicData
    +
    +	Name         string `xml:"name"`
    +	FileSystem   string `xml:"fileSystem"`
    +	CapacityInKb int64  `xml:"capacityInKb"`
    +}
    +
    +func init() {
    +	t["HostDiskMappingPartitionOption"] = reflect.TypeOf((*HostDiskMappingPartitionOption)(nil)).Elem()
    +}
    +
    +type HostDiskPartitionAttributes struct {
    +	DynamicData
    +
    +	Partition          int32  `xml:"partition"`
    +	StartSector        int64  `xml:"startSector"`
    +	EndSector          int64  `xml:"endSector"`
    +	Type               string `xml:"type"`
    +	Guid               string `xml:"guid,omitempty"`
    +	Logical            bool   `xml:"logical"`
    +	Attributes         byte   `xml:"attributes"`
    +	PartitionAlignment int64  `xml:"partitionAlignment,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDiskPartitionAttributes"] = reflect.TypeOf((*HostDiskPartitionAttributes)(nil)).Elem()
    +}
    +
    +type HostDiskPartitionBlockRange struct {
    +	DynamicData
    +
    +	Partition int32                 `xml:"partition,omitempty"`
    +	Type      string                `xml:"type"`
    +	Start     HostDiskDimensionsLba `xml:"start"`
    +	End       HostDiskDimensionsLba `xml:"end"`
    +}
    +
    +func init() {
    +	t["HostDiskPartitionBlockRange"] = reflect.TypeOf((*HostDiskPartitionBlockRange)(nil)).Elem()
    +}
    +
    +type HostDiskPartitionInfo struct {
    +	DynamicData
    +
    +	DeviceName string                  `xml:"deviceName"`
    +	Spec       HostDiskPartitionSpec   `xml:"spec"`
    +	Layout     HostDiskPartitionLayout `xml:"layout"`
    +}
    +
    +func init() {
    +	t["HostDiskPartitionInfo"] = reflect.TypeOf((*HostDiskPartitionInfo)(nil)).Elem()
    +}
    +
    +type HostDiskPartitionLayout struct {
    +	DynamicData
    +
    +	Total     *HostDiskDimensionsLba        `xml:"total,omitempty"`
    +	Partition []HostDiskPartitionBlockRange `xml:"partition"`
    +}
    +
    +func init() {
    +	t["HostDiskPartitionLayout"] = reflect.TypeOf((*HostDiskPartitionLayout)(nil)).Elem()
    +}
    +
    +type HostDiskPartitionSpec struct {
    +	DynamicData
    +
    +	PartitionFormat string                        `xml:"partitionFormat,omitempty"`
    +	Chs             *HostDiskDimensionsChs        `xml:"chs,omitempty"`
    +	TotalSectors    int64                         `xml:"totalSectors,omitempty"`
    +	Partition       []HostDiskPartitionAttributes `xml:"partition,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDiskPartitionSpec"] = reflect.TypeOf((*HostDiskPartitionSpec)(nil)).Elem()
    +}
    +
    +type HostDnsConfig struct {
    +	DynamicData
    +
    +	Dhcp                 bool     `xml:"dhcp"`
    +	VirtualNicDevice     string   `xml:"virtualNicDevice,omitempty"`
    +	Ipv6VirtualNicDevice string   `xml:"ipv6VirtualNicDevice,omitempty"`
    +	HostName             string   `xml:"hostName"`
    +	DomainName           string   `xml:"domainName"`
    +	Address              []string `xml:"address,omitempty"`
    +	SearchDomain         []string `xml:"searchDomain,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDnsConfig"] = reflect.TypeOf((*HostDnsConfig)(nil)).Elem()
    +}
    +
    +type HostDnsConfigSpec struct {
    +	HostDnsConfig
    +
    +	VirtualNicConnection   *HostVirtualNicConnection `xml:"virtualNicConnection,omitempty"`
    +	VirtualNicConnectionV6 *HostVirtualNicConnection `xml:"virtualNicConnectionV6,omitempty"`
    +}
    +
    +func init() {
    +	t["HostDnsConfigSpec"] = reflect.TypeOf((*HostDnsConfigSpec)(nil)).Elem()
    +}
    +
    +type HostEnableAdminFailedEvent struct {
    +	HostEvent
    +
    +	Permissions []Permission `xml:"permissions"`
    +}
    +
    +func init() {
    +	t["HostEnableAdminFailedEvent"] = reflect.TypeOf((*HostEnableAdminFailedEvent)(nil)).Elem()
    +}
    +
    +type HostEnterMaintenanceResult struct {
    +	DynamicData
    +
    +	VmFaults   []FaultsByVM   `xml:"vmFaults,omitempty"`
    +	HostFaults []FaultsByHost `xml:"hostFaults,omitempty"`
    +}
    +
    +func init() {
    +	t["HostEnterMaintenanceResult"] = reflect.TypeOf((*HostEnterMaintenanceResult)(nil)).Elem()
    +}
    +
    +type HostEsxAgentHostManagerConfigInfo struct {
    +	DynamicData
    +
    +	AgentVmDatastore *ManagedObjectReference `xml:"agentVmDatastore,omitempty"`
    +	AgentVmNetwork   *ManagedObjectReference `xml:"agentVmNetwork,omitempty"`
    +}
    +
    +func init() {
    +	t["HostEsxAgentHostManagerConfigInfo"] = reflect.TypeOf((*HostEsxAgentHostManagerConfigInfo)(nil)).Elem()
    +}
    +
    +type HostEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["HostEvent"] = reflect.TypeOf((*HostEvent)(nil)).Elem()
    +}
    +
    +type HostEventArgument struct {
    +	EntityEventArgument
    +
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["HostEventArgument"] = reflect.TypeOf((*HostEventArgument)(nil)).Elem()
    +}
    +
    +type HostExtendDiskRequestType struct {
    +	This            ManagedObjectReference `xml:"_this"`
    +	Id              ID                     `xml:"id"`
    +	Datastore       ManagedObjectReference `xml:"datastore"`
    +	NewCapacityInMB int64                  `xml:"newCapacityInMB"`
    +}
    +
    +func init() {
    +	t["HostExtendDiskRequestType"] = reflect.TypeOf((*HostExtendDiskRequestType)(nil)).Elem()
    +}
    +
    +type HostExtendDisk_Task HostExtendDiskRequestType
    +
    +func init() {
    +	t["HostExtendDisk_Task"] = reflect.TypeOf((*HostExtendDisk_Task)(nil)).Elem()
    +}
    +
    +type HostExtendDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostExtraNetworksEvent struct {
    +	HostDasEvent
    +
    +	Ips string `xml:"ips,omitempty"`
    +}
    +
    +func init() {
    +	t["HostExtraNetworksEvent"] = reflect.TypeOf((*HostExtraNetworksEvent)(nil)).Elem()
    +}
    +
    +type HostFaultToleranceManagerComponentHealthInfo struct {
    +	DynamicData
    +
    +	IsStorageHealthy bool `xml:"isStorageHealthy"`
    +	IsNetworkHealthy bool `xml:"isNetworkHealthy"`
    +}
    +
    +func init() {
    +	t["HostFaultToleranceManagerComponentHealthInfo"] = reflect.TypeOf((*HostFaultToleranceManagerComponentHealthInfo)(nil)).Elem()
    +}
    +
    +type HostFeatureCapability struct {
    +	DynamicData
    +
    +	Key         string `xml:"key"`
    +	FeatureName string `xml:"featureName"`
    +	Value       string `xml:"value"`
    +}
    +
    +func init() {
    +	t["HostFeatureCapability"] = reflect.TypeOf((*HostFeatureCapability)(nil)).Elem()
    +}
    +
    +type HostFeatureMask struct {
    +	DynamicData
    +
    +	Key         string `xml:"key"`
    +	FeatureName string `xml:"featureName"`
    +	Value       string `xml:"value"`
    +}
    +
    +func init() {
    +	t["HostFeatureMask"] = reflect.TypeOf((*HostFeatureMask)(nil)).Elem()
    +}
    +
    +type HostFeatureVersionInfo struct {
    +	DynamicData
    +
    +	Key   string `xml:"key"`
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["HostFeatureVersionInfo"] = reflect.TypeOf((*HostFeatureVersionInfo)(nil)).Elem()
    +}
    +
    +type HostFibreChannelHba struct {
    +	HostHostBusAdapter
    +
    +	PortWorldWideName int64                `xml:"portWorldWideName"`
    +	NodeWorldWideName int64                `xml:"nodeWorldWideName"`
    +	PortType          FibreChannelPortType `xml:"portType"`
    +	Speed             int64                `xml:"speed"`
    +}
    +
    +func init() {
    +	t["HostFibreChannelHba"] = reflect.TypeOf((*HostFibreChannelHba)(nil)).Elem()
    +}
    +
    +type HostFibreChannelOverEthernetHba struct {
    +	HostFibreChannelHba
    +
    +	UnderlyingNic    string                                  `xml:"underlyingNic"`
    +	LinkInfo         HostFibreChannelOverEthernetHbaLinkInfo `xml:"linkInfo"`
    +	IsSoftwareFcoe   bool                                    `xml:"isSoftwareFcoe"`
    +	MarkedForRemoval bool                                    `xml:"markedForRemoval"`
    +}
    +
    +func init() {
    +	t["HostFibreChannelOverEthernetHba"] = reflect.TypeOf((*HostFibreChannelOverEthernetHba)(nil)).Elem()
    +}
    +
    +type HostFibreChannelOverEthernetHbaLinkInfo struct {
    +	DynamicData
    +
    +	VnportMac string `xml:"vnportMac"`
    +	FcfMac    string `xml:"fcfMac"`
    +	VlanId    int32  `xml:"vlanId"`
    +}
    +
    +func init() {
    +	t["HostFibreChannelOverEthernetHbaLinkInfo"] = reflect.TypeOf((*HostFibreChannelOverEthernetHbaLinkInfo)(nil)).Elem()
    +}
    +
    +type HostFibreChannelOverEthernetTargetTransport struct {
    +	HostFibreChannelTargetTransport
    +
    +	VnportMac string `xml:"vnportMac"`
    +	FcfMac    string `xml:"fcfMac"`
    +	VlanId    int32  `xml:"vlanId"`
    +}
    +
    +func init() {
    +	t["HostFibreChannelOverEthernetTargetTransport"] = reflect.TypeOf((*HostFibreChannelOverEthernetTargetTransport)(nil)).Elem()
    +}
    +
    +type HostFibreChannelTargetTransport struct {
    +	HostTargetTransport
    +
    +	PortWorldWideName int64 `xml:"portWorldWideName"`
    +	NodeWorldWideName int64 `xml:"nodeWorldWideName"`
    +}
    +
    +func init() {
    +	t["HostFibreChannelTargetTransport"] = reflect.TypeOf((*HostFibreChannelTargetTransport)(nil)).Elem()
    +}
    +
    +type HostFileAccess struct {
    +	DynamicData
    +
    +	Who  string `xml:"who"`
    +	What string `xml:"what"`
    +}
    +
    +func init() {
    +	t["HostFileAccess"] = reflect.TypeOf((*HostFileAccess)(nil)).Elem()
    +}
    +
    +type HostFileSystemMountInfo struct {
    +	DynamicData
    +
    +	MountInfo       HostMountInfo            `xml:"mountInfo"`
    +	Volume          BaseHostFileSystemVolume `xml:"volume,typeattr"`
    +	VStorageSupport string                   `xml:"vStorageSupport,omitempty"`
    +}
    +
    +func init() {
    +	t["HostFileSystemMountInfo"] = reflect.TypeOf((*HostFileSystemMountInfo)(nil)).Elem()
    +}
    +
    +type HostFileSystemVolume struct {
    +	DynamicData
    +
    +	Type     string `xml:"type"`
    +	Name     string `xml:"name"`
    +	Capacity int64  `xml:"capacity"`
    +}
    +
    +func init() {
    +	t["HostFileSystemVolume"] = reflect.TypeOf((*HostFileSystemVolume)(nil)).Elem()
    +}
    +
    +type HostFileSystemVolumeInfo struct {
    +	DynamicData
    +
    +	VolumeTypeList []string                  `xml:"volumeTypeList,omitempty"`
    +	MountInfo      []HostFileSystemMountInfo `xml:"mountInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["HostFileSystemVolumeInfo"] = reflect.TypeOf((*HostFileSystemVolumeInfo)(nil)).Elem()
    +}
    +
    +type HostFirewallConfig struct {
    +	DynamicData
    +
    +	Rule                  []HostFirewallConfigRuleSetConfig `xml:"rule,omitempty"`
    +	DefaultBlockingPolicy HostFirewallDefaultPolicy         `xml:"defaultBlockingPolicy"`
    +}
    +
    +func init() {
    +	t["HostFirewallConfig"] = reflect.TypeOf((*HostFirewallConfig)(nil)).Elem()
    +}
    +
    +type HostFirewallConfigRuleSetConfig struct {
    +	DynamicData
    +
    +	RulesetId    string                     `xml:"rulesetId"`
    +	Enabled      bool                       `xml:"enabled"`
    +	AllowedHosts *HostFirewallRulesetIpList `xml:"allowedHosts,omitempty"`
    +}
    +
    +func init() {
    +	t["HostFirewallConfigRuleSetConfig"] = reflect.TypeOf((*HostFirewallConfigRuleSetConfig)(nil)).Elem()
    +}
    +
    +type HostFirewallDefaultPolicy struct {
    +	DynamicData
    +
    +	IncomingBlocked *bool `xml:"incomingBlocked"`
    +	OutgoingBlocked *bool `xml:"outgoingBlocked"`
    +}
    +
    +func init() {
    +	t["HostFirewallDefaultPolicy"] = reflect.TypeOf((*HostFirewallDefaultPolicy)(nil)).Elem()
    +}
    +
    +type HostFirewallInfo struct {
    +	DynamicData
    +
    +	DefaultPolicy HostFirewallDefaultPolicy `xml:"defaultPolicy"`
    +	Ruleset       []HostFirewallRuleset     `xml:"ruleset,omitempty"`
    +}
    +
    +func init() {
    +	t["HostFirewallInfo"] = reflect.TypeOf((*HostFirewallInfo)(nil)).Elem()
    +}
    +
    +type HostFirewallRule struct {
    +	DynamicData
    +
    +	Port      int32                     `xml:"port"`
    +	EndPort   int32                     `xml:"endPort,omitempty"`
    +	Direction HostFirewallRuleDirection `xml:"direction"`
    +	PortType  HostFirewallRulePortType  `xml:"portType,omitempty"`
    +	Protocol  string                    `xml:"protocol"`
    +}
    +
    +func init() {
    +	t["HostFirewallRule"] = reflect.TypeOf((*HostFirewallRule)(nil)).Elem()
    +}
    +
    +type HostFirewallRuleset struct {
    +	DynamicData
    +
    +	Key          string                     `xml:"key"`
    +	Label        string                     `xml:"label"`
    +	Required     bool                       `xml:"required"`
    +	Rule         []HostFirewallRule         `xml:"rule"`
    +	Service      string                     `xml:"service,omitempty"`
    +	Enabled      bool                       `xml:"enabled"`
    +	AllowedHosts *HostFirewallRulesetIpList `xml:"allowedHosts,omitempty"`
    +}
    +
    +func init() {
    +	t["HostFirewallRuleset"] = reflect.TypeOf((*HostFirewallRuleset)(nil)).Elem()
    +}
    +
    +type HostFirewallRulesetIpList struct {
    +	DynamicData
    +
    +	IpAddress []string                       `xml:"ipAddress,omitempty"`
    +	IpNetwork []HostFirewallRulesetIpNetwork `xml:"ipNetwork,omitempty"`
    +	AllIp     bool                           `xml:"allIp"`
    +}
    +
    +func init() {
    +	t["HostFirewallRulesetIpList"] = reflect.TypeOf((*HostFirewallRulesetIpList)(nil)).Elem()
    +}
    +
    +type HostFirewallRulesetIpNetwork struct {
    +	DynamicData
    +
    +	Network      string `xml:"network"`
    +	PrefixLength int32  `xml:"prefixLength"`
    +}
    +
    +func init() {
    +	t["HostFirewallRulesetIpNetwork"] = reflect.TypeOf((*HostFirewallRulesetIpNetwork)(nil)).Elem()
    +}
    +
    +type HostFirewallRulesetRulesetSpec struct {
    +	DynamicData
    +
    +	AllowedHosts HostFirewallRulesetIpList `xml:"allowedHosts"`
    +}
    +
    +func init() {
    +	t["HostFirewallRulesetRulesetSpec"] = reflect.TypeOf((*HostFirewallRulesetRulesetSpec)(nil)).Elem()
    +}
    +
    +type HostFlagInfo struct {
    +	DynamicData
    +
    +	BackgroundSnapshotsEnabled *bool `xml:"backgroundSnapshotsEnabled"`
    +}
    +
    +func init() {
    +	t["HostFlagInfo"] = reflect.TypeOf((*HostFlagInfo)(nil)).Elem()
    +}
    +
    +type HostForceMountedInfo struct {
    +	DynamicData
    +
    +	Persist bool `xml:"persist"`
    +	Mounted bool `xml:"mounted"`
    +}
    +
    +func init() {
    +	t["HostForceMountedInfo"] = reflect.TypeOf((*HostForceMountedInfo)(nil)).Elem()
    +}
    +
    +type HostGatewaySpec struct {
    +	DynamicData
    +
    +	GatewayType            string     `xml:"gatewayType"`
    +	GatewayId              string     `xml:"gatewayId,omitempty"`
    +	TrustVerificationToken string     `xml:"trustVerificationToken,omitempty"`
    +	HostAuthParams         []KeyValue `xml:"hostAuthParams,omitempty"`
    +}
    +
    +func init() {
    +	t["HostGatewaySpec"] = reflect.TypeOf((*HostGatewaySpec)(nil)).Elem()
    +}
    +
    +type HostGetShortNameFailedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostGetShortNameFailedEvent"] = reflect.TypeOf((*HostGetShortNameFailedEvent)(nil)).Elem()
    +}
    +
    +type HostGetVFlashModuleDefaultConfig HostGetVFlashModuleDefaultConfigRequestType
    +
    +func init() {
    +	t["HostGetVFlashModuleDefaultConfig"] = reflect.TypeOf((*HostGetVFlashModuleDefaultConfig)(nil)).Elem()
    +}
    +
    +type HostGetVFlashModuleDefaultConfigRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	VFlashModule string                 `xml:"vFlashModule"`
    +}
    +
    +func init() {
    +	t["HostGetVFlashModuleDefaultConfigRequestType"] = reflect.TypeOf((*HostGetVFlashModuleDefaultConfigRequestType)(nil)).Elem()
    +}
    +
    +type HostGetVFlashModuleDefaultConfigResponse struct {
    +	Returnval VirtualDiskVFlashCacheConfigInfo `xml:"returnval"`
    +}
    +
    +type HostGraphicsConfig struct {
    +	DynamicData
    +
    +	HostDefaultGraphicsType        string                         `xml:"hostDefaultGraphicsType"`
    +	SharedPassthruAssignmentPolicy string                         `xml:"sharedPassthruAssignmentPolicy"`
    +	DeviceType                     []HostGraphicsConfigDeviceType `xml:"deviceType,omitempty"`
    +}
    +
    +func init() {
    +	t["HostGraphicsConfig"] = reflect.TypeOf((*HostGraphicsConfig)(nil)).Elem()
    +}
    +
    +type HostGraphicsConfigDeviceType struct {
    +	DynamicData
    +
    +	DeviceId     string `xml:"deviceId"`
    +	GraphicsType string `xml:"graphicsType"`
    +}
    +
    +func init() {
    +	t["HostGraphicsConfigDeviceType"] = reflect.TypeOf((*HostGraphicsConfigDeviceType)(nil)).Elem()
    +}
    +
    +type HostGraphicsInfo struct {
    +	DynamicData
    +
    +	DeviceName     string                   `xml:"deviceName"`
    +	VendorName     string                   `xml:"vendorName"`
    +	PciId          string                   `xml:"pciId"`
    +	GraphicsType   string                   `xml:"graphicsType"`
    +	MemorySizeInKB int64                    `xml:"memorySizeInKB"`
    +	Vm             []ManagedObjectReference `xml:"vm,omitempty"`
    +}
    +
    +func init() {
    +	t["HostGraphicsInfo"] = reflect.TypeOf((*HostGraphicsInfo)(nil)).Elem()
    +}
    +
    +type HostHardwareElementInfo struct {
    +	DynamicData
    +
    +	Name   string                 `xml:"name"`
    +	Status BaseElementDescription `xml:"status,typeattr"`
    +}
    +
    +func init() {
    +	t["HostHardwareElementInfo"] = reflect.TypeOf((*HostHardwareElementInfo)(nil)).Elem()
    +}
    +
    +type HostHardwareInfo struct {
    +	DynamicData
    +
    +	SystemInfo             HostSystemInfo              `xml:"systemInfo"`
    +	CpuPowerManagementInfo *HostCpuPowerManagementInfo `xml:"cpuPowerManagementInfo,omitempty"`
    +	CpuInfo                HostCpuInfo                 `xml:"cpuInfo"`
    +	CpuPkg                 []HostCpuPackage            `xml:"cpuPkg"`
    +	MemorySize             int64                       `xml:"memorySize"`
    +	NumaInfo               *HostNumaInfo               `xml:"numaInfo,omitempty"`
    +	SmcPresent             *bool                       `xml:"smcPresent"`
    +	PciDevice              []HostPciDevice             `xml:"pciDevice,omitempty"`
    +	CpuFeature             []HostCpuIdInfo             `xml:"cpuFeature,omitempty"`
    +	BiosInfo               *HostBIOSInfo               `xml:"biosInfo,omitempty"`
    +	ReliableMemoryInfo     *HostReliableMemoryInfo     `xml:"reliableMemoryInfo,omitempty"`
    +	PersistentMemoryInfo   *HostPersistentMemoryInfo   `xml:"persistentMemoryInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["HostHardwareInfo"] = reflect.TypeOf((*HostHardwareInfo)(nil)).Elem()
    +}
    +
    +type HostHardwareStatusInfo struct {
    +	DynamicData
    +
    +	MemoryStatusInfo  []BaseHostHardwareElementInfo `xml:"memoryStatusInfo,omitempty,typeattr"`
    +	CpuStatusInfo     []BaseHostHardwareElementInfo `xml:"cpuStatusInfo,omitempty,typeattr"`
    +	StorageStatusInfo []HostStorageElementInfo      `xml:"storageStatusInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["HostHardwareStatusInfo"] = reflect.TypeOf((*HostHardwareStatusInfo)(nil)).Elem()
    +}
    +
    +type HostHardwareSummary struct {
    +	DynamicData
    +
    +	Vendor               string                         `xml:"vendor"`
    +	Model                string                         `xml:"model"`
    +	Uuid                 string                         `xml:"uuid"`
    +	OtherIdentifyingInfo []HostSystemIdentificationInfo `xml:"otherIdentifyingInfo,omitempty"`
    +	MemorySize           int64                          `xml:"memorySize"`
    +	CpuModel             string                         `xml:"cpuModel"`
    +	CpuMhz               int32                          `xml:"cpuMhz"`
    +	NumCpuPkgs           int16                          `xml:"numCpuPkgs"`
    +	NumCpuCores          int16                          `xml:"numCpuCores"`
    +	NumCpuThreads        int16                          `xml:"numCpuThreads"`
    +	NumNics              int32                          `xml:"numNics"`
    +	NumHBAs              int32                          `xml:"numHBAs"`
    +}
    +
    +func init() {
    +	t["HostHardwareSummary"] = reflect.TypeOf((*HostHardwareSummary)(nil)).Elem()
    +}
    +
    +type HostHasComponentFailure struct {
    +	VimFault
    +
    +	HostName      string `xml:"hostName"`
    +	ComponentType string `xml:"componentType"`
    +	ComponentName string `xml:"componentName"`
    +}
    +
    +func init() {
    +	t["HostHasComponentFailure"] = reflect.TypeOf((*HostHasComponentFailure)(nil)).Elem()
    +}
    +
    +type HostHasComponentFailureFault HostHasComponentFailure
    +
    +func init() {
    +	t["HostHasComponentFailureFault"] = reflect.TypeOf((*HostHasComponentFailureFault)(nil)).Elem()
    +}
    +
    +type HostHostBusAdapter struct {
    +	DynamicData
    +
    +	Key    string `xml:"key,omitempty"`
    +	Device string `xml:"device"`
    +	Bus    int32  `xml:"bus"`
    +	Status string `xml:"status"`
    +	Model  string `xml:"model"`
    +	Driver string `xml:"driver,omitempty"`
    +	Pci    string `xml:"pci,omitempty"`
    +}
    +
    +func init() {
    +	t["HostHostBusAdapter"] = reflect.TypeOf((*HostHostBusAdapter)(nil)).Elem()
    +}
    +
    +type HostHyperThreadScheduleInfo struct {
    +	DynamicData
    +
    +	Available bool `xml:"available"`
    +	Active    bool `xml:"active"`
    +	Config    bool `xml:"config"`
    +}
    +
    +func init() {
    +	t["HostHyperThreadScheduleInfo"] = reflect.TypeOf((*HostHyperThreadScheduleInfo)(nil)).Elem()
    +}
    +
    +type HostImageConfigGetAcceptance HostImageConfigGetAcceptanceRequestType
    +
    +func init() {
    +	t["HostImageConfigGetAcceptance"] = reflect.TypeOf((*HostImageConfigGetAcceptance)(nil)).Elem()
    +}
    +
    +type HostImageConfigGetAcceptanceRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["HostImageConfigGetAcceptanceRequestType"] = reflect.TypeOf((*HostImageConfigGetAcceptanceRequestType)(nil)).Elem()
    +}
    +
    +type HostImageConfigGetAcceptanceResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type HostImageConfigGetProfile HostImageConfigGetProfileRequestType
    +
    +func init() {
    +	t["HostImageConfigGetProfile"] = reflect.TypeOf((*HostImageConfigGetProfile)(nil)).Elem()
    +}
    +
    +type HostImageConfigGetProfileRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["HostImageConfigGetProfileRequestType"] = reflect.TypeOf((*HostImageConfigGetProfileRequestType)(nil)).Elem()
    +}
    +
    +type HostImageConfigGetProfileResponse struct {
    +	Returnval HostImageProfileSummary `xml:"returnval"`
    +}
    +
    +type HostImageProfileSummary struct {
    +	DynamicData
    +
    +	Name   string `xml:"name"`
    +	Vendor string `xml:"vendor"`
    +}
    +
    +func init() {
    +	t["HostImageProfileSummary"] = reflect.TypeOf((*HostImageProfileSummary)(nil)).Elem()
    +}
    +
    +type HostInAuditModeEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostInAuditModeEvent"] = reflect.TypeOf((*HostInAuditModeEvent)(nil)).Elem()
    +}
    +
    +type HostInDomain struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["HostInDomain"] = reflect.TypeOf((*HostInDomain)(nil)).Elem()
    +}
    +
    +type HostInDomainFault HostInDomain
    +
    +func init() {
    +	t["HostInDomainFault"] = reflect.TypeOf((*HostInDomainFault)(nil)).Elem()
    +}
    +
    +type HostIncompatibleForFaultTolerance struct {
    +	VmFaultToleranceIssue
    +
    +	HostName string `xml:"hostName,omitempty"`
    +	Reason   string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIncompatibleForFaultTolerance"] = reflect.TypeOf((*HostIncompatibleForFaultTolerance)(nil)).Elem()
    +}
    +
    +type HostIncompatibleForFaultToleranceFault HostIncompatibleForFaultTolerance
    +
    +func init() {
    +	t["HostIncompatibleForFaultToleranceFault"] = reflect.TypeOf((*HostIncompatibleForFaultToleranceFault)(nil)).Elem()
    +}
    +
    +type HostIncompatibleForRecordReplay struct {
    +	VimFault
    +
    +	HostName string `xml:"hostName,omitempty"`
    +	Reason   string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIncompatibleForRecordReplay"] = reflect.TypeOf((*HostIncompatibleForRecordReplay)(nil)).Elem()
    +}
    +
    +type HostIncompatibleForRecordReplayFault HostIncompatibleForRecordReplay
    +
    +func init() {
    +	t["HostIncompatibleForRecordReplayFault"] = reflect.TypeOf((*HostIncompatibleForRecordReplayFault)(nil)).Elem()
    +}
    +
    +type HostInflateDiskRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostInflateDiskRequestType"] = reflect.TypeOf((*HostInflateDiskRequestType)(nil)).Elem()
    +}
    +
    +type HostInflateDisk_Task HostInflateDiskRequestType
    +
    +func init() {
    +	t["HostInflateDisk_Task"] = reflect.TypeOf((*HostInflateDisk_Task)(nil)).Elem()
    +}
    +
    +type HostInflateDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostInternetScsiHba struct {
    +	HostHostBusAdapter
    +
    +	IsSoftwareBased            bool                                          `xml:"isSoftwareBased"`
    +	CanBeDisabled              *bool                                         `xml:"canBeDisabled"`
    +	NetworkBindingSupport      HostInternetScsiHbaNetworkBindingSupportType  `xml:"networkBindingSupport,omitempty"`
    +	DiscoveryCapabilities      HostInternetScsiHbaDiscoveryCapabilities      `xml:"discoveryCapabilities"`
    +	DiscoveryProperties        HostInternetScsiHbaDiscoveryProperties        `xml:"discoveryProperties"`
    +	AuthenticationCapabilities HostInternetScsiHbaAuthenticationCapabilities `xml:"authenticationCapabilities"`
    +	AuthenticationProperties   HostInternetScsiHbaAuthenticationProperties   `xml:"authenticationProperties"`
    +	DigestCapabilities         *HostInternetScsiHbaDigestCapabilities        `xml:"digestCapabilities,omitempty"`
    +	DigestProperties           *HostInternetScsiHbaDigestProperties          `xml:"digestProperties,omitempty"`
    +	IpCapabilities             HostInternetScsiHbaIPCapabilities             `xml:"ipCapabilities"`
    +	IpProperties               HostInternetScsiHbaIPProperties               `xml:"ipProperties"`
    +	SupportedAdvancedOptions   []OptionDef                                   `xml:"supportedAdvancedOptions,omitempty"`
    +	AdvancedOptions            []HostInternetScsiHbaParamValue               `xml:"advancedOptions,omitempty"`
    +	IScsiName                  string                                        `xml:"iScsiName"`
    +	IScsiAlias                 string                                        `xml:"iScsiAlias,omitempty"`
    +	ConfiguredSendTarget       []HostInternetScsiHbaSendTarget               `xml:"configuredSendTarget,omitempty"`
    +	ConfiguredStaticTarget     []HostInternetScsiHbaStaticTarget             `xml:"configuredStaticTarget,omitempty"`
    +	MaxSpeedMb                 int32                                         `xml:"maxSpeedMb,omitempty"`
    +	CurrentSpeedMb             int32                                         `xml:"currentSpeedMb,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHba"] = reflect.TypeOf((*HostInternetScsiHba)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaAuthenticationCapabilities struct {
    +	DynamicData
    +
    +	ChapAuthSettable         bool  `xml:"chapAuthSettable"`
    +	Krb5AuthSettable         bool  `xml:"krb5AuthSettable"`
    +	SrpAuthSettable          bool  `xml:"srpAuthSettable"`
    +	SpkmAuthSettable         bool  `xml:"spkmAuthSettable"`
    +	MutualChapSettable       *bool `xml:"mutualChapSettable"`
    +	TargetChapSettable       *bool `xml:"targetChapSettable"`
    +	TargetMutualChapSettable *bool `xml:"targetMutualChapSettable"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaAuthenticationCapabilities"] = reflect.TypeOf((*HostInternetScsiHbaAuthenticationCapabilities)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaAuthenticationProperties struct {
    +	DynamicData
    +
    +	ChapAuthEnabled              bool   `xml:"chapAuthEnabled"`
    +	ChapName                     string `xml:"chapName,omitempty"`
    +	ChapSecret                   string `xml:"chapSecret,omitempty"`
    +	ChapAuthenticationType       string `xml:"chapAuthenticationType,omitempty"`
    +	ChapInherited                *bool  `xml:"chapInherited"`
    +	MutualChapName               string `xml:"mutualChapName,omitempty"`
    +	MutualChapSecret             string `xml:"mutualChapSecret,omitempty"`
    +	MutualChapAuthenticationType string `xml:"mutualChapAuthenticationType,omitempty"`
    +	MutualChapInherited          *bool  `xml:"mutualChapInherited"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaAuthenticationProperties"] = reflect.TypeOf((*HostInternetScsiHbaAuthenticationProperties)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaDigestCapabilities struct {
    +	DynamicData
    +
    +	HeaderDigestSettable       *bool `xml:"headerDigestSettable"`
    +	DataDigestSettable         *bool `xml:"dataDigestSettable"`
    +	TargetHeaderDigestSettable *bool `xml:"targetHeaderDigestSettable"`
    +	TargetDataDigestSettable   *bool `xml:"targetDataDigestSettable"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaDigestCapabilities"] = reflect.TypeOf((*HostInternetScsiHbaDigestCapabilities)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaDigestProperties struct {
    +	DynamicData
    +
    +	HeaderDigestType      string `xml:"headerDigestType,omitempty"`
    +	HeaderDigestInherited *bool  `xml:"headerDigestInherited"`
    +	DataDigestType        string `xml:"dataDigestType,omitempty"`
    +	DataDigestInherited   *bool  `xml:"dataDigestInherited"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaDigestProperties"] = reflect.TypeOf((*HostInternetScsiHbaDigestProperties)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaDiscoveryCapabilities struct {
    +	DynamicData
    +
    +	ISnsDiscoverySettable         bool `xml:"iSnsDiscoverySettable"`
    +	SlpDiscoverySettable          bool `xml:"slpDiscoverySettable"`
    +	StaticTargetDiscoverySettable bool `xml:"staticTargetDiscoverySettable"`
    +	SendTargetsDiscoverySettable  bool `xml:"sendTargetsDiscoverySettable"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaDiscoveryCapabilities"] = reflect.TypeOf((*HostInternetScsiHbaDiscoveryCapabilities)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaDiscoveryProperties struct {
    +	DynamicData
    +
    +	ISnsDiscoveryEnabled         bool   `xml:"iSnsDiscoveryEnabled"`
    +	ISnsDiscoveryMethod          string `xml:"iSnsDiscoveryMethod,omitempty"`
    +	ISnsHost                     string `xml:"iSnsHost,omitempty"`
    +	SlpDiscoveryEnabled          bool   `xml:"slpDiscoveryEnabled"`
    +	SlpDiscoveryMethod           string `xml:"slpDiscoveryMethod,omitempty"`
    +	SlpHost                      string `xml:"slpHost,omitempty"`
    +	StaticTargetDiscoveryEnabled bool   `xml:"staticTargetDiscoveryEnabled"`
    +	SendTargetsDiscoveryEnabled  bool   `xml:"sendTargetsDiscoveryEnabled"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaDiscoveryProperties"] = reflect.TypeOf((*HostInternetScsiHbaDiscoveryProperties)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaIPCapabilities struct {
    +	DynamicData
    +
    +	AddressSettable                              bool  `xml:"addressSettable"`
    +	IpConfigurationMethodSettable                bool  `xml:"ipConfigurationMethodSettable"`
    +	SubnetMaskSettable                           bool  `xml:"subnetMaskSettable"`
    +	DefaultGatewaySettable                       bool  `xml:"defaultGatewaySettable"`
    +	PrimaryDnsServerAddressSettable              bool  `xml:"primaryDnsServerAddressSettable"`
    +	AlternateDnsServerAddressSettable            bool  `xml:"alternateDnsServerAddressSettable"`
    +	Ipv6Supported                                *bool `xml:"ipv6Supported"`
    +	ArpRedirectSettable                          *bool `xml:"arpRedirectSettable"`
    +	MtuSettable                                  *bool `xml:"mtuSettable"`
    +	HostNameAsTargetAddress                      *bool `xml:"hostNameAsTargetAddress"`
    +	NameAliasSettable                            *bool `xml:"nameAliasSettable"`
    +	Ipv4EnableSettable                           *bool `xml:"ipv4EnableSettable"`
    +	Ipv6EnableSettable                           *bool `xml:"ipv6EnableSettable"`
    +	Ipv6PrefixLengthSettable                     *bool `xml:"ipv6PrefixLengthSettable"`
    +	Ipv6PrefixLength                             int32 `xml:"ipv6PrefixLength,omitempty"`
    +	Ipv6DhcpConfigurationSettable                *bool `xml:"ipv6DhcpConfigurationSettable"`
    +	Ipv6LinkLocalAutoConfigurationSettable       *bool `xml:"ipv6LinkLocalAutoConfigurationSettable"`
    +	Ipv6RouterAdvertisementConfigurationSettable *bool `xml:"ipv6RouterAdvertisementConfigurationSettable"`
    +	Ipv6DefaultGatewaySettable                   *bool `xml:"ipv6DefaultGatewaySettable"`
    +	Ipv6MaxStaticAddressesSupported              int32 `xml:"ipv6MaxStaticAddressesSupported,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaIPCapabilities"] = reflect.TypeOf((*HostInternetScsiHbaIPCapabilities)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaIPProperties struct {
    +	DynamicData
    +
    +	Mac                       string                             `xml:"mac,omitempty"`
    +	Address                   string                             `xml:"address,omitempty"`
    +	DhcpConfigurationEnabled  bool                               `xml:"dhcpConfigurationEnabled"`
    +	SubnetMask                string                             `xml:"subnetMask,omitempty"`
    +	DefaultGateway            string                             `xml:"defaultGateway,omitempty"`
    +	PrimaryDnsServerAddress   string                             `xml:"primaryDnsServerAddress,omitempty"`
    +	AlternateDnsServerAddress string                             `xml:"alternateDnsServerAddress,omitempty"`
    +	Ipv6Address               string                             `xml:"ipv6Address,omitempty"`
    +	Ipv6SubnetMask            string                             `xml:"ipv6SubnetMask,omitempty"`
    +	Ipv6DefaultGateway        string                             `xml:"ipv6DefaultGateway,omitempty"`
    +	ArpRedirectEnabled        *bool                              `xml:"arpRedirectEnabled"`
    +	Mtu                       int32                              `xml:"mtu,omitempty"`
    +	JumboFramesEnabled        *bool                              `xml:"jumboFramesEnabled"`
    +	Ipv4Enabled               *bool                              `xml:"ipv4Enabled"`
    +	Ipv6Enabled               *bool                              `xml:"ipv6Enabled"`
    +	Ipv6properties            *HostInternetScsiHbaIPv6Properties `xml:"ipv6properties,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaIPProperties"] = reflect.TypeOf((*HostInternetScsiHbaIPProperties)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaIPv6Properties struct {
    +	DynamicData
    +
    +	IscsiIpv6Address                            []HostInternetScsiHbaIscsiIpv6Address `xml:"iscsiIpv6Address,omitempty"`
    +	Ipv6DhcpConfigurationEnabled                *bool                                 `xml:"ipv6DhcpConfigurationEnabled"`
    +	Ipv6LinkLocalAutoConfigurationEnabled       *bool                                 `xml:"ipv6LinkLocalAutoConfigurationEnabled"`
    +	Ipv6RouterAdvertisementConfigurationEnabled *bool                                 `xml:"ipv6RouterAdvertisementConfigurationEnabled"`
    +	Ipv6DefaultGateway                          string                                `xml:"ipv6DefaultGateway,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaIPv6Properties"] = reflect.TypeOf((*HostInternetScsiHbaIPv6Properties)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaIscsiIpv6Address struct {
    +	DynamicData
    +
    +	Address      string `xml:"address"`
    +	PrefixLength int32  `xml:"prefixLength"`
    +	Origin       string `xml:"origin"`
    +	Operation    string `xml:"operation,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaIscsiIpv6Address"] = reflect.TypeOf((*HostInternetScsiHbaIscsiIpv6Address)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaParamValue struct {
    +	OptionValue
    +
    +	IsInherited *bool `xml:"isInherited"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaParamValue"] = reflect.TypeOf((*HostInternetScsiHbaParamValue)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaSendTarget struct {
    +	DynamicData
    +
    +	Address                  string                                       `xml:"address"`
    +	Port                     int32                                        `xml:"port,omitempty"`
    +	AuthenticationProperties *HostInternetScsiHbaAuthenticationProperties `xml:"authenticationProperties,omitempty"`
    +	DigestProperties         *HostInternetScsiHbaDigestProperties         `xml:"digestProperties,omitempty"`
    +	SupportedAdvancedOptions []OptionDef                                  `xml:"supportedAdvancedOptions,omitempty"`
    +	AdvancedOptions          []HostInternetScsiHbaParamValue              `xml:"advancedOptions,omitempty"`
    +	Parent                   string                                       `xml:"parent,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaSendTarget"] = reflect.TypeOf((*HostInternetScsiHbaSendTarget)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaStaticTarget struct {
    +	DynamicData
    +
    +	Address                  string                                       `xml:"address"`
    +	Port                     int32                                        `xml:"port,omitempty"`
    +	IScsiName                string                                       `xml:"iScsiName"`
    +	DiscoveryMethod          string                                       `xml:"discoveryMethod,omitempty"`
    +	AuthenticationProperties *HostInternetScsiHbaAuthenticationProperties `xml:"authenticationProperties,omitempty"`
    +	DigestProperties         *HostInternetScsiHbaDigestProperties         `xml:"digestProperties,omitempty"`
    +	SupportedAdvancedOptions []OptionDef                                  `xml:"supportedAdvancedOptions,omitempty"`
    +	AdvancedOptions          []HostInternetScsiHbaParamValue              `xml:"advancedOptions,omitempty"`
    +	Parent                   string                                       `xml:"parent,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaStaticTarget"] = reflect.TypeOf((*HostInternetScsiHbaStaticTarget)(nil)).Elem()
    +}
    +
    +type HostInternetScsiHbaTargetSet struct {
    +	DynamicData
    +
    +	StaticTargets []HostInternetScsiHbaStaticTarget `xml:"staticTargets,omitempty"`
    +	SendTargets   []HostInternetScsiHbaSendTarget   `xml:"sendTargets,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiHbaTargetSet"] = reflect.TypeOf((*HostInternetScsiHbaTargetSet)(nil)).Elem()
    +}
    +
    +type HostInternetScsiTargetTransport struct {
    +	HostTargetTransport
    +
    +	IScsiName  string   `xml:"iScsiName"`
    +	IScsiAlias string   `xml:"iScsiAlias"`
    +	Address    []string `xml:"address,omitempty"`
    +}
    +
    +func init() {
    +	t["HostInternetScsiTargetTransport"] = reflect.TypeOf((*HostInternetScsiTargetTransport)(nil)).Elem()
    +}
    +
    +type HostInventoryFull struct {
    +	NotEnoughLicenses
    +
    +	Capacity int32 `xml:"capacity"`
    +}
    +
    +func init() {
    +	t["HostInventoryFull"] = reflect.TypeOf((*HostInventoryFull)(nil)).Elem()
    +}
    +
    +type HostInventoryFullEvent struct {
    +	LicenseEvent
    +
    +	Capacity int32 `xml:"capacity"`
    +}
    +
    +func init() {
    +	t["HostInventoryFullEvent"] = reflect.TypeOf((*HostInventoryFullEvent)(nil)).Elem()
    +}
    +
    +type HostInventoryFullFault HostInventoryFull
    +
    +func init() {
    +	t["HostInventoryFullFault"] = reflect.TypeOf((*HostInventoryFullFault)(nil)).Elem()
    +}
    +
    +type HostInventoryUnreadableEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["HostInventoryUnreadableEvent"] = reflect.TypeOf((*HostInventoryUnreadableEvent)(nil)).Elem()
    +}
    +
    +type HostIoFilterInfo struct {
    +	IoFilterInfo
    +
    +	Available bool `xml:"available"`
    +}
    +
    +func init() {
    +	t["HostIoFilterInfo"] = reflect.TypeOf((*HostIoFilterInfo)(nil)).Elem()
    +}
    +
    +type HostIpChangedEvent struct {
    +	HostEvent
    +
    +	OldIP string `xml:"oldIP"`
    +	NewIP string `xml:"newIP"`
    +}
    +
    +func init() {
    +	t["HostIpChangedEvent"] = reflect.TypeOf((*HostIpChangedEvent)(nil)).Elem()
    +}
    +
    +type HostIpConfig struct {
    +	DynamicData
    +
    +	Dhcp       bool                                  `xml:"dhcp"`
    +	IpAddress  string                                `xml:"ipAddress,omitempty"`
    +	SubnetMask string                                `xml:"subnetMask,omitempty"`
    +	IpV6Config *HostIpConfigIpV6AddressConfiguration `xml:"ipV6Config,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIpConfig"] = reflect.TypeOf((*HostIpConfig)(nil)).Elem()
    +}
    +
    +type HostIpConfigIpV6Address struct {
    +	DynamicData
    +
    +	IpAddress    string     `xml:"ipAddress"`
    +	PrefixLength int32      `xml:"prefixLength"`
    +	Origin       string     `xml:"origin,omitempty"`
    +	DadState     string     `xml:"dadState,omitempty"`
    +	Lifetime     *time.Time `xml:"lifetime"`
    +	Operation    string     `xml:"operation,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIpConfigIpV6Address"] = reflect.TypeOf((*HostIpConfigIpV6Address)(nil)).Elem()
    +}
    +
    +type HostIpConfigIpV6AddressConfiguration struct {
    +	DynamicData
    +
    +	IpV6Address              []HostIpConfigIpV6Address `xml:"ipV6Address,omitempty"`
    +	AutoConfigurationEnabled *bool                     `xml:"autoConfigurationEnabled"`
    +	DhcpV6Enabled            *bool                     `xml:"dhcpV6Enabled"`
    +}
    +
    +func init() {
    +	t["HostIpConfigIpV6AddressConfiguration"] = reflect.TypeOf((*HostIpConfigIpV6AddressConfiguration)(nil)).Elem()
    +}
    +
    +type HostIpInconsistentEvent struct {
    +	HostEvent
    +
    +	IpAddress  string `xml:"ipAddress"`
    +	IpAddress2 string `xml:"ipAddress2"`
    +}
    +
    +func init() {
    +	t["HostIpInconsistentEvent"] = reflect.TypeOf((*HostIpInconsistentEvent)(nil)).Elem()
    +}
    +
    +type HostIpRouteConfig struct {
    +	DynamicData
    +
    +	DefaultGateway     string `xml:"defaultGateway,omitempty"`
    +	GatewayDevice      string `xml:"gatewayDevice,omitempty"`
    +	IpV6DefaultGateway string `xml:"ipV6DefaultGateway,omitempty"`
    +	IpV6GatewayDevice  string `xml:"ipV6GatewayDevice,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIpRouteConfig"] = reflect.TypeOf((*HostIpRouteConfig)(nil)).Elem()
    +}
    +
    +type HostIpRouteConfigSpec struct {
    +	HostIpRouteConfig
    +
    +	GatewayDeviceConnection     *HostVirtualNicConnection `xml:"gatewayDeviceConnection,omitempty"`
    +	IpV6GatewayDeviceConnection *HostVirtualNicConnection `xml:"ipV6GatewayDeviceConnection,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIpRouteConfigSpec"] = reflect.TypeOf((*HostIpRouteConfigSpec)(nil)).Elem()
    +}
    +
    +type HostIpRouteEntry struct {
    +	DynamicData
    +
    +	Network      string `xml:"network"`
    +	PrefixLength int32  `xml:"prefixLength"`
    +	Gateway      string `xml:"gateway"`
    +	DeviceName   string `xml:"deviceName,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIpRouteEntry"] = reflect.TypeOf((*HostIpRouteEntry)(nil)).Elem()
    +}
    +
    +type HostIpRouteOp struct {
    +	DynamicData
    +
    +	ChangeOperation string           `xml:"changeOperation"`
    +	Route           HostIpRouteEntry `xml:"route"`
    +}
    +
    +func init() {
    +	t["HostIpRouteOp"] = reflect.TypeOf((*HostIpRouteOp)(nil)).Elem()
    +}
    +
    +type HostIpRouteTableConfig struct {
    +	DynamicData
    +
    +	IpRoute   []HostIpRouteOp `xml:"ipRoute,omitempty"`
    +	Ipv6Route []HostIpRouteOp `xml:"ipv6Route,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIpRouteTableConfig"] = reflect.TypeOf((*HostIpRouteTableConfig)(nil)).Elem()
    +}
    +
    +type HostIpRouteTableInfo struct {
    +	DynamicData
    +
    +	IpRoute   []HostIpRouteEntry `xml:"ipRoute,omitempty"`
    +	Ipv6Route []HostIpRouteEntry `xml:"ipv6Route,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIpRouteTableInfo"] = reflect.TypeOf((*HostIpRouteTableInfo)(nil)).Elem()
    +}
    +
    +type HostIpToShortNameFailedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostIpToShortNameFailedEvent"] = reflect.TypeOf((*HostIpToShortNameFailedEvent)(nil)).Elem()
    +}
    +
    +type HostIpmiInfo struct {
    +	DynamicData
    +
    +	BmcIpAddress  string `xml:"bmcIpAddress,omitempty"`
    +	BmcMacAddress string `xml:"bmcMacAddress,omitempty"`
    +	Login         string `xml:"login,omitempty"`
    +	Password      string `xml:"password,omitempty"`
    +}
    +
    +func init() {
    +	t["HostIpmiInfo"] = reflect.TypeOf((*HostIpmiInfo)(nil)).Elem()
    +}
    +
    +type HostIsolationIpPingFailedEvent struct {
    +	HostDasEvent
    +
    +	IsolationIp string `xml:"isolationIp"`
    +}
    +
    +func init() {
    +	t["HostIsolationIpPingFailedEvent"] = reflect.TypeOf((*HostIsolationIpPingFailedEvent)(nil)).Elem()
    +}
    +
    +type HostLicensableResourceInfo struct {
    +	DynamicData
    +
    +	Resource []KeyAnyValue `xml:"resource"`
    +}
    +
    +func init() {
    +	t["HostLicensableResourceInfo"] = reflect.TypeOf((*HostLicensableResourceInfo)(nil)).Elem()
    +}
    +
    +type HostLicenseConnectInfo struct {
    +	DynamicData
    +
    +	License    LicenseManagerLicenseInfo    `xml:"license"`
    +	Evaluation LicenseManagerEvaluationInfo `xml:"evaluation"`
    +	Resource   *HostLicensableResourceInfo  `xml:"resource,omitempty"`
    +}
    +
    +func init() {
    +	t["HostLicenseConnectInfo"] = reflect.TypeOf((*HostLicenseConnectInfo)(nil)).Elem()
    +}
    +
    +type HostLicenseExpiredEvent struct {
    +	LicenseEvent
    +}
    +
    +func init() {
    +	t["HostLicenseExpiredEvent"] = reflect.TypeOf((*HostLicenseExpiredEvent)(nil)).Elem()
    +}
    +
    +type HostLicenseSpec struct {
    +	DynamicData
    +
    +	Source             BaseLicenseSource `xml:"source,omitempty,typeattr"`
    +	EditionKey         string            `xml:"editionKey,omitempty"`
    +	DisabledFeatureKey []string          `xml:"disabledFeatureKey,omitempty"`
    +	EnabledFeatureKey  []string          `xml:"enabledFeatureKey,omitempty"`
    +}
    +
    +func init() {
    +	t["HostLicenseSpec"] = reflect.TypeOf((*HostLicenseSpec)(nil)).Elem()
    +}
    +
    +type HostListSummary struct {
    +	DynamicData
    +
    +	Host               *ManagedObjectReference        `xml:"host,omitempty"`
    +	Hardware           *HostHardwareSummary           `xml:"hardware,omitempty"`
    +	Runtime            *HostRuntimeInfo               `xml:"runtime,omitempty"`
    +	Config             HostConfigSummary              `xml:"config"`
    +	QuickStats         HostListSummaryQuickStats      `xml:"quickStats"`
    +	OverallStatus      ManagedEntityStatus            `xml:"overallStatus"`
    +	RebootRequired     bool                           `xml:"rebootRequired"`
    +	CustomValue        []BaseCustomFieldValue         `xml:"customValue,omitempty,typeattr"`
    +	ManagementServerIp string                         `xml:"managementServerIp,omitempty"`
    +	MaxEVCModeKey      string                         `xml:"maxEVCModeKey,omitempty"`
    +	CurrentEVCModeKey  string                         `xml:"currentEVCModeKey,omitempty"`
    +	Gateway            *HostListSummaryGatewaySummary `xml:"gateway,omitempty"`
    +	TpmAttestation     *HostTpmAttestationInfo        `xml:"tpmAttestation,omitempty"`
    +}
    +
    +func init() {
    +	t["HostListSummary"] = reflect.TypeOf((*HostListSummary)(nil)).Elem()
    +}
    +
    +type HostListSummaryGatewaySummary struct {
    +	DynamicData
    +
    +	GatewayType string `xml:"gatewayType"`
    +	GatewayId   string `xml:"gatewayId"`
    +}
    +
    +func init() {
    +	t["HostListSummaryGatewaySummary"] = reflect.TypeOf((*HostListSummaryGatewaySummary)(nil)).Elem()
    +}
    +
    +type HostListSummaryQuickStats struct {
    +	DynamicData
    +
    +	OverallCpuUsage           int32 `xml:"overallCpuUsage,omitempty"`
    +	OverallMemoryUsage        int32 `xml:"overallMemoryUsage,omitempty"`
    +	DistributedCpuFairness    int32 `xml:"distributedCpuFairness,omitempty"`
    +	DistributedMemoryFairness int32 `xml:"distributedMemoryFairness,omitempty"`
    +	AvailablePMemCapacity     int32 `xml:"availablePMemCapacity,omitempty"`
    +	Uptime                    int32 `xml:"uptime,omitempty"`
    +}
    +
    +func init() {
    +	t["HostListSummaryQuickStats"] = reflect.TypeOf((*HostListSummaryQuickStats)(nil)).Elem()
    +}
    +
    +type HostListVStorageObject HostListVStorageObjectRequestType
    +
    +func init() {
    +	t["HostListVStorageObject"] = reflect.TypeOf((*HostListVStorageObject)(nil)).Elem()
    +}
    +
    +type HostListVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostListVStorageObjectRequestType"] = reflect.TypeOf((*HostListVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type HostListVStorageObjectResponse struct {
    +	Returnval []ID `xml:"returnval,omitempty"`
    +}
    +
    +type HostLocalAuthenticationInfo struct {
    +	HostAuthenticationStoreInfo
    +}
    +
    +func init() {
    +	t["HostLocalAuthenticationInfo"] = reflect.TypeOf((*HostLocalAuthenticationInfo)(nil)).Elem()
    +}
    +
    +type HostLocalFileSystemVolume struct {
    +	HostFileSystemVolume
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["HostLocalFileSystemVolume"] = reflect.TypeOf((*HostLocalFileSystemVolume)(nil)).Elem()
    +}
    +
    +type HostLocalFileSystemVolumeSpec struct {
    +	DynamicData
    +
    +	Device    string `xml:"device"`
    +	LocalPath string `xml:"localPath"`
    +}
    +
    +func init() {
    +	t["HostLocalFileSystemVolumeSpec"] = reflect.TypeOf((*HostLocalFileSystemVolumeSpec)(nil)).Elem()
    +}
    +
    +type HostLocalPortCreatedEvent struct {
    +	DvsEvent
    +
    +	HostLocalPort DVSHostLocalPortInfo `xml:"hostLocalPort"`
    +}
    +
    +func init() {
    +	t["HostLocalPortCreatedEvent"] = reflect.TypeOf((*HostLocalPortCreatedEvent)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerDiskLayoutSpec struct {
    +	DynamicData
    +
    +	ControllerType string `xml:"controllerType"`
    +	BusNumber      int32  `xml:"busNumber"`
    +	UnitNumber     *int32 `xml:"unitNumber"`
    +	SrcFilename    string `xml:"srcFilename"`
    +	DstFilename    string `xml:"dstFilename"`
    +}
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerDiskLayoutSpec"] = reflect.TypeOf((*HostLowLevelProvisioningManagerDiskLayoutSpec)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerFileDeleteResult struct {
    +	DynamicData
    +
    +	FileName string               `xml:"fileName"`
    +	Fault    LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerFileDeleteResult"] = reflect.TypeOf((*HostLowLevelProvisioningManagerFileDeleteResult)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerFileDeleteSpec struct {
    +	DynamicData
    +
    +	FileName string `xml:"fileName"`
    +	FileType string `xml:"fileType"`
    +}
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerFileDeleteSpec"] = reflect.TypeOf((*HostLowLevelProvisioningManagerFileDeleteSpec)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerFileReserveResult struct {
    +	DynamicData
    +
    +	BaseName     string `xml:"baseName"`
    +	ParentDir    string `xml:"parentDir"`
    +	ReservedName string `xml:"reservedName"`
    +}
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerFileReserveResult"] = reflect.TypeOf((*HostLowLevelProvisioningManagerFileReserveResult)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerFileReserveSpec struct {
    +	DynamicData
    +
    +	BaseName       string `xml:"baseName"`
    +	ParentDir      string `xml:"parentDir"`
    +	FileType       string `xml:"fileType"`
    +	StorageProfile string `xml:"storageProfile"`
    +}
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerFileReserveSpec"] = reflect.TypeOf((*HostLowLevelProvisioningManagerFileReserveSpec)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerSnapshotLayoutSpec struct {
    +	DynamicData
    +
    +	Id          int32                                           `xml:"id"`
    +	SrcFilename string                                          `xml:"srcFilename"`
    +	DstFilename string                                          `xml:"dstFilename"`
    +	Disk        []HostLowLevelProvisioningManagerDiskLayoutSpec `xml:"disk,omitempty"`
    +}
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerSnapshotLayoutSpec"] = reflect.TypeOf((*HostLowLevelProvisioningManagerSnapshotLayoutSpec)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerVmMigrationStatus struct {
    +	DynamicData
    +
    +	MigrationId          int64  `xml:"migrationId"`
    +	Type                 string `xml:"type"`
    +	Source               bool   `xml:"source"`
    +	ConsideredSuccessful bool   `xml:"consideredSuccessful"`
    +}
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerVmMigrationStatus"] = reflect.TypeOf((*HostLowLevelProvisioningManagerVmMigrationStatus)(nil)).Elem()
    +}
    +
    +type HostLowLevelProvisioningManagerVmRecoveryInfo struct {
    +	DynamicData
    +
    +	Version      string                       `xml:"version"`
    +	BiosUUID     string                       `xml:"biosUUID"`
    +	InstanceUUID string                       `xml:"instanceUUID"`
    +	FtInfo       BaseFaultToleranceConfigInfo `xml:"ftInfo,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostLowLevelProvisioningManagerVmRecoveryInfo"] = reflect.TypeOf((*HostLowLevelProvisioningManagerVmRecoveryInfo)(nil)).Elem()
    +}
    +
    +type HostMaintenanceSpec struct {
    +	DynamicData
    +
    +	VsanMode *VsanHostDecommissionMode `xml:"vsanMode,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMaintenanceSpec"] = reflect.TypeOf((*HostMaintenanceSpec)(nil)).Elem()
    +}
    +
    +type HostMemberHealthCheckResult struct {
    +	DynamicData
    +
    +	Summary string `xml:"summary,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMemberHealthCheckResult"] = reflect.TypeOf((*HostMemberHealthCheckResult)(nil)).Elem()
    +}
    +
    +type HostMemberRuntimeInfo struct {
    +	DynamicData
    +
    +	Host              ManagedObjectReference            `xml:"host"`
    +	Status            string                            `xml:"status,omitempty"`
    +	StatusDetail      string                            `xml:"statusDetail,omitempty"`
    +	HealthCheckResult []BaseHostMemberHealthCheckResult `xml:"healthCheckResult,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostMemberRuntimeInfo"] = reflect.TypeOf((*HostMemberRuntimeInfo)(nil)).Elem()
    +}
    +
    +type HostMemberUplinkHealthCheckResult struct {
    +	HostMemberHealthCheckResult
    +
    +	UplinkPortKey string `xml:"uplinkPortKey"`
    +}
    +
    +func init() {
    +	t["HostMemberUplinkHealthCheckResult"] = reflect.TypeOf((*HostMemberUplinkHealthCheckResult)(nil)).Elem()
    +}
    +
    +type HostMemoryProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["HostMemoryProfile"] = reflect.TypeOf((*HostMemoryProfile)(nil)).Elem()
    +}
    +
    +type HostMemorySpec struct {
    +	DynamicData
    +
    +	ServiceConsoleReservation int64 `xml:"serviceConsoleReservation,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMemorySpec"] = reflect.TypeOf((*HostMemorySpec)(nil)).Elem()
    +}
    +
    +type HostMissingNetworksEvent struct {
    +	HostDasEvent
    +
    +	Ips string `xml:"ips,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMissingNetworksEvent"] = reflect.TypeOf((*HostMissingNetworksEvent)(nil)).Elem()
    +}
    +
    +type HostMonitoringStateChangedEvent struct {
    +	ClusterEvent
    +
    +	State     string `xml:"state"`
    +	PrevState string `xml:"prevState,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMonitoringStateChangedEvent"] = reflect.TypeOf((*HostMonitoringStateChangedEvent)(nil)).Elem()
    +}
    +
    +type HostMountInfo struct {
    +	DynamicData
    +
    +	Path               string `xml:"path,omitempty"`
    +	AccessMode         string `xml:"accessMode"`
    +	Mounted            *bool  `xml:"mounted"`
    +	Accessible         *bool  `xml:"accessible"`
    +	InaccessibleReason string `xml:"inaccessibleReason,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMountInfo"] = reflect.TypeOf((*HostMountInfo)(nil)).Elem()
    +}
    +
    +type HostMultipathInfo struct {
    +	DynamicData
    +
    +	Lun []HostMultipathInfoLogicalUnit `xml:"lun,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMultipathInfo"] = reflect.TypeOf((*HostMultipathInfo)(nil)).Elem()
    +}
    +
    +type HostMultipathInfoFixedLogicalUnitPolicy struct {
    +	HostMultipathInfoLogicalUnitPolicy
    +
    +	Prefer string `xml:"prefer"`
    +}
    +
    +func init() {
    +	t["HostMultipathInfoFixedLogicalUnitPolicy"] = reflect.TypeOf((*HostMultipathInfoFixedLogicalUnitPolicy)(nil)).Elem()
    +}
    +
    +type HostMultipathInfoLogicalUnit struct {
    +	DynamicData
    +
    +	Key                    string                                              `xml:"key"`
    +	Id                     string                                              `xml:"id"`
    +	Lun                    string                                              `xml:"lun"`
    +	Path                   []HostMultipathInfoPath                             `xml:"path"`
    +	Policy                 BaseHostMultipathInfoLogicalUnitPolicy              `xml:"policy,typeattr"`
    +	StorageArrayTypePolicy *HostMultipathInfoLogicalUnitStorageArrayTypePolicy `xml:"storageArrayTypePolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMultipathInfoLogicalUnit"] = reflect.TypeOf((*HostMultipathInfoLogicalUnit)(nil)).Elem()
    +}
    +
    +type HostMultipathInfoLogicalUnitPolicy struct {
    +	DynamicData
    +
    +	Policy string `xml:"policy"`
    +}
    +
    +func init() {
    +	t["HostMultipathInfoLogicalUnitPolicy"] = reflect.TypeOf((*HostMultipathInfoLogicalUnitPolicy)(nil)).Elem()
    +}
    +
    +type HostMultipathInfoLogicalUnitStorageArrayTypePolicy struct {
    +	DynamicData
    +
    +	Policy string `xml:"policy"`
    +}
    +
    +func init() {
    +	t["HostMultipathInfoLogicalUnitStorageArrayTypePolicy"] = reflect.TypeOf((*HostMultipathInfoLogicalUnitStorageArrayTypePolicy)(nil)).Elem()
    +}
    +
    +type HostMultipathInfoPath struct {
    +	DynamicData
    +
    +	Key           string                  `xml:"key"`
    +	Name          string                  `xml:"name"`
    +	PathState     string                  `xml:"pathState"`
    +	State         string                  `xml:"state,omitempty"`
    +	IsWorkingPath *bool                   `xml:"isWorkingPath"`
    +	Adapter       string                  `xml:"adapter"`
    +	Lun           string                  `xml:"lun"`
    +	Transport     BaseHostTargetTransport `xml:"transport,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostMultipathInfoPath"] = reflect.TypeOf((*HostMultipathInfoPath)(nil)).Elem()
    +}
    +
    +type HostMultipathStateInfo struct {
    +	DynamicData
    +
    +	Path []HostMultipathStateInfoPath `xml:"path,omitempty"`
    +}
    +
    +func init() {
    +	t["HostMultipathStateInfo"] = reflect.TypeOf((*HostMultipathStateInfo)(nil)).Elem()
    +}
    +
    +type HostMultipathStateInfoPath struct {
    +	DynamicData
    +
    +	Name      string `xml:"name"`
    +	PathState string `xml:"pathState"`
    +}
    +
    +func init() {
    +	t["HostMultipathStateInfoPath"] = reflect.TypeOf((*HostMultipathStateInfoPath)(nil)).Elem()
    +}
    +
    +type HostNasVolume struct {
    +	HostFileSystemVolume
    +
    +	RemoteHost       string   `xml:"remoteHost"`
    +	RemotePath       string   `xml:"remotePath"`
    +	UserName         string   `xml:"userName,omitempty"`
    +	RemoteHostNames  []string `xml:"remoteHostNames,omitempty"`
    +	SecurityType     string   `xml:"securityType,omitempty"`
    +	ProtocolEndpoint *bool    `xml:"protocolEndpoint"`
    +}
    +
    +func init() {
    +	t["HostNasVolume"] = reflect.TypeOf((*HostNasVolume)(nil)).Elem()
    +}
    +
    +type HostNasVolumeConfig struct {
    +	DynamicData
    +
    +	ChangeOperation string             `xml:"changeOperation,omitempty"`
    +	Spec            *HostNasVolumeSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNasVolumeConfig"] = reflect.TypeOf((*HostNasVolumeConfig)(nil)).Elem()
    +}
    +
    +type HostNasVolumeSpec struct {
    +	DynamicData
    +
    +	RemoteHost      string   `xml:"remoteHost"`
    +	RemotePath      string   `xml:"remotePath"`
    +	LocalPath       string   `xml:"localPath"`
    +	AccessMode      string   `xml:"accessMode"`
    +	Type            string   `xml:"type,omitempty"`
    +	UserName        string   `xml:"userName,omitempty"`
    +	Password        string   `xml:"password,omitempty"`
    +	RemoteHostNames []string `xml:"remoteHostNames,omitempty"`
    +	SecurityType    string   `xml:"securityType,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNasVolumeSpec"] = reflect.TypeOf((*HostNasVolumeSpec)(nil)).Elem()
    +}
    +
    +type HostNasVolumeUserInfo struct {
    +	DynamicData
    +
    +	User string `xml:"user"`
    +}
    +
    +func init() {
    +	t["HostNasVolumeUserInfo"] = reflect.TypeOf((*HostNasVolumeUserInfo)(nil)).Elem()
    +}
    +
    +type HostNatService struct {
    +	DynamicData
    +
    +	Key  string             `xml:"key"`
    +	Spec HostNatServiceSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostNatService"] = reflect.TypeOf((*HostNatService)(nil)).Elem()
    +}
    +
    +type HostNatServiceConfig struct {
    +	DynamicData
    +
    +	ChangeOperation string             `xml:"changeOperation,omitempty"`
    +	Key             string             `xml:"key"`
    +	Spec            HostNatServiceSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostNatServiceConfig"] = reflect.TypeOf((*HostNatServiceConfig)(nil)).Elem()
    +}
    +
    +type HostNatServiceNameServiceSpec struct {
    +	DynamicData
    +
    +	DnsAutoDetect bool     `xml:"dnsAutoDetect"`
    +	DnsPolicy     string   `xml:"dnsPolicy"`
    +	DnsRetries    int32    `xml:"dnsRetries"`
    +	DnsTimeout    int32    `xml:"dnsTimeout"`
    +	DnsNameServer []string `xml:"dnsNameServer,omitempty"`
    +	NbdsTimeout   int32    `xml:"nbdsTimeout"`
    +	NbnsRetries   int32    `xml:"nbnsRetries"`
    +	NbnsTimeout   int32    `xml:"nbnsTimeout"`
    +}
    +
    +func init() {
    +	t["HostNatServiceNameServiceSpec"] = reflect.TypeOf((*HostNatServiceNameServiceSpec)(nil)).Elem()
    +}
    +
    +type HostNatServicePortForwardSpec struct {
    +	DynamicData
    +
    +	Type           string `xml:"type"`
    +	Name           string `xml:"name"`
    +	HostPort       int32  `xml:"hostPort"`
    +	GuestPort      int32  `xml:"guestPort"`
    +	GuestIpAddress string `xml:"guestIpAddress"`
    +}
    +
    +func init() {
    +	t["HostNatServicePortForwardSpec"] = reflect.TypeOf((*HostNatServicePortForwardSpec)(nil)).Elem()
    +}
    +
    +type HostNatServiceSpec struct {
    +	DynamicData
    +
    +	VirtualSwitch    string                          `xml:"virtualSwitch"`
    +	ActiveFtp        bool                            `xml:"activeFtp"`
    +	AllowAnyOui      bool                            `xml:"allowAnyOui"`
    +	ConfigPort       bool                            `xml:"configPort"`
    +	IpGatewayAddress string                          `xml:"ipGatewayAddress"`
    +	UdpTimeout       int32                           `xml:"udpTimeout"`
    +	PortForward      []HostNatServicePortForwardSpec `xml:"portForward,omitempty"`
    +	NameService      *HostNatServiceNameServiceSpec  `xml:"nameService,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNatServiceSpec"] = reflect.TypeOf((*HostNatServiceSpec)(nil)).Elem()
    +}
    +
    +type HostNetCapabilities struct {
    +	DynamicData
    +
    +	CanSetPhysicalNicLinkSpeed bool     `xml:"canSetPhysicalNicLinkSpeed"`
    +	SupportsNicTeaming         bool     `xml:"supportsNicTeaming"`
    +	NicTeamingPolicy           []string `xml:"nicTeamingPolicy,omitempty"`
    +	SupportsVlan               bool     `xml:"supportsVlan"`
    +	UsesServiceConsoleNic      bool     `xml:"usesServiceConsoleNic"`
    +	SupportsNetworkHints       bool     `xml:"supportsNetworkHints"`
    +	MaxPortGroupsPerVswitch    int32    `xml:"maxPortGroupsPerVswitch,omitempty"`
    +	VswitchConfigSupported     bool     `xml:"vswitchConfigSupported"`
    +	VnicConfigSupported        bool     `xml:"vnicConfigSupported"`
    +	IpRouteConfigSupported     bool     `xml:"ipRouteConfigSupported"`
    +	DnsConfigSupported         bool     `xml:"dnsConfigSupported"`
    +	DhcpOnVnicSupported        bool     `xml:"dhcpOnVnicSupported"`
    +	IpV6Supported              *bool    `xml:"ipV6Supported"`
    +}
    +
    +func init() {
    +	t["HostNetCapabilities"] = reflect.TypeOf((*HostNetCapabilities)(nil)).Elem()
    +}
    +
    +type HostNetOffloadCapabilities struct {
    +	DynamicData
    +
    +	CsumOffload     *bool `xml:"csumOffload"`
    +	TcpSegmentation *bool `xml:"tcpSegmentation"`
    +	ZeroCopyXmit    *bool `xml:"zeroCopyXmit"`
    +}
    +
    +func init() {
    +	t["HostNetOffloadCapabilities"] = reflect.TypeOf((*HostNetOffloadCapabilities)(nil)).Elem()
    +}
    +
    +type HostNetStackInstance struct {
    +	DynamicData
    +
    +	Key                             string                  `xml:"key,omitempty"`
    +	Name                            string                  `xml:"name,omitempty"`
    +	DnsConfig                       BaseHostDnsConfig       `xml:"dnsConfig,omitempty,typeattr"`
    +	IpRouteConfig                   BaseHostIpRouteConfig   `xml:"ipRouteConfig,omitempty,typeattr"`
    +	RequestedMaxNumberOfConnections int32                   `xml:"requestedMaxNumberOfConnections,omitempty"`
    +	CongestionControlAlgorithm      string                  `xml:"congestionControlAlgorithm,omitempty"`
    +	IpV6Enabled                     *bool                   `xml:"ipV6Enabled"`
    +	RouteTableConfig                *HostIpRouteTableConfig `xml:"routeTableConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNetStackInstance"] = reflect.TypeOf((*HostNetStackInstance)(nil)).Elem()
    +}
    +
    +type HostNetworkConfig struct {
    +	DynamicData
    +
    +	Vswitch              []HostVirtualSwitchConfig       `xml:"vswitch,omitempty"`
    +	ProxySwitch          []HostProxySwitchConfig         `xml:"proxySwitch,omitempty"`
    +	Portgroup            []HostPortGroupConfig           `xml:"portgroup,omitempty"`
    +	Pnic                 []PhysicalNicConfig             `xml:"pnic,omitempty"`
    +	Vnic                 []HostVirtualNicConfig          `xml:"vnic,omitempty"`
    +	ConsoleVnic          []HostVirtualNicConfig          `xml:"consoleVnic,omitempty"`
    +	DnsConfig            BaseHostDnsConfig               `xml:"dnsConfig,omitempty,typeattr"`
    +	IpRouteConfig        BaseHostIpRouteConfig           `xml:"ipRouteConfig,omitempty,typeattr"`
    +	ConsoleIpRouteConfig BaseHostIpRouteConfig           `xml:"consoleIpRouteConfig,omitempty,typeattr"`
    +	RouteTableConfig     *HostIpRouteTableConfig         `xml:"routeTableConfig,omitempty"`
    +	Dhcp                 []HostDhcpServiceConfig         `xml:"dhcp,omitempty"`
    +	Nat                  []HostNatServiceConfig          `xml:"nat,omitempty"`
    +	IpV6Enabled          *bool                           `xml:"ipV6Enabled"`
    +	NetStackSpec         []HostNetworkConfigNetStackSpec `xml:"netStackSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNetworkConfig"] = reflect.TypeOf((*HostNetworkConfig)(nil)).Elem()
    +}
    +
    +type HostNetworkConfigNetStackSpec struct {
    +	DynamicData
    +
    +	NetStackInstance HostNetStackInstance `xml:"netStackInstance"`
    +	Operation        string               `xml:"operation,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNetworkConfigNetStackSpec"] = reflect.TypeOf((*HostNetworkConfigNetStackSpec)(nil)).Elem()
    +}
    +
    +type HostNetworkConfigResult struct {
    +	DynamicData
    +
    +	VnicDevice        []string `xml:"vnicDevice,omitempty"`
    +	ConsoleVnicDevice []string `xml:"consoleVnicDevice,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNetworkConfigResult"] = reflect.TypeOf((*HostNetworkConfigResult)(nil)).Elem()
    +}
    +
    +type HostNetworkInfo struct {
    +	DynamicData
    +
    +	Vswitch              []HostVirtualSwitch     `xml:"vswitch,omitempty"`
    +	ProxySwitch          []HostProxySwitch       `xml:"proxySwitch,omitempty"`
    +	Portgroup            []HostPortGroup         `xml:"portgroup,omitempty"`
    +	Pnic                 []PhysicalNic           `xml:"pnic,omitempty"`
    +	Vnic                 []HostVirtualNic        `xml:"vnic,omitempty"`
    +	ConsoleVnic          []HostVirtualNic        `xml:"consoleVnic,omitempty"`
    +	DnsConfig            BaseHostDnsConfig       `xml:"dnsConfig,omitempty,typeattr"`
    +	IpRouteConfig        BaseHostIpRouteConfig   `xml:"ipRouteConfig,omitempty,typeattr"`
    +	ConsoleIpRouteConfig BaseHostIpRouteConfig   `xml:"consoleIpRouteConfig,omitempty,typeattr"`
    +	RouteTableInfo       *HostIpRouteTableInfo   `xml:"routeTableInfo,omitempty"`
    +	Dhcp                 []HostDhcpService       `xml:"dhcp,omitempty"`
    +	Nat                  []HostNatService        `xml:"nat,omitempty"`
    +	IpV6Enabled          *bool                   `xml:"ipV6Enabled"`
    +	AtBootIpV6Enabled    *bool                   `xml:"atBootIpV6Enabled"`
    +	NetStackInstance     []HostNetStackInstance  `xml:"netStackInstance,omitempty"`
    +	OpaqueSwitch         []HostOpaqueSwitch      `xml:"opaqueSwitch,omitempty"`
    +	OpaqueNetwork        []HostOpaqueNetworkInfo `xml:"opaqueNetwork,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNetworkInfo"] = reflect.TypeOf((*HostNetworkInfo)(nil)).Elem()
    +}
    +
    +type HostNetworkPolicy struct {
    +	DynamicData
    +
    +	Security      *HostNetworkSecurityPolicy       `xml:"security,omitempty"`
    +	NicTeaming    *HostNicTeamingPolicy            `xml:"nicTeaming,omitempty"`
    +	OffloadPolicy *HostNetOffloadCapabilities      `xml:"offloadPolicy,omitempty"`
    +	ShapingPolicy *HostNetworkTrafficShapingPolicy `xml:"shapingPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNetworkPolicy"] = reflect.TypeOf((*HostNetworkPolicy)(nil)).Elem()
    +}
    +
    +type HostNetworkResourceRuntime struct {
    +	DynamicData
    +
    +	PnicResourceInfo []HostPnicNetworkResourceInfo `xml:"pnicResourceInfo"`
    +}
    +
    +func init() {
    +	t["HostNetworkResourceRuntime"] = reflect.TypeOf((*HostNetworkResourceRuntime)(nil)).Elem()
    +}
    +
    +type HostNetworkSecurityPolicy struct {
    +	DynamicData
    +
    +	AllowPromiscuous *bool `xml:"allowPromiscuous"`
    +	MacChanges       *bool `xml:"macChanges"`
    +	ForgedTransmits  *bool `xml:"forgedTransmits"`
    +}
    +
    +func init() {
    +	t["HostNetworkSecurityPolicy"] = reflect.TypeOf((*HostNetworkSecurityPolicy)(nil)).Elem()
    +}
    +
    +type HostNetworkTrafficShapingPolicy struct {
    +	DynamicData
    +
    +	Enabled          *bool `xml:"enabled"`
    +	AverageBandwidth int64 `xml:"averageBandwidth,omitempty"`
    +	PeakBandwidth    int64 `xml:"peakBandwidth,omitempty"`
    +	BurstSize        int64 `xml:"burstSize,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNetworkTrafficShapingPolicy"] = reflect.TypeOf((*HostNetworkTrafficShapingPolicy)(nil)).Elem()
    +}
    +
    +type HostNewNetworkConnectInfo struct {
    +	HostConnectInfoNetworkInfo
    +}
    +
    +func init() {
    +	t["HostNewNetworkConnectInfo"] = reflect.TypeOf((*HostNewNetworkConnectInfo)(nil)).Elem()
    +}
    +
    +type HostNicFailureCriteria struct {
    +	DynamicData
    +
    +	CheckSpeed        string `xml:"checkSpeed,omitempty"`
    +	Speed             int32  `xml:"speed,omitempty"`
    +	CheckDuplex       *bool  `xml:"checkDuplex"`
    +	FullDuplex        *bool  `xml:"fullDuplex"`
    +	CheckErrorPercent *bool  `xml:"checkErrorPercent"`
    +	Percentage        int32  `xml:"percentage,omitempty"`
    +	CheckBeacon       *bool  `xml:"checkBeacon"`
    +}
    +
    +func init() {
    +	t["HostNicFailureCriteria"] = reflect.TypeOf((*HostNicFailureCriteria)(nil)).Elem()
    +}
    +
    +type HostNicOrderPolicy struct {
    +	DynamicData
    +
    +	ActiveNic  []string `xml:"activeNic,omitempty"`
    +	StandbyNic []string `xml:"standbyNic,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNicOrderPolicy"] = reflect.TypeOf((*HostNicOrderPolicy)(nil)).Elem()
    +}
    +
    +type HostNicTeamingPolicy struct {
    +	DynamicData
    +
    +	Policy          string                  `xml:"policy,omitempty"`
    +	ReversePolicy   *bool                   `xml:"reversePolicy"`
    +	NotifySwitches  *bool                   `xml:"notifySwitches"`
    +	RollingOrder    *bool                   `xml:"rollingOrder"`
    +	FailureCriteria *HostNicFailureCriteria `xml:"failureCriteria,omitempty"`
    +	NicOrder        *HostNicOrderPolicy     `xml:"nicOrder,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNicTeamingPolicy"] = reflect.TypeOf((*HostNicTeamingPolicy)(nil)).Elem()
    +}
    +
    +type HostNoAvailableNetworksEvent struct {
    +	HostDasEvent
    +
    +	Ips string `xml:"ips,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNoAvailableNetworksEvent"] = reflect.TypeOf((*HostNoAvailableNetworksEvent)(nil)).Elem()
    +}
    +
    +type HostNoHAEnabledPortGroupsEvent struct {
    +	HostDasEvent
    +}
    +
    +func init() {
    +	t["HostNoHAEnabledPortGroupsEvent"] = reflect.TypeOf((*HostNoHAEnabledPortGroupsEvent)(nil)).Elem()
    +}
    +
    +type HostNoRedundantManagementNetworkEvent struct {
    +	HostDasEvent
    +}
    +
    +func init() {
    +	t["HostNoRedundantManagementNetworkEvent"] = reflect.TypeOf((*HostNoRedundantManagementNetworkEvent)(nil)).Elem()
    +}
    +
    +type HostNonCompliantEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostNonCompliantEvent"] = reflect.TypeOf((*HostNonCompliantEvent)(nil)).Elem()
    +}
    +
    +type HostNotConnected struct {
    +	HostCommunication
    +}
    +
    +func init() {
    +	t["HostNotConnected"] = reflect.TypeOf((*HostNotConnected)(nil)).Elem()
    +}
    +
    +type HostNotConnectedFault HostNotConnected
    +
    +func init() {
    +	t["HostNotConnectedFault"] = reflect.TypeOf((*HostNotConnectedFault)(nil)).Elem()
    +}
    +
    +type HostNotInClusterEvent struct {
    +	HostDasEvent
    +}
    +
    +func init() {
    +	t["HostNotInClusterEvent"] = reflect.TypeOf((*HostNotInClusterEvent)(nil)).Elem()
    +}
    +
    +type HostNotReachable struct {
    +	HostCommunication
    +}
    +
    +func init() {
    +	t["HostNotReachable"] = reflect.TypeOf((*HostNotReachable)(nil)).Elem()
    +}
    +
    +type HostNotReachableFault HostNotReachable
    +
    +func init() {
    +	t["HostNotReachableFault"] = reflect.TypeOf((*HostNotReachableFault)(nil)).Elem()
    +}
    +
    +type HostNtpConfig struct {
    +	DynamicData
    +
    +	Server     []string `xml:"server,omitempty"`
    +	ConfigFile []string `xml:"configFile,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNtpConfig"] = reflect.TypeOf((*HostNtpConfig)(nil)).Elem()
    +}
    +
    +type HostNumaInfo struct {
    +	DynamicData
    +
    +	Type     string         `xml:"type"`
    +	NumNodes int32          `xml:"numNodes"`
    +	NumaNode []HostNumaNode `xml:"numaNode,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNumaInfo"] = reflect.TypeOf((*HostNumaInfo)(nil)).Elem()
    +}
    +
    +type HostNumaNode struct {
    +	DynamicData
    +
    +	TypeId            byte     `xml:"typeId"`
    +	CpuID             []int16  `xml:"cpuID"`
    +	MemoryRangeBegin  int64    `xml:"memoryRangeBegin"`
    +	MemoryRangeLength int64    `xml:"memoryRangeLength"`
    +	PciId             []string `xml:"pciId,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNumaNode"] = reflect.TypeOf((*HostNumaNode)(nil)).Elem()
    +}
    +
    +type HostNumericSensorInfo struct {
    +	DynamicData
    +
    +	Name           string                 `xml:"name"`
    +	HealthState    BaseElementDescription `xml:"healthState,omitempty,typeattr"`
    +	CurrentReading int64                  `xml:"currentReading"`
    +	UnitModifier   int32                  `xml:"unitModifier"`
    +	BaseUnits      string                 `xml:"baseUnits"`
    +	RateUnits      string                 `xml:"rateUnits,omitempty"`
    +	SensorType     string                 `xml:"sensorType"`
    +	Id             string                 `xml:"id,omitempty"`
    +	TimeStamp      string                 `xml:"timeStamp,omitempty"`
    +}
    +
    +func init() {
    +	t["HostNumericSensorInfo"] = reflect.TypeOf((*HostNumericSensorInfo)(nil)).Elem()
    +}
    +
    +type HostOpaqueNetworkInfo struct {
    +	DynamicData
    +
    +	OpaqueNetworkId   string                   `xml:"opaqueNetworkId"`
    +	OpaqueNetworkName string                   `xml:"opaqueNetworkName"`
    +	OpaqueNetworkType string                   `xml:"opaqueNetworkType"`
    +	PnicZone          []string                 `xml:"pnicZone,omitempty"`
    +	Capability        *OpaqueNetworkCapability `xml:"capability,omitempty"`
    +	ExtraConfig       []BaseOptionValue        `xml:"extraConfig,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostOpaqueNetworkInfo"] = reflect.TypeOf((*HostOpaqueNetworkInfo)(nil)).Elem()
    +}
    +
    +type HostOpaqueSwitch struct {
    +	DynamicData
    +
    +	Key               string                            `xml:"key"`
    +	Name              string                            `xml:"name,omitempty"`
    +	Pnic              []string                          `xml:"pnic,omitempty"`
    +	PnicZone          []HostOpaqueSwitchPhysicalNicZone `xml:"pnicZone,omitempty"`
    +	Status            string                            `xml:"status,omitempty"`
    +	Vtep              []HostVirtualNic                  `xml:"vtep,omitempty"`
    +	ExtraConfig       []BaseOptionValue                 `xml:"extraConfig,omitempty,typeattr"`
    +	FeatureCapability []HostFeatureCapability           `xml:"featureCapability,omitempty"`
    +}
    +
    +func init() {
    +	t["HostOpaqueSwitch"] = reflect.TypeOf((*HostOpaqueSwitch)(nil)).Elem()
    +}
    +
    +type HostOpaqueSwitchPhysicalNicZone struct {
    +	DynamicData
    +
    +	Key        string   `xml:"key"`
    +	PnicDevice []string `xml:"pnicDevice,omitempty"`
    +}
    +
    +func init() {
    +	t["HostOpaqueSwitchPhysicalNicZone"] = reflect.TypeOf((*HostOpaqueSwitchPhysicalNicZone)(nil)).Elem()
    +}
    +
    +type HostOvercommittedEvent struct {
    +	ClusterOvercommittedEvent
    +}
    +
    +func init() {
    +	t["HostOvercommittedEvent"] = reflect.TypeOf((*HostOvercommittedEvent)(nil)).Elem()
    +}
    +
    +type HostPMemVolume struct {
    +	HostFileSystemVolume
    +
    +	Uuid    string `xml:"uuid"`
    +	Version string `xml:"version"`
    +}
    +
    +func init() {
    +	t["HostPMemVolume"] = reflect.TypeOf((*HostPMemVolume)(nil)).Elem()
    +}
    +
    +type HostParallelScsiHba struct {
    +	HostHostBusAdapter
    +}
    +
    +func init() {
    +	t["HostParallelScsiHba"] = reflect.TypeOf((*HostParallelScsiHba)(nil)).Elem()
    +}
    +
    +type HostParallelScsiTargetTransport struct {
    +	HostTargetTransport
    +}
    +
    +func init() {
    +	t["HostParallelScsiTargetTransport"] = reflect.TypeOf((*HostParallelScsiTargetTransport)(nil)).Elem()
    +}
    +
    +type HostPatchManagerLocator struct {
    +	DynamicData
    +
    +	Url   string `xml:"url"`
    +	Proxy string `xml:"proxy,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPatchManagerLocator"] = reflect.TypeOf((*HostPatchManagerLocator)(nil)).Elem()
    +}
    +
    +type HostPatchManagerPatchManagerOperationSpec struct {
    +	DynamicData
    +
    +	Proxy     string `xml:"proxy,omitempty"`
    +	Port      int32  `xml:"port,omitempty"`
    +	UserName  string `xml:"userName,omitempty"`
    +	Password  string `xml:"password,omitempty"`
    +	CmdOption string `xml:"cmdOption,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPatchManagerPatchManagerOperationSpec"] = reflect.TypeOf((*HostPatchManagerPatchManagerOperationSpec)(nil)).Elem()
    +}
    +
    +type HostPatchManagerResult struct {
    +	DynamicData
    +
    +	Version   string                   `xml:"version"`
    +	Status    []HostPatchManagerStatus `xml:"status,omitempty"`
    +	XmlResult string                   `xml:"xmlResult,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPatchManagerResult"] = reflect.TypeOf((*HostPatchManagerResult)(nil)).Elem()
    +}
    +
    +type HostPatchManagerStatus struct {
    +	DynamicData
    +
    +	Id                 string                                    `xml:"id"`
    +	Applicable         bool                                      `xml:"applicable"`
    +	Reason             []string                                  `xml:"reason,omitempty"`
    +	Integrity          string                                    `xml:"integrity,omitempty"`
    +	Installed          bool                                      `xml:"installed"`
    +	InstallState       []string                                  `xml:"installState,omitempty"`
    +	PrerequisitePatch  []HostPatchManagerStatusPrerequisitePatch `xml:"prerequisitePatch,omitempty"`
    +	RestartRequired    bool                                      `xml:"restartRequired"`
    +	ReconnectRequired  bool                                      `xml:"reconnectRequired"`
    +	VmOffRequired      bool                                      `xml:"vmOffRequired"`
    +	SupersededPatchIds []string                                  `xml:"supersededPatchIds,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPatchManagerStatus"] = reflect.TypeOf((*HostPatchManagerStatus)(nil)).Elem()
    +}
    +
    +type HostPatchManagerStatusPrerequisitePatch struct {
    +	DynamicData
    +
    +	Id           string   `xml:"id"`
    +	InstallState []string `xml:"installState,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPatchManagerStatusPrerequisitePatch"] = reflect.TypeOf((*HostPatchManagerStatusPrerequisitePatch)(nil)).Elem()
    +}
    +
    +type HostPathSelectionPolicyOption struct {
    +	DynamicData
    +
    +	Policy BaseElementDescription `xml:"policy,typeattr"`
    +}
    +
    +func init() {
    +	t["HostPathSelectionPolicyOption"] = reflect.TypeOf((*HostPathSelectionPolicyOption)(nil)).Elem()
    +}
    +
    +type HostPciDevice struct {
    +	DynamicData
    +
    +	Id           string `xml:"id"`
    +	ClassId      int16  `xml:"classId"`
    +	Bus          byte   `xml:"bus"`
    +	Slot         byte   `xml:"slot"`
    +	Function     byte   `xml:"function"`
    +	VendorId     int16  `xml:"vendorId"`
    +	SubVendorId  int16  `xml:"subVendorId"`
    +	VendorName   string `xml:"vendorName"`
    +	DeviceId     int16  `xml:"deviceId"`
    +	SubDeviceId  int16  `xml:"subDeviceId"`
    +	ParentBridge string `xml:"parentBridge,omitempty"`
    +	DeviceName   string `xml:"deviceName"`
    +}
    +
    +func init() {
    +	t["HostPciDevice"] = reflect.TypeOf((*HostPciDevice)(nil)).Elem()
    +}
    +
    +type HostPciPassthruConfig struct {
    +	DynamicData
    +
    +	Id              string `xml:"id"`
    +	PassthruEnabled bool   `xml:"passthruEnabled"`
    +}
    +
    +func init() {
    +	t["HostPciPassthruConfig"] = reflect.TypeOf((*HostPciPassthruConfig)(nil)).Elem()
    +}
    +
    +type HostPciPassthruInfo struct {
    +	DynamicData
    +
    +	Id              string `xml:"id"`
    +	DependentDevice string `xml:"dependentDevice"`
    +	PassthruEnabled bool   `xml:"passthruEnabled"`
    +	PassthruCapable bool   `xml:"passthruCapable"`
    +	PassthruActive  bool   `xml:"passthruActive"`
    +}
    +
    +func init() {
    +	t["HostPciPassthruInfo"] = reflect.TypeOf((*HostPciPassthruInfo)(nil)).Elem()
    +}
    +
    +type HostPersistentMemoryInfo struct {
    +	DynamicData
    +
    +	CapacityInMB int64  `xml:"capacityInMB,omitempty"`
    +	VolumeUUID   string `xml:"volumeUUID,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPersistentMemoryInfo"] = reflect.TypeOf((*HostPersistentMemoryInfo)(nil)).Elem()
    +}
    +
    +type HostPlacedVirtualNicIdentifier struct {
    +	DynamicData
    +
    +	Vm          ManagedObjectReference `xml:"vm"`
    +	VnicKey     string                 `xml:"vnicKey"`
    +	Reservation *int32                 `xml:"reservation"`
    +}
    +
    +func init() {
    +	t["HostPlacedVirtualNicIdentifier"] = reflect.TypeOf((*HostPlacedVirtualNicIdentifier)(nil)).Elem()
    +}
    +
    +type HostPlugStoreTopology struct {
    +	DynamicData
    +
    +	Adapter []HostPlugStoreTopologyAdapter `xml:"adapter,omitempty"`
    +	Path    []HostPlugStoreTopologyPath    `xml:"path,omitempty"`
    +	Target  []HostPlugStoreTopologyTarget  `xml:"target,omitempty"`
    +	Device  []HostPlugStoreTopologyDevice  `xml:"device,omitempty"`
    +	Plugin  []HostPlugStoreTopologyPlugin  `xml:"plugin,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPlugStoreTopology"] = reflect.TypeOf((*HostPlugStoreTopology)(nil)).Elem()
    +}
    +
    +type HostPlugStoreTopologyAdapter struct {
    +	DynamicData
    +
    +	Key     string   `xml:"key"`
    +	Adapter string   `xml:"adapter"`
    +	Path    []string `xml:"path,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPlugStoreTopologyAdapter"] = reflect.TypeOf((*HostPlugStoreTopologyAdapter)(nil)).Elem()
    +}
    +
    +type HostPlugStoreTopologyDevice struct {
    +	DynamicData
    +
    +	Key  string   `xml:"key"`
    +	Lun  string   `xml:"lun"`
    +	Path []string `xml:"path,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPlugStoreTopologyDevice"] = reflect.TypeOf((*HostPlugStoreTopologyDevice)(nil)).Elem()
    +}
    +
    +type HostPlugStoreTopologyPath struct {
    +	DynamicData
    +
    +	Key           string `xml:"key"`
    +	Name          string `xml:"name"`
    +	ChannelNumber int32  `xml:"channelNumber,omitempty"`
    +	TargetNumber  int32  `xml:"targetNumber,omitempty"`
    +	LunNumber     int32  `xml:"lunNumber,omitempty"`
    +	Adapter       string `xml:"adapter,omitempty"`
    +	Target        string `xml:"target,omitempty"`
    +	Device        string `xml:"device,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPlugStoreTopologyPath"] = reflect.TypeOf((*HostPlugStoreTopologyPath)(nil)).Elem()
    +}
    +
    +type HostPlugStoreTopologyPlugin struct {
    +	DynamicData
    +
    +	Key         string   `xml:"key"`
    +	Name        string   `xml:"name"`
    +	Device      []string `xml:"device,omitempty"`
    +	ClaimedPath []string `xml:"claimedPath,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPlugStoreTopologyPlugin"] = reflect.TypeOf((*HostPlugStoreTopologyPlugin)(nil)).Elem()
    +}
    +
    +type HostPlugStoreTopologyTarget struct {
    +	DynamicData
    +
    +	Key       string                  `xml:"key"`
    +	Transport BaseHostTargetTransport `xml:"transport,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostPlugStoreTopologyTarget"] = reflect.TypeOf((*HostPlugStoreTopologyTarget)(nil)).Elem()
    +}
    +
    +type HostPnicNetworkResourceInfo struct {
    +	DynamicData
    +
    +	PnicDevice                     string                           `xml:"pnicDevice"`
    +	AvailableBandwidthForVMTraffic int64                            `xml:"availableBandwidthForVMTraffic,omitempty"`
    +	UnusedBandwidthForVMTraffic    int64                            `xml:"unusedBandwidthForVMTraffic,omitempty"`
    +	PlacedVirtualNics              []HostPlacedVirtualNicIdentifier `xml:"placedVirtualNics,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPnicNetworkResourceInfo"] = reflect.TypeOf((*HostPnicNetworkResourceInfo)(nil)).Elem()
    +}
    +
    +type HostPortGroup struct {
    +	DynamicData
    +
    +	Key            string              `xml:"key,omitempty"`
    +	Port           []HostPortGroupPort `xml:"port,omitempty"`
    +	Vswitch        string              `xml:"vswitch,omitempty"`
    +	ComputedPolicy HostNetworkPolicy   `xml:"computedPolicy"`
    +	Spec           HostPortGroupSpec   `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostPortGroup"] = reflect.TypeOf((*HostPortGroup)(nil)).Elem()
    +}
    +
    +type HostPortGroupConfig struct {
    +	DynamicData
    +
    +	ChangeOperation string             `xml:"changeOperation,omitempty"`
    +	Spec            *HostPortGroupSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostPortGroupConfig"] = reflect.TypeOf((*HostPortGroupConfig)(nil)).Elem()
    +}
    +
    +type HostPortGroupPort struct {
    +	DynamicData
    +
    +	Key  string   `xml:"key,omitempty"`
    +	Mac  []string `xml:"mac,omitempty"`
    +	Type string   `xml:"type"`
    +}
    +
    +func init() {
    +	t["HostPortGroupPort"] = reflect.TypeOf((*HostPortGroupPort)(nil)).Elem()
    +}
    +
    +type HostPortGroupProfile struct {
    +	PortGroupProfile
    +
    +	IpConfig IpAddressProfile `xml:"ipConfig"`
    +}
    +
    +func init() {
    +	t["HostPortGroupProfile"] = reflect.TypeOf((*HostPortGroupProfile)(nil)).Elem()
    +}
    +
    +type HostPortGroupSpec struct {
    +	DynamicData
    +
    +	Name        string            `xml:"name"`
    +	VlanId      int32             `xml:"vlanId"`
    +	VswitchName string            `xml:"vswitchName"`
    +	Policy      HostNetworkPolicy `xml:"policy"`
    +}
    +
    +func init() {
    +	t["HostPortGroupSpec"] = reflect.TypeOf((*HostPortGroupSpec)(nil)).Elem()
    +}
    +
    +type HostPosixAccountSpec struct {
    +	HostAccountSpec
    +
    +	PosixId     int32 `xml:"posixId,omitempty"`
    +	ShellAccess *bool `xml:"shellAccess"`
    +}
    +
    +func init() {
    +	t["HostPosixAccountSpec"] = reflect.TypeOf((*HostPosixAccountSpec)(nil)).Elem()
    +}
    +
    +type HostPowerOpFailed struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["HostPowerOpFailed"] = reflect.TypeOf((*HostPowerOpFailed)(nil)).Elem()
    +}
    +
    +type HostPowerOpFailedFault BaseHostPowerOpFailed
    +
    +func init() {
    +	t["HostPowerOpFailedFault"] = reflect.TypeOf((*HostPowerOpFailedFault)(nil)).Elem()
    +}
    +
    +type HostPowerPolicy struct {
    +	DynamicData
    +
    +	Key         int32  `xml:"key"`
    +	Name        string `xml:"name"`
    +	ShortName   string `xml:"shortName"`
    +	Description string `xml:"description"`
    +}
    +
    +func init() {
    +	t["HostPowerPolicy"] = reflect.TypeOf((*HostPowerPolicy)(nil)).Elem()
    +}
    +
    +type HostPrimaryAgentNotShortNameEvent struct {
    +	HostDasEvent
    +
    +	PrimaryAgent string `xml:"primaryAgent"`
    +}
    +
    +func init() {
    +	t["HostPrimaryAgentNotShortNameEvent"] = reflect.TypeOf((*HostPrimaryAgentNotShortNameEvent)(nil)).Elem()
    +}
    +
    +type HostProfileAppliedEvent struct {
    +	HostEvent
    +
    +	Profile ProfileEventArgument `xml:"profile"`
    +}
    +
    +func init() {
    +	t["HostProfileAppliedEvent"] = reflect.TypeOf((*HostProfileAppliedEvent)(nil)).Elem()
    +}
    +
    +type HostProfileCompleteConfigSpec struct {
    +	HostProfileConfigSpec
    +
    +	ApplyProfile                  *HostApplyProfile       `xml:"applyProfile,omitempty"`
    +	CustomComplyProfile           *ComplianceProfile      `xml:"customComplyProfile,omitempty"`
    +	DisabledExpressionListChanged bool                    `xml:"disabledExpressionListChanged"`
    +	DisabledExpressionList        []string                `xml:"disabledExpressionList,omitempty"`
    +	ValidatorHost                 *ManagedObjectReference `xml:"validatorHost,omitempty"`
    +	Validating                    *bool                   `xml:"validating"`
    +	HostConfig                    *HostProfileConfigInfo  `xml:"hostConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProfileCompleteConfigSpec"] = reflect.TypeOf((*HostProfileCompleteConfigSpec)(nil)).Elem()
    +}
    +
    +type HostProfileConfigInfo struct {
    +	ProfileConfigInfo
    +
    +	ApplyProfile           *HostApplyProfile   `xml:"applyProfile,omitempty"`
    +	DefaultComplyProfile   *ComplianceProfile  `xml:"defaultComplyProfile,omitempty"`
    +	DefaultComplyLocator   []ComplianceLocator `xml:"defaultComplyLocator,omitempty"`
    +	CustomComplyProfile    *ComplianceProfile  `xml:"customComplyProfile,omitempty"`
    +	DisabledExpressionList []string            `xml:"disabledExpressionList,omitempty"`
    +	Description            *ProfileDescription `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProfileConfigInfo"] = reflect.TypeOf((*HostProfileConfigInfo)(nil)).Elem()
    +}
    +
    +type HostProfileConfigSpec struct {
    +	ProfileCreateSpec
    +}
    +
    +func init() {
    +	t["HostProfileConfigSpec"] = reflect.TypeOf((*HostProfileConfigSpec)(nil)).Elem()
    +}
    +
    +type HostProfileHostBasedConfigSpec struct {
    +	HostProfileConfigSpec
    +
    +	Host                 ManagedObjectReference `xml:"host"`
    +	UseHostProfileEngine *bool                  `xml:"useHostProfileEngine"`
    +}
    +
    +func init() {
    +	t["HostProfileHostBasedConfigSpec"] = reflect.TypeOf((*HostProfileHostBasedConfigSpec)(nil)).Elem()
    +}
    +
    +type HostProfileManagerCompositionResult struct {
    +	DynamicData
    +
    +	Errors  []LocalizableMessage                               `xml:"errors,omitempty"`
    +	Results []HostProfileManagerCompositionResultResultElement `xml:"results,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProfileManagerCompositionResult"] = reflect.TypeOf((*HostProfileManagerCompositionResult)(nil)).Elem()
    +}
    +
    +type HostProfileManagerCompositionResultResultElement struct {
    +	DynamicData
    +
    +	Target ManagedObjectReference `xml:"target"`
    +	Status string                 `xml:"status"`
    +	Errors []LocalizableMessage   `xml:"errors,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProfileManagerCompositionResultResultElement"] = reflect.TypeOf((*HostProfileManagerCompositionResultResultElement)(nil)).Elem()
    +}
    +
    +type HostProfileManagerCompositionValidationResult struct {
    +	DynamicData
    +
    +	Results []HostProfileManagerCompositionValidationResultResultElement `xml:"results,omitempty"`
    +	Errors  []LocalizableMessage                                         `xml:"errors,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProfileManagerCompositionValidationResult"] = reflect.TypeOf((*HostProfileManagerCompositionValidationResult)(nil)).Elem()
    +}
    +
    +type HostProfileManagerCompositionValidationResultResultElement struct {
    +	DynamicData
    +
    +	Target                  ManagedObjectReference `xml:"target"`
    +	Status                  string                 `xml:"status"`
    +	Errors                  []LocalizableMessage   `xml:"errors,omitempty"`
    +	SourceDiffForToBeMerged *HostApplyProfile      `xml:"sourceDiffForToBeMerged,omitempty"`
    +	TargetDiffForToBeMerged *HostApplyProfile      `xml:"targetDiffForToBeMerged,omitempty"`
    +	ToBeAdded               *HostApplyProfile      `xml:"toBeAdded,omitempty"`
    +	ToBeDeleted             *HostApplyProfile      `xml:"toBeDeleted,omitempty"`
    +	ToBeDisabled            *HostApplyProfile      `xml:"toBeDisabled,omitempty"`
    +	ToBeEnabled             *HostApplyProfile      `xml:"toBeEnabled,omitempty"`
    +	ToBeReenableCC          *HostApplyProfile      `xml:"toBeReenableCC,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProfileManagerCompositionValidationResultResultElement"] = reflect.TypeOf((*HostProfileManagerCompositionValidationResultResultElement)(nil)).Elem()
    +}
    +
    +type HostProfileManagerConfigTaskList struct {
    +	DynamicData
    +
    +	ConfigSpec          *HostConfigSpec      `xml:"configSpec,omitempty"`
    +	TaskDescription     []LocalizableMessage `xml:"taskDescription,omitempty"`
    +	TaskListRequirement []string             `xml:"taskListRequirement,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProfileManagerConfigTaskList"] = reflect.TypeOf((*HostProfileManagerConfigTaskList)(nil)).Elem()
    +}
    +
    +type HostProfileManagerHostToConfigSpecMap struct {
    +	DynamicData
    +
    +	Host       ManagedObjectReference   `xml:"host"`
    +	ConfigSpec BaseAnswerFileCreateSpec `xml:"configSpec,typeattr"`
    +}
    +
    +func init() {
    +	t["HostProfileManagerHostToConfigSpecMap"] = reflect.TypeOf((*HostProfileManagerHostToConfigSpecMap)(nil)).Elem()
    +}
    +
    +type HostProfileResetValidationState HostProfileResetValidationStateRequestType
    +
    +func init() {
    +	t["HostProfileResetValidationState"] = reflect.TypeOf((*HostProfileResetValidationState)(nil)).Elem()
    +}
    +
    +type HostProfileResetValidationStateRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["HostProfileResetValidationStateRequestType"] = reflect.TypeOf((*HostProfileResetValidationStateRequestType)(nil)).Elem()
    +}
    +
    +type HostProfileResetValidationStateResponse struct {
    +}
    +
    +type HostProfileSerializedHostProfileSpec struct {
    +	ProfileSerializedCreateSpec
    +
    +	ValidatorHost *ManagedObjectReference `xml:"validatorHost,omitempty"`
    +	Validating    *bool                   `xml:"validating"`
    +}
    +
    +func init() {
    +	t["HostProfileSerializedHostProfileSpec"] = reflect.TypeOf((*HostProfileSerializedHostProfileSpec)(nil)).Elem()
    +}
    +
    +type HostProfileValidationFailureInfo struct {
    +	DynamicData
    +
    +	Name         string                             `xml:"name"`
    +	Annotation   string                             `xml:"annotation"`
    +	UpdateType   string                             `xml:"updateType"`
    +	Host         *ManagedObjectReference            `xml:"host,omitempty"`
    +	ApplyProfile *HostApplyProfile                  `xml:"applyProfile,omitempty"`
    +	Failures     []ProfileUpdateFailedUpdateFailure `xml:"failures,omitempty"`
    +	Faults       []LocalizedMethodFault             `xml:"faults,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProfileValidationFailureInfo"] = reflect.TypeOf((*HostProfileValidationFailureInfo)(nil)).Elem()
    +}
    +
    +type HostProfilesEntityCustomizations struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["HostProfilesEntityCustomizations"] = reflect.TypeOf((*HostProfilesEntityCustomizations)(nil)).Elem()
    +}
    +
    +type HostProtocolEndpoint struct {
    +	DynamicData
    +
    +	PeType            string                   `xml:"peType"`
    +	Type              string                   `xml:"type,omitempty"`
    +	Uuid              string                   `xml:"uuid"`
    +	HostKey           []ManagedObjectReference `xml:"hostKey,omitempty"`
    +	StorageArray      string                   `xml:"storageArray,omitempty"`
    +	NfsServer         string                   `xml:"nfsServer,omitempty"`
    +	NfsDir            string                   `xml:"nfsDir,omitempty"`
    +	NfsServerScope    string                   `xml:"nfsServerScope,omitempty"`
    +	NfsServerMajor    string                   `xml:"nfsServerMajor,omitempty"`
    +	NfsServerAuthType string                   `xml:"nfsServerAuthType,omitempty"`
    +	NfsServerUser     string                   `xml:"nfsServerUser,omitempty"`
    +	DeviceId          string                   `xml:"deviceId,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProtocolEndpoint"] = reflect.TypeOf((*HostProtocolEndpoint)(nil)).Elem()
    +}
    +
    +type HostProxySwitch struct {
    +	DynamicData
    +
    +	DvsUuid                     string                         `xml:"dvsUuid"`
    +	DvsName                     string                         `xml:"dvsName"`
    +	Key                         string                         `xml:"key"`
    +	NumPorts                    int32                          `xml:"numPorts"`
    +	ConfigNumPorts              int32                          `xml:"configNumPorts,omitempty"`
    +	NumPortsAvailable           int32                          `xml:"numPortsAvailable"`
    +	UplinkPort                  []KeyValue                     `xml:"uplinkPort,omitempty"`
    +	Mtu                         int32                          `xml:"mtu,omitempty"`
    +	Pnic                        []string                       `xml:"pnic,omitempty"`
    +	Spec                        HostProxySwitchSpec            `xml:"spec"`
    +	HostLag                     []HostProxySwitchHostLagConfig `xml:"hostLag,omitempty"`
    +	NetworkReservationSupported *bool                          `xml:"networkReservationSupported"`
    +}
    +
    +func init() {
    +	t["HostProxySwitch"] = reflect.TypeOf((*HostProxySwitch)(nil)).Elem()
    +}
    +
    +type HostProxySwitchConfig struct {
    +	DynamicData
    +
    +	ChangeOperation string               `xml:"changeOperation,omitempty"`
    +	Uuid            string               `xml:"uuid"`
    +	Spec            *HostProxySwitchSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProxySwitchConfig"] = reflect.TypeOf((*HostProxySwitchConfig)(nil)).Elem()
    +}
    +
    +type HostProxySwitchHostLagConfig struct {
    +	DynamicData
    +
    +	LagKey     string     `xml:"lagKey"`
    +	LagName    string     `xml:"lagName,omitempty"`
    +	UplinkPort []KeyValue `xml:"uplinkPort,omitempty"`
    +}
    +
    +func init() {
    +	t["HostProxySwitchHostLagConfig"] = reflect.TypeOf((*HostProxySwitchHostLagConfig)(nil)).Elem()
    +}
    +
    +type HostProxySwitchSpec struct {
    +	DynamicData
    +
    +	Backing BaseDistributedVirtualSwitchHostMemberBacking `xml:"backing,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostProxySwitchSpec"] = reflect.TypeOf((*HostProxySwitchSpec)(nil)).Elem()
    +}
    +
    +type HostReconcileDatastoreInventoryRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostReconcileDatastoreInventoryRequestType"] = reflect.TypeOf((*HostReconcileDatastoreInventoryRequestType)(nil)).Elem()
    +}
    +
    +type HostReconcileDatastoreInventory_Task HostReconcileDatastoreInventoryRequestType
    +
    +func init() {
    +	t["HostReconcileDatastoreInventory_Task"] = reflect.TypeOf((*HostReconcileDatastoreInventory_Task)(nil)).Elem()
    +}
    +
    +type HostReconcileDatastoreInventory_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostReconnectionFailedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostReconnectionFailedEvent"] = reflect.TypeOf((*HostReconnectionFailedEvent)(nil)).Elem()
    +}
    +
    +type HostRegisterDisk HostRegisterDiskRequestType
    +
    +func init() {
    +	t["HostRegisterDisk"] = reflect.TypeOf((*HostRegisterDisk)(nil)).Elem()
    +}
    +
    +type HostRegisterDiskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Path string                 `xml:"path"`
    +	Name string                 `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["HostRegisterDiskRequestType"] = reflect.TypeOf((*HostRegisterDiskRequestType)(nil)).Elem()
    +}
    +
    +type HostRegisterDiskResponse struct {
    +	Returnval VStorageObject `xml:"returnval"`
    +}
    +
    +type HostReliableMemoryInfo struct {
    +	DynamicData
    +
    +	MemorySize int64 `xml:"memorySize"`
    +}
    +
    +func init() {
    +	t["HostReliableMemoryInfo"] = reflect.TypeOf((*HostReliableMemoryInfo)(nil)).Elem()
    +}
    +
    +type HostRelocateVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	Spec      VslmRelocateSpec       `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostRelocateVStorageObjectRequestType"] = reflect.TypeOf((*HostRelocateVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type HostRelocateVStorageObject_Task HostRelocateVStorageObjectRequestType
    +
    +func init() {
    +	t["HostRelocateVStorageObject_Task"] = reflect.TypeOf((*HostRelocateVStorageObject_Task)(nil)).Elem()
    +}
    +
    +type HostRelocateVStorageObject_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostRemoveVFlashResource HostRemoveVFlashResourceRequestType
    +
    +func init() {
    +	t["HostRemoveVFlashResource"] = reflect.TypeOf((*HostRemoveVFlashResource)(nil)).Elem()
    +}
    +
    +type HostRemoveVFlashResourceRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["HostRemoveVFlashResourceRequestType"] = reflect.TypeOf((*HostRemoveVFlashResourceRequestType)(nil)).Elem()
    +}
    +
    +type HostRemoveVFlashResourceResponse struct {
    +}
    +
    +type HostRemovedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostRemovedEvent"] = reflect.TypeOf((*HostRemovedEvent)(nil)).Elem()
    +}
    +
    +type HostRenameVStorageObject HostRenameVStorageObjectRequestType
    +
    +func init() {
    +	t["HostRenameVStorageObject"] = reflect.TypeOf((*HostRenameVStorageObject)(nil)).Elem()
    +}
    +
    +type HostRenameVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	Name      string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["HostRenameVStorageObjectRequestType"] = reflect.TypeOf((*HostRenameVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type HostRenameVStorageObjectResponse struct {
    +}
    +
    +type HostResignatureRescanResult struct {
    +	DynamicData
    +
    +	Rescan []HostVmfsRescanResult `xml:"rescan,omitempty"`
    +	Result ManagedObjectReference `xml:"result"`
    +}
    +
    +func init() {
    +	t["HostResignatureRescanResult"] = reflect.TypeOf((*HostResignatureRescanResult)(nil)).Elem()
    +}
    +
    +type HostRetrieveVStorageInfrastructureObjectPolicy HostRetrieveVStorageInfrastructureObjectPolicyRequestType
    +
    +func init() {
    +	t["HostRetrieveVStorageInfrastructureObjectPolicy"] = reflect.TypeOf((*HostRetrieveVStorageInfrastructureObjectPolicy)(nil)).Elem()
    +}
    +
    +type HostRetrieveVStorageInfrastructureObjectPolicyRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostRetrieveVStorageInfrastructureObjectPolicyRequestType"] = reflect.TypeOf((*HostRetrieveVStorageInfrastructureObjectPolicyRequestType)(nil)).Elem()
    +}
    +
    +type HostRetrieveVStorageInfrastructureObjectPolicyResponse struct {
    +	Returnval []VslmInfrastructureObjectPolicy `xml:"returnval,omitempty"`
    +}
    +
    +type HostRetrieveVStorageObject HostRetrieveVStorageObjectRequestType
    +
    +func init() {
    +	t["HostRetrieveVStorageObject"] = reflect.TypeOf((*HostRetrieveVStorageObject)(nil)).Elem()
    +}
    +
    +type HostRetrieveVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostRetrieveVStorageObjectRequestType"] = reflect.TypeOf((*HostRetrieveVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type HostRetrieveVStorageObjectResponse struct {
    +	Returnval VStorageObject `xml:"returnval"`
    +}
    +
    +type HostRetrieveVStorageObjectState HostRetrieveVStorageObjectStateRequestType
    +
    +func init() {
    +	t["HostRetrieveVStorageObjectState"] = reflect.TypeOf((*HostRetrieveVStorageObjectState)(nil)).Elem()
    +}
    +
    +type HostRetrieveVStorageObjectStateRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostRetrieveVStorageObjectStateRequestType"] = reflect.TypeOf((*HostRetrieveVStorageObjectStateRequestType)(nil)).Elem()
    +}
    +
    +type HostRetrieveVStorageObjectStateResponse struct {
    +	Returnval VStorageObjectStateInfo `xml:"returnval"`
    +}
    +
    +type HostRuntimeInfo struct {
    +	DynamicData
    +
    +	ConnectionState            HostSystemConnectionState                   `xml:"connectionState"`
    +	PowerState                 HostSystemPowerState                        `xml:"powerState"`
    +	StandbyMode                string                                      `xml:"standbyMode,omitempty"`
    +	InMaintenanceMode          bool                                        `xml:"inMaintenanceMode"`
    +	InQuarantineMode           *bool                                       `xml:"inQuarantineMode"`
    +	BootTime                   *time.Time                                  `xml:"bootTime"`
    +	HealthSystemRuntime        *HealthSystemRuntime                        `xml:"healthSystemRuntime,omitempty"`
    +	DasHostState               *ClusterDasFdmHostState                     `xml:"dasHostState,omitempty"`
    +	TpmPcrValues               []HostTpmDigestInfo                         `xml:"tpmPcrValues,omitempty"`
    +	VsanRuntimeInfo            *VsanHostRuntimeInfo                        `xml:"vsanRuntimeInfo,omitempty"`
    +	NetworkRuntimeInfo         *HostRuntimeInfoNetworkRuntimeInfo          `xml:"networkRuntimeInfo,omitempty"`
    +	VFlashResourceRuntimeInfo  *HostVFlashManagerVFlashResourceRunTimeInfo `xml:"vFlashResourceRuntimeInfo,omitempty"`
    +	HostMaxVirtualDiskCapacity int64                                       `xml:"hostMaxVirtualDiskCapacity,omitempty"`
    +	CryptoState                string                                      `xml:"cryptoState,omitempty"`
    +	CryptoKeyId                *CryptoKeyId                                `xml:"cryptoKeyId,omitempty"`
    +}
    +
    +func init() {
    +	t["HostRuntimeInfo"] = reflect.TypeOf((*HostRuntimeInfo)(nil)).Elem()
    +}
    +
    +type HostRuntimeInfoNetStackInstanceRuntimeInfo struct {
    +	DynamicData
    +
    +	NetStackInstanceKey    string   `xml:"netStackInstanceKey"`
    +	State                  string   `xml:"state,omitempty"`
    +	VmknicKeys             []string `xml:"vmknicKeys,omitempty"`
    +	MaxNumberOfConnections int32    `xml:"maxNumberOfConnections,omitempty"`
    +	CurrentIpV6Enabled     *bool    `xml:"currentIpV6Enabled"`
    +}
    +
    +func init() {
    +	t["HostRuntimeInfoNetStackInstanceRuntimeInfo"] = reflect.TypeOf((*HostRuntimeInfoNetStackInstanceRuntimeInfo)(nil)).Elem()
    +}
    +
    +type HostRuntimeInfoNetworkRuntimeInfo struct {
    +	DynamicData
    +
    +	NetStackInstanceRuntimeInfo []HostRuntimeInfoNetStackInstanceRuntimeInfo `xml:"netStackInstanceRuntimeInfo,omitempty"`
    +	NetworkResourceRuntime      *HostNetworkResourceRuntime                  `xml:"networkResourceRuntime,omitempty"`
    +}
    +
    +func init() {
    +	t["HostRuntimeInfoNetworkRuntimeInfo"] = reflect.TypeOf((*HostRuntimeInfoNetworkRuntimeInfo)(nil)).Elem()
    +}
    +
    +type HostScheduleReconcileDatastoreInventory HostScheduleReconcileDatastoreInventoryRequestType
    +
    +func init() {
    +	t["HostScheduleReconcileDatastoreInventory"] = reflect.TypeOf((*HostScheduleReconcileDatastoreInventory)(nil)).Elem()
    +}
    +
    +type HostScheduleReconcileDatastoreInventoryRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostScheduleReconcileDatastoreInventoryRequestType"] = reflect.TypeOf((*HostScheduleReconcileDatastoreInventoryRequestType)(nil)).Elem()
    +}
    +
    +type HostScheduleReconcileDatastoreInventoryResponse struct {
    +}
    +
    +type HostScsiDisk struct {
    +	ScsiLun
    +
    +	Capacity              HostDiskDimensionsLba `xml:"capacity"`
    +	DevicePath            string                `xml:"devicePath"`
    +	Ssd                   *bool                 `xml:"ssd"`
    +	LocalDisk             *bool                 `xml:"localDisk"`
    +	PhysicalLocation      []string              `xml:"physicalLocation,omitempty"`
    +	EmulatedDIXDIFEnabled *bool                 `xml:"emulatedDIXDIFEnabled"`
    +	VsanDiskInfo          *VsanHostVsanDiskInfo `xml:"vsanDiskInfo,omitempty"`
    +	ScsiDiskType          string                `xml:"scsiDiskType,omitempty"`
    +}
    +
    +func init() {
    +	t["HostScsiDisk"] = reflect.TypeOf((*HostScsiDisk)(nil)).Elem()
    +}
    +
    +type HostScsiDiskPartition struct {
    +	DynamicData
    +
    +	DiskName  string `xml:"diskName"`
    +	Partition int32  `xml:"partition"`
    +}
    +
    +func init() {
    +	t["HostScsiDiskPartition"] = reflect.TypeOf((*HostScsiDiskPartition)(nil)).Elem()
    +}
    +
    +type HostScsiTopology struct {
    +	DynamicData
    +
    +	Adapter []HostScsiTopologyInterface `xml:"adapter,omitempty"`
    +}
    +
    +func init() {
    +	t["HostScsiTopology"] = reflect.TypeOf((*HostScsiTopology)(nil)).Elem()
    +}
    +
    +type HostScsiTopologyInterface struct {
    +	DynamicData
    +
    +	Key     string                   `xml:"key"`
    +	Adapter string                   `xml:"adapter"`
    +	Target  []HostScsiTopologyTarget `xml:"target,omitempty"`
    +}
    +
    +func init() {
    +	t["HostScsiTopologyInterface"] = reflect.TypeOf((*HostScsiTopologyInterface)(nil)).Elem()
    +}
    +
    +type HostScsiTopologyLun struct {
    +	DynamicData
    +
    +	Key     string `xml:"key"`
    +	Lun     int32  `xml:"lun"`
    +	ScsiLun string `xml:"scsiLun"`
    +}
    +
    +func init() {
    +	t["HostScsiTopologyLun"] = reflect.TypeOf((*HostScsiTopologyLun)(nil)).Elem()
    +}
    +
    +type HostScsiTopologyTarget struct {
    +	DynamicData
    +
    +	Key       string                  `xml:"key"`
    +	Target    int32                   `xml:"target"`
    +	Lun       []HostScsiTopologyLun   `xml:"lun,omitempty"`
    +	Transport BaseHostTargetTransport `xml:"transport,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostScsiTopologyTarget"] = reflect.TypeOf((*HostScsiTopologyTarget)(nil)).Elem()
    +}
    +
    +type HostSecuritySpec struct {
    +	DynamicData
    +
    +	AdminPassword    string       `xml:"adminPassword,omitempty"`
    +	RemovePermission []Permission `xml:"removePermission,omitempty"`
    +	AddPermission    []Permission `xml:"addPermission,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSecuritySpec"] = reflect.TypeOf((*HostSecuritySpec)(nil)).Elem()
    +}
    +
    +type HostSerialAttachedHba struct {
    +	HostHostBusAdapter
    +
    +	NodeWorldWideName string `xml:"nodeWorldWideName"`
    +}
    +
    +func init() {
    +	t["HostSerialAttachedHba"] = reflect.TypeOf((*HostSerialAttachedHba)(nil)).Elem()
    +}
    +
    +type HostSerialAttachedTargetTransport struct {
    +	HostTargetTransport
    +}
    +
    +func init() {
    +	t["HostSerialAttachedTargetTransport"] = reflect.TypeOf((*HostSerialAttachedTargetTransport)(nil)).Elem()
    +}
    +
    +type HostService struct {
    +	DynamicData
    +
    +	Key           string                    `xml:"key"`
    +	Label         string                    `xml:"label"`
    +	Required      bool                      `xml:"required"`
    +	Uninstallable bool                      `xml:"uninstallable"`
    +	Running       bool                      `xml:"running"`
    +	Ruleset       []string                  `xml:"ruleset,omitempty"`
    +	Policy        string                    `xml:"policy"`
    +	SourcePackage *HostServiceSourcePackage `xml:"sourcePackage,omitempty"`
    +}
    +
    +func init() {
    +	t["HostService"] = reflect.TypeOf((*HostService)(nil)).Elem()
    +}
    +
    +type HostServiceConfig struct {
    +	DynamicData
    +
    +	ServiceId     string `xml:"serviceId"`
    +	StartupPolicy string `xml:"startupPolicy"`
    +}
    +
    +func init() {
    +	t["HostServiceConfig"] = reflect.TypeOf((*HostServiceConfig)(nil)).Elem()
    +}
    +
    +type HostServiceInfo struct {
    +	DynamicData
    +
    +	Service []HostService `xml:"service,omitempty"`
    +}
    +
    +func init() {
    +	t["HostServiceInfo"] = reflect.TypeOf((*HostServiceInfo)(nil)).Elem()
    +}
    +
    +type HostServiceSourcePackage struct {
    +	DynamicData
    +
    +	SourcePackageName string `xml:"sourcePackageName"`
    +	Description       string `xml:"description"`
    +}
    +
    +func init() {
    +	t["HostServiceSourcePackage"] = reflect.TypeOf((*HostServiceSourcePackage)(nil)).Elem()
    +}
    +
    +type HostServiceTicket struct {
    +	DynamicData
    +
    +	Host           string `xml:"host,omitempty"`
    +	Port           int32  `xml:"port,omitempty"`
    +	SslThumbprint  string `xml:"sslThumbprint,omitempty"`
    +	Service        string `xml:"service"`
    +	ServiceVersion string `xml:"serviceVersion"`
    +	SessionId      string `xml:"sessionId"`
    +}
    +
    +func init() {
    +	t["HostServiceTicket"] = reflect.TypeOf((*HostServiceTicket)(nil)).Elem()
    +}
    +
    +type HostSetVStorageObjectControlFlags HostSetVStorageObjectControlFlagsRequestType
    +
    +func init() {
    +	t["HostSetVStorageObjectControlFlags"] = reflect.TypeOf((*HostSetVStorageObjectControlFlags)(nil)).Elem()
    +}
    +
    +type HostSetVStorageObjectControlFlagsRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Id           ID                     `xml:"id"`
    +	Datastore    ManagedObjectReference `xml:"datastore"`
    +	ControlFlags []string               `xml:"controlFlags,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSetVStorageObjectControlFlagsRequestType"] = reflect.TypeOf((*HostSetVStorageObjectControlFlagsRequestType)(nil)).Elem()
    +}
    +
    +type HostSetVStorageObjectControlFlagsResponse struct {
    +}
    +
    +type HostSharedGpuCapabilities struct {
    +	DynamicData
    +
    +	Vgpu                    string `xml:"vgpu"`
    +	DiskSnapshotSupported   bool   `xml:"diskSnapshotSupported"`
    +	MemorySnapshotSupported bool   `xml:"memorySnapshotSupported"`
    +	SuspendSupported        bool   `xml:"suspendSupported"`
    +	MigrateSupported        bool   `xml:"migrateSupported"`
    +}
    +
    +func init() {
    +	t["HostSharedGpuCapabilities"] = reflect.TypeOf((*HostSharedGpuCapabilities)(nil)).Elem()
    +}
    +
    +type HostShortNameInconsistentEvent struct {
    +	HostDasEvent
    +
    +	ShortName  string `xml:"shortName"`
    +	ShortName2 string `xml:"shortName2"`
    +}
    +
    +func init() {
    +	t["HostShortNameInconsistentEvent"] = reflect.TypeOf((*HostShortNameInconsistentEvent)(nil)).Elem()
    +}
    +
    +type HostShortNameToIpFailedEvent struct {
    +	HostEvent
    +
    +	ShortName string `xml:"shortName"`
    +}
    +
    +func init() {
    +	t["HostShortNameToIpFailedEvent"] = reflect.TypeOf((*HostShortNameToIpFailedEvent)(nil)).Elem()
    +}
    +
    +type HostShutdownEvent struct {
    +	HostEvent
    +
    +	Reason string `xml:"reason"`
    +}
    +
    +func init() {
    +	t["HostShutdownEvent"] = reflect.TypeOf((*HostShutdownEvent)(nil)).Elem()
    +}
    +
    +type HostSnmpConfigSpec struct {
    +	DynamicData
    +
    +	Enabled             *bool                 `xml:"enabled"`
    +	Port                int32                 `xml:"port,omitempty"`
    +	ReadOnlyCommunities []string              `xml:"readOnlyCommunities,omitempty"`
    +	TrapTargets         []HostSnmpDestination `xml:"trapTargets,omitempty"`
    +	Option              []KeyValue            `xml:"option,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSnmpConfigSpec"] = reflect.TypeOf((*HostSnmpConfigSpec)(nil)).Elem()
    +}
    +
    +type HostSnmpDestination struct {
    +	DynamicData
    +
    +	HostName  string `xml:"hostName"`
    +	Port      int32  `xml:"port"`
    +	Community string `xml:"community"`
    +}
    +
    +func init() {
    +	t["HostSnmpDestination"] = reflect.TypeOf((*HostSnmpDestination)(nil)).Elem()
    +}
    +
    +type HostSnmpSystemAgentLimits struct {
    +	DynamicData
    +
    +	MaxReadOnlyCommunities int32                   `xml:"maxReadOnlyCommunities"`
    +	MaxTrapDestinations    int32                   `xml:"maxTrapDestinations"`
    +	MaxCommunityLength     int32                   `xml:"maxCommunityLength"`
    +	MaxBufferSize          int32                   `xml:"maxBufferSize"`
    +	Capability             HostSnmpAgentCapability `xml:"capability,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSnmpSystemAgentLimits"] = reflect.TypeOf((*HostSnmpSystemAgentLimits)(nil)).Elem()
    +}
    +
    +type HostSpecGetUpdatedHosts HostSpecGetUpdatedHostsRequestType
    +
    +func init() {
    +	t["HostSpecGetUpdatedHosts"] = reflect.TypeOf((*HostSpecGetUpdatedHosts)(nil)).Elem()
    +}
    +
    +type HostSpecGetUpdatedHostsRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	StartChangeID string                 `xml:"startChangeID,omitempty"`
    +	EndChangeID   string                 `xml:"endChangeID,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSpecGetUpdatedHostsRequestType"] = reflect.TypeOf((*HostSpecGetUpdatedHostsRequestType)(nil)).Elem()
    +}
    +
    +type HostSpecGetUpdatedHostsResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type HostSpecification struct {
    +	DynamicData
    +
    +	CreatedTime  time.Time              `xml:"createdTime"`
    +	LastModified *time.Time             `xml:"lastModified"`
    +	Host         ManagedObjectReference `xml:"host"`
    +	SubSpecs     []HostSubSpecification `xml:"subSpecs,omitempty"`
    +	ChangeID     string                 `xml:"changeID,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSpecification"] = reflect.TypeOf((*HostSpecification)(nil)).Elem()
    +}
    +
    +type HostSpecificationOperationFailed struct {
    +	VimFault
    +
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["HostSpecificationOperationFailed"] = reflect.TypeOf((*HostSpecificationOperationFailed)(nil)).Elem()
    +}
    +
    +type HostSpecificationOperationFailedFault HostSpecificationOperationFailed
    +
    +func init() {
    +	t["HostSpecificationOperationFailedFault"] = reflect.TypeOf((*HostSpecificationOperationFailedFault)(nil)).Elem()
    +}
    +
    +type HostSriovConfig struct {
    +	HostPciPassthruConfig
    +
    +	SriovEnabled       bool  `xml:"sriovEnabled"`
    +	NumVirtualFunction int32 `xml:"numVirtualFunction"`
    +}
    +
    +func init() {
    +	t["HostSriovConfig"] = reflect.TypeOf((*HostSriovConfig)(nil)).Elem()
    +}
    +
    +type HostSriovDevicePoolInfo struct {
    +	DynamicData
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["HostSriovDevicePoolInfo"] = reflect.TypeOf((*HostSriovDevicePoolInfo)(nil)).Elem()
    +}
    +
    +type HostSriovInfo struct {
    +	HostPciPassthruInfo
    +
    +	SriovEnabled                bool  `xml:"sriovEnabled"`
    +	SriovCapable                bool  `xml:"sriovCapable"`
    +	SriovActive                 bool  `xml:"sriovActive"`
    +	NumVirtualFunctionRequested int32 `xml:"numVirtualFunctionRequested"`
    +	NumVirtualFunction          int32 `xml:"numVirtualFunction"`
    +	MaxVirtualFunctionSupported int32 `xml:"maxVirtualFunctionSupported"`
    +}
    +
    +func init() {
    +	t["HostSriovInfo"] = reflect.TypeOf((*HostSriovInfo)(nil)).Elem()
    +}
    +
    +type HostSriovNetworkDevicePoolInfo struct {
    +	HostSriovDevicePoolInfo
    +
    +	SwitchKey  string        `xml:"switchKey,omitempty"`
    +	SwitchUuid string        `xml:"switchUuid,omitempty"`
    +	Pnic       []PhysicalNic `xml:"pnic,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSriovNetworkDevicePoolInfo"] = reflect.TypeOf((*HostSriovNetworkDevicePoolInfo)(nil)).Elem()
    +}
    +
    +type HostSslThumbprintInfo struct {
    +	DynamicData
    +
    +	Principal      string   `xml:"principal"`
    +	OwnerTag       string   `xml:"ownerTag,omitempty"`
    +	SslThumbprints []string `xml:"sslThumbprints,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSslThumbprintInfo"] = reflect.TypeOf((*HostSslThumbprintInfo)(nil)).Elem()
    +}
    +
    +type HostStatusChangedEvent struct {
    +	ClusterStatusChangedEvent
    +}
    +
    +func init() {
    +	t["HostStatusChangedEvent"] = reflect.TypeOf((*HostStatusChangedEvent)(nil)).Elem()
    +}
    +
    +type HostStorageArrayTypePolicyOption struct {
    +	DynamicData
    +
    +	Policy BaseElementDescription `xml:"policy,typeattr"`
    +}
    +
    +func init() {
    +	t["HostStorageArrayTypePolicyOption"] = reflect.TypeOf((*HostStorageArrayTypePolicyOption)(nil)).Elem()
    +}
    +
    +type HostStorageDeviceInfo struct {
    +	DynamicData
    +
    +	HostBusAdapter              []BaseHostHostBusAdapter `xml:"hostBusAdapter,omitempty,typeattr"`
    +	ScsiLun                     []BaseScsiLun            `xml:"scsiLun,omitempty,typeattr"`
    +	ScsiTopology                *HostScsiTopology        `xml:"scsiTopology,omitempty"`
    +	MultipathInfo               *HostMultipathInfo       `xml:"multipathInfo,omitempty"`
    +	PlugStoreTopology           *HostPlugStoreTopology   `xml:"plugStoreTopology,omitempty"`
    +	SoftwareInternetScsiEnabled bool                     `xml:"softwareInternetScsiEnabled"`
    +}
    +
    +func init() {
    +	t["HostStorageDeviceInfo"] = reflect.TypeOf((*HostStorageDeviceInfo)(nil)).Elem()
    +}
    +
    +type HostStorageElementInfo struct {
    +	HostHardwareElementInfo
    +
    +	OperationalInfo []HostStorageOperationalInfo `xml:"operationalInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["HostStorageElementInfo"] = reflect.TypeOf((*HostStorageElementInfo)(nil)).Elem()
    +}
    +
    +type HostStorageOperationalInfo struct {
    +	DynamicData
    +
    +	Property string `xml:"property"`
    +	Value    string `xml:"value"`
    +}
    +
    +func init() {
    +	t["HostStorageOperationalInfo"] = reflect.TypeOf((*HostStorageOperationalInfo)(nil)).Elem()
    +}
    +
    +type HostStorageSystemDiskLocatorLedResult struct {
    +	DynamicData
    +
    +	Key   string               `xml:"key"`
    +	Fault LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["HostStorageSystemDiskLocatorLedResult"] = reflect.TypeOf((*HostStorageSystemDiskLocatorLedResult)(nil)).Elem()
    +}
    +
    +type HostStorageSystemScsiLunResult struct {
    +	DynamicData
    +
    +	Key   string                `xml:"key"`
    +	Fault *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["HostStorageSystemScsiLunResult"] = reflect.TypeOf((*HostStorageSystemScsiLunResult)(nil)).Elem()
    +}
    +
    +type HostStorageSystemVmfsVolumeResult struct {
    +	DynamicData
    +
    +	Key   string                `xml:"key"`
    +	Fault *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["HostStorageSystemVmfsVolumeResult"] = reflect.TypeOf((*HostStorageSystemVmfsVolumeResult)(nil)).Elem()
    +}
    +
    +type HostSubSpecification struct {
    +	DynamicData
    +
    +	Name        string    `xml:"name"`
    +	CreatedTime time.Time `xml:"createdTime"`
    +	Data        []byte    `xml:"data,omitempty"`
    +	BinaryData  []byte    `xml:"binaryData,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSubSpecification"] = reflect.TypeOf((*HostSubSpecification)(nil)).Elem()
    +}
    +
    +type HostSyncFailedEvent struct {
    +	HostEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["HostSyncFailedEvent"] = reflect.TypeOf((*HostSyncFailedEvent)(nil)).Elem()
    +}
    +
    +type HostSystemComplianceCheckState struct {
    +	DynamicData
    +
    +	State     string    `xml:"state"`
    +	CheckTime time.Time `xml:"checkTime"`
    +}
    +
    +func init() {
    +	t["HostSystemComplianceCheckState"] = reflect.TypeOf((*HostSystemComplianceCheckState)(nil)).Elem()
    +}
    +
    +type HostSystemHealthInfo struct {
    +	DynamicData
    +
    +	NumericSensorInfo []HostNumericSensorInfo `xml:"numericSensorInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSystemHealthInfo"] = reflect.TypeOf((*HostSystemHealthInfo)(nil)).Elem()
    +}
    +
    +type HostSystemIdentificationInfo struct {
    +	DynamicData
    +
    +	IdentifierValue string                 `xml:"identifierValue"`
    +	IdentifierType  BaseElementDescription `xml:"identifierType,typeattr"`
    +}
    +
    +func init() {
    +	t["HostSystemIdentificationInfo"] = reflect.TypeOf((*HostSystemIdentificationInfo)(nil)).Elem()
    +}
    +
    +type HostSystemInfo struct {
    +	DynamicData
    +
    +	Vendor               string                         `xml:"vendor"`
    +	Model                string                         `xml:"model"`
    +	Uuid                 string                         `xml:"uuid"`
    +	OtherIdentifyingInfo []HostSystemIdentificationInfo `xml:"otherIdentifyingInfo,omitempty"`
    +	SerialNumber         string                         `xml:"serialNumber,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSystemInfo"] = reflect.TypeOf((*HostSystemInfo)(nil)).Elem()
    +}
    +
    +type HostSystemReconnectSpec struct {
    +	DynamicData
    +
    +	SyncState *bool `xml:"syncState"`
    +}
    +
    +func init() {
    +	t["HostSystemReconnectSpec"] = reflect.TypeOf((*HostSystemReconnectSpec)(nil)).Elem()
    +}
    +
    +type HostSystemRemediationState struct {
    +	DynamicData
    +
    +	State         string    `xml:"state"`
    +	OperationTime time.Time `xml:"operationTime"`
    +}
    +
    +func init() {
    +	t["HostSystemRemediationState"] = reflect.TypeOf((*HostSystemRemediationState)(nil)).Elem()
    +}
    +
    +type HostSystemResourceInfo struct {
    +	DynamicData
    +
    +	Key    string                   `xml:"key"`
    +	Config *ResourceConfigSpec      `xml:"config,omitempty"`
    +	Child  []HostSystemResourceInfo `xml:"child,omitempty"`
    +}
    +
    +func init() {
    +	t["HostSystemResourceInfo"] = reflect.TypeOf((*HostSystemResourceInfo)(nil)).Elem()
    +}
    +
    +type HostSystemSwapConfiguration struct {
    +	DynamicData
    +
    +	Option []BaseHostSystemSwapConfigurationSystemSwapOption `xml:"option,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostSystemSwapConfiguration"] = reflect.TypeOf((*HostSystemSwapConfiguration)(nil)).Elem()
    +}
    +
    +type HostSystemSwapConfigurationDatastoreOption struct {
    +	HostSystemSwapConfigurationSystemSwapOption
    +
    +	Datastore string `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostSystemSwapConfigurationDatastoreOption"] = reflect.TypeOf((*HostSystemSwapConfigurationDatastoreOption)(nil)).Elem()
    +}
    +
    +type HostSystemSwapConfigurationDisabledOption struct {
    +	HostSystemSwapConfigurationSystemSwapOption
    +}
    +
    +func init() {
    +	t["HostSystemSwapConfigurationDisabledOption"] = reflect.TypeOf((*HostSystemSwapConfigurationDisabledOption)(nil)).Elem()
    +}
    +
    +type HostSystemSwapConfigurationHostCacheOption struct {
    +	HostSystemSwapConfigurationSystemSwapOption
    +}
    +
    +func init() {
    +	t["HostSystemSwapConfigurationHostCacheOption"] = reflect.TypeOf((*HostSystemSwapConfigurationHostCacheOption)(nil)).Elem()
    +}
    +
    +type HostSystemSwapConfigurationHostLocalSwapOption struct {
    +	HostSystemSwapConfigurationSystemSwapOption
    +}
    +
    +func init() {
    +	t["HostSystemSwapConfigurationHostLocalSwapOption"] = reflect.TypeOf((*HostSystemSwapConfigurationHostLocalSwapOption)(nil)).Elem()
    +}
    +
    +type HostSystemSwapConfigurationSystemSwapOption struct {
    +	DynamicData
    +
    +	Key int32 `xml:"key"`
    +}
    +
    +func init() {
    +	t["HostSystemSwapConfigurationSystemSwapOption"] = reflect.TypeOf((*HostSystemSwapConfigurationSystemSwapOption)(nil)).Elem()
    +}
    +
    +type HostTargetTransport struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["HostTargetTransport"] = reflect.TypeOf((*HostTargetTransport)(nil)).Elem()
    +}
    +
    +type HostTpmAttestationInfo struct {
    +	DynamicData
    +
    +	Time    time.Time                              `xml:"time"`
    +	Status  HostTpmAttestationInfoAcceptanceStatus `xml:"status"`
    +	Message *LocalizableMessage                    `xml:"message,omitempty"`
    +}
    +
    +func init() {
    +	t["HostTpmAttestationInfo"] = reflect.TypeOf((*HostTpmAttestationInfo)(nil)).Elem()
    +}
    +
    +type HostTpmAttestationReport struct {
    +	DynamicData
    +
    +	TpmPcrValues   []HostTpmDigestInfo    `xml:"tpmPcrValues"`
    +	TpmEvents      []HostTpmEventLogEntry `xml:"tpmEvents"`
    +	TpmLogReliable bool                   `xml:"tpmLogReliable"`
    +}
    +
    +func init() {
    +	t["HostTpmAttestationReport"] = reflect.TypeOf((*HostTpmAttestationReport)(nil)).Elem()
    +}
    +
    +type HostTpmBootSecurityOptionEventDetails struct {
    +	HostTpmEventDetails
    +
    +	BootSecurityOption string `xml:"bootSecurityOption"`
    +}
    +
    +func init() {
    +	t["HostTpmBootSecurityOptionEventDetails"] = reflect.TypeOf((*HostTpmBootSecurityOptionEventDetails)(nil)).Elem()
    +}
    +
    +type HostTpmCommandEventDetails struct {
    +	HostTpmEventDetails
    +
    +	CommandLine string `xml:"commandLine"`
    +}
    +
    +func init() {
    +	t["HostTpmCommandEventDetails"] = reflect.TypeOf((*HostTpmCommandEventDetails)(nil)).Elem()
    +}
    +
    +type HostTpmDigestInfo struct {
    +	HostDigestInfo
    +
    +	PcrNumber int32 `xml:"pcrNumber"`
    +}
    +
    +func init() {
    +	t["HostTpmDigestInfo"] = reflect.TypeOf((*HostTpmDigestInfo)(nil)).Elem()
    +}
    +
    +type HostTpmEventDetails struct {
    +	DynamicData
    +
    +	DataHash       []byte `xml:"dataHash"`
    +	DataHashMethod string `xml:"dataHashMethod,omitempty"`
    +}
    +
    +func init() {
    +	t["HostTpmEventDetails"] = reflect.TypeOf((*HostTpmEventDetails)(nil)).Elem()
    +}
    +
    +type HostTpmEventLogEntry struct {
    +	DynamicData
    +
    +	PcrIndex     int32                   `xml:"pcrIndex"`
    +	EventDetails BaseHostTpmEventDetails `xml:"eventDetails,typeattr"`
    +}
    +
    +func init() {
    +	t["HostTpmEventLogEntry"] = reflect.TypeOf((*HostTpmEventLogEntry)(nil)).Elem()
    +}
    +
    +type HostTpmOptionEventDetails struct {
    +	HostTpmEventDetails
    +
    +	OptionsFileName string `xml:"optionsFileName"`
    +	BootOptions     []byte `xml:"bootOptions,omitempty"`
    +}
    +
    +func init() {
    +	t["HostTpmOptionEventDetails"] = reflect.TypeOf((*HostTpmOptionEventDetails)(nil)).Elem()
    +}
    +
    +type HostTpmSoftwareComponentEventDetails struct {
    +	HostTpmEventDetails
    +
    +	ComponentName string `xml:"componentName"`
    +	VibName       string `xml:"vibName"`
    +	VibVersion    string `xml:"vibVersion"`
    +	VibVendor     string `xml:"vibVendor"`
    +}
    +
    +func init() {
    +	t["HostTpmSoftwareComponentEventDetails"] = reflect.TypeOf((*HostTpmSoftwareComponentEventDetails)(nil)).Elem()
    +}
    +
    +type HostUnresolvedVmfsExtent struct {
    +	DynamicData
    +
    +	Device       HostScsiDiskPartition `xml:"device"`
    +	DevicePath   string                `xml:"devicePath"`
    +	VmfsUuid     string                `xml:"vmfsUuid"`
    +	IsHeadExtent bool                  `xml:"isHeadExtent"`
    +	Ordinal      int32                 `xml:"ordinal"`
    +	StartBlock   int32                 `xml:"startBlock"`
    +	EndBlock     int32                 `xml:"endBlock"`
    +	Reason       string                `xml:"reason"`
    +}
    +
    +func init() {
    +	t["HostUnresolvedVmfsExtent"] = reflect.TypeOf((*HostUnresolvedVmfsExtent)(nil)).Elem()
    +}
    +
    +type HostUnresolvedVmfsResignatureSpec struct {
    +	DynamicData
    +
    +	ExtentDevicePath []string `xml:"extentDevicePath"`
    +}
    +
    +func init() {
    +	t["HostUnresolvedVmfsResignatureSpec"] = reflect.TypeOf((*HostUnresolvedVmfsResignatureSpec)(nil)).Elem()
    +}
    +
    +type HostUnresolvedVmfsResolutionResult struct {
    +	DynamicData
    +
    +	Spec  HostUnresolvedVmfsResolutionSpec `xml:"spec"`
    +	Vmfs  *HostVmfsVolume                  `xml:"vmfs,omitempty"`
    +	Fault *LocalizedMethodFault            `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["HostUnresolvedVmfsResolutionResult"] = reflect.TypeOf((*HostUnresolvedVmfsResolutionResult)(nil)).Elem()
    +}
    +
    +type HostUnresolvedVmfsResolutionSpec struct {
    +	DynamicData
    +
    +	ExtentDevicePath []string `xml:"extentDevicePath"`
    +	UuidResolution   string   `xml:"uuidResolution"`
    +}
    +
    +func init() {
    +	t["HostUnresolvedVmfsResolutionSpec"] = reflect.TypeOf((*HostUnresolvedVmfsResolutionSpec)(nil)).Elem()
    +}
    +
    +type HostUnresolvedVmfsVolume struct {
    +	DynamicData
    +
    +	Extent        []HostUnresolvedVmfsExtent            `xml:"extent"`
    +	VmfsLabel     string                                `xml:"vmfsLabel"`
    +	VmfsUuid      string                                `xml:"vmfsUuid"`
    +	TotalBlocks   int32                                 `xml:"totalBlocks"`
    +	ResolveStatus HostUnresolvedVmfsVolumeResolveStatus `xml:"resolveStatus"`
    +}
    +
    +func init() {
    +	t["HostUnresolvedVmfsVolume"] = reflect.TypeOf((*HostUnresolvedVmfsVolume)(nil)).Elem()
    +}
    +
    +type HostUnresolvedVmfsVolumeResolveStatus struct {
    +	DynamicData
    +
    +	Resolvable        bool  `xml:"resolvable"`
    +	IncompleteExtents *bool `xml:"incompleteExtents"`
    +	MultipleCopies    *bool `xml:"multipleCopies"`
    +}
    +
    +func init() {
    +	t["HostUnresolvedVmfsVolumeResolveStatus"] = reflect.TypeOf((*HostUnresolvedVmfsVolumeResolveStatus)(nil)).Elem()
    +}
    +
    +type HostUpgradeFailedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostUpgradeFailedEvent"] = reflect.TypeOf((*HostUpgradeFailedEvent)(nil)).Elem()
    +}
    +
    +type HostUserWorldSwapNotEnabledEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["HostUserWorldSwapNotEnabledEvent"] = reflect.TypeOf((*HostUserWorldSwapNotEnabledEvent)(nil)).Elem()
    +}
    +
    +type HostVFlashManagerVFlashCacheConfigInfo struct {
    +	DynamicData
    +
    +	VFlashModuleConfigOption []HostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption `xml:"vFlashModuleConfigOption,omitempty"`
    +	DefaultVFlashModule      string                                                           `xml:"defaultVFlashModule,omitempty"`
    +	SwapCacheReservationInGB int64                                                            `xml:"swapCacheReservationInGB,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVFlashManagerVFlashCacheConfigInfo"] = reflect.TypeOf((*HostVFlashManagerVFlashCacheConfigInfo)(nil)).Elem()
    +}
    +
    +type HostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption struct {
    +	DynamicData
    +
    +	VFlashModule              string       `xml:"vFlashModule"`
    +	VFlashModuleVersion       string       `xml:"vFlashModuleVersion"`
    +	MinSupportedModuleVersion string       `xml:"minSupportedModuleVersion"`
    +	CacheConsistencyType      ChoiceOption `xml:"cacheConsistencyType"`
    +	CacheMode                 ChoiceOption `xml:"cacheMode"`
    +	BlockSizeInKBOption       LongOption   `xml:"blockSizeInKBOption"`
    +	ReservationInMBOption     LongOption   `xml:"reservationInMBOption"`
    +	MaxDiskSizeInKB           int64        `xml:"maxDiskSizeInKB"`
    +}
    +
    +func init() {
    +	t["HostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption"] = reflect.TypeOf((*HostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption)(nil)).Elem()
    +}
    +
    +type HostVFlashManagerVFlashCacheConfigSpec struct {
    +	DynamicData
    +
    +	DefaultVFlashModule      string `xml:"defaultVFlashModule"`
    +	SwapCacheReservationInGB int64  `xml:"swapCacheReservationInGB"`
    +}
    +
    +func init() {
    +	t["HostVFlashManagerVFlashCacheConfigSpec"] = reflect.TypeOf((*HostVFlashManagerVFlashCacheConfigSpec)(nil)).Elem()
    +}
    +
    +type HostVFlashManagerVFlashConfigInfo struct {
    +	DynamicData
    +
    +	VFlashResourceConfigInfo *HostVFlashManagerVFlashResourceConfigInfo `xml:"vFlashResourceConfigInfo,omitempty"`
    +	VFlashCacheConfigInfo    *HostVFlashManagerVFlashCacheConfigInfo    `xml:"vFlashCacheConfigInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVFlashManagerVFlashConfigInfo"] = reflect.TypeOf((*HostVFlashManagerVFlashConfigInfo)(nil)).Elem()
    +}
    +
    +type HostVFlashManagerVFlashResourceConfigInfo struct {
    +	DynamicData
    +
    +	Vffs     *HostVffsVolume `xml:"vffs,omitempty"`
    +	Capacity int64           `xml:"capacity"`
    +}
    +
    +func init() {
    +	t["HostVFlashManagerVFlashResourceConfigInfo"] = reflect.TypeOf((*HostVFlashManagerVFlashResourceConfigInfo)(nil)).Elem()
    +}
    +
    +type HostVFlashManagerVFlashResourceConfigSpec struct {
    +	DynamicData
    +
    +	VffsUuid string `xml:"vffsUuid"`
    +}
    +
    +func init() {
    +	t["HostVFlashManagerVFlashResourceConfigSpec"] = reflect.TypeOf((*HostVFlashManagerVFlashResourceConfigSpec)(nil)).Elem()
    +}
    +
    +type HostVFlashManagerVFlashResourceRunTimeInfo struct {
    +	DynamicData
    +
    +	Usage              int64 `xml:"usage"`
    +	Capacity           int64 `xml:"capacity"`
    +	Accessible         bool  `xml:"accessible"`
    +	CapacityForVmCache int64 `xml:"capacityForVmCache"`
    +	FreeForVmCache     int64 `xml:"freeForVmCache"`
    +}
    +
    +func init() {
    +	t["HostVFlashManagerVFlashResourceRunTimeInfo"] = reflect.TypeOf((*HostVFlashManagerVFlashResourceRunTimeInfo)(nil)).Elem()
    +}
    +
    +type HostVFlashResourceConfigurationResult struct {
    +	DynamicData
    +
    +	DevicePath              []string                      `xml:"devicePath,omitempty"`
    +	Vffs                    *HostVffsVolume               `xml:"vffs,omitempty"`
    +	DiskConfigurationResult []HostDiskConfigurationResult `xml:"diskConfigurationResult,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVFlashResourceConfigurationResult"] = reflect.TypeOf((*HostVFlashResourceConfigurationResult)(nil)).Elem()
    +}
    +
    +type HostVMotionCompatibility struct {
    +	DynamicData
    +
    +	Host          ManagedObjectReference `xml:"host"`
    +	Compatibility []string               `xml:"compatibility,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVMotionCompatibility"] = reflect.TypeOf((*HostVMotionCompatibility)(nil)).Elem()
    +}
    +
    +type HostVMotionConfig struct {
    +	DynamicData
    +
    +	VmotionNicKey string `xml:"vmotionNicKey,omitempty"`
    +	Enabled       bool   `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["HostVMotionConfig"] = reflect.TypeOf((*HostVMotionConfig)(nil)).Elem()
    +}
    +
    +type HostVMotionInfo struct {
    +	DynamicData
    +
    +	NetConfig *HostVMotionNetConfig `xml:"netConfig,omitempty"`
    +	IpConfig  *HostIpConfig         `xml:"ipConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVMotionInfo"] = reflect.TypeOf((*HostVMotionInfo)(nil)).Elem()
    +}
    +
    +type HostVMotionNetConfig struct {
    +	DynamicData
    +
    +	CandidateVnic []HostVirtualNic `xml:"candidateVnic,omitempty"`
    +	SelectedVnic  string           `xml:"selectedVnic,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVMotionNetConfig"] = reflect.TypeOf((*HostVMotionNetConfig)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectCreateDiskFromSnapshotRequestType struct {
    +	This       ManagedObjectReference          `xml:"_this"`
    +	Id         ID                              `xml:"id"`
    +	Datastore  ManagedObjectReference          `xml:"datastore"`
    +	SnapshotId ID                              `xml:"snapshotId"`
    +	Name       string                          `xml:"name"`
    +	Profile    []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +	Crypto     BaseCryptoSpec                  `xml:"crypto,omitempty,typeattr"`
    +	Path       string                          `xml:"path,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVStorageObjectCreateDiskFromSnapshotRequestType"] = reflect.TypeOf((*HostVStorageObjectCreateDiskFromSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectCreateDiskFromSnapshot_Task HostVStorageObjectCreateDiskFromSnapshotRequestType
    +
    +func init() {
    +	t["HostVStorageObjectCreateDiskFromSnapshot_Task"] = reflect.TypeOf((*HostVStorageObjectCreateDiskFromSnapshot_Task)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectCreateDiskFromSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostVStorageObjectCreateSnapshotRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Id          ID                     `xml:"id"`
    +	Datastore   ManagedObjectReference `xml:"datastore"`
    +	Description string                 `xml:"description"`
    +}
    +
    +func init() {
    +	t["HostVStorageObjectCreateSnapshotRequestType"] = reflect.TypeOf((*HostVStorageObjectCreateSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectCreateSnapshot_Task HostVStorageObjectCreateSnapshotRequestType
    +
    +func init() {
    +	t["HostVStorageObjectCreateSnapshot_Task"] = reflect.TypeOf((*HostVStorageObjectCreateSnapshot_Task)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectCreateSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostVStorageObjectDeleteSnapshotRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Id         ID                     `xml:"id"`
    +	Datastore  ManagedObjectReference `xml:"datastore"`
    +	SnapshotId ID                     `xml:"snapshotId"`
    +}
    +
    +func init() {
    +	t["HostVStorageObjectDeleteSnapshotRequestType"] = reflect.TypeOf((*HostVStorageObjectDeleteSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectDeleteSnapshot_Task HostVStorageObjectDeleteSnapshotRequestType
    +
    +func init() {
    +	t["HostVStorageObjectDeleteSnapshot_Task"] = reflect.TypeOf((*HostVStorageObjectDeleteSnapshot_Task)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectDeleteSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostVStorageObjectRetrieveSnapshotInfo HostVStorageObjectRetrieveSnapshotInfoRequestType
    +
    +func init() {
    +	t["HostVStorageObjectRetrieveSnapshotInfo"] = reflect.TypeOf((*HostVStorageObjectRetrieveSnapshotInfo)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectRetrieveSnapshotInfoRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["HostVStorageObjectRetrieveSnapshotInfoRequestType"] = reflect.TypeOf((*HostVStorageObjectRetrieveSnapshotInfoRequestType)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectRetrieveSnapshotInfoResponse struct {
    +	Returnval VStorageObjectSnapshotInfo `xml:"returnval"`
    +}
    +
    +type HostVStorageObjectRevertRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Id         ID                     `xml:"id"`
    +	Datastore  ManagedObjectReference `xml:"datastore"`
    +	SnapshotId ID                     `xml:"snapshotId"`
    +}
    +
    +func init() {
    +	t["HostVStorageObjectRevertRequestType"] = reflect.TypeOf((*HostVStorageObjectRevertRequestType)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectRevert_Task HostVStorageObjectRevertRequestType
    +
    +func init() {
    +	t["HostVStorageObjectRevert_Task"] = reflect.TypeOf((*HostVStorageObjectRevert_Task)(nil)).Elem()
    +}
    +
    +type HostVStorageObjectRevert_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HostVfatVolume struct {
    +	HostFileSystemVolume
    +}
    +
    +func init() {
    +	t["HostVfatVolume"] = reflect.TypeOf((*HostVfatVolume)(nil)).Elem()
    +}
    +
    +type HostVffsSpec struct {
    +	DynamicData
    +
    +	DevicePath   string                 `xml:"devicePath"`
    +	Partition    *HostDiskPartitionSpec `xml:"partition,omitempty"`
    +	MajorVersion int32                  `xml:"majorVersion"`
    +	VolumeName   string                 `xml:"volumeName"`
    +}
    +
    +func init() {
    +	t["HostVffsSpec"] = reflect.TypeOf((*HostVffsSpec)(nil)).Elem()
    +}
    +
    +type HostVffsVolume struct {
    +	HostFileSystemVolume
    +
    +	MajorVersion int32                   `xml:"majorVersion"`
    +	Version      string                  `xml:"version"`
    +	Uuid         string                  `xml:"uuid"`
    +	Extent       []HostScsiDiskPartition `xml:"extent"`
    +}
    +
    +func init() {
    +	t["HostVffsVolume"] = reflect.TypeOf((*HostVffsVolume)(nil)).Elem()
    +}
    +
    +type HostVirtualNic struct {
    +	DynamicData
    +
    +	Device    string             `xml:"device"`
    +	Key       string             `xml:"key"`
    +	Portgroup string             `xml:"portgroup"`
    +	Spec      HostVirtualNicSpec `xml:"spec"`
    +	Port      string             `xml:"port,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualNic"] = reflect.TypeOf((*HostVirtualNic)(nil)).Elem()
    +}
    +
    +type HostVirtualNicConfig struct {
    +	DynamicData
    +
    +	ChangeOperation string              `xml:"changeOperation,omitempty"`
    +	Device          string              `xml:"device,omitempty"`
    +	Portgroup       string              `xml:"portgroup"`
    +	Spec            *HostVirtualNicSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualNicConfig"] = reflect.TypeOf((*HostVirtualNicConfig)(nil)).Elem()
    +}
    +
    +type HostVirtualNicConnection struct {
    +	DynamicData
    +
    +	Portgroup string                                  `xml:"portgroup,omitempty"`
    +	DvPort    *DistributedVirtualSwitchPortConnection `xml:"dvPort,omitempty"`
    +	OpNetwork *HostVirtualNicOpaqueNetworkSpec        `xml:"opNetwork,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualNicConnection"] = reflect.TypeOf((*HostVirtualNicConnection)(nil)).Elem()
    +}
    +
    +type HostVirtualNicIpRouteSpec struct {
    +	DynamicData
    +
    +	IpRouteConfig BaseHostIpRouteConfig `xml:"ipRouteConfig,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["HostVirtualNicIpRouteSpec"] = reflect.TypeOf((*HostVirtualNicIpRouteSpec)(nil)).Elem()
    +}
    +
    +type HostVirtualNicManagerInfo struct {
    +	DynamicData
    +
    +	NetConfig []VirtualNicManagerNetConfig `xml:"netConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualNicManagerInfo"] = reflect.TypeOf((*HostVirtualNicManagerInfo)(nil)).Elem()
    +}
    +
    +type HostVirtualNicManagerNicTypeSelection struct {
    +	DynamicData
    +
    +	Vnic    HostVirtualNicConnection `xml:"vnic"`
    +	NicType []string                 `xml:"nicType,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualNicManagerNicTypeSelection"] = reflect.TypeOf((*HostVirtualNicManagerNicTypeSelection)(nil)).Elem()
    +}
    +
    +type HostVirtualNicOpaqueNetworkSpec struct {
    +	DynamicData
    +
    +	OpaqueNetworkId   string `xml:"opaqueNetworkId"`
    +	OpaqueNetworkType string `xml:"opaqueNetworkType"`
    +}
    +
    +func init() {
    +	t["HostVirtualNicOpaqueNetworkSpec"] = reflect.TypeOf((*HostVirtualNicOpaqueNetworkSpec)(nil)).Elem()
    +}
    +
    +type HostVirtualNicSpec struct {
    +	DynamicData
    +
    +	Ip                     *HostIpConfig                           `xml:"ip,omitempty"`
    +	Mac                    string                                  `xml:"mac,omitempty"`
    +	DistributedVirtualPort *DistributedVirtualSwitchPortConnection `xml:"distributedVirtualPort,omitempty"`
    +	Portgroup              string                                  `xml:"portgroup,omitempty"`
    +	Mtu                    int32                                   `xml:"mtu,omitempty"`
    +	TsoEnabled             *bool                                   `xml:"tsoEnabled"`
    +	NetStackInstanceKey    string                                  `xml:"netStackInstanceKey,omitempty"`
    +	OpaqueNetwork          *HostVirtualNicOpaqueNetworkSpec        `xml:"opaqueNetwork,omitempty"`
    +	ExternalId             string                                  `xml:"externalId,omitempty"`
    +	PinnedPnic             string                                  `xml:"pinnedPnic,omitempty"`
    +	IpRouteSpec            *HostVirtualNicIpRouteSpec              `xml:"ipRouteSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualNicSpec"] = reflect.TypeOf((*HostVirtualNicSpec)(nil)).Elem()
    +}
    +
    +type HostVirtualSwitch struct {
    +	DynamicData
    +
    +	Name              string                `xml:"name"`
    +	Key               string                `xml:"key"`
    +	NumPorts          int32                 `xml:"numPorts"`
    +	NumPortsAvailable int32                 `xml:"numPortsAvailable"`
    +	Mtu               int32                 `xml:"mtu,omitempty"`
    +	Portgroup         []string              `xml:"portgroup,omitempty"`
    +	Pnic              []string              `xml:"pnic,omitempty"`
    +	Spec              HostVirtualSwitchSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["HostVirtualSwitch"] = reflect.TypeOf((*HostVirtualSwitch)(nil)).Elem()
    +}
    +
    +type HostVirtualSwitchAutoBridge struct {
    +	HostVirtualSwitchBridge
    +
    +	ExcludedNicDevice []string `xml:"excludedNicDevice,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualSwitchAutoBridge"] = reflect.TypeOf((*HostVirtualSwitchAutoBridge)(nil)).Elem()
    +}
    +
    +type HostVirtualSwitchBeaconConfig struct {
    +	DynamicData
    +
    +	Interval int32 `xml:"interval"`
    +}
    +
    +func init() {
    +	t["HostVirtualSwitchBeaconConfig"] = reflect.TypeOf((*HostVirtualSwitchBeaconConfig)(nil)).Elem()
    +}
    +
    +type HostVirtualSwitchBondBridge struct {
    +	HostVirtualSwitchBridge
    +
    +	NicDevice                   []string                       `xml:"nicDevice"`
    +	Beacon                      *HostVirtualSwitchBeaconConfig `xml:"beacon,omitempty"`
    +	LinkDiscoveryProtocolConfig *LinkDiscoveryProtocolConfig   `xml:"linkDiscoveryProtocolConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualSwitchBondBridge"] = reflect.TypeOf((*HostVirtualSwitchBondBridge)(nil)).Elem()
    +}
    +
    +type HostVirtualSwitchBridge struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["HostVirtualSwitchBridge"] = reflect.TypeOf((*HostVirtualSwitchBridge)(nil)).Elem()
    +}
    +
    +type HostVirtualSwitchConfig struct {
    +	DynamicData
    +
    +	ChangeOperation string                 `xml:"changeOperation,omitempty"`
    +	Name            string                 `xml:"name"`
    +	Spec            *HostVirtualSwitchSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualSwitchConfig"] = reflect.TypeOf((*HostVirtualSwitchConfig)(nil)).Elem()
    +}
    +
    +type HostVirtualSwitchSimpleBridge struct {
    +	HostVirtualSwitchBridge
    +
    +	NicDevice string `xml:"nicDevice"`
    +}
    +
    +func init() {
    +	t["HostVirtualSwitchSimpleBridge"] = reflect.TypeOf((*HostVirtualSwitchSimpleBridge)(nil)).Elem()
    +}
    +
    +type HostVirtualSwitchSpec struct {
    +	DynamicData
    +
    +	NumPorts int32                       `xml:"numPorts"`
    +	Bridge   BaseHostVirtualSwitchBridge `xml:"bridge,omitempty,typeattr"`
    +	Policy   *HostNetworkPolicy          `xml:"policy,omitempty"`
    +	Mtu      int32                       `xml:"mtu,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVirtualSwitchSpec"] = reflect.TypeOf((*HostVirtualSwitchSpec)(nil)).Elem()
    +}
    +
    +type HostVmciAccessManagerAccessSpec struct {
    +	DynamicData
    +
    +	Vm       ManagedObjectReference `xml:"vm"`
    +	Services []string               `xml:"services,omitempty"`
    +	Mode     string                 `xml:"mode"`
    +}
    +
    +func init() {
    +	t["HostVmciAccessManagerAccessSpec"] = reflect.TypeOf((*HostVmciAccessManagerAccessSpec)(nil)).Elem()
    +}
    +
    +type HostVmfsRescanResult struct {
    +	DynamicData
    +
    +	Host  ManagedObjectReference `xml:"host"`
    +	Fault *LocalizedMethodFault  `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVmfsRescanResult"] = reflect.TypeOf((*HostVmfsRescanResult)(nil)).Elem()
    +}
    +
    +type HostVmfsSpec struct {
    +	DynamicData
    +
    +	Extent             HostScsiDiskPartition   `xml:"extent"`
    +	BlockSizeMb        int32                   `xml:"blockSizeMb,omitempty"`
    +	MajorVersion       int32                   `xml:"majorVersion"`
    +	VolumeName         string                  `xml:"volumeName"`
    +	BlockSize          int32                   `xml:"blockSize,omitempty"`
    +	UnmapGranularity   int32                   `xml:"unmapGranularity,omitempty"`
    +	UnmapPriority      string                  `xml:"unmapPriority,omitempty"`
    +	UnmapBandwidthSpec *VmfsUnmapBandwidthSpec `xml:"unmapBandwidthSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVmfsSpec"] = reflect.TypeOf((*HostVmfsSpec)(nil)).Elem()
    +}
    +
    +type HostVmfsVolume struct {
    +	HostFileSystemVolume
    +
    +	BlockSizeMb        int32                   `xml:"blockSizeMb"`
    +	BlockSize          int32                   `xml:"blockSize,omitempty"`
    +	UnmapGranularity   int32                   `xml:"unmapGranularity,omitempty"`
    +	UnmapPriority      string                  `xml:"unmapPriority,omitempty"`
    +	UnmapBandwidthSpec *VmfsUnmapBandwidthSpec `xml:"unmapBandwidthSpec,omitempty"`
    +	MaxBlocks          int32                   `xml:"maxBlocks"`
    +	MajorVersion       int32                   `xml:"majorVersion"`
    +	Version            string                  `xml:"version"`
    +	Uuid               string                  `xml:"uuid"`
    +	Extent             []HostScsiDiskPartition `xml:"extent"`
    +	VmfsUpgradable     bool                    `xml:"vmfsUpgradable"`
    +	ForceMountedInfo   *HostForceMountedInfo   `xml:"forceMountedInfo,omitempty"`
    +	Ssd                *bool                   `xml:"ssd"`
    +	Local              *bool                   `xml:"local"`
    +	ScsiDiskType       string                  `xml:"scsiDiskType,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVmfsVolume"] = reflect.TypeOf((*HostVmfsVolume)(nil)).Elem()
    +}
    +
    +type HostVnicConnectedToCustomizedDVPortEvent struct {
    +	HostEvent
    +
    +	Vnic        VnicPortArgument `xml:"vnic"`
    +	PrevPortKey string           `xml:"prevPortKey,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVnicConnectedToCustomizedDVPortEvent"] = reflect.TypeOf((*HostVnicConnectedToCustomizedDVPortEvent)(nil)).Elem()
    +}
    +
    +type HostVsanInternalSystemCmmdsQuery struct {
    +	DynamicData
    +
    +	Type  string `xml:"type,omitempty"`
    +	Uuid  string `xml:"uuid,omitempty"`
    +	Owner string `xml:"owner,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVsanInternalSystemCmmdsQuery"] = reflect.TypeOf((*HostVsanInternalSystemCmmdsQuery)(nil)).Elem()
    +}
    +
    +type HostVsanInternalSystemDeleteVsanObjectsResult struct {
    +	DynamicData
    +
    +	Uuid          string               `xml:"uuid"`
    +	Success       bool                 `xml:"success"`
    +	FailureReason []LocalizableMessage `xml:"failureReason,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVsanInternalSystemDeleteVsanObjectsResult"] = reflect.TypeOf((*HostVsanInternalSystemDeleteVsanObjectsResult)(nil)).Elem()
    +}
    +
    +type HostVsanInternalSystemVsanObjectOperationResult struct {
    +	DynamicData
    +
    +	Uuid          string               `xml:"uuid"`
    +	FailureReason []LocalizableMessage `xml:"failureReason,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVsanInternalSystemVsanObjectOperationResult"] = reflect.TypeOf((*HostVsanInternalSystemVsanObjectOperationResult)(nil)).Elem()
    +}
    +
    +type HostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult struct {
    +	DynamicData
    +
    +	DiskUuid      string `xml:"diskUuid"`
    +	Success       bool   `xml:"success"`
    +	FailureReason string `xml:"failureReason,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult"] = reflect.TypeOf((*HostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult)(nil)).Elem()
    +}
    +
    +type HostVvolVolume struct {
    +	HostFileSystemVolume
    +
    +	ScId             string                `xml:"scId"`
    +	HostPE           []VVolHostPE          `xml:"hostPE,omitempty"`
    +	VasaProviderInfo []VimVasaProviderInfo `xml:"vasaProviderInfo,omitempty"`
    +	StorageArray     []VASAStorageArray    `xml:"storageArray,omitempty"`
    +}
    +
    +func init() {
    +	t["HostVvolVolume"] = reflect.TypeOf((*HostVvolVolume)(nil)).Elem()
    +}
    +
    +type HostVvolVolumeSpecification struct {
    +	DynamicData
    +
    +	MaxSizeInMB      int64                 `xml:"maxSizeInMB"`
    +	VolumeName       string                `xml:"volumeName"`
    +	VasaProviderInfo []VimVasaProviderInfo `xml:"vasaProviderInfo,omitempty"`
    +	StorageArray     []VASAStorageArray    `xml:"storageArray,omitempty"`
    +	Uuid             string                `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["HostVvolVolumeSpecification"] = reflect.TypeOf((*HostVvolVolumeSpecification)(nil)).Elem()
    +}
    +
    +type HostWwnChangedEvent struct {
    +	HostEvent
    +
    +	OldNodeWwns []int64 `xml:"oldNodeWwns,omitempty"`
    +	OldPortWwns []int64 `xml:"oldPortWwns,omitempty"`
    +	NewNodeWwns []int64 `xml:"newNodeWwns,omitempty"`
    +	NewPortWwns []int64 `xml:"newPortWwns,omitempty"`
    +}
    +
    +func init() {
    +	t["HostWwnChangedEvent"] = reflect.TypeOf((*HostWwnChangedEvent)(nil)).Elem()
    +}
    +
    +type HostWwnConflictEvent struct {
    +	HostEvent
    +
    +	ConflictedVms   []VmEventArgument   `xml:"conflictedVms,omitempty"`
    +	ConflictedHosts []HostEventArgument `xml:"conflictedHosts,omitempty"`
    +	Wwn             int64               `xml:"wwn"`
    +}
    +
    +func init() {
    +	t["HostWwnConflictEvent"] = reflect.TypeOf((*HostWwnConflictEvent)(nil)).Elem()
    +}
    +
    +type HotSnapshotMoveNotSupported struct {
    +	SnapshotCopyNotSupported
    +}
    +
    +func init() {
    +	t["HotSnapshotMoveNotSupported"] = reflect.TypeOf((*HotSnapshotMoveNotSupported)(nil)).Elem()
    +}
    +
    +type HotSnapshotMoveNotSupportedFault HotSnapshotMoveNotSupported
    +
    +func init() {
    +	t["HotSnapshotMoveNotSupportedFault"] = reflect.TypeOf((*HotSnapshotMoveNotSupportedFault)(nil)).Elem()
    +}
    +
    +type HourlyTaskScheduler struct {
    +	RecurrentTaskScheduler
    +
    +	Minute int32 `xml:"minute"`
    +}
    +
    +func init() {
    +	t["HourlyTaskScheduler"] = reflect.TypeOf((*HourlyTaskScheduler)(nil)).Elem()
    +}
    +
    +type HttpFault struct {
    +	VimFault
    +
    +	StatusCode    int32  `xml:"statusCode"`
    +	StatusMessage string `xml:"statusMessage"`
    +}
    +
    +func init() {
    +	t["HttpFault"] = reflect.TypeOf((*HttpFault)(nil)).Elem()
    +}
    +
    +type HttpFaultFault HttpFault
    +
    +func init() {
    +	t["HttpFaultFault"] = reflect.TypeOf((*HttpFaultFault)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseAbort HttpNfcLeaseAbortRequestType
    +
    +func init() {
    +	t["HttpNfcLeaseAbort"] = reflect.TypeOf((*HttpNfcLeaseAbort)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseAbortRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Fault *LocalizedMethodFault  `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseAbortRequestType"] = reflect.TypeOf((*HttpNfcLeaseAbortRequestType)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseAbortResponse struct {
    +}
    +
    +type HttpNfcLeaseCapabilities struct {
    +	DynamicData
    +
    +	PullModeSupported bool `xml:"pullModeSupported"`
    +	CorsSupported     bool `xml:"corsSupported"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseCapabilities"] = reflect.TypeOf((*HttpNfcLeaseCapabilities)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseComplete HttpNfcLeaseCompleteRequestType
    +
    +func init() {
    +	t["HttpNfcLeaseComplete"] = reflect.TypeOf((*HttpNfcLeaseComplete)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseCompleteRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseCompleteRequestType"] = reflect.TypeOf((*HttpNfcLeaseCompleteRequestType)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseCompleteResponse struct {
    +}
    +
    +type HttpNfcLeaseDatastoreLeaseInfo struct {
    +	DynamicData
    +
    +	DatastoreKey string                 `xml:"datastoreKey"`
    +	Hosts        []HttpNfcLeaseHostInfo `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseDatastoreLeaseInfo"] = reflect.TypeOf((*HttpNfcLeaseDatastoreLeaseInfo)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseDeviceUrl struct {
    +	DynamicData
    +
    +	Key           string `xml:"key"`
    +	ImportKey     string `xml:"importKey"`
    +	Url           string `xml:"url"`
    +	SslThumbprint string `xml:"sslThumbprint"`
    +	Disk          *bool  `xml:"disk"`
    +	TargetId      string `xml:"targetId,omitempty"`
    +	DatastoreKey  string `xml:"datastoreKey,omitempty"`
    +	FileSize      int64  `xml:"fileSize,omitempty"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseDeviceUrl"] = reflect.TypeOf((*HttpNfcLeaseDeviceUrl)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseGetManifest HttpNfcLeaseGetManifestRequestType
    +
    +func init() {
    +	t["HttpNfcLeaseGetManifest"] = reflect.TypeOf((*HttpNfcLeaseGetManifest)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseGetManifestRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseGetManifestRequestType"] = reflect.TypeOf((*HttpNfcLeaseGetManifestRequestType)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseGetManifestResponse struct {
    +	Returnval []HttpNfcLeaseManifestEntry `xml:"returnval,omitempty"`
    +}
    +
    +type HttpNfcLeaseHostInfo struct {
    +	DynamicData
    +
    +	Url           string `xml:"url"`
    +	SslThumbprint string `xml:"sslThumbprint"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseHostInfo"] = reflect.TypeOf((*HttpNfcLeaseHostInfo)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseInfo struct {
    +	DynamicData
    +
    +	Lease                 ManagedObjectReference           `xml:"lease"`
    +	Entity                ManagedObjectReference           `xml:"entity"`
    +	DeviceUrl             []HttpNfcLeaseDeviceUrl          `xml:"deviceUrl,omitempty"`
    +	TotalDiskCapacityInKB int64                            `xml:"totalDiskCapacityInKB"`
    +	LeaseTimeout          int32                            `xml:"leaseTimeout"`
    +	HostMap               []HttpNfcLeaseDatastoreLeaseInfo `xml:"hostMap,omitempty"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseInfo"] = reflect.TypeOf((*HttpNfcLeaseInfo)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseManifestEntry struct {
    +	DynamicData
    +
    +	Key           string `xml:"key"`
    +	Sha1          string `xml:"sha1"`
    +	Checksum      string `xml:"checksum,omitempty"`
    +	ChecksumType  string `xml:"checksumType,omitempty"`
    +	Size          int64  `xml:"size"`
    +	Disk          bool   `xml:"disk"`
    +	Capacity      int64  `xml:"capacity,omitempty"`
    +	PopulatedSize int64  `xml:"populatedSize,omitempty"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseManifestEntry"] = reflect.TypeOf((*HttpNfcLeaseManifestEntry)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseProgress HttpNfcLeaseProgressRequestType
    +
    +func init() {
    +	t["HttpNfcLeaseProgress"] = reflect.TypeOf((*HttpNfcLeaseProgress)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseProgressRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Percent int32                  `xml:"percent"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseProgressRequestType"] = reflect.TypeOf((*HttpNfcLeaseProgressRequestType)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseProgressResponse struct {
    +}
    +
    +type HttpNfcLeasePullFromUrlsRequestType struct {
    +	This  ManagedObjectReference   `xml:"_this"`
    +	Files []HttpNfcLeaseSourceFile `xml:"files,omitempty"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeasePullFromUrlsRequestType"] = reflect.TypeOf((*HttpNfcLeasePullFromUrlsRequestType)(nil)).Elem()
    +}
    +
    +type HttpNfcLeasePullFromUrls_Task HttpNfcLeasePullFromUrlsRequestType
    +
    +func init() {
    +	t["HttpNfcLeasePullFromUrls_Task"] = reflect.TypeOf((*HttpNfcLeasePullFromUrls_Task)(nil)).Elem()
    +}
    +
    +type HttpNfcLeasePullFromUrls_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type HttpNfcLeaseSetManifestChecksumType HttpNfcLeaseSetManifestChecksumTypeRequestType
    +
    +func init() {
    +	t["HttpNfcLeaseSetManifestChecksumType"] = reflect.TypeOf((*HttpNfcLeaseSetManifestChecksumType)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseSetManifestChecksumTypeRequestType struct {
    +	This                      ManagedObjectReference `xml:"_this"`
    +	DeviceUrlsToChecksumTypes []KeyValue             `xml:"deviceUrlsToChecksumTypes,omitempty"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseSetManifestChecksumTypeRequestType"] = reflect.TypeOf((*HttpNfcLeaseSetManifestChecksumTypeRequestType)(nil)).Elem()
    +}
    +
    +type HttpNfcLeaseSetManifestChecksumTypeResponse struct {
    +}
    +
    +type HttpNfcLeaseSourceFile struct {
    +	DynamicData
    +
    +	TargetDeviceId string     `xml:"targetDeviceId"`
    +	Url            string     `xml:"url"`
    +	MemberName     string     `xml:"memberName,omitempty"`
    +	Create         bool       `xml:"create"`
    +	SslThumbprint  string     `xml:"sslThumbprint,omitempty"`
    +	HttpHeaders    []KeyValue `xml:"httpHeaders,omitempty"`
    +	Size           int64      `xml:"size,omitempty"`
    +}
    +
    +func init() {
    +	t["HttpNfcLeaseSourceFile"] = reflect.TypeOf((*HttpNfcLeaseSourceFile)(nil)).Elem()
    +}
    +
    +type ID struct {
    +	DynamicData
    +
    +	Id string `xml:"id"`
    +}
    +
    +func init() {
    +	t["ID"] = reflect.TypeOf((*ID)(nil)).Elem()
    +}
    +
    +type IDEDiskNotSupported struct {
    +	DiskNotSupported
    +}
    +
    +func init() {
    +	t["IDEDiskNotSupported"] = reflect.TypeOf((*IDEDiskNotSupported)(nil)).Elem()
    +}
    +
    +type IDEDiskNotSupportedFault IDEDiskNotSupported
    +
    +func init() {
    +	t["IDEDiskNotSupportedFault"] = reflect.TypeOf((*IDEDiskNotSupportedFault)(nil)).Elem()
    +}
    +
    +type IORMNotSupportedHostOnDatastore struct {
    +	VimFault
    +
    +	Datastore     ManagedObjectReference   `xml:"datastore"`
    +	DatastoreName string                   `xml:"datastoreName"`
    +	Host          []ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["IORMNotSupportedHostOnDatastore"] = reflect.TypeOf((*IORMNotSupportedHostOnDatastore)(nil)).Elem()
    +}
    +
    +type IORMNotSupportedHostOnDatastoreFault IORMNotSupportedHostOnDatastore
    +
    +func init() {
    +	t["IORMNotSupportedHostOnDatastoreFault"] = reflect.TypeOf((*IORMNotSupportedHostOnDatastoreFault)(nil)).Elem()
    +}
    +
    +type IScsiBootFailureEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["IScsiBootFailureEvent"] = reflect.TypeOf((*IScsiBootFailureEvent)(nil)).Elem()
    +}
    +
    +type ImpersonateUser ImpersonateUserRequestType
    +
    +func init() {
    +	t["ImpersonateUser"] = reflect.TypeOf((*ImpersonateUser)(nil)).Elem()
    +}
    +
    +type ImpersonateUserRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	UserName string                 `xml:"userName"`
    +	Locale   string                 `xml:"locale,omitempty"`
    +}
    +
    +func init() {
    +	t["ImpersonateUserRequestType"] = reflect.TypeOf((*ImpersonateUserRequestType)(nil)).Elem()
    +}
    +
    +type ImpersonateUserResponse struct {
    +	Returnval UserSession `xml:"returnval"`
    +}
    +
    +type ImportCertificateForCAMRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	CertPath  string                 `xml:"certPath"`
    +	CamServer string                 `xml:"camServer"`
    +}
    +
    +func init() {
    +	t["ImportCertificateForCAMRequestType"] = reflect.TypeOf((*ImportCertificateForCAMRequestType)(nil)).Elem()
    +}
    +
    +type ImportCertificateForCAM_Task ImportCertificateForCAMRequestType
    +
    +func init() {
    +	t["ImportCertificateForCAM_Task"] = reflect.TypeOf((*ImportCertificateForCAM_Task)(nil)).Elem()
    +}
    +
    +type ImportCertificateForCAM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ImportHostAddFailure struct {
    +	DvsFault
    +
    +	HostIp []string `xml:"hostIp"`
    +}
    +
    +func init() {
    +	t["ImportHostAddFailure"] = reflect.TypeOf((*ImportHostAddFailure)(nil)).Elem()
    +}
    +
    +type ImportHostAddFailureFault ImportHostAddFailure
    +
    +func init() {
    +	t["ImportHostAddFailureFault"] = reflect.TypeOf((*ImportHostAddFailureFault)(nil)).Elem()
    +}
    +
    +type ImportOperationBulkFault struct {
    +	DvsFault
    +
    +	ImportFaults []ImportOperationBulkFaultFaultOnImport `xml:"importFaults"`
    +}
    +
    +func init() {
    +	t["ImportOperationBulkFault"] = reflect.TypeOf((*ImportOperationBulkFault)(nil)).Elem()
    +}
    +
    +type ImportOperationBulkFaultFault ImportOperationBulkFault
    +
    +func init() {
    +	t["ImportOperationBulkFaultFault"] = reflect.TypeOf((*ImportOperationBulkFaultFault)(nil)).Elem()
    +}
    +
    +type ImportOperationBulkFaultFaultOnImport struct {
    +	DynamicData
    +
    +	EntityType string               `xml:"entityType,omitempty"`
    +	Key        string               `xml:"key,omitempty"`
    +	Fault      LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["ImportOperationBulkFaultFaultOnImport"] = reflect.TypeOf((*ImportOperationBulkFaultFaultOnImport)(nil)).Elem()
    +}
    +
    +type ImportSpec struct {
    +	DynamicData
    +
    +	EntityConfig     *VAppEntityConfigInfo `xml:"entityConfig,omitempty"`
    +	InstantiationOst *OvfConsumerOstNode   `xml:"instantiationOst,omitempty"`
    +}
    +
    +func init() {
    +	t["ImportSpec"] = reflect.TypeOf((*ImportSpec)(nil)).Elem()
    +}
    +
    +type ImportUnmanagedSnapshot ImportUnmanagedSnapshotRequestType
    +
    +func init() {
    +	t["ImportUnmanagedSnapshot"] = reflect.TypeOf((*ImportUnmanagedSnapshot)(nil)).Elem()
    +}
    +
    +type ImportUnmanagedSnapshotRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Vdisk      string                  `xml:"vdisk"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	VvolId     string                  `xml:"vvolId"`
    +}
    +
    +func init() {
    +	t["ImportUnmanagedSnapshotRequestType"] = reflect.TypeOf((*ImportUnmanagedSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type ImportUnmanagedSnapshotResponse struct {
    +}
    +
    +type ImportVApp ImportVAppRequestType
    +
    +func init() {
    +	t["ImportVApp"] = reflect.TypeOf((*ImportVApp)(nil)).Elem()
    +}
    +
    +type ImportVAppRequestType struct {
    +	This   ManagedObjectReference  `xml:"_this"`
    +	Spec   BaseImportSpec          `xml:"spec,typeattr"`
    +	Folder *ManagedObjectReference `xml:"folder,omitempty"`
    +	Host   *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["ImportVAppRequestType"] = reflect.TypeOf((*ImportVAppRequestType)(nil)).Elem()
    +}
    +
    +type ImportVAppResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InUseFeatureManipulationDisallowed struct {
    +	NotEnoughLicenses
    +}
    +
    +func init() {
    +	t["InUseFeatureManipulationDisallowed"] = reflect.TypeOf((*InUseFeatureManipulationDisallowed)(nil)).Elem()
    +}
    +
    +type InUseFeatureManipulationDisallowedFault InUseFeatureManipulationDisallowed
    +
    +func init() {
    +	t["InUseFeatureManipulationDisallowedFault"] = reflect.TypeOf((*InUseFeatureManipulationDisallowedFault)(nil)).Elem()
    +}
    +
    +type InaccessibleDatastore struct {
    +	InvalidDatastore
    +
    +	Detail string `xml:"detail,omitempty"`
    +}
    +
    +func init() {
    +	t["InaccessibleDatastore"] = reflect.TypeOf((*InaccessibleDatastore)(nil)).Elem()
    +}
    +
    +type InaccessibleDatastoreFault BaseInaccessibleDatastore
    +
    +func init() {
    +	t["InaccessibleDatastoreFault"] = reflect.TypeOf((*InaccessibleDatastoreFault)(nil)).Elem()
    +}
    +
    +type InaccessibleFTMetadataDatastore struct {
    +	InaccessibleDatastore
    +}
    +
    +func init() {
    +	t["InaccessibleFTMetadataDatastore"] = reflect.TypeOf((*InaccessibleFTMetadataDatastore)(nil)).Elem()
    +}
    +
    +type InaccessibleFTMetadataDatastoreFault InaccessibleFTMetadataDatastore
    +
    +func init() {
    +	t["InaccessibleFTMetadataDatastoreFault"] = reflect.TypeOf((*InaccessibleFTMetadataDatastoreFault)(nil)).Elem()
    +}
    +
    +type InaccessibleVFlashSource struct {
    +	VimFault
    +
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["InaccessibleVFlashSource"] = reflect.TypeOf((*InaccessibleVFlashSource)(nil)).Elem()
    +}
    +
    +type InaccessibleVFlashSourceFault InaccessibleVFlashSource
    +
    +func init() {
    +	t["InaccessibleVFlashSourceFault"] = reflect.TypeOf((*InaccessibleVFlashSourceFault)(nil)).Elem()
    +}
    +
    +type IncompatibleDefaultDevice struct {
    +	MigrationFault
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["IncompatibleDefaultDevice"] = reflect.TypeOf((*IncompatibleDefaultDevice)(nil)).Elem()
    +}
    +
    +type IncompatibleDefaultDeviceFault IncompatibleDefaultDevice
    +
    +func init() {
    +	t["IncompatibleDefaultDeviceFault"] = reflect.TypeOf((*IncompatibleDefaultDeviceFault)(nil)).Elem()
    +}
    +
    +type IncompatibleHostForFtSecondary struct {
    +	VmFaultToleranceIssue
    +
    +	Host  ManagedObjectReference `xml:"host"`
    +	Error []LocalizedMethodFault `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["IncompatibleHostForFtSecondary"] = reflect.TypeOf((*IncompatibleHostForFtSecondary)(nil)).Elem()
    +}
    +
    +type IncompatibleHostForFtSecondaryFault IncompatibleHostForFtSecondary
    +
    +func init() {
    +	t["IncompatibleHostForFtSecondaryFault"] = reflect.TypeOf((*IncompatibleHostForFtSecondaryFault)(nil)).Elem()
    +}
    +
    +type IncompatibleHostForVmReplication struct {
    +	ReplicationFault
    +
    +	VmName   string `xml:"vmName"`
    +	HostName string `xml:"hostName"`
    +	Reason   string `xml:"reason"`
    +}
    +
    +func init() {
    +	t["IncompatibleHostForVmReplication"] = reflect.TypeOf((*IncompatibleHostForVmReplication)(nil)).Elem()
    +}
    +
    +type IncompatibleHostForVmReplicationFault IncompatibleHostForVmReplication
    +
    +func init() {
    +	t["IncompatibleHostForVmReplicationFault"] = reflect.TypeOf((*IncompatibleHostForVmReplicationFault)(nil)).Elem()
    +}
    +
    +type IncompatibleSetting struct {
    +	InvalidArgument
    +
    +	ConflictingProperty string `xml:"conflictingProperty"`
    +}
    +
    +func init() {
    +	t["IncompatibleSetting"] = reflect.TypeOf((*IncompatibleSetting)(nil)).Elem()
    +}
    +
    +type IncompatibleSettingFault IncompatibleSetting
    +
    +func init() {
    +	t["IncompatibleSettingFault"] = reflect.TypeOf((*IncompatibleSettingFault)(nil)).Elem()
    +}
    +
    +type IncorrectFileType struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["IncorrectFileType"] = reflect.TypeOf((*IncorrectFileType)(nil)).Elem()
    +}
    +
    +type IncorrectFileTypeFault IncorrectFileType
    +
    +func init() {
    +	t["IncorrectFileTypeFault"] = reflect.TypeOf((*IncorrectFileTypeFault)(nil)).Elem()
    +}
    +
    +type IncorrectHostInformation struct {
    +	NotEnoughLicenses
    +}
    +
    +func init() {
    +	t["IncorrectHostInformation"] = reflect.TypeOf((*IncorrectHostInformation)(nil)).Elem()
    +}
    +
    +type IncorrectHostInformationEvent struct {
    +	LicenseEvent
    +}
    +
    +func init() {
    +	t["IncorrectHostInformationEvent"] = reflect.TypeOf((*IncorrectHostInformationEvent)(nil)).Elem()
    +}
    +
    +type IncorrectHostInformationFault IncorrectHostInformation
    +
    +func init() {
    +	t["IncorrectHostInformationFault"] = reflect.TypeOf((*IncorrectHostInformationFault)(nil)).Elem()
    +}
    +
    +type IndependentDiskVMotionNotSupported struct {
    +	MigrationFeatureNotSupported
    +}
    +
    +func init() {
    +	t["IndependentDiskVMotionNotSupported"] = reflect.TypeOf((*IndependentDiskVMotionNotSupported)(nil)).Elem()
    +}
    +
    +type IndependentDiskVMotionNotSupportedFault IndependentDiskVMotionNotSupported
    +
    +func init() {
    +	t["IndependentDiskVMotionNotSupportedFault"] = reflect.TypeOf((*IndependentDiskVMotionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type InflateDiskRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["InflateDiskRequestType"] = reflect.TypeOf((*InflateDiskRequestType)(nil)).Elem()
    +}
    +
    +type InflateDisk_Task InflateDiskRequestType
    +
    +func init() {
    +	t["InflateDisk_Task"] = reflect.TypeOf((*InflateDisk_Task)(nil)).Elem()
    +}
    +
    +type InflateDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InflateVirtualDiskRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["InflateVirtualDiskRequestType"] = reflect.TypeOf((*InflateVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type InflateVirtualDisk_Task InflateVirtualDiskRequestType
    +
    +func init() {
    +	t["InflateVirtualDisk_Task"] = reflect.TypeOf((*InflateVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type InflateVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InfoUpgradeEvent struct {
    +	UpgradeEvent
    +}
    +
    +func init() {
    +	t["InfoUpgradeEvent"] = reflect.TypeOf((*InfoUpgradeEvent)(nil)).Elem()
    +}
    +
    +type InheritablePolicy struct {
    +	DynamicData
    +
    +	Inherited bool `xml:"inherited"`
    +}
    +
    +func init() {
    +	t["InheritablePolicy"] = reflect.TypeOf((*InheritablePolicy)(nil)).Elem()
    +}
    +
    +type InitializeDisksRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Mapping []VsanHostDiskMapping  `xml:"mapping"`
    +}
    +
    +func init() {
    +	t["InitializeDisksRequestType"] = reflect.TypeOf((*InitializeDisksRequestType)(nil)).Elem()
    +}
    +
    +type InitializeDisks_Task InitializeDisksRequestType
    +
    +func init() {
    +	t["InitializeDisks_Task"] = reflect.TypeOf((*InitializeDisks_Task)(nil)).Elem()
    +}
    +
    +type InitializeDisks_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InitiateFileTransferFromGuest InitiateFileTransferFromGuestRequestType
    +
    +func init() {
    +	t["InitiateFileTransferFromGuest"] = reflect.TypeOf((*InitiateFileTransferFromGuest)(nil)).Elem()
    +}
    +
    +type InitiateFileTransferFromGuestRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Vm            ManagedObjectReference  `xml:"vm"`
    +	Auth          BaseGuestAuthentication `xml:"auth,typeattr"`
    +	GuestFilePath string                  `xml:"guestFilePath"`
    +}
    +
    +func init() {
    +	t["InitiateFileTransferFromGuestRequestType"] = reflect.TypeOf((*InitiateFileTransferFromGuestRequestType)(nil)).Elem()
    +}
    +
    +type InitiateFileTransferFromGuestResponse struct {
    +	Returnval FileTransferInformation `xml:"returnval"`
    +}
    +
    +type InitiateFileTransferToGuest InitiateFileTransferToGuestRequestType
    +
    +func init() {
    +	t["InitiateFileTransferToGuest"] = reflect.TypeOf((*InitiateFileTransferToGuest)(nil)).Elem()
    +}
    +
    +type InitiateFileTransferToGuestRequestType struct {
    +	This           ManagedObjectReference  `xml:"_this"`
    +	Vm             ManagedObjectReference  `xml:"vm"`
    +	Auth           BaseGuestAuthentication `xml:"auth,typeattr"`
    +	GuestFilePath  string                  `xml:"guestFilePath"`
    +	FileAttributes BaseGuestFileAttributes `xml:"fileAttributes,typeattr"`
    +	FileSize       int64                   `xml:"fileSize"`
    +	Overwrite      bool                    `xml:"overwrite"`
    +}
    +
    +func init() {
    +	t["InitiateFileTransferToGuestRequestType"] = reflect.TypeOf((*InitiateFileTransferToGuestRequestType)(nil)).Elem()
    +}
    +
    +type InitiateFileTransferToGuestResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type InstallHostPatchRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Repository HostPatchManagerLocator `xml:"repository"`
    +	UpdateID   string                  `xml:"updateID"`
    +	Force      *bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["InstallHostPatchRequestType"] = reflect.TypeOf((*InstallHostPatchRequestType)(nil)).Elem()
    +}
    +
    +type InstallHostPatchV2RequestType struct {
    +	This       ManagedObjectReference                     `xml:"_this"`
    +	MetaUrls   []string                                   `xml:"metaUrls,omitempty"`
    +	BundleUrls []string                                   `xml:"bundleUrls,omitempty"`
    +	VibUrls    []string                                   `xml:"vibUrls,omitempty"`
    +	Spec       *HostPatchManagerPatchManagerOperationSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["InstallHostPatchV2RequestType"] = reflect.TypeOf((*InstallHostPatchV2RequestType)(nil)).Elem()
    +}
    +
    +type InstallHostPatchV2_Task InstallHostPatchV2RequestType
    +
    +func init() {
    +	t["InstallHostPatchV2_Task"] = reflect.TypeOf((*InstallHostPatchV2_Task)(nil)).Elem()
    +}
    +
    +type InstallHostPatchV2_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InstallHostPatch_Task InstallHostPatchRequestType
    +
    +func init() {
    +	t["InstallHostPatch_Task"] = reflect.TypeOf((*InstallHostPatch_Task)(nil)).Elem()
    +}
    +
    +type InstallHostPatch_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InstallIoFilterRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	VibUrl  string                 `xml:"vibUrl"`
    +	CompRes ManagedObjectReference `xml:"compRes"`
    +}
    +
    +func init() {
    +	t["InstallIoFilterRequestType"] = reflect.TypeOf((*InstallIoFilterRequestType)(nil)).Elem()
    +}
    +
    +type InstallIoFilter_Task InstallIoFilterRequestType
    +
    +func init() {
    +	t["InstallIoFilter_Task"] = reflect.TypeOf((*InstallIoFilter_Task)(nil)).Elem()
    +}
    +
    +type InstallIoFilter_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InstallServerCertificate InstallServerCertificateRequestType
    +
    +func init() {
    +	t["InstallServerCertificate"] = reflect.TypeOf((*InstallServerCertificate)(nil)).Elem()
    +}
    +
    +type InstallServerCertificateRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Cert string                 `xml:"cert"`
    +}
    +
    +func init() {
    +	t["InstallServerCertificateRequestType"] = reflect.TypeOf((*InstallServerCertificateRequestType)(nil)).Elem()
    +}
    +
    +type InstallServerCertificateResponse struct {
    +}
    +
    +type InstallSmartCardTrustAnchor InstallSmartCardTrustAnchorRequestType
    +
    +func init() {
    +	t["InstallSmartCardTrustAnchor"] = reflect.TypeOf((*InstallSmartCardTrustAnchor)(nil)).Elem()
    +}
    +
    +type InstallSmartCardTrustAnchorRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Cert string                 `xml:"cert"`
    +}
    +
    +func init() {
    +	t["InstallSmartCardTrustAnchorRequestType"] = reflect.TypeOf((*InstallSmartCardTrustAnchorRequestType)(nil)).Elem()
    +}
    +
    +type InstallSmartCardTrustAnchorResponse struct {
    +}
    +
    +type InstantCloneRequestType struct {
    +	This ManagedObjectReference         `xml:"_this"`
    +	Spec VirtualMachineInstantCloneSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["InstantCloneRequestType"] = reflect.TypeOf((*InstantCloneRequestType)(nil)).Elem()
    +}
    +
    +type InstantClone_Task InstantCloneRequestType
    +
    +func init() {
    +	t["InstantClone_Task"] = reflect.TypeOf((*InstantClone_Task)(nil)).Elem()
    +}
    +
    +type InstantClone_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InsufficientAgentVmsDeployed struct {
    +	InsufficientResourcesFault
    +
    +	HostName            string `xml:"hostName"`
    +	RequiredNumAgentVms int32  `xml:"requiredNumAgentVms"`
    +	CurrentNumAgentVms  int32  `xml:"currentNumAgentVms"`
    +}
    +
    +func init() {
    +	t["InsufficientAgentVmsDeployed"] = reflect.TypeOf((*InsufficientAgentVmsDeployed)(nil)).Elem()
    +}
    +
    +type InsufficientAgentVmsDeployedFault InsufficientAgentVmsDeployed
    +
    +func init() {
    +	t["InsufficientAgentVmsDeployedFault"] = reflect.TypeOf((*InsufficientAgentVmsDeployedFault)(nil)).Elem()
    +}
    +
    +type InsufficientCpuResourcesFault struct {
    +	InsufficientResourcesFault
    +
    +	Unreserved int64 `xml:"unreserved"`
    +	Requested  int64 `xml:"requested"`
    +}
    +
    +func init() {
    +	t["InsufficientCpuResourcesFault"] = reflect.TypeOf((*InsufficientCpuResourcesFault)(nil)).Elem()
    +}
    +
    +type InsufficientCpuResourcesFaultFault InsufficientCpuResourcesFault
    +
    +func init() {
    +	t["InsufficientCpuResourcesFaultFault"] = reflect.TypeOf((*InsufficientCpuResourcesFaultFault)(nil)).Elem()
    +}
    +
    +type InsufficientDisks struct {
    +	VsanDiskFault
    +}
    +
    +func init() {
    +	t["InsufficientDisks"] = reflect.TypeOf((*InsufficientDisks)(nil)).Elem()
    +}
    +
    +type InsufficientDisksFault InsufficientDisks
    +
    +func init() {
    +	t["InsufficientDisksFault"] = reflect.TypeOf((*InsufficientDisksFault)(nil)).Elem()
    +}
    +
    +type InsufficientFailoverResourcesEvent struct {
    +	ClusterEvent
    +}
    +
    +func init() {
    +	t["InsufficientFailoverResourcesEvent"] = reflect.TypeOf((*InsufficientFailoverResourcesEvent)(nil)).Elem()
    +}
    +
    +type InsufficientFailoverResourcesFault struct {
    +	InsufficientResourcesFault
    +}
    +
    +func init() {
    +	t["InsufficientFailoverResourcesFault"] = reflect.TypeOf((*InsufficientFailoverResourcesFault)(nil)).Elem()
    +}
    +
    +type InsufficientFailoverResourcesFaultFault InsufficientFailoverResourcesFault
    +
    +func init() {
    +	t["InsufficientFailoverResourcesFaultFault"] = reflect.TypeOf((*InsufficientFailoverResourcesFaultFault)(nil)).Elem()
    +}
    +
    +type InsufficientGraphicsResourcesFault struct {
    +	InsufficientResourcesFault
    +}
    +
    +func init() {
    +	t["InsufficientGraphicsResourcesFault"] = reflect.TypeOf((*InsufficientGraphicsResourcesFault)(nil)).Elem()
    +}
    +
    +type InsufficientGraphicsResourcesFaultFault InsufficientGraphicsResourcesFault
    +
    +func init() {
    +	t["InsufficientGraphicsResourcesFaultFault"] = reflect.TypeOf((*InsufficientGraphicsResourcesFaultFault)(nil)).Elem()
    +}
    +
    +type InsufficientHostCapacityFault struct {
    +	InsufficientResourcesFault
    +
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["InsufficientHostCapacityFault"] = reflect.TypeOf((*InsufficientHostCapacityFault)(nil)).Elem()
    +}
    +
    +type InsufficientHostCapacityFaultFault BaseInsufficientHostCapacityFault
    +
    +func init() {
    +	t["InsufficientHostCapacityFaultFault"] = reflect.TypeOf((*InsufficientHostCapacityFaultFault)(nil)).Elem()
    +}
    +
    +type InsufficientHostCpuCapacityFault struct {
    +	InsufficientHostCapacityFault
    +
    +	Unreserved int64 `xml:"unreserved"`
    +	Requested  int64 `xml:"requested"`
    +}
    +
    +func init() {
    +	t["InsufficientHostCpuCapacityFault"] = reflect.TypeOf((*InsufficientHostCpuCapacityFault)(nil)).Elem()
    +}
    +
    +type InsufficientHostCpuCapacityFaultFault InsufficientHostCpuCapacityFault
    +
    +func init() {
    +	t["InsufficientHostCpuCapacityFaultFault"] = reflect.TypeOf((*InsufficientHostCpuCapacityFaultFault)(nil)).Elem()
    +}
    +
    +type InsufficientHostMemoryCapacityFault struct {
    +	InsufficientHostCapacityFault
    +
    +	Unreserved int64 `xml:"unreserved"`
    +	Requested  int64 `xml:"requested"`
    +}
    +
    +func init() {
    +	t["InsufficientHostMemoryCapacityFault"] = reflect.TypeOf((*InsufficientHostMemoryCapacityFault)(nil)).Elem()
    +}
    +
    +type InsufficientHostMemoryCapacityFaultFault InsufficientHostMemoryCapacityFault
    +
    +func init() {
    +	t["InsufficientHostMemoryCapacityFaultFault"] = reflect.TypeOf((*InsufficientHostMemoryCapacityFaultFault)(nil)).Elem()
    +}
    +
    +type InsufficientMemoryResourcesFault struct {
    +	InsufficientResourcesFault
    +
    +	Unreserved int64 `xml:"unreserved"`
    +	Requested  int64 `xml:"requested"`
    +}
    +
    +func init() {
    +	t["InsufficientMemoryResourcesFault"] = reflect.TypeOf((*InsufficientMemoryResourcesFault)(nil)).Elem()
    +}
    +
    +type InsufficientMemoryResourcesFaultFault InsufficientMemoryResourcesFault
    +
    +func init() {
    +	t["InsufficientMemoryResourcesFaultFault"] = reflect.TypeOf((*InsufficientMemoryResourcesFaultFault)(nil)).Elem()
    +}
    +
    +type InsufficientNetworkCapacity struct {
    +	InsufficientResourcesFault
    +}
    +
    +func init() {
    +	t["InsufficientNetworkCapacity"] = reflect.TypeOf((*InsufficientNetworkCapacity)(nil)).Elem()
    +}
    +
    +type InsufficientNetworkCapacityFault InsufficientNetworkCapacity
    +
    +func init() {
    +	t["InsufficientNetworkCapacityFault"] = reflect.TypeOf((*InsufficientNetworkCapacityFault)(nil)).Elem()
    +}
    +
    +type InsufficientNetworkResourcePoolCapacity struct {
    +	InsufficientResourcesFault
    +
    +	DvsName         string   `xml:"dvsName"`
    +	DvsUuid         string   `xml:"dvsUuid"`
    +	ResourcePoolKey string   `xml:"resourcePoolKey"`
    +	Available       int64    `xml:"available"`
    +	Requested       int64    `xml:"requested"`
    +	Device          []string `xml:"device"`
    +}
    +
    +func init() {
    +	t["InsufficientNetworkResourcePoolCapacity"] = reflect.TypeOf((*InsufficientNetworkResourcePoolCapacity)(nil)).Elem()
    +}
    +
    +type InsufficientNetworkResourcePoolCapacityFault InsufficientNetworkResourcePoolCapacity
    +
    +func init() {
    +	t["InsufficientNetworkResourcePoolCapacityFault"] = reflect.TypeOf((*InsufficientNetworkResourcePoolCapacityFault)(nil)).Elem()
    +}
    +
    +type InsufficientPerCpuCapacity struct {
    +	InsufficientHostCapacityFault
    +}
    +
    +func init() {
    +	t["InsufficientPerCpuCapacity"] = reflect.TypeOf((*InsufficientPerCpuCapacity)(nil)).Elem()
    +}
    +
    +type InsufficientPerCpuCapacityFault InsufficientPerCpuCapacity
    +
    +func init() {
    +	t["InsufficientPerCpuCapacityFault"] = reflect.TypeOf((*InsufficientPerCpuCapacityFault)(nil)).Elem()
    +}
    +
    +type InsufficientResourcesFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["InsufficientResourcesFault"] = reflect.TypeOf((*InsufficientResourcesFault)(nil)).Elem()
    +}
    +
    +type InsufficientResourcesFaultFault BaseInsufficientResourcesFault
    +
    +func init() {
    +	t["InsufficientResourcesFaultFault"] = reflect.TypeOf((*InsufficientResourcesFaultFault)(nil)).Elem()
    +}
    +
    +type InsufficientStandbyCpuResource struct {
    +	InsufficientStandbyResource
    +
    +	Available int64 `xml:"available"`
    +	Requested int64 `xml:"requested"`
    +}
    +
    +func init() {
    +	t["InsufficientStandbyCpuResource"] = reflect.TypeOf((*InsufficientStandbyCpuResource)(nil)).Elem()
    +}
    +
    +type InsufficientStandbyCpuResourceFault InsufficientStandbyCpuResource
    +
    +func init() {
    +	t["InsufficientStandbyCpuResourceFault"] = reflect.TypeOf((*InsufficientStandbyCpuResourceFault)(nil)).Elem()
    +}
    +
    +type InsufficientStandbyMemoryResource struct {
    +	InsufficientStandbyResource
    +
    +	Available int64 `xml:"available"`
    +	Requested int64 `xml:"requested"`
    +}
    +
    +func init() {
    +	t["InsufficientStandbyMemoryResource"] = reflect.TypeOf((*InsufficientStandbyMemoryResource)(nil)).Elem()
    +}
    +
    +type InsufficientStandbyMemoryResourceFault InsufficientStandbyMemoryResource
    +
    +func init() {
    +	t["InsufficientStandbyMemoryResourceFault"] = reflect.TypeOf((*InsufficientStandbyMemoryResourceFault)(nil)).Elem()
    +}
    +
    +type InsufficientStandbyResource struct {
    +	InsufficientResourcesFault
    +}
    +
    +func init() {
    +	t["InsufficientStandbyResource"] = reflect.TypeOf((*InsufficientStandbyResource)(nil)).Elem()
    +}
    +
    +type InsufficientStandbyResourceFault BaseInsufficientStandbyResource
    +
    +func init() {
    +	t["InsufficientStandbyResourceFault"] = reflect.TypeOf((*InsufficientStandbyResourceFault)(nil)).Elem()
    +}
    +
    +type InsufficientStorageIops struct {
    +	VimFault
    +
    +	UnreservedIops int64  `xml:"unreservedIops"`
    +	RequestedIops  int64  `xml:"requestedIops"`
    +	DatastoreName  string `xml:"datastoreName"`
    +}
    +
    +func init() {
    +	t["InsufficientStorageIops"] = reflect.TypeOf((*InsufficientStorageIops)(nil)).Elem()
    +}
    +
    +type InsufficientStorageIopsFault InsufficientStorageIops
    +
    +func init() {
    +	t["InsufficientStorageIopsFault"] = reflect.TypeOf((*InsufficientStorageIopsFault)(nil)).Elem()
    +}
    +
    +type InsufficientStorageSpace struct {
    +	InsufficientResourcesFault
    +}
    +
    +func init() {
    +	t["InsufficientStorageSpace"] = reflect.TypeOf((*InsufficientStorageSpace)(nil)).Elem()
    +}
    +
    +type InsufficientStorageSpaceFault InsufficientStorageSpace
    +
    +func init() {
    +	t["InsufficientStorageSpaceFault"] = reflect.TypeOf((*InsufficientStorageSpaceFault)(nil)).Elem()
    +}
    +
    +type InsufficientVFlashResourcesFault struct {
    +	InsufficientResourcesFault
    +
    +	FreeSpaceInMB      int64 `xml:"freeSpaceInMB,omitempty"`
    +	FreeSpace          int64 `xml:"freeSpace"`
    +	RequestedSpaceInMB int64 `xml:"requestedSpaceInMB,omitempty"`
    +	RequestedSpace     int64 `xml:"requestedSpace"`
    +}
    +
    +func init() {
    +	t["InsufficientVFlashResourcesFault"] = reflect.TypeOf((*InsufficientVFlashResourcesFault)(nil)).Elem()
    +}
    +
    +type InsufficientVFlashResourcesFaultFault InsufficientVFlashResourcesFault
    +
    +func init() {
    +	t["InsufficientVFlashResourcesFaultFault"] = reflect.TypeOf((*InsufficientVFlashResourcesFaultFault)(nil)).Elem()
    +}
    +
    +type IntExpression struct {
    +	NegatableExpression
    +
    +	Value int32 `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["IntExpression"] = reflect.TypeOf((*IntExpression)(nil)).Elem()
    +}
    +
    +type IntOption struct {
    +	OptionType
    +
    +	Min          int32 `xml:"min"`
    +	Max          int32 `xml:"max"`
    +	DefaultValue int32 `xml:"defaultValue"`
    +}
    +
    +func init() {
    +	t["IntOption"] = reflect.TypeOf((*IntOption)(nil)).Elem()
    +}
    +
    +type IntPolicy struct {
    +	InheritablePolicy
    +
    +	Value int32 `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["IntPolicy"] = reflect.TypeOf((*IntPolicy)(nil)).Elem()
    +}
    +
    +type InvalidAffinitySettingFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["InvalidAffinitySettingFault"] = reflect.TypeOf((*InvalidAffinitySettingFault)(nil)).Elem()
    +}
    +
    +type InvalidAffinitySettingFaultFault InvalidAffinitySettingFault
    +
    +func init() {
    +	t["InvalidAffinitySettingFaultFault"] = reflect.TypeOf((*InvalidAffinitySettingFaultFault)(nil)).Elem()
    +}
    +
    +type InvalidArgument struct {
    +	RuntimeFault
    +
    +	InvalidProperty string `xml:"invalidProperty,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidArgument"] = reflect.TypeOf((*InvalidArgument)(nil)).Elem()
    +}
    +
    +type InvalidArgumentFault BaseInvalidArgument
    +
    +func init() {
    +	t["InvalidArgumentFault"] = reflect.TypeOf((*InvalidArgumentFault)(nil)).Elem()
    +}
    +
    +type InvalidBmcRole struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["InvalidBmcRole"] = reflect.TypeOf((*InvalidBmcRole)(nil)).Elem()
    +}
    +
    +type InvalidBmcRoleFault InvalidBmcRole
    +
    +func init() {
    +	t["InvalidBmcRoleFault"] = reflect.TypeOf((*InvalidBmcRoleFault)(nil)).Elem()
    +}
    +
    +type InvalidBundle struct {
    +	PlatformConfigFault
    +}
    +
    +func init() {
    +	t["InvalidBundle"] = reflect.TypeOf((*InvalidBundle)(nil)).Elem()
    +}
    +
    +type InvalidBundleFault InvalidBundle
    +
    +func init() {
    +	t["InvalidBundleFault"] = reflect.TypeOf((*InvalidBundleFault)(nil)).Elem()
    +}
    +
    +type InvalidCAMCertificate struct {
    +	InvalidCAMServer
    +}
    +
    +func init() {
    +	t["InvalidCAMCertificate"] = reflect.TypeOf((*InvalidCAMCertificate)(nil)).Elem()
    +}
    +
    +type InvalidCAMCertificateFault InvalidCAMCertificate
    +
    +func init() {
    +	t["InvalidCAMCertificateFault"] = reflect.TypeOf((*InvalidCAMCertificateFault)(nil)).Elem()
    +}
    +
    +type InvalidCAMServer struct {
    +	ActiveDirectoryFault
    +
    +	CamServer string `xml:"camServer"`
    +}
    +
    +func init() {
    +	t["InvalidCAMServer"] = reflect.TypeOf((*InvalidCAMServer)(nil)).Elem()
    +}
    +
    +type InvalidCAMServerFault BaseInvalidCAMServer
    +
    +func init() {
    +	t["InvalidCAMServerFault"] = reflect.TypeOf((*InvalidCAMServerFault)(nil)).Elem()
    +}
    +
    +type InvalidClientCertificate struct {
    +	InvalidLogin
    +}
    +
    +func init() {
    +	t["InvalidClientCertificate"] = reflect.TypeOf((*InvalidClientCertificate)(nil)).Elem()
    +}
    +
    +type InvalidClientCertificateFault InvalidClientCertificate
    +
    +func init() {
    +	t["InvalidClientCertificateFault"] = reflect.TypeOf((*InvalidClientCertificateFault)(nil)).Elem()
    +}
    +
    +type InvalidCollectorVersion struct {
    +	MethodFault
    +}
    +
    +func init() {
    +	t["InvalidCollectorVersion"] = reflect.TypeOf((*InvalidCollectorVersion)(nil)).Elem()
    +}
    +
    +type InvalidCollectorVersionFault InvalidCollectorVersion
    +
    +func init() {
    +	t["InvalidCollectorVersionFault"] = reflect.TypeOf((*InvalidCollectorVersionFault)(nil)).Elem()
    +}
    +
    +type InvalidController struct {
    +	InvalidDeviceSpec
    +
    +	ControllerKey int32 `xml:"controllerKey"`
    +}
    +
    +func init() {
    +	t["InvalidController"] = reflect.TypeOf((*InvalidController)(nil)).Elem()
    +}
    +
    +type InvalidControllerFault InvalidController
    +
    +func init() {
    +	t["InvalidControllerFault"] = reflect.TypeOf((*InvalidControllerFault)(nil)).Elem()
    +}
    +
    +type InvalidDasConfigArgument struct {
    +	InvalidArgument
    +
    +	Entry       string `xml:"entry,omitempty"`
    +	ClusterName string `xml:"clusterName,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidDasConfigArgument"] = reflect.TypeOf((*InvalidDasConfigArgument)(nil)).Elem()
    +}
    +
    +type InvalidDasConfigArgumentFault InvalidDasConfigArgument
    +
    +func init() {
    +	t["InvalidDasConfigArgumentFault"] = reflect.TypeOf((*InvalidDasConfigArgumentFault)(nil)).Elem()
    +}
    +
    +type InvalidDasRestartPriorityForFtVm struct {
    +	InvalidArgument
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	VmName string                 `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["InvalidDasRestartPriorityForFtVm"] = reflect.TypeOf((*InvalidDasRestartPriorityForFtVm)(nil)).Elem()
    +}
    +
    +type InvalidDasRestartPriorityForFtVmFault InvalidDasRestartPriorityForFtVm
    +
    +func init() {
    +	t["InvalidDasRestartPriorityForFtVmFault"] = reflect.TypeOf((*InvalidDasRestartPriorityForFtVmFault)(nil)).Elem()
    +}
    +
    +type InvalidDatastore struct {
    +	VimFault
    +
    +	Datastore *ManagedObjectReference `xml:"datastore,omitempty"`
    +	Name      string                  `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidDatastore"] = reflect.TypeOf((*InvalidDatastore)(nil)).Elem()
    +}
    +
    +type InvalidDatastoreFault BaseInvalidDatastore
    +
    +func init() {
    +	t["InvalidDatastoreFault"] = reflect.TypeOf((*InvalidDatastoreFault)(nil)).Elem()
    +}
    +
    +type InvalidDatastorePath struct {
    +	InvalidDatastore
    +
    +	DatastorePath string `xml:"datastorePath"`
    +}
    +
    +func init() {
    +	t["InvalidDatastorePath"] = reflect.TypeOf((*InvalidDatastorePath)(nil)).Elem()
    +}
    +
    +type InvalidDatastorePathFault InvalidDatastorePath
    +
    +func init() {
    +	t["InvalidDatastorePathFault"] = reflect.TypeOf((*InvalidDatastorePathFault)(nil)).Elem()
    +}
    +
    +type InvalidDatastoreState struct {
    +	InvalidState
    +
    +	DatastoreName string `xml:"datastoreName,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidDatastoreState"] = reflect.TypeOf((*InvalidDatastoreState)(nil)).Elem()
    +}
    +
    +type InvalidDatastoreStateFault InvalidDatastoreState
    +
    +func init() {
    +	t["InvalidDatastoreStateFault"] = reflect.TypeOf((*InvalidDatastoreStateFault)(nil)).Elem()
    +}
    +
    +type InvalidDeviceBacking struct {
    +	InvalidDeviceSpec
    +}
    +
    +func init() {
    +	t["InvalidDeviceBacking"] = reflect.TypeOf((*InvalidDeviceBacking)(nil)).Elem()
    +}
    +
    +type InvalidDeviceBackingFault InvalidDeviceBacking
    +
    +func init() {
    +	t["InvalidDeviceBackingFault"] = reflect.TypeOf((*InvalidDeviceBackingFault)(nil)).Elem()
    +}
    +
    +type InvalidDeviceOperation struct {
    +	InvalidDeviceSpec
    +
    +	BadOp     VirtualDeviceConfigSpecOperation     `xml:"badOp,omitempty"`
    +	BadFileOp VirtualDeviceConfigSpecFileOperation `xml:"badFileOp,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidDeviceOperation"] = reflect.TypeOf((*InvalidDeviceOperation)(nil)).Elem()
    +}
    +
    +type InvalidDeviceOperationFault InvalidDeviceOperation
    +
    +func init() {
    +	t["InvalidDeviceOperationFault"] = reflect.TypeOf((*InvalidDeviceOperationFault)(nil)).Elem()
    +}
    +
    +type InvalidDeviceSpec struct {
    +	InvalidVmConfig
    +
    +	DeviceIndex int32 `xml:"deviceIndex"`
    +}
    +
    +func init() {
    +	t["InvalidDeviceSpec"] = reflect.TypeOf((*InvalidDeviceSpec)(nil)).Elem()
    +}
    +
    +type InvalidDeviceSpecFault BaseInvalidDeviceSpec
    +
    +func init() {
    +	t["InvalidDeviceSpecFault"] = reflect.TypeOf((*InvalidDeviceSpecFault)(nil)).Elem()
    +}
    +
    +type InvalidDiskFormat struct {
    +	InvalidFormat
    +}
    +
    +func init() {
    +	t["InvalidDiskFormat"] = reflect.TypeOf((*InvalidDiskFormat)(nil)).Elem()
    +}
    +
    +type InvalidDiskFormatFault InvalidDiskFormat
    +
    +func init() {
    +	t["InvalidDiskFormatFault"] = reflect.TypeOf((*InvalidDiskFormatFault)(nil)).Elem()
    +}
    +
    +type InvalidDrsBehaviorForFtVm struct {
    +	InvalidArgument
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	VmName string                 `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["InvalidDrsBehaviorForFtVm"] = reflect.TypeOf((*InvalidDrsBehaviorForFtVm)(nil)).Elem()
    +}
    +
    +type InvalidDrsBehaviorForFtVmFault InvalidDrsBehaviorForFtVm
    +
    +func init() {
    +	t["InvalidDrsBehaviorForFtVmFault"] = reflect.TypeOf((*InvalidDrsBehaviorForFtVmFault)(nil)).Elem()
    +}
    +
    +type InvalidEditionEvent struct {
    +	LicenseEvent
    +
    +	Feature string `xml:"feature"`
    +}
    +
    +func init() {
    +	t["InvalidEditionEvent"] = reflect.TypeOf((*InvalidEditionEvent)(nil)).Elem()
    +}
    +
    +type InvalidEditionLicense struct {
    +	NotEnoughLicenses
    +
    +	Feature string `xml:"feature"`
    +}
    +
    +func init() {
    +	t["InvalidEditionLicense"] = reflect.TypeOf((*InvalidEditionLicense)(nil)).Elem()
    +}
    +
    +type InvalidEditionLicenseFault InvalidEditionLicense
    +
    +func init() {
    +	t["InvalidEditionLicenseFault"] = reflect.TypeOf((*InvalidEditionLicenseFault)(nil)).Elem()
    +}
    +
    +type InvalidEvent struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["InvalidEvent"] = reflect.TypeOf((*InvalidEvent)(nil)).Elem()
    +}
    +
    +type InvalidEventFault InvalidEvent
    +
    +func init() {
    +	t["InvalidEventFault"] = reflect.TypeOf((*InvalidEventFault)(nil)).Elem()
    +}
    +
    +type InvalidFolder struct {
    +	VimFault
    +
    +	Target ManagedObjectReference `xml:"target"`
    +}
    +
    +func init() {
    +	t["InvalidFolder"] = reflect.TypeOf((*InvalidFolder)(nil)).Elem()
    +}
    +
    +type InvalidFolderFault BaseInvalidFolder
    +
    +func init() {
    +	t["InvalidFolderFault"] = reflect.TypeOf((*InvalidFolderFault)(nil)).Elem()
    +}
    +
    +type InvalidFormat struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["InvalidFormat"] = reflect.TypeOf((*InvalidFormat)(nil)).Elem()
    +}
    +
    +type InvalidFormatFault BaseInvalidFormat
    +
    +func init() {
    +	t["InvalidFormatFault"] = reflect.TypeOf((*InvalidFormatFault)(nil)).Elem()
    +}
    +
    +type InvalidGuestLogin struct {
    +	GuestOperationsFault
    +}
    +
    +func init() {
    +	t["InvalidGuestLogin"] = reflect.TypeOf((*InvalidGuestLogin)(nil)).Elem()
    +}
    +
    +type InvalidGuestLoginFault InvalidGuestLogin
    +
    +func init() {
    +	t["InvalidGuestLoginFault"] = reflect.TypeOf((*InvalidGuestLoginFault)(nil)).Elem()
    +}
    +
    +type InvalidHostConnectionState struct {
    +	InvalidHostState
    +}
    +
    +func init() {
    +	t["InvalidHostConnectionState"] = reflect.TypeOf((*InvalidHostConnectionState)(nil)).Elem()
    +}
    +
    +type InvalidHostConnectionStateFault InvalidHostConnectionState
    +
    +func init() {
    +	t["InvalidHostConnectionStateFault"] = reflect.TypeOf((*InvalidHostConnectionStateFault)(nil)).Elem()
    +}
    +
    +type InvalidHostName struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["InvalidHostName"] = reflect.TypeOf((*InvalidHostName)(nil)).Elem()
    +}
    +
    +type InvalidHostNameFault InvalidHostName
    +
    +func init() {
    +	t["InvalidHostNameFault"] = reflect.TypeOf((*InvalidHostNameFault)(nil)).Elem()
    +}
    +
    +type InvalidHostState struct {
    +	InvalidState
    +
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidHostState"] = reflect.TypeOf((*InvalidHostState)(nil)).Elem()
    +}
    +
    +type InvalidHostStateFault BaseInvalidHostState
    +
    +func init() {
    +	t["InvalidHostStateFault"] = reflect.TypeOf((*InvalidHostStateFault)(nil)).Elem()
    +}
    +
    +type InvalidIndexArgument struct {
    +	InvalidArgument
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["InvalidIndexArgument"] = reflect.TypeOf((*InvalidIndexArgument)(nil)).Elem()
    +}
    +
    +type InvalidIndexArgumentFault InvalidIndexArgument
    +
    +func init() {
    +	t["InvalidIndexArgumentFault"] = reflect.TypeOf((*InvalidIndexArgumentFault)(nil)).Elem()
    +}
    +
    +type InvalidIpfixConfig struct {
    +	DvsFault
    +
    +	Property string `xml:"property,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidIpfixConfig"] = reflect.TypeOf((*InvalidIpfixConfig)(nil)).Elem()
    +}
    +
    +type InvalidIpfixConfigFault InvalidIpfixConfig
    +
    +func init() {
    +	t["InvalidIpfixConfigFault"] = reflect.TypeOf((*InvalidIpfixConfigFault)(nil)).Elem()
    +}
    +
    +type InvalidIpmiLoginInfo struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["InvalidIpmiLoginInfo"] = reflect.TypeOf((*InvalidIpmiLoginInfo)(nil)).Elem()
    +}
    +
    +type InvalidIpmiLoginInfoFault InvalidIpmiLoginInfo
    +
    +func init() {
    +	t["InvalidIpmiLoginInfoFault"] = reflect.TypeOf((*InvalidIpmiLoginInfoFault)(nil)).Elem()
    +}
    +
    +type InvalidIpmiMacAddress struct {
    +	VimFault
    +
    +	UserProvidedMacAddress string `xml:"userProvidedMacAddress"`
    +	ObservedMacAddress     string `xml:"observedMacAddress"`
    +}
    +
    +func init() {
    +	t["InvalidIpmiMacAddress"] = reflect.TypeOf((*InvalidIpmiMacAddress)(nil)).Elem()
    +}
    +
    +type InvalidIpmiMacAddressFault InvalidIpmiMacAddress
    +
    +func init() {
    +	t["InvalidIpmiMacAddressFault"] = reflect.TypeOf((*InvalidIpmiMacAddressFault)(nil)).Elem()
    +}
    +
    +type InvalidLicense struct {
    +	VimFault
    +
    +	LicenseContent string `xml:"licenseContent"`
    +}
    +
    +func init() {
    +	t["InvalidLicense"] = reflect.TypeOf((*InvalidLicense)(nil)).Elem()
    +}
    +
    +type InvalidLicenseFault InvalidLicense
    +
    +func init() {
    +	t["InvalidLicenseFault"] = reflect.TypeOf((*InvalidLicenseFault)(nil)).Elem()
    +}
    +
    +type InvalidLocale struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["InvalidLocale"] = reflect.TypeOf((*InvalidLocale)(nil)).Elem()
    +}
    +
    +type InvalidLocaleFault InvalidLocale
    +
    +func init() {
    +	t["InvalidLocaleFault"] = reflect.TypeOf((*InvalidLocaleFault)(nil)).Elem()
    +}
    +
    +type InvalidLogin struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["InvalidLogin"] = reflect.TypeOf((*InvalidLogin)(nil)).Elem()
    +}
    +
    +type InvalidLoginFault BaseInvalidLogin
    +
    +func init() {
    +	t["InvalidLoginFault"] = reflect.TypeOf((*InvalidLoginFault)(nil)).Elem()
    +}
    +
    +type InvalidName struct {
    +	VimFault
    +
    +	Name   string                  `xml:"name"`
    +	Entity *ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidName"] = reflect.TypeOf((*InvalidName)(nil)).Elem()
    +}
    +
    +type InvalidNameFault InvalidName
    +
    +func init() {
    +	t["InvalidNameFault"] = reflect.TypeOf((*InvalidNameFault)(nil)).Elem()
    +}
    +
    +type InvalidNasCredentials struct {
    +	NasConfigFault
    +
    +	UserName string `xml:"userName"`
    +}
    +
    +func init() {
    +	t["InvalidNasCredentials"] = reflect.TypeOf((*InvalidNasCredentials)(nil)).Elem()
    +}
    +
    +type InvalidNasCredentialsFault InvalidNasCredentials
    +
    +func init() {
    +	t["InvalidNasCredentialsFault"] = reflect.TypeOf((*InvalidNasCredentialsFault)(nil)).Elem()
    +}
    +
    +type InvalidNetworkInType struct {
    +	VAppPropertyFault
    +}
    +
    +func init() {
    +	t["InvalidNetworkInType"] = reflect.TypeOf((*InvalidNetworkInType)(nil)).Elem()
    +}
    +
    +type InvalidNetworkInTypeFault InvalidNetworkInType
    +
    +func init() {
    +	t["InvalidNetworkInTypeFault"] = reflect.TypeOf((*InvalidNetworkInTypeFault)(nil)).Elem()
    +}
    +
    +type InvalidNetworkResource struct {
    +	NasConfigFault
    +
    +	RemoteHost string `xml:"remoteHost"`
    +	RemotePath string `xml:"remotePath"`
    +}
    +
    +func init() {
    +	t["InvalidNetworkResource"] = reflect.TypeOf((*InvalidNetworkResource)(nil)).Elem()
    +}
    +
    +type InvalidNetworkResourceFault InvalidNetworkResource
    +
    +func init() {
    +	t["InvalidNetworkResourceFault"] = reflect.TypeOf((*InvalidNetworkResourceFault)(nil)).Elem()
    +}
    +
    +type InvalidOperationOnSecondaryVm struct {
    +	VmFaultToleranceIssue
    +
    +	InstanceUuid string `xml:"instanceUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidOperationOnSecondaryVm"] = reflect.TypeOf((*InvalidOperationOnSecondaryVm)(nil)).Elem()
    +}
    +
    +type InvalidOperationOnSecondaryVmFault InvalidOperationOnSecondaryVm
    +
    +func init() {
    +	t["InvalidOperationOnSecondaryVmFault"] = reflect.TypeOf((*InvalidOperationOnSecondaryVmFault)(nil)).Elem()
    +}
    +
    +type InvalidPowerState struct {
    +	InvalidState
    +
    +	RequestedState VirtualMachinePowerState `xml:"requestedState,omitempty"`
    +	ExistingState  VirtualMachinePowerState `xml:"existingState"`
    +}
    +
    +func init() {
    +	t["InvalidPowerState"] = reflect.TypeOf((*InvalidPowerState)(nil)).Elem()
    +}
    +
    +type InvalidPowerStateFault InvalidPowerState
    +
    +func init() {
    +	t["InvalidPowerStateFault"] = reflect.TypeOf((*InvalidPowerStateFault)(nil)).Elem()
    +}
    +
    +type InvalidPrivilege struct {
    +	VimFault
    +
    +	Privilege string `xml:"privilege"`
    +}
    +
    +func init() {
    +	t["InvalidPrivilege"] = reflect.TypeOf((*InvalidPrivilege)(nil)).Elem()
    +}
    +
    +type InvalidPrivilegeFault InvalidPrivilege
    +
    +func init() {
    +	t["InvalidPrivilegeFault"] = reflect.TypeOf((*InvalidPrivilegeFault)(nil)).Elem()
    +}
    +
    +type InvalidProfileReferenceHost struct {
    +	RuntimeFault
    +
    +	Reason      string                  `xml:"reason,omitempty"`
    +	Host        *ManagedObjectReference `xml:"host,omitempty"`
    +	Profile     *ManagedObjectReference `xml:"profile,omitempty"`
    +	ProfileName string                  `xml:"profileName,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidProfileReferenceHost"] = reflect.TypeOf((*InvalidProfileReferenceHost)(nil)).Elem()
    +}
    +
    +type InvalidProfileReferenceHostFault InvalidProfileReferenceHost
    +
    +func init() {
    +	t["InvalidProfileReferenceHostFault"] = reflect.TypeOf((*InvalidProfileReferenceHostFault)(nil)).Elem()
    +}
    +
    +type InvalidProperty struct {
    +	MethodFault
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["InvalidProperty"] = reflect.TypeOf((*InvalidProperty)(nil)).Elem()
    +}
    +
    +type InvalidPropertyFault InvalidProperty
    +
    +func init() {
    +	t["InvalidPropertyFault"] = reflect.TypeOf((*InvalidPropertyFault)(nil)).Elem()
    +}
    +
    +type InvalidPropertyType struct {
    +	VAppPropertyFault
    +}
    +
    +func init() {
    +	t["InvalidPropertyType"] = reflect.TypeOf((*InvalidPropertyType)(nil)).Elem()
    +}
    +
    +type InvalidPropertyTypeFault InvalidPropertyType
    +
    +func init() {
    +	t["InvalidPropertyTypeFault"] = reflect.TypeOf((*InvalidPropertyTypeFault)(nil)).Elem()
    +}
    +
    +type InvalidPropertyValue struct {
    +	VAppPropertyFault
    +}
    +
    +func init() {
    +	t["InvalidPropertyValue"] = reflect.TypeOf((*InvalidPropertyValue)(nil)).Elem()
    +}
    +
    +type InvalidPropertyValueFault BaseInvalidPropertyValue
    +
    +func init() {
    +	t["InvalidPropertyValueFault"] = reflect.TypeOf((*InvalidPropertyValueFault)(nil)).Elem()
    +}
    +
    +type InvalidRequest struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["InvalidRequest"] = reflect.TypeOf((*InvalidRequest)(nil)).Elem()
    +}
    +
    +type InvalidRequestFault BaseInvalidRequest
    +
    +func init() {
    +	t["InvalidRequestFault"] = reflect.TypeOf((*InvalidRequestFault)(nil)).Elem()
    +}
    +
    +type InvalidResourcePoolStructureFault struct {
    +	InsufficientResourcesFault
    +}
    +
    +func init() {
    +	t["InvalidResourcePoolStructureFault"] = reflect.TypeOf((*InvalidResourcePoolStructureFault)(nil)).Elem()
    +}
    +
    +type InvalidResourcePoolStructureFaultFault InvalidResourcePoolStructureFault
    +
    +func init() {
    +	t["InvalidResourcePoolStructureFaultFault"] = reflect.TypeOf((*InvalidResourcePoolStructureFaultFault)(nil)).Elem()
    +}
    +
    +type InvalidSnapshotFormat struct {
    +	InvalidFormat
    +}
    +
    +func init() {
    +	t["InvalidSnapshotFormat"] = reflect.TypeOf((*InvalidSnapshotFormat)(nil)).Elem()
    +}
    +
    +type InvalidSnapshotFormatFault InvalidSnapshotFormat
    +
    +func init() {
    +	t["InvalidSnapshotFormatFault"] = reflect.TypeOf((*InvalidSnapshotFormatFault)(nil)).Elem()
    +}
    +
    +type InvalidState struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["InvalidState"] = reflect.TypeOf((*InvalidState)(nil)).Elem()
    +}
    +
    +type InvalidStateFault BaseInvalidState
    +
    +func init() {
    +	t["InvalidStateFault"] = reflect.TypeOf((*InvalidStateFault)(nil)).Elem()
    +}
    +
    +type InvalidType struct {
    +	InvalidRequest
    +
    +	Argument string `xml:"argument,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidType"] = reflect.TypeOf((*InvalidType)(nil)).Elem()
    +}
    +
    +type InvalidTypeFault InvalidType
    +
    +func init() {
    +	t["InvalidTypeFault"] = reflect.TypeOf((*InvalidTypeFault)(nil)).Elem()
    +}
    +
    +type InvalidVmConfig struct {
    +	VmConfigFault
    +
    +	Property string `xml:"property,omitempty"`
    +}
    +
    +func init() {
    +	t["InvalidVmConfig"] = reflect.TypeOf((*InvalidVmConfig)(nil)).Elem()
    +}
    +
    +type InvalidVmConfigFault BaseInvalidVmConfig
    +
    +func init() {
    +	t["InvalidVmConfigFault"] = reflect.TypeOf((*InvalidVmConfigFault)(nil)).Elem()
    +}
    +
    +type InvalidVmState struct {
    +	InvalidState
    +
    +	Vm ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["InvalidVmState"] = reflect.TypeOf((*InvalidVmState)(nil)).Elem()
    +}
    +
    +type InvalidVmStateFault InvalidVmState
    +
    +func init() {
    +	t["InvalidVmStateFault"] = reflect.TypeOf((*InvalidVmStateFault)(nil)).Elem()
    +}
    +
    +type InventoryDescription struct {
    +	DynamicData
    +
    +	NumHosts           int32 `xml:"numHosts"`
    +	NumVirtualMachines int32 `xml:"numVirtualMachines"`
    +	NumResourcePools   int32 `xml:"numResourcePools,omitempty"`
    +	NumClusters        int32 `xml:"numClusters,omitempty"`
    +	NumCpuDev          int32 `xml:"numCpuDev,omitempty"`
    +	NumNetDev          int32 `xml:"numNetDev,omitempty"`
    +	NumDiskDev         int32 `xml:"numDiskDev,omitempty"`
    +	NumvCpuDev         int32 `xml:"numvCpuDev,omitempty"`
    +	NumvNetDev         int32 `xml:"numvNetDev,omitempty"`
    +	NumvDiskDev        int32 `xml:"numvDiskDev,omitempty"`
    +}
    +
    +func init() {
    +	t["InventoryDescription"] = reflect.TypeOf((*InventoryDescription)(nil)).Elem()
    +}
    +
    +type InventoryHasStandardAloneHosts struct {
    +	NotEnoughLicenses
    +
    +	Hosts []string `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["InventoryHasStandardAloneHosts"] = reflect.TypeOf((*InventoryHasStandardAloneHosts)(nil)).Elem()
    +}
    +
    +type InventoryHasStandardAloneHostsFault InventoryHasStandardAloneHosts
    +
    +func init() {
    +	t["InventoryHasStandardAloneHostsFault"] = reflect.TypeOf((*InventoryHasStandardAloneHostsFault)(nil)).Elem()
    +}
    +
    +type IoFilterHostIssue struct {
    +	DynamicData
    +
    +	Host  ManagedObjectReference `xml:"host"`
    +	Issue []LocalizedMethodFault `xml:"issue"`
    +}
    +
    +func init() {
    +	t["IoFilterHostIssue"] = reflect.TypeOf((*IoFilterHostIssue)(nil)).Elem()
    +}
    +
    +type IoFilterInfo struct {
    +	DynamicData
    +
    +	Id          string `xml:"id"`
    +	Name        string `xml:"name"`
    +	Vendor      string `xml:"vendor"`
    +	Version     string `xml:"version"`
    +	Type        string `xml:"type,omitempty"`
    +	Summary     string `xml:"summary,omitempty"`
    +	ReleaseDate string `xml:"releaseDate,omitempty"`
    +}
    +
    +func init() {
    +	t["IoFilterInfo"] = reflect.TypeOf((*IoFilterInfo)(nil)).Elem()
    +}
    +
    +type IoFilterQueryIssueResult struct {
    +	DynamicData
    +
    +	OpType    string              `xml:"opType"`
    +	HostIssue []IoFilterHostIssue `xml:"hostIssue,omitempty"`
    +}
    +
    +func init() {
    +	t["IoFilterQueryIssueResult"] = reflect.TypeOf((*IoFilterQueryIssueResult)(nil)).Elem()
    +}
    +
    +type IpAddress struct {
    +	NegatableExpression
    +}
    +
    +func init() {
    +	t["IpAddress"] = reflect.TypeOf((*IpAddress)(nil)).Elem()
    +}
    +
    +type IpAddressProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["IpAddressProfile"] = reflect.TypeOf((*IpAddressProfile)(nil)).Elem()
    +}
    +
    +type IpHostnameGeneratorError struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["IpHostnameGeneratorError"] = reflect.TypeOf((*IpHostnameGeneratorError)(nil)).Elem()
    +}
    +
    +type IpHostnameGeneratorErrorFault IpHostnameGeneratorError
    +
    +func init() {
    +	t["IpHostnameGeneratorErrorFault"] = reflect.TypeOf((*IpHostnameGeneratorErrorFault)(nil)).Elem()
    +}
    +
    +type IpPool struct {
    +	DynamicData
    +
    +	Id                     int32                   `xml:"id,omitempty"`
    +	Name                   string                  `xml:"name,omitempty"`
    +	Ipv4Config             *IpPoolIpPoolConfigInfo `xml:"ipv4Config,omitempty"`
    +	Ipv6Config             *IpPoolIpPoolConfigInfo `xml:"ipv6Config,omitempty"`
    +	DnsDomain              string                  `xml:"dnsDomain,omitempty"`
    +	DnsSearchPath          string                  `xml:"dnsSearchPath,omitempty"`
    +	HostPrefix             string                  `xml:"hostPrefix,omitempty"`
    +	HttpProxy              string                  `xml:"httpProxy,omitempty"`
    +	NetworkAssociation     []IpPoolAssociation     `xml:"networkAssociation,omitempty"`
    +	AvailableIpv4Addresses int32                   `xml:"availableIpv4Addresses,omitempty"`
    +	AvailableIpv6Addresses int32                   `xml:"availableIpv6Addresses,omitempty"`
    +	AllocatedIpv4Addresses int32                   `xml:"allocatedIpv4Addresses,omitempty"`
    +	AllocatedIpv6Addresses int32                   `xml:"allocatedIpv6Addresses,omitempty"`
    +}
    +
    +func init() {
    +	t["IpPool"] = reflect.TypeOf((*IpPool)(nil)).Elem()
    +}
    +
    +type IpPoolAssociation struct {
    +	DynamicData
    +
    +	Network     *ManagedObjectReference `xml:"network,omitempty"`
    +	NetworkName string                  `xml:"networkName"`
    +}
    +
    +func init() {
    +	t["IpPoolAssociation"] = reflect.TypeOf((*IpPoolAssociation)(nil)).Elem()
    +}
    +
    +type IpPoolIpPoolConfigInfo struct {
    +	DynamicData
    +
    +	SubnetAddress       string   `xml:"subnetAddress,omitempty"`
    +	Netmask             string   `xml:"netmask,omitempty"`
    +	Gateway             string   `xml:"gateway,omitempty"`
    +	Range               string   `xml:"range,omitempty"`
    +	Dns                 []string `xml:"dns,omitempty"`
    +	DhcpServerAvailable *bool    `xml:"dhcpServerAvailable"`
    +	IpPoolEnabled       *bool    `xml:"ipPoolEnabled"`
    +}
    +
    +func init() {
    +	t["IpPoolIpPoolConfigInfo"] = reflect.TypeOf((*IpPoolIpPoolConfigInfo)(nil)).Elem()
    +}
    +
    +type IpPoolManagerIpAllocation struct {
    +	DynamicData
    +
    +	IpAddress    string `xml:"ipAddress"`
    +	AllocationId string `xml:"allocationId"`
    +}
    +
    +func init() {
    +	t["IpPoolManagerIpAllocation"] = reflect.TypeOf((*IpPoolManagerIpAllocation)(nil)).Elem()
    +}
    +
    +type IpRange struct {
    +	IpAddress
    +
    +	AddressPrefix string `xml:"addressPrefix"`
    +	PrefixLength  int32  `xml:"prefixLength,omitempty"`
    +}
    +
    +func init() {
    +	t["IpRange"] = reflect.TypeOf((*IpRange)(nil)).Elem()
    +}
    +
    +type IpRouteProfile struct {
    +	ApplyProfile
    +
    +	StaticRoute []StaticRouteProfile `xml:"staticRoute,omitempty"`
    +}
    +
    +func init() {
    +	t["IpRouteProfile"] = reflect.TypeOf((*IpRouteProfile)(nil)).Elem()
    +}
    +
    +type IsSharedGraphicsActive IsSharedGraphicsActiveRequestType
    +
    +func init() {
    +	t["IsSharedGraphicsActive"] = reflect.TypeOf((*IsSharedGraphicsActive)(nil)).Elem()
    +}
    +
    +type IsSharedGraphicsActiveRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["IsSharedGraphicsActiveRequestType"] = reflect.TypeOf((*IsSharedGraphicsActiveRequestType)(nil)).Elem()
    +}
    +
    +type IsSharedGraphicsActiveResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type IscsiDependencyEntity struct {
    +	DynamicData
    +
    +	PnicDevice string `xml:"pnicDevice"`
    +	VnicDevice string `xml:"vnicDevice"`
    +	VmhbaName  string `xml:"vmhbaName"`
    +}
    +
    +func init() {
    +	t["IscsiDependencyEntity"] = reflect.TypeOf((*IscsiDependencyEntity)(nil)).Elem()
    +}
    +
    +type IscsiFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["IscsiFault"] = reflect.TypeOf((*IscsiFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultFault BaseIscsiFault
    +
    +func init() {
    +	t["IscsiFaultFault"] = reflect.TypeOf((*IscsiFaultFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultInvalidVnic struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultInvalidVnic"] = reflect.TypeOf((*IscsiFaultInvalidVnic)(nil)).Elem()
    +}
    +
    +type IscsiFaultInvalidVnicFault IscsiFaultInvalidVnic
    +
    +func init() {
    +	t["IscsiFaultInvalidVnicFault"] = reflect.TypeOf((*IscsiFaultInvalidVnicFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultPnicInUse struct {
    +	IscsiFault
    +
    +	PnicDevice string `xml:"pnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultPnicInUse"] = reflect.TypeOf((*IscsiFaultPnicInUse)(nil)).Elem()
    +}
    +
    +type IscsiFaultPnicInUseFault IscsiFaultPnicInUse
    +
    +func init() {
    +	t["IscsiFaultPnicInUseFault"] = reflect.TypeOf((*IscsiFaultPnicInUseFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicAlreadyBound struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicAlreadyBound"] = reflect.TypeOf((*IscsiFaultVnicAlreadyBound)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicAlreadyBoundFault IscsiFaultVnicAlreadyBound
    +
    +func init() {
    +	t["IscsiFaultVnicAlreadyBoundFault"] = reflect.TypeOf((*IscsiFaultVnicAlreadyBoundFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicHasActivePaths struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicHasActivePaths"] = reflect.TypeOf((*IscsiFaultVnicHasActivePaths)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicHasActivePathsFault IscsiFaultVnicHasActivePaths
    +
    +func init() {
    +	t["IscsiFaultVnicHasActivePathsFault"] = reflect.TypeOf((*IscsiFaultVnicHasActivePathsFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicHasMultipleUplinks struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicHasMultipleUplinks"] = reflect.TypeOf((*IscsiFaultVnicHasMultipleUplinks)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicHasMultipleUplinksFault IscsiFaultVnicHasMultipleUplinks
    +
    +func init() {
    +	t["IscsiFaultVnicHasMultipleUplinksFault"] = reflect.TypeOf((*IscsiFaultVnicHasMultipleUplinksFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicHasNoUplinks struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicHasNoUplinks"] = reflect.TypeOf((*IscsiFaultVnicHasNoUplinks)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicHasNoUplinksFault IscsiFaultVnicHasNoUplinks
    +
    +func init() {
    +	t["IscsiFaultVnicHasNoUplinksFault"] = reflect.TypeOf((*IscsiFaultVnicHasNoUplinksFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicHasWrongUplink struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicHasWrongUplink"] = reflect.TypeOf((*IscsiFaultVnicHasWrongUplink)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicHasWrongUplinkFault IscsiFaultVnicHasWrongUplink
    +
    +func init() {
    +	t["IscsiFaultVnicHasWrongUplinkFault"] = reflect.TypeOf((*IscsiFaultVnicHasWrongUplinkFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicInUse struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicInUse"] = reflect.TypeOf((*IscsiFaultVnicInUse)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicInUseFault IscsiFaultVnicInUse
    +
    +func init() {
    +	t["IscsiFaultVnicInUseFault"] = reflect.TypeOf((*IscsiFaultVnicInUseFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicIsLastPath struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicIsLastPath"] = reflect.TypeOf((*IscsiFaultVnicIsLastPath)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicIsLastPathFault IscsiFaultVnicIsLastPath
    +
    +func init() {
    +	t["IscsiFaultVnicIsLastPathFault"] = reflect.TypeOf((*IscsiFaultVnicIsLastPathFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicNotBound struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicNotBound"] = reflect.TypeOf((*IscsiFaultVnicNotBound)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicNotBoundFault IscsiFaultVnicNotBound
    +
    +func init() {
    +	t["IscsiFaultVnicNotBoundFault"] = reflect.TypeOf((*IscsiFaultVnicNotBoundFault)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicNotFound struct {
    +	IscsiFault
    +
    +	VnicDevice string `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["IscsiFaultVnicNotFound"] = reflect.TypeOf((*IscsiFaultVnicNotFound)(nil)).Elem()
    +}
    +
    +type IscsiFaultVnicNotFoundFault IscsiFaultVnicNotFound
    +
    +func init() {
    +	t["IscsiFaultVnicNotFoundFault"] = reflect.TypeOf((*IscsiFaultVnicNotFoundFault)(nil)).Elem()
    +}
    +
    +type IscsiMigrationDependency struct {
    +	DynamicData
    +
    +	MigrationAllowed bool                    `xml:"migrationAllowed"`
    +	DisallowReason   *IscsiStatus            `xml:"disallowReason,omitempty"`
    +	Dependency       []IscsiDependencyEntity `xml:"dependency,omitempty"`
    +}
    +
    +func init() {
    +	t["IscsiMigrationDependency"] = reflect.TypeOf((*IscsiMigrationDependency)(nil)).Elem()
    +}
    +
    +type IscsiPortInfo struct {
    +	DynamicData
    +
    +	VnicDevice        string          `xml:"vnicDevice,omitempty"`
    +	Vnic              *HostVirtualNic `xml:"vnic,omitempty"`
    +	PnicDevice        string          `xml:"pnicDevice,omitempty"`
    +	Pnic              *PhysicalNic    `xml:"pnic,omitempty"`
    +	SwitchName        string          `xml:"switchName,omitempty"`
    +	SwitchUuid        string          `xml:"switchUuid,omitempty"`
    +	PortgroupName     string          `xml:"portgroupName,omitempty"`
    +	PortgroupKey      string          `xml:"portgroupKey,omitempty"`
    +	PortKey           string          `xml:"portKey,omitempty"`
    +	OpaqueNetworkId   string          `xml:"opaqueNetworkId,omitempty"`
    +	OpaqueNetworkType string          `xml:"opaqueNetworkType,omitempty"`
    +	OpaqueNetworkName string          `xml:"opaqueNetworkName,omitempty"`
    +	ExternalId        string          `xml:"externalId,omitempty"`
    +	ComplianceStatus  *IscsiStatus    `xml:"complianceStatus,omitempty"`
    +	PathStatus        string          `xml:"pathStatus,omitempty"`
    +}
    +
    +func init() {
    +	t["IscsiPortInfo"] = reflect.TypeOf((*IscsiPortInfo)(nil)).Elem()
    +}
    +
    +type IscsiStatus struct {
    +	DynamicData
    +
    +	Reason []LocalizedMethodFault `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["IscsiStatus"] = reflect.TypeOf((*IscsiStatus)(nil)).Elem()
    +}
    +
    +type IsoImageFileInfo struct {
    +	FileInfo
    +}
    +
    +func init() {
    +	t["IsoImageFileInfo"] = reflect.TypeOf((*IsoImageFileInfo)(nil)).Elem()
    +}
    +
    +type IsoImageFileQuery struct {
    +	FileQuery
    +}
    +
    +func init() {
    +	t["IsoImageFileQuery"] = reflect.TypeOf((*IsoImageFileQuery)(nil)).Elem()
    +}
    +
    +type JoinDomainRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	DomainName string                 `xml:"domainName"`
    +	UserName   string                 `xml:"userName"`
    +	Password   string                 `xml:"password"`
    +}
    +
    +func init() {
    +	t["JoinDomainRequestType"] = reflect.TypeOf((*JoinDomainRequestType)(nil)).Elem()
    +}
    +
    +type JoinDomainWithCAMRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	DomainName string                 `xml:"domainName"`
    +	CamServer  string                 `xml:"camServer"`
    +}
    +
    +func init() {
    +	t["JoinDomainWithCAMRequestType"] = reflect.TypeOf((*JoinDomainWithCAMRequestType)(nil)).Elem()
    +}
    +
    +type JoinDomainWithCAM_Task JoinDomainWithCAMRequestType
    +
    +func init() {
    +	t["JoinDomainWithCAM_Task"] = reflect.TypeOf((*JoinDomainWithCAM_Task)(nil)).Elem()
    +}
    +
    +type JoinDomainWithCAM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type JoinDomain_Task JoinDomainRequestType
    +
    +func init() {
    +	t["JoinDomain_Task"] = reflect.TypeOf((*JoinDomain_Task)(nil)).Elem()
    +}
    +
    +type JoinDomain_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type KernelModuleInfo struct {
    +	DynamicData
    +
    +	Id              int32                   `xml:"id"`
    +	Name            string                  `xml:"name"`
    +	Version         string                  `xml:"version"`
    +	Filename        string                  `xml:"filename"`
    +	OptionString    string                  `xml:"optionString"`
    +	Loaded          bool                    `xml:"loaded"`
    +	Enabled         bool                    `xml:"enabled"`
    +	UseCount        int32                   `xml:"useCount"`
    +	ReadOnlySection KernelModuleSectionInfo `xml:"readOnlySection"`
    +	WritableSection KernelModuleSectionInfo `xml:"writableSection"`
    +	TextSection     KernelModuleSectionInfo `xml:"textSection"`
    +	DataSection     KernelModuleSectionInfo `xml:"dataSection"`
    +	BssSection      KernelModuleSectionInfo `xml:"bssSection"`
    +}
    +
    +func init() {
    +	t["KernelModuleInfo"] = reflect.TypeOf((*KernelModuleInfo)(nil)).Elem()
    +}
    +
    +type KernelModuleSectionInfo struct {
    +	DynamicData
    +
    +	Address int64 `xml:"address"`
    +	Length  int32 `xml:"length,omitempty"`
    +}
    +
    +func init() {
    +	t["KernelModuleSectionInfo"] = reflect.TypeOf((*KernelModuleSectionInfo)(nil)).Elem()
    +}
    +
    +type KeyAnyValue struct {
    +	DynamicData
    +
    +	Key   string  `xml:"key"`
    +	Value AnyType `xml:"value,typeattr"`
    +}
    +
    +func init() {
    +	t["KeyAnyValue"] = reflect.TypeOf((*KeyAnyValue)(nil)).Elem()
    +}
    +
    +type KeyProviderId struct {
    +	DynamicData
    +
    +	Id string `xml:"id"`
    +}
    +
    +func init() {
    +	t["KeyProviderId"] = reflect.TypeOf((*KeyProviderId)(nil)).Elem()
    +}
    +
    +type KeyValue struct {
    +	DynamicData
    +
    +	Key   string `xml:"key"`
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["KeyValue"] = reflect.TypeOf((*KeyValue)(nil)).Elem()
    +}
    +
    +type KmipClusterInfo struct {
    +	DynamicData
    +
    +	ClusterId    KeyProviderId    `xml:"clusterId"`
    +	Servers      []KmipServerInfo `xml:"servers,omitempty"`
    +	UseAsDefault bool             `xml:"useAsDefault"`
    +}
    +
    +func init() {
    +	t["KmipClusterInfo"] = reflect.TypeOf((*KmipClusterInfo)(nil)).Elem()
    +}
    +
    +type KmipServerInfo struct {
    +	DynamicData
    +
    +	Name         string `xml:"name"`
    +	Address      string `xml:"address"`
    +	Port         int32  `xml:"port"`
    +	ProxyAddress string `xml:"proxyAddress,omitempty"`
    +	ProxyPort    int32  `xml:"proxyPort,omitempty"`
    +	Reconnect    int32  `xml:"reconnect,omitempty"`
    +	Protocol     string `xml:"protocol,omitempty"`
    +	Nbio         int32  `xml:"nbio,omitempty"`
    +	Timeout      int32  `xml:"timeout,omitempty"`
    +	UserName     string `xml:"userName,omitempty"`
    +}
    +
    +func init() {
    +	t["KmipServerInfo"] = reflect.TypeOf((*KmipServerInfo)(nil)).Elem()
    +}
    +
    +type KmipServerSpec struct {
    +	DynamicData
    +
    +	ClusterId KeyProviderId  `xml:"clusterId"`
    +	Info      KmipServerInfo `xml:"info"`
    +	Password  string         `xml:"password,omitempty"`
    +}
    +
    +func init() {
    +	t["KmipServerSpec"] = reflect.TypeOf((*KmipServerSpec)(nil)).Elem()
    +}
    +
    +type KmipServerStatus struct {
    +	DynamicData
    +
    +	ClusterId   KeyProviderId       `xml:"clusterId"`
    +	Name        string              `xml:"name"`
    +	Status      ManagedEntityStatus `xml:"status"`
    +	Description string              `xml:"description"`
    +}
    +
    +func init() {
    +	t["KmipServerStatus"] = reflect.TypeOf((*KmipServerStatus)(nil)).Elem()
    +}
    +
    +type LargeRDMConversionNotSupported struct {
    +	MigrationFault
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["LargeRDMConversionNotSupported"] = reflect.TypeOf((*LargeRDMConversionNotSupported)(nil)).Elem()
    +}
    +
    +type LargeRDMConversionNotSupportedFault LargeRDMConversionNotSupported
    +
    +func init() {
    +	t["LargeRDMConversionNotSupportedFault"] = reflect.TypeOf((*LargeRDMConversionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type LargeRDMNotSupportedOnDatastore struct {
    +	VmConfigFault
    +
    +	Device        string                 `xml:"device"`
    +	Datastore     ManagedObjectReference `xml:"datastore"`
    +	DatastoreName string                 `xml:"datastoreName"`
    +}
    +
    +func init() {
    +	t["LargeRDMNotSupportedOnDatastore"] = reflect.TypeOf((*LargeRDMNotSupportedOnDatastore)(nil)).Elem()
    +}
    +
    +type LargeRDMNotSupportedOnDatastoreFault LargeRDMNotSupportedOnDatastore
    +
    +func init() {
    +	t["LargeRDMNotSupportedOnDatastoreFault"] = reflect.TypeOf((*LargeRDMNotSupportedOnDatastoreFault)(nil)).Elem()
    +}
    +
    +type LatencySensitivity struct {
    +	DynamicData
    +
    +	Level       LatencySensitivitySensitivityLevel `xml:"level"`
    +	Sensitivity int32                              `xml:"sensitivity,omitempty"`
    +}
    +
    +func init() {
    +	t["LatencySensitivity"] = reflect.TypeOf((*LatencySensitivity)(nil)).Elem()
    +}
    +
    +type LeaveCurrentDomainRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Force bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["LeaveCurrentDomainRequestType"] = reflect.TypeOf((*LeaveCurrentDomainRequestType)(nil)).Elem()
    +}
    +
    +type LeaveCurrentDomain_Task LeaveCurrentDomainRequestType
    +
    +func init() {
    +	t["LeaveCurrentDomain_Task"] = reflect.TypeOf((*LeaveCurrentDomain_Task)(nil)).Elem()
    +}
    +
    +type LeaveCurrentDomain_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type LegacyNetworkInterfaceInUse struct {
    +	CannotAccessNetwork
    +}
    +
    +func init() {
    +	t["LegacyNetworkInterfaceInUse"] = reflect.TypeOf((*LegacyNetworkInterfaceInUse)(nil)).Elem()
    +}
    +
    +type LegacyNetworkInterfaceInUseFault LegacyNetworkInterfaceInUse
    +
    +func init() {
    +	t["LegacyNetworkInterfaceInUseFault"] = reflect.TypeOf((*LegacyNetworkInterfaceInUseFault)(nil)).Elem()
    +}
    +
    +type LicenseAssignmentFailed struct {
    +	RuntimeFault
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["LicenseAssignmentFailed"] = reflect.TypeOf((*LicenseAssignmentFailed)(nil)).Elem()
    +}
    +
    +type LicenseAssignmentFailedFault LicenseAssignmentFailed
    +
    +func init() {
    +	t["LicenseAssignmentFailedFault"] = reflect.TypeOf((*LicenseAssignmentFailedFault)(nil)).Elem()
    +}
    +
    +type LicenseAssignmentManagerLicenseAssignment struct {
    +	DynamicData
    +
    +	EntityId          string                    `xml:"entityId"`
    +	Scope             string                    `xml:"scope,omitempty"`
    +	EntityDisplayName string                    `xml:"entityDisplayName,omitempty"`
    +	AssignedLicense   LicenseManagerLicenseInfo `xml:"assignedLicense"`
    +	Properties        []KeyAnyValue             `xml:"properties,omitempty"`
    +}
    +
    +func init() {
    +	t["LicenseAssignmentManagerLicenseAssignment"] = reflect.TypeOf((*LicenseAssignmentManagerLicenseAssignment)(nil)).Elem()
    +}
    +
    +type LicenseAvailabilityInfo struct {
    +	DynamicData
    +
    +	Feature   LicenseFeatureInfo `xml:"feature"`
    +	Total     int32              `xml:"total"`
    +	Available int32              `xml:"available"`
    +}
    +
    +func init() {
    +	t["LicenseAvailabilityInfo"] = reflect.TypeOf((*LicenseAvailabilityInfo)(nil)).Elem()
    +}
    +
    +type LicenseDiagnostics struct {
    +	DynamicData
    +
    +	SourceLastChanged      time.Time           `xml:"sourceLastChanged"`
    +	SourceLost             string              `xml:"sourceLost"`
    +	SourceLatency          float32             `xml:"sourceLatency"`
    +	LicenseRequests        string              `xml:"licenseRequests"`
    +	LicenseRequestFailures string              `xml:"licenseRequestFailures"`
    +	LicenseFeatureUnknowns string              `xml:"licenseFeatureUnknowns"`
    +	OpState                LicenseManagerState `xml:"opState"`
    +	LastStatusUpdate       time.Time           `xml:"lastStatusUpdate"`
    +	OpFailureMessage       string              `xml:"opFailureMessage"`
    +}
    +
    +func init() {
    +	t["LicenseDiagnostics"] = reflect.TypeOf((*LicenseDiagnostics)(nil)).Elem()
    +}
    +
    +type LicenseDowngradeDisallowed struct {
    +	NotEnoughLicenses
    +
    +	Edition  string        `xml:"edition"`
    +	EntityId string        `xml:"entityId"`
    +	Features []KeyAnyValue `xml:"features"`
    +}
    +
    +func init() {
    +	t["LicenseDowngradeDisallowed"] = reflect.TypeOf((*LicenseDowngradeDisallowed)(nil)).Elem()
    +}
    +
    +type LicenseDowngradeDisallowedFault LicenseDowngradeDisallowed
    +
    +func init() {
    +	t["LicenseDowngradeDisallowedFault"] = reflect.TypeOf((*LicenseDowngradeDisallowedFault)(nil)).Elem()
    +}
    +
    +type LicenseEntityNotFound struct {
    +	VimFault
    +
    +	EntityId string `xml:"entityId"`
    +}
    +
    +func init() {
    +	t["LicenseEntityNotFound"] = reflect.TypeOf((*LicenseEntityNotFound)(nil)).Elem()
    +}
    +
    +type LicenseEntityNotFoundFault LicenseEntityNotFound
    +
    +func init() {
    +	t["LicenseEntityNotFoundFault"] = reflect.TypeOf((*LicenseEntityNotFoundFault)(nil)).Elem()
    +}
    +
    +type LicenseEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["LicenseEvent"] = reflect.TypeOf((*LicenseEvent)(nil)).Elem()
    +}
    +
    +type LicenseExpired struct {
    +	NotEnoughLicenses
    +
    +	LicenseKey string `xml:"licenseKey"`
    +}
    +
    +func init() {
    +	t["LicenseExpired"] = reflect.TypeOf((*LicenseExpired)(nil)).Elem()
    +}
    +
    +type LicenseExpiredEvent struct {
    +	Event
    +
    +	Feature LicenseFeatureInfo `xml:"feature"`
    +}
    +
    +func init() {
    +	t["LicenseExpiredEvent"] = reflect.TypeOf((*LicenseExpiredEvent)(nil)).Elem()
    +}
    +
    +type LicenseExpiredFault LicenseExpired
    +
    +func init() {
    +	t["LicenseExpiredFault"] = reflect.TypeOf((*LicenseExpiredFault)(nil)).Elem()
    +}
    +
    +type LicenseFeatureInfo struct {
    +	DynamicData
    +
    +	Key                string                  `xml:"key"`
    +	FeatureName        string                  `xml:"featureName"`
    +	FeatureDescription string                  `xml:"featureDescription,omitempty"`
    +	State              LicenseFeatureInfoState `xml:"state,omitempty"`
    +	CostUnit           string                  `xml:"costUnit"`
    +	SourceRestriction  string                  `xml:"sourceRestriction,omitempty"`
    +	DependentKey       []string                `xml:"dependentKey,omitempty"`
    +	Edition            *bool                   `xml:"edition"`
    +	ExpiresOn          *time.Time              `xml:"expiresOn"`
    +}
    +
    +func init() {
    +	t["LicenseFeatureInfo"] = reflect.TypeOf((*LicenseFeatureInfo)(nil)).Elem()
    +}
    +
    +type LicenseKeyEntityMismatch struct {
    +	NotEnoughLicenses
    +}
    +
    +func init() {
    +	t["LicenseKeyEntityMismatch"] = reflect.TypeOf((*LicenseKeyEntityMismatch)(nil)).Elem()
    +}
    +
    +type LicenseKeyEntityMismatchFault LicenseKeyEntityMismatch
    +
    +func init() {
    +	t["LicenseKeyEntityMismatchFault"] = reflect.TypeOf((*LicenseKeyEntityMismatchFault)(nil)).Elem()
    +}
    +
    +type LicenseManagerEvaluationInfo struct {
    +	DynamicData
    +
    +	Properties []KeyAnyValue `xml:"properties"`
    +}
    +
    +func init() {
    +	t["LicenseManagerEvaluationInfo"] = reflect.TypeOf((*LicenseManagerEvaluationInfo)(nil)).Elem()
    +}
    +
    +type LicenseManagerLicenseInfo struct {
    +	DynamicData
    +
    +	LicenseKey string        `xml:"licenseKey"`
    +	EditionKey string        `xml:"editionKey"`
    +	Name       string        `xml:"name"`
    +	Total      int32         `xml:"total"`
    +	Used       int32         `xml:"used,omitempty"`
    +	CostUnit   string        `xml:"costUnit"`
    +	Properties []KeyAnyValue `xml:"properties,omitempty"`
    +	Labels     []KeyValue    `xml:"labels,omitempty"`
    +}
    +
    +func init() {
    +	t["LicenseManagerLicenseInfo"] = reflect.TypeOf((*LicenseManagerLicenseInfo)(nil)).Elem()
    +}
    +
    +type LicenseNonComplianceEvent struct {
    +	LicenseEvent
    +
    +	Url string `xml:"url"`
    +}
    +
    +func init() {
    +	t["LicenseNonComplianceEvent"] = reflect.TypeOf((*LicenseNonComplianceEvent)(nil)).Elem()
    +}
    +
    +type LicenseReservationInfo struct {
    +	DynamicData
    +
    +	Key      string                      `xml:"key"`
    +	State    LicenseReservationInfoState `xml:"state"`
    +	Required int32                       `xml:"required"`
    +}
    +
    +func init() {
    +	t["LicenseReservationInfo"] = reflect.TypeOf((*LicenseReservationInfo)(nil)).Elem()
    +}
    +
    +type LicenseRestricted struct {
    +	NotEnoughLicenses
    +}
    +
    +func init() {
    +	t["LicenseRestricted"] = reflect.TypeOf((*LicenseRestricted)(nil)).Elem()
    +}
    +
    +type LicenseRestrictedEvent struct {
    +	LicenseEvent
    +}
    +
    +func init() {
    +	t["LicenseRestrictedEvent"] = reflect.TypeOf((*LicenseRestrictedEvent)(nil)).Elem()
    +}
    +
    +type LicenseRestrictedFault LicenseRestricted
    +
    +func init() {
    +	t["LicenseRestrictedFault"] = reflect.TypeOf((*LicenseRestrictedFault)(nil)).Elem()
    +}
    +
    +type LicenseServerAvailableEvent struct {
    +	LicenseEvent
    +
    +	LicenseServer string `xml:"licenseServer"`
    +}
    +
    +func init() {
    +	t["LicenseServerAvailableEvent"] = reflect.TypeOf((*LicenseServerAvailableEvent)(nil)).Elem()
    +}
    +
    +type LicenseServerSource struct {
    +	LicenseSource
    +
    +	LicenseServer string `xml:"licenseServer"`
    +}
    +
    +func init() {
    +	t["LicenseServerSource"] = reflect.TypeOf((*LicenseServerSource)(nil)).Elem()
    +}
    +
    +type LicenseServerUnavailable struct {
    +	VimFault
    +
    +	LicenseServer string `xml:"licenseServer"`
    +}
    +
    +func init() {
    +	t["LicenseServerUnavailable"] = reflect.TypeOf((*LicenseServerUnavailable)(nil)).Elem()
    +}
    +
    +type LicenseServerUnavailableEvent struct {
    +	LicenseEvent
    +
    +	LicenseServer string `xml:"licenseServer"`
    +}
    +
    +func init() {
    +	t["LicenseServerUnavailableEvent"] = reflect.TypeOf((*LicenseServerUnavailableEvent)(nil)).Elem()
    +}
    +
    +type LicenseServerUnavailableFault LicenseServerUnavailable
    +
    +func init() {
    +	t["LicenseServerUnavailableFault"] = reflect.TypeOf((*LicenseServerUnavailableFault)(nil)).Elem()
    +}
    +
    +type LicenseSource struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["LicenseSource"] = reflect.TypeOf((*LicenseSource)(nil)).Elem()
    +}
    +
    +type LicenseSourceUnavailable struct {
    +	NotEnoughLicenses
    +
    +	LicenseSource BaseLicenseSource `xml:"licenseSource,typeattr"`
    +}
    +
    +func init() {
    +	t["LicenseSourceUnavailable"] = reflect.TypeOf((*LicenseSourceUnavailable)(nil)).Elem()
    +}
    +
    +type LicenseSourceUnavailableFault LicenseSourceUnavailable
    +
    +func init() {
    +	t["LicenseSourceUnavailableFault"] = reflect.TypeOf((*LicenseSourceUnavailableFault)(nil)).Elem()
    +}
    +
    +type LicenseUsageInfo struct {
    +	DynamicData
    +
    +	Source          BaseLicenseSource        `xml:"source,typeattr"`
    +	SourceAvailable bool                     `xml:"sourceAvailable"`
    +	ReservationInfo []LicenseReservationInfo `xml:"reservationInfo,omitempty"`
    +	FeatureInfo     []LicenseFeatureInfo     `xml:"featureInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["LicenseUsageInfo"] = reflect.TypeOf((*LicenseUsageInfo)(nil)).Elem()
    +}
    +
    +type LimitExceeded struct {
    +	VimFault
    +
    +	Property string `xml:"property,omitempty"`
    +	Limit    *int32 `xml:"limit"`
    +}
    +
    +func init() {
    +	t["LimitExceeded"] = reflect.TypeOf((*LimitExceeded)(nil)).Elem()
    +}
    +
    +type LimitExceededFault LimitExceeded
    +
    +func init() {
    +	t["LimitExceededFault"] = reflect.TypeOf((*LimitExceededFault)(nil)).Elem()
    +}
    +
    +type LinkDiscoveryProtocolConfig struct {
    +	DynamicData
    +
    +	Protocol  string `xml:"protocol"`
    +	Operation string `xml:"operation"`
    +}
    +
    +func init() {
    +	t["LinkDiscoveryProtocolConfig"] = reflect.TypeOf((*LinkDiscoveryProtocolConfig)(nil)).Elem()
    +}
    +
    +type LinkLayerDiscoveryProtocolInfo struct {
    +	DynamicData
    +
    +	ChassisId  string        `xml:"chassisId"`
    +	PortId     string        `xml:"portId"`
    +	TimeToLive int32         `xml:"timeToLive"`
    +	Parameter  []KeyAnyValue `xml:"parameter,omitempty"`
    +}
    +
    +func init() {
    +	t["LinkLayerDiscoveryProtocolInfo"] = reflect.TypeOf((*LinkLayerDiscoveryProtocolInfo)(nil)).Elem()
    +}
    +
    +type LinkProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["LinkProfile"] = reflect.TypeOf((*LinkProfile)(nil)).Elem()
    +}
    +
    +type LinuxVolumeNotClean struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["LinuxVolumeNotClean"] = reflect.TypeOf((*LinuxVolumeNotClean)(nil)).Elem()
    +}
    +
    +type LinuxVolumeNotCleanFault LinuxVolumeNotClean
    +
    +func init() {
    +	t["LinuxVolumeNotCleanFault"] = reflect.TypeOf((*LinuxVolumeNotCleanFault)(nil)).Elem()
    +}
    +
    +type ListCACertificateRevocationLists ListCACertificateRevocationListsRequestType
    +
    +func init() {
    +	t["ListCACertificateRevocationLists"] = reflect.TypeOf((*ListCACertificateRevocationLists)(nil)).Elem()
    +}
    +
    +type ListCACertificateRevocationListsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ListCACertificateRevocationListsRequestType"] = reflect.TypeOf((*ListCACertificateRevocationListsRequestType)(nil)).Elem()
    +}
    +
    +type ListCACertificateRevocationListsResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type ListCACertificates ListCACertificatesRequestType
    +
    +func init() {
    +	t["ListCACertificates"] = reflect.TypeOf((*ListCACertificates)(nil)).Elem()
    +}
    +
    +type ListCACertificatesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ListCACertificatesRequestType"] = reflect.TypeOf((*ListCACertificatesRequestType)(nil)).Elem()
    +}
    +
    +type ListCACertificatesResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type ListFilesInGuest ListFilesInGuestRequestType
    +
    +func init() {
    +	t["ListFilesInGuest"] = reflect.TypeOf((*ListFilesInGuest)(nil)).Elem()
    +}
    +
    +type ListFilesInGuestRequestType struct {
    +	This         ManagedObjectReference  `xml:"_this"`
    +	Vm           ManagedObjectReference  `xml:"vm"`
    +	Auth         BaseGuestAuthentication `xml:"auth,typeattr"`
    +	FilePath     string                  `xml:"filePath"`
    +	Index        int32                   `xml:"index,omitempty"`
    +	MaxResults   int32                   `xml:"maxResults,omitempty"`
    +	MatchPattern string                  `xml:"matchPattern,omitempty"`
    +}
    +
    +func init() {
    +	t["ListFilesInGuestRequestType"] = reflect.TypeOf((*ListFilesInGuestRequestType)(nil)).Elem()
    +}
    +
    +type ListFilesInGuestResponse struct {
    +	Returnval GuestListFileInfo `xml:"returnval"`
    +}
    +
    +type ListGuestAliases ListGuestAliasesRequestType
    +
    +func init() {
    +	t["ListGuestAliases"] = reflect.TypeOf((*ListGuestAliases)(nil)).Elem()
    +}
    +
    +type ListGuestAliasesRequestType struct {
    +	This     ManagedObjectReference  `xml:"_this"`
    +	Vm       ManagedObjectReference  `xml:"vm"`
    +	Auth     BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Username string                  `xml:"username"`
    +}
    +
    +func init() {
    +	t["ListGuestAliasesRequestType"] = reflect.TypeOf((*ListGuestAliasesRequestType)(nil)).Elem()
    +}
    +
    +type ListGuestAliasesResponse struct {
    +	Returnval []GuestAliases `xml:"returnval,omitempty"`
    +}
    +
    +type ListGuestMappedAliases ListGuestMappedAliasesRequestType
    +
    +func init() {
    +	t["ListGuestMappedAliases"] = reflect.TypeOf((*ListGuestMappedAliases)(nil)).Elem()
    +}
    +
    +type ListGuestMappedAliasesRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Auth BaseGuestAuthentication `xml:"auth,typeattr"`
    +}
    +
    +func init() {
    +	t["ListGuestMappedAliasesRequestType"] = reflect.TypeOf((*ListGuestMappedAliasesRequestType)(nil)).Elem()
    +}
    +
    +type ListGuestMappedAliasesResponse struct {
    +	Returnval []GuestMappedAliases `xml:"returnval,omitempty"`
    +}
    +
    +type ListKeys ListKeysRequestType
    +
    +func init() {
    +	t["ListKeys"] = reflect.TypeOf((*ListKeys)(nil)).Elem()
    +}
    +
    +type ListKeysRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Limit *int32                 `xml:"limit"`
    +}
    +
    +func init() {
    +	t["ListKeysRequestType"] = reflect.TypeOf((*ListKeysRequestType)(nil)).Elem()
    +}
    +
    +type ListKeysResponse struct {
    +	Returnval []CryptoKeyId `xml:"returnval,omitempty"`
    +}
    +
    +type ListKmipServers ListKmipServersRequestType
    +
    +func init() {
    +	t["ListKmipServers"] = reflect.TypeOf((*ListKmipServers)(nil)).Elem()
    +}
    +
    +type ListKmipServersRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Limit *int32                 `xml:"limit"`
    +}
    +
    +func init() {
    +	t["ListKmipServersRequestType"] = reflect.TypeOf((*ListKmipServersRequestType)(nil)).Elem()
    +}
    +
    +type ListKmipServersResponse struct {
    +	Returnval []KmipClusterInfo `xml:"returnval,omitempty"`
    +}
    +
    +type ListProcessesInGuest ListProcessesInGuestRequestType
    +
    +func init() {
    +	t["ListProcessesInGuest"] = reflect.TypeOf((*ListProcessesInGuest)(nil)).Elem()
    +}
    +
    +type ListProcessesInGuestRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Auth BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Pids []int64                 `xml:"pids,omitempty"`
    +}
    +
    +func init() {
    +	t["ListProcessesInGuestRequestType"] = reflect.TypeOf((*ListProcessesInGuestRequestType)(nil)).Elem()
    +}
    +
    +type ListProcessesInGuestResponse struct {
    +	Returnval []GuestProcessInfo `xml:"returnval,omitempty"`
    +}
    +
    +type ListRegistryKeysInGuest ListRegistryKeysInGuestRequestType
    +
    +func init() {
    +	t["ListRegistryKeysInGuest"] = reflect.TypeOf((*ListRegistryKeysInGuest)(nil)).Elem()
    +}
    +
    +type ListRegistryKeysInGuestRequestType struct {
    +	This         ManagedObjectReference  `xml:"_this"`
    +	Vm           ManagedObjectReference  `xml:"vm"`
    +	Auth         BaseGuestAuthentication `xml:"auth,typeattr"`
    +	KeyName      GuestRegKeyNameSpec     `xml:"keyName"`
    +	Recursive    bool                    `xml:"recursive"`
    +	MatchPattern string                  `xml:"matchPattern,omitempty"`
    +}
    +
    +func init() {
    +	t["ListRegistryKeysInGuestRequestType"] = reflect.TypeOf((*ListRegistryKeysInGuestRequestType)(nil)).Elem()
    +}
    +
    +type ListRegistryKeysInGuestResponse struct {
    +	Returnval []GuestRegKeyRecordSpec `xml:"returnval,omitempty"`
    +}
    +
    +type ListRegistryValuesInGuest ListRegistryValuesInGuestRequestType
    +
    +func init() {
    +	t["ListRegistryValuesInGuest"] = reflect.TypeOf((*ListRegistryValuesInGuest)(nil)).Elem()
    +}
    +
    +type ListRegistryValuesInGuestRequestType struct {
    +	This          ManagedObjectReference  `xml:"_this"`
    +	Vm            ManagedObjectReference  `xml:"vm"`
    +	Auth          BaseGuestAuthentication `xml:"auth,typeattr"`
    +	KeyName       GuestRegKeyNameSpec     `xml:"keyName"`
    +	ExpandStrings bool                    `xml:"expandStrings"`
    +	MatchPattern  string                  `xml:"matchPattern,omitempty"`
    +}
    +
    +func init() {
    +	t["ListRegistryValuesInGuestRequestType"] = reflect.TypeOf((*ListRegistryValuesInGuestRequestType)(nil)).Elem()
    +}
    +
    +type ListRegistryValuesInGuestResponse struct {
    +	Returnval []GuestRegValueSpec `xml:"returnval,omitempty"`
    +}
    +
    +type ListSmartCardTrustAnchors ListSmartCardTrustAnchorsRequestType
    +
    +func init() {
    +	t["ListSmartCardTrustAnchors"] = reflect.TypeOf((*ListSmartCardTrustAnchors)(nil)).Elem()
    +}
    +
    +type ListSmartCardTrustAnchorsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ListSmartCardTrustAnchorsRequestType"] = reflect.TypeOf((*ListSmartCardTrustAnchorsRequestType)(nil)).Elem()
    +}
    +
    +type ListSmartCardTrustAnchorsResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type ListTagsAttachedToVStorageObject ListTagsAttachedToVStorageObjectRequestType
    +
    +func init() {
    +	t["ListTagsAttachedToVStorageObject"] = reflect.TypeOf((*ListTagsAttachedToVStorageObject)(nil)).Elem()
    +}
    +
    +type ListTagsAttachedToVStorageObjectRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   ID                     `xml:"id"`
    +}
    +
    +func init() {
    +	t["ListTagsAttachedToVStorageObjectRequestType"] = reflect.TypeOf((*ListTagsAttachedToVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type ListTagsAttachedToVStorageObjectResponse struct {
    +	Returnval []VslmTagEntry `xml:"returnval,omitempty"`
    +}
    +
    +type ListVStorageObject ListVStorageObjectRequestType
    +
    +func init() {
    +	t["ListVStorageObject"] = reflect.TypeOf((*ListVStorageObject)(nil)).Elem()
    +}
    +
    +type ListVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["ListVStorageObjectRequestType"] = reflect.TypeOf((*ListVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type ListVStorageObjectResponse struct {
    +	Returnval []ID `xml:"returnval,omitempty"`
    +}
    +
    +type ListVStorageObjectsAttachedToTag ListVStorageObjectsAttachedToTagRequestType
    +
    +func init() {
    +	t["ListVStorageObjectsAttachedToTag"] = reflect.TypeOf((*ListVStorageObjectsAttachedToTag)(nil)).Elem()
    +}
    +
    +type ListVStorageObjectsAttachedToTagRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Category string                 `xml:"category"`
    +	Tag      string                 `xml:"tag"`
    +}
    +
    +func init() {
    +	t["ListVStorageObjectsAttachedToTagRequestType"] = reflect.TypeOf((*ListVStorageObjectsAttachedToTagRequestType)(nil)).Elem()
    +}
    +
    +type ListVStorageObjectsAttachedToTagResponse struct {
    +	Returnval []ID `xml:"returnval,omitempty"`
    +}
    +
    +type LocalDatastoreCreatedEvent struct {
    +	HostEvent
    +
    +	Datastore    DatastoreEventArgument `xml:"datastore"`
    +	DatastoreUrl string                 `xml:"datastoreUrl,omitempty"`
    +}
    +
    +func init() {
    +	t["LocalDatastoreCreatedEvent"] = reflect.TypeOf((*LocalDatastoreCreatedEvent)(nil)).Elem()
    +}
    +
    +type LocalDatastoreInfo struct {
    +	DatastoreInfo
    +
    +	Path string `xml:"path,omitempty"`
    +}
    +
    +func init() {
    +	t["LocalDatastoreInfo"] = reflect.TypeOf((*LocalDatastoreInfo)(nil)).Elem()
    +}
    +
    +type LocalLicenseSource struct {
    +	LicenseSource
    +
    +	LicenseKeys string `xml:"licenseKeys"`
    +}
    +
    +func init() {
    +	t["LocalLicenseSource"] = reflect.TypeOf((*LocalLicenseSource)(nil)).Elem()
    +}
    +
    +type LocalTSMEnabledEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["LocalTSMEnabledEvent"] = reflect.TypeOf((*LocalTSMEnabledEvent)(nil)).Elem()
    +}
    +
    +type LocalizableMessage struct {
    +	DynamicData
    +
    +	Key     string        `xml:"key"`
    +	Arg     []KeyAnyValue `xml:"arg,omitempty"`
    +	Message string        `xml:"message,omitempty"`
    +}
    +
    +func init() {
    +	t["LocalizableMessage"] = reflect.TypeOf((*LocalizableMessage)(nil)).Elem()
    +}
    +
    +type LocalizationManagerMessageCatalog struct {
    +	DynamicData
    +
    +	ModuleName   string     `xml:"moduleName"`
    +	CatalogName  string     `xml:"catalogName"`
    +	Locale       string     `xml:"locale"`
    +	CatalogUri   string     `xml:"catalogUri"`
    +	LastModified *time.Time `xml:"lastModified"`
    +	Md5sum       string     `xml:"md5sum,omitempty"`
    +	Version      string     `xml:"version,omitempty"`
    +}
    +
    +func init() {
    +	t["LocalizationManagerMessageCatalog"] = reflect.TypeOf((*LocalizationManagerMessageCatalog)(nil)).Elem()
    +}
    +
    +type LocalizedMethodFault struct {
    +	DynamicData
    +
    +	Fault            BaseMethodFault `xml:"fault,typeattr"`
    +	LocalizedMessage string          `xml:"localizedMessage,omitempty"`
    +}
    +
    +func init() {
    +	t["LocalizedMethodFault"] = reflect.TypeOf((*LocalizedMethodFault)(nil)).Elem()
    +}
    +
    +type LockerMisconfiguredEvent struct {
    +	Event
    +
    +	Datastore DatastoreEventArgument `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["LockerMisconfiguredEvent"] = reflect.TypeOf((*LockerMisconfiguredEvent)(nil)).Elem()
    +}
    +
    +type LockerReconfiguredEvent struct {
    +	Event
    +
    +	OldDatastore *DatastoreEventArgument `xml:"oldDatastore,omitempty"`
    +	NewDatastore *DatastoreEventArgument `xml:"newDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["LockerReconfiguredEvent"] = reflect.TypeOf((*LockerReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type LogBundlingFailed struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["LogBundlingFailed"] = reflect.TypeOf((*LogBundlingFailed)(nil)).Elem()
    +}
    +
    +type LogBundlingFailedFault LogBundlingFailed
    +
    +func init() {
    +	t["LogBundlingFailedFault"] = reflect.TypeOf((*LogBundlingFailedFault)(nil)).Elem()
    +}
    +
    +type LogUserEvent LogUserEventRequestType
    +
    +func init() {
    +	t["LogUserEvent"] = reflect.TypeOf((*LogUserEvent)(nil)).Elem()
    +}
    +
    +type LogUserEventRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +	Msg    string                 `xml:"msg"`
    +}
    +
    +func init() {
    +	t["LogUserEventRequestType"] = reflect.TypeOf((*LogUserEventRequestType)(nil)).Elem()
    +}
    +
    +type LogUserEventResponse struct {
    +}
    +
    +type Login LoginRequestType
    +
    +func init() {
    +	t["Login"] = reflect.TypeOf((*Login)(nil)).Elem()
    +}
    +
    +type LoginBySSPI LoginBySSPIRequestType
    +
    +func init() {
    +	t["LoginBySSPI"] = reflect.TypeOf((*LoginBySSPI)(nil)).Elem()
    +}
    +
    +type LoginBySSPIRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Base64Token string                 `xml:"base64Token"`
    +	Locale      string                 `xml:"locale,omitempty"`
    +}
    +
    +func init() {
    +	t["LoginBySSPIRequestType"] = reflect.TypeOf((*LoginBySSPIRequestType)(nil)).Elem()
    +}
    +
    +type LoginBySSPIResponse struct {
    +	Returnval UserSession `xml:"returnval"`
    +}
    +
    +type LoginByToken LoginByTokenRequestType
    +
    +func init() {
    +	t["LoginByToken"] = reflect.TypeOf((*LoginByToken)(nil)).Elem()
    +}
    +
    +type LoginByTokenRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Locale string                 `xml:"locale,omitempty"`
    +}
    +
    +func init() {
    +	t["LoginByTokenRequestType"] = reflect.TypeOf((*LoginByTokenRequestType)(nil)).Elem()
    +}
    +
    +type LoginByTokenResponse struct {
    +	Returnval UserSession `xml:"returnval"`
    +}
    +
    +type LoginExtensionByCertificate LoginExtensionByCertificateRequestType
    +
    +func init() {
    +	t["LoginExtensionByCertificate"] = reflect.TypeOf((*LoginExtensionByCertificate)(nil)).Elem()
    +}
    +
    +type LoginExtensionByCertificateRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ExtensionKey string                 `xml:"extensionKey"`
    +	Locale       string                 `xml:"locale,omitempty"`
    +}
    +
    +func init() {
    +	t["LoginExtensionByCertificateRequestType"] = reflect.TypeOf((*LoginExtensionByCertificateRequestType)(nil)).Elem()
    +}
    +
    +type LoginExtensionByCertificateResponse struct {
    +	Returnval UserSession `xml:"returnval"`
    +}
    +
    +type LoginExtensionBySubjectName LoginExtensionBySubjectNameRequestType
    +
    +func init() {
    +	t["LoginExtensionBySubjectName"] = reflect.TypeOf((*LoginExtensionBySubjectName)(nil)).Elem()
    +}
    +
    +type LoginExtensionBySubjectNameRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ExtensionKey string                 `xml:"extensionKey"`
    +	Locale       string                 `xml:"locale,omitempty"`
    +}
    +
    +func init() {
    +	t["LoginExtensionBySubjectNameRequestType"] = reflect.TypeOf((*LoginExtensionBySubjectNameRequestType)(nil)).Elem()
    +}
    +
    +type LoginExtensionBySubjectNameResponse struct {
    +	Returnval UserSession `xml:"returnval"`
    +}
    +
    +type LoginRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	UserName string                 `xml:"userName"`
    +	Password string                 `xml:"password"`
    +	Locale   string                 `xml:"locale,omitempty"`
    +}
    +
    +func init() {
    +	t["LoginRequestType"] = reflect.TypeOf((*LoginRequestType)(nil)).Elem()
    +}
    +
    +type LoginResponse struct {
    +	Returnval UserSession `xml:"returnval"`
    +}
    +
    +type Logout LogoutRequestType
    +
    +func init() {
    +	t["Logout"] = reflect.TypeOf((*Logout)(nil)).Elem()
    +}
    +
    +type LogoutRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["LogoutRequestType"] = reflect.TypeOf((*LogoutRequestType)(nil)).Elem()
    +}
    +
    +type LogoutResponse struct {
    +}
    +
    +type LongOption struct {
    +	OptionType
    +
    +	Min          int64 `xml:"min"`
    +	Max          int64 `xml:"max"`
    +	DefaultValue int64 `xml:"defaultValue"`
    +}
    +
    +func init() {
    +	t["LongOption"] = reflect.TypeOf((*LongOption)(nil)).Elem()
    +}
    +
    +type LongPolicy struct {
    +	InheritablePolicy
    +
    +	Value int64 `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["LongPolicy"] = reflect.TypeOf((*LongPolicy)(nil)).Elem()
    +}
    +
    +type LookupDvPortGroup LookupDvPortGroupRequestType
    +
    +func init() {
    +	t["LookupDvPortGroup"] = reflect.TypeOf((*LookupDvPortGroup)(nil)).Elem()
    +}
    +
    +type LookupDvPortGroupRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	PortgroupKey string                 `xml:"portgroupKey"`
    +}
    +
    +func init() {
    +	t["LookupDvPortGroupRequestType"] = reflect.TypeOf((*LookupDvPortGroupRequestType)(nil)).Elem()
    +}
    +
    +type LookupDvPortGroupResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type LookupVmOverheadMemory LookupVmOverheadMemoryRequestType
    +
    +func init() {
    +	t["LookupVmOverheadMemory"] = reflect.TypeOf((*LookupVmOverheadMemory)(nil)).Elem()
    +}
    +
    +type LookupVmOverheadMemoryRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Vm   ManagedObjectReference `xml:"vm"`
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["LookupVmOverheadMemoryRequestType"] = reflect.TypeOf((*LookupVmOverheadMemoryRequestType)(nil)).Elem()
    +}
    +
    +type LookupVmOverheadMemoryResponse struct {
    +	Returnval int64 `xml:"returnval"`
    +}
    +
    +type MacAddress struct {
    +	NegatableExpression
    +}
    +
    +func init() {
    +	t["MacAddress"] = reflect.TypeOf((*MacAddress)(nil)).Elem()
    +}
    +
    +type MacRange struct {
    +	MacAddress
    +
    +	Address string `xml:"address"`
    +	Mask    string `xml:"mask"`
    +}
    +
    +func init() {
    +	t["MacRange"] = reflect.TypeOf((*MacRange)(nil)).Elem()
    +}
    +
    +type MaintenanceModeFileMove struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["MaintenanceModeFileMove"] = reflect.TypeOf((*MaintenanceModeFileMove)(nil)).Elem()
    +}
    +
    +type MaintenanceModeFileMoveFault MaintenanceModeFileMove
    +
    +func init() {
    +	t["MaintenanceModeFileMoveFault"] = reflect.TypeOf((*MaintenanceModeFileMoveFault)(nil)).Elem()
    +}
    +
    +type MakeDirectory MakeDirectoryRequestType
    +
    +func init() {
    +	t["MakeDirectory"] = reflect.TypeOf((*MakeDirectory)(nil)).Elem()
    +}
    +
    +type MakeDirectoryInGuest MakeDirectoryInGuestRequestType
    +
    +func init() {
    +	t["MakeDirectoryInGuest"] = reflect.TypeOf((*MakeDirectoryInGuest)(nil)).Elem()
    +}
    +
    +type MakeDirectoryInGuestRequestType struct {
    +	This                    ManagedObjectReference  `xml:"_this"`
    +	Vm                      ManagedObjectReference  `xml:"vm"`
    +	Auth                    BaseGuestAuthentication `xml:"auth,typeattr"`
    +	DirectoryPath           string                  `xml:"directoryPath"`
    +	CreateParentDirectories bool                    `xml:"createParentDirectories"`
    +}
    +
    +func init() {
    +	t["MakeDirectoryInGuestRequestType"] = reflect.TypeOf((*MakeDirectoryInGuestRequestType)(nil)).Elem()
    +}
    +
    +type MakeDirectoryInGuestResponse struct {
    +}
    +
    +type MakeDirectoryRequestType struct {
    +	This                    ManagedObjectReference  `xml:"_this"`
    +	Name                    string                  `xml:"name"`
    +	Datacenter              *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	CreateParentDirectories *bool                   `xml:"createParentDirectories"`
    +}
    +
    +func init() {
    +	t["MakeDirectoryRequestType"] = reflect.TypeOf((*MakeDirectoryRequestType)(nil)).Elem()
    +}
    +
    +type MakeDirectoryResponse struct {
    +}
    +
    +type MakePrimaryVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Vm   ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["MakePrimaryVMRequestType"] = reflect.TypeOf((*MakePrimaryVMRequestType)(nil)).Elem()
    +}
    +
    +type MakePrimaryVM_Task MakePrimaryVMRequestType
    +
    +func init() {
    +	t["MakePrimaryVM_Task"] = reflect.TypeOf((*MakePrimaryVM_Task)(nil)).Elem()
    +}
    +
    +type MakePrimaryVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ManagedByInfo struct {
    +	DynamicData
    +
    +	ExtensionKey string `xml:"extensionKey"`
    +	Type         string `xml:"type"`
    +}
    +
    +func init() {
    +	t["ManagedByInfo"] = reflect.TypeOf((*ManagedByInfo)(nil)).Elem()
    +}
    +
    +type ManagedEntityEventArgument struct {
    +	EntityEventArgument
    +
    +	Entity ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["ManagedEntityEventArgument"] = reflect.TypeOf((*ManagedEntityEventArgument)(nil)).Elem()
    +}
    +
    +type ManagedObjectNotFound struct {
    +	RuntimeFault
    +
    +	Obj ManagedObjectReference `xml:"obj"`
    +}
    +
    +func init() {
    +	t["ManagedObjectNotFound"] = reflect.TypeOf((*ManagedObjectNotFound)(nil)).Elem()
    +}
    +
    +type ManagedObjectNotFoundFault ManagedObjectNotFound
    +
    +func init() {
    +	t["ManagedObjectNotFoundFault"] = reflect.TypeOf((*ManagedObjectNotFoundFault)(nil)).Elem()
    +}
    +
    +type ManagedObjectReference struct {
    +	Type  string `xml:"type,attr"`
    +	Value string `xml:",chardata"`
    +}
    +
    +func init() {
    +	t["ManagedObjectReference"] = reflect.TypeOf((*ManagedObjectReference)(nil)).Elem()
    +}
    +
    +type MarkAsLocalRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ScsiDiskUuid string                 `xml:"scsiDiskUuid"`
    +}
    +
    +func init() {
    +	t["MarkAsLocalRequestType"] = reflect.TypeOf((*MarkAsLocalRequestType)(nil)).Elem()
    +}
    +
    +type MarkAsLocal_Task MarkAsLocalRequestType
    +
    +func init() {
    +	t["MarkAsLocal_Task"] = reflect.TypeOf((*MarkAsLocal_Task)(nil)).Elem()
    +}
    +
    +type MarkAsLocal_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MarkAsNonLocalRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ScsiDiskUuid string                 `xml:"scsiDiskUuid"`
    +}
    +
    +func init() {
    +	t["MarkAsNonLocalRequestType"] = reflect.TypeOf((*MarkAsNonLocalRequestType)(nil)).Elem()
    +}
    +
    +type MarkAsNonLocal_Task MarkAsNonLocalRequestType
    +
    +func init() {
    +	t["MarkAsNonLocal_Task"] = reflect.TypeOf((*MarkAsNonLocal_Task)(nil)).Elem()
    +}
    +
    +type MarkAsNonLocal_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MarkAsNonSsdRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ScsiDiskUuid string                 `xml:"scsiDiskUuid"`
    +}
    +
    +func init() {
    +	t["MarkAsNonSsdRequestType"] = reflect.TypeOf((*MarkAsNonSsdRequestType)(nil)).Elem()
    +}
    +
    +type MarkAsNonSsd_Task MarkAsNonSsdRequestType
    +
    +func init() {
    +	t["MarkAsNonSsd_Task"] = reflect.TypeOf((*MarkAsNonSsd_Task)(nil)).Elem()
    +}
    +
    +type MarkAsNonSsd_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MarkAsSsdRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ScsiDiskUuid string                 `xml:"scsiDiskUuid"`
    +}
    +
    +func init() {
    +	t["MarkAsSsdRequestType"] = reflect.TypeOf((*MarkAsSsdRequestType)(nil)).Elem()
    +}
    +
    +type MarkAsSsd_Task MarkAsSsdRequestType
    +
    +func init() {
    +	t["MarkAsSsd_Task"] = reflect.TypeOf((*MarkAsSsd_Task)(nil)).Elem()
    +}
    +
    +type MarkAsSsd_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MarkAsTemplate MarkAsTemplateRequestType
    +
    +func init() {
    +	t["MarkAsTemplate"] = reflect.TypeOf((*MarkAsTemplate)(nil)).Elem()
    +}
    +
    +type MarkAsTemplateRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["MarkAsTemplateRequestType"] = reflect.TypeOf((*MarkAsTemplateRequestType)(nil)).Elem()
    +}
    +
    +type MarkAsTemplateResponse struct {
    +}
    +
    +type MarkAsVirtualMachine MarkAsVirtualMachineRequestType
    +
    +func init() {
    +	t["MarkAsVirtualMachine"] = reflect.TypeOf((*MarkAsVirtualMachine)(nil)).Elem()
    +}
    +
    +type MarkAsVirtualMachineRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Pool ManagedObjectReference  `xml:"pool"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["MarkAsVirtualMachineRequestType"] = reflect.TypeOf((*MarkAsVirtualMachineRequestType)(nil)).Elem()
    +}
    +
    +type MarkAsVirtualMachineResponse struct {
    +}
    +
    +type MarkDefault MarkDefaultRequestType
    +
    +func init() {
    +	t["MarkDefault"] = reflect.TypeOf((*MarkDefault)(nil)).Elem()
    +}
    +
    +type MarkDefaultRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	ClusterId KeyProviderId          `xml:"clusterId"`
    +}
    +
    +func init() {
    +	t["MarkDefaultRequestType"] = reflect.TypeOf((*MarkDefaultRequestType)(nil)).Elem()
    +}
    +
    +type MarkDefaultResponse struct {
    +}
    +
    +type MarkForRemoval MarkForRemovalRequestType
    +
    +func init() {
    +	t["MarkForRemoval"] = reflect.TypeOf((*MarkForRemoval)(nil)).Elem()
    +}
    +
    +type MarkForRemovalRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	HbaName string                 `xml:"hbaName"`
    +	Remove  bool                   `xml:"remove"`
    +}
    +
    +func init() {
    +	t["MarkForRemovalRequestType"] = reflect.TypeOf((*MarkForRemovalRequestType)(nil)).Elem()
    +}
    +
    +type MarkForRemovalResponse struct {
    +}
    +
    +type MemoryFileFormatNotSupportedByDatastore struct {
    +	UnsupportedDatastore
    +
    +	DatastoreName string `xml:"datastoreName"`
    +	Type          string `xml:"type"`
    +}
    +
    +func init() {
    +	t["MemoryFileFormatNotSupportedByDatastore"] = reflect.TypeOf((*MemoryFileFormatNotSupportedByDatastore)(nil)).Elem()
    +}
    +
    +type MemoryFileFormatNotSupportedByDatastoreFault MemoryFileFormatNotSupportedByDatastore
    +
    +func init() {
    +	t["MemoryFileFormatNotSupportedByDatastoreFault"] = reflect.TypeOf((*MemoryFileFormatNotSupportedByDatastoreFault)(nil)).Elem()
    +}
    +
    +type MemoryHotPlugNotSupported struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["MemoryHotPlugNotSupported"] = reflect.TypeOf((*MemoryHotPlugNotSupported)(nil)).Elem()
    +}
    +
    +type MemoryHotPlugNotSupportedFault MemoryHotPlugNotSupported
    +
    +func init() {
    +	t["MemoryHotPlugNotSupportedFault"] = reflect.TypeOf((*MemoryHotPlugNotSupportedFault)(nil)).Elem()
    +}
    +
    +type MemorySizeNotRecommended struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	MemorySizeMB    int32 `xml:"memorySizeMB"`
    +	MinMemorySizeMB int32 `xml:"minMemorySizeMB"`
    +	MaxMemorySizeMB int32 `xml:"maxMemorySizeMB"`
    +}
    +
    +func init() {
    +	t["MemorySizeNotRecommended"] = reflect.TypeOf((*MemorySizeNotRecommended)(nil)).Elem()
    +}
    +
    +type MemorySizeNotRecommendedFault MemorySizeNotRecommended
    +
    +func init() {
    +	t["MemorySizeNotRecommendedFault"] = reflect.TypeOf((*MemorySizeNotRecommendedFault)(nil)).Elem()
    +}
    +
    +type MemorySizeNotSupported struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	MemorySizeMB    int32 `xml:"memorySizeMB"`
    +	MinMemorySizeMB int32 `xml:"minMemorySizeMB"`
    +	MaxMemorySizeMB int32 `xml:"maxMemorySizeMB"`
    +}
    +
    +func init() {
    +	t["MemorySizeNotSupported"] = reflect.TypeOf((*MemorySizeNotSupported)(nil)).Elem()
    +}
    +
    +type MemorySizeNotSupportedByDatastore struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	Datastore       ManagedObjectReference `xml:"datastore"`
    +	MemorySizeMB    int32                  `xml:"memorySizeMB"`
    +	MaxMemorySizeMB int32                  `xml:"maxMemorySizeMB"`
    +}
    +
    +func init() {
    +	t["MemorySizeNotSupportedByDatastore"] = reflect.TypeOf((*MemorySizeNotSupportedByDatastore)(nil)).Elem()
    +}
    +
    +type MemorySizeNotSupportedByDatastoreFault MemorySizeNotSupportedByDatastore
    +
    +func init() {
    +	t["MemorySizeNotSupportedByDatastoreFault"] = reflect.TypeOf((*MemorySizeNotSupportedByDatastoreFault)(nil)).Elem()
    +}
    +
    +type MemorySizeNotSupportedFault MemorySizeNotSupported
    +
    +func init() {
    +	t["MemorySizeNotSupportedFault"] = reflect.TypeOf((*MemorySizeNotSupportedFault)(nil)).Elem()
    +}
    +
    +type MemorySnapshotOnIndependentDisk struct {
    +	SnapshotFault
    +}
    +
    +func init() {
    +	t["MemorySnapshotOnIndependentDisk"] = reflect.TypeOf((*MemorySnapshotOnIndependentDisk)(nil)).Elem()
    +}
    +
    +type MemorySnapshotOnIndependentDiskFault MemorySnapshotOnIndependentDisk
    +
    +func init() {
    +	t["MemorySnapshotOnIndependentDiskFault"] = reflect.TypeOf((*MemorySnapshotOnIndependentDiskFault)(nil)).Elem()
    +}
    +
    +type MergeDvsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Dvs  ManagedObjectReference `xml:"dvs"`
    +}
    +
    +func init() {
    +	t["MergeDvsRequestType"] = reflect.TypeOf((*MergeDvsRequestType)(nil)).Elem()
    +}
    +
    +type MergeDvs_Task MergeDvsRequestType
    +
    +func init() {
    +	t["MergeDvs_Task"] = reflect.TypeOf((*MergeDvs_Task)(nil)).Elem()
    +}
    +
    +type MergeDvs_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MergePermissions MergePermissionsRequestType
    +
    +func init() {
    +	t["MergePermissions"] = reflect.TypeOf((*MergePermissions)(nil)).Elem()
    +}
    +
    +type MergePermissionsRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	SrcRoleId int32                  `xml:"srcRoleId"`
    +	DstRoleId int32                  `xml:"dstRoleId"`
    +}
    +
    +func init() {
    +	t["MergePermissionsRequestType"] = reflect.TypeOf((*MergePermissionsRequestType)(nil)).Elem()
    +}
    +
    +type MergePermissionsResponse struct {
    +}
    +
    +type MethodAction struct {
    +	Action
    +
    +	Name     string                 `xml:"name"`
    +	Argument []MethodActionArgument `xml:"argument,omitempty"`
    +}
    +
    +func init() {
    +	t["MethodAction"] = reflect.TypeOf((*MethodAction)(nil)).Elem()
    +}
    +
    +type MethodActionArgument struct {
    +	DynamicData
    +
    +	Value AnyType `xml:"value,typeattr"`
    +}
    +
    +func init() {
    +	t["MethodActionArgument"] = reflect.TypeOf((*MethodActionArgument)(nil)).Elem()
    +}
    +
    +type MethodAlreadyDisabledFault struct {
    +	RuntimeFault
    +
    +	SourceId string `xml:"sourceId"`
    +}
    +
    +func init() {
    +	t["MethodAlreadyDisabledFault"] = reflect.TypeOf((*MethodAlreadyDisabledFault)(nil)).Elem()
    +}
    +
    +type MethodAlreadyDisabledFaultFault MethodAlreadyDisabledFault
    +
    +func init() {
    +	t["MethodAlreadyDisabledFaultFault"] = reflect.TypeOf((*MethodAlreadyDisabledFaultFault)(nil)).Elem()
    +}
    +
    +type MethodDescription struct {
    +	Description
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["MethodDescription"] = reflect.TypeOf((*MethodDescription)(nil)).Elem()
    +}
    +
    +type MethodDisabled struct {
    +	RuntimeFault
    +
    +	Source string `xml:"source,omitempty"`
    +}
    +
    +func init() {
    +	t["MethodDisabled"] = reflect.TypeOf((*MethodDisabled)(nil)).Elem()
    +}
    +
    +type MethodDisabledFault MethodDisabled
    +
    +func init() {
    +	t["MethodDisabledFault"] = reflect.TypeOf((*MethodDisabledFault)(nil)).Elem()
    +}
    +
    +type MethodFault struct {
    +	FaultCause   *LocalizedMethodFault `xml:"faultCause,omitempty"`
    +	FaultMessage []LocalizableMessage  `xml:"faultMessage,omitempty"`
    +}
    +
    +func init() {
    +	t["MethodFault"] = reflect.TypeOf((*MethodFault)(nil)).Elem()
    +}
    +
    +type MethodFaultFault BaseMethodFault
    +
    +func init() {
    +	t["MethodFaultFault"] = reflect.TypeOf((*MethodFaultFault)(nil)).Elem()
    +}
    +
    +type MethodNotFound struct {
    +	InvalidRequest
    +
    +	Receiver ManagedObjectReference `xml:"receiver"`
    +	Method   string                 `xml:"method"`
    +}
    +
    +func init() {
    +	t["MethodNotFound"] = reflect.TypeOf((*MethodNotFound)(nil)).Elem()
    +}
    +
    +type MethodNotFoundFault MethodNotFound
    +
    +func init() {
    +	t["MethodNotFoundFault"] = reflect.TypeOf((*MethodNotFoundFault)(nil)).Elem()
    +}
    +
    +type MetricAlarmExpression struct {
    +	AlarmExpression
    +
    +	Operator       MetricAlarmOperator `xml:"operator"`
    +	Type           string              `xml:"type"`
    +	Metric         PerfMetricId        `xml:"metric"`
    +	Yellow         int32               `xml:"yellow,omitempty"`
    +	YellowInterval int32               `xml:"yellowInterval,omitempty"`
    +	Red            int32               `xml:"red,omitempty"`
    +	RedInterval    int32               `xml:"redInterval,omitempty"`
    +}
    +
    +func init() {
    +	t["MetricAlarmExpression"] = reflect.TypeOf((*MetricAlarmExpression)(nil)).Elem()
    +}
    +
    +type MigrateVMRequestType struct {
    +	This     ManagedObjectReference     `xml:"_this"`
    +	Pool     *ManagedObjectReference    `xml:"pool,omitempty"`
    +	Host     *ManagedObjectReference    `xml:"host,omitempty"`
    +	Priority VirtualMachineMovePriority `xml:"priority"`
    +	State    VirtualMachinePowerState   `xml:"state,omitempty"`
    +}
    +
    +func init() {
    +	t["MigrateVMRequestType"] = reflect.TypeOf((*MigrateVMRequestType)(nil)).Elem()
    +}
    +
    +type MigrateVM_Task MigrateVMRequestType
    +
    +func init() {
    +	t["MigrateVM_Task"] = reflect.TypeOf((*MigrateVM_Task)(nil)).Elem()
    +}
    +
    +type MigrateVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MigrationDisabled struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["MigrationDisabled"] = reflect.TypeOf((*MigrationDisabled)(nil)).Elem()
    +}
    +
    +type MigrationDisabledFault MigrationDisabled
    +
    +func init() {
    +	t["MigrationDisabledFault"] = reflect.TypeOf((*MigrationDisabledFault)(nil)).Elem()
    +}
    +
    +type MigrationErrorEvent struct {
    +	MigrationEvent
    +}
    +
    +func init() {
    +	t["MigrationErrorEvent"] = reflect.TypeOf((*MigrationErrorEvent)(nil)).Elem()
    +}
    +
    +type MigrationEvent struct {
    +	VmEvent
    +
    +	Fault LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["MigrationEvent"] = reflect.TypeOf((*MigrationEvent)(nil)).Elem()
    +}
    +
    +type MigrationFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["MigrationFault"] = reflect.TypeOf((*MigrationFault)(nil)).Elem()
    +}
    +
    +type MigrationFaultFault BaseMigrationFault
    +
    +func init() {
    +	t["MigrationFaultFault"] = reflect.TypeOf((*MigrationFaultFault)(nil)).Elem()
    +}
    +
    +type MigrationFeatureNotSupported struct {
    +	MigrationFault
    +
    +	AtSourceHost   bool                   `xml:"atSourceHost"`
    +	FailedHostName string                 `xml:"failedHostName"`
    +	FailedHost     ManagedObjectReference `xml:"failedHost"`
    +}
    +
    +func init() {
    +	t["MigrationFeatureNotSupported"] = reflect.TypeOf((*MigrationFeatureNotSupported)(nil)).Elem()
    +}
    +
    +type MigrationFeatureNotSupportedFault BaseMigrationFeatureNotSupported
    +
    +func init() {
    +	t["MigrationFeatureNotSupportedFault"] = reflect.TypeOf((*MigrationFeatureNotSupportedFault)(nil)).Elem()
    +}
    +
    +type MigrationHostErrorEvent struct {
    +	MigrationEvent
    +
    +	DstHost HostEventArgument `xml:"dstHost"`
    +}
    +
    +func init() {
    +	t["MigrationHostErrorEvent"] = reflect.TypeOf((*MigrationHostErrorEvent)(nil)).Elem()
    +}
    +
    +type MigrationHostWarningEvent struct {
    +	MigrationEvent
    +
    +	DstHost HostEventArgument `xml:"dstHost"`
    +}
    +
    +func init() {
    +	t["MigrationHostWarningEvent"] = reflect.TypeOf((*MigrationHostWarningEvent)(nil)).Elem()
    +}
    +
    +type MigrationNotReady struct {
    +	MigrationFault
    +
    +	Reason string `xml:"reason"`
    +}
    +
    +func init() {
    +	t["MigrationNotReady"] = reflect.TypeOf((*MigrationNotReady)(nil)).Elem()
    +}
    +
    +type MigrationNotReadyFault MigrationNotReady
    +
    +func init() {
    +	t["MigrationNotReadyFault"] = reflect.TypeOf((*MigrationNotReadyFault)(nil)).Elem()
    +}
    +
    +type MigrationResourceErrorEvent struct {
    +	MigrationEvent
    +
    +	DstPool ResourcePoolEventArgument `xml:"dstPool"`
    +	DstHost HostEventArgument         `xml:"dstHost"`
    +}
    +
    +func init() {
    +	t["MigrationResourceErrorEvent"] = reflect.TypeOf((*MigrationResourceErrorEvent)(nil)).Elem()
    +}
    +
    +type MigrationResourceWarningEvent struct {
    +	MigrationEvent
    +
    +	DstPool ResourcePoolEventArgument `xml:"dstPool"`
    +	DstHost HostEventArgument         `xml:"dstHost"`
    +}
    +
    +func init() {
    +	t["MigrationResourceWarningEvent"] = reflect.TypeOf((*MigrationResourceWarningEvent)(nil)).Elem()
    +}
    +
    +type MigrationWarningEvent struct {
    +	MigrationEvent
    +}
    +
    +func init() {
    +	t["MigrationWarningEvent"] = reflect.TypeOf((*MigrationWarningEvent)(nil)).Elem()
    +}
    +
    +type MismatchedBundle struct {
    +	VimFault
    +
    +	BundleUuid        string `xml:"bundleUuid"`
    +	HostUuid          string `xml:"hostUuid"`
    +	BundleBuildNumber int32  `xml:"bundleBuildNumber"`
    +	HostBuildNumber   int32  `xml:"hostBuildNumber"`
    +}
    +
    +func init() {
    +	t["MismatchedBundle"] = reflect.TypeOf((*MismatchedBundle)(nil)).Elem()
    +}
    +
    +type MismatchedBundleFault MismatchedBundle
    +
    +func init() {
    +	t["MismatchedBundleFault"] = reflect.TypeOf((*MismatchedBundleFault)(nil)).Elem()
    +}
    +
    +type MismatchedNetworkPolicies struct {
    +	MigrationFault
    +
    +	Device    string `xml:"device"`
    +	Backing   string `xml:"backing"`
    +	Connected bool   `xml:"connected"`
    +}
    +
    +func init() {
    +	t["MismatchedNetworkPolicies"] = reflect.TypeOf((*MismatchedNetworkPolicies)(nil)).Elem()
    +}
    +
    +type MismatchedNetworkPoliciesFault MismatchedNetworkPolicies
    +
    +func init() {
    +	t["MismatchedNetworkPoliciesFault"] = reflect.TypeOf((*MismatchedNetworkPoliciesFault)(nil)).Elem()
    +}
    +
    +type MismatchedVMotionNetworkNames struct {
    +	MigrationFault
    +
    +	SourceNetwork string `xml:"sourceNetwork"`
    +	DestNetwork   string `xml:"destNetwork"`
    +}
    +
    +func init() {
    +	t["MismatchedVMotionNetworkNames"] = reflect.TypeOf((*MismatchedVMotionNetworkNames)(nil)).Elem()
    +}
    +
    +type MismatchedVMotionNetworkNamesFault MismatchedVMotionNetworkNames
    +
    +func init() {
    +	t["MismatchedVMotionNetworkNamesFault"] = reflect.TypeOf((*MismatchedVMotionNetworkNamesFault)(nil)).Elem()
    +}
    +
    +type MissingBmcSupport struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["MissingBmcSupport"] = reflect.TypeOf((*MissingBmcSupport)(nil)).Elem()
    +}
    +
    +type MissingBmcSupportFault MissingBmcSupport
    +
    +func init() {
    +	t["MissingBmcSupportFault"] = reflect.TypeOf((*MissingBmcSupportFault)(nil)).Elem()
    +}
    +
    +type MissingController struct {
    +	InvalidDeviceSpec
    +}
    +
    +func init() {
    +	t["MissingController"] = reflect.TypeOf((*MissingController)(nil)).Elem()
    +}
    +
    +type MissingControllerFault MissingController
    +
    +func init() {
    +	t["MissingControllerFault"] = reflect.TypeOf((*MissingControllerFault)(nil)).Elem()
    +}
    +
    +type MissingIpPool struct {
    +	VAppPropertyFault
    +}
    +
    +func init() {
    +	t["MissingIpPool"] = reflect.TypeOf((*MissingIpPool)(nil)).Elem()
    +}
    +
    +type MissingIpPoolFault MissingIpPool
    +
    +func init() {
    +	t["MissingIpPoolFault"] = reflect.TypeOf((*MissingIpPoolFault)(nil)).Elem()
    +}
    +
    +type MissingLinuxCustResources struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["MissingLinuxCustResources"] = reflect.TypeOf((*MissingLinuxCustResources)(nil)).Elem()
    +}
    +
    +type MissingLinuxCustResourcesFault MissingLinuxCustResources
    +
    +func init() {
    +	t["MissingLinuxCustResourcesFault"] = reflect.TypeOf((*MissingLinuxCustResourcesFault)(nil)).Elem()
    +}
    +
    +type MissingNetworkIpConfig struct {
    +	VAppPropertyFault
    +}
    +
    +func init() {
    +	t["MissingNetworkIpConfig"] = reflect.TypeOf((*MissingNetworkIpConfig)(nil)).Elem()
    +}
    +
    +type MissingNetworkIpConfigFault MissingNetworkIpConfig
    +
    +func init() {
    +	t["MissingNetworkIpConfigFault"] = reflect.TypeOf((*MissingNetworkIpConfigFault)(nil)).Elem()
    +}
    +
    +type MissingObject struct {
    +	DynamicData
    +
    +	Obj   ManagedObjectReference `xml:"obj"`
    +	Fault LocalizedMethodFault   `xml:"fault"`
    +}
    +
    +func init() {
    +	t["MissingObject"] = reflect.TypeOf((*MissingObject)(nil)).Elem()
    +}
    +
    +type MissingPowerOffConfiguration struct {
    +	VAppConfigFault
    +}
    +
    +func init() {
    +	t["MissingPowerOffConfiguration"] = reflect.TypeOf((*MissingPowerOffConfiguration)(nil)).Elem()
    +}
    +
    +type MissingPowerOffConfigurationFault MissingPowerOffConfiguration
    +
    +func init() {
    +	t["MissingPowerOffConfigurationFault"] = reflect.TypeOf((*MissingPowerOffConfigurationFault)(nil)).Elem()
    +}
    +
    +type MissingPowerOnConfiguration struct {
    +	VAppConfigFault
    +}
    +
    +func init() {
    +	t["MissingPowerOnConfiguration"] = reflect.TypeOf((*MissingPowerOnConfiguration)(nil)).Elem()
    +}
    +
    +type MissingPowerOnConfigurationFault MissingPowerOnConfiguration
    +
    +func init() {
    +	t["MissingPowerOnConfigurationFault"] = reflect.TypeOf((*MissingPowerOnConfigurationFault)(nil)).Elem()
    +}
    +
    +type MissingProperty struct {
    +	DynamicData
    +
    +	Path  string               `xml:"path"`
    +	Fault LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["MissingProperty"] = reflect.TypeOf((*MissingProperty)(nil)).Elem()
    +}
    +
    +type MissingWindowsCustResources struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["MissingWindowsCustResources"] = reflect.TypeOf((*MissingWindowsCustResources)(nil)).Elem()
    +}
    +
    +type MissingWindowsCustResourcesFault MissingWindowsCustResources
    +
    +func init() {
    +	t["MissingWindowsCustResourcesFault"] = reflect.TypeOf((*MissingWindowsCustResourcesFault)(nil)).Elem()
    +}
    +
    +type MksConnectionLimitReached struct {
    +	InvalidState
    +
    +	ConnectionLimit int32 `xml:"connectionLimit"`
    +}
    +
    +func init() {
    +	t["MksConnectionLimitReached"] = reflect.TypeOf((*MksConnectionLimitReached)(nil)).Elem()
    +}
    +
    +type MksConnectionLimitReachedFault MksConnectionLimitReached
    +
    +func init() {
    +	t["MksConnectionLimitReachedFault"] = reflect.TypeOf((*MksConnectionLimitReachedFault)(nil)).Elem()
    +}
    +
    +type ModeInfo struct {
    +	DynamicData
    +
    +	Browse string `xml:"browse,omitempty"`
    +	Read   string `xml:"read"`
    +	Modify string `xml:"modify"`
    +	Use    string `xml:"use"`
    +	Admin  string `xml:"admin,omitempty"`
    +	Full   string `xml:"full"`
    +}
    +
    +func init() {
    +	t["ModeInfo"] = reflect.TypeOf((*ModeInfo)(nil)).Elem()
    +}
    +
    +type ModifyListView ModifyListViewRequestType
    +
    +func init() {
    +	t["ModifyListView"] = reflect.TypeOf((*ModifyListView)(nil)).Elem()
    +}
    +
    +type ModifyListViewRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Add    []ManagedObjectReference `xml:"add,omitempty"`
    +	Remove []ManagedObjectReference `xml:"remove,omitempty"`
    +}
    +
    +func init() {
    +	t["ModifyListViewRequestType"] = reflect.TypeOf((*ModifyListViewRequestType)(nil)).Elem()
    +}
    +
    +type ModifyListViewResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type MonthlyByDayTaskScheduler struct {
    +	MonthlyTaskScheduler
    +
    +	Day int32 `xml:"day"`
    +}
    +
    +func init() {
    +	t["MonthlyByDayTaskScheduler"] = reflect.TypeOf((*MonthlyByDayTaskScheduler)(nil)).Elem()
    +}
    +
    +type MonthlyByWeekdayTaskScheduler struct {
    +	MonthlyTaskScheduler
    +
    +	Offset  WeekOfMonth `xml:"offset"`
    +	Weekday DayOfWeek   `xml:"weekday"`
    +}
    +
    +func init() {
    +	t["MonthlyByWeekdayTaskScheduler"] = reflect.TypeOf((*MonthlyByWeekdayTaskScheduler)(nil)).Elem()
    +}
    +
    +type MonthlyTaskScheduler struct {
    +	DailyTaskScheduler
    +}
    +
    +func init() {
    +	t["MonthlyTaskScheduler"] = reflect.TypeOf((*MonthlyTaskScheduler)(nil)).Elem()
    +}
    +
    +type MountError struct {
    +	CustomizationFault
    +
    +	Vm        ManagedObjectReference `xml:"vm"`
    +	DiskIndex int32                  `xml:"diskIndex"`
    +}
    +
    +func init() {
    +	t["MountError"] = reflect.TypeOf((*MountError)(nil)).Elem()
    +}
    +
    +type MountErrorFault MountError
    +
    +func init() {
    +	t["MountErrorFault"] = reflect.TypeOf((*MountErrorFault)(nil)).Elem()
    +}
    +
    +type MountToolsInstaller MountToolsInstallerRequestType
    +
    +func init() {
    +	t["MountToolsInstaller"] = reflect.TypeOf((*MountToolsInstaller)(nil)).Elem()
    +}
    +
    +type MountToolsInstallerRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["MountToolsInstallerRequestType"] = reflect.TypeOf((*MountToolsInstallerRequestType)(nil)).Elem()
    +}
    +
    +type MountToolsInstallerResponse struct {
    +}
    +
    +type MountVffsVolume MountVffsVolumeRequestType
    +
    +func init() {
    +	t["MountVffsVolume"] = reflect.TypeOf((*MountVffsVolume)(nil)).Elem()
    +}
    +
    +type MountVffsVolumeRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VffsUuid string                 `xml:"vffsUuid"`
    +}
    +
    +func init() {
    +	t["MountVffsVolumeRequestType"] = reflect.TypeOf((*MountVffsVolumeRequestType)(nil)).Elem()
    +}
    +
    +type MountVffsVolumeResponse struct {
    +}
    +
    +type MountVmfsVolume MountVmfsVolumeRequestType
    +
    +func init() {
    +	t["MountVmfsVolume"] = reflect.TypeOf((*MountVmfsVolume)(nil)).Elem()
    +}
    +
    +type MountVmfsVolumeExRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsUuid []string               `xml:"vmfsUuid"`
    +}
    +
    +func init() {
    +	t["MountVmfsVolumeExRequestType"] = reflect.TypeOf((*MountVmfsVolumeExRequestType)(nil)).Elem()
    +}
    +
    +type MountVmfsVolumeEx_Task MountVmfsVolumeExRequestType
    +
    +func init() {
    +	t["MountVmfsVolumeEx_Task"] = reflect.TypeOf((*MountVmfsVolumeEx_Task)(nil)).Elem()
    +}
    +
    +type MountVmfsVolumeEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MountVmfsVolumeRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsUuid string                 `xml:"vmfsUuid"`
    +}
    +
    +func init() {
    +	t["MountVmfsVolumeRequestType"] = reflect.TypeOf((*MountVmfsVolumeRequestType)(nil)).Elem()
    +}
    +
    +type MountVmfsVolumeResponse struct {
    +}
    +
    +type MoveDVPortRequestType struct {
    +	This                    ManagedObjectReference `xml:"_this"`
    +	PortKey                 []string               `xml:"portKey"`
    +	DestinationPortgroupKey string                 `xml:"destinationPortgroupKey,omitempty"`
    +}
    +
    +func init() {
    +	t["MoveDVPortRequestType"] = reflect.TypeOf((*MoveDVPortRequestType)(nil)).Elem()
    +}
    +
    +type MoveDVPort_Task MoveDVPortRequestType
    +
    +func init() {
    +	t["MoveDVPort_Task"] = reflect.TypeOf((*MoveDVPort_Task)(nil)).Elem()
    +}
    +
    +type MoveDVPort_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MoveDatastoreFileRequestType struct {
    +	This                  ManagedObjectReference  `xml:"_this"`
    +	SourceName            string                  `xml:"sourceName"`
    +	SourceDatacenter      *ManagedObjectReference `xml:"sourceDatacenter,omitempty"`
    +	DestinationName       string                  `xml:"destinationName"`
    +	DestinationDatacenter *ManagedObjectReference `xml:"destinationDatacenter,omitempty"`
    +	Force                 *bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["MoveDatastoreFileRequestType"] = reflect.TypeOf((*MoveDatastoreFileRequestType)(nil)).Elem()
    +}
    +
    +type MoveDatastoreFile_Task MoveDatastoreFileRequestType
    +
    +func init() {
    +	t["MoveDatastoreFile_Task"] = reflect.TypeOf((*MoveDatastoreFile_Task)(nil)).Elem()
    +}
    +
    +type MoveDatastoreFile_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MoveDirectoryInGuest MoveDirectoryInGuestRequestType
    +
    +func init() {
    +	t["MoveDirectoryInGuest"] = reflect.TypeOf((*MoveDirectoryInGuest)(nil)).Elem()
    +}
    +
    +type MoveDirectoryInGuestRequestType struct {
    +	This             ManagedObjectReference  `xml:"_this"`
    +	Vm               ManagedObjectReference  `xml:"vm"`
    +	Auth             BaseGuestAuthentication `xml:"auth,typeattr"`
    +	SrcDirectoryPath string                  `xml:"srcDirectoryPath"`
    +	DstDirectoryPath string                  `xml:"dstDirectoryPath"`
    +}
    +
    +func init() {
    +	t["MoveDirectoryInGuestRequestType"] = reflect.TypeOf((*MoveDirectoryInGuestRequestType)(nil)).Elem()
    +}
    +
    +type MoveDirectoryInGuestResponse struct {
    +}
    +
    +type MoveFileInGuest MoveFileInGuestRequestType
    +
    +func init() {
    +	t["MoveFileInGuest"] = reflect.TypeOf((*MoveFileInGuest)(nil)).Elem()
    +}
    +
    +type MoveFileInGuestRequestType struct {
    +	This        ManagedObjectReference  `xml:"_this"`
    +	Vm          ManagedObjectReference  `xml:"vm"`
    +	Auth        BaseGuestAuthentication `xml:"auth,typeattr"`
    +	SrcFilePath string                  `xml:"srcFilePath"`
    +	DstFilePath string                  `xml:"dstFilePath"`
    +	Overwrite   bool                    `xml:"overwrite"`
    +}
    +
    +func init() {
    +	t["MoveFileInGuestRequestType"] = reflect.TypeOf((*MoveFileInGuestRequestType)(nil)).Elem()
    +}
    +
    +type MoveFileInGuestResponse struct {
    +}
    +
    +type MoveHostIntoRequestType struct {
    +	This         ManagedObjectReference  `xml:"_this"`
    +	Host         ManagedObjectReference  `xml:"host"`
    +	ResourcePool *ManagedObjectReference `xml:"resourcePool,omitempty"`
    +}
    +
    +func init() {
    +	t["MoveHostIntoRequestType"] = reflect.TypeOf((*MoveHostIntoRequestType)(nil)).Elem()
    +}
    +
    +type MoveHostInto_Task MoveHostIntoRequestType
    +
    +func init() {
    +	t["MoveHostInto_Task"] = reflect.TypeOf((*MoveHostInto_Task)(nil)).Elem()
    +}
    +
    +type MoveHostInto_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MoveIntoFolderRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	List []ManagedObjectReference `xml:"list"`
    +}
    +
    +func init() {
    +	t["MoveIntoFolderRequestType"] = reflect.TypeOf((*MoveIntoFolderRequestType)(nil)).Elem()
    +}
    +
    +type MoveIntoFolder_Task MoveIntoFolderRequestType
    +
    +func init() {
    +	t["MoveIntoFolder_Task"] = reflect.TypeOf((*MoveIntoFolder_Task)(nil)).Elem()
    +}
    +
    +type MoveIntoFolder_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MoveIntoRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Host []ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["MoveIntoRequestType"] = reflect.TypeOf((*MoveIntoRequestType)(nil)).Elem()
    +}
    +
    +type MoveIntoResourcePool MoveIntoResourcePoolRequestType
    +
    +func init() {
    +	t["MoveIntoResourcePool"] = reflect.TypeOf((*MoveIntoResourcePool)(nil)).Elem()
    +}
    +
    +type MoveIntoResourcePoolRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	List []ManagedObjectReference `xml:"list"`
    +}
    +
    +func init() {
    +	t["MoveIntoResourcePoolRequestType"] = reflect.TypeOf((*MoveIntoResourcePoolRequestType)(nil)).Elem()
    +}
    +
    +type MoveIntoResourcePoolResponse struct {
    +}
    +
    +type MoveInto_Task MoveIntoRequestType
    +
    +func init() {
    +	t["MoveInto_Task"] = reflect.TypeOf((*MoveInto_Task)(nil)).Elem()
    +}
    +
    +type MoveInto_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MoveVirtualDiskRequestType struct {
    +	This             ManagedObjectReference          `xml:"_this"`
    +	SourceName       string                          `xml:"sourceName"`
    +	SourceDatacenter *ManagedObjectReference         `xml:"sourceDatacenter,omitempty"`
    +	DestName         string                          `xml:"destName"`
    +	DestDatacenter   *ManagedObjectReference         `xml:"destDatacenter,omitempty"`
    +	Force            *bool                           `xml:"force"`
    +	Profile          []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["MoveVirtualDiskRequestType"] = reflect.TypeOf((*MoveVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type MoveVirtualDisk_Task MoveVirtualDiskRequestType
    +
    +func init() {
    +	t["MoveVirtualDisk_Task"] = reflect.TypeOf((*MoveVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type MoveVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type MtuMatchEvent struct {
    +	DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["MtuMatchEvent"] = reflect.TypeOf((*MtuMatchEvent)(nil)).Elem()
    +}
    +
    +type MtuMismatchEvent struct {
    +	DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["MtuMismatchEvent"] = reflect.TypeOf((*MtuMismatchEvent)(nil)).Elem()
    +}
    +
    +type MultiWriterNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["MultiWriterNotSupported"] = reflect.TypeOf((*MultiWriterNotSupported)(nil)).Elem()
    +}
    +
    +type MultiWriterNotSupportedFault MultiWriterNotSupported
    +
    +func init() {
    +	t["MultiWriterNotSupportedFault"] = reflect.TypeOf((*MultiWriterNotSupportedFault)(nil)).Elem()
    +}
    +
    +type MultipleCertificatesVerifyFault struct {
    +	HostConnectFault
    +
    +	ThumbprintData []MultipleCertificatesVerifyFaultThumbprintData `xml:"thumbprintData"`
    +}
    +
    +func init() {
    +	t["MultipleCertificatesVerifyFault"] = reflect.TypeOf((*MultipleCertificatesVerifyFault)(nil)).Elem()
    +}
    +
    +type MultipleCertificatesVerifyFaultFault MultipleCertificatesVerifyFault
    +
    +func init() {
    +	t["MultipleCertificatesVerifyFaultFault"] = reflect.TypeOf((*MultipleCertificatesVerifyFaultFault)(nil)).Elem()
    +}
    +
    +type MultipleCertificatesVerifyFaultThumbprintData struct {
    +	DynamicData
    +
    +	Port       int32  `xml:"port"`
    +	Thumbprint string `xml:"thumbprint"`
    +}
    +
    +func init() {
    +	t["MultipleCertificatesVerifyFaultThumbprintData"] = reflect.TypeOf((*MultipleCertificatesVerifyFaultThumbprintData)(nil)).Elem()
    +}
    +
    +type MultipleSnapshotsNotSupported struct {
    +	SnapshotFault
    +}
    +
    +func init() {
    +	t["MultipleSnapshotsNotSupported"] = reflect.TypeOf((*MultipleSnapshotsNotSupported)(nil)).Elem()
    +}
    +
    +type MultipleSnapshotsNotSupportedFault MultipleSnapshotsNotSupported
    +
    +func init() {
    +	t["MultipleSnapshotsNotSupportedFault"] = reflect.TypeOf((*MultipleSnapshotsNotSupportedFault)(nil)).Elem()
    +}
    +
    +type NASDatastoreCreatedEvent struct {
    +	HostEvent
    +
    +	Datastore    DatastoreEventArgument `xml:"datastore"`
    +	DatastoreUrl string                 `xml:"datastoreUrl,omitempty"`
    +}
    +
    +func init() {
    +	t["NASDatastoreCreatedEvent"] = reflect.TypeOf((*NASDatastoreCreatedEvent)(nil)).Elem()
    +}
    +
    +type NamePasswordAuthentication struct {
    +	GuestAuthentication
    +
    +	Username string `xml:"username"`
    +	Password string `xml:"password"`
    +}
    +
    +func init() {
    +	t["NamePasswordAuthentication"] = reflect.TypeOf((*NamePasswordAuthentication)(nil)).Elem()
    +}
    +
    +type NamespaceFull struct {
    +	VimFault
    +
    +	Name           string `xml:"name"`
    +	CurrentMaxSize int64  `xml:"currentMaxSize"`
    +	RequiredSize   int64  `xml:"requiredSize,omitempty"`
    +}
    +
    +func init() {
    +	t["NamespaceFull"] = reflect.TypeOf((*NamespaceFull)(nil)).Elem()
    +}
    +
    +type NamespaceFullFault NamespaceFull
    +
    +func init() {
    +	t["NamespaceFullFault"] = reflect.TypeOf((*NamespaceFullFault)(nil)).Elem()
    +}
    +
    +type NamespaceLimitReached struct {
    +	VimFault
    +
    +	Limit *int32 `xml:"limit"`
    +}
    +
    +func init() {
    +	t["NamespaceLimitReached"] = reflect.TypeOf((*NamespaceLimitReached)(nil)).Elem()
    +}
    +
    +type NamespaceLimitReachedFault NamespaceLimitReached
    +
    +func init() {
    +	t["NamespaceLimitReachedFault"] = reflect.TypeOf((*NamespaceLimitReachedFault)(nil)).Elem()
    +}
    +
    +type NamespaceWriteProtected struct {
    +	VimFault
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["NamespaceWriteProtected"] = reflect.TypeOf((*NamespaceWriteProtected)(nil)).Elem()
    +}
    +
    +type NamespaceWriteProtectedFault NamespaceWriteProtected
    +
    +func init() {
    +	t["NamespaceWriteProtectedFault"] = reflect.TypeOf((*NamespaceWriteProtectedFault)(nil)).Elem()
    +}
    +
    +type NasConfigFault struct {
    +	HostConfigFault
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["NasConfigFault"] = reflect.TypeOf((*NasConfigFault)(nil)).Elem()
    +}
    +
    +type NasConfigFaultFault BaseNasConfigFault
    +
    +func init() {
    +	t["NasConfigFaultFault"] = reflect.TypeOf((*NasConfigFaultFault)(nil)).Elem()
    +}
    +
    +type NasConnectionLimitReached struct {
    +	NasConfigFault
    +
    +	RemoteHost string `xml:"remoteHost"`
    +	RemotePath string `xml:"remotePath"`
    +}
    +
    +func init() {
    +	t["NasConnectionLimitReached"] = reflect.TypeOf((*NasConnectionLimitReached)(nil)).Elem()
    +}
    +
    +type NasConnectionLimitReachedFault NasConnectionLimitReached
    +
    +func init() {
    +	t["NasConnectionLimitReachedFault"] = reflect.TypeOf((*NasConnectionLimitReachedFault)(nil)).Elem()
    +}
    +
    +type NasDatastoreInfo struct {
    +	DatastoreInfo
    +
    +	Nas *HostNasVolume `xml:"nas,omitempty"`
    +}
    +
    +func init() {
    +	t["NasDatastoreInfo"] = reflect.TypeOf((*NasDatastoreInfo)(nil)).Elem()
    +}
    +
    +type NasSessionCredentialConflict struct {
    +	NasConfigFault
    +
    +	RemoteHost string `xml:"remoteHost"`
    +	RemotePath string `xml:"remotePath"`
    +	UserName   string `xml:"userName"`
    +}
    +
    +func init() {
    +	t["NasSessionCredentialConflict"] = reflect.TypeOf((*NasSessionCredentialConflict)(nil)).Elem()
    +}
    +
    +type NasSessionCredentialConflictFault NasSessionCredentialConflict
    +
    +func init() {
    +	t["NasSessionCredentialConflictFault"] = reflect.TypeOf((*NasSessionCredentialConflictFault)(nil)).Elem()
    +}
    +
    +type NasStorageProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["NasStorageProfile"] = reflect.TypeOf((*NasStorageProfile)(nil)).Elem()
    +}
    +
    +type NasVolumeNotMounted struct {
    +	NasConfigFault
    +
    +	RemoteHost string `xml:"remoteHost"`
    +	RemotePath string `xml:"remotePath"`
    +}
    +
    +func init() {
    +	t["NasVolumeNotMounted"] = reflect.TypeOf((*NasVolumeNotMounted)(nil)).Elem()
    +}
    +
    +type NasVolumeNotMountedFault NasVolumeNotMounted
    +
    +func init() {
    +	t["NasVolumeNotMountedFault"] = reflect.TypeOf((*NasVolumeNotMountedFault)(nil)).Elem()
    +}
    +
    +type NegatableExpression struct {
    +	DynamicData
    +
    +	Negate *bool `xml:"negate"`
    +}
    +
    +func init() {
    +	t["NegatableExpression"] = reflect.TypeOf((*NegatableExpression)(nil)).Elem()
    +}
    +
    +type NetBIOSConfigInfo struct {
    +	DynamicData
    +
    +	Mode string `xml:"mode"`
    +}
    +
    +func init() {
    +	t["NetBIOSConfigInfo"] = reflect.TypeOf((*NetBIOSConfigInfo)(nil)).Elem()
    +}
    +
    +type NetDhcpConfigInfo struct {
    +	DynamicData
    +
    +	Ipv6 *NetDhcpConfigInfoDhcpOptions `xml:"ipv6,omitempty"`
    +	Ipv4 *NetDhcpConfigInfoDhcpOptions `xml:"ipv4,omitempty"`
    +}
    +
    +func init() {
    +	t["NetDhcpConfigInfo"] = reflect.TypeOf((*NetDhcpConfigInfo)(nil)).Elem()
    +}
    +
    +type NetDhcpConfigInfoDhcpOptions struct {
    +	DynamicData
    +
    +	Enable bool       `xml:"enable"`
    +	Config []KeyValue `xml:"config,omitempty"`
    +}
    +
    +func init() {
    +	t["NetDhcpConfigInfoDhcpOptions"] = reflect.TypeOf((*NetDhcpConfigInfoDhcpOptions)(nil)).Elem()
    +}
    +
    +type NetDhcpConfigSpec struct {
    +	DynamicData
    +
    +	Ipv6 *NetDhcpConfigSpecDhcpOptionsSpec `xml:"ipv6,omitempty"`
    +	Ipv4 *NetDhcpConfigSpecDhcpOptionsSpec `xml:"ipv4,omitempty"`
    +}
    +
    +func init() {
    +	t["NetDhcpConfigSpec"] = reflect.TypeOf((*NetDhcpConfigSpec)(nil)).Elem()
    +}
    +
    +type NetDhcpConfigSpecDhcpOptionsSpec struct {
    +	DynamicData
    +
    +	Enable    *bool      `xml:"enable"`
    +	Config    []KeyValue `xml:"config"`
    +	Operation string     `xml:"operation"`
    +}
    +
    +func init() {
    +	t["NetDhcpConfigSpecDhcpOptionsSpec"] = reflect.TypeOf((*NetDhcpConfigSpecDhcpOptionsSpec)(nil)).Elem()
    +}
    +
    +type NetDnsConfigInfo struct {
    +	DynamicData
    +
    +	Dhcp         bool     `xml:"dhcp"`
    +	HostName     string   `xml:"hostName"`
    +	DomainName   string   `xml:"domainName"`
    +	IpAddress    []string `xml:"ipAddress,omitempty"`
    +	SearchDomain []string `xml:"searchDomain,omitempty"`
    +}
    +
    +func init() {
    +	t["NetDnsConfigInfo"] = reflect.TypeOf((*NetDnsConfigInfo)(nil)).Elem()
    +}
    +
    +type NetDnsConfigSpec struct {
    +	DynamicData
    +
    +	Dhcp         *bool    `xml:"dhcp"`
    +	HostName     string   `xml:"hostName,omitempty"`
    +	DomainName   string   `xml:"domainName,omitempty"`
    +	IpAddress    []string `xml:"ipAddress,omitempty"`
    +	SearchDomain []string `xml:"searchDomain,omitempty"`
    +}
    +
    +func init() {
    +	t["NetDnsConfigSpec"] = reflect.TypeOf((*NetDnsConfigSpec)(nil)).Elem()
    +}
    +
    +type NetIpConfigInfo struct {
    +	DynamicData
    +
    +	IpAddress                []NetIpConfigInfoIpAddress `xml:"ipAddress,omitempty"`
    +	Dhcp                     *NetDhcpConfigInfo         `xml:"dhcp,omitempty"`
    +	AutoConfigurationEnabled *bool                      `xml:"autoConfigurationEnabled"`
    +}
    +
    +func init() {
    +	t["NetIpConfigInfo"] = reflect.TypeOf((*NetIpConfigInfo)(nil)).Elem()
    +}
    +
    +type NetIpConfigInfoIpAddress struct {
    +	DynamicData
    +
    +	IpAddress    string     `xml:"ipAddress"`
    +	PrefixLength int32      `xml:"prefixLength"`
    +	Origin       string     `xml:"origin,omitempty"`
    +	State        string     `xml:"state,omitempty"`
    +	Lifetime     *time.Time `xml:"lifetime"`
    +}
    +
    +func init() {
    +	t["NetIpConfigInfoIpAddress"] = reflect.TypeOf((*NetIpConfigInfoIpAddress)(nil)).Elem()
    +}
    +
    +type NetIpConfigSpec struct {
    +	DynamicData
    +
    +	IpAddress                []NetIpConfigSpecIpAddressSpec `xml:"ipAddress,omitempty"`
    +	Dhcp                     *NetDhcpConfigSpec             `xml:"dhcp,omitempty"`
    +	AutoConfigurationEnabled *bool                          `xml:"autoConfigurationEnabled"`
    +}
    +
    +func init() {
    +	t["NetIpConfigSpec"] = reflect.TypeOf((*NetIpConfigSpec)(nil)).Elem()
    +}
    +
    +type NetIpConfigSpecIpAddressSpec struct {
    +	DynamicData
    +
    +	IpAddress    string `xml:"ipAddress"`
    +	PrefixLength int32  `xml:"prefixLength"`
    +	Operation    string `xml:"operation"`
    +}
    +
    +func init() {
    +	t["NetIpConfigSpecIpAddressSpec"] = reflect.TypeOf((*NetIpConfigSpecIpAddressSpec)(nil)).Elem()
    +}
    +
    +type NetIpRouteConfigInfo struct {
    +	DynamicData
    +
    +	IpRoute []NetIpRouteConfigInfoIpRoute `xml:"ipRoute,omitempty"`
    +}
    +
    +func init() {
    +	t["NetIpRouteConfigInfo"] = reflect.TypeOf((*NetIpRouteConfigInfo)(nil)).Elem()
    +}
    +
    +type NetIpRouteConfigInfoGateway struct {
    +	DynamicData
    +
    +	IpAddress string `xml:"ipAddress,omitempty"`
    +	Device    string `xml:"device,omitempty"`
    +}
    +
    +func init() {
    +	t["NetIpRouteConfigInfoGateway"] = reflect.TypeOf((*NetIpRouteConfigInfoGateway)(nil)).Elem()
    +}
    +
    +type NetIpRouteConfigInfoIpRoute struct {
    +	DynamicData
    +
    +	Network      string                      `xml:"network"`
    +	PrefixLength int32                       `xml:"prefixLength"`
    +	Gateway      NetIpRouteConfigInfoGateway `xml:"gateway"`
    +}
    +
    +func init() {
    +	t["NetIpRouteConfigInfoIpRoute"] = reflect.TypeOf((*NetIpRouteConfigInfoIpRoute)(nil)).Elem()
    +}
    +
    +type NetIpRouteConfigSpec struct {
    +	DynamicData
    +
    +	IpRoute []NetIpRouteConfigSpecIpRouteSpec `xml:"ipRoute,omitempty"`
    +}
    +
    +func init() {
    +	t["NetIpRouteConfigSpec"] = reflect.TypeOf((*NetIpRouteConfigSpec)(nil)).Elem()
    +}
    +
    +type NetIpRouteConfigSpecGatewaySpec struct {
    +	DynamicData
    +
    +	IpAddress string `xml:"ipAddress,omitempty"`
    +	Device    string `xml:"device,omitempty"`
    +}
    +
    +func init() {
    +	t["NetIpRouteConfigSpecGatewaySpec"] = reflect.TypeOf((*NetIpRouteConfigSpecGatewaySpec)(nil)).Elem()
    +}
    +
    +type NetIpRouteConfigSpecIpRouteSpec struct {
    +	DynamicData
    +
    +	Network      string                          `xml:"network"`
    +	PrefixLength int32                           `xml:"prefixLength"`
    +	Gateway      NetIpRouteConfigSpecGatewaySpec `xml:"gateway"`
    +	Operation    string                          `xml:"operation"`
    +}
    +
    +func init() {
    +	t["NetIpRouteConfigSpecIpRouteSpec"] = reflect.TypeOf((*NetIpRouteConfigSpecIpRouteSpec)(nil)).Elem()
    +}
    +
    +type NetIpStackInfo struct {
    +	DynamicData
    +
    +	Neighbor      []NetIpStackInfoNetToMedia    `xml:"neighbor,omitempty"`
    +	DefaultRouter []NetIpStackInfoDefaultRouter `xml:"defaultRouter,omitempty"`
    +}
    +
    +func init() {
    +	t["NetIpStackInfo"] = reflect.TypeOf((*NetIpStackInfo)(nil)).Elem()
    +}
    +
    +type NetIpStackInfoDefaultRouter struct {
    +	DynamicData
    +
    +	IpAddress  string    `xml:"ipAddress"`
    +	Device     string    `xml:"device"`
    +	Lifetime   time.Time `xml:"lifetime"`
    +	Preference string    `xml:"preference"`
    +}
    +
    +func init() {
    +	t["NetIpStackInfoDefaultRouter"] = reflect.TypeOf((*NetIpStackInfoDefaultRouter)(nil)).Elem()
    +}
    +
    +type NetIpStackInfoNetToMedia struct {
    +	DynamicData
    +
    +	IpAddress       string `xml:"ipAddress"`
    +	PhysicalAddress string `xml:"physicalAddress"`
    +	Device          string `xml:"device"`
    +	Type            string `xml:"type"`
    +}
    +
    +func init() {
    +	t["NetIpStackInfoNetToMedia"] = reflect.TypeOf((*NetIpStackInfoNetToMedia)(nil)).Elem()
    +}
    +
    +type NetStackInstanceProfile struct {
    +	ApplyProfile
    +
    +	Key           string                         `xml:"key"`
    +	DnsConfig     NetworkProfileDnsConfigProfile `xml:"dnsConfig"`
    +	IpRouteConfig IpRouteProfile                 `xml:"ipRouteConfig"`
    +}
    +
    +func init() {
    +	t["NetStackInstanceProfile"] = reflect.TypeOf((*NetStackInstanceProfile)(nil)).Elem()
    +}
    +
    +type NetworkCopyFault struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["NetworkCopyFault"] = reflect.TypeOf((*NetworkCopyFault)(nil)).Elem()
    +}
    +
    +type NetworkCopyFaultFault NetworkCopyFault
    +
    +func init() {
    +	t["NetworkCopyFaultFault"] = reflect.TypeOf((*NetworkCopyFaultFault)(nil)).Elem()
    +}
    +
    +type NetworkDisruptedAndConfigRolledBack struct {
    +	VimFault
    +
    +	Host string `xml:"host"`
    +}
    +
    +func init() {
    +	t["NetworkDisruptedAndConfigRolledBack"] = reflect.TypeOf((*NetworkDisruptedAndConfigRolledBack)(nil)).Elem()
    +}
    +
    +type NetworkDisruptedAndConfigRolledBackFault NetworkDisruptedAndConfigRolledBack
    +
    +func init() {
    +	t["NetworkDisruptedAndConfigRolledBackFault"] = reflect.TypeOf((*NetworkDisruptedAndConfigRolledBackFault)(nil)).Elem()
    +}
    +
    +type NetworkEventArgument struct {
    +	EntityEventArgument
    +
    +	Network ManagedObjectReference `xml:"network"`
    +}
    +
    +func init() {
    +	t["NetworkEventArgument"] = reflect.TypeOf((*NetworkEventArgument)(nil)).Elem()
    +}
    +
    +type NetworkInaccessible struct {
    +	NasConfigFault
    +}
    +
    +func init() {
    +	t["NetworkInaccessible"] = reflect.TypeOf((*NetworkInaccessible)(nil)).Elem()
    +}
    +
    +type NetworkInaccessibleFault NetworkInaccessible
    +
    +func init() {
    +	t["NetworkInaccessibleFault"] = reflect.TypeOf((*NetworkInaccessibleFault)(nil)).Elem()
    +}
    +
    +type NetworkPolicyProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["NetworkPolicyProfile"] = reflect.TypeOf((*NetworkPolicyProfile)(nil)).Elem()
    +}
    +
    +type NetworkProfile struct {
    +	ApplyProfile
    +
    +	Vswitch                 []VirtualSwitchProfile           `xml:"vswitch,omitempty"`
    +	VmPortGroup             []VmPortGroupProfile             `xml:"vmPortGroup,omitempty"`
    +	HostPortGroup           []HostPortGroupProfile           `xml:"hostPortGroup,omitempty"`
    +	ServiceConsolePortGroup []ServiceConsolePortGroupProfile `xml:"serviceConsolePortGroup,omitempty"`
    +	DnsConfig               *NetworkProfileDnsConfigProfile  `xml:"dnsConfig,omitempty"`
    +	IpRouteConfig           *IpRouteProfile                  `xml:"ipRouteConfig,omitempty"`
    +	ConsoleIpRouteConfig    *IpRouteProfile                  `xml:"consoleIpRouteConfig,omitempty"`
    +	Pnic                    []PhysicalNicProfile             `xml:"pnic,omitempty"`
    +	Dvswitch                []DvsProfile                     `xml:"dvswitch,omitempty"`
    +	DvsServiceConsoleNic    []DvsServiceConsoleVNicProfile   `xml:"dvsServiceConsoleNic,omitempty"`
    +	DvsHostNic              []DvsHostVNicProfile             `xml:"dvsHostNic,omitempty"`
    +	NsxHostNic              []NsxHostVNicProfile             `xml:"nsxHostNic,omitempty"`
    +	NetStackInstance        []NetStackInstanceProfile        `xml:"netStackInstance,omitempty"`
    +}
    +
    +func init() {
    +	t["NetworkProfile"] = reflect.TypeOf((*NetworkProfile)(nil)).Elem()
    +}
    +
    +type NetworkProfileDnsConfigProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["NetworkProfileDnsConfigProfile"] = reflect.TypeOf((*NetworkProfileDnsConfigProfile)(nil)).Elem()
    +}
    +
    +type NetworkRollbackEvent struct {
    +	Event
    +
    +	MethodName    string `xml:"methodName"`
    +	TransactionId string `xml:"transactionId"`
    +}
    +
    +func init() {
    +	t["NetworkRollbackEvent"] = reflect.TypeOf((*NetworkRollbackEvent)(nil)).Elem()
    +}
    +
    +type NetworkSummary struct {
    +	DynamicData
    +
    +	Network    *ManagedObjectReference `xml:"network,omitempty"`
    +	Name       string                  `xml:"name"`
    +	Accessible bool                    `xml:"accessible"`
    +	IpPoolName string                  `xml:"ipPoolName,omitempty"`
    +	IpPoolId   int32                   `xml:"ipPoolId,omitempty"`
    +}
    +
    +func init() {
    +	t["NetworkSummary"] = reflect.TypeOf((*NetworkSummary)(nil)).Elem()
    +}
    +
    +type NetworksMayNotBeTheSame struct {
    +	MigrationFault
    +
    +	Name string `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["NetworksMayNotBeTheSame"] = reflect.TypeOf((*NetworksMayNotBeTheSame)(nil)).Elem()
    +}
    +
    +type NetworksMayNotBeTheSameFault NetworksMayNotBeTheSame
    +
    +func init() {
    +	t["NetworksMayNotBeTheSameFault"] = reflect.TypeOf((*NetworksMayNotBeTheSameFault)(nil)).Elem()
    +}
    +
    +type NicSettingMismatch struct {
    +	CustomizationFault
    +
    +	NumberOfNicsInSpec int32 `xml:"numberOfNicsInSpec"`
    +	NumberOfNicsInVM   int32 `xml:"numberOfNicsInVM"`
    +}
    +
    +func init() {
    +	t["NicSettingMismatch"] = reflect.TypeOf((*NicSettingMismatch)(nil)).Elem()
    +}
    +
    +type NicSettingMismatchFault NicSettingMismatch
    +
    +func init() {
    +	t["NicSettingMismatchFault"] = reflect.TypeOf((*NicSettingMismatchFault)(nil)).Elem()
    +}
    +
    +type NoAccessUserEvent struct {
    +	SessionEvent
    +
    +	IpAddress string `xml:"ipAddress"`
    +}
    +
    +func init() {
    +	t["NoAccessUserEvent"] = reflect.TypeOf((*NoAccessUserEvent)(nil)).Elem()
    +}
    +
    +type NoActiveHostInCluster struct {
    +	InvalidState
    +
    +	ComputeResource ManagedObjectReference `xml:"computeResource"`
    +}
    +
    +func init() {
    +	t["NoActiveHostInCluster"] = reflect.TypeOf((*NoActiveHostInCluster)(nil)).Elem()
    +}
    +
    +type NoActiveHostInClusterFault NoActiveHostInCluster
    +
    +func init() {
    +	t["NoActiveHostInClusterFault"] = reflect.TypeOf((*NoActiveHostInClusterFault)(nil)).Elem()
    +}
    +
    +type NoAvailableIp struct {
    +	VAppPropertyFault
    +
    +	Network ManagedObjectReference `xml:"network"`
    +}
    +
    +func init() {
    +	t["NoAvailableIp"] = reflect.TypeOf((*NoAvailableIp)(nil)).Elem()
    +}
    +
    +type NoAvailableIpFault NoAvailableIp
    +
    +func init() {
    +	t["NoAvailableIpFault"] = reflect.TypeOf((*NoAvailableIpFault)(nil)).Elem()
    +}
    +
    +type NoClientCertificate struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["NoClientCertificate"] = reflect.TypeOf((*NoClientCertificate)(nil)).Elem()
    +}
    +
    +type NoClientCertificateFault NoClientCertificate
    +
    +func init() {
    +	t["NoClientCertificateFault"] = reflect.TypeOf((*NoClientCertificateFault)(nil)).Elem()
    +}
    +
    +type NoCompatibleDatastore struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["NoCompatibleDatastore"] = reflect.TypeOf((*NoCompatibleDatastore)(nil)).Elem()
    +}
    +
    +type NoCompatibleDatastoreFault NoCompatibleDatastore
    +
    +func init() {
    +	t["NoCompatibleDatastoreFault"] = reflect.TypeOf((*NoCompatibleDatastoreFault)(nil)).Elem()
    +}
    +
    +type NoCompatibleHardAffinityHost struct {
    +	VmConfigFault
    +
    +	VmName string `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["NoCompatibleHardAffinityHost"] = reflect.TypeOf((*NoCompatibleHardAffinityHost)(nil)).Elem()
    +}
    +
    +type NoCompatibleHardAffinityHostFault NoCompatibleHardAffinityHost
    +
    +func init() {
    +	t["NoCompatibleHardAffinityHostFault"] = reflect.TypeOf((*NoCompatibleHardAffinityHostFault)(nil)).Elem()
    +}
    +
    +type NoCompatibleHost struct {
    +	VimFault
    +
    +	Host  []ManagedObjectReference `xml:"host,omitempty"`
    +	Error []LocalizedMethodFault   `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["NoCompatibleHost"] = reflect.TypeOf((*NoCompatibleHost)(nil)).Elem()
    +}
    +
    +type NoCompatibleHostFault BaseNoCompatibleHost
    +
    +func init() {
    +	t["NoCompatibleHostFault"] = reflect.TypeOf((*NoCompatibleHostFault)(nil)).Elem()
    +}
    +
    +type NoCompatibleHostWithAccessToDevice struct {
    +	NoCompatibleHost
    +}
    +
    +func init() {
    +	t["NoCompatibleHostWithAccessToDevice"] = reflect.TypeOf((*NoCompatibleHostWithAccessToDevice)(nil)).Elem()
    +}
    +
    +type NoCompatibleHostWithAccessToDeviceFault NoCompatibleHostWithAccessToDevice
    +
    +func init() {
    +	t["NoCompatibleHostWithAccessToDeviceFault"] = reflect.TypeOf((*NoCompatibleHostWithAccessToDeviceFault)(nil)).Elem()
    +}
    +
    +type NoCompatibleSoftAffinityHost struct {
    +	VmConfigFault
    +
    +	VmName string `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["NoCompatibleSoftAffinityHost"] = reflect.TypeOf((*NoCompatibleSoftAffinityHost)(nil)).Elem()
    +}
    +
    +type NoCompatibleSoftAffinityHostFault NoCompatibleSoftAffinityHost
    +
    +func init() {
    +	t["NoCompatibleSoftAffinityHostFault"] = reflect.TypeOf((*NoCompatibleSoftAffinityHostFault)(nil)).Elem()
    +}
    +
    +type NoConnectedDatastore struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["NoConnectedDatastore"] = reflect.TypeOf((*NoConnectedDatastore)(nil)).Elem()
    +}
    +
    +type NoConnectedDatastoreFault NoConnectedDatastore
    +
    +func init() {
    +	t["NoConnectedDatastoreFault"] = reflect.TypeOf((*NoConnectedDatastoreFault)(nil)).Elem()
    +}
    +
    +type NoDatastoresConfiguredEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["NoDatastoresConfiguredEvent"] = reflect.TypeOf((*NoDatastoresConfiguredEvent)(nil)).Elem()
    +}
    +
    +type NoDiskFound struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["NoDiskFound"] = reflect.TypeOf((*NoDiskFound)(nil)).Elem()
    +}
    +
    +type NoDiskFoundFault NoDiskFound
    +
    +func init() {
    +	t["NoDiskFoundFault"] = reflect.TypeOf((*NoDiskFoundFault)(nil)).Elem()
    +}
    +
    +type NoDiskSpace struct {
    +	FileFault
    +
    +	Datastore string `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["NoDiskSpace"] = reflect.TypeOf((*NoDiskSpace)(nil)).Elem()
    +}
    +
    +type NoDiskSpaceFault NoDiskSpace
    +
    +func init() {
    +	t["NoDiskSpaceFault"] = reflect.TypeOf((*NoDiskSpaceFault)(nil)).Elem()
    +}
    +
    +type NoDisksToCustomize struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["NoDisksToCustomize"] = reflect.TypeOf((*NoDisksToCustomize)(nil)).Elem()
    +}
    +
    +type NoDisksToCustomizeFault NoDisksToCustomize
    +
    +func init() {
    +	t["NoDisksToCustomizeFault"] = reflect.TypeOf((*NoDisksToCustomizeFault)(nil)).Elem()
    +}
    +
    +type NoGateway struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["NoGateway"] = reflect.TypeOf((*NoGateway)(nil)).Elem()
    +}
    +
    +type NoGatewayFault NoGateway
    +
    +func init() {
    +	t["NoGatewayFault"] = reflect.TypeOf((*NoGatewayFault)(nil)).Elem()
    +}
    +
    +type NoGuestHeartbeat struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["NoGuestHeartbeat"] = reflect.TypeOf((*NoGuestHeartbeat)(nil)).Elem()
    +}
    +
    +type NoGuestHeartbeatFault NoGuestHeartbeat
    +
    +func init() {
    +	t["NoGuestHeartbeatFault"] = reflect.TypeOf((*NoGuestHeartbeatFault)(nil)).Elem()
    +}
    +
    +type NoHost struct {
    +	HostConnectFault
    +
    +	Name string `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["NoHost"] = reflect.TypeOf((*NoHost)(nil)).Elem()
    +}
    +
    +type NoHostFault NoHost
    +
    +func init() {
    +	t["NoHostFault"] = reflect.TypeOf((*NoHostFault)(nil)).Elem()
    +}
    +
    +type NoHostSuitableForFtSecondary struct {
    +	VmFaultToleranceIssue
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	VmName string                 `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["NoHostSuitableForFtSecondary"] = reflect.TypeOf((*NoHostSuitableForFtSecondary)(nil)).Elem()
    +}
    +
    +type NoHostSuitableForFtSecondaryFault NoHostSuitableForFtSecondary
    +
    +func init() {
    +	t["NoHostSuitableForFtSecondaryFault"] = reflect.TypeOf((*NoHostSuitableForFtSecondaryFault)(nil)).Elem()
    +}
    +
    +type NoLicenseEvent struct {
    +	LicenseEvent
    +
    +	Feature LicenseFeatureInfo `xml:"feature"`
    +}
    +
    +func init() {
    +	t["NoLicenseEvent"] = reflect.TypeOf((*NoLicenseEvent)(nil)).Elem()
    +}
    +
    +type NoLicenseServerConfigured struct {
    +	NotEnoughLicenses
    +}
    +
    +func init() {
    +	t["NoLicenseServerConfigured"] = reflect.TypeOf((*NoLicenseServerConfigured)(nil)).Elem()
    +}
    +
    +type NoLicenseServerConfiguredFault NoLicenseServerConfigured
    +
    +func init() {
    +	t["NoLicenseServerConfiguredFault"] = reflect.TypeOf((*NoLicenseServerConfiguredFault)(nil)).Elem()
    +}
    +
    +type NoMaintenanceModeDrsRecommendationForVM struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["NoMaintenanceModeDrsRecommendationForVM"] = reflect.TypeOf((*NoMaintenanceModeDrsRecommendationForVM)(nil)).Elem()
    +}
    +
    +type NoPeerHostFound struct {
    +	HostPowerOpFailed
    +}
    +
    +func init() {
    +	t["NoPeerHostFound"] = reflect.TypeOf((*NoPeerHostFound)(nil)).Elem()
    +}
    +
    +type NoPeerHostFoundFault NoPeerHostFound
    +
    +func init() {
    +	t["NoPeerHostFoundFault"] = reflect.TypeOf((*NoPeerHostFoundFault)(nil)).Elem()
    +}
    +
    +type NoPermission struct {
    +	SecurityError
    +
    +	Object      ManagedObjectReference `xml:"object"`
    +	PrivilegeId string                 `xml:"privilegeId"`
    +}
    +
    +func init() {
    +	t["NoPermission"] = reflect.TypeOf((*NoPermission)(nil)).Elem()
    +}
    +
    +type NoPermissionFault BaseNoPermission
    +
    +func init() {
    +	t["NoPermissionFault"] = reflect.TypeOf((*NoPermissionFault)(nil)).Elem()
    +}
    +
    +type NoPermissionOnAD struct {
    +	ActiveDirectoryFault
    +}
    +
    +func init() {
    +	t["NoPermissionOnAD"] = reflect.TypeOf((*NoPermissionOnAD)(nil)).Elem()
    +}
    +
    +type NoPermissionOnADFault NoPermissionOnAD
    +
    +func init() {
    +	t["NoPermissionOnADFault"] = reflect.TypeOf((*NoPermissionOnADFault)(nil)).Elem()
    +}
    +
    +type NoPermissionOnHost struct {
    +	HostConnectFault
    +}
    +
    +func init() {
    +	t["NoPermissionOnHost"] = reflect.TypeOf((*NoPermissionOnHost)(nil)).Elem()
    +}
    +
    +type NoPermissionOnHostFault NoPermissionOnHost
    +
    +func init() {
    +	t["NoPermissionOnHostFault"] = reflect.TypeOf((*NoPermissionOnHostFault)(nil)).Elem()
    +}
    +
    +type NoPermissionOnNasVolume struct {
    +	NasConfigFault
    +
    +	UserName string `xml:"userName,omitempty"`
    +}
    +
    +func init() {
    +	t["NoPermissionOnNasVolume"] = reflect.TypeOf((*NoPermissionOnNasVolume)(nil)).Elem()
    +}
    +
    +type NoPermissionOnNasVolumeFault NoPermissionOnNasVolume
    +
    +func init() {
    +	t["NoPermissionOnNasVolumeFault"] = reflect.TypeOf((*NoPermissionOnNasVolumeFault)(nil)).Elem()
    +}
    +
    +type NoSubjectName struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["NoSubjectName"] = reflect.TypeOf((*NoSubjectName)(nil)).Elem()
    +}
    +
    +type NoSubjectNameFault NoSubjectName
    +
    +func init() {
    +	t["NoSubjectNameFault"] = reflect.TypeOf((*NoSubjectNameFault)(nil)).Elem()
    +}
    +
    +type NoVcManagedIpConfigured struct {
    +	VAppPropertyFault
    +}
    +
    +func init() {
    +	t["NoVcManagedIpConfigured"] = reflect.TypeOf((*NoVcManagedIpConfigured)(nil)).Elem()
    +}
    +
    +type NoVcManagedIpConfiguredFault NoVcManagedIpConfigured
    +
    +func init() {
    +	t["NoVcManagedIpConfiguredFault"] = reflect.TypeOf((*NoVcManagedIpConfiguredFault)(nil)).Elem()
    +}
    +
    +type NoVirtualNic struct {
    +	HostConfigFault
    +}
    +
    +func init() {
    +	t["NoVirtualNic"] = reflect.TypeOf((*NoVirtualNic)(nil)).Elem()
    +}
    +
    +type NoVirtualNicFault NoVirtualNic
    +
    +func init() {
    +	t["NoVirtualNicFault"] = reflect.TypeOf((*NoVirtualNicFault)(nil)).Elem()
    +}
    +
    +type NoVmInVApp struct {
    +	VAppConfigFault
    +}
    +
    +func init() {
    +	t["NoVmInVApp"] = reflect.TypeOf((*NoVmInVApp)(nil)).Elem()
    +}
    +
    +type NoVmInVAppFault NoVmInVApp
    +
    +func init() {
    +	t["NoVmInVAppFault"] = reflect.TypeOf((*NoVmInVAppFault)(nil)).Elem()
    +}
    +
    +type NodeDeploymentSpec struct {
    +	DynamicData
    +
    +	EsxHost                 *ManagedObjectReference `xml:"esxHost,omitempty"`
    +	Datastore               *ManagedObjectReference `xml:"datastore,omitempty"`
    +	PublicNetworkPortGroup  *ManagedObjectReference `xml:"publicNetworkPortGroup,omitempty"`
    +	ClusterNetworkPortGroup *ManagedObjectReference `xml:"clusterNetworkPortGroup,omitempty"`
    +	Folder                  ManagedObjectReference  `xml:"folder"`
    +	ResourcePool            *ManagedObjectReference `xml:"resourcePool,omitempty"`
    +	ManagementVc            *ServiceLocator         `xml:"managementVc,omitempty"`
    +	NodeName                string                  `xml:"nodeName"`
    +	IpSettings              CustomizationIPSettings `xml:"ipSettings"`
    +}
    +
    +func init() {
    +	t["NodeDeploymentSpec"] = reflect.TypeOf((*NodeDeploymentSpec)(nil)).Elem()
    +}
    +
    +type NodeNetworkSpec struct {
    +	DynamicData
    +
    +	IpSettings CustomizationIPSettings `xml:"ipSettings"`
    +}
    +
    +func init() {
    +	t["NodeNetworkSpec"] = reflect.TypeOf((*NodeNetworkSpec)(nil)).Elem()
    +}
    +
    +type NonADUserRequired struct {
    +	ActiveDirectoryFault
    +}
    +
    +func init() {
    +	t["NonADUserRequired"] = reflect.TypeOf((*NonADUserRequired)(nil)).Elem()
    +}
    +
    +type NonADUserRequiredFault NonADUserRequired
    +
    +func init() {
    +	t["NonADUserRequiredFault"] = reflect.TypeOf((*NonADUserRequiredFault)(nil)).Elem()
    +}
    +
    +type NonHomeRDMVMotionNotSupported struct {
    +	MigrationFeatureNotSupported
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["NonHomeRDMVMotionNotSupported"] = reflect.TypeOf((*NonHomeRDMVMotionNotSupported)(nil)).Elem()
    +}
    +
    +type NonHomeRDMVMotionNotSupportedFault NonHomeRDMVMotionNotSupported
    +
    +func init() {
    +	t["NonHomeRDMVMotionNotSupportedFault"] = reflect.TypeOf((*NonHomeRDMVMotionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type NonPersistentDisksNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["NonPersistentDisksNotSupported"] = reflect.TypeOf((*NonPersistentDisksNotSupported)(nil)).Elem()
    +}
    +
    +type NonPersistentDisksNotSupportedFault NonPersistentDisksNotSupported
    +
    +func init() {
    +	t["NonPersistentDisksNotSupportedFault"] = reflect.TypeOf((*NonPersistentDisksNotSupportedFault)(nil)).Elem()
    +}
    +
    +type NonVIWorkloadDetectedOnDatastoreEvent struct {
    +	DatastoreEvent
    +}
    +
    +func init() {
    +	t["NonVIWorkloadDetectedOnDatastoreEvent"] = reflect.TypeOf((*NonVIWorkloadDetectedOnDatastoreEvent)(nil)).Elem()
    +}
    +
    +type NonVmwareOuiMacNotSupportedHost struct {
    +	NotSupportedHost
    +
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["NonVmwareOuiMacNotSupportedHost"] = reflect.TypeOf((*NonVmwareOuiMacNotSupportedHost)(nil)).Elem()
    +}
    +
    +type NonVmwareOuiMacNotSupportedHostFault NonVmwareOuiMacNotSupportedHost
    +
    +func init() {
    +	t["NonVmwareOuiMacNotSupportedHostFault"] = reflect.TypeOf((*NonVmwareOuiMacNotSupportedHostFault)(nil)).Elem()
    +}
    +
    +type NotADirectory struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["NotADirectory"] = reflect.TypeOf((*NotADirectory)(nil)).Elem()
    +}
    +
    +type NotADirectoryFault NotADirectory
    +
    +func init() {
    +	t["NotADirectoryFault"] = reflect.TypeOf((*NotADirectoryFault)(nil)).Elem()
    +}
    +
    +type NotAFile struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["NotAFile"] = reflect.TypeOf((*NotAFile)(nil)).Elem()
    +}
    +
    +type NotAFileFault NotAFile
    +
    +func init() {
    +	t["NotAFileFault"] = reflect.TypeOf((*NotAFileFault)(nil)).Elem()
    +}
    +
    +type NotAuthenticated struct {
    +	NoPermission
    +}
    +
    +func init() {
    +	t["NotAuthenticated"] = reflect.TypeOf((*NotAuthenticated)(nil)).Elem()
    +}
    +
    +type NotAuthenticatedFault NotAuthenticated
    +
    +func init() {
    +	t["NotAuthenticatedFault"] = reflect.TypeOf((*NotAuthenticatedFault)(nil)).Elem()
    +}
    +
    +type NotEnoughCpus struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	NumCpuDest int32 `xml:"numCpuDest"`
    +	NumCpuVm   int32 `xml:"numCpuVm"`
    +}
    +
    +func init() {
    +	t["NotEnoughCpus"] = reflect.TypeOf((*NotEnoughCpus)(nil)).Elem()
    +}
    +
    +type NotEnoughCpusFault BaseNotEnoughCpus
    +
    +func init() {
    +	t["NotEnoughCpusFault"] = reflect.TypeOf((*NotEnoughCpusFault)(nil)).Elem()
    +}
    +
    +type NotEnoughLicenses struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["NotEnoughLicenses"] = reflect.TypeOf((*NotEnoughLicenses)(nil)).Elem()
    +}
    +
    +type NotEnoughLicensesFault BaseNotEnoughLicenses
    +
    +func init() {
    +	t["NotEnoughLicensesFault"] = reflect.TypeOf((*NotEnoughLicensesFault)(nil)).Elem()
    +}
    +
    +type NotEnoughLogicalCpus struct {
    +	NotEnoughCpus
    +
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["NotEnoughLogicalCpus"] = reflect.TypeOf((*NotEnoughLogicalCpus)(nil)).Elem()
    +}
    +
    +type NotEnoughLogicalCpusFault NotEnoughLogicalCpus
    +
    +func init() {
    +	t["NotEnoughLogicalCpusFault"] = reflect.TypeOf((*NotEnoughLogicalCpusFault)(nil)).Elem()
    +}
    +
    +type NotEnoughResourcesToStartVmEvent struct {
    +	VmEvent
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["NotEnoughResourcesToStartVmEvent"] = reflect.TypeOf((*NotEnoughResourcesToStartVmEvent)(nil)).Elem()
    +}
    +
    +type NotFound struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["NotFound"] = reflect.TypeOf((*NotFound)(nil)).Elem()
    +}
    +
    +type NotFoundFault NotFound
    +
    +func init() {
    +	t["NotFoundFault"] = reflect.TypeOf((*NotFoundFault)(nil)).Elem()
    +}
    +
    +type NotImplemented struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["NotImplemented"] = reflect.TypeOf((*NotImplemented)(nil)).Elem()
    +}
    +
    +type NotImplementedFault NotImplemented
    +
    +func init() {
    +	t["NotImplementedFault"] = reflect.TypeOf((*NotImplementedFault)(nil)).Elem()
    +}
    +
    +type NotSupported struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["NotSupported"] = reflect.TypeOf((*NotSupported)(nil)).Elem()
    +}
    +
    +type NotSupportedDeviceForFT struct {
    +	VmFaultToleranceIssue
    +
    +	Host        ManagedObjectReference `xml:"host"`
    +	HostName    string                 `xml:"hostName,omitempty"`
    +	Vm          ManagedObjectReference `xml:"vm"`
    +	VmName      string                 `xml:"vmName,omitempty"`
    +	DeviceType  string                 `xml:"deviceType"`
    +	DeviceLabel string                 `xml:"deviceLabel,omitempty"`
    +}
    +
    +func init() {
    +	t["NotSupportedDeviceForFT"] = reflect.TypeOf((*NotSupportedDeviceForFT)(nil)).Elem()
    +}
    +
    +type NotSupportedDeviceForFTFault NotSupportedDeviceForFT
    +
    +func init() {
    +	t["NotSupportedDeviceForFTFault"] = reflect.TypeOf((*NotSupportedDeviceForFTFault)(nil)).Elem()
    +}
    +
    +type NotSupportedFault BaseNotSupported
    +
    +func init() {
    +	t["NotSupportedFault"] = reflect.TypeOf((*NotSupportedFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHost struct {
    +	HostConnectFault
    +
    +	ProductName    string `xml:"productName,omitempty"`
    +	ProductVersion string `xml:"productVersion,omitempty"`
    +}
    +
    +func init() {
    +	t["NotSupportedHost"] = reflect.TypeOf((*NotSupportedHost)(nil)).Elem()
    +}
    +
    +type NotSupportedHostFault BaseNotSupportedHost
    +
    +func init() {
    +	t["NotSupportedHostFault"] = reflect.TypeOf((*NotSupportedHostFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForChecksum struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["NotSupportedHostForChecksum"] = reflect.TypeOf((*NotSupportedHostForChecksum)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForChecksumFault NotSupportedHostForChecksum
    +
    +func init() {
    +	t["NotSupportedHostForChecksumFault"] = reflect.TypeOf((*NotSupportedHostForChecksumFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForVFlash struct {
    +	NotSupportedHost
    +
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["NotSupportedHostForVFlash"] = reflect.TypeOf((*NotSupportedHostForVFlash)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForVFlashFault NotSupportedHostForVFlash
    +
    +func init() {
    +	t["NotSupportedHostForVFlashFault"] = reflect.TypeOf((*NotSupportedHostForVFlashFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForVmcp struct {
    +	NotSupportedHost
    +
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["NotSupportedHostForVmcp"] = reflect.TypeOf((*NotSupportedHostForVmcp)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForVmcpFault NotSupportedHostForVmcp
    +
    +func init() {
    +	t["NotSupportedHostForVmcpFault"] = reflect.TypeOf((*NotSupportedHostForVmcpFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForVmemFile struct {
    +	NotSupportedHost
    +
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["NotSupportedHostForVmemFile"] = reflect.TypeOf((*NotSupportedHostForVmemFile)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForVmemFileFault NotSupportedHostForVmemFile
    +
    +func init() {
    +	t["NotSupportedHostForVmemFileFault"] = reflect.TypeOf((*NotSupportedHostForVmemFileFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForVsan struct {
    +	NotSupportedHost
    +
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["NotSupportedHostForVsan"] = reflect.TypeOf((*NotSupportedHostForVsan)(nil)).Elem()
    +}
    +
    +type NotSupportedHostForVsanFault NotSupportedHostForVsan
    +
    +func init() {
    +	t["NotSupportedHostForVsanFault"] = reflect.TypeOf((*NotSupportedHostForVsanFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHostInCluster struct {
    +	NotSupportedHost
    +}
    +
    +func init() {
    +	t["NotSupportedHostInCluster"] = reflect.TypeOf((*NotSupportedHostInCluster)(nil)).Elem()
    +}
    +
    +type NotSupportedHostInClusterFault BaseNotSupportedHostInCluster
    +
    +func init() {
    +	t["NotSupportedHostInClusterFault"] = reflect.TypeOf((*NotSupportedHostInClusterFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHostInDvs struct {
    +	NotSupportedHost
    +
    +	SwitchProductSpec DistributedVirtualSwitchProductSpec `xml:"switchProductSpec"`
    +}
    +
    +func init() {
    +	t["NotSupportedHostInDvs"] = reflect.TypeOf((*NotSupportedHostInDvs)(nil)).Elem()
    +}
    +
    +type NotSupportedHostInDvsFault NotSupportedHostInDvs
    +
    +func init() {
    +	t["NotSupportedHostInDvsFault"] = reflect.TypeOf((*NotSupportedHostInDvsFault)(nil)).Elem()
    +}
    +
    +type NotSupportedHostInHACluster struct {
    +	NotSupportedHost
    +
    +	HostName string `xml:"hostName"`
    +	Build    string `xml:"build"`
    +}
    +
    +func init() {
    +	t["NotSupportedHostInHACluster"] = reflect.TypeOf((*NotSupportedHostInHACluster)(nil)).Elem()
    +}
    +
    +type NotSupportedHostInHAClusterFault NotSupportedHostInHACluster
    +
    +func init() {
    +	t["NotSupportedHostInHAClusterFault"] = reflect.TypeOf((*NotSupportedHostInHAClusterFault)(nil)).Elem()
    +}
    +
    +type NotUserConfigurableProperty struct {
    +	VAppPropertyFault
    +}
    +
    +func init() {
    +	t["NotUserConfigurableProperty"] = reflect.TypeOf((*NotUserConfigurableProperty)(nil)).Elem()
    +}
    +
    +type NotUserConfigurablePropertyFault NotUserConfigurableProperty
    +
    +func init() {
    +	t["NotUserConfigurablePropertyFault"] = reflect.TypeOf((*NotUserConfigurablePropertyFault)(nil)).Elem()
    +}
    +
    +type NsxHostVNicProfile struct {
    +	ApplyProfile
    +
    +	Key      string           `xml:"key"`
    +	IpConfig IpAddressProfile `xml:"ipConfig"`
    +}
    +
    +func init() {
    +	t["NsxHostVNicProfile"] = reflect.TypeOf((*NsxHostVNicProfile)(nil)).Elem()
    +}
    +
    +type NumPortsProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["NumPortsProfile"] = reflect.TypeOf((*NumPortsProfile)(nil)).Elem()
    +}
    +
    +type NumVirtualCoresPerSocketNotSupported struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	MaxSupportedCoresPerSocketDest int32 `xml:"maxSupportedCoresPerSocketDest"`
    +	NumCoresPerSocketVm            int32 `xml:"numCoresPerSocketVm"`
    +}
    +
    +func init() {
    +	t["NumVirtualCoresPerSocketNotSupported"] = reflect.TypeOf((*NumVirtualCoresPerSocketNotSupported)(nil)).Elem()
    +}
    +
    +type NumVirtualCoresPerSocketNotSupportedFault NumVirtualCoresPerSocketNotSupported
    +
    +func init() {
    +	t["NumVirtualCoresPerSocketNotSupportedFault"] = reflect.TypeOf((*NumVirtualCoresPerSocketNotSupportedFault)(nil)).Elem()
    +}
    +
    +type NumVirtualCpusExceedsLimit struct {
    +	InsufficientResourcesFault
    +
    +	MaxSupportedVcpus int32 `xml:"maxSupportedVcpus"`
    +}
    +
    +func init() {
    +	t["NumVirtualCpusExceedsLimit"] = reflect.TypeOf((*NumVirtualCpusExceedsLimit)(nil)).Elem()
    +}
    +
    +type NumVirtualCpusExceedsLimitFault NumVirtualCpusExceedsLimit
    +
    +func init() {
    +	t["NumVirtualCpusExceedsLimitFault"] = reflect.TypeOf((*NumVirtualCpusExceedsLimitFault)(nil)).Elem()
    +}
    +
    +type NumVirtualCpusIncompatible struct {
    +	VmConfigFault
    +
    +	Reason string `xml:"reason"`
    +	NumCpu int32  `xml:"numCpu"`
    +}
    +
    +func init() {
    +	t["NumVirtualCpusIncompatible"] = reflect.TypeOf((*NumVirtualCpusIncompatible)(nil)).Elem()
    +}
    +
    +type NumVirtualCpusIncompatibleFault NumVirtualCpusIncompatible
    +
    +func init() {
    +	t["NumVirtualCpusIncompatibleFault"] = reflect.TypeOf((*NumVirtualCpusIncompatibleFault)(nil)).Elem()
    +}
    +
    +type NumVirtualCpusNotSupported struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	MaxSupportedVcpusDest int32 `xml:"maxSupportedVcpusDest"`
    +	NumCpuVm              int32 `xml:"numCpuVm"`
    +}
    +
    +func init() {
    +	t["NumVirtualCpusNotSupported"] = reflect.TypeOf((*NumVirtualCpusNotSupported)(nil)).Elem()
    +}
    +
    +type NumVirtualCpusNotSupportedFault NumVirtualCpusNotSupported
    +
    +func init() {
    +	t["NumVirtualCpusNotSupportedFault"] = reflect.TypeOf((*NumVirtualCpusNotSupportedFault)(nil)).Elem()
    +}
    +
    +type NumericRange struct {
    +	DynamicData
    +
    +	Start int32 `xml:"start"`
    +	End   int32 `xml:"end"`
    +}
    +
    +func init() {
    +	t["NumericRange"] = reflect.TypeOf((*NumericRange)(nil)).Elem()
    +}
    +
    +type NvdimmDimmInfo struct {
    +	DynamicData
    +
    +	DimmHandle                  int32              `xml:"dimmHandle"`
    +	HealthInfo                  NvdimmHealthInfo   `xml:"healthInfo"`
    +	TotalCapacity               int64              `xml:"totalCapacity"`
    +	PersistentCapacity          int64              `xml:"persistentCapacity"`
    +	AvailablePersistentCapacity int64              `xml:"availablePersistentCapacity"`
    +	VolatileCapacity            int64              `xml:"volatileCapacity"`
    +	AvailableVolatileCapacity   int64              `xml:"availableVolatileCapacity"`
    +	BlockCapacity               int64              `xml:"blockCapacity"`
    +	RegionInfo                  []NvdimmRegionInfo `xml:"regionInfo,omitempty"`
    +	RepresentationString        string             `xml:"representationString"`
    +}
    +
    +func init() {
    +	t["NvdimmDimmInfo"] = reflect.TypeOf((*NvdimmDimmInfo)(nil)).Elem()
    +}
    +
    +type NvdimmGuid struct {
    +	DynamicData
    +
    +	Uuid string `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["NvdimmGuid"] = reflect.TypeOf((*NvdimmGuid)(nil)).Elem()
    +}
    +
    +type NvdimmHealthInfo struct {
    +	DynamicData
    +
    +	HealthStatus             string   `xml:"healthStatus"`
    +	HealthInformation        string   `xml:"healthInformation"`
    +	StateFlagInfo            []string `xml:"stateFlagInfo,omitempty"`
    +	DimmTemperature          int32    `xml:"dimmTemperature"`
    +	DimmTemperatureThreshold int32    `xml:"dimmTemperatureThreshold"`
    +	SpareBlocksPercentage    int32    `xml:"spareBlocksPercentage"`
    +	SpareBlockThreshold      int32    `xml:"spareBlockThreshold"`
    +	DimmLifespanPercentage   int32    `xml:"dimmLifespanPercentage"`
    +	EsTemperature            int32    `xml:"esTemperature,omitempty"`
    +	EsTemperatureThreshold   int32    `xml:"esTemperatureThreshold,omitempty"`
    +	EsLifespanPercentage     int32    `xml:"esLifespanPercentage,omitempty"`
    +}
    +
    +func init() {
    +	t["NvdimmHealthInfo"] = reflect.TypeOf((*NvdimmHealthInfo)(nil)).Elem()
    +}
    +
    +type NvdimmInterleaveSetInfo struct {
    +	DynamicData
    +
    +	SetId         int32   `xml:"setId"`
    +	RangeType     string  `xml:"rangeType"`
    +	BaseAddress   int64   `xml:"baseAddress"`
    +	Size          int64   `xml:"size"`
    +	AvailableSize int64   `xml:"availableSize"`
    +	DeviceList    []int32 `xml:"deviceList,omitempty"`
    +	State         string  `xml:"state"`
    +}
    +
    +func init() {
    +	t["NvdimmInterleaveSetInfo"] = reflect.TypeOf((*NvdimmInterleaveSetInfo)(nil)).Elem()
    +}
    +
    +type NvdimmNamespaceCreateSpec struct {
    +	DynamicData
    +
    +	FriendlyName string `xml:"friendlyName,omitempty"`
    +	BlockSize    int64  `xml:"blockSize"`
    +	BlockCount   int64  `xml:"blockCount"`
    +	Type         string `xml:"type"`
    +	LocationID   int32  `xml:"locationID"`
    +}
    +
    +func init() {
    +	t["NvdimmNamespaceCreateSpec"] = reflect.TypeOf((*NvdimmNamespaceCreateSpec)(nil)).Elem()
    +}
    +
    +type NvdimmNamespaceDeleteSpec struct {
    +	DynamicData
    +
    +	Uuid string `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["NvdimmNamespaceDeleteSpec"] = reflect.TypeOf((*NvdimmNamespaceDeleteSpec)(nil)).Elem()
    +}
    +
    +type NvdimmNamespaceInfo struct {
    +	DynamicData
    +
    +	Uuid                  string `xml:"uuid"`
    +	FriendlyName          string `xml:"friendlyName"`
    +	BlockSize             int64  `xml:"blockSize"`
    +	BlockCount            int64  `xml:"blockCount"`
    +	Type                  string `xml:"type"`
    +	NamespaceHealthStatus string `xml:"namespaceHealthStatus"`
    +	LocationID            int32  `xml:"locationID"`
    +	State                 string `xml:"state"`
    +}
    +
    +func init() {
    +	t["NvdimmNamespaceInfo"] = reflect.TypeOf((*NvdimmNamespaceInfo)(nil)).Elem()
    +}
    +
    +type NvdimmRegionInfo struct {
    +	DynamicData
    +
    +	RegionId  int32  `xml:"regionId"`
    +	SetId     int32  `xml:"setId"`
    +	RangeType string `xml:"rangeType"`
    +	StartAddr int64  `xml:"startAddr"`
    +	Size      int64  `xml:"size"`
    +	Offset    int64  `xml:"offset"`
    +}
    +
    +func init() {
    +	t["NvdimmRegionInfo"] = reflect.TypeOf((*NvdimmRegionInfo)(nil)).Elem()
    +}
    +
    +type NvdimmSummary struct {
    +	DynamicData
    +
    +	NumDimms           int32  `xml:"numDimms"`
    +	HealthStatus       string `xml:"healthStatus"`
    +	TotalCapacity      int64  `xml:"totalCapacity"`
    +	PersistentCapacity int64  `xml:"persistentCapacity"`
    +	BlockCapacity      int64  `xml:"blockCapacity"`
    +	AvailableCapacity  int64  `xml:"availableCapacity"`
    +	NumInterleavesets  int32  `xml:"numInterleavesets"`
    +	NumNamespaces      int32  `xml:"numNamespaces"`
    +}
    +
    +func init() {
    +	t["NvdimmSummary"] = reflect.TypeOf((*NvdimmSummary)(nil)).Elem()
    +}
    +
    +type NvdimmSystemInfo struct {
    +	DynamicData
    +
    +	Summary       *NvdimmSummary            `xml:"summary,omitempty"`
    +	Dimms         []int32                   `xml:"dimms,omitempty"`
    +	DimmInfo      []NvdimmDimmInfo          `xml:"dimmInfo,omitempty"`
    +	InterleaveSet []int32                   `xml:"interleaveSet,omitempty"`
    +	ISetInfo      []NvdimmInterleaveSetInfo `xml:"iSetInfo,omitempty"`
    +	Namespace     []NvdimmGuid              `xml:"namespace,omitempty"`
    +	NsInfo        []NvdimmNamespaceInfo     `xml:"nsInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["NvdimmSystemInfo"] = reflect.TypeOf((*NvdimmSystemInfo)(nil)).Elem()
    +}
    +
    +type ObjectContent struct {
    +	DynamicData
    +
    +	Obj        ManagedObjectReference `xml:"obj"`
    +	PropSet    []DynamicProperty      `xml:"propSet,omitempty"`
    +	MissingSet []MissingProperty      `xml:"missingSet,omitempty"`
    +}
    +
    +func init() {
    +	t["ObjectContent"] = reflect.TypeOf((*ObjectContent)(nil)).Elem()
    +}
    +
    +type ObjectSpec struct {
    +	DynamicData
    +
    +	Obj       ManagedObjectReference `xml:"obj"`
    +	Skip      *bool                  `xml:"skip"`
    +	SelectSet []BaseSelectionSpec    `xml:"selectSet,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ObjectSpec"] = reflect.TypeOf((*ObjectSpec)(nil)).Elem()
    +}
    +
    +type ObjectUpdate struct {
    +	DynamicData
    +
    +	Kind       ObjectUpdateKind       `xml:"kind"`
    +	Obj        ManagedObjectReference `xml:"obj"`
    +	ChangeSet  []PropertyChange       `xml:"changeSet,omitempty"`
    +	MissingSet []MissingProperty      `xml:"missingSet,omitempty"`
    +}
    +
    +func init() {
    +	t["ObjectUpdate"] = reflect.TypeOf((*ObjectUpdate)(nil)).Elem()
    +}
    +
    +type OnceTaskScheduler struct {
    +	TaskScheduler
    +
    +	RunAt *time.Time `xml:"runAt"`
    +}
    +
    +func init() {
    +	t["OnceTaskScheduler"] = reflect.TypeOf((*OnceTaskScheduler)(nil)).Elem()
    +}
    +
    +type OpaqueNetworkCapability struct {
    +	DynamicData
    +
    +	NetworkReservationSupported bool `xml:"networkReservationSupported"`
    +}
    +
    +func init() {
    +	t["OpaqueNetworkCapability"] = reflect.TypeOf((*OpaqueNetworkCapability)(nil)).Elem()
    +}
    +
    +type OpaqueNetworkSummary struct {
    +	NetworkSummary
    +
    +	OpaqueNetworkId   string `xml:"opaqueNetworkId"`
    +	OpaqueNetworkType string `xml:"opaqueNetworkType"`
    +}
    +
    +func init() {
    +	t["OpaqueNetworkSummary"] = reflect.TypeOf((*OpaqueNetworkSummary)(nil)).Elem()
    +}
    +
    +type OpaqueNetworkTargetInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	Network                     OpaqueNetworkSummary `xml:"network"`
    +	NetworkReservationSupported *bool                `xml:"networkReservationSupported"`
    +}
    +
    +func init() {
    +	t["OpaqueNetworkTargetInfo"] = reflect.TypeOf((*OpaqueNetworkTargetInfo)(nil)).Elem()
    +}
    +
    +type OpenInventoryViewFolder OpenInventoryViewFolderRequestType
    +
    +func init() {
    +	t["OpenInventoryViewFolder"] = reflect.TypeOf((*OpenInventoryViewFolder)(nil)).Elem()
    +}
    +
    +type OpenInventoryViewFolderRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Entity []ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["OpenInventoryViewFolderRequestType"] = reflect.TypeOf((*OpenInventoryViewFolderRequestType)(nil)).Elem()
    +}
    +
    +type OpenInventoryViewFolderResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type OperationDisabledByGuest struct {
    +	GuestOperationsFault
    +}
    +
    +func init() {
    +	t["OperationDisabledByGuest"] = reflect.TypeOf((*OperationDisabledByGuest)(nil)).Elem()
    +}
    +
    +type OperationDisabledByGuestFault OperationDisabledByGuest
    +
    +func init() {
    +	t["OperationDisabledByGuestFault"] = reflect.TypeOf((*OperationDisabledByGuestFault)(nil)).Elem()
    +}
    +
    +type OperationDisallowedOnHost struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["OperationDisallowedOnHost"] = reflect.TypeOf((*OperationDisallowedOnHost)(nil)).Elem()
    +}
    +
    +type OperationDisallowedOnHostFault OperationDisallowedOnHost
    +
    +func init() {
    +	t["OperationDisallowedOnHostFault"] = reflect.TypeOf((*OperationDisallowedOnHostFault)(nil)).Elem()
    +}
    +
    +type OperationNotSupportedByGuest struct {
    +	GuestOperationsFault
    +}
    +
    +func init() {
    +	t["OperationNotSupportedByGuest"] = reflect.TypeOf((*OperationNotSupportedByGuest)(nil)).Elem()
    +}
    +
    +type OperationNotSupportedByGuestFault OperationNotSupportedByGuest
    +
    +func init() {
    +	t["OperationNotSupportedByGuestFault"] = reflect.TypeOf((*OperationNotSupportedByGuestFault)(nil)).Elem()
    +}
    +
    +type OptionDef struct {
    +	ElementDescription
    +
    +	OptionType BaseOptionType `xml:"optionType,typeattr"`
    +}
    +
    +func init() {
    +	t["OptionDef"] = reflect.TypeOf((*OptionDef)(nil)).Elem()
    +}
    +
    +type OptionProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["OptionProfile"] = reflect.TypeOf((*OptionProfile)(nil)).Elem()
    +}
    +
    +type OptionType struct {
    +	DynamicData
    +
    +	ValueIsReadonly *bool `xml:"valueIsReadonly"`
    +}
    +
    +func init() {
    +	t["OptionType"] = reflect.TypeOf((*OptionType)(nil)).Elem()
    +}
    +
    +type OptionValue struct {
    +	DynamicData
    +
    +	Key   string  `xml:"key"`
    +	Value AnyType `xml:"value,typeattr"`
    +}
    +
    +func init() {
    +	t["OptionValue"] = reflect.TypeOf((*OptionValue)(nil)).Elem()
    +}
    +
    +type OrAlarmExpression struct {
    +	AlarmExpression
    +
    +	Expression []BaseAlarmExpression `xml:"expression,typeattr"`
    +}
    +
    +func init() {
    +	t["OrAlarmExpression"] = reflect.TypeOf((*OrAlarmExpression)(nil)).Elem()
    +}
    +
    +type OutOfBounds struct {
    +	VimFault
    +
    +	ArgumentName string `xml:"argumentName"`
    +}
    +
    +func init() {
    +	t["OutOfBounds"] = reflect.TypeOf((*OutOfBounds)(nil)).Elem()
    +}
    +
    +type OutOfBoundsFault OutOfBounds
    +
    +func init() {
    +	t["OutOfBoundsFault"] = reflect.TypeOf((*OutOfBoundsFault)(nil)).Elem()
    +}
    +
    +type OutOfSyncDvsHost struct {
    +	DvsEvent
    +
    +	HostOutOfSync []DvsOutOfSyncHostArgument `xml:"hostOutOfSync"`
    +}
    +
    +func init() {
    +	t["OutOfSyncDvsHost"] = reflect.TypeOf((*OutOfSyncDvsHost)(nil)).Elem()
    +}
    +
    +type OverwriteCustomizationSpec OverwriteCustomizationSpecRequestType
    +
    +func init() {
    +	t["OverwriteCustomizationSpec"] = reflect.TypeOf((*OverwriteCustomizationSpec)(nil)).Elem()
    +}
    +
    +type OverwriteCustomizationSpecRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Item CustomizationSpecItem  `xml:"item"`
    +}
    +
    +func init() {
    +	t["OverwriteCustomizationSpecRequestType"] = reflect.TypeOf((*OverwriteCustomizationSpecRequestType)(nil)).Elem()
    +}
    +
    +type OverwriteCustomizationSpecResponse struct {
    +}
    +
    +type OvfAttribute struct {
    +	OvfInvalidPackage
    +
    +	ElementName   string `xml:"elementName"`
    +	AttributeName string `xml:"attributeName"`
    +}
    +
    +func init() {
    +	t["OvfAttribute"] = reflect.TypeOf((*OvfAttribute)(nil)).Elem()
    +}
    +
    +type OvfAttributeFault BaseOvfAttribute
    +
    +func init() {
    +	t["OvfAttributeFault"] = reflect.TypeOf((*OvfAttributeFault)(nil)).Elem()
    +}
    +
    +type OvfConnectedDevice struct {
    +	OvfHardwareExport
    +}
    +
    +func init() {
    +	t["OvfConnectedDevice"] = reflect.TypeOf((*OvfConnectedDevice)(nil)).Elem()
    +}
    +
    +type OvfConnectedDeviceFault BaseOvfConnectedDevice
    +
    +func init() {
    +	t["OvfConnectedDeviceFault"] = reflect.TypeOf((*OvfConnectedDeviceFault)(nil)).Elem()
    +}
    +
    +type OvfConnectedDeviceFloppy struct {
    +	OvfConnectedDevice
    +
    +	Filename string `xml:"filename"`
    +}
    +
    +func init() {
    +	t["OvfConnectedDeviceFloppy"] = reflect.TypeOf((*OvfConnectedDeviceFloppy)(nil)).Elem()
    +}
    +
    +type OvfConnectedDeviceFloppyFault OvfConnectedDeviceFloppy
    +
    +func init() {
    +	t["OvfConnectedDeviceFloppyFault"] = reflect.TypeOf((*OvfConnectedDeviceFloppyFault)(nil)).Elem()
    +}
    +
    +type OvfConnectedDeviceIso struct {
    +	OvfConnectedDevice
    +
    +	Filename string `xml:"filename"`
    +}
    +
    +func init() {
    +	t["OvfConnectedDeviceIso"] = reflect.TypeOf((*OvfConnectedDeviceIso)(nil)).Elem()
    +}
    +
    +type OvfConnectedDeviceIsoFault OvfConnectedDeviceIso
    +
    +func init() {
    +	t["OvfConnectedDeviceIsoFault"] = reflect.TypeOf((*OvfConnectedDeviceIsoFault)(nil)).Elem()
    +}
    +
    +type OvfConstraint struct {
    +	OvfInvalidPackage
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["OvfConstraint"] = reflect.TypeOf((*OvfConstraint)(nil)).Elem()
    +}
    +
    +type OvfConstraintFault BaseOvfConstraint
    +
    +func init() {
    +	t["OvfConstraintFault"] = reflect.TypeOf((*OvfConstraintFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerCallbackFault struct {
    +	OvfFault
    +
    +	ExtensionKey  string `xml:"extensionKey"`
    +	ExtensionName string `xml:"extensionName"`
    +}
    +
    +func init() {
    +	t["OvfConsumerCallbackFault"] = reflect.TypeOf((*OvfConsumerCallbackFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerCallbackFaultFault BaseOvfConsumerCallbackFault
    +
    +func init() {
    +	t["OvfConsumerCallbackFaultFault"] = reflect.TypeOf((*OvfConsumerCallbackFaultFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerCommunicationError struct {
    +	OvfConsumerCallbackFault
    +
    +	Description string `xml:"description"`
    +}
    +
    +func init() {
    +	t["OvfConsumerCommunicationError"] = reflect.TypeOf((*OvfConsumerCommunicationError)(nil)).Elem()
    +}
    +
    +type OvfConsumerCommunicationErrorFault OvfConsumerCommunicationError
    +
    +func init() {
    +	t["OvfConsumerCommunicationErrorFault"] = reflect.TypeOf((*OvfConsumerCommunicationErrorFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerFault struct {
    +	OvfConsumerCallbackFault
    +
    +	ErrorKey string     `xml:"errorKey"`
    +	Message  string     `xml:"message"`
    +	Params   []KeyValue `xml:"params,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfConsumerFault"] = reflect.TypeOf((*OvfConsumerFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerFaultFault OvfConsumerFault
    +
    +func init() {
    +	t["OvfConsumerFaultFault"] = reflect.TypeOf((*OvfConsumerFaultFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerInvalidSection struct {
    +	OvfConsumerCallbackFault
    +
    +	LineNumber  int32  `xml:"lineNumber"`
    +	Description string `xml:"description"`
    +}
    +
    +func init() {
    +	t["OvfConsumerInvalidSection"] = reflect.TypeOf((*OvfConsumerInvalidSection)(nil)).Elem()
    +}
    +
    +type OvfConsumerInvalidSectionFault OvfConsumerInvalidSection
    +
    +func init() {
    +	t["OvfConsumerInvalidSectionFault"] = reflect.TypeOf((*OvfConsumerInvalidSectionFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerOstNode struct {
    +	DynamicData
    +
    +	Id      string                  `xml:"id"`
    +	Type    string                  `xml:"type"`
    +	Section []OvfConsumerOvfSection `xml:"section,omitempty"`
    +	Child   []OvfConsumerOstNode    `xml:"child,omitempty"`
    +	Entity  *ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfConsumerOstNode"] = reflect.TypeOf((*OvfConsumerOstNode)(nil)).Elem()
    +}
    +
    +type OvfConsumerOvfSection struct {
    +	DynamicData
    +
    +	LineNumber int32  `xml:"lineNumber"`
    +	Xml        string `xml:"xml"`
    +}
    +
    +func init() {
    +	t["OvfConsumerOvfSection"] = reflect.TypeOf((*OvfConsumerOvfSection)(nil)).Elem()
    +}
    +
    +type OvfConsumerPowerOnFault struct {
    +	InvalidState
    +
    +	ExtensionKey  string `xml:"extensionKey"`
    +	ExtensionName string `xml:"extensionName"`
    +	Description   string `xml:"description"`
    +}
    +
    +func init() {
    +	t["OvfConsumerPowerOnFault"] = reflect.TypeOf((*OvfConsumerPowerOnFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerPowerOnFaultFault OvfConsumerPowerOnFault
    +
    +func init() {
    +	t["OvfConsumerPowerOnFaultFault"] = reflect.TypeOf((*OvfConsumerPowerOnFaultFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerUndeclaredSection struct {
    +	OvfConsumerCallbackFault
    +
    +	QualifiedSectionType string `xml:"qualifiedSectionType"`
    +}
    +
    +func init() {
    +	t["OvfConsumerUndeclaredSection"] = reflect.TypeOf((*OvfConsumerUndeclaredSection)(nil)).Elem()
    +}
    +
    +type OvfConsumerUndeclaredSectionFault OvfConsumerUndeclaredSection
    +
    +func init() {
    +	t["OvfConsumerUndeclaredSectionFault"] = reflect.TypeOf((*OvfConsumerUndeclaredSectionFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerUndefinedPrefix struct {
    +	OvfConsumerCallbackFault
    +
    +	Prefix string `xml:"prefix"`
    +}
    +
    +func init() {
    +	t["OvfConsumerUndefinedPrefix"] = reflect.TypeOf((*OvfConsumerUndefinedPrefix)(nil)).Elem()
    +}
    +
    +type OvfConsumerUndefinedPrefixFault OvfConsumerUndefinedPrefix
    +
    +func init() {
    +	t["OvfConsumerUndefinedPrefixFault"] = reflect.TypeOf((*OvfConsumerUndefinedPrefixFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerValidationFault struct {
    +	VmConfigFault
    +
    +	ExtensionKey  string `xml:"extensionKey"`
    +	ExtensionName string `xml:"extensionName"`
    +	Message       string `xml:"message"`
    +}
    +
    +func init() {
    +	t["OvfConsumerValidationFault"] = reflect.TypeOf((*OvfConsumerValidationFault)(nil)).Elem()
    +}
    +
    +type OvfConsumerValidationFaultFault OvfConsumerValidationFault
    +
    +func init() {
    +	t["OvfConsumerValidationFaultFault"] = reflect.TypeOf((*OvfConsumerValidationFaultFault)(nil)).Elem()
    +}
    +
    +type OvfCpuCompatibility struct {
    +	OvfImport
    +
    +	RegisterName         string `xml:"registerName"`
    +	Level                int32  `xml:"level"`
    +	RegisterValue        string `xml:"registerValue"`
    +	DesiredRegisterValue string `xml:"desiredRegisterValue"`
    +}
    +
    +func init() {
    +	t["OvfCpuCompatibility"] = reflect.TypeOf((*OvfCpuCompatibility)(nil)).Elem()
    +}
    +
    +type OvfCpuCompatibilityCheckNotSupported struct {
    +	OvfImport
    +}
    +
    +func init() {
    +	t["OvfCpuCompatibilityCheckNotSupported"] = reflect.TypeOf((*OvfCpuCompatibilityCheckNotSupported)(nil)).Elem()
    +}
    +
    +type OvfCpuCompatibilityCheckNotSupportedFault OvfCpuCompatibilityCheckNotSupported
    +
    +func init() {
    +	t["OvfCpuCompatibilityCheckNotSupportedFault"] = reflect.TypeOf((*OvfCpuCompatibilityCheckNotSupportedFault)(nil)).Elem()
    +}
    +
    +type OvfCpuCompatibilityFault OvfCpuCompatibility
    +
    +func init() {
    +	t["OvfCpuCompatibilityFault"] = reflect.TypeOf((*OvfCpuCompatibilityFault)(nil)).Elem()
    +}
    +
    +type OvfCreateDescriptorParams struct {
    +	DynamicData
    +
    +	OvfFiles          []OvfFile               `xml:"ovfFiles,omitempty"`
    +	Name              string                  `xml:"name,omitempty"`
    +	Description       string                  `xml:"description,omitempty"`
    +	IncludeImageFiles *bool                   `xml:"includeImageFiles"`
    +	ExportOption      []string                `xml:"exportOption,omitempty"`
    +	Snapshot          *ManagedObjectReference `xml:"snapshot,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfCreateDescriptorParams"] = reflect.TypeOf((*OvfCreateDescriptorParams)(nil)).Elem()
    +}
    +
    +type OvfCreateDescriptorResult struct {
    +	DynamicData
    +
    +	OvfDescriptor     string                 `xml:"ovfDescriptor"`
    +	Error             []LocalizedMethodFault `xml:"error,omitempty"`
    +	Warning           []LocalizedMethodFault `xml:"warning,omitempty"`
    +	IncludeImageFiles *bool                  `xml:"includeImageFiles"`
    +}
    +
    +func init() {
    +	t["OvfCreateDescriptorResult"] = reflect.TypeOf((*OvfCreateDescriptorResult)(nil)).Elem()
    +}
    +
    +type OvfCreateImportSpecParams struct {
    +	OvfManagerCommonParams
    +
    +	EntityName         string                  `xml:"entityName"`
    +	HostSystem         *ManagedObjectReference `xml:"hostSystem,omitempty"`
    +	NetworkMapping     []OvfNetworkMapping     `xml:"networkMapping,omitempty"`
    +	IpAllocationPolicy string                  `xml:"ipAllocationPolicy,omitempty"`
    +	IpProtocol         string                  `xml:"ipProtocol,omitempty"`
    +	PropertyMapping    []KeyValue              `xml:"propertyMapping,omitempty"`
    +	ResourceMapping    []OvfResourceMap        `xml:"resourceMapping,omitempty"`
    +	DiskProvisioning   string                  `xml:"diskProvisioning,omitempty"`
    +	InstantiationOst   *OvfConsumerOstNode     `xml:"instantiationOst,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfCreateImportSpecParams"] = reflect.TypeOf((*OvfCreateImportSpecParams)(nil)).Elem()
    +}
    +
    +type OvfCreateImportSpecResult struct {
    +	DynamicData
    +
    +	ImportSpec BaseImportSpec         `xml:"importSpec,omitempty,typeattr"`
    +	FileItem   []OvfFileItem          `xml:"fileItem,omitempty"`
    +	Warning    []LocalizedMethodFault `xml:"warning,omitempty"`
    +	Error      []LocalizedMethodFault `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfCreateImportSpecResult"] = reflect.TypeOf((*OvfCreateImportSpecResult)(nil)).Elem()
    +}
    +
    +type OvfDeploymentOption struct {
    +	DynamicData
    +
    +	Key         string `xml:"key"`
    +	Label       string `xml:"label"`
    +	Description string `xml:"description"`
    +}
    +
    +func init() {
    +	t["OvfDeploymentOption"] = reflect.TypeOf((*OvfDeploymentOption)(nil)).Elem()
    +}
    +
    +type OvfDiskMappingNotFound struct {
    +	OvfSystemFault
    +
    +	DiskName string `xml:"diskName"`
    +	VmName   string `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["OvfDiskMappingNotFound"] = reflect.TypeOf((*OvfDiskMappingNotFound)(nil)).Elem()
    +}
    +
    +type OvfDiskMappingNotFoundFault OvfDiskMappingNotFound
    +
    +func init() {
    +	t["OvfDiskMappingNotFoundFault"] = reflect.TypeOf((*OvfDiskMappingNotFoundFault)(nil)).Elem()
    +}
    +
    +type OvfDiskOrderConstraint struct {
    +	OvfConstraint
    +}
    +
    +func init() {
    +	t["OvfDiskOrderConstraint"] = reflect.TypeOf((*OvfDiskOrderConstraint)(nil)).Elem()
    +}
    +
    +type OvfDiskOrderConstraintFault OvfDiskOrderConstraint
    +
    +func init() {
    +	t["OvfDiskOrderConstraintFault"] = reflect.TypeOf((*OvfDiskOrderConstraintFault)(nil)).Elem()
    +}
    +
    +type OvfDuplicateElement struct {
    +	OvfElement
    +}
    +
    +func init() {
    +	t["OvfDuplicateElement"] = reflect.TypeOf((*OvfDuplicateElement)(nil)).Elem()
    +}
    +
    +type OvfDuplicateElementFault OvfDuplicateElement
    +
    +func init() {
    +	t["OvfDuplicateElementFault"] = reflect.TypeOf((*OvfDuplicateElementFault)(nil)).Elem()
    +}
    +
    +type OvfDuplicatedElementBoundary struct {
    +	OvfElement
    +
    +	Boundary string `xml:"boundary"`
    +}
    +
    +func init() {
    +	t["OvfDuplicatedElementBoundary"] = reflect.TypeOf((*OvfDuplicatedElementBoundary)(nil)).Elem()
    +}
    +
    +type OvfDuplicatedElementBoundaryFault OvfDuplicatedElementBoundary
    +
    +func init() {
    +	t["OvfDuplicatedElementBoundaryFault"] = reflect.TypeOf((*OvfDuplicatedElementBoundaryFault)(nil)).Elem()
    +}
    +
    +type OvfDuplicatedPropertyIdExport struct {
    +	OvfExport
    +
    +	Fqid string `xml:"fqid"`
    +}
    +
    +func init() {
    +	t["OvfDuplicatedPropertyIdExport"] = reflect.TypeOf((*OvfDuplicatedPropertyIdExport)(nil)).Elem()
    +}
    +
    +type OvfDuplicatedPropertyIdExportFault OvfDuplicatedPropertyIdExport
    +
    +func init() {
    +	t["OvfDuplicatedPropertyIdExportFault"] = reflect.TypeOf((*OvfDuplicatedPropertyIdExportFault)(nil)).Elem()
    +}
    +
    +type OvfDuplicatedPropertyIdImport struct {
    +	OvfExport
    +}
    +
    +func init() {
    +	t["OvfDuplicatedPropertyIdImport"] = reflect.TypeOf((*OvfDuplicatedPropertyIdImport)(nil)).Elem()
    +}
    +
    +type OvfDuplicatedPropertyIdImportFault OvfDuplicatedPropertyIdImport
    +
    +func init() {
    +	t["OvfDuplicatedPropertyIdImportFault"] = reflect.TypeOf((*OvfDuplicatedPropertyIdImportFault)(nil)).Elem()
    +}
    +
    +type OvfElement struct {
    +	OvfInvalidPackage
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["OvfElement"] = reflect.TypeOf((*OvfElement)(nil)).Elem()
    +}
    +
    +type OvfElementFault BaseOvfElement
    +
    +func init() {
    +	t["OvfElementFault"] = reflect.TypeOf((*OvfElementFault)(nil)).Elem()
    +}
    +
    +type OvfElementInvalidValue struct {
    +	OvfElement
    +
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["OvfElementInvalidValue"] = reflect.TypeOf((*OvfElementInvalidValue)(nil)).Elem()
    +}
    +
    +type OvfElementInvalidValueFault OvfElementInvalidValue
    +
    +func init() {
    +	t["OvfElementInvalidValueFault"] = reflect.TypeOf((*OvfElementInvalidValueFault)(nil)).Elem()
    +}
    +
    +type OvfExport struct {
    +	OvfFault
    +}
    +
    +func init() {
    +	t["OvfExport"] = reflect.TypeOf((*OvfExport)(nil)).Elem()
    +}
    +
    +type OvfExportFailed struct {
    +	OvfExport
    +}
    +
    +func init() {
    +	t["OvfExportFailed"] = reflect.TypeOf((*OvfExportFailed)(nil)).Elem()
    +}
    +
    +type OvfExportFailedFault OvfExportFailed
    +
    +func init() {
    +	t["OvfExportFailedFault"] = reflect.TypeOf((*OvfExportFailedFault)(nil)).Elem()
    +}
    +
    +type OvfExportFault BaseOvfExport
    +
    +func init() {
    +	t["OvfExportFault"] = reflect.TypeOf((*OvfExportFault)(nil)).Elem()
    +}
    +
    +type OvfFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["OvfFault"] = reflect.TypeOf((*OvfFault)(nil)).Elem()
    +}
    +
    +type OvfFaultFault BaseOvfFault
    +
    +func init() {
    +	t["OvfFaultFault"] = reflect.TypeOf((*OvfFaultFault)(nil)).Elem()
    +}
    +
    +type OvfFile struct {
    +	DynamicData
    +
    +	DeviceId          string `xml:"deviceId"`
    +	Path              string `xml:"path"`
    +	CompressionMethod string `xml:"compressionMethod,omitempty"`
    +	ChunkSize         int64  `xml:"chunkSize,omitempty"`
    +	Size              int64  `xml:"size"`
    +	Capacity          int64  `xml:"capacity,omitempty"`
    +	PopulatedSize     int64  `xml:"populatedSize,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfFile"] = reflect.TypeOf((*OvfFile)(nil)).Elem()
    +}
    +
    +type OvfFileItem struct {
    +	DynamicData
    +
    +	DeviceId          string `xml:"deviceId"`
    +	Path              string `xml:"path"`
    +	CompressionMethod string `xml:"compressionMethod,omitempty"`
    +	ChunkSize         int64  `xml:"chunkSize,omitempty"`
    +	Size              int64  `xml:"size,omitempty"`
    +	CimType           int32  `xml:"cimType"`
    +	Create            bool   `xml:"create"`
    +}
    +
    +func init() {
    +	t["OvfFileItem"] = reflect.TypeOf((*OvfFileItem)(nil)).Elem()
    +}
    +
    +type OvfHardwareCheck struct {
    +	OvfImport
    +}
    +
    +func init() {
    +	t["OvfHardwareCheck"] = reflect.TypeOf((*OvfHardwareCheck)(nil)).Elem()
    +}
    +
    +type OvfHardwareCheckFault OvfHardwareCheck
    +
    +func init() {
    +	t["OvfHardwareCheckFault"] = reflect.TypeOf((*OvfHardwareCheckFault)(nil)).Elem()
    +}
    +
    +type OvfHardwareExport struct {
    +	OvfExport
    +
    +	Device BaseVirtualDevice `xml:"device,omitempty,typeattr"`
    +	VmPath string            `xml:"vmPath"`
    +}
    +
    +func init() {
    +	t["OvfHardwareExport"] = reflect.TypeOf((*OvfHardwareExport)(nil)).Elem()
    +}
    +
    +type OvfHardwareExportFault BaseOvfHardwareExport
    +
    +func init() {
    +	t["OvfHardwareExportFault"] = reflect.TypeOf((*OvfHardwareExportFault)(nil)).Elem()
    +}
    +
    +type OvfHostResourceConstraint struct {
    +	OvfConstraint
    +
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["OvfHostResourceConstraint"] = reflect.TypeOf((*OvfHostResourceConstraint)(nil)).Elem()
    +}
    +
    +type OvfHostResourceConstraintFault OvfHostResourceConstraint
    +
    +func init() {
    +	t["OvfHostResourceConstraintFault"] = reflect.TypeOf((*OvfHostResourceConstraintFault)(nil)).Elem()
    +}
    +
    +type OvfHostValueNotParsed struct {
    +	OvfSystemFault
    +
    +	Property string `xml:"property"`
    +	Value    string `xml:"value"`
    +}
    +
    +func init() {
    +	t["OvfHostValueNotParsed"] = reflect.TypeOf((*OvfHostValueNotParsed)(nil)).Elem()
    +}
    +
    +type OvfHostValueNotParsedFault OvfHostValueNotParsed
    +
    +func init() {
    +	t["OvfHostValueNotParsedFault"] = reflect.TypeOf((*OvfHostValueNotParsedFault)(nil)).Elem()
    +}
    +
    +type OvfImport struct {
    +	OvfFault
    +}
    +
    +func init() {
    +	t["OvfImport"] = reflect.TypeOf((*OvfImport)(nil)).Elem()
    +}
    +
    +type OvfImportFailed struct {
    +	OvfImport
    +}
    +
    +func init() {
    +	t["OvfImportFailed"] = reflect.TypeOf((*OvfImportFailed)(nil)).Elem()
    +}
    +
    +type OvfImportFailedFault OvfImportFailed
    +
    +func init() {
    +	t["OvfImportFailedFault"] = reflect.TypeOf((*OvfImportFailedFault)(nil)).Elem()
    +}
    +
    +type OvfImportFault BaseOvfImport
    +
    +func init() {
    +	t["OvfImportFault"] = reflect.TypeOf((*OvfImportFault)(nil)).Elem()
    +}
    +
    +type OvfInternalError struct {
    +	OvfSystemFault
    +}
    +
    +func init() {
    +	t["OvfInternalError"] = reflect.TypeOf((*OvfInternalError)(nil)).Elem()
    +}
    +
    +type OvfInternalErrorFault OvfInternalError
    +
    +func init() {
    +	t["OvfInternalErrorFault"] = reflect.TypeOf((*OvfInternalErrorFault)(nil)).Elem()
    +}
    +
    +type OvfInvalidPackage struct {
    +	OvfFault
    +
    +	LineNumber int32 `xml:"lineNumber"`
    +}
    +
    +func init() {
    +	t["OvfInvalidPackage"] = reflect.TypeOf((*OvfInvalidPackage)(nil)).Elem()
    +}
    +
    +type OvfInvalidPackageFault BaseOvfInvalidPackage
    +
    +func init() {
    +	t["OvfInvalidPackageFault"] = reflect.TypeOf((*OvfInvalidPackageFault)(nil)).Elem()
    +}
    +
    +type OvfInvalidValue struct {
    +	OvfAttribute
    +
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["OvfInvalidValue"] = reflect.TypeOf((*OvfInvalidValue)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueConfiguration struct {
    +	OvfInvalidValue
    +}
    +
    +func init() {
    +	t["OvfInvalidValueConfiguration"] = reflect.TypeOf((*OvfInvalidValueConfiguration)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueConfigurationFault OvfInvalidValueConfiguration
    +
    +func init() {
    +	t["OvfInvalidValueConfigurationFault"] = reflect.TypeOf((*OvfInvalidValueConfigurationFault)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueEmpty struct {
    +	OvfInvalidValue
    +}
    +
    +func init() {
    +	t["OvfInvalidValueEmpty"] = reflect.TypeOf((*OvfInvalidValueEmpty)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueEmptyFault OvfInvalidValueEmpty
    +
    +func init() {
    +	t["OvfInvalidValueEmptyFault"] = reflect.TypeOf((*OvfInvalidValueEmptyFault)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueFault BaseOvfInvalidValue
    +
    +func init() {
    +	t["OvfInvalidValueFault"] = reflect.TypeOf((*OvfInvalidValueFault)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueFormatMalformed struct {
    +	OvfInvalidValue
    +}
    +
    +func init() {
    +	t["OvfInvalidValueFormatMalformed"] = reflect.TypeOf((*OvfInvalidValueFormatMalformed)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueFormatMalformedFault OvfInvalidValueFormatMalformed
    +
    +func init() {
    +	t["OvfInvalidValueFormatMalformedFault"] = reflect.TypeOf((*OvfInvalidValueFormatMalformedFault)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueReference struct {
    +	OvfInvalidValue
    +}
    +
    +func init() {
    +	t["OvfInvalidValueReference"] = reflect.TypeOf((*OvfInvalidValueReference)(nil)).Elem()
    +}
    +
    +type OvfInvalidValueReferenceFault OvfInvalidValueReference
    +
    +func init() {
    +	t["OvfInvalidValueReferenceFault"] = reflect.TypeOf((*OvfInvalidValueReferenceFault)(nil)).Elem()
    +}
    +
    +type OvfInvalidVmName struct {
    +	OvfUnsupportedPackage
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["OvfInvalidVmName"] = reflect.TypeOf((*OvfInvalidVmName)(nil)).Elem()
    +}
    +
    +type OvfInvalidVmNameFault OvfInvalidVmName
    +
    +func init() {
    +	t["OvfInvalidVmNameFault"] = reflect.TypeOf((*OvfInvalidVmNameFault)(nil)).Elem()
    +}
    +
    +type OvfManagerCommonParams struct {
    +	DynamicData
    +
    +	Locale           string     `xml:"locale"`
    +	DeploymentOption string     `xml:"deploymentOption"`
    +	MsgBundle        []KeyValue `xml:"msgBundle,omitempty"`
    +	ImportOption     []string   `xml:"importOption,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfManagerCommonParams"] = reflect.TypeOf((*OvfManagerCommonParams)(nil)).Elem()
    +}
    +
    +type OvfMappedOsId struct {
    +	OvfImport
    +
    +	OvfId             int32  `xml:"ovfId"`
    +	OvfDescription    string `xml:"ovfDescription"`
    +	TargetDescription string `xml:"targetDescription"`
    +}
    +
    +func init() {
    +	t["OvfMappedOsId"] = reflect.TypeOf((*OvfMappedOsId)(nil)).Elem()
    +}
    +
    +type OvfMappedOsIdFault OvfMappedOsId
    +
    +func init() {
    +	t["OvfMappedOsIdFault"] = reflect.TypeOf((*OvfMappedOsIdFault)(nil)).Elem()
    +}
    +
    +type OvfMissingAttribute struct {
    +	OvfAttribute
    +}
    +
    +func init() {
    +	t["OvfMissingAttribute"] = reflect.TypeOf((*OvfMissingAttribute)(nil)).Elem()
    +}
    +
    +type OvfMissingAttributeFault OvfMissingAttribute
    +
    +func init() {
    +	t["OvfMissingAttributeFault"] = reflect.TypeOf((*OvfMissingAttributeFault)(nil)).Elem()
    +}
    +
    +type OvfMissingElement struct {
    +	OvfElement
    +}
    +
    +func init() {
    +	t["OvfMissingElement"] = reflect.TypeOf((*OvfMissingElement)(nil)).Elem()
    +}
    +
    +type OvfMissingElementFault BaseOvfMissingElement
    +
    +func init() {
    +	t["OvfMissingElementFault"] = reflect.TypeOf((*OvfMissingElementFault)(nil)).Elem()
    +}
    +
    +type OvfMissingElementNormalBoundary struct {
    +	OvfMissingElement
    +
    +	Boundary string `xml:"boundary"`
    +}
    +
    +func init() {
    +	t["OvfMissingElementNormalBoundary"] = reflect.TypeOf((*OvfMissingElementNormalBoundary)(nil)).Elem()
    +}
    +
    +type OvfMissingElementNormalBoundaryFault OvfMissingElementNormalBoundary
    +
    +func init() {
    +	t["OvfMissingElementNormalBoundaryFault"] = reflect.TypeOf((*OvfMissingElementNormalBoundaryFault)(nil)).Elem()
    +}
    +
    +type OvfMissingHardware struct {
    +	OvfImport
    +
    +	Name         string `xml:"name"`
    +	ResourceType int32  `xml:"resourceType"`
    +}
    +
    +func init() {
    +	t["OvfMissingHardware"] = reflect.TypeOf((*OvfMissingHardware)(nil)).Elem()
    +}
    +
    +type OvfMissingHardwareFault OvfMissingHardware
    +
    +func init() {
    +	t["OvfMissingHardwareFault"] = reflect.TypeOf((*OvfMissingHardwareFault)(nil)).Elem()
    +}
    +
    +type OvfNetworkInfo struct {
    +	DynamicData
    +
    +	Name        string `xml:"name"`
    +	Description string `xml:"description"`
    +}
    +
    +func init() {
    +	t["OvfNetworkInfo"] = reflect.TypeOf((*OvfNetworkInfo)(nil)).Elem()
    +}
    +
    +type OvfNetworkMapping struct {
    +	DynamicData
    +
    +	Name    string                 `xml:"name"`
    +	Network ManagedObjectReference `xml:"network"`
    +}
    +
    +func init() {
    +	t["OvfNetworkMapping"] = reflect.TypeOf((*OvfNetworkMapping)(nil)).Elem()
    +}
    +
    +type OvfNetworkMappingNotSupported struct {
    +	OvfImport
    +}
    +
    +func init() {
    +	t["OvfNetworkMappingNotSupported"] = reflect.TypeOf((*OvfNetworkMappingNotSupported)(nil)).Elem()
    +}
    +
    +type OvfNetworkMappingNotSupportedFault OvfNetworkMappingNotSupported
    +
    +func init() {
    +	t["OvfNetworkMappingNotSupportedFault"] = reflect.TypeOf((*OvfNetworkMappingNotSupportedFault)(nil)).Elem()
    +}
    +
    +type OvfNoHostNic struct {
    +	OvfUnsupportedPackage
    +}
    +
    +func init() {
    +	t["OvfNoHostNic"] = reflect.TypeOf((*OvfNoHostNic)(nil)).Elem()
    +}
    +
    +type OvfNoHostNicFault OvfNoHostNic
    +
    +func init() {
    +	t["OvfNoHostNicFault"] = reflect.TypeOf((*OvfNoHostNicFault)(nil)).Elem()
    +}
    +
    +type OvfNoSpaceOnController struct {
    +	OvfUnsupportedElement
    +
    +	Parent string `xml:"parent"`
    +}
    +
    +func init() {
    +	t["OvfNoSpaceOnController"] = reflect.TypeOf((*OvfNoSpaceOnController)(nil)).Elem()
    +}
    +
    +type OvfNoSpaceOnControllerFault OvfNoSpaceOnController
    +
    +func init() {
    +	t["OvfNoSpaceOnControllerFault"] = reflect.TypeOf((*OvfNoSpaceOnControllerFault)(nil)).Elem()
    +}
    +
    +type OvfNoSupportedHardwareFamily struct {
    +	OvfUnsupportedPackage
    +
    +	Version string `xml:"version"`
    +}
    +
    +func init() {
    +	t["OvfNoSupportedHardwareFamily"] = reflect.TypeOf((*OvfNoSupportedHardwareFamily)(nil)).Elem()
    +}
    +
    +type OvfNoSupportedHardwareFamilyFault OvfNoSupportedHardwareFamily
    +
    +func init() {
    +	t["OvfNoSupportedHardwareFamilyFault"] = reflect.TypeOf((*OvfNoSupportedHardwareFamilyFault)(nil)).Elem()
    +}
    +
    +type OvfOptionInfo struct {
    +	DynamicData
    +
    +	Option      string             `xml:"option"`
    +	Description LocalizableMessage `xml:"description"`
    +}
    +
    +func init() {
    +	t["OvfOptionInfo"] = reflect.TypeOf((*OvfOptionInfo)(nil)).Elem()
    +}
    +
    +type OvfParseDescriptorParams struct {
    +	OvfManagerCommonParams
    +}
    +
    +func init() {
    +	t["OvfParseDescriptorParams"] = reflect.TypeOf((*OvfParseDescriptorParams)(nil)).Elem()
    +}
    +
    +type OvfParseDescriptorResult struct {
    +	DynamicData
    +
    +	Eula                            []string               `xml:"eula,omitempty"`
    +	Network                         []OvfNetworkInfo       `xml:"network,omitempty"`
    +	IpAllocationScheme              []string               `xml:"ipAllocationScheme,omitempty"`
    +	IpProtocols                     []string               `xml:"ipProtocols,omitempty"`
    +	Property                        []VAppPropertyInfo     `xml:"property,omitempty"`
    +	ProductInfo                     *VAppProductInfo       `xml:"productInfo,omitempty"`
    +	Annotation                      string                 `xml:"annotation"`
    +	ApproximateDownloadSize         int64                  `xml:"approximateDownloadSize,omitempty"`
    +	ApproximateFlatDeploymentSize   int64                  `xml:"approximateFlatDeploymentSize,omitempty"`
    +	ApproximateSparseDeploymentSize int64                  `xml:"approximateSparseDeploymentSize,omitempty"`
    +	DefaultEntityName               string                 `xml:"defaultEntityName"`
    +	VirtualApp                      bool                   `xml:"virtualApp"`
    +	DeploymentOption                []OvfDeploymentOption  `xml:"deploymentOption,omitempty"`
    +	DefaultDeploymentOption         string                 `xml:"defaultDeploymentOption"`
    +	EntityName                      []KeyValue             `xml:"entityName,omitempty"`
    +	AnnotatedOst                    *OvfConsumerOstNode    `xml:"annotatedOst,omitempty"`
    +	Error                           []LocalizedMethodFault `xml:"error,omitempty"`
    +	Warning                         []LocalizedMethodFault `xml:"warning,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfParseDescriptorResult"] = reflect.TypeOf((*OvfParseDescriptorResult)(nil)).Elem()
    +}
    +
    +type OvfProperty struct {
    +	OvfInvalidPackage
    +
    +	Type  string `xml:"type"`
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["OvfProperty"] = reflect.TypeOf((*OvfProperty)(nil)).Elem()
    +}
    +
    +type OvfPropertyExport struct {
    +	OvfExport
    +
    +	Type  string `xml:"type"`
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["OvfPropertyExport"] = reflect.TypeOf((*OvfPropertyExport)(nil)).Elem()
    +}
    +
    +type OvfPropertyExportFault OvfPropertyExport
    +
    +func init() {
    +	t["OvfPropertyExportFault"] = reflect.TypeOf((*OvfPropertyExportFault)(nil)).Elem()
    +}
    +
    +type OvfPropertyFault BaseOvfProperty
    +
    +func init() {
    +	t["OvfPropertyFault"] = reflect.TypeOf((*OvfPropertyFault)(nil)).Elem()
    +}
    +
    +type OvfPropertyNetwork struct {
    +	OvfProperty
    +}
    +
    +func init() {
    +	t["OvfPropertyNetwork"] = reflect.TypeOf((*OvfPropertyNetwork)(nil)).Elem()
    +}
    +
    +type OvfPropertyNetworkExport struct {
    +	OvfExport
    +
    +	Network string `xml:"network"`
    +}
    +
    +func init() {
    +	t["OvfPropertyNetworkExport"] = reflect.TypeOf((*OvfPropertyNetworkExport)(nil)).Elem()
    +}
    +
    +type OvfPropertyNetworkExportFault OvfPropertyNetworkExport
    +
    +func init() {
    +	t["OvfPropertyNetworkExportFault"] = reflect.TypeOf((*OvfPropertyNetworkExportFault)(nil)).Elem()
    +}
    +
    +type OvfPropertyNetworkFault OvfPropertyNetwork
    +
    +func init() {
    +	t["OvfPropertyNetworkFault"] = reflect.TypeOf((*OvfPropertyNetworkFault)(nil)).Elem()
    +}
    +
    +type OvfPropertyQualifier struct {
    +	OvfProperty
    +
    +	Qualifier string `xml:"qualifier"`
    +}
    +
    +func init() {
    +	t["OvfPropertyQualifier"] = reflect.TypeOf((*OvfPropertyQualifier)(nil)).Elem()
    +}
    +
    +type OvfPropertyQualifierDuplicate struct {
    +	OvfProperty
    +
    +	Qualifier string `xml:"qualifier"`
    +}
    +
    +func init() {
    +	t["OvfPropertyQualifierDuplicate"] = reflect.TypeOf((*OvfPropertyQualifierDuplicate)(nil)).Elem()
    +}
    +
    +type OvfPropertyQualifierDuplicateFault OvfPropertyQualifierDuplicate
    +
    +func init() {
    +	t["OvfPropertyQualifierDuplicateFault"] = reflect.TypeOf((*OvfPropertyQualifierDuplicateFault)(nil)).Elem()
    +}
    +
    +type OvfPropertyQualifierFault OvfPropertyQualifier
    +
    +func init() {
    +	t["OvfPropertyQualifierFault"] = reflect.TypeOf((*OvfPropertyQualifierFault)(nil)).Elem()
    +}
    +
    +type OvfPropertyQualifierIgnored struct {
    +	OvfProperty
    +
    +	Qualifier string `xml:"qualifier"`
    +}
    +
    +func init() {
    +	t["OvfPropertyQualifierIgnored"] = reflect.TypeOf((*OvfPropertyQualifierIgnored)(nil)).Elem()
    +}
    +
    +type OvfPropertyQualifierIgnoredFault OvfPropertyQualifierIgnored
    +
    +func init() {
    +	t["OvfPropertyQualifierIgnoredFault"] = reflect.TypeOf((*OvfPropertyQualifierIgnoredFault)(nil)).Elem()
    +}
    +
    +type OvfPropertyType struct {
    +	OvfProperty
    +}
    +
    +func init() {
    +	t["OvfPropertyType"] = reflect.TypeOf((*OvfPropertyType)(nil)).Elem()
    +}
    +
    +type OvfPropertyTypeFault OvfPropertyType
    +
    +func init() {
    +	t["OvfPropertyTypeFault"] = reflect.TypeOf((*OvfPropertyTypeFault)(nil)).Elem()
    +}
    +
    +type OvfPropertyValue struct {
    +	OvfProperty
    +}
    +
    +func init() {
    +	t["OvfPropertyValue"] = reflect.TypeOf((*OvfPropertyValue)(nil)).Elem()
    +}
    +
    +type OvfPropertyValueFault OvfPropertyValue
    +
    +func init() {
    +	t["OvfPropertyValueFault"] = reflect.TypeOf((*OvfPropertyValueFault)(nil)).Elem()
    +}
    +
    +type OvfResourceMap struct {
    +	DynamicData
    +
    +	Source       string                  `xml:"source"`
    +	Parent       *ManagedObjectReference `xml:"parent,omitempty"`
    +	ResourceSpec *ResourceConfigSpec     `xml:"resourceSpec,omitempty"`
    +	Datastore    *ManagedObjectReference `xml:"datastore,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfResourceMap"] = reflect.TypeOf((*OvfResourceMap)(nil)).Elem()
    +}
    +
    +type OvfSystemFault struct {
    +	OvfFault
    +}
    +
    +func init() {
    +	t["OvfSystemFault"] = reflect.TypeOf((*OvfSystemFault)(nil)).Elem()
    +}
    +
    +type OvfSystemFaultFault BaseOvfSystemFault
    +
    +func init() {
    +	t["OvfSystemFaultFault"] = reflect.TypeOf((*OvfSystemFaultFault)(nil)).Elem()
    +}
    +
    +type OvfToXmlUnsupportedElement struct {
    +	OvfSystemFault
    +
    +	Name string `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfToXmlUnsupportedElement"] = reflect.TypeOf((*OvfToXmlUnsupportedElement)(nil)).Elem()
    +}
    +
    +type OvfToXmlUnsupportedElementFault OvfToXmlUnsupportedElement
    +
    +func init() {
    +	t["OvfToXmlUnsupportedElementFault"] = reflect.TypeOf((*OvfToXmlUnsupportedElementFault)(nil)).Elem()
    +}
    +
    +type OvfUnableToExportDisk struct {
    +	OvfHardwareExport
    +
    +	DiskName string `xml:"diskName"`
    +}
    +
    +func init() {
    +	t["OvfUnableToExportDisk"] = reflect.TypeOf((*OvfUnableToExportDisk)(nil)).Elem()
    +}
    +
    +type OvfUnableToExportDiskFault OvfUnableToExportDisk
    +
    +func init() {
    +	t["OvfUnableToExportDiskFault"] = reflect.TypeOf((*OvfUnableToExportDiskFault)(nil)).Elem()
    +}
    +
    +type OvfUnexpectedElement struct {
    +	OvfElement
    +}
    +
    +func init() {
    +	t["OvfUnexpectedElement"] = reflect.TypeOf((*OvfUnexpectedElement)(nil)).Elem()
    +}
    +
    +type OvfUnexpectedElementFault OvfUnexpectedElement
    +
    +func init() {
    +	t["OvfUnexpectedElementFault"] = reflect.TypeOf((*OvfUnexpectedElementFault)(nil)).Elem()
    +}
    +
    +type OvfUnknownDevice struct {
    +	OvfSystemFault
    +
    +	Device BaseVirtualDevice `xml:"device,omitempty,typeattr"`
    +	VmName string            `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["OvfUnknownDevice"] = reflect.TypeOf((*OvfUnknownDevice)(nil)).Elem()
    +}
    +
    +type OvfUnknownDeviceBacking struct {
    +	OvfHardwareExport
    +
    +	Backing BaseVirtualDeviceBackingInfo `xml:"backing,typeattr"`
    +}
    +
    +func init() {
    +	t["OvfUnknownDeviceBacking"] = reflect.TypeOf((*OvfUnknownDeviceBacking)(nil)).Elem()
    +}
    +
    +type OvfUnknownDeviceBackingFault OvfUnknownDeviceBacking
    +
    +func init() {
    +	t["OvfUnknownDeviceBackingFault"] = reflect.TypeOf((*OvfUnknownDeviceBackingFault)(nil)).Elem()
    +}
    +
    +type OvfUnknownDeviceFault OvfUnknownDevice
    +
    +func init() {
    +	t["OvfUnknownDeviceFault"] = reflect.TypeOf((*OvfUnknownDeviceFault)(nil)).Elem()
    +}
    +
    +type OvfUnknownEntity struct {
    +	OvfSystemFault
    +
    +	LineNumber int32 `xml:"lineNumber"`
    +}
    +
    +func init() {
    +	t["OvfUnknownEntity"] = reflect.TypeOf((*OvfUnknownEntity)(nil)).Elem()
    +}
    +
    +type OvfUnknownEntityFault OvfUnknownEntity
    +
    +func init() {
    +	t["OvfUnknownEntityFault"] = reflect.TypeOf((*OvfUnknownEntityFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedAttribute struct {
    +	OvfUnsupportedPackage
    +
    +	ElementName   string `xml:"elementName"`
    +	AttributeName string `xml:"attributeName"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedAttribute"] = reflect.TypeOf((*OvfUnsupportedAttribute)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedAttributeFault BaseOvfUnsupportedAttribute
    +
    +func init() {
    +	t["OvfUnsupportedAttributeFault"] = reflect.TypeOf((*OvfUnsupportedAttributeFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedAttributeValue struct {
    +	OvfUnsupportedAttribute
    +
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedAttributeValue"] = reflect.TypeOf((*OvfUnsupportedAttributeValue)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedAttributeValueFault OvfUnsupportedAttributeValue
    +
    +func init() {
    +	t["OvfUnsupportedAttributeValueFault"] = reflect.TypeOf((*OvfUnsupportedAttributeValueFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedDeviceBackingInfo struct {
    +	OvfSystemFault
    +
    +	ElementName string `xml:"elementName,omitempty"`
    +	InstanceId  string `xml:"instanceId,omitempty"`
    +	DeviceName  string `xml:"deviceName"`
    +	BackingName string `xml:"backingName,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedDeviceBackingInfo"] = reflect.TypeOf((*OvfUnsupportedDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedDeviceBackingInfoFault OvfUnsupportedDeviceBackingInfo
    +
    +func init() {
    +	t["OvfUnsupportedDeviceBackingInfoFault"] = reflect.TypeOf((*OvfUnsupportedDeviceBackingInfoFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedDeviceBackingOption struct {
    +	OvfSystemFault
    +
    +	ElementName string `xml:"elementName,omitempty"`
    +	InstanceId  string `xml:"instanceId,omitempty"`
    +	DeviceName  string `xml:"deviceName"`
    +	BackingName string `xml:"backingName,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedDeviceBackingOption"] = reflect.TypeOf((*OvfUnsupportedDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedDeviceBackingOptionFault OvfUnsupportedDeviceBackingOption
    +
    +func init() {
    +	t["OvfUnsupportedDeviceBackingOptionFault"] = reflect.TypeOf((*OvfUnsupportedDeviceBackingOptionFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedDeviceExport struct {
    +	OvfHardwareExport
    +}
    +
    +func init() {
    +	t["OvfUnsupportedDeviceExport"] = reflect.TypeOf((*OvfUnsupportedDeviceExport)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedDeviceExportFault OvfUnsupportedDeviceExport
    +
    +func init() {
    +	t["OvfUnsupportedDeviceExportFault"] = reflect.TypeOf((*OvfUnsupportedDeviceExportFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedDiskProvisioning struct {
    +	OvfImport
    +
    +	DiskProvisioning          string `xml:"diskProvisioning"`
    +	SupportedDiskProvisioning string `xml:"supportedDiskProvisioning"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedDiskProvisioning"] = reflect.TypeOf((*OvfUnsupportedDiskProvisioning)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedDiskProvisioningFault OvfUnsupportedDiskProvisioning
    +
    +func init() {
    +	t["OvfUnsupportedDiskProvisioningFault"] = reflect.TypeOf((*OvfUnsupportedDiskProvisioningFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedElement struct {
    +	OvfUnsupportedPackage
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedElement"] = reflect.TypeOf((*OvfUnsupportedElement)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedElementFault BaseOvfUnsupportedElement
    +
    +func init() {
    +	t["OvfUnsupportedElementFault"] = reflect.TypeOf((*OvfUnsupportedElementFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedElementValue struct {
    +	OvfUnsupportedElement
    +
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedElementValue"] = reflect.TypeOf((*OvfUnsupportedElementValue)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedElementValueFault OvfUnsupportedElementValue
    +
    +func init() {
    +	t["OvfUnsupportedElementValueFault"] = reflect.TypeOf((*OvfUnsupportedElementValueFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedPackage struct {
    +	OvfFault
    +
    +	LineNumber int32 `xml:"lineNumber,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedPackage"] = reflect.TypeOf((*OvfUnsupportedPackage)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedPackageFault BaseOvfUnsupportedPackage
    +
    +func init() {
    +	t["OvfUnsupportedPackageFault"] = reflect.TypeOf((*OvfUnsupportedPackageFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedSection struct {
    +	OvfUnsupportedElement
    +
    +	Info string `xml:"info"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedSection"] = reflect.TypeOf((*OvfUnsupportedSection)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedSectionFault OvfUnsupportedSection
    +
    +func init() {
    +	t["OvfUnsupportedSectionFault"] = reflect.TypeOf((*OvfUnsupportedSectionFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedSubType struct {
    +	OvfUnsupportedPackage
    +
    +	ElementName   string `xml:"elementName"`
    +	InstanceId    string `xml:"instanceId"`
    +	DeviceType    int32  `xml:"deviceType"`
    +	DeviceSubType string `xml:"deviceSubType"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedSubType"] = reflect.TypeOf((*OvfUnsupportedSubType)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedSubTypeFault OvfUnsupportedSubType
    +
    +func init() {
    +	t["OvfUnsupportedSubTypeFault"] = reflect.TypeOf((*OvfUnsupportedSubTypeFault)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedType struct {
    +	OvfUnsupportedPackage
    +
    +	Name       string `xml:"name"`
    +	InstanceId string `xml:"instanceId"`
    +	DeviceType int32  `xml:"deviceType"`
    +}
    +
    +func init() {
    +	t["OvfUnsupportedType"] = reflect.TypeOf((*OvfUnsupportedType)(nil)).Elem()
    +}
    +
    +type OvfUnsupportedTypeFault OvfUnsupportedType
    +
    +func init() {
    +	t["OvfUnsupportedTypeFault"] = reflect.TypeOf((*OvfUnsupportedTypeFault)(nil)).Elem()
    +}
    +
    +type OvfValidateHostParams struct {
    +	OvfManagerCommonParams
    +}
    +
    +func init() {
    +	t["OvfValidateHostParams"] = reflect.TypeOf((*OvfValidateHostParams)(nil)).Elem()
    +}
    +
    +type OvfValidateHostResult struct {
    +	DynamicData
    +
    +	DownloadSize              int64                  `xml:"downloadSize,omitempty"`
    +	FlatDeploymentSize        int64                  `xml:"flatDeploymentSize,omitempty"`
    +	SparseDeploymentSize      int64                  `xml:"sparseDeploymentSize,omitempty"`
    +	Error                     []LocalizedMethodFault `xml:"error,omitempty"`
    +	Warning                   []LocalizedMethodFault `xml:"warning,omitempty"`
    +	SupportedDiskProvisioning []string               `xml:"supportedDiskProvisioning,omitempty"`
    +}
    +
    +func init() {
    +	t["OvfValidateHostResult"] = reflect.TypeOf((*OvfValidateHostResult)(nil)).Elem()
    +}
    +
    +type OvfWrongElement struct {
    +	OvfElement
    +}
    +
    +func init() {
    +	t["OvfWrongElement"] = reflect.TypeOf((*OvfWrongElement)(nil)).Elem()
    +}
    +
    +type OvfWrongElementFault OvfWrongElement
    +
    +func init() {
    +	t["OvfWrongElementFault"] = reflect.TypeOf((*OvfWrongElementFault)(nil)).Elem()
    +}
    +
    +type OvfWrongNamespace struct {
    +	OvfInvalidPackage
    +
    +	NamespaceName string `xml:"namespaceName"`
    +}
    +
    +func init() {
    +	t["OvfWrongNamespace"] = reflect.TypeOf((*OvfWrongNamespace)(nil)).Elem()
    +}
    +
    +type OvfWrongNamespaceFault OvfWrongNamespace
    +
    +func init() {
    +	t["OvfWrongNamespaceFault"] = reflect.TypeOf((*OvfWrongNamespaceFault)(nil)).Elem()
    +}
    +
    +type OvfXmlFormat struct {
    +	OvfInvalidPackage
    +
    +	Description string `xml:"description"`
    +}
    +
    +func init() {
    +	t["OvfXmlFormat"] = reflect.TypeOf((*OvfXmlFormat)(nil)).Elem()
    +}
    +
    +type OvfXmlFormatFault OvfXmlFormat
    +
    +func init() {
    +	t["OvfXmlFormatFault"] = reflect.TypeOf((*OvfXmlFormatFault)(nil)).Elem()
    +}
    +
    +type PMemDatastoreInfo struct {
    +	DatastoreInfo
    +
    +	Pmem HostPMemVolume `xml:"pmem"`
    +}
    +
    +func init() {
    +	t["PMemDatastoreInfo"] = reflect.TypeOf((*PMemDatastoreInfo)(nil)).Elem()
    +}
    +
    +type ParaVirtualSCSIController struct {
    +	VirtualSCSIController
    +}
    +
    +func init() {
    +	t["ParaVirtualSCSIController"] = reflect.TypeOf((*ParaVirtualSCSIController)(nil)).Elem()
    +}
    +
    +type ParaVirtualSCSIControllerOption struct {
    +	VirtualSCSIControllerOption
    +}
    +
    +func init() {
    +	t["ParaVirtualSCSIControllerOption"] = reflect.TypeOf((*ParaVirtualSCSIControllerOption)(nil)).Elem()
    +}
    +
    +type ParseDescriptor ParseDescriptorRequestType
    +
    +func init() {
    +	t["ParseDescriptor"] = reflect.TypeOf((*ParseDescriptor)(nil)).Elem()
    +}
    +
    +type ParseDescriptorRequestType struct {
    +	This          ManagedObjectReference   `xml:"_this"`
    +	OvfDescriptor string                   `xml:"ovfDescriptor"`
    +	Pdp           OvfParseDescriptorParams `xml:"pdp"`
    +}
    +
    +func init() {
    +	t["ParseDescriptorRequestType"] = reflect.TypeOf((*ParseDescriptorRequestType)(nil)).Elem()
    +}
    +
    +type ParseDescriptorResponse struct {
    +	Returnval OvfParseDescriptorResult `xml:"returnval"`
    +}
    +
    +type PassiveNodeDeploymentSpec struct {
    +	NodeDeploymentSpec
    +
    +	FailoverIpSettings *CustomizationIPSettings `xml:"failoverIpSettings,omitempty"`
    +}
    +
    +func init() {
    +	t["PassiveNodeDeploymentSpec"] = reflect.TypeOf((*PassiveNodeDeploymentSpec)(nil)).Elem()
    +}
    +
    +type PassiveNodeNetworkSpec struct {
    +	NodeNetworkSpec
    +
    +	FailoverIpSettings *CustomizationIPSettings `xml:"failoverIpSettings,omitempty"`
    +}
    +
    +func init() {
    +	t["PassiveNodeNetworkSpec"] = reflect.TypeOf((*PassiveNodeNetworkSpec)(nil)).Elem()
    +}
    +
    +type PasswordField struct {
    +	DynamicData
    +
    +	Value string `xml:"value"`
    +}
    +
    +func init() {
    +	t["PasswordField"] = reflect.TypeOf((*PasswordField)(nil)).Elem()
    +}
    +
    +type PatchAlreadyInstalled struct {
    +	PatchNotApplicable
    +}
    +
    +func init() {
    +	t["PatchAlreadyInstalled"] = reflect.TypeOf((*PatchAlreadyInstalled)(nil)).Elem()
    +}
    +
    +type PatchAlreadyInstalledFault PatchAlreadyInstalled
    +
    +func init() {
    +	t["PatchAlreadyInstalledFault"] = reflect.TypeOf((*PatchAlreadyInstalledFault)(nil)).Elem()
    +}
    +
    +type PatchBinariesNotFound struct {
    +	VimFault
    +
    +	PatchID string   `xml:"patchID"`
    +	Binary  []string `xml:"binary,omitempty"`
    +}
    +
    +func init() {
    +	t["PatchBinariesNotFound"] = reflect.TypeOf((*PatchBinariesNotFound)(nil)).Elem()
    +}
    +
    +type PatchBinariesNotFoundFault PatchBinariesNotFound
    +
    +func init() {
    +	t["PatchBinariesNotFoundFault"] = reflect.TypeOf((*PatchBinariesNotFoundFault)(nil)).Elem()
    +}
    +
    +type PatchInstallFailed struct {
    +	PlatformConfigFault
    +
    +	RolledBack bool `xml:"rolledBack"`
    +}
    +
    +func init() {
    +	t["PatchInstallFailed"] = reflect.TypeOf((*PatchInstallFailed)(nil)).Elem()
    +}
    +
    +type PatchInstallFailedFault PatchInstallFailed
    +
    +func init() {
    +	t["PatchInstallFailedFault"] = reflect.TypeOf((*PatchInstallFailedFault)(nil)).Elem()
    +}
    +
    +type PatchIntegrityError struct {
    +	PlatformConfigFault
    +}
    +
    +func init() {
    +	t["PatchIntegrityError"] = reflect.TypeOf((*PatchIntegrityError)(nil)).Elem()
    +}
    +
    +type PatchIntegrityErrorFault PatchIntegrityError
    +
    +func init() {
    +	t["PatchIntegrityErrorFault"] = reflect.TypeOf((*PatchIntegrityErrorFault)(nil)).Elem()
    +}
    +
    +type PatchMetadataCorrupted struct {
    +	PatchMetadataInvalid
    +}
    +
    +func init() {
    +	t["PatchMetadataCorrupted"] = reflect.TypeOf((*PatchMetadataCorrupted)(nil)).Elem()
    +}
    +
    +type PatchMetadataCorruptedFault PatchMetadataCorrupted
    +
    +func init() {
    +	t["PatchMetadataCorruptedFault"] = reflect.TypeOf((*PatchMetadataCorruptedFault)(nil)).Elem()
    +}
    +
    +type PatchMetadataInvalid struct {
    +	VimFault
    +
    +	PatchID  string   `xml:"patchID"`
    +	MetaData []string `xml:"metaData,omitempty"`
    +}
    +
    +func init() {
    +	t["PatchMetadataInvalid"] = reflect.TypeOf((*PatchMetadataInvalid)(nil)).Elem()
    +}
    +
    +type PatchMetadataInvalidFault BasePatchMetadataInvalid
    +
    +func init() {
    +	t["PatchMetadataInvalidFault"] = reflect.TypeOf((*PatchMetadataInvalidFault)(nil)).Elem()
    +}
    +
    +type PatchMetadataNotFound struct {
    +	PatchMetadataInvalid
    +}
    +
    +func init() {
    +	t["PatchMetadataNotFound"] = reflect.TypeOf((*PatchMetadataNotFound)(nil)).Elem()
    +}
    +
    +type PatchMetadataNotFoundFault PatchMetadataNotFound
    +
    +func init() {
    +	t["PatchMetadataNotFoundFault"] = reflect.TypeOf((*PatchMetadataNotFoundFault)(nil)).Elem()
    +}
    +
    +type PatchMissingDependencies struct {
    +	PatchNotApplicable
    +
    +	PrerequisitePatch []string `xml:"prerequisitePatch,omitempty"`
    +	PrerequisiteLib   []string `xml:"prerequisiteLib,omitempty"`
    +}
    +
    +func init() {
    +	t["PatchMissingDependencies"] = reflect.TypeOf((*PatchMissingDependencies)(nil)).Elem()
    +}
    +
    +type PatchMissingDependenciesFault PatchMissingDependencies
    +
    +func init() {
    +	t["PatchMissingDependenciesFault"] = reflect.TypeOf((*PatchMissingDependenciesFault)(nil)).Elem()
    +}
    +
    +type PatchNotApplicable struct {
    +	VimFault
    +
    +	PatchID string `xml:"patchID"`
    +}
    +
    +func init() {
    +	t["PatchNotApplicable"] = reflect.TypeOf((*PatchNotApplicable)(nil)).Elem()
    +}
    +
    +type PatchNotApplicableFault BasePatchNotApplicable
    +
    +func init() {
    +	t["PatchNotApplicableFault"] = reflect.TypeOf((*PatchNotApplicableFault)(nil)).Elem()
    +}
    +
    +type PatchSuperseded struct {
    +	PatchNotApplicable
    +
    +	Supersede []string `xml:"supersede,omitempty"`
    +}
    +
    +func init() {
    +	t["PatchSuperseded"] = reflect.TypeOf((*PatchSuperseded)(nil)).Elem()
    +}
    +
    +type PatchSupersededFault PatchSuperseded
    +
    +func init() {
    +	t["PatchSupersededFault"] = reflect.TypeOf((*PatchSupersededFault)(nil)).Elem()
    +}
    +
    +type PerfCompositeMetric struct {
    +	DynamicData
    +
    +	Entity      BasePerfEntityMetricBase   `xml:"entity,omitempty,typeattr"`
    +	ChildEntity []BasePerfEntityMetricBase `xml:"childEntity,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["PerfCompositeMetric"] = reflect.TypeOf((*PerfCompositeMetric)(nil)).Elem()
    +}
    +
    +type PerfCounterInfo struct {
    +	DynamicData
    +
    +	Key                 int32                  `xml:"key"`
    +	NameInfo            BaseElementDescription `xml:"nameInfo,typeattr"`
    +	GroupInfo           BaseElementDescription `xml:"groupInfo,typeattr"`
    +	UnitInfo            BaseElementDescription `xml:"unitInfo,typeattr"`
    +	RollupType          PerfSummaryType        `xml:"rollupType"`
    +	StatsType           PerfStatsType          `xml:"statsType"`
    +	Level               int32                  `xml:"level,omitempty"`
    +	PerDeviceLevel      int32                  `xml:"perDeviceLevel,omitempty"`
    +	AssociatedCounterId []int32                `xml:"associatedCounterId,omitempty"`
    +}
    +
    +func init() {
    +	t["PerfCounterInfo"] = reflect.TypeOf((*PerfCounterInfo)(nil)).Elem()
    +}
    +
    +type PerfEntityMetric struct {
    +	PerfEntityMetricBase
    +
    +	SampleInfo []PerfSampleInfo       `xml:"sampleInfo,omitempty"`
    +	Value      []BasePerfMetricSeries `xml:"value,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["PerfEntityMetric"] = reflect.TypeOf((*PerfEntityMetric)(nil)).Elem()
    +}
    +
    +type PerfEntityMetricBase struct {
    +	DynamicData
    +
    +	Entity ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["PerfEntityMetricBase"] = reflect.TypeOf((*PerfEntityMetricBase)(nil)).Elem()
    +}
    +
    +type PerfEntityMetricCSV struct {
    +	PerfEntityMetricBase
    +
    +	SampleInfoCSV string                `xml:"sampleInfoCSV"`
    +	Value         []PerfMetricSeriesCSV `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["PerfEntityMetricCSV"] = reflect.TypeOf((*PerfEntityMetricCSV)(nil)).Elem()
    +}
    +
    +type PerfInterval struct {
    +	DynamicData
    +
    +	Key            int32  `xml:"key"`
    +	SamplingPeriod int32  `xml:"samplingPeriod"`
    +	Name           string `xml:"name"`
    +	Length         int32  `xml:"length"`
    +	Level          int32  `xml:"level,omitempty"`
    +	Enabled        bool   `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["PerfInterval"] = reflect.TypeOf((*PerfInterval)(nil)).Elem()
    +}
    +
    +type PerfMetricId struct {
    +	DynamicData
    +
    +	CounterId int32  `xml:"counterId"`
    +	Instance  string `xml:"instance"`
    +}
    +
    +func init() {
    +	t["PerfMetricId"] = reflect.TypeOf((*PerfMetricId)(nil)).Elem()
    +}
    +
    +type PerfMetricIntSeries struct {
    +	PerfMetricSeries
    +
    +	Value []int64 `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["PerfMetricIntSeries"] = reflect.TypeOf((*PerfMetricIntSeries)(nil)).Elem()
    +}
    +
    +type PerfMetricSeries struct {
    +	DynamicData
    +
    +	Id PerfMetricId `xml:"id"`
    +}
    +
    +func init() {
    +	t["PerfMetricSeries"] = reflect.TypeOf((*PerfMetricSeries)(nil)).Elem()
    +}
    +
    +type PerfMetricSeriesCSV struct {
    +	PerfMetricSeries
    +
    +	Value string `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["PerfMetricSeriesCSV"] = reflect.TypeOf((*PerfMetricSeriesCSV)(nil)).Elem()
    +}
    +
    +type PerfProviderSummary struct {
    +	DynamicData
    +
    +	Entity           ManagedObjectReference `xml:"entity"`
    +	CurrentSupported bool                   `xml:"currentSupported"`
    +	SummarySupported bool                   `xml:"summarySupported"`
    +	RefreshRate      int32                  `xml:"refreshRate,omitempty"`
    +}
    +
    +func init() {
    +	t["PerfProviderSummary"] = reflect.TypeOf((*PerfProviderSummary)(nil)).Elem()
    +}
    +
    +type PerfQuerySpec struct {
    +	DynamicData
    +
    +	Entity     ManagedObjectReference `xml:"entity"`
    +	StartTime  *time.Time             `xml:"startTime"`
    +	EndTime    *time.Time             `xml:"endTime"`
    +	MaxSample  int32                  `xml:"maxSample,omitempty"`
    +	MetricId   []PerfMetricId         `xml:"metricId,omitempty"`
    +	IntervalId int32                  `xml:"intervalId,omitempty"`
    +	Format     string                 `xml:"format,omitempty"`
    +}
    +
    +func init() {
    +	t["PerfQuerySpec"] = reflect.TypeOf((*PerfQuerySpec)(nil)).Elem()
    +}
    +
    +type PerfSampleInfo struct {
    +	DynamicData
    +
    +	Timestamp time.Time `xml:"timestamp"`
    +	Interval  int32     `xml:"interval"`
    +}
    +
    +func init() {
    +	t["PerfSampleInfo"] = reflect.TypeOf((*PerfSampleInfo)(nil)).Elem()
    +}
    +
    +type PerformDvsProductSpecOperationRequestType struct {
    +	This        ManagedObjectReference               `xml:"_this"`
    +	Operation   string                               `xml:"operation"`
    +	ProductSpec *DistributedVirtualSwitchProductSpec `xml:"productSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["PerformDvsProductSpecOperationRequestType"] = reflect.TypeOf((*PerformDvsProductSpecOperationRequestType)(nil)).Elem()
    +}
    +
    +type PerformDvsProductSpecOperation_Task PerformDvsProductSpecOperationRequestType
    +
    +func init() {
    +	t["PerformDvsProductSpecOperation_Task"] = reflect.TypeOf((*PerformDvsProductSpecOperation_Task)(nil)).Elem()
    +}
    +
    +type PerformDvsProductSpecOperation_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PerformVsanUpgradePreflightCheck PerformVsanUpgradePreflightCheckRequestType
    +
    +func init() {
    +	t["PerformVsanUpgradePreflightCheck"] = reflect.TypeOf((*PerformVsanUpgradePreflightCheck)(nil)).Elem()
    +}
    +
    +type PerformVsanUpgradePreflightCheckRequestType struct {
    +	This            ManagedObjectReference `xml:"_this"`
    +	Cluster         ManagedObjectReference `xml:"cluster"`
    +	DowngradeFormat *bool                  `xml:"downgradeFormat"`
    +}
    +
    +func init() {
    +	t["PerformVsanUpgradePreflightCheckRequestType"] = reflect.TypeOf((*PerformVsanUpgradePreflightCheckRequestType)(nil)).Elem()
    +}
    +
    +type PerformVsanUpgradePreflightCheckResponse struct {
    +	Returnval VsanUpgradeSystemPreflightCheckResult `xml:"returnval"`
    +}
    +
    +type PerformVsanUpgradeRequestType struct {
    +	This                   ManagedObjectReference   `xml:"_this"`
    +	Cluster                ManagedObjectReference   `xml:"cluster"`
    +	PerformObjectUpgrade   *bool                    `xml:"performObjectUpgrade"`
    +	DowngradeFormat        *bool                    `xml:"downgradeFormat"`
    +	AllowReducedRedundancy *bool                    `xml:"allowReducedRedundancy"`
    +	ExcludeHosts           []ManagedObjectReference `xml:"excludeHosts,omitempty"`
    +}
    +
    +func init() {
    +	t["PerformVsanUpgradeRequestType"] = reflect.TypeOf((*PerformVsanUpgradeRequestType)(nil)).Elem()
    +}
    +
    +type PerformVsanUpgrade_Task PerformVsanUpgradeRequestType
    +
    +func init() {
    +	t["PerformVsanUpgrade_Task"] = reflect.TypeOf((*PerformVsanUpgrade_Task)(nil)).Elem()
    +}
    +
    +type PerformVsanUpgrade_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PerformanceDescription struct {
    +	DynamicData
    +
    +	CounterType []BaseElementDescription `xml:"counterType,typeattr"`
    +	StatsType   []BaseElementDescription `xml:"statsType,typeattr"`
    +}
    +
    +func init() {
    +	t["PerformanceDescription"] = reflect.TypeOf((*PerformanceDescription)(nil)).Elem()
    +}
    +
    +type PerformanceManagerCounterLevelMapping struct {
    +	DynamicData
    +
    +	CounterId      int32 `xml:"counterId"`
    +	AggregateLevel int32 `xml:"aggregateLevel,omitempty"`
    +	PerDeviceLevel int32 `xml:"perDeviceLevel,omitempty"`
    +}
    +
    +func init() {
    +	t["PerformanceManagerCounterLevelMapping"] = reflect.TypeOf((*PerformanceManagerCounterLevelMapping)(nil)).Elem()
    +}
    +
    +type PerformanceStatisticsDescription struct {
    +	DynamicData
    +
    +	Intervals []PerfInterval `xml:"intervals,omitempty"`
    +}
    +
    +func init() {
    +	t["PerformanceStatisticsDescription"] = reflect.TypeOf((*PerformanceStatisticsDescription)(nil)).Elem()
    +}
    +
    +type Permission struct {
    +	DynamicData
    +
    +	Entity    *ManagedObjectReference `xml:"entity,omitempty"`
    +	Principal string                  `xml:"principal"`
    +	Group     bool                    `xml:"group"`
    +	RoleId    int32                   `xml:"roleId"`
    +	Propagate bool                    `xml:"propagate"`
    +}
    +
    +func init() {
    +	t["Permission"] = reflect.TypeOf((*Permission)(nil)).Elem()
    +}
    +
    +type PermissionAddedEvent struct {
    +	PermissionEvent
    +
    +	Role      RoleEventArgument `xml:"role"`
    +	Propagate bool              `xml:"propagate"`
    +}
    +
    +func init() {
    +	t["PermissionAddedEvent"] = reflect.TypeOf((*PermissionAddedEvent)(nil)).Elem()
    +}
    +
    +type PermissionEvent struct {
    +	AuthorizationEvent
    +
    +	Entity    ManagedEntityEventArgument `xml:"entity"`
    +	Principal string                     `xml:"principal"`
    +	Group     bool                       `xml:"group"`
    +}
    +
    +func init() {
    +	t["PermissionEvent"] = reflect.TypeOf((*PermissionEvent)(nil)).Elem()
    +}
    +
    +type PermissionProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["PermissionProfile"] = reflect.TypeOf((*PermissionProfile)(nil)).Elem()
    +}
    +
    +type PermissionRemovedEvent struct {
    +	PermissionEvent
    +}
    +
    +func init() {
    +	t["PermissionRemovedEvent"] = reflect.TypeOf((*PermissionRemovedEvent)(nil)).Elem()
    +}
    +
    +type PermissionUpdatedEvent struct {
    +	PermissionEvent
    +
    +	Role          RoleEventArgument  `xml:"role"`
    +	Propagate     bool               `xml:"propagate"`
    +	PrevRole      *RoleEventArgument `xml:"prevRole,omitempty"`
    +	PrevPropagate *bool              `xml:"prevPropagate"`
    +}
    +
    +func init() {
    +	t["PermissionUpdatedEvent"] = reflect.TypeOf((*PermissionUpdatedEvent)(nil)).Elem()
    +}
    +
    +type PhysCompatRDMNotSupported struct {
    +	RDMNotSupported
    +}
    +
    +func init() {
    +	t["PhysCompatRDMNotSupported"] = reflect.TypeOf((*PhysCompatRDMNotSupported)(nil)).Elem()
    +}
    +
    +type PhysCompatRDMNotSupportedFault PhysCompatRDMNotSupported
    +
    +func init() {
    +	t["PhysCompatRDMNotSupportedFault"] = reflect.TypeOf((*PhysCompatRDMNotSupportedFault)(nil)).Elem()
    +}
    +
    +type PhysicalNic struct {
    +	DynamicData
    +
    +	Key                                   string                `xml:"key,omitempty"`
    +	Device                                string                `xml:"device"`
    +	Pci                                   string                `xml:"pci"`
    +	Driver                                string                `xml:"driver,omitempty"`
    +	LinkSpeed                             *PhysicalNicLinkInfo  `xml:"linkSpeed,omitempty"`
    +	ValidLinkSpecification                []PhysicalNicLinkInfo `xml:"validLinkSpecification,omitempty"`
    +	Spec                                  PhysicalNicSpec       `xml:"spec"`
    +	WakeOnLanSupported                    bool                  `xml:"wakeOnLanSupported"`
    +	Mac                                   string                `xml:"mac"`
    +	FcoeConfiguration                     *FcoeConfig           `xml:"fcoeConfiguration,omitempty"`
    +	VmDirectPathGen2Supported             *bool                 `xml:"vmDirectPathGen2Supported"`
    +	VmDirectPathGen2SupportedMode         string                `xml:"vmDirectPathGen2SupportedMode,omitempty"`
    +	ResourcePoolSchedulerAllowed          *bool                 `xml:"resourcePoolSchedulerAllowed"`
    +	ResourcePoolSchedulerDisallowedReason []string              `xml:"resourcePoolSchedulerDisallowedReason,omitempty"`
    +	AutoNegotiateSupported                *bool                 `xml:"autoNegotiateSupported"`
    +	EnhancedNetworkingStackSupported      *bool                 `xml:"enhancedNetworkingStackSupported"`
    +}
    +
    +func init() {
    +	t["PhysicalNic"] = reflect.TypeOf((*PhysicalNic)(nil)).Elem()
    +}
    +
    +type PhysicalNicCdpDeviceCapability struct {
    +	DynamicData
    +
    +	Router            bool `xml:"router"`
    +	TransparentBridge bool `xml:"transparentBridge"`
    +	SourceRouteBridge bool `xml:"sourceRouteBridge"`
    +	NetworkSwitch     bool `xml:"networkSwitch"`
    +	Host              bool `xml:"host"`
    +	IgmpEnabled       bool `xml:"igmpEnabled"`
    +	Repeater          bool `xml:"repeater"`
    +}
    +
    +func init() {
    +	t["PhysicalNicCdpDeviceCapability"] = reflect.TypeOf((*PhysicalNicCdpDeviceCapability)(nil)).Elem()
    +}
    +
    +type PhysicalNicCdpInfo struct {
    +	DynamicData
    +
    +	CdpVersion       int32                           `xml:"cdpVersion,omitempty"`
    +	Timeout          int32                           `xml:"timeout,omitempty"`
    +	Ttl              int32                           `xml:"ttl,omitempty"`
    +	Samples          int32                           `xml:"samples,omitempty"`
    +	DevId            string                          `xml:"devId,omitempty"`
    +	Address          string                          `xml:"address,omitempty"`
    +	PortId           string                          `xml:"portId,omitempty"`
    +	DeviceCapability *PhysicalNicCdpDeviceCapability `xml:"deviceCapability,omitempty"`
    +	SoftwareVersion  string                          `xml:"softwareVersion,omitempty"`
    +	HardwarePlatform string                          `xml:"hardwarePlatform,omitempty"`
    +	IpPrefix         string                          `xml:"ipPrefix,omitempty"`
    +	IpPrefixLen      int32                           `xml:"ipPrefixLen,omitempty"`
    +	Vlan             int32                           `xml:"vlan,omitempty"`
    +	FullDuplex       *bool                           `xml:"fullDuplex"`
    +	Mtu              int32                           `xml:"mtu,omitempty"`
    +	SystemName       string                          `xml:"systemName,omitempty"`
    +	SystemOID        string                          `xml:"systemOID,omitempty"`
    +	MgmtAddr         string                          `xml:"mgmtAddr,omitempty"`
    +	Location         string                          `xml:"location,omitempty"`
    +}
    +
    +func init() {
    +	t["PhysicalNicCdpInfo"] = reflect.TypeOf((*PhysicalNicCdpInfo)(nil)).Elem()
    +}
    +
    +type PhysicalNicConfig struct {
    +	DynamicData
    +
    +	Device string          `xml:"device"`
    +	Spec   PhysicalNicSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["PhysicalNicConfig"] = reflect.TypeOf((*PhysicalNicConfig)(nil)).Elem()
    +}
    +
    +type PhysicalNicHint struct {
    +	DynamicData
    +
    +	VlanId int32 `xml:"vlanId,omitempty"`
    +}
    +
    +func init() {
    +	t["PhysicalNicHint"] = reflect.TypeOf((*PhysicalNicHint)(nil)).Elem()
    +}
    +
    +type PhysicalNicHintInfo struct {
    +	DynamicData
    +
    +	Device              string                          `xml:"device"`
    +	Subnet              []PhysicalNicIpHint             `xml:"subnet,omitempty"`
    +	Network             []PhysicalNicNameHint           `xml:"network,omitempty"`
    +	ConnectedSwitchPort *PhysicalNicCdpInfo             `xml:"connectedSwitchPort,omitempty"`
    +	LldpInfo            *LinkLayerDiscoveryProtocolInfo `xml:"lldpInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["PhysicalNicHintInfo"] = reflect.TypeOf((*PhysicalNicHintInfo)(nil)).Elem()
    +}
    +
    +type PhysicalNicIpHint struct {
    +	PhysicalNicHint
    +
    +	IpSubnet string `xml:"ipSubnet"`
    +}
    +
    +func init() {
    +	t["PhysicalNicIpHint"] = reflect.TypeOf((*PhysicalNicIpHint)(nil)).Elem()
    +}
    +
    +type PhysicalNicLinkInfo struct {
    +	DynamicData
    +
    +	SpeedMb int32 `xml:"speedMb"`
    +	Duplex  bool  `xml:"duplex"`
    +}
    +
    +func init() {
    +	t["PhysicalNicLinkInfo"] = reflect.TypeOf((*PhysicalNicLinkInfo)(nil)).Elem()
    +}
    +
    +type PhysicalNicNameHint struct {
    +	PhysicalNicHint
    +
    +	Network string `xml:"network"`
    +}
    +
    +func init() {
    +	t["PhysicalNicNameHint"] = reflect.TypeOf((*PhysicalNicNameHint)(nil)).Elem()
    +}
    +
    +type PhysicalNicProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["PhysicalNicProfile"] = reflect.TypeOf((*PhysicalNicProfile)(nil)).Elem()
    +}
    +
    +type PhysicalNicSpec struct {
    +	DynamicData
    +
    +	Ip                            *HostIpConfig        `xml:"ip,omitempty"`
    +	LinkSpeed                     *PhysicalNicLinkInfo `xml:"linkSpeed,omitempty"`
    +	EnableEnhancedNetworkingStack *bool                `xml:"enableEnhancedNetworkingStack"`
    +}
    +
    +func init() {
    +	t["PhysicalNicSpec"] = reflect.TypeOf((*PhysicalNicSpec)(nil)).Elem()
    +}
    +
    +type PlaceVm PlaceVmRequestType
    +
    +func init() {
    +	t["PlaceVm"] = reflect.TypeOf((*PlaceVm)(nil)).Elem()
    +}
    +
    +type PlaceVmRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	PlacementSpec PlacementSpec          `xml:"placementSpec"`
    +}
    +
    +func init() {
    +	t["PlaceVmRequestType"] = reflect.TypeOf((*PlaceVmRequestType)(nil)).Elem()
    +}
    +
    +type PlaceVmResponse struct {
    +	Returnval PlacementResult `xml:"returnval"`
    +}
    +
    +type PlacementAction struct {
    +	ClusterAction
    +
    +	Vm           *ManagedObjectReference     `xml:"vm,omitempty"`
    +	TargetHost   *ManagedObjectReference     `xml:"targetHost,omitempty"`
    +	RelocateSpec *VirtualMachineRelocateSpec `xml:"relocateSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["PlacementAction"] = reflect.TypeOf((*PlacementAction)(nil)).Elem()
    +}
    +
    +type PlacementAffinityRule struct {
    +	DynamicData
    +
    +	RuleType  string                   `xml:"ruleType"`
    +	RuleScope string                   `xml:"ruleScope"`
    +	Vms       []ManagedObjectReference `xml:"vms,omitempty"`
    +	Keys      []string                 `xml:"keys,omitempty"`
    +}
    +
    +func init() {
    +	t["PlacementAffinityRule"] = reflect.TypeOf((*PlacementAffinityRule)(nil)).Elem()
    +}
    +
    +type PlacementRankResult struct {
    +	DynamicData
    +
    +	Key             string                 `xml:"key"`
    +	Candidate       ManagedObjectReference `xml:"candidate"`
    +	ReservedSpaceMB int64                  `xml:"reservedSpaceMB"`
    +	UsedSpaceMB     int64                  `xml:"usedSpaceMB"`
    +	TotalSpaceMB    int64                  `xml:"totalSpaceMB"`
    +	Utilization     float64                `xml:"utilization"`
    +	Faults          []LocalizedMethodFault `xml:"faults,omitempty"`
    +}
    +
    +func init() {
    +	t["PlacementRankResult"] = reflect.TypeOf((*PlacementRankResult)(nil)).Elem()
    +}
    +
    +type PlacementRankSpec struct {
    +	DynamicData
    +
    +	Specs             []PlacementSpec                 `xml:"specs"`
    +	Clusters          []ManagedObjectReference        `xml:"clusters"`
    +	Rules             []PlacementAffinityRule         `xml:"rules,omitempty"`
    +	PlacementRankByVm []StorageDrsPlacementRankVmSpec `xml:"placementRankByVm,omitempty"`
    +}
    +
    +func init() {
    +	t["PlacementRankSpec"] = reflect.TypeOf((*PlacementRankSpec)(nil)).Elem()
    +}
    +
    +type PlacementResult struct {
    +	DynamicData
    +
    +	Recommendations []ClusterRecommendation `xml:"recommendations,omitempty"`
    +	DrsFault        *ClusterDrsFaults       `xml:"drsFault,omitempty"`
    +}
    +
    +func init() {
    +	t["PlacementResult"] = reflect.TypeOf((*PlacementResult)(nil)).Elem()
    +}
    +
    +type PlacementSpec struct {
    +	DynamicData
    +
    +	Priority                  VirtualMachineMovePriority  `xml:"priority,omitempty"`
    +	Vm                        *ManagedObjectReference     `xml:"vm,omitempty"`
    +	ConfigSpec                *VirtualMachineConfigSpec   `xml:"configSpec,omitempty"`
    +	RelocateSpec              *VirtualMachineRelocateSpec `xml:"relocateSpec,omitempty"`
    +	Hosts                     []ManagedObjectReference    `xml:"hosts,omitempty"`
    +	Datastores                []ManagedObjectReference    `xml:"datastores,omitempty"`
    +	StoragePods               []ManagedObjectReference    `xml:"storagePods,omitempty"`
    +	DisallowPrerequisiteMoves *bool                       `xml:"disallowPrerequisiteMoves"`
    +	Rules                     []BaseClusterRuleInfo       `xml:"rules,omitempty,typeattr"`
    +	Key                       string                      `xml:"key,omitempty"`
    +	PlacementType             string                      `xml:"placementType,omitempty"`
    +	CloneSpec                 *VirtualMachineCloneSpec    `xml:"cloneSpec,omitempty"`
    +	CloneName                 string                      `xml:"cloneName,omitempty"`
    +}
    +
    +func init() {
    +	t["PlacementSpec"] = reflect.TypeOf((*PlacementSpec)(nil)).Elem()
    +}
    +
    +type PlatformConfigFault struct {
    +	HostConfigFault
    +
    +	Text string `xml:"text"`
    +}
    +
    +func init() {
    +	t["PlatformConfigFault"] = reflect.TypeOf((*PlatformConfigFault)(nil)).Elem()
    +}
    +
    +type PlatformConfigFaultFault BasePlatformConfigFault
    +
    +func init() {
    +	t["PlatformConfigFaultFault"] = reflect.TypeOf((*PlatformConfigFaultFault)(nil)).Elem()
    +}
    +
    +type PnicUplinkProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["PnicUplinkProfile"] = reflect.TypeOf((*PnicUplinkProfile)(nil)).Elem()
    +}
    +
    +type PodDiskLocator struct {
    +	DynamicData
    +
    +	DiskId          int32                           `xml:"diskId"`
    +	DiskMoveType    string                          `xml:"diskMoveType,omitempty"`
    +	DiskBackingInfo BaseVirtualDeviceBackingInfo    `xml:"diskBackingInfo,omitempty,typeattr"`
    +	Profile         []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["PodDiskLocator"] = reflect.TypeOf((*PodDiskLocator)(nil)).Elem()
    +}
    +
    +type PodStorageDrsEntry struct {
    +	DynamicData
    +
    +	StorageDrsConfig StorageDrsConfigInfo    `xml:"storageDrsConfig"`
    +	Recommendation   []ClusterRecommendation `xml:"recommendation,omitempty"`
    +	DrsFault         []ClusterDrsFaults      `xml:"drsFault,omitempty"`
    +	ActionHistory    []ClusterActionHistory  `xml:"actionHistory,omitempty"`
    +}
    +
    +func init() {
    +	t["PodStorageDrsEntry"] = reflect.TypeOf((*PodStorageDrsEntry)(nil)).Elem()
    +}
    +
    +type PolicyOption struct {
    +	DynamicData
    +
    +	Id        string        `xml:"id"`
    +	Parameter []KeyAnyValue `xml:"parameter,omitempty"`
    +}
    +
    +func init() {
    +	t["PolicyOption"] = reflect.TypeOf((*PolicyOption)(nil)).Elem()
    +}
    +
    +type PortGroupProfile struct {
    +	ApplyProfile
    +
    +	Key           string                        `xml:"key"`
    +	Name          string                        `xml:"name"`
    +	Vlan          VlanProfile                   `xml:"vlan"`
    +	Vswitch       VirtualSwitchSelectionProfile `xml:"vswitch"`
    +	NetworkPolicy NetworkPolicyProfile          `xml:"networkPolicy"`
    +}
    +
    +func init() {
    +	t["PortGroupProfile"] = reflect.TypeOf((*PortGroupProfile)(nil)).Elem()
    +}
    +
    +type PosixUserSearchResult struct {
    +	UserSearchResult
    +
    +	Id          int32 `xml:"id"`
    +	ShellAccess *bool `xml:"shellAccess"`
    +}
    +
    +func init() {
    +	t["PosixUserSearchResult"] = reflect.TypeOf((*PosixUserSearchResult)(nil)).Elem()
    +}
    +
    +type PostEvent PostEventRequestType
    +
    +func init() {
    +	t["PostEvent"] = reflect.TypeOf((*PostEvent)(nil)).Elem()
    +}
    +
    +type PostEventRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	EventToPost BaseEvent              `xml:"eventToPost,typeattr"`
    +	TaskInfo    *TaskInfo              `xml:"taskInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["PostEventRequestType"] = reflect.TypeOf((*PostEventRequestType)(nil)).Elem()
    +}
    +
    +type PostEventResponse struct {
    +}
    +
    +type PostHealthUpdates PostHealthUpdatesRequestType
    +
    +func init() {
    +	t["PostHealthUpdates"] = reflect.TypeOf((*PostHealthUpdates)(nil)).Elem()
    +}
    +
    +type PostHealthUpdatesRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +	Updates    []HealthUpdate         `xml:"updates,omitempty"`
    +}
    +
    +func init() {
    +	t["PostHealthUpdatesRequestType"] = reflect.TypeOf((*PostHealthUpdatesRequestType)(nil)).Elem()
    +}
    +
    +type PostHealthUpdatesResponse struct {
    +}
    +
    +type PowerDownHostToStandByRequestType struct {
    +	This                  ManagedObjectReference `xml:"_this"`
    +	TimeoutSec            int32                  `xml:"timeoutSec"`
    +	EvacuatePoweredOffVms *bool                  `xml:"evacuatePoweredOffVms"`
    +}
    +
    +func init() {
    +	t["PowerDownHostToStandByRequestType"] = reflect.TypeOf((*PowerDownHostToStandByRequestType)(nil)).Elem()
    +}
    +
    +type PowerDownHostToStandBy_Task PowerDownHostToStandByRequestType
    +
    +func init() {
    +	t["PowerDownHostToStandBy_Task"] = reflect.TypeOf((*PowerDownHostToStandBy_Task)(nil)).Elem()
    +}
    +
    +type PowerDownHostToStandBy_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PowerOffVAppRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Force bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["PowerOffVAppRequestType"] = reflect.TypeOf((*PowerOffVAppRequestType)(nil)).Elem()
    +}
    +
    +type PowerOffVApp_Task PowerOffVAppRequestType
    +
    +func init() {
    +	t["PowerOffVApp_Task"] = reflect.TypeOf((*PowerOffVApp_Task)(nil)).Elem()
    +}
    +
    +type PowerOffVApp_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PowerOffVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["PowerOffVMRequestType"] = reflect.TypeOf((*PowerOffVMRequestType)(nil)).Elem()
    +}
    +
    +type PowerOffVM_Task PowerOffVMRequestType
    +
    +func init() {
    +	t["PowerOffVM_Task"] = reflect.TypeOf((*PowerOffVM_Task)(nil)).Elem()
    +}
    +
    +type PowerOffVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PowerOnFtSecondaryFailed struct {
    +	VmFaultToleranceIssue
    +
    +	Vm              ManagedObjectReference          `xml:"vm"`
    +	VmName          string                          `xml:"vmName"`
    +	HostSelectionBy FtIssuesOnHostHostSelectionType `xml:"hostSelectionBy"`
    +	HostErrors      []LocalizedMethodFault          `xml:"hostErrors,omitempty"`
    +	RootCause       LocalizedMethodFault            `xml:"rootCause"`
    +}
    +
    +func init() {
    +	t["PowerOnFtSecondaryFailed"] = reflect.TypeOf((*PowerOnFtSecondaryFailed)(nil)).Elem()
    +}
    +
    +type PowerOnFtSecondaryFailedFault PowerOnFtSecondaryFailed
    +
    +func init() {
    +	t["PowerOnFtSecondaryFailedFault"] = reflect.TypeOf((*PowerOnFtSecondaryFailedFault)(nil)).Elem()
    +}
    +
    +type PowerOnFtSecondaryTimedout struct {
    +	Timedout
    +
    +	Vm      ManagedObjectReference `xml:"vm"`
    +	VmName  string                 `xml:"vmName"`
    +	Timeout int32                  `xml:"timeout"`
    +}
    +
    +func init() {
    +	t["PowerOnFtSecondaryTimedout"] = reflect.TypeOf((*PowerOnFtSecondaryTimedout)(nil)).Elem()
    +}
    +
    +type PowerOnFtSecondaryTimedoutFault PowerOnFtSecondaryTimedout
    +
    +func init() {
    +	t["PowerOnFtSecondaryTimedoutFault"] = reflect.TypeOf((*PowerOnFtSecondaryTimedoutFault)(nil)).Elem()
    +}
    +
    +type PowerOnMultiVMRequestType struct {
    +	This   ManagedObjectReference   `xml:"_this"`
    +	Vm     []ManagedObjectReference `xml:"vm"`
    +	Option []BaseOptionValue        `xml:"option,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["PowerOnMultiVMRequestType"] = reflect.TypeOf((*PowerOnMultiVMRequestType)(nil)).Elem()
    +}
    +
    +type PowerOnMultiVM_Task PowerOnMultiVMRequestType
    +
    +func init() {
    +	t["PowerOnMultiVM_Task"] = reflect.TypeOf((*PowerOnMultiVM_Task)(nil)).Elem()
    +}
    +
    +type PowerOnMultiVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PowerOnVAppRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["PowerOnVAppRequestType"] = reflect.TypeOf((*PowerOnVAppRequestType)(nil)).Elem()
    +}
    +
    +type PowerOnVApp_Task PowerOnVAppRequestType
    +
    +func init() {
    +	t["PowerOnVApp_Task"] = reflect.TypeOf((*PowerOnVApp_Task)(nil)).Elem()
    +}
    +
    +type PowerOnVApp_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PowerOnVMRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["PowerOnVMRequestType"] = reflect.TypeOf((*PowerOnVMRequestType)(nil)).Elem()
    +}
    +
    +type PowerOnVM_Task PowerOnVMRequestType
    +
    +func init() {
    +	t["PowerOnVM_Task"] = reflect.TypeOf((*PowerOnVM_Task)(nil)).Elem()
    +}
    +
    +type PowerOnVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PowerSystemCapability struct {
    +	DynamicData
    +
    +	AvailablePolicy []HostPowerPolicy `xml:"availablePolicy"`
    +}
    +
    +func init() {
    +	t["PowerSystemCapability"] = reflect.TypeOf((*PowerSystemCapability)(nil)).Elem()
    +}
    +
    +type PowerSystemInfo struct {
    +	DynamicData
    +
    +	CurrentPolicy HostPowerPolicy `xml:"currentPolicy"`
    +}
    +
    +func init() {
    +	t["PowerSystemInfo"] = reflect.TypeOf((*PowerSystemInfo)(nil)).Elem()
    +}
    +
    +type PowerUpHostFromStandByRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	TimeoutSec int32                  `xml:"timeoutSec"`
    +}
    +
    +func init() {
    +	t["PowerUpHostFromStandByRequestType"] = reflect.TypeOf((*PowerUpHostFromStandByRequestType)(nil)).Elem()
    +}
    +
    +type PowerUpHostFromStandBy_Task PowerUpHostFromStandByRequestType
    +
    +func init() {
    +	t["PowerUpHostFromStandBy_Task"] = reflect.TypeOf((*PowerUpHostFromStandBy_Task)(nil)).Elem()
    +}
    +
    +type PowerUpHostFromStandBy_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PrepareCrypto PrepareCryptoRequestType
    +
    +func init() {
    +	t["PrepareCrypto"] = reflect.TypeOf((*PrepareCrypto)(nil)).Elem()
    +}
    +
    +type PrepareCryptoRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["PrepareCryptoRequestType"] = reflect.TypeOf((*PrepareCryptoRequestType)(nil)).Elem()
    +}
    +
    +type PrepareCryptoResponse struct {
    +}
    +
    +type PrivilegeAvailability struct {
    +	DynamicData
    +
    +	PrivId    string `xml:"privId"`
    +	IsGranted bool   `xml:"isGranted"`
    +}
    +
    +func init() {
    +	t["PrivilegeAvailability"] = reflect.TypeOf((*PrivilegeAvailability)(nil)).Elem()
    +}
    +
    +type PrivilegePolicyDef struct {
    +	DynamicData
    +
    +	CreatePrivilege string `xml:"createPrivilege"`
    +	ReadPrivilege   string `xml:"readPrivilege"`
    +	UpdatePrivilege string `xml:"updatePrivilege"`
    +	DeletePrivilege string `xml:"deletePrivilege"`
    +}
    +
    +func init() {
    +	t["PrivilegePolicyDef"] = reflect.TypeOf((*PrivilegePolicyDef)(nil)).Elem()
    +}
    +
    +type ProductComponentInfo struct {
    +	DynamicData
    +
    +	Id      string `xml:"id"`
    +	Name    string `xml:"name"`
    +	Version string `xml:"version"`
    +	Release int32  `xml:"release"`
    +}
    +
    +func init() {
    +	t["ProductComponentInfo"] = reflect.TypeOf((*ProductComponentInfo)(nil)).Elem()
    +}
    +
    +type ProfileApplyProfileElement struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["ProfileApplyProfileElement"] = reflect.TypeOf((*ProfileApplyProfileElement)(nil)).Elem()
    +}
    +
    +type ProfileApplyProfileProperty struct {
    +	DynamicData
    +
    +	PropertyName string             `xml:"propertyName"`
    +	Array        bool               `xml:"array"`
    +	Profile      []BaseApplyProfile `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["ProfileApplyProfileProperty"] = reflect.TypeOf((*ProfileApplyProfileProperty)(nil)).Elem()
    +}
    +
    +type ProfileAssociatedEvent struct {
    +	ProfileEvent
    +}
    +
    +func init() {
    +	t["ProfileAssociatedEvent"] = reflect.TypeOf((*ProfileAssociatedEvent)(nil)).Elem()
    +}
    +
    +type ProfileChangedEvent struct {
    +	ProfileEvent
    +}
    +
    +func init() {
    +	t["ProfileChangedEvent"] = reflect.TypeOf((*ProfileChangedEvent)(nil)).Elem()
    +}
    +
    +type ProfileCompositeExpression struct {
    +	ProfileExpression
    +
    +	Operator       string   `xml:"operator"`
    +	ExpressionName []string `xml:"expressionName"`
    +}
    +
    +func init() {
    +	t["ProfileCompositeExpression"] = reflect.TypeOf((*ProfileCompositeExpression)(nil)).Elem()
    +}
    +
    +type ProfileCompositePolicyOptionMetadata struct {
    +	ProfilePolicyOptionMetadata
    +
    +	Option []string `xml:"option"`
    +}
    +
    +func init() {
    +	t["ProfileCompositePolicyOptionMetadata"] = reflect.TypeOf((*ProfileCompositePolicyOptionMetadata)(nil)).Elem()
    +}
    +
    +type ProfileConfigInfo struct {
    +	DynamicData
    +
    +	Name       string `xml:"name"`
    +	Annotation string `xml:"annotation,omitempty"`
    +	Enabled    bool   `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["ProfileConfigInfo"] = reflect.TypeOf((*ProfileConfigInfo)(nil)).Elem()
    +}
    +
    +type ProfileCreateSpec struct {
    +	DynamicData
    +
    +	Name       string `xml:"name,omitempty"`
    +	Annotation string `xml:"annotation,omitempty"`
    +	Enabled    *bool  `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["ProfileCreateSpec"] = reflect.TypeOf((*ProfileCreateSpec)(nil)).Elem()
    +}
    +
    +type ProfileCreatedEvent struct {
    +	ProfileEvent
    +}
    +
    +func init() {
    +	t["ProfileCreatedEvent"] = reflect.TypeOf((*ProfileCreatedEvent)(nil)).Elem()
    +}
    +
    +type ProfileDeferredPolicyOptionParameter struct {
    +	DynamicData
    +
    +	InputPath ProfilePropertyPath `xml:"inputPath"`
    +	Parameter []KeyAnyValue       `xml:"parameter,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileDeferredPolicyOptionParameter"] = reflect.TypeOf((*ProfileDeferredPolicyOptionParameter)(nil)).Elem()
    +}
    +
    +type ProfileDescription struct {
    +	DynamicData
    +
    +	Section []ProfileDescriptionSection `xml:"section"`
    +}
    +
    +func init() {
    +	t["ProfileDescription"] = reflect.TypeOf((*ProfileDescription)(nil)).Elem()
    +}
    +
    +type ProfileDescriptionSection struct {
    +	DynamicData
    +
    +	Description ExtendedElementDescription `xml:"description"`
    +	Message     []LocalizableMessage       `xml:"message,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileDescriptionSection"] = reflect.TypeOf((*ProfileDescriptionSection)(nil)).Elem()
    +}
    +
    +type ProfileDissociatedEvent struct {
    +	ProfileEvent
    +}
    +
    +func init() {
    +	t["ProfileDissociatedEvent"] = reflect.TypeOf((*ProfileDissociatedEvent)(nil)).Elem()
    +}
    +
    +type ProfileEvent struct {
    +	Event
    +
    +	Profile ProfileEventArgument `xml:"profile"`
    +}
    +
    +func init() {
    +	t["ProfileEvent"] = reflect.TypeOf((*ProfileEvent)(nil)).Elem()
    +}
    +
    +type ProfileEventArgument struct {
    +	EventArgument
    +
    +	Profile ManagedObjectReference `xml:"profile"`
    +	Name    string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["ProfileEventArgument"] = reflect.TypeOf((*ProfileEventArgument)(nil)).Elem()
    +}
    +
    +type ProfileExecuteError struct {
    +	DynamicData
    +
    +	Path    *ProfilePropertyPath `xml:"path,omitempty"`
    +	Message LocalizableMessage   `xml:"message"`
    +}
    +
    +func init() {
    +	t["ProfileExecuteError"] = reflect.TypeOf((*ProfileExecuteError)(nil)).Elem()
    +}
    +
    +type ProfileExecuteResult struct {
    +	DynamicData
    +
    +	Status           string                                 `xml:"status"`
    +	ConfigSpec       *HostConfigSpec                        `xml:"configSpec,omitempty"`
    +	InapplicablePath []string                               `xml:"inapplicablePath,omitempty"`
    +	RequireInput     []ProfileDeferredPolicyOptionParameter `xml:"requireInput,omitempty"`
    +	Error            []ProfileExecuteError                  `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileExecuteResult"] = reflect.TypeOf((*ProfileExecuteResult)(nil)).Elem()
    +}
    +
    +type ProfileExpression struct {
    +	DynamicData
    +
    +	Id          string `xml:"id"`
    +	DisplayName string `xml:"displayName"`
    +	Negated     bool   `xml:"negated"`
    +}
    +
    +func init() {
    +	t["ProfileExpression"] = reflect.TypeOf((*ProfileExpression)(nil)).Elem()
    +}
    +
    +type ProfileExpressionMetadata struct {
    +	DynamicData
    +
    +	ExpressionId ExtendedElementDescription `xml:"expressionId"`
    +	Parameter    []ProfileParameterMetadata `xml:"parameter,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileExpressionMetadata"] = reflect.TypeOf((*ProfileExpressionMetadata)(nil)).Elem()
    +}
    +
    +type ProfileMetadata struct {
    +	DynamicData
    +
    +	Key               string                                   `xml:"key"`
    +	ProfileTypeName   string                                   `xml:"profileTypeName,omitempty"`
    +	Description       *ExtendedDescription                     `xml:"description,omitempty"`
    +	SortSpec          []ProfileMetadataProfileSortSpec         `xml:"sortSpec,omitempty"`
    +	ProfileCategory   string                                   `xml:"profileCategory,omitempty"`
    +	ProfileComponent  string                                   `xml:"profileComponent,omitempty"`
    +	OperationMessages []ProfileMetadataProfileOperationMessage `xml:"operationMessages,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileMetadata"] = reflect.TypeOf((*ProfileMetadata)(nil)).Elem()
    +}
    +
    +type ProfileMetadataProfileOperationMessage struct {
    +	DynamicData
    +
    +	OperationName string             `xml:"operationName"`
    +	Message       LocalizableMessage `xml:"message"`
    +}
    +
    +func init() {
    +	t["ProfileMetadataProfileOperationMessage"] = reflect.TypeOf((*ProfileMetadataProfileOperationMessage)(nil)).Elem()
    +}
    +
    +type ProfileMetadataProfileSortSpec struct {
    +	DynamicData
    +
    +	PolicyId  string `xml:"policyId"`
    +	Parameter string `xml:"parameter"`
    +}
    +
    +func init() {
    +	t["ProfileMetadataProfileSortSpec"] = reflect.TypeOf((*ProfileMetadataProfileSortSpec)(nil)).Elem()
    +}
    +
    +type ProfileParameterMetadata struct {
    +	DynamicData
    +
    +	Id                 ExtendedElementDescription                          `xml:"id"`
    +	Type               string                                              `xml:"type"`
    +	Optional           bool                                                `xml:"optional"`
    +	DefaultValue       AnyType                                             `xml:"defaultValue,omitempty,typeattr"`
    +	Hidden             *bool                                               `xml:"hidden"`
    +	SecuritySensitive  *bool                                               `xml:"securitySensitive"`
    +	ReadOnly           *bool                                               `xml:"readOnly"`
    +	ParameterRelations []ProfileParameterMetadataParameterRelationMetadata `xml:"parameterRelations,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileParameterMetadata"] = reflect.TypeOf((*ProfileParameterMetadata)(nil)).Elem()
    +}
    +
    +type ProfileParameterMetadataParameterRelationMetadata struct {
    +	DynamicData
    +
    +	RelationTypes []string             `xml:"relationTypes,omitempty"`
    +	Values        []AnyType            `xml:"values,omitempty,typeattr"`
    +	Path          *ProfilePropertyPath `xml:"path,omitempty"`
    +	MinCount      int32                `xml:"minCount"`
    +	MaxCount      int32                `xml:"maxCount"`
    +}
    +
    +func init() {
    +	t["ProfileParameterMetadataParameterRelationMetadata"] = reflect.TypeOf((*ProfileParameterMetadataParameterRelationMetadata)(nil)).Elem()
    +}
    +
    +type ProfilePolicy struct {
    +	DynamicData
    +
    +	Id           string           `xml:"id"`
    +	PolicyOption BasePolicyOption `xml:"policyOption,typeattr"`
    +}
    +
    +func init() {
    +	t["ProfilePolicy"] = reflect.TypeOf((*ProfilePolicy)(nil)).Elem()
    +}
    +
    +type ProfilePolicyMetadata struct {
    +	DynamicData
    +
    +	Id             ExtendedElementDescription        `xml:"id"`
    +	PossibleOption []BaseProfilePolicyOptionMetadata `xml:"possibleOption,typeattr"`
    +}
    +
    +func init() {
    +	t["ProfilePolicyMetadata"] = reflect.TypeOf((*ProfilePolicyMetadata)(nil)).Elem()
    +}
    +
    +type ProfilePolicyOptionMetadata struct {
    +	DynamicData
    +
    +	Id        ExtendedElementDescription `xml:"id"`
    +	Parameter []ProfileParameterMetadata `xml:"parameter,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfilePolicyOptionMetadata"] = reflect.TypeOf((*ProfilePolicyOptionMetadata)(nil)).Elem()
    +}
    +
    +type ProfileProfileStructure struct {
    +	DynamicData
    +
    +	ProfileTypeName string                            `xml:"profileTypeName"`
    +	Child           []ProfileProfileStructureProperty `xml:"child,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileProfileStructure"] = reflect.TypeOf((*ProfileProfileStructure)(nil)).Elem()
    +}
    +
    +type ProfileProfileStructureProperty struct {
    +	DynamicData
    +
    +	PropertyName string                  `xml:"propertyName"`
    +	Array        bool                    `xml:"array"`
    +	Element      ProfileProfileStructure `xml:"element"`
    +}
    +
    +func init() {
    +	t["ProfileProfileStructureProperty"] = reflect.TypeOf((*ProfileProfileStructureProperty)(nil)).Elem()
    +}
    +
    +type ProfilePropertyPath struct {
    +	DynamicData
    +
    +	ProfilePath    string `xml:"profilePath"`
    +	PolicyId       string `xml:"policyId,omitempty"`
    +	ParameterId    string `xml:"parameterId,omitempty"`
    +	PolicyOptionId string `xml:"policyOptionId,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfilePropertyPath"] = reflect.TypeOf((*ProfilePropertyPath)(nil)).Elem()
    +}
    +
    +type ProfileReferenceHostChangedEvent struct {
    +	ProfileEvent
    +
    +	ReferenceHost         *ManagedObjectReference `xml:"referenceHost,omitempty"`
    +	ReferenceHostName     string                  `xml:"referenceHostName,omitempty"`
    +	PrevReferenceHostName string                  `xml:"prevReferenceHostName,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileReferenceHostChangedEvent"] = reflect.TypeOf((*ProfileReferenceHostChangedEvent)(nil)).Elem()
    +}
    +
    +type ProfileRemovedEvent struct {
    +	ProfileEvent
    +}
    +
    +func init() {
    +	t["ProfileRemovedEvent"] = reflect.TypeOf((*ProfileRemovedEvent)(nil)).Elem()
    +}
    +
    +type ProfileSerializedCreateSpec struct {
    +	ProfileCreateSpec
    +
    +	ProfileConfigString string `xml:"profileConfigString"`
    +}
    +
    +func init() {
    +	t["ProfileSerializedCreateSpec"] = reflect.TypeOf((*ProfileSerializedCreateSpec)(nil)).Elem()
    +}
    +
    +type ProfileSimpleExpression struct {
    +	ProfileExpression
    +
    +	ExpressionType string        `xml:"expressionType"`
    +	Parameter      []KeyAnyValue `xml:"parameter,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileSimpleExpression"] = reflect.TypeOf((*ProfileSimpleExpression)(nil)).Elem()
    +}
    +
    +type ProfileUpdateFailed struct {
    +	VimFault
    +
    +	Failure  []ProfileUpdateFailedUpdateFailure `xml:"failure"`
    +	Warnings []ProfileUpdateFailedUpdateFailure `xml:"warnings,omitempty"`
    +}
    +
    +func init() {
    +	t["ProfileUpdateFailed"] = reflect.TypeOf((*ProfileUpdateFailed)(nil)).Elem()
    +}
    +
    +type ProfileUpdateFailedFault ProfileUpdateFailed
    +
    +func init() {
    +	t["ProfileUpdateFailedFault"] = reflect.TypeOf((*ProfileUpdateFailedFault)(nil)).Elem()
    +}
    +
    +type ProfileUpdateFailedUpdateFailure struct {
    +	DynamicData
    +
    +	ProfilePath ProfilePropertyPath `xml:"profilePath"`
    +	ErrMsg      LocalizableMessage  `xml:"errMsg"`
    +}
    +
    +func init() {
    +	t["ProfileUpdateFailedUpdateFailure"] = reflect.TypeOf((*ProfileUpdateFailedUpdateFailure)(nil)).Elem()
    +}
    +
    +type PromoteDisksRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Unlink bool                   `xml:"unlink"`
    +	Disks  []VirtualDisk          `xml:"disks,omitempty"`
    +}
    +
    +func init() {
    +	t["PromoteDisksRequestType"] = reflect.TypeOf((*PromoteDisksRequestType)(nil)).Elem()
    +}
    +
    +type PromoteDisks_Task PromoteDisksRequestType
    +
    +func init() {
    +	t["PromoteDisks_Task"] = reflect.TypeOf((*PromoteDisks_Task)(nil)).Elem()
    +}
    +
    +type PromoteDisks_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type PropertyChange struct {
    +	DynamicData
    +
    +	Name string           `xml:"name"`
    +	Op   PropertyChangeOp `xml:"op"`
    +	Val  AnyType          `xml:"val,typeattr"`
    +}
    +
    +func init() {
    +	t["PropertyChange"] = reflect.TypeOf((*PropertyChange)(nil)).Elem()
    +}
    +
    +type PropertyFilterSpec struct {
    +	DynamicData
    +
    +	PropSet                       []PropertySpec `xml:"propSet"`
    +	ObjectSet                     []ObjectSpec   `xml:"objectSet"`
    +	ReportMissingObjectsInResults *bool          `xml:"reportMissingObjectsInResults"`
    +}
    +
    +func init() {
    +	t["PropertyFilterSpec"] = reflect.TypeOf((*PropertyFilterSpec)(nil)).Elem()
    +}
    +
    +type PropertyFilterUpdate struct {
    +	DynamicData
    +
    +	Filter     ManagedObjectReference `xml:"filter"`
    +	ObjectSet  []ObjectUpdate         `xml:"objectSet,omitempty"`
    +	MissingSet []MissingObject        `xml:"missingSet,omitempty"`
    +}
    +
    +func init() {
    +	t["PropertyFilterUpdate"] = reflect.TypeOf((*PropertyFilterUpdate)(nil)).Elem()
    +}
    +
    +type PropertySpec struct {
    +	DynamicData
    +
    +	Type    string   `xml:"type"`
    +	All     *bool    `xml:"all"`
    +	PathSet []string `xml:"pathSet,omitempty"`
    +}
    +
    +func init() {
    +	t["PropertySpec"] = reflect.TypeOf((*PropertySpec)(nil)).Elem()
    +}
    +
    +type PutUsbScanCodes PutUsbScanCodesRequestType
    +
    +func init() {
    +	t["PutUsbScanCodes"] = reflect.TypeOf((*PutUsbScanCodes)(nil)).Elem()
    +}
    +
    +type PutUsbScanCodesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec UsbScanCodeSpec        `xml:"spec"`
    +}
    +
    +func init() {
    +	t["PutUsbScanCodesRequestType"] = reflect.TypeOf((*PutUsbScanCodesRequestType)(nil)).Elem()
    +}
    +
    +type PutUsbScanCodesResponse struct {
    +	Returnval int32 `xml:"returnval"`
    +}
    +
    +type QuarantineModeFault struct {
    +	VmConfigFault
    +
    +	VmName    string `xml:"vmName"`
    +	FaultType string `xml:"faultType"`
    +}
    +
    +func init() {
    +	t["QuarantineModeFault"] = reflect.TypeOf((*QuarantineModeFault)(nil)).Elem()
    +}
    +
    +type QuarantineModeFaultFault QuarantineModeFault
    +
    +func init() {
    +	t["QuarantineModeFaultFault"] = reflect.TypeOf((*QuarantineModeFaultFault)(nil)).Elem()
    +}
    +
    +type QueryAnswerFileStatus QueryAnswerFileStatusRequestType
    +
    +func init() {
    +	t["QueryAnswerFileStatus"] = reflect.TypeOf((*QueryAnswerFileStatus)(nil)).Elem()
    +}
    +
    +type QueryAnswerFileStatusRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Host []ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["QueryAnswerFileStatusRequestType"] = reflect.TypeOf((*QueryAnswerFileStatusRequestType)(nil)).Elem()
    +}
    +
    +type QueryAnswerFileStatusResponse struct {
    +	Returnval []AnswerFileStatusResult `xml:"returnval,omitempty"`
    +}
    +
    +type QueryAssignedLicenses QueryAssignedLicensesRequestType
    +
    +func init() {
    +	t["QueryAssignedLicenses"] = reflect.TypeOf((*QueryAssignedLicenses)(nil)).Elem()
    +}
    +
    +type QueryAssignedLicensesRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	EntityId string                 `xml:"entityId,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryAssignedLicensesRequestType"] = reflect.TypeOf((*QueryAssignedLicensesRequestType)(nil)).Elem()
    +}
    +
    +type QueryAssignedLicensesResponse struct {
    +	Returnval []LicenseAssignmentManagerLicenseAssignment `xml:"returnval,omitempty"`
    +}
    +
    +type QueryAvailableDisksForVmfs QueryAvailableDisksForVmfsRequestType
    +
    +func init() {
    +	t["QueryAvailableDisksForVmfs"] = reflect.TypeOf((*QueryAvailableDisksForVmfs)(nil)).Elem()
    +}
    +
    +type QueryAvailableDisksForVmfsRequestType struct {
    +	This      ManagedObjectReference  `xml:"_this"`
    +	Datastore *ManagedObjectReference `xml:"datastore,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryAvailableDisksForVmfsRequestType"] = reflect.TypeOf((*QueryAvailableDisksForVmfsRequestType)(nil)).Elem()
    +}
    +
    +type QueryAvailableDisksForVmfsResponse struct {
    +	Returnval []HostScsiDisk `xml:"returnval,omitempty"`
    +}
    +
    +type QueryAvailableDvsSpec QueryAvailableDvsSpecRequestType
    +
    +func init() {
    +	t["QueryAvailableDvsSpec"] = reflect.TypeOf((*QueryAvailableDvsSpec)(nil)).Elem()
    +}
    +
    +type QueryAvailableDvsSpecRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Recommended *bool                  `xml:"recommended"`
    +}
    +
    +func init() {
    +	t["QueryAvailableDvsSpecRequestType"] = reflect.TypeOf((*QueryAvailableDvsSpecRequestType)(nil)).Elem()
    +}
    +
    +type QueryAvailableDvsSpecResponse struct {
    +	Returnval []DistributedVirtualSwitchProductSpec `xml:"returnval,omitempty"`
    +}
    +
    +type QueryAvailablePartition QueryAvailablePartitionRequestType
    +
    +func init() {
    +	t["QueryAvailablePartition"] = reflect.TypeOf((*QueryAvailablePartition)(nil)).Elem()
    +}
    +
    +type QueryAvailablePartitionRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryAvailablePartitionRequestType"] = reflect.TypeOf((*QueryAvailablePartitionRequestType)(nil)).Elem()
    +}
    +
    +type QueryAvailablePartitionResponse struct {
    +	Returnval []HostDiagnosticPartition `xml:"returnval,omitempty"`
    +}
    +
    +type QueryAvailablePerfMetric QueryAvailablePerfMetricRequestType
    +
    +func init() {
    +	t["QueryAvailablePerfMetric"] = reflect.TypeOf((*QueryAvailablePerfMetric)(nil)).Elem()
    +}
    +
    +type QueryAvailablePerfMetricRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Entity     ManagedObjectReference `xml:"entity"`
    +	BeginTime  *time.Time             `xml:"beginTime"`
    +	EndTime    *time.Time             `xml:"endTime"`
    +	IntervalId int32                  `xml:"intervalId,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryAvailablePerfMetricRequestType"] = reflect.TypeOf((*QueryAvailablePerfMetricRequestType)(nil)).Elem()
    +}
    +
    +type QueryAvailablePerfMetricResponse struct {
    +	Returnval []PerfMetricId `xml:"returnval,omitempty"`
    +}
    +
    +type QueryAvailableSsds QueryAvailableSsdsRequestType
    +
    +func init() {
    +	t["QueryAvailableSsds"] = reflect.TypeOf((*QueryAvailableSsds)(nil)).Elem()
    +}
    +
    +type QueryAvailableSsdsRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VffsPath string                 `xml:"vffsPath,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryAvailableSsdsRequestType"] = reflect.TypeOf((*QueryAvailableSsdsRequestType)(nil)).Elem()
    +}
    +
    +type QueryAvailableSsdsResponse struct {
    +	Returnval []HostScsiDisk `xml:"returnval,omitempty"`
    +}
    +
    +type QueryAvailableTimeZones QueryAvailableTimeZonesRequestType
    +
    +func init() {
    +	t["QueryAvailableTimeZones"] = reflect.TypeOf((*QueryAvailableTimeZones)(nil)).Elem()
    +}
    +
    +type QueryAvailableTimeZonesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryAvailableTimeZonesRequestType"] = reflect.TypeOf((*QueryAvailableTimeZonesRequestType)(nil)).Elem()
    +}
    +
    +type QueryAvailableTimeZonesResponse struct {
    +	Returnval []HostDateTimeSystemTimeZone `xml:"returnval,omitempty"`
    +}
    +
    +type QueryBootDevices QueryBootDevicesRequestType
    +
    +func init() {
    +	t["QueryBootDevices"] = reflect.TypeOf((*QueryBootDevices)(nil)).Elem()
    +}
    +
    +type QueryBootDevicesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryBootDevicesRequestType"] = reflect.TypeOf((*QueryBootDevicesRequestType)(nil)).Elem()
    +}
    +
    +type QueryBootDevicesResponse struct {
    +	Returnval *HostBootDeviceInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryBoundVnics QueryBoundVnicsRequestType
    +
    +func init() {
    +	t["QueryBoundVnics"] = reflect.TypeOf((*QueryBoundVnics)(nil)).Elem()
    +}
    +
    +type QueryBoundVnicsRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	IScsiHbaName string                 `xml:"iScsiHbaName"`
    +}
    +
    +func init() {
    +	t["QueryBoundVnicsRequestType"] = reflect.TypeOf((*QueryBoundVnicsRequestType)(nil)).Elem()
    +}
    +
    +type QueryBoundVnicsResponse struct {
    +	Returnval []IscsiPortInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryCandidateNics QueryCandidateNicsRequestType
    +
    +func init() {
    +	t["QueryCandidateNics"] = reflect.TypeOf((*QueryCandidateNics)(nil)).Elem()
    +}
    +
    +type QueryCandidateNicsRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	IScsiHbaName string                 `xml:"iScsiHbaName"`
    +}
    +
    +func init() {
    +	t["QueryCandidateNicsRequestType"] = reflect.TypeOf((*QueryCandidateNicsRequestType)(nil)).Elem()
    +}
    +
    +type QueryCandidateNicsResponse struct {
    +	Returnval []IscsiPortInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryChangedDiskAreas QueryChangedDiskAreasRequestType
    +
    +func init() {
    +	t["QueryChangedDiskAreas"] = reflect.TypeOf((*QueryChangedDiskAreas)(nil)).Elem()
    +}
    +
    +type QueryChangedDiskAreasRequestType struct {
    +	This        ManagedObjectReference  `xml:"_this"`
    +	Snapshot    *ManagedObjectReference `xml:"snapshot,omitempty"`
    +	DeviceKey   int32                   `xml:"deviceKey"`
    +	StartOffset int64                   `xml:"startOffset"`
    +	ChangeId    string                  `xml:"changeId"`
    +}
    +
    +func init() {
    +	t["QueryChangedDiskAreasRequestType"] = reflect.TypeOf((*QueryChangedDiskAreasRequestType)(nil)).Elem()
    +}
    +
    +type QueryChangedDiskAreasResponse struct {
    +	Returnval DiskChangeInfo `xml:"returnval"`
    +}
    +
    +type QueryCmmds QueryCmmdsRequestType
    +
    +func init() {
    +	t["QueryCmmds"] = reflect.TypeOf((*QueryCmmds)(nil)).Elem()
    +}
    +
    +type QueryCmmdsRequestType struct {
    +	This    ManagedObjectReference             `xml:"_this"`
    +	Queries []HostVsanInternalSystemCmmdsQuery `xml:"queries"`
    +}
    +
    +func init() {
    +	t["QueryCmmdsRequestType"] = reflect.TypeOf((*QueryCmmdsRequestType)(nil)).Elem()
    +}
    +
    +type QueryCmmdsResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryCompatibleHostForExistingDvs QueryCompatibleHostForExistingDvsRequestType
    +
    +func init() {
    +	t["QueryCompatibleHostForExistingDvs"] = reflect.TypeOf((*QueryCompatibleHostForExistingDvs)(nil)).Elem()
    +}
    +
    +type QueryCompatibleHostForExistingDvsRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Container ManagedObjectReference `xml:"container"`
    +	Recursive bool                   `xml:"recursive"`
    +	Dvs       ManagedObjectReference `xml:"dvs"`
    +}
    +
    +func init() {
    +	t["QueryCompatibleHostForExistingDvsRequestType"] = reflect.TypeOf((*QueryCompatibleHostForExistingDvsRequestType)(nil)).Elem()
    +}
    +
    +type QueryCompatibleHostForExistingDvsResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type QueryCompatibleHostForNewDvs QueryCompatibleHostForNewDvsRequestType
    +
    +func init() {
    +	t["QueryCompatibleHostForNewDvs"] = reflect.TypeOf((*QueryCompatibleHostForNewDvs)(nil)).Elem()
    +}
    +
    +type QueryCompatibleHostForNewDvsRequestType struct {
    +	This              ManagedObjectReference               `xml:"_this"`
    +	Container         ManagedObjectReference               `xml:"container"`
    +	Recursive         bool                                 `xml:"recursive"`
    +	SwitchProductSpec *DistributedVirtualSwitchProductSpec `xml:"switchProductSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryCompatibleHostForNewDvsRequestType"] = reflect.TypeOf((*QueryCompatibleHostForNewDvsRequestType)(nil)).Elem()
    +}
    +
    +type QueryCompatibleHostForNewDvsResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type QueryComplianceStatus QueryComplianceStatusRequestType
    +
    +func init() {
    +	t["QueryComplianceStatus"] = reflect.TypeOf((*QueryComplianceStatus)(nil)).Elem()
    +}
    +
    +type QueryComplianceStatusRequestType struct {
    +	This    ManagedObjectReference   `xml:"_this"`
    +	Profile []ManagedObjectReference `xml:"profile,omitempty"`
    +	Entity  []ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryComplianceStatusRequestType"] = reflect.TypeOf((*QueryComplianceStatusRequestType)(nil)).Elem()
    +}
    +
    +type QueryComplianceStatusResponse struct {
    +	Returnval []ComplianceResult `xml:"returnval,omitempty"`
    +}
    +
    +type QueryConfigOption QueryConfigOptionRequestType
    +
    +func init() {
    +	t["QueryConfigOption"] = reflect.TypeOf((*QueryConfigOption)(nil)).Elem()
    +}
    +
    +type QueryConfigOptionDescriptor QueryConfigOptionDescriptorRequestType
    +
    +func init() {
    +	t["QueryConfigOptionDescriptor"] = reflect.TypeOf((*QueryConfigOptionDescriptor)(nil)).Elem()
    +}
    +
    +type QueryConfigOptionDescriptorRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryConfigOptionDescriptorRequestType"] = reflect.TypeOf((*QueryConfigOptionDescriptorRequestType)(nil)).Elem()
    +}
    +
    +type QueryConfigOptionDescriptorResponse struct {
    +	Returnval []VirtualMachineConfigOptionDescriptor `xml:"returnval,omitempty"`
    +}
    +
    +type QueryConfigOptionEx QueryConfigOptionExRequestType
    +
    +func init() {
    +	t["QueryConfigOptionEx"] = reflect.TypeOf((*QueryConfigOptionEx)(nil)).Elem()
    +}
    +
    +type QueryConfigOptionExRequestType struct {
    +	This ManagedObjectReference                   `xml:"_this"`
    +	Spec *EnvironmentBrowserConfigOptionQuerySpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryConfigOptionExRequestType"] = reflect.TypeOf((*QueryConfigOptionExRequestType)(nil)).Elem()
    +}
    +
    +type QueryConfigOptionExResponse struct {
    +	Returnval *VirtualMachineConfigOption `xml:"returnval,omitempty"`
    +}
    +
    +type QueryConfigOptionRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Key  string                  `xml:"key,omitempty"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryConfigOptionRequestType"] = reflect.TypeOf((*QueryConfigOptionRequestType)(nil)).Elem()
    +}
    +
    +type QueryConfigOptionResponse struct {
    +	Returnval *VirtualMachineConfigOption `xml:"returnval,omitempty"`
    +}
    +
    +type QueryConfigTarget QueryConfigTargetRequestType
    +
    +func init() {
    +	t["QueryConfigTarget"] = reflect.TypeOf((*QueryConfigTarget)(nil)).Elem()
    +}
    +
    +type QueryConfigTargetRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryConfigTargetRequestType"] = reflect.TypeOf((*QueryConfigTargetRequestType)(nil)).Elem()
    +}
    +
    +type QueryConfigTargetResponse struct {
    +	Returnval *ConfigTarget `xml:"returnval,omitempty"`
    +}
    +
    +type QueryConfiguredModuleOptionString QueryConfiguredModuleOptionStringRequestType
    +
    +func init() {
    +	t["QueryConfiguredModuleOptionString"] = reflect.TypeOf((*QueryConfiguredModuleOptionString)(nil)).Elem()
    +}
    +
    +type QueryConfiguredModuleOptionStringRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["QueryConfiguredModuleOptionStringRequestType"] = reflect.TypeOf((*QueryConfiguredModuleOptionStringRequestType)(nil)).Elem()
    +}
    +
    +type QueryConfiguredModuleOptionStringResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryConnectionInfo QueryConnectionInfoRequestType
    +
    +func init() {
    +	t["QueryConnectionInfo"] = reflect.TypeOf((*QueryConnectionInfo)(nil)).Elem()
    +}
    +
    +type QueryConnectionInfoRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	Hostname      string                 `xml:"hostname"`
    +	Port          int32                  `xml:"port"`
    +	Username      string                 `xml:"username"`
    +	Password      string                 `xml:"password"`
    +	SslThumbprint string                 `xml:"sslThumbprint,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryConnectionInfoRequestType"] = reflect.TypeOf((*QueryConnectionInfoRequestType)(nil)).Elem()
    +}
    +
    +type QueryConnectionInfoResponse struct {
    +	Returnval HostConnectInfo `xml:"returnval"`
    +}
    +
    +type QueryConnectionInfoViaSpec QueryConnectionInfoViaSpecRequestType
    +
    +func init() {
    +	t["QueryConnectionInfoViaSpec"] = reflect.TypeOf((*QueryConnectionInfoViaSpec)(nil)).Elem()
    +}
    +
    +type QueryConnectionInfoViaSpecRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec HostConnectSpec        `xml:"spec"`
    +}
    +
    +func init() {
    +	t["QueryConnectionInfoViaSpecRequestType"] = reflect.TypeOf((*QueryConnectionInfoViaSpecRequestType)(nil)).Elem()
    +}
    +
    +type QueryConnectionInfoViaSpecResponse struct {
    +	Returnval HostConnectInfo `xml:"returnval"`
    +}
    +
    +type QueryDatastorePerformanceSummary QueryDatastorePerformanceSummaryRequestType
    +
    +func init() {
    +	t["QueryDatastorePerformanceSummary"] = reflect.TypeOf((*QueryDatastorePerformanceSummary)(nil)).Elem()
    +}
    +
    +type QueryDatastorePerformanceSummaryRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["QueryDatastorePerformanceSummaryRequestType"] = reflect.TypeOf((*QueryDatastorePerformanceSummaryRequestType)(nil)).Elem()
    +}
    +
    +type QueryDatastorePerformanceSummaryResponse struct {
    +	Returnval []StoragePerformanceSummary `xml:"returnval,omitempty"`
    +}
    +
    +type QueryDateTime QueryDateTimeRequestType
    +
    +func init() {
    +	t["QueryDateTime"] = reflect.TypeOf((*QueryDateTime)(nil)).Elem()
    +}
    +
    +type QueryDateTimeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryDateTimeRequestType"] = reflect.TypeOf((*QueryDateTimeRequestType)(nil)).Elem()
    +}
    +
    +type QueryDateTimeResponse struct {
    +	Returnval time.Time `xml:"returnval"`
    +}
    +
    +type QueryDescriptions QueryDescriptionsRequestType
    +
    +func init() {
    +	t["QueryDescriptions"] = reflect.TypeOf((*QueryDescriptions)(nil)).Elem()
    +}
    +
    +type QueryDescriptionsRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryDescriptionsRequestType"] = reflect.TypeOf((*QueryDescriptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryDescriptionsResponse struct {
    +	Returnval []DiagnosticManagerLogDescriptor `xml:"returnval,omitempty"`
    +}
    +
    +type QueryDisksForVsan QueryDisksForVsanRequestType
    +
    +func init() {
    +	t["QueryDisksForVsan"] = reflect.TypeOf((*QueryDisksForVsan)(nil)).Elem()
    +}
    +
    +type QueryDisksForVsanRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	CanonicalName []string               `xml:"canonicalName,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryDisksForVsanRequestType"] = reflect.TypeOf((*QueryDisksForVsanRequestType)(nil)).Elem()
    +}
    +
    +type QueryDisksForVsanResponse struct {
    +	Returnval []VsanHostDiskResult `xml:"returnval,omitempty"`
    +}
    +
    +type QueryDisksUsingFilter QueryDisksUsingFilterRequestType
    +
    +func init() {
    +	t["QueryDisksUsingFilter"] = reflect.TypeOf((*QueryDisksUsingFilter)(nil)).Elem()
    +}
    +
    +type QueryDisksUsingFilterRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +	CompRes  ManagedObjectReference `xml:"compRes"`
    +}
    +
    +func init() {
    +	t["QueryDisksUsingFilterRequestType"] = reflect.TypeOf((*QueryDisksUsingFilterRequestType)(nil)).Elem()
    +}
    +
    +type QueryDisksUsingFilterResponse struct {
    +	Returnval []VirtualDiskId `xml:"returnval"`
    +}
    +
    +type QueryDvsByUuid QueryDvsByUuidRequestType
    +
    +func init() {
    +	t["QueryDvsByUuid"] = reflect.TypeOf((*QueryDvsByUuid)(nil)).Elem()
    +}
    +
    +type QueryDvsByUuidRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Uuid string                 `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["QueryDvsByUuidRequestType"] = reflect.TypeOf((*QueryDvsByUuidRequestType)(nil)).Elem()
    +}
    +
    +type QueryDvsByUuidResponse struct {
    +	Returnval *ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type QueryDvsCheckCompatibility QueryDvsCheckCompatibilityRequestType
    +
    +func init() {
    +	t["QueryDvsCheckCompatibility"] = reflect.TypeOf((*QueryDvsCheckCompatibility)(nil)).Elem()
    +}
    +
    +type QueryDvsCheckCompatibilityRequestType struct {
    +	This           ManagedObjectReference                                 `xml:"_this"`
    +	HostContainer  DistributedVirtualSwitchManagerHostContainer           `xml:"hostContainer"`
    +	DvsProductSpec *DistributedVirtualSwitchManagerDvsProductSpec         `xml:"dvsProductSpec,omitempty"`
    +	HostFilterSpec []BaseDistributedVirtualSwitchManagerHostDvsFilterSpec `xml:"hostFilterSpec,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["QueryDvsCheckCompatibilityRequestType"] = reflect.TypeOf((*QueryDvsCheckCompatibilityRequestType)(nil)).Elem()
    +}
    +
    +type QueryDvsCheckCompatibilityResponse struct {
    +	Returnval []DistributedVirtualSwitchManagerCompatibilityResult `xml:"returnval,omitempty"`
    +}
    +
    +type QueryDvsCompatibleHostSpec QueryDvsCompatibleHostSpecRequestType
    +
    +func init() {
    +	t["QueryDvsCompatibleHostSpec"] = reflect.TypeOf((*QueryDvsCompatibleHostSpec)(nil)).Elem()
    +}
    +
    +type QueryDvsCompatibleHostSpecRequestType struct {
    +	This              ManagedObjectReference               `xml:"_this"`
    +	SwitchProductSpec *DistributedVirtualSwitchProductSpec `xml:"switchProductSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryDvsCompatibleHostSpecRequestType"] = reflect.TypeOf((*QueryDvsCompatibleHostSpecRequestType)(nil)).Elem()
    +}
    +
    +type QueryDvsCompatibleHostSpecResponse struct {
    +	Returnval []DistributedVirtualSwitchHostProductSpec `xml:"returnval,omitempty"`
    +}
    +
    +type QueryDvsConfigTarget QueryDvsConfigTargetRequestType
    +
    +func init() {
    +	t["QueryDvsConfigTarget"] = reflect.TypeOf((*QueryDvsConfigTarget)(nil)).Elem()
    +}
    +
    +type QueryDvsConfigTargetRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +	Dvs  *ManagedObjectReference `xml:"dvs,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryDvsConfigTargetRequestType"] = reflect.TypeOf((*QueryDvsConfigTargetRequestType)(nil)).Elem()
    +}
    +
    +type QueryDvsConfigTargetResponse struct {
    +	Returnval DVSManagerDvsConfigTarget `xml:"returnval"`
    +}
    +
    +type QueryDvsFeatureCapability QueryDvsFeatureCapabilityRequestType
    +
    +func init() {
    +	t["QueryDvsFeatureCapability"] = reflect.TypeOf((*QueryDvsFeatureCapability)(nil)).Elem()
    +}
    +
    +type QueryDvsFeatureCapabilityRequestType struct {
    +	This              ManagedObjectReference               `xml:"_this"`
    +	SwitchProductSpec *DistributedVirtualSwitchProductSpec `xml:"switchProductSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryDvsFeatureCapabilityRequestType"] = reflect.TypeOf((*QueryDvsFeatureCapabilityRequestType)(nil)).Elem()
    +}
    +
    +type QueryDvsFeatureCapabilityResponse struct {
    +	Returnval BaseDVSFeatureCapability `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type QueryEvents QueryEventsRequestType
    +
    +func init() {
    +	t["QueryEvents"] = reflect.TypeOf((*QueryEvents)(nil)).Elem()
    +}
    +
    +type QueryEventsRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Filter EventFilterSpec        `xml:"filter"`
    +}
    +
    +func init() {
    +	t["QueryEventsRequestType"] = reflect.TypeOf((*QueryEventsRequestType)(nil)).Elem()
    +}
    +
    +type QueryEventsResponse struct {
    +	Returnval []BaseEvent `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type QueryExpressionMetadata QueryExpressionMetadataRequestType
    +
    +func init() {
    +	t["QueryExpressionMetadata"] = reflect.TypeOf((*QueryExpressionMetadata)(nil)).Elem()
    +}
    +
    +type QueryExpressionMetadataRequestType struct {
    +	This           ManagedObjectReference  `xml:"_this"`
    +	ExpressionName []string                `xml:"expressionName,omitempty"`
    +	Profile        *ManagedObjectReference `xml:"profile,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryExpressionMetadataRequestType"] = reflect.TypeOf((*QueryExpressionMetadataRequestType)(nil)).Elem()
    +}
    +
    +type QueryExpressionMetadataResponse struct {
    +	Returnval []ProfileExpressionMetadata `xml:"returnval,omitempty"`
    +}
    +
    +type QueryExtensionIpAllocationUsage QueryExtensionIpAllocationUsageRequestType
    +
    +func init() {
    +	t["QueryExtensionIpAllocationUsage"] = reflect.TypeOf((*QueryExtensionIpAllocationUsage)(nil)).Elem()
    +}
    +
    +type QueryExtensionIpAllocationUsageRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	ExtensionKeys []string               `xml:"extensionKeys,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryExtensionIpAllocationUsageRequestType"] = reflect.TypeOf((*QueryExtensionIpAllocationUsageRequestType)(nil)).Elem()
    +}
    +
    +type QueryExtensionIpAllocationUsageResponse struct {
    +	Returnval []ExtensionManagerIpAllocationUsage `xml:"returnval,omitempty"`
    +}
    +
    +type QueryFaultToleranceCompatibility QueryFaultToleranceCompatibilityRequestType
    +
    +func init() {
    +	t["QueryFaultToleranceCompatibility"] = reflect.TypeOf((*QueryFaultToleranceCompatibility)(nil)).Elem()
    +}
    +
    +type QueryFaultToleranceCompatibilityEx QueryFaultToleranceCompatibilityExRequestType
    +
    +func init() {
    +	t["QueryFaultToleranceCompatibilityEx"] = reflect.TypeOf((*QueryFaultToleranceCompatibilityEx)(nil)).Elem()
    +}
    +
    +type QueryFaultToleranceCompatibilityExRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	ForLegacyFt *bool                  `xml:"forLegacyFt"`
    +}
    +
    +func init() {
    +	t["QueryFaultToleranceCompatibilityExRequestType"] = reflect.TypeOf((*QueryFaultToleranceCompatibilityExRequestType)(nil)).Elem()
    +}
    +
    +type QueryFaultToleranceCompatibilityExResponse struct {
    +	Returnval []LocalizedMethodFault `xml:"returnval,omitempty"`
    +}
    +
    +type QueryFaultToleranceCompatibilityRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryFaultToleranceCompatibilityRequestType"] = reflect.TypeOf((*QueryFaultToleranceCompatibilityRequestType)(nil)).Elem()
    +}
    +
    +type QueryFaultToleranceCompatibilityResponse struct {
    +	Returnval []LocalizedMethodFault `xml:"returnval,omitempty"`
    +}
    +
    +type QueryFilterEntities QueryFilterEntitiesRequestType
    +
    +func init() {
    +	t["QueryFilterEntities"] = reflect.TypeOf((*QueryFilterEntities)(nil)).Elem()
    +}
    +
    +type QueryFilterEntitiesRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +}
    +
    +func init() {
    +	t["QueryFilterEntitiesRequestType"] = reflect.TypeOf((*QueryFilterEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type QueryFilterEntitiesResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type QueryFilterInfoIds QueryFilterInfoIdsRequestType
    +
    +func init() {
    +	t["QueryFilterInfoIds"] = reflect.TypeOf((*QueryFilterInfoIds)(nil)).Elem()
    +}
    +
    +type QueryFilterInfoIdsRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +}
    +
    +func init() {
    +	t["QueryFilterInfoIdsRequestType"] = reflect.TypeOf((*QueryFilterInfoIdsRequestType)(nil)).Elem()
    +}
    +
    +type QueryFilterInfoIdsResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type QueryFilterList QueryFilterListRequestType
    +
    +func init() {
    +	t["QueryFilterList"] = reflect.TypeOf((*QueryFilterList)(nil)).Elem()
    +}
    +
    +type QueryFilterListRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +}
    +
    +func init() {
    +	t["QueryFilterListRequestType"] = reflect.TypeOf((*QueryFilterListRequestType)(nil)).Elem()
    +}
    +
    +type QueryFilterListResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type QueryFilterName QueryFilterNameRequestType
    +
    +func init() {
    +	t["QueryFilterName"] = reflect.TypeOf((*QueryFilterName)(nil)).Elem()
    +}
    +
    +type QueryFilterNameRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +}
    +
    +func init() {
    +	t["QueryFilterNameRequestType"] = reflect.TypeOf((*QueryFilterNameRequestType)(nil)).Elem()
    +}
    +
    +type QueryFilterNameResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryFirmwareConfigUploadURL QueryFirmwareConfigUploadURLRequestType
    +
    +func init() {
    +	t["QueryFirmwareConfigUploadURL"] = reflect.TypeOf((*QueryFirmwareConfigUploadURL)(nil)).Elem()
    +}
    +
    +type QueryFirmwareConfigUploadURLRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryFirmwareConfigUploadURLRequestType"] = reflect.TypeOf((*QueryFirmwareConfigUploadURLRequestType)(nil)).Elem()
    +}
    +
    +type QueryFirmwareConfigUploadURLResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryHealthUpdateInfos QueryHealthUpdateInfosRequestType
    +
    +func init() {
    +	t["QueryHealthUpdateInfos"] = reflect.TypeOf((*QueryHealthUpdateInfos)(nil)).Elem()
    +}
    +
    +type QueryHealthUpdateInfosRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +}
    +
    +func init() {
    +	t["QueryHealthUpdateInfosRequestType"] = reflect.TypeOf((*QueryHealthUpdateInfosRequestType)(nil)).Elem()
    +}
    +
    +type QueryHealthUpdateInfosResponse struct {
    +	Returnval []HealthUpdateInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryHealthUpdates QueryHealthUpdatesRequestType
    +
    +func init() {
    +	t["QueryHealthUpdates"] = reflect.TypeOf((*QueryHealthUpdates)(nil)).Elem()
    +}
    +
    +type QueryHealthUpdatesRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +}
    +
    +func init() {
    +	t["QueryHealthUpdatesRequestType"] = reflect.TypeOf((*QueryHealthUpdatesRequestType)(nil)).Elem()
    +}
    +
    +type QueryHealthUpdatesResponse struct {
    +	Returnval []HealthUpdate `xml:"returnval,omitempty"`
    +}
    +
    +type QueryHostConnectionInfo QueryHostConnectionInfoRequestType
    +
    +func init() {
    +	t["QueryHostConnectionInfo"] = reflect.TypeOf((*QueryHostConnectionInfo)(nil)).Elem()
    +}
    +
    +type QueryHostConnectionInfoRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryHostConnectionInfoRequestType"] = reflect.TypeOf((*QueryHostConnectionInfoRequestType)(nil)).Elem()
    +}
    +
    +type QueryHostConnectionInfoResponse struct {
    +	Returnval HostConnectInfo `xml:"returnval"`
    +}
    +
    +type QueryHostPatchRequestType struct {
    +	This ManagedObjectReference                     `xml:"_this"`
    +	Spec *HostPatchManagerPatchManagerOperationSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryHostPatchRequestType"] = reflect.TypeOf((*QueryHostPatchRequestType)(nil)).Elem()
    +}
    +
    +type QueryHostPatch_Task QueryHostPatchRequestType
    +
    +func init() {
    +	t["QueryHostPatch_Task"] = reflect.TypeOf((*QueryHostPatch_Task)(nil)).Elem()
    +}
    +
    +type QueryHostPatch_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type QueryHostProfileMetadata QueryHostProfileMetadataRequestType
    +
    +func init() {
    +	t["QueryHostProfileMetadata"] = reflect.TypeOf((*QueryHostProfileMetadata)(nil)).Elem()
    +}
    +
    +type QueryHostProfileMetadataRequestType struct {
    +	This        ManagedObjectReference  `xml:"_this"`
    +	ProfileName []string                `xml:"profileName,omitempty"`
    +	Profile     *ManagedObjectReference `xml:"profile,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryHostProfileMetadataRequestType"] = reflect.TypeOf((*QueryHostProfileMetadataRequestType)(nil)).Elem()
    +}
    +
    +type QueryHostProfileMetadataResponse struct {
    +	Returnval []ProfileMetadata `xml:"returnval,omitempty"`
    +}
    +
    +type QueryHostStatus QueryHostStatusRequestType
    +
    +func init() {
    +	t["QueryHostStatus"] = reflect.TypeOf((*QueryHostStatus)(nil)).Elem()
    +}
    +
    +type QueryHostStatusRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryHostStatusRequestType"] = reflect.TypeOf((*QueryHostStatusRequestType)(nil)).Elem()
    +}
    +
    +type QueryHostStatusResponse struct {
    +	Returnval VsanHostClusterStatus `xml:"returnval"`
    +}
    +
    +type QueryIORMConfigOption QueryIORMConfigOptionRequestType
    +
    +func init() {
    +	t["QueryIORMConfigOption"] = reflect.TypeOf((*QueryIORMConfigOption)(nil)).Elem()
    +}
    +
    +type QueryIORMConfigOptionRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["QueryIORMConfigOptionRequestType"] = reflect.TypeOf((*QueryIORMConfigOptionRequestType)(nil)).Elem()
    +}
    +
    +type QueryIORMConfigOptionResponse struct {
    +	Returnval StorageIORMConfigOption `xml:"returnval"`
    +}
    +
    +type QueryIPAllocations QueryIPAllocationsRequestType
    +
    +func init() {
    +	t["QueryIPAllocations"] = reflect.TypeOf((*QueryIPAllocations)(nil)).Elem()
    +}
    +
    +type QueryIPAllocationsRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Dc           ManagedObjectReference `xml:"dc"`
    +	PoolId       int32                  `xml:"poolId"`
    +	ExtensionKey string                 `xml:"extensionKey"`
    +}
    +
    +func init() {
    +	t["QueryIPAllocationsRequestType"] = reflect.TypeOf((*QueryIPAllocationsRequestType)(nil)).Elem()
    +}
    +
    +type QueryIPAllocationsResponse struct {
    +	Returnval []IpPoolManagerIpAllocation `xml:"returnval"`
    +}
    +
    +type QueryIoFilterInfo QueryIoFilterInfoRequestType
    +
    +func init() {
    +	t["QueryIoFilterInfo"] = reflect.TypeOf((*QueryIoFilterInfo)(nil)).Elem()
    +}
    +
    +type QueryIoFilterInfoRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	CompRes ManagedObjectReference `xml:"compRes"`
    +}
    +
    +func init() {
    +	t["QueryIoFilterInfoRequestType"] = reflect.TypeOf((*QueryIoFilterInfoRequestType)(nil)).Elem()
    +}
    +
    +type QueryIoFilterInfoResponse struct {
    +	Returnval []ClusterIoFilterInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryIoFilterIssues QueryIoFilterIssuesRequestType
    +
    +func init() {
    +	t["QueryIoFilterIssues"] = reflect.TypeOf((*QueryIoFilterIssues)(nil)).Elem()
    +}
    +
    +type QueryIoFilterIssuesRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +	CompRes  ManagedObjectReference `xml:"compRes"`
    +}
    +
    +func init() {
    +	t["QueryIoFilterIssuesRequestType"] = reflect.TypeOf((*QueryIoFilterIssuesRequestType)(nil)).Elem()
    +}
    +
    +type QueryIoFilterIssuesResponse struct {
    +	Returnval IoFilterQueryIssueResult `xml:"returnval"`
    +}
    +
    +type QueryIpPools QueryIpPoolsRequestType
    +
    +func init() {
    +	t["QueryIpPools"] = reflect.TypeOf((*QueryIpPools)(nil)).Elem()
    +}
    +
    +type QueryIpPoolsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Dc   ManagedObjectReference `xml:"dc"`
    +}
    +
    +func init() {
    +	t["QueryIpPoolsRequestType"] = reflect.TypeOf((*QueryIpPoolsRequestType)(nil)).Elem()
    +}
    +
    +type QueryIpPoolsResponse struct {
    +	Returnval []IpPool `xml:"returnval,omitempty"`
    +}
    +
    +type QueryLicenseSourceAvailability QueryLicenseSourceAvailabilityRequestType
    +
    +func init() {
    +	t["QueryLicenseSourceAvailability"] = reflect.TypeOf((*QueryLicenseSourceAvailability)(nil)).Elem()
    +}
    +
    +type QueryLicenseSourceAvailabilityRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryLicenseSourceAvailabilityRequestType"] = reflect.TypeOf((*QueryLicenseSourceAvailabilityRequestType)(nil)).Elem()
    +}
    +
    +type QueryLicenseSourceAvailabilityResponse struct {
    +	Returnval []LicenseAvailabilityInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryLicenseUsage QueryLicenseUsageRequestType
    +
    +func init() {
    +	t["QueryLicenseUsage"] = reflect.TypeOf((*QueryLicenseUsage)(nil)).Elem()
    +}
    +
    +type QueryLicenseUsageRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryLicenseUsageRequestType"] = reflect.TypeOf((*QueryLicenseUsageRequestType)(nil)).Elem()
    +}
    +
    +type QueryLicenseUsageResponse struct {
    +	Returnval LicenseUsageInfo `xml:"returnval"`
    +}
    +
    +type QueryLockdownExceptions QueryLockdownExceptionsRequestType
    +
    +func init() {
    +	t["QueryLockdownExceptions"] = reflect.TypeOf((*QueryLockdownExceptions)(nil)).Elem()
    +}
    +
    +type QueryLockdownExceptionsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryLockdownExceptionsRequestType"] = reflect.TypeOf((*QueryLockdownExceptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryLockdownExceptionsResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type QueryManagedBy QueryManagedByRequestType
    +
    +func init() {
    +	t["QueryManagedBy"] = reflect.TypeOf((*QueryManagedBy)(nil)).Elem()
    +}
    +
    +type QueryManagedByRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ExtensionKey string                 `xml:"extensionKey"`
    +}
    +
    +func init() {
    +	t["QueryManagedByRequestType"] = reflect.TypeOf((*QueryManagedByRequestType)(nil)).Elem()
    +}
    +
    +type QueryManagedByResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type QueryMemoryOverhead QueryMemoryOverheadRequestType
    +
    +func init() {
    +	t["QueryMemoryOverhead"] = reflect.TypeOf((*QueryMemoryOverhead)(nil)).Elem()
    +}
    +
    +type QueryMemoryOverheadEx QueryMemoryOverheadExRequestType
    +
    +func init() {
    +	t["QueryMemoryOverheadEx"] = reflect.TypeOf((*QueryMemoryOverheadEx)(nil)).Elem()
    +}
    +
    +type QueryMemoryOverheadExRequestType struct {
    +	This         ManagedObjectReference   `xml:"_this"`
    +	VmConfigInfo VirtualMachineConfigInfo `xml:"vmConfigInfo"`
    +}
    +
    +func init() {
    +	t["QueryMemoryOverheadExRequestType"] = reflect.TypeOf((*QueryMemoryOverheadExRequestType)(nil)).Elem()
    +}
    +
    +type QueryMemoryOverheadExResponse struct {
    +	Returnval int64 `xml:"returnval"`
    +}
    +
    +type QueryMemoryOverheadRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	MemorySize   int64                  `xml:"memorySize"`
    +	VideoRamSize int32                  `xml:"videoRamSize,omitempty"`
    +	NumVcpus     int32                  `xml:"numVcpus"`
    +}
    +
    +func init() {
    +	t["QueryMemoryOverheadRequestType"] = reflect.TypeOf((*QueryMemoryOverheadRequestType)(nil)).Elem()
    +}
    +
    +type QueryMemoryOverheadResponse struct {
    +	Returnval int64 `xml:"returnval"`
    +}
    +
    +type QueryMigrationDependencies QueryMigrationDependenciesRequestType
    +
    +func init() {
    +	t["QueryMigrationDependencies"] = reflect.TypeOf((*QueryMigrationDependencies)(nil)).Elem()
    +}
    +
    +type QueryMigrationDependenciesRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	PnicDevice []string               `xml:"pnicDevice"`
    +}
    +
    +func init() {
    +	t["QueryMigrationDependenciesRequestType"] = reflect.TypeOf((*QueryMigrationDependenciesRequestType)(nil)).Elem()
    +}
    +
    +type QueryMigrationDependenciesResponse struct {
    +	Returnval IscsiMigrationDependency `xml:"returnval"`
    +}
    +
    +type QueryModules QueryModulesRequestType
    +
    +func init() {
    +	t["QueryModules"] = reflect.TypeOf((*QueryModules)(nil)).Elem()
    +}
    +
    +type QueryModulesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryModulesRequestType"] = reflect.TypeOf((*QueryModulesRequestType)(nil)).Elem()
    +}
    +
    +type QueryModulesResponse struct {
    +	Returnval []KernelModuleInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryMonitoredEntities QueryMonitoredEntitiesRequestType
    +
    +func init() {
    +	t["QueryMonitoredEntities"] = reflect.TypeOf((*QueryMonitoredEntities)(nil)).Elem()
    +}
    +
    +type QueryMonitoredEntitiesRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +}
    +
    +func init() {
    +	t["QueryMonitoredEntitiesRequestType"] = reflect.TypeOf((*QueryMonitoredEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type QueryMonitoredEntitiesResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type QueryNFSUser QueryNFSUserRequestType
    +
    +func init() {
    +	t["QueryNFSUser"] = reflect.TypeOf((*QueryNFSUser)(nil)).Elem()
    +}
    +
    +type QueryNFSUserRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryNFSUserRequestType"] = reflect.TypeOf((*QueryNFSUserRequestType)(nil)).Elem()
    +}
    +
    +type QueryNFSUserResponse struct {
    +	Returnval *HostNasVolumeUserInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryNetConfig QueryNetConfigRequestType
    +
    +func init() {
    +	t["QueryNetConfig"] = reflect.TypeOf((*QueryNetConfig)(nil)).Elem()
    +}
    +
    +type QueryNetConfigRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	NicType string                 `xml:"nicType"`
    +}
    +
    +func init() {
    +	t["QueryNetConfigRequestType"] = reflect.TypeOf((*QueryNetConfigRequestType)(nil)).Elem()
    +}
    +
    +type QueryNetConfigResponse struct {
    +	Returnval *VirtualNicManagerNetConfig `xml:"returnval,omitempty"`
    +}
    +
    +type QueryNetworkHint QueryNetworkHintRequestType
    +
    +func init() {
    +	t["QueryNetworkHint"] = reflect.TypeOf((*QueryNetworkHint)(nil)).Elem()
    +}
    +
    +type QueryNetworkHintRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Device []string               `xml:"device,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryNetworkHintRequestType"] = reflect.TypeOf((*QueryNetworkHintRequestType)(nil)).Elem()
    +}
    +
    +type QueryNetworkHintResponse struct {
    +	Returnval []PhysicalNicHintInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryObjectsOnPhysicalVsanDisk QueryObjectsOnPhysicalVsanDiskRequestType
    +
    +func init() {
    +	t["QueryObjectsOnPhysicalVsanDisk"] = reflect.TypeOf((*QueryObjectsOnPhysicalVsanDisk)(nil)).Elem()
    +}
    +
    +type QueryObjectsOnPhysicalVsanDiskRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Disks []string               `xml:"disks"`
    +}
    +
    +func init() {
    +	t["QueryObjectsOnPhysicalVsanDiskRequestType"] = reflect.TypeOf((*QueryObjectsOnPhysicalVsanDiskRequestType)(nil)).Elem()
    +}
    +
    +type QueryObjectsOnPhysicalVsanDiskResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryOptions QueryOptionsRequestType
    +
    +func init() {
    +	t["QueryOptions"] = reflect.TypeOf((*QueryOptions)(nil)).Elem()
    +}
    +
    +type QueryOptionsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Name string                 `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryOptionsRequestType"] = reflect.TypeOf((*QueryOptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryOptionsResponse struct {
    +	Returnval []BaseOptionValue `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type QueryPartitionCreateDesc QueryPartitionCreateDescRequestType
    +
    +func init() {
    +	t["QueryPartitionCreateDesc"] = reflect.TypeOf((*QueryPartitionCreateDesc)(nil)).Elem()
    +}
    +
    +type QueryPartitionCreateDescRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	DiskUuid       string                 `xml:"diskUuid"`
    +	DiagnosticType string                 `xml:"diagnosticType"`
    +}
    +
    +func init() {
    +	t["QueryPartitionCreateDescRequestType"] = reflect.TypeOf((*QueryPartitionCreateDescRequestType)(nil)).Elem()
    +}
    +
    +type QueryPartitionCreateDescResponse struct {
    +	Returnval HostDiagnosticPartitionCreateDescription `xml:"returnval"`
    +}
    +
    +type QueryPartitionCreateOptions QueryPartitionCreateOptionsRequestType
    +
    +func init() {
    +	t["QueryPartitionCreateOptions"] = reflect.TypeOf((*QueryPartitionCreateOptions)(nil)).Elem()
    +}
    +
    +type QueryPartitionCreateOptionsRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	StorageType    string                 `xml:"storageType"`
    +	DiagnosticType string                 `xml:"diagnosticType"`
    +}
    +
    +func init() {
    +	t["QueryPartitionCreateOptionsRequestType"] = reflect.TypeOf((*QueryPartitionCreateOptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryPartitionCreateOptionsResponse struct {
    +	Returnval []HostDiagnosticPartitionCreateOption `xml:"returnval,omitempty"`
    +}
    +
    +type QueryPathSelectionPolicyOptions QueryPathSelectionPolicyOptionsRequestType
    +
    +func init() {
    +	t["QueryPathSelectionPolicyOptions"] = reflect.TypeOf((*QueryPathSelectionPolicyOptions)(nil)).Elem()
    +}
    +
    +type QueryPathSelectionPolicyOptionsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryPathSelectionPolicyOptionsRequestType"] = reflect.TypeOf((*QueryPathSelectionPolicyOptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryPathSelectionPolicyOptionsResponse struct {
    +	Returnval []HostPathSelectionPolicyOption `xml:"returnval,omitempty"`
    +}
    +
    +type QueryPerf QueryPerfRequestType
    +
    +func init() {
    +	t["QueryPerf"] = reflect.TypeOf((*QueryPerf)(nil)).Elem()
    +}
    +
    +type QueryPerfComposite QueryPerfCompositeRequestType
    +
    +func init() {
    +	t["QueryPerfComposite"] = reflect.TypeOf((*QueryPerfComposite)(nil)).Elem()
    +}
    +
    +type QueryPerfCompositeRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	QuerySpec PerfQuerySpec          `xml:"querySpec"`
    +}
    +
    +func init() {
    +	t["QueryPerfCompositeRequestType"] = reflect.TypeOf((*QueryPerfCompositeRequestType)(nil)).Elem()
    +}
    +
    +type QueryPerfCompositeResponse struct {
    +	Returnval PerfCompositeMetric `xml:"returnval"`
    +}
    +
    +type QueryPerfCounter QueryPerfCounterRequestType
    +
    +func init() {
    +	t["QueryPerfCounter"] = reflect.TypeOf((*QueryPerfCounter)(nil)).Elem()
    +}
    +
    +type QueryPerfCounterByLevel QueryPerfCounterByLevelRequestType
    +
    +func init() {
    +	t["QueryPerfCounterByLevel"] = reflect.TypeOf((*QueryPerfCounterByLevel)(nil)).Elem()
    +}
    +
    +type QueryPerfCounterByLevelRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Level int32                  `xml:"level"`
    +}
    +
    +func init() {
    +	t["QueryPerfCounterByLevelRequestType"] = reflect.TypeOf((*QueryPerfCounterByLevelRequestType)(nil)).Elem()
    +}
    +
    +type QueryPerfCounterByLevelResponse struct {
    +	Returnval []PerfCounterInfo `xml:"returnval"`
    +}
    +
    +type QueryPerfCounterRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	CounterId []int32                `xml:"counterId"`
    +}
    +
    +func init() {
    +	t["QueryPerfCounterRequestType"] = reflect.TypeOf((*QueryPerfCounterRequestType)(nil)).Elem()
    +}
    +
    +type QueryPerfCounterResponse struct {
    +	Returnval []PerfCounterInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryPerfProviderSummary QueryPerfProviderSummaryRequestType
    +
    +func init() {
    +	t["QueryPerfProviderSummary"] = reflect.TypeOf((*QueryPerfProviderSummary)(nil)).Elem()
    +}
    +
    +type QueryPerfProviderSummaryRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["QueryPerfProviderSummaryRequestType"] = reflect.TypeOf((*QueryPerfProviderSummaryRequestType)(nil)).Elem()
    +}
    +
    +type QueryPerfProviderSummaryResponse struct {
    +	Returnval PerfProviderSummary `xml:"returnval"`
    +}
    +
    +type QueryPerfRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	QuerySpec []PerfQuerySpec        `xml:"querySpec"`
    +}
    +
    +func init() {
    +	t["QueryPerfRequestType"] = reflect.TypeOf((*QueryPerfRequestType)(nil)).Elem()
    +}
    +
    +type QueryPerfResponse struct {
    +	Returnval []BasePerfEntityMetricBase `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type QueryPhysicalVsanDisks QueryPhysicalVsanDisksRequestType
    +
    +func init() {
    +	t["QueryPhysicalVsanDisks"] = reflect.TypeOf((*QueryPhysicalVsanDisks)(nil)).Elem()
    +}
    +
    +type QueryPhysicalVsanDisksRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Props []string               `xml:"props,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryPhysicalVsanDisksRequestType"] = reflect.TypeOf((*QueryPhysicalVsanDisksRequestType)(nil)).Elem()
    +}
    +
    +type QueryPhysicalVsanDisksResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryPnicStatus QueryPnicStatusRequestType
    +
    +func init() {
    +	t["QueryPnicStatus"] = reflect.TypeOf((*QueryPnicStatus)(nil)).Elem()
    +}
    +
    +type QueryPnicStatusRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	PnicDevice string                 `xml:"pnicDevice"`
    +}
    +
    +func init() {
    +	t["QueryPnicStatusRequestType"] = reflect.TypeOf((*QueryPnicStatusRequestType)(nil)).Elem()
    +}
    +
    +type QueryPnicStatusResponse struct {
    +	Returnval IscsiStatus `xml:"returnval"`
    +}
    +
    +type QueryPolicyMetadata QueryPolicyMetadataRequestType
    +
    +func init() {
    +	t["QueryPolicyMetadata"] = reflect.TypeOf((*QueryPolicyMetadata)(nil)).Elem()
    +}
    +
    +type QueryPolicyMetadataRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	PolicyName []string                `xml:"policyName,omitempty"`
    +	Profile    *ManagedObjectReference `xml:"profile,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryPolicyMetadataRequestType"] = reflect.TypeOf((*QueryPolicyMetadataRequestType)(nil)).Elem()
    +}
    +
    +type QueryPolicyMetadataResponse struct {
    +	Returnval []ProfilePolicyMetadata `xml:"returnval,omitempty"`
    +}
    +
    +type QueryProfileStructure QueryProfileStructureRequestType
    +
    +func init() {
    +	t["QueryProfileStructure"] = reflect.TypeOf((*QueryProfileStructure)(nil)).Elem()
    +}
    +
    +type QueryProfileStructureRequestType struct {
    +	This    ManagedObjectReference  `xml:"_this"`
    +	Profile *ManagedObjectReference `xml:"profile,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryProfileStructureRequestType"] = reflect.TypeOf((*QueryProfileStructureRequestType)(nil)).Elem()
    +}
    +
    +type QueryProfileStructureResponse struct {
    +	Returnval ProfileProfileStructure `xml:"returnval"`
    +}
    +
    +type QueryProviderList QueryProviderListRequestType
    +
    +func init() {
    +	t["QueryProviderList"] = reflect.TypeOf((*QueryProviderList)(nil)).Elem()
    +}
    +
    +type QueryProviderListRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryProviderListRequestType"] = reflect.TypeOf((*QueryProviderListRequestType)(nil)).Elem()
    +}
    +
    +type QueryProviderListResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type QueryProviderName QueryProviderNameRequestType
    +
    +func init() {
    +	t["QueryProviderName"] = reflect.TypeOf((*QueryProviderName)(nil)).Elem()
    +}
    +
    +type QueryProviderNameRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   string                 `xml:"id"`
    +}
    +
    +func init() {
    +	t["QueryProviderNameRequestType"] = reflect.TypeOf((*QueryProviderNameRequestType)(nil)).Elem()
    +}
    +
    +type QueryProviderNameResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryResourceConfigOption QueryResourceConfigOptionRequestType
    +
    +func init() {
    +	t["QueryResourceConfigOption"] = reflect.TypeOf((*QueryResourceConfigOption)(nil)).Elem()
    +}
    +
    +type QueryResourceConfigOptionRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryResourceConfigOptionRequestType"] = reflect.TypeOf((*QueryResourceConfigOptionRequestType)(nil)).Elem()
    +}
    +
    +type QueryResourceConfigOptionResponse struct {
    +	Returnval ResourceConfigOption `xml:"returnval"`
    +}
    +
    +type QueryServiceList QueryServiceListRequestType
    +
    +func init() {
    +	t["QueryServiceList"] = reflect.TypeOf((*QueryServiceList)(nil)).Elem()
    +}
    +
    +type QueryServiceListRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	ServiceName string                 `xml:"serviceName,omitempty"`
    +	Location    []string               `xml:"location,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryServiceListRequestType"] = reflect.TypeOf((*QueryServiceListRequestType)(nil)).Elem()
    +}
    +
    +type QueryServiceListResponse struct {
    +	Returnval []ServiceManagerServiceInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QueryStorageArrayTypePolicyOptions QueryStorageArrayTypePolicyOptionsRequestType
    +
    +func init() {
    +	t["QueryStorageArrayTypePolicyOptions"] = reflect.TypeOf((*QueryStorageArrayTypePolicyOptions)(nil)).Elem()
    +}
    +
    +type QueryStorageArrayTypePolicyOptionsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryStorageArrayTypePolicyOptionsRequestType"] = reflect.TypeOf((*QueryStorageArrayTypePolicyOptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryStorageArrayTypePolicyOptionsResponse struct {
    +	Returnval []HostStorageArrayTypePolicyOption `xml:"returnval,omitempty"`
    +}
    +
    +type QuerySupportedFeatures QuerySupportedFeaturesRequestType
    +
    +func init() {
    +	t["QuerySupportedFeatures"] = reflect.TypeOf((*QuerySupportedFeatures)(nil)).Elem()
    +}
    +
    +type QuerySupportedFeaturesRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["QuerySupportedFeaturesRequestType"] = reflect.TypeOf((*QuerySupportedFeaturesRequestType)(nil)).Elem()
    +}
    +
    +type QuerySupportedFeaturesResponse struct {
    +	Returnval []LicenseFeatureInfo `xml:"returnval,omitempty"`
    +}
    +
    +type QuerySyncingVsanObjects QuerySyncingVsanObjectsRequestType
    +
    +func init() {
    +	t["QuerySyncingVsanObjects"] = reflect.TypeOf((*QuerySyncingVsanObjects)(nil)).Elem()
    +}
    +
    +type QuerySyncingVsanObjectsRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Uuids []string               `xml:"uuids,omitempty"`
    +}
    +
    +func init() {
    +	t["QuerySyncingVsanObjectsRequestType"] = reflect.TypeOf((*QuerySyncingVsanObjectsRequestType)(nil)).Elem()
    +}
    +
    +type QuerySyncingVsanObjectsResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QuerySystemUsers QuerySystemUsersRequestType
    +
    +func init() {
    +	t["QuerySystemUsers"] = reflect.TypeOf((*QuerySystemUsers)(nil)).Elem()
    +}
    +
    +type QuerySystemUsersRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QuerySystemUsersRequestType"] = reflect.TypeOf((*QuerySystemUsersRequestType)(nil)).Elem()
    +}
    +
    +type QuerySystemUsersResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type QueryTargetCapabilities QueryTargetCapabilitiesRequestType
    +
    +func init() {
    +	t["QueryTargetCapabilities"] = reflect.TypeOf((*QueryTargetCapabilities)(nil)).Elem()
    +}
    +
    +type QueryTargetCapabilitiesRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryTargetCapabilitiesRequestType"] = reflect.TypeOf((*QueryTargetCapabilitiesRequestType)(nil)).Elem()
    +}
    +
    +type QueryTargetCapabilitiesResponse struct {
    +	Returnval *HostCapability `xml:"returnval,omitempty"`
    +}
    +
    +type QueryTpmAttestationReport QueryTpmAttestationReportRequestType
    +
    +func init() {
    +	t["QueryTpmAttestationReport"] = reflect.TypeOf((*QueryTpmAttestationReport)(nil)).Elem()
    +}
    +
    +type QueryTpmAttestationReportRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryTpmAttestationReportRequestType"] = reflect.TypeOf((*QueryTpmAttestationReportRequestType)(nil)).Elem()
    +}
    +
    +type QueryTpmAttestationReportResponse struct {
    +	Returnval *HostTpmAttestationReport `xml:"returnval,omitempty"`
    +}
    +
    +type QueryUnmonitoredHosts QueryUnmonitoredHostsRequestType
    +
    +func init() {
    +	t["QueryUnmonitoredHosts"] = reflect.TypeOf((*QueryUnmonitoredHosts)(nil)).Elem()
    +}
    +
    +type QueryUnmonitoredHostsRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +	Cluster    ManagedObjectReference `xml:"cluster"`
    +}
    +
    +func init() {
    +	t["QueryUnmonitoredHostsRequestType"] = reflect.TypeOf((*QueryUnmonitoredHostsRequestType)(nil)).Elem()
    +}
    +
    +type QueryUnmonitoredHostsResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type QueryUnownedFiles QueryUnownedFilesRequestType
    +
    +func init() {
    +	t["QueryUnownedFiles"] = reflect.TypeOf((*QueryUnownedFiles)(nil)).Elem()
    +}
    +
    +type QueryUnownedFilesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryUnownedFilesRequestType"] = reflect.TypeOf((*QueryUnownedFilesRequestType)(nil)).Elem()
    +}
    +
    +type QueryUnownedFilesResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type QueryUnresolvedVmfsVolume QueryUnresolvedVmfsVolumeRequestType
    +
    +func init() {
    +	t["QueryUnresolvedVmfsVolume"] = reflect.TypeOf((*QueryUnresolvedVmfsVolume)(nil)).Elem()
    +}
    +
    +type QueryUnresolvedVmfsVolumeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryUnresolvedVmfsVolumeRequestType"] = reflect.TypeOf((*QueryUnresolvedVmfsVolumeRequestType)(nil)).Elem()
    +}
    +
    +type QueryUnresolvedVmfsVolumeResponse struct {
    +	Returnval []HostUnresolvedVmfsVolume `xml:"returnval,omitempty"`
    +}
    +
    +type QueryUnresolvedVmfsVolumes QueryUnresolvedVmfsVolumesRequestType
    +
    +func init() {
    +	t["QueryUnresolvedVmfsVolumes"] = reflect.TypeOf((*QueryUnresolvedVmfsVolumes)(nil)).Elem()
    +}
    +
    +type QueryUnresolvedVmfsVolumesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryUnresolvedVmfsVolumesRequestType"] = reflect.TypeOf((*QueryUnresolvedVmfsVolumesRequestType)(nil)).Elem()
    +}
    +
    +type QueryUnresolvedVmfsVolumesResponse struct {
    +	Returnval []HostUnresolvedVmfsVolume `xml:"returnval,omitempty"`
    +}
    +
    +type QueryUsedVlanIdInDvs QueryUsedVlanIdInDvsRequestType
    +
    +func init() {
    +	t["QueryUsedVlanIdInDvs"] = reflect.TypeOf((*QueryUsedVlanIdInDvs)(nil)).Elem()
    +}
    +
    +type QueryUsedVlanIdInDvsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryUsedVlanIdInDvsRequestType"] = reflect.TypeOf((*QueryUsedVlanIdInDvsRequestType)(nil)).Elem()
    +}
    +
    +type QueryUsedVlanIdInDvsResponse struct {
    +	Returnval []int32 `xml:"returnval,omitempty"`
    +}
    +
    +type QueryVMotionCompatibility QueryVMotionCompatibilityRequestType
    +
    +func init() {
    +	t["QueryVMotionCompatibility"] = reflect.TypeOf((*QueryVMotionCompatibility)(nil)).Elem()
    +}
    +
    +type QueryVMotionCompatibilityExRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Vm   []ManagedObjectReference `xml:"vm"`
    +	Host []ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["QueryVMotionCompatibilityExRequestType"] = reflect.TypeOf((*QueryVMotionCompatibilityExRequestType)(nil)).Elem()
    +}
    +
    +type QueryVMotionCompatibilityEx_Task QueryVMotionCompatibilityExRequestType
    +
    +func init() {
    +	t["QueryVMotionCompatibilityEx_Task"] = reflect.TypeOf((*QueryVMotionCompatibilityEx_Task)(nil)).Elem()
    +}
    +
    +type QueryVMotionCompatibilityEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type QueryVMotionCompatibilityRequestType struct {
    +	This          ManagedObjectReference   `xml:"_this"`
    +	Vm            ManagedObjectReference   `xml:"vm"`
    +	Host          []ManagedObjectReference `xml:"host"`
    +	Compatibility []string                 `xml:"compatibility,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryVMotionCompatibilityRequestType"] = reflect.TypeOf((*QueryVMotionCompatibilityRequestType)(nil)).Elem()
    +}
    +
    +type QueryVMotionCompatibilityResponse struct {
    +	Returnval []HostVMotionCompatibility `xml:"returnval,omitempty"`
    +}
    +
    +type QueryVirtualDiskFragmentation QueryVirtualDiskFragmentationRequestType
    +
    +func init() {
    +	t["QueryVirtualDiskFragmentation"] = reflect.TypeOf((*QueryVirtualDiskFragmentation)(nil)).Elem()
    +}
    +
    +type QueryVirtualDiskFragmentationRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryVirtualDiskFragmentationRequestType"] = reflect.TypeOf((*QueryVirtualDiskFragmentationRequestType)(nil)).Elem()
    +}
    +
    +type QueryVirtualDiskFragmentationResponse struct {
    +	Returnval int32 `xml:"returnval"`
    +}
    +
    +type QueryVirtualDiskGeometry QueryVirtualDiskGeometryRequestType
    +
    +func init() {
    +	t["QueryVirtualDiskGeometry"] = reflect.TypeOf((*QueryVirtualDiskGeometry)(nil)).Elem()
    +}
    +
    +type QueryVirtualDiskGeometryRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryVirtualDiskGeometryRequestType"] = reflect.TypeOf((*QueryVirtualDiskGeometryRequestType)(nil)).Elem()
    +}
    +
    +type QueryVirtualDiskGeometryResponse struct {
    +	Returnval HostDiskDimensionsChs `xml:"returnval"`
    +}
    +
    +type QueryVirtualDiskUuid QueryVirtualDiskUuidRequestType
    +
    +func init() {
    +	t["QueryVirtualDiskUuid"] = reflect.TypeOf((*QueryVirtualDiskUuid)(nil)).Elem()
    +}
    +
    +type QueryVirtualDiskUuidRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryVirtualDiskUuidRequestType"] = reflect.TypeOf((*QueryVirtualDiskUuidRequestType)(nil)).Elem()
    +}
    +
    +type QueryVirtualDiskUuidResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryVmfsConfigOption QueryVmfsConfigOptionRequestType
    +
    +func init() {
    +	t["QueryVmfsConfigOption"] = reflect.TypeOf((*QueryVmfsConfigOption)(nil)).Elem()
    +}
    +
    +type QueryVmfsConfigOptionRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["QueryVmfsConfigOptionRequestType"] = reflect.TypeOf((*QueryVmfsConfigOptionRequestType)(nil)).Elem()
    +}
    +
    +type QueryVmfsConfigOptionResponse struct {
    +	Returnval []VmfsConfigOption `xml:"returnval,omitempty"`
    +}
    +
    +type QueryVmfsDatastoreCreateOptions QueryVmfsDatastoreCreateOptionsRequestType
    +
    +func init() {
    +	t["QueryVmfsDatastoreCreateOptions"] = reflect.TypeOf((*QueryVmfsDatastoreCreateOptions)(nil)).Elem()
    +}
    +
    +type QueryVmfsDatastoreCreateOptionsRequestType struct {
    +	This             ManagedObjectReference `xml:"_this"`
    +	DevicePath       string                 `xml:"devicePath"`
    +	VmfsMajorVersion int32                  `xml:"vmfsMajorVersion,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryVmfsDatastoreCreateOptionsRequestType"] = reflect.TypeOf((*QueryVmfsDatastoreCreateOptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryVmfsDatastoreCreateOptionsResponse struct {
    +	Returnval []VmfsDatastoreOption `xml:"returnval,omitempty"`
    +}
    +
    +type QueryVmfsDatastoreExpandOptions QueryVmfsDatastoreExpandOptionsRequestType
    +
    +func init() {
    +	t["QueryVmfsDatastoreExpandOptions"] = reflect.TypeOf((*QueryVmfsDatastoreExpandOptions)(nil)).Elem()
    +}
    +
    +type QueryVmfsDatastoreExpandOptionsRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["QueryVmfsDatastoreExpandOptionsRequestType"] = reflect.TypeOf((*QueryVmfsDatastoreExpandOptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryVmfsDatastoreExpandOptionsResponse struct {
    +	Returnval []VmfsDatastoreOption `xml:"returnval,omitempty"`
    +}
    +
    +type QueryVmfsDatastoreExtendOptions QueryVmfsDatastoreExtendOptionsRequestType
    +
    +func init() {
    +	t["QueryVmfsDatastoreExtendOptions"] = reflect.TypeOf((*QueryVmfsDatastoreExtendOptions)(nil)).Elem()
    +}
    +
    +type QueryVmfsDatastoreExtendOptionsRequestType struct {
    +	This                     ManagedObjectReference `xml:"_this"`
    +	Datastore                ManagedObjectReference `xml:"datastore"`
    +	DevicePath               string                 `xml:"devicePath"`
    +	SuppressExpandCandidates *bool                  `xml:"suppressExpandCandidates"`
    +}
    +
    +func init() {
    +	t["QueryVmfsDatastoreExtendOptionsRequestType"] = reflect.TypeOf((*QueryVmfsDatastoreExtendOptionsRequestType)(nil)).Elem()
    +}
    +
    +type QueryVmfsDatastoreExtendOptionsResponse struct {
    +	Returnval []VmfsDatastoreOption `xml:"returnval,omitempty"`
    +}
    +
    +type QueryVnicStatus QueryVnicStatusRequestType
    +
    +func init() {
    +	t["QueryVnicStatus"] = reflect.TypeOf((*QueryVnicStatus)(nil)).Elem()
    +}
    +
    +type QueryVnicStatusRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	VnicDevice string                 `xml:"vnicDevice"`
    +}
    +
    +func init() {
    +	t["QueryVnicStatusRequestType"] = reflect.TypeOf((*QueryVnicStatusRequestType)(nil)).Elem()
    +}
    +
    +type QueryVnicStatusResponse struct {
    +	Returnval IscsiStatus `xml:"returnval"`
    +}
    +
    +type QueryVsanObjectUuidsByFilter QueryVsanObjectUuidsByFilterRequestType
    +
    +func init() {
    +	t["QueryVsanObjectUuidsByFilter"] = reflect.TypeOf((*QueryVsanObjectUuidsByFilter)(nil)).Elem()
    +}
    +
    +type QueryVsanObjectUuidsByFilterRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Uuids   []string               `xml:"uuids,omitempty"`
    +	Limit   *int32                 `xml:"limit"`
    +	Version int32                  `xml:"version,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryVsanObjectUuidsByFilterRequestType"] = reflect.TypeOf((*QueryVsanObjectUuidsByFilterRequestType)(nil)).Elem()
    +}
    +
    +type QueryVsanObjectUuidsByFilterResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type QueryVsanObjects QueryVsanObjectsRequestType
    +
    +func init() {
    +	t["QueryVsanObjects"] = reflect.TypeOf((*QueryVsanObjects)(nil)).Elem()
    +}
    +
    +type QueryVsanObjectsRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Uuids []string               `xml:"uuids,omitempty"`
    +}
    +
    +func init() {
    +	t["QueryVsanObjectsRequestType"] = reflect.TypeOf((*QueryVsanObjectsRequestType)(nil)).Elem()
    +}
    +
    +type QueryVsanObjectsResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryVsanStatistics QueryVsanStatisticsRequestType
    +
    +func init() {
    +	t["QueryVsanStatistics"] = reflect.TypeOf((*QueryVsanStatistics)(nil)).Elem()
    +}
    +
    +type QueryVsanStatisticsRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Labels []string               `xml:"labels"`
    +}
    +
    +func init() {
    +	t["QueryVsanStatisticsRequestType"] = reflect.TypeOf((*QueryVsanStatisticsRequestType)(nil)).Elem()
    +}
    +
    +type QueryVsanStatisticsResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type QueryVsanUpgradeStatus QueryVsanUpgradeStatusRequestType
    +
    +func init() {
    +	t["QueryVsanUpgradeStatus"] = reflect.TypeOf((*QueryVsanUpgradeStatus)(nil)).Elem()
    +}
    +
    +type QueryVsanUpgradeStatusRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Cluster ManagedObjectReference `xml:"cluster"`
    +}
    +
    +func init() {
    +	t["QueryVsanUpgradeStatusRequestType"] = reflect.TypeOf((*QueryVsanUpgradeStatusRequestType)(nil)).Elem()
    +}
    +
    +type QueryVsanUpgradeStatusResponse struct {
    +	Returnval VsanUpgradeSystemUpgradeStatus `xml:"returnval"`
    +}
    +
    +type QuestionPending struct {
    +	InvalidState
    +
    +	Text string `xml:"text"`
    +}
    +
    +func init() {
    +	t["QuestionPending"] = reflect.TypeOf((*QuestionPending)(nil)).Elem()
    +}
    +
    +type QuestionPendingFault QuestionPending
    +
    +func init() {
    +	t["QuestionPendingFault"] = reflect.TypeOf((*QuestionPendingFault)(nil)).Elem()
    +}
    +
    +type QuiesceDatastoreIOForHAFailed struct {
    +	ResourceInUse
    +
    +	Host     ManagedObjectReference `xml:"host"`
    +	HostName string                 `xml:"hostName"`
    +	Ds       ManagedObjectReference `xml:"ds"`
    +	DsName   string                 `xml:"dsName"`
    +}
    +
    +func init() {
    +	t["QuiesceDatastoreIOForHAFailed"] = reflect.TypeOf((*QuiesceDatastoreIOForHAFailed)(nil)).Elem()
    +}
    +
    +type QuiesceDatastoreIOForHAFailedFault QuiesceDatastoreIOForHAFailed
    +
    +func init() {
    +	t["QuiesceDatastoreIOForHAFailedFault"] = reflect.TypeOf((*QuiesceDatastoreIOForHAFailedFault)(nil)).Elem()
    +}
    +
    +type RDMConversionNotSupported struct {
    +	MigrationFault
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["RDMConversionNotSupported"] = reflect.TypeOf((*RDMConversionNotSupported)(nil)).Elem()
    +}
    +
    +type RDMConversionNotSupportedFault RDMConversionNotSupported
    +
    +func init() {
    +	t["RDMConversionNotSupportedFault"] = reflect.TypeOf((*RDMConversionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type RDMNotPreserved struct {
    +	MigrationFault
    +
    +	Device string `xml:"device"`
    +}
    +
    +func init() {
    +	t["RDMNotPreserved"] = reflect.TypeOf((*RDMNotPreserved)(nil)).Elem()
    +}
    +
    +type RDMNotPreservedFault RDMNotPreserved
    +
    +func init() {
    +	t["RDMNotPreservedFault"] = reflect.TypeOf((*RDMNotPreservedFault)(nil)).Elem()
    +}
    +
    +type RDMNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["RDMNotSupported"] = reflect.TypeOf((*RDMNotSupported)(nil)).Elem()
    +}
    +
    +type RDMNotSupportedFault BaseRDMNotSupported
    +
    +func init() {
    +	t["RDMNotSupportedFault"] = reflect.TypeOf((*RDMNotSupportedFault)(nil)).Elem()
    +}
    +
    +type RDMNotSupportedOnDatastore struct {
    +	VmConfigFault
    +
    +	Device        string                 `xml:"device"`
    +	Datastore     ManagedObjectReference `xml:"datastore"`
    +	DatastoreName string                 `xml:"datastoreName"`
    +}
    +
    +func init() {
    +	t["RDMNotSupportedOnDatastore"] = reflect.TypeOf((*RDMNotSupportedOnDatastore)(nil)).Elem()
    +}
    +
    +type RDMNotSupportedOnDatastoreFault RDMNotSupportedOnDatastore
    +
    +func init() {
    +	t["RDMNotSupportedOnDatastoreFault"] = reflect.TypeOf((*RDMNotSupportedOnDatastoreFault)(nil)).Elem()
    +}
    +
    +type RDMPointsToInaccessibleDisk struct {
    +	CannotAccessVmDisk
    +}
    +
    +func init() {
    +	t["RDMPointsToInaccessibleDisk"] = reflect.TypeOf((*RDMPointsToInaccessibleDisk)(nil)).Elem()
    +}
    +
    +type RDMPointsToInaccessibleDiskFault RDMPointsToInaccessibleDisk
    +
    +func init() {
    +	t["RDMPointsToInaccessibleDiskFault"] = reflect.TypeOf((*RDMPointsToInaccessibleDiskFault)(nil)).Elem()
    +}
    +
    +type RawDiskNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["RawDiskNotSupported"] = reflect.TypeOf((*RawDiskNotSupported)(nil)).Elem()
    +}
    +
    +type RawDiskNotSupportedFault RawDiskNotSupported
    +
    +func init() {
    +	t["RawDiskNotSupportedFault"] = reflect.TypeOf((*RawDiskNotSupportedFault)(nil)).Elem()
    +}
    +
    +type ReadEnvironmentVariableInGuest ReadEnvironmentVariableInGuestRequestType
    +
    +func init() {
    +	t["ReadEnvironmentVariableInGuest"] = reflect.TypeOf((*ReadEnvironmentVariableInGuest)(nil)).Elem()
    +}
    +
    +type ReadEnvironmentVariableInGuestRequestType struct {
    +	This  ManagedObjectReference  `xml:"_this"`
    +	Vm    ManagedObjectReference  `xml:"vm"`
    +	Auth  BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Names []string                `xml:"names,omitempty"`
    +}
    +
    +func init() {
    +	t["ReadEnvironmentVariableInGuestRequestType"] = reflect.TypeOf((*ReadEnvironmentVariableInGuestRequestType)(nil)).Elem()
    +}
    +
    +type ReadEnvironmentVariableInGuestResponse struct {
    +	Returnval []string `xml:"returnval,omitempty"`
    +}
    +
    +type ReadHostResourcePoolTreeFailed struct {
    +	HostConnectFault
    +}
    +
    +func init() {
    +	t["ReadHostResourcePoolTreeFailed"] = reflect.TypeOf((*ReadHostResourcePoolTreeFailed)(nil)).Elem()
    +}
    +
    +type ReadHostResourcePoolTreeFailedFault ReadHostResourcePoolTreeFailed
    +
    +func init() {
    +	t["ReadHostResourcePoolTreeFailedFault"] = reflect.TypeOf((*ReadHostResourcePoolTreeFailedFault)(nil)).Elem()
    +}
    +
    +type ReadNextEvents ReadNextEventsRequestType
    +
    +func init() {
    +	t["ReadNextEvents"] = reflect.TypeOf((*ReadNextEvents)(nil)).Elem()
    +}
    +
    +type ReadNextEventsRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	MaxCount int32                  `xml:"maxCount"`
    +}
    +
    +func init() {
    +	t["ReadNextEventsRequestType"] = reflect.TypeOf((*ReadNextEventsRequestType)(nil)).Elem()
    +}
    +
    +type ReadNextEventsResponse struct {
    +	Returnval []BaseEvent `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type ReadNextTasks ReadNextTasksRequestType
    +
    +func init() {
    +	t["ReadNextTasks"] = reflect.TypeOf((*ReadNextTasks)(nil)).Elem()
    +}
    +
    +type ReadNextTasksRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	MaxCount int32                  `xml:"maxCount"`
    +}
    +
    +func init() {
    +	t["ReadNextTasksRequestType"] = reflect.TypeOf((*ReadNextTasksRequestType)(nil)).Elem()
    +}
    +
    +type ReadNextTasksResponse struct {
    +	Returnval []TaskInfo `xml:"returnval,omitempty"`
    +}
    +
    +type ReadOnlyDisksWithLegacyDestination struct {
    +	MigrationFault
    +
    +	RoDiskCount   int32 `xml:"roDiskCount"`
    +	TimeoutDanger bool  `xml:"timeoutDanger"`
    +}
    +
    +func init() {
    +	t["ReadOnlyDisksWithLegacyDestination"] = reflect.TypeOf((*ReadOnlyDisksWithLegacyDestination)(nil)).Elem()
    +}
    +
    +type ReadOnlyDisksWithLegacyDestinationFault ReadOnlyDisksWithLegacyDestination
    +
    +func init() {
    +	t["ReadOnlyDisksWithLegacyDestinationFault"] = reflect.TypeOf((*ReadOnlyDisksWithLegacyDestinationFault)(nil)).Elem()
    +}
    +
    +type ReadPreviousEvents ReadPreviousEventsRequestType
    +
    +func init() {
    +	t["ReadPreviousEvents"] = reflect.TypeOf((*ReadPreviousEvents)(nil)).Elem()
    +}
    +
    +type ReadPreviousEventsRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	MaxCount int32                  `xml:"maxCount"`
    +}
    +
    +func init() {
    +	t["ReadPreviousEventsRequestType"] = reflect.TypeOf((*ReadPreviousEventsRequestType)(nil)).Elem()
    +}
    +
    +type ReadPreviousEventsResponse struct {
    +	Returnval []BaseEvent `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type ReadPreviousTasks ReadPreviousTasksRequestType
    +
    +func init() {
    +	t["ReadPreviousTasks"] = reflect.TypeOf((*ReadPreviousTasks)(nil)).Elem()
    +}
    +
    +type ReadPreviousTasksRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	MaxCount int32                  `xml:"maxCount"`
    +}
    +
    +func init() {
    +	t["ReadPreviousTasksRequestType"] = reflect.TypeOf((*ReadPreviousTasksRequestType)(nil)).Elem()
    +}
    +
    +type ReadPreviousTasksResponse struct {
    +	Returnval []TaskInfo `xml:"returnval,omitempty"`
    +}
    +
    +type RebootGuest RebootGuestRequestType
    +
    +func init() {
    +	t["RebootGuest"] = reflect.TypeOf((*RebootGuest)(nil)).Elem()
    +}
    +
    +type RebootGuestRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RebootGuestRequestType"] = reflect.TypeOf((*RebootGuestRequestType)(nil)).Elem()
    +}
    +
    +type RebootGuestResponse struct {
    +}
    +
    +type RebootHostRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Force bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["RebootHostRequestType"] = reflect.TypeOf((*RebootHostRequestType)(nil)).Elem()
    +}
    +
    +type RebootHost_Task RebootHostRequestType
    +
    +func init() {
    +	t["RebootHost_Task"] = reflect.TypeOf((*RebootHost_Task)(nil)).Elem()
    +}
    +
    +type RebootHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RebootRequired struct {
    +	VimFault
    +
    +	Patch string `xml:"patch,omitempty"`
    +}
    +
    +func init() {
    +	t["RebootRequired"] = reflect.TypeOf((*RebootRequired)(nil)).Elem()
    +}
    +
    +type RebootRequiredFault RebootRequired
    +
    +func init() {
    +	t["RebootRequiredFault"] = reflect.TypeOf((*RebootRequiredFault)(nil)).Elem()
    +}
    +
    +type RecommendDatastores RecommendDatastoresRequestType
    +
    +func init() {
    +	t["RecommendDatastores"] = reflect.TypeOf((*RecommendDatastores)(nil)).Elem()
    +}
    +
    +type RecommendDatastoresRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	StorageSpec StoragePlacementSpec   `xml:"storageSpec"`
    +}
    +
    +func init() {
    +	t["RecommendDatastoresRequestType"] = reflect.TypeOf((*RecommendDatastoresRequestType)(nil)).Elem()
    +}
    +
    +type RecommendDatastoresResponse struct {
    +	Returnval StoragePlacementResult `xml:"returnval"`
    +}
    +
    +type RecommendHostsForVm RecommendHostsForVmRequestType
    +
    +func init() {
    +	t["RecommendHostsForVm"] = reflect.TypeOf((*RecommendHostsForVm)(nil)).Elem()
    +}
    +
    +type RecommendHostsForVmRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Pool *ManagedObjectReference `xml:"pool,omitempty"`
    +}
    +
    +func init() {
    +	t["RecommendHostsForVmRequestType"] = reflect.TypeOf((*RecommendHostsForVmRequestType)(nil)).Elem()
    +}
    +
    +type RecommendHostsForVmResponse struct {
    +	Returnval []ClusterHostRecommendation `xml:"returnval,omitempty"`
    +}
    +
    +type RecommissionVsanNodeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RecommissionVsanNodeRequestType"] = reflect.TypeOf((*RecommissionVsanNodeRequestType)(nil)).Elem()
    +}
    +
    +type RecommissionVsanNode_Task RecommissionVsanNodeRequestType
    +
    +func init() {
    +	t["RecommissionVsanNode_Task"] = reflect.TypeOf((*RecommissionVsanNode_Task)(nil)).Elem()
    +}
    +
    +type RecommissionVsanNode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconcileDatastoreInventoryRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["ReconcileDatastoreInventoryRequestType"] = reflect.TypeOf((*ReconcileDatastoreInventoryRequestType)(nil)).Elem()
    +}
    +
    +type ReconcileDatastoreInventory_Task ReconcileDatastoreInventoryRequestType
    +
    +func init() {
    +	t["ReconcileDatastoreInventory_Task"] = reflect.TypeOf((*ReconcileDatastoreInventory_Task)(nil)).Elem()
    +}
    +
    +type ReconcileDatastoreInventory_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigVMRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Spec VirtualMachineConfigSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ReconfigVMRequestType"] = reflect.TypeOf((*ReconfigVMRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigVM_Task ReconfigVMRequestType
    +
    +func init() {
    +	t["ReconfigVM_Task"] = reflect.TypeOf((*ReconfigVM_Task)(nil)).Elem()
    +}
    +
    +type ReconfigVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigurationSatisfiable ReconfigurationSatisfiableRequestType
    +
    +func init() {
    +	t["ReconfigurationSatisfiable"] = reflect.TypeOf((*ReconfigurationSatisfiable)(nil)).Elem()
    +}
    +
    +type ReconfigurationSatisfiableRequestType struct {
    +	This                 ManagedObjectReference  `xml:"_this"`
    +	Pcbs                 []VsanPolicyChangeBatch `xml:"pcbs"`
    +	IgnoreSatisfiability *bool                   `xml:"ignoreSatisfiability"`
    +}
    +
    +func init() {
    +	t["ReconfigurationSatisfiableRequestType"] = reflect.TypeOf((*ReconfigurationSatisfiableRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigurationSatisfiableResponse struct {
    +	Returnval []VsanPolicySatisfiability `xml:"returnval"`
    +}
    +
    +type ReconfigureAlarm ReconfigureAlarmRequestType
    +
    +func init() {
    +	t["ReconfigureAlarm"] = reflect.TypeOf((*ReconfigureAlarm)(nil)).Elem()
    +}
    +
    +type ReconfigureAlarmRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec BaseAlarmSpec          `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["ReconfigureAlarmRequestType"] = reflect.TypeOf((*ReconfigureAlarmRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureAlarmResponse struct {
    +}
    +
    +type ReconfigureAutostart ReconfigureAutostartRequestType
    +
    +func init() {
    +	t["ReconfigureAutostart"] = reflect.TypeOf((*ReconfigureAutostart)(nil)).Elem()
    +}
    +
    +type ReconfigureAutostartRequestType struct {
    +	This ManagedObjectReference     `xml:"_this"`
    +	Spec HostAutoStartManagerConfig `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ReconfigureAutostartRequestType"] = reflect.TypeOf((*ReconfigureAutostartRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureAutostartResponse struct {
    +}
    +
    +type ReconfigureClusterRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Spec   ClusterConfigSpec      `xml:"spec"`
    +	Modify bool                   `xml:"modify"`
    +}
    +
    +func init() {
    +	t["ReconfigureClusterRequestType"] = reflect.TypeOf((*ReconfigureClusterRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureCluster_Task ReconfigureClusterRequestType
    +
    +func init() {
    +	t["ReconfigureCluster_Task"] = reflect.TypeOf((*ReconfigureCluster_Task)(nil)).Elem()
    +}
    +
    +type ReconfigureCluster_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigureComputeResourceRequestType struct {
    +	This   ManagedObjectReference        `xml:"_this"`
    +	Spec   BaseComputeResourceConfigSpec `xml:"spec,typeattr"`
    +	Modify bool                          `xml:"modify"`
    +}
    +
    +func init() {
    +	t["ReconfigureComputeResourceRequestType"] = reflect.TypeOf((*ReconfigureComputeResourceRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureComputeResource_Task ReconfigureComputeResourceRequestType
    +
    +func init() {
    +	t["ReconfigureComputeResource_Task"] = reflect.TypeOf((*ReconfigureComputeResource_Task)(nil)).Elem()
    +}
    +
    +type ReconfigureComputeResource_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigureDVPortRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Port []DVPortConfigSpec     `xml:"port"`
    +}
    +
    +func init() {
    +	t["ReconfigureDVPortRequestType"] = reflect.TypeOf((*ReconfigureDVPortRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureDVPort_Task ReconfigureDVPortRequestType
    +
    +func init() {
    +	t["ReconfigureDVPort_Task"] = reflect.TypeOf((*ReconfigureDVPort_Task)(nil)).Elem()
    +}
    +
    +type ReconfigureDVPort_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigureDVPortgroupRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec DVPortgroupConfigSpec  `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ReconfigureDVPortgroupRequestType"] = reflect.TypeOf((*ReconfigureDVPortgroupRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureDVPortgroup_Task ReconfigureDVPortgroupRequestType
    +
    +func init() {
    +	t["ReconfigureDVPortgroup_Task"] = reflect.TypeOf((*ReconfigureDVPortgroup_Task)(nil)).Elem()
    +}
    +
    +type ReconfigureDVPortgroup_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigureDatacenterRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Spec   DatacenterConfigSpec   `xml:"spec"`
    +	Modify bool                   `xml:"modify"`
    +}
    +
    +func init() {
    +	t["ReconfigureDatacenterRequestType"] = reflect.TypeOf((*ReconfigureDatacenterRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureDatacenter_Task ReconfigureDatacenterRequestType
    +
    +func init() {
    +	t["ReconfigureDatacenter_Task"] = reflect.TypeOf((*ReconfigureDatacenter_Task)(nil)).Elem()
    +}
    +
    +type ReconfigureDatacenter_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigureDomObject ReconfigureDomObjectRequestType
    +
    +func init() {
    +	t["ReconfigureDomObject"] = reflect.TypeOf((*ReconfigureDomObject)(nil)).Elem()
    +}
    +
    +type ReconfigureDomObjectRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Uuid   string                 `xml:"uuid"`
    +	Policy string                 `xml:"policy"`
    +}
    +
    +func init() {
    +	t["ReconfigureDomObjectRequestType"] = reflect.TypeOf((*ReconfigureDomObjectRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureDomObjectResponse struct {
    +}
    +
    +type ReconfigureDvsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec BaseDVSConfigSpec      `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["ReconfigureDvsRequestType"] = reflect.TypeOf((*ReconfigureDvsRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureDvs_Task ReconfigureDvsRequestType
    +
    +func init() {
    +	t["ReconfigureDvs_Task"] = reflect.TypeOf((*ReconfigureDvs_Task)(nil)).Elem()
    +}
    +
    +type ReconfigureDvs_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigureHostForDASRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ReconfigureHostForDASRequestType"] = reflect.TypeOf((*ReconfigureHostForDASRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureHostForDAS_Task ReconfigureHostForDASRequestType
    +
    +func init() {
    +	t["ReconfigureHostForDAS_Task"] = reflect.TypeOf((*ReconfigureHostForDAS_Task)(nil)).Elem()
    +}
    +
    +type ReconfigureHostForDAS_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReconfigureScheduledTask ReconfigureScheduledTaskRequestType
    +
    +func init() {
    +	t["ReconfigureScheduledTask"] = reflect.TypeOf((*ReconfigureScheduledTask)(nil)).Elem()
    +}
    +
    +type ReconfigureScheduledTaskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec BaseScheduledTaskSpec  `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["ReconfigureScheduledTaskRequestType"] = reflect.TypeOf((*ReconfigureScheduledTaskRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureScheduledTaskResponse struct {
    +}
    +
    +type ReconfigureServiceConsoleReservation ReconfigureServiceConsoleReservationRequestType
    +
    +func init() {
    +	t["ReconfigureServiceConsoleReservation"] = reflect.TypeOf((*ReconfigureServiceConsoleReservation)(nil)).Elem()
    +}
    +
    +type ReconfigureServiceConsoleReservationRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	CfgBytes int64                  `xml:"cfgBytes"`
    +}
    +
    +func init() {
    +	t["ReconfigureServiceConsoleReservationRequestType"] = reflect.TypeOf((*ReconfigureServiceConsoleReservationRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureServiceConsoleReservationResponse struct {
    +}
    +
    +type ReconfigureSnmpAgent ReconfigureSnmpAgentRequestType
    +
    +func init() {
    +	t["ReconfigureSnmpAgent"] = reflect.TypeOf((*ReconfigureSnmpAgent)(nil)).Elem()
    +}
    +
    +type ReconfigureSnmpAgentRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec HostSnmpConfigSpec     `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ReconfigureSnmpAgentRequestType"] = reflect.TypeOf((*ReconfigureSnmpAgentRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureSnmpAgentResponse struct {
    +}
    +
    +type ReconfigureVirtualMachineReservation ReconfigureVirtualMachineReservationRequestType
    +
    +func init() {
    +	t["ReconfigureVirtualMachineReservation"] = reflect.TypeOf((*ReconfigureVirtualMachineReservation)(nil)).Elem()
    +}
    +
    +type ReconfigureVirtualMachineReservationRequestType struct {
    +	This ManagedObjectReference              `xml:"_this"`
    +	Spec VirtualMachineMemoryReservationSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ReconfigureVirtualMachineReservationRequestType"] = reflect.TypeOf((*ReconfigureVirtualMachineReservationRequestType)(nil)).Elem()
    +}
    +
    +type ReconfigureVirtualMachineReservationResponse struct {
    +}
    +
    +type ReconnectHostRequestType struct {
    +	This          ManagedObjectReference   `xml:"_this"`
    +	CnxSpec       *HostConnectSpec         `xml:"cnxSpec,omitempty"`
    +	ReconnectSpec *HostSystemReconnectSpec `xml:"reconnectSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["ReconnectHostRequestType"] = reflect.TypeOf((*ReconnectHostRequestType)(nil)).Elem()
    +}
    +
    +type ReconnectHost_Task ReconnectHostRequestType
    +
    +func init() {
    +	t["ReconnectHost_Task"] = reflect.TypeOf((*ReconnectHost_Task)(nil)).Elem()
    +}
    +
    +type ReconnectHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RecordReplayDisabled struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["RecordReplayDisabled"] = reflect.TypeOf((*RecordReplayDisabled)(nil)).Elem()
    +}
    +
    +type RecordReplayDisabledFault RecordReplayDisabled
    +
    +func init() {
    +	t["RecordReplayDisabledFault"] = reflect.TypeOf((*RecordReplayDisabledFault)(nil)).Elem()
    +}
    +
    +type RecoveryEvent struct {
    +	DvsEvent
    +
    +	HostName string `xml:"hostName"`
    +	PortKey  string `xml:"portKey"`
    +	DvsUuid  string `xml:"dvsUuid,omitempty"`
    +	Vnic     string `xml:"vnic,omitempty"`
    +}
    +
    +func init() {
    +	t["RecoveryEvent"] = reflect.TypeOf((*RecoveryEvent)(nil)).Elem()
    +}
    +
    +type RectifyDvsHostRequestType struct {
    +	This  ManagedObjectReference   `xml:"_this"`
    +	Hosts []ManagedObjectReference `xml:"hosts,omitempty"`
    +}
    +
    +func init() {
    +	t["RectifyDvsHostRequestType"] = reflect.TypeOf((*RectifyDvsHostRequestType)(nil)).Elem()
    +}
    +
    +type RectifyDvsHost_Task RectifyDvsHostRequestType
    +
    +func init() {
    +	t["RectifyDvsHost_Task"] = reflect.TypeOf((*RectifyDvsHost_Task)(nil)).Elem()
    +}
    +
    +type RectifyDvsHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RectifyDvsOnHostRequestType struct {
    +	This  ManagedObjectReference   `xml:"_this"`
    +	Hosts []ManagedObjectReference `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["RectifyDvsOnHostRequestType"] = reflect.TypeOf((*RectifyDvsOnHostRequestType)(nil)).Elem()
    +}
    +
    +type RectifyDvsOnHost_Task RectifyDvsOnHostRequestType
    +
    +func init() {
    +	t["RectifyDvsOnHost_Task"] = reflect.TypeOf((*RectifyDvsOnHost_Task)(nil)).Elem()
    +}
    +
    +type RectifyDvsOnHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RecurrentTaskScheduler struct {
    +	TaskScheduler
    +
    +	Interval int32 `xml:"interval"`
    +}
    +
    +func init() {
    +	t["RecurrentTaskScheduler"] = reflect.TypeOf((*RecurrentTaskScheduler)(nil)).Elem()
    +}
    +
    +type Refresh RefreshRequestType
    +
    +func init() {
    +	t["Refresh"] = reflect.TypeOf((*Refresh)(nil)).Elem()
    +}
    +
    +type RefreshDVPortState RefreshDVPortStateRequestType
    +
    +func init() {
    +	t["RefreshDVPortState"] = reflect.TypeOf((*RefreshDVPortState)(nil)).Elem()
    +}
    +
    +type RefreshDVPortStateRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	PortKeys []string               `xml:"portKeys,omitempty"`
    +}
    +
    +func init() {
    +	t["RefreshDVPortStateRequestType"] = reflect.TypeOf((*RefreshDVPortStateRequestType)(nil)).Elem()
    +}
    +
    +type RefreshDVPortStateResponse struct {
    +}
    +
    +type RefreshDatastore RefreshDatastoreRequestType
    +
    +func init() {
    +	t["RefreshDatastore"] = reflect.TypeOf((*RefreshDatastore)(nil)).Elem()
    +}
    +
    +type RefreshDatastoreRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshDatastoreRequestType"] = reflect.TypeOf((*RefreshDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type RefreshDatastoreResponse struct {
    +}
    +
    +type RefreshDatastoreStorageInfo RefreshDatastoreStorageInfoRequestType
    +
    +func init() {
    +	t["RefreshDatastoreStorageInfo"] = reflect.TypeOf((*RefreshDatastoreStorageInfo)(nil)).Elem()
    +}
    +
    +type RefreshDatastoreStorageInfoRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshDatastoreStorageInfoRequestType"] = reflect.TypeOf((*RefreshDatastoreStorageInfoRequestType)(nil)).Elem()
    +}
    +
    +type RefreshDatastoreStorageInfoResponse struct {
    +}
    +
    +type RefreshDateTimeSystem RefreshDateTimeSystemRequestType
    +
    +func init() {
    +	t["RefreshDateTimeSystem"] = reflect.TypeOf((*RefreshDateTimeSystem)(nil)).Elem()
    +}
    +
    +type RefreshDateTimeSystemRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshDateTimeSystemRequestType"] = reflect.TypeOf((*RefreshDateTimeSystemRequestType)(nil)).Elem()
    +}
    +
    +type RefreshDateTimeSystemResponse struct {
    +}
    +
    +type RefreshFirewall RefreshFirewallRequestType
    +
    +func init() {
    +	t["RefreshFirewall"] = reflect.TypeOf((*RefreshFirewall)(nil)).Elem()
    +}
    +
    +type RefreshFirewallRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshFirewallRequestType"] = reflect.TypeOf((*RefreshFirewallRequestType)(nil)).Elem()
    +}
    +
    +type RefreshFirewallResponse struct {
    +}
    +
    +type RefreshGraphicsManager RefreshGraphicsManagerRequestType
    +
    +func init() {
    +	t["RefreshGraphicsManager"] = reflect.TypeOf((*RefreshGraphicsManager)(nil)).Elem()
    +}
    +
    +type RefreshGraphicsManagerRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshGraphicsManagerRequestType"] = reflect.TypeOf((*RefreshGraphicsManagerRequestType)(nil)).Elem()
    +}
    +
    +type RefreshGraphicsManagerResponse struct {
    +}
    +
    +type RefreshHealthStatusSystem RefreshHealthStatusSystemRequestType
    +
    +func init() {
    +	t["RefreshHealthStatusSystem"] = reflect.TypeOf((*RefreshHealthStatusSystem)(nil)).Elem()
    +}
    +
    +type RefreshHealthStatusSystemRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshHealthStatusSystemRequestType"] = reflect.TypeOf((*RefreshHealthStatusSystemRequestType)(nil)).Elem()
    +}
    +
    +type RefreshHealthStatusSystemResponse struct {
    +}
    +
    +type RefreshNetworkSystem RefreshNetworkSystemRequestType
    +
    +func init() {
    +	t["RefreshNetworkSystem"] = reflect.TypeOf((*RefreshNetworkSystem)(nil)).Elem()
    +}
    +
    +type RefreshNetworkSystemRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshNetworkSystemRequestType"] = reflect.TypeOf((*RefreshNetworkSystemRequestType)(nil)).Elem()
    +}
    +
    +type RefreshNetworkSystemResponse struct {
    +}
    +
    +type RefreshRecommendation RefreshRecommendationRequestType
    +
    +func init() {
    +	t["RefreshRecommendation"] = reflect.TypeOf((*RefreshRecommendation)(nil)).Elem()
    +}
    +
    +type RefreshRecommendationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshRecommendationRequestType"] = reflect.TypeOf((*RefreshRecommendationRequestType)(nil)).Elem()
    +}
    +
    +type RefreshRecommendationResponse struct {
    +}
    +
    +type RefreshRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshRequestType"] = reflect.TypeOf((*RefreshRequestType)(nil)).Elem()
    +}
    +
    +type RefreshResponse struct {
    +}
    +
    +type RefreshRuntime RefreshRuntimeRequestType
    +
    +func init() {
    +	t["RefreshRuntime"] = reflect.TypeOf((*RefreshRuntime)(nil)).Elem()
    +}
    +
    +type RefreshRuntimeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshRuntimeRequestType"] = reflect.TypeOf((*RefreshRuntimeRequestType)(nil)).Elem()
    +}
    +
    +type RefreshRuntimeResponse struct {
    +}
    +
    +type RefreshServices RefreshServicesRequestType
    +
    +func init() {
    +	t["RefreshServices"] = reflect.TypeOf((*RefreshServices)(nil)).Elem()
    +}
    +
    +type RefreshServicesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshServicesRequestType"] = reflect.TypeOf((*RefreshServicesRequestType)(nil)).Elem()
    +}
    +
    +type RefreshServicesResponse struct {
    +}
    +
    +type RefreshStorageDrsRecommendation RefreshStorageDrsRecommendationRequestType
    +
    +func init() {
    +	t["RefreshStorageDrsRecommendation"] = reflect.TypeOf((*RefreshStorageDrsRecommendation)(nil)).Elem()
    +}
    +
    +type RefreshStorageDrsRecommendationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Pod  ManagedObjectReference `xml:"pod"`
    +}
    +
    +func init() {
    +	t["RefreshStorageDrsRecommendationRequestType"] = reflect.TypeOf((*RefreshStorageDrsRecommendationRequestType)(nil)).Elem()
    +}
    +
    +type RefreshStorageDrsRecommendationResponse struct {
    +}
    +
    +type RefreshStorageDrsRecommendationsForPodRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Pod  ManagedObjectReference `xml:"pod"`
    +}
    +
    +func init() {
    +	t["RefreshStorageDrsRecommendationsForPodRequestType"] = reflect.TypeOf((*RefreshStorageDrsRecommendationsForPodRequestType)(nil)).Elem()
    +}
    +
    +type RefreshStorageDrsRecommendationsForPod_Task RefreshStorageDrsRecommendationsForPodRequestType
    +
    +func init() {
    +	t["RefreshStorageDrsRecommendationsForPod_Task"] = reflect.TypeOf((*RefreshStorageDrsRecommendationsForPod_Task)(nil)).Elem()
    +}
    +
    +type RefreshStorageDrsRecommendationsForPod_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RefreshStorageInfo RefreshStorageInfoRequestType
    +
    +func init() {
    +	t["RefreshStorageInfo"] = reflect.TypeOf((*RefreshStorageInfo)(nil)).Elem()
    +}
    +
    +type RefreshStorageInfoRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshStorageInfoRequestType"] = reflect.TypeOf((*RefreshStorageInfoRequestType)(nil)).Elem()
    +}
    +
    +type RefreshStorageInfoResponse struct {
    +}
    +
    +type RefreshStorageSystem RefreshStorageSystemRequestType
    +
    +func init() {
    +	t["RefreshStorageSystem"] = reflect.TypeOf((*RefreshStorageSystem)(nil)).Elem()
    +}
    +
    +type RefreshStorageSystemRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RefreshStorageSystemRequestType"] = reflect.TypeOf((*RefreshStorageSystemRequestType)(nil)).Elem()
    +}
    +
    +type RefreshStorageSystemResponse struct {
    +}
    +
    +type RegisterChildVMRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Path string                  `xml:"path"`
    +	Name string                  `xml:"name,omitempty"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["RegisterChildVMRequestType"] = reflect.TypeOf((*RegisterChildVMRequestType)(nil)).Elem()
    +}
    +
    +type RegisterChildVM_Task RegisterChildVMRequestType
    +
    +func init() {
    +	t["RegisterChildVM_Task"] = reflect.TypeOf((*RegisterChildVM_Task)(nil)).Elem()
    +}
    +
    +type RegisterChildVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RegisterDisk RegisterDiskRequestType
    +
    +func init() {
    +	t["RegisterDisk"] = reflect.TypeOf((*RegisterDisk)(nil)).Elem()
    +}
    +
    +type RegisterDiskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Path string                 `xml:"path"`
    +	Name string                 `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["RegisterDiskRequestType"] = reflect.TypeOf((*RegisterDiskRequestType)(nil)).Elem()
    +}
    +
    +type RegisterDiskResponse struct {
    +	Returnval VStorageObject `xml:"returnval"`
    +}
    +
    +type RegisterExtension RegisterExtensionRequestType
    +
    +func init() {
    +	t["RegisterExtension"] = reflect.TypeOf((*RegisterExtension)(nil)).Elem()
    +}
    +
    +type RegisterExtensionRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Extension Extension              `xml:"extension"`
    +}
    +
    +func init() {
    +	t["RegisterExtensionRequestType"] = reflect.TypeOf((*RegisterExtensionRequestType)(nil)).Elem()
    +}
    +
    +type RegisterExtensionResponse struct {
    +}
    +
    +type RegisterHealthUpdateProvider RegisterHealthUpdateProviderRequestType
    +
    +func init() {
    +	t["RegisterHealthUpdateProvider"] = reflect.TypeOf((*RegisterHealthUpdateProvider)(nil)).Elem()
    +}
    +
    +type RegisterHealthUpdateProviderRequestType struct {
    +	This             ManagedObjectReference `xml:"_this"`
    +	Name             string                 `xml:"name"`
    +	HealthUpdateInfo []HealthUpdateInfo     `xml:"healthUpdateInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["RegisterHealthUpdateProviderRequestType"] = reflect.TypeOf((*RegisterHealthUpdateProviderRequestType)(nil)).Elem()
    +}
    +
    +type RegisterHealthUpdateProviderResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type RegisterKmipServer RegisterKmipServerRequestType
    +
    +func init() {
    +	t["RegisterKmipServer"] = reflect.TypeOf((*RegisterKmipServer)(nil)).Elem()
    +}
    +
    +type RegisterKmipServerRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Server KmipServerSpec         `xml:"server"`
    +}
    +
    +func init() {
    +	t["RegisterKmipServerRequestType"] = reflect.TypeOf((*RegisterKmipServerRequestType)(nil)).Elem()
    +}
    +
    +type RegisterKmipServerResponse struct {
    +}
    +
    +type RegisterVMRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Path       string                  `xml:"path"`
    +	Name       string                  `xml:"name,omitempty"`
    +	AsTemplate bool                    `xml:"asTemplate"`
    +	Pool       *ManagedObjectReference `xml:"pool,omitempty"`
    +	Host       *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["RegisterVMRequestType"] = reflect.TypeOf((*RegisterVMRequestType)(nil)).Elem()
    +}
    +
    +type RegisterVM_Task RegisterVMRequestType
    +
    +func init() {
    +	t["RegisterVM_Task"] = reflect.TypeOf((*RegisterVM_Task)(nil)).Elem()
    +}
    +
    +type RegisterVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type Relation struct {
    +	DynamicData
    +
    +	Constraint string `xml:"constraint,omitempty"`
    +	Name       string `xml:"name"`
    +	Version    string `xml:"version,omitempty"`
    +}
    +
    +func init() {
    +	t["Relation"] = reflect.TypeOf((*Relation)(nil)).Elem()
    +}
    +
    +type ReleaseCredentialsInGuest ReleaseCredentialsInGuestRequestType
    +
    +func init() {
    +	t["ReleaseCredentialsInGuest"] = reflect.TypeOf((*ReleaseCredentialsInGuest)(nil)).Elem()
    +}
    +
    +type ReleaseCredentialsInGuestRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Auth BaseGuestAuthentication `xml:"auth,typeattr"`
    +}
    +
    +func init() {
    +	t["ReleaseCredentialsInGuestRequestType"] = reflect.TypeOf((*ReleaseCredentialsInGuestRequestType)(nil)).Elem()
    +}
    +
    +type ReleaseCredentialsInGuestResponse struct {
    +}
    +
    +type ReleaseIpAllocation ReleaseIpAllocationRequestType
    +
    +func init() {
    +	t["ReleaseIpAllocation"] = reflect.TypeOf((*ReleaseIpAllocation)(nil)).Elem()
    +}
    +
    +type ReleaseIpAllocationRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Dc           ManagedObjectReference `xml:"dc"`
    +	PoolId       int32                  `xml:"poolId"`
    +	AllocationId string                 `xml:"allocationId"`
    +}
    +
    +func init() {
    +	t["ReleaseIpAllocationRequestType"] = reflect.TypeOf((*ReleaseIpAllocationRequestType)(nil)).Elem()
    +}
    +
    +type ReleaseIpAllocationResponse struct {
    +}
    +
    +type ReleaseManagedSnapshot ReleaseManagedSnapshotRequestType
    +
    +func init() {
    +	t["ReleaseManagedSnapshot"] = reflect.TypeOf((*ReleaseManagedSnapshot)(nil)).Elem()
    +}
    +
    +type ReleaseManagedSnapshotRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Vdisk      string                  `xml:"vdisk"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["ReleaseManagedSnapshotRequestType"] = reflect.TypeOf((*ReleaseManagedSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type ReleaseManagedSnapshotResponse struct {
    +}
    +
    +type Reload ReloadRequestType
    +
    +func init() {
    +	t["Reload"] = reflect.TypeOf((*Reload)(nil)).Elem()
    +}
    +
    +type ReloadRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ReloadRequestType"] = reflect.TypeOf((*ReloadRequestType)(nil)).Elem()
    +}
    +
    +type ReloadResponse struct {
    +}
    +
    +type RelocateVMRequestType struct {
    +	This     ManagedObjectReference     `xml:"_this"`
    +	Spec     VirtualMachineRelocateSpec `xml:"spec"`
    +	Priority VirtualMachineMovePriority `xml:"priority,omitempty"`
    +}
    +
    +func init() {
    +	t["RelocateVMRequestType"] = reflect.TypeOf((*RelocateVMRequestType)(nil)).Elem()
    +}
    +
    +type RelocateVM_Task RelocateVMRequestType
    +
    +func init() {
    +	t["RelocateVM_Task"] = reflect.TypeOf((*RelocateVM_Task)(nil)).Elem()
    +}
    +
    +type RelocateVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RelocateVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	Spec      VslmRelocateSpec       `xml:"spec"`
    +}
    +
    +func init() {
    +	t["RelocateVStorageObjectRequestType"] = reflect.TypeOf((*RelocateVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type RelocateVStorageObject_Task RelocateVStorageObjectRequestType
    +
    +func init() {
    +	t["RelocateVStorageObject_Task"] = reflect.TypeOf((*RelocateVStorageObject_Task)(nil)).Elem()
    +}
    +
    +type RelocateVStorageObject_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RemoteDeviceNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["RemoteDeviceNotSupported"] = reflect.TypeOf((*RemoteDeviceNotSupported)(nil)).Elem()
    +}
    +
    +type RemoteDeviceNotSupportedFault RemoteDeviceNotSupported
    +
    +func init() {
    +	t["RemoteDeviceNotSupportedFault"] = reflect.TypeOf((*RemoteDeviceNotSupportedFault)(nil)).Elem()
    +}
    +
    +type RemoteTSMEnabledEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["RemoteTSMEnabledEvent"] = reflect.TypeOf((*RemoteTSMEnabledEvent)(nil)).Elem()
    +}
    +
    +type RemoveAlarm RemoveAlarmRequestType
    +
    +func init() {
    +	t["RemoveAlarm"] = reflect.TypeOf((*RemoveAlarm)(nil)).Elem()
    +}
    +
    +type RemoveAlarmRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RemoveAlarmRequestType"] = reflect.TypeOf((*RemoveAlarmRequestType)(nil)).Elem()
    +}
    +
    +type RemoveAlarmResponse struct {
    +}
    +
    +type RemoveAllSnapshotsRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Consolidate *bool                  `xml:"consolidate"`
    +}
    +
    +func init() {
    +	t["RemoveAllSnapshotsRequestType"] = reflect.TypeOf((*RemoveAllSnapshotsRequestType)(nil)).Elem()
    +}
    +
    +type RemoveAllSnapshots_Task RemoveAllSnapshotsRequestType
    +
    +func init() {
    +	t["RemoveAllSnapshots_Task"] = reflect.TypeOf((*RemoveAllSnapshots_Task)(nil)).Elem()
    +}
    +
    +type RemoveAllSnapshots_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RemoveAssignedLicense RemoveAssignedLicenseRequestType
    +
    +func init() {
    +	t["RemoveAssignedLicense"] = reflect.TypeOf((*RemoveAssignedLicense)(nil)).Elem()
    +}
    +
    +type RemoveAssignedLicenseRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	EntityId string                 `xml:"entityId"`
    +}
    +
    +func init() {
    +	t["RemoveAssignedLicenseRequestType"] = reflect.TypeOf((*RemoveAssignedLicenseRequestType)(nil)).Elem()
    +}
    +
    +type RemoveAssignedLicenseResponse struct {
    +}
    +
    +type RemoveAuthorizationRole RemoveAuthorizationRoleRequestType
    +
    +func init() {
    +	t["RemoveAuthorizationRole"] = reflect.TypeOf((*RemoveAuthorizationRole)(nil)).Elem()
    +}
    +
    +type RemoveAuthorizationRoleRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	RoleId     int32                  `xml:"roleId"`
    +	FailIfUsed bool                   `xml:"failIfUsed"`
    +}
    +
    +func init() {
    +	t["RemoveAuthorizationRoleRequestType"] = reflect.TypeOf((*RemoveAuthorizationRoleRequestType)(nil)).Elem()
    +}
    +
    +type RemoveAuthorizationRoleResponse struct {
    +}
    +
    +type RemoveCustomFieldDef RemoveCustomFieldDefRequestType
    +
    +func init() {
    +	t["RemoveCustomFieldDef"] = reflect.TypeOf((*RemoveCustomFieldDef)(nil)).Elem()
    +}
    +
    +type RemoveCustomFieldDefRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  int32                  `xml:"key"`
    +}
    +
    +func init() {
    +	t["RemoveCustomFieldDefRequestType"] = reflect.TypeOf((*RemoveCustomFieldDefRequestType)(nil)).Elem()
    +}
    +
    +type RemoveCustomFieldDefResponse struct {
    +}
    +
    +type RemoveDatastore RemoveDatastoreRequestType
    +
    +func init() {
    +	t["RemoveDatastore"] = reflect.TypeOf((*RemoveDatastore)(nil)).Elem()
    +}
    +
    +type RemoveDatastoreExRequestType struct {
    +	This      ManagedObjectReference   `xml:"_this"`
    +	Datastore []ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["RemoveDatastoreExRequestType"] = reflect.TypeOf((*RemoveDatastoreExRequestType)(nil)).Elem()
    +}
    +
    +type RemoveDatastoreEx_Task RemoveDatastoreExRequestType
    +
    +func init() {
    +	t["RemoveDatastoreEx_Task"] = reflect.TypeOf((*RemoveDatastoreEx_Task)(nil)).Elem()
    +}
    +
    +type RemoveDatastoreEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RemoveDatastoreRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["RemoveDatastoreRequestType"] = reflect.TypeOf((*RemoveDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type RemoveDatastoreResponse struct {
    +}
    +
    +type RemoveDiskMappingRequestType struct {
    +	This            ManagedObjectReference `xml:"_this"`
    +	Mapping         []VsanHostDiskMapping  `xml:"mapping"`
    +	MaintenanceSpec *HostMaintenanceSpec   `xml:"maintenanceSpec,omitempty"`
    +	Timeout         int32                  `xml:"timeout,omitempty"`
    +}
    +
    +func init() {
    +	t["RemoveDiskMappingRequestType"] = reflect.TypeOf((*RemoveDiskMappingRequestType)(nil)).Elem()
    +}
    +
    +type RemoveDiskMapping_Task RemoveDiskMappingRequestType
    +
    +func init() {
    +	t["RemoveDiskMapping_Task"] = reflect.TypeOf((*RemoveDiskMapping_Task)(nil)).Elem()
    +}
    +
    +type RemoveDiskMapping_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RemoveDiskRequestType struct {
    +	This            ManagedObjectReference `xml:"_this"`
    +	Disk            []HostScsiDisk         `xml:"disk"`
    +	MaintenanceSpec *HostMaintenanceSpec   `xml:"maintenanceSpec,omitempty"`
    +	Timeout         int32                  `xml:"timeout,omitempty"`
    +}
    +
    +func init() {
    +	t["RemoveDiskRequestType"] = reflect.TypeOf((*RemoveDiskRequestType)(nil)).Elem()
    +}
    +
    +type RemoveDisk_Task RemoveDiskRequestType
    +
    +func init() {
    +	t["RemoveDisk_Task"] = reflect.TypeOf((*RemoveDisk_Task)(nil)).Elem()
    +}
    +
    +type RemoveDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RemoveEntityPermission RemoveEntityPermissionRequestType
    +
    +func init() {
    +	t["RemoveEntityPermission"] = reflect.TypeOf((*RemoveEntityPermission)(nil)).Elem()
    +}
    +
    +type RemoveEntityPermissionRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Entity  ManagedObjectReference `xml:"entity"`
    +	User    string                 `xml:"user"`
    +	IsGroup bool                   `xml:"isGroup"`
    +}
    +
    +func init() {
    +	t["RemoveEntityPermissionRequestType"] = reflect.TypeOf((*RemoveEntityPermissionRequestType)(nil)).Elem()
    +}
    +
    +type RemoveEntityPermissionResponse struct {
    +}
    +
    +type RemoveFailed struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["RemoveFailed"] = reflect.TypeOf((*RemoveFailed)(nil)).Elem()
    +}
    +
    +type RemoveFailedFault RemoveFailed
    +
    +func init() {
    +	t["RemoveFailedFault"] = reflect.TypeOf((*RemoveFailedFault)(nil)).Elem()
    +}
    +
    +type RemoveFilter RemoveFilterRequestType
    +
    +func init() {
    +	t["RemoveFilter"] = reflect.TypeOf((*RemoveFilter)(nil)).Elem()
    +}
    +
    +type RemoveFilterEntities RemoveFilterEntitiesRequestType
    +
    +func init() {
    +	t["RemoveFilterEntities"] = reflect.TypeOf((*RemoveFilterEntities)(nil)).Elem()
    +}
    +
    +type RemoveFilterEntitiesRequestType struct {
    +	This     ManagedObjectReference   `xml:"_this"`
    +	FilterId string                   `xml:"filterId"`
    +	Entities []ManagedObjectReference `xml:"entities,omitempty"`
    +}
    +
    +func init() {
    +	t["RemoveFilterEntitiesRequestType"] = reflect.TypeOf((*RemoveFilterEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type RemoveFilterEntitiesResponse struct {
    +}
    +
    +type RemoveFilterRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +}
    +
    +func init() {
    +	t["RemoveFilterRequestType"] = reflect.TypeOf((*RemoveFilterRequestType)(nil)).Elem()
    +}
    +
    +type RemoveFilterResponse struct {
    +}
    +
    +type RemoveGroup RemoveGroupRequestType
    +
    +func init() {
    +	t["RemoveGroup"] = reflect.TypeOf((*RemoveGroup)(nil)).Elem()
    +}
    +
    +type RemoveGroupRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	GroupName string                 `xml:"groupName"`
    +}
    +
    +func init() {
    +	t["RemoveGroupRequestType"] = reflect.TypeOf((*RemoveGroupRequestType)(nil)).Elem()
    +}
    +
    +type RemoveGroupResponse struct {
    +}
    +
    +type RemoveGuestAlias RemoveGuestAliasRequestType
    +
    +func init() {
    +	t["RemoveGuestAlias"] = reflect.TypeOf((*RemoveGuestAlias)(nil)).Elem()
    +}
    +
    +type RemoveGuestAliasByCert RemoveGuestAliasByCertRequestType
    +
    +func init() {
    +	t["RemoveGuestAliasByCert"] = reflect.TypeOf((*RemoveGuestAliasByCert)(nil)).Elem()
    +}
    +
    +type RemoveGuestAliasByCertRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Vm         ManagedObjectReference  `xml:"vm"`
    +	Auth       BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Username   string                  `xml:"username"`
    +	Base64Cert string                  `xml:"base64Cert"`
    +}
    +
    +func init() {
    +	t["RemoveGuestAliasByCertRequestType"] = reflect.TypeOf((*RemoveGuestAliasByCertRequestType)(nil)).Elem()
    +}
    +
    +type RemoveGuestAliasByCertResponse struct {
    +}
    +
    +type RemoveGuestAliasRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Vm         ManagedObjectReference  `xml:"vm"`
    +	Auth       BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Username   string                  `xml:"username"`
    +	Base64Cert string                  `xml:"base64Cert"`
    +	Subject    BaseGuestAuthSubject    `xml:"subject,typeattr"`
    +}
    +
    +func init() {
    +	t["RemoveGuestAliasRequestType"] = reflect.TypeOf((*RemoveGuestAliasRequestType)(nil)).Elem()
    +}
    +
    +type RemoveGuestAliasResponse struct {
    +}
    +
    +type RemoveInternetScsiSendTargets RemoveInternetScsiSendTargetsRequestType
    +
    +func init() {
    +	t["RemoveInternetScsiSendTargets"] = reflect.TypeOf((*RemoveInternetScsiSendTargets)(nil)).Elem()
    +}
    +
    +type RemoveInternetScsiSendTargetsRequestType struct {
    +	This           ManagedObjectReference          `xml:"_this"`
    +	IScsiHbaDevice string                          `xml:"iScsiHbaDevice"`
    +	Targets        []HostInternetScsiHbaSendTarget `xml:"targets"`
    +}
    +
    +func init() {
    +	t["RemoveInternetScsiSendTargetsRequestType"] = reflect.TypeOf((*RemoveInternetScsiSendTargetsRequestType)(nil)).Elem()
    +}
    +
    +type RemoveInternetScsiSendTargetsResponse struct {
    +}
    +
    +type RemoveInternetScsiStaticTargets RemoveInternetScsiStaticTargetsRequestType
    +
    +func init() {
    +	t["RemoveInternetScsiStaticTargets"] = reflect.TypeOf((*RemoveInternetScsiStaticTargets)(nil)).Elem()
    +}
    +
    +type RemoveInternetScsiStaticTargetsRequestType struct {
    +	This           ManagedObjectReference            `xml:"_this"`
    +	IScsiHbaDevice string                            `xml:"iScsiHbaDevice"`
    +	Targets        []HostInternetScsiHbaStaticTarget `xml:"targets"`
    +}
    +
    +func init() {
    +	t["RemoveInternetScsiStaticTargetsRequestType"] = reflect.TypeOf((*RemoveInternetScsiStaticTargetsRequestType)(nil)).Elem()
    +}
    +
    +type RemoveInternetScsiStaticTargetsResponse struct {
    +}
    +
    +type RemoveKey RemoveKeyRequestType
    +
    +func init() {
    +	t["RemoveKey"] = reflect.TypeOf((*RemoveKey)(nil)).Elem()
    +}
    +
    +type RemoveKeyRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Key   CryptoKeyId            `xml:"key"`
    +	Force bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["RemoveKeyRequestType"] = reflect.TypeOf((*RemoveKeyRequestType)(nil)).Elem()
    +}
    +
    +type RemoveKeyResponse struct {
    +}
    +
    +type RemoveKeys RemoveKeysRequestType
    +
    +func init() {
    +	t["RemoveKeys"] = reflect.TypeOf((*RemoveKeys)(nil)).Elem()
    +}
    +
    +type RemoveKeysRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Keys  []CryptoKeyId          `xml:"keys,omitempty"`
    +	Force bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["RemoveKeysRequestType"] = reflect.TypeOf((*RemoveKeysRequestType)(nil)).Elem()
    +}
    +
    +type RemoveKeysResponse struct {
    +	Returnval []CryptoKeyResult `xml:"returnval,omitempty"`
    +}
    +
    +type RemoveKmipServer RemoveKmipServerRequestType
    +
    +func init() {
    +	t["RemoveKmipServer"] = reflect.TypeOf((*RemoveKmipServer)(nil)).Elem()
    +}
    +
    +type RemoveKmipServerRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ClusterId  KeyProviderId          `xml:"clusterId"`
    +	ServerName string                 `xml:"serverName"`
    +}
    +
    +func init() {
    +	t["RemoveKmipServerRequestType"] = reflect.TypeOf((*RemoveKmipServerRequestType)(nil)).Elem()
    +}
    +
    +type RemoveKmipServerResponse struct {
    +}
    +
    +type RemoveLicense RemoveLicenseRequestType
    +
    +func init() {
    +	t["RemoveLicense"] = reflect.TypeOf((*RemoveLicense)(nil)).Elem()
    +}
    +
    +type RemoveLicenseLabel RemoveLicenseLabelRequestType
    +
    +func init() {
    +	t["RemoveLicenseLabel"] = reflect.TypeOf((*RemoveLicenseLabel)(nil)).Elem()
    +}
    +
    +type RemoveLicenseLabelRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	LicenseKey string                 `xml:"licenseKey"`
    +	LabelKey   string                 `xml:"labelKey"`
    +}
    +
    +func init() {
    +	t["RemoveLicenseLabelRequestType"] = reflect.TypeOf((*RemoveLicenseLabelRequestType)(nil)).Elem()
    +}
    +
    +type RemoveLicenseLabelResponse struct {
    +}
    +
    +type RemoveLicenseRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	LicenseKey string                 `xml:"licenseKey"`
    +}
    +
    +func init() {
    +	t["RemoveLicenseRequestType"] = reflect.TypeOf((*RemoveLicenseRequestType)(nil)).Elem()
    +}
    +
    +type RemoveLicenseResponse struct {
    +}
    +
    +type RemoveMonitoredEntities RemoveMonitoredEntitiesRequestType
    +
    +func init() {
    +	t["RemoveMonitoredEntities"] = reflect.TypeOf((*RemoveMonitoredEntities)(nil)).Elem()
    +}
    +
    +type RemoveMonitoredEntitiesRequestType struct {
    +	This       ManagedObjectReference   `xml:"_this"`
    +	ProviderId string                   `xml:"providerId"`
    +	Entities   []ManagedObjectReference `xml:"entities,omitempty"`
    +}
    +
    +func init() {
    +	t["RemoveMonitoredEntitiesRequestType"] = reflect.TypeOf((*RemoveMonitoredEntitiesRequestType)(nil)).Elem()
    +}
    +
    +type RemoveMonitoredEntitiesResponse struct {
    +}
    +
    +type RemoveNetworkResourcePool RemoveNetworkResourcePoolRequestType
    +
    +func init() {
    +	t["RemoveNetworkResourcePool"] = reflect.TypeOf((*RemoveNetworkResourcePool)(nil)).Elem()
    +}
    +
    +type RemoveNetworkResourcePoolRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  []string               `xml:"key"`
    +}
    +
    +func init() {
    +	t["RemoveNetworkResourcePoolRequestType"] = reflect.TypeOf((*RemoveNetworkResourcePoolRequestType)(nil)).Elem()
    +}
    +
    +type RemoveNetworkResourcePoolResponse struct {
    +}
    +
    +type RemovePerfInterval RemovePerfIntervalRequestType
    +
    +func init() {
    +	t["RemovePerfInterval"] = reflect.TypeOf((*RemovePerfInterval)(nil)).Elem()
    +}
    +
    +type RemovePerfIntervalRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	SamplePeriod int32                  `xml:"samplePeriod"`
    +}
    +
    +func init() {
    +	t["RemovePerfIntervalRequestType"] = reflect.TypeOf((*RemovePerfIntervalRequestType)(nil)).Elem()
    +}
    +
    +type RemovePerfIntervalResponse struct {
    +}
    +
    +type RemovePortGroup RemovePortGroupRequestType
    +
    +func init() {
    +	t["RemovePortGroup"] = reflect.TypeOf((*RemovePortGroup)(nil)).Elem()
    +}
    +
    +type RemovePortGroupRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	PgName string                 `xml:"pgName"`
    +}
    +
    +func init() {
    +	t["RemovePortGroupRequestType"] = reflect.TypeOf((*RemovePortGroupRequestType)(nil)).Elem()
    +}
    +
    +type RemovePortGroupResponse struct {
    +}
    +
    +type RemoveScheduledTask RemoveScheduledTaskRequestType
    +
    +func init() {
    +	t["RemoveScheduledTask"] = reflect.TypeOf((*RemoveScheduledTask)(nil)).Elem()
    +}
    +
    +type RemoveScheduledTaskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RemoveScheduledTaskRequestType"] = reflect.TypeOf((*RemoveScheduledTaskRequestType)(nil)).Elem()
    +}
    +
    +type RemoveScheduledTaskResponse struct {
    +}
    +
    +type RemoveServiceConsoleVirtualNic RemoveServiceConsoleVirtualNicRequestType
    +
    +func init() {
    +	t["RemoveServiceConsoleVirtualNic"] = reflect.TypeOf((*RemoveServiceConsoleVirtualNic)(nil)).Elem()
    +}
    +
    +type RemoveServiceConsoleVirtualNicRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Device string                 `xml:"device"`
    +}
    +
    +func init() {
    +	t["RemoveServiceConsoleVirtualNicRequestType"] = reflect.TypeOf((*RemoveServiceConsoleVirtualNicRequestType)(nil)).Elem()
    +}
    +
    +type RemoveServiceConsoleVirtualNicResponse struct {
    +}
    +
    +type RemoveSmartCardTrustAnchor RemoveSmartCardTrustAnchorRequestType
    +
    +func init() {
    +	t["RemoveSmartCardTrustAnchor"] = reflect.TypeOf((*RemoveSmartCardTrustAnchor)(nil)).Elem()
    +}
    +
    +type RemoveSmartCardTrustAnchorByFingerprint RemoveSmartCardTrustAnchorByFingerprintRequestType
    +
    +func init() {
    +	t["RemoveSmartCardTrustAnchorByFingerprint"] = reflect.TypeOf((*RemoveSmartCardTrustAnchorByFingerprint)(nil)).Elem()
    +}
    +
    +type RemoveSmartCardTrustAnchorByFingerprintRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Fingerprint string                 `xml:"fingerprint"`
    +	Digest      string                 `xml:"digest"`
    +}
    +
    +func init() {
    +	t["RemoveSmartCardTrustAnchorByFingerprintRequestType"] = reflect.TypeOf((*RemoveSmartCardTrustAnchorByFingerprintRequestType)(nil)).Elem()
    +}
    +
    +type RemoveSmartCardTrustAnchorByFingerprintResponse struct {
    +}
    +
    +type RemoveSmartCardTrustAnchorRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Issuer string                 `xml:"issuer"`
    +	Serial string                 `xml:"serial"`
    +}
    +
    +func init() {
    +	t["RemoveSmartCardTrustAnchorRequestType"] = reflect.TypeOf((*RemoveSmartCardTrustAnchorRequestType)(nil)).Elem()
    +}
    +
    +type RemoveSmartCardTrustAnchorResponse struct {
    +}
    +
    +type RemoveSnapshotRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	RemoveChildren bool                   `xml:"removeChildren"`
    +	Consolidate    *bool                  `xml:"consolidate"`
    +}
    +
    +func init() {
    +	t["RemoveSnapshotRequestType"] = reflect.TypeOf((*RemoveSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type RemoveSnapshot_Task RemoveSnapshotRequestType
    +
    +func init() {
    +	t["RemoveSnapshot_Task"] = reflect.TypeOf((*RemoveSnapshot_Task)(nil)).Elem()
    +}
    +
    +type RemoveSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RemoveUser RemoveUserRequestType
    +
    +func init() {
    +	t["RemoveUser"] = reflect.TypeOf((*RemoveUser)(nil)).Elem()
    +}
    +
    +type RemoveUserRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	UserName string                 `xml:"userName"`
    +}
    +
    +func init() {
    +	t["RemoveUserRequestType"] = reflect.TypeOf((*RemoveUserRequestType)(nil)).Elem()
    +}
    +
    +type RemoveUserResponse struct {
    +}
    +
    +type RemoveVirtualNic RemoveVirtualNicRequestType
    +
    +func init() {
    +	t["RemoveVirtualNic"] = reflect.TypeOf((*RemoveVirtualNic)(nil)).Elem()
    +}
    +
    +type RemoveVirtualNicRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Device string                 `xml:"device"`
    +}
    +
    +func init() {
    +	t["RemoveVirtualNicRequestType"] = reflect.TypeOf((*RemoveVirtualNicRequestType)(nil)).Elem()
    +}
    +
    +type RemoveVirtualNicResponse struct {
    +}
    +
    +type RemoveVirtualSwitch RemoveVirtualSwitchRequestType
    +
    +func init() {
    +	t["RemoveVirtualSwitch"] = reflect.TypeOf((*RemoveVirtualSwitch)(nil)).Elem()
    +}
    +
    +type RemoveVirtualSwitchRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	VswitchName string                 `xml:"vswitchName"`
    +}
    +
    +func init() {
    +	t["RemoveVirtualSwitchRequestType"] = reflect.TypeOf((*RemoveVirtualSwitchRequestType)(nil)).Elem()
    +}
    +
    +type RemoveVirtualSwitchResponse struct {
    +}
    +
    +type RenameCustomFieldDef RenameCustomFieldDefRequestType
    +
    +func init() {
    +	t["RenameCustomFieldDef"] = reflect.TypeOf((*RenameCustomFieldDef)(nil)).Elem()
    +}
    +
    +type RenameCustomFieldDefRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  int32                  `xml:"key"`
    +	Name string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["RenameCustomFieldDefRequestType"] = reflect.TypeOf((*RenameCustomFieldDefRequestType)(nil)).Elem()
    +}
    +
    +type RenameCustomFieldDefResponse struct {
    +}
    +
    +type RenameCustomizationSpec RenameCustomizationSpecRequestType
    +
    +func init() {
    +	t["RenameCustomizationSpec"] = reflect.TypeOf((*RenameCustomizationSpec)(nil)).Elem()
    +}
    +
    +type RenameCustomizationSpecRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Name    string                 `xml:"name"`
    +	NewName string                 `xml:"newName"`
    +}
    +
    +func init() {
    +	t["RenameCustomizationSpecRequestType"] = reflect.TypeOf((*RenameCustomizationSpecRequestType)(nil)).Elem()
    +}
    +
    +type RenameCustomizationSpecResponse struct {
    +}
    +
    +type RenameDatastore RenameDatastoreRequestType
    +
    +func init() {
    +	t["RenameDatastore"] = reflect.TypeOf((*RenameDatastore)(nil)).Elem()
    +}
    +
    +type RenameDatastoreRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	NewName string                 `xml:"newName"`
    +}
    +
    +func init() {
    +	t["RenameDatastoreRequestType"] = reflect.TypeOf((*RenameDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type RenameDatastoreResponse struct {
    +}
    +
    +type RenameRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	NewName string                 `xml:"newName"`
    +}
    +
    +func init() {
    +	t["RenameRequestType"] = reflect.TypeOf((*RenameRequestType)(nil)).Elem()
    +}
    +
    +type RenameSnapshot RenameSnapshotRequestType
    +
    +func init() {
    +	t["RenameSnapshot"] = reflect.TypeOf((*RenameSnapshot)(nil)).Elem()
    +}
    +
    +type RenameSnapshotRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Name        string                 `xml:"name,omitempty"`
    +	Description string                 `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["RenameSnapshotRequestType"] = reflect.TypeOf((*RenameSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type RenameSnapshotResponse struct {
    +}
    +
    +type RenameVStorageObject RenameVStorageObjectRequestType
    +
    +func init() {
    +	t["RenameVStorageObject"] = reflect.TypeOf((*RenameVStorageObject)(nil)).Elem()
    +}
    +
    +type RenameVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	Name      string                 `xml:"name"`
    +}
    +
    +func init() {
    +	t["RenameVStorageObjectRequestType"] = reflect.TypeOf((*RenameVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type RenameVStorageObjectResponse struct {
    +}
    +
    +type Rename_Task RenameRequestType
    +
    +func init() {
    +	t["Rename_Task"] = reflect.TypeOf((*Rename_Task)(nil)).Elem()
    +}
    +
    +type Rename_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ReplaceCACertificatesAndCRLs ReplaceCACertificatesAndCRLsRequestType
    +
    +func init() {
    +	t["ReplaceCACertificatesAndCRLs"] = reflect.TypeOf((*ReplaceCACertificatesAndCRLs)(nil)).Elem()
    +}
    +
    +type ReplaceCACertificatesAndCRLsRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	CaCert []string               `xml:"caCert"`
    +	CaCrl  []string               `xml:"caCrl,omitempty"`
    +}
    +
    +func init() {
    +	t["ReplaceCACertificatesAndCRLsRequestType"] = reflect.TypeOf((*ReplaceCACertificatesAndCRLsRequestType)(nil)).Elem()
    +}
    +
    +type ReplaceCACertificatesAndCRLsResponse struct {
    +}
    +
    +type ReplaceSmartCardTrustAnchors ReplaceSmartCardTrustAnchorsRequestType
    +
    +func init() {
    +	t["ReplaceSmartCardTrustAnchors"] = reflect.TypeOf((*ReplaceSmartCardTrustAnchors)(nil)).Elem()
    +}
    +
    +type ReplaceSmartCardTrustAnchorsRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Certs []string               `xml:"certs,omitempty"`
    +}
    +
    +func init() {
    +	t["ReplaceSmartCardTrustAnchorsRequestType"] = reflect.TypeOf((*ReplaceSmartCardTrustAnchorsRequestType)(nil)).Elem()
    +}
    +
    +type ReplaceSmartCardTrustAnchorsResponse struct {
    +}
    +
    +type ReplicationConfigFault struct {
    +	ReplicationFault
    +}
    +
    +func init() {
    +	t["ReplicationConfigFault"] = reflect.TypeOf((*ReplicationConfigFault)(nil)).Elem()
    +}
    +
    +type ReplicationConfigFaultFault BaseReplicationConfigFault
    +
    +func init() {
    +	t["ReplicationConfigFaultFault"] = reflect.TypeOf((*ReplicationConfigFaultFault)(nil)).Elem()
    +}
    +
    +type ReplicationConfigSpec struct {
    +	DynamicData
    +
    +	Generation                  int64                         `xml:"generation"`
    +	VmReplicationId             string                        `xml:"vmReplicationId"`
    +	Destination                 string                        `xml:"destination"`
    +	Port                        int32                         `xml:"port"`
    +	Rpo                         int64                         `xml:"rpo"`
    +	QuiesceGuestEnabled         bool                          `xml:"quiesceGuestEnabled"`
    +	Paused                      bool                          `xml:"paused"`
    +	OppUpdatesEnabled           bool                          `xml:"oppUpdatesEnabled"`
    +	NetCompressionEnabled       *bool                         `xml:"netCompressionEnabled"`
    +	NetEncryptionEnabled        *bool                         `xml:"netEncryptionEnabled"`
    +	EncryptionDestination       string                        `xml:"encryptionDestination,omitempty"`
    +	EncryptionPort              int32                         `xml:"encryptionPort,omitempty"`
    +	RemoteCertificateThumbprint string                        `xml:"remoteCertificateThumbprint,omitempty"`
    +	Disk                        []ReplicationInfoDiskSettings `xml:"disk,omitempty"`
    +}
    +
    +func init() {
    +	t["ReplicationConfigSpec"] = reflect.TypeOf((*ReplicationConfigSpec)(nil)).Elem()
    +}
    +
    +type ReplicationDiskConfigFault struct {
    +	ReplicationConfigFault
    +
    +	Reason string                  `xml:"reason,omitempty"`
    +	VmRef  *ManagedObjectReference `xml:"vmRef,omitempty"`
    +	Key    int32                   `xml:"key,omitempty"`
    +}
    +
    +func init() {
    +	t["ReplicationDiskConfigFault"] = reflect.TypeOf((*ReplicationDiskConfigFault)(nil)).Elem()
    +}
    +
    +type ReplicationDiskConfigFaultFault ReplicationDiskConfigFault
    +
    +func init() {
    +	t["ReplicationDiskConfigFaultFault"] = reflect.TypeOf((*ReplicationDiskConfigFaultFault)(nil)).Elem()
    +}
    +
    +type ReplicationFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["ReplicationFault"] = reflect.TypeOf((*ReplicationFault)(nil)).Elem()
    +}
    +
    +type ReplicationFaultFault BaseReplicationFault
    +
    +func init() {
    +	t["ReplicationFaultFault"] = reflect.TypeOf((*ReplicationFaultFault)(nil)).Elem()
    +}
    +
    +type ReplicationGroupId struct {
    +	DynamicData
    +
    +	FaultDomainId FaultDomainId `xml:"faultDomainId"`
    +	DeviceGroupId DeviceGroupId `xml:"deviceGroupId"`
    +}
    +
    +func init() {
    +	t["ReplicationGroupId"] = reflect.TypeOf((*ReplicationGroupId)(nil)).Elem()
    +}
    +
    +type ReplicationIncompatibleWithFT struct {
    +	ReplicationFault
    +}
    +
    +func init() {
    +	t["ReplicationIncompatibleWithFT"] = reflect.TypeOf((*ReplicationIncompatibleWithFT)(nil)).Elem()
    +}
    +
    +type ReplicationIncompatibleWithFTFault ReplicationIncompatibleWithFT
    +
    +func init() {
    +	t["ReplicationIncompatibleWithFTFault"] = reflect.TypeOf((*ReplicationIncompatibleWithFTFault)(nil)).Elem()
    +}
    +
    +type ReplicationInfoDiskSettings struct {
    +	DynamicData
    +
    +	Key               int32  `xml:"key"`
    +	DiskReplicationId string `xml:"diskReplicationId"`
    +}
    +
    +func init() {
    +	t["ReplicationInfoDiskSettings"] = reflect.TypeOf((*ReplicationInfoDiskSettings)(nil)).Elem()
    +}
    +
    +type ReplicationInvalidOptions struct {
    +	ReplicationFault
    +
    +	Options string                  `xml:"options"`
    +	Entity  *ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["ReplicationInvalidOptions"] = reflect.TypeOf((*ReplicationInvalidOptions)(nil)).Elem()
    +}
    +
    +type ReplicationInvalidOptionsFault ReplicationInvalidOptions
    +
    +func init() {
    +	t["ReplicationInvalidOptionsFault"] = reflect.TypeOf((*ReplicationInvalidOptionsFault)(nil)).Elem()
    +}
    +
    +type ReplicationNotSupportedOnHost struct {
    +	ReplicationFault
    +}
    +
    +func init() {
    +	t["ReplicationNotSupportedOnHost"] = reflect.TypeOf((*ReplicationNotSupportedOnHost)(nil)).Elem()
    +}
    +
    +type ReplicationNotSupportedOnHostFault ReplicationNotSupportedOnHost
    +
    +func init() {
    +	t["ReplicationNotSupportedOnHostFault"] = reflect.TypeOf((*ReplicationNotSupportedOnHostFault)(nil)).Elem()
    +}
    +
    +type ReplicationSpec struct {
    +	DynamicData
    +
    +	ReplicationGroupId ReplicationGroupId `xml:"replicationGroupId"`
    +}
    +
    +func init() {
    +	t["ReplicationSpec"] = reflect.TypeOf((*ReplicationSpec)(nil)).Elem()
    +}
    +
    +type ReplicationVmConfigFault struct {
    +	ReplicationConfigFault
    +
    +	Reason string                  `xml:"reason,omitempty"`
    +	VmRef  *ManagedObjectReference `xml:"vmRef,omitempty"`
    +}
    +
    +func init() {
    +	t["ReplicationVmConfigFault"] = reflect.TypeOf((*ReplicationVmConfigFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmConfigFaultFault ReplicationVmConfigFault
    +
    +func init() {
    +	t["ReplicationVmConfigFaultFault"] = reflect.TypeOf((*ReplicationVmConfigFaultFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmFault struct {
    +	ReplicationFault
    +
    +	Reason     string                  `xml:"reason,omitempty"`
    +	State      string                  `xml:"state,omitempty"`
    +	InstanceId string                  `xml:"instanceId,omitempty"`
    +	Vm         *ManagedObjectReference `xml:"vm,omitempty"`
    +}
    +
    +func init() {
    +	t["ReplicationVmFault"] = reflect.TypeOf((*ReplicationVmFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmFaultFault BaseReplicationVmFault
    +
    +func init() {
    +	t["ReplicationVmFaultFault"] = reflect.TypeOf((*ReplicationVmFaultFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmInProgressFault struct {
    +	ReplicationVmFault
    +
    +	RequestedActivity  string `xml:"requestedActivity"`
    +	InProgressActivity string `xml:"inProgressActivity"`
    +}
    +
    +func init() {
    +	t["ReplicationVmInProgressFault"] = reflect.TypeOf((*ReplicationVmInProgressFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmInProgressFaultFault ReplicationVmInProgressFault
    +
    +func init() {
    +	t["ReplicationVmInProgressFaultFault"] = reflect.TypeOf((*ReplicationVmInProgressFaultFault)(nil)).Elem()
    +}
    +
    +type ReplicationVmProgressInfo struct {
    +	DynamicData
    +
    +	Progress              int32 `xml:"progress"`
    +	BytesTransferred      int64 `xml:"bytesTransferred"`
    +	BytesToTransfer       int64 `xml:"bytesToTransfer"`
    +	ChecksumTotalBytes    int64 `xml:"checksumTotalBytes,omitempty"`
    +	ChecksumComparedBytes int64 `xml:"checksumComparedBytes,omitempty"`
    +}
    +
    +func init() {
    +	t["ReplicationVmProgressInfo"] = reflect.TypeOf((*ReplicationVmProgressInfo)(nil)).Elem()
    +}
    +
    +type RequestCanceled struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["RequestCanceled"] = reflect.TypeOf((*RequestCanceled)(nil)).Elem()
    +}
    +
    +type RequestCanceledFault RequestCanceled
    +
    +func init() {
    +	t["RequestCanceledFault"] = reflect.TypeOf((*RequestCanceledFault)(nil)).Elem()
    +}
    +
    +type RescanAllHba RescanAllHbaRequestType
    +
    +func init() {
    +	t["RescanAllHba"] = reflect.TypeOf((*RescanAllHba)(nil)).Elem()
    +}
    +
    +type RescanAllHbaRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RescanAllHbaRequestType"] = reflect.TypeOf((*RescanAllHbaRequestType)(nil)).Elem()
    +}
    +
    +type RescanAllHbaResponse struct {
    +}
    +
    +type RescanHba RescanHbaRequestType
    +
    +func init() {
    +	t["RescanHba"] = reflect.TypeOf((*RescanHba)(nil)).Elem()
    +}
    +
    +type RescanHbaRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	HbaDevice string                 `xml:"hbaDevice"`
    +}
    +
    +func init() {
    +	t["RescanHbaRequestType"] = reflect.TypeOf((*RescanHbaRequestType)(nil)).Elem()
    +}
    +
    +type RescanHbaResponse struct {
    +}
    +
    +type RescanVffs RescanVffsRequestType
    +
    +func init() {
    +	t["RescanVffs"] = reflect.TypeOf((*RescanVffs)(nil)).Elem()
    +}
    +
    +type RescanVffsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RescanVffsRequestType"] = reflect.TypeOf((*RescanVffsRequestType)(nil)).Elem()
    +}
    +
    +type RescanVffsResponse struct {
    +}
    +
    +type RescanVmfs RescanVmfsRequestType
    +
    +func init() {
    +	t["RescanVmfs"] = reflect.TypeOf((*RescanVmfs)(nil)).Elem()
    +}
    +
    +type RescanVmfsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RescanVmfsRequestType"] = reflect.TypeOf((*RescanVmfsRequestType)(nil)).Elem()
    +}
    +
    +type RescanVmfsResponse struct {
    +}
    +
    +type ResetCollector ResetCollectorRequestType
    +
    +func init() {
    +	t["ResetCollector"] = reflect.TypeOf((*ResetCollector)(nil)).Elem()
    +}
    +
    +type ResetCollectorRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ResetCollectorRequestType"] = reflect.TypeOf((*ResetCollectorRequestType)(nil)).Elem()
    +}
    +
    +type ResetCollectorResponse struct {
    +}
    +
    +type ResetCounterLevelMapping ResetCounterLevelMappingRequestType
    +
    +func init() {
    +	t["ResetCounterLevelMapping"] = reflect.TypeOf((*ResetCounterLevelMapping)(nil)).Elem()
    +}
    +
    +type ResetCounterLevelMappingRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Counters []int32                `xml:"counters"`
    +}
    +
    +func init() {
    +	t["ResetCounterLevelMappingRequestType"] = reflect.TypeOf((*ResetCounterLevelMappingRequestType)(nil)).Elem()
    +}
    +
    +type ResetCounterLevelMappingResponse struct {
    +}
    +
    +type ResetEntityPermissions ResetEntityPermissionsRequestType
    +
    +func init() {
    +	t["ResetEntityPermissions"] = reflect.TypeOf((*ResetEntityPermissions)(nil)).Elem()
    +}
    +
    +type ResetEntityPermissionsRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Entity     ManagedObjectReference `xml:"entity"`
    +	Permission []Permission           `xml:"permission,omitempty"`
    +}
    +
    +func init() {
    +	t["ResetEntityPermissionsRequestType"] = reflect.TypeOf((*ResetEntityPermissionsRequestType)(nil)).Elem()
    +}
    +
    +type ResetEntityPermissionsResponse struct {
    +}
    +
    +type ResetFirmwareToFactoryDefaults ResetFirmwareToFactoryDefaultsRequestType
    +
    +func init() {
    +	t["ResetFirmwareToFactoryDefaults"] = reflect.TypeOf((*ResetFirmwareToFactoryDefaults)(nil)).Elem()
    +}
    +
    +type ResetFirmwareToFactoryDefaultsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ResetFirmwareToFactoryDefaultsRequestType"] = reflect.TypeOf((*ResetFirmwareToFactoryDefaultsRequestType)(nil)).Elem()
    +}
    +
    +type ResetFirmwareToFactoryDefaultsResponse struct {
    +}
    +
    +type ResetGuestInformation ResetGuestInformationRequestType
    +
    +func init() {
    +	t["ResetGuestInformation"] = reflect.TypeOf((*ResetGuestInformation)(nil)).Elem()
    +}
    +
    +type ResetGuestInformationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ResetGuestInformationRequestType"] = reflect.TypeOf((*ResetGuestInformationRequestType)(nil)).Elem()
    +}
    +
    +type ResetGuestInformationResponse struct {
    +}
    +
    +type ResetListView ResetListViewRequestType
    +
    +func init() {
    +	t["ResetListView"] = reflect.TypeOf((*ResetListView)(nil)).Elem()
    +}
    +
    +type ResetListViewFromView ResetListViewFromViewRequestType
    +
    +func init() {
    +	t["ResetListViewFromView"] = reflect.TypeOf((*ResetListViewFromView)(nil)).Elem()
    +}
    +
    +type ResetListViewFromViewRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	View ManagedObjectReference `xml:"view"`
    +}
    +
    +func init() {
    +	t["ResetListViewFromViewRequestType"] = reflect.TypeOf((*ResetListViewFromViewRequestType)(nil)).Elem()
    +}
    +
    +type ResetListViewFromViewResponse struct {
    +}
    +
    +type ResetListViewRequestType struct {
    +	This ManagedObjectReference   `xml:"_this"`
    +	Obj  []ManagedObjectReference `xml:"obj,omitempty"`
    +}
    +
    +func init() {
    +	t["ResetListViewRequestType"] = reflect.TypeOf((*ResetListViewRequestType)(nil)).Elem()
    +}
    +
    +type ResetListViewResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type ResetSystemHealthInfo ResetSystemHealthInfoRequestType
    +
    +func init() {
    +	t["ResetSystemHealthInfo"] = reflect.TypeOf((*ResetSystemHealthInfo)(nil)).Elem()
    +}
    +
    +type ResetSystemHealthInfoRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ResetSystemHealthInfoRequestType"] = reflect.TypeOf((*ResetSystemHealthInfoRequestType)(nil)).Elem()
    +}
    +
    +type ResetSystemHealthInfoResponse struct {
    +}
    +
    +type ResetVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ResetVMRequestType"] = reflect.TypeOf((*ResetVMRequestType)(nil)).Elem()
    +}
    +
    +type ResetVM_Task ResetVMRequestType
    +
    +func init() {
    +	t["ResetVM_Task"] = reflect.TypeOf((*ResetVM_Task)(nil)).Elem()
    +}
    +
    +type ResetVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ResignatureUnresolvedVmfsVolumeRequestType struct {
    +	This           ManagedObjectReference            `xml:"_this"`
    +	ResolutionSpec HostUnresolvedVmfsResignatureSpec `xml:"resolutionSpec"`
    +}
    +
    +func init() {
    +	t["ResignatureUnresolvedVmfsVolumeRequestType"] = reflect.TypeOf((*ResignatureUnresolvedVmfsVolumeRequestType)(nil)).Elem()
    +}
    +
    +type ResignatureUnresolvedVmfsVolume_Task ResignatureUnresolvedVmfsVolumeRequestType
    +
    +func init() {
    +	t["ResignatureUnresolvedVmfsVolume_Task"] = reflect.TypeOf((*ResignatureUnresolvedVmfsVolume_Task)(nil)).Elem()
    +}
    +
    +type ResignatureUnresolvedVmfsVolume_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ResolveInstallationErrorsOnClusterRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +	Cluster  ManagedObjectReference `xml:"cluster"`
    +}
    +
    +func init() {
    +	t["ResolveInstallationErrorsOnClusterRequestType"] = reflect.TypeOf((*ResolveInstallationErrorsOnClusterRequestType)(nil)).Elem()
    +}
    +
    +type ResolveInstallationErrorsOnCluster_Task ResolveInstallationErrorsOnClusterRequestType
    +
    +func init() {
    +	t["ResolveInstallationErrorsOnCluster_Task"] = reflect.TypeOf((*ResolveInstallationErrorsOnCluster_Task)(nil)).Elem()
    +}
    +
    +type ResolveInstallationErrorsOnCluster_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ResolveInstallationErrorsOnHostRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +	Host     ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["ResolveInstallationErrorsOnHostRequestType"] = reflect.TypeOf((*ResolveInstallationErrorsOnHostRequestType)(nil)).Elem()
    +}
    +
    +type ResolveInstallationErrorsOnHost_Task ResolveInstallationErrorsOnHostRequestType
    +
    +func init() {
    +	t["ResolveInstallationErrorsOnHost_Task"] = reflect.TypeOf((*ResolveInstallationErrorsOnHost_Task)(nil)).Elem()
    +}
    +
    +type ResolveInstallationErrorsOnHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ResolveMultipleUnresolvedVmfsVolumes ResolveMultipleUnresolvedVmfsVolumesRequestType
    +
    +func init() {
    +	t["ResolveMultipleUnresolvedVmfsVolumes"] = reflect.TypeOf((*ResolveMultipleUnresolvedVmfsVolumes)(nil)).Elem()
    +}
    +
    +type ResolveMultipleUnresolvedVmfsVolumesExRequestType struct {
    +	This           ManagedObjectReference             `xml:"_this"`
    +	ResolutionSpec []HostUnresolvedVmfsResolutionSpec `xml:"resolutionSpec"`
    +}
    +
    +func init() {
    +	t["ResolveMultipleUnresolvedVmfsVolumesExRequestType"] = reflect.TypeOf((*ResolveMultipleUnresolvedVmfsVolumesExRequestType)(nil)).Elem()
    +}
    +
    +type ResolveMultipleUnresolvedVmfsVolumesEx_Task ResolveMultipleUnresolvedVmfsVolumesExRequestType
    +
    +func init() {
    +	t["ResolveMultipleUnresolvedVmfsVolumesEx_Task"] = reflect.TypeOf((*ResolveMultipleUnresolvedVmfsVolumesEx_Task)(nil)).Elem()
    +}
    +
    +type ResolveMultipleUnresolvedVmfsVolumesEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ResolveMultipleUnresolvedVmfsVolumesRequestType struct {
    +	This           ManagedObjectReference             `xml:"_this"`
    +	ResolutionSpec []HostUnresolvedVmfsResolutionSpec `xml:"resolutionSpec"`
    +}
    +
    +func init() {
    +	t["ResolveMultipleUnresolvedVmfsVolumesRequestType"] = reflect.TypeOf((*ResolveMultipleUnresolvedVmfsVolumesRequestType)(nil)).Elem()
    +}
    +
    +type ResolveMultipleUnresolvedVmfsVolumesResponse struct {
    +	Returnval []HostUnresolvedVmfsResolutionResult `xml:"returnval,omitempty"`
    +}
    +
    +type ResourceAllocationInfo struct {
    +	DynamicData
    +
    +	Reservation           *int64      `xml:"reservation"`
    +	ExpandableReservation *bool       `xml:"expandableReservation"`
    +	Limit                 *int64      `xml:"limit"`
    +	Shares                *SharesInfo `xml:"shares,omitempty"`
    +	OverheadLimit         *int64      `xml:"overheadLimit"`
    +}
    +
    +func init() {
    +	t["ResourceAllocationInfo"] = reflect.TypeOf((*ResourceAllocationInfo)(nil)).Elem()
    +}
    +
    +type ResourceAllocationOption struct {
    +	DynamicData
    +
    +	SharesOption SharesOption `xml:"sharesOption"`
    +}
    +
    +func init() {
    +	t["ResourceAllocationOption"] = reflect.TypeOf((*ResourceAllocationOption)(nil)).Elem()
    +}
    +
    +type ResourceConfigOption struct {
    +	DynamicData
    +
    +	CpuAllocationOption    ResourceAllocationOption `xml:"cpuAllocationOption"`
    +	MemoryAllocationOption ResourceAllocationOption `xml:"memoryAllocationOption"`
    +}
    +
    +func init() {
    +	t["ResourceConfigOption"] = reflect.TypeOf((*ResourceConfigOption)(nil)).Elem()
    +}
    +
    +type ResourceConfigSpec struct {
    +	DynamicData
    +
    +	Entity           *ManagedObjectReference `xml:"entity,omitempty"`
    +	ChangeVersion    string                  `xml:"changeVersion,omitempty"`
    +	LastModified     *time.Time              `xml:"lastModified"`
    +	CpuAllocation    ResourceAllocationInfo  `xml:"cpuAllocation"`
    +	MemoryAllocation ResourceAllocationInfo  `xml:"memoryAllocation"`
    +}
    +
    +func init() {
    +	t["ResourceConfigSpec"] = reflect.TypeOf((*ResourceConfigSpec)(nil)).Elem()
    +}
    +
    +type ResourceInUse struct {
    +	VimFault
    +
    +	Type string `xml:"type,omitempty"`
    +	Name string `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["ResourceInUse"] = reflect.TypeOf((*ResourceInUse)(nil)).Elem()
    +}
    +
    +type ResourceInUseFault BaseResourceInUse
    +
    +func init() {
    +	t["ResourceInUseFault"] = reflect.TypeOf((*ResourceInUseFault)(nil)).Elem()
    +}
    +
    +type ResourceNotAvailable struct {
    +	VimFault
    +
    +	ContainerType string `xml:"containerType,omitempty"`
    +	ContainerName string `xml:"containerName,omitempty"`
    +	Type          string `xml:"type,omitempty"`
    +}
    +
    +func init() {
    +	t["ResourceNotAvailable"] = reflect.TypeOf((*ResourceNotAvailable)(nil)).Elem()
    +}
    +
    +type ResourceNotAvailableFault ResourceNotAvailable
    +
    +func init() {
    +	t["ResourceNotAvailableFault"] = reflect.TypeOf((*ResourceNotAvailableFault)(nil)).Elem()
    +}
    +
    +type ResourcePoolCreatedEvent struct {
    +	ResourcePoolEvent
    +
    +	Parent ResourcePoolEventArgument `xml:"parent"`
    +}
    +
    +func init() {
    +	t["ResourcePoolCreatedEvent"] = reflect.TypeOf((*ResourcePoolCreatedEvent)(nil)).Elem()
    +}
    +
    +type ResourcePoolDestroyedEvent struct {
    +	ResourcePoolEvent
    +}
    +
    +func init() {
    +	t["ResourcePoolDestroyedEvent"] = reflect.TypeOf((*ResourcePoolDestroyedEvent)(nil)).Elem()
    +}
    +
    +type ResourcePoolEvent struct {
    +	Event
    +
    +	ResourcePool ResourcePoolEventArgument `xml:"resourcePool"`
    +}
    +
    +func init() {
    +	t["ResourcePoolEvent"] = reflect.TypeOf((*ResourcePoolEvent)(nil)).Elem()
    +}
    +
    +type ResourcePoolEventArgument struct {
    +	EntityEventArgument
    +
    +	ResourcePool ManagedObjectReference `xml:"resourcePool"`
    +}
    +
    +func init() {
    +	t["ResourcePoolEventArgument"] = reflect.TypeOf((*ResourcePoolEventArgument)(nil)).Elem()
    +}
    +
    +type ResourcePoolMovedEvent struct {
    +	ResourcePoolEvent
    +
    +	OldParent ResourcePoolEventArgument `xml:"oldParent"`
    +	NewParent ResourcePoolEventArgument `xml:"newParent"`
    +}
    +
    +func init() {
    +	t["ResourcePoolMovedEvent"] = reflect.TypeOf((*ResourcePoolMovedEvent)(nil)).Elem()
    +}
    +
    +type ResourcePoolQuickStats struct {
    +	DynamicData
    +
    +	OverallCpuUsage              int64 `xml:"overallCpuUsage,omitempty"`
    +	OverallCpuDemand             int64 `xml:"overallCpuDemand,omitempty"`
    +	GuestMemoryUsage             int64 `xml:"guestMemoryUsage,omitempty"`
    +	HostMemoryUsage              int64 `xml:"hostMemoryUsage,omitempty"`
    +	DistributedCpuEntitlement    int64 `xml:"distributedCpuEntitlement,omitempty"`
    +	DistributedMemoryEntitlement int64 `xml:"distributedMemoryEntitlement,omitempty"`
    +	StaticCpuEntitlement         int32 `xml:"staticCpuEntitlement,omitempty"`
    +	StaticMemoryEntitlement      int32 `xml:"staticMemoryEntitlement,omitempty"`
    +	PrivateMemory                int64 `xml:"privateMemory,omitempty"`
    +	SharedMemory                 int64 `xml:"sharedMemory,omitempty"`
    +	SwappedMemory                int64 `xml:"swappedMemory,omitempty"`
    +	BalloonedMemory              int64 `xml:"balloonedMemory,omitempty"`
    +	OverheadMemory               int64 `xml:"overheadMemory,omitempty"`
    +	ConsumedOverheadMemory       int64 `xml:"consumedOverheadMemory,omitempty"`
    +	CompressedMemory             int64 `xml:"compressedMemory,omitempty"`
    +}
    +
    +func init() {
    +	t["ResourcePoolQuickStats"] = reflect.TypeOf((*ResourcePoolQuickStats)(nil)).Elem()
    +}
    +
    +type ResourcePoolReconfiguredEvent struct {
    +	ResourcePoolEvent
    +
    +	ConfigChanges *ChangesInfoEventArgument `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["ResourcePoolReconfiguredEvent"] = reflect.TypeOf((*ResourcePoolReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type ResourcePoolResourceUsage struct {
    +	DynamicData
    +
    +	ReservationUsed      int64 `xml:"reservationUsed"`
    +	ReservationUsedForVm int64 `xml:"reservationUsedForVm"`
    +	UnreservedForPool    int64 `xml:"unreservedForPool"`
    +	UnreservedForVm      int64 `xml:"unreservedForVm"`
    +	OverallUsage         int64 `xml:"overallUsage"`
    +	MaxUsage             int64 `xml:"maxUsage"`
    +}
    +
    +func init() {
    +	t["ResourcePoolResourceUsage"] = reflect.TypeOf((*ResourcePoolResourceUsage)(nil)).Elem()
    +}
    +
    +type ResourcePoolRuntimeInfo struct {
    +	DynamicData
    +
    +	Memory        ResourcePoolResourceUsage `xml:"memory"`
    +	Cpu           ResourcePoolResourceUsage `xml:"cpu"`
    +	OverallStatus ManagedEntityStatus       `xml:"overallStatus"`
    +}
    +
    +func init() {
    +	t["ResourcePoolRuntimeInfo"] = reflect.TypeOf((*ResourcePoolRuntimeInfo)(nil)).Elem()
    +}
    +
    +type ResourcePoolSummary struct {
    +	DynamicData
    +
    +	Name               string                  `xml:"name"`
    +	Config             ResourceConfigSpec      `xml:"config"`
    +	Runtime            ResourcePoolRuntimeInfo `xml:"runtime"`
    +	QuickStats         *ResourcePoolQuickStats `xml:"quickStats,omitempty"`
    +	ConfiguredMemoryMB int32                   `xml:"configuredMemoryMB,omitempty"`
    +}
    +
    +func init() {
    +	t["ResourcePoolSummary"] = reflect.TypeOf((*ResourcePoolSummary)(nil)).Elem()
    +}
    +
    +type ResourceViolatedEvent struct {
    +	ResourcePoolEvent
    +}
    +
    +func init() {
    +	t["ResourceViolatedEvent"] = reflect.TypeOf((*ResourceViolatedEvent)(nil)).Elem()
    +}
    +
    +type RestartService RestartServiceRequestType
    +
    +func init() {
    +	t["RestartService"] = reflect.TypeOf((*RestartService)(nil)).Elem()
    +}
    +
    +type RestartServiceConsoleVirtualNic RestartServiceConsoleVirtualNicRequestType
    +
    +func init() {
    +	t["RestartServiceConsoleVirtualNic"] = reflect.TypeOf((*RestartServiceConsoleVirtualNic)(nil)).Elem()
    +}
    +
    +type RestartServiceConsoleVirtualNicRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Device string                 `xml:"device"`
    +}
    +
    +func init() {
    +	t["RestartServiceConsoleVirtualNicRequestType"] = reflect.TypeOf((*RestartServiceConsoleVirtualNicRequestType)(nil)).Elem()
    +}
    +
    +type RestartServiceConsoleVirtualNicResponse struct {
    +}
    +
    +type RestartServiceRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   string                 `xml:"id"`
    +}
    +
    +func init() {
    +	t["RestartServiceRequestType"] = reflect.TypeOf((*RestartServiceRequestType)(nil)).Elem()
    +}
    +
    +type RestartServiceResponse struct {
    +}
    +
    +type RestoreFirmwareConfiguration RestoreFirmwareConfigurationRequestType
    +
    +func init() {
    +	t["RestoreFirmwareConfiguration"] = reflect.TypeOf((*RestoreFirmwareConfiguration)(nil)).Elem()
    +}
    +
    +type RestoreFirmwareConfigurationRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Force bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["RestoreFirmwareConfigurationRequestType"] = reflect.TypeOf((*RestoreFirmwareConfigurationRequestType)(nil)).Elem()
    +}
    +
    +type RestoreFirmwareConfigurationResponse struct {
    +}
    +
    +type RestrictedByAdministrator struct {
    +	RuntimeFault
    +
    +	Details string `xml:"details"`
    +}
    +
    +func init() {
    +	t["RestrictedByAdministrator"] = reflect.TypeOf((*RestrictedByAdministrator)(nil)).Elem()
    +}
    +
    +type RestrictedByAdministratorFault RestrictedByAdministrator
    +
    +func init() {
    +	t["RestrictedByAdministratorFault"] = reflect.TypeOf((*RestrictedByAdministratorFault)(nil)).Elem()
    +}
    +
    +type RestrictedVersion struct {
    +	SecurityError
    +}
    +
    +func init() {
    +	t["RestrictedVersion"] = reflect.TypeOf((*RestrictedVersion)(nil)).Elem()
    +}
    +
    +type RestrictedVersionFault RestrictedVersion
    +
    +func init() {
    +	t["RestrictedVersionFault"] = reflect.TypeOf((*RestrictedVersionFault)(nil)).Elem()
    +}
    +
    +type RetrieveAllPermissions RetrieveAllPermissionsRequestType
    +
    +func init() {
    +	t["RetrieveAllPermissions"] = reflect.TypeOf((*RetrieveAllPermissions)(nil)).Elem()
    +}
    +
    +type RetrieveAllPermissionsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RetrieveAllPermissionsRequestType"] = reflect.TypeOf((*RetrieveAllPermissionsRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveAllPermissionsResponse struct {
    +	Returnval []Permission `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveAnswerFile RetrieveAnswerFileRequestType
    +
    +func init() {
    +	t["RetrieveAnswerFile"] = reflect.TypeOf((*RetrieveAnswerFile)(nil)).Elem()
    +}
    +
    +type RetrieveAnswerFileForProfile RetrieveAnswerFileForProfileRequestType
    +
    +func init() {
    +	t["RetrieveAnswerFileForProfile"] = reflect.TypeOf((*RetrieveAnswerFileForProfile)(nil)).Elem()
    +}
    +
    +type RetrieveAnswerFileForProfileRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Host         ManagedObjectReference `xml:"host"`
    +	ApplyProfile HostApplyProfile       `xml:"applyProfile"`
    +}
    +
    +func init() {
    +	t["RetrieveAnswerFileForProfileRequestType"] = reflect.TypeOf((*RetrieveAnswerFileForProfileRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveAnswerFileForProfileResponse struct {
    +	Returnval *AnswerFile `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveAnswerFileRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Host ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["RetrieveAnswerFileRequestType"] = reflect.TypeOf((*RetrieveAnswerFileRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveAnswerFileResponse struct {
    +	Returnval *AnswerFile `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveArgumentDescription RetrieveArgumentDescriptionRequestType
    +
    +func init() {
    +	t["RetrieveArgumentDescription"] = reflect.TypeOf((*RetrieveArgumentDescription)(nil)).Elem()
    +}
    +
    +type RetrieveArgumentDescriptionRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	EventTypeId string                 `xml:"eventTypeId"`
    +}
    +
    +func init() {
    +	t["RetrieveArgumentDescriptionRequestType"] = reflect.TypeOf((*RetrieveArgumentDescriptionRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveArgumentDescriptionResponse struct {
    +	Returnval []EventArgDesc `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveClientCert RetrieveClientCertRequestType
    +
    +func init() {
    +	t["RetrieveClientCert"] = reflect.TypeOf((*RetrieveClientCert)(nil)).Elem()
    +}
    +
    +type RetrieveClientCertRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Cluster KeyProviderId          `xml:"cluster"`
    +}
    +
    +func init() {
    +	t["RetrieveClientCertRequestType"] = reflect.TypeOf((*RetrieveClientCertRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveClientCertResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type RetrieveClientCsr RetrieveClientCsrRequestType
    +
    +func init() {
    +	t["RetrieveClientCsr"] = reflect.TypeOf((*RetrieveClientCsr)(nil)).Elem()
    +}
    +
    +type RetrieveClientCsrRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Cluster KeyProviderId          `xml:"cluster"`
    +}
    +
    +func init() {
    +	t["RetrieveClientCsrRequestType"] = reflect.TypeOf((*RetrieveClientCsrRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveClientCsrResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type RetrieveDasAdvancedRuntimeInfo RetrieveDasAdvancedRuntimeInfoRequestType
    +
    +func init() {
    +	t["RetrieveDasAdvancedRuntimeInfo"] = reflect.TypeOf((*RetrieveDasAdvancedRuntimeInfo)(nil)).Elem()
    +}
    +
    +type RetrieveDasAdvancedRuntimeInfoRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RetrieveDasAdvancedRuntimeInfoRequestType"] = reflect.TypeOf((*RetrieveDasAdvancedRuntimeInfoRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveDasAdvancedRuntimeInfoResponse struct {
    +	Returnval BaseClusterDasAdvancedRuntimeInfo `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type RetrieveDescription RetrieveDescriptionRequestType
    +
    +func init() {
    +	t["RetrieveDescription"] = reflect.TypeOf((*RetrieveDescription)(nil)).Elem()
    +}
    +
    +type RetrieveDescriptionRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RetrieveDescriptionRequestType"] = reflect.TypeOf((*RetrieveDescriptionRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveDescriptionResponse struct {
    +	Returnval *ProfileDescription `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveDiskPartitionInfo RetrieveDiskPartitionInfoRequestType
    +
    +func init() {
    +	t["RetrieveDiskPartitionInfo"] = reflect.TypeOf((*RetrieveDiskPartitionInfo)(nil)).Elem()
    +}
    +
    +type RetrieveDiskPartitionInfoRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	DevicePath []string               `xml:"devicePath"`
    +}
    +
    +func init() {
    +	t["RetrieveDiskPartitionInfoRequestType"] = reflect.TypeOf((*RetrieveDiskPartitionInfoRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveDiskPartitionInfoResponse struct {
    +	Returnval []HostDiskPartitionInfo `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveEntityPermissions RetrieveEntityPermissionsRequestType
    +
    +func init() {
    +	t["RetrieveEntityPermissions"] = reflect.TypeOf((*RetrieveEntityPermissions)(nil)).Elem()
    +}
    +
    +type RetrieveEntityPermissionsRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Entity    ManagedObjectReference `xml:"entity"`
    +	Inherited bool                   `xml:"inherited"`
    +}
    +
    +func init() {
    +	t["RetrieveEntityPermissionsRequestType"] = reflect.TypeOf((*RetrieveEntityPermissionsRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveEntityPermissionsResponse struct {
    +	Returnval []Permission `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveEntityScheduledTask RetrieveEntityScheduledTaskRequestType
    +
    +func init() {
    +	t["RetrieveEntityScheduledTask"] = reflect.TypeOf((*RetrieveEntityScheduledTask)(nil)).Elem()
    +}
    +
    +type RetrieveEntityScheduledTaskRequestType struct {
    +	This   ManagedObjectReference  `xml:"_this"`
    +	Entity *ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["RetrieveEntityScheduledTaskRequestType"] = reflect.TypeOf((*RetrieveEntityScheduledTaskRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveEntityScheduledTaskResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveHardwareUptime RetrieveHardwareUptimeRequestType
    +
    +func init() {
    +	t["RetrieveHardwareUptime"] = reflect.TypeOf((*RetrieveHardwareUptime)(nil)).Elem()
    +}
    +
    +type RetrieveHardwareUptimeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RetrieveHardwareUptimeRequestType"] = reflect.TypeOf((*RetrieveHardwareUptimeRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveHardwareUptimeResponse struct {
    +	Returnval int64 `xml:"returnval"`
    +}
    +
    +type RetrieveHostAccessControlEntries RetrieveHostAccessControlEntriesRequestType
    +
    +func init() {
    +	t["RetrieveHostAccessControlEntries"] = reflect.TypeOf((*RetrieveHostAccessControlEntries)(nil)).Elem()
    +}
    +
    +type RetrieveHostAccessControlEntriesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RetrieveHostAccessControlEntriesRequestType"] = reflect.TypeOf((*RetrieveHostAccessControlEntriesRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveHostAccessControlEntriesResponse struct {
    +	Returnval []HostAccessControlEntry `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveHostCustomizations RetrieveHostCustomizationsRequestType
    +
    +func init() {
    +	t["RetrieveHostCustomizations"] = reflect.TypeOf((*RetrieveHostCustomizations)(nil)).Elem()
    +}
    +
    +type RetrieveHostCustomizationsForProfile RetrieveHostCustomizationsForProfileRequestType
    +
    +func init() {
    +	t["RetrieveHostCustomizationsForProfile"] = reflect.TypeOf((*RetrieveHostCustomizationsForProfile)(nil)).Elem()
    +}
    +
    +type RetrieveHostCustomizationsForProfileRequestType struct {
    +	This         ManagedObjectReference   `xml:"_this"`
    +	Hosts        []ManagedObjectReference `xml:"hosts,omitempty"`
    +	ApplyProfile HostApplyProfile         `xml:"applyProfile"`
    +}
    +
    +func init() {
    +	t["RetrieveHostCustomizationsForProfileRequestType"] = reflect.TypeOf((*RetrieveHostCustomizationsForProfileRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveHostCustomizationsForProfileResponse struct {
    +	Returnval []StructuredCustomizations `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveHostCustomizationsRequestType struct {
    +	This  ManagedObjectReference   `xml:"_this"`
    +	Hosts []ManagedObjectReference `xml:"hosts,omitempty"`
    +}
    +
    +func init() {
    +	t["RetrieveHostCustomizationsRequestType"] = reflect.TypeOf((*RetrieveHostCustomizationsRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveHostCustomizationsResponse struct {
    +	Returnval []StructuredCustomizations `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveHostSpecification RetrieveHostSpecificationRequestType
    +
    +func init() {
    +	t["RetrieveHostSpecification"] = reflect.TypeOf((*RetrieveHostSpecification)(nil)).Elem()
    +}
    +
    +type RetrieveHostSpecificationRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Host     ManagedObjectReference `xml:"host"`
    +	FromHost bool                   `xml:"fromHost"`
    +}
    +
    +func init() {
    +	t["RetrieveHostSpecificationRequestType"] = reflect.TypeOf((*RetrieveHostSpecificationRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveHostSpecificationResponse struct {
    +	Returnval HostSpecification `xml:"returnval"`
    +}
    +
    +type RetrieveKmipServerCert RetrieveKmipServerCertRequestType
    +
    +func init() {
    +	t["RetrieveKmipServerCert"] = reflect.TypeOf((*RetrieveKmipServerCert)(nil)).Elem()
    +}
    +
    +type RetrieveKmipServerCertRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	KeyProvider KeyProviderId          `xml:"keyProvider"`
    +	Server      KmipServerInfo         `xml:"server"`
    +}
    +
    +func init() {
    +	t["RetrieveKmipServerCertRequestType"] = reflect.TypeOf((*RetrieveKmipServerCertRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveKmipServerCertResponse struct {
    +	Returnval CryptoManagerKmipServerCertInfo `xml:"returnval"`
    +}
    +
    +type RetrieveKmipServersStatusRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Clusters []KmipClusterInfo      `xml:"clusters,omitempty"`
    +}
    +
    +func init() {
    +	t["RetrieveKmipServersStatusRequestType"] = reflect.TypeOf((*RetrieveKmipServersStatusRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveKmipServersStatus_Task RetrieveKmipServersStatusRequestType
    +
    +func init() {
    +	t["RetrieveKmipServersStatus_Task"] = reflect.TypeOf((*RetrieveKmipServersStatus_Task)(nil)).Elem()
    +}
    +
    +type RetrieveKmipServersStatus_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RetrieveObjectScheduledTask RetrieveObjectScheduledTaskRequestType
    +
    +func init() {
    +	t["RetrieveObjectScheduledTask"] = reflect.TypeOf((*RetrieveObjectScheduledTask)(nil)).Elem()
    +}
    +
    +type RetrieveObjectScheduledTaskRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Obj  *ManagedObjectReference `xml:"obj,omitempty"`
    +}
    +
    +func init() {
    +	t["RetrieveObjectScheduledTaskRequestType"] = reflect.TypeOf((*RetrieveObjectScheduledTaskRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveObjectScheduledTaskResponse struct {
    +	Returnval []ManagedObjectReference `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveOptions struct {
    +	DynamicData
    +
    +	MaxObjects int32 `xml:"maxObjects,omitempty"`
    +}
    +
    +func init() {
    +	t["RetrieveOptions"] = reflect.TypeOf((*RetrieveOptions)(nil)).Elem()
    +}
    +
    +type RetrieveProductComponents RetrieveProductComponentsRequestType
    +
    +func init() {
    +	t["RetrieveProductComponents"] = reflect.TypeOf((*RetrieveProductComponents)(nil)).Elem()
    +}
    +
    +type RetrieveProductComponentsRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RetrieveProductComponentsRequestType"] = reflect.TypeOf((*RetrieveProductComponentsRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveProductComponentsResponse struct {
    +	Returnval []ProductComponentInfo `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveProperties RetrievePropertiesRequestType
    +
    +func init() {
    +	t["RetrieveProperties"] = reflect.TypeOf((*RetrieveProperties)(nil)).Elem()
    +}
    +
    +type RetrievePropertiesEx RetrievePropertiesExRequestType
    +
    +func init() {
    +	t["RetrievePropertiesEx"] = reflect.TypeOf((*RetrievePropertiesEx)(nil)).Elem()
    +}
    +
    +type RetrievePropertiesExRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	SpecSet []PropertyFilterSpec   `xml:"specSet"`
    +	Options RetrieveOptions        `xml:"options"`
    +}
    +
    +func init() {
    +	t["RetrievePropertiesExRequestType"] = reflect.TypeOf((*RetrievePropertiesExRequestType)(nil)).Elem()
    +}
    +
    +type RetrievePropertiesExResponse struct {
    +	Returnval *RetrieveResult `xml:"returnval,omitempty"`
    +}
    +
    +type RetrievePropertiesRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	SpecSet []PropertyFilterSpec   `xml:"specSet"`
    +}
    +
    +func init() {
    +	t["RetrievePropertiesRequestType"] = reflect.TypeOf((*RetrievePropertiesRequestType)(nil)).Elem()
    +}
    +
    +type RetrievePropertiesResponse struct {
    +	Returnval []ObjectContent `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveResult struct {
    +	DynamicData
    +
    +	Token   string          `xml:"token,omitempty"`
    +	Objects []ObjectContent `xml:"objects"`
    +}
    +
    +func init() {
    +	t["RetrieveResult"] = reflect.TypeOf((*RetrieveResult)(nil)).Elem()
    +}
    +
    +type RetrieveRolePermissions RetrieveRolePermissionsRequestType
    +
    +func init() {
    +	t["RetrieveRolePermissions"] = reflect.TypeOf((*RetrieveRolePermissions)(nil)).Elem()
    +}
    +
    +type RetrieveRolePermissionsRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	RoleId int32                  `xml:"roleId"`
    +}
    +
    +func init() {
    +	t["RetrieveRolePermissionsRequestType"] = reflect.TypeOf((*RetrieveRolePermissionsRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveRolePermissionsResponse struct {
    +	Returnval []Permission `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveSelfSignedClientCert RetrieveSelfSignedClientCertRequestType
    +
    +func init() {
    +	t["RetrieveSelfSignedClientCert"] = reflect.TypeOf((*RetrieveSelfSignedClientCert)(nil)).Elem()
    +}
    +
    +type RetrieveSelfSignedClientCertRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Cluster KeyProviderId          `xml:"cluster"`
    +}
    +
    +func init() {
    +	t["RetrieveSelfSignedClientCertRequestType"] = reflect.TypeOf((*RetrieveSelfSignedClientCertRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveSelfSignedClientCertResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type RetrieveServiceContent RetrieveServiceContentRequestType
    +
    +func init() {
    +	t["RetrieveServiceContent"] = reflect.TypeOf((*RetrieveServiceContent)(nil)).Elem()
    +}
    +
    +type RetrieveServiceContentRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RetrieveServiceContentRequestType"] = reflect.TypeOf((*RetrieveServiceContentRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveServiceContentResponse struct {
    +	Returnval ServiceContent `xml:"returnval"`
    +}
    +
    +type RetrieveSnapshotInfo RetrieveSnapshotInfoRequestType
    +
    +func init() {
    +	t["RetrieveSnapshotInfo"] = reflect.TypeOf((*RetrieveSnapshotInfo)(nil)).Elem()
    +}
    +
    +type RetrieveSnapshotInfoRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["RetrieveSnapshotInfoRequestType"] = reflect.TypeOf((*RetrieveSnapshotInfoRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveSnapshotInfoResponse struct {
    +	Returnval VStorageObjectSnapshotInfo `xml:"returnval"`
    +}
    +
    +type RetrieveUserGroups RetrieveUserGroupsRequestType
    +
    +func init() {
    +	t["RetrieveUserGroups"] = reflect.TypeOf((*RetrieveUserGroups)(nil)).Elem()
    +}
    +
    +type RetrieveUserGroupsRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	Domain         string                 `xml:"domain,omitempty"`
    +	SearchStr      string                 `xml:"searchStr"`
    +	BelongsToGroup string                 `xml:"belongsToGroup,omitempty"`
    +	BelongsToUser  string                 `xml:"belongsToUser,omitempty"`
    +	ExactMatch     bool                   `xml:"exactMatch"`
    +	FindUsers      bool                   `xml:"findUsers"`
    +	FindGroups     bool                   `xml:"findGroups"`
    +}
    +
    +func init() {
    +	t["RetrieveUserGroupsRequestType"] = reflect.TypeOf((*RetrieveUserGroupsRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveUserGroupsResponse struct {
    +	Returnval []BaseUserSearchResult `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type RetrieveVStorageInfrastructureObjectPolicy RetrieveVStorageInfrastructureObjectPolicyRequestType
    +
    +func init() {
    +	t["RetrieveVStorageInfrastructureObjectPolicy"] = reflect.TypeOf((*RetrieveVStorageInfrastructureObjectPolicy)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageInfrastructureObjectPolicyRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["RetrieveVStorageInfrastructureObjectPolicyRequestType"] = reflect.TypeOf((*RetrieveVStorageInfrastructureObjectPolicyRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageInfrastructureObjectPolicyResponse struct {
    +	Returnval []VslmInfrastructureObjectPolicy `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveVStorageObjSpec struct {
    +	DynamicData
    +
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["RetrieveVStorageObjSpec"] = reflect.TypeOf((*RetrieveVStorageObjSpec)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageObject RetrieveVStorageObjectRequestType
    +
    +func init() {
    +	t["RetrieveVStorageObject"] = reflect.TypeOf((*RetrieveVStorageObject)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageObjectAssociations RetrieveVStorageObjectAssociationsRequestType
    +
    +func init() {
    +	t["RetrieveVStorageObjectAssociations"] = reflect.TypeOf((*RetrieveVStorageObjectAssociations)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageObjectAssociationsRequestType struct {
    +	This ManagedObjectReference    `xml:"_this"`
    +	Ids  []RetrieveVStorageObjSpec `xml:"ids,omitempty"`
    +}
    +
    +func init() {
    +	t["RetrieveVStorageObjectAssociationsRequestType"] = reflect.TypeOf((*RetrieveVStorageObjectAssociationsRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageObjectAssociationsResponse struct {
    +	Returnval []VStorageObjectAssociations `xml:"returnval,omitempty"`
    +}
    +
    +type RetrieveVStorageObjectRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["RetrieveVStorageObjectRequestType"] = reflect.TypeOf((*RetrieveVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageObjectResponse struct {
    +	Returnval VStorageObject `xml:"returnval"`
    +}
    +
    +type RetrieveVStorageObjectState RetrieveVStorageObjectStateRequestType
    +
    +func init() {
    +	t["RetrieveVStorageObjectState"] = reflect.TypeOf((*RetrieveVStorageObjectState)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageObjectStateRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Id        ID                     `xml:"id"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["RetrieveVStorageObjectStateRequestType"] = reflect.TypeOf((*RetrieveVStorageObjectStateRequestType)(nil)).Elem()
    +}
    +
    +type RetrieveVStorageObjectStateResponse struct {
    +	Returnval VStorageObjectStateInfo `xml:"returnval"`
    +}
    +
    +type RevertToCurrentSnapshotRequestType struct {
    +	This            ManagedObjectReference  `xml:"_this"`
    +	Host            *ManagedObjectReference `xml:"host,omitempty"`
    +	SuppressPowerOn *bool                   `xml:"suppressPowerOn"`
    +}
    +
    +func init() {
    +	t["RevertToCurrentSnapshotRequestType"] = reflect.TypeOf((*RevertToCurrentSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type RevertToCurrentSnapshot_Task RevertToCurrentSnapshotRequestType
    +
    +func init() {
    +	t["RevertToCurrentSnapshot_Task"] = reflect.TypeOf((*RevertToCurrentSnapshot_Task)(nil)).Elem()
    +}
    +
    +type RevertToCurrentSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RevertToSnapshotRequestType struct {
    +	This            ManagedObjectReference  `xml:"_this"`
    +	Host            *ManagedObjectReference `xml:"host,omitempty"`
    +	SuppressPowerOn *bool                   `xml:"suppressPowerOn"`
    +}
    +
    +func init() {
    +	t["RevertToSnapshotRequestType"] = reflect.TypeOf((*RevertToSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type RevertToSnapshot_Task RevertToSnapshotRequestType
    +
    +func init() {
    +	t["RevertToSnapshot_Task"] = reflect.TypeOf((*RevertToSnapshot_Task)(nil)).Elem()
    +}
    +
    +type RevertToSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RevertVStorageObjectRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Id         ID                     `xml:"id"`
    +	Datastore  ManagedObjectReference `xml:"datastore"`
    +	SnapshotId ID                     `xml:"snapshotId"`
    +}
    +
    +func init() {
    +	t["RevertVStorageObjectRequestType"] = reflect.TypeOf((*RevertVStorageObjectRequestType)(nil)).Elem()
    +}
    +
    +type RevertVStorageObject_Task RevertVStorageObjectRequestType
    +
    +func init() {
    +	t["RevertVStorageObject_Task"] = reflect.TypeOf((*RevertVStorageObject_Task)(nil)).Elem()
    +}
    +
    +type RevertVStorageObject_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type RewindCollector RewindCollectorRequestType
    +
    +func init() {
    +	t["RewindCollector"] = reflect.TypeOf((*RewindCollector)(nil)).Elem()
    +}
    +
    +type RewindCollectorRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RewindCollectorRequestType"] = reflect.TypeOf((*RewindCollectorRequestType)(nil)).Elem()
    +}
    +
    +type RewindCollectorResponse struct {
    +}
    +
    +type RoleAddedEvent struct {
    +	RoleEvent
    +
    +	PrivilegeList []string `xml:"privilegeList,omitempty"`
    +}
    +
    +func init() {
    +	t["RoleAddedEvent"] = reflect.TypeOf((*RoleAddedEvent)(nil)).Elem()
    +}
    +
    +type RoleEvent struct {
    +	AuthorizationEvent
    +
    +	Role RoleEventArgument `xml:"role"`
    +}
    +
    +func init() {
    +	t["RoleEvent"] = reflect.TypeOf((*RoleEvent)(nil)).Elem()
    +}
    +
    +type RoleEventArgument struct {
    +	EventArgument
    +
    +	RoleId int32  `xml:"roleId"`
    +	Name   string `xml:"name"`
    +}
    +
    +func init() {
    +	t["RoleEventArgument"] = reflect.TypeOf((*RoleEventArgument)(nil)).Elem()
    +}
    +
    +type RoleRemovedEvent struct {
    +	RoleEvent
    +}
    +
    +func init() {
    +	t["RoleRemovedEvent"] = reflect.TypeOf((*RoleRemovedEvent)(nil)).Elem()
    +}
    +
    +type RoleUpdatedEvent struct {
    +	RoleEvent
    +
    +	PrivilegeList     []string `xml:"privilegeList,omitempty"`
    +	PrevRoleName      string   `xml:"prevRoleName,omitempty"`
    +	PrivilegesAdded   []string `xml:"privilegesAdded,omitempty"`
    +	PrivilegesRemoved []string `xml:"privilegesRemoved,omitempty"`
    +}
    +
    +func init() {
    +	t["RoleUpdatedEvent"] = reflect.TypeOf((*RoleUpdatedEvent)(nil)).Elem()
    +}
    +
    +type RollbackEvent struct {
    +	DvsEvent
    +
    +	HostName   string `xml:"hostName"`
    +	MethodName string `xml:"methodName,omitempty"`
    +}
    +
    +func init() {
    +	t["RollbackEvent"] = reflect.TypeOf((*RollbackEvent)(nil)).Elem()
    +}
    +
    +type RollbackFailure struct {
    +	DvsFault
    +
    +	EntityName string `xml:"entityName"`
    +	EntityType string `xml:"entityType"`
    +}
    +
    +func init() {
    +	t["RollbackFailure"] = reflect.TypeOf((*RollbackFailure)(nil)).Elem()
    +}
    +
    +type RollbackFailureFault RollbackFailure
    +
    +func init() {
    +	t["RollbackFailureFault"] = reflect.TypeOf((*RollbackFailureFault)(nil)).Elem()
    +}
    +
    +type RuleViolation struct {
    +	VmConfigFault
    +
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +	Rule BaseClusterRuleInfo     `xml:"rule,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["RuleViolation"] = reflect.TypeOf((*RuleViolation)(nil)).Elem()
    +}
    +
    +type RuleViolationFault RuleViolation
    +
    +func init() {
    +	t["RuleViolationFault"] = reflect.TypeOf((*RuleViolationFault)(nil)).Elem()
    +}
    +
    +type RunScheduledTask RunScheduledTaskRequestType
    +
    +func init() {
    +	t["RunScheduledTask"] = reflect.TypeOf((*RunScheduledTask)(nil)).Elem()
    +}
    +
    +type RunScheduledTaskRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["RunScheduledTaskRequestType"] = reflect.TypeOf((*RunScheduledTaskRequestType)(nil)).Elem()
    +}
    +
    +type RunScheduledTaskResponse struct {
    +}
    +
    +type RunScriptAction struct {
    +	Action
    +
    +	Script string `xml:"script"`
    +}
    +
    +func init() {
    +	t["RunScriptAction"] = reflect.TypeOf((*RunScriptAction)(nil)).Elem()
    +}
    +
    +type RunVsanPhysicalDiskDiagnostics RunVsanPhysicalDiskDiagnosticsRequestType
    +
    +func init() {
    +	t["RunVsanPhysicalDiskDiagnostics"] = reflect.TypeOf((*RunVsanPhysicalDiskDiagnostics)(nil)).Elem()
    +}
    +
    +type RunVsanPhysicalDiskDiagnosticsRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Disks []string               `xml:"disks,omitempty"`
    +}
    +
    +func init() {
    +	t["RunVsanPhysicalDiskDiagnosticsRequestType"] = reflect.TypeOf((*RunVsanPhysicalDiskDiagnosticsRequestType)(nil)).Elem()
    +}
    +
    +type RunVsanPhysicalDiskDiagnosticsResponse struct {
    +	Returnval []HostVsanInternalSystemVsanPhysicalDiskDiagnosticsResult `xml:"returnval"`
    +}
    +
    +type RuntimeFault struct {
    +	MethodFault
    +}
    +
    +func init() {
    +	t["RuntimeFault"] = reflect.TypeOf((*RuntimeFault)(nil)).Elem()
    +}
    +
    +type RuntimeFaultFault BaseRuntimeFault
    +
    +func init() {
    +	t["RuntimeFaultFault"] = reflect.TypeOf((*RuntimeFaultFault)(nil)).Elem()
    +}
    +
    +type SAMLTokenAuthentication struct {
    +	GuestAuthentication
    +
    +	Token    string `xml:"token"`
    +	Username string `xml:"username,omitempty"`
    +}
    +
    +func init() {
    +	t["SAMLTokenAuthentication"] = reflect.TypeOf((*SAMLTokenAuthentication)(nil)).Elem()
    +}
    +
    +type SDDCBase struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["SDDCBase"] = reflect.TypeOf((*SDDCBase)(nil)).Elem()
    +}
    +
    +type SSLDisabledFault struct {
    +	HostConnectFault
    +}
    +
    +func init() {
    +	t["SSLDisabledFault"] = reflect.TypeOf((*SSLDisabledFault)(nil)).Elem()
    +}
    +
    +type SSLDisabledFaultFault SSLDisabledFault
    +
    +func init() {
    +	t["SSLDisabledFaultFault"] = reflect.TypeOf((*SSLDisabledFaultFault)(nil)).Elem()
    +}
    +
    +type SSLVerifyFault struct {
    +	HostConnectFault
    +
    +	SelfSigned bool   `xml:"selfSigned"`
    +	Thumbprint string `xml:"thumbprint"`
    +}
    +
    +func init() {
    +	t["SSLVerifyFault"] = reflect.TypeOf((*SSLVerifyFault)(nil)).Elem()
    +}
    +
    +type SSLVerifyFaultFault SSLVerifyFault
    +
    +func init() {
    +	t["SSLVerifyFaultFault"] = reflect.TypeOf((*SSLVerifyFaultFault)(nil)).Elem()
    +}
    +
    +type SSPIAuthentication struct {
    +	GuestAuthentication
    +
    +	SspiToken string `xml:"sspiToken"`
    +}
    +
    +func init() {
    +	t["SSPIAuthentication"] = reflect.TypeOf((*SSPIAuthentication)(nil)).Elem()
    +}
    +
    +type SSPIChallenge struct {
    +	VimFault
    +
    +	Base64Token string `xml:"base64Token"`
    +}
    +
    +func init() {
    +	t["SSPIChallenge"] = reflect.TypeOf((*SSPIChallenge)(nil)).Elem()
    +}
    +
    +type SSPIChallengeFault SSPIChallenge
    +
    +func init() {
    +	t["SSPIChallengeFault"] = reflect.TypeOf((*SSPIChallengeFault)(nil)).Elem()
    +}
    +
    +type ScanHostPatchRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Repository HostPatchManagerLocator `xml:"repository"`
    +	UpdateID   []string                `xml:"updateID,omitempty"`
    +}
    +
    +func init() {
    +	t["ScanHostPatchRequestType"] = reflect.TypeOf((*ScanHostPatchRequestType)(nil)).Elem()
    +}
    +
    +type ScanHostPatchV2RequestType struct {
    +	This       ManagedObjectReference                     `xml:"_this"`
    +	MetaUrls   []string                                   `xml:"metaUrls,omitempty"`
    +	BundleUrls []string                                   `xml:"bundleUrls,omitempty"`
    +	Spec       *HostPatchManagerPatchManagerOperationSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["ScanHostPatchV2RequestType"] = reflect.TypeOf((*ScanHostPatchV2RequestType)(nil)).Elem()
    +}
    +
    +type ScanHostPatchV2_Task ScanHostPatchV2RequestType
    +
    +func init() {
    +	t["ScanHostPatchV2_Task"] = reflect.TypeOf((*ScanHostPatchV2_Task)(nil)).Elem()
    +}
    +
    +type ScanHostPatchV2_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ScanHostPatch_Task ScanHostPatchRequestType
    +
    +func init() {
    +	t["ScanHostPatch_Task"] = reflect.TypeOf((*ScanHostPatch_Task)(nil)).Elem()
    +}
    +
    +type ScanHostPatch_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ScheduleReconcileDatastoreInventory ScheduleReconcileDatastoreInventoryRequestType
    +
    +func init() {
    +	t["ScheduleReconcileDatastoreInventory"] = reflect.TypeOf((*ScheduleReconcileDatastoreInventory)(nil)).Elem()
    +}
    +
    +type ScheduleReconcileDatastoreInventoryRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["ScheduleReconcileDatastoreInventoryRequestType"] = reflect.TypeOf((*ScheduleReconcileDatastoreInventoryRequestType)(nil)).Elem()
    +}
    +
    +type ScheduleReconcileDatastoreInventoryResponse struct {
    +}
    +
    +type ScheduledHardwareUpgradeInfo struct {
    +	DynamicData
    +
    +	UpgradePolicy                  string                `xml:"upgradePolicy,omitempty"`
    +	VersionKey                     string                `xml:"versionKey,omitempty"`
    +	ScheduledHardwareUpgradeStatus string                `xml:"scheduledHardwareUpgradeStatus,omitempty"`
    +	Fault                          *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["ScheduledHardwareUpgradeInfo"] = reflect.TypeOf((*ScheduledHardwareUpgradeInfo)(nil)).Elem()
    +}
    +
    +type ScheduledTaskCompletedEvent struct {
    +	ScheduledTaskEvent
    +}
    +
    +func init() {
    +	t["ScheduledTaskCompletedEvent"] = reflect.TypeOf((*ScheduledTaskCompletedEvent)(nil)).Elem()
    +}
    +
    +type ScheduledTaskCreatedEvent struct {
    +	ScheduledTaskEvent
    +}
    +
    +func init() {
    +	t["ScheduledTaskCreatedEvent"] = reflect.TypeOf((*ScheduledTaskCreatedEvent)(nil)).Elem()
    +}
    +
    +type ScheduledTaskDescription struct {
    +	DynamicData
    +
    +	Action        []BaseTypeDescription    `xml:"action,typeattr"`
    +	SchedulerInfo []ScheduledTaskDetail    `xml:"schedulerInfo"`
    +	State         []BaseElementDescription `xml:"state,typeattr"`
    +	DayOfWeek     []BaseElementDescription `xml:"dayOfWeek,typeattr"`
    +	WeekOfMonth   []BaseElementDescription `xml:"weekOfMonth,typeattr"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskDescription"] = reflect.TypeOf((*ScheduledTaskDescription)(nil)).Elem()
    +}
    +
    +type ScheduledTaskDetail struct {
    +	TypeDescription
    +
    +	Frequency string `xml:"frequency"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskDetail"] = reflect.TypeOf((*ScheduledTaskDetail)(nil)).Elem()
    +}
    +
    +type ScheduledTaskEmailCompletedEvent struct {
    +	ScheduledTaskEvent
    +
    +	To string `xml:"to"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskEmailCompletedEvent"] = reflect.TypeOf((*ScheduledTaskEmailCompletedEvent)(nil)).Elem()
    +}
    +
    +type ScheduledTaskEmailFailedEvent struct {
    +	ScheduledTaskEvent
    +
    +	To     string               `xml:"to"`
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskEmailFailedEvent"] = reflect.TypeOf((*ScheduledTaskEmailFailedEvent)(nil)).Elem()
    +}
    +
    +type ScheduledTaskEvent struct {
    +	Event
    +
    +	ScheduledTask ScheduledTaskEventArgument `xml:"scheduledTask"`
    +	Entity        ManagedEntityEventArgument `xml:"entity"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskEvent"] = reflect.TypeOf((*ScheduledTaskEvent)(nil)).Elem()
    +}
    +
    +type ScheduledTaskEventArgument struct {
    +	EntityEventArgument
    +
    +	ScheduledTask ManagedObjectReference `xml:"scheduledTask"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskEventArgument"] = reflect.TypeOf((*ScheduledTaskEventArgument)(nil)).Elem()
    +}
    +
    +type ScheduledTaskFailedEvent struct {
    +	ScheduledTaskEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskFailedEvent"] = reflect.TypeOf((*ScheduledTaskFailedEvent)(nil)).Elem()
    +}
    +
    +type ScheduledTaskInfo struct {
    +	ScheduledTaskSpec
    +
    +	ScheduledTask    ManagedObjectReference  `xml:"scheduledTask"`
    +	Entity           ManagedObjectReference  `xml:"entity"`
    +	LastModifiedTime time.Time               `xml:"lastModifiedTime"`
    +	LastModifiedUser string                  `xml:"lastModifiedUser"`
    +	NextRunTime      *time.Time              `xml:"nextRunTime"`
    +	PrevRunTime      *time.Time              `xml:"prevRunTime"`
    +	State            TaskInfoState           `xml:"state"`
    +	Error            *LocalizedMethodFault   `xml:"error,omitempty"`
    +	Result           AnyType                 `xml:"result,omitempty,typeattr"`
    +	Progress         int32                   `xml:"progress,omitempty"`
    +	ActiveTask       *ManagedObjectReference `xml:"activeTask,omitempty"`
    +	TaskObject       *ManagedObjectReference `xml:"taskObject,omitempty"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskInfo"] = reflect.TypeOf((*ScheduledTaskInfo)(nil)).Elem()
    +}
    +
    +type ScheduledTaskReconfiguredEvent struct {
    +	ScheduledTaskEvent
    +
    +	ConfigChanges *ChangesInfoEventArgument `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskReconfiguredEvent"] = reflect.TypeOf((*ScheduledTaskReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type ScheduledTaskRemovedEvent struct {
    +	ScheduledTaskEvent
    +}
    +
    +func init() {
    +	t["ScheduledTaskRemovedEvent"] = reflect.TypeOf((*ScheduledTaskRemovedEvent)(nil)).Elem()
    +}
    +
    +type ScheduledTaskSpec struct {
    +	DynamicData
    +
    +	Name         string            `xml:"name"`
    +	Description  string            `xml:"description"`
    +	Enabled      bool              `xml:"enabled"`
    +	Scheduler    BaseTaskScheduler `xml:"scheduler,typeattr"`
    +	Action       BaseAction        `xml:"action,typeattr"`
    +	Notification string            `xml:"notification,omitempty"`
    +}
    +
    +func init() {
    +	t["ScheduledTaskSpec"] = reflect.TypeOf((*ScheduledTaskSpec)(nil)).Elem()
    +}
    +
    +type ScheduledTaskStartedEvent struct {
    +	ScheduledTaskEvent
    +}
    +
    +func init() {
    +	t["ScheduledTaskStartedEvent"] = reflect.TypeOf((*ScheduledTaskStartedEvent)(nil)).Elem()
    +}
    +
    +type ScsiLun struct {
    +	HostDevice
    +
    +	Key              string               `xml:"key,omitempty"`
    +	Uuid             string               `xml:"uuid"`
    +	Descriptor       []ScsiLunDescriptor  `xml:"descriptor,omitempty"`
    +	CanonicalName    string               `xml:"canonicalName,omitempty"`
    +	DisplayName      string               `xml:"displayName,omitempty"`
    +	LunType          string               `xml:"lunType"`
    +	Vendor           string               `xml:"vendor,omitempty"`
    +	Model            string               `xml:"model,omitempty"`
    +	Revision         string               `xml:"revision,omitempty"`
    +	ScsiLevel        int32                `xml:"scsiLevel,omitempty"`
    +	SerialNumber     string               `xml:"serialNumber,omitempty"`
    +	DurableName      *ScsiLunDurableName  `xml:"durableName,omitempty"`
    +	AlternateName    []ScsiLunDurableName `xml:"alternateName,omitempty"`
    +	StandardInquiry  []byte               `xml:"standardInquiry,omitempty"`
    +	QueueDepth       int32                `xml:"queueDepth,omitempty"`
    +	OperationalState []string             `xml:"operationalState"`
    +	Capabilities     *ScsiLunCapabilities `xml:"capabilities,omitempty"`
    +	VStorageSupport  string               `xml:"vStorageSupport,omitempty"`
    +	ProtocolEndpoint *bool                `xml:"protocolEndpoint"`
    +}
    +
    +func init() {
    +	t["ScsiLun"] = reflect.TypeOf((*ScsiLun)(nil)).Elem()
    +}
    +
    +type ScsiLunCapabilities struct {
    +	DynamicData
    +
    +	UpdateDisplayNameSupported bool `xml:"updateDisplayNameSupported"`
    +}
    +
    +func init() {
    +	t["ScsiLunCapabilities"] = reflect.TypeOf((*ScsiLunCapabilities)(nil)).Elem()
    +}
    +
    +type ScsiLunDescriptor struct {
    +	DynamicData
    +
    +	Quality string `xml:"quality"`
    +	Id      string `xml:"id"`
    +}
    +
    +func init() {
    +	t["ScsiLunDescriptor"] = reflect.TypeOf((*ScsiLunDescriptor)(nil)).Elem()
    +}
    +
    +type ScsiLunDurableName struct {
    +	DynamicData
    +
    +	Namespace   string `xml:"namespace"`
    +	NamespaceId byte   `xml:"namespaceId"`
    +	Data        []byte `xml:"data,omitempty"`
    +}
    +
    +func init() {
    +	t["ScsiLunDurableName"] = reflect.TypeOf((*ScsiLunDurableName)(nil)).Elem()
    +}
    +
    +type SeSparseVirtualDiskSpec struct {
    +	FileBackedVirtualDiskSpec
    +
    +	GrainSizeKb int32 `xml:"grainSizeKb,omitempty"`
    +}
    +
    +func init() {
    +	t["SeSparseVirtualDiskSpec"] = reflect.TypeOf((*SeSparseVirtualDiskSpec)(nil)).Elem()
    +}
    +
    +type SearchDatastoreRequestType struct {
    +	This          ManagedObjectReference          `xml:"_this"`
    +	DatastorePath string                          `xml:"datastorePath"`
    +	SearchSpec    *HostDatastoreBrowserSearchSpec `xml:"searchSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["SearchDatastoreRequestType"] = reflect.TypeOf((*SearchDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type SearchDatastoreSubFoldersRequestType struct {
    +	This          ManagedObjectReference          `xml:"_this"`
    +	DatastorePath string                          `xml:"datastorePath"`
    +	SearchSpec    *HostDatastoreBrowserSearchSpec `xml:"searchSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["SearchDatastoreSubFoldersRequestType"] = reflect.TypeOf((*SearchDatastoreSubFoldersRequestType)(nil)).Elem()
    +}
    +
    +type SearchDatastoreSubFolders_Task SearchDatastoreSubFoldersRequestType
    +
    +func init() {
    +	t["SearchDatastoreSubFolders_Task"] = reflect.TypeOf((*SearchDatastoreSubFolders_Task)(nil)).Elem()
    +}
    +
    +type SearchDatastoreSubFolders_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type SearchDatastore_Task SearchDatastoreRequestType
    +
    +func init() {
    +	t["SearchDatastore_Task"] = reflect.TypeOf((*SearchDatastore_Task)(nil)).Elem()
    +}
    +
    +type SearchDatastore_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type SecondaryVmAlreadyDisabled struct {
    +	VmFaultToleranceIssue
    +
    +	InstanceUuid string `xml:"instanceUuid"`
    +}
    +
    +func init() {
    +	t["SecondaryVmAlreadyDisabled"] = reflect.TypeOf((*SecondaryVmAlreadyDisabled)(nil)).Elem()
    +}
    +
    +type SecondaryVmAlreadyDisabledFault SecondaryVmAlreadyDisabled
    +
    +func init() {
    +	t["SecondaryVmAlreadyDisabledFault"] = reflect.TypeOf((*SecondaryVmAlreadyDisabledFault)(nil)).Elem()
    +}
    +
    +type SecondaryVmAlreadyEnabled struct {
    +	VmFaultToleranceIssue
    +
    +	InstanceUuid string `xml:"instanceUuid"`
    +}
    +
    +func init() {
    +	t["SecondaryVmAlreadyEnabled"] = reflect.TypeOf((*SecondaryVmAlreadyEnabled)(nil)).Elem()
    +}
    +
    +type SecondaryVmAlreadyEnabledFault SecondaryVmAlreadyEnabled
    +
    +func init() {
    +	t["SecondaryVmAlreadyEnabledFault"] = reflect.TypeOf((*SecondaryVmAlreadyEnabledFault)(nil)).Elem()
    +}
    +
    +type SecondaryVmAlreadyRegistered struct {
    +	VmFaultToleranceIssue
    +
    +	InstanceUuid string `xml:"instanceUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["SecondaryVmAlreadyRegistered"] = reflect.TypeOf((*SecondaryVmAlreadyRegistered)(nil)).Elem()
    +}
    +
    +type SecondaryVmAlreadyRegisteredFault SecondaryVmAlreadyRegistered
    +
    +func init() {
    +	t["SecondaryVmAlreadyRegisteredFault"] = reflect.TypeOf((*SecondaryVmAlreadyRegisteredFault)(nil)).Elem()
    +}
    +
    +type SecondaryVmNotRegistered struct {
    +	VmFaultToleranceIssue
    +
    +	InstanceUuid string `xml:"instanceUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["SecondaryVmNotRegistered"] = reflect.TypeOf((*SecondaryVmNotRegistered)(nil)).Elem()
    +}
    +
    +type SecondaryVmNotRegisteredFault SecondaryVmNotRegistered
    +
    +func init() {
    +	t["SecondaryVmNotRegisteredFault"] = reflect.TypeOf((*SecondaryVmNotRegisteredFault)(nil)).Elem()
    +}
    +
    +type SecurityError struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["SecurityError"] = reflect.TypeOf((*SecurityError)(nil)).Elem()
    +}
    +
    +type SecurityErrorFault BaseSecurityError
    +
    +func init() {
    +	t["SecurityErrorFault"] = reflect.TypeOf((*SecurityErrorFault)(nil)).Elem()
    +}
    +
    +type SecurityProfile struct {
    +	ApplyProfile
    +
    +	Permission []PermissionProfile `xml:"permission,omitempty"`
    +}
    +
    +func init() {
    +	t["SecurityProfile"] = reflect.TypeOf((*SecurityProfile)(nil)).Elem()
    +}
    +
    +type SelectActivePartition SelectActivePartitionRequestType
    +
    +func init() {
    +	t["SelectActivePartition"] = reflect.TypeOf((*SelectActivePartition)(nil)).Elem()
    +}
    +
    +type SelectActivePartitionRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Partition *HostScsiDiskPartition `xml:"partition,omitempty"`
    +}
    +
    +func init() {
    +	t["SelectActivePartitionRequestType"] = reflect.TypeOf((*SelectActivePartitionRequestType)(nil)).Elem()
    +}
    +
    +type SelectActivePartitionResponse struct {
    +}
    +
    +type SelectVnic SelectVnicRequestType
    +
    +func init() {
    +	t["SelectVnic"] = reflect.TypeOf((*SelectVnic)(nil)).Elem()
    +}
    +
    +type SelectVnicForNicType SelectVnicForNicTypeRequestType
    +
    +func init() {
    +	t["SelectVnicForNicType"] = reflect.TypeOf((*SelectVnicForNicType)(nil)).Elem()
    +}
    +
    +type SelectVnicForNicTypeRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	NicType string                 `xml:"nicType"`
    +	Device  string                 `xml:"device"`
    +}
    +
    +func init() {
    +	t["SelectVnicForNicTypeRequestType"] = reflect.TypeOf((*SelectVnicForNicTypeRequestType)(nil)).Elem()
    +}
    +
    +type SelectVnicForNicTypeResponse struct {
    +}
    +
    +type SelectVnicRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Device string                 `xml:"device"`
    +}
    +
    +func init() {
    +	t["SelectVnicRequestType"] = reflect.TypeOf((*SelectVnicRequestType)(nil)).Elem()
    +}
    +
    +type SelectVnicResponse struct {
    +}
    +
    +type SelectionSet struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["SelectionSet"] = reflect.TypeOf((*SelectionSet)(nil)).Elem()
    +}
    +
    +type SelectionSpec struct {
    +	DynamicData
    +
    +	Name string `xml:"name,omitempty"`
    +}
    +
    +func init() {
    +	t["SelectionSpec"] = reflect.TypeOf((*SelectionSpec)(nil)).Elem()
    +}
    +
    +type SendEmailAction struct {
    +	Action
    +
    +	ToList  string `xml:"toList"`
    +	CcList  string `xml:"ccList"`
    +	Subject string `xml:"subject"`
    +	Body    string `xml:"body"`
    +}
    +
    +func init() {
    +	t["SendEmailAction"] = reflect.TypeOf((*SendEmailAction)(nil)).Elem()
    +}
    +
    +type SendNMI SendNMIRequestType
    +
    +func init() {
    +	t["SendNMI"] = reflect.TypeOf((*SendNMI)(nil)).Elem()
    +}
    +
    +type SendNMIRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["SendNMIRequestType"] = reflect.TypeOf((*SendNMIRequestType)(nil)).Elem()
    +}
    +
    +type SendNMIResponse struct {
    +}
    +
    +type SendSNMPAction struct {
    +	Action
    +}
    +
    +func init() {
    +	t["SendSNMPAction"] = reflect.TypeOf((*SendSNMPAction)(nil)).Elem()
    +}
    +
    +type SendTestNotification SendTestNotificationRequestType
    +
    +func init() {
    +	t["SendTestNotification"] = reflect.TypeOf((*SendTestNotification)(nil)).Elem()
    +}
    +
    +type SendTestNotificationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["SendTestNotificationRequestType"] = reflect.TypeOf((*SendTestNotificationRequestType)(nil)).Elem()
    +}
    +
    +type SendTestNotificationResponse struct {
    +}
    +
    +type ServerLicenseExpiredEvent struct {
    +	LicenseEvent
    +
    +	Product string `xml:"product"`
    +}
    +
    +func init() {
    +	t["ServerLicenseExpiredEvent"] = reflect.TypeOf((*ServerLicenseExpiredEvent)(nil)).Elem()
    +}
    +
    +type ServerStartedSessionEvent struct {
    +	SessionEvent
    +}
    +
    +func init() {
    +	t["ServerStartedSessionEvent"] = reflect.TypeOf((*ServerStartedSessionEvent)(nil)).Elem()
    +}
    +
    +type ServiceConsolePortGroupProfile struct {
    +	PortGroupProfile
    +
    +	IpConfig IpAddressProfile `xml:"ipConfig"`
    +}
    +
    +func init() {
    +	t["ServiceConsolePortGroupProfile"] = reflect.TypeOf((*ServiceConsolePortGroupProfile)(nil)).Elem()
    +}
    +
    +type ServiceConsoleReservationInfo struct {
    +	DynamicData
    +
    +	ServiceConsoleReservedCfg int64 `xml:"serviceConsoleReservedCfg"`
    +	ServiceConsoleReserved    int64 `xml:"serviceConsoleReserved"`
    +	Unreserved                int64 `xml:"unreserved"`
    +}
    +
    +func init() {
    +	t["ServiceConsoleReservationInfo"] = reflect.TypeOf((*ServiceConsoleReservationInfo)(nil)).Elem()
    +}
    +
    +type ServiceContent struct {
    +	DynamicData
    +
    +	RootFolder                  ManagedObjectReference  `xml:"rootFolder"`
    +	PropertyCollector           ManagedObjectReference  `xml:"propertyCollector"`
    +	ViewManager                 *ManagedObjectReference `xml:"viewManager,omitempty"`
    +	About                       AboutInfo               `xml:"about"`
    +	Setting                     *ManagedObjectReference `xml:"setting,omitempty"`
    +	UserDirectory               *ManagedObjectReference `xml:"userDirectory,omitempty"`
    +	SessionManager              *ManagedObjectReference `xml:"sessionManager,omitempty"`
    +	AuthorizationManager        *ManagedObjectReference `xml:"authorizationManager,omitempty"`
    +	ServiceManager              *ManagedObjectReference `xml:"serviceManager,omitempty"`
    +	PerfManager                 *ManagedObjectReference `xml:"perfManager,omitempty"`
    +	ScheduledTaskManager        *ManagedObjectReference `xml:"scheduledTaskManager,omitempty"`
    +	AlarmManager                *ManagedObjectReference `xml:"alarmManager,omitempty"`
    +	EventManager                *ManagedObjectReference `xml:"eventManager,omitempty"`
    +	TaskManager                 *ManagedObjectReference `xml:"taskManager,omitempty"`
    +	ExtensionManager            *ManagedObjectReference `xml:"extensionManager,omitempty"`
    +	CustomizationSpecManager    *ManagedObjectReference `xml:"customizationSpecManager,omitempty"`
    +	CustomFieldsManager         *ManagedObjectReference `xml:"customFieldsManager,omitempty"`
    +	AccountManager              *ManagedObjectReference `xml:"accountManager,omitempty"`
    +	DiagnosticManager           *ManagedObjectReference `xml:"diagnosticManager,omitempty"`
    +	LicenseManager              *ManagedObjectReference `xml:"licenseManager,omitempty"`
    +	SearchIndex                 *ManagedObjectReference `xml:"searchIndex,omitempty"`
    +	FileManager                 *ManagedObjectReference `xml:"fileManager,omitempty"`
    +	DatastoreNamespaceManager   *ManagedObjectReference `xml:"datastoreNamespaceManager,omitempty"`
    +	VirtualDiskManager          *ManagedObjectReference `xml:"virtualDiskManager,omitempty"`
    +	VirtualizationManager       *ManagedObjectReference `xml:"virtualizationManager,omitempty"`
    +	SnmpSystem                  *ManagedObjectReference `xml:"snmpSystem,omitempty"`
    +	VmProvisioningChecker       *ManagedObjectReference `xml:"vmProvisioningChecker,omitempty"`
    +	VmCompatibilityChecker      *ManagedObjectReference `xml:"vmCompatibilityChecker,omitempty"`
    +	OvfManager                  *ManagedObjectReference `xml:"ovfManager,omitempty"`
    +	IpPoolManager               *ManagedObjectReference `xml:"ipPoolManager,omitempty"`
    +	DvSwitchManager             *ManagedObjectReference `xml:"dvSwitchManager,omitempty"`
    +	HostProfileManager          *ManagedObjectReference `xml:"hostProfileManager,omitempty"`
    +	ClusterProfileManager       *ManagedObjectReference `xml:"clusterProfileManager,omitempty"`
    +	ComplianceManager           *ManagedObjectReference `xml:"complianceManager,omitempty"`
    +	LocalizationManager         *ManagedObjectReference `xml:"localizationManager,omitempty"`
    +	StorageResourceManager      *ManagedObjectReference `xml:"storageResourceManager,omitempty"`
    +	GuestOperationsManager      *ManagedObjectReference `xml:"guestOperationsManager,omitempty"`
    +	OverheadMemoryManager       *ManagedObjectReference `xml:"overheadMemoryManager,omitempty"`
    +	CertificateManager          *ManagedObjectReference `xml:"certificateManager,omitempty"`
    +	IoFilterManager             *ManagedObjectReference `xml:"ioFilterManager,omitempty"`
    +	VStorageObjectManager       *ManagedObjectReference `xml:"vStorageObjectManager,omitempty"`
    +	HostSpecManager             *ManagedObjectReference `xml:"hostSpecManager,omitempty"`
    +	CryptoManager               *ManagedObjectReference `xml:"cryptoManager,omitempty"`
    +	HealthUpdateManager         *ManagedObjectReference `xml:"healthUpdateManager,omitempty"`
    +	FailoverClusterConfigurator *ManagedObjectReference `xml:"failoverClusterConfigurator,omitempty"`
    +	FailoverClusterManager      *ManagedObjectReference `xml:"failoverClusterManager,omitempty"`
    +}
    +
    +func init() {
    +	t["ServiceContent"] = reflect.TypeOf((*ServiceContent)(nil)).Elem()
    +}
    +
    +type ServiceLocator struct {
    +	DynamicData
    +
    +	InstanceUuid  string                       `xml:"instanceUuid"`
    +	Url           string                       `xml:"url"`
    +	Credential    BaseServiceLocatorCredential `xml:"credential,typeattr"`
    +	SslThumbprint string                       `xml:"sslThumbprint,omitempty"`
    +}
    +
    +func init() {
    +	t["ServiceLocator"] = reflect.TypeOf((*ServiceLocator)(nil)).Elem()
    +}
    +
    +type ServiceLocatorCredential struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["ServiceLocatorCredential"] = reflect.TypeOf((*ServiceLocatorCredential)(nil)).Elem()
    +}
    +
    +type ServiceLocatorNamePassword struct {
    +	ServiceLocatorCredential
    +
    +	Username string `xml:"username"`
    +	Password string `xml:"password"`
    +}
    +
    +func init() {
    +	t["ServiceLocatorNamePassword"] = reflect.TypeOf((*ServiceLocatorNamePassword)(nil)).Elem()
    +}
    +
    +type ServiceLocatorSAMLCredential struct {
    +	ServiceLocatorCredential
    +
    +	Token string `xml:"token,omitempty"`
    +}
    +
    +func init() {
    +	t["ServiceLocatorSAMLCredential"] = reflect.TypeOf((*ServiceLocatorSAMLCredential)(nil)).Elem()
    +}
    +
    +type ServiceManagerServiceInfo struct {
    +	DynamicData
    +
    +	ServiceName string                 `xml:"serviceName"`
    +	Location    []string               `xml:"location,omitempty"`
    +	Service     ManagedObjectReference `xml:"service"`
    +	Description string                 `xml:"description"`
    +}
    +
    +func init() {
    +	t["ServiceManagerServiceInfo"] = reflect.TypeOf((*ServiceManagerServiceInfo)(nil)).Elem()
    +}
    +
    +type ServiceProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["ServiceProfile"] = reflect.TypeOf((*ServiceProfile)(nil)).Elem()
    +}
    +
    +type SessionEvent struct {
    +	Event
    +}
    +
    +func init() {
    +	t["SessionEvent"] = reflect.TypeOf((*SessionEvent)(nil)).Elem()
    +}
    +
    +type SessionIsActive SessionIsActiveRequestType
    +
    +func init() {
    +	t["SessionIsActive"] = reflect.TypeOf((*SessionIsActive)(nil)).Elem()
    +}
    +
    +type SessionIsActiveRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	SessionID string                 `xml:"sessionID"`
    +	UserName  string                 `xml:"userName"`
    +}
    +
    +func init() {
    +	t["SessionIsActiveRequestType"] = reflect.TypeOf((*SessionIsActiveRequestType)(nil)).Elem()
    +}
    +
    +type SessionIsActiveResponse struct {
    +	Returnval bool `xml:"returnval"`
    +}
    +
    +type SessionManagerGenericServiceTicket struct {
    +	DynamicData
    +
    +	Id            string `xml:"id"`
    +	HostName      string `xml:"hostName,omitempty"`
    +	SslThumbprint string `xml:"sslThumbprint,omitempty"`
    +}
    +
    +func init() {
    +	t["SessionManagerGenericServiceTicket"] = reflect.TypeOf((*SessionManagerGenericServiceTicket)(nil)).Elem()
    +}
    +
    +type SessionManagerHttpServiceRequestSpec struct {
    +	SessionManagerServiceRequestSpec
    +
    +	Method string `xml:"method,omitempty"`
    +	Url    string `xml:"url"`
    +}
    +
    +func init() {
    +	t["SessionManagerHttpServiceRequestSpec"] = reflect.TypeOf((*SessionManagerHttpServiceRequestSpec)(nil)).Elem()
    +}
    +
    +type SessionManagerLocalTicket struct {
    +	DynamicData
    +
    +	UserName         string `xml:"userName"`
    +	PasswordFilePath string `xml:"passwordFilePath"`
    +}
    +
    +func init() {
    +	t["SessionManagerLocalTicket"] = reflect.TypeOf((*SessionManagerLocalTicket)(nil)).Elem()
    +}
    +
    +type SessionManagerServiceRequestSpec struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["SessionManagerServiceRequestSpec"] = reflect.TypeOf((*SessionManagerServiceRequestSpec)(nil)).Elem()
    +}
    +
    +type SessionManagerVmomiServiceRequestSpec struct {
    +	SessionManagerServiceRequestSpec
    +
    +	Method string `xml:"method"`
    +}
    +
    +func init() {
    +	t["SessionManagerVmomiServiceRequestSpec"] = reflect.TypeOf((*SessionManagerVmomiServiceRequestSpec)(nil)).Elem()
    +}
    +
    +type SessionTerminatedEvent struct {
    +	SessionEvent
    +
    +	SessionId          string `xml:"sessionId"`
    +	TerminatedUsername string `xml:"terminatedUsername"`
    +}
    +
    +func init() {
    +	t["SessionTerminatedEvent"] = reflect.TypeOf((*SessionTerminatedEvent)(nil)).Elem()
    +}
    +
    +type SetCollectorPageSize SetCollectorPageSizeRequestType
    +
    +func init() {
    +	t["SetCollectorPageSize"] = reflect.TypeOf((*SetCollectorPageSize)(nil)).Elem()
    +}
    +
    +type SetCollectorPageSizeRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	MaxCount int32                  `xml:"maxCount"`
    +}
    +
    +func init() {
    +	t["SetCollectorPageSizeRequestType"] = reflect.TypeOf((*SetCollectorPageSizeRequestType)(nil)).Elem()
    +}
    +
    +type SetCollectorPageSizeResponse struct {
    +}
    +
    +type SetDisplayTopology SetDisplayTopologyRequestType
    +
    +func init() {
    +	t["SetDisplayTopology"] = reflect.TypeOf((*SetDisplayTopology)(nil)).Elem()
    +}
    +
    +type SetDisplayTopologyRequestType struct {
    +	This     ManagedObjectReference          `xml:"_this"`
    +	Displays []VirtualMachineDisplayTopology `xml:"displays"`
    +}
    +
    +func init() {
    +	t["SetDisplayTopologyRequestType"] = reflect.TypeOf((*SetDisplayTopologyRequestType)(nil)).Elem()
    +}
    +
    +type SetDisplayTopologyResponse struct {
    +}
    +
    +type SetEntityPermissions SetEntityPermissionsRequestType
    +
    +func init() {
    +	t["SetEntityPermissions"] = reflect.TypeOf((*SetEntityPermissions)(nil)).Elem()
    +}
    +
    +type SetEntityPermissionsRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Entity     ManagedObjectReference `xml:"entity"`
    +	Permission []Permission           `xml:"permission,omitempty"`
    +}
    +
    +func init() {
    +	t["SetEntityPermissionsRequestType"] = reflect.TypeOf((*SetEntityPermissionsRequestType)(nil)).Elem()
    +}
    +
    +type SetEntityPermissionsResponse struct {
    +}
    +
    +type SetExtensionCertificate SetExtensionCertificateRequestType
    +
    +func init() {
    +	t["SetExtensionCertificate"] = reflect.TypeOf((*SetExtensionCertificate)(nil)).Elem()
    +}
    +
    +type SetExtensionCertificateRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	ExtensionKey   string                 `xml:"extensionKey"`
    +	CertificatePem string                 `xml:"certificatePem,omitempty"`
    +}
    +
    +func init() {
    +	t["SetExtensionCertificateRequestType"] = reflect.TypeOf((*SetExtensionCertificateRequestType)(nil)).Elem()
    +}
    +
    +type SetExtensionCertificateResponse struct {
    +}
    +
    +type SetField SetFieldRequestType
    +
    +func init() {
    +	t["SetField"] = reflect.TypeOf((*SetField)(nil)).Elem()
    +}
    +
    +type SetFieldRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Entity ManagedObjectReference `xml:"entity"`
    +	Key    int32                  `xml:"key"`
    +	Value  string                 `xml:"value"`
    +}
    +
    +func init() {
    +	t["SetFieldRequestType"] = reflect.TypeOf((*SetFieldRequestType)(nil)).Elem()
    +}
    +
    +type SetFieldResponse struct {
    +}
    +
    +type SetLicenseEdition SetLicenseEditionRequestType
    +
    +func init() {
    +	t["SetLicenseEdition"] = reflect.TypeOf((*SetLicenseEdition)(nil)).Elem()
    +}
    +
    +type SetLicenseEditionRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Host       *ManagedObjectReference `xml:"host,omitempty"`
    +	FeatureKey string                  `xml:"featureKey,omitempty"`
    +}
    +
    +func init() {
    +	t["SetLicenseEditionRequestType"] = reflect.TypeOf((*SetLicenseEditionRequestType)(nil)).Elem()
    +}
    +
    +type SetLicenseEditionResponse struct {
    +}
    +
    +type SetLocale SetLocaleRequestType
    +
    +func init() {
    +	t["SetLocale"] = reflect.TypeOf((*SetLocale)(nil)).Elem()
    +}
    +
    +type SetLocaleRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Locale string                 `xml:"locale"`
    +}
    +
    +func init() {
    +	t["SetLocaleRequestType"] = reflect.TypeOf((*SetLocaleRequestType)(nil)).Elem()
    +}
    +
    +type SetLocaleResponse struct {
    +}
    +
    +type SetMultipathLunPolicy SetMultipathLunPolicyRequestType
    +
    +func init() {
    +	t["SetMultipathLunPolicy"] = reflect.TypeOf((*SetMultipathLunPolicy)(nil)).Elem()
    +}
    +
    +type SetMultipathLunPolicyRequestType struct {
    +	This   ManagedObjectReference                 `xml:"_this"`
    +	LunId  string                                 `xml:"lunId"`
    +	Policy BaseHostMultipathInfoLogicalUnitPolicy `xml:"policy,typeattr"`
    +}
    +
    +func init() {
    +	t["SetMultipathLunPolicyRequestType"] = reflect.TypeOf((*SetMultipathLunPolicyRequestType)(nil)).Elem()
    +}
    +
    +type SetMultipathLunPolicyResponse struct {
    +}
    +
    +type SetNFSUser SetNFSUserRequestType
    +
    +func init() {
    +	t["SetNFSUser"] = reflect.TypeOf((*SetNFSUser)(nil)).Elem()
    +}
    +
    +type SetNFSUserRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	User     string                 `xml:"user"`
    +	Password string                 `xml:"password"`
    +}
    +
    +func init() {
    +	t["SetNFSUserRequestType"] = reflect.TypeOf((*SetNFSUserRequestType)(nil)).Elem()
    +}
    +
    +type SetNFSUserResponse struct {
    +}
    +
    +type SetPublicKey SetPublicKeyRequestType
    +
    +func init() {
    +	t["SetPublicKey"] = reflect.TypeOf((*SetPublicKey)(nil)).Elem()
    +}
    +
    +type SetPublicKeyRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ExtensionKey string                 `xml:"extensionKey"`
    +	PublicKey    string                 `xml:"publicKey"`
    +}
    +
    +func init() {
    +	t["SetPublicKeyRequestType"] = reflect.TypeOf((*SetPublicKeyRequestType)(nil)).Elem()
    +}
    +
    +type SetPublicKeyResponse struct {
    +}
    +
    +type SetRegistryValueInGuest SetRegistryValueInGuestRequestType
    +
    +func init() {
    +	t["SetRegistryValueInGuest"] = reflect.TypeOf((*SetRegistryValueInGuest)(nil)).Elem()
    +}
    +
    +type SetRegistryValueInGuestRequestType struct {
    +	This  ManagedObjectReference  `xml:"_this"`
    +	Vm    ManagedObjectReference  `xml:"vm"`
    +	Auth  BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Value GuestRegValueSpec       `xml:"value"`
    +}
    +
    +func init() {
    +	t["SetRegistryValueInGuestRequestType"] = reflect.TypeOf((*SetRegistryValueInGuestRequestType)(nil)).Elem()
    +}
    +
    +type SetRegistryValueInGuestResponse struct {
    +}
    +
    +type SetScreenResolution SetScreenResolutionRequestType
    +
    +func init() {
    +	t["SetScreenResolution"] = reflect.TypeOf((*SetScreenResolution)(nil)).Elem()
    +}
    +
    +type SetScreenResolutionRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Width  int32                  `xml:"width"`
    +	Height int32                  `xml:"height"`
    +}
    +
    +func init() {
    +	t["SetScreenResolutionRequestType"] = reflect.TypeOf((*SetScreenResolutionRequestType)(nil)).Elem()
    +}
    +
    +type SetScreenResolutionResponse struct {
    +}
    +
    +type SetTaskDescription SetTaskDescriptionRequestType
    +
    +func init() {
    +	t["SetTaskDescription"] = reflect.TypeOf((*SetTaskDescription)(nil)).Elem()
    +}
    +
    +type SetTaskDescriptionRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Description LocalizableMessage     `xml:"description"`
    +}
    +
    +func init() {
    +	t["SetTaskDescriptionRequestType"] = reflect.TypeOf((*SetTaskDescriptionRequestType)(nil)).Elem()
    +}
    +
    +type SetTaskDescriptionResponse struct {
    +}
    +
    +type SetTaskState SetTaskStateRequestType
    +
    +func init() {
    +	t["SetTaskState"] = reflect.TypeOf((*SetTaskState)(nil)).Elem()
    +}
    +
    +type SetTaskStateRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	State  TaskInfoState          `xml:"state"`
    +	Result AnyType                `xml:"result,omitempty,typeattr"`
    +	Fault  *LocalizedMethodFault  `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["SetTaskStateRequestType"] = reflect.TypeOf((*SetTaskStateRequestType)(nil)).Elem()
    +}
    +
    +type SetTaskStateResponse struct {
    +}
    +
    +type SetVStorageObjectControlFlags SetVStorageObjectControlFlagsRequestType
    +
    +func init() {
    +	t["SetVStorageObjectControlFlags"] = reflect.TypeOf((*SetVStorageObjectControlFlags)(nil)).Elem()
    +}
    +
    +type SetVStorageObjectControlFlagsRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	Id           ID                     `xml:"id"`
    +	Datastore    ManagedObjectReference `xml:"datastore"`
    +	ControlFlags []string               `xml:"controlFlags,omitempty"`
    +}
    +
    +func init() {
    +	t["SetVStorageObjectControlFlagsRequestType"] = reflect.TypeOf((*SetVStorageObjectControlFlagsRequestType)(nil)).Elem()
    +}
    +
    +type SetVStorageObjectControlFlagsResponse struct {
    +}
    +
    +type SetVirtualDiskUuid SetVirtualDiskUuidRequestType
    +
    +func init() {
    +	t["SetVirtualDiskUuid"] = reflect.TypeOf((*SetVirtualDiskUuid)(nil)).Elem()
    +}
    +
    +type SetVirtualDiskUuidRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	Uuid       string                  `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["SetVirtualDiskUuidRequestType"] = reflect.TypeOf((*SetVirtualDiskUuidRequestType)(nil)).Elem()
    +}
    +
    +type SetVirtualDiskUuidResponse struct {
    +}
    +
    +type SharedBusControllerNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["SharedBusControllerNotSupported"] = reflect.TypeOf((*SharedBusControllerNotSupported)(nil)).Elem()
    +}
    +
    +type SharedBusControllerNotSupportedFault SharedBusControllerNotSupported
    +
    +func init() {
    +	t["SharedBusControllerNotSupportedFault"] = reflect.TypeOf((*SharedBusControllerNotSupportedFault)(nil)).Elem()
    +}
    +
    +type SharesInfo struct {
    +	DynamicData
    +
    +	Shares int32       `xml:"shares"`
    +	Level  SharesLevel `xml:"level"`
    +}
    +
    +func init() {
    +	t["SharesInfo"] = reflect.TypeOf((*SharesInfo)(nil)).Elem()
    +}
    +
    +type SharesOption struct {
    +	DynamicData
    +
    +	SharesOption IntOption   `xml:"sharesOption"`
    +	DefaultLevel SharesLevel `xml:"defaultLevel"`
    +}
    +
    +func init() {
    +	t["SharesOption"] = reflect.TypeOf((*SharesOption)(nil)).Elem()
    +}
    +
    +type ShrinkDiskFault struct {
    +	VimFault
    +
    +	DiskId int32 `xml:"diskId,omitempty"`
    +}
    +
    +func init() {
    +	t["ShrinkDiskFault"] = reflect.TypeOf((*ShrinkDiskFault)(nil)).Elem()
    +}
    +
    +type ShrinkDiskFaultFault ShrinkDiskFault
    +
    +func init() {
    +	t["ShrinkDiskFaultFault"] = reflect.TypeOf((*ShrinkDiskFaultFault)(nil)).Elem()
    +}
    +
    +type ShrinkVirtualDiskRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +	Copy       *bool                   `xml:"copy"`
    +}
    +
    +func init() {
    +	t["ShrinkVirtualDiskRequestType"] = reflect.TypeOf((*ShrinkVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type ShrinkVirtualDisk_Task ShrinkVirtualDiskRequestType
    +
    +func init() {
    +	t["ShrinkVirtualDisk_Task"] = reflect.TypeOf((*ShrinkVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type ShrinkVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ShutdownGuest ShutdownGuestRequestType
    +
    +func init() {
    +	t["ShutdownGuest"] = reflect.TypeOf((*ShutdownGuest)(nil)).Elem()
    +}
    +
    +type ShutdownGuestRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["ShutdownGuestRequestType"] = reflect.TypeOf((*ShutdownGuestRequestType)(nil)).Elem()
    +}
    +
    +type ShutdownGuestResponse struct {
    +}
    +
    +type ShutdownHostRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Force bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["ShutdownHostRequestType"] = reflect.TypeOf((*ShutdownHostRequestType)(nil)).Elem()
    +}
    +
    +type ShutdownHost_Task ShutdownHostRequestType
    +
    +func init() {
    +	t["ShutdownHost_Task"] = reflect.TypeOf((*ShutdownHost_Task)(nil)).Elem()
    +}
    +
    +type ShutdownHost_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type SingleIp struct {
    +	IpAddress
    +
    +	Address string `xml:"address"`
    +}
    +
    +func init() {
    +	t["SingleIp"] = reflect.TypeOf((*SingleIp)(nil)).Elem()
    +}
    +
    +type SingleMac struct {
    +	MacAddress
    +
    +	Address string `xml:"address"`
    +}
    +
    +func init() {
    +	t["SingleMac"] = reflect.TypeOf((*SingleMac)(nil)).Elem()
    +}
    +
    +type SnapshotCloneNotSupported struct {
    +	SnapshotCopyNotSupported
    +}
    +
    +func init() {
    +	t["SnapshotCloneNotSupported"] = reflect.TypeOf((*SnapshotCloneNotSupported)(nil)).Elem()
    +}
    +
    +type SnapshotCloneNotSupportedFault SnapshotCloneNotSupported
    +
    +func init() {
    +	t["SnapshotCloneNotSupportedFault"] = reflect.TypeOf((*SnapshotCloneNotSupportedFault)(nil)).Elem()
    +}
    +
    +type SnapshotCopyNotSupported struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["SnapshotCopyNotSupported"] = reflect.TypeOf((*SnapshotCopyNotSupported)(nil)).Elem()
    +}
    +
    +type SnapshotCopyNotSupportedFault BaseSnapshotCopyNotSupported
    +
    +func init() {
    +	t["SnapshotCopyNotSupportedFault"] = reflect.TypeOf((*SnapshotCopyNotSupportedFault)(nil)).Elem()
    +}
    +
    +type SnapshotDisabled struct {
    +	SnapshotFault
    +}
    +
    +func init() {
    +	t["SnapshotDisabled"] = reflect.TypeOf((*SnapshotDisabled)(nil)).Elem()
    +}
    +
    +type SnapshotDisabledFault SnapshotDisabled
    +
    +func init() {
    +	t["SnapshotDisabledFault"] = reflect.TypeOf((*SnapshotDisabledFault)(nil)).Elem()
    +}
    +
    +type SnapshotFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["SnapshotFault"] = reflect.TypeOf((*SnapshotFault)(nil)).Elem()
    +}
    +
    +type SnapshotFaultFault BaseSnapshotFault
    +
    +func init() {
    +	t["SnapshotFaultFault"] = reflect.TypeOf((*SnapshotFaultFault)(nil)).Elem()
    +}
    +
    +type SnapshotIncompatibleDeviceInVm struct {
    +	SnapshotFault
    +
    +	Fault LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["SnapshotIncompatibleDeviceInVm"] = reflect.TypeOf((*SnapshotIncompatibleDeviceInVm)(nil)).Elem()
    +}
    +
    +type SnapshotIncompatibleDeviceInVmFault SnapshotIncompatibleDeviceInVm
    +
    +func init() {
    +	t["SnapshotIncompatibleDeviceInVmFault"] = reflect.TypeOf((*SnapshotIncompatibleDeviceInVmFault)(nil)).Elem()
    +}
    +
    +type SnapshotLocked struct {
    +	SnapshotFault
    +}
    +
    +func init() {
    +	t["SnapshotLocked"] = reflect.TypeOf((*SnapshotLocked)(nil)).Elem()
    +}
    +
    +type SnapshotLockedFault SnapshotLocked
    +
    +func init() {
    +	t["SnapshotLockedFault"] = reflect.TypeOf((*SnapshotLockedFault)(nil)).Elem()
    +}
    +
    +type SnapshotMoveFromNonHomeNotSupported struct {
    +	SnapshotCopyNotSupported
    +}
    +
    +func init() {
    +	t["SnapshotMoveFromNonHomeNotSupported"] = reflect.TypeOf((*SnapshotMoveFromNonHomeNotSupported)(nil)).Elem()
    +}
    +
    +type SnapshotMoveFromNonHomeNotSupportedFault SnapshotMoveFromNonHomeNotSupported
    +
    +func init() {
    +	t["SnapshotMoveFromNonHomeNotSupportedFault"] = reflect.TypeOf((*SnapshotMoveFromNonHomeNotSupportedFault)(nil)).Elem()
    +}
    +
    +type SnapshotMoveNotSupported struct {
    +	SnapshotCopyNotSupported
    +}
    +
    +func init() {
    +	t["SnapshotMoveNotSupported"] = reflect.TypeOf((*SnapshotMoveNotSupported)(nil)).Elem()
    +}
    +
    +type SnapshotMoveNotSupportedFault SnapshotMoveNotSupported
    +
    +func init() {
    +	t["SnapshotMoveNotSupportedFault"] = reflect.TypeOf((*SnapshotMoveNotSupportedFault)(nil)).Elem()
    +}
    +
    +type SnapshotMoveToNonHomeNotSupported struct {
    +	SnapshotCopyNotSupported
    +}
    +
    +func init() {
    +	t["SnapshotMoveToNonHomeNotSupported"] = reflect.TypeOf((*SnapshotMoveToNonHomeNotSupported)(nil)).Elem()
    +}
    +
    +type SnapshotMoveToNonHomeNotSupportedFault SnapshotMoveToNonHomeNotSupported
    +
    +func init() {
    +	t["SnapshotMoveToNonHomeNotSupportedFault"] = reflect.TypeOf((*SnapshotMoveToNonHomeNotSupportedFault)(nil)).Elem()
    +}
    +
    +type SnapshotNoChange struct {
    +	SnapshotFault
    +}
    +
    +func init() {
    +	t["SnapshotNoChange"] = reflect.TypeOf((*SnapshotNoChange)(nil)).Elem()
    +}
    +
    +type SnapshotNoChangeFault SnapshotNoChange
    +
    +func init() {
    +	t["SnapshotNoChangeFault"] = reflect.TypeOf((*SnapshotNoChangeFault)(nil)).Elem()
    +}
    +
    +type SnapshotRevertIssue struct {
    +	MigrationFault
    +
    +	SnapshotName string      `xml:"snapshotName,omitempty"`
    +	Event        []BaseEvent `xml:"event,omitempty,typeattr"`
    +	Errors       bool        `xml:"errors"`
    +}
    +
    +func init() {
    +	t["SnapshotRevertIssue"] = reflect.TypeOf((*SnapshotRevertIssue)(nil)).Elem()
    +}
    +
    +type SnapshotRevertIssueFault SnapshotRevertIssue
    +
    +func init() {
    +	t["SnapshotRevertIssueFault"] = reflect.TypeOf((*SnapshotRevertIssueFault)(nil)).Elem()
    +}
    +
    +type SoftRuleVioCorrectionDisallowed struct {
    +	VmConfigFault
    +
    +	VmName string `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["SoftRuleVioCorrectionDisallowed"] = reflect.TypeOf((*SoftRuleVioCorrectionDisallowed)(nil)).Elem()
    +}
    +
    +type SoftRuleVioCorrectionDisallowedFault SoftRuleVioCorrectionDisallowed
    +
    +func init() {
    +	t["SoftRuleVioCorrectionDisallowedFault"] = reflect.TypeOf((*SoftRuleVioCorrectionDisallowedFault)(nil)).Elem()
    +}
    +
    +type SoftRuleVioCorrectionImpact struct {
    +	VmConfigFault
    +
    +	VmName string `xml:"vmName"`
    +}
    +
    +func init() {
    +	t["SoftRuleVioCorrectionImpact"] = reflect.TypeOf((*SoftRuleVioCorrectionImpact)(nil)).Elem()
    +}
    +
    +type SoftRuleVioCorrectionImpactFault SoftRuleVioCorrectionImpact
    +
    +func init() {
    +	t["SoftRuleVioCorrectionImpactFault"] = reflect.TypeOf((*SoftRuleVioCorrectionImpactFault)(nil)).Elem()
    +}
    +
    +type SoftwarePackage struct {
    +	DynamicData
    +
    +	Name                      string                    `xml:"name"`
    +	Version                   string                    `xml:"version"`
    +	Type                      string                    `xml:"type"`
    +	Vendor                    string                    `xml:"vendor"`
    +	AcceptanceLevel           string                    `xml:"acceptanceLevel"`
    +	Summary                   string                    `xml:"summary"`
    +	Description               string                    `xml:"description"`
    +	ReferenceURL              []string                  `xml:"referenceURL,omitempty"`
    +	CreationDate              *time.Time                `xml:"creationDate"`
    +	Depends                   []Relation                `xml:"depends,omitempty"`
    +	Conflicts                 []Relation                `xml:"conflicts,omitempty"`
    +	Replaces                  []Relation                `xml:"replaces,omitempty"`
    +	Provides                  []string                  `xml:"provides,omitempty"`
    +	MaintenanceModeRequired   *bool                     `xml:"maintenanceModeRequired"`
    +	HardwarePlatformsRequired []string                  `xml:"hardwarePlatformsRequired,omitempty"`
    +	Capability                SoftwarePackageCapability `xml:"capability"`
    +	Tag                       []string                  `xml:"tag,omitempty"`
    +	Payload                   []string                  `xml:"payload,omitempty"`
    +}
    +
    +func init() {
    +	t["SoftwarePackage"] = reflect.TypeOf((*SoftwarePackage)(nil)).Elem()
    +}
    +
    +type SoftwarePackageCapability struct {
    +	DynamicData
    +
    +	LiveInstallAllowed *bool `xml:"liveInstallAllowed"`
    +	LiveRemoveAllowed  *bool `xml:"liveRemoveAllowed"`
    +	StatelessReady     *bool `xml:"statelessReady"`
    +	Overlay            *bool `xml:"overlay"`
    +}
    +
    +func init() {
    +	t["SoftwarePackageCapability"] = reflect.TypeOf((*SoftwarePackageCapability)(nil)).Elem()
    +}
    +
    +type SourceNodeSpec struct {
    +	DynamicData
    +
    +	ManagementVc ServiceLocator         `xml:"managementVc"`
    +	ActiveVc     ManagedObjectReference `xml:"activeVc"`
    +}
    +
    +func init() {
    +	t["SourceNodeSpec"] = reflect.TypeOf((*SourceNodeSpec)(nil)).Elem()
    +}
    +
    +type SsdDiskNotAvailable struct {
    +	VimFault
    +
    +	DevicePath string `xml:"devicePath"`
    +}
    +
    +func init() {
    +	t["SsdDiskNotAvailable"] = reflect.TypeOf((*SsdDiskNotAvailable)(nil)).Elem()
    +}
    +
    +type SsdDiskNotAvailableFault SsdDiskNotAvailable
    +
    +func init() {
    +	t["SsdDiskNotAvailableFault"] = reflect.TypeOf((*SsdDiskNotAvailableFault)(nil)).Elem()
    +}
    +
    +type StageHostPatchRequestType struct {
    +	This       ManagedObjectReference                     `xml:"_this"`
    +	MetaUrls   []string                                   `xml:"metaUrls,omitempty"`
    +	BundleUrls []string                                   `xml:"bundleUrls,omitempty"`
    +	VibUrls    []string                                   `xml:"vibUrls,omitempty"`
    +	Spec       *HostPatchManagerPatchManagerOperationSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["StageHostPatchRequestType"] = reflect.TypeOf((*StageHostPatchRequestType)(nil)).Elem()
    +}
    +
    +type StageHostPatch_Task StageHostPatchRequestType
    +
    +func init() {
    +	t["StageHostPatch_Task"] = reflect.TypeOf((*StageHostPatch_Task)(nil)).Elem()
    +}
    +
    +type StageHostPatch_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type StampAllRulesWithUuidRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["StampAllRulesWithUuidRequestType"] = reflect.TypeOf((*StampAllRulesWithUuidRequestType)(nil)).Elem()
    +}
    +
    +type StampAllRulesWithUuid_Task StampAllRulesWithUuidRequestType
    +
    +func init() {
    +	t["StampAllRulesWithUuid_Task"] = reflect.TypeOf((*StampAllRulesWithUuid_Task)(nil)).Elem()
    +}
    +
    +type StampAllRulesWithUuid_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type StandbyGuest StandbyGuestRequestType
    +
    +func init() {
    +	t["StandbyGuest"] = reflect.TypeOf((*StandbyGuest)(nil)).Elem()
    +}
    +
    +type StandbyGuestRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["StandbyGuestRequestType"] = reflect.TypeOf((*StandbyGuestRequestType)(nil)).Elem()
    +}
    +
    +type StandbyGuestResponse struct {
    +}
    +
    +type StartProgramInGuest StartProgramInGuestRequestType
    +
    +func init() {
    +	t["StartProgramInGuest"] = reflect.TypeOf((*StartProgramInGuest)(nil)).Elem()
    +}
    +
    +type StartProgramInGuestRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Auth BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Spec BaseGuestProgramSpec    `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["StartProgramInGuestRequestType"] = reflect.TypeOf((*StartProgramInGuestRequestType)(nil)).Elem()
    +}
    +
    +type StartProgramInGuestResponse struct {
    +	Returnval int64 `xml:"returnval"`
    +}
    +
    +type StartRecordingRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Name        string                 `xml:"name"`
    +	Description string                 `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["StartRecordingRequestType"] = reflect.TypeOf((*StartRecordingRequestType)(nil)).Elem()
    +}
    +
    +type StartRecording_Task StartRecordingRequestType
    +
    +func init() {
    +	t["StartRecording_Task"] = reflect.TypeOf((*StartRecording_Task)(nil)).Elem()
    +}
    +
    +type StartRecording_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type StartReplayingRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	ReplaySnapshot ManagedObjectReference `xml:"replaySnapshot"`
    +}
    +
    +func init() {
    +	t["StartReplayingRequestType"] = reflect.TypeOf((*StartReplayingRequestType)(nil)).Elem()
    +}
    +
    +type StartReplaying_Task StartReplayingRequestType
    +
    +func init() {
    +	t["StartReplaying_Task"] = reflect.TypeOf((*StartReplaying_Task)(nil)).Elem()
    +}
    +
    +type StartReplaying_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type StartService StartServiceRequestType
    +
    +func init() {
    +	t["StartService"] = reflect.TypeOf((*StartService)(nil)).Elem()
    +}
    +
    +type StartServiceRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   string                 `xml:"id"`
    +}
    +
    +func init() {
    +	t["StartServiceRequestType"] = reflect.TypeOf((*StartServiceRequestType)(nil)).Elem()
    +}
    +
    +type StartServiceResponse struct {
    +}
    +
    +type StateAlarmExpression struct {
    +	AlarmExpression
    +
    +	Operator  StateAlarmOperator `xml:"operator"`
    +	Type      string             `xml:"type"`
    +	StatePath string             `xml:"statePath"`
    +	Yellow    string             `xml:"yellow,omitempty"`
    +	Red       string             `xml:"red,omitempty"`
    +}
    +
    +func init() {
    +	t["StateAlarmExpression"] = reflect.TypeOf((*StateAlarmExpression)(nil)).Elem()
    +}
    +
    +type StaticRouteProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key,omitempty"`
    +}
    +
    +func init() {
    +	t["StaticRouteProfile"] = reflect.TypeOf((*StaticRouteProfile)(nil)).Elem()
    +}
    +
    +type StopRecordingRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["StopRecordingRequestType"] = reflect.TypeOf((*StopRecordingRequestType)(nil)).Elem()
    +}
    +
    +type StopRecording_Task StopRecordingRequestType
    +
    +func init() {
    +	t["StopRecording_Task"] = reflect.TypeOf((*StopRecording_Task)(nil)).Elem()
    +}
    +
    +type StopRecording_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type StopReplayingRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["StopReplayingRequestType"] = reflect.TypeOf((*StopReplayingRequestType)(nil)).Elem()
    +}
    +
    +type StopReplaying_Task StopReplayingRequestType
    +
    +func init() {
    +	t["StopReplaying_Task"] = reflect.TypeOf((*StopReplaying_Task)(nil)).Elem()
    +}
    +
    +type StopReplaying_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type StopService StopServiceRequestType
    +
    +func init() {
    +	t["StopService"] = reflect.TypeOf((*StopService)(nil)).Elem()
    +}
    +
    +type StopServiceRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   string                 `xml:"id"`
    +}
    +
    +func init() {
    +	t["StopServiceRequestType"] = reflect.TypeOf((*StopServiceRequestType)(nil)).Elem()
    +}
    +
    +type StopServiceResponse struct {
    +}
    +
    +type StorageDrsAutomationConfig struct {
    +	DynamicData
    +
    +	SpaceLoadBalanceAutomationMode  string `xml:"spaceLoadBalanceAutomationMode,omitempty"`
    +	IoLoadBalanceAutomationMode     string `xml:"ioLoadBalanceAutomationMode,omitempty"`
    +	RuleEnforcementAutomationMode   string `xml:"ruleEnforcementAutomationMode,omitempty"`
    +	PolicyEnforcementAutomationMode string `xml:"policyEnforcementAutomationMode,omitempty"`
    +	VmEvacuationAutomationMode      string `xml:"vmEvacuationAutomationMode,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsAutomationConfig"] = reflect.TypeOf((*StorageDrsAutomationConfig)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveDiskInMultiWriterMode struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveDiskInMultiWriterMode"] = reflect.TypeOf((*StorageDrsCannotMoveDiskInMultiWriterMode)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveDiskInMultiWriterModeFault StorageDrsCannotMoveDiskInMultiWriterMode
    +
    +func init() {
    +	t["StorageDrsCannotMoveDiskInMultiWriterModeFault"] = reflect.TypeOf((*StorageDrsCannotMoveDiskInMultiWriterModeFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveFTVm struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveFTVm"] = reflect.TypeOf((*StorageDrsCannotMoveFTVm)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveFTVmFault StorageDrsCannotMoveFTVm
    +
    +func init() {
    +	t["StorageDrsCannotMoveFTVmFault"] = reflect.TypeOf((*StorageDrsCannotMoveFTVmFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveIndependentDisk struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveIndependentDisk"] = reflect.TypeOf((*StorageDrsCannotMoveIndependentDisk)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveIndependentDiskFault StorageDrsCannotMoveIndependentDisk
    +
    +func init() {
    +	t["StorageDrsCannotMoveIndependentDiskFault"] = reflect.TypeOf((*StorageDrsCannotMoveIndependentDiskFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveManuallyPlacedSwapFile struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveManuallyPlacedSwapFile"] = reflect.TypeOf((*StorageDrsCannotMoveManuallyPlacedSwapFile)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveManuallyPlacedSwapFileFault StorageDrsCannotMoveManuallyPlacedSwapFile
    +
    +func init() {
    +	t["StorageDrsCannotMoveManuallyPlacedSwapFileFault"] = reflect.TypeOf((*StorageDrsCannotMoveManuallyPlacedSwapFileFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveManuallyPlacedVm struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveManuallyPlacedVm"] = reflect.TypeOf((*StorageDrsCannotMoveManuallyPlacedVm)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveManuallyPlacedVmFault StorageDrsCannotMoveManuallyPlacedVm
    +
    +func init() {
    +	t["StorageDrsCannotMoveManuallyPlacedVmFault"] = reflect.TypeOf((*StorageDrsCannotMoveManuallyPlacedVmFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveSharedDisk struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveSharedDisk"] = reflect.TypeOf((*StorageDrsCannotMoveSharedDisk)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveSharedDiskFault StorageDrsCannotMoveSharedDisk
    +
    +func init() {
    +	t["StorageDrsCannotMoveSharedDiskFault"] = reflect.TypeOf((*StorageDrsCannotMoveSharedDiskFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveTemplate struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveTemplate"] = reflect.TypeOf((*StorageDrsCannotMoveTemplate)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveTemplateFault StorageDrsCannotMoveTemplate
    +
    +func init() {
    +	t["StorageDrsCannotMoveTemplateFault"] = reflect.TypeOf((*StorageDrsCannotMoveTemplateFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveVmInUserFolder struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveVmInUserFolder"] = reflect.TypeOf((*StorageDrsCannotMoveVmInUserFolder)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveVmInUserFolderFault StorageDrsCannotMoveVmInUserFolder
    +
    +func init() {
    +	t["StorageDrsCannotMoveVmInUserFolderFault"] = reflect.TypeOf((*StorageDrsCannotMoveVmInUserFolderFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveVmWithMountedCDROM struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveVmWithMountedCDROM"] = reflect.TypeOf((*StorageDrsCannotMoveVmWithMountedCDROM)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveVmWithMountedCDROMFault StorageDrsCannotMoveVmWithMountedCDROM
    +
    +func init() {
    +	t["StorageDrsCannotMoveVmWithMountedCDROMFault"] = reflect.TypeOf((*StorageDrsCannotMoveVmWithMountedCDROMFault)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveVmWithNoFilesInLayout struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsCannotMoveVmWithNoFilesInLayout"] = reflect.TypeOf((*StorageDrsCannotMoveVmWithNoFilesInLayout)(nil)).Elem()
    +}
    +
    +type StorageDrsCannotMoveVmWithNoFilesInLayoutFault StorageDrsCannotMoveVmWithNoFilesInLayout
    +
    +func init() {
    +	t["StorageDrsCannotMoveVmWithNoFilesInLayoutFault"] = reflect.TypeOf((*StorageDrsCannotMoveVmWithNoFilesInLayoutFault)(nil)).Elem()
    +}
    +
    +type StorageDrsConfigInfo struct {
    +	DynamicData
    +
    +	PodConfig StorageDrsPodConfigInfo  `xml:"podConfig"`
    +	VmConfig  []StorageDrsVmConfigInfo `xml:"vmConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsConfigInfo"] = reflect.TypeOf((*StorageDrsConfigInfo)(nil)).Elem()
    +}
    +
    +type StorageDrsConfigSpec struct {
    +	DynamicData
    +
    +	PodConfigSpec *StorageDrsPodConfigSpec `xml:"podConfigSpec,omitempty"`
    +	VmConfigSpec  []StorageDrsVmConfigSpec `xml:"vmConfigSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsConfigSpec"] = reflect.TypeOf((*StorageDrsConfigSpec)(nil)).Elem()
    +}
    +
    +type StorageDrsDatacentersCannotShareDatastore struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsDatacentersCannotShareDatastore"] = reflect.TypeOf((*StorageDrsDatacentersCannotShareDatastore)(nil)).Elem()
    +}
    +
    +type StorageDrsDatacentersCannotShareDatastoreFault StorageDrsDatacentersCannotShareDatastore
    +
    +func init() {
    +	t["StorageDrsDatacentersCannotShareDatastoreFault"] = reflect.TypeOf((*StorageDrsDatacentersCannotShareDatastoreFault)(nil)).Elem()
    +}
    +
    +type StorageDrsDisabledOnVm struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsDisabledOnVm"] = reflect.TypeOf((*StorageDrsDisabledOnVm)(nil)).Elem()
    +}
    +
    +type StorageDrsDisabledOnVmFault StorageDrsDisabledOnVm
    +
    +func init() {
    +	t["StorageDrsDisabledOnVmFault"] = reflect.TypeOf((*StorageDrsDisabledOnVmFault)(nil)).Elem()
    +}
    +
    +type StorageDrsHbrDiskNotMovable struct {
    +	VimFault
    +
    +	NonMovableDiskIds string `xml:"nonMovableDiskIds"`
    +}
    +
    +func init() {
    +	t["StorageDrsHbrDiskNotMovable"] = reflect.TypeOf((*StorageDrsHbrDiskNotMovable)(nil)).Elem()
    +}
    +
    +type StorageDrsHbrDiskNotMovableFault StorageDrsHbrDiskNotMovable
    +
    +func init() {
    +	t["StorageDrsHbrDiskNotMovableFault"] = reflect.TypeOf((*StorageDrsHbrDiskNotMovableFault)(nil)).Elem()
    +}
    +
    +type StorageDrsHmsMoveInProgress struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsHmsMoveInProgress"] = reflect.TypeOf((*StorageDrsHmsMoveInProgress)(nil)).Elem()
    +}
    +
    +type StorageDrsHmsMoveInProgressFault StorageDrsHmsMoveInProgress
    +
    +func init() {
    +	t["StorageDrsHmsMoveInProgressFault"] = reflect.TypeOf((*StorageDrsHmsMoveInProgressFault)(nil)).Elem()
    +}
    +
    +type StorageDrsHmsUnreachable struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsHmsUnreachable"] = reflect.TypeOf((*StorageDrsHmsUnreachable)(nil)).Elem()
    +}
    +
    +type StorageDrsHmsUnreachableFault StorageDrsHmsUnreachable
    +
    +func init() {
    +	t["StorageDrsHmsUnreachableFault"] = reflect.TypeOf((*StorageDrsHmsUnreachableFault)(nil)).Elem()
    +}
    +
    +type StorageDrsIoLoadBalanceConfig struct {
    +	DynamicData
    +
    +	ReservablePercentThreshold int32  `xml:"reservablePercentThreshold,omitempty"`
    +	ReservableIopsThreshold    int32  `xml:"reservableIopsThreshold,omitempty"`
    +	ReservableThresholdMode    string `xml:"reservableThresholdMode,omitempty"`
    +	IoLatencyThreshold         int32  `xml:"ioLatencyThreshold,omitempty"`
    +	IoLoadImbalanceThreshold   int32  `xml:"ioLoadImbalanceThreshold,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsIoLoadBalanceConfig"] = reflect.TypeOf((*StorageDrsIoLoadBalanceConfig)(nil)).Elem()
    +}
    +
    +type StorageDrsIolbDisabledInternally struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsIolbDisabledInternally"] = reflect.TypeOf((*StorageDrsIolbDisabledInternally)(nil)).Elem()
    +}
    +
    +type StorageDrsIolbDisabledInternallyFault StorageDrsIolbDisabledInternally
    +
    +func init() {
    +	t["StorageDrsIolbDisabledInternallyFault"] = reflect.TypeOf((*StorageDrsIolbDisabledInternallyFault)(nil)).Elem()
    +}
    +
    +type StorageDrsOptionSpec struct {
    +	ArrayUpdateSpec
    +
    +	Option BaseOptionValue `xml:"option,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["StorageDrsOptionSpec"] = reflect.TypeOf((*StorageDrsOptionSpec)(nil)).Elem()
    +}
    +
    +type StorageDrsPlacementRankVmSpec struct {
    +	DynamicData
    +
    +	VmPlacementSpec PlacementSpec            `xml:"vmPlacementSpec"`
    +	VmClusters      []ManagedObjectReference `xml:"vmClusters"`
    +}
    +
    +func init() {
    +	t["StorageDrsPlacementRankVmSpec"] = reflect.TypeOf((*StorageDrsPlacementRankVmSpec)(nil)).Elem()
    +}
    +
    +type StorageDrsPodConfigInfo struct {
    +	DynamicData
    +
    +	Enabled                bool                              `xml:"enabled"`
    +	IoLoadBalanceEnabled   bool                              `xml:"ioLoadBalanceEnabled"`
    +	DefaultVmBehavior      string                            `xml:"defaultVmBehavior"`
    +	LoadBalanceInterval    int32                             `xml:"loadBalanceInterval,omitempty"`
    +	DefaultIntraVmAffinity *bool                             `xml:"defaultIntraVmAffinity"`
    +	SpaceLoadBalanceConfig *StorageDrsSpaceLoadBalanceConfig `xml:"spaceLoadBalanceConfig,omitempty"`
    +	IoLoadBalanceConfig    *StorageDrsIoLoadBalanceConfig    `xml:"ioLoadBalanceConfig,omitempty"`
    +	AutomationOverrides    *StorageDrsAutomationConfig       `xml:"automationOverrides,omitempty"`
    +	Rule                   []BaseClusterRuleInfo             `xml:"rule,omitempty,typeattr"`
    +	Option                 []BaseOptionValue                 `xml:"option,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["StorageDrsPodConfigInfo"] = reflect.TypeOf((*StorageDrsPodConfigInfo)(nil)).Elem()
    +}
    +
    +type StorageDrsPodConfigSpec struct {
    +	DynamicData
    +
    +	Enabled                *bool                             `xml:"enabled"`
    +	IoLoadBalanceEnabled   *bool                             `xml:"ioLoadBalanceEnabled"`
    +	DefaultVmBehavior      string                            `xml:"defaultVmBehavior,omitempty"`
    +	LoadBalanceInterval    int32                             `xml:"loadBalanceInterval,omitempty"`
    +	DefaultIntraVmAffinity *bool                             `xml:"defaultIntraVmAffinity"`
    +	SpaceLoadBalanceConfig *StorageDrsSpaceLoadBalanceConfig `xml:"spaceLoadBalanceConfig,omitempty"`
    +	IoLoadBalanceConfig    *StorageDrsIoLoadBalanceConfig    `xml:"ioLoadBalanceConfig,omitempty"`
    +	AutomationOverrides    *StorageDrsAutomationConfig       `xml:"automationOverrides,omitempty"`
    +	Rule                   []ClusterRuleSpec                 `xml:"rule,omitempty"`
    +	Option                 []StorageDrsOptionSpec            `xml:"option,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsPodConfigSpec"] = reflect.TypeOf((*StorageDrsPodConfigSpec)(nil)).Elem()
    +}
    +
    +type StorageDrsPodSelectionSpec struct {
    +	DynamicData
    +
    +	InitialVmConfig []VmPodConfigForPlacement `xml:"initialVmConfig,omitempty"`
    +	StoragePod      *ManagedObjectReference   `xml:"storagePod,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsPodSelectionSpec"] = reflect.TypeOf((*StorageDrsPodSelectionSpec)(nil)).Elem()
    +}
    +
    +type StorageDrsRelocateDisabled struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsRelocateDisabled"] = reflect.TypeOf((*StorageDrsRelocateDisabled)(nil)).Elem()
    +}
    +
    +type StorageDrsRelocateDisabledFault StorageDrsRelocateDisabled
    +
    +func init() {
    +	t["StorageDrsRelocateDisabledFault"] = reflect.TypeOf((*StorageDrsRelocateDisabledFault)(nil)).Elem()
    +}
    +
    +type StorageDrsSpaceLoadBalanceConfig struct {
    +	DynamicData
    +
    +	SpaceThresholdMode            string `xml:"spaceThresholdMode,omitempty"`
    +	SpaceUtilizationThreshold     int32  `xml:"spaceUtilizationThreshold,omitempty"`
    +	FreeSpaceThresholdGB          int32  `xml:"freeSpaceThresholdGB,omitempty"`
    +	MinSpaceUtilizationDifference int32  `xml:"minSpaceUtilizationDifference,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsSpaceLoadBalanceConfig"] = reflect.TypeOf((*StorageDrsSpaceLoadBalanceConfig)(nil)).Elem()
    +}
    +
    +type StorageDrsStaleHmsCollection struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsStaleHmsCollection"] = reflect.TypeOf((*StorageDrsStaleHmsCollection)(nil)).Elem()
    +}
    +
    +type StorageDrsStaleHmsCollectionFault StorageDrsStaleHmsCollection
    +
    +func init() {
    +	t["StorageDrsStaleHmsCollectionFault"] = reflect.TypeOf((*StorageDrsStaleHmsCollectionFault)(nil)).Elem()
    +}
    +
    +type StorageDrsUnableToMoveFiles struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["StorageDrsUnableToMoveFiles"] = reflect.TypeOf((*StorageDrsUnableToMoveFiles)(nil)).Elem()
    +}
    +
    +type StorageDrsUnableToMoveFilesFault StorageDrsUnableToMoveFiles
    +
    +func init() {
    +	t["StorageDrsUnableToMoveFilesFault"] = reflect.TypeOf((*StorageDrsUnableToMoveFilesFault)(nil)).Elem()
    +}
    +
    +type StorageDrsVmConfigInfo struct {
    +	DynamicData
    +
    +	Vm                  *ManagedObjectReference          `xml:"vm,omitempty"`
    +	Enabled             *bool                            `xml:"enabled"`
    +	Behavior            string                           `xml:"behavior,omitempty"`
    +	IntraVmAffinity     *bool                            `xml:"intraVmAffinity"`
    +	IntraVmAntiAffinity *VirtualDiskAntiAffinityRuleSpec `xml:"intraVmAntiAffinity,omitempty"`
    +	VirtualDiskRules    []VirtualDiskRuleSpec            `xml:"virtualDiskRules,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsVmConfigInfo"] = reflect.TypeOf((*StorageDrsVmConfigInfo)(nil)).Elem()
    +}
    +
    +type StorageDrsVmConfigSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *StorageDrsVmConfigInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageDrsVmConfigSpec"] = reflect.TypeOf((*StorageDrsVmConfigSpec)(nil)).Elem()
    +}
    +
    +type StorageIOAllocationInfo struct {
    +	DynamicData
    +
    +	Limit       *int64      `xml:"limit"`
    +	Shares      *SharesInfo `xml:"shares,omitempty"`
    +	Reservation *int32      `xml:"reservation"`
    +}
    +
    +func init() {
    +	t["StorageIOAllocationInfo"] = reflect.TypeOf((*StorageIOAllocationInfo)(nil)).Elem()
    +}
    +
    +type StorageIOAllocationOption struct {
    +	DynamicData
    +
    +	LimitOption  LongOption   `xml:"limitOption"`
    +	SharesOption SharesOption `xml:"sharesOption"`
    +}
    +
    +func init() {
    +	t["StorageIOAllocationOption"] = reflect.TypeOf((*StorageIOAllocationOption)(nil)).Elem()
    +}
    +
    +type StorageIORMConfigOption struct {
    +	DynamicData
    +
    +	EnabledOption                BoolOption  `xml:"enabledOption"`
    +	CongestionThresholdOption    IntOption   `xml:"congestionThresholdOption"`
    +	StatsCollectionEnabledOption *BoolOption `xml:"statsCollectionEnabledOption,omitempty"`
    +	ReservationEnabledOption     *BoolOption `xml:"reservationEnabledOption,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageIORMConfigOption"] = reflect.TypeOf((*StorageIORMConfigOption)(nil)).Elem()
    +}
    +
    +type StorageIORMConfigSpec struct {
    +	DynamicData
    +
    +	Enabled                  *bool  `xml:"enabled"`
    +	CongestionThresholdMode  string `xml:"congestionThresholdMode,omitempty"`
    +	CongestionThreshold      int32  `xml:"congestionThreshold,omitempty"`
    +	PercentOfPeakThroughput  int32  `xml:"percentOfPeakThroughput,omitempty"`
    +	StatsCollectionEnabled   *bool  `xml:"statsCollectionEnabled"`
    +	ReservationEnabled       *bool  `xml:"reservationEnabled"`
    +	StatsAggregationDisabled *bool  `xml:"statsAggregationDisabled"`
    +	ReservableIopsThreshold  int32  `xml:"reservableIopsThreshold,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageIORMConfigSpec"] = reflect.TypeOf((*StorageIORMConfigSpec)(nil)).Elem()
    +}
    +
    +type StorageIORMInfo struct {
    +	DynamicData
    +
    +	Enabled                  bool   `xml:"enabled"`
    +	CongestionThresholdMode  string `xml:"congestionThresholdMode,omitempty"`
    +	CongestionThreshold      int32  `xml:"congestionThreshold"`
    +	PercentOfPeakThroughput  int32  `xml:"percentOfPeakThroughput,omitempty"`
    +	StatsCollectionEnabled   *bool  `xml:"statsCollectionEnabled"`
    +	ReservationEnabled       *bool  `xml:"reservationEnabled"`
    +	StatsAggregationDisabled *bool  `xml:"statsAggregationDisabled"`
    +	ReservableIopsThreshold  int32  `xml:"reservableIopsThreshold,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageIORMInfo"] = reflect.TypeOf((*StorageIORMInfo)(nil)).Elem()
    +}
    +
    +type StorageMigrationAction struct {
    +	ClusterAction
    +
    +	Vm                 ManagedObjectReference     `xml:"vm"`
    +	RelocateSpec       VirtualMachineRelocateSpec `xml:"relocateSpec"`
    +	Source             ManagedObjectReference     `xml:"source"`
    +	Destination        ManagedObjectReference     `xml:"destination"`
    +	SizeTransferred    int64                      `xml:"sizeTransferred"`
    +	SpaceUtilSrcBefore float32                    `xml:"spaceUtilSrcBefore,omitempty"`
    +	SpaceUtilDstBefore float32                    `xml:"spaceUtilDstBefore,omitempty"`
    +	SpaceUtilSrcAfter  float32                    `xml:"spaceUtilSrcAfter,omitempty"`
    +	SpaceUtilDstAfter  float32                    `xml:"spaceUtilDstAfter,omitempty"`
    +	IoLatencySrcBefore float32                    `xml:"ioLatencySrcBefore,omitempty"`
    +	IoLatencyDstBefore float32                    `xml:"ioLatencyDstBefore,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageMigrationAction"] = reflect.TypeOf((*StorageMigrationAction)(nil)).Elem()
    +}
    +
    +type StoragePerformanceSummary struct {
    +	DynamicData
    +
    +	Interval              int32     `xml:"interval"`
    +	Percentile            []int32   `xml:"percentile"`
    +	DatastoreReadLatency  []float64 `xml:"datastoreReadLatency"`
    +	DatastoreWriteLatency []float64 `xml:"datastoreWriteLatency"`
    +	DatastoreVmLatency    []float64 `xml:"datastoreVmLatency"`
    +	DatastoreReadIops     []float64 `xml:"datastoreReadIops"`
    +	DatastoreWriteIops    []float64 `xml:"datastoreWriteIops"`
    +	SiocActivityDuration  int32     `xml:"siocActivityDuration"`
    +}
    +
    +func init() {
    +	t["StoragePerformanceSummary"] = reflect.TypeOf((*StoragePerformanceSummary)(nil)).Elem()
    +}
    +
    +type StoragePlacementAction struct {
    +	ClusterAction
    +
    +	Vm                *ManagedObjectReference    `xml:"vm,omitempty"`
    +	RelocateSpec      VirtualMachineRelocateSpec `xml:"relocateSpec"`
    +	Destination       ManagedObjectReference     `xml:"destination"`
    +	SpaceUtilBefore   float32                    `xml:"spaceUtilBefore,omitempty"`
    +	SpaceDemandBefore float32                    `xml:"spaceDemandBefore,omitempty"`
    +	SpaceUtilAfter    float32                    `xml:"spaceUtilAfter,omitempty"`
    +	SpaceDemandAfter  float32                    `xml:"spaceDemandAfter,omitempty"`
    +	IoLatencyBefore   float32                    `xml:"ioLatencyBefore,omitempty"`
    +}
    +
    +func init() {
    +	t["StoragePlacementAction"] = reflect.TypeOf((*StoragePlacementAction)(nil)).Elem()
    +}
    +
    +type StoragePlacementResult struct {
    +	DynamicData
    +
    +	Recommendations []ClusterRecommendation `xml:"recommendations,omitempty"`
    +	DrsFault        *ClusterDrsFaults       `xml:"drsFault,omitempty"`
    +	Task            *ManagedObjectReference `xml:"task,omitempty"`
    +}
    +
    +func init() {
    +	t["StoragePlacementResult"] = reflect.TypeOf((*StoragePlacementResult)(nil)).Elem()
    +}
    +
    +type StoragePlacementSpec struct {
    +	DynamicData
    +
    +	Type                      string                      `xml:"type"`
    +	Priority                  VirtualMachineMovePriority  `xml:"priority,omitempty"`
    +	Vm                        *ManagedObjectReference     `xml:"vm,omitempty"`
    +	PodSelectionSpec          StorageDrsPodSelectionSpec  `xml:"podSelectionSpec"`
    +	CloneSpec                 *VirtualMachineCloneSpec    `xml:"cloneSpec,omitempty"`
    +	CloneName                 string                      `xml:"cloneName,omitempty"`
    +	ConfigSpec                *VirtualMachineConfigSpec   `xml:"configSpec,omitempty"`
    +	RelocateSpec              *VirtualMachineRelocateSpec `xml:"relocateSpec,omitempty"`
    +	ResourcePool              *ManagedObjectReference     `xml:"resourcePool,omitempty"`
    +	Host                      *ManagedObjectReference     `xml:"host,omitempty"`
    +	Folder                    *ManagedObjectReference     `xml:"folder,omitempty"`
    +	DisallowPrerequisiteMoves *bool                       `xml:"disallowPrerequisiteMoves"`
    +	ResourceLeaseDurationSec  int32                       `xml:"resourceLeaseDurationSec,omitempty"`
    +}
    +
    +func init() {
    +	t["StoragePlacementSpec"] = reflect.TypeOf((*StoragePlacementSpec)(nil)).Elem()
    +}
    +
    +type StoragePodSummary struct {
    +	DynamicData
    +
    +	Name      string `xml:"name"`
    +	Capacity  int64  `xml:"capacity"`
    +	FreeSpace int64  `xml:"freeSpace"`
    +}
    +
    +func init() {
    +	t["StoragePodSummary"] = reflect.TypeOf((*StoragePodSummary)(nil)).Elem()
    +}
    +
    +type StorageProfile struct {
    +	ApplyProfile
    +
    +	NasStorage []NasStorageProfile `xml:"nasStorage,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageProfile"] = reflect.TypeOf((*StorageProfile)(nil)).Elem()
    +}
    +
    +type StorageRequirement struct {
    +	DynamicData
    +
    +	Datastore             ManagedObjectReference `xml:"datastore"`
    +	FreeSpaceRequiredInKb int64                  `xml:"freeSpaceRequiredInKb"`
    +}
    +
    +func init() {
    +	t["StorageRequirement"] = reflect.TypeOf((*StorageRequirement)(nil)).Elem()
    +}
    +
    +type StorageResourceManagerStorageProfileStatistics struct {
    +	DynamicData
    +
    +	ProfileId    string `xml:"profileId"`
    +	TotalSpaceMB int64  `xml:"totalSpaceMB"`
    +	UsedSpaceMB  int64  `xml:"usedSpaceMB"`
    +}
    +
    +func init() {
    +	t["StorageResourceManagerStorageProfileStatistics"] = reflect.TypeOf((*StorageResourceManagerStorageProfileStatistics)(nil)).Elem()
    +}
    +
    +type StorageVMotionNotSupported struct {
    +	MigrationFeatureNotSupported
    +}
    +
    +func init() {
    +	t["StorageVMotionNotSupported"] = reflect.TypeOf((*StorageVMotionNotSupported)(nil)).Elem()
    +}
    +
    +type StorageVMotionNotSupportedFault StorageVMotionNotSupported
    +
    +func init() {
    +	t["StorageVMotionNotSupportedFault"] = reflect.TypeOf((*StorageVMotionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type StorageVmotionIncompatible struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	Datastore *ManagedObjectReference `xml:"datastore,omitempty"`
    +}
    +
    +func init() {
    +	t["StorageVmotionIncompatible"] = reflect.TypeOf((*StorageVmotionIncompatible)(nil)).Elem()
    +}
    +
    +type StorageVmotionIncompatibleFault StorageVmotionIncompatible
    +
    +func init() {
    +	t["StorageVmotionIncompatibleFault"] = reflect.TypeOf((*StorageVmotionIncompatibleFault)(nil)).Elem()
    +}
    +
    +type StringExpression struct {
    +	NegatableExpression
    +
    +	Value string `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["StringExpression"] = reflect.TypeOf((*StringExpression)(nil)).Elem()
    +}
    +
    +type StringOption struct {
    +	OptionType
    +
    +	DefaultValue    string `xml:"defaultValue"`
    +	ValidCharacters string `xml:"validCharacters,omitempty"`
    +}
    +
    +func init() {
    +	t["StringOption"] = reflect.TypeOf((*StringOption)(nil)).Elem()
    +}
    +
    +type StringPolicy struct {
    +	InheritablePolicy
    +
    +	Value string `xml:"value,omitempty"`
    +}
    +
    +func init() {
    +	t["StringPolicy"] = reflect.TypeOf((*StringPolicy)(nil)).Elem()
    +}
    +
    +type StructuredCustomizations struct {
    +	HostProfilesEntityCustomizations
    +
    +	Entity         ManagedObjectReference `xml:"entity"`
    +	Customizations *AnswerFile            `xml:"customizations,omitempty"`
    +}
    +
    +func init() {
    +	t["StructuredCustomizations"] = reflect.TypeOf((*StructuredCustomizations)(nil)).Elem()
    +}
    +
    +type SuspendVAppRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["SuspendVAppRequestType"] = reflect.TypeOf((*SuspendVAppRequestType)(nil)).Elem()
    +}
    +
    +type SuspendVApp_Task SuspendVAppRequestType
    +
    +func init() {
    +	t["SuspendVApp_Task"] = reflect.TypeOf((*SuspendVApp_Task)(nil)).Elem()
    +}
    +
    +type SuspendVApp_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type SuspendVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["SuspendVMRequestType"] = reflect.TypeOf((*SuspendVMRequestType)(nil)).Elem()
    +}
    +
    +type SuspendVM_Task SuspendVMRequestType
    +
    +func init() {
    +	t["SuspendVM_Task"] = reflect.TypeOf((*SuspendVM_Task)(nil)).Elem()
    +}
    +
    +type SuspendVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type SuspendedRelocateNotSupported struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["SuspendedRelocateNotSupported"] = reflect.TypeOf((*SuspendedRelocateNotSupported)(nil)).Elem()
    +}
    +
    +type SuspendedRelocateNotSupportedFault SuspendedRelocateNotSupported
    +
    +func init() {
    +	t["SuspendedRelocateNotSupportedFault"] = reflect.TypeOf((*SuspendedRelocateNotSupportedFault)(nil)).Elem()
    +}
    +
    +type SwapDatastoreNotWritableOnHost struct {
    +	DatastoreNotWritableOnHost
    +}
    +
    +func init() {
    +	t["SwapDatastoreNotWritableOnHost"] = reflect.TypeOf((*SwapDatastoreNotWritableOnHost)(nil)).Elem()
    +}
    +
    +type SwapDatastoreNotWritableOnHostFault SwapDatastoreNotWritableOnHost
    +
    +func init() {
    +	t["SwapDatastoreNotWritableOnHostFault"] = reflect.TypeOf((*SwapDatastoreNotWritableOnHostFault)(nil)).Elem()
    +}
    +
    +type SwapDatastoreUnset struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["SwapDatastoreUnset"] = reflect.TypeOf((*SwapDatastoreUnset)(nil)).Elem()
    +}
    +
    +type SwapDatastoreUnsetFault SwapDatastoreUnset
    +
    +func init() {
    +	t["SwapDatastoreUnsetFault"] = reflect.TypeOf((*SwapDatastoreUnsetFault)(nil)).Elem()
    +}
    +
    +type SwapPlacementOverrideNotSupported struct {
    +	InvalidVmConfig
    +}
    +
    +func init() {
    +	t["SwapPlacementOverrideNotSupported"] = reflect.TypeOf((*SwapPlacementOverrideNotSupported)(nil)).Elem()
    +}
    +
    +type SwapPlacementOverrideNotSupportedFault SwapPlacementOverrideNotSupported
    +
    +func init() {
    +	t["SwapPlacementOverrideNotSupportedFault"] = reflect.TypeOf((*SwapPlacementOverrideNotSupportedFault)(nil)).Elem()
    +}
    +
    +type SwitchIpUnset struct {
    +	DvsFault
    +}
    +
    +func init() {
    +	t["SwitchIpUnset"] = reflect.TypeOf((*SwitchIpUnset)(nil)).Elem()
    +}
    +
    +type SwitchIpUnsetFault SwitchIpUnset
    +
    +func init() {
    +	t["SwitchIpUnsetFault"] = reflect.TypeOf((*SwitchIpUnsetFault)(nil)).Elem()
    +}
    +
    +type SwitchNotInUpgradeMode struct {
    +	DvsFault
    +}
    +
    +func init() {
    +	t["SwitchNotInUpgradeMode"] = reflect.TypeOf((*SwitchNotInUpgradeMode)(nil)).Elem()
    +}
    +
    +type SwitchNotInUpgradeModeFault SwitchNotInUpgradeMode
    +
    +func init() {
    +	t["SwitchNotInUpgradeModeFault"] = reflect.TypeOf((*SwitchNotInUpgradeModeFault)(nil)).Elem()
    +}
    +
    +type SystemError struct {
    +	RuntimeFault
    +
    +	Reason string `xml:"reason"`
    +}
    +
    +func init() {
    +	t["SystemError"] = reflect.TypeOf((*SystemError)(nil)).Elem()
    +}
    +
    +type SystemErrorFault SystemError
    +
    +func init() {
    +	t["SystemErrorFault"] = reflect.TypeOf((*SystemErrorFault)(nil)).Elem()
    +}
    +
    +type SystemEventInfo struct {
    +	DynamicData
    +
    +	RecordId     int64  `xml:"recordId"`
    +	When         string `xml:"when"`
    +	SelType      int64  `xml:"selType"`
    +	Message      string `xml:"message"`
    +	SensorNumber int64  `xml:"sensorNumber"`
    +}
    +
    +func init() {
    +	t["SystemEventInfo"] = reflect.TypeOf((*SystemEventInfo)(nil)).Elem()
    +}
    +
    +type Tag struct {
    +	DynamicData
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["Tag"] = reflect.TypeOf((*Tag)(nil)).Elem()
    +}
    +
    +type TaskDescription struct {
    +	DynamicData
    +
    +	MethodInfo []BaseElementDescription `xml:"methodInfo,typeattr"`
    +	State      []BaseElementDescription `xml:"state,typeattr"`
    +	Reason     []BaseTypeDescription    `xml:"reason,typeattr"`
    +}
    +
    +func init() {
    +	t["TaskDescription"] = reflect.TypeOf((*TaskDescription)(nil)).Elem()
    +}
    +
    +type TaskEvent struct {
    +	Event
    +
    +	Info TaskInfo `xml:"info"`
    +}
    +
    +func init() {
    +	t["TaskEvent"] = reflect.TypeOf((*TaskEvent)(nil)).Elem()
    +}
    +
    +type TaskFilterSpec struct {
    +	DynamicData
    +
    +	Entity        *TaskFilterSpecByEntity   `xml:"entity,omitempty"`
    +	Time          *TaskFilterSpecByTime     `xml:"time,omitempty"`
    +	UserName      *TaskFilterSpecByUsername `xml:"userName,omitempty"`
    +	ActivationId  []string                  `xml:"activationId,omitempty"`
    +	State         []TaskInfoState           `xml:"state,omitempty"`
    +	Alarm         *ManagedObjectReference   `xml:"alarm,omitempty"`
    +	ScheduledTask *ManagedObjectReference   `xml:"scheduledTask,omitempty"`
    +	EventChainId  []int32                   `xml:"eventChainId,omitempty"`
    +	Tag           []string                  `xml:"tag,omitempty"`
    +	ParentTaskKey []string                  `xml:"parentTaskKey,omitempty"`
    +	RootTaskKey   []string                  `xml:"rootTaskKey,omitempty"`
    +}
    +
    +func init() {
    +	t["TaskFilterSpec"] = reflect.TypeOf((*TaskFilterSpec)(nil)).Elem()
    +}
    +
    +type TaskFilterSpecByEntity struct {
    +	DynamicData
    +
    +	Entity    ManagedObjectReference        `xml:"entity"`
    +	Recursion TaskFilterSpecRecursionOption `xml:"recursion"`
    +}
    +
    +func init() {
    +	t["TaskFilterSpecByEntity"] = reflect.TypeOf((*TaskFilterSpecByEntity)(nil)).Elem()
    +}
    +
    +type TaskFilterSpecByTime struct {
    +	DynamicData
    +
    +	TimeType  TaskFilterSpecTimeOption `xml:"timeType"`
    +	BeginTime *time.Time               `xml:"beginTime"`
    +	EndTime   *time.Time               `xml:"endTime"`
    +}
    +
    +func init() {
    +	t["TaskFilterSpecByTime"] = reflect.TypeOf((*TaskFilterSpecByTime)(nil)).Elem()
    +}
    +
    +type TaskFilterSpecByUsername struct {
    +	DynamicData
    +
    +	SystemUser bool     `xml:"systemUser"`
    +	UserList   []string `xml:"userList,omitempty"`
    +}
    +
    +func init() {
    +	t["TaskFilterSpecByUsername"] = reflect.TypeOf((*TaskFilterSpecByUsername)(nil)).Elem()
    +}
    +
    +type TaskInProgress struct {
    +	VimFault
    +
    +	Task ManagedObjectReference `xml:"task"`
    +}
    +
    +func init() {
    +	t["TaskInProgress"] = reflect.TypeOf((*TaskInProgress)(nil)).Elem()
    +}
    +
    +type TaskInProgressFault BaseTaskInProgress
    +
    +func init() {
    +	t["TaskInProgressFault"] = reflect.TypeOf((*TaskInProgressFault)(nil)).Elem()
    +}
    +
    +type TaskInfo struct {
    +	DynamicData
    +
    +	Key           string                   `xml:"key"`
    +	Task          ManagedObjectReference   `xml:"task"`
    +	Description   *LocalizableMessage      `xml:"description,omitempty"`
    +	Name          string                   `xml:"name,omitempty"`
    +	DescriptionId string                   `xml:"descriptionId"`
    +	Entity        *ManagedObjectReference  `xml:"entity,omitempty"`
    +	EntityName    string                   `xml:"entityName,omitempty"`
    +	Locked        []ManagedObjectReference `xml:"locked,omitempty"`
    +	State         TaskInfoState            `xml:"state"`
    +	Cancelled     bool                     `xml:"cancelled"`
    +	Cancelable    bool                     `xml:"cancelable"`
    +	Error         *LocalizedMethodFault    `xml:"error,omitempty"`
    +	Result        AnyType                  `xml:"result,omitempty,typeattr"`
    +	Progress      int32                    `xml:"progress,omitempty"`
    +	Reason        BaseTaskReason           `xml:"reason,typeattr"`
    +	QueueTime     time.Time                `xml:"queueTime"`
    +	StartTime     *time.Time               `xml:"startTime"`
    +	CompleteTime  *time.Time               `xml:"completeTime"`
    +	EventChainId  int32                    `xml:"eventChainId"`
    +	ChangeTag     string                   `xml:"changeTag,omitempty"`
    +	ParentTaskKey string                   `xml:"parentTaskKey,omitempty"`
    +	RootTaskKey   string                   `xml:"rootTaskKey,omitempty"`
    +	ActivationId  string                   `xml:"activationId,omitempty"`
    +}
    +
    +func init() {
    +	t["TaskInfo"] = reflect.TypeOf((*TaskInfo)(nil)).Elem()
    +}
    +
    +type TaskReason struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["TaskReason"] = reflect.TypeOf((*TaskReason)(nil)).Elem()
    +}
    +
    +type TaskReasonAlarm struct {
    +	TaskReason
    +
    +	AlarmName  string                 `xml:"alarmName"`
    +	Alarm      ManagedObjectReference `xml:"alarm"`
    +	EntityName string                 `xml:"entityName"`
    +	Entity     ManagedObjectReference `xml:"entity"`
    +}
    +
    +func init() {
    +	t["TaskReasonAlarm"] = reflect.TypeOf((*TaskReasonAlarm)(nil)).Elem()
    +}
    +
    +type TaskReasonSchedule struct {
    +	TaskReason
    +
    +	Name          string                 `xml:"name"`
    +	ScheduledTask ManagedObjectReference `xml:"scheduledTask"`
    +}
    +
    +func init() {
    +	t["TaskReasonSchedule"] = reflect.TypeOf((*TaskReasonSchedule)(nil)).Elem()
    +}
    +
    +type TaskReasonSystem struct {
    +	TaskReason
    +}
    +
    +func init() {
    +	t["TaskReasonSystem"] = reflect.TypeOf((*TaskReasonSystem)(nil)).Elem()
    +}
    +
    +type TaskReasonUser struct {
    +	TaskReason
    +
    +	UserName string `xml:"userName"`
    +}
    +
    +func init() {
    +	t["TaskReasonUser"] = reflect.TypeOf((*TaskReasonUser)(nil)).Elem()
    +}
    +
    +type TaskScheduler struct {
    +	DynamicData
    +
    +	ActiveTime *time.Time `xml:"activeTime"`
    +	ExpireTime *time.Time `xml:"expireTime"`
    +}
    +
    +func init() {
    +	t["TaskScheduler"] = reflect.TypeOf((*TaskScheduler)(nil)).Elem()
    +}
    +
    +type TaskTimeoutEvent struct {
    +	TaskEvent
    +}
    +
    +func init() {
    +	t["TaskTimeoutEvent"] = reflect.TypeOf((*TaskTimeoutEvent)(nil)).Elem()
    +}
    +
    +type TeamingMatchEvent struct {
    +	DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["TeamingMatchEvent"] = reflect.TypeOf((*TeamingMatchEvent)(nil)).Elem()
    +}
    +
    +type TeamingMisMatchEvent struct {
    +	DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["TeamingMisMatchEvent"] = reflect.TypeOf((*TeamingMisMatchEvent)(nil)).Elem()
    +}
    +
    +type TemplateBeingUpgradedEvent struct {
    +	TemplateUpgradeEvent
    +}
    +
    +func init() {
    +	t["TemplateBeingUpgradedEvent"] = reflect.TypeOf((*TemplateBeingUpgradedEvent)(nil)).Elem()
    +}
    +
    +type TemplateConfigFileInfo struct {
    +	VmConfigFileInfo
    +}
    +
    +func init() {
    +	t["TemplateConfigFileInfo"] = reflect.TypeOf((*TemplateConfigFileInfo)(nil)).Elem()
    +}
    +
    +type TemplateConfigFileQuery struct {
    +	VmConfigFileQuery
    +}
    +
    +func init() {
    +	t["TemplateConfigFileQuery"] = reflect.TypeOf((*TemplateConfigFileQuery)(nil)).Elem()
    +}
    +
    +type TemplateUpgradeEvent struct {
    +	Event
    +
    +	LegacyTemplate string `xml:"legacyTemplate"`
    +}
    +
    +func init() {
    +	t["TemplateUpgradeEvent"] = reflect.TypeOf((*TemplateUpgradeEvent)(nil)).Elem()
    +}
    +
    +type TemplateUpgradeFailedEvent struct {
    +	TemplateUpgradeEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["TemplateUpgradeFailedEvent"] = reflect.TypeOf((*TemplateUpgradeFailedEvent)(nil)).Elem()
    +}
    +
    +type TemplateUpgradedEvent struct {
    +	TemplateUpgradeEvent
    +}
    +
    +func init() {
    +	t["TemplateUpgradedEvent"] = reflect.TypeOf((*TemplateUpgradedEvent)(nil)).Elem()
    +}
    +
    +type TerminateFaultTolerantVMRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   *ManagedObjectReference `xml:"vm,omitempty"`
    +}
    +
    +func init() {
    +	t["TerminateFaultTolerantVMRequestType"] = reflect.TypeOf((*TerminateFaultTolerantVMRequestType)(nil)).Elem()
    +}
    +
    +type TerminateFaultTolerantVM_Task TerminateFaultTolerantVMRequestType
    +
    +func init() {
    +	t["TerminateFaultTolerantVM_Task"] = reflect.TypeOf((*TerminateFaultTolerantVM_Task)(nil)).Elem()
    +}
    +
    +type TerminateFaultTolerantVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type TerminateProcessInGuest TerminateProcessInGuestRequestType
    +
    +func init() {
    +	t["TerminateProcessInGuest"] = reflect.TypeOf((*TerminateProcessInGuest)(nil)).Elem()
    +}
    +
    +type TerminateProcessInGuestRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Auth BaseGuestAuthentication `xml:"auth,typeattr"`
    +	Pid  int64                   `xml:"pid"`
    +}
    +
    +func init() {
    +	t["TerminateProcessInGuestRequestType"] = reflect.TypeOf((*TerminateProcessInGuestRequestType)(nil)).Elem()
    +}
    +
    +type TerminateProcessInGuestResponse struct {
    +}
    +
    +type TerminateSession TerminateSessionRequestType
    +
    +func init() {
    +	t["TerminateSession"] = reflect.TypeOf((*TerminateSession)(nil)).Elem()
    +}
    +
    +type TerminateSessionRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	SessionId []string               `xml:"sessionId"`
    +}
    +
    +func init() {
    +	t["TerminateSessionRequestType"] = reflect.TypeOf((*TerminateSessionRequestType)(nil)).Elem()
    +}
    +
    +type TerminateSessionResponse struct {
    +}
    +
    +type TerminateVM TerminateVMRequestType
    +
    +func init() {
    +	t["TerminateVM"] = reflect.TypeOf((*TerminateVM)(nil)).Elem()
    +}
    +
    +type TerminateVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["TerminateVMRequestType"] = reflect.TypeOf((*TerminateVMRequestType)(nil)).Elem()
    +}
    +
    +type TerminateVMResponse struct {
    +}
    +
    +type ThirdPartyLicenseAssignmentFailed struct {
    +	RuntimeFault
    +
    +	Host   ManagedObjectReference `xml:"host"`
    +	Module string                 `xml:"module"`
    +	Reason string                 `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["ThirdPartyLicenseAssignmentFailed"] = reflect.TypeOf((*ThirdPartyLicenseAssignmentFailed)(nil)).Elem()
    +}
    +
    +type ThirdPartyLicenseAssignmentFailedFault ThirdPartyLicenseAssignmentFailed
    +
    +func init() {
    +	t["ThirdPartyLicenseAssignmentFailedFault"] = reflect.TypeOf((*ThirdPartyLicenseAssignmentFailedFault)(nil)).Elem()
    +}
    +
    +type TicketedSessionAuthentication struct {
    +	GuestAuthentication
    +
    +	Ticket string `xml:"ticket"`
    +}
    +
    +func init() {
    +	t["TicketedSessionAuthentication"] = reflect.TypeOf((*TicketedSessionAuthentication)(nil)).Elem()
    +}
    +
    +type TimedOutHostOperationEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["TimedOutHostOperationEvent"] = reflect.TypeOf((*TimedOutHostOperationEvent)(nil)).Elem()
    +}
    +
    +type Timedout struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["Timedout"] = reflect.TypeOf((*Timedout)(nil)).Elem()
    +}
    +
    +type TimedoutFault BaseTimedout
    +
    +func init() {
    +	t["TimedoutFault"] = reflect.TypeOf((*TimedoutFault)(nil)).Elem()
    +}
    +
    +type TooManyConcurrentNativeClones struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["TooManyConcurrentNativeClones"] = reflect.TypeOf((*TooManyConcurrentNativeClones)(nil)).Elem()
    +}
    +
    +type TooManyConcurrentNativeClonesFault TooManyConcurrentNativeClones
    +
    +func init() {
    +	t["TooManyConcurrentNativeClonesFault"] = reflect.TypeOf((*TooManyConcurrentNativeClonesFault)(nil)).Elem()
    +}
    +
    +type TooManyConsecutiveOverrides struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["TooManyConsecutiveOverrides"] = reflect.TypeOf((*TooManyConsecutiveOverrides)(nil)).Elem()
    +}
    +
    +type TooManyConsecutiveOverridesFault TooManyConsecutiveOverrides
    +
    +func init() {
    +	t["TooManyConsecutiveOverridesFault"] = reflect.TypeOf((*TooManyConsecutiveOverridesFault)(nil)).Elem()
    +}
    +
    +type TooManyDevices struct {
    +	InvalidVmConfig
    +}
    +
    +func init() {
    +	t["TooManyDevices"] = reflect.TypeOf((*TooManyDevices)(nil)).Elem()
    +}
    +
    +type TooManyDevicesFault TooManyDevices
    +
    +func init() {
    +	t["TooManyDevicesFault"] = reflect.TypeOf((*TooManyDevicesFault)(nil)).Elem()
    +}
    +
    +type TooManyDisksOnLegacyHost struct {
    +	MigrationFault
    +
    +	DiskCount     int32 `xml:"diskCount"`
    +	TimeoutDanger bool  `xml:"timeoutDanger"`
    +}
    +
    +func init() {
    +	t["TooManyDisksOnLegacyHost"] = reflect.TypeOf((*TooManyDisksOnLegacyHost)(nil)).Elem()
    +}
    +
    +type TooManyDisksOnLegacyHostFault TooManyDisksOnLegacyHost
    +
    +func init() {
    +	t["TooManyDisksOnLegacyHostFault"] = reflect.TypeOf((*TooManyDisksOnLegacyHostFault)(nil)).Elem()
    +}
    +
    +type TooManyGuestLogons struct {
    +	GuestOperationsFault
    +}
    +
    +func init() {
    +	t["TooManyGuestLogons"] = reflect.TypeOf((*TooManyGuestLogons)(nil)).Elem()
    +}
    +
    +type TooManyGuestLogonsFault TooManyGuestLogons
    +
    +func init() {
    +	t["TooManyGuestLogonsFault"] = reflect.TypeOf((*TooManyGuestLogonsFault)(nil)).Elem()
    +}
    +
    +type TooManyHosts struct {
    +	HostConnectFault
    +}
    +
    +func init() {
    +	t["TooManyHosts"] = reflect.TypeOf((*TooManyHosts)(nil)).Elem()
    +}
    +
    +type TooManyHostsFault TooManyHosts
    +
    +func init() {
    +	t["TooManyHostsFault"] = reflect.TypeOf((*TooManyHostsFault)(nil)).Elem()
    +}
    +
    +type TooManyNativeCloneLevels struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["TooManyNativeCloneLevels"] = reflect.TypeOf((*TooManyNativeCloneLevels)(nil)).Elem()
    +}
    +
    +type TooManyNativeCloneLevelsFault TooManyNativeCloneLevels
    +
    +func init() {
    +	t["TooManyNativeCloneLevelsFault"] = reflect.TypeOf((*TooManyNativeCloneLevelsFault)(nil)).Elem()
    +}
    +
    +type TooManyNativeClonesOnFile struct {
    +	FileFault
    +}
    +
    +func init() {
    +	t["TooManyNativeClonesOnFile"] = reflect.TypeOf((*TooManyNativeClonesOnFile)(nil)).Elem()
    +}
    +
    +type TooManyNativeClonesOnFileFault TooManyNativeClonesOnFile
    +
    +func init() {
    +	t["TooManyNativeClonesOnFileFault"] = reflect.TypeOf((*TooManyNativeClonesOnFileFault)(nil)).Elem()
    +}
    +
    +type TooManySnapshotLevels struct {
    +	SnapshotFault
    +}
    +
    +func init() {
    +	t["TooManySnapshotLevels"] = reflect.TypeOf((*TooManySnapshotLevels)(nil)).Elem()
    +}
    +
    +type TooManySnapshotLevelsFault TooManySnapshotLevels
    +
    +func init() {
    +	t["TooManySnapshotLevelsFault"] = reflect.TypeOf((*TooManySnapshotLevelsFault)(nil)).Elem()
    +}
    +
    +type ToolsAlreadyUpgraded struct {
    +	VmToolsUpgradeFault
    +}
    +
    +func init() {
    +	t["ToolsAlreadyUpgraded"] = reflect.TypeOf((*ToolsAlreadyUpgraded)(nil)).Elem()
    +}
    +
    +type ToolsAlreadyUpgradedFault ToolsAlreadyUpgraded
    +
    +func init() {
    +	t["ToolsAlreadyUpgradedFault"] = reflect.TypeOf((*ToolsAlreadyUpgradedFault)(nil)).Elem()
    +}
    +
    +type ToolsAutoUpgradeNotSupported struct {
    +	VmToolsUpgradeFault
    +}
    +
    +func init() {
    +	t["ToolsAutoUpgradeNotSupported"] = reflect.TypeOf((*ToolsAutoUpgradeNotSupported)(nil)).Elem()
    +}
    +
    +type ToolsAutoUpgradeNotSupportedFault ToolsAutoUpgradeNotSupported
    +
    +func init() {
    +	t["ToolsAutoUpgradeNotSupportedFault"] = reflect.TypeOf((*ToolsAutoUpgradeNotSupportedFault)(nil)).Elem()
    +}
    +
    +type ToolsConfigInfo struct {
    +	DynamicData
    +
    +	ToolsVersion         int32                                `xml:"toolsVersion,omitempty"`
    +	ToolsInstallType     string                               `xml:"toolsInstallType,omitempty"`
    +	AfterPowerOn         *bool                                `xml:"afterPowerOn"`
    +	AfterResume          *bool                                `xml:"afterResume"`
    +	BeforeGuestStandby   *bool                                `xml:"beforeGuestStandby"`
    +	BeforeGuestShutdown  *bool                                `xml:"beforeGuestShutdown"`
    +	BeforeGuestReboot    *bool                                `xml:"beforeGuestReboot"`
    +	ToolsUpgradePolicy   string                               `xml:"toolsUpgradePolicy,omitempty"`
    +	PendingCustomization string                               `xml:"pendingCustomization,omitempty"`
    +	CustomizationKeyId   *CryptoKeyId                         `xml:"customizationKeyId,omitempty"`
    +	SyncTimeWithHost     *bool                                `xml:"syncTimeWithHost"`
    +	LastInstallInfo      *ToolsConfigInfoToolsLastInstallInfo `xml:"lastInstallInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["ToolsConfigInfo"] = reflect.TypeOf((*ToolsConfigInfo)(nil)).Elem()
    +}
    +
    +type ToolsConfigInfoToolsLastInstallInfo struct {
    +	DynamicData
    +
    +	Counter int32                 `xml:"counter"`
    +	Fault   *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["ToolsConfigInfoToolsLastInstallInfo"] = reflect.TypeOf((*ToolsConfigInfoToolsLastInstallInfo)(nil)).Elem()
    +}
    +
    +type ToolsImageCopyFailed struct {
    +	VmToolsUpgradeFault
    +}
    +
    +func init() {
    +	t["ToolsImageCopyFailed"] = reflect.TypeOf((*ToolsImageCopyFailed)(nil)).Elem()
    +}
    +
    +type ToolsImageCopyFailedFault ToolsImageCopyFailed
    +
    +func init() {
    +	t["ToolsImageCopyFailedFault"] = reflect.TypeOf((*ToolsImageCopyFailedFault)(nil)).Elem()
    +}
    +
    +type ToolsImageNotAvailable struct {
    +	VmToolsUpgradeFault
    +}
    +
    +func init() {
    +	t["ToolsImageNotAvailable"] = reflect.TypeOf((*ToolsImageNotAvailable)(nil)).Elem()
    +}
    +
    +type ToolsImageNotAvailableFault ToolsImageNotAvailable
    +
    +func init() {
    +	t["ToolsImageNotAvailableFault"] = reflect.TypeOf((*ToolsImageNotAvailableFault)(nil)).Elem()
    +}
    +
    +type ToolsImageSignatureCheckFailed struct {
    +	VmToolsUpgradeFault
    +}
    +
    +func init() {
    +	t["ToolsImageSignatureCheckFailed"] = reflect.TypeOf((*ToolsImageSignatureCheckFailed)(nil)).Elem()
    +}
    +
    +type ToolsImageSignatureCheckFailedFault ToolsImageSignatureCheckFailed
    +
    +func init() {
    +	t["ToolsImageSignatureCheckFailedFault"] = reflect.TypeOf((*ToolsImageSignatureCheckFailedFault)(nil)).Elem()
    +}
    +
    +type ToolsInstallationInProgress struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["ToolsInstallationInProgress"] = reflect.TypeOf((*ToolsInstallationInProgress)(nil)).Elem()
    +}
    +
    +type ToolsInstallationInProgressFault ToolsInstallationInProgress
    +
    +func init() {
    +	t["ToolsInstallationInProgressFault"] = reflect.TypeOf((*ToolsInstallationInProgressFault)(nil)).Elem()
    +}
    +
    +type ToolsUnavailable struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["ToolsUnavailable"] = reflect.TypeOf((*ToolsUnavailable)(nil)).Elem()
    +}
    +
    +type ToolsUnavailableFault ToolsUnavailable
    +
    +func init() {
    +	t["ToolsUnavailableFault"] = reflect.TypeOf((*ToolsUnavailableFault)(nil)).Elem()
    +}
    +
    +type ToolsUpgradeCancelled struct {
    +	VmToolsUpgradeFault
    +}
    +
    +func init() {
    +	t["ToolsUpgradeCancelled"] = reflect.TypeOf((*ToolsUpgradeCancelled)(nil)).Elem()
    +}
    +
    +type ToolsUpgradeCancelledFault ToolsUpgradeCancelled
    +
    +func init() {
    +	t["ToolsUpgradeCancelledFault"] = reflect.TypeOf((*ToolsUpgradeCancelledFault)(nil)).Elem()
    +}
    +
    +type TraversalSpec struct {
    +	SelectionSpec
    +
    +	Type      string              `xml:"type"`
    +	Path      string              `xml:"path"`
    +	Skip      *bool               `xml:"skip"`
    +	SelectSet []BaseSelectionSpec `xml:"selectSet,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["TraversalSpec"] = reflect.TypeOf((*TraversalSpec)(nil)).Elem()
    +}
    +
    +type TurnDiskLocatorLedOffRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	ScsiDiskUuids []string               `xml:"scsiDiskUuids"`
    +}
    +
    +func init() {
    +	t["TurnDiskLocatorLedOffRequestType"] = reflect.TypeOf((*TurnDiskLocatorLedOffRequestType)(nil)).Elem()
    +}
    +
    +type TurnDiskLocatorLedOff_Task TurnDiskLocatorLedOffRequestType
    +
    +func init() {
    +	t["TurnDiskLocatorLedOff_Task"] = reflect.TypeOf((*TurnDiskLocatorLedOff_Task)(nil)).Elem()
    +}
    +
    +type TurnDiskLocatorLedOff_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type TurnDiskLocatorLedOnRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	ScsiDiskUuids []string               `xml:"scsiDiskUuids"`
    +}
    +
    +func init() {
    +	t["TurnDiskLocatorLedOnRequestType"] = reflect.TypeOf((*TurnDiskLocatorLedOnRequestType)(nil)).Elem()
    +}
    +
    +type TurnDiskLocatorLedOn_Task TurnDiskLocatorLedOnRequestType
    +
    +func init() {
    +	t["TurnDiskLocatorLedOn_Task"] = reflect.TypeOf((*TurnDiskLocatorLedOn_Task)(nil)).Elem()
    +}
    +
    +type TurnDiskLocatorLedOn_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type TurnOffFaultToleranceForVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["TurnOffFaultToleranceForVMRequestType"] = reflect.TypeOf((*TurnOffFaultToleranceForVMRequestType)(nil)).Elem()
    +}
    +
    +type TurnOffFaultToleranceForVM_Task TurnOffFaultToleranceForVMRequestType
    +
    +func init() {
    +	t["TurnOffFaultToleranceForVM_Task"] = reflect.TypeOf((*TurnOffFaultToleranceForVM_Task)(nil)).Elem()
    +}
    +
    +type TurnOffFaultToleranceForVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type TypeDescription struct {
    +	Description
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["TypeDescription"] = reflect.TypeOf((*TypeDescription)(nil)).Elem()
    +}
    +
    +type UnSupportedDatastoreForVFlash struct {
    +	UnsupportedDatastore
    +
    +	DatastoreName string `xml:"datastoreName"`
    +	Type          string `xml:"type"`
    +}
    +
    +func init() {
    +	t["UnSupportedDatastoreForVFlash"] = reflect.TypeOf((*UnSupportedDatastoreForVFlash)(nil)).Elem()
    +}
    +
    +type UnSupportedDatastoreForVFlashFault UnSupportedDatastoreForVFlash
    +
    +func init() {
    +	t["UnSupportedDatastoreForVFlashFault"] = reflect.TypeOf((*UnSupportedDatastoreForVFlashFault)(nil)).Elem()
    +}
    +
    +type UnassignUserFromGroup UnassignUserFromGroupRequestType
    +
    +func init() {
    +	t["UnassignUserFromGroup"] = reflect.TypeOf((*UnassignUserFromGroup)(nil)).Elem()
    +}
    +
    +type UnassignUserFromGroupRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	User  string                 `xml:"user"`
    +	Group string                 `xml:"group"`
    +}
    +
    +func init() {
    +	t["UnassignUserFromGroupRequestType"] = reflect.TypeOf((*UnassignUserFromGroupRequestType)(nil)).Elem()
    +}
    +
    +type UnassignUserFromGroupResponse struct {
    +}
    +
    +type UnbindVnic UnbindVnicRequestType
    +
    +func init() {
    +	t["UnbindVnic"] = reflect.TypeOf((*UnbindVnic)(nil)).Elem()
    +}
    +
    +type UnbindVnicRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	IScsiHbaName string                 `xml:"iScsiHbaName"`
    +	VnicDevice   string                 `xml:"vnicDevice"`
    +	Force        bool                   `xml:"force"`
    +}
    +
    +func init() {
    +	t["UnbindVnicRequestType"] = reflect.TypeOf((*UnbindVnicRequestType)(nil)).Elem()
    +}
    +
    +type UnbindVnicResponse struct {
    +}
    +
    +type UncommittedUndoableDisk struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["UncommittedUndoableDisk"] = reflect.TypeOf((*UncommittedUndoableDisk)(nil)).Elem()
    +}
    +
    +type UncommittedUndoableDiskFault UncommittedUndoableDisk
    +
    +func init() {
    +	t["UncommittedUndoableDiskFault"] = reflect.TypeOf((*UncommittedUndoableDiskFault)(nil)).Elem()
    +}
    +
    +type UnconfiguredPropertyValue struct {
    +	InvalidPropertyValue
    +}
    +
    +func init() {
    +	t["UnconfiguredPropertyValue"] = reflect.TypeOf((*UnconfiguredPropertyValue)(nil)).Elem()
    +}
    +
    +type UnconfiguredPropertyValueFault UnconfiguredPropertyValue
    +
    +func init() {
    +	t["UnconfiguredPropertyValueFault"] = reflect.TypeOf((*UnconfiguredPropertyValueFault)(nil)).Elem()
    +}
    +
    +type UncustomizableGuest struct {
    +	CustomizationFault
    +
    +	UncustomizableGuestOS string `xml:"uncustomizableGuestOS"`
    +}
    +
    +func init() {
    +	t["UncustomizableGuest"] = reflect.TypeOf((*UncustomizableGuest)(nil)).Elem()
    +}
    +
    +type UncustomizableGuestFault UncustomizableGuest
    +
    +func init() {
    +	t["UncustomizableGuestFault"] = reflect.TypeOf((*UncustomizableGuestFault)(nil)).Elem()
    +}
    +
    +type UnexpectedCustomizationFault struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["UnexpectedCustomizationFault"] = reflect.TypeOf((*UnexpectedCustomizationFault)(nil)).Elem()
    +}
    +
    +type UnexpectedCustomizationFaultFault UnexpectedCustomizationFault
    +
    +func init() {
    +	t["UnexpectedCustomizationFaultFault"] = reflect.TypeOf((*UnexpectedCustomizationFaultFault)(nil)).Elem()
    +}
    +
    +type UnexpectedFault struct {
    +	RuntimeFault
    +
    +	FaultName string                `xml:"faultName"`
    +	Fault     *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["UnexpectedFault"] = reflect.TypeOf((*UnexpectedFault)(nil)).Elem()
    +}
    +
    +type UnexpectedFaultFault UnexpectedFault
    +
    +func init() {
    +	t["UnexpectedFaultFault"] = reflect.TypeOf((*UnexpectedFaultFault)(nil)).Elem()
    +}
    +
    +type UninstallHostPatchRequestType struct {
    +	This        ManagedObjectReference                     `xml:"_this"`
    +	BulletinIds []string                                   `xml:"bulletinIds,omitempty"`
    +	Spec        *HostPatchManagerPatchManagerOperationSpec `xml:"spec,omitempty"`
    +}
    +
    +func init() {
    +	t["UninstallHostPatchRequestType"] = reflect.TypeOf((*UninstallHostPatchRequestType)(nil)).Elem()
    +}
    +
    +type UninstallHostPatch_Task UninstallHostPatchRequestType
    +
    +func init() {
    +	t["UninstallHostPatch_Task"] = reflect.TypeOf((*UninstallHostPatch_Task)(nil)).Elem()
    +}
    +
    +type UninstallHostPatch_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UninstallIoFilterRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +	CompRes  ManagedObjectReference `xml:"compRes"`
    +}
    +
    +func init() {
    +	t["UninstallIoFilterRequestType"] = reflect.TypeOf((*UninstallIoFilterRequestType)(nil)).Elem()
    +}
    +
    +type UninstallIoFilter_Task UninstallIoFilterRequestType
    +
    +func init() {
    +	t["UninstallIoFilter_Task"] = reflect.TypeOf((*UninstallIoFilter_Task)(nil)).Elem()
    +}
    +
    +type UninstallIoFilter_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UninstallService UninstallServiceRequestType
    +
    +func init() {
    +	t["UninstallService"] = reflect.TypeOf((*UninstallService)(nil)).Elem()
    +}
    +
    +type UninstallServiceRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Id   string                 `xml:"id"`
    +}
    +
    +func init() {
    +	t["UninstallServiceRequestType"] = reflect.TypeOf((*UninstallServiceRequestType)(nil)).Elem()
    +}
    +
    +type UninstallServiceResponse struct {
    +}
    +
    +type UnlicensedVirtualMachinesEvent struct {
    +	LicenseEvent
    +
    +	Unlicensed int32 `xml:"unlicensed"`
    +	Available  int32 `xml:"available"`
    +}
    +
    +func init() {
    +	t["UnlicensedVirtualMachinesEvent"] = reflect.TypeOf((*UnlicensedVirtualMachinesEvent)(nil)).Elem()
    +}
    +
    +type UnlicensedVirtualMachinesFoundEvent struct {
    +	LicenseEvent
    +
    +	Available int32 `xml:"available"`
    +}
    +
    +func init() {
    +	t["UnlicensedVirtualMachinesFoundEvent"] = reflect.TypeOf((*UnlicensedVirtualMachinesFoundEvent)(nil)).Elem()
    +}
    +
    +type UnmapVmfsVolumeExRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsUuid []string               `xml:"vmfsUuid"`
    +}
    +
    +func init() {
    +	t["UnmapVmfsVolumeExRequestType"] = reflect.TypeOf((*UnmapVmfsVolumeExRequestType)(nil)).Elem()
    +}
    +
    +type UnmapVmfsVolumeEx_Task UnmapVmfsVolumeExRequestType
    +
    +func init() {
    +	t["UnmapVmfsVolumeEx_Task"] = reflect.TypeOf((*UnmapVmfsVolumeEx_Task)(nil)).Elem()
    +}
    +
    +type UnmapVmfsVolumeEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UnmountDiskMappingRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Mapping []VsanHostDiskMapping  `xml:"mapping"`
    +}
    +
    +func init() {
    +	t["UnmountDiskMappingRequestType"] = reflect.TypeOf((*UnmountDiskMappingRequestType)(nil)).Elem()
    +}
    +
    +type UnmountDiskMapping_Task UnmountDiskMappingRequestType
    +
    +func init() {
    +	t["UnmountDiskMapping_Task"] = reflect.TypeOf((*UnmountDiskMapping_Task)(nil)).Elem()
    +}
    +
    +type UnmountDiskMapping_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UnmountForceMountedVmfsVolume UnmountForceMountedVmfsVolumeRequestType
    +
    +func init() {
    +	t["UnmountForceMountedVmfsVolume"] = reflect.TypeOf((*UnmountForceMountedVmfsVolume)(nil)).Elem()
    +}
    +
    +type UnmountForceMountedVmfsVolumeRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsUuid string                 `xml:"vmfsUuid"`
    +}
    +
    +func init() {
    +	t["UnmountForceMountedVmfsVolumeRequestType"] = reflect.TypeOf((*UnmountForceMountedVmfsVolumeRequestType)(nil)).Elem()
    +}
    +
    +type UnmountForceMountedVmfsVolumeResponse struct {
    +}
    +
    +type UnmountToolsInstaller UnmountToolsInstallerRequestType
    +
    +func init() {
    +	t["UnmountToolsInstaller"] = reflect.TypeOf((*UnmountToolsInstaller)(nil)).Elem()
    +}
    +
    +type UnmountToolsInstallerRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["UnmountToolsInstallerRequestType"] = reflect.TypeOf((*UnmountToolsInstallerRequestType)(nil)).Elem()
    +}
    +
    +type UnmountToolsInstallerResponse struct {
    +}
    +
    +type UnmountVffsVolume UnmountVffsVolumeRequestType
    +
    +func init() {
    +	t["UnmountVffsVolume"] = reflect.TypeOf((*UnmountVffsVolume)(nil)).Elem()
    +}
    +
    +type UnmountVffsVolumeRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VffsUuid string                 `xml:"vffsUuid"`
    +}
    +
    +func init() {
    +	t["UnmountVffsVolumeRequestType"] = reflect.TypeOf((*UnmountVffsVolumeRequestType)(nil)).Elem()
    +}
    +
    +type UnmountVffsVolumeResponse struct {
    +}
    +
    +type UnmountVmfsVolume UnmountVmfsVolumeRequestType
    +
    +func init() {
    +	t["UnmountVmfsVolume"] = reflect.TypeOf((*UnmountVmfsVolume)(nil)).Elem()
    +}
    +
    +type UnmountVmfsVolumeExRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsUuid []string               `xml:"vmfsUuid"`
    +}
    +
    +func init() {
    +	t["UnmountVmfsVolumeExRequestType"] = reflect.TypeOf((*UnmountVmfsVolumeExRequestType)(nil)).Elem()
    +}
    +
    +type UnmountVmfsVolumeEx_Task UnmountVmfsVolumeExRequestType
    +
    +func init() {
    +	t["UnmountVmfsVolumeEx_Task"] = reflect.TypeOf((*UnmountVmfsVolumeEx_Task)(nil)).Elem()
    +}
    +
    +type UnmountVmfsVolumeEx_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UnmountVmfsVolumeRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsUuid string                 `xml:"vmfsUuid"`
    +}
    +
    +func init() {
    +	t["UnmountVmfsVolumeRequestType"] = reflect.TypeOf((*UnmountVmfsVolumeRequestType)(nil)).Elem()
    +}
    +
    +type UnmountVmfsVolumeResponse struct {
    +}
    +
    +type UnrecognizedHost struct {
    +	VimFault
    +
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["UnrecognizedHost"] = reflect.TypeOf((*UnrecognizedHost)(nil)).Elem()
    +}
    +
    +type UnrecognizedHostFault UnrecognizedHost
    +
    +func init() {
    +	t["UnrecognizedHostFault"] = reflect.TypeOf((*UnrecognizedHostFault)(nil)).Elem()
    +}
    +
    +type UnregisterAndDestroyRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["UnregisterAndDestroyRequestType"] = reflect.TypeOf((*UnregisterAndDestroyRequestType)(nil)).Elem()
    +}
    +
    +type UnregisterAndDestroy_Task UnregisterAndDestroyRequestType
    +
    +func init() {
    +	t["UnregisterAndDestroy_Task"] = reflect.TypeOf((*UnregisterAndDestroy_Task)(nil)).Elem()
    +}
    +
    +type UnregisterAndDestroy_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UnregisterExtension UnregisterExtensionRequestType
    +
    +func init() {
    +	t["UnregisterExtension"] = reflect.TypeOf((*UnregisterExtension)(nil)).Elem()
    +}
    +
    +type UnregisterExtensionRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ExtensionKey string                 `xml:"extensionKey"`
    +}
    +
    +func init() {
    +	t["UnregisterExtensionRequestType"] = reflect.TypeOf((*UnregisterExtensionRequestType)(nil)).Elem()
    +}
    +
    +type UnregisterExtensionResponse struct {
    +}
    +
    +type UnregisterHealthUpdateProvider UnregisterHealthUpdateProviderRequestType
    +
    +func init() {
    +	t["UnregisterHealthUpdateProvider"] = reflect.TypeOf((*UnregisterHealthUpdateProvider)(nil)).Elem()
    +}
    +
    +type UnregisterHealthUpdateProviderRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ProviderId string                 `xml:"providerId"`
    +}
    +
    +func init() {
    +	t["UnregisterHealthUpdateProviderRequestType"] = reflect.TypeOf((*UnregisterHealthUpdateProviderRequestType)(nil)).Elem()
    +}
    +
    +type UnregisterHealthUpdateProviderResponse struct {
    +}
    +
    +type UnregisterVM UnregisterVMRequestType
    +
    +func init() {
    +	t["UnregisterVM"] = reflect.TypeOf((*UnregisterVM)(nil)).Elem()
    +}
    +
    +type UnregisterVMRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["UnregisterVMRequestType"] = reflect.TypeOf((*UnregisterVMRequestType)(nil)).Elem()
    +}
    +
    +type UnregisterVMResponse struct {
    +}
    +
    +type UnsharedSwapVMotionNotSupported struct {
    +	MigrationFeatureNotSupported
    +}
    +
    +func init() {
    +	t["UnsharedSwapVMotionNotSupported"] = reflect.TypeOf((*UnsharedSwapVMotionNotSupported)(nil)).Elem()
    +}
    +
    +type UnsharedSwapVMotionNotSupportedFault UnsharedSwapVMotionNotSupported
    +
    +func init() {
    +	t["UnsharedSwapVMotionNotSupportedFault"] = reflect.TypeOf((*UnsharedSwapVMotionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type UnsupportedDatastore struct {
    +	VmConfigFault
    +
    +	Datastore *ManagedObjectReference `xml:"datastore,omitempty"`
    +}
    +
    +func init() {
    +	t["UnsupportedDatastore"] = reflect.TypeOf((*UnsupportedDatastore)(nil)).Elem()
    +}
    +
    +type UnsupportedDatastoreFault BaseUnsupportedDatastore
    +
    +func init() {
    +	t["UnsupportedDatastoreFault"] = reflect.TypeOf((*UnsupportedDatastoreFault)(nil)).Elem()
    +}
    +
    +type UnsupportedGuest struct {
    +	InvalidVmConfig
    +
    +	UnsupportedGuestOS string `xml:"unsupportedGuestOS"`
    +}
    +
    +func init() {
    +	t["UnsupportedGuest"] = reflect.TypeOf((*UnsupportedGuest)(nil)).Elem()
    +}
    +
    +type UnsupportedGuestFault UnsupportedGuest
    +
    +func init() {
    +	t["UnsupportedGuestFault"] = reflect.TypeOf((*UnsupportedGuestFault)(nil)).Elem()
    +}
    +
    +type UnsupportedVimApiVersion struct {
    +	VimFault
    +
    +	Version string `xml:"version,omitempty"`
    +}
    +
    +func init() {
    +	t["UnsupportedVimApiVersion"] = reflect.TypeOf((*UnsupportedVimApiVersion)(nil)).Elem()
    +}
    +
    +type UnsupportedVimApiVersionFault UnsupportedVimApiVersion
    +
    +func init() {
    +	t["UnsupportedVimApiVersionFault"] = reflect.TypeOf((*UnsupportedVimApiVersionFault)(nil)).Elem()
    +}
    +
    +type UnsupportedVmxLocation struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["UnsupportedVmxLocation"] = reflect.TypeOf((*UnsupportedVmxLocation)(nil)).Elem()
    +}
    +
    +type UnsupportedVmxLocationFault UnsupportedVmxLocation
    +
    +func init() {
    +	t["UnsupportedVmxLocationFault"] = reflect.TypeOf((*UnsupportedVmxLocationFault)(nil)).Elem()
    +}
    +
    +type UnusedVirtualDiskBlocksNotScrubbed struct {
    +	DeviceBackingNotSupported
    +}
    +
    +func init() {
    +	t["UnusedVirtualDiskBlocksNotScrubbed"] = reflect.TypeOf((*UnusedVirtualDiskBlocksNotScrubbed)(nil)).Elem()
    +}
    +
    +type UnusedVirtualDiskBlocksNotScrubbedFault UnusedVirtualDiskBlocksNotScrubbed
    +
    +func init() {
    +	t["UnusedVirtualDiskBlocksNotScrubbedFault"] = reflect.TypeOf((*UnusedVirtualDiskBlocksNotScrubbedFault)(nil)).Elem()
    +}
    +
    +type UpdateAnswerFileRequestType struct {
    +	This       ManagedObjectReference   `xml:"_this"`
    +	Host       ManagedObjectReference   `xml:"host"`
    +	ConfigSpec BaseAnswerFileCreateSpec `xml:"configSpec,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateAnswerFileRequestType"] = reflect.TypeOf((*UpdateAnswerFileRequestType)(nil)).Elem()
    +}
    +
    +type UpdateAnswerFile_Task UpdateAnswerFileRequestType
    +
    +func init() {
    +	t["UpdateAnswerFile_Task"] = reflect.TypeOf((*UpdateAnswerFile_Task)(nil)).Elem()
    +}
    +
    +type UpdateAnswerFile_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdateAssignedLicense UpdateAssignedLicenseRequestType
    +
    +func init() {
    +	t["UpdateAssignedLicense"] = reflect.TypeOf((*UpdateAssignedLicense)(nil)).Elem()
    +}
    +
    +type UpdateAssignedLicenseRequestType struct {
    +	This              ManagedObjectReference `xml:"_this"`
    +	Entity            string                 `xml:"entity"`
    +	LicenseKey        string                 `xml:"licenseKey"`
    +	EntityDisplayName string                 `xml:"entityDisplayName,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateAssignedLicenseRequestType"] = reflect.TypeOf((*UpdateAssignedLicenseRequestType)(nil)).Elem()
    +}
    +
    +type UpdateAssignedLicenseResponse struct {
    +	Returnval LicenseManagerLicenseInfo `xml:"returnval"`
    +}
    +
    +type UpdateAuthorizationRole UpdateAuthorizationRoleRequestType
    +
    +func init() {
    +	t["UpdateAuthorizationRole"] = reflect.TypeOf((*UpdateAuthorizationRole)(nil)).Elem()
    +}
    +
    +type UpdateAuthorizationRoleRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	RoleId  int32                  `xml:"roleId"`
    +	NewName string                 `xml:"newName"`
    +	PrivIds []string               `xml:"privIds,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateAuthorizationRoleRequestType"] = reflect.TypeOf((*UpdateAuthorizationRoleRequestType)(nil)).Elem()
    +}
    +
    +type UpdateAuthorizationRoleResponse struct {
    +}
    +
    +type UpdateBootDevice UpdateBootDeviceRequestType
    +
    +func init() {
    +	t["UpdateBootDevice"] = reflect.TypeOf((*UpdateBootDevice)(nil)).Elem()
    +}
    +
    +type UpdateBootDeviceRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Key  string                 `xml:"key"`
    +}
    +
    +func init() {
    +	t["UpdateBootDeviceRequestType"] = reflect.TypeOf((*UpdateBootDeviceRequestType)(nil)).Elem()
    +}
    +
    +type UpdateBootDeviceResponse struct {
    +}
    +
    +type UpdateChildResourceConfiguration UpdateChildResourceConfigurationRequestType
    +
    +func init() {
    +	t["UpdateChildResourceConfiguration"] = reflect.TypeOf((*UpdateChildResourceConfiguration)(nil)).Elem()
    +}
    +
    +type UpdateChildResourceConfigurationRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec []ResourceConfigSpec   `xml:"spec"`
    +}
    +
    +func init() {
    +	t["UpdateChildResourceConfigurationRequestType"] = reflect.TypeOf((*UpdateChildResourceConfigurationRequestType)(nil)).Elem()
    +}
    +
    +type UpdateChildResourceConfigurationResponse struct {
    +}
    +
    +type UpdateClusterProfile UpdateClusterProfileRequestType
    +
    +func init() {
    +	t["UpdateClusterProfile"] = reflect.TypeOf((*UpdateClusterProfile)(nil)).Elem()
    +}
    +
    +type UpdateClusterProfileRequestType struct {
    +	This   ManagedObjectReference       `xml:"_this"`
    +	Config BaseClusterProfileConfigSpec `xml:"config,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateClusterProfileRequestType"] = reflect.TypeOf((*UpdateClusterProfileRequestType)(nil)).Elem()
    +}
    +
    +type UpdateClusterProfileResponse struct {
    +}
    +
    +type UpdateConfig UpdateConfigRequestType
    +
    +func init() {
    +	t["UpdateConfig"] = reflect.TypeOf((*UpdateConfig)(nil)).Elem()
    +}
    +
    +type UpdateConfigRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Name   string                 `xml:"name,omitempty"`
    +	Config *ResourceConfigSpec    `xml:"config,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateConfigRequestType"] = reflect.TypeOf((*UpdateConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateConfigResponse struct {
    +}
    +
    +type UpdateConsoleIpRouteConfig UpdateConsoleIpRouteConfigRequestType
    +
    +func init() {
    +	t["UpdateConsoleIpRouteConfig"] = reflect.TypeOf((*UpdateConsoleIpRouteConfig)(nil)).Elem()
    +}
    +
    +type UpdateConsoleIpRouteConfigRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Config BaseHostIpRouteConfig  `xml:"config,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateConsoleIpRouteConfigRequestType"] = reflect.TypeOf((*UpdateConsoleIpRouteConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateConsoleIpRouteConfigResponse struct {
    +}
    +
    +type UpdateCounterLevelMapping UpdateCounterLevelMappingRequestType
    +
    +func init() {
    +	t["UpdateCounterLevelMapping"] = reflect.TypeOf((*UpdateCounterLevelMapping)(nil)).Elem()
    +}
    +
    +type UpdateCounterLevelMappingRequestType struct {
    +	This            ManagedObjectReference                  `xml:"_this"`
    +	CounterLevelMap []PerformanceManagerCounterLevelMapping `xml:"counterLevelMap"`
    +}
    +
    +func init() {
    +	t["UpdateCounterLevelMappingRequestType"] = reflect.TypeOf((*UpdateCounterLevelMappingRequestType)(nil)).Elem()
    +}
    +
    +type UpdateCounterLevelMappingResponse struct {
    +}
    +
    +type UpdateDVSHealthCheckConfigRequestType struct {
    +	This              ManagedObjectReference     `xml:"_this"`
    +	HealthCheckConfig []BaseDVSHealthCheckConfig `xml:"healthCheckConfig,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateDVSHealthCheckConfigRequestType"] = reflect.TypeOf((*UpdateDVSHealthCheckConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateDVSHealthCheckConfig_Task UpdateDVSHealthCheckConfigRequestType
    +
    +func init() {
    +	t["UpdateDVSHealthCheckConfig_Task"] = reflect.TypeOf((*UpdateDVSHealthCheckConfig_Task)(nil)).Elem()
    +}
    +
    +type UpdateDVSHealthCheckConfig_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdateDVSLacpGroupConfigRequestType struct {
    +	This          ManagedObjectReference   `xml:"_this"`
    +	LacpGroupSpec []VMwareDvsLacpGroupSpec `xml:"lacpGroupSpec"`
    +}
    +
    +func init() {
    +	t["UpdateDVSLacpGroupConfigRequestType"] = reflect.TypeOf((*UpdateDVSLacpGroupConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateDVSLacpGroupConfig_Task UpdateDVSLacpGroupConfigRequestType
    +
    +func init() {
    +	t["UpdateDVSLacpGroupConfig_Task"] = reflect.TypeOf((*UpdateDVSLacpGroupConfig_Task)(nil)).Elem()
    +}
    +
    +type UpdateDVSLacpGroupConfig_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdateDateTime UpdateDateTimeRequestType
    +
    +func init() {
    +	t["UpdateDateTime"] = reflect.TypeOf((*UpdateDateTime)(nil)).Elem()
    +}
    +
    +type UpdateDateTimeConfig UpdateDateTimeConfigRequestType
    +
    +func init() {
    +	t["UpdateDateTimeConfig"] = reflect.TypeOf((*UpdateDateTimeConfig)(nil)).Elem()
    +}
    +
    +type UpdateDateTimeConfigRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Config HostDateTimeConfig     `xml:"config"`
    +}
    +
    +func init() {
    +	t["UpdateDateTimeConfigRequestType"] = reflect.TypeOf((*UpdateDateTimeConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateDateTimeConfigResponse struct {
    +}
    +
    +type UpdateDateTimeRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	DateTime time.Time              `xml:"dateTime"`
    +}
    +
    +func init() {
    +	t["UpdateDateTimeRequestType"] = reflect.TypeOf((*UpdateDateTimeRequestType)(nil)).Elem()
    +}
    +
    +type UpdateDateTimeResponse struct {
    +}
    +
    +type UpdateDefaultPolicy UpdateDefaultPolicyRequestType
    +
    +func init() {
    +	t["UpdateDefaultPolicy"] = reflect.TypeOf((*UpdateDefaultPolicy)(nil)).Elem()
    +}
    +
    +type UpdateDefaultPolicyRequestType struct {
    +	This          ManagedObjectReference    `xml:"_this"`
    +	DefaultPolicy HostFirewallDefaultPolicy `xml:"defaultPolicy"`
    +}
    +
    +func init() {
    +	t["UpdateDefaultPolicyRequestType"] = reflect.TypeOf((*UpdateDefaultPolicyRequestType)(nil)).Elem()
    +}
    +
    +type UpdateDefaultPolicyResponse struct {
    +}
    +
    +type UpdateDiskPartitions UpdateDiskPartitionsRequestType
    +
    +func init() {
    +	t["UpdateDiskPartitions"] = reflect.TypeOf((*UpdateDiskPartitions)(nil)).Elem()
    +}
    +
    +type UpdateDiskPartitionsRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	DevicePath string                 `xml:"devicePath"`
    +	Spec       HostDiskPartitionSpec  `xml:"spec"`
    +}
    +
    +func init() {
    +	t["UpdateDiskPartitionsRequestType"] = reflect.TypeOf((*UpdateDiskPartitionsRequestType)(nil)).Elem()
    +}
    +
    +type UpdateDiskPartitionsResponse struct {
    +}
    +
    +type UpdateDnsConfig UpdateDnsConfigRequestType
    +
    +func init() {
    +	t["UpdateDnsConfig"] = reflect.TypeOf((*UpdateDnsConfig)(nil)).Elem()
    +}
    +
    +type UpdateDnsConfigRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Config BaseHostDnsConfig      `xml:"config,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateDnsConfigRequestType"] = reflect.TypeOf((*UpdateDnsConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateDnsConfigResponse struct {
    +}
    +
    +type UpdateDvsCapability UpdateDvsCapabilityRequestType
    +
    +func init() {
    +	t["UpdateDvsCapability"] = reflect.TypeOf((*UpdateDvsCapability)(nil)).Elem()
    +}
    +
    +type UpdateDvsCapabilityRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Capability DVSCapability          `xml:"capability"`
    +}
    +
    +func init() {
    +	t["UpdateDvsCapabilityRequestType"] = reflect.TypeOf((*UpdateDvsCapabilityRequestType)(nil)).Elem()
    +}
    +
    +type UpdateDvsCapabilityResponse struct {
    +}
    +
    +type UpdateExtension UpdateExtensionRequestType
    +
    +func init() {
    +	t["UpdateExtension"] = reflect.TypeOf((*UpdateExtension)(nil)).Elem()
    +}
    +
    +type UpdateExtensionRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Extension Extension              `xml:"extension"`
    +}
    +
    +func init() {
    +	t["UpdateExtensionRequestType"] = reflect.TypeOf((*UpdateExtensionRequestType)(nil)).Elem()
    +}
    +
    +type UpdateExtensionResponse struct {
    +}
    +
    +type UpdateFlags UpdateFlagsRequestType
    +
    +func init() {
    +	t["UpdateFlags"] = reflect.TypeOf((*UpdateFlags)(nil)).Elem()
    +}
    +
    +type UpdateFlagsRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FlagInfo HostFlagInfo           `xml:"flagInfo"`
    +}
    +
    +func init() {
    +	t["UpdateFlagsRequestType"] = reflect.TypeOf((*UpdateFlagsRequestType)(nil)).Elem()
    +}
    +
    +type UpdateFlagsResponse struct {
    +}
    +
    +type UpdateGraphicsConfig UpdateGraphicsConfigRequestType
    +
    +func init() {
    +	t["UpdateGraphicsConfig"] = reflect.TypeOf((*UpdateGraphicsConfig)(nil)).Elem()
    +}
    +
    +type UpdateGraphicsConfigRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Config HostGraphicsConfig     `xml:"config"`
    +}
    +
    +func init() {
    +	t["UpdateGraphicsConfigRequestType"] = reflect.TypeOf((*UpdateGraphicsConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateGraphicsConfigResponse struct {
    +}
    +
    +type UpdateHostCustomizationsRequestType struct {
    +	This                ManagedObjectReference                  `xml:"_this"`
    +	HostToConfigSpecMap []HostProfileManagerHostToConfigSpecMap `xml:"hostToConfigSpecMap,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateHostCustomizationsRequestType"] = reflect.TypeOf((*UpdateHostCustomizationsRequestType)(nil)).Elem()
    +}
    +
    +type UpdateHostCustomizations_Task UpdateHostCustomizationsRequestType
    +
    +func init() {
    +	t["UpdateHostCustomizations_Task"] = reflect.TypeOf((*UpdateHostCustomizations_Task)(nil)).Elem()
    +}
    +
    +type UpdateHostCustomizations_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdateHostImageAcceptanceLevel UpdateHostImageAcceptanceLevelRequestType
    +
    +func init() {
    +	t["UpdateHostImageAcceptanceLevel"] = reflect.TypeOf((*UpdateHostImageAcceptanceLevel)(nil)).Elem()
    +}
    +
    +type UpdateHostImageAcceptanceLevelRequestType struct {
    +	This               ManagedObjectReference `xml:"_this"`
    +	NewAcceptanceLevel string                 `xml:"newAcceptanceLevel"`
    +}
    +
    +func init() {
    +	t["UpdateHostImageAcceptanceLevelRequestType"] = reflect.TypeOf((*UpdateHostImageAcceptanceLevelRequestType)(nil)).Elem()
    +}
    +
    +type UpdateHostImageAcceptanceLevelResponse struct {
    +}
    +
    +type UpdateHostProfile UpdateHostProfileRequestType
    +
    +func init() {
    +	t["UpdateHostProfile"] = reflect.TypeOf((*UpdateHostProfile)(nil)).Elem()
    +}
    +
    +type UpdateHostProfileRequestType struct {
    +	This   ManagedObjectReference    `xml:"_this"`
    +	Config BaseHostProfileConfigSpec `xml:"config,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateHostProfileRequestType"] = reflect.TypeOf((*UpdateHostProfileRequestType)(nil)).Elem()
    +}
    +
    +type UpdateHostProfileResponse struct {
    +}
    +
    +type UpdateHostSpecification UpdateHostSpecificationRequestType
    +
    +func init() {
    +	t["UpdateHostSpecification"] = reflect.TypeOf((*UpdateHostSpecification)(nil)).Elem()
    +}
    +
    +type UpdateHostSpecificationRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Host     ManagedObjectReference `xml:"host"`
    +	HostSpec HostSpecification      `xml:"hostSpec"`
    +}
    +
    +func init() {
    +	t["UpdateHostSpecificationRequestType"] = reflect.TypeOf((*UpdateHostSpecificationRequestType)(nil)).Elem()
    +}
    +
    +type UpdateHostSpecificationResponse struct {
    +}
    +
    +type UpdateHostSubSpecification UpdateHostSubSpecificationRequestType
    +
    +func init() {
    +	t["UpdateHostSubSpecification"] = reflect.TypeOf((*UpdateHostSubSpecification)(nil)).Elem()
    +}
    +
    +type UpdateHostSubSpecificationRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Host        ManagedObjectReference `xml:"host"`
    +	HostSubSpec HostSubSpecification   `xml:"hostSubSpec"`
    +}
    +
    +func init() {
    +	t["UpdateHostSubSpecificationRequestType"] = reflect.TypeOf((*UpdateHostSubSpecificationRequestType)(nil)).Elem()
    +}
    +
    +type UpdateHostSubSpecificationResponse struct {
    +}
    +
    +type UpdateInternetScsiAdvancedOptions UpdateInternetScsiAdvancedOptionsRequestType
    +
    +func init() {
    +	t["UpdateInternetScsiAdvancedOptions"] = reflect.TypeOf((*UpdateInternetScsiAdvancedOptions)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiAdvancedOptionsRequestType struct {
    +	This           ManagedObjectReference          `xml:"_this"`
    +	IScsiHbaDevice string                          `xml:"iScsiHbaDevice"`
    +	TargetSet      *HostInternetScsiHbaTargetSet   `xml:"targetSet,omitempty"`
    +	Options        []HostInternetScsiHbaParamValue `xml:"options"`
    +}
    +
    +func init() {
    +	t["UpdateInternetScsiAdvancedOptionsRequestType"] = reflect.TypeOf((*UpdateInternetScsiAdvancedOptionsRequestType)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiAdvancedOptionsResponse struct {
    +}
    +
    +type UpdateInternetScsiAlias UpdateInternetScsiAliasRequestType
    +
    +func init() {
    +	t["UpdateInternetScsiAlias"] = reflect.TypeOf((*UpdateInternetScsiAlias)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiAliasRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	IScsiHbaDevice string                 `xml:"iScsiHbaDevice"`
    +	IScsiAlias     string                 `xml:"iScsiAlias"`
    +}
    +
    +func init() {
    +	t["UpdateInternetScsiAliasRequestType"] = reflect.TypeOf((*UpdateInternetScsiAliasRequestType)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiAliasResponse struct {
    +}
    +
    +type UpdateInternetScsiAuthenticationProperties UpdateInternetScsiAuthenticationPropertiesRequestType
    +
    +func init() {
    +	t["UpdateInternetScsiAuthenticationProperties"] = reflect.TypeOf((*UpdateInternetScsiAuthenticationProperties)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiAuthenticationPropertiesRequestType struct {
    +	This                     ManagedObjectReference                      `xml:"_this"`
    +	IScsiHbaDevice           string                                      `xml:"iScsiHbaDevice"`
    +	AuthenticationProperties HostInternetScsiHbaAuthenticationProperties `xml:"authenticationProperties"`
    +	TargetSet                *HostInternetScsiHbaTargetSet               `xml:"targetSet,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateInternetScsiAuthenticationPropertiesRequestType"] = reflect.TypeOf((*UpdateInternetScsiAuthenticationPropertiesRequestType)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiAuthenticationPropertiesResponse struct {
    +}
    +
    +type UpdateInternetScsiDigestProperties UpdateInternetScsiDigestPropertiesRequestType
    +
    +func init() {
    +	t["UpdateInternetScsiDigestProperties"] = reflect.TypeOf((*UpdateInternetScsiDigestProperties)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiDigestPropertiesRequestType struct {
    +	This             ManagedObjectReference              `xml:"_this"`
    +	IScsiHbaDevice   string                              `xml:"iScsiHbaDevice"`
    +	TargetSet        *HostInternetScsiHbaTargetSet       `xml:"targetSet,omitempty"`
    +	DigestProperties HostInternetScsiHbaDigestProperties `xml:"digestProperties"`
    +}
    +
    +func init() {
    +	t["UpdateInternetScsiDigestPropertiesRequestType"] = reflect.TypeOf((*UpdateInternetScsiDigestPropertiesRequestType)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiDigestPropertiesResponse struct {
    +}
    +
    +type UpdateInternetScsiDiscoveryProperties UpdateInternetScsiDiscoveryPropertiesRequestType
    +
    +func init() {
    +	t["UpdateInternetScsiDiscoveryProperties"] = reflect.TypeOf((*UpdateInternetScsiDiscoveryProperties)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiDiscoveryPropertiesRequestType struct {
    +	This                ManagedObjectReference                 `xml:"_this"`
    +	IScsiHbaDevice      string                                 `xml:"iScsiHbaDevice"`
    +	DiscoveryProperties HostInternetScsiHbaDiscoveryProperties `xml:"discoveryProperties"`
    +}
    +
    +func init() {
    +	t["UpdateInternetScsiDiscoveryPropertiesRequestType"] = reflect.TypeOf((*UpdateInternetScsiDiscoveryPropertiesRequestType)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiDiscoveryPropertiesResponse struct {
    +}
    +
    +type UpdateInternetScsiIPProperties UpdateInternetScsiIPPropertiesRequestType
    +
    +func init() {
    +	t["UpdateInternetScsiIPProperties"] = reflect.TypeOf((*UpdateInternetScsiIPProperties)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiIPPropertiesRequestType struct {
    +	This           ManagedObjectReference          `xml:"_this"`
    +	IScsiHbaDevice string                          `xml:"iScsiHbaDevice"`
    +	IpProperties   HostInternetScsiHbaIPProperties `xml:"ipProperties"`
    +}
    +
    +func init() {
    +	t["UpdateInternetScsiIPPropertiesRequestType"] = reflect.TypeOf((*UpdateInternetScsiIPPropertiesRequestType)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiIPPropertiesResponse struct {
    +}
    +
    +type UpdateInternetScsiName UpdateInternetScsiNameRequestType
    +
    +func init() {
    +	t["UpdateInternetScsiName"] = reflect.TypeOf((*UpdateInternetScsiName)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiNameRequestType struct {
    +	This           ManagedObjectReference `xml:"_this"`
    +	IScsiHbaDevice string                 `xml:"iScsiHbaDevice"`
    +	IScsiName      string                 `xml:"iScsiName"`
    +}
    +
    +func init() {
    +	t["UpdateInternetScsiNameRequestType"] = reflect.TypeOf((*UpdateInternetScsiNameRequestType)(nil)).Elem()
    +}
    +
    +type UpdateInternetScsiNameResponse struct {
    +}
    +
    +type UpdateIpConfig UpdateIpConfigRequestType
    +
    +func init() {
    +	t["UpdateIpConfig"] = reflect.TypeOf((*UpdateIpConfig)(nil)).Elem()
    +}
    +
    +type UpdateIpConfigRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	IpConfig HostIpConfig           `xml:"ipConfig"`
    +}
    +
    +func init() {
    +	t["UpdateIpConfigRequestType"] = reflect.TypeOf((*UpdateIpConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateIpConfigResponse struct {
    +}
    +
    +type UpdateIpPool UpdateIpPoolRequestType
    +
    +func init() {
    +	t["UpdateIpPool"] = reflect.TypeOf((*UpdateIpPool)(nil)).Elem()
    +}
    +
    +type UpdateIpPoolRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Dc   ManagedObjectReference `xml:"dc"`
    +	Pool IpPool                 `xml:"pool"`
    +}
    +
    +func init() {
    +	t["UpdateIpPoolRequestType"] = reflect.TypeOf((*UpdateIpPoolRequestType)(nil)).Elem()
    +}
    +
    +type UpdateIpPoolResponse struct {
    +}
    +
    +type UpdateIpRouteConfig UpdateIpRouteConfigRequestType
    +
    +func init() {
    +	t["UpdateIpRouteConfig"] = reflect.TypeOf((*UpdateIpRouteConfig)(nil)).Elem()
    +}
    +
    +type UpdateIpRouteConfigRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Config BaseHostIpRouteConfig  `xml:"config,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateIpRouteConfigRequestType"] = reflect.TypeOf((*UpdateIpRouteConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateIpRouteConfigResponse struct {
    +}
    +
    +type UpdateIpRouteTableConfig UpdateIpRouteTableConfigRequestType
    +
    +func init() {
    +	t["UpdateIpRouteTableConfig"] = reflect.TypeOf((*UpdateIpRouteTableConfig)(nil)).Elem()
    +}
    +
    +type UpdateIpRouteTableConfigRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Config HostIpRouteTableConfig `xml:"config"`
    +}
    +
    +func init() {
    +	t["UpdateIpRouteTableConfigRequestType"] = reflect.TypeOf((*UpdateIpRouteTableConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateIpRouteTableConfigResponse struct {
    +}
    +
    +type UpdateIpmi UpdateIpmiRequestType
    +
    +func init() {
    +	t["UpdateIpmi"] = reflect.TypeOf((*UpdateIpmi)(nil)).Elem()
    +}
    +
    +type UpdateIpmiRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	IpmiInfo HostIpmiInfo           `xml:"ipmiInfo"`
    +}
    +
    +func init() {
    +	t["UpdateIpmiRequestType"] = reflect.TypeOf((*UpdateIpmiRequestType)(nil)).Elem()
    +}
    +
    +type UpdateIpmiResponse struct {
    +}
    +
    +type UpdateKmipServer UpdateKmipServerRequestType
    +
    +func init() {
    +	t["UpdateKmipServer"] = reflect.TypeOf((*UpdateKmipServer)(nil)).Elem()
    +}
    +
    +type UpdateKmipServerRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Server KmipServerSpec         `xml:"server"`
    +}
    +
    +func init() {
    +	t["UpdateKmipServerRequestType"] = reflect.TypeOf((*UpdateKmipServerRequestType)(nil)).Elem()
    +}
    +
    +type UpdateKmipServerResponse struct {
    +}
    +
    +type UpdateKmsSignedCsrClientCert UpdateKmsSignedCsrClientCertRequestType
    +
    +func init() {
    +	t["UpdateKmsSignedCsrClientCert"] = reflect.TypeOf((*UpdateKmsSignedCsrClientCert)(nil)).Elem()
    +}
    +
    +type UpdateKmsSignedCsrClientCertRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Cluster     KeyProviderId          `xml:"cluster"`
    +	Certificate string                 `xml:"certificate"`
    +}
    +
    +func init() {
    +	t["UpdateKmsSignedCsrClientCertRequestType"] = reflect.TypeOf((*UpdateKmsSignedCsrClientCertRequestType)(nil)).Elem()
    +}
    +
    +type UpdateKmsSignedCsrClientCertResponse struct {
    +}
    +
    +type UpdateLicense UpdateLicenseRequestType
    +
    +func init() {
    +	t["UpdateLicense"] = reflect.TypeOf((*UpdateLicense)(nil)).Elem()
    +}
    +
    +type UpdateLicenseLabel UpdateLicenseLabelRequestType
    +
    +func init() {
    +	t["UpdateLicenseLabel"] = reflect.TypeOf((*UpdateLicenseLabel)(nil)).Elem()
    +}
    +
    +type UpdateLicenseLabelRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	LicenseKey string                 `xml:"licenseKey"`
    +	LabelKey   string                 `xml:"labelKey"`
    +	LabelValue string                 `xml:"labelValue"`
    +}
    +
    +func init() {
    +	t["UpdateLicenseLabelRequestType"] = reflect.TypeOf((*UpdateLicenseLabelRequestType)(nil)).Elem()
    +}
    +
    +type UpdateLicenseLabelResponse struct {
    +}
    +
    +type UpdateLicenseRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	LicenseKey string                 `xml:"licenseKey"`
    +	Labels     []KeyValue             `xml:"labels,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateLicenseRequestType"] = reflect.TypeOf((*UpdateLicenseRequestType)(nil)).Elem()
    +}
    +
    +type UpdateLicenseResponse struct {
    +	Returnval LicenseManagerLicenseInfo `xml:"returnval"`
    +}
    +
    +type UpdateLinkedChildren UpdateLinkedChildrenRequestType
    +
    +func init() {
    +	t["UpdateLinkedChildren"] = reflect.TypeOf((*UpdateLinkedChildren)(nil)).Elem()
    +}
    +
    +type UpdateLinkedChildrenRequestType struct {
    +	This         ManagedObjectReference   `xml:"_this"`
    +	AddChangeSet []VirtualAppLinkInfo     `xml:"addChangeSet,omitempty"`
    +	RemoveSet    []ManagedObjectReference `xml:"removeSet,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateLinkedChildrenRequestType"] = reflect.TypeOf((*UpdateLinkedChildrenRequestType)(nil)).Elem()
    +}
    +
    +type UpdateLinkedChildrenResponse struct {
    +}
    +
    +type UpdateLocalSwapDatastore UpdateLocalSwapDatastoreRequestType
    +
    +func init() {
    +	t["UpdateLocalSwapDatastore"] = reflect.TypeOf((*UpdateLocalSwapDatastore)(nil)).Elem()
    +}
    +
    +type UpdateLocalSwapDatastoreRequestType struct {
    +	This      ManagedObjectReference  `xml:"_this"`
    +	Datastore *ManagedObjectReference `xml:"datastore,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateLocalSwapDatastoreRequestType"] = reflect.TypeOf((*UpdateLocalSwapDatastoreRequestType)(nil)).Elem()
    +}
    +
    +type UpdateLocalSwapDatastoreResponse struct {
    +}
    +
    +type UpdateLockdownExceptions UpdateLockdownExceptionsRequestType
    +
    +func init() {
    +	t["UpdateLockdownExceptions"] = reflect.TypeOf((*UpdateLockdownExceptions)(nil)).Elem()
    +}
    +
    +type UpdateLockdownExceptionsRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Users []string               `xml:"users,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateLockdownExceptionsRequestType"] = reflect.TypeOf((*UpdateLockdownExceptionsRequestType)(nil)).Elem()
    +}
    +
    +type UpdateLockdownExceptionsResponse struct {
    +}
    +
    +type UpdateModuleOptionString UpdateModuleOptionStringRequestType
    +
    +func init() {
    +	t["UpdateModuleOptionString"] = reflect.TypeOf((*UpdateModuleOptionString)(nil)).Elem()
    +}
    +
    +type UpdateModuleOptionStringRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Name    string                 `xml:"name"`
    +	Options string                 `xml:"options"`
    +}
    +
    +func init() {
    +	t["UpdateModuleOptionStringRequestType"] = reflect.TypeOf((*UpdateModuleOptionStringRequestType)(nil)).Elem()
    +}
    +
    +type UpdateModuleOptionStringResponse struct {
    +}
    +
    +type UpdateNetworkConfig UpdateNetworkConfigRequestType
    +
    +func init() {
    +	t["UpdateNetworkConfig"] = reflect.TypeOf((*UpdateNetworkConfig)(nil)).Elem()
    +}
    +
    +type UpdateNetworkConfigRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Config     HostNetworkConfig      `xml:"config"`
    +	ChangeMode string                 `xml:"changeMode"`
    +}
    +
    +func init() {
    +	t["UpdateNetworkConfigRequestType"] = reflect.TypeOf((*UpdateNetworkConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateNetworkConfigResponse struct {
    +	Returnval HostNetworkConfigResult `xml:"returnval"`
    +}
    +
    +type UpdateNetworkResourcePool UpdateNetworkResourcePoolRequestType
    +
    +func init() {
    +	t["UpdateNetworkResourcePool"] = reflect.TypeOf((*UpdateNetworkResourcePool)(nil)).Elem()
    +}
    +
    +type UpdateNetworkResourcePoolRequestType struct {
    +	This       ManagedObjectReference             `xml:"_this"`
    +	ConfigSpec []DVSNetworkResourcePoolConfigSpec `xml:"configSpec"`
    +}
    +
    +func init() {
    +	t["UpdateNetworkResourcePoolRequestType"] = reflect.TypeOf((*UpdateNetworkResourcePoolRequestType)(nil)).Elem()
    +}
    +
    +type UpdateNetworkResourcePoolResponse struct {
    +}
    +
    +type UpdateOptions UpdateOptionsRequestType
    +
    +func init() {
    +	t["UpdateOptions"] = reflect.TypeOf((*UpdateOptions)(nil)).Elem()
    +}
    +
    +type UpdateOptionsRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ChangedValue []BaseOptionValue      `xml:"changedValue,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateOptionsRequestType"] = reflect.TypeOf((*UpdateOptionsRequestType)(nil)).Elem()
    +}
    +
    +type UpdateOptionsResponse struct {
    +}
    +
    +type UpdatePassthruConfig UpdatePassthruConfigRequestType
    +
    +func init() {
    +	t["UpdatePassthruConfig"] = reflect.TypeOf((*UpdatePassthruConfig)(nil)).Elem()
    +}
    +
    +type UpdatePassthruConfigRequestType struct {
    +	This   ManagedObjectReference      `xml:"_this"`
    +	Config []BaseHostPciPassthruConfig `xml:"config,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdatePassthruConfigRequestType"] = reflect.TypeOf((*UpdatePassthruConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdatePassthruConfigResponse struct {
    +}
    +
    +type UpdatePerfInterval UpdatePerfIntervalRequestType
    +
    +func init() {
    +	t["UpdatePerfInterval"] = reflect.TypeOf((*UpdatePerfInterval)(nil)).Elem()
    +}
    +
    +type UpdatePerfIntervalRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	Interval PerfInterval           `xml:"interval"`
    +}
    +
    +func init() {
    +	t["UpdatePerfIntervalRequestType"] = reflect.TypeOf((*UpdatePerfIntervalRequestType)(nil)).Elem()
    +}
    +
    +type UpdatePerfIntervalResponse struct {
    +}
    +
    +type UpdatePhysicalNicLinkSpeed UpdatePhysicalNicLinkSpeedRequestType
    +
    +func init() {
    +	t["UpdatePhysicalNicLinkSpeed"] = reflect.TypeOf((*UpdatePhysicalNicLinkSpeed)(nil)).Elem()
    +}
    +
    +type UpdatePhysicalNicLinkSpeedRequestType struct {
    +	This      ManagedObjectReference `xml:"_this"`
    +	Device    string                 `xml:"device"`
    +	LinkSpeed *PhysicalNicLinkInfo   `xml:"linkSpeed,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdatePhysicalNicLinkSpeedRequestType"] = reflect.TypeOf((*UpdatePhysicalNicLinkSpeedRequestType)(nil)).Elem()
    +}
    +
    +type UpdatePhysicalNicLinkSpeedResponse struct {
    +}
    +
    +type UpdatePortGroup UpdatePortGroupRequestType
    +
    +func init() {
    +	t["UpdatePortGroup"] = reflect.TypeOf((*UpdatePortGroup)(nil)).Elem()
    +}
    +
    +type UpdatePortGroupRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	PgName  string                 `xml:"pgName"`
    +	Portgrp HostPortGroupSpec      `xml:"portgrp"`
    +}
    +
    +func init() {
    +	t["UpdatePortGroupRequestType"] = reflect.TypeOf((*UpdatePortGroupRequestType)(nil)).Elem()
    +}
    +
    +type UpdatePortGroupResponse struct {
    +}
    +
    +type UpdateProgress UpdateProgressRequestType
    +
    +func init() {
    +	t["UpdateProgress"] = reflect.TypeOf((*UpdateProgress)(nil)).Elem()
    +}
    +
    +type UpdateProgressRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	PercentDone int32                  `xml:"percentDone"`
    +}
    +
    +func init() {
    +	t["UpdateProgressRequestType"] = reflect.TypeOf((*UpdateProgressRequestType)(nil)).Elem()
    +}
    +
    +type UpdateProgressResponse struct {
    +}
    +
    +type UpdateReferenceHost UpdateReferenceHostRequestType
    +
    +func init() {
    +	t["UpdateReferenceHost"] = reflect.TypeOf((*UpdateReferenceHost)(nil)).Elem()
    +}
    +
    +type UpdateReferenceHostRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateReferenceHostRequestType"] = reflect.TypeOf((*UpdateReferenceHostRequestType)(nil)).Elem()
    +}
    +
    +type UpdateReferenceHostResponse struct {
    +}
    +
    +type UpdateRuleset UpdateRulesetRequestType
    +
    +func init() {
    +	t["UpdateRuleset"] = reflect.TypeOf((*UpdateRuleset)(nil)).Elem()
    +}
    +
    +type UpdateRulesetRequestType struct {
    +	This ManagedObjectReference         `xml:"_this"`
    +	Id   string                         `xml:"id"`
    +	Spec HostFirewallRulesetRulesetSpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["UpdateRulesetRequestType"] = reflect.TypeOf((*UpdateRulesetRequestType)(nil)).Elem()
    +}
    +
    +type UpdateRulesetResponse struct {
    +}
    +
    +type UpdateScsiLunDisplayName UpdateScsiLunDisplayNameRequestType
    +
    +func init() {
    +	t["UpdateScsiLunDisplayName"] = reflect.TypeOf((*UpdateScsiLunDisplayName)(nil)).Elem()
    +}
    +
    +type UpdateScsiLunDisplayNameRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	LunUuid     string                 `xml:"lunUuid"`
    +	DisplayName string                 `xml:"displayName"`
    +}
    +
    +func init() {
    +	t["UpdateScsiLunDisplayNameRequestType"] = reflect.TypeOf((*UpdateScsiLunDisplayNameRequestType)(nil)).Elem()
    +}
    +
    +type UpdateScsiLunDisplayNameResponse struct {
    +}
    +
    +type UpdateSelfSignedClientCert UpdateSelfSignedClientCertRequestType
    +
    +func init() {
    +	t["UpdateSelfSignedClientCert"] = reflect.TypeOf((*UpdateSelfSignedClientCert)(nil)).Elem()
    +}
    +
    +type UpdateSelfSignedClientCertRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Cluster     KeyProviderId          `xml:"cluster"`
    +	Certificate string                 `xml:"certificate"`
    +}
    +
    +func init() {
    +	t["UpdateSelfSignedClientCertRequestType"] = reflect.TypeOf((*UpdateSelfSignedClientCertRequestType)(nil)).Elem()
    +}
    +
    +type UpdateSelfSignedClientCertResponse struct {
    +}
    +
    +type UpdateServiceConsoleVirtualNic UpdateServiceConsoleVirtualNicRequestType
    +
    +func init() {
    +	t["UpdateServiceConsoleVirtualNic"] = reflect.TypeOf((*UpdateServiceConsoleVirtualNic)(nil)).Elem()
    +}
    +
    +type UpdateServiceConsoleVirtualNicRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Device string                 `xml:"device"`
    +	Nic    HostVirtualNicSpec     `xml:"nic"`
    +}
    +
    +func init() {
    +	t["UpdateServiceConsoleVirtualNicRequestType"] = reflect.TypeOf((*UpdateServiceConsoleVirtualNicRequestType)(nil)).Elem()
    +}
    +
    +type UpdateServiceConsoleVirtualNicResponse struct {
    +}
    +
    +type UpdateServiceMessage UpdateServiceMessageRequestType
    +
    +func init() {
    +	t["UpdateServiceMessage"] = reflect.TypeOf((*UpdateServiceMessage)(nil)).Elem()
    +}
    +
    +type UpdateServiceMessageRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Message string                 `xml:"message"`
    +}
    +
    +func init() {
    +	t["UpdateServiceMessageRequestType"] = reflect.TypeOf((*UpdateServiceMessageRequestType)(nil)).Elem()
    +}
    +
    +type UpdateServiceMessageResponse struct {
    +}
    +
    +type UpdateServicePolicy UpdateServicePolicyRequestType
    +
    +func init() {
    +	t["UpdateServicePolicy"] = reflect.TypeOf((*UpdateServicePolicy)(nil)).Elem()
    +}
    +
    +type UpdateServicePolicyRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Id     string                 `xml:"id"`
    +	Policy string                 `xml:"policy"`
    +}
    +
    +func init() {
    +	t["UpdateServicePolicyRequestType"] = reflect.TypeOf((*UpdateServicePolicyRequestType)(nil)).Elem()
    +}
    +
    +type UpdateServicePolicyResponse struct {
    +}
    +
    +type UpdateSet struct {
    +	DynamicData
    +
    +	Version   string                 `xml:"version"`
    +	FilterSet []PropertyFilterUpdate `xml:"filterSet,omitempty"`
    +	Truncated *bool                  `xml:"truncated"`
    +}
    +
    +func init() {
    +	t["UpdateSet"] = reflect.TypeOf((*UpdateSet)(nil)).Elem()
    +}
    +
    +type UpdateSoftwareInternetScsiEnabled UpdateSoftwareInternetScsiEnabledRequestType
    +
    +func init() {
    +	t["UpdateSoftwareInternetScsiEnabled"] = reflect.TypeOf((*UpdateSoftwareInternetScsiEnabled)(nil)).Elem()
    +}
    +
    +type UpdateSoftwareInternetScsiEnabledRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Enabled bool                   `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["UpdateSoftwareInternetScsiEnabledRequestType"] = reflect.TypeOf((*UpdateSoftwareInternetScsiEnabledRequestType)(nil)).Elem()
    +}
    +
    +type UpdateSoftwareInternetScsiEnabledResponse struct {
    +}
    +
    +type UpdateSystemResources UpdateSystemResourcesRequestType
    +
    +func init() {
    +	t["UpdateSystemResources"] = reflect.TypeOf((*UpdateSystemResources)(nil)).Elem()
    +}
    +
    +type UpdateSystemResourcesRequestType struct {
    +	This         ManagedObjectReference `xml:"_this"`
    +	ResourceInfo HostSystemResourceInfo `xml:"resourceInfo"`
    +}
    +
    +func init() {
    +	t["UpdateSystemResourcesRequestType"] = reflect.TypeOf((*UpdateSystemResourcesRequestType)(nil)).Elem()
    +}
    +
    +type UpdateSystemResourcesResponse struct {
    +}
    +
    +type UpdateSystemSwapConfiguration UpdateSystemSwapConfigurationRequestType
    +
    +func init() {
    +	t["UpdateSystemSwapConfiguration"] = reflect.TypeOf((*UpdateSystemSwapConfiguration)(nil)).Elem()
    +}
    +
    +type UpdateSystemSwapConfigurationRequestType struct {
    +	This          ManagedObjectReference      `xml:"_this"`
    +	SysSwapConfig HostSystemSwapConfiguration `xml:"sysSwapConfig"`
    +}
    +
    +func init() {
    +	t["UpdateSystemSwapConfigurationRequestType"] = reflect.TypeOf((*UpdateSystemSwapConfigurationRequestType)(nil)).Elem()
    +}
    +
    +type UpdateSystemSwapConfigurationResponse struct {
    +}
    +
    +type UpdateSystemUsers UpdateSystemUsersRequestType
    +
    +func init() {
    +	t["UpdateSystemUsers"] = reflect.TypeOf((*UpdateSystemUsers)(nil)).Elem()
    +}
    +
    +type UpdateSystemUsersRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Users []string               `xml:"users,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateSystemUsersRequestType"] = reflect.TypeOf((*UpdateSystemUsersRequestType)(nil)).Elem()
    +}
    +
    +type UpdateSystemUsersResponse struct {
    +}
    +
    +type UpdateUser UpdateUserRequestType
    +
    +func init() {
    +	t["UpdateUser"] = reflect.TypeOf((*UpdateUser)(nil)).Elem()
    +}
    +
    +type UpdateUserRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	User BaseHostAccountSpec    `xml:"user,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateUserRequestType"] = reflect.TypeOf((*UpdateUserRequestType)(nil)).Elem()
    +}
    +
    +type UpdateUserResponse struct {
    +}
    +
    +type UpdateVAppConfig UpdateVAppConfigRequestType
    +
    +func init() {
    +	t["UpdateVAppConfig"] = reflect.TypeOf((*UpdateVAppConfig)(nil)).Elem()
    +}
    +
    +type UpdateVAppConfigRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Spec VAppConfigSpec         `xml:"spec"`
    +}
    +
    +func init() {
    +	t["UpdateVAppConfigRequestType"] = reflect.TypeOf((*UpdateVAppConfigRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVAppConfigResponse struct {
    +}
    +
    +type UpdateVStorageInfrastructureObjectPolicyRequestType struct {
    +	This ManagedObjectReference             `xml:"_this"`
    +	Spec VslmInfrastructureObjectPolicySpec `xml:"spec"`
    +}
    +
    +func init() {
    +	t["UpdateVStorageInfrastructureObjectPolicyRequestType"] = reflect.TypeOf((*UpdateVStorageInfrastructureObjectPolicyRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVStorageInfrastructureObjectPolicy_Task UpdateVStorageInfrastructureObjectPolicyRequestType
    +
    +func init() {
    +	t["UpdateVStorageInfrastructureObjectPolicy_Task"] = reflect.TypeOf((*UpdateVStorageInfrastructureObjectPolicy_Task)(nil)).Elem()
    +}
    +
    +type UpdateVStorageInfrastructureObjectPolicy_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdateVStorageObjectPolicyRequestType struct {
    +	This      ManagedObjectReference          `xml:"_this"`
    +	Id        ID                              `xml:"id"`
    +	Datastore ManagedObjectReference          `xml:"datastore"`
    +	Profile   []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["UpdateVStorageObjectPolicyRequestType"] = reflect.TypeOf((*UpdateVStorageObjectPolicyRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVStorageObjectPolicy_Task UpdateVStorageObjectPolicyRequestType
    +
    +func init() {
    +	t["UpdateVStorageObjectPolicy_Task"] = reflect.TypeOf((*UpdateVStorageObjectPolicy_Task)(nil)).Elem()
    +}
    +
    +type UpdateVStorageObjectPolicy_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdateVVolVirtualMachineFilesRequestType struct {
    +	This         ManagedObjectReference               `xml:"_this"`
    +	FailoverPair []DatastoreVVolContainerFailoverPair `xml:"failoverPair,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateVVolVirtualMachineFilesRequestType"] = reflect.TypeOf((*UpdateVVolVirtualMachineFilesRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVVolVirtualMachineFiles_Task UpdateVVolVirtualMachineFilesRequestType
    +
    +func init() {
    +	t["UpdateVVolVirtualMachineFiles_Task"] = reflect.TypeOf((*UpdateVVolVirtualMachineFiles_Task)(nil)).Elem()
    +}
    +
    +type UpdateVVolVirtualMachineFiles_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdateVirtualMachineFilesRequestType struct {
    +	This                      ManagedObjectReference            `xml:"_this"`
    +	MountPathDatastoreMapping []DatastoreMountPathDatastorePair `xml:"mountPathDatastoreMapping"`
    +}
    +
    +func init() {
    +	t["UpdateVirtualMachineFilesRequestType"] = reflect.TypeOf((*UpdateVirtualMachineFilesRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVirtualMachineFilesResult struct {
    +	DynamicData
    +
    +	FailedVmFile []UpdateVirtualMachineFilesResultFailedVmFileInfo `xml:"failedVmFile,omitempty"`
    +}
    +
    +func init() {
    +	t["UpdateVirtualMachineFilesResult"] = reflect.TypeOf((*UpdateVirtualMachineFilesResult)(nil)).Elem()
    +}
    +
    +type UpdateVirtualMachineFilesResultFailedVmFileInfo struct {
    +	DynamicData
    +
    +	VmFile string               `xml:"vmFile"`
    +	Fault  LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["UpdateVirtualMachineFilesResultFailedVmFileInfo"] = reflect.TypeOf((*UpdateVirtualMachineFilesResultFailedVmFileInfo)(nil)).Elem()
    +}
    +
    +type UpdateVirtualMachineFiles_Task UpdateVirtualMachineFilesRequestType
    +
    +func init() {
    +	t["UpdateVirtualMachineFiles_Task"] = reflect.TypeOf((*UpdateVirtualMachineFiles_Task)(nil)).Elem()
    +}
    +
    +type UpdateVirtualMachineFiles_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdateVirtualNic UpdateVirtualNicRequestType
    +
    +func init() {
    +	t["UpdateVirtualNic"] = reflect.TypeOf((*UpdateVirtualNic)(nil)).Elem()
    +}
    +
    +type UpdateVirtualNicRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Device string                 `xml:"device"`
    +	Nic    HostVirtualNicSpec     `xml:"nic"`
    +}
    +
    +func init() {
    +	t["UpdateVirtualNicRequestType"] = reflect.TypeOf((*UpdateVirtualNicRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVirtualNicResponse struct {
    +}
    +
    +type UpdateVirtualSwitch UpdateVirtualSwitchRequestType
    +
    +func init() {
    +	t["UpdateVirtualSwitch"] = reflect.TypeOf((*UpdateVirtualSwitch)(nil)).Elem()
    +}
    +
    +type UpdateVirtualSwitchRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	VswitchName string                 `xml:"vswitchName"`
    +	Spec        HostVirtualSwitchSpec  `xml:"spec"`
    +}
    +
    +func init() {
    +	t["UpdateVirtualSwitchRequestType"] = reflect.TypeOf((*UpdateVirtualSwitchRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVirtualSwitchResponse struct {
    +}
    +
    +type UpdateVmfsUnmapBandwidth UpdateVmfsUnmapBandwidthRequestType
    +
    +func init() {
    +	t["UpdateVmfsUnmapBandwidth"] = reflect.TypeOf((*UpdateVmfsUnmapBandwidth)(nil)).Elem()
    +}
    +
    +type UpdateVmfsUnmapBandwidthRequestType struct {
    +	This               ManagedObjectReference `xml:"_this"`
    +	VmfsUuid           string                 `xml:"vmfsUuid"`
    +	UnmapBandwidthSpec VmfsUnmapBandwidthSpec `xml:"unmapBandwidthSpec"`
    +}
    +
    +func init() {
    +	t["UpdateVmfsUnmapBandwidthRequestType"] = reflect.TypeOf((*UpdateVmfsUnmapBandwidthRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVmfsUnmapBandwidthResponse struct {
    +}
    +
    +type UpdateVmfsUnmapPriority UpdateVmfsUnmapPriorityRequestType
    +
    +func init() {
    +	t["UpdateVmfsUnmapPriority"] = reflect.TypeOf((*UpdateVmfsUnmapPriority)(nil)).Elem()
    +}
    +
    +type UpdateVmfsUnmapPriorityRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	VmfsUuid      string                 `xml:"vmfsUuid"`
    +	UnmapPriority string                 `xml:"unmapPriority"`
    +}
    +
    +func init() {
    +	t["UpdateVmfsUnmapPriorityRequestType"] = reflect.TypeOf((*UpdateVmfsUnmapPriorityRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVmfsUnmapPriorityResponse struct {
    +}
    +
    +type UpdateVsanRequestType struct {
    +	This   ManagedObjectReference `xml:"_this"`
    +	Config VsanHostConfigInfo     `xml:"config"`
    +}
    +
    +func init() {
    +	t["UpdateVsanRequestType"] = reflect.TypeOf((*UpdateVsanRequestType)(nil)).Elem()
    +}
    +
    +type UpdateVsan_Task UpdateVsanRequestType
    +
    +func init() {
    +	t["UpdateVsan_Task"] = reflect.TypeOf((*UpdateVsan_Task)(nil)).Elem()
    +}
    +
    +type UpdateVsan_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpdatedAgentBeingRestartedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["UpdatedAgentBeingRestartedEvent"] = reflect.TypeOf((*UpdatedAgentBeingRestartedEvent)(nil)).Elem()
    +}
    +
    +type UpgradeEvent struct {
    +	Event
    +
    +	Message string `xml:"message"`
    +}
    +
    +func init() {
    +	t["UpgradeEvent"] = reflect.TypeOf((*UpgradeEvent)(nil)).Elem()
    +}
    +
    +type UpgradeIoFilterRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	FilterId string                 `xml:"filterId"`
    +	CompRes  ManagedObjectReference `xml:"compRes"`
    +	VibUrl   string                 `xml:"vibUrl"`
    +}
    +
    +func init() {
    +	t["UpgradeIoFilterRequestType"] = reflect.TypeOf((*UpgradeIoFilterRequestType)(nil)).Elem()
    +}
    +
    +type UpgradeIoFilter_Task UpgradeIoFilterRequestType
    +
    +func init() {
    +	t["UpgradeIoFilter_Task"] = reflect.TypeOf((*UpgradeIoFilter_Task)(nil)).Elem()
    +}
    +
    +type UpgradeIoFilter_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpgradeToolsRequestType struct {
    +	This             ManagedObjectReference `xml:"_this"`
    +	InstallerOptions string                 `xml:"installerOptions,omitempty"`
    +}
    +
    +func init() {
    +	t["UpgradeToolsRequestType"] = reflect.TypeOf((*UpgradeToolsRequestType)(nil)).Elem()
    +}
    +
    +type UpgradeTools_Task UpgradeToolsRequestType
    +
    +func init() {
    +	t["UpgradeTools_Task"] = reflect.TypeOf((*UpgradeTools_Task)(nil)).Elem()
    +}
    +
    +type UpgradeTools_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpgradeVMRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Version string                 `xml:"version,omitempty"`
    +}
    +
    +func init() {
    +	t["UpgradeVMRequestType"] = reflect.TypeOf((*UpgradeVMRequestType)(nil)).Elem()
    +}
    +
    +type UpgradeVM_Task UpgradeVMRequestType
    +
    +func init() {
    +	t["UpgradeVM_Task"] = reflect.TypeOf((*UpgradeVM_Task)(nil)).Elem()
    +}
    +
    +type UpgradeVM_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type UpgradeVmLayout UpgradeVmLayoutRequestType
    +
    +func init() {
    +	t["UpgradeVmLayout"] = reflect.TypeOf((*UpgradeVmLayout)(nil)).Elem()
    +}
    +
    +type UpgradeVmLayoutRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["UpgradeVmLayoutRequestType"] = reflect.TypeOf((*UpgradeVmLayoutRequestType)(nil)).Elem()
    +}
    +
    +type UpgradeVmLayoutResponse struct {
    +}
    +
    +type UpgradeVmfs UpgradeVmfsRequestType
    +
    +func init() {
    +	t["UpgradeVmfs"] = reflect.TypeOf((*UpgradeVmfs)(nil)).Elem()
    +}
    +
    +type UpgradeVmfsRequestType struct {
    +	This     ManagedObjectReference `xml:"_this"`
    +	VmfsPath string                 `xml:"vmfsPath"`
    +}
    +
    +func init() {
    +	t["UpgradeVmfsRequestType"] = reflect.TypeOf((*UpgradeVmfsRequestType)(nil)).Elem()
    +}
    +
    +type UpgradeVmfsResponse struct {
    +}
    +
    +type UpgradeVsanObjects UpgradeVsanObjectsRequestType
    +
    +func init() {
    +	t["UpgradeVsanObjects"] = reflect.TypeOf((*UpgradeVsanObjects)(nil)).Elem()
    +}
    +
    +type UpgradeVsanObjectsRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	Uuids      []string               `xml:"uuids"`
    +	NewVersion int32                  `xml:"newVersion"`
    +}
    +
    +func init() {
    +	t["UpgradeVsanObjectsRequestType"] = reflect.TypeOf((*UpgradeVsanObjectsRequestType)(nil)).Elem()
    +}
    +
    +type UpgradeVsanObjectsResponse struct {
    +	Returnval []HostVsanInternalSystemVsanObjectOperationResult `xml:"returnval,omitempty"`
    +}
    +
    +type UplinkPortMtuNotSupportEvent struct {
    +	DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["UplinkPortMtuNotSupportEvent"] = reflect.TypeOf((*UplinkPortMtuNotSupportEvent)(nil)).Elem()
    +}
    +
    +type UplinkPortMtuSupportEvent struct {
    +	DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["UplinkPortMtuSupportEvent"] = reflect.TypeOf((*UplinkPortMtuSupportEvent)(nil)).Elem()
    +}
    +
    +type UplinkPortVlanTrunkedEvent struct {
    +	DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["UplinkPortVlanTrunkedEvent"] = reflect.TypeOf((*UplinkPortVlanTrunkedEvent)(nil)).Elem()
    +}
    +
    +type UplinkPortVlanUntrunkedEvent struct {
    +	DvsHealthStatusChangeEvent
    +}
    +
    +func init() {
    +	t["UplinkPortVlanUntrunkedEvent"] = reflect.TypeOf((*UplinkPortVlanUntrunkedEvent)(nil)).Elem()
    +}
    +
    +type UploadClientCert UploadClientCertRequestType
    +
    +func init() {
    +	t["UploadClientCert"] = reflect.TypeOf((*UploadClientCert)(nil)).Elem()
    +}
    +
    +type UploadClientCertRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Cluster     KeyProviderId          `xml:"cluster"`
    +	Certificate string                 `xml:"certificate"`
    +	PrivateKey  string                 `xml:"privateKey"`
    +}
    +
    +func init() {
    +	t["UploadClientCertRequestType"] = reflect.TypeOf((*UploadClientCertRequestType)(nil)).Elem()
    +}
    +
    +type UploadClientCertResponse struct {
    +}
    +
    +type UploadKmipServerCert UploadKmipServerCertRequestType
    +
    +func init() {
    +	t["UploadKmipServerCert"] = reflect.TypeOf((*UploadKmipServerCert)(nil)).Elem()
    +}
    +
    +type UploadKmipServerCertRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Cluster     KeyProviderId          `xml:"cluster"`
    +	Certificate string                 `xml:"certificate"`
    +}
    +
    +func init() {
    +	t["UploadKmipServerCertRequestType"] = reflect.TypeOf((*UploadKmipServerCertRequestType)(nil)).Elem()
    +}
    +
    +type UploadKmipServerCertResponse struct {
    +}
    +
    +type UsbScanCodeSpec struct {
    +	DynamicData
    +
    +	KeyEvents []UsbScanCodeSpecKeyEvent `xml:"keyEvents"`
    +}
    +
    +func init() {
    +	t["UsbScanCodeSpec"] = reflect.TypeOf((*UsbScanCodeSpec)(nil)).Elem()
    +}
    +
    +type UsbScanCodeSpecKeyEvent struct {
    +	DynamicData
    +
    +	UsbHidCode int32                        `xml:"usbHidCode"`
    +	Modifiers  *UsbScanCodeSpecModifierType `xml:"modifiers,omitempty"`
    +}
    +
    +func init() {
    +	t["UsbScanCodeSpecKeyEvent"] = reflect.TypeOf((*UsbScanCodeSpecKeyEvent)(nil)).Elem()
    +}
    +
    +type UsbScanCodeSpecModifierType struct {
    +	DynamicData
    +
    +	LeftControl  *bool `xml:"leftControl"`
    +	LeftShift    *bool `xml:"leftShift"`
    +	LeftAlt      *bool `xml:"leftAlt"`
    +	LeftGui      *bool `xml:"leftGui"`
    +	RightControl *bool `xml:"rightControl"`
    +	RightShift   *bool `xml:"rightShift"`
    +	RightAlt     *bool `xml:"rightAlt"`
    +	RightGui     *bool `xml:"rightGui"`
    +}
    +
    +func init() {
    +	t["UsbScanCodeSpecModifierType"] = reflect.TypeOf((*UsbScanCodeSpecModifierType)(nil)).Elem()
    +}
    +
    +type UserAssignedToGroup struct {
    +	HostEvent
    +
    +	UserLogin string `xml:"userLogin"`
    +	Group     string `xml:"group"`
    +}
    +
    +func init() {
    +	t["UserAssignedToGroup"] = reflect.TypeOf((*UserAssignedToGroup)(nil)).Elem()
    +}
    +
    +type UserGroupProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["UserGroupProfile"] = reflect.TypeOf((*UserGroupProfile)(nil)).Elem()
    +}
    +
    +type UserInputRequiredParameterMetadata struct {
    +	ProfilePolicyOptionMetadata
    +
    +	UserInputParameter []ProfileParameterMetadata `xml:"userInputParameter,omitempty"`
    +}
    +
    +func init() {
    +	t["UserInputRequiredParameterMetadata"] = reflect.TypeOf((*UserInputRequiredParameterMetadata)(nil)).Elem()
    +}
    +
    +type UserLoginSessionEvent struct {
    +	SessionEvent
    +
    +	IpAddress string `xml:"ipAddress"`
    +	UserAgent string `xml:"userAgent,omitempty"`
    +	Locale    string `xml:"locale"`
    +	SessionId string `xml:"sessionId"`
    +}
    +
    +func init() {
    +	t["UserLoginSessionEvent"] = reflect.TypeOf((*UserLoginSessionEvent)(nil)).Elem()
    +}
    +
    +type UserLogoutSessionEvent struct {
    +	SessionEvent
    +
    +	IpAddress string     `xml:"ipAddress,omitempty"`
    +	UserAgent string     `xml:"userAgent,omitempty"`
    +	CallCount int64      `xml:"callCount,omitempty"`
    +	SessionId string     `xml:"sessionId,omitempty"`
    +	LoginTime *time.Time `xml:"loginTime"`
    +}
    +
    +func init() {
    +	t["UserLogoutSessionEvent"] = reflect.TypeOf((*UserLogoutSessionEvent)(nil)).Elem()
    +}
    +
    +type UserNotFound struct {
    +	VimFault
    +
    +	Principal  string `xml:"principal"`
    +	Unresolved bool   `xml:"unresolved"`
    +}
    +
    +func init() {
    +	t["UserNotFound"] = reflect.TypeOf((*UserNotFound)(nil)).Elem()
    +}
    +
    +type UserNotFoundFault UserNotFound
    +
    +func init() {
    +	t["UserNotFoundFault"] = reflect.TypeOf((*UserNotFoundFault)(nil)).Elem()
    +}
    +
    +type UserPasswordChanged struct {
    +	HostEvent
    +
    +	UserLogin string `xml:"userLogin"`
    +}
    +
    +func init() {
    +	t["UserPasswordChanged"] = reflect.TypeOf((*UserPasswordChanged)(nil)).Elem()
    +}
    +
    +type UserPrivilegeResult struct {
    +	DynamicData
    +
    +	Entity     ManagedObjectReference `xml:"entity"`
    +	Privileges []string               `xml:"privileges,omitempty"`
    +}
    +
    +func init() {
    +	t["UserPrivilegeResult"] = reflect.TypeOf((*UserPrivilegeResult)(nil)).Elem()
    +}
    +
    +type UserProfile struct {
    +	ApplyProfile
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["UserProfile"] = reflect.TypeOf((*UserProfile)(nil)).Elem()
    +}
    +
    +type UserSearchResult struct {
    +	DynamicData
    +
    +	Principal string `xml:"principal"`
    +	FullName  string `xml:"fullName,omitempty"`
    +	Group     bool   `xml:"group"`
    +}
    +
    +func init() {
    +	t["UserSearchResult"] = reflect.TypeOf((*UserSearchResult)(nil)).Elem()
    +}
    +
    +type UserSession struct {
    +	DynamicData
    +
    +	Key              string    `xml:"key"`
    +	UserName         string    `xml:"userName"`
    +	FullName         string    `xml:"fullName"`
    +	LoginTime        time.Time `xml:"loginTime"`
    +	LastActiveTime   time.Time `xml:"lastActiveTime"`
    +	Locale           string    `xml:"locale"`
    +	MessageLocale    string    `xml:"messageLocale"`
    +	ExtensionSession *bool     `xml:"extensionSession"`
    +	IpAddress        string    `xml:"ipAddress,omitempty"`
    +	UserAgent        string    `xml:"userAgent,omitempty"`
    +	CallCount        int64     `xml:"callCount,omitempty"`
    +}
    +
    +func init() {
    +	t["UserSession"] = reflect.TypeOf((*UserSession)(nil)).Elem()
    +}
    +
    +type UserUnassignedFromGroup struct {
    +	HostEvent
    +
    +	UserLogin string `xml:"userLogin"`
    +	Group     string `xml:"group"`
    +}
    +
    +func init() {
    +	t["UserUnassignedFromGroup"] = reflect.TypeOf((*UserUnassignedFromGroup)(nil)).Elem()
    +}
    +
    +type UserUpgradeEvent struct {
    +	UpgradeEvent
    +}
    +
    +func init() {
    +	t["UserUpgradeEvent"] = reflect.TypeOf((*UserUpgradeEvent)(nil)).Elem()
    +}
    +
    +type VASAStorageArray struct {
    +	DynamicData
    +
    +	Name     string `xml:"name"`
    +	Uuid     string `xml:"uuid"`
    +	VendorId string `xml:"vendorId"`
    +	ModelId  string `xml:"modelId"`
    +}
    +
    +func init() {
    +	t["VASAStorageArray"] = reflect.TypeOf((*VASAStorageArray)(nil)).Elem()
    +}
    +
    +type VAppCloneSpec struct {
    +	DynamicData
    +
    +	Location        ManagedObjectReference            `xml:"location"`
    +	Host            *ManagedObjectReference           `xml:"host,omitempty"`
    +	ResourceSpec    *ResourceConfigSpec               `xml:"resourceSpec,omitempty"`
    +	VmFolder        *ManagedObjectReference           `xml:"vmFolder,omitempty"`
    +	NetworkMapping  []VAppCloneSpecNetworkMappingPair `xml:"networkMapping,omitempty"`
    +	Property        []KeyValue                        `xml:"property,omitempty"`
    +	ResourceMapping []VAppCloneSpecResourceMap        `xml:"resourceMapping,omitempty"`
    +	Provisioning    string                            `xml:"provisioning,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppCloneSpec"] = reflect.TypeOf((*VAppCloneSpec)(nil)).Elem()
    +}
    +
    +type VAppCloneSpecNetworkMappingPair struct {
    +	DynamicData
    +
    +	Source      ManagedObjectReference `xml:"source"`
    +	Destination ManagedObjectReference `xml:"destination"`
    +}
    +
    +func init() {
    +	t["VAppCloneSpecNetworkMappingPair"] = reflect.TypeOf((*VAppCloneSpecNetworkMappingPair)(nil)).Elem()
    +}
    +
    +type VAppCloneSpecResourceMap struct {
    +	DynamicData
    +
    +	Source       ManagedObjectReference  `xml:"source"`
    +	Parent       *ManagedObjectReference `xml:"parent,omitempty"`
    +	ResourceSpec *ResourceConfigSpec     `xml:"resourceSpec,omitempty"`
    +	Location     *ManagedObjectReference `xml:"location,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppCloneSpecResourceMap"] = reflect.TypeOf((*VAppCloneSpecResourceMap)(nil)).Elem()
    +}
    +
    +type VAppConfigFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["VAppConfigFault"] = reflect.TypeOf((*VAppConfigFault)(nil)).Elem()
    +}
    +
    +type VAppConfigFaultFault BaseVAppConfigFault
    +
    +func init() {
    +	t["VAppConfigFaultFault"] = reflect.TypeOf((*VAppConfigFaultFault)(nil)).Elem()
    +}
    +
    +type VAppConfigInfo struct {
    +	VmConfigInfo
    +
    +	EntityConfig []VAppEntityConfigInfo `xml:"entityConfig,omitempty"`
    +	Annotation   string                 `xml:"annotation"`
    +	InstanceUuid string                 `xml:"instanceUuid,omitempty"`
    +	ManagedBy    *ManagedByInfo         `xml:"managedBy,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppConfigInfo"] = reflect.TypeOf((*VAppConfigInfo)(nil)).Elem()
    +}
    +
    +type VAppConfigSpec struct {
    +	VmConfigSpec
    +
    +	EntityConfig []VAppEntityConfigInfo `xml:"entityConfig,omitempty"`
    +	Annotation   string                 `xml:"annotation,omitempty"`
    +	InstanceUuid string                 `xml:"instanceUuid,omitempty"`
    +	ManagedBy    *ManagedByInfo         `xml:"managedBy,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppConfigSpec"] = reflect.TypeOf((*VAppConfigSpec)(nil)).Elem()
    +}
    +
    +type VAppEntityConfigInfo struct {
    +	DynamicData
    +
    +	Key               *ManagedObjectReference `xml:"key,omitempty"`
    +	Tag               string                  `xml:"tag,omitempty"`
    +	StartOrder        int32                   `xml:"startOrder,omitempty"`
    +	StartDelay        int32                   `xml:"startDelay,omitempty"`
    +	WaitingForGuest   *bool                   `xml:"waitingForGuest"`
    +	StartAction       string                  `xml:"startAction,omitempty"`
    +	StopDelay         int32                   `xml:"stopDelay,omitempty"`
    +	StopAction        string                  `xml:"stopAction,omitempty"`
    +	DestroyWithParent *bool                   `xml:"destroyWithParent"`
    +}
    +
    +func init() {
    +	t["VAppEntityConfigInfo"] = reflect.TypeOf((*VAppEntityConfigInfo)(nil)).Elem()
    +}
    +
    +type VAppIPAssignmentInfo struct {
    +	DynamicData
    +
    +	SupportedAllocationScheme []string `xml:"supportedAllocationScheme,omitempty"`
    +	IpAllocationPolicy        string   `xml:"ipAllocationPolicy,omitempty"`
    +	SupportedIpProtocol       []string `xml:"supportedIpProtocol,omitempty"`
    +	IpProtocol                string   `xml:"ipProtocol,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppIPAssignmentInfo"] = reflect.TypeOf((*VAppIPAssignmentInfo)(nil)).Elem()
    +}
    +
    +type VAppNotRunning struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["VAppNotRunning"] = reflect.TypeOf((*VAppNotRunning)(nil)).Elem()
    +}
    +
    +type VAppNotRunningFault VAppNotRunning
    +
    +func init() {
    +	t["VAppNotRunningFault"] = reflect.TypeOf((*VAppNotRunningFault)(nil)).Elem()
    +}
    +
    +type VAppOperationInProgress struct {
    +	RuntimeFault
    +}
    +
    +func init() {
    +	t["VAppOperationInProgress"] = reflect.TypeOf((*VAppOperationInProgress)(nil)).Elem()
    +}
    +
    +type VAppOperationInProgressFault VAppOperationInProgress
    +
    +func init() {
    +	t["VAppOperationInProgressFault"] = reflect.TypeOf((*VAppOperationInProgressFault)(nil)).Elem()
    +}
    +
    +type VAppOvfSectionInfo struct {
    +	DynamicData
    +
    +	Key             int32  `xml:"key,omitempty"`
    +	Namespace       string `xml:"namespace,omitempty"`
    +	Type            string `xml:"type,omitempty"`
    +	AtEnvelopeLevel *bool  `xml:"atEnvelopeLevel"`
    +	Contents        string `xml:"contents,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppOvfSectionInfo"] = reflect.TypeOf((*VAppOvfSectionInfo)(nil)).Elem()
    +}
    +
    +type VAppOvfSectionSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *VAppOvfSectionInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppOvfSectionSpec"] = reflect.TypeOf((*VAppOvfSectionSpec)(nil)).Elem()
    +}
    +
    +type VAppProductInfo struct {
    +	DynamicData
    +
    +	Key         int32  `xml:"key"`
    +	ClassId     string `xml:"classId,omitempty"`
    +	InstanceId  string `xml:"instanceId,omitempty"`
    +	Name        string `xml:"name,omitempty"`
    +	Vendor      string `xml:"vendor,omitempty"`
    +	Version     string `xml:"version,omitempty"`
    +	FullVersion string `xml:"fullVersion,omitempty"`
    +	VendorUrl   string `xml:"vendorUrl,omitempty"`
    +	ProductUrl  string `xml:"productUrl,omitempty"`
    +	AppUrl      string `xml:"appUrl,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppProductInfo"] = reflect.TypeOf((*VAppProductInfo)(nil)).Elem()
    +}
    +
    +type VAppProductSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *VAppProductInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppProductSpec"] = reflect.TypeOf((*VAppProductSpec)(nil)).Elem()
    +}
    +
    +type VAppPropertyFault struct {
    +	VmConfigFault
    +
    +	Id       string `xml:"id"`
    +	Category string `xml:"category"`
    +	Label    string `xml:"label"`
    +	Type     string `xml:"type"`
    +	Value    string `xml:"value"`
    +}
    +
    +func init() {
    +	t["VAppPropertyFault"] = reflect.TypeOf((*VAppPropertyFault)(nil)).Elem()
    +}
    +
    +type VAppPropertyFaultFault BaseVAppPropertyFault
    +
    +func init() {
    +	t["VAppPropertyFaultFault"] = reflect.TypeOf((*VAppPropertyFaultFault)(nil)).Elem()
    +}
    +
    +type VAppPropertyInfo struct {
    +	DynamicData
    +
    +	Key              int32  `xml:"key"`
    +	ClassId          string `xml:"classId,omitempty"`
    +	InstanceId       string `xml:"instanceId,omitempty"`
    +	Id               string `xml:"id,omitempty"`
    +	Category         string `xml:"category,omitempty"`
    +	Label            string `xml:"label,omitempty"`
    +	Type             string `xml:"type,omitempty"`
    +	TypeReference    string `xml:"typeReference,omitempty"`
    +	UserConfigurable *bool  `xml:"userConfigurable"`
    +	DefaultValue     string `xml:"defaultValue,omitempty"`
    +	Value            string `xml:"value,omitempty"`
    +	Description      string `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppPropertyInfo"] = reflect.TypeOf((*VAppPropertyInfo)(nil)).Elem()
    +}
    +
    +type VAppPropertySpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *VAppPropertyInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["VAppPropertySpec"] = reflect.TypeOf((*VAppPropertySpec)(nil)).Elem()
    +}
    +
    +type VAppTaskInProgress struct {
    +	TaskInProgress
    +}
    +
    +func init() {
    +	t["VAppTaskInProgress"] = reflect.TypeOf((*VAppTaskInProgress)(nil)).Elem()
    +}
    +
    +type VAppTaskInProgressFault VAppTaskInProgress
    +
    +func init() {
    +	t["VAppTaskInProgressFault"] = reflect.TypeOf((*VAppTaskInProgressFault)(nil)).Elem()
    +}
    +
    +type VFlashCacheHotConfigNotSupported struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["VFlashCacheHotConfigNotSupported"] = reflect.TypeOf((*VFlashCacheHotConfigNotSupported)(nil)).Elem()
    +}
    +
    +type VFlashCacheHotConfigNotSupportedFault VFlashCacheHotConfigNotSupported
    +
    +func init() {
    +	t["VFlashCacheHotConfigNotSupportedFault"] = reflect.TypeOf((*VFlashCacheHotConfigNotSupportedFault)(nil)).Elem()
    +}
    +
    +type VFlashModuleNotSupported struct {
    +	VmConfigFault
    +
    +	VmName     string `xml:"vmName"`
    +	ModuleName string `xml:"moduleName"`
    +	Reason     string `xml:"reason"`
    +	HostName   string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["VFlashModuleNotSupported"] = reflect.TypeOf((*VFlashModuleNotSupported)(nil)).Elem()
    +}
    +
    +type VFlashModuleNotSupportedFault VFlashModuleNotSupported
    +
    +func init() {
    +	t["VFlashModuleNotSupportedFault"] = reflect.TypeOf((*VFlashModuleNotSupportedFault)(nil)).Elem()
    +}
    +
    +type VFlashModuleVersionIncompatible struct {
    +	VimFault
    +
    +	ModuleName             string `xml:"moduleName"`
    +	VmRequestModuleVersion string `xml:"vmRequestModuleVersion"`
    +	HostMinSupportedVerson string `xml:"hostMinSupportedVerson"`
    +	HostModuleVersion      string `xml:"hostModuleVersion"`
    +}
    +
    +func init() {
    +	t["VFlashModuleVersionIncompatible"] = reflect.TypeOf((*VFlashModuleVersionIncompatible)(nil)).Elem()
    +}
    +
    +type VFlashModuleVersionIncompatibleFault VFlashModuleVersionIncompatible
    +
    +func init() {
    +	t["VFlashModuleVersionIncompatibleFault"] = reflect.TypeOf((*VFlashModuleVersionIncompatibleFault)(nil)).Elem()
    +}
    +
    +type VMFSDatastoreCreatedEvent struct {
    +	HostEvent
    +
    +	Datastore    DatastoreEventArgument `xml:"datastore"`
    +	DatastoreUrl string                 `xml:"datastoreUrl,omitempty"`
    +}
    +
    +func init() {
    +	t["VMFSDatastoreCreatedEvent"] = reflect.TypeOf((*VMFSDatastoreCreatedEvent)(nil)).Elem()
    +}
    +
    +type VMFSDatastoreExpandedEvent struct {
    +	HostEvent
    +
    +	Datastore DatastoreEventArgument `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["VMFSDatastoreExpandedEvent"] = reflect.TypeOf((*VMFSDatastoreExpandedEvent)(nil)).Elem()
    +}
    +
    +type VMFSDatastoreExtendedEvent struct {
    +	HostEvent
    +
    +	Datastore DatastoreEventArgument `xml:"datastore"`
    +}
    +
    +func init() {
    +	t["VMFSDatastoreExtendedEvent"] = reflect.TypeOf((*VMFSDatastoreExtendedEvent)(nil)).Elem()
    +}
    +
    +type VMINotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["VMINotSupported"] = reflect.TypeOf((*VMINotSupported)(nil)).Elem()
    +}
    +
    +type VMINotSupportedFault VMINotSupported
    +
    +func init() {
    +	t["VMINotSupportedFault"] = reflect.TypeOf((*VMINotSupportedFault)(nil)).Elem()
    +}
    +
    +type VMOnConflictDVPort struct {
    +	CannotAccessNetwork
    +}
    +
    +func init() {
    +	t["VMOnConflictDVPort"] = reflect.TypeOf((*VMOnConflictDVPort)(nil)).Elem()
    +}
    +
    +type VMOnConflictDVPortFault VMOnConflictDVPort
    +
    +func init() {
    +	t["VMOnConflictDVPortFault"] = reflect.TypeOf((*VMOnConflictDVPortFault)(nil)).Elem()
    +}
    +
    +type VMOnVirtualIntranet struct {
    +	CannotAccessNetwork
    +}
    +
    +func init() {
    +	t["VMOnVirtualIntranet"] = reflect.TypeOf((*VMOnVirtualIntranet)(nil)).Elem()
    +}
    +
    +type VMOnVirtualIntranetFault VMOnVirtualIntranet
    +
    +func init() {
    +	t["VMOnVirtualIntranetFault"] = reflect.TypeOf((*VMOnVirtualIntranetFault)(nil)).Elem()
    +}
    +
    +type VMotionAcrossNetworkNotSupported struct {
    +	MigrationFeatureNotSupported
    +}
    +
    +func init() {
    +	t["VMotionAcrossNetworkNotSupported"] = reflect.TypeOf((*VMotionAcrossNetworkNotSupported)(nil)).Elem()
    +}
    +
    +type VMotionAcrossNetworkNotSupportedFault VMotionAcrossNetworkNotSupported
    +
    +func init() {
    +	t["VMotionAcrossNetworkNotSupportedFault"] = reflect.TypeOf((*VMotionAcrossNetworkNotSupportedFault)(nil)).Elem()
    +}
    +
    +type VMotionInterfaceIssue struct {
    +	MigrationFault
    +
    +	AtSourceHost     bool                    `xml:"atSourceHost"`
    +	FailedHost       string                  `xml:"failedHost"`
    +	FailedHostEntity *ManagedObjectReference `xml:"failedHostEntity,omitempty"`
    +}
    +
    +func init() {
    +	t["VMotionInterfaceIssue"] = reflect.TypeOf((*VMotionInterfaceIssue)(nil)).Elem()
    +}
    +
    +type VMotionInterfaceIssueFault BaseVMotionInterfaceIssue
    +
    +func init() {
    +	t["VMotionInterfaceIssueFault"] = reflect.TypeOf((*VMotionInterfaceIssueFault)(nil)).Elem()
    +}
    +
    +type VMotionLicenseExpiredEvent struct {
    +	LicenseEvent
    +}
    +
    +func init() {
    +	t["VMotionLicenseExpiredEvent"] = reflect.TypeOf((*VMotionLicenseExpiredEvent)(nil)).Elem()
    +}
    +
    +type VMotionLinkCapacityLow struct {
    +	VMotionInterfaceIssue
    +
    +	Network string `xml:"network"`
    +}
    +
    +func init() {
    +	t["VMotionLinkCapacityLow"] = reflect.TypeOf((*VMotionLinkCapacityLow)(nil)).Elem()
    +}
    +
    +type VMotionLinkCapacityLowFault VMotionLinkCapacityLow
    +
    +func init() {
    +	t["VMotionLinkCapacityLowFault"] = reflect.TypeOf((*VMotionLinkCapacityLowFault)(nil)).Elem()
    +}
    +
    +type VMotionLinkDown struct {
    +	VMotionInterfaceIssue
    +
    +	Network string `xml:"network"`
    +}
    +
    +func init() {
    +	t["VMotionLinkDown"] = reflect.TypeOf((*VMotionLinkDown)(nil)).Elem()
    +}
    +
    +type VMotionLinkDownFault VMotionLinkDown
    +
    +func init() {
    +	t["VMotionLinkDownFault"] = reflect.TypeOf((*VMotionLinkDownFault)(nil)).Elem()
    +}
    +
    +type VMotionNotConfigured struct {
    +	VMotionInterfaceIssue
    +}
    +
    +func init() {
    +	t["VMotionNotConfigured"] = reflect.TypeOf((*VMotionNotConfigured)(nil)).Elem()
    +}
    +
    +type VMotionNotConfiguredFault VMotionNotConfigured
    +
    +func init() {
    +	t["VMotionNotConfiguredFault"] = reflect.TypeOf((*VMotionNotConfiguredFault)(nil)).Elem()
    +}
    +
    +type VMotionNotLicensed struct {
    +	VMotionInterfaceIssue
    +}
    +
    +func init() {
    +	t["VMotionNotLicensed"] = reflect.TypeOf((*VMotionNotLicensed)(nil)).Elem()
    +}
    +
    +type VMotionNotLicensedFault VMotionNotLicensed
    +
    +func init() {
    +	t["VMotionNotLicensedFault"] = reflect.TypeOf((*VMotionNotLicensedFault)(nil)).Elem()
    +}
    +
    +type VMotionNotSupported struct {
    +	VMotionInterfaceIssue
    +}
    +
    +func init() {
    +	t["VMotionNotSupported"] = reflect.TypeOf((*VMotionNotSupported)(nil)).Elem()
    +}
    +
    +type VMotionNotSupportedFault VMotionNotSupported
    +
    +func init() {
    +	t["VMotionNotSupportedFault"] = reflect.TypeOf((*VMotionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type VMotionProtocolIncompatible struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["VMotionProtocolIncompatible"] = reflect.TypeOf((*VMotionProtocolIncompatible)(nil)).Elem()
    +}
    +
    +type VMotionProtocolIncompatibleFault VMotionProtocolIncompatible
    +
    +func init() {
    +	t["VMotionProtocolIncompatibleFault"] = reflect.TypeOf((*VMotionProtocolIncompatibleFault)(nil)).Elem()
    +}
    +
    +type VMwareDVSConfigInfo struct {
    +	DVSConfigInfo
    +
    +	VspanSession                []VMwareVspanSession         `xml:"vspanSession,omitempty"`
    +	PvlanConfig                 []VMwareDVSPvlanMapEntry     `xml:"pvlanConfig,omitempty"`
    +	MaxMtu                      int32                        `xml:"maxMtu"`
    +	LinkDiscoveryProtocolConfig *LinkDiscoveryProtocolConfig `xml:"linkDiscoveryProtocolConfig,omitempty"`
    +	IpfixConfig                 *VMwareIpfixConfig           `xml:"ipfixConfig,omitempty"`
    +	LacpGroupConfig             []VMwareDvsLacpGroupConfig   `xml:"lacpGroupConfig,omitempty"`
    +	LacpApiVersion              string                       `xml:"lacpApiVersion,omitempty"`
    +	MulticastFilteringMode      string                       `xml:"multicastFilteringMode,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareDVSConfigInfo"] = reflect.TypeOf((*VMwareDVSConfigInfo)(nil)).Elem()
    +}
    +
    +type VMwareDVSConfigSpec struct {
    +	DVSConfigSpec
    +
    +	PvlanConfigSpec             []VMwareDVSPvlanConfigSpec   `xml:"pvlanConfigSpec,omitempty"`
    +	VspanConfigSpec             []VMwareDVSVspanConfigSpec   `xml:"vspanConfigSpec,omitempty"`
    +	MaxMtu                      int32                        `xml:"maxMtu,omitempty"`
    +	LinkDiscoveryProtocolConfig *LinkDiscoveryProtocolConfig `xml:"linkDiscoveryProtocolConfig,omitempty"`
    +	IpfixConfig                 *VMwareIpfixConfig           `xml:"ipfixConfig,omitempty"`
    +	LacpApiVersion              string                       `xml:"lacpApiVersion,omitempty"`
    +	MulticastFilteringMode      string                       `xml:"multicastFilteringMode,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareDVSConfigSpec"] = reflect.TypeOf((*VMwareDVSConfigSpec)(nil)).Elem()
    +}
    +
    +type VMwareDVSFeatureCapability struct {
    +	DVSFeatureCapability
    +
    +	VspanSupported             *bool                     `xml:"vspanSupported"`
    +	LldpSupported              *bool                     `xml:"lldpSupported"`
    +	IpfixSupported             *bool                     `xml:"ipfixSupported"`
    +	IpfixCapability            *VMwareDvsIpfixCapability `xml:"ipfixCapability,omitempty"`
    +	MulticastSnoopingSupported *bool                     `xml:"multicastSnoopingSupported"`
    +	VspanCapability            *VMwareDVSVspanCapability `xml:"vspanCapability,omitempty"`
    +	LacpCapability             *VMwareDvsLacpCapability  `xml:"lacpCapability,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareDVSFeatureCapability"] = reflect.TypeOf((*VMwareDVSFeatureCapability)(nil)).Elem()
    +}
    +
    +type VMwareDVSHealthCheckCapability struct {
    +	DVSHealthCheckCapability
    +
    +	VlanMtuSupported bool `xml:"vlanMtuSupported"`
    +	TeamingSupported bool `xml:"teamingSupported"`
    +}
    +
    +func init() {
    +	t["VMwareDVSHealthCheckCapability"] = reflect.TypeOf((*VMwareDVSHealthCheckCapability)(nil)).Elem()
    +}
    +
    +type VMwareDVSHealthCheckConfig struct {
    +	DVSHealthCheckConfig
    +}
    +
    +func init() {
    +	t["VMwareDVSHealthCheckConfig"] = reflect.TypeOf((*VMwareDVSHealthCheckConfig)(nil)).Elem()
    +}
    +
    +type VMwareDVSMtuHealthCheckResult struct {
    +	HostMemberUplinkHealthCheckResult
    +
    +	MtuMismatch             bool           `xml:"mtuMismatch"`
    +	VlanSupportSwitchMtu    []NumericRange `xml:"vlanSupportSwitchMtu,omitempty"`
    +	VlanNotSupportSwitchMtu []NumericRange `xml:"vlanNotSupportSwitchMtu,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareDVSMtuHealthCheckResult"] = reflect.TypeOf((*VMwareDVSMtuHealthCheckResult)(nil)).Elem()
    +}
    +
    +type VMwareDVSPortSetting struct {
    +	DVPortSetting
    +
    +	Vlan                BaseVmwareDistributedVirtualSwitchVlanSpec `xml:"vlan,omitempty,typeattr"`
    +	QosTag              *IntPolicy                                 `xml:"qosTag,omitempty"`
    +	UplinkTeamingPolicy *VmwareUplinkPortTeamingPolicy             `xml:"uplinkTeamingPolicy,omitempty"`
    +	SecurityPolicy      *DVSSecurityPolicy                         `xml:"securityPolicy,omitempty"`
    +	IpfixEnabled        *BoolPolicy                                `xml:"ipfixEnabled,omitempty"`
    +	TxUplink            *BoolPolicy                                `xml:"txUplink,omitempty"`
    +	LacpPolicy          *VMwareUplinkLacpPolicy                    `xml:"lacpPolicy,omitempty"`
    +	MacManagementPolicy *DVSMacManagementPolicy                    `xml:"macManagementPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareDVSPortSetting"] = reflect.TypeOf((*VMwareDVSPortSetting)(nil)).Elem()
    +}
    +
    +type VMwareDVSPortgroupPolicy struct {
    +	DVPortgroupPolicy
    +
    +	VlanOverrideAllowed           bool  `xml:"vlanOverrideAllowed"`
    +	UplinkTeamingOverrideAllowed  bool  `xml:"uplinkTeamingOverrideAllowed"`
    +	SecurityPolicyOverrideAllowed bool  `xml:"securityPolicyOverrideAllowed"`
    +	IpfixOverrideAllowed          *bool `xml:"ipfixOverrideAllowed"`
    +}
    +
    +func init() {
    +	t["VMwareDVSPortgroupPolicy"] = reflect.TypeOf((*VMwareDVSPortgroupPolicy)(nil)).Elem()
    +}
    +
    +type VMwareDVSPvlanConfigSpec struct {
    +	DynamicData
    +
    +	PvlanEntry VMwareDVSPvlanMapEntry `xml:"pvlanEntry"`
    +	Operation  string                 `xml:"operation"`
    +}
    +
    +func init() {
    +	t["VMwareDVSPvlanConfigSpec"] = reflect.TypeOf((*VMwareDVSPvlanConfigSpec)(nil)).Elem()
    +}
    +
    +type VMwareDVSPvlanMapEntry struct {
    +	DynamicData
    +
    +	PrimaryVlanId   int32  `xml:"primaryVlanId"`
    +	SecondaryVlanId int32  `xml:"secondaryVlanId"`
    +	PvlanType       string `xml:"pvlanType"`
    +}
    +
    +func init() {
    +	t["VMwareDVSPvlanMapEntry"] = reflect.TypeOf((*VMwareDVSPvlanMapEntry)(nil)).Elem()
    +}
    +
    +type VMwareDVSTeamingHealthCheckConfig struct {
    +	VMwareDVSHealthCheckConfig
    +}
    +
    +func init() {
    +	t["VMwareDVSTeamingHealthCheckConfig"] = reflect.TypeOf((*VMwareDVSTeamingHealthCheckConfig)(nil)).Elem()
    +}
    +
    +type VMwareDVSTeamingHealthCheckResult struct {
    +	HostMemberHealthCheckResult
    +
    +	TeamingStatus string `xml:"teamingStatus"`
    +}
    +
    +func init() {
    +	t["VMwareDVSTeamingHealthCheckResult"] = reflect.TypeOf((*VMwareDVSTeamingHealthCheckResult)(nil)).Elem()
    +}
    +
    +type VMwareDVSVlanHealthCheckResult struct {
    +	HostMemberUplinkHealthCheckResult
    +
    +	TrunkedVlan   []NumericRange `xml:"trunkedVlan,omitempty"`
    +	UntrunkedVlan []NumericRange `xml:"untrunkedVlan,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareDVSVlanHealthCheckResult"] = reflect.TypeOf((*VMwareDVSVlanHealthCheckResult)(nil)).Elem()
    +}
    +
    +type VMwareDVSVlanMtuHealthCheckConfig struct {
    +	VMwareDVSHealthCheckConfig
    +}
    +
    +func init() {
    +	t["VMwareDVSVlanMtuHealthCheckConfig"] = reflect.TypeOf((*VMwareDVSVlanMtuHealthCheckConfig)(nil)).Elem()
    +}
    +
    +type VMwareDVSVspanCapability struct {
    +	DynamicData
    +
    +	MixedDestSupported         bool  `xml:"mixedDestSupported"`
    +	DvportSupported            bool  `xml:"dvportSupported"`
    +	RemoteSourceSupported      bool  `xml:"remoteSourceSupported"`
    +	RemoteDestSupported        bool  `xml:"remoteDestSupported"`
    +	EncapRemoteSourceSupported bool  `xml:"encapRemoteSourceSupported"`
    +	ErspanProtocolSupported    *bool `xml:"erspanProtocolSupported"`
    +	MirrorNetstackSupported    *bool `xml:"mirrorNetstackSupported"`
    +}
    +
    +func init() {
    +	t["VMwareDVSVspanCapability"] = reflect.TypeOf((*VMwareDVSVspanCapability)(nil)).Elem()
    +}
    +
    +type VMwareDVSVspanConfigSpec struct {
    +	DynamicData
    +
    +	VspanSession VMwareVspanSession `xml:"vspanSession"`
    +	Operation    string             `xml:"operation"`
    +}
    +
    +func init() {
    +	t["VMwareDVSVspanConfigSpec"] = reflect.TypeOf((*VMwareDVSVspanConfigSpec)(nil)).Elem()
    +}
    +
    +type VMwareDvsIpfixCapability struct {
    +	DynamicData
    +
    +	IpfixSupported               *bool `xml:"ipfixSupported"`
    +	Ipv6ForIpfixSupported        *bool `xml:"ipv6ForIpfixSupported"`
    +	ObservationDomainIdSupported *bool `xml:"observationDomainIdSupported"`
    +}
    +
    +func init() {
    +	t["VMwareDvsIpfixCapability"] = reflect.TypeOf((*VMwareDvsIpfixCapability)(nil)).Elem()
    +}
    +
    +type VMwareDvsLacpCapability struct {
    +	DynamicData
    +
    +	LacpSupported           *bool `xml:"lacpSupported"`
    +	MultiLacpGroupSupported *bool `xml:"multiLacpGroupSupported"`
    +}
    +
    +func init() {
    +	t["VMwareDvsLacpCapability"] = reflect.TypeOf((*VMwareDvsLacpCapability)(nil)).Elem()
    +}
    +
    +type VMwareDvsLacpGroupConfig struct {
    +	DynamicData
    +
    +	Key                  string                   `xml:"key,omitempty"`
    +	Name                 string                   `xml:"name,omitempty"`
    +	Mode                 string                   `xml:"mode,omitempty"`
    +	UplinkNum            int32                    `xml:"uplinkNum,omitempty"`
    +	LoadbalanceAlgorithm string                   `xml:"loadbalanceAlgorithm,omitempty"`
    +	Vlan                 *VMwareDvsLagVlanConfig  `xml:"vlan,omitempty"`
    +	Ipfix                *VMwareDvsLagIpfixConfig `xml:"ipfix,omitempty"`
    +	UplinkName           []string                 `xml:"uplinkName,omitempty"`
    +	UplinkPortKey        []string                 `xml:"uplinkPortKey,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareDvsLacpGroupConfig"] = reflect.TypeOf((*VMwareDvsLacpGroupConfig)(nil)).Elem()
    +}
    +
    +type VMwareDvsLacpGroupSpec struct {
    +	DynamicData
    +
    +	LacpGroupConfig VMwareDvsLacpGroupConfig `xml:"lacpGroupConfig"`
    +	Operation       string                   `xml:"operation"`
    +}
    +
    +func init() {
    +	t["VMwareDvsLacpGroupSpec"] = reflect.TypeOf((*VMwareDvsLacpGroupSpec)(nil)).Elem()
    +}
    +
    +type VMwareDvsLagIpfixConfig struct {
    +	DynamicData
    +
    +	IpfixEnabled *bool `xml:"ipfixEnabled"`
    +}
    +
    +func init() {
    +	t["VMwareDvsLagIpfixConfig"] = reflect.TypeOf((*VMwareDvsLagIpfixConfig)(nil)).Elem()
    +}
    +
    +type VMwareDvsLagVlanConfig struct {
    +	DynamicData
    +
    +	VlanId []NumericRange `xml:"vlanId,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareDvsLagVlanConfig"] = reflect.TypeOf((*VMwareDvsLagVlanConfig)(nil)).Elem()
    +}
    +
    +type VMwareIpfixConfig struct {
    +	DynamicData
    +
    +	CollectorIpAddress  string `xml:"collectorIpAddress,omitempty"`
    +	CollectorPort       int32  `xml:"collectorPort,omitempty"`
    +	ObservationDomainId int64  `xml:"observationDomainId,omitempty"`
    +	ActiveFlowTimeout   int32  `xml:"activeFlowTimeout"`
    +	IdleFlowTimeout     int32  `xml:"idleFlowTimeout"`
    +	SamplingRate        int32  `xml:"samplingRate"`
    +	InternalFlowsOnly   bool   `xml:"internalFlowsOnly"`
    +}
    +
    +func init() {
    +	t["VMwareIpfixConfig"] = reflect.TypeOf((*VMwareIpfixConfig)(nil)).Elem()
    +}
    +
    +type VMwareUplinkLacpPolicy struct {
    +	InheritablePolicy
    +
    +	Enable *BoolPolicy   `xml:"enable,omitempty"`
    +	Mode   *StringPolicy `xml:"mode,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareUplinkLacpPolicy"] = reflect.TypeOf((*VMwareUplinkLacpPolicy)(nil)).Elem()
    +}
    +
    +type VMwareUplinkPortOrderPolicy struct {
    +	InheritablePolicy
    +
    +	ActiveUplinkPort  []string `xml:"activeUplinkPort,omitempty"`
    +	StandbyUplinkPort []string `xml:"standbyUplinkPort,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareUplinkPortOrderPolicy"] = reflect.TypeOf((*VMwareUplinkPortOrderPolicy)(nil)).Elem()
    +}
    +
    +type VMwareVspanPort struct {
    +	DynamicData
    +
    +	PortKey                   []string `xml:"portKey,omitempty"`
    +	UplinkPortName            []string `xml:"uplinkPortName,omitempty"`
    +	WildcardPortConnecteeType []string `xml:"wildcardPortConnecteeType,omitempty"`
    +	Vlans                     []int32  `xml:"vlans,omitempty"`
    +	IpAddress                 []string `xml:"ipAddress,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareVspanPort"] = reflect.TypeOf((*VMwareVspanPort)(nil)).Elem()
    +}
    +
    +type VMwareVspanSession struct {
    +	DynamicData
    +
    +	Key                   string           `xml:"key,omitempty"`
    +	Name                  string           `xml:"name,omitempty"`
    +	Description           string           `xml:"description,omitempty"`
    +	Enabled               bool             `xml:"enabled"`
    +	SourcePortTransmitted *VMwareVspanPort `xml:"sourcePortTransmitted,omitempty"`
    +	SourcePortReceived    *VMwareVspanPort `xml:"sourcePortReceived,omitempty"`
    +	DestinationPort       *VMwareVspanPort `xml:"destinationPort,omitempty"`
    +	EncapsulationVlanId   int32            `xml:"encapsulationVlanId,omitempty"`
    +	StripOriginalVlan     bool             `xml:"stripOriginalVlan"`
    +	MirroredPacketLength  int32            `xml:"mirroredPacketLength,omitempty"`
    +	NormalTrafficAllowed  bool             `xml:"normalTrafficAllowed"`
    +	SessionType           string           `xml:"sessionType,omitempty"`
    +	SamplingRate          int32            `xml:"samplingRate,omitempty"`
    +	EncapType             string           `xml:"encapType,omitempty"`
    +	ErspanId              int32            `xml:"erspanId,omitempty"`
    +	ErspanCOS             int32            `xml:"erspanCOS,omitempty"`
    +	ErspanGraNanosec      *bool            `xml:"erspanGraNanosec"`
    +	Netstack              string           `xml:"netstack,omitempty"`
    +}
    +
    +func init() {
    +	t["VMwareVspanSession"] = reflect.TypeOf((*VMwareVspanSession)(nil)).Elem()
    +}
    +
    +type VStorageObject struct {
    +	DynamicData
    +
    +	Config VStorageObjectConfigInfo `xml:"config"`
    +}
    +
    +func init() {
    +	t["VStorageObject"] = reflect.TypeOf((*VStorageObject)(nil)).Elem()
    +}
    +
    +type VStorageObjectAssociations struct {
    +	DynamicData
    +
    +	Id                 ID                                             `xml:"id"`
    +	VmDiskAssociations []VStorageObjectAssociationsVmDiskAssociations `xml:"vmDiskAssociations,omitempty"`
    +	Fault              *LocalizedMethodFault                          `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["VStorageObjectAssociations"] = reflect.TypeOf((*VStorageObjectAssociations)(nil)).Elem()
    +}
    +
    +type VStorageObjectAssociationsVmDiskAssociations struct {
    +	DynamicData
    +
    +	VmId    string `xml:"vmId"`
    +	DiskKey int32  `xml:"diskKey"`
    +}
    +
    +func init() {
    +	t["VStorageObjectAssociationsVmDiskAssociations"] = reflect.TypeOf((*VStorageObjectAssociationsVmDiskAssociations)(nil)).Elem()
    +}
    +
    +type VStorageObjectConfigInfo struct {
    +	BaseConfigInfo
    +
    +	CapacityInMB    int64    `xml:"capacityInMB"`
    +	ConsumptionType []string `xml:"consumptionType,omitempty"`
    +	ConsumerId      []ID     `xml:"consumerId,omitempty"`
    +}
    +
    +func init() {
    +	t["VStorageObjectConfigInfo"] = reflect.TypeOf((*VStorageObjectConfigInfo)(nil)).Elem()
    +}
    +
    +type VStorageObjectCreateSnapshotRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	Id          ID                     `xml:"id"`
    +	Datastore   ManagedObjectReference `xml:"datastore"`
    +	Description string                 `xml:"description"`
    +}
    +
    +func init() {
    +	t["VStorageObjectCreateSnapshotRequestType"] = reflect.TypeOf((*VStorageObjectCreateSnapshotRequestType)(nil)).Elem()
    +}
    +
    +type VStorageObjectCreateSnapshot_Task VStorageObjectCreateSnapshotRequestType
    +
    +func init() {
    +	t["VStorageObjectCreateSnapshot_Task"] = reflect.TypeOf((*VStorageObjectCreateSnapshot_Task)(nil)).Elem()
    +}
    +
    +type VStorageObjectCreateSnapshot_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type VStorageObjectSnapshotInfo struct {
    +	DynamicData
    +
    +	Snapshots []VStorageObjectSnapshotInfoVStorageObjectSnapshot `xml:"snapshots,omitempty"`
    +}
    +
    +func init() {
    +	t["VStorageObjectSnapshotInfo"] = reflect.TypeOf((*VStorageObjectSnapshotInfo)(nil)).Elem()
    +}
    +
    +type VStorageObjectSnapshotInfoVStorageObjectSnapshot struct {
    +	DynamicData
    +
    +	Id              *ID       `xml:"id,omitempty"`
    +	BackingObjectId string    `xml:"backingObjectId,omitempty"`
    +	CreateTime      time.Time `xml:"createTime"`
    +	Description     string    `xml:"description"`
    +}
    +
    +func init() {
    +	t["VStorageObjectSnapshotInfoVStorageObjectSnapshot"] = reflect.TypeOf((*VStorageObjectSnapshotInfoVStorageObjectSnapshot)(nil)).Elem()
    +}
    +
    +type VStorageObjectStateInfo struct {
    +	DynamicData
    +
    +	Tentative *bool `xml:"tentative"`
    +}
    +
    +func init() {
    +	t["VStorageObjectStateInfo"] = reflect.TypeOf((*VStorageObjectStateInfo)(nil)).Elem()
    +}
    +
    +type VVolHostPE struct {
    +	DynamicData
    +
    +	Key              ManagedObjectReference `xml:"key"`
    +	ProtocolEndpoint []HostProtocolEndpoint `xml:"protocolEndpoint"`
    +}
    +
    +func init() {
    +	t["VVolHostPE"] = reflect.TypeOf((*VVolHostPE)(nil)).Elem()
    +}
    +
    +type VVolVmConfigFileUpdateResult struct {
    +	DynamicData
    +
    +	SucceededVmConfigFile []KeyValue                                           `xml:"succeededVmConfigFile,omitempty"`
    +	FailedVmConfigFile    []VVolVmConfigFileUpdateResultFailedVmConfigFileInfo `xml:"failedVmConfigFile,omitempty"`
    +}
    +
    +func init() {
    +	t["VVolVmConfigFileUpdateResult"] = reflect.TypeOf((*VVolVmConfigFileUpdateResult)(nil)).Elem()
    +}
    +
    +type VVolVmConfigFileUpdateResultFailedVmConfigFileInfo struct {
    +	DynamicData
    +
    +	TargetConfigVVolId string               `xml:"targetConfigVVolId"`
    +	Fault              LocalizedMethodFault `xml:"fault"`
    +}
    +
    +func init() {
    +	t["VVolVmConfigFileUpdateResultFailedVmConfigFileInfo"] = reflect.TypeOf((*VVolVmConfigFileUpdateResultFailedVmConfigFileInfo)(nil)).Elem()
    +}
    +
    +type ValidateCredentialsInGuest ValidateCredentialsInGuestRequestType
    +
    +func init() {
    +	t["ValidateCredentialsInGuest"] = reflect.TypeOf((*ValidateCredentialsInGuest)(nil)).Elem()
    +}
    +
    +type ValidateCredentialsInGuestRequestType struct {
    +	This ManagedObjectReference  `xml:"_this"`
    +	Vm   ManagedObjectReference  `xml:"vm"`
    +	Auth BaseGuestAuthentication `xml:"auth,typeattr"`
    +}
    +
    +func init() {
    +	t["ValidateCredentialsInGuestRequestType"] = reflect.TypeOf((*ValidateCredentialsInGuestRequestType)(nil)).Elem()
    +}
    +
    +type ValidateCredentialsInGuestResponse struct {
    +}
    +
    +type ValidateHost ValidateHostRequestType
    +
    +func init() {
    +	t["ValidateHost"] = reflect.TypeOf((*ValidateHost)(nil)).Elem()
    +}
    +
    +type ValidateHostProfileCompositionRequestType struct {
    +	This                   ManagedObjectReference   `xml:"_this"`
    +	Source                 ManagedObjectReference   `xml:"source"`
    +	Targets                []ManagedObjectReference `xml:"targets,omitempty"`
    +	ToBeMerged             *HostApplyProfile        `xml:"toBeMerged,omitempty"`
    +	ToReplaceWith          *HostApplyProfile        `xml:"toReplaceWith,omitempty"`
    +	ToBeDeleted            *HostApplyProfile        `xml:"toBeDeleted,omitempty"`
    +	EnableStatusToBeCopied *HostApplyProfile        `xml:"enableStatusToBeCopied,omitempty"`
    +	ErrorOnly              *bool                    `xml:"errorOnly"`
    +}
    +
    +func init() {
    +	t["ValidateHostProfileCompositionRequestType"] = reflect.TypeOf((*ValidateHostProfileCompositionRequestType)(nil)).Elem()
    +}
    +
    +type ValidateHostProfileComposition_Task ValidateHostProfileCompositionRequestType
    +
    +func init() {
    +	t["ValidateHostProfileComposition_Task"] = reflect.TypeOf((*ValidateHostProfileComposition_Task)(nil)).Elem()
    +}
    +
    +type ValidateHostProfileComposition_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ValidateHostRequestType struct {
    +	This          ManagedObjectReference `xml:"_this"`
    +	OvfDescriptor string                 `xml:"ovfDescriptor"`
    +	Host          ManagedObjectReference `xml:"host"`
    +	Vhp           OvfValidateHostParams  `xml:"vhp"`
    +}
    +
    +func init() {
    +	t["ValidateHostRequestType"] = reflect.TypeOf((*ValidateHostRequestType)(nil)).Elem()
    +}
    +
    +type ValidateHostResponse struct {
    +	Returnval OvfValidateHostResult `xml:"returnval"`
    +}
    +
    +type ValidateMigration ValidateMigrationRequestType
    +
    +func init() {
    +	t["ValidateMigration"] = reflect.TypeOf((*ValidateMigration)(nil)).Elem()
    +}
    +
    +type ValidateMigrationRequestType struct {
    +	This     ManagedObjectReference   `xml:"_this"`
    +	Vm       []ManagedObjectReference `xml:"vm"`
    +	State    VirtualMachinePowerState `xml:"state,omitempty"`
    +	TestType []string                 `xml:"testType,omitempty"`
    +	Pool     *ManagedObjectReference  `xml:"pool,omitempty"`
    +	Host     *ManagedObjectReference  `xml:"host,omitempty"`
    +}
    +
    +func init() {
    +	t["ValidateMigrationRequestType"] = reflect.TypeOf((*ValidateMigrationRequestType)(nil)).Elem()
    +}
    +
    +type ValidateMigrationResponse struct {
    +	Returnval []BaseEvent `xml:"returnval,omitempty,typeattr"`
    +}
    +
    +type ValidateStoragePodConfig ValidateStoragePodConfigRequestType
    +
    +func init() {
    +	t["ValidateStoragePodConfig"] = reflect.TypeOf((*ValidateStoragePodConfig)(nil)).Elem()
    +}
    +
    +type ValidateStoragePodConfigRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Pod  ManagedObjectReference `xml:"pod"`
    +	Spec StorageDrsConfigSpec   `xml:"spec"`
    +}
    +
    +func init() {
    +	t["ValidateStoragePodConfigRequestType"] = reflect.TypeOf((*ValidateStoragePodConfigRequestType)(nil)).Elem()
    +}
    +
    +type ValidateStoragePodConfigResponse struct {
    +	Returnval *LocalizedMethodFault `xml:"returnval,omitempty"`
    +}
    +
    +type VasaProviderContainerSpec struct {
    +	DynamicData
    +
    +	VasaProviderInfo []VimVasaProviderInfo `xml:"vasaProviderInfo,omitempty"`
    +	ScId             string                `xml:"scId"`
    +	Deleted          bool                  `xml:"deleted"`
    +}
    +
    +func init() {
    +	t["VasaProviderContainerSpec"] = reflect.TypeOf((*VasaProviderContainerSpec)(nil)).Elem()
    +}
    +
    +type VcAgentUninstallFailedEvent struct {
    +	HostEvent
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["VcAgentUninstallFailedEvent"] = reflect.TypeOf((*VcAgentUninstallFailedEvent)(nil)).Elem()
    +}
    +
    +type VcAgentUninstalledEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["VcAgentUninstalledEvent"] = reflect.TypeOf((*VcAgentUninstalledEvent)(nil)).Elem()
    +}
    +
    +type VcAgentUpgradeFailedEvent struct {
    +	HostEvent
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["VcAgentUpgradeFailedEvent"] = reflect.TypeOf((*VcAgentUpgradeFailedEvent)(nil)).Elem()
    +}
    +
    +type VcAgentUpgradedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["VcAgentUpgradedEvent"] = reflect.TypeOf((*VcAgentUpgradedEvent)(nil)).Elem()
    +}
    +
    +type VchaClusterConfigInfo struct {
    +	DynamicData
    +
    +	FailoverNodeInfo1 *FailoverNodeInfo `xml:"failoverNodeInfo1,omitempty"`
    +	FailoverNodeInfo2 *FailoverNodeInfo `xml:"failoverNodeInfo2,omitempty"`
    +	WitnessNodeInfo   *WitnessNodeInfo  `xml:"witnessNodeInfo,omitempty"`
    +	State             string            `xml:"state"`
    +}
    +
    +func init() {
    +	t["VchaClusterConfigInfo"] = reflect.TypeOf((*VchaClusterConfigInfo)(nil)).Elem()
    +}
    +
    +type VchaClusterConfigSpec struct {
    +	DynamicData
    +
    +	PassiveIp string `xml:"passiveIp"`
    +	WitnessIp string `xml:"witnessIp"`
    +}
    +
    +func init() {
    +	t["VchaClusterConfigSpec"] = reflect.TypeOf((*VchaClusterConfigSpec)(nil)).Elem()
    +}
    +
    +type VchaClusterDeploymentSpec struct {
    +	DynamicData
    +
    +	PassiveDeploymentSpec PassiveNodeDeploymentSpec `xml:"passiveDeploymentSpec"`
    +	WitnessDeploymentSpec BaseNodeDeploymentSpec    `xml:"witnessDeploymentSpec,typeattr"`
    +	ActiveVcSpec          SourceNodeSpec            `xml:"activeVcSpec"`
    +	ActiveVcNetworkConfig *ClusterNetworkConfigSpec `xml:"activeVcNetworkConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["VchaClusterDeploymentSpec"] = reflect.TypeOf((*VchaClusterDeploymentSpec)(nil)).Elem()
    +}
    +
    +type VchaClusterHealth struct {
    +	DynamicData
    +
    +	RuntimeInfo           VchaClusterRuntimeInfo `xml:"runtimeInfo"`
    +	HealthMessages        []LocalizableMessage   `xml:"healthMessages,omitempty"`
    +	AdditionalInformation []LocalizableMessage   `xml:"additionalInformation,omitempty"`
    +}
    +
    +func init() {
    +	t["VchaClusterHealth"] = reflect.TypeOf((*VchaClusterHealth)(nil)).Elem()
    +}
    +
    +type VchaClusterNetworkSpec struct {
    +	DynamicData
    +
    +	WitnessNetworkSpec BaseNodeNetworkSpec    `xml:"witnessNetworkSpec,typeattr"`
    +	PassiveNetworkSpec PassiveNodeNetworkSpec `xml:"passiveNetworkSpec"`
    +}
    +
    +func init() {
    +	t["VchaClusterNetworkSpec"] = reflect.TypeOf((*VchaClusterNetworkSpec)(nil)).Elem()
    +}
    +
    +type VchaClusterRuntimeInfo struct {
    +	DynamicData
    +
    +	ClusterState string                `xml:"clusterState"`
    +	NodeInfo     []VchaNodeRuntimeInfo `xml:"nodeInfo,omitempty"`
    +	ClusterMode  string                `xml:"clusterMode"`
    +}
    +
    +func init() {
    +	t["VchaClusterRuntimeInfo"] = reflect.TypeOf((*VchaClusterRuntimeInfo)(nil)).Elem()
    +}
    +
    +type VchaNodeRuntimeInfo struct {
    +	DynamicData
    +
    +	NodeState string `xml:"nodeState"`
    +	NodeRole  string `xml:"nodeRole"`
    +	NodeIp    string `xml:"nodeIp"`
    +}
    +
    +func init() {
    +	t["VchaNodeRuntimeInfo"] = reflect.TypeOf((*VchaNodeRuntimeInfo)(nil)).Elem()
    +}
    +
    +type VimAccountPasswordChangedEvent struct {
    +	HostEvent
    +}
    +
    +func init() {
    +	t["VimAccountPasswordChangedEvent"] = reflect.TypeOf((*VimAccountPasswordChangedEvent)(nil)).Elem()
    +}
    +
    +type VimFault struct {
    +	MethodFault
    +}
    +
    +func init() {
    +	t["VimFault"] = reflect.TypeOf((*VimFault)(nil)).Elem()
    +}
    +
    +type VimFaultFault BaseVimFault
    +
    +func init() {
    +	t["VimFaultFault"] = reflect.TypeOf((*VimFaultFault)(nil)).Elem()
    +}
    +
    +type VimVasaProvider struct {
    +	DynamicData
    +
    +	Uid                   string `xml:"uid,omitempty"`
    +	Url                   string `xml:"url"`
    +	Name                  string `xml:"name,omitempty"`
    +	SelfSignedCertificate string `xml:"selfSignedCertificate,omitempty"`
    +}
    +
    +func init() {
    +	t["VimVasaProvider"] = reflect.TypeOf((*VimVasaProvider)(nil)).Elem()
    +}
    +
    +type VimVasaProviderInfo struct {
    +	DynamicData
    +
    +	Provider   VimVasaProvider                `xml:"provider"`
    +	ArrayState []VimVasaProviderStatePerArray `xml:"arrayState,omitempty"`
    +}
    +
    +func init() {
    +	t["VimVasaProviderInfo"] = reflect.TypeOf((*VimVasaProviderInfo)(nil)).Elem()
    +}
    +
    +type VimVasaProviderStatePerArray struct {
    +	DynamicData
    +
    +	Priority int32  `xml:"priority"`
    +	ArrayId  string `xml:"arrayId"`
    +	Active   bool   `xml:"active"`
    +}
    +
    +func init() {
    +	t["VimVasaProviderStatePerArray"] = reflect.TypeOf((*VimVasaProviderStatePerArray)(nil)).Elem()
    +}
    +
    +type VirtualAHCIController struct {
    +	VirtualSATAController
    +}
    +
    +func init() {
    +	t["VirtualAHCIController"] = reflect.TypeOf((*VirtualAHCIController)(nil)).Elem()
    +}
    +
    +type VirtualAHCIControllerOption struct {
    +	VirtualSATAControllerOption
    +}
    +
    +func init() {
    +	t["VirtualAHCIControllerOption"] = reflect.TypeOf((*VirtualAHCIControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualAppImportSpec struct {
    +	ImportSpec
    +
    +	Name             string             `xml:"name"`
    +	VAppConfigSpec   VAppConfigSpec     `xml:"vAppConfigSpec"`
    +	ResourcePoolSpec ResourceConfigSpec `xml:"resourcePoolSpec"`
    +	Child            []BaseImportSpec   `xml:"child,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VirtualAppImportSpec"] = reflect.TypeOf((*VirtualAppImportSpec)(nil)).Elem()
    +}
    +
    +type VirtualAppLinkInfo struct {
    +	DynamicData
    +
    +	Key               ManagedObjectReference `xml:"key"`
    +	DestroyWithParent *bool                  `xml:"destroyWithParent"`
    +}
    +
    +func init() {
    +	t["VirtualAppLinkInfo"] = reflect.TypeOf((*VirtualAppLinkInfo)(nil)).Elem()
    +}
    +
    +type VirtualAppSummary struct {
    +	ResourcePoolSummary
    +
    +	Product             *VAppProductInfo    `xml:"product,omitempty"`
    +	VAppState           VirtualAppVAppState `xml:"vAppState,omitempty"`
    +	Suspended           *bool               `xml:"suspended"`
    +	InstallBootRequired *bool               `xml:"installBootRequired"`
    +	InstanceUuid        string              `xml:"instanceUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualAppSummary"] = reflect.TypeOf((*VirtualAppSummary)(nil)).Elem()
    +}
    +
    +type VirtualBusLogicController struct {
    +	VirtualSCSIController
    +}
    +
    +func init() {
    +	t["VirtualBusLogicController"] = reflect.TypeOf((*VirtualBusLogicController)(nil)).Elem()
    +}
    +
    +type VirtualBusLogicControllerOption struct {
    +	VirtualSCSIControllerOption
    +}
    +
    +func init() {
    +	t["VirtualBusLogicControllerOption"] = reflect.TypeOf((*VirtualBusLogicControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualCdrom struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualCdrom"] = reflect.TypeOf((*VirtualCdrom)(nil)).Elem()
    +}
    +
    +type VirtualCdromAtapiBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualCdromAtapiBackingInfo"] = reflect.TypeOf((*VirtualCdromAtapiBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualCdromAtapiBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualCdromAtapiBackingOption"] = reflect.TypeOf((*VirtualCdromAtapiBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualCdromIsoBackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualCdromIsoBackingInfo"] = reflect.TypeOf((*VirtualCdromIsoBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualCdromIsoBackingOption struct {
    +	VirtualDeviceFileBackingOption
    +}
    +
    +func init() {
    +	t["VirtualCdromIsoBackingOption"] = reflect.TypeOf((*VirtualCdromIsoBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualCdromOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualCdromOption"] = reflect.TypeOf((*VirtualCdromOption)(nil)).Elem()
    +}
    +
    +type VirtualCdromPassthroughBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +
    +	Exclusive bool `xml:"exclusive"`
    +}
    +
    +func init() {
    +	t["VirtualCdromPassthroughBackingInfo"] = reflect.TypeOf((*VirtualCdromPassthroughBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualCdromPassthroughBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +
    +	Exclusive BoolOption `xml:"exclusive"`
    +}
    +
    +func init() {
    +	t["VirtualCdromPassthroughBackingOption"] = reflect.TypeOf((*VirtualCdromPassthroughBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualCdromRemoteAtapiBackingInfo struct {
    +	VirtualDeviceRemoteDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualCdromRemoteAtapiBackingInfo"] = reflect.TypeOf((*VirtualCdromRemoteAtapiBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualCdromRemoteAtapiBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualCdromRemoteAtapiBackingOption"] = reflect.TypeOf((*VirtualCdromRemoteAtapiBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualCdromRemotePassthroughBackingInfo struct {
    +	VirtualDeviceRemoteDeviceBackingInfo
    +
    +	Exclusive bool `xml:"exclusive"`
    +}
    +
    +func init() {
    +	t["VirtualCdromRemotePassthroughBackingInfo"] = reflect.TypeOf((*VirtualCdromRemotePassthroughBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualCdromRemotePassthroughBackingOption struct {
    +	VirtualDeviceRemoteDeviceBackingOption
    +
    +	Exclusive BoolOption `xml:"exclusive"`
    +}
    +
    +func init() {
    +	t["VirtualCdromRemotePassthroughBackingOption"] = reflect.TypeOf((*VirtualCdromRemotePassthroughBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualController struct {
    +	VirtualDevice
    +
    +	BusNumber int32   `xml:"busNumber"`
    +	Device    []int32 `xml:"device,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualController"] = reflect.TypeOf((*VirtualController)(nil)).Elem()
    +}
    +
    +type VirtualControllerOption struct {
    +	VirtualDeviceOption
    +
    +	Devices         IntOption `xml:"devices"`
    +	SupportedDevice []string  `xml:"supportedDevice,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualControllerOption"] = reflect.TypeOf((*VirtualControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualDevice struct {
    +	DynamicData
    +
    +	Key           int32                        `xml:"key"`
    +	DeviceInfo    BaseDescription              `xml:"deviceInfo,omitempty,typeattr"`
    +	Backing       BaseVirtualDeviceBackingInfo `xml:"backing,omitempty,typeattr"`
    +	Connectable   *VirtualDeviceConnectInfo    `xml:"connectable,omitempty"`
    +	SlotInfo      BaseVirtualDeviceBusSlotInfo `xml:"slotInfo,omitempty,typeattr"`
    +	ControllerKey int32                        `xml:"controllerKey,omitempty"`
    +	UnitNumber    *int32                       `xml:"unitNumber"`
    +}
    +
    +func init() {
    +	t["VirtualDevice"] = reflect.TypeOf((*VirtualDevice)(nil)).Elem()
    +}
    +
    +type VirtualDeviceBackingInfo struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["VirtualDeviceBackingInfo"] = reflect.TypeOf((*VirtualDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDeviceBackingOption struct {
    +	DynamicData
    +
    +	Type string `xml:"type"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceBackingOption"] = reflect.TypeOf((*VirtualDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDeviceBusSlotInfo struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["VirtualDeviceBusSlotInfo"] = reflect.TypeOf((*VirtualDeviceBusSlotInfo)(nil)).Elem()
    +}
    +
    +type VirtualDeviceBusSlotOption struct {
    +	DynamicData
    +
    +	Type string `xml:"type"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceBusSlotOption"] = reflect.TypeOf((*VirtualDeviceBusSlotOption)(nil)).Elem()
    +}
    +
    +type VirtualDeviceConfigSpec struct {
    +	DynamicData
    +
    +	Operation     VirtualDeviceConfigSpecOperation     `xml:"operation,omitempty"`
    +	FileOperation VirtualDeviceConfigSpecFileOperation `xml:"fileOperation,omitempty"`
    +	Device        BaseVirtualDevice                    `xml:"device,typeattr"`
    +	Profile       []BaseVirtualMachineProfileSpec      `xml:"profile,omitempty,typeattr"`
    +	Backing       *VirtualDeviceConfigSpecBackingSpec  `xml:"backing,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceConfigSpec"] = reflect.TypeOf((*VirtualDeviceConfigSpec)(nil)).Elem()
    +}
    +
    +type VirtualDeviceConfigSpecBackingSpec struct {
    +	DynamicData
    +
    +	Parent *VirtualDeviceConfigSpecBackingSpec `xml:"parent,omitempty"`
    +	Crypto BaseCryptoSpec                      `xml:"crypto,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceConfigSpecBackingSpec"] = reflect.TypeOf((*VirtualDeviceConfigSpecBackingSpec)(nil)).Elem()
    +}
    +
    +type VirtualDeviceConnectInfo struct {
    +	DynamicData
    +
    +	MigrateConnect    string `xml:"migrateConnect,omitempty"`
    +	StartConnected    bool   `xml:"startConnected"`
    +	AllowGuestControl bool   `xml:"allowGuestControl"`
    +	Connected         bool   `xml:"connected"`
    +	Status            string `xml:"status,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceConnectInfo"] = reflect.TypeOf((*VirtualDeviceConnectInfo)(nil)).Elem()
    +}
    +
    +type VirtualDeviceConnectOption struct {
    +	DynamicData
    +
    +	StartConnected    BoolOption `xml:"startConnected"`
    +	AllowGuestControl BoolOption `xml:"allowGuestControl"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceConnectOption"] = reflect.TypeOf((*VirtualDeviceConnectOption)(nil)).Elem()
    +}
    +
    +type VirtualDeviceDeviceBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +
    +	DeviceName    string `xml:"deviceName"`
    +	UseAutoDetect *bool  `xml:"useAutoDetect"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceDeviceBackingInfo"] = reflect.TypeOf((*VirtualDeviceDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDeviceDeviceBackingOption struct {
    +	VirtualDeviceBackingOption
    +
    +	AutoDetectAvailable BoolOption `xml:"autoDetectAvailable"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceDeviceBackingOption"] = reflect.TypeOf((*VirtualDeviceDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDeviceFileBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +
    +	FileName        string                  `xml:"fileName"`
    +	Datastore       *ManagedObjectReference `xml:"datastore,omitempty"`
    +	BackingObjectId string                  `xml:"backingObjectId,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceFileBackingInfo"] = reflect.TypeOf((*VirtualDeviceFileBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDeviceFileBackingOption struct {
    +	VirtualDeviceBackingOption
    +
    +	FileNameExtensions *ChoiceOption `xml:"fileNameExtensions,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceFileBackingOption"] = reflect.TypeOf((*VirtualDeviceFileBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDeviceOption struct {
    +	DynamicData
    +
    +	Type                      string                           `xml:"type"`
    +	ConnectOption             *VirtualDeviceConnectOption      `xml:"connectOption,omitempty"`
    +	BusSlotOption             *VirtualDeviceBusSlotOption      `xml:"busSlotOption,omitempty"`
    +	ControllerType            string                           `xml:"controllerType,omitempty"`
    +	AutoAssignController      *BoolOption                      `xml:"autoAssignController,omitempty"`
    +	BackingOption             []BaseVirtualDeviceBackingOption `xml:"backingOption,omitempty,typeattr"`
    +	DefaultBackingOptionIndex int32                            `xml:"defaultBackingOptionIndex,omitempty"`
    +	LicensingLimit            []string                         `xml:"licensingLimit,omitempty"`
    +	Deprecated                bool                             `xml:"deprecated"`
    +	PlugAndPlay               bool                             `xml:"plugAndPlay"`
    +	HotRemoveSupported        *bool                            `xml:"hotRemoveSupported"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceOption"] = reflect.TypeOf((*VirtualDeviceOption)(nil)).Elem()
    +}
    +
    +type VirtualDevicePciBusSlotInfo struct {
    +	VirtualDeviceBusSlotInfo
    +
    +	PciSlotNumber int32 `xml:"pciSlotNumber"`
    +}
    +
    +func init() {
    +	t["VirtualDevicePciBusSlotInfo"] = reflect.TypeOf((*VirtualDevicePciBusSlotInfo)(nil)).Elem()
    +}
    +
    +type VirtualDevicePipeBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +
    +	PipeName string `xml:"pipeName"`
    +}
    +
    +func init() {
    +	t["VirtualDevicePipeBackingInfo"] = reflect.TypeOf((*VirtualDevicePipeBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDevicePipeBackingOption struct {
    +	VirtualDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualDevicePipeBackingOption"] = reflect.TypeOf((*VirtualDevicePipeBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDeviceRemoteDeviceBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +
    +	DeviceName    string `xml:"deviceName"`
    +	UseAutoDetect *bool  `xml:"useAutoDetect"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceRemoteDeviceBackingInfo"] = reflect.TypeOf((*VirtualDeviceRemoteDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDeviceRemoteDeviceBackingOption struct {
    +	VirtualDeviceBackingOption
    +
    +	AutoDetectAvailable BoolOption `xml:"autoDetectAvailable"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceRemoteDeviceBackingOption"] = reflect.TypeOf((*VirtualDeviceRemoteDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDeviceURIBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +
    +	ServiceURI string `xml:"serviceURI"`
    +	Direction  string `xml:"direction"`
    +	ProxyURI   string `xml:"proxyURI,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceURIBackingInfo"] = reflect.TypeOf((*VirtualDeviceURIBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDeviceURIBackingOption struct {
    +	VirtualDeviceBackingOption
    +
    +	Directions ChoiceOption `xml:"directions"`
    +}
    +
    +func init() {
    +	t["VirtualDeviceURIBackingOption"] = reflect.TypeOf((*VirtualDeviceURIBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDisk struct {
    +	VirtualDevice
    +
    +	CapacityInKB               int64                             `xml:"capacityInKB"`
    +	CapacityInBytes            int64                             `xml:"capacityInBytes,omitempty"`
    +	Shares                     *SharesInfo                       `xml:"shares,omitempty"`
    +	StorageIOAllocation        *StorageIOAllocationInfo          `xml:"storageIOAllocation,omitempty"`
    +	DiskObjectId               string                            `xml:"diskObjectId,omitempty"`
    +	VFlashCacheConfigInfo      *VirtualDiskVFlashCacheConfigInfo `xml:"vFlashCacheConfigInfo,omitempty"`
    +	Iofilter                   []string                          `xml:"iofilter,omitempty"`
    +	VDiskId                    *ID                               `xml:"vDiskId,omitempty"`
    +	NativeUnmanagedLinkedClone *bool                             `xml:"nativeUnmanagedLinkedClone"`
    +}
    +
    +func init() {
    +	t["VirtualDisk"] = reflect.TypeOf((*VirtualDisk)(nil)).Elem()
    +}
    +
    +type VirtualDiskAntiAffinityRuleSpec struct {
    +	ClusterRuleInfo
    +
    +	DiskId []int32 `xml:"diskId"`
    +}
    +
    +func init() {
    +	t["VirtualDiskAntiAffinityRuleSpec"] = reflect.TypeOf((*VirtualDiskAntiAffinityRuleSpec)(nil)).Elem()
    +}
    +
    +type VirtualDiskBlocksNotFullyProvisioned struct {
    +	DeviceBackingNotSupported
    +}
    +
    +func init() {
    +	t["VirtualDiskBlocksNotFullyProvisioned"] = reflect.TypeOf((*VirtualDiskBlocksNotFullyProvisioned)(nil)).Elem()
    +}
    +
    +type VirtualDiskBlocksNotFullyProvisionedFault VirtualDiskBlocksNotFullyProvisioned
    +
    +func init() {
    +	t["VirtualDiskBlocksNotFullyProvisionedFault"] = reflect.TypeOf((*VirtualDiskBlocksNotFullyProvisionedFault)(nil)).Elem()
    +}
    +
    +type VirtualDiskConfigSpec struct {
    +	VirtualDeviceConfigSpec
    +
    +	DiskMoveType string `xml:"diskMoveType,omitempty"`
    +	MigrateCache *bool  `xml:"migrateCache"`
    +}
    +
    +func init() {
    +	t["VirtualDiskConfigSpec"] = reflect.TypeOf((*VirtualDiskConfigSpec)(nil)).Elem()
    +}
    +
    +type VirtualDiskDeltaDiskFormatsSupported struct {
    +	DynamicData
    +
    +	DatastoreType   string       `xml:"datastoreType"`
    +	DeltaDiskFormat ChoiceOption `xml:"deltaDiskFormat"`
    +}
    +
    +func init() {
    +	t["VirtualDiskDeltaDiskFormatsSupported"] = reflect.TypeOf((*VirtualDiskDeltaDiskFormatsSupported)(nil)).Elem()
    +}
    +
    +type VirtualDiskFlatVer1BackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +
    +	DiskMode     string                          `xml:"diskMode"`
    +	Split        *bool                           `xml:"split"`
    +	WriteThrough *bool                           `xml:"writeThrough"`
    +	ContentId    string                          `xml:"contentId,omitempty"`
    +	Parent       *VirtualDiskFlatVer1BackingInfo `xml:"parent,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskFlatVer1BackingInfo"] = reflect.TypeOf((*VirtualDiskFlatVer1BackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskFlatVer1BackingOption struct {
    +	VirtualDeviceFileBackingOption
    +
    +	DiskMode     ChoiceOption `xml:"diskMode"`
    +	Split        BoolOption   `xml:"split"`
    +	WriteThrough BoolOption   `xml:"writeThrough"`
    +	Growable     bool         `xml:"growable"`
    +}
    +
    +func init() {
    +	t["VirtualDiskFlatVer1BackingOption"] = reflect.TypeOf((*VirtualDiskFlatVer1BackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskFlatVer2BackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +
    +	DiskMode               string                          `xml:"diskMode"`
    +	Split                  *bool                           `xml:"split"`
    +	WriteThrough           *bool                           `xml:"writeThrough"`
    +	ThinProvisioned        *bool                           `xml:"thinProvisioned"`
    +	EagerlyScrub           *bool                           `xml:"eagerlyScrub"`
    +	Uuid                   string                          `xml:"uuid,omitempty"`
    +	ContentId              string                          `xml:"contentId,omitempty"`
    +	ChangeId               string                          `xml:"changeId,omitempty"`
    +	Parent                 *VirtualDiskFlatVer2BackingInfo `xml:"parent,omitempty"`
    +	DeltaDiskFormat        string                          `xml:"deltaDiskFormat,omitempty"`
    +	DigestEnabled          *bool                           `xml:"digestEnabled"`
    +	DeltaGrainSize         int32                           `xml:"deltaGrainSize,omitempty"`
    +	DeltaDiskFormatVariant string                          `xml:"deltaDiskFormatVariant,omitempty"`
    +	Sharing                string                          `xml:"sharing,omitempty"`
    +	KeyId                  *CryptoKeyId                    `xml:"keyId,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskFlatVer2BackingInfo"] = reflect.TypeOf((*VirtualDiskFlatVer2BackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskFlatVer2BackingOption struct {
    +	VirtualDeviceFileBackingOption
    +
    +	DiskMode                  ChoiceOption                           `xml:"diskMode"`
    +	Split                     BoolOption                             `xml:"split"`
    +	WriteThrough              BoolOption                             `xml:"writeThrough"`
    +	Growable                  bool                                   `xml:"growable"`
    +	HotGrowable               bool                                   `xml:"hotGrowable"`
    +	Uuid                      bool                                   `xml:"uuid"`
    +	ThinProvisioned           *BoolOption                            `xml:"thinProvisioned,omitempty"`
    +	EagerlyScrub              *BoolOption                            `xml:"eagerlyScrub,omitempty"`
    +	DeltaDiskFormat           *ChoiceOption                          `xml:"deltaDiskFormat,omitempty"`
    +	DeltaDiskFormatsSupported []VirtualDiskDeltaDiskFormatsSupported `xml:"deltaDiskFormatsSupported,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskFlatVer2BackingOption"] = reflect.TypeOf((*VirtualDiskFlatVer2BackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskId struct {
    +	DynamicData
    +
    +	Vm     ManagedObjectReference `xml:"vm"`
    +	DiskId int32                  `xml:"diskId"`
    +}
    +
    +func init() {
    +	t["VirtualDiskId"] = reflect.TypeOf((*VirtualDiskId)(nil)).Elem()
    +}
    +
    +type VirtualDiskLocalPMemBackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +
    +	DiskMode   string `xml:"diskMode"`
    +	Uuid       string `xml:"uuid,omitempty"`
    +	VolumeUUID string `xml:"volumeUUID,omitempty"`
    +	ContentId  string `xml:"contentId,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskLocalPMemBackingInfo"] = reflect.TypeOf((*VirtualDiskLocalPMemBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskLocalPMemBackingOption struct {
    +	VirtualDeviceFileBackingOption
    +
    +	DiskMode    ChoiceOption `xml:"diskMode"`
    +	Growable    bool         `xml:"growable"`
    +	HotGrowable bool         `xml:"hotGrowable"`
    +	Uuid        bool         `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["VirtualDiskLocalPMemBackingOption"] = reflect.TypeOf((*VirtualDiskLocalPMemBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskModeNotSupported struct {
    +	DeviceNotSupported
    +
    +	Mode string `xml:"mode"`
    +}
    +
    +func init() {
    +	t["VirtualDiskModeNotSupported"] = reflect.TypeOf((*VirtualDiskModeNotSupported)(nil)).Elem()
    +}
    +
    +type VirtualDiskModeNotSupportedFault VirtualDiskModeNotSupported
    +
    +func init() {
    +	t["VirtualDiskModeNotSupportedFault"] = reflect.TypeOf((*VirtualDiskModeNotSupportedFault)(nil)).Elem()
    +}
    +
    +type VirtualDiskOption struct {
    +	VirtualDeviceOption
    +
    +	CapacityInKB            LongOption                                `xml:"capacityInKB"`
    +	IoAllocationOption      *StorageIOAllocationOption                `xml:"ioAllocationOption,omitempty"`
    +	VFlashCacheConfigOption *VirtualDiskOptionVFlashCacheConfigOption `xml:"vFlashCacheConfigOption,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskOption"] = reflect.TypeOf((*VirtualDiskOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskOptionVFlashCacheConfigOption struct {
    +	DynamicData
    +
    +	CacheConsistencyType ChoiceOption `xml:"cacheConsistencyType"`
    +	CacheMode            ChoiceOption `xml:"cacheMode"`
    +	ReservationInMB      LongOption   `xml:"reservationInMB"`
    +	BlockSizeInKB        LongOption   `xml:"blockSizeInKB"`
    +}
    +
    +func init() {
    +	t["VirtualDiskOptionVFlashCacheConfigOption"] = reflect.TypeOf((*VirtualDiskOptionVFlashCacheConfigOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskPartitionedRawDiskVer2BackingInfo struct {
    +	VirtualDiskRawDiskVer2BackingInfo
    +
    +	Partition []int32 `xml:"partition"`
    +}
    +
    +func init() {
    +	t["VirtualDiskPartitionedRawDiskVer2BackingInfo"] = reflect.TypeOf((*VirtualDiskPartitionedRawDiskVer2BackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskPartitionedRawDiskVer2BackingOption struct {
    +	VirtualDiskRawDiskVer2BackingOption
    +}
    +
    +func init() {
    +	t["VirtualDiskPartitionedRawDiskVer2BackingOption"] = reflect.TypeOf((*VirtualDiskPartitionedRawDiskVer2BackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskRawDiskMappingVer1BackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +
    +	LunUuid           string                                    `xml:"lunUuid,omitempty"`
    +	DeviceName        string                                    `xml:"deviceName,omitempty"`
    +	CompatibilityMode string                                    `xml:"compatibilityMode,omitempty"`
    +	DiskMode          string                                    `xml:"diskMode,omitempty"`
    +	Uuid              string                                    `xml:"uuid,omitempty"`
    +	ContentId         string                                    `xml:"contentId,omitempty"`
    +	ChangeId          string                                    `xml:"changeId,omitempty"`
    +	Parent            *VirtualDiskRawDiskMappingVer1BackingInfo `xml:"parent,omitempty"`
    +	DeltaDiskFormat   string                                    `xml:"deltaDiskFormat,omitempty"`
    +	DeltaGrainSize    int32                                     `xml:"deltaGrainSize,omitempty"`
    +	Sharing           string                                    `xml:"sharing,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskRawDiskMappingVer1BackingInfo"] = reflect.TypeOf((*VirtualDiskRawDiskMappingVer1BackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskRawDiskMappingVer1BackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +
    +	DescriptorFileNameExtensions *ChoiceOption `xml:"descriptorFileNameExtensions,omitempty"`
    +	CompatibilityMode            ChoiceOption  `xml:"compatibilityMode"`
    +	DiskMode                     ChoiceOption  `xml:"diskMode"`
    +	Uuid                         bool          `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["VirtualDiskRawDiskMappingVer1BackingOption"] = reflect.TypeOf((*VirtualDiskRawDiskMappingVer1BackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskRawDiskVer2BackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +
    +	DescriptorFileName string `xml:"descriptorFileName"`
    +	Uuid               string `xml:"uuid,omitempty"`
    +	ChangeId           string `xml:"changeId,omitempty"`
    +	Sharing            string `xml:"sharing,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskRawDiskVer2BackingInfo"] = reflect.TypeOf((*VirtualDiskRawDiskVer2BackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskRawDiskVer2BackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +
    +	DescriptorFileNameExtensions ChoiceOption `xml:"descriptorFileNameExtensions"`
    +	Uuid                         bool         `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["VirtualDiskRawDiskVer2BackingOption"] = reflect.TypeOf((*VirtualDiskRawDiskVer2BackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskRuleSpec struct {
    +	ClusterRuleInfo
    +
    +	DiskRuleType string  `xml:"diskRuleType"`
    +	DiskId       []int32 `xml:"diskId,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskRuleSpec"] = reflect.TypeOf((*VirtualDiskRuleSpec)(nil)).Elem()
    +}
    +
    +type VirtualDiskSeSparseBackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +
    +	DiskMode        string                          `xml:"diskMode"`
    +	WriteThrough    *bool                           `xml:"writeThrough"`
    +	Uuid            string                          `xml:"uuid,omitempty"`
    +	ContentId       string                          `xml:"contentId,omitempty"`
    +	ChangeId        string                          `xml:"changeId,omitempty"`
    +	Parent          *VirtualDiskSeSparseBackingInfo `xml:"parent,omitempty"`
    +	DeltaDiskFormat string                          `xml:"deltaDiskFormat,omitempty"`
    +	DigestEnabled   *bool                           `xml:"digestEnabled"`
    +	GrainSize       int32                           `xml:"grainSize,omitempty"`
    +	KeyId           *CryptoKeyId                    `xml:"keyId,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskSeSparseBackingInfo"] = reflect.TypeOf((*VirtualDiskSeSparseBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskSeSparseBackingOption struct {
    +	VirtualDeviceFileBackingOption
    +
    +	DiskMode                  ChoiceOption                           `xml:"diskMode"`
    +	WriteThrough              BoolOption                             `xml:"writeThrough"`
    +	Growable                  bool                                   `xml:"growable"`
    +	HotGrowable               bool                                   `xml:"hotGrowable"`
    +	Uuid                      bool                                   `xml:"uuid"`
    +	DeltaDiskFormatsSupported []VirtualDiskDeltaDiskFormatsSupported `xml:"deltaDiskFormatsSupported"`
    +}
    +
    +func init() {
    +	t["VirtualDiskSeSparseBackingOption"] = reflect.TypeOf((*VirtualDiskSeSparseBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskSparseVer1BackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +
    +	DiskMode      string                            `xml:"diskMode"`
    +	Split         *bool                             `xml:"split"`
    +	WriteThrough  *bool                             `xml:"writeThrough"`
    +	SpaceUsedInKB int64                             `xml:"spaceUsedInKB,omitempty"`
    +	ContentId     string                            `xml:"contentId,omitempty"`
    +	Parent        *VirtualDiskSparseVer1BackingInfo `xml:"parent,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskSparseVer1BackingInfo"] = reflect.TypeOf((*VirtualDiskSparseVer1BackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskSparseVer1BackingOption struct {
    +	VirtualDeviceFileBackingOption
    +
    +	DiskModes    ChoiceOption `xml:"diskModes"`
    +	Split        BoolOption   `xml:"split"`
    +	WriteThrough BoolOption   `xml:"writeThrough"`
    +	Growable     bool         `xml:"growable"`
    +}
    +
    +func init() {
    +	t["VirtualDiskSparseVer1BackingOption"] = reflect.TypeOf((*VirtualDiskSparseVer1BackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskSparseVer2BackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +
    +	DiskMode      string                            `xml:"diskMode"`
    +	Split         *bool                             `xml:"split"`
    +	WriteThrough  *bool                             `xml:"writeThrough"`
    +	SpaceUsedInKB int64                             `xml:"spaceUsedInKB,omitempty"`
    +	Uuid          string                            `xml:"uuid,omitempty"`
    +	ContentId     string                            `xml:"contentId,omitempty"`
    +	ChangeId      string                            `xml:"changeId,omitempty"`
    +	Parent        *VirtualDiskSparseVer2BackingInfo `xml:"parent,omitempty"`
    +	KeyId         *CryptoKeyId                      `xml:"keyId,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskSparseVer2BackingInfo"] = reflect.TypeOf((*VirtualDiskSparseVer2BackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualDiskSparseVer2BackingOption struct {
    +	VirtualDeviceFileBackingOption
    +
    +	DiskMode     ChoiceOption `xml:"diskMode"`
    +	Split        BoolOption   `xml:"split"`
    +	WriteThrough BoolOption   `xml:"writeThrough"`
    +	Growable     bool         `xml:"growable"`
    +	HotGrowable  bool         `xml:"hotGrowable"`
    +	Uuid         bool         `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["VirtualDiskSparseVer2BackingOption"] = reflect.TypeOf((*VirtualDiskSparseVer2BackingOption)(nil)).Elem()
    +}
    +
    +type VirtualDiskSpec struct {
    +	DynamicData
    +
    +	DiskType    string `xml:"diskType"`
    +	AdapterType string `xml:"adapterType"`
    +}
    +
    +func init() {
    +	t["VirtualDiskSpec"] = reflect.TypeOf((*VirtualDiskSpec)(nil)).Elem()
    +}
    +
    +type VirtualDiskVFlashCacheConfigInfo struct {
    +	DynamicData
    +
    +	VFlashModule         string `xml:"vFlashModule,omitempty"`
    +	ReservationInMB      int64  `xml:"reservationInMB,omitempty"`
    +	CacheConsistencyType string `xml:"cacheConsistencyType,omitempty"`
    +	CacheMode            string `xml:"cacheMode,omitempty"`
    +	BlockSizeInKB        int64  `xml:"blockSizeInKB,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualDiskVFlashCacheConfigInfo"] = reflect.TypeOf((*VirtualDiskVFlashCacheConfigInfo)(nil)).Elem()
    +}
    +
    +type VirtualE1000 struct {
    +	VirtualEthernetCard
    +}
    +
    +func init() {
    +	t["VirtualE1000"] = reflect.TypeOf((*VirtualE1000)(nil)).Elem()
    +}
    +
    +type VirtualE1000Option struct {
    +	VirtualEthernetCardOption
    +}
    +
    +func init() {
    +	t["VirtualE1000Option"] = reflect.TypeOf((*VirtualE1000Option)(nil)).Elem()
    +}
    +
    +type VirtualE1000e struct {
    +	VirtualEthernetCard
    +}
    +
    +func init() {
    +	t["VirtualE1000e"] = reflect.TypeOf((*VirtualE1000e)(nil)).Elem()
    +}
    +
    +type VirtualE1000eOption struct {
    +	VirtualEthernetCardOption
    +}
    +
    +func init() {
    +	t["VirtualE1000eOption"] = reflect.TypeOf((*VirtualE1000eOption)(nil)).Elem()
    +}
    +
    +type VirtualEnsoniq1371 struct {
    +	VirtualSoundCard
    +}
    +
    +func init() {
    +	t["VirtualEnsoniq1371"] = reflect.TypeOf((*VirtualEnsoniq1371)(nil)).Elem()
    +}
    +
    +type VirtualEnsoniq1371Option struct {
    +	VirtualSoundCardOption
    +}
    +
    +func init() {
    +	t["VirtualEnsoniq1371Option"] = reflect.TypeOf((*VirtualEnsoniq1371Option)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCard struct {
    +	VirtualDevice
    +
    +	AddressType             string                                 `xml:"addressType,omitempty"`
    +	MacAddress              string                                 `xml:"macAddress,omitempty"`
    +	WakeOnLanEnabled        *bool                                  `xml:"wakeOnLanEnabled"`
    +	ResourceAllocation      *VirtualEthernetCardResourceAllocation `xml:"resourceAllocation,omitempty"`
    +	ExternalId              string                                 `xml:"externalId,omitempty"`
    +	UptCompatibilityEnabled *bool                                  `xml:"uptCompatibilityEnabled"`
    +}
    +
    +func init() {
    +	t["VirtualEthernetCard"] = reflect.TypeOf((*VirtualEthernetCard)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardDVPortBackingOption struct {
    +	VirtualDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardDVPortBackingOption"] = reflect.TypeOf((*VirtualEthernetCardDVPortBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardDistributedVirtualPortBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +
    +	Port DistributedVirtualSwitchPortConnection `xml:"port"`
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardDistributedVirtualPortBackingInfo"] = reflect.TypeOf((*VirtualEthernetCardDistributedVirtualPortBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardLegacyNetworkBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardLegacyNetworkBackingInfo"] = reflect.TypeOf((*VirtualEthernetCardLegacyNetworkBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardLegacyNetworkBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardLegacyNetworkBackingOption"] = reflect.TypeOf((*VirtualEthernetCardLegacyNetworkBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardNetworkBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +
    +	Network           *ManagedObjectReference `xml:"network,omitempty"`
    +	InPassthroughMode *bool                   `xml:"inPassthroughMode"`
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardNetworkBackingInfo"] = reflect.TypeOf((*VirtualEthernetCardNetworkBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardNetworkBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardNetworkBackingOption"] = reflect.TypeOf((*VirtualEthernetCardNetworkBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardNotSupported struct {
    +	DeviceNotSupported
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardNotSupported"] = reflect.TypeOf((*VirtualEthernetCardNotSupported)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardNotSupportedFault VirtualEthernetCardNotSupported
    +
    +func init() {
    +	t["VirtualEthernetCardNotSupportedFault"] = reflect.TypeOf((*VirtualEthernetCardNotSupportedFault)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardOpaqueNetworkBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +
    +	OpaqueNetworkId   string `xml:"opaqueNetworkId"`
    +	OpaqueNetworkType string `xml:"opaqueNetworkType"`
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardOpaqueNetworkBackingInfo"] = reflect.TypeOf((*VirtualEthernetCardOpaqueNetworkBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardOpaqueNetworkBackingOption struct {
    +	VirtualDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardOpaqueNetworkBackingOption"] = reflect.TypeOf((*VirtualEthernetCardOpaqueNetworkBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardOption struct {
    +	VirtualDeviceOption
    +
    +	SupportedOUI              ChoiceOption `xml:"supportedOUI"`
    +	MacType                   ChoiceOption `xml:"macType"`
    +	WakeOnLanEnabled          BoolOption   `xml:"wakeOnLanEnabled"`
    +	VmDirectPathGen2Supported *bool        `xml:"vmDirectPathGen2Supported"`
    +	UptCompatibilityEnabled   *BoolOption  `xml:"uptCompatibilityEnabled,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardOption"] = reflect.TypeOf((*VirtualEthernetCardOption)(nil)).Elem()
    +}
    +
    +type VirtualEthernetCardResourceAllocation struct {
    +	DynamicData
    +
    +	Reservation *int64     `xml:"reservation"`
    +	Share       SharesInfo `xml:"share"`
    +	Limit       *int64     `xml:"limit"`
    +}
    +
    +func init() {
    +	t["VirtualEthernetCardResourceAllocation"] = reflect.TypeOf((*VirtualEthernetCardResourceAllocation)(nil)).Elem()
    +}
    +
    +type VirtualFloppy struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualFloppy"] = reflect.TypeOf((*VirtualFloppy)(nil)).Elem()
    +}
    +
    +type VirtualFloppyDeviceBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualFloppyDeviceBackingInfo"] = reflect.TypeOf((*VirtualFloppyDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualFloppyDeviceBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualFloppyDeviceBackingOption"] = reflect.TypeOf((*VirtualFloppyDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualFloppyImageBackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualFloppyImageBackingInfo"] = reflect.TypeOf((*VirtualFloppyImageBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualFloppyImageBackingOption struct {
    +	VirtualDeviceFileBackingOption
    +}
    +
    +func init() {
    +	t["VirtualFloppyImageBackingOption"] = reflect.TypeOf((*VirtualFloppyImageBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualFloppyOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualFloppyOption"] = reflect.TypeOf((*VirtualFloppyOption)(nil)).Elem()
    +}
    +
    +type VirtualFloppyRemoteDeviceBackingInfo struct {
    +	VirtualDeviceRemoteDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualFloppyRemoteDeviceBackingInfo"] = reflect.TypeOf((*VirtualFloppyRemoteDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualFloppyRemoteDeviceBackingOption struct {
    +	VirtualDeviceRemoteDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualFloppyRemoteDeviceBackingOption"] = reflect.TypeOf((*VirtualFloppyRemoteDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualHardware struct {
    +	DynamicData
    +
    +	NumCPU              int32               `xml:"numCPU"`
    +	NumCoresPerSocket   int32               `xml:"numCoresPerSocket,omitempty"`
    +	MemoryMB            int32               `xml:"memoryMB"`
    +	VirtualICH7MPresent *bool               `xml:"virtualICH7MPresent"`
    +	VirtualSMCPresent   *bool               `xml:"virtualSMCPresent"`
    +	Device              []BaseVirtualDevice `xml:"device,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VirtualHardware"] = reflect.TypeOf((*VirtualHardware)(nil)).Elem()
    +}
    +
    +type VirtualHardwareCompatibilityIssue struct {
    +	VmConfigFault
    +}
    +
    +func init() {
    +	t["VirtualHardwareCompatibilityIssue"] = reflect.TypeOf((*VirtualHardwareCompatibilityIssue)(nil)).Elem()
    +}
    +
    +type VirtualHardwareCompatibilityIssueFault BaseVirtualHardwareCompatibilityIssue
    +
    +func init() {
    +	t["VirtualHardwareCompatibilityIssueFault"] = reflect.TypeOf((*VirtualHardwareCompatibilityIssueFault)(nil)).Elem()
    +}
    +
    +type VirtualHardwareOption struct {
    +	DynamicData
    +
    +	HwVersion             int32                     `xml:"hwVersion"`
    +	VirtualDeviceOption   []BaseVirtualDeviceOption `xml:"virtualDeviceOption,typeattr"`
    +	DeviceListReadonly    bool                      `xml:"deviceListReadonly"`
    +	NumCPU                []int32                   `xml:"numCPU"`
    +	NumCoresPerSocket     *IntOption                `xml:"numCoresPerSocket,omitempty"`
    +	NumCpuReadonly        bool                      `xml:"numCpuReadonly"`
    +	MemoryMB              LongOption                `xml:"memoryMB"`
    +	NumPCIControllers     IntOption                 `xml:"numPCIControllers"`
    +	NumIDEControllers     IntOption                 `xml:"numIDEControllers"`
    +	NumUSBControllers     IntOption                 `xml:"numUSBControllers"`
    +	NumUSBXHCIControllers *IntOption                `xml:"numUSBXHCIControllers,omitempty"`
    +	NumSIOControllers     IntOption                 `xml:"numSIOControllers"`
    +	NumPS2Controllers     IntOption                 `xml:"numPS2Controllers"`
    +	LicensingLimit        []string                  `xml:"licensingLimit,omitempty"`
    +	NumSupportedWwnPorts  *IntOption                `xml:"numSupportedWwnPorts,omitempty"`
    +	NumSupportedWwnNodes  *IntOption                `xml:"numSupportedWwnNodes,omitempty"`
    +	ResourceConfigOption  *ResourceConfigOption     `xml:"resourceConfigOption,omitempty"`
    +	NumNVDIMMControllers  *IntOption                `xml:"numNVDIMMControllers,omitempty"`
    +	NumTPMDevices         *IntOption                `xml:"numTPMDevices,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualHardwareOption"] = reflect.TypeOf((*VirtualHardwareOption)(nil)).Elem()
    +}
    +
    +type VirtualHardwareVersionNotSupported struct {
    +	VirtualHardwareCompatibilityIssue
    +
    +	HostName string                 `xml:"hostName"`
    +	Host     ManagedObjectReference `xml:"host"`
    +}
    +
    +func init() {
    +	t["VirtualHardwareVersionNotSupported"] = reflect.TypeOf((*VirtualHardwareVersionNotSupported)(nil)).Elem()
    +}
    +
    +type VirtualHardwareVersionNotSupportedFault VirtualHardwareVersionNotSupported
    +
    +func init() {
    +	t["VirtualHardwareVersionNotSupportedFault"] = reflect.TypeOf((*VirtualHardwareVersionNotSupportedFault)(nil)).Elem()
    +}
    +
    +type VirtualHdAudioCard struct {
    +	VirtualSoundCard
    +}
    +
    +func init() {
    +	t["VirtualHdAudioCard"] = reflect.TypeOf((*VirtualHdAudioCard)(nil)).Elem()
    +}
    +
    +type VirtualHdAudioCardOption struct {
    +	VirtualSoundCardOption
    +}
    +
    +func init() {
    +	t["VirtualHdAudioCardOption"] = reflect.TypeOf((*VirtualHdAudioCardOption)(nil)).Elem()
    +}
    +
    +type VirtualIDEController struct {
    +	VirtualController
    +}
    +
    +func init() {
    +	t["VirtualIDEController"] = reflect.TypeOf((*VirtualIDEController)(nil)).Elem()
    +}
    +
    +type VirtualIDEControllerOption struct {
    +	VirtualControllerOption
    +
    +	NumIDEDisks  IntOption `xml:"numIDEDisks"`
    +	NumIDECdroms IntOption `xml:"numIDECdroms"`
    +}
    +
    +func init() {
    +	t["VirtualIDEControllerOption"] = reflect.TypeOf((*VirtualIDEControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualKeyboard struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualKeyboard"] = reflect.TypeOf((*VirtualKeyboard)(nil)).Elem()
    +}
    +
    +type VirtualKeyboardOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualKeyboardOption"] = reflect.TypeOf((*VirtualKeyboardOption)(nil)).Elem()
    +}
    +
    +type VirtualLsiLogicController struct {
    +	VirtualSCSIController
    +}
    +
    +func init() {
    +	t["VirtualLsiLogicController"] = reflect.TypeOf((*VirtualLsiLogicController)(nil)).Elem()
    +}
    +
    +type VirtualLsiLogicControllerOption struct {
    +	VirtualSCSIControllerOption
    +}
    +
    +func init() {
    +	t["VirtualLsiLogicControllerOption"] = reflect.TypeOf((*VirtualLsiLogicControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualLsiLogicSASController struct {
    +	VirtualSCSIController
    +}
    +
    +func init() {
    +	t["VirtualLsiLogicSASController"] = reflect.TypeOf((*VirtualLsiLogicSASController)(nil)).Elem()
    +}
    +
    +type VirtualLsiLogicSASControllerOption struct {
    +	VirtualSCSIControllerOption
    +}
    +
    +func init() {
    +	t["VirtualLsiLogicSASControllerOption"] = reflect.TypeOf((*VirtualLsiLogicSASControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualMachineAffinityInfo struct {
    +	DynamicData
    +
    +	AffinitySet []int32 `xml:"affinitySet"`
    +}
    +
    +func init() {
    +	t["VirtualMachineAffinityInfo"] = reflect.TypeOf((*VirtualMachineAffinityInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineBootOptions struct {
    +	DynamicData
    +
    +	BootDelay            int64                                         `xml:"bootDelay,omitempty"`
    +	EnterBIOSSetup       *bool                                         `xml:"enterBIOSSetup"`
    +	EfiSecureBootEnabled *bool                                         `xml:"efiSecureBootEnabled"`
    +	BootRetryEnabled     *bool                                         `xml:"bootRetryEnabled"`
    +	BootRetryDelay       int64                                         `xml:"bootRetryDelay,omitempty"`
    +	BootOrder            []BaseVirtualMachineBootOptionsBootableDevice `xml:"bootOrder,omitempty,typeattr"`
    +	NetworkBootProtocol  string                                        `xml:"networkBootProtocol,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineBootOptions"] = reflect.TypeOf((*VirtualMachineBootOptions)(nil)).Elem()
    +}
    +
    +type VirtualMachineBootOptionsBootableCdromDevice struct {
    +	VirtualMachineBootOptionsBootableDevice
    +}
    +
    +func init() {
    +	t["VirtualMachineBootOptionsBootableCdromDevice"] = reflect.TypeOf((*VirtualMachineBootOptionsBootableCdromDevice)(nil)).Elem()
    +}
    +
    +type VirtualMachineBootOptionsBootableDevice struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["VirtualMachineBootOptionsBootableDevice"] = reflect.TypeOf((*VirtualMachineBootOptionsBootableDevice)(nil)).Elem()
    +}
    +
    +type VirtualMachineBootOptionsBootableDiskDevice struct {
    +	VirtualMachineBootOptionsBootableDevice
    +
    +	DeviceKey int32 `xml:"deviceKey"`
    +}
    +
    +func init() {
    +	t["VirtualMachineBootOptionsBootableDiskDevice"] = reflect.TypeOf((*VirtualMachineBootOptionsBootableDiskDevice)(nil)).Elem()
    +}
    +
    +type VirtualMachineBootOptionsBootableEthernetDevice struct {
    +	VirtualMachineBootOptionsBootableDevice
    +
    +	DeviceKey int32 `xml:"deviceKey"`
    +}
    +
    +func init() {
    +	t["VirtualMachineBootOptionsBootableEthernetDevice"] = reflect.TypeOf((*VirtualMachineBootOptionsBootableEthernetDevice)(nil)).Elem()
    +}
    +
    +type VirtualMachineBootOptionsBootableFloppyDevice struct {
    +	VirtualMachineBootOptionsBootableDevice
    +}
    +
    +func init() {
    +	t["VirtualMachineBootOptionsBootableFloppyDevice"] = reflect.TypeOf((*VirtualMachineBootOptionsBootableFloppyDevice)(nil)).Elem()
    +}
    +
    +type VirtualMachineCapability struct {
    +	DynamicData
    +
    +	SnapshotOperationsSupported            bool  `xml:"snapshotOperationsSupported"`
    +	MultipleSnapshotsSupported             bool  `xml:"multipleSnapshotsSupported"`
    +	SnapshotConfigSupported                bool  `xml:"snapshotConfigSupported"`
    +	PoweredOffSnapshotsSupported           bool  `xml:"poweredOffSnapshotsSupported"`
    +	MemorySnapshotsSupported               bool  `xml:"memorySnapshotsSupported"`
    +	RevertToSnapshotSupported              bool  `xml:"revertToSnapshotSupported"`
    +	QuiescedSnapshotsSupported             bool  `xml:"quiescedSnapshotsSupported"`
    +	DisableSnapshotsSupported              bool  `xml:"disableSnapshotsSupported"`
    +	LockSnapshotsSupported                 bool  `xml:"lockSnapshotsSupported"`
    +	ConsolePreferencesSupported            bool  `xml:"consolePreferencesSupported"`
    +	CpuFeatureMaskSupported                bool  `xml:"cpuFeatureMaskSupported"`
    +	S1AcpiManagementSupported              bool  `xml:"s1AcpiManagementSupported"`
    +	SettingScreenResolutionSupported       bool  `xml:"settingScreenResolutionSupported"`
    +	ToolsAutoUpdateSupported               bool  `xml:"toolsAutoUpdateSupported"`
    +	VmNpivWwnSupported                     bool  `xml:"vmNpivWwnSupported"`
    +	NpivWwnOnNonRdmVmSupported             bool  `xml:"npivWwnOnNonRdmVmSupported"`
    +	VmNpivWwnDisableSupported              *bool `xml:"vmNpivWwnDisableSupported"`
    +	VmNpivWwnUpdateSupported               *bool `xml:"vmNpivWwnUpdateSupported"`
    +	SwapPlacementSupported                 bool  `xml:"swapPlacementSupported"`
    +	ToolsSyncTimeSupported                 bool  `xml:"toolsSyncTimeSupported"`
    +	VirtualMmuUsageSupported               bool  `xml:"virtualMmuUsageSupported"`
    +	DiskSharesSupported                    bool  `xml:"diskSharesSupported"`
    +	BootOptionsSupported                   bool  `xml:"bootOptionsSupported"`
    +	BootRetryOptionsSupported              *bool `xml:"bootRetryOptionsSupported"`
    +	SettingVideoRamSizeSupported           bool  `xml:"settingVideoRamSizeSupported"`
    +	SettingDisplayTopologySupported        *bool `xml:"settingDisplayTopologySupported"`
    +	RecordReplaySupported                  *bool `xml:"recordReplaySupported"`
    +	ChangeTrackingSupported                *bool `xml:"changeTrackingSupported"`
    +	MultipleCoresPerSocketSupported        *bool `xml:"multipleCoresPerSocketSupported"`
    +	HostBasedReplicationSupported          *bool `xml:"hostBasedReplicationSupported"`
    +	GuestAutoLockSupported                 *bool `xml:"guestAutoLockSupported"`
    +	MemoryReservationLockSupported         *bool `xml:"memoryReservationLockSupported"`
    +	FeatureRequirementSupported            *bool `xml:"featureRequirementSupported"`
    +	PoweredOnMonitorTypeChangeSupported    *bool `xml:"poweredOnMonitorTypeChangeSupported"`
    +	SeSparseDiskSupported                  *bool `xml:"seSparseDiskSupported"`
    +	NestedHVSupported                      *bool `xml:"nestedHVSupported"`
    +	VPMCSupported                          *bool `xml:"vPMCSupported"`
    +	SecureBootSupported                    *bool `xml:"secureBootSupported"`
    +	PerVmEvcSupported                      *bool `xml:"perVmEvcSupported"`
    +	VirtualMmuUsageIgnored                 *bool `xml:"virtualMmuUsageIgnored"`
    +	VirtualExecUsageIgnored                *bool `xml:"virtualExecUsageIgnored"`
    +	DiskOnlySnapshotOnSuspendedVMSupported *bool `xml:"diskOnlySnapshotOnSuspendedVMSupported"`
    +}
    +
    +func init() {
    +	t["VirtualMachineCapability"] = reflect.TypeOf((*VirtualMachineCapability)(nil)).Elem()
    +}
    +
    +type VirtualMachineCdromInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	Description string `xml:"description,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineCdromInfo"] = reflect.TypeOf((*VirtualMachineCdromInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineCloneSpec struct {
    +	DynamicData
    +
    +	Location      VirtualMachineRelocateSpec `xml:"location"`
    +	Template      bool                       `xml:"template"`
    +	Config        *VirtualMachineConfigSpec  `xml:"config,omitempty"`
    +	Customization *CustomizationSpec         `xml:"customization,omitempty"`
    +	PowerOn       bool                       `xml:"powerOn"`
    +	Snapshot      *ManagedObjectReference    `xml:"snapshot,omitempty"`
    +	Memory        *bool                      `xml:"memory"`
    +}
    +
    +func init() {
    +	t["VirtualMachineCloneSpec"] = reflect.TypeOf((*VirtualMachineCloneSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigInfo struct {
    +	DynamicData
    +
    +	ChangeVersion                string                                     `xml:"changeVersion"`
    +	Modified                     time.Time                                  `xml:"modified"`
    +	Name                         string                                     `xml:"name"`
    +	GuestFullName                string                                     `xml:"guestFullName"`
    +	Version                      string                                     `xml:"version"`
    +	Uuid                         string                                     `xml:"uuid"`
    +	CreateDate                   *time.Time                                 `xml:"createDate"`
    +	InstanceUuid                 string                                     `xml:"instanceUuid,omitempty"`
    +	NpivNodeWorldWideName        []int64                                    `xml:"npivNodeWorldWideName,omitempty"`
    +	NpivPortWorldWideName        []int64                                    `xml:"npivPortWorldWideName,omitempty"`
    +	NpivWorldWideNameType        string                                     `xml:"npivWorldWideNameType,omitempty"`
    +	NpivDesiredNodeWwns          int16                                      `xml:"npivDesiredNodeWwns,omitempty"`
    +	NpivDesiredPortWwns          int16                                      `xml:"npivDesiredPortWwns,omitempty"`
    +	NpivTemporaryDisabled        *bool                                      `xml:"npivTemporaryDisabled"`
    +	NpivOnNonRdmDisks            *bool                                      `xml:"npivOnNonRdmDisks"`
    +	LocationId                   string                                     `xml:"locationId,omitempty"`
    +	Template                     bool                                       `xml:"template"`
    +	GuestId                      string                                     `xml:"guestId"`
    +	AlternateGuestName           string                                     `xml:"alternateGuestName"`
    +	Annotation                   string                                     `xml:"annotation,omitempty"`
    +	Files                        VirtualMachineFileInfo                     `xml:"files"`
    +	Tools                        *ToolsConfigInfo                           `xml:"tools,omitempty"`
    +	Flags                        VirtualMachineFlagInfo                     `xml:"flags"`
    +	ConsolePreferences           *VirtualMachineConsolePreferences          `xml:"consolePreferences,omitempty"`
    +	DefaultPowerOps              VirtualMachineDefaultPowerOpInfo           `xml:"defaultPowerOps"`
    +	Hardware                     VirtualHardware                            `xml:"hardware"`
    +	CpuAllocation                *ResourceAllocationInfo                    `xml:"cpuAllocation,omitempty"`
    +	MemoryAllocation             *ResourceAllocationInfo                    `xml:"memoryAllocation,omitempty"`
    +	LatencySensitivity           *LatencySensitivity                        `xml:"latencySensitivity,omitempty"`
    +	MemoryHotAddEnabled          *bool                                      `xml:"memoryHotAddEnabled"`
    +	CpuHotAddEnabled             *bool                                      `xml:"cpuHotAddEnabled"`
    +	CpuHotRemoveEnabled          *bool                                      `xml:"cpuHotRemoveEnabled"`
    +	HotPlugMemoryLimit           int64                                      `xml:"hotPlugMemoryLimit,omitempty"`
    +	HotPlugMemoryIncrementSize   int64                                      `xml:"hotPlugMemoryIncrementSize,omitempty"`
    +	CpuAffinity                  *VirtualMachineAffinityInfo                `xml:"cpuAffinity,omitempty"`
    +	MemoryAffinity               *VirtualMachineAffinityInfo                `xml:"memoryAffinity,omitempty"`
    +	NetworkShaper                *VirtualMachineNetworkShaperInfo           `xml:"networkShaper,omitempty"`
    +	ExtraConfig                  []BaseOptionValue                          `xml:"extraConfig,omitempty,typeattr"`
    +	CpuFeatureMask               []HostCpuIdInfo                            `xml:"cpuFeatureMask,omitempty"`
    +	DatastoreUrl                 []VirtualMachineConfigInfoDatastoreUrlPair `xml:"datastoreUrl,omitempty"`
    +	SwapPlacement                string                                     `xml:"swapPlacement,omitempty"`
    +	BootOptions                  *VirtualMachineBootOptions                 `xml:"bootOptions,omitempty"`
    +	FtInfo                       BaseFaultToleranceConfigInfo               `xml:"ftInfo,omitempty,typeattr"`
    +	RepConfig                    *ReplicationConfigSpec                     `xml:"repConfig,omitempty"`
    +	VAppConfig                   BaseVmConfigInfo                           `xml:"vAppConfig,omitempty,typeattr"`
    +	VAssertsEnabled              *bool                                      `xml:"vAssertsEnabled"`
    +	ChangeTrackingEnabled        *bool                                      `xml:"changeTrackingEnabled"`
    +	Firmware                     string                                     `xml:"firmware,omitempty"`
    +	MaxMksConnections            int32                                      `xml:"maxMksConnections,omitempty"`
    +	GuestAutoLockEnabled         *bool                                      `xml:"guestAutoLockEnabled"`
    +	ManagedBy                    *ManagedByInfo                             `xml:"managedBy,omitempty"`
    +	MemoryReservationLockedToMax *bool                                      `xml:"memoryReservationLockedToMax"`
    +	InitialOverhead              *VirtualMachineConfigInfoOverheadInfo      `xml:"initialOverhead,omitempty"`
    +	NestedHVEnabled              *bool                                      `xml:"nestedHVEnabled"`
    +	VPMCEnabled                  *bool                                      `xml:"vPMCEnabled"`
    +	ScheduledHardwareUpgradeInfo *ScheduledHardwareUpgradeInfo              `xml:"scheduledHardwareUpgradeInfo,omitempty"`
    +	ForkConfigInfo               *VirtualMachineForkConfigInfo              `xml:"forkConfigInfo,omitempty"`
    +	VFlashCacheReservation       int64                                      `xml:"vFlashCacheReservation,omitempty"`
    +	VmxConfigChecksum            []byte                                     `xml:"vmxConfigChecksum,omitempty"`
    +	MessageBusTunnelEnabled      *bool                                      `xml:"messageBusTunnelEnabled"`
    +	VmStorageObjectId            string                                     `xml:"vmStorageObjectId,omitempty"`
    +	SwapStorageObjectId          string                                     `xml:"swapStorageObjectId,omitempty"`
    +	KeyId                        *CryptoKeyId                               `xml:"keyId,omitempty"`
    +	GuestIntegrityInfo           *VirtualMachineGuestIntegrityInfo          `xml:"guestIntegrityInfo,omitempty"`
    +	MigrateEncryption            string                                     `xml:"migrateEncryption,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineConfigInfo"] = reflect.TypeOf((*VirtualMachineConfigInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigInfoDatastoreUrlPair struct {
    +	DynamicData
    +
    +	Name string `xml:"name"`
    +	Url  string `xml:"url"`
    +}
    +
    +func init() {
    +	t["VirtualMachineConfigInfoDatastoreUrlPair"] = reflect.TypeOf((*VirtualMachineConfigInfoDatastoreUrlPair)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigInfoOverheadInfo struct {
    +	DynamicData
    +
    +	InitialMemoryReservation int64 `xml:"initialMemoryReservation,omitempty"`
    +	InitialSwapReservation   int64 `xml:"initialSwapReservation,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineConfigInfoOverheadInfo"] = reflect.TypeOf((*VirtualMachineConfigInfoOverheadInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigOption struct {
    +	DynamicData
    +
    +	Version                          string                           `xml:"version"`
    +	Description                      string                           `xml:"description"`
    +	GuestOSDescriptor                []GuestOsDescriptor              `xml:"guestOSDescriptor"`
    +	GuestOSDefaultIndex              int32                            `xml:"guestOSDefaultIndex"`
    +	HardwareOptions                  VirtualHardwareOption            `xml:"hardwareOptions"`
    +	Capabilities                     VirtualMachineCapability         `xml:"capabilities"`
    +	Datastore                        DatastoreOption                  `xml:"datastore"`
    +	DefaultDevice                    []BaseVirtualDevice              `xml:"defaultDevice,omitempty,typeattr"`
    +	SupportedMonitorType             []string                         `xml:"supportedMonitorType"`
    +	SupportedOvfEnvironmentTransport []string                         `xml:"supportedOvfEnvironmentTransport,omitempty"`
    +	SupportedOvfInstallTransport     []string                         `xml:"supportedOvfInstallTransport,omitempty"`
    +	PropertyRelations                []VirtualMachinePropertyRelation `xml:"propertyRelations,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineConfigOption"] = reflect.TypeOf((*VirtualMachineConfigOption)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigOptionDescriptor struct {
    +	DynamicData
    +
    +	Key                 string                   `xml:"key"`
    +	Description         string                   `xml:"description,omitempty"`
    +	Host                []ManagedObjectReference `xml:"host,omitempty"`
    +	CreateSupported     *bool                    `xml:"createSupported"`
    +	DefaultConfigOption *bool                    `xml:"defaultConfigOption"`
    +	RunSupported        *bool                    `xml:"runSupported"`
    +	UpgradeSupported    *bool                    `xml:"upgradeSupported"`
    +}
    +
    +func init() {
    +	t["VirtualMachineConfigOptionDescriptor"] = reflect.TypeOf((*VirtualMachineConfigOptionDescriptor)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigSpec struct {
    +	DynamicData
    +
    +	ChangeVersion                string                            `xml:"changeVersion,omitempty"`
    +	Name                         string                            `xml:"name,omitempty"`
    +	Version                      string                            `xml:"version,omitempty"`
    +	CreateDate                   *time.Time                        `xml:"createDate"`
    +	Uuid                         string                            `xml:"uuid,omitempty"`
    +	InstanceUuid                 string                            `xml:"instanceUuid,omitempty"`
    +	NpivNodeWorldWideName        []int64                           `xml:"npivNodeWorldWideName,omitempty"`
    +	NpivPortWorldWideName        []int64                           `xml:"npivPortWorldWideName,omitempty"`
    +	NpivWorldWideNameType        string                            `xml:"npivWorldWideNameType,omitempty"`
    +	NpivDesiredNodeWwns          int16                             `xml:"npivDesiredNodeWwns,omitempty"`
    +	NpivDesiredPortWwns          int16                             `xml:"npivDesiredPortWwns,omitempty"`
    +	NpivTemporaryDisabled        *bool                             `xml:"npivTemporaryDisabled"`
    +	NpivOnNonRdmDisks            *bool                             `xml:"npivOnNonRdmDisks"`
    +	NpivWorldWideNameOp          string                            `xml:"npivWorldWideNameOp,omitempty"`
    +	LocationId                   string                            `xml:"locationId,omitempty"`
    +	GuestId                      string                            `xml:"guestId,omitempty"`
    +	AlternateGuestName           string                            `xml:"alternateGuestName,omitempty"`
    +	Annotation                   string                            `xml:"annotation,omitempty"`
    +	Files                        *VirtualMachineFileInfo           `xml:"files,omitempty"`
    +	Tools                        *ToolsConfigInfo                  `xml:"tools,omitempty"`
    +	Flags                        *VirtualMachineFlagInfo           `xml:"flags,omitempty"`
    +	ConsolePreferences           *VirtualMachineConsolePreferences `xml:"consolePreferences,omitempty"`
    +	PowerOpInfo                  *VirtualMachineDefaultPowerOpInfo `xml:"powerOpInfo,omitempty"`
    +	NumCPUs                      int32                             `xml:"numCPUs,omitempty"`
    +	NumCoresPerSocket            int32                             `xml:"numCoresPerSocket,omitempty"`
    +	MemoryMB                     int64                             `xml:"memoryMB,omitempty"`
    +	MemoryHotAddEnabled          *bool                             `xml:"memoryHotAddEnabled"`
    +	CpuHotAddEnabled             *bool                             `xml:"cpuHotAddEnabled"`
    +	CpuHotRemoveEnabled          *bool                             `xml:"cpuHotRemoveEnabled"`
    +	VirtualICH7MPresent          *bool                             `xml:"virtualICH7MPresent"`
    +	VirtualSMCPresent            *bool                             `xml:"virtualSMCPresent"`
    +	DeviceChange                 []BaseVirtualDeviceConfigSpec     `xml:"deviceChange,omitempty,typeattr"`
    +	CpuAllocation                *ResourceAllocationInfo           `xml:"cpuAllocation,omitempty"`
    +	MemoryAllocation             *ResourceAllocationInfo           `xml:"memoryAllocation,omitempty"`
    +	LatencySensitivity           *LatencySensitivity               `xml:"latencySensitivity,omitempty"`
    +	CpuAffinity                  *VirtualMachineAffinityInfo       `xml:"cpuAffinity,omitempty"`
    +	MemoryAffinity               *VirtualMachineAffinityInfo       `xml:"memoryAffinity,omitempty"`
    +	NetworkShaper                *VirtualMachineNetworkShaperInfo  `xml:"networkShaper,omitempty"`
    +	CpuFeatureMask               []VirtualMachineCpuIdInfoSpec     `xml:"cpuFeatureMask,omitempty"`
    +	ExtraConfig                  []BaseOptionValue                 `xml:"extraConfig,omitempty,typeattr"`
    +	SwapPlacement                string                            `xml:"swapPlacement,omitempty"`
    +	BootOptions                  *VirtualMachineBootOptions        `xml:"bootOptions,omitempty"`
    +	VAppConfig                   BaseVmConfigSpec                  `xml:"vAppConfig,omitempty,typeattr"`
    +	FtInfo                       BaseFaultToleranceConfigInfo      `xml:"ftInfo,omitempty,typeattr"`
    +	RepConfig                    *ReplicationConfigSpec            `xml:"repConfig,omitempty"`
    +	VAppConfigRemoved            *bool                             `xml:"vAppConfigRemoved"`
    +	VAssertsEnabled              *bool                             `xml:"vAssertsEnabled"`
    +	ChangeTrackingEnabled        *bool                             `xml:"changeTrackingEnabled"`
    +	Firmware                     string                            `xml:"firmware,omitempty"`
    +	MaxMksConnections            int32                             `xml:"maxMksConnections,omitempty"`
    +	GuestAutoLockEnabled         *bool                             `xml:"guestAutoLockEnabled"`
    +	ManagedBy                    *ManagedByInfo                    `xml:"managedBy,omitempty"`
    +	MemoryReservationLockedToMax *bool                             `xml:"memoryReservationLockedToMax"`
    +	NestedHVEnabled              *bool                             `xml:"nestedHVEnabled"`
    +	VPMCEnabled                  *bool                             `xml:"vPMCEnabled"`
    +	ScheduledHardwareUpgradeInfo *ScheduledHardwareUpgradeInfo     `xml:"scheduledHardwareUpgradeInfo,omitempty"`
    +	VmProfile                    []BaseVirtualMachineProfileSpec   `xml:"vmProfile,omitempty,typeattr"`
    +	MessageBusTunnelEnabled      *bool                             `xml:"messageBusTunnelEnabled"`
    +	Crypto                       BaseCryptoSpec                    `xml:"crypto,omitempty,typeattr"`
    +	MigrateEncryption            string                            `xml:"migrateEncryption,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineConfigSpec"] = reflect.TypeOf((*VirtualMachineConfigSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineConfigSummary struct {
    +	DynamicData
    +
    +	Name                string                       `xml:"name"`
    +	Template            bool                         `xml:"template"`
    +	VmPathName          string                       `xml:"vmPathName"`
    +	MemorySizeMB        int32                        `xml:"memorySizeMB,omitempty"`
    +	CpuReservation      int32                        `xml:"cpuReservation,omitempty"`
    +	MemoryReservation   int32                        `xml:"memoryReservation,omitempty"`
    +	NumCpu              int32                        `xml:"numCpu,omitempty"`
    +	NumEthernetCards    int32                        `xml:"numEthernetCards,omitempty"`
    +	NumVirtualDisks     int32                        `xml:"numVirtualDisks,omitempty"`
    +	Uuid                string                       `xml:"uuid,omitempty"`
    +	InstanceUuid        string                       `xml:"instanceUuid,omitempty"`
    +	GuestId             string                       `xml:"guestId,omitempty"`
    +	GuestFullName       string                       `xml:"guestFullName,omitempty"`
    +	Annotation          string                       `xml:"annotation,omitempty"`
    +	Product             *VAppProductInfo             `xml:"product,omitempty"`
    +	InstallBootRequired *bool                        `xml:"installBootRequired"`
    +	FtInfo              BaseFaultToleranceConfigInfo `xml:"ftInfo,omitempty,typeattr"`
    +	ManagedBy           *ManagedByInfo               `xml:"managedBy,omitempty"`
    +	TpmPresent          *bool                        `xml:"tpmPresent"`
    +	NumVmiopBackings    int32                        `xml:"numVmiopBackings,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineConfigSummary"] = reflect.TypeOf((*VirtualMachineConfigSummary)(nil)).Elem()
    +}
    +
    +type VirtualMachineConsolePreferences struct {
    +	DynamicData
    +
    +	PowerOnWhenOpened        *bool `xml:"powerOnWhenOpened"`
    +	EnterFullScreenOnPowerOn *bool `xml:"enterFullScreenOnPowerOn"`
    +	CloseOnPowerOffOrSuspend *bool `xml:"closeOnPowerOffOrSuspend"`
    +}
    +
    +func init() {
    +	t["VirtualMachineConsolePreferences"] = reflect.TypeOf((*VirtualMachineConsolePreferences)(nil)).Elem()
    +}
    +
    +type VirtualMachineCpuIdInfoSpec struct {
    +	ArrayUpdateSpec
    +
    +	Info *HostCpuIdInfo `xml:"info,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineCpuIdInfoSpec"] = reflect.TypeOf((*VirtualMachineCpuIdInfoSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineDatastoreInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	Datastore              DatastoreSummary    `xml:"datastore"`
    +	Capability             DatastoreCapability `xml:"capability"`
    +	MaxFileSize            int64               `xml:"maxFileSize"`
    +	MaxVirtualDiskCapacity int64               `xml:"maxVirtualDiskCapacity,omitempty"`
    +	MaxPhysicalRDMFileSize int64               `xml:"maxPhysicalRDMFileSize,omitempty"`
    +	MaxVirtualRDMFileSize  int64               `xml:"maxVirtualRDMFileSize,omitempty"`
    +	Mode                   string              `xml:"mode"`
    +	VStorageSupport        string              `xml:"vStorageSupport,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineDatastoreInfo"] = reflect.TypeOf((*VirtualMachineDatastoreInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineDatastoreVolumeOption struct {
    +	DynamicData
    +
    +	FileSystemType string `xml:"fileSystemType"`
    +	MajorVersion   int32  `xml:"majorVersion,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineDatastoreVolumeOption"] = reflect.TypeOf((*VirtualMachineDatastoreVolumeOption)(nil)).Elem()
    +}
    +
    +type VirtualMachineDefaultPowerOpInfo struct {
    +	DynamicData
    +
    +	PowerOffType        string `xml:"powerOffType,omitempty"`
    +	SuspendType         string `xml:"suspendType,omitempty"`
    +	ResetType           string `xml:"resetType,omitempty"`
    +	DefaultPowerOffType string `xml:"defaultPowerOffType,omitempty"`
    +	DefaultSuspendType  string `xml:"defaultSuspendType,omitempty"`
    +	DefaultResetType    string `xml:"defaultResetType,omitempty"`
    +	StandbyAction       string `xml:"standbyAction,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineDefaultPowerOpInfo"] = reflect.TypeOf((*VirtualMachineDefaultPowerOpInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineDefaultProfileSpec struct {
    +	VirtualMachineProfileSpec
    +}
    +
    +func init() {
    +	t["VirtualMachineDefaultProfileSpec"] = reflect.TypeOf((*VirtualMachineDefaultProfileSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineDefinedProfileSpec struct {
    +	VirtualMachineProfileSpec
    +
    +	ProfileId       string                        `xml:"profileId"`
    +	ReplicationSpec *ReplicationSpec              `xml:"replicationSpec,omitempty"`
    +	ProfileData     *VirtualMachineProfileRawData `xml:"profileData,omitempty"`
    +	ProfileParams   []KeyValue                    `xml:"profileParams,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineDefinedProfileSpec"] = reflect.TypeOf((*VirtualMachineDefinedProfileSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineDeviceRuntimeInfo struct {
    +	DynamicData
    +
    +	RuntimeState BaseVirtualMachineDeviceRuntimeInfoDeviceRuntimeState `xml:"runtimeState,typeattr"`
    +	Key          int32                                                 `xml:"key"`
    +}
    +
    +func init() {
    +	t["VirtualMachineDeviceRuntimeInfo"] = reflect.TypeOf((*VirtualMachineDeviceRuntimeInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineDeviceRuntimeInfoDeviceRuntimeState struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["VirtualMachineDeviceRuntimeInfoDeviceRuntimeState"] = reflect.TypeOf((*VirtualMachineDeviceRuntimeInfoDeviceRuntimeState)(nil)).Elem()
    +}
    +
    +type VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeState struct {
    +	VirtualMachineDeviceRuntimeInfoDeviceRuntimeState
    +
    +	VmDirectPathGen2Active                 bool                               `xml:"vmDirectPathGen2Active"`
    +	VmDirectPathGen2InactiveReasonVm       []string                           `xml:"vmDirectPathGen2InactiveReasonVm,omitempty"`
    +	VmDirectPathGen2InactiveReasonOther    []string                           `xml:"vmDirectPathGen2InactiveReasonOther,omitempty"`
    +	VmDirectPathGen2InactiveReasonExtended string                             `xml:"vmDirectPathGen2InactiveReasonExtended,omitempty"`
    +	ReservationStatus                      string                             `xml:"reservationStatus,omitempty"`
    +	AttachmentStatus                       string                             `xml:"attachmentStatus,omitempty"`
    +	FeatureRequirement                     []VirtualMachineFeatureRequirement `xml:"featureRequirement,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeState"] = reflect.TypeOf((*VirtualMachineDeviceRuntimeInfoVirtualEthernetCardRuntimeState)(nil)).Elem()
    +}
    +
    +type VirtualMachineDiskDeviceInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	Capacity int64                    `xml:"capacity,omitempty"`
    +	Vm       []ManagedObjectReference `xml:"vm,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineDiskDeviceInfo"] = reflect.TypeOf((*VirtualMachineDiskDeviceInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineDisplayTopology struct {
    +	DynamicData
    +
    +	X      int32 `xml:"x"`
    +	Y      int32 `xml:"y"`
    +	Width  int32 `xml:"width"`
    +	Height int32 `xml:"height"`
    +}
    +
    +func init() {
    +	t["VirtualMachineDisplayTopology"] = reflect.TypeOf((*VirtualMachineDisplayTopology)(nil)).Elem()
    +}
    +
    +type VirtualMachineEmptyProfileSpec struct {
    +	VirtualMachineProfileSpec
    +}
    +
    +func init() {
    +	t["VirtualMachineEmptyProfileSpec"] = reflect.TypeOf((*VirtualMachineEmptyProfileSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineFeatureRequirement struct {
    +	DynamicData
    +
    +	Key         string `xml:"key"`
    +	FeatureName string `xml:"featureName"`
    +	Value       string `xml:"value"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFeatureRequirement"] = reflect.TypeOf((*VirtualMachineFeatureRequirement)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileInfo struct {
    +	DynamicData
    +
    +	VmPathName          string `xml:"vmPathName,omitempty"`
    +	SnapshotDirectory   string `xml:"snapshotDirectory,omitempty"`
    +	SuspendDirectory    string `xml:"suspendDirectory,omitempty"`
    +	LogDirectory        string `xml:"logDirectory,omitempty"`
    +	FtMetadataDirectory string `xml:"ftMetadataDirectory,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileInfo"] = reflect.TypeOf((*VirtualMachineFileInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayout struct {
    +	DynamicData
    +
    +	ConfigFile []string                                 `xml:"configFile,omitempty"`
    +	LogFile    []string                                 `xml:"logFile,omitempty"`
    +	Disk       []VirtualMachineFileLayoutDiskLayout     `xml:"disk,omitempty"`
    +	Snapshot   []VirtualMachineFileLayoutSnapshotLayout `xml:"snapshot,omitempty"`
    +	SwapFile   string                                   `xml:"swapFile,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileLayout"] = reflect.TypeOf((*VirtualMachineFileLayout)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayoutDiskLayout struct {
    +	DynamicData
    +
    +	Key      int32    `xml:"key"`
    +	DiskFile []string `xml:"diskFile"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileLayoutDiskLayout"] = reflect.TypeOf((*VirtualMachineFileLayoutDiskLayout)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayoutEx struct {
    +	DynamicData
    +
    +	File      []VirtualMachineFileLayoutExFileInfo       `xml:"file,omitempty"`
    +	Disk      []VirtualMachineFileLayoutExDiskLayout     `xml:"disk,omitempty"`
    +	Snapshot  []VirtualMachineFileLayoutExSnapshotLayout `xml:"snapshot,omitempty"`
    +	Timestamp time.Time                                  `xml:"timestamp"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileLayoutEx"] = reflect.TypeOf((*VirtualMachineFileLayoutEx)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayoutExDiskLayout struct {
    +	DynamicData
    +
    +	Key   int32                                `xml:"key"`
    +	Chain []VirtualMachineFileLayoutExDiskUnit `xml:"chain,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileLayoutExDiskLayout"] = reflect.TypeOf((*VirtualMachineFileLayoutExDiskLayout)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayoutExDiskUnit struct {
    +	DynamicData
    +
    +	FileKey []int32 `xml:"fileKey"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileLayoutExDiskUnit"] = reflect.TypeOf((*VirtualMachineFileLayoutExDiskUnit)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayoutExFileInfo struct {
    +	DynamicData
    +
    +	Key             int32  `xml:"key"`
    +	Name            string `xml:"name"`
    +	Type            string `xml:"type"`
    +	Size            int64  `xml:"size"`
    +	UniqueSize      int64  `xml:"uniqueSize,omitempty"`
    +	BackingObjectId string `xml:"backingObjectId,omitempty"`
    +	Accessible      *bool  `xml:"accessible"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileLayoutExFileInfo"] = reflect.TypeOf((*VirtualMachineFileLayoutExFileInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayoutExSnapshotLayout struct {
    +	DynamicData
    +
    +	Key       ManagedObjectReference                 `xml:"key"`
    +	DataKey   int32                                  `xml:"dataKey"`
    +	MemoryKey int32                                  `xml:"memoryKey,omitempty"`
    +	Disk      []VirtualMachineFileLayoutExDiskLayout `xml:"disk,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileLayoutExSnapshotLayout"] = reflect.TypeOf((*VirtualMachineFileLayoutExSnapshotLayout)(nil)).Elem()
    +}
    +
    +type VirtualMachineFileLayoutSnapshotLayout struct {
    +	DynamicData
    +
    +	Key          ManagedObjectReference `xml:"key"`
    +	SnapshotFile []string               `xml:"snapshotFile"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFileLayoutSnapshotLayout"] = reflect.TypeOf((*VirtualMachineFileLayoutSnapshotLayout)(nil)).Elem()
    +}
    +
    +type VirtualMachineFlagInfo struct {
    +	DynamicData
    +
    +	DisableAcceleration      *bool  `xml:"disableAcceleration"`
    +	EnableLogging            *bool  `xml:"enableLogging"`
    +	UseToe                   *bool  `xml:"useToe"`
    +	RunWithDebugInfo         *bool  `xml:"runWithDebugInfo"`
    +	MonitorType              string `xml:"monitorType,omitempty"`
    +	HtSharing                string `xml:"htSharing,omitempty"`
    +	SnapshotDisabled         *bool  `xml:"snapshotDisabled"`
    +	SnapshotLocked           *bool  `xml:"snapshotLocked"`
    +	DiskUuidEnabled          *bool  `xml:"diskUuidEnabled"`
    +	VirtualMmuUsage          string `xml:"virtualMmuUsage,omitempty"`
    +	VirtualExecUsage         string `xml:"virtualExecUsage,omitempty"`
    +	SnapshotPowerOffBehavior string `xml:"snapshotPowerOffBehavior,omitempty"`
    +	RecordReplayEnabled      *bool  `xml:"recordReplayEnabled"`
    +	FaultToleranceType       string `xml:"faultToleranceType,omitempty"`
    +	CbrcCacheEnabled         *bool  `xml:"cbrcCacheEnabled"`
    +	VvtdEnabled              *bool  `xml:"vvtdEnabled"`
    +	VbsEnabled               *bool  `xml:"vbsEnabled"`
    +}
    +
    +func init() {
    +	t["VirtualMachineFlagInfo"] = reflect.TypeOf((*VirtualMachineFlagInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineFloppyInfo struct {
    +	VirtualMachineTargetInfo
    +}
    +
    +func init() {
    +	t["VirtualMachineFloppyInfo"] = reflect.TypeOf((*VirtualMachineFloppyInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineForkConfigInfo struct {
    +	DynamicData
    +
    +	ParentEnabled     *bool  `xml:"parentEnabled"`
    +	ChildForkGroupId  string `xml:"childForkGroupId,omitempty"`
    +	ParentForkGroupId string `xml:"parentForkGroupId,omitempty"`
    +	ChildType         string `xml:"childType,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineForkConfigInfo"] = reflect.TypeOf((*VirtualMachineForkConfigInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineGuestIntegrityInfo struct {
    +	DynamicData
    +
    +	Enabled *bool `xml:"enabled"`
    +}
    +
    +func init() {
    +	t["VirtualMachineGuestIntegrityInfo"] = reflect.TypeOf((*VirtualMachineGuestIntegrityInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineGuestQuiesceSpec struct {
    +	DynamicData
    +
    +	Timeout int32 `xml:"timeout,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineGuestQuiesceSpec"] = reflect.TypeOf((*VirtualMachineGuestQuiesceSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineGuestSummary struct {
    +	DynamicData
    +
    +	GuestId             string                    `xml:"guestId,omitempty"`
    +	GuestFullName       string                    `xml:"guestFullName,omitempty"`
    +	ToolsStatus         VirtualMachineToolsStatus `xml:"toolsStatus,omitempty"`
    +	ToolsVersionStatus  string                    `xml:"toolsVersionStatus,omitempty"`
    +	ToolsVersionStatus2 string                    `xml:"toolsVersionStatus2,omitempty"`
    +	ToolsRunningStatus  string                    `xml:"toolsRunningStatus,omitempty"`
    +	HostName            string                    `xml:"hostName,omitempty"`
    +	IpAddress           string                    `xml:"ipAddress,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineGuestSummary"] = reflect.TypeOf((*VirtualMachineGuestSummary)(nil)).Elem()
    +}
    +
    +type VirtualMachineIdeDiskDeviceInfo struct {
    +	VirtualMachineDiskDeviceInfo
    +
    +	PartitionTable []VirtualMachineIdeDiskDevicePartitionInfo `xml:"partitionTable,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineIdeDiskDeviceInfo"] = reflect.TypeOf((*VirtualMachineIdeDiskDeviceInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineIdeDiskDevicePartitionInfo struct {
    +	DynamicData
    +
    +	Id       int32 `xml:"id"`
    +	Capacity int32 `xml:"capacity"`
    +}
    +
    +func init() {
    +	t["VirtualMachineIdeDiskDevicePartitionInfo"] = reflect.TypeOf((*VirtualMachineIdeDiskDevicePartitionInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineImportSpec struct {
    +	ImportSpec
    +
    +	ConfigSpec    VirtualMachineConfigSpec `xml:"configSpec"`
    +	ResPoolEntity *ManagedObjectReference  `xml:"resPoolEntity,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineImportSpec"] = reflect.TypeOf((*VirtualMachineImportSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineInstantCloneSpec struct {
    +	DynamicData
    +
    +	Name     string                     `xml:"name"`
    +	Location VirtualMachineRelocateSpec `xml:"location"`
    +	Config   []BaseOptionValue          `xml:"config,omitempty,typeattr"`
    +	BiosUuid string                     `xml:"biosUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineInstantCloneSpec"] = reflect.TypeOf((*VirtualMachineInstantCloneSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineLegacyNetworkSwitchInfo struct {
    +	DynamicData
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["VirtualMachineLegacyNetworkSwitchInfo"] = reflect.TypeOf((*VirtualMachineLegacyNetworkSwitchInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineMemoryReservationInfo struct {
    +	DynamicData
    +
    +	VirtualMachineMin      int64  `xml:"virtualMachineMin"`
    +	VirtualMachineMax      int64  `xml:"virtualMachineMax"`
    +	VirtualMachineReserved int64  `xml:"virtualMachineReserved"`
    +	AllocationPolicy       string `xml:"allocationPolicy"`
    +}
    +
    +func init() {
    +	t["VirtualMachineMemoryReservationInfo"] = reflect.TypeOf((*VirtualMachineMemoryReservationInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineMemoryReservationSpec struct {
    +	DynamicData
    +
    +	VirtualMachineReserved int64  `xml:"virtualMachineReserved,omitempty"`
    +	AllocationPolicy       string `xml:"allocationPolicy,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineMemoryReservationSpec"] = reflect.TypeOf((*VirtualMachineMemoryReservationSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineMessage struct {
    +	DynamicData
    +
    +	Id       string    `xml:"id"`
    +	Argument []AnyType `xml:"argument,omitempty,typeattr"`
    +	Text     string    `xml:"text,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineMessage"] = reflect.TypeOf((*VirtualMachineMessage)(nil)).Elem()
    +}
    +
    +type VirtualMachineMetadataManagerVmMetadata struct {
    +	DynamicData
    +
    +	VmId     string `xml:"vmId"`
    +	Metadata string `xml:"metadata,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineMetadataManagerVmMetadata"] = reflect.TypeOf((*VirtualMachineMetadataManagerVmMetadata)(nil)).Elem()
    +}
    +
    +type VirtualMachineMetadataManagerVmMetadataInput struct {
    +	DynamicData
    +
    +	Operation  string                                  `xml:"operation"`
    +	VmMetadata VirtualMachineMetadataManagerVmMetadata `xml:"vmMetadata"`
    +}
    +
    +func init() {
    +	t["VirtualMachineMetadataManagerVmMetadataInput"] = reflect.TypeOf((*VirtualMachineMetadataManagerVmMetadataInput)(nil)).Elem()
    +}
    +
    +type VirtualMachineMetadataManagerVmMetadataOwner struct {
    +	DynamicData
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["VirtualMachineMetadataManagerVmMetadataOwner"] = reflect.TypeOf((*VirtualMachineMetadataManagerVmMetadataOwner)(nil)).Elem()
    +}
    +
    +type VirtualMachineMetadataManagerVmMetadataResult struct {
    +	DynamicData
    +
    +	VmMetadata VirtualMachineMetadataManagerVmMetadata `xml:"vmMetadata"`
    +	Error      *LocalizedMethodFault                   `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineMetadataManagerVmMetadataResult"] = reflect.TypeOf((*VirtualMachineMetadataManagerVmMetadataResult)(nil)).Elem()
    +}
    +
    +type VirtualMachineMksTicket struct {
    +	DynamicData
    +
    +	Ticket        string `xml:"ticket"`
    +	CfgFile       string `xml:"cfgFile"`
    +	Host          string `xml:"host,omitempty"`
    +	Port          int32  `xml:"port,omitempty"`
    +	SslThumbprint string `xml:"sslThumbprint,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineMksTicket"] = reflect.TypeOf((*VirtualMachineMksTicket)(nil)).Elem()
    +}
    +
    +type VirtualMachineNetworkInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	Network BaseNetworkSummary `xml:"network,typeattr"`
    +	Vswitch string             `xml:"vswitch,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineNetworkInfo"] = reflect.TypeOf((*VirtualMachineNetworkInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineNetworkShaperInfo struct {
    +	DynamicData
    +
    +	Enabled    *bool `xml:"enabled"`
    +	PeakBps    int64 `xml:"peakBps,omitempty"`
    +	AverageBps int64 `xml:"averageBps,omitempty"`
    +	BurstSize  int64 `xml:"burstSize,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineNetworkShaperInfo"] = reflect.TypeOf((*VirtualMachineNetworkShaperInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineParallelInfo struct {
    +	VirtualMachineTargetInfo
    +}
    +
    +func init() {
    +	t["VirtualMachineParallelInfo"] = reflect.TypeOf((*VirtualMachineParallelInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachinePciPassthroughInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	PciDevice HostPciDevice `xml:"pciDevice"`
    +	SystemId  string        `xml:"systemId"`
    +}
    +
    +func init() {
    +	t["VirtualMachinePciPassthroughInfo"] = reflect.TypeOf((*VirtualMachinePciPassthroughInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachinePciSharedGpuPassthroughInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	Vgpu string `xml:"vgpu"`
    +}
    +
    +func init() {
    +	t["VirtualMachinePciSharedGpuPassthroughInfo"] = reflect.TypeOf((*VirtualMachinePciSharedGpuPassthroughInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineProfileDetails struct {
    +	DynamicData
    +
    +	Profile            []BaseVirtualMachineProfileSpec                  `xml:"profile,omitempty,typeattr"`
    +	DiskProfileDetails []VirtualMachineProfileDetailsDiskProfileDetails `xml:"diskProfileDetails,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineProfileDetails"] = reflect.TypeOf((*VirtualMachineProfileDetails)(nil)).Elem()
    +}
    +
    +type VirtualMachineProfileDetailsDiskProfileDetails struct {
    +	DynamicData
    +
    +	DiskId  int32                           `xml:"diskId"`
    +	Profile []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VirtualMachineProfileDetailsDiskProfileDetails"] = reflect.TypeOf((*VirtualMachineProfileDetailsDiskProfileDetails)(nil)).Elem()
    +}
    +
    +type VirtualMachineProfileRawData struct {
    +	DynamicData
    +
    +	ExtensionKey string `xml:"extensionKey"`
    +	ObjectData   string `xml:"objectData,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineProfileRawData"] = reflect.TypeOf((*VirtualMachineProfileRawData)(nil)).Elem()
    +}
    +
    +type VirtualMachineProfileSpec struct {
    +	DynamicData
    +}
    +
    +func init() {
    +	t["VirtualMachineProfileSpec"] = reflect.TypeOf((*VirtualMachineProfileSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachinePropertyRelation struct {
    +	DynamicData
    +
    +	Key       DynamicProperty   `xml:"key"`
    +	Relations []DynamicProperty `xml:"relations,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachinePropertyRelation"] = reflect.TypeOf((*VirtualMachinePropertyRelation)(nil)).Elem()
    +}
    +
    +type VirtualMachineQuestionInfo struct {
    +	DynamicData
    +
    +	Id      string                  `xml:"id"`
    +	Text    string                  `xml:"text"`
    +	Choice  ChoiceOption            `xml:"choice"`
    +	Message []VirtualMachineMessage `xml:"message,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineQuestionInfo"] = reflect.TypeOf((*VirtualMachineQuestionInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineQuickStats struct {
    +	DynamicData
    +
    +	OverallCpuUsage              int32               `xml:"overallCpuUsage,omitempty"`
    +	OverallCpuDemand             int32               `xml:"overallCpuDemand,omitempty"`
    +	GuestMemoryUsage             int32               `xml:"guestMemoryUsage,omitempty"`
    +	HostMemoryUsage              int32               `xml:"hostMemoryUsage,omitempty"`
    +	GuestHeartbeatStatus         ManagedEntityStatus `xml:"guestHeartbeatStatus"`
    +	DistributedCpuEntitlement    int32               `xml:"distributedCpuEntitlement,omitempty"`
    +	DistributedMemoryEntitlement int32               `xml:"distributedMemoryEntitlement,omitempty"`
    +	StaticCpuEntitlement         int32               `xml:"staticCpuEntitlement,omitempty"`
    +	StaticMemoryEntitlement      int32               `xml:"staticMemoryEntitlement,omitempty"`
    +	PrivateMemory                int32               `xml:"privateMemory,omitempty"`
    +	SharedMemory                 int32               `xml:"sharedMemory,omitempty"`
    +	SwappedMemory                int32               `xml:"swappedMemory,omitempty"`
    +	BalloonedMemory              int32               `xml:"balloonedMemory,omitempty"`
    +	ConsumedOverheadMemory       int32               `xml:"consumedOverheadMemory,omitempty"`
    +	FtLogBandwidth               int32               `xml:"ftLogBandwidth,omitempty"`
    +	FtSecondaryLatency           int32               `xml:"ftSecondaryLatency,omitempty"`
    +	FtLatencyStatus              ManagedEntityStatus `xml:"ftLatencyStatus,omitempty"`
    +	CompressedMemory             int64               `xml:"compressedMemory,omitempty"`
    +	UptimeSeconds                int32               `xml:"uptimeSeconds,omitempty"`
    +	SsdSwappedMemory             int64               `xml:"ssdSwappedMemory,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineQuickStats"] = reflect.TypeOf((*VirtualMachineQuickStats)(nil)).Elem()
    +}
    +
    +type VirtualMachineRelocateSpec struct {
    +	DynamicData
    +
    +	Service      *ServiceLocator                         `xml:"service,omitempty"`
    +	Folder       *ManagedObjectReference                 `xml:"folder,omitempty"`
    +	Datastore    *ManagedObjectReference                 `xml:"datastore,omitempty"`
    +	DiskMoveType string                                  `xml:"diskMoveType,omitempty"`
    +	Pool         *ManagedObjectReference                 `xml:"pool,omitempty"`
    +	Host         *ManagedObjectReference                 `xml:"host,omitempty"`
    +	Disk         []VirtualMachineRelocateSpecDiskLocator `xml:"disk,omitempty"`
    +	Transform    VirtualMachineRelocateTransformation    `xml:"transform,omitempty"`
    +	DeviceChange []BaseVirtualDeviceConfigSpec           `xml:"deviceChange,omitempty,typeattr"`
    +	Profile      []BaseVirtualMachineProfileSpec         `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VirtualMachineRelocateSpec"] = reflect.TypeOf((*VirtualMachineRelocateSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineRelocateSpecDiskLocator struct {
    +	DynamicData
    +
    +	DiskId          int32                           `xml:"diskId"`
    +	Datastore       ManagedObjectReference          `xml:"datastore"`
    +	DiskMoveType    string                          `xml:"diskMoveType,omitempty"`
    +	DiskBackingInfo BaseVirtualDeviceBackingInfo    `xml:"diskBackingInfo,omitempty,typeattr"`
    +	Profile         []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VirtualMachineRelocateSpecDiskLocator"] = reflect.TypeOf((*VirtualMachineRelocateSpecDiskLocator)(nil)).Elem()
    +}
    +
    +type VirtualMachineRuntimeInfo struct {
    +	DynamicData
    +
    +	Device                    []VirtualMachineDeviceRuntimeInfo            `xml:"device,omitempty"`
    +	Host                      *ManagedObjectReference                      `xml:"host,omitempty"`
    +	ConnectionState           VirtualMachineConnectionState                `xml:"connectionState"`
    +	PowerState                VirtualMachinePowerState                     `xml:"powerState"`
    +	FaultToleranceState       VirtualMachineFaultToleranceState            `xml:"faultToleranceState,omitempty"`
    +	DasVmProtection           *VirtualMachineRuntimeInfoDasProtectionState `xml:"dasVmProtection,omitempty"`
    +	ToolsInstallerMounted     bool                                         `xml:"toolsInstallerMounted"`
    +	SuspendTime               *time.Time                                   `xml:"suspendTime"`
    +	BootTime                  *time.Time                                   `xml:"bootTime"`
    +	SuspendInterval           int64                                        `xml:"suspendInterval,omitempty"`
    +	Question                  *VirtualMachineQuestionInfo                  `xml:"question,omitempty"`
    +	MemoryOverhead            int64                                        `xml:"memoryOverhead,omitempty"`
    +	MaxCpuUsage               int32                                        `xml:"maxCpuUsage,omitempty"`
    +	MaxMemoryUsage            int32                                        `xml:"maxMemoryUsage,omitempty"`
    +	NumMksConnections         int32                                        `xml:"numMksConnections"`
    +	RecordReplayState         VirtualMachineRecordReplayState              `xml:"recordReplayState,omitempty"`
    +	CleanPowerOff             *bool                                        `xml:"cleanPowerOff"`
    +	NeedSecondaryReason       string                                       `xml:"needSecondaryReason,omitempty"`
    +	OnlineStandby             *bool                                        `xml:"onlineStandby"`
    +	MinRequiredEVCModeKey     string                                       `xml:"minRequiredEVCModeKey,omitempty"`
    +	ConsolidationNeeded       *bool                                        `xml:"consolidationNeeded"`
    +	OfflineFeatureRequirement []VirtualMachineFeatureRequirement           `xml:"offlineFeatureRequirement,omitempty"`
    +	FeatureRequirement        []VirtualMachineFeatureRequirement           `xml:"featureRequirement,omitempty"`
    +	FeatureMask               []HostFeatureMask                            `xml:"featureMask,omitempty"`
    +	VFlashCacheAllocation     int64                                        `xml:"vFlashCacheAllocation,omitempty"`
    +	Paused                    *bool                                        `xml:"paused"`
    +	SnapshotInBackground      *bool                                        `xml:"snapshotInBackground"`
    +	QuiescedForkParent        *bool                                        `xml:"quiescedForkParent"`
    +	InstantCloneFrozen        *bool                                        `xml:"instantCloneFrozen"`
    +	CryptoState               string                                       `xml:"cryptoState,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineRuntimeInfo"] = reflect.TypeOf((*VirtualMachineRuntimeInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineRuntimeInfoDasProtectionState struct {
    +	DynamicData
    +
    +	DasProtected bool `xml:"dasProtected"`
    +}
    +
    +func init() {
    +	t["VirtualMachineRuntimeInfoDasProtectionState"] = reflect.TypeOf((*VirtualMachineRuntimeInfoDasProtectionState)(nil)).Elem()
    +}
    +
    +type VirtualMachineScsiDiskDeviceInfo struct {
    +	VirtualMachineDiskDeviceInfo
    +
    +	Disk          *HostScsiDisk `xml:"disk,omitempty"`
    +	TransportHint string        `xml:"transportHint,omitempty"`
    +	LunNumber     int32         `xml:"lunNumber,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineScsiDiskDeviceInfo"] = reflect.TypeOf((*VirtualMachineScsiDiskDeviceInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineScsiPassthroughInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	ScsiClass          string `xml:"scsiClass"`
    +	Vendor             string `xml:"vendor"`
    +	PhysicalUnitNumber int32  `xml:"physicalUnitNumber"`
    +}
    +
    +func init() {
    +	t["VirtualMachineScsiPassthroughInfo"] = reflect.TypeOf((*VirtualMachineScsiPassthroughInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineSerialInfo struct {
    +	VirtualMachineTargetInfo
    +}
    +
    +func init() {
    +	t["VirtualMachineSerialInfo"] = reflect.TypeOf((*VirtualMachineSerialInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineSnapshotInfo struct {
    +	DynamicData
    +
    +	CurrentSnapshot  *ManagedObjectReference      `xml:"currentSnapshot,omitempty"`
    +	RootSnapshotList []VirtualMachineSnapshotTree `xml:"rootSnapshotList"`
    +}
    +
    +func init() {
    +	t["VirtualMachineSnapshotInfo"] = reflect.TypeOf((*VirtualMachineSnapshotInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineSnapshotTree struct {
    +	DynamicData
    +
    +	Snapshot          ManagedObjectReference       `xml:"snapshot"`
    +	Vm                ManagedObjectReference       `xml:"vm"`
    +	Name              string                       `xml:"name"`
    +	Description       string                       `xml:"description"`
    +	Id                int32                        `xml:"id,omitempty"`
    +	CreateTime        time.Time                    `xml:"createTime"`
    +	State             VirtualMachinePowerState     `xml:"state"`
    +	Quiesced          bool                         `xml:"quiesced"`
    +	BackupManifest    string                       `xml:"backupManifest,omitempty"`
    +	ChildSnapshotList []VirtualMachineSnapshotTree `xml:"childSnapshotList,omitempty"`
    +	ReplaySupported   *bool                        `xml:"replaySupported"`
    +}
    +
    +func init() {
    +	t["VirtualMachineSnapshotTree"] = reflect.TypeOf((*VirtualMachineSnapshotTree)(nil)).Elem()
    +}
    +
    +type VirtualMachineSoundInfo struct {
    +	VirtualMachineTargetInfo
    +}
    +
    +func init() {
    +	t["VirtualMachineSoundInfo"] = reflect.TypeOf((*VirtualMachineSoundInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineSriovDevicePoolInfo struct {
    +	DynamicData
    +
    +	Key string `xml:"key"`
    +}
    +
    +func init() {
    +	t["VirtualMachineSriovDevicePoolInfo"] = reflect.TypeOf((*VirtualMachineSriovDevicePoolInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineSriovInfo struct {
    +	VirtualMachinePciPassthroughInfo
    +
    +	VirtualFunction bool                                  `xml:"virtualFunction"`
    +	Pnic            string                                `xml:"pnic,omitempty"`
    +	DevicePool      BaseVirtualMachineSriovDevicePoolInfo `xml:"devicePool,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VirtualMachineSriovInfo"] = reflect.TypeOf((*VirtualMachineSriovInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineSriovNetworkDevicePoolInfo struct {
    +	VirtualMachineSriovDevicePoolInfo
    +
    +	SwitchKey  string `xml:"switchKey,omitempty"`
    +	SwitchUuid string `xml:"switchUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineSriovNetworkDevicePoolInfo"] = reflect.TypeOf((*VirtualMachineSriovNetworkDevicePoolInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineStorageInfo struct {
    +	DynamicData
    +
    +	PerDatastoreUsage []VirtualMachineUsageOnDatastore `xml:"perDatastoreUsage,omitempty"`
    +	Timestamp         time.Time                        `xml:"timestamp"`
    +}
    +
    +func init() {
    +	t["VirtualMachineStorageInfo"] = reflect.TypeOf((*VirtualMachineStorageInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineStorageSummary struct {
    +	DynamicData
    +
    +	Committed   int64     `xml:"committed"`
    +	Uncommitted int64     `xml:"uncommitted"`
    +	Unshared    int64     `xml:"unshared"`
    +	Timestamp   time.Time `xml:"timestamp"`
    +}
    +
    +func init() {
    +	t["VirtualMachineStorageSummary"] = reflect.TypeOf((*VirtualMachineStorageSummary)(nil)).Elem()
    +}
    +
    +type VirtualMachineSummary struct {
    +	DynamicData
    +
    +	Vm            *ManagedObjectReference       `xml:"vm,omitempty"`
    +	Runtime       VirtualMachineRuntimeInfo     `xml:"runtime"`
    +	Guest         *VirtualMachineGuestSummary   `xml:"guest,omitempty"`
    +	Config        VirtualMachineConfigSummary   `xml:"config"`
    +	Storage       *VirtualMachineStorageSummary `xml:"storage,omitempty"`
    +	QuickStats    VirtualMachineQuickStats      `xml:"quickStats"`
    +	OverallStatus ManagedEntityStatus           `xml:"overallStatus"`
    +	CustomValue   []BaseCustomFieldValue        `xml:"customValue,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VirtualMachineSummary"] = reflect.TypeOf((*VirtualMachineSummary)(nil)).Elem()
    +}
    +
    +type VirtualMachineTargetInfo struct {
    +	DynamicData
    +
    +	Name             string   `xml:"name"`
    +	ConfigurationTag []string `xml:"configurationTag,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineTargetInfo"] = reflect.TypeOf((*VirtualMachineTargetInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineTicket struct {
    +	DynamicData
    +
    +	Ticket        string `xml:"ticket"`
    +	CfgFile       string `xml:"cfgFile"`
    +	Host          string `xml:"host,omitempty"`
    +	Port          int32  `xml:"port,omitempty"`
    +	SslThumbprint string `xml:"sslThumbprint,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineTicket"] = reflect.TypeOf((*VirtualMachineTicket)(nil)).Elem()
    +}
    +
    +type VirtualMachineUsageOnDatastore struct {
    +	DynamicData
    +
    +	Datastore   ManagedObjectReference `xml:"datastore"`
    +	Committed   int64                  `xml:"committed"`
    +	Uncommitted int64                  `xml:"uncommitted"`
    +	Unshared    int64                  `xml:"unshared"`
    +}
    +
    +func init() {
    +	t["VirtualMachineUsageOnDatastore"] = reflect.TypeOf((*VirtualMachineUsageOnDatastore)(nil)).Elem()
    +}
    +
    +type VirtualMachineUsbInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	Description  string                 `xml:"description"`
    +	Vendor       int32                  `xml:"vendor"`
    +	Product      int32                  `xml:"product"`
    +	PhysicalPath string                 `xml:"physicalPath"`
    +	Family       []string               `xml:"family,omitempty"`
    +	Speed        []string               `xml:"speed,omitempty"`
    +	Summary      *VirtualMachineSummary `xml:"summary,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineUsbInfo"] = reflect.TypeOf((*VirtualMachineUsbInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineVFlashModuleInfo struct {
    +	VirtualMachineTargetInfo
    +
    +	VFlashModule HostVFlashManagerVFlashCacheConfigInfoVFlashModuleConfigOption `xml:"vFlashModule"`
    +}
    +
    +func init() {
    +	t["VirtualMachineVFlashModuleInfo"] = reflect.TypeOf((*VirtualMachineVFlashModuleInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMCIDevice struct {
    +	VirtualDevice
    +
    +	Id                             int64                               `xml:"id,omitempty"`
    +	AllowUnrestrictedCommunication *bool                               `xml:"allowUnrestrictedCommunication"`
    +	FilterEnable                   *bool                               `xml:"filterEnable"`
    +	FilterInfo                     *VirtualMachineVMCIDeviceFilterInfo `xml:"filterInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineVMCIDevice"] = reflect.TypeOf((*VirtualMachineVMCIDevice)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMCIDeviceFilterInfo struct {
    +	DynamicData
    +
    +	Filters []VirtualMachineVMCIDeviceFilterSpec `xml:"filters,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineVMCIDeviceFilterInfo"] = reflect.TypeOf((*VirtualMachineVMCIDeviceFilterInfo)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMCIDeviceFilterSpec struct {
    +	DynamicData
    +
    +	Rank                 int64  `xml:"rank"`
    +	Action               string `xml:"action"`
    +	Protocol             string `xml:"protocol"`
    +	Direction            string `xml:"direction"`
    +	LowerDstPortBoundary int64  `xml:"lowerDstPortBoundary,omitempty"`
    +	UpperDstPortBoundary int64  `xml:"upperDstPortBoundary,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineVMCIDeviceFilterSpec"] = reflect.TypeOf((*VirtualMachineVMCIDeviceFilterSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMCIDeviceOption struct {
    +	VirtualDeviceOption
    +
    +	AllowUnrestrictedCommunication BoolOption                                      `xml:"allowUnrestrictedCommunication"`
    +	FilterSpecOption               *VirtualMachineVMCIDeviceOptionFilterSpecOption `xml:"filterSpecOption,omitempty"`
    +	FilterSupported                *BoolOption                                     `xml:"filterSupported,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineVMCIDeviceOption"] = reflect.TypeOf((*VirtualMachineVMCIDeviceOption)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMCIDeviceOptionFilterSpecOption struct {
    +	DynamicData
    +
    +	Action               ChoiceOption `xml:"action"`
    +	Protocol             ChoiceOption `xml:"protocol"`
    +	Direction            ChoiceOption `xml:"direction"`
    +	LowerDstPortBoundary LongOption   `xml:"lowerDstPortBoundary"`
    +	UpperDstPortBoundary LongOption   `xml:"upperDstPortBoundary"`
    +}
    +
    +func init() {
    +	t["VirtualMachineVMCIDeviceOptionFilterSpecOption"] = reflect.TypeOf((*VirtualMachineVMCIDeviceOptionFilterSpecOption)(nil)).Elem()
    +}
    +
    +type VirtualMachineVMIROM struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualMachineVMIROM"] = reflect.TypeOf((*VirtualMachineVMIROM)(nil)).Elem()
    +}
    +
    +type VirtualMachineVideoCard struct {
    +	VirtualDevice
    +
    +	VideoRamSizeInKB       int64  `xml:"videoRamSizeInKB,omitempty"`
    +	NumDisplays            int32  `xml:"numDisplays,omitempty"`
    +	UseAutoDetect          *bool  `xml:"useAutoDetect"`
    +	Enable3DSupport        *bool  `xml:"enable3DSupport"`
    +	Use3dRenderer          string `xml:"use3dRenderer,omitempty"`
    +	GraphicsMemorySizeInKB int64  `xml:"graphicsMemorySizeInKB,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineVideoCard"] = reflect.TypeOf((*VirtualMachineVideoCard)(nil)).Elem()
    +}
    +
    +type VirtualMachineWindowsQuiesceSpec struct {
    +	VirtualMachineGuestQuiesceSpec
    +
    +	VssBackupType          int32  `xml:"vssBackupType,omitempty"`
    +	VssBootableSystemState *bool  `xml:"vssBootableSystemState"`
    +	VssPartialFileSupport  *bool  `xml:"vssPartialFileSupport"`
    +	VssBackupContext       string `xml:"vssBackupContext,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualMachineWindowsQuiesceSpec"] = reflect.TypeOf((*VirtualMachineWindowsQuiesceSpec)(nil)).Elem()
    +}
    +
    +type VirtualMachineWipeResult struct {
    +	DynamicData
    +
    +	DiskId              int32 `xml:"diskId"`
    +	ShrinkableDiskSpace int64 `xml:"shrinkableDiskSpace"`
    +}
    +
    +func init() {
    +	t["VirtualMachineWipeResult"] = reflect.TypeOf((*VirtualMachineWipeResult)(nil)).Elem()
    +}
    +
    +type VirtualNVDIMM struct {
    +	VirtualDevice
    +
    +	CapacityInMB int64 `xml:"capacityInMB"`
    +}
    +
    +func init() {
    +	t["VirtualNVDIMM"] = reflect.TypeOf((*VirtualNVDIMM)(nil)).Elem()
    +}
    +
    +type VirtualNVDIMMBackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +
    +	Parent   *VirtualNVDIMMBackingInfo `xml:"parent,omitempty"`
    +	ChangeId string                    `xml:"changeId,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualNVDIMMBackingInfo"] = reflect.TypeOf((*VirtualNVDIMMBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualNVDIMMController struct {
    +	VirtualController
    +}
    +
    +func init() {
    +	t["VirtualNVDIMMController"] = reflect.TypeOf((*VirtualNVDIMMController)(nil)).Elem()
    +}
    +
    +type VirtualNVDIMMControllerOption struct {
    +	VirtualControllerOption
    +
    +	NumNVDIMMControllers IntOption `xml:"numNVDIMMControllers"`
    +}
    +
    +func init() {
    +	t["VirtualNVDIMMControllerOption"] = reflect.TypeOf((*VirtualNVDIMMControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualNVDIMMOption struct {
    +	VirtualDeviceOption
    +
    +	CapacityInMB    LongOption `xml:"capacityInMB"`
    +	Growable        bool       `xml:"growable"`
    +	HotGrowable     bool       `xml:"hotGrowable"`
    +	GranularityInMB int64      `xml:"granularityInMB"`
    +}
    +
    +func init() {
    +	t["VirtualNVDIMMOption"] = reflect.TypeOf((*VirtualNVDIMMOption)(nil)).Elem()
    +}
    +
    +type VirtualNVMEController struct {
    +	VirtualController
    +}
    +
    +func init() {
    +	t["VirtualNVMEController"] = reflect.TypeOf((*VirtualNVMEController)(nil)).Elem()
    +}
    +
    +type VirtualNVMEControllerOption struct {
    +	VirtualControllerOption
    +
    +	NumNVMEDisks IntOption `xml:"numNVMEDisks"`
    +}
    +
    +func init() {
    +	t["VirtualNVMEControllerOption"] = reflect.TypeOf((*VirtualNVMEControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualNicManagerNetConfig struct {
    +	DynamicData
    +
    +	NicType            string           `xml:"nicType"`
    +	MultiSelectAllowed bool             `xml:"multiSelectAllowed"`
    +	CandidateVnic      []HostVirtualNic `xml:"candidateVnic,omitempty"`
    +	SelectedVnic       []string         `xml:"selectedVnic,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualNicManagerNetConfig"] = reflect.TypeOf((*VirtualNicManagerNetConfig)(nil)).Elem()
    +}
    +
    +type VirtualPCIController struct {
    +	VirtualController
    +}
    +
    +func init() {
    +	t["VirtualPCIController"] = reflect.TypeOf((*VirtualPCIController)(nil)).Elem()
    +}
    +
    +type VirtualPCIControllerOption struct {
    +	VirtualControllerOption
    +
    +	NumSCSIControllers            IntOption  `xml:"numSCSIControllers"`
    +	NumEthernetCards              IntOption  `xml:"numEthernetCards"`
    +	NumVideoCards                 IntOption  `xml:"numVideoCards"`
    +	NumSoundCards                 IntOption  `xml:"numSoundCards"`
    +	NumVmiRoms                    IntOption  `xml:"numVmiRoms"`
    +	NumVmciDevices                *IntOption `xml:"numVmciDevices,omitempty"`
    +	NumPCIPassthroughDevices      *IntOption `xml:"numPCIPassthroughDevices,omitempty"`
    +	NumSasSCSIControllers         *IntOption `xml:"numSasSCSIControllers,omitempty"`
    +	NumVmxnet3EthernetCards       *IntOption `xml:"numVmxnet3EthernetCards,omitempty"`
    +	NumParaVirtualSCSIControllers *IntOption `xml:"numParaVirtualSCSIControllers,omitempty"`
    +	NumSATAControllers            *IntOption `xml:"numSATAControllers,omitempty"`
    +	NumNVMEControllers            *IntOption `xml:"numNVMEControllers,omitempty"`
    +	NumVmxnet3VrdmaEthernetCards  *IntOption `xml:"numVmxnet3VrdmaEthernetCards,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualPCIControllerOption"] = reflect.TypeOf((*VirtualPCIControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualPCIPassthrough struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualPCIPassthrough"] = reflect.TypeOf((*VirtualPCIPassthrough)(nil)).Elem()
    +}
    +
    +type VirtualPCIPassthroughDeviceBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +
    +	Id       string `xml:"id"`
    +	DeviceId string `xml:"deviceId"`
    +	SystemId string `xml:"systemId"`
    +	VendorId int16  `xml:"vendorId"`
    +}
    +
    +func init() {
    +	t["VirtualPCIPassthroughDeviceBackingInfo"] = reflect.TypeOf((*VirtualPCIPassthroughDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualPCIPassthroughDeviceBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualPCIPassthroughDeviceBackingOption"] = reflect.TypeOf((*VirtualPCIPassthroughDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualPCIPassthroughOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualPCIPassthroughOption"] = reflect.TypeOf((*VirtualPCIPassthroughOption)(nil)).Elem()
    +}
    +
    +type VirtualPCIPassthroughPluginBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualPCIPassthroughPluginBackingInfo"] = reflect.TypeOf((*VirtualPCIPassthroughPluginBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualPCIPassthroughPluginBackingOption struct {
    +	VirtualDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualPCIPassthroughPluginBackingOption"] = reflect.TypeOf((*VirtualPCIPassthroughPluginBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualPCIPassthroughVmiopBackingInfo struct {
    +	VirtualPCIPassthroughPluginBackingInfo
    +
    +	Vgpu string `xml:"vgpu,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualPCIPassthroughVmiopBackingInfo"] = reflect.TypeOf((*VirtualPCIPassthroughVmiopBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualPCIPassthroughVmiopBackingOption struct {
    +	VirtualPCIPassthroughPluginBackingOption
    +
    +	Vgpu         StringOption `xml:"vgpu"`
    +	MaxInstances int32        `xml:"maxInstances"`
    +}
    +
    +func init() {
    +	t["VirtualPCIPassthroughVmiopBackingOption"] = reflect.TypeOf((*VirtualPCIPassthroughVmiopBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualPCNet32 struct {
    +	VirtualEthernetCard
    +}
    +
    +func init() {
    +	t["VirtualPCNet32"] = reflect.TypeOf((*VirtualPCNet32)(nil)).Elem()
    +}
    +
    +type VirtualPCNet32Option struct {
    +	VirtualEthernetCardOption
    +
    +	SupportsMorphing bool `xml:"supportsMorphing"`
    +}
    +
    +func init() {
    +	t["VirtualPCNet32Option"] = reflect.TypeOf((*VirtualPCNet32Option)(nil)).Elem()
    +}
    +
    +type VirtualPS2Controller struct {
    +	VirtualController
    +}
    +
    +func init() {
    +	t["VirtualPS2Controller"] = reflect.TypeOf((*VirtualPS2Controller)(nil)).Elem()
    +}
    +
    +type VirtualPS2ControllerOption struct {
    +	VirtualControllerOption
    +
    +	NumKeyboards       IntOption `xml:"numKeyboards"`
    +	NumPointingDevices IntOption `xml:"numPointingDevices"`
    +}
    +
    +func init() {
    +	t["VirtualPS2ControllerOption"] = reflect.TypeOf((*VirtualPS2ControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualParallelPort struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualParallelPort"] = reflect.TypeOf((*VirtualParallelPort)(nil)).Elem()
    +}
    +
    +type VirtualParallelPortDeviceBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualParallelPortDeviceBackingInfo"] = reflect.TypeOf((*VirtualParallelPortDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualParallelPortDeviceBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualParallelPortDeviceBackingOption"] = reflect.TypeOf((*VirtualParallelPortDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualParallelPortFileBackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualParallelPortFileBackingInfo"] = reflect.TypeOf((*VirtualParallelPortFileBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualParallelPortFileBackingOption struct {
    +	VirtualDeviceFileBackingOption
    +}
    +
    +func init() {
    +	t["VirtualParallelPortFileBackingOption"] = reflect.TypeOf((*VirtualParallelPortFileBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualParallelPortOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualParallelPortOption"] = reflect.TypeOf((*VirtualParallelPortOption)(nil)).Elem()
    +}
    +
    +type VirtualPointingDevice struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualPointingDevice"] = reflect.TypeOf((*VirtualPointingDevice)(nil)).Elem()
    +}
    +
    +type VirtualPointingDeviceBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +
    +	HostPointingDevice ChoiceOption `xml:"hostPointingDevice"`
    +}
    +
    +func init() {
    +	t["VirtualPointingDeviceBackingOption"] = reflect.TypeOf((*VirtualPointingDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualPointingDeviceDeviceBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +
    +	HostPointingDevice string `xml:"hostPointingDevice"`
    +}
    +
    +func init() {
    +	t["VirtualPointingDeviceDeviceBackingInfo"] = reflect.TypeOf((*VirtualPointingDeviceDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualPointingDeviceOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualPointingDeviceOption"] = reflect.TypeOf((*VirtualPointingDeviceOption)(nil)).Elem()
    +}
    +
    +type VirtualSATAController struct {
    +	VirtualController
    +}
    +
    +func init() {
    +	t["VirtualSATAController"] = reflect.TypeOf((*VirtualSATAController)(nil)).Elem()
    +}
    +
    +type VirtualSATAControllerOption struct {
    +	VirtualControllerOption
    +
    +	NumSATADisks  IntOption `xml:"numSATADisks"`
    +	NumSATACdroms IntOption `xml:"numSATACdroms"`
    +}
    +
    +func init() {
    +	t["VirtualSATAControllerOption"] = reflect.TypeOf((*VirtualSATAControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualSCSIController struct {
    +	VirtualController
    +
    +	HotAddRemove       *bool              `xml:"hotAddRemove"`
    +	SharedBus          VirtualSCSISharing `xml:"sharedBus"`
    +	ScsiCtlrUnitNumber int32              `xml:"scsiCtlrUnitNumber,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualSCSIController"] = reflect.TypeOf((*VirtualSCSIController)(nil)).Elem()
    +}
    +
    +type VirtualSCSIControllerOption struct {
    +	VirtualControllerOption
    +
    +	NumSCSIDisks       IntOption            `xml:"numSCSIDisks"`
    +	NumSCSICdroms      IntOption            `xml:"numSCSICdroms"`
    +	NumSCSIPassthrough IntOption            `xml:"numSCSIPassthrough"`
    +	Sharing            []VirtualSCSISharing `xml:"sharing"`
    +	DefaultSharedIndex int32                `xml:"defaultSharedIndex"`
    +	HotAddRemove       BoolOption           `xml:"hotAddRemove"`
    +	ScsiCtlrUnitNumber int32                `xml:"scsiCtlrUnitNumber"`
    +}
    +
    +func init() {
    +	t["VirtualSCSIControllerOption"] = reflect.TypeOf((*VirtualSCSIControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualSCSIPassthrough struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualSCSIPassthrough"] = reflect.TypeOf((*VirtualSCSIPassthrough)(nil)).Elem()
    +}
    +
    +type VirtualSCSIPassthroughDeviceBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualSCSIPassthroughDeviceBackingInfo"] = reflect.TypeOf((*VirtualSCSIPassthroughDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualSCSIPassthroughDeviceBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualSCSIPassthroughDeviceBackingOption"] = reflect.TypeOf((*VirtualSCSIPassthroughDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualSCSIPassthroughOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualSCSIPassthroughOption"] = reflect.TypeOf((*VirtualSCSIPassthroughOption)(nil)).Elem()
    +}
    +
    +type VirtualSIOController struct {
    +	VirtualController
    +}
    +
    +func init() {
    +	t["VirtualSIOController"] = reflect.TypeOf((*VirtualSIOController)(nil)).Elem()
    +}
    +
    +type VirtualSIOControllerOption struct {
    +	VirtualControllerOption
    +
    +	NumFloppyDrives  IntOption `xml:"numFloppyDrives"`
    +	NumSerialPorts   IntOption `xml:"numSerialPorts"`
    +	NumParallelPorts IntOption `xml:"numParallelPorts"`
    +}
    +
    +func init() {
    +	t["VirtualSIOControllerOption"] = reflect.TypeOf((*VirtualSIOControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualSerialPort struct {
    +	VirtualDevice
    +
    +	YieldOnPoll bool `xml:"yieldOnPoll"`
    +}
    +
    +func init() {
    +	t["VirtualSerialPort"] = reflect.TypeOf((*VirtualSerialPort)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortDeviceBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualSerialPortDeviceBackingInfo"] = reflect.TypeOf((*VirtualSerialPortDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortDeviceBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualSerialPortDeviceBackingOption"] = reflect.TypeOf((*VirtualSerialPortDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortFileBackingInfo struct {
    +	VirtualDeviceFileBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualSerialPortFileBackingInfo"] = reflect.TypeOf((*VirtualSerialPortFileBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortFileBackingOption struct {
    +	VirtualDeviceFileBackingOption
    +}
    +
    +func init() {
    +	t["VirtualSerialPortFileBackingOption"] = reflect.TypeOf((*VirtualSerialPortFileBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortOption struct {
    +	VirtualDeviceOption
    +
    +	YieldOnPoll BoolOption `xml:"yieldOnPoll"`
    +}
    +
    +func init() {
    +	t["VirtualSerialPortOption"] = reflect.TypeOf((*VirtualSerialPortOption)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortPipeBackingInfo struct {
    +	VirtualDevicePipeBackingInfo
    +
    +	Endpoint string `xml:"endpoint"`
    +	NoRxLoss *bool  `xml:"noRxLoss"`
    +}
    +
    +func init() {
    +	t["VirtualSerialPortPipeBackingInfo"] = reflect.TypeOf((*VirtualSerialPortPipeBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortPipeBackingOption struct {
    +	VirtualDevicePipeBackingOption
    +
    +	Endpoint ChoiceOption `xml:"endpoint"`
    +	NoRxLoss BoolOption   `xml:"noRxLoss"`
    +}
    +
    +func init() {
    +	t["VirtualSerialPortPipeBackingOption"] = reflect.TypeOf((*VirtualSerialPortPipeBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortThinPrintBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualSerialPortThinPrintBackingInfo"] = reflect.TypeOf((*VirtualSerialPortThinPrintBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortThinPrintBackingOption struct {
    +	VirtualDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualSerialPortThinPrintBackingOption"] = reflect.TypeOf((*VirtualSerialPortThinPrintBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortURIBackingInfo struct {
    +	VirtualDeviceURIBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualSerialPortURIBackingInfo"] = reflect.TypeOf((*VirtualSerialPortURIBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualSerialPortURIBackingOption struct {
    +	VirtualDeviceURIBackingOption
    +}
    +
    +func init() {
    +	t["VirtualSerialPortURIBackingOption"] = reflect.TypeOf((*VirtualSerialPortURIBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualSoundBlaster16 struct {
    +	VirtualSoundCard
    +}
    +
    +func init() {
    +	t["VirtualSoundBlaster16"] = reflect.TypeOf((*VirtualSoundBlaster16)(nil)).Elem()
    +}
    +
    +type VirtualSoundBlaster16Option struct {
    +	VirtualSoundCardOption
    +}
    +
    +func init() {
    +	t["VirtualSoundBlaster16Option"] = reflect.TypeOf((*VirtualSoundBlaster16Option)(nil)).Elem()
    +}
    +
    +type VirtualSoundCard struct {
    +	VirtualDevice
    +}
    +
    +func init() {
    +	t["VirtualSoundCard"] = reflect.TypeOf((*VirtualSoundCard)(nil)).Elem()
    +}
    +
    +type VirtualSoundCardDeviceBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualSoundCardDeviceBackingInfo"] = reflect.TypeOf((*VirtualSoundCardDeviceBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualSoundCardDeviceBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualSoundCardDeviceBackingOption"] = reflect.TypeOf((*VirtualSoundCardDeviceBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualSoundCardOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualSoundCardOption"] = reflect.TypeOf((*VirtualSoundCardOption)(nil)).Elem()
    +}
    +
    +type VirtualSriovEthernetCard struct {
    +	VirtualEthernetCard
    +
    +	AllowGuestOSMtuChange *bool                                     `xml:"allowGuestOSMtuChange"`
    +	SriovBacking          *VirtualSriovEthernetCardSriovBackingInfo `xml:"sriovBacking,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualSriovEthernetCard"] = reflect.TypeOf((*VirtualSriovEthernetCard)(nil)).Elem()
    +}
    +
    +type VirtualSriovEthernetCardOption struct {
    +	VirtualEthernetCardOption
    +}
    +
    +func init() {
    +	t["VirtualSriovEthernetCardOption"] = reflect.TypeOf((*VirtualSriovEthernetCardOption)(nil)).Elem()
    +}
    +
    +type VirtualSriovEthernetCardSriovBackingInfo struct {
    +	VirtualDeviceBackingInfo
    +
    +	PhysicalFunctionBacking *VirtualPCIPassthroughDeviceBackingInfo `xml:"physicalFunctionBacking,omitempty"`
    +	VirtualFunctionBacking  *VirtualPCIPassthroughDeviceBackingInfo `xml:"virtualFunctionBacking,omitempty"`
    +	VirtualFunctionIndex    int32                                   `xml:"virtualFunctionIndex,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualSriovEthernetCardSriovBackingInfo"] = reflect.TypeOf((*VirtualSriovEthernetCardSriovBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualSriovEthernetCardSriovBackingOption struct {
    +	VirtualDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualSriovEthernetCardSriovBackingOption"] = reflect.TypeOf((*VirtualSriovEthernetCardSriovBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualSwitchProfile struct {
    +	ApplyProfile
    +
    +	Key           string               `xml:"key"`
    +	Name          string               `xml:"name"`
    +	Link          LinkProfile          `xml:"link"`
    +	NumPorts      NumPortsProfile      `xml:"numPorts"`
    +	NetworkPolicy NetworkPolicyProfile `xml:"networkPolicy"`
    +}
    +
    +func init() {
    +	t["VirtualSwitchProfile"] = reflect.TypeOf((*VirtualSwitchProfile)(nil)).Elem()
    +}
    +
    +type VirtualSwitchSelectionProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["VirtualSwitchSelectionProfile"] = reflect.TypeOf((*VirtualSwitchSelectionProfile)(nil)).Elem()
    +}
    +
    +type VirtualTPM struct {
    +	VirtualDevice
    +
    +	EndorsementKeyCertificateSigningRequest [][]byte `xml:"endorsementKeyCertificateSigningRequest,omitempty"`
    +	EndorsementKeyCertificate               [][]byte `xml:"endorsementKeyCertificate,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualTPM"] = reflect.TypeOf((*VirtualTPM)(nil)).Elem()
    +}
    +
    +type VirtualTPMOption struct {
    +	VirtualDeviceOption
    +
    +	SupportedFirmware []string `xml:"supportedFirmware,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualTPMOption"] = reflect.TypeOf((*VirtualTPMOption)(nil)).Elem()
    +}
    +
    +type VirtualUSB struct {
    +	VirtualDevice
    +
    +	Connected bool     `xml:"connected"`
    +	Vendor    int32    `xml:"vendor,omitempty"`
    +	Product   int32    `xml:"product,omitempty"`
    +	Family    []string `xml:"family,omitempty"`
    +	Speed     []string `xml:"speed,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualUSB"] = reflect.TypeOf((*VirtualUSB)(nil)).Elem()
    +}
    +
    +type VirtualUSBController struct {
    +	VirtualController
    +
    +	AutoConnectDevices *bool `xml:"autoConnectDevices"`
    +	EhciEnabled        *bool `xml:"ehciEnabled"`
    +}
    +
    +func init() {
    +	t["VirtualUSBController"] = reflect.TypeOf((*VirtualUSBController)(nil)).Elem()
    +}
    +
    +type VirtualUSBControllerOption struct {
    +	VirtualControllerOption
    +
    +	AutoConnectDevices BoolOption `xml:"autoConnectDevices"`
    +	EhciSupported      BoolOption `xml:"ehciSupported"`
    +	SupportedSpeeds    []string   `xml:"supportedSpeeds,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualUSBControllerOption"] = reflect.TypeOf((*VirtualUSBControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualUSBControllerPciBusSlotInfo struct {
    +	VirtualDevicePciBusSlotInfo
    +
    +	EhciPciSlotNumber int32 `xml:"ehciPciSlotNumber,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualUSBControllerPciBusSlotInfo"] = reflect.TypeOf((*VirtualUSBControllerPciBusSlotInfo)(nil)).Elem()
    +}
    +
    +type VirtualUSBOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualUSBOption"] = reflect.TypeOf((*VirtualUSBOption)(nil)).Elem()
    +}
    +
    +type VirtualUSBRemoteClientBackingInfo struct {
    +	VirtualDeviceRemoteDeviceBackingInfo
    +
    +	Hostname string `xml:"hostname"`
    +}
    +
    +func init() {
    +	t["VirtualUSBRemoteClientBackingInfo"] = reflect.TypeOf((*VirtualUSBRemoteClientBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualUSBRemoteClientBackingOption struct {
    +	VirtualDeviceRemoteDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualUSBRemoteClientBackingOption"] = reflect.TypeOf((*VirtualUSBRemoteClientBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualUSBRemoteHostBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +
    +	Hostname string `xml:"hostname"`
    +}
    +
    +func init() {
    +	t["VirtualUSBRemoteHostBackingInfo"] = reflect.TypeOf((*VirtualUSBRemoteHostBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualUSBRemoteHostBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualUSBRemoteHostBackingOption"] = reflect.TypeOf((*VirtualUSBRemoteHostBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualUSBUSBBackingInfo struct {
    +	VirtualDeviceDeviceBackingInfo
    +}
    +
    +func init() {
    +	t["VirtualUSBUSBBackingInfo"] = reflect.TypeOf((*VirtualUSBUSBBackingInfo)(nil)).Elem()
    +}
    +
    +type VirtualUSBUSBBackingOption struct {
    +	VirtualDeviceDeviceBackingOption
    +}
    +
    +func init() {
    +	t["VirtualUSBUSBBackingOption"] = reflect.TypeOf((*VirtualUSBUSBBackingOption)(nil)).Elem()
    +}
    +
    +type VirtualUSBXHCIController struct {
    +	VirtualController
    +
    +	AutoConnectDevices *bool `xml:"autoConnectDevices"`
    +}
    +
    +func init() {
    +	t["VirtualUSBXHCIController"] = reflect.TypeOf((*VirtualUSBXHCIController)(nil)).Elem()
    +}
    +
    +type VirtualUSBXHCIControllerOption struct {
    +	VirtualControllerOption
    +
    +	AutoConnectDevices BoolOption `xml:"autoConnectDevices"`
    +	SupportedSpeeds    []string   `xml:"supportedSpeeds"`
    +}
    +
    +func init() {
    +	t["VirtualUSBXHCIControllerOption"] = reflect.TypeOf((*VirtualUSBXHCIControllerOption)(nil)).Elem()
    +}
    +
    +type VirtualVMIROMOption struct {
    +	VirtualDeviceOption
    +}
    +
    +func init() {
    +	t["VirtualVMIROMOption"] = reflect.TypeOf((*VirtualVMIROMOption)(nil)).Elem()
    +}
    +
    +type VirtualVideoCardOption struct {
    +	VirtualDeviceOption
    +
    +	VideoRamSizeInKB            *LongOption `xml:"videoRamSizeInKB,omitempty"`
    +	NumDisplays                 *IntOption  `xml:"numDisplays,omitempty"`
    +	UseAutoDetect               *BoolOption `xml:"useAutoDetect,omitempty"`
    +	Support3D                   *BoolOption `xml:"support3D,omitempty"`
    +	Use3dRendererSupported      *BoolOption `xml:"use3dRendererSupported,omitempty"`
    +	GraphicsMemorySizeInKB      *LongOption `xml:"graphicsMemorySizeInKB,omitempty"`
    +	GraphicsMemorySizeSupported *BoolOption `xml:"graphicsMemorySizeSupported,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualVideoCardOption"] = reflect.TypeOf((*VirtualVideoCardOption)(nil)).Elem()
    +}
    +
    +type VirtualVmxnet struct {
    +	VirtualEthernetCard
    +}
    +
    +func init() {
    +	t["VirtualVmxnet"] = reflect.TypeOf((*VirtualVmxnet)(nil)).Elem()
    +}
    +
    +type VirtualVmxnet2 struct {
    +	VirtualVmxnet
    +}
    +
    +func init() {
    +	t["VirtualVmxnet2"] = reflect.TypeOf((*VirtualVmxnet2)(nil)).Elem()
    +}
    +
    +type VirtualVmxnet2Option struct {
    +	VirtualVmxnetOption
    +}
    +
    +func init() {
    +	t["VirtualVmxnet2Option"] = reflect.TypeOf((*VirtualVmxnet2Option)(nil)).Elem()
    +}
    +
    +type VirtualVmxnet3 struct {
    +	VirtualVmxnet
    +}
    +
    +func init() {
    +	t["VirtualVmxnet3"] = reflect.TypeOf((*VirtualVmxnet3)(nil)).Elem()
    +}
    +
    +type VirtualVmxnet3Option struct {
    +	VirtualVmxnetOption
    +}
    +
    +func init() {
    +	t["VirtualVmxnet3Option"] = reflect.TypeOf((*VirtualVmxnet3Option)(nil)).Elem()
    +}
    +
    +type VirtualVmxnet3Vrdma struct {
    +	VirtualVmxnet3
    +
    +	DeviceProtocol string `xml:"deviceProtocol,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualVmxnet3Vrdma"] = reflect.TypeOf((*VirtualVmxnet3Vrdma)(nil)).Elem()
    +}
    +
    +type VirtualVmxnet3VrdmaOption struct {
    +	VirtualVmxnet3Option
    +
    +	DeviceProtocol *ChoiceOption `xml:"deviceProtocol,omitempty"`
    +}
    +
    +func init() {
    +	t["VirtualVmxnet3VrdmaOption"] = reflect.TypeOf((*VirtualVmxnet3VrdmaOption)(nil)).Elem()
    +}
    +
    +type VirtualVmxnetOption struct {
    +	VirtualEthernetCardOption
    +}
    +
    +func init() {
    +	t["VirtualVmxnetOption"] = reflect.TypeOf((*VirtualVmxnetOption)(nil)).Elem()
    +}
    +
    +type VlanProfile struct {
    +	ApplyProfile
    +}
    +
    +func init() {
    +	t["VlanProfile"] = reflect.TypeOf((*VlanProfile)(nil)).Elem()
    +}
    +
    +type VmAcquiredMksTicketEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmAcquiredMksTicketEvent"] = reflect.TypeOf((*VmAcquiredMksTicketEvent)(nil)).Elem()
    +}
    +
    +type VmAcquiredTicketEvent struct {
    +	VmEvent
    +
    +	TicketType string `xml:"ticketType"`
    +}
    +
    +func init() {
    +	t["VmAcquiredTicketEvent"] = reflect.TypeOf((*VmAcquiredTicketEvent)(nil)).Elem()
    +}
    +
    +type VmAlreadyExistsInDatacenter struct {
    +	InvalidFolder
    +
    +	Host     ManagedObjectReference   `xml:"host"`
    +	Hostname string                   `xml:"hostname"`
    +	Vm       []ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["VmAlreadyExistsInDatacenter"] = reflect.TypeOf((*VmAlreadyExistsInDatacenter)(nil)).Elem()
    +}
    +
    +type VmAlreadyExistsInDatacenterFault VmAlreadyExistsInDatacenter
    +
    +func init() {
    +	t["VmAlreadyExistsInDatacenterFault"] = reflect.TypeOf((*VmAlreadyExistsInDatacenterFault)(nil)).Elem()
    +}
    +
    +type VmAutoRenameEvent struct {
    +	VmEvent
    +
    +	OldName string `xml:"oldName"`
    +	NewName string `xml:"newName"`
    +}
    +
    +func init() {
    +	t["VmAutoRenameEvent"] = reflect.TypeOf((*VmAutoRenameEvent)(nil)).Elem()
    +}
    +
    +type VmBeingClonedEvent struct {
    +	VmCloneEvent
    +
    +	DestFolder FolderEventArgument `xml:"destFolder"`
    +	DestName   string              `xml:"destName"`
    +	DestHost   HostEventArgument   `xml:"destHost"`
    +}
    +
    +func init() {
    +	t["VmBeingClonedEvent"] = reflect.TypeOf((*VmBeingClonedEvent)(nil)).Elem()
    +}
    +
    +type VmBeingClonedNoFolderEvent struct {
    +	VmCloneEvent
    +
    +	DestName string            `xml:"destName"`
    +	DestHost HostEventArgument `xml:"destHost"`
    +}
    +
    +func init() {
    +	t["VmBeingClonedNoFolderEvent"] = reflect.TypeOf((*VmBeingClonedNoFolderEvent)(nil)).Elem()
    +}
    +
    +type VmBeingCreatedEvent struct {
    +	VmEvent
    +
    +	ConfigSpec *VirtualMachineConfigSpec `xml:"configSpec,omitempty"`
    +}
    +
    +func init() {
    +	t["VmBeingCreatedEvent"] = reflect.TypeOf((*VmBeingCreatedEvent)(nil)).Elem()
    +}
    +
    +type VmBeingDeployedEvent struct {
    +	VmEvent
    +
    +	SrcTemplate VmEventArgument `xml:"srcTemplate"`
    +}
    +
    +func init() {
    +	t["VmBeingDeployedEvent"] = reflect.TypeOf((*VmBeingDeployedEvent)(nil)).Elem()
    +}
    +
    +type VmBeingHotMigratedEvent struct {
    +	VmEvent
    +
    +	DestHost       HostEventArgument        `xml:"destHost"`
    +	DestDatacenter *DatacenterEventArgument `xml:"destDatacenter,omitempty"`
    +	DestDatastore  *DatastoreEventArgument  `xml:"destDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["VmBeingHotMigratedEvent"] = reflect.TypeOf((*VmBeingHotMigratedEvent)(nil)).Elem()
    +}
    +
    +type VmBeingMigratedEvent struct {
    +	VmEvent
    +
    +	DestHost       HostEventArgument        `xml:"destHost"`
    +	DestDatacenter *DatacenterEventArgument `xml:"destDatacenter,omitempty"`
    +	DestDatastore  *DatastoreEventArgument  `xml:"destDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["VmBeingMigratedEvent"] = reflect.TypeOf((*VmBeingMigratedEvent)(nil)).Elem()
    +}
    +
    +type VmBeingRelocatedEvent struct {
    +	VmRelocateSpecEvent
    +
    +	DestHost       HostEventArgument        `xml:"destHost"`
    +	DestDatacenter *DatacenterEventArgument `xml:"destDatacenter,omitempty"`
    +	DestDatastore  *DatastoreEventArgument  `xml:"destDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["VmBeingRelocatedEvent"] = reflect.TypeOf((*VmBeingRelocatedEvent)(nil)).Elem()
    +}
    +
    +type VmCloneEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmCloneEvent"] = reflect.TypeOf((*VmCloneEvent)(nil)).Elem()
    +}
    +
    +type VmCloneFailedEvent struct {
    +	VmCloneEvent
    +
    +	DestFolder FolderEventArgument  `xml:"destFolder"`
    +	DestName   string               `xml:"destName"`
    +	DestHost   HostEventArgument    `xml:"destHost"`
    +	Reason     LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmCloneFailedEvent"] = reflect.TypeOf((*VmCloneFailedEvent)(nil)).Elem()
    +}
    +
    +type VmClonedEvent struct {
    +	VmCloneEvent
    +
    +	SourceVm VmEventArgument `xml:"sourceVm"`
    +}
    +
    +func init() {
    +	t["VmClonedEvent"] = reflect.TypeOf((*VmClonedEvent)(nil)).Elem()
    +}
    +
    +type VmConfigFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["VmConfigFault"] = reflect.TypeOf((*VmConfigFault)(nil)).Elem()
    +}
    +
    +type VmConfigFaultFault BaseVmConfigFault
    +
    +func init() {
    +	t["VmConfigFaultFault"] = reflect.TypeOf((*VmConfigFaultFault)(nil)).Elem()
    +}
    +
    +type VmConfigFileEncryptionInfo struct {
    +	DynamicData
    +
    +	KeyId *CryptoKeyId `xml:"keyId,omitempty"`
    +}
    +
    +func init() {
    +	t["VmConfigFileEncryptionInfo"] = reflect.TypeOf((*VmConfigFileEncryptionInfo)(nil)).Elem()
    +}
    +
    +type VmConfigFileInfo struct {
    +	FileInfo
    +
    +	ConfigVersion int32                       `xml:"configVersion,omitempty"`
    +	Encryption    *VmConfigFileEncryptionInfo `xml:"encryption,omitempty"`
    +}
    +
    +func init() {
    +	t["VmConfigFileInfo"] = reflect.TypeOf((*VmConfigFileInfo)(nil)).Elem()
    +}
    +
    +type VmConfigFileQuery struct {
    +	FileQuery
    +
    +	Filter  *VmConfigFileQueryFilter `xml:"filter,omitempty"`
    +	Details *VmConfigFileQueryFlags  `xml:"details,omitempty"`
    +}
    +
    +func init() {
    +	t["VmConfigFileQuery"] = reflect.TypeOf((*VmConfigFileQuery)(nil)).Elem()
    +}
    +
    +type VmConfigFileQueryFilter struct {
    +	DynamicData
    +
    +	MatchConfigVersion []int32 `xml:"matchConfigVersion,omitempty"`
    +	Encrypted          *bool   `xml:"encrypted"`
    +}
    +
    +func init() {
    +	t["VmConfigFileQueryFilter"] = reflect.TypeOf((*VmConfigFileQueryFilter)(nil)).Elem()
    +}
    +
    +type VmConfigFileQueryFlags struct {
    +	DynamicData
    +
    +	ConfigVersion bool  `xml:"configVersion"`
    +	Encryption    *bool `xml:"encryption"`
    +}
    +
    +func init() {
    +	t["VmConfigFileQueryFlags"] = reflect.TypeOf((*VmConfigFileQueryFlags)(nil)).Elem()
    +}
    +
    +type VmConfigIncompatibleForFaultTolerance struct {
    +	VmConfigFault
    +
    +	Fault *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["VmConfigIncompatibleForFaultTolerance"] = reflect.TypeOf((*VmConfigIncompatibleForFaultTolerance)(nil)).Elem()
    +}
    +
    +type VmConfigIncompatibleForFaultToleranceFault VmConfigIncompatibleForFaultTolerance
    +
    +func init() {
    +	t["VmConfigIncompatibleForFaultToleranceFault"] = reflect.TypeOf((*VmConfigIncompatibleForFaultToleranceFault)(nil)).Elem()
    +}
    +
    +type VmConfigIncompatibleForRecordReplay struct {
    +	VmConfigFault
    +
    +	Fault *LocalizedMethodFault `xml:"fault,omitempty"`
    +}
    +
    +func init() {
    +	t["VmConfigIncompatibleForRecordReplay"] = reflect.TypeOf((*VmConfigIncompatibleForRecordReplay)(nil)).Elem()
    +}
    +
    +type VmConfigIncompatibleForRecordReplayFault VmConfigIncompatibleForRecordReplay
    +
    +func init() {
    +	t["VmConfigIncompatibleForRecordReplayFault"] = reflect.TypeOf((*VmConfigIncompatibleForRecordReplayFault)(nil)).Elem()
    +}
    +
    +type VmConfigInfo struct {
    +	DynamicData
    +
    +	Product                 []VAppProductInfo    `xml:"product,omitempty"`
    +	Property                []VAppPropertyInfo   `xml:"property,omitempty"`
    +	IpAssignment            VAppIPAssignmentInfo `xml:"ipAssignment"`
    +	Eula                    []string             `xml:"eula,omitempty"`
    +	OvfSection              []VAppOvfSectionInfo `xml:"ovfSection,omitempty"`
    +	OvfEnvironmentTransport []string             `xml:"ovfEnvironmentTransport,omitempty"`
    +	InstallBootRequired     bool                 `xml:"installBootRequired"`
    +	InstallBootStopDelay    int32                `xml:"installBootStopDelay"`
    +}
    +
    +func init() {
    +	t["VmConfigInfo"] = reflect.TypeOf((*VmConfigInfo)(nil)).Elem()
    +}
    +
    +type VmConfigMissingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmConfigMissingEvent"] = reflect.TypeOf((*VmConfigMissingEvent)(nil)).Elem()
    +}
    +
    +type VmConfigSpec struct {
    +	DynamicData
    +
    +	Product                 []VAppProductSpec     `xml:"product,omitempty"`
    +	Property                []VAppPropertySpec    `xml:"property,omitempty"`
    +	IpAssignment            *VAppIPAssignmentInfo `xml:"ipAssignment,omitempty"`
    +	Eula                    []string              `xml:"eula,omitempty"`
    +	OvfSection              []VAppOvfSectionSpec  `xml:"ovfSection,omitempty"`
    +	OvfEnvironmentTransport []string              `xml:"ovfEnvironmentTransport,omitempty"`
    +	InstallBootRequired     *bool                 `xml:"installBootRequired"`
    +	InstallBootStopDelay    int32                 `xml:"installBootStopDelay,omitempty"`
    +}
    +
    +func init() {
    +	t["VmConfigSpec"] = reflect.TypeOf((*VmConfigSpec)(nil)).Elem()
    +}
    +
    +type VmConnectedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmConnectedEvent"] = reflect.TypeOf((*VmConnectedEvent)(nil)).Elem()
    +}
    +
    +type VmCreatedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmCreatedEvent"] = reflect.TypeOf((*VmCreatedEvent)(nil)).Elem()
    +}
    +
    +type VmDasBeingResetEvent struct {
    +	VmEvent
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["VmDasBeingResetEvent"] = reflect.TypeOf((*VmDasBeingResetEvent)(nil)).Elem()
    +}
    +
    +type VmDasBeingResetWithScreenshotEvent struct {
    +	VmDasBeingResetEvent
    +
    +	ScreenshotFilePath string `xml:"screenshotFilePath"`
    +}
    +
    +func init() {
    +	t["VmDasBeingResetWithScreenshotEvent"] = reflect.TypeOf((*VmDasBeingResetWithScreenshotEvent)(nil)).Elem()
    +}
    +
    +type VmDasResetFailedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmDasResetFailedEvent"] = reflect.TypeOf((*VmDasResetFailedEvent)(nil)).Elem()
    +}
    +
    +type VmDasUpdateErrorEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmDasUpdateErrorEvent"] = reflect.TypeOf((*VmDasUpdateErrorEvent)(nil)).Elem()
    +}
    +
    +type VmDasUpdateOkEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmDasUpdateOkEvent"] = reflect.TypeOf((*VmDasUpdateOkEvent)(nil)).Elem()
    +}
    +
    +type VmDateRolledBackEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmDateRolledBackEvent"] = reflect.TypeOf((*VmDateRolledBackEvent)(nil)).Elem()
    +}
    +
    +type VmDeployFailedEvent struct {
    +	VmEvent
    +
    +	DestDatastore BaseEntityEventArgument `xml:"destDatastore,typeattr"`
    +	Reason        LocalizedMethodFault    `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmDeployFailedEvent"] = reflect.TypeOf((*VmDeployFailedEvent)(nil)).Elem()
    +}
    +
    +type VmDeployedEvent struct {
    +	VmEvent
    +
    +	SrcTemplate VmEventArgument `xml:"srcTemplate"`
    +}
    +
    +func init() {
    +	t["VmDeployedEvent"] = reflect.TypeOf((*VmDeployedEvent)(nil)).Elem()
    +}
    +
    +type VmDisconnectedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmDisconnectedEvent"] = reflect.TypeOf((*VmDisconnectedEvent)(nil)).Elem()
    +}
    +
    +type VmDiscoveredEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmDiscoveredEvent"] = reflect.TypeOf((*VmDiscoveredEvent)(nil)).Elem()
    +}
    +
    +type VmDiskFailedEvent struct {
    +	VmEvent
    +
    +	Disk   string               `xml:"disk"`
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmDiskFailedEvent"] = reflect.TypeOf((*VmDiskFailedEvent)(nil)).Elem()
    +}
    +
    +type VmDiskFileEncryptionInfo struct {
    +	DynamicData
    +
    +	KeyId *CryptoKeyId `xml:"keyId,omitempty"`
    +}
    +
    +func init() {
    +	t["VmDiskFileEncryptionInfo"] = reflect.TypeOf((*VmDiskFileEncryptionInfo)(nil)).Elem()
    +}
    +
    +type VmDiskFileInfo struct {
    +	FileInfo
    +
    +	DiskType        string                    `xml:"diskType,omitempty"`
    +	CapacityKb      int64                     `xml:"capacityKb,omitempty"`
    +	HardwareVersion int32                     `xml:"hardwareVersion,omitempty"`
    +	ControllerType  string                    `xml:"controllerType,omitempty"`
    +	DiskExtents     []string                  `xml:"diskExtents,omitempty"`
    +	Thin            *bool                     `xml:"thin"`
    +	Encryption      *VmDiskFileEncryptionInfo `xml:"encryption,omitempty"`
    +}
    +
    +func init() {
    +	t["VmDiskFileInfo"] = reflect.TypeOf((*VmDiskFileInfo)(nil)).Elem()
    +}
    +
    +type VmDiskFileQuery struct {
    +	FileQuery
    +
    +	Filter  *VmDiskFileQueryFilter `xml:"filter,omitempty"`
    +	Details *VmDiskFileQueryFlags  `xml:"details,omitempty"`
    +}
    +
    +func init() {
    +	t["VmDiskFileQuery"] = reflect.TypeOf((*VmDiskFileQuery)(nil)).Elem()
    +}
    +
    +type VmDiskFileQueryFilter struct {
    +	DynamicData
    +
    +	DiskType             []string `xml:"diskType,omitempty"`
    +	MatchHardwareVersion []int32  `xml:"matchHardwareVersion,omitempty"`
    +	ControllerType       []string `xml:"controllerType,omitempty"`
    +	Thin                 *bool    `xml:"thin"`
    +	Encrypted            *bool    `xml:"encrypted"`
    +}
    +
    +func init() {
    +	t["VmDiskFileQueryFilter"] = reflect.TypeOf((*VmDiskFileQueryFilter)(nil)).Elem()
    +}
    +
    +type VmDiskFileQueryFlags struct {
    +	DynamicData
    +
    +	DiskType        bool  `xml:"diskType"`
    +	CapacityKb      bool  `xml:"capacityKb"`
    +	HardwareVersion bool  `xml:"hardwareVersion"`
    +	ControllerType  *bool `xml:"controllerType"`
    +	DiskExtents     *bool `xml:"diskExtents"`
    +	Thin            *bool `xml:"thin"`
    +	Encryption      *bool `xml:"encryption"`
    +}
    +
    +func init() {
    +	t["VmDiskFileQueryFlags"] = reflect.TypeOf((*VmDiskFileQueryFlags)(nil)).Elem()
    +}
    +
    +type VmEmigratingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmEmigratingEvent"] = reflect.TypeOf((*VmEmigratingEvent)(nil)).Elem()
    +}
    +
    +type VmEndRecordingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmEndRecordingEvent"] = reflect.TypeOf((*VmEndRecordingEvent)(nil)).Elem()
    +}
    +
    +type VmEndReplayingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmEndReplayingEvent"] = reflect.TypeOf((*VmEndReplayingEvent)(nil)).Elem()
    +}
    +
    +type VmEvent struct {
    +	Event
    +
    +	Template bool `xml:"template"`
    +}
    +
    +func init() {
    +	t["VmEvent"] = reflect.TypeOf((*VmEvent)(nil)).Elem()
    +}
    +
    +type VmEventArgument struct {
    +	EntityEventArgument
    +
    +	Vm ManagedObjectReference `xml:"vm"`
    +}
    +
    +func init() {
    +	t["VmEventArgument"] = reflect.TypeOf((*VmEventArgument)(nil)).Elem()
    +}
    +
    +type VmFailedMigrateEvent struct {
    +	VmEvent
    +
    +	DestHost       HostEventArgument        `xml:"destHost"`
    +	Reason         LocalizedMethodFault     `xml:"reason"`
    +	DestDatacenter *DatacenterEventArgument `xml:"destDatacenter,omitempty"`
    +	DestDatastore  *DatastoreEventArgument  `xml:"destDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["VmFailedMigrateEvent"] = reflect.TypeOf((*VmFailedMigrateEvent)(nil)).Elem()
    +}
    +
    +type VmFailedRelayoutEvent struct {
    +	VmEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmFailedRelayoutEvent"] = reflect.TypeOf((*VmFailedRelayoutEvent)(nil)).Elem()
    +}
    +
    +type VmFailedRelayoutOnVmfs2DatastoreEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmFailedRelayoutOnVmfs2DatastoreEvent"] = reflect.TypeOf((*VmFailedRelayoutOnVmfs2DatastoreEvent)(nil)).Elem()
    +}
    +
    +type VmFailedStartingSecondaryEvent struct {
    +	VmEvent
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["VmFailedStartingSecondaryEvent"] = reflect.TypeOf((*VmFailedStartingSecondaryEvent)(nil)).Elem()
    +}
    +
    +type VmFailedToPowerOffEvent struct {
    +	VmEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmFailedToPowerOffEvent"] = reflect.TypeOf((*VmFailedToPowerOffEvent)(nil)).Elem()
    +}
    +
    +type VmFailedToPowerOnEvent struct {
    +	VmEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmFailedToPowerOnEvent"] = reflect.TypeOf((*VmFailedToPowerOnEvent)(nil)).Elem()
    +}
    +
    +type VmFailedToRebootGuestEvent struct {
    +	VmEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmFailedToRebootGuestEvent"] = reflect.TypeOf((*VmFailedToRebootGuestEvent)(nil)).Elem()
    +}
    +
    +type VmFailedToResetEvent struct {
    +	VmEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmFailedToResetEvent"] = reflect.TypeOf((*VmFailedToResetEvent)(nil)).Elem()
    +}
    +
    +type VmFailedToShutdownGuestEvent struct {
    +	VmEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmFailedToShutdownGuestEvent"] = reflect.TypeOf((*VmFailedToShutdownGuestEvent)(nil)).Elem()
    +}
    +
    +type VmFailedToStandbyGuestEvent struct {
    +	VmEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmFailedToStandbyGuestEvent"] = reflect.TypeOf((*VmFailedToStandbyGuestEvent)(nil)).Elem()
    +}
    +
    +type VmFailedToSuspendEvent struct {
    +	VmEvent
    +
    +	Reason LocalizedMethodFault `xml:"reason"`
    +}
    +
    +func init() {
    +	t["VmFailedToSuspendEvent"] = reflect.TypeOf((*VmFailedToSuspendEvent)(nil)).Elem()
    +}
    +
    +type VmFailedUpdatingSecondaryConfig struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmFailedUpdatingSecondaryConfig"] = reflect.TypeOf((*VmFailedUpdatingSecondaryConfig)(nil)).Elem()
    +}
    +
    +type VmFailoverFailed struct {
    +	VmEvent
    +
    +	Reason *LocalizedMethodFault `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["VmFailoverFailed"] = reflect.TypeOf((*VmFailoverFailed)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceConfigIssue struct {
    +	VmFaultToleranceIssue
    +
    +	Reason     string                  `xml:"reason,omitempty"`
    +	EntityName string                  `xml:"entityName,omitempty"`
    +	Entity     *ManagedObjectReference `xml:"entity,omitempty"`
    +}
    +
    +func init() {
    +	t["VmFaultToleranceConfigIssue"] = reflect.TypeOf((*VmFaultToleranceConfigIssue)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceConfigIssueFault VmFaultToleranceConfigIssue
    +
    +func init() {
    +	t["VmFaultToleranceConfigIssueFault"] = reflect.TypeOf((*VmFaultToleranceConfigIssueFault)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceConfigIssueWrapper struct {
    +	VmFaultToleranceIssue
    +
    +	EntityName string                  `xml:"entityName,omitempty"`
    +	Entity     *ManagedObjectReference `xml:"entity,omitempty"`
    +	Error      *LocalizedMethodFault   `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["VmFaultToleranceConfigIssueWrapper"] = reflect.TypeOf((*VmFaultToleranceConfigIssueWrapper)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceConfigIssueWrapperFault VmFaultToleranceConfigIssueWrapper
    +
    +func init() {
    +	t["VmFaultToleranceConfigIssueWrapperFault"] = reflect.TypeOf((*VmFaultToleranceConfigIssueWrapperFault)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceInvalidFileBacking struct {
    +	VmFaultToleranceIssue
    +
    +	BackingType     string `xml:"backingType,omitempty"`
    +	BackingFilename string `xml:"backingFilename,omitempty"`
    +}
    +
    +func init() {
    +	t["VmFaultToleranceInvalidFileBacking"] = reflect.TypeOf((*VmFaultToleranceInvalidFileBacking)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceInvalidFileBackingFault VmFaultToleranceInvalidFileBacking
    +
    +func init() {
    +	t["VmFaultToleranceInvalidFileBackingFault"] = reflect.TypeOf((*VmFaultToleranceInvalidFileBackingFault)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceIssue struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["VmFaultToleranceIssue"] = reflect.TypeOf((*VmFaultToleranceIssue)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceIssueFault BaseVmFaultToleranceIssue
    +
    +func init() {
    +	t["VmFaultToleranceIssueFault"] = reflect.TypeOf((*VmFaultToleranceIssueFault)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceOpIssuesList struct {
    +	VmFaultToleranceIssue
    +
    +	Errors   []LocalizedMethodFault `xml:"errors,omitempty"`
    +	Warnings []LocalizedMethodFault `xml:"warnings,omitempty"`
    +}
    +
    +func init() {
    +	t["VmFaultToleranceOpIssuesList"] = reflect.TypeOf((*VmFaultToleranceOpIssuesList)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceOpIssuesListFault VmFaultToleranceOpIssuesList
    +
    +func init() {
    +	t["VmFaultToleranceOpIssuesListFault"] = reflect.TypeOf((*VmFaultToleranceOpIssuesListFault)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceStateChangedEvent struct {
    +	VmEvent
    +
    +	OldState VirtualMachineFaultToleranceState `xml:"oldState"`
    +	NewState VirtualMachineFaultToleranceState `xml:"newState"`
    +}
    +
    +func init() {
    +	t["VmFaultToleranceStateChangedEvent"] = reflect.TypeOf((*VmFaultToleranceStateChangedEvent)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceTooManyFtVcpusOnHost struct {
    +	InsufficientResourcesFault
    +
    +	HostName      string `xml:"hostName,omitempty"`
    +	MaxNumFtVcpus int32  `xml:"maxNumFtVcpus"`
    +}
    +
    +func init() {
    +	t["VmFaultToleranceTooManyFtVcpusOnHost"] = reflect.TypeOf((*VmFaultToleranceTooManyFtVcpusOnHost)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceTooManyFtVcpusOnHostFault VmFaultToleranceTooManyFtVcpusOnHost
    +
    +func init() {
    +	t["VmFaultToleranceTooManyFtVcpusOnHostFault"] = reflect.TypeOf((*VmFaultToleranceTooManyFtVcpusOnHostFault)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceTooManyVMsOnHost struct {
    +	InsufficientResourcesFault
    +
    +	HostName    string `xml:"hostName,omitempty"`
    +	MaxNumFtVms int32  `xml:"maxNumFtVms"`
    +}
    +
    +func init() {
    +	t["VmFaultToleranceTooManyVMsOnHost"] = reflect.TypeOf((*VmFaultToleranceTooManyVMsOnHost)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceTooManyVMsOnHostFault VmFaultToleranceTooManyVMsOnHost
    +
    +func init() {
    +	t["VmFaultToleranceTooManyVMsOnHostFault"] = reflect.TypeOf((*VmFaultToleranceTooManyVMsOnHostFault)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceTurnedOffEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmFaultToleranceTurnedOffEvent"] = reflect.TypeOf((*VmFaultToleranceTurnedOffEvent)(nil)).Elem()
    +}
    +
    +type VmFaultToleranceVmTerminatedEvent struct {
    +	VmEvent
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["VmFaultToleranceVmTerminatedEvent"] = reflect.TypeOf((*VmFaultToleranceVmTerminatedEvent)(nil)).Elem()
    +}
    +
    +type VmGuestOSCrashedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmGuestOSCrashedEvent"] = reflect.TypeOf((*VmGuestOSCrashedEvent)(nil)).Elem()
    +}
    +
    +type VmGuestRebootEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmGuestRebootEvent"] = reflect.TypeOf((*VmGuestRebootEvent)(nil)).Elem()
    +}
    +
    +type VmGuestShutdownEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmGuestShutdownEvent"] = reflect.TypeOf((*VmGuestShutdownEvent)(nil)).Elem()
    +}
    +
    +type VmGuestStandbyEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmGuestStandbyEvent"] = reflect.TypeOf((*VmGuestStandbyEvent)(nil)).Elem()
    +}
    +
    +type VmHealthMonitoringStateChangedEvent struct {
    +	ClusterEvent
    +
    +	State     string `xml:"state"`
    +	PrevState string `xml:"prevState,omitempty"`
    +}
    +
    +func init() {
    +	t["VmHealthMonitoringStateChangedEvent"] = reflect.TypeOf((*VmHealthMonitoringStateChangedEvent)(nil)).Elem()
    +}
    +
    +type VmHostAffinityRuleViolation struct {
    +	VmConfigFault
    +
    +	VmName   string `xml:"vmName"`
    +	HostName string `xml:"hostName"`
    +}
    +
    +func init() {
    +	t["VmHostAffinityRuleViolation"] = reflect.TypeOf((*VmHostAffinityRuleViolation)(nil)).Elem()
    +}
    +
    +type VmHostAffinityRuleViolationFault VmHostAffinityRuleViolation
    +
    +func init() {
    +	t["VmHostAffinityRuleViolationFault"] = reflect.TypeOf((*VmHostAffinityRuleViolationFault)(nil)).Elem()
    +}
    +
    +type VmInstanceUuidAssignedEvent struct {
    +	VmEvent
    +
    +	InstanceUuid string `xml:"instanceUuid"`
    +}
    +
    +func init() {
    +	t["VmInstanceUuidAssignedEvent"] = reflect.TypeOf((*VmInstanceUuidAssignedEvent)(nil)).Elem()
    +}
    +
    +type VmInstanceUuidChangedEvent struct {
    +	VmEvent
    +
    +	OldInstanceUuid string `xml:"oldInstanceUuid"`
    +	NewInstanceUuid string `xml:"newInstanceUuid"`
    +}
    +
    +func init() {
    +	t["VmInstanceUuidChangedEvent"] = reflect.TypeOf((*VmInstanceUuidChangedEvent)(nil)).Elem()
    +}
    +
    +type VmInstanceUuidConflictEvent struct {
    +	VmEvent
    +
    +	ConflictedVm VmEventArgument `xml:"conflictedVm"`
    +	InstanceUuid string          `xml:"instanceUuid"`
    +}
    +
    +func init() {
    +	t["VmInstanceUuidConflictEvent"] = reflect.TypeOf((*VmInstanceUuidConflictEvent)(nil)).Elem()
    +}
    +
    +type VmLimitLicense struct {
    +	NotEnoughLicenses
    +
    +	Limit int32 `xml:"limit"`
    +}
    +
    +func init() {
    +	t["VmLimitLicense"] = reflect.TypeOf((*VmLimitLicense)(nil)).Elem()
    +}
    +
    +type VmLimitLicenseFault VmLimitLicense
    +
    +func init() {
    +	t["VmLimitLicenseFault"] = reflect.TypeOf((*VmLimitLicenseFault)(nil)).Elem()
    +}
    +
    +type VmLogFileInfo struct {
    +	FileInfo
    +}
    +
    +func init() {
    +	t["VmLogFileInfo"] = reflect.TypeOf((*VmLogFileInfo)(nil)).Elem()
    +}
    +
    +type VmLogFileQuery struct {
    +	FileQuery
    +}
    +
    +func init() {
    +	t["VmLogFileQuery"] = reflect.TypeOf((*VmLogFileQuery)(nil)).Elem()
    +}
    +
    +type VmMacAssignedEvent struct {
    +	VmEvent
    +
    +	Adapter string `xml:"adapter"`
    +	Mac     string `xml:"mac"`
    +}
    +
    +func init() {
    +	t["VmMacAssignedEvent"] = reflect.TypeOf((*VmMacAssignedEvent)(nil)).Elem()
    +}
    +
    +type VmMacChangedEvent struct {
    +	VmEvent
    +
    +	Adapter string `xml:"adapter"`
    +	OldMac  string `xml:"oldMac"`
    +	NewMac  string `xml:"newMac"`
    +}
    +
    +func init() {
    +	t["VmMacChangedEvent"] = reflect.TypeOf((*VmMacChangedEvent)(nil)).Elem()
    +}
    +
    +type VmMacConflictEvent struct {
    +	VmEvent
    +
    +	ConflictedVm VmEventArgument `xml:"conflictedVm"`
    +	Mac          string          `xml:"mac"`
    +}
    +
    +func init() {
    +	t["VmMacConflictEvent"] = reflect.TypeOf((*VmMacConflictEvent)(nil)).Elem()
    +}
    +
    +type VmMaxFTRestartCountReached struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmMaxFTRestartCountReached"] = reflect.TypeOf((*VmMaxFTRestartCountReached)(nil)).Elem()
    +}
    +
    +type VmMaxRestartCountReached struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmMaxRestartCountReached"] = reflect.TypeOf((*VmMaxRestartCountReached)(nil)).Elem()
    +}
    +
    +type VmMessageErrorEvent struct {
    +	VmEvent
    +
    +	Message     string                  `xml:"message"`
    +	MessageInfo []VirtualMachineMessage `xml:"messageInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["VmMessageErrorEvent"] = reflect.TypeOf((*VmMessageErrorEvent)(nil)).Elem()
    +}
    +
    +type VmMessageEvent struct {
    +	VmEvent
    +
    +	Message     string                  `xml:"message"`
    +	MessageInfo []VirtualMachineMessage `xml:"messageInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["VmMessageEvent"] = reflect.TypeOf((*VmMessageEvent)(nil)).Elem()
    +}
    +
    +type VmMessageWarningEvent struct {
    +	VmEvent
    +
    +	Message     string                  `xml:"message"`
    +	MessageInfo []VirtualMachineMessage `xml:"messageInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["VmMessageWarningEvent"] = reflect.TypeOf((*VmMessageWarningEvent)(nil)).Elem()
    +}
    +
    +type VmMetadataManagerFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["VmMetadataManagerFault"] = reflect.TypeOf((*VmMetadataManagerFault)(nil)).Elem()
    +}
    +
    +type VmMetadataManagerFaultFault VmMetadataManagerFault
    +
    +func init() {
    +	t["VmMetadataManagerFaultFault"] = reflect.TypeOf((*VmMetadataManagerFaultFault)(nil)).Elem()
    +}
    +
    +type VmMigratedEvent struct {
    +	VmEvent
    +
    +	SourceHost       HostEventArgument        `xml:"sourceHost"`
    +	SourceDatacenter *DatacenterEventArgument `xml:"sourceDatacenter,omitempty"`
    +	SourceDatastore  *DatastoreEventArgument  `xml:"sourceDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["VmMigratedEvent"] = reflect.TypeOf((*VmMigratedEvent)(nil)).Elem()
    +}
    +
    +type VmMonitorIncompatibleForFaultTolerance struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["VmMonitorIncompatibleForFaultTolerance"] = reflect.TypeOf((*VmMonitorIncompatibleForFaultTolerance)(nil)).Elem()
    +}
    +
    +type VmMonitorIncompatibleForFaultToleranceFault VmMonitorIncompatibleForFaultTolerance
    +
    +func init() {
    +	t["VmMonitorIncompatibleForFaultToleranceFault"] = reflect.TypeOf((*VmMonitorIncompatibleForFaultToleranceFault)(nil)).Elem()
    +}
    +
    +type VmNoCompatibleHostForSecondaryEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmNoCompatibleHostForSecondaryEvent"] = reflect.TypeOf((*VmNoCompatibleHostForSecondaryEvent)(nil)).Elem()
    +}
    +
    +type VmNoNetworkAccessEvent struct {
    +	VmEvent
    +
    +	DestHost HostEventArgument `xml:"destHost"`
    +}
    +
    +func init() {
    +	t["VmNoNetworkAccessEvent"] = reflect.TypeOf((*VmNoNetworkAccessEvent)(nil)).Elem()
    +}
    +
    +type VmNvramFileInfo struct {
    +	FileInfo
    +}
    +
    +func init() {
    +	t["VmNvramFileInfo"] = reflect.TypeOf((*VmNvramFileInfo)(nil)).Elem()
    +}
    +
    +type VmNvramFileQuery struct {
    +	FileQuery
    +}
    +
    +func init() {
    +	t["VmNvramFileQuery"] = reflect.TypeOf((*VmNvramFileQuery)(nil)).Elem()
    +}
    +
    +type VmOrphanedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmOrphanedEvent"] = reflect.TypeOf((*VmOrphanedEvent)(nil)).Elem()
    +}
    +
    +type VmPodConfigForPlacement struct {
    +	DynamicData
    +
    +	StoragePod  ManagedObjectReference  `xml:"storagePod"`
    +	Disk        []PodDiskLocator        `xml:"disk,omitempty"`
    +	VmConfig    *StorageDrsVmConfigInfo `xml:"vmConfig,omitempty"`
    +	InterVmRule []BaseClusterRuleInfo   `xml:"interVmRule,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VmPodConfigForPlacement"] = reflect.TypeOf((*VmPodConfigForPlacement)(nil)).Elem()
    +}
    +
    +type VmPortGroupProfile struct {
    +	PortGroupProfile
    +}
    +
    +func init() {
    +	t["VmPortGroupProfile"] = reflect.TypeOf((*VmPortGroupProfile)(nil)).Elem()
    +}
    +
    +type VmPowerOffOnIsolationEvent struct {
    +	VmPoweredOffEvent
    +
    +	IsolatedHost HostEventArgument `xml:"isolatedHost"`
    +}
    +
    +func init() {
    +	t["VmPowerOffOnIsolationEvent"] = reflect.TypeOf((*VmPowerOffOnIsolationEvent)(nil)).Elem()
    +}
    +
    +type VmPowerOnDisabled struct {
    +	InvalidState
    +}
    +
    +func init() {
    +	t["VmPowerOnDisabled"] = reflect.TypeOf((*VmPowerOnDisabled)(nil)).Elem()
    +}
    +
    +type VmPowerOnDisabledFault VmPowerOnDisabled
    +
    +func init() {
    +	t["VmPowerOnDisabledFault"] = reflect.TypeOf((*VmPowerOnDisabledFault)(nil)).Elem()
    +}
    +
    +type VmPoweredOffEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmPoweredOffEvent"] = reflect.TypeOf((*VmPoweredOffEvent)(nil)).Elem()
    +}
    +
    +type VmPoweredOnEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmPoweredOnEvent"] = reflect.TypeOf((*VmPoweredOnEvent)(nil)).Elem()
    +}
    +
    +type VmPoweringOnWithCustomizedDVPortEvent struct {
    +	VmEvent
    +
    +	Vnic []VnicPortArgument `xml:"vnic"`
    +}
    +
    +func init() {
    +	t["VmPoweringOnWithCustomizedDVPortEvent"] = reflect.TypeOf((*VmPoweringOnWithCustomizedDVPortEvent)(nil)).Elem()
    +}
    +
    +type VmPrimaryFailoverEvent struct {
    +	VmEvent
    +
    +	Reason string `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["VmPrimaryFailoverEvent"] = reflect.TypeOf((*VmPrimaryFailoverEvent)(nil)).Elem()
    +}
    +
    +type VmReconfiguredEvent struct {
    +	VmEvent
    +
    +	ConfigSpec    VirtualMachineConfigSpec  `xml:"configSpec"`
    +	ConfigChanges *ChangesInfoEventArgument `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["VmReconfiguredEvent"] = reflect.TypeOf((*VmReconfiguredEvent)(nil)).Elem()
    +}
    +
    +type VmRegisteredEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmRegisteredEvent"] = reflect.TypeOf((*VmRegisteredEvent)(nil)).Elem()
    +}
    +
    +type VmRelayoutSuccessfulEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmRelayoutSuccessfulEvent"] = reflect.TypeOf((*VmRelayoutSuccessfulEvent)(nil)).Elem()
    +}
    +
    +type VmRelayoutUpToDateEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmRelayoutUpToDateEvent"] = reflect.TypeOf((*VmRelayoutUpToDateEvent)(nil)).Elem()
    +}
    +
    +type VmReloadFromPathEvent struct {
    +	VmEvent
    +
    +	ConfigPath string `xml:"configPath"`
    +}
    +
    +func init() {
    +	t["VmReloadFromPathEvent"] = reflect.TypeOf((*VmReloadFromPathEvent)(nil)).Elem()
    +}
    +
    +type VmReloadFromPathFailedEvent struct {
    +	VmEvent
    +
    +	ConfigPath string `xml:"configPath"`
    +}
    +
    +func init() {
    +	t["VmReloadFromPathFailedEvent"] = reflect.TypeOf((*VmReloadFromPathFailedEvent)(nil)).Elem()
    +}
    +
    +type VmRelocateFailedEvent struct {
    +	VmRelocateSpecEvent
    +
    +	DestHost       HostEventArgument        `xml:"destHost"`
    +	Reason         LocalizedMethodFault     `xml:"reason"`
    +	DestDatacenter *DatacenterEventArgument `xml:"destDatacenter,omitempty"`
    +	DestDatastore  *DatastoreEventArgument  `xml:"destDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["VmRelocateFailedEvent"] = reflect.TypeOf((*VmRelocateFailedEvent)(nil)).Elem()
    +}
    +
    +type VmRelocateSpecEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmRelocateSpecEvent"] = reflect.TypeOf((*VmRelocateSpecEvent)(nil)).Elem()
    +}
    +
    +type VmRelocatedEvent struct {
    +	VmRelocateSpecEvent
    +
    +	SourceHost       HostEventArgument        `xml:"sourceHost"`
    +	SourceDatacenter *DatacenterEventArgument `xml:"sourceDatacenter,omitempty"`
    +	SourceDatastore  *DatastoreEventArgument  `xml:"sourceDatastore,omitempty"`
    +}
    +
    +func init() {
    +	t["VmRelocatedEvent"] = reflect.TypeOf((*VmRelocatedEvent)(nil)).Elem()
    +}
    +
    +type VmRemoteConsoleConnectedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmRemoteConsoleConnectedEvent"] = reflect.TypeOf((*VmRemoteConsoleConnectedEvent)(nil)).Elem()
    +}
    +
    +type VmRemoteConsoleDisconnectedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmRemoteConsoleDisconnectedEvent"] = reflect.TypeOf((*VmRemoteConsoleDisconnectedEvent)(nil)).Elem()
    +}
    +
    +type VmRemovedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmRemovedEvent"] = reflect.TypeOf((*VmRemovedEvent)(nil)).Elem()
    +}
    +
    +type VmRenamedEvent struct {
    +	VmEvent
    +
    +	OldName string `xml:"oldName"`
    +	NewName string `xml:"newName"`
    +}
    +
    +func init() {
    +	t["VmRenamedEvent"] = reflect.TypeOf((*VmRenamedEvent)(nil)).Elem()
    +}
    +
    +type VmRequirementsExceedCurrentEVCModeEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmRequirementsExceedCurrentEVCModeEvent"] = reflect.TypeOf((*VmRequirementsExceedCurrentEVCModeEvent)(nil)).Elem()
    +}
    +
    +type VmResettingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmResettingEvent"] = reflect.TypeOf((*VmResettingEvent)(nil)).Elem()
    +}
    +
    +type VmResourcePoolMovedEvent struct {
    +	VmEvent
    +
    +	OldParent ResourcePoolEventArgument `xml:"oldParent"`
    +	NewParent ResourcePoolEventArgument `xml:"newParent"`
    +}
    +
    +func init() {
    +	t["VmResourcePoolMovedEvent"] = reflect.TypeOf((*VmResourcePoolMovedEvent)(nil)).Elem()
    +}
    +
    +type VmResourceReallocatedEvent struct {
    +	VmEvent
    +
    +	ConfigChanges *ChangesInfoEventArgument `xml:"configChanges,omitempty"`
    +}
    +
    +func init() {
    +	t["VmResourceReallocatedEvent"] = reflect.TypeOf((*VmResourceReallocatedEvent)(nil)).Elem()
    +}
    +
    +type VmRestartedOnAlternateHostEvent struct {
    +	VmPoweredOnEvent
    +
    +	SourceHost HostEventArgument `xml:"sourceHost"`
    +}
    +
    +func init() {
    +	t["VmRestartedOnAlternateHostEvent"] = reflect.TypeOf((*VmRestartedOnAlternateHostEvent)(nil)).Elem()
    +}
    +
    +type VmResumingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmResumingEvent"] = reflect.TypeOf((*VmResumingEvent)(nil)).Elem()
    +}
    +
    +type VmSecondaryAddedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmSecondaryAddedEvent"] = reflect.TypeOf((*VmSecondaryAddedEvent)(nil)).Elem()
    +}
    +
    +type VmSecondaryDisabledBySystemEvent struct {
    +	VmEvent
    +
    +	Reason *LocalizedMethodFault `xml:"reason,omitempty"`
    +}
    +
    +func init() {
    +	t["VmSecondaryDisabledBySystemEvent"] = reflect.TypeOf((*VmSecondaryDisabledBySystemEvent)(nil)).Elem()
    +}
    +
    +type VmSecondaryDisabledEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmSecondaryDisabledEvent"] = reflect.TypeOf((*VmSecondaryDisabledEvent)(nil)).Elem()
    +}
    +
    +type VmSecondaryEnabledEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmSecondaryEnabledEvent"] = reflect.TypeOf((*VmSecondaryEnabledEvent)(nil)).Elem()
    +}
    +
    +type VmSecondaryStartedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmSecondaryStartedEvent"] = reflect.TypeOf((*VmSecondaryStartedEvent)(nil)).Elem()
    +}
    +
    +type VmShutdownOnIsolationEvent struct {
    +	VmPoweredOffEvent
    +
    +	IsolatedHost   HostEventArgument `xml:"isolatedHost"`
    +	ShutdownResult string            `xml:"shutdownResult,omitempty"`
    +}
    +
    +func init() {
    +	t["VmShutdownOnIsolationEvent"] = reflect.TypeOf((*VmShutdownOnIsolationEvent)(nil)).Elem()
    +}
    +
    +type VmSmpFaultToleranceTooManyVMsOnHost struct {
    +	InsufficientResourcesFault
    +
    +	HostName       string `xml:"hostName,omitempty"`
    +	MaxNumSmpFtVms int32  `xml:"maxNumSmpFtVms"`
    +}
    +
    +func init() {
    +	t["VmSmpFaultToleranceTooManyVMsOnHost"] = reflect.TypeOf((*VmSmpFaultToleranceTooManyVMsOnHost)(nil)).Elem()
    +}
    +
    +type VmSmpFaultToleranceTooManyVMsOnHostFault VmSmpFaultToleranceTooManyVMsOnHost
    +
    +func init() {
    +	t["VmSmpFaultToleranceTooManyVMsOnHostFault"] = reflect.TypeOf((*VmSmpFaultToleranceTooManyVMsOnHostFault)(nil)).Elem()
    +}
    +
    +type VmSnapshotFileInfo struct {
    +	FileInfo
    +}
    +
    +func init() {
    +	t["VmSnapshotFileInfo"] = reflect.TypeOf((*VmSnapshotFileInfo)(nil)).Elem()
    +}
    +
    +type VmSnapshotFileQuery struct {
    +	FileQuery
    +}
    +
    +func init() {
    +	t["VmSnapshotFileQuery"] = reflect.TypeOf((*VmSnapshotFileQuery)(nil)).Elem()
    +}
    +
    +type VmStartRecordingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmStartRecordingEvent"] = reflect.TypeOf((*VmStartRecordingEvent)(nil)).Elem()
    +}
    +
    +type VmStartReplayingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmStartReplayingEvent"] = reflect.TypeOf((*VmStartReplayingEvent)(nil)).Elem()
    +}
    +
    +type VmStartingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmStartingEvent"] = reflect.TypeOf((*VmStartingEvent)(nil)).Elem()
    +}
    +
    +type VmStartingSecondaryEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmStartingSecondaryEvent"] = reflect.TypeOf((*VmStartingSecondaryEvent)(nil)).Elem()
    +}
    +
    +type VmStaticMacConflictEvent struct {
    +	VmEvent
    +
    +	ConflictedVm VmEventArgument `xml:"conflictedVm"`
    +	Mac          string          `xml:"mac"`
    +}
    +
    +func init() {
    +	t["VmStaticMacConflictEvent"] = reflect.TypeOf((*VmStaticMacConflictEvent)(nil)).Elem()
    +}
    +
    +type VmStoppingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmStoppingEvent"] = reflect.TypeOf((*VmStoppingEvent)(nil)).Elem()
    +}
    +
    +type VmSuspendedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmSuspendedEvent"] = reflect.TypeOf((*VmSuspendedEvent)(nil)).Elem()
    +}
    +
    +type VmSuspendingEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmSuspendingEvent"] = reflect.TypeOf((*VmSuspendingEvent)(nil)).Elem()
    +}
    +
    +type VmTimedoutStartingSecondaryEvent struct {
    +	VmEvent
    +
    +	Timeout int64 `xml:"timeout,omitempty"`
    +}
    +
    +func init() {
    +	t["VmTimedoutStartingSecondaryEvent"] = reflect.TypeOf((*VmTimedoutStartingSecondaryEvent)(nil)).Elem()
    +}
    +
    +type VmToolsUpgradeFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["VmToolsUpgradeFault"] = reflect.TypeOf((*VmToolsUpgradeFault)(nil)).Elem()
    +}
    +
    +type VmToolsUpgradeFaultFault BaseVmToolsUpgradeFault
    +
    +func init() {
    +	t["VmToolsUpgradeFaultFault"] = reflect.TypeOf((*VmToolsUpgradeFaultFault)(nil)).Elem()
    +}
    +
    +type VmUnsupportedStartingEvent struct {
    +	VmStartingEvent
    +
    +	GuestId string `xml:"guestId"`
    +}
    +
    +func init() {
    +	t["VmUnsupportedStartingEvent"] = reflect.TypeOf((*VmUnsupportedStartingEvent)(nil)).Elem()
    +}
    +
    +type VmUpgradeCompleteEvent struct {
    +	VmEvent
    +
    +	Version string `xml:"version"`
    +}
    +
    +func init() {
    +	t["VmUpgradeCompleteEvent"] = reflect.TypeOf((*VmUpgradeCompleteEvent)(nil)).Elem()
    +}
    +
    +type VmUpgradeFailedEvent struct {
    +	VmEvent
    +}
    +
    +func init() {
    +	t["VmUpgradeFailedEvent"] = reflect.TypeOf((*VmUpgradeFailedEvent)(nil)).Elem()
    +}
    +
    +type VmUpgradingEvent struct {
    +	VmEvent
    +
    +	Version string `xml:"version"`
    +}
    +
    +func init() {
    +	t["VmUpgradingEvent"] = reflect.TypeOf((*VmUpgradingEvent)(nil)).Elem()
    +}
    +
    +type VmUuidAssignedEvent struct {
    +	VmEvent
    +
    +	Uuid string `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["VmUuidAssignedEvent"] = reflect.TypeOf((*VmUuidAssignedEvent)(nil)).Elem()
    +}
    +
    +type VmUuidChangedEvent struct {
    +	VmEvent
    +
    +	OldUuid string `xml:"oldUuid"`
    +	NewUuid string `xml:"newUuid"`
    +}
    +
    +func init() {
    +	t["VmUuidChangedEvent"] = reflect.TypeOf((*VmUuidChangedEvent)(nil)).Elem()
    +}
    +
    +type VmUuidConflictEvent struct {
    +	VmEvent
    +
    +	ConflictedVm VmEventArgument `xml:"conflictedVm"`
    +	Uuid         string          `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["VmUuidConflictEvent"] = reflect.TypeOf((*VmUuidConflictEvent)(nil)).Elem()
    +}
    +
    +type VmValidateMaxDevice struct {
    +	VimFault
    +
    +	Device string `xml:"device"`
    +	Max    int32  `xml:"max"`
    +	Count  int32  `xml:"count"`
    +}
    +
    +func init() {
    +	t["VmValidateMaxDevice"] = reflect.TypeOf((*VmValidateMaxDevice)(nil)).Elem()
    +}
    +
    +type VmValidateMaxDeviceFault VmValidateMaxDevice
    +
    +func init() {
    +	t["VmValidateMaxDeviceFault"] = reflect.TypeOf((*VmValidateMaxDeviceFault)(nil)).Elem()
    +}
    +
    +type VmVnicPoolReservationViolationClearEvent struct {
    +	DvsEvent
    +
    +	VmVnicResourcePoolKey  string `xml:"vmVnicResourcePoolKey"`
    +	VmVnicResourcePoolName string `xml:"vmVnicResourcePoolName,omitempty"`
    +}
    +
    +func init() {
    +	t["VmVnicPoolReservationViolationClearEvent"] = reflect.TypeOf((*VmVnicPoolReservationViolationClearEvent)(nil)).Elem()
    +}
    +
    +type VmVnicPoolReservationViolationRaiseEvent struct {
    +	DvsEvent
    +
    +	VmVnicResourcePoolKey  string `xml:"vmVnicResourcePoolKey"`
    +	VmVnicResourcePoolName string `xml:"vmVnicResourcePoolName,omitempty"`
    +}
    +
    +func init() {
    +	t["VmVnicPoolReservationViolationRaiseEvent"] = reflect.TypeOf((*VmVnicPoolReservationViolationRaiseEvent)(nil)).Elem()
    +}
    +
    +type VmWwnAssignedEvent struct {
    +	VmEvent
    +
    +	NodeWwns []int64 `xml:"nodeWwns"`
    +	PortWwns []int64 `xml:"portWwns"`
    +}
    +
    +func init() {
    +	t["VmWwnAssignedEvent"] = reflect.TypeOf((*VmWwnAssignedEvent)(nil)).Elem()
    +}
    +
    +type VmWwnChangedEvent struct {
    +	VmEvent
    +
    +	OldNodeWwns []int64 `xml:"oldNodeWwns,omitempty"`
    +	OldPortWwns []int64 `xml:"oldPortWwns,omitempty"`
    +	NewNodeWwns []int64 `xml:"newNodeWwns,omitempty"`
    +	NewPortWwns []int64 `xml:"newPortWwns,omitempty"`
    +}
    +
    +func init() {
    +	t["VmWwnChangedEvent"] = reflect.TypeOf((*VmWwnChangedEvent)(nil)).Elem()
    +}
    +
    +type VmWwnConflict struct {
    +	InvalidVmConfig
    +
    +	Vm   *ManagedObjectReference `xml:"vm,omitempty"`
    +	Host *ManagedObjectReference `xml:"host,omitempty"`
    +	Name string                  `xml:"name,omitempty"`
    +	Wwn  int64                   `xml:"wwn,omitempty"`
    +}
    +
    +func init() {
    +	t["VmWwnConflict"] = reflect.TypeOf((*VmWwnConflict)(nil)).Elem()
    +}
    +
    +type VmWwnConflictEvent struct {
    +	VmEvent
    +
    +	ConflictedVms   []VmEventArgument   `xml:"conflictedVms,omitempty"`
    +	ConflictedHosts []HostEventArgument `xml:"conflictedHosts,omitempty"`
    +	Wwn             int64               `xml:"wwn"`
    +}
    +
    +func init() {
    +	t["VmWwnConflictEvent"] = reflect.TypeOf((*VmWwnConflictEvent)(nil)).Elem()
    +}
    +
    +type VmWwnConflictFault VmWwnConflict
    +
    +func init() {
    +	t["VmWwnConflictFault"] = reflect.TypeOf((*VmWwnConflictFault)(nil)).Elem()
    +}
    +
    +type VmfsAlreadyMounted struct {
    +	VmfsMountFault
    +}
    +
    +func init() {
    +	t["VmfsAlreadyMounted"] = reflect.TypeOf((*VmfsAlreadyMounted)(nil)).Elem()
    +}
    +
    +type VmfsAlreadyMountedFault VmfsAlreadyMounted
    +
    +func init() {
    +	t["VmfsAlreadyMountedFault"] = reflect.TypeOf((*VmfsAlreadyMountedFault)(nil)).Elem()
    +}
    +
    +type VmfsAmbiguousMount struct {
    +	VmfsMountFault
    +}
    +
    +func init() {
    +	t["VmfsAmbiguousMount"] = reflect.TypeOf((*VmfsAmbiguousMount)(nil)).Elem()
    +}
    +
    +type VmfsAmbiguousMountFault VmfsAmbiguousMount
    +
    +func init() {
    +	t["VmfsAmbiguousMountFault"] = reflect.TypeOf((*VmfsAmbiguousMountFault)(nil)).Elem()
    +}
    +
    +type VmfsConfigOption struct {
    +	DynamicData
    +
    +	BlockSizeOption          int32       `xml:"blockSizeOption"`
    +	UnmapGranularityOption   []int32     `xml:"unmapGranularityOption,omitempty"`
    +	UnmapBandwidthFixedValue *LongOption `xml:"unmapBandwidthFixedValue,omitempty"`
    +	UnmapBandwidthDynamicMin *LongOption `xml:"unmapBandwidthDynamicMin,omitempty"`
    +	UnmapBandwidthDynamicMax *LongOption `xml:"unmapBandwidthDynamicMax,omitempty"`
    +	UnmapBandwidthIncrement  int64       `xml:"unmapBandwidthIncrement,omitempty"`
    +}
    +
    +func init() {
    +	t["VmfsConfigOption"] = reflect.TypeOf((*VmfsConfigOption)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreAllExtentOption struct {
    +	VmfsDatastoreSingleExtentOption
    +}
    +
    +func init() {
    +	t["VmfsDatastoreAllExtentOption"] = reflect.TypeOf((*VmfsDatastoreAllExtentOption)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreBaseOption struct {
    +	DynamicData
    +
    +	Layout                HostDiskPartitionLayout `xml:"layout"`
    +	PartitionFormatChange *bool                   `xml:"partitionFormatChange"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreBaseOption"] = reflect.TypeOf((*VmfsDatastoreBaseOption)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreCreateSpec struct {
    +	VmfsDatastoreSpec
    +
    +	Partition HostDiskPartitionSpec   `xml:"partition"`
    +	Vmfs      HostVmfsSpec            `xml:"vmfs"`
    +	Extent    []HostScsiDiskPartition `xml:"extent,omitempty"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreCreateSpec"] = reflect.TypeOf((*VmfsDatastoreCreateSpec)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreExpandSpec struct {
    +	VmfsDatastoreSpec
    +
    +	Partition HostDiskPartitionSpec `xml:"partition"`
    +	Extent    HostScsiDiskPartition `xml:"extent"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreExpandSpec"] = reflect.TypeOf((*VmfsDatastoreExpandSpec)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreExtendSpec struct {
    +	VmfsDatastoreSpec
    +
    +	Partition HostDiskPartitionSpec   `xml:"partition"`
    +	Extent    []HostScsiDiskPartition `xml:"extent"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreExtendSpec"] = reflect.TypeOf((*VmfsDatastoreExtendSpec)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreInfo struct {
    +	DatastoreInfo
    +
    +	MaxPhysicalRDMFileSize int64           `xml:"maxPhysicalRDMFileSize,omitempty"`
    +	MaxVirtualRDMFileSize  int64           `xml:"maxVirtualRDMFileSize,omitempty"`
    +	Vmfs                   *HostVmfsVolume `xml:"vmfs,omitempty"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreInfo"] = reflect.TypeOf((*VmfsDatastoreInfo)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreMultipleExtentOption struct {
    +	VmfsDatastoreBaseOption
    +
    +	VmfsExtent []HostDiskPartitionBlockRange `xml:"vmfsExtent"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreMultipleExtentOption"] = reflect.TypeOf((*VmfsDatastoreMultipleExtentOption)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreOption struct {
    +	DynamicData
    +
    +	Info BaseVmfsDatastoreBaseOption `xml:"info,typeattr"`
    +	Spec BaseVmfsDatastoreSpec       `xml:"spec,typeattr"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreOption"] = reflect.TypeOf((*VmfsDatastoreOption)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreSingleExtentOption struct {
    +	VmfsDatastoreBaseOption
    +
    +	VmfsExtent HostDiskPartitionBlockRange `xml:"vmfsExtent"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreSingleExtentOption"] = reflect.TypeOf((*VmfsDatastoreSingleExtentOption)(nil)).Elem()
    +}
    +
    +type VmfsDatastoreSpec struct {
    +	DynamicData
    +
    +	DiskUuid string `xml:"diskUuid"`
    +}
    +
    +func init() {
    +	t["VmfsDatastoreSpec"] = reflect.TypeOf((*VmfsDatastoreSpec)(nil)).Elem()
    +}
    +
    +type VmfsMountFault struct {
    +	HostConfigFault
    +
    +	Uuid string `xml:"uuid"`
    +}
    +
    +func init() {
    +	t["VmfsMountFault"] = reflect.TypeOf((*VmfsMountFault)(nil)).Elem()
    +}
    +
    +type VmfsMountFaultFault BaseVmfsMountFault
    +
    +func init() {
    +	t["VmfsMountFaultFault"] = reflect.TypeOf((*VmfsMountFaultFault)(nil)).Elem()
    +}
    +
    +type VmfsUnmapBandwidthSpec struct {
    +	DynamicData
    +
    +	Policy     string `xml:"policy"`
    +	FixedValue int64  `xml:"fixedValue"`
    +	DynamicMin int64  `xml:"dynamicMin"`
    +	DynamicMax int64  `xml:"dynamicMax"`
    +}
    +
    +func init() {
    +	t["VmfsUnmapBandwidthSpec"] = reflect.TypeOf((*VmfsUnmapBandwidthSpec)(nil)).Elem()
    +}
    +
    +type VmotionInterfaceNotEnabled struct {
    +	HostPowerOpFailed
    +}
    +
    +func init() {
    +	t["VmotionInterfaceNotEnabled"] = reflect.TypeOf((*VmotionInterfaceNotEnabled)(nil)).Elem()
    +}
    +
    +type VmotionInterfaceNotEnabledFault VmotionInterfaceNotEnabled
    +
    +func init() {
    +	t["VmotionInterfaceNotEnabledFault"] = reflect.TypeOf((*VmotionInterfaceNotEnabledFault)(nil)).Elem()
    +}
    +
    +type VmwareDistributedVirtualSwitchPvlanSpec struct {
    +	VmwareDistributedVirtualSwitchVlanSpec
    +
    +	PvlanId int32 `xml:"pvlanId"`
    +}
    +
    +func init() {
    +	t["VmwareDistributedVirtualSwitchPvlanSpec"] = reflect.TypeOf((*VmwareDistributedVirtualSwitchPvlanSpec)(nil)).Elem()
    +}
    +
    +type VmwareDistributedVirtualSwitchTrunkVlanSpec struct {
    +	VmwareDistributedVirtualSwitchVlanSpec
    +
    +	VlanId []NumericRange `xml:"vlanId,omitempty"`
    +}
    +
    +func init() {
    +	t["VmwareDistributedVirtualSwitchTrunkVlanSpec"] = reflect.TypeOf((*VmwareDistributedVirtualSwitchTrunkVlanSpec)(nil)).Elem()
    +}
    +
    +type VmwareDistributedVirtualSwitchVlanIdSpec struct {
    +	VmwareDistributedVirtualSwitchVlanSpec
    +
    +	VlanId int32 `xml:"vlanId"`
    +}
    +
    +func init() {
    +	t["VmwareDistributedVirtualSwitchVlanIdSpec"] = reflect.TypeOf((*VmwareDistributedVirtualSwitchVlanIdSpec)(nil)).Elem()
    +}
    +
    +type VmwareDistributedVirtualSwitchVlanSpec struct {
    +	InheritablePolicy
    +}
    +
    +func init() {
    +	t["VmwareDistributedVirtualSwitchVlanSpec"] = reflect.TypeOf((*VmwareDistributedVirtualSwitchVlanSpec)(nil)).Elem()
    +}
    +
    +type VmwareUplinkPortTeamingPolicy struct {
    +	InheritablePolicy
    +
    +	Policy          *StringPolicy                `xml:"policy,omitempty"`
    +	ReversePolicy   *BoolPolicy                  `xml:"reversePolicy,omitempty"`
    +	NotifySwitches  *BoolPolicy                  `xml:"notifySwitches,omitempty"`
    +	RollingOrder    *BoolPolicy                  `xml:"rollingOrder,omitempty"`
    +	FailureCriteria *DVSFailureCriteria          `xml:"failureCriteria,omitempty"`
    +	UplinkPortOrder *VMwareUplinkPortOrderPolicy `xml:"uplinkPortOrder,omitempty"`
    +}
    +
    +func init() {
    +	t["VmwareUplinkPortTeamingPolicy"] = reflect.TypeOf((*VmwareUplinkPortTeamingPolicy)(nil)).Elem()
    +}
    +
    +type VnicPortArgument struct {
    +	DynamicData
    +
    +	Vnic string                                 `xml:"vnic"`
    +	Port DistributedVirtualSwitchPortConnection `xml:"port"`
    +}
    +
    +func init() {
    +	t["VnicPortArgument"] = reflect.TypeOf((*VnicPortArgument)(nil)).Elem()
    +}
    +
    +type VolumeEditorError struct {
    +	CustomizationFault
    +}
    +
    +func init() {
    +	t["VolumeEditorError"] = reflect.TypeOf((*VolumeEditorError)(nil)).Elem()
    +}
    +
    +type VolumeEditorErrorFault VolumeEditorError
    +
    +func init() {
    +	t["VolumeEditorErrorFault"] = reflect.TypeOf((*VolumeEditorErrorFault)(nil)).Elem()
    +}
    +
    +type VramLimitLicense struct {
    +	NotEnoughLicenses
    +
    +	Limit int32 `xml:"limit"`
    +}
    +
    +func init() {
    +	t["VramLimitLicense"] = reflect.TypeOf((*VramLimitLicense)(nil)).Elem()
    +}
    +
    +type VramLimitLicenseFault VramLimitLicense
    +
    +func init() {
    +	t["VramLimitLicenseFault"] = reflect.TypeOf((*VramLimitLicenseFault)(nil)).Elem()
    +}
    +
    +type VsanClusterConfigInfo struct {
    +	DynamicData
    +
    +	Enabled       *bool                                 `xml:"enabled"`
    +	DefaultConfig *VsanClusterConfigInfoHostDefaultInfo `xml:"defaultConfig,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanClusterConfigInfo"] = reflect.TypeOf((*VsanClusterConfigInfo)(nil)).Elem()
    +}
    +
    +type VsanClusterConfigInfoHostDefaultInfo struct {
    +	DynamicData
    +
    +	Uuid             string `xml:"uuid,omitempty"`
    +	AutoClaimStorage *bool  `xml:"autoClaimStorage"`
    +	ChecksumEnabled  *bool  `xml:"checksumEnabled"`
    +}
    +
    +func init() {
    +	t["VsanClusterConfigInfoHostDefaultInfo"] = reflect.TypeOf((*VsanClusterConfigInfoHostDefaultInfo)(nil)).Elem()
    +}
    +
    +type VsanClusterUuidMismatch struct {
    +	CannotMoveVsanEnabledHost
    +
    +	HostClusterUuid        string `xml:"hostClusterUuid"`
    +	DestinationClusterUuid string `xml:"destinationClusterUuid"`
    +}
    +
    +func init() {
    +	t["VsanClusterUuidMismatch"] = reflect.TypeOf((*VsanClusterUuidMismatch)(nil)).Elem()
    +}
    +
    +type VsanClusterUuidMismatchFault VsanClusterUuidMismatch
    +
    +func init() {
    +	t["VsanClusterUuidMismatchFault"] = reflect.TypeOf((*VsanClusterUuidMismatchFault)(nil)).Elem()
    +}
    +
    +type VsanDiskFault struct {
    +	VsanFault
    +
    +	Device string `xml:"device,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanDiskFault"] = reflect.TypeOf((*VsanDiskFault)(nil)).Elem()
    +}
    +
    +type VsanDiskFaultFault BaseVsanDiskFault
    +
    +func init() {
    +	t["VsanDiskFaultFault"] = reflect.TypeOf((*VsanDiskFaultFault)(nil)).Elem()
    +}
    +
    +type VsanFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["VsanFault"] = reflect.TypeOf((*VsanFault)(nil)).Elem()
    +}
    +
    +type VsanFaultFault BaseVsanFault
    +
    +func init() {
    +	t["VsanFaultFault"] = reflect.TypeOf((*VsanFaultFault)(nil)).Elem()
    +}
    +
    +type VsanHostClusterStatus struct {
    +	DynamicData
    +
    +	Uuid       string                     `xml:"uuid,omitempty"`
    +	NodeUuid   string                     `xml:"nodeUuid,omitempty"`
    +	Health     string                     `xml:"health"`
    +	NodeState  VsanHostClusterStatusState `xml:"nodeState"`
    +	MemberUuid []string                   `xml:"memberUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanHostClusterStatus"] = reflect.TypeOf((*VsanHostClusterStatus)(nil)).Elem()
    +}
    +
    +type VsanHostClusterStatusState struct {
    +	DynamicData
    +
    +	State      string                                        `xml:"state"`
    +	Completion *VsanHostClusterStatusStateCompletionEstimate `xml:"completion,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanHostClusterStatusState"] = reflect.TypeOf((*VsanHostClusterStatusState)(nil)).Elem()
    +}
    +
    +type VsanHostClusterStatusStateCompletionEstimate struct {
    +	DynamicData
    +
    +	CompleteTime    *time.Time `xml:"completeTime"`
    +	PercentComplete int32      `xml:"percentComplete,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanHostClusterStatusStateCompletionEstimate"] = reflect.TypeOf((*VsanHostClusterStatusStateCompletionEstimate)(nil)).Elem()
    +}
    +
    +type VsanHostConfigInfo struct {
    +	DynamicData
    +
    +	Enabled         *bool                          `xml:"enabled"`
    +	HostSystem      *ManagedObjectReference        `xml:"hostSystem,omitempty"`
    +	ClusterInfo     *VsanHostConfigInfoClusterInfo `xml:"clusterInfo,omitempty"`
    +	StorageInfo     *VsanHostConfigInfoStorageInfo `xml:"storageInfo,omitempty"`
    +	NetworkInfo     *VsanHostConfigInfoNetworkInfo `xml:"networkInfo,omitempty"`
    +	FaultDomainInfo *VsanHostFaultDomainInfo       `xml:"faultDomainInfo,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanHostConfigInfo"] = reflect.TypeOf((*VsanHostConfigInfo)(nil)).Elem()
    +}
    +
    +type VsanHostConfigInfoClusterInfo struct {
    +	DynamicData
    +
    +	Uuid     string `xml:"uuid,omitempty"`
    +	NodeUuid string `xml:"nodeUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanHostConfigInfoClusterInfo"] = reflect.TypeOf((*VsanHostConfigInfoClusterInfo)(nil)).Elem()
    +}
    +
    +type VsanHostConfigInfoNetworkInfo struct {
    +	DynamicData
    +
    +	Port []VsanHostConfigInfoNetworkInfoPortConfig `xml:"port,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanHostConfigInfoNetworkInfo"] = reflect.TypeOf((*VsanHostConfigInfoNetworkInfo)(nil)).Elem()
    +}
    +
    +type VsanHostConfigInfoNetworkInfoPortConfig struct {
    +	DynamicData
    +
    +	IpConfig *VsanHostIpConfig `xml:"ipConfig,omitempty"`
    +	Device   string            `xml:"device"`
    +}
    +
    +func init() {
    +	t["VsanHostConfigInfoNetworkInfoPortConfig"] = reflect.TypeOf((*VsanHostConfigInfoNetworkInfoPortConfig)(nil)).Elem()
    +}
    +
    +type VsanHostConfigInfoStorageInfo struct {
    +	DynamicData
    +
    +	AutoClaimStorage *bool                 `xml:"autoClaimStorage"`
    +	DiskMapping      []VsanHostDiskMapping `xml:"diskMapping,omitempty"`
    +	DiskMapInfo      []VsanHostDiskMapInfo `xml:"diskMapInfo,omitempty"`
    +	ChecksumEnabled  *bool                 `xml:"checksumEnabled"`
    +}
    +
    +func init() {
    +	t["VsanHostConfigInfoStorageInfo"] = reflect.TypeOf((*VsanHostConfigInfoStorageInfo)(nil)).Elem()
    +}
    +
    +type VsanHostDecommissionMode struct {
    +	DynamicData
    +
    +	ObjectAction string `xml:"objectAction"`
    +}
    +
    +func init() {
    +	t["VsanHostDecommissionMode"] = reflect.TypeOf((*VsanHostDecommissionMode)(nil)).Elem()
    +}
    +
    +type VsanHostDiskMapInfo struct {
    +	DynamicData
    +
    +	Mapping VsanHostDiskMapping `xml:"mapping"`
    +	Mounted bool                `xml:"mounted"`
    +}
    +
    +func init() {
    +	t["VsanHostDiskMapInfo"] = reflect.TypeOf((*VsanHostDiskMapInfo)(nil)).Elem()
    +}
    +
    +type VsanHostDiskMapResult struct {
    +	DynamicData
    +
    +	Mapping    VsanHostDiskMapping   `xml:"mapping"`
    +	DiskResult []VsanHostDiskResult  `xml:"diskResult,omitempty"`
    +	Error      *LocalizedMethodFault `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanHostDiskMapResult"] = reflect.TypeOf((*VsanHostDiskMapResult)(nil)).Elem()
    +}
    +
    +type VsanHostDiskMapping struct {
    +	DynamicData
    +
    +	Ssd    HostScsiDisk   `xml:"ssd"`
    +	NonSsd []HostScsiDisk `xml:"nonSsd"`
    +}
    +
    +func init() {
    +	t["VsanHostDiskMapping"] = reflect.TypeOf((*VsanHostDiskMapping)(nil)).Elem()
    +}
    +
    +type VsanHostDiskResult struct {
    +	DynamicData
    +
    +	Disk     HostScsiDisk          `xml:"disk"`
    +	State    string                `xml:"state"`
    +	VsanUuid string                `xml:"vsanUuid,omitempty"`
    +	Error    *LocalizedMethodFault `xml:"error,omitempty"`
    +	Degraded *bool                 `xml:"degraded"`
    +}
    +
    +func init() {
    +	t["VsanHostDiskResult"] = reflect.TypeOf((*VsanHostDiskResult)(nil)).Elem()
    +}
    +
    +type VsanHostFaultDomainInfo struct {
    +	DynamicData
    +
    +	Name string `xml:"name"`
    +}
    +
    +func init() {
    +	t["VsanHostFaultDomainInfo"] = reflect.TypeOf((*VsanHostFaultDomainInfo)(nil)).Elem()
    +}
    +
    +type VsanHostIpConfig struct {
    +	DynamicData
    +
    +	UpstreamIpAddress   string `xml:"upstreamIpAddress"`
    +	DownstreamIpAddress string `xml:"downstreamIpAddress"`
    +}
    +
    +func init() {
    +	t["VsanHostIpConfig"] = reflect.TypeOf((*VsanHostIpConfig)(nil)).Elem()
    +}
    +
    +type VsanHostMembershipInfo struct {
    +	DynamicData
    +
    +	NodeUuid string `xml:"nodeUuid"`
    +	Hostname string `xml:"hostname"`
    +}
    +
    +func init() {
    +	t["VsanHostMembershipInfo"] = reflect.TypeOf((*VsanHostMembershipInfo)(nil)).Elem()
    +}
    +
    +type VsanHostRuntimeInfo struct {
    +	DynamicData
    +
    +	MembershipList []VsanHostMembershipInfo       `xml:"membershipList,omitempty"`
    +	DiskIssues     []VsanHostRuntimeInfoDiskIssue `xml:"diskIssues,omitempty"`
    +	AccessGenNo    int32                          `xml:"accessGenNo,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanHostRuntimeInfo"] = reflect.TypeOf((*VsanHostRuntimeInfo)(nil)).Elem()
    +}
    +
    +type VsanHostRuntimeInfoDiskIssue struct {
    +	DynamicData
    +
    +	DiskId string `xml:"diskId"`
    +	Issue  string `xml:"issue"`
    +}
    +
    +func init() {
    +	t["VsanHostRuntimeInfoDiskIssue"] = reflect.TypeOf((*VsanHostRuntimeInfoDiskIssue)(nil)).Elem()
    +}
    +
    +type VsanHostVsanDiskInfo struct {
    +	DynamicData
    +
    +	VsanUuid      string `xml:"vsanUuid"`
    +	FormatVersion int32  `xml:"formatVersion"`
    +}
    +
    +func init() {
    +	t["VsanHostVsanDiskInfo"] = reflect.TypeOf((*VsanHostVsanDiskInfo)(nil)).Elem()
    +}
    +
    +type VsanIncompatibleDiskMapping struct {
    +	VsanDiskFault
    +}
    +
    +func init() {
    +	t["VsanIncompatibleDiskMapping"] = reflect.TypeOf((*VsanIncompatibleDiskMapping)(nil)).Elem()
    +}
    +
    +type VsanIncompatibleDiskMappingFault VsanIncompatibleDiskMapping
    +
    +func init() {
    +	t["VsanIncompatibleDiskMappingFault"] = reflect.TypeOf((*VsanIncompatibleDiskMappingFault)(nil)).Elem()
    +}
    +
    +type VsanNewPolicyBatch struct {
    +	DynamicData
    +
    +	Size   []int64 `xml:"size,omitempty"`
    +	Policy string  `xml:"policy,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanNewPolicyBatch"] = reflect.TypeOf((*VsanNewPolicyBatch)(nil)).Elem()
    +}
    +
    +type VsanPolicyChangeBatch struct {
    +	DynamicData
    +
    +	Uuid   []string `xml:"uuid,omitempty"`
    +	Policy string   `xml:"policy,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanPolicyChangeBatch"] = reflect.TypeOf((*VsanPolicyChangeBatch)(nil)).Elem()
    +}
    +
    +type VsanPolicyCost struct {
    +	DynamicData
    +
    +	ChangeDataSize                      int64   `xml:"changeDataSize,omitempty"`
    +	CurrentDataSize                     int64   `xml:"currentDataSize,omitempty"`
    +	TempDataSize                        int64   `xml:"tempDataSize,omitempty"`
    +	CopyDataSize                        int64   `xml:"copyDataSize,omitempty"`
    +	ChangeFlashReadCacheSize            int64   `xml:"changeFlashReadCacheSize,omitempty"`
    +	CurrentFlashReadCacheSize           int64   `xml:"currentFlashReadCacheSize,omitempty"`
    +	CurrentDiskSpaceToAddressSpaceRatio float32 `xml:"currentDiskSpaceToAddressSpaceRatio,omitempty"`
    +	DiskSpaceToAddressSpaceRatio        float32 `xml:"diskSpaceToAddressSpaceRatio,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanPolicyCost"] = reflect.TypeOf((*VsanPolicyCost)(nil)).Elem()
    +}
    +
    +type VsanPolicySatisfiability struct {
    +	DynamicData
    +
    +	Uuid          string              `xml:"uuid,omitempty"`
    +	IsSatisfiable bool                `xml:"isSatisfiable"`
    +	Reason        *LocalizableMessage `xml:"reason,omitempty"`
    +	Cost          *VsanPolicyCost     `xml:"cost,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanPolicySatisfiability"] = reflect.TypeOf((*VsanPolicySatisfiability)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemAPIBrokenIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	Hosts []ManagedObjectReference `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemAPIBrokenIssue"] = reflect.TypeOf((*VsanUpgradeSystemAPIBrokenIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemAutoClaimEnabledOnHostsIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	Hosts []ManagedObjectReference `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemAutoClaimEnabledOnHostsIssue"] = reflect.TypeOf((*VsanUpgradeSystemAutoClaimEnabledOnHostsIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemHostsDisconnectedIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	Hosts []ManagedObjectReference `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemHostsDisconnectedIssue"] = reflect.TypeOf((*VsanUpgradeSystemHostsDisconnectedIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemMissingHostsInClusterIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	Hosts []ManagedObjectReference `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemMissingHostsInClusterIssue"] = reflect.TypeOf((*VsanUpgradeSystemMissingHostsInClusterIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemNetworkPartitionInfo struct {
    +	DynamicData
    +
    +	Hosts []ManagedObjectReference `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemNetworkPartitionInfo"] = reflect.TypeOf((*VsanUpgradeSystemNetworkPartitionInfo)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemNetworkPartitionIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	Partitions []VsanUpgradeSystemNetworkPartitionInfo `xml:"partitions"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemNetworkPartitionIssue"] = reflect.TypeOf((*VsanUpgradeSystemNetworkPartitionIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemNotEnoughFreeCapacityIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	ReducedRedundancyUpgradePossible bool `xml:"reducedRedundancyUpgradePossible"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemNotEnoughFreeCapacityIssue"] = reflect.TypeOf((*VsanUpgradeSystemNotEnoughFreeCapacityIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemPreflightCheckIssue struct {
    +	DynamicData
    +
    +	Msg string `xml:"msg"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemPreflightCheckIssue"] = reflect.TypeOf((*VsanUpgradeSystemPreflightCheckIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemPreflightCheckResult struct {
    +	DynamicData
    +
    +	Issues               []BaseVsanUpgradeSystemPreflightCheckIssue `xml:"issues,omitempty,typeattr"`
    +	DiskMappingToRestore *VsanHostDiskMapping                       `xml:"diskMappingToRestore,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemPreflightCheckResult"] = reflect.TypeOf((*VsanUpgradeSystemPreflightCheckResult)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemRogueHostsInClusterIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	Uuids []string `xml:"uuids"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemRogueHostsInClusterIssue"] = reflect.TypeOf((*VsanUpgradeSystemRogueHostsInClusterIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemUpgradeHistoryDiskGroupOp struct {
    +	VsanUpgradeSystemUpgradeHistoryItem
    +
    +	Operation   string              `xml:"operation"`
    +	DiskMapping VsanHostDiskMapping `xml:"diskMapping"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemUpgradeHistoryDiskGroupOp"] = reflect.TypeOf((*VsanUpgradeSystemUpgradeHistoryDiskGroupOp)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemUpgradeHistoryItem struct {
    +	DynamicData
    +
    +	Timestamp time.Time               `xml:"timestamp"`
    +	Host      *ManagedObjectReference `xml:"host,omitempty"`
    +	Message   string                  `xml:"message"`
    +	Task      *ManagedObjectReference `xml:"task,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemUpgradeHistoryItem"] = reflect.TypeOf((*VsanUpgradeSystemUpgradeHistoryItem)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemUpgradeHistoryPreflightFail struct {
    +	VsanUpgradeSystemUpgradeHistoryItem
    +
    +	PreflightResult VsanUpgradeSystemPreflightCheckResult `xml:"preflightResult"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemUpgradeHistoryPreflightFail"] = reflect.TypeOf((*VsanUpgradeSystemUpgradeHistoryPreflightFail)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemUpgradeStatus struct {
    +	DynamicData
    +
    +	InProgress bool                                      `xml:"inProgress"`
    +	History    []BaseVsanUpgradeSystemUpgradeHistoryItem `xml:"history,omitempty,typeattr"`
    +	Aborted    *bool                                     `xml:"aborted"`
    +	Completed  *bool                                     `xml:"completed"`
    +	Progress   int32                                     `xml:"progress,omitempty"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemUpgradeStatus"] = reflect.TypeOf((*VsanUpgradeSystemUpgradeStatus)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemV2ObjectsPresentDuringDowngradeIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	Uuids []string `xml:"uuids"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemV2ObjectsPresentDuringDowngradeIssue"] = reflect.TypeOf((*VsanUpgradeSystemV2ObjectsPresentDuringDowngradeIssue)(nil)).Elem()
    +}
    +
    +type VsanUpgradeSystemWrongEsxVersionIssue struct {
    +	VsanUpgradeSystemPreflightCheckIssue
    +
    +	Hosts []ManagedObjectReference `xml:"hosts"`
    +}
    +
    +func init() {
    +	t["VsanUpgradeSystemWrongEsxVersionIssue"] = reflect.TypeOf((*VsanUpgradeSystemWrongEsxVersionIssue)(nil)).Elem()
    +}
    +
    +type VslmCloneSpec struct {
    +	VslmMigrateSpec
    +
    +	Name              string `xml:"name"`
    +	KeepAfterDeleteVm *bool  `xml:"keepAfterDeleteVm"`
    +}
    +
    +func init() {
    +	t["VslmCloneSpec"] = reflect.TypeOf((*VslmCloneSpec)(nil)).Elem()
    +}
    +
    +type VslmCreateSpec struct {
    +	DynamicData
    +
    +	Name              string                          `xml:"name"`
    +	KeepAfterDeleteVm *bool                           `xml:"keepAfterDeleteVm"`
    +	BackingSpec       BaseVslmCreateSpecBackingSpec   `xml:"backingSpec,typeattr"`
    +	CapacityInMB      int64                           `xml:"capacityInMB"`
    +	Profile           []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["VslmCreateSpec"] = reflect.TypeOf((*VslmCreateSpec)(nil)).Elem()
    +}
    +
    +type VslmCreateSpecBackingSpec struct {
    +	DynamicData
    +
    +	Datastore ManagedObjectReference `xml:"datastore"`
    +	Path      string                 `xml:"path,omitempty"`
    +}
    +
    +func init() {
    +	t["VslmCreateSpecBackingSpec"] = reflect.TypeOf((*VslmCreateSpecBackingSpec)(nil)).Elem()
    +}
    +
    +type VslmCreateSpecDiskFileBackingSpec struct {
    +	VslmCreateSpecBackingSpec
    +
    +	ProvisioningType string `xml:"provisioningType,omitempty"`
    +}
    +
    +func init() {
    +	t["VslmCreateSpecDiskFileBackingSpec"] = reflect.TypeOf((*VslmCreateSpecDiskFileBackingSpec)(nil)).Elem()
    +}
    +
    +type VslmCreateSpecRawDiskMappingBackingSpec struct {
    +	VslmCreateSpecBackingSpec
    +
    +	LunUuid           string `xml:"lunUuid"`
    +	CompatibilityMode string `xml:"compatibilityMode"`
    +}
    +
    +func init() {
    +	t["VslmCreateSpecRawDiskMappingBackingSpec"] = reflect.TypeOf((*VslmCreateSpecRawDiskMappingBackingSpec)(nil)).Elem()
    +}
    +
    +type VslmMigrateSpec struct {
    +	DynamicData
    +
    +	BackingSpec BaseVslmCreateSpecBackingSpec   `xml:"backingSpec,typeattr"`
    +	Profile     []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +	Consolidate *bool                           `xml:"consolidate"`
    +}
    +
    +func init() {
    +	t["VslmMigrateSpec"] = reflect.TypeOf((*VslmMigrateSpec)(nil)).Elem()
    +}
    +
    +type VslmRelocateSpec struct {
    +	VslmMigrateSpec
    +}
    +
    +func init() {
    +	t["VslmRelocateSpec"] = reflect.TypeOf((*VslmRelocateSpec)(nil)).Elem()
    +}
    +
    +type VslmTagEntry struct {
    +	DynamicData
    +
    +	TagName            string `xml:"tagName"`
    +	ParentCategoryName string `xml:"parentCategoryName"`
    +}
    +
    +func init() {
    +	t["VslmTagEntry"] = reflect.TypeOf((*VslmTagEntry)(nil)).Elem()
    +}
    +
    +type VspanDestPortConflict struct {
    +	DvsFault
    +
    +	VspanSessionKey1 string `xml:"vspanSessionKey1"`
    +	VspanSessionKey2 string `xml:"vspanSessionKey2"`
    +	PortKey          string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["VspanDestPortConflict"] = reflect.TypeOf((*VspanDestPortConflict)(nil)).Elem()
    +}
    +
    +type VspanDestPortConflictFault VspanDestPortConflict
    +
    +func init() {
    +	t["VspanDestPortConflictFault"] = reflect.TypeOf((*VspanDestPortConflictFault)(nil)).Elem()
    +}
    +
    +type VspanPortConflict struct {
    +	DvsFault
    +
    +	VspanSessionKey1 string `xml:"vspanSessionKey1"`
    +	VspanSessionKey2 string `xml:"vspanSessionKey2"`
    +	PortKey          string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["VspanPortConflict"] = reflect.TypeOf((*VspanPortConflict)(nil)).Elem()
    +}
    +
    +type VspanPortConflictFault VspanPortConflict
    +
    +func init() {
    +	t["VspanPortConflictFault"] = reflect.TypeOf((*VspanPortConflictFault)(nil)).Elem()
    +}
    +
    +type VspanPortMoveFault struct {
    +	DvsFault
    +
    +	SrcPortgroupName  string `xml:"srcPortgroupName"`
    +	DestPortgroupName string `xml:"destPortgroupName"`
    +	PortKey           string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["VspanPortMoveFault"] = reflect.TypeOf((*VspanPortMoveFault)(nil)).Elem()
    +}
    +
    +type VspanPortMoveFaultFault VspanPortMoveFault
    +
    +func init() {
    +	t["VspanPortMoveFaultFault"] = reflect.TypeOf((*VspanPortMoveFaultFault)(nil)).Elem()
    +}
    +
    +type VspanPortPromiscChangeFault struct {
    +	DvsFault
    +
    +	PortKey string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["VspanPortPromiscChangeFault"] = reflect.TypeOf((*VspanPortPromiscChangeFault)(nil)).Elem()
    +}
    +
    +type VspanPortPromiscChangeFaultFault VspanPortPromiscChangeFault
    +
    +func init() {
    +	t["VspanPortPromiscChangeFaultFault"] = reflect.TypeOf((*VspanPortPromiscChangeFaultFault)(nil)).Elem()
    +}
    +
    +type VspanPortgroupPromiscChangeFault struct {
    +	DvsFault
    +
    +	PortgroupName string `xml:"portgroupName"`
    +}
    +
    +func init() {
    +	t["VspanPortgroupPromiscChangeFault"] = reflect.TypeOf((*VspanPortgroupPromiscChangeFault)(nil)).Elem()
    +}
    +
    +type VspanPortgroupPromiscChangeFaultFault VspanPortgroupPromiscChangeFault
    +
    +func init() {
    +	t["VspanPortgroupPromiscChangeFaultFault"] = reflect.TypeOf((*VspanPortgroupPromiscChangeFaultFault)(nil)).Elem()
    +}
    +
    +type VspanPortgroupTypeChangeFault struct {
    +	DvsFault
    +
    +	PortgroupName string `xml:"portgroupName"`
    +}
    +
    +func init() {
    +	t["VspanPortgroupTypeChangeFault"] = reflect.TypeOf((*VspanPortgroupTypeChangeFault)(nil)).Elem()
    +}
    +
    +type VspanPortgroupTypeChangeFaultFault VspanPortgroupTypeChangeFault
    +
    +func init() {
    +	t["VspanPortgroupTypeChangeFaultFault"] = reflect.TypeOf((*VspanPortgroupTypeChangeFaultFault)(nil)).Elem()
    +}
    +
    +type VspanPromiscuousPortNotSupported struct {
    +	DvsFault
    +
    +	VspanSessionKey string `xml:"vspanSessionKey"`
    +	PortKey         string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["VspanPromiscuousPortNotSupported"] = reflect.TypeOf((*VspanPromiscuousPortNotSupported)(nil)).Elem()
    +}
    +
    +type VspanPromiscuousPortNotSupportedFault VspanPromiscuousPortNotSupported
    +
    +func init() {
    +	t["VspanPromiscuousPortNotSupportedFault"] = reflect.TypeOf((*VspanPromiscuousPortNotSupportedFault)(nil)).Elem()
    +}
    +
    +type VspanSameSessionPortConflict struct {
    +	DvsFault
    +
    +	VspanSessionKey string `xml:"vspanSessionKey"`
    +	PortKey         string `xml:"portKey"`
    +}
    +
    +func init() {
    +	t["VspanSameSessionPortConflict"] = reflect.TypeOf((*VspanSameSessionPortConflict)(nil)).Elem()
    +}
    +
    +type VspanSameSessionPortConflictFault VspanSameSessionPortConflict
    +
    +func init() {
    +	t["VspanSameSessionPortConflictFault"] = reflect.TypeOf((*VspanSameSessionPortConflictFault)(nil)).Elem()
    +}
    +
    +type VvolDatastoreInfo struct {
    +	DatastoreInfo
    +
    +	VvolDS *HostVvolVolume `xml:"vvolDS,omitempty"`
    +}
    +
    +func init() {
    +	t["VvolDatastoreInfo"] = reflect.TypeOf((*VvolDatastoreInfo)(nil)).Elem()
    +}
    +
    +type WaitForUpdates WaitForUpdatesRequestType
    +
    +func init() {
    +	t["WaitForUpdates"] = reflect.TypeOf((*WaitForUpdates)(nil)).Elem()
    +}
    +
    +type WaitForUpdatesEx WaitForUpdatesExRequestType
    +
    +func init() {
    +	t["WaitForUpdatesEx"] = reflect.TypeOf((*WaitForUpdatesEx)(nil)).Elem()
    +}
    +
    +type WaitForUpdatesExRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Version string                 `xml:"version,omitempty"`
    +	Options *WaitOptions           `xml:"options,omitempty"`
    +}
    +
    +func init() {
    +	t["WaitForUpdatesExRequestType"] = reflect.TypeOf((*WaitForUpdatesExRequestType)(nil)).Elem()
    +}
    +
    +type WaitForUpdatesExResponse struct {
    +	Returnval *UpdateSet `xml:"returnval,omitempty"`
    +}
    +
    +type WaitForUpdatesRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Version string                 `xml:"version,omitempty"`
    +}
    +
    +func init() {
    +	t["WaitForUpdatesRequestType"] = reflect.TypeOf((*WaitForUpdatesRequestType)(nil)).Elem()
    +}
    +
    +type WaitForUpdatesResponse struct {
    +	Returnval UpdateSet `xml:"returnval"`
    +}
    +
    +type WaitOptions struct {
    +	DynamicData
    +
    +	MaxWaitSeconds   *int32 `xml:"maxWaitSeconds"`
    +	MaxObjectUpdates int32  `xml:"maxObjectUpdates,omitempty"`
    +}
    +
    +func init() {
    +	t["WaitOptions"] = reflect.TypeOf((*WaitOptions)(nil)).Elem()
    +}
    +
    +type WakeOnLanNotSupported struct {
    +	VirtualHardwareCompatibilityIssue
    +}
    +
    +func init() {
    +	t["WakeOnLanNotSupported"] = reflect.TypeOf((*WakeOnLanNotSupported)(nil)).Elem()
    +}
    +
    +type WakeOnLanNotSupportedByVmotionNIC struct {
    +	HostPowerOpFailed
    +}
    +
    +func init() {
    +	t["WakeOnLanNotSupportedByVmotionNIC"] = reflect.TypeOf((*WakeOnLanNotSupportedByVmotionNIC)(nil)).Elem()
    +}
    +
    +type WakeOnLanNotSupportedByVmotionNICFault WakeOnLanNotSupportedByVmotionNIC
    +
    +func init() {
    +	t["WakeOnLanNotSupportedByVmotionNICFault"] = reflect.TypeOf((*WakeOnLanNotSupportedByVmotionNICFault)(nil)).Elem()
    +}
    +
    +type WakeOnLanNotSupportedFault WakeOnLanNotSupported
    +
    +func init() {
    +	t["WakeOnLanNotSupportedFault"] = reflect.TypeOf((*WakeOnLanNotSupportedFault)(nil)).Elem()
    +}
    +
    +type WarningUpgradeEvent struct {
    +	UpgradeEvent
    +}
    +
    +func init() {
    +	t["WarningUpgradeEvent"] = reflect.TypeOf((*WarningUpgradeEvent)(nil)).Elem()
    +}
    +
    +type WeeklyTaskScheduler struct {
    +	DailyTaskScheduler
    +
    +	Sunday    bool `xml:"sunday"`
    +	Monday    bool `xml:"monday"`
    +	Tuesday   bool `xml:"tuesday"`
    +	Wednesday bool `xml:"wednesday"`
    +	Thursday  bool `xml:"thursday"`
    +	Friday    bool `xml:"friday"`
    +	Saturday  bool `xml:"saturday"`
    +}
    +
    +func init() {
    +	t["WeeklyTaskScheduler"] = reflect.TypeOf((*WeeklyTaskScheduler)(nil)).Elem()
    +}
    +
    +type WillLoseHAProtection struct {
    +	MigrationFault
    +
    +	Resolution string `xml:"resolution"`
    +}
    +
    +func init() {
    +	t["WillLoseHAProtection"] = reflect.TypeOf((*WillLoseHAProtection)(nil)).Elem()
    +}
    +
    +type WillLoseHAProtectionFault WillLoseHAProtection
    +
    +func init() {
    +	t["WillLoseHAProtectionFault"] = reflect.TypeOf((*WillLoseHAProtectionFault)(nil)).Elem()
    +}
    +
    +type WillModifyConfigCpuRequirements struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["WillModifyConfigCpuRequirements"] = reflect.TypeOf((*WillModifyConfigCpuRequirements)(nil)).Elem()
    +}
    +
    +type WillModifyConfigCpuRequirementsFault WillModifyConfigCpuRequirements
    +
    +func init() {
    +	t["WillModifyConfigCpuRequirementsFault"] = reflect.TypeOf((*WillModifyConfigCpuRequirementsFault)(nil)).Elem()
    +}
    +
    +type WillResetSnapshotDirectory struct {
    +	MigrationFault
    +}
    +
    +func init() {
    +	t["WillResetSnapshotDirectory"] = reflect.TypeOf((*WillResetSnapshotDirectory)(nil)).Elem()
    +}
    +
    +type WillResetSnapshotDirectoryFault WillResetSnapshotDirectory
    +
    +func init() {
    +	t["WillResetSnapshotDirectoryFault"] = reflect.TypeOf((*WillResetSnapshotDirectoryFault)(nil)).Elem()
    +}
    +
    +type WinNetBIOSConfigInfo struct {
    +	NetBIOSConfigInfo
    +
    +	PrimaryWINS   string `xml:"primaryWINS"`
    +	SecondaryWINS string `xml:"secondaryWINS,omitempty"`
    +}
    +
    +func init() {
    +	t["WinNetBIOSConfigInfo"] = reflect.TypeOf((*WinNetBIOSConfigInfo)(nil)).Elem()
    +}
    +
    +type WipeDiskFault struct {
    +	VimFault
    +}
    +
    +func init() {
    +	t["WipeDiskFault"] = reflect.TypeOf((*WipeDiskFault)(nil)).Elem()
    +}
    +
    +type WipeDiskFaultFault WipeDiskFault
    +
    +func init() {
    +	t["WipeDiskFaultFault"] = reflect.TypeOf((*WipeDiskFaultFault)(nil)).Elem()
    +}
    +
    +type WitnessNodeInfo struct {
    +	DynamicData
    +
    +	IpSettings CustomizationIPSettings `xml:"ipSettings"`
    +	BiosUuid   string                  `xml:"biosUuid,omitempty"`
    +}
    +
    +func init() {
    +	t["WitnessNodeInfo"] = reflect.TypeOf((*WitnessNodeInfo)(nil)).Elem()
    +}
    +
    +type XmlToCustomizationSpecItem XmlToCustomizationSpecItemRequestType
    +
    +func init() {
    +	t["XmlToCustomizationSpecItem"] = reflect.TypeOf((*XmlToCustomizationSpecItem)(nil)).Elem()
    +}
    +
    +type XmlToCustomizationSpecItemRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	SpecItemXml string                 `xml:"specItemXml"`
    +}
    +
    +func init() {
    +	t["XmlToCustomizationSpecItemRequestType"] = reflect.TypeOf((*XmlToCustomizationSpecItemRequestType)(nil)).Elem()
    +}
    +
    +type XmlToCustomizationSpecItemResponse struct {
    +	Returnval CustomizationSpecItem `xml:"returnval"`
    +}
    +
    +type ZeroFillVirtualDiskRequestType struct {
    +	This       ManagedObjectReference  `xml:"_this"`
    +	Name       string                  `xml:"name"`
    +	Datacenter *ManagedObjectReference `xml:"datacenter,omitempty"`
    +}
    +
    +func init() {
    +	t["ZeroFillVirtualDiskRequestType"] = reflect.TypeOf((*ZeroFillVirtualDiskRequestType)(nil)).Elem()
    +}
    +
    +type ZeroFillVirtualDisk_Task ZeroFillVirtualDiskRequestType
    +
    +func init() {
    +	t["ZeroFillVirtualDisk_Task"] = reflect.TypeOf((*ZeroFillVirtualDisk_Task)(nil)).Elem()
    +}
    +
    +type ZeroFillVirtualDisk_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type ConfigureVchaRequestType struct {
    +	This       ManagedObjectReference `xml:"_this"`
    +	ConfigSpec VchaClusterConfigSpec  `xml:"configSpec"`
    +}
    +
    +func init() {
    +	t["configureVchaRequestType"] = reflect.TypeOf((*ConfigureVchaRequestType)(nil)).Elem()
    +}
    +
    +type ConfigureVcha_Task ConfigureVchaRequestType
    +
    +func init() {
    +	t["configureVcha_Task"] = reflect.TypeOf((*ConfigureVcha_Task)(nil)).Elem()
    +}
    +
    +type ConfigureVcha_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreatePassiveNodeRequestType struct {
    +	This                  ManagedObjectReference    `xml:"_this"`
    +	PassiveDeploymentSpec PassiveNodeDeploymentSpec `xml:"passiveDeploymentSpec"`
    +	SourceVcSpec          SourceNodeSpec            `xml:"sourceVcSpec"`
    +}
    +
    +func init() {
    +	t["createPassiveNodeRequestType"] = reflect.TypeOf((*CreatePassiveNodeRequestType)(nil)).Elem()
    +}
    +
    +type CreatePassiveNode_Task CreatePassiveNodeRequestType
    +
    +func init() {
    +	t["createPassiveNode_Task"] = reflect.TypeOf((*CreatePassiveNode_Task)(nil)).Elem()
    +}
    +
    +type CreatePassiveNode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type CreateWitnessNodeRequestType struct {
    +	This                  ManagedObjectReference `xml:"_this"`
    +	WitnessDeploymentSpec BaseNodeDeploymentSpec `xml:"witnessDeploymentSpec,typeattr"`
    +	SourceVcSpec          SourceNodeSpec         `xml:"sourceVcSpec"`
    +}
    +
    +func init() {
    +	t["createWitnessNodeRequestType"] = reflect.TypeOf((*CreateWitnessNodeRequestType)(nil)).Elem()
    +}
    +
    +type CreateWitnessNode_Task CreateWitnessNodeRequestType
    +
    +func init() {
    +	t["createWitnessNode_Task"] = reflect.TypeOf((*CreateWitnessNode_Task)(nil)).Elem()
    +}
    +
    +type CreateWitnessNode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DeployVchaRequestType struct {
    +	This           ManagedObjectReference    `xml:"_this"`
    +	DeploymentSpec VchaClusterDeploymentSpec `xml:"deploymentSpec"`
    +}
    +
    +func init() {
    +	t["deployVchaRequestType"] = reflect.TypeOf((*DeployVchaRequestType)(nil)).Elem()
    +}
    +
    +type DeployVcha_Task DeployVchaRequestType
    +
    +func init() {
    +	t["deployVcha_Task"] = reflect.TypeOf((*DeployVcha_Task)(nil)).Elem()
    +}
    +
    +type DeployVcha_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type DestroyVchaRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["destroyVchaRequestType"] = reflect.TypeOf((*DestroyVchaRequestType)(nil)).Elem()
    +}
    +
    +type DestroyVcha_Task DestroyVchaRequestType
    +
    +func init() {
    +	t["destroyVcha_Task"] = reflect.TypeOf((*DestroyVcha_Task)(nil)).Elem()
    +}
    +
    +type DestroyVcha_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type FetchSoftwarePackages FetchSoftwarePackagesRequestType
    +
    +func init() {
    +	t["fetchSoftwarePackages"] = reflect.TypeOf((*FetchSoftwarePackages)(nil)).Elem()
    +}
    +
    +type FetchSoftwarePackagesRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["fetchSoftwarePackagesRequestType"] = reflect.TypeOf((*FetchSoftwarePackagesRequestType)(nil)).Elem()
    +}
    +
    +type FetchSoftwarePackagesResponse struct {
    +	Returnval []SoftwarePackage `xml:"returnval,omitempty"`
    +}
    +
    +type GetClusterMode GetClusterModeRequestType
    +
    +func init() {
    +	t["getClusterMode"] = reflect.TypeOf((*GetClusterMode)(nil)).Elem()
    +}
    +
    +type GetClusterModeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["getClusterModeRequestType"] = reflect.TypeOf((*GetClusterModeRequestType)(nil)).Elem()
    +}
    +
    +type GetClusterModeResponse struct {
    +	Returnval string `xml:"returnval"`
    +}
    +
    +type GetVchaConfig GetVchaConfigRequestType
    +
    +func init() {
    +	t["getVchaConfig"] = reflect.TypeOf((*GetVchaConfig)(nil)).Elem()
    +}
    +
    +type GetVchaConfigRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["getVchaConfigRequestType"] = reflect.TypeOf((*GetVchaConfigRequestType)(nil)).Elem()
    +}
    +
    +type GetVchaConfigResponse struct {
    +	Returnval VchaClusterConfigInfo `xml:"returnval"`
    +}
    +
    +type InitiateFailoverRequestType struct {
    +	This    ManagedObjectReference `xml:"_this"`
    +	Planned bool                   `xml:"planned"`
    +}
    +
    +func init() {
    +	t["initiateFailoverRequestType"] = reflect.TypeOf((*InitiateFailoverRequestType)(nil)).Elem()
    +}
    +
    +type InitiateFailover_Task InitiateFailoverRequestType
    +
    +func init() {
    +	t["initiateFailover_Task"] = reflect.TypeOf((*InitiateFailover_Task)(nil)).Elem()
    +}
    +
    +type InitiateFailover_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type InstallDate InstallDateRequestType
    +
    +func init() {
    +	t["installDate"] = reflect.TypeOf((*InstallDate)(nil)).Elem()
    +}
    +
    +type InstallDateRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["installDateRequestType"] = reflect.TypeOf((*InstallDateRequestType)(nil)).Elem()
    +}
    +
    +type InstallDateResponse struct {
    +	Returnval time.Time `xml:"returnval"`
    +}
    +
    +type PrepareVchaRequestType struct {
    +	This        ManagedObjectReference `xml:"_this"`
    +	NetworkSpec VchaClusterNetworkSpec `xml:"networkSpec"`
    +}
    +
    +func init() {
    +	t["prepareVchaRequestType"] = reflect.TypeOf((*PrepareVchaRequestType)(nil)).Elem()
    +}
    +
    +type PrepareVcha_Task PrepareVchaRequestType
    +
    +func init() {
    +	t["prepareVcha_Task"] = reflect.TypeOf((*PrepareVcha_Task)(nil)).Elem()
    +}
    +
    +type PrepareVcha_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type QueryDatacenterConfigOptionDescriptor QueryDatacenterConfigOptionDescriptorRequestType
    +
    +func init() {
    +	t["queryDatacenterConfigOptionDescriptor"] = reflect.TypeOf((*QueryDatacenterConfigOptionDescriptor)(nil)).Elem()
    +}
    +
    +type QueryDatacenterConfigOptionDescriptorRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["queryDatacenterConfigOptionDescriptorRequestType"] = reflect.TypeOf((*QueryDatacenterConfigOptionDescriptorRequestType)(nil)).Elem()
    +}
    +
    +type QueryDatacenterConfigOptionDescriptorResponse struct {
    +	Returnval []VirtualMachineConfigOptionDescriptor `xml:"returnval,omitempty"`
    +}
    +
    +type ReloadVirtualMachineFromPathRequestType struct {
    +	This              ManagedObjectReference `xml:"_this"`
    +	ConfigurationPath string                 `xml:"configurationPath"`
    +}
    +
    +func init() {
    +	t["reloadVirtualMachineFromPathRequestType"] = reflect.TypeOf((*ReloadVirtualMachineFromPathRequestType)(nil)).Elem()
    +}
    +
    +type ReloadVirtualMachineFromPath_Task ReloadVirtualMachineFromPathRequestType
    +
    +func init() {
    +	t["reloadVirtualMachineFromPath_Task"] = reflect.TypeOf((*ReloadVirtualMachineFromPath_Task)(nil)).Elem()
    +}
    +
    +type ReloadVirtualMachineFromPath_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type SetClusterModeRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +	Mode string                 `xml:"mode"`
    +}
    +
    +func init() {
    +	t["setClusterModeRequestType"] = reflect.TypeOf((*SetClusterModeRequestType)(nil)).Elem()
    +}
    +
    +type SetClusterMode_Task SetClusterModeRequestType
    +
    +func init() {
    +	t["setClusterMode_Task"] = reflect.TypeOf((*SetClusterMode_Task)(nil)).Elem()
    +}
    +
    +type SetClusterMode_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type SetCustomValue SetCustomValueRequestType
    +
    +func init() {
    +	t["setCustomValue"] = reflect.TypeOf((*SetCustomValue)(nil)).Elem()
    +}
    +
    +type SetCustomValueRequestType struct {
    +	This  ManagedObjectReference `xml:"_this"`
    +	Key   string                 `xml:"key"`
    +	Value string                 `xml:"value"`
    +}
    +
    +func init() {
    +	t["setCustomValueRequestType"] = reflect.TypeOf((*SetCustomValueRequestType)(nil)).Elem()
    +}
    +
    +type SetCustomValueResponse struct {
    +}
    +
    +type UnregisterVAppRequestType struct {
    +	This ManagedObjectReference `xml:"_this"`
    +}
    +
    +func init() {
    +	t["unregisterVAppRequestType"] = reflect.TypeOf((*UnregisterVAppRequestType)(nil)).Elem()
    +}
    +
    +type UnregisterVApp_Task UnregisterVAppRequestType
    +
    +func init() {
    +	t["unregisterVApp_Task"] = reflect.TypeOf((*UnregisterVApp_Task)(nil)).Elem()
    +}
    +
    +type UnregisterVApp_TaskResponse struct {
    +	Returnval ManagedObjectReference `xml:"returnval"`
    +}
    +
    +type VersionURI string
    +
    +func init() {
    +	t["versionURI"] = reflect.TypeOf((*VersionURI)(nil)).Elem()
    +}
    +
    +type VslmInfrastructureObjectPolicy struct {
    +	DynamicData
    +
    +	Name            string                `xml:"name"`
    +	BackingObjectId string                `xml:"backingObjectId"`
    +	ProfileId       string                `xml:"profileId"`
    +	Error           *LocalizedMethodFault `xml:"error,omitempty"`
    +}
    +
    +func init() {
    +	t["vslmInfrastructureObjectPolicy"] = reflect.TypeOf((*VslmInfrastructureObjectPolicy)(nil)).Elem()
    +}
    +
    +type VslmInfrastructureObjectPolicySpec struct {
    +	DynamicData
    +
    +	Datastore ManagedObjectReference          `xml:"datastore"`
    +	Profile   []BaseVirtualMachineProfileSpec `xml:"profile,omitempty,typeattr"`
    +}
    +
    +func init() {
    +	t["vslmInfrastructureObjectPolicySpec"] = reflect.TypeOf((*VslmInfrastructureObjectPolicySpec)(nil)).Elem()
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/LICENSE b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/LICENSE
    new file mode 100644
    index 00000000000..74487567632
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/LICENSE
    @@ -0,0 +1,27 @@
    +Copyright (c) 2012 The Go Authors. All rights reserved.
    +
    +Redistribution and use in source and binary forms, with or without
    +modification, are permitted provided that the following conditions are
    +met:
    +
    +   * Redistributions of source code must retain the above copyright
    +notice, this list of conditions and the following disclaimer.
    +   * Redistributions in binary form must reproduce the above
    +copyright notice, this list of conditions and the following disclaimer
    +in the documentation and/or other materials provided with the
    +distribution.
    +   * Neither the name of Google Inc. nor the names of its
    +contributors may be used to endorse or promote products derived from
    +this software without specific prior written permission.
    +
    +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/extras.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/extras.go
    new file mode 100644
    index 00000000000..9a15b7c8eb6
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/extras.go
    @@ -0,0 +1,99 @@
    +/*
    +Copyright (c) 2014 VMware, Inc. All Rights Reserved.
    +
    +Licensed under the Apache License, Version 2.0 (the "License");
    +you may not use this file except in compliance with the License.
    +You may obtain a copy of the License at
    +
    +    http://www.apache.org/licenses/LICENSE-2.0
    +
    +Unless required by applicable law or agreed to in writing, software
    +distributed under the License is distributed on an "AS IS" BASIS,
    +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +See the License for the specific language governing permissions and
    +limitations under the License.
    +*/
    +
    +package xml
    +
    +import (
    +	"reflect"
    +	"time"
    +)
    +
    +var xmlSchemaInstance = Name{Space: "http://www.w3.org/2001/XMLSchema-instance", Local: "type"}
    +
    +var xsiType = Name{Space: "xsi", Local: "type"}
    +
    +var stringToTypeMap = map[string]reflect.Type{
    +	"xsd:boolean":       reflect.TypeOf((*bool)(nil)).Elem(),
    +	"xsd:byte":          reflect.TypeOf((*int8)(nil)).Elem(),
    +	"xsd:short":         reflect.TypeOf((*int16)(nil)).Elem(),
    +	"xsd:int":           reflect.TypeOf((*int32)(nil)).Elem(),
    +	"xsd:long":          reflect.TypeOf((*int64)(nil)).Elem(),
    +	"xsd:unsignedByte":  reflect.TypeOf((*uint8)(nil)).Elem(),
    +	"xsd:unsignedShort": reflect.TypeOf((*uint16)(nil)).Elem(),
    +	"xsd:unsignedInt":   reflect.TypeOf((*uint32)(nil)).Elem(),
    +	"xsd:unsignedLong":  reflect.TypeOf((*uint64)(nil)).Elem(),
    +	"xsd:float":         reflect.TypeOf((*float32)(nil)).Elem(),
    +	"xsd:double":        reflect.TypeOf((*float64)(nil)).Elem(),
    +	"xsd:string":        reflect.TypeOf((*string)(nil)).Elem(),
    +	"xsd:dateTime":      reflect.TypeOf((*time.Time)(nil)).Elem(),
    +	"xsd:base64Binary":  reflect.TypeOf((*[]byte)(nil)).Elem(),
    +}
    +
    +// Return a reflect.Type for the specified type. Nil if unknown.
    +func stringToType(s string) reflect.Type {
    +	return stringToTypeMap[s]
    +}
    +
    +// Return a string for the specified reflect.Type. Panic if unknown.
    +func typeToString(typ reflect.Type) string {
    +	switch typ.Kind() {
    +	case reflect.Bool:
    +		return "xsd:boolean"
    +	case reflect.Int8:
    +		return "xsd:byte"
    +	case reflect.Int16:
    +		return "xsd:short"
    +	case reflect.Int32:
    +		return "xsd:int"
    +	case reflect.Int, reflect.Int64:
    +		return "xsd:long"
    +	case reflect.Uint8:
    +		return "xsd:unsignedByte"
    +	case reflect.Uint16:
    +		return "xsd:unsignedShort"
    +	case reflect.Uint32:
    +		return "xsd:unsignedInt"
    +	case reflect.Uint, reflect.Uint64:
    +		return "xsd:unsignedLong"
    +	case reflect.Float32:
    +		return "xsd:float"
    +	case reflect.Float64:
    +		return "xsd:double"
    +	case reflect.String:
    +		name := typ.Name()
    +		if name == "string" {
    +			return "xsd:string"
    +		}
    +		return name
    +	case reflect.Struct:
    +		if typ == stringToTypeMap["xsd:dateTime"] {
    +			return "xsd:dateTime"
    +		}
    +
    +		// Expect any other struct to be handled...
    +		return typ.Name()
    +	case reflect.Slice:
    +		if typ.Elem().Kind() == reflect.Uint8 {
    +			return "xsd:base64Binary"
    +		}
    +	case reflect.Array:
    +		if typ.Elem().Kind() == reflect.Uint8 {
    +			return "xsd:base64Binary"
    +		}
    +	}
    +
    +	panic("don't know what to do for type: " + typ.String())
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/marshal.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/marshal.go
    new file mode 100644
    index 00000000000..39bbac1d171
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/marshal.go
    @@ -0,0 +1,949 @@
    +// Copyright 2011 The Go Authors. All rights reserved.
    +// Use of this source code is governed by a BSD-style
    +// license that can be found in the LICENSE file.
    +
    +package xml
    +
    +import (
    +	"bufio"
    +	"bytes"
    +	"encoding"
    +	"fmt"
    +	"io"
    +	"reflect"
    +	"strconv"
    +	"strings"
    +)
    +
    +const (
    +	// A generic XML header suitable for use with the output of Marshal.
    +	// This is not automatically added to any output of this package,
    +	// it is provided as a convenience.
    +	Header = `` + "\n"
    +)
    +
    +// Marshal returns the XML encoding of v.
    +//
    +// Marshal handles an array or slice by marshalling each of the elements.
    +// Marshal handles a pointer by marshalling the value it points at or, if the
    +// pointer is nil, by writing nothing.  Marshal handles an interface value by
    +// marshalling the value it contains or, if the interface value is nil, by
    +// writing nothing.  Marshal handles all other data by writing one or more XML
    +// elements containing the data.
    +//
    +// The name for the XML elements is taken from, in order of preference:
    +//     - the tag on the XMLName field, if the data is a struct
    +//     - the value of the XMLName field of type xml.Name
    +//     - the tag of the struct field used to obtain the data
    +//     - the name of the struct field used to obtain the data
    +//     - the name of the marshalled type
    +//
    +// The XML element for a struct contains marshalled elements for each of the
    +// exported fields of the struct, with these exceptions:
    +//     - the XMLName field, described above, is omitted.
    +//     - a field with tag "-" is omitted.
    +//     - a field with tag "name,attr" becomes an attribute with
    +//       the given name in the XML element.
    +//     - a field with tag ",attr" becomes an attribute with the
    +//       field name in the XML element.
    +//     - a field with tag ",chardata" is written as character data,
    +//       not as an XML element.
    +//     - a field with tag ",innerxml" is written verbatim, not subject
    +//       to the usual marshalling procedure.
    +//     - a field with tag ",comment" is written as an XML comment, not
    +//       subject to the usual marshalling procedure. It must not contain
    +//       the "--" string within it.
    +//     - a field with a tag including the "omitempty" option is omitted
    +//       if the field value is empty. The empty values are false, 0, any
    +//       nil pointer or interface value, and any array, slice, map, or
    +//       string of length zero.
    +//     - an anonymous struct field is handled as if the fields of its
    +//       value were part of the outer struct.
    +//
    +// If a field uses a tag "a>b>c", then the element c will be nested inside
    +// parent elements a and b.  Fields that appear next to each other that name
    +// the same parent will be enclosed in one XML element.
    +//
    +// See MarshalIndent for an example.
    +//
    +// Marshal will return an error if asked to marshal a channel, function, or map.
    +func Marshal(v interface{}) ([]byte, error) {
    +	var b bytes.Buffer
    +	if err := NewEncoder(&b).Encode(v); err != nil {
    +		return nil, err
    +	}
    +	return b.Bytes(), nil
    +}
    +
    +// Marshaler is the interface implemented by objects that can marshal
    +// themselves into valid XML elements.
    +//
    +// MarshalXML encodes the receiver as zero or more XML elements.
    +// By convention, arrays or slices are typically encoded as a sequence
    +// of elements, one per entry.
    +// Using start as the element tag is not required, but doing so
    +// will enable Unmarshal to match the XML elements to the correct
    +// struct field.
    +// One common implementation strategy is to construct a separate
    +// value with a layout corresponding to the desired XML and then
    +// to encode it using e.EncodeElement.
    +// Another common strategy is to use repeated calls to e.EncodeToken
    +// to generate the XML output one token at a time.
    +// The sequence of encoded tokens must make up zero or more valid
    +// XML elements.
    +type Marshaler interface {
    +	MarshalXML(e *Encoder, start StartElement) error
    +}
    +
    +// MarshalerAttr is the interface implemented by objects that can marshal
    +// themselves into valid XML attributes.
    +//
    +// MarshalXMLAttr returns an XML attribute with the encoded value of the receiver.
    +// Using name as the attribute name is not required, but doing so
    +// will enable Unmarshal to match the attribute to the correct
    +// struct field.
    +// If MarshalXMLAttr returns the zero attribute Attr{}, no attribute
    +// will be generated in the output.
    +// MarshalXMLAttr is used only for struct fields with the
    +// "attr" option in the field tag.
    +type MarshalerAttr interface {
    +	MarshalXMLAttr(name Name) (Attr, error)
    +}
    +
    +// MarshalIndent works like Marshal, but each XML element begins on a new
    +// indented line that starts with prefix and is followed by one or more
    +// copies of indent according to the nesting depth.
    +func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {
    +	var b bytes.Buffer
    +	enc := NewEncoder(&b)
    +	enc.Indent(prefix, indent)
    +	if err := enc.Encode(v); err != nil {
    +		return nil, err
    +	}
    +	return b.Bytes(), nil
    +}
    +
    +// An Encoder writes XML data to an output stream.
    +type Encoder struct {
    +	p printer
    +}
    +
    +// NewEncoder returns a new encoder that writes to w.
    +func NewEncoder(w io.Writer) *Encoder {
    +	e := &Encoder{printer{Writer: bufio.NewWriter(w)}}
    +	e.p.encoder = e
    +	return e
    +}
    +
    +// Indent sets the encoder to generate XML in which each element
    +// begins on a new indented line that starts with prefix and is followed by
    +// one or more copies of indent according to the nesting depth.
    +func (enc *Encoder) Indent(prefix, indent string) {
    +	enc.p.prefix = prefix
    +	enc.p.indent = indent
    +}
    +
    +// Encode writes the XML encoding of v to the stream.
    +//
    +// See the documentation for Marshal for details about the conversion
    +// of Go values to XML.
    +//
    +// Encode calls Flush before returning.
    +func (enc *Encoder) Encode(v interface{}) error {
    +	err := enc.p.marshalValue(reflect.ValueOf(v), nil, nil)
    +	if err != nil {
    +		return err
    +	}
    +	return enc.p.Flush()
    +}
    +
    +// EncodeElement writes the XML encoding of v to the stream,
    +// using start as the outermost tag in the encoding.
    +//
    +// See the documentation for Marshal for details about the conversion
    +// of Go values to XML.
    +//
    +// EncodeElement calls Flush before returning.
    +func (enc *Encoder) EncodeElement(v interface{}, start StartElement) error {
    +	err := enc.p.marshalValue(reflect.ValueOf(v), nil, &start)
    +	if err != nil {
    +		return err
    +	}
    +	return enc.p.Flush()
    +}
    +
    +var (
    +	endComment   = []byte("-->")
    +	endProcInst  = []byte("?>")
    +	endDirective = []byte(">")
    +)
    +
    +// EncodeToken writes the given XML token to the stream.
    +// It returns an error if StartElement and EndElement tokens are not properly matched.
    +//
    +// EncodeToken does not call Flush, because usually it is part of a larger operation
    +// such as Encode or EncodeElement (or a custom Marshaler's MarshalXML invoked
    +// during those), and those will call Flush when finished.
    +// Callers that create an Encoder and then invoke EncodeToken directly, without
    +// using Encode or EncodeElement, need to call Flush when finished to ensure
    +// that the XML is written to the underlying writer.
    +//
    +// EncodeToken allows writing a ProcInst with Target set to "xml" only as the first token
    +// in the stream.
    +func (enc *Encoder) EncodeToken(t Token) error {
    +	p := &enc.p
    +	switch t := t.(type) {
    +	case StartElement:
    +		if err := p.writeStart(&t); err != nil {
    +			return err
    +		}
    +	case EndElement:
    +		if err := p.writeEnd(t.Name); err != nil {
    +			return err
    +		}
    +	case CharData:
    +		EscapeText(p, t)
    +	case Comment:
    +		if bytes.Contains(t, endComment) {
    +			return fmt.Errorf("xml: EncodeToken of Comment containing --> marker")
    +		}
    +		p.WriteString("")
    +		return p.cachedWriteError()
    +	case ProcInst:
    +		// First token to be encoded which is also a ProcInst with target of xml
    +		// is the xml declaration.  The only ProcInst where target of xml is allowed.
    +		if t.Target == "xml" && p.Buffered() != 0 {
    +			return fmt.Errorf("xml: EncodeToken of ProcInst xml target only valid for xml declaration, first token encoded")
    +		}
    +		if !isNameString(t.Target) {
    +			return fmt.Errorf("xml: EncodeToken of ProcInst with invalid Target")
    +		}
    +		if bytes.Contains(t.Inst, endProcInst) {
    +			return fmt.Errorf("xml: EncodeToken of ProcInst containing ?> marker")
    +		}
    +		p.WriteString(" 0 {
    +			p.WriteByte(' ')
    +			p.Write(t.Inst)
    +		}
    +		p.WriteString("?>")
    +	case Directive:
    +		if bytes.Contains(t, endDirective) {
    +			return fmt.Errorf("xml: EncodeToken of Directive containing > marker")
    +		}
    +		p.WriteString("")
    +	}
    +	return p.cachedWriteError()
    +}
    +
    +// Flush flushes any buffered XML to the underlying writer.
    +// See the EncodeToken documentation for details about when it is necessary.
    +func (enc *Encoder) Flush() error {
    +	return enc.p.Flush()
    +}
    +
    +type printer struct {
    +	*bufio.Writer
    +	encoder    *Encoder
    +	seq        int
    +	indent     string
    +	prefix     string
    +	depth      int
    +	indentedIn bool
    +	putNewline bool
    +	attrNS     map[string]string // map prefix -> name space
    +	attrPrefix map[string]string // map name space -> prefix
    +	prefixes   []string
    +	tags       []Name
    +}
    +
    +// createAttrPrefix finds the name space prefix attribute to use for the given name space,
    +// defining a new prefix if necessary. It returns the prefix.
    +func (p *printer) createAttrPrefix(url string) string {
    +	if prefix := p.attrPrefix[url]; prefix != "" {
    +		return prefix
    +	}
    +
    +	// The "http://www.w3.org/XML/1998/namespace" name space is predefined as "xml"
    +	// and must be referred to that way.
    +	// (The "http://www.w3.org/2000/xmlns/" name space is also predefined as "xmlns",
    +	// but users should not be trying to use that one directly - that's our job.)
    +	if url == xmlURL {
    +		return "xml"
    +	}
    +
    +	// Need to define a new name space.
    +	if p.attrPrefix == nil {
    +		p.attrPrefix = make(map[string]string)
    +		p.attrNS = make(map[string]string)
    +	}
    +
    +	// Pick a name. We try to use the final element of the path
    +	// but fall back to _.
    +	prefix := strings.TrimRight(url, "/")
    +	if i := strings.LastIndex(prefix, "/"); i >= 0 {
    +		prefix = prefix[i+1:]
    +	}
    +	if prefix == "" || !isName([]byte(prefix)) || strings.Contains(prefix, ":") {
    +		prefix = "_"
    +	}
    +	if strings.HasPrefix(prefix, "xml") {
    +		// xmlanything is reserved.
    +		prefix = "_" + prefix
    +	}
    +	if p.attrNS[prefix] != "" {
    +		// Name is taken. Find a better one.
    +		for p.seq++; ; p.seq++ {
    +			if id := prefix + "_" + strconv.Itoa(p.seq); p.attrNS[id] == "" {
    +				prefix = id
    +				break
    +			}
    +		}
    +	}
    +
    +	p.attrPrefix[url] = prefix
    +	p.attrNS[prefix] = url
    +
    +	p.WriteString(`xmlns:`)
    +	p.WriteString(prefix)
    +	p.WriteString(`="`)
    +	EscapeText(p, []byte(url))
    +	p.WriteString(`" `)
    +
    +	p.prefixes = append(p.prefixes, prefix)
    +
    +	return prefix
    +}
    +
    +// deleteAttrPrefix removes an attribute name space prefix.
    +func (p *printer) deleteAttrPrefix(prefix string) {
    +	delete(p.attrPrefix, p.attrNS[prefix])
    +	delete(p.attrNS, prefix)
    +}
    +
    +func (p *printer) markPrefix() {
    +	p.prefixes = append(p.prefixes, "")
    +}
    +
    +func (p *printer) popPrefix() {
    +	for len(p.prefixes) > 0 {
    +		prefix := p.prefixes[len(p.prefixes)-1]
    +		p.prefixes = p.prefixes[:len(p.prefixes)-1]
    +		if prefix == "" {
    +			break
    +		}
    +		p.deleteAttrPrefix(prefix)
    +	}
    +}
    +
    +var (
    +	marshalerType     = reflect.TypeOf((*Marshaler)(nil)).Elem()
    +	marshalerAttrType = reflect.TypeOf((*MarshalerAttr)(nil)).Elem()
    +	textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()
    +)
    +
    +// marshalValue writes one or more XML elements representing val.
    +// If val was obtained from a struct field, finfo must have its details.
    +func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo, startTemplate *StartElement) error {
    +	if startTemplate != nil && startTemplate.Name.Local == "" {
    +		return fmt.Errorf("xml: EncodeElement of StartElement with missing name")
    +	}
    +
    +	if !val.IsValid() {
    +		return nil
    +	}
    +	if finfo != nil && finfo.flags&fOmitEmpty != 0 && isEmptyValue(val) {
    +		return nil
    +	}
    +
    +	// Drill into interfaces and pointers.
    +	// This can turn into an infinite loop given a cyclic chain,
    +	// but it matches the Go 1 behavior.
    +	for val.Kind() == reflect.Interface || val.Kind() == reflect.Ptr {
    +		if val.IsNil() {
    +			return nil
    +		}
    +		val = val.Elem()
    +	}
    +
    +	kind := val.Kind()
    +	typ := val.Type()
    +
    +	// Check for marshaler.
    +	if val.CanInterface() && typ.Implements(marshalerType) {
    +		return p.marshalInterface(val.Interface().(Marshaler), defaultStart(typ, finfo, startTemplate))
    +	}
    +	if val.CanAddr() {
    +		pv := val.Addr()
    +		if pv.CanInterface() && pv.Type().Implements(marshalerType) {
    +			return p.marshalInterface(pv.Interface().(Marshaler), defaultStart(pv.Type(), finfo, startTemplate))
    +		}
    +	}
    +
    +	// Check for text marshaler.
    +	if val.CanInterface() && typ.Implements(textMarshalerType) {
    +		return p.marshalTextInterface(val.Interface().(encoding.TextMarshaler), defaultStart(typ, finfo, startTemplate))
    +	}
    +	if val.CanAddr() {
    +		pv := val.Addr()
    +		if pv.CanInterface() && pv.Type().Implements(textMarshalerType) {
    +			return p.marshalTextInterface(pv.Interface().(encoding.TextMarshaler), defaultStart(pv.Type(), finfo, startTemplate))
    +		}
    +	}
    +
    +	// Slices and arrays iterate over the elements. They do not have an enclosing tag.
    +	if (kind == reflect.Slice || kind == reflect.Array) && typ.Elem().Kind() != reflect.Uint8 {
    +		for i, n := 0, val.Len(); i < n; i++ {
    +			if err := p.marshalValue(val.Index(i), finfo, startTemplate); err != nil {
    +				return err
    +			}
    +		}
    +		return nil
    +	}
    +
    +	tinfo, err := getTypeInfo(typ)
    +	if err != nil {
    +		return err
    +	}
    +
    +	// Create start element.
    +	// Precedence for the XML element name is:
    +	// 0. startTemplate
    +	// 1. XMLName field in underlying struct;
    +	// 2. field name/tag in the struct field; and
    +	// 3. type name
    +	var start StartElement
    +
    +	if startTemplate != nil {
    +		start.Name = startTemplate.Name
    +		start.Attr = append(start.Attr, startTemplate.Attr...)
    +	} else if tinfo.xmlname != nil {
    +		xmlname := tinfo.xmlname
    +		if xmlname.name != "" {
    +			start.Name.Space, start.Name.Local = xmlname.xmlns, xmlname.name
    +		} else if v, ok := xmlname.value(val).Interface().(Name); ok && v.Local != "" {
    +			start.Name = v
    +		}
    +	}
    +	if start.Name.Local == "" && finfo != nil {
    +		start.Name.Space, start.Name.Local = finfo.xmlns, finfo.name
    +	}
    +	if start.Name.Local == "" {
    +		name := typ.Name()
    +		if name == "" {
    +			return &UnsupportedTypeError{typ}
    +		}
    +		start.Name.Local = name
    +	}
    +
    +	// Add type attribute if necessary
    +	if finfo != nil && finfo.flags&fTypeAttr != 0 {
    +		start.Attr = append(start.Attr, Attr{xmlSchemaInstance, typeToString(typ)})
    +	}
    +
    +	// Attributes
    +	for i := range tinfo.fields {
    +		finfo := &tinfo.fields[i]
    +		if finfo.flags&fAttr == 0 {
    +			continue
    +		}
    +		fv := finfo.value(val)
    +		name := Name{Space: finfo.xmlns, Local: finfo.name}
    +
    +		if finfo.flags&fOmitEmpty != 0 && isEmptyValue(fv) {
    +			continue
    +		}
    +
    +		if fv.Kind() == reflect.Interface && fv.IsNil() {
    +			continue
    +		}
    +
    +		if fv.CanInterface() && fv.Type().Implements(marshalerAttrType) {
    +			attr, err := fv.Interface().(MarshalerAttr).MarshalXMLAttr(name)
    +			if err != nil {
    +				return err
    +			}
    +			if attr.Name.Local != "" {
    +				start.Attr = append(start.Attr, attr)
    +			}
    +			continue
    +		}
    +
    +		if fv.CanAddr() {
    +			pv := fv.Addr()
    +			if pv.CanInterface() && pv.Type().Implements(marshalerAttrType) {
    +				attr, err := pv.Interface().(MarshalerAttr).MarshalXMLAttr(name)
    +				if err != nil {
    +					return err
    +				}
    +				if attr.Name.Local != "" {
    +					start.Attr = append(start.Attr, attr)
    +				}
    +				continue
    +			}
    +		}
    +
    +		if fv.CanInterface() && fv.Type().Implements(textMarshalerType) {
    +			text, err := fv.Interface().(encoding.TextMarshaler).MarshalText()
    +			if err != nil {
    +				return err
    +			}
    +			start.Attr = append(start.Attr, Attr{name, string(text)})
    +			continue
    +		}
    +
    +		if fv.CanAddr() {
    +			pv := fv.Addr()
    +			if pv.CanInterface() && pv.Type().Implements(textMarshalerType) {
    +				text, err := pv.Interface().(encoding.TextMarshaler).MarshalText()
    +				if err != nil {
    +					return err
    +				}
    +				start.Attr = append(start.Attr, Attr{name, string(text)})
    +				continue
    +			}
    +		}
    +
    +		// Dereference or skip nil pointer, interface values.
    +		switch fv.Kind() {
    +		case reflect.Ptr, reflect.Interface:
    +			if fv.IsNil() {
    +				continue
    +			}
    +			fv = fv.Elem()
    +		}
    +
    +		s, b, err := p.marshalSimple(fv.Type(), fv)
    +		if err != nil {
    +			return err
    +		}
    +		if b != nil {
    +			s = string(b)
    +		}
    +		start.Attr = append(start.Attr, Attr{name, s})
    +	}
    +
    +	if err := p.writeStart(&start); err != nil {
    +		return err
    +	}
    +
    +	if val.Kind() == reflect.Struct {
    +		err = p.marshalStruct(tinfo, val)
    +	} else {
    +		s, b, err1 := p.marshalSimple(typ, val)
    +		if err1 != nil {
    +			err = err1
    +		} else if b != nil {
    +			EscapeText(p, b)
    +		} else {
    +			p.EscapeString(s)
    +		}
    +	}
    +	if err != nil {
    +		return err
    +	}
    +
    +	if err := p.writeEnd(start.Name); err != nil {
    +		return err
    +	}
    +
    +	return p.cachedWriteError()
    +}
    +
    +// defaultStart returns the default start element to use,
    +// given the reflect type, field info, and start template.
    +func defaultStart(typ reflect.Type, finfo *fieldInfo, startTemplate *StartElement) StartElement {
    +	var start StartElement
    +	// Precedence for the XML element name is as above,
    +	// except that we do not look inside structs for the first field.
    +	if startTemplate != nil {
    +		start.Name = startTemplate.Name
    +		start.Attr = append(start.Attr, startTemplate.Attr...)
    +	} else if finfo != nil && finfo.name != "" {
    +		start.Name.Local = finfo.name
    +		start.Name.Space = finfo.xmlns
    +	} else if typ.Name() != "" {
    +		start.Name.Local = typ.Name()
    +	} else {
    +		// Must be a pointer to a named type,
    +		// since it has the Marshaler methods.
    +		start.Name.Local = typ.Elem().Name()
    +	}
    +
    +	// Add type attribute if necessary
    +	if finfo != nil && finfo.flags&fTypeAttr != 0 {
    +		start.Attr = append(start.Attr, Attr{xmlSchemaInstance, typeToString(typ)})
    +	}
    +
    +	return start
    +}
    +
    +// marshalInterface marshals a Marshaler interface value.
    +func (p *printer) marshalInterface(val Marshaler, start StartElement) error {
    +	// Push a marker onto the tag stack so that MarshalXML
    +	// cannot close the XML tags that it did not open.
    +	p.tags = append(p.tags, Name{})
    +	n := len(p.tags)
    +
    +	err := val.MarshalXML(p.encoder, start)
    +	if err != nil {
    +		return err
    +	}
    +
    +	// Make sure MarshalXML closed all its tags. p.tags[n-1] is the mark.
    +	if len(p.tags) > n {
    +		return fmt.Errorf("xml: %s.MarshalXML wrote invalid XML: <%s> not closed", receiverType(val), p.tags[len(p.tags)-1].Local)
    +	}
    +	p.tags = p.tags[:n-1]
    +	return nil
    +}
    +
    +// marshalTextInterface marshals a TextMarshaler interface value.
    +func (p *printer) marshalTextInterface(val encoding.TextMarshaler, start StartElement) error {
    +	if err := p.writeStart(&start); err != nil {
    +		return err
    +	}
    +	text, err := val.MarshalText()
    +	if err != nil {
    +		return err
    +	}
    +	EscapeText(p, text)
    +	return p.writeEnd(start.Name)
    +}
    +
    +// writeStart writes the given start element.
    +func (p *printer) writeStart(start *StartElement) error {
    +	if start.Name.Local == "" {
    +		return fmt.Errorf("xml: start tag with no name")
    +	}
    +
    +	p.tags = append(p.tags, start.Name)
    +	p.markPrefix()
    +
    +	p.writeIndent(1)
    +	p.WriteByte('<')
    +	p.WriteString(start.Name.Local)
    +
    +	if start.Name.Space != "" {
    +		p.WriteString(` xmlns="`)
    +		p.EscapeString(start.Name.Space)
    +		p.WriteByte('"')
    +	}
    +
    +	// Attributes
    +	for _, attr := range start.Attr {
    +		name := attr.Name
    +		if name.Local == "" {
    +			continue
    +		}
    +		p.WriteByte(' ')
    +		if name.Space != "" {
    +			p.WriteString(p.createAttrPrefix(name.Space))
    +			p.WriteByte(':')
    +		}
    +		p.WriteString(name.Local)
    +		p.WriteString(`="`)
    +		p.EscapeString(attr.Value)
    +		p.WriteByte('"')
    +	}
    +	p.WriteByte('>')
    +	return nil
    +}
    +
    +func (p *printer) writeEnd(name Name) error {
    +	if name.Local == "" {
    +		return fmt.Errorf("xml: end tag with no name")
    +	}
    +	if len(p.tags) == 0 || p.tags[len(p.tags)-1].Local == "" {
    +		return fmt.Errorf("xml: end tag  without start tag", name.Local)
    +	}
    +	if top := p.tags[len(p.tags)-1]; top != name {
    +		if top.Local != name.Local {
    +			return fmt.Errorf("xml: end tag  does not match start tag <%s>", name.Local, top.Local)
    +		}
    +		return fmt.Errorf("xml: end tag  in namespace %s does not match start tag <%s> in namespace %s", name.Local, name.Space, top.Local, top.Space)
    +	}
    +	p.tags = p.tags[:len(p.tags)-1]
    +
    +	p.writeIndent(-1)
    +	p.WriteByte('<')
    +	p.WriteByte('/')
    +	p.WriteString(name.Local)
    +	p.WriteByte('>')
    +	p.popPrefix()
    +	return nil
    +}
    +
    +func (p *printer) marshalSimple(typ reflect.Type, val reflect.Value) (string, []byte, error) {
    +	switch val.Kind() {
    +	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
    +		return strconv.FormatInt(val.Int(), 10), nil, nil
    +	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
    +		return strconv.FormatUint(val.Uint(), 10), nil, nil
    +	case reflect.Float32, reflect.Float64:
    +		return strconv.FormatFloat(val.Float(), 'g', -1, val.Type().Bits()), nil, nil
    +	case reflect.String:
    +		return val.String(), nil, nil
    +	case reflect.Bool:
    +		return strconv.FormatBool(val.Bool()), nil, nil
    +	case reflect.Array:
    +		if typ.Elem().Kind() != reflect.Uint8 {
    +			break
    +		}
    +		// [...]byte
    +		var bytes []byte
    +		if val.CanAddr() {
    +			bytes = val.Slice(0, val.Len()).Bytes()
    +		} else {
    +			bytes = make([]byte, val.Len())
    +			reflect.Copy(reflect.ValueOf(bytes), val)
    +		}
    +		return "", bytes, nil
    +	case reflect.Slice:
    +		if typ.Elem().Kind() != reflect.Uint8 {
    +			break
    +		}
    +		// []byte
    +		return "", val.Bytes(), nil
    +	}
    +	return "", nil, &UnsupportedTypeError{typ}
    +}
    +
    +var ddBytes = []byte("--")
    +
    +func (p *printer) marshalStruct(tinfo *typeInfo, val reflect.Value) error {
    +	s := parentStack{p: p}
    +	for i := range tinfo.fields {
    +		finfo := &tinfo.fields[i]
    +		if finfo.flags&fAttr != 0 {
    +			continue
    +		}
    +		vf := finfo.value(val)
    +
    +		// Dereference or skip nil pointer, interface values.
    +		switch vf.Kind() {
    +		case reflect.Ptr, reflect.Interface:
    +			if !vf.IsNil() {
    +				vf = vf.Elem()
    +			}
    +		}
    +
    +		switch finfo.flags & fMode {
    +		case fCharData:
    +			if vf.CanInterface() && vf.Type().Implements(textMarshalerType) {
    +				data, err := vf.Interface().(encoding.TextMarshaler).MarshalText()
    +				if err != nil {
    +					return err
    +				}
    +				Escape(p, data)
    +				continue
    +			}
    +			if vf.CanAddr() {
    +				pv := vf.Addr()
    +				if pv.CanInterface() && pv.Type().Implements(textMarshalerType) {
    +					data, err := pv.Interface().(encoding.TextMarshaler).MarshalText()
    +					if err != nil {
    +						return err
    +					}
    +					Escape(p, data)
    +					continue
    +				}
    +			}
    +			var scratch [64]byte
    +			switch vf.Kind() {
    +			case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
    +				Escape(p, strconv.AppendInt(scratch[:0], vf.Int(), 10))
    +			case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
    +				Escape(p, strconv.AppendUint(scratch[:0], vf.Uint(), 10))
    +			case reflect.Float32, reflect.Float64:
    +				Escape(p, strconv.AppendFloat(scratch[:0], vf.Float(), 'g', -1, vf.Type().Bits()))
    +			case reflect.Bool:
    +				Escape(p, strconv.AppendBool(scratch[:0], vf.Bool()))
    +			case reflect.String:
    +				if err := EscapeText(p, []byte(vf.String())); err != nil {
    +					return err
    +				}
    +			case reflect.Slice:
    +				if elem, ok := vf.Interface().([]byte); ok {
    +					if err := EscapeText(p, elem); err != nil {
    +						return err
    +					}
    +				}
    +			}
    +			continue
    +
    +		case fComment:
    +			k := vf.Kind()
    +			if !(k == reflect.String || k == reflect.Slice && vf.Type().Elem().Kind() == reflect.Uint8) {
    +				return fmt.Errorf("xml: bad type for comment field of %s", val.Type())
    +			}
    +			if vf.Len() == 0 {
    +				continue
    +			}
    +			p.writeIndent(0)
    +			p.WriteString("" is invalid grammar. Make it "- -->"
    +				p.WriteByte(' ')
    +			}
    +			p.WriteString("-->")
    +			continue
    +
    +		case fInnerXml:
    +			iface := vf.Interface()
    +			switch raw := iface.(type) {
    +			case []byte:
    +				p.Write(raw)
    +				continue
    +			case string:
    +				p.WriteString(raw)
    +				continue
    +			}
    +
    +		case fElement, fElement | fAny:
    +			if err := s.trim(finfo.parents); err != nil {
    +				return err
    +			}
    +			if len(finfo.parents) > len(s.stack) {
    +				if vf.Kind() != reflect.Ptr && vf.Kind() != reflect.Interface || !vf.IsNil() {
    +					if err := s.push(finfo.parents[len(s.stack):]); err != nil {
    +						return err
    +					}
    +				}
    +			}
    +		}
    +		if err := p.marshalValue(vf, finfo, nil); err != nil {
    +			return err
    +		}
    +	}
    +	s.trim(nil)
    +	return p.cachedWriteError()
    +}
    +
    +// return the bufio Writer's cached write error
    +func (p *printer) cachedWriteError() error {
    +	_, err := p.Write(nil)
    +	return err
    +}
    +
    +func (p *printer) writeIndent(depthDelta int) {
    +	if len(p.prefix) == 0 && len(p.indent) == 0 {
    +		return
    +	}
    +	if depthDelta < 0 {
    +		p.depth--
    +		if p.indentedIn {
    +			p.indentedIn = false
    +			return
    +		}
    +		p.indentedIn = false
    +	}
    +	if p.putNewline {
    +		p.WriteByte('\n')
    +	} else {
    +		p.putNewline = true
    +	}
    +	if len(p.prefix) > 0 {
    +		p.WriteString(p.prefix)
    +	}
    +	if len(p.indent) > 0 {
    +		for i := 0; i < p.depth; i++ {
    +			p.WriteString(p.indent)
    +		}
    +	}
    +	if depthDelta > 0 {
    +		p.depth++
    +		p.indentedIn = true
    +	}
    +}
    +
    +type parentStack struct {
    +	p     *printer
    +	stack []string
    +}
    +
    +// trim updates the XML context to match the longest common prefix of the stack
    +// and the given parents.  A closing tag will be written for every parent
    +// popped.  Passing a zero slice or nil will close all the elements.
    +func (s *parentStack) trim(parents []string) error {
    +	split := 0
    +	for ; split < len(parents) && split < len(s.stack); split++ {
    +		if parents[split] != s.stack[split] {
    +			break
    +		}
    +	}
    +	for i := len(s.stack) - 1; i >= split; i-- {
    +		if err := s.p.writeEnd(Name{Local: s.stack[i]}); err != nil {
    +			return err
    +		}
    +	}
    +	s.stack = parents[:split]
    +	return nil
    +}
    +
    +// push adds parent elements to the stack and writes open tags.
    +func (s *parentStack) push(parents []string) error {
    +	for i := 0; i < len(parents); i++ {
    +		if err := s.p.writeStart(&StartElement{Name: Name{Local: parents[i]}}); err != nil {
    +			return err
    +		}
    +	}
    +	s.stack = append(s.stack, parents...)
    +	return nil
    +}
    +
    +// A MarshalXMLError is returned when Marshal encounters a type
    +// that cannot be converted into XML.
    +type UnsupportedTypeError struct {
    +	Type reflect.Type
    +}
    +
    +func (e *UnsupportedTypeError) Error() string {
    +	return "xml: unsupported type: " + e.Type.String()
    +}
    +
    +func isEmptyValue(v reflect.Value) bool {
    +	switch v.Kind() {
    +	case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
    +		return v.Len() == 0
    +	case reflect.Bool:
    +		return !v.Bool()
    +	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
    +		return v.Int() == 0
    +	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
    +		return v.Uint() == 0
    +	case reflect.Float32, reflect.Float64:
    +		return v.Float() == 0
    +	case reflect.Interface, reflect.Ptr:
    +		return v.IsNil()
    +	}
    +	return false
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/read.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/read.go
    new file mode 100644
    index 00000000000..fe35fce6ca4
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/read.go
    @@ -0,0 +1,781 @@
    +// Copyright 2009 The Go Authors.  All rights reserved.
    +// Use of this source code is governed by a BSD-style
    +// license that can be found in the LICENSE file.
    +
    +package xml
    +
    +import (
    +	"bytes"
    +	"encoding"
    +	"errors"
    +	"fmt"
    +	"reflect"
    +	"strconv"
    +	"strings"
    +)
    +
    +// BUG(rsc): Mapping between XML elements and data structures is inherently flawed:
    +// an XML element is an order-dependent collection of anonymous
    +// values, while a data structure is an order-independent collection
    +// of named values.
    +// See package json for a textual representation more suitable
    +// to data structures.
    +
    +// Unmarshal parses the XML-encoded data and stores the result in
    +// the value pointed to by v, which must be an arbitrary struct,
    +// slice, or string. Well-formed data that does not fit into v is
    +// discarded.
    +//
    +// Because Unmarshal uses the reflect package, it can only assign
    +// to exported (upper case) fields.  Unmarshal uses a case-sensitive
    +// comparison to match XML element names to tag values and struct
    +// field names.
    +//
    +// Unmarshal maps an XML element to a struct using the following rules.
    +// In the rules, the tag of a field refers to the value associated with the
    +// key 'xml' in the struct field's tag (see the example above).
    +//
    +//   * If the struct has a field of type []byte or string with tag
    +//      ",innerxml", Unmarshal accumulates the raw XML nested inside the
    +//      element in that field.  The rest of the rules still apply.
    +//
    +//   * If the struct has a field named XMLName of type xml.Name,
    +//      Unmarshal records the element name in that field.
    +//
    +//   * If the XMLName field has an associated tag of the form
    +//      "name" or "namespace-URL name", the XML element must have
    +//      the given name (and, optionally, name space) or else Unmarshal
    +//      returns an error.
    +//
    +//   * If the XML element has an attribute whose name matches a
    +//      struct field name with an associated tag containing ",attr" or
    +//      the explicit name in a struct field tag of the form "name,attr",
    +//      Unmarshal records the attribute value in that field.
    +//
    +//   * If the XML element contains character data, that data is
    +//      accumulated in the first struct field that has tag ",chardata".
    +//      The struct field may have type []byte or string.
    +//      If there is no such field, the character data is discarded.
    +//
    +//   * If the XML element contains comments, they are accumulated in
    +//      the first struct field that has tag ",comment".  The struct
    +//      field may have type []byte or string.  If there is no such
    +//      field, the comments are discarded.
    +//
    +//   * If the XML element contains a sub-element whose name matches
    +//      the prefix of a tag formatted as "a" or "a>b>c", unmarshal
    +//      will descend into the XML structure looking for elements with the
    +//      given names, and will map the innermost elements to that struct
    +//      field. A tag starting with ">" is equivalent to one starting
    +//      with the field name followed by ">".
    +//
    +//   * If the XML element contains a sub-element whose name matches
    +//      a struct field's XMLName tag and the struct field has no
    +//      explicit name tag as per the previous rule, unmarshal maps
    +//      the sub-element to that struct field.
    +//
    +//   * If the XML element contains a sub-element whose name matches a
    +//      field without any mode flags (",attr", ",chardata", etc), Unmarshal
    +//      maps the sub-element to that struct field.
    +//
    +//   * If the XML element contains a sub-element that hasn't matched any
    +//      of the above rules and the struct has a field with tag ",any",
    +//      unmarshal maps the sub-element to that struct field.
    +//
    +//   * An anonymous struct field is handled as if the fields of its
    +//      value were part of the outer struct.
    +//
    +//   * A struct field with tag "-" is never unmarshalled into.
    +//
    +// Unmarshal maps an XML element to a string or []byte by saving the
    +// concatenation of that element's character data in the string or
    +// []byte. The saved []byte is never nil.
    +//
    +// Unmarshal maps an attribute value to a string or []byte by saving
    +// the value in the string or slice.
    +//
    +// Unmarshal maps an XML element to a slice by extending the length of
    +// the slice and mapping the element to the newly created value.
    +//
    +// Unmarshal maps an XML element or attribute value to a bool by
    +// setting it to the boolean value represented by the string.
    +//
    +// Unmarshal maps an XML element or attribute value to an integer or
    +// floating-point field by setting the field to the result of
    +// interpreting the string value in decimal.  There is no check for
    +// overflow.
    +//
    +// Unmarshal maps an XML element to an xml.Name by recording the
    +// element name.
    +//
    +// Unmarshal maps an XML element to a pointer by setting the pointer
    +// to a freshly allocated value and then mapping the element to that value.
    +//
    +func Unmarshal(data []byte, v interface{}) error {
    +	return NewDecoder(bytes.NewReader(data)).Decode(v)
    +}
    +
    +// Decode works like xml.Unmarshal, except it reads the decoder
    +// stream to find the start element.
    +func (d *Decoder) Decode(v interface{}) error {
    +	return d.DecodeElement(v, nil)
    +}
    +
    +// DecodeElement works like xml.Unmarshal except that it takes
    +// a pointer to the start XML element to decode into v.
    +// It is useful when a client reads some raw XML tokens itself
    +// but also wants to defer to Unmarshal for some elements.
    +func (d *Decoder) DecodeElement(v interface{}, start *StartElement) error {
    +	val := reflect.ValueOf(v)
    +	if val.Kind() != reflect.Ptr {
    +		return errors.New("non-pointer passed to Unmarshal")
    +	}
    +	return d.unmarshal(val.Elem(), start)
    +}
    +
    +// An UnmarshalError represents an error in the unmarshalling process.
    +type UnmarshalError string
    +
    +func (e UnmarshalError) Error() string { return string(e) }
    +
    +// Unmarshaler is the interface implemented by objects that can unmarshal
    +// an XML element description of themselves.
    +//
    +// UnmarshalXML decodes a single XML element
    +// beginning with the given start element.
    +// If it returns an error, the outer call to Unmarshal stops and
    +// returns that error.
    +// UnmarshalXML must consume exactly one XML element.
    +// One common implementation strategy is to unmarshal into
    +// a separate value with a layout matching the expected XML
    +// using d.DecodeElement,  and then to copy the data from
    +// that value into the receiver.
    +// Another common strategy is to use d.Token to process the
    +// XML object one token at a time.
    +// UnmarshalXML may not use d.RawToken.
    +type Unmarshaler interface {
    +	UnmarshalXML(d *Decoder, start StartElement) error
    +}
    +
    +// UnmarshalerAttr is the interface implemented by objects that can unmarshal
    +// an XML attribute description of themselves.
    +//
    +// UnmarshalXMLAttr decodes a single XML attribute.
    +// If it returns an error, the outer call to Unmarshal stops and
    +// returns that error.
    +// UnmarshalXMLAttr is used only for struct fields with the
    +// "attr" option in the field tag.
    +type UnmarshalerAttr interface {
    +	UnmarshalXMLAttr(attr Attr) error
    +}
    +
    +// receiverType returns the receiver type to use in an expression like "%s.MethodName".
    +func receiverType(val interface{}) string {
    +	t := reflect.TypeOf(val)
    +	if t.Name() != "" {
    +		return t.String()
    +	}
    +	return "(" + t.String() + ")"
    +}
    +
    +// unmarshalInterface unmarshals a single XML element into val.
    +// start is the opening tag of the element.
    +func (p *Decoder) unmarshalInterface(val Unmarshaler, start *StartElement) error {
    +	// Record that decoder must stop at end tag corresponding to start.
    +	p.pushEOF()
    +
    +	p.unmarshalDepth++
    +	err := val.UnmarshalXML(p, *start)
    +	p.unmarshalDepth--
    +	if err != nil {
    +		p.popEOF()
    +		return err
    +	}
    +
    +	if !p.popEOF() {
    +		return fmt.Errorf("xml: %s.UnmarshalXML did not consume entire <%s> element", receiverType(val), start.Name.Local)
    +	}
    +
    +	return nil
    +}
    +
    +// unmarshalTextInterface unmarshals a single XML element into val.
    +// The chardata contained in the element (but not its children)
    +// is passed to the text unmarshaler.
    +func (p *Decoder) unmarshalTextInterface(val encoding.TextUnmarshaler, start *StartElement) error {
    +	var buf []byte
    +	depth := 1
    +	for depth > 0 {
    +		t, err := p.Token()
    +		if err != nil {
    +			return err
    +		}
    +		switch t := t.(type) {
    +		case CharData:
    +			if depth == 1 {
    +				buf = append(buf, t...)
    +			}
    +		case StartElement:
    +			depth++
    +		case EndElement:
    +			depth--
    +		}
    +	}
    +	return val.UnmarshalText(buf)
    +}
    +
    +// unmarshalAttr unmarshals a single XML attribute into val.
    +func (p *Decoder) unmarshalAttr(val reflect.Value, attr Attr) error {
    +	if val.Kind() == reflect.Ptr {
    +		if val.IsNil() {
    +			val.Set(reflect.New(val.Type().Elem()))
    +		}
    +		val = val.Elem()
    +	}
    +
    +	if val.CanInterface() && val.Type().Implements(unmarshalerAttrType) {
    +		// This is an unmarshaler with a non-pointer receiver,
    +		// so it's likely to be incorrect, but we do what we're told.
    +		return val.Interface().(UnmarshalerAttr).UnmarshalXMLAttr(attr)
    +	}
    +	if val.CanAddr() {
    +		pv := val.Addr()
    +		if pv.CanInterface() && pv.Type().Implements(unmarshalerAttrType) {
    +			return pv.Interface().(UnmarshalerAttr).UnmarshalXMLAttr(attr)
    +		}
    +	}
    +
    +	// Not an UnmarshalerAttr; try encoding.TextUnmarshaler.
    +	if val.CanInterface() && val.Type().Implements(textUnmarshalerType) {
    +		// This is an unmarshaler with a non-pointer receiver,
    +		// so it's likely to be incorrect, but we do what we're told.
    +		return val.Interface().(encoding.TextUnmarshaler).UnmarshalText([]byte(attr.Value))
    +	}
    +	if val.CanAddr() {
    +		pv := val.Addr()
    +		if pv.CanInterface() && pv.Type().Implements(textUnmarshalerType) {
    +			return pv.Interface().(encoding.TextUnmarshaler).UnmarshalText([]byte(attr.Value))
    +		}
    +	}
    +
    +	copyValue(val, []byte(attr.Value))
    +	return nil
    +}
    +
    +var (
    +	unmarshalerType     = reflect.TypeOf((*Unmarshaler)(nil)).Elem()
    +	unmarshalerAttrType = reflect.TypeOf((*UnmarshalerAttr)(nil)).Elem()
    +	textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()
    +)
    +
    +// Find reflect.Type for an element's type attribute.
    +func (p *Decoder) typeForElement(val reflect.Value, start *StartElement) reflect.Type {
    +	t := ""
    +	for i, a := range start.Attr {
    +		if a.Name == xmlSchemaInstance || a.Name == xsiType {
    +			t = a.Value
    +			// HACK: ensure xsi:type is last in the list to avoid using that value for
    +			// a "type" attribute, such as ManagedObjectReference.Type for example.
    +			// Note that xsi:type is already the last attribute in VC/ESX responses.
    +			// This is only an issue with govmomi simulator generated responses.
    +			// Proper fix will require finding a few needles in this xml package haystack.
    +			// Note: govmomi uses xmlSchemaInstance, other clients (e.g. rbvmomi) use xsiType.
    +			// They are the same thing to XML parsers, but not to this hack here.
    +			x := len(start.Attr) - 1
    +			if i != x {
    +				start.Attr[i] = start.Attr[x]
    +				start.Attr[x] = a
    +			}
    +			break
    +		}
    +	}
    +
    +	if t == "" {
    +		// No type attribute; fall back to looking up type by interface name.
    +		t = val.Type().Name()
    +	}
    +
    +	// Maybe the type is a basic xsd:* type.
    +	typ := stringToType(t)
    +	if typ != nil {
    +		return typ
    +	}
    +
    +	// Maybe the type is a custom type.
    +	if p.TypeFunc != nil {
    +		if typ, ok := p.TypeFunc(t); ok {
    +			return typ
    +		}
    +	}
    +
    +	return nil
    +}
    +
    +// Unmarshal a single XML element into val.
    +func (p *Decoder) unmarshal(val reflect.Value, start *StartElement) error {
    +	// Find start element if we need it.
    +	if start == nil {
    +		for {
    +			tok, err := p.Token()
    +			if err != nil {
    +				return err
    +			}
    +			if t, ok := tok.(StartElement); ok {
    +				start = &t
    +				break
    +			}
    +		}
    +	}
    +
    +	// Try to figure out type for empty interface values.
    +	if val.Kind() == reflect.Interface && val.IsNil() {
    +		typ := p.typeForElement(val, start)
    +		if typ != nil {
    +			pval := reflect.New(typ).Elem()
    +			err := p.unmarshal(pval, start)
    +			if err != nil {
    +				return err
    +			}
    +
    +			for i := 0; i < 2; i++ {
    +				if typ.Implements(val.Type()) {
    +					val.Set(pval)
    +					return nil
    +				}
    +
    +				typ = reflect.PtrTo(typ)
    +				pval = pval.Addr()
    +			}
    +
    +			val.Set(pval)
    +			return nil
    +		}
    +	}
    +
    +	// Load value from interface, but only if the result will be
    +	// usefully addressable.
    +	if val.Kind() == reflect.Interface && !val.IsNil() {
    +		e := val.Elem()
    +		if e.Kind() == reflect.Ptr && !e.IsNil() {
    +			val = e
    +		}
    +	}
    +
    +	if val.Kind() == reflect.Ptr {
    +		if val.IsNil() {
    +			val.Set(reflect.New(val.Type().Elem()))
    +		}
    +		val = val.Elem()
    +	}
    +
    +	if val.CanInterface() && val.Type().Implements(unmarshalerType) {
    +		// This is an unmarshaler with a non-pointer receiver,
    +		// so it's likely to be incorrect, but we do what we're told.
    +		return p.unmarshalInterface(val.Interface().(Unmarshaler), start)
    +	}
    +
    +	if val.CanAddr() {
    +		pv := val.Addr()
    +		if pv.CanInterface() && pv.Type().Implements(unmarshalerType) {
    +			return p.unmarshalInterface(pv.Interface().(Unmarshaler), start)
    +		}
    +	}
    +
    +	if val.CanInterface() && val.Type().Implements(textUnmarshalerType) {
    +		return p.unmarshalTextInterface(val.Interface().(encoding.TextUnmarshaler), start)
    +	}
    +
    +	if val.CanAddr() {
    +		pv := val.Addr()
    +		if pv.CanInterface() && pv.Type().Implements(textUnmarshalerType) {
    +			return p.unmarshalTextInterface(pv.Interface().(encoding.TextUnmarshaler), start)
    +		}
    +	}
    +
    +	var (
    +		data         []byte
    +		saveData     reflect.Value
    +		comment      []byte
    +		saveComment  reflect.Value
    +		saveXML      reflect.Value
    +		saveXMLIndex int
    +		saveXMLData  []byte
    +		saveAny      reflect.Value
    +		sv           reflect.Value
    +		tinfo        *typeInfo
    +		err          error
    +	)
    +
    +	switch v := val; v.Kind() {
    +	default:
    +		return errors.New("unknown type " + v.Type().String())
    +
    +	case reflect.Interface:
    +		// TODO: For now, simply ignore the field. In the near
    +		//       future we may choose to unmarshal the start
    +		//       element on it, if not nil.
    +		return p.Skip()
    +
    +	case reflect.Slice:
    +		typ := v.Type()
    +		if typ.Elem().Kind() == reflect.Uint8 {
    +			// []byte
    +			saveData = v
    +			break
    +		}
    +
    +		// Slice of element values.
    +		// Grow slice.
    +		n := v.Len()
    +		if n >= v.Cap() {
    +			ncap := 2 * n
    +			if ncap < 4 {
    +				ncap = 4
    +			}
    +			new := reflect.MakeSlice(typ, n, ncap)
    +			reflect.Copy(new, v)
    +			v.Set(new)
    +		}
    +		v.SetLen(n + 1)
    +
    +		// Recur to read element into slice.
    +		if err := p.unmarshal(v.Index(n), start); err != nil {
    +			v.SetLen(n)
    +			return err
    +		}
    +		return nil
    +
    +	case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.String:
    +		saveData = v
    +
    +	case reflect.Struct:
    +		typ := v.Type()
    +		if typ == nameType {
    +			v.Set(reflect.ValueOf(start.Name))
    +			break
    +		}
    +
    +		sv = v
    +		tinfo, err = getTypeInfo(typ)
    +		if err != nil {
    +			return err
    +		}
    +
    +		// Validate and assign element name.
    +		if tinfo.xmlname != nil {
    +			finfo := tinfo.xmlname
    +			if finfo.name != "" && finfo.name != start.Name.Local {
    +				return UnmarshalError("expected element type <" + finfo.name + "> but have <" + start.Name.Local + ">")
    +			}
    +			if finfo.xmlns != "" && finfo.xmlns != start.Name.Space {
    +				e := "expected element <" + finfo.name + "> in name space " + finfo.xmlns + " but have "
    +				if start.Name.Space == "" {
    +					e += "no name space"
    +				} else {
    +					e += start.Name.Space
    +				}
    +				return UnmarshalError(e)
    +			}
    +			fv := finfo.value(sv)
    +			if _, ok := fv.Interface().(Name); ok {
    +				fv.Set(reflect.ValueOf(start.Name))
    +			}
    +		}
    +
    +		// Assign attributes.
    +		// Also, determine whether we need to save character data or comments.
    +		for i := range tinfo.fields {
    +			finfo := &tinfo.fields[i]
    +			switch finfo.flags & fMode {
    +			case fAttr:
    +				strv := finfo.value(sv)
    +				// Look for attribute.
    +				for _, a := range start.Attr {
    +					if a.Name.Local == finfo.name && (finfo.xmlns == "" || finfo.xmlns == a.Name.Space) {
    +						if err := p.unmarshalAttr(strv, a); err != nil {
    +							return err
    +						}
    +						break
    +					}
    +				}
    +
    +			case fCharData:
    +				if !saveData.IsValid() {
    +					saveData = finfo.value(sv)
    +				}
    +
    +			case fComment:
    +				if !saveComment.IsValid() {
    +					saveComment = finfo.value(sv)
    +				}
    +
    +			case fAny, fAny | fElement:
    +				if !saveAny.IsValid() {
    +					saveAny = finfo.value(sv)
    +				}
    +
    +			case fInnerXml:
    +				if !saveXML.IsValid() {
    +					saveXML = finfo.value(sv)
    +					if p.saved == nil {
    +						saveXMLIndex = 0
    +						p.saved = new(bytes.Buffer)
    +					} else {
    +						saveXMLIndex = p.savedOffset()
    +					}
    +				}
    +			}
    +		}
    +	}
    +
    +	// Find end element.
    +	// Process sub-elements along the way.
    +Loop:
    +	for {
    +		var savedOffset int
    +		if saveXML.IsValid() {
    +			savedOffset = p.savedOffset()
    +		}
    +		tok, err := p.Token()
    +		if err != nil {
    +			return err
    +		}
    +		switch t := tok.(type) {
    +		case StartElement:
    +			consumed := false
    +			if sv.IsValid() {
    +				consumed, err = p.unmarshalPath(tinfo, sv, nil, &t)
    +				if err != nil {
    +					return err
    +				}
    +				if !consumed && saveAny.IsValid() {
    +					consumed = true
    +					if err := p.unmarshal(saveAny, &t); err != nil {
    +						return err
    +					}
    +				}
    +			}
    +			if !consumed {
    +				if err := p.Skip(); err != nil {
    +					return err
    +				}
    +			}
    +
    +		case EndElement:
    +			if saveXML.IsValid() {
    +				saveXMLData = p.saved.Bytes()[saveXMLIndex:savedOffset]
    +				if saveXMLIndex == 0 {
    +					p.saved = nil
    +				}
    +			}
    +			break Loop
    +
    +		case CharData:
    +			if saveData.IsValid() {
    +				data = append(data, t...)
    +			}
    +
    +		case Comment:
    +			if saveComment.IsValid() {
    +				comment = append(comment, t...)
    +			}
    +		}
    +	}
    +
    +	if saveData.IsValid() && saveData.CanInterface() && saveData.Type().Implements(textUnmarshalerType) {
    +		if err := saveData.Interface().(encoding.TextUnmarshaler).UnmarshalText(data); err != nil {
    +			return err
    +		}
    +		saveData = reflect.Value{}
    +	}
    +
    +	if saveData.IsValid() && saveData.CanAddr() {
    +		pv := saveData.Addr()
    +		if pv.CanInterface() && pv.Type().Implements(textUnmarshalerType) {
    +			if err := pv.Interface().(encoding.TextUnmarshaler).UnmarshalText(data); err != nil {
    +				return err
    +			}
    +			saveData = reflect.Value{}
    +		}
    +	}
    +
    +	if err := copyValue(saveData, data); err != nil {
    +		return err
    +	}
    +
    +	switch t := saveComment; t.Kind() {
    +	case reflect.String:
    +		t.SetString(string(comment))
    +	case reflect.Slice:
    +		t.Set(reflect.ValueOf(comment))
    +	}
    +
    +	switch t := saveXML; t.Kind() {
    +	case reflect.String:
    +		t.SetString(string(saveXMLData))
    +	case reflect.Slice:
    +		t.Set(reflect.ValueOf(saveXMLData))
    +	}
    +
    +	return nil
    +}
    +
    +func copyValue(dst reflect.Value, src []byte) (err error) {
    +	dst0 := dst
    +
    +	if dst.Kind() == reflect.Ptr {
    +		if dst.IsNil() {
    +			dst.Set(reflect.New(dst.Type().Elem()))
    +		}
    +		dst = dst.Elem()
    +	}
    +
    +	// Save accumulated data.
    +	switch dst.Kind() {
    +	case reflect.Invalid:
    +		// Probably a comment.
    +	default:
    +		return errors.New("cannot unmarshal into " + dst0.Type().String())
    +	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
    +		itmp, err := strconv.ParseInt(string(src), 10, dst.Type().Bits())
    +		if err != nil {
    +			return err
    +		}
    +		dst.SetInt(itmp)
    +	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
    +		var utmp uint64
    +		if len(src) > 0 && src[0] == '-' {
    +			// Negative value for unsigned field.
    +			// Assume it was serialized following two's complement.
    +			itmp, err := strconv.ParseInt(string(src), 10, dst.Type().Bits())
    +			if err != nil {
    +				return err
    +			}
    +			// Reinterpret value based on type width.
    +			switch dst.Type().Bits() {
    +			case 8:
    +				utmp = uint64(uint8(itmp))
    +			case 16:
    +				utmp = uint64(uint16(itmp))
    +			case 32:
    +				utmp = uint64(uint32(itmp))
    +			case 64:
    +				utmp = uint64(uint64(itmp))
    +			}
    +		} else {
    +			utmp, err = strconv.ParseUint(string(src), 10, dst.Type().Bits())
    +			if err != nil {
    +				return err
    +			}
    +		}
    +		dst.SetUint(utmp)
    +	case reflect.Float32, reflect.Float64:
    +		ftmp, err := strconv.ParseFloat(string(src), dst.Type().Bits())
    +		if err != nil {
    +			return err
    +		}
    +		dst.SetFloat(ftmp)
    +	case reflect.Bool:
    +		value, err := strconv.ParseBool(strings.TrimSpace(string(src)))
    +		if err != nil {
    +			return err
    +		}
    +		dst.SetBool(value)
    +	case reflect.String:
    +		dst.SetString(string(src))
    +	case reflect.Slice:
    +		if len(src) == 0 {
    +			// non-nil to flag presence
    +			src = []byte{}
    +		}
    +		dst.SetBytes(src)
    +	}
    +	return nil
    +}
    +
    +// unmarshalPath walks down an XML structure looking for wanted
    +// paths, and calls unmarshal on them.
    +// The consumed result tells whether XML elements have been consumed
    +// from the Decoder until start's matching end element, or if it's
    +// still untouched because start is uninteresting for sv's fields.
    +func (p *Decoder) unmarshalPath(tinfo *typeInfo, sv reflect.Value, parents []string, start *StartElement) (consumed bool, err error) {
    +	recurse := false
    +Loop:
    +	for i := range tinfo.fields {
    +		finfo := &tinfo.fields[i]
    +		if finfo.flags&fElement == 0 || len(finfo.parents) < len(parents) || finfo.xmlns != "" && finfo.xmlns != start.Name.Space {
    +			continue
    +		}
    +		for j := range parents {
    +			if parents[j] != finfo.parents[j] {
    +				continue Loop
    +			}
    +		}
    +		if len(finfo.parents) == len(parents) && finfo.name == start.Name.Local {
    +			// It's a perfect match, unmarshal the field.
    +			return true, p.unmarshal(finfo.value(sv), start)
    +		}
    +		if len(finfo.parents) > len(parents) && finfo.parents[len(parents)] == start.Name.Local {
    +			// It's a prefix for the field. Break and recurse
    +			// since it's not ok for one field path to be itself
    +			// the prefix for another field path.
    +			recurse = true
    +
    +			// We can reuse the same slice as long as we
    +			// don't try to append to it.
    +			parents = finfo.parents[:len(parents)+1]
    +			break
    +		}
    +	}
    +	if !recurse {
    +		// We have no business with this element.
    +		return false, nil
    +	}
    +	// The element is not a perfect match for any field, but one
    +	// or more fields have the path to this element as a parent
    +	// prefix. Recurse and attempt to match these.
    +	for {
    +		var tok Token
    +		tok, err = p.Token()
    +		if err != nil {
    +			return true, err
    +		}
    +		switch t := tok.(type) {
    +		case StartElement:
    +			consumed2, err := p.unmarshalPath(tinfo, sv, parents, &t)
    +			if err != nil {
    +				return true, err
    +			}
    +			if !consumed2 {
    +				if err := p.Skip(); err != nil {
    +					return true, err
    +				}
    +			}
    +		case EndElement:
    +			return true, nil
    +		}
    +	}
    +}
    +
    +// Skip reads tokens until it has consumed the end element
    +// matching the most recent start element already consumed.
    +// It recurs if it encounters a start element, so it can be used to
    +// skip nested structures.
    +// It returns nil if it finds an end element matching the start
    +// element; otherwise it returns an error describing the problem.
    +func (d *Decoder) Skip() error {
    +	for {
    +		tok, err := d.Token()
    +		if err != nil {
    +			return err
    +		}
    +		switch tok.(type) {
    +		case StartElement:
    +			if err := d.Skip(); err != nil {
    +				return err
    +			}
    +		case EndElement:
    +			return nil
    +		}
    +	}
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/typeinfo.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/typeinfo.go
    new file mode 100644
    index 00000000000..086e83b6991
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/typeinfo.go
    @@ -0,0 +1,366 @@
    +// Copyright 2011 The Go Authors.  All rights reserved.
    +// Use of this source code is governed by a BSD-style
    +// license that can be found in the LICENSE file.
    +
    +package xml
    +
    +import (
    +	"fmt"
    +	"reflect"
    +	"strings"
    +	"sync"
    +)
    +
    +// typeInfo holds details for the xml representation of a type.
    +type typeInfo struct {
    +	xmlname *fieldInfo
    +	fields  []fieldInfo
    +}
    +
    +// fieldInfo holds details for the xml representation of a single field.
    +type fieldInfo struct {
    +	idx     []int
    +	name    string
    +	xmlns   string
    +	flags   fieldFlags
    +	parents []string
    +}
    +
    +type fieldFlags int
    +
    +const (
    +	fElement fieldFlags = 1 << iota
    +	fAttr
    +	fCharData
    +	fInnerXml
    +	fComment
    +	fAny
    +
    +	fOmitEmpty
    +	fTypeAttr
    +
    +	fMode = fElement | fAttr | fCharData | fInnerXml | fComment | fAny
    +)
    +
    +var tinfoMap = make(map[reflect.Type]*typeInfo)
    +var tinfoLock sync.RWMutex
    +
    +var nameType = reflect.TypeOf(Name{})
    +
    +// getTypeInfo returns the typeInfo structure with details necessary
    +// for marshalling and unmarshalling typ.
    +func getTypeInfo(typ reflect.Type) (*typeInfo, error) {
    +	tinfoLock.RLock()
    +	tinfo, ok := tinfoMap[typ]
    +	tinfoLock.RUnlock()
    +	if ok {
    +		return tinfo, nil
    +	}
    +	tinfo = &typeInfo{}
    +	if typ.Kind() == reflect.Struct && typ != nameType {
    +		n := typ.NumField()
    +		for i := 0; i < n; i++ {
    +			f := typ.Field(i)
    +			if f.PkgPath != "" || f.Tag.Get("xml") == "-" {
    +				continue // Private field
    +			}
    +
    +			// For embedded structs, embed its fields.
    +			if f.Anonymous {
    +				t := f.Type
    +				if t.Kind() == reflect.Ptr {
    +					t = t.Elem()
    +				}
    +				if t.Kind() == reflect.Struct {
    +					inner, err := getTypeInfo(t)
    +					if err != nil {
    +						return nil, err
    +					}
    +					if tinfo.xmlname == nil {
    +						tinfo.xmlname = inner.xmlname
    +					}
    +					for _, finfo := range inner.fields {
    +						finfo.idx = append([]int{i}, finfo.idx...)
    +						if err := addFieldInfo(typ, tinfo, &finfo); err != nil {
    +							return nil, err
    +						}
    +					}
    +					continue
    +				}
    +			}
    +
    +			finfo, err := structFieldInfo(typ, &f)
    +			if err != nil {
    +				return nil, err
    +			}
    +
    +			if f.Name == "XMLName" {
    +				tinfo.xmlname = finfo
    +				continue
    +			}
    +
    +			// Add the field if it doesn't conflict with other fields.
    +			if err := addFieldInfo(typ, tinfo, finfo); err != nil {
    +				return nil, err
    +			}
    +		}
    +	}
    +	tinfoLock.Lock()
    +	tinfoMap[typ] = tinfo
    +	tinfoLock.Unlock()
    +	return tinfo, nil
    +}
    +
    +// structFieldInfo builds and returns a fieldInfo for f.
    +func structFieldInfo(typ reflect.Type, f *reflect.StructField) (*fieldInfo, error) {
    +	finfo := &fieldInfo{idx: f.Index}
    +
    +	// Split the tag from the xml namespace if necessary.
    +	tag := f.Tag.Get("xml")
    +	if i := strings.Index(tag, " "); i >= 0 {
    +		finfo.xmlns, tag = tag[:i], tag[i+1:]
    +	}
    +
    +	// Parse flags.
    +	tokens := strings.Split(tag, ",")
    +	if len(tokens) == 1 {
    +		finfo.flags = fElement
    +	} else {
    +		tag = tokens[0]
    +		for _, flag := range tokens[1:] {
    +			switch flag {
    +			case "attr":
    +				finfo.flags |= fAttr
    +			case "chardata":
    +				finfo.flags |= fCharData
    +			case "innerxml":
    +				finfo.flags |= fInnerXml
    +			case "comment":
    +				finfo.flags |= fComment
    +			case "any":
    +				finfo.flags |= fAny
    +			case "omitempty":
    +				finfo.flags |= fOmitEmpty
    +			case "typeattr":
    +				finfo.flags |= fTypeAttr
    +			}
    +		}
    +
    +		// Validate the flags used.
    +		valid := true
    +		switch mode := finfo.flags & fMode; mode {
    +		case 0:
    +			finfo.flags |= fElement
    +		case fAttr, fCharData, fInnerXml, fComment, fAny:
    +			if f.Name == "XMLName" || tag != "" && mode != fAttr {
    +				valid = false
    +			}
    +		default:
    +			// This will also catch multiple modes in a single field.
    +			valid = false
    +		}
    +		if finfo.flags&fMode == fAny {
    +			finfo.flags |= fElement
    +		}
    +		if finfo.flags&fOmitEmpty != 0 && finfo.flags&(fElement|fAttr) == 0 {
    +			valid = false
    +		}
    +		if !valid {
    +			return nil, fmt.Errorf("xml: invalid tag in field %s of type %s: %q",
    +				f.Name, typ, f.Tag.Get("xml"))
    +		}
    +	}
    +
    +	// Use of xmlns without a name is not allowed.
    +	if finfo.xmlns != "" && tag == "" {
    +		return nil, fmt.Errorf("xml: namespace without name in field %s of type %s: %q",
    +			f.Name, typ, f.Tag.Get("xml"))
    +	}
    +
    +	if f.Name == "XMLName" {
    +		// The XMLName field records the XML element name. Don't
    +		// process it as usual because its name should default to
    +		// empty rather than to the field name.
    +		finfo.name = tag
    +		return finfo, nil
    +	}
    +
    +	if tag == "" {
    +		// If the name part of the tag is completely empty, get
    +		// default from XMLName of underlying struct if feasible,
    +		// or field name otherwise.
    +		if xmlname := lookupXMLName(f.Type); xmlname != nil {
    +			finfo.xmlns, finfo.name = xmlname.xmlns, xmlname.name
    +		} else {
    +			finfo.name = f.Name
    +		}
    +		return finfo, nil
    +	}
    +
    +	// Prepare field name and parents.
    +	parents := strings.Split(tag, ">")
    +	if parents[0] == "" {
    +		parents[0] = f.Name
    +	}
    +	if parents[len(parents)-1] == "" {
    +		return nil, fmt.Errorf("xml: trailing '>' in field %s of type %s", f.Name, typ)
    +	}
    +	finfo.name = parents[len(parents)-1]
    +	if len(parents) > 1 {
    +		if (finfo.flags & fElement) == 0 {
    +			return nil, fmt.Errorf("xml: %s chain not valid with %s flag", tag, strings.Join(tokens[1:], ","))
    +		}
    +		finfo.parents = parents[:len(parents)-1]
    +	}
    +
    +	// If the field type has an XMLName field, the names must match
    +	// so that the behavior of both marshalling and unmarshalling
    +	// is straightforward and unambiguous.
    +	if finfo.flags&fElement != 0 {
    +		ftyp := f.Type
    +		xmlname := lookupXMLName(ftyp)
    +		if xmlname != nil && xmlname.name != finfo.name {
    +			return nil, fmt.Errorf("xml: name %q in tag of %s.%s conflicts with name %q in %s.XMLName",
    +				finfo.name, typ, f.Name, xmlname.name, ftyp)
    +		}
    +	}
    +	return finfo, nil
    +}
    +
    +// lookupXMLName returns the fieldInfo for typ's XMLName field
    +// in case it exists and has a valid xml field tag, otherwise
    +// it returns nil.
    +func lookupXMLName(typ reflect.Type) (xmlname *fieldInfo) {
    +	for typ.Kind() == reflect.Ptr {
    +		typ = typ.Elem()
    +	}
    +	if typ.Kind() != reflect.Struct {
    +		return nil
    +	}
    +	for i, n := 0, typ.NumField(); i < n; i++ {
    +		f := typ.Field(i)
    +		if f.Name != "XMLName" {
    +			continue
    +		}
    +		finfo, err := structFieldInfo(typ, &f)
    +		if finfo.name != "" && err == nil {
    +			return finfo
    +		}
    +		// Also consider errors as a non-existent field tag
    +		// and let getTypeInfo itself report the error.
    +		break
    +	}
    +	return nil
    +}
    +
    +func min(a, b int) int {
    +	if a <= b {
    +		return a
    +	}
    +	return b
    +}
    +
    +// addFieldInfo adds finfo to tinfo.fields if there are no
    +// conflicts, or if conflicts arise from previous fields that were
    +// obtained from deeper embedded structures than finfo. In the latter
    +// case, the conflicting entries are dropped.
    +// A conflict occurs when the path (parent + name) to a field is
    +// itself a prefix of another path, or when two paths match exactly.
    +// It is okay for field paths to share a common, shorter prefix.
    +func addFieldInfo(typ reflect.Type, tinfo *typeInfo, newf *fieldInfo) error {
    +	var conflicts []int
    +Loop:
    +	// First, figure all conflicts. Most working code will have none.
    +	for i := range tinfo.fields {
    +		oldf := &tinfo.fields[i]
    +		if oldf.flags&fMode != newf.flags&fMode {
    +			continue
    +		}
    +		if oldf.xmlns != "" && newf.xmlns != "" && oldf.xmlns != newf.xmlns {
    +			continue
    +		}
    +		minl := min(len(newf.parents), len(oldf.parents))
    +		for p := 0; p < minl; p++ {
    +			if oldf.parents[p] != newf.parents[p] {
    +				continue Loop
    +			}
    +		}
    +		if len(oldf.parents) > len(newf.parents) {
    +			if oldf.parents[len(newf.parents)] == newf.name {
    +				conflicts = append(conflicts, i)
    +			}
    +		} else if len(oldf.parents) < len(newf.parents) {
    +			if newf.parents[len(oldf.parents)] == oldf.name {
    +				conflicts = append(conflicts, i)
    +			}
    +		} else {
    +			if newf.name == oldf.name {
    +				conflicts = append(conflicts, i)
    +			}
    +		}
    +	}
    +	// Without conflicts, add the new field and return.
    +	if conflicts == nil {
    +		tinfo.fields = append(tinfo.fields, *newf)
    +		return nil
    +	}
    +
    +	// If any conflict is shallower, ignore the new field.
    +	// This matches the Go field resolution on embedding.
    +	for _, i := range conflicts {
    +		if len(tinfo.fields[i].idx) < len(newf.idx) {
    +			return nil
    +		}
    +	}
    +
    +	// Otherwise, if any of them is at the same depth level, it's an error.
    +	for _, i := range conflicts {
    +		oldf := &tinfo.fields[i]
    +		if len(oldf.idx) == len(newf.idx) {
    +			f1 := typ.FieldByIndex(oldf.idx)
    +			f2 := typ.FieldByIndex(newf.idx)
    +			return &TagPathError{typ, f1.Name, f1.Tag.Get("xml"), f2.Name, f2.Tag.Get("xml")}
    +		}
    +	}
    +
    +	// Otherwise, the new field is shallower, and thus takes precedence,
    +	// so drop the conflicting fields from tinfo and append the new one.
    +	for c := len(conflicts) - 1; c >= 0; c-- {
    +		i := conflicts[c]
    +		copy(tinfo.fields[i:], tinfo.fields[i+1:])
    +		tinfo.fields = tinfo.fields[:len(tinfo.fields)-1]
    +	}
    +	tinfo.fields = append(tinfo.fields, *newf)
    +	return nil
    +}
    +
    +// A TagPathError represents an error in the unmarshalling process
    +// caused by the use of field tags with conflicting paths.
    +type TagPathError struct {
    +	Struct       reflect.Type
    +	Field1, Tag1 string
    +	Field2, Tag2 string
    +}
    +
    +func (e *TagPathError) Error() string {
    +	return fmt.Sprintf("%s field %q with tag %q conflicts with field %q with tag %q", e.Struct, e.Field1, e.Tag1, e.Field2, e.Tag2)
    +}
    +
    +// value returns v's field value corresponding to finfo.
    +// It's equivalent to v.FieldByIndex(finfo.idx), but initializes
    +// and dereferences pointers as necessary.
    +func (finfo *fieldInfo) value(v reflect.Value) reflect.Value {
    +	for i, x := range finfo.idx {
    +		if i > 0 {
    +			t := v.Type()
    +			if t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct {
    +				if v.IsNil() {
    +					v.Set(reflect.New(v.Type().Elem()))
    +				}
    +				v = v.Elem()
    +			}
    +		}
    +		v = v.Field(x)
    +	}
    +	return v
    +}
    diff --git a/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/xml.go b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/xml.go
    new file mode 100644
    index 00000000000..6c6c5c8212b
    --- /dev/null
    +++ b/vendor/github.com/hashicorp/go-discover/provider/vsphere/vendor/github.com/vmware/govmomi/vim25/xml/xml.go
    @@ -0,0 +1,1939 @@
    +// Copyright 2009 The Go Authors. All rights reserved.
    +// Use of this source code is governed by a BSD-style
    +// license that can be found in the LICENSE file.
    +
    +// Package xml implements a simple XML 1.0 parser that
    +// understands XML name spaces.
    +package xml
    +
    +// References:
    +//    Annotated XML spec: http://www.xml.com/axml/testaxml.htm
    +//    XML name spaces: http://www.w3.org/TR/REC-xml-names/
    +
    +// TODO(rsc):
    +//	Test error handling.
    +
    +import (
    +	"bufio"
    +	"bytes"
    +	"errors"
    +	"fmt"
    +	"io"
    +	"reflect"
    +	"strconv"
    +	"strings"
    +	"unicode"
    +	"unicode/utf8"
    +)
    +
    +// A SyntaxError represents a syntax error in the XML input stream.
    +type SyntaxError struct {
    +	Msg  string
    +	Line int
    +}
    +
    +func (e *SyntaxError) Error() string {
    +	return "XML syntax error on line " + strconv.Itoa(e.Line) + ": " + e.Msg
    +}
    +
    +// A Name represents an XML name (Local) annotated
    +// with a name space identifier (Space).
    +// In tokens returned by Decoder.Token, the Space identifier
    +// is given as a canonical URL, not the short prefix used
    +// in the document being parsed.
    +type Name struct {
    +	Space, Local string
    +}
    +
    +// An Attr represents an attribute in an XML element (Name=Value).
    +type Attr struct {
    +	Name  Name
    +	Value string
    +}
    +
    +// A Token is an interface holding one of the token types:
    +// StartElement, EndElement, CharData, Comment, ProcInst, or Directive.
    +type Token interface{}
    +
    +// A StartElement represents an XML start element.
    +type StartElement struct {
    +	Name Name
    +	Attr []Attr
    +}
    +
    +func (e StartElement) Copy() StartElement {
    +	attrs := make([]Attr, len(e.Attr))
    +	copy(attrs, e.Attr)
    +	e.Attr = attrs
    +	return e
    +}
    +
    +// End returns the corresponding XML end element.
    +func (e StartElement) End() EndElement {
    +	return EndElement{e.Name}
    +}
    +
    +// An EndElement represents an XML end element.
    +type EndElement struct {
    +	Name Name
    +}
    +
    +// A CharData represents XML character data (raw text),
    +// in which XML escape sequences have been replaced by
    +// the characters they represent.
    +type CharData []byte
    +
    +func makeCopy(b []byte) []byte {
    +	b1 := make([]byte, len(b))
    +	copy(b1, b)
    +	return b1
    +}
    +
    +func (c CharData) Copy() CharData { return CharData(makeCopy(c)) }
    +
    +// A Comment represents an XML comment of the form .
    +// The bytes do not include the  comment markers.
    +type Comment []byte
    +
    +func (c Comment) Copy() Comment { return Comment(makeCopy(c)) }
    +
    +// A ProcInst represents an XML processing instruction of the form 
    +type ProcInst struct {
    +	Target string
    +	Inst   []byte
    +}
    +
    +func (p ProcInst) Copy() ProcInst {
    +	p.Inst = makeCopy(p.Inst)
    +	return p
    +}
    +
    +// A Directive represents an XML directive of the form .
    +// The bytes do not include the  markers.
    +type Directive []byte
    +
    +func (d Directive) Copy() Directive { return Directive(makeCopy(d)) }
    +
    +// CopyToken returns a copy of a Token.
    +func CopyToken(t Token) Token {
    +	switch v := t.(type) {
    +	case CharData:
    +		return v.Copy()
    +	case Comment:
    +		return v.Copy()
    +	case Directive:
    +		return v.Copy()
    +	case ProcInst:
    +		return v.Copy()
    +	case StartElement:
    +		return v.Copy()
    +	}
    +	return t
    +}
    +
    +// A Decoder represents an XML parser reading a particular input stream.
    +// The parser assumes that its input is encoded in UTF-8.
    +type Decoder struct {
    +	// Strict defaults to true, enforcing the requirements
    +	// of the XML specification.
    +	// If set to false, the parser allows input containing common
    +	// mistakes:
    +	//	* If an element is missing an end tag, the parser invents
    +	//	  end tags as necessary to keep the return values from Token
    +	//	  properly balanced.
    +	//	* In attribute values and character data, unknown or malformed
    +	//	  character entities (sequences beginning with &) are left alone.
    +	//
    +	// Setting:
    +	//
    +	//	d.Strict = false;
    +	//	d.AutoClose = HTMLAutoClose;
    +	//	d.Entity = HTMLEntity
    +	//
    +	// creates a parser that can handle typical HTML.
    +	//
    +	// Strict mode does not enforce the requirements of the XML name spaces TR.
    +	// In particular it does not reject name space tags using undefined prefixes.
    +	// Such tags are recorded with the unknown prefix as the name space URL.
    +	Strict bool
    +
    +	// When Strict == false, AutoClose indicates a set of elements to
    +	// consider closed immediately after they are opened, regardless
    +	// of whether an end element is present.
    +	AutoClose []string
    +
    +	// Entity can be used to map non-standard entity names to string replacements.
    +	// The parser behaves as if these standard mappings are present in the map,
    +	// regardless of the actual map content:
    +	//
    +	//	"lt": "<",
    +	//	"gt": ">",
    +	//	"amp": "&",
    +	//	"apos": "'",
    +	//	"quot": `"`,
    +	Entity map[string]string
    +
    +	// CharsetReader, if non-nil, defines a function to generate
    +	// charset-conversion readers, converting from the provided
    +	// non-UTF-8 charset into UTF-8. If CharsetReader is nil or
    +	// returns an error, parsing stops with an error. One of the
    +	// the CharsetReader's result values must be non-nil.
    +	CharsetReader func(charset string, input io.Reader) (io.Reader, error)
    +
    +	// DefaultSpace sets the default name space used for unadorned tags,
    +	// as if the entire XML stream were wrapped in an element containing
    +	// the attribute xmlns="DefaultSpace".
    +	DefaultSpace string
    +
    +	// TypeFunc is used to map type names to actual types.
    +	TypeFunc func(string) (reflect.Type, bool)
    +
    +	r              io.ByteReader
    +	buf            bytes.Buffer
    +	saved          *bytes.Buffer
    +	stk            *stack
    +	free           *stack
    +	needClose      bool
    +	toClose        Name
    +	nextToken      Token
    +	nextByte       int
    +	ns             map[string]string
    +	err            error
    +	line           int
    +	unmarshalDepth int
    +}
    +
    +// NewDecoder creates a new XML parser reading from r.
    +// If r does not implement io.ByteReader, NewDecoder will
    +// do its own buffering.
    +func NewDecoder(r io.Reader) *Decoder {
    +	d := &Decoder{
    +		ns:       make(map[string]string),
    +		nextByte: -1,
    +		line:     1,
    +		Strict:   true,
    +	}
    +	d.switchToReader(r)
    +	return d
    +}
    +
    +// Token returns the next XML token in the input stream.
    +// At the end of the input stream, Token returns nil, io.EOF.
    +//
    +// Slices of bytes in the returned token data refer to the
    +// parser's internal buffer and remain valid only until the next
    +// call to Token.  To acquire a copy of the bytes, call CopyToken
    +// or the token's Copy method.
    +//
    +// Token expands self-closing elements such as 
    +// into separate start and end elements returned by successive calls. +// +// Token guarantees that the StartElement and EndElement +// tokens it returns are properly nested and matched: +// if Token encounters an unexpected end element, +// it will return an error. +// +// Token implements XML name spaces as described by +// http://www.w3.org/TR/REC-xml-names/. Each of the +// Name structures contained in the Token has the Space +// set to the URL identifying its name space when known. +// If Token encounters an unrecognized name space prefix, +// it uses the prefix as the Space rather than report an error. +func (d *Decoder) Token() (t Token, err error) { + if d.stk != nil && d.stk.kind == stkEOF { + err = io.EOF + return + } + if d.nextToken != nil { + t = d.nextToken + d.nextToken = nil + } else if t, err = d.rawToken(); err != nil { + return + } + + if !d.Strict { + if t1, ok := d.autoClose(t); ok { + d.nextToken = t + t = t1 + } + } + switch t1 := t.(type) { + case StartElement: + // In XML name spaces, the translations listed in the + // attributes apply to the element name and + // to the other attribute names, so process + // the translations first. + for _, a := range t1.Attr { + if a.Name.Space == "xmlns" { + v, ok := d.ns[a.Name.Local] + d.pushNs(a.Name.Local, v, ok) + d.ns[a.Name.Local] = a.Value + } + if a.Name.Space == "" && a.Name.Local == "xmlns" { + // Default space for untagged names + v, ok := d.ns[""] + d.pushNs("", v, ok) + d.ns[""] = a.Value + } + } + + d.translate(&t1.Name, true) + for i := range t1.Attr { + d.translate(&t1.Attr[i].Name, false) + } + d.pushElement(t1.Name) + t = t1 + + case EndElement: + d.translate(&t1.Name, true) + if !d.popElement(&t1) { + return nil, d.err + } + t = t1 + } + return +} + +const xmlURL = "http://www.w3.org/XML/1998/namespace" + +// Apply name space translation to name n. +// The default name space (for Space=="") +// applies only to element names, not to attribute names. +func (d *Decoder) translate(n *Name, isElementName bool) { + switch { + case n.Space == "xmlns": + return + case n.Space == "" && !isElementName: + return + case n.Space == "xml": + n.Space = xmlURL + case n.Space == "" && n.Local == "xmlns": + return + } + if v, ok := d.ns[n.Space]; ok { + n.Space = v + } else if n.Space == "" { + n.Space = d.DefaultSpace + } +} + +func (d *Decoder) switchToReader(r io.Reader) { + // Get efficient byte at a time reader. + // Assume that if reader has its own + // ReadByte, it's efficient enough. + // Otherwise, use bufio. + if rb, ok := r.(io.ByteReader); ok { + d.r = rb + } else { + d.r = bufio.NewReader(r) + } +} + +// Parsing state - stack holds old name space translations +// and the current set of open elements. The translations to pop when +// ending a given tag are *below* it on the stack, which is +// more work but forced on us by XML. +type stack struct { + next *stack + kind int + name Name + ok bool +} + +const ( + stkStart = iota + stkNs + stkEOF +) + +func (d *Decoder) push(kind int) *stack { + s := d.free + if s != nil { + d.free = s.next + } else { + s = new(stack) + } + s.next = d.stk + s.kind = kind + d.stk = s + return s +} + +func (d *Decoder) pop() *stack { + s := d.stk + if s != nil { + d.stk = s.next + s.next = d.free + d.free = s + } + return s +} + +// Record that after the current element is finished +// (that element is already pushed on the stack) +// Token should return EOF until popEOF is called. +func (d *Decoder) pushEOF() { + // Walk down stack to find Start. + // It might not be the top, because there might be stkNs + // entries above it. + start := d.stk + for start.kind != stkStart { + start = start.next + } + // The stkNs entries below a start are associated with that + // element too; skip over them. + for start.next != nil && start.next.kind == stkNs { + start = start.next + } + s := d.free + if s != nil { + d.free = s.next + } else { + s = new(stack) + } + s.kind = stkEOF + s.next = start.next + start.next = s +} + +// Undo a pushEOF. +// The element must have been finished, so the EOF should be at the top of the stack. +func (d *Decoder) popEOF() bool { + if d.stk == nil || d.stk.kind != stkEOF { + return false + } + d.pop() + return true +} + +// Record that we are starting an element with the given name. +func (d *Decoder) pushElement(name Name) { + s := d.push(stkStart) + s.name = name +} + +// Record that we are changing the value of ns[local]. +// The old value is url, ok. +func (d *Decoder) pushNs(local string, url string, ok bool) { + s := d.push(stkNs) + s.name.Local = local + s.name.Space = url + s.ok = ok +} + +// Creates a SyntaxError with the current line number. +func (d *Decoder) syntaxError(msg string) error { + return &SyntaxError{Msg: msg, Line: d.line} +} + +// Record that we are ending an element with the given name. +// The name must match the record at the top of the stack, +// which must be a pushElement record. +// After popping the element, apply any undo records from +// the stack to restore the name translations that existed +// before we saw this element. +func (d *Decoder) popElement(t *EndElement) bool { + s := d.pop() + name := t.Name + switch { + case s == nil || s.kind != stkStart: + d.err = d.syntaxError("unexpected end element ") + return false + case s.name.Local != name.Local: + if !d.Strict { + d.needClose = true + d.toClose = t.Name + t.Name = s.name + return true + } + d.err = d.syntaxError("element <" + s.name.Local + "> closed by ") + return false + case s.name.Space != name.Space: + d.err = d.syntaxError("element <" + s.name.Local + "> in space " + s.name.Space + + "closed by in space " + name.Space) + return false + } + + // Pop stack until a Start or EOF is on the top, undoing the + // translations that were associated with the element we just closed. + for d.stk != nil && d.stk.kind != stkStart && d.stk.kind != stkEOF { + s := d.pop() + if s.ok { + d.ns[s.name.Local] = s.name.Space + } else { + delete(d.ns, s.name.Local) + } + } + + return true +} + +// If the top element on the stack is autoclosing and +// t is not the end tag, invent the end tag. +func (d *Decoder) autoClose(t Token) (Token, bool) { + if d.stk == nil || d.stk.kind != stkStart { + return nil, false + } + name := strings.ToLower(d.stk.name.Local) + for _, s := range d.AutoClose { + if strings.ToLower(s) == name { + // This one should be auto closed if t doesn't close it. + et, ok := t.(EndElement) + if !ok || et.Name.Local != name { + return EndElement{d.stk.name}, true + } + break + } + } + return nil, false +} + +var errRawToken = errors.New("xml: cannot use RawToken from UnmarshalXML method") + +// RawToken is like Token but does not verify that +// start and end elements match and does not translate +// name space prefixes to their corresponding URLs. +func (d *Decoder) RawToken() (Token, error) { + if d.unmarshalDepth > 0 { + return nil, errRawToken + } + return d.rawToken() +} + +func (d *Decoder) rawToken() (Token, error) { + if d.err != nil { + return nil, d.err + } + if d.needClose { + // The last element we read was self-closing and + // we returned just the StartElement half. + // Return the EndElement half now. + d.needClose = false + return EndElement{d.toClose}, nil + } + + b, ok := d.getc() + if !ok { + return nil, d.err + } + + if b != '<' { + // Text section. + d.ungetc(b) + data := d.text(-1, false) + if data == nil { + return nil, d.err + } + return CharData(data), nil + } + + if b, ok = d.mustgetc(); !ok { + return nil, d.err + } + switch b { + case '/': + // ' { + d.err = d.syntaxError("invalid characters between ") + return nil, d.err + } + return EndElement{name}, nil + + case '?': + // ' { + break + } + b0 = b + } + data := d.buf.Bytes() + data = data[0 : len(data)-2] // chop ?> + + if target == "xml" { + enc := procInstEncoding(string(data)) + if enc != "" && enc != "utf-8" && enc != "UTF-8" { + if d.CharsetReader == nil { + d.err = fmt.Errorf("xml: encoding %q declared but Decoder.CharsetReader is nil", enc) + return nil, d.err + } + newr, err := d.CharsetReader(enc, d.r.(io.Reader)) + if err != nil { + d.err = fmt.Errorf("xml: opening charset %q: %v", enc, err) + return nil, d.err + } + if newr == nil { + panic("CharsetReader returned a nil Reader for charset " + enc) + } + d.switchToReader(newr) + } + } + return ProcInst{target, data}, nil + + case '!': + // ' { + break + } + b0, b1 = b1, b + } + data := d.buf.Bytes() + data = data[0 : len(data)-3] // chop --> + return Comment(data), nil + + case '[': // . + data := d.text(-1, true) + if data == nil { + return nil, d.err + } + return CharData(data), nil + } + + // Probably a directive: , , etc. + // We don't care, but accumulate for caller. Quoted angle + // brackets do not count for nesting. + d.buf.Reset() + d.buf.WriteByte(b) + inquote := uint8(0) + depth := 0 + for { + if b, ok = d.mustgetc(); !ok { + return nil, d.err + } + if inquote == 0 && b == '>' && depth == 0 { + break + } + HandleB: + d.buf.WriteByte(b) + switch { + case b == inquote: + inquote = 0 + + case inquote != 0: + // in quotes, no special action + + case b == '\'' || b == '"': + inquote = b + + case b == '>' && inquote == 0: + depth-- + + case b == '<' && inquote == 0: + // Look for **Please Note:** This guide is for demo purposes and is only using a single server -node. In a production cluster, 3 or 5 server nodes are recommended. - -## Steps - -### Step 1: Create a Job for Fabio - -Create a job for Fabio and name it `fabio.nomad` - -```hcl -job "fabio" { - datacenters = ["dc1"] - type = "system" - - group "fabio" { - task "fabio" { - driver = "docker" - config { - image = "fabiolb/fabio" - network_mode = "host" - } - - resources { - cpu = 200 - memory = 128 - network { - mbits = 20 - port "lb" { - static = 9999 - } - port "ui" { - static = 9998 - } - } - } - } - } -} -``` - -Setting `type` to [system][system] will ensure that fabio is run on all clients. -Please note that the `network_mode` option is set to `host` so that fabio can -communicate with Consul which is also running on the client nodes. - -### Step 2: Run the Fabio Job - -We can now register our fabio job: - -```shell -$ nomad job run fabio.nomad -==> Monitoring evaluation "fba4f04a" - Evaluation triggered by job "fabio" - Allocation "6e6367d4" created: node "f3739267", group "fabio" - Allocation "d17573b4" created: node "28d7f859", group "fabio" - Allocation "f3ad9b16" created: node "510898b6", group "fabio" - Evaluation status changed: "pending" -> "complete" -==> Evaluation "fba4f04a" finished with status "complete" -``` -At this point, you should be able to visit any one of your client nodes at port -`9998` and see the web interface for fabio. The routing table will be empty -since we have not yet deployed anything that fabio can route to. -Accordingly, if you visit any of the client nodes at port `9999` at this -point, you will get a `404` HTTP response. That will change soon. - -### Step 3: Create a Job for Apache Web Server - -Create a job for Apache and name it `webserver.nomad` - -```hcl -job "webserver" { - datacenters = ["dc1"] - type = "service" - - group "webserver" { - count = 3 - restart { - attempts = 2 - interval = "30m" - delay = "15s" - mode = "fail" - } - ephemeral_disk { - size = 300 - } - - task "apache" { - driver = "docker" - config { - image = "httpd:latest" - port_map { - http = 80 - } - } - - resources { - network { - mbits = 10 - port "http" {} - } - } - - service { - name = "apache-webserver" - tags = ["urlprefix-/"] - port = "http" - check { - name = "alive" - type = "http" - path = "/" - interval = "10s" - timeout = "2s" - } - } - } - } -} -``` - -Notice the tag in the service stanza begins with `urlprefix-`. This is how a -path is registered with fabio. In this case, we are registering the path '/' -with fabio (which will route us to the default page for Apache web server). - -### Step 4: Run the Job for Apache Web Server - -We can now register our job for Apache: - -```shell -$ nomad job run webserver.nomad -==> Monitoring evaluation "c7bcaf40" - Evaluation triggered by job "webserver" - Evaluation within deployment: "e3603b50" - Allocation "20951ad4" created: node "510898b6", group "webserver" - Allocation "43807686" created: node "28d7f859", group "webserver" - Allocation "7b60eb24" created: node "f3739267", group "webserver" - Evaluation status changed: "pending" -> "complete" -==> Evaluation "c7bcaf40" finished with status "complete" -``` -You have now deployed and registered your web servers with fabio! At this point, -you should be able to visit any of the Nomad clients at port `9999` and -see the default web page for Apache web server. If you visit fabio's web -interface by going to any of the client nodes at port `9998`, you will see that -the routing table has been populated as shown below (**Note:** your destination IP -addresses will be different). - -[![Routing Table][routing-table]][routing-table] - -Feel free to reduce the `count` in `webserver.nomad` for testing purposes. You -will see that you still get routed to the Apache home page by accessing -any client node on port `9999`. Accordingly, the routing table -in the web interface on port `9999` will reflect the changes. - -### Step 5: Place Nomad Client Nodes Behind AWS Load Balancer - -At this point, you are ready to place your Nomad client nodes behind an AWS load -balancer. Your Nomad client nodes may change over time, and it is important -to provide your end users with a single endpoint to access your services. This guide will use the [Classic Load Balancer][classic-lb]. - -The AWS [documentation][classic-lb-doc] provides instruction on how to create a -load balancer. The basic steps involve creating a load balancer, registering -instances behind the load balancer (in our case these will be the Nomad client -nodes), creating listeners, and configuring health checks. - -Once you are done -with this, you should be able to hit the DNS name of your load balancer at port -80 (or whichever port you configured in your listener) and see the home page of -Apache web server. If you configured your listener to also forward traffic to -the web interface at port `9998`, you should be able to access that as well. - -[![Home Page][lb-homepage]][lb-homepage] - -[![Routing Table][lb-routing-table]][lb-routing-table] - -[apache]: https://httpd.apache.org/ -[classic-lb]: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html -[classic-lb-doc]: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-getting-started.html -[elb]: https://aws.amazon.com/elasticloadbalancing/ -[fabio]: https://fabiolb.net/ -[lb-homepage]: /assets/images/lb-homepage.png -[lb-routing-table]: /assets/images/lb-routing-table.png -[routing-table]: /assets/images/routing-table.png -[system]: /docs/schedulers.html#system diff --git a/website/source/guides/load-balancing/load-balancing.html.md b/website/source/guides/load-balancing/load-balancing.html.md index 6cbbcc9c4c5..45647e297c8 100644 --- a/website/source/guides/load-balancing/load-balancing.html.md +++ b/website/source/guides/load-balancing/load-balancing.html.md @@ -9,13 +9,13 @@ description: |- # Load Balancing -There are multiple approaches to set up load balancing across a Nomad cluster. +These guides have been migrated to [HashiCorp's Learn website]. -Most of these methods assume Consul is installed alongside Nomad (see [Load -Balancing Strategies for -Consul](https://www.hashicorp.com/blog/load-balancing-strategies-for-consul)). +You can follow these links to find the specific guides on Learn: -- [Fabio](/guides/load-balancing/fabio.html) +- [Fabio](https://learn.hashicorp.com/nomad/load-balancing/fabio) +- [NGINX](https://learn.hashicorp.com/nomad/load-balancing/nginx) +- [HAProxy](https://learn.hashicorp.com/nomad/load-balancing/haproxy) +- [Traefik](https://learn.hashicorp.com/nomad/load-balancing/traefik) -Please refer to the specific documentation above or in the sidebar for more -detailed information about each strategy. +[HashiCorp's Learn website]: https://learn.hashicorp.com/nomad?track=load-balancing#load-balancing \ No newline at end of file diff --git a/website/source/guides/operating-a-job/configuring-tasks.html.md b/website/source/guides/operating-a-job/configuring-tasks.html.md index 546aaf0c84e..2e2f92ccc70 100644 --- a/website/source/guides/operating-a-job/configuring-tasks.html.md +++ b/website/source/guides/operating-a-job/configuring-tasks.html.md @@ -109,7 +109,7 @@ applications through environment variables. Nomad supports custom environment variables in two ways: * Interpolation in an `env` stanza -* Templated in the a `template` stanza +* Templated in a `template` stanza ### `env` stanza diff --git a/website/source/guides/operating-a-job/resource-utilization.html.md b/website/source/guides/operating-a-job/resource-utilization.html.md index 18012ccbb8d..43255fd8250 100644 --- a/website/source/guides/operating-a-job/resource-utilization.html.md +++ b/website/source/guides/operating-a-job/resource-utilization.html.md @@ -64,10 +64,10 @@ Time Type Description Here we can see that we are near the limit of our configured CPU but we have plenty of memory headroom. We can use this information to alter our job's -resources to better reflect is actually needs: +resources to better reflect its actual needs: ```hcl -resource { +resources { cpu = 200 memory = 10 } diff --git a/website/source/guides/operations/autopilot.html.md b/website/source/guides/operations/autopilot.html.md index f439fdef5ef..83e5932ccd1 100644 --- a/website/source/guides/operations/autopilot.html.md +++ b/website/source/guides/operations/autopilot.html.md @@ -14,7 +14,10 @@ servers, monitoring the state of the Raft cluster, and stable server introductio To enable Autopilot features (with the exception of dead server cleanup), the `raft_protocol` setting in the [server stanza](/docs/configuration/server.html) -must be set to 3 on all servers. In Nomad 0.8 and 0.9 this setting defaults to 2; in Nomad 0.10 it will default to 3. +must be set to 3 on all servers. This setting defaults to 2; a cluster configured with protocol 2 can be upgraded +to protocol 3 with a rolling update, provided time for membership to stabilize following each server update. +During an upgrade from raft protocol 2 to 3, use the `nomad operator raft list-peers` +command between server updates to verify that each server identifier is replaced with a UUID. For more information, see the [Version Upgrade section](/guides/upgrade/upgrade-specific.html#raft-protocol-version-compatibility) on Raft Protocol versions. diff --git a/website/source/guides/operations/monitoring-and-alerting/prometheus-metrics.html.md b/website/source/guides/operations/monitoring-and-alerting/prometheus-metrics.html.md index b49af5d2843..4501602af84 100644 --- a/website/source/guides/operations/monitoring-and-alerting/prometheus-metrics.html.md +++ b/website/source/guides/operations/monitoring-and-alerting/prometheus-metrics.html.md @@ -554,7 +554,7 @@ to send out notifications to a [receiver][receivers] of your choice. [consul_sd_config]: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#%3Cconsul_sd_config%3E [env]: /docs/runtime/environment.html [fabio]: https://fabiolb.net/ -[fabio-lb]: /guides/load-balancing/fabio.html +[fabio-lb]: https://learn.hashicorp.com/guides/load-balancing/fabio [new-targets]: /assets/images/new-targets.png [prometheus-targets]: /assets/images/prometheus-targets.png [running-jobs]: /assets/images/running-jobs.png diff --git a/website/source/guides/security/acl.html.markdown b/website/source/guides/security/acl.html.markdown index 3fe5bd011e3..112270b8be5 100644 --- a/website/source/guides/security/acl.html.markdown +++ b/website/source/guides/security/acl.html.markdown @@ -42,13 +42,14 @@ When ACL tokens are created, they can be optionally marked as `Global`. This cau The following table summarizes the ACL Rules that are available for constructing policy rules: -| Policy | Scope | +| Policy | Scope | | ---------- | -------------------------------------------- | -| [namespace](#namespace-rules) | Job related operations by namespace | -| [agent](#agent-rules) | Utility operations in the Agent API | -| [node](#node-rules) | Node-level catalog operations | +| [namespace](#namespace-rules) | Job related operations by namespace | +| [agent](#agent-rules) | Utility operations in the Agent API | +| [node](#node-rules) | Node-level catalog operations | | [operator](#operator-rules) | Cluster-level operations in the Operator API | | [quota](#quota-rules) | Quota specification related operations | +| [host_volume](#host_volume-rules) | host_volume related operations | Constructing rules from these policies is covered in detail in the Rule Specification section below. @@ -108,9 +109,7 @@ To enforce client endpoints, we need to enable ACLs on clients as well. This is ### Set an Anonymous Policy (Optional) -The ACL system uses a whitelist or default-deny model. This means by default no permissions are granted. -For clients making requests without ACL tokens, we may want to grant some basic level of access. This is done by setting rules -on the special "anonymous" policy. This policy is applied to any requests made without a token. +The ACL system uses a whitelist or default-deny model. This means by default no permissions are granted. For clients making requests without ACL tokens, we may want to grant some basic level of access. This is done by setting rules on the special "anonymous" policy. This policy is applied to any requests made without a token. To permit anonymous users to read, we can setup the following policy: @@ -149,9 +148,7 @@ $ curl https://localhost:4646/v1/jobs # Rule Specification -A core part of the ACL system is the rule language which is used to describe the policy that must be enforced. -We make use of the [HashiCorp Configuration Language (HCL)](https://github.com/hashicorp/hcl/) to specify rules. -This language is human readable and interoperable with JSON making it easy to machine-generate. Policies can contain any number of rules. +A core part of the ACL system is the rule language which is used to describe the policy that must be enforced. We make use of the [HashiCorp Configuration Language (HCL)](https://github.com/hashicorp/hcl/) to specify rules. This language is human readable and interoperable with JSON making it easy to machine-generate. Policies can contain any number of rules. Policies typically have several dispositions: @@ -234,13 +231,16 @@ Namespace rules are keyed by the namespace name they apply to. When no namespace * `dispatch-job` - Allows jobs to be dispatched * `read-logs` - Allows the logs associated with a job to be viewed. * `read-fs` - Allows the filesystem of allocations associated to be viewed. +* `alloc-exec` - Allows an operator to connect and run commands in running allocations. +* `alloc-node-exec` - Allows an operator to connect and run commands in allocations running without filesystem isolation, for example, raw_exec jobs. +* `alloc-lifecycle` - Allows an operator to stop individual allocations manually. * `sentinel-override` - Allows soft mandatory policies to be overridden. The coarse grained policy dispositions are shorthand for the fine grained capabilities: * `deny` policy - ["deny"] * `read` policy - ["list-jobs", "read-job"] -* `write` policy - ["list-jobs", "read-job", "submit-job", "read-logs", "read-fs", "dispatch-job"] +* `write` policy - ["list-jobs", "read-job", "submit-job", "dispatch-job", "read-logs", "read-fs", "alloc-exec", "alloc-lifecycle"] When both the policy short hand and a capabilities list are provided, the capabilities are merged: @@ -253,7 +253,7 @@ namespace "default" { } ``` -Namespaces definitions may also include globs, allowing a single policy definition to apply to a set of namespaces. For example, the below policy allows read access to most production namespaces, but allows write access to the "production-api" namespace, and rejects any access to the "production-web" namespace. +Namespace definitions may also include globs, allowing a single policy definition to apply to a set of namespaces. For example, the below policy allows read access to most production namespaces, but allows write access to the "production-api" namespace, and rejects any access to the "production-web" namespace. ``` namespace "production-*" { @@ -285,8 +285,7 @@ Will evaluate to deny for `production-web`, because it is 9 characters different ### Node Rules -The `node` policy controls access to the [Node API](/api/nodes.html) such as listing nodes or triggering a node drain. -Node rules are specified for all nodes using the `node` key: +The `node` policy controls access to the [Node API](/api/nodes.html) such as listing nodes or triggering a node drain. Node rules are specified for all nodes using the `node` key: ``` node { @@ -298,8 +297,7 @@ There's only one node policy allowed per rule set, and its value is set to one o ### Agent Rules -The `agent` policy controls access to the utility operations in the [Agent API](/api/agent.html), such as join and leave. -Agent rules are specified for all agents using the `agent` key: +The `agent` policy controls access to the utility operations in the [Agent API](/api/agent.html), such as join and leave. Agent rules are specified for all agents using the `agent` key: ``` agent { @@ -324,8 +322,7 @@ There's only one operator policy allowed per rule set, and its value is set to o ### Quota Rules -The `quota` policy controls access to the quota specification operations in the [Quota API](/api/quotas.html), such as quota creation and deletion. -Quota rules are specified for all quotas using the `quota` key: +The `quota` policy controls access to the quota specification operations in the [Quota API](/api/quotas.html), such as quota creation and deletion. Quota rules are specified for all quotas using the `quota` key: ``` quota { @@ -339,27 +336,51 @@ There's only one quota policy allowed per rule set, and its value is set to one ### Outages and Multi-Region Replication -The ACL system takes some steps to ensure operation during outages. Clients nodes maintain a limited -cache of ACL tokens and ACL policies that have recently or frequently been used, associated with a time-to-live (TTL). +The ACL system takes some steps to ensure operation during outages. Clients nodes maintain a limited cache of ACL tokens and ACL policies that have recently or frequently been used, associated with a time-to-live (TTL). -When the region servers are unavailable, the clients will automatically ignore the cache TTL, -and extend the cache until the outage has recovered. For any policies or tokens that are not cached, -they will be treated as missing and denied access until the outage has been resolved. +When the region servers are unavailable, the clients will automatically ignore the cache TTL, and extend the cache until the outage has recovered. For any policies or tokens that are not cached, they will be treated as missing and denied access until the outage has been resolved. -Nomad servers have all the policies and tokens locally and can continue serving requests even if -quorum is lost. The tokens and policies may become stale during this period as data is not actively -replicating, but will be automatically fixed when the outage has been resolved. +Nomad servers have all the policies and tokens locally and can continue serving requests even if quorum is lost. The tokens and policies may become stale during this period as data is not actively replicating, but will be automatically fixed when the outage has been resolved. -In a multi-region setup, there is a single authoritative region which is the source of truth for -ACL policies and global ACL tokens. All other regions asynchronously replicate from the authoritative -region. When replication is interrupted, the existing data is used for request processing and may -become stale. When the authoritative region is reachable, replication will resume and repair any -inconsistency. +In a multi-region setup, there is a single authoritative region which is the source of truth for ACL policies and global ACL tokens. All other regions asynchronously replicate from the authoritative region. When replication is interrupted, the existing data is used for request processing and may become stale. When the authoritative region is reachable, replication will resume and repair any inconsistency. + +### host_volume Rules + +The `host_volume` policy controls access to mounting and accessing host volumes. + +``` +host_volume "*" { + policy = "write" +} + +host_volume "prod-*" { + policy = "deny" +} + +host_volume "prod-ca-certificates" { + policy = "read" +} +``` + +Host volume rules are keyed to the volume names that they apply to. As with namespaces, you may use wildcards to reuse the same configuration across a set of volumes. In addition to the coarse grained policy specification, the `host_volume` stanza allows setting a more fine grained list of capabilities. This includes: + +- `deny` - Do not allow a user to mount a volume in any way. +- `mount-readonly` - Only allow the user to mount the volume as `readonly` +- `mount-readwrite` - Allow the user to mount the volume as `readonly` or `readwrite` if the `host_volume` configuration allows it. + +The course grained policy permissions are shorthand for the fine grained capabilities: + +- `deny` policy - ["deny"] +- `read` policy - ["mount-readonly"] +- `write` policy - ["mount-readonly", "mount-readwrite"] + +When both the policy short hand and a capabilities list are provided, the capabilities are merged. + +**Note:** Host Volume policies are applied when attempting to _use_ a volume, however, if a user has access to the Node API, they will be able to see that a volume exists in the `nomad node status` output regardless of this configuration. ### Resetting ACL Bootstrap -If all management tokens are lost, it is possible to reset the ACL bootstrap so that it can be performed again. -First, we need to determine the reset index, this can be done by calling the reset endpoint: +If all management tokens are lost, it is possible to reset the ACL bootstrap so that it can be performed again. First, we need to determine the reset index, this can be done by calling the reset endpoint: ``` $ nomad acl bootstrap @@ -367,8 +388,7 @@ $ nomad acl bootstrap Error bootstrapping: Unexpected response code: 500 (ACL bootstrap already done (reset index: 7)) ``` -Here we can see the `reset index`. To reset the ACL system, we create the -`acl-bootstrap-reset` file in the data directory of the **leader** node: +Here we can see the `reset index`. To reset the ACL system, we create the `acl-bootstrap-reset` file in the data directory of the **leader** node: ``` $ echo 7 >> /nomad-data-dir/server/acl-bootstrap-reset @@ -397,19 +417,15 @@ $ nomad acl bootstrap Error bootstrapping: Unexpected response code: 500 (Invalid bootstrap reset index (specified 7, reset index: 11)) ``` -This is because the reset file is in place, but with the incorrect index. -The reset file can be deleted, but Nomad will not reset the bootstrap until the index is corrected. +This is because the reset file is in place, but with the incorrect index. The reset file can be deleted, but Nomad will not reset the bootstrap until the index is corrected. + +~> **Note**: Resetting ACL Bootstrap does not automatically invalidate previous ACL tokens. All previous bootstrap and management token remains valid, and existing tools that utilize them remain functional. If the token is unused, or if a management token is suspected of being compromised, then we should invalidate it, update any existing system with new tokens, and audit all existing tokens. ## Vault Integration -HashiCorp Vault has a secret backend for generating short-lived Nomad tokens. As Vault has a number of -authentication backends, it could provide a workflow where a user or orchestration system authenticates -using an pre-existing identity service (LDAP, Okta, Amazon IAM, etc.) in order to obtain a short-lived -Nomad token. -~> HashiCorp Vault is a standalone product with its own set of deployment and - configuration best practices. Please review [Vault's - documentation](https://www.vaultproject.io/docs/index.html) before deploying it - in production. +HashiCorp Vault has a secret backend for generating short-lived Nomad tokens. As Vault has a number of authentication backends, it could provide a workflow where a user or orchestration system authenticates using an pre-existing identity service (LDAP, Okta, Amazon IAM, etc.) in order to obtain a short-lived Nomad token. + +~> HashiCorp Vault is a standalone product with its own set of deployment and configuration best practices. Please review [Vault's documentation](https://www.vaultproject.io/docs/index.html) before deploying it in production. For evaluation purposes, a Vault server in "dev" mode can be used. @@ -447,15 +463,15 @@ Root Token: f84b587e-5882-bba1-a3f0-d1a3d90ca105 ``` ### Pre-requisites + - Nomad ACL system bootstrapped. -- A management token (the bootstrap token can be used, but for production - systems it's recommended to have a separate token) +- A management token (You can use the bootstrap token; however, for production systems we recommended having an integration-specific token) - A set of policies created in Nomad -- An unsealed Vault server (Vault running in `dev` mode is unsealed - automatically upon startup) +- An unsealed Vault server (Vault running in `dev` mode is unsealed automatically upon startup) - Vault must be version 0.9.3 or later to have the Nomad plugin ### Configuration + Mount the [`nomad`][nomad_backend] secret backend in Vault: ``` @@ -472,10 +488,7 @@ $ vault write nomad/config/access \ Success! Data written to: nomad/config/access ``` -Vault secret backends have the concept of roles, which are configuration units that group one or more -Vault policies to a potential identity attribute, (e.g. LDAP Group membership). The name of the role -is specified on the path, while the mapping to policies is done by naming them in a comma separated list, -for example: +Vault secret backends have the concept of roles, which are configuration units that group one or more Vault policies to a potential identity attribute, (e.g. LDAP Group membership). The name of the role is specified on the path, while the mapping to policies is done by naming them in a comma separated list, for example: ``` $ vault write nomad/role/role-name policies=policyone,policytwo @@ -489,8 +502,7 @@ $ vault write nomad/role/role-name type=management global=true Success! Data written to: nomad/role/role-name ``` -Create a Vault policy to allow different identities to get tokens associated with a particular -role: +Create a Vault policy to allow different identities to get tokens associated with a particular role: ``` $ echo 'path "nomad/creds/role-name" { @@ -499,9 +511,7 @@ $ echo 'path "nomad/creds/role-name" { Policy 'nomad-user-policy' written. ``` -If you have an existing authentication backend (like LDAP), follow the relevant instructions to create -a role available on the [Authentication backends page](https://www.vaultproject.io/docs/auth/index.html). -Otherwise, for testing purposes, a Vault token can be generated associated with the policy: +If you have an existing authentication backend (like LDAP), follow the relevant instructions to create a role available on the [Authentication backends page](https://www.vaultproject.io/docs/auth/index.html). Otherwise, for testing purposes, a Vault token can be generated associated with the policy: ``` $ vault token create -policy=nomad-user-policy @@ -542,8 +552,7 @@ Create Index = 228 Modify Index = 228 ``` -Any user or process with access to Vault can now obtain short lived Nomad Tokens in order to -carry out operations, thus centralising the access to Nomad tokens. +Any user or process with access to Vault can now obtain short lived Nomad Tokens in order to carry out operations, thus centralizing the access to Nomad tokens. [nomad_backend]: https://www.vaultproject.io/docs/secrets/nomad/index.html diff --git a/website/source/guides/security/vault-pki-integration.html.md b/website/source/guides/security/vault-pki-integration.html.md index 56e7eac958e..ff2221c4466 100644 --- a/website/source/guides/security/vault-pki-integration.html.md +++ b/website/source/guides/security/vault-pki-integration.html.md @@ -239,8 +239,8 @@ Success! Uploaded policy: tls-policy Create a token based on `tls-policy` with the following command: -``` -$ vault token create -policy="tls-policy" -ttl=24h +```shell +$ vault token create -policy="tls-policy" -period=24h -orphan ``` If the command is successful, you will see output similar to the following: @@ -248,8 +248,8 @@ If the command is successful, you will see output similar to the following: ```shell Key Value --- ----- -token s.xafiYzh7MCMotHLu2d35hepR -token_accessor 9vj7q5nnF53JAcTyxvccpAZK +token s.m069Vpul3c4lfGnJ6unpxgxD +token_accessor HiZALO25hDQzSgyaglkzty3M token_duration 24h token_renewable true token_policies ["default" "tls-policy"] @@ -383,7 +383,7 @@ vault { address = "http://active.vault.service.consul:8200" # This value can also be specified via the environment variable VAULT_TOKEN. - token = "s.xafiYzh7MCMotHLu2d35hepR" + token = "s.m069Vpul3c4lfGnJ6unpxgxD" # This should also be less than or around 1/3 of your TTL for a predictable # behaviour. See https://github.com/hashicorp/vault/issues/3414 diff --git a/website/source/guides/stateful-workloads/portworx.html.md b/website/source/guides/stateful-workloads/portworx.html.md deleted file mode 100644 index 06484aecafd..00000000000 --- a/website/source/guides/stateful-workloads/portworx.html.md +++ /dev/null @@ -1,454 +0,0 @@ ---- -layout: "guides" -page_title: "Stateful Workloads with Portworx" -sidebar_current: "guides-stateful-workloads" -description: |- - There are multiple approaches to deploying stateful applications in Nomad. - This guide uses Portworx deploy a MySQL database. ---- - -# Stateful Workloads with Portworx - -Portworx integrates with Nomad and can manage storage for stateful workloads -running inside your Nomad cluster. This guide walks you through deploying an HA -MySQL workload. - -## Reference Material - -- [Portworx on Nomad][portworx-nomad] - -## Estimated Time to Complete - -20 minutes - -## Challenge - -Deploy an HA MySQL database with a replication factor of 3, ensuring the data -will be replicated on 3 different client nodes. - -## Solution - -Configure Portworx on each Nomad client node in order to create a storage pool -that the MySQL task can use for storage and replication. - -## Prerequisites - -To perform the tasks described in this guide, you need to have a Nomad -environment with Consul installed. You can use this [repo][repo] to easily -provision a sandbox environment. This guide will assume a cluster with one -server node and three client nodes. - -~> **Please Note:** This guide is for demo purposes and is only using a single -server node. In a production cluster, 3 or 5 server nodes are recommended. - -## Steps - -### Step 1: Ensure Block Device Requirements - -* Portworx needs an unformatted and unmounted block device that it can fully - manage. If you have provisioned a Nomad cluster in AWS using the environment - provided in this guide, you already have an external block device ready to use - (`/dev/xvdd`) with a capacity of 50 GB. - -* Ensure your root volume's size is at least 20 GB. If you are using the - environment provided in this guide, add the following line to your - `terraform.tfvars` file: - - ``` - root_block_device_size = 20 - ``` - -### Step 2: Install the MySQL client - -We will use the MySQL client to connect to our MySQL database and verify our data. -Ensure it is installed on each client node: - -``` -$ sudo apt install mysql-client -``` - -### Step 3: Set up the PX-OCI Bundle - -Run the following command on each client node to set up the [PX-OCI][px-oci] -bundle: - -``` -sudo docker run --entrypoint /runc-entry-point.sh \ - --rm -i --privileged=true \ - -v /opt/pwx:/opt/pwx -v /etc/pwx:/etc/pwx \ - portworx/px-enterprise:2.0.2.3 -``` - -If the command is successful, you will see output similar to the output show -below (the output has been abbreviated): - -``` -Unable to find image 'portworx/px-enterprise:2.0.2.3' locally -2.0.2.3: Pulling from portworx/px-enterprise -... -Status: Downloaded newer image for portworx/px-enterprise:2.0.2.3 -Executing with arguments: -INFO: Copying binaries... -INFO: Copying rootfs... -[###############################################################################[.....................................................................................................Total bytes written: 2303375360 (2.2GiB, 48MiB/s) -INFO: Done copying OCI content. -You can now run the Portworx OCI bundle by executing one of the following: - - # sudo /opt/pwx/bin/px-runc run [options] - # sudo /opt/pwx/bin/px-runc install [options] -... -``` - -### Step 4: Configure Portworx OCI Bundle - -Configure the Portworx OCI bundle on each client node by running the following -command (the values provided to the options will be different for your -environment): - -``` -$ sudo /opt/pwx/bin/px-runc install -k consul://172.31.49.111:8500 \ - -c my_test_cluster -s /dev/xvdd -``` -* You can use client node you are on with the `-k` option since Consul is - installed alongside Nomad - -* Be sure to provide the `-s` option with your external block device path - -If the configuration is successful, you will see the following output -(abbreviated): - -``` -INFO[0000] Rootfs found at /opt/pwx/oci/rootfs -INFO[0000] PX binaries found at /opt/pwx/bin/px-runc -INFO[0000] Initializing as version 2.0.2.3-c186a87 (OCI) -... -INFO[0000] Successfully written /etc/systemd/system/portworx.socket -INFO[0000] Successfully written /etc/systemd/system/portworx-output.service -INFO[0000] Successfully written /etc/systemd/system/portworx.service -``` - -Since we have created new unit files, please run the following command to reload -the systemd manager configuration: - -``` -sudo systemctl daemon-reload -``` - -### Step 5: Start Portworx and Check Status - -Run the following command to start Portworx: - -``` -$ sudo systemctl start portworx -``` -Verify the service: - -``` -$ sudo systemctl status portworx -● portworx.service - Portworx OCI Container - Loaded: loaded (/etc/systemd/system/portworx.service; disabled; vendor preset - Active: active (running) since Wed 2019-03-06 15:16:51 UTC; 1h 47min ago - Docs: https://docs.portworx.com/runc - Process: 28230 ExecStartPre=/bin/sh -c /opt/pwx/bin/runc delete -f portworx || - Main PID: 28238 (runc) -... -``` -Wait a few moments (Portworx may still be initializing) and then check the -status of Portworx using the `pxctl` command. - -``` -$ pxctl status -``` - -If everything is working properly, you should see the following output: - -``` -Status: PX is operational -License: Trial (expires in 31 days) -Node ID: 07113eef-0533-4de8-b1cf-4471c18a7cda - IP: 172.31.53.231 - Local Storage Pool: 1 pool - POOL IO_PRIORITY RAID_LEVEL USABLE USED STATUS ZONE REGION - 0 LOW raid0 50 GiB 4.4 GiB Online us-east-1c us-east-1 - Local Storage Devices: 1 device -``` -Once all nodes are configured, you should see a cluster summary with the total -capacity of the storage pool (if you're using the environment provided in this -guide, the total capacity will be 150 GB since the external block device -attached to each client nodes has a capacity of 50 GB): - -``` -Cluster Summary - Cluster ID: my_test_cluster - Cluster UUID: 705a1cbd-4d58-4a0e-a970-1e6b28375590 - Scheduler: none - Nodes: 3 node(s) with storage (3 online) -... -Global Storage Pool - Total Used : 13 GiB - Total Capacity : 150 GiB -``` - -### Step 6: Create a Portworx Volume - -Run the following command to create a Portworx volume that our job will be able -to use: - -``` -$ pxctl volume create -s 10 -r 3 mysql -``` -You should see output similar to what is shown below: - -``` -Volume successfully created: 693373920899724151 -``` - -* Please note from the options provided that the name of the volume we created - is `mysql` and the size is 10 GB. - -* We have configured a replication factor of 3 which ensures our data is - available on all 3 client nodes. - -Run `pxctl volume inspect mysql` to verify the status of the volume: - -``` -$ pxctl volume inspect mysql -Volume : 693373920899724151 - Name : mysql - Size : 10 GiB - Format : ext4 - HA : 3 -... - Replica sets on nodes: - Set 0 - Node : 172.31.58.210 (Pool 0) - Node : 172.31.51.110 (Pool 0) - Node : 172.31.48.98 (Pool 0) - Replication Status : Up -``` - -### Step 7: Create the `mysql.nomad` Job File - -We are now ready to deploy a MySQL database that can use Portworx for storage. -Create a file called `mysql.nomad` and provide it the following contents: - -``` -job "mysql-server" { - datacenters = ["dc1"] - type = "service" - - group "mysql-server" { - count = 1 - - restart { - attempts = 10 - interval = "5m" - delay = "25s" - mode = "delay" - } - - task "mysql-server" { - driver = "docker" - - env = { - "MYSQL_ROOT_PASSWORD" = "password" - } - - config { - image = "hashicorp/mysql-portworx-demo:latest" - - port_map { - db = 3306 - } - - volumes = [ - "mysql:/var/lib/mysql" - ] - - volume_driver = "pxd" - } - - resources { - cpu = 500 - memory = 1024 - - network { - port "db" { - static = 3306 - } - } - } - - service { - name = "mysql-server" - port = "db" - - check { - type = "tcp" - interval = "10s" - timeout = "2s" - } - } - } - } -} -``` - -* Please note from the job file that we are using the `pxd` volume driver that - has been configured from the previous steps. - -* The service name is `mysql-server` which we will use later to connect to the - database. - -### Step 8: Deploy the MySQL Database - -Register the job file you created in the previous step with the following -command: - -``` -$ nomad run mysql.nomad -==> Monitoring evaluation "aa478d82" - Evaluation triggered by job "mysql-server" - Allocation "6c3b3703" created: node "be8aad4e", group "mysql-server" - Evaluation status changed: "pending" -> "complete" -==> Evaluation "aa478d82" finished with status "complete" -``` - -Check the status of the allocation and ensure the task is running: - -``` -$ nomad status mysql-server -ID = mysql-server -... -Summary -Task Group Queued Starting Running Failed Complete Lost -mysql-server 0 0 1 0 0 0 -``` - -### Step 9: Connect to MySQL - -Using the mysql client (installed in [Step -2](#step-2-install-the-mysql-client)), connect to the database and access the -information: - -``` -mysql -h mysql-server.service.consul -u web -p -D itemcollection -``` -The password for this demo database is `password`. - -~> **Please Note:** This guide is for demo purposes and does not follow best -practices for securing database passwords. See [Keeping Passwords -Secure][password-security] for more information. - -Consul is installed alongside Nomad in this cluster so we were able to -connect using the `mysql-server` service name we registered with our task in -our job file. - -### Step 10: Add Data to MySQL - -Once you are connected to the database, verify the table `items` exists: - -``` -mysql> show tables; -+--------------------------+ -| Tables_in_itemcollection | -+--------------------------+ -| items | -+--------------------------+ -1 row in set (0.00 sec) -``` - -Display the contents of this table with the following command: - -``` -mysql> select * from items; -+----+----------+ -| id | name | -+----+----------+ -| 1 | bike | -| 2 | baseball | -| 3 | chair | -+----+----------+ -3 rows in set (0.00 sec) -``` - -Now add some data to this table (after we terminate our database in Nomad and -bring it back up, this data should still be intact): - -``` -mysql> INSERT INTO items (name) VALUES ('glove'); -``` - -Run the `INSERT INTO` command as many times as you like with different values. - -``` -mysql> INSERT INTO items (name) VALUES ('hat'); -mysql> INSERT INTO items (name) VALUES ('keyboard'); -``` -Once you you are done, type `exit` and return back to the Nomad client command -line: - -``` -mysql> exit -Bye -``` - -### Step 11: Stop and Purge the Database Job - -Run the following command to stop and purge the MySQL job from the cluster: - -``` -$ nomad stop -purge mysql-server -==> Monitoring evaluation "6b784149" - Evaluation triggered by job "mysql-server" - Evaluation status changed: "pending" -> "complete" -==> Evaluation "6b784149" finished with status "complete" -``` - -Verify no jobs are running in the cluster: - -``` -$ nomad status -No running jobs -``` -You can optionally stop the nomad service on whichever node you are on and move -to another node to simulate a node failure. - -### Step 12: Re-deploy the Database - -Using the `mysql.nomad` job file from [Step -6](#step-6-create-the-mysql-nomad-job-file), re-deploy the database to the Nomad -cluster. - -``` -==> Monitoring evaluation "61b4f648" - Evaluation triggered by job "mysql-server" - Allocation "8e1324d2" created: node "be8aad4e", group "mysql-server" - Evaluation status changed: "pending" -> "complete" -==> Evaluation "61b4f648" finished with status "complete" -``` - -### Step 13: Verify Data - -Once you re-connect to MySQL, you should be able to see that the information you -added prior to destroying the database is still present: - -``` -mysql> select * from items; -+----+----------+ -| id | name | -+----+----------+ -| 1 | bike | -| 2 | baseball | -| 3 | chair | -| 4 | glove | -| 5 | hat | -| 6 | keyboard | -+----+----------+ -6 rows in set (0.00 sec) -``` - -[password-security]: https://dev.mysql.com/doc/refman/8.0/en/password-security.html -[portworx-nomad]: https://docs.portworx.com/install-with-other/nomad -[px-oci]: https://docs.portworx.com/install-with-other/docker/standalone/#why-oci -[repo]: https://github.com/hashicorp/nomad/tree/master/terraform#provision-a-nomad-cluster-in-the-cloud diff --git a/website/source/guides/stateful-workloads/stateful-workloads.html.md b/website/source/guides/stateful-workloads/stateful-workloads.html.md index 650b5e0c115..5b084cd2676 100644 --- a/website/source/guides/stateful-workloads/stateful-workloads.html.md +++ b/website/source/guides/stateful-workloads/stateful-workloads.html.md @@ -9,22 +9,11 @@ description: |- # Stateful Workloads -The Docker task driver's support for [volumes][docker-volumes] enables Nomad to -integrate with software-defined storage (SDS) solutions like -[Portworx][portworx] to support stateful workloads. Please keep in mind that -Nomad does not actually manage storage pools or replication as these tasks are -delegated to the SDS providers. Please assess all factors and risks when -utilizing such providers to run stateful workloads (such as your production -database). +These guides have been migrated to [HashiCorp's Learn website]. -Nomad will be adding first class features in the near future that will allow a -user to mount local or remote storage volumes into task environments in a -consistent way across all task drivers and storage providers. +You can follow these links to find the specific guides on Learn: -Please refer to the specific documentation links below or in the sidebar for -more detailed information about using specific storage integrations. +- [Host Volumes](https://learn.hashicorp.com/nomad/stateful-workloads/host-volumes) +- [Portworx](https://learn.hashicorp.com/nomad//stateful-workloads/portworx) -- [Portworx](/guides/stateful-workloads/portworx.html) - -[docker-volumes]: /docs/drivers/docker.html#volumes -[portworx]: https://docs.portworx.com/install-with-other/nomad \ No newline at end of file +[HashiCorp's Learn website]: https://learn.hashicorp.com/nomad?track=stateful-workloads#stateful-workloads diff --git a/website/source/guides/ui.html.md b/website/source/guides/ui.html.md deleted file mode 100644 index b9b83244387..00000000000 --- a/website/source/guides/ui.html.md +++ /dev/null @@ -1,227 +0,0 @@ ---- -layout: "guides" -page_title: "Web UI" -sidebar_current: "guides-ui" -description: |- - The Nomad Web UI is a great companion for both operators and developers. - It is an easy to use way to inspect jobs, allocations, and nodes. ---- - -# Web UI - -The Nomad Web UI offers an easy to use web experience for inspecting a Nomad cluster. -Jobs, Deployments, Evaluations, Task Groups, Allocations, Logs, Clients, and Servers can all be -monitored from the Web UI. The Web UI also supports the use of ACL tokens for -clusters that are using the [ACL system](/guides/security/acl.html). - -## Accessing the Web UI - -The Web UI is served on the same address and port as the HTTP API. It is namespaced -under `/ui`, but visiting the root of the Nomad server in your browser will redirect you -to the Web UI. If you are unsure what port the Nomad HTTP API is running under, try the default -port, `4646`. - - - -## Reviewing Jobs - -The home page of the Web UI is the jobs list view. This page has a searchable, sortable, -paginated table of all jobs in the cluster, regardless of job status. This page will automatically -update as jobs are started, stopped, and allocations transition through states. - -[![Jobs List][img-jobs-list]][img-jobs-list] - -To sort the table, click a table column's header cell. To search, type a query into the searchbox. -By default the search will fuzzy-match any job name, but by starting a query with a `/`, the search -will instead be based on a regular expression. - -Sort property, sort direction, search term, and page number are all stored as query params to make -sharing links easier. - -In addition to name, each job in the table includes details such as current status, type, priority, -number of task groups, and an aggregation of all allocations by allocation status. - -[![Job Row Detail][img-jobs-row-detail]][img-jobs-row-detail] - -## Inspecting a Job - -Clicking on a job will navigate to the Job Detail page. This page shows a list of task groups -for the job as well as the status of each allocation for each task group by allocation status. - -This page will automatically update as deployments start and finish, new versions fail to be placed, -allocations transition through states, and evaluations update. - -[![Job Detail][img-job-detail]][img-job-detail] - -### Reading a Job Definition - -The Job Detail page has multiple tabs, one of which is Definition. On the Definition page, the full -job definition is shown as an interactive JSON object. - -[![Job Definition][img-job-definition]][img-job-definition] - -### Reviewing Past Job Versions - -Job Versions can be found on the Versions tab on the Job Detail page. This page has a timeline view of -every tracked version for the job. - -This page will automatically update as new versions are submitted to the cluster. - -[![Job Versions][img-job-versions]][img-job-versions] - -Each version can be toggled to also show the diff between job versions. - -[![Job Version Diff][img-job-version-diff]][img-job-version-diff] - -### Reviewing Past Job Deployments - -Job Deployments are listed on the Deployments tab on the Job Detail page. Every tracked deployment is listed in -a timeline view. - -This page will automatically update as new versions are submitted to the cluster and deployments proceed. - -[![Job Deployments][img-job-deployments]][img-job-deployments] - -Each deployment can be toggle to show information about the deployment, including canaries placed and desired, -allocations placed and desired, healthy and unhealthy allocations, task group metrics, and existing allocations. - -[![Job Deployment Detail][img-job-deployment-detail]][img-job-deployment-detail] - -### Monitoring a Current Job Deployment - -When a deployment is currently running, it is called out on the Job Detail Overview tab. It will update -automatically as canaries and allocations are placed and deemed healthy or unhealthy. - -[![Active Job Deployment][img-active-job-deployment]][img-active-job-deployment] - -### Inspecting Child Jobs - -Child jobs are only listed on the parent periodic or parameterized job detail pages. This leaves the global -jobs list view uncluttered. - -[![Periodic Job Detail Showing Children Jobs][img-periodic-job-detail]][img-periodic-job-detail] - -### Forcing a Periodic Launch - -From the job detail page for a periodic job, a child instance can be launched on demand rather than waiting -the scheduled amount of time as defined by the cron in the job definition. - -[![Periodic Force Launch Button][img-periodic-force-launch-button]][img-periodic-force-launch-button] - -### Inspecting a Dispatch Payload - -When a parameterized job is dispatched, the payload is captured and accessible from the bottom of the -parameterized child job detail page. The Web UI will attempt to parse the payload as JSON for improved -inspecting capabilities. - -[![Parameterized Dispatch Payload][img-parameterized-dispatch-payload]][img-parameterized-dispatch-payload] - -## Inspecting a Task Group - -Clicking on a task group from the Job Detail page will navigate to the Task Group Detail page. This page shows -the aggregated resource metrics for a task group as well as a list of all associated allocations. - -This page will automatically update as the allocations in the task group change states. - -[![Task Group Detail][img-task-group-detail]][img-task-group-detail] - -## Inspecting an Allocation - -From the Task Group Detail page, each allocation in the allocations table will report basic information about -the allocation, including utilized CPU and memory. - -Each allocation will poll for updates to current stats. - -[![Allocation Stats][img-allocation-stats]][img-allocation-stats] - -Clicking an allocation will navigate to the Allocation Detail page. From here, the event history for each task -in the allocation can be seen. - -This page will automatically update as new task events are emitted. - -[![Allocation Detail][img-allocation-detail]][img-allocation-detail] - -## Reviewing Logs - -Clicking on a task from the allocation detail will navigate to the Task Detail page. The Task Detail page includes -a list of recent events as well as a tab for logs. - -On the Logs tab, anything the task writes to `stdout` or `stderr` is accessible. The log stream component allows -for pausing and playing log streaming, jumping to the head or tail of the log, and toggling between `stdout` and -`stderr`. - -~> **Note.** The Web UI will first attempt to stream logs directly from the client agent to avoid unnecessary load -~> on server agents. If the client is not accessible, the Web UI will fallback to using the server for convenience. - -[![Task Logs][img-task-logs]][img-task-logs] - -~> **Note.** Only `stdout` and `stderr` are available in the UI. Any logs written to a file are available from the -~> CLI using the [`nomad alloc fs`](/docs/commands/alloc/fs.html), but filesystem access is not yet in the Web UI. - -## Reviewing Clients - -Clicking the Clients link in the left-hand menu of the Web UI will navigate to the Clients List page. This page -has a searchable, sortable, paginated table of all clients in the cluster. - -Sort property, sort direction, search term, and page number are all stored as query params to make -sharing links easier. - -In addition to name, each client in the table includes details such as current status, address, datacenter, -and number of allocations. - -This page will automatically update as nodes change states and work is allocated. - -[![Clients List][img-clients-list]][img-clients-list] - -## Inspecting a Client - -Clicking on a client will navigate to the Client Detail page. This page shows the status of the client as -well as the list of all allocations placed on the client. Additionally, all attributes of the machine are -itemized. - -This page will automatically update as allocations come and go on the client and the usage stats for an -allocation change. - -[![Client Detail][img-client-detail]][img-client-detail] - -## Inspecting Servers - -Clicking on the Servers link in the left-hand menu of the Web UI will navigate to the Servers List page. This -page lists all servers, including which one is the current leader. - -Clicking on a server in the list will open up a table that lists the Tags for the server. - -[![Server Detail][img-server-detail]][img-server-detail] - -## Using an ACL Token - -When the ACL system is enabled for the cluster, tokens can be used to gain elevated permissions to see -otherwise private jobs, nodes, and other details. To register a token with the Web UI, click ACL Tokens on the -right-hand side of the top navigation. - -The ACL Tokens page has a two field form for providing a token Secret ID and token Accessor ID. The form -automatically updates as the values change, and once a Secret ID is provided, all future HTTP requests the -Web UI makes will provide the Secret ID as the ACL Token via the `X-Nomad-Token` request header. - -[![ACL Tokens][img-acl-tokens]][img-acl-tokens] - -[img-jobs-list]: /assets/images/guide-ui-jobs-list.png -[img-jobs-row-detail]: /assets/images/guide-ui-jobs-row-detail.png -[img-job-detail]: /assets/images/guide-ui-job-detail.png -[img-job-definition]: /assets/images/guide-ui-job-definition.png -[img-job-versions]: /assets/images/guide-ui-job-versions.png -[img-job-version-diff]: /assets/images/guide-ui-job-version-diff.png -[img-job-deployments]: /assets/images/guide-ui-job-deployments.png -[img-job-deployment-detail]: /assets/images/guide-ui-job-deployment-detail.png -[img-active-job-deployment]: /assets/images/guide-ui-active-job-deployment.png -[img-task-group-detail]: /assets/images/guide-ui-task-group-detail.png -[img-allocation-stats]: /assets/images/guide-ui-allocation-stats.png -[img-allocation-detail]: /assets/images/guide-ui-allocation-detail.png -[img-clients-list]: /assets/images/guide-ui-clients-list.png -[img-client-detail]: /assets/images/guide-ui-client-detail.png -[img-server-detail]: /assets/images/guide-ui-server-detail.png -[img-acl-tokens]: /assets/images/guide-ui-acl-tokens.png -[img-task-logs]: /assets/images/guide-ui-task-logs.png -[img-parameterized-dispatch-payload]: /assets/images/guide-ui-parameterized-dispatch-payload.png -[img-periodic-force-launch-button]: /assets/images/guide-ui-periodic-force-launch-button.png -[img-periodic-job-detail]: /assets/images/guide-ui-periodic-job-detail.png diff --git a/website/source/guides/upgrade/upgrade-specific.html.md b/website/source/guides/upgrade/upgrade-specific.html.md index aa084261be9..9334dfc87c8 100644 --- a/website/source/guides/upgrade/upgrade-specific.html.md +++ b/website/source/guides/upgrade/upgrade-specific.html.md @@ -15,6 +15,92 @@ details provided for their upgrades as a result of new features or changed behavior. This page is used to document those details separately from the standard upgrade flow. +## Nomad 0.10.3 + +### mTLS Certificate Validation + +Nomad 0.10.3 includes a fix for a privilege escalation vulnerability in +validating TLS certificates for RPC with mTLS. Nomad RPC endpoints validated +that TLS client certificates had not expired and were signed by the same CA as +the Nomad node, but did not correctly check the certificate's name for the role +and region as described in the [Securing Nomad with TLS][tls-guide] guide. This +allows trusted operators with a client certificate signed by the CA to send RPC +calls as a Nomad client or server node, bypassing access control and accessing +any secrets available to a client. + +Nomad clusters configured for mTLS following the [Securing Nomad with TLS][tls-guide] +guide or the [Vault PKI Secrets Engine Integration][tls-vault-guide] guide +should already have certificates that will pass validation. Before upgrading to +Nomad 0.10.3, operators using mTLS with `verify_server_hostname = true` should +confirm that the common name or SAN of all Nomad client node certs is +`client..nomad`, and that the common name or SAN of all Nomad server +node certs is `server..nomad`. + +### Connection Limits Added + +Nomad 0.10.3 introduces the [limits][limits] agent configuration parameters for +mitigating denial of service attacks from users who are not authenticated via +mTLS. The default limits stanza is: + +```hcl +limits { + https_handshake_timeout = "5s" + http_max_conns_per_client = 100 + rpc_handshake_timeout = "5s" + rpc_max_conns_per_client = 100 +} +``` + +If your Nomad agent's endpoints are protected from unauthenticated users via +other mechanisms these limits may be safely disabled by setting them to `0`. + +However the defaults were chosen to be safe for a wide variety of Nomad +deployments and may protect against accidental abuses of the Nomad API that +could cause unintended resource usage. + +## Nomad 0.10.2 + +### Preemption Panic Fixed + +Nomad 0.9.7 and 0.10.2 fix a [server crashing bug][gh-6787] present in +scheduler preemption since 0.9.0. Users unable to immediately upgrade Nomad can +[disable preemption][preemption-api] to avoid the panic. + +### Dangling Docker Container Cleanup + +Nomad 0.10.2 addresses an issue occurring in heavily loaded clients, where +containers are started without being properly managed by Nomad. Nomad 0.10.2 +introduced a reaper that detects and kills such containers. + +Operators may opt to run reaper in a dry-mode or disabling it through a client config. + +For more information, see [Docker Dangling containers][dangling-containers]. + +## Nomad 0.10.0 + +### Deployments + +Nomad 0.10 enables rolling deployments for service jobs by default +and adds a default update stanza when a service job is created or updated. +This does not affect jobs with an update stanza. + +In pre-0.10 releases, when updating a service job without an update stanza, +all existing allocations are stopped while new allocations start up, +and this may cause a service degradation or an outage. +You can regain this behavior and disable deployments by setting `max_parallel` to 0. + +For more information, see [`update` stanza][update]. + +## Nomad 0.9.5 + +### Template Rendering + +Nomad 0.9.5 includes security fixes for privilege escalation vulnerabilities in handling of job `template` stanzas: + + * The client host's environment variables are now cleaned before rendering the template. If a template includes the `env` function, the job should include an [`env`](https://www.nomadproject.io/docs/job-specification/env.html) stanza to allow access to the variable in the template. + * The `plugin` function is no longer permitted by default and will raise an error if used in a template. Operator can opt-in to permitting this function with the new [`template.function_blacklist`](https://www.nomadproject.io/docs/configuration/client.html#template-parameters) field in the client configuration. + * The `file` function has been changed to restrict paths to fall inside the task directory by default. Paths that used the `NOMAD_TASK_DIR` environment variable to prefix file paths should work unchanged. Relative paths or symlinks that point outside the task directory will raise an error. An operator can opt-out of this protection with the new [`template.disable_file_sandbox`](https://www.nomadproject.io/docs/configuration/client.html#template-parameters) field in the client configuration. + ## Nomad 0.9.0 ### Preemption @@ -142,7 +228,7 @@ Raft Protocol versions supported by each Nomad version: 1 - 0.8 + 0.8 and later 1, 2, 3 @@ -339,11 +425,18 @@ deleted and then Nomad 0.3.0 can be launched. [drain-api]: /api/nodes.html#drain-node [drain-cli]: /docs/commands/node/drain.html +[dangling-containers]: /docs/drivers/docker.html#dangling-containers +[gh-6787]: https://github.com/hashicorp/nomad/issues/6787 [hcl2]: https://github.com/hashicorp/hcl2 +[limits]: /docs/configuration/index.html#limits [lxc]: /docs/drivers/external/lxc.html [migrate]: /docs/job-specification/migrate.html [plugins]: /docs/drivers/external/index.html [plugin-stanza]: /docs/configuration/plugin.html [preemption]: /docs/internals/scheduling/preemption.html +[preemption-api]: /api/operator.html#update-scheduler-configuration [task-config]: /docs/job-specification/task.html#config [validate]: /docs/commands/job/validate.html +[update]: /docs/job-specification/update.html +[tls-guide]: /guides/security/securing-nomad.html +[tls-vault-guide]: /guides/security/vault-pki-integration.html diff --git a/website/source/guides/web-ui/index.html.md b/website/source/guides/web-ui/index.html.md new file mode 100644 index 00000000000..8ee23f1590f --- /dev/null +++ b/website/source/guides/web-ui/index.html.md @@ -0,0 +1,21 @@ +--- +layout: "guides" +page_title: "Web UI" +sidebar_current: "guides-web-ui" +description: |- + Learn how to use the Nomad Web UI. +--- + +# Using Nomad with the Web UI + +These guides have been migrated to [HashiCorp's Learn website]. + +You can follow these links to find the specific guides on Learn: + +- [Access the Web UI](https://learn.hashicorp.com/nomad/web-ui/access) +- [Inspect Cluster Workload](https://learn.hashicorp.com/nomad/web-ui/ui-workload) (formerly "Operating a Job") +- [Inspect the Cluster](https://learn.hashicorp.com/nomad/web-ui/inspecting-the-cluster) +- [Submit a Job from the Web UI](https://learn.hashicorp.com/nomad/web-ui/submit-job) +- [Nomad UI Considerations](https://learn.hashicorp.com/nomad/web-ui/considerations) + +[HashiCorp's Learn website]: https://learn.hashicorp.com/nomad?track=web-ui#getting-started diff --git a/website/source/index.html.erb b/website/source/index.html.erb index 7674378ecbc..08175115067 100644 --- a/website/source/index.html.erb +++ b/website/source/index.html.erb @@ -9,9 +9,13 @@ description: |-
    + + <%= inline_svg "logo-hashicorp.svg", height: 120, class: "logo" %> -

    Deploy and Manage Any Containerized, Legacy, or Batch Application

    +

    Deploy and Manage Any Containerized, Legacy, or Batch Application

    Get Started Download <%= latest_version %> @@ -24,8 +28,8 @@ description: |-
    -

    Simple and Lightweight

    -

    +

    Simple and Lightweight

    +

    Nomad is an easy-to-use, flexible, and performant workload orchestrator that can deploy a mix of microservice, batch, containerized, and non-containerized applications. Nomad is easy to operate and scale and has native Consul and Vault integrations. @@ -34,20 +38,20 @@ description: |-

    -

    1. Declare Jobs

    -

    +

    1. Declare Jobs

    +

    Users compose and submit high-level job files. Nomad handles the scheduling and upgrading of the applications over time.

    -

    +

    This flexibility makes it easy to deploy one container, dozens of containers, or even millions.

    -

    2. Plan Changes

    -

    +

    2. Plan Changes

    +

    With built-in dry-run execution, Nomad shows what scheduling decisions it will take before it takes them. Operators can approve or deny these changes to create a safe and reproducible workflow. @@ -56,16 +60,16 @@ description: |-

    -

    3. Run Applications

    -

    +

    3. Run Applications

    +

    Nomad runs applications and ensures they keep running in failure scenarios. In addition to long-running services, Nomad can schedule batch jobs, distributed cron jobs, and parameterized jobs.

    -

    4. Monitor Progress

    -

    +

    4. Monitor Progress

    +

    Stream logs, send signals, and interact with the file system of scheduled applications. These operator-friendly commands bring the familiar debugging tools to a scheduled world. @@ -79,9 +83,9 @@ description: |-

    - Combine -

    Hybrid & Multi Cloud

    -

    + Combine +

    Hybrid & Multi Cloud

    +

    As more organizations adopt cloud technologies, the desire to run in multiple datacenters and multiple regions becomes critical. Nomad can span public and private clouds and treat all your infrastructure as a @@ -98,8 +102,8 @@ description: |-

    -

    Hybrid Cloud

    -

    +

    Hybrid Cloud

    +

    Nomad bridges the gap between the public and private cloud, creating a unified interface for developers to run any application on any infrastructure. Easily run services across your internal private cloud @@ -107,8 +111,8 @@ description: |-

    -

    Multi Cloud

    -

    +

    Multi Cloud

    +

    As more organizations adopt cloud technologies, the desire to run applications simultaneously across multiple clouds increases. Nomad combines the power of all cloud providers into a single, unified @@ -123,9 +127,9 @@ description: |-

    - Maintain -

    Simplify Operations

    -

    + Maintain +

    Simplify Operations

    +

    Nomad simplifies operations by supporting several deployment strategies to safely upgrade jobs, automatically handling machine failures, and providing a single workflow to deploy applications. @@ -135,7 +139,7 @@ description: |-

    -

    Rolling Deploys

    +

    Rolling Deploys

    @@ -143,7 +147,7 @@ description: |- <%= inline_svg "feature-rolling-deploys.svg" %>
    -

    +

    In order to update an application while reducing downtime, Nomad provides a built-in mechanism for rolling upgrades. Operators specify the rate at which they would like to upgrade their service in the @@ -158,12 +162,12 @@ description: |-

    -

    Blue/Green Deployments

    +

    Blue/Green Deployments

    -

    +

    Nomad supports native blue/green and canary deployments through the declarative job file syntax. Instead of doing a rolling upgrade of the existing allocations, the new version of the group is deployed along @@ -180,7 +184,7 @@ description: |-

    -

    Automatic Machine Failures

    +

    Automatic Machine Failures

    @@ -188,7 +192,7 @@ description: |- <%= inline_svg "feature-machine-failure.svg" %>
    -

    +

    Because it knows the state of all nodes and applications, if a node becomes unhealthy, Nomad will automatically reschedule the applications that were previously running on the unhealthy host @@ -205,9 +209,9 @@ description: |-

    - Support -

    Flexible Workloads

    -

    + Support +

    Flexible Workloads

    +

    In addition to supporting Linux, Windows, and Mac, Nomad has extensible support for containerized, virtualized, and standalone applications. Easily start Docker containers, VMs, or application @@ -224,8 +228,8 @@ description: |-

    -

    Diverse Technologies

    -

    +

    Diverse Technologies

    +

    By supporting a wide range of technologies such as Docker, rkt, and LXC, Nomad does not force you into a single technology. Easily use multiple container or virtualization runtimes simultaneously. @@ -234,8 +238,8 @@ description: |-

    -

    Multi OS

    -

    +

    Multi OS

    +

    The Nomad client runs on Linux, Windows, and Mac OS. This diverse operating system support enables using the same application scheduler for all your scheduling and runtime needs. @@ -250,9 +254,9 @@ description: |-

    - Maximize -

    Increase Utilization & Reduce Costs

    -

    + Maximize +

    Increase Utilization & Reduce Costs

    +

    Nomad uses bin packing to optimize application placement onto servers to maximize resource utilization, increase density, and help reduce costs. @@ -268,8 +272,8 @@ description: |-

    -

    Increase Density

    -

    +

    Increase Density

    +

    Nomad places applications and services based on a bin packing algorithm, which is used to optimize the resource utilization and density of applications. Nomad automatically augments the bin-packing @@ -278,8 +282,8 @@ description: |-

    -

    Reduce Costs

    -

    +

    Reduce Costs

    +

    By maximizing resource utilization, Nomad can help remove unused or under-utilized machines in the cluster, reducing overall costs. Additionally, Nomad enables organizations to utilize larger, more @@ -294,9 +298,9 @@ description: |-

    -

    Examples

    -

    Create and Submit Jobs

    -

    +

    Examples

    +

    Create and Submit Jobs

    +

    Easily create, validate, submit, and check the status of jobs using the Nomad CLI.

    @@ -346,8 +350,8 @@ description: |-
    -

    Plan Changes

    -

    +

    Plan Changes

    +

    Perform a dry-run to check application placement, scheduling decisions, and visualize failures before they happen.

    @@ -394,8 +398,8 @@ description: |-
    -

    View Application Logs

    -

    +

    View Application Logs

    +

    Stream application logs directly in the terminal to help analyze and debug applications.

    @@ -420,9 +424,9 @@ description: |-
    -
    +
    -

    +

    The introduction contains a walkthrough guide, glossary, and a range of examples for learning and experimenting with Nomad.

    diff --git a/website/source/intro/index.html.markdown b/website/source/intro/index.html.markdown index fc750f16608..f7bd7f7da20 100644 --- a/website/source/intro/index.html.markdown +++ b/website/source/intro/index.html.markdown @@ -16,6 +16,8 @@ Nomad is a flexible workload orchestrator that enables an organization to easily Nomad enables developers to use declarative infrastructure-as-code for deploying applications. Nomad uses bin packing to efficiently schedule jobs and optimize for resource utilization. Nomad is supported on macOS, Windows, and Linux. + + Nomad is widely adopted and used in production by PagerDuty, Target, Citadel, Trivago, SAP, Pandora, Roblox, eBay, Deluxe Entertainment, and more. ## Key Features diff --git a/website/source/intro/vs/ecs.html.md b/website/source/intro/vs/ecs.html.md index 519dce95e56..fd21c6c1cdb 100644 --- a/website/source/intro/vs/ecs.html.md +++ b/website/source/intro/vs/ecs.html.md @@ -8,7 +8,7 @@ description: |- # Nomad vs. AWS ECS -Amazon Web Services provides the EC2 Container Service (ECS), which is +Amazon Web Services provides the Elastic Container Service (ECS), which is a cluster manager. The ECS service is only available within AWS and can only be used for Docker workloads. Amazon provides customers with the agent that is installed on EC2 instances, but does not provide diff --git a/website/source/intro/who-uses-nomad.html.markdown b/website/source/intro/who-uses-nomad.html.markdown index fb862d2f286..6c1f790b12d 100644 --- a/website/source/intro/who-uses-nomad.html.markdown +++ b/website/source/intro/who-uses-nomad.html.markdown @@ -71,10 +71,7 @@ Nomad is widely adopted and used in production by PagerDuty, Target, Citadel, Tr * [Tech at N26 - The Bank in the Cloud](https://medium.com/insiden26/tech-at-n26-the-bank-in-the-cloud-e5ff818b528b) ####Elsevier - * [Eslevier’s Container Framework with Nomad, Terraform, and Consul](https://www.hashicorp.com/resources/elsevier-nomad-container-framework-demo) - -####Palantir - * [Enterprise Security at Palantir with the HashiCorp stack](https://www.hashicorp.com/resources/enterprise-security-hashicorp-stack) + * [Elsevier’s Container Framework with Nomad, Terraform, and Consul](https://www.hashicorp.com/resources/elsevier-nomad-container-framework-demo) ####Graymeta * [Backend Batch Processing At Scale with Nomad](https://www.hashicorp.com/resources/backend-batch-processing-nomad) diff --git a/website/source/layouts/docs.erb b/website/source/layouts/docs.erb index 317fa76101a..b8e883c1b10 100644 --- a/website/source/layouts/docs.erb +++ b/website/source/layouts/docs.erb @@ -231,6 +231,9 @@ +
  • > + monitor +
  • > namespace @@ -474,12 +509,23 @@ > LXC + > + Podman + > Singularity > Jailtask driver + + > + Pot + + + > + Firecracker driver + diff --git a/website/source/layouts/guides.erb b/website/source/layouts/guides.erb index ef12a0bc98e..9b7fb0c7393 100644 --- a/website/source/layouts/guides.erb +++ b/website/source/layouts/guides.erb @@ -32,6 +32,10 @@ + + > + Windows Service + @@ -51,7 +55,7 @@ Consul > - Consul Connect Beta + Consul Connect > Vault @@ -206,11 +210,6 @@ > Stateful Workloads - > @@ -251,31 +250,14 @@ > Load Balancing - > Governance & Policy - + + + > + Web UI diff --git a/website/source/layouts/inner.erb b/website/source/layouts/inner.erb index 5cb8b75d0d6..89b9babeb91 100644 --- a/website/source/layouts/inner.erb +++ b/website/source/layouts/inner.erb @@ -1,7 +1,7 @@ <% wrap_layout :layout do %>
    -